ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhODRiMWIKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorYnVpbGQvKgorY3VzdG9tcmMKZGlmZiAtLWdpdCBhLy50ZW1wbGF0ZWNvbmYgYi8udGVtcGxhdGVjb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MDk1ODAKLS0tIC9kZXYvbnVsbAorKysgYi8udGVtcGxhdGVjb25mCkBAIC0wLDAgKzEgQEAKK1RFTVBMQVRFQ09ORj0ke1RFTVBMQVRFQ09ORjotbWV0YS1waG9zcGhvci9jb25mfQpkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uOWJiOWIxYwotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOU0UKQEAgLTAsMCArMSBAQAoreW9jdG8tcG9reS9MSUNFTlNFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzA2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSwxMiBAQAorIyMgQnVpbGRpbmcgIyMKKworT3BlbkJNQyB1c2VzIFlvY3RvL09wZW4tRW1iZWRkZWQgZm9yIGEgYnVpbGQgc3lzdGVtLCB3aGljaCBzdXBwb3J0cyBhbiAKK291dC1vZi10cmVlIGJ1aWxkLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY3JlYXRlIGFuIGVtcHR5IGRpcmVjdG9yeQorc29tZXdoZXJlIHRvIGhvbGQgdGhlIGJ1aWxkLiAgVGhpcyBkaXJlY3Rvcnkgd2lsbCBnZXQgYmlnLgorCitUbyBzdGFydCBhIGJ1aWxkOgorCisgICAgY2QgPGJ1aWxkZGlyPgorICAgIC4gPHJlcG9kaXI+L29wZW5ibWMtZW52CisgICAgYml0YmFrZSBvYm1jLXBob3NwaG9yLWltYWdlCisKZGlmZiAtLWdpdCBhL2JpdGJha2UgYi9iaXRiYWtlCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjdkNDgyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvYml0YmFrZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24gYi9kb2N1bWVudGF0aW9uCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjM2MmQ3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEgYi9tZXRhCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjkwOTU5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvbWV0YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0NPUFlJTkcuTUlUIGIvbWV0YS1vcGVuYm1jLWJzcC9tZXRhLWFzcGVlZC9DT1BZSU5HLk1JVApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gQ09QWUlORy5NSVQKcmVuYW1lIHRvIG1ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvQ09QWUlORy5NSVQKZGlmZiAtLWdpdCBhL0NPUFlJTkcuYXBhY2hlLTIuMCBiL21ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvQ09QWUlORy5hcGFjaGUtMi4wCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBDT1BZSU5HLmFwYWNoZS0yLjAKcmVuYW1lIHRvIG1ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvQ09QWUlORy5hcGFjaGUtMi4wCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvbWV0YS1vcGVuYm1jLWJzcC9tZXRhLWFzcGVlZC9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMSUNFTlNFCnJlbmFtZSB0byBtZXRhLW9wZW5ibWMtYnNwL21ldGEtYXNwZWVkL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL2NvbmYvbGF5ZXIuY29uZiBiL21ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvY29uZi9sYXllci5jb25mCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb25mL2xheWVyLmNvbmYKcmVuYW1lIHRvIG1ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvY29uZi9sYXllci5jb25mCmRpZmYgLS1naXQgYS9tZXRhLWFzdDI0MDAvY29uZi9sYXllci5jb25mIGIvbWV0YS1vcGVuYm1jLWJzcC9tZXRhLWFzcGVlZC9tZXRhLWFzdDI0MDAvY29uZi9sYXllci5jb25mCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLWFzdDI0MDAvY29uZi9sYXllci5jb25mCnJlbmFtZSB0byBtZXRhLW9wZW5ibWMtYnNwL21ldGEtYXNwZWVkL21ldGEtYXN0MjQwMC9jb25mL2xheWVyLmNvbmYKZGlmZiAtLWdpdCBhL21ldGEtYXN0MjQwMC9jb25mL21hY2hpbmUvaW5jbHVkZS9hc3QyNDAwLmluYyBiL21ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvbWV0YS1hc3QyNDAwL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FzdDI0MDAuaW5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtZXRhLWFzdDI0MDAvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXN0MjQwMC5pbmMKcmVuYW1lIHRvIG1ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvbWV0YS1hc3QyNDAwL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FzdDI0MDAuaW5jCmRpZmYgLS1naXQgYS9tZXRhLWFzdDI0MDAvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtb2JtYy5iYmFwcGVuZCBiL21ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvbWV0YS1hc3QyNDAwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW9ibWMuYmJhcHBlbmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtYXN0MjQwMC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1vYm1jLmJiYXBwZW5kCnJlbmFtZSB0byBtZXRhLW9wZW5ibWMtYnNwL21ldGEtYXNwZWVkL21ldGEtYXN0MjQwMC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1vYm1jLmJiYXBwZW5kCmRpZmYgLS1naXQgYS9tZXRhLWFzdDI0MDAvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtb2JtYy8wMDAwLWNvbmZpZy5wYXRjaCBiL21ldGEtb3BlbmJtYy1ic3AvbWV0YS1hc3BlZWQvbWV0YS1hc3QyNDAwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW9ibWMvMDAwMC1jb25maWcucGF0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1ldGEtYXN0MjQwMC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1vYm1jLzAwMDAtY29uZmlnLnBhdGNoCnJlbmFtZSB0byBtZXRhLW9wZW5ibWMtYnNwL21ldGEtYXNwZWVkL21ldGEtYXN0MjQwMC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1vYm1jLzAwMDAtY29uZmlnLnBhdGNoCmRpZmYgLS1naXQgYS9tZXRhLWFzdDI0MDAvcmVjaXBlcy50eHQgYi9tZXRhLW9wZW5ibWMtYnNwL21ldGEtYXNwZWVkL21ldGEtYXN0MjQwMC9yZWNpcGVzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbWV0YS1hc3QyNDAwL3JlY2lwZXMudHh0CnJlbmFtZSB0byBtZXRhLW9wZW5ibWMtYnNwL21ldGEtYXNwZWVkL21ldGEtYXN0MjQwMC9yZWNpcGVzLnR4dApkaWZmIC0tZ2l0IGEvQ09QWUlORy5NSVQgYi9tZXRhLXBob3NwaG9yL0NPUFlJTkcuTUlUCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gQ09QWUlORy5NSVQKY29weSB0byBtZXRhLXBob3NwaG9yL0NPUFlJTkcuTUlUCmRpZmYgLS1naXQgYS9DT1BZSU5HLmFwYWNoZS0yLjAgYi9tZXRhLXBob3NwaG9yL0NPUFlJTkcuYXBhY2hlLTIuMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIENPUFlJTkcuYXBhY2hlLTIuMApjb3B5IHRvIG1ldGEtcGhvc3Bob3IvQ09QWUlORy5hcGFjaGUtMi4wCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvbWV0YS1waG9zcGhvci9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gTElDRU5TRQpjb3B5IHRvIG1ldGEtcGhvc3Bob3IvTElDRU5TRQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItYy1kYWVtb24uYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWMtZGFlbW9uLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxZDE3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWMtZGFlbW9uLmJiY2xhc3MKQEAgLTAsMCArMSwxNyBAQAorIyBDb21tb24gY29kZSBmb3IgZGJ1cyBhcHBsaWNhdGlvbnMgdXNpbmcgYy4KKworaW5oZXJpdCBvYm1jLXBob3NwaG9yLXN5c3RlbWQKK2luaGVyaXQgb2JtYy1waG9zcGhvci1saWNlbnNlCisKK0RFUEVORFMgKz0gImdsaWItMi4wIgorU1JDX1VSSSArPSAiIFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyAgICAgICAgZmlsZTovLyR7UE59LmMgXAorICAgICAgICAiCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICAgICAjIGluc3RhbGwgdGhlIGJpbmFyeQorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LyR7UE59ICR7RH0ke3NiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzLW1nbXQuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3N2RhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzLW1nbXQuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKKyMgQ29tbW9uIGNvZGUgZm9yIHJlY2lwZXMgdGhhdCBpbXBsZW1lbnQgUGhvc3Bob3IgT3BlbkJNQyBjaGFzc2lzIG1hbmFnZW1lbnQuCisKK1JQUk9WSURFU18ke1BOfSArPSAidmlydHVhbC9vYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdCIKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWRidXMtc2VydmljZS5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItZGJ1cy1zZXJ2aWNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxMzJmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWRidXMtc2VydmljZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjAgQEAKKyMgQ29tbW9uIGNvZGUgZm9yIGFwcGxpY2F0aW9ucyBwcm92aWRpbmcgYSBELUJ1cyBzZXJ2aWNlLgorCisjIENsYXNzIHVzZXJzIHNob3VsZCBkZWZpbmUgREJVU19TRVJWSUNFUyBwcmlvciB0byBpbmNsdWRpbmcuCisKK1JERVBFTkRTXyR7UE59ICs9ICJkYnVzLXBlcm1zIgorCitweXRob24oKSB7CisgICAgICAgIHNlcnZpY2VzID0gZC5nZXRWYXIoJ0RCVVNfU0VSVklDRVMnLCBUcnVlKQorICAgICAgICBpZiBzZXJ2aWNlczoKKyAgICAgICAgICAgICAgICB1cmlzID0gIiAiLmpvaW4oIFsgJ2ZpbGU6Ly8nICsgcyArICcuY29uZicgZm9yIHMgaW4gc2VydmljZXMuc3BsaXQoKSBdICkKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignU1JDX1VSSScsICcgJyArIHVyaXMgKyAnICcpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICAgICAjIGluc3RhbGwgdGhlIHNlcnZpY2UgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorICAgICAgICBmb3IgcyBpbiAke0RCVVNfU0VSVklDRVN9OyBkbworICAgICAgICAgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8kcy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZC8kcy5jb25mCisgICAgICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWV2ZW50LW1nbXQuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWV2ZW50LW1nbXQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWYyZWRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdC5iYmNsYXNzCkBAIC0wLDAgKzEsMyBAQAorIyBDb21tb24gY29kZSBmb3IgcmVjaXBlcyB0aGF0IGltcGxlbWVudCBQaG9zcGhvciBPcGVuQk1DIGV2ZW50IG1hbmFnZW1lbnQuCisKK1JQUk9WSURFU18ke1BOfSArPSAidmlydHVhbC9vYm1jLXBob3NwaG9yLWV2ZW50LW1nbXQiCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1mYW4tbWdtdC5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItZmFuLW1nbXQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzMzNzZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItZmFuLW1nbXQuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKKyMgQ29tbW9uIGNvZGUgZm9yIHJlY2lwZXMgdGhhdCBpbXBsZW1lbnQgUGhvc3Bob3IgT3BlbkJNQyBmYW4gbWFuYWdlbWVudC4KKworUlBST1ZJREVTXyR7UE59ICs9ICJ2aXJ0dWFsL29ibWMtcGhvc3Bob3ItZmFuLW1nbXQiCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1mbGFzaC1tZ210LmJiY2xhc3MgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1mbGFzaC1tZ210LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2Njk0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWZsYXNoLW1nbXQuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKKyMgQ29tbW9uIGNvZGUgZm9yIHJlY2lwZXMgdGhhdCBpbXBsZW1lbnQgUGhvc3Bob3IgT3BlbkJNQyBmbGFzaCBtYW5hZ2VtZW50LgorCitSUFJPVklERVNfJHtQTn0gKz0gInZpcnR1YWwvb2JtYy1waG9zcGhvci1mbGFzaC1tZ210IgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItaW1hZ2UuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwYzg0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLWltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzOSBAQAorIyBDb21tb24gY29kZSBmb3IgZ2VuZXJhdGluZyBQaG9zcGhvciBPcGVuQk1DIGltYWdlcy4KKworIyBBZGRpdGlvbmFsIElNQUdFX0ZFQVRVUkVTIGF2YWlsYWJsZSB3aXRoIFBob3NwaG9yIE9wZW5CTUM6CisjCisjIC0gb2JtYy1waG9zcGhvci1mYW4tbWdtdCAgICAgICAgICAgIC0gUGhvc3Bob3IgT3BlbkJNQyBmYW4gbWFuYWdlbWVudAorIyAtIG9ibWMtcGhvc3Bob3ItY2hhc3Npcy1tZ210ICAgICAgICAtIFBob3NwaG9yIE9wZW5CTUMgY2hhc3NpcyBtYW5hZ2VtZW50CisjIC0gb2JtYy1waG9zcGhvci1zZW5zb3ItbWdtdCAgICAgICAgIC0gUGhvc3Bob3IgT3BlbkJNQyBzZW5zb3IgbWFuYWdlbWVudAorIyAtIG9ibWMtcGhvc3Bob3ItZmxhc2gtbWdtdCAgICAgICAgICAtIFBob3NwaG9yIE9wZW5CTUMgZmxhc2ggbWFuYWdlbWVudAorIyAtIG9ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdCAgICAgICAgICAtIFBob3NwaG9yIE9wZW5CTUMgZXZlbnQgbWFuYWdlbWVudAorIyAtIG9ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQgICAgICAgICAtIFBob3NwaG9yIE9wZW5CTUMgcG9saWN5IG1hbmFnZW1lbnQKKyMgLSBvYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210ICAgICAgICAgLSBQaG9zcGhvciBPcGVuQk1DIHN5c3RlbSBtYW5hZ2VtZW50CisKK2luaGVyaXQgY29yZS1pbWFnZQoraW5oZXJpdCBvYm1jLXBob3NwaG9yLWxpY2Vuc2UKKworRkVBVFVSRV9QQUNLQUdFU19vYm1jLXBob3NwaG9yLWZhbi1tZ210ID89ICJwYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLWZhbi1tZ210IgorRkVBVFVSRV9QQUNLQUdFU19vYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdCA/PSAicGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1jaGFzc2lzLW1nbXQiCitGRUFUVVJFX1BBQ0tBR0VTX29ibWMtcGhvc3Bob3Itc2Vuc29yLW1nbXQgPz0gInBhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtc2Vuc29yLW1nbXQiCitGRUFUVVJFX1BBQ0tBR0VTX29ibWMtcGhvc3Bob3ItZmxhc2gtbWdtdCA/PSAicGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1mbGFzaC1tZ210IgorRkVBVFVSRV9QQUNLQUdFU19vYm1jLXBob3NwaG9yLWV2ZW50LW1nbXQgPz0gInBhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtZXZlbnQtbWdtdCIKK0ZFQVRVUkVfUEFDS0FHRVNfb2JtYy1waG9zcGhvci1wb2xpY3ktbWdtdCA/PSAicGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1wb2xpY3ktbWdtdCIKK0ZFQVRVUkVfUEFDS0FHRVNfb2JtYy1waG9zcGhvci1zeXN0ZW0tbWdtdCA/PSAicGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1zeXN0ZW0tbWdtdCIKKworIyBJbnN0YWxsIGVudGlyZSBQaG9zcGhvciBhcHBsaWNhdGlvbiBzdGFjayBieSBkZWZhdWx0CitJTUFHRV9GRUFUVVJFUyArPSAiIFwKKyAgICAgICBvYm1jLXBob3NwaG9yLWZhbi1tZ210IFwKKyAgICAgICBvYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdCBcCisgICAgICAgb2JtYy1waG9zcGhvci1zZW5zb3ItbWdtdCBcCisgICAgICAgb2JtYy1waG9zcGhvci1mbGFzaC1tZ210IFwKKyAgICAgICBvYm1jLXBob3NwaG9yLWV2ZW50LW1nbXQgXAorICAgICAgIG9ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQgXAorICAgICAgIG9ibWMtcGhvc3Bob3Itc3lzdGVtLW1nbXQgXAorICAgICAgIHNzaC1zZXJ2ZXItZHJvcGJlYXIgXAorICAgICAgICIKKworSU1BR0VfSU5TVEFMTCArPSAiIFwKKyAgICAgICBiYXNoIFwKKyAgICAgICBwYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLWV4dHJhcyBcCisgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItbGljZW5zZS5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItbGljZW5zZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OTRmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1saWNlbnNlLmJiY2xhc3MKQEAgLTAsMCArMSw0IEBACisjIENvbW1vbiBjb2RlIGZvciBwYWNrYWdlcyBkaXN0cmlidXRlZCB3aXRob3V0IGEgbGljZW5zZSB0aGF0IHdhbnQgQXBhY2hlLTIuMC4KKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtQSE9TUEhPUkJBU0V9L0NPUFlJTkcuYXBhY2hlLTIuMDttZDU9MzQ0MDBiNjgwNzJkNzEwZmVjZDBhMjk0MGEwZDE2NTgiCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1wb2xpY3ktbWdtdC5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmUwY2JlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKKyMgQ29tbW9uIGNvZGUgZm9yIHJlY2lwZXMgdGhhdCBpbXBsZW1lbnQgUGhvc3Bob3IgT3BlbkJNQyBwb2xpY3kgbWFuYWdlbWVudC4KKworUlBST1ZJREVTXyR7UE59ICs9ICJ2aXJ0dWFsL29ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQiCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1weS1kYWVtb24uYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXB5LWRhZW1vbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YzI3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1weS1kYWVtb24uYmJjbGFzcwpAQCAtMCwwICsxLDE3IEBACisjIENvbW1vbiBjb2RlIGZvciBkYnVzIGFwcGxpY2F0aW9ucyB1c2luZyBweXRob24uCisKK2luaGVyaXQgYWxsYXJjaAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLXN5c3RlbWQKK2luaGVyaXQgb2JtYy1waG9zcGhvci1saWNlbnNlCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorU1JDX1VSSSArPSAiIFwKKyAgICAgICAgZmlsZTovLyR7UE59LnB5IFwKKyAgICAgICAgIgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgIyBpbnN0YWxsIHRoZSBzY3JpcHQKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8ke1BOfS5weSAke0R9JHtzYmluZGlyfS8ke1BOfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItcHlkYnVzLXNlcnZpY2UuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXB5ZGJ1cy1zZXJ2aWNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM2ZjllNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXB5ZGJ1cy1zZXJ2aWNlLmJiY2xhc3MKQEAgLTAsMCArMSw2IEBACisjIENvbW1vbiBjb2RlIGZvciBhcHBsaWNhdGlvbnMgcHJvdmlkaW5nIGEgRC1CdXMgc2VydmljZSB1c2luZyBweXRob24tZGJ1cyBiaW5kaW5ncy4KKworIyBDbGFzcyB1c2VycyBzaG91bGQgZGVmaW5lIERCVVNfU0VSVklDRVMgcHJpb3IgdG8gaW5jbHVkaW5nLgorCitpbmhlcml0IG9ibWMtcGhvc3Bob3ItZGJ1cy1zZXJ2aWNlCitpbmhlcml0IG9ibWMtcGhvc3Bob3ItcHktZGFlbW9uCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1zZGJ1cy1zZXJ2aWNlLmJiY2xhc3MgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1zZGJ1cy1zZXJ2aWNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5ODUzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXNkYnVzLXNlcnZpY2UuYmJjbGFzcwpAQCAtMCwwICsxLDkgQEAKKyMgQ29tbW9uIGNvZGUgZm9yIGFwcGxpY2F0aW9ucyBwcm92aWRpbmcgYSBELUJ1cyBzZXJ2aWNlIHVzaW5nIHNkLWJ1cyBiaW5kaW5ncy4KKworIyBDbGFzcyB1c2VycyBzaG91bGQgZGVmaW5lIERCVVNfU0VSVklDRVMgcHJpb3IgdG8gaW5jbHVkaW5nLgorCitERVBFTkRTICs9ICJzeXN0ZW1kIgorUkRFUEVORFNfJHtQTn0gKz0gImxpYnN5c3RlbWQiCisKK2luaGVyaXQgb2JtYy1waG9zcGhvci1kYnVzLXNlcnZpY2UKK2luaGVyaXQgb2JtYy1waG9zcGhvci1jLWRhZW1vbgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3Itc2Vuc29yLW1nbXQuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXNlbnNvci1tZ210LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzOTM4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXNlbnNvci1tZ210LmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACisjIENvbW1vbiBjb2RlIGZvciByZWNpcGVzIHRoYXQgaW1wbGVtZW50IFBob3NwaG9yIE9wZW5CTUMgc2Vuc29yIG1hbmFnZW1lbnQuCisKK1JQUk9WSURFU18ke1BOfSArPSAidmlydHVhbC9vYm1jLXBob3NwaG9yLXNlbnNvci1tZ210IgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3Itc3lzdGVtLW1nbXQuYmJjbGFzcyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzOWQyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY2xhc3Nlcy9vYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210LmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACisjIENvbW1vbiBjb2RlIGZvciByZWNpcGVzIHRoYXQgaW1wbGVtZW50IFBob3NwaG9yIE9wZW5CTUMgc3lzdGVtIG1hbmFnZW1lbnQuCisKK1JQUk9WSURFU18ke1BOfSArPSAidmlydHVhbC9vYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210IgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3Itc3lzdGVtZC5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3Itc3lzdGVtZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZDJkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci1zeXN0ZW1kLmJiY2xhc3MKQEAgLTAsMCArMSwxNCBAQAorIyBDb21tb24gY29kZSBmb3IgUGhvc3Bob3IgT3BlbkJNQyBzeXN0ZW1kIHNlcnZpY2VzLgorCitpbmhlcml0IHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiR7UE59LnNlcnZpY2UiCitTUkNfVVJJICs9ICIgXAorICAgICAgICBmaWxlOi8vJHtQTn0uc2VydmljZSBcCisgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgICAgICMgaW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8ke1BOfS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCit9CmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NsYXNzZXMvb2JtYy1waG9zcGhvci11dGlscy5iYmNsYXNzIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItdXRpbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjU1NjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jbGFzc2VzL29ibWMtcGhvc3Bob3ItdXRpbHMuYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNoZWNraW5nIGZlYXR1cmUgdmFyaWFibGVzLgorCitpbmhlcml0IHV0aWxzCisKK2RlZiBkZl9lbmFibGVkKGZlYXR1cmUsIHZhbHVlLCBkKToKKyAgICAgICAgcmV0dXJuIGJhc2VfY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsIGZlYXR1cmUsIHZhbHVlLCAiIiwgZCkKKworZGVmIG1mX2VuYWJsZWQoZmVhdHVyZSwgdmFsdWUsIGQpOgorICAgICAgICByZXR1cm4gYmFzZV9jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsIGZlYXR1cmUsIHZhbHVlLCAiIiwgZCkKKworZGVmIGNmX2VuYWJsZWQoZmVhdHVyZSwgdmFsdWUsIGQpOgorICAgICAgICByZXR1cm4gdmFsdWUgaWYgZGZfZW5hYmxlZChmZWF0dXJlLCB2YWx1ZSwgZCkgXAorICAgICAgICAgICAgICAgIGFuZCBtZl9lbmFibGVkKGZlYXR1cmUsIHZhbHVlLCBkKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICIiCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfJS5iYmFwcGVuZCBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8lLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGE1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfJS5iYmFwcGVuZApAQCAtMCwwICsxLDExIEBACisKKyMgR2VuZXJhbCBjb25maWcgc2V0dGluZ3MuCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiBzaGFyZWQgbm8taHcgbm8tZXJyIG5vLXBzayBuby1zcnAgbm8tZW5naW5lcyAiCisKKyMgRGlzYWJsZSBTU0wgKGtlZXAgVExTIG9ubHkpLgorRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgbm8tc3NsMiBuby1zc2wzICIKKworIyBEaXNhYmxlIHZhcmlvdXMgYWxnb3JpdGhtcy4KK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIG5vLWlkZWEgbm8tbWQyIG5vLW1kYzIgbm8tcmM1IG5vLW1kNCBcCisgICAgICAgIG5vLXJpcGVtZDE2MCBuby1ybWQxNjAgbm8td2hpcmxwb29sIG5vLXNoYTAgbm8tY2FtZWxsaWEgXAorICAgICAgICBuby1yYzIgbm8tcmM0IG5vLWJmIG5vLWNhc3Qgbm8tc2VlZCBuby1nb3N0ICIKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvZGJ1cy1wZXJtcy9kYnVzLXBlcm1zLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9kYnVzLXBlcm1zL2RidXMtcGVybXMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNzg4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvZGJ1cy1wZXJtcy9kYnVzLXBlcm1zLmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiUGhvc3Bob3IgT3BlbkJNQyBEQlVTIFBlcm1pc3Npb25zIgorREVTQ1JJUFRJT04gPSAiUGhvc3Bob3IgT3BlbkJNQyBEQlVTIFBlcm1pc3Npb25zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL29wZW5ibWMvIgorUFIgPSAicjEiCisKK2luaGVyaXQgYWxsYXJjaAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLWxpY2Vuc2UKK2luaGVyaXQgb2JtYy1waG9zcGhvci1kYnVzLXNlcnZpY2UKKworREJVU19TRVJWSUNFUyArPSAiIFwKKyAgICAgICAgb3JnLm9wZW5ibWMgXAorICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2RidXMtcGVybXMvZmlsZXMvb3JnLm9wZW5ibWMuY29uZiBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvZGJ1cy1wZXJtcy9maWxlcy9vcmcub3BlbmJtYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MTI5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2RidXMtcGVybXMvZmlsZXMvb3JnLm9wZW5ibWMuY29uZgpAQCAtMCwwICsxLDggQEAKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisgIDxwb2xpY3kgY29udGV4dD0iZGVmYXVsdCI+CisgICAgPGFsbG93IG93bj0iKiIvPgorICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSIqIi8+CisgIDwvcG9saWN5PgorPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2ltYWdlcy9vYm1jLXBob3NwaG9yLWltYWdlLW5vLXN5c21nci5iYiBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvaW1hZ2VzL29ibWMtcGhvc3Bob3ItaW1hZ2Utbm8tc3lzbWdyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWRiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2ltYWdlcy9vYm1jLXBob3NwaG9yLWltYWdlLW5vLXN5c21nci5iYgpAQCAtMCwwICsxLDggQEAKK0RFU0NSSVBUSU9OID0gIlNhbXBsZSBpbWFnZSByZWNpcGUgdXNpbmcgUGhvc3Bob3IsIGFuIE9wZW5CTUMgXAorZnJhbWV3b3JrLCBpbGx1c3RyYXRpbmcgdGhlIHJlbW92YWwgb2YgYSBkZWZhdWx0IGltYWdlIGZlYXR1cmUuIgorCityZXF1aXJlIG9ibWMtcGhvc3Bob3ItaW1hZ2UuYmIKKworSU1BR0VfRkVBVFVSRVNfcmVtb3ZlID0gIiBcCisgICAgICAgIG9ibWMtcGhvc3Bob3Itc3lzdGVtLW1nbXQgXAorICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL2ltYWdlcy9vYm1jLXBob3NwaG9yLWltYWdlLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9pbWFnZXMvb2JtYy1waG9zcGhvci1pbWFnZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ4MWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9pbWFnZXMvb2JtYy1waG9zcGhvci1pbWFnZS5iYgpAQCAtMCwwICsxLDMgQEAKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggUGhvc3Bob3IsIGFuIE9wZW5CTUMgZnJhbWV3b3JrLiIKKworaW5oZXJpdCBvYm1jLXBob3NwaG9yLWltYWdlCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9maWxlcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLnB5IGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWNoYXNzaXMvZmlsZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjhmMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWNoYXNzaXMvZmlsZXMvb2JtYy1waG9zcGhvci1jaGFzc2lzZC5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUKKyMgWytdIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKyMKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisjIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBkYnVzCitpbXBvcnQgZGJ1cy5zZXJ2aWNlCitpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJcHJpbnQgIm9ibWMtcGhvc3Bob3ItY2hhc3Npc2Qgc3RhcnRpbmcuLi4iCisKKwl3aGlsZSAxOgorCQl0aW1lLnNsZWVwKDUpCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9maWxlcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9maWxlcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxMTUxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1jaGFzc2lzL2ZpbGVzL29ibWMtcGhvc3Bob3ItY2hhc3Npc2Quc2VydmljZQpAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249UGhvc3Bob3IgT3BlbkJNQyBjaGFzc2lzIG1hbmFnZW1lbnQgZGFlbW9uCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS91c3Ivc2Jpbi9vYm1jLXBob3NwaG9yLWNoYXNzaXNkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1jaGFzc2lzL29ibWMtcGhvc3Bob3ItY2hhc3Npc2QuYmIgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjQyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItY2hhc3Npcy9vYm1jLXBob3NwaG9yLWNoYXNzaXNkLmJiCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIENoYXNzaXMgTWFuYWdlbWVudCIKK0RFU0NSSVBUSU9OID0gIlBob3NwaG9yIE9wZW5CTUMgY2hhc3NpcyBtYW5hZ2VtZW50IHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4iCitQUiA9ICJyMSIKKworaW5oZXJpdCBvYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLXB5ZGJ1cy1zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXZlbnQvZmlsZXMvb2JtYy1waG9zcGhvci1ldmVudGQucHkgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXZlbnQvZmlsZXMvb2JtYy1waG9zcGhvci1ldmVudGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0NTA2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1ldmVudC9maWxlcy9vYm1jLXBob3NwaG9yLWV2ZW50ZC5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUKKyMgWytdIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKyMKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisjIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBkYnVzCitpbXBvcnQgZGJ1cy5zZXJ2aWNlCitpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJcHJpbnQgIm9ibWMtcGhvc3Bob3ItZXZlbnRkIHN0YXJ0aW5nLi4uIgorCisJd2hpbGUgMToKKwkJdGltZS5zbGVlcCg1KQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L2ZpbGVzL29ibWMtcGhvc3Bob3ItZXZlbnRkLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXZlbnQvZmlsZXMvb2JtYy1waG9zcGhvci1ldmVudGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTAyNjZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L2ZpbGVzL29ibWMtcGhvc3Bob3ItZXZlbnRkLnNlcnZpY2UKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBob3NwaG9yIE9wZW5CTUMgZXZlbnQgbWFuYWdlbWVudCBkYWVtb24KKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9L3Vzci9zYmluL29ibWMtcGhvc3Bob3ItZXZlbnRkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1ldmVudC9vYm1jLXBob3NwaG9yLWV2ZW50ZC5iYiBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1ldmVudC9vYm1jLXBob3NwaG9yLWV2ZW50ZC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTg2NDhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV2ZW50L29ibWMtcGhvc3Bob3ItZXZlbnRkLmJiCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIEV2ZW50IE1hbmFnZW1lbnQiCitERVNDUklQVElPTiA9ICJQaG9zcGhvciBPcGVuQk1DIGV2ZW50IG1hbmFnZW1lbnQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiIKK1BSID0gInIxIgorCitpbmhlcml0IG9ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLXB5ZGJ1cy1zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1weWRidXMvZmlsZXMvb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy5weSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy9maWxlcy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTliNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1weWRidXMvZmlsZXMvb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy5weQpAQCAtMCwwICsxLDEwMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29udHJpYnV0b3JzIExpc3RlZCBCZWxvdyAtIENPUFlSSUdIVCAyMDE1CisjIFsrXSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnAuCisjCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisjIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworIyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBkYnVzCitpbXBvcnQgZGJ1cy5zZXJ2aWNlCitpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCitpbXBvcnQgZ29iamVjdAorCitTRVJWSUNFX1BSRUZJWCA9ICdvcmcub3BlbmJtYy5leGFtcGxlcycKK0lGQUNFX1BSRUZJWCA9ICdvcmcub3BlbmJtYy5leGFtcGxlcycKK0JBU0VfT0JKX1BBVEggPSAnL29yZy9vcGVuYm1jL2V4YW1wbGVzLycKKworY2xhc3MgU2FtcGxlT2JqZWN0T25lKGRidXMuc2VydmljZS5PYmplY3QpOgorCWRlZiBfX2luaXRfXyhzZWxmLCBidXMsIG5hbWUpOgorCQlzdXBlcihTYW1wbGVPYmplY3RPbmUsIHNlbGYpLl9faW5pdF9fKGJ1cywgbmFtZSkKKworCUBkYnVzLnNlcnZpY2UubWV0aG9kKElGQUNFX1BSRUZJWCArICcuRWNobycsICdzJywgJ3MnKQorCWRlZiBFY2hvKHNlbGYsIHZhbCk6CisJCXNlbGYuTWV0aG9kSW52b2tlZCgiRWNobyBtZXRob2Qgd2FzIGludm9rZWQiLCBzZWxmLl9vYmplY3RfcGF0aCkKKwkJcmV0dXJuIHNlbGYuX29iamVjdF9wYXRoICsgIiBzYXlzICIgKyB2YWwKKwkKKwlAZGJ1cy5zZXJ2aWNlLnNpZ25hbChJRkFDRV9QUkVGSVggKyAnLkVjaG8nLCAnc3MnKQorCWRlZiBNZXRob2RJbnZva2VkKHNlbGYsIG1lc3NhZ2UsIHBhdGgpOgorCQlwYXNzCisKK2NsYXNzIFNhbXBsZU9iamVjdFR3byhTYW1wbGVPYmplY3RPbmUpOgorCWRlZiBfX2luaXRfXyhzZWxmLCBidXMsIG5hbWUpOgorCQlzdXBlcihTYW1wbGVPYmplY3RUd28sIHNlbGYpLl9faW5pdF9fKGJ1cywgbmFtZSkKKwkJc2VsZi5tYXAgPSB7ICdlbXB0eScgOiAnYWRkIHZhbHVlcyB0byBtZScgfQorCisJQGRidXMuc2VydmljZS5zaWduYWwoSUZBQ0VfUFJFRklYICsgJy5EaWN0JywgJ3NzcycpCisJZGVmIERpY3RNZXRob2RDYWxsZWQoc2VsZiwgbWVzc2FnZSwga2V5LCB2YWx1ZSk6CisJCXBhc3MKKworCUBkYnVzLnNlcnZpY2UubWV0aG9kKElGQUNFX1BSRUZJWCArICcuRGljdCcsICdzcycsICcnKQorCWRlZiBTZXRBVmFsdWVJblRoZURpY3Qoc2VsZiwga2V5LCB2YWx1ZSk6CisJCXNlbGYuRGljdE1ldGhvZENhbGxlZCgiRGljdCBtZXRob2Qgd2FzIGludm9rZWQiLCBrZXksIHZhbHVlKQorCQlzZWxmLm1hcFtrZXldID0gdmFsdWUKKworCUBkYnVzLnNlcnZpY2UubWV0aG9kKElGQUNFX1BSRUZJWCArICcuRGljdCcsICdzJywgJ3MnKQorCWRlZiBHZXRBVmFsdWVGcm9tVGhlRGljdChzZWxmLCBrZXkpOgorCQlyZXR1cm4gc2VsZi5tYXAuZ2V0KGtleSwgInNldCBhIHZhbHVlIGZpcnN0IikKKworCUBkYnVzLnNlcnZpY2UubWV0aG9kKElGQUNFX1BSRUZJWCArICcuRGljdCcsICcnLCAncycpCisJZGVmIEdldEFsbFZhbHVlc0Zyb21UaGVEaWN0KHNlbGYpOgorCQlyZXR1cm4gIiAiLmpvaW4oIFsgeCsgJzonICsgc2VsZi5tYXBbeF0gZm9yIHggaW4gc2VsZi5tYXAua2V5cygpIF0gKQorCisJQGRidXMuc2VydmljZS5tZXRob2QoZGJ1cy5QUk9QRVJUSUVTX0lGQUNFLCAnc3MnLCAndicpCisJZGVmIEdldChzZWxmLCBpbnRlcmZhY2UsIHByb3ApOgorCQlyZXR1cm4gc2VsZi5HZXRBbGwoaW50ZXJmYWNlKVtwcm9wXQorCisJQGRidXMuc2VydmljZS5tZXRob2QoZGJ1cy5QUk9QRVJUSUVTX0lGQUNFLCAncycsICdhe3N2fScpCisJZGVmIEdldEFsbChzZWxmLCBpbnRlcmZhY2UpOgorCQlpZiBpbnRlcmZhY2UgPT0gSUZBQ0VfUFJFRklYICsgJy5EaWN0JzoKKwkJCXJldHVybiB7ICdEaWN0Jzogc2VsZi5tYXAgfQorCisJQGRidXMuc2VydmljZS5tZXRob2QoZGJ1cy5QUk9QRVJUSUVTX0lGQUNFLCAnc3N2JykKKwlkZWYgU2V0KHNlbGYsIGludGVyZmFjZSwgcHJvcCwgdmFsdWUpOgorCQlpZiBwcm9wID09ICdEaWN0JzoKKwkJCXNlbGYubWFwID0gdmFsdWUKKwkJCXNlbGYuUHJvcGVydGllc0NoYW5nZWQoaW50ZXJmYWNlLCB7IHByb3AgOiB2YWx1ZSB9LCBbXSkKKworCUBkYnVzLnNlcnZpY2Uuc2lnbmFsKGRidXMuUFJPUEVSVElFU19JRkFDRSwgJ3Nhe3N2fWFzJykKKwlkZWYgUHJvcGVydGllc0NoYW5nZWQoc2VsZiwgaW50ZXJmYWNlLCBwcm9wZXJ0aWVzLCBpbnZhbGlkYXRlZF9wcm9wZXJ0aWVzKToKKwkJcGFzcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCWRidXMubWFpbmxvb3AuZ2xpYi5EQnVzR01haW5Mb29wKHNldF9hc19kZWZhdWx0PVRydWUpCisKKwlidXMgPSBkYnVzLlN5c3RlbUJ1cygpCisKKwlzZXJ2aWNlcyA9IFtdCisJc2VydmljZXMuYXBwZW5kKGRidXMuc2VydmljZS5CdXNOYW1lKFNFUlZJQ0VfUFJFRklYICsgJy5QeXRob25TZXJ2aWNlMCcsIGJ1cykpCisJc2VydmljZXMuYXBwZW5kKGRidXMuc2VydmljZS5CdXNOYW1lKFNFUlZJQ0VfUFJFRklYICsgJy5QeXRob25TZXJ2aWNlMScsIGJ1cykpCisKKwlvYmpzID0gW10KKwlvYmpzLmFwcGVuZChTYW1wbGVPYmplY3RPbmUoYnVzLCBCQVNFX09CSl9QQVRIICsgJ3BhdGgwL1B5dGhvbk9iaicpKQorCW9ianMuYXBwZW5kKFNhbXBsZU9iamVjdFR3byhidXMsIEJBU0VfT0JKX1BBVEggKyAncGF0aDEvUHl0aG9uT2JqJykpCisKKwltYWlubG9vcCA9IGdvYmplY3QuTWFpbkxvb3AoKQorCisJcHJpbnQgIm9ibWMtcGhvc3Bob3ItZXhhbXBsZS1weWRidXMgc3RhcnRpbmcuLi4iCisJbWFpbmxvb3AucnVuKCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzL2ZpbGVzL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1weWRidXMuc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy9maWxlcy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5Mzk1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy9maWxlcy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzLnNlcnZpY2UKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBob3NwaG9yIE9wZW5CTUMgUUVNVSBhcHBsaWNhdGlvbiBleGFtcGxlCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS91c3Ivc2Jpbi9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy9maWxlcy9vcmcub3BlbmJtYy5leGFtcGxlcy5QeXRob25TZXJ2aWNlMC5jb25mIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzL2ZpbGVzL29yZy5vcGVuYm1jLmV4YW1wbGVzLlB5dGhvblNlcnZpY2UwLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkMGI4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy9maWxlcy9vcmcub3BlbmJtYy5leGFtcGxlcy5QeXRob25TZXJ2aWNlMC5jb25mCkBAIC0wLDAgKzEsOCBAQAorPCFET0NUWVBFIGJ1c2NvbmZpZyBQVUJMSUMgIi0vL2ZyZWVkZXNrdG9wLy9EVEQgRC1CVVMgQnVzIENvbmZpZ3VyYXRpb24gMS4wLy9FTiIKKyAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc3RhbmRhcmRzL2RidXMvMS4wL2J1c2NvbmZpZy5kdGQiPgorPGJ1c2NvbmZpZz4KKyAgPHBvbGljeSB1c2VyPSJyb290Ij4KKyAgICA8YWxsb3cgb3duPSJvcmcub3BlbmJtYy5leGFtcGxlcy5QeXRob25TZXJ2aWNlMCIvPgorICAgIDxhbGxvdyBzZW5kX2Rlc3RpbmF0aW9uPSJvcmcub3BlbmJtYy5leGFtcGxlcy5QeXRob25TZXJ2aWNlMCIvPgorICA8L3BvbGljeT4KKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzL2ZpbGVzL29yZy5vcGVuYm1jLmV4YW1wbGVzLlB5dGhvblNlcnZpY2UxLmNvbmYgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1weWRidXMvZmlsZXMvb3JnLm9wZW5ibWMuZXhhbXBsZXMuUHl0aG9uU2VydmljZTEuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjcxMTRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzL2ZpbGVzL29yZy5vcGVuYm1jLmV4YW1wbGVzLlB5dGhvblNlcnZpY2UxLmNvbmYKQEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgorICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Cis8YnVzY29uZmlnPgorICA8cG9saWN5IHVzZXI9InJvb3QiPgorICAgIDxhbGxvdyBvd249Im9yZy5vcGVuYm1jLmV4YW1wbGVzLlB5dGhvblNlcnZpY2UxIi8+CisgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im9yZy5vcGVuYm1jLmV4YW1wbGVzLlB5dGhvblNlcnZpY2UxIi8+CisgIDwvcG9saWN5PgorPC9idXNjb25maWc+CmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1weWRidXMvZmlsZXMvcHljbGllbnQtc2FtcGxlLnB5IGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzL2ZpbGVzL3B5Y2xpZW50LXNhbXBsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTAxMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzL2ZpbGVzL3B5Y2xpZW50LXNhbXBsZS5weQpAQCAtMCwwICsxLDYwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUKKyMgWytdIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKyMKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisjIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IGRidXMKK2ltcG9ydCBkYnVzLnNlcnZpY2UKK2ltcG9ydCBkYnVzLm1haW5sb29wLmdsaWIKK2ltcG9ydCBnb2JqZWN0CisKK1NFUlZJQ0VfUFJFRklYID0gJ29yZy5vcGVuYm1jLmV4YW1wbGVzJworSUZBQ0VfUFJFRklYID0gJ29yZy5vcGVuYm1jLmV4YW1wbGVzJworQkFTRV9PQkpfUEFUSCA9ICcvb3JnL29wZW5ibWMvZXhhbXBsZXMvJworCitkZWYgc2lnbmFsX2NhbGxiYWNrKCphLCAqKmt3KToKKwlwcmludCAiR290IHNpZ25hbDoiCisJcHJpbnQgImludGY6ICIgKyBrdy5nZXQoJ2ludGYnLCAnbm9uZScpCisJcHJpbnQgInBhdGg6ICIgKyBrdy5nZXQoJ3BhdGgnLCAnbm9uZScpCisJcHJpbnQgIm1lbWJlcjogIiArIGt3LmdldCgnbWVtYmVyJywgJ25vbmUnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCWRidXMubWFpbmxvb3AuZ2xpYi5EQnVzR01haW5Mb29wKHNldF9hc19kZWZhdWx0PVRydWUpCisKKwlidXMgPSBkYnVzLlN5c3RlbUJ1cygpCisKKwlvYmowID0gYnVzLmdldF9vYmplY3QoU0VSVklDRV9QUkVGSVggKyAnLlB5dGhvblNlcnZpY2UwJywKKwkJICAgICAgICAgICAgICAgICAgICAgIEJBU0VfT0JKX1BBVEggKyAncGF0aDAvUHl0aG9uT2JqJykKKwlvYmoxID0gYnVzLmdldF9vYmplY3QoU0VSVklDRV9QUkVGSVggKyAnLlB5dGhvblNlcnZpY2UxJywKKwkJICAgICAgICAgICAgICAgICAgICAgIEJBU0VfT0JKX1BBVEggKyAncGF0aDEvUHl0aG9uT2JqJykKKwllY2hvMD0gZGJ1cy5JbnRlcmZhY2Uob2JqMCwKKwkJICAgIGRidXNfaW50ZXJmYWNlPUlGQUNFX1BSRUZJWCArICcuRWNobycpCisJZWNobzE9IGRidXMuSW50ZXJmYWNlKG9iajAsCisJCSAgICBkYnVzX2ludGVyZmFjZT1JRkFDRV9QUkVGSVggKyAnLkVjaG8nKQorCisJcHJpbnQgIkludm9raW5nIEVjaG8gbWV0aG9kcy4uLi4iCisJcHJpbnQoZWNobzAuRWNobygiaGVsbG8iKSkKKwlwcmludChlY2hvMS5FY2hvKCJ0aGVyZSIpKQorCQorCWJ1cy5hZGRfc2lnbmFsX3JlY2VpdmVyKHNpZ25hbF9jYWxsYmFjaywgaW50ZXJmYWNlX2tleXdvcmQgPSAnaW50ZicsIAorCQkJcGF0aF9rZXl3b3JkID0gJ3BhdGgnLAorCQkJbWVtYmVyX2tleXdvcmQgPSAnbWVtYmVyJykKKworCXByaW50ICJXYWl0aW5nIGZvciBzaWduYWxzLi4uIChjYWxsIGEgc2FtcGxlIG1ldGhvZCB0byBzZWUgc29tZXRoaW5nIGhlcmUpIgorCXByaW50ICJQcmVzcyBDdHJsXkMgdG8gcXVpdCIKKwltYWlubG9vcCA9IGdvYmplY3QuTWFpbkxvb3AoKQorCisJbWFpbmxvb3AucnVuKCkKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1weWRidXMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0MGM5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXB5ZGJ1cy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiUGhvc3Bob3IgT3BlbkJNQyBCU1AgRXhhbXBsZSBBcHBsaWNhdGlvbiIKK0RFU0NSSVBUSU9OID0gIlBob3NwaG9yIE9wZW5CTUMgUUVNVSBCU1AgZXhhbXBsZSBpbXBsZW1lbnRhdGlvbi4iCitQUiA9ICJyMSIKKworREJVU19TRVJWSUNFUyA9ICIgXAorICAgICAgICBvcmcub3BlbmJtYy5leGFtcGxlcy5QeXRob25TZXJ2aWNlMCBcCisgICAgICAgIG9yZy5vcGVuYm1jLmV4YW1wbGVzLlB5dGhvblNlcnZpY2UxIFwKKyAgICAgICAgIgorCitpbmhlcml0IG9ibWMtcGhvc3Bob3ItcHlkYnVzLXNlcnZpY2UKKworY2xpZW50ID0gInB5Y2xpZW50LXNhbXBsZSIKK1NSQ19VUkkgKz0gImZpbGU6Ly8ke2NsaWVudH0ucHkiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJHtjbGllbnR9LnB5ICR7RH0ke2JpbmRpcn0vJHtjbGllbnR9Cit9CmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9maWxlcy9NYWtlZmlsZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXNkYnVzL2ZpbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYWViNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9maWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACitFWEUgICAgID0gb2JtYy1waG9zcGhvci1leGFtcGxlLXNkYnVzCitPQkpTICAgID0gJChFWEUpLm8KK0RFUFBLR1MgPSBsaWJzeXN0ZW1kCitDQyAgICAgID89ICQoQ1JPU1NfQ09NUElMRSlnY2MKK0lOQ0xVREVTICs9ICQoc2hlbGwgcGtnLWNvbmZpZyAtLWNmbGFncyAkKERFUFBLR1MpKQorTElCUyArPSAkKHNoZWxsIHBrZy1jb25maWcgLS1saWJzICQoREVQUEtHUykpCisKKyUubyA6ICUuYworCSQoQ0MpIC1jICQ8ICQoQ0ZMQUdTKSAkKElOQ0xVREVTKSAtbyAkQAorJChFWEUpOiAkKE9CSlMpCisJJChDQykgJF4gJChMREZMQUdTKSAkKExJQlMpIC1vICRACitjbGVhbjoKKwlybSAtZiAkKE9CSlMpICQoRVhFKSAqLm8gKi5kCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgKi5jfiAqLmh+ICouc2h+IE1ha2VmaWxlfiBjb25maWcubWt+CmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9maWxlcy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMuYyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1leGFtcGxlLXNkYnVzL2ZpbGVzL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NmJiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9maWxlcy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMuYwpAQCAtMCwwICsxLDExNyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXN0ZW1kL3NkLWJ1cy5oPgorCitzdGF0aWMgaW50IG1ldGhvZF9lY2hvKHNkX2J1c19tZXNzYWdlICptLCB2b2lkICp1c2VyZGF0YSwgc2RfYnVzX2Vycm9yICpyZXRfZXJyb3IpIHsKKwljaGFyICpzdHI7CisJY29uc3QgY2hhciAqaW50ZiA9IHNkX2J1c19tZXNzYWdlX2dldF9pbnRlcmZhY2UobSksCisJICAgICAgKnBhdGggPSBzZF9idXNfbWVzc2FnZV9nZXRfcGF0aChtKTsKKwlzZF9idXMgKmJ1cyA9IHNkX2J1c19tZXNzYWdlX2dldF9idXMobSk7CisKKwljaGFyIHJlc3BvbnNlWzUxMl0gPSB7MH07CisJaW50IHI7CisKKwkvKiBSZWFkIHRoZSBwYXJhbWV0ZXJzICovCisJciA9IHNkX2J1c19tZXNzYWdlX3JlYWQobSwgInMiLCAmc3RyKTsKKwlpZiAociA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgcGFyYW1ldGVyczogJXNcbiIsIHN0cmVycm9yKC1yKSk7CisJCXJldHVybiByOworCX0KKworCXIgPSBzZF9idXNfZW1pdF9zaWduYWwoYnVzLCBwYXRoLCBpbnRmLCAiTWV0aG9kSW52b2tlZCIsICJzcyIsCisJCQkiRWNobyBtZXRob2Qgd2FzIGludm9rZWQiLCBwYXRoKTsKKwlpZiAociA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZW1pdCBzaWduYWw6ICVzXG4iLCBzdHJlcnJvcigtcikpOworCQlyZXR1cm4gcjsKKwl9CisKKwlzdHJuY2F0KHJlc3BvbnNlLCBwYXRoLCAxMjgpOworCXN0cmNhdChyZXNwb25zZSwgIiBzYXlzICIpOworCXN0cm5jYXQocmVzcG9uc2UsIHN0ciwgMTI4KTsKKworCS8qIFJlcGx5IHdpdGggdGhlIHJlc3BvbnNlICovCisJcmV0dXJuIHNkX2J1c19yZXBseV9tZXRob2RfcmV0dXJuKG0sICJzIiwgJnJlc3BvbnNlKTsKK30KKworc3RhdGljIGNvbnN0IHNkX2J1c192dGFibGUgZWNob192dGFibGVbXSA9IHsKKwlTRF9CVVNfVlRBQkxFX1NUQVJUKDApLAorCVNEX0JVU19NRVRIT0QoIkVjaG8iLCAicyIsICJzIiwgbWV0aG9kX2VjaG8sIFNEX0JVU19WVEFCTEVfVU5QUklWSUxFR0VEKSwKKwlTRF9CVVNfU0lHTkFMKCJNZXRob2RJbnZva2VkIiwgInMiLCAwKSwKKwlTRF9CVVNfVlRBQkxFX0VORAorfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworCXNkX2J1c19zbG90ICpzbG90ID0gTlVMTDsKKwlzZF9idXMgKmJ1cyA9IE5VTEw7CisJaW50IHI7CisJY2hhciAqKmFjcXVpcmVkID0gTlVMTCwgKiphY3RpdmF0YWJsZSA9IE5VTEwsICoqaTsKKworCS8qIENvbm5lY3QgdG8gdGhlIHVzZXIgYnVzIHRoaXMgdGltZSAqLworCXIgPSBzZF9idXNfb3Blbl9zeXN0ZW0oJmJ1cyk7CisJaWYgKHIgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gc3lzdGVtIGJ1czogJXNcbiIsIHN0cmVycm9yKC1yKSk7CisJCWdvdG8gZmluaXNoOworCX0KKworCS8qIEluc3RhbGwgYW4gb2JqZWN0ICovCisJciA9IHNkX2J1c19hZGRfb2JqZWN0X3Z0YWJsZShidXMsCisJCQkmc2xvdCwKKwkJCSIvb3JnL29wZW5ibWMvZXhhbXBsZXMvcGF0aDAvU0RCdXNPYmoiLCAgLyogb2JqZWN0IHBhdGggKi8KKwkJCSJvcmcub3BlbmJtYy5leGFtcGxlcy5FY2hvIiwgICAvKiBpbnRlcmZhY2UgbmFtZSAqLworCQkJZWNob192dGFibGUsCisJCQlOVUxMKTsKKwlpZiAociA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gaXNzdWUgbWV0aG9kIGNhbGw6ICVzXG4iLCBzdHJlcnJvcigtcikpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwkvKiBJbnN0YWxsIGFuIG9iamVjdCAqLworCXIgPSBzZF9idXNfYWRkX29iamVjdF92dGFibGUoYnVzLAorCQkJJnNsb3QsCisJCQkiL29yZy9vcGVuYm1jL2V4YW1wbGVzL3BhdGgxL1NEQnVzT2JqIiwgIC8qIG9iamVjdCBwYXRoICovCisJCQkib3JnLm9wZW5ibWMuZXhhbXBsZXMuRWNobyIsICAgLyogaW50ZXJmYWNlIG5hbWUgKi8KKwkJCWVjaG9fdnRhYmxlLAorCQkJTlVMTCk7CisJaWYgKHIgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGlzc3VlIG1ldGhvZCBjYWxsOiAlc1xuIiwgc3RyZXJyb3IoLXIpKTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJLyogVGFrZSBhIHdlbGwta25vd24gc2VydmljZSBuYW1lIHNvIHRoYXQgY2xpZW50cyBjYW4gZmluZCB1cyAqLworCXIgPSBzZF9idXNfcmVxdWVzdF9uYW1lKGJ1cywgIm9yZy5vcGVuYm1jLmV4YW1wbGVzLlNEQnVzU2VydmljZTAiLCAwKTsKKwlpZiAociA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWNxdWlyZSBzZXJ2aWNlIG5hbWU6ICVzXG4iLCBzdHJlcnJvcigtcikpOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlyID0gc2RfYnVzX3JlcXVlc3RfbmFtZShidXMsICJvcmcub3BlbmJtYy5leGFtcGxlcy5TREJ1c1NlcnZpY2UxIiwgMCk7CisJaWYgKHIgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFjcXVpcmUgc2VydmljZSBuYW1lOiAlc1xuIiwgc3RyZXJyb3IoLXIpKTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJZm9yICg7OykgeworCQkvKiBQcm9jZXNzIHJlcXVlc3RzICovCisJCXIgPSBzZF9idXNfcHJvY2VzcyhidXMsIE5VTEwpOworCQlpZiAociA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHByb2Nlc3MgYnVzOiAlc1xuIiwgc3RyZXJyb3IoLXIpKTsKKwkJCWdvdG8gZmluaXNoOworCQl9CisJCWlmIChyID4gMCkgLyogd2UgcHJvY2Vzc2VkIGEgcmVxdWVzdCwgdHJ5IHRvIHByb2Nlc3MgYW5vdGhlciBvbmUsIHJpZ2h0LWF3YXkgKi8KKwkJCWNvbnRpbnVlOworCisJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IHJlcXVlc3QgdG8gcHJvY2VzcyAqLworCQlyID0gc2RfYnVzX3dhaXQoYnVzLCAodWludDY0X3QpIC0xKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byB3YWl0IG9uIGJ1czogJXNcbiIsIHN0cmVycm9yKC1yKSk7CisJCQlnb3RvIGZpbmlzaDsKKwkJfQorCX0KKworZmluaXNoOgorCXNkX2J1c19zbG90X3VucmVmKHNsb3QpOworCXNkX2J1c191bnJlZihidXMpOworCisJcmV0dXJuIHIgPCAwID8gRVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvZmlsZXMvb2JtYy1waG9zcGhvci1leGFtcGxlLXNkYnVzLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9maWxlcy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2NlNzMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvZmlsZXMvb2JtYy1waG9zcGhvci1leGFtcGxlLXNkYnVzLnNlcnZpY2UKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBob3NwaG9yIE9wZW5CTUMgUUVNVSBhcHBsaWNhdGlvbiBleGFtcGxlCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS91c3Ivc2Jpbi9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvZmlsZXMvb3JnLm9wZW5ibWMuZXhhbXBsZXMuU0RCdXNTZXJ2aWNlMC5jb25mIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvZmlsZXMvb3JnLm9wZW5ibWMuZXhhbXBsZXMuU0RCdXNTZXJ2aWNlMC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YWY0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9maWxlcy9vcmcub3BlbmJtYy5leGFtcGxlcy5TREJ1c1NlcnZpY2UwLmNvbmYKQEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgorICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Cis8YnVzY29uZmlnPgorICA8cG9saWN5IHVzZXI9InJvb3QiPgorICAgIDxhbGxvdyBvd249Im9yZy5vcGVuYm1jLmV4YW1wbGVzLlNEQnVzU2VydmljZTAiLz4KKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLm9wZW5ibWMuZXhhbXBsZXMuU0RCdXNTZXJ2aWNlMCIvPgorICA8L3BvbGljeT4KKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvZmlsZXMvb3JnLm9wZW5ibWMuZXhhbXBsZXMuU0RCdXNTZXJ2aWNlMS5jb25mIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvZmlsZXMvb3JnLm9wZW5ibWMuZXhhbXBsZXMuU0RCdXNTZXJ2aWNlMS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhN2JmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9maWxlcy9vcmcub3BlbmJtYy5leGFtcGxlcy5TREJ1c1NlcnZpY2UxLmNvbmYKQEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgYnVzY29uZmlnIFBVQkxJQyAiLS8vZnJlZWRlc2t0b3AvL0RURCBELUJVUyBCdXMgQ29uZmlndXJhdGlvbiAxLjAvL0VOIgorICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zdGFuZGFyZHMvZGJ1cy8xLjAvYnVzY29uZmlnLmR0ZCI+Cis8YnVzY29uZmlnPgorICA8cG9saWN5IHVzZXI9InJvb3QiPgorICAgIDxhbGxvdyBvd249Im9yZy5vcGVuYm1jLmV4YW1wbGVzLlNEQnVzU2VydmljZTEiLz4KKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLm9wZW5ibWMuZXhhbXBsZXMuU0RCdXNTZXJ2aWNlMSIvPgorICA8L3BvbGljeT4KKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvb2JtYy1waG9zcGhvci1leGFtcGxlLXNkYnVzLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMvb2JtYy1waG9zcGhvci1leGFtcGxlLXNkYnVzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzUwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cy9vYm1jLXBob3NwaG9yLWV4YW1wbGUtc2RidXMuYmIKQEAgLTAsMCArMSwxMCBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIEJTUCBFeGFtcGxlIEFwcGxpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiUGhvc3Bob3IgT3BlbkJNQyBRRU1VIEJTUCBleGFtcGxlIGltcGxlbWVudGF0aW9uLiIKK1BSID0gInIxIgorCitEQlVTX1NFUlZJQ0VTID0gIiBcCisgICAgICAgIG9yZy5vcGVuYm1jLmV4YW1wbGVzLlNEQnVzU2VydmljZTAgXAorICAgICAgICBvcmcub3BlbmJtYy5leGFtcGxlcy5TREJ1c1NlcnZpY2UxIFwKKyAgICAgICAgIgorCitpbmhlcml0IG9ibWMtcGhvc3Bob3Itc2RidXMtc2VydmljZQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9maWxlcy9NYWtlZmlsZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlM2ZhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvTWFrZWZpbGUKQEAgLTAsMCArMSwxNSBAQAorRVhFICAgICA9IG9ibWMtcGhvc3Bob3ItZmFuZAorT0JKUyAgICA9ICQoRVhFKS5vCitERVBQS0dTID0gZ2lvLXVuaXgtMi4wIGdsaWItMi4wCitDQyAgICAgID89ICQoQ1JPU1NfQ09NUElMRSlnY2MKK0lOQ0xVREVTICs9ICQoc2hlbGwgcGtnLWNvbmZpZyAtLWNmbGFncyAkKERFUFBLR1MpKQorTElCUyArPSAkKHNoZWxsIHBrZy1jb25maWcgLS1saWJzICQoREVQUEtHUykpCisKKyUubyA6ICUuYworCSQoQ0MpIC1jICReICQoQ0ZMQUdTKSAkKElOQ0xVREVTKSAtbyAkQAorJChFWEUpOiAkKE9CSlMpCisJJChDQykgJF4gJChMREZMQUdTKSAkKExERkxBR1MpIC1vICRACitjbGVhbjoKKwlybSAtZiAkKE9CSlMpICQoRVhFKSAqLm8gKi5kCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgKi5jfiAqLmh+ICouc2h+IE1ha2VmaWxlfiBjb25maWcubWt+CmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmFuL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmFuZC5jIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9maWxlcy9vYm1jLXBob3NwaG9yLWZhbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NThiYTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9maWxlcy9vYm1jLXBob3NwaG9yLWZhbmQuYwpAQCAtMCwwICsxLDI5IEBACisvKiBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBbK10gSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgICovCisvKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgICovCisvKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgICovCisvKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgICovCisvKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgICAgICAgICovCisvKiBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgICAgICAgICAgICovCisvKiBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcmludGYoIm9ibWMtcGhvc3Bob3ItZmFuZCBzdGFydGluZy4uLlxuIik7CisKKwl3aGlsZSgxKQorCQlzbGVlcCg1KTsKKworCWV4aXQoRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vZmlsZXMvb2JtYy1waG9zcGhvci1mYW5kLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmFuL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmFuZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYzJiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmFuL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmFuZC5zZXJ2aWNlCkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1QaG9zcGhvciBPcGVuQk1DIGZhbiBtYW5hZ2VtZW50IGRhZW1vbgorCitbU2VydmljZV0KK0V4ZWNTdGFydD0vdXNyL3NiaW4vb2JtYy1waG9zcGhvci1mYW5kCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vb2JtYy1waG9zcGhvci1mYW5kLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZhbi9vYm1jLXBob3NwaG9yLWZhbmQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjNGI3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mYW4vb2JtYy1waG9zcGhvci1mYW5kLmJiCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIEZhbiBNYW5hZ2VtZW50LiIKK0RFU0NSSVBUSU9OID0gIlBob3NwaG9yIE9wZW5CTUMgZmFuIG1hbmFnZW1lbnQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiIKK1BSID0gInIxIgorCitpbmhlcml0IG9ibWMtcGhvc3Bob3ItZmFuLW1nbXQKK2luaGVyaXQgb2JtYy1waG9zcGhvci1zZGJ1cy1zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmxhc2gvZmlsZXMvb2JtYy1waG9zcGhvci1mbGFzaGQucHkgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmxhc2gvZmlsZXMvb2JtYy1waG9zcGhvci1mbGFzaGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1ZGQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mbGFzaC9maWxlcy9vYm1jLXBob3NwaG9yLWZsYXNoZC5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUKKyMgWytdIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKyMKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisjIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBkYnVzCitpbXBvcnQgZGJ1cy5zZXJ2aWNlCitpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJcHJpbnQgIm9ibWMtcGhvc3Bob3ItZmxhc2hkIHN0YXJ0aW5nLi4uIgorCisJd2hpbGUgMToKKwkJdGltZS5zbGVlcCg1KQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmxhc2hkLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItZmxhc2gvZmlsZXMvb2JtYy1waG9zcGhvci1mbGFzaGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjUxOGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL2ZpbGVzL29ibWMtcGhvc3Bob3ItZmxhc2hkLnNlcnZpY2UKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBob3NwaG9yIE9wZW5CTUMgZmxhc2ggbWFuYWdlbWVudCBkYWVtb24KKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9L3Vzci9zYmluL29ibWMtcGhvc3Bob3ItZmxhc2hkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mbGFzaC9vYm1jLXBob3NwaG9yLWZsYXNoZC5iYiBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1mbGFzaC9vYm1jLXBob3NwaG9yLWZsYXNoZC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDRiMWFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLWZsYXNoL29ibWMtcGhvc3Bob3ItZmxhc2hkLmJiCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIEZsYXNoIE1hbmFnZW1lbnQiCitERVNDUklQVElPTiA9ICJQaG9zcGhvciBPcGVuQk1DIGZsYXNoIG1hbmFnZW1lbnQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiIKK1BSID0gInIxIgorCitpbmhlcml0IG9ibWMtcGhvc3Bob3ItZmxhc2gtbWdtdAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLXB5ZGJ1cy1zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L2ZpbGVzL29ibWMtcGhvc3Bob3ItcG9saWN5ZC5weSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvZmlsZXMvb2JtYy1waG9zcGhvci1wb2xpY3lkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjE5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L2ZpbGVzL29ibWMtcGhvc3Bob3ItcG9saWN5ZC5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUKKyMgWytdIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKyMKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisjIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBkYnVzCitpbXBvcnQgZGJ1cy5zZXJ2aWNlCitpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJcHJpbnQgIm9ibWMtcGhvc3Bob3ItcG9saWN5ZCBzdGFydGluZy4uLiIKKworCXdoaWxlIDE6CisJCXRpbWUuc2xlZXAoNSkKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvZmlsZXMvb2JtYy1waG9zcGhvci1wb2xpY3lkLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L2ZpbGVzL29ibWMtcGhvc3Bob3ItcG9saWN5ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMWY2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3ItcG9saWN5L2ZpbGVzL29ibWMtcGhvc3Bob3ItcG9saWN5ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1QaG9zcGhvciBPcGVuQk1DIHBvbGljeSBtYW5hZ2VtZW50IGRhZW1vbgorCitbU2VydmljZV0KK0V4ZWNTdGFydD0vdXNyL3NiaW4vb2JtYy1waG9zcGhvci1wb2xpY3lkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvb2JtYy1waG9zcGhvci1wb2xpY3lkLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXBvbGljeS9vYm1jLXBob3NwaG9yLXBvbGljeWQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0NzYwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1wb2xpY3kvb2JtYy1waG9zcGhvci1wb2xpY3lkLmJiCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIFBvbGljeSBNYW5hZ2VtZW50IgorREVTQ1JJUFRJT04gPSAiUGhvc3Bob3IgT3BlbkJNQyBwb2xpY3kgbWFuYWdlbWVudCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIgorUFIgPSAicjEiCisKK2luaGVyaXQgb2JtYy1waG9zcGhvci1wb2xpY3ktbWdtdAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLXB5ZGJ1cy1zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL2ZpbGVzL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5weSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zZW5zb3IvZmlsZXMvb2JtYy1waG9zcGhvci1zZW5zb3JkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzcxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL2ZpbGVzL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUKKyMgWytdIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKyMKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisjIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBkYnVzCitpbXBvcnQgZGJ1cy5zZXJ2aWNlCitpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJcHJpbnQgIm9ibWMtcGhvc3Bob3Itc2Vuc29yZCBzdGFydGluZy4uLiIKKworCXdoaWxlIDE6CisJCXRpbWUuc2xlZXAoNSkKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zZW5zb3IvZmlsZXMvb2JtYy1waG9zcGhvci1zZW5zb3JkLnNlcnZpY2UgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL2ZpbGVzL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2NhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc2Vuc29yL2ZpbGVzL29ibWMtcGhvc3Bob3Itc2Vuc29yZC5zZXJ2aWNlCkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1QaG9zcGhvciBPcGVuQk1DIHNlbnNvciBtYW5hZ2VtZW50IGRhZW1vbgorCitbU2VydmljZV0KK0V4ZWNTdGFydD0vdXNyL3NiaW4vb2JtYy1waG9zcGhvci1zZW5zb3JkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zZW5zb3Ivb2JtYy1waG9zcGhvci1zZW5zb3JkLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXNlbnNvci9vYm1jLXBob3NwaG9yLXNlbnNvcmQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2NDZhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zZW5zb3Ivb2JtYy1waG9zcGhvci1zZW5zb3JkLmJiCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIFNlbnNvciBNYW5hZ2VtZW50IgorREVTQ1JJUFRJT04gPSAiUGhvc3Bob3IgT3BlbkJNQyBzZW5zb3IgbWFuYWdlbWVudCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIgorUFIgPSAicjEiCisKK2luaGVyaXQgb2JtYy1waG9zcGhvci1zZW5zb3ItbWdtdAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLXB5ZGJ1cy1zZXJ2aWNlCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL2ZpbGVzL29ibWMtcGhvc3Bob3Itc3lzZC5weSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zeXMvZmlsZXMvb2JtYy1waG9zcGhvci1zeXNkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDgwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL2ZpbGVzL29ibWMtcGhvc3Bob3Itc3lzZC5weQpAQCAtMCwwICsxLDI5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb250cmlidXRvcnMgTGlzdGVkIEJlbG93IC0gQ09QWVJJR0hUIDIwMTUKKyMgWytdIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKyMKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyMgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisjIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBkYnVzCitpbXBvcnQgZGJ1cy5zZXJ2aWNlCitpbXBvcnQgZGJ1cy5tYWlubG9vcC5nbGliCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisJcHJpbnQgIm9ibWMtcGhvc3Bob3Itd2F0Y2hkb2dkIHN0YXJ0aW5nLi4uIgorCisJd2hpbGUgMToKKwkJdGltZS5zbGVlcCg1KQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXN5cy9maWxlcy9vYm1jLXBob3NwaG9yLXN5c2Quc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zeXMvZmlsZXMvb2JtYy1waG9zcGhvci1zeXNkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkOTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3Ivb2JtYy1waG9zcGhvci1zeXMvZmlsZXMvb2JtYy1waG9zcGhvci1zeXNkLnNlcnZpY2UKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBob3NwaG9yIE9wZW5CTUMgc3lzdGVtIG1hbmFnZW1lbnQgZGFlbW9uCisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS91c3Ivc2Jpbi9vYm1jLXBob3NwaG9yLXN5c2QKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXN5cy9vYm1jLXBob3NwaG9yLXN5c2QuYmIgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL29ibWMtcGhvc3Bob3Itc3lzL29ibWMtcGhvc3Bob3Itc3lzZC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM5YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9vYm1jLXBob3NwaG9yLXN5cy9vYm1jLXBob3NwaG9yLXN5c2QuYmIKQEAgLTAsMCArMSw2IEBACitTVU1NQVJZID0gIlBob3NwaG9yIE9wZW5CTUMgU3lzdGVtIE1hbmFnZW1lbnQiCitERVNDUklQVElPTiA9ICJQaG9zcGhvciBPcGVuQk1DIHN5c3RlbSBtYW5hZ2VtZW50IHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4iCitQUiA9ICJyMSIKKworaW5oZXJpdCBvYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210Citpbmhlcml0IG9ibWMtcGhvc3Bob3ItcHlkYnVzLXNlcnZpY2UKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhNmJhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLmJiCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiUGhvc3Bob3IgT3BlbkJNQyAtIEFwcGxpY2F0aW9ucyIKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLXV0aWxzCitpbmhlcml0IG9ibWMtcGhvc3Bob3ItbGljZW5zZQorCitWSVJUVUFMLVJVTlRJTUVfb2JtYy1waG9zcGhvci1mYW4tY3RsID89ICJ2aXJ0dWFsL29ibWMtcGhvc3Bob3ItZmFuLWN0bCIKK1ZJUlRVQUwtUlVOVElNRV9vYm1jLXBob3NwaG9yLXNlbnNvci1jdGwgPz0gInZpcnR1YWwvb2JtYy1waG9zcGhvci1zZW5zb3ItY3RsIgorVklSVFVBTC1SVU5USU1FX29ibWMtcGhvc3Bob3ItY2hhc3Npcy1jdGwgPz0gInZpcnR1YWwvb2JtYy1waG9zcGhvci1jaGFzc2lzLWN0bCIKK1ZJUlRVQUwtUlVOVElNRV9vYm1jLXBob3NwaG9yLWZsYXNoLWN0bCA/PSAidmlydHVhbC9vYm1jLXBob3NwaG9yLWZsYXNoLWN0bCIKKworUFJPVklERVMgPSAiJHtQQUNLQUdFU30iCitQQUNLQUdFUyA9ICIgXAorICAgICAgICBwYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLWV4dHJhcyBcCisgICAgICAgICR7QG1mX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3ItZmFuLW1nbXQiLCAicGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1mYW4tbWdtdCIsIGQpfSBcCisgICAgICAgICR7QG1mX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3ItY2hhc3Npcy1tZ210IiwgInBhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtY2hhc3Npcy1tZ210IiwgZCl9IFwKKyAgICAgICAgJHtAbWZfZW5hYmxlZCgib2JtYy1waG9zcGhvci1zZW5zb3ItbWdtdCIsICJwYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLXNlbnNvci1tZ210IiwgZCl9IFwKKyAgICAgICAgJHtAbWZfZW5hYmxlZCgib2JtYy1waG9zcGhvci1mbGFzaC1tZ210IiwgInBhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtZmxhc2gtbWdtdCIsIGQpfSBcCisgICAgICAgICR7QGRmX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdCIsICJwYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLWV2ZW50LW1nbXQiLCBkKX0gXAorICAgICAgICAke0BkZl9lbmFibGVkKCJvYm1jLXBob3NwaG9yLXBvbGljeS1tZ210IiwgInBhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtcG9saWN5LW1nbXQiLCBkKX0gXAorICAgICAgICAke0BkZl9lbmFibGVkKCJvYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210IiwgInBhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtc3lzdGVtLW1nbXQiLCBkKX0gXAorICAgICAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1leHRyYXMgPSAiRXh0cmEgZmVhdHVyZXMiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLWV4dHJhcyA9ICIgXAorICAgICAgICByZXN0LWRidXMgXAorICAgICAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1mYW4tbWdtdCA9ICJGYW4gbWFuYWdlbWVudCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1mYW4tbWdtdCA9IFwKKyAgICAgICAgIiR7QGNmX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3ItZmFuLW1nbXQiLCAiIFwKKyAgICAgICAgICAgICAgICB2aXJ0dWFsL29ibWMtcGhvc3Bob3ItZmFuLW1nbXQgXAorICAgICAgICAgICAgICAgICR7VklSVFVBTC1SVU5USU1FX29ibWMtcGhvc3Bob3ItZmFuLWN0bH0gXAorICAgICAgICAiLCBkKX0iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1jaGFzc2lzLW1nbXQgPSAiQ2hhc3NpcyBtYW5hZ2VtZW50IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLWNoYXNzaXMtbWdtdCA9ICJcCisgICAgICAgICR7QGNmX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3ItY2hhc3Npcy1tZ210IiwgIiBcCisgICAgICAgICAgICAgICAgdmlydHVhbC9vYm1jLXBob3NwaG9yLWNoYXNzaXMtbWdtdCBcCisgICAgICAgICAgICAgICAgJHtWSVJUVUFMLVJVTlRJTUVfb2JtYy1waG9zcGhvci1jaGFzc2lzLWN0bH0gXAorICAgICAgICAiLCBkKX0iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1zZW5zb3ItbWdtdCA9ICJTZW5zb3IgbWFuYWdlbWVudCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1zZW5zb3ItbWdtdCA9ICJcCisgICAgICAgICR7QGNmX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3Itc2Vuc29yLW1nbXQiLCAiIFwKKyAgICAgICAgICAgICAgICB2aXJ0dWFsL29ibWMtcGhvc3Bob3Itc2Vuc29yLW1nbXQgXAorICAgICAgICAgICAgICAgICR7VklSVFVBTC1SVU5USU1FX29ibWMtcGhvc3Bob3Itc2Vuc29yLWN0bH0gXAorICAgICAgICAiLCBkKX0iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1mbGFzaC1tZ210ID0gIkZsYXNoIG1hbmFnZW1lbnQgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtZmxhc2gtbWdtdCA9ICJcCisgICAgICAgICR7QGNmX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3ItZmxhc2gtbWdtdCIsICIgXAorICAgICAgICAgICAgICAgIHZpcnR1YWwvb2JtYy1waG9zcGhvci1mbGFzaC1tZ210IFwKKyAgICAgICAgICAgICAgICAke1ZJUlRVQUwtUlVOVElNRV9vYm1jLXBob3NwaG9yLWZsYXNoLWN0bH0gXAorICAgICAgICAiLCBkKX0iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1ldmVudC1tZ210ID0gIkV2ZW50IG1hbmFnZW1lbnQgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1vYm1jLXBob3NwaG9yLWFwcHMtZXZlbnQtbWdtdCA9ICIgXAorICAgICAgICAke0BkZl9lbmFibGVkKCJvYm1jLXBob3NwaG9yLWV2ZW50LW1nbXQiLCAiIFwKKyAgICAgICAgICAgICAgICB2aXJ0dWFsL29ibWMtcGhvc3Bob3ItZXZlbnQtbWdtdCBcCisgICAgICAgICIsIGQpfSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLXBvbGljeS1tZ210ID0gIlBvbGljeSBtYW5hZ2VtZW50IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtb2JtYy1waG9zcGhvci1hcHBzLXBvbGljeS1tZ210ID0gIiBcCisgICAgICAgICR7QGRmX2VuYWJsZWQoIm9ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQiLCAiIFwKKyAgICAgICAgICAgICAgICB2aXJ0dWFsL29ibWMtcGhvc3Bob3ItcG9saWN5LW1nbXQgXAorICAgICAgICAiLCBkKX0iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1zeXN0ZW0tbWdtdCA9ICJTeXN0ZW0gbWFuYWdlbWVudCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW9ibWMtcGhvc3Bob3ItYXBwcy1zeXN0ZW0tbWdtdCA9ICIgXAorICAgICAgICAke0BkZl9lbmFibGVkKCJvYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210IiwgIiBcCisgICAgICAgICAgICAgICAgdmlydHVhbC9vYm1jLXBob3NwaG9yLXN5c3RlbS1tZ210IFwKKyAgICAgICAgIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9yZXN0LWRidXMvZmlsZXMvbWFrZWZpbGUucGF0Y2ggYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL3Jlc3QtZGJ1cy9maWxlcy9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE4MmMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9yZXN0LWRidXMvZmlsZXMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zZDc5NTQ3CistLS0gL2Rldi9udWxsCisrKysgYi9NYWtlZmlsZQorQEAgLTAsMCArMSwxOCBAQAorK1BBQ0tBR0U9cmVzdC1kYnVzCisrCisrcHJlZml4Pz0vdXNyL2xvY2FsCisrYmluPSQocHJlZml4KS91c3IvYmluCisrc2hhcmU9JChwcmVmaXgpL3Vzci9zaGFyZS8kKFBBQ0tBR0UpCisrCisrYnVpbGQgY2xlYW4gYWxsOgorKworK2luc3RhbGw6CisrCUBpbnN0YWxsIC1kICQoYmluKSAkKHNoYXJlKS9yZXNvdXJjZXMgJChzcnYpCisrCUBpbnN0YWxsIC1tIDc1NSAkKFBBQ0tBR0UpICQoYmluKQorKwlAZm9yIGYgaW4gcmVzb3VyY2VzLyo7IGRvIFwKKysJCWluc3RhbGwgLW02NDQgJCRmICQoc2hhcmUpL3Jlc291cmNlczsgXAorKwlkb25lCisrCisrdW5pbnN0YWxsOgorKwlAcm0gLWYgJChiaW4pLyQoUEFDS0FHRSkKKysJQHJtIC1yZiAkKHNoYXJlKQpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9yZXN0LWRidXMvZmlsZXMvbm8tc2Vzc2lvbi1idXMucGF0Y2ggYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL3Jlc3QtZGJ1cy9maWxlcy9uby1zZXNzaW9uLWJ1cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjhhMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9yZXN0LWRidXMvZmlsZXMvbm8tc2Vzc2lvbi1idXMucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorSW5kZXg6IGdpdC9yZXN0LWRidXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9yZXN0LWRidXMKKysrKyBnaXQvcmVzdC1kYnVzCitAQCAtOCw3ICs4LDYgQEAgaW1wb3J0IG9zCisgZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisgCisgYnVzc2VzID0geworLSAgICAnc2Vzc2lvbic6IGRidXMuU2Vzc2lvbkJ1cywKKyAgICAgJ3N5c3RlbSc6IGRidXMuU3lzdGVtQnVzLAorIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvcmVzdC1kYnVzL2ZpbGVzL3Jlc291cmNlcy1wYXRoLnBhdGNoIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9yZXN0LWRidXMvZmlsZXMvcmVzb3VyY2VzLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlNDQwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvcmVzdC1kYnVzL2ZpbGVzL3Jlc291cmNlcy1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLS1naXQgYS9yZXN0LWRidXMgYi9yZXN0LWRidXMKK2luZGV4IDU2ZWMxZjkuLjA3OGIxY2YgMTAwNzU1CistLS0gYS9yZXN0LWRidXMKKysrKyBiL3Jlc3QtZGJ1cworQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgREJ1c1Jlc3RSZXNvdXJjZVJlc3BvbnNlKERCdXNSZXN0UmVzcG9uc2UpOgorICAgICAgICAgJ3BuZyc6ICdpbWFnZS9wbmcnLAorICAgICAgICAgJ2dpZic6ICdpbWFnZS9naWYnLAorICAgICB9CistICAgIHJlc291cmNlX2Jhc2UgPSAncmVzb3VyY2VzJworKyAgICByZXNvdXJjZV9iYXNlID0gJy91c3Ivc2hhcmUvcmVzdC1kYnVzL3Jlc291cmNlcycKKyAKKyAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgKF8sIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KG5hbWUpCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL3Jlc3QtZGJ1cy9maWxlcy9yZXN0LWRidXMuc2VydmljZSBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMtcGhvc3Bob3IvcmVzdC1kYnVzL2ZpbGVzL3Jlc3QtZGJ1cy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NmNmNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL3Jlc3QtZGJ1cy9maWxlcy9yZXN0LWRidXMuc2VydmljZQpAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249REJVUyBpbnRyb3NwZWN0aW5nIFJFU1Qgc2VydmVyLgorCitbU2VydmljZV0KK0V4ZWNTdGFydD0vdXNyL2Jpbi9yZXN0LWRidXMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9yZXN0LWRidXMvcmVzdC1kYnVzLmJiIGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy1waG9zcGhvci9yZXN0LWRidXMvcmVzdC1kYnVzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjQ3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbW1vbi9yZWNpcGVzLXBob3NwaG9yL3Jlc3QtZGJ1cy9yZXN0LWRidXMuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJQaG9zcGhvciBPcGVuQk1DIFJFU1QgZnJhbWV3b3JrIgorREVTQ1JJUFRJT04gPSAiUGhvc3Bob3IgT3BlbkJNQyBSRVNUIHRvIERCVVMgZGFlbW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL29wZW5ibWMvcmVzdC1kYnVzIgorUFIgPSAicjEiCisKK2luaGVyaXQgYWxsYXJjaAoraW5oZXJpdCBvYm1jLXBob3NwaG9yLWxpY2Vuc2UKK2luaGVyaXQgb2JtYy1waG9zcGhvci1zeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICIke1BOfS5zZXJ2aWNlIgorCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgcHl0aG9uLW5ldHNlcnZlciBcCisgICAgICAgIHB5dGhvbi1qc29uIFwKKyAgICAgICAgcHl0aG9uLWRidXMgXAorICAgICAgICBweXRob24teG1sIFwKKyAgICAgICAgIgorU1JDX1VSSSArPSAiIFwKKyAgICAgICAgZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuYm1jL3Jlc3QtZGJ1cy5naXQgXAorICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcmVzb3VyY2VzLXBhdGgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbm8tc2Vzc2lvbi1idXMucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ1JFViA9ICI5YjBlMGJhYjUxNTBjY2M0MzMzY2U0NDI5MzJmODk2OWYzNjUxNTVlIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIHByZWZpeD0ke0R9IGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMudHh0IGIvbWV0YS1waG9zcGhvci9jb21tb24vcmVjaXBlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjODhiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29tbW9uL3JlY2lwZXMudHh0CkBAIC0wLDAgKzEgQEAKK3JlY2lwZXMtcGhvc3Bob3IgICAgICAtIFBob3NwaG9yIE9wZW5CTUMgYXBwbGljYXRpb25zIGFuZCBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUgYi9tZXRhLXBob3NwaG9yL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMzIxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29uZi9iYmxheWVycy5jb25mLnNhbXBsZQpAQCAtMCwwICsxLDE2IEBACisjIExBWUVSX0NPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvYmJsYXllcnMuY29uZgorIyBjaGFuZ2VzIGluY29tcGF0aWJseQorTENPTkZfVkVSU0lPTiA9ICI2IgorCitCQlBBVEggPSAiJHtUT1BESVJ9IgorQkJGSUxFUyA/PSAiIgorCitCQkxBWUVSUyA/PSAiIFwKKyAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXBob3NwaG9yIFwKKyAgIgorQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvIFwKKyAgIgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb25mL2NvbmYtbm90ZXMudHh0IGIvbWV0YS1waG9zcGhvci9jb25mL2NvbmYtbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZGIxNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbmYvY29uZi1ub3Rlcy50eHQKQEAgLTAsMCArMSw1IEBACitDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgIG9ibWMtcGhvc3Bob3ItaW1hZ2UKKworWW91IGNhbiBhbHNvIHJ1biBnZW5lcmF0ZWQgcWVtdSBpbWFnZXMgd2l0aCBhIGNvbW1hbmQgbGlrZToKKyAgICAgcnVucWVtdSBxZW11YXJtCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbmYvZGlzdHJvL29wZW5ibWMtcGhvc3Bob3IuY29uZiBiL21ldGEtcGhvc3Bob3IvY29uZi9kaXN0cm8vb3BlbmJtYy1waG9zcGhvci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZTUwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXBob3NwaG9yL2NvbmYvZGlzdHJvL29wZW5ibWMtcGhvc3Bob3IuY29uZgpAQCAtMCwwICsxLDM1IEBACityZXF1aXJlIGNvbmYvZGlzdHJvL3Bva3kuY29uZgorCitESVNUUk8gPSAib3BlbmJtYy1waG9zcGhvciIKK0RJU1RST19OQU1FID0gIlBob3NwaG9yIE9wZW5CTUMgKFBob3NwaG9yIE9wZW5CTUMgUHJvamVjdCBSZWZlcmVuY2UgRGlzdHJvKSIKK0RJU1RST19WRVJTSU9OID0gIjAuMS4wIgorVEFSR0VUX1ZFTkRPUj0iLW9wZW5ibWMiCisKK0lNQUdFX0ZTVFlQRVMgKz0gImNwaW8uZ3oiCitJTUFHRV9MSU5HVUFTID0gImVuLXVzIgorCitWSVJUVUFMLVJVTlRJTUVfa2V5bWFwcyA9ICIiCisKKyMgUGhvc3Bob3IgT3BlbkJNQyB1c2VzIHN5c3RlbWQgYW5kIHVkZXYKK0RJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHN5c3RlbWQiCitWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID0gInN5c3RlbWQiCitESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCA9ICJzeXN2aW5pdCIKK1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0cyA9ICIiCisKK0RJU1RST19GRUFUVVJFUyA9ICJcCisgICAgICAgIGlwdjYgXAorICAgICAgICBvYm1jLXBob3NwaG9yLWZhbi1tZ210IFwKKyAgICAgICAgb2JtYy1waG9zcGhvci1jaGFzc2lzLW1nbXQgXAorICAgICAgICBvYm1jLXBob3NwaG9yLXNlbnNvci1tZ210IFwKKyAgICAgICAgb2JtYy1waG9zcGhvci1mbGFzaC1tZ210IFwKKyAgICAgICAgb2JtYy1waG9zcGhvci1ldmVudC1tZ210IFwKKyAgICAgICAgb2JtYy1waG9zcGhvci1wb2xpY3ktbWdtdCBcCisgICAgICAgIG9ibWMtcGhvc3Bob3Itc3lzdGVtLW1nbXQgXAorICAgICAgICAke0RJU1RST19GRUFUVVJFU19MSUJDfSBcCisgICAgICAgICIKKworTUFDSElORV9GRUFUVVJFUyArPSAiIFwKKyAgICAgICAgJHtPQk1DX01BQ0hJTkVfRkVBVFVSRVN9IFwKKyAgICAgICAgIgorCitESVNUUk9fRVhUUkFfUkRFUEVORFNfcmVtb3ZlX3FlbXVhcm0gPSAicGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsIgpkaWZmIC0tZ2l0IGEvbWV0YS1waG9zcGhvci9jb25mL2xheWVyLmNvbmYgYi9tZXRhLXBob3NwaG9yL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmNjZWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1waG9zcGhvci9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vY29tbW9uL3JlY2lwZXMtKi8qLyouYmIgXAorICAgICAgICAgICAgJHtMQVlFUkRJUn0vY29tbW9uL3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAib2JtYy1waG9zcGhvciIKK0JCRklMRV9QQVRURVJOX29ibWMtcGhvc3Bob3IgPSAiXiR7TEFZRVJESVJ9LyIKK0xBWUVSVkVSU0lPTl9vYm1jLXBob3NwaG9yID0gIjEiCisKKyMgUHJvdmlkZSBhIHZhcmlhYmxlIHRoYXQgcG9pbnRzIHRoZSBiYXNlIG9mIHRoZSBwaG9zcGhvciBsYXllci4KK1BIT1NQSE9SQkFTRSA9ICcke0Bvcy5wYXRoLm5vcm1wYXRoKCIke0xBWUVSRElSfS8iKX0nCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUgYi9tZXRhLXBob3NwaG9yL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5ZGVkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29uZi9sb2NhbC5jb25mLnNhbXBsZQpAQCAtMCwwICsxLDI0NyBAQAorIworIyBUaGlzIGZpbGUgaXMgeW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUgYW5kIGlzIHdoZXJlIGFsbCBsb2NhbCB1c2VyIHNldHRpbmdzCisjIGFyZSBwbGFjZWQuIFRoZSBjb21tZW50cyBpbiB0aGlzIGZpbGUgZ2l2ZSBzb21lIGd1aWRlIHRvIHRoZSBvcHRpb25zIGEgbmV3IHVzZXIKKyMgdG8gdGhlIHN5c3RlbSBtaWdodCB3YW50IHRvIGNoYW5nZSBidXQgcHJldHR5IG11Y2ggYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbgorIyBiZSBzZXQgaW4gdGhpcyBmaWxlLiBNb3JlIGFkdmVudHVyb3VzIHVzZXJzIGNhbiBsb29rIGF0IGxvY2FsLmNvbmYuZXh0ZW5kZWQgCisjIHdoaWNoIGNvbnRhaW5zIG90aGVyIGV4YW1wbGVzIG9mIGNvbmZpZ3VyYXRpb24gd2hpY2ggY2FuIGJlIHBsYWNlZCBpbiB0aGlzIGZpbGUKKyMgYnV0IG5ldyB1c2VycyBsaWtlbHkgd29uJ3QgbmVlZCBhbnkgb2YgdGhlbSBpbml0aWFsbHkuCisjCisjIExpbmVzIHN0YXJ0aW5nIHdpdGggdGhlICcjJyBjaGFyYWN0ZXIgYXJlIGNvbW1lbnRlZCBvdXQgYW5kIGluIHNvbWUgY2FzZXMgdGhlIAorIyBkZWZhdWx0IHZhbHVlcyBhcmUgcHJvdmlkZWQgYXMgY29tbWVudHMgdG8gc2hvdyBwZW9wbGUgZXhhbXBsZSBzeW50YXguIEVuYWJsaW5nCisjIHRoZSBvcHRpb24gaXMgYSBxdWVzdGlvbiBvZiByZW1vdmluZyB0aGUgIyBjaGFyYWN0ZXIgYW5kIG1ha2luZyBhbnkgY2hhbmdlIHRvIHRoZQorIyB2YXJpYWJsZSBhcyByZXF1aXJlZC4KKworIworIyBNYWNoaW5lIFNlbGVjdGlvbgorIworIyBZb3UgbmVlZCB0byBzZWxlY3QgYSBzcGVjaWZpYyBtYWNoaW5lIHRvIHRhcmdldCB0aGUgYnVpbGQgd2l0aC4gVGhlcmUgYXJlIGEgc2VsZWN0aW9uCisjIG9mIGVtdWxhdGVkIG1hY2hpbmVzIGF2YWlsYWJsZSB3aGljaCBjYW4gYm9vdCBhbmQgcnVuIGluIHRoZSBRRU1VIGVtdWxhdG9yOgorIworI01BQ0hJTkUgPz0gInFlbXVhcm0iCisjTUFDSElORSA/PSAicWVtdWFybTY0IgorI01BQ0hJTkUgPz0gInFlbXVtaXBzIgorI01BQ0hJTkUgPz0gInFlbXVwcGMiCisjTUFDSElORSA/PSAicWVtdXg4NiIKKyNNQUNISU5FID89ICJxZW11eDg2LTY0IgorIworIyBUaGVyZSBhcmUgYWxzbyB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIGJvYXJkIHRhcmdldCBtYWNoaW5lcyBpbmNsdWRlZCBmb3IgCisjIGRlbW9uc3RyYXRpb24gcHVycG9zZXM6CisjCisjTUFDSElORSA/PSAiYmVhZ2xlYm9uZSIKKyNNQUNISU5FID89ICJnZW5lcmljeDg2IgorI01BQ0hJTkUgPz0gImdlbmVyaWN4ODYtNjQiCisjTUFDSElORSA/PSAibXBjODMxNWUtcmRiIgorI01BQ0hJTkUgPz0gImVkZ2Vyb3V0ZXIiCisjCisjIFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBtYWNoaW5lIHRvIGJlIHFlbXV4ODYgaWYgbm8gb3RoZXIgbWFjaGluZSBpcyBzZWxlY3RlZDoKK01BQ0hJTkUgPz89ICJxZW11YXJtIgorCisjCisjIFdoZXJlIHRvIHBsYWNlIGRvd25sb2FkcworIworIyBEdXJpbmcgYSBmaXJzdCBidWlsZCB0aGUgc3lzdGVtIHdpbGwgZG93bmxvYWQgbWFueSBkaWZmZXJlbnQgc291cmNlIGNvZGUgdGFyYmFsbHMKKyMgZnJvbSB2YXJpb3VzIHVwc3RyZWFtIHByb2plY3RzLiBUaGlzIGNhbiB0YWtlIGEgd2hpbGUsIHBhcnRpY3VsYXJseSBpZiB5b3VyIG5ldHdvcmsKKyMgY29ubmVjdGlvbiBpcyBzbG93LiBUaGVzZSBhcmUgYWxsIHN0b3JlZCBpbiBETF9ESVIuIFdoZW4gd2lwaW5nIGFuZCByZWJ1aWxkaW5nIHlvdQorIyBjYW4gcHJlc2VydmUgdGhpcyBkaXJlY3RvcnkgdG8gc3BlZWQgdXAgdGhpcyBwYXJ0IG9mIHN1YnNlcXVlbnQgYnVpbGRzLiBUaGlzIGRpcmVjdG9yeQorIyBpcyBzYWZlIHRvIHNoYXJlIGJldHdlZW4gbXVsdGlwbGUgYnVpbGRzIG9uIHRoZSBzYW1lIG1hY2hpbmUgdG9vLgorIworIyBUaGUgZGVmYXVsdCBpcyBhIGRvd25sb2FkcyBkaXJlY3RvcnkgdW5kZXIgVE9QRElSIHdoaWNoIGlzIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjCisjRExfRElSID89ICIke1RPUERJUn0vZG93bmxvYWRzIgorCisjCisjIFdoZXJlIHRvIHBsYWNlIHNoYXJlZC1zdGF0ZSBmaWxlcworIworIyBCaXRCYWtlIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBhY2NlbGVyYXRlIGJ1aWxkcyBiYXNlZCBvbiBwcmV2aW91c2x5IGJ1aWx0IG91dHB1dC4KKyMgVGhpcyBpcyBkb25lIHVzaW5nICJzaGFyZWQgc3RhdGUiIGZpbGVzIHdoaWNoIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGNhY2hlIG9iamVjdHMKKyMgYW5kIHRoaXMgb3B0aW9uIGRldGVybWluZXMgd2hlcmUgdGhvc2UgZmlsZXMgYXJlIHBsYWNlZC4KKyMKKyMgWW91IGNhbiB3aXBlIG91dCBUTVBESVIgbGVhdmluZyB0aGlzIGRpcmVjdG9yeSBpbnRhY3QgYW5kIHRoZSBidWlsZCB3b3VsZCByZWdlbmVyYXRlCisjIGZyb20gdGhlc2UgZmlsZXMgaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIGNvbmZpZ3VyYXRpb24uIElmIGNoYW5nZXMgd2VyZSBtYWRlCisjIHRvIHRoZSBjb25maWd1cmF0aW9uLCBvbmx5IHNoYXJlZCBzdGF0ZSBmaWxlcyB3aGVyZSB0aGUgc3RhdGUgd2FzIHN0aWxsIHZhbGlkIHdvdWxkCisjIGJlIHVzZWQgKGRvbmUgdXNpbmcgY2hlY2tzdW1zKS4KKyMKKyMgVGhlIGRlZmF1bHQgaXMgYSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IHVuZGVyIFRPUERJUi4KKyMKKyNTU1RBVEVfRElSID89ICIke1RPUERJUn0vc3N0YXRlLWNhY2hlIgorCisjCisjIFdoZXJlIHRvIHBsYWNlIHRoZSBidWlsZCBvdXRwdXQKKyMKKyMgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHdoZXJlIHRoZSBidWxrIG9mIHRoZSBidWlsZGluZyB3b3JrIHNob3VsZCBiZSBkb25lIGFuZAorIyB3aGVyZSBCaXRCYWtlIHNob3VsZCBwbGFjZSBpdHMgdGVtcG9yYXJ5IGZpbGVzIGFuZCBvdXRwdXQuIEtlZXAgaW4gbWluZCB0aGF0CisjIHRoaXMgaW5jbHVkZXMgdGhlIGV4dHJhY3Rpb24gYW5kIGNvbXBpbGF0aW9uIG9mIG1hbnkgYXBwbGljYXRpb25zIGFuZCB0aGUgdG9vbGNoYWluCisjIHdoaWNoIGNhbiB1c2UgR2lnYWJ5dGVzIG9mIGhhcmQgZGlzayBzcGFjZS4KKyMKKyMgVGhlIGRlZmF1bHQgaXMgYSB0bXAgZGlyZWN0b3J5IHVuZGVyIFRPUERJUi4KKyMKKyNUTVBESVIgPSAiJHtUT1BESVJ9L3RtcCIKKworIworIyBEZWZhdWx0IHBvbGljeSBjb25maWcKKyMKKyMgVGhlIGRpc3RyaWJ1dGlvbiBzZXR0aW5nIGNvbnRyb2xzIHdoaWNoIHBvbGljeSBzZXR0aW5ncyBhcmUgdXNlZCBhcyBkZWZhdWx0cy4KKyMgVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmluZSBmb3IgZ2VuZXJhbCBZb2N0byBwcm9qZWN0IHVzZSwgYXQgbGVhc3QgaW5pdGlhbGx5LgorIyBVbHRpbWF0ZWx5IHdoZW4gY3JlYXRpbmcgY3VzdG9tIHBvbGljeSwgcGVvcGxlIHdpbGwgbGlrZWx5IGVuZCB1cCBzdWJjbGFzc2luZyAKKyMgdGhlc2UgZGVmYXVsdHMuCisjCitESVNUUk8gPz0gIm9wZW5ibWMtcGhvc3Bob3IiCisjIEFzIGFuIGV4YW1wbGUgb2YgYSBzdWJjbGFzcyB0aGVyZSBpcyBhICJibGVlZGluZyIgZWRnZSBwb2xpY3kgY29uZmlndXJhdGlvbgorIyB3aGVyZSBtYW55IHZlcnNpb25zIGFyZSBzZXQgdG8gdGhlIGFic29sdXRlIGxhdGVzdCBjb2RlIGZyb20gdGhlIHVwc3RyZWFtIAorIyBzb3VyY2UgY29udHJvbCBzeXN0ZW1zLiBUaGlzIGlzIGp1c3QgbWVudGlvbmVkIGhlcmUgYXMgYW4gZXhhbXBsZSwgaXRzIG5vdAorIyB1c2VmdWwgdG8gbW9zdCBuZXcgdXNlcnMuCisjIERJU1RSTyA/PSAicG9reS1ibGVlZGluZyIKKworIworIyBQYWNrYWdlIE1hbmFnZW1lbnQgY29uZmlndXJhdGlvbgorIworIyBUaGlzIHZhcmlhYmxlIGxpc3RzIHdoaWNoIHBhY2thZ2luZyBmb3JtYXRzIHRvIGVuYWJsZS4gTXVsdGlwbGUgcGFja2FnZSBiYWNrZW5kcyAKKyMgY2FuIGJlIGVuYWJsZWQgYXQgb25jZSBhbmQgdGhlIGZpcnN0IGl0ZW0gbGlzdGVkIGluIHRoZSB2YXJpYWJsZSB3aWxsIGJlIHVzZWQgCisjIHRvIGdlbmVyYXRlIHRoZSByb290IGZpbGVzeXN0ZW1zLgorIyBPcHRpb25zIGFyZToKKyMgIC0gJ3BhY2thZ2VfZGViJyBmb3IgZGViaWFuIHN0eWxlIGRlYiBmaWxlcworIyAgLSAncGFja2FnZV9pcGsnIGZvciBpcGsgZmlsZXMgYXJlIHVzZWQgYnkgb3BrZyAoYSBkZWJpYW4gc3R5bGUgZW1iZWRkZWQgcGFja2FnZSBtYW5hZ2VyKQorIyAgLSAncGFja2FnZV9ycG0nIGZvciBycG0gc3R5bGUgcGFja2FnZXMKKyMgRS5nLjogUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX3JwbSBwYWNrYWdlX2RlYiBwYWNrYWdlX2lwayIKKyMgV2UgZGVmYXVsdCB0byBycG06CitQQUNLQUdFX0NMQVNTRVMgPz0gInBhY2thZ2VfcnBtIgorCisjCisjIFNESy9BRFQgdGFyZ2V0IGFyY2hpdGVjdHVyZQorIworIyBUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYXJjaGl0ZWN0dXJlIHRvIGJ1aWxkIFNESy9BRFQgaXRlbXMgZm9yIGFuZCBtZWFucworIyB5b3UgY2FuIGJ1aWxkIHRoZSBTREsgcGFja2FnZXMgZm9yIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgbWFjaGluZSB5b3UgYXJlIAorIyBydW5uaW5nIHRoZSBidWlsZCBvbiAoaS5lLiBidWlsZGluZyBpNjg2IHBhY2thZ2VzIG9uIGFuIHg4Nl82NCBob3N0KS4KKyMgU3VwcG9ydGVkIHZhbHVlcyBhcmUgaTY4NiBhbmQgeDg2XzY0CisjU0RLTUFDSElORSA/PSAiaTY4NiIKKworU0FOSVRZX1RFU1RFRF9ESVNUUk9TX2FwcGVuZCA/PSAiIFJlZEhhdEVudGVycHJpc2VXb3Jrc3RhdGlvbi02LioiCisKKyMKKyMgRXh0cmEgaW1hZ2UgY29uZmlndXJhdGlvbiBkZWZhdWx0cworIworIyBUaGUgRVhUUkFfSU1BR0VfRkVBVFVSRVMgdmFyaWFibGUgYWxsb3dzIGV4dHJhIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgCisjIGltYWdlcy4gU29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSBhZGRlZCB0byBjZXJ0YWluIGltYWdlIHR5cGVzIGF1dG9tYXRpY2FsbHkuIFRoZQorIyB2YXJpYWJsZSBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisjICAiZGJnLXBrZ3MiICAgICAgIC0gYWRkIC1kYmcgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAoYWRkcyBzeW1ib2wgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy9wcm9maWxpbmcpCisjICAiZGV2LXBrZ3MiICAgICAgIC0gYWRkIC1kZXYgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAodXNlZnVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AgYWdhaW5zdCBsaWJzIGluIHRoZSBpbWFnZSkKKyMgICJwdGVzdC1wa2dzIiAgICAgLSBhZGQgLXB0ZXN0IHBhY2thZ2VzIGZvciBhbGwgcHRlc3QtZW5hYmxlZCBwYWNrYWdlcworIyAgICAgICAgICAgICAgICAgICAgICh1c2VmdWwgaWYgeW91IHdhbnQgdG8gcnVuIHRoZSBwYWNrYWdlIHRlc3Qgc3VpdGVzKQorIyAgInRvb2xzLXNkayIgICAgICAtIGFkZCBkZXZlbG9wbWVudCB0b29scyAoZ2NjLCBtYWtlLCBwa2djb25maWcgZXRjLikKKyMgICJ0b29scy1kZWJ1ZyIgICAgLSBhZGQgZGVidWdnaW5nIHRvb2xzIChnZGIsIHN0cmFjZSkKKyMgICJlY2xpcHNlLWRlYnVnIiAgLSBhZGQgRWNsaXBzZSByZW1vdGUgZGVidWdnaW5nIHN1cHBvcnQKKyMgICJ0b29scy1wcm9maWxlIiAgLSBhZGQgcHJvZmlsaW5nIHRvb2xzIChvcHJvZmlsZSwgZXhtYXAsIGx0dG5nLCB2YWxncmluZCkKKyMgICJ0b29scy10ZXN0YXBwcyIgLSBhZGQgdXNlZnVsIHRlc3RpbmcgdG9vbHMgKHRzX3ByaW50LCBhcGxheSwgYXJlY29yZCBldGMuKQorIyAgImRlYnVnLXR3ZWFrcyIgICAtIG1ha2UgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50CisjICAgICAgICAgICAgICAgICAgICAgZS5nLiBzc2ggcm9vdCBhY2Nlc3MgaGFzIGEgYmxhbmsgcGFzc3dvcmQKKyMgVGhlcmUgYXJlIG90aGVyIGFwcGxpY2F0aW9uIHRhcmdldHMgdGhhdCBjYW4gYmUgdXNlZCBoZXJlIHRvbywgc2VlCisjIG1ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGFuZCBtZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGZvciBtb3JlIGRldGFpbHMuCisjIFdlIGRlZmF1bHQgdG8gZW5hYmxpbmcgdGhlIGRlYnVnZ2luZyB0d2Vha3MuCitFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJkZWJ1Zy10d2Vha3MiCisKKyMKKyMgQWRkaXRpb25hbCBpbWFnZSBmZWF0dXJlcworIworIyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHdoaWNoCisjIGVuYWJsZSBleHRyYSBmZWF0dXJlcy4gU29tZSBhdmFpbGFibGUgb3B0aW9ucyB3aGljaCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhpcyB2YXJpYWJsZSAKKyMgYXJlOgorIyAgIC0gJ2J1aWxkc3RhdHMnIGNvbGxlY3QgYnVpbGQgc3RhdGlzdGljcworIyAgIC0gJ2ltYWdlLW1rbGlicycgdG8gcmVkdWNlIHNoYXJlZCBsaWJyYXJ5IGZpbGVzIHNpemUgZm9yIGFuIGltYWdlCisjICAgLSAnaW1hZ2UtcHJlbGluaycgaW4gb3JkZXIgdG8gcHJlbGluayB0aGUgZmlsZXN5c3RlbSBpbWFnZQorIyAgIC0gJ2ltYWdlLXN3YWInIHRvIHBlcmZvcm0gaG9zdCBzeXN0ZW0gaW50cnVzaW9uIGRldGVjdGlvbgorIyBOT1RFOiBpZiBsaXN0aW5nIG1rbGlicyAmIHByZWxpbmsgYm90aCwgdGhlbiBtYWtlIHN1cmUgbWtsaWJzIGlzIGJlZm9yZSBwcmVsaW5rCisjIE5PVEU6IG1rbGlicyBhbHNvIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBmb3IgYSBnaXZlbiBpbWFnZSwgc2VlIGxvY2FsLmNvbmYuZXh0ZW5kZWQKK1VTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKKworIworIyBSdW50aW1lIHRlc3Rpbmcgb2YgaW1hZ2VzCisjCisjIFRoZSBidWlsZCBzeXN0ZW0gY2FuIHRlc3QgYm9vdGluZyB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHFlbXUgKGFuIGVtdWxhdG9yKQorIyBhZnRlciBhbnkgcm9vdCBmaWxlc3lzdGVtcyBhcmUgY3JlYXRlZCBhbmQgcnVuIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiBUbworIyBlbmFibGUgdGhpcyB1bmNvbW1lbnQgdGhpcyBsaW5lLiBTZWUgY2xhc3Nlcy90ZXN0aW1hZ2UoLWF1dG8pLmJiY2xhc3MgZm9yCisjIGZ1cnRoZXIgZGV0YWlscy4KKyNURVNUX0lNQUdFID0gIjEiCisjCisjIEludGVyYWN0aXZlIHNoZWxsIGNvbmZpZ3VyYXRpb24KKyMKKyMgVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoZSBzeXN0ZW0gbWF5IG5lZWQgaW5wdXQgZnJvbSB5b3UgYW5kIHRvIGRvIHRoaXMgaXQgCisjIGNhbiBsYXVuY2ggYW4gaW50ZXJhY3RpdmUgc2hlbGwuIEl0IG5lZWRzIHRvIGRvIHRoaXMgc2luY2UgdGhlIGJ1aWxkIGlzIAorIyBtdWx0aXRocmVhZGVkIGFuZCBuZWVkcyB0byBiZSBhYmxlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIHBhcmFsbGVsCisjIHByb2Nlc3MgbWF5IHJlcXVpcmUgdGhlIHVzZXIncyBhdHRlbnRpb24uIFRoZSBkZWZhdWx0IGlzIGl0ZXJhdGUgb3ZlciB0aGUgYXZhaWxhYmxlCisjIHRlcm1pbmFsIHR5cGVzIHRvIGZpbmQgb25lIHRoYXQgd29ya3MuCisjCisjIEV4YW1wbGVzIG9mIHRoZSBvY2Nhc2lvbnMgdGhpcyBtYXkgaGFwcGVuIGFyZSB3aGVuIHJlc29sdmluZyBwYXRjaGVzIHdoaWNoIGNhbm5vdAorIyBiZSBhcHBsaWVkLCB0byB1c2UgdGhlIGRldnNoZWxsIG9yIHRoZSBrZXJuZWwgbWVudWNvbmZpZworIworIyBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBhdXRvLCBnbm9tZSwgeGZjZSwgcnh2dCwgc2NyZWVuLCBrb25zb2xlIChLREUgMy54IG9ubHkpLCBub25lCisjIE5vdGU6IGN1cnJlbnRseSwgS29uc29sZSBzdXBwb3J0IG9ubHkgd29ya3MgZm9yIEtERSAzLnggZHVlIHRvIHRoZSB3YXkKKyMgbmV3ZXIgS29uc29sZSB2ZXJzaW9ucyBiZWhhdmUKKyNPRV9URVJNSU5BTCA9ICJhdXRvIgorIyBCeSBkZWZhdWx0IGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbiAodGFza3Mgd2lsbCBqdXN0IGZhaWwgaW5zdGVhZCk6CitQQVRDSFJFU09MVkUgPSAibm9vcCIKKworIworIyBEaXNrIFNwYWNlIE1vbml0b3JpbmcgZHVyaW5nIHRoZSBidWlsZAorIworIyBNb25pdG9yIHRoZSBkaXNrIHNwYWNlIGR1cmluZyB0aGUgYnVpbGQuIElmIHRoZXJlIGlzIGxlc3MgdGhhdCAxR0Igb2Ygc3BhY2Ugb3IgbGVzcworIyB0aGFuIDEwMEsgaW5vZGVzIGluIGFueSBrZXkgYnVpbGQgbG9jYXRpb24gKFRNUERJUiwgRExfRElSLCBTU1RBVEVfRElSKSwgZ3JhY2VmdWxseQorIyBzaHV0ZG93biB0aGUgYnVpbGQuIElmIHRoZXJlIGlzIGxlc3MgdGhhdCAxMDBNQiBvciAxSyBpbm9kZXMsIHBlcmZvcm0gYSBoYXJkIGFib3J0CisjIG9mIHRoZSBidWlsZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHJ1bm5pbmcgY29tcGxldGVseSBvdXQgb2Ygc3BhY2UgY2FuIGNvcnJ1cHQKKyMgZmlsZXMgYW5kIGRhbWFnZXMgdGhlIGJ1aWxkIGluIHdheXMgd2hpY2ggbWF5IG5vdCBiZSBlYXNpbHkgcmVjb3ZlcmFibGUuCisjIEl0J3MgbmVjZXNhcnkgdG8gbW9uaXRvciAvdG1wLCBpZiB0aGVyZSBpcyBubyBzcGFjZSBsZWZ0IHRoZSBidWlsZCB3aWxsIGZhaWwKKyMgd2l0aCB2ZXJ5IGV4b3RpYyBlcnJvcnMuCitCQl9ESVNLTU9OX0RJUlMgPSAiXAorICAgIFNUT1BUQVNLUywke1RNUERJUn0sMUcsMTAwSyBcCisgICAgU1RPUFRBU0tTLCR7RExfRElSfSwxRywxMDBLIFwKKyAgICBTVE9QVEFTS1MsJHtTU1RBVEVfRElSfSwxRywxMDBLIFwKKyAgICBTVE9QVEFTS1MsL3RtcCwxMDBNLDEwMEsgXAorICAgIEFCT1JULCR7VE1QRElSfSwxMDBNLDFLIFwKKyAgICBBQk9SVCwke0RMX0RJUn0sMTAwTSwxSyBcCisgICAgQUJPUlQsJHtTU1RBVEVfRElSfSwxMDBNLDFLIFwKKyAgICBBQk9SVCwvdG1wLDEwTSwxSyIKKworIworIyBTaGFyZWQtc3RhdGUgZmlsZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMKKyMKKyMgQXMgbWVudGlvbmVkIGFib3ZlLCBzaGFyZWQgc3RhdGUgZmlsZXMgYXJlIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyB3aGljaCBjYW4gCisjIHVzZWQgdG8gYWNjZWxlcmF0ZSBidWlsZCB0aW1lLiBUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc3lzdGVtCisjIHRvIHNlYXJjaCBvdGhlciBtaXJyb3IgbG9jYXRpb25zIGZvciB0aGVzZSBvYmplY3RzIGJlZm9yZSBpdCBidWlsZHMgdGhlIGRhdGEgaXRzZWxmLgorIworIyBUaGlzIGNhbiBiZSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5LCBvciBhIHJlbW90ZSB1cmwgc3VjaCBhcyBodHRwIG9yIGZ0cC4gVGhlc2UKKyMgd291bGQgY29udGFpbiB0aGUgc3N0YXRlLWNhY2hlIHJlc3VsdHMgZnJvbSBwcmV2aW91cyBidWlsZHMgKHBvc3NpYmx5IGZyb20gb3RoZXIgCisjIG1hY2hpbmVzKS4gVGhpcyB2YXJpYWJsZSB3b3JrcyBsaWtlIGZldGNoZXIgTUlSUk9SUy9QUkVNSVJST1JTIGFuZCBwb2ludHMgdG8gdGhlIAorIyBjYWNoZSBsb2NhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBzaGFyZWQgb2JqZWN0cy4KKyMgTk9URTogaWYgdGhlIG1pcnJvciB1c2VzIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBTU1RBVEVfRElSLCB5b3UgbmVlZCB0byBhZGQgUEFUSAorIyBhdCB0aGUgZW5kIGFzIHNob3duIGluIHRoZSBleGFtcGxlcyBiZWxvdy4gVGhpcyB3aWxsIGJlIHN1YnN0aXR1dGVkIHdpdGggdGhlCisjIGNvcnJlY3QgcGF0aCB3aXRoaW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisjU1NUQVRFX01JUlJPUlMgPz0gIlwKKyNmaWxlOi8vLiogaHR0cDovL3NvbWVzZXJ2ZXIudGxkL3NoYXJlL3NzdGF0ZS9QQVRIO2Rvd25sb2FkZmlsZW5hbWU9UEFUSCBcbiBcCisjZmlsZTovLy4qIGZpbGU6Ly8vc29tZS9sb2NhbC9kaXIvc3N0YXRlL1BBVEgiCisKKworIworIyBRZW11IGNvbmZpZ3VyYXRpb24KKyMKKyMgQnkgZGVmYXVsdCBxZW11IHdpbGwgYnVpbGQgd2l0aCBhIGJ1aWx0aW4gVk5DIHNlcnZlciB3aGVyZSBncmFwaGljYWwgb3V0cHV0IGNhbiBiZQorIyBzZWVuLiBUaGUgdHdvIGxpbmVzIGJlbG93IGVuYWJsZSB0aGUgU0RMIGJhY2tlbmQgdG9vLiBUaGlzIGFzc3VtZXMgdGhlcmUgaXMgYQorIyBsaWJzZGwgbGlicmFyeSBhdmFpbGFibGUgb24geW91ciBidWlsZCBzeXN0ZW0uCitQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1xZW11LW5hdGl2ZSA9ICIgc2RsIgorUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tbmF0aXZlc2RrLXFlbXUgPSAiIHNkbCIKK0FTU1VNRV9QUk9WSURFRCArPSAibGlic2RsLW5hdGl2ZSIKKworCisjIENPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvIGNoYW5nZXMgaW5jb21wYXRpYmx5IGFuZCBpcyB1c2VkIHRvCisjIHRyYWNrIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB3aGVuIGl0IHdhcyBnZW5lcmF0ZWQuIFRoaXMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGlmCisjIHRoaXMgZG9lc24ndCBtZWFuIGFueXRoaW5nIHRvIHlvdS4KK0NPTkZfVkVSU0lPTiA9ICIxIgorCisjIFNldCB0aGUgcm9vdCBwYXNzd29yZCB0byAnMHBlbkJtYycKK0lOSEVSSVQgKz0gImV4dHJhdXNlcnMiCisKK0VYVFJBX1VTRVJTX1BBUkFNUyA9ICIgXAorICB1c2VybW9kIC1wICdcJDFcJFVHTXF5cWRHXCRGWml5bFZGbVJSZmw5WjBVZThHN2UvJyByb290OyBcCisgICIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9zYW1wbGUuaW5jCmRpZmYgLS1naXQgYS9tZXRhLXBob3NwaG9yL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NhbXBsZS5pbmMgYi9tZXRhLXBob3NwaG9yL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NhbXBsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhZDBlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtcGhvc3Bob3IvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2FtcGxlLmluYwpAQCAtMCwwICsxLDE5IEBACitPQk1DX01BQ0hJTkVfRkVBVFVSRVMgKz0gIlwKKyAgICAgICAgb2JtYy1waG9zcGhvci1mYW4tbWdtdCBcCisgICAgICAgIG9ibWMtcGhvc3Bob3ItY2hhc3Npcy1tZ210IFwKKyAgICAgICAgb2JtYy1waG9zcGhvci1zZW5zb3ItbWdtdCBcCisgICAgICAgIG9ibWMtcGhvc3Bob3ItZmxhc2gtbWdtdCBcCisgICAgICAgICIKKworVklSVFVBTC1SVU5USU1FX29ibWMtcGhvc3Bob3ItZmFuLWN0bCA9ICIgXAorICAgICAgIG9ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cyBcCisgICAgICAgIgorVklSVFVBTC1SVU5USU1FX29ibWMtcGhvc3Bob3Itc2Vuc29yLWN0bCA9ICIgXAorICAgICAgIG9ibWMtcGhvc3Bob3ItZXhhbXBsZS1zZGJ1cyBcCisgICAgICAgIgorVklSVFVBTC1SVU5USU1FX29ibWMtcGhvc3Bob3ItY2hhc3Npcy1jdGwgPSAiIFwKKyAgICAgICBvYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzIFwKKyAgICAgICAiCitWSVJUVUFMLVJVTlRJTUVfb2JtYy1waG9zcGhvci1mbGFzaC1jdGwgPSAiIFwKKyAgICAgICBvYm1jLXBob3NwaG9yLWV4YW1wbGUtcHlkYnVzIFwKKyAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0IGIvbWV0YS1zZWxmdGVzdApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5jZTNmZDkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdApAQCAtMCwwICsxIEBACit5b2N0by1wb2t5L21ldGEtc2VsZnRlc3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uIGIvbWV0YS1za2VsZXRvbgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5mNDc3MDJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1za2VsZXRvbgpAQCAtMCwwICsxIEBACit5b2N0by1wb2t5L21ldGEtc2tlbGV0b24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvIGIvbWV0YS15b2N0bwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5jMzg0MWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0bwpAQCAtMCwwICsxIEBACit5b2N0by1wb2t5L21ldGEteW9jdG8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcCBiL21ldGEteW9jdG8tYnNwCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjVhZWQxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcApAQCAtMCwwICsxIEBACit5b2N0by1wb2t5L21ldGEteW9jdG8tYnNwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb2UtaW5pdC1idWlsZC1lbnYgYi9vZS1pbml0LWJ1aWxkLWVudgpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5mYzYzNDhiCi0tLSAvZGV2L251bGwKKysrIGIvb2UtaW5pdC1idWlsZC1lbnYKQEAgLTAsMCArMSBAQAoreW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcyBiL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4xN2VjZmUwCi0tLSAvZGV2L251bGwKKysrIGIvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3BlbmJtYy1lbnYgYi9vcGVuYm1jLWVudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2U4NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmJtYy1lbnYKQEAgLTAsMCArMSwxNiBAQAoraWYgWyAtbiAiJEJBU0hfU09VUkNFIiBdOyB0aGVuCisgICBPQk1DUk9PVD0iYGRpcm5hbWUgJEJBU0hfU09VUkNFYCIKK2VsaWYgWyAtbiAiJFpTSF9OQU1FIiBdOyB0aGVuCisgICBPQk1DUk9PVD0iYGRpcm5hbWUgJDBgIgorZWxzZQorICAgT0JNQ1JPT1Q9ImBwd2RgIgorZmkKKworaWYgWyAtZiAkT0JNQ1JPT1QvY3VzdG9tcmMgXTsgdGhlbgorICAgIGVjaG8gIiMjIyBTb3VyY2luZyBjdXN0b21yYyAjIyMiCisgICAgLiAkT0JNQ1JPT1QvY3VzdG9tcmMKK2ZpCisKK2VjaG8gIiMjIyBJbml0aWFsaXppbmcgT0UgYnVpbGQgZW52ICMjIyIKKy4gJE9CTUNST09UL29lLWluaXQtYnVpbGQtZW52CisKZGlmZiAtLWdpdCBhL3NjcmlwdHMgYi9zY3JpcHRzCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmI4MDMwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzCkBAIC0wLDAgKzEgQEAKK3lvY3RvLXBva3kvc2NyaXB0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjM1ODMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjYgQEAKKyoucHljCisqLnB5bworLyoucGF0Y2gKK2J1aWxkKi8KK3B5c2h0YWJsZXMucHkKK3BzdGFnZS8KK3NjcmlwdHMvb2UtZ2l0LXByb3h5LXNvY2tzCitzb3VyY2VzLworbWV0YS0qLworIW1ldGEtc2tlbGV0b24KKyFtZXRhLXNlbGZ0ZXN0Citob2ItaW1hZ2UtKi5iYgorKi5zd3AKKyoub3JpZworKi5yZWoKKyp+CishbWV0YS15b2N0bworIW1ldGEteW9jdG8tYnNwCishbWV0YS15b2N0by1pbXBvcnRlZAorZG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC91c2VyLW1hbnVhbC5odG1sCitkb2N1bWVudGF0aW9uL3VzZXItbWFudWFsL3VzZXItbWFudWFsLnBkZgorZG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC91c2VyLW1hbnVhbC50Z3oKK3B1bGwtKi8KK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvYmFja2xvZy50eHQKK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLyoKK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvLmNhY2hlLyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5Ly50ZW1wbGF0ZWNvbmYgYi95b2N0by1wb2t5Ly50ZW1wbGF0ZWNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1MGE0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvLnRlbXBsYXRlY29uZgpAQCAtMCwwICsxLDIgQEAKKyMgVGVtcGxhdGUgc2V0dGluZ3MKK1RFTVBMQVRFQ09ORj0ke1RFTVBMQVRFQ09ORjotbWV0YS15b2N0by9jb25mfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9MSUNFTlNFIGIveW9jdG8tcG9reS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmE2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L0xJQ0VOU0UKQEAgLTAsMCArMSwxNCBAQAorRGlmZmVyZW50IGNvbXBvbmVudHMgb2YgT3BlbkVtYmVkZGVkIGFyZSB1bmRlciBkaWZmZXJlbnQgbGljZW5zZXMgKGEgbWl4CitvZiBNSVQgYW5kIEdQTHYyKS4gUGxlYXNlIHNlZToKKworbWV0YS9DT1BZSU5HLkdQTHYyIChHUEx2MikKK21ldGEvQ09QWUlORy5NSVQgKE1JVCkKK21ldGEtc2VsZnRlc3QvQ09QWUlORy5NSVQgKE1JVCkKK21ldGEtc2tlbGV0b24vQ09QWUlORy5NSVQgKE1JVCkKKworQWxsIG1ldGFkYXRhIGlzIE1JVCBsaWNlbnNlZCB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4gU291cmNlIGNvZGUKK2luY2x1ZGVkIGluIHRyZWUgZm9yIGluZGl2aWR1YWwgcmVjaXBlcyBpcyB1bmRlciB0aGUgTElDRU5TRSBzdGF0ZWQgaW4KK3RoZSBhc3NvY2lhdGVkIHJlY2lwZSAoLmJiIGZpbGUpIHVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLgorCitMaWNlbnNlIGluZm9ybWF0aW9uIGZvciBhbnkgb3RoZXIgZmlsZXMgaXMgZWl0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIAorb3IgZGVmYXVsdHMgdG8gR1BMIHZlcnNpb24gMi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvUkVBRE1FIGIveW9jdG8tcG9reS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0OTMwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvUkVBRE1FCkBAIC0wLDAgKzEsNTggQEAKK1Bva3kKKz09PT0KKworUG9reSBpcyBhbiBpbnRlZ3JhdGlvbiBvZiB2YXJpb3VzIGNvbXBvbmVudHMgdG8gZm9ybSBhIGNvbXBsZXRlIHByZXBhY2thZ2VkCitidWlsZCBzeXN0ZW0gYW5kIGRldmVsb3BtZW50IGVudmlyb25tZW50LiBJdCBmZWF0dXJlcyBzdXBwb3J0IGZvciBidWlsZGluZworY3VzdG9taXNlZCBlbWJlZGRlZCBkZXZpY2Ugc3R5bGUgaW1hZ2VzLiBUaGVyZSBhcmUgcmVmZXJlbmNlIGRlbW8gaW1hZ2VzCitmZWF0dXJpbmcgYSBYMTEvTWF0Y2hib3gvR1RLIHRoZW1lZCBVSSBjYWxsZWQgU2F0by4gVGhlIHN5c3RlbSBzdXBwb3J0cworY3Jvc3MtYXJjaGl0ZWN0dXJlIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHVzaW5nIFFFTVUgZW11bGF0aW9uIGFuZCBhCitzdGFuZGFsb25lIHRvb2xjaGFpbiBhbmQgU0RLIHdpdGggSURFIGludGVncmF0aW9uLgorCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaGFyZHdhcmUgdGhhdCBQb2t5IHN1cHBvcnRzCitpcyBhdmFpbGFibGUgaW4gUkVBRE1FLmhhcmR3YXJlLiBGdXJ0aGVyIGhhcmR3YXJlIHN1cHBvcnQgY2FuIGVhc2lseSBiZSBhZGRlZAoraW4gdGhlIGZvcm0gb2YgbGF5ZXJzIHdoaWNoIGV4dGVuZCB0aGUgc3lzdGVtcyBjYXBhYmlsaXRpZXMgaW4gYSBtb2R1bGFyIHdheS4KKworQXMgYW4gaW50ZWdyYXRpb24gbGF5ZXIgUG9reSBjb25zaXN0cyBvZiBzZXZlcmFsIHVwc3RyZWFtIHByb2plY3RzIHN1Y2ggYXMgCitCaXRCYWtlLCBPcGVuRW1iZWRkZWQtQ29yZSwgWW9jdG8gZG9jdW1lbnRhdGlvbiBhbmQgdmFyaW91cyBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIAorZS5nLiBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQuIFBva3kgaXMgaW4gdHVybiBhIGNvbXBvbmVudCBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKworVGhlIFlvY3RvIFByb2plY3QgaGFzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gaW5jbHVkaW5nIGEgCityZWZlcmVuY2UgbWFudWFsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKyAgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK09wZW5FbWJlZGRlZC1Db3JlIGlzIGEgbGF5ZXIgY29udGFpbmluZyB0aGUgY29yZSBtZXRhZGF0YSBmb3IgY3VycmVudCB2ZXJzaW9ucworb2YgT3BlbkVtYmVkZGVkLiBJdCBpcyBkaXN0cm8tbGVzcyAoY2FuIGJ1aWxkIGEgZnVuY3Rpb25hbCBpbWFnZSB3aXRoCitESVNUUk8gPSAibm9kaXN0cm8iKSBhbmQgY29udGFpbnMgb25seSBlbXVsYXRlZCBtYWNoaW5lIHN1cHBvcnQuCisKK0ZvciBpbmZvcm1hdGlvbiBhYm91dCBPcGVuRW1iZWRkZWQsIHNlZSB0aGUgT3BlbkVtYmVkZGVkIHdlYnNpdGU6CisgICAgaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnLworCitXaGVyZSB0byBTZW5kIFBhdGNoZXMKKz09PT09PT09PT09PT09PT09PT09PQorCitBcyBQb2t5IGlzIGFuIGludGVncmF0aW9uIHJlcG9zaXRvcnkgKGJ1aWx0IHVzaW5nIGEgdG9vbCBjYWxsZWQgY29tYm8tbGF5ZXIpLAorcGF0Y2hlcyBhZ2FpbnN0IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgc2hvdWxkIGJlIHNlbnQgdG8gdGhlaXIgcmVzcGVjdGl2ZQordXBzdHJlYW1zOgorCitiaXRiYWtlOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZS8KKyAgICBNYWlsaW5nIGxpc3Q6IGJpdGJha2UtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitkb2N1bWVudGF0aW9uOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1kb2NzLworICAgIE1haWxpbmcgbGlzdDogeW9jdG9AeW9jdG9wcm9qZWN0Lm9yZworCittZXRhLXlvY3RvKC1ic3ApOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvKC1ic3ApCisgICAgTWFpbGluZyBsaXN0OiBwb2t5QHlvY3RvcHJvamVjdC5vcmcKKworRXZlcnl0aGluZyBlbHNlIHNob3VsZCBiZSBzZW50IHRvIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBtYWlsaW5nIGxpc3QuICBJZiBpbgorZG91YnQsIGNoZWNrIHRoZSBvZS1jb3JlIGdpdCByZXBvc2l0b3J5IGZvciB0aGUgY29udGVudCB5b3UgaW50ZW5kIHRvIG1vZGlmeS4KK0JlZm9yZSBzZW5kaW5nLCBiZSBzdXJlIHRoZSBwYXRjaGVzIGFwcGx5IGNsZWFubHkgdG8gdGhlIGN1cnJlbnQgb2UtY29yZSBnaXQKK3JlcG9zaXRvcnkuCisKKyAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlLworICAgIE1haWxpbmcgbGlzdDogb3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitOb3RlOiBUaGUgc2NyaXB0cyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRyZWF0ZWQgd2l0aCBleHRyYSBjYXJlIGFzIGl0IGlzIGEgbWl4IG9mCitvZS1jb3JlIGFuZCBwb2t5LXNwZWNpZmljIGZpbGVzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9SRUFETUUuaGFyZHdhcmUgYi95b2N0by1wb2t5L1JFQURNRS5oYXJkd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzc0YzVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9SRUFETUUuaGFyZHdhcmUKQEAgLTAsMCArMSw1MDAgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUG9reSBIYXJkd2FyZSBSRUFETUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGdpdmVzIGRldGFpbHMgYWJvdXQgdXNpbmcgUG9reSB3aXRoIHRoZSByZWZlcmVuY2UgbWFjaGluZXMKK3N1cHBvcnRlZCBvdXQgb2YgdGhlIGJveC4gQSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkIHJlZmVyZW5jZSB0YXJnZXQgbWFjaGluZXMKK2NhbiBiZSBmb3VuZCBieSBsb29raW5nIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXM6CisKKyAgIG1ldGEvY29uZi9tYWNoaW5lLworICAgbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lLworCitJZiB5b3UgYXJlIGluIGRvdWJ0IGFib3V0IHVzaW5nIFBva3kvT3BlbkVtYmVkZGVkIHdpdGggeW91ciBoYXJkd2FyZSwgY29uc3VsdAordGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgYm9hcmQvZGV2aWNlLgorCitTdXBwb3J0IGZvciBhZGRpdGlvbmFsIGRldmljZXMgaXMgbm9ybWFsbHkgYWRkZWQgYnkgY3JlYXRpbmcgQlNQIGxheWVycyAtIGZvcgorbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIHRoZSBZb2N0byBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKK0d1aWRlIC0gZG9jdW1lbnRhdGlvbiBzb3VyY2UgaXMgaW4gZG9jdW1lbnRhdGlvbi9ic3BndWlkZSBvciBkb3dubG9hZCB0aGUgUERGCitmcm9tOgorCisgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK1N1cHBvcnQgZm9yIHBoeXNpY2FsIHJlZmVyZW5jZSBoYXJkd2FyZSBoYXMgbm93IGJlZW4gc3BsaXQgb3V0IGludG8gYQorbWV0YS15b2N0by1ic3AgbGF5ZXIgd2hpY2ggY2FuIGJlIHJlbW92ZWQgc2VwYXJhdGVseSBmcm9tIG90aGVyIGxheWVycyBpZiBub3QKK25lZWRlZC4KKworCitRRU1VIEVtdWxhdGlvbiBUYXJnZXRzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHNpbXBsaWZ5IGRldmVsb3BtZW50LCB0aGUgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIGJ1aWxkaW5nIGltYWdlcyB0bword29yayB3aXRoIHRoZSBRRU1VIGVtdWxhdG9yIGluIHN5c3RlbSBlbXVsYXRpb24gbW9kZS4gU2V2ZXJhbCBhcmNoaXRlY3R1cmVzCithcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKKworICAqIEFSTSAocWVtdWFybSkKKyAgKiB4ODYgKHFlbXV4ODYpCisgICogeDg2LTY0IChxZW11eDg2LTY0KQorICAqIFBvd2VyUEMgKHFlbXVwcGMpCisgICogTUlQUyAocWVtdW1pcHMpCisKK1VzZSBvZiB0aGUgUUVNVSBpbWFnZXMgaXMgY292ZXJlZCBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUgdmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IGlzIGdpdmVuCitpbiBicmFja2V0cy4KKworCitIYXJkd2FyZSBSZWZlcmVuY2UgQm9hcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgYm9hcmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgorCisgICogVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKKyAgKiBGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgYm9hcmQncyBzZWN0aW9uIGJlbG93LiBUaGUgYXBwcm9wcmlhdGUgTUFDSElORQordmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgYm9hcmQgaXMgZ2l2ZW4gaW4gYnJhY2tldHMuCisKK1JlZmVyZW5jZSBCb2FyZCBNYWludGVuYW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NlbmQgcHVsbCByZXF1ZXN0cywgcGF0Y2hlcywgY29tbWVudHMgb3IgcXVlc3Rpb25zIGFib3V0IG1ldGEteW9jdG8tYnNwcyB0byBwb2t5QHlvY3RvcHJvamVjdC5vcmcKKworTWFpbnRhaW5lcnM6IEtldmluIEhhbyA8a2V4aW4uaGFvQHdpbmRyaXZlci5jb20+CisgICAgICAgICAgICAgQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CisKK0NvbnN1bWVyIERldmljZXMKKz09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBjb25zdW1lciBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgorCisgICogSW50ZWwgeDg2IGJhc2VkIFBDcyBhbmQgZGV2aWNlcyAoZ2VuZXJpY3g4NikKKyAgKiBVYmlxdWl0aSBOZXR3b3JrcyBFZGdlUm91dGVyIExpdGUgKGVkZ2Vyb3V0ZXIpCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgZGV2aWNlJ3Mgc2VjdGlvbiBiZWxvdy4gVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUKK3ZhcmlhYmxlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRldmljZSBpcyBnaXZlbiBpbiBicmFja2V0cy4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpYyBIYXJkd2FyZSBEb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0ludGVsIHg4NiBiYXNlZCBQQ3MgYW5kIGRldmljZXMgKGdlbmVyaWN4ODYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGdlbmVyaWN4ODYgTUFDSElORSBpcyB0ZXN0ZWQgb24gdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6CisKK0ludGVsIFhlb24vQ29yZSBpLVNlcmllczoKKyAgKyBJbnRlbCBSb21sZXkgU2VydmVyOiBTYW5keSBCcmlkZ2UgWGVvbiBwcm9jZXNzb3IsIEM2MDAgUENIIChQYXRzYnVyZyksIChDYW5vZSBQYXNzIENSQikKKyAgKyBJbnRlbCBSb21sZXkgU2VydmVyOiBJdnkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoSW50ZWwgU0RQIFMyUjMpCisgICsgSW50ZWwgQ3J5c3RhbCBGb3Jlc3QgU2VydmVyOiBTYW5keSBCcmlkZ2UgWGVvbiBwcm9jZXNzb3IsIERIODl4eCBQQ0ggKENhdmUgQ3JlZWspLCAoU3RhcmdvIENSQikKKyAgKyBJbnRlbCBDaGllZiBSaXZlciBNb2JpbGU6IEl2eSBCcmlkZ2UgTW9iaWxlIHByb2Nlc3NvciwgUU03NyBQQ0ggKFBhbnRoZXIgUG9pbnQtTSksIChFbWVyYWxkIExha2UgSUkgQ1JCLCBTYWJpbm8gQ2FueW9uIENSQikKKyAgKyBJbnRlbCBIdXJvbiBSaXZlciBNb2JpbGU6IFNhbmR5IEJyaWRnZSBwcm9jZXNzb3IsIFFNNjcgUENIIChDb3VnYXIgUG9pbnQpLCAoRW1lcmFsZCBMYWtlIENSQiwgRVZPQyBFQzctMTgxN0xOQVIgYm9hcmQpCisgICsgSW50ZWwgQ2FscGVsbGEgUGxhdGZvcm06IENvcmUgaTcgcHJvY2Vzc29yLCBRTTU3IFBDSCAoSWJleCBQZWFrLU0pLCAoUmVkIEZvcnQgQ1JCLCBFbWVyc29uIE1BVFhNIENPUkUtNDExLUIpCisgICsgSW50ZWwgTmVoYWxlbS9XZXN0bWVyZS1FUCBTZXJ2ZXI6IFhlb24gNTZ4eC81NXh4IHByb2Nlc3NvcnMsIDU1MjAgY2hpcHNldCwgSUNIMTBSIElPSCAoODI4MDEpLCAoSGFubGFuIENyZWVrIENSQikKKyAgKyBJbnRlbCBOZWhhbGVtIFdvcmtzdGF0aW9uOiBYZW9uIDU2eHgvNTV4eCBwcm9jZXNzb3JzLCBTeXN0ZW0gU0M1NjUwU0NXUyAoR3JlZW5jaXR5IENSQikKKyAgKyBJbnRlbCBQaWNrZXQgUG9zdCBTZXJ2ZXI6IFhlb24gNTZ4eC81NXh4IHByb2Nlc3NvcnMgKEphc3BlciBGb3Jlc3QpLCAzNDIwIGNoaXBzZXQgKEliZXggUGVhayksIChPc2FnZSBDUkIpCisgICsgSW50ZWwgU3RvcmFnZSBQbGF0Zm9ybTogU2FuZHkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoT2FrIENyZWVrIENhbnlvbiBDUkIpCisgICsgSW50ZWwgU2hhcmsgQmF5IENsaWVudCBQbGF0Zm9ybTogSGFzd2VsbCBwcm9jZXNzb3IsIEx5bnhQb2ludCBQQ0gsIChXYWxudXQgQ2FueW9uIENSQiwgTGF2YSBDYW55b24gQ1JCLCBCYXNraW5nIFJpZGdlIENSQiwgRmxhdGhlYWQgQ3JlZWsgQ1JCKQorICArIEludGVsIFNoYXJrIEJheSBVbHRyYWJvb2sgUGxhdGZvcm06IEhhc3dlbGwgVUxUIHByb2Nlc3NvciwgTHlueCBQb2ludC1MUCBQQ0gsIChXaGl0ZVRpcCBNb3VudGFpbiAxIENSQikKKworSW50ZWwgQXRvbSBwbGF0Zm9ybXM6CisgICsgSW50ZWwgZW1iZWRkZWQgTWVubG93OiBJbnRlbCBBdG9tIFo1MTAvNTMwIENQVSwgU3lzdGVtIENvbnRyb2xsZXIgSHViIFVTMTVXIChQb3J0d2VsbCBOQU5PLTgwNDQpCisgICsgSW50ZWwgTHVuYSBQaWVyOiBJbnRlbCBBdG9tIE40eHgvRDV4eCBzZXJpZXMgQ1BVIChha2E6IFBpbmV2aWV3LUQgJiAtTSksIDgyODAxSE0gSS9PIEh1YiAoSUNIOE0pLCAoQWR2YW50ZWNoIEFJTUItMjEyLCBNb29uIENyZWVrIENSQikKKyAgKyBJbnRlbCBRdWVlbnMgQmF5IHBsYXRmb3JtOiBJbnRlbCBBdG9tIEU2eHggQ1BVIChha2E6IFR1bm5lbCBDcmVlayksIFRvcGNsaWZmIEVHMjBUIEkvTyBIdWIgKEVtZXJzb24gTklUWC0zMTUsIENyb3duIEJheSBDUkIsIE1pbm5vdyBCb2FyZCkKKyAgKyBJbnRlbCBGaXNoIFJpdmVyIElzbGFuZCBwbGF0Zm9ybTogSW50ZWwgQXRvbSBFNnh4IENQVSAoYWthOiBUdW5uZWwgQ3JlZWspLCBUb3BjbGlmZiBFRzIwVCBJL08gSHViIChLb250cm9uIEtNMk04MDYpCisgICsgSW50ZWwgQ2VkYXIgVHJhaWwgcGxhdGZvcm06IEludGVsIEF0b20gTjIwMDAgJiBEMjAwMCBzZXJpZXMgQ1BVIChha2E6IENlZGFydmlldyksIE5NMTAgRXhwcmVzcyBDaGlwc2V0IChOb3JjbyBraXQgQklTLTY2MzAsIENlZGFyIFJvY2sgQ1JCKQorCithbmQgaXMgbGlrZWx5IHRvIHdvcmsgb24gbWFueSB1bmxpc3RlZCBBdG9tL0NvcmUvWGVvbiBiYXNlZCBkZXZpY2VzLiBUaGUgTUFDSElORQordHlwZSBzdXBwb3J0cyBldGhlcm5ldCwgd2lmaSwgc291bmQsIGFuZCBJbnRlbC92ZXNhIGdyYXBoaWNzIGJ5IGRlZmF1bHQgaW4KK2FkZGl0aW9uIHRvIGNvbW1vbiBQQyBpbnB1dCBkZXZpY2VzLCBidXNzZXMsIGFuZCBzbyBvbi4KKworRGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UsIGl0IGNhbiBib290IGZyb20gYSB0cmFkaXRpb25hbCBoYXJkLWRpc2ssIGEgVVNCIGRldmljZSwKK29yIG92ZXIgdGhlIG5ldHdvcmsuIFdyaXRpbmcgZ2VuZXJhdGVkIGltYWdlcyB0byBwaHlzaWNhbCBtZWRpYSBpcworc3RyYWlnaHRmb3J3YXJkIHdpdGggYSBjYXZlYXQgZm9yIFVTQiBkZXZpY2VzLiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGFzc3VtZSB0aGUKK3RhcmdldCBib290IGRldmljZSBpcyAvZGV2L3NkYiwgYmUgc3VyZSB0byB2ZXJpZnkgdGhpcyBhbmQgdXNlIHRoZSBjb3JyZWN0CitkZXZpY2UgYXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgcnVuIGFzIHJvb3QgYW5kIGFyZSBub3QgcmV2ZXJzYWJsZS4KKworVVNCIERldmljZToKKyAgMS4gQnVpbGQgYSBsaXZlIGltYWdlLiBUaGlzIGltYWdlIHR5cGUgY29uc2lzdHMgb2YgYSBzaW1wbGUgZmlsZXN5c3RlbQorICAgICB3aXRob3V0IGEgcGFydGl0aW9uIHRhYmxlLCB3aGljaCBpcyBzdWl0YWJsZSBmb3IgVVNCIGtleXMsIGFuZCB3aXRoIHRoZQorICAgICBkZWZhdWx0IHNldHVwIGZvciB0aGUgZ2VuZXJpY3g4NiBtYWNoaW5lLCB0aGlzIGltYWdlIHR5cGUgaXMgYnVpbHQKKyAgICAgYXV0b21hdGljYWxseSBmb3IgYW55IGltYWdlIHlvdSBidWlsZC4gRm9yIGV4YW1wbGU6CisKKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorCisgIDIuIFVzZSB0aGUgImRkIiB1dGlsaXR5IHRvIHdyaXRlIHRoZSBpbWFnZSB0byB0aGUgcmF3IGJsb2NrIGRldmljZS4gRm9yCisgICAgIGV4YW1wbGU6CisKKyAgICAgIyBkZCBpZj1jb3JlLWltYWdlLW1pbmltYWwtZ2VuZXJpY3g4Ni5oZGRpbWcgb2Y9L2Rldi9zZGIKKworICBJZiB0aGUgZGV2aWNlIGZhaWxzIHRvIGJvb3Qgd2l0aCAiQm9vdCBlcnJvciIgZGlzcGxheWVkLCBvciBhcHBhcmVudGx5CisgIHN0b3BzIGp1c3QgYWZ0ZXIgdGhlIFNZU0xJTlVYIHZlcnNpb24gYmFubmVyLCBpdCBpcyBsaWtlbHkgdGhlIEJJT1MgY2Fubm90CisgIHVuZGVyc3RhbmQgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZGlzayAob3IgcmF0aGVyIGl0IGV4cGVjdHMgYQorICBwYXJ0aWN1bGFyIGxheW91dCBhbmQgY2Fubm90IGhhbmRsZSBhbnl0aGluZyBlbHNlKS4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZQorICBzb2x1dGlvbnMgdG8gdGhpcyBwcm9ibGVtOgorCisgIDEuIENoYW5nZSB0aGUgQklPUyBVU0IgRGV2aWNlIHNldHRpbmcgdG8gSEREIG1vZGUuIFRoZSBsYWJlbCB3aWxsIHZhcnkgYnkKKyAgICAgZGV2aWNlLCBidXQgdGhlIGlkZWEgaXMgdG8gZm9yY2UgQklPUyB0byByZWFkIHRoZSBDeWxpbmRlci9IZWFkL1NlY3RvcgorICAgICBnZW9tZXRyeSBmcm9tIHRoZSBkZXZpY2UuCisKKyAgMi4gV2l0aG91dCBzdWNoIGFuIG9wdGlvbiwgdGhlIEJJT1MgZ2VuZXJhbGx5IGJvb3RzIHRoZSBkZXZpY2UgaW4gVVNCLVpJUAorICAgICBtb2RlLiBUbyB3cml0ZSBhbiBpbWFnZSB0byBhIFVTQiBkZXZpY2UgdGhhdCB3aWxsIGJlIGJvb3RhYmxlIGluCisgICAgIFVTQi1aSVAgbW9kZSwgY2Fycnkgb3V0IHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKKworICAgICBhLiBEZXRlcm1pbmUgdGhlIGdlb21ldHJ5IG9mIHlvdXIgVVNCIGRldmljZSB1c2luZyBmZGlzazoKKworICAgICAjIGZkaXNrIC9kZXYvc2RiCisgICAgIENvbW1hbmQgKG0gZm9yIGhlbHApOiBwCisKKyAgICAgRGlzayAvZGV2L3NkYjogNDAxMSBNQiwgNDAxMTQ5MTMyOCBieXRlcworICAgICAxMjQgaGVhZHMsIDYyIHNlY3RvcnMvdHJhY2ssIDEwMTkgY3lsaW5kZXJzLCB0b3RhbCA3ODM0OTQ0IHNlY3RvcnMKKyAgICAgLi4uCisKKyAgICAgQ29tbWFuZCAobSBmb3IgaGVscCk6IHEKKworICAgICBiLiBDb25maWd1cmUgdGhlIFVTQiBkZXZpY2UgZm9yIFVTQi1aSVAgbW9kZToKKyAgICAgCisgICAgICMgbWtkaXNraW1hZ2UgLTQgL2Rldi9zZGIgMTAxOSAxMjQgNjIKKworICAgICBXaGVyZSAxMDE5LCAxMjQgYW5kIDYyIGFyZSB0aGUgY3lsaW5kZXIsIGhlYWQgYW5kIHNlY3RvcnMvdHJhY2sgY291bnRzCisgICAgIGFzIHJlcG9ydGVkIGJ5IGZkaXNrIChzdWJzdGl0dXRlIHRoZSB2YWx1ZXMgcmVwb3J0ZWQgZm9yIHlvdXIgZGV2aWNlKS4KKyAgICAgV2hlbiB0aGUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCBhbmQgdGhlIGFjY2VzcyBMRUQgKGlmIGFueSkgb24gdGhlCisgICAgIGRldmljZSBzdG9wcyBmbGFzaGluZywgcmVtb3ZlIGFuZCByZWluc2VydCB0aGUgZGV2aWNlIHRvIGFsbG93IHRoZQorICAgICBrZXJuZWwgdG8gZGV0ZWN0IHRoZSBuZXcgcGFydGl0aW9uIGxheW91dC4KKworICAgICBjLiBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UgdG8gdGhlIFVTQi1aSVAgbW9kZSBkZXZpY2U6CisKKyAgICAgIyBta2RpciAvdG1wL2ltYWdlCisgICAgICMgbWtkaXIgL3RtcC91c2JrZXkKKyAgICAgIyBtb3VudCAtbyBsb29wIGNvcmUtaW1hZ2UtbWluaW1hbC1nZW5lcmljeDg2LmhkZGltZyAgL3RtcC9pbWFnZQorICAgICAjIG1vdW50IC9kZXYvc2RiNCAvdG1wL3VzYmtleQorICAgICAjIGNwIC1yZiAvdG1wL2ltYWdlLyogL3RtcC91c2JrZXkKKworICAgICBkLiBJbnN0YWxsIHRoZSBzeXNsaW51eCBib290IGxvYWRlcjoKKworICAgICAjIHN5c2xpbnV4IC9kZXYvc2RiNAorCisgICAgIGUuIFVubW91bnQgZXZlcnl0aGluZzoKKworICAgICAjIHVtb3VudCAvdG1wL2ltYWdlCisgICAgICMgdW1vdW50IC90bXAvdXNia2V5CisKKyAgSW5zdGFsbCB0aGUgYm9vdCBkZXZpY2UgaW4gdGhlIHRhcmdldCBib2FyZCBhbmQgY29uZmlndXJlIHRoZSBCSU9TIHRvIGJvb3QKKyAgZnJvbSBpdC4KKworICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBVU0ItWklQIHNjZW5hcmlvLCBzZWUgdGhlIHN5c2xpbnV4IGRvY3VtZW50YXRpb246CisgIGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1ib290L3N5c2xpbnV4L3N5c2xpbnV4LmdpdDthPWJsb2JfcGxhaW47Zj1kb2MvdXNia2V5LnR4dDtoYj1IRUFECisKKworVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBCZWFnbGVib25lIGlzIGFuIEFSTSBDb3J0ZXgtQTggZGV2ZWxvcG1lbnQgYm9hcmQgd2l0aCBVU0IsIEV0aGVybmV0LCAyRC8zRAorYWNjZWxlcmF0ZWQgZ3JhcGhpY3MsIGF1ZGlvLCBzZXJpYWwsIEpUQUcsIGFuZCBTRC9NTUMuIFRoZSBCbGFjayBhZGRzIGEgZmFzdGVyCitDUFUsIG1vcmUgUkFNLCBlTU1DIGZsYXNoIGFuZCBhIG1pY3JvIEhETUkgcG9ydC4gVGhlIGJlYWdsZWJvbmUgTUFDSElORSBpcwordGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorCisgIG8gQmVhZ2xlYm9uZSBCbGFjayBBNgorICBvIEJlYWdsZWJvbmUgQTYgKHRoZSBvcmlnaW5hbCAiV2hpdGUiIG1vZGVsKQorCitUaGUgQmVhZ2xlYm9uZSBCbGFjayBoYXMgZU1NQywgd2hpbGUgdGhlIFdoaXRlIGRvZXMgbm90LiBQcmVzc2luZyB0aGUgVVNFUi9CT09UCitidXR0b24gd2hlbiBwb3dlcmluZyBvbiB3aWxsIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgYm9vdCBvcmRlci4gQnV0IGZvciB0aGUgc2FrZQorb2Ygc2ltcGxpY2l0eSwgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB5b3UgaGF2ZSBlcmFzZWQgdGhlIGVNTUMgb24gdGhlIEJsYWNrLAorc28gaXRzIGJvb3QgYmVoYXZpb3IgbWF0Y2hlcyB0aGF0IG9mIHRoZSBXaGl0ZSBhbmQgYm9vdHMgb2ZmIG9mIFNEIGNhcmQuIFRvIGRvCit0aGlzLCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhlIHUtYm9vdCBwcm9tcHQ6CisKKyAgICAjIG1tYyBkZXYgMQorICAgICMgbW1jIGVyYXNlIDAgNTEyCisKK1RvIGZ1cnRoZXIgdGFpbG9yIHRoZXNlIGluc3RydWN0aW9ucyBmb3IgeW91ciBib2FyZCwgcGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ib25lIGFuZCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ibGFjaworCitGcm9tIGEgTGludXggc3lzdGVtIHdpdGggYWNjZXNzIHRvIHRoZSBpbWFnZSBmaWxlcyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHMKK2FzIHJvb3QsIHJlcGxhY2luZyBtbWNibGswKiB3aXRoIHRoZSBTRCBjYXJkIGRldmljZSBvbiB5b3VyIG1hY2hpbmUgKHN1Y2ggYXMgc2RjCitpZiB1c2VkIHZpYSBhIHVzYiBjYXJkIHJlYWRlcik6CisKKyAgMS4gUGFydGl0aW9uIGFuZCBmb3JtYXQgYW4gU0QgY2FyZDoKKyAgICAgIyBmZGlzayAtbHUgL2Rldi9tbWNibGswCisKKyAgICAgRGlzayAvZGV2L21tY2JsazA6IDM5NTEgTUIsIDM5NTEwMzQzNjggYnl0ZXMKKyAgICAgMjU1IGhlYWRzLCA2MyBzZWN0b3JzL3RyYWNrLCA0ODAgY3lsaW5kZXJzLCB0b3RhbCA3NzE2ODY0IHNlY3RvcnMKKyAgICAgVW5pdHMgPSBzZWN0b3JzIG9mIDEgKiA1MTIgPSA1MTIgYnl0ZXMKKworICAgICAgICAgICAgIERldmljZSBCb290ICAgICAgU3RhcnQgICAgICAgICBFbmQgICAgICBCbG9ja3MgIElkIFN5c3RlbQorICAgICAvZGV2L21tY2JsazBwMSAgICogICAgICAgICAgNjMgICAgICAxNDQ1ODQgICAgICAgNzIyNjEgICBjIFdpbjk1IEZBVDMyIChMQkEpCisgICAgIC9kZXYvbW1jYmxrMHAyICAgICAgICAgIDE0NDU4NSAgICAgIDQ2NTg4NCAgICAgIDE2MDY1MCAgODMgTGludXgKKworICAgICAjIG1rZnMudmZhdCAtRiAxNiAtbiAiYm9vdCIgL2Rldi9tbWNibGswcDEKKyAgICAgIyBta2UyZnMgLWogLUwgInJvb3QiIC9kZXYvbW1jYmxrMHAyCisKKyAgVGhlIGZvbGxvd2luZyBhc3N1bWVzIHRoZSBTRCBjYXJkIHBhcnRpdGlvbnMgMSBhbmQgMiBhcmUgbW91bnRlZCBhdAorICAvbWVkaWEvYm9vdCBhbmQgL21lZGlhL3Jvb3QgcmVzcGVjdGl2ZWx5LiBSZW1vdmluZyB0aGUgY2FyZCBhbmQgcmVpbnNlcnRpbmcKKyAgaXQgd2lsbCBkbyBqdXN0IHRoYXQgb24gbW9zdCBtb2Rlcm4gTGludXggZGVza3RvcCBlbnZpcm9ubWVudHMuCisKKyAgVGhlIGZpbGVzIHJlZmVyZW5jZWQgYmVsb3cgYXJlIG1hZGUgYXZhaWxhYmxlIGFmdGVyIHRoZSBidWlsZCBpbgorICBidWlsZC90bXAvZGVwbG95L2ltYWdlcy4KKworICAyLiBJbnN0YWxsIHRoZSBib290IGxvYWRlcnMKKyAgICAgIyBjcCBNTE8tYmVhZ2xlYm9uZSAvbWVkaWEvYm9vdC9NTE8KKyAgICAgIyBjcCB1LWJvb3QtYmVhZ2xlYm9uZS5pbWcgL21lZGlhL2Jvb3QvdS1ib290LmltZworCisgIDMuIEluc3RhbGwgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAjIHRhciB4IC1DIC9tZWRpYS9yb290IC1mIGNvcmUtaW1hZ2UtJElNQUdFX1RZUEUtYmVhZ2xlYm9uZS50YXIuYnoyCisKKyAgNC4gSWYgdXNpbmcgY29yZS1pbWFnZS1iYXNlIG9yIGNvcmUtaW1hZ2Utc2F0byBpbWFnZXMsIHRoZSBTRCBjYXJkIGlzIHJlYWR5CisgICAgIGFuZCByb290ZnMgYWxyZWFkeSBjb250YWlucyB0aGUga2VybmVsLCBtb2R1bGVzIGFuZCBkZXZpY2UgdHJlZSAoRFRCKQorICAgICBmaWxlcyBuZWNlc3NhcnkgdG8gYmUgYm9vdGVkIHdpdGggVS1ib290J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBzbworICAgICBza2lwIGRpcmVjdGx5IHRvIHN0ZXAgOC4KKyAgICAgRm9yIGNvcmUtaW1hZ2UtbWluaW1hbCwgcHJvY2VlZCB0aHJvdWdoIG5leHQgc3RlcHMuCisKKyAgNS4gSWYgdXNpbmcgY29yZS1pbWFnZS1taW5pbWFsIHJvb3RmcywgaW5zdGFsbCB0aGUgbW9kdWxlcworICAgICAjIHRhciB4IC1DIC9tZWRpYS9yb290IC1mIG1vZHVsZXMtYmVhZ2xlYm9uZS50Z3oKKworICA2LiBJZiB1c2luZyBjb3JlLWltYWdlLW1pbmltYWwgcm9vdGZzLCBpbnN0YWxsIHRoZSBrZXJuZWwgekltYWdlIGludG8gL2Jvb3QKKyAgICAgZGlyZWN0b3J5IG9mIHJvb3RmcworICAgICAjIGNwIHpJbWFnZS1iZWFnbGVib25lLmJpbiAvbWVkaWEvcm9vdC9ib290L3pJbWFnZQorCisgIDcuIElmIHVzaW5nIGNvcmUtaW1hZ2UtbWluaW1hbCByb290ZnMsIGFsc28gaW5zdGFsbCBkZXZpY2UgdHJlZSAoRFRCKSBmaWxlcworICAgICBpbnRvIC9ib290IGRpcmVjdG9yeSBvZiByb290ZnMKKyAgICAgIyBjcCB6SW1hZ2UtYW0zMzV4LWJvbmUuZHRiIC9tZWRpYS9yb290L2Jvb3QvYW0zMzV4LWJvbmUuZHRiCisgICAgICMgY3AgekltYWdlLWFtMzM1eC1ib25lYmxhY2suZHRiIC9tZWRpYS9yb290L2Jvb3QvYW0zMzV4LWJvbmVibGFjay5kdGIKKworICA4LiBVbm1vdW50IHRoZSBTRCBwYXJ0aXRpb25zLCBpbnNlcnQgdGhlIFNEIGNhcmQgaW50byB0aGUgQmVhZ2xlYm9uZSwgYW5kCisgICAgIGJvb3QgdGhlIEJlYWdsZWJvbmUKKworCitGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBNUEM4MzE1IFBvd2VyUEMgcmVmZXJlbmNlIHBsYXRmb3JtIChNUEM4MzE1RS1SREIpIGlzIGFpbWVkIGF0IGhhcmR3YXJlIGFuZAorc29mdHdhcmUgZGV2ZWxvcG1lbnQgb2YgbmV0d29yayBhdHRhY2hlZCBzdG9yYWdlIChOQVMpIGFuZCBkaWdpdGFsIG1lZGlhIHNlcnZlcgorYXBwbGljYXRpb25zLiBUaGUgTVBDODMxNUUtUkRCIGZlYXR1cmVzIHRoZSBQb3dlclFVSUNDIElJIFBybyBwcm9jZXNzb3IsIHdoaWNoCitpbmNsdWRlcyBhIGJ1aWx0LWluIHNlY3VyaXR5IGFjY2VsZXJhdG9yLgorCisoTm90ZTogeW91IG1heSBmaW5kIGl0IGVhc2llciB0byBvcmRlciBNUEM4MzE1RS1SREJBOyB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlCitzYW1lIGJvYXJkIGluIGFuIGVuY2xvc3VyZSB3aXRoIGFjY2Vzc29yaWVzLiBJbiBhbnkgY2FzZSBpdCBpcyBmdWxseQorY29tcGF0aWJsZSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gaGVyZS4pCisKK1NldHVwIGluc3RydWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZzoKKyogTkZTIHJvb3Qgc2V0dXAgb24geW91ciB3b3Jrc3RhdGlvbgorKiBURlRQIHNlcnZlciBpbnN0YWxsZWQgb24geW91ciB3b3Jrc3RhdGlvbgorKiBTdHJhaWdodC10aHJ1IDktY29uZHVjdG9yIHNlcmlhbCBjYWJsZSAoREI5LCBNL0YpIGNvbm5lY3RlZCBmcm9tIHlvdXIgCisgIFBDIHRvIFVBUlQxCisqIEV0aGVybmV0IGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgZXRoZXJuZXQgcG9ydCBvbiB0aGUgYm9hcmQKKworLS0tIFByZXBhcmF0aW9uIC0tLQorCitOb3RlOiBpZiB5b3UgaGF2ZSBhbHRlcmVkIHlvdXIgYm9hcmQncyBldGhlcm5ldCBNQUMgYWRkcmVzcyhlcykgZnJvbSB0aGUKK2RlZmF1bHRzLCBvciB5b3UgbmVlZCB0byBkbyBzbyBiZWNhdXNlIHlvdSB3YW50IG11bHRpcGxlIGJvYXJkcyBvbiB0aGUgc2FtZQorbmV0d29yaywgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoZSBkdHMgZmlsZSAocGF0Y2gKK2xpbnV4L2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlKS4gSWYKK3lvdSBoYXZlIGxlZnQgdGhlbSBhdCB0aGUgZmFjdG9yeSBkZWZhdWx0IHRoZW4geW91IHNob3VsZG4ndCBuZWVkIHRvIGRvCithbnl0aGluZyBoZXJlLgorCistLS0gQm9vdGluZyBmcm9tIE5GUyByb290IC0tLQorCitMb2FkIHRoZSBrZXJuZWwgYW5kIGR0YiAoZGV2aWNlIHRyZWUgYmxvYiksIGFuZCBib290IHRoZSBzeXN0ZW0gYXMgZm9sbG93czoKKworIDEuIEdldCB0aGUga2VybmVsICh1SW1hZ2UtbXBjODMxNWUtcmRiLmJpbikgYW5kIGR0YiAodUltYWdlLW1wYzgzMTVlLXJkYi5kdGIpCisgICAgZmlsZXMgZnJvbSB0aGUgdG1wL2RlcGxveSBkaXJlY3RvcnksIGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIG9uIHlvdXIgVEZUUAorICAgIHNlcnZlci4KKworIDIuIENvbm5lY3QgdGhlIGJvYXJkJ3MgZmlyc3Qgc2VyaWFsIHBvcnQgdG8geW91ciB3b3Jrc3RhdGlvbiBhbmQgdGhlbiBzdGFydCB1cAorICAgIHlvdXIgZmF2b3VyaXRlIHNlcmlhbCB0ZXJtaW5hbCBzbyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aAorICAgIHRoZSBzZXJpYWwgY29uc29sZS4gSWYgeW91IGRvbid0IGhhdmUgYSBmYXZvdXJpdGUsIHBpY29jb20gaXMgc3VnZ2VzdGVkOgorCisgICQgcGljb2NvbSAvZGV2L3R0eVVTQjAgLWIgMTE1MjAwCisKKyAzLiBQb3dlciB1cCBvciByZXNldCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkCisgICAgdG8gZ2V0IHRvIHRoZSBVLUJvb3QgY29tbWFuZCBsaW5lCisKKyA0LiBTZXQgdXAgdGhlIGVudmlyb25tZW50IGluIFUtQm9vdDoKKworID0+IHNldGVudiBpcGFkZHIgPGJvYXJkIGlwPgorID0+IHNldGVudiBzZXJ2ZXJpcCA8dGZ0cCBzZXJ2ZXIgaXA+CisgPT4gc2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD08bmZzcm9vdCBpcD46PHJvb3RmcyBwYXRoPiBpcD08Ym9hcmQgaXA+OjxzZXJ2ZXIgaXA+OjxnYXRld2F5IGlwPjoyNTUuMjU1LjI1NS4wOm1wYzgzMTVlOmV0aDA6b2ZmIGNvbnNvbGU9dHR5UzAsMTE1MjAwCisKKyA1LiBEb3dubG9hZCB0aGUga2VybmVsIGFuZCBkdGIsIGFuZCBib290OgorCisgPT4gdGZ0cCAxMDAwMDAwIHVJbWFnZS1tcGM4MzE1ZS1yZGIuYmluCisgPT4gdGZ0cCAyMDAwMDAwIHVJbWFnZS1tcGM4MzE1ZS1yZGIuZHRiCisgPT4gYm9vdG0gMTAwMDAwMCAtIDIwMDAwMDAKKworLS0tIEJvb3RpbmcgZnJvbSBKRkZTMiByb290IC0tLQorCisgMS4gRmlyc3QgYm9vdCB0aGUgYm9hcmQgd2l0aCBORlMgcm9vdC4KKworIDIuIEVyYXNlIHRoZSBNVEQgcGFydGl0aW9uIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyByb290OgorCisgICAgJCBmbGFzaF9lcmFzZWFsbCAgL2Rldi9tdGQzCisKKyAzLiBDb3B5IHRoZSBKRkZTMiBpbWFnZSB0byB0aGUgTVREIHBhcnRpdGlvbjoKKworICAgICQgZmxhc2hjcCBjb3JlLWltYWdlLW1pbmltYWwtbXBjODMxNWUtcmRiLmpmZnMyIC9kZXYvbXRkMworCisgNC4gVGhlbiByZWJvb3QgdGhlIGJvYXJkIGFuZCBzZXQgdXAgdGhlIGVudmlyb25tZW50IGluIFUtQm9vdDoKKworICAgID0+IHNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2szIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMCwxMTUyMDAKKworCitVYmlxdWl0aSBOZXR3b3JrcyBFZGdlUm91dGVyIExpdGUgKGVkZ2Vyb3V0ZXIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBFZGdlUm91dGVyIExpdGUgaXMgcGFydCBvZiB0aGUgRWRnZU1heCBzZXJpZXMuIEl0IGlzIGEgTUlQUzY0IHJvdXRlcgorKGJhc2VkIG9uIHRoZSBDYXZpdW0gT2N0ZW9uIHByb2Nlc3Nvcikgd2l0aCA1MTJNQiBvZiBSQU0sIHdoaWNoIHVzZXMgYW4KK2ludGVybmFsIFVTQiBwZW5kcml2ZSBmb3Igc3RvcmFnZS4KKworU2V0dXAgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nOgorKiBSSjQ1IC0+IHNlcmlhbCAoInJvbGxvdmVyIikgY2FibGUgY29ubmVjdGVkIGZyb20geW91ciBQQyB0byB0aGUgQ09OU09MRQorICBwb3J0IG9uIHRoZSBkZXZpY2UKKyogRXRoZXJuZXQgY29ubmVjdGVkIHRvIHRoZSBmaXJzdCBldGhlcm5ldCBwb3J0IG9uIHRoZSBib2FyZAorCitJZiB1c2luZyBORlMgYXMgcGFydCBvZiB0aGUgc2V0dXAgcHJvY2VzcywgeW91IHdpbGwgYWxzbyBuZWVkOgorKiBORlMgcm9vdCBzZXR1cCBvbiB5b3VyIHdvcmtzdGF0aW9uCisqIFRGVFAgc2VydmVyIGluc3RhbGxlZCBvbiB5b3VyIHdvcmtzdGF0aW9uIChpZiBmZXRjaGluZyB0aGUga2VybmVsIGZyb20KKyAgVEZUUCwgc2VlIGJlbG93KS4KKworLS0tIFByZXBhcmF0aW9uIC0tLQorCitCdWlsZCBhbiBpbWFnZSAoZS5nLiBjb3JlLWltYWdlLW1pbmltYWwpIHVzaW5nICJlZGdlcm91dGVyIiBhcyB0aGUgTUFDSElORS4KK0luIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaXQgaXMgYmFzZWQgb24gY29yZS1pbWFnZS1taW5pbWFsLiBBbm90aGVyIHRhcmdldAorbWF5IGJlIHNpbWlsaWFyIHdpdGggaXQuCisKKy0tLSBCb290aW5nIGZyb20gTkZTIHJvb3QgLyBrZXJuZWwgdmlhIFRGVFAgLS0tCisKK0xvYWQgdGhlIGtlcm5lbCwgYW5kIGJvb3QgdGhlIHN5c3RlbSBhcyBmb2xsb3dzOgorCisgMS4gR2V0IHRoZSBrZXJuZWwgKHZtbGludXgpIGZpbGUgZnJvbSB0aGUgdG1wL2RlcGxveS9pbWFnZXMvZWRnZXJvdXRlcgorICAgIGRpcmVjdG9yeSwgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgb24geW91ciBURlRQIHNlcnZlci4KKworIDIuIENvbm5lY3QgdGhlIGJvYXJkJ3MgZmlyc3Qgc2VyaWFsIHBvcnQgdG8geW91ciB3b3Jrc3RhdGlvbiBhbmQgdGhlbiBzdGFydCB1cAorICAgIHlvdXIgZmF2b3VyaXRlIHNlcmlhbCB0ZXJtaW5hbCBzbyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aAorICAgIHRoZSBzZXJpYWwgY29uc29sZS4gSWYgeW91IGRvbid0IGhhdmUgYSBmYXZvdXJpdGUsIHBpY29jb20gaXMgc3VnZ2VzdGVkOgorCisgICQgcGljb2NvbSAvZGV2L3R0eVMwIC1iIDExNTIwMAorCisgMy4gUG93ZXIgdXAgb3IgcmVzZXQgdGhlIGJvYXJkIGFuZCBwcmVzcyBhIGtleSBvbiB0aGUgdGVybWluYWwgd2hlbiBwcm9tcHRlZAorICAgIHRvIGdldCB0byB0aGUgVS1Cb290IGNvbW1hbmQgbGluZQorCisgNC4gU2V0IHVwIHRoZSBlbnZpcm9ubWVudCBpbiBVLUJvb3Q6CisKKyA9PiBzZXRlbnYgaXBhZGRyIDxib2FyZCBpcD4KKyA9PiBzZXRlbnYgc2VydmVyaXAgPHRmdHAgc2VydmVyIGlwPgorCisgNS4gRG93bmxvYWQgdGhlIGtlcm5lbCBhbmQgYm9vdDoKKworID0+IHRmdHAgdGZ0cCAkbG9hZGFkZHIgdm1saW51eAorID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD08bmZzcm9vdCBpcD46PHJvb3RmcyBwYXRoPiBpcD08Ym9hcmQgaXA+OjxzZXJ2ZXIgaXA+OjxnYXRld2F5IGlwPjo8bmV0bWFzaz46ZWRnZXJvdXRlcjpldGgwOm9mZiBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKQorCistLS0gQm9vdGluZyBmcm9tIFVTQiByb290IC0tLQorCitUbyBib290IGZyb20gdGhlIFVTQiBkaXNrLCB5b3UgZWl0aGVyIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGVkZ2Vyb3V0ZXIKK2JveCBhbmQgcG9wdWxhdGUgaXQgZnJvbSBhbm90aGVyIGNvbXB1dGVyLCBvciB1c2UgYSBwcmV2aW91c2x5IGJvb3RlZCBORlMKK2ltYWdlIGFuZCBwb3B1bGF0ZSBmcm9tIHRoZSBlZGdlcm91dGVyIGl0c2VsZi4KKworVHlwZSAxOiBNb3VudGVkIFVTQiBkaXNrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYm9vdCBmcm9tIHRoZSBVU0IgZGlzayB0aGVyZSBhcmUgdHdvIGF2YWlsYWJsZSBwYXJ0aXRpb25zIG9uIHRoZSBmYWN0b3J5CitVU0Igc3RvcmFnZS4gVGhlIHJlc3Qgb2YgdGhpcyBndWlkZSBhc3N1bWVzIHRoYXQgdGhlc2UgcGFydGl0aW9ucyBhcmUgbGVmdAoraW50YWN0LiBJZiB5b3UgY2hhbmdlIHRoZSBwYXJ0aXRpb24gc2NoZW1lLCB5b3UgbXVzdCB1cGRhdGUgeW91ciBib290IG1ldGhvZAorYXBwcm9wcmlhdGVseS4KKworVGhlIHN0YW5kYXJkIHBhcnRpdGlvbnMgYXJlOgorCisgIC0gMTogdmZhdCBwYXJ0aXRpb24gY29udGFpbmluZyBmYWN0b3J5IGtlcm5lbHMKKyAgLSAyOiBleHQzIHBhcnRpdGlvbiBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKworWW91IGNhbiBwbGFjZSB0aGUga2VybmVsIG9uIGVpdGhlciBwYXJ0aXRpb24gMSwgb3IgcGFydGl0aW9uIDIsIGJ1dCB0aGUgcm9vZnMKK211c3QgZ28gb24gcGFydGl0aW9uIDIgKGR1ZSB0byBpdHMgc2l6ZSkuCisKK05vdGU6IElmIHlvdSBwbGFjZSB0aGUga2VybmVsIG9uIHRoZSBleHQzIHBhcnRpdGlvbiwgeW91IG11c3QgcmUtY3JlYXRlIHRoZQorICAgICAgZXh0MyBmaWxlc3lzdGVtLCBzaW5jZSB0aGUgZmFjdG9yeSB1LWJvb3QgY2FuIG9ubHkgaGFuZGxlIDEyOCBieXRlIGlub2RlcyBhbmQKKyAgICAgIGNhbm5vdCByZWFkIHRoZSBwYXJ0aXRpb24gb3RoZXJ3aXNlLgorCitTdGVwczoKKworIDEuIFJlbW92ZSB0aGUgVVNCIGRpc2sgZnJvbSB0aGUgZWRnZXJvdXRlciBhbmQgaW5zZXJ0IGl0IGludG8gYSBjb21wdXRlcgorICAgIHRoYXQgaGFzIGFjY2VzcyB0byB5b3VyIGJ1aWxkIGFydGlmYWN0cy4KKworIDIuIENvcHkgdGhlIGtlcm5lbCBpbWFnZSB0byB0aGUgVVNCIHN0b3JhZ2UgKGFzc3VtaW5nIGRpc2NvdmVyZWQgYXMgJ3NkYicgb24KKyAgICB0aGUgZGV2ZWxvcG1lbnQgbWFjaGluZSk6CisKKyAgICAyYSkgaWYgYm9vdGluZyBmcm9tIHZmYXQKKyAKKyAgICAgICAgIyBtb3VudCAvZGV2L3NkYjEgL21udAorICAgICAgICAjIGNwIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIvdm1saW51eCAvbW50CisgICAgICAgICMgdW1vdW50IC9tbnQKKworICAgIDJiKSBpZiBib290aW5nIGZyb20gZXh0MworCisgICAgICAgICMgbWtmcy5leHQzIC1JIDEyOCAvZGV2L3NkYjIKKyAgICAgICAgIyBtb3VudCAvZGV2L3NkYjIgL21udAorICAgICAgICAjIG1rZGlyIC9tbnQvYm9vdAorICAgICAgICAjIGNwIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIvdm1saW51eCAvbW50L2Jvb3QKKyAgICAgICAgIyB1bW91bnQgL21udAorCisgMy4gRXh0cmFjdCB0aGUgcm9vdGZzIHRvIHRoZSBVU0Igc3RvcmFnZSBleHQzIHBhcnRpdGlvbgorCisgICAgICAgICMgbW91bnQgL2Rldi9zZGIyIC9tbnQKKyAgICAgICAgIyB0YXIgLXh2anBmIGNvcmUtaW1hZ2UtbWluaW1hbC1YWFgudGFyLmJ6MiAtQyAvbW50CisgICAgICAgICMgdW1vdW50IC9tbnQKKworIDQuIFJlYm9vdCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkIHRvIGdldCB0byB0aGUgVS1Cb290CisgICAgY29tbWFuZCBsaW5lOgorCisgNS4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgorCisgICAgNWEpIHZmYXQgYm9vdAorCisgICAgICAgICA9PiBmYXRsb2FkIHVzYiAwOjEgJGxvYWRhZGRyIHZtbGludXgKKworICAgIDViKSBleHQzIGJvb3QKKworICAgICAgICAgPT4gZXh0MmxvYWQgdXNiIDA6MiAkbG9hZGFkZHIgYm9vdC92bWxpbnV4CisgCisgICAgPT4gYm9vdG9jdGxpbnV4ICRsb2FkYWRkciBjb3JlbWFzaz0weDMgcm9vdD0vZGV2L3NkYTIgcncgcm9vdHdhaXQgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkKKyAKKworVHlwZSAyOiBORlMKKy0tLS0tLS0tLS0tCisKK05vdGU6IElmIHlvdSBwbGFjZSB0aGUga2VybmVsIG9uIHRoZSBleHQzIHBhcnRpdGlvbiwgeW91IG11c3QgcmUtY3JlYXRlIHRoZQorICAgICAgZXh0MyBmaWxlc3lzdGVtLCBzaW5jZSB0aGUgZmFjdG9yeSB1LWJvb3QgY2FuIG9ubHkgaGFuZGxlIDEyOCBieXRlIGlub2RlcyBhbmQKKyAgICAgIGNhbm5vdCByZWFkIHRoZSBwYXJ0aXRpb24gb3RoZXJ3aXNlLgorCisgICAgICBUaGVzZSBib290IGluc3RydWN0aW9ucyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSByZWNyZWF0ZWQgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aXRoCisgICAgICAxMjggYnl0ZSBpbm9kZXMsIHlvdSBoYXZlIGFuIHVwZGF0ZWQgdWJvb3Qgb3IgeW91IGFyZSBydW5uaW5nIGFuZCBpbWFnZSBjYXBhYmxlCisgICAgICBvZiBtYWtpbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGhlIGJvYXJkIGl0c2VsZi4KKworCisgMS4gQm9vdCBmcm9tIE5GUyByb290CisKKyAyLiBNb3VudCB0aGUgVVNCIGRpc2sgcGFydGl0aW9uIDIgYW5kIHRoZW4gZXh0cmFjdCB0aGUgY29udGVudHMgb2YKKyAgICB0bXAvZGVwbG95L2NvcmUtaW1hZ2UtWFhYWC50YXIuYnoyIGludG8gaXQuCisKKyAgICBCZWZvcmUgc3RhcnRpbmcsIGNvcHkgY29yZS1pbWFnZS1taW5pbWFsLXh4eC50YXIuYnoyIGFuZCB2bWxpbnV4IGludG8KKyAgICByb290ZnMgcGF0aCBvbiB5b3VyIHdvcmtzdGF0aW9uLgorCisgICAgYW5kIHRoZW4sCisgIAorICAgICAgIyBtb3VudCAvZGV2L3NkYTIgL21lZGlhL3NkYTIKKyAgICAgICMgdGFyIC14dmpwZiBjb3JlLWltYWdlLW1pbmltYWwtWFhYLnRhci5iejIgLUMgL21lZGlhL3NkYTIKKyAgICAgICMgY3Agdm1saW51eCAvbWVkaWEvc2RhMi9ib290L3ZtbGludXgKKyAgICAgICMgdW1vdW50IC9tZWRpYS9zZGEyCisgICAgICAjIHJlYm9vdAorCisgMy4gUmVib290IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQgdG8gZ2V0IHRvIHRoZSBVLUJvb3QKKyAgICBjb21tYW5kIGxpbmU6CisKKyAgICAjIHJlYm9vdAorCisgNC4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgorCisgICAgICA9PiBleHQybG9hZCB1c2IgMDoyICRsb2FkYWRkciBib290L3ZtbGludXgKKyAgICAgID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9zZGEyIHJ3IHJvb3R3YWl0IG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjUxMmsoYm9vdDApLDUxMmsoYm9vdDEpLDY0a0AzMDcyayhlZXByb20pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvQVVUSE9SUyBiL3lvY3RvLXBva3kvYml0YmFrZS9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmQ3OGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvQVVUSE9SUwpAQCAtMCwwICsxLDEwIEBACitUaW0gQW5zZWxsIDxtaXRocm9AbWl0aGlzLm5ldD4KK1BoaWwgQmx1bmRlbGwgPHBiQGhhbmRoZWxkcy5vcmc+CitTZWIgRnJhbmtlbmd1bCA8c2ViQGZyYW5rZW5ndWwub3JnPgorSG9sZ2VyIEZyZXl0aGVyIDxob2xnZXJAbW9pamktbW9iaWxlLmNvbT4KK01hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luQGp1c3praWV3aWN6LmNvbS5wbD4KK0NocmlzIExhcnNvbiA8a2VyZ290aEBoYW5kaGVsZHMub3JnPgorVWxyaWNoIEx1Y2thcyA8bHVja2FzQG11c29mdC5kZT4KK01pY2tleSBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CitSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitIb2xnZXIgU2NodXJpZyA8aG9sZ2Vyc2NodXJpZ0BnbXguZGU+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvQ09QWUlORyBiL3lvY3RvLXBva3kvYml0YmFrZS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvQ09QWUlORwpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvQ2hhbmdlTG9nIGIveW9jdG8tcG9reS9iaXRiYWtlL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWMyYTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL0NoYW5nZUxvZwpAQCAtMCwwICsxLDMxNyBAQAorQ2hhbmdlcyBpbiBCaXRiYWtlIDEuOS54OgorCS0gQWRkIFBFIChQYWNrYWdlIEVwb2NoKSBzdXBwb3J0IGZyb20gUGhpbGlwcCBaYWJlbCAocEg1KQorCS0gVHJlYXQgcHl0aG9uIGZ1bmN0aW9ucyB0aGUgc2FtZSBhcyBzaGVsbCBmdW5jdGlvbnMgZm9yIGxvZ2dpbmcKKwktIFVzZSBUTVBESVIvYW5vbmZ1bmMgYXMgYSBfX2Fub25mdW5jIHRlbXAgZGlyZWN0b3J5IChUKQorCS0gQ2F0Y2ggdHJ1bmNhdGVkIGNhY2hlIGZpbGUgZXJyb3JzCisJLSBBbGxvdyBvcGVyYXRpb25zIG90aGVyIHRoYW4gYXNzaWdubWVudCBvbiBmbGFnIHZhcmlhYmxlcworCS0gQWRkIGNvZGUgdG8gaGFuZGxlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisJLSBGaXggY2FjaGUgZXJyb3JzIHdoZW4gZ2VuZXJhdGlvbiBkb3RHcmFwaHMKKwktIE1ha2Ugc3VyZSBfX2luaGVyaXRfY2FjaGUgaXMgdXBkYXRlZCBiZWZvcmUgY2FsbGluZyBpbmNsdWRlKCkgKGZyb20gTWljaGFlbCBLcmVsaW4pCisJLSBGaXggYnVnIHdoZW4gdGFyZ2V0IHdhcyBpbiBBU1NVTUVfUFJPVklERUQgKCMyMjM2KQorCS0gUmFpc2UgUGFyc2VFcnJvciBmb3IgZmlsZW5hbWVzIHdpdGggbXVsdGlwbGUgdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBpbmZpbml0ZWx5IGxvb3BpbmcgKCMyMDYyKQorCS0gRml4IGludmFsaWQgcmVnZXhwIGluIEJCTUFTSyBlcnJvciBoYW5kbGluZyAobWlzc2luZyBpbXBvcnQpICgjMTEyNCkKKwktIFByb21vdGUgY2VydGFpbiB3YXJuaW5ncyBmcm9tIGRlYnVnIHRvIG5vdGUgMiBsZXZlbAorCS0gVXBkYXRlIG1hbnVhbAorCS0gQ29ycmVjdGx5IHJlZGlyZWN0IHN0ZGluIHdoZW4gZm9ya2luZworCS0gSWYgcGFyc2luZyBlcnJvcnMgYXJlIGZvdW5kLCBleGl0LCB0b28gbWFueSB1c2VycyBtaXNzIHRoZSBlcnJvcnMKKwktIFJlbW92ZSBzdXByaW91cnMgUFJFRkVSUkVEX1BST1ZJREVSIHdhcm5pbmdzCisJLSBzdm4gZmV0Y2hlcjogQWRkIF9idWlsZHN2bmNvbW1hbmQgZnVuY3Rpb24KKwktIEltcHJvdmUgY2VydGFpbiBlcnJvciBtZXNzYWdlcworCS0gUmV3cml0ZSBzdm4gZmV0Y2hlciB0byBtYWtlIGFkZGluZyBleHRyYSBvcGVyYXRpb25zIGVhc2llciAKKwkgIGFzIHBhcnQgb2YgZnV0dXJlIFNSQ0RBVEU9Im5vdyIgZml4ZXMKKwkgIChyZXF1aXJlcyBuZXcgRkVUQ0hDTURfc3ZuIGRlZmluaXRpb24gaW4gYml0YmFrZS5jb25mKQorCS0gQ2hhbmdlIFNWTkRJUiBsYXlvdXQgdG8gYmUgbW9yZSB1bmlxdWUgKGZpeGVzICMyNjQ0IGFuZCAjMjYyNCkKKwktIEFkZCBDb25maWdQYXJzZWQgRXZlbnQgYWZ0ZXIgY29uZmlndXJhdGlvbiBwYXJzaW5nIGlzIGNvbXBsZXRlCisJLSBBZGQgU1JDUkVWIHN1cHBvcnQgZm9yIHN2biBmZXRjaGVyCisJLSBkYXRhLmVtaXRfdmFyKCkgLSBvbmx5IGNhbGwgZ2V0VmFyIGlmIHdlIG5lZWQgdGhlIHZhcmlhYmxlCisJLSBTdG9wIGdlbmVyYXRpbmcgdGhlIEEgdmFyaWFibGUgKHNlZW1zIHRvIGJlIGxlZ2FjeSBjb2RlKQorCS0gTWFrZSBzdXJlIGludGVydGFzayBkZXBlbmRzIGdldCBwcm9jZXNzZWQgY29ycmVjdGluZyBpbiByZWN1cnNpdmUgZGVwZW5kcworCS0gQWRkIHBuLVBOIHRvIG92ZXJyaWRlcyB3aGVuIGV2YWx1YXRpbmcgUFJFRkVSUkVEX1ZFUlNJT04KKwktIEltcHJvdmUgdGhlIHByb2dyZXNzIGluZGljYXRvciBieSBza2lwcGluZyB0YXNrcyB0aGF0IGhhdmUgCisJICBhbHJlYWR5IHJ1biBiZWZvcmUgc3RhcnRpbmcgdGhlIGJ1aWxkIHJhdGhlciB0aGFuIGR1cmluZyBpdAorCS0gQWRkIHByb2ZpbGluZyBvcHRpb24gKC1QKQorCS0gQWRkIEJCX1NSQ1JFVl9QT0xJQ1kgdmFyaWFibGUgKGNsZWFyIG9yIGNhY2hlKSB0byBjb250cm9sIFNSQ1JFViBjYWNoZQorCS0gQWRkIFNSQ1JFVl9GT1JNQVQgc3VwcG9ydAorCS0gRml4IGxvY2FsIGZldGNoZXIncyBsb2NhbHBhdGggcmV0dXJuIHZhbHVlcworCS0gQXBwbHkgT1ZFUlJJREVTIGJlZm9yZSBwZXJmb3JtaW5nIGltbWVkaWF0ZSBleHBhbnNpb25zCisJLSBBbGxvdyB0aGUgLWIgLWUgb3B0aW9uIGNvbWJpbmF0aW9uIHRvIHRha2UgcmVndWxhciBleHByZXNzaW9ucworCS0gRml4IGhhbmRsaW5nIG9mIHZhcmlhYmxlcyB3aXRoIGV4cGFuc2lvbiBpbiB0aGUgbmFtZSB1c2luZyBfYXBwZW5kL19wcmVwZW5kCisJICBlLmcuIFJSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF94eXogPSAiYWJjIgorCS0gQWRkIHBsYWluIG1lc3NhZ2UgZnVuY3Rpb24gdG8gYmIubXNnCisJLSBTb3J0IHRoZSBsaXN0IG9mIHByb3ZpZGVycyBiZWZvcmUgcHJvY2Vzc2luZyBzbyBkZXBlbmRlbmN5IHByb2JsZW1zIGFyZSAKKwkgIHJlcHJvZHVjaWJsZSByYXRoZXIgdGhhbiBlZmZlY3RpdmVseSByYW5kb20KKwktIEZpeC9pbXByb3ZlIGJpdGJha2UgLXMgb3V0cHV0CisJLSBBZGQgbG9ja2luZyBmb3IgZmV0Y2hlcnMgc28gb25seSBvbmUgdHJpZXMgdG8gZmV0Y2ggYSBnaXZlbiBmaWxlIGF0IGEgZ2l2ZW4gdGltZQorCS0gRml4IGludCgwKS9Ob25lIGNvbmZ1c2lvbiBpbiBydW5xdWV1ZS5weSB3aGljaCBjYXVzZXMgcmFuZG9tIGdhcHMgaW4gZGVwZW5kZW5jeSBjaGFpbnMJICAKKwktIEV4cGFuZCBkYXRhIGluIGFkZHRhc2tzCisJLSBQcmludCB0aGUgbGlzdCBvZiBtaXNzaW5nIERFUEVORFMsUkRFUEVORFMgZm9yIHRoZSAiTm8gYnVpbGRhYmxlIHByb3ZpZGVycyBhdmFpbGFibGUgZm9yIHJlcXVpcmVkLi4uLiIKKwkgIGVycm9yIG1lc3NhZ2UuCisJLSBSZXdvcmsgYWRkX3Rhc2sgdG8gYmUgbW9yZSBlZmZpY2llbnQgKDYlIHNwZWVkdXAsIDclIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyByZWR1Y3Rpb24pCisJLSBTb3J0IGRpZ3JhcGggb3V0cHV0IHRvIG1ha2UgYnVpbGRzIG1vcmUgcmVwcm9kdWNpYmxlCisJLSBTcGxpdCBleHBhbmRLZXlzIGludG8gdHdvIGZvciBsb29wcyB0byBiZW5lZml0IGZyb20gdGhlIGV4cGFuZF9jYWNoZSAoMTIlIHNwZWVkdXApCisJLSBydW5xdWV1ZS5weTogRml4IGlkZXBlbmRzIGhhbmRsaW5nIHRvIGF2b2lkIGRlcGVuZGVuY3kgZXJyb3JzCisJLSBDbGVhciB0aGUgdGVybWluYWwgVE9TVE9QIGZsYWcgaWYgc2V0IChhbmQgd2FybiB0aGUgdXNlcikKKwktIEZpeCByZWdyZXNzaW9uIGZyb20gcjY1MyBhbmQgbWFrZSBTUkNEQVRFL0NWU0RBVEUgd29yayBmb3IgcGFja2FnZXMgYWdhaW4KKwktIEZpeCBhIGJ1ZyBpbiBiYi5kZWNvZGV1cmwgd2hlcmUgaHR0cDovL3NvbWUud2hlcmUuY29tL3NvbWVmaWxlLnRneiBkZWNvZGVkIHRvIGhvc3Q9IiIgKCMxNTMwKQorCS0gV2FybiBhYm91dCBtYWxmb3JtZWQgUFJFRkVSUkVEX1BST1ZJREVSUyAoIzEwNzIpCisJLSBBZGQgc3VwcG9ydCBmb3IgQkJfTklDRV9MRVZFTCBvcHRpb24gKCMxNjI3KQorCS0gUHN5Y28gaXMgdXNlZCBvbmx5IG9uIHg4NiBhcyB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLgorCS0gU29ydCBpbml0aWFsIHByb3ZpZGVycyBsaXN0IGJ5IGRlZmF1bHQgcHJlZmVyZW5jZSAoIzExNDUsICMyMDI0KQorCS0gSW1wcm92ZSBwcm92aWRlciBzb3J0aW5nIHNvIHByZWZlcmVkIHZlcnNpb25zIGhhdmUgcHJlZmVyZW5jZSBvdmVyIGxhdGVzdCB2ZXJzaW9ucyAoIzc2OCkKKwktIERldGVjdCBidWlsZHMgb2YgdGFza3Mgd2l0aCBvdmVybGFwcGluZyBwcm92aWRlcnMgYW5kIHdhcm4gKHdpbGwgYmVjb21lIGEgZmF0YWwgZXJyb3IpICgjMTM1OSkKKwktIEFkZCBNVUxUSV9QUk9WSURFUl9XSElURUxJU1QgdmFyaWFibGUgdG8gYWxsb3cga25vd24gc2FmZSBtdWx0aXBsZSBwcm92aWRlcnMgdG8gYmUgbGlzdGVkCisJLSBIYW5kbGUgcGF0aHMgaW4gc3ZuIGZldGNoZXIgbW9kdWxlIHBhcmFtZXRlcgorCS0gU3VwcG9ydCB0aGUgc3ludGF4ICJleHBvcnQgVkFSSUFCTEUiCisJLSBBZGQgYnpyIGZldGNoZXIKKwktIEFkZCBzdXBwb3J0IGZvciBjbGVhbmluZyBkaXJlY3RvcmllcyBiZWZvcmUgYSB0YXNrIGluIHRoZSBmb3JtOgorCSAgZG9fdGFza25hbWVbY2xlYW5kaXJzXSA9ICJkaXIiCisJLSBienIgZmV0Y2hlciB0d2Vha3MgZnJvbSBSb2JlcnQgU2NodXN0ZXIgKCMyOTEzKQorCS0gQWRkIG1lcmN1cmlhbCAoaGcpIGZldGNoZXIgZnJvbSBSb2JlcnQgU2NodXN0ZXIgKCMyOTEzKQorCS0gRG9uJ3QgYWRkIGR1cGxpY2F0ZXMgdG8gQkJQQVRICisJLSBGaXggcHJlZmVycmVkX3ZlcnNpb24gcmV0dXJuIHZhbHVlcyAocHJvdmlkZXJzLnB5KQorCS0gRml4ICdkZXBlbmRzJyBmbGFnIHNwbGl0dGluZworCS0gRml4IHVuZXhwb3J0IGhhbmRsaW5nICgjMzEzNSkKKwktIEFkZCBiYi5jb3B5ZmlsZSBmdW5jdGlvbiBzaW1pbGFyIHRvIGJiLm1vdmVmaWxlIChhbmQgaW1wcm92ZSBtb3ZlZmlsZSBlcnJvciByZXBvcnRpbmcpCisJLSBBbGxvdyBtdWx0aXBsZSBvcHRpb25zIGZvciBkZXB0YXNrIGZsYWcKKwktIFVzZSBnaXQtZmV0Y2ggaW5zdGVhZCBvZiBnaXQtcHVsbCByZW1vdmluZyBhbnkgbmVlZCBmb3IgbWVyZ2VzIHdoZW4gCisJICBmZXRjaGluZyAod2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaW5kZXgpLiBGaXhlcyBmZXRjaCBlcnJvcnMuCisJLSBBZGQgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTIG9wdGlvbiwgc2V0IHRvIDAgdG8gbWFrZSBnaXQgZmV0Y2hlcyAKKwkgIGZhc3RlciBhdCB0aGUgZXhwZW5zZSBvZiBub3QgY3JlYXRpbmcgbWlycm9yIHRhcmJhbGxzLgorCS0gU1JDUkVWIGhhbmRsaW5nIHVwZGF0ZXMsIGltcHJvdmVtZW50cyBhbmQgZml4ZXMgZnJvbSBQb2t5CisJLSBBZGQgYmIudXRpbHMubG9ja2ZpbGUoKSBhbmQgYmIudXRpbHMudW5sb2NrZmlsZSgpIGZyb20gUG9reQorCS0gQWRkIHN1cHBvcnQgZm9yIHRhc2sgc2VsZnN0YW1wIGFuZCBsb2NrZmlsZXMgZmxhZ3MKKwktIERpc2FibGUgdGFzayBudW1iZXIgYWNjZWxlcmF0aW9uIHNpbmNlIGl0IGNhbiBhbGxvdyB0aGUgdGFza3MgdG8gcnVuIAorCSAgb3V0IG9mIHNlcXVlbmNlCisJLSBJbXByb3ZlIHJ1bnF1ZXVlIGNvZGUgY29tbWVudHMKKwktIEFkZCB0YXNrIHNjaGVkdWxlciBhYnN0cmFjdGlvbiBhbmQgc29tZSBleGFtcGxlIHNjaGVkdWxlcnMKKwktIEltcHJvdmUgY2lyY3VsYXIgZGVwZW5kZW5jeSBjaGFpbiBkZWJ1Z2dpbmcgY29kZSBhbmQgdXNlciBmZWVkYmFjaworCS0gRG9uJ3QgZ2l2ZSBhIHN0YWNrdHJhY2UgZm9yIGludmFsaWQgdGFza3MsIGhhdmUgYSB1c2VyIGZyaWVuZGx5IG1lc3NhZ2UgKCMzNDMxKQorCS0gQWRkIHN1cHBvcnQgZm9yICItZSB0YXJnZXQiICgjMzQzMikKKwktIEZpeCBzaGVsbCBzaG93ZGF0YSBjb21tYW5kICgjMzI1OSkKKwktIEZpeCBzaGVsbCBkYXRhIHVwZGF0aW5nIHByb2JsZW1zICgjMTg4MCkKKwktIFByb3Blcmx5IHJhaXNlIGVycm9ycyBmb3IgaW52YWxpZCBzb3VyY2UgVVJJIHByb3RvY29scworCS0gQ2hhbmdlIHRoZSB3Z2V0IGZldGNoZXIgZmFpbHVyZSBoYW5kbGluZyB0byBhdm9pZCBsb2NrZmlsZSBwcm9ibGVtcworCS0gQWRkIHN1cHBvcnQgZm9yIGJyYW5jaGVzIGluIGdpdCBmZXRjaGVyIChPdGF2aW8gU2FsdmFkb3IsIE1pY2hhZWwgTGF1ZXIpCisJLSBNYWtlIHRhc2tkYXRhIGFuZCBydW5xdWV1ZSBlcnJvcnMgbW9yZSB1c2VyIGZyaWVuZGx5CisJLSBBZGQgbm9yZWN1cnNlIGFuZCBmdWxscGF0aCBvcHRpb25zIHRvIGN2cyBmZXRjaGVyCisJLSBGaXggZXhpdCBjb2RlIGZvciBidWlsZCBmYWlsdXJlcyBpbiAtLWNvbnRpbnVlIG1vZGUKKwktIEZpeCBnaXQgYnJhbmNoIHRhZ3MgZmV0Y2hpbmcKKwktIENoYW5nZSBwYXJzZUNvbmZpZ3VyYXRpb25GaWxlIHNvIGl0IHdvcmtzIG9uIHJlYWwgZGF0YSwgbm90IGEgY29weQorCS0gSGFuZGxlICdiYXNlJyBpbmhlcml0IGFuZCBhbGwgb3RoZXIgSU5IRVJJVHMgZnJvbSBwYXJzZUNvbmZpZ3VyYXRpb25GaWxlIAorCSAgaW5zdGVhZCBvZiBCQkhhbmRsZXIKKwktIEZpeCBnZXRWYXJGbGFncyBidWcgaW4gZGF0YV9zbWFydAorCS0gT3B0bWlzZSBjYWNoZSBoYW5kbGluZyBieSBtb3JlIHF1aWNrbHkgZGV0ZWN0aW5nIGFuIGludmFsaWQgY2FjaGUsIG9ubHkgCisJICBzYXZpbmcgdGhlIGNhY2hlIHdoZW4gaXRzIGNoYW5nZWQsIG1vdmluZyB0aGUgY2FjaGUgdmFsaWRpdHkgY2hlY2sgaW50bworCSAgdGhlIHBhcnNpbmcgbG9vcCBhbmQgZmFjdG9yaW5nIHNvbWUgZ2V0VmFyIGNhbGxzIG91dHNpZGUgYSBmb3IgbG9vcAorCS0gQ29va2VyOiBSZW1vdmUgYSBkZWJ1ZyBtZXNzYWdlIGZyb20gdGhlIHBhcnNpbmcgbG9vcCB0byBsb3dlciBvdmVyaGVhZAorCS0gQ29udmVydCBidWlsZC5weSBleGVjX3Rhc2sgdG8gdXNlIGdldFZhckZsYWdzCisJLSBVcGRhdGUgc2hlbGwgdG8gdXNlIGNvb2tlci5idWlsZEZpbGUKKwktIEFkZCBTdGFtcFVwZGF0ZSBldmVudAorCS0gQ29udmVydCAtYiBvcHRpb24gdG8gdXNlIHRhc2tkYXRhL3J1bnF1ZXVlCisJLSBSZW1vdmUgZGlncmFwaCBhbmQgc3dpdGNoIHRvIG5ldyBzdGFtcCBjaGVja2luZyBjb2RlLiBleGVjX3Rhc2sgbm8gbG9uZ2VyCisJICBob25vdXJzIGRlcGVuZGVuY2llcworCS0gTWFrZSBmZXRjaGVyIHRpbWVzdGFtcCB1cGRhdGluZyBub24tZmF0YWwgd2hlbiBwZXJtaXNzaW9ucyBkb24ndCBhbGxvdyAKKwkgIHVwZGF0ZXMKKwktIEFkZCBCQl9TQ0hFRFVMRVIgdmFyaWFibGUvb3B0aW9uICgiY29tcGxldGlvbiIgb3IgInNwZWVkIikgY29udHJvbGxpbmcKKwkgIHRoZSB3YXkgYml0YmFrZSBzY2hlZHVsZXMgdGFza3MKKwktIEFkZCBCQl9TVEFNUF9QT0xJQ1kgdmFyaWFibGUvb3B0aW9uICgicGVyZmlsZSIgb3IgImZ1bGwiKSBjb250cm9sbGluZworCSAgaG93IGV4dGVuc2l2ZWx5IHN0YW1wcyBhcmUgbG9va2VkIGF0IGZvciB2YWxpZGl0eQorCS0gV2hlbiBoYW5kbGluZyBidWlsZCB0YXJnZXQgZmFpbHVyZXMgbWFrZSBzdXJlIGlkZXBlbmRzIGFyZSBjaGVja2VkIGFuZAorCSAgZmFpbGVkIHdoZXJlIG5lZWRlZC4gRml4ZXMgLS1jb250aW51ZSBtb2RlIGNyYXNoZXMuCisJLSBGaXggLWYgKGZvcmNlKSBpbiBjb25qdW5jdGlvbiB3aXRoIC1iCisJLSBGaXggcHJvYmxlbXMgd2l0aCByZWNyZGVwdGFzayBoYW5kbGluZyB3aGVyZSBzb21lIGlkZXBlbmRzIHdlcmVuJ3QgaGFuZGxlZAorCSAgY29ycmVjdGx5LgorCS0gSGFuZGxlIGV4aXQgY29kZXMgY29ycmVjdGx5IChmcm9tIHBINSkKKwktIFdvcmsgYXJvdW5kIHJlZnMvSEVBRCBpc3N1ZXMgd2l0aCBnaXQgb3ZlciBodHRwICgjMzQxMCkKKwktIEFkZCBwcm94eSBzdXBwb3J0IHRvIHRoZSBDVlMgZmV0Y2hlciAoZnJvbSBDeXJpbCBDaGVtcGFyYXRoeSkKKwktIEltcHJvdmUgcnVuZmV0Y2hjbWQgc28gZXJyb3JzIGFyZSBzZWVuIGFuZCB2YXJpb3VzIEdJVCB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkCisJLSBBZGQgYWJpbGl0eSB0byBmZXRjaGVycyB0byBjaGVjayBVUkwgdmFsaWRpdHkgd2l0aG91dCBkb3dubG9hZGluZworCS0gSW1wcm92ZSBydW50aW1lIFBSRUZFUlJFRF9QUk9WSURFUlMgd2FybmluZyBtZXNzYWdlCisJLSBBZGQgQkJfU1RBTVBfV0hJVEVMSVNUIG9wdGlvbiB3aGljaCBjb250YWlucyBhIGxpc3Qgb2Ygc3RhbXBzIHRvIGlnbm9yZSB3aGVuCisJICBjaGVja2luZyBzdGFtcCBkZXBlbmRlbmNpZXMgYW5kIHVzaW5nIGEgQkJfU1RBTVBfUE9MSUNZIG9mICJ3aGl0ZWxpc3QiCisJLSBObyBsb25nZXIgd2VpZ2h0IHByb3ZpZGVycyBvbiB0aGUgYmFzaXMgb2YgYSBwYWNrYWdlIGJlaW5nICJhbHJlYWR5IHN0YWdlZCIuIFRoaXMKKwkgIGxlYWRzIHRvIGJ1aWxkcyBiZWluZyBub24tZGV0ZXJtaW5pc3RpYy4KKwktIEZsdXNoIHN0ZG91dC9zdGRlcnIgYmVmb3JlIGZvcmtpbmcgdG8gZml4IGR1cGxpY2F0ZSBjb25zb2xlIG91dHB1dAorCS0gTWFrZSBzdXJlIHJlY3JkZXBzIHRhc2tzIGluY2x1ZGUgYWxsIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzIG9mIGEgZ2l2ZW4gZm4KKwktIEFkZCBiYi5ydW5xdWV1ZS5jaGVja19zdGFtcF9mbigpIGZvciB1c2UgYnkgcGFja2FnZWQtc3RhZ2luZworCS0gQWRkIFBFUlNJU1RFTlRfRElSIHRvIHN0b3JlIHRoZSBQZXJzaXN0RGF0YSBpbiBhIHBlcnNpc3RlbnQKKwkgIGRpcmVjdG9yeSAhPSB0aGUgY2FjaGUgZGlyLgorCS0gQWRkIG1kNSBhbmQgc2hhMjU2IGNoZWNrc3VtIGdlbmVyYXRpb24gZnVuY3Rpb25zIHRvIHV0aWxzLnB5CisJLSBDb3JyZWN0bHkgaGFuZGxlICctJyBjaGFyYWN0ZXJzIGluIGNsYXNzIG5hbWVzICgjMjk1OCkKKwktIE1ha2Ugc3VyZSBleHBhbmRLZXlzIGhhcyBiZWVuIGNhbGxlZCBvbiB0aGUgZGF0YSBkaWN0aW9uYXJ5IGJlZm9yZSBydW5uaW5nIHRhc2tzCisJLSBDb3JyZWN0bHkgYWRkIGEgdGFzayBvdmVycmlkZSBpbiB0aGUgZm9ybSB0YXNrLVRBU0tOQU1FLgorCS0gUmV2ZXJ0IHRoZSAnLScgY2hhcmFjdGVyIGZpeCBpbiBjbGFzcyBuYW1lcyBzaW5jZSBpdCBicmVha3MgdGhpbmdzCisJLSBXaGVuIGEgcmVnZXhwIGZhaWxzIHRvIGNvbXBpbGUgZm9yIFBBQ0tBR0VTX0RZTkFNSUMsIHByaW50IGEgbW9yZSB1c2VmdWwgZXJyb3IgKCM0NDQ0KQorCS0gQWxsb3cgdG8gY2hlY2tvdXQgQ1ZTIGJ5IERhdGUgYW5kIFRpbWUuIEp1c3QgYWRkIEhIbW0gdG8gdGhlIFNSQ0RBVEUuCisJLSBNb3ZlIHBydW5lZGlyIGZ1bmN0aW9uIHRvIHV0aWxzLnB5IGFuZCBhZGQgZXhwbG9kZV9kZXBfdmVyc2lvbnMgZnVuY3Rpb24KKwktIFJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBTUkNSRVYgPT0gJ0lOVkFMSUQnCisJLSBGaXggaGcgZmV0Y2hlciB1c2VybmFtZS9wYXNzd29yZCBoYW5kbGluZyBhbmQgZml4IGNyYXNoCisJLSBGaXggUEFDS0FHRVNfRFlOQU1JQyBoYW5kbGluZyBvZiBwYWNrYWdlcyB3aXRoICcrKycgaW4gdGhlIG5hbWUKKwktIFJlbmFtZSBfX2RlcGVuZHMgdG8gX19iYXNlX2RlcGVuZHMgYWZ0ZXIgY29uZmlndXJhdGlvbiBwYXJzaW5nIHNvIHdlIGRvbid0CisJICByZWNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uZmlnIGZpbGVzIHRpbWUgYWZ0ZXIgdGltZQorCS0gQWRkIGJldHRlciBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIGhhbmRsaW5nLiBCeSBkZWZhdWx0IGl0IHdpbGwgbm93IG9ubHkgcGFzcyBjZXJ0YWluIAorCSAgd2hpdGVsaXN0ZWQgdmFyaWFibGVzIGludG8gdGhlIGRhdGEgc3RvcmUuIElmIEJCX1BSRVNFUlZFX0VOViBpcyBzZXQgYml0YmFrZSB3aWxsIHVzZQorCSAgYWxsIHZhcmlhYmxlIGZyb20gdGhlIGVudmlyb25tZW50LiBJZiBCQl9FTlZfV0hJVEVMSVNUIGlzIHNldCwgdGhhdCB3aGl0ZWxpc3Qgd2lsbCBiZQorCSAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbCBiaXRiYWtlIG9uZS4gQWx0ZXJuYXRpdmVseSwgQkJfRU5WX0VYVFJBV0hJVEUgY2FuIGJlIHVzZWQKKwkgIHRvIGV4dGVuZCB0aGUgaW50ZXJuYWwgd2hpdGVsaXN0LgorCS0gUGVyZm9yY2UgZmV0Y2hlciBmaXggdG8gdXNlIGNvbW1hbmRsaW5lIG9wdGlvbnMgaW5zdGVhZCBvZiBiZWluZyBvdmVycmlkZW4gYnkgdGhlIGVudmlyb25tZW50CisJLSBiYi51dGlscy5wcnVuZWRpciBjYW4gY29wZSB3aXRoIHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVlcyB3aXRob3V0IGV4Y2VwdGlvbnMKKwktIHVzZSBAcmV2IHdoZW4gZG9pbmcgYSBzdm4gY2hlY2tvdXQKKwktIEFkZCBvc2MgZmV0Y2hlciAoZnJvbSBKb3NodWEgTG9jayBpbiBQb2t5KQorCS0gV2hlbiBTUkNSRVYgYXV0b3JldmlzaW9uaW5nIGZvciBhIHJlY2lwZSBpcyBpbiB1c2UsIGRvbid0IGNhY2hlIHRoZSByZWNpcGUKKwktIEFkZCB0cnlhbHRjb25maWdzIG9wdGlvbiB0byBjb250cm9sIHdoZXRoZXIgYml0YmFrZSB0cnlzIHVzaW5nIGFsdGVybmF0aXZlIHByb3ZpZGVycworCSAgdG8gZnVsZmlsIGZhaWxlZCBkZXBlbmRlbmNpZXMuIEl0IGRlZmF1bHRzIHRvIG9mZiwgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2luY2UgdGhpcworCSAgYmVoYXZpb3VyIGNvbmZ1c2VzIG1hbnkgdXNlcnMgYW5kIGlzbid0IG9mdGVuIHVzZWZ1bC4KKwktIEltcHJvdmUgbG9jayBmaWxlIGZ1bmN0aW9uIGVycm9yIGhhbmRsaW5nCisJLSBBZGQgdXNlcm5hbWUgaGFuZGxpbmcgdG8gdGhlIGdpdCBmZXRjaGVyIChSb2JlcnQgQnJhZ2cpCisJLSBBZGQgc3VwcG9ydCBmb3IgSFRUUF9QUk9YWSBhbmQgSFRUUF9QUk9YWV9JR05PUkUgdmFyaWFibGVzIHRvIHRoZSB3Z2V0IGZldGNoZXIKKwktIEV4cG9ydCBtb3JlIHZhcmlhYmxlcyB0byB0aGUgZmV0Y2hlciBjb21tYW5kcyB0byBhbGxvdyBzc2ggY2hlY2tvdXRzIGFuZCBjaGVja291dHMgdGhyb3VnaCAKKwkgIHByb3hpZXMgdG8gd29yayBiZXR0ZXIuIChmcm9tIFBva3kpCisJLSBBbHNvIGFsbG93IHVzZXIgYW5kIHBzd2Qgb3B0aW9ucyBpbiBTUkNfVVJJcyBnbG9iYWxseSAoZnJvbSBQb2t5KQorCS0gSW1wcm92ZSBwcm94eSBoYW5kbGluZyB3aGVuIHVzaW5nIG1pcnJvcnMgKGZyb20gUG9reSkKKwktIEFkZCBiYi51dGlscy5wcnVuZV9zdWZmaXggZnVuY3Rpb24KKwktIEZpeCBoZyBjaGVja291dHMgb2Ygc3BlY2lmaWMgcmV2aXNpb25zIChmcm9tIFBva3kpCisJLSBGaXggd2dldCBmZXRjaGluZyBvZiB1cmxzIHdpdGggcGFyYW1ldGVycyBzcGVjaWZpZWQgKGZyb20gUG9reSkKKwktIEFkZCB1c2VybmFtZSBoYW5kbGluZyB0byBnaXQgZmV0Y2hlciAoZnJvbSBQb2t5KQorCS0gU2V0IEhPTUUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgZmV0Y2hlciBjb21tYW5kcyAoZnJvbSBQb2t5KQorCS0gTWFrZSBzdXJlIGFsbG93ZWQgdmFyaWFibGVzIGluaGVyaXRlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCBhcmUgZXhwb3J0ZWQgYWdhaW4gKGZyb20gUG9reSkKKwktIFdoZW4gcnVubmluZyBhIHN0YWdlIHRhc2sgaW4gYmJzaGVsbCwgcnVuIHBvcHVsYXRlX3N0YWdpbmcsIG5vdCB0aGUgc3RhZ2UgdGFzayAoZnJvbSBQb2t5KQorCS0gRml4ICsgY2hhcmFjdGVyIGVzY2FwaW5nIGZyb20gUEFDS0FHRVNfRFlOQU1JQyAodGhhbmtzIE90YXZpbyBTYWx2YWRvcikKKwktIEFkZGl0aW9uIG9mIEJCQ0xBU1NFWFRFTkQgc3VwcG9ydCBmb3IgYWxsb3dpbmcgb25lIHJlY2lwZSB0byBwcm92aWRlIG11bHRpcGxlIHRhcmdldHMgKGZyb20gUG9reSkKKworQ2hhbmdlcyBpbiBCaXRiYWtlIDEuOC4wOgorCS0gUmVsZWFzZSAxLjcueCBhcyBhIHN0YWJsZSBzZXJpZXMKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuNy54OgorCS0gTWFqb3IgdXBkYXRlcyBvZiB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBhbmQgZXhlY3V0aW9uCisJICBvZiB0YXNrcy4gQ29kZSBmcm9tIGJpbi9iaXRiYWtlIHJlcGxhY2VkIHdpdGggcnVucXVldWUucHkKKwkgIGFuZCB0YXNrZGF0YS5weQorCS0gTmV3IHRhc2sgZXhlY3V0aW9uIGNvZGUgc3VwcG9ydHMgbXVsdGl0aHJlYWRpbmcgd2l0aCBhIHNpbXBsaXN0aWMKKwkgIHRocmVhZGluZyBhbGdvcml0aG0gY29udHJvbGxlZCBieSBCQl9OVU1CRVJfVEhSRUFEUworCS0gQ2hhbmdlIG9mIHRoZSBTVk4gRmV0Y2hlciB0byBrZWVwIHRoZSBjaGVja291dCBhcm91bmQKKwkgIGNvdXJ0c2V5IG9mIFBhdWwgU29rb2xvdnNreSAoIzEzNjcpCisJLSBQQVRIIGZpeCB0byBiYmltYWdlICgjMTEwOCkKKwktIEFsbG93IGRlYnVnIGRvbWFpbnMgdG8gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZSAoLWwpCisJLSBBbGxvdyAnaW50ZXJhY3RpdmUnIHRhc2tzCisJLSBMb2dnaW5nIG1lc3NhZ2UgaW1wcm92ZW1lbnRzCisJLSBEcm9wIG5vdyB1bmVlZGVkIEJVSUxEX0FMTF9ERVBTIHZhcmlhYmxlCisJLSBBZGQgc3VwcG9ydCBmb3Igd2lsZGNhcmRzIHRvIC1iIG9wdGlvbgorCS0gTWFqb3Igb3ZlcmhhdWwgb2YgdGhlIGZldGNoZXJzIG1ha2luZyBhIGxhcmdlIGFtb3VudCBvZiBjb2RlIGNvbW1vbgorCSAgaW5jbHVkaW5nIG1pcnJvcmluZyBjb2RlCisJLSBGZXRjaGVycyBub3cgdG91Y2ggbWQ1IHN0YW1wcyB1cG9uIGFjY2VzcyAodG8gc2hvdyBhY3Rpdml0eSkKKwktIEZpeCAtZiBmb3JjZSBvcHRpb24gd2hlbiB1c2VkIHdpdGhvdXQgLWIgKGxvbmcgc3RhbmRpbmcgYnVnKQorCS0gQWRkIGV4cGFuZF9jYWNoZSB0byBkYXRhX2NhY2hlLnB5LCBjYWNoaW5nIGV4cGFuZGVkIGRhdGEgKHNwZWVkdXApCisJLSBBbGxvdyB2ZXJzaW9uIGZpZWxkIGluIERFUEVORFMgKGlnbm9yZWQgZm9yIG5vdykKKwktIEFkZCBhYm9ydCBmbGFnIHN1cHBvcnQgdG8gdGhlIHNoZWxsCisJLSBNYWtlIGluaGVyaXQgZmFpbCBpZiB0aGUgY2xhc3MgZG9lc24ndCBleGlzdCAoIzE0NzgpCisJLSBGaXggZGF0YS5lbWl0X2VudigpIHRvIGV4cGFuZCBrZXluYW1lcyBhcyB3ZWxsIGFzIHZhbHVlcworCS0gQWRkIHNzaCBmZXRjaGVyCisJLSBBZGQgcGVyZm9yY2UgZmV0Y2hlcgorCS0gTWFrZSBQUkVGRVJSRURfUFJPVklERVJfZm9vYmFyIGRlZmF1bHRzIHRvIGZvb2JhciBpZiBhdmFpbGFibGUKKwktIFNoYXJlIHRoZSBwYXJzZXIncyBtdGltZV9jYWNoZSwgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBzdGF0IHN5c2NhbGxzCisJLSBDb21waWxlIGFsbCBhbm9uZnVuY3MgYXQgb25jZSEgCisJICAqKiogQW5vbmZ1bmNzIG11c3Qgbm93IHVzZSBjb21tb24gc3BhY2luZyBmb3JtYXQgKioqCisJLSBNZW1vcmlzZSB0aGUgbGlzdCBvZiBoYW5kbGVycyBpbiBfX0JCSEFORExFUlMgYW5kIHRhc2tzIGluIF9fQkJUQVNLUworCSAgVGhpcyByZW1vdmVzIDIgbWlsbGlvbiBmdW5jdGlvbiBjYWxscyByZXN1bHRpbmcgaW4gYSA1LTEwJSBzcGVlZHVwCisJLSBBZGQgbWFucGFnZQorCS0gVXBkYXRlIGdlbmVyYXRlRG90R3JhcGggdG8gdXNlIHRhc2tEYXRhL3J1blF1ZXVlIGltcHJvdmluZyBhY2N1cmFjeQorCSAgYW5kIGFsc28gYWRkaW5nIGEgdGFzayBkZXBlbmRlbmN5IGdyYXBoCisJLSBGaXgvc3RhbmRhcmRpc2Ugb24gR1BMdjIgbGljZW5jZQorCS0gTW92ZSBtb3N0IGZ1bmN0aW9uYWxpdHkgZnJvbSBiaW4vYml0YmFrZSB0byBjb29rZXIucHkgYW5kIHNwbGl0IGludG8KKwkgIHNlcGFyYXRlIGZ1bmNpdG9ucworCS0gQ1ZTIGZldGNoZXI6IEFkZGVkIHN1cHBvcnQgZm9yIG5vbi1kZWZhdWx0IHBvcnQKKwktIEFkZCBCQklOQ0xVREVMT0dTX0xJTkVTLCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHJlYWQgZnJvbSBhbnkgbG9nZmlsZQorCS0gRHJvcCBzaGViYW5ncyBmcm9tIGxpYi9iYiBzY3JpcHRzCisKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjYuMDoKKwktIEJldHRlciBtc2cgaGFuZGxpbmcKKwktIENPVyBkaWN0IGltcGxlbWVudGF0aW9uIGZyb20gVGltIEFuc2VsbCAobWl0aHJvKSBsZWFkaW5nCisJICB0byBiZXR0ZXIgcGVyZm9ybWFuY2UKKwktIFNwZWVkIHVwIG9mIC1zCisKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjQuNDoKKwktIFNSQ0RBVEUgbm93IGhhbmRsaW5nIGNvdXJ0c2V5IEp1c3RpbiBQYXRyaW4KKwktICMxMDE3IGZpeCB0byB3b3JrIHdpdGggcm1fd29yaworCitDaGFuZ2VzIGluIEJpdEJha2UgMS40LjI6CisJLSBTZW5kIGxvZ3MgdG8gb2UucGFzdGViaW4uY29tIGluc3RlYWQgb2YgcGFzdGViaW4uY29tCisJICBmaXhlcyAjODU2CisJLSBDb3B5IHRoZSBpbnRlcm5hbCBiaXRiYWtlIGRhdGEgYmVmb3JlIGJ1aWxkaW5nIHRoZQorCSAgZGVwZW5kZW5jeSBncmFwaC4gVGhpcyBmaXhlcyBuYW5vIG5vdCBoYXZpbmcgYQorCSAgdmlydHVhbC9saWJjIGRlcGVuZGVuY3kKKwktIEFsbG93IG11bHRpcGxlIFRBUkJBTExfU1RBU0ggZW50cmllcworCS0gQ2FjaGUsIGNoZWNrIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBjaGFuZ2luZworCSAgaW50byBpdAorCS0gZ2l0IHNwZWVkdXAgY2xvbmluZyBieSBub3QgZG9pbmcgYSBjaGVja291dAorCS0gYWxsb3cgdG8gaGF2ZSBzcGFjZXMgaW4gZmlsZW5hbWVzICguY29uZiwgLmJiLCAuYmJjbGFzcykKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuNC4wOgorCS0gRml4IHRvIGNoZWNrIGJvdGggUkRFUEVORFMgYW5kIFJERVBFTkRTXyR7UE59CisJLSBGaXggYSBSREVQRU5EUyBwYXJzaW5nIGJ1ZyBpbiB1dGlsczpleHBsb2RlX2RlcHMoKQorCS0gVXBkYXRlIGdpdCBmZXRjaGVyIGJlaGF2aW91ciB0byBtYXRjaCBnaXQgY2hhbmdlcworCS0gQVNTVU1FX1BST1ZJREVEIGFsbG93ZWQgdG8gaW5jbHVkZSBydW50aW1lIHBhY2thZ2VzCisJLSBnaXQgZmV0Y2hlciBjbGVhbnVwIGFuZCBlZmZpY2VuY3kgaW1wcm92ZW1lbnRzCisJLSBDaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgY2FjaGUKKwktIFVwZGF0ZSB1c2VybWFudWFsIHRvIGRvY3VtZW50IHRoZSBGZXRjaGVycworCS0gTWFqb3IgY2hhbmdlcyB0byBjYWNoaW5nIHdpdGggYSBuZXcgc3RyYXRlZ3kKKwkgIGdpdmluZyBhIG1ham9yIHBlcmZvcm1hbmNlIGluY3JlYXNlIHdoZW4gcmVwYXJzaW5nCisJICB3aXRoIGZldyBkYXRhIGNoYW5nZXMKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuMy4zOgorCS0gQ3JlYXRlIGEgbmV3IEZldGNoZXIgbW9kdWxlIHRvIGVhc2UgdGhlCisJICBkZXZlbG9wbWVudCBvZiBuZXcgRmV0Y2hlcnMuCisJICBJc3N1ZSAjNDM4IGZpeGVkIGJ5IHJwdXJkaWVAb3BlbmVkaGFuZC5jb20KKwktIE1ha2UgdGhlIFN1YnZlcnNpb24gZmV0Y2hlciBob25vciB0aGUgU1JDIERhdGUKKwkgIChDVlNEQVRFKS4KKwkgIElzc3VlICM1NTUgZml4ZWQgYnkgY2hyaXNAb3BlbmVkaGFuZC5jb20KKwktIEV4cGFuZCBQUkVGRVJSRURfUFJPVklERVIgcHJvcGVybHkKKwkgIElzc3VlICM0MzYgZml4ZWQgYnkgcnBydWRpZUBvcGVuZWRoYW5kLmNvbQorCS0gVHlwbyBmaXggZm9yIElzc3VlICM1MzEgYnkgUGhpbGlwcCBaYWJlbCBmb3IgdGhlCisJICBCaXRCYWtlIFNoZWxsCisJLSBJbnRyb2R1Y2UgYSBuZXcgc3BlY2lhbCB2YXJpYWJsZSBTUkNEQVRFIGFzCisJICBhIGdlbmVyaWMgbmFtaW5nIHRvIHJlcGxhY2UgQ1ZTREFURS4KKwktIEludHJvZHVjZSBhIG5ldyBrZXl3b3JkICdyZXF1aXJlZCcuIEluIGNvbnRyYXN0CisJICB0byAnaW5jbHVkZScgcGFyc2luZyB3aWxsIGZhaWwgaWYgYSB0byBiZSBpbmNsdWRlZAorCSAgZmlsZSBjYW4gbm90IGJlIGZvdW5kLgorCS0gUmVtb3ZlIGhhcmRjb2Rpbmcgb2YgdGhlIFNUQU1QIGRpcmVjdG9yeS4gUGF0Y2gKKwkgIGNvdXJ0c2V5IHBIaWxpcHAgWmFiZWwKKwktIFRyYWNrIHRoZSBSREVQRU5EUyBvZiBlYWNoIHBhY2thZ2UgKHJwdXJkaWVAb3BlbmVkaGFuZC5jb20pCisJLSBJbnRyb2R1Y2UgQlVJTERfQUxMX0RFUFMgdG8gYnVpbGQgYWxsIFJERVBFTkRTLiBFLmcKKwkgIHRoaXMgaXMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIE1ldGEgUGFja2FnZXMuCisJICAocnB1cmRpZUBvcGVuZWRoYW5kLmNvbSkuCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjMuMjoKKwktIHJlaW50ZWdyYXRpb24gb2YgbWFrZS5weSBpbnRvIEJpdEJha2UKKwktIGJicmVhZCBpcyBnb25lLCB1c2UgYml0YmFrZSAtZQorCS0gbG90cyBvZiBzaGVsbCB1cGRhdGVzIGFuZCBidWdmaXhlcworCS0gSW50cm9kdWN0aW9uIG9mIHRoZSAuPSBhbmQgPS4gb3BlcmF0b3IKKwktIFNvcnQgdmFyaWFibGVzLCBrZXlzIGFuZCBncm91cHMgaW4gYml0ZG9jCisJLSBGaXggcmVncmVzc2lvbiBpbiB0aGUgaGFuZGxpbmcgb2YgQkJDT0xMRUNUSU9OUworCS0gVXBkYXRlIHRoZSBiaXRiYWtlIHVzZXJtYW51YWwKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuMy4wOgorCS0gYWRkIGJpdGJha2UgaW50ZXJhY3RpdmUgc2hlbGwgKGJpdGJha2UgLWkpCisJLSByZWZhY3RvciBiaXRiYWtlIHV0aWxpdHkgaW4gT08gc3R5bGUKKwktIGtpbGwgZGVmYXVsdCBhcmd1bWVudHMgaW4gbWV0aG9kcyBpbiB0aGUgYmIuZGF0YSBtb2R1bGUKKwktIGtpbGwgZGVmYXVsdCBhcmd1bWVudHMgaW4gbWV0aG9kcyBpbiB0aGUgYmIuZmV0Y2ggbW9kdWxlCisJLSB0aGUgaHR0cC9odHRwcy9mdHAgZmV0Y2hlciB3aWxsIGZhaWwgaWYgdGhlIHRvIGJlIAorCSAgZG93bmxvYWRlZCBmaWxlIHdhcyBub3QgZm91bmQgaW4gRExfRElSICh0aGlzIGlzIG5lZWRlZAorCSAgdG8gYXZvaWQgdW5wYWNraW5nIHRoZSBzb3VyY2Vmb3JnZSBtaXJyb3IgcGFnZSkKKwktIFN3aXRjaCB0byBhIGNvdyBsaWtlIGRhdGEgaW5zdGFuY2UgZm9yIHBlcnNpc3RlbnQgYW5kIG5vbgorCSAgcGVyc2lzdGluZyBtb2RlIChjYWxsZWQgZGF0YV9zbWFydC5weSkKKwktIENoYW5nZWQgdGhlIGNhbGxiYWNrIG9mIGJiLm1ha2UuY29sbGVjdF9iYmZpbGVzIHRvIGNhcnJ5CisJICBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKKwktIERyYXN0aWNhbGx5IHJlZHVjZWQgdGhlIGFtb3VudCBvZiBuZWVkZWQgUkFNIGJ5IG5vdCBob2xkaW5nCisJICBlYWNoIGRhdGEgaW5zdGFuY2UgaW4gbWVtb3J5IHdoZW4gdXNpbmcgYSBjYWNoZS9wZXJzaXN0ZW50CisJICBzdG9yYWdlCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjIuMToKKwlUaGUgMS4yLjEgcmVsZWFzZSBpcyBtZWFudCBhcyBhIGludGVybWVkaWF0ZSByZWxlYXNlIHRvIGxheSB0aGUKKwlncm91bmQgZm9yIG1vcmUgcmFkaWNhbCBjaGFuZ2VzLiBUaGUgbW9zdCBub3RhYmxlIGNoYW5nZXMgYXJlOgorCisJLSBEbyBub3QgaGFyZGNvZGUge30sIHVzZSBiYi5kYXRhLmluaXQoKSBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvCisJICBnZXQgYSBpbnN0YW5jZSBvZiBhIGRhdGEgY2xhc3MKKwktIGJiLmRhdGEuaW5pdCgpIGlzIGEgZmFjdG9yeSBhbmQgdGhlIG9sZCBiYi5kYXRhIG1ldGhvZHMgYXJlIGRlbGVnYXRlcworCS0gRG8gbm90IHVzZSBkZWVwY29weSB1c2UgYmIuZGF0YS5jcmVhdGVDb3B5KCkgaW5zdGVhZC4KKwktIFJlbW92ZWQgZGVmYXVsdCBhcmd1bWVudHMgaW4gYmIuZmV0Y2gKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL0hFQURFUiBiL3lvY3RvLXBva3kvYml0YmFrZS9IRUFERVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1OTI1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9IRUFERVIKQEAgLTAsMCArMSwxOSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyMgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9MSUNFTlNFIGIveW9jdG8tcG9reS9iaXRiYWtlL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwMTQwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9MSUNFTlNFCkBAIC0wLDAgKzEsMTAgQEAKK0JpdEJha2UgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4wLiBTZWUgQ09QWUlORyBmb3IgZnVydGhlciBkZXRhaWxzLgorCitUaGUgZm9sbG93aW5nIGV4dGVybmFsIGNvbXBvbmVudHMgYXJlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb2Z0d2FyZToKKworKiBUaGUgVG9hc3RlciBTaW1wbGUgVUkgYXBwbGljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgRGphbmdvIHByb2plY3QgdGVtcGxhdGUsIHRoZSBmaWxlcyBvZiB3aGljaCBhcmUgY292ZXJlZCBieSB0aGUgQlNEIGxpY2Vuc2UgYW5kIGFyZSBjb3B5cmlnaHQgKGMpIERqYW5nbyBTb2Z0d2FyZQorRm91bmRhdGlvbiBhbmQgaW5kaXZpZHVhbCBjb250cmlidXRvcnMuCisKKyogVHdpdHRlciBCb290c3RyYXAgKGluY2x1ZGluZyBHbHlwaGljb25zKSwgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgMi4wLgorCisqIGpRdWVyeSBpcyByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZSBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lM2QxMzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlCkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYicpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2Zyb20gYmIgaW1wb3J0IGNvb2tlcmRhdGEKK2Zyb20gYmIubWFpbiBpbXBvcnQgYml0YmFrZV9tYWluLCBCaXRCYWtlQ29uZmlnUGFyYW1ldGVycywgQkJNYWluRXhjZXB0aW9uCisKK19fdmVyc2lvbl9fID0gIjEuMjcuMSIKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpZiBfX3ZlcnNpb25fXyAhPSBiYi5fX3ZlcnNpb25fXzoKKyAgICAgICAgc3lzLmV4aXQoIkJpdGJha2UgY29yZSB2ZXJzaW9uIGFuZCBwcm9ncmFtIHZlcnNpb24gbWlzbWF0Y2ghIikKKyAgICB0cnk6CisgICAgICAgIHN5cy5leGl0KGJpdGJha2VfbWFpbihCaXRCYWtlQ29uZmlnUGFyYW1ldGVycyhzeXMuYXJndiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZXJkYXRhLkNvb2tlckNvbmZpZ3VyYXRpb24oKSkpCisgICAgZXhjZXB0IEJCTWFpbkV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgIHN5cy5leGl0KGVycikKKyAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uOgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZGlmZnNpZ3MgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZGlmZnNpZ3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTk2ZjBiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1kaWZmc2lncwpAQCAtMCwwICsxLDEzOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgYml0YmFrZS1kaWZmc2lncworIyBCaXRCYWtlIHRhc2sgc2lnbmF0dXJlIGRhdGEgY29tcGFyaXNvbiB1dGlsaXR5CisjCisjIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKKworaW1wb3J0IGJiLnRpbmZvaWwKK2ltcG9ydCBiYi5zaWdnZW4KKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgb3V0cHV0PXN5cy5zdGRlcnIpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgnYml0YmFrZS1kaWZmc2lncycpCisKK2RlZiBmaW5kX2NvbXBhcmVfdGFzayhiYmhhbmRsZXIsIHBuLCB0YXNrbmFtZSk6CisgICAgIiIiIEZpbmQgdGhlIG1vc3QgcmVjZW50IHNpZ25hdHVyZSBmaWxlcyBmb3IgdGhlIHNwZWNpZmllZCBQTi90YXNrIGFuZCBjb21wYXJlIHRoZW0gIiIiCisKKyAgICBkZWYgZ2V0X2hhc2h2YWwoc2lnaW5mbyk6CisgICAgICAgIGlmIHNpZ2luZm8uZW5kc3dpdGgoJy5zaWdpbmZvJyk6CisgICAgICAgICAgICByZXR1cm4gc2lnaW5mby5ycGFydGl0aW9uKCc6JylbMl0ucGFydGl0aW9uKCdfJylbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzaWdpbmZvLnJwYXJ0aXRpb24oJy4nKVsyXQorCisgICAgaWYgbm90IGhhc2F0dHIoYmIuc2lnZ2VuLCAnZmluZF9zaWdpbmZvJyk6CisgICAgICAgIGxvZ2dlci5lcnJvcignTWV0YWRhdGEgZG9lcyBub3Qgc3VwcG9ydCBmaW5kaW5nIHNpZ25hdHVyZSBkYXRhIGZpbGVzJykKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCB0YXNrbmFtZS5zdGFydHN3aXRoKCdkb18nKToKKyAgICAgICAgdGFza25hbWUgPSAnZG9fJXMnICUgdGFza25hbWUKKworICAgIGZpbGVkYXRlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8ocG4sIHRhc2tuYW1lLCBOb25lLCBiYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgbGF0ZXN0ZmlsZXMgPSBzb3J0ZWQoZmlsZWRhdGVzLmtleXMoKSwga2V5PWxhbWJkYSBmOiBmaWxlZGF0ZXNbZl0pWy0zOl0KKyAgICBpZiBub3QgbGF0ZXN0ZmlsZXM6CisgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc2lnZGF0YSBmaWxlcyBmb3VuZCBtYXRjaGluZyAlcyAlcycgJSAocG4sIHRhc2tuYW1lKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBlbGlmIGxlbihsYXRlc3RmaWxlcykgPCAyOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ09ubHkgb25lIG1hdGNoaW5nIHNpZ2RhdGEgZmlsZSBmb3VuZCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrICglcyAlcyknICUgKHBuLCB0YXNrbmFtZSkpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgZWxzZToKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgbGF0ZXN0ZmlsZXMgY29udGFpbiAzIGVsZW1lbnRzIGFuZCB0aGUgZmlyc3QgdHdvIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZS4KKyAgICAgICAgIyBJbiB0aGlzIGNhc2UsIHdlIGRlbGV0ZSB0aGUgc2Vjb25kIGVsZW1lbnQuCisgICAgICAgICMgVGhlIGFib3ZlIGNhc2UgaXMgYWN0dWFsbHkgdGhlIG1vc3QgY29tbW9uIG9uZS4gQmVjYXVzZSB3ZSBtYXkgaGF2ZSBzaWdkYXRhIGZpbGUgYW5kIHNpZ2luZm8KKyAgICAgICAgIyBmaWxlIGhhdmluZyB0aGUgc2FtZSBoYXNoIHZhbHVlLiBDb21wYXJpbmcgc3VjaCB0d28gZmlsZXMgbWFrZXMgbm8gc2Vuc2UuCisgICAgICAgIGlmIGxlbihsYXRlc3RmaWxlcykgPT0gMzoKKyAgICAgICAgICAgIGhhc2gwID0gZ2V0X2hhc2h2YWwobGF0ZXN0ZmlsZXNbMF0pCisgICAgICAgICAgICBoYXNoMSA9IGdldF9oYXNodmFsKGxhdGVzdGZpbGVzWzFdKQorICAgICAgICAgICAgaWYgaGFzaDAgPT0gaGFzaDE6CisgICAgICAgICAgICAgICAgbGF0ZXN0ZmlsZXMucG9wKDEpCisKKyAgICAgICAgIyBEZWZpbmUgcmVjdXJzaW9uIGNhbGxiYWNrCisgICAgICAgIGRlZiByZWN1cnNlY2Ioa2V5LCBoYXNoMSwgaGFzaDIpOgorICAgICAgICAgICAgaGFzaGVzID0gW2hhc2gxLCBoYXNoMl0KKyAgICAgICAgICAgIGhhc2hmaWxlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8oa2V5LCBOb25lLCBoYXNoZXMsIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKworICAgICAgICAgICAgcmVjb3V0ID0gW10KKyAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IDI6CisgICAgICAgICAgICAgICAgb3V0MiA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGhhc2hmaWxlc1toYXNoMV0sIGhhc2hmaWxlc1toYXNoMl0sIHJlY3Vyc2VjYikKKyAgICAgICAgICAgICAgICByZWNvdXQuZXh0ZW5kKGxpc3QoJyAgJyArIGwgZm9yIGwgaW4gb3V0MikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY291dC5hcHBlbmQoIlVuYWJsZSB0byBmaW5kIG1hdGNoaW5nIHNpZ2RhdGEgZm9yICVzIHdpdGggaGFzaGVzICVzIG9yICVzIiAlIChrZXksIGhhc2gxLCBoYXNoMikpCisKKyAgICAgICAgICAgIHJldHVybiByZWNvdXQKKworICAgICAgICAjIFJlY3Vyc2UgaW50byBzaWduYXR1cmUgY29tcGFyaXNvbgorICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhsYXRlc3RmaWxlc1swXSwgbGF0ZXN0ZmlsZXNbMV0sIHJlY3Vyc2VjYikKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgcHJpbnQgJ1xuJy5qb2luKG91dHB1dCkKKyAgICBzeXMuZXhpdCgwKQorCisKKworcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgIGRlc2NyaXB0aW9uID0gIkNvbXBhcmVzIHNpZ2luZm8vc2lnZGF0YSBmaWxlcyB3cml0dGVuIG91dCBieSBCaXRCYWtlIiwKKyAgICB1c2FnZSA9ICIiIgorICAlcHJvZyAtdCByZWNpcGVuYW1lIHRhc2tuYW1lCisgICVwcm9nIHNpZ2RhdGFmaWxlMSBzaWdkYXRhZmlsZTIKKyAgJXByb2cgc2lnZGF0YWZpbGUxIiIiKQorCitwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10YXNrIiwKKyAgICAgICAgaGVscCA9ICJmaW5kIHRoZSBzaWduYXR1cmUgZGF0YSBmaWxlcyBmb3IgbGFzdCB0d28gcnVucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIGNvbXBhcmUgdGhlbSIsCisgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJ0YXNrYXJncyIsIG5hcmdzPTIsIG1ldGF2YXI9J3JlY2lwZW5hbWUgdGFza25hbWUnKQorCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKK2lmIG9wdGlvbnMudGFza2FyZ3M6CisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKKyAgICBmaW5kX2NvbXBhcmVfdGFzayh0aW5mb2lsLCBvcHRpb25zLnRhc2thcmdzWzBdLCBvcHRpb25zLnRhc2thcmdzWzFdKQorZWxzZToKKyAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsc2U6CisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5kdW1wX3NpZ2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZSkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBleGNlcHQgY1BpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBkYXRhIC0gZW5zdXJlIHlvdSBhcmUgc3BlY2lmeWluZyBzaWdkYXRhL3NpZ2luZm8gZmlsZXMnKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICBwcmludCAnXG4nLmpvaW4ob3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWR1bXBzaWcgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtZHVtcHNpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTZkOTNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWR1bXBzaWcKQEAgLTAsMCArMSw2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgYml0YmFrZS1kdW1wc2lnCisjIEJpdEJha2UgdGFzayBzaWduYXR1cmUgZHVtcCB1dGlsaXR5CisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKKworaW1wb3J0IGJiLnNpZ2dlbgorCitkZWYgbG9nZ2VyX2NyZWF0ZShuYW1lLCBvdXRwdXQ9c3lzLnN0ZGVycik6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKG91dHB1dCkKKyAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKKyAgICBpZiBvdXRwdXQuaXNhdHR5KCk6CisgICAgICAgIGZvcm1hdC5lbmFibGVfY29sb3IoKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCdiaXRiYWtlLWR1bXBzaWcnKQorCitwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgZGVzY3JpcHRpb24gPSAiRHVtcHMgc2lnaW5mby9zaWdkYXRhIGZpbGVzIHdyaXR0ZW4gb3V0IGJ5IEJpdEJha2UiLAorICAgIHVzYWdlID0gIiIiCisgICVwcm9nIHNpZ2RhdGFmaWxlIiIiKQorCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKK2lmIGxlbihhcmdzKSA9PSAxOgorICAgIHBhcnNlci5wcmludF9oZWxwKCkKK2Vsc2U6CisgICAgaW1wb3J0IGNQaWNrbGUKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5kdW1wX3NpZ2ZpbGUoYXJnc1sxXSkKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGV4Y2VwdCBjUGlja2xlLlVucGlja2xpbmdFcnJvciwgRU9GRXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzaWduYXR1cmUgZGF0YSAtIGVuc3VyZSB5b3UgYXJlIHNwZWNpZnlpbmcgYSBzaWdkYXRhL3NpZ2luZm8gZmlsZScpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBvdXRwdXQ6CisgICAgICAgIHByaW50ICdcbicuam9pbihvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGJha2UtbGF5ZXJzIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYjEzMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycwpAQCAtMCwwICsxLDEwNzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgc2NyaXB0IGhhcyBzdWJjb21tYW5kcyB3aGljaCBvcGVyYXRlIGFnYWluc3QgeW91ciBiaXRiYWtlIGxheWVycywgZWl0aGVyCisjIGRpc3BsYXlpbmcgdXNlZnVsIGluZm9ybWF0aW9uLCBvciBhY3RpbmcgYWdhaW5zdCB0aGVtLgorIyBTZWUgdGhlIGhlbHAgb3V0cHV0IGZvciBkZXRhaWxzIG9uIGF2YWlsYWJsZSBjb21tYW5kcy4KKworIyBDb3B5cmlnaHQgKEMpIDIwMTEgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZm5tYXRjaAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHJlCitpbXBvcnQgaHR0cGxpYiwgdXJscGFyc2UsIGpzb24KK2ltcG9ydCBzdWJwcm9jZXNzCisKK2JpbmRpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKK3RvcGRpciA9IG9zLnBhdGguZGlybmFtZShiaW5kaXIpCitzeXMucGF0aFswOjBdID0gW29zLnBhdGguam9pbih0b3BkaXIsICdsaWInKV0KKworaW1wb3J0IGJiLmNhY2hlCitpbXBvcnQgYmIuY29va2VyCitpbXBvcnQgYmIucHJvdmlkZXJzCitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBiYi50aW5mb2lsCisKKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgb3V0cHV0PXN5cy5zdGRlcnIpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgnYml0YmFrZS1sYXllcnMnLCBzeXMuc3Rkb3V0KQorCitjbGFzcyBVc2VyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIENvbW1hbmRzKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmJiaGFuZGxlciA9IE5vbmUKKyAgICAgICAgc2VsZi5iYmxheWVycyA9IFtdCisKKyAgICBkZWYgaW5pdF9iYmhhbmRsZXIoc2VsZiwgY29uZmlnX29ubHkgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmJiaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyID0gYmIudGluZm9pbC5UaW5mb2lsKHRyYWNraW5nPVRydWUpCisgICAgICAgICAgICBzZWxmLmJibGF5ZXJzID0gKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIucHJlcGFyZShjb25maWdfb25seSkKKyAgICAgICAgICAgIGxheWVyY29uZnMgPSBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS52YXJoaXN0b3J5LmdldF92YXJpYWJsZV9pdGVtc19maWxlcygnQkJGSUxFX0NPTExFQ1RJT05TJywgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgICAgICAgICBzZWxmLmJiZmlsZV9jb2xsZWN0aW9ucyA9IHtsYXllcjogb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShwYXRoKSkgZm9yIGxheWVyLCBwYXRoIGluIGxheWVyY29uZnMuaXRlcml0ZW1zKCl9CisKKworICAgIGRlZiBkb19zaG93X2xheWVycyhzZWxmLCBhcmdzKToKKyAgICAgICAgIiIic2hvdyBjdXJyZW50IGNvbmZpZ3VyZWQgbGF5ZXJzIiIiCisgICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoY29uZmlnX29ubHkgPSBUcnVlKQorICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJXMiICUgKCJsYXllciIubGp1c3QoMjApLCAicGF0aCIubGp1c3QoNDApLCAicHJpb3JpdHkiKSkKKyAgICAgICAgbG9nZ2VyLnBsYWluKCc9JyAqIDc0KQorICAgICAgICBmb3IgbGF5ZXIsIF8sIHJlZ2V4LCBwcmkgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGxheWVyZGlyID0gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgICVzICAlZCIgJSAobGF5ZXJuYW1lLmxqdXN0KDIwKSwgbGF5ZXJkaXIubGp1c3QoNDApLCBwcmkpKQorCisKKyAgICBkZWYgZG9fYWRkX2xheWVyKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBsYXllciB0byBiYmxheWVycy5jb25mCisKK0FkZHMgdGhlIHNwZWNpZmllZCBsYXllciB0byBiYmxheWVycy5jb25mCisiIiIKKyAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxheWVyZGlyKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciBkaXJlY3RvcnkgZG9lc24ndCBleGlzdFxuIikKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgbGF5ZXJfY29uZiA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsYXllcl9jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciBkaXJlY3RvcnkgZG9lc24ndCBjb250YWluIGEgY29uZi9sYXllci5jb25mIGZpbGVcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oJ2NvbmYnLCAnYmJsYXllcnMuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJibGF5ZXJzLmNvbmZcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIChub3RhZGRlZCwgXykgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgbGF5ZXJkaXIsIE5vbmUpCisgICAgICAgIGlmIG5vdGFkZGVkOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbm90YWRkZWQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU3BlY2lmaWVkIGxheWVyICVzIGlzIGFscmVhZHkgaW4gQkJMQVlFUlNcbiIgJSBpdGVtKQorCisKKyAgICBkZWYgZG9fcmVtb3ZlX2xheWVyKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJSZW1vdmUgYSBsYXllciBmcm9tIGJibGF5ZXJzLmNvbmYKKworUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGxheWVyIGZyb20gYmJsYXllcnMuY29uZgorIiIiCisgICAgICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oJ2NvbmYnLCAnYmJsYXllcnMuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJibGF5ZXJzLmNvbmZcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlmIGFyZ3MubGF5ZXJkaXIuc3RhcnRzd2l0aCgnKicpOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBhcmdzLmxheWVyZGlyCisgICAgICAgIGVsaWYgbm90ICcvJyBpbiBhcmdzLmxheWVyZGlyOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSAnKi8lcycgJSBhcmdzLmxheWVyZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYXllcmRpciA9IG9zLnBhdGguYWJzcGF0aChhcmdzLmxheWVyZGlyKQorICAgICAgICAoXywgbm90cmVtb3ZlZCkgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgTm9uZSwgbGF5ZXJkaXIpCisgICAgICAgIGlmIG5vdHJlbW92ZWQ6CisgICAgICAgICAgICBmb3IgaXRlbSBpbiBub3RyZW1vdmVkOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIk5vIGxheWVycyBtYXRjaGluZyAlcyBmb3VuZCBpbiBCQkxBWUVSU1xuIiAlIGl0ZW0pCisgICAgICAgICAgICByZXR1cm4gMQorCisKKyAgICBkZWYgZ2V0X2pzb25fZGF0YShzZWxmLCBhcGl1cmwpOgorICAgICAgICBwcm94eV9zZXR0aW5ncyA9IG9zLmVudmlyb24uZ2V0KCJodHRwX3Byb3h5IiwgTm9uZSkKKyAgICAgICAgY29ubiA9IE5vbmUKKyAgICAgICAgX3BhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKGFwaXVybCkKKyAgICAgICAgcGF0aCA9IF9wYXJzZWR1cmwucGF0aAorICAgICAgICBxdWVyeSA9IF9wYXJzZWR1cmwucXVlcnkKKyAgICAgICAgZGVmIHBhcnNlX3VybCh1cmwpOgorICAgICAgICAgICAgcGFyc2VkdXJsID0gdXJscGFyc2UudXJscGFyc2UodXJsKQorICAgICAgICAgICAgaWYgcGFyc2VkdXJsLm5ldGxvY1swXSA9PSAnWyc6CisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHBhcnNlZHVybC5uZXRsb2NbMTpdLnNwbGl0KCddJywgMSkKKyAgICAgICAgICAgICAgICBpZiAnOicgaW4gcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHBvcnQucnNwbGl0KCc6JywgMSlbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXJzZWR1cmwubmV0bG9jLmNvdW50KCc6JykgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgKGhvc3QsIHBvcnQpID0gcGFyc2VkdXJsLm5ldGxvYy5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHBhcnNlZHVybC5uZXRsb2MKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiAoaG9zdCwgODAgaWYgcG9ydCBpcyBOb25lIGVsc2UgaW50KHBvcnQpKQorCisgICAgICAgIGlmIHByb3h5X3NldHRpbmdzIGlzIE5vbmU6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gcGFyc2VfdXJsKGFwaXVybCkKKyAgICAgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QoIkdFVCIsIHBhdGggKyAiPyIgKyBxdWVyeSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBwYXJzZV91cmwocHJveHlfc2V0dGluZ3MpCisgICAgICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0KQorICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCJHRVQiLCBhcGl1cmwpCisKKyAgICAgICAgciA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBpZiByLnN0YXR1cyAhPSAyMDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byByZWFkICIgKyBwYXRoICsgIjogJWQgJXMiICUgKHIuc3RhdHVzLCByLnJlYXNvbikpCisgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHIucmVhZCgpKQorCisKKyAgICBkZWYgZ2V0X2xheWVyX2RlcHMoc2VsZiwgbGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtLCBzZWxmbmFtZT1GYWxzZSk6CisgICAgICAgIGRlZiBsYXllcml0ZW1zX2luZm9faWQoaXRlbXNfbmFtZSwgbGF5ZXJpdGVtcyk6CisgICAgICAgICAgICBsaXRlbXNfaWQgPSBOb25lCisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnbmFtZSddID09IGl0ZW1zX25hbWU6CisgICAgICAgICAgICAgICAgICAgIGxpdGVtc19pZCA9IGxpWydpZCddCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXR1cm4gbGl0ZW1zX2lkCisKKyAgICAgICAgZGVmIGxheWVyYnJhbmNoZXNfaW5mbyhpdGVtc19pZCwgbGF5ZXJicmFuY2hlcyk6CisgICAgICAgICAgICBsYnJhbmNoID0ge30KKyAgICAgICAgICAgIGZvciBsYiBpbiBsYXllcmJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGlmIGxiWydsYXllciddID09IGl0ZW1zX2lkIGFuZCBsYlsnYnJhbmNoJ10gPT0gYnJhbmNobnVtOgorICAgICAgICAgICAgICAgICAgICBsYnJhbmNoWydpZCddID0gbGJbJ2lkJ10KKyAgICAgICAgICAgICAgICAgICAgbGJyYW5jaFsndmNzX3N1YmRpciddID0gbGJbJ3Zjc19zdWJkaXInXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxicmFuY2gKKworICAgICAgICBkZWYgbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbyhsYl9pZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbGRfZGVwcyA9IFtdCisgICAgICAgICAgICBmb3IgbGQgaW4gbGF5ZXJkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgaWYgbGRbJ2xheWVyYnJhbmNoJ10gPT0gbGJfaWQgYW5kIG5vdCBsZFsnZGVwZW5kZW5jeSddIGluIGxkX2RlcHM6CisgICAgICAgICAgICAgICAgICAgIGxkX2RlcHMuYXBwZW5kKGxkWydkZXBlbmRlbmN5J10pCisgICAgICAgICAgICBpZiBub3QgbGRfZGVwczoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSBkZXBlbmRlbmN5IG9mIGxheWVyRGVwZW5kZW5jaWVzIGlzIG5vdCBmb3VuZC4iKQorICAgICAgICAgICAgcmV0dXJuIGxkX2RlcHMKKworICAgICAgICBkZWYgbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKGl0ZW1zX2lkLCBsYXllcml0ZW1zKToKKyAgICAgICAgICAgIGxpdGVtcyA9IHt9CisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnaWQnXSA9PSBpdGVtc19pZDoKKyAgICAgICAgICAgICAgICAgICAgbGl0ZW1zWyd2Y3NfdXJsJ10gPSBsaVsndmNzX3VybCddCisgICAgICAgICAgICAgICAgICAgIGxpdGVtc1snbmFtZSddID0gbGlbJ25hbWUnXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxpdGVtcworCisgICAgICAgIGlmIHNlbGZuYW1lOgorICAgICAgICAgICAgc2VsZmlkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgICAgIGxiaW5mbyA9IGxheWVyYnJhbmNoZXNfaW5mbyhzZWxmaWQsIGxheWVyYnJhbmNoZXMpCisgICAgICAgICAgICBpZiBsYmluZm86CisgICAgICAgICAgICAgICAgc2VsZnN1YmRpciA9IGxiaW5mb1sndmNzX3N1YmRpciddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGZ1cmwgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoc2VsZmlkLCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBpZiBzZWxmdXJsOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmdXJsLCBzZWxmc3ViZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBsYXllciAlcyBnaXQgcmVwbyBhbmQgc3ViZGlyIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGRpY3QgPSB7fQorICAgICAgICBpdGVtc2lkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgaWYgbm90IGl0ZW1zaWQ6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBOb25lCisgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcykKKyAgICAgICAgaWYgbGJpZDoKKyAgICAgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcylbJ2lkJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgIGZvciBkZXBlbmRlbmN5IGluIGxheWVyZGVwZW5kZW5jaWVzX2luZm8obGJpZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbG5hbWUgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoZGVwZW5kZW5jeSwgbGF5ZXJpdGVtcylbJ25hbWUnXQorICAgICAgICAgICAgbHVybCA9IGxheWVyaXRlbXNfaW5mb19uYW1lX3N1YmRpcihkZXBlbmRlbmN5LCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBsc3ViZGlyID0gbGF5ZXJicmFuY2hlc19pbmZvKGRlcGVuZGVuY3ksIGxheWVyYnJhbmNoZXMpWyd2Y3Nfc3ViZGlyJ10KKyAgICAgICAgICAgIGxkaWN0W2xuYW1lXSA9IGx1cmwsIGxzdWJkaXIKKyAgICAgICAgcmV0dXJuIE5vbmUsIGxkaWN0CisKKworICAgIGRlZiBnZXRfZmV0Y2hfbGF5ZXIoc2VsZiwgZmV0Y2hkaXIsIHVybCwgc3ViZGlyLCBmZXRjaF9sYXllcik6CisgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUodXJsKQorICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KGxheWVybmFtZSlbMV0gPT0gJy5naXQnOgorICAgICAgICAgICAgbGF5ZXJuYW1lID0gb3MucGF0aC5zcGxpdGV4dChsYXllcm5hbWUpWzBdCisgICAgICAgIHJlcG9kaXIgPSBvcy5wYXRoLmpvaW4oZmV0Y2hkaXIsIGxheWVybmFtZSkKKyAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4ocmVwb2Rpciwgc3ViZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVwb2Rpcik6CisgICAgICAgICAgICBpZiBmZXRjaF9sYXllcjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoJ2dpdCBjbG9uZSAlcyAlcycgJSAodXJsLCByZXBvZGlyKSwgc2hlbGwgPSBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gZG93bmxvYWQgJXMiICUgdXJsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcm5hbWUsIGxheWVyZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiUmVwb3NpdG9yeSAlcyBuZWVkcyB0byBiZSBmZXRjaGVkIiAlIHVybCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGxheWVyZGlyKToKKyAgICAgICAgICAgIHJldHVybiBsYXllcm5hbWUsIGxheWVyZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGlzIG5vdCBpbiAlcyIgJSAodXJsLCBzdWJkaXIpKQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisKKyAgICBkZWYgZG9fbGF5ZXJpbmRleF9mZXRjaChzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiRmV0Y2hlcyBhIGxheWVyIGZyb20gYSBsYXllciBpbmRleCBhbG9uZyB3aXRoIGl0cyBkZXBlbmRlbnQgbGF5ZXJzLCBhbmQgYWRkcyB0aGVtIHRvIGNvbmYvYmJsYXllcnMuY29uZi4KKyIiIgorICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKKyAgICAgICAgYXBpdXJsID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19MQVlFUklOREVYX1VSTCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBhcGl1cmw6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgQkJMQVlFUlNfTEFZRVJJTkRFWF9VUkwiKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGFwaXVybFstMV0gIT0gJy8nOgorICAgICAgICAgICAgICAgIGFwaXVybCArPSAnLycKKyAgICAgICAgICAgIGFwaXVybCArPSAiYXBpLyIKKyAgICAgICAgYXBpbGlua3MgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpdXJsKQorICAgICAgICBicmFuY2hlcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snYnJhbmNoZXMnXSkKKworICAgICAgICBicmFuY2hudW0gPSAwCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXM6CisgICAgICAgICAgICBpZiBicmFuY2hbJ25hbWUnXSA9PSBhcmdzLmJyYW5jaDoKKyAgICAgICAgICAgICAgICBicmFuY2hudW0gPSBicmFuY2hbJ2lkJ10KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBicmFuY2hudW0gPT0gMDoKKyAgICAgICAgICAgIHZhbGlkYnJhbmNoZXMgPSAnLCAnLmpvaW4oW2JyYW5jaFsnbmFtZSddIGZvciBicmFuY2ggaW4gYnJhbmNoZXNdKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIGxheWVyIGJyYW5jaCBuYW1lICIlcyIuIFZhbGlkIGJyYW5jaGVzOiAlcycgJSAoYXJncy5icmFuY2gsIHZhbGlkYnJhbmNoZXMpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZ25vcmVfbGF5ZXJzID0gW10KKyAgICAgICAgZm9yIGNvbGxlY3Rpb24gaW4gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgbG5hbWUgPSBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCTEFZRVJTX0xBWUVSSU5ERVhfTkFNRV8lcycgJSBjb2xsZWN0aW9uLCBUcnVlKQorICAgICAgICAgICAgaWYgbG5hbWU6CisgICAgICAgICAgICAgICAgaWdub3JlX2xheWVycy5hcHBlbmQobG5hbWUpCisKKyAgICAgICAgaWYgYXJncy5pZ25vcmU6CisgICAgICAgICAgICBpZ25vcmVfbGF5ZXJzLmV4dGVuZChhcmdzLmlnbm9yZS5zcGxpdCgnLCcpKQorCisgICAgICAgIGxheWVyaXRlbXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVySXRlbXMnXSkKKyAgICAgICAgbGF5ZXJicmFuY2hlcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snbGF5ZXJCcmFuY2hlcyddKQorICAgICAgICBsYXllcmRlcGVuZGVuY2llcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snbGF5ZXJEZXBlbmRlbmNpZXMnXSkKKyAgICAgICAgaW52YWx1ZW5hbWVzID0gW10KKyAgICAgICAgcmVwb3VybHMgPSB7fQorICAgICAgICBwcmludGxheWVycyA9IFtdCisgICAgICAgIGRlZiBxdWVyeV9kZXBlbmRlbmNpZXMobGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKToKKyAgICAgICAgICAgIGRlcHNsYXllciA9IFtdCisgICAgICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBpbnZhbHVlbmFtZSwgbGF5ZXJkaWN0ID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0pCisgICAgICAgICAgICAgICAgaWYgbGF5ZXJkaWN0OgorICAgICAgICAgICAgICAgICAgICByZXBvdXJsc1tsYXllcm5hbWVdID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0sIHNlbGZuYW1lPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcmRpY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGF5ZXIgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzbGF5ZXIuYXBwZW5kKGxheWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRsYXllcnMuYXBwZW5kKChsYXllcm5hbWUsIGxheWVyLCBsYXllcmRpY3RbbGF5ZXJdWzBdLCBsYXllcmRpY3RbbGF5ZXJdWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsYXllciBpbiBpZ25vcmVfbGF5ZXJzIGFuZCBub3QgbGF5ZXIgaW4gcmVwb3VybHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3VybHNbbGF5ZXJdID0gKGxheWVyZGljdFtsYXllcl1bMF0sIGxheWVyZGljdFtsYXllcl1bMV0pCisgICAgICAgICAgICAgICAgaWYgaW52YWx1ZW5hbWUgYW5kIG5vdCBpbnZhbHVlbmFtZSBpbiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGludmFsdWVuYW1lcy5hcHBlbmQoaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gZGVwc2xheWVyCisKKyAgICAgICAgZGVwc2xheWVycyA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhhcmdzLmxheWVybmFtZSwgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSkKKyAgICAgICAgd2hpbGUgZGVwc2xheWVyczoKKyAgICAgICAgICAgIGRlcHNsYXllciA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhkZXBzbGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKQorICAgICAgICAgICAgZGVwc2xheWVycyA9IGRlcHNsYXllcgorICAgICAgICBpZiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICBmb3IgaW52YWx1ZW5hbWUgaW4gaW52YWx1ZW5hbWVzOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTGF5ZXIgIiVzIiBub3QgZm91bmQgaW4gbGF5ZXIgaW5kZXgnICUgaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJXMgICVzIiAlICgiTGF5ZXIiLmxqdXN0KDE5KSwgIlJlcXVpcmVkIGJ5Ii5sanVzdCgxOSksICJHaXQgcmVwb3NpdG9yeSIubGp1c3QoNTQpLCAiU3ViZGlyZWN0b3J5IikpCisgICAgICAgIGxvZ2dlci5wbGFpbignPScgKiAxMTUpCisgICAgICAgIGZvciBsYXllcm5hbWUgaW4gYXJncy5sYXllcm5hbWU6CisgICAgICAgICAgICBsYXllcnVybCA9IHJlcG91cmxzW2xheWVybmFtZV0KKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGxheWVybmFtZS5sanVzdCgyMCksICctJy5sanVzdCgyMCksIGxheWVydXJsWzBdLmxqdXN0KDU1KSwgbGF5ZXJ1cmxbMV0pKQorICAgICAgICBwcmludGVkbGF5ZXJzID0gW10KKyAgICAgICAgZm9yIGxheWVyLCBkZXBlbmRlbmN5LCBnaXRyZXBvLCBzdWJkaXJlY3RvcnkgaW4gcHJpbnRsYXllcnM6CisgICAgICAgICAgICBpZiBkZXBlbmRlbmN5IGluIHByaW50ZWRsYXllcnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGRlcGVuZGVuY3kubGp1c3QoMjApLCBsYXllci5sanVzdCgyMCksIGdpdHJlcG8ubGp1c3QoNTUpLCBzdWJkaXJlY3RvcnkpKQorICAgICAgICAgICAgcHJpbnRlZGxheWVycy5hcHBlbmQoZGVwZW5kZW5jeSkKKworICAgICAgICBpZiByZXBvdXJsczoKKyAgICAgICAgICAgIGZldGNoZGlyID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19GRVRDSF9ESVInLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IGZldGNoZGlyOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBCQkxBWUVSU19GRVRDSF9ESVIiKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmV0Y2hkaXIpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGZldGNoZGlyKQorICAgICAgICAgICAgYWRkbGF5ZXJzID0gW10KKyAgICAgICAgICAgIGZvciByZXBvdXJsLCBzdWJkaXIgaW4gcmVwb3VybHMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgbmFtZSwgbGF5ZXJkaXIgPSBzZWxmLmdldF9mZXRjaF9sYXllcihmZXRjaGRpciwgcmVwb3VybCwgc3ViZGlyLCBub3QgYXJncy5zaG93X29ubHkpCisgICAgICAgICAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIGFkZGxheWVycy5hcHBlbmQoKHN1YmRpciwgbmFtZSwgbGF5ZXJkaXIpKQorICAgICAgICBpZiBub3QgYXJncy5zaG93X29ubHk6CisgICAgICAgICAgICBmb3Igc3ViZGlyLCBuYW1lLCBsYXllcmRpciBpbiBzZXQoYWRkbGF5ZXJzKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIHN1YmRpcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiQWRkaW5nIGxheWVyIFwiJXNcIiB0byBjb25mL2JibGF5ZXJzLmNvbmYiICUgc3ViZGlyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCJBZGRpbmcgbGF5ZXIgXCIlc1wiIHRvIGNvbmYvYmJsYXllcnMuY29uZiIgJSBuYW1lKQorICAgICAgICAgICAgICAgICAgICBsb2NhbGFyZ3MgPSBhcmdwYXJzZS5OYW1lc3BhY2UoKQorICAgICAgICAgICAgICAgICAgICBsb2NhbGFyZ3MubGF5ZXJkaXIgPSBsYXllcmRpcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2FkZF9sYXllcihsb2NhbGFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworCisgICAgZGVmIGRvX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJGaW5kIGxheWVyIGRlcGVuZGVuY2llcyBmcm9tIGxheWVyIGluZGV4LgorIiIiCisgICAgICAgIGFyZ3Muc2hvd19vbmx5ID0gVHJ1ZQorICAgICAgICBhcmdzLmlnbm9yZSA9IFtdCisgICAgICAgIHNlbGYuZG9fbGF5ZXJpbmRleF9mZXRjaChhcmdzKQorCisKKyAgICBkZWYgdmVyc2lvbl9zdHIoc2VsZiwgcGUsIHB2LCBwciA9IE5vbmUpOgorICAgICAgICB2ZXJzdHIgPSAiJXMiICUgcHYKKyAgICAgICAgaWYgcHI6CisgICAgICAgICAgICB2ZXJzdHIgPSAiJXMtJXMiICUgKHZlcnN0ciwgcHIpCisgICAgICAgIGlmIHBlOgorICAgICAgICAgICAgdmVyc3RyID0gIiVzOiVzIiAlIChwZSwgdmVyc3RyKQorICAgICAgICByZXR1cm4gdmVyc3RyCisKKworICAgIGRlZiBkb19zaG93X292ZXJsYXllZChzZWxmLCBhcmdzKToKKyAgICAgICAgIiIibGlzdCBvdmVybGF5ZWQgcmVjaXBlcyAod2hlcmUgdGhlIHNhbWUgcmVjaXBlIGV4aXN0cyBpbiBhbm90aGVyIGxheWVyKQorCitMaXN0cyB0aGUgbmFtZXMgb2Ygb3ZlcmxheWVkIHJlY2lwZXMgYW5kIHRoZSBhdmFpbGFibGUgdmVyc2lvbnMgaW4gZWFjaAorbGF5ZXIsIHdpdGggdGhlIHByZWZlcnJlZCB2ZXJzaW9uIGZpcnN0LiBOb3RlIHRoYXQgc2tpcHBlZCByZWNpcGVzIHRoYXQKK2FyZSBvdmVybGF5ZWQgd2lsbCBhbHNvIGJlIGxpc3RlZCwgd2l0aCBhICIgKHNraXBwZWQpIiBzdWZmaXguCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgaXRlbXNfbGlzdGVkID0gc2VsZi5saXN0X3JlY2lwZXMoJ092ZXJsYXllZCByZWNpcGVzJywgTm9uZSwgVHJ1ZSwgYXJncy5zYW1lX3ZlcnNpb24sIGFyZ3MuZmlsZW5hbWVzLCBUcnVlLCBOb25lKQorCisgICAgICAgICMgQ2hlY2sgZm9yIG92ZXJsYXllZCAuYmJjbGFzcyBmaWxlcworICAgICAgICBjbGFzc2VzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgZm9yIGxheWVyZGlyIGluIHNlbGYuYmJsYXllcnM6CisgICAgICAgICAgICBjbGFzc2RpciA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ2NsYXNzZXMnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgIGZvciBjbGFzc2ZpbGUgaW4gb3MubGlzdGRpcihjbGFzc2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguc3BsaXRleHQoY2xhc3NmaWxlKVsxXSA9PSAnLmJiY2xhc3MnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1tjbGFzc2ZpbGVdLmFwcGVuZChjbGFzc2RpcikKKworICAgICAgICAjIExvY2F0aW5nIGNsYXNzZXMgYW5kIG90aGVyIGZpbGVzIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiByZWNpcGVzIC0KKyAgICAgICAgIyBsYXllciBwcmlvcml0eSBpcyBub3QgYSBmYWN0b3I7IGluc3RlYWQgQml0QmFrZSB1c2VzIHRoZSBmaXJzdCBtYXRjaGluZworICAgICAgICAjIGZpbGUgaW4gQkJQQVRILCB3aGljaCBpcyBtYW5pcHVsYXRlZCBkaXJlY3RseSBieSBlYWNoIGxheWVyJ3MKKyAgICAgICAgIyBjb25mL2xheWVyLmNvbmYgaW4gdHVybiwgdGh1cyB0aGUgb3JkZXIgb2YgbGF5ZXJzIGluIGJibGF5ZXJzLmNvbmYgaXMgYQorICAgICAgICAjIGZhY3RvciAtIGhvd2V2ZXIsIGVhY2ggbGF5ZXIuY29uZiBpcyBmcmVlIHRvIGVpdGhlciBwcmVwZW5kIG9yIGFwcGVuZCB0bworICAgICAgICAjIEJCUEFUSCAob3IgaW5kZWVkIGRvIGNyYXp5IHN0dWZmIHdpdGggaXQpLiBUaHVzIHRoZSBvcmRlciBpbiBCQlBBVEggbWlnaHQKKyAgICAgICAgIyBub3QgYmUgZXhhY3RseSB0aGUgb3JkZXIgcHJlc2VudCBpbiBiYmxheWVycy5jb25mIGVpdGhlci4KKyAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgIG92ZXJsYXllZF9jbGFzc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciAoY2xhc3NmaWxlLCBjbGFzc2RpcnMpIGluIGNsYXNzZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGxlbihjbGFzc2RpcnMpID4gMToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3ZlcmxheWVkX2NsYXNzX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJz09PSBPdmVybGF5ZWQgY2xhc3NlcyA9PT0nKQorICAgICAgICAgICAgICAgICAgICBvdmVybGF5ZWRfY2xhc3NfZm91bmQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBtYWluZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgb3MucGF0aC5qb2luKCdjbGFzc2VzJywgY2xhc3NmaWxlKSkKKyAgICAgICAgICAgICAgICBpZiBhcmdzLmZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclcycgJSBtYWluZmlsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGVmZmVjdGl2ZWx5IGhhdmUgdG8gZ3Vlc3MgdGhlIGxheWVyIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclczonICUgY2xhc3NmaWxlKQorICAgICAgICAgICAgICAgICAgICBtYWlubGF5ZXJuYW1lID0gJz8nCisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjbGFzc2VzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1haW5maWxlLnN0YXJ0c3dpdGgoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5sYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgJXMnICUgbWFpbmxheWVybmFtZSkKKyAgICAgICAgICAgICAgICBmb3IgY2xhc3NkaXIgaW4gY2xhc3NkaXJzOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihjbGFzc2RpciwgY2xhc3NmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBmdWxscGF0aCAhPSBtYWluZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZ3MuZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIGZ1bGxwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBzZWxmLmdldF9sYXllcl9uYW1lKG9zLnBhdGguZGlybmFtZShjbGFzc2RpcikpKQorCisgICAgICAgIGlmIG92ZXJsYXllZF9jbGFzc19mb3VuZDoKKyAgICAgICAgICAgIGl0ZW1zX2xpc3RlZCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IGl0ZW1zX2xpc3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbignTm8gb3ZlcmxheWVkIGZpbGVzIGZvdW5kLicpCisKKworICAgIGRlZiBkb19zaG93X3JlY2lwZXMoc2VsZiwgYXJncyk6CisgICAgICAgICIiImxpc3QgYXZhaWxhYmxlIHJlY2lwZXMsIHNob3dpbmcgdGhlIGxheWVyIHRoZXkgYXJlIHByb3ZpZGVkIGJ5CisKK0xpc3RzIHRoZSBuYW1lcyBvZiByZWNpcGVzIGFuZCB0aGUgYXZhaWxhYmxlIHZlcnNpb25zIGluIGVhY2gKK2xheWVyLCB3aXRoIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBmaXJzdC4gT3B0aW9uYWxseSB5b3UgbWF5IHNwZWNpZnkKK3Buc3BlYyB0byBtYXRjaCBhIHNwZWNpZmllZCByZWNpcGUgbmFtZSAoc3VwcG9ydHMgd2lsZGNhcmRzKS4gTm90ZSB0aGF0Citza2lwcGVkIHJlY2lwZXMgd2lsbCBhbHNvIGJlIGxpc3RlZCwgd2l0aCBhICIgKHNraXBwZWQpIiBzdWZmaXguCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgaW5oZXJpdGxpc3QgPSBhcmdzLmluaGVyaXRzLnNwbGl0KCcsJykgaWYgYXJncy5pbmhlcml0cyBlbHNlIFtdCisgICAgICAgIGlmIGluaGVyaXRsaXN0IG9yIGFyZ3MucG5zcGVjIG9yIGFyZ3MubXVsdGlwbGU6CisgICAgICAgICAgICB0aXRsZSA9ICdNYXRjaGluZyByZWNpcGVzOicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRpdGxlID0gJ0F2YWlsYWJsZSByZWNpcGVzOicKKyAgICAgICAgc2VsZi5saXN0X3JlY2lwZXModGl0bGUsIGFyZ3MucG5zcGVjLCBGYWxzZSwgRmFsc2UsIGFyZ3MuZmlsZW5hbWVzLCBhcmdzLm11bHRpcGxlLCBpbmhlcml0bGlzdCkKKworCisgICAgZGVmIGxpc3RfcmVjaXBlcyhzZWxmLCB0aXRsZSwgcG5zcGVjLCBzaG93X292ZXJsYXllZF9vbmx5LCBzaG93X3NhbWVfdmVyX29ubHksIHNob3dfZmlsZW5hbWVzLCBzaG93X211bHRpX3Byb3ZpZGVyX29ubHksIGluaGVyaXRzKToKKyAgICAgICAgaWYgaW5oZXJpdHM6CisgICAgICAgICAgICBiYnBhdGggPSBzdHIoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICAgICAgICAgIGZvciBjbGFzc25hbWUgaW4gaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgY2xhc3NmaWxlID0gJ2NsYXNzZXMvJXMuYmJjbGFzcycgJSBjbGFzc25hbWUKKyAgICAgICAgICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjbGFzc2ZpbGUsIGhpc3Rvcnk9RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBVc2VyRXJyb3IoJ05vIGNsYXNzIG5hbWVkICVzIGZvdW5kIGluIEJCUEFUSCcgJSBjbGFzc2ZpbGUpCisKKyAgICAgICAgcGtnX3BuID0gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSwgcGtnX3BuKQorICAgICAgICBhbGxwcm92aWRlcnMgPSBiYi5wcm92aWRlcnMuYWxsUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSkKKworICAgICAgICAjIEVuc3VyZSB3ZSBsaXN0IHNraXBwZWQgcmVjaXBlcworICAgICAgICAjIFdlIGFyZSBsYXJnZWx5IGd1ZXNzaW5nIGFib3V0IFBOLCBQViBhbmQgdGhlIHByZWZlcnJlZCB2ZXJzaW9uIGhlcmUsCisgICAgICAgICMgYnV0IHdlIGhhdmUgbm8gY2hvaWNlIHNpbmNlIHNraXBwZWQgcmVjaXBlcyBhcmUgbm90IGZ1bGx5IHBhcnNlZAorICAgICAgICBza2lwbGlzdCA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5za2lwbGlzdC5rZXlzKCkKKyAgICAgICAgc2tpcGxpc3Quc29ydCgga2V5PWxhbWJkYSBmaWxlaXRlbTogc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uY2FsY19iYmZpbGVfcHJpb3JpdHkoZmlsZWl0ZW0pICkKKyAgICAgICAgc2tpcGxpc3QucmV2ZXJzZSgpCisgICAgICAgIGZvciBmbiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgIHJlY2lwZV9wYXJ0cyA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdLnNwbGl0KCdfJykKKyAgICAgICAgICAgIHAgPSByZWNpcGVfcGFydHNbMF0KKyAgICAgICAgICAgIGlmIGxlbihyZWNpcGVfcGFydHMpID4gMToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgcmVjaXBlX3BhcnRzWzFdLCBOb25lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgJ3Vua25vd24nLCBOb25lKQorICAgICAgICAgICAgYWxscHJvdmlkZXJzW3BdLmFwcGVuZCgodmVyLCBmbikpCisgICAgICAgICAgICBpZiBub3QgcCBpbiBwa2dfcG46CisgICAgICAgICAgICAgICAgcGtnX3BuW3BdID0gJ2R1bW15JworICAgICAgICAgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uc1twXSA9ICh2ZXIsIGZuKQorCisgICAgICAgIGRlZiBwcmludF9pdGVtKGYsIHBuLCB2ZXIsIGxheWVyLCBpc3ByZWYpOgorICAgICAgICAgICAgaWYgZiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgICAgICBza2lwcGVkID0gJyAoc2tpcHBlZCknCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSAnJworICAgICAgICAgICAgaWYgc2hvd19maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzJXMiLCBmLCBza2lwcGVkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyVzIiwgZiwgc2tpcHBlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzOiIsIHBuKQorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyAlcyVzIiwgbGF5ZXIubGp1c3QoMjApLCB2ZXIsIHNraXBwZWQpCisKKyAgICAgICAgZ2xvYmFsX2luaGVyaXQgPSAoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgY2xzX3JlID0gcmUuY29tcGlsZSgnY2xhc3Nlcy8nKQorCisgICAgICAgIHByZWZmaWxlcyA9IFtdCisgICAgICAgIGl0ZW1zX2xpc3RlZCA9IEZhbHNlCisgICAgICAgIGZvciBwIGluIHNvcnRlZChwa2dfcG4pOgorICAgICAgICAgICAgaWYgcG5zcGVjOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2gocCwgcG5zcGVjKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbGVuKGFsbHByb3ZpZGVyc1twXSkgPiAxIG9yIG5vdCBzaG93X211bHRpX3Byb3ZpZGVyX29ubHk6CisgICAgICAgICAgICAgICAgcHJlZiA9IHByZWZlcnJlZF92ZXJzaW9uc1twXQorICAgICAgICAgICAgICAgIHJlYWxmbiA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocHJlZlsxXSkKKyAgICAgICAgICAgICAgICBwcmVmZmlsZSA9IHJlYWxmblswXQorCisgICAgICAgICAgICAgICAgIyBXZSBvbmx5IGRpc3BsYXkgb25jZSBwZXIgcmVjaXBlLCB3ZSBzaG91bGQgcHJlZmVyIG5vbiBleHRlbmRlZCB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIHJlY2lwZSBpZiBwcmVzZW50IChzbyBlLmcuIGluIE9wZW5FbWJlZGRlZCwgb3BlbnNzbCByYXRoZXIgdGhhbiBuYXRpdmVzZGstb3BlbnNzbAorICAgICAgICAgICAgICAgICMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHNvcnQgZmlyc3QpLgorICAgICAgICAgICAgICAgIGlmIHJlYWxmblsxXSBhbmQgcmVhbGZuWzBdIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfZm46CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hjb3VudCA9IDAKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlX2luaGVyaXRzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEuaW5oZXJpdHMuZ2V0KHByZWZmaWxlLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiByZWNpcGVfaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHNfcmUubWF0Y2goY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNscykpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbGFzc25hbWUgaW4gZ2xvYmFsX2luaGVyaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgY2xhc3NuYW1lIGluIGluaGVyaXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaGNvdW50ICE9IGxlbihpbmhlcml0cyk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIG1hdGNoIC0gc2tpcCB0aGlzIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHByZWZmaWxlIG5vdCBpbiBwcmVmZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHByZWZsYXllciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIocHJlZmZpbGUpCisgICAgICAgICAgICAgICAgICAgIG11bHRpbGF5ZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBzYW1lX3ZlciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcHJvdnMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcHJvdiBpbiBhbGxwcm92aWRlcnNbcF06CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92ZmlsZSA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocHJvdlsxXSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZsYXllciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIocHJvdmZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92cy5hcHBlbmQoKHByb3ZmaWxlLCBwcm92bGF5ZXIsIHByb3ZbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdmxheWVyICE9IHByZWZsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWxheWVyID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdlswXSAhPSBwcmVmWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVfdmVyID0gRmFsc2UKKworICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlsYXllciBvciBub3Qgc2hvd19vdmVybGF5ZWRfb25seSkgYW5kIChzYW1lX3ZlciBvciBub3Qgc2hvd19zYW1lX3Zlcl9vbmx5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtc19saXN0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gJXMgPT09JyAlIHRpdGxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zX2xpc3RlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2l0ZW0ocHJlZmZpbGUsIHAsIHNlbGYudmVyc2lvbl9zdHIocHJlZlswXVswXSwgcHJlZlswXVsxXSksIHByZWZsYXllciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocHJvdmZpbGUsIHByb3ZsYXllciwgcHJvdnZlcikgaW4gcHJvdnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdmZpbGUgIT0gcHJlZmZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2l0ZW0ocHJvdmZpbGUsIHAsIHNlbGYudmVyc2lvbl9zdHIocHJvdnZlclswXSwgcHJvdnZlclsxXSksIHByb3ZsYXllciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSB3ZSBkb24ndCBzaG93IHR3byBlbnRyaWVzIGZvciBCQkNMQVNTRVhURU5EZWQgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmZpbGVzLmFwcGVuZChwcmVmZmlsZSkKKworICAgICAgICByZXR1cm4gaXRlbXNfbGlzdGVkCisKKworICAgIGRlZiBkb19mbGF0dGVuKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJmbGF0dGVuIGxheWVyIGNvbmZpZ3VyYXRpb24gaW50byBhIHNlcGFyYXRlIG91dHB1dCBkaXJlY3RvcnkuCisKK1Rha2VzIHRoZSBzcGVjaWZpZWQgbGF5ZXJzIChvciBhbGwgbGF5ZXJzIGluIHRoZSBjdXJyZW50IGxheWVyCitjb25maWd1cmF0aW9uIGlmIG5vbmUgYXJlIHNwZWNpZmllZCkgYW5kIGJ1aWxkcyBhICJmbGF0dGVuZWQiIGRpcmVjdG9yeQorY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgYWxsIGxheWVycywgd2l0aCBhbnkgb3ZlcmxheWVkIHJlY2lwZXMgcmVtb3ZlZAorYW5kIGJiYXBwZW5kcyBhcHBlbmRlZCB0byB0aGUgY29ycmVzcG9uZGluZyByZWNpcGVzLiBOb3RlIHRoYXQgc29tZSBtYW51YWwKK2NsZWFudXAgbWF5IHN0aWxsIGJlIG5lY2Vzc2FyeSBhZnRlcndhcmRzLCBpbiBwYXJ0aWN1bGFyOgorCisqIHdoZXJlIG5vbi1yZWNpcGUgZmlsZXMgKHN1Y2ggYXMgcGF0Y2hlcykgYXJlIG92ZXJ3cml0dGVuICh0aGUgZmxhdHRlbgorICBjb21tYW5kIHdpbGwgc2hvdyBhIHdhcm5pbmcgZm9yIHRoZXNlKQorKiB3aGVyZSBhbnl0aGluZyBiZXlvbmQgdGhlIG5vcm1hbCBsYXllciBzZXR1cCBoYXMgYmVlbiBhZGRlZCB0bworICBsYXllci5jb25mIChvbmx5IHRoZSBsb3dlc3QgcHJpb3JpdHkgbnVtYmVyIGxheWVyJ3MgbGF5ZXIuY29uZiBpcyB1c2VkKQorKiBvdmVycmlkZGVuL2FwcGVuZGVkIGl0ZW1zIGZyb20gYmJhcHBlbmRzIHdpbGwgbmVlZCB0byBiZSB0aWRpZWQgdXAKKyogd2hlbiB0aGUgZmxhdHRlbmVkIGxheWVycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlICh0aGUKKyAgZmxhdHRlbiBjb21tYW5kIHNob3VsZCBzaG93IGEgd2FybmluZyB3aGVuIHRoaXMgd2lsbCBjYXVzZSBhIHByb2JsZW0pCisKK1dhcm5pbmc6IGlmIHlvdSBmbGF0dGVuIHNldmVyYWwgbGF5ZXJzIHdoZXJlIGFub3RoZXIgbGF5ZXIgaXMgaW50ZW5kZWQgdG8KK2JlIHVzZWQgImluYmV0d2VlbiIgdGhlbSAoaW4gbGF5ZXIgcHJpb3JpdHkgb3JkZXIpIHN1Y2ggdGhhdCByZWNpcGVzIC8KK2JiYXBwZW5kcyBpbiB0aGUgbGF5ZXJzIGludGVyYWN0LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHVzZSB0aGUgbmV3IG91dHB1dAorbGF5ZXIgdG9nZXRoZXIgd2l0aCB0aGF0IG90aGVyIGxheWVyLCB5b3UgbWF5IG5vIGxvbmdlciBnZXQgdGhlIHNhbWUKK2J1aWxkIHJlc3VsdHMgKGFzIHRoZSBsYXllciBwcmlvcml0eSBvcmRlciBoYXMgZWZmZWN0aXZlbHkgY2hhbmdlZCkuCisiIiIKKyAgICAgICAgaWYgbGVuKGFyZ3MubGF5ZXIpID09IDE6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0lmIHlvdSBzcGVjaWZ5IGxheWVycyB0byBmbGF0dGVuIHlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgdHdvJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgb3V0cHV0ZGlyID0gYXJncy5vdXRwdXRkaXIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0cHV0ZGlyKSBhbmQgb3MubGlzdGRpcihvdXRwdXRkaXIpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdEaXJlY3RvcnkgJXMgZXhpc3RzIGFuZCBpcyBub24tZW1wdHksIHBsZWFzZSBjbGVhciBpdCBvdXQgZmlyc3QnICUgb3V0cHV0ZGlyKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKCkKKyAgICAgICAgbGF5ZXJzID0gc2VsZi5iYmxheWVycworICAgICAgICBpZiBsZW4oYXJncy5sYXllcikgPiAyOgorICAgICAgICAgICAgbGF5ZXJuYW1lcyA9IGFyZ3MubGF5ZXIKKyAgICAgICAgICAgIGZvdW5kX2xheWVybmFtZXMgPSBbXQorICAgICAgICAgICAgZm91bmRfbGF5ZXJkaXJzID0gW10KKyAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgICAgICBpZiBsYXllcm5hbWUgaW4gbGF5ZXJuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfbGF5ZXJkaXJzLmFwcGVuZChsYXllcmRpcikKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfbGF5ZXJuYW1lcy5hcHBlbmQobGF5ZXJuYW1lKQorCisgICAgICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGxheWVybmFtZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGxheWVybmFtZSBpbiBmb3VuZF9sYXllcm5hbWVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIGxheWVyICVzIGluIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgcGxlYXNlIHJ1biAiJXMgc2hvdy1sYXllcnMiIHRvIGxpc3QgY29uZmlndXJlZCBsYXllcnMnICUgKGxheWVybmFtZSwgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGxheWVycyA9IGZvdW5kX2xheWVyZGlycworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGF5ZXJuYW1lcyA9IFtdCisKKyAgICAgICAgIyBFbnN1cmUgYSBzcGVjaWZpZWQgcGF0aCBtYXRjaGVzIG91ciBsaXN0IG9mIGxheWVycworICAgICAgICBkZWYgbGF5ZXJfcGF0aF9tYXRjaChwYXRoKToKKyAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKG9zLnBhdGguam9pbihsYXllcmRpciwgJycpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyZGlyCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGFwcGxpZWRfYXBwZW5kcyA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICBvdmVybGF5ZWQgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24ub3ZlcmxheWVkLml0ZXJrZXlzKCk6CisgICAgICAgICAgICAgICAgZm9yIG9mIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLm92ZXJsYXllZFtmXToKKyAgICAgICAgICAgICAgICAgICAgaWYgb2Yuc3RhcnRzd2l0aChsYXllcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5ZWQuYXBwZW5kKG9mKQorCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oJ0NvcHlpbmcgZmlsZXMgZnJvbSAlcy4uLicgJSBsYXllciApCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhsYXllcik6CisgICAgICAgICAgICAgICAgZm9yIGYxIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmMWZ1bGwgPSBvcy5zZXAuam9pbihbcm9vdCwgZjFdKQorICAgICAgICAgICAgICAgICAgICBpZiBmMWZ1bGwgaW4gb3ZlcmxheWVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIFNraXBwaW5nIG92ZXJsYXllZCBmaWxlICVzJyAlIGYxZnVsbCApCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYxKVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ICE9ICcuYmJhcHBlbmQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gZjFmdWxsW2xlbihsYXllcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5zZXAuam9pbihbb3V0cHV0ZGlyLGZkZXN0XSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmZGVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmRlc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmMSA9PSAnbGF5ZXIuY29uZicgYW5kIHJvb3QuZW5kc3dpdGgoJy9jb25mJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgU2tpcHBpbmcgbGF5ZXIgY29uZmlnIGZpbGUgJXMnICUgZjFmdWxsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignT3ZlcndyaXRpbmcgZmlsZSAlcycsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGYxZnVsbCwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ID09ICcuYmInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXBwZW5kIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZjFmdWxsKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxheWVyX3BhdGhfbWF0Y2goYXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgQXBwbHlpbmcgYXBwZW5kICVzIHRvICVzJyAlIChhcHBlbmQsIGZkZXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcGx5X2FwcGVuZChhcHBlbmQsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWRfYXBwZW5kcy5hcHBlbmQoYXBwZW5kKQorCisgICAgICAgICMgVGFrZSBjYXJlIG9mIHdoZW4gc29tZSBsYXllcnMgYXJlIGV4Y2x1ZGVkIGFuZCB5ZXQgd2UgaGF2ZSBpbmNsdWRlZCBiYmFwcGVuZHMgZm9yIHRob3NlIHJlY2lwZXMKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uYmJhcHBlbmRzOgorICAgICAgICAgICAgKHJlY2lwZW5hbWUsIGFwcGVuZG5hbWUpID0gYgorICAgICAgICAgICAgaWYgYXBwZW5kbmFtZSBub3QgaW4gYXBwbGllZF9hcHBlbmRzOgorICAgICAgICAgICAgICAgIGZpcnN0X2FwcGVuZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBsYXllciA9IGxheWVyX3BhdGhfbWF0Y2goYXBwZW5kbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RfYXBwZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseV9hcHBlbmQoYXBwZW5kbmFtZSwgZmlyc3RfYXBwZW5kKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBhcHBlbmRuYW1lW2xlbihsYXllcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnNlcC5qb2luKFtvdXRwdXRkaXIsZmRlc3RdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmRlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoYXBwZW5kbmFtZSwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcHBlbmQgPSBmZGVzdAorCisgICAgICAgICMgR2V0IHRoZSByZWdleCBmb3IgdGhlIGZpcnN0IGxheWVyIGluIG91ciBsaXN0ICh3aGljaCBpcyB3aGVyZSB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgd2lsbAorICAgICAgICAjIGhhdmUgY29tZSBmcm9tKQorICAgICAgICBmaXJzdF9yZWdleCA9IE5vbmUKKyAgICAgICAgbGF5ZXJkaXIgPSBsYXllcnNbMF0KKyAgICAgICAgZm9yIGxheWVybmFtZSwgcGF0dGVybiwgcmVnZXgsIF8gaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGlmIHJlZ2V4Lm1hdGNoKG9zLnBhdGguam9pbihsYXllcmRpciwgJ3Rlc3QnKSk6CisgICAgICAgICAgICAgICAgZmlyc3RfcmVnZXggPSByZWdleAorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZmlyc3RfcmVnZXg6CisgICAgICAgICAgICAjIEZpbmQgdGhlIEJCRklMRVMgZW50cmllcyB0aGF0IG1hdGNoICh3aGljaCB3aWxsIGhhdmUgY29tZSBmcm9tIHRoaXMgY29uZi9sYXllci5jb25mIGZpbGUpCisgICAgICAgICAgICBiYmZpbGVzID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJGSUxFUycsIFRydWUpKS5zcGxpdCgpCisgICAgICAgICAgICBiYmZpbGVzX2xheWVyID0gW10KKyAgICAgICAgICAgIGZvciBpdGVtIGluIGJiZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZmlyc3RfcmVnZXgubWF0Y2goaXRlbSk6CisgICAgICAgICAgICAgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0ZGlyLCBpdGVtW2xlbihsYXllcmRpcikrMTpdKQorICAgICAgICAgICAgICAgICAgICBiYmZpbGVzX2xheWVyLmFwcGVuZChuZXdwYXRoKQorCisgICAgICAgICAgICBpZiBiYmZpbGVzX2xheWVyOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBhbGwgaW1wb3J0YW50IGxheWVyIGZpbGVzIG1hdGNoIEJCRklMRVMKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvdXRwdXRkaXIpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZjEgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYxKVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0IGluIFsnLmJiJywgJy5iYmFwcGVuZCddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYxZnVsbCA9IG9zLnNlcC5qb2luKFtyb290LCBmMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJiZmlsZXNfbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmMWZ1bGwsIGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlbnRyeV9mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkZpbGUgJXMgZG9lcyBub3QgbWF0Y2ggdGhlIGZsYXR0ZW5lZCBsYXllcidzIEJCRklMRVMgc2V0dGluZywgeW91IG1heSBuZWVkIHRvIGVkaXQgY29uZi9sYXllci5jb25mIG9yIG1vdmUgdGhlIGZpbGUgZWxzZXdoZXJlIiAlIGYxZnVsbCkKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyZGlyID0gc2VsZi5nZXRfZmlsZV9sYXllcmRpcihmaWxlbmFtZSkKKyAgICAgICAgaWYgbGF5ZXJkaXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnPycKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcmRpcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyID0gYmIudXRpbHMuZ2V0X2ZpbGVfbGF5ZXIoZmlsZW5hbWUsIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICByZXR1cm4gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorCisgICAgZGVmIHJlbW92ZV9sYXllcl9wcmVmaXgoc2VsZiwgZik6CisgICAgICAgICIiIlJlbW92ZSB0aGUgbGF5ZXJfZGlyIHByZWZpeCwgZS5nLiwgZiA9IC9wYXRoL3RvL2xheWVyX2Rpci9mb28vYmxhaCwgdGhlCisgICAgICAgICAgIHJldHVybiB2YWx1ZSB3aWxsIGJlOiBsYXllcl9kaXIvZm9vL2JsYWgiIiIKKyAgICAgICAgZl9sYXllcmRpciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXJkaXIoZikKKyAgICAgICAgaWYgbm90IGZfbGF5ZXJkaXI6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZfbGF5ZXJkaXIpLCAnJykKKyAgICAgICAgcmV0dXJuIGZbbGVuKHByZWZpeCk6XSBpZiBmLnN0YXJ0c3dpdGgocHJlZml4KSBlbHNlIGYKKworICAgIGRlZiBnZXRfbGF5ZXJfbmFtZShzZWxmLCBsYXllcmRpcik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKGxheWVyZGlyLnJzdHJpcChvcy5zZXApKQorCisgICAgZGVmIGFwcGx5X2FwcGVuZChzZWxmLCBhcHBlbmRuYW1lLCByZWNpcGVuYW1lKToKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZG5hbWUsICdyJykgYXMgYXBwZW5kZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihyZWNpcGVuYW1lLCAnYScpIGFzIHJlY2lwZWZpbGU6CisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGUoJyMjIyMjIGJiYXBwZW5kZWQgZnJvbSAlcyAjIyMjI1xuJyAlIHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoYXBwZW5kbmFtZSkpCisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZWxpbmVzKGFwcGVuZGZpbGUucmVhZGxpbmVzKCkpCisKKyAgICBkZWYgZG9fc2hvd19hcHBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJsaXN0IGJiYXBwZW5kIGZpbGVzIGFuZCByZWNpcGUgZmlsZXMgdGhleSBhcHBseSB0bworCitMaXN0cyByZWNpcGVzIHdpdGggdGhlIGJiYXBwZW5kcyB0aGF0IGFwcGx5IHRvIHRoZW0gYXMgc3ViaXRlbXMuCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gQXBwZW5kZWQgcmVjaXBlcyA9PT0nKQorCisgICAgICAgIHBubGlzdCA9IGxpc3Qoc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuLmtleXMoKSkKKyAgICAgICAgcG5saXN0LnNvcnQoKQorICAgICAgICBhcHBlbmRzID0gRmFsc2UKKyAgICAgICAgZm9yIHBuIGluIHBubGlzdDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2hvd19hcHBlbmRzX2Zvcl9wbihwbik6CisgICAgICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNob3dfYXBwZW5kc19mb3Jfc2tpcHBlZCgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBub3QgYXBwZW5kczoKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbignTm8gYXBwZW5kIGZpbGVzIGZvdW5kJykKKworICAgIGRlZiBzaG93X2FwcGVuZHNfZm9yX3BuKHNlbGYsIHBuKToKKyAgICAgICAgZmlsZW5hbWVzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuW3BuXQorCisgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcG4pCisgICAgICAgIGJlc3RfZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGJlc3RbM10pCisKKyAgICAgICAgcmV0dXJuIHNlbGYuc2hvd19hcHBlbmRzX291dHB1dChmaWxlbmFtZXMsIGJlc3RfZmlsZW5hbWUpCisKKyAgICBkZWYgc2hvd19hcHBlbmRzX2Zvcl9za2lwcGVkKHNlbGYpOgorICAgICAgICBmaWxlbmFtZXMgPSBbb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIuc2tpcGxpc3QuaXRlcmtleXMoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2hvd19hcHBlbmRzX291dHB1dChmaWxlbmFtZXMsIE5vbmUsICIgKHNraXBwZWQpIikKKworICAgIGRlZiBzaG93X2FwcGVuZHNfb3V0cHV0KHNlbGYsIGZpbGVuYW1lcywgYmVzdF9maWxlbmFtZSwgbmFtZV9zdWZmaXggPSAnJyk6CisgICAgICAgIGFwcGVuZGVkLCBtaXNzaW5nID0gc2VsZi5nZXRfYXBwZW5kc19mb3JfZmlsZXMoZmlsZW5hbWVzKQorICAgICAgICBpZiBhcHBlbmRlZDoKKyAgICAgICAgICAgIGZvciBiYXNlbmFtZSwgYXBwZW5kcyBpbiBhcHBlbmRlZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyVzJXM6JywgYmFzZW5hbWUsIG5hbWVfc3VmZml4KQorICAgICAgICAgICAgICAgIGZvciBhcHBlbmQgaW4gYXBwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgICVzJywgYXBwZW5kKQorCisgICAgICAgICAgICBpZiBiZXN0X2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGlmIGJlc3RfZmlsZW5hbWUgaW4gbWlzc2luZzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJyVzOiBtaXNzaW5nIGFwcGVuZCBmb3IgcHJlZmVycmVkIHZlcnNpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X2ZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdldF9hcHBlbmRzX2Zvcl9maWxlcyhzZWxmLCBmaWxlbmFtZXMpOgorICAgICAgICBhcHBlbmRlZCwgbm90YXBwZW5kZWQgPSBbXSwgW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIF8sIGNscyA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBjbHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgICAgICAgICAgYXBwZW5kcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBhcHBlbmRzOgorICAgICAgICAgICAgICAgIGFwcGVuZGVkLmFwcGVuZCgoYmFzZW5hbWUsIGxpc3QoYXBwZW5kcykpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3RhcHBlbmRlZC5hcHBlbmQoYmFzZW5hbWUpCisgICAgICAgIHJldHVybiBhcHBlbmRlZCwgbm90YXBwZW5kZWQKKworICAgIGRlZiBkb19zaG93X2Nyb3NzX2RlcGVuZHMoc2VsZiwgYXJncyk6CisgICAgICAgICIiIlNob3cgZGVwZW5kZW5jaWVzIGJldHdlZW4gcmVjaXBlcyB0aGF0IGNyb3NzIGxheWVyIGJvdW5kYXJpZXMuCisKK0ZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHJlY2lwZXMgdGhhdCBjcm9zcyBsYXllciBib3VuZGFyaWVzLgorCitOT1RFOiAuYmJhcHBlbmQgZmlsZXMgY2FuIGltcGFjdCB0aGUgZGVwZW5kZW5jaWVzLgorIiIiCisgICAgICAgIGlnbm9yZV9sYXllcnMgPSAoYXJncy5pZ25vcmUgb3IgJycpLnNwbGl0KCcsJykKKworICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKCkKKworICAgICAgICBwa2dfZm4gPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfZm4KKyAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgIHNlbGYucmVxdWlyZV9yZSA9IHJlLmNvbXBpbGUociJyZXF1aXJlXHMrKC4rKSIpCisgICAgICAgIHNlbGYuaW5jbHVkZV9yZSA9IHJlLmNvbXBpbGUociJpbmNsdWRlXHMrKC4rKSIpCisgICAgICAgIHNlbGYuaW5oZXJpdF9yZSA9IHJlLmNvbXBpbGUociJpbmhlcml0XHMrKC4rKSIpCisKKyAgICAgICAgZ2xvYmFsX2luaGVyaXQgPSAoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICAjIFRoZSBiYidzIERFUEVORFMgYW5kIFJERVBFTkRTCisgICAgICAgIGZvciBmIGluIHBrZ19mbjoKKyAgICAgICAgICAgIGYgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGYpWzBdCisgICAgICAgICAgICAjIEdldCB0aGUgbGF5ZXJuYW1lIHRoYXQgdGhlIGZpbGUgaXMgaW4KKyAgICAgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoZikKKworICAgICAgICAgICAgIyBUaGUgREVQRU5EUworICAgICAgICAgICAgZGVwcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmRlcHNbZl0KKyAgICAgICAgICAgIGZvciBwbiBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGlmIHBuIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbjoKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJERVBFTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0WzNdLCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgUkRQRU5EUworICAgICAgICAgICAgYWxsX3JkZXBzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucnVuZGVwc1tmXS52YWx1ZXMoKQorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIGR1cGxpY2F0ZWQgb3IgbnVsbCBvbmUuCisgICAgICAgICAgICBzb3J0ZWRfcmRlcHMgPSB7fQorICAgICAgICAgICAgIyBUaGUgYWxsX3JkZXBzIGlzIHRoZSBsaXN0IGluIGxpc3QsIHNvIHdlIG5lZWQgdHdvIGZvciBsb29wcworICAgICAgICAgICAgZm9yIGsxIGluIGFsbF9yZGVwczoKKyAgICAgICAgICAgICAgICBmb3IgazIgaW4gazE6CisgICAgICAgICAgICAgICAgICAgIHNvcnRlZF9yZGVwc1trMl0gPSAxCisgICAgICAgICAgICBhbGxfcmRlcHMgPSBzb3J0ZWRfcmRlcHMua2V5cygpCisgICAgICAgICAgICBmb3IgcmRlcCBpbiBhbGxfcmRlcHM6CisgICAgICAgICAgICAgICAgYWxsX3AgPSBiYi5wcm92aWRlcnMuZ2V0UnVudGltZVByb3ZpZGVycyhzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSwgcmRlcCkKKyAgICAgICAgICAgICAgICBpZiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZiBpbiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHJlY2lwZSBwcm92aWRlcyB0aGlzIG9uZSBpdHNlbGYsIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCByZGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSlbMF1bMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJSREVQRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdCwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisKKyAgICAgICAgICAgICMgVGhlIFJSRUNPTU1FTkRTCisgICAgICAgICAgICBhbGxfcnJlY3MgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5ydW5yZWNzW2ZdLnZhbHVlcygpCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBvciBudWxsIG9uZS4KKyAgICAgICAgICAgIHNvcnRlZF9ycmVjcyA9IHt9CisgICAgICAgICAgICAjIFRoZSBhbGxfcnJlY3MgaXMgdGhlIGxpc3QgaW4gbGlzdCwgc28gd2UgbmVlZCB0d28gZm9yIGxvb3BzCisgICAgICAgICAgICBmb3IgazEgaW4gYWxsX3JyZWNzOgorICAgICAgICAgICAgICAgIGZvciBrMiBpbiBrMToKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkX3JyZWNzW2syXSA9IDEKKyAgICAgICAgICAgIGFsbF9ycmVjcyA9IHNvcnRlZF9ycmVjcy5rZXlzKCkKKyAgICAgICAgICAgIGZvciBycmVjIGluIGFsbF9ycmVjczoKKyAgICAgICAgICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLCBycmVjKQorICAgICAgICAgICAgICAgIGlmIGFsbF9wOgorICAgICAgICAgICAgICAgICAgICBpZiBmIGluIGFsbF9wOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgcmVjaXBlIHByb3ZpZGVzIHRoaXMgb25lIGl0c2VsZiwgaWdub3JlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbHRlclByb3ZpZGVyc1J1blRpbWUoYWxsX3AsIHJyZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhKVswXVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2Nyb3NzX2RlcGVuZHMoIlJSRUNPTU1FTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0LCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgaW5oZXJpdCBjbGFzcworICAgICAgICAgICAgY2xzX3JlID0gcmUuY29tcGlsZSgnY2xhc3Nlcy8nKQorICAgICAgICAgICAgaWYgZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5pbmhlcml0czoKKyAgICAgICAgICAgICAgICBpbmhlcml0cyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmluaGVyaXRzW2ZdCisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgaW5oZXJpdHMnIGZvcm1hdCBpcyBbY2xhc3Nlcy9jbHMsIC9wYXRoL3RvL2NsYXNzZXMvY2xzXQorICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSB0aGUgY2xhc3Nlcy9jbHMuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjbHNfcmUubWF0Y2goY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShjbHMpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NuYW1lIGluIGdsb2JhbF9pbmhlcml0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0X2xheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoY2xzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5oZXJpdF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgaW5oZXJpdF9sYXllcm5hbWUgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXJncy5maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfc2hvcnQgPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGNscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3Nob3J0ID0gZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgaW5oZXJpdHMgJXMiICUgKGZfc2hvcnQsIGNscykpCisKKyAgICAgICAgICAgICMgVGhlICdyZXF1aXJlL2luY2x1ZGUgeHh4JyBpbiB0aGUgYmIgZmlsZQorICAgICAgICAgICAgcHZfcmUgPSByZS5jb21waWxlKHIiXCR7UFZ9IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmLCAncicpIGFzIGZuZmlsZToKKyAgICAgICAgICAgICAgICBsaW5lID0gZm5maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9yZXF1aXJlX2luY2x1ZGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCB0aGUgJ3JlcXVpcmUvaW5jbHVkZSB4eHh4JworICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkX2ZpbGUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAjIFJlcGxhY2UgdGhlICR7UFZ9IHdpdGggdGhlIHJlYWwgUFYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHB2X3JlLnNlYXJjaChuZWVkZWRfZmlsZSkgYW5kIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BlcHZwcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdiA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wZXB2cHJbZl1bMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWRfZmlsZSA9IHJlLnN1YihyIlwke1BWfSIsIHB2LCBuZWVkZWRfZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRfY3Jvc3NfZmlsZXMoYmJwYXRoLCBrZXl3b3JkLCBsYXllcm5hbWUsIGYsIG5lZWRlZF9maWxlLCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZuZmlsZS5yZWFkbGluZSgpCisKKyAgICAgICAgIyBUaGUgInJlcXVpcmUvaW5jbHVkZSB4eHgiIGluIGNvbmYvbWFjaGluZS8qLmNvbmYsIC5pbmMgYW5kIC5iYmNsYXNzCisgICAgICAgIGNvbmZfcmUgPSByZS5jb21waWxlKCIuKi9jb25mL21hY2hpbmUvW15cL10qXC5jb25mJCIpCisgICAgICAgIGluY19yZSA9IHJlLmNvbXBpbGUoIi4qXC5pbmMkIikKKyAgICAgICAgIyBUaGUgImluaGVyaXQgeHh4IiBpbiAuYmJjbGFzcworICAgICAgICBiYmNsYXNzX3JlID0gcmUuY29tcGlsZSgiLipcLmJiY2xhc3MkIikKKyAgICAgICAgZm9yIGxheWVyZGlyIGluIHNlbGYuYmJsYXllcnM6CisgICAgICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhsYXllcmRpcik6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHMgPSBjb25mX3JlLm1hdGNoKGYpIG9yIGluY19yZS5tYXRjaChmKSBvciBiYmNsYXNzX3JlLm1hdGNoKGYpCisgICAgICAgICAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZiwgJ3InKSBhcyBmZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZmZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sIGtleXdvcmQgPSBzZWxmLm1hdGNoX3JlcXVpcmVfaW5jbHVkZShsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9ubHkgYmJjbGFzcyBoYXMgdGhlICJpbmhlcml0IHh4eCIgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmJjbGFzcz0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbSBhbmQgZi5lbmRzd2l0aCgiLmJiY2xhc3MiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sIGtleXdvcmQgPSBzZWxmLm1hdGNoX2luaGVyaXQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiY2xhc3M9Ii5iYmNsYXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbmQgYSAncmVxdWlyZS9pbmNsdWRlIHh4eHgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50X2Nyb3NzX2ZpbGVzKGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBtLmdyb3VwKDEpICsgYmJjbGFzcywgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmZmlsZS5yZWFkbGluZSgpCisKKyAgICBkZWYgcHJpbnRfY3Jvc3NfZmlsZXMoc2VsZiwgYmJwYXRoLCBrZXl3b3JkLCBsYXllcm5hbWUsIGYsIG5lZWRlZF9maWxlbmFtZSwgc2hvd19maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpOgorICAgICAgICAiIiJQcmludCB0aGUgZGVwZW5kcyB0aGF0IGNyb3NzZXMgYSBsYXllciBib3VuZGFyeSIiIgorICAgICAgICBuZWVkZWRfZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgbmVlZGVkX2ZpbGVuYW1lKQorICAgICAgICBpZiBuZWVkZWRfZmlsZToKKyAgICAgICAgICAgICMgV2hpY2ggbGF5ZXIgaXMgdGhpcyBmaWxlIGZyb20KKyAgICAgICAgICAgIG5lZWRlZF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKG5lZWRlZF9maWxlKQorICAgICAgICAgICAgaWYgbmVlZGVkX2xheWVybmFtZSAhPSBsYXllcm5hbWUgYW5kIG5vdCBuZWVkZWRfbGF5ZXJuYW1lIGluIGlnbm9yZV9sYXllcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IHNob3dfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCisgICAgICAgICAgICAgICAgICAgIG5lZWRlZF9maWxlID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KG5lZWRlZF9maWxlKQorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMiICUoZiwga2V5d29yZCwgbmVlZGVkX2ZpbGUpKQorCisgICAgZGVmIG1hdGNoX2luaGVyaXQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIk1hdGNoIHRoZSBpbmhlcml0IHh4eCBsaW5lIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5pbmhlcml0X3JlLm1hdGNoKGxpbmUpLCAiaW5oZXJpdHMiKQorCisgICAgZGVmIG1hdGNoX3JlcXVpcmVfaW5jbHVkZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiTWF0Y2ggdGhlIHJlcXVpcmUvaW5jbHVkZSB4eHggbGluZSIiIgorICAgICAgICBtID0gc2VsZi5yZXF1aXJlX3JlLm1hdGNoKGxpbmUpCisgICAgICAgIGtleXdvcmQgPSAicmVxdWlyZXMiCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgbSA9IHNlbGYuaW5jbHVkZV9yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAga2V5d29yZCA9ICJpbmNsdWRlcyIKKyAgICAgICAgcmV0dXJuIChtLCBrZXl3b3JkKQorCisgICAgZGVmIGNoZWNrX2Nyb3NzX2RlcGVuZHMoc2VsZiwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZSwgc2hvd19maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpOgorICAgICAgICAiIiJQcmludCB0aGUgREVQRU5EUy9SREVQRU5EUyBmaWxlIHRoYXQgY3Jvc3NlcyBhIGxheWVyIGJvdW5kYXJ5IiIiCisgICAgICAgIGJlc3RfcmVhbGZuID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihuZWVkZWRfZmlsZSlbMF0KKyAgICAgICAgbmVlZGVkX2xheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoYmVzdF9yZWFsZm4pCisgICAgICAgIGlmIG5lZWRlZF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgbmVlZGVkX2xheWVybmFtZSBpbiBpZ25vcmVfbGF5ZXJzOgorICAgICAgICAgICAgaWYgbm90IHNob3dfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoZikKKyAgICAgICAgICAgICAgICBiZXN0X3JlYWxmbiA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChiZXN0X3JlYWxmbikKKworICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyAlcyAlcyIgJSAoZiwga2V5d29yZCwgYmVzdF9yZWFsZm4pKQorCisKK2RlZiBtYWluKCk6CisKKyAgICBjbWRzID0gQ29tbWFuZHMoKQorCisgICAgZGVmIGFkZF9jb21tYW5kKGNtZG5hbWUsIGZ1bmN0aW9uLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIENvbnZlcnQgZG9jc3RyaW5nIGZvciBmdW5jdGlvbiB0byBoZWxwIChvbmUtbGluZXIgc2hvd24gaW4gbWFpbiAtLWhlbHApIGFuZCBkZXNjcmlwdGlvbiAoc2hvd24gaW4gc3ViY29tbWFuZCAtLWhlbHApCisgICAgICAgIGRvY3NwbGl0ID0gZnVuY3Rpb24uX19kb2NfXy5zcGxpdGxpbmVzKCkKKyAgICAgICAgaGVscCA9IGRvY3NwbGl0WzBdCisgICAgICAgIGlmIGxlbihkb2NzcGxpdCkgPiAxOgorICAgICAgICAgICAgZGVzYyA9ICdcbicuam9pbihkb2NzcGxpdFsxOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXNjID0gaGVscAorICAgICAgICBzdWJwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoY21kbmFtZSwgKmFyZ3MsIGhlbHA9aGVscCwgZGVzY3JpcHRpb249ZGVzYywgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd1RleHRIZWxwRm9ybWF0dGVyLCAqKmt3YXJncykKKyAgICAgICAgc3VicGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3VicGFyc2VyCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iQml0QmFrZSBsYXllcnMgdXRpbGl0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKworICAgIHBhcnNlcl9zaG93X2xheWVycyA9IGFkZF9jb21tYW5kKCdzaG93LWxheWVycycsIGNtZHMuZG9fc2hvd19sYXllcnMpCisKKyAgICBwYXJzZXJfYWRkX2xheWVyID0gYWRkX2NvbW1hbmQoJ2FkZC1sYXllcicsIGNtZHMuZG9fYWRkX2xheWVyKQorICAgIHBhcnNlcl9hZGRfbGF5ZXIuYWRkX2FyZ3VtZW50KCdsYXllcmRpcicsIGhlbHA9J0xheWVyIGRpcmVjdG9yeSB0byBhZGQnKQorCisgICAgcGFyc2VyX3JlbW92ZV9sYXllciA9IGFkZF9jb21tYW5kKCdyZW1vdmUtbGF5ZXInLCBjbWRzLmRvX3JlbW92ZV9sYXllcikKKyAgICBwYXJzZXJfcmVtb3ZlX2xheWVyLmFkZF9hcmd1bWVudCgnbGF5ZXJkaXInLCBoZWxwPSdMYXllciBkaXJlY3RvcnkgdG8gcmVtb3ZlICh3aWxkY2FyZHMgYWxsb3dlZCwgZW5jbG9zZSBpbiBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisgICAgcGFyc2VyX3JlbW92ZV9sYXllci5zZXRfZGVmYXVsdHMoZnVuYz1jbWRzLmRvX3JlbW92ZV9sYXllcikKKworICAgIHBhcnNlcl9zaG93X292ZXJsYXllZCA9IGFkZF9jb21tYW5kKCdzaG93LW92ZXJsYXllZCcsIGNtZHMuZG9fc2hvd19vdmVybGF5ZWQpCisgICAgcGFyc2VyX3Nob3dfb3ZlcmxheWVkLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlbmFtZXMnLCBoZWxwPSdpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGZvcm1hdHRpbmcsIGxpc3QgZmlsZW5hbWVzIG9mIGhpZ2hlciBwcmlvcml0eSByZWNpcGVzIHdpdGggdGhlIG9uZXMgdGhleSBvdmVybGF5IGluZGVudGVkIHVuZGVybmVhdGgnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9zaG93X292ZXJsYXllZC5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2FtZS12ZXJzaW9uJywgaGVscD0nb25seSBsaXN0IG92ZXJsYXllZCByZWNpcGVzIHdoZXJlIHRoZSB2ZXJzaW9uIGlzIHRoZSBzYW1lJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIHBhcnNlcl9zaG93X3JlY2lwZXMgPSBhZGRfY29tbWFuZCgnc2hvdy1yZWNpcGVzJywgY21kcy5kb19zaG93X3JlY2lwZXMpCisgICAgcGFyc2VyX3Nob3dfcmVjaXBlcy5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0naW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3JtYXR0aW5nLCBsaXN0IGZpbGVuYW1lcyBvZiBoaWdoZXIgcHJpb3JpdHkgcmVjaXBlcyB3aXRoIHRoZSBvbmVzIHRoZXkgb3ZlcmxheSBpbmRlbnRlZCB1bmRlcm5lYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tdWx0aXBsZScsIGhlbHA9J29ubHkgbGlzdCB3aGVyZSBtdWx0aXBsZSByZWNpcGVzIChpbiB0aGUgc2FtZSBsYXllciBvciBkaWZmZXJlbnQgbGF5ZXJzKSBleGlzdCBmb3IgdGhlIHNhbWUgcmVjaXBlIG5hbWUnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9zaG93X3JlY2lwZXMuYWRkX2FyZ3VtZW50KCctaScsICctLWluaGVyaXRzJywgaGVscD0nb25seSBsaXN0IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBuYW1lZCBjbGFzcycsIG1ldGF2YXI9J0NMQVNTJywgZGVmYXVsdD0nJykKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgncG5zcGVjJywgbmFyZ3M9Jz8nLCBoZWxwPSdvcHRpb25hbCByZWNpcGUgbmFtZSBzcGVjaWZpY2F0aW9uICh3aWxkY2FyZHMgYWxsb3dlZCwgZW5jbG9zZSBpbiBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisKKyAgICBwYXJzZXJfc2hvd19hcHBlbmRzID0gYWRkX2NvbW1hbmQoJ3Nob3ctYXBwZW5kcycsIGNtZHMuZG9fc2hvd19hcHBlbmRzKQorCisgICAgcGFyc2VyX2ZsYXR0ZW4gPSBhZGRfY29tbWFuZCgnZmxhdHRlbicsIGNtZHMuZG9fZmxhdHRlbikKKyAgICBwYXJzZXJfZmxhdHRlbi5hZGRfYXJndW1lbnQoJ2xheWVyJywgbmFyZ3M9JyonLCBoZWxwPSdPcHRpb25hbCBsYXllcihzKSB0byBmbGF0dGVuIChvdGhlcndpc2UgYWxsIGFyZSBmbGF0dGVuZWQpJykKKyAgICBwYXJzZXJfZmxhdHRlbi5hZGRfYXJndW1lbnQoJ291dHB1dGRpcicsIGhlbHA9J091dHB1dCBkaXJlY3RvcnknKQorCisgICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcyA9IGFkZF9jb21tYW5kKCdzaG93LWNyb3NzLWRlcGVuZHMnLCBjbWRzLmRvX3Nob3dfY3Jvc3NfZGVwZW5kcykKKyAgICBwYXJzZXJfc2hvd19jcm9zc19kZXBlbmRzLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlbmFtZXMnLCBoZWxwPSdzaG93IGZ1bGwgZmlsZSBwYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19jcm9zc19kZXBlbmRzLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pZ25vcmUnLCBoZWxwPSdpZ25vcmUgZGVwZW5kZW5jaWVzIG9uIGl0ZW1zIGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIocykgKHNwbGl0IG11bHRpcGxlIGxheWVyIG5hbWVzIHdpdGggY29tbWFzLCBubyBzcGFjZXMpJywgbWV0YXZhcj0nTEFZRVJOQU1FJykKKworICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoID0gYWRkX2NvbW1hbmQoJ2xheWVyaW5kZXgtZmV0Y2gnLCBjbWRzLmRvX2xheWVyaW5kZXhfZmV0Y2gpCisgICAgcGFyc2VyX2xheWVyaW5kZXhfZmV0Y2guYWRkX2FyZ3VtZW50KCctbicsICctLXNob3ctb25seScsIGhlbHA9J3Nob3cgZGVwZW5kZW5jaWVzIGFuZCBkbyBub3RoaW5nIGVsc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLWInLCAnLS1icmFuY2gnLCBoZWxwPSdicmFuY2ggbmFtZSB0byBmZXRjaCAoZGVmYXVsdCAlKGRlZmF1bHQpcyknLCBkZWZhdWx0PSdtYXN0ZXInKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pZ25vcmUnLCBoZWxwPSdhc3N1bWUgdGhlIHNwZWNpZmllZCBsYXllcnMgZG8gbm90IG5lZWQgdG8gYmUgZmV0Y2hlZC9hZGRlZCAoc2VwYXJhdGUgbXVsdGlwbGUgbGF5ZXJzIHdpdGggY29tbWFzLCBubyBzcGFjZXMpJywgbWV0YXZhcj0nTEFZRVInKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnbGF5ZXJuYW1lJywgbmFyZ3M9JysnLCBoZWxwPSdsYXllciB0byBmZXRjaCcpCisKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMgPSBhZGRfY29tbWFuZCgnbGF5ZXJpbmRleC1zaG93LWRlcGVuZHMnLCBjbWRzLmRvX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzKQorICAgIHBhcnNlcl9sYXllcmluZGV4X3Nob3dfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnJhbmNoJywgaGVscD0nYnJhbmNoIG5hbWUgdG8gZmV0Y2ggKGRlZmF1bHQgJShkZWZhdWx0KXMpJywgZGVmYXVsdD0nbWFzdGVyJykKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMuYWRkX2FyZ3VtZW50KCdsYXllcm5hbWUnLCBuYXJncz0nKycsIGhlbHA9J2xheWVyIHRvIHF1ZXJ5JykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBlbGlmIGFyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgdHJ5OgorICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKyAgICBleGNlcHQgVXNlckVycm9yIGFzIGVycjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlcnIpKQorICAgICAgICByZXQgPSAxCisKKyAgICByZXR1cm4gcmV0CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXByc2VydiBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYThkN2FjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYKQEAgLTAsMCArMSw1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpLCdsaWInKSkKKworaW1wb3J0IHByc2VydgoraW1wb3J0IHByc2Vydi5zZXJ2CisKK19fdmVyc2lvbl9fPSIxLjAuMCIKKworUFJIT1NUX0RFRkFVTFQ9JzAuMC4wLjAnCitQUlBPUlRfREVGQVVMVD04NTg1CisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB2ZXJzaW9uPSJCaXRiYWtlIFBSIFNlcnZpY2UgQ29yZSB2ZXJzaW9uICVzLCAlJXByb2cgdmVyc2lvbiAlcyIgJSAocHJzZXJ2Ll9fdmVyc2lvbl9fLCBfX3ZlcnNpb25fXyksCisgICAgICAgIHVzYWdlID0gIiVwcm9nIDwgLS1zdGFydCB8IC0tc3RvcCA+IFtvcHRpb25zXSIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1maWxlIiwgaGVscD0iZGF0YWJhc2UgZmlsZW5hbWUoZGVmYXVsdDogcHJzZXJ2LnNxbGl0ZTMpIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iZGJmaWxlIiwgdHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0icHJzZXJ2LnNxbGl0ZTMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxvZyIsIGhlbHA9ImxvZyBmaWxlbmFtZShkZWZhdWx0OiBwcnNlcnYubG9nKSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImxvZ2ZpbGUiLCB0eXBlPSJzdHJpbmciLCBkZWZhdWx0PSJwcnNlcnYubG9nIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1sb2dsZXZlbCIsIGhlbHA9ImxvZ2dpbmcgbGV2ZWwsIGkuZS4gQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLCBJTkZPLCBERUJVRyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0ibG9nbGV2ZWwiLCBkZWZhdWx0ID0gIklORk8iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXN0YXJ0IiwgaGVscD0ic3RhcnQgZGFlbW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzdGFydCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc3RvcCIsIGhlbHA9InN0b3AgZGFlbW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzdG9wIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1ob3N0IiwgaGVscD0iaXAgYWRkcmVzcyB0byBiaW5kIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iaG9zdCIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9UFJIT1NUX0RFRkFVTFQpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tcG9ydCIsIGhlbHA9InBvcnQgbnVtYmVyKGRlZmF1bHQ6IDg1ODUpIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icG9ydCIsIHR5cGU9ImludCIsIGRlZmF1bHQ9UFJQT1JUX0RFRkFVTFQpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisgICAgcHJzZXJ2LmluaXRfbG9nZ2VyKG9zLnBhdGguYWJzcGF0aChvcHRpb25zLmxvZ2ZpbGUpLG9wdGlvbnMubG9nbGV2ZWwpCisKKyAgICBpZiBvcHRpb25zLnN0YXJ0OgorICAgICAgICByZXQ9cHJzZXJ2LnNlcnYuc3RhcnRfZGFlbW9uKG9wdGlvbnMuZGJmaWxlLCBvcHRpb25zLmhvc3QsIG9wdGlvbnMucG9ydCxvcy5wYXRoLmFic3BhdGgob3B0aW9ucy5sb2dmaWxlKSkKKyAgICBlbGlmIG9wdGlvbnMuc3RvcDoKKyAgICAgICAgcmV0PXByc2Vydi5zZXJ2LnN0b3BfZGFlbW9uKG9wdGlvbnMuaG9zdCwgb3B0aW9ucy5wb3J0KQorICAgIGVsc2U6CisgICAgICAgIHJldD1wYXJzZXIucHJpbnRfaGVscCgpCisgICAgcmV0dXJuIHJldAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdCBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS1zZWxmdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjJlYjFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXNlbGZ0ZXN0CkBAIC0wLDAgKzEsNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cywgbG9nZ2luZworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksICdsaWInKSkKKworaW1wb3J0IHVuaXR0ZXN0Cit0cnk6CisgICAgaW1wb3J0IGJiCitleGNlcHQgUnVudGltZUVycm9yIGFzIGV4YzoKKyAgICBzeXMuZXhpdChzdHIoZXhjKSkKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQoJ3VzYWdlOiBbQkJfU0tJUF9ORVRURVNUUz15ZXNdICVzIFstdl0gW3Rlc3RuYW1lMSBbdGVzdG5hbWUyXS4uLl0nICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpCisKK3ZlcmJvc2l0eSA9IDEKKwordGVzdHMgPSBzeXMuYXJndlsxOl0KK2lmICctdicgaW4gc3lzLmFyZ3Y6CisgICAgdGVzdHMucmVtb3ZlKCctdicpCisgICAgdmVyYm9zaXR5ID0gMgorCitpZiB0ZXN0czoKKyAgICBpZiAnLS1oZWxwJyBpbiBzeXMuYXJndlsxOl06CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMCkKK2Vsc2U6CisgICAgdGVzdHMgPSBbImJiLnRlc3RzLmNvZGVwYXJzZXIiLAorICAgICAgICAgICAgICJiYi50ZXN0cy5jb3ciLAorICAgICAgICAgICAgICJiYi50ZXN0cy5kYXRhIiwKKyAgICAgICAgICAgICAiYmIudGVzdHMuZmV0Y2giLAorICAgICAgICAgICAgICJiYi50ZXN0cy5wYXJzZSIsCisgICAgICAgICAgICAgImJiLnRlc3RzLnV0aWxzIl0KKworZm9yIHQgaW4gdGVzdHM6CisgICAgdCA9ICcuJy5qb2luKHQuc3BsaXQoJy4nKVs6M10pCisgICAgX19pbXBvcnRfXyh0KQorCit1bml0dGVzdC5tYWluKGFyZ3Y9WyJiaXRiYWtlLXNlbGZ0ZXN0Il0gKyB0ZXN0cywgdmVyYm9zaXR5PXZlcmJvc2l0eSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRiYWtlLXdvcmtlciBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWYxN2I4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIKQEAgLTAsMCArMSw0MzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKK2Zyb20gYmIgaW1wb3J0IGZldGNoMgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGVycm5vCitpbXBvcnQgc2lnbmFsCisKKyMgVXNlcnMgc2hvdWxkbid0IGJlIHJ1bm5pbmcgdGhpcyBjb2RlIGRpcmVjdGx5CitpZiBsZW4oc3lzLmFyZ3YpICE9IDIgb3Igbm90IHN5cy5hcmd2WzFdLnN0YXJ0c3dpdGgoImRlY2FmYmFkIik6CisgICAgcHJpbnQoImJpdGJha2Utd29ya2VyIGlzIG1lYW50IGZvciBpbnRlcm5hbCBleGVjdXRpb24gYnkgYml0YmFrZSBpdHNlbGYsIHBsZWFzZSBkb24ndCB1c2UgaXQgc3RhbmRhbG9uZS4iKQorICAgIHN5cy5leGl0KDEpCisKK3Byb2ZpbGluZyA9IEZhbHNlCitpZiBzeXMuYXJndlsxXSA9PSAiZGVjYWZiYWRiYWQiOgorICAgIHByb2ZpbGluZyA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjUHJvZmlsZSBhcyBwcm9maWxlCisgICAgZXhjZXB0OgorICAgICAgICBpbXBvcnQgcHJvZmlsZQorCisjIFVuYnVmZmVyIHN0ZG91dCB0byBhdm9pZCBsb2cgdHJ1bmNhdGlvbiBpbiB0aGUgZXZlbnQKKyMgb2YgYW4gdW5vcmRlcmx5IGV4aXQgYXMgd2VsbCBhcyB0byBwcm92aWRlIHRpbWVseQorIyB1cGRhdGVzIHRvIGxvZyBmaWxlcyBmb3IgdXNlIHdpdGggdGFpbAordHJ5OgorICAgIGlmIHN5cy5zdGRvdXQubmFtZSA9PSAnPHN0ZG91dD4nOgorICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKK2V4Y2VwdDoKKyAgICBwYXNzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBiYi5tc2cubm90ZSgxLCBiYi5tc2cuZG9tYWluLkNhY2hlLCAiSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiBGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworCit3b3JrZXJfcGlwZSA9IHN5cy5zdGRvdXQuZmlsZW5vKCkKK2JiLnV0aWxzLm5vbmJsb2NraW5nZmQod29ya2VyX3BpcGUpCisKK2hhbmRsZXIgPSBiYi5ldmVudC5Mb2dIYW5kbGVyKCkKK2xvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKK2lmIDA6CisgICAgIyBDb2RlIHRvIHdyaXRlIG91dCBhIGxvZyBmaWxlIG9mIGFsbCBldmVudHMgcGFzc2luZyB0aHJvdWdoIHRoZSB3b3JrZXIKKyAgICBsb2dmaWxlbmFtZSA9ICIvdG1wL3dvcmtlcmxvZ2ZpbGUiCisgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICBjb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihsb2dmaWxlbmFtZSkKKyAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlbG9nKQorICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlbG9nKQorCit3b3JrZXJfcXVldWUgPSAiIgorCitkZWYgd29ya2VyX2ZpcmUoZXZlbnQsIGQpOgorICAgIGRhdGEgPSAiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgIjwvZXZlbnQ+IgorICAgIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoZGF0YSkKKworZGVmIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoZXZlbnQpOgorICAgIGdsb2JhbCB3b3JrZXJfcXVldWUKKworICAgIHdvcmtlcl9xdWV1ZSA9IHdvcmtlcl9xdWV1ZSArIGV2ZW50CisgICAgd29ya2VyX2ZsdXNoKCkKKworZGVmIHdvcmtlcl9mbHVzaCgpOgorICAgIGdsb2JhbCB3b3JrZXJfcXVldWUsIHdvcmtlcl9waXBlCisKKyAgICBpZiBub3Qgd29ya2VyX3F1ZXVlOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgd3JpdHRlbiA9IG9zLndyaXRlKHdvcmtlcl9waXBlLCB3b3JrZXJfcXVldWUpCisgICAgICAgIHdvcmtlcl9xdWV1ZSA9IHdvcmtlcl9xdWV1ZVt3cml0dGVuOl0KKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOIGFuZCBlLmVycm5vICE9IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgcmFpc2UKKworZGVmIHdvcmtlcl9jaGlsZF9maXJlKGV2ZW50LCBkKToKKyAgICBnbG9iYWwgd29ya2VyX3BpcGUKKworICAgIGRhdGEgPSAiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgIjwvZXZlbnQ+IgorICAgIHRyeToKKyAgICAgICAgd29ya2VyX3BpcGUud3JpdGUoZGF0YSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgc2lndGVybV9oYW5kbGVyKE5vbmUsIE5vbmUpCisgICAgICAgIHJhaXNlCisKK2JiLmV2ZW50Lndvcmtlcl9maXJlID0gd29ya2VyX2ZpcmUKKworbGYgPSBOb25lCisjbGYgPSBvcGVuKCIvdG1wL3dvcmtlcmNvbW1hbmRsb2ciLCAidysiKQorZGVmIHdvcmtlcmxvZ193cml0ZShtc2cpOgorICAgIGlmIGxmOgorICAgICAgICBsZi53cml0ZShtc2cpCisgICAgICAgIGxmLmZsdXNoKCkKKworZGVmIHNpZ3Rlcm1faGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0RGTCkKKyAgICBvcy5raWxscGcoMCwgc2lnbmFsLlNJR1RFUk0pCisgICAgc3lzLmV4aXQoKQorCitkZWYgZm9ya19vZmZfdGFzayhjZmcsIGRhdGEsIHdvcmtlcmRhdGEsIGZuLCB0YXNrLCB0YXNrbmFtZSwgYXBwZW5kcywgdGFza2RlcGRhdGEsIHF1aWV0ZXJyb3JzPUZhbHNlKToKKyAgICAjIFdlIG5lZWQgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50IEJFRk9SRSB0aGUgZm9yaywgc2luY2UKKyAgICAjIGEgZm9yaygpIG9yIGV4ZWMqKCkgYWN0aXZhdGVzIFBTRVVETy4uLgorCisgICAgZW52YmFja3VwID0ge30KKyAgICBmYWtlZW52ID0ge30KKyAgICB1bWFzayA9IE5vbmUKKworICAgIHRhc2tkZXAgPSB3b3JrZXJkYXRhWyJ0YXNrZGVwcyJdW2ZuXQorICAgIGlmICd1bWFzaycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsndW1hc2snXToKKyAgICAgICAgIyB1bWFzayBtaWdodCBjb21lIGluIGFzIGEgbnVtYmVyIG9yIHRleHQgc3RyaW5nLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIHVtYXNrID0gaW50KHRhc2tkZXBbJ3VtYXNrJ11bdGFza25hbWVdLDgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgdW1hc2sgPSB0YXNrZGVwWyd1bWFzayddW3Rhc2tuYW1lXQorCisgICAgIyBXZSBjYW4ndCB1c2UgdGhlIGZha2Vyb290IGVudmlyb25tZW50IGluIGEgZHJ5IHJ1biBhcyBpdCBwb3NzaWJseSBoYXNuJ3QgYmVlbiBidWlsdAorICAgIGlmICdmYWtlcm9vdCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnZmFrZXJvb3QnXSBhbmQgbm90IGNmZy5kcnlfcnVuOgorICAgICAgICBlbnZ2YXJzID0gKHdvcmtlcmRhdGFbImZha2Vyb290ZW52Il1bZm5dIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluICh2YXIuc3BsaXQoJz0nKSBmb3IgdmFyIGluIGVudnZhcnMpOgorICAgICAgICAgICAgZW52YmFja3VwW2tleV0gPSBvcy5lbnZpcm9uLmdldChrZXkpCisgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgZmFrZWVudltrZXldID0gdmFsdWUKKworICAgICAgICBmYWtlZGlycyA9ICh3b3JrZXJkYXRhWyJmYWtlcm9vdGRpcnMiXVtmbl0gb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIHAgaW4gZmFrZWRpcnM6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdSdW5uaW5nICVzOiVzIHVuZGVyIGZha2Vyb290LCBmYWtlZGlyczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbiwgdGFza25hbWUsICcsICcuam9pbihmYWtlZGlycykpKQorICAgIGVsc2U6CisgICAgICAgIGVudnZhcnMgPSAod29ya2VyZGF0YVsiZmFrZXJvb3Rub2VudiJdW2ZuXSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAodmFyLnNwbGl0KCc9JykgZm9yIHZhciBpbiBlbnZ2YXJzKToKKyAgICAgICAgICAgIGVudmJhY2t1cFtrZXldID0gb3MuZW52aXJvbi5nZXQoa2V5KQorICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGZha2VlbnZba2V5XSA9IHZhbHVlCisKKyAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgIHRyeToKKyAgICAgICAgcGlwZWluLCBwaXBlb3V0ID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVpbiA9IG9zLmZkb3BlbihwaXBlaW4sICdyYicsIDQwOTYpCisgICAgICAgIHBpcGVvdXQgPSBvcy5mZG9wZW4ocGlwZW91dCwgJ3diJywgMCkKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJmb3JrIGZhaWxlZDogJWQgKCVzKSIgJSAoZS5lcnJubywgZS5zdHJlcnJvcikpCisKKyAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgZGVmIGNoaWxkKCk6CisgICAgICAgICAgICBnbG9iYWwgd29ya2VyX3BpcGUKKyAgICAgICAgICAgIHBpcGVpbi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ3Rlcm1faGFuZGxlcikKKyAgICAgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgc2lndGVybV9oYW5kbGVyKQorICAgICAgICAgICAgYmIudXRpbHMuc2lnbmFsX29uX3BhcmVudF9leGl0KCJTSUdURVJNIikKKworICAgICAgICAgICAgIyBTYXZlIG91dCB0aGUgUElEIHNvIHRoYXQgdGhlIGV2ZW50IGNhbiBpbmNsdWRlIGl0IHRoZQorICAgICAgICAgICAgIyBldmVudHMKKyAgICAgICAgICAgIGJiLmV2ZW50Lndvcmtlcl9waWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgYmIuZXZlbnQud29ya2VyX2ZpcmUgPSB3b3JrZXJfY2hpbGRfZmlyZQorICAgICAgICAgICAgd29ya2VyX3BpcGUgPSBwaXBlb3V0CisKKyAgICAgICAgICAgICMgTWFrZSB0aGUgY2hpbGQgdGhlIHByb2Nlc3MgZ3JvdXAgbGVhZGVyIGFuZCBlbnN1cmUgbm8KKyAgICAgICAgICAgICMgY2hpbGQgcHJvY2VzcyB3aWxsIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGN1cnJlbnQgdGVybWluYWwKKyAgICAgICAgICAgICMgVGhpcyBlbnN1cmVzIHNpZ25hbHMgc2VudCB0byB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgbGlrZSBDdHJsK0MKKyAgICAgICAgICAgICMgZG9uJ3Qgc3RvcCB0aGUgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAgICAgb3Muc2V0c2lkKCkKKyAgICAgICAgICAgICMgTm8gc3RkaW4KKyAgICAgICAgICAgIG5ld3NpID0gb3Mub3Blbihvcy5kZXZudWxsLCBvcy5PX1JEV1IpCisgICAgICAgICAgICBvcy5kdXAyKG5ld3NpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisKKyAgICAgICAgICAgIGlmIHVtYXNrOgorICAgICAgICAgICAgICAgIG9zLnVtYXNrKHVtYXNrKQorCisgICAgICAgICAgICBkYXRhLnNldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsICIxIikKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9UQVNLREVQREFUQSIsIHRhc2tkZXBkYXRhKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsIHdvcmtlcmRhdGFbImJ1aWxkbmFtZSJdKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkRBVEUiLCB3b3JrZXJkYXRhWyJkYXRlIl0pCisgICAgICAgICAgICBkYXRhLnNldFZhcigiVElNRSIsIHdvcmtlcmRhdGFbInRpbWUiXSkKKyAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5zZXRfdGFza2RhdGEod29ya2VyZGF0YVsic2lnZGF0YSJdKQorICAgICAgICAgICAgcmV0ID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRoZV9kYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBhcHBlbmRzLCBkYXRhKQorICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhcignQkJfVEFTS0hBU0gnLCB3b3JrZXJkYXRhWyJydW5xX2hhc2giXVt0YXNrXSkKKworICAgICAgICAgICAgICAgICMgZXhwb3J0ZWRfdmFycygpIHJldHVybnMgYSBnZW5lcmF0b3Igd2hpY2ggKmNhbm5vdCogYmUgcGFzc2VkIHRvIG9zLmVudmlyb24udXBkYXRlKCkgCisgICAgICAgICAgICAgICAgIyBzdWNjZXNzZnVsbHkuIFdlIGFsc28gbmVlZCB0byB1bnNldCBhbnl0aGluZyBmcm9tIHRoZSBlbnZpcm9ubWVudCB3aGljaCBzaG91bGRuJ3QgYmUgdGhlcmUgCisgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGJiLmRhdGEuZXhwb3J0ZWRfdmFycyh0aGVfZGF0YSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5lbXB0eV9lbnZpcm9ubWVudCgpCisgICAgICAgICAgICAgICAgZm9yIGUsIHYgaW4gZXhwb3J0czoKKyAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvbltlXSA9IHYKKyAgICAgICAgICAgICAgICBmb3IgZSBpbiBmYWtlZW52OgorICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2VdID0gZmFrZWVudltlXQorICAgICAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXIoZSwgZmFrZWVudltlXSkKKyAgICAgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyRmxhZyhlLCAnZXhwb3J0JywgIjEiKQorCisgICAgICAgICAgICAgICAgaWYgcXVpZXRlcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhckZsYWcodGFza25hbWUsICJxdWlldGVycm9ycyIsICIxIikKKworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0ZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoc3RyKGV4YykpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBjZmcuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICByZXR1cm4gYmIuYnVpbGQuZXhlY190YXNrKGZuLCB0YXNrbmFtZSwgdGhlX2RhdGEsIGNmZy5wcm9maWxlKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGlmIG5vdCBwcm9maWxpbmc6CisgICAgICAgICAgICBvcy5fZXhpdChjaGlsZCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS0lcy5sb2ciICUgKGZuLnJlcGxhY2UoIi8iLCAiLSIpICsgIi0iICsgdGFza25hbWUpCisgICAgICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgICAgIHRyeTogCisgICAgICAgICAgICAgICAgcmV0ID0gcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgY2hpbGQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhwcm9mbmFtZSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZm5hbWUpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQocmV0KQorICAgIGVsc2U6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGVudmJhY2t1cC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25ba2V5XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorCisgICAgcmV0dXJuIHBpZCwgcGlwZWluLCBwaXBlb3V0CisKK2NsYXNzIHJ1blF1ZXVlV29ya2VyUGlwZSgpOgorICAgICIiIgorICAgIEFic3RyYWN0aW9uIGZvciBhIHBpcGUgYmV0d2VlbiBhIHdvcmtlciB0aHJlYWQgYW5kIHRoZSB3b3JrZXIgc2VydmVyCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVpbiwgcGlwZW91dCk6CisgICAgICAgIHNlbGYuaW5wdXQgPSBwaXBlaW4KKyAgICAgICAgaWYgcGlwZW91dDoKKyAgICAgICAgICAgIHBpcGVvdXQuY2xvc2UoKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIHN0YXJ0ID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlICsgc2VsZi5pbnB1dC5yZWFkKDEwMjQwMCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUdBSU46CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBlbmQgPSBsZW4oc2VsZi5xdWV1ZSkKKyAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgd2hpbGUgaW5kZXggIT0gLTE6CisgICAgICAgICAgICB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKHNlbGYucXVldWVbOmluZGV4KzhdKQorICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrODpdCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9ldmVudD4iKQorICAgICAgICByZXR1cm4gKGVuZCA+IHN0YXJ0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLnJlYWQoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxlbihzZWxmLnF1ZXVlKSA+IDA6CisgICAgICAgICAgICBwcmludCgiV2FybmluZywgd29ya2VyIGNoaWxkIGxlZnQgcGFydGlhbCBtZXNzYWdlOiAlcyIgJSBzZWxmLnF1ZXVlKQorICAgICAgICBzZWxmLmlucHV0LmNsb3NlKCkKKworbm9ybWFsZXhpdCA9IEZhbHNlCisKK2NsYXNzIEJpdGJha2VXb3JrZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGluKToKKyAgICAgICAgc2VsZi5pbnB1dCA9IGRpbgorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorICAgICAgICBzZWxmLmNvb2tlcmNmZyA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmJ1aWxkX3BpZHMgPSB7fQorICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzID0ge30KKyAgICAKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbikKKyAgICAgICAgIyBMZXQgU0lHSFVQIGV4aXQgYXMgU0lHVEVSTQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisKKyAgICBkZWYgc2lndGVybV9leGNlcHRpb24oc2VsZiwgc2lnbnVtLCBzdGFja2ZyYW1lKToKKyAgICAgICAgaWYgc2lnbnVtID09IHNpZ25hbC5TSUdURVJNOgorICAgICAgICAgICAgYmIud2FybigiV29ya2VyIHJlY2lldmVkIFNJR1RFUk0sIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBlbGlmIHNpZ251bSA9PSBzaWduYWwuU0lHSFVQOgorICAgICAgICAgICAgYmIud2FybigiV29ya2VyIHJlY2lldmVkIFNJR0hVUCwgc2h1dHRpbmcgZG93bi4uLiIpCisgICAgICAgIHNlbGYuaGFuZGxlX2ZpbmlzaG5vdyhOb25lKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0RGTCkKKyAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgc2VydmUoc2VsZik6ICAgICAgICAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIChyZWFkeSwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLmlucHV0XSArIFtpLmlucHV0IGZvciBpIGluIHNlbGYuYnVpbGRfcGlwZXMudmFsdWVzKCldLCBbXSAsIFtdLCAxKQorICAgICAgICAgICAgaWYgc2VsZi5pbnB1dCBpbiByZWFkeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHIgPSBzZWxmLmlucHV0LnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRU9GIG9uIHBpcGUsIHNlcnZlciBtdXN0IGhhdmUgdGVybWluYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbihzaWduYWwuU0lHVEVSTSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWUgKyByCisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbGVuKHNlbGYucXVldWUpOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oImNvb2tlcmNvbmZpZyIsIHNlbGYuaGFuZGxlX2Nvb2tlcmNmZykKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJ3b3JrZXJkYXRhIiwgc2VsZi5oYW5kbGVfd29ya2VyZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJydW50YXNrIiwgc2VsZi5oYW5kbGVfcnVudGFzaykKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJmaW5pc2hub3ciLCBzZWxmLmhhbmRsZV9maW5pc2hub3cpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicGluZyIsIHNlbGYuaGFuZGxlX3BpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicXVpdCIsIHNlbGYuaGFuZGxlX3F1aXQpCisKKyAgICAgICAgICAgIGZvciBwaXBlIGluIHNlbGYuYnVpbGRfcGlwZXM6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaXBlXS5yZWFkKCkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkX3BpZHMpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc193YWl0cGlkKCkKKyAgICAgICAgICAgIHdvcmtlcl9mbHVzaCgpCisKKworICAgIGRlZiBoYW5kbGVfaXRlbShzZWxmLCBpdGVtLCBmdW5jKToKKyAgICAgICAgaWYgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKCI8IiArIGl0ZW0gKyAiPiIpOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvIiArIGl0ZW0gKyAiPiIpCisgICAgICAgICAgICB3aGlsZSBpbmRleCAhPSAtMToKKyAgICAgICAgICAgICAgICBmdW5jKHNlbGYucXVldWVbKGxlbihpdGVtKSArIDIpOmluZGV4XSkKKyAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZVsoaW5kZXggKyBsZW4oaXRlbSkgKyAzKTpdCisgICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvIiArIGl0ZW0gKyAiPiIpCisKKyAgICBkZWYgaGFuZGxlX2Nvb2tlcmNmZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jb29rZXJjZmcgPSBwaWNrbGUubG9hZHMoZGF0YSkKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IGJiLmNvb2tlcmRhdGEuQ29va2VyRGF0YUJ1aWxkZXIoc2VsZi5jb29rZXJjZmcsIHdvcmtlcj1UcnVlKQorICAgICAgICBzZWxmLmRhdGFidWlsZGVyLnBhcnNlQmFzZUNvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLmRhdGFidWlsZGVyLmRhdGEKKworICAgIGRlZiBoYW5kbGVfd29ya2VyZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi53b3JrZXJkYXRhID0gcGlja2xlLmxvYWRzKGRhdGEpCisgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RGVidWdMZXZlbCA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdGRlYnVnIl0KKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlID0gc2VsZi53b3JrZXJkYXRhWyJsb2dkZWZhdWx0dmVyYm9zZSJdCisgICAgICAgIGJiLm1zZy5sb2dnZXJWZXJib3NlTG9ncyA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdHZlcmJvc2Vsb2dzIl0KKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zID0gc2VsZi53b3JrZXJkYXRhWyJsb2dkZWZhdWx0ZG9tYWluIl0KKyAgICAgICAgc2VsZi5kYXRhLnNldFZhcigiUFJTRVJWX0hPU1QiLCBzZWxmLndvcmtlcmRhdGFbInByaG9zdCJdKQorCisgICAgZGVmIGhhbmRsZV9waW5nKHNlbGYsIF8pOgorICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHBpbmdcbiIpCisKKyAgICAgICAgbG9nZ2VyLndhcm4oIlBvbmcgZnJvbSBiaXRiYWtlLXdvcmtlciEiKQorCisgICAgZGVmIGhhbmRsZV9xdWl0KHNlbGYsIGRhdGEpOgorICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHF1aXRcbiIpCisKKyAgICAgICAgZ2xvYmFsIG5vcm1hbGV4aXQKKyAgICAgICAgbm9ybWFsZXhpdCA9IFRydWUKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGRlZiBoYW5kbGVfcnVudGFzayhzZWxmLCBkYXRhKToKKyAgICAgICAgZm4sIHRhc2ssIHRhc2tuYW1lLCBxdWlldGVycm9ycywgYXBwZW5kcywgdGFza2RlcGRhdGEgPSBwaWNrbGUubG9hZHMoZGF0YSkKKyAgICAgICAgd29ya2VybG9nX3dyaXRlKCJIYW5kbGluZyBydW50YXNrICVzICVzICVzXG4iICUgKHRhc2ssIGZuLCB0YXNrbmFtZSkpCisKKyAgICAgICAgcGlkLCBwaXBlaW4sIHBpcGVvdXQgPSBmb3JrX29mZl90YXNrKHNlbGYuY29va2VyY2ZnLCBzZWxmLmRhdGEsIHNlbGYud29ya2VyZGF0YSwgZm4sIHRhc2ssIHRhc2tuYW1lLCBhcHBlbmRzLCB0YXNrZGVwZGF0YSwgcXVpZXRlcnJvcnMpCisKKyAgICAgICAgc2VsZi5idWlsZF9waWRzW3BpZF0gPSB0YXNrCisgICAgICAgIHNlbGYuYnVpbGRfcGlwZXNbcGlkXSA9IHJ1blF1ZXVlV29ya2VyUGlwZShwaXBlaW4sIHBpcGVvdXQpCisKKyAgICBkZWYgcHJvY2Vzc193YWl0cGlkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIG5vbmUgaXMgdGhlcmUgYXJlIG5vIHByb2Nlc3NlcyBhd2FpdGluZyByZXN1bHQgY29sbGVjdGlvbiwgb3RoZXJ3aXNlCisgICAgICAgIGNvbGxlY3QgdGhlIHByb2Nlc3MgZXhpdCBjb2RlcyBhbmQgY2xvc2UgdGhlIGluZm9ybWF0aW9uIHBpcGUuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoLTEsIG9zLldOT0hBTkcpCisgICAgICAgICAgICBpZiBwaWQgPT0gMCBvciBvcy5XSUZTVE9QUEVEKHN0YXR1cyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHdvcmtlcmxvZ193cml0ZSgiRXhpdCBjb2RlIG9mICVzIGZvciBwaWQgJXNcbiIgJSAoc3RhdHVzLCBwaWQpKQorCisgICAgICAgIGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgc3RhdHVzID0gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFBlciBzaGVsbCBjb252ZW50aW9ucyBmb3IgJD8sIHdoZW4gYSBwcm9jZXNzIGV4aXRzIGR1ZSB0bworICAgICAgICAgICAgIyBhIHNpZ25hbCwgd2UgcmV0dXJuIGFuIGV4aXQgY29kZSBvZiAxMjggKyBTSUdOVU0KKyAgICAgICAgICAgIHN0YXR1cyA9IDEyOCArIG9zLldURVJNU0lHKHN0YXR1cykKKworICAgICAgICB0YXNrID0gc2VsZi5idWlsZF9waWRzW3BpZF0KKyAgICAgICAgZGVsIHNlbGYuYnVpbGRfcGlkc1twaWRdCisKKyAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaWRdLmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuYnVpbGRfcGlwZXNbcGlkXQorCisgICAgICAgIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoIjxleGl0Y29kZT4iICsgcGlja2xlLmR1bXBzKCh0YXNrLCBzdGF0dXMpKSArICI8L2V4aXRjb2RlPiIpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaG5vdyhzZWxmLCBfKToKKyAgICAgICAgaWYgc2VsZi5idWlsZF9waWRzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byByZW1haW5pbmcgJXMgdGFza3MiLCBsZW4oc2VsZi5idWlsZF9waWRzKSkKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuYnVpbGRfcGlkcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwoLWssIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKC0xLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgcGlwZSBpbiBzZWxmLmJ1aWxkX3BpcGVzOgorICAgICAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaXBlXS5yZWFkKCkKKwordHJ5OgorICAgIHdvcmtlciA9IEJpdGJha2VXb3JrZXIoc3lzLnN0ZGluKQorICAgIGlmIG5vdCBwcm9maWxpbmc6CisgICAgICAgIHdvcmtlci5zZXJ2ZSgpCisgICAgZWxzZToKKyAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS13b3JrZXIubG9nIgorICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgd29ya2VyLnNlcnZlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKHByb2ZuYW1lKQorICAgICAgICAgICAgYmIudXRpbHMucHJvY2Vzc19wcm9maWxlbG9nKHByb2ZuYW1lKQorZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICBpZiBub3Qgbm9ybWFsZXhpdDoKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGUpKQord2hpbGUgbGVuKHdvcmtlcl9xdWV1ZSk6CisgICAgd29ya2VyX2ZsdXNoKCkKK3dvcmtlcmxvZ193cml0ZSgiZXhpdHRpbmciKQorc3lzLmV4aXQoMCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRkb2MgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2JpdGRvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzZkODhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9iaXRkb2MKQEAgLTAsMCArMSw1MzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3B0cGFyc2UsIG9zLCBzeXMKKworIyBiaXRiYWtlCitzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbGliJykpCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5wYXJzZQorZnJvbSAgIHN0cmluZyBpbXBvcnQgc3BsaXQsIGpvaW4KKworX192ZXJzaW9uX18gPSAiMC4wLjIiCisKK2NsYXNzIEhUTUxGb3JtYXR0ZXI6CisgICAgIiIiCisgICAgU2ltcGxlIGNsYXNzIHRvIGhlbHAgdG8gZ2VuZXJhdGUgc29tZSBzb3J0IG9mIEhUTUwgZmlsZXMuIEl0IGlzCisgICAgcXVpdGUgaW5mZXJpb3Igc29sdXRpb24gY29tcGFyZWQgdG8gZG9jYm9vaywgZ3RrZG9jLCBkb3h5Z2VuIGJ1dCBpdAorICAgIHNob3VsZCB3b3JrIGZvciBub3cuCisgICAgV2UndmUgYSBnbG9iYWwgaW50cm9kdWN0aW9uIHNpdGUgKGluZGV4Lmh0bWwpIGFuZCB0aGVuIG9uZSBzaXRlIGZvcgorICAgIHRoZSBsaXN0IG9mIGtleXMgKGFscGhhYmV0aWNhbCBzb3J0ZWQpIGFuZCBvbmUgZm9yIHRoZSBsaXN0IG9mIGdyb3VwcywKKyAgICBvbmUgc2l0ZSBmb3IgZWFjaCBrZXkgd2l0aCBsaW5rcyB0byB0aGUgcmVsYXRpb25zIGFuZCBncm91cHMuCisKKyAgICAgICAgaW5kZXguaHRtbAorICAgICAgICBhbGxfa2V5cy5odG1sCisgICAgICAgIGFsbF9ncm91cHMuaHRtbAorICAgICAgICBncm91cE5BTUUuaHRtbAorICAgICAgICBrZXlOQU1FLmh0bWwKKyAgICAiIiIKKworICAgIGRlZiByZXBsYWNlKHNlbGYsIHRleHQsICpwYWlycyk6CisgICAgICAgICIiIgorICAgICAgICBGcm9tIHB5ZG9jLi4uIGFsbW9zdCBpZGVudGljYWwgYXQgbGVhc3QKKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIHBhaXJzOgorICAgICAgICAgICAgKGEsIGIpID0gcGFpcnNbMF0KKyAgICAgICAgICAgIHRleHQgPSBqb2luKHNwbGl0KHRleHQsIGEpLCBiKQorICAgICAgICAgICAgcGFpcnMgPSBwYWlyc1sxOl0KKyAgICAgICAgcmV0dXJuIHRleHQKKyAgICBkZWYgZXNjYXBlKHNlbGYsIHRleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgRXNjYXBlIHN0cmluZyB0byBiZSBjb25mb3JtIEhUTUwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJlcGxhY2UodGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcmJywgJyZhbXA7JyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPCcsICcmbHQ7JyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPicsICcmZ3Q7JyApICkKKyAgICBkZWYgY3JlYXRlTmF2aWdhdG9yKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBuYXZnaWF0b3IKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIiI8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJnIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJhbGxfZ3JvdXBzLmh0bWwiPkdyb3VwczwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iYWxsX2tleXMuaHRtbCI+S2V5czwvYT48L3RkPgorPC90cj48L3RhYmxlPgorIiIiCisKKyAgICBkZWYgcmVsYXRlZEtleXMoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgSFRNTCB0byBsaW5rIHRvIGZvcmVpZ24ga2V5cworICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oaXRlbS5yZWxhdGVkKCkpID09IDA6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICB0eHQgPSAiPHA+PGI+U2VlIGFsc286PC9iPjxicj4iCisgICAgICAgIHR4dHMgPSBbXQorICAgICAgICBmb3IgaXQgaW4gaXRlbS5yZWxhdGVkKCk6CisgICAgICAgICAgICB0eHRzLmFwcGVuZCgiIiI8YSBocmVmPSJrZXklKGl0KXMuaHRtbCI+JShpdClzPC9hPiIiIiAlIHZhcnMoKSApCisKKyAgICAgICAgcmV0dXJuIHR4dCArICIsIi5qb2luKHR4dHMpCisKKyAgICBkZWYgZ3JvdXBzKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIEhUTUwgdG8gbGluayB0byByZWxhdGVkIGdyb3VwcworICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oaXRlbS5ncm91cHMoKSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisKKyAgICAgICAgdHh0ID0gIjxwPjxiPlNlZSBhbHNvOjwvYj48YnI+IgorICAgICAgICB0eHRzID0gW10KKyAgICAgICAgZm9yIGdyb3VwIGluIGl0ZW0uZ3JvdXBzKCk6CisgICAgICAgICAgICB0eHRzLmFwcGVuZCggIiIiPGEgaHJlZj0iZ3JvdXAlcy5odG1sIj4lczwvYT4gIiIiICUgKGdyb3VwLCBncm91cCkgKQorCisgICAgICAgIHJldHVybiB0eHQgKyAiLCIuam9pbih0eHRzKQorCisKKyAgICBkZWYgY3JlYXRlS2V5U2l0ZShzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIHNpdGUgZm9yIGEga2V5LiBJdCBjb250YWlucyB0aGUgaGVhZGVyL25hdmlnYXRvciwgYSBoZWFkaW5nLAorICAgICAgICB0aGUgZGVzY3JpcHRpb24sIGxpbmtzIHRvIHJlbGF0ZWQga2V5cyBhbmQgdG8gdGhlIGdyb3Vwcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuICIiIjwhZG9jdHlwZSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD48aGVhZD48dGl0bGU+S2V5ICVzPC90aXRsZT48L2hlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorJXMKKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+JXM8L3NwYW4+PC9oMj4KKworPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+UmVsYXRlZCBLZXlzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+R3JvdXBzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCisKKzwvYm9keT4KKyIiIiAgICAgJSAoaXRlbS5uYW1lKCksIHNlbGYuY3JlYXRlTmF2aWdhdG9yKCksIGl0ZW0ubmFtZSgpLCAKKyAgICAgICAgICAgc2VsZi5lc2NhcGUoaXRlbS5kZXNjcmlwdGlvbigpKSwgc2VsZi5yZWxhdGVkS2V5cyhpdGVtKSwgc2VsZi5ncm91cHMoaXRlbSkpCisKKyAgICBkZWYgY3JlYXRlR3JvdXBzU2l0ZShzZWxmLCBkb2MpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBHcm91cCBPdmVydmlldyBzaXRlCisgICAgICAgICIiIgorCisgICAgICAgIGdyb3VwcyA9ICIiCisgICAgICAgIHNvcnRlZF9ncm91cHMgPSBzb3J0ZWQoZG9jLmdyb3VwcygpKQorICAgICAgICBmb3IgZ3JvdXAgaW4gc29ydGVkX2dyb3VwczoKKyAgICAgICAgICAgIGdyb3VwcyArPSAiIiI8YSBocmVmPSJncm91cCVzLmh0bWwiPiVzPC9hPjxicj4iIiIgJSAoZ3JvdXAsIGdyb3VwKQorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPkdyb3VwIG92ZXJ2aWV3PC90aXRsZT48L2hlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorJXMKKzxoMj5BdmFpbGFibGUgR3JvdXBzPC9oMj4KKyVzCis8L2JvZHk+CisiIiIgJSAoc2VsZi5jcmVhdGVOYXZpZ2F0b3IoKSwgZ3JvdXBzKQorCisgICAgZGVmIGNyZWF0ZUluZGV4KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBpbmRleCBmaWxlCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPkJpdGJha2UgRG9jdW1lbnRhdGlvbjwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+RG9jdW1lbnRhdGlvbiBFbnRyYW5jZTwvaDI+Cis8YSBocmVmPSJhbGxfZ3JvdXBzLmh0bWwiPkFsbCBhdmFpbGFibGUgZ3JvdXBzPC9hPjxicj4KKzxhIGhyZWY9ImFsbF9rZXlzLmh0bWwiPkFsbCBhdmFpbGFibGUga2V5czwvYT48YnI+Cis8L2JvZHk+CisiIiIgJSBzZWxmLmNyZWF0ZU5hdmlnYXRvcigpCisKKyAgICBkZWYgY3JlYXRlS2V5c1NpdGUoc2VsZiwgZG9jKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBPdmVydmlldyBvZiBhbGwgYXZpbGFibGUga2V5cworICAgICAgICAiIiIKKyAgICAgICAga2V5cyA9ICIiCisgICAgICAgIHNvcnRlZF9rZXlzID0gc29ydGVkKGRvYy5kb2Nfa2V5cygpKQorICAgICAgICBmb3Iga2V5IGluIHNvcnRlZF9rZXlzOgorICAgICAgICAgICAga2V5cyArPSAiIiI8YSBocmVmPSJrZXklcy5odG1sIj4lczwvYT48YnI+IiIiICUgKGtleSwga2V5KQorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPktleSBvdmVydmlldzwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+QXZhaWxhYmxlIEtleXM8L2gyPgorJXMKKzwvYm9keT4KKyIiIiAlIChzZWxmLmNyZWF0ZU5hdmlnYXRvcigpLCBrZXlzKQorCisgICAgZGVmIGNyZWF0ZUdyb3VwU2l0ZShzZWxmLCBnciwgaXRlbXMsIF9kZXNjcmlwdGlvbiA9IE5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgc2l0ZSBmb3IgYSBncm91cDoKKyAgICAgICAgR3JvdXAgdGhlIG5hbWUgb2YgdGhlIGdyb3VwLCBpdGVtcyBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBrZXlzCisgICAgICAgIGluc2lkZSB0aGlzIGdyb3VwCisgICAgICAgICIiIgorICAgICAgICBncm91cHMgPSAiIgorICAgICAgICBkZXNjcmlwdGlvbiA9ICIiCisKKyAgICAgICAgIyBjcmVhdGUgYSBzZWN0aW9uIHdpdGggdGhlIGdyb3VwIGRlc2NyaXB0aW9ucworICAgICAgICBpZiBfZGVzY3JpcHRpb246CisgICAgICAgICAgICBkZXNjcmlwdGlvbiAgKz0gIjxoMiBEZXNjcmlwdGlvbiBvZiBHcm96cCAlczwvaDI+IiAlIGdyCisgICAgICAgICAgICBkZXNjcmlwdGlvbiAgKz0gX2Rlc2NyaXB0aW9uCisKKyAgICAgICAgaXRlbXMuc29ydChsYW1iZGEgeCwgeTpjbXAoeC5uYW1lKCksIHkubmFtZSgpKSkKKyAgICAgICAgZm9yIGdyb3VwIGluIGl0ZW1zOgorICAgICAgICAgICAgZ3JvdXBzICs9ICIiIjxhIGhyZWY9ImtleSVzLmh0bWwiPiVzPC9hPjxicj4iIiIgJSAoZ3JvdXAubmFtZSgpLCBncm91cC5uYW1lKCkpCisKKyAgICAgICAgcmV0dXJuICIiIjwhZG9jdHlwZSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD48aGVhZD48dGl0bGU+R3JvdXAgJXM8L3RpdGxlPjwvaGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+CislcworJXMKKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5LZXlzIGluIEdyb3VwICVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyVzCis8L3ByZT4KKzwvZGl2PgorPC9ib2R5PgorIiIiICUgKGdyLCBzZWxmLmNyZWF0ZU5hdmlnYXRvcigpLCBkZXNjcmlwdGlvbiwgZ3IsIGdyb3VwcykKKworCisKKyAgICBkZWYgY3JlYXRlQ1NTKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBDU1MgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiIi5zeW5vcHNpcywgLmNsYXNzc3lub3BzaXMKK3sKKyAgYmFja2dyb3VuZDogI2VlZWVlZTsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYWFhYTsKKyAgcGFkZGluZzogMC41ZW07Cit9CisucHJvZ3JhbWxpc3RpbmcKK3sKKyAgYmFja2dyb3VuZDogI2VlZWVmZjsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYWFmZjsKKyAgcGFkZGluZzogMC41ZW07Cit9CisudmFyaWFibGVsaXN0Cit7CisgIHBhZGRpbmc6IDRweDsKKyAgbWFyZ2luLWxlZnQ6IDNlbTsKK30KKy52YXJpYWJsZWxpc3QgdGQ6Zmlyc3QtY2hpbGQKK3sKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KK3RhYmxlLm5hdmlnYXRpb24KK3sKKyAgYmFja2dyb3VuZDogI2ZmZWVlZTsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2ZmYWFhYTsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworfQorLm5hdmlnYXRpb24gYQoreworICBjb2xvcjogIzc3MDAwMDsKK30KKy5uYXZpZ2F0aW9uIGE6dmlzaXRlZAoreworICBjb2xvcjogIzU1MDAwMDsKK30KKy5uYXZpZ2F0aW9uIC50aXRsZQoreworICBmb250LXNpemU6IDIwMCU7Cit9CitkaXYucmVmbmFtZWRpdgoreworICBtYXJnaW4tdG9wOiAyZW07Cit9CitkaXYuZ2FsbGVyeS1mbG9hdAoreworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMTBweDsKK30KK2Rpdi5nYWxsZXJ5LWZsb2F0IGltZworeworICBib3JkZXItc3R5bGU6IG5vbmU7Cit9CitkaXYuZ2FsbGVyeS1zcGFjZXIKK3sKKyAgY2xlYXI6IGJvdGg7Cit9CithCit7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KK2E6aG92ZXIKK3sKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjRkYwMDAwOworfQorIiIiCisKKworCitjbGFzcyBEb2N1bWVudGF0aW9uSXRlbToKKyAgICAiIiIKKyAgICBBIGNsYXNzIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uCisgICAgaXRlbS4gSXQgY29udGFpbnMgdGhlIGtleSBuYW1lLCBkZXNjcmlwdGlvbiwgYSBsaXN0IG9mIHJlbGF0ZWQgbmFtZXMsCisgICAgYW5kIHRoZSBncm91cCB0aGlzIGl0ZW0gaXMgY29udGFpbmVkIGluLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9ncm91cHMgID0gW10KKyAgICAgICAgc2VsZi5fcmVsYXRlZCA9IFtdCisgICAgICAgIHNlbGYuX25hbWUgICAgPSAiIgorICAgICAgICBzZWxmLl9kZXNjICAgID0gIiIKKworICAgIGRlZiBncm91cHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ncm91cHMKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIGRlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzYworCisgICAgZGVmIHJlbGF0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWxhdGVkCisKKyAgICBkZWYgc2V0TmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBzZXREZXNjcmlwdGlvbihzZWxmLCBkZXNjKToKKyAgICAgICAgc2VsZi5fZGVzYyA9IGRlc2MKKworICAgIGRlZiBhZGRHcm91cChzZWxmLCBncm91cCk6CisgICAgICAgIHNlbGYuX2dyb3Vwcy5hcHBlbmQoZ3JvdXApCisKKyAgICBkZWYgYWRkUmVsYXRpb24oc2VsZiwgcmVsYXRpb24pOgorICAgICAgICBzZWxmLl9yZWxhdGVkLmFwcGVuZChyZWxhdGlvbikKKworICAgIGRlZiBzb3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9yZWxhdGVkLnNvcnQoKQorICAgICAgICBzZWxmLl9ncm91cHMuc29ydCgpCisKKworY2xhc3MgRG9jdW1lbnRhdGlvbjoKKyAgICAiIiIKKyAgICBIb2xkcyB0aGUgZG9jdW1lbnRhdGlvbi4uLiB3aXRoIG1hcHBpbmdzIGZyb20ga2V5IHRvIGl0ZW1zLi4uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX19rZXlzICAgPSB7fQorICAgICAgICBzZWxmLl9fZ3JvdXBzID0ge30KKworICAgIGRlZiBpbnNlcnRfZG9jX2l0ZW0oc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBJbnNlcnQgdGhlIERvYyBJdGVtIGludG8gdGhlIGludGVybmFsIGxpc3QKKyAgICAgICAgb2YgcmVwcmVzZW50YXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW0uc29ydCgpCisgICAgICAgIHNlbGYuX19rZXlzW2l0ZW0ubmFtZSgpXSA9IGl0ZW0KKworICAgICAgICBmb3IgZ3JvdXAgaW4gaXRlbS5ncm91cHMoKToKKyAgICAgICAgICAgIGlmIG5vdCBncm91cCBpbiBzZWxmLl9fZ3JvdXBzOgorICAgICAgICAgICAgICAgIHNlbGYuX19ncm91cHNbZ3JvdXBdID0gW10KKyAgICAgICAgICAgIHNlbGYuX19ncm91cHNbZ3JvdXBdLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgc2VsZi5fX2dyb3Vwc1tncm91cF0uc29ydCgpCisKKworICAgIGRlZiBkb2NfaXRlbShzZWxmLCBrZXkpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBEb2N1bWVudGF0aW9uSW5zdGFuY2UgZGVzY3JpYmluZyB0aGUga2V5CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2tleXNba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRvY19rZXlzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBkb2N1bWVudGVkIEtFWVMgKG5hbWVzKQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19rZXlzLmtleXMoKQorCisgICAgZGVmIGdyb3VwcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbmFtZXMgb2YgYXZhaWxhYmxlIGdyb3VwcworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19ncm91cHMua2V5cygpCisKKyAgICBkZWYgZ3JvdXBfY29udGVudChzZWxmLCBncm91cF9uYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2Yga2V5cy9uYW1lcyB0aGF0IGFyZSBpbiBhIHNwZWNlZmljCisgICAgICAgIGdyb3VwIG9yIHRoZSBlbXB0eSBsaXN0CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2dyb3Vwc1tncm91cF9uYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gW10KKworCitkZWYgcGFyc2VfY21kbGluZShhcmdzKToKKyAgICAiIiIKKyAgICBQYXJzZSB0aGUgQ01EIGxpbmUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbi10dXBsZQorICAgICIiIgorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCB2ZXJzaW9uID0gIkJpdGJha2UgRG9jdW1lbnRhdGlvbiBUb29sIENvcmUgdmVyc2lvbiAlcywgJSVwcm9nIHZlcnNpb24gJXMiICUgKGJiLl9fdmVyc2lvbl9fLCBfX3ZlcnNpb25fXykpCisgICAgdXNhZ2UgID0gIiIiJXByb2cgW29wdGlvbnNdCisKK0NyZWF0ZSBhIHNldCBvZiBodG1sIHBhZ2VzIChkb2N1bWVudGF0aW9uKSBmb3IgYSBiaXRiYWtlLmNvbmYuLi4uCisiIiIKKworICAgICMgQWRkIHRoZSBuZWVkZWQgb3B0aW9ucworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLWMiLCAiLS1jb25maWciLCBoZWxwID0gIlVzZSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBzb3VyY2UiLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImNvbmZpZyIsIGRlZmF1bHQgPSBvcy5wYXRoLmpvaW4oImNvbmYiLCAiZG9jdW1lbnRhdGlvbi5jb25mIikgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oICItbyIsICItLW91dHB1dCIsIGhlbHAgPSAiT3V0cHV0IGRpcmVjdG9yeSBmb3IgaHRtbCBmaWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAib3V0cHV0IiwgZGVmYXVsdCA9ICJodG1sLyIgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oICItRCIsICAiLS1kZWJ1ZyIsIGhlbHAgPSAiSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImNvdW50IiwgZGVzdCA9ICJkZWJ1ZyIsIGRlZmF1bHQgPSAwICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJvdXRwdXQgbW9yZSBjaGl0LWNoYXIgdG8gdGhlIHRlcm1pbmFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInZlcmJvc2UiLCBkZWZhdWx0ID0gRmFsc2UgKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCBzeXMuYXJndiApCisgCisgICAgYmIubXNnLmluaXRfbXNnY29uZmlnKG9wdGlvbnMudmVyYm9zZSwgb3B0aW9ucy5kZWJ1ZykKKworICAgIHJldHVybiBvcHRpb25zLmNvbmZpZywgb3B0aW9ucy5vdXRwdXQKKworZGVmIG1haW4oKToKKyAgICAiIiIKKyAgICBUaGUgbWFpbiBNZXRob2QKKyAgICAiIiIKKworICAgIChjb25maWdfZmlsZSwgb3V0cHV0X2RpcikgPSBwYXJzZV9jbWRsaW5lKCBzeXMuYXJndiApCisKKyAgICAjIHJpZ2h0IHRvIGxldCB1cyBsb2FkIHRoZSBmaWxlIG5vdworICAgIHRyeToKKyAgICAgICAgZG9jdW1lbnRhdGlvbiA9IGJiLnBhcnNlLmhhbmRsZSggY29uZmlnX2ZpbGUsIGJiLmRhdGEuaW5pdCgpICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgYmIuZmF0YWwoICJVbmFibGUgdG8gb3BlbiAlcyIgJSBjb25maWdfZmlsZSApCisgICAgZXhjZXB0IGJiLnBhcnNlLlBhcnNlRXJyb3I6CisgICAgICAgIGJiLmZhdGFsKCAiVW5hYmxlIHRvIHBhcnNlICVzIiAlIGNvbmZpZ19maWxlICkKKworICAgIGlmIGlzaW5zdGFuY2UoZG9jdW1lbnRhdGlvbiwgZGljdCk6CisgICAgICAgIGRvY3VtZW50YXRpb24gPSBkb2N1bWVudGF0aW9uWyIiXQorCisgICAgIyBBc3N1bWluZyB3ZSd2ZSB0aGUgZmlsZSBsb2FkZWQgbm93LCB3ZSB3aWxsIGluaXRpYWxpemUgdGhlICd0cmVlJworICAgIGRvYyA9IERvY3VtZW50YXRpb24oKQorCisgICAgIyBkZWZpbmVkIHN0YXRlcworICAgIHN0YXRlX2JlZ2luID0gMAorICAgIHN0YXRlX3NlZSAgID0gMQorICAgIHN0YXRlX2dyb3VwID0gMgorCisgICAgZm9yIGtleSBpbiBiYi5kYXRhLmtleXMoZG9jdW1lbnRhdGlvbik6CisgICAgICAgIGRhdGEgICA9IGRvY3VtZW50YXRpb24uZ2V0VmFyRmxhZyhrZXksICJkb2MiKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBUaGUgRG9jdW1lbnRhdGlvbiBub3cgc3RhcnRzCisgICAgICAgIGRvY19pbnMgPSBEb2N1bWVudGF0aW9uSXRlbSgpCisgICAgICAgIGRvY19pbnMuc2V0TmFtZShrZXkpCisKKworICAgICAgICB0b2tlbnMgPSBkYXRhLnNwbGl0KCcgJykKKyAgICAgICAgc3RhdGUgPSBzdGF0ZV9iZWdpbgorICAgICAgICBzdHJpbmc9ICIiCisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN0cmlwKCcsJykKKworICAgICAgICAgICAgaWYgbm90IHN0YXRlID09IHN0YXRlX3NlZSBhbmQgdG9rZW4gPT0gIkBzZWUiOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfc2VlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgbm90IHN0YXRlID09IHN0YXRlX2dyb3VwIGFuZCB0b2tlbiAgPT0gIkBncm91cCI6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZV9ncm91cAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHN0YXRlID09IHN0YXRlX2JlZ2luOgorICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICVzIiAlIHRva2VuCisgICAgICAgICAgICBlbGlmIHN0YXRlID09IHN0YXRlX3NlZToKKyAgICAgICAgICAgICAgICBkb2NfaW5zLmFkZFJlbGF0aW9uKHRva2VuKQorICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSBzdGF0ZV9ncm91cDoKKyAgICAgICAgICAgICAgICBkb2NfaW5zLmFkZEdyb3VwKHRva2VuKQorCisgICAgICAgICMgc2V0IHRoZSBkZXNjcmlwdGlvbgorICAgICAgICBkb2NfaW5zLnNldERlc2NyaXB0aW9uKHN0cmluZykKKyAgICAgICAgZG9jLmluc2VydF9kb2NfaXRlbShkb2NfaW5zKQorCisgICAgIyBsZXQgdXMgY3JlYXRlIHRoZSBIVE1MIG5vdworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRwdXRfZGlyKQorICAgIG9zLmNoZGlyKG91dHB1dF9kaXIpCisKKyAgICAjIExldCB1cyBjcmVhdGUgdGhlIHNpdGVzIG5vdy4gV2UgZG8gaXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcgorICAgICMgU3RhcnQgd2l0aCB0aGUgaW5kZXguaHRtbC4gSXQgd2lsbCBwb2ludCB0byBzaXRlcyBleHBsYWluaW5nIGFsbAorICAgICMga2V5cyBhbmQgZ3JvdXBzCisgICAgaHRtbF9zbGF2ZSA9IEhUTUxGb3JtYXR0ZXIoKQorCisgICAgZiA9IGZpbGUoJ3N0eWxlLmNzcycsICd3JykKKyAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUNTUygpCisKKyAgICBmID0gZmlsZSgnaW5kZXguaHRtbCcsICd3JykKKyAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUluZGV4KCkKKworICAgIGYgPSBmaWxlKCdhbGxfZ3JvdXBzLmh0bWwnLCAndycpCisgICAgcHJpbnQgPj4gZiwgaHRtbF9zbGF2ZS5jcmVhdGVHcm91cHNTaXRlKGRvYykKKworICAgIGYgPSBmaWxlKCdhbGxfa2V5cy5odG1sJywgJ3cnKQorICAgIHByaW50ID4+IGYsIGh0bWxfc2xhdmUuY3JlYXRlS2V5c1NpdGUoZG9jKQorCisgICAgIyBub3cgZm9yIGVhY2ggZ3JvdXAgY3JlYXRlIHRoZSBzaXRlCisgICAgZm9yIGdyb3VwIGluIGRvYy5ncm91cHMoKToKKyAgICAgICAgZiA9IGZpbGUoJ2dyb3VwJXMuaHRtbCcgJSBncm91cCwgJ3cnKQorICAgICAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUdyb3VwU2l0ZShncm91cCwgZG9jLmdyb3VwX2NvbnRlbnQoZ3JvdXApKQorCisgICAgIyBub3cgZm9yIHRoZSBrZXlzCisgICAgZm9yIGtleSBpbiBkb2MuZG9jX2tleXMoKToKKyAgICAgICAgZiA9IGZpbGUoJ2tleSVzLmh0bWwnICUgZG9jLmRvY19pdGVtKGtleSkubmFtZSgpLCAndycpCisgICAgICAgIHByaW50ID4+IGYsIGh0bWxfc2xhdmUuY3JlYXRlS2V5U2l0ZShkb2MuZG9jX2l0ZW0oa2V5KSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9pbWFnZS13cml0ZXIgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL2ltYWdlLXdyaXRlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDcxMTY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi9pbWFnZS13cml0ZXIKQEAgLTAsMCArMSwxMjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwgJ2xpYicpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2ltcG9ydCBndGsKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHB5Z3RrCisKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuZGVwbG95aW1hZ2VkaWFsb2cgaW1wb3J0IERlcGxveUltYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuaW1hZ2VzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IEltYWdlU2VsZWN0aW9uRGlhbG9nCisKKyMgSSBwdXQgYWxsIHRoZSBmcyBiaXRiYWtlIHN1cHBvcnRlZCBoZXJlLiBOZWVkIG1vcmUgdGVzdC4KK0RFUExPWUFCTEVfSU1BR0VfVFlQRVMgPSBbImpmZnMyIiwgImNyYW1mcyIsICJleHQyIiwgImV4dDMiLCAiZXh0NCIsICJidHJmcyIsICJzcXVhc2hmcyIsICJ1YmkiLCAidm1kayJdCitUaXRsZSA9ICJVU0IgSW1hZ2UgV3JpdGVyIgorCitjbGFzcyBEZXBsb3lXaW5kb3coZ3RrLldpbmRvdyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3BhdGg9JycpOgorICAgICAgICBzdXBlcihEZXBsb3lXaW5kb3csIHNlbGYpLl9faW5pdF9fKCkKKworICAgICAgICBpZiBsZW4oaW1hZ2VfcGF0aCkgPiAwOgorICAgICAgICAgICAgdmFsaWQgPSBUcnVlCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VfcGF0aCk6CisgICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5JbnZhbGlkIGltYWdlIGZpbGUgcGF0aDogJXMuPC9iPlxuUHJlc3MgPGI+U2VsZWN0IEltYWdlPC9iPiB0byBzZWxlY3QgYW4gaW1hZ2UuIiAlIGltYWdlX3BhdGgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChpbWFnZV9wYXRoKQorICAgICAgICAgICAgICAgIGV4dGVuZF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChpbWFnZV9wYXRoKVsxXVsxOl0KKyAgICAgICAgICAgICAgICBpZiBleHRlbmRfbmFtZSBub3QgaW4gREVQTE9ZQUJMRV9JTUFHRV9UWVBFUzoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+VW5kZXBsb3lhYmxlIGltZ2UgdHlwZTogJXM8L2I+XG5QcmVzcyA8Yj5TZWxlY3QgSW1hZ2U8L2I+IHRvIHNlbGVjdCBhbiBpbWFnZS4iICUgZXh0ZW5kX25hbWUKKworICAgICAgICAgICAgaWYgbm90IHZhbGlkOgorICAgICAgICAgICAgICAgIGltYWdlX3BhdGggPSAnJworICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLlNUT0NLX0RJQUxPR19JTkZPKQorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nID0gRGVwbG95SW1hZ2VEaWFsb2coVGl0bGUsIGltYWdlX3BhdGgsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IsIE5vbmUsIHN0YW5kYWxvbmU9VHJ1ZSkKKyAgICAgICAgY2xvc2VfYnV0dG9uID0gc2VsZi5kZXBsb3lfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGNsb3NlX2J1dHRvbikKKyAgICAgICAgY2xvc2VfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBndGsubWFpbl9xdWl0KQorCisgICAgICAgIHdyaXRlX2J1dHRvbiA9IHNlbGYuZGVwbG95X2RpYWxvZy5hZGRfYnV0dG9uKCJXcml0ZSBVU0IgaW1hZ2UiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKHdyaXRlX2J1dHRvbikKKworICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnc2VsZWN0X2ltYWdlX2NsaWNrZWQnLCBzZWxmLnNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnZGVzdHJveScsIGd0ay5tYWluX3F1aXQpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5kZXBsb3lfZGlhbG9nLnNob3coKQorCisgICAgZGVmIHNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKHNlbGYsIGRpYWxvZyk6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGRpYWxvZyA9IEltYWdlU2VsZWN0aW9uRGlhbG9nKGN3ZCwgREVQTE9ZQUJMRV9JTUFHRV9UWVBFUywgVGl0bGUsIHNlbGYsIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUgKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKworICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgaWYgbm90IGRpYWxvZy5pbWFnZV9uYW1lczoKKyAgICAgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPlxuQ2xpY2tlZCB0aGUgcmFkaW8gYnV0dG9uIHRvIHNlbGVjdCBhIGltYWdlLiIKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5TVE9DS19ESUFMT0dfSU5GTykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgIyBnZXQgdGhlIGZ1bGwgcGF0aCBvZiBpbWFnZQorICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihkaWFsb2cuaW1hZ2VfZm9sZGVyLCBkaWFsb2cuaW1hZ2VfbmFtZXNbMF0pCisgICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3RleHRfYnVmZmVyKGltYWdlX3BhdGgpCisgICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3BhdGgoaW1hZ2VfcGF0aCkKKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgWy1oXSBbaW1hZ2VfZmlsZV0KKworJXByb2cgd3JpdGVzIGJvb3RhYmxlIGltYWdlcyB0byBVU0IgZGV2aWNlcy4gWW91IGNhbgorcHJvdmlkZSB0aGUgaW1hZ2UgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIHNlbGVjdCBpdCB1c2luZyB0aGUgR1VJLiIiIikKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKyAgICBpbWFnZV9maWxlID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPiAxIGVsc2UgJycKKyAgICBkdyA9IERlcGxveVdpbmRvdyhpbWFnZV9maWxlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRyeToKKyAgICAgICAgbWFpbigpCisgICAgICAgIGd0ay5tYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoMykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlciBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTFjZTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2Jpbi90b2FzdGVyCkBAIC0wLDAgKzEsMzUyIEBACisjIS9iaW4vc2gKKyMgKGMpIDIwMTMgSW50ZWwgQ29ycC4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworIyBUaGlzIHNjcmlwdCBjYW4gYmUgcnVuIGluIHR3byBtb2Rlcy4KKworIyBXaGVuIHVzZWQgd2l0aCAic291cmNlIiwgZnJvbSBhIGJ1aWxkIGRpcmVjdG9yeSwKKyMgaXQgZW5hYmxlcyB0b2FzdGVyIGV2ZW50IGxvZ2dpbmcgYW5kIHN0YXJ0cyB0aGUgYml0YmFrZSByZXNpZGVudCBzZXJ2ZXIuCisjIHVzZSBhczogIHNvdXJjZSB0b2FzdGVyIFtzdGFydHxzdG9wXSBbbm93ZWJdIFtub3VpXQorCisjIFdoZW4gaXQgaXMgY2FsbGVkIGFzIGEgc3RhbmQtYWxvbmUgc2NyaXB0LCBpdCBzdGFydHMganVzdCB0aGUKKyMgd2ViIHNlcnZlciwgYW5kIHRoZSBidWlsZGluZyBzaGFsbCBiZSBkb25lIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UuCisjIEFzIHNjcmlwdCwgaXQgd2lsbCBub3QgcmV0dXJuIHRvIHRoZSBjb21tYW5kIHByb21wdC4gU3RvcCB3aXRoIEN0cmwtQy4KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8ga2lsbCBhIGJhY2tncm91bmQgdG9hc3RlciBkZXZlbG9wbWVudCBzZXJ2ZXIKKword2Vic2VydmVyS2lsbEFsbCgpCit7CisgICAgbG9jYWwgcGlkZmlsZQorICAgIGZvciBwaWRmaWxlIGluICR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQ7IGRvCisgICAgICAgIGlmIFsgLWYgJHtwaWRmaWxlfSBdOyB0aGVuCisgICAgICAgICAgICBwaWQ9YGNhdCAke3BpZGZpbGV9YAorICAgICAgICAgICAgd2hpbGUga2lsbCAtMCAkcGlkIDI+L2Rldi9udWxsOyBkbworICAgICAgICAgICAgICAgIGtpbGwgLVNJR1RFUk0gLSRwaWQgMj4vZGV2L251bGwKKyAgICAgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgICAgICAgIyBLaWxsIHByb2Nlc3NlcyBpZiB0aGV5IGFyZSBzdGlsbCBydW5uaW5nIC0gbWF5IGhhcHBlbiBpbiBpbnRlcmFjdGl2ZSBzaGVsbHMKKyAgICAgICAgICAgICAgICBwcyBmdXggfCBncmVwICJweXRob24uKm1hbmFnZS5weSBydW5zZXJ2ZXIiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IHhhcmdzIGtpbGwKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHJtICAke3BpZGZpbGV9CisgICAgICAgIGZpCisgICAgZG9uZQorfQorCit3ZWJzZXJ2ZXJTdGFydEFsbCgpCit7CisgICAgIyBkbyBub3Qgc3RhcnQgaWYgdG9hc3Rlcm1haW4gcG9pbnRzIHRvIGEgdmFsaWQgcHJvY2VzcworICAgIGlmICEgY2F0ICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIiAyPi9kZXYvbnVsbCB8IHhhcmdzIC1Je30ga2lsbCAtMCB7fSA7IHRoZW4KKyAgICAgICAgcmV0dmFsPTEKKyAgICAgICAgcm0gIiR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQiCisgICAgZmkKKworICAgIHJldHZhbD0wCisgICAgaWYgWyAiJFRPQVNURVJfTUFOQUdFRCIgJz0nICcxJyBdOyB0aGVuCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBzeW5jZGIgfHwgcmV0dmFsPTEKKyAgICBlbHNlCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBzeW5jZGIgLS1ub2lucHV0IHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0gfHwgcmV0dmFsPTIKKyAgICBpZiBbICRyZXR2YWwgLWVxIDEgXTsgdGhlbgorICAgICAgICBlY2hvICJGYWlsZWQgZGIgc3luYywgc3RvcHBpbmcgc3lzdGVtIHN0YXJ0IiAxPiYyCisgICAgZWxpZiBbICRyZXR2YWwgLWVxIDIgXTsgdGhlbgorICAgICAgICBwcmludGYgIlxuRXJyb3Igb24gbWlncmF0aW9uLCB0cnlpbmcgdG8gcmVjb3Zlci4uLiBcbiIKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIDAwMDFfaW5pdGlhbCAtLWZha2UKKyAgICAgICAgcmV0dmFsPTAKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBpZiBbICIkVE9BU1RFUl9NQU5BR0VEIiA9ICcxJyBdOyB0aGVuCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIGJsZGNvbnRyb2wgfHwgcmV0dmFsPTEKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MgIC0tdHJhY2ViYWNrIHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBpZiBbICRyZXR2YWwgLWVxIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJTdGFydGluZyB3ZWJzZXJ2ZXIuLi4iCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5zZXJ2ZXIgIjAuMC4wLjA6JFdFQl9QT1JUIiA8L2Rldi9udWxsID4+JHtCVUlMRERJUn0vdG9hc3Rlcl93ZWIubG9nIDI+JjEgJiBlY2hvICQhID4ke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgaWYgISBjYXQgIiR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQiIHwgeGFyZ3MgLUl7fSBraWxsIC0wIHt9IDsgdGhlbgorICAgICAgICAgICAgcmV0dmFsPTEKKyAgICAgICAgICAgIHJtICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJXZWJzZXJ2ZXIgYWRkcmVzczogIGh0dHA6Ly8wLjAuMC4wOiRXRUJfUE9SVC8iCisgICAgICAgIGZpCisgICAgZmkKKyAgICByZXR1cm4gJHJldHZhbAorfQorCisjIEhlbHBlciBmdW5jdGlvbnMgdG8gYWRkIGEgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZpbGUKKworYWRkdG9Db25maWd1cmF0aW9uKCkKK3sKKyAgICBmaWxlPSQxCisgICAgc2hpZnQKKyAgICBlY2hvICIjQ3JlYXRlZCBieSB0b2FzdGVyIHN0YXJ0IHNjcmlwdCIgPiAke0JVSUxERElSfS9jb25mLyRmaWxlCisgICAgZm9yIHZhciBpbiAiJEAiOyBkbyBlY2hvICR2YXIgPj4gJHtCVUlMRERJUn0vY29uZi8kZmlsZTsgZG9uZQorfQorCitJTlNUT1BTWVNURU09MAorCisjIGRlZmluZSB0aGUgc3RvcCBjb21tYW5kCitzdG9wX3N5c3RlbSgpCit7CisgICAgIyBwcmV2ZW50IHJlZW50cnkKKyAgICBpZiBbICRJTlNUT1BTWVNURU0gLWVxIDEgXTsgdGhlbiByZXR1cm47IGZpCisgICAgSU5TVE9QU1lTVEVNPTEKKyAgICBpZiBbIC1mICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkIF07IHRoZW4KKyAgICAgICAga2lsbCBgY2F0ICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkYCAyPi9kZXYvbnVsbAorICAgICAgICBybSAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZAorICAgIGZpCisgICAgQkJTRVJWRVI9MC4wLjAuMDotMSBiaXRiYWtlIC1tCisgICAgdW5zZXQgQkJTRVJWRVIKKyAgICB3ZWJzZXJ2ZXJLaWxsQWxsCisgICAgIyBmb3JjZSBzdG9wIGFueSBtaXNiZWhhdmluZyBiaXRiYWtlIHNlcnZlcgorICAgIGxzb2YgYml0YmFrZS5sb2NrIHwgYXdrICd7cHJpbnQgJDJ9JyB8IGdyZXAgIlswLTldXCsiIHwgeGFyZ3MgLW4xIC1yIGtpbGwKKyAgICB0cmFwIC0gU0lHSFVQCisgICAgI3RyYXAgLSBTSUdDSExECisgICAgSU5TVE9QU1lTVEVNPTAKK30KKworY2hlY2tfcGlkYnlmaWxlKCkgeworICAgIFsgLWUgJDEgXSAmJiBraWxsIC0wIGBjYXQgJDFgIDI+L2Rldi9udWxsCit9CisKKworbm90aWZ5X2NobGRleGl0KCkgeworICAgIGlmIFsgJE5PVE9BU1RFUlVJIC1lcSAwIF07IHRoZW4KKyAgICAgICAgY2hlY2tfcGlkYnlmaWxlICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkICYmIHJldHVybgorICAgICAgICBzdG9wX3N5c3RlbQorICAgIGZpCit9CisKKwordmVyaWZ5X3ByZXJlcSgpIHsKKyAgICAjIFZlcmlmeSBwcmVyZXF1aXNpdGVzCisKKyAgICBpZiAhIGVjaG8gImltcG9ydCBkamFuZ287IHByaW50ICgxLCkgPT0gZGphbmdvLlZFUlNJT05bMDoxXSBhbmQgZGphbmdvLlZFUlNJT05bMToyXVswXSBpbiAoNiwpIiB8IHB5dGhvbiAyPi9kZXYvbnVsbCB8IGdyZXAgVHJ1ZSA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIHByaW50ZiAiVGhpcyBwcm9ncmFtIG5lZWRzIERqYW5nbyAxLjYuIFBsZWFzZSBpbnN0YWxsIHdpdGhcblxucGlwIGluc3RhbGwgZGphbmdvPT0xLjZcbiIKKyAgICAgICAgcmV0dXJuIDIKKyAgICBmaQorCisgICAgaWYgISBlY2hvICJpbXBvcnQgc291dGg7IHByaW50IHJlZHVjZShsYW1iZGEgeCwgeTogMiBpZiB4PT0yIGVsc2UgMCBpZiB4ID09IDAgZWxzZSB5LCBtYXAobGFtYmRhIHg6IDErY21wKHhbMV0teFswXSwwKSwgemlwKFswLDgsNF0sIG1hcChpbnQsc291dGguX192ZXJzaW9uX18uc3BsaXQoXCIuXCIpKSkpKSA+IDAiIHwgcHl0aG9uIDI+L2Rldi9udWxsIHwgZ3JlcCBUcnVlID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgcHJpbnRmICJUaGlzIHByb2dyYW0gbmVlZHMgU291dGggMC44LjQuIFBsZWFzZSBpbnN0YWxsIHdpdGhcblxucGlwIGluc3RhbGwgc291dGg9PTAuOC40XG4iCisgICAgICAgIHJldHVybiAyCisgICAgZmkKKyAgICByZXR1cm4gMAorfQorCisKKyMgcmVhZCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycworaWYgWyAtbiAiJEJBU0hfU09VUkNFIiBdIDsgdGhlbgorICAgIFRPQVNURVI9JHtCQVNIX1NPVVJDRX0KK2VsaWYgWyAtbiAiJFpTSF9OQU1FIiBdIDsgdGhlbgorICAgIFRPQVNURVI9JHsoJSk6LSV4fQorZWxzZQorICAgIFRPQVNURVI9JDAKK2ZpCisKK0JCQkFTRURJUj1gZGlybmFtZSAkVE9BU1RFUmAvLi4KKworUlVOTklORz0wCisKK05PVE9BU1RFUlVJPTAKK1dFQlNFUlZFUj0xCitUT0FTVEVSX0JSQkU9IiIKK1dFQl9QT1JUPSI4MDAwIgorTk9CUk9XU0VSPTAKKworZm9yIHBhcmFtIGluICQqOyBkbworICAgIGNhc2UgJHBhcmFtIGluCisgICAgbm91aSApCisgICAgICAgICAgICBOT1RPQVNURVJVST0xCisgICAgOzsKKyAgICBub3dlYiApCisgICAgICAgICAgICBXRUJTRVJWRVI9MAorICAgIDs7CisgICAgbm9icm93c2VyICkKKyAgICAgICAgICAgIE5PQlJPV1NFUj0xCisgICAgOzsKKyAgICBicmJlPSogKQorICAgICAgICAgICAgVE9BU1RFUl9CUkJFPSQnXG4nIlRPQVNURVJfQlJCRT1cIiIke3BhcmFtIyo9fSJcIiIKKyAgICA7OworICAgIHdlYnBvcnQ9KikKKyAgICAgICAgICAgIFdFQl9QT1JUPSIke3BhcmFtIyo9fSIKKyAgICBlc2FjCitkb25lCisKK1sgLW4gIiR7QkFTSF9TT1VSQ0V9IiBdICYmIFNSQ0ZJTEU9JHtCQVNIX1NPVVJDRX0gfHwgU1JDRklMRT0kXworCitpZiBbIGBiYXNlbmFtZSBcIiQwXCJgID0gYGJhc2VuYW1lIFwiJHtTUkNGSUxFfVwiYCBdOyB0aGVuCisgICAgIyBXZSBhcmUgY2FsbGVkIGFzIHN0YW5kYWxvbmUuIFdlIHJlZnVzZSB0byBydW4gaW4gYSBidWlsZCBlbnZpcm9ubWVudCAtIHdlIG5lZWQgdGhlIGludGVyYWN0aXZlIG1vZGUgZm9yIHRoYXQuCisgICAgIyBTdGFydCBqdXN0IHRoZSB3ZWIgc2VydmVyLCBwb2ludCB0aGUgd2ViIGJyb3dzZXIgdG8gdGhlIGludGVyZmFjZSwgYW5kIHN0YXJ0IGFueSBEamFuZ28gc2VydmljZXMuCisKKyAgICBpZiAhIHZlcmlmeV9wcmVyZXE7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IENvdWxkIG5vdCB2ZXJpZnkgdGhhdCB0aGUgbmVlZGVkIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkLiBQbGVhc2UgdXNlIHZpcnR1YWxlbnYgYW5kIHBpcCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBsaXN0ZWQgaW4gdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0IiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiBbIC1uICIkQlVJTERESVIiIF07IHRoZW4KKyAgICAgICAgcHJpbnRmICJFcnJvcjogSXQgbG9va3MgbGlrZSB5b3Ugc291cmNlZCBvZS1pbml0LWJ1aWxkLWVudi4gVG9hc3RlciBjYW5ub3Qgc3RhcnQgaW4gYnVpbGQgbW9kZSBmcm9tIGFuIG9lLWNvcmUgYnVpbGQgZW52aXJvbm1lbnQuXG4gWW91IHNob3VsZCBiZSBzdGFydGluZyBUb2FzdGVyIGZyb20gYSBuZXcgdGVybWluYWwgd2luZG93LiIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgIyBEZWZpbmUgYSBmYWtlIGJ1aWxkZGlyIHdoZXJlIG9ubHkgdGhlIHBpZCBmaWxlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZC4gTm8gcmVhbCBidWlsZHMgd2lsbCB0YWtlIHBsYWNlIGhlcmUuCisgICAgQlVJTERESVI9L3RtcC90b2FzdGVyXyQkCisgICAgaWYgWyAtZCAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIlByZXZpb3VzIHRvYXN0ZXIgcnVuIGRpcmVjdG9yeSAkQlVJTERESVIgZm91bmQsIGNvd2FyZGx5IHJlZnVzaW5nIHRvIHN0YXJ0LiBQbGVhc2UgcmVtb3ZlIHRoZSBkaXJlY3Rvcnkgd2hlbiB0aGF0IHRvYXN0ZXIgaW5zdGFuY2UgaXMgb3ZlciIgMj4mMQorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgbWtkaXIgLXAgIiRCVUlMRERJUiIKKworICAgIFJVTk5JTkc9MQorICAgIHRyYXBfY3RybGMoKSB7CisgICAgICAgIGVjaG8gIioqIFN0b3BwaW5nIHN5c3RlbSIKKyAgICAgICAgd2Vic2VydmVyS2lsbEFsbAorICAgICAgICBSVU5OSU5HPTAKKyAgICB9CisKKyAgICBkb19jbGVhbnVwKCkgeworICAgICAgICBmaW5kICIkQlVJTERESVIiIC10eXBlIGYgfCB4YXJncyBybQorICAgICAgICBybWRpciAiJEJVSUxERElSIgorICAgIH0KKyAgICBjbGVhbnVwKCkgeworICAgICAgICBpZiBncmVwIC1pciBlcnJvciAiJEJVSUxERElSIiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBpZiBncmVwIC1pcm4gIlRoYXQgcG9ydCBpcyBhbHJlYWR5IGluIHVzZSIgIiRCVUlMRERJUiI7IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJZb3UgY2FuIHVzZSB0aGUgXCJ3ZWJwb3J0PVBPUlROVU1CRVJcIiBwYXJhbWV0ZXIgdG8gc3RhcnQgVG9hc3RlciBvbiBhIGRpZmZlcmVudCBwb3J0IChwb3J0ICRXRUJfUE9SVCBpcyBhbHJlYWR5IGluIHVzZSkiCisgICAgICAgICAgICAgICAgZG9fY2xlYW51cAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZiAiXG5FcnJvcnMgZm91bmQgaW4gdGhlIFRvYXN0ZXIgbG9nIGZpbGVzIHByZXNlbnQgaW4gJyRCVUlMRERJUicuIERpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkLlxuIFBsZWFzZSByZXZpZXcgdGhlIGVycm9ycyBhbmQgbm90aWZ5IHRvYXN0ZXJAeW9jdG9wcm9qZWN0Lm9yZyBvciBzdWJtaXQgYSBidWcgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Ub2FzdGVyIgorICAgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiTm8gZXJyb3JzIGZvdW5kLCByZW1vdmluZyB0aGUgcnVuIGRpcmVjdG9yeSAnJEJVSUxERElSJyIKKyAgICAgICAgICAgIGRvX2NsZWFudXAKKyAgICAgICAgZmkKKyAgICB9CisgICAgVE9BU1RFUl9NQU5BR0VEPTEKKyAgICBleHBvcnQgVE9BU1RFUl9NQU5BR0VEPTEKKyAgICBpZiBbICRXRUJTRVJWRVIgLWd0IDAgXSAmJiAhIHdlYnNlcnZlclN0YXJ0QWxsOyB0aGVuCisgICAgICAgIGVjaG8gIkZhaWxlZCB0byBzdGFydCB0aGUgd2ViIHNlcnZlciwgc3RvcHBpbmciIDE+JjIKKyAgICAgICAgY2xlYW51cAorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGlmIFsgJFdFQlNFUlZFUiAtZ3QgMCBdICYmIFsgJE5PQlJPV1NFUiAtZXEgMCBdICA7IHRoZW4KKyAgICAgICAgZWNobyAiU3RhcnRpbmcgYnJvd3Nlci4uLiIKKyAgICAgICAgeGRnLW9wZW4gaHR0cDovLzEyNy4wLjAuMTokV0VCX1BPUlQvID4vZGV2L251bGwgMj4mMSAmCisgICAgZmkKKyAgICB0cmFwIHRyYXBfY3RybGMgMgorICAgIGVjaG8gIlRvYXN0ZXIgaXMgbm93IHJ1bm5pbmcuIFlvdSBjYW4gc3RvcCBpdCB3aXRoIEN0cmwtQyIKKyAgICB3aGlsZSBbICRSVU5OSU5HIC1ndCAwIF07IGRvCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5idWlsZHMgMj4mMSB8IHRlZSAtYSAiJEJVSUxERElSL3RvYXN0ZXIubG9nIgorICAgICAgICBzbGVlcCAxCisgICAgZG9uZQorICAgIGNsZWFudXAKKyAgICBlY2hvICIqKioqIEV4aXQiCisgICAgZXhpdCAwCitmaQorCisKK2lmICEgdmVyaWZ5X3ByZXJlcTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBDb3VsZCBub3QgdmVyaWZ5IHRoYXQgdGhlIG5lZWRlZCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZC4gUGxlYXNlIHVzZSB2aXJ0dWFsZW52IGFuZCBwaXAgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgbGlzdGVkIGluIHRvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCIgMT4mMgorICAgIHJldHVybiAxCitmaQorCisKKyMgV2UgbWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGN1cnJlbnQgc2hlbGwgYW5kIGluIGEgZ29vZCBlbnZpcm9ubWVudAoraWYgWyAteiAiJEJVSUxERElSIiBdIHx8ICAhIHdoaWNoIGJpdGJha2UgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBCdWlsZCBlbnZpcm9ubWVudCBpcyBub3Qgc2V0dXAgb3IgYml0YmFrZSBpcyBub3QgaW4gcGF0aC4iIDE+JjIKKyAgICByZXR1cm4gMgorZmkKKworCisjIERldGVybWluZSB0aGUgYWN0aW9uLiBJZiBzcGVjaWZpZWQgYnkgYXJndW1lbnRzLCBmaW5lLCBpZiBub3QsIHRvZ2dsZSBpdAoraWYgWyAiJDEiID0gJ3N0YXJ0JyBdIHx8IFsgIiQxIiA9ICdzdG9wJyBdOyB0aGVuCisgICAgQ01EPSIkMSIKK2Vsc2UKKyAgICBpZiBbIC16ICIkQkJTRVJWRVIiIF07IHRoZW4KKyAgICAgICAgQ01EPSJzdGFydCIKKyAgICBlbHNlCisgICAgICAgIENNRD0ic3RvcCIKKyAgICBmaQorZmkKKworZWNobyAiVGhlIHN5c3RlbSB3aWxsICRDTUQuIgorCisjIE1ha2Ugc3VyZSBpdCdzIHNhZmUgdG8gcnVuIGJ5IGNoZWNraW5nIGJpdGJha2UgbG9jaworCitsb2NrPTEKK2lmIFsgLWUgJEJVSUxERElSL2JpdGJha2UubG9jayBdOyB0aGVuCisgICAgcHl0aG9uIC1jICJpbXBvcnQgZmNudGw7IGZjbnRsLmZsb2NrKG9wZW4oXCIkQlVJTERESVIvYml0YmFrZS5sb2NrXCIpLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpIiAyPi9kZXYvbnVsbCB8fCBsb2NrPTAKK2ZpCisKK2lmIFsgJHtDTUR9ID0gJ3N0YXJ0JyBdICYmIFsgJGxvY2sgLWVxIDAgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBiaXRiYWtlIGxvY2sgc3RhdGUgZXJyb3IuIEZpbGUgbG9ja3Mgc2hvdyB0aGF0IHRoZSBzeXN0ZW0gaXMgb24uIiAxPiYyCisgICAgZWNobyAiUGxlYXNlIHdhaXQgZm9yIHRoZSBjdXJyZW50IGJ1aWxkIHRvIGZpbmlzaCwgc3RvcCBhbmQgdGhlbiBzdGFydCB0aGUgc3lzdGVtIGFnYWluLiIgMT4mMgorICAgIHJldHVybiAzCitmaQorCitpZiBbICR7Q01EfSA9ICdzdGFydCcgXSAmJiBbIC1lICRCVUlMRERJUi8udG9hc3Rlcm1haW4ucGlkIF0gJiYga2lsbCAtMCBgY2F0ICRCVUlMRERJUi8udG9hc3Rlcm1haW4ucGlkYDsgdGhlbgorICAgIGVjaG8gIldhcm5pbmc6IGJpdGJha2UgYXBwZWFycyB0byBiZSBkZWFkLCBidXQgdGhlIFRvYXN0ZXIgd2ViIHNlcnZlciBpcyBydW5uaW5nLiBTb21ldGhpbmcgZmlzaHkgaXMgZ29pbmcgb24uIiAxPiYyCisgICAgZWNobyAiQ2xlYW5pbmcgdXAgdGhlIHdlYiBzZXJ2ZXIgdG8gc3RhcnQgZnJvbSBhIGNsZWFuIHNsYXRlLiIKKyAgICB3ZWJzZXJ2ZXJLaWxsQWxsCitmaQorCisKKyMgRXhlY3V0ZSB0aGUgY29tbWFuZHMKKworY2FzZSAkQ01EIGluCisgICAgc3RhcnQgKQorICAgICAgICBzdGFydF9zdWNjZXNzPTEKKyAgICAgICAgYWRkdG9Db25maWd1cmF0aW9uIHRvYXN0ZXIuY29uZiAiSU5IRVJJVCs9XCJ0b2FzdGVyIGJ1aWxkaGlzdG9yeVwiIiAkVE9BU1RFUl9CUkJFCisgICAgICAgIGlmIFsgJFdFQlNFUlZFUiAtZ3QgMCBdICYmICEgd2Vic2VydmVyU3RhcnRBbGw7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkZhaWxlZCAke0NNRH0uIgorICAgICAgICAgICAgcmV0dXJuIDQKKyAgICAgICAgZmkKKyAgICAgICAgdW5zZXQgQkJTRVJWRVIKKyAgICAgICAgUFJFUkVBRD0iIgorICAgICAgICBpZiBbIC1lICR7QlVJTERESVJ9L2NvbmYvdG9hc3Rlci1wcmUuY29uZiBdOyB0aGVuCisgICAgICAgICAgICBybSAke0JVSUxERElSfS9jb25mL3RvYXN0ZXItcHJlLmNvbmYKKyAgICAgICAgZmkKKyAgICAgICAgYml0YmFrZSAkUFJFUkVBRCAtLXBvc3RyZWFkIGNvbmYvdG9hc3Rlci5jb25mIC0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIDAuMC4wLjA6MAorICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgIHN0YXJ0X3N1Y2Nlc3M9MAorICAgICAgICAgICAgZWNobyAiQml0YmFrZSBzZXJ2ZXIgc3RhcnQgZmFpbGVkIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBleHBvcnQgQkJTRVJWRVI9MC4wLjAuMDotMQorICAgICAgICAgICAgaWYgWyAkTk9UT0FTVEVSVUkgLWVxIDAgXTsgdGhlbiAgICAgICAgIyB3ZSBzdGFydCB0aGUgVE9BU1RFUlVJIG9ubHkgaWYgbm90IGluaGliaXRlZAorICAgICAgICAgICAgICAgIGJpdGJha2UgLS1vYnNlcnZlLW9ubHkgLXUgdG9hc3RlcnVpID4+JHtCVUlMRERJUn0vdG9hc3Rlcl91aS5sb2cgMj4mMSAmIGVjaG8gJCEgPiR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiBbICRzdGFydF9zdWNjZXNzIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICMgc2V0IGZhaWwgc2FmZSBzdG9wIHN5c3RlbSBvbiB0ZXJtaW5hbCBleGl0CisgICAgICAgICAgICB0cmFwIHN0b3Bfc3lzdGVtIFNJR0hVUAorICAgICAgICAgICAgZWNobyAiU3VjY2Vzc2Z1bCAke0NNRH0uIgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBmYWlsZWQgc3RhcnQsIGRvIHN0b3AKKyAgICAgICAgICAgIHN0b3Bfc3lzdGVtCisgICAgICAgICAgICBlY2hvICJGYWlsZWQgJHtDTUR9LiIKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgICMgc3RvcCBzeXN0ZW0gb24gdGVybWluYWwgZXhpdAorICAgICAgICBzZXQgLW8gbW9uaXRvcgorICAgICAgICB0cmFwIHN0b3Bfc3lzdGVtIFNJR0hVUAorICAgICAgICAjdHJhcCBub3RpZnlfY2hsZGV4aXQgU0lHQ0hMRAorICAgIDs7CisgICAgc3RvcCApCisgICAgICAgIHN0b3Bfc3lzdGVtCisgICAgICAgIGVjaG8gIlN1Y2Nlc3NmdWwgJHtDTUR9LiIKKyAgICA7OworZXNhYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkgYi95b2N0by1wb2t5L2JpdGJha2UvYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjE1YTdhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheQpAQCAtMCwwICsxLDE3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEFsZXggRGFtaWFuCisjCisjIFRoaXMgZmlsZSByZS11c2VzIGNvZGUgc3ByZWFkIHRocm91Z2hvdXQgb3RoZXIgQml0YmFrZSBzb3VyY2UgZmlsZXMuCisjIEFzIHN1Y2gsIGFsbCBvdGhlciBjb3B5cmlnaHRzIGJlbG9uZyB0byB0aGVpciBvd24gcmlnaHQgaG9sZGVycy4KKyMKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIyBUaGlzIGNvbW1hbmQgdGFrZXMgYSBmaWxlbmFtZSBhcyBhIHNpbmdsZSBwYXJhbWV0ZXIuIFRoZSBmaWxlbmFtZSBpcyByZWFkCisjIGFzIGEgYnVpbGQgZXZlbnRsb2csIGFuZCB0aGUgVG9hc3RlclVJIGlzIHVzZWQgdG8gcHJvY2VzcyBldmVudHMgaW4gdGhlIGZpbGUKKyMgYW5kIGxvZyBkYXRhIGluIHRoZSBkYXRhYmFzZQorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsIGxvZ2dpbmcKKworIyBtYW5nbGUgc3lzcGF0aCB0byBhbGxvdyBlYXN5IGltcG9ydCBvZiBtb2R1bGVzCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliJykpCisKKworaW1wb3J0IGJiLmNvb2tlcgorZnJvbSBiYi51aSBpbXBvcnQgdG9hc3RlcnVpCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworCitpbXBvcnQganNvbiwgcGlja2xlCisKKworY2xhc3MgRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uKCk6CisgICAgIiIiICBFbXVsYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBiaXRiYWtlIHNlcnZlciB0aGF0IGZlZWRzCisgICAgICAgIGV2ZW50cyBjb21pbmcgYWN0dWFsbHkgcmVhZCBmcm9tIGEgc2F2ZWQgbG9nIGZpbGUuCisgICAgIiIiCisKKyAgICBjbGFzcyBNb2NrQ29ubmVjdGlvbigpOgorICAgICAgICAiIiIgZmlsbC1pbiBmb3IgdGhlIHByb3h5IHRvIHRoZSBzZXJ2ZXIuIHdlIGp1c3QgcmV0dXJuIGdlbmVyaWMgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjKToKKyAgICAgICAgICAgIHNlbGYuX3NjID0gc2MKKworICAgICAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kQXJyYXkpOgorICAgICAgICAgICAgIiIiIGVtdWxhdGVzIHJ1bm5pbmcgYSBjb21tYW5kIG9uIHRoZSBzZXJ2ZXI7IG9ubHkgcmVhZC1vbmx5IGNvbW1hbmRzIGFyZSBhY2NlcHRlZCAiIiIKKyAgICAgICAgICAgIGNvbW1hbmRfbmFtZSA9IGNvbW1hbmRBcnJheVswXQorCisgICAgICAgICAgICBpZiBjb21tYW5kX25hbWUgPT0gImdldFZhcmlhYmxlIjoKKyAgICAgICAgICAgICAgICBpZiBjb21tYW5kQXJyYXlbMV0gaW4gc2VsZi5fc2MuX3ZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9zYy5fdmFyaWFibGVzW2NvbW1hbmRBcnJheVsxXV1bJ3YnXSwgTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5vbmUsICJNaXNzaW5nIHZhcmlhYmxlIikKKworICAgICAgICAgICAgZWxpZiBjb21tYW5kX25hbWUgPT0gImdldEFsbEtleXNXaXRoRmxhZ3MiOgorICAgICAgICAgICAgICAgIGR1bXAgPSB7fQorICAgICAgICAgICAgICAgIGZsYWdsaXN0ID0gY29tbWFuZEFycmF5WzFdCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5fc2MuX3ZhcmlhYmxlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBrLnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NjLl92YXJpYWJsZXNba11bJ3YnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBba10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2JyA6IHYgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlzdG9yeScgOiBzZWxmLl9zYy5fdmFyaWFibGVzW2tdWydoaXN0b3J5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkIGluIGZsYWdsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdW2RdID0gc2VsZi5fc2MuX3ZhcmlhYmxlc1trXVtkXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChlKQorICAgICAgICAgICAgICAgIHJldHVybiAoZHVtcCwgTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb21tYW5kICVzIG5vdCBpbXBsZW1lbnRlZCIgJSBjb21tYW5kQXJyYXlbMF0pCisKKyAgICAgICAgZGVmIHRlcm1pbmF0ZVNlcnZlcihzZWxmKToKKyAgICAgICAgICAgICIiIiBkbyBub3QgZG8gYW55dGhpbmcgIiIiCisgICAgICAgICAgICBwYXNzCisKKworCisgICAgY2xhc3MgRXZlbnRSZWFkZXIoKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjKToKKyAgICAgICAgICAgIHNlbGYuX3NjID0gc2MKKyAgICAgICAgICAgIHNlbGYuZmlyc3RyYWlzZSA9IDAKKworICAgICAgICBkZWYgX2NyZWF0ZV9ldmVudChzZWxmLCBsaW5lKToKKyAgICAgICAgICAgIGRlZiBfaW1wb3J0X2NsYXNzKG5hbWUpOgorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obmFtZSkgPiAwCisgICAgICAgICAgICAgICAgYXNzZXJ0ICIuIiBpbiBuYW1lLCBuYW1lCisKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gbmFtZS5zdHJpcCgpLnNwbGl0KCIuIikKKyAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gIi4iLmpvaW4oY29tcG9uZW50c1s6LTFdKQorICAgICAgICAgICAgICAgIG1vZHVsZWtsYXNzID0gY29tcG9uZW50c1stMV0KKworICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlbmFtZSwgZnJvbWxpc3Q9W3N0cihtb2R1bGVrbGFzcyldKQorICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKG1vZHVsZSwgbW9kdWxla2xhc3MpCisKKyAgICAgICAgICAgICMgd2UgYnVpbGQgYSB0b2FzdGVyIGV2ZW50IG91dCBvZiBjdXJyZW50IGV2ZW50IGxvZyBsaW5lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXZlbnRfZGF0YSA9IGpzb24ubG9hZHMobGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGV2ZW50X2NsYXNzID0gX2ltcG9ydF9jbGFzcyhldmVudF9kYXRhWydjbGFzcyddKQorICAgICAgICAgICAgICAgIGV2ZW50X29iamVjdCA9IHBpY2tsZS5sb2Fkcyhqc29uLmxvYWRzKGV2ZW50X2RhdGFbJ3ZhcnMnXSkpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgbG9hZGluZyAiLCBsaW5lKQorICAgICAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnRfb2JqZWN0LCBldmVudF9jbGFzcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBsb2FkaW5nIG9iamVjdHMgJXMgY2xhc3MgJXMgIiwgZXZlbnRfb2JqZWN0LCBldmVudF9jbGFzcykKKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50X29iamVjdAorCisgICAgICAgIGRlZiB3YWl0RXZlbnQoc2VsZiwgdGltZW91dCk6CisKKyAgICAgICAgICAgIG5leHRsaW5lID0gc2VsZi5fc2MuX2V2ZW50ZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBsZW4obmV4dGxpbmUpID09IDA6CisgICAgICAgICAgICAgICAgIyB0aGUgYnVpbGQgZGF0YSBlbmRlZCwgd2hpbGUgdG9hc3RlcnVpIHN0aWxsIHdhaXRzIGZvciBldmVudHMuCisgICAgICAgICAgICAgICAgIyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgc2VydmVyIHdhcyBhYnJ1cHRseSBzdG9wcGVkLCBzbyB3ZSBzaW11bGF0ZSB0aGlzCisgICAgICAgICAgICAgICAgc2VsZi5maXJzdHJhaXNlICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZpcnN0cmFpc2UgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NjLmxpbmVubyArPSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRlX2V2ZW50KG5leHRsaW5lKQorCisKKyAgICBkZWYgX3JlYWRWYXJpYWJsZXMoc2VsZiwgdmFyaWFibGVsaW5lKToKKyAgICAgICAgc2VsZi5fdmFyaWFibGVzID0ganNvbi5sb2Fkcyh2YXJpYWJsZWxpbmUuc3RyaXAoKSlbJ2FsbHZhcmlhYmxlcyddCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX25hbWUpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24uTW9ja0Nvbm5lY3Rpb24oc2VsZikKKyAgICAgICAgc2VsZi5fZXZlbnRmaWxlID0gb3BlbihmaWxlX25hbWUsICJyIikKKworICAgICAgICAjIHdlIGV4cGVjdCB0byBoYXZlIHRoZSB2YXJpYWJsZSBkdW1wIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZQorICAgICAgICBzZWxmLmxpbmVubyA9IDEKKyAgICAgICAgc2VsZi5fcmVhZFZhcmlhYmxlcyhzZWxmLl9ldmVudGZpbGUucmVhZGxpbmUoKSkKKworICAgICAgICBzZWxmLmV2ZW50cyA9IEZpbGVSZWFkRXZlbnRzU2VydmVyQ29ubmVjdGlvbi5FdmVudFJlYWRlcihzZWxmKQorCisKKworCisKK2NsYXNzIE1vY2tDb25maWdQYXJhbWV0ZXJzKCk6CisgICAgIiIiIHN0YW5kLWluIGZvciBjb29rZXJkYXRhLkNvbmZpZ1BhcmFtZXRlcnM7IGFzIHdlIGRvbid0IHJlYWxseSBjb25maWcgYSBjb29rZXIsIHRoaXMKKyAgICAgICAgc2VydmVzIGp1c3QgdG8gc3VwcGx5IG5lZWRlZCBpbnRlcmZhY2VzIGZvciB0aGUgdG9hc3RlciB1aSB0byB3b3JrICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5vYnNlcnZlX29ubHkgPSBUcnVlICAgICAgICAgICAgIyB3ZSBjYW4gb25seSByZWFkIGZpbGVzCisKKworIyBydW4gdG9hc3RlciB1aSBvbiBvdXIgbW9jayBiaXRiYWtlIGNsYXNzCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgorICAgICAgICBwcmludCgiVXNhZ2U6ICVzIGV2ZW50LmxvZyAiICUgc3lzLmFyZ3ZbMF0pCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmaWxlX25hbWUgPSBzeXMuYXJndlstMV0KKyAgICBtb2NrX2Nvbm5lY3Rpb24gPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24oZmlsZV9uYW1lKQorICAgIGNvbmZpZ1BhcmFtcyA9IE1vY2tDb25maWdQYXJhbWV0ZXJzKCkKKworICAgICMgcnVuIHRoZSBtYWluIHByb2dyYW0gYW5kIHNldCBleGl0IGNvZGUgdG8gdGhlIHJldHVybmVkIHZhbHVlCisgICAgc3lzLmV4aXQodG9hc3RlcnVpLm1haW4obW9ja19jb25uZWN0aW9uLmNvbm5lY3Rpb24sIG1vY2tfY29ubmVjdGlvbi5ldmVudHMsIGNvbmZpZ1BhcmFtcykpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlNTE1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSBpcyBmb3IgYWRkaXRpb25hbCBjb250cmlidXRlZCBmaWxlcyB3aGljaCBtYXkgYmUgdXNlZnVsLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvYmJkZXYuc2ggYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi9iYmRldi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E3ODUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvYmJkZXYuc2gKQEAgLTAsMCArMSwzMSBAQAorIyBUaGlzIGlzIGEgc2hlbGwgZnVuY3Rpb24gdG8gYmUgc291cmNlZCBpbnRvIHlvdXIgc2hlbGwgb3IgcGxhY2VkIGluIHlvdXIgLnByb2ZpbGUsCisjIHdoaWNoIG1ha2VzIHNldHRpbmcgdGhpbmdzIHVwIGZvciBCaXRCYWtlIGEgYml0IGVhc2llci4KKyMKKyMgVGhlIGF1dGhvciBkaXNjbGFpbXMgY29weXJpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYW5kIHBsYWNlcyBpdCBpbiB0aGUKKyMgcHVibGljIGRvbWFpbi4KKworYmJkZXYgKCkgeworCWxvY2FsIEJCRElSIFBLR0RJUiBCVUlMRERJUgorCWlmIHRlc3QgeCIkMSIgPSAieC0taGVscCI7IHRoZW4gZWNobyA+JjIgInN5bnRheDogYmJkZXYgW2JiZGlyIFtwa2dkaXIgW2J1aWxkZGlyXV1dIjsgcmV0dXJuIDE7IGZpCisJaWYgdGVzdCB4IiQxIiA9IHg7IHRoZW4gQkJESVI9YHB3ZGA7IGVsc2UgQkJESVI9JDE7IGZpCisJaWYgdGVzdCB4IiQyIiA9IHg7IHRoZW4gUEtHRElSPWBwd2RgOyBlbHNlIFBLR0RJUj0kMjsgZmkKKwlpZiB0ZXN0IHgiJDMiID0geDsgdGhlbiBCVUlMRERJUj1gcHdkYDsgZWxzZSBCVUlMRERJUj0kMzsgZmkKKworCUJCRElSPWByZWFkbGluayAtZiAkQkJESVJgCisJUEtHRElSPWByZWFkbGluayAtZiAkUEtHRElSYAorCUJVSUxERElSPWByZWFkbGluayAtZiAkQlVJTERESVJgCisJaWYgISAodGVzdCAtZCAkQkJESVIgJiYgdGVzdCAtZCAkUEtHRElSICYmIHRlc3QgLWQgJEJVSUxERElSKTsgdGhlbgorCQllY2hvID4mMiAic3ludGF4OiBiYmRldiBbYmJkaXIgW3BrZ2RpciBbYnVpbGRkaXJdXV0iCisJCXJldHVybiAxCisJZmkKKwkKKwlQQVRIPSRCQkRJUi9iaW46JFBBVEgKKwlCQlBBVEg9JEJCRElSCisJaWYgdGVzdCB4IiRCQkRJUiIgIT0geCIkUEtHRElSIjsgdGhlbgorCQlCQlBBVEg9JFBLR0RJUjokQkJQQVRICisJZmkKKwlpZiB0ZXN0IHgiJFBLR0RJUiIgIT0geCIkQlVJTERESVIiOyB0aGVuCisJCUJCUEFUSD0kQlVJTERESVI6JEJCUEFUSAorCWZpCisJZXhwb3J0IEJCUEFUSAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvZHVtcF9jYWNoZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFmMjMwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkKQEAgLTAsMCArMSw2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjCisjIFRoaXMgaXMgdXNlZCBmb3IgZHVtcGluZyB0aGUgYmJfY2FjaGUuZGF0LCB0aGUgb3V0cHV0IGZvcm1hdCBpczoKKyMgcmVjaXBlX3BhdGggUE4gUFYgUEFDS0FHRVMKKyMKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKyMgRm9yIGltcG9ydGluZyBiYi5jYWNoZQorc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICcuLi9saWInKSkKK2Zyb20gYmIuY2FjaGUgaW1wb3J0IENvcmVSZWNpcGVJbmZvCisKK2ltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorCitkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICIiIgorICAgIEdldCB0aGUgbWFwcGluZyBmb3IgdGhlIHRhcmdldCByZWNpcGUuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3YpICE9IDE6CisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIkVycm9yLCBuZWVkIG9uZSBhcmd1bWVudCEiCisgICAgICAgIHJldHVybiAyCisKKyAgICBjYWNoZWZpbGUgPSBhcmd2WzBdCisKKyAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuVW5waWNrbGVyKGNhY2hlZmlsZSkKKyAgICAgICAgd2hpbGUgY2FjaGVmaWxlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtleSA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgdmFsID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBDb3JlUmVjaXBlSW5mbykgYW5kIChub3QgdmFsLnNraXBwZWQpOgorICAgICAgICAgICAgICAgIHBuID0gdmFsLnBuCisgICAgICAgICAgICAgICAgIyBGaWx0ZXIgb3V0IHRoZSBuYXRpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgndmlydHVhbDpuYXRpdmU6Jykgb3IgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgMS4wIGlzIHRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIGEgbm8gUFYgcmVjaXBlLgorICAgICAgICAgICAgICAgIGlmIHZhbC5fX2RpY3RfXy5oYXNfa2V5KCJwdiIpOgorICAgICAgICAgICAgICAgICAgICBwdiA9IHZhbC5wdgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHB2ID0gIjEuMCIKKworICAgICAgICAgICAgICAgIHByaW50KCIlcyAlcyAlcyAlcyIgJSAoa2V5LCBwbiwgcHYsICcgJy5qb2luKHZhbC5wYWNrYWdlcykpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0ZGV0ZWN0L2JpdGJha2UudmltIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0ZGV0ZWN0L2JpdGJha2UudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMGY4YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vZnRkZXRlY3QvYml0YmFrZS52aW0KQEAgLTAsMCArMSwyNCBAQAorIiBWaW0gZmlsZXR5cGUgZGV0ZWN0aW9uIGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBCaXRCYWtlCisiIEF1dGhvcjogICAgICAgUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUByc2FsdmV0aS5uZXQ+CisiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA4ICBSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQHJzYWx2ZXRpLm5ldD4KKyIgTGljZW5jZTogICAgICBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB0aGlzIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFZpbSBpdHNlbGYKKyIKKyIgVGhpcyBzZXRzIHVwIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBCaXRCYWtlIGZpbGVzLCBsaWtlIC5iYiwgLmJiY2xhc3MgYW5kIC5pbmMKKworaWYgJmNvbXBhdGlibGUgfHwgdmVyc2lvbiA8IDYwMAorICAgIGZpbmlzaAorZW5kaWYKKworIiAuYmIsIC5iYmFwcGVuZCBhbmQgLmJiY2xhc3MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLntiYixiYmFwcGVuZCxiYmNsYXNzfQlzZXQgZmlsZXR5cGU9Yml0YmFrZQorCisiIC5pbmMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmluYwkJc2V0IGZpbGV0eXBlPWJpdGJha2UKKworIiAuY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY29uZgorICAgIFwgaWYgKG1hdGNoKGV4cGFuZCgiJTpwOmgiKSwgImNvbmYiKSA+IDApIHwKKyAgICBcICAgICBzZXQgZmlsZXR5cGU9Yml0YmFrZSB8CisgICAgXCBlbmRpZgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vZnRwbHVnaW4vYml0YmFrZS52aW0gYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vZnRwbHVnaW4vYml0YmFrZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwZDc1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9mdHBsdWdpbi9iaXRiYWtlLnZpbQpAQCAtMCwwICsxLDIgQEAKK3NldCBzdHM9NCBzdz00IGV0CitzZXQgY21zPSMlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL3BsdWdpbi9uZXdiYi52aW0gYi95b2N0by1wb2t5L2JpdGJha2UvY29udHJpYi92aW0vcGx1Z2luL25ld2JiLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzRlMzM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL3BsdWdpbi9uZXdiYi52aW0KQEAgLTAsMCArMSw4NCBAQAorIiBWaW0gcGx1Z2luIGZpbGUKKyIgUHVycG9zZToJQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIG5ldyBiYiBmaWxlcworIiBBdXRob3I6CVJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAZ21haWwuY29tPgorIiBDb3B5cmlnaHQ6CUNvcHlyaWdodCAoQykgMjAwOCBSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQGdtYWlsLmNvbT4KKyIKKyIgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIENPUFlJTkcuTUlUIGluCisiIHRoaXMgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIHRlcm1zLgorIgorIiBCYXNlZCBvbiB0aGUgZ2VudG9vLXN5bnRheCBwYWNrYWdlCisiCisiIFdpbGwgdHJ5IHRvIHVzZSBnaXQgdG8gZmluZCB0aGUgdXNlciBuYW1lIGFuZCBlbWFpbAorCitpZiAmY29tcGF0aWJsZSB8fCB2OnZlcnNpb24gPCA2MDAKKyAgICBmaW5pc2gKK2VuZGlmCisKK2Z1biEgPFNJRD5HZXRVc2VyTmFtZSgpCisgICAgbGV0IGw6dXNlcl9uYW1lID0gc3lzdGVtKCJnaXQgY29uZmlnIC0tZ2V0IHVzZXIubmFtZSIpCisgICAgaWYgdjpzaGVsbF9lcnJvcgorICAgICAgICByZXR1cm4gIlVua25vd24gVXNlciIKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdWJzdGl0dXRlKGw6dXNlcl9uYW1lLCAiXG4iLCAiIiwgIiIpCitlbmRmdW4KKworZnVuISA8U0lEPkdldFVzZXJFbWFpbCgpCisgICAgbGV0IGw6dXNlcl9lbWFpbCA9IHN5c3RlbSgiZ2l0IGNvbmZpZyAtLWdldCB1c2VyLmVtYWlsIikKKyAgICBpZiB2OnNoZWxsX2Vycm9yCisgICAgICAgIHJldHVybiAidW5rbm93QHVzZXIub3JnIgorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGUobDp1c2VyX2VtYWlsLCAiXG4iLCAiIiwgIiIpCitlbmRmdW4KKworZnVuISBCQkhlYWRlcigpCisgICAgbGV0IGw6Y3VycmVudF95ZWFyID0gc3RyZnRpbWUoIiVZIikKKyAgICBsZXQgbDp1c2VyX25hbWUgPSA8U0lEPkdldFVzZXJOYW1lKCkKKyAgICBsZXQgbDp1c2VyX2VtYWlsID0gPFNJRD5HZXRVc2VyRW1haWwoKQorICAgIDAgcHV0ID0nIyBDb3B5cmlnaHQgKEMpICcgLiBsOmN1cnJlbnRfeWVhciAuCisgICAgICAgICAgICAgICAgXCAnICcgLiBsOnVzZXJfbmFtZSAuICcgPCcgLiBsOnVzZXJfZW1haWwgLiAnPicKKyAgICBwdXQgPScjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpJworICAgICQKK2VuZGZ1bgorCitmdW4hIE5ld0JCVGVtcGxhdGUoKQorICAgIGxldCBsOnBhc3RlID0gJnBhc3RlCisgICAgc2V0IG5vcGFzdGUKKyAgICAKKyAgICAiIEdldCB0aGUgaGVhZGVyCisgICAgY2FsbCBCQkhlYWRlcigpCisKKyAgICAiIE5ldyB0aGUgYmIgdGVtcGxhdGUKKyAgICBwdXQgPSdERVNDUklQVElPTiA9IFwiXCInCisgICAgcHV0ID0nSE9NRVBBR0UgPSBcIlwiJworICAgIHB1dCA9J0xJQ0VOU0UgPSBcIlwiJyAKKyAgICBwdXQgPSdTRUNUSU9OID0gXCJcIicKKyAgICBwdXQgPSdERVBFTkRTID0gXCJcIicKKyAgICBwdXQgPScnCisgICAgcHV0ID0nU1JDX1VSSSA9IFwiXCInCisKKyAgICAiIEdvIHRvIHRoZSBmaXJzdCBwbGFjZSB0byBlZGl0CisgICAgMAorICAgIC9eREVTQ1JJUFRJT04gPS8KKyAgICBleGVjICJub3JtYWwgMmZcIiIKKworICAgIGlmIHBhc3RlID09IDEKKyAgICAgICAgc2V0IHBhc3RlCisgICAgZW5kaWYKK2VuZGZ1bgorCitpZiAhZXhpc3RzKCJnOmJiX2NyZWF0ZV9vbl9lbXB0eSIpCisgICAgbGV0IGc6YmJfY3JlYXRlX29uX2VtcHR5ID0gMQorZW5kaWYKKworIiBkaXNhYmxlIGluIGNhc2Ugb2YgdmltZGlmZgoraWYgdjpwcm9nbmFtZSA9fiAidmltZGlmZiIKKyAgICBsZXQgZzpiYl9jcmVhdGVfb25fZW1wdHkgPSAwCitlbmRpZgorCithdWdyb3VwIE5ld0JCCisgICAgYXUgQnVmTmV3RmlsZSAqLmJiCisgICAgICAgICAgICAgICAgXCBpZiBnOmJiX2NyZWF0ZV9vbl9lbXB0eSB8CisgICAgICAgICAgICAgICAgXCAgICBjYWxsIE5ld0JCVGVtcGxhdGUoKSB8CisgICAgICAgICAgICAgICAgXCBlbmRpZgorYXVncm91cCBFTkQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2NvbnRyaWIvdmltL3N5bnRheC9iaXRiYWtlLnZpbSBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9zeW50YXgvYml0YmFrZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1NWY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9jb250cmliL3ZpbS9zeW50YXgvYml0YmFrZS52aW0KQEAgLTAsMCArMSwxMjYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgQml0QmFrZSBiYi9iYmNsYXNzZXMvaW5jCisiIEF1dGhvcjogICAgICAgQ2hyaXMgTGFyc29uIDxrZXJnb3RoQGhhbmRoZWxkcy5vcmc+CisiICAgICAgICAgICAgICAgUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUByc2FsdmV0aS5uZXQ+CisiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBDaHJpcyBMYXJzb24gPGtlcmdvdGhAaGFuZGhlbGRzLm9yZz4KKyIgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggIFJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAcnNhbHZldGkubmV0PgorIgorIiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgaW4KKyIgdGhpcyBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciB0aGUgdGVybXMuCisiCisiIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGJiLCBiYmNsYXNzZXMgYW5kIGluYyBmaWxlcy4KKyIKKyIgSXQncyBhbiBlbnRpcmVseSBuZXcgdHlwZSwganVzdCBoYXMgc3BlY2lmaWMgc3ludGF4IGluIHNoZWxsIGFuZCBweXRob24gY29kZQorCitpZiAmY29tcGF0aWJsZSB8fCB2OnZlcnNpb24gPCA2MDAKKyAgICBmaW5pc2gKK2VuZGlmCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorZW5kaWYKKworc3luIGluY2x1ZGUgQHB5dGhvbiBzeW50YXgvcHl0aG9uLnZpbQoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworIiBCaXRCYWtlIHN5bnRheAorCisiIE1hdGNoaW5nIGNhc2UKK3N5biBjYXNlIG1hdGNoCisKKyIgSW5kaWNhdGVzIHRoZSBlcnJvciB3aGVuIG5vdGhpbmcgaXMgbWF0Y2hlZAorc3luIG1hdGNoIGJiVW5tYXRjaGVkICAgICAgICAgICAiLiIKKworIiBDb21tZW50cworc3luIGNsdXN0ZXIgYmJDb21tZW50R3JvdXAgICAgICBjb250YWlucz1iYlRvZG8sQFNwZWxsCitzeW4ga2V5d29yZCBiYlRvZG8gICAgICAgICAgICAgIENPTUJBSyBGSVhNRSBUT0RPIFhYWCBjb250YWluZWQKK3N5biBtYXRjaCBiYkNvbW1lbnQgICAgICAgICAgICAgIiMuKiQiIGNvbnRhaW5zPUBiYkNvbW1lbnRHcm91cAorCisiIFN0cmluZyBoZWxwZXJzCitzeW4gbWF0Y2ggYmJRdW90ZSAgICAgICAgICAgICAgICtbJyJdKyBjb250YWluZWQgCitzeW4gbWF0Y2ggYmJEZWxpbWl0ZXIgICAgICAgICAgICJbKCl7fT1dIiBjb250YWluZWQKK3N5biBtYXRjaCBiYkFycmF5QnJhY2tldHMgICAgICAgIltcW1xdXSIgY29udGFpbmVkCisKKyIgQml0QmFrZSBzdHJpbmdzCitzeW4gbWF0Y2ggYmJDb250aW51ZSAgICAgICAgICAgICJcXCQiCitzeW4gcmVnaW9uIGJiU3RyaW5nICAgICAgICAgICAgIG1hdGNoZ3JvdXA9YmJRdW90ZSBzdGFydD0rIisgc2tpcD0rXFwkKyBlbmQ9KyIrIGNvbnRhaW5lZCBjb250YWlucz1iYlRvZG8sYmJDb250aW51ZSxiYlZhckRlcmVmLGJiVmFyUHlWYWx1ZSxAU3BlbGwKK3N5biByZWdpb24gYmJTdHJpbmcgICAgICAgICAgICAgbWF0Y2hncm91cD1iYlF1b3RlIHN0YXJ0PSsnKyBza2lwPStcXCQrIGVuZD0rJysgY29udGFpbmVkIGNvbnRhaW5zPWJiVG9kbyxiYkNvbnRpbnVlLGJiVmFyRGVyZWYsYmJWYXJQeVZhbHVlLEBTcGVsbAorCisiIFZhcnMgZGVmaW5pdGlvbgorc3luIG1hdGNoIGJiRXhwb3J0ICAgICAgICAgICAgIl5leHBvcnQiIG5leHRncm91cD1iYklkZW50aWZpZXIgc2tpcHdoaXRlCitzeW4ga2V5d29yZCBiYkV4cG9ydEZsYWcgICAgICAgIGV4cG9ydCBjb250YWluZWQgbmV4dGdyb3VwPWJiSWRlbnRpZmllciBza2lwd2hpdGUKK3N5biBtYXRjaCBiYklkZW50aWZpZXIgICAgICAgICAgIlthLXpBLVowLTlcLV9cLlwvXCtdXCsiIGRpc3BsYXkgY29udGFpbmVkCitzeW4gbWF0Y2ggYmJWYXJEZXJlZiAgICAgICAgICAgICIke1thLXpBLVowLTlcLV9cLlwvXCtdXCt9IiBjb250YWluZWQKK3N5biBtYXRjaCBiYlZhckVxICAgICAgICAgICAgICAgIlwoOj1cfCs9XHw9K1x8XC49XHw9XC5cfD89XHw/Pz1cfD1cKSIgY29udGFpbmVkIG5leHRncm91cD1iYlZhclZhbHVlCitzeW4gbWF0Y2ggYmJWYXJEZWYgICAgICAgICAgICAgICJeXChleHBvcnRccypcKVw/XChbYS16QS1aMC05XC1fXC5cL1wrXVwrXChfWyR7fWEtekEtWjAtOVwtX1wuXC9cK11cK1wpXD9cKVxzKlwoOj1cfCs9XHw9K1x8XC49XHw9XC5cfD89XHw/Pz1cfD1cKVxAPSIgY29udGFpbnM9YmJFeHBvcnRGbGFnLGJiSWRlbnRpZmllcixiYlZhckRlcmVmIG5leHRncm91cD1iYlZhckVxCitzeW4gbWF0Y2ggYmJWYXJWYWx1ZSAgICAgICAgICAgICIuKiQiIGNvbnRhaW5lZCBjb250YWlucz1iYlN0cmluZyxiYlZhckRlcmVmLGJiVmFyUHlWYWx1ZQorc3luIHJlZ2lvbiBiYlZhclB5VmFsdWUgICAgICAgICBzdGFydD0rJHtAKyBza2lwPStcXCQrIGVuZD0rfSsgY29udGFpbmVkIGNvbnRhaW5zPUBweXRob24KKworIiBWYXJzIG1ldGFkYXRhIGZsYWdzCitzeW4gbWF0Y2ggYmJWYXJGbGFnRGVmICAgICAgICAgICJeXChbYS16QS1aMC05XC1fXC5dXCtcKVwoXFtbYS16QS1aMC05XC1fXC5dXCtcXVwpXEA9IiBjb250YWlucz1iYklkZW50aWZpZXIgbmV4dGdyb3VwPWJiVmFyRmxhZ0ZsYWcKK3N5biByZWdpb24gYmJWYXJGbGFnRmxhZyAgICAgICAgbWF0Y2hncm91cD1iYkFycmF5QnJhY2tldHMgc3RhcnQ9IlxbIiBlbmQ9IlxdXHMqXCg9XHwrPVx8PStcfD89XClcQD0iIGNvbnRhaW5lZCBjb250YWlucz1iYklkZW50aWZpZXIgbmV4dGdyb3VwPWJiVmFyRXEKKworIiBJbmNsdWRlcyBhbmQgcmVxdWlyZXMKK3N5biBrZXl3b3JkIGJiSW5jbHVkZSAgICAgICAgICAgaW5oZXJpdCBpbmNsdWRlIHJlcXVpcmUgY29udGFpbmVkIAorc3luIG1hdGNoIGJiSW5jbHVkZVJlc3QgICAgICAgICAiLiokIiBjb250YWluZWQgY29udGFpbnM9YmJTdHJpbmcsYmJWYXJEZXJlZgorc3luIG1hdGNoIGJiSW5jbHVkZUxpbmUgICAgICAgICAiXlwoaW5oZXJpdFx8aW5jbHVkZVx8cmVxdWlyZVwpXHNcKyIgY29udGFpbnM9YmJJbmNsdWRlIG5leHRncm91cD1iYkluY2x1ZGVSZXN0CisKKyIgQWRkIHRha3MgYW5kIHNpbWlsYXIKK3N5biBrZXl3b3JkIGJiU3RhdGVtZW50ICAgICAgICAgYWRkdGFzayBhZGRoYW5kbGVyIGFmdGVyIGJlZm9yZSBFWFBPUlRfRlVOQ1RJT05TIGNvbnRhaW5lZAorc3luIG1hdGNoIGJiU3RhdGVtZW50UmVzdCAgICAgICAiLiokIiBza2lwd2hpdGUgY29udGFpbmVkIGNvbnRhaW5zPWJiU3RhdGVtZW50CitzeW4gbWF0Y2ggYmJTdGF0ZW1lbnRMaW5lICAgICAgICJeXChhZGR0YXNrXHxhZGRoYW5kbGVyXHxhZnRlclx8YmVmb3JlXHxFWFBPUlRfRlVOQ1RJT05TXClcc1wrIiBjb250YWlucz1iYlN0YXRlbWVudCBuZXh0Z3JvdXA9YmJTdGF0ZW1lbnRSZXN0CisKKyIgT0UgSW1wb3J0YW50IEZ1bmN0aW9ucworc3luIGtleXdvcmQgYmJPRUZ1bmN0aW9ucyAgICAgICBkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2ggZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9fc3RhZ2UgZG9faW5zdGFsbCBkb19wYWNrYWdlIGNvbnRhaW5lZAorCisiIEdlbmVyaWMgRnVuY3Rpb25zCitzeW4gbWF0Y2ggYmJGdW5jdGlvbiAgICAgICAgICAgICJcaFswLTlBLVphLXpfLV0qIiBkaXNwbGF5IGNvbnRhaW5lZCBjb250YWlucz1iYk9FRnVuY3Rpb25zCisKKyIgQml0QmFrZSBzaGVsbCBtZXRhZGF0YQorc3luIGluY2x1ZGUgQHNoZWxsIHN5bnRheC9zaC52aW0KK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCitzeW4ga2V5d29yZCBiYlNoRmFrZVJvb3RGbGFnICAgIGZha2Vyb290IGNvbnRhaW5lZAorc3luIG1hdGNoIGJiU2hGdW5jRGVmICAgICAgICAgICAiXlwoZmFrZXJvb3RccypcKVw/XChbMC05QS1aYS16XyR7fS1dXCtcKVwocHl0aG9uXClcQDwhXChccyooKVxzKlwpXCh7XClcQD0iIGNvbnRhaW5zPWJiU2hGYWtlUm9vdEZsYWcsYmJGdW5jdGlvbixiYlZhckRlcmVmLGJiRGVsaW1pdGVyIG5leHRncm91cD1iYlNoRnVuY1JlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gYmJTaEZ1bmNSZWdpb24gICAgICAgbWF0Y2hncm91cD1iYkRlbGltaXRlciBzdGFydD0ie1xzKiQiIGVuZD0iXn1ccyokIiBjb250YWluZWQgY29udGFpbnM9QHNoZWxsCisKKyIgUHl0aG9uIHZhbHVlIGluc2lkZSBzaGVsbCBmdW5jdGlvbnMKK3N5biByZWdpb24gc2hEZXJlZiAgICAgICAgIHN0YXJ0PSske0ArIHNraXA9K1xcJCsgZXhjbHVkZW5sIGVuZD0rfSsgY29udGFpbmVkIGNvbnRhaW5zPUBweXRob24KKworIiBCaXRCYWtlIHB5dGhvbiBtZXRhZGF0YQorc3luIGtleXdvcmQgYmJQeUZsYWcgICAgICAgICAgICBweXRob24gY29udGFpbmVkCitzeW4gbWF0Y2ggYmJQeUZ1bmNEZWYgICAgICAgICAgICJeXChweXRob25cc1wrXClcKFswLTlBLVphLXpfJHt9LV1cK1wpXD9cKFxzKigpXHMqXClcKHtcKVxAPSIgY29udGFpbnM9YmJQeUZsYWcsYmJGdW5jdGlvbixiYlZhckRlcmVmLGJiRGVsaW1pdGVyIG5leHRncm91cD1iYlB5RnVuY1JlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gYmJQeUZ1bmNSZWdpb24gICAgICAgbWF0Y2hncm91cD1iYkRlbGltaXRlciBzdGFydD0ie1xzKiQiIGVuZD0iXn1ccyokIiBjb250YWluZWQgY29udGFpbnM9QHB5dGhvbgorCisiIEJpdEJha2UgJ2RlZidkIHB5dGhvbiBmdW5jdGlvbnMKK3N5biBrZXl3b3JkIGJiUHlEZWYgICAgICAgICAgICAgZGVmIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBiYlB5RGVmUmVnaW9uICAgICAgICBzdGFydD0nXlwoZGVmXHNcK1wpXChbMC05QS1aYS16Xy1dXCtcKVwoXHMqKC4qKVxzKlwpOlxzKiQnIGVuZD0nXlwoXHNcfCRcKVxAIScgY29udGFpbnM9QHB5dGhvbgorCisiIEhpZ2hsaWdodGluZyBEZWZpbml0aW9ucworaGkgZGVmIGxpbmsgYmJVbm1hdGNoZWQgICAgICAgICBFcnJvcgoraGkgZGVmIGxpbmsgYmJJbmNsdWRlICAgICAgICAgICBJbmNsdWRlCitoaSBkZWYgbGluayBiYlRvZG8gICAgICAgICAgICAgIFRvZG8KK2hpIGRlZiBsaW5rIGJiQ29tbWVudCAgICAgICAgICAgQ29tbWVudAoraGkgZGVmIGxpbmsgYmJRdW90ZSAgICAgICAgICAgICBTdHJpbmcKK2hpIGRlZiBsaW5rIGJiU3RyaW5nICAgICAgICAgICAgU3RyaW5nCitoaSBkZWYgbGluayBiYkRlbGltaXRlciAgICAgICAgIEtleXdvcmQKK2hpIGRlZiBsaW5rIGJiQXJyYXlCcmFja2V0cyAgICAgU3RhdGVtZW50CitoaSBkZWYgbGluayBiYkNvbnRpbnVlICAgICAgICAgIFNwZWNpYWwKK2hpIGRlZiBsaW5rIGJiRXhwb3J0ICAgICAgICAgICAgVHlwZQoraGkgZGVmIGxpbmsgYmJFeHBvcnRGbGFnICAgICAgICBUeXBlCitoaSBkZWYgbGluayBiYklkZW50aWZpZXIJICAgIElkZW50aWZpZXIKK2hpIGRlZiBsaW5rIGJiVmFyRGVyZWYgICAgICAgICAgUHJlUHJvYworaGkgZGVmIGxpbmsgYmJWYXJEZWYgICAgICAgICAgICBJZGVudGlmaWVyCitoaSBkZWYgbGluayBiYlZhclZhbHVlICAgICAgICAgIFN0cmluZworaGkgZGVmIGxpbmsgYmJTaEZha2VSb290RmxhZyAgICBUeXBlCitoaSBkZWYgbGluayBiYkZ1bmN0aW9uICAgICAgICAgIEZ1bmN0aW9uCitoaSBkZWYgbGluayBiYlB5RmxhZyAgICAgICAgICAgIFR5cGUKK2hpIGRlZiBsaW5rIGJiUHlEZWYgICAgICAgICAgICAgU3RhdGVtZW50CitoaSBkZWYgbGluayBiYlN0YXRlbWVudCAgICAgICAgIFN0YXRlbWVudAoraGkgZGVmIGxpbmsgYmJTdGF0ZW1lbnRSZXN0ICAgICBJZGVudGlmaWVyCitoaSBkZWYgbGluayBiYk9FRnVuY3Rpb25zICAgICAgIFNwZWNpYWwKK2hpIGRlZiBsaW5rIGJiVmFyUHlWYWx1ZSAgICAgICAgUHJlUHJvYworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJiYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvQ09QWUlORy5HUEwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvQ09QWUlORy5NSVQgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2Q1NzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKK1RIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9NYWtlZmlsZSBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyOGY0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvTWFrZWZpbGUKQEAgLTAsMCArMSw5MSBAQAorIyBUaGlzIGlzIGEgc2luZ2xlIE1ha2VmaWxlIHRvIGhhbmRsZSBhbGwgZ2VuZXJhdGVkIEJpdEJha2UgZG9jdW1lbnRzLgorIyBUaGUgTWFrZWZpbGUgbmVlZHMgdG8gbGl2ZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgYW5kIGFsbCBmaWd1cmVzIHVzZWQKKyMgaW4gYW55IG1hbnVhbHMgbXVzdCBiZSAuUE5HIGZpbGVzIGFuZCBsaXZlIGluIHRoZSBpbmRpdmlkdWFsIGJvb2sncyBmaWd1cmVzCisjIGRpcmVjdG9yeS4KKyMKKyMgVGhlIE1ha2VmaWxlIGhhcyB0aGVzZSB0YXJnZXRzOgorIworIyAgICBwZGY6ICAgICAgZ2VuZXJhdGVzIGEgUERGIHZlcnNpb24gb2YgYSBtYW51YWwuCisjICAgIGh0bWw6ICAgICBnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGEgbWFudWFsLgorIyAgICB0YXJiYWxsOiAgY3JlYXRlcyBhIHRhcmJhbGwgZm9yIHRoZSBkb2MgZmlsZXMuCisjICAgIHZhbGlkYXRlOiB2YWxpZGF0ZXMKKyMgICAgY2xlYW46ICAgIHJlbW92ZXMgZmlsZXMKKyMKKyMgVGhlIE1ha2VmaWxlIGdlbmVyYXRlcyBhbiBIVE1MIHZlcnNpb24gb2YgZXZlcnkgZG9jdW1lbnQuICBUaGUKKyMgdmFyaWFibGUgRE9DIGluZGljYXRlcyB0aGUgZm9sZGVyIG5hbWUgZm9yIGEgZ2l2ZW4gbWFudWFsLgorIworIyBUbyBidWlsZCBhIG1hbnVhbCwgeW91IG11c3QgaW52b2tlICdtYWtlJyB3aXRoIHRoZSBET0MgYXJndW1lbnQuCisjCisjIEV4YW1wbGVzOgorIworIyAgICAgbWFrZSBET0M9Yml0YmFrZS11c2VyLW1hbnVhbAorIyAgICAgbWFrZSBwZGYgRE9DPWJpdGJha2UtdXNlci1tYW51YWwKKyMKKyMgVGhlIGZpcnN0IGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIFVzZXIgTWFudWFsLgorIyBUaGUgc2Vjb25kIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBQREYgdmVyc2lvbiBvZiB0aGUgVXNlciBNYW51YWwuCisjCisKK2lmZXEgKCQoRE9DKSxiaXRiYWtlLXVzZXItbWFudWFsKQorWFNMVE9QVFMgPSAtLXN0cmluZ3BhcmFtIGh0bWwuc3R5bGVzaGVldCBiaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcyBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGNoYXB0ZXIuYXV0b2xhYmVsIDEgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAgIC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIHRhcmJhbGwKK1RBUkZJTEVTID0gYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MgYml0YmFrZS11c2VyLW1hbnVhbC5odG1sIGZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKKyMjCisjIFRoZXNlIFVSSSBzaG91bGQgYmUgcmV3cml0dGVuIGJ5IHlvdXIgZGlzdHJpYnV0aW9uJ3MgeG1sIGNhdGFsb2cgdG8KKyMgbWF0Y2ggeW91ciBsb2NhbHkgaW5zdGFsbGVkIFhTTCBzdHlsZXNoZWV0cy4KK1hTTF9CQVNFX1VSSSAgPSBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudAorWFNMX1hIVE1MX1VSSSA9ICQoWFNMX0JBU0VfVVJJKS94aHRtbC9kb2Nib29rLnhzbAorCithbGw6ICQoQUxMUFJFUSkKKworcGRmOgoraWZlcSAoJChET0MpLGJpdGJha2UtdXNlci1tYW51YWwpCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqKiogQnVpbGRpbmcuIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgLi4vdG9vbHMvZG9jYm9vay10by1wZGYgJChET0MpLnhtbCAuLi90ZW1wbGF0ZTsgY2QgLi4KK2VuZGlmCisKK2h0bWw6CitpZmVxICgkKERPQyksYml0YmFrZS11c2VyLW1hbnVhbCkKKyMgICAgICAgU2VlIGh0dHA6Ly93d3cuc2FnZWhpbGwubmV0L2RvY2Jvb2t4c2wvSHRtbE91dHB1dC5odG1sCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIEJ1aWxkaW5nICIkKERPQykKKwlAZWNobyAiICIKKwljZCAkKERPQyk7IHhzbHRwcm9jICQoWFNMVE9QVFMpIC1vICQoRE9DKS5odG1sICQoRE9DKS1jdXN0b21pemF0aW9uLnhzbCAkKERPQykueG1sOyBjZCAuLgorZW5kaWYKKwordGFyYmFsbDogaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBDcmVhdGluZyBUYXJiYWxsIG9mIGRvY3VtZW50IGZpbGVzIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgdGFyIC1jdnpmICQoRE9DKS50Z3ogJChUQVJGSUxFUyk7IGNkIC4uCisKK3ZhbGlkYXRlOgorCWNkICQoRE9DKTsgeG1sbGludCAtLXBvc3R2YWxpZCAtLXhpbmNsdWRlIC0tbm9vdXQgJChET0MpLnhtbDsgY2QgLi4KKworcHVibGlzaDoKKwlAaWYgdGVzdCAtZiAkKERPQykvJChET0MpLmh0bWw7IFwKKwkgIHRoZW4gXAorICAgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICAgIGVjaG8gIioqKioqKioqIFB1Ymxpc2hpbmcgIiQoRE9DKSIuaHRtbCI7IFwKKyAgICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgICBzY3AgLXIgJChNQU5VQUxTKSAkKFNUWUxFU0hFRVQpIGRvY3MueXA6L3Zhci93d3cvd3d3LnlvY3RvcHJvamVjdC5vcmctZG9jcy8kKFZFUikvJChET0MpOyBcCisgICAgICAgICAgICBjZCAkKERPQyk7IHNjcCAtciAkKEZJR1VSRVMpIGRvY3MueXA6L3Zhci93d3cvd3d3LnlvY3RvcHJvamVjdC5vcmctZG9jcy8kKFZFUikvJChET0MpOyBcCisJZWxzZSBcCisgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICBlY2hvICQoRE9DKSIuaHRtbCBtaXNzaW5nLiAgR2VuZXJhdGUgdGhlIGZpbGUgZmlyc3QgdGhlbiB0cnkgYWdhaW4uIjsgXAorICAgICAgICAgIGVjaG8gIiAiOyBcCisJZmkKKworY2xlYW46CisJcm0gLXJmICQoTUFOVUFMUyk7IHJtICQoRE9DKS8kKERPQykudGd6OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDNjZjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9SRUFETUUKQEAgLTAsMCArMSwzOSBAQAorRG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgQml0QmFrZSBkb2N1bWVudGF0aW9uLiAKKworTWFudWFsIE9yZ2FuaXphdGlvbgorPT09PT09PT09PT09PT09PT09PQorCitGb2xkZXJzIGV4aXN0IGZvciBpbmRpdmlkdWFsIG1hbnVhbHMgYXMgZm9sbG93czoKKworKiBiaXRiYWtlLXVzZXItbWFudWFsICAgICAgLSBUaGUgQml0QmFrZSBVc2VyIE1hbnVhbCAKKworRWFjaCBmb2xkZXIgaXMgc2VsZi1jb250YWluZWQgcmVnYXJkaW5nIGNvbnRlbnQgYW5kIGZpZ3VyZXMuCisKK0lmIHlvdSB3YW50IHRvIGZpbmQgSFRNTCB2ZXJzaW9ucyBvZiB0aGUgQml0QmFrZSBtYW51YWxzIG9uIHRoZSB3ZWIsIAorZ28gdG8gaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi4gCisKK01ha2VmaWxlCis9PT09PT09PQorCitUaGUgTWFrZWZpbGUgcHJvY2Vzc2VzIG1hbnVhbCBkaXJlY3RvcmllcyB0byBjcmVhdGUgSFRNTCwgUERGLAordGFyYmFsbHMsIGV0Yy4gIERldGFpbHMgb24gaG93IHRoZSBNYWtlZmlsZSB3b3JrIGFyZSBkb2N1bWVudGVkCitpbnNpZGUgdGhlIE1ha2VmaWxlLiAgU2VlIHRoYXQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBydW4gdGhlIG1ha2UgY29tbWFuZCBhbmQgcGFzcyBpdCB0aGUgbmFtZQorb2YgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBtYW51YWwncyBjb250ZW50cy4gCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1biBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSAKK2NyZWF0ZXMgYW4gSFRNTCBhbmQgYSBQREYgdmVyc2lvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KK1RoZSBET0MgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBtYW51YWwgeW91IGFyZSBtYWtpbmc6CisKKyAgICAgJCBtYWtlIERPQz1iaXRiYWtlLXVzZXItbWFudWFsCisKK3RlbXBsYXRlCis9PT09PT09PQorQ29udGFpbnMgdmFyaW91cyB0ZW1wbGF0ZXMsIGZvbnRzLCBhbmQgc29tZSBvbGQgUE5HIGZpbGVzLgorCit0b29scworPT09PT0KK0NvbnRhaW5zIGEgdG9vbCB0byBjb252ZXJ0IHRoZSBEb2NCb29rIGZpbGVzIHRvIFBERiBmb3JtYXQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODVlYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wiLz4KKworICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSIndXNlci1tYW51YWwtc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKworPCEtLSAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+ICAtLT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTJlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sCkBAIC0wLDAgKzEsOTEyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGNoYXB0ZXIgaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uIj4KKyAgICA8dGl0bGU+RXhlY3V0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIGZvciBydW5uaW5nIEJpdEJha2UgaXMgdG8gcHJvZHVjZSBzb21lIGtpbmQKKyAgICAgICAgb2Ygb3V0cHV0IHN1Y2ggYXMgYSBzaW5nbGUgaW5zdGFsbGFibGUgcGFja2FnZSwgYSBrZXJuZWwsIGEgc29mdHdhcmUKKyAgICAgICAgZGV2ZWxvcG1lbnQga2l0LCBvciBldmVuIGEgZnVsbCwgYm9hcmQtc3BlY2lmaWMgYm9vdGFibGUgTGludXggaW1hZ2UsCisgICAgICAgIGNvbXBsZXRlIHdpdGggYm9vdGxvYWRlciwga2VybmVsLCBhbmQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICBPZiBjb3Vyc2UsIHlvdSBjYW4gZXhlY3V0ZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICBjb21tYW5kIHdpdGggb3B0aW9ucyB0aGF0IGNhdXNlIGl0IHRvIGV4ZWN1dGUgc2luZ2xlIHRhc2tzLAorICAgICAgICBjb21waWxlIHNpbmdsZSByZWNpcGUgZmlsZXMsIGNhcHR1cmUgb3IgY2xlYXIgZGF0YSwgb3Igc2ltcGx5CisgICAgICAgIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIEJpdEJha2UncyBleGVjdXRpb24gcHJvY2VzcyBmcm9tIHN0YXJ0CisgICAgICAgIHRvIGZpbmlzaCB3aGVuIHlvdSB1c2UgaXQgdG8gY3JlYXRlIGFuIGltYWdlLgorICAgICAgICBUaGUgZXhlY3V0aW9uIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kCisgICAgICAgIGZvcm06CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQml0QmFrZSBjb21tYW5kIGFuZCBpdHMgb3B0aW9ucywKKyAgICAgICAgc2VlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdiaXRiYWtlLXVzZXItbWFudWFsLWNvbW1hbmQnPlRoZSBCaXRCYWtlIENvbW1hbmQ8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIGV4ZWN1dGluZyBCaXRCYWtlLCB5b3Ugc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIHBhcmFsbGVsIHRocmVhZCBleGVjdXRpb24gb24geW91ciBidWlsZCBob3N0IGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIHByb2plY3QncyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGNvbW1vbiBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUgZm9yIHlvdXIgYnVpbGQgaG9zdCBpcyB0byBydW4KKyAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBncmVwIHByb2Nlc3NvciAvcHJvYy9jcHVpbmZvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycywgd2hpY2ggdGFrZXMgaW50byAKKyAgICAgICAgICAgICAgICBhY2NvdW50IGh5cGVyLXRocmVhZGluZy4gCisgICAgICAgICAgICAgICAgVGh1cywgYSBxdWFkLWNvcmUgYnVpbGQgaG9zdCB3aXRoIGh5cGVyLXRocmVhZGluZyBtb3N0IGxpa2VseSAKKyAgICAgICAgICAgICAgICBzaG93cyBlaWdodCBwcm9jZXNzb3JzLCB3aGljaCBpcyB0aGUgdmFsdWUgeW91IHdvdWxkIHRoZW4gYXNzaWduIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgcG9zc2libHkgc2ltcGxlciBzb2x1dGlvbiBpcyB0aGF0IHNvbWUgTGludXggZGlzdHJpYnV0aW9ucworICAgICAgICAgICAgICAgIChlLmcuIERlYmlhbiBhbmQgVWJ1bnR1KSBwcm92aWRlIHRoZSA8ZmlsZW5hbWU+bmNwdXM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3BhcnNpbmctdGhlLWJhc2UtY29uZmlndXJhdGlvbi1tZXRhZGF0YSc+CisgICAgICAgIDx0aXRsZT5QYXJzaW5nIHRoZSBCYXNlIENvbmZpZ3VyYXRpb24gTWV0YWRhdGE8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIEJpdEJha2UgZG9lcyBpcyBwYXJzZSBiYXNlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIG1ldGFkYXRhLgorICAgICAgICAgICAgQmFzZSBjb25maWd1cmF0aW9uIG1ldGFkYXRhIGNvbnNpc3RzIG9mIHlvdXIgcHJvamVjdCdzCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gZGV0ZXJtaW5lIHdoYXQKKyAgICAgICAgICAgIGxheWVycyBCaXRCYWtlIG5lZWRzIHRvIHJlY29nbml6ZSwgYWxsIG5lY2Vzc2FyeQorICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyAob25lIGZyb20gZWFjaCBsYXllciksCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGRhdGEgaXRzZWxmIGlzIG9mIHZhcmlvdXMgdHlwZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEZXRhaWxzIGFib3V0IHBhcnRpY3VsYXIgcGllY2VzIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNsYXNzIERhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQW4gYWJzdHJhY3Rpb24gb2YgY29tbW9uIGJ1aWxkIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIChlLmcuIGhvdyB0byBidWlsZCBhIExpbnV4IGtlcm5lbCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBEYXRhOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtc3BlY2lmaWMgc2V0dGluZ3MsIHBvbGljeSBkZWNpc2lvbnMsCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIGFjdHMgYXMgdGhlIGdsdWUgdG8gYmluZCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgICAgIHRvZ2V0aGVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGVzIGFyZSB1c2VkIHRvCisgICAgICAgICAgICBjb25zdHJ1Y3Qga2V5IHZhcmlhYmxlcyBzdWNoIGFzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGNsYXNzIGZpbGVzIHVuZGVyIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3JpZXMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaXMgdXNlZCB0byBsb2NhdGUgYm90aCByZWNpcGUKKyAgICAgICAgICAgIGFuZCByZWNpcGUgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgSWYgdGhlcmUgaXMgbm8gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0aGUgdXNlciBoYXMgc2V0IHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGRpcmVjdGx5IGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTmV4dCwgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdGhhdCB3YXMKKyAgICAgICAgICAgIGp1c3QgY29uc3RydWN0ZWQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgbWF5IGFsc28gaW5jbHVkZSBvdGhlcgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gZGlyZWN0aXZlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUHJpb3IgdG8gcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzLCBCaXRiYWtlIGxvb2tzCisgICAgICAgICAgICBhdCBjZXJ0YWluIHZhcmlhYmxlcywgaW5jbHVkaW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9QUkVTRVJWRV9FTlYnPjxmaWxlbmFtZT5CQl9QUkVTRVJWRV9FTlY8L2ZpbGVuYW1lPjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48ZmlsZW5hbWU+QkJfRU5WX0VYVFJBV0hJVEU8L2ZpbGVuYW1lPjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CSVRCQUtFX1VJJz48ZmlsZW5hbWU+QklUQkFLRV9VSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwYXNzIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnRvIHRoZSBCaXRCYWtlCisgICAgICAgICAgICBleGVjdXRpb24gZW52aXJvbm1lbnQgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFzc2luZy1pbmZvcm1hdGlvbi1pbnRvLXRoZS1idWlsZC10YXNrLWVudmlyb25tZW50Jz5QYXNzaW5nIEluZm9ybWF0aW9uIEludG8gdGhlIEJ1aWxkIFRhc2sgRW52aXJvbm1lbnQ8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgYmFzZSBjb25maWd1cmF0aW9uIG1ldGFkYXRhIGlzIGdsb2JhbAorICAgICAgICAgICAgYW5kIHRoZXJlZm9yZSBhZmZlY3RzIGFsbCByZWNpcGVzIGFuZCB0YXNrcyB0aGF0IGFyZSBleGVjdXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBmaXJzdCBzZWFyY2hlcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgYW4KKyAgICAgICAgICAgIG9wdGlvbmFsIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdGhhdCBpcyBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mICdsYXllcicgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBSZWNhbGwgdGhhdCBpZiBCaXRCYWtlIGNhbm5vdCBmaW5kIGEgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoZSB1c2VyIGhhcyBzZXQgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gdmFyaWFibGVzIGRpcmVjdGx5IGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGVhY2ggZGlyZWN0b3J5IChsYXllcikgaW4gdGhpcyBsaXN0LCBhIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSBpcyBsb2NhdGVkIGFuZCBwYXJzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRJUic+PGZpbGVuYW1lPkxBWUVSRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBiZWluZyBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbGF5ZXIgd2FzIGZvdW5kLgorICAgICAgICAgICAgVGhlIGlkZWEgaXMgdGhlc2UgZmlsZXMgYXV0b21hdGljYWxseSBzZXQgdXAKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCBvdGhlciB2YXJpYWJsZXMgY29ycmVjdGx5IGZvciBhIGdpdmVuIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB0aGVuIGV4cGVjdHMgdG8gZmluZCB0aGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgc29tZXdoZXJlIGluIHRoZSB1c2VyLXNwZWNpZmllZCA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGF0IGNvbmZpZ3VyYXRpb24gZmlsZSBnZW5lcmFsbHkgaGFzIGluY2x1ZGUgZGlyZWN0aXZlcyB0byBwdWxsCisgICAgICAgICAgICBpbiBhbnkgb3RoZXIgbWV0YWRhdGEgc3VjaCBhcyBmaWxlcyBzcGVjaWZpYyB0byB0aGUgYXJjaGl0ZWN0dXJlLAorICAgICAgICAgICAgdGhlIG1hY2hpbmUsIHRoZSBsb2NhbCBlbnZpcm9ubWVudCwgYW5kIHNvIGZvcnRoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmx5IHZhcmlhYmxlIGRlZmluaXRpb25zIGFuZCBpbmNsdWRlIGRpcmVjdGl2ZXMgYXJlIGFsbG93ZWQKKyAgICAgICAgICAgIGluIEJpdEJha2UgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBTb21lIHZhcmlhYmxlcyBkaXJlY3RseSBpbmZsdWVuY2UgQml0QmFrZSdzIGJlaGF2aW9yLgorICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIG1pZ2h0IGhhdmUgYmVlbiBzZXQgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHByZXZpb3VzbHkKKyAgICAgICAgICAgIG1lbnRpb25lZCBvciBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz4iCisgICAgICAgICAgICBjaGFwdGVyIHByZXNlbnRzIGEgZnVsbCBsaXN0IG9mIHZhcmlhYmxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzLCBCaXRCYWtlIHVzZXMgaXRzIHJ1ZGltZW50YXJ5CisgICAgICAgICAgICBpbmhlcml0YW5jZSBtZWNoYW5pc20sIHdoaWNoIGlzIHRocm91Z2ggY2xhc3MgZmlsZXMsIHRvIGluaGVyaXQKKyAgICAgICAgICAgIHNvbWUgc3RhbmRhcmQgY2xhc3Nlcy4KKyAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIGEgY2xhc3Mgd2hlbiB0aGUgaW5oZXJpdCBkaXJlY3RpdmUgcmVzcG9uc2libGUKKyAgICAgICAgICAgIGZvciBnZXR0aW5nIHRoYXQgY2xhc3MgaXMgZW5jb3VudGVyZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpcyBhbHdheXMgaW5jbHVkZWQuCisgICAgICAgICAgICBPdGhlciBjbGFzc2VzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUJz48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYXJlIGFsc28gaW5jbHVkZWQuCisgICAgICAgICAgICBCaXRCYWtlIHNlYXJjaGVzIGZvciBjbGFzcyBmaWxlcyBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgdGhlIHBhdGhzIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpbiB0aGUgc2FtZSB3YXkgYXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgZ29vZCB3YXkgdG8gZ2V0IGFuIGlkZWEgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kCisgICAgICAgICAgICB0aGUgY2xhc3MgZmlsZXMgdXNlZCBpbiB5b3VyIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyB0bworICAgICAgICAgICAgcnVuIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUgPiBteWJiLmxvZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRXhhbWluaW5nIHRoZSB0b3Agb2YgdGhlIDxmaWxlbmFtZT5teWJiLmxvZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBzaG93cyB5b3UgdGhlIG1hbnkgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgIHVzZWQgaW4geW91ciBleGVjdXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mIGhvdyBCaXRCYWtlIHBhcnNlcyBjdXJseSBicmFjZXMuCisgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyBhIGNsb3NpbmcgY3VybHkgYnJhY2Ugd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQKKyAgICAgICAgICAgICAgICB0aGUgY2hhcmFjdGVyIGhhcyBubyBsZWFkaW5nIHNwYWNlcywgQml0QmFrZSBwcm9kdWNlcyBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvci4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGEgcGFpciBvZiBjdXJseSBicmFjZXMgaW4gYSBzaGVsbCBmdW5jdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgY2xvc2luZyBjdXJseSBicmFjZSBtdXN0IG5vdCBiZSBsb2NhdGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZQorICAgICAgICAgICAgICAgIHdpdGhvdXQgbGVhZGluZyBzcGFjZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNhdXNlcyBCaXRCYWtlIHRvIHByb2R1Y2UgYSBwYXJzaW5nCisgICAgICAgICAgICAgICAgZXJyb3I6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKyAgICAgICAgIGNhdCAmbHQ7Jmx0OyAiRU9GIiAmZ3Q7ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKyAgICAgdXNhZ2UoKQorICAgICB7CisgICAgICAgZWNobyAidGVzdCIKKyAgICAgICAjIyMjIyMgVGhlIGZvbGxvd2luZyAifSIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGNhdXNlcyBhIHBhcnNpbmcgZXJyb3IgIyMjIyMjCisgICAgIH0KKyAgICAgRU9GCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV3JpdGluZyB0aGUgcmVjaXBlIHRoaXMgd2F5IGF2b2lkcyB0aGUgZXJyb3I6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKyAgICAgICAgIGNhdCAmbHQ7Jmx0OyAiRU9GIiAmZ3Q7ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKyAgICAgdXNhZ2UoKQorICAgICB7CisgICAgICAgZWNobyAidGVzdCIKKyAgICAgICAjIyMjIyNUaGUgZm9sbG93aW5nICJ9IiB3aXRoIGEgbGVhZGluZyBzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXZvaWRzIHRoZSBlcnJvciAjIyMjIyMKKyAgICAgIH0KKyAgICAgRU9GCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbG9jYXRpbmctYW5kLXBhcnNpbmctcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5Mb2NhdGluZyBhbmQgUGFyc2luZyBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIER1cmluZyB0aGUgY29uZmlndXJhdGlvbiBwaGFzZSwgQml0QmFrZSB3aWxsIGhhdmUgc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBCaXRCYWtlIG5vdyB1c2VzIGl0IHRvIGNvbnN0cnVjdCBhIGxpc3Qgb2YgcmVjaXBlcyB0byBwYXJzZSwKKyAgICAgICAgICAgIGFsb25nIHdpdGggYW55IGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgdG8gYXBwbHkuCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YKKyAgICAgICAgICAgIGF2YWlsYWJsZSBmaWxlcyBhbmQgc3VwcG9ydHMgd2lsZGNhcmRzLgorICAgICAgICAgICAgQW4gZXhhbXBsZSB3b3VsZCBiZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJGSUxFUyA9ICIvcGF0aC90by9iYmZpbGVzLyouYmIgL3BhdGgvdG8vYXBwZW5kcy8qLmJiYXBwZW5kIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgZWFjaCByZWNpcGUgYW5kIGFwcGVuZCBmaWxlIGxvY2F0ZWQKKyAgICAgICAgICAgIHdpdGggPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgb2YKKyAgICAgICAgICAgIHZhcmlvdXMgdmFyaWFibGVzIGludG8gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZW5jb3VudGVyZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgRm9yIGVhY2ggZmlsZSwgYSBmcmVzaCBjb3B5IG9mIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXMKKyAgICAgICAgICAgIG1hZGUsIHRoZW4gdGhlIHJlY2lwZSBpcyBwYXJzZWQgbGluZSBieSBsaW5lLgorICAgICAgICAgICAgQW55IGluaGVyaXQgc3RhdGVtZW50cyBjYXVzZSBCaXRCYWtlIHRvIGZpbmQgYW5kCisgICAgICAgICAgICB0aGVuIHBhcnNlIGNsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHVzaW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhcyB0aGUgc2VhcmNoIHBhdGguCisgICAgICAgICAgICBGaW5hbGx5LCBCaXRCYWtlIHBhcnNlcyBpbiBvcmRlciBhbnkgYXBwZW5kIGZpbGVzIGZvdW5kIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgY29tbW9uIGNvbnZlbnRpb24gaXMgdG8gdXNlIHRoZSByZWNpcGUgZmlsZW5hbWUgdG8gZGVmaW5lCisgICAgICAgICAgICBwaWVjZXMgb2YgbWV0YWRhdGEuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IHRoZSByZWNpcGUKKyAgICAgICAgICAgIG5hbWUgYW5kIHZlcnNpb24gYXJlIHVzZWQgdG8gc2V0IHRoZSB2YXJpYWJsZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBOID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfSIKKyAgICAgUFYgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzFdIG9yICcxLjAnfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgYSByZWNpcGUgY2FsbGVkICJzb21ldGhpbmdfMS4yLjMuYmIiIHdvdWxkIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gdG8gInNvbWV0aGluZyIgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiB0byAiMS4yLjMiLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSB0aGUgdGltZSBwYXJzaW5nIGlzIGNvbXBsZXRlIGZvciBhIHJlY2lwZSwgQml0QmFrZQorICAgICAgICAgICAgaGFzIGEgbGlzdCBvZiB0YXNrcyB0aGF0IHRoZSByZWNpcGUgZGVmaW5lcyBhbmQgYSBzZXQgb2YKKyAgICAgICAgICAgIGRhdGEgY29uc2lzdGluZyBvZiBrZXlzIGFuZCB2YWx1ZXMgYXMgd2VsbCBhcworICAgICAgICAgICAgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFza3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgZG9lcyBub3QgbmVlZCBhbGwgb2YgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEl0IG9ubHkgbmVlZHMgYSBzbWFsbCBzdWJzZXQgb2YgdGhlIGluZm9ybWF0aW9uIHRvIG1ha2UKKyAgICAgICAgICAgIGRlY2lzaW9ucyBhYm91dCB0aGUgcmVjaXBlLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBCaXRCYWtlIGNhY2hlcyB0aGUgdmFsdWVzIGluIHdoaWNoIGl0IGlzCisgICAgICAgICAgICBpbnRlcmVzdGVkIGFuZCBkb2VzIG5vdCBzdG9yZSB0aGUgcmVzdCBvZiB0aGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBFeHBlcmllbmNlIGhhcyBzaG93biBpdCBpcyBmYXN0ZXIgdG8gcmUtcGFyc2UgdGhlIG1ldGFkYXRhIHRoYW4gdG8KKyAgICAgICAgICAgIHRyeSBhbmQgd3JpdGUgaXQgb3V0IHRvIHRoZSBkaXNrIGFuZCB0aGVuIHJlbG9hZCBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlcmUgcG9zc2libGUsIHN1YnNlcXVlbnQgQml0QmFrZSBjb21tYW5kcyByZXVzZSB0aGlzIGNhY2hlIG9mCisgICAgICAgICAgICByZWNpcGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBUaGUgdmFsaWRpdHkgb2YgdGhpcyBjYWNoZSBpcyBkZXRlcm1pbmVkIGJ5IGZpcnN0IGNvbXB1dGluZyBhCisgICAgICAgICAgICBjaGVja3N1bSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEgKHNlZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0hBU0hDT05GSUdfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfSEFTSENPTkZJR19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICBhbmQgdGhlbiBjaGVja2luZyBpZiB0aGUgY2hlY2tzdW0gbWF0Y2hlcy4KKyAgICAgICAgICAgIElmIHRoYXQgY2hlY2tzdW0gbWF0Y2hlcyB3aGF0IGlzIGluIHRoZSBjYWNoZSBhbmQgdGhlIHJlY2lwZQorICAgICAgICAgICAgYW5kIGNsYXNzIGZpbGVzIGhhdmUgbm90IGNoYW5nZWQsIEJpdGJha2UgaXMgYWJsZSB0byB1c2UKKyAgICAgICAgICAgIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIEJpdEJha2UgdGhlbiByZWxvYWRzIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY2lwZQorICAgICAgICAgICAgaW5zdGVhZCBvZiByZXBhcnNpbmcgaXQgZnJvbSBzY3JhdGNoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZWNpcGUgZmlsZSBjb2xsZWN0aW9ucyBleGlzdCB0byBhbGxvdyB0aGUgdXNlciB0bworICAgICAgICAgICAgaGF2ZSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUKKyAgICAgICAgICAgIGV4YWN0IHBhY2thZ2UuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb25lIGNvdWxkIGVhc2lseSB1c2UgdGhlbSB0byBtYWtlIG9uZSdzCisgICAgICAgICAgICBvd24gbG9jYWwgY29weSBvZiBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LCBidXQgd2l0aAorICAgICAgICAgICAgY3VzdG9tIG1vZGlmaWNhdGlvbnMgdGhhdCBvbmUgZG9lcyBub3Qgd2FudCB1cHN0cmVhbS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBCQkZJTEVTID0gIi9zdHVmZi9vcGVuZW1iZWRkZWQvKi8qLmJiIC9zdHVmZi9vcGVuZW1iZWRkZWQubW9kaWZpZWQvKi8qLmJiIgorICAgIEJCRklMRV9DT0xMRUNUSU9OUyA9ICJ1cHN0cmVhbSBsb2NhbCIKKyAgICBCQkZJTEVfUEFUVEVSTl91cHN0cmVhbSA9ICJeL3N0dWZmL29wZW5lbWJlZGRlZC8iCisgICAgQkJGSUxFX1BBVFRFUk5fbG9jYWwgPSAiXi9zdHVmZi9vcGVuZW1iZWRkZWQubW9kaWZpZWQvIgorICAgIEJCRklMRV9QUklPUklUWV91cHN0cmVhbSA9ICI1IgorICAgIEJCRklMRV9QUklPUklUWV9sb2NhbCA9ICIxMCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBsYXllcnMgbWVjaGFuaXNtIGlzIG5vdyB0aGUgcHJlZmVycmVkIG1ldGhvZCBvZiBjb2xsZWN0aW5nCisgICAgICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgY29sbGVjdGlvbnMgY29kZSByZW1haW5zLCBpdHMgbWFpbiB1c2UgaXMgdG8gc2V0IGxheWVyCisgICAgICAgICAgICAgICAgcHJpb3JpdGllcyBhbmQgdG8gZGVhbCB3aXRoIG92ZXJsYXAgKGNvbmZsaWN0cykgYmV0d2VlbiBsYXllcnMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1wcm92aWRlcnMnPgorICAgICAgICA8dGl0bGU+UHJvdmlkZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzc3VtaW5nIEJpdEJha2UgaGFzIGJlZW4gaW5zdHJ1Y3RlZCB0byBleGVjdXRlIGEgdGFyZ2V0CisgICAgICAgICAgICBhbmQgdGhhdCBhbGwgdGhlIHJlY2lwZSBmaWxlcyBoYXZlIGJlZW4gcGFyc2VkLCBCaXRCYWtlCisgICAgICAgICAgICBzdGFydHMgdG8gZmlndXJlIG91dCBob3cgdG8gYnVpbGQgdGhlIHRhcmdldC4KKyAgICAgICAgICAgIEJpdEJha2UgbG9va3MgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdAorICAgICAgICAgICAgZm9yIGVhY2ggb2YgdGhlIHJlY2lwZXMuCisgICAgICAgICAgICBBIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgaXMgdGhlIGxpc3Qgb2YgbmFtZXMgYnkgd2hpY2gKKyAgICAgICAgICAgIHRoZSByZWNpcGUgY2FuIGJlIGtub3duLgorICAgICAgICAgICAgRWFjaCByZWNpcGUncyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIGNyZWF0ZWQKKyAgICAgICAgICAgIGltcGxpY2l0bHkgdGhyb3VnaCB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICBhbmQgZXhwbGljaXRseSB0aHJvdWdoIHRoZSByZWNpcGUncworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBvcHRpb25hbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBhIHJlY2lwZSB1c2VzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LCB0aGF0IHJlY2lwZSdzCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBmb3VuZCB1bmRlciBhbiBhbHRlcm5hdGl2ZSBuYW1lIG9yIG5hbWVzIG90aGVyCisgICAgICAgICAgICB0aGFuIHRoZSBpbXBsaWNpdCA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiBuYW1lLgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSBhIHJlY2lwZSBuYW1lZCA8ZmlsZW5hbWU+a2V5Ym9hcmRfMS4wLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbnRhaW5lZCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUk9WSURFUyArPSAiZnVsbGtleWJvYXJkIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgZm9yIHRoaXMgcmVjaXBlIGJlY29tZXMKKyAgICAgICAgICAgICJrZXlib2FyZCIsIHdoaWNoIGlzIGltcGxpY2l0LCBhbmQgImZ1bGxrZXlib2FyZCIsIHdoaWNoIGlzIGV4cGxpY2l0LgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgZnVuY3Rpb25hbGl0eSBmb3VuZCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmtleWJvYXJkXzEuMC5iYjwvZmlsZW5hbWU+IGNhbiBiZSBmb3VuZCB1bmRlciB0d28KKyAgICAgICAgICAgIGRpZmZlcmVudCBuYW1lcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYi1iaXRiYWtlLXByZWZlcmVuY2VzJz4KKyAgICAgICAgPHRpdGxlPlByZWZlcmVuY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIG9ubHkgcGFydCBvZiB0aGUgc29sdXRpb24KKyAgICAgICAgICAgIGZvciBmaWd1cmluZyBvdXQgYSB0YXJnZXQncyByZWNpcGVzLgorICAgICAgICAgICAgQmVjYXVzZSB0YXJnZXRzIG1pZ2h0IGhhdmUgbXVsdGlwbGUgcHJvdmlkZXJzLCBCaXRCYWtlIG5lZWRzCisgICAgICAgICAgICB0byBwcmlvcml0aXplIHByb3ZpZGVycyBieSBkZXRlcm1pbmluZyBwcm92aWRlciBwcmVmZXJlbmNlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSBpbiB3aGljaCBhIHRhcmdldCBoYXMgbXVsdGlwbGUgcHJvdmlkZXJzCisgICAgICAgICAgICBpcyAidmlydHVhbC9rZXJuZWwiLCB3aGljaCBpcyBvbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgZm9yIGVhY2gga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIEVhY2ggbWFjaGluZSBvZnRlbiBzZWxlY3RzIHRoZSBiZXN0IGtlcm5lbCBwcm92aWRlciBieSB1c2luZyBhCisgICAgICAgICAgICBsaW5lIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0byIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBpcyB0aGUgcHJvdmlkZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBCaXRiYWtlIGl0ZXJhdGVzIHRocm91Z2ggZWFjaCB0YXJnZXQgaXQgbmVlZHMgdG8gYnVpbGQgYW5kCisgICAgICAgICAgICByZXNvbHZlcyB0aGVtIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgdXNpbmcgdGhpcyBwcm9jZXNzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIGhvdyBwcm92aWRlcnMgYXJlIGNob3NlbiBpcyBtYWRlIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0CisgICAgICAgICAgICB0aGF0IG11bHRpcGxlIHZlcnNpb25zIG1pZ2h0IGV4aXN0IGZvciBhIGdpdmVuIHByb3ZpZGVyLgorICAgICAgICAgICAgQml0QmFrZSBkZWZhdWx0cyB0byB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIGEgcHJvdmlkZXIuCisgICAgICAgICAgICBWZXJzaW9uIGNvbXBhcmlzb25zIGFyZSBtYWRlIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBhcyBEZWJpYW4uCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IGEgcGFydGljdWxhciB2ZXJzaW9uLgorICAgICAgICAgICAgWW91IGNhbiBpbmZsdWVuY2UgdGhlIG9yZGVyIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGZpbGVzIGhhdmUgYSBwcmVmZXJlbmNlIG9mICIwIi4KKyAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICItMSIgbWFrZXMgdGhlCisgICAgICAgICAgICByZWNpcGUgdW5saWtlbHkgdG8gYmUgdXNlZCB1bmxlc3MgaXQgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLgorICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gdG8gIjEiIG1ha2VzIGl0CisgICAgICAgICAgICBsaWtlbHkgdGhlIHJlY2lwZSBpcyB1c2VkLgorICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT4gb3ZlcnJpZGVzIGFueQorICAgICAgICAgICAgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHNldHRpbmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gaXMgb2Z0ZW4gdXNlZCB0byBtYXJrIG5ld2VyCisgICAgICAgICAgICBhbmQgbW9yZSBleHBlcmltZW50YWwgcmVjaXBlIHZlcnNpb25zIHVudGlsIHRoZXkgaGF2ZSB1bmRlcmdvbmUKKyAgICAgICAgICAgIHN1ZmZpY2llbnQgdGVzdGluZyB0byBiZSBjb25zaWRlcmVkIHN0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUg4oCcdmVyc2lvbnPigJ0gb2YgYSBnaXZlbiByZWNpcGUsCisgICAgICAgICAgICBCaXRCYWtlIGRlZmF1bHRzIHRvIHNlbGVjdGluZyB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgICAgIHZlcnNpb24sIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorICAgICAgICAgICAgSWYgdGhlIHJlY2lwZSBpbiBxdWVzdGlvbiBoYXMgYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgc2V0IGxvd2VyIHRoYW4gdGhlIG90aGVyIHJlY2lwZXMgKGRlZmF1bHQgaXMgMCksIHRoZW4KKyAgICAgICAgICAgIGl0IHdpbGwgbm90IGJlIHNlbGVjdGVkLgorICAgICAgICAgICAgVGhpcyBhbGxvd3MgdGhlIHBlcnNvbiBvciBwZXJzb25zIG1haW50YWluaW5nCisgICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSBvZiByZWNpcGUgZmlsZXMgdG8gc3BlY2lmeQorICAgICAgICAgICAgdGhlaXIgcHJlZmVyZW5jZSBmb3IgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgdmVyc2lvbi4KKyAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHVzZXIgY2FuIHNwZWNpZnkgdGhlaXIgcHJlZmVycmVkIHZlcnNpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHRoZSBmaXJzdCByZWNpcGUgaXMgbmFtZWQgPGZpbGVuYW1lPmFfMS4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgd2lsbCBiZSBzZXQgdG8g4oCcYeKAnSwgYW5kIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIDEuMS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGh1cywgaWYgYSByZWNpcGUgbmFtZWQgPGZpbGVuYW1lPmFfMS4yLmJiPC9maWxlbmFtZT4gZXhpc3RzLCBCaXRCYWtlCisgICAgICAgICAgICB3aWxsIGNob29zZSAxLjIgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgQml0QmFrZSBwYXJzZXMsIHlvdQorICAgICAgICAgICAgY2FuIGNoYW5nZSB0aGF0IHByZWZlcmVuY2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2EgPSAiMS4xIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyBjb21tb24gZm9yIGEgcmVjaXBlIHRvIHByb3ZpZGUgdHdvIHZlcnNpb25zIC0tIGEgc3RhYmxlLAorICAgICAgICAgICAgICAgIG51bWJlcmVkIChhbmQgcHJlZmVycmVkKSB2ZXJzaW9uLCBhbmQgYSB2ZXJzaW9uIHRoYXQgaXMKKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgb3V0IGZyb20gYSBzb3VyY2UgY29kZSByZXBvc2l0b3J5IHRoYXQKKyAgICAgICAgICAgICAgICBpcyBjb25zaWRlcmVkIG1vcmUgImJsZWVkaW5nIGVkZ2UiIGJ1dCBjYW4gYmUgc2VsZWN0ZWQgb25seQorICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiB0aGUgT3BlbkVtYmVkZGVkIGNvZGViYXNlLCB0aGVyZSBpcyBhIHN0YW5kYXJkLAorICAgICAgICAgICAgICAgIHZlcnNpb25lZCByZWNpcGUgZmlsZSBmb3IgQnVzeUJveCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLjIyLjEuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBidXQgdGhlcmUgaXMgYWxzbyBhIEdpdC1iYXNlZCB2ZXJzaW9uLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94X2dpdC5iYjwvZmlsZW5hbWU+LCB3aGljaCBleHBsaWNpdGx5IGNvbnRhaW5zIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIERFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgdGhlIG51bWJlcmVkLCBzdGFibGUgdmVyc2lvbiBpcyBhbHdheXMgcHJlZmVycmVkCisgICAgICAgICAgICAgICAgdW5sZXNzIHRoZSBkZXZlbG9wZXIgc2VsZWN0cyBvdGhlcndpc2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1kZXBlbmRlbmNpZXMnPgorICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVhY2ggdGFyZ2V0IEJpdEJha2UgYnVpbGRzIGNvbnNpc3RzIG9mIG11bHRpcGxlIHRhc2tzIHN1Y2ggYXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jb21waWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICBGb3IgYmVzdCBwZXJmb3JtYW5jZSBvbiBtdWx0aS1jb3JlIHN5c3RlbXMsIEJpdEJha2UgY29uc2lkZXJzIGVhY2gKKyAgICAgICAgICAgIHRhc2sgYXMgYW4gaW5kZXBlbmRlbnQKKyAgICAgICAgICAgIGVudGl0eSB3aXRoIGl0cyBvd24gc2V0IG9mIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIHRocm91Z2ggc2V2ZXJhbCB2YXJpYWJsZXMuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdmFyaWFibGVzIEJpdEJha2UgdXNlcyBpbgorICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+VmFyaWFibGVzIEdsb3NzYXJ5PC9saW5rPgorICAgICAgICAgICAgbmVhciB0aGUgZW5kIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgQXQgYSBiYXNpYyBsZXZlbCwgaXQgaXMgc3VmZmljaWVudCB0byBrbm93IHRoYXQgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzIHdoZW4KKyAgICAgICAgICAgIGNhbGN1bGF0aW5nIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IEJpdEJha2UgaGFuZGxlcyBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXBlbmRlbmNpZXMnPkRlcGVuZGVuY2llczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtdGFza2xpc3QnPgorICAgICAgICA8dGl0bGU+VGhlIFRhc2sgTGlzdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCYXNlZCBvbiB0aGUgZ2VuZXJhdGVkIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgIEJpdEJha2UgY2FuIG5vdyBjYWxjdWxhdGUgZXhhY3RseSB3aGF0IHRhc2tzIGl0IG5lZWRzIHRvIHJ1biBhbmQgaW4gd2hhdAorICAgICAgICAgICAgb3JkZXIgaXQgbmVlZHMgdG8gcnVuIHRoZW0uCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdleGVjdXRpbmctdGFza3MnPkV4ZWN1dGluZyBUYXNrczwvbGluaz4iIHNlY3Rpb24gaGFzIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyBCaXRCYWtlIGNob29zZXMgd2hpY2ggdGFzayB0byBleGVjdXRlIG5leHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBidWlsZCBub3cgc3RhcnRzIHdpdGggQml0QmFrZSBmb3JraW5nIG9mZiB0aHJlYWRzIHVwIHRvIHRoZSBsaW1pdCBzZXQgaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCaXRCYWtlIGNvbnRpbnVlcyB0byBmb3JrIHRocmVhZHMgYXMgbG9uZyBhcyB0aGVyZSBhcmUgdGFza3MgcmVhZHkgdG8gcnVuLAorICAgICAgICAgICAgdGhvc2UgdGFza3MgaGF2ZSBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzIG1ldCwgYW5kIHRoZSB0aHJlYWQgdGhyZXNob2xkIGhhcyBub3QgYmVlbgorICAgICAgICAgICAgZXhjZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHlvdSBjYW4gZ3JlYXRseSBzcGVlZCB1cCB0aGUgYnVpbGQgdGltZSBieSBwcm9wZXJseSBzZXR0aW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGVhY2ggdGFzayBjb21wbGV0ZXMsIGEgdGltZXN0YW1wIGlzIHdyaXR0ZW4gdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIE9uIHN1YnNlcXVlbnQgcnVucywgQml0QmFrZSBsb29rcyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IHdpdGhpbgorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9zdGFtcHM8L2ZpbGVuYW1lPiBhbmQgZG9lcyBub3QgcmVydW4KKyAgICAgICAgICAgIHRhc2tzIHRoYXQgYXJlIGFscmVhZHkgY29tcGxldGVkIHVubGVzcyBhIHRpbWVzdGFtcCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLgorICAgICAgICAgICAgQ3VycmVudGx5LCBpbnZhbGlkIHRpbWVzdGFtcHMgYXJlIG9ubHkgY29uc2lkZXJlZCBvbiBhIHBlcgorICAgICAgICAgICAgcmVjaXBlIGZpbGUgYmFzaXMuCisgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGlmIHRoZSBjb25maWd1cmUgc3RhbXAgaGFzIGEgdGltZXN0YW1wIGdyZWF0ZXIgdGhhbiB0aGUKKyAgICAgICAgICAgIGNvbXBpbGUgdGltZXN0YW1wIGZvciBhIGdpdmVuIHRhcmdldCwgdGhlbiB0aGUgY29tcGlsZSB0YXNrIHdvdWxkIHJlcnVuLgorICAgICAgICAgICAgUnVubmluZyB0aGUgY29tcGlsZSB0YXNrIGFnYWluLCBob3dldmVyLCBoYXMgbm8gZWZmZWN0IG9uIG90aGVyIHByb3ZpZGVycworICAgICAgICAgICAgdGhhdCBkZXBlbmQgb24gdGhhdCB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHN0YW1wcyBpcyBwYXJ0bHkgY29uZmlndXJhYmxlLgorICAgICAgICAgICAgSW4gbW9kZXJuIHZlcnNpb25zIG9mIEJpdEJha2UsIGEgaGFzaCBpcyBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgIHN0YW1wIHNvIHRoYXQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgdGhlIHN0YW1wIGJlY29tZXMKKyAgICAgICAgICAgIGludmFsaWQgYW5kIHRoZSB0YXNrIGlzIGF1dG9tYXRpY2FsbHkgcmVydW4uCisgICAgICAgICAgICBUaGlzIGhhc2gsIG9yIHNpZ25hdHVyZSB1c2VkLCBpcyBnb3Zlcm5lZCBieSB0aGUgc2lnbmF0dXJlIHBvbGljeQorICAgICAgICAgICAgdGhhdCBpcyBjb25maWd1cmVkIChzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uKS4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXBwZW5kIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBzdGFtcCB1c2luZworICAgICAgICAgICAgdGhlICJzdGFtcC1leHRyYS1pbmZvIiB0YXNrIGZsYWcuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgT3BlbkVtYmVkZGVkIHVzZXMgdGhpcyBmbGFnIHRvIG1ha2Ugc29tZSB0YXNrcyBtYWNoaW5lLXNwZWNpZmljLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBTb21lIHRhc2tzIGFyZSBtYXJrZWQgYXMgIm5vc3RhbXAiIHRhc2tzLgorICAgICAgICAgICAgTm8gdGltZXN0YW1wIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHRoZXNlIHRhc2tzIGFyZSBydW4uCisgICAgICAgICAgICBDb25zZXF1ZW50bHksICJub3N0YW1wIiB0YXNrcyBhcmUgYWx3YXlzIHJlcnVuLgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0YXNrcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2tzJz5UYXNrczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXhlY3V0aW5nLXRhc2tzJz4KKyAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBUYXNrczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUYXNrcyBjYW4gYmUgZWl0aGVyIGEgc2hlbGwgdGFzayBvciBhIFB5dGhvbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCBCaXRCYWtlIHdyaXRlcyBhIHNoZWxsIHNjcmlwdCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9ydW4uZG9fdGFza25hbWUucGlkPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCB0aGVuIGV4ZWN1dGVzIHRoZSBzY3JpcHQuCisgICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNoZWxsIHNjcmlwdCBjb250YWlucyBhbGwgdGhlIGV4cG9ydGVkIHZhcmlhYmxlcywKKyAgICAgICAgICAgIGFuZCB0aGUgc2hlbGwgZnVuY3Rpb25zIHdpdGggYWxsIHZhcmlhYmxlcyBleHBhbmRlZC4KKyAgICAgICAgICAgIE91dHB1dCBmcm9tIHRoZSBzaGVsbCBzY3JpcHQgZ29lcyB0byB0aGUgZmlsZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7VH0vbG9nLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgTG9va2luZyBhdCB0aGUgZXhwYW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluIHRoZSBydW4gZmlsZSBhbmQKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgaW4gdGhlIGxvZyBmaWxlcyBpcyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdGVjaG5pcXVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgUHl0aG9uIHRhc2tzLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSB0YXNrIGludGVybmFsbHkgYW5kIGxvZ3MKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgICAgIEZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIHdpbGwgd3JpdGUgdGhlIGZ1bmN0aW9ucyB0byBmaWxlcworICAgICAgICAgICAgc2ltaWxhciB0byB0aGUgd2F5IHNoZWxsIHRhc2tzIGFyZSBoYW5kbGVkLgorICAgICAgICAgICAgTG9nZ2luZyB3aWxsIGJlIGhhbmRsZWQgaW4gYSB3YXkgc2ltaWxhciB0byBzaGVsbCB0YXNrcyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3JkZXIgaW4gd2hpY2ggQml0QmFrZSBydW5zIHRoZSB0YXNrcyBpcyBjb250cm9sbGVkIGJ5IGl0cworICAgICAgICAgICAgdGFzayBzY2hlZHVsZXIuCisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgdGhlIHNjaGVkdWxlciBhbmQgZGVmaW5lIGN1c3RvbQorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZXNlIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgdGhlCisgICAgICAgICAgICBiZWhhdmlvcjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU0NIRURVTEVSJz48ZmlsZW5hbWU+QkJfU0NIRURVTEVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NDSEVEVUxFUlMnPjxmaWxlbmFtZT5CQl9TQ0hFRFVMRVJTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGZ1bmN0aW9ucyBydW4gYmVmb3JlIGFuZCBhZnRlciBhIHRhc2sncyBtYWluCisgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgInByZWZ1bmNzIiBhbmQgInBvc3RmdW5jcyIgZmxhZ3Mgb2YgdGhlIHRhc2sKKyAgICAgICAgICAgIHRoYXQgbGlzdHMgdGhlIGZ1bmN0aW9ucyB0byBydW4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY2hlY2tzdW1zJz4KKyAgICAgICAgPHRpdGxlPkNoZWNrc3VtcyAoU2lnbmF0dXJlcyk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjaGVja3N1bSBpcyBhIHVuaXF1ZSBzaWduYXR1cmUgb2YgYSB0YXNrJ3MgaW5wdXRzLgorICAgICAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBhIHRhc2sgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgdGFzaworICAgICAgICAgICAgbmVlZHMgdG8gYmUgcnVuLgorICAgICAgICAgICAgQmVjYXVzZSBpdCBpcyBhIGNoYW5nZSBpbiBhIHRhc2sncyBpbnB1dHMgdGhhdCB0cmlnZ2VycyBydW5uaW5nCisgICAgICAgICAgICB0aGUgdGFzaywgQml0QmFrZSBuZWVkcyB0byBkZXRlY3QgYWxsIHRoZSBpbnB1dHMgdG8gYSBnaXZlbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCB0aGlzIHR1cm5zIG91dCB0byBiZSBmYWlybHkgZWFzeSBiZWNhdXNlCisgICAgICAgICAgICBCaXRCYWtlIGdlbmVyYXRlcyBhICJydW4iIHNoZWxsIHNjcmlwdCBmb3IgZWFjaCB0YXNrIGFuZAorICAgICAgICAgICAgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgY2hlY2tzdW0gdGhhdCBnaXZlcyB5b3UgYSBnb29kIGlkZWEgb2Ygd2hlbgorICAgICAgICAgICAgdGhlIHRhc2sncyBkYXRhIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNvbXBsaWNhdGUgdGhlIHByb2JsZW0sIHNvbWUgdGhpbmdzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4KKyAgICAgICAgICAgIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgIEZpcnN0LCB0aGVyZSBpcyB0aGUgYWN0dWFsIHNwZWNpZmljIGJ1aWxkIHBhdGggb2YgYSBnaXZlbiB0YXNrIC0KKyAgICAgICAgICAgIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEl0IGRvZXMgbm90IG1hdHRlciBpZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcyBiZWNhdXNlIGl0IHNob3VsZCBub3QKKyAgICAgICAgICAgIGFmZmVjdCB0aGUgb3V0cHV0IGZvciB0YXJnZXQgcGFja2FnZXMuCisgICAgICAgICAgICBUaGUgc2ltcGxpc3RpYyBhcHByb2FjaCBmb3IgZXhjbHVkaW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB0byBzZXQKKyAgICAgICAgICAgIGl0IHRvIHNvbWUgZml4ZWQgdmFsdWUgYW5kIGNyZWF0ZSB0aGUgY2hlY2tzdW0gZm9yIHRoZSAicnVuIiBzY3JpcHQuCisgICAgICAgICAgICBCaXRCYWtlIGdvZXMgb25lIHN0ZXAgYmV0dGVyIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0hBU0hCQVNFX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0hBU0hCQVNFX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIGEgbGlzdCBvZiB2YXJpYWJsZXMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQKKyAgICAgICAgICAgIHdoZW4gZ2VuZXJhdGluZyB0aGUgc2lnbmF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBwcm9ibGVtIHJlc3VsdHMgZnJvbSB0aGUgInJ1biIgc2NyaXB0cyBjb250YWluaW5nIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgICAgICBtaWdodCBvciBtaWdodCBub3QgZ2V0IGNhbGxlZC4KKyAgICAgICAgICAgIFRoZSBpbmNyZW1lbnRhbCBidWlsZCBzb2x1dGlvbiBjb250YWlucyBjb2RlIHRoYXQgZmlndXJlcyBvdXQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBiZXR3ZWVuIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgY29kZSBpcyB1c2VkIHRvIHBydW5lIHRoZSAicnVuIiBzY3JpcHRzIGRvd24gdG8gdGhlIG1pbmltdW0gc2V0LAorICAgICAgICAgICAgdGhlcmVieSBhbGxldmlhdGluZyB0aGlzIHByb2JsZW0gYW5kIG1ha2luZyB0aGUgInJ1biIgc2NyaXB0cyBtdWNoIG1vcmUKKyAgICAgICAgICAgIHJlYWRhYmxlIGFzIGEgYm9udXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvIGZhciB3ZSBoYXZlIHNvbHV0aW9ucyBmb3Igc2hlbGwgc2NyaXB0cy4KKyAgICAgICAgICAgIFdoYXQgYWJvdXQgUHl0aG9uIHRhc2tzPworICAgICAgICAgICAgVGhlIHNhbWUgYXBwcm9hY2ggYXBwbGllcyBldmVuIHRob3VnaCB0aGVzZSB0YXNrcyBhcmUgbW9yZSBkaWZmaWN1bHQuCisgICAgICAgICAgICBUaGUgcHJvY2VzcyBuZWVkcyB0byBmaWd1cmUgb3V0IHdoYXQgdmFyaWFibGVzIGEgUHl0aG9uIGZ1bmN0aW9uIGFjY2Vzc2VzCisgICAgICAgICAgICBhbmQgd2hhdCBmdW5jdGlvbnMgaXQgY2FsbHMuCisgICAgICAgICAgICBBZ2FpbiwgdGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaXJzdCBmaWd1cmVzIG91dAorICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGNyZWF0ZXMgYSBjaGVja3N1bSBmb3IgdGhlIGRhdGEKKyAgICAgICAgICAgIHVzZWQgYXMgdGhlIGlucHV0IHRvIHRoZSB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaWtlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjYXNlLCBzaXR1YXRpb25zIGV4aXN0IHdoZXJlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgc2hvdWxkIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBjYW4gaW5zdHJ1Y3QgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gaWdub3JlIGEgZGVwZW5kZW5jeQorICAgICAgICAgICAgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBlbnN1cmVzIHRoYXQgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0FSQ0hTPC9maWxlbmFtZT4gdmFyaWFibGUgZG9lcyBub3QKKyAgICAgICAgICAgIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiwgZXZlbiBpZiBpdCBkb2VzIHJlZmVyZW5jZSBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXF1YWxseSwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYWRkIGRlcGVuZGVuY2llcyBCaXRCYWtlCisgICAgICAgICAgICBpcyBub3QgYWJsZSB0byBmaW5kLgorICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc10gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBleHBsaWNpdGx5IGFkZHMgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgYQorICAgICAgICAgICAgZGVwZW5kZW5jeSBmb3IgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uc2lkZXIgYSBjYXNlIHdpdGggaW4tbGluZSBQeXRob24sIGZvciBleGFtcGxlLCB3aGVyZSBCaXRCYWtlIGlzIG5vdAorICAgICAgICAgICAgYWJsZSB0byBmaWd1cmUgb3V0IGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIFdoZW4gcnVubmluZyBpbiBkZWJ1ZyBtb2RlIChpLmUuIHVzaW5nIDxmaWxlbmFtZT4tREREPC9maWxlbmFtZT4pLCBCaXRCYWtlCisgICAgICAgICAgICBwcm9kdWNlcyBvdXRwdXQgd2hlbiBpdCBkaXNjb3ZlcnMgc29tZXRoaW5nIGZvciB3aGljaCBpdCBjYW5ub3QgZmlndXJlIG91dAorICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaHVzIGZhciwgdGhpcyBzZWN0aW9uIGhhcyBsaW1pdGVkIGRpc2N1c3Npb24gdG8gdGhlIGRpcmVjdCBpbnB1dHMgaW50byBhIHRhc2suCisgICAgICAgICAgICBJbmZvcm1hdGlvbiBiYXNlZCBvbiBkaXJlY3QgaW5wdXRzIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAiYmFzZWhhc2giIGluIHRoZQorICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIHRoZSBxdWVzdGlvbiBvZiBhIHRhc2sncyBpbmRpcmVjdCBpbnB1dHMgLSB0aGUKKyAgICAgICAgICAgIHRoaW5ncyB0aGF0IHdlcmUgYWxyZWFkeSBidWlsdCBhbmQgcHJlc2VudCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIGZvciBhIHBhcnRpY3VsYXIgdGFzayBuZWVkcyB0byBhZGQgdGhlIGhhc2hlcworICAgICAgICAgICAgb2YgYWxsIHRoZSB0YXNrcyBvbiB3aGljaCB0aGUgcGFydGljdWxhciB0YXNrIGRlcGVuZHMuCisgICAgICAgICAgICBDaG9vc2luZyB3aGljaCBkZXBlbmRlbmNpZXMgdG8gYWRkIGlzIGEgcG9saWN5IGRlY2lzaW9uLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIGVmZmVjdCBpcyB0byBnZW5lcmF0ZSBhIG1hc3RlciBjaGVja3N1bSB0aGF0IGNvbWJpbmVzIHRoZSBiYXNlaGFzaAorICAgICAgICAgICAgYW5kIHRoZSBoYXNoZXMgb2YgdGhlIHRhc2sncyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoZSBjb2RlIGxldmVsLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHdheXMgYm90aCB0aGUgYmFzZWhhc2ggYW5kIHRoZQorICAgICAgICAgICAgZGVwZW5kZW50IHRhc2sgaGFzaGVzIGNhbiBiZSBpbmZsdWVuY2VkLgorICAgICAgICAgICAgV2l0aGluIHRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2UgY2FuIGdpdmUgQml0QmFrZSBzb21lIGV4dHJhIGluZm9ybWF0aW9uCisgICAgICAgICAgICB0byBoZWxwIGl0IGNvbnN0cnVjdCB0aGUgYmFzZWhhc2guCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBlZmZlY3RpdmVseSByZXN1bHRzIGluIGEgbGlzdCBvZiBnbG9iYWwgdmFyaWFibGUKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgZXhjbHVkZXMgLSB2YXJpYWJsZXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGNoZWNrc3VtLgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHVzZXMgdmFyaWFibGVzIGZyb20gT3BlbkVtYmVkZGVkIHRvIGhlbHAgaWxsdXN0cmF0ZQorICAgICAgICAgICAgdGhlIGNvbmNlcHQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0hBU0hCQVNFX1dISVRFTElTVCA/PSAiVE1QRElSIEZJTEUgUEFUSCBQV0QgQkJfVEFTS0hBU0ggQkJQQVRIIERMX0RJUiBcCisgICAgICAgICBTU1RBVEVfRElSIFRISVNESVIgRklMRVNFWFRSQVBBVEhTIEZJTEVfRElSTkFNRSBIT01FIExPR05BTUUgU0hFTEwgVEVSTSBcCisgICAgICAgICBVU0VSIEZJTEVTUEFUSCBTVEFHSU5HX0RJUl9IT1NUIFNUQUdJTkdfRElSX1RBUkdFVCBDT1JFQkFTRSBQUlNFUlZfSE9TVCBcCisgICAgICAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAorICAgICAgICAgQ0NBQ0hFX0RJUiBFWFRFUk5BTF9UT09MQ0hBSU4gQ0NBQ0hFIENDQUNIRV9ESVNBQkxFIExJQ0VOU0VfUEFUSCBTREtQS0dTVUZGSVgiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBleGNsdWRlcyB0aGUgd29yayBkaXJlY3RvcnksIHdoaWNoIGlzIHBhcnQgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJ1bGVzIGZvciBkZWNpZGluZyB3aGljaCBoYXNoZXMgb2YgZGVwZW5kZW50IHRhc2tzIHRvIGluY2x1ZGUgdGhyb3VnaAorICAgICAgICAgICAgZGVwZW5kZW5jeSBjaGFpbnMgYXJlIG1vcmUgY29tcGxleCBhbmQgYXJlIGdlbmVyYWxseSBhY2NvbXBsaXNoZWQgd2l0aCBhCisgICAgICAgICAgICBQeXRob24gZnVuY3Rpb24uCisgICAgICAgICAgICBUaGUgY29kZSBpbiA8ZmlsZW5hbWU+bWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5PC9maWxlbmFtZT4gc2hvd3MgdHdvIGV4YW1wbGVzCisgICAgICAgICAgICBvZiB0aGlzIGFuZCBhbHNvIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIGluc2VydCB5b3VyIG93biBwb2xpY3kgaW50byB0aGUgc3lzdGVtCisgICAgICAgICAgICBpZiBzbyBkZXNpcmVkLgorICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycyBPcGVuRW1iZWRkZWQgQ29yZQorICAgICAgICAgICAgdXNlczogICJPRUJhc2ljIiBhbmQgIk9FQmFzaWNIYXNoIi4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZXJlIGlzIGEgZHVtbXkgIm5vb3AiIHNpZ25hdHVyZSBoYW5kbGVyIGVuYWJsZWQgaW4gQml0QmFrZS4KKyAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PRS1Db3JlPC9maWxlbmFtZT4gdXNlcyB0aGUgIk9FQmFzaWNIYXNoIiBzaWduYXR1cmUgaGFuZGxlciBieSBkZWZhdWx0CisgICAgICAgICAgICB0aHJvdWdoIHRoaXMgc2V0dGluZyBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAiT0VCYXNpY0hhc2giIDxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+IGlzIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgIk9FQmFzaWMiIHZlcnNpb24gYnV0IGFkZHMgdGhlIHRhc2sgaGFzaCB0byB0aGUgc3RhbXAgZmlsZXMuCisgICAgICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYW55IG1ldGFkYXRhIGNoYW5nZSB0aGF0IGNoYW5nZXMgdGhlIHRhc2sgaGFzaCwgYXV0b21hdGljYWxseQorICAgICAgICAgICAgY2F1c2luZyB0aGUgdGFzayB0byBiZSBydW4gYWdhaW4uCisgICAgICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgdG8gYnVtcAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlcywgYW5kIGNoYW5nZXMgdG8gbWV0YWRhdGEgYXV0b21hdGljYWxseSByaXBwbGUgYWNyb3NzIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgZW5kIHJlc3VsdCBvZiB0aGVzZSBzaWduYXR1cmUgZ2VuZXJhdG9ycyBpcyB0bworICAgICAgICAgICAgbWFrZSBzb21lIGRlcGVuZGVuY3kgYW5kIGhhc2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfQkFTRUhBU0hfdGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggdGFzayBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIGhhc2hlcyBmb3IgZWFjaCBkZXBlbmRlbnQgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQkhBU0hERVBTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGRlcGVuZGVuY2llcyBmb3IgZWFjaCB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1RBU0tIQVNIPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBoYXNoIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCBCaXRCYWtlJ3MgIi1TIiBvcHRpb24gbGV0cyB5b3UKKyAgICAgICAgICAgIGRlYnVnIEJpdGJha2UncyBwcm9jZXNzaW5nIG9mIHNpZ25hdHVyZXMuCisgICAgICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gLVMgYWxsb3cgZGlmZmVyZW50IGRlYnVnZ2luZyBtb2RlcworICAgICAgICAgICAgdG8gYmUgdXNlZCwgZWl0aGVyIHVzaW5nIEJpdEJha2UncyBvd24gZGVidWcgZnVuY3Rpb25zCisgICAgICAgICAgICBvciBwb3NzaWJseSB0aG9zZSBkZWZpbmVkIGluIHRoZSBtZXRhZGF0YS9zaWduYXR1cmUgaGFuZGxlcgorICAgICAgICAgICAgaXRzZWxmLgorICAgICAgICAgICAgVGhlIHNpbXBsZXN0IHBhcmFtZXRlciB0byBwYXNzIGlzICJub25lIiwgd2hpY2ggY2F1c2VzIGEKKyAgICAgICAgICAgIHNldCBvZiBzaWduYXR1cmUgaW5mb3JtYXRpb24gdG8gYmUgd3JpdHRlbiBvdXQgaW50bworICAgICAgICAgICAgPGZpbGVuYW1lPlNUQU1QX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXRzIHNwZWNpZmllZC4KKyAgICAgICAgICAgIFRoZSBvdGhlciBjdXJyZW50bHkgYXZhaWxhYmxlIHBhcmFtZXRlciBpcyAicHJpbnRkaWZmIiwKKyAgICAgICAgICAgIHdoaWNoIGNhdXNlcyBCaXRCYWtlIHRvIHRyeSB0byBlc3RhYmxpc2ggdGhlIGNsb3Nlc3QKKyAgICAgICAgICAgIHNpZ25hdHVyZSBtYXRjaCBpdCBjYW4gKGUuZy4gaW4gdGhlIHNzdGF0ZSBjYWNoZSkgYW5kIHRoZW4KKyAgICAgICAgICAgIHJ1biA8ZmlsZW5hbWU+Yml0YmFrZS1kaWZmc2lnczwvZmlsZW5hbWU+IG92ZXIgdGhlIG1hdGNoZXMKKyAgICAgICAgICAgIHRvIGRldGVybWluZSB0aGUgc3RhbXBzIGFuZCBkZWx0YSB3aGVyZSB0aGVzZSB0d28KKyAgICAgICAgICAgIHN0YW1wIHRyZWVzIGRpdmVyZ2UuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJdCBpcyBsaWtlbHkgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgQml0QmFrZSB3aWxsCisgICAgICAgICAgICAgICAgcHJvdmlkZSBvdGhlciBzaWduYXR1cmUgaGFuZGxlcnMgdHJpZ2dlcmVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsICItUyIgcGFyYW1ldGVycy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gY2hlY2tzdW0gbWV0YWRhdGEgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndGFzay1jaGVja3N1bXMtYW5kLXNldHNjZW5lJz5UYXNrIENoZWNrc3VtcyBhbmQgU2V0c2NlbmU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZXRzY2VuZSc+CisgICAgICAgIDx0aXRsZT5TZXRzY2VuZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2V0c2NlbmUgcHJvY2VzcyBlbmFibGVzIEJpdEJha2UgdG8gaGFuZGxlICJwcmUtYnVpbHQiIGFydGlmYWN0cy4KKyAgICAgICAgICAgIFRoZSBhYmlsaXR5IHRvIGhhbmRsZSBhbmQgcmV1c2UgdGhlc2UgYXJ0aWZhY3RzIGFsbG93cyBCaXRCYWtlCisgICAgICAgICAgICB0aGUgbHV4dXJ5IG9mIG5vdCBoYXZpbmcgdG8gYnVpbGQgc29tZXRoaW5nIGZyb20gc2NyYXRjaCBldmVyeSB0aW1lLgorICAgICAgICAgICAgSW5zdGVhZCwgQml0QmFrZSBjYW4gdXNlLCB3aGVuIHBvc3NpYmxlLCBleGlzdGluZyBidWlsZCBhcnRpZmFjdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgbmVlZHMgdG8gaGF2ZSByZWxpYWJsZSBkYXRhIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYW4KKyAgICAgICAgICAgIGFydGlmYWN0IGlzIGNvbXBhdGlibGUuCisgICAgICAgICAgICBTaWduYXR1cmVzLCBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHByb3ZpZGUgYW4gaWRlYWwKKyAgICAgICAgICAgIHdheSBvZiByZXByZXNlbnRpbmcgd2hldGhlciBhbiBhcnRpZmFjdCBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgSWYgYSBzaWduYXR1cmUgaXMgdGhlIHNhbWUsIGFuIG9iamVjdCBjYW4gYmUgcmV1c2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBhbiBvYmplY3QgY2FuIGJlIHJldXNlZCwgdGhlIHByb2JsZW0gdGhlbiBiZWNvbWVzIGhvdyB0bworICAgICAgICAgICAgcmVwbGFjZSBhIGdpdmVuIHRhc2sgb3Igc2V0IG9mIHRhc2tzIHdpdGggdGhlIHByZS1idWlsdCBhcnRpZmFjdC4KKyAgICAgICAgICAgIEJpdEJha2Ugc29sdmVzIHRoZSBwcm9ibGVtIHdpdGggdGhlICJzZXRzY2VuZSIgcHJvY2Vzcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBCaXRCYWtlIGlzIGFza2VkIHRvIGJ1aWxkIGEgZ2l2ZW4gdGFyZ2V0LCBiZWZvcmUgYnVpbGRpbmcgYW55dGhpbmcsCisgICAgICAgICAgICBpdCBmaXJzdCBhc2tzIHdoZXRoZXIgY2FjaGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYW55IG9mIHRoZQorICAgICAgICAgICAgdGFyZ2V0cyBpdCdzIGJ1aWxkaW5nLCBvciBhbnkgb2YgdGhlIGludGVybWVkaWF0ZSB0YXJnZXRzLgorICAgICAgICAgICAgSWYgY2FjaGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSwgQml0QmFrZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gaW5zdGVhZCBvZgorICAgICAgICAgICAgcnVubmluZyB0aGUgbWFpbiB0YXNrcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBmaXJzdCBjYWxscyB0aGUgZnVuY3Rpb24gZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9IQVNIQ0hFQ0tfRlVOQ1RJT04nPjxmaWxlbmFtZT5CQl9IQVNIQ0hFQ0tfRlVOQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggYSBsaXN0IG9mIHRhc2tzIGFuZCBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICBoYXNoZXMgaXQgd2FudHMgdG8gYnVpbGQuCisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGZhc3QgYW5kIHJldHVybnMgYSBsaXN0CisgICAgICAgICAgICBvZiB0aGUgdGFza3MgZm9yIHdoaWNoIGl0IGJlbGlldmVzIGluIGNhbiBvYnRhaW4gYXJ0aWZhY3RzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOZXh0LCBmb3IgZWFjaCBvZiB0aGUgdGFza3MgdGhhdCB3ZXJlIHJldHVybmVkIGFzIHBvc3NpYmlsaXRpZXMsCisgICAgICAgICAgICBCaXRCYWtlIGV4ZWN1dGVzIGEgc2V0c2NlbmUgdmVyc2lvbiBvZiB0aGUgdGFzayB0aGF0IHRoZSBwb3NzaWJsZQorICAgICAgICAgICAgYXJ0aWZhY3QgY292ZXJzLgorICAgICAgICAgICAgU2V0c2NlbmUgdmVyc2lvbnMgb2YgYSB0YXNrIGhhdmUgdGhlIHN0cmluZyAiX3NldHNjZW5lIiBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgIHRhc2sgbmFtZS4KKyAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgdGhlIHRhc2sgd2l0aCB0aGUgbmFtZSA8ZmlsZW5hbWU+eHh4PC9maWxlbmFtZT4gaGFzCisgICAgICAgICAgICBhIHNldHNjZW5lIHRhc2sgbmFtZWQgPGZpbGVuYW1lPnh4eF9zZXRzY2VuZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIHNldHNjZW5lIHZlcnNpb24gb2YgdGhlIHRhc2sgZXhlY3V0ZXMgYW5kIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkKKyAgICAgICAgICAgIGFydGlmYWN0cyByZXR1cm5pbmcgZWl0aGVyIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIGFuIGFydGlmYWN0IGNhbiBjb3ZlciBtb3JlIHRoYW4gb25lIHRhc2suCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaXQgaXMgcG9pbnRsZXNzIHRvIG9idGFpbiBhIGNvbXBpbGVyIGlmIHlvdQorICAgICAgICAgICAgYWxyZWFkeSBoYXZlIHRoZSBjb21waWxlZCBiaW5hcnkuCisgICAgICAgICAgICBUbyBoYW5kbGUgdGhpcywgQml0QmFrZSBjYWxscyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBmdW5jdGlvbiBmb3IgZWFjaCBzdWNjZXNzZnVsIHNldHNjZW5lIHRhc2sgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCBuZWVkcworICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaW5hbGx5LCBhZnRlciBhbGwgdGhlIHNldHNjZW5lIHRhc2tzIGhhdmUgZXhlY3V0ZWQsIEJpdEJha2UgY2FsbHMgdGhlCisgICAgICAgICAgICBmdW5jdGlvbiBsaXN0ZWQgaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04nPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHdpdGggdGhlIGxpc3Qgb2YgdGFza3MgQml0QmFrZSB0aGlua3MgaGFzIGJlZW4gImNvdmVyZWQiLgorICAgICAgICAgICAgVGhlIG1ldGFkYXRhIGNhbiB0aGVuIGVuc3VyZSB0aGF0IHRoaXMgbGlzdCBpcyBjb3JyZWN0IGFuZCBjYW4KKyAgICAgICAgICAgIGluZm9ybSBCaXRCYWtlIHRoYXQgaXQgd2FudHMgc3BlY2lmaWMgdGFza3MgdG8gYmUgcnVuIHJlZ2FyZGxlc3MKKyAgICAgICAgICAgIG9mIHRoZSBzZXRzY2VuZSByZXN1bHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHNjZW5lIG1ldGFkYXRhIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+VGFzayBDaGVja3N1bXMgYW5kIFNldHNjZW5lPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1mZXRjaGluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2OGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbApAQCAtMCwwICsxLDc2NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyPgorPHRpdGxlPkZpbGUgRG93bmxvYWQgU3VwcG9ydDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0QmFrZSdzIGZldGNoIG1vZHVsZSBpcyBhIHN0YW5kYWxvbmUgcGllY2Ugb2YgbGlicmFyeSBjb2RlCisgICAgICAgIHRoYXQgZGVhbHMgd2l0aCB0aGUgaW50cmljYWNpZXMgb2YgZG93bmxvYWRpbmcgc291cmNlIGNvZGUKKyAgICAgICAgYW5kIGZpbGVzIGZyb20gcmVtb3RlIHN5c3RlbXMuCisgICAgICAgIEZldGNoaW5nIHNvdXJjZSBjb2RlIGlzIG9uZSBvZiB0aGUgY29ybmVyc3RvbmVzIG9mIGJ1aWxkaW5nIHNvZnR3YXJlLgorICAgICAgICBBcyBzdWNoLCB0aGlzIG1vZHVsZSBmb3JtcyBhbiBpbXBvcnRhbnQgcGFydCBvZiBCaXRCYWtlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY3VycmVudCBmZXRjaCBtb2R1bGUgaXMgY2FsbGVkICJmZXRjaDIiIGFuZCByZWZlcnMgdG8gdGhlCisgICAgICAgIGZhY3QgdGhhdCBpdCBpcyB0aGUgc2Vjb25kIG1ham9yIHZlcnNpb24gb2YgdGhlIEFQSS4KKyAgICAgICAgVGhlIG9yaWdpbmFsIHZlcnNpb24gaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29kZWJhc2UuCisgICAgICAgIFRodXMsIGluIGFsbCBjYXNlcywgImZldGNoIiByZWZlcnMgdG8gImZldGNoMiIgaW4gdGhpcworICAgICAgICBtYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1kb3dubG9hZC1mZXRjaCc+CisgICAgICAgIDx0aXRsZT5UaGUgRG93bmxvYWQgKEZldGNoKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHRha2VzIHNldmVyYWwgc3RlcHMgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZSBvciBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBmZXRjaGVyIGNvZGViYXNlIGRlYWxzIHdpdGggdHdvIGRpc3RpbmN0IHByb2Nlc3NlcyBpbiBvcmRlcjoKKyAgICAgICAgICAgIG9idGFpbmluZyB0aGUgZmlsZXMgZnJvbSBzb21ld2hlcmUgKGNhY2hlZCBvciBvdGhlcndpc2UpCisgICAgICAgICAgICBhbmQgdGhlbiB1bnBhY2tpbmcgdGhvc2UgZmlsZXMgaW50byBhIHNwZWNpZmljIGxvY2F0aW9uIGFuZAorICAgICAgICAgICAgcGVyaGFwcyBpbiBhIHNwZWNpZmljIHdheS4KKyAgICAgICAgICAgIEdldHRpbmcgYW5kIHVucGFja2luZyB0aGUgZmlsZXMgaXMgb2Z0ZW4gb3B0aW9uYWxseSBmb2xsb3dlZAorICAgICAgICAgICAgYnkgcGF0Y2hpbmcuCisgICAgICAgICAgICBQYXRjaGluZywgaG93ZXZlciwgaXMgbm90IGNvdmVyZWQgYnkgdGhpcyBtb2R1bGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb2RlIHRvIGV4ZWN1dGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBwcm9jZXNzLCBhIGZldGNoLAorICAgICAgICAgICAgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGNvZGUgc2V0cyB1cCBhbiBpbnN0YW5jZSBvZiB0aGUgZmV0Y2ggY2xhc3MuCisgICAgICAgICAgICBUaGUgaW5zdGFuY2UgdXNlcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSTHMgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZW4gY2FsbHMgdGhlIDxmaWxlbmFtZT5kb3dubG9hZDwvZmlsZW5hbWU+CisgICAgICAgICAgICBtZXRob2QgdG8gZG93bmxvYWQgdGhlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgZmV0Y2ggY2xhc3MgaXMgdXN1YWxseSBmb2xsb3dlZCBieToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdGRpciA9IGwuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgZmV0Y2hlci51bnBhY2socm9vdGRpcikKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgY29kZSB1bnBhY2tzIHRoZSBkb3dubG9hZGVkIGZpbGVzIHRvIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgY29udmVuaWVuY2UsIHRoZSBuYW1pbmcgaW4gdGhlc2UgZXhhbXBsZXMgbWF0Y2hlcworICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZXMgdXNlZCBieSBPcGVuRW1iZWRkZWQuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBhYm92ZSBjb2RlIGluIGFjdGlvbiwgZXhhbWluZQorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgY2xhc3MgZmlsZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGVzIGFyZSBub3QgaGFyZGNvZGVkIGludG8gdGhlIGZldGNoZXIsIHNpbmNlIHRob3NlIGZldGNoZXIKKyAgICAgICAgICAgIG1ldGhvZHMgY2FuIGJlIChhbmQgYXJlKSBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMuCisgICAgICAgICAgICBJbiBPcGVuRW1iZWRkZWQgZm9yIGV4YW1wbGUsIHRoZSBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY29kZSB1c2VzCisgICAgICAgICAgICB0aGUgZmV0Y2ggbW9kdWxlIHRvIGZldGNoIHRoZSBzc3RhdGUgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgICAgICAgIEJpdEJha2UgdHJpZXMgdG8gcmVzb2x2ZSB0aGUgVVJMcyBieSBsb29raW5nIGZvciBzb3VyY2UgZmlsZXMKKyAgICAgICAgICAgIGluIGEgc3BlY2lmaWMgc2VhcmNoIG9yZGVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZS1taXJyb3IgU2l0ZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBmaXJzdCB1c2VzIHByZS1taXJyb3JzIHRvIHRyeSBhbmQgZmluZCBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGxvY2F0aW9ucyBhcmUgZGVmaW5lZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBVUkk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgcHJlLW1pcnJvcnMgZmFpbCwgQml0QmFrZSB1c2VzIHRoZSBvcmlnaW5hbCBVUkwgKGUuZyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1pcnJvciBTaXRlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiBmZXRjaCBmYWlsdXJlcyBvY2N1ciwgQml0QmFrZSBuZXh0IHVzZXMgbWlycm9yIGxvY2F0aW9ucyBhcworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBlYWNoIFVSTCBwYXNzZWQgdG8gdGhlIGZldGNoZXIsIHRoZSBmZXRjaGVyCisgICAgICAgICAgICBjYWxscyB0aGUgc3VibW9kdWxlIHRoYXQgaGFuZGxlcyB0aGF0IHBhcnRpY3VsYXIgVVJMIHR5cGUuCisgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGNhbiBiZSB0aGUgc291cmNlIG9mIHNvbWUgY29uZnVzaW9uIHdoZW4geW91CisgICAgICAgICAgICBhcmUgcHJvdmlkaW5nIFVSTHMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIFVSTHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvcG9reTtwcm90b2NvbD1naXQKKyAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L3Bva3k7cHJvdG9jb2w9aHR0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgVVJMIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT53Z2V0PC9maWxlbmFtZT4gZmV0Y2hlciwgd2hpY2ggZG9lcyBub3QKKyAgICAgICAgICAgIHVuZGVyc3RhbmQgImdpdCIuCisgICAgICAgICAgICBUaGVyZWZvcmUsIHRoZSBsYXR0ZXIgY2FzZSBpcyB0aGUgY29ycmVjdCBmb3JtIHNpbmNlIHRoZQorICAgICAgICAgICAgR2l0IGZldGNoZXIgZG9lcyBrbm93IGhvdyB0byB1c2UgSFRUUCBhcyBhIHRyYW5zcG9ydC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyB0aGF0IHNob3cgY29tbW9ubHkgdXNlZCBtaXJyb3IKKyAgICAgICAgICAgIGRlZmluaXRpb25zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTID89ICJcCisgICAgICAgICBienI6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBjdnM6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBnaXQ6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBoZzovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBvc2M6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBwNDovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBzdm46Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKKworICAgICBNSVJST1JTID0rICJcCisgICAgICAgICBmdHA6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBodHRwOi8vLiovLiogICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBodHRwczovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEl0IGlzIHVzZWZ1bCB0byBub3RlIHRoYXQgQml0QmFrZSBzdXBwb3J0cworICAgICAgICAgICAgY3Jvc3MtVVJMcy4KKyAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIG1pcnJvciBhIEdpdCByZXBvc2l0b3J5IG9uIGFuIEhUVFAKKyAgICAgICAgICAgIHNlcnZlciBhcyBhIHRhcmJhbGwuCisgICAgICAgICAgICBUaGlzIGlzIHdoYXQgdGhlIDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPiBtYXBwaW5nIGluCisgICAgICAgICAgICB0aGUgcHJldmlvdXMgZXhhbXBsZSBkb2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaW5jZSBuZXR3b3JrIGFjY2Vzc2VzIGFyZSBzbG93LCBCaXRiYWtlIG1haW50YWlucyBhCisgICAgICAgICAgICBjYWNoZSBvZiBmaWxlcyBkb3dubG9hZGVkIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICAgICAgICBBbnkgc291cmNlIGZpbGVzIHRoYXQgYXJlIG5vdCBsb2NhbCAoaS5lLgorICAgICAgICAgICAgZG93bmxvYWRlZCBmcm9tIHRoZSBJbnRlcm5ldCkgYXJlIHBsYWNlZCBpbnRvIHRoZSBkb3dubG9hZAorICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlsZSBpbnRlZ3JpdHkgaXMgb2Yga2V5IGltcG9ydGFuY2UgZm9yIHJlcHJvZHVjaW5nIGJ1aWxkcy4KKyAgICAgICAgICAgIEZvciBub24tbG9jYWwgYXJjaGl2ZSBkb3dubG9hZHMsIHRoZSBmZXRjaGVyIGNvZGUgY2FuIHZlcmlmeQorICAgICAgICAgICAgU0hBLTI1NiBhbmQgTUQ1IGNoZWNrc3VtcyB0byBlbnN1cmUgdGhlIGFyY2hpdmVzIGhhdmUgYmVlbgorICAgICAgICAgICAgZG93bmxvYWRlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhlc2UgY2hlY2tzdW1zIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgdmFyZmxhZ3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSVttZDVzdW1dID0gIjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IgorICAgICBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgY2hlY2tzdW1zIGFzIHBhcmFtZXRlcnMgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFzIHNob3duIGJlbG93OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9leGFtcGxlLmNvbS9mb29iYXIudGFyLmJ6MjttZDVzdW09NGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiBtdWx0aXBsZSBVUklzIGV4aXN0LCB5b3UgY2FuIHNwZWNpZnkgdGhlIGNoZWNrc3VtcyBlaXRoZXIKKyAgICAgICAgICAgIGRpcmVjdGx5IGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBvciB5b3UgY2FuIG5hbWUgdGhlIFVSTHMuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN5bnRheCBzaG93cyBob3cgeW91IG5hbWUgdGhlIFVSSXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2V4YW1wbGUuY29tL2Zvb2Jhci50YXIuYnoyO25hbWU9Zm9vIgorICAgICBTUkNfVVJJW2Zvby5tZDVzdW1dID0gNGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFmdGVyIGEgZmlsZSBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCBoYXMgaGFkIGl0cyBjaGVja3N1bSBjaGVja2VkLAorICAgICAgICAgICAgYSAiLmRvbmUiIHN0YW1wIGlzIHBsYWNlZCBpbiA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhpcyBzdGFtcCBkdXJpbmcgc3Vic2VxdWVudCBidWlsZHMgdG8gYXZvaWQKKyAgICAgICAgICAgIGRvd25sb2FkaW5nIG9yIGNvbXBhcmluZyBhIGNoZWNrc3VtIGZvciB0aGUgZmlsZSBhZ2Fpbi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCBsb2NhbCBzdG9yYWdlIGlzIHNhZmUgZnJvbSBkYXRhIGNvcnJ1cHRpb24uCisgICAgICAgICAgICAgICAgSWYgdGhpcyB3ZXJlIG5vdCB0aGUgY2FzZSwgdGhlcmUgd291bGQgYmUgYmlnZ2VyIGlzc3VlcyB0byB3b3JyeSBhYm91dC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TVFJJQ1RfQ0hFQ0tTVU0nPjxmaWxlbmFtZT5CQl9TVFJJQ1RfQ0hFQ0tTVU08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGlzIHNldCwgYW55IGRvd25sb2FkIHdpdGhvdXQgYSBjaGVja3N1bSB0cmlnZ2VycyBhbgorICAgICAgICAgICAgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05PX05FVFdPUksnPjxmaWxlbmFtZT5CQl9OT19ORVRXT1JLPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBtYWtlIGFueSBhdHRlbXB0ZWQgbmV0d29yayBhY2Nlc3MgYSBmYXRhbAorICAgICAgICAgICAgZXJyb3IsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgY2hlY2tpbmcgdGhhdCBtaXJyb3JzIGFyZSBjb21wbGV0ZQorICAgICAgICAgICAgYXMgd2VsbCBhcyBvdGhlciB0aGluZ3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItdGhlLXVucGFjayc+CisgICAgICAgIDx0aXRsZT5UaGUgVW5wYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSB1bnBhY2sgcHJvY2VzcyB1c3VhbGx5IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGRvd25sb2FkLgorICAgICAgICAgICAgRm9yIGFsbCBVUkxzIGV4Y2VwdCBHaXQgVVJMcywgQml0QmFrZSB1c2VzIHRoZSBjb21tb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiBtZXRob2QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZXhpc3QgdGhhdCB5b3UgY2FuIHNwZWNpZnkgd2l0aGluIHRoZQorICAgICAgICAgICAgVVJMIHRvIGdvdmVybiB0aGUgYmVoYXZpb3Igb2YgdGhlIHVucGFjayBzdGFnZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51bnBhY2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgVVJMIGNvbXBvbmVudHMgYXJlIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhlIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjAiLCB0aGUgdW5wYWNrIHN0YWdlIGxlYXZlcyB0aGUgZmlsZSBhbG9uZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgYW4gYXJjaGl2ZSB0byBiZQorICAgICAgICAgICAgICAgICAgICBjb3BpZWQgaW4gYW5kIG5vdCBiZSB1bnBhY2tlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kb3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0byA8ZmlsZW5hbWU+LnppcDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmphcjwvZmlsZW5hbWU+IGZpbGVzIGFuZCBzcGVjaWZpZXMgd2hldGhlciB0bworICAgICAgICAgICAgICAgICAgICB1c2UgRE9TIGxpbmUgZW5kaW5nIGNvbnZlcnNpb24gb24gdGV4dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5iYXNlcGF0aDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdHMgdGhlIHVucGFjayBzdGFnZSB0byBzdHJpcCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZyb20gdGhlIHNvdXJjZSBwYXRoIHdoZW4gdW5wYWNraW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnN1YmRpcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVbnBhY2tzIHRoZSBzcGVjaWZpYyBVUkwgdG8gdGhlIHNwZWNpZmllZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByb290IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRoZSB1bnBhY2sgY2FsbCBhdXRvbWF0aWNhbGx5IGRlY29tcHJlc3NlcyBhbmQgZXh0cmFjdHMgZmlsZXMKKyAgICAgICAgICAgIHdpdGggIi5aIiwgIi56IiwgIi5neiIsICIueHoiLCAiLnppcCIsICIuamFyIiwgIi5pcGsiLCAiLnJwbSIuCisgICAgICAgICAgICAiLnNycG0iLCAiLmRlYiIgYW5kICIuYnoyIiBleHRlbnNpb25zIGFzIHdlbGwgYXMgdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgICAgIG9mIHRhcmJhbGwgZXh0ZW5zaW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkLCB0aGUgR2l0IGZldGNoZXIgaGFzIGl0cyBvd24gdW5wYWNrIG1ldGhvZCB0aGF0CisgICAgICAgICAgICBpcyBvcHRpbWl6ZWQgdG8gd29yayB3aXRoIEdpdCB0cmVlcy4KKyAgICAgICAgICAgIEJhc2ljYWxseSwgdGhpcyBtZXRob2Qgd29ya3MgYnkgY2xvbmluZyB0aGUgdHJlZSBpbnRvIHRoZSBmaW5hbAorICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgY29tcGxldGVkIHVzaW5nIHJlZmVyZW5jZXMgc28gdGhhdCB0aGVyZSBpcworICAgICAgICAgICAgb25seSBvbmUgY2VudHJhbCBjb3B5IG9mIHRoZSBHaXQgbWV0YWRhdGEgbmVlZGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JiLWZldGNoZXJzJz4KKyAgICAgICAgPHRpdGxlPkZldGNoZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgVVJMIHByZWZpeCBkZXRlcm1pbmVzIHdoaWNoCisgICAgICAgICAgICBmZXRjaGVyIHN1Ym1vZHVsZSBCaXRCYWtlIHVzZXMuCisgICAgICAgICAgICBFYWNoIHN1Ym1vZHVsZSBjYW4gc3VwcG9ydCBkaWZmZXJlbnQgVVJMIHBhcmFtZXRlcnMsCisgICAgICAgICAgICB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtZmlsZS1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhbCBmaWxlIGZldGNoZXIgKDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBVUkxzIHRoYXQgYmVnaW4gd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lIHlvdSBzcGVjaWZ5IHdpdGhpbiB0aGUgVVJMIGNhbiBiZQorICAgICAgICAgICAgICAgIGVpdGhlciBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGEgZmlsZS4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZW5hbWUgaXMgcmVsYXRpdmUsIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgc2FtZSB3YXkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gZmluZCBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgICAgICBGYWlsaW5nIHRoYXQsCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTRElSJz48ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIHJlbGF0aXZlIGZpbGUuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU0RJUjwvZmlsZW5hbWU+IGlzIGRlcHJlY2F0ZWQgYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSByZXBsYWNlZCB3aXRoIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPiBpcyBsaWtlbHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCwgeW91IHNob3VsZCBub3QgdXNlIHRoaXMgdmFyaWFibGUgaW4gYW55IG5ldyBjb2RlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgZm91bmQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBpcyBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYnkgdGhlIHRpbWUgdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYSBkaXJlY3RvcnksIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAgICAgdW5wYWNrZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIGV4YW1wbGUgVVJMcywgdGhlIGZpcnN0IHJlbGF0aXZlIGFuZAorICAgICAgICAgICAgICAgIHRoZSBzZWNvbmQgYWJzb2x1dGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImZpbGU6Ly9yZWxhdGl2ZWZpbGUucGF0Y2giCisgICAgIFNSQ19VUkkgPSAiZmlsZTovLy9Vc2Vycy9pY2gvdmVyeV9pbXBvcnRhbnRfc29mdHdhcmUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2h0dHAtZnRwLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkhUVFAvRlRQIHdnZXQgZmV0Y2hlciAoPGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cHM6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgb2J0YWlucyBmaWxlcyBmcm9tIHdlYiBhbmQgRlRQIHNlcnZlcnMuCisgICAgICAgICAgICAgICAgSW50ZXJuYWxseSwgdGhlIGZldGNoZXIgdXNlcyB0aGUgd2dldCB1dGlsaXR5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbmQgcGFyYW1ldGVycyB1c2VkIGFyZSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFVENIQ01EX3dnZXQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgd2hpY2ggZGVmYXVsdHMKKyAgICAgICAgICAgICAgICB0byBzZW5zaWJsZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgc3VwcG9ydHMgYSBwYXJhbWV0ZXIgImRvd25sb2FkZmlsZW5hbWUiIHRoYXQKKyAgICAgICAgICAgICAgICBhbGxvd3MgdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZSB0byBiZSBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlIGlzIHVzZWZ1bAorICAgICAgICAgICAgICAgIGZvciBhdm9pZGluZyBjb2xsaXNpb25zIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIGZpbGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGUgVVJMcyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL29lLmhhbmRoZWxkcy5vcmcvbm90X3RoZXJlLmFhYyIKKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly9vZS5oYW5kaGVsZHMub3JnL25vdF90aGVyZV9hc193ZWxsLmFhYyIKKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly95b3VAb2UuaGFuZGhlbGRzLm9yZy9ob21lL3lvdS9zZWNyZXQucGxhbiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgIEJlY2F1c2UgVVJMIHBhcmFtZXRlcnMgYXJlIGRlbGltaXRlZCBieSBzZW1pLWNvbG9ucywgdGhpcyBjYW4KKyAgICAgICAgICAgICAgIGludHJvZHVjZSBhbWJpZ3VpdHkgd2hlbiBwYXJzaW5nIFVSTHMgdGhhdCBhbHNvIGNvbnRhaW4gc2VtaS1jb2xvbnMsCisgICAgICAgICAgICAgICBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2FiYzEyMy5vcmcvZ2l0Lz9wPWdjYy9nY2MuZ2l0O2E9c25hcHNob3Q7aD1hNWRkNDciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgU3VjaCBVUkxzIHNob3VsZCBzaG91bGQgYmUgbW9kaWZpZWQgYnkgcmVwbGFjaW5nIHNlbWktY29sb25zIHdpdGggJyZhbXA7JyBjaGFyYWN0ZXJzOgorICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIG1vc3QgY2FzZXMgdGhpcyBzaG91bGQgd29yay4gVHJlYXRpbmcgc2VtaS1jb2xvbnMgYW5kICcmYW1wOycgaW4gcXVlcmllcworICAgICAgICAgICAgICAgIGlkZW50aWNhbGx5IGlzIHJlY29tbWVuZGVkIGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIChXM0MpLgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgVVJMLCB5b3UgbWF5IGhhdmUgdG8gc3BlY2lmeSB0aGUgbmFtZQorICAgICAgICAgICAgICAgIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUgYXMgd2VsbDoKKyAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDc7ZG93bmxvYWRmaWxlbmFtZT1teWZpbGUuYnoyIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjdnMtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+Q1ZTIGZldGNoZXIgKDxmaWxlbmFtZT4oY3ZzOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBjaGVja2luZyBvdXQgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBDVlMgdmVyc2lvbiBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSBpdCB1c2luZyBhIG51bWJlciBvZiBkaWZmZXJlbnQgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkZFVENIQ01EX2N2czwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSB0byB1c2Ugd2hlbiBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5hbWUgaXMgdXN1YWxseSAiY3ZzIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBDVlMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpYWwgdmFsdWUgb2YgIm5vdyIgY2F1c2VzIHRoZSBjaGVja291dCB0bworICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXBkYXRlZCBvbiBldmVyeSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxsaW5rIGxpbmtlbmQ9J3Zhci1DVlNESVInPjxmaWxlbmFtZT5DVlNESVI8L2ZpbGVuYW1lPjwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGVyZSBhIHRlbXBvcmFyeSBjaGVja291dCBpcyBzYXZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBvZnRlbiA8ZmlsZW5hbWU+RExfRElSL2N2czwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9IT1NUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHRvIHVzZSBhcyBhICJwcm94eT0iIHBhcmFtZXRlciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jdnM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9QT1JUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3J0IG51bWJlciB0byB1c2UgYXMgYSAicHJveHlwb3J0PSIgcGFyYW1ldGVyIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBBcyB3ZWxsIGFzIHRoZSBzdGFuZGFyZCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgVVJMIHN5bnRheCwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gY29uZmlndXJlIHRoZSBmZXRjaGVyIHdpdGggdmFyaW91cyBVUkwgcGFyYW1ldGVyczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1ldGhvZCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCBvdmVyIHdoaWNoIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIENWUyBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHByb3RvY29sIGlzICJwc2VydmVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmICJtZXRob2QiIGlzIHNldCB0byAiZXh0IiwgQml0QmFrZSBleGFtaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJyc2giIHBhcmFtZXRlciBhbmQgc2V0cyA8ZmlsZW5hbWU+Q1ZTX1JTSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgImRpciIgZm9yIGxvY2FsIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1vZHVsZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbW9kdWxlIHRvIGNoZWNrIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHN1cHBseSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJ0YWciOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZXMgd2hpY2ggQ1ZTIFRBRyBzaG91bGQgYmUgdXNlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBUQUcgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGF0ZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGRhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyAiZGF0ZSIgaXMgc3BlY2lmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNEQVRFJz48ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBjaGVja291dCBhIHNwZWNpZmljIGRhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lhbCB2YWx1ZSBvZiAibm93IiBjYXVzZXMgdGhlIGNoZWNrb3V0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkIG9uIGV2ZXJ5IGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImxvY2FsZGlyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlZCB0byByZW5hbWUgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZWx5LCB5b3UgYXJlIHJlbmFtaW5nIHRoZSBvdXRwdXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0byB3aGljaCB0aGUgbW9kdWxlIGlzIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBmb3JjaW5nIHRoZSBtb2R1bGUgaW50byBhIHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSByZWxhdGl2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNWU0RJUic+PGZpbGVuYW1lPkNWU0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJyc2giPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgIm1ldGhvZCIgcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InNjbWRhdGEiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIENWUyBtZXRhZGF0YSB0byBiZSBtYWludGFpbmVkIGluIHRoZSB0YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmV0Y2hlciBjcmVhdGVzIHdoZW4gc2V0IHRvICJrZWVwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJiYWxsIGlzIGV4cGFuZGVkIGludG8gdGhlIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIENWUyBtZXRhZGF0YSBpcyByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImZ1bGxwYXRoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgcmVzdWx0aW5nIGNoZWNrb3V0IGlzIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIGxldmVsLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgb3IgaXMgYXQgZGVlcGVyCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJub3JlY3Vyc2UiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIGZldGNoZXIgdG8gb25seSBjaGVja291dCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aCBubyByZWN1cnNlIGludG8gYW55IHN1YmRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InBvcnQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9ydCB0byB3aGljaCB0aGUgQ1ZTIHNlcnZlciBjb25uZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZSBVUkxzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJjdnM6Ly9DVlNST09UO21vZHVsZT1teW1vZHVsZTt0YWc9c29tZS12ZXJzaW9uO21ldGhvZD1leHQiCisgICAgIFNSQ19VUkkgPSAiY3ZzOi8vQ1ZTUk9PVDttb2R1bGU9bXltb2R1bGU7ZGF0ZT0yMDA2MDEyNjtsb2NhbGRpcj11c2V0aGF0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzdm4tZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+U3VidmVyc2lvbiAoU1ZOKSBGZXRjaGVyICg8ZmlsZW5hbWU+c3ZuOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBmZXRjaGVzIGNvZGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBTdWJ2ZXJzaW9uIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGlzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9zdm48L2ZpbGVuYW1lPiwgd2hpY2ggZGVmYXVsdHMKKyAgICAgICAgICAgICAgICB0byAic3ZuIi4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlcidzIHRlbXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeSBpcyBzZXQgYnkKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1ZORElSJz48ZmlsZW5hbWU+U1ZORElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgPGZpbGVuYW1lPkRMX0RJUi9zdm48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1vZHVsZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBzdm4gbW9kdWxlIHRvIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgcHJvdmlkZSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyBwYXJhbWV0ZXIgYXMgdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSByZXBvc2l0b3J5IGRhdGEgeW91IHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icHJvdG9jb2wiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wgdG8gdXNlLCB3aGljaCBkZWZhdWx0cyB0byAic3ZuIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIG9wdGlvbnMgYXJlICJzdm4rc3NoIiBhbmQgInJzaCIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgInJzaCIsIHRoZSAicnNoIiBwYXJhbWV0ZXIgaXMgYWxzbyB1c2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJldiI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdG8gY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGF0ZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB0byBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmljIHJldmlzaW9ucyBhcmUgZ2VuZXJhbGx5IG11Y2ggc2FmZXIgdG8gY2hlY2tvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGJ5IGRhdGUgYXMgdGhleSBkbyBub3QgaW52b2x2ZSB0aW1lem9uZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIHRoZXkgYXJlIG11Y2ggbW9yZSBkZXRlcm1pbmlzdGljKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzY21kYXRhIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSDigJwuc3Zu4oCdIGRpcmVjdG9yaWVzIHRvIGJlIGF2YWlsYWJsZSBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUtdGltZSB3aGVuIHNldCB0byAia2VlcCIuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGVzZSBkaXJlY3RvcmllcyBhcmUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJ0cmFuc3BvcnR1c2VyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiByZXF1aXJlZCwgc2V0cyB0aGUgdXNlcm5hbWUgZm9yIHRoZSB0cmFuc3BvcnQuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHBhcmFtZXRlciBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0cmFuc3BvcnQgdXNlcm5hbWUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXJuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSBtYWluIFVSTCwgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBzdWJ2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0d28gZXhhbXBsZXMgdXNpbmcgc3ZuOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJzdm46Ly9zdm4ub2UuaGFuZGhlbGRzLm9yZy9zdm47bW9kdWxlPXZpcDtwcm90bz1odHRwO3Jldj02NjciCisgICAgIFNSQ19VUkkgPSAic3ZuOi8vc3ZuLm9lLmhhbmRoZWxkcy5vcmcvc3ZuLzttb2R1bGU9b3BpZTtwcm90bz1zdm4rc3NoO2RhdGU9MjAwNjAxMjYiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dpdC1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5HaXQgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gdGhlIEdpdAorICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlciB3b3JrcyBieSBjcmVhdGluZyBhIGJhcmUgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVtb3RlIGludG8KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR0lURElSJz48ZmlsZW5hbWU+R0lURElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgPGZpbGVuYW1lPkRMX0RJUi9naXQyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBiYXJlIGNsb25lIGlzIHRoZW4gY2xvbmVkIGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICB1bnBhY2sgc3RhZ2Ugd2hlbiBhIHNwZWNpZmljIHRyZWUgaXMgY2hlY2tlZCBvdXQuCisgICAgICAgICAgICAgICAgVGhpcyBpcyBkb25lIHVzaW5nIGFsdGVybmF0ZXMgYW5kIGJ5IHJlZmVyZW5jZSB0bworICAgICAgICAgICAgICAgIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlIGRhdGEgb24gdGhlIGRpc2sgYW5kCisgICAgICAgICAgICAgICAgbWFrZSB0aGUgdW5wYWNrIHByb2Nlc3MgZmFzdC4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGNhbiBiZSBzZXQgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9naXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJwcm90b2NvbCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCB1c2VkIHRvIGZldGNoIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICJnaXQiIHdoZW4gYSBob3N0bmFtZSBpcyBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIGhvc3RuYW1lIGlzIG5vdCBzZXQsIHRoZSBHaXQgcHJvdG9jb2wgaXMgImZpbGUiLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSAiaHR0cCIsICJodHRwcyIsICJzc2giIGFuZCAicnN5bmMiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im5vY2hlY2tvdXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBub3QgY2hlY2tvdXQgc291cmNlIGNvZGUgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNraW5nIHdoZW4gc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIFVSTCB3aGVyZSB0aGVyZSBpcyBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgcm91dGluZSB0byBjaGVja291dCBjb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJlYmFzZWFibGUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgY2FuIGJlIHJlYmFzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNldCB0aGlzIHBhcmFtZXRlciB0byAiMSIgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9ucyBjYW4gYmVjb21lIGRldGFjaGVkIGZyb20gYnJhbmNoZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBzb3VyY2UgbWlycm9yIHRhcmJhbGwgaXMgZG9uZSBwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uLCB3aGljaCBoYXMgYSBsb3NzIG9mIGVmZmljaWVuY3kuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWJhc2luZyB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgY291bGQgY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHJldmlzaW9uIHRvIGRpc2FwcGVhciBmcm9tIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gcmVtaW5kcyB0aGUgZmV0Y2hlciB0byBwcmVzZXJ2ZSB0aGUgbG9jYWwgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcmVmdWxseSBmb3IgZnV0dXJlIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibm9icmFuY2giOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBub3QgY2hlY2sgdGhlIFNIQSB2YWxpZGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJyYW5jaCB3aGVuIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyBvcHRpb24gZm9yIHRoZSByZWNpcGUgdGhhdCByZWZlcnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21taXQgdGhhdCBpcyB2YWxpZCBmb3IgYSB0YWcgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJiYXJlY2xvbmUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBjbG9uZSBhIGJhcmUgY2xvbmUgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSB3aXRob3V0IGNoZWNraW5nIG91dCBhIHdvcmtpbmcgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIHJhdyBHaXQgbWV0YWRhdGEgaXMgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbXBsaWVzIHRoZSAibm9jaGVja291dCIgcGFyYW1ldGVyIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iYnJhbmNoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJyYW5jaChlcykgb2YgdGhlIEdpdCB0cmVlIHRvIGNsb25lLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdW5zZXQsIHRoaXMgaXMgYXNzdW1lZCB0byBiZSAibWFzdGVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnJhbmNoIHBhcmFtZXRlcnMgbXVjaCBtYXRjaCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icmV2Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIHRvIHVzZSBmb3IgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIm1hc3RlciIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4idGFnIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgdGFnIHRvIHVzZSBmb3IgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29ycmVjdGx5IHJlc29sdmUgdGFncywgQml0QmFrZSBtdXN0IGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhhdCByZWFzb24sIHRhZ3MgYXJlIG9mdGVuIG5vdCB1c2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgZmFyIGFzIEdpdCBpcyBjb25jZXJuZWQsIHRoZSAidGFnIiBwYXJhbWV0ZXIgYmVoYXZlcworICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgdGhlICJyZXYiIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzdWJwYXRoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgTGltaXRzIHRoZSBjaGVja291dCB0byBhIHNwZWNpZmljIHN1YnBhdGggb2YgdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgd2hvbGUgdHJlZSBpcyBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJkZXN0c3VmZml4Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhdGggaW4gd2hpY2ggdG8gcGxhY2UgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHBhdGggaXMgPGZpbGVuYW1lPmdpdC88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZSBVUkxzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9naXQub2UuaGFuZGhlbGRzLm9yZy9naXQvdmlwLmdpdDt0YWc9dmVyc2lvbi0xIgorICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5vZS5oYW5kaGVsZHMub3JnL2dpdC92aXAuZ2l0O3Byb3RvY29sPWh0dHAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dpdHNtLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkdpdCBTdWJtb2R1bGUgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdHNtOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBpbmhlcml0cyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdC1mZXRjaGVyJz5HaXQgZmV0Y2hlcjwvbGluaz4gYW5kIGV4dGVuZHMKKyAgICAgICAgICAgICAgICB0aGF0IGZldGNoZXIncyBiZWhhdmlvciBieSBmZXRjaGluZyBhIHJlcG9zaXRvcnkncyBzdWJtb2R1bGVzLgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGlzIHBhc3NlZCB0byB0aGUgR2l0IGZldGNoZXIgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnaXQtZmV0Y2hlcic+R2l0IEZldGNoZXIgKDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPik8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Ob3RlcyBhbmQgV2FybmluZ3M8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNsZWFuIGEgcmVjaXBlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICc8ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgJzxmaWxlbmFtZT5naXRzbTovLzwvZmlsZW5hbWU+JyBVUkxzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgR2l0IFN1Ym1vZHVsZXMgZmV0Y2hlciBpcyBub3QgYSBjb21wbGV0ZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyIGhhcyBrbm93biBpc3N1ZXMgd2hlcmUgaXQgZG9lcyBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIHNvdXJjZSBtaXJyb3JpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvcGVybHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2xlYXJjYXNlLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkNsZWFyQ2FzZSBGZXRjaGVyICg8ZmlsZW5hbWU+Y2NyYzovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmF0aW9uYWxfQ2xlYXJDYXNlJz5DbGVhckNhc2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIGZldGNoZXIsIG1ha2Ugc3VyZSB5b3VyIHJlY2lwZSBoYXMgcHJvcGVyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHNldHRpbmdzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiY2NyYzovL2NjLmV4YW1wbGUub3JnL2NjcmM7dm9iPS9leGFtcGxlX3ZvYjttb2R1bGU9L2V4YW1wbGVfbW9kdWxlIgorICAgICBTUkNSRVYgPSAiRVhBTVBMRV9DTEVBUkNBU0VfVEFHIgorICAgICBQViA9ICIke0BkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpLnJlcGxhY2UoIi8iLCAiKyIpfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgdXNlcyB0aGUgPGZpbGVuYW1lPnJjbGVhcnRvb2w8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiByZW1vdGUgY2xpZW50LCBkZXBlbmRpbmcgb24KKyAgICAgICAgICAgICAgICB3aGljaCBvbmUgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIG9wdGlvbnMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZGluZyAiLyIgY2hhcmFjdGVyLCBvZiB0aGUgQ2xlYXJDYXNlIFZPQi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kaW5nICIvIiBjaGFyYWN0ZXIsIGluIHRoZSBzZWxlY3RlZCBWT0IuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGFyZSBjb21iaW5lZCB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5sb2FkPC9maWxlbmFtZT4gcnVsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2aWV3IGNvbmZpZyBzcGVjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4gYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiB2YWx1ZXMgZnJvbSB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5pbmcgdGhvc2UgdmFsdWVzIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxvYWQgL2V4YW1wbGVfdm9iL2V4YW1wbGVfbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnByb3RvPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCwgd2hpY2ggY2FuIGJlIGVpdGhlciA8ZmlsZW5hbWU+aHR0cDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZmV0Y2hlciBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBzcGVjaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoaXMgc3BlY2lmaWNhdGlvbiB3cml0dGVuIHRvIGFuIGFyZWEgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICB1c2UgdGhlIDxmaWxlbmFtZT5DQ0FTRV9DVVNUT01fQ09ORklHX1NQRUM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlIHRvIGRlZmluZSB3aGVyZSB0aGUgc3BlY2lmaWNhdGlvbiBpcyB3cml0dGVuLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IGxvc2VzIGl0cyBmdW5jdGlvbmFsaXR5IGlmIHlvdQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiBpcyBzdGlsbCB1c2VkIHRvIGxhYmVsIHRoZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXZlIGFmdGVyIGEgZmV0Y2ggZXZlbiB0aG91Z2ggaXQgZG9lcyBub3QgZGVmaW5lIHdoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgZmV0Y2hlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIG90aGVyIGJlaGF2aW9ycyB3b3J0aCBtZW50aW9uaW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgPGZpbGVuYW1lPmNsZWFydG9vbDwvZmlsZW5hbWU+LCB0aGUgbG9naW4gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiBpcyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9naW4gcmVxdWlyZSBubyBzcGVjaWFsIHN0ZXBzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSA8ZmlsZW5hbWU+cmNsZWFydG9vbDwvZmlsZW5hbWU+IHdpdGggYXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMsIGFuICJyY2xlYXJ0b29sIGxvZ2luIiBpcyBuZWNlc3NhcnkgYmVmb3JlIHVzaW5nIHRoZSBmZXRjaGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItZmV0Y2hlcnMnPgorICAgICAgICAgICAgPHRpdGxlPk90aGVyIEZldGNoZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmV0Y2ggc3VibW9kdWxlcyBhbHNvIGV4aXN0IGZvciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJhemFhciAoPGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcmNlICg8ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUcmVlcyB1c2luZyBHaXQgQW5uZXggKDxmaWxlbmFtZT5naXRhbm5leDovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY3VyZSBGVFAgKDxmaWxlbmFtZT5zZnRwOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjdXJlIFNoZWxsICg8ZmlsZW5hbWU+c3NoOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVwbyAoPGZpbGVuYW1lPnJlcG86Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPU0MgKDxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBNZXJjdXJpYWwgKDxmaWxlbmFtZT5oZzovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgTm8gZG9jdW1lbnRhdGlvbiBjdXJyZW50bHkgZXhpc3RzIGZvciB0aGVzZSBsZXNzZXIgdXNlZAorICAgICAgICAgICAgICAgIGZldGNoZXIgc3VibW9kdWxlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgZmluZCB0aGUgY29kZSBoZWxwZnVsIGFuZCByZWFkYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdhdXRvLXJldmlzaW9ucyc+CisgICAgICAgIDx0aXRsZT5BdXRvIFJldmlzaW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZSBuZWVkIHRvIGRvY3VtZW50IDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1oZWxsby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2MjhjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbApAQCAtMCwwICsxLDUwNiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxhcHBlbmRpeCBpZD0naGVsbG8td29ybGQtZXhhbXBsZSc+CisgICAgPHRpdGxlPkhlbGxvIFdvcmxkIEV4YW1wbGU8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtaGVsbG8td29ybGQnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZSBIZWxsbyBXb3JsZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2ltcGxlc3QgZXhhbXBsZSBjb21tb25seSB1c2VkIHRvIGRlbW9uc3RyYXRlIGFueSBuZXcKKyAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlIG9yIHRvb2wgaXMgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWxsb193b3JsZF9wcm9ncmFtIj5IZWxsbyBXb3JsZDwvdWxpbms+IgorICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgIFRoaXMgYXBwZW5kaXggZGVtb25zdHJhdGVzLCBpbiB0dXRvcmlhbCBmb3JtLCBIZWxsbworICAgICAgICAgICAgV29ybGQgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJpdEJha2UuCisgICAgICAgICAgICBUaGUgdHV0b3JpYWwgZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUgYSBuZXcgcHJvamVjdAorICAgICAgICAgICAgYW5kIHRoZSBhcHBsaWNhYmxlIG1ldGFkYXRhIGZpbGVzIG5lY2Vzc2FyeSB0byBhbGxvdworICAgICAgICAgICAgQml0QmFrZSB0byBidWlsZCBpdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdleGFtcGxlLW9idGFpbmluZy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPk9idGFpbmluZyBCaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdvYnRhaW5pbmctYml0YmFrZSc+T2J0YWluaW5nIEJpdEJha2U8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiBCaXRCYWtlLgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgc291cmNlIGNvZGUgb24geW91ciBtYWNoaW5lLCB0aGUgQml0QmFrZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFwcGVhcnMgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBscyAtYWwKKyAgICAgdG90YWwgMTAwCisgICAgIGRyd3hyd3hyLXguIDkgd21hdCB3bWF0ICA0MDk2IEphbiAzMSAxMzo0NCAuCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IEZlYiAgNCAxMDo0NSAuLgorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgIDM2NSBOb3YgMjYgMDQ6NTUgQVVUSE9SUworICAgICBkcnd4cnd4ci14LiAyIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgYmluCisgICAgIGRyd3hyd3hyLXguIDQgd21hdCB3bWF0ICA0MDk2IEphbiAzMSAxMzo0NCBidWlsZAorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAxNjUwMSBOb3YgMjYgMDQ6NTUgQ2hhbmdlTG9nCisgICAgIGRyd3hyd3hyLXguIDIgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjbGFzc2VzCisgICAgIGRyd3hyd3hyLXguIDIgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjb25mCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjb250cmliCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0IDE3OTg3IE5vdiAyNiAwNDo1NSBDT1BZSU5HCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBkb2MKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICAgNjkgTm92IDI2IDA0OjU1IC5naXRpZ25vcmUKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICA4NDkgTm92IDI2IDA0OjU1IEhFQURFUgorICAgICBkcnd4cnd4ci14LiA1IHdtYXQgd21hdCAgNDA5NiBKYW4gMzEgMTM6NDQgbGliCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgMTk1IE5vdiAyNiAwNDo1NSBNQU5JRkVTVC5pbgorICAgICAtcnd4cnd4ci14LiAxIHdtYXQgd21hdCAgMzE5NSBKYW4gMzEgMTE6NTcgc2V0dXAucHkKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgIDI4ODcgTm92IDI2IDA0OjU1IFRPRE8KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IHNob3VsZCBoYXZlIEJpdEJha2UgY2xvbmVkIHRvCisgICAgICAgICAgICBhIGRpcmVjdG9yeSB0aGF0IG1hdGNoZXMgdGhlIHByZXZpb3VzIGxpc3RpbmcgZXhjZXB0IGZvcgorICAgICAgICAgICAgZGF0ZXMgYW5kIHVzZXIgbmFtZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtYml0YmFrZS1lbnZpcm9ubWVudCc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBCaXRCYWtlIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpcnN0LCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgeW91IGNhbiBydW4gQml0QmFrZS4KKyAgICAgICAgICAgIFNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHdoZXJlIHlvdXIgbG9jYWwgQml0QmFrZQorICAgICAgICAgICAgZmlsZXMgYXJlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vYmluL2JpdGJha2UgLS12ZXJzaW9uCisgICAgIEJpdEJha2UgQnVpbGQgVG9vbCBDb3JlIHZlcnNpb24gMS4yMy4wLCBiaXRiYWtlIHZlcnNpb24gMS4yMy4wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgY29uc29sZSBvdXRwdXQgdGVsbHMgeW91IHdoYXQgdmVyc2lvbiB5b3UgYXJlIHJ1bm5pbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgdG8gcnVuIEJpdEJha2UgaXMgZnJvbSBhIGRpcmVjdG9yeSBvZiB5b3VyCisgICAgICAgICAgICBjaG9pY2UuCisgICAgICAgICAgICBUbyBiZSBhYmxlIHRvIHJ1biBCaXRCYWtlIGZyb20gYW55IGRpcmVjdG9yeSwgeW91IG5lZWQgdG8gYWRkIHRoZQorICAgICAgICAgICAgZXhlY3V0YWJsZSBiaW5hcnkgdG8geW91ciBiaW5hcnkgdG8geW91ciBzaGVsbCdzIGVudmlyb25tZW50CisgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgRmlyc3QsIGxvb2sgYXQgeW91ciBjdXJyZW50IDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAkUEFUSAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgTmV4dCwgYWRkIHRoZSBkaXJlY3RvcnkgbG9jYXRpb24gZm9yIHRoZSBCaXRCYWtlIGJpbmFyeSB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhZGRzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgdG8gdGhlIGZyb250IG9mIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGV4cG9ydCBQQVRIPS9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjokUEFUSAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IHNob3VsZCBub3cgYmUgYWJsZSB0byBlbnRlciB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgd29ya2luZyBmcm9tIGFueSBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLWhlbGxvLXdvcmxkLWV4YW1wbGUnPgorICAgICAgICA8dGl0bGU+VGhlIEhlbGxvIFdvcmxkIEV4YW1wbGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG92ZXJhbGwgZ29hbCBvZiB0aGlzIGV4ZXJjaXNlIGlzIHRvIGJ1aWxkIGEKKyAgICAgICAgICAgIGNvbXBsZXRlICJIZWxsbyBXb3JsZCIgZXhhbXBsZSB1dGlsaXppbmcgdGFzayBhbmQgbGF5ZXIKKyAgICAgICAgICAgIGNvbmNlcHRzLgorICAgICAgICAgICAgQmVjYXVzZSB0aGlzIGlzIGhvdyBtb2Rlcm4gcHJvamVjdHMgc3VjaCBhcyBPcGVuRW1iZWRkZWQgYW5kCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCB1dGlsaXplIEJpdEJha2UsIHRoZSBleGFtcGxlCisgICAgICAgICAgICBwcm92aWRlcyBhbiBleGNlbGxlbnQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHRvIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRhcmdldHMsCisgICAgICAgICAgICB0aGUgZXhhbXBsZSBzdGFydHMgd2l0aCBub3RoaW5nIGJ1dCB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCwgd2hpY2ggY2F1c2VzIEJpdEJha2UgdG8gZmFpbCBhbmQgcmVwb3J0IHByb2JsZW1zLgorICAgICAgICAgICAgVGhlIGV4YW1wbGUgcHJvZ3Jlc3NlcyBieSBhZGRpbmcgcGllY2VzIHRvIHRoZSBidWlsZCB0bworICAgICAgICAgICAgZXZlbnR1YWxseSBjb25jbHVkZSB3aXRoIGEgd29ya2luZywgbWluaW1hbCAiSGVsbG8gV29ybGQiCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGlsZSBldmVyeSBhdHRlbXB0IGlzIG1hZGUgdG8gZXhwbGFpbiB3aGF0IGlzIGhhcHBlbmluZyBkdXJpbmcKKyAgICAgICAgICAgIHRoZSBleGFtcGxlLCB0aGUgZGVzY3JpcHRpb25zIGNhbm5vdCBjb3ZlciBldmVyeXRoaW5nLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIEFsc28sIHlvdSBjYW4gYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPjwvdWxpbms+CisgICAgICAgICAgICBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCB0aGUgQml0QmFrZSBidWlsZCB0b29sLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgd2FzIGluc3BpcmVkIGJ5IGFuZCBkcmV3IGhlYXZpbHkgZnJvbSB0aGVzZSBzb3VyY2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS95b2N0b0B5b2N0b3Byb2plY3Qub3JnL21zZzA5Mzc5Lmh0bWwiPk1haWxpbmcgTGlzdCBwb3N0IC0gVGhlIEJpdEJha2UgZXF1aXZhbGVudCBvZiAiSGVsbG8sIFdvcmxkISI8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvIj5IYW1iZWRkZWQgTGludXggYmxvZyBwb3N0IC0gRnJvbSBCaXRiYWtlIEhlbGxvIFdvcmxkIHRvIGFuIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgc3RhdGVkIGVhcmxpZXIsIHRoZSBnb2FsIG9mIHRoaXMgZXhhbXBsZQorICAgICAgICAgICAgaXMgdG8gZXZlbnR1YWxseSBjb21waWxlICJIZWxsbyBXb3JsZCIuCisgICAgICAgICAgICBIb3dldmVyLCBpdCBpcyB1bmtub3duIHdoYXQgQml0QmFrZSBuZWVkcyBhbmQgd2hhdCB5b3UgaGF2ZQorICAgICAgICAgICAgdG8gcHJvdmlkZSBpbiBvcmRlciB0byBhY2hpZXZlIHRoYXQgZ29hbC4KKyAgICAgICAgICAgIFJlY2FsbCB0aGF0IEJpdEJha2UgdXRpbGl6ZXMgdGhyZWUgdHlwZXMgb2YgbWV0YWRhdGEgZmlsZXM6CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjb25maWd1cmF0aW9uLWZpbGVzJz5Db25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiwKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NsYXNzZXMnPkNsYXNzZXM8L2xpbms+LCBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlY2lwZXMnPlJlY2lwZXM8L2xpbms+LgorICAgICAgICAgICAgQnV0IHdoZXJlIGRvIHRoZXkgZ28/CisgICAgICAgICAgICBIb3cgZG9lcyBCaXRCYWtlIGZpbmQgdGhlbT8KKyAgICAgICAgICAgIEJpdEJha2UncyBlcnJvciBtZXNzYWdpbmcgaGVscHMgeW91IGFuc3dlciB0aGVzZSB0eXBlcyBvZiBxdWVzdGlvbnMKKyAgICAgICAgICAgIGFuZCBoZWxwcyB5b3UgYmV0dGVyIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGlzIGdvaW5nIG9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIGNvbXBsZXRlICJIZWxsbyBXb3JsZCIgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgUHJvamVjdCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBGaXJzdCwgc2V0IHVwIGEgZGlyZWN0b3J5IGZvciB0aGUgIkhlbGxvIFdvcmxkIiBwcm9qZWN0LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgaG93IHlvdSBjYW4gZG8gc28gaW4geW91ciBob21lIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgfi9oZWxsbworICAgICAkIGNkIH4vaGVsbG8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgQml0QmFrZSB3aWxsIHVzZSB0byBkbyBhbGwgb2YKKyAgICAgICAgICAgICAgICBpdHMgd29yay4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIGRpcmVjdG9yeSB0byBrZWVwIGFsbCB0aGUgbWV0YWZpbGVzIG5lZWRlZAorICAgICAgICAgICAgICAgIGJ5IEJpdEJha2UuCisgICAgICAgICAgICAgICAgSGF2aW5nIGEgcHJvamVjdCBkaXJlY3RvcnkgaXMgYSBnb29kIHdheSB0byBpc29sYXRlIHlvdXIKKyAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBoYXZlIG5vdGhpbmcgYnV0IGEgcHJvamVjdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgUnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHNlZSB3aGF0CisgICAgICAgICAgICAgICAgaXQgZG9lczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBUaGUgQkJQQVRIIHZhcmlhYmxlIGlzIG5vdCBzZXQgYW5kIGJpdGJha2UgZGlkIG5vdAorICAgICBmaW5kIGEgY29uZi9iYmxheWVycy5jb25mIGZpbGUgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLgorICAgICBNYXliZSB5b3UgYWNjaWRlbnRhbGx5IGludm9rZWQgYml0YmFrZSBmcm9tIHRoZSB3cm9uZyBkaXJlY3Rvcnk/CisgICAgIERFQlVHOiBSZW1vdmVkIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50OgorICAgICBHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQsIFhER19DVVJSRU5UX0RFU0tUT1AsCisgICAgIEdOT01FX0tFWVJJTkdfQ09OVFJPTCwgRElTUExBWSwgU1NIX0FHRU5UX1BJRCwgTEFORywgbm9fcHJveHksCisgICAgIFhER19TRVNTSU9OX1BBVEgsIFhBVVRIT1JJVFksIFNFU1NJT05fTUFOQUdFUiwgU0hMVkwsCisgICAgIE1BTkRBVE9SWV9QQVRILCBDT01QSVpfQ09ORklHX1BST0ZJTEUsIFdJTkRPV0lELCBFRElUT1IsCisgICAgIEdQR19BR0VOVF9JTkZPLCBTU0hfQVVUSF9TT0NLLCBHRE1TRVNTSU9OLCBHTk9NRV9LRVlSSU5HX1BJRCwKKyAgICAgWERHX1NFQVRfUEFUSCwgWERHX0NPTkZJR19ESVJTLCBMRVNTT1BFTiwgREJVU19TRVNTSU9OX0JVU19BRERSRVNTLAorICAgICBfLCBYREdfU0VTU0lPTl9DT09LSUUsIERFU0tUT1BfU0VTU0lPTiwgTEVTU0NMT1NFLCBERUZBVUxUU19QQVRILAorICAgICBVQlVOVFVfTUVOVVBST1hZLCBPTERQV0QsIFhER19EQVRBX0RJUlMsIENPTE9SVEVSTSwgTFNfQ09MT1JTCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBtYWpvcml0eSBvZiB0aGlzIG91dHB1dCBpcyBzcGVjaWZpYyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBub3QgZGlyZWN0bHkgcmVsZXZhbnQgdG8gQml0QmFrZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgdmVyeSBmaXJzdCBtZXNzYWdlIHJlZ2FyZGluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgaXMgcmVsZXZhbnQuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biBCaXRCYWtlLCBpdCBiZWdpbnMgbG9va2luZyBmb3IgbWV0YWRhdGEgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHdoYXQgdGVsbHMgQml0QmFrZSB3aGVyZSB0byBsb29rIGZvciB0aG9zZSBmaWxlcy4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaXMgbm90IHNldCBhbmQgeW91IG5lZWQgdG8gc2V0IGl0LgorICAgICAgICAgICAgICAgIFdpdGhvdXQgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LCBCaXRiYWtlIGNhbm5vdAorICAgICAgICAgICAgICAgIGZpbmQgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIG9yIHJlY2lwZSBmaWxlcyAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBhdCBhbGwuCisgICAgICAgICAgICAgICAgQml0QmFrZSBhbHNvIGNhbm5vdCBmaW5kIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXR0aW5nIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHlvdSBjYW4gc2V0IDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGluIHRoZSBzYW1lIG1hbm5lciB0aGF0IHlvdSBzZXQgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGVhcmxpZXIgaW4gdGhlIGFwcGVuZGl4LgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgdGhvdWdoLCB0aGF0IGl0IGlzIG11Y2ggbW9yZSBmbGV4aWJsZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIHVwIGluIGEgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgZm9yIGVhY2ggcHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+RnJvbSB5b3VyIHNoZWxsLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIHNldCBhbmQKKyAgICAgICAgICAgICAgICBleHBvcnQgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgQkJQQVRIPSI8cmVwbGFjZWFibGU+cHJvamVjdGRpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNlIHlvdXIgYWN0dWFsIHByb2plY3QgZGlyZWN0b3J5IGluIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGF0IGRpcmVjdG9yeSB0byBmaW5kIHRoZSBtZXRhZGF0YSBpdCBuZWVkcyBmb3IKKyAgICAgICAgICAgICAgICB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB5b3VyIHByb2plY3QgZGlyZWN0b3J5LCBkbyBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICB0aWxkZSAoIn4iKSBjaGFyYWN0ZXIgYXMgQml0QmFrZSBkb2VzIG5vdCBleHBhbmQgdGhhdCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHNoZWxsIHdvdWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB5b3UgaGF2ZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gZGVmaW5lZCwgcnVuCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBFUlJPUjogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNjMsIGluIHdyYXBwZWQKKyAgICAgICAgIHJldHVybiBmdW5jKGZuLCAqYXJncykKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSIsIGxpbmUgMTczLCBpbiBwYXJzZV9jb25maWdfZmlsZQorICAgICAgICAgcmV0dXJuIGJiLnBhcnNlLmhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSkKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkiLCBsaW5lIDk5LCBpbiBoYW5kbGUKKyAgICAgICAgIHJldHVybiBoWydoYW5kbGUnXShmbiwgZGF0YSwgaW5jbHVkZSkKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkiLCBsaW5lIDEyMCwgaW4gaGFuZGxlCisgICAgICAgICBhYnNfZm4gPSByZXNvbHZlX2ZpbGUoZm4sIGRhdGEpCisgICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5IiwgbGluZSAxMTcsIGluIHJlc29sdmVfZmlsZQorICAgICAgICAgcmFpc2UgSU9FcnJvcigiZmlsZSAlcyBub3QgZm91bmQgaW4gJXMiICUgKGZuLCBiYnBhdGgpKQorICAgICBJT0Vycm9yOiBmaWxlIGNvbmYvYml0YmFrZS5jb25mIG5vdCBmb3VuZCBpbiAvaG9tZS9zY290dC1sZW5vdm8vaGVsbG8KKworICAgICBFUlJPUjogVW5hYmxlIHRvIHBhcnNlIGNvbmYvYml0YmFrZS5jb25mOiBmaWxlIGNvbmYvYml0YmFrZS5jb25mIG5vdCBmb3VuZCBpbiAvaG9tZS9zY290dC1sZW5vdm8vaGVsbG8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBzYW1wbGUgb3V0cHV0IHNob3dzIHRoYXQgQml0QmFrZSBjb3VsZCBub3QgZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyB0aGUgZmlyc3QgdGhpbmcgQml0QmFrZSBtdXN0IGZpbmQgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICB0byBidWlsZCBhIHRhcmdldC4KKyAgICAgICAgICAgICAgICBBbmQsIHNpbmNlIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBmb3IgdGhpcyBleGFtcGxlIGlzCisgICAgICAgICAgICAgICAgZW1wdHksIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0aW5nIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGluY2x1ZGVzIGEgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgQml0QmFrZSB1c2VzIGZvciBtZXRhZGF0YSBhbmQgcmVjaXBlCisgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwgeW91IG5lZWQgdG8gY3JlYXRlIHRoZSBmaWxlIGluIHlvdXIgcHJvamVjdCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhbmQgZGVmaW5lIHNvbWUga2V5IEJpdEJha2UgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jYW4tb3ZlcnZpZXctb2YtYml0YmFrZWNvbmYnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcHJvamVjdCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1rZGlyIGNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRnJvbSB3aXRoaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LCB1c2UKKyAgICAgICAgICAgICAgICBzb21lIGVkaXRvciB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHNvIHRoYXQgaXQgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRNUERJUiAgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItVE9QRElSJz5UT1BESVI8L2xpbms+fS90bXAiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DQUNIRSc+Q0FDSEU8L2xpbms+ICAgPSAiJHtUTVBESVJ9L2NhY2hlIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPlNUQU1QPC9saW5rPiAgID0gIiR7VE1QRElSfS9zdGFtcHMiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UJz5UPC9saW5rPiAgICAgICA9ICIke1RNUERJUn0vd29yayIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPkI8L2xpbms+ICAgICAgID0gIiR7VE1QRElSfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBlc3RhYmxpc2hlcyBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHRoYXQgQml0QmFrZSB1c2VzIGZvciBidWlsZCBvdXRwdXQgYW5kIGludGVybWVkaWF0ZSBmaWxlcyAob3RoZXIKKyAgICAgICAgICAgICAgICB0aGFuIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzZXRzY2VuZSc+U2V0c2NlbmU8L2xpbms+IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgSGVyZSwgdGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvL3RtcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsd2F5cyBzYWZlbHkgZGVsZXRlIHRoZSA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIG9yZGVyIHRvIHJlYnVpbGQgYSBCaXRCYWtlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IGZvciB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgcnVuIEJpdEJha2UuCisgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvZiB0aGUgb3RoZXIgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUsIGNsaWNrIG9uIHRoZSBsaW5rcyB0byB0YWtlIHlvdSB0byB0aGUgZGVmaW5pdGlvbnMgaW4KKyAgICAgICAgICAgICAgICB0aGUgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGV4aXN0cywgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGFnYWluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyQgYml0YmFrZQorRVJST1I6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE2MywgaW4gd3JhcHBlZAorICAgIHJldHVybiBmdW5jKGZuLCAqYXJncykKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE3NywgaW4gX2luaGVyaXQKKyAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChiYmNsYXNzLCAiY29uZmlndXJhdGlvbiBJTkhFUklUcyIsIDAsIGRhdGEpCisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9CQkhhbmRsZXIucHkiLCBsaW5lIDkyLCBpbiBpbmhlcml0CisgICAgaW5jbHVkZShmbiwgZmlsZSwgbGluZW5vLCBkLCAiaW5oZXJpdCIpCisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSIsIGxpbmUgMTAwLCBpbiBpbmNsdWRlCisgICAgcmFpc2UgUGFyc2VFcnJvcigiQ291bGQgbm90ICUoZXJyb3Jfb3V0KXMgZmlsZSAlKGZuKXMiICUgdmFycygpLCBvbGRmbiwgbGluZW5vKQorUGFyc2VFcnJvcjogUGFyc2VFcnJvciBpbiBjb25maWd1cmF0aW9uIElOSEVSSVRzOiBDb3VsZCBub3QgaW5oZXJpdCBmaWxlIGNsYXNzZXMvYmFzZS5iYmNsYXNzCisKK0VSUk9SOiBVbmFibGUgdG8gcGFyc2UgYmFzZTogUGFyc2VFcnJvciBpbiBjb25maWd1cmF0aW9uIElOSEVSSVRzOiBDb3VsZCBub3QgaW5oZXJpdCBmaWxlIGNsYXNzZXMvYmFzZS5iYmNsYXNzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoZSBzYW1wbGUgb3V0cHV0LCBCaXRCYWtlIGNvdWxkIG5vdCBmaW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIHRoYXQgZmlsZSBuZXh0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyBjbGFzcyBmaWxlcyB0byBwcm92aWRlIGNvbW1vbiBjb2RlIGFuZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsbHkgcmVxdWlyZWQgY2xhc3MgZm9yIEJpdEJha2UgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvYmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbXBsaWNpdGx5IGluaGVyaXRlZCBieQorICAgICAgICAgICAgICAgIGV2ZXJ5IHJlY2lwZS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGxvb2tzIGZvciB0aGUgY2xhc3MgaW4gdGhlIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QgKGkuZSA8ZmlsZW5hbWU+aGVsbG8vY2xhc3NlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gdGhpcyBleGFtcGxlKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Q3JlYXRlIHRoZSA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRS9oZWxsbworICAgICAkIG1rZGlyIGNsYXNzZXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTW92ZSB0byB0aGUgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGJ5IGluc2VydGluZworICAgICAgICAgICAgICAgIHRoaXMgc2luZ2xlIGxpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGR0YXNrIGJ1aWxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIHRhc2sgdGhhdCBCaXRCYWtlIHJ1bnMgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGFsbCB0aGUgZXhhbXBsZSBuZWVkcyBpbiBvcmRlciB0byBidWlsZCB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2FuIGhhdmUgbXVjaAorICAgICAgICAgICAgICAgIG1vcmUgZGVwZW5kaW5nIG9uIHdoaWNoIGJ1aWxkIGVudmlyb25tZW50cyBCaXRCYWtlIGlzCisgICAgICAgICAgICAgICAgc3VwcG9ydGluZy4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgeW91IGNhbiBsb29rIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jdGFza3MnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBleGlzdHMsIHlvdSBjYW4gcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJpdEJha2UgaXMgZmluYWxseSByZXBvcnRpbmcgbm8gZXJyb3JzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gc2VlIHRoYXQgaXQgcmVhbGx5IGRvZXMgbm90IGhhdmUgYW55dGhpbmcKKyAgICAgICAgICAgICAgICB0byBkby4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgYSByZWNpcGUgdGhhdCBnaXZlcyBCaXRCYWtlIHNvbWV0aGluZyB0byBkby4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRpbmcgYSBMYXllcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFdoaWxlIGl0IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGZvciBzdWNoIGEgc21hbGwgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICBpdCBpcyBnb29kIHByYWN0aWNlIHRvIGNyZWF0ZSBhIGxheWVyIGluIHdoaWNoIHRvIGtlZXAgeW91cgorICAgICAgICAgICAgICAgIGNvZGUgc2VwYXJhdGUgZnJvbSB0aGUgZ2VuZXJhbCBtZXRhZGF0YSB1c2VkIGJ5IEJpdEJha2UuCisgICAgICAgICAgICAgICAgVGh1cywgdGhpcyBleGFtcGxlIGNyZWF0ZXMgYW5kIHVzZXMgYSBsYXllciBjYWxsZWQgIm15bGF5ZXIiLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBhZGRpbmcgYSBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vaGFtYmVkZGVkLm9yZy9ibG9nLzIwMTIvMTEvMjQvZnJvbS1iaXRiYWtlLWhlbGxvLXdvcmxkLXRvLWFuLWltYWdlLyNhZGRpbmctYW4tZXhhbXBsZS1sYXllcic+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5NaW5pbWFsbHksIHlvdSBuZWVkIGEgcmVjaXBlIGZpbGUgYW5kIGEgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgaW4geW91ciBsYXllci4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIGJlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluc2lkZSB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgVXNlIHRoZXNlIGNvbW1hbmRzIHRvIHNldCB1cCB0aGUgbGF5ZXIgYW5kIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRQorICAgICAkIG1rZGlyIG15bGF5ZXIKKyAgICAgJCBjZCBteWxheWVyCisgICAgICQgbWtkaXIgY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBoYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCUEFUSCAuPSAiOiR7PGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSRElSJz5MQVlFUkRJUjwvbGluaz59IgorCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPiArPSAiJHtMQVlFUkRJUn0vKi5iYiIKKworICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX0NPTExFQ1RJT05TJz5CQkZJTEVfQ09MTEVDVElPTlM8L2xpbms+ICs9ICJteWxheWVyIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX1BBVFRFUk4nPkJCRklMRV9QQVRURVJOX215bGF5ZXI8L2xpbms+IDo9ICJeJHtMQVlFUkRJUn0vIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgdmFyaWFibGVzLCBjbGljayB0aGUgbGlua3MKKyAgICAgICAgICAgICAgICB0byBnbyB0byB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGdsb3NzYXJ5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbmVlZCB0byBjcmVhdGUgdGhlIHJlY2lwZSBmaWxlIG5leHQuCisgICAgICAgICAgICAgICAgSW5zaWRlIHlvdXIgbGF5ZXIgYXQgdGhlIHRvcC1sZXZlbCwgdXNlIGFuIGVkaXRvciBhbmQgY3JlYXRlCisgICAgICAgICAgICAgICAgYSByZWNpcGUgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+cHJpbnRoZWxsby5iYjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBoYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVNDUklQVElPTic+REVTQ1JJUFRJT048L2xpbms+ID0gIlByaW50cyBIZWxsbyBXb3JsZCIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz4gPSAncHJpbnRoZWxsbycKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz5QVjwvbGluaz4gPSAnMScKKworICAgICBweXRob24gZG9fYnVpbGQoKSB7CisgICAgICAgIGJiLnBsYWluKCIqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBiYi5wbGFpbigiKiAgICAgICAgICAgICAgICAgICoiKTsKKyAgICAgICAgYmIucGxhaW4oIiogIEhlbGxvLCBXb3JsZCEgICAqIik7CisgICAgICAgIGJiLnBsYWluKCIqICAgICAgICAgICAgICAgICAgKiIpOworICAgICAgICBiYi5wbGFpbigiKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIGZpbGUgc2ltcGx5IHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgbmFtZSwgdmVyc2lvbiwgYW5kIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIHByaW50cyBvdXQgIkhlbGxvIFdvcmxkIiB0byB0aGUgY29uc29sZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIGZvbGxvdyB0aGUgbGlua3MKKyAgICAgICAgICAgICAgICB0byB0aGUgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlIFdpdGggYSBUYXJnZXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCBhIEJpdEJha2UgdGFyZ2V0IGV4aXN0cywgcnVuIHRoZSBjb21tYW5kIGFuZCBwcm92aWRlCisgICAgICAgICAgICAgICAgdGhhdCB0YXJnZXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FL2hlbGxvCisgICAgICQgYml0YmFrZSBwcmludGhlbGxvCisgICAgIEVSUk9SOiBubyByZWNpcGUgZmlsZXMgdG8gYnVpbGQsIGNoZWNrIHlvdXIgQkJQQVRIIGFuZCBCQkZJTEVTPworCisgICAgIFN1bW1hcnk6IFRoZXJlIHdhcyAxIEVSUk9SIG1lc3NhZ2Ugc2hvd24sIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2UgaGF2ZSBjcmVhdGVkIHRoZSBsYXllciB3aXRoIHRoZSByZWNpcGUgYW5kIHRoZSBsYXllcgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBidXQgaXQgc3RpbGwgc2VlbXMgdGhhdCBCaXRCYWtlIGNhbm5vdAorICAgICAgICAgICAgICAgIGZpbmQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIGEgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBsaXN0cyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBXaXRob3V0IHRoaXMgZmlsZSwgQml0QmFrZSBjYW5ub3QgZmluZCB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdG8gbG9jYXRlIGxheWVycyBuZWVkZWQgZm9yIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBtdXN0IHJlc2lkZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBvZiB0aGUgcHJvamVjdCAoaS5lLiA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+IGZvciB0aGlzCisgICAgICAgICAgICAgICAgZXhhbXBsZSkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCBpdCBjb250YWlucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL2hvbWUvJmx0O3lvdSZndDsvbXlsYXllciBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBwcm92aWRlIHlvdXIgb3duIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b3U8L2ZpbGVuYW1lPiBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2UgV2l0aCBhIFRhcmdldDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIHN1cHBsaWVkIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSwgcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHByb3ZpZGUKKyAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIHByaW50aGVsbG8KKyAgICAgUGFyc2luZyByZWNpcGVzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfAorICAgICBUaW1lOiAwMDowMDowMAorICAgICBQYXJzaW5nIG9mIDEgLmJiIGZpbGVzIGNvbXBsZXRlICgwIGNhY2hlZCwgMSBwYXJzZWQpLiAxIHRhcmdldHMsIDAgc2tpcHBlZCwgMCBtYXNrZWQsIDAgZXJyb3JzLgorICAgICBOT1RFOiBSZXNvbHZpbmcgYW55IG1pc3NpbmcgdGFzayBxdWV1ZSBkZXBlbmRlbmNpZXMKKyAgICAgTk9URTogUHJlcGFyaW5nIFJ1blF1ZXVlCisgICAgIE5PVEU6IEV4ZWN1dGluZyBSdW5RdWV1ZSBUYXNrcworICAgICAqKioqKioqKioqKioqKioqKioqKgorICAgICAqICAgICAgICAgICAgICAgICAgKgorICAgICAqICBIZWxsbywgV29ybGQhICAgKgorICAgICAqICAgICAgICAgICAgICAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKgorICAgICBOT1RFOiBUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgMSB0YXNrcyBvZiB3aGljaCAwIGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGZpbmRzIHRoZSA8ZmlsZW5hbWU+cHJpbnRoZWxsbzwvZmlsZW5hbWU+IHJlY2lwZSBhbmQKKyAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcnVucyB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIGZpcnN0IGV4ZWN1dGlvbiwgcmUtcnVubmluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBwcmludGhlbGxvPC9maWxlbmFtZT4gYWdhaW4gd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGluIGEgQml0QmFrZSBydW4gdGhhdCBwcmludHMgdGhlIHNhbWUgY29uc29sZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgZmlyc3QgdGltZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByaW50aGVsbG8uYmI8L2ZpbGVuYW1lPiByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIGV4ZWN1dGVzCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgQml0QmFrZSB3cml0ZXMgYSBzdGFtcCBmaWxlIGZvciB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIG5leHQgdGltZSB5b3UgYXR0ZW1wdCB0byBydW4gdGhlIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhhdCBzYW1lIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBub3RpY2VzIHRoZSBzdGFtcCBhbmQgdGhlcmVmb3JlIGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdGFzayBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlLXJ1bi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRlbGV0ZSB0aGUgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBvciBydW4gPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW4gcHJpbnRoZWxsbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHJlLXJ1biB0aGUgYnVpbGQsIHRoZSAiSGVsbG8sIFdvcmxkISIgbWVzc2FnZSB3aWxsCisgICAgICAgICAgICAgICAgICAgIGJlIHByaW50ZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4ODY1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDY4NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8Y2hhcHRlciBpZD0iYml0YmFrZS11c2VyLW1hbnVhbC1pbnRybyI+CisgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXZWxjb21lIHRvIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICBUaGUgaW5mb3JtYXRpb24gYXR0ZW1wdHMgdG8gYmUgYXMgaW5kZXBlbmRlbnQgYXMgcG9zc2libGUgcmVnYXJkaW5nCisgICAgICAgIHN5c3RlbXMgdGhhdCB1c2UgQml0QmFrZSwgc3VjaCBhcyBPcGVuRW1iZWRkZWQgYW5kIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICBJbiBzb21lIGNhc2VzLCBzY2VuYXJpb3Mgb3IgZXhhbXBsZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mCisgICAgICAgIGEgYnVpbGQgc3lzdGVtIGFyZSB1c2VkIGluIHRoZSBtYW51YWwgdG8gaGVscCB3aXRoIHVuZGVyc3RhbmRpbmcuCisgICAgICAgIEZvciB0aGVzZSBjYXNlcywgdGhlIG1hbnVhbCBjbGVhcmx5IHN0YXRlcyB0aGUgY29udGV4dC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0iaW50cm8iPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZ1bmRhbWVudGFsbHksIEJpdEJha2UgaXMgYSBnZW5lcmljIHRhc2sgZXhlY3V0aW9uCisgICAgICAgICAgICBlbmdpbmUgdGhhdCBhbGxvd3Mgc2hlbGwgYW5kIFB5dGhvbiB0YXNrcyB0byBiZSBydW4KKyAgICAgICAgICAgIGVmZmljaWVudGx5IGFuZCBpbiBwYXJhbGxlbCB3aGlsZSB3b3JraW5nIHdpdGhpbgorICAgICAgICAgICAgY29tcGxleCBpbnRlci10YXNrIGRlcGVuZGVuY3kgY29uc3RyYWludHMuCisgICAgICAgICAgICBPbmUgb2YgQml0QmFrZSdzIG1haW4gdXNlcnMsIE9wZW5FbWJlZGRlZCwgdGFrZXMgdGhpcyBjb3JlCisgICAgICAgICAgICBhbmQgYnVpbGRzIGVtYmVkZGVkIExpbnV4IHNvZnR3YXJlIHN0YWNrcyB1c2luZworICAgICAgICAgICAgYSB0YXNrLW9yaWVudGVkIGFwcHJvYWNoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25jZXB0dWFsbHksIEJpdEJha2UgaXMgc2ltaWxhciB0byBHTlUgTWFrZSBpbgorICAgICAgICAgICAgc29tZSByZWdhcmRzIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBleGVjdXRlcyB0YXNrcyBhY2NvcmRpbmcgdG8gcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgdGhhdCBidWlsZHMgdXAgdGhlIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBNZXRhZGF0YSBpcyBzdG9yZWQgaW4gcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGFuZCByZWxhdGVkIHJlY2lwZSAiYXBwZW5kIiAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBmaWxlcywgY29uZmlndXJhdGlvbiAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pIGFuZAorICAgICAgICAgICAgICAgICAgICB1bmRlcmx5aW5nIGluY2x1ZGUgKDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4pIGZpbGVzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW4gY2xhc3MgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGFkYXRhIHByb3ZpZGVzCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hhdCB0YXNrcyB0byBydW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aG9zZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGluY2x1ZGVzIGEgZmV0Y2hlciBsaWJyYXJ5IGZvciBvYnRhaW5pbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgZnJvbSB2YXJpb3VzIHBsYWNlcyBzdWNoIGFzIGxvY2FsIGZpbGVzLCBzb3VyY2UgY29udHJvbAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBvciB3ZWJzaXRlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgaW5zdHJ1Y3Rpb25zIGZvciBlYWNoIHVuaXQgdG8gYmUgYnVpbHQgKGUuZy4gYSBwaWVjZQorICAgICAgICAgICAgICAgICAgICBvZiBzb2Z0d2FyZSkgYXJlIGtub3duIGFzICJyZWNpcGUiIGZpbGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBjb250YWluIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVuaXQKKyAgICAgICAgICAgICAgICAgICAgKGRlcGVuZGVuY2llcywgc291cmNlIGZpbGUgbG9jYXRpb25zLCBjaGVja3N1bXMsIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBvbikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpbmNsdWRlcyBhIGNsaWVudC9zZXJ2ZXIgYWJzdHJhY3Rpb24gYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSB1c2VkIGZyb20gYSBjb21tYW5kIGxpbmUgb3IgdXNlZCBhcyBhIHNlcnZpY2Ugb3ZlcgorICAgICAgICAgICAgICAgICAgICBYTUwtUlBDIGFuZCBoYXMgc2V2ZXJhbCBkaWZmZXJlbnQgdXNlciBpbnRlcmZhY2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Imhpc3RvcnktYW5kLWdvYWxzIj4KKyAgICAgICAgPHRpdGxlPkhpc3RvcnkgYW5kIEdvYWxzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2Ugd2FzIG9yaWdpbmFsbHkgYSBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQgcHJvamVjdC4KKyAgICAgICAgICAgIEl0IHdhcyBpbnNwaXJlZCBieSB0aGUgUG9ydGFnZSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtCisgICAgICAgICAgICB1c2VkIGJ5IHRoZSBHZW50b28gTGludXggZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgT24gRGVjZW1iZXIgNywgMjAwNCwgT3BlbkVtYmVkZGVkIHByb2plY3QgdGVhbSBtZW1iZXIKKyAgICAgICAgICAgIENocmlzIExhcnNvbiBzcGxpdCB0aGUgcHJvamVjdCBpbnRvIHR3byBkaXN0aW5jdCBwaWVjZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CaXRCYWtlLCBhIGdlbmVyaWMgdGFzayBleGVjdXRvcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PcGVuRW1iZWRkZWQsIGEgbWV0YWRhdGEgc2V0IHV0aWxpemVkIGJ5CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgVG9kYXksIEJpdEJha2UgaXMgdGhlIHByaW1hcnkgYmFzaXMgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvIj5PcGVuRW1iZWRkZWQ8L3VsaW5rPgorICAgICAgICAgICAgcHJvamVjdCwgd2hpY2ggaXMgYmVpbmcgdXNlZCB0byBidWlsZCBhbmQgbWFpbnRhaW4gTGludXgKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuYW5nc3Ryb20tZGlzdHJpYnV0aW9uLm9yZy8nPkFuZ3N0cm9tIERpc3RyaWJ1dGlvbjwvdWxpbms+LAorICAgICAgICAgICAgYW5kIHdoaWNoIGlzIGFsc28gYmVpbmcgdXNlZCBhcyB0aGUgYnVpbGQgdG9vbCBmb3IgTGludXggcHJvamVjdHMKKyAgICAgICAgICAgIHN1Y2ggYXMgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcnPllvY3RvIFByb2plY3Q8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUHJpb3IgdG8gQml0QmFrZSwgbm8gb3RoZXIgYnVpbGQgdG9vbCBhZGVxdWF0ZWx5IG1ldCB0aGUgbmVlZHMgb2YKKyAgICAgICAgICAgIGFuIGFzcGlyaW5nIGVtYmVkZGVkIExpbnV4IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIEFsbCBvZiB0aGUgYnVpbGQgc3lzdGVtcyB1c2VkIGJ5IHRyYWRpdGlvbmFsIGRlc2t0b3AgTGludXgKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgbGFja2VkIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5LCBhbmQgbm9uZSBvZiB0aGUKKyAgICAgICAgICAgIGFkIGhvYyBCdWlsZHJvb3QtYmFzZWQgc3lzdGVtcywgcHJldmFsZW50IGluIHRoZQorICAgICAgICAgICAgZW1iZWRkZWQgc3BhY2UsIHdlcmUgc2NhbGFibGUgb3IgbWFpbnRhaW5hYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIGltcG9ydGFudCBvcmlnaW5hbCBnb2FscyBmb3IgQml0QmFrZSB3ZXJlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBjcm9zcy1jb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgaW50ZXItcGFja2FnZSBkZXBlbmRlbmNpZXMgKGJ1aWxkIHRpbWUgb24KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYnVpbGQgdGltZSBvbiBuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLCBhbmQgcnVudGltZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBydW5uaW5nIGFueSBudW1iZXIgb2YgdGFza3Mgd2l0aGluIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGZldGNoaW5nCisgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtIHNvdXJjZXMsIHVucGFja2luZyB0aGVtLCBwYXRjaGluZyB0aGVtLAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmluZyB0aGVtLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgTGludXggZGlzdHJpYnV0aW9uIGFnbm9zdGljIGZvciBib3RoIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBhcmNoaXRlY3R1cmUgYWdub3N0aWMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBtdWx0aXBsZSBidWlsZCBhbmQgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW1zCisgICAgICAgICAgICAgICAgICAgIChlLmcuIEN5Z3dpbiwgdGhlIEJTRHMsIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgc2VsZiBjb250YWluZWQsIHJhdGhlciB0aGFuIHRpZ2h0bHkKKyAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBtYWNoaW5lJ3Mgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBjb25kaXRpb25hbCBtZXRhZGF0YSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSwgZGlzdHJpYnV0aW9uLCBhbmQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBlYXN5IHRvIHVzZSB0aGUgdG9vbHMgdG8gc3VwcGx5IGxvY2FsIG1ldGFkYXRhIGFuZCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IHdoaWNoIHRvIG9wZXJhdGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgZWFzeSB0byB1c2UgQml0QmFrZSB0byBjb2xsYWJvcmF0ZSBiZXR3ZWVuIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3RzIGZvciB0aGVpciBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhbiBpbmhlcml0YW5jZSBtZWNoYW5pc20gdG8gc2hhcmUKKyAgICAgICAgICAgICAgICAgICAgY29tbW9uIG1ldGFkYXRhIGJldHdlZW4gbWFueSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIE92ZXIgdGltZSBpdCBiZWNhbWUgYXBwYXJlbnQgdGhhdCBzb21lIGZ1cnRoZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICB3ZXJlIG5lY2Vzc2FyeToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgdmFyaWFudHMgb2YgYSBiYXNlIHJlY2lwZSAoZS5nLiBuYXRpdmUsIHNkaywKKyAgICAgICAgICAgICAgICAgICAgYW5kIG11bHRpbGliKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGxpdCBtZXRhZGF0YSBpbnRvIGxheWVycyBhbmQgYWxsb3cgbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIHRvIGVuaGFuY2Ugb3Igb3ZlcnJpZGUgb3RoZXIgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93IHJlcHJlc2VudGF0aW9uIG9mIGEgZ2l2ZW4gc2V0IG9mIGlucHV0IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICB0byBhIHRhc2sgYXMgYSBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICAgICAgQmFzZWQgb24gdGhhdCBjaGVja3N1bSwgYWxsb3cgYWNjZWxlcmF0aW9uIG9mIGJ1aWxkcworICAgICAgICAgICAgICAgICAgICB3aXRoIHByZWJ1aWx0IGNvbXBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBCaXRCYWtlIHNhdGlzZmllcyBhbGwgdGhlIG9yaWdpbmFsIHJlcXVpcmVtZW50cyBhbmQgbWFueSBtb3JlCisgICAgICAgICAgICB3aXRoIGV4dGVuc2lvbnMgYmVpbmcgbWFkZSB0byB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSB0bworICAgICAgICAgICAgcmVmbGVjdCB0aGUgYWRkaXRpb25hbCByZXF1aXJlbWVudHMuCisgICAgICAgICAgICBGbGV4aWJpbGl0eSBhbmQgcG93ZXIgaGF2ZSBhbHdheXMgYmVlbiB0aGUgcHJpb3JpdGllcy4KKyAgICAgICAgICAgIEJpdEJha2UgaXMgaGlnaGx5IGV4dGVuc2libGUgYW5kIHN1cHBvcnRzIGVtYmVkZGVkIFB5dGhvbiBjb2RlIGFuZAorICAgICAgICAgICAgZXhlY3V0aW9uIG9mIGFueSBhcmJpdHJhcnkgdGFza3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iQ29uY2VwdHMiPgorICAgICAgICA8dGl0bGU+Q29uY2VwdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBpcyBhIHByb2dyYW0gd3JpdHRlbiBpbiB0aGUgUHl0aG9uIGxhbmd1YWdlLgorICAgICAgICAgICAgQXQgdGhlIGhpZ2hlc3QgbGV2ZWwsIEJpdEJha2UgaW50ZXJwcmV0cyBtZXRhZGF0YSwgZGVjaWRlcworICAgICAgICAgICAgd2hhdCB0YXNrcyBhcmUgcmVxdWlyZWQgdG8gcnVuLCBhbmQgZXhlY3V0ZXMgdGhvc2UgdGFza3MuCisgICAgICAgICAgICBTaW1pbGFyIHRvIEdOVSBNYWtlLCBCaXRCYWtlIGNvbnRyb2xzIGhvdyBzb2Z0d2FyZSBpcworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgICAgICBHTlUgTWFrZSBhY2hpZXZlcyBpdHMgY29udHJvbCB0aHJvdWdoICJtYWtlZmlsZXMiLCB3aGlsZQorICAgICAgICAgICAgQml0QmFrZSB1c2VzICJyZWNpcGVzIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBleHRlbmRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBzaW1wbGUKKyAgICAgICAgICAgIHRvb2wgbGlrZSBHTlUgTWFrZSBieSBhbGxvd2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgbXVjaCBtb3JlCisgICAgICAgICAgICBjb21wbGV4IHRhc2tzLCBzdWNoIGFzIGFzc2VtYmxpbmcgZW50aXJlIGVtYmVkZGVkIExpbnV4CisgICAgICAgICAgICBkaXN0cmlidXRpb25zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBpbnRyb2R1Y2VzIHNldmVyYWwgY29uY2VwdHMKKyAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHVuZGVyc3Rvb2QgaW4gb3JkZXIgdG8gYmV0dGVyIGxldmVyYWdlCisgICAgICAgICAgICB0aGUgcG93ZXIgb2YgQml0QmFrZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWNpcGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBSZWNpcGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUgZmlsZSBleHRlbnNpb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4sIGFyZSB0aGUgbW9zdCBiYXNpYyBtZXRhZGF0YSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGVzZSByZWNpcGUgZmlsZXMgcHJvdmlkZSBCaXRCYWtlIHdpdGggdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGVzY3JpcHRpdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIChhdXRob3IsIGhvbWVwYWdlLCBsaWNlbnNlLCBhbmQgc28gb24pPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeGlzdGluZyBkZXBlbmRlbmNpZXMgKGJvdGggYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcyk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXJlIHRoZSBzb3VyY2UgY29kZSByZXNpZGVzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaG93IHRvIGZldGNoIGl0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIHRoZSBzb3VyY2UgY29kZSByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMsIHdoZXJlIHRvIGZpbmQgdGhlbSwgYW5kIGhvdyB0byBhcHBseQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IHRvIGNvbmZpZ3VyZSBhbmQgY29tcGlsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVyZSBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb3IgcGFja2FnZXMgY3JlYXRlZDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIGNvbnRleHQgb2YgQml0QmFrZSwgb3IgYW55IHByb2plY3QgdXRpbGl6aW5nIEJpdEJha2UKKyAgICAgICAgICAgICAgICBhcyBpdHMgYnVpbGQgc3lzdGVtLCBmaWxlcyB3aXRoIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBleHRlbnNpb24gYXJlIHJlZmVycmVkIHRvIGFzIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXJtICJwYWNrYWdlIiBpcyBhbHNvIGNvbW1vbmx5IHVzZWQgdG8gZGVzY3JpYmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2luY2UgdGhlIHNhbWUgd29yZCBpcyB1c2VkIHRvIGRlc2NyaWJlIHBhY2thZ2VkCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmcm9tIGEgcHJvamVjdCwgaXQgaXMgYmVzdCB0byBtYWludGFpbiBhIHNpbmdsZQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGl2ZSB0ZXJtIC0gInJlY2lwZXMiLgorICAgICAgICAgICAgICAgICAgICBQdXQgYW5vdGhlciB3YXksIGEgc2luZ2xlICJyZWNpcGUiIGZpbGUgaXMgcXVpdGUgY2FwYWJsZQorICAgICAgICAgICAgICAgICAgICBvZiBnZW5lcmF0aW5nIGEgbnVtYmVyIG9mIHJlbGF0ZWQgYnV0IHNlcGFyYXRlbHkgaW5zdGFsbGFibGUKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VzIi4KKyAgICAgICAgICAgICAgICAgICAgSW4gZmFjdCwgdGhhdCBhYmlsaXR5IGlzIGZhaXJseSBjb21tb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZpbGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBleHRlbnNpb24sIGRlZmluZQorICAgICAgICAgICAgICAgIHZhcmlvdXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBnb3Zlcm4gdGhlIHByb2plY3QncyBidWlsZAorICAgICAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgZmFsbCBpbnRvIHNldmVyYWwgYXJlYXMgdGhhdCBkZWZpbmUKKyAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBvcHRpb25zLCBjb21waWxlciB0dW5pbmcgb3B0aW9ucywgZ2VuZXJhbCBjb21tb24KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGhlIHNhbXBsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgICAgIGxvY2F0ZWQgd2l0aGluIHRoZSBCaXRCYWtlIHNvdXJjZSB0cmVlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2xhc3Nlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q2xhc3NlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBleHRlbnNpb24sIGNvbnRhaW4KKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IGlzIHVzZWZ1bCB0byBzaGFyZSBiZXR3ZWVuIG1ldGFkYXRhIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIHNvdXJjZSB0cmVlIGN1cnJlbnRseSBjb21lcyB3aXRoIG9uZSBjbGFzcyBtZXRhZGF0YSBmaWxlCisgICAgICAgICAgICAgICAgY2FsbGVkIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2xhc3MgZmlsZXMgaXMgc3BlY2lhbCBzaW5jZSBpdAorICAgICAgICAgICAgICAgIGlzIGFsd2F5cyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IGZvciBhbGwgcmVjaXBlcworICAgICAgICAgICAgICAgIGFuZCBjbGFzc2VzLgorICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHN0YW5kYXJkIGJhc2ljIHRhc2tzIHN1Y2gKKyAgICAgICAgICAgICAgICBhcyBmZXRjaGluZywgdW5wYWNraW5nLCBjb25maWd1cmluZyAoZW1wdHkgYnkgZGVmYXVsdCksCisgICAgICAgICAgICAgICAgY29tcGlsaW5nIChydW5zIGFueSBNYWtlZmlsZSBwcmVzZW50KSwgaW5zdGFsbGluZyAoZW1wdHkgYnkKKyAgICAgICAgICAgICAgICBkZWZhdWx0KSBhbmQgcGFja2FnaW5nIChlbXB0eSBieSBkZWZhdWx0KS4KKyAgICAgICAgICAgICAgICBUaGVzZSB0YXNrcyBhcmUgb2Z0ZW4gb3ZlcnJpZGRlbiBvciBleHRlbmRlZCBieSBvdGhlciBjbGFzc2VzCisgICAgICAgICAgICAgICAgYWRkZWQgZHVyaW5nIHRoZSBwcm9qZWN0IGRldmVsb3BtZW50IHByb2Nlc3MuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5MYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBMYXllcnMgYWxsb3cgeW91IHRvIGlzb2xhdGUgZGlmZmVyZW50IHR5cGVzIG9mCisgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgZnJvbSBlYWNoIG90aGVyLgorICAgICAgICAgICAgICAgIFdoaWxlIHlvdSBtaWdodCBmaW5kIGl0IHRlbXB0aW5nIHRvIGtlZXAgZXZlcnl0aGluZyBpbiBvbmUgbGF5ZXIKKyAgICAgICAgICAgICAgICB3aGVuIHdvcmtpbmcgb24gYSBzaW5nbGUgcHJvamVjdCwgdGhlIG1vcmUgbW9kdWxhciB5b3Ugb3JnYW5pemUKKyAgICAgICAgICAgICAgICB5b3VyIG1ldGFkYXRhLCB0aGUgZWFzaWVyIGl0IGlzIHRvIGNvcGUgd2l0aCBmdXR1cmUgY2hhbmdlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSBob3cgeW91IGNhbiB1c2UgbGF5ZXJzIHRvIGtlZXAgdGhpbmdzIG1vZHVsYXIsCisgICAgICAgICAgICAgICAgY29uc2lkZXIgY3VzdG9taXphdGlvbnMgeW91IG1pZ2h0IG1ha2UgdG8gc3VwcG9ydCBhIHNwZWNpZmljIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIFRoZXNlIHR5cGVzIG9mIGN1c3RvbWl6YXRpb25zIHR5cGljYWxseSByZXNpZGUgaW4gYSBzcGVjaWFsIGxheWVyLAorICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGEgZ2VuZXJhbCBsYXllciwgY2FsbGVkIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgTGF5ZXIuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBtYWNoaW5lIGN1c3RvbWl6YXRpb25zIHNob3VsZCBiZSBpc29sYXRlZCBmcm9tCisgICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgbWV0YWRhdGEgdGhhdCBzdXBwb3J0IGEgbmV3IEdVSSBlbnZpcm9ubWVudCwgZm9yCisgICAgICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBnaXZlcyB5b3UgYSBjb3VwbGUgb2YgbGF5ZXJzOiBvbmUgZm9yIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYW5kIG9uZSBmb3IgdGhlIEdVSSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCB0aGUgQlNQIGxheWVyIGNhbiBzdGlsbAorICAgICAgICAgICAgICAgIG1ha2UgbWFjaGluZS1zcGVjaWZpYyBhZGRpdGlvbnMgdG8gcmVjaXBlcyB3aXRoaW4KKyAgICAgICAgICAgICAgICB0aGUgR1VJIGVudmlyb25tZW50IGxheWVyIHdpdGhvdXQgcG9sbHV0aW5nIHRoZSBHVUkgbGF5ZXIgaXRzZWxmCisgICAgICAgICAgICAgICAgd2l0aCB0aG9zZSBtYWNoaW5lLXNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCBhIHJlY2lwZSB0aGF0IGlzIGEgQml0QmFrZSBhcHBlbmQKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZC1iYmFwcGVuZC1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzLCB3aGljaCBhcmUgZmlsZXMgdGhhdCBoYXZlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGV4dGVuc2lvbiwgZXh0ZW5kIG9yCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgaW5mb3JtYXRpb24gaW4gYW4gZXhpc3RpbmcgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZXhwZWN0cyBldmVyeSBhcHBlbmQgZmlsZSB0byBoYXZlIGEgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGFwcGVuZCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgbXVzdCB1c2UgdGhlIHNhbWUgcm9vdCBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWVzIGNhbiBkaWZmZXIgb25seSBpbiB0aGUgZmlsZSB0eXBlIHN1ZmZpeCB1c2VkCisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBpbiBhcHBlbmQgZmlsZXMgZXh0ZW5kcyBvcgorICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHVuZGVybHlpbmcsCisgICAgICAgICAgICAgICAgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgbmFtZSBhbiBhcHBlbmQgZmlsZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgd2lsZGNhcmQgY2hhcmFjdGVyICglKSB0byBhbGxvdyBmb3IgbWF0Y2hpbmcgcmVjaXBlIG5hbWVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJ1c3lib3hfMS4yMS4lLmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoYXQgYXBwZW5kIGZpbGUgd291bGQgbWF0Y2ggYW55IDxmaWxlbmFtZT5idXN5Ym94XzEuMjEueC5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFNvLCB0aGUgYXBwZW5kIGZpbGUgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyByZWNpcGUgbmFtZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBidXN5Ym94XzEuMjEuMS5iYgorICAgICBidXN5Ym94XzEuMjEuMi5iYgorICAgICBidXN5Ym94XzEuMjEuMy5iYgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiByZWNpcGUgd2FzIHVwZGF0ZWQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLjMuMC5iYjwvZmlsZW5hbWU+LCB0aGUgYXBwZW5kIG5hbWUgd291bGQgbm90CisgICAgICAgICAgICAgICAgbWF0Y2guCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IG5hbWVkIHRoZSBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94XzEuJS5iYmFwcGVuZDwvZmlsZW5hbWU+LCB0aGVuIHlvdSB3b3VsZCBoYXZlIGEgbWF0Y2guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgeW91IGNvdWxkIG5hbWUgdGhlIGFwcGVuZCBmaWxlIHNvbWV0aGluZyBhcworICAgICAgICAgICAgICAgIHNpbXBsZSBhcyA8ZmlsZW5hbWU+YnVzeWJveF8lLmJiYXBwZW5kPC9maWxlbmFtZT4gdG8gYmUgZW50aXJlbHkKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGluZGVwZW5kZW50LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J29idGFpbmluZy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPk9idGFpbmluZyBCaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gb2J0YWluIEJpdEJha2Ugc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbG9uaW5nIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgR2l0IHRvIGNsb25lIHRoZSBCaXRCYWtlIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3Igb2J0YWluaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIENsb25pbmcgdGhlIHJlcG9zaXRvcnkgbWFrZXMgaXQgZWFzeSB0byBnZXQgYnVnIGZpeGVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZlIGFjY2VzcyB0byBzdGFibGUgYnJhbmNoZXMgYW5kIHRoZSBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNsb25lZCBCaXRCYWtlLCB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgbGF0ZXN0IHN0YWJsZQorICAgICAgICAgICAgICAgICAgICBicmFuY2ggZm9yIGRldmVsb3BtZW50IHNpbmNlIHRoZSBtYXN0ZXIgYnJhbmNoIGlzIGZvcgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGRldmVsb3BtZW50IGFuZCBtaWdodCBjb250YWluIGxlc3Mgc3RhYmxlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHVzdWFsbHkgbmVlZCBhIHZlcnNpb24gb2YgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICB0aGF0IG1hdGNoZXMgdGhlIG1ldGFkYXRhIHlvdSBhcmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXRhZGF0YSBpcyBnZW5lcmFsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUgYnV0CisgICAgICAgICAgICAgICAgICAgIG5vdCBmb3J3YXJkIGNvbXBhdGlibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjbG9uZXMgdGhlIEJpdEJha2UgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNsb25lcyB0aGUgQml0QmFrZSBHaXQgcmVwb3NpdG9yeSBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNhbGxlZCA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0ZSBhIGRpcmVjdG9yeSBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBjbG9uZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgeW91IHdhbnQgdG8gY2FsbCB0aGUgbmV3IGRpcmVjdG9yeSBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBuYW1lcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgYmJkZXYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbGF0aW9uIHVzaW5nIHlvdXIgRGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW06PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIGJlY2F1c2UgdGhlIEJpdEJha2UgdmVyc2lvbiB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHlvdXIgZGlzdHJpYnV0aW9uLCBpbiBtb3N0IGNhc2VzLAorICAgICAgICAgICAgICAgICAgICBpcyBzZXZlcmFsCisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VzIGJlaGluZCBhIHNuYXBzaG90IG9mIHRoZSBCaXRCYWtlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFraW5nIGEgc25hcHNob3Qgb2YgQml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEb3dubG9hZGluZyBhIHNuYXBzaG90IG9mIEJpdEJha2UgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgcmVwb3NpdG9yeSBnaXZlcyB5b3UgYWNjZXNzIHRvIGEga25vd24KKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIG9yIHJlbGVhc2Ugb2YgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvbmluZyB0aGUgR2l0IHJlcG9zaXRvcnksIGFzIGRlc2NyaWJlZCBlYXJsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBnZXR0aW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvbmluZyB0aGUgcmVwb3NpdG9yeSBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhcmUgYWRkZWQgdG8gdGhlIHN0YWJsZSBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIGRvd25sb2FkcyBhIHNuYXBzaG90IG9mCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdmVyc2lvbiAxLjE3LjA6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3Z2V0IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3NuYXBzaG90L2JpdGJha2UtMS4xNy4wLnRhci5negorICAgICAkIHRhciB6eHB2ZiBiaXRiYWtlLTEuMTcuMC50YXIuZ3oKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBZnRlciBleHRyYWN0aW9uIG9mIHRoZSB0YXJiYWxsIHVzaW5nIHRoZSB0YXIgdXRpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgYSBkaXJlY3RvcnkgZW50aXRsZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtMS4xNy4wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgdGhlIEJpdEJha2UgdGhhdCBDb21lcyBXaXRoIFlvdXIKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgQ2hlY2tvdXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBmaW5hbCBwb3NzaWJpbGl0eSBmb3IgZ2V0dGluZyBhIGNvcHkgb2YgQml0QmFrZSBpcyB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgY29tZXMgd2l0aCB5b3VyIGNoZWNrb3V0IG9mIGEgbGFyZ2VyIEJpdGJha2UtYmFzZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBzdWNoIGFzIFBva3kgb3IgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gbWFudWFsbHkgY2hlY2tpbmcgb3V0IGluZGl2aWR1YWwgbGF5ZXJzIGFuZAorICAgICAgICAgICAgICAgICAgICBnbHVpbmcgdGhlbSB0b2dldGhlciB5b3Vyc2VsZiwgeW91IGNhbiBjaGVjaworICAgICAgICAgICAgICAgICAgICBvdXQgYW4gZW50aXJlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNoZWNrb3V0IHdpbGwgYWxyZWFkeSBpbmNsdWRlIGEgdmVyc2lvbiBvZiBCaXRCYWtlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gdGhvcm91Z2hseSB0ZXN0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjaGVjayBvdXQgYSBwYXJ0aWN1bGFyIEJpdEJha2UtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLCBjb25zdWx0IHRoYXQgYnVpbGQgc3lzdGVtJ3Mgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtY29tbWFuZCI+CisgICAgICAgIDx0aXRsZT5UaGUgQml0QmFrZSBDb21tYW5kPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlCisgICAgICAgICAgICB0byB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBCaXRCYWtlIGNvbW1hbmQgc3ludGF4IGFuZCBwcm92aWRlcworICAgICAgICAgICAgc2V2ZXJhbCBleGVjdXRpb24gZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNhZ2UtYW5kLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+VXNhZ2UgYW5kIHN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgdXNhZ2UgYW5kIHN5bnRheCBmb3IgQml0QmFrZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtaAorICAgICBVc2FnZTogYml0YmFrZSBbb3B0aW9uc10gW3JlY2lwZW5hbWUvdGFyZ2V0IC4uLl0KKworICAgICAgICAgRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIChkZWZhdWx0IGlzICdidWlsZCcpIGZvciBhIGdpdmVuIHNldCBvZiB0YXJnZXQgcmVjaXBlcyAoLmJiIGZpbGVzKS4KKyAgICAgICAgIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYSBjb25mL2JibGF5ZXJzLmNvbmYgYXZhaWxhYmxlIGluIGN3ZCBvciBpbiBCQlBBVEggd2hpY2gKKyAgICAgICAgIHdpbGwgcHJvdmlkZSB0aGUgbGF5ZXIsIEJCRklMRVMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisKKyAgICAgT3B0aW9uczoKKyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC1iIEJVSUxERklMRSwgLS1idWlsZGZpbGU9QlVJTERGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGFza3MgZnJvbSBhIHNwZWNpZmljIC5iYiByZWNpcGUgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBUk5JTkc6IERvZXMgbm90IGhhbmRsZSBhbnkgZGVwZW5kZW5jaWVzIGZyb20gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAtaywgLS1jb250aW51ZSAgICAgICAgQ29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0aGF0IGZhaWxlZCBhbmQgYW55dGhpbmcgZGVwZW5kaW5nIG9uIGl0IGNhbm5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBidWlsdCwgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aWxsIGJlIGJ1aWx0IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZy4KKyAgICAgICAtYSwgLS10cnlhbHRjb25maWdzICAgQ29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisgICAgICAgLWYsIC0tZm9yY2UgICAgICAgICAgIEZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBleGlzdGluZyBzdGFtcCBmaWxlKS4KKyAgICAgICAtYyBDTUQsIC0tY21kPUNNRCAgICAgU3BlY2lmeSB0aGUgdGFzayB0byBleGVjdXRlLiBUaGUgZXhhY3Qgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZGVwZW5kIG9uIHRoZSBtZXRhZGF0YS4gU29tZSBleGFtcGxlcyBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSAnY29tcGlsZScgb3IgJ3BvcHVsYXRlX3N5c3Jvb3QnIG9yICdsaXN0dGFza3MnIG1heQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlIGEgbGlzdCBvZiB0aGUgdGFza3MgYXZhaWxhYmxlLgorICAgICAgIC1DIElOVkFMSURBVEVfU1RBTVAsIC0tY2xlYXItc3RhbXA9SU5WQUxJREFURV9TVEFNUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhbGlkYXRlIHRoZSBzdGFtcCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGUnIGFuZCB0aGVuIHJ1biB0aGUgZGVmYXVsdCB0YXNrIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHRhcmdldChzKS4KKyAgICAgICAtciBQUkVGSUxFLCAtLXJlYWQ9UFJFRklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLgorICAgICAgIC1SIFBPU1RGSUxFLCAtLXBvc3RyZWFkPVBPU1RGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGFmdGVyIGJpdGJha2UuY29uZi4KKyAgICAgICAtdiwgLS12ZXJib3NlICAgICAgICAgT3V0cHV0IG1vcmUgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuCisgICAgICAgLUQsIC0tZGVidWcgICAgICAgICAgIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIG9uY2UuCisgICAgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4KKyAgICAgICAtUyBTSUdOQVRVUkVfSEFORExFUiwgLS1kdW1wLXNpZ25hdHVyZXM9U0lHTkFUVVJFX0hBTkRMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVtcCBvdXQgdGhlIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5mb3JtYXRpb24sIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gdGFzayBleGVjdXRpb24uIFRoZSBTSUdOQVRVUkVfSEFORExFUiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLiBUd28gY29tbW9uIHZhbHVlcyBhcmUgbm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRkaWZmIGJ1dCB0aGUgaGFuZGxlciBtYXkgZGVmaW5lIG1vcmUvbGVzcy4gbm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBvbmx5IGR1bXAgdGhlIHNpZ25hdHVyZSwgcHJpbnRkaWZmIG1lYW5zIGNvbXBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUgY2FjaGVkIG9uZS4KKyAgICAgICAtcCwgLS1wYXJzZS1vbmx5ICAgICAgUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLgorICAgICAgIC1zLCAtLXNob3ctdmVyc2lvbnMgICBTaG93IGN1cnJlbnQgYW5kIHByZWZlcnJlZCB2ZXJzaW9ucyBvZiBhbGwgcmVjaXBlcy4KKyAgICAgICAtZSwgLS1lbnZpcm9ubWVudCAgICAgU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQgY29tcGxldGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB2YXJpYWJsZXMgd2VyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQvY2hhbmdlZC4KKyAgICAgICAtZywgLS1ncmFwaHZpeiAgICAgICAgU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyBpbiB0aGUgZG90IHN5bnRheC4KKyAgICAgICAtSSBFWFRSQV9BU1NVTUVfUFJPVklERUQsIC0taWdub3JlLWRlcHM9RVhUUkFfQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIChlcXVpdmFsZW50IHRvIEFTU1VNRV9QUk9WSURFRCkuIFVzZWZ1bCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nCisgICAgICAgLWwgREVCVUdfRE9NQUlOUywgLS1sb2ctZG9tYWlucz1ERUJVR19ET01BSU5TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgZGVidWcgbG9nZ2luZyBmb3IgdGhlIHNwZWNpZmllZCBsb2dnaW5nIGRvbWFpbnMKKyAgICAgICAtUCwgLS1wcm9maWxlICAgICAgICAgUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLgorICAgICAgIC11IFVJLCAtLXVpPVVJICAgICAgICBUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChlLmcuIGtub3R0eSwgaG9iLCBkZXBleHApLgorICAgICAgIC10IFNFUlZFUlRZUEUsIC0tc2VydmVydHlwZT1TRVJWRVJUWVBFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBwcm9jZXNzIG9yIHhtbHJwYy4KKyAgICAgICAtLXRva2VuPVhNTFJQQ1RPS0VOICAgU3BlY2lmeSB0aGUgY29ubmVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIuCisgICAgICAgLS1yZXZpc2lvbnMtY2hhbmdlZCAgIFNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LgorICAgICAgIC0tc2VydmVyLW9ubHkgICAgICAgICBSdW4gYml0YmFrZSB3aXRob3V0IGEgVUksIG9ubHkgc3RhcnRpbmcgYSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvb2tlcikgcHJvY2Vzcy4KKyAgICAgICAtQiBCSU5ELCAtLWJpbmQ9QklORCAgVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uCisgICAgICAgLS1uby1zZXRzY2VuZSAgICAgICAgIERvIG5vdCBydW4gYW55IHNldHNjZW5lIHRhc2tzLiBzc3RhdGUgd2lsbCBiZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVyeXRoaW5nIG5lZWRlZCwgYnVpbHQuCisgICAgICAgLS1yZW1vdGUtc2VydmVyPVJFTU9URV9TRVJWRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdCB0byB0aGUgc3BlY2lmaWVkIHNlcnZlci4KKyAgICAgICAtbSwgLS1raWxsLXNlcnZlciAgICAgVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLgorICAgICAgIC0tb2JzZXJ2ZS1vbmx5ICAgICAgICBDb25uZWN0IHRvIGEgc2VydmVyIGFzIGFuIG9ic2VydmluZy1vbmx5IGNsaWVudC4KKyAgICAgICAtLXN0YXR1cy1vbmx5ICAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmVtb3RlIGJpdGJha2Ugc2VydmVyLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLWV4YW1wbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzb21lIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhhbXBsZS1leGVjdXRpbmctYS10YXNrLWFnYWluc3QtYS1zaW5nbGUtcmVjaXBlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIGEgVGFzayBBZ2FpbnN0IGEgU2luZ2xlIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW5nIHRhc2tzIGZvciBhIHNpbmdsZSByZWNpcGUgZmlsZSBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNwZWNpZnkgdGhlIGZpbGUgaW4gcXVlc3Rpb24sIGFuZCBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICBpdCBhbmQgZXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSB0YXNrLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIGlzICJidWlsZOKAnS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBvYmV5cyBpbnRlci10YXNrIGRlcGVuZGVuY2llcyB3aGVuIGRvaW5nCisgICAgICAgICAgICAgICAgICAgIHNvLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgcnVucyB0aGUgYnVpbGQgdGFzaywgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdGFzaywgb24gdGhlIDxmaWxlbmFtZT5mb29fMS4wLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1iIGZvb18xLjAuYmIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgcnVucyB0aGUgY2xlYW4gdGFzayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvby5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYiBmb28uYmIgLWMgY2xlYW4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAiLWIiIG9wdGlvbiBleHBsaWNpdGx5IGRvZXMgbm90IGhhbmRsZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRoYW4gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgaXQgaXMgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZSBzeW50YXggcHJlc2VudGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhlY3V0aW5nLXRhc2tzLWFnYWluc3QtYS1zZXQtb2YtcmVjaXBlLWZpbGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIFRhc2tzIEFnYWluc3QgYSBTZXQgb2YgUmVjaXBlIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb21wbGV4aXRpZXMgaW50cm9kdWNlZAorICAgICAgICAgICAgICAgICAgICB3aGVuIG9uZSB3YW50cyB0byBtYW5hZ2UgbXVsdGlwbGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBDbGVhcmx5IHRoZXJlIG5lZWRzIHRvIGJlIGEgd2F5IHRvIHRlbGwgQml0QmFrZSB3aGF0CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGFyZSBhdmFpbGFibGUgYW5kLCBvZiB0aG9zZSwgd2hpY2ggeW91CisgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlcmUgYWxzbyBuZWVkcyB0byBiZSBhIHdheSBmb3IgZWFjaCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdG8gZXhwcmVzcyBpdHMgZGVwZW5kZW5jaWVzLCBib3RoIGZvciBidWlsZC10aW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBydW50aW1lLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBtdXN0IGJlIGEgd2F5IGZvciB5b3UgdG8gZXhwcmVzcyByZWNpcGUgcHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgb3Igd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsIHdoZW4gbm90IHVzaW5nCisgICAgICAgICAgICAgICAgICAgICItLWJ1aWxkZmlsZSIgb3IgIi1iIiBvbmx5IGFjY2VwdHMgYSAiUFJPVklERVMiLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHByb3ZpZGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYSByZWNpcGUgZmlsZSBnZW5lcmFsbHkgIlBST1ZJREVTIiBpdHMKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VuYW1lIiBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGZvbworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlICJQUk9WSURFUyIgdGhlIHBhY2thZ2UgbmFtZSBhbmQgYWxzbyB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSAiLWMiIG9wdGlvbiB0byB0ZWxsIEJpdEJha2UgdG8ganVzdCBleGVjdXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPiB0YXNrOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbiBmb28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2dlbmVyYXRpbmctZGVwZW5kZW5jeS1ncmFwaHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIERlcGVuZGVuY3kgR3JhcGhzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlzIGFibGUgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jeSBncmFwaHMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb3Q8L2ZpbGVuYW1lPiBzeW50YXguCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY29udmVydCB0aGVzZSBncmFwaHMgaW50byBpbWFnZXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb3Q8L2ZpbGVuYW1lPiB0b29sIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5ncmFwaHZpei5vcmcnPkdyYXBodml6PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGdlbmVyYXRlIGEgZGVwZW5kZW5jeSBncmFwaCwgQml0QmFrZSB3cml0ZXMgZm91ciBmaWxlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBhY2thZ2UtZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dzIEJpdEJha2UncyBrbm93bGVkZ2Ugb2YgZGVwZW5kZW5jaWVzIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lIHRhcmdldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wbi1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgZGVwZW5kZW5jaWVzIGJldHdlZW4gYnVpbGQtdGltZSB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT50YXNrLWRlcGVuZHMuZG90PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBuLWJ1aWxkbGlzdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgYSBzaW1wbGUgbGlzdCBvZiB0YXJnZXRzIHRoYXQgYXJlIHRvIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3RvcCBkZXBlbmRpbmcgb24gY29tbW9uIGRlcGVuZHMsIHVzZSB0aGUgIi1JIiBkZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGFuZCBCaXRCYWtlIG9taXRzIHRoZW0gZnJvbSB0aGUgZ3JhcGguCisgICAgICAgICAgICAgICAgICAgIExlYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBvdXQgY2FuIHByb2R1Y2UgbW9yZSByZWFkYWJsZSBncmFwaHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgd2F5LCB5b3UgY2FuIHJlbW92ZSBmcm9tIHRoZSBncmFwaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGZyb20gaW5oZXJpdGVkIGNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlcyB0aGF0IGNyZWF0ZSBkZXBlbmRlbmN5IGdyYXBocy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBleGFtcGxlIG9taXRzIGRlcGVuZHMgY29tbW9uIGluIE9wZW5FbWJlZGRlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIHRoZSBncmFwaDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWcgZm9vCisKKyAgICAgJCBiaXRiYWtlIC1nIC1JIHZpcnR1YWwva2VybmVsIC1JIGVnbGliYyBmb28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjlkODAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCkBAIC0wLDAgKzEsMTgzMCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyIGlkPSJiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhIj4KKyAgICA8dGl0bGU+U3ludGF4IGFuZCBPcGVyYXRvcnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdGJha2UgZmlsZXMgaGF2ZSB0aGVpciBvd24gc3ludGF4LgorICAgICAgICBUaGUgc3ludGF4IGhhcyBzaW1pbGFyaXRpZXMgdG8gc2V2ZXJhbAorICAgICAgICBvdGhlciBsYW5ndWFnZXMgYnV0IGFsc28gaGFzIHNvbWUgdW5pcXVlIGZlYXR1cmVzLgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBhdmFpbGFibGUgc3ludGF4IGFuZCBvcGVyYXRvcnMKKyAgICAgICAgYXMgd2VsbCBhcyBwcm92aWRlcyBleGFtcGxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmFzaWMtc3ludGF4Jz4KKyAgICAgICAgPHRpdGxlPkJhc2ljIFN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBiYXNpYyBzeW50YXggZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYmFzaWMtdmFyaWFibGUtc2V0dGluZyc+CisgICAgICAgICAgICA8dGl0bGU+QmFzaWMgVmFyaWFibGUgU2V0dGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzZXRzIDxmaWxlbmFtZT5WQVJJQUJMRTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgInZhbHVlIi4KKyAgICAgICAgICAgICAgICBUaGlzIGFzc2lnbm1lbnQgb2NjdXJzIGltbWVkaWF0ZWx5IGFzIHRoZSBzdGF0ZW1lbnQgaXMgcGFyc2VkLgorICAgICAgICAgICAgICAgIEl0IGlzIGEgImhhcmQiIGFzc2lnbm1lbnQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVJJQUJMRSA9ICJ2YWx1ZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQXMgZXhwZWN0ZWQsIGlmIHlvdSBpbmNsdWRlIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICBhbiBhc3NpZ25tZW50LCB0aGUgc3BhY2VzIGFyZSByZXRhaW5lZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUklBQkxFID0gIiB2YWx1ZSIKKyAgICAgVkFSSUFCTEUgPSAidmFsdWUgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5WQVJJQUJMRTwvZmlsZW5hbWU+IHRvICIiIHNldHMgaXQgdG8gYW4gZW1wdHkgc3RyaW5nLAorICAgICAgICAgICAgICAgIHdoaWxlIHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvICIgIiBzZXRzIGl0IHRvIGEgYmxhbmsgc3BhY2UKKyAgICAgICAgICAgICAgICAoaS5lLiB0aGVzZSBhcmUgbm90IHRoZSBzYW1lIHZhbHVlcykuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVJJQUJMRSA9ICIiCisgICAgIFZBUklBQkxFID0gIiAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWV4cGFuc2lvbic+CisgICAgICAgICAgICA8dGl0bGU+VmFyaWFibGUgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB2YXJpYWJsZXMgcmVmZXJlbmNpbmcgb25lIGFub3RoZXIncworICAgICAgICAgICAgICAgIGNvbnRlbnRzIHVzaW5nIGEgc3ludGF4IHRoYXQgaXMgc2ltaWxhciB0byBzaGVsbCBzY3JpcHRpbmcuCisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWluaW5nICJhdmFsIiBhbmQgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBldmFsdWF0aW5nIHRvCisgICAgICAgICAgICAgICAgInByZWF2YWxwb3N0IiBiYXNlZCBvbiB0aGF0IGN1cnJlbnQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA9ICJhdmFsIgorICAgICBCID0gInByZSR7QX1wb3N0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUgdGhhdCB3aGVuZXZlciA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlZCwgaXRzIGV2YWx1YXRpb24gd2lsbCBkZXBlbmQgb24gdGhlIHN0YXRlIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBhdCB0aGF0IHRpbWUuCisgICAgICAgICAgICAgICAgVGh1cywgbGF0ZXIgZXZhbHVhdGlvbnMgb2YgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlIGNvdWxkIHJlc3VsdCBpbiBkaWZmZXJlbnQgdmFsdWVzCisgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctYS1kZWZhdWx0LXZhbHVlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIGEgZGVmYXVsdCB2YWx1ZSAoPz0pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlICI/PSIgb3BlcmF0b3IgdG8gYWNoaWV2ZSBhICJzb2Z0ZXIiIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBmb3IgYSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHR5cGUgb2YgYXNzaWdubWVudCBhbGxvd3MgeW91IHRvIGRlZmluZSBhIHZhcmlhYmxlIGlmIGl0CisgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIHdoZW4gdGhlIHN0YXRlbWVudCBpcyBwYXJzZWQsIGJ1dCB0byBsZWF2ZSB0aGUKKyAgICAgICAgICAgICAgICB2YWx1ZSBhbG9uZSBpZiB0aGUgdmFyaWFibGUgaGFzIGEgdmFsdWUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA/PSAiYXZhbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgYXQgdGhlIHRpbWUgdGhpcyBzdGF0ZW1lbnQgaXMgcGFyc2VkLAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSByZXRhaW5zIGl0cyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHNldCB0byAiYXZhbCIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBpcyBpbW1lZGlhdGUuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgbXVsdGlwbGUgIj89IiBhc3NpZ25tZW50cworICAgICAgICAgICAgICAgICAgICB0byBhIHNpbmdsZSB2YXJpYWJsZSBleGlzdCwgdGhlIGZpcnN0IG9mIHRob3NlIGVuZHMgdXAgZ2V0dGluZworICAgICAgICAgICAgICAgICAgICB1c2VkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLWEtd2Vhay1kZWZhdWx0LXZhbHVlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIGEgd2VhayBkZWZhdWx0IHZhbHVlICg/Pz0pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGEgIndlYWtlciIgYXNzaWdubWVudCB0aGFuIGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb24gYnkgdXNpbmcgdGhlICI/Pz0iIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBiZWhhdmVzIGlkZW50aWNhbCB0byAiPz0iIGV4Y2VwdCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgaXMgbWFkZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzaW5nIHByb2Nlc3MgcmF0aGVyCisgICAgICAgICAgICAgICAgdGhhbiBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHdoZW4gbXVsdGlwbGUgIj8/PSIgYXNzaWdubWVudHMgZXhpc3QsIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgb25lIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgQWxzbywgYW55ICI9IiBvciAiPz0iIGFzc2lnbm1lbnQgd2lsbCBvdmVycmlkZSB0aGUgdmFsdWUgc2V0IHdpdGgKKyAgICAgICAgICAgICAgICAiPz89Ii4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBID8/PSAic29tZXZhbHVlIgorICAgICBBID8/PSAic29tZW90aGVydmFsdWUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IGJlZm9yZSB0aGUgYWJvdmUgc3RhdGVtZW50cyBhcmUgcGFyc2VkLAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSByZXRhaW5zIGl0cyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHNldCB0byAic29tZW90aGVydmFsdWUiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgdGhpcyBhc3NpZ25tZW50IGlzIGEgImxhenkiIG9yICJ3ZWFrIiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgYmVjYXVzZSBpdCBkb2VzIG5vdCBvY2N1ciB1bnRpbCB0aGUgZW5kCisgICAgICAgICAgICAgICAgb2YgdGhlIHBhcnNpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbW1lZGlhdGUtdmFyaWFibGUtZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbW1lZGlhdGUgdmFyaWFibGUgZXhwYW5zaW9uICg6PSk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgIjo9IiBvcGVyYXRvciByZXN1bHRzIGluIGEgdmFyaWFibGUncworICAgICAgICAgICAgICAgIGNvbnRlbnRzIGJlaW5nIGV4cGFuZGVkIGltbWVkaWF0ZWx5LAorICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUID0gIjEyMyIKKyAgICAgQSA6PSAiJHtCfSAke0F9IHRlc3QgJHtUfSIKKyAgICAgVCA9ICI0NTYiCisgICAgIEIgPSAiJHtUfSBidmFsIgorICAgICBDID0gImN2YWwiCisgICAgIEMgOj0gIiR7Q31hcHBlbmQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBjb250YWlucworICAgICAgICAgICAgICAgICJ0ZXN0IDEyMyIgYmVjYXVzZSA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0F9PC9maWxlbmFtZT4gYXQgdGhlIHRpbWUgb2YgcGFyc2luZyBhcmUgdW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIHdoaWNoIGxlYXZlcyAidGVzdCAxMjMiLgorICAgICAgICAgICAgICAgIEFuZCwgdGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5DPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWlucyAiY3ZhbGFwcGVuZCIgc2luY2UgPGZpbGVuYW1lPiR7Q308L2ZpbGVuYW1lPiBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGV4cGFuZHMgdG8gImN2YWwiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICgrPSkgYW5kIHByZXBlbmRpbmcgKD0rKSBXaXRoIFNwYWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGVuZGluZyBhbmQgcHJlcGVuZGluZyB2YWx1ZXMgaXMgY29tbW9uIGFuZCBjYW4gYmUgYWNjb21wbGlzaGVkCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICIrPSIgYW5kICI9KyIgb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyBpbnNlcnQgYSBzcGFjZSBiZXR3ZWVuIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgdmFsdWUgYW5kIHByZXBlbmRlZCBvciBhcHBlbmRlZCB2YWx1ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2Ugb3BlcmF0b3JzIHRha2UgaW1tZWRpYXRlIGVmZmVjdCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQiA9ICJidmFsIgorICAgICBCICs9ICJhZGRpdGlvbmFsZGF0YSIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDID0rICJ0ZXN0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBjb250YWlucworICAgICAgICAgICAgICAgICJidmFsIGFkZGl0aW9uYWxkYXRhIiBhbmQgPGZpbGVuYW1lPkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zICJ0ZXN0IGN2YWwiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZy13aXRob3V0LXNwYWNlcyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICguPSkgYW5kIFByZXBlbmRpbmcgKD0uKSBXaXRob3V0IFNwYWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGFwcGVuZCBvciBwcmVwZW5kIHZhbHVlcyB3aXRob3V0IGFuCisgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgc3BhY2UsIHVzZSB0aGUgIi49IiBhbmQgIj0uIiBvcGVyYXRvcnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyB0YWtlIGltbWVkaWF0ZSBlZmZlY3QgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEIgPSAiYnZhbCIKKyAgICAgQiAuPSAiYWRkaXRpb25hbGRhdGEiCisgICAgIEMgPSAiY3ZhbCIKKyAgICAgQyA9LiAidGVzdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gY29udGFpbnMKKyAgICAgICAgICAgICAgICAiYnZhbGFkZGl0aW9uYWxkYXRhIiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGNvbnRhaW5zICJ0ZXN0Y3ZhbCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXBwZW5kaW5nLWFuZC1wcmVwZW5kaW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nIGFuZCBQcmVwZW5kaW5nIChPdmVycmlkZSBTdHlsZSBTeW50YXgpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGFwcGVuZCBhbmQgcHJlcGVuZCBhIHZhcmlhYmxlJ3MgdmFsdWUKKyAgICAgICAgICAgICAgICB1c2luZyBhbiBvdmVycmlkZSBzdHlsZSBzeW50YXguCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgc3ludGF4LCBubyBzcGFjZXMgYXJlIGluc2VydGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcGVyYXRvcnMgZGlmZmVyIGZyb20gdGhlICI6PSIsICIuPSIsICI9LiIsICIrPSIsIGFuZCAiPSsiCisgICAgICAgICAgICAgICAgb3BlcmF0b3JzIGluIHRoYXQgdGhlaXIgZWZmZWN0cyBhcmUgZGVmZXJyZWQKKyAgICAgICAgICAgICAgICB1bnRpbCBhZnRlciBwYXJzaW5nIGNvbXBsZXRlcyByYXRoZXIgdGhhbiBiZWluZyBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEIgPSAiYnZhbCIKKyAgICAgQl9hcHBlbmQgPSAiIGFkZGl0aW9uYWwgZGF0YSIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDX3ByZXBlbmQgPSAiYWRkaXRpb25hbCBkYXRhICIKKyAgICAgRCA9ICJkdmFsIgorICAgICBEX2FwcGVuZCA9ICJhZGRpdGlvbmFsIGRhdGEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiYnZhbCBhZGRpdGlvbmFsIGRhdGEiIGFuZCA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiYWRkaXRpb25hbCBkYXRhIGN2YWwiLgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+RDwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiZHZhbGFkZGl0aW9uYWwgZGF0YSIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNvbnRyb2wgYWxsIHNwYWNpbmcgd2hlbiB5b3UgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSBzeW50YXguCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbW92aW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+UmVtb3ZhbCAoT3ZlcnJpZGUgU3R5bGUgU3ludGF4KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVtb3ZlIHZhbHVlcyBmcm9tIGxpc3RzIHVzaW5nIHRoZSByZW1vdmFsCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgc3R5bGUgc3ludGF4LgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYSB2YWx1ZSBmb3IgcmVtb3ZhbCBjYXVzZXMgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQKKyAgICAgICAgICAgICAgICB2YWx1ZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBzeW50YXgsIEJpdEJha2UgZXhwZWN0cyBvbmUgb3IgbW9yZSBzdHJpbmdzLgorICAgICAgICAgICAgICAgIFN1cnJvdW5kaW5nIHNwYWNlcyBhcmUgcmVtb3ZlZCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPTyA9ICIxMjMgNDU2IDc4OSAxMjM0NTYgMTIzIDQ1NiAxMjMgNDU2IgorICAgICBGT09fcmVtb3ZlID0gIjEyMyIKKyAgICAgRk9PX3JlbW92ZSA9ICI0NTYiCisgICAgIEZPTzIgPSAiYWJjIGRlZiBnaGkgYWJjZGVmIGFiYyBkZWYgYWJjIGRlZiIKKyAgICAgRk9PMl9yZW1vdmUgPSAiYWJjIGRlZiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgIjc4OSAxMjM0NTYiIGFuZCA8ZmlsZW5hbWU+Rk9PMjwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiZ2hpIGFiY2RlZiIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtZmxhZy1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPlZhcmlhYmxlIEZsYWcgU3ludGF4PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVmFyaWFibGUgZmxhZ3MgYXJlIEJpdEJha2UncyBpbXBsZW1lbnRhdGlvbiBvZiB2YXJpYWJsZSBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgb3IgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBhIHdheSBvZiB0YWdnaW5nIGV4dHJhIGluZm9ybWF0aW9uIG9udG8gYSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBvdXQgYWJvdXQgdmFyaWFibGUgZmxhZ3MgaW4gZ2VuZXJhbCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZ3MnPlZhcmlhYmxlIEZsYWdzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSwgYXBwZW5kLCBhbmQgcHJlcGVuZCB2YWx1ZXMgdG8gdmFyaWFibGUgZmxhZ3MuCisgICAgICAgICAgICAgICAgQWxsIHRoZSBzdGFuZGFyZCBzeW50YXggb3BlcmF0aW9ucyBwcmV2aW91c2x5IG1lbnRpb25lZCB3b3JrCisgICAgICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGZsYWdzIGV4Y2VwdCBmb3Igb3ZlcnJpZGUgc3R5bGUgc3ludGF4CisgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcmVtb3ZlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHNldCB2YXJpYWJsZSBmbGFnczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPT1thXSA9ICJhYmMiCisgICAgIEZPT1tiXSA9ICIxMjMiCisgICAgIEZPT1thXSArPSAiNDU2IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGhhcyB0d28gZmxhZ3M6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZmxhZ3MgYXJlIGltbWVkaWF0ZWx5IHNldCB0byAiYWJjIiBhbmQgIjEyMyIsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBmbGFnIGJlY29tZXMgImFiYyA0NTYiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBObyBuZWVkIGV4aXN0cyB0byBwcmUtZGVmaW5lIHZhcmlhYmxlIGZsYWdzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2ltcGx5IHN0YXJ0IHVzaW5nIHRoZW0uCisgICAgICAgICAgICAgICAgT25lIGV4dHJlbWVseSBjb21tb24gYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICBpcyB0byBhdHRhY2ggc29tZSBicmllZiBkb2N1bWVudGF0aW9uIHRvIGEgQml0QmFrZSB2YXJpYWJsZSBhcworICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDQUNIRVtkb2NdID0gIlRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgY2FjaGUgb2YgdGhlIG1ldGFkYXRhLiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5saW5lLXB5dGhvbi12YXJpYWJsZS1leHBhbnNpb24nPgorICAgICAgICAgICAgPHRpdGxlPklubGluZSBQeXRob24gVmFyaWFibGUgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgaW5saW5lIFB5dGhvbiB2YXJpYWJsZSBleHBhbnNpb24gdG8KKyAgICAgICAgICAgICAgICBzZXQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERBVEUgPSAiJHtAdGltZS5zdHJmdGltZSgnJVklbSVkJyx0aW1lLmdtdGltZSgpKX0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSByZXN1bHRzIGluIHRoZSA8ZmlsZW5hbWU+REFURTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmVpbmcgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByb2JhYmx5IHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgdGhpcyBmZWF0dXJlIGlzIHRvIGV4dHJhY3QKKyAgICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgdmFyaWFibGVzIGZyb20gQml0QmFrZSdzIGludGVybmFsIGRhdGEgZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGluZXMgc2VsZWN0IHRoZSB2YWx1ZXMgb2YgYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICBhbmQgaXRzIHZlcnNpb24gbnVtYmVyLCByZXNwZWN0aXZlbHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCisgICAgIFBWID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsxXSBvciAnMS4wJ30iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3ZpZGluZy1wYXRobmFtZXMnPgorICAgICAgICAgICAgPHRpdGxlPlByb3ZpZGluZyBQYXRobmFtZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgcGF0aG5hbWVzIGZvciB1c2Ugd2l0aCBCaXRCYWtlLAorICAgICAgICAgICAgICAgIGRvIG5vdCB1c2UgdGhlIHRpbGRlICgifiIpIGNoYXJhY3RlciBhcyBhIHNob3J0Y3V0CisgICAgICAgICAgICAgICAgZm9yIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgRG9pbmcgc28gbWlnaHQgY2F1c2UgQml0QmFrZSB0byBub3QgcmVjb2duaXplIHRoZQorICAgICAgICAgICAgICAgIHBhdGggc2luY2UgQml0QmFrZSBkb2VzIG5vdCBleHBhbmQgdGhpcyBjaGFyYWN0ZXIgaW4KKyAgICAgICAgICAgICAgICB0aGUgc2FtZSB3YXkgYSBzaGVsbCB3b3VsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW5zdGVhZCwgcHJvdmlkZSBhIGZ1bGxlciBwYXRoIGFzIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBleGFtcGxlIGlsbHVzdHJhdGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL2hvbWUvc2NvdHQtbGVub3ZvL0xheWVyQSBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz4KKyAgICAgICAgPHRpdGxlPkNvbmRpdGlvbmFsIFN5bnRheCAoT3ZlcnJpZGVzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvIGNvbnRyb2wgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZQorICAgICAgICAgICAgcGFyc2VzIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuIHVzZQorICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IGFzIGNvbmRpdGlvbmFsIG1ldGFkYXRhLAorICAgICAgICAgICAgdGFsa3MgYWJvdXQga2V5IGV4cGFuc2lvbiBpbiByZWxhdGlvbnNoaXAgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwgYW5kIHByb3ZpZGVzIHNvbWUgZXhhbXBsZXMKKyAgICAgICAgICAgIHRvIGhlbHAgd2l0aCB1bmRlcnN0YW5kaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmRpdGlvbmFsLW1ldGFkYXRhJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0byBjb25kaXRpb25hbGx5IHNlbGVjdAorICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIHZhcmlhYmxlIGFuZCB0byBjb25kaXRpb25hbGx5CisgICAgICAgICAgICAgICAgYXBwZW5kIG9yIHByZXBlbmQgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3RpbmcgYSBWYXJpYWJsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgYSBjb2xvbi1jaGFyYWN0ZXItc2VwYXJhdGVkIGxpc3QgdGhhdCBjb250YWlucyBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNhdGlzZnkgY29uZGl0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBoYXZlIGEgdmFyaWFibGUgdGhhdCBpcyBjb25kaXRpb25hbCBvbiDigJxhcm3igJ0sIGFuZCDigJxhcm3igJ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwgdGhlbiB0aGUg4oCcYXJt4oCdLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSB2YXJpYWJsZSBpcyB1c2VkIHJhdGhlciB0aGFuIHRoZSBub24tY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJhcmNoaXRlY3R1cmU6b3M6bWFjaGluZSIKKyAgICAgVEVTVCA9ICJkZWZhdWx0IgorICAgICBURVNUX29zID0gIm9zc3BlY2lmaWMiCisgICAgIFRFU1Rfbm9vdmVycmlkZSA9ICJvdGhlcmNvbmR2YWx1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbGlzdHMgdGhyZWUgb3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgImFyY2hpdGVjdHVyZSIsICJvcyIsIGFuZCAibWFjaGluZSIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPlRFU1Q8L2ZpbGVuYW1lPiBieSBpdHNlbGYgaGFzIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgImRlZmF1bHQiLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNlbGVjdCB0aGUgb3Mtc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgPGZpbGVuYW1lPlRFU1Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYnkgYXBwZW5kaW5nIHRoZSAib3MiIG92ZXJyaWRlIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS48ZmlsZW5hbWU+VEVTVF9vczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhpcywgY29uc2lkZXIgYSBwcmFjdGljYWwgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXNzdW1lcyBhbiBPcGVuRW1iZWRkZWQgbWV0YWRhdGEtYmFzZWQgTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaW5lcyBmcm9tIHRoZSByZWNpcGUgZmlsZSBmaXJzdCBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIGJyYW5jaCB2YXJpYWJsZSA8ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSBkZWZhdWx0IHZhbHVlLCB0aGVuIGNvbmRpdGlvbmFsbHkgb3ZlcnJpZGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdWFybSAgPSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCisgICAgIEtCUkFOQ0hfcWVtdW1pcHMgPSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCisgICAgIEtCUkFOQ0hfcWVtdXBwYyAgPSAic3RhbmRhcmQvcWVtdXBwYyIKKyAgICAgS0JSQU5DSF9xZW11eDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKKyAgICAgS0JSQU5DSF9xZW11eDg2LTY0ICA9ICJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIKKyAgICAgS0JSQU5DSF9xZW11bWlwczY0ID0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nIGFuZCBQcmVwZW5kaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGFsc28gc3VwcG9ydHMgYXBwZW5kIGFuZCBwcmVwZW5kIG9wZXJhdGlvbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcyBiYXNlZCBvbiB3aGV0aGVyIGEgc3BlY2lmaWMgaXRlbSBpcworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyA9ICJnbGliYyBuY3Vyc2VzIgorICAgICBPVkVSUklERVMgPSAibWFjaGluZTpsb2NhbCIKKyAgICAgREVQRU5EU19hcHBlbmRfbWFjaGluZSA9ICJsaWJtYWQiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgImdsaWJjIG5jdXJzZXMgbGlibWFkIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdhaW4sIHVzaW5nIGFuIE9wZW5FbWJlZGRlZCBtZXRhZGF0YS1iYXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCByZWNpcGUgZmlsZSBhcyBhbiBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgbGluZXMgd2lsbCBjb25kaXRpb25hbGx5IGFwcGVuZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrZXktZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5LZXkgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgS2V5IGV4cGFuc2lvbiBoYXBwZW5zIHdoZW4gdGhlIEJpdEJha2UgZGF0YXN0b3JlIGlzIGZpbmFsaXplZAorICAgICAgICAgICAgICAgIGp1c3QgYmVmb3JlIEJpdEJha2UgZXhwYW5kcyBvdmVycmlkZXMuCisgICAgICAgICAgICAgICAgVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhpcywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSR7Qn0gPSAiWCIKKyAgICAgQiA9ICIyIgorICAgICBBMiA9ICJZIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFmdGVyIGFsbCB0aGUgcGFyc2luZyBpcyBjb21wbGV0ZSwgYW5kCisgICAgICAgICAgICAgICAgYmVmb3JlIGFueSBvdmVycmlkZXMgYXJlIGhhbmRsZWQsIEJpdEJha2UgZXhwYW5kcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0J9PC9maWxlbmFtZT4gaW50byAiMiIuCisgICAgICAgICAgICAgICAgVGhpcyBleHBhbnNpb24gY2F1c2VzIDxmaWxlbmFtZT5BMjwvZmlsZW5hbWU+LCB3aGljaCB3YXMKKyAgICAgICAgICAgICAgICBzZXQgdG8gIlkiIGJlZm9yZSB0aGUgZXhwYW5zaW9uLCB0byBiZWNvbWUgIlgiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWludGVyYWN0aW9uLXdvcmtlZC1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXNwaXRlIHRoZSBwcmV2aW91cyBleHBsYW5hdGlvbnMgdGhhdCBzaG93IHRoZSBkaWZmZXJlbnQgZm9ybXMgb2YKKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbml0aW9ucywgaXQgY2FuIGJlIGhhcmQgdG8gd29yaworICAgICAgICAgICAgICAgIG91dCBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHZhcmlhYmxlIG9wZXJhdG9ycywgY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMsIGFuZCB1bmNvbmRpdGlvbmFsIG92ZXJyaWRlcyBhcmUgY29tYmluZWQuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHNvbWUgY29tbW9uIHNjZW5hcmlvcyBhbG9uZworICAgICAgICAgICAgICAgIHdpdGggZXhwbGFuYXRpb25zIGZvciB2YXJpYWJsZSBpbnRlcmFjdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIHR5cGljYWxseSBjb25mdXNlIHVzZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVyZSBpcyBvZnRlbiBjb25mdXNpb24gY29uY2VybmluZyB0aGUgb3JkZXIgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMgYW5kIHZhcmlvdXMgImFwcGVuZCIgb3BlcmF0b3JzIHRha2UgZWZmZWN0LgorICAgICAgICAgICAgICAgIFJlY2FsbCB0aGF0IGFuIGFwcGVuZCBvciBwcmVwZW5kIG9wZXJhdGlvbiB1c2luZyAiX2FwcGVuZCIKKyAgICAgICAgICAgICAgICBhbmQgIl9wcmVwZW5kIiBkb2VzIG5vdCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBhcyB3b3VsZCAiKz0iLCAiLj0iLCAiPSsiLCBvciAiPS4iLgorICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJmb28iCisgICAgIEEgPSAiWiIKKyAgICAgQV9mb29fYXBwZW5kID0gIlgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICB1bmNvbmRpdGlvbmFsbHkgc2V0IHRvICJaIiBhbmQgIlgiIGlzCisgICAgICAgICAgICAgICAgdW5jb25kaXRpb25hbGx5IGFuZCBpbW1lZGlhdGVseSBhcHBlbmRlZCB0byB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIG92ZXJyaWRlcyBoYXZlIG5vdCBiZWVuIGFwcGxpZWQgeWV0LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IGlzIHNldCB0byAiWCIgZHVlIHRvIHRoZSBhcHBlbmQKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBzaW1wbHkgZXF1YWxzICJaIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwbHlpbmcgb3ZlcnJpZGVzLCBob3dldmVyLCBjaGFuZ2VzIHRoaW5ncy4KKyAgICAgICAgICAgICAgICBTaW5jZSAiZm9vIiBpcyBsaXN0ZWQgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHRoZSBjb25kaXRpb25hbCB2YXJpYWJsZSA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHJlcGxhY2VkCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgImZvbyIgdmVyc2lvbiwgd2hpY2ggaXMgZXF1YWwgdG8gIlgiLgorICAgICAgICAgICAgICAgIFNvIGVmZmVjdGl2ZWx5LCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPiByZXBsYWNlcyA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3ZlcnJpZGUgYW5kCisgICAgICAgICAgICAgICAgdGhlIGFwcGVuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJmb28iCisgICAgIEEgPSAiWiIKKyAgICAgQV9hcHBlbmRfZm9vID0gIlgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIGJlZm9yZSBvdmVycmlkZXMgYXJlIGhhbmRsZWQsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIloiIGFuZCA8ZmlsZW5hbWU+QV9hcHBlbmRfZm9vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpcyBzZXQgdG8gIlgiLgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIG92ZXJyaWRlIGZvciAiZm9vIiBpcyBhcHBsaWVkLCBob3dldmVyLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gZ2V0cyBhcHBlbmRlZCB3aXRoICJYIi4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21lcyAiWlgiLgorICAgICAgICAgICAgICAgIE5vdGljZSB0aGF0IHNwYWNlcyBhcmUgbm90IGFwcGVuZGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBoYXMgdGhlIG9yZGVyIG9mIHRoZSBhcHBlbmRzIGFuZCBvdmVycmlkZXMgcmV2ZXJzZWQKKyAgICAgICAgICAgICAgICBiYWNrIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1ZFUlJJREVTID0gImZvbyIKKyAgICAgQSA9ICJZIgorICAgICBBX2Zvb19hcHBlbmQgPSAiWiIKKyAgICAgQV9mb29fYXBwZW5kICs9ICJYIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCBiZWZvcmUgYW55IG92ZXJyaWRlcyBhcmUgcmVzb2x2ZWQsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIlkiIHVzaW5nIGFuIGltbWVkaWF0ZSBhc3NpZ25tZW50LgorICAgICAgICAgICAgICAgIEFmdGVyIHRoaXMgaW1tZWRpYXRlIGFzc2lnbm1lbnQsIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IGlzIHNldAorICAgICAgICAgICAgICAgIHRvICJaIiwgYW5kIHRoZW4gZnVydGhlciBhcHBlbmRlZCB3aXRoCisgICAgICAgICAgICAgICAgIlgiIGxlYXZpbmcgdGhlIHZhcmlhYmxlIHNldCB0byAiWiBYIi4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCBhcHBseWluZyB0aGUgb3ZlcnJpZGUgZm9yICJmb28iIHJlc3VsdHMgaW4gdGhlIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAgICAgdmFyaWFibGUgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBiZWNvbWluZyAiWiBYIiAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgcmVwbGFjZWQgd2l0aCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmluYWwgZXhhbXBsZSBtaXhlcyBpbiBzb21lIHZhcnlpbmcgb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA9ICIxIgorICAgICBBX2FwcGVuZCA9ICIyIgorICAgICBBX2FwcGVuZCA9ICIzIgorICAgICBBICs9ICI0IgorICAgICBBIC49ICI1IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCB0aGUgdHlwZSBvZiBhcHBlbmQgb3BlcmF0b3JzIGFyZSBhZmZlY3RpbmcgdGhlCisgICAgICAgICAgICAgICAgb3JkZXIgb2YgYXNzaWdubWVudHMgYXMgQml0QmFrZSBwYXNzZXMgdGhyb3VnaCB0aGUgY29kZQorICAgICAgICAgICAgICAgIG11bHRpcGxlIHRpbWVzLgorICAgICAgICAgICAgICAgIEluaXRpYWxseSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIjEgNDUiIGJlY2F1c2UKKyAgICAgICAgICAgICAgICBvZiB0aGUgdGhyZWUgc3RhdGVtZW50cyB0aGF0IHVzZSBpbW1lZGlhdGUgb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZXNlIGFzc2lnbm1lbnRzIGFyZSBtYWRlLCBCaXRCYWtlIGFwcGxpZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgIFRob3NlIG9wZXJhdGlvbnMgcmVzdWx0IGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21pbmcgIjEgNDUyMyIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2hhcmluZy1mdW5jdGlvbmFsaXR5Jz4KKyAgICAgICAgPHRpdGxlPlNoYXJpbmcgRnVuY3Rpb25hbGl0eTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBmb3IgbWV0YWRhdGEgc2hhcmluZyB0aHJvdWdoIGluY2x1ZGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBhbmQgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIHBpZWNlIG9mIGNvbW1vbiBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICBzdWNoIGFzIGEgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91IHdhbnQgdG8gc2hhcmUgYmV0d2VlbgorICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSByZWNpcGUuCisgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGNyZWF0aW5nIGEgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgdGhhdCBjb250YWlucyB0aGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZW4gdXNpbmcKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBpbiB5b3VyIHJlY2lwZXMgdG8KKyAgICAgICAgICAgIGluaGVyaXQgdGhlIGNsYXNzIHdvdWxkIGJlIGEgY29tbW9uIHdheSB0byBzaGFyZSB0aGUgdGFzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBtZWNoYW5pc21zIEJpdEJha2UgcHJvdmlkZXMgdG8KKyAgICAgICAgICAgIGFsbG93IHlvdSB0byBzaGFyZSBmdW5jdGlvbmFsaXR5IGJldHdlZW4gcmVjaXBlcy4KKyAgICAgICAgICAgIFNwZWNpZmljYWxseSwgdGhlIG1lY2hhbmlzbXMgaW5jbHVkZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYXRpbmctaW5jbHVkZS1hbmQtY2xhc3MtZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2F0aW5nIEluY2x1ZGUgYW5kIENsYXNzIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgbmVlZGVkIGluY2x1ZGUgYW5kIGNsYXNzIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvCisgICAgICAgICAgICAgICAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBpbmNsdWRlIGFuZCBjbGFzcyBmaWxlcyB0byBiZSBmb3VuZCBieSBCaXRCYWtlLAorICAgICAgICAgICAgICAgIHRoZXkgbmVlZCB0byBiZSBsb2NhdGVkIGluIGEgImNsYXNzZXMiIHN1YmRpcmVjdG9yeSB0aGF0IGNhbgorICAgICAgICAgICAgICAgIGJlIGZvdW5kIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmhlcml0LWRpcmVjdGl2ZSc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHdyaXRpbmcgYSByZWNpcGUgb3IgY2xhc3MgZmlsZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGEgY2xhc3MgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9ubHkgc3VwcG9ydHMgdGhpcyBkaXJlY3RpdmUgd2hlbiB1c2VkIHdpdGhpbiByZWNpcGUKKyAgICAgICAgICAgICAgICBhbmQgY2xhc3MgZmlsZXMgKGkuZS4gPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlIGlzIGEgcnVkaW1lbnRhcnkKKyAgICAgICAgICAgICAgICBtZWFucyBvZiBzcGVjaWZ5aW5nIHdoYXQgY2xhc3NlcyBvZiBmdW5jdGlvbmFsaXR5IHlvdXIKKyAgICAgICAgICAgICAgICByZWNpcGVzIHJlcXVpcmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZWFzaWx5IGFic3RyYWN0IG91dCB0aGUgdGFza3MgaW52b2x2ZWQgaW4KKyAgICAgICAgICAgICAgICBidWlsZGluZyBhIHBhY2thZ2UgdGhhdCB1c2VzIEF1dG9jb25mIGFuZCBBdXRvbWFrZSBhbmQgcHV0CisgICAgICAgICAgICAgICAgdGhvc2UgdGFza3MgaW50byBhIGNsYXNzIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgeW91ciByZWNpcGVzIGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIHRvIGluaGVyaXQgYW4gPGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgY2xhc3MgZmlsZSB3b3VsZCBjb250YWluIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciB1c2luZworICAgICAgICAgICAgICAgIEF1dG90b29scyB0aGF0IGNvdWxkIGJlIHNoYXJlZCBhY3Jvc3MgcmVjaXBlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYXV0b3Rvb2xzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgQml0QmFrZSB3b3VsZCBzZWFyY2ggZm9yIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIGFueSB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkIGNsYXNzIHdpdGhpbiB5b3VyIHJlY2lwZSBieSBkb2luZyBzbworICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgImluaGVyaXQiIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jbHVkZS1kaXJlY3RpdmUnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1bmRlcnN0YW5kcyB0aGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdGl2ZSBjYXVzZXMgQml0QmFrZSB0byBwYXJzZSB3aGF0ZXZlciBmaWxlIHlvdSBzcGVjaWZ5LAorICAgICAgICAgICAgICAgIGFuZCB0byBpbnNlcnQgdGhhdCBmaWxlIGF0IHRoYXQgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgVGhlIGRpcmVjdGl2ZSBpcyBtdWNoIGxpa2UgaXRzIGVxdWl2YWxlbnQgaW4gTWFrZSBleGNlcHQKKyAgICAgICAgICAgICAgICB0aGF0IGlmIHRoZSBwYXRoIHNwZWNpZmllZCBvbiB0aGUgaW5jbHVkZSBsaW5lIGlzIGEgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICBwYXRoLCBCaXRCYWtlIGxvY2F0ZXMgdGhlIGZpcnN0IGZpbGUgaXQgY2FuIGZpbmQKKyAgICAgICAgICAgICAgICB3aXRoaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkZWQgYSByZWNpcGUgdG8gaW5jbHVkZSBzb21lCisgICAgICAgICAgICAgICAgc2VsZi10ZXN0IGRlZmluaXRpb25zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5jbHVkZSB0ZXN0X2RlZnMuaW5jCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSBhbiBlcnJvciB3aGVuIHRoZSBmaWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGlmIHRoZSBmaWxlIHlvdQorICAgICAgICAgICAgICAgICAgICBhcmUgaW5jbHVkaW5nIGlzIGV4cGVjdGVkIHRvIGV4aXN0LCB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZXF1aXJlLWluY2x1c2lvbic+PGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBzdXJlIHRoYXQgYW4gZXJyb3IgaXMgcHJvZHVjZWQgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZXF1aXJlLWluY2x1c2lvbic+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVuZGVyc3RhbmRzIHRoZSA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLgorICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0aXZlIGJlaGF2ZXMganVzdCBsaWtlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0aXZlIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgQml0QmFrZSByYWlzZXMgYSBwYXJzaW5nIGVycm9yIGlmIHRoZSBmaWxlIHRvIGJlIGluY2x1ZGVkIGNhbm5vdAorICAgICAgICAgICAgICAgIGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIFRodXMsIGFueSBmaWxlIHlvdSByZXF1aXJlIGlzIGluc2VydGVkIGludG8gdGhlIGZpbGUgdGhhdCBpcworICAgICAgICAgICAgICAgIGJlaW5nIHBhcnNlZCBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2ltaWxhciB0byBob3cgQml0QmFrZSBoYW5kbGVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW5jbHVkZS1kaXJlY3RpdmUnPjxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIGlmIHRoZSBwYXRoIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIG9uIHRoZSByZXF1aXJlIGxpbmUgaXMgYSByZWxhdGl2ZSBwYXRoLCBCaXRCYWtlIGxvY2F0ZXMKKyAgICAgICAgICAgICAgICB0aGUgZmlyc3QgZmlsZSBpdCBjYW4gZmluZCB3aXRoaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIHR3byB2ZXJzaW9ucyBvZiBhIHJlY2lwZQorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5mb29fMS4yLjIuYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzIuMC4wLmJiPC9maWxlbmFtZT4pIHdoZXJlCisgICAgICAgICAgICAgICAgZWFjaCB2ZXJzaW9uIGNvbnRhaW5zIHNvbWUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBiZQorICAgICAgICAgICAgICAgIHNoYXJlZC4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgY3JlYXRlIGFuIGluY2x1ZGUgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+Zm9vLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29tbW9uIGRlZmluaXRpb25zIG5lZWRlZCB0byBidWlsZCAiZm9vIi4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIDxmaWxlbmFtZT5mb28uaW5jPC9maWxlbmFtZT4gaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBzYW1lIGRpcmVjdG9yeSBhcyB5b3VyIHR3byByZWNpcGUgZmlsZXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZXNlIGNvbmRpdGlvbnMgYXJlIHNldCB1cCwgeW91IGNhbiBzaGFyZSB0aGUgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgIHVzaW5nIGEgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgZnJvbSB3aXRoaW4gZWFjaAorICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgZm9vLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmhlcml0LWNvbmZpZ3VyYXRpb24tZGlyZWN0aXZlJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IENvbmZpZ3VyYXRpb24gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyBhIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSB0bworICAgICAgICAgICAgICAgIGluaGVyaXQgYSBjbGFzcy4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9ubHkgc3VwcG9ydHMgdGhpcyBkaXJlY3RpdmUgd2hlbiB1c2VkIHdpdGhpbgorICAgICAgICAgICAgICAgIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkZWQgdG8gaW5oZXJpdCBhIGNsYXNzCisgICAgICAgICAgICAgICAgZmlsZSBjYWxsZWQgPGZpbGVuYW1lPmFiYy5iYmNsYXNzPC9maWxlbmFtZT4gZnJvbSBhCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJhYmMiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgY2F1c2VzIHRoZSBuYW1lZAorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdCB0aGUgcG9pbnQgb2YgdGhlIGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgIEFzIHdpdGggdGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIG11c3QgYmUgbG9jYXRlZCBpbiBhCisgICAgICAgICAgICAgICAgImNsYXNzZXMiIHN1YmRpcmVjdG9yeSBpbiBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBhcmUgcGFyc2VkCisgICAgICAgICAgICAgICAgICAgIGZpcnN0IGR1cmluZyBCaXRCYWtlJ3MgZXhlY3V0aW9uLCB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IHRvIGluaGVyaXQgYSBjbGFzcyBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0cyB0aGUgY2xhc3MgZ2xvYmFsbHkgKGkuZS4gZm9yIGFsbCByZWNpcGVzKS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZnVuY3Rpb25zJz4KKyAgICAgICAgPHRpdGxlPkZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIG1vc3QgbGFuZ3VhZ2VzLCBmdW5jdGlvbnMgYXJlIHRoZSBidWlsZGluZyBibG9ja3MgdGhhdAorICAgICAgICAgICAgYXJlIHVzZWQgdG8gYnVpbGQgdXAgb3BlcmF0aW9ucyBpbnRvIHRhc2tzLgorICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hlbGwgRnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIHNoZWxsIHNjcmlwdCBhbmQgZXhlY3V0ZWQgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFzIGZ1bmN0aW9ucywgdGFza3MsIG9yIGJvdGguCisgICAgICAgICAgICAgICAgICAgIFRoZXkgY2FuIGFsc28gYmUgY2FsbGVkIGJ5IG90aGVyIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CaXRCYWtlIFN0eWxlIFB5dGhvbiBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBleGVjdXRlZCBieSBCaXRCYWtlIG9yIG90aGVyCisgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBmdW5jdGlvbnMgdXNpbmcgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBQeXRob24gYW5kIGV4ZWN1dGVkIGJ5IFB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Bbm9ueW1vdXMgUHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBQeXRob24gZnVuY3Rpb25zIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGZ1bmN0aW9uLCB5b3UgY2FuIG9ubHkKKyAgICAgICAgICAgIGRlZmluZSB0aGVtIGluIGNsYXNzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIGFuZCByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2hlbGwtZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5TaGVsbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBzaGVsbCBzY3JpcHQgYW5kIGV4ZWN1dGVkIGVpdGhlcgorICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFzIGZ1bmN0aW9ucywgdGFza3MsIG9yIGJvdGguCisgICAgICAgICAgICAgICAgVGhleSBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgb3RoZXIgc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBzaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc29tZV9mdW5jdGlvbiAoKSB7CisgICAgICAgICBlY2hvICJIZWxsbyBXb3JsZCIKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgb3IgY2xhc3MgZmlsZXMsIHlvdSBuZWVkIHRvIGZvbGxvdyB0aGUgc2hlbGwgcHJvZ3JhbW1pbmcKKyAgICAgICAgICAgICAgICBydWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgc2NyaXB0cyBhcmUgZXhlY3V0ZWQgYnkgPGZpbGVuYW1lPi9iaW4vc2g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCBtYXkgbm90IGJlIGEgYmFzaCBzaGVsbCBidXQgbWlnaHQgYmUgc29tZXRoaW5nCisgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+ZGFzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IHVzZSBCYXNoLXNwZWNpZmljIHNjcmlwdCAoYmFzaGlzbXMpLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2Utc3R5bGUtcHl0aG9uLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+Qml0QmFrZSBTdHlsZSBQeXRob24gRnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkKKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9yIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBCaXRCYWtlIGZ1bmN0aW9uIGlzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIHNvbWVfcHl0aG9uX2Z1bmN0aW9uICgpIHsKKyAgICAgICAgIGQuc2V0VmFyKCJURVhUIiwgIkhlbGxvIFdvcmxkIikKKyAgICAgICAgIHByaW50IGQuZ2V0VmFyKCJURVhUIiwgVHJ1ZSkKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBQeXRob24gImJiIiBhbmQgIm9zIiBtb2R1bGVzIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgaW1wb3J0ZWQsIHlvdSBkbyBub3QgbmVlZCB0byBpbXBvcnQgdGhlc2UgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBBbHNvIGluIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucywgdGhlIGRhdGFzdG9yZSAoImQiKQorICAgICAgICAgICAgICAgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGFuZCBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3B5dGhvbi1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPlB5dGhvbiBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBhcmUgZXhlY3V0ZWQgYnkKKyAgICAgICAgICAgICAgICBvdGhlciBQeXRob24gY29kZS4KKyAgICAgICAgICAgICAgICBFeGFtcGxlcyBvZiBQeXRob24gZnVuY3Rpb25zIGFyZSB1dGlsaXR5IGZ1bmN0aW9ucworICAgICAgICAgICAgICAgIHRoYXQgeW91IGludGVuZCB0byBjYWxsIGZyb20gaW4tbGluZSBQeXRob24gb3IKKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBvdGhlciBQeXRob24gZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZiBnZXRfZGVwZW5kcyhkKToKKyAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FQ09ORElUSU9OJywgVHJ1ZSk6CisgICAgICAgICAgICAgcmV0dXJuICJkZXBlbmRlbmN5d2l0aGNvbmQiCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHJldHVybiAiZGVwZW5kZW5jeSIKKyAgICAgU09NRUNPTkRJVElPTiA9ICIxIgorICAgICBERVBFTkRTID0gIiR7QGdldF9kZXBlbmRzKGQpfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgPGZpbGVuYW1lPmRlcGVuZGVuY3l3aXRoY29uZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHRoaW5ncyB0byBrbm93IGFib3V0IFB5dGhvbiBmdW5jdGlvbnM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiBmdW5jdGlvbnMgY2FuIHRha2UgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEJpdEJha2UgZGF0YXN0b3JlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IHBhc3MgaXQgaW4gYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlICJiYiIgYW5kICJvcyIgUHl0aG9uIG1vZHVsZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBpbXBvcnQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Fub255bW91cy1weXRob24tZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5Bbm9ueW1vdXMgUHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gcnVuIHNvbWUgY29kZSBkdXJpbmcKKyAgICAgICAgICAgICAgICBwYXJzaW5nIHRvIHNldCB2YXJpYWJsZXMgb3IgdG8gcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgcHJvZ3JhbW1hdGljYWxseS4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgY2FuIGRlZmluZSBhbiBhbm9ueW1vdXMgUHl0aG9uIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbmRpdGlvbmFsbHkgc2V0cyBhCisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGFub3RoZXIgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgICAgICAgaWYgZC5nZXRWYXIoJ1NPTUVWQVInLCBUcnVlKSA9PSAndmFsdWUnOgorICAgICAgICAgICAgIGQuc2V0VmFyKCdBTk9USEVSVkFSJywgJ3ZhbHVlMicpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlICJfX2Fub255bW91cyIgZnVuY3Rpb24gbmFtZSBpcyBvcHRpb25hbCwgc28gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGV4YW1wbGUgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uICgpIHsKKyAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FVkFSJywgVHJ1ZSkgPT0gJ3ZhbHVlJzoKKyAgICAgICAgICAgICBkLnNldFZhcignQU5PVEhFUlZBUicsICd2YWx1ZTInKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdW5saWtlIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMgYW5vbnltb3VzCisgICAgICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgZHVyaW5nIHBhcnNpbmcsIHRoZQorICAgICAgICAgICAgICAgICJkIiB2YXJpYWJsZSB3aXRoaW4gYW4gYW5vbnltb3VzIFB5dGhvbiBmdW5jdGlvbiByZXByZXNlbnRzCisgICAgICAgICAgICAgICAgdGhlIGRhdGFzdG9yZSBmb3IgdGhlIGVudGlyZSByZWNpcGUuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2FuIHNldCB2YXJpYWJsZSB2YWx1ZXMgaGVyZSBhbmQKKyAgICAgICAgICAgICAgICB0aG9zZSB2YWx1ZXMgY2FuIGJlIHBpY2tlZCB1cCBieSBvdGhlciBmdW5jdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmxleGlibGUtaW5oZXJpdGFuY2UtZm9yLWNsYXNzLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+RmxleGlibGUgSW5oZXJpdGFuY2UgZm9yIENsYXNzIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRocm91Z2ggY29kaW5nIHRlY2huaXF1ZXMgYW5kIHRoZSB1c2Ugb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+LCBCaXRCYWtlIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgZXhwb3J0aW5nIGEgZnVuY3Rpb24gZnJvbSBhIGNsYXNzIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcyBmdW5jdGlvbiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIGZ1bmN0aW9uLCBidXQgY2FuIHN0aWxsIGJlIGNhbGxlZCBpZiBhIHJlY2lwZQorICAgICAgICAgICAgICAgIGluaGVyaXRpbmcgdGhlIGNsYXNzIG5lZWRzIHRvIGRlZmluZSBpdHMgb3duIHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVuZGVyc3RhbmQgdGhlIGJlbmVmaXRzIG9mIHRoaXMgZmVhdHVyZSwgY29uc2lkZXIKKyAgICAgICAgICAgICAgICB0aGUgYmFzaWMgc2NlbmFyaW8gd2hlcmUgYSBjbGFzcyBkZWZpbmVzIGEgdGFzayBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFuZCB5b3VyIHJlY2lwZSBpbmhlcml0cyB0aGUgY2xhc3MuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBiYXNpYyBzY2VuYXJpbywgeW91ciByZWNpcGUgaW5oZXJpdHMgdGhlIHRhc2sKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBjbGFzcy4KKyAgICAgICAgICAgICAgICBJZiBkZXNpcmVkLCB5b3VyIHJlY2lwZSBjYW4gYWRkIHRvIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5IHVzaW5nIHRoZSAiX3ByZXBlbmQiIG9yICJfYXBwZW5kIiBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgcmVzcGVjdGl2ZWx5LCBvciBpdCBjYW4gcmVkZWZpbmUgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlbHkuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgaXQgcmVkZWZpbmVzIHRoZSBmdW5jdGlvbiwgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICBubyBtZWFucyAgZm9yIGl0IHRvIGNhbGwgdGhlIGNsYXNzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFBPUlRfRlVOQ1RJT05TPC9maWxlbmFtZT4gcHJvdmlkZXMgYSBtZWNoYW5pc20KKyAgICAgICAgICAgICAgICB0aGF0IGVuYWJsZXMgdGhlIHJlY2lwZSdzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIG1ha2UgdXNlIG9mIHRoaXMgdGVjaG5pcXVlLCB5b3UgbmVlZCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgdGhpbmdzIGluIHBsYWNlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBuZWVkcyB0byBkZWZpbmUgdGhlIGZ1bmN0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5jbGFzc25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT5fPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZnVuY3Rpb25uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGNsYXNzIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXIuYmJjbGFzczwvZmlsZW5hbWU+IGFuZCBhIGZ1bmN0aW9uIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4sIHRoZSBjbGFzcyBtdXN0IGRlZmluZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJhcl9kb19mb28KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgbmVlZHMgdG8gY29udGFpbiB0aGUgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYUE9SVF9GVU5DVElPTlMgPHJlcGxhY2VhYmxlPmZ1bmN0aW9ubmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29udGludWluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHRoZSA8ZmlsZW5hbWU+YmFyLmJiY2xhc3M8L2ZpbGVuYW1lPiB3b3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhQT1JUX0ZVTkNUSU9OUyBkb19mb28KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjYWxsIHRoZSBmdW5jdGlvbiBhcHByb3ByaWF0ZWx5IGZyb20gd2l0aGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgc2FtZSBleGFtcGxlLCBpZiB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gY2FsbCB0aGUgY2xhc3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgY2FsbCA8ZmlsZW5hbWU+YmFyX2RvX2ZvbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgPGZpbGVuYW1lPmRvX2ZvbzwvZmlsZW5hbWU+IHdhcyBhIHNoZWxsIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPiB3YXMgdXNlZCBhcyBhYm92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUncyBmdW5jdGlvbiBjb3VsZCBjb25kaXRpb25hbGx5IGNhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19mb28oKSB7CisgICAgICAgICAgICAgaWYgWyBzb21lY29uZGl0aW9uIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBiYXJfZG9fZm9vCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIyBEbyBzb21ldGhpbmcgZWxzZQorICAgICAgICAgICAgIGZpCisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNhbGwgeW91ciBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhcyBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZSwgY2FsbCBpdCBhcyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBXaXRoIHRoZXNlIGNvbmRpdGlvbnMgbWV0LCB5b3VyIHNpbmdsZSByZWNpcGUKKyAgICAgICAgICAgICAgICBjYW4gZnJlZWx5IGNob29zZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGZpbGUgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCB1cCB0aGVzZSBjb25kaXRpb25zLCB5b3UgYXJlIGxpbWl0ZWQgdG8gdXNpbmcgb25lIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgb3IgdGhlIG90aGVyLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Rhc2tzJz4KKyAgICAgICAgPHRpdGxlPlRhc2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRhc2tzIGFyZSBCaXRCYWtlIGV4ZWN1dGlvbiB1bml0cyB0aGF0IG9yaWdpbmF0ZSBhcworICAgICAgICAgICAgZnVuY3Rpb25zIGFuZCBtYWtlIHVwIHRoZSBzdGVwcyB0aGF0IEJpdEJha2UgbmVlZHMgdG8gcnVuCisgICAgICAgICAgICBmb3IgZ2l2ZW4gcmVjaXBlLgorICAgICAgICAgICAgVGFza3MgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBvciA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBhbmQgY2xhc3MKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgZmlsZXMuCisgICAgICAgICAgICBCeSBjb252ZW50aW9uLCB0YXNrIG5hbWVzIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiZG9fIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgdGFzayB0aGF0IHByaW50cyBvdXQgdGhlIGRhdGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiBkb19wcmludGRhdGUgKCkgeworICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgIHByaW50IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsIHRpbWUuZ210aW1lKCkpCisgICAgIH0KKyAgICAgYWRkdGFzayBwcmludGRhdGUgYWZ0ZXIgZG9fZmV0Y2ggYmVmb3JlIGRvX2J1aWxkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJvbW90aW5nLWEtZnVuY3Rpb24tdG8tYS10YXNrJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm9tb3RpbmcgYSBGdW5jdGlvbiB0byBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbnkgZnVuY3Rpb24gY2FuIGJlIHByb21vdGVkIHRvIGEgdGFzayBieSBhcHBseWluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZCBhbHNvIGRlc2NyaWJlcworICAgICAgICAgICAgICAgIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHNlY3Rpb24gYnV0IHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIHByb21vdGluZyBpdCB0byBhIHRhc2sKKyAgICAgICAgICAgICAgICBhbmQgZGVmaW5pbmcgc29tZSBkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gZG9fcHJpbnRkYXRlICgpIHsKKyAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICBwcmludCB0aW1lLnN0cmZ0aW1lKCclWSVtJWQnLCB0aW1lLmdtdGltZSgpKQorICAgICB9CisgICAgIGFkZHRhc2sgcHJpbnRkYXRlIGFmdGVyIGRvX2ZldGNoIGJlZm9yZSBkb19idWlsZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHRoZW4gcHJvbW90ZWQKKyAgICAgICAgICAgICAgICBhcyBhIHRhc2suCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIGJlY29tZXMgYSBkZXBlbmRlbmN5IG9mCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2ssIHdoaWNoIGlzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBBbmQsIHRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBpcyBkZXBlbmRlbnQgdXBvbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBvZiB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzayByZXN1bHRzCisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIHJ1bm5pbmcgZmlyc3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGVsZXRpbmctYS10YXNrJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZWxldGluZyBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB3ZWxsIGFzIGJlaW5nIGFibGUgdG8gYWRkIHRhc2tzLCB5b3UgY2FuIGRlbGV0ZSB0aGVtLgorICAgICAgICAgICAgICAgIFNpbXBseSB1c2UgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlbGV0ZSBhIHRhc2suCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGRlbGV0ZSB0aGUgZXhhbXBsZSB0YXNrIHVzZWQgaW4gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgc2VjdGlvbnMsIHlvdSB3b3VsZCB1c2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWx0YXNrIHByaW50ZGF0ZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZGVsZXRlIGEgdGFzayB1c2luZyB0aGUgPGZpbGVuYW1lPmRlbHRhc2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgYW5kIHRoZSB0YXNrIGhhcyBkZXBlbmRlbmNpZXMsIHRoZSBkZXBlbmRlbmNpZXMgYXJlCisgICAgICAgICAgICAgICAgbm90IHJlY29ubmVjdGVkLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIHRocmVlIHRhc2tzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBpcyBkZXBlbmRlbnQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYjwvZmlsZW5hbWU+LCB3aGljaCBpbiB0dXJuIGlzIGRlcGVuZGVudCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgR2l2ZW4gdGhpcyBzY2VuYXJpbywgaWYgeW91IHVzZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gZGVsZXRlIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4sIHRoZSBpbXBsaWNpdCBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwIGJldHdlZW4gPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+IHRocm91Z2ggPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG5vIGxvbmdlciBleGlzdHMsIGFuZCA8ZmlsZW5hbWU+ZG9fYzwvZmlsZW5hbWU+IGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGFyZSBub3QgdXBkYXRlZCB0byBpbmNsdWRlIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGh1cywgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBpcyBmcmVlIHRvIHJ1biBiZWZvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBkZXBlbmRlbmNpZXMgc3VjaCBhcyB0aGVzZSB0byByZW1haW4gaW50YWN0LCB1c2UKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm5vZXhlYzwvZmlsZW5hbWU+IHZhcmZsYWcgdG8gZGlzYWJsZSB0aGUgdGFzaworICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2Jbbm9leGVjXSA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYXNzaW5nLWluZm9ybWF0aW9uLWludG8tdGhlLWJ1aWxkLXRhc2stZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhc3NpbmcgSW5mb3JtYXRpb24gSW50byB0aGUgQnVpbGQgVGFzayBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyBhIHRhc2ssIEJpdEJha2UgdGlnaHRseSBjb250cm9scyB0aGUgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgb2YgdGhlIGJ1aWxkIHRhc2tzIHRvIG1ha2UKKyAgICAgICAgICAgICAgICBzdXJlIHVud2FudGVkIGNvbnRhbWluYXRpb24gZnJvbSB0aGUgYnVpbGQgbWFjaGluZSBjYW5ub3QKKyAgICAgICAgICAgICAgICBpbmZsdWVuY2UgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGRvIHdhbnQgc29tZXRoaW5nIHRvIGdldCBwYXNzZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCB0YXNrIGVudmlyb25tZW50LCB5b3UgbXVzdCB0YWtlIHRoZXNlIHR3byBzdGVwczoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGwgQml0QmFrZSB0byBsb2FkIHdoYXQgeW91IHdhbnQgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gc28gdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfRVhUUkFXSElURSc+PGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3N1bWUgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgYnVpbGQgc3lzdGVtIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB5b3VyIDxmaWxlbmFtZT4kSE9NRS8uY2NhY2hlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscyBCaXRCYWtlIHRvIGxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DQ0FDSEVfRElSPC9maWxlbmFtZT4gZnJvbSB0aGUgZW52aXJvbm1lbnQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGFzdG9yZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IEJCX0VOVl9FWFRSQVdISVRFPSIkQkJfRU5WX0VYVFJBV0hJVEUgQ0NBQ0hFX0RJUiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGVsbCBCaXRCYWtlIHRvIGV4cG9ydCB3aGF0IHlvdSBoYXZlIGxvYWRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlIHRvIHRoZSB0YXNrIGVudmlyb25tZW50IG9mIGV2ZXJ5IHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgc29tZXRoaW5nIGZyb20gdGhlIGVudmlyb25tZW50IGludG8gdGhlIGRhdGFzdG9yZQorICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzIHN0ZXApIG9ubHkgbWFrZXMgaXQgYXZhaWxhYmxlIGluIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgaXQgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGEgY29tbWFuZCBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgaW4geW91ciBsb2NhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IENDQUNIRV9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXZpb3VzIHN0ZXBzIGlzIHRoYXQgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHMgdGhlIHZhcmlhYmxlIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYnVpbGQgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoaW5ncyBsaWtlIHRoZSBzZXRzY2VuZSBjaGVja3N1bXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZG9pbmcgc28gcmVzdWx0cyBpbiB1bm5lY2Vzc2FyeSByZWJ1aWxkcyBvZiB0YXNrcywgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdCB0aGUgdmFyaWFibGUgc28gdGhhdCB0aGUgc2V0c2NlbmUgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZXMgdGhlIGRlcGVuZGVuY3kgd2hlbiBpdCBjcmVhdGVzIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMsIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIG9idGFpbiBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIGZyb20gdGhlIG9yaWdpbmFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBCaXRiYWtlIHNhdmVzIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQgaW50bworICAgICAgICAgICAgICAgIGEgc3BlY2lhbCB2YXJpYWJsZSBuYW1lZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9PUklHRU5WJz48ZmlsZW5hbWU+QkJfT1JJR0VOVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQl9PUklHRU5WPC9maWxlbmFtZT4gdmFyaWFibGUgcmV0dXJucyBhIGRhdGFzdG9yZQorICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IGNhbiBiZSBxdWVyaWVkIHVzaW5nIHRoZSBzdGFuZGFyZCBkYXRhc3RvcmUgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+Z2V0VmFyKCwgRmFsc2UpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGRhdGFzdG9yZSBvYmplY3QgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgdG8gZmluZCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTUExBWTwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKQorICAgICBiYXIgPSBvcmlnZW52LmdldFZhcigiQkFSIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIHJldHVybnMgPGZpbGVuYW1lPkJBUjwvZmlsZW5hbWU+IGZyb20gdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBCaXRCYWtlIGNsZWFucyB0aGUgZW52aXJvbm1lbnQgdG8gaW5jbHVkZSBvbmx5IHRob3NlCisgICAgICAgICAgICAgICAgdGhpbmdzIGV4cG9ydGVkIG9yIGxpc3RlZCBpbiBpdHMgd2hpdGVsaXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGlzIHJlcHJvZHVjaWJsZSBhbmQgY29uc2lzdGVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1mbGFncyc+CisgICAgICAgIDx0aXRsZT5WYXJpYWJsZSBGbGFnczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpIGhlbHAgY29udHJvbCBhIHRhc2sncyBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgQml0QmFrZSByZWFkcyBhbmQgd3JpdGVzIHZhcmZsYWdzIHRvIHRoZSBkYXRhc3RvcmUgdXNpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgY29tbWFuZCBmb3JtczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnZhcmlhYmxlPC9yZXBsYWNlYWJsZT4gPSBkLmdldFZhckZsYWdzKCI8cmVwbGFjZWFibGU+dmFyaWFibGU8L3JlcGxhY2VhYmxlPiIpCisgICAgIHNlbGYuZC5zZXRWYXJGbGFncygiRk9PIiwgeyJmdW5jIjogVHJ1ZX0pCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gd29ya2luZyB3aXRoIHZhcmZsYWdzLCB0aGUgc2FtZSBzeW50YXgsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICAgICAgICAgICAgb3ZlcnJpZGVzLCBhcHBsaWVzLgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gc2V0LCBhcHBlbmQsIGFuZCBwcmVwZW5kIHZhcmZsYWdzIGp1c3QgbGlrZQorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWctc3ludGF4Jz5WYXJpYWJsZSBGbGFnIFN5bnRheDwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGhhcyBhIGRlZmluZWQgc2V0IG9mIHZhcmZsYWdzIGF2YWlsYWJsZSBmb3IgcmVjaXBlcyBhbmQKKyAgICAgICAgICAgIGNsYXNzZXMuCisgICAgICAgICAgICBUYXNrcyBzdXBwb3J0IGEgbnVtYmVyIG9mIHRoZXNlIGZsYWdzIHdoaWNoIGNvbnRyb2wgdmFyaW91cworICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFzazoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jbGVhbmRpcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRW1wdHkgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgY3JlYXRlZCBiZWZvcmUgdGhlIHRhc2sgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZXBlbmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbnRlci10YXNrLWRlcGVuZGVuY2llcyc+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayBidWlsZC10aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnVpbGQtZGVwZW5kZW5jaWVzJz5CdWlsZCBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRpcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgdGhlIHRhc2sgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5sb2NrZmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBvbmUgb3IgbW9yZSBsb2NrZmlsZXMgdG8gbG9jayB3aGlsZSB0aGUgdGFzaworICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZXMuCisgICAgICAgICAgICAgICAgICAgICBPbmx5IG9uZSB0YXNrIG1heSBob2xkIGEgbG9ja2ZpbGUsIGFuZCBhbnkgdGFzayB0aGF0CisgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0cyB0byBsb2NrIGFuIGFscmVhZHkgbG9ja2VkIGZpbGUgd2lsbCBibG9jayB1bnRpbAorICAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2sgaXMgcmVsZWFzZWQuCisgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGZsYWcgdG8gYWNjb21wbGlzaCBtdXR1YWwKKyAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ub2V4ZWM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFya3MgdGhlIHRhc2tzIGFzIGJlaW5nIGVtcHR5IGFuZCBubyBleGVjdXRpb24gcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4gZmxhZyBjYW4gYmUgdXNlZCB0byBzZXQgdXAKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgYXMgZGVwZW5kZW5jeSBwbGFjZWhvbGRlcnMsIG9yIHRvIGRpc2FibGUgdGFza3MgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICBlbHNld2hlcmUgdGhhdCBhcmUgbm90IG5lZWRlZCBpbiBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5vc3RhbXA6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGVsbHMgQml0QmFrZSB0byBub3QgZ2VuZXJhdGUgYSBzdGFtcCBmaWxlIGZvciBhIHRhc2ssCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGltcGxpZXMgdGhlIHRhc2sgc2hvdWxkIGFsd2F5cyBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wb3N0ZnVuY3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wcmVmdW5jczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUgdGFzayBleGVjdXRlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZGVwZW5kczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyBpbnRlci10YXNrIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ludGVyLXRhc2stZGVwZW5kZW5jaWVzJz5JbnRlci1UYXNrIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdydW50aW1lLWRlcGVuZGVuY2llcyc+UnVudGltZSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJlY2lkZXB0YXNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY3JkZXB0YXNrPC9maWxlbmFtZT4sIHNwZWNpZmllcyBhIHRhc2sgdGhhdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaW5zcGVjdGVkIGZvciBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNyZGVwdGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB0YXNrIHJlY3Vyc2l2ZSBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWN1cnNpdmUtZGVwZW5kZW5jaWVzJz5SZWN1cnNpdmUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zdGFtcC1leHRyYS1pbmZvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEV4dHJhIHN0YW1wIGluZm9ybWF0aW9uIHRvIGFwcGVuZCB0byB0aGUgdGFzaydzIHN0YW1wLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBPcGVuRW1iZWRkZWQgdXNlcyB0aGlzIGZsYWcgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51bWFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgdW1hc2sgdG8gcnVuIHRoZSB0YXNrIHVuZGVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXZlcmFsIHZhcmZsYWdzIGFyZSB1c2VmdWwgZm9yIGNvbnRyb2xsaW5nIGhvdyBzaWduYXR1cmVzIGFyZQorICAgICAgICAgICAgY2FsY3VsYXRlZCBmb3IgdmFyaWFibGVzLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9jZXNzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBhZGQgdG8gYSB2YXJpYWJsZSdzIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIGl0cyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB2YXJpYWJsZXMgdG8gdGhpcyBsaXN0IGlzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYSBmdW5jdGlvbiByZWZlcnMgdG8gYSB2YXJpYWJsZSBpbiBhIG1hbm5lciB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFsbG93IEJpdEJha2UgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdmFyaWFibGUgaXMgcmVmZXJyZWQgdG8uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwc2V4Y2x1ZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gYSB2YXJpYWJsZSdzIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIGl0cyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwdmFsdWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0LCBpbnN0cnVjdHMgQml0QmFrZSB0byBpZ25vcmUgdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYW5kIGluc3RlYWQgdXNlIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmFyaWFibGUncyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwdmFsdWVleGNsdWRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHBpcGUtc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyB0byBleGNsdWRlCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXZlbnRzJz4KKyAgICAgICAgPHRpdGxlPkV2ZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBpbnN0YWxsYXRpb24gb2YgZXZlbnQgaGFuZGxlcnMgd2l0aGluCisgICAgICAgICAgICByZWNpcGUgYW5kIGNsYXNzIGZpbGVzLgorICAgICAgICAgICAgRXZlbnRzIGFyZSB0cmlnZ2VyZWQgYXQgY2VydGFpbiBwb2ludHMgZHVyaW5nIG9wZXJhdGlvbiwKKyAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGJlZ2lubmluZyBvZiBhbiBvcGVyYXRpb24gYWdhaW5zdCBhIGdpdmVuIHJlY2lwZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmJiPC9maWxlbmFtZT4gZmlsZSksIHRoZSBzdGFydCBvZiBhIGdpdmVuIHRhc2ssCisgICAgICAgICAgICB0YXNrIGZhaWx1cmUsIHRhc2sgc3VjY2VzcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgVGhlIGludGVudCBpcyB0byBtYWtlIGl0IGVhc3kgdG8gZG8gdGhpbmdzIGxpa2UgZW1haWwKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbiBvbiBidWlsZCBmYWlsdXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBldmVudCBoYW5kbGVyIHRoYXQKKyAgICAgICAgICAgIHByaW50cyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgYW5kIHRoZSBjb250ZW50IG9mCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkZJTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYWRkaGFuZGxlciBteWNsYXNzX2V2ZW50aGFuZGxlcgorICAgICBweXRob24gbXljbGFzc19ldmVudGhhbmRsZXIoKSB7CisgICAgICAgICBmcm9tIGJiLmV2ZW50IGltcG9ydCBnZXROYW1lCisgICAgICAgICBmcm9tIGJiIGltcG9ydCBkYXRhCisgICAgICAgICBwcmludCgiVGhlIG5hbWUgb2YgdGhlIEV2ZW50IGlzICVzIiAlIGdldE5hbWUoZSkpCisgICAgICAgICBwcmludCgiVGhlIGZpbGUgd2UgcnVuIGZvciBpcyAlcyIgJSBkYXRhLmdldFZhcignRklMRScsIGUuZGF0YSwgVHJ1ZSkpCisgICAgIH0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXZlbnQgaGFuZGxlciBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIGFuIGV2ZW50IGlzCisgICAgICAgICAgICB0cmlnZ2VyZWQuCisgICAgICAgICAgICBBIGdsb2JhbCB2YXJpYWJsZSAiPGZpbGVuYW1lPmU8L2ZpbGVuYW1lPiIgaXMgZGVmaW5lZCBhbmQKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+ZS5kYXRhPC9maWxlbmFtZT4iIGNvbnRhaW5zIGFuIGluc3RhbmNlIG9mCisgICAgICAgICAgICAiPGZpbGVuYW1lPmJiLmRhdGE8L2ZpbGVuYW1lPiIuCisgICAgICAgICAgICBXaXRoIHRoZSA8ZmlsZW5hbWU+Z2V0TmFtZShlKTwvZmlsZW5hbWU+IG1ldGhvZCwgb25lIGNhbiBnZXQKKyAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSB0cmlnZ2VyZWQgZXZlbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgeW91IHByb2JhYmx5IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzdWJzZXQgb2YgZXZlbnRzLAorICAgICAgICAgICAgeW91IHdvdWxkIGxpa2VseSB1c2UgdGhlIDxmaWxlbmFtZT5bZXZlbnRtYXNrXTwvZmlsZW5hbWU+IGZsYWcKKyAgICAgICAgICAgIGZvciB5b3VyIGV2ZW50IGhhbmRsZXIgdG8gYmUgc3VyZSB0aGF0IG9ubHkgY2VydGFpbiBldmVudHMKKyAgICAgICAgICAgIHRyaWdnZXIgdGhlIGhhbmRsZXIuCisgICAgICAgICAgICBHaXZlbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgc3VwcG9zZSB5b3Ugb25seSB3YW50ZWQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ZhaWxlZDwvZmlsZW5hbWU+IGV2ZW50IHRvIHRyaWdnZXIgdGhhdAorICAgICAgICAgICAgZXZlbnQgaGFuZGxlci4KKyAgICAgICAgICAgIFVzZSB0aGUgZmxhZyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGRoYW5kbGVyIG15Y2xhc3NfZXZlbnRoYW5kbGVyCisgICAgIG15Y2xhc3NfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuYnVpbGQuVGFza0ZhaWxlZCIKKyAgICAgcHl0aG9uIG15Y2xhc3NfZXZlbnRoYW5kbGVyKCkgeworICAgICAgICAgZnJvbSBiYi5ldmVudCBpbXBvcnQgZ2V0TmFtZQorICAgICAgICAgZnJvbSBiYiBpbXBvcnQgZGF0YQorICAgICAgICAgcHJpbnQoIlRoZSBuYW1lIG9mIHRoZSBFdmVudCBpcyAlcyIgJSBnZXROYW1lKGUpKQorICAgICAgICAgcHJpbnQoIlRoZSBmaWxlIHdlIHJ1biBmb3IgaXMgJXMiICUgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBlLmRhdGEsIFRydWUpKQorICAgICB9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIER1cmluZyBhIHN0YW5kYXJkIGJ1aWxkLCB0aGUgZm9sbG93aW5nIGNvbW1vbiBldmVudHMgbWlnaHQgb2NjdXI6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvbmZpZ1BhcnNlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuUGFyc2VTdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5QYXJzZVByb2dyZXNzKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5QYXJzZUNvbXBsZXRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQnVpbGRTdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ludmFsaWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tGYWlsZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5jb29rZXIuQ29va2VyRXhpdCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIG90aGVyIGV2ZW50cyB0aGF0IG9jY3VyIGJhc2VkIG9uIHNwZWNpZmljIHJlcXVlc3RzCisgICAgICAgICAgICB0byB0aGUgc2VydmVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db3JlQmFzZUZpbGVzRm91bmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd2YXJpYW50cy1jbGFzcy1leHRlbnNpb24tbWVjaGFuaXNtJz4KKyAgICAgICAgPHRpdGxlPlZhcmlhbnRzIC0gQ2xhc3MgRXh0ZW5zaW9uIE1lY2hhbmlzbTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHR3byBmZWF0dXJlcyB0aGF0IGZhY2lsaXRhdGUgY3JlYXRpbmcKKyAgICAgICAgICAgIGZyb20gYSBzaW5nbGUgcmVjaXBlIGZpbGUgbXVsdGlwbGUgaW5jYXJuYXRpb25zIG9mIHRoYXQKKyAgICAgICAgICAgIHJlY2lwZSBmaWxlIHdoZXJlIGFsbCBpbmNhcm5hdGlvbnMgYXJlIGJ1aWxkYWJsZS4KKyAgICAgICAgICAgIFRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCVkVSU0lPTlMnPjxmaWxlbmFtZT5CQlZFUlNJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgbWVjaGFuaXNtIGZvciB0aGlzIGNsYXNzIGV4dGVuc2lvbiBpcyBleHRyZW1lbHkKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgVXN1YWxseSwgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBleHRlbnNpb24gY2xhc3MuCisgICAgICAgICAgICAgICAgRm9yIHNwZWNpZmljIGV4YW1wbGVzLCBzZWUgdGhlIE9FLUNvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPm11bHRpbGliPC9maWxlbmFtZT4gY2xhc3Nlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzIHVzZWQgdG8gImV4dGVuZCIgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmb3IgZWFjaCB2YXJpYW50LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIGEgc2Vjb25kIGluY2FybmF0aW9uIG9mIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBiZWluZyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2Vjb25kIGluY2FybmF0aW9uIHdpbGwgaGF2ZSB0aGUgIm5hdGl2ZSIgY2xhc3MgaW5oZXJpdGVkLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJWRVJTSU9OUzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgY29uZGl0aW9uYWwgbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgKHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSkgZm9yIGEgc2luZ2xlIHZlcnNpb24sIG9yIGFuIG9wdGlvbmFsbHkgbmFtZWQgcmFuZ2Ugb2YgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQlZFUlNJT05TID0gIjEuMCAyLjAgZ2l0IgorICAgICBTUkNfVVJJX2dpdCA9ICJnaXQ6Ly9zb21ldXJsL3NvbWVwYXRoLmdpdCIKKworICAgICBCQlZFUlNJT05TID0gIjEuMC5bMC02XToxLjAuMCsgXCAxLjAuWzctOV06MS4wLjcrIgorICAgICBTUkNfVVJJX2FwcGVuZF8xLjAuNysgPSAiZmlsZTovL3NvbWVfcGF0Y2hfd2hpY2hfdGhlX25ld192ZXJzaW9uc19uZWVkLnBhdGNoO3BhdGNoPTEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJhbmdlIGRlZmF1bHRzIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBPcGVuRW1iZWRkZWQsIHRoZSByZWNpcGUgZmlsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzEuMC4wKy5iYjwvZmlsZW5hbWU+IGNyZWF0ZXMgYSBkZWZhdWx0IG5hbWUgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPjEuMC4wKzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSByYW5nZSBuYW1lIGlzIG5vdCBvbmx5IHBsYWNlZAorICAgICAgICAgICAgICAgICAgICBpbnRvIG92ZXJyaWRlcywgYnV0IGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgZm9yIHRoZSBtZXRhZGF0YSB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgYmFzZSByZWNpcGUgdmVyc2lvbnMgZm9yIHVzZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IHNlYXJjaCBwYXRocworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBhbGxvdyBmb3IgZWZmaWNpZW50IG9wZXJhdGlvbiBnaXZlbiBtdWx0aXBsZSBwcm9jZXNzZXMKKyAgICAgICAgICAgIGV4ZWN1dGluZyBpbiBwYXJhbGxlbCwgQml0QmFrZSBoYW5kbGVzIGRlcGVuZGVuY2llcyBhdAorICAgICAgICAgICAgdGhlIHRhc2sgbGV2ZWwuCisgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIGEgcm9idXN0IG1ldGhvZCB0byBoYW5kbGUgdGhlc2UgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNldmVyYWwgdHlwZXMgb2YgZGVwZW5kZW5jeSBtZWNoYW5pc21zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlcGVuZGVuY2llcy1pbnRlcm5hbC10by10aGUtYmItZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzIEludGVybmFsIHRvIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICB0byBtYW5hZ2UgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGludGVybmFsIHRvIGEgZ2l2ZW4gcmVjaXBlCisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgdG8KKyAgICAgICAgICAgICAgICBpbmRpY2F0ZSB3aGVuIGEgdGFzayBpcyBkZXBlbmRlbnQgb24gb3RoZXIgdGFza3Mgb3Igd2hlbgorICAgICAgICAgICAgICAgIG90aGVyIHRhc2tzIGRlcGVuZCBvbiB0aGF0IHJlY2lwZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPnByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBjb21wbGV0aW9uIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgQW5kLCB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gZGVwZW5kcyBvbiB0aGUgY29tcGxldGlvbgorICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+cHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBtYW5hZ2UgYnVpbGQgdGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgVGhlICJkZXB0YXNrIiB2YXJmbGFnIGZvciB0YXNrcyBzaWduaWZpZXMgdGhlIHRhc2sgb2YgZWFjaAorICAgICAgICAgICAgICAgIGl0ZW0gbGlzdGVkIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gdGhhdCBtdXN0CisgICAgICAgICAgICAgICAgY29tcGxldGUgYmVmb3JlIHRoYXQgdGFzayBjYW4gYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fY29uZmlndXJlW2RlcHRhc2tdID0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIGVhY2ggaXRlbSBpbiA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IG11c3QgY29tcGxldGUgYmVmb3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IGNhbiBleGVjdXRlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SdW50aW1lIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gbWFuYWdlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgbGlzdHMgcnVudGltZQorICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhvc2UgcGFja2FnZXMgY2FuIGhhdmUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgVGhlICJyZGVwdGFzayIgZmxhZyBmb3IgdGFza3MgaXMgdXNlZCB0byBzaWduaWZ5IHRoZSB0YXNrIG9mIGVhY2gKKyAgICAgICAgICAgICAgICBpdGVtIHJ1bnRpbWUgZGVwZW5kZW5jeSB3aGljaCBtdXN0IGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGF0CisgICAgICAgICAgICAgICAgdGFzayBjYW4gYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYWNrYWdlX3FhW3JkZXB0YXNrXSA9ICJkb19wYWNrYWdlZGF0YSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgb2YgZWFjaCBpdGVtIGluIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IG11c3QgaGF2ZQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCBiZWZvcmUgPGZpbGVuYW1lPmRvX3BhY2thZ2VfcWE8L2ZpbGVuYW1lPiBjYW4gZXhlY3V0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWN1cnNpdmUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWN1cnNpdmUgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSAicmVjcmRlcHRhc2siIGZsYWcgdG8gbWFuYWdlCisgICAgICAgICAgICAgICAgcmVjdXJzaXZlIHRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIEJpdEJha2UgbG9va3MgdGhyb3VnaCB0aGUgYnVpbGQtdGltZSBhbmQgcnVudGltZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiB0aGUgY3VycmVudCByZWNpcGUsIGxvb2tzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgdGFzaydzIGludGVyLXRhc2sKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGFkZHMgZGVwZW5kZW5jaWVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICBsaXN0ZWQgdGFzay4KKyAgICAgICAgICAgICAgICBPbmNlIEJpdEJha2UgaGFzIGFjY29tcGxpc2hlZCB0aGlzLCBpdCByZWN1cnNpdmVseSB3b3JrcyB0aHJvdWdoCisgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY2llcyBvZiB0aG9zZSB0YXNrcy4KKyAgICAgICAgICAgICAgICBJdGVyYXRpdmUgcGFzc2VzIGNvbnRpbnVlIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGRpc2NvdmVyZWQKKyAgICAgICAgICAgICAgICBhbmQgYWRkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIG5vdCBvbmx5IGhhdmUgQml0QmFrZSBsb29rIGZvcgorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiB0aG9zZSB0YXNrcywgYnV0IGFsc28gaGF2ZSBCaXRCYWtlIGxvb2sKKyAgICAgICAgICAgICAgICBmb3IgYnVpbGQtdGltZSBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcGVuZGVudAorICAgICAgICAgICAgICAgIHRhc2tzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgeW91IG5lZWQgdG8gcmVmZXJlbmNlIHRoZSB0YXNrIG5hbWUKKyAgICAgICAgICAgICAgICBpdHNlbGYgaW4gdGhlIHRhc2sgbGlzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2FbcmVjcmRlcHRhc2tdID0gImRvX2EgZG9fYiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW50ZXItdGFzay1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPkludGVyLVRhc2sgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSAiZGVwZW5kcyIgZmxhZyBpbiBhIG1vcmUgZ2VuZXJpYyBmb3JtCisgICAgICAgICAgICAgICAgdG8gbWFuYWdlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFRoaXMgbW9yZSBnZW5lcmljIGZvcm0gYWxsb3dzIGZvciBpbnRlci1kZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgY2hlY2tzIGZvciBzcGVjaWZpYyB0YXNrcyByYXRoZXIgdGhhbiBjaGVja3MgZm9yCisgICAgICAgICAgICAgICAgdGhlIGRhdGEgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYXRjaFtkZXBlbmRzXSA9ICJxdWlsdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgb2YgdGhlIHRhcmdldCA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBtdXN0IGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiB0YXNrIGNhbiBleGVjdXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgInJkZXBlbmRzIiBmbGFnIHdvcmtzIGluIGEgc2ltaWxhciB3YXkgYnV0IHRha2VzIHRhcmdldHMKKyAgICAgICAgICAgICAgICBpbiB0aGUgcnVudGltZSBuYW1lc3BhY2UgaW5zdGVhZCBvZiB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgbmFtZXNwYWNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2FjY2Vzc2luZy1kYXRhc3RvcmUtdmFyaWFibGVzLXVzaW5nLXB5dGhvbic+CisgICAgICAgIDx0aXRsZT5BY2Nlc3NpbmcgRGF0YXN0b3JlIFZhcmlhYmxlcyBVc2luZyBQeXRob248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGFjY2VzcyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICBCaXRCYWtlIGRhdGFzdG9yZSB1c2luZyBQeXRob24gZnVuY3Rpb25zLgorICAgICAgICAgICAgVGhlIEJpdGJha2UgZGF0YXN0b3JlIGhhcyBhbiBBUEkgdGhhdCBhbGxvd3MgeW91IHRoaXMKKyAgICAgICAgICAgIGFjY2Vzcy4KKyAgICAgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIGF2YWlsYWJsZSBvcGVyYXRpb25zOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0nbm9uZSc+CisgICAgICAgICAgICAgICAgPHRncm91cCBjb2xzPScyJyBhbGlnbj0nbGVmdCcgY29sc2VwPScxJyByb3dzZXA9JzEnPgorICAgICAgICAgICAgICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSdjMScgY29sd2lkdGg9JzEqJy8+CisgICAgICAgICAgICAgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9J2MyJyBjb2x3aWR0aD0nMSonLz4KKyAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxlbXBoYXNpcz5PcGVyYXRpb248L2VtcGhhc2lzPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+RGVzY3JpcHRpb248L2VtcGhhc2lzPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhcigiWCIsIGV4cGFuZD1GYWxzZSk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSAiWCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nICJleHBhbmQ9VHJ1ZSIgZXhwYW5kcyB0aGUgdmFsdWUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2V0cyB0aGUgdmFyaWFibGUgIlgiIHRvICJ2YWx1ZSIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmFwcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucHJlcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBzdGFydCBvZiB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXIoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgdGhlIHZhcmlhYmxlICJYIiBmcm9tIHRoZSBkYXRhc3RvcmUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnJlbmFtZVZhcigiWCIsICJZIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZW5hbWVzIHRoZSB2YXJpYWJsZSAiWCIgdG8gIlkiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFnKCJYIiwgZmxhZywgZXhwYW5kPUZhbHNlKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkdldHMgdGhlbiBuYW1lZCBmbGFnIGZyb20gdGhlIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgImV4cGFuZD1UcnVlIiBleHBhbmRzIHRoZSBuYW1lZCBmbGFnLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBuYW1lZCBmbGFnIGZvciB2YXJpYWJsZSAiWCIgdG8gInZhbHVlIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuYXBwZW5kVmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QXBwZW5kcyAidmFsdWUiIHRvIHRoZSBuYW1lZCBmbGFnIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucHJlcGVuZFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlByZXBlbmRzICJ2YWx1ZSIgdG8gdGhlIG5hbWVkIGZsYWcgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXJGbGFnKCJYIiwgZmxhZyk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIHRoZSBuYW1lZCBmbGFnIG9uIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWCIgZnJvbSB0aGUgZGF0YXN0b3JlLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXJGbGFncygiWCIsIGZsYWdzZGljdCk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBmbGFncyBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5mbGFnc2RpY3QoKTwvZmlsZW5hbWU+IHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldFZhckZsYWdzPC9maWxlbmFtZT4gZG9lcyBub3QgY2xlYXIgcHJldmlvdXMgZmxhZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaW5rIG9mIHRoaXMgb3BlcmF0aW9uIGFzIDxmaWxlbmFtZT5hZGRWYXJGbGFnczwvZmlsZW5hbWU+LjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFncygiWCIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UmV0dXJucyBhIDxmaWxlbmFtZT5mbGFnc2RpY3Q8L2ZpbGVuYW1lPiBvZiB0aGUgZmxhZ3MgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhckZsYWdzKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIGFsbCB0aGUgZmxhZ3MgZm9yIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+CisgICAgICAgIDx0aXRsZT5UYXNrIENoZWNrc3VtcyBhbmQgU2V0c2NlbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIGNoZWNrc3VtcyAob3Igc2lnbmF0dXJlcykgYWxvbmcgd2l0aCB0aGUgc2V0c2NlbmUKKyAgICAgICAgICAgIHRvIGRldGVybWluZSBpZiBhIHRhc2sgbmVlZHMgdG8gYmUgcnVuLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgIFRvIGhlbHAgdW5kZXJzdGFuZCBob3cgQml0QmFrZSBkb2VzIHRoaXMsIHRoZSBzZWN0aW9uIGFzc3VtZXMgYW4KKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBtZXRhZGF0YS1iYXNlZCBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGxpc3QgaXMgYSBwbGFjZSBob2xkZXIgb2YgY29udGVudCBleGlzdGVkIGZyb20gcHJldmlvdXMgd29yaworICAgICAgICAgICAgb24gdGhlIG1hbnVhbC4KKyAgICAgICAgICAgIFNvbWUgb3IgYWxsIG9mIGl0IHByb2JhYmx5IG5lZWRzIGludGVncmF0ZWQgaW50byB0aGUgc3Vic2VjdGlvbnMKKyAgICAgICAgICAgIHRoYXQgbWFrZSB1cCB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBGb3Igbm93LCBJIGhhdmUganVzdCBwcm92aWRlZCBhIHNob3J0IGdsb3NzYXJ5LWxpa2UgZGVzY3JpcHRpb24KKyAgICAgICAgICAgIGZvciBlYWNoIHZhcmlhYmxlLgorICAgICAgICAgICAgVWx0aW1hdGVseSwgdGhpcyBsaXN0IGdvZXMgYXdheS4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBwYXRoIHRvIGNyZWF0ZSBzdGFtcCBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlNUQU1QQ0xFQU48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgdGhlIGJhc2UgcGF0aCB0byBjcmVhdGUgc3RhbXAgZmlsZXMgYnV0IGNhbiB1c2Ugd2lsZGNhcmRzCisgICAgICAgICAgICAgICAgICAgIGZvciBtYXRjaGluZyBhIHJhbmdlIG9mIGZpbGVzIGZvciBjbGVhbiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NUQU1QX1dISVRFTElTVDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHN0YW1wIGZpbGVzIHRoYXQgYXJlIGxvb2tlZCBhdCB3aGVuIHRoZSBzdGFtcCBwb2xpY3kKKyAgICAgICAgICAgICAgICAgICAgaXMgIndoaXRlbGlzdCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfU1RBTVBfUE9MSUNZPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbW9kZSBmb3IgY29tcGFyaW5nIHRpbWVzdGFtcHMgb2Ygc3RhbXAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGR1cmluZworICAgICAgICAgICAgICAgICAgICB0aGUgInNldHNjZW5lIiBwYXJ0IG9mIHRoZSB0YXNrJ3MgZXhlY3V0aW9uIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHRvIHZhbGlkYXRlIHRoZSBsaXN0IG9mIHRhc2sgaGFzaGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGNhbGwgdGhhdCB2ZXJpZmllcyB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwbGFubmVkIHRhc2sgZXhlY3V0aW9uIGJlZm9yZSB0aGUgbWFpbiB0YXNrIGV4ZWN1dGlvbgorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gQml0QmFrZSBjYWxscyB0aGF0IGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgd2hldGhlciBCaXRCYWtlIHJlcXVpcmVzIGEgc2V0c2NlbmUgZGVwZW5kZW5jeSB0bworICAgICAgICAgICAgICAgICAgICBiZSBtZXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfVEFTS0hBU0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gYW4gZXhlY3V0aW5nIHRhc2ssIHRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGhhc2gKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhc2sgYXMgcmV0dXJuZWQgYnkgdGhlIGN1cnJlbnRseSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTFiOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbApAQCAtMCwwICsxLDIyNjIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzwhLS0gRHVtbXkgY2hhcHRlciAtLT4KKzxjaGFwdGVyIGlkPSdyZWYtdmFyaWFibGVzLWdsb3MnPgorCis8dGl0bGU+VmFyaWFibGVzIEdsb3NzYXJ5PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGxpc3RzIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBieSBCaXRCYWtlIGFuZCBnaXZlcyBhbiBvdmVydmlldworICAgIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBjb250ZW50cy4KKzwvcGFyYT4KKworPG5vdGU+CisgICAgRm9sbG93aW5nIGFyZSBzb21lIHBvaW50cyByZWdhcmRpbmcgdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeToKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeQorICAgICAgICAgICAgYXJlIHNwZWNpZmljIHRvIEJpdEJha2UuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBkZXNjcmlwdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhhdCBjb250ZXh0LgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbHNvLCB2YXJpYWJsZXMgZXhpc3QgaW4gb3RoZXIgc3lzdGVtcyB0aGF0IHVzZSBCaXRCYWtlCisgICAgICAgICAgICAoZS5nLiBUaGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkKSB0aGF0IGhhdmUgbmFtZXMgaWRlbnRpY2FsCisgICAgICAgICAgICB0byB0aG9zZSBmb3VuZCBpbiB0aGlzIGdsb3NzYXJ5LgorICAgICAgICAgICAgRm9yIHN1Y2ggY2FzZXMsIHRoZSB2YXJpYWJsZXMgaW4gdGhvc2Ugc3lzdGVtcyBleHRlbmQgdGhlCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2YXJpYWJsZSBhcyBpdCBpcyBkZXNjcmliZWQgaGVyZSBpbgorICAgICAgICAgICAgdGhpcyBnbG9zc2FyeS4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluYWxseSwgdGhlcmUgYXJlIHZhcmlhYmxlcyBtZW50aW9uZWQgaW4gdGhpcworICAgICAgICAgICAgZ2xvc3NhcnkgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZSBCaXRCYWtlIGdsb3NzYXJ5LgorICAgICAgICAgICAgVGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB2YXJpYWJsZXMgdXNlZCBpbiBzeXN0ZW1zIHRoYXQgdXNlCisgICAgICAgICAgICBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L25vdGU+CisKKzxnbG9zc2FyeSBpZD0ncmVmLXZhcmlhYmxlcy1nbG9zc2FyeSc+CisKKyAgICA8cGFyYT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVNTVU1FX1BST1ZJREVEJz5BPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz5CPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DQUNIRSc+QzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz5EPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWENMVURFX0ZST01fV09STEQnPkU8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZBS0VST09UJz5GPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HSVRESVInPkc8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhHRElSJz5IPC9saW5rPgorPCEtLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfRElTQUJMRUQnPkk8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1qJz5KPC9saW5rPiAtLT4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtBUkNIJz5LPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJERVBFTkRTJz5MPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz5NPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1uJz5OPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz5PPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+UDwvbGluaz4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz5RPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFQ1RJT04nPlM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVQnPlQ8L2xpbms+Cis8IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9DT05GSUcnPlU8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS12Jz5WPC9saW5rPiAtLT4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPlc8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS14Jz5YPC9saW5rPiAtLT4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3NhcnkteSc+WTwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXonPlo8L2xpbms+LS0+CisgICAgPC9wYXJhPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYSc+PHRpdGxlPkE8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVNTVU1FX1BST1ZJREVEJz48Z2xvc3N0ZXJtPkFTU1VNRV9QUk9WSURFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyByZWNpcGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcykgQml0QmFrZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBCaXRCYWtlIGFzc3VtZXMgdGhlc2UgcmVjaXBlcyBoYXZlIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gT3BlbkVtYmVkZGVkIENvcmUsIDxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtb3N0bHkgc3BlY2lmaWVzIG5hdGl2ZSB0b29scyB0aGF0IHNob3VsZCBub3QgYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBzcGVjaWZpZWQgYWxsb3dzIGZvciB0aGUgR2l0IGJpbmFyeSBmcm9tIHRoZSBob3N0IHRvCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgcmF0aGVyIHRoYW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1iJz48dGl0bGU+QjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CJz48Z2xvc3N0ZXJtPkI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBCaXRCYWtlIGV4ZWN1dGVzIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSByZWNpcGUncyBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0FMTE9XRURfTkVUV09SS1MnPjxnbG9zc3Rlcm0+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY29uc2lkZXJhdGlvbnMgc3Vycm91bmRpbmcgdGhpcyB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhvc3QgbGlzdCBpcyBvbmx5IHVzZWQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTk9fTkVUV09SSyc+PGZpbGVuYW1lPkJCX05PX05FVFdPUks8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlaXRoZXIgbm90IHNldCBvciBzZXQgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbWl0ZWQgc3VwcG9ydCBmb3Igd2lsZGNhcmQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgaG9zdCBuYW1lcyBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0dGluZyBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC5nbnUub3JnPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZ0cC5nbnUub3JnPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb28uZ2l0LmdudS5vcmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0FMTE9XRURfTkVUV09SS1MgPSAiKi5nbnUub3JnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXJyb3JzIG5vdCBpbiB0aGUgaG9zdCBsaXN0IGFyZSBza2lwcGVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlZCBpbiBkZWJ1Zy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbXB0cyB0byBhY2Nlc3MgbmV0d29ya3Mgbm90IGluIHRoZSBob3N0IGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXVzZSBhIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgICAgIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHZlcnkgdXNlZnVsLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGhvc3QgeW91IHdhbnQgdG8gdXNlIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gcmVzdWx0cyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgZmV0Y2hlZCBmcm9tIGFuIGFsbG93ZWQgbG9jYXRpb24gYW5kIGF2b2lkcyByYWlzaW5nCisgICAgICAgICAgICAgICAgICAgIGFuIGVycm9yIHdoZW4gYSBob3N0IHRoYXQgaXMgbm90IGFsbG93ZWQgaXMgaW4gYQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIGZldGNoZXIgZG9lcyBub3QgYXR0ZW1wdCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGhvc3QgbGlzdGVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYWZ0ZXIgYQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsIGZldGNoIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gb2NjdXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0NPTlNPTEVMT0cnPjxnbG9zc3Rlcm0+QkJfQ09OU09MRUxPRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gYSBsb2cgZmlsZSBpbnRvIHdoaWNoIEJpdEJha2UncyB1c2VyCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSB3cml0ZXMgb3V0cHV0IGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfQ1VSUkVOVFRBU0snPjxnbG9zc3Rlcm0+QkJfQ1VSUkVOVFRBU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIGRvZXMgbm90IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb188L2ZpbGVuYW1lPiBwcmVmaXguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZJz48Z2xvc3N0ZXJtPkJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBoYXMgbm8KKyAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gb2Z0ZW4gb2NjdXJzIHdoZW4gbGF5ZXJzIGdldCBvdXQgb2Ygc3luYworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+b2UtY29yZTwvZmlsZW5hbWU+IGJ1bXBzIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHZlcnNpb24gYW5kIHRoZSBvbGQgcmVjaXBlIG5vIGxvbmdlciBleGlzdHMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvdGhlciBsYXllciBoYXMgbm90IGJlZW4gdXBkYXRlZCB0byB0aGUgbmV3IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB5ZXQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmYXRhbCBiZWhhdmlvciBpcyBzYWZlc3QgYmVjYXVzZSBpdCBpcworICAgICAgICAgICAgICAgICAgICB0aGUgc2FuZSByZWFjdGlvbiBnaXZlbiBzb21ldGhpbmcgaXMgb3V0IG9mIHN5bmMuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHdoZW4geW91ciBjaGFuZ2VzIGFyZSBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9ERUZBVUxUX1RBU0snPjxnbG9zc3Rlcm0+QkJfREVGQVVMVF9UQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhc2sgdG8gdXNlIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPi1jPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIG5hbWUgc3BlY2lmaWVkIHNob3VsZCBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvXzwvZmlsZW5hbWU+IHByZWZpeC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxnbG9zc3Rlcm0+QkJfRElTS01PTl9ESVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNrIHNwYWNlIG1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIiZsdDthY3Rpb24mZ3Q7LCZsdDtkaXImZ3Q7LCZsdDt0aHJlc2hvbGQmZ3Q7IFsuLi5dIgorCisgICAgIHdoZXJlOgorCisgICAgICAgICZsdDthY3Rpb24mZ3Q7IGlzOgorICAgICAgICAgICBBQk9SVDogICAgIEltbWVkaWF0ZWx5IGFib3J0IHRoZSBidWlsZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBTVE9QVEFTS1M6IFN0b3AgdGhlIGJ1aWxkIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgaGF2ZSBmaW5pc2hlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBXQVJOOiAgICAgIElzc3VlIGEgd2FybmluZyBidXQgY29udGludWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgd2hlbiBhIHRocmVzaG9sZCBpcyBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGFzCisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IGJlIGRlZmluZWQuCisKKyAgICAgICAgJmx0O2RpciZndDsgaXM6CisgICAgICAgICAgIEFueSBkaXJlY3RvcnkgeW91IGNob29zZS4gWW91IGNhbiBzcGVjaWZ5IG9uZSBvcgorICAgICAgICAgICBtb3JlIGRpcmVjdG9yaWVzIHRvIG1vbml0b3IgYnkgc2VwYXJhdGluZyB0aGUKKyAgICAgICAgICAgZ3JvdXBpbmdzIHdpdGggYSBzcGFjZS4gIElmIHR3byBkaXJlY3RvcmllcyBhcmUKKyAgICAgICAgICAgb24gdGhlIHNhbWUgZGV2aWNlLCBvbmx5IHRoZSBmaXJzdCBkaXJlY3RvcnkKKyAgICAgICAgICAgaXMgbW9uaXRvcmVkLgorCisgICAgICAgICZsdDt0aHJlc2hvbGQmZ3Q7IGlzOgorICAgICAgICAgICBFaXRoZXIgdGhlIG1pbmltdW0gYXZhaWxhYmxlIGRpc2sgc3BhY2UsCisgICAgICAgICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmVlIGlub2Rlcywgb3IKKyAgICAgICAgICAgYm90aC4gIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lLiAgVG8KKyAgICAgICAgICAgb21pdCBvbmUgb3IgdGhlIG90aGVyLCBzaW1wbHkgb21pdCB0aGUgdmFsdWUuCisgICAgICAgICAgIFNwZWNpZnkgdGhlIHRocmVzaG9sZCB1c2luZyBHLCBNLCBLIGZvciBHYnl0ZXMsCisgICAgICAgICAgIE1ieXRlcywgYW5kIEtieXRlcywgcmVzcGVjdGl2ZWx5LiBJZiB5b3UgZG8KKyAgICAgICAgICAgbm90IHNwZWNpZnkgRywgTSwgb3IgSywgS2J5dGVzIGlzIGFzc3VtZWQgYnkKKyAgICAgICAgICAgZGVmYXVsdC4gIERvIG5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sMUcsMTAwSyBXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMUciCisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sLDEwMEsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGV4YW1wbGUgd29ya3Mgb25seSBpZiB5b3UgYWxzbyBzZXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+PGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgYWJvcnQgd2hlbiBlaXRoZXIgdGhlIGRpc2sgc3BhY2UgaW4gPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIGF2YWlsYWJsZSBmcmVlIGlub2RlcyBkcm9wcyBiZWxvdworICAgICAgICAgICAgICAgICAgICAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHR3byBkaXJlY3RvcmllcyBhcmUgcHJvdmlkZWQgd2l0aCB0aGUgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYWxzbyBpc3N1ZXMgYQorICAgICAgICAgICAgICAgICAgICB3YXJuaW5nIHdoZW4gdGhlIGRpc2sgc3BhY2UgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NTVEFURV9ESVJ9PC9maWxlbmFtZT4gZGlyZWN0b3J5IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIG51bWJlciBvZiBmcmVlIGlub2RlcyBkcm9wcworICAgICAgICAgICAgICAgICAgICBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHdhcm5pbmdzIGFyZSBpc3N1ZWQgZHVyaW5nIGludGVydmFscyBhcworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBleGFtcGxlIHN0b3BzIHRoZSBidWlsZCBhZnRlciBhbGwgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGluZyB0YXNrcyBjb21wbGV0ZSB3aGVuIHRoZSBtaW5pbXVtIGRpc2sgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZHJvcHMgYmVsb3cgMSBHYnl0ZS4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBtb25pdG9yaW5nIG9jY3VycyBmb3IgdGhlIGZyZWUgaW5vZGVzIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGV4YW1wbGUgaW1tZWRpYXRlbHkgYWJvcnRzIHRoZSBidWlsZCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgZnJlZSBpbm9kZXMgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgZHJvcHMgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBzcGFjZSBtb25pdG9yaW5nIGZvciB0aGUgZGlyZWN0b3J5IGl0c2VsZiBvY2N1cnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGRlZmluZSBpdHMgYWN0aW9uIGFzICJXQVJOIi4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgc3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBkaXNrIHNwYWNlIG9yIG51bWJlciBvZiBmcmVlIGlub2RlcyBmdXJ0aGVyIHJlZHVjZXMgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BlY3RpdmUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB5b3UgZG8gdXNlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSAiV0FSTiIgYWN0aW9uLCB0aGUgZGlzayBtb25pdG9yaW5nIGludGVydmFsIGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB0aGUgdmFyaWFibGUgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiJmx0O2Rpc2tfc3BhY2VfaW50ZXJ2YWwmZ3Q7LCZsdDtkaXNrX2lub2RlX2ludGVydmFsJmd0OyIKKworICAgICB3aGVyZToKKworICAgICAgICAmbHQ7ZGlza19zcGFjZV9pbnRlcnZhbCZndDsgaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIG1lbW9yeSBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKworICAgICAgICAmbHQ7ZGlza19pbm9kZV9pbnRlcnZhbCZndDsgaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIGZyZWUgaW5vZGVzIGV4cHJlc3NlZCBpbiBlaXRoZXIKKyAgICAgICAgICAgRywgTSwgb3IgSyBmb3IgR2J5dGVzLCBNYnl0ZXMsIG9yIEtieXRlcywKKyAgICAgICAgICAgcmVzcGVjdGl2ZWx5LiBZb3UgY2Fubm90IHVzZSBHQiwgTUIsIG9yIEtCLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiV0FSTiwke1NTVEFURV9ESVJ9LDFHLDEwMEsiCisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB2YXJpYWJsZXMgY2F1c2UgQml0QmFrZSB0bworICAgICAgICAgICAgICAgICAgICBpc3N1ZSBzdWJzZXF1ZW50IHdhcm5pbmdzIGVhY2ggdGltZSB0aGUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGRpc2sgc3BhY2UgZnVydGhlciByZWR1Y2VzIGJ5IDUwIE1ieXRlcyBvciB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIG9mIGZyZWUgaW5vZGVzIGZ1cnRoZXIgcmVkdWNlcyBieSA1IEtieXRlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYmFzZWQgb24gdGhlIGludGVydmFsIG9jY3VyIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBhIHJlc3BlY3RpdmUgaW50ZXJ2YWwgaXMgcmVhY2hlZCBiZXlvbmQgdGhlIGluaXRpYWwgd2FybmluZworICAgICAgICAgICAgICAgICAgICAoaS5lLiAxIEdieXRlcyBhbmQgMTAwIEtieXRlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRU5WX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9FTlZfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgaW50ZXJuYWwgd2hpdGVsaXN0IG9mIHZhcmlhYmxlcyB0byBhbGxvdworICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IGludG8gQml0QmFrZSdzCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGUgZm9sbG93aW5nIGxpc3QgaXMgdXNlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1BSRVNFUlZFX0VOVic+PGZpbGVuYW1lPkJCX1BSRVNFUlZFX0VOVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48ZmlsZW5hbWU+QkJfRU5WX0VYVFJBV0hJVEU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48Z2xvc3N0ZXJtPkJCX0VOVl9FWFRSQVdISVRFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhbiBhZGRpdGlvbmFsIHNldCBvZiB2YXJpYWJsZXMgdG8gYWxsb3cgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAod2hpdGVsaXN0KSBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncworICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBvZiB2YXJpYWJsZXMgYXJlIG9uIHRvcCBvZiB0aGUgaW50ZXJuYWwgbGlzdAorICAgICAgICAgICAgICAgICAgICBzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9GRVRDSF9QUkVNSVJST1JPTkxZJz48Z2xvc3N0ZXJtPkJCX0ZFVENIX1BSRU1JUlJPUk9OTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gIjEiLCBjYXVzZXMgQml0QmFrZSdzIGZldGNoZXIgbW9kdWxlIHRvIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2lsbCBub3Qgc2VhcmNoIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRklMRU5BTUUnPjxnbG9zc3Rlcm0+QkJfRklMRU5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIGZpbGVuYW1lIG9mIHRoZSByZWNpcGUgdGhhdCBvd25zIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+IHRhc2sgdGhhdAorICAgICAgICAgICAgICAgICAgICByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bXktcmVjaXBlLmJiPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nLCB0aGUgPGZpbGVuYW1lPkJCX0ZJTEVOQU1FPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgIi9mb28vcGF0aC9teS1yZWNpcGUuYmIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGdsb3NzdGVybT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzLCBpbmNsdWRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIEdpdCBtZXRhZGF0YSwgdG8gYmUgcGxhY2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQW55b25lIHdpc2hpbmcgdG8gY3JlYXRlIGEgc291cmNlIG1pcnJvciB3b3VsZCB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgIGVuYWJsZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgY3JlYXRpbmcgYW5kIHBsYWNpbmcgdGFyYmFsbHMgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCByZXBvc2l0b3JpZXMgaXMgbm90IHRoZSBkZWZhdWx0IGFjdGlvbiBieSBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSEFTSENPTkZJR19XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfSEFTSENPTkZJR19XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdmFyaWFibGVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gYmFzZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtLCB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHJldXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25lIG9mIHRoZSB3YXlzIEJpdEJha2UgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlLXBhcnNlIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWluIG1ldGFkYXRhIGlzIHRocm91Z2ggY2hlY2tzdW1zIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgICAgICAgICAgICAgIFRoZXJlIGFyZSB2YXJpYWJsZXMgdGhhdCB5b3UgdHlwaWNhbGx5IHdhbnQgdG8gZXhjbHVkZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIHJlLXBhcnNlIGFuZCB0aHVzIHJlYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgIGNhY2hlLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB5b3Ugd291bGQgdXN1YWxseSBleGNsdWRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5USU1FPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5EQVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGVzZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyBjaGFuZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBub3QgZXhjbHVkZSB0aGVtLCBCaXRCYWtlIHdvdWxkIG5ldmVyIHJldXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWNoZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9IQVNIQkFTRV9XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfSEFTSEJBU0VfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIGNoZWNrc3VtIGFuZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IGRhdGEuCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBjYW4gdGhlcmVmb3JlIGNoYW5nZSB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgIGFmZmVjdGluZyB0aGUgY2hlY2tzdW0gbWVjaGFuaXNtLgorICAgICAgICAgICAgICAgICAgICBBIGNvbW1vbiBleGFtcGxlIHdvdWxkIGJlIHRoZSB2YXJpYWJsZSBmb3IgdGhlIHBhdGggb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlJ3Mgb3V0cHV0IHNob3VsZCBub3QgKGFuZCB1c3VhbGx5IGRvZXMgbm90KSBkZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCB3YXMgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48Z2xvc3N0ZXJtPkJCX0hBU0hDSEVDS19GVU5DVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAic2V0c2NlbmUiIHBhcnQgb2YgdGhlIHRhc2sncyBleGVjdXRpb24gaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGUgdGhlIGxpc3Qgb2YgdGFzayBoYXNoZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHNldHNjZW5lIHRhc2tzIHRoYXQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IGluIHRoZSBleGVjdXRpb24gb2YgdGhlIGNvZGUsIHRoZSBvYmplY3RpdmUKKyAgICAgICAgICAgICAgICAgICAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYSBnaXZlbiBzZXRzY2VuZSBmdW5jdGlvbiBpcyBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgdG8gd29yayBvciBub3QuCisgICAgICAgICAgICAgICAgICAgIEl0J3MgZWFzaWVyIHRvIGNoZWNrIHRoZSBsaXN0IG9mIHNldHNjZW5lIGZ1bmN0aW9ucyBpbgorICAgICAgICAgICAgICAgICAgICBvbmUgcGFzcyB0aGFuIHRvIGNhbGwgbWFueSBpbmRpdmlkdWFsIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV0dXJuZWQgbGlzdCBuZWVkIG5vdCBiZSBjb21wbGV0ZWx5IGFjY3VyYXRlLgorICAgICAgICAgICAgICAgICAgICBBIGdpdmVuIHNldHNjZW5lIHRhc2sgY2FuIHN0aWxsIGxhdGVyIGZhaWwuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBtb3JlIGFjY3VyYXRlIHRoZSBkYXRhIHJldHVybmVkLCB0aGUgbW9yZQorICAgICAgICAgICAgICAgICAgICBlZmZpY2llbnQgdGhlIGJ1aWxkIHdpbGwgYmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSU5WQUxJRENPTkYnPjxnbG9zc3Rlcm0+QkJfSU5WQUxJRENPTkY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q29uZmlnUGFyc2VkPC9maWxlbmFtZT4gZXZlbnQgdG8gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICByZS1wYXJzaW5nIHRoZSBiYXNlIG1ldGFkYXRhIChpLmUuIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Q29uZmlnUGFyc2VkPC9maWxlbmFtZT4gZXZlbnQgY2FuIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gdHJpZ2dlciB0aGUgcmUtcGFyc2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQgcmVjdXJzaXZlIGxvb3BzIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0xPR0ZNVCc+PGdsb3NzdGVybT5CQl9MT0dGTVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZXMgc2F2ZWQgaW50bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UJz48ZmlsZW5hbWU+VDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJfTE9HRk1UPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIGFuZCB0aGUgbG9nIGZpbGUgbmFtZXMgZ2V0IGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxvZy57dGFza30ue3BpZH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBmb3JjZSBsb2cgZmlsZXMgdG8gdGFrZSBhIHNwZWNpZmljIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTklDRV9MRVZFTCc+PGdsb3NzdGVybT5CQl9OSUNFX0xFVkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBCaXRCYWtlIHRvIHJ1biBhdCBhIHNwZWNpZmljIHByaW9yaXR5CisgICAgICAgICAgICAgICAgICAgIChpLmUuIG5pY2UgbGV2ZWwpLgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gcGVybWlzc2lvbnMgdXN1YWxseSBtZWFuIHRoYXQgQml0QmFrZSBjYW4gcmVkdWNlIGl0cworICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSBidXQgbm90IHJhaXNlIGl0IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1RBU0tfTklDRV9MRVZFTCc+PGZpbGVuYW1lPkJCX1RBU0tfTklDRV9MRVZFTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OT19ORVRXT1JLJz48Z2xvc3N0ZXJtPkJCX05PX05FVFdPUks8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgbmV0d29yayBhY2Nlc3MgaW4gdGhlIEJpdEJha2UgZmV0Y2hlciBtb2R1bGVzLgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgYWNjZXNzIGRpc2FibGVkLCBhbnkgY29tbWFuZCB0aGF0IGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgbmV0d29yayBiZWNvbWVzIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNhYmxpbmcgbmV0d29yayBhY2Nlc3MgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBtaXJyb3JzLCBydW5uaW5nIGJ1aWxkcyB3aGVuIG5vdCBjb25uZWN0ZWQgdG8gdGhlIEludGVybmV0LAorICAgICAgICAgICAgICAgICAgICBhbmQgd2hlbiBvcGVyYXRpbmcgaW4gY2VydGFpbiBraW5kcyBvZiBmaXJld2FsbAorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxnbG9zc3Rlcm0+QkJfTlVNQkVSX1RIUkVBRFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIEJpdEJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICBhdCBhbnkgb25lIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gc3VwcG9ydHMgbXVsdGlwbGUgY29yZXMsCisgICAgICAgICAgICAgICAgICAgIGEgZ29vZCBydWxlIG9mIHRodW1iIGlzIHRvIHNldCB0aGlzIHZhcmlhYmxlIHRvIHR3aWNlIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgY29yZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMnPjxnbG9zc3Rlcm0+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgQml0QmFrZSB1c2VzIHdoZW4gcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIG51bWJlciBvZiB0aHJlYWRzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgY29yZXMgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9PUklHRU5WJz48Z2xvc3N0ZXJtPkJCX09SSUdFTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBleHRlcm5hbCBlbnZpcm9ubWVudCBpbgorICAgICAgICAgICAgICAgICAgICB3aGljaCBCaXRCYWtlIHdhcyBydW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3B5IGlzIHRha2VuIGJlZm9yZSBhbnkgd2hpdGVsaXN0ZWQgdmFyaWFibGUgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBmaWx0ZXJlZCBpbnRvIEJpdEJha2UncyBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgdmFyaWFibGUgaXMgYSBkYXRhc3RvcmUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSBxdWVyaWVkIHVzaW5nIHRoZSBub3JtYWwgZGF0YXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfUFJFU0VSVkVfRU5WJz48Z2xvc3N0ZXJtPkJCX1BSRVNFUlZFX0VOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNhYmxlcyB3aGl0ZWxpc3RpbmcgYW5kIGluc3RlYWQgYWxsb3dzIGFsbCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncworICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1JVTkZNVCc+PGdsb3NzdGVybT5CQl9SVU5GTVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIHNjcmlwdCBmaWxlcworICAgICAgICAgICAgICAgICAgICAoaS5lLiBydW4gZmlsZXMpIHNhdmVkIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCX1JVTkZNVDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCBhbmQgdGhlIHJ1biBmaWxlIG5hbWVzIGdldCBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW4ue3Rhc2t9LntwaWR9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgcnVuIGZpbGVzIHRvIHRha2UgYSBzcGVjaWZpYyBuYW1lLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1JVTlRBU0snPjxnbG9zc3Rlcm0+QkJfUlVOVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgZG9lcyBub3QgaW5jbHVkZSB0aGUgImRvXyIgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlnPC9maWxlbmFtZT4sIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAiY29uZmlnIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TQ0hFRFVMRVInPjxnbG9zc3Rlcm0+QkJfU0NIRURVTEVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgdGhlIG5hbWUgb2YgdGhlIHNjaGVkdWxlciB0byB1c2UgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBzY2hlZHVsaW5nIG9mIEJpdEJha2UgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIFRocmVlIG9wdGlvbnMgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmJhc2ljPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNpYyBmcmFtZXdvcmsgZnJvbSB3aGljaCBldmVyeXRoaW5nIGRlcml2ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24gY2F1c2VzIHRhc2tzIHRvIGJlIG9yZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljYWxseSBhcyB0aGV5IGFyZSBwYXJzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNwZWVkPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGVzIHRhc2tzIGZpcnN0IHRoYXQgaGF2ZSBtb3JlIHRhc2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJzcGVlZCIgb3B0aW9uIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb21wbGV0aW9uPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgc2NoZWR1bGVyIHRvIHRyeSB0byBjb21wbGV0ZSBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG9uY2UgaXRzIGJ1aWxkIGhhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TQ0hFRFVMRVJTJz48Z2xvc3N0ZXJtPkJCX1NDSEVEVUxFUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBjdXN0b20gc2NoZWR1bGVycyB0byBpbXBvcnQuCisgICAgICAgICAgICAgICAgICAgIEN1c3RvbSBzY2hlZHVsZXJzIG5lZWQgdG8gYmUgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UnVuUXVldWVTY2hlZHVsZXI8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGhvdyB0byBzZWxlY3QgYSBzY2hlZHVsZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NDSEVEVUxFUic+PGZpbGVuYW1lPkJCX1NDSEVEVUxFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGdsb3NzdGVybT5CQl9TRVRTQ0VORV9ERVBWQUxJRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiBCaXRCYWtlIGNhbGxzIHRoYXQgZGV0ZXJtaW5lcworICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIEJpdEJha2UgcmVxdWlyZXMgYSBzZXRzY2VuZSBkZXBlbmRlbmN5IHRvIGJlIG1ldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBydW5uaW5nIGEgc2V0c2NlbmUgdGFzaywgQml0QmFrZSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBrbm93IHdoaWNoIGRlcGVuZGVuY2llcyBvZiB0aGF0IHNldHNjZW5lIHRhc2sgYWxzbyBuZWVkCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgV2hldGhlciBkZXBlbmRlbmNpZXMgYWxzbyBuZWVkIHRvIGJlIHJ1biBpcyBoaWdobHkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIHRoZSBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGlzIHZhcmlhYmxlIHJldHVybnMgYQorICAgICAgICAgICAgICAgICAgICAiVHJ1ZSIgb3IgIkZhbHNlIiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZGVwZW5kZW5jeSBuZWVkcworICAgICAgICAgICAgICAgICAgICB0byBiZSBtZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OJz48Z2xvc3N0ZXJtPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiB0byBjYWxsIHRoYXQgdmVyaWZpZXMgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcGxhbm5lZCB0YXNrIGV4ZWN1dGlvbiBiZWZvcmUgdGhlIG1haW4gdGFzayBleGVjdXRpb24KKyAgICAgICAgICAgICAgICAgICAgaGFwcGVucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIEJpdEJha2UgaGFzIGEgbGlzdCBvZiBzZXRzY2VuZQorICAgICAgICAgICAgICAgICAgICB0YXNrcyB0aGF0IGhhdmUgcnVuIGFuZCBlaXRoZXIgc3VjY2VlZGVkIG9yIGZhaWxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgYSB0YXNrIGxpc3QgY2hlY2sgdG8gc2VlIGlmIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgbWFrZSBzZW5zZS4KKyAgICAgICAgICAgICAgICAgICAgRXZlbiBpZiBCaXRCYWtlIHdhcyBwbGFubmluZyB0byBza2lwIGEgdGFzaywgdGhlCisgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYW4gZm9yY2UgQml0QmFrZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhc2ssIHdoaWNoIGlzIG5lY2Vzc2FyeSB1bmRlciBjZXJ0YWluIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY2lyY3Vtc3RhbmNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUyc+PGdsb3NzdGVybT5CQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB2YXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIHNhZmVseSBleGNsdWRlZCBmcm9tIGNoZWNrc3VtCisgICAgICAgICAgICAgICAgICAgIGFuZCBkZXBlbmRlbmN5IGRhdGEgZm9yIGtleXMgaW4gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGNoZWNrc3VtIG9yIGRlcGVuZGVuY3kgZGF0YSBmb3Iga2V5cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLCB0aGUgZmxhZ3Mgc2V0IGFnYWluc3QgdGhhdCBrZXkgYXJlIG5vcm1hbGx5CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdmFyZmxhZ3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWdzJz5WYXJpYWJsZSBGbGFnczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0lHTkFUVVJFX0hBTkRMRVInPjxnbG9zc3Rlcm0+QkJfU0lHTkFUVVJFX0hBTkRMRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGhhbmRsZXIgQml0QmFrZSB1c2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2lnbmF0dXJlIGhhbmRsZXIgZGVmaW5lcyB0aGUgd2F5IHN0YW1wIGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGFuZCBoYW5kbGVkLCBpZiBhbmQgaG93IHRoZSBzaWduYXR1cmUgaXMKKyAgICAgICAgICAgICAgICAgICAgaW5jb3Jwb3JhdGVkIGludG8gdGhlIHN0YW1wcywgYW5kIGhvdyB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgICAgIGl0c2VsZiBpcyBnZW5lcmF0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbmV3IHNpZ25hdHVyZSBoYW5kbGVyIGNhbiBiZSBhZGRlZCBieSBpbmplY3RpbmcgYSBjbGFzcworICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TaWduYXR1cmVHZW5lcmF0b3I8L2ZpbGVuYW1lPiBjbGFzcyBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWwgbmFtZXNwYWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NSQ1JFVl9QT0xJQ1knPjxnbG9zc3Rlcm0+QkJfU1JDUkVWX1BPTElDWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgZmV0Y2hlciB3aGVuIGl0IGludGVyYWN0cyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbXMgYW5kIGR5bmFtaWMgc291cmNlIHJldmlzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQl9TUkNSRVZfUE9MSUNZPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gd29ya2luZyB3aXRob3V0IGEgbmV0d29yay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdXNpbmcgb25lIG9mIHR3byBwb2xpY2llczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2FjaGU8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0YWlucyB0aGUgdmFsdWUgdGhlIHN5c3RlbSBvYnRhaW5lZCBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2xlYXI8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVlcmllcyB0aGUgc291cmNlIGNvbnRyb2xzIHN5c3RlbSBldmVyeSB0aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBwb2xpY3ksIHRoZXJlIGlzIG5vIGNhY2hlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAiY2xlYXIiIHBvbGljeSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU1RBTVBfUE9MSUNZJz48Z2xvc3N0ZXJtPkJCX1NUQU1QX1BPTElDWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBtb2RlIHVzZWQgZm9yIGhvdyB0aW1lc3RhbXBzIG9mIHN0YW1wIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBjb21wYXJlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIG1vZGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wZXJmaWxlPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVzdGFtcCBjb21wYXJpc29ucyBhcmUgb25seSBtYWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB0aW1lc3RhbXBzIG9mIGEgc3BlY2lmaWMgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZnVsbDwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lc3RhbXAgY29tcGFyaXNvbnMgYXJlIG1hZGUgZm9yIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+d2hpdGVsaXN0PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkZW50aWNhbCB0byAiZnVsbCIgbW9kZSBleGNlcHQgdGltZXN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbnMgYXJlIG1hZGUgZm9yIHJlY2lwZXMgbGlzdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TVEFNUF9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9TVEFNUF9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhbXAgcG9saWNpZXMgYXJlIGxhcmdlbHkgb2Jzb2xldGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjdGlvbiBvZiBzZXRzY2VuZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NUQU1QX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9TVEFNUF9XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgZmlsZXMgd2hvc2Ugc3RhbXAgZmlsZSB0aW1lc3RhbXBzIGFyZSBjb21wYXJlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFtcCBwb2xpY3kgbW9kZSBpcyBzZXQgdG8gIndoaXRlbGlzdCIuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzdGFtcCBwb2xpY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU1RBTVBfUE9MSUNZJz48ZmlsZW5hbWU+QkJfU1RBTVBfUE9MSUNZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NUUklDVF9DSEVDS1NVTSc+PGdsb3NzdGVybT5CQl9TVFJJQ1RfQ0hFQ0tTVU08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyBhIG1vcmUgc3RyaWN0IGNoZWNrc3VtIG1lY2hhbmlzbSBmb3Igbm9uLWxvY2FsIFVSTHMuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBhIHZhbHVlIGNhdXNlcyBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHRvIHJlcG9ydCBhbiBlcnJvciBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLWxvY2FsIFVSTAorICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIGNoZWNrc3VtIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9UQVNLX05JQ0VfTEVWRUwnPjxnbG9zc3Rlcm0+QkJfVEFTS19OSUNFX0xFVkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBzcGVjaWZpYyB0YXNrcyB0byBjaGFuZ2UgdGhlaXIgcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gbmljZSBsZXZlbCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgaW4gY29tYmluYXRpb24gd2l0aCB0YXNrCisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0byByYWlzZSBvciBsb3dlciBwcmlvcml0aWVzIG9mIHNwZWNpZmljIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGF1dG9idWlsZGVyLCBRRU1VIGVtdWxhdGlvbiBpbiBpbWFnZXMgaXMgZ2l2ZW4gYSBoaWdoZXIKKyAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgYXMgY29tcGFyZWQgdG8gYnVpbGQgdGFza3MgdG8gZW5zdXJlIHRoYXQgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBzdWZmZXIgdGltZW91dHMgb24gbG9hZGVkIHN5c3RlbXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfVEFTS0hBU0gnPjxnbG9zc3Rlcm0+QkJfVEFTS0hBU0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aGluIGFuIGV4ZWN1dGluZyB0YXNrLCB0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBoYXNoCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXNrIGFzIHJldHVybmVkIGJ5IHRoZSBjdXJyZW50bHkgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgZ2VuZXJhdG9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1ZFUkJPU0VfTE9HUyc+PGdsb3NzdGVybT5CQl9WRVJCT1NFX0xPR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaG93IHZlcmJvc2UgQml0QmFrZSBpcyBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIHNoZWxsIHNjcmlwdHMgZWNobyBjb21tYW5kcyBhbmQgc2hlbGwgc2NyaXB0IG91dHB1dAorICAgICAgICAgICAgICAgICAgICBhcHBlYXJzIG9uIHN0YW5kYXJkIG91dCAoc3Rkb3V0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9XT1JLRVJDT05URVhUJz48Z2xvc3N0ZXJtPkJCX1dPUktFUkNPTlRFWFQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgZXhlY3V0aW5nIGEgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXRzIHRoaXMgdmFyaWFibGUgdG8gIjEiIHdoZW4gYSB0YXNrIGlzCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgbm90IHNldCB3aGVuIHRoZSB0YXNrIGlzIGluIHNlcnZlciBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBwYXJzaW5nIG9yIGV2ZW50IGhhbmRsaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJDTEFTU0VYVEVORCc+PGdsb3NzdGVybT5CQkNMQVNTRVhURU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiB0aGVzZSB2YXJpYW50cyBmb3IgcmVjaXBlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgQ29yZSBtZXRhZGF0YSBhcmUgIm5hdGl2ZXMiIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnF1aWx0LW5hdGl2ZTwvZmlsZW5hbWU+LCB3aGljaCBpcyBhIGNvcHkgb2YKKyAgICAgICAgICAgICAgICAgICAgUXVpbHQgYnVpbHQgdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW07ICJjcm9zc2VzIiBzdWNoCisgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYSBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUgYnV0IHByb2R1Y2VzIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcnVuIG9uIHRoZSB0YXJnZXQgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsKKyAgICAgICAgICAgICAgICAgICAgIm5hdGl2ZXNkayIsIHdoaWNoIHRhcmdldHMgdGhlIFNESyBtYWNoaW5lIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsgYW5kICJtdWxpdGxpYnMiIGluIHRoZSBmb3JtCisgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+bXVsdGlsaWI6PC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXVsdGlsaWJfbmFtZTwvcmVwbGFjZWFibGU+Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYnVpbGQgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgcmVjaXBlIHdpdGggYSBtaW5pbWFsCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBjb2RlLCBpdCB1c3VhbGx5IGlzIGFzIHNpbXBsZSBhcyBhZGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAibmF0aXZlIiB2YXJpYW50cyBhcmUgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIENvcmUKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibXVsdGlsaWI6PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkRFQlVHJz48Z2xvc3N0ZXJtPkJCREVCVUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgQml0QmFrZSBkZWJ1ZyBvdXRwdXQgbGV2ZWwgdG8gYSBzcGVjaWZpYyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBhcyBpbmNyZW1lbnRlZCBieSB0aGUgPGZpbGVuYW1lPi1kPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9DT0xMRUNUSU9OUyc+PGdsb3NzdGVybT5CQkZJTEVfQ09MTEVDVElPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIDxmaWxlbmFtZT5CQkZJTEVfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBlYWNoIGxheWVyIGFwcGVuZHMgaXRzIG5hbWUgdG8gdGhpcyB2YXJpYWJsZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX1BBVFRFUk4nPjxnbG9zc3Rlcm0+QkJGSUxFX1BBVFRFUk48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5WYXJpYWJsZSB0aGF0IGV4cGFuZHMgdG8gbWF0Y2ggZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gYSBwYXJ0aWN1bGFyIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZCBtdXN0CisgICAgICAgICAgICAgICAgICAgIGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVfUEFUVEVSTl9lbWVubG93PC9maWxlbmFtZT4pLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9QUklPUklUWSc+PGdsb3NzdGVybT5CQkZJTEVfUFJJT1JJVFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Bc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHNhbWUgcmVjaXBlIGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gcHJpb3JpdGl6ZSBhCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgY29udGFpbiB0aGUgc2FtZSByZWNpcGUgLSBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBsZXR0aW5nIHlvdSBjb250cm9sIHRoZSBwcmVjZWRlbmNlIGZvciB0aGUgbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJlY2VkZW5jZSBlc3RhYmxpc2hlZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgc3RhbmRzIHJlZ2FyZGxlc3Mgb2YgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGxheWVyIHRoYXQgaGFzIGEgcmVjaXBlIHdpdGggYSBoaWdoZXIgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFsdWUgYnV0IGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IGlzIHNldCB0byBoYXZlIGEgbG93ZXIgcHJlY2VkZW5jZSBzdGlsbCBoYXMgYQorICAgICAgICAgICAgICAgICAgICBsb3dlciBwcmVjZWRlbmNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5BIGxhcmdlciB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXN1bHRzIGluIGEgaGlnaGVyCisgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgNiBoYXMgYSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSB2YWx1ZSA1LgorICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldCBiYXNlZCBvbiBsYXllcgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgKHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPkxBWUVSREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgcHJpb3JpdHksIGlmIHVuc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGZvciBhIGxheWVyIHdpdGggbm8gZGVwZW5kZW5jaWVzLCBpcyB0aGUgbG93ZXN0IGRlZmluZWQgcHJpb3JpdHkgKyAxCisgICAgICAgICAgICAgICAgICAgIChvciAxIGlmIG5vIHByaW9yaXRpZXMgYXJlIGRlZmluZWQpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY29tbWFuZCA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnM8L2ZpbGVuYW1lPiB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGFsbCBjb25maWd1cmVkIGxheWVycyBhbG9uZyB3aXRoIHRoZWlyIHByaW9yaXRpZXMuCisgICAgICAgICAgICAgICAgPC90aXA+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVTJz48Z2xvc3N0ZXJtPkJCRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0IG9mIHJlY2lwZSBmaWxlcyBCaXRCYWtlIHVzZXMgdG8gYnVpbGQgc29mdHdhcmUuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFRCc+PGdsb3NzdGVybT5CQklOQ0xVREVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWxsIG9mIGFsbCBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UncyBwYXJzZXIgaW5jbHVkZWQgZHVyaW5nIHBhcnNpbmcgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQklOQ0xVREVMT0dTJz48Z2xvc3N0ZXJtPkJCSU5DTFVERUxPR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGEgdmFsdWUsIGVuYWJsZXMgcHJpbnRpbmcgdGhlIHRhc2sgbG9nIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0aW5nIGEgZmFpbGVkIHRhc2suCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HU19MSU5FUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTX0xJTkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQklOQ0xVREVMT0dTJz48ZmlsZW5hbWU+QkJJTkNMVURFTE9HUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQsIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFzayBsb2cgZmlsZSB0byBwcmludCB3aGVuIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCA8ZmlsZW5hbWU+QkJJTkNMVURFTE9HU19MSU5FUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIGxvZyBpcyBwcmludGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCTEFZRVJTJz48Z2xvc3N0ZXJtPkJCTEFZRVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+TGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLW15a2VybmVsIFwKKyAgICAgICAiCisKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBmb3VyIGxheWVycywgb25lIG9mIHdoaWNoIGlzIGEgY3VzdG9tLCB1c2VyLWRlZmluZWQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPm1ldGEtbXlrZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkxBWUVSU19GRVRDSF9ESVInPjxnbG9zc3Rlcm0+QkJMQVlFUlNfRkVUQ0hfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGJhc2UgbG9jYXRpb24gd2hlcmUgbGF5ZXJzIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbG9jYXRpb24gaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0NPUkVCQVNFfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBsYXllcmluZGV4LWZldGNoPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIHRlbGxzIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IHdoZXJlIHRvIHBsYWNlCisgICAgICAgICAgICAgICAgICAgIHRoZSBmZXRjaGVkIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQk1BU0snPjxnbG9zc3Rlcm0+QkJNQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHJlY2lwZXMgYW5kIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdG8gImhpZGUiIHRoZXNlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlnbm9yZXMgYW55IHJlY2lwZSBvciByZWNpcGUgYXBwZW5kIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFzIGlmIEJpdEJha2UgZG9lcyBub3Qgc2VlIHRoZW0gYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIG1hdGNoaW5nIGZpbGVzIGFyZSBub3QgcGFyc2VkIG9yIG90aGVyd2lzZQorICAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IEJpdEJha2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgeW91IHByb3ZpZGUgaXMgcGFzc2VkIHRvIFB5dGhvbidzIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZnVsbCBwYXRocyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXggaW5mb3JtYXRpb24sIHNlZSBQeXRob24ncworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVsZWFzZS8yLjMvbGliL3JlLXN5bnRheC5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYSBjb21wbGV0ZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZSBhbGwgcmVjaXBlIGFuZCByZWNpcGUgYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS10aS9yZWNpcGVzLW1pc2MvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbWFzayBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgb3IgcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2ZXJ0aWNhbCBiYXIgdG8gc2VwYXJhdGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hc2tzIG91dCBtdWx0aXBsZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCByZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy98bWV0YS10aS9yZWNpcGVzLXRpL3BhY2thZ2Vncm91cC8iCisgICAgIEJCTUFTSyAuPSAifC4qbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5sZGFwIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5jdiIKKyAgICAgQkJNQVNLIC49ICJ8Lipsem1hIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE5vdGljZSBob3cgdGhlIHZlcnRpY2FsIGJhciBpcyB1c2VkIHRvIGFwcGVuZCB0aGUgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBhIGRpcmVjdG9yeSBuYW1lLCB1c2UgdGhlIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaCBjaGFyYWN0ZXIgdG8gZW5zdXJlIHlvdSBtYXRjaCBqdXN0IHRoYXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJQQVRIJz48Z2xvc3N0ZXJtPkJCUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IEJpdEJha2UgdG8gbG9jYXRlIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gQml0QmFrZSBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgYmUgc3VyZSB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgYXMgeW91IHdvdWxkIGFueSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBydW4gQml0QmFrZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEJCUEFUSD0iPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJTRVJWRVInPjxnbG9zc3Rlcm0+QkJTRVJWRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQlZFUlNJT05TJz48Z2xvc3N0ZXJtPkJCVkVSU0lPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGFsc28gYWJsZSB0byBzcGVjaWZ5IGNvbmRpdGlvbmFsIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSBmb3IgYSBzaW5nbGUgdmVyc2lvbiBvciBmb3IgYW4gb3B0aW9uYWxseSBuYW1lZAorICAgICAgICAgICAgICAgICAgICByYW5nZSBvZiB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPkJCVkVSU0lPTlM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFudHMtY2xhc3MtZXh0ZW5zaW9uLW1lY2hhbmlzbSc+VmFyaWFudHMgLSBDbGFzcyBFeHRlbnNpb24gTWVjaGFuaXNtPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CSVRCQUtFX1VJJz48Z2xvc3N0ZXJtPkJJVEJBS0VfVUk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCB0byBzcGVjaWZ5IHRoZSBVSSBtb2R1bGUgdG8gdXNlIHdoZW4gcnVubmluZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIHZhcmlhYmxlIGlzIGVxdWl2YWxlbnQgdG8gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tdTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxETkFNRSc+PGdsb3NzdGVybT5CVUlMRE5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgZGVmYXVsdHMgdG8gYSBkYXRldGltZSBzdGFtcCBvZiB3aGVuIHRoZSBidWlsZCB3YXMKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBidXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJaUkRJUic+PGdsb3NzdGVybT5CWlJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIEJhemFhcgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYyc+PHRpdGxlPkM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0FDSEUnPjxnbG9zc3Rlcm0+Q0FDSEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIHRvIHN0b3JlIGEgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG1ldGFkYXRhIHNvIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyc2VkIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgIHRpbWUgQml0QmFrZSBpcyBzdGFydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNWU0RJUic+PGdsb3NzdGVybT5DVlNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgQ1ZTIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1kJz48dGl0bGU+RDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxnbG9zc3Rlcm0+REVGQVVMVF9QUkVGRVJFTkNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBvZiB0aGlzIGlzIHZhcmlhYmxlIGlzIHRvIHNldAorICAgICAgICAgICAgICAgICAgICBpdCB0byAiLTEiIHdpdGhpbiBhIHJlY2lwZSBmb3IgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcGllY2Ugb2Ygc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB2YXJpYWJsZSBpbiB0aGlzIHdheSBjYXVzZXMgdGhlIHN0YWJsZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gYnVpbGQgYnkgZGVmYXVsdCBpbiB0aGUgYWJzZW5jZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz5QUkVGRVJSRURfVkVSU0lPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VkIHRvIGJ1aWxkIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJpYXMgcHJvdmlkZWQgYnkgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHdlYWsgYW5kIGlzIG92ZXJyaWRkZW4gYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPkJCRklMRV9QUklPUklUWTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiB0aGF0IHZhcmlhYmxlIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHR3byBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQRU5EUyc+PGdsb3NzdGVybT5ERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAorICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXBwZWFycyBpbiB0aGUgImEiIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gdGFzayBmb3IgcmVjaXBlICJhIgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBhbnl0aGluZyB0aGF0IHJlY2lwZSAiYiIgcHV0cyBpbnRvIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHdoZW4gcmVjaXBlICJhIiBpcyBjb25maWd1cmluZyBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW50aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVNDUklQVElPTic+PGdsb3NzdGVybT5ERVNDUklQVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxvbmcgZGVzY3JpcHRpb24gZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRExfRElSJz48Z2xvc3N0ZXJtPkRMX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3dubG9hZHMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBnZXRzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHN1aXRhYmxlIGZvciBtaXJyb3JpbmcgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRhcmJhbGxzIG9mIEdpdCByZXBvc2l0b3JpZXMsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorCisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZSc+PHRpdGxlPkU8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhDTFVERV9GUk9NX1dPUkxEJz48Z2xvc3N0ZXJtPkVYQ0xVREVfRlJPTV9XT1JMRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSB3b3JsZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHdvcmxkIGJ1aWxkcywgQml0QmFrZSBsb2NhdGVzLCBwYXJzZXMgYW5kIGJ1aWxkcyBhbGwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBmb3VuZCBpbiBldmVyeSBsYXllciBleHBvc2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIGEgd29ybGQgYnVpbGQgdXNpbmcgdGhpcyB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBhZGRlZCB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWF5IHN0aWxsIGJlIGJ1aWx0IGR1cmluZyBhIHdvcmxkIGJ1aWxkIGluIG9yZGVyIHRvIHNhdGlzZnkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyBhIHJlY2lwZSB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb25seSBlbnN1cmVzIHRoYXQgdGhlIHJlY2lwZSBpcyBub3QgZXhwbGljaXRseSBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgbGlzdCBvZiBidWlsZCB0YXJnZXRzIGluIGEgd29ybGQgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWYnPjx0aXRsZT5GPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UJz48Z2xvc3N0ZXJtPkZBS0VST09UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgY29tbWFuZCB0byB1c2Ugd2hlbiBydW5uaW5nIGEgc2hlbGwgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICBpbiBhIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5GQUtFUk9PVDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG9ic29sZXRlCisgICAgICAgICAgICAgICAgICAgICBhbmQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkFLRVJPT1QqPC9maWxlbmFtZT4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZXNlIGVudHJpZXMgaW4gdGhlIGdsb3NzYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UQkFTRUVOVic+PGdsb3NzdGVybT5GQUtFUk9PVEJBU0VFTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVENNRCc+PGZpbGVuYW1lPkZBS0VST09UQ01EPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICB0aGF0IHN0YXJ0cyB0aGUgYml0YmFrZS13b3JrZXIgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UQ01EJz48Z2xvc3N0ZXJtPkZBS0VST09UQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgY29tbWFuZCB0aGF0IHN0YXJ0cyB0aGUgYml0YmFrZS13b3JrZXIKKyAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09URElSUyc+PGdsb3NzdGVybT5GQUtFUk9PVERJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSBiZWZvcmUgcnVubmluZyBhIHRhc2sgaW4KKyAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVEVOVic+PGdsb3NzdGVybT5GQUtFUk9PVEVOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrCisgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVEJBU0VFTlYnPjxmaWxlbmFtZT5GQUtFUk9PVEJBU0VFTlY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UTk9FTlYnPjxnbG9zc3Rlcm0+RkFLRVJPT1ROT0VOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrCisgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVEVOVic+PGZpbGVuYW1lPkZBS0VST09URU5WPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GRVRDSENNRCc+PGdsb3NzdGVybT5GRVRDSENNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBjb21tYW5kIHRoZSBCaXRCYWtlIGZldGNoZXIgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVzIHdoZW4gcnVubmluZyBmZXRjaCBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byB1c2UgYW4gb3ZlcnJpZGUgc3VmZml4IHdoZW4geW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKGUuZy4gPGZpbGVuYW1lPkZFVENIQ01EX2dpdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5GRVRDSENNRF9zdm48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRSc+PGdsb3NzdGVybT5GSUxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyBhdCB0aGUgY3VycmVudCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHNldHMgdGhpcyB2YXJpYWJsZSBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICB0byBpZGVudGlmeSB0aGUgZmlsZSBiZWluZyBwYXJzZWQuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYWxzbyBzZXRzIHRoaXMgdmFyaWFibGUgd2hlbiBhIHJlY2lwZSBpcyBiZWluZworICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCB0byBpZGVudGlmeSB0aGUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNESVInPjxnbG9zc3Rlcm0+RklMRVNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIHNlYXJjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAibG9jYWwiIGZldGNoZXIgbW9kdWxlIHVzZXMgdGhlc2UgZGlyZWN0b3JpZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICBoYW5kbGluZyA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMgaWYgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBmb3VuZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBhbmQgeW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBpbiBhbGwgbmV3IGNvZGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU1BBVEgnPjxnbG9zc3Rlcm0+RklMRVNQQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBkaXJlY3RvcmllcyBCaXRCYWtlIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgYW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgImxvY2FsIiBmZXRjaGVyIG1vZHVsZSB1c2VzIHRoZXNlIGRpcmVjdG9yaWVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYmVoYXZlcyBsaWtlIGEgc2hlbGwgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBhcmUgc2VhcmNoZWQgbGVmdC10by1yaWdodCBpbiBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1nJz48dGl0bGU+RzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HSVRESVInPjxnbG9zc3Rlcm0+R0lURElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggYSBsb2NhbCBjb3B5IG9mIGEgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgc3RvcmVkIHdoZW4gaXQgaXMgY2xvbmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWgnPjx0aXRsZT5IPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhHRElSJz48Z2xvc3N0ZXJtPkhHRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBNZXJjdXJpYWwKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9NRVBBR0UnPjxnbG9zc3Rlcm0+SE9NRVBBR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5XZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGZvdW5kLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1pJz48dGl0bGU+STwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhFUklUJz48Z2xvc3N0ZXJtPklOSEVSSVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktaic+PHRpdGxlPko8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1rJz48dGl0bGU+SzwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbCc+PHRpdGxlPkw8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJERVBFTkRTJz48Z2xvc3N0ZXJtPkxBWUVSREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPkxpc3RzIHRoZSBsYXllcnMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHVwb24gd2hpY2ggdGhpcyByZWNpcGUgZGVwZW5kcy4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IGEgc3BlY2lmaWMgbGF5ZXIgdmVyc2lvbiBmb3IgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyBpdCB0byB0aGUgZW5kIG9mIHRoZSBsYXllciBuYW1lIHdpdGggYSBjb2xvbiwgKGUuZy4gImFub3RoZXJsYXllcjozIgorICAgICAgICAgICAgICAgICAgICB0byBiZSBjb21wYXJlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUlZFUlNJT04nPjxmaWxlbmFtZT5MQVlFUlZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+X2Fub3RoZXJsYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcHJvZHVjZXMgYW4gZXJyb3IgaWYgYW55IGRlcGVuZGVuY3kgaXMgbWlzc2luZyBvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBudW1iZXJzIGRvIG5vdCBtYXRjaCBleGFjdGx5IChpZiBzcGVjaWZpZWQpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyB1c2UgdGhlIHNwZWNpZmljIGxheWVyIG5hbWUgYXMgYSBzdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHZhcmlhYmxlIChlLmcuIDxmaWxlbmFtZT5MQVlFUkRFUEVORFNfbXlsYXllcjwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRJUic+PGdsb3NzdGVybT5MQVlFUkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdXNlZCBpbnNpZGUgdGhlIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIG5vdCBhdmFpbGFibGUgb3V0c2lkZSBvZiA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCByZWZlcmVuY2VzIGFyZSBleHBhbmRlZCBpbW1lZGlhdGVseSB3aGVuIHBhcnNpbmcgb2YgdGhlIGZpbGUgY29tcGxldGVzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxBWUVSVkVSU0lPTic+PGdsb3NzdGVybT5MQVlFUlZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5PcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+PGZpbGVuYW1lPkxBWUVSREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYW5vdGhlciBsYXllciBpbiBvcmRlciB0byBkZXBlbmQgb24gYSBzcGVjaWZpYyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBsYXllci48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gdXNlIHRoZSBzcGVjaWZpYyBsYXllciBuYW1lIGFzIGEgc3VmZml4CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB2YXJpYWJsZSAoZS5nLiA8ZmlsZW5hbWU+TEFZRVJERVBFTkRTX215bGF5ZXI8L2ZpbGVuYW1lPikuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRSc+PGdsb3NzdGVybT5MSUNFTlNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbSc+PHRpdGxlPk08L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUlSUk9SUyc+PGdsb3NzdGVybT5NSVJST1JTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggQml0QmFrZSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+IGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTVVMVElfUFJPVklERVJfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPk1VTFRJX1BST1ZJREVSX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgeW91IHRvIHN1cHByZXNzIEJpdEJha2Ugd2FybmluZ3MgY2F1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgdHdvIHNlcGFyYXRlIHJlY2lwZXMgdGhhdCBwcm92aWRlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0YmFrZSBub3JtYWxseSBpc3N1ZXMgYSB3YXJuaW5nIHdoZW4gYnVpbGRpbmcgdHdvCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCByZWNpcGVzIHdoZXJlIGVhY2ggcHJvdmlkZXMgdGhlIHNhbWUgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNjZW5hcmlvIGlzIHVzdWFsbHkgc29tZXRoaW5nIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIHdhbnQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGNhc2VzIGRvIGV4aXN0IHdoZXJlIGl0IG1ha2VzIHNlbnNlLCBwYXJ0aWN1bGFybHkKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT52aXJ0dWFsLyo8L2ZpbGVuYW1lPiBuYW1lc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8gc3VwcHJlc3MgQml0QmFrZSdzIHdhcm5pbmdzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHZhcmlhYmxlLCBsaXN0IHByb3ZpZGVyIG5hbWVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBuYW1lcywgPGZpbGVuYW1lPnZpcnR1YWwva2VybmVsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LW4nPjx0aXRsZT5OPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1vJz48dGl0bGU+TzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PVkVSUklERVMnPjxnbG9zc3Rlcm0+T1ZFUlJJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29udHJvbAorICAgICAgICAgICAgICAgICAgICB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZSB0aGF0IHVzZXMgYW4gb3ZlcnJpZGVzCisgICAgICAgICAgICAgICAgICAgIGxpc3QgYmFzZWQgb24gbWFjaGluZSBhcmNoaXRlY3R1cmVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJhcm06eDg2Om1pcHM6cG93ZXJwYyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktcCc+PHRpdGxlPlA8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGUgcmVjaXBlIGNyZWF0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGdsb3NzdGVybT5QQUNLQUdFU19EWU5BTUlDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFjdHVhbGx5IHNhdGlzZnkgdGhlIGRlcGVuZGVuY2llcywgaXQgb25seSBzdGF0ZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCBiZSBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGhhcmQsIHJ1bnRpbWUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIG9mIGFub3RoZXIgcGFja2FnZSBpcyBzYXRpc2ZpZWQgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBidXQgYSBwYWNrYWdlIHdpdGggdGhlIG1vZHVsZSBuYW1lIGlzIG5ldmVyIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkLCB0aGVuIHRoZSBvdGhlciBwYWNrYWdlIHdpbGwgYmUgYnJva2VuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBFJz48Z2xvc3N0ZXJtPlBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHVuc2V0LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgIHdheS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRVJTSVNURU5UX0RJUic+PGdsb3NzdGVybT5QRVJTSVNURU5UX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgZGF0YSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBkYXRhIHN0b3JlZCBpcyB0aGUgZGF0YSB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIHBlcnNpc3RlbnQgZGF0YSBBUEkgYW5kIHRoZSBkYXRhIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIFBSIFNlcnZlciBhbmQgUFIgU2VydmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRic+PGdsb3NzdGVybT5QRjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHJlY2lwZSBvciBwYWNrYWdlIG5hbWUgYW5kIGluY2x1ZGVzIGFsbCB2ZXJzaW9uIGFuZCByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBudW1iZXJzIChpLmUuIDxmaWxlbmFtZT5lZ2xpYmMtMi4xMy1yMjArc3ZucjE1NTA4LzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC00LjItcjEvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBOJz48Z2xvc3N0ZXJtPlBOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHJlY2lwZSBuYW1lLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSJz48Z2xvc3N0ZXJtPlBSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGdsb3NzdGVybT5QUkVGRVJSRURfUFJPVklERVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2Ugd2hlbgorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgc3VmZml4IHRoZSB2YXJpYWJsZSB3aXRoIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBpdGVtLCBhbmQgeW91IHNob3VsZCBzZXQgaXQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gd2hpY2ggeW91IHdhbnQgdG8gZ2l2ZSBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAibGludXgteW9jdG8iCisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPSAieHNlcnZlci14Zjg2IgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUlMnPjxnbG9zc3Rlcm0+UFJFRkVSUkVEX1BST1ZJREVSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgY2FzZXMgd2hlcmUgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGl0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWxseSwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUlM8L2ZpbGVuYW1lPiBpcyBpZGVudGljYWwgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIDxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVJTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbGV0cyB5b3UgZGVmaW5lIHByZWZlcmVuY2VzIGZvciBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBzaXR1YXRpb25zIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJTID0gInh4eDp5eXkgYWFhOmJiYiAuLi4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmb3JtIGlzIGEgY29udmVuaWVudCByZXBsYWNlbWVudCBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfeHh4ID0gInl5eSIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX2FhYSA9ICJiYmIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGdsb3NzdGVybT5QUkVGRVJSRURfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsd2F5cyBzdWZmaXggdGhlIHZhcmlhYmxlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHNlbGVjdCwgYW5kIHlvdSBzaG91bGQgc2V0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZ2x5IGZvciBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgIjxmaWxlbmFtZT4lPC9maWxlbmFtZT4iIGNoYXJhY3RlciBhcyBhCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkIHRvIG1hdGNoIGFueSBudW1iZXIgb2YgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHNwZWNpZnlpbmcgdmVyc2lvbnMgdGhhdCBjb250YWluIGxvbmcgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIyLjcuMyIKKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiMy4xMCUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVNSVJST1JTJz48Z2xvc3N0ZXJtPlBSRU1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCBCaXRCYWtlIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgYWRkIGEgc3BlY2lmaWMgc2VydmVyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGF0dGVtcHQgYmVmb3JlIGFueSBvdGhlcnMgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8geW91ciBjb25maWd1cmF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRU1JUlJPUlNfcHJlcGVuZCA9ICJcCisgICAgIGdpdDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGZ0cDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGh0dHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwczovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjaGFuZ2VzIGNhdXNlIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW50ZXJjZXB0CisgICAgICAgICAgICAgICAgICAgIEdpdCwgRlRQLCBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IHNvdXJjZXMgbWlycm9yLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMgdG8gcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUk9WSURFUyc+PGdsb3NzdGVybT5QUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgYWxpYXNlcyBieSB3aGljaCBhIHBhcnRpY3VsYXIgcmVjaXBlIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICBrbm93bi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYSByZWNpcGUncyBvd24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgaW1wbGljaXRseSBhbHJlYWR5IGluIGl0cyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsaXN0LgorICAgICAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSB1c2VzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBhbGlhc2VzIGFyZSBzeW5vbnltcyBmb3IgdGhlIHJlY2lwZSBhbmQgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWZ1bCBzYXRpc2Z5aW5nIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzIGR1cmluZworICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCBmcm9tIGEgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgPGZpbGVuYW1lPmxpYmF2XzAuOC4xMS5iYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBST1ZJREVTICs9ICJsaWJwb3N0cHJvYyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gc3RhdGVtZW50IHJlc3VsdHMgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlICJsaWJhdiIgcmVjaXBlIGFsc28gYmVpbmcga25vd24gYXMgImxpYnBvc3Rwcm9jIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUlNFUlZfSE9TVCc+PGdsb3NzdGVybT5QUlNFUlZfSE9TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmV0d29yayBiYXNlZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0aGUgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgc2V0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUgdmFyaWFibGUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBzdGFydCBhIGxvY2FsIFBSIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IDxmaWxlbmFtZT5QUlNFUlZfSE9TVDwvZmlsZW5hbWU+IHRvIG90aGVyCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB0byB1c2UgYSByZW1vdGUgUFIgc2VydmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QVic+PGdsb3NzdGVybT5QVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0KKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1xJz48dGl0bGU+UTwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcic+PHRpdGxlPlI8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUkRFUEVORFMnPjxnbG9zc3Rlcm0+UkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBidWlsdCBwYWNrYWdlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgY2Fubm90IGJlIGZvdW5kIGR1cmluZyB0aGUgYnVpbGQsCisgICAgICAgICAgICAgICAgICAgIHlvdSB3aWxsIGdldCBhIGJ1aWxkIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIHRvIHBhY2thZ2VzIGJlaW5nIGJ1aWx0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB3aXRoIGFuIGF0dGFjaGVkIHBhY2thZ2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfS1kZXYgKz0gInBlcmwiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBkZXZlbG9wbWVudCBwYWNrYWdlIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgbmFtZSBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIHZlcnNpb25lZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIGRlcGVuZGVuY3kgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZC10aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlBST1ZJREVTJz48Z2xvc3N0ZXJtPlJQUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAoYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cworICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmFyaWFibGUgaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUFJPVklERVNfJHtQTn0gPSAid2lkZ2V0LWFiaS0yIgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBiZWluZyBidWlsdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhpcyBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCwgYnV0IG5lZWRzIHRoZW0gZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBleHRlbmRlZCB1c2FiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHNwZWNpZnlpbmcgdmVyc2lvbmVkIHJlY29tbWVuZHMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIHJlY29tbWVuZCBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcyc+PHRpdGxlPlM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VDVElPTic+PGdsb3NzdGVybT5TRUNUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ19VUkknPjxnbG9zc3Rlcm0+U1JDX1VSSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgLSBsb2NhbCBvciByZW1vdGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgdGVsbHMgQml0QmFrZSB3aGljaCBiaXRzCisgICAgICAgICAgICAgICAgICAgIHRvIHB1bGwgZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgZmV0Y2ggYSBzaW5nbGUgdGFyYmFsbCBmcm9tIHRoZSBJbnRlcm5ldCwgdGhlIHJlY2lwZSBvcgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSB1c2VzIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBlbnRyeSB0aGF0IHNwZWNpZmllcyB0aGF0IHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgdGFyYmFsbCBhbmQgaW5jbHVkZSBhIGN1c3RvbSBmaWxlLCB0aGUgcmVjaXBlIG9yCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlIG5lZWRzIGFuIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzcGVjaWZpZXMgYWxsIHRob3NlIHNvdXJjZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgbGlzdCBleHBsYWlucyB0aGUgYXZhaWxhYmxlIFVSSSBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmV0Y2hlcyBmaWxlcywgd2hpY2ggYXJlIHVzdWFsbHkgZmlsZXMgc2hpcHBlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YnpyOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmF6YWFyIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gT1NDIChPcGVuU1VTRSBCdWlsZCBzZXJ2aWNlKSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZXBvOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVwbyAoR2l0KSByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSW50ZXJuZXQgdXNpbmcgSFRUUC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHBzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBJbnRlcm5ldCB1c2luZyBIVFRQUy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgRlRQLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y3ZzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgQ1ZTIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgTWVyY3VyaWFsICg8ZmlsZW5hbWU+aGc8L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBQZXJmb3JjZSAoPGZpbGVuYW1lPnA0PC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNzaDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNlY3VyZSBzaGVsbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN2bjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFN1YnZlcnNpb24gKDxmaWxlbmFtZT5zdm48L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgd29ydGggbWVudGlvbmluZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVucGFjazwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBDb250cm9scworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIHVucGFjayB0aGUgZmlsZSBpZiBpdCBpcyBhbiBhcmNoaXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byB1bnBhY2sgdGhlIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdWJkaXI8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gUGxhY2VzIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGV4dHJhY3RzIGl0cyBjb250ZW50cykgaW50byB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgdW51c3VhbCB0YXJiYWxscyBvciBvdGhlciBhcmNoaXZlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGhhdmUgdGhlaXIgZmlsZXMgYWxyZWFkeSBpbiBhIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSB0byBiZSB1c2VkIGZvciBhc3NvY2lhdGlvbiB3aXRoIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gY2hlY2tzdW1zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGZpbGUgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb3dubG9hZGZpbGVuYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlbmFtZSB1c2VkIHdoZW4gc3RvcmluZyB0aGUgZG93bmxvYWRlZCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNEQVRFJz48Z2xvc3N0ZXJtPlNSQ0RBVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IGlmIHRoZSBzb3VyY2Ugd2FzIGZldGNoZWQgZnJvbSBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDUkVWJz48Z2xvc3N0ZXJtPlNSQ1JFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgU3VidmVyc2lvbiwgR2l0LCBNZXJjdXJpYWwgYW5kIEJhemFhci4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYnVpbGQgYSBmaXhlZCByZXZpc2lvbiBhbmQgeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgcGVyZm9ybWluZyBhIHF1ZXJ5IG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBldmVyeSB0aW1lCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIHlvdXIgcmVjaXBlLCB5b3Ugc2hvdWxkIHNwZWNpZnkgYSA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdGhhdCBpcyBhCisgICAgICAgICAgICAgICAgICAgIGZ1bGwgcmV2aXNpb24gaWRlbnRpZmllciBhbmQgbm90IGp1c3QgYSB0YWcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDUkVWX0ZPUk1BVCc+PGdsb3NzdGVybT5TUkNSRVZfRk9STUFUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlbHBzIGNvbnN0cnVjdCB2YWxpZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB3aGVuIG11bHRpcGxlIHNvdXJjZSBjb250cm9sbGVkIFVSTHMgYXJlIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3lzdGVtIG5lZWRzIGhlbHAgY29uc3RydWN0aW5nIHRoZXNlIHZhbHVlcyB1bmRlciB0aGVzZQorICAgICAgICAgICAgICAgICAgICBjaXJjdW1zdGFuY2VzLgorICAgICAgICAgICAgICAgICAgICBFYWNoIGNvbXBvbmVudCBpbiB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBhc3NpZ25lZCBhIG5hbWUgYW5kIHRoZXNlIGFyZSByZWZlcmVuY2VkCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHdpdGggVVJMcyBuYW1lZCAibWFjaGluZSIgYW5kICJtZXRhIi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IGNvdWxkIGxvb2sKKyAgICAgICAgICAgICAgICAgICAgbGlrZSAibWFjaGluZV9tZXRhIiBhbmQgdGhvc2UgbmFtZXMgd291bGQgaGF2ZSB0aGUgU0NNCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIHN1YnN0aXR1dGVkIGludG8gZWFjaCBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgT25seSBvbmUgPGZpbGVuYW1lPkFVVE9JTkM8L2ZpbGVuYW1lPiBwbGFjZWhvbGRlciBpcyBhZGRlZAorICAgICAgICAgICAgICAgICAgICBhbmQgaWYgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBBbmQsIHRoaXMgcGxhY2Vob2xkZXIgaXMgcGxhY2VkIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgc3RyaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQU1QJz48Z2xvc3N0ZXJtPlNUQU1QPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gYW4gYWN0dWFsIHN0YW1wIGZpbGUgaXMgY29uc3RydWN0ZWQgYnkgZXZhbHVhdGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBhbmQgdGhlbiBhcHBlbmRpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUENMRUFOJz48Z2xvc3N0ZXJtPlNUQU1QQ0xFQU48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBVbmxpa2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCA8ZmlsZW5hbWU+U1RBTVBDTEVBTjwvZmlsZW5hbWU+IGNhbiBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkcyB0byBtYXRjaCB0aGUgcmFuZ2Ugb2YgZmlsZXMgYSBjbGVhbiBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJlbW92ZS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIGEgY2xlYW4gb3BlcmF0aW9uIHRvIHJlbW92ZSBhbnkgb3RoZXIgc3RhbXBzCisgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBiZSByZW1vdmluZyB3aGVuIGNyZWF0aW5nIGEgbmV3IHN0YW1wLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNVTU1BUlknPjxnbG9zc3Rlcm0+U1VNTUFSWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHNob3J0IHN1bW1hcnkgZm9yIHRoZSByZWNpcGUsIHdoaWNoIGlzIDcyIGNoYXJhY3RlcnMgb3IgbGVzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVk5ESVInPjxnbG9zc3Rlcm0+U1ZORElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBTdWJ2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS10Jz48dGl0bGU+VDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UJz48Z2xvc3N0ZXJtPlQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Qb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2VyZSBCaXRCYWtlIHBsYWNlcworICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoIGNvbnNpc3QgbW9zdGx5IG9mIHRhc2sgbG9ncyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cywgd2hlbiBidWlsZGluZyBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPUERJUic+PGdsb3NzdGVybT5UT1BESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXUnPjx0aXRsZT5VPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktdic+PHRpdGxlPlY8L3RpdGxlPgorICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXcnPjx0aXRsZT5XPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnkteCc+PHRpdGxlPlg8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS15Jz48dGl0bGU+WTwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXonPjx0aXRsZT5aPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKworPC9nbG9zc2FyeT4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZGEyYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZmY5MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC54bWwKQEAgLTAsMCArMSw4OCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxib29rIGlkPSdiaXRiYWtlLXVzZXItbWFudWFsJyBsYW5nPSdlbicKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL2JpdGJha2UtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBCaXRCYWtlIFVzZXIgTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlJpY2hhcmQgUHVyZGllLCBDaHJpcyBMYXJzb24sIGFuZCA8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UGhpbCBCbHVuZGVsbDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkJpdEJha2UgQ29tbXVuaXR5PC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmJpdGJha2UtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZzwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworPCEtLQorIyBBZGQgaW4gc29tZSByZXZpc2lvbiBoaXN0b3J5IGlmIHdlIHdhbnQgaXQgaGVyZS4KKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPngueDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPmRkIG1vbnRoIHllYXI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5Tb21lIHJlbGV2ZW50IGNvbW1lbnQ8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgIDwvcmV2aGlzdG9yeT4KKy0tPgorCisgICAgICAgIDxjb3B5cmlnaHQ+CisgICAgICAgICAgICA8eWVhcj4yMDA0LTIwMTU8L3llYXI+CisgICAgICAgICAgICA8aG9sZGVyPlJpY2hhcmQgUHVyZGllPC9ob2xkZXI+CisgICAgICAgICAgICA8aG9sZGVyPkNocmlzIExhcnNvbjwvaG9sZGVyPgorICAgICAgICAgICAgPGhvbGRlcj5hbmQgUGhpbCBCbHVuZGVsbDwvaG9sZGVyPgorICAgICAgICA8L2NvcHlyaWdodD4KKworICAgICAgICA8bGVnYWxub3RpY2U+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gTGljZW5zZS4KKyAgICAgICAgICAgICAgICBUbyB2aWV3IGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHZpc2l0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi41LyI+aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi41LzwvdWxpbms+CisgICAgICAgICAgICAgICAgb3Igc2VuZCBhIGxldHRlciB0byBDcmVhdGl2ZSBDb21tb25zLCA0NDQgQ2FzdHJvIFN0cmVldCwKKyAgICAgICAgICAgICAgICBTdWl0ZSA5MDAsIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgOTQwNDEsIFVTQS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9sZWdhbG5vdGljZT4KKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbCIvPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9maWd1cmVzL2JpdGJha2UtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjkwMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvaHRtbC5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvaHRtbC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZGZkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9odG1sLmNzcwpAQCAtMCwwICsxLDI4MSBAQAorLyogRmV1aWxsZSBkZSBzdHlsZSBEb2NCb29rIGR1IHByb2pldCBUcmFkdWMub3JnICAgICAgICAgICAgICAgICovCisvKiBEb2NCb29rIENTUyBzdHlsZXNoZWV0IG9mIHRoZSBUcmFkdWMub3JnIHByb2plY3QgICAgICAgICAgICAgKi8KKworLyogKGMpIEplYW4tUGhpbGlwcGUgR3XpcmFyZCAtIDE0IGFv+3QgMjAwNCAgICAgICAgICAgICAgICAgICAgICovCisvKiAoYykgSmVhbi1QaGlsaXBwZSBHdelyYXJkIC0gMTQgQXVndXN0IDIwMDQgICAgICAgICAgICAgICAgICAgKi8KKworLyogQ2V0dGUgZmV1aWxsZSBkZSBzdHlsZSBlc3QgbGlicmUsIHZvdXMgcG91dmV6IGxhICAgICAgICAgICAgICovCisvKiByZWRpc3RyaWJ1ZXIgZXQgbGEgbW9kaWZpZXIgc2Vsb24gbGVzIHRlcm1lcyBkZSBsYSBMaWNlbmNlICAgKi8KKy8qIEFydCBMaWJyZS4gVm91cyB0cm91dmVyZXogdW4gZXhlbXBsYWlyZSBkZSBjZXR0ZSBMaWNlbmNlIHN1ciAqLworLyogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvUGV0aXQtZ3VpZGUtZHUtdHJhZHVjdGV1ci5odG1sI2xpY2VuY2UtYXJ0LWxpYnJlICovCisKKy8qIFRoaXMgd29yayBvZiBhcnQgaXMgZnJlZSwgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAqLworLyogbW9kaWZ5IGl0IGFjY29yZGluZyB0byB0ZXJtcyBvZiB0aGUgRnJlZSBBcnQgbGljZW5zZS4gWW91ICAgICovCisvKiB3aWxsIGZpbmQgYSBzcGVjaW1lbiBvZiB0aGlzIGxpY2Vuc2Ugb24gdGhlIENvcHlsZWZ0ICAgICAgICAgKi8KKy8qIEF0dGl0dWRlIHdlYiBzaXRlOiBodHRwOi8vYXJ0bGlicmUub3JnIGFzIHdlbGwgYXMgb24gb3RoZXIgICAqLworLyogc2l0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBGcmVuY2ggdmVyc2lvbiBvZiB0aGlzIGxpY2VuY2UgYXMgc2hvd24gKi8KKy8qIG9uIGh0dHA6Ly90aWdyZXJheWUub3JnL1BldGl0LWd1aWRlLWR1LXRyYWR1Y3RldXIuaHRtbCNsaWNlbmNlLWFydC1saWJyZSAqLworLyogaXMgb25seSBvZmZpY2lhbCBsaWNlbmNlIG9mIHRoaXMgZG9jdW1lbnQuIFRoZSBFbmdsaXNoICAgICAgICovCisvKiBpcyBvbmx5IHByb3ZpZGVkIHRvIGhlbHAgeW91IHVuZGVyc3RhbmQgdGhpcyBsaWNlbmNlLiAgICAgICAgKi8KKworLyogTGEgZGVybmnocmUgdmVyc2lvbiBkZSBjZXR0ZSBmZXVpbGxlIGRlIHN0eWxlIGVzdCB0b3Vqb3VycyAgICovCisvKiBkaXNwb25pYmxlIHN1cqA6IGh0dHA6Ly90aWdyZXJheWUub3JnL3N0eWxlLmNzcyAgICAgICAgICAgICAgKi8KKy8qIEVsbGUgZXN0IOlnYWxlbWVudCBkaXNwb25pYmxlIHN1cqA6ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogaHR0cDovL3d3dy50cmFkdWMub3JnL2RvY3MvSE9XVE8vbGVjdHVyZS9zdHlsZS5jc3MgICAgICAgICAgICovCisKKy8qIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHN0eWxlc2hlZXQgaXMgYXZhaWxhYmxlIGZyb206ICAgICAqLworLyogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvc3R5bGUuY3NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSBvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGh0dHA6Ly93d3cudHJhZHVjLm9yZy9kb2NzL0hPV1RPL2xlY3R1cmUvc3R5bGUuY3NzICAgICAgICAgICAqLworCisvKiBOJ2jpc2l0ZXogcGFzIOAgZW52b3llciB2b3MgY29tbWVudGFpcmVzIGV0IGNvcnJlY3Rpb25zIOAgICAgKi8KKy8qIEplYW4tUGhpbGlwcGUgR3XpcmFyZCA8amVhbi1waGlsaXBwZS5ndWVyYXJkQHRpZ3JlcmF5ZS5vcmc+ICAqLworCisvKiBQbGVhc2Ugc2VuZCBmZWVkYmFjayBhbmQgYnVnIHJlcG9ydHMgdG8gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEplYW4tUGhpbGlwcGUgR3XpcmFyZCA8amVhbi1waGlsaXBwZS5ndWVyYXJkQHRpZ3JlcmF5ZS5vcmc+ICAqLworCisvKiAkSWQ6IHN0eWxlLmNzcyx2IDEuMTQgMjAwNC8wOS8xMCAyMDoxMjowOSBmZXZyaWVyIEV4cCBmZXZyaWVyICQgKi8KKworLyogUHLpc2VudGF0aW9uIGfpbulyYWxlIGR1IGRvY3VtZW50ICovCisvKiBPdmVyYWxsIGRvY3VtZW50IHByZXNlbnRhdGlvbiAqLworCitib2R5IHsKKyAgICAvKgorICAgIGZvbnQtZmFtaWx5OiBBcG9sbGluZSwgIlVSVyBQYWxsYWRpbyBMIiwgR2FyYW1vbmQsIGpHYXJhbW9uZCwKKyAgICAgICAgICAgICAgICAgIkJpdHN0cmVhbSBDeWJlcmJpdCIsICJQYWxhdGlubyBMaW5vdHlwZSIsIHNlcmlmOworICAgICAqLworICAgIG1hcmdpbjogNyU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cit9CisKKy8qIFRhaWxsZSBkdSB0ZXh0ZSAqLworLyogVGV4dCBzaXplICovCisKKyogeyBmb250LXNpemU6IDEwMCU7IH0KKworLyogR2VzdGlvbiBkZXMgdGV4dGVzIG1pcyBlbiByZWxpZWYgaW1icmlxdelzICovCisvKiBFbWJlZGRlZCBlbXBoYXNpcyAqLworCitlbSB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQorZW0gZW0geyBmb250LXN0eWxlOiBub3JtYWw7IH0KK2VtIGVtIGVtIHsgZm9udC1zdHlsZTogaXRhbGljOyB9CisKKy8qIFRpdHJlcyAqLworLyogVGl0bGVzICovCisKK2gxIHsgZm9udC1zaXplOiAyMDAlOyBmb250LXdlaWdodDogOTAwOyB9CitoMiB7IGZvbnQtc2l6ZTogMTYwJTsgZm9udC13ZWlnaHQ6IDkwMDsgfQoraDMgeyBmb250LXNpemU6IDEzMCU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CitoNCB7IGZvbnQtc2l6ZTogMTE1JTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KK2g1IHsgZm9udC1zaXplOiAxMDglOyBmb250LXdlaWdodDogYm9sZDsgfQoraDYgeyAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CisKKy8qIE5vbSBkZSBmYW1pbGxlIGVuIHBldGl0ZXMgbWFqdXNjdWxlcyAodW5pcXVlbWVudCBlbiBmcmFu52FpcykgKi8KKy8qIExhc3QgbmFtZXMgaW4gc21hbGwgY2FwcyAoZm9yIEZyZW5jaCBvbmx5KSAqLworCisqW2NsYXNzfj0ic3VybmFtZSJdOmxhbmcoZnIpIHsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzOyB9CisKKy8qIEJsb2NzIGRlIGNpdGF0aW9uICovCisvKiBRdW90YXRpb24gYmxvY3MgKi8KKworZGl2W2NsYXNzfj0iYmxvY2txdW90ZSJdIHsKKyAgYm9yZGVyOiBzb2xpZCAycHggI0FBQTsKKyAgcGFkZGluZzogNXB4OworICBtYXJnaW46IDVweDsKK30KKworZGl2W2NsYXNzfj0iYmxvY2txdW90ZSJdID4gdGFibGUgeworICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIEJsb2NzIGxpdOlyYXV4oDogZm9uZCBncmlzIGNsYWlyICovCisvKiBMaXRlcmFsIGJsb2NzOiBsaWdodCBncmF5IGJhY2tncm91bmQgKi8KKworKltjbGFzc349ImxpdGVyYWxsYXlvdXQiXSB7CisgIGJhY2tncm91bmQ6ICNmMGYwZjA7CisgIHBhZGRpbmc6IDVweDsKKyAgbWFyZ2luOiA1cHg7Cit9CisKKy8qIFByb2dyYW1tZXMgZXQgY2FwdHVyZXMgdGV4dGWgOiBmb25kIGJsZXUgY2xhaXIgKi8KKy8qIExpc3RpbmcgYW5kIHRleHQgc2NyZWVuIHNuYXBzaG90czogbGlnaHQgYmx1ZSBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJwcm9ncmFtbGlzdGluZyJdLCAqW2NsYXNzfj0ic2NyZWVuIl0geworICBiYWNrZ3JvdW5kOiAjZjBmMGZmOworICBwYWRkaW5nOiA1cHg7CisgIG1hcmdpbjogNXB4OworfQorCisvKiBMZXMgdGV4dGVzIOAgcmVtcGxhY2VyIHNvbnQgc3VybGlnbulzIGVuIHZlcnQgcOJsZSAqLworLyogUmVwbGFjZWFibGUgdGV4dCBpbiBoaWdobGlnaHRlZCBpbiBwYWxlIGdyZWVuICovCisKKypbY2xhc3N+PSJyZXBsYWNlYWJsZSJdIHsgCisgICAgYmFja2dyb3VuZC1jb2xvcjogIzk4ZmI5ODsKKyAgICBmb250LXN0eWxlOiBub3JtYWw7IH0KKworLyogVGFibGVzoDogZm9uZHMgZ3JpcyBjbGFpciAmIGJvcmRzIHNpbXBsZXMgKi8KKy8qIFRhYmxlczogbGlnaHQgZ3JheSBiYWNrZ3JvdW5kIGFuZCBzb2xpZCBib3JkZXJzICovCisKKypbY2xhc3N+PSJ0YWJsZSJdICpbY2xhc3N+PSJ0aXRsZSJdIHsgd2lkdGg6MTAwJTsgYm9yZGVyOiAwcHg7IH0KKwordGFibGUgeworICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICBwYWRkaW5nOiAycHg7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKy8qIExpc3RlcyBzaW1wbGVzIGVuIHN0eWxlIHRhYmxlICovCisvKiBTaW1wbGVzIGxpc3RzIGluIHRhYmxlIHByZXNlbnRhdGlvbiAqLworCit0YWJsZVtjbGFzc349InNpbXBsZWxpc3QiXSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDsKKyAgICBtYXJnaW46IDVweDsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjQUFBOworfQorCit0YWJsZVtjbGFzc349InNpbXBsZWxpc3QiXSB0ZCB7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI0FBQTsKK30KKworLyogTGVzIHRhYmxlcyAqLworLyogVGFibGVzICovCisKKypbY2xhc3N+PSJ0YWJsZSJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOworICAgIGJvcmRlcjogc29saWQgMXB4ICNBQUE7Cit9CisqW2NsYXNzfj0iaW5mb3JtYWx0YWJsZSJdIHRhYmxlIHsgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDsgfQorCit0aCx0ZCB7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgcGFkZGluZzogMC4xZW0gMC4zZW07CisgICAgZW1wdHktY2VsbHM6IHNob3c7IAorfQorCisvKiBBbGlnbmVtZW50IGRlcyBjb2xvbm5lcyAqLworLyogQ29sdW5tcyBhbGlnbm1lbnQgKi8KKwordGRbYWxpZ249Y2VudGVyXSAsICB0aFthbGlnbj1jZW50ZXJdICB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQordGRbYWxpZ249cmlnaHRdICwgICB0aFthbGlnbj1yaWdodF0gICB7IHRleHQtYWxpZ246IHJpZ2h0OyB9Cit0ZFthbGlnbj1sZWZ0XSAsICAgIHRoW2FsaWduPWxlZnRdICAgIHsgdGV4dC1hbGlnbjogbGVmdDsgfQordGRbYWxpZ249anVzdGlmeV0gLCB0aFthbGlnbj1qdXN0aWZ5XSB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworLyogUGFzIGRlIG1hcmdlIGF1dG91ciBkZXMgaW1hZ2VzICovCisvKiBObyBpbnNpZGUgbWFyZ2lucyBmb3IgaW1hZ2VzICovCisKK2ltZyB7IGJvcmRlcjogMDsgfQorCisvKiBMZXMgbGllbnMgbmUgc29udCBwYXMgc291bGlnbulzICovCisvKiBObyB1bmRlcmxpbmVzIGZvciBsaW5rcyAqLworCis6bGluayAsIDp2aXNpdGVkICwgOmFjdGl2ZSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorCisvKiBQcnVkZW5jZaA6IGNhZHJlIGphdW5lIGV0IGZvbmQgamF1bmUgY2xhaXIgKi8KKy8qIENhdXRpb246IHllbGxvdyBib3JkZXIgYW5kIGxpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJjYXV0aW9uIl0geworICAgIGJvcmRlcjogc29saWQgMnB4IHllbGxvdzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349ImNhdXRpb24iXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQorfQorCisqW2NsYXNzfj0iY2F1dGlvbiJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogTm90ZSBpbXBvcnRhbnRloDogY2FkcmUgamF1bmUgZXQgZm9uZCBqYXVuZSBjbGFpciAqLworLyogSW1wb3J0YW50OiB5ZWxsb3cgYm9yZGVyIGFuZCBsaWdodCB5ZWxsb3cgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0iaW1wb3J0YW50Il0geworICAgIGJvcmRlcjogc29saWQgMnB4IHllbGxvdzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtOworICAgIG1hcmdpbjogNXB4OworfQorCisqW2NsYXNzfj0iaW1wb3J0YW50Il0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUKK30KKworKltjbGFzc349ImltcG9ydGFudCJdIHRhYmxlICB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIE1pc2UgZW4g6XZpZGVuY2WgOiB0ZXh0ZSBs6WfocmVtZW50IHBsdXMgZ3JhbmQgKi8KKy8qIEhpZ2hsaWdodHM6IHNsaWdodGx5IGxhcmdlciB0ZXh0cyAqLworCisqW2NsYXNzfj0iaGlnaGxpZ2h0cyJdIHsKKyAgICBmb250LXNpemU6ICAxMTAlOworfQorCisvKiBOb3RloDogY2FkcmUgYmxldSBldCBmb25kIGJsZXUgY2xhaXIgKi8KKy8qIE5vdGVzOiBibHVlIGJvcmRlciBhbmQgbGlnaHQgYmx1ZSBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJub3RlIl0gICB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggIzcwOTlDNTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGZmOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349Im5vdGUiXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQorfQorCisqW2NsYXNzfj0ibm90ZSJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGZmOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogQXN0dWNloDogY2FkcmUgdmVydCBldCBmb25kIHZlcnQgY2xhaXIgKi8KKy8qIFRpcDogZ3JlZW4gYm9yZGVyIGFuZCBsaWdodCBncmVlbiBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJ0aXAiXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggIzAwZmYwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmZmZmOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349InRpcCJdIHRoIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisqW2NsYXNzfj0idGlwIl0gdGFibGUgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGZmZmY7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKiBBdmVydGlzc2VtZW50oDogY2FkcmUgcm91Z2UgZXQgZm9uZCByb3VnZSBjbGFpciAqLworLyogV2FybmluZzogcmVkIGJvcmRlciBhbmQgbGlnaHQgcmVkIGJhY2tncm91bmQgKi8KKworKltjbGFzc349Indhcm5pbmciXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggI2ZmMDAwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMGYwOyAKKyAgICBwYWRkaW5nOiAxZW0gNnB4IDFlbSA7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKypbY2xhc3N+PSJ3YXJuaW5nIl0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisgICAgICAgICAgICAgICAgICAgIAorCisqW2NsYXNzfj0id2FybmluZyJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMGYwOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogRmluICovCisvKiBUaGUgRW5kICovCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS4xIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9iaXRiYWtlLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjOGQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvYml0YmFrZS4xCkBAIC0wLDAgKzEsMTQyIEBACisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleSwgRU1BQ1M6IC0qLSBucm9mZiAtKi0KKy5cIiBGaXJzdCBwYXJhbWV0ZXIsIE5BTUUsIHNob3VsZCBiZSBhbGwgY2FwcworLlwiIFNlY29uZCBwYXJhbWV0ZXIsIFNFQ1RJT04sIHNob3VsZCBiZSAxLTgsIG1heWJlIHcvIHN1YnNlY3Rpb24KKy5cIiBvdGhlciBwYXJhbWV0ZXJzIGFyZSBhbGxvd2VkOiBzZWUgbWFuKDcpLCBtYW4oMSkKKy5USCBCSVRCQUtFIDEgIk5vdmVtYmVyIDE5LCAyMDA2IgorLlwiIFBsZWFzZSBhZGp1c3QgdGhpcyBkYXRlIHdoZW5ldmVyIHJldmlzaW5nIHRoZSBtYW5wYWdlLgorLlwiCisuXCIgU29tZSByb2ZmIG1hY3JvcywgZm9yIHJlZmVyZW5jZToKKy5cIiAubmggICAgICAgIGRpc2FibGUgaHlwaGVuYXRpb24KKy5cIiAuaHkgICAgICAgIGVuYWJsZSBoeXBoZW5hdGlvbgorLlwiIC5hZCBsICAgICAgbGVmdCBqdXN0aWZ5CisuXCIgLmFkIGIgICAgICBqdXN0aWZ5IHRvIGJvdGggbGVmdCBhbmQgcmlnaHQgbWFyZ2lucworLlwiIC5uZiAgICAgICAgZGlzYWJsZSBmaWxsaW5nCisuXCIgLmZpICAgICAgICBlbmFibGUgZmlsbGluZworLlwiIC5iciAgICAgICAgaW5zZXJ0IGxpbmUgYnJlYWsKKy5cIiAuc3AgPG4+ICAgIGluc2VydCBuKzEgZW1wdHkgbGluZXMKKy5cIiBmb3IgbWFucGFnZS1zcGVjaWZpYyBtYWNyb3MsIHNlZSBtYW4oNykKKy5TSCBOQU1FCitCaXRCYWtlIFwtIHNpbXBsZSB0b29sIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRhc2tzCisuU0ggU1lOT1BTSVMKKy5CIGJpdGJha2UKKy5SSSBbIG9wdGlvbnMgXSAiIHBhY2thZ2VuYW1lcyIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGlzIG1hbnVhbCBwYWdlIGRvY3VtZW50cyBicmllZmx5IHRoZQorLkIgYml0YmFrZQorY29tbWFuZC4KKy5QUAorLlwiIFRlWCB1c2VycyBtYXkgYmUgbW9yZSBjb21mb3J0YWJsZSB3aXRoIHRoZSBcZkI8d2hhdGV2ZXI+XGZQIGFuZAorLlwiIFxmSTx3aGF0ZXZlcj5cZlAgZXNjYXBlIHNlcXVlbmNlcyB0byBpbnZvZGUgYm9sZCBmYWNlIGFuZCBpdGFsaWNzLCAKKy5cIiByZXNwZWN0aXZlbHkuCitcZkJiaXRiYWtlXGZQIGlzIGEgcHJvZ3JhbSB0aGF0IGV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzayAoZGVmYXVsdCBpcyAnYnVpbGQnKQorZm9yIGEgZ2l2ZW4gc2V0IG9mIEJpdEJha2UgZmlsZXMuCisuYnIKK0l0IGV4cGVjdHMgdGhhdCBCQkZJTEVTIGlzIGRlZmluZWQsIHdoaWNoIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdG8KK2JlIGV4ZWN1dGVkLiBCQkZJTEVTIGRvZXMgc3VwcG9ydCB3aWxkY2FyZHMuCisuYnIKK0RlZmF1bHQgQkJGSUxFUyBhcmUgdGhlIC5iYiBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisuU0ggT1BUSU9OUworVGhpcyBwcm9ncmFtIGZvbGxvdyB0aGUgdXN1YWwgR05VIGNvbW1hbmQgbGluZSBzeW50YXgsIHdpdGggbG9uZworb3B0aW9ucyBzdGFydGluZyB3aXRoIHR3byBkYXNoZXMgKGAtJykuCisuVFAKKy5CIFwtaCwgXC1cLWhlbHAKK1Nob3cgc3VtbWFyeSBvZiBvcHRpb25zLgorLlRQCisuQiBcLVwtdmVyc2lvbgorU2hvdyB2ZXJzaW9uIG9mIHByb2dyYW0uCisuVFAKKy5CIFwtYkJVSUxERklMRSwgXC1cLWJ1aWxkZmlsZT1CVUlMREZJTEUKK2V4ZWN1dGUgdGhlIHRhc2sgYWdhaW5zdCB0aGlzIC5iYiBmaWxlLCByYXRoZXIgdGhhbiBhIHBhY2thZ2UgZnJvbSBCQkZJTEVTLgorLlRQCisuQiBcLWssIFwtXC1jb250aW51ZQorY29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlIHRhcmdldCB0aGF0IGZhaWxlZCwgYW5kCit0aG9zZSB0aGF0IGRlcGVuZCBvbiBpdCwgY2Fubm90IGJlIHJlbWFkZSwgdGhlIG90aGVyIGRlcGVuZGVuY2llcyBvZiB0aGVzZQordGFyZ2V0cyBjYW4gYmUgcHJvY2Vzc2VkIGFsbCB0aGUgc2FtZS4KKy5UUAorLkIgXC1hLCBcLVwtdHJ5YWx0Y29uZmlncworY29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZSBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisuVFAKKy5CIFwtZiwgXC1cLWZvcmNlCitmb3JjZSBydW4gb2Ygc3BlY2lmaWVkIGNtZCwgcmVnYXJkbGVzcyBvZiBzdGFtcCBzdGF0dXMKKy5UUAorLkIgXC1pLCBcLVwtaW50ZXJhY3RpdmUKK2Ryb3AgaW50byB0aGUgaW50ZXJhY3RpdmUgbW9kZSBhbHNvIGNhbGxlZCB0aGUgQml0QmFrZSBzaGVsbC4KKy5UUAorLkIgXC1jQ01ELCBcLVwtY21kPUNNRAorU3BlY2lmeSB0YXNrIHRvIGV4ZWN1dGUuIE5vdGUgdGhhdCB0aGlzIG9ubHkgZXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIGZvcgordGhlIHByb3ZpZGVlIGFuZCB0aGUgcGFja2FnZXMgaXQgZGVwZW5kcyBvbiwgaS5lLiAnY29tcGlsZScgZG9lcyBub3QgaW1wbGljaXRseQorY2FsbCBzdGFnZSBmb3IgdGhlIGRlcGVuZGVuY2llcyAoSU9XOiB1c2Ugb25seSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcpLgorRGVwZW5kaW5nIG9uIHRoZSBiYXNlLmJiY2xhc3MgYSBsaXN0dGFza3MgdGFzayBpcyBkZWZpbmVkIGFuZCB3aWxsIHNob3cKK2F2YWlsYWJsZSB0YXNrcy4KKy5UUAorLkIgXC1yRklMRSwgXC1cLXJlYWQ9RklMRSAKK3JlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYKKy5UUAorLkIgXC12LCBcLVwtdmVyYm9zZQorb3V0cHV0IG1vcmUgY2hpdC1jaGF0IHRvIHRoZSB0ZXJtaW5hbAorLlRQCisuQiBcLUQsIFwtXC1kZWJ1ZworSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlIHRoYW4gb25jZS4KKy5UUAorLkIgXC1uLCBcLVwtZHJ5LXJ1bgorZG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zCisuVFAKKy5CIFwtcCwgXC1cLXBhcnNlLW9ubHkKK3F1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgZmlsZXMgKGRldmVsb3BlcnMgb25seSkKKy5UUAorLkIgXC1zLCBcLVwtc2hvdy12ZXJzaW9ucworc2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHBhY2thZ2VzCisuVFAKKy5CIFwtZSwgXC1cLWVudmlyb25tZW50CitzaG93IHRoZSBnbG9iYWwgb3IgcGVyLXJlY2lwZSBlbnZpcm9ubWVudCAodGhpcyBpcyB3aGF0IHVzZWQgdG8gYmUgYmJyZWFkKQorLlRQCisuQiBcLWcsIFwtXC1ncmFwaHZpegorZW1pdCB0aGUgZGVwZW5kZW5jeSB0cmVlcyBvZiB0aGUgc3BlY2lmaWVkIHBhY2thZ2VzIGluIHRoZSBkb3Qgc3ludGF4CisuVFAKKy5CIFwtSUlHTk9SRURcX0RPVFxfREVQUywgXC1cLWlnbm9yZS1kZXBzPUlHTk9SRURfRE9UX0RFUFMKK1N0b3AgcHJvY2Vzc2luZyBhdCB0aGUgZ2l2ZW4gbGlzdCBvZiBkZXBlbmRlbmNpZXMgd2hlbiBnZW5lcmF0aW5nIGRlcGVuZGVuY3kKK2dyYXBocy4gVGhpcyBjYW4gaGVscCB0byBtYWtlIHRoZSBncmFwaCBtb3JlIGFwcGVhbGluZworLlRQCisuQiBcLWxERUJVR19ET01BSU5TLCBcLVwtbG9nLWRvbWFpbnM9REVCVUdfRE9NQUlOUworU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucworLlRQCisuQiBcLVAsIFwtXC1wcm9maWxlCitwcm9maWxlIHRoZSBjb21tYW5kIGFuZCBwcmludCBhIHJlcG9ydAorLlRQCisuQiBcLXVVSSwgXC1cLXVpPVVJCitVc2VyIGludGVyZmFjZSB0byB1c2UuIEN1cnJlbnRseSwgaG9iLCBkZXBleHAsIGdvZ2dsZSBvciBuY3Vyc2VzIGNhbiBiZSBzcGVjaWZpZWQgYXMgVUkuCisuVFAKKy5CIFwtdFNFUlZFUlRZUEUsIFwtXC1zZXJ2ZXJ0eXBlPVNFUlZFUlRZUEUKK0Nob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBub25lLCBwcm9jZXNzIG9yIHhtbHJwYy4KKy5UUAorLkIgXC1cLXJldmlzaW9ucy1jaGFuZ2VkCitTZXQgdGhlIGV4aXQgY29kZSBkZXBlbmRpbmcgb24gd2hldGhlciB1cHN0cmVhbSBmbG9hdGluZyByZXZpc2lvbnMgaGF2ZSBjaGFuZ2VkIG9yIG5vdC4KKy5UUAorLkIgXC1cLXNlcnZlci1vbmx5CitSdW4gYml0YmFrZSB3aXRob3V0IFVJLCAgdGhlIGZyb250ZW5kIGNhbiBjb25uZWN0IHdpdGggYml0YmFrZSBzZXJ2ZXIgaXRzZWxmLgorLlRQCisuQiBcLUJCSU5ELCBcLVwtYmluZD1CSU5ECitUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4KKy5UUAorLkIgXC1cLW5vXC1zZXRzY2VuZQorRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MsIGZvcmNlcyBidWlsZHMuCisKKy5TSCBFTlZJUk9OTUVOVCBWQVJJQUJMRVMKK2JpdGJha2UgdXNlcyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjb250cm9sIGl0cworb3BlcmF0aW9uOgorLlRQCisuQiBCSVRCQUtFX1VJCitUaGUgYml0YmFrZSB1c2VyIGludGVyZmFjZTsgb3ZlcnJpZGRlbiBieSB0aGUgXGZCLXVcZlAgY29tbWFuZGxpbmUgb3B0aW9uLgorCisuU0ggQVVUSE9SUworQml0QmFrZSB3YXMgd3JpdHRlbiBieSAKK1BoaWwgQmx1bmRlbGwsCitIb2xnZXIgRnJleXRoZXIsCitDaHJpcyBMYXJzb24sCitNaWNrZXkgTGF1ZXIsCitSaWNoYXJkIFB1cmRpZSwKK0hvbGdlciBTY2h1cmlnCisuUFAKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW5AaHJ3Lm9uZS5wbD4KK2ZvciB0aGUgRGViaWFuIHByb2plY3QgKGJ1dCBtYXkgYmUgdXNlZCBieSBvdGhlcnMpLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy9wb2t5LmVudCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvcG9reS5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzMmUxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvcG9reS5lbnQKQEAgLTAsMCArMSw1OSBAQAorPCFFTlRJVFkgRElTVFJPICIxLjQiPgorPCFFTlRJVFkgRElTVFJPX05BTUUgInRiZCI+Cis8IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMS40Ij4KKzwhRU5USVRZIFBPS1lWRVJTSU9OICI4LjAiPgorPCFFTlRJVFkgWU9DVE9fUE9LWSAicG9reS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjsiPgorPCFFTlRJVFkgQ09QWVJJR0hUX1lFQVIgIjIwMTAtMjAxMyI+Cis8IUVOVElUWSBZT0NUT19ETF9VUkwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19IT01FX1VSTCAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0xJU1RTX1VSTCAiaHR0cDovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQlVHWklMTEFfVVJMICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19XSUtJX1VSTCAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQUJfVVJMICJodHRwOi8vYXV0b2J1aWxkZXIueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19HSVRfVVJMICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQURUUkVQT19VUkwgImh0dHA6Ly9hZHRyZXBvLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgT0VfSE9NRV9VUkwgImh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPRV9MSVNUU19VUkwgImh0dHA6Ly9saXN0cy5saW51eHRvZ28ub3JnL2NnaS1iaW4vbWFpbG1hbiI+Cis8IUVOVElUWSBPRV9ET0NTX1VSTCAiaHR0cDovL2RvY3Mub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPSF9IT01FX1VSTCAiaHR0cDovL28taGFuZC5jb20iPgorPCFFTlRJVFkgQklUQkFLRV9IT01FX1VSTCAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2JpdGJha2UvIj4KKzwhRU5USVRZIEVDTElQU0VfTUFJTl9VUkwgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzIj4KKzwhRU5USVRZIEVDTElQU0VfRExfVVJMICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmciPgorPCFFTlRJVFkgRUNMSVBTRV9ETF9QTFVHSU5fVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9lY2xpcHNlLXBsdWdpbi8mRElTVFJPOyI+Cis8IUVOVElUWSBFQ0xJUFNFX1VQREFURVNfVVJMICImRUNMSVBTRV9ETF9VUkw7L3RtL3VwZGF0ZXMvMy4zIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9pbmRpZ28iPgorPCFFTlRJVFkgRUNMSVBTRV9KVU5PX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9qdW5vIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX0NEVF9VUkwgIiZFQ0xJUFNFX0RMX1VSTDt0b29scy9jZHQvcmVsZWFzZXMvaW5kaWdvIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfVVJMICImWU9DVE9fSE9NRV9VUkw7L2RvY3MiPgorPCFFTlRJVFkgWU9DVE9fU09VUkNFU19VUkwgIiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8iPgorPCFFTlRJVFkgWU9DVE9fQUJfUE9SVF9VUkwgIiZZT0NUT19BQl9VUkw7OjgwMTAiPgorPCFFTlRJVFkgWU9DVE9fQUJfTklHSFRMWV9VUkwgIiZZT0NUT19BQl9VUkw7L25pZ2h0bHkvIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9wb2t5LyI+Cis8IUVOVElUWSBZT0NUT19SRUxFQVNFX0RMX1VSTCAiJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMveW9jdG8veW9jdG8tJkRJU1RSTzsiPgorPCFFTlRJVFkgWU9DVE9fVE9PTENIQUlOX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy90b29sY2hhaW4vIj4KKzwhRU5USVRZIFlPQ1RPX0VDTElQU0VfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7L2VjbGlwc2UtcGx1Z2luL2luZGlnbzsiPgorPCFFTlRJVFkgWU9DVE9fQURUSU5TVEFMTEVSX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9hZHRfaW5zdGFsbGVyIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7LyZZT0NUT19QT0tZOy50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX01BQ0hJTkVTX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyI+Cis8IUVOVElUWSBZT0NUT19RRU1VX0RMX1VSTCAiJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsvcWVtdSI+Cis8IUVOVElUWSBZT0NUT19QWVRIT04taTY4Nl9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS1pNjg2LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLXg4Nl82NF9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS14ODZfNjQudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1FTX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQURUX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2FkdC1tYW51YWwvYWR0LW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfUkVGX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQlNQX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2JzcC1ndWlkZS9ic3AtZ3VpZGUuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0RFVl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0tFUk5FTF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19BRFRQQVRIX0RJUiAiL29wdC9wb2t5LyZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVEFSQkFMTCAiJllPQ1RPX1BPS1k7LnRhci5iejIiPgorPCFFTlRJVFkgT0VfSU5JVF9QQVRIICImWU9DVE9fUE9LWTsvb2UtaW5pdC1idWlsZC1lbnYiPgorPCFFTlRJVFkgT0VfSU5JVF9GSUxFICJvZS1pbml0LWJ1aWxkLWVudiI+Cis8IUVOVElUWSBVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgd2dldCBnaXQtY29yZSBkaWZmc3RhdCB1bnppcCB0ZXhpbmZvIFwKKyAgICAgYnVpbGQtZXNzZW50aWFsIGNocnBhdGgiPgorPCFFTlRJVFkgRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIG1ha2Ugd2dldCB0YXIgYnppcDIgZ3ppcCBweXRob24gdW56aXAgcGVybCBwYXRjaCBcCisgICAgIGRpZmZ1dGlscyBkaWZmc3RhdCBnaXQgY3BwIGdjYyBnY2MtYysrIGVnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggXAorICAgICBjY2FjaGUiPgorPCFFTlRJVFkgT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgInB5dGhvbiBnY2MgZ2NjLWMrKyBnaXQgY2hycGF0aCBtYWtlIHdnZXQgcHl0aG9uLXhtbCBcCisgICAgIGRpZmZzdGF0IHRleGluZm8gcHl0aG9uLWN1cnNlcyI+Cis8IUVOVElUWSBDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgbWFrZSB3Z2V0IHRhciBiemlwMiBnemlwIHB5dGhvbiB1bnppcCBwZXJsIHBhdGNoIFwKKyAgICAgZGlmZnV0aWxzIGRpZmZzdGF0IGdpdCBjcHAgZ2NjIGdjYy1jKysgZ2xpYmMtZGV2ZWwgdGV4aW5mbyBjaHJwYXRoIj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYS50dGYgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Y2Q2YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYS54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODIwNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2FuczwvZm9udC1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj45Mjg8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTIzNTwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xODM8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjEyODc8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zMjwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAwIi8+PHd4IHc9IjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDU5Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iOTUwIi8+PHd4IHc9Ijc3OSIvPjx3eCB3PSIyNzQiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjM5MCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MzAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg2Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI3NzAiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjU3NSIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNzUxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNjU1Ii8+PHd4IHc9IjU1NyIvPjx3eCB3PSI4NjIiLz48d3ggdz0iNzQ4Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI2MDMiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjY5NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjczMSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iOTg4Ii8+PHd4IHc9IjY4NSIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjM5MCIvPjx3eCB3PSIzMzYiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MTUiLz48d3ggdz0iMzUyIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI1NzkiLz48d3ggdz0iMjc3Ii8+PHd4IHc9Ijk3NCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNDExIi8+PHd4IHc9IjUyMCIvPjx3eCB3PSIzOTIiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI4MTciLz48d3ggdz0iNTkxIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI1MjQiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI3NDgiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjczMSIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1ODkiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI5NzQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjgzMyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUxNyIvPjx3eCB3PSI2NzMiLz48d3ggdz0iNzU2Ii8+PHd4IHc9IjU4OCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNDcxIi8+PHd4IHc9IjQ3MSIvPjx3eCB3PSI3NjQiLz48d3ggdz0iOTgxIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI1MzAiLz48d3ggdz0iNDAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2NjgiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSIxMDY5Ii8+PHd4IHc9IjEwMjIiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjUxOCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI0OTQiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSIxNjYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjM5OSIvPjx3eCB3PSIzOTkiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSI1MDAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI1MTgiLz48d3ggdz0iMTM0MSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzg3Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjczMSIvPjx3eCB3PSIyNzciLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjU2MiIvPjx3eCB3PSIyODQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iNTI0Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNjA0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDAwIi8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI5NjkiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PGtlcm5pbmcga3B4MT0iMjQ2Ij48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNSI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDMiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTYiPjxwYWlyIGtlcm49IjM2IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIzNiIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iMzYiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSI1NSIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMjYiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTEyIj48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMyI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjUxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4NyI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTQ0Ij48cGFpciBrZXJuPSItNDAiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTkiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTUiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzMiPjxwYWlyIGtlcm49IjMxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTYwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0OSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjQiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE2OSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49IjczIiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjAxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNjAiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODUiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iNDEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI2MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzQiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTAwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMiI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yNjIiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjEyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iNTciLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1OCI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgyIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODYiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3NSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEwMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMjkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NyI+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTg2IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTgxIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDkiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIwIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjQ5Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIyNyI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xNjAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTA0Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTk5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTQiPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTgwIj48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MyIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xODgiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjUxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI1MyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMjM2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MyI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNDAiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMzciPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzMiPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjExIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzAiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUyIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTI1Ij48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MiI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItODYiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExNSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MCI+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTEwNCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTUiPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9Ijg2Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjI1MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjIyOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE1Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyOSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NSI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3MyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE5NyI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii05NSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzYiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTIiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijg5Ij48cGFpciBrZXJuPSItNzciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMTA0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjEzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTA0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQudHRmIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9CZC50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNjU0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQueG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9CZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzMzEwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyBtZXRyaWNzLXZlcnNpb249IjIiIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zTW9uby1Cb2xkPC9mb250LW5hbWU+PGZ1bGwtbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8gQm9sZDwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xOTwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+NjA1PC9yaWdodD48dG9wPjkyODwvdG9wPjwvYmJveD48ZmxhZ3M+MzQ8L2ZsYWdzPjxzdGVtdj4wPC9zdGVtdj48aXRhbGljYW5nbGU+MDwvaXRhbGljYW5nbGU+PHN1YnR5cGU+VFlQRTA8L3N1YnR5cGU+PG11bHRpYnl0ZS1leHRyYXM+PGNpZC10eXBlPkNJREZvbnRUeXBlMjwvY2lkLXR5cGU+PGRlZmF1bHQtd2lkdGg+MDwvZGVmYXVsdC13aWR0aD48YmZyYW5nZXM+PGJmIGdpPSIzIiB1ZT0iMTI2IiB1cz0iMzIiLz48YmYgZ2k9IjE3MiIgdWU9IjE2MCIgdXM9IjE2MCIvPjxiZiBnaT0iMTYzIiB1ZT0iMTYxIiB1cz0iMTYxIi8+PGJmIGdpPSIxMzIiIHVlPSIxNjMiIHVzPSIxNjIiLz48YmYgZ2k9IjE4OSIgdWU9IjE2NCIgdXM9IjE2NCIvPjxiZiBnaT0iMTUwIiB1ZT0iMTY1IiB1cz0iMTY1Ii8+PGJmIGdpPSIyMzEiIHVlPSIxNjYiIHVzPSIxNjYiLz48YmYgZ2k9IjEzNCIgdWU9IjE2NyIgdXM9IjE2NyIvPjxiZiBnaT0iMTQyIiB1ZT0iMTY4IiB1cz0iMTY4Ii8+PGJmIGdpPSIxMzkiIHVlPSIxNjkiIHVzPSIxNjkiLz48YmYgZ2k9IjE1NyIgdWU9IjE3MCIgdXM9IjE3MCIvPjxiZiBnaT0iMTY5IiB1ZT0iMTcxIiB1cz0iMTcxIi8+PGJmIGdpPSIxNjQiIHVlPSIxNzIiIHVzPSIxNzIiLz48YmYgZ2k9IjI1NiIgdWU9IjE3MyIgdXM9IjE3MyIvPjxiZiBnaT0iMTM4IiB1ZT0iMTc0IiB1cz0iMTc0Ii8+PGJmIGdpPSIyMTciIHVlPSIxNzUiIHVzPSIxNzUiLz48YmYgZ2k9IjEzMSIgdWU9IjE3NiIgdXM9IjE3NiIvPjxiZiBnaT0iMTQ3IiB1ZT0iMTc3IiB1cz0iMTc3Ii8+PGJmIGdpPSIyNDEiIHVlPSIxNzkiIHVzPSIxNzgiLz48YmYgZ2k9IjE0MSIgdWU9IjE4MCIgdXM9IjE4MCIvPjxiZiBnaT0iMTUxIiB1ZT0iMTgxIiB1cz0iMTgxIi8+PGJmIGdpPSIxMzYiIHVlPSIxODIiIHVzPSIxODIiLz48YmYgZ2k9IjE5NSIgdWU9IjE4MyIgdXM9IjE4MyIvPjxiZiBnaT0iMjIxIiB1ZT0iMTg0IiB1cz0iMTg0Ii8+PGJmIGdpPSIyNDAiIHVlPSIxODUiIHVzPSIxODUiLz48YmYgZ2k9IjE1OCIgdWU9IjE4NiIgdXM9IjE4NiIvPjxiZiBnaT0iMTcwIiB1ZT0iMTg3IiB1cz0iMTg3Ii8+PGJmIGdpPSIyNDMiIHVlPSIxOTAiIHVzPSIxODgiLz48YmYgZ2k9IjE2MiIgdWU9IjE5MSIgdXM9IjE5MSIvPjxiZiBnaT0iMTczIiB1ZT0iMTkyIiB1cz0iMTkyIi8+PGJmIGdpPSIyMDEiIHVlPSIxOTMiIHVzPSIxOTMiLz48YmYgZ2k9IjE5OSIgdWU9IjE5NCIgdXM9IjE5NCIvPjxiZiBnaT0iMTc0IiB1ZT0iMTk1IiB1cz0iMTk1Ii8+PGJmIGdpPSI5OCIgdWU9IjE5NyIgdXM9IjE5NiIvPjxiZiBnaT0iMTQ0IiB1ZT0iMTk4IiB1cz0iMTk4Ii8+PGJmIGdpPSIxMDAiIHVlPSIxOTkiIHVzPSIxOTkiLz48YmYgZ2k9IjIwMyIgdWU9IjIwMCIgdXM9IjIwMCIvPjxiZiBnaT0iMTAxIiB1ZT0iMjAxIiB1cz0iMjAxIi8+PGJmIGdpPSIyMDAiIHVlPSIyMDIiIHVzPSIyMDIiLz48YmYgZ2k9IjIwMiIgdWU9IjIwMyIgdXM9IjIwMyIvPjxiZiBnaT0iMjA3IiB1ZT0iMjA0IiB1cz0iMjA0Ii8+PGJmIGdpPSIyMDQiIHVlPSIyMDciIHVzPSIyMDUiLz48YmYgZ2k9IjIzMiIgdWU9IjIwOCIgdXM9IjIwOCIvPjxiZiBnaT0iMTAyIiB1ZT0iMjA5IiB1cz0iMjA5Ii8+PGJmIGdpPSIyMTAiIHVlPSIyMTAiIHVzPSIyMTAiLz48YmYgZ2k9IjIwOCIgdWU9IjIxMiIgdXM9IjIxMSIvPjxiZiBnaT0iMTc1IiB1ZT0iMjEzIiB1cz0iMjEzIi8+PGJmIGdpPSIxMDMiIHVlPSIyMTQiIHVzPSIyMTQiLz48YmYgZ2k9IjIzOSIgdWU9IjIxNSIgdXM9IjIxNSIvPjxiZiBnaT0iMTQ1IiB1ZT0iMjE2IiB1cz0iMjE2Ii8+PGJmIGdpPSIyMTMiIHVlPSIyMTciIHVzPSIyMTciLz48YmYgZ2k9IjIxMSIgdWU9IjIxOSIgdXM9IjIxOCIvPjxiZiBnaT0iMTA0IiB1ZT0iMjIwIiB1cz0iMjIwIi8+PGJmIGdpPSIyMzQiIHVlPSIyMjEiIHVzPSIyMjEiLz48YmYgZ2k9IjIzNiIgdWU9IjIyMiIgdXM9IjIyMiIvPjxiZiBnaT0iMTM3IiB1ZT0iMjIzIiB1cz0iMjIzIi8+PGJmIGdpPSIxMDYiIHVlPSIyMjQiIHVzPSIyMjQiLz48YmYgZ2k9IjEwNSIgdWU9IjIyNSIgdXM9IjIyNSIvPjxiZiBnaT0iMTA3IiB1ZT0iMjI2IiB1cz0iMjI2Ii8+PGJmIGdpPSIxMDkiIHVlPSIyMjciIHVzPSIyMjciLz48YmYgZ2k9IjEwOCIgdWU9IjIyOCIgdXM9IjIyOCIvPjxiZiBnaT0iMTEwIiB1ZT0iMjI5IiB1cz0iMjI5Ii8+PGJmIGdpPSIxNjAiIHVlPSIyMzAiIHVzPSIyMzAiLz48YmYgZ2k9IjExMSIgdWU9IjIzMSIgdXM9IjIzMSIvPjxiZiBnaT0iMTEzIiB1ZT0iMjMyIiB1cz0iMjMyIi8+PGJmIGdpPSIxMTIiIHVlPSIyMzMiIHVzPSIyMzMiLz48YmYgZ2k9IjExNCIgdWU9IjIzNSIgdXM9IjIzNCIvPjxiZiBnaT0iMTE3IiB1ZT0iMjM2IiB1cz0iMjM2Ii8+PGJmIGdpPSIxMTYiIHVlPSIyMzciIHVzPSIyMzciLz48YmYgZ2k9IjExOCIgdWU9IjIzOSIgdXM9IjIzOCIvPjxiZiBnaT0iMjMzIiB1ZT0iMjQwIiB1cz0iMjQwIi8+PGJmIGdpPSIxMjAiIHVlPSIyNDEiIHVzPSIyNDEiLz48YmYgZ2k9IjEyMiIgdWU9IjI0MiIgdXM9IjI0MiIvPjxiZiBnaT0iMTIxIiB1ZT0iMjQzIiB1cz0iMjQzIi8+PGJmIGdpPSIxMjMiIHVlPSIyNDQiIHVzPSIyNDQiLz48YmYgZ2k9IjEyNSIgdWU9IjI0NSIgdXM9IjI0NSIvPjxiZiBnaT0iMTI0IiB1ZT0iMjQ2IiB1cz0iMjQ2Ii8+PGJmIGdpPSIxODQiIHVlPSIyNDciIHVzPSIyNDciLz48YmYgZ2k9IjE2MSIgdWU9IjI0OCIgdXM9IjI0OCIvPjxiZiBnaT0iMTI3IiB1ZT0iMjQ5IiB1cz0iMjQ5Ii8+PGJmIGdpPSIxMjYiIHVlPSIyNTAiIHVzPSIyNTAiLz48YmYgZ2k9IjEyOCIgdWU9IjI1MiIgdXM9IjI1MSIvPjxiZiBnaT0iMjM1IiB1ZT0iMjUzIiB1cz0iMjUzIi8+PGJmIGdpPSIyMzciIHVlPSIyNTQiIHVzPSIyNTQiLz48YmYgZ2k9IjE4NiIgdWU9IjI1NSIgdXM9IjI1NSIvPjxiZiBnaT0iMjUxIiB1ZT0iMjYzIiB1cz0iMjYyIi8+PGJmIGdpPSIyNTMiIHVlPSIyNjkiIHVzPSIyNjgiLz48YmYgZ2k9IjAiIHVlPSIyNzAiIHVzPSIyNzAiLz48YmYgZ2k9IjAiIHVlPSIyNzEiIHVzPSIyNzEiLz48YmYgZ2k9IjAiIHVlPSIyNzIiIHVzPSIyNzIiLz48YmYgZ2k9IjI1NSIgdWU9IjI3MyIgdXM9IjI3MyIvPjxiZiBnaT0iMjQ2IiB1ZT0iMjg3IiB1cz0iMjg2Ii8+PGJmIGdpPSIyNDgiIHVlPSIzMDQiIHVzPSIzMDQiLz48YmYgZ2k9IjIxNCIgdWU9IjMwNSIgdXM9IjMwNSIvPjxiZiBnaT0iMjI1IiB1ZT0iMzIyIiB1cz0iMzIxIi8+PGJmIGdpPSIxNzYiIHVlPSIzMzkiIHVzPSIzMzgiLz48YmYgZ2k9IjI0OSIgdWU9IjM1MSIgdXM9IjM1MCIvPjxiZiBnaT0iMjI3IiB1ZT0iMzUzIiB1cz0iMzUyIi8+PGJmIGdpPSIxODciIHVlPSIzNzYiIHVzPSIzNzYiLz48YmYgZ2k9IjIyOSIgdWU9IjM4MiIgdXM9IjM4MSIvPjxiZiBnaT0iMTY2IiB1ZT0iNDAyIiB1cz0iNDAyIi8+PGJmIGdpPSIyMTUiIHVlPSI3MTAiIHVzPSI3MTAiLz48YmYgZ2k9IjIyNCIgdWU9IjcxMSIgdXM9IjcxMSIvPjxiZiBnaT0iMjE4IiB1ZT0iNzMwIiB1cz0iNzI4Ii8+PGJmIGdpPSIyMjMiIHVlPSI3MzEiIHVzPSI3MzEiLz48YmYgZ2k9IjIxNiIgdWU9IjczMiIgdXM9IjczMiIvPjxiZiBnaT0iMjIyIiB1ZT0iNzMzIiB1cz0iNzMzIi8+PGJmIGdpPSIxNTkiIHVlPSI5MzciIHVzPSI5MzciLz48YmYgZ2k9IjE1NSIgdWU9Ijk2MCIgdXM9Ijk2MCIvPjxiZiBnaT0iMTc4IiB1ZT0iODIxMiIgdXM9IjgyMTEiLz48YmYgZ2k9IjAiIHVlPSI4MjEzIiB1cz0iODIxMyIvPjxiZiBnaT0iMCIgdWU9IjgyMTQiIHVzPSI4MjE0Ii8+PGJmIGdpPSIwIiB1ZT0iODIxNSIgdXM9IjgyMTUiLz48YmYgZ2k9IjE4MiIgdWU9IjgyMTciIHVzPSI4MjE2Ii8+PGJmIGdpPSIxOTYiIHVlPSI4MjE4IiB1cz0iODIxOCIvPjxiZiBnaT0iMCIgdWU9IjgyMTkiIHVzPSI4MjE5Ii8+PGJmIGdpPSIxODAiIHVlPSI4MjIxIiB1cz0iODIyMCIvPjxiZiBnaT0iMTk3IiB1ZT0iODIyMiIgdXM9IjgyMjIiLz48YmYgZ2k9IjAiIHVlPSI4MjIzIiB1cz0iODIyMyIvPjxiZiBnaT0iMTMwIiB1ZT0iODIyNCIgdXM9IjgyMjQiLz48YmYgZ2k9IjE5NCIgdWU9IjgyMjUiIHVzPSI4MjI1Ii8+PGJmIGdpPSIxMzUiIHVlPSI4MjI2IiB1cz0iODIyNiIvPjxiZiBnaT0iMCIgdWU9IjgyMjciIHVzPSI4MjI3Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOCIgdXM9IjgyMjgiLz48YmYgZ2k9IjAiIHVlPSI4MjI5IiB1cz0iODIyOSIvPjxiZiBnaT0iMTcxIiB1ZT0iODIzMCIgdXM9IjgyMzAiLz48YmYgZ2k9IjE5OCIgdWU9IjgyNDAiIHVzPSI4MjQwIi8+PGJmIGdpPSIxOTAiIHVlPSI4MjUwIiB1cz0iODI0OSIvPjxiZiBnaT0iMjU4IiB1ZT0iODM2NCIgdXM9IjgzNjQiLz48YmYgZ2k9IjE0MCIgdWU9Ijg0ODIiIHVzPSI4NDgyIi8+PGJmIGdpPSIxNTIiIHVlPSI4NzA2IiB1cz0iODcwNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MDciIHVzPSI4NzA3Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOCIgdXM9Ijg3MDgiLz48YmYgZ2k9IjAiIHVlPSI4NzA5IiB1cz0iODcwOSIvPjxiZiBnaT0iMTY4IiB1ZT0iODcxMCIgdXM9Ijg3MTAiLz48YmYgZ2k9IjE1NCIgdWU9Ijg3MTkiIHVzPSI4NzE5Ii8+PGJmIGdpPSIwIiB1ZT0iODcyMCIgdXM9Ijg3MjAiLz48YmYgZ2k9IjE1MyIgdWU9Ijg3MjEiIHVzPSI4NzIxIi8+PGJmIGdpPSIyMzgiIHVlPSI4NzIyIiB1cz0iODcyMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjMiIHVzPSI4NzIzIi8+PGJmIGdpPSIwIiB1ZT0iODcyNCIgdXM9Ijg3MjQiLz48YmYgZ2k9IjE4OCIgdWU9Ijg3MjUiIHVzPSI4NzI1Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNiIgdXM9Ijg3MjYiLz48YmYgZ2k9IjAiIHVlPSI4NzI3IiB1cz0iODcyNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjgiIHVzPSI4NzI4Ii8+PGJmIGdpPSIyNTciIHVlPSI4NzI5IiB1cz0iODcyOSIvPjxiZiBnaT0iMTY1IiB1ZT0iODczMCIgdXM9Ijg3MzAiLz48YmYgZ2k9IjAiIHVlPSI4NzMxIiB1cz0iODczMSIvPjxiZiBnaT0iMCIgdWU9Ijg3MzIiIHVzPSI4NzMyIi8+PGJmIGdpPSIwIiB1ZT0iODczMyIgdXM9Ijg3MzMiLz48YmYgZ2k9IjE0NiIgdWU9Ijg3MzQiIHVzPSI4NzM0Ii8+PGJmIGdpPSIxNTYiIHVlPSI4NzQ3IiB1cz0iODc0NyIvPjxiZiBnaT0iMTY3IiB1ZT0iODc3NiIgdXM9Ijg3NzYiLz48YmYgZ2k9IjE0MyIgdWU9Ijg4MDAiIHVzPSI4ODAwIi8+PGJmIGdpPSIwIiB1ZT0iODgwMSIgdXM9Ijg4MDEiLz48YmYgZ2k9IjAiIHVlPSI4ODAyIiB1cz0iODgwMiIvPjxiZiBnaT0iMCIgdWU9Ijg4MDMiIHVzPSI4ODAzIi8+PGJmIGdpPSIxNDgiIHVlPSI4ODA1IiB1cz0iODgwNCIvPjxiZiBnaT0iMTg1IiB1ZT0iOTY3NCIgdXM9Ijk2NzQiLz48YmYgZ2k9IjE5MiIgdWU9IjY0MjU4IiB1cz0iNjQyNTciLz48YmYgZ2k9IjAiIHVlPSI2NTUzNSIgdXM9IjY1NTM1Ii8+PC9iZnJhbmdlcz48Y2lkLXdpZHRocyBzdGFydC1pbmRleD0iMCI+PHd4IHc9IjYwMiIvPjx3eCB3PSIwIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48L2ZvbnQtbWV0cmljcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZiBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vbm8udHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWYwYjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnhtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vbm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGE4NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxmb250LW1ldHJpY3MgbWV0cmljcy12ZXJzaW9uPSIyIiB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2Fuc01vbm8tUm9tYW48L2ZvbnQtbmFtZT48ZnVsbC1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi00PC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD42MDU8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zNDwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAyIi8+PHd4IHc9IjAiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWVmMDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsCkBAIC0wLDAgKzEsMzkgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKyAgCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorICAgIAorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6ZDpzZWN0aW9uIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoYW5jZXN0b3I6OmQ6c2VjdGlvbikrMSIvPgorICAgICAgICA8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDUiPjY8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDQiPjU8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDMiPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDIiPjM8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDEiPjI8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJoeyRsZXZlbCsxfSIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj50aXRsZTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDx4c2w6aWYgdGVzdD0iJGdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMgPSAwIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFuY2hvciI+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29uZGl0aW9uYWwiIHNlbGVjdD0iMCIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPC94c2w6aWY+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRub2RlIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwveHNsOmVsZW1lbnQ+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGItcGRmLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGItcGRmLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQwNjVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kYi1wZGYueHNsCkBAIC0wLDAgKzEsNjQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKyAgCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2ZvL2RvY2Jvb2sueHNsIiAvPgorCisgIDwhLS0gY2hlY2sgcHJvamVjdC1wbGFuLnNoIGZvciBob3cgdGhpcyBpcyBnZW5lcmF0ZWQsIG5lZWRlZCB0byB0d2VhayAKKyAgICAgICB0aGUgY292ZXIgcGFnZSAgICAgCisgICAgLS0+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIvdG1wL3RpdGxlcGFnZS54c2wiLz4gCisKKyAgPCEtLSBUbyBmb3JjZSBhIHBhZ2UgYnJlYWsgaW4gZG9jdW1lbnQsIGkuZSBwZXIgc2VjdGlvbiBhZGQgYSAKKyAgICAgIDw/aGFyZC1wYWdlYnJlYWs/PiB0YWcuCisgIC0tPgorIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ2hhcmQtcGFnZWJyZWFrJykiPgorICAgPGZvOmJsb2NrIGJyZWFrLWJlZm9yZT0ncGFnZScgLz4KKyA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tRml4IGZvciBkZWZ1YWx0IGluZGVudCBnZXR0aW5nIFRPQyBhbGwgd2llcmQuLgorICAgICAgU2VlIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvZG9jYm9vay1hcHBzLzIwMDUtcTEvbXNnMDA0NTUuaHRtbCAKKyAgICAgIEZJWE1FOiBtdXN0IGJlIGEgYmV0dGVyIGZpeAorICAgIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImJvZHkuc3RhcnQuaW5kZW50IiBzZWxlY3Q9IicwJyIvPgorICA8IS0tPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5tYXJnaW4ubGVmdCIgc2VsZWN0PSInMCciLz4tLT4KKworICA8IS0tIHN0b3AgbG9uZy1pc2ggaGVhZGVyIHRpdGxlcyBnZXR0aW5nIHdyYXBwZWQgLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaGVhZGVyLmNvbHVtbi53aWR0aHMiPjEgMTAgMTwveHNsOnBhcmFtPgorCisgIDwhLS0gY3VzdG9taXNlIGhlYWRlcnMgYW5kIGZvb3RlcnMgYSBsaXR0bGUgLS0+IAorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iaGVhZC5zZXAucnVsZSI+CisgICA8eHNsOmlmIHRlc3Q9IiRoZWFkZXIucnVsZSAhPSAwIj4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS13aWR0aCI+MC41cHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20tc3R5bGUiPnNvbGlkPC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLWNvbG9yIj4jY2NjY2NjPC94c2w6YXR0cmlidXRlPgorICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZm9vdC5zZXAucnVsZSI+CisgICAgPHhzbDppZiB0ZXN0PSIkZm9vdGVyLnJ1bGUgIT0gMCI+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3Atd2lkdGgiPjAuNXB0PC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLXN0eWxlIj5zb2xpZDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC1jb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImhlYWRlci5jb250ZW50LnByb3BlcnRpZXMiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4jY2NjY2NjPC94c2w6YXR0cmlidXRlPgorICA8L3hzbDphdHRyaWJ1dGUtc2V0PgorCisgIDx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJmb290ZXIuY29udGVudC5wcm9wZXJ0aWVzIj4KKyAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgPC94c2w6YXR0cmlidXRlLXNldD4KKworIAorICA8IS0tIGdlbmVyYWwgc2V0dGluZ3MgLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJmb3AxLmV4dGVuc2lvbnMiIHNlbGVjdD0iMSI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFwZXIudHlwZSIgc2VsZWN0PSInQTQnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJib2R5LmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhc2FucyciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InRpdGxlLmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhc2FucyciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Im1vbm9zcGFjZS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYW1vbm8nIj48L3hzbDpwYXJhbT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4NDNiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsCkBAIC0wLDAgKzEsMjUgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKyAgCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZGl2aXNpb24udGl0bGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuIi8+CisgICAgCisgICAgPGgxPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPnRpdGxlPC94c2w6YXR0cmlidXRlPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFuY2hvciI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb25kaXRpb25hbCIgc2VsZWN0PSIwIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkbm9kZSIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L2gxPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZHJhZnQucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kcmFmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwNTFhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZHJhZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2M1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCkBAIC0wLDAgKzEsNTggQEAKKzxmb3AgdmVyc2lvbj0iMS4wIj4KKworICA8IS0tIFN0cmljdCB1c2VyIGNvbmZpZ3VyYXRpb24gLS0+CisgIDxzdHJpY3QtY29uZmlndXJhdGlvbj50cnVlPC9zdHJpY3QtY29uZmlndXJhdGlvbj4KKworICA8IS0tIFN0cmljdCBGTyB2YWxpZGF0aW9uIC0tPgorICA8c3RyaWN0LXZhbGlkYXRpb24+dHJ1ZTwvc3RyaWN0LXZhbGlkYXRpb24+CisKKyAgIDwhLS0KKyAgICBTZXQgdGhlIGJhc2VEaXIgc28gY29tbW9uL29wZW5lZGhhbmQuc3ZnIHJlZmVyZW5jZXMgaW4gcGxhbnMgc3RpbGwKKyAgICB3b3JrIG9rLiBOb3RlLCByZWxhdGl2ZSBmaWxlIHJlZmVyZW5jZXMgdG8gY3VycmVudCBkaXIgc2hvdWxkIHN0aWxsIHdvcmsuCisgICAgLS0+CQorICA8YmFzZT4uLi90ZW1wbGF0ZTwvYmFzZT4KKyAgPGZvbnQtYmFzZT4uLi90ZW1wbGF0ZTwvZm9udC1iYXNlPgorIAorICA8IS0tIFNvdXJjZSByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgICBzaXplIG9mIHBpeGVscyBpbiBTVkcgYW5kIGJpdG1hcCBpbWFnZXMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDxzb3VyY2UtcmVzb2x1dGlvbj43Mjwvc291cmNlLXJlc29sdXRpb24+IC0tPgorICA8IS0tIFRhcmdldCByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBzcGVjaWZ5aW5nIHRoZQorICAgICAgIHRhcmdldCByZXNvbHV0aW9uIGZvciBnZW5lcmF0ZWQgYml0bWFwcywgZGVmYXVsdDogNzJkcGkgLS0+CisgIDwhLS0gPHRhcmdldC1yZXNvbHV0aW9uPjcyPC90YXJnZXQtcmVzb2x1dGlvbj4gLS0+CisgCisgIDwhLS0gZGVmYXVsdCBwYWdlLWhlaWdodCBhbmQgcGFnZS13aWR0aCwgaW4gY2FzZQorICAgICAgIHZhbHVlIGlzIHNwZWNpZmllZCBhcyBhdXRvIC0tPgorICA8ZGVmYXVsdC1wYWdlLXNldHRpbmdzIGhlaWdodD0iMTFpbiIgd2lkdGg9IjguMjZpbiIvPiAKKyAKKyAgPCEtLSA8dXNlLWNhY2hlPmZhbHNlPC91c2UtY2FjaGU+IC0tPgorIAorICA8cmVuZGVyZXJzPgorICAgIDxyZW5kZXJlciBtaW1lPSJhcHBsaWNhdGlvbi9wZGYiPgorICAgICAgPGZvbnRzPgorICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9uby54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9uby50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgIDwvZm9udD4KKworICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9CZC54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9CZC50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYS54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhLnR0ZiI+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJpdGFsaWMiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisgICAgICAgIAorICAgICAgICA8YXV0by1kZXRlY3QvPgorICAgICAgPC9mb250cz4KKyAgICA8L3JlbmRlcmVyPgorICA8L3JlbmRlcmVycz4KKzwvZm9wPgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzOTAwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApAQCAtMCwwICsxLDIxIEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hbC5vYmplY3QuaGVhZGluZyI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJvYmplY3QiIHNlbGVjdD0iLiIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkb2JqZWN0IiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDwveHNsOnBhcmFtPgorICAgIDxwIGNsYXNzPSJ0aXRsZSI+CisgICAgICA8Yj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdGl0bGUiLz48L2I+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG9iamVjdCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3A+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApAQCAtMCwwICsxLDE0IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIg0KKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayINCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCisNCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Imdsb3NzZW50cnkvZ2xvc3N0ZXJtIj4NCisgICAgPHhzbDphcHBseS1pbXBvcnRzLz4NCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9IDAiPg0KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPg0KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLi4iLz4NCisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICA8L3hzbDppZj4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMWMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvcGVybWFsaW5rcy54c2wKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5wZXJtYWxpbmsiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InBlcm1hbGluay50ZXh0Ij7CtjwveHNsOnBhcmFtPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiLz4KKworICAgIDx4c2w6aWYgdGVzdD0iJGdlbmVyYXRlLnBlcm1hbGluayAhPSAnMCciPgorICAgICAgPHNwYW4gY2xhc3M9InBlcm1hbGluayI+CisgICAgICAgIDxhIGFsdD0iUGVybWFsaW5rIiB0aXRsZT0iUGVybWFsaW5rIj4KKyAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJocmVmLnRhcmdldCI+CisgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJvYmplY3QiICBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSIkcGVybWFsaW5rLnRleHQiLz4KKyAgICAgICAgPC9hPgorICAgICAgPC9zcGFuPgorICAgIDwveHNsOmlmPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZmZjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDU1IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InNlY3Rpb24iCisgICAgICBzZWxlY3Q9IihhbmNlc3Rvcjo6c2VjdGlvbiB8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2ltcGxlc2VjdHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MXwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MnwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0M3wKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NSlbbGFzdCgpXSIvPgorCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZW5kZXJhcyI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MSciPjE8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QyJyI+MjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDMnIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NCciPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3Q1JyI+NTwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInJyIvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkcmVuZGVyYXMgIT0gJyciPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmVuZGVyYXMiLz4KKyAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24ubGV2ZWwiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJHNlY3Rpb24iLz4KKyAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi5oZWFkaW5nIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZWN0aW9uIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibGV2ZWwiIHNlbGVjdD0iJGxldmVsIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRzZWN0aW9uIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkbGV2ZWwgJmd0OyAwIj4KKyAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWMxMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCkBAIC0wLDAgKzEsMTI1OSBAQAorPCFET0NUWVBFIHQ6dGVtcGxhdGVzIFsKKzwhRU5USVRZIGhzaXplMCAiMTBwdCI+Cis8IUVOVElUWSBoc2l6ZTEgIjEycHQiPgorPCFFTlRJVFkgaHNpemUyICIxNC40cHQiPgorPCFFTlRJVFkgaHNpemUzICIxNy4yOHB0Ij4KKzwhRU5USVRZIGhzaXplNCAiMjAuNzM2cHQiPgorPCFFTlRJVFkgaHNpemU1ICIyNC44ODMycHQiPgorPCFFTlRJVFkgaHNpemUwc3BhY2UgIjcuNXB0Ij4gPCEtLSAwLjc1ICogaHNpemUwIC0tPgorPCFFTlRJVFkgaHNpemUxc3BhY2UgIjlwdCI+IDwhLS0gMC43NSAqIGhzaXplMSAtLT4KKzwhRU5USVRZIGhzaXplMnNwYWNlICIxMC44cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTIgLS0+Cis8IUVOVElUWSBoc2l6ZTNzcGFjZSAiMTIuOTZwdCI+IDwhLS0gMC43NSAqIGhzaXplMyAtLT4KKzwhRU5USVRZIGhzaXplNHNwYWNlICIxNS41NTJwdCI+IDwhLS0gMC43NSAqIGhzaXplNCAtLT4KKzwhRU5USVRZIGhzaXplNXNwYWNlICIxOC42NjI0cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTUgLS0+CitdPgorPHQ6dGVtcGxhdGVzIHhtbG5zOnQ9Imh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2sveHNsL3RlbXBsYXRlLzEuMCIKKwkgICAgIHhtbG5zOnBhcmFtPSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAvcGFyYW0iCisgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKyAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgJElkOiB0aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCx2IDEuMjMgMjAwMy8xMi8xNiAwMDozMDo0OSBib2JzdGF5dG9uIEV4cCAkCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERvY0Jvb2sgWFNMIFN0eWxlc2hlZXQgZGlzdHJpYnV0aW9uLgorICAgICBTZWUgLi4vUkVBRE1FIG9yIGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8gZm9yIGNvcHlyaWdodAorICAgICBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImFydGljbGUiIHQ6d3JhcHBlcj0iZm86YmxvY2siCisgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iCisgICAgICAgICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIj4KKworICAgIDxtZWRpYW9iamVjdC8+CisKKyAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICA8c3VidGl0bGUgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YXJ0aWNsZVsxXSIKKwkgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8Y29ycGF1dGhvciBzcGFjZS1iZWZvcmU9IjAuNWVtIgorICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiLz4KKyAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorICAgIDxhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisgICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC44ZW0iLz4KKworICAgIDxlbWFpbCBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICA8b3RoZXJjcmVkaXQgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxyZWxlYXNlaW5mbyBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGNvcHlyaWdodCBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGxlZ2Fsbm90aWNlIHRleHQtYWxpZ249InN0YXJ0IgorICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdD0iMC41aW4iCisgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodD0iMC41aW4iCisgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JGJvZHkuZm9udHNldH0iLz4KKyAgICA8cHViZGF0ZSBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisJPHBhcmE+PC9wYXJhPgorICAgIDxyZXZpc2lvbiBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPHJldmhpc3Rvcnkgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxhYnN0cmFjdCBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgIHRleHQtYWxpZ249InN0YXJ0IgorCSAgICAgIG1hcmdpbi1sZWZ0PSIwLjVpbiIKKyAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0PSIwLjVpbiIKKyAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskYm9keS5mb250c2V0fSIvPgorCisgICAgPHBhcmE+PC9wYXJhPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNldCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnNldFsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIi8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJib29rIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKworICAgICAgPG1lZGlhb2JqZWN0Lz4KKworPCEtLQorCisjIElmIHlvdSBsZWF2ZSB0aGlzIGJsb2NrIG9mIGNvZGUgaW4gdGhlbiB0aGUgdGV4dCB0aXRsZSBpbiB0aGUKKyMgPHRpdGxlPkJpdEJha2UgVXNlciBNYW51YWw8L3RpdGxlPiBzdGF0ZW1lbnQgb2YgdGhlCisjIGJpdGJha2UtdXNlci1tYW51YWwueG1sIGZpbGUgaXMgcmVuZGVyZWQgb24gdGhlIHRpdGxlIHBhZ2UgYmVsb3cgdGhlCisjIGltYWdlLiAgQ29tbWVudGluZyBpdCBvdXQgZ2V0cyBpdCBvdXQgb2YgdGhlcmUgeWV0IGFsbG93cyBpdAorIyB0byBiZSByZXRhaW5lZCBpbiB0aGUgdGFiIHRleHQgZm9yIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlCisjIG1hbnVhbC4KKworICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJvb2tbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorLS0+CisgICAgICA8c3VidGl0bGUKKwkJdGV4dC1hbGlnbj0iY2VudGVyIgorCQlmb250LXNpemU9IiZoc2l6ZTQ7IgorCQlzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCQkgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJCSAgc3BhY2UtYmVmb3JlPSIyaW4iLz4KKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjJpbiIvPgorICAgICAgPGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplMnNwYWNlOyIKKwkgICAgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIi8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorPCEtLQorIyBJZiB5b3UgbGVhdmUgdGhpcyBibG9jayBvZiBjb2RlIGluIHRoZW4gdGhlIHRleHQgdGl0bGUgaW4gdGhlCisjIDx0aXRsZT5CaXRCYWtlIFVzZXIgTWFudWFsPC90aXRsZT4gc3RhdGVtZW50IG9mIHRoZQorIyBiaXRiYWtlLXVzZXItbWFudWFsLnhtbCBmaWxlIGlzIHJlbmRlcmVkIG9uIHRoZSB0aXRsZSBwYWdlIGJlbG93IHRoZQorIyBpbWFnZS4gIENvbW1lbnRpbmcgaXQgb3V0IGdldHMgaXQgb3V0IG9mIHRoZXJlIHlldCBhbGxvd3MgaXQKKyMgdG8gYmUgcmV0YWluZWQgaW4gdGhlIHRhYiB0ZXh0IGZvciB0aGUgSFRNTCB2ZXJzaW9uIG9mIHRoZQorIyBtYW51YWwuCisKKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iYm9vay52ZXJzby50aXRsZSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CistLT4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cCB0Om5hbWVkLXRlbXBsYXRlPSJ2ZXJzby5hdXRob3Jncm91cCIvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHB1YmRhdGUgc3BhY2UtYmVmb3JlPSIxZW0iLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICAgIDxsZWdhbG5vdGljZSBmb250LXNpemU9IjhwdCIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICAgIDxmbzpibG9jayBicmVhay1hZnRlcj0icGFnZSIvPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgICAgPGZvOmJsb2NrIGJyZWFrLWFmdGVyPSJwYWdlIi8+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icGFydCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnBhcnRbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNHNwYWNlOyIKKwkgICAgICBmb250LXdlaWdodD0nYm9sZCcKKwkgICAgICBmb250LXN0eWxlPSdpdGFsaWMnCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwYXJ0aW50cm8iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICBzcGFjZS1iZWZvcmU9IjFlbSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgICBmb250LXNpemU9IiZoc2l6ZTI7IgorCSAgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgIGZvbnQtc3R5bGU9Iml0YWxpYyIKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZmVyZW5jZSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnJlZmVyZW5jZVsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIi8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc3lub3BzaXNkaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3Rpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QxIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZGVkaWNhdGlvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpkZWRpY2F0aW9uWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwcmVmYWNlIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnByZWZhY2VbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJjaGFwdGVyIiB0OndyYXBwZXI9ImZvOmJsb2NrIgorICAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Y2hhcHRlclsxXSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgICA8c3VidGl0bGUgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkJZm9udC1zdHlsZT0iaXRhbGljIgorCQlmb250LXNpemU9IiZoc2l6ZTI7IgorCQlmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgICA8Y29ycGF1dGhvciAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPGF1dGhvciAgICAgIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJhcHBlbmRpeCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFwcGVuZGl4WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Rpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QxIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Q0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0NSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2ltcGxlc2VjdCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJiaWJsaW9ncmFwaHkiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YmlibGlvZ3JhcGh5WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJiaWJsaW9kaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2RpdlsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZ2xvc3NhcnkiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NhcnlbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imdsb3NzZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpnbG9zc2RpdlsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iaW5kZXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6aW5kZXhbMV0iCisgICAgICAgICAgICAgcGFyYW06cGFnZXdpZGU9IjEiCisJICAgICBtYXJnaW4tbGVmdD0iMHB0IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8IS0tIFRoZSBpbmRleGRpdi50aXRsZSB0ZW1wbGF0ZSBpcyB1c2VkIHNvIHRoYXQgbWFudWFsIGFuZCAtLT4KKyAgPCEtLSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbmRleGRpdiB0aXRsZXMgZ2V0IHRoZSBzYW1lIC0tPgorICA8IS0tIGZvcm1hdHRpbmcuIC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImluZGV4ZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iaW5kZXhkaXYudGl0bGUiCisJICAgICBwYXJhbTp0aXRsZT0idGl0bGUiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZXRpbmRleCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpzZXRpbmRleFsxXSIKKyAgICAgICAgICAgICBwYXJhbTpwYWdld2lkZT0iMSIKKwkgICAgIG1hcmdpbi1sZWZ0PSIwcHQiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImNvbG9waG9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmNvbG9waG9uWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJ0YWJsZS5vZi5jb250ZW50cyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInVGFibGVvZkNvbnRlbnRzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi50YWJsZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlRhYmxlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZmlndXJlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mRmlndXJlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZXhhbXBsZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkV4YW1wbGVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5lcXVhdGlvbnMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkVxdWF0aW9ucyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YucHJvY2VkdXJlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mUHJvY2VkdXJlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YudW5rbm93bnMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlVua25vd24nIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPC90OnRlbXBsYXRlcz4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9kb2MvdG9vbHMvZG9jYm9vay10by1wZGYgYi95b2N0by1wb2t5L2JpdGJha2UvZG9jL3Rvb2xzL2RvY2Jvb2stdG8tcGRmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1OGRlZDllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2RvYy90b29scy9kb2Nib29rLXRvLXBkZgpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwkKK2lmIFsgLXogIiQxIiAtbyAteiAiJDIiIF07IHRoZW4KKyAgIGVjaG8gInVzYWdlOiBbLXZdICQwIDxkb2Nib29rIGZpbGU+IDx0ZW1wbGF0ZWRpcj4iCisgICBlY2hvCisgICBlY2hvICIqTk9URSogeW91IG5lZWQgeHNsdHByb2MsIGZvcCBhbmQgbndhbHNoIGRvY2Jvb2sgc3R5bGVzaGVldHMiIAorICAgZWNobyAiICAgICAgIGluc3RhbGxlZCBmb3IgdGhpcyB0byB3b3JrISIKKyAgIGVjaG8KKyAgIGV4aXQgMAorZmkKKworRk89YGVjaG8gJDEgfCBzZWQgcy8ueG1sLy5mby9gIHx8IGV4aXQgMQorUERGPWBlY2hvICQxIHwgc2VkIHMvLnhtbC8ucGRmL2AgfHwgZXhpdCAxCitURU1QTEFURURJUj0kMgorCisjIworIyBUaGVzZSBVUkkgc2hvdWxkIGJlIHJld3JpdHRlbiBieSB5b3VyIGRpc3RyaWJ1dGlvbidzIHhtbCBjYXRhbG9nIHRvCisjIG1hdGNoIHlvdXIgbG9jYWx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkk9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50IgorCisjIENyZWF0ZXMgYSB0ZW1wb3JhcnkgWFNMIHN0eWxlc2hlZXQgYmFzZWQgb24gdGl0bGVwYWdlLnhzbAoreHNsdHByb2MgLW8gL3RtcC90aXRsZXBhZ2UueHNsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRYU0xfQkFTRV9VUkkvdGVtcGxhdGUvdGl0bGVwYWdlLnhzbCBcCisgICAgICAgICAkVEVNUExBVEVESVIvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgfHwgZXhpdCAxCisKKyMgQ3JlYXRlcyB0aGUgZmlsZSBuZWVkZWQgZm9yIEZPUAoreHNsdHByb2MgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgXAorCSAtLXN0cmluZ3BhcmFtIGh5cGhlbmF0ZSBmYWxzZSBcCisJIC0tc3RyaW5ncGFyYW0gZm9ybWFsLnRpdGxlLnBsYWNlbWVudCAiZmlndXJlIGFmdGVyIiBcCisJIC0tc3RyaW5ncGFyYW0gdWxpbmsuc2hvdyAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGJvZHkuZm9udC5tYXN0ZXIgIDkgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgdGl0bGUuZm9udC5tYXN0ZXIgIDExIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gZHJhZnQud2F0ZXJtYXJrLmltYWdlICIkVEVNUExBVEVESVIvZHJhZnQucG5nIiBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGFwcGVuZGl4LmF1dG9sYWJlbCBBIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24uYXV0b2xhYmVsIDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAtLW91dHB1dCAkRk8gICAgICAgICAgICAgICBcCisgICAgICAgICAkVEVNUExBVEVESVIvZGItcGRmLnhzbCAgICBcCisJICQxICAgICAgICAgICAgICAgICB8fCBleGl0IDEKKworIyBJbnZva2VzIHRoZSBKYXZhIHZlcnNpb24gb2YgRk9QLiAgVXNlcyB0aGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUgY29tbW9uL2ZvcC1jb25maWcueG1sCitmb3AgLWMgJFRFTVBMQVRFRElSL2ZvcC1jb25maWcueG1sIC1mbyAkRk8gLXBkZiAkUERGICAgICAgIHx8IGV4aXQgMQorCitybSAtZiAkRk8KK3JtIC1mICAvdG1wL3RpdGxlcGFnZS54c2wKKworZWNobworZWNobyAiICMjIyMgU3VjY2VzcyEgJFBERiByZWFkeS4gIyMjIyIKK2VjaG8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9DT1cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxN2VjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvQ09XLnB5CkBAIC0wLDAgKzEsMzIzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIGlzIGEgY29weSBvbiB3cml0ZSBkaWN0aW9uYXJ5IGFuZCBzZXQgd2hpY2ggYWJ1c2VzIGNsYXNzZXMgdG8gdHJ5IGFuZCBiZSBuaWNlIGFuZCBmYXN0LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgVGltIEFtc2VsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyNQbGVhc2UgTm90ZToKKyMgQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIG11dGFibGUgdHlwZXMgKGllIERpY3QgYW5kIExpc3RzKSAtIG9wZXJhdGlvbnMgaW52b2x2aW5nIHRoZXNlIGFyZSBTTE9XLgorIyBBc3NpZ24gYSBmaWxlIHRvIF9fd2Fybl9fIHRvIGdldCB3YXJuaW5ncyBhYm91dCBzbG93IG9wZXJhdGlvbnMuCisjCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBjb3B5CitpbXBvcnQgdHlwZXMKK0ltbXV0YWJsZVR5cGVzID0gKAorICAgIHR5cGVzLk5vbmVUeXBlLAorICAgIGJvb2wsCisgICAgY29tcGxleCwKKyAgICBmbG9hdCwKKyAgICBpbnQsCisgICAgbG9uZywKKyAgICB0dXBsZSwKKyAgICBmcm96ZW5zZXQsCisgICAgYmFzZXN0cmluZworKQorCitNVVRBQkxFID0gIl9fbXV0YWJsZV9fIgorCitjbGFzcyBDT1dNZXRhKHR5cGUpOgorICAgIHBhc3MKKworY2xhc3MgQ09XRGljdE1ldGEoQ09XTWV0YSk6CisgICAgX193YXJuX18gPSBGYWxzZQorICAgIF9faGFzbXV0YWJsZV9fID0gRmFsc2UKKyAgICBfX21hcmtlcl9fID0gdHVwbGUoKQorCisgICAgZGVmIF9fc3RyX18oY2xzKToKKyAgICAgICAgIyBGSVhNRTogSSBoYXZlIG1hZ2ljIG51bWJlcnMhCisgICAgICAgIHJldHVybiAiPENPV0RpY3QgTGV2ZWw6ICVpIEN1cnJlbnQgS2V5czogJWk+IiAlIChjbHMuX19jb3VudF9fLCBsZW4oY2xzLl9fZGljdF9fKSAtIDMpCisgICAgX19yZXByX18gPSBfX3N0cl9fCisKKyAgICBkZWYgY293KGNscyk6CisgICAgICAgIGNsYXNzIEMoY2xzKToKKyAgICAgICAgICAgIF9fY291bnRfXyA9IGNscy5fX2NvdW50X18gKyAxCisgICAgICAgIHJldHVybiBDCisgICAgY29weSA9IGNvdworICAgIF9fY2FsbF9fID0gY293CisKKyAgICBkZWYgX19zZXRpdGVtX18oY2xzLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIEltbXV0YWJsZVR5cGVzKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDT1dNZXRhKToKKyAgICAgICAgICAgICAgICBjbHMuX19oYXNtdXRhYmxlX18gPSBUcnVlCisgICAgICAgICAgICBrZXkgKz0gTVVUQUJMRQorICAgICAgICBzZXRhdHRyKGNscywga2V5LCB2YWx1ZSkKKworICAgIGRlZiBfX2dldG11dGFibGVfXyhjbHMsIGtleSwgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBua2V5ID0ga2V5ICsgTVVUQUJMRQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gY2xzLl9fZGljdF9fW25rZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB2YWx1ZSA9IGdldGF0dHIoY2xzLCBua2V5KQorICAgICAgICBpZiByZWFkb25seToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGlmIG5vdCBjbHMuX193YXJuX18gaXMgRmFsc2UgYW5kIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDT1dNZXRhKToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBEb2luZyBhIGNvcHkgYmVjYXVzZSAlcyBpcyBhIG11dGFibGUgdHlwZS4iICUga2V5LCBmaWxlPWNscy5fX3dhcm5fXykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jb3B5KCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICB2YWx1ZSA9IGNvcHkuY29weSh2YWx1ZSkKKyAgICAgICAgc2V0YXR0cihjbHMsIG5rZXksIHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIF9fZ2V0bWFya2VyX18gPSBbXQorICAgIGRlZiBfX2dldHJlYWRvbmx5X18oY2xzLCBrZXksIGRlZmF1bHQ9X19nZXRtYXJrZXJfXyk6CisgICAgICAgICIiIlwKKyAgICAgICAgR2V0IGEgdmFsdWUgKGV2ZW4gaWYgbXV0YWJsZSkgd2hpY2ggeW91IHByb21pc2Ugbm90IHRvIGNoYW5nZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMuX19nZXRpdGVtX18oa2V5LCBkZWZhdWx0LCBUcnVlKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywga2V5LCBkZWZhdWx0PV9fZ2V0bWFya2VyX18sIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihjbHMsIGtleSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNscy5fX2dldG11dGFibGVfXyhrZXksIHJlYWRvbmx5KQorCisgICAgICAgICAgICAjIFRoaXMgaXMgZm9yIHZhbHVlcyB3aGljaCBoYXZlIGJlZW4gZGVsZXRlZAorICAgICAgICAgICAgaWYgdmFsdWUgaXMgY2xzLl9fbWFya2VyX186CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImtleSAlcyBkb2VzIG5vdCBleGlzdC4iICUga2V5KQorCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBub3QgZGVmYXVsdCBpcyBjbHMuX19nZXRtYXJrZXJfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihzdHIoZSkpCisKKyAgICBkZWYgX19kZWxpdGVtX18oY2xzLCBrZXkpOgorICAgICAgICBjbHMuX19zZXRpdGVtX18oa2V5LCBjbHMuX19tYXJrZXJfXykKKworICAgIGRlZiBfX3JldmVydGl0ZW1fXyhjbHMsIGtleSk6CisgICAgICAgIGlmIG5vdCBjbHMuX19kaWN0X18uaGFzX2tleShrZXkpOgorICAgICAgICAgICAga2V5ICs9IE1VVEFCTEUKKyAgICAgICAgZGVsYXR0cihjbHMsIGtleSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oY2xzLCBrZXkpOgorICAgICAgICByZXR1cm4gY2xzLmhhc19rZXkoa2V5KQorCisgICAgZGVmIGhhc19rZXkoY2xzLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IGNscy5fX2dldHJlYWRvbmx5X18oa2V5LCBjbHMuX19tYXJrZXJfXykKKyAgICAgICAgaWYgdmFsdWUgaXMgY2xzLl9fbWFya2VyX186CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBpdGVyKGNscywgdHlwZSwgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBmb3Iga2V5IGluIGRpcihjbHMpOgorICAgICAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKE1VVEFCTEUpOgorICAgICAgICAgICAgICAgIGtleSA9IGtleVs6LWxlbihNVVRBQkxFKV0KKworICAgICAgICAgICAgaWYgdHlwZSA9PSAia2V5cyI6CisgICAgICAgICAgICAgICAgeWllbGQga2V5CisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiByZWFkb25seToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjbHMuX19nZXRyZWFkb25seV9fKGtleSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNsc1trZXldCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdHlwZSA9PSAidmFsdWVzIjoKKyAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZQorICAgICAgICAgICAgaWYgdHlwZSA9PSAiaXRlbXMiOgorICAgICAgICAgICAgICAgIHlpZWxkIChrZXksIHZhbHVlKQorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKKworICAgIGRlZiBpdGVya2V5cyhjbHMpOgorICAgICAgICByZXR1cm4gY2xzLml0ZXIoImtleXMiKQorICAgIGRlZiBpdGVydmFsdWVzKGNscywgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBpZiBub3QgY2xzLl9fd2Fybl9fIGlzIEZhbHNlIGFuZCBjbHMuX19oYXNtdXRhYmxlX18gYW5kIHJlYWRvbmx5IGlzIEZhbHNlOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IElmIHlvdSBhcm4ndCBnb2luZyB0byBjaGFuZ2UgYW55IG9mIHRoZSB2YWx1ZXMgY2FsbCB3aXRoIFRydWUuIiwgZmlsZT1jbHMuX193YXJuX18pCisgICAgICAgIHJldHVybiBjbHMuaXRlcigidmFsdWVzIiwgcmVhZG9ubHkpCisgICAgZGVmIGl0ZXJpdGVtcyhjbHMsIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgaWYgbm90IGNscy5fX3dhcm5fXyBpcyBGYWxzZSBhbmQgY2xzLl9faGFzbXV0YWJsZV9fIGFuZCByZWFkb25seSBpcyBGYWxzZToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBJZiB5b3UgYXJuJ3QgZ29pbmcgdG8gY2hhbmdlIGFueSBvZiB0aGUgdmFsdWVzIGNhbGwgd2l0aCBUcnVlLiIsIGZpbGU9Y2xzLl9fd2Fybl9fKQorICAgICAgICByZXR1cm4gY2xzLml0ZXIoIml0ZW1zIiwgcmVhZG9ubHkpCisKK2NsYXNzIENPV1NldE1ldGEoQ09XRGljdE1ldGEpOgorICAgIGRlZiBfX3N0cl9fKGNscyk6CisgICAgICAgICMgRklYTUU6IEkgaGF2ZSBtYWdpYyBudW1iZXJzIQorICAgICAgICByZXR1cm4gIjxDT1dTZXQgTGV2ZWw6ICVpIEN1cnJlbnQgS2V5czogJWk+IiAlIChjbHMuX19jb3VudF9fLCBsZW4oY2xzLl9fZGljdF9fKSAtMykKKyAgICBfX3JlcHJfXyA9IF9fc3RyX18KKworICAgIGRlZiBjb3coY2xzKToKKyAgICAgICAgY2xhc3MgQyhjbHMpOgorICAgICAgICAgICAgX19jb3VudF9fID0gY2xzLl9fY291bnRfXyArIDEKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiBhZGQoY2xzLCB2YWx1ZSk6CisgICAgICAgIENPV0RpY3RNZXRhLl9fc2V0aXRlbV9fKGNscywgcmVwcihoYXNoKHZhbHVlKSksIHZhbHVlKQorCisgICAgZGVmIHJlbW92ZShjbHMsIHZhbHVlKToKKyAgICAgICAgQ09XRGljdE1ldGEuX19kZWxpdGVtX18oY2xzLCByZXByKGhhc2godmFsdWUpKSkKKworICAgIGRlZiBfX2luX18oY2xzLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBDT1dEaWN0TWV0YS5oYXNfa2V5KHJlcHIoaGFzaCh2YWx1ZSkpKQorCisgICAgZGVmIGl0ZXJrZXlzKGNscyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2V0cyBkb24ndCBoYXZlIGtleXMiKQorCisgICAgZGVmIGl0ZXJpdGVtcyhjbHMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldHMgZG9uJ3QgaGF2ZSAnaXRlbXMnIikKKworIyBUaGVzZSBhcmUgdGhlIGFjdHVhbCBjbGFzc2VzIHlvdSB1c2UhCitjbGFzcyBDT1dEaWN0QmFzZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBDT1dEaWN0TWV0YQorICAgIF9fY291bnRfXyA9IDAKKworY2xhc3MgQ09XU2V0QmFzZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBDT1dTZXRNZXRhCisgICAgX19jb3VudF9fID0gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGltcG9ydCBzeXMKKyAgICBDT1dEaWN0QmFzZS5fX3dhcm5fXyA9IHN5cy5zdGRlcnIKKyAgICBhID0gQ09XRGljdEJhc2UoKQorICAgIHByaW50KCJhIiwgYSkKKworICAgIGFbJ2EnXSA9ICdhJworICAgIGFbJ2InXSA9ICdiJworICAgIGFbJ2RpY3QnXSA9IHt9CisKKyAgICBiID0gYS5jb3B5KCkKKyAgICBwcmludCgiYiIsIGIpCisgICAgYlsnYyddID0gJ2InCisKKyAgICBwcmludCgpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGJbJ2RpY3QnXVsnYSddID0gJ2InCisgICAgYlsnYSddID0gJ2MnCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIHRyeToKKyAgICAgICAgYlsnZGljdDInXQorICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICBwcmludCgiT2theSEiKQorCisgICAgYVsnc2V0J10gPSBDT1dTZXRCYXNlKCkKKyAgICBhWydzZXQnXS5hZGQoIm8xIikKKyAgICBhWydzZXQnXS5hZGQoIm8xIikKKyAgICBhWydzZXQnXS5hZGQoIm8yIikKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoIi0tIikKKyAgICBwcmludCgiYiIsIGIpCisgICAgZm9yIHggaW4gYlsnc2V0J10uaXRlcnZhbHVlcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGJbJ3NldCddLmFkZCgnbzMnKQorCisgICAgcHJpbnQoImEiLCBhKQorICAgIGZvciB4IGluIGFbJ3NldCddLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoKQorCisgICAgYVsnc2V0MiddID0gc2V0KCkKKyAgICBhWydzZXQyJ10uYWRkKCJvMSIpCisgICAgYVsnc2V0MiddLmFkZCgibzEiKQorICAgIGFbJ3NldDInXS5hZGQoIm8yIikKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGRlbCBiWydiJ10KKyAgICB0cnk6CisgICAgICAgIHByaW50KGJbJ2InXSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHByaW50KCJZYXkhIGRlbGV0ZWQga2V5IHJhaXNlcyBlcnJvciIpCisKKyAgICBpZiBiLmhhc19rZXkoJ2InKToKKyAgICAgICAgcHJpbnQoIkJvbyEiKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJZYXkgLSBoYXNfa2V5IHdpdGggZGVsZXRlIHdvcmtzISIpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcyhyZWFkb25seT1UcnVlKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICBiLl9fcmV2ZXJ0aXRlbV9fKCdiJykKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGIuX19yZXZlcnRpdGVtX18oJ2RpY3QnKQorICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzk0NmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTQyIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIEJ1aWxkIFN5c3RlbSBQeXRob24gTGlicmFyeQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMgIEhvbGdlciBTY2h1cmlnCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIEJhc2VkIG9uIEdlbnRvbydzIHBvcnRhZ2UucHkuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitfX3ZlcnNpb25fXyA9ICIxLjI3LjEiCisKK2ltcG9ydCBzeXMKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNywgMyk6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb3JyeSwgcHl0aG9uIDIuNy4zIG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIHZlcnNpb24gb2YgYml0YmFrZSIpCisKKworY2xhc3MgQkJIYW5kbGVkRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgVGhlIGJpZyBkaWxlbW1hIGZvciBnZW5lcmljIGJpdGJha2UgY29kZSBpcyB3aGF0IGluZm9ybWF0aW9uIHRvIGdpdmUgdGhlIHVzZXIKKyAgICB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuIEFueSBleGNlcHRpb24gaW5oZXJpdGluZyB0aGlzIGJhc2UgZXhjZXB0aW9uIGNsYXNzCisgICAgaGFzIGFscmVhZHkgcHJvdmlkZWQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdmlhIHNvbWUgJ2ZpcmVkJyBtZXNzYWdlIHR5cGUgc3VjaCBhcworICAgIGFuIGV4cGxpY2l0bHkgZmlyZWQgZXZlbnQgdXNpbmcgYmIuZmlyZSwgb3IgYSBiYi5lcnJvciBtZXNzYWdlLiBJZiBiaXRiYWtlIAorICAgIGVuY291bnRlcnMgYW4gZXhjZXB0aW9uIGRlcml2ZWQgZnJvbSB0aGlzIGNsYXNzLCBubyBiYWNrdHJhY2Ugb3Igb3RoZXIgaW5mb3JtYXRpb24gCisgICAgd2lsbCBiZSBnaXZlbiB0byB0aGUgdXNlciwgaXRzIGFzc3VtZWQgdGhlIGVhcmxpZXIgZXZlbnQgcHJvdmlkZWQgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLgorICAgICIiIgorICAgIHBhc3MKKworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCisKK2NsYXNzIE51bGxIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcGFzcworCitMb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkKK2NsYXNzIEJCTG9nZ2VyKExvZ2dlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lLnNwbGl0KCIuIilbMF0gPT0gIkJpdEJha2UiOgorICAgICAgICAgICAgc2VsZi5kZWJ1ZyA9IHNlbGYuYmJkZWJ1ZworICAgICAgICBMb2dnZXIuX19pbml0X18oc2VsZiwgbmFtZSkKKworICAgIGRlZiBiYmRlYnVnKHNlbGYsIGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmxvZyhsb2dnaW5nLkRFQlVHIC0gbGV2ZWwgKyAxLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBwbGFpbihzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmxvZyhsb2dnaW5nLklORk8gKyAxLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB2ZXJib3NlKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9nKGxvZ2dpbmcuSU5GTyAtIDEsIG1zZywgKmFyZ3MsICoqa3dhcmdzKQorCitsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucyA9IEZhbHNlCitsb2dnaW5nLnNldExvZ2dlckNsYXNzKEJCTG9nZ2VyKQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCitsb2dnZXIuYWRkSGFuZGxlcihOdWxsSGFuZGxlcigpKQorbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcgLSAyKQorCisjIFRoaXMgaGFzIHRvIGJlIGltcG9ydGVkIGFmdGVyIHRoZSBzZXRMb2dnZXJDbGFzcywgYXMgdGhlIGltcG9ydCBvZiBiYi5tc2cKKyMgY2FuIHJlc3VsdCBpbiBjb25zdHJ1Y3Rpb24gb2YgdGhlIHZhcmlvdXMgbG9nZ2Vycy4KK2ltcG9ydCBiYi5tc2cKKworZnJvbSBiYiBpbXBvcnQgZmV0Y2gyIGFzIGZldGNoCitzeXMubW9kdWxlc1snYmIuZmV0Y2gnXSA9IHN5cy5tb2R1bGVzWydiYi5mZXRjaDInXQorCisjIE1lc3NhZ2luZyBjb252ZW5pZW5jZSBmdW5jdGlvbnMKK2RlZiBwbGFpbigqYXJncyk6CisgICAgbG9nZ2VyLnBsYWluKCcnLmpvaW4oYXJncykpCisKK2RlZiBkZWJ1ZyhsdmwsICphcmdzKToKKyAgICBpZiBpc2luc3RhbmNlKGx2bCwgYmFzZXN0cmluZyk6CisgICAgICAgIGxvZ2dlci53YXJuKCJQYXNzZWQgaW52YWxpZCBkZWJ1ZyBsZXZlbCAnJXMnIHRvIGJiLmRlYnVnIiwgbHZsKQorICAgICAgICBhcmdzID0gKGx2bCwpICsgYXJncworICAgICAgICBsdmwgPSAxCisgICAgbG9nZ2VyLmRlYnVnKGx2bCwgJycuam9pbihhcmdzKSkKKworZGVmIG5vdGUoKmFyZ3MpOgorICAgIGxvZ2dlci5pbmZvKCcnLmpvaW4oYXJncykpCisKK2RlZiB3YXJuKCphcmdzKToKKyAgICBsb2dnZXIud2FybignJy5qb2luKGFyZ3MpKQorCitkZWYgZXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKKyAgICBsb2dnZXIuZXJyb3IoJycuam9pbihhcmdzKSwgZXh0cmE9a3dhcmdzKQorCitkZWYgZmF0YWwoKmFyZ3MsICoqa3dhcmdzKToKKyAgICBsb2dnZXIuY3JpdGljYWwoJycuam9pbihhcmdzKSwgZXh0cmE9a3dhcmdzKQorICAgIHJhaXNlIEJCSGFuZGxlZEV4Y2VwdGlvbigpCisKK2RlZiBkZXByZWNhdGVkKGZ1bmMsIG5hbWU9Tm9uZSwgYWR2aWNlPSIiKToKKyAgICAiIiJUaGlzIGlzIGEgZGVjb3JhdG9yIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1hcmsgZnVuY3Rpb25zCisgICAgYXMgZGVwcmVjYXRlZC4gSXQgd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nIGJlaW5nIGVtaXR0ZWQKKyAgICB3aGVuIHRoZSBmdW5jdGlvbiBpcyB1c2VkLiIiIgorICAgIGltcG9ydCB3YXJuaW5ncworCisgICAgaWYgYWR2aWNlOgorICAgICAgICBhZHZpY2UgPSAiOiAlcyIgJSBhZHZpY2UKKyAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgIG5hbWUgPSBmdW5jLl9fbmFtZV9fCisKKyAgICBkZWYgbmV3RnVuYygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJDYWxsIHRvIGRlcHJlY2F0ZWQgZnVuY3Rpb24gJXMlcy4iICUgKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2aWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgbmV3RnVuYy5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KKyAgICBuZXdGdW5jLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KKyAgICBuZXdGdW5jLl9fZGljdF9fLnVwZGF0ZShmdW5jLl9fZGljdF9fKQorICAgIHJldHVybiBuZXdGdW5jCisKKyMgRm9yIGNvbXBhdGliaWxpdHkKK2RlZiBkZXByZWNhdGVfaW1wb3J0KGN1cnJlbnQsIG1vZHVsZW5hbWUsIGZyb21saXN0LCByZW5hbWVzID0gTm9uZSk6CisgICAgIiIiSW1wb3J0IG9iamVjdHMgZnJvbSBvbmUgbW9kdWxlIGludG8gYW5vdGhlciwgd3JhcHBpbmcgdGhlbSB3aXRoIGEgRGVwcmVjYXRpb25XYXJuaW5nIiIiCisgICAgaW1wb3J0IHN5cworCisgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVuYW1lLCBmcm9tbGlzdCA9IGZyb21saXN0KQorICAgIGZvciBwb3NpdGlvbiwgb2JqbmFtZSBpbiBlbnVtZXJhdGUoZnJvbWxpc3QpOgorICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgb2JqbmFtZSkKKyAgICAgICAgbmV3b2JqID0gZGVwcmVjYXRlZChvYmosICJ7MH0uezF9Ii5mb3JtYXQoY3VycmVudCwgb2JqbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgezB9LnsxfSBpbnN0ZWFkIi5mb3JtYXQobW9kdWxlbmFtZSwgb2JqbmFtZSkpCisgICAgICAgIGlmIHJlbmFtZXM6CisgICAgICAgICAgICBuZXduYW1lID0gcmVuYW1lc1twb3NpdGlvbl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld25hbWUgPSBvYmpuYW1lCisKKyAgICAgICAgc2V0YXR0cihzeXMubW9kdWxlc1tjdXJyZW50XSwgbmV3bmFtZSwgbmV3b2JqKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2J1aWxkLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9idWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhjMzk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9idWlsZC5weQpAQCAtMCwwICsxLDc3MCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSAnQnVpbGQnIGltcGxlbWVudGF0aW9uCisjCisjIENvcmUgY29kZSBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uIGFuZCB0YXNrIGhhbmRsaW5nIGluIHRoZQorIyBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBCYXNlZCBvbiBHZW50b28ncyBwb3J0YWdlLnB5LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBnbG9iCitpbXBvcnQgdGltZQoraW1wb3J0IHN0YXQKK2ltcG9ydCBiYgoraW1wb3J0IGJiLm1zZworaW1wb3J0IGJiLnByb2Nlc3MKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgbmVzdGVkCitmcm9tIGJiIGltcG9ydCBldmVudCwgdXRpbHMKKworYmJsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5CdWlsZCcpCisKK05VTEwgPSBvcGVuKG9zLmRldm51bGwsICdyKycpCisKK19fbXRpbWVfY2FjaGUgPSB7fQorCitkZWYgY2FjaGVkX210aW1lX25vZXJyb3IoZik6CisgICAgaWYgZiBub3QgaW4gX19tdGltZV9jYWNoZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX19tdGltZV9jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gMAorICAgIHJldHVybiBfX210aW1lX2NhY2hlW2ZdCisKK2RlZiByZXNldF9jYWNoZSgpOgorICAgIGdsb2JhbCBfX210aW1lX2NhY2hlCisgICAgX19tdGltZV9jYWNoZSA9IHt9CisKKyMgV2hlbiB3ZSBleGVjdXRlIGEgUHl0aG9uIGZ1bmN0aW9uLCB3ZSdkIGxpa2UgY2VydGFpbiB0aGluZ3MKKyMgaW4gYWxsIG5hbWVzcGFjZXMsIGhlbmNlIHdlIGFkZCB0aGVtIHRvIF9fYnVpbHRpbnNfXy4KKyMgSWYgd2UgZG8gbm90IGRvIHRoaXMgYW5kIHVzZSB0aGUgZXhlYyBnbG9iYWxzLCB0aGV5IHdpbGwKKyMgbm90IGJlIGF2YWlsYWJsZSB0byBzdWJmdW5jdGlvbnMuCitfX2J1aWx0aW5zX19bJ2JiJ10gPSBiYgorX19idWlsdGluc19fWydvcyddID0gb3MKKworY2xhc3MgRnVuY0ZhaWxlZChFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lID0gTm9uZSwgbG9nZmlsZSA9IE5vbmUpOgorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgIHNlbGYubXNnID0gJ0Z1bmN0aW9uIGZhaWxlZDogJXMnICUgbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tc2cgPSAiRnVuY3Rpb24gZmFpbGVkIgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5sb2dmaWxlKToKKyAgICAgICAgICAgIG1zZyA9ICgiJXMgKGxvZyBmaWxlIGlzIGxvY2F0ZWQgYXQgJXMpIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYubXNnLCBzZWxmLmxvZ2ZpbGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gc2VsZi5tc2cKKyAgICAgICAgcmV0dXJuIG1zZworCitjbGFzcyBUYXNrQmFzZShldmVudC5FdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgdGFzayBldmVudHMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0LCBsb2dmaWxlLCBkKToKKyAgICAgICAgc2VsZi5fdGFzayA9IHQKKyAgICAgICAgc2VsZi5fcGFja2FnZSA9IGQuZ2V0VmFyKCJQRiIsIFRydWUpCisgICAgICAgIHNlbGYudGFza2ZpbGUgPSBkLmdldFZhcigiRklMRSIsIFRydWUpCisgICAgICAgIHNlbGYudGFza25hbWUgPSBzZWxmLl90YXNrCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi50aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9ICJyZWNpcGUgJXM6IHRhc2sgJXM6ICVzIiAlIChkLmdldFZhcigiUEYiLCBUcnVlKSwgdCwgc2VsZi5nZXREaXNwbGF5TmFtZSgpKQorCisgICAgZGVmIGdldFRhc2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90YXNrCisKKyAgICBkZWYgc2V0VGFzayhzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5fdGFzayA9IHRhc2sKKworICAgIGRlZiBnZXREaXNwbGF5TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGJiLmV2ZW50LmdldE5hbWUoc2VsZilbNDpdCisKKyAgICB0YXNrID0gcHJvcGVydHkoZ2V0VGFzaywgc2V0VGFzaywgTm9uZSwgInRhc2sgcHJvcGVydHkiKQorCitjbGFzcyBUYXNrU3RhcnRlZChUYXNrQmFzZSk6CisgICAgIiIiVGFzayBleGVjdXRpb24gc3RhcnRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0LCBsb2dmaWxlLCB0YXNrZmxhZ3MsIGQpOgorICAgICAgICBzdXBlcihUYXNrU3RhcnRlZCwgc2VsZikuX19pbml0X18odCwgbG9nZmlsZSwgZCkKKyAgICAgICAgc2VsZi50YXNrZmxhZ3MgPSB0YXNrZmxhZ3MKKworY2xhc3MgVGFza1N1Y2NlZWRlZChUYXNrQmFzZSk6CisgICAgIiIiVGFzayBleGVjdXRpb24gY29tcGxldGVkIiIiCisKK2NsYXNzIFRhc2tGYWlsZWQoVGFza0Jhc2UpOgorICAgICIiIlRhc2sgZXhlY3V0aW9uIGZhaWxlZCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIGxvZ2ZpbGUsIG1ldGFkYXRhLCBlcnJwcmludGVkID0gRmFsc2UpOgorICAgICAgICBzZWxmLmVycnByaW50ZWQgPSBlcnJwcmludGVkCisgICAgICAgIHN1cGVyKFRhc2tGYWlsZWQsIHNlbGYpLl9faW5pdF9fKHRhc2ssIGxvZ2ZpbGUsIG1ldGFkYXRhKQorCitjbGFzcyBUYXNrRmFpbGVkU2lsZW50KFRhc2tCYXNlKToKKyAgICAiIiJUYXNrIGV4ZWN1dGlvbiBmYWlsZWQgKHNpbGVudGx5KSIiIgorICAgIGRlZiBnZXREaXNwbGF5TmFtZShzZWxmKToKKyAgICAgICAgIyBEb24ndCBuZWVkIHRvIHRlbGwgdGhlIHVzZXIgaXQgd2FzIHNpbGVudAorICAgICAgICByZXR1cm4gIkZhaWxlZCIKKworY2xhc3MgVGFza0ludmFsaWQoVGFza0Jhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIG1ldGFkYXRhKToKKyAgICAgICAgc3VwZXIoVGFza0ludmFsaWQsIHNlbGYpLl9faW5pdF9fKHRhc2ssIE5vbmUsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLl9tZXNzYWdlID0gIk5vIHN1Y2ggdGFzayAnJXMnIiAlIHRhc2sKKworCitjbGFzcyBMb2dUZWUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBvdXRmaWxlKToKKyAgICAgICAgc2VsZi5vdXRmaWxlID0gb3V0ZmlsZQorICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLm91dGZpbGUubmFtZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHNlbGYubG9nZ2VyLnBsYWluKHN0cmluZykKKyAgICAgICAgc2VsZi5vdXRmaWxlLndyaXRlKHN0cmluZykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYub3V0ZmlsZS5fX2VudGVyX18oKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNpbmZvKToKKyAgICAgICAgc2VsZi5vdXRmaWxlLl9fZXhpdF9fKCpleGNpbmZvKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxMb2dUZWUgezB9PicuZm9ybWF0KHNlbGYubmFtZSkKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYub3V0ZmlsZS5mbHVzaCgpCisKK2RlZiBleGVjX2Z1bmMoZnVuYywgZCwgZGlycyA9IE5vbmUpOgorICAgICIiIkV4ZWN1dGUgYSBCQiAnZnVuY3Rpb24nIiIiCisKKyAgICBib2R5ID0gZC5nZXRWYXIoZnVuYywgRmFsc2UpCisgICAgaWYgbm90IGJvZHk6CisgICAgICAgIGlmIGJvZHkgaXMgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJGdW5jdGlvbiAlcyBkb2Vzbid0IGV4aXN0IiwgZnVuYykKKyAgICAgICAgcmV0dXJuCisKKyAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoZnVuYykKKyAgICBjbGVhbmRpcnMgPSBmbGFncy5nZXQoJ2NsZWFuZGlycycpCisgICAgaWYgY2xlYW5kaXJzOgorICAgICAgICBmb3IgY2RpciBpbiBkLmV4cGFuZChjbGVhbmRpcnMpLnNwbGl0KCk6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoY2RpciwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjZGlyKQorCisgICAgaWYgZGlycyBpcyBOb25lOgorICAgICAgICBkaXJzID0gZmxhZ3MuZ2V0KCdkaXJzJykKKyAgICAgICAgaWYgZGlyczoKKyAgICAgICAgICAgIGRpcnMgPSBkLmV4cGFuZChkaXJzKS5zcGxpdCgpCisKKyAgICBpZiBkaXJzOgorICAgICAgICBmb3IgYWRpciBpbiBkaXJzOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGFkaXIpCisgICAgICAgIGFkaXIgPSBkaXJzWy0xXQorICAgIGVsc2U6CisgICAgICAgIGFkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhZGlyKQorCisgICAgaXNweXRob24gPSBmbGFncy5nZXQoJ3B5dGhvbicpCisKKyAgICBsb2NrZmxhZyA9IGZsYWdzLmdldCgnbG9ja2ZpbGVzJykKKyAgICBpZiBsb2NrZmxhZzoKKyAgICAgICAgbG9ja2ZpbGVzID0gW2YgZm9yIGYgaW4gZC5leHBhbmQobG9ja2ZsYWcpLnNwbGl0KCldCisgICAgZWxzZToKKyAgICAgICAgbG9ja2ZpbGVzID0gTm9uZQorCisgICAgdGVtcGRpciA9IGQuZ2V0VmFyKCdUJywgVHJ1ZSkKKworICAgICMgb3IgZnVuYyBhbGxvd3MgaXRlbXMgdG8gYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgbm9ybWFsCisgICAgIyB0YXNrIHNldCwgc3VjaCBhcyBidWlsZGhpc3RvcnkKKyAgICB0YXNrID0gZC5nZXRWYXIoJ0JCX1JVTlRBU0snLCBUcnVlKSBvciBmdW5jCisgICAgaWYgdGFzayA9PSBmdW5jOgorICAgICAgICB0YXNrZnVuYyA9IHRhc2sKKyAgICBlbHNlOgorICAgICAgICB0YXNrZnVuYyA9ICIlcy4lcyIgJSAodGFzaywgZnVuYykKKworICAgIHJ1bmZtdCA9IGQuZ2V0VmFyKCdCQl9SVU5GTVQnLCBUcnVlKSBvciAicnVuLntmdW5jfS57cGlkfSIKKyAgICBydW5mbiA9IHJ1bmZtdC5mb3JtYXQodGFza2Z1bmM9dGFza2Z1bmMsIHRhc2s9dGFzaywgZnVuYz1mdW5jLCBwaWQ9b3MuZ2V0cGlkKCkpCisgICAgcnVuZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCBydW5mbikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHJ1bmZpbGUpKQorCisgICAgIyBTZXR1cCB0aGUgY291cnRlc3kgbGluayB0byB0aGUgcnVuZm4sIG9ubHkgZm9yIHRhc2tzCisgICAgIyB3ZSBjcmVhdGUgdGhlIGxpbmsgJ2p1c3QnIGJlZm9yZSB0aGUgcnVuIHNjcmlwdCBpcyBjcmVhdGVkCisgICAgIyBpZiB3ZSBjcmVhdGUgaXQgYWZ0ZXIsIGFuZCBpZiB0aGUgcnVuIHNjcmlwdCBmYWlscywgdGhlbiB0aGUKKyAgICAjIGxpbmsgd29uJ3QgYmUgY3JlYXRlZCBhcyBhbiBleGNlcHRpb24gd291bGQgYmUgZmlyZWQuCisgICAgaWYgdGFzayA9PSBmdW5jOgorICAgICAgICBydW5saW5rID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdydW4uezB9Jy5mb3JtYXQodGFzaykpCisgICAgICAgIGlmIHJ1bmxpbms6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocnVubGluaykKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsocnVuZm4sIHJ1bmxpbmspCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICB3aXRoIGJiLnV0aWxzLmZpbGVzbG9ja2VkKGxvY2tmaWxlcyk6CisgICAgICAgIGlmIGlzcHl0aG9uOgorICAgICAgICAgICAgZXhlY19mdW5jX3B5dGhvbihmdW5jLCBkLCBydW5maWxlLCBjd2Q9YWRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZWNfZnVuY19zaGVsbChmdW5jLCBkLCBydW5maWxlLCBjd2Q9YWRpcikKKworX2Z1bmN0aW9uZm10ID0gIiIiCitkZWYge2Z1bmN0aW9ufShkKToKK3tib2R5fQorCit7ZnVuY3Rpb259KGQpCisiIiIKK2xvZ2Zvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorZGVmIGV4ZWNfZnVuY19weXRob24oZnVuYywgZCwgcnVuZmlsZSwgY3dkPU5vbmUpOgorICAgICIiIkV4ZWN1dGUgYSBweXRob24gQkIgJ2Z1bmN0aW9uJyIiIgorCisgICAgYmJmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIGNvZGUgPSBfZnVuY3Rpb25mbXQuZm9ybWF0KGZ1bmN0aW9uPWZ1bmMsIGJvZHk9ZC5nZXRWYXIoZnVuYywgVHJ1ZSkpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShydW5maWxlKSkKKyAgICB3aXRoIG9wZW4ocnVuZmlsZSwgJ3cnKSBhcyBzY3JpcHQ6CisgICAgICAgIGJiLmRhdGEuZW1pdF9mdW5jX3B5dGhvbihmdW5jLCBzY3JpcHQsIGQpCisKKyAgICBpZiBjd2Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9sZGRpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgb2xkZGlyID0gTm9uZQorICAgICAgICBvcy5jaGRpcihjd2QpCisKKyAgICBiYi5kZWJ1ZygyLCAiRXhlY3V0aW5nIHB5dGhvbiBmdW5jdGlvbiAlcyIgJSBmdW5jKQorCisgICAgdHJ5OgorICAgICAgICBjb21wID0gdXRpbHMuYmV0dGVyX2NvbXBpbGUoY29kZSwgZnVuYywgYmJmaWxlKQorICAgICAgICB1dGlscy5iZXR0ZXJfZXhlYyhjb21wLCB7ImQiOiBkfSwgY29kZSwgYmJmaWxlKQorICAgIGV4Y2VwdCAoYmIucGFyc2UuU2tpcFJlY2lwZSwgYmIuYnVpbGQuRnVuY0ZhaWxlZCk6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0OgorICAgICAgICByYWlzZSBGdW5jRmFpbGVkKGZ1bmMsIE5vbmUpCisgICAgZmluYWxseToKKyAgICAgICAgYmIuZGVidWcoMiwgIlB5dGhvbiBmdW5jdGlvbiAlcyBmaW5pc2hlZCIgJSBmdW5jKQorCisgICAgICAgIGlmIGN3ZCBhbmQgb2xkZGlyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworZGVmIHNoZWxsX3RyYXBfY29kZSgpOgorICAgIHJldHVybiAnJycjIS9iaW4vc2hcbgorIyBFbWl0IGEgdXNlZnVsIGRpYWdub3N0aWMgaWYgc29tZXRoaW5nIGZhaWxzOgorYmJfZXhpdF9oYW5kbGVyKCkgeworICAgIHJldD0kPworICAgIGNhc2UgJHJldCBpbgorICAgIDApICA7OworICAgICopICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICAgICAgIiIpICAgZWNobyAiV0FSTklORzogZXhpdCBjb2RlICRyZXQgZnJvbSBhIHNoZWxsIGNvbW1hbmQuIjs7CisgICAgICAgICopICAgIGVjaG8gIldBUk5JTkc6ICR7QkFTSF9TT1VSQ0VbMF19OiR7QkFTSF9MSU5FTk9bMF19IGV4aXQgJHJldCBmcm9tCisgIFwiJEJBU0hfQ09NTUFORFwiIjs7CisgICAgICAgIGVzYWMKKyAgICAgICAgZXhpdCAkcmV0CisgICAgZXNhYworfQordHJhcCAnYmJfZXhpdF9oYW5kbGVyJyAwCitzZXQgLWUKKycnJworCitkZWYgZXhlY19mdW5jX3NoZWxsKGZ1bmMsIGQsIHJ1bmZpbGUsIGN3ZD1Ob25lKToKKyAgICAiIiJFeGVjdXRlIGEgc2hlbGwgZnVuY3Rpb24gZnJvbSB0aGUgbWV0YWRhdGEKKworICAgIE5vdGUgb24gZGlyZWN0b3J5IGJlaGF2aW9yLiAgVGhlICdkaXJzJyB2YXJmbGFnIHNob3VsZCBjb250YWluIGEgbGlzdAorICAgIG9mIHRoZSBkaXJlY3RvcmllcyB5b3UgbmVlZCBjcmVhdGVkIHByaW9yIHRvIGV4ZWN1dGlvbi4gIFRoZSBsYXN0CisgICAgaXRlbSBpbiB0aGUgbGlzdCBpcyB3aGVyZSB3ZSB3aWxsIGNoZGlyL2NkIHRvLgorICAgICIiIgorCisgICAgIyBEb24ndCBsZXQgdGhlIGVtaXR0ZWQgc2hlbGwgc2NyaXB0IG92ZXJyaWRlIFBXRAorICAgIGQuZGVsVmFyRmxhZygnUFdEJywgJ2V4cG9ydCcpCisKKyAgICB3aXRoIG9wZW4ocnVuZmlsZSwgJ3cnKSBhcyBzY3JpcHQ6CisgICAgICAgIHNjcmlwdC53cml0ZShzaGVsbF90cmFwX2NvZGUoKSkKKworICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYyhmdW5jLCBzY3JpcHQsIGQpCisKKyAgICAgICAgaWYgYmIubXNnLmxvZ2dlclZlcmJvc2VMb2dzOgorICAgICAgICAgICAgc2NyaXB0LndyaXRlKCJzZXQgLXhcbiIpCisgICAgICAgIGlmIGN3ZDoKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiY2QgJyVzJ1xuIiAlIGN3ZCkKKyAgICAgICAgc2NyaXB0LndyaXRlKCIlc1xuIiAlIGZ1bmMpCisgICAgICAgIHNjcmlwdC53cml0ZSgnJycKKyMgY2xlYW51cAorcmV0PSQ/Cit0cmFwICcnIDAKK2V4aXQgJHJldAorJycnKQorCisgICAgb3MuY2htb2QocnVuZmlsZSwgMDc3NSkKKworICAgIGNtZCA9IHJ1bmZpbGUKKyAgICBpZiBkLmdldFZhckZsYWcoZnVuYywgJ2Zha2Vyb290Jyk6CisgICAgICAgIGZha2Vyb290Y21kID0gZC5nZXRWYXIoJ0ZBS0VST09UJywgVHJ1ZSkKKyAgICAgICAgaWYgZmFrZXJvb3RjbWQ6CisgICAgICAgICAgICBjbWQgPSBbZmFrZXJvb3RjbWQsIHJ1bmZpbGVdCisKKyAgICBpZiBiYi5tc2cubG9nZ2VyRGVmYXVsdFZlcmJvc2U6CisgICAgICAgIGxvZ2ZpbGUgPSBMb2dUZWUobG9nZ2VyLCBzeXMuc3Rkb3V0KQorICAgIGVsc2U6CisgICAgICAgIGxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CisKKyAgICBkZWYgcmVhZGZpZm8oZGF0YSk6CisgICAgICAgIGxpbmVzID0gZGF0YS5zcGxpdCgnXDAnKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICBjbWQgPSBzcGxpdHZhbFswXQorICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsKSA+IDE6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbFsxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgICAgICBpZiBjbWQgPT0gJ2JicGxhaW4nOgorICAgICAgICAgICAgICAgIGJiLnBsYWluKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2Jibm90ZSc6CisgICAgICAgICAgICAgICAgYmIubm90ZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgY21kID09ICdiYndhcm4nOgorICAgICAgICAgICAgICAgIGJiLndhcm4odmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJlcnJvcic6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJmYXRhbCc6CisgICAgICAgICAgICAgICAgIyBUaGUgY2FsbGVyIHdpbGwgY2FsbCBleGl0IHRoZW1zZWx2ZXMsIHNvIGJiLmVycm9yKCkgaXMKKyAgICAgICAgICAgICAgICAjIHdoYXQgd2Ugd2FudCBoZXJlIHJhdGhlciB0aGFuIGJiLmZhdGFsKCkKKyAgICAgICAgICAgICAgICBiYi5lcnJvcih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgY21kID09ICdiYmZhdGFsX2xvZyc6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUsIGZvcmNlbG9nPVRydWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJkZWJ1Zyc6CisgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSB2YWx1ZS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICAgICAgbGV2ZWwgPSBpbnQoc3BsaXR2YWxbMF0pCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbFsxXQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKGxldmVsLCB2YWx1ZSkKKworICAgIHRlbXBkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCisgICAgZmlmb3BhdGggPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2ZpZm8uJXMnICUgb3MuZ2V0cGlkKCkpCisgICAgaWYgb3MucGF0aC5leGlzdHMoZmlmb3BhdGgpOgorICAgICAgICBvcy51bmxpbmsoZmlmb3BhdGgpCisgICAgb3MubWtmaWZvKGZpZm9wYXRoKQorICAgIHdpdGggb3BlbihmaWZvcGF0aCwgJ3IrJykgYXMgZmlmbzoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIkV4ZWN1dGluZyBzaGVsbCBmdW5jdGlvbiAlcyIgJSBmdW5jKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICdyKycpIGFzIHN0ZGluOgorICAgICAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bihjbWQsIHNoZWxsPUZhbHNlLCBzdGRpbj1zdGRpbiwgbG9nPWxvZ2ZpbGUsIGV4dHJhZmlsZXM9WyhmaWZvLHJlYWRmaWZvKV0pCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dmbiA9IGQuZ2V0VmFyKCdCQl9MT0dGSUxFJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICByYWlzZSBGdW5jRmFpbGVkKGZ1bmMsIGxvZ2ZuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKGZpZm9wYXRoKQorCisgICAgYmIuZGVidWcoMiwgIlNoZWxsIGZ1bmN0aW9uICVzIGZpbmlzaGVkIiAlIGZ1bmMpCisKK2RlZiBfdGFza19kYXRhKGZuLCB0YXNrLCBkKToKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9GSUxFTkFNRScsIGZuKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgdGFza1szOl0pCisgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgJ3Rhc2stJXM6JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICh0YXNrWzM6XS5yZXBsYWNlKCdfJywgJy0nKSwgZC5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKSkpCisgICAgbG9jYWxkYXRhLmZpbmFsaXplKCkKKyAgICBiYi5kYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorICAgIHJldHVybiBsb2NhbGRhdGEKKworZGVmIF9leGVjX3Rhc2soZm4sIHRhc2ssIGQsIHF1aWV0ZXJyKToKKyAgICAiIiJFeGVjdXRlIGEgQkIgJ3Rhc2snCisKKyAgICBFeGVjdXRpb24gb2YgYSB0YXNrIGludm9sdmVzIGEgYml0IG1vcmUgc2V0dXAgdGhhbiBleGVjdXRpbmcgYSBmdW5jdGlvbiwKKyAgICBydW5uaW5nIGl0IHdpdGggaXRzIG93biBsb2NhbCBtZXRhZGF0YSwgYW5kIHdpdGggc29tZSB1c2VmdWwgdmFyaWFibGVzIHNldC4KKyAgICAiIiIKKyAgICBpZiBub3QgZC5nZXRWYXJGbGFnKHRhc2ssICd0YXNrJyk6CisgICAgICAgIGV2ZW50LmZpcmUoVGFza0ludmFsaWQodGFzaywgZCksIGQpCisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gc3VjaCB0YXNrOiAlcyIgJSB0YXNrKQorICAgICAgICByZXR1cm4gMQorCisgICAgbG9nZ2VyLmRlYnVnKDEsICJFeGVjdXRpbmcgdGFzayAlcyIsIHRhc2spCisKKyAgICBsb2NhbGRhdGEgPSBfdGFza19kYXRhKGZuLCB0YXNrLCBkKQorICAgIHRlbXBkaXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICBpZiBub3QgdGVtcGRpcjoKKyAgICAgICAgYmIuZmF0YWwoIlQgdmFyaWFibGUgbm90IHNldCwgdW5hYmxlIHRvIGJ1aWxkIikKKworICAgICMgQ2hhbmdlIG5pY2UgbGV2ZWwgaWYgd2UncmUgYXNrZWQgdG8KKyAgICBuaWNlID0gbG9jYWxkYXRhLmdldFZhcigiQkJfVEFTS19OSUNFX0xFVkVMIiwgVHJ1ZSkKKyAgICBpZiBuaWNlOgorICAgICAgICBjdXJuaWNlID0gb3MubmljZSgwKQorICAgICAgICBuaWNlID0gaW50KG5pY2UpIC0gY3VybmljZQorICAgICAgICBuZXduaWNlID0gb3MubmljZShuaWNlKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbmljZSB0byAlcyAiICUgbmV3bmljZSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZW1wZGlyKQorCisgICAgIyBEZXRlcm1pbmUgdGhlIGxvZ2ZpbGUgdG8gZ2VuZXJhdGUKKyAgICBsb2dmbXQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdCQl9MT0dGTVQnLCBUcnVlKSBvciAnbG9nLnt0YXNrfS57cGlkfScKKyAgICBsb2diYXNlID0gbG9nZm10LmZvcm1hdCh0YXNrPXRhc2ssIHBpZD1vcy5nZXRwaWQoKSkKKworICAgICMgRG9jdW1lbnQgdGhlIG9yZGVyIG9mIHRoZSB0YXNrcy4uLgorICAgIGxvZ29yZGVyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsb2cudGFza19vcmRlcicpCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4obG9nb3JkZXIsICdhJykgYXMgbG9nb3JkZXJmaWxlOgorICAgICAgICAgICAgbG9nb3JkZXJmaWxlLndyaXRlKCd7MH0gKHsxfSk6IHsyfVxuJy5mb3JtYXQodGFzaywgb3MuZ2V0cGlkKCksIGxvZ2Jhc2UpKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJPcGVuaW5nIGxvZyBmaWxlICclcyciLCBsb2dvcmRlcikKKyAgICAgICAgcGFzcworCisgICAgIyBTZXR1cCB0aGUgY291cnRlc3kgbGluayB0byB0aGUgbG9nZm4KKyAgICBsb2dsaW5rID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsb2cuezB9Jy5mb3JtYXQodGFzaykpCisgICAgbG9nZm4gPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgbG9nYmFzZSkKKyAgICBpZiBsb2dsaW5rOgorICAgICAgICBiYi51dGlscy5yZW1vdmUobG9nbGluaykKKworICAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnN5bWxpbmsobG9nYmFzZSwgbG9nbGluaykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgIHByZWZ1bmNzID0gbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ3ByZWZ1bmNzJywgZXhwYW5kPVRydWUpCisgICAgcG9zdGZ1bmNzID0gbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ3Bvc3RmdW5jcycsIGV4cGFuZD1UcnVlKQorCisgICAgY2xhc3MgRXJyb3JDaGVja0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi50cmlnZ2VyZWQgPSBGYWxzZQorICAgICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYsIGxvZ2dpbmcuRVJST1IpCisgICAgICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiBnZXRhdHRyKHJlY29yZCwgJ2ZvcmNlbG9nJywgRmFsc2UpOgorICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcmVkID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyZWQgPSBUcnVlCisKKyAgICAjIEhhbmRsZSBsb2dmaWxlcworICAgIHNpID0gb3BlbignL2Rldi9udWxsJywgJ3InKQorICAgIHRyeToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShsb2dmbikpCisgICAgICAgIGxvZ2ZpbGUgPSBvcGVuKGxvZ2ZuLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIGxvZ2dlci5leGNlcHRpb24oIk9wZW5pbmcgbG9nIGZpbGUgJyVzJyIsIGxvZ2ZuKQorICAgICAgICBwYXNzCisKKyAgICAjIER1cCB0aGUgZXhpc3RpbmcgZmRzIHNvIHdlIGRvbnQgbG9zZSB0aGVtCisgICAgb3NpID0gW29zLmR1cChzeXMuc3RkaW4uZmlsZW5vKCkpLCBzeXMuc3RkaW4uZmlsZW5vKCldCisgICAgb3NvID0gW29zLmR1cChzeXMuc3Rkb3V0LmZpbGVubygpKSwgc3lzLnN0ZG91dC5maWxlbm8oKV0KKyAgICBvc2UgPSBbb3MuZHVwKHN5cy5zdGRlcnIuZmlsZW5vKCkpLCBzeXMuc3RkZXJyLmZpbGVubygpXQorCisgICAgIyBSZXBsYWNlIHRob3NlIGZkcyB3aXRoIG91ciBvd24KKyAgICBvcy5kdXAyKHNpLmZpbGVubygpLCBvc2lbMV0pCisgICAgb3MuZHVwMihsb2dmaWxlLmZpbGVubygpLCBvc29bMV0pCisgICAgb3MuZHVwMihsb2dmaWxlLmZpbGVubygpLCBvc2VbMV0pCisKKyAgICAjIEVuc3VyZSBQeXRob24gbG9nZ2luZyBnb2VzIHRvIHRoZSBsb2dmaWxlCisgICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihsb2dmaWxlKQorICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2Zvcm1hdHRlcikKKyAgICAjIEFsd2F5cyBlbmFibGUgZnVsbCBkZWJ1ZyBvdXRwdXQgaW50byB0YXNrIGxvZ2ZpbGVzCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHIC0gMikKKyAgICBiYmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKyAgICBlcnJjaGsgPSBFcnJvckNoZWNrSGFuZGxlcigpCisgICAgYmJsb2dnZXIuYWRkSGFuZGxlcihlcnJjaGspCisKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9MT0dGSUxFJywgbG9nZm4pCisgICAgbG9jYWxkYXRhLnNldFZhcignQkJfUlVOVEFTSycsIHRhc2spCisKKyAgICBmbGFncyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncyh0YXNrKQorCisgICAgZXZlbnQuZmlyZShUYXNrU3RhcnRlZCh0YXNrLCBsb2dmbiwgZmxhZ3MsIGxvY2FsZGF0YSksIGxvY2FsZGF0YSkKKyAgICB0cnk6CisgICAgICAgIGZvciBmdW5jIGluIChwcmVmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgIGV4ZWNfZnVuYyhmdW5jLCBsb2NhbGRhdGEpCisgICAgICAgIGV4ZWNfZnVuYyh0YXNrLCBsb2NhbGRhdGEpCisgICAgICAgIGZvciBmdW5jIGluIChwb3N0ZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICBleGVjX2Z1bmMoZnVuYywgbG9jYWxkYXRhKQorICAgIGV4Y2VwdCBGdW5jRmFpbGVkIGFzIGV4YzoKKyAgICAgICAgaWYgcXVpZXRlcnI6CisgICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWRTaWxlbnQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSksIGxvY2FsZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycnByaW50ZWQgPSBlcnJjaGsudHJpZ2dlcmVkCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSwgZXJycHJpbnRlZCksIGxvY2FsZGF0YSkKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgYmJsb2dnZXIucmVtb3ZlSGFuZGxlcihoYW5kbGVyKQorCisgICAgICAgICMgUmVzdG9yZSB0aGUgYmFja3VwIGZkcworICAgICAgICBvcy5kdXAyKG9zaVswXSwgb3NpWzFdKQorICAgICAgICBvcy5kdXAyKG9zb1swXSwgb3NvWzFdKQorICAgICAgICBvcy5kdXAyKG9zZVswXSwgb3NlWzFdKQorCisgICAgICAgICMgQ2xvc2UgdGhlIGJhY2t1cCBmZHMKKyAgICAgICAgb3MuY2xvc2Uob3NpWzBdKQorICAgICAgICBvcy5jbG9zZShvc29bMF0pCisgICAgICAgIG9zLmNsb3NlKG9zZVswXSkKKyAgICAgICAgc2kuY2xvc2UoKQorCisgICAgICAgIGxvZ2ZpbGUuY2xvc2UoKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2dmbikgYW5kIG9zLnBhdGguZ2V0c2l6ZShsb2dmbikgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiWmVybyBzaXplIGxvZ2ZuICVzLCByZW1vdmluZyIsIGxvZ2ZuKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGxvZ2ZuKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGxvZ2xpbmspCisgICAgZXZlbnQuZmlyZShUYXNrU3VjY2VlZGVkKHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEpLCBsb2NhbGRhdGEpCisKKyAgICBpZiBub3QgbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ25vc3RhbXAnKSBhbmQgbm90IGxvY2FsZGF0YS5nZXRWYXJGbGFnKHRhc2ssICdzZWxmc3RhbXAnKToKKyAgICAgICAgbWFrZV9zdGFtcCh0YXNrLCBsb2NhbGRhdGEpCisKKyAgICByZXR1cm4gMAorCitkZWYgZXhlY190YXNrKGZuLCB0YXNrLCBkLCBwcm9maWxlID0gRmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgcXVpZXRlcnIgPSBGYWxzZQorICAgICAgICBpZiBkLmdldFZhckZsYWcodGFzaywgInF1aWV0ZXJyb3JzIikgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBxdWlldGVyciA9IFRydWUKKworICAgICAgICBpZiBwcm9maWxlOgorICAgICAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS0lcy5sb2ciICUgKGQuZ2V0VmFyKCJQTiIsIFRydWUpICsgIi0iICsgdGFzaykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltcG9ydCBwcm9maWxlCisgICAgICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgICAgIHJldCA9IHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIF9leGVjX3Rhc2ssIGZuLCB0YXNrLCBkLCBxdWlldGVycikKKyAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhwcm9mbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZyhwcm9mbmFtZSkKKworICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIF9leGVjX3Rhc2soZm4sIHRhc2ssIGQsIHF1aWV0ZXJyKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMKKyAgICAgICAgaWYgbm90IHF1aWV0ZXJyOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJCdWlsZCBvZiAlcyBmYWlsZWQiICUgKHRhc2spKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIGZhaWxlZGV2ZW50ID0gVGFza0ZhaWxlZCh0YXNrLCBOb25lLCBkLCBUcnVlKQorICAgICAgICAgICAgZXZlbnQuZmlyZShmYWlsZWRldmVudCwgZCkKKyAgICAgICAgcmV0dXJuIDEKKworZGVmIHN0YW1wX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUsIGJhc2Vvbmx5PUZhbHNlKToKKyAgICAiIiIKKyAgICBJbnRlcm5hbCBzdGFtcCBoZWxwZXIgZnVuY3Rpb24KKyAgICBNYWtlcyBzdXJlIHRoZSBzdGFtcCBkaXJlY3RvcnkgZXhpc3RzCisgICAgUmV0dXJucyB0aGUgc3RhbXAgcGF0aCtmaWxlbmFtZQorCisgICAgSW4gdGhlIGJpdGJha2UgY29yZSwgZCBjYW4gYmUgYSBDYWNoZURhdGEgYW5kIGZpbGVfbmFtZSB3aWxsIGJlIHNldC4KKyAgICBXaGVuIGNhbGxlZCBpbiB0YXNrIGNvbnRleHQsIGQgd2lsbCBiZSBhIGRhdGEgc3RvcmUsIGZpbGVfbmFtZSB3aWxsIG5vdCBiZSBzZXQKKyAgICAiIiIKKyAgICB0YXNrZmxhZ25hbWUgPSB0YXNrbmFtZQorICAgIGlmIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKSBhbmQgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIjoKKyAgICAgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wID0gZC5zdGFtcF9iYXNlW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgZC5zdGFtcFtmaWxlX25hbWVdCisgICAgICAgIGV4dHJhaW5mbyA9IGQuc3RhbXBfZXh0cmFpbmZvW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgIiIKKyAgICBlbHNlOgorICAgICAgICBzdGFtcCA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1iYXNlJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1NUQU1QJywgVHJ1ZSkKKyAgICAgICAgZmlsZV9uYW1lID0gZC5nZXRWYXIoJ0JCX0ZJTEVOQU1FJywgVHJ1ZSkKKyAgICAgICAgZXh0cmFpbmZvID0gZC5nZXRWYXJGbGFnKHRhc2tmbGFnbmFtZSwgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKSBvciAiIgorCisgICAgaWYgYmFzZW9ubHk6CisgICAgICAgIHJldHVybiBzdGFtcAorCisgICAgaWYgbm90IHN0YW1wOgorICAgICAgICByZXR1cm4KKworICAgIHN0YW1wID0gYmIucGFyc2Uuc2lnZ2VuLnN0YW1wZmlsZShzdGFtcCwgZmlsZV9uYW1lLCB0YXNrbmFtZSwgZXh0cmFpbmZvKQorCisgICAgc3RhbXBkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3RhbXApCisgICAgaWYgY2FjaGVkX210aW1lX25vZXJyb3Ioc3RhbXBkaXIpID09IDA6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzdGFtcGRpcikKKworICAgIHJldHVybiBzdGFtcAorCitkZWYgc3RhbXBfY2xlYW5tYXNrX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUpOgorICAgICIiIgorICAgIEludGVybmFsIHN0YW1wIGhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBzdGFtcCBjbGVhbmluZyBtYXNrCisgICAgUmV0dXJucyB0aGUgc3RhbXAgcGF0aCtmaWxlbmFtZQorCisgICAgSW4gdGhlIGJpdGJha2UgY29yZSwgZCBjYW4gYmUgYSBDYWNoZURhdGEgYW5kIGZpbGVfbmFtZSB3aWxsIGJlIHNldC4KKyAgICBXaGVuIGNhbGxlZCBpbiB0YXNrIGNvbnRleHQsIGQgd2lsbCBiZSBhIGRhdGEgc3RvcmUsIGZpbGVfbmFtZSB3aWxsIG5vdCBiZSBzZXQKKyAgICAiIiIKKyAgICB0YXNrZmxhZ25hbWUgPSB0YXNrbmFtZQorICAgIGlmIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKSBhbmQgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIjoKKyAgICAgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wID0gZC5zdGFtcF9iYXNlX2NsZWFuW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgZC5zdGFtcGNsZWFuW2ZpbGVfbmFtZV0KKyAgICAgICAgZXh0cmFpbmZvID0gZC5zdGFtcF9leHRyYWluZm9bZmlsZV9uYW1lXS5nZXQodGFza2ZsYWduYW1lKSBvciAiIgorICAgIGVsc2U6CisgICAgICAgIHN0YW1wID0gZC5nZXRWYXJGbGFnKHRhc2tmbGFnbmFtZSwgJ3N0YW1wLWJhc2UtY2xlYW4nLCBUcnVlKSBvciBkLmdldFZhcignU1RBTVBDTEVBTicsIFRydWUpCisgICAgICAgIGZpbGVfbmFtZSA9IGQuZ2V0VmFyKCdCQl9GSUxFTkFNRScsIFRydWUpCisgICAgICAgIGV4dHJhaW5mbyA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1leHRyYS1pbmZvJywgVHJ1ZSkgb3IgIiIKKworICAgIGlmIG5vdCBzdGFtcDoKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBjbGVhbm1hc2sgPSBiYi5wYXJzZS5zaWdnZW4uc3RhbXBjbGVhbm1hc2soc3RhbXAsIGZpbGVfbmFtZSwgdGFza25hbWUsIGV4dHJhaW5mbykKKworICAgIHJldHVybiBbY2xlYW5tYXNrLCBjbGVhbm1hc2sucmVwbGFjZSh0YXNrZmxhZ25hbWUsIHRhc2tmbGFnbmFtZSArICJfc2V0c2NlbmUiKV0KKworZGVmIG1ha2Vfc3RhbXAodGFzaywgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgQ3JlYXRlcy91cGRhdGVzIGEgc3RhbXAgZm9yIGEgZ2l2ZW4gdGFzaworICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCisgICAgIiIiCisgICAgY2xlYW5tYXNrID0gc3RhbXBfY2xlYW5tYXNrX2ludGVybmFsKHRhc2ssIGQsIGZpbGVfbmFtZSkKKyAgICBmb3IgbWFzayBpbiBjbGVhbm1hc2s6CisgICAgICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihtYXNrKToKKyAgICAgICAgICAgICMgUHJlc2VydmUgc2lnZGF0YSBmaWxlcyBpbiB0aGUgc3RhbXBzIGRpcmVjdG9yeQorICAgICAgICAgICAgaWYgInNpZ2RhdGEiIGluIG5hbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgUHJlc2VydmUgdGFpbnQgZmlsZXMgaW4gdGhlIHN0YW1wcyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy50YWludCcpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIHN0YW1wID0gc3RhbXBfaW50ZXJuYWwodGFzaywgZCwgZmlsZV9uYW1lKQorICAgICMgUmVtb3ZlIHRoZSBmaWxlIGFuZCByZWNyZWF0ZSB0byBmb3JjZSB0aW1lc3RhbXAKKyAgICAjIGNoYW5nZSBvbiBicm9rZW4gTkZTIGZpbGVzeXN0ZW1zCisgICAgaWYgc3RhbXA6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCkKKyAgICAgICAgb3BlbihzdGFtcCwgInciKS5jbG9zZSgpCisKKyAgICAjIElmIHdlJ3JlIGluIHRhc2sgY29udGV4dCwgd3JpdGUgb3V0IGEgc2lnbmF0dXJlIGZpbGUgZm9yIGVhY2ggdGFzaworICAgICMgYXMgaXQgY29tcGxldGVzCisgICAgaWYgbm90IHRhc2suZW5kc3dpdGgoIl9zZXRzY2VuZSIpIGFuZCB0YXNrICE9ICJkb19zZXRzY2VuZSIgYW5kIG5vdCBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wYmFzZSA9IHN0YW1wX2ludGVybmFsKHRhc2ssIGQsIE5vbmUsIFRydWUpCisgICAgICAgIGZpbGVfbmFtZSA9IGQuZ2V0VmFyKCdCQl9GSUxFTkFNRScsIFRydWUpCisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Rhc2soZmlsZV9uYW1lLCB0YXNrLCBzdGFtcGJhc2UsIFRydWUpCisKK2RlZiBkZWxfc3RhbXAodGFzaywgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgUmVtb3ZlcyBhIHN0YW1wIGZvciBhIGdpdmVuIHRhc2sKKyAgICAoZCBjYW4gYmUgYSBkYXRhIGRpY3Qgb3IgZGF0YUNhY2hlKQorICAgICIiIgorICAgIHN0YW1wID0gc3RhbXBfaW50ZXJuYWwodGFzaywgZCwgZmlsZV9uYW1lKQorICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCkKKworZGVmIHdyaXRlX3RhaW50KHRhc2ssIGQsIGZpbGVfbmFtZSA9IE5vbmUpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSAidGFpbnQiIGZpbGUgd2hpY2ggd2lsbCBmb3JjZSB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIGl0cworICAgIGRlcGVuZGVudHMgdG8gYmUgcmUtcnVuIHRoZSBuZXh0IHRpbWUgYnkgaW5mbHVlbmNpbmcgdGhlIHZhbHVlIG9mIGl0cworICAgIHRhc2toYXNoLgorICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCisgICAgIiIiCisgICAgaW1wb3J0IHV1aWQKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHRhaW50Zm4gPSBkLnN0YW1wW2ZpbGVfbmFtZV0gKyAnLicgKyB0YXNrICsgJy50YWludCcKKyAgICBlbHNlOgorICAgICAgICB0YWludGZuID0gZC5nZXRWYXIoJ1NUQU1QJywgVHJ1ZSkgKyAnLicgKyB0YXNrICsgJy50YWludCcKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHRhaW50Zm4pKQorICAgICMgVGhlIHNwZWNpZmljIGNvbnRlbnQgb2YgdGhlIHRhaW50IGZpbGUgaXMgbm90IHJlYWxseSBpbXBvcnRhbnQsCisgICAgIyB3ZSBqdXN0IG5lZWQgaXQgdG8gYmUgcmFuZG9tLCBzbyBhIHJhbmRvbSBVVUlEIGlzIHVzZWQKKyAgICB3aXRoIG9wZW4odGFpbnRmbiwgJ3cnKSBhcyB0YWludGY6CisgICAgICAgIHRhaW50Zi53cml0ZShzdHIodXVpZC51dWlkNCgpKSkKKworZGVmIHN0YW1wZmlsZSh0YXNrbmFtZSwgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBzdGFtcCBmb3IgYSBnaXZlbiB0YXNrCisgICAgKGQgY2FuIGJlIGEgZGF0YSBkaWN0IG9yIGRhdGFDYWNoZSkKKyAgICAiIiIKKyAgICByZXR1cm4gc3RhbXBfaW50ZXJuYWwodGFza25hbWUsIGQsIGZpbGVfbmFtZSkKKworZGVmIGFkZF90YXNrcyh0YXNrbGlzdCwgZCk6CisgICAgdGFza19kZXBzID0gZC5nZXRWYXIoJ190YXNrX2RlcHMnLCBGYWxzZSkKKyAgICBpZiBub3QgdGFza19kZXBzOgorICAgICAgICB0YXNrX2RlcHMgPSB7fQorICAgIGlmIG5vdCAndGFza3MnIGluIHRhc2tfZGVwczoKKyAgICAgICAgdGFza19kZXBzWyd0YXNrcyddID0gW10KKyAgICBpZiBub3QgJ3BhcmVudHMnIGluIHRhc2tfZGVwczoKKyAgICAgICAgdGFza19kZXBzWydwYXJlbnRzJ10gPSB7fQorCisgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgIHRhc2sgPSBkLmV4cGFuZCh0YXNrKQorCisgICAgICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAndGFzaycsIDEpCisKKyAgICAgICAgaWYgbm90IHRhc2sgaW4gdGFza19kZXBzWyd0YXNrcyddOgorICAgICAgICAgICAgdGFza19kZXBzWyd0YXNrcyddLmFwcGVuZCh0YXNrKQorCisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFncyh0YXNrKQorICAgICAgICBkZWYgZ2V0VGFzayhuYW1lKToKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lIGluIHRhc2tfZGVwczoKKyAgICAgICAgICAgICAgICB0YXNrX2RlcHNbbmFtZV0gPSB7fQorICAgICAgICAgICAgaWYgbmFtZSBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBkZXB0YXNrID0gZC5leHBhbmQoZmxhZ3NbbmFtZV0pCisgICAgICAgICAgICAgICAgdGFza19kZXBzW25hbWVdW3Rhc2tdID0gZGVwdGFzaworICAgICAgICBnZXRUYXNrKCdkZXBlbmRzJykKKyAgICAgICAgZ2V0VGFzaygncmRlcGVuZHMnKQorICAgICAgICBnZXRUYXNrKCdkZXB0YXNrJykKKyAgICAgICAgZ2V0VGFzaygncmRlcHRhc2snKQorICAgICAgICBnZXRUYXNrKCdyZWNyZGVwdGFzaycpCisgICAgICAgIGdldFRhc2soJ3JlY2lkZXB0YXNrJykKKyAgICAgICAgZ2V0VGFzaygnbm9zdGFtcCcpCisgICAgICAgIGdldFRhc2soJ2Zha2Vyb290JykKKyAgICAgICAgZ2V0VGFzaygnbm9leGVjJykKKyAgICAgICAgZ2V0VGFzaygndW1hc2snKQorICAgICAgICB0YXNrX2RlcHNbJ3BhcmVudHMnXVt0YXNrXSA9IFtdCisgICAgICAgIGlmICdkZXBzJyBpbiBmbGFnczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZmxhZ3NbJ2RlcHMnXToKKyAgICAgICAgICAgICAgICBkZXAgPSBkLmV4cGFuZChkZXApCisgICAgICAgICAgICAgICAgdGFza19kZXBzWydwYXJlbnRzJ11bdGFza10uYXBwZW5kKGRlcCkKKworICAgICMgZG9uJ3QgYXNzdW1lIGhvbGRpbmcgYSByZWZlcmVuY2UKKyAgICBkLnNldFZhcignX3Rhc2tfZGVwcycsIHRhc2tfZGVwcykKKworZGVmIGFkZHRhc2sodGFzaywgYmVmb3JlLCBhZnRlciwgZCk6CisgICAgaWYgdGFza1s6M10gIT0gImRvXyI6CisgICAgICAgIHRhc2sgPSAiZG9fIiArIHRhc2sKKworICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAidGFzayIsIDEpCisgICAgYmJ0YXNrcyA9IGQuZ2V0VmFyKCdfX0JCVEFTS1MnLCBGYWxzZSkgb3IgW10KKyAgICBpZiB0YXNrIG5vdCBpbiBiYnRhc2tzOgorICAgICAgICBiYnRhc2tzLmFwcGVuZCh0YXNrKQorICAgIGQuc2V0VmFyKCdfX0JCVEFTS1MnLCBiYnRhc2tzKQorCisgICAgZXhpc3RpbmcgPSBkLmdldFZhckZsYWcodGFzaywgImRlcHMiKSBvciBbXQorICAgIGlmIGFmdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAjIHNldCB1cCBkZXBzIGZvciBmdW5jdGlvbgorICAgICAgICBmb3IgZW50cnkgaW4gYWZ0ZXIuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGVudHJ5IG5vdCBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICBleGlzdGluZy5hcHBlbmQoZW50cnkpCisgICAgZC5zZXRWYXJGbGFnKHRhc2ssICJkZXBzIiwgZXhpc3RpbmcpCisgICAgaWYgYmVmb3JlIGlzIG5vdCBOb25lOgorICAgICAgICAjIHNldCB1cCB0aGluZ3MgdGhhdCBkZXBlbmQgb24gdGhpcyBmdW5jCisgICAgICAgIGZvciBlbnRyeSBpbiBiZWZvcmUuc3BsaXQoKToKKyAgICAgICAgICAgIGV4aXN0aW5nID0gZC5nZXRWYXJGbGFnKGVudHJ5LCAiZGVwcyIpIG9yIFtdCisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoZW50cnksICJkZXBzIiwgW3Rhc2tdICsgZXhpc3RpbmcpCisKK2RlZiBkZWx0YXNrKHRhc2ssIGQpOgorICAgIGlmIHRhc2tbOjNdICE9ICJkb18iOgorICAgICAgICB0YXNrID0gImRvXyIgKyB0YXNrCisKKyAgICBiYnRhc2tzID0gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXQorICAgIGlmIHRhc2sgaW4gYmJ0YXNrczoKKyAgICAgICAgYmJ0YXNrcy5yZW1vdmUodGFzaykKKyAgICAgICAgZC5zZXRWYXIoJ19fQkJUQVNLUycsIGJidGFza3MpCisKKyAgICBkLmRlbFZhckZsYWcodGFzaywgJ2RlcHMnKQorICAgIGZvciBiYnRhc2sgaW4gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXToKKyAgICAgICAgZGVwcyA9IGQuZ2V0VmFyRmxhZyhiYnRhc2ssICdkZXBzJykgb3IgW10KKyAgICAgICAgaWYgdGFzayBpbiBkZXBzOgorICAgICAgICAgICAgZGVwcy5yZW1vdmUodGFzaykKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyhiYnRhc2ssICdkZXBzJywgZGVwcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDliMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NhY2hlLnB5CkBAIC0wLDAgKzEsODUwIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIENhY2hlIGltcGxlbWVudGF0aW9uCisjCisjIENhY2hpbmcgb2YgYml0YmFrZSB2YXJpYWJsZXMgYmVmb3JlIHRhc2sgZXhlY3V0aW9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgICBSaWNoYXJkIFB1cmRpZQorIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisKKyMgYnV0IHNtYWxsIHNlY3Rpb25zIGJhc2VkIG9uIGNvZGUgZnJvbSBiaW4vYml0YmFrZToKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgYmIudXRpbHMKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQ2FjaGUiKQorCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQorICAgIGxvZ2dlci5pbmZvKCJJbXBvcnRpbmcgY1BpY2tsZSBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLiIpCisKK19fY2FjaGVfdmVyc2lvbl9fID0gIjE0OCIKKworZGVmIGdldENhY2hlRmlsZShwYXRoLCBmaWxlbmFtZSwgZGF0YV9oYXNoKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIGZpbGVuYW1lICsgIi4iICsgZGF0YV9oYXNoKQorCisjIFJlY2lwZUluZm9Db21tb24gZGVmaW5lcyBjb21tb24gZGF0YSByZXRyaWV2aW5nIG1ldGhvZHMKKyMgZnJvbSBtZXRhIGRhdGEgZm9yIGNhY2hlcy4gQ29yZVJlY2lwZUluZm8gYXMgd2VsbCBhcyBvdGhlcgorIyBFeHRyYSBSZWNpcGVJbmZvIG5lZWRzIHRvIGluaGVyaXQgdGhpcyBjbGFzcworY2xhc3MgUmVjaXBlSW5mb0NvbW1vbihvYmplY3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGxpc3R2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGNscy5nZXR2YXIodmFyLCBtZXRhZGF0YSkuc3BsaXQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGludHZhcihjbHMsIHZhciwgbWV0YWRhdGEpOgorICAgICAgICByZXR1cm4gaW50KGNscy5nZXR2YXIodmFyLCBtZXRhZGF0YSkgb3IgMCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkZXB2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhjbHMuZ2V0dmFyKHZhciwgbWV0YWRhdGEpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBrZ3ZhcihjbHMsIHZhciwgcGFja2FnZXMsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGRpY3QoKHBrZywgY2xzLmRlcHZhcigiJXNfJXMiICUgKHZhciwgcGtnKSwgbWV0YWRhdGEpKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRhc2t2YXIoY2xzLCB2YXIsIHRhc2tzLCBtZXRhZGF0YSk6CisgICAgICAgIHJldHVybiBkaWN0KCh0YXNrLCBjbHMuZ2V0dmFyKCIlc190YXNrLSVzIiAlICh2YXIsIHRhc2spLCBtZXRhZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZsYWdsaXN0KGNscywgZmxhZywgdmFybGlzdCwgbWV0YWRhdGEsIHNxdWFzaD1GYWxzZSk6CisgICAgICAgIG91dF9kaWN0ID0gZGljdCgodmFyLCBtZXRhZGF0YS5nZXRWYXJGbGFnKHZhciwgZmxhZywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGZvciB2YXIgaW4gdmFybGlzdCkKKyAgICAgICAgaWYgc3F1YXNoOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QoKGssdikgZm9yIChrLHYpIGluIG91dF9kaWN0Lml0ZXJpdGVtcygpIGlmIHYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3V0X2RpY3QKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXR2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICcnCisKKworY2xhc3MgQ29yZVJlY2lwZUluZm8oUmVjaXBlSW5mb0NvbW1vbik6CisgICAgX19zbG90c19fID0gKCkKKworICAgIGNhY2hlZmlsZSA9ICJiYl9jYWNoZS5kYXQiICAgCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIG1ldGFkYXRhKTogICAgICAKKyAgICAgICAgc2VsZi5maWxlX2RlcGVuZHMgPSBtZXRhZGF0YS5nZXRWYXIoJ19fZGVwZW5kcycsIEZhbHNlKQorICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IGJiLnBhcnNlLmNhY2hlZF9tdGltZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi52YXJpYW50cyA9IHNlbGYubGlzdHZhcignX19WQVJJQU5UUycsIG1ldGFkYXRhKSArIFsnJ10KKyAgICAgICAgc2VsZi5hcHBlbmRzID0gc2VsZi5saXN0dmFyKCdfX0JCQVBQRU5EJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYubm9jYWNoZSA9IHNlbGYuZ2V0dmFyKCdfX0JCX0RPTlRfQ0FDSEUnLCBtZXRhZGF0YSkKKworICAgICAgICBzZWxmLnNraXByZWFzb24gPSBzZWxmLmdldHZhcignX19TS0lQUEVEJywgbWV0YWRhdGEpCisgICAgICAgIGlmIHNlbGYuc2tpcHJlYXNvbjoKKyAgICAgICAgICAgIHNlbGYucG4gPSBzZWxmLmdldHZhcignUE4nLCBtZXRhZGF0YSkgb3IgYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGZpbGVuYW1lLG1ldGFkYXRhKVswXQorICAgICAgICAgICAgc2VsZi5za2lwcGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5wcm92aWRlcyAgPSBzZWxmLmRlcHZhcignUFJPVklERVMnLCBtZXRhZGF0YSkKKyAgICAgICAgICAgIHNlbGYucnByb3ZpZGVzID0gc2VsZi5kZXB2YXIoJ1JQUk9WSURFUycsIG1ldGFkYXRhKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi50YXNrcyA9IG1ldGFkYXRhLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpCisKKyAgICAgICAgc2VsZi5wbiA9IHNlbGYuZ2V0dmFyKCdQTicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnBhY2thZ2VzID0gc2VsZi5saXN0dmFyKCdQQUNLQUdFUycsIG1ldGFkYXRhKQorICAgICAgICBpZiBub3Qgc2VsZi5wbiBpbiBzZWxmLnBhY2thZ2VzOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlcy5hcHBlbmQoc2VsZi5wbikKKworICAgICAgICBzZWxmLmJhc2V0YXNraGFzaGVzID0gc2VsZi50YXNrdmFyKCdCQl9CQVNFSEFTSCcsIHNlbGYudGFza3MsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmhhc2hmaWxlbmFtZSA9IHNlbGYuZ2V0dmFyKCdCQl9IQVNIRklMRU5BTUUnLCBtZXRhZGF0YSkKKworICAgICAgICBzZWxmLnRhc2tfZGVwcyA9IG1ldGFkYXRhLmdldFZhcignX3Rhc2tfZGVwcycsIEZhbHNlKSBvciB7J3Rhc2tzJzogW10sICdwYXJlbnRzJzoge319CisKKyAgICAgICAgc2VsZi5za2lwcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5wZSA9IHNlbGYuZ2V0dmFyKCdQRScsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnB2ID0gc2VsZi5nZXR2YXIoJ1BWJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucHIgPSBzZWxmLmdldHZhcignUFInLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZWZhdWx0cHJlZiA9IHNlbGYuaW50dmFyKCdERUZBVUxUX1BSRUZFUkVOQ0UnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5ub3Rfd29ybGQgPSBzZWxmLmdldHZhcignRVhDTFVERV9GUk9NX1dPUkxEJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXAgPSBzZWxmLmdldHZhcignU1RBTVAnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zdGFtcGNsZWFuID0gc2VsZi5nZXR2YXIoJ1NUQU1QQ0xFQU4nLCBtZXRhZGF0YSkgICAgICAgIAorICAgICAgICBzZWxmLnN0YW1wX2Jhc2UgPSBzZWxmLmZsYWdsaXN0KCdzdGFtcC1iYXNlJywgc2VsZi50YXNrcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXBfYmFzZV9jbGVhbiA9IHNlbGYuZmxhZ2xpc3QoJ3N0YW1wLWJhc2UtY2xlYW4nLCBzZWxmLnRhc2tzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zdGFtcF9leHRyYWluZm8gPSBzZWxmLmZsYWdsaXN0KCdzdGFtcC1leHRyYS1pbmZvJywgc2VsZi50YXNrcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZmlsZV9jaGVja3N1bXMgPSBzZWxmLmZsYWdsaXN0KCdmaWxlLWNoZWNrc3VtcycsIHNlbGYudGFza3MsIG1ldGFkYXRhLCBUcnVlKQorICAgICAgICBzZWxmLnBhY2thZ2VzX2R5bmFtaWMgPSBzZWxmLmxpc3R2YXIoJ1BBQ0tBR0VTX0RZTkFNSUMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZXBlbmRzICAgICAgICAgID0gc2VsZi5kZXB2YXIoJ0RFUEVORFMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5wcm92aWRlcyAgICAgICAgID0gc2VsZi5kZXB2YXIoJ1BST1ZJREVTJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucmRlcGVuZHMgICAgICAgICA9IHNlbGYuZGVwdmFyKCdSREVQRU5EUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJwcm92aWRlcyAgICAgICAgPSBzZWxmLmRlcHZhcignUlBST1ZJREVTJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucnJlY29tbWVuZHMgICAgICA9IHNlbGYuZGVwdmFyKCdSUkVDT01NRU5EUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJwcm92aWRlc19wa2cgICAgPSBzZWxmLnBrZ3ZhcignUlBST1ZJREVTJywgc2VsZi5wYWNrYWdlcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucmRlcGVuZHNfcGtnICAgICA9IHNlbGYucGtndmFyKCdSREVQRU5EUycsIHNlbGYucGFja2FnZXMsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJyZWNvbW1lbmRzX3BrZyAgPSBzZWxmLnBrZ3ZhcignUlJFQ09NTUVORFMnLCBzZWxmLnBhY2thZ2VzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5pbmhlcml0cyAgICAgICAgID0gc2VsZi5nZXR2YXIoJ19faW5oZXJpdF9jYWNoZScsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZha2Vyb290ZW52ICAgICAgPSBzZWxmLmdldHZhcignRkFLRVJPT1RFTlYnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5mYWtlcm9vdGRpcnMgICAgID0gc2VsZi5nZXR2YXIoJ0ZBS0VST09URElSUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZha2Vyb290bm9lbnYgICAgPSBzZWxmLmdldHZhcignRkFLRVJPT1ROT0VOVicsIG1ldGFkYXRhKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGluaXRfY2FjaGVEYXRhKGNscywgY2FjaGVkYXRhKToKKyAgICAgICAgIyBDYWNoZURhdGEgaW4gQ29yZSBSZWNpcGVJbmZvIENsYXNzCisgICAgICAgIGNhY2hlZGF0YS50YXNrX2RlcHMgPSB7fQorICAgICAgICBjYWNoZWRhdGEucGtnX2ZuID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19wbiA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGNhY2hlZGF0YS5wa2dfcGVwdnByID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19kcCA9IHt9CisKKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wY2xlYW4gPSB7fQorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfYmFzZSA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9iYXNlX2NsZWFuID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2V4dHJhaW5mbyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5maWxlX2NoZWNrc3VtcyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5mbl9wcm92aWRlcyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wbl9wcm92aWRlcyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGNhY2hlZGF0YS5hbGxfZGVwZW5kcyA9IFtdCisKKyAgICAgICAgY2FjaGVkYXRhLmRlcHMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucGFja2FnZXMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucHJvdmlkZXJzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgY2FjaGVkYXRhLnJwcm92aWRlcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucGFja2FnZXNfZHluYW1pYyA9IGRlZmF1bHRkaWN0KGxpc3QpCisKKyAgICAgICAgY2FjaGVkYXRhLnJ1bmRlcHMgPSBkZWZhdWx0ZGljdChsYW1iZGE6IGRlZmF1bHRkaWN0KGxpc3QpKQorICAgICAgICBjYWNoZWRhdGEucnVucmVjcyA9IGRlZmF1bHRkaWN0KGxhbWJkYTogZGVmYXVsdGRpY3QobGlzdCkpCisgICAgICAgIGNhY2hlZGF0YS5wb3NzaWJsZV93b3JsZCA9IFtdCisgICAgICAgIGNhY2hlZGF0YS51bml2ZXJzZV90YXJnZXQgPSBbXQorICAgICAgICBjYWNoZWRhdGEuaGFzaGZuID0ge30KKworICAgICAgICBjYWNoZWRhdGEuYmFzZXRhc2toYXNoID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmluaGVyaXRzID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290ZW52ID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290bm9lbnYgPSB7fQorICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3RkaXJzID0ge30KKworICAgIGRlZiBhZGRfY2FjaGVEYXRhKHNlbGYsIGNhY2hlZGF0YSwgZm4pOgorICAgICAgICBjYWNoZWRhdGEudGFza19kZXBzW2ZuXSA9IHNlbGYudGFza19kZXBzCisgICAgICAgIGNhY2hlZGF0YS5wa2dfZm5bZm5dID0gc2VsZi5wbgorICAgICAgICBjYWNoZWRhdGEucGtnX3BuW3NlbGYucG5dLmFwcGVuZChmbikKKyAgICAgICAgY2FjaGVkYXRhLnBrZ19wZXB2cHJbZm5dID0gKHNlbGYucGUsIHNlbGYucHYsIHNlbGYucHIpCisgICAgICAgIGNhY2hlZGF0YS5wa2dfZHBbZm5dID0gc2VsZi5kZWZhdWx0cHJlZgorICAgICAgICBjYWNoZWRhdGEuc3RhbXBbZm5dID0gc2VsZi5zdGFtcAorICAgICAgICBjYWNoZWRhdGEuc3RhbXBjbGVhbltmbl0gPSBzZWxmLnN0YW1wY2xlYW4KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2Jhc2VbZm5dID0gc2VsZi5zdGFtcF9iYXNlCisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9iYXNlX2NsZWFuW2ZuXSA9IHNlbGYuc3RhbXBfYmFzZV9jbGVhbgorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfZXh0cmFpbmZvW2ZuXSA9IHNlbGYuc3RhbXBfZXh0cmFpbmZvCisgICAgICAgIGNhY2hlZGF0YS5maWxlX2NoZWNrc3Vtc1tmbl0gPSBzZWxmLmZpbGVfY2hlY2tzdW1zCisKKyAgICAgICAgcHJvdmlkZXMgPSBbc2VsZi5wbl0KKyAgICAgICAgZm9yIHByb3ZpZGUgaW4gc2VsZi5wcm92aWRlczoKKyAgICAgICAgICAgIGlmIHByb3ZpZGUgbm90IGluIHByb3ZpZGVzOgorICAgICAgICAgICAgICAgIHByb3ZpZGVzLmFwcGVuZChwcm92aWRlKQorICAgICAgICBjYWNoZWRhdGEuZm5fcHJvdmlkZXNbZm5dID0gcHJvdmlkZXMKKworICAgICAgICBmb3IgcHJvdmlkZSBpbiBwcm92aWRlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wcm92aWRlcnNbcHJvdmlkZV0uYXBwZW5kKGZuKQorICAgICAgICAgICAgaWYgcHJvdmlkZSBub3QgaW4gY2FjaGVkYXRhLnBuX3Byb3ZpZGVzW3NlbGYucG5dOgorICAgICAgICAgICAgICAgIGNhY2hlZGF0YS5wbl9wcm92aWRlc1tzZWxmLnBuXS5hcHBlbmQocHJvdmlkZSkKKworICAgICAgICBmb3IgZGVwIGluIHNlbGYuZGVwZW5kczoKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gY2FjaGVkYXRhLmRlcHNbZm5dOgorICAgICAgICAgICAgICAgIGNhY2hlZGF0YS5kZXBzW2ZuXS5hcHBlbmQoZGVwKQorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBjYWNoZWRhdGEuYWxsX2RlcGVuZHM6CisgICAgICAgICAgICAgICAgY2FjaGVkYXRhLmFsbF9kZXBlbmRzLmFwcGVuZChkZXApCisKKyAgICAgICAgcnByb3ZpZGVzID0gc2VsZi5ycHJvdmlkZXMKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wYWNrYWdlc1twYWNrYWdlXS5hcHBlbmQoZm4pCisgICAgICAgICAgICBycHJvdmlkZXMgKz0gc2VsZi5ycHJvdmlkZXNfcGtnW3BhY2thZ2VdCisKKyAgICAgICAgZm9yIHJwcm92aWRlIGluIHJwcm92aWRlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5ycHJvdmlkZXJzW3Jwcm92aWRlXS5hcHBlbmQoZm4pCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlc19keW5hbWljOgorICAgICAgICAgICAgY2FjaGVkYXRhLnBhY2thZ2VzX2R5bmFtaWNbcGFja2FnZV0uYXBwZW5kKGZuKQorCisgICAgICAgICMgQnVpbGQgaGFzaCBvZiBydW50aW1lIGRlcGVuZHMgYW5kIHJlY29tbWVuZHMKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlcyArIFtzZWxmLnBuXToKKyAgICAgICAgICAgIGNhY2hlZGF0YS5ydW5kZXBzW2ZuXVtwYWNrYWdlXSA9IGxpc3Qoc2VsZi5yZGVwZW5kcykgKyBzZWxmLnJkZXBlbmRzX3BrZ1twYWNrYWdlXQorICAgICAgICAgICAgY2FjaGVkYXRhLnJ1bnJlY3NbZm5dW3BhY2thZ2VdID0gbGlzdChzZWxmLnJyZWNvbW1lbmRzKSArIHNlbGYucnJlY29tbWVuZHNfcGtnW3BhY2thZ2VdCisKKyAgICAgICAgIyBDb2xsZWN0IGZpbGVzIHdlIG1heSBuZWVkIGZvciBwb3NzaWJsZSB3b3JsZC1kZXAKKyAgICAgICAgIyBjYWxjdWxhdGlvbnMKKyAgICAgICAgaWYgc2VsZi5ub3Rfd29ybGQ6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkVYQ0xVREUgRlJPTSBXT1JMRDogJXMiLCBmbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wb3NzaWJsZV93b3JsZC5hcHBlbmQoZm4pCisKKyAgICAgICAgIyBjcmVhdGUgYSBjb2xsZWN0aW9uIG9mIGFsbCB0YXJnZXRzIGZvciBzYW5pdHkgY2hlY2tpbmcKKyAgICAgICAgIyB0YXNrcywgc3VjaCBhcyB1cHN0cmVhbSB2ZXJzaW9ucywgbGljZW5zZSwgYW5kIHRvb2xzIGZvcgorICAgICAgICAjIHRhc2sgYW5kIGltYWdlIGNyZWF0aW9uLgorICAgICAgICBjYWNoZWRhdGEudW5pdmVyc2VfdGFyZ2V0LmFwcGVuZChzZWxmLnBuKQorCisgICAgICAgIGNhY2hlZGF0YS5oYXNoZm5bZm5dID0gc2VsZi5oYXNoZmlsZW5hbWUKKyAgICAgICAgZm9yIHRhc2ssIHRhc2toYXNoIGluIHNlbGYuYmFzZXRhc2toYXNoZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZGVudGlmaWVyID0gJyVzLiVzJyAlIChmbiwgdGFzaykKKyAgICAgICAgICAgIGNhY2hlZGF0YS5iYXNldGFza2hhc2hbaWRlbnRpZmllcl0gPSB0YXNraGFzaAorCisgICAgICAgIGNhY2hlZGF0YS5pbmhlcml0c1tmbl0gPSBzZWxmLmluaGVyaXRzCisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdGVudltmbl0gPSBzZWxmLmZha2Vyb290ZW52CisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdG5vZW52W2ZuXSA9IHNlbGYuZmFrZXJvb3Rub2VudgorICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3RkaXJzW2ZuXSA9IHNlbGYuZmFrZXJvb3RkaXJzCisKKworCitjbGFzcyBDYWNoZShvYmplY3QpOgorICAgICIiIgorICAgIEJpdEJha2UgQ2FjaGUgaW1wbGVtZW50YXRpb24KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCBkYXRhX2hhc2gsIGNhY2hlc19hcnJheSk6CisgICAgICAgICMgUGFzcyBjYWNoZXNfYXJyYXkgaW5mb3JtYXRpb24gaW50byBDYWNoZSBDb25zdHJ1Y3RvcgorICAgICAgICAjIEl0IHdpbGwgYmUgdXNlZCBsYXRlciBmb3IgZGVjaWRpbmcgd2hldGhlciB3ZSAKKyAgICAgICAgIyBuZWVkIGV4dHJhIGNhY2hlIGZpbGUgZHVtcC9sb2FkIHN1cHBvcnQgCisgICAgICAgIHNlbGYuY2FjaGVzX2FycmF5ID0gY2FjaGVzX2FycmF5CisgICAgICAgIHNlbGYuY2FjaGVkaXIgPSBkYXRhLmdldFZhcigiQ0FDSEUiLCBUcnVlKQorICAgICAgICBzZWxmLmNsZWFuID0gc2V0KCkKKyAgICAgICAgc2VsZi5jaGVja2VkID0gc2V0KCkKKyAgICAgICAgc2VsZi5kZXBlbmRzX2NhY2hlID0ge30KKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmRhdGFfZm4gPSBOb25lCisgICAgICAgIHNlbGYuY2FjaGVjbGVhbiA9IFRydWUKKyAgICAgICAgc2VsZi5kYXRhX2hhc2ggPSBkYXRhX2hhc2gKKworICAgICAgICBpZiBzZWxmLmNhY2hlZGlyIGluIFtOb25lLCAnJ106CisgICAgICAgICAgICBzZWxmLmhhc19jYWNoZSA9IEZhbHNlCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm90IHVzaW5nIGEgY2FjaGUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJTZXQgQ0FDSEUgPSA8ZGlyZWN0b3J5PiB0byBlbmFibGUuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuaGFzX2NhY2hlID0gVHJ1ZQorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCAiYmJfY2FjaGUuZGF0Iiwgc2VsZi5kYXRhX2hhc2gpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVc2luZyBjYWNoZSBpbiAnJXMnIiwgc2VsZi5jYWNoZWRpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuY2FjaGVkaXIpCisKKyAgICAgICAgY2FjaGVfb2sgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVfb2sgPSBjYWNoZV9vayBhbmQgb3MucGF0aC5leGlzdHMoY2FjaGVmaWxlKQorICAgICAgICAgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKQorICAgICAgICBpZiBjYWNoZV9vazoKKyAgICAgICAgICAgIHNlbGYubG9hZF9jYWNoZWZpbGUoKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuY2FjaGVmaWxlKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXQgb2YgZGF0ZSBjYWNoZSBmb3VuZCwgcmVidWlsZGluZy4uLiIpCisKKyAgICBkZWYgbG9hZF9jYWNoZWZpbGUoc2VsZik6CisgICAgICAgICMgRmlyc3RseSwgdXNpbmcgY29yZSBjYWNoZSBmaWxlIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAjIHZhbGlkIGNoZWNraW5nCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNhY2hlZmlsZSwgInJiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5VbnBpY2tsZXIoY2FjaGVmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNhY2hlX3ZlciA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgYml0YmFrZV92ZXIgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnSW52YWxpZCBjYWNoZSwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGNhY2hlX3ZlciAhPSBfX2NhY2hlX3ZlcnNpb25fXzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQ2FjaGUgdmVyc2lvbiBtaXNtYXRjaCwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIGJpdGJha2VfdmVyICE9IGJiLl9fdmVyc2lvbl9fOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdCaXRiYWtlIHZlcnNpb24gbWlzbWF0Y2gsIHJlYnVpbGRpbmcuLi4nKQorICAgICAgICAgICAgICAgIHJldHVybgorCisKKyAgICAgICAgY2FjaGVzaXplID0gMAorICAgICAgICBwcmV2aW91c19wcm9ncmVzcyA9IDAKKyAgICAgICAgcHJldmlvdXNfcGVyY2VudCA9IDAKKworICAgICAgICAjIENhbGN1bGF0ZSB0aGUgY29ycmVjdCBjYWNoZXNpemUgb2YgYWxsIHRob3NlIGNhY2hlIGZpbGVzCisgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgIGNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCBjYWNoZV9jbGFzcy5jYWNoZWZpbGUsIHNlbGYuZGF0YV9oYXNoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZWZpbGUsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVzaXplICs9IG9zLmZzdGF0KGNhY2hlZmlsZS5maWxlbm8oKSkuc3Rfc2l6ZQorCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZChjYWNoZXNpemUpLCBzZWxmLmRhdGEpCisgICAgICAgIAorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuVW5waWNrbGVyKGNhY2hlZmlsZSkgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB3aGlsZSBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlcGVuZHNfY2FjaGUuaGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtrZXldLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX2NhY2hlW2tleV0gPSBbdmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgZmlyZSBldmVudHMgb24gZXZlbiBwZXJjZW50YWdlIGJvdW5kYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvZ3Jlc3MgPSBjYWNoZWZpbGUudGVsbCgpICsgcHJldmlvdXNfcHJvZ3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGVyY2VudCA9IDEwMCAqIGN1cnJlbnRfcHJvZ3Jlc3MgLyBjYWNoZXNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyY2VudCA+IHByZXZpb3VzX3BlcmNlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcGVyY2VudCA9IGN1cnJlbnRfcGVyY2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MoY3VycmVudF9wcm9ncmVzcywgY2FjaGVzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19wcm9ncmVzcyArPSBjdXJyZW50X3Byb2dyZXNzCisKKyAgICAgICAgIyBOb3RlOiBkZXBlbmRzIGNhY2hlIG51bWJlciBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJzaW5nIGZpbGUgbnVtYmVycy4KKyAgICAgICAgIyBUaGUgc2FtZSBmaWxlIGhhcyBzZXZlcmFsIGNhY2hlcywgc3RpbGwgcmVnYXJkZWQgYXMgb25lIGl0ZW0gaW4gdGhlIGNhY2hlCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKGNhY2hlc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuZGVwZW5kc19jYWNoZSkpLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKworICAgIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdmlydHVhbGZuMnJlYWxmbih2aXJ0dWFsZm4pOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBhIHZpcnR1YWwgZmlsZSBuYW1lIHRvIGEgcmVhbCBvbmUgKyB0aGUgYXNzb2NpYXRlZCBzdWJjbGFzcyBrZXl3b3JkCisgICAgICAgICIiIgorCisgICAgICAgIGZuID0gdmlydHVhbGZuCisgICAgICAgIGNscyA9ICIiCisgICAgICAgIGlmIHZpcnR1YWxmbi5zdGFydHN3aXRoKCd2aXJ0dWFsOicpOgorICAgICAgICAgICAgZWxlbXMgPSB2aXJ0dWFsZm4uc3BsaXQoJzonKQorICAgICAgICAgICAgY2xzID0gIjoiLmpvaW4oZWxlbXNbMTotMV0pCisgICAgICAgICAgICBmbiA9IGVsZW1zWy0xXQorICAgICAgICByZXR1cm4gKGZuLCBjbHMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHJlYWxmbjJ2aXJ0dWFsKHJlYWxmbiwgY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnZlcnQgYSByZWFsIGZpbGVuYW1lICsgdGhlIGFzc29jaWF0ZWQgc3ViY2xhc3Mga2V5d29yZCB0byBhIHZpcnR1YWwgZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNscyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiByZWFsZm4KKyAgICAgICAgcmV0dXJuICJ2aXJ0dWFsOiIgKyBjbHMgKyAiOiIgKyByZWFsZm4KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsb2FkRGF0YUZ1bGwoY2xzLCB2aXJ0dWFsZm4sIGFwcGVuZHMsIGNmZ0RhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgY29tcGxldGUgc2V0IG9mIGRhdGEgZm9yIGZuLgorICAgICAgICBUbyBkbyB0aGlzLCB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBmaWxlLgorICAgICAgICAiIiIKKworICAgICAgICAoZm4sIHZpcnR1YWwpID0gY2xzLnZpcnR1YWxmbjJyZWFsZm4odmlydHVhbGZuKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUGFyc2luZyAlcyAoZnVsbCkiLCBmbikKKworICAgICAgICBjZmdEYXRhLnNldFZhcigiX19PTkxZRklOQUxJU0UiLCB2aXJ0dWFsIG9yICJkZWZhdWx0IikKKyAgICAgICAgYmJfZGF0YSA9IGNscy5sb2FkX2JiZmlsZShmbiwgYXBwZW5kcywgY2ZnRGF0YSkKKyAgICAgICAgcmV0dXJuIGJiX2RhdGFbdmlydHVhbF0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZShjbHMsIGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICAiIiJQYXJzZSB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLCByZXR1cm5pbmcgdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiIiIgorICAgICAgICBpbmZvcyA9IFtdCisgICAgICAgIGRhdGFzdG9yZXMgPSBjbHMubG9hZF9iYmZpbGUoZmlsZW5hbWUsIGFwcGVuZHMsIGNvbmZpZ2RhdGEpCisgICAgICAgIGRlcGVuZHMgPSBbXQorICAgICAgICBmb3IgdmFyaWFudCwgZGF0YSBpbiBzb3J0ZWQoZGF0YXN0b3Jlcy5pdGVyaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgaTogaVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgICAgICB2aXJ0dWFsZm4gPSBjbHMucmVhbGZuMnZpcnR1YWwoZmlsZW5hbWUsIHZhcmlhbnQpCisgICAgICAgICAgICBkZXBlbmRzID0gZGVwZW5kcyArIChkYXRhLmdldFZhcigiX19kZXBlbmRzIiwgRmFsc2UpIG9yIFtdKQorICAgICAgICAgICAgaWYgZGVwZW5kcyBhbmQgbm90IHZhcmlhbnQ6CisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXIoIl9fZGVwZW5kcyIsIGRlcGVuZHMpCisKKyAgICAgICAgICAgIGluZm9fYXJyYXkgPSBbXQorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIGNhY2hlc19hcnJheToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGNhY2hlX2NsYXNzKGZpbGVuYW1lLCBkYXRhKQorICAgICAgICAgICAgICAgICAgICBpbmZvX2FycmF5LmFwcGVuZChpbmZvKQorICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCh2aXJ0dWFsZm4sIGluZm9fYXJyYXkpKQorCisgICAgICAgIHJldHVybiBpbmZvcworCisgICAgZGVmIGxvYWQoc2VsZiwgZmlsZW5hbWUsIGFwcGVuZHMsIGNvbmZpZ2RhdGEpOgorICAgICAgICAiIiJPYnRhaW4gdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgICAgICAgdXNpbmcgY2FjaGVkIHZhbHVlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBwYXJzaW5nLgorCisgICAgICAgIE5vdGUgdGhhdCBpZiBpdCBkb2VzIHBhcnNlIHRvIG9idGFpbiB0aGUgaW5mbywgaXQgd2lsbCBub3QKKyAgICAgICAgYXV0b21hdGljYWxseSBhZGQgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBjYWNoZSBvciB0byB5b3VyCisgICAgICAgIENhY2hlRGF0YS4gIFVzZSB0aGUgYWRkIG9yIGFkZF9pbmZvIG1ldGhvZCB0byBkbyBzbyBhZnRlcgorICAgICAgICBydW5uaW5nIHRoaXMsIG9yIHVzZSBsb2FkRGF0YSBpbnN0ZWFkLiIiIgorICAgICAgICBjYWNoZWQgPSBzZWxmLmNhY2hlVmFsaWQoZmlsZW5hbWUsIGFwcGVuZHMpCisgICAgICAgIGlmIGNhY2hlZDoKKyAgICAgICAgICAgIGluZm9zID0gW10KKyAgICAgICAgICAgICMgaW5mb19hcnJheSBpdGVtIGlzIGEgbGlzdCBvZiBbQ29yZVJlY2lwZUluZm8sIFhYWFJlY2lwZUluZm9dCisgICAgICAgICAgICBpbmZvX2FycmF5ID0gc2VsZi5kZXBlbmRzX2NhY2hlW2ZpbGVuYW1lXQorICAgICAgICAgICAgZm9yIHZhcmlhbnQgaW4gaW5mb19hcnJheVswXS52YXJpYW50czoKKyAgICAgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZpbGVuYW1lLCB2YXJpYW50KQorICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgodmlydHVhbGZuLCBzZWxmLmRlcGVuZHNfY2FjaGVbdmlydHVhbGZuXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlBhcnNpbmcgJXMiLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhLCBzZWxmLmNhY2hlc19hcnJheSkKKworICAgICAgICByZXR1cm4gY2FjaGVkLCBpbmZvcworCisgICAgZGVmIGxvYWREYXRhKHNlbGYsIGZuLCBhcHBlbmRzLCBjZmdEYXRhLCBjYWNoZURhdGEpOgorICAgICAgICAiIiJMb2FkIHRoZSByZWNpcGUgaW5mbyBmb3IgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgICAgICAgcGFyc2luZyBhbmQgYWRkaW5nIHRvIHRoZSBjYWNoZSBpZiBuZWNlc3NhcnksIGFuZCBhZGRpbmcKKyAgICAgICAgdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiB0byB0aGUgc3VwcGxpZWQgQ2FjaGVEYXRhIGluc3RhbmNlLiIiIgorICAgICAgICBza2lwcGVkLCB2aXJ0dWFscyA9IDAsIDAKKworICAgICAgICBjYWNoZWQsIGluZm9zID0gc2VsZi5sb2FkKGZuLCBhcHBlbmRzLCBjZmdEYXRhKQorICAgICAgICBmb3IgdmlydHVhbGZuLCBpbmZvX2FycmF5IGluIGluZm9zOgorICAgICAgICAgICAgaWYgaW5mb19hcnJheVswXS5za2lwcGVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiU2tpcHBpbmcgJXM6ICVzIiwgdmlydHVhbGZuLCBpbmZvX2FycmF5WzBdLnNraXByZWFzb24pCisgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2luZm8odmlydHVhbGZuLCBpbmZvX2FycmF5LCBjYWNoZURhdGEsIG5vdCBjYWNoZWQpCisgICAgICAgICAgICAgICAgdmlydHVhbHMgKz0gMQorCisgICAgICAgIHJldHVybiBjYWNoZWQsIHNraXBwZWQsIHZpcnR1YWxzCisKKyAgICBkZWYgY2FjaGVWYWxpZChzZWxmLCBmbiwgYXBwZW5kcyk6CisgICAgICAgICIiIgorICAgICAgICBJcyB0aGUgY2FjaGUgdmFsaWQgZm9yIGZuPworICAgICAgICBGYXN0IHZlcnNpb24sIG5vIHRpbWVzdGFtcHMgY2hlY2tlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZuIG5vdCBpbiBzZWxmLmNoZWNrZWQ6CisgICAgICAgICAgICBzZWxmLmNhY2hlVmFsaWRVcGRhdGUoZm4sIGFwcGVuZHMpCisKKyAgICAgICAgIyBJcyBjYWNoZSBlbmFibGVkPworICAgICAgICBpZiBub3Qgc2VsZi5oYXNfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgZm4gaW4gc2VsZi5jbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGNhY2hlVmFsaWRVcGRhdGUoc2VsZiwgZm4sIGFwcGVuZHMpOgorICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBmbj8KKyAgICAgICAgTWFrZSB0aG9yb3VnaCAoc2xvd2VyKSBjaGVja3MgaW5jbHVkaW5nIHRpbWVzdGFtcHMuCisgICAgICAgICIiIgorICAgICAgICAjIElzIGNhY2hlIGVuYWJsZWQ/CisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuY2hlY2tlZC5hZGQoZm4pCisKKyAgICAgICAgIyBGaWxlIGlzbid0IGluIGRlcGVuZHNfY2FjaGUKKyAgICAgICAgaWYgbm90IGZuIGluIHNlbGYuZGVwZW5kc19jYWNoZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzIGlzIG5vdCBjYWNoZWQiLCBmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG10aW1lID0gYmIucGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoZm4pCisKKyAgICAgICAgIyBDaGVjayBmaWxlIHN0aWxsIGV4aXN0cworICAgICAgICBpZiBtdGltZSA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMgbm8gbG9uZ2VyIGV4aXN0cyIsIGZuKQorICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpbmZvX2FycmF5ID0gc2VsZi5kZXBlbmRzX2NhY2hlW2ZuXQorICAgICAgICAjIENoZWNrIHRoZSBmaWxlJ3MgdGltZXN0YW1wCisgICAgICAgIGlmIG10aW1lICE9IGluZm9fYXJyYXlbMF0udGltZXN0YW1wOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMgY2hhbmdlZCIsIGZuKQorICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIENoZWNrIGRlcGVuZGVuY2llcyBhcmUgc3RpbGwgdmFsaWQKKyAgICAgICAgZGVwZW5kcyA9IGluZm9fYXJyYXlbMF0uZmlsZV9kZXBlbmRzCisgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICBmb3IgZiwgb2xkX210aW1lIGluIGRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm10aW1lID0gYmIucGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoZikKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGZpbGUgc3RpbGwgZXhpc3RzCisgICAgICAgICAgICAgICAgaWYgb2xkX210aW1lICE9IDAgYW5kIGZtdGltZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcydzIGRlcGVuZGVuY3kgJXMgd2FzIHJlbW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgICAgIGlmIChmbXRpbWUgIT0gb2xkX210aW1lKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMncyBkZXBlbmRlbmN5ICVzIGNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBoYXNhdHRyKGluZm9fYXJyYXlbMF0sICdmaWxlX2NoZWNrc3VtcycpOgorICAgICAgICAgICAgZm9yIF8sIGZsIGluIGluZm9fYXJyYXlbMF0uZmlsZV9jaGVja3N1bXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmbCA9IGZsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBmbDoKKyAgICAgICAgICAgICAgICAgICAgIyBBIC5zcGxpdCgpIHdvdWxkIGJlIHNpbXBsZXIgYnV0IG1lYW5zIHNwYWNlcyBvciBjb2xvbnMgaW4gZmlsZW5hbWVzIHdvdWxkIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGEgPSBmbC5maW5kKCI6VHJ1ZSIpCisgICAgICAgICAgICAgICAgICAgIGIgPSBmbC5maW5kKCI6RmFsc2UiKQorICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPCAwKSBhbmQgYikgb3IgKChiID4gMCkgYW5kIChiIDwgYSkpOgorICAgICAgICAgICAgICAgICAgICAgICBmID0gZmxbOmIrNl0KKyAgICAgICAgICAgICAgICAgICAgICAgZmwgPSBmbFtiKzc6XQorICAgICAgICAgICAgICAgICAgICBlbGlmICgoYiA8IDApIGFuZCBhKSBvciAoKGEgPiAwKSBhbmQgKGEgPCBiKSk6CisgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmbFs6YSs1XQorICAgICAgICAgICAgICAgICAgICAgICBmbCA9IGZsW2ErNjpdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGZsID0gZmwuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiAiKiIgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYsIGV4aXN0ID0gZi5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdCA9PSAiVHJ1ZSIgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhmKSkgb3IgKGV4aXN0ID09ICJGYWxzZSIgYW5kIG9zLnBhdGguZXhpc3RzKGYpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzJ3MgZmlsZSBjaGVja3N1bSBsaXN0IGZpbGUgJXMgY2hhbmdlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIGFwcGVuZHMgIT0gaW5mb19hcnJheVswXS5hcHBlbmRzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogYXBwZW5kcyBmb3IgJXMgY2hhbmdlZCIsIGZuKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcyB0byAlcyIgJSAoc3RyKGFwcGVuZHMpLCBzdHIoaW5mb19hcnJheVswXS5hcHBlbmRzKSkpCisgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGludmFsaWQgPSBGYWxzZQorICAgICAgICBmb3IgY2xzIGluIGluZm9fYXJyYXlbMF0udmFyaWFudHM6CisgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgICAgICBzZWxmLmNsZWFuLmFkZCh2aXJ0dWFsZm4pCisgICAgICAgICAgICBpZiB2aXJ0dWFsZm4gbm90IGluIHNlbGYuZGVwZW5kc19jYWNoZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcyBpcyBub3QgY2FjaGVkIiwgdmlydHVhbGZuKQorICAgICAgICAgICAgICAgIGludmFsaWQgPSBUcnVlCisKKyAgICAgICAgIyBJZiBhbnkgb25lIG9mIHRoZSB2YXJpYW50cyBpcyBub3QgcHJlc2VudCwgbWFyayBhcyBpbnZhbGlkIGZvciBhbGwKKyAgICAgICAgaWYgaW52YWxpZDoKKyAgICAgICAgICAgIGZvciBjbHMgaW4gaW5mb19hcnJheVswXS52YXJpYW50czoKKyAgICAgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgICAgICAgICAgaWYgdmlydHVhbGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6IFJlbW92aW5nICVzIGZyb20gY2FjaGUiLCB2aXJ0dWFsZm4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYW4ucmVtb3ZlKHZpcnR1YWxmbikKKyAgICAgICAgICAgIGlmIGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogTWFya2luZyAlcyBhcyBub3QgY2xlYW4iLCBmbikKKyAgICAgICAgICAgICAgICBzZWxmLmNsZWFuLnJlbW92ZShmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuY2xlYW4uYWRkKGZuKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbW92ZShzZWxmLCBmbik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgYSBmbiBmcm9tIHRoZSBjYWNoZQorICAgICAgICBDYWxsZWQgZnJvbSB0aGUgcGFyc2VyIGluIGVycm9yIGNhc2VzCisgICAgICAgICIiIgorICAgICAgICBpZiBmbiBpbiBzZWxmLmRlcGVuZHNfY2FjaGU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbW92aW5nICVzIGZyb20gY2FjaGUiLCBmbikKKyAgICAgICAgICAgIGRlbCBzZWxmLmRlcGVuZHNfY2FjaGVbZm5dCisgICAgICAgIGlmIGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1hcmtpbmcgJXMgYXMgdW5jbGVhbiIsIGZuKQorICAgICAgICAgICAgc2VsZi5jbGVhbi5yZW1vdmUoZm4pCisKKyAgICBkZWYgc3luYyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNhdmUgdGhlIGNhY2hlCisgICAgICAgIENhbGxlZCBmcm9tIHRoZSBwYXJzZXIgd2hlbiBjb21wbGV0ZSAob3IgZXhpdGluZykKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX2NhY2hlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5jYWNoZWNsZWFuOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZSBpcyBjbGVhbiwgbm90IHNhdmluZy4iKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZmlsZV9kaWN0ID0ge30KKyAgICAgICAgcGlja2xlcl9kaWN0ID0ge30KKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGNhY2hlX2NsYXNzLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICAgICAgZmlsZV9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gb3BlbihjYWNoZWZpbGUsICJ3YiIpCisgICAgICAgICAgICAgICAgcGlja2xlcl9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gIHBpY2tsZS5QaWNrbGVyKGZpbGVfZGljdFtjYWNoZV9jbGFzc19uYW1lXSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHBpY2tsZXJfZGljdFsnQ29yZVJlY2lwZUluZm8nXS5kdW1wKF9fY2FjaGVfdmVyc2lvbl9fKQorICAgICAgICBwaWNrbGVyX2RpY3RbJ0NvcmVSZWNpcGVJbmZvJ10uZHVtcChiYi5fX3ZlcnNpb25fXykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3Iga2V5LCBpbmZvX2FycmF5IGluIHNlbGYuZGVwZW5kc19jYWNoZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgaW5mbyBpbiBpbmZvX2FycmF5OgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGluZm8sIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGluZm8uX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVyX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0uZHVtcChrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVyX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0uZHVtcChpbmZvKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICBjYWNoZV9jbGFzc19uYW1lID0gY2FjaGVfY2xhc3MuX19uYW1lX18KKyAgICAgICAgICAgICAgICAgICAgZmlsZV9kaWN0W2NhY2hlX2NsYXNzX25hbWVdLmNsb3NlKCkKKworICAgICAgICBkZWwgc2VsZi5kZXBlbmRzX2NhY2hlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG10aW1lKGNhY2hlZmlsZSk6CisgICAgICAgIHJldHVybiBiYi5wYXJzZS5jYWNoZWRfbXRpbWVfbm9lcnJvcihjYWNoZWZpbGUpCisKKyAgICBkZWYgYWRkX2luZm8oc2VsZiwgZmlsZW5hbWUsIGluZm9fYXJyYXksIGNhY2hlRGF0YSwgcGFyc2VkPU5vbmUsIHdhdGNoZXI9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5mb19hcnJheVswXSwgQ29yZVJlY2lwZUluZm8pIGFuZCAobm90IGluZm9fYXJyYXlbMF0uc2tpcHBlZCk6CisgICAgICAgICAgICBjYWNoZURhdGEuYWRkX2Zyb21fcmVjaXBlaW5mbyhmaWxlbmFtZSwgaW5mb19hcnJheSkKKworICAgICAgICAgICAgaWYgd2F0Y2hlcjoKKyAgICAgICAgICAgICAgICB3YXRjaGVyKGluZm9fYXJyYXlbMF0uZmlsZV9kZXBlbmRzKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jYWNoZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIChpbmZvX2FycmF5WzBdLnNraXBwZWQgb3IgJ1NSQ1JFVklOQUNUSU9OJyBub3QgaW4gaW5mb19hcnJheVswXS5wdikgYW5kIG5vdCBpbmZvX2FycmF5WzBdLm5vY2FjaGU6CisgICAgICAgICAgICBpZiBwYXJzZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWNsZWFuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtmaWxlbmFtZV0gPSBpbmZvX2FycmF5CisKKyAgICBkZWYgYWRkKHNlbGYsIGZpbGVfbmFtZSwgZGF0YSwgY2FjaGVEYXRhLCBwYXJzZWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBTYXZlIGRhdGEgd2UgbmVlZCBpbnRvIHRoZSBjYWNoZQorICAgICAgICAiIiIKKworICAgICAgICByZWFsZm4gPSBzZWxmLnZpcnR1YWxmbjJyZWFsZm4oZmlsZV9uYW1lKVswXQorCisgICAgICAgIGluZm9fYXJyYXkgPSBbXQorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBpbmZvX2FycmF5LmFwcGVuZChjYWNoZV9jbGFzcyhyZWFsZm4sIGRhdGEpKQorICAgICAgICBzZWxmLmFkZF9pbmZvKGZpbGVfbmFtZSwgaW5mb19hcnJheSwgY2FjaGVEYXRhLCBwYXJzZWQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRfYmJmaWxlKGJiZmlsZSwgYXBwZW5kcywgY29uZmlnKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgYW5kIHBhcnNlIG9uZSAuYmIgYnVpbGQgZmlsZQorICAgICAgICBSZXR1cm4gdGhlIGRhdGEgYW5kIHdoZXRoZXIgcGFyc2luZyByZXN1bHRlZCBpbiB0aGUgZmlsZSBiZWluZyBza2lwcGVkCisgICAgICAgICIiIgorICAgICAgICBjaGRpcl9iYWNrID0gRmFsc2UKKworICAgICAgICBmcm9tIGJiIGltcG9ydCBwYXJzZQorCisgICAgICAgICMgZXhwYW5kIHRtcGRpciB0byBpbmNsdWRlIHRoaXMgdG9wZGlyCisgICAgICAgIGNvbmZpZy5zZXRWYXIoJ1RNUERJUicsIGNvbmZpZy5nZXRWYXIoJ1RNUERJUicsIFRydWUpIG9yICIiKQorICAgICAgICBiYmZpbGVfbG9jID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShiYmZpbGUpKQorICAgICAgICBvbGRwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKQorICAgICAgICBwYXJzZS5jYWNoZWRfbXRpbWVfbm9lcnJvcihiYmZpbGVfbG9jKQorICAgICAgICBiYl9kYXRhID0gY29uZmlnLmNyZWF0ZUNvcHkoKQorICAgICAgICAjIFRoZSBDb25mSGFuZGxlciBmaXJzdCBsb29rcyBpZiB0aGVyZSBpcyBhIFRPUERJUiBhbmQgaWYgbm90CisgICAgICAgICMgdGhlbiBpdCB3b3VsZCBjYWxsIGdldGN3ZCgpLgorICAgICAgICAjIFByZXZpb3VzbHksIHdlIGNoZGlyKCllZCB0byBiYmZpbGVfbG9jLCBjYWxsZWQgdGhlIGhhbmRsZXIKKyAgICAgICAgIyBhbmQgZmluYWxseSBjaGRpcigpZWQgYmFjaywgYSBjb3VwbGUgb2YgdGhvdXNhbmQgdGltZXMuIFdlIG5vdworICAgICAgICAjIGp1c3QgZmlsbCBpbiBUT1BESVIgdG8gcG9pbnQgdG8gYmJmaWxlX2xvYyBpZiB0aGVyZSBpcyBubyBUT1BESVIgeWV0LgorICAgICAgICBpZiBub3QgYmJfZGF0YS5nZXRWYXIoJ1RPUERJUicsIEZhbHNlKToKKyAgICAgICAgICAgIGNoZGlyX2JhY2sgPSBUcnVlCisgICAgICAgICAgICBiYl9kYXRhLnNldFZhcignVE9QRElSJywgYmJmaWxlX2xvYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgYXBwZW5kczoKKyAgICAgICAgICAgICAgICBiYl9kYXRhLnNldFZhcignX19CQkFQUEVORCcsICIgIi5qb2luKGFwcGVuZHMpKQorICAgICAgICAgICAgYmJfZGF0YSA9IHBhcnNlLmhhbmRsZShiYmZpbGUsIGJiX2RhdGEpCisgICAgICAgICAgICBpZiBjaGRpcl9iYWNrOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZHBhdGgpCisgICAgICAgICAgICByZXR1cm4gYmJfZGF0YQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBjaGRpcl9iYWNrOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZHBhdGgpCisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBpbml0KGNvb2tlcik6CisgICAgIiIiCisgICAgVGhlIE9iamVjdGl2ZTogQ2FjaGUgdGhlIG1pbmltdW0gYW1vdW50IG9mIGRhdGEgcG9zc2libGUgeWV0IGdldCB0byB0aGUKKyAgICBzdGFnZSBvZiBidWlsZGluZyBwYWNrYWdlcyAoaS5lLiB0cnlCdWlsZCkgd2l0aG91dCByZXBhcnNpbmcgYW55IC5iYiBmaWxlcy4KKworICAgIFRvIGRvIHRoaXMsIHdlIGludGVyY2VwdCBnZXRWYXIgY2FsbHMgYW5kIG9ubHkgY2FjaGUgdGhlIHZhcmlhYmxlcyB3ZSBzZWUKKyAgICBiZWluZyBhY2Nlc3NlZC4gV2UgcmVseSBvbiB0aGUgY2FjaGUgZ2V0VmFyIGNhbGxzIGJlaW5nIG1hZGUgZm9yIGFsbAorICAgIHZhcmlhYmxlcyBiaXRiYWtlIG1pZ2h0IG5lZWQgdG8gdXNlIHRvIHJlYWNoIHRoaXMgc3RhZ2UuIEZvciBlYWNoIGNhY2hlZAorICAgIGZpbGUgd2UgbmVlZCB0byB0cmFjazoKKworICAgICogSXRzIG10aW1lCisgICAgKiBUaGUgbXRpbWVzIG9mIGFsbCBpdHMgZGVwZW5kZW5jaWVzCisgICAgKiBXaGV0aGVyIGl0IGNhdXNlZCBhIHBhcnNlLlNraXBSZWNpcGUgZXhjZXB0aW9uCisKKyAgICBGaWxlcyBjYXVzaW5nIHBhcnNpbmcgZXJyb3JzIGFyZSBldmljdGVkIGZyb20gdGhlIGNhY2hlLgorCisgICAgIiIiCisgICAgcmV0dXJuIENhY2hlKGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGFfaGFzaCkKKworCitjbGFzcyBDYWNoZURhdGEob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHdlIGNvbXBpbGUgZnJvbSB0aGUgY2FjaGVkIGRhdGEKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICBzZWxmLmNhY2hlc19hcnJheSA9IGNhY2hlc19hcnJheQorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKSAgICAgICAgCisKKyAgICAgICAgIyBEaXJlY3QgY2FjaGUgdmFyaWFibGVzCisgICAgICAgIHNlbGYudGFza19xdWV1ZXMgPSB7fQorICAgICAgICBzZWxmLnByZWZlcnJlZCA9IHt9CisgICAgICAgIHNlbGYudGFza3MgPSB7fQorICAgICAgICAjIEluZGlyZWN0IENhY2hlIHZhcmlhYmxlcyAoc2V0IGVsc2V3aGVyZSkKKyAgICAgICAgc2VsZi5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IFtdCisgICAgICAgIHNlbGYud29ybGRfdGFyZ2V0ID0gc2V0KCkKKyAgICAgICAgc2VsZi5iYmZpbGVfcHJpb3JpdHkgPSB7fQorCisgICAgZGVmIGFkZF9mcm9tX3JlY2lwZWluZm8oc2VsZiwgZm4sIGluZm9fYXJyYXkpOgorICAgICAgICBmb3IgaW5mbyBpbiBpbmZvX2FycmF5OgorICAgICAgICAgICAgaW5mby5hZGRfY2FjaGVEYXRhKHNlbGYsIGZuKQorCitjbGFzcyBNdWx0aVByb2Nlc3NDYWNoZShvYmplY3QpOgorICAgICIiIgorICAgIEJpdEJha2UgbXVsdGktcHJvY2VzcyBjYWNoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgVXNlZCBieSB0aGUgY29kZXBhcnNlciAmIGZpbGUgY2hlY2tzdW0gY2FjaGVzCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2FjaGVmaWxlID0gTm9uZQorICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IHNlbGYuY3JlYXRlX2NhY2hlZGF0YSgpCisgICAgICAgIHNlbGYuY2FjaGVkYXRhX2V4dHJhcyA9IHNlbGYuY3JlYXRlX2NhY2hlZGF0YSgpCisKKyAgICBkZWYgaW5pdF9jYWNoZShzZWxmLCBkKToKKyAgICAgICAgY2FjaGVkaXIgPSAoZC5nZXRWYXIoIlBFUlNJU1RFTlRfRElSIiwgVHJ1ZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkNBQ0hFIiwgVHJ1ZSkpCisgICAgICAgIGlmIGNhY2hlZGlyIGluIFtOb25lLCAnJ106CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNhY2hlZGlyKQorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgc2VsZi5fX2NsYXNzX18uY2FjaGVfZmlsZV9uYW1lKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVzaW5nIGNhY2hlIGluICclcyciLCBzZWxmLmNhY2hlZmlsZSkKKworICAgICAgICBnbGYgPSBiYi51dGlscy5sb2NrZmlsZShzZWxmLmNhY2hlZmlsZSArICIubG9jayIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgICAgICAgICAgZGF0YSwgdmVyc2lvbiA9IHAubG9hZCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoZ2xmKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShnbGYpCisKKyAgICAgICAgaWYgdmVyc2lvbiAhPSBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jYWNoZWRhdGEgPSBkYXRhCisKKyAgICBkZWYgY3JlYXRlX2NhY2hlZGF0YShzZWxmKToKKyAgICAgICAgZGF0YSA9IFt7fV0KKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzYXZlX2V4dHJhcyhzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYuY2FjaGVmaWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2xmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2siLCBzaGFyZWQ9VHJ1ZSkKKworICAgICAgICBpID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgbGYgPSBOb25lCisgICAgICAgIHdoaWxlIG5vdCBsZjoKKyAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2suIiArIHN0cihpKSwgcmV0cnk9RmFsc2UpCisgICAgICAgICAgICBpZiBub3QgbGYgb3Igb3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZWZpbGUgKyAiLSIgKyBzdHIoaSkpOgorICAgICAgICAgICAgICAgIGlmIGxmOgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgICAgICBsZiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5jYWNoZWZpbGUgKyAiLSIgKyBzdHIoaSksICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGYsIC0xKQorICAgICAgICAgICAgICAgIHAuZHVtcChbc2VsZi5jYWNoZWRhdGFfZXh0cmFzLCBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OXSkKKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKKworICAgIGRlZiBtZXJnZV9kYXRhKHNlbGYsIHNvdXJjZSwgZGVzdCk6CisgICAgICAgIGZvciBqIGluIHJhbmdlKDAsbGVuKGRlc3QpKToKKyAgICAgICAgICAgIGZvciBoIGluIHNvdXJjZVtqXToKKyAgICAgICAgICAgICAgICBpZiBoIG5vdCBpbiBkZXN0W2pdOgorICAgICAgICAgICAgICAgICAgICBkZXN0W2pdW2hdID0gc291cmNlW2pdW2hdCisKKyAgICBkZWYgc2F2ZV9tZXJnZShzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYuY2FjaGVmaWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2xmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2siKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmNhY2hlZGF0YQorCisgICAgICAgIGZvciBmIGluIFt5IGZvciB5IGluIG9zLmxpc3RkaXIob3MucGF0aC5kaXJuYW1lKHNlbGYuY2FjaGVmaWxlKSkgaWYgeS5zdGFydHN3aXRoKG9zLnBhdGguYmFzZW5hbWUoc2VsZi5jYWNoZWZpbGUpICsgJy0nKV06CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzZWxmLmNhY2hlZmlsZSksIGYpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGYsICJyYiIpIGFzIGZkOgorICAgICAgICAgICAgICAgICAgICBwID0gcGlja2xlLlVucGlja2xlcihmZCkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFkYXRhLCB2ZXJzaW9uID0gcC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHZlcnNpb24gIT0gc2VsZi5fX2NsYXNzX18uQ0FDSEVfVkVSU0lPTjoKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzZWxmLm1lcmdlX2RhdGEoZXh0cmFkYXRhLCBkYXRhKQorICAgICAgICAgICAgb3MudW5saW5rKGYpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGYsIC0xKQorICAgICAgICAgICAgcC5kdW1wKFtkYXRhLCBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OXSkKKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jYWNoZV9leHRyYS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGVfZXh0cmEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmNDk1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY2FjaGVfZXh0cmEucHkKQEAgLTAsMCArMSw3NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgRXh0cmEgUmVjaXBlSW5mbyB3aWxsIGJlIGFsbCBkZWZpbmVkIGluIHRoaXMgZmlsZS4gQ3VycmVudGx5LAorIyBPbmx5IEhvYiAoSW1hZ2UgQ3JlYXRvcikgUmVxdWVzdHMgc29tZSBleHRyYSBmaWVsZHMuIFNvCisjIEhvYlJlY2lwZUluZm8gaXMgZGVmaW5lZC4gSXQncyBuYW1lZCBIb2JSZWNpcGVJbmZvIGJlY2F1c2UgaXQKKyMgaXMgaW50cm9kdWNlZCBieSAnaG9iJy4gVXNlcnMgY291bGQgYWxzbyBpbnRyb2R1Y2Ugb3RoZXIKKyMgUmVjaXBlSW5mbyBvciBzaW1wbHkgdXNlIHRob3NlIGFscmVhZHkgZGVmaW5lZCBSZWNpcGVJbmZvLgorIyBJbiB0aGUgZm9sbG93aW5nIHBhdGNoLCB0aGlzIG5ld2x5IGRlZmluZWQgbmV3IGV4dHJhIFJlY2lwZUluZm8KKyMgd2lsbCBiZSBkeW5hbWljYWxseSBsb2FkZWQgYW5kIHVzZWQgZm9yIGxvYWRpbmcvc2F2aW5nIHRoZSBleHRyYQorIyBjYWNoZSBmaWVsZHMgIAorCisjIENvcHlyaWdodCAoQykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gYmIuY2FjaGUgaW1wb3J0IFJlY2lwZUluZm9Db21tb24KKworY2xhc3MgSG9iUmVjaXBlSW5mbyhSZWNpcGVJbmZvQ29tbW9uKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgY2xhc3NuYW1lID0gIkhvYlJlY2lwZUluZm8iCisgICAgIyBwbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZW1iZXIgd2l0aCB0aGUgY29ycmVjdCBkYXRhIGNhY2hlIGZpbGUKKyAgICAjIHN1Y2ggYXMgKGJiX2NhY2hlLmRhdCwgYmJfZXh0cmFjYWNoZV9ob2IuZGF0KSAKKyAgICBjYWNoZWZpbGUgPSAiYmJfZXh0cmFjYWNoZV8iICsgY2xhc3NuYW1lICsiLmRhdCIgICAgICAgIAorCisgICAgIyBvdmVycmlkZSB0aGlzIG1lbWJlciB3aXRoIHRoZSBsaXN0IG9mIGV4dHJhIGNhY2hlIGZpZWxkcworICAgICMgdGhhdCB0aGlzIGNsYXNzIHdpbGwgcHJvdmlkZQorICAgIGNhY2hlZmllbGRzID0gWydzdW1tYXJ5JywgJ2xpY2Vuc2UnLCAnc2VjdGlvbicsCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nLCAnaG9tZXBhZ2UnLCAnYnVndHJhY2tlcicsCisgICAgICAgICAgICAncHJldmlzaW9uJywgJ2ZpbGVzX2luZm8nXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBtZXRhZGF0YSk6CisKKyAgICAgICAgc2VsZi5zdW1tYXJ5ID0gc2VsZi5nZXR2YXIoJ1NVTU1BUlknLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5saWNlbnNlID0gc2VsZi5nZXR2YXIoJ0xJQ0VOU0UnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zZWN0aW9uID0gc2VsZi5nZXR2YXIoJ1NFQ1RJT04nLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IHNlbGYuZ2V0dmFyKCdERVNDUklQVElPTicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmhvbWVwYWdlID0gc2VsZi5nZXR2YXIoJ0hPTUVQQUdFJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuYnVndHJhY2tlciA9IHNlbGYuZ2V0dmFyKCdCVUdUUkFDS0VSJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucHJldmlzaW9uID0gc2VsZi5nZXR2YXIoJ1BSJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZmlsZXNfaW5mbyA9IHNlbGYuZ2V0dmFyKCdGSUxFU19JTkZPJywgbWV0YWRhdGEpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaW5pdF9jYWNoZURhdGEoY2xzLCBjYWNoZWRhdGEpOgorICAgICAgICAjIENhY2hlRGF0YSBpbiBIb2IgUmVjaXBlSW5mbyBDbGFzcworICAgICAgICBjYWNoZWRhdGEuc3VtbWFyeSA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5saWNlbnNlID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnNlY3Rpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuZGVzY3JpcHRpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuaG9tZXBhZ2UgPSB7fQorICAgICAgICBjYWNoZWRhdGEuYnVndHJhY2tlciA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wcmV2aXNpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuZmlsZXNfaW5mbyA9IHt9CisKKyAgICBkZWYgYWRkX2NhY2hlRGF0YShzZWxmLCBjYWNoZWRhdGEsIGZuKToKKyAgICAgICAgY2FjaGVkYXRhLnN1bW1hcnlbZm5dID0gc2VsZi5zdW1tYXJ5CisgICAgICAgIGNhY2hlZGF0YS5saWNlbnNlW2ZuXSA9IHNlbGYubGljZW5zZQorICAgICAgICBjYWNoZWRhdGEuc2VjdGlvbltmbl0gPSBzZWxmLnNlY3Rpb24KKyAgICAgICAgY2FjaGVkYXRhLmRlc2NyaXB0aW9uW2ZuXSA9IHNlbGYuZGVzY3JpcHRpb24KKyAgICAgICAgY2FjaGVkYXRhLmhvbWVwYWdlW2ZuXSA9IHNlbGYuaG9tZXBhZ2UKKyAgICAgICAgY2FjaGVkYXRhLmJ1Z3RyYWNrZXJbZm5dID0gc2VsZi5idWd0cmFja2VyCisgICAgICAgIGNhY2hlZGF0YS5wcmV2aXNpb25bZm5dID0gc2VsZi5wcmV2aXNpb24KKyAgICAgICAgY2FjaGVkYXRhLmZpbGVzX2luZm9bZm5dID0gc2VsZi5maWxlc19pbmZvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NoZWNrc3VtLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTRmZjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weQpAQCAtMCwwICsxLDkwIEBACisjIExvY2FsIGZpbGUgY2hlY2tzdW0gY2FjaGUgaW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGJiLmNhY2hlIGltcG9ydCBNdWx0aVByb2Nlc3NDYWNoZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5DYWNoZSIpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworCisjIG10aW1lIGNhY2hlIChub24tcGVyc2lzdGVudCkKKyMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGZpbGVzIGRvIG5vdCBjaGFuZ2UgZHVyaW5nIGJpdGJha2UgcnVuCitjbGFzcyBGaWxlTXRpbWVDYWNoZShvYmplY3QpOgorICAgIGNhY2hlID0ge30KKworICAgIGRlZiBjYWNoZWRfbXRpbWUoc2VsZiwgZik6CisgICAgICAgIGlmIGYgbm90IGluIHNlbGYuY2FjaGU6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICByZXR1cm4gc2VsZi5jYWNoZVtmXQorCisgICAgZGVmIGNhY2hlZF9tdGltZV9ub2Vycm9yKHNlbGYsIGYpOgorICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gc2VsZi5jYWNoZVtmXQorCisgICAgZGVmIHVwZGF0ZV9tdGltZShzZWxmLCBmKToKKyAgICAgICAgc2VsZi5jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVbZl0KKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5jYWNoZS5jbGVhcigpCisKKyMgQ2hlY2tzdW0gKyBtdGltZSBjYWNoZSAocGVyc2lzdGVudCkKK2NsYXNzIEZpbGVDaGVja3N1bUNhY2hlKE11bHRpUHJvY2Vzc0NhY2hlKToKKyAgICBjYWNoZV9maWxlX25hbWUgPSAibG9jYWxfZmlsZV9jaGVja3N1bV9jYWNoZS5kYXQiCisgICAgQ0FDSEVfVkVSU0lPTiA9IDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5tdGltZV9jYWNoZSA9IEZpbGVNdGltZUNhY2hlKCkKKyAgICAgICAgTXVsdGlQcm9jZXNzQ2FjaGUuX19pbml0X18oc2VsZikKKworICAgIGRlZiBnZXRfY2hlY2tzdW0oc2VsZiwgZik6CisgICAgICAgIGVudHJ5ID0gc2VsZi5jYWNoZWRhdGFbMF0uZ2V0KGYpCisgICAgICAgIGNtdGltZSA9IHNlbGYubXRpbWVfY2FjaGUuY2FjaGVkX210aW1lKGYpCisgICAgICAgIGlmIGVudHJ5OgorICAgICAgICAgICAgKG10aW1lLCBoYXNodmFsKSA9IGVudHJ5CisgICAgICAgICAgICBpZiBjbXRpbWUgPT0gbXRpbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2h2YWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgImZpbGUgJXMgY2hhbmdlZCBtdGltZSwgcmVjb21wdXRlIGNoZWNrc3VtIiAlIGYpCisKKyAgICAgICAgaGFzaHZhbCA9IGJiLnV0aWxzLm1kNV9maWxlKGYpCisgICAgICAgIHNlbGYuY2FjaGVkYXRhX2V4dHJhc1swXVtmXSA9IChjbXRpbWUsIGhhc2h2YWwpCisgICAgICAgIHJldHVybiBoYXNodmFsCisKKyAgICBkZWYgbWVyZ2VfZGF0YShzZWxmLCBzb3VyY2UsIGRlc3QpOgorICAgICAgICBmb3IgaCBpbiBzb3VyY2VbMF06CisgICAgICAgICAgICBpZiBoIGluIGRlc3Q6CisgICAgICAgICAgICAgICAgKHNtdGltZSwgXykgPSBzb3VyY2VbMF1baF0KKyAgICAgICAgICAgICAgICAoZG10aW1lLCBfKSA9IGRlc3RbMF1baF0KKyAgICAgICAgICAgICAgICBpZiBzbXRpbWUgPiBkbXRpbWU6CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMF1baF0gPSBzb3VyY2VbMF1baF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdFswXVtoXSA9IHNvdXJjZVswXVtoXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb2RlcGFyc2VyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb2RlcGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTNhZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvZGVwYXJzZXIucHkKQEAgLTAsMCArMSw0MTQgQEAKK2ltcG9ydCBhc3QKK2ltcG9ydCBjb2RlZ2VuCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBiYi51dGlscywgYmIuZGF0YQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCitmcm9tIHB5c2ggaW1wb3J0IHB5c2h5YWNjLCBweXNobGV4LCBzaGVycm9ycworZnJvbSBiYi5jYWNoZSBpbXBvcnQgTXVsdGlQcm9jZXNzQ2FjaGUKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5Db2RlUGFyc2VyJykKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBsb2dnZXIuaW5mbygnSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiAgRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLicpCisKKworZGVmIGNoZWNrX2luZGVudChjb2Rlc3RyKToKKyAgICAiIiJJZiB0aGUgY29kZSBpcyBpbmRlbnRlZCwgYWRkIGEgdG9wIGxldmVsIHBpZWNlIG9mIGNvZGUgdG8gJ3JlbW92ZScgdGhlIGluZGVudGF0aW9uIiIiCisKKyAgICBpID0gMAorICAgIHdoaWxlIGNvZGVzdHJbaV0gaW4gWyJcbiIsICJcdCIsICIgIl06CisgICAgICAgIGkgPSBpICsgMQorCisgICAgaWYgaSA9PSAwOgorICAgICAgICByZXR1cm4gY29kZXN0cgorCisgICAgaWYgY29kZXN0cltpLTFdID09ICJcdCIgb3IgY29kZXN0cltpLTFdID09ICIgIjoKKyAgICAgICAgcmV0dXJuICJpZiAxOlxuIiArIGNvZGVzdHIKKworICAgIHJldHVybiBjb2Rlc3RyCisKKworIyBCYXNpY2FsbHkgcGlja2xlLCBpbiBweXRob24gMi43LjMgYXQgbGVhc3QsIGRvZXMgYmFkbHkgd2l0aCBkYXRhIGR1cGxpY2F0aW9uIAorIyB1cG9uIHBpY2tsaW5nIGFuZCB1bnBpY2tsaW5nLiBDb21iaW5lIHRoaXMgd2l0aCBkdXBsaWNhdGUgb2JqZWN0cyBhbmQgdGhpbmdzCisjIGFyZSBhIG1lc3MuCisjCisjIFdoZW4gdGhlIHNldHMgYXJlIG9yaWdpbmFsbHkgY3JlYXRlZCwgcHl0aG9uIGNhbGxzIGludGVybigpIG9uIHRoZSBzZXQga2V5cworIyB3aGljaCBzaWduaWZpY2FudGx5IGltcHJvdmVzIG1lbW9yeSB1c2FnZS4gU2FkbHkgdGhlIHBpY2tsZS91bnBpY2tsZSBwcm9jZXNzCisjIGRvZXNuJ3QgY2FsbCBpbnRlcm4oKSBvbiB0aGUga2V5cyBhbmQgcmVzdWx0cyBpbiB0aGUgc2FtZSBzdHJpbmdzIGJlaW5nIGR1cGxpY2F0ZWQKKyMgaW4gbWVtb3J5LiBUaGlzIGFsc28gbWVhbnMgcGlja2xlIHdpbGwgc2F2ZSB0aGUgc2FtZSBzdHJpbmcgbXVsdGlwbGUgdGltZXMgaW4KKyMgdGhlIGNhY2hlIGZpbGUuCisjCisjIEJ5IGhhdmluZyBzaGVsbCBhbmQgcHl0aG9uIGNhY2hlbGluZSBvYmplY3RzIHdpdGggc2V0c3RhdGUvZ2V0c3RhdGUsIHdlIGZvcmNlCisjIHRoZSBvYmplY3QgY3JlYXRpb24gdGhyb3VnaCBvdXIgb3duIHJvdXRpbmUgd2hlcmUgd2UgY2FuIGNhbGwgaW50ZXJuICh2aWEgaW50ZXJuU2V0KS4KKyMKKyMgV2UgYWxzbyB1c2UgaGFzaGFibGUgZnJvemVuc2V0cyBhbmQgZW5zdXJlIHdlIHVzZSByZWZlcmVuY2VzIHRvIHRoZXNlIHNvIHRoYXQKKyMgZHVwbGljYXRlcyBjYW4gYmUgcmVtb3ZlZCwgYm90aCBpbiBtZW1vcnkgYW5kIGluIHRoZSByZXN1bHRpbmcgcGlja2xlZCBkYXRhLgorIworIyBCeSBwbGF5aW5nIHRoZXNlIGdhbWVzLCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgZmlsZSBzaHJpbmtzIGRyYW1hdGljYWxseQorIyBtZWFuaW5nIGZhc3RlciBsb2FkIHRpbWVzIGFuZCB0aGUgcmVsb2FkZWQgY2FjaGUgZmlsZXMgYWxzbyBjb25zdW1lIG11Y2ggbGVzcworIyBtZW1vcnkuIFNtYWxsZXIgY2FjaGUgZmlsZXMsIGZhc3RlciBsb2FkIHRpbWVzIGFuZCBsb3dlciBtZW1vcnkgdXNhZ2UgaXMgZ29vZC4KKyMKKyMgQSBjdXN0b20gZ2V0c3RhdGUvc2V0c3RhdGUgdXNpbmcgdHVwbGVzIGlzIGFjdHVhbGx5IHdvcnRoIDE1JSBjYWNoZXNpemUgYnkKKyMgYXZvaWRpbmcgZHVwbGljYXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBuYW1lcyEKKworY2xhc3MgU2V0Q2FjaGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2V0Y2FjaGUgPSB7fQorCisgICAgZGVmIGludGVyblNldChzZWxmLCBpdGVtcyk6CisgICAgICAgIAorICAgICAgICBuZXcgPSBbXQorICAgICAgICBmb3IgaSBpbiBpdGVtczoKKyAgICAgICAgICAgIG5ldy5hcHBlbmQoaW50ZXJuKGkpKQorICAgICAgICBzID0gZnJvemVuc2V0KG5ldykKKyAgICAgICAgaWYgaGFzaChzKSBpbiBzZWxmLnNldGNhY2hlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0Y2FjaGVbaGFzaChzKV0KKyAgICAgICAgc2VsZi5zZXRjYWNoZVtoYXNoKHMpXSA9IHMKKyAgICAgICAgcmV0dXJuIHMKKworY29kZWNhY2hlID0gU2V0Q2FjaGUoKQorCitjbGFzcyBweXRob25DYWNoZUxpbmUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVmcywgZXhlY3MsIGNvbnRhaW5zKToKKyAgICAgICAgc2VsZi5yZWZzID0gY29kZWNhY2hlLmludGVyblNldChyZWZzKQorICAgICAgICBzZWxmLmV4ZWNzID0gY29kZWNhY2hlLmludGVyblNldChleGVjcykKKyAgICAgICAgc2VsZi5jb250YWlucyA9IHt9CisgICAgICAgIGZvciBjIGluIGNvbnRhaW5zOgorICAgICAgICAgICAgc2VsZi5jb250YWluc1tjXSA9IGNvZGVjYWNoZS5pbnRlcm5TZXQoY29udGFpbnNbY10pCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYucmVmcywgc2VsZi5leGVjcywgc2VsZi5jb250YWlucykKKworICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAocmVmcywgZXhlY3MsIGNvbnRhaW5zKSA9IHN0YXRlCisgICAgICAgIHNlbGYuX19pbml0X18ocmVmcywgZXhlY3MsIGNvbnRhaW5zKQorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgbCA9IChoYXNoKHNlbGYucmVmcyksIGhhc2goc2VsZi5leGVjcykpCisgICAgICAgIGZvciBjIGluIHNvcnRlZChzZWxmLmNvbnRhaW5zLmtleXMoKSk6CisgICAgICAgICAgICBsID0gbCArIChjLCBoYXNoKHNlbGYuY29udGFpbnNbY10pKQorICAgICAgICByZXR1cm4gaGFzaChsKQorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKFtzdHIoc2VsZi5yZWZzKSwgc3RyKHNlbGYuZXhlY3MpLCBzdHIoc2VsZi5jb250YWlucyldKSAKKworCitjbGFzcyBzaGVsbENhY2hlTGluZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjcyk6CisgICAgICAgIHNlbGYuZXhlY3MgPSBjb2RlY2FjaGUuaW50ZXJuU2V0KGV4ZWNzKQorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmV4ZWNzKQorCisgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgIChleGVjcykgPSBzdGF0ZQorICAgICAgICBzZWxmLl9faW5pdF9fKGV4ZWNzKQorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5leGVjcykKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZi5leGVjcykKKworY2xhc3MgQ29kZVBhcnNlckNhY2hlKE11bHRpUHJvY2Vzc0NhY2hlKToKKyAgICBjYWNoZV9maWxlX25hbWUgPSAiYmJfY29kZXBhcnNlci5kYXQiCisgICAgQ0FDSEVfVkVSU0lPTiA9IDcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgTXVsdGlQcm9jZXNzQ2FjaGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5weXRob25jYWNoZSA9IHNlbGYuY2FjaGVkYXRhWzBdCisgICAgICAgIHNlbGYuc2hlbGxjYWNoZSA9IHNlbGYuY2FjaGVkYXRhWzFdCisgICAgICAgIHNlbGYucHl0aG9uY2FjaGVleHRyYXMgPSBzZWxmLmNhY2hlZGF0YV9leHRyYXNbMF0KKyAgICAgICAgc2VsZi5zaGVsbGNhY2hlZXh0cmFzID0gc2VsZi5jYWNoZWRhdGFfZXh0cmFzWzFdCisKKyAgICAgICAgIyBUbyBhdm9pZCBkdXBsaWNhdGlvbiBpbiB0aGUgY29kZXBhcnNlciBjYWNoZSwga2VlcAorICAgICAgICAjIGEgbG9va3VwIG9mIGhhc2hlcyBvZiBvYmplY3RzIHdlIGFscmVhZHkgaGF2ZQorICAgICAgICBzZWxmLnB5dGhvbmNhY2hlbGluZXMgPSB7fQorICAgICAgICBzZWxmLnNoZWxsY2FjaGVsaW5lcyA9IHt9CisKKyAgICBkZWYgbmV3UHl0aG9uQ2FjaGVMaW5lKHNlbGYsIHJlZnMsIGV4ZWNzLCBjb250YWlucyk6CisgICAgICAgIGNhY2hlbGluZSA9IHB5dGhvbkNhY2hlTGluZShyZWZzLCBleGVjcywgY29udGFpbnMpCisgICAgICAgIGggPSBoYXNoKGNhY2hlbGluZSkKKyAgICAgICAgaWYgaCBpbiBzZWxmLnB5dGhvbmNhY2hlbGluZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5weXRob25jYWNoZWxpbmVzW2hdCisgICAgICAgIHNlbGYucHl0aG9uY2FjaGVsaW5lc1toXSA9IGNhY2hlbGluZQorICAgICAgICByZXR1cm4gY2FjaGVsaW5lCisKKyAgICBkZWYgbmV3U2hlbGxDYWNoZUxpbmUoc2VsZiwgZXhlY3MpOgorICAgICAgICBjYWNoZWxpbmUgPSBzaGVsbENhY2hlTGluZShleGVjcykKKyAgICAgICAgaCA9IGhhc2goY2FjaGVsaW5lKQorICAgICAgICBpZiBoIGluIHNlbGYuc2hlbGxjYWNoZWxpbmVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2hlbGxjYWNoZWxpbmVzW2hdCisgICAgICAgIHNlbGYuc2hlbGxjYWNoZWxpbmVzW2hdID0gY2FjaGVsaW5lCisgICAgICAgIHJldHVybiBjYWNoZWxpbmUKKworICAgIGRlZiBpbml0X2NhY2hlKHNlbGYsIGQpOgorICAgICAgICBNdWx0aVByb2Nlc3NDYWNoZS5pbml0X2NhY2hlKHNlbGYsIGQpCisKKyAgICAgICAgIyBjYWNoZWRhdGEgZ2V0cyByZS1hc3NpZ25lZCBpbiB0aGUgcGFyZW50CisgICAgICAgIHNlbGYucHl0aG9uY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVswXQorICAgICAgICBzZWxmLnNoZWxsY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVsxXQorCisgICAgZGVmIGNyZWF0ZV9jYWNoZWRhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBbe30sIHt9XQorICAgICAgICByZXR1cm4gZGF0YQorCitjb2RlcGFyc2VyY2FjaGUgPSBDb2RlUGFyc2VyQ2FjaGUoKQorCitkZWYgcGFyc2VyX2NhY2hlX2luaXQoZCk6CisgICAgY29kZXBhcnNlcmNhY2hlLmluaXRfY2FjaGUoZCkKKworZGVmIHBhcnNlcl9jYWNoZV9zYXZlKGQpOgorICAgIGNvZGVwYXJzZXJjYWNoZS5zYXZlX2V4dHJhcyhkKQorCitkZWYgcGFyc2VyX2NhY2hlX3NhdmVtZXJnZShkKToKKyAgICBjb2RlcGFyc2VyY2FjaGUuc2F2ZV9tZXJnZShkKQorCitMb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkKK2NsYXNzIEJ1ZmZlcmVkTG9nZ2VyKExvZ2dlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGxldmVsPTAsIHRhcmdldD1Ob25lKToKKyAgICAgICAgTG9nZ2VyLl9faW5pdF9fKHNlbGYsIG5hbWUpCisgICAgICAgIHNlbGYuc2V0TGV2ZWwobGV2ZWwpCisgICAgICAgIHNlbGYuYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKHJlY29yZCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgZm9yIHJlY29yZCBpbiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LmhhbmRsZShyZWNvcmQpCisgICAgICAgIHNlbGYuYnVmZmVyID0gW10KKworY2xhc3MgUHl0aG9uUGFyc2VyKCk6CisgICAgZ2V0dmFycyA9ICgiLmdldFZhciIsICIuYXBwZW5kVmFyIiwgIi5wcmVwZW5kVmFyIikKKyAgICBjb250YWluc2Z1bmNzID0gKCJiYi51dGlscy5jb250YWlucyIsICJiYXNlX2NvbnRhaW5zIiwgImJiLnV0aWxzLmNvbnRhaW5zX2FueSIpCisgICAgZXhlY2Z1bmNzID0gKCJiYi5idWlsZC5leGVjX2Z1bmMiLCAiYmIuYnVpbGQuZXhlY190YXNrIikKKworICAgIGRlZiB3YXJuKHNlbGYsIGZ1bmMsIGFyZyk6CisgICAgICAgICIiIldhcm4gYWJvdXQgY2FsbHMgb2YgYml0YmFrZSBBUElzIHdoaWNoIHBhc3MgYSBub24tbGl0ZXJhbAorICAgICAgICBhcmd1bWVudCBmb3IgdGhlIHZhcmlhYmxlIG5hbWUsIGFzIHdlJ3JlIG5vdCBhYmxlIHRvIHRyYWNrIHN1Y2gKKyAgICAgICAgYSByZWZlcmVuY2UuCisgICAgICAgICIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmNzdHIgPSBjb2RlZ2VuLnRvX3NvdXJjZShmdW5jKQorICAgICAgICAgICAgYXJnc3RyID0gY29kZWdlbi50b19zb3VyY2UoYXJnKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoMiwgJ0ZhaWxlZCB0byBjb252ZXJ0IGZ1bmN0aW9uIGFuZCBhcmd1bWVudCB0byBzb3VyY2UgZm9ybScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygxLCBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlICUgKGZ1bmNzdHIsIGFyZ3N0cikpCisKKyAgICBkZWYgdmlzaXRfQ2FsbChzZWxmLCBub2RlKToKKyAgICAgICAgbmFtZSA9IHNlbGYuY2FsbGVkX25vZGVfbmFtZShub2RlLmZ1bmMpCisgICAgICAgIGlmIG5hbWUgYW5kIG5hbWUuZW5kc3dpdGgoc2VsZi5nZXR2YXJzKSBvciBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzBdLCBhc3QuU3RyKToKKyAgICAgICAgICAgICAgICB2YXJuYW1lID0gbm9kZS5hcmdzWzBdLnMKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jcyBhbmQgaXNpbnN0YW5jZShub2RlLmFyZ3NbMV0sIGFzdC5TdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lIG5vdCBpbiBzZWxmLmNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc1t2YXJuYW1lXSA9IHNldCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNbdmFybmFtZV0uYWRkKG5vZGUuYXJnc1sxXS5zKQorICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMuYWRkKG5vZGUuYXJnc1swXS5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndhcm4obm9kZS5mdW5jLCBub2RlLmFyZ3NbMF0pCisgICAgICAgIGVsaWYgbmFtZSBpbiBzZWxmLmV4ZWNmdW5jczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzBdLCBhc3QuU3RyKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhcl9leGVjcy5hZGQobm9kZS5hcmdzWzBdLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud2Fybihub2RlLmZ1bmMsIG5vZGUuYXJnc1swXSkKKyAgICAgICAgZWxpZiBuYW1lIGFuZCBpc2luc3RhbmNlKG5vZGUuZnVuYywgKGFzdC5OYW1lLCBhc3QuQXR0cmlidXRlKSk6CisgICAgICAgICAgICBzZWxmLmV4ZWNzLmFkZChuYW1lKQorCisgICAgZGVmIGNhbGxlZF9ub2RlX25hbWUoc2VsZiwgbm9kZSk6CisgICAgICAgICIiIkdpdmVuIGEgY2FsbGVkIG5vZGUsIHJldHVybiBpdHMgb3JpZ2luYWwgc3RyaW5nIGZvcm0iIiIKKyAgICAgICAgY29tcG9uZW50cyA9IFtdCisgICAgICAgIHdoaWxlIG5vZGU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG5vZGUuYXR0cikKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS52YWx1ZQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5OYW1lKToKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFwcGVuZChub2RlLmlkKQorICAgICAgICAgICAgICAgIHJldHVybiAnLicuam9pbihyZXZlcnNlZChjb21wb25lbnRzKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2cpOgorICAgICAgICBzZWxmLnZhcl9leGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29udGFpbnMgPSB7fQorICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KCkKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5sb2cgPSBCdWZmZXJlZExvZ2dlcignQml0QmFrZS5EYXRhLlB5dGhvblBhcnNlcicsIGxvZ2dpbmcuREVCVUcsIGxvZykKKworICAgICAgICBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlID0gImluIGNhbGwgb2YgJXMsIGFyZ3VtZW50ICclcycgaXMgbm90IGEgc3RyaW5nIGxpdGVyYWwiCisgICAgICAgIHNlbGYudW5oYW5kbGVkX21lc3NhZ2UgPSAid2hpbGUgcGFyc2luZyAlcywgJXMiICUgKG5hbWUsIHNlbGYudW5oYW5kbGVkX21lc3NhZ2UpCisKKyAgICBkZWYgcGFyc2VfcHl0aG9uKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBub3Qgbm9kZSBvciBub3Qgbm9kZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaCA9IGhhc2goc3RyKG5vZGUpKQorCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlOgorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5yZWZzKQorICAgICAgICAgICAgc2VsZi5leGVjcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVbaF0uZXhlY3MpCisgICAgICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5jb250YWluczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2ldID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5jb250YWluc1tpXSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlZXh0cmFzOgorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5yZWZzKQorICAgICAgICAgICAgc2VsZi5leGVjcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVleHRyYXNbaF0uZXhlY3MpCisgICAgICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5jb250YWluczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2ldID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5jb250YWluc1tpXSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNvZGUgPSBjb21waWxlKGNoZWNrX2luZGVudChzdHIobm9kZSkpLCAiPHN0cmluZz4iLCAiZXhlYyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzdC5QeUNGX09OTFlfQVNUKQorCisgICAgICAgIGZvciBuIGluIGFzdC53YWxrKGNvZGUpOgorICAgICAgICAgICAgaWYgbi5fX2NsYXNzX18uX19uYW1lX18gPT0gIkNhbGwiOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXRfQ2FsbChuKQorCisgICAgICAgIHNlbGYuZXhlY3MudXBkYXRlKHNlbGYudmFyX2V4ZWNzKQorCisgICAgICAgIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXSA9IGNvZGVwYXJzZXJjYWNoZS5uZXdQeXRob25DYWNoZUxpbmUoc2VsZi5yZWZlcmVuY2VzLCBzZWxmLmV4ZWNzLCBzZWxmLmNvbnRhaW5zKQorCitjbGFzcyBTaGVsbFBhcnNlcigpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2cpOgorICAgICAgICBzZWxmLmZ1bmNkZWZzID0gc2V0KCkKKyAgICAgICAgc2VsZi5hbGxleGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoKQorICAgICAgICBzZWxmLmxvZyA9IEJ1ZmZlcmVkTG9nZ2VyKCdCaXRCYWtlLkRhdGEuJXMnICUgbmFtZSwgbG9nZ2luZy5ERUJVRywgbG9nKQorICAgICAgICBzZWxmLnVuaGFuZGxlZF90ZW1wbGF0ZSA9ICJ1bmFibGUgdG8gaGFuZGxlIG5vbi1saXRlcmFsIGNvbW1hbmQgJyVzJyIKKyAgICAgICAgc2VsZi51bmhhbmRsZWRfdGVtcGxhdGUgPSAid2hpbGUgcGFyc2luZyAlcywgJXMiICUgKG5hbWUsIHNlbGYudW5oYW5kbGVkX3RlbXBsYXRlKQorCisgICAgZGVmIHBhcnNlX3NoZWxsKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUGFyc2UgdGhlIHN1cHBsaWVkIHNoZWxsIGNvZGUgaW4gYSBzdHJpbmcsIHJldHVybmluZyB0aGUgZXh0ZXJuYWwKKyAgICAgICAgY29tbWFuZHMgaXQgZXhlY3V0ZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGggPSBoYXNoKHN0cih2YWx1ZSkpCisKKyAgICAgICAgaWYgaCBpbiBjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZToKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVbaF0uZXhlY3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjcworCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVleHRyYXM6CisgICAgICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5zaGVsbGNhY2hlZXh0cmFzW2hdLmV4ZWNzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3MKKworICAgICAgICBzZWxmLl9wYXJzZV9zaGVsbCh2YWx1ZSkKKyAgICAgICAgc2VsZi5leGVjcyA9IHNldChjbWQgZm9yIGNtZCBpbiBzZWxmLmFsbGV4ZWNzIGlmIGNtZCBub3QgaW4gc2VsZi5mdW5jZGVmcykKKworICAgICAgICBjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZWV4dHJhc1toXSA9IGNvZGVwYXJzZXJjYWNoZS5uZXdTaGVsbENhY2hlTGluZShzZWxmLmV4ZWNzKQorCisgICAgICAgIHJldHVybiBzZWxmLmV4ZWNzCisKKyAgICBkZWYgX3BhcnNlX3NoZWxsKHNlbGYsIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG9rZW5zLCBfID0gcHlzaHlhY2MucGFyc2UodmFsdWUsIGVvZj1UcnVlLCBkZWJ1Zz1GYWxzZSkKKyAgICAgICAgZXhjZXB0IHB5c2hsZXguTmVlZE1vcmU6CisgICAgICAgICAgICByYWlzZSBzaGVycm9ycy5TaGVsbFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIEVPRiIpCisKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc190b2tlbnModG9rZW4pCisKKyAgICBkZWYgcHJvY2Vzc190b2tlbnMoc2VsZiwgdG9rZW5zKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIHN1cHBsaWVkIHBvcnRpb24gb2YgdGhlIHN5bnRheCB0cmVlIGFzIHJldHVybmVkIGJ5CisgICAgICAgIHB5c2h5YWNjLnBhcnNlLgorICAgICAgICAiIiIKKworICAgICAgICBkZWYgZnVuY3Rpb25fZGVmaW5pdGlvbih2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLmZ1bmNkZWZzLmFkZCh2YWx1ZS5uYW1lKQorICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZS5ib2R5XSwgTm9uZQorCisgICAgICAgIGRlZiBjYXNlX2NsYXVzZSh2YWx1ZSk6CisgICAgICAgICAgICAjIEVsZW1lbnQgMCBvZiBlYWNoIGl0ZW0gaW4gdGhlIGNhc2UgaXMgdGhlIGxpc3Qgb2YgcGF0dGVybnMsIGFuZAorICAgICAgICAgICAgIyBFbGVtZW50IDEgb2YgZWFjaCBpdGVtIGluIHRoZSBjYXNlIGlzIHRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIGJlCisgICAgICAgICAgICAjIGV4ZWN1dGVkIHdoZW4gdGhhdCBwYXR0ZXJuIG1hdGNoZXMuCisgICAgICAgICAgICB3b3JkcyA9IGNoYWluKCpbaXRlbVswXSBmb3IgaXRlbSBpbiB2YWx1ZS5pdGVtc10pCisgICAgICAgICAgICBjbWRzICA9IGNoYWluKCpbaXRlbVsxXSBmb3IgaXRlbSBpbiB2YWx1ZS5pdGVtc10pCisgICAgICAgICAgICByZXR1cm4gY21kcywgd29yZHMKKworICAgICAgICBkZWYgaWZfY2xhdXNlKHZhbHVlKToKKyAgICAgICAgICAgIG1haW4gPSBjaGFpbih2YWx1ZS5jb25kLCB2YWx1ZS5pZl9jbWRzKQorICAgICAgICAgICAgcmVzdCA9IHZhbHVlLmVsc2VfY21kcworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN0LCB0dXBsZSkgYW5kIHJlc3RbMF0gPT0gImVsaWYiOgorICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihtYWluLCBpZl9jbGF1c2UocmVzdFsxXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihtYWluLCByZXN0KQorCisgICAgICAgIGRlZiBzaW1wbGVfY29tbWFuZCh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgY2hhaW4odmFsdWUud29yZHMsIChhc3NpZ25bMV0gZm9yIGFzc2lnbiBpbiB2YWx1ZS5hc3NpZ25zKSkKKworICAgICAgICB0b2tlbl9oYW5kbGVycyA9IHsKKyAgICAgICAgICAgICJhbmRfb3IiOiBsYW1iZGEgeDogKCh4LmxlZnQsIHgucmlnaHQpLCBOb25lKSwKKyAgICAgICAgICAgICJhc3luYyI6IGxhbWJkYSB4OiAoW3hdLCBOb25lKSwKKyAgICAgICAgICAgICJicmFjZV9ncm91cCI6IGxhbWJkYSB4OiAoeC5jbWRzLCBOb25lKSwKKyAgICAgICAgICAgICJmb3JfY2xhdXNlIjogbGFtYmRhIHg6ICh4LmNtZHMsIHguaXRlbXMpLAorICAgICAgICAgICAgImZ1bmN0aW9uX2RlZmluaXRpb24iOiBmdW5jdGlvbl9kZWZpbml0aW9uLAorICAgICAgICAgICAgImlmX2NsYXVzZSI6IGxhbWJkYSB4OiAoaWZfY2xhdXNlKHgpLCBOb25lKSwKKyAgICAgICAgICAgICJwaXBlbGluZSI6IGxhbWJkYSB4OiAoeC5jb21tYW5kcywgTm9uZSksCisgICAgICAgICAgICAicmVkaXJlY3RfbGlzdCI6IGxhbWJkYSB4OiAoW3guY21kXSwgTm9uZSksCisgICAgICAgICAgICAic3Vic2hlbGwiOiBsYW1iZGEgeDogKHguY21kcywgTm9uZSksCisgICAgICAgICAgICAid2hpbGVfY2xhdXNlIjogbGFtYmRhIHg6IChjaGFpbih4LmNvbmRpdGlvbiwgeC5jbWRzKSwgTm9uZSksCisgICAgICAgICAgICAidW50aWxfY2xhdXNlIjogbGFtYmRhIHg6IChjaGFpbih4LmNvbmRpdGlvbiwgeC5jbWRzKSwgTm9uZSksCisgICAgICAgICAgICAic2ltcGxlX2NvbW1hbmQiOiBzaW1wbGVfY29tbWFuZCwKKyAgICAgICAgICAgICJjYXNlX2NsYXVzZSI6IGNhc2VfY2xhdXNlLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gdG9rZW4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb3JlX3Rva2Vucywgd29yZHMgPSB0b2tlbl9oYW5kbGVyc1tuYW1lXSh2YWx1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbnN1cHBvcnRlZCB0b2tlbiB0eXBlICIgKyBuYW1lKQorCisgICAgICAgICAgICBpZiBtb3JlX3Rva2VuczoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfdG9rZW5zKG1vcmVfdG9rZW5zKQorCisgICAgICAgICAgICBpZiB3b3JkczoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Nfd29yZHMod29yZHMpCisKKyAgICBkZWYgcHJvY2Vzc193b3JkcyhzZWxmLCB3b3Jkcyk6CisgICAgICAgICIiIlByb2Nlc3MgYSBzZXQgb2YgJ3dvcmRzJyBpbiBweXNoeWFjYyBwYXJsYW5jZSwgd2hpY2ggaW5jbHVkZXMKKyAgICAgICAgZXh0cmFjdGlvbiBvZiBleGVjdXRlZCBjb21tYW5kcyBmcm9tICQoKSBibG9ja3MsIGFzIHdlbGwgYXMgZ3JhYmJpbmcKKyAgICAgICAgdGhlIGNvbW1hbmQgbmFtZSBhcmd1bWVudC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgd29yZHMgPSBsaXN0KHdvcmRzKQorICAgICAgICBmb3Igd29yZCBpbiBsaXN0KHdvcmRzKToKKyAgICAgICAgICAgIHd0cmVlID0gcHlzaGxleC5tYWtlX3dvcmR0cmVlKHdvcmRbMV0pCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHBhcnRbMF0gaW4gKCdgJywgJyQoJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZyhwYXJ0WzE6LTFdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9zaGVsbChjb21tYW5kKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHdvcmRbMF0gaW4gKCJjbWRfbmFtZSIsICJjbWRfd29yZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgd29yZCBpbiB3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkcy5yZW1vdmUod29yZCkKKworICAgICAgICB1c2V0b2tlbiA9IEZhbHNlCisgICAgICAgIGZvciB3b3JkIGluIHdvcmRzOgorICAgICAgICAgICAgaWYgd29yZFswXSBpbiAoImNtZF9uYW1lIiwgImNtZF93b3JkIikgb3IgXAorICAgICAgICAgICAgICAgKHVzZXRva2VuIGFuZCB3b3JkWzBdID09ICJUT0tFTiIpOgorICAgICAgICAgICAgICAgIGlmICI9IiBpbiB3b3JkWzFdOgorICAgICAgICAgICAgICAgICAgICB1c2V0b2tlbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGNtZCA9IHdvcmRbMV0KKyAgICAgICAgICAgICAgICBpZiBjbWQuc3RhcnRzd2l0aCgiJCIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygxLCBzZWxmLnVuaGFuZGxlZF90ZW1wbGF0ZSAlIGNtZCkKKyAgICAgICAgICAgICAgICBlbGlmIGNtZCA9PSAiZXZhbCI6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAiICIuam9pbih3b3JkIGZvciBfLCB3b3JkIGluIHdvcmRzWzE6XSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfc2hlbGwoY29tbWFuZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFsbGV4ZWNzLmFkZChjbWQpCisgICAgICAgICAgICAgICAgYnJlYWsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tbWFuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThjMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb21tYW5kLnB5CkBAIC0wLDAgKzEsNDYzIEBACisiIiIKK0JpdEJha2UgJ0NvbW1hbmQnIG1vZHVsZQorCitQcm92aWRlIGFuIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBiaXRiYWtlIHNlcnZlciB0aHJvdWdoICdjb21tYW5kcycKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiCitUaGUgYml0YmFrZSBzZXJ2ZXIgdGFrZXMgJ2NvbW1hbmRzJyBmcm9tIGl0cyBVSS9jb21tYW5kbGluZS4KK0NvbW1hbmRzIGFyZSBlaXRoZXIgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzLgorQXN5bmMgY29tbWFuZHMgcmV0dXJuIGRhdGEgdG8gdGhlIGNsaWVudCBpbiB0aGUgZm9ybSBvZiBldmVudHMuCitTeW5jIGNvbW1hbmRzIG11c3Qgb25seSByZXR1cm4gZGF0YSB0aHJvdWdoIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUKK2FuZCBtdXN0IG5vdCB0cmlnZ2VyIGV2ZW50cywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4KK0NvbW1hbmRzIGFyZSBxdWV1ZWQgaW4gYSBDb21tYW5kUXVldWUKKyIiIgorCitpbXBvcnQgYmIuZXZlbnQKK2ltcG9ydCBiYi5jb29rZXIKKworY2xhc3MgQ29tbWFuZENvbXBsZXRlZChiYi5ldmVudC5FdmVudCk6CisgICAgcGFzcworCitjbGFzcyBDb21tYW5kRXhpdChiYi5ldmVudC5FdmVudCk6CisgICAgZGVmICBfX2luaXRfXyhzZWxmLCBleGl0Y29kZSk6CisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZXhpdGNvZGUgPSBpbnQoZXhpdGNvZGUpCisKK2NsYXNzIENvbW1hbmRGYWlsZWQoQ29tbWFuZEV4aXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5lcnJvciA9IG1lc3NhZ2UKKyAgICAgICAgQ29tbWFuZEV4aXQuX19pbml0X18oc2VsZiwgMSkKKworY2xhc3MgQ29tbWFuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBDb21tYW5kOgorICAgICIiIgorICAgIEEgcXVldWUgb2YgYXN5bmNocm9ub3VzIGNvbW1hbmRzIGZvciBiaXRiYWtlCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvb2tlcik6CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgIHNlbGYuY21kc19zeW5jID0gQ29tbWFuZHNTeW5jKCkKKyAgICAgICAgc2VsZi5jbWRzX2FzeW5jID0gQ29tbWFuZHNBc3luYygpCisKKyAgICAgICAgIyBGSVhNRSBBZGQgbG9jayBmb3IgdGhpcworICAgICAgICBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgPSBOb25lCisKKyAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kbGluZSwgcm9fb25seSA9IEZhbHNlKToKKyAgICAgICAgY29tbWFuZCA9IGNvbW1hbmRsaW5lLnBvcCgwKQorICAgICAgICBpZiBoYXNhdHRyKENvbW1hbmRzU3luYywgY29tbWFuZCk6CisgICAgICAgICAgICAjIENhbiBydW4gc3luY2hyb25vdXMgY29tbWFuZHMgc3RyYWlnaHQgYXdheQorICAgICAgICAgICAgY29tbWFuZF9tZXRob2QgPSBnZXRhdHRyKHNlbGYuY21kc19zeW5jLCBjb21tYW5kKQorICAgICAgICAgICAgaWYgcm9fb25seToKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjb21tYW5kX21ldGhvZCwgJ3JlYWRvbmx5Jykgb3IgRmFsc2UgPT0gZ2V0YXR0cihjb21tYW5kX21ldGhvZCwgJ3JlYWRvbmx5Jyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCAiTm90IGFibGUgdG8gZXhlY3V0ZSBub3QgcmVhZG9ubHkgY29tbWFuZHMgaW4gcmVhZG9ubHkgbW9kZSIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKGNvbW1hbmRfbWV0aG9kLCAnbmVlZGNvbmZpZycsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGVTeW5jKCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21tYW5kX21ldGhvZChzZWxmLCBjb21tYW5kbGluZSkKKyAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBleGMuYXJnc1swXQorICAgICAgICAgICAgZXhjZXB0IChFeGNlcHRpb24sIFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LCBOb25lCisgICAgICAgIGlmIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCAiQnVzeSAoJXMgaW4gcHJvZ3Jlc3MpIiAlIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZFswXQorICAgICAgICBpZiBjb21tYW5kIG5vdCBpbiBDb21tYW5kc0FzeW5jLl9fZGljdF9fOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsICJObyBzdWNoIGNvbW1hbmQiCisgICAgICAgIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCA9IChjb21tYW5kLCBjb21tYW5kbGluZSkKKyAgICAgICAgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrKHNlbGYuY29va2VyLnJ1bkNvbW1hbmRzLCBzZWxmLmNvb2tlcikKKyAgICAgICAgcmV0dXJuIFRydWUsIE5vbmUKKworICAgIGRlZiBydW5Bc3luY0NvbW1hbmQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuY29va2VyLnN0YXRlIGluIChiYi5jb29rZXIuc3RhdGUuZXJyb3IsIGJiLmNvb2tlci5zdGF0ZS5zaHV0ZG93biwgYmIuY29va2VyLnN0YXRlLmZvcmNlc2h1dGRvd24pOgorICAgICAgICAgICAgICAgICMgdXBkYXRlQ2FjaGUgd2lsbCB0cmlnZ2VyIGEgc2h1dGRvd24gb2YgdGhlIHBhcnNlcgorICAgICAgICAgICAgICAgICMgYW5kIHRoZW4gcmFpc2UgQkJIYW5kbGVkRXhjZXB0aW9uIHRyaWdnZXJpbmcgYW4gZXhpdAorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnVwZGF0ZUNhY2hlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAoY29tbWFuZCwgb3B0aW9ucykgPSBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQKKyAgICAgICAgICAgICAgICBjb21tYW5kbWV0aG9kID0gZ2V0YXR0cihDb21tYW5kc0FzeW5jLCBjb21tYW5kKQorICAgICAgICAgICAgICAgIG5lZWRjYWNoZSA9IGdldGF0dHIoIGNvbW1hbmRtZXRob2QsICJuZWVkY2FjaGUiICkKKyAgICAgICAgICAgICAgICBpZiBuZWVkY2FjaGUgYW5kIHNlbGYuY29va2VyLnN0YXRlICE9IGJiLmNvb2tlci5zdGF0ZS5ydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZG1ldGhvZChzZWxmLmNtZHNfYXN5bmMsIHNlbGYsIG9wdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0IGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZmluaXNoQXN5bmNDb21tYW5kKCJJbnRlcnJ1cHRlZCIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgorICAgICAgICAgICAgYXJnID0gZXhjLmFyZ3NbMF0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZChhcmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoQXN5bmNDb21tYW5kKCJFeGl0ZWQgd2l0aCAlcyIgJSBhcmcpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZCgiIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hBc3luY0NvbW1hbmQodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGZpbmlzaEFzeW5jQ29tbWFuZChzZWxmLCBtc2c9Tm9uZSwgY29kZT1Ob25lKToKKyAgICAgICAgaWYgbXNnIG9yIG1zZyA9PSAiIjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29tbWFuZEZhaWxlZChtc2cpLCBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhKQorICAgICAgICBlbGlmIGNvZGU6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKENvbW1hbmRFeGl0KGNvZGUpLCBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShDb21tYW5kQ29tcGxldGVkKCksIHNlbGYuY29va2VyLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb29rZXIuZmluaXNoY29tbWFuZCgpCisKK2NsYXNzIENvbW1hbmRzU3luYzoKKyAgICAiIiIKKyAgICBBIGNsYXNzIG9mIHN5bmNocm9ub3VzIGNvbW1hbmRzCisgICAgVGhlc2Ugc2hvdWxkIHJ1biBxdWlja2x5IHNvIGFzIG5vdCB0byBodXJ0IGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLgorICAgIFRoZXNlIG11c3Qgbm90IGluZmx1ZW5jZSBhbnkgcnVubmluZyBzeW5jaHJvbm91cyBjb21tYW5kLgorICAgICIiIgorCisgICAgZGVmIHN0YXRlU2h1dGRvd24oc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyaWdnZXIgY29va2VyICdzaHV0ZG93bicgbW9kZQorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZC5jb29rZXIuc2h1dGRvd24oRmFsc2UpCisKKyAgICBkZWYgc3RhdGVGb3JjZVNodXRkb3duKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBTdG9wIHRoZSBjb29rZXIKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNodXRkb3duKFRydWUpCisKKyAgICBkZWYgZ2V0QWxsS2V5c1dpdGhGbGFncyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhIGR1bXAgb2YgdGhlIGdsb2JhbCBzdGF0ZS4gQ2FsbCB3aXRoCisgICAgICAgIHZhcmlhYmxlIGZsYWdzIHRvIGJlIHJldHJpZXZlZCBhcyBwYXJhbXMuCisgICAgICAgICIiIgorICAgICAgICBmbGFnbGlzdCA9IHBhcmFtc1swXQorICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIuZ2V0QWxsS2V5c1dpdGhGbGFncyhmbGFnbGlzdCkKKyAgICBnZXRBbGxLZXlzV2l0aEZsYWdzLnJlYWRvbmx5ID0gVHJ1ZQorCisgICAgZGVmIGdldFZhcmlhYmxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGZyb20gZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorICAgICAgICBleHBhbmQgPSBUcnVlCisgICAgICAgIGlmIGxlbihwYXJhbXMpID4gMToKKyAgICAgICAgICAgIGV4cGFuZCA9IChwYXJhbXNbMV0gPT0gIlRydWUiKQorCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5kYXRhLmdldFZhcih2YXJuYW1lLCBleHBhbmQpCisgICAgZ2V0VmFyaWFibGUucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgc2V0VmFyaWFibGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgdmFyaWFibGUgaW4gZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorICAgICAgICB2YWx1ZSA9IHN0cihwYXJhbXNbMV0pCisgICAgICAgIGNvbW1hbmQuY29va2VyLmRhdGEuc2V0VmFyKHZhcm5hbWUsIHZhbHVlKQorCisgICAgZGVmIHNldENvbmZpZyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSBpbiBjb25maWd1cmF0aW9uCisgICAgICAgICIiIgorICAgICAgICB2YXJuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIHZhbHVlID0gc3RyKHBhcmFtc1sxXSkKKyAgICAgICAgc2V0YXR0cihjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLCB2YXJuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBlbmFibGVEYXRhVHJhY2tpbmcoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuYWJsZSBoaXN0b3J5IHRyYWNraW5nIGZvciB2YXJpYWJsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLmVuYWJsZURhdGFUcmFja2luZygpCisKKyAgICBkZWYgZGlzYWJsZURhdGFUcmFja2luZyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRGlzYWJsZSBoaXN0b3J5IHRyYWNraW5nIGZvciB2YXJpYWJsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLmRpc2FibGVEYXRhVHJhY2tpbmcoKQorCisgICAgZGVmIHNldFByZVBvc3RDb25mRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgcHJlZmlsZXMgPSBwYXJhbXNbMF0uc3BsaXQoKQorICAgICAgICBwb3N0ZmlsZXMgPSBwYXJhbXNbMV0uc3BsaXQoKQorICAgICAgICBjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLnByZWZpbGUgPSBwcmVmaWxlcworICAgICAgICBjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLnBvc3RmaWxlID0gcG9zdGZpbGVzCisgICAgc2V0UHJlUG9zdENvbmZGaWxlcy5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBnZXRDcHVDb3VudChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHRoZSBDUFUgY291bnQgb24gdGhlIGJpdGJha2Ugc2VydmVyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gYmIudXRpbHMuY3B1X2NvdW50KCkKKyAgICBnZXRDcHVDb3VudC5yZWFkb25seSA9IFRydWUKKyAgICBnZXRDcHVDb3VudC5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBtYXRjaEZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgZk1hdGNoID0gcGFyYW1zWzBdCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5tYXRjaEZpbGUoZk1hdGNoKQorICAgIG1hdGNoRmlsZS5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBnZW5lcmF0ZU5ld0ltYWdlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGltYWdlID0gcGFyYW1zWzBdCisgICAgICAgIGJhc2VfaW1hZ2UgPSBwYXJhbXNbMV0KKyAgICAgICAgcGFja2FnZV9xdWV1ZSA9IHBhcmFtc1syXQorICAgICAgICB0aW1lc3RhbXAgPSBwYXJhbXNbM10KKyAgICAgICAgZGVzY3JpcHRpb24gPSBwYXJhbXNbNF0KKyAgICAgICAgcmV0dXJuIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlTmV3SW1hZ2UoaW1hZ2UsIGJhc2VfaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3F1ZXVlLCB0aW1lc3RhbXAsIGRlc2NyaXB0aW9uKQorCisgICAgZGVmIGVuc3VyZURpcihzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICBkaXJlY3RvcnkgPSBwYXJhbXNbMF0KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRpcmVjdG9yeSkKKyAgICBlbnN1cmVEaXIubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0VmFyRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2F2ZSBhIHZhcmlhYmxlIGluIGEgZmlsZTsgdXNlZCBmb3Igc2F2aW5nIGluIGEgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICIiIgorICAgICAgICB2YXIgPSBwYXJhbXNbMF0KKyAgICAgICAgdmFsID0gcGFyYW1zWzFdCisgICAgICAgIGRlZmF1bHRfZmlsZSA9IHBhcmFtc1syXQorICAgICAgICBvcCA9IHBhcmFtc1szXQorICAgICAgICBjb21tYW5kLmNvb2tlci5tb2RpZnlDb25maWd1cmF0aW9uVmFyKHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsIG9wKQorICAgIHNldFZhckZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgcmVtb3ZlVmFyRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gZnJvbSBhIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIHZhciA9IHBhcmFtc1swXQorICAgICAgICBjb21tYW5kLmNvb2tlci5yZW1vdmVDb25maWd1cmF0aW9uVmFyKHZhcikKKyAgICByZW1vdmVWYXJGaWxlLm5lZWRjb25maWcgPSBGYWxzZQorCisgICAgZGVmIGNyZWF0ZUNvbmZpZ0ZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhbiBleHRyYSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIG5hbWUgPSBwYXJhbXNbMF0KKyAgICAgICAgY29tbWFuZC5jb29rZXIuY3JlYXRlQ29uZmlnRmlsZShuYW1lKQorICAgIGNyZWF0ZUNvbmZpZ0ZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0RXZlbnRNYXNrKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGhhbmRsZXJOdW0gPSBwYXJhbXNbMF0KKyAgICAgICAgbGxldmVsID0gcGFyYW1zWzFdCisgICAgICAgIGRlYnVnX2RvbWFpbnMgPSBwYXJhbXNbMl0KKyAgICAgICAgbWFzayA9IHBhcmFtc1szXQorICAgICAgICByZXR1cm4gYmIuZXZlbnQuc2V0X1VJSG1hc2soaGFuZGxlck51bSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBtYXNrKQorICAgIHNldEV2ZW50TWFzay5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBzZXRGZWF0dXJlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSBjb29rZXIgZmVhdHVyZXMgdG8gaW5jbHVkZSB0aGUgcGFzc2VkIGxpc3Qgb2YgZmVhdHVyZXMKKyAgICAgICAgIiIiCisgICAgICAgIGZlYXR1cmVzID0gcGFyYW1zWzBdCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNldEZlYXR1cmVzKGZlYXR1cmVzKQorICAgIHNldEZlYXR1cmVzLm5lZWRjb25maWcgPSBGYWxzZQorICAgICMgYWx0aG91Z2ggd2UgY2hhbmdlIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29va2VyLCB0aGlzIGlzIHRyYW5zcGFyZW50IHNpbmNlCisgICAgIyB3ZSBhbHdheXMgdGFrZSBhbmQgbGVhdmUgdGhlIGNvb2tlciBpbiBzdGF0ZS5pbml0aWFsCisgICAgc2V0RmVhdHVyZXMucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgdXBkYXRlQ29uZmlnKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIG9wdGlvbnMgPSBwYXJhbXNbMF0KKyAgICAgICAgZW52aXJvbm1lbnQgPSBwYXJhbXNbMV0KKyAgICAgICAgY29tbWFuZC5jb29rZXIudXBkYXRlQ29uZmlnT3B0cyhvcHRpb25zLCBlbnZpcm9ubWVudCkKKyAgICB1cGRhdGVDb25maWcubmVlZGNvbmZpZyA9IEZhbHNlCisKK2NsYXNzIENvbW1hbmRzQXN5bmM6CisgICAgIiIiCisgICAgQSBjbGFzcyBvZiBhc3luY2hyb25vdXMgY29tbWFuZHMKKyAgICBUaGVzZSBmdW5jdGlvbnMgY29tbXVuaWNhdGUgdmlhIGdlbmVyYXRlZCBldmVudHMuCisgICAgQW55IGZ1bmN0aW9uIHRoYXQgcmVxdWlyZXMgbWV0YWRhdGEgcGFyc2luZyBzaG91bGQgYmUgaGVyZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZEZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIGEgc2luZ2xlIHNwZWNpZmllZCAuYmIgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgYmZpbGUgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmJ1aWxkRmlsZShiZmlsZSwgdGFzaykKKyAgICBidWlsZEZpbGUubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBidWlsZFRhcmdldHMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIGEgc2V0IG9mIHRhcmdldHMKKyAgICAgICAgIiIiCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmJ1aWxkVGFyZ2V0cyhwa2dzX3RvX2J1aWxkLCB0YXNrKQorICAgIGJ1aWxkVGFyZ2V0cy5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZ2VuZXJhdGVEZXBUcmVlRXZlbnQoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGV2ZW50IGNvbnRhaW5pbmcgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlRGVwVHJlZUV2ZW50KHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZURlcFRyZWVFdmVudC5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZ2VuZXJhdGVEb3RHcmFwaChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHRvIGRpc2sgYXMgLmRvdCBmaWxlcworICAgICAgICAiIiIKKyAgICAgICAgcGtnc190b19idWlsZCA9IHBhcmFtc1swXQorICAgICAgICB0YXNrID0gcGFyYW1zWzFdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZ2VuZXJhdGVEb3RHcmFwaEZpbGVzKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZURvdEdyYXBoLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBnZW5lcmF0ZVRhcmdldHNUcmVlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIHRyZWUgb2YgYnVpbGRhYmxlIHRhcmdldHMuCisgICAgICAgIElmIGtsYXNzIGlzIHByb3ZpZGVkIGVuc3VyZSBhbGwgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGNsYXNzIGFyZQorICAgICAgICBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZSBsaXN0LgorICAgICAgICBJZiBwa2dfbGlzdCBwcm92aWRlZCB1c2UgdGhhdCBsaXN0IChwbHVzIGFueSBleHRyYXMgYnJvdWdodCBpbiBieQorICAgICAgICBrbGFzcykgcmF0aGVyIHRoYW4gZ2VuZXJhdGluZyBhIHRyZWUgZm9yIGFsbCBwYWNrYWdlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGtsYXNzID0gcGFyYW1zWzBdCisgICAgICAgIHBrZ19saXN0ID0gcGFyYW1zWzFdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZ2VuZXJhdGVUYXJnZXRzVHJlZShrbGFzcywgcGtnX2xpc3QpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZVRhcmdldHNUcmVlLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBmaW5kQ29yZUJhc2VGaWxlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBjZXJ0YWluIGZpbGVzIGluIENPUkVCQVNFIGRpcmVjdG9yeS4gaS5lLiBMYXllcnMKKyAgICAgICAgIiIiCisgICAgICAgIHN1YmRpciA9IHBhcmFtc1swXQorICAgICAgICBmaWxlbmFtZSA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmZpbmRDb3JlQmFzZUZpbGVzKHN1YmRpciwgZmlsZW5hbWUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kQ29yZUJhc2VGaWxlcy5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBjb25maWcgZmlsZXMgd2hpY2ggcHJvdmlkZSBhcHByb3ByaWF0ZSB2YWx1ZXMKKyAgICAgICAgZm9yIHRoZSBwYXNzZWQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gaS5lLiBNQUNISU5FCisgICAgICAgICIiIgorICAgICAgICB2YXJuYW1lID0gcGFyYW1zWzBdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZmluZENvbmZpZ0ZpbGVzKHZhcm5hbWUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kQ29uZmlnRmlsZXMubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBmaW5kRmlsZXNNYXRjaGluZ0luRGlyKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIGltcGxlbWVudGF0aW9uIGZpbGVzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgcGF0dGVybgorICAgICAgICBpbiB0aGUgcmVxdWVzdGVkIHN1YmRpcmVjdG9yeSBvZiBhIEJCUEFUSAorICAgICAgICAiIiIKKyAgICAgICAgcGF0dGVybiA9IHBhcmFtc1swXQorICAgICAgICBkaXJlY3RvcnkgPSBwYXJhbXNbMV0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5maW5kRmlsZXNNYXRjaGluZ0luRGlyKHBhdHRlcm4sIGRpcmVjdG9yeSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBmaW5kQ29uZmlnRmlsZVBhdGgoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIHBhdGggb2YgdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGNvbmZpZ2ZpbGUgPSBwYXJhbXNbMF0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5maW5kQ29uZmlnRmlsZVBhdGgoY29uZmlnZmlsZSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGZpbmRDb25maWdGaWxlUGF0aC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHNob3dWZXJzaW9ucyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZlcnNpb25zCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5zaG93VmVyc2lvbnMoKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgc2hvd1ZlcnNpb25zLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBzaG93RW52aXJvbm1lbnRUYXJnZXQoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFByaW50IHRoZSBlbnZpcm9ubWVudCBvZiBhIHRhcmdldCByZWNpcGUKKyAgICAgICAgKG5lZWRzIHRoZSBjYWNoZSB0byB3b3JrIG91dCB3aGljaCByZWNpcGUgdG8gdXNlKQorICAgICAgICAiIiIKKyAgICAgICAgcGtnID0gcGFyYW1zWzBdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuc2hvd0Vudmlyb25tZW50KE5vbmUsIHBrZykKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHNob3dFbnZpcm9ubWVudFRhcmdldC5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgc2hvd0Vudmlyb25tZW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBQcmludCB0aGUgc3RhbmRhcmQgZW52aXJvbm1lbnQKKyAgICAgICAgb3IgaWYgc3BlY2lmaWVkIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzcGVjaWZpZWQgcmVjaXBlCisgICAgICAgICIiIgorICAgICAgICBiZmlsZSA9IHBhcmFtc1swXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNob3dFbnZpcm9ubWVudChiZmlsZSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHNob3dFbnZpcm9ubWVudC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHBhcnNlRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSAuYmIgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLnVwZGF0ZUNhY2hlKCkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHBhcnNlRmlsZXMubmVlZGNhY2hlID0gVHJ1ZQorCisgICAgZGVmIGNvbXBhcmVSZXZpc2lvbnMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSAuYmIgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJiLmZldGNoLmZldGNoZXJfY29tcGFyZV9yZXZpc2lvbnMoY29tbWFuZC5jb29rZXIuZGF0YSk6CisgICAgICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZChjb2RlPTEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgY29tcGFyZVJldmlzaW9ucy5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgdHJpZ2dlckV2ZW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBUcmlnZ2VyIGEgY2VydGFpbiBldmVudAorICAgICAgICAiIiIKKyAgICAgICAgZXZlbnQgPSBwYXJhbXNbMF0KKyAgICAgICAgYmIuZXZlbnQuZmlyZShldmFsKGV2ZW50KSwgY29tbWFuZC5jb29rZXIuZGF0YSkKKyAgICAgICAgY29tbWFuZC5jdXJyZW50QXN5bmNDb21tYW5kID0gTm9uZQorICAgIHRyaWdnZXJFdmVudC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHJlc2V0Q29va2VyKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBSZXNldCB0aGUgY29va2VyIHRvIGl0cyBpbml0aWFsIHN0YXRlLCB0aHVzIGZvcmNpbmcgYSByZXBhcnNlIGZvcgorICAgICAgICBhbnkgYXN5bmMgY29tbWFuZCB0aGF0IGhhcyB0aGUgbmVlZGNhY2hlIHByb3BlcnR5IHNldCB0byBUcnVlCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5yZXNldCgpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICByZXNldENvb2tlci5uZWVkY2FjaGUgPSBGYWxzZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbXBhdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29tcGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTkyM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2NvbXBhdC5weQpAQCAtMCwwICsxLDYgQEAKKyIiIkNvZGUgcHVsbGVkIGZyb20gZnV0dXJlIHB5dGhvbiB2ZXJzaW9ucywgaGVyZSBmb3IgY29tcGF0aWJpbGl0eSIiIgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNdXRhYmxlTWFwcGluZywgS2V5c1ZpZXcsIFZhbHVlc1ZpZXcsIEl0ZW1zVmlldywgT3JkZXJlZERpY3QKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb29rZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkN2Q1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyLnB5CkBAIC0wLDAgKzEsMjEzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBST0FEIEdtYkgKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MsIGdsb2IsIG9zLnBhdGgsIHJlLCB0aW1lCitpbXBvcnQgYXRleGl0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHNyZV9jb25zdGFudHMKK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgYmIsIGJiLmV4Y2VwdGlvbnMsIGJiLmNvbW1hbmQKK2Zyb20gYmIgaW1wb3J0IHV0aWxzLCBkYXRhLCBwYXJzZSwgZXZlbnQsIGNhY2hlLCBwcm92aWRlcnMsIHRhc2tkYXRhLCBydW5xdWV1ZSwgYnVpbGQKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHByc2Vydi5zZXJ2CitpbXBvcnQgcHlpbm90aWZ5CisKK2xvZ2dlciAgICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorY29sbGVjdGxvZyAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5Db2xsZWN0aW9uIikKK2J1aWxkbG9nICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQnVpbGQiKQorcGFyc2Vsb2cgICAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QYXJzaW5nIikKK3Byb3ZpZGVybG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUHJvdmlkZXIiKQorCitjbGFzcyBOb1NwZWNpZmljTWF0Y2goYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gbm8gb3IgbXVsdGlwbGUgZmlsZSBtYXRjaGVzIGFyZSBmb3VuZAorICAgICIiIgorCitjbGFzcyBOb3RoaW5nVG9CdWlsZChFeGNlcHRpb24pOgorICAgICIiIgorICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGJ1aWxkCisgICAgIiIiCisKK2NsYXNzIENvbGxlY3Rpb25FcnJvcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIgorICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBsYXllciBjb25maWd1cmF0aW9uIGlzIGluY29ycmVjdAorICAgICIiIgorCitjbGFzcyBzdGF0ZToKKyAgICBpbml0aWFsLCBwYXJzaW5nLCBydW5uaW5nLCBzaHV0ZG93biwgZm9yY2VzaHV0ZG93biwgc3RvcHBlZCwgZXJyb3IgPSByYW5nZSg3KQorCisKK2NsYXNzIFNraXBwZWRQYWNrYWdlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmZvID0gTm9uZSwgcmVhc29uID0gTm9uZSk6CisgICAgICAgIHNlbGYucG4gPSBOb25lCisgICAgICAgIHNlbGYuc2tpcHJlYXNvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5wcm92aWRlcyA9IE5vbmUKKyAgICAgICAgc2VsZi5ycHJvdmlkZXMgPSBOb25lCisKKyAgICAgICAgaWYgaW5mbzoKKyAgICAgICAgICAgIHNlbGYucG4gPSBpbmZvLnBuCisgICAgICAgICAgICBzZWxmLnNraXByZWFzb24gPSBpbmZvLnNraXByZWFzb24KKyAgICAgICAgICAgIHNlbGYucHJvdmlkZXMgPSBpbmZvLnByb3ZpZGVzCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9IGluZm8ucnByb3ZpZGVzCisgICAgICAgIGVsaWYgcmVhc29uOgorICAgICAgICAgICAgc2VsZi5za2lwcmVhc29uID0gcmVhc29uCisKKworY2xhc3MgQ29va2VyRmVhdHVyZXMob2JqZWN0KToKKyAgICBfZmVhdHVyZV9saXN0ID0gW0hPQl9FWFRSQV9DQUNIRVMsIFNFTkRfREVQRU5EU19UUkVFLCBCQVNFREFUQVNUT1JFX1RSQUNLSU5HLCBTRU5EX1NBTklUWUVWRU5UU10gPSByYW5nZSg0KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mZWF0dXJlcz1zZXQoKQorCisgICAgZGVmIHNldEZlYXR1cmUoc2VsZiwgZik6CisgICAgICAgICMgdmFsaWRhdGUgd2UgZ290IGEgcmVxdWVzdCBmb3IgYSBmZWF0dXJlIHdlIHN1cHBvcnQKKyAgICAgICAgaWYgZiBub3QgaW4gQ29va2VyRmVhdHVyZXMuX2ZlYXR1cmVfbGlzdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9mZWF0dXJlcy5hZGQoZikKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgZik6CisgICAgICAgIHJldHVybiBmIGluIHNlbGYuX2ZlYXR1cmVzCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mZWF0dXJlcy5fX2l0ZXJfXygpCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZlYXR1cmVzLm5leHQoKQorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworIyBCQkNvb2tlcgorIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCitjbGFzcyBCQkNvb2tlcjoKKyAgICAiIiIKKyAgICBNYW5hZ2VzIG9uZSBiaXRiYWtlIGJ1aWxkIHJ1bgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVTZXQ9Tm9uZSk6CisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUgPSBOb25lCisgICAgICAgIHNlbGYuc2tpcGxpc3QgPSB7fQorICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBDb29rZXJGZWF0dXJlcygpCisgICAgICAgIGlmIGZlYXR1cmVTZXQ6CisgICAgICAgICAgICBmb3IgZiBpbiBmZWF0dXJlU2V0OgorICAgICAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKGYpCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisgICAgICAgIHNlbGYuY29uZmlnd2F0Y2hlciA9IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXIoKQorICAgICAgICBzZWxmLmNvbmZpZ3dhdGNoZXIuYmJzZWVuID0gW10KKyAgICAgICAgc2VsZi5jb25maWd3YXRjaGVyLmJid2F0Y2hlZGZpbGVzID0gW10KKyAgICAgICAgc2VsZi5jb25maWdub3RpZmllciA9IHB5aW5vdGlmeS5Ob3RpZmllcihzZWxmLmNvbmZpZ3dhdGNoZXIsIHNlbGYuY29uZmlnX25vdGlmaWNhdGlvbnMpCisgICAgICAgIHNlbGYud2F0Y2htYXNrID0gcHlpbm90aWZ5LklOX0NMT1NFX1dSSVRFIHwgcHlpbm90aWZ5LklOX0NSRUFURSB8IHB5aW5vdGlmeS5JTl9ERUxFVEUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5LklOX0RFTEVURV9TRUxGIHwgcHlpbm90aWZ5LklOX01PRElGWSB8IHB5aW5vdGlmeS5JTl9NT1ZFX1NFTEYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5LklOX01PVkVEX0ZST00gfCBweWlub3RpZnkuSU5fTU9WRURfVE8gCisgICAgICAgIHNlbGYud2F0Y2hlciA9IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuYmJzZWVuID0gW10KKyAgICAgICAgc2VsZi53YXRjaGVyLmJid2F0Y2hlZGZpbGVzID0gW10KKyAgICAgICAgc2VsZi5ub3RpZmllciA9IHB5aW5vdGlmeS5Ob3RpZmllcihzZWxmLndhdGNoZXIsIHNlbGYubm90aWZpY2F0aW9ucykKKworCisgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKKworICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMgPSBbXQorCisgICAgICAgIGRlZiBfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMoc2VydmVyLCBub3RpZmllcl9saXN0LCBhYm9ydCk6CisgICAgICAgICAgICBmb3IgbiBpbiBub3RpZmllcl9saXN0OgorICAgICAgICAgICAgICAgIGlmIG4uY2hlY2tfZXZlbnRzKHRpbWVvdXQ9MCk6CisgICAgICAgICAgICAgICAgICAgICMgcmVhZCBub3RpZmllZCBldmVudHMgYW5kIGVucWV1ZSB0aGVtCisgICAgICAgICAgICAgICAgICAgIG4ucmVhZF9ldmVudHMoKQorICAgICAgICAgICAgICAgICAgICBuLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgICAgIHJldHVybiAxLjAKKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2VydmVyX3JlZ2lzdGVyX2lkbGVjYWxsYmFjayhfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMsIFtzZWxmLmNvbmZpZ25vdGlmaWVyLCBzZWxmLm5vdGlmaWVyXSkKKworICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBUcnVlCisgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCisKKyAgICAgICAgIyBUYWtlIGEgbG9jayBzbyBvbmx5IG9uZSBjb3B5IG9mIGJpdGJha2UgY2FuIHJ1biBhZ2FpbnN0IGEgZ2l2ZW4gYnVpbGQKKyAgICAgICAgIyBkaXJlY3RvcnkgYXQgYSB0aW1lCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tCaXRiYWtlKCk6CisgICAgICAgICAgICBiYi5mYXRhbCgiT25seSBvbmUgY29weSBvZiBiaXRiYWtlIHNob3VsZCBiZSBydW4gYWdhaW5zdCBhIGJ1aWxkIGRpcmVjdG9yeSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubG9jay5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmxvY2sudHJ1bmNhdGUoKQorICAgICAgICAgICAgaWYgbGVuKGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9jay53cml0ZSgiJXM6JXNcbiIgJSAoY29uZmlndXJhdGlvbi5pbnRlcmZhY2VbMF0sIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlWzFdKSk7CisgICAgICAgICAgICBzZWxmLmxvY2suZmx1c2goKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUT1NUT1AgbXVzdCBub3QgYmUgc2V0IG9yIG91ciBjaGlsZHJlbiB3aWxsIGhhbmcgd2hlbiB0aGV5IG91dHB1dAorICAgICAgICBmZCA9IHN5cy5zdGRvdXQuZmlsZW5vKCkKKyAgICAgICAgaWYgb3MuaXNhdHR5KGZkKToKKyAgICAgICAgICAgIGltcG9ydCB0ZXJtaW9zCisgICAgICAgICAgICB0Y2F0dHIgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkKKyAgICAgICAgICAgIGlmIHRjYXR0clszXSAmIHRlcm1pb3MuVE9TVE9QOgorICAgICAgICAgICAgICAgIGJ1aWxkbG9nLmluZm8oIlRoZSB0ZXJtaW5hbCBoYWQgdGhlIFRPU1RPUCBiaXQgc2V0LCBjbGVhcmluZy4uLiIpCisgICAgICAgICAgICAgICAgdGNhdHRyWzNdID0gdGNhdHRyWzNdICYgfnRlcm1pb3MuVE9TVE9QCisgICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQU5PVywgdGNhdHRyKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9IGJiLmNvbW1hbmQuQ29tbWFuZChzZWxmKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuaW5pdGlhbAorCisgICAgICAgIHNlbGYucGFyc2VyID0gTm9uZQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQorCisgICAgZGVmIGNvbmZpZ19ub3RpZmljYXRpb25zKHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2ZW50LnBhdGhuYW1lIGluIHNlbGYuY29uZmlnd2F0Y2hlci5iYndhdGNoZWRmaWxlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgZXZlbnQucGF0aCBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CisgICAgICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMuYXBwZW5kKGV2ZW50LnBhdGgpCisgICAgICAgIHNlbGYuYmFzZWNvbmZpZ192YWxpZCA9IEZhbHNlCisKKyAgICBkZWYgbm90aWZpY2F0aW9ucyhzZWxmLCBldmVudCk6CisgICAgICAgIGlmIG5vdCBldmVudC5wYXRoIGluIHNlbGYuaW5vdGlmeV9tb2RpZmllZF9maWxlczoKKyAgICAgICAgICAgIHNlbGYuaW5vdGlmeV9tb2RpZmllZF9maWxlcy5hcHBlbmQoZXZlbnQucGF0aCkKKyAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gRmFsc2UKKworICAgIGRlZiBhZGRfZmlsZXdhdGNoKHNlbGYsIGRlcHMsIHdhdGNoZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCB3YXRjaGVyOgorICAgICAgICAgICAgd2F0Y2hlciA9IHNlbGYud2F0Y2hlcgorICAgICAgICBmb3IgaSBpbiBkZXBzOgorICAgICAgICAgICAgd2F0Y2hlci5iYndhdGNoZWRmaWxlcy5hcHBlbmQoaVswXSkKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmRpcm5hbWUoaVswXSkKKyAgICAgICAgICAgIGlmIGYgaW4gd2F0Y2hlci5iYnNlZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdhdGNoZXIuYmJzZWVuLmFwcGVuZChmKQorICAgICAgICAgICAgd2F0Y2h0YXJnZXQgPSBOb25lCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICMgV2UgdHJ5IGFuZCBhZGQgd2F0Y2hlcyBmb3IgZmlsZXMgdGhhdCBkb24ndCBleGlzdCBidXQgaWYgdGhleSBkaWQsIHdvdWxkIGluZmx1ZW5jZQorICAgICAgICAgICAgICAgICMgdGhlIHBhcnNlci4gVGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlc2UgZmlsZXMgbWF5IG5vdCBleGlzdCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIAorICAgICAgICAgICAgICAgICMgdG8gd2F0Y2ggYW55IHBhcmVudCB0aGF0IGRvZXMgZXhpc3QgZm9yIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmFkZF93YXRjaChmLCBzZWxmLndhdGNobWFzaywgcXVpZXQ9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIHdhdGNodGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5iYndhdGNoZWRmaWxlcy5hcHBlbmQod2F0Y2h0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXJFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiAnRU5PRU5UJyBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaHRhcmdldCA9IGYKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmRpcm5hbWUoZikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgaW4gd2F0Y2hlci5iYnNlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuYmJzZWVuLmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0VOT1NQQycgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoIk5vIHNwYWNlIGxlZnQgb24gZGV2aWNlIG9yIGV4Y2VlZHMgZnMuaW5vdGlmeS5tYXhfdXNlcl93YXRjaGVzPyIpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiVG8gY2hlY2sgbWF4X3VzZXJfd2F0Y2hlczogc3lzY3RsIC1uIGZzLmlub3RpZnkubWF4X3VzZXJfd2F0Y2hlcy4iKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoIlRvIG1vZGlmeSBtYXhfdXNlcl93YXRjaGVzOiBzeXNjdGwgLW4gLXcgZnMuaW5vdGlmeS5tYXhfdXNlcl93YXRjaGVzPTx2YWx1ZT4uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmVycm9yKCJSb290IHByaXZpbGVnZSBpcyByZXF1aXJlZCB0byBtb2RpZnkgbWF4X3VzZXJfd2F0Y2hlcy4iKQorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNpZ3Rlcm1fZXhjZXB0aW9uKHNlbGYsIHNpZ251bSwgc3RhY2tmcmFtZSk6CisgICAgICAgIGlmIHNpZ251bSA9PSBzaWduYWwuU0lHVEVSTToKKyAgICAgICAgICAgIGJiLndhcm4oIkNvb2tlciByZWNpZXZlZCBTSUdURVJNLCBzaHV0dGluZyBkb3duLi4uIikKKyAgICAgICAgZWxpZiBzaWdudW0gPT0gc2lnbmFsLlNJR0hVUDoKKyAgICAgICAgICAgIGJiLndhcm4oIkNvb2tlciByZWNpZXZlZCBTSUdIVVAsIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuZm9yY2VzaHV0ZG93bgorCisgICAgZGVmIHNldEZlYXR1cmVzKHNlbGYsIGZlYXR1cmVzKToKKyAgICAgICAgIyB3ZSBvbmx5IGFjY2VwdCBhIG5ldyBmZWF0dXJlIHNldCBpZiB3ZSdyZSBpbiBzdGF0ZSBpbml0aWFsLCBzbyB3ZSBjYW4gcmVzZXQgd2l0aG91dCBwcm9ibGVtcworICAgICAgICBpZiBub3Qgc2VsZi5zdGF0ZSBpbiBbc3RhdGUuaW5pdGlhbCwgc3RhdGUuc2h1dGRvd24sIHN0YXRlLmZvcmNlc2h1dGRvd24sIHN0YXRlLnN0b3BwZWQsIHN0YXRlLmVycm9yXToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSWxsZWdhbCBzdGF0ZSBmb3IgZmVhdHVyZSBzZXQgY2hhbmdlIikKKyAgICAgICAgb3JpZ2luYWxfZmVhdHVyZXNldCA9IGxpc3Qoc2VsZi5mZWF0dXJlc2V0KQorICAgICAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKGZlYXR1cmUpCisgICAgICAgIGJiLmRlYnVnKDEsICJGZWF0dXJlcyBzZXQgJXMgKHdhcyAlcykiICUgKG9yaWdpbmFsX2ZlYXR1cmVzZXQsIGxpc3Qoc2VsZi5mZWF0dXJlc2V0KSkpCisgICAgICAgIGlmIChvcmlnaW5hbF9mZWF0dXJlc2V0ICE9IGxpc3Qoc2VsZi5mZWF0dXJlc2V0KSkgYW5kIHNlbGYuc3RhdGUgIT0gc3RhdGUuZXJyb3I6CisgICAgICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBpbml0Q29uZmlndXJhdGlvbkRhdGEoc2VsZik6CisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmluaXRpYWwKKyAgICAgICAgc2VsZi5jYWNoZXNfYXJyYXkgPSBbXQorCisgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5lbmFibGVEYXRhVHJhY2tpbmcoKQorCisgICAgICAgIGFsbF9leHRyYV9jYWNoZV9uYW1lcyA9IFtdCisgICAgICAgICMgV2UgaGFyZGNvZGUgYWxsIGtub3duIGNhY2hlIHR5cGVzIGluIGEgc2luZ2xlIHBsYWNlLCBoZXJlLgorICAgICAgICBpZiBDb29rZXJGZWF0dXJlcy5IT0JfRVhUUkFfQ0FDSEVTIGluIHNlbGYuZmVhdHVyZXNldDoKKyAgICAgICAgICAgIGFsbF9leHRyYV9jYWNoZV9uYW1lcy5hcHBlbmQoImJiLmNhY2hlX2V4dHJhOkhvYlJlY2lwZUluZm8iKQorCisgICAgICAgIGNhY2hlc19uYW1lX2FycmF5ID0gWydiYi5jYWNoZTpDb3JlUmVjaXBlSW5mbyddICsgYWxsX2V4dHJhX2NhY2hlX25hbWVzCisKKyAgICAgICAgIyBBdCBsZWFzdCBDb3JlUmVjaXBlSW5mbyB3aWxsIGJlIGxvYWRlZCwgc28gY2FjaGVzX2FycmF5IHdpbGwgbmV2ZXIgYmUgZW1wdHkhCisgICAgICAgICMgVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIG5vIGZ1cnRoZXIgY2hlY2sgbmVlZGVkIQorICAgICAgICBmb3IgdmFyIGluIGNhY2hlc19uYW1lX2FycmF5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBjYWNoZV9uYW1lID0gdmFyLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBmcm9tbGlzdD0oY2FjaGVfbmFtZSwpKQorICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVzX2FycmF5LmFwcGVuZChnZXRhdHRyKG1vZHVsZSwgY2FjaGVfbmFtZSkpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiVW5hYmxlIHRvIGltcG9ydCBleHRyYSBSZWNpcGVJbmZvICclcycgZnJvbSAnJXMnOiAlcyIgJSAoY2FjaGVfbmFtZSwgbW9kdWxlX25hbWUsIGV4YykpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoIkZBVEFMOiBGYWlsZWQgdG8gaW1wb3J0IGV4dHJhIGNhY2hlIGNsYXNzICclcycuIiAlIGNhY2hlX25hbWUpCisKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IGJiLmNvb2tlcmRhdGEuQ29va2VyRGF0YUJ1aWxkZXIoc2VsZi5jb25maWd1cmF0aW9uLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlci5wYXJzZUJhc2VDb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhCisgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhX2hhc2gKKworCisgICAgICAgICMgd2UgbG9nIGFsbCBldmVudHMgdG8gYSBmaWxlIGlmIHNvIGRpcmVjdGVkCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi53cml0ZWV2ZW50bG9nOgorICAgICAgICAgICAgaW1wb3J0IGpzb24sIHBpY2tsZQorICAgICAgICAgICAgREVGQVVMVF9FVkVOVEZJTEUgPSBzZWxmLmNvbmZpZ3VyYXRpb24ud3JpdGVldmVudGxvZworICAgICAgICAgICAgY2xhc3MgRXZlbnRMb2dXcml0ZUhhbmRsZXIoKToKKworICAgICAgICAgICAgICAgIGNsYXNzIEV2ZW50V3JpdGVyKCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29rZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX2luaXRlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gW10KKworICAgICAgICAgICAgICAgICAgICBkZWYgaW5pdF9maWxlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBvbGQgbG9nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKERFRkFVTFRfRVZFTlRGSUxFKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKERFRkFVTFRfRVZFTlRGSUxFLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBqc29uLmR1bXBzKHsgImFsbHZhcmlhYmxlcyIgOiBzZWxmLmNvb2tlci5nZXRBbGxLZXlzV2l0aEZsYWdzKFsiZG9jIiwgImZ1bmMiXSl9KSkKKworICAgICAgICAgICAgICAgICAgICBkZWYgd3JpdGVfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKERFRkFVTFRfRVZFTlRGSUxFLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlc1xuIiAlIGpzb24uZHVtcHMoeyJjbGFzcyI6ZXZlbnQuX19tb2R1bGVfXyArICIuIiArIGV2ZW50Ll9fY2xhc3NfXy5fX25hbWVfXywgInZhcnMiOmpzb24uZHVtcHMocGlja2xlLmR1bXBzKGV2ZW50KSkgfSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfY2xhc3MgPSBldmVudC5fX21vZHVsZV9fICsgIi4iICsgZXZlbnQuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdCBvbiBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZmlsZV9pbml0ZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgZXZlbnRfY2xhc3MgPT0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9maWxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX2luaXRlZCA9IFRydWUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIHBlbmRpbmcgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlIGluIHNlbGYuZXZlbnRfcXVldWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHNvIHdyaXRlIHRoZSBjdXJyZW50IGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZXZlbnQoZXZlbnQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHF1ZXVlIGFsbCBldmVudHMgdW50aWwgdGhlIGZpbGUgaXMgaW5pdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRfcXVldWUuYXBwZW5kKGV2ZW50KQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgaGF2ZSB0aGUgZmlsZSwganVzdCB3cml0ZSB0aGUgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGV2ZW50KQorCisgICAgICAgICAgICAgICAgIyBzZXQgb3VyIGhhbmRsZXIncyBldmVudCBwcm9jZXNzb3IKKyAgICAgICAgICAgICAgICBldmVudCA9IEV2ZW50V3JpdGVyKHNlbGYpICAgICAgICMgc2VsZiBpcyB0aGUgY29va2VyIGhlcmUKKworCisgICAgICAgICAgICAjIHNldCB1cCBjb29rZXIgZmVhdHVyZXMgZm9yIHRoaXMgbW9jayBVSSBoYW5kbGVyCisKKyAgICAgICAgICAgICMgd2UgbmVlZCB0byB3cml0ZSB0aGUgZGVwZW5kZW5jeSB0cmVlIGluIHRoZSBsb2cKKyAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKENvb2tlckZlYXR1cmVzLlNFTkRfREVQRU5EU19UUkVFKQorICAgICAgICAgICAgIyByZWdpc3RlciB0aGUgbG9nIGZpbGUgd3JpdGVyIGFzIFVJIEhhbmRsZXIKKyAgICAgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoRXZlbnRMb2dXcml0ZUhhbmRsZXIoKSkKKworCisgICAgICAgICMKKyAgICAgICAgIyBDb3B5IG9mIHRoZSBkYXRhIHN0b3JlIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkLgorICAgICAgICAjIFVzZWQgZm9yIGZpcmluZyBldmVudHMgYW5kIGFjY2Vzc2luZyB2YXJpYWJsZXMgd2hlcmUgZXhwYW5zaW9uIG5lZWRzIHRvIGJlIGFjY291bnRlZCBmb3IKKyAgICAgICAgIworICAgICAgICBzZWxmLmV4cGFuZGVkX2RhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kYXRhKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIoc2VsZi5leHBhbmRlZF9kYXRhKQorCisgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5kaXNhYmxlRGF0YVRyYWNraW5nKCkKKworICAgICAgICBzZWxmLmRhdGEucmVuYW1lVmFyKCJfX2RlcGVuZHMiLCAiX19iYXNlX2RlcGVuZHMiKQorICAgICAgICBzZWxmLmFkZF9maWxld2F0Y2goc2VsZi5kYXRhLmdldFZhcigiX19iYXNlX2RlcGVuZHMiLCBGYWxzZSksIHNlbGYuY29uZmlnd2F0Y2hlcikKKworCisgICAgZGVmIGVuYWJsZURhdGFUcmFja2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnRyYWNraW5nID0gVHJ1ZQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJkYXRhIik6CisgICAgICAgICAgICBzZWxmLmRhdGEuZW5hYmxlVHJhY2tpbmcoKQorCisgICAgZGVmIGRpc2FibGVEYXRhVHJhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi50cmFja2luZyA9IEZhbHNlCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImRhdGEiKToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5kaXNhYmxlVHJhY2tpbmcoKQorCisgICAgZGVmIG1vZGlmeUNvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgb3ApOgorICAgICAgICBpZiBvcCA9PSAiYXBwZW5kIjoKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kQ29uZmlndXJhdGlvblZhcih2YXIsIHZhbCwgZGVmYXVsdF9maWxlKQorICAgICAgICBlbGlmIG9wID09ICJzZXQiOgorICAgICAgICAgICAgc2VsZi5zYXZlQ29uZmlndXJhdGlvblZhcih2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAiPSIpCisgICAgICAgIGVsaWYgb3AgPT0gImVhcmx5QXNzaWduIjoKKyAgICAgICAgICAgIHNlbGYuc2F2ZUNvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgIj89IikKKworCisgICAgZGVmIGFwcGVuZENvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSk6CisgICAgICAgICNhZGQgYXBwZW5kIHZhciBvcGVyYXRpb24gdG8gdGhlIGVuZCBvZiBkZWZhdWx0X2ZpbGUKKyAgICAgICAgZGVmYXVsdF9maWxlID0gYmIuY29va2VyZGF0YS5maW5kQ29uZmlnRmlsZShkZWZhdWx0X2ZpbGUsIHNlbGYuZGF0YSkKKworICAgICAgICB0b3RhbCA9ICIjYWRkZWQgYnkgaG9iIgorICAgICAgICB0b3RhbCArPSAiXG4lcyArPSBcIiVzXCJcbiIgJSAodmFyLCB2YWwpCisKKyAgICAgICAgd2l0aCBvcGVuKGRlZmF1bHRfZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh0b3RhbCkKKworICAgICAgICAjYWRkIHRvIGhpc3RvcnkKKyAgICAgICAgbG9naW5mbyA9IHsib3AiOiJhcHBlbmQiLCAiZmlsZSI6ZGVmYXVsdF9maWxlLCAibGluZSI6dG90YWwuY291bnQoIlxuIil9CisgICAgICAgIHNlbGYuZGF0YS5hcHBlbmRWYXIodmFyLCB2YWwsICoqbG9naW5mbykKKworICAgIGRlZiBzYXZlQ29uZmlndXJhdGlvblZhcihzZWxmLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCBvcCk6CisKKyAgICAgICAgcmVwbGFjZWQgPSBGYWxzZQorICAgICAgICAjZG8gbm90IHNhdmUgaWYgbm90aGluZyBjaGFuZ2VkCisgICAgICAgIGlmIHN0cih2YWwpID09IHNlbGYuZGF0YS5nZXRWYXIodmFyLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjb25mX2ZpbGVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2ZpbGVzKHZhcikKKworICAgICAgICAjZm9ybWF0IHRoZSB2YWx1ZSB3aGVuIGl0IGlzIGEgbGlzdAorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgbGlzdCk6CisgICAgICAgICAgICBsaXN0dmFsID0gIiIKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWw6CisgICAgICAgICAgICAgICAgbGlzdHZhbCArPSAiJXMgICAiICUgdmFsdWUKKyAgICAgICAgICAgIHZhbCA9IGxpc3R2YWwKKworICAgICAgICB0b3BkaXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJUT1BESVIiLCBGYWxzZSkKKworICAgICAgICAjY29tbWVudCBvciByZXBsYWNlIG9wZXJhdGlvbnMgbWFkZSBvbiB2YXIKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBjb25mX2ZpbGVzOgorICAgICAgICAgICAgaWYgdG9wZGlyIGluIGNvbmZfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgbGluZXMgPSBzZWxmLmRhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfbGluZXModmFyLCBjb25mX2ZpbGUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHRvdGFsID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29udGVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGk9PWludChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfaW5kZXggPSBsZW4odG90YWwpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdG90YWwucmZpbmQodmFyLCAwLCBlbmRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5fbGluZSA9IHRvdGFsLmNvdW50KCJcbiIsMCxpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgZW5kX2xpbmUgPSBpbnQobGluZSkKKworICAgICAgICAgICAgICAgICAgICAjY2hlY2sgaWYgdGhlIHZhcmlhYmxlIHdhcyBzYXZlZCBiZWZvcmUgaW4gdGhlIHNhbWUgd2F5CisgICAgICAgICAgICAgICAgICAgICNpZiB0cnVlIGl0IHJlcGxhY2UgdGhlIHBsYWNlIHdoZXJlIHRoZSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQKKyAgICAgICAgICAgICAgICAgICAgI2Vsc2UgaXQgY29tbWVudHMgaXQKKyAgICAgICAgICAgICAgICAgICAgaWYgY29udGVudHNbYmVnaW5fbGluZS0xXT09ICIjYWRkZWQgYnkgaG9iXG4iOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbYmVnaW5fbGluZV0gPSAiJXMgJXMgXCIlc1wiXG4iICUgKHZhciwgb3AsIHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGlpIGluIHJhbmdlKGJlZ2luX2xpbmUsIGVuZF9saW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpaV0gPSAiIyIgKyBjb250ZW50c1tpaV0KKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZWxpbmVzKGNvbnRlbnRzKQorCisgICAgICAgIGlmIHJlcGxhY2VkID09IEZhbHNlOgorICAgICAgICAgICAgI3JlbW92ZSB2YXIgZnJvbSBoaXN0b3J5CisgICAgICAgICAgICBzZWxmLmRhdGEudmFyaGlzdG9yeS5kZWxfdmFyX2hpc3RvcnkodmFyKQorCisgICAgICAgICAgICAjYWRkIHZhciB0byB0aGUgZW5kIG9mIGRlZmF1bHRfZmlsZQorICAgICAgICAgICAgZGVmYXVsdF9maWxlID0gYmIuY29va2VyZGF0YS5maW5kQ29uZmlnRmlsZShkZWZhdWx0X2ZpbGUsIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgI2FkZCB0aGUgdmFyaWFibGUgb24gYSBzaW5nbGUgbGluZSwgdG8gYmUgZWFzeSB0byByZXBsYWNlIHRoZSBzZWNvbmQgdGltZQorICAgICAgICAgICAgdG90YWwgPSAiXG4jYWRkZWQgYnkgaG9iIgorICAgICAgICAgICAgdG90YWwgKz0gIlxuJXMgJXMgXCIlc1wiXG4iICUgKHZhciwgb3AsIHZhbCkKKworICAgICAgICAgICAgd2l0aCBvcGVuKGRlZmF1bHRfZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodG90YWwpCisKKyAgICAgICAgICAgICNhZGQgdG8gaGlzdG9yeQorICAgICAgICAgICAgbG9naW5mbyA9IHsib3AiOiJzZXQiLCAiZmlsZSI6ZGVmYXVsdF9maWxlLCAibGluZSI6dG90YWwuY291bnQoIlxuIil9CisgICAgICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKHZhciwgdmFsLCAqKmxvZ2luZm8pCisKKyAgICBkZWYgcmVtb3ZlQ29uZmlndXJhdGlvblZhcihzZWxmLCB2YXIpOgorICAgICAgICBjb25mX2ZpbGVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2ZpbGVzKHZhcikKKyAgICAgICAgdG9wZGlyID0gc2VsZi5kYXRhLmdldFZhcigiVE9QRElSIiwgRmFsc2UpCisKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBjb25mX2ZpbGVzOgorICAgICAgICAgICAgaWYgdG9wZGlyIGluIGNvbmZfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgbGluZXMgPSBzZWxmLmRhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfbGluZXModmFyLCBjb25mX2ZpbGUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHRvdGFsID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29udGVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGk9PWludChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfaW5kZXggPSBsZW4odG90YWwpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdG90YWwucmZpbmQodmFyLCAwLCBlbmRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5fbGluZSA9IHRvdGFsLmNvdW50KCJcbiIsMCxpbmRleCkKKworICAgICAgICAgICAgICAgICAgICAjY2hlY2sgaWYgdGhlIHZhcmlhYmxlIHdhcyBzYXZlZCBiZWZvcmUgaW4gdGhlIHNhbWUgd2F5CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV09PSAiI2FkZGVkIGJ5IGhvYlxuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV0gPSBjb250ZW50c1tiZWdpbl9saW5lXSA9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmVdID0gIlxuIgorICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHZhciBmcm9tIGhpc3RvcnkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhLnZhcmhpc3RvcnkuZGVsX3Zhcl9oaXN0b3J5KHZhciwgY29uZl9maWxlLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5kZWxWYXIodmFyKQorCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlbGluZXMoY29udGVudHMpCisKKyAgICBkZWYgY3JlYXRlQ29uZmlnRmlsZShzZWxmLCBuYW1lKToKKyAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbmZwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICJjb25mIiwgbmFtZSkKKyAgICAgICAgb3Blbihjb25mcGF0aCwgJ3cnKS5jbG9zZSgpCisKKyAgICBkZWYgcGFyc2VDb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICAjIFNldCBsb2cgZmlsZSB2ZXJib3NpdHkKKyAgICAgICAgdmVyYm9zZWxvZ3MgPSBiYi51dGlscy50b19ib29sZWFuKHNlbGYuZGF0YS5nZXRWYXIoIkJCX1ZFUkJPU0VfTE9HUyIsIEZhbHNlKSkKKyAgICAgICAgaWYgdmVyYm9zZWxvZ3M6CisgICAgICAgICAgICBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MgPSBUcnVlCisKKyAgICAgICAgIyBDaGFuZ2UgbmljZSBsZXZlbCBpZiB3ZSdyZSBhc2tlZCB0bworICAgICAgICBuaWNlID0gc2VsZi5kYXRhLmdldFZhcigiQkJfTklDRV9MRVZFTCIsIFRydWUpCisgICAgICAgIGlmIG5pY2U6CisgICAgICAgICAgICBjdXJuaWNlID0gb3MubmljZSgwKQorICAgICAgICAgICAgbmljZSA9IGludChuaWNlKSAtIGN1cm5pY2UKKyAgICAgICAgICAgIGJ1aWxkbG9nLnZlcmJvc2UoIlJlbmljZSB0byAlcyAiICUgb3MubmljZShuaWNlKSkKKworICAgICAgICBpZiBzZWxmLnJlY2lwZWNhY2hlOgorICAgICAgICAgICAgZGVsIHNlbGYucmVjaXBlY2FjaGUKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZSA9IGJiLmNhY2hlLkNhY2hlRGF0YShzZWxmLmNhY2hlc19hcnJheSkKKworICAgICAgICBzZWxmLmhhbmRsZUNvbGxlY3Rpb25zKCBzZWxmLmRhdGEuZ2V0VmFyKCJCQkZJTEVfQ09MTEVDVElPTlMiLCBUcnVlKSApCisKKyAgICBkZWYgdXBkYXRlQ29uZmlnT3B0cyhzZWxmLCBvcHRpb25zLCBlbnZpcm9ubWVudCk6CisgICAgICAgIGNsZWFuID0gVHJ1ZQorICAgICAgICBmb3IgbyBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgbyBpbiBbJ3ByZWZpbGUnLCAncG9zdGZpbGUnXToKKyAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYuY29uZmlndXJhdGlvbiwgbywgb3B0aW9uc1tvXSkKKyAgICAgICAgZm9yIGsgaW4gYmIudXRpbHMuYXBwcm92ZWRfdmFyaWFibGVzKCk6CisgICAgICAgICAgICBpZiBrIGluIGVudmlyb25tZW50IGFuZCBrIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZW52OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgdG8gJXMiICUgKGssIGVudmlyb25tZW50W2tdKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZW52W2tdID0gZW52aXJvbm1lbnRba10KKyAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBpZiBrIGluIHNlbGYuY29uZmlndXJhdGlvbi5lbnYgYW5kIGsgbm90IGluIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgKGRlbGV0ZWQpIiAlIChrKSkKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXQorICAgICAgICAgICAgICAgIGNsZWFuID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYuY29uZmlndXJhdGlvbi5lbnYgYW5kIGsgbm90IGluIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZW52aXJvbm1lbnRba10gIT0gc2VsZi5jb25maWd1cmF0aW9uLmVudltrXToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVwZGF0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlICVzIHRvICVzIiAlIChrLCBlbnZpcm9ubWVudFtrXSkpCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXSA9IGVudmlyb25tZW50W2tdCisgICAgICAgICAgICAgICAgY2xlYW4gPSBGYWxzZQorICAgICAgICBpZiBub3QgY2xlYW46CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJhc2UgZW52aXJvbm1lbnQgY2hhbmdlLCB0cmlnZ2VyaW5nIHJlcGFyc2UiKQorICAgICAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gRmFsc2UgICAgICAgIAorICAgICAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcnVuQ29tbWFuZHMoc2VsZiwgc2VydmVyLCBkYXRhLCBhYm9ydCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gYW55IHF1ZXVlZCBhc3luY2hyb25vdXMgY29tbWFuZAorICAgICAgICBUaGlzIGlzIGRvbmUgYnkgdGhlIGlkbGUgaGFuZGxlciBzbyBpdCBydW5zIGluIHRydWUgY29udGV4dCByYXRoZXIgdGhhbgorICAgICAgICB0aWVkIHRvIGFueSBVSS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZC5ydW5Bc3luY0NvbW1hbmQoKQorCisgICAgZGVmIHNob3dWZXJzaW9ucyhzZWxmKToKKworICAgICAgICBwa2dfcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCBwa2dfcG4pCisKKyAgICAgICAgbG9nZ2VyLnBsYWluKCIlLTM1cyAlMjVzICUyNXMiLCAiUmVjaXBlIE5hbWUiLCAiTGF0ZXN0IFZlcnNpb24iLCAiUHJlZmVycmVkIFZlcnNpb24iKQorICAgICAgICBsb2dnZXIucGxhaW4oIiUtMzVzICUyNXMgJTI1c1xuIiwgIj09PT09PT09PT09IiwgIj09PT09PT09PT09PT09IiwgIj09PT09PT09PT09PT09PT09IikKKworICAgICAgICBmb3IgcCBpbiBzb3J0ZWQocGtnX3BuKToKKyAgICAgICAgICAgIHByZWYgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcF0KKyAgICAgICAgICAgIGxhdGVzdCA9IGxhdGVzdF92ZXJzaW9uc1twXQorCisgICAgICAgICAgICBwcmVmc3RyID0gcHJlZlswXVswXSArICI6IiArIHByZWZbMF1bMV0gKyAnLScgKyBwcmVmWzBdWzJdCisgICAgICAgICAgICBsYXRlc3RzdHIgPSBsYXRlc3RbMF1bMF0gKyAiOiIgKyBsYXRlc3RbMF1bMV0gKyAiLSIgKyBsYXRlc3RbMF1bMl0KKworICAgICAgICAgICAgaWYgcHJlZiA9PSBsYXRlc3Q6CisgICAgICAgICAgICAgICAgcHJlZnN0ciA9ICIiCisKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJS0zNXMgJTI1cyAlMjVzIiwgcCwgbGF0ZXN0c3RyLCBwcmVmc3RyKQorCisgICAgZGVmIHNob3dFbnZpcm9ubWVudChzZWxmLCBidWlsZGZpbGU9Tm9uZSwgcGtnc190b19idWlsZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFNob3cgdGhlIG91dGVyIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQKKyAgICAgICAgIiIiCisgICAgICAgIGZuID0gTm9uZQorICAgICAgICBlbnZkYXRhID0gTm9uZQorICAgICAgICBpZiBub3QgcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBbXQorCisgICAgICAgIGlmIGJ1aWxkZmlsZToKKyAgICAgICAgICAgICMgUGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gaGVyZS4gV2UgbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5IGhlcmUgc2luY2UKKyAgICAgICAgICAgICMgdGhpcyBzaG93RW52aXJvbm1lbnQoKSBjb2RlIHBhdGggZG9lc24ndCB1c2UgdGhlIGNhY2hlCisgICAgICAgICAgICBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbigpCisKKyAgICAgICAgICAgIGZuLCBjbHMgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGJ1aWxkZmlsZSkKKyAgICAgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCisgICAgICAgICAgICBmbiA9IGJiLmNhY2hlLkNhY2hlLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgIGVsaWYgbGVuKHBrZ3NfdG9fYnVpbGQpID09IDE6CisgICAgICAgICAgICBpZ25vcmUgPSBzZWxmLmV4cGFuZGVkX2RhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgaWYgcGtnc190b19idWlsZFswXSBpbiBzZXQoaWdub3JlLnNwbGl0KCkpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBpcyBpbiBBU1NVTUVfUFJPVklERUQiICUgcGtnc190b19idWlsZFswXSkKKworICAgICAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgTm9uZSwgc2VsZi5jb25maWd1cmF0aW9uLmFib3J0LCBhbGxvd2luY29tcGxldGU9VHJ1ZSkKKworICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrZGF0YS5nZXRidWlsZF9pZChwa2dzX3RvX2J1aWxkWzBdKQorICAgICAgICAgICAgZm5pZCA9IHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICBmbiA9IHRhc2tkYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnZkYXRhID0gc2VsZi5kYXRhCisKKyAgICAgICAgaWYgZm46CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZW52ZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgc2VsZi5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXhjZXB0aW9uKCJVbmFibGUgdG8gcmVhZCAlcyIsIGZuKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBEaXNwbGF5IGhpc3RvcnkKKyAgICAgICAgd2l0aCBjbG9zaW5nKFN0cmluZ0lPKCkpIGFzIGVudjoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5pbmNoaXN0b3J5LmVtaXQoZW52KQorICAgICAgICAgICAgbG9nZ2VyLnBsYWluKGVudi5nZXR2YWx1ZSgpKQorCisgICAgICAgICMgZW1pdCB2YXJpYWJsZXMgYW5kIHNoZWxsIGZ1bmN0aW9ucworICAgICAgICBkYXRhLnVwZGF0ZV9kYXRhKGVudmRhdGEpCisgICAgICAgIHdpdGggY2xvc2luZyhTdHJpbmdJTygpKSBhcyBlbnY6CisgICAgICAgICAgICBkYXRhLmVtaXRfZW52KGVudiwgZW52ZGF0YSwgVHJ1ZSkKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbihlbnYuZ2V0dmFsdWUoKSkKKworICAgICAgICAjIGVtaXQgdGhlIG1ldGFkYXRhIHdoaWNoIGlzbnQgdmFsaWQgc2hlbGwKKyAgICAgICAgZGF0YS5leHBhbmRLZXlzKGVudmRhdGEpCisgICAgICAgIGZvciBlIGluIGVudmRhdGEua2V5cygpOgorICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKCBlLCAncHl0aG9uJywgZW52ZGF0YSApOgorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiXG5weXRob24gJXMgKCkge1xuJXN9XG4iLCBlLCBlbnZkYXRhLmdldFZhcihlLCBUcnVlKSkKKworCisgICAgZGVmIGJ1aWxkVGFza0RhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzaywgYWJvcnQsIGFsbG93aW5jb21wbGV0ZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgcnVucXVldWUgYW5kIHRhc2tkYXRhIG9iamVjdCBmb3IgaXRlcmF0aW9uIG92ZXIgcGtnc190b19idWlsZAorICAgICAgICAiIiIKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCgpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgIyBBIHRhc2sgb2YgTm9uZSBtZWFucyB1c2UgdGhlIGRlZmF1bHQgdGFzaworICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgICAgICB0YXNrID0gc2VsZi5jb25maWd1cmF0aW9uLmNtZAorCisgICAgICAgIGZ1bGx0YXJnZXRsaXN0ID0gc2VsZi5jaGVja1BhY2thZ2VzKHBrZ3NfdG9fYnVpbGQpCisKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisgICAgICAgIHRhc2tkYXRhID0gYmIudGFza2RhdGEuVGFza0RhdGEoYWJvcnQsIHNraXBsaXN0PXNlbGYuc2tpcGxpc3QsIGFsbG93aW5jb21wbGV0ZT1hbGxvd2luY29tcGxldGUpCisKKyAgICAgICAgY3VycmVudCA9IDAKKyAgICAgICAgcnVubGlzdCA9IFtdCisgICAgICAgIGZvciBrIGluIGZ1bGx0YXJnZXRsaXN0OgorICAgICAgICAgICAga3Rhc2sgPSB0YXNrCisgICAgICAgICAgICBpZiAiOmRvXyIgaW4gazoKKyAgICAgICAgICAgICAgICBrMiA9IGsuc3BsaXQoIjpkb18iKQorICAgICAgICAgICAgICAgIGsgPSBrMlswXQorICAgICAgICAgICAgICAgIGt0YXNrID0gazJbMV0KKyAgICAgICAgICAgIHRhc2tkYXRhLmFkZF9wcm92aWRlcihsb2NhbGRhdGEsIHNlbGYucmVjaXBlY2FjaGUsIGspCisgICAgICAgICAgICBjdXJyZW50ICs9IDEKKyAgICAgICAgICAgIGlmIG5vdCBrdGFzay5zdGFydHN3aXRoKCJkb18iKToKKyAgICAgICAgICAgICAgICBrdGFzayA9ICJkb18lcyIgJSBrdGFzaworICAgICAgICAgICAgcnVubGlzdC5hcHBlbmQoW2ssIGt0YXNrXSkKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzKGN1cnJlbnQsIGxlbihmdWxsdGFyZ2V0bGlzdCkpLCBzZWxmLmRhdGEpCisgICAgICAgIHRhc2tkYXRhLmFkZF91bnJlc29sdmVkKGxvY2FsZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkKGxlbihmdWxsdGFyZ2V0bGlzdCkpLCBzZWxmLmRhdGEpCisgICAgICAgIHJldHVybiB0YXNrZGF0YSwgcnVubGlzdCwgZnVsbHRhcmdldGxpc3QKKworICAgIGRlZiBwcmVwYXJlVHJlZURhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgcnVucXVldWUgYW5kIHRhc2tkYXRhIG9iamVjdCBmb3IgaXRlcmF0aW9uIG92ZXIgcGtnc190b19idWlsZAorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIHNldCBhYm9ydCB0byBGYWxzZSBoZXJlIHRvIHByZXZlbnQgdW5idWlsZGFibGUgdGFyZ2V0cyByYWlzaW5nCisgICAgICAgICMgYW4gZXhjZXB0aW9uIHdoZW4gd2UncmUganVzdCBnZW5lcmF0aW5nIGRhdGEKKyAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgdGFzaywgRmFsc2UsIGFsbG93aW5jb21wbGV0ZT1UcnVlKQorCisgICAgICAgIHJldHVybiBydW5saXN0LCB0YXNrZGF0YQorCisgICAgIyMjIyMjIyMgV0FSTklORyA6IHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgY2FjaGVfZXh0cmEgdG8gYmUgZW5hYmxlZCAjIyMjIyMjIworCisgICAgZGVmIGdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHNlbGYsIHBrZ3NfdG9fYnVpbGQsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBwa2dzX3RvX2J1aWxkIGluY2x1ZGluZyByZXZlcnNlIGRlcGVuZGVuY3kKKyAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBydW5saXN0LCB0YXNrZGF0YSA9IHNlbGYucHJlcGFyZVRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKyAgICAgICAgcnEucnFkYXRhLnByZXBhcmUoKQorICAgICAgICByZXR1cm4gc2VsZi5idWlsZERlcGVuZFRyZWUocnEsIHRhc2tkYXRhKQorCisKKyAgICBkZWYgYnVpbGREZXBlbmRUcmVlKHNlbGYsIHJxLCB0YXNrZGF0YSk6CisgICAgICAgIHNlZW5fZm5pZHMgPSBbXQorICAgICAgICBkZXBlbmRfdHJlZSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicGFja2FnZXMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wa2ciXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJsYXllci1wcmlvcml0aWVzIl0gPSBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcworCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4ocnEucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgdGFza25hbWUgPSBycS5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICBmbmlkID0gcnEucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXQorICAgICAgICAgICAgZm4gPSB0YXNrZGF0YS5mbl9pbmRleFtmbmlkXQorICAgICAgICAgICAgcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgIHZlcnNpb24gID0gIiVzOiVzLSVzIiAlIHNlbGYucmVjaXBlY2FjaGUucGtnX3BlcHZwcltmbl0KKyAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBkZXBlbmRfdHJlZVsicG4iXToKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl0gPSB7fQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IGZuCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dWyJ2ZXJzaW9uIl0gPSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dWyJpbmhlcml0cyJdID0gc2VsZi5yZWNpcGVjYWNoZS5pbmhlcml0cy5nZXQoZm4sIE5vbmUpCisKKyAgICAgICAgICAgICAgICAjIGlmIHdlIGhhdmUgZXh0cmEgY2FjaGVzLCBsaXN0IGFsbCBhdHRyaWJ1dGVzIHRoZXkgYnJpbmcgaW4KKyAgICAgICAgICAgICAgICBleHRyYV9pbmZvID0gW10KKyAgICAgICAgICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIGJiLmNhY2hlLlJlY2lwZUluZm9Db21tb24pIGFuZCBoYXNhdHRyKGNhY2hlX2NsYXNzLCAnY2FjaGVmaWVsZHMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZmllbGRzID0gZ2V0YXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJywgW10pCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9pbmZvID0gZXh0cmFfaW5mbyArIGNhY2hlZmllbGRzCisKKyAgICAgICAgICAgICAgICAjIGZvciBhbGwgYXR0cmlidXRlcyBzdG9yZWQsIGFkZCB0aGVtIHRvIHRoZSBkZXBlbmRlbmN5IHRyZWUKKyAgICAgICAgICAgICAgICBmb3IgZWkgaW4gZXh0cmFfaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dW2VpXSA9IHZhcnMoc2VsZi5yZWNpcGVjYWNoZSlbZWldW2ZuXQorCisKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcnEucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICBkZXBmbiA9IHRhc2tkYXRhLmZuX2luZGV4W3JxLnJxZGF0YS5ydW5xX2ZuaWRbZGVwXV0KKyAgICAgICAgICAgICAgICBkZXBwbiA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2RlcGZuXQorICAgICAgICAgICAgICAgIGRvdG5hbWUgPSAiJXMuJXMiICUgKHBuLCBycS5ycWRhdGEucnVucV90YXNrW3Rhc2tdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkb3RuYW1lIGluIGRlcGVuZF90cmVlWyJ0ZGVwZW5kcyJdOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXVtkb3RuYW1lXSA9IFtdCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl1bZG90bmFtZV0uYXBwZW5kKCIlcy4lcyIgJSAoZGVwcG4sIHJxLnJxZGF0YS5ydW5xX3Rhc2tbZGVwXSkpCisgICAgICAgICAgICBpZiBmbmlkIG5vdCBpbiBzZWVuX2ZuaWRzOgorICAgICAgICAgICAgICAgIHNlZW5fZm5pZHMuYXBwZW5kKGZuaWQpCisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBbXQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGEuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdW3BuXS5hcHBlbmQodGFza2RhdGEuYnVpbGRfbmFtZXNfaW5kZXhbZGVwXSkKKworICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdW3BuXSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHJkZXAgaW4gdGFza2RhdGEucmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dLmFwcGVuZCh0YXNrZGF0YS5ydW5fbmFtZXNfaW5kZXhbcmRlcF0pCisKKyAgICAgICAgICAgICAgICByZGVwZW5kcyA9IHNlbGYucmVjaXBlY2FjaGUucnVuZGVwc1tmbl0KKyAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBrZyJdW3BhY2thZ2VdID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHNbcGFja2FnZV06CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl1bcGFja2FnZV0uYXBwZW5kKHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwYWNrYWdlKQorCisgICAgICAgICAgICAgICAgcnJlY3MgPSBzZWxmLnJlY2lwZWNhY2hlLnJ1bnJlY3NbZm5dCisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcnJlY3M6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXVtwYWNrYWdlXSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJyZWNzW3BhY2thZ2VdOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJyZWNzLXBrZyJdW3BhY2thZ2VdLmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwYWNrYWdlKQorCisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2Ugbm90IGluIGRlcGVuZF90cmVlWyJwYWNrYWdlcyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV0gPSB7fQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bInBuIl0gPSBwbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bImZpbGVuYW1lIl0gPSBmbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bInZlcnNpb24iXSA9IHZlcnNpb24KKworICAgICAgICByZXR1cm4gZGVwZW5kX3RyZWUKKworICAgICMjIyMjIyMjIFdBUk5JTkcgOiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGNhY2hlX2V4dHJhIHRvIGJlIGVuYWJsZWQgIyMjIyMjIyMKKyAgICBkZWYgZ2VuZXJhdGVQa2dEZXBUcmVlRGF0YShzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIGRlcGVuZGVuY3kgdHJlZSBvZiBwa2dzX3RvX2J1aWxkLCByZXR1cm5pbmcgdGhlIGRhdGEuCisgICAgICAgICIiIgorICAgICAgICBfLCB0YXNrZGF0YSA9IHNlbGYucHJlcGFyZVRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIHRhc2tzX2ZuaWQgPSBbXQorICAgICAgICBpZiBsZW4odGFza2RhdGEudGFza3NfbmFtZSkgIT0gMDoKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza2RhdGEudGFza3NfbmFtZSkpOgorICAgICAgICAgICAgICAgIHRhc2tzX2ZuaWQuYXBwZW5kKHRhc2tkYXRhLnRhc2tzX2ZuaWRbdGFza10pCisKKyAgICAgICAgc2Vlbl9mbmlkcyA9IFtdCisgICAgICAgIGRlcGVuZF90cmVlID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicnJlY3MtcGtnIl0gPSB7fQorCisgICAgICAgICMgaWYgd2UgaGF2ZSBleHRyYSBjYWNoZXMsIGxpc3QgYWxsIGF0dHJpYnV0ZXMgdGhleSBicmluZyBpbgorICAgICAgICBleHRyYV9pbmZvID0gW10KKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgYmIuY2FjaGUuUmVjaXBlSW5mb0NvbW1vbikgYW5kIGhhc2F0dHIoY2FjaGVfY2xhc3MsICdjYWNoZWZpZWxkcycpOgorICAgICAgICAgICAgICAgIGNhY2hlZmllbGRzID0gZ2V0YXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJywgW10pCisgICAgICAgICAgICAgICAgZXh0cmFfaW5mbyA9IGV4dHJhX2luZm8gKyBjYWNoZWZpZWxkcworCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza3NfZm5pZCkpOgorICAgICAgICAgICAgZm5pZCA9IHRhc2tzX2ZuaWRbdGFza10KKyAgICAgICAgICAgIGZuID0gdGFza2RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5dCisKKyAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBkZXBlbmRfdHJlZVsicG4iXToKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl0gPSB7fQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IGZuCisgICAgICAgICAgICAgICAgdmVyc2lvbiAgPSAiJXM6JXMtJXMiICUgc2VsZi5yZWNpcGVjYWNoZS5wa2dfcGVwdnByW2ZuXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsidmVyc2lvbiJdID0gdmVyc2lvbgorICAgICAgICAgICAgICAgIHJkZXBlbmRzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5kZXBzW2ZuXQorICAgICAgICAgICAgICAgIHJyZWNzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5yZWNzW2ZuXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiaW5oZXJpdHMiXSA9IHNlbGYucmVjaXBlY2FjaGUuaW5oZXJpdHMuZ2V0KGZuLCBOb25lKQorCisgICAgICAgICAgICAgICAgIyBmb3IgYWxsIGV4dHJhIGF0dHJpYnV0ZXMgc3RvcmVkLCBhZGQgdGhlbSB0byB0aGUgZGVwZW5kZW5jeSB0cmVlCisgICAgICAgICAgICAgICAgZm9yIGVpIGluIGV4dHJhX2luZm86CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVtlaV0gPSB2YXJzKHNlbGYucmVjaXBlY2FjaGUpW2VpXVtmbl0KKworICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gc2Vlbl9mbmlkczoKKyAgICAgICAgICAgICAgICBzZWVuX2ZuaWRzLmFwcGVuZChmbmlkKQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGEuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGFza2RhdGEuYnVpbGRfbmFtZXNfaW5kZXhbZGVwXQorICAgICAgICAgICAgICAgICAgICBwbl9wcm92aWRlciA9ICIiCisgICAgICAgICAgICAgICAgICAgIHRhcmdldGlkID0gdGFza2RhdGEuZ2V0YnVpbGRfaWQoaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza2RhdGEuYnVpbGRfdGFyZ2V0cyBhbmQgdGFza2RhdGEuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBmbl9wcm92aWRlciA9IHRhc2tkYXRhLmZuX2luZGV4W2lkXQorICAgICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltmbl9wcm92aWRlcl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Byb3ZpZGVyID0gaXRlbQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdW3BuXS5hcHBlbmQocG5fcHJvdmlkZXIpCisKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcG4iXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciByZGVwIGluIHRhc2tkYXRhLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0YXNrZGF0YS5ydW5fbmFtZXNfaW5kZXhbcmRlcF0KKyAgICAgICAgICAgICAgICAgICAgcG5fcnByb3ZpZGVyID0gIiIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrZGF0YS5nZXRydW5faWQoaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza2RhdGEucnVuX3RhcmdldHMgYW5kIHRhc2tkYXRhLnJ1bl90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gdGFza2RhdGEucnVuX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBmbl9ycHJvdmlkZXIgPSB0YXNrZGF0YS5mbl9pbmRleFtpZF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2ZuX3Jwcm92aWRlcl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dLmFwcGVuZChwbl9ycHJvdmlkZXIpCisKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl0udXBkYXRlKHJkZXBlbmRzKQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXS51cGRhdGUocnJlY3MpCisKKyAgICAgICAgcmV0dXJuIGRlcGVuZF90cmVlCisKKyAgICBkZWYgZ2VuZXJhdGVEZXBUcmVlRXZlbnQoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSB0YXNrIGRlcGVuZGVuY3kgZ3JhcGggb2YgcGtnc190b19idWlsZC4KKyAgICAgICAgR2VuZXJhdGUgYW4gZXZlbnQgd2l0aCB0aGUgcmVzdWx0CisgICAgICAgICIiIgorICAgICAgICBkZXBncmFwaCA9IHNlbGYuZ2VuZXJhdGVUYXNrRGVwVHJlZURhdGEocGtnc190b19idWlsZCwgdGFzaykKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKGRlcGdyYXBoKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGdlbmVyYXRlRG90R3JhcGhGaWxlcyhzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIHRhc2sgZGVwZW5kZW5jeSBncmFwaCBvZiBwa2dzX3RvX2J1aWxkLgorICAgICAgICBTYXZlIHRoZSByZXN1bHQgdG8gYSBzZXQgb2YgLmRvdCBmaWxlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVwZ3JhcGggPSBzZWxmLmdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisKKyAgICAgICAgIyBQcmludHMgYSBmbGF0dGVuZWQgZm9ybSBvZiBwYWNrYWdlLWRlcGVuZHMgYmVsb3cgd2hlcmUgc3VicGFja2FnZXMgb2YgYSBwYWNrYWdlIGFyZSBtZXJnZWQgaW50byB0aGUgbWFpbiBwbgorICAgICAgICBkZXBlbmRzX2ZpbGUgPSBmaWxlKCdwbi1kZXBlbmRzLmRvdCcsICd3JyApCisgICAgICAgIGJ1aWxkbGlzdF9maWxlID0gZmlsZSgncG4tYnVpbGRsaXN0JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwbiBpbiBkZXBncmFwaFsicG4iXToKKyAgICAgICAgICAgIGZuID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJmaWxlbmFtZSJdCisgICAgICAgICAgICB2ZXJzaW9uID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIHByaW50KCciJXMiIFtsYWJlbD0iJXMgJXNcXG4lcyJdJyAlIChwbiwgcG4sIHZlcnNpb24sIGZuKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgICAgICBwcmludCgiJXMiICUgcG4sIGZpbGU9YnVpbGRsaXN0X2ZpbGUpCisgICAgICAgIGJ1aWxkbGlzdF9maWxlLmNsb3NlKCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlBOIGJ1aWxkIGxpc3Qgc2F2ZWQgdG8gJ3BuLWJ1aWxkbGlzdCciKQorICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbImRlcGVuZHMiXToKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAocG4sIGRlcGVuZCksIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl06CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicmRlcGVuZHMtcG4iXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIiBbc3R5bGU9ZGFzaGVkXScgJSAocG4sIHJkZXBlbmQpLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgcHJpbnQoIn0iLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlBOIGRlcGVuZGVuY2llcyBzYXZlZCB0byAncG4tZGVwZW5kcy5kb3QnIikKKworICAgICAgICBkZXBlbmRzX2ZpbGUgPSBmaWxlKCdwYWNrYWdlLWRlcGVuZHMuZG90JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJwYWNrYWdlcyJdOgorICAgICAgICAgICAgcG4gPSBkZXBncmFwaFsicGFja2FnZXMiXVtwYWNrYWdlXVsicG4iXQorICAgICAgICAgICAgZm4gPSBkZXBncmFwaFsicGFja2FnZXMiXVtwYWNrYWdlXVsiZmlsZW5hbWUiXQorICAgICAgICAgICAgdmVyc2lvbiA9IGRlcGdyYXBoWyJwYWNrYWdlcyJdW3BhY2thZ2VdWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIGlmIHBhY2thZ2UgPT0gcG46CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgW2xhYmVsPSIlcyAlc1xcbiVzIl0nICUgKHBuLCBwbiwgdmVyc2lvbiwgZm4pLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgW2xhYmVsPSIlcyglcykgJXNcXG4lcyJdJyAlIChwYWNrYWdlLCBwYWNrYWdlLCBwbiwgdmVyc2lvbiwgZm4pLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAocGFja2FnZSwgZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wa2ciXToKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wa2ciXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiIFtzdHlsZT1kYXNoZWRdJyAlIChwYWNrYWdlLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJycmVjcy1wa2ciXToKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIGRlcGdyYXBoWyJycmVjcy1wa2ciXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiIFtzdHlsZT1kYXNoZWRdJyAlIChwYWNrYWdlLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIHByaW50KCJ9IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGxvZ2dlci5pbmZvKCJQYWNrYWdlIGRlcGVuZGVuY2llcyBzYXZlZCB0byAncGFja2FnZS1kZXBlbmRzLmRvdCciKQorCisgICAgICAgIHRkZXBlbmRzX2ZpbGUgPSBmaWxlKCd0YXNrLWRlcGVuZHMuZG90JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgdGFzayBpbiBkZXBncmFwaFsidGRlcGVuZHMiXToKKyAgICAgICAgICAgIChwbiwgdGFza25hbWUpID0gdGFzay5yc3BsaXQoIi4iLCAxKQorICAgICAgICAgICAgZm4gPSBkZXBncmFwaFsicG4iXVtwbl1bImZpbGVuYW1lIl0KKyAgICAgICAgICAgIHZlcnNpb24gPSBkZXBncmFwaFsicG4iXVtwbl1bInZlcnNpb24iXQorICAgICAgICAgICAgcHJpbnQoJyIlcy4lcyIgW2xhYmVsPSIlcyAlc1xcbiVzXFxuJXMiXScgJSAocG4sIHRhc2tuYW1lLCBwbiwgdGFza25hbWUsIHZlcnNpb24sIGZuKSwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBncmFwaFsidGRlcGVuZHMiXVt0YXNrXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiJyAlICh0YXNrLCBkZXApLCBmaWxlPXRkZXBlbmRzX2ZpbGUpCisgICAgICAgIHByaW50KCJ9IiwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICBsb2dnZXIuaW5mbygiVGFzayBkZXBlbmRlbmNpZXMgc2F2ZWQgdG8gJ3Rhc2stZGVwZW5kcy5kb3QnIikKKworICAgIGRlZiBzaG93X2FwcGVuZHNfd2l0aF9ub19yZWNpcGVzKHNlbGYpOgorICAgICAgICAjIERldGVybWluZSB3aGljaCBiYmFwcGVuZHMgaGF2ZW4ndCBiZWVuIGFwcGxpZWQKKworICAgICAgICAjIEZpcnN0IGdldCBsaXN0IG9mIHJlY2lwZXMsIGluY2x1ZGluZyBza2lwcGVkCisgICAgICAgIHJlY2lwZWZucyA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuLmtleXMoKQorICAgICAgICByZWNpcGVmbnMuZXh0ZW5kKHNlbGYuc2tpcGxpc3Qua2V5cygpKQorCisgICAgICAgICMgV29yayBvdXQgbGlzdCBvZiBiYmFwcGVuZHMgdGhhdCBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICBhcHBsaWVkX2FwcGVuZHMgPSBbXQorICAgICAgICBmb3IgZm4gaW4gcmVjaXBlZm5zOgorICAgICAgICAgICAgYXBwbGllZF9hcHBlbmRzLmV4dGVuZChzZWxmLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbikpCisKKyAgICAgICAgYXBwZW5kc193aXRob3V0X3JlY2lwZXMgPSBbXQorICAgICAgICBmb3IgXywgYXBwZW5kZm4gaW4gc2VsZi5jb2xsZWN0aW9uLmJiYXBwZW5kczoKKyAgICAgICAgICAgIGlmIG5vdCBhcHBlbmRmbiBpbiBhcHBsaWVkX2FwcGVuZHM6CisgICAgICAgICAgICAgICAgYXBwZW5kc193aXRob3V0X3JlY2lwZXMuYXBwZW5kKGFwcGVuZGZuKQorCisgICAgICAgIGlmIGFwcGVuZHNfd2l0aG91dF9yZWNpcGVzOgorICAgICAgICAgICAgbXNnID0gJ05vIHJlY2lwZXMgYXZhaWxhYmxlIGZvcjpcbiAgJXMnICUgJ1xuICAnLmpvaW4oYXBwZW5kc193aXRob3V0X3JlY2lwZXMpCisgICAgICAgICAgICB3YXJuX29ubHkgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFkiLCBcCisgICAgICAgICAgICAgICAgIEZhbHNlKSBvciAibm8iCisgICAgICAgICAgICBpZiB3YXJuX29ubHkubG93ZXIoKSBpbiAoIjEiLCAieWVzIiwgInRydWUiKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwobXNnKQorCisgICAgZGVmIGhhbmRsZVByZWZQcm92aWRlcnMoc2VsZik6CisKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisKKyAgICAgICAgIyBIYW5kbGUgUFJFRkVSUkVEX1BST1ZJREVSUworICAgICAgICBmb3IgcCBpbiAobG9jYWxkYXRhLmdldFZhcignUFJFRkVSUkVEX1BST1ZJREVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChwcm92aWRlZSwgcHJvdmlkZXIpID0gcC5zcGxpdCgnOicpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuY3JpdGljYWwoIk1hbGZvcm1lZCBvcHRpb24gaW4gUFJFRkVSUkVEX1BST1ZJREVSUyB2YXJpYWJsZTogJXMiICUgcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcHJvdmlkZWUgaW4gc2VsZi5yZWNpcGVjYWNoZS5wcmVmZXJyZWQgYW5kIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSAhPSBwcm92aWRlcjoKKyAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiY29uZmxpY3RpbmcgcHJlZmVyZW5jZXMgZm9yICVzOiBib3RoICVzIGFuZCAlcyBzcGVjaWZpZWQiLCBwcm92aWRlZSwgcHJvdmlkZXIsIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSA9IHByb3ZpZGVyCisKKyAgICBkZWYgZmluZENvcmVCYXNlRmlsZXMoc2VsZiwgc3ViZGlyLCBjb25maWdmaWxlKToKKyAgICAgICAgY29yZWJhc2UgPSBzZWxmLmRhdGEuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpIG9yICIiCisgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY29yZWJhc2UgKyAnLycgKyBzdWJkaXIpOgorICAgICAgICAgICAgZm9yIGQgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBjb25maWdmaWxlcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBkLCBjb25maWdmaWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ2ZpbGVwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBkKSkKKworICAgICAgICBpZiBwYXRoczoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29yZUJhc2VGaWxlc0ZvdW5kKHBhdGhzKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlUGF0aChzZWxmLCBjb25maWdmaWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIGxvY2F0aW9uIG9uIGRpc2sgb2YgY29uZmlnZmlsZSBhbmQgaWYgaXQgZXhpc3RzIGFuZCB3YXMgcGFyc2VkIGJ5IEJpdEJha2UKKyAgICAgICAgZW1pdCB0aGUgQ29uZmlnRmlsZVBhdGhGb3VuZCBldmVudCB3aXRoIHRoZSBwYXRoIHRvIHRoZSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IGJiLmNvb2tlcmRhdGEuZmluZENvbmZpZ0ZpbGUoY29uZmlnZmlsZSwgc2VsZi5kYXRhKQorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgR2VuZXJhdGUgYSBsaXN0IG9mIHBhcnNlZCBjb25maWd1cmF0aW9uIGZpbGVzIGJ5IHNlYXJjaGluZyB0aGUgZmlsZXMKKyAgICAgICAgIyBsaXN0ZWQgaW4gdGhlIF9fZGVwZW5kcyBhbmQgX19iYXNlX2RlcGVuZHMgdmFyaWFibGVzIHdpdGggYSAuY29uZiBzdWZmaXguCisgICAgICAgIGNvbmZmaWxlcyA9IFtdCisgICAgICAgIGRlcF9maWxlcyA9IHNlbGYuZGF0YS5nZXRWYXIoJ19fYmFzZV9kZXBlbmRzJywgRmFsc2UpIG9yIFtdCisgICAgICAgIGRlcF9maWxlcyA9IGRlcF9maWxlcyArIChzZWxmLmRhdGEuZ2V0VmFyKCdfX2RlcGVuZHMnLCBGYWxzZSkgb3IgW10pCisKKyAgICAgICAgZm9yIGYgaW4gZGVwX2ZpbGVzOgorICAgICAgICAgICAgaWYgZlswXS5lbmRzd2l0aCgiLmNvbmYiKToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMuYXBwZW5kKGZbMF0pCisKKyAgICAgICAgXywgY29uZiwgY29uZmZpbGUgPSBwYXRoLnJwYXJ0aXRpb24oImNvbmYvIikKKyAgICAgICAgbWF0Y2ggPSBvcy5wYXRoLmpvaW4oY29uZiwgY29uZmZpbGUpCisgICAgICAgICMgVHJ5IGFuZCBmaW5kIG1hdGNoZXMgZm9yIGNvbmYvY29uZmZpbGVuYW1lLmNvbmYgYXMgd2UgZG9uJ3QgYWx3YXlzCisgICAgICAgICMgaGF2ZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLgorICAgICAgICBmb3IgY2ZnIGluIGNvbmZmaWxlczoKKyAgICAgICAgICAgIGlmIGNmZy5lbmRzd2l0aChtYXRjaCk6CisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kKHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihzZWxmLCBmaWxlcGF0dGVybiwgZGlyZWN0b3J5KToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaGVzIGZvciBmaWxlcyBtYXRjaGluZyB0aGUgcmVnZXggJ3BhdHRlcm4nIHdoaWNoIGFyZSBjaGlsZHJlbiBvZgorICAgICAgICAnZGlyZWN0b3J5JyBpbiBlYWNoIEJCUEFUSC4gaS5lLiB0byBmaW5kIGFsbCByb290ZnMgcGFja2FnZSBjbGFzc2VzIGF2YWlsYWJsZQorICAgICAgICB0byBCaXRCYWtlIG9uZSBjb3VsZCBjYWxsIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIoc2VsZiwgJ3Jvb3Rmc18nLCAnY2xhc3NlcycpCisgICAgICAgIG9yIHRvIGZpbmQgYWxsIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBvbmUgY291bGQgY2FsbDoKKyAgICAgICAgZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihzZWxmLCAnY29uZi9tYWNoaW5lcycsICdjb25mJykKKyAgICAgICAgIiIiCisKKyAgICAgICAgbWF0Y2hlcyA9IFtdCisgICAgICAgIHAgPSByZS5jb21waWxlKHJlLmVzY2FwZShmaWxlcGF0dGVybikpCisgICAgICAgIGJicGF0aHMgPSBzZWxmLmRhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgIGZvciBwYXRoIGluIGJicGF0aHM6CisgICAgICAgICAgICBkaXJwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIGRpcmVjdG9yeSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcnBhdGgpOgorICAgICAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcnBhdGgpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAuc2VhcmNoKGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGYpCisKKyAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kKGZpbGVwYXR0ZXJuLCBtYXRjaGVzKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlcyhzZWxmLCB2YXJuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgY29uZmlnIGZpbGVzIHdoaWNoIGFyZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHZhcm5hbWUuCisgICAgICAgIGkuZS4gTUFDSElORSwgRElTVFJPCisgICAgICAgICIiIgorICAgICAgICBwb3NzaWJsZSA9IFtdCisgICAgICAgIHZhciA9IHZhcm5hbWUubG93ZXIoKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmRhdGEKKyAgICAgICAgIyBpdGVyYXRlIGNvbmZpZ3MKKyAgICAgICAgYmJwYXRocyA9IGRhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgIGZvciBwYXRoIGluIGJicGF0aHM6CisgICAgICAgICAgICBjb25mcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAiY29uZiIsIHZhcikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZwYXRoKToKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhjb25mcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBjaGlsZCBmaWxlcywgdGhlc2UgYXJlIGFwcHJvcHJpYXRlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwgc2VwLCBlbmQgPSBmLnJwYXJ0aXRpb24oJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5kID09ICdjb25mJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS5hcHBlbmQodmFsKQorCisgICAgICAgIGlmIHBvc3NpYmxlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kKHZhciwgcG9zc2libGUpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgZmluZEluaGVyaXRzQ2xhc3Moc2VsZiwga2xhc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBhbGwgcmVjaXBlcyB3aGljaCBpbmhlcml0IHRoZSBzcGVjaWZpZWQgY2xhc3MKKyAgICAgICAgIiIiCisgICAgICAgIHBrZ19saXN0ID0gW10KKworICAgICAgICBmb3IgcGZuIGluIHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuOgorICAgICAgICAgICAgaW5oZXJpdHMgPSBzZWxmLnJlY2lwZWNhY2hlLmluaGVyaXRzLmdldChwZm4sIE5vbmUpCisgICAgICAgICAgICBpZiBpbmhlcml0cyBhbmQgaW5oZXJpdHMuY291bnQoa2xhc3MpID4gMDoKKyAgICAgICAgICAgICAgICBwa2dfbGlzdC5hcHBlbmQoc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bcGZuXSkKKworICAgICAgICByZXR1cm4gcGtnX2xpc3QKKworICAgIGRlZiBnZW5lcmF0ZVRhcmdldHNUcmVlKHNlbGYsIGtsYXNzPU5vbmUsIHBrZ3M9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIGRlcGVuZGVuY3kgdHJlZSBvZiBidWlsZGFibGUgdGFyZ2V0cworICAgICAgICBHZW5lcmF0ZSBhbiBldmVudCB3aXRoIHRoZSByZXN1bHQKKyAgICAgICAgIiIiCisgICAgICAgICMgaWYgdGhlIGNhbGxlciBoYXNuJ3Qgc3BlY2lmaWVkIGEgcGtncyBsaXN0IGRlZmF1bHQgdG8gdW5pdmVyc2UKKyAgICAgICAgaWYgbm90IHBrZ3M6CisgICAgICAgICAgICBwa2dzID0gWyd1bml2ZXJzZSddCisgICAgICAgICMgaWYgaW5oZXJpdGVkX2NsYXNzIHBhc3NlZCBlbnN1cmUgYWxsIHJlY2lwZXMgd2hpY2ggaW5oZXJpdCB0aGUKKyAgICAgICAgIyBzcGVjaWZpZWQgY2xhc3MgYXJlIGluY2x1ZGVkIGluIHBrZ3MKKyAgICAgICAgaWYga2xhc3M6CisgICAgICAgICAgICBleHRyYV9wa2dzID0gc2VsZi5maW5kSW5oZXJpdHNDbGFzcyhrbGFzcykKKyAgICAgICAgICAgIHBrZ3MgPSBwa2dzICsgZXh0cmFfcGtncworCisgICAgICAgICMgZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IHRyZWUgZm9yIGFsbCBvdXIgcGFja2FnZXMKKyAgICAgICAgdHJlZSA9IHNlbGYuZ2VuZXJhdGVQa2dEZXBUcmVlRGF0YShwa2dzLCAnYnVpbGQnKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkKHRyZWUpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgYnVpbGRXb3JsZFRhcmdldExpc3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgQnVpbGQgcGFja2FnZSBsaXN0IGZvciAiYml0YmFrZSB3b3JsZCIKKyAgICAgICAgIiIiCisgICAgICAgIHBhcnNlbG9nLmRlYnVnKDEsICJjb2xsYXRpbmcgcGFja2FnZXMgZm9yIFwid29ybGRcIiIpCisgICAgICAgIGZvciBmIGluIHNlbGYucmVjaXBlY2FjaGUucG9zc2libGVfd29ybGQ6CisgICAgICAgICAgICB0ZXJtaW5hbCA9IFRydWUKKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZl0KKworICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5yZWNpcGVjYWNoZS5wbl9wcm92aWRlc1twbl06CisgICAgICAgICAgICAgICAgaWYgcC5zdGFydHN3aXRoKCd2aXJ0dWFsLycpOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiV29ybGQgYnVpbGQgc2tpcHBpbmcgJXMgZHVlIHRvICVzIHByb3ZpZGVyIHN0YXJ0aW5nIHdpdGggdmlydHVhbC8iLCBmLCBwKQorICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZm9yIHBmIGluIHNlbGYucmVjaXBlY2FjaGUucHJvdmlkZXJzW3BdOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltwZl0gIT0gcG46CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiV29ybGQgYnVpbGQgc2tpcHBpbmcgJXMgZHVlIHRvIGJvdGggdXMgYW5kICVzIHByb3ZpZGluZyAlcyIsIGYsIHBmLCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWwgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHRlcm1pbmFsOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUud29ybGRfdGFyZ2V0LmFkZChwbikKKworICAgIGRlZiBpbnRlcmFjdGl2ZU1vZGUoIHNlbGYgKToKKyAgICAgICAgIiIiRHJvcCBvZmYgaW50byBhIHNoZWxsIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gYmIgaW1wb3J0IHNoZWxsCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhcnNlbG9nLmV4Y2VwdGlvbigiSW50ZXJhY3RpdmUgbW9kZSBub3QgYXZhaWxhYmxlIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaGVsbC5zdGFydCggc2VsZiApCisKKworICAgIGRlZiBoYW5kbGVDb2xsZWN0aW9ucyggc2VsZiwgY29sbGVjdGlvbnMgKToKKyAgICAgICAgIiIiSGFuZGxlIGNvbGxlY3Rpb25zIiIiCisgICAgICAgIGVycm9ycyA9IEZhbHNlCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzID0gW10KKyAgICAgICAgaWYgY29sbGVjdGlvbnM6CisgICAgICAgICAgICBjb2xsZWN0aW9uX3ByaW9yaXRpZXMgPSB7fQorICAgICAgICAgICAgY29sbGVjdGlvbl9kZXBlbmRzID0ge30KKyAgICAgICAgICAgIGNvbGxlY3Rpb25fbGlzdCA9IGNvbGxlY3Rpb25zLnNwbGl0KCkKKyAgICAgICAgICAgIG1pbl9wcmlvID0gMAorICAgICAgICAgICAgZm9yIGMgaW4gY29sbGVjdGlvbl9saXN0OgorICAgICAgICAgICAgICAgICMgR2V0IGNvbGxlY3Rpb24gcHJpb3JpdHkgaWYgZGVmaW5lZCBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgcHJpb3JpdHkgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCQkZJTEVfUFJJT1JJVFlfJXMiICUgYywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBwcmlvcml0eToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbyA9IGludChwcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiaW52YWxpZCB2YWx1ZSBmb3IgQkJGSUxFX1BSSU9SSVRZXyVzOiBcIiVzXCIiLCBjLCBwcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbWluX3ByaW8gPT0gMCBvciBwcmlvIDwgbWluX3ByaW86CisgICAgICAgICAgICAgICAgICAgICAgICBtaW5fcHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NdID0gcHJpbworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSA9IE5vbmUKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgZGVwZW5kZW5jaWVzIGFuZCBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgcHJpb3JpdHkgY2FsY3VsYXRpb24KKyAgICAgICAgICAgICAgICBkZXBzID0gc2VsZi5kYXRhLmdldFZhcigiTEFZRVJERVBFTkRTXyVzIiAlIGMsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgZGVwczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwbGlzdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmIudXRpbHMuVmVyc2lvblN0cmluZ0V4Y2VwdGlvbiBhcyB2c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnRXJyb3IgcGFyc2luZyBMQVlFUkRFUEVORFNfJXM6ICVzJyAlIChjLCBzdHIodnNlKSkpCisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAsIG9wbGlzdCBpbiBkZXBsaXN0Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGNvbGxlY3Rpb25fbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb3BzdHIgaW4gb3BsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnZlciA9IHNlbGYuZGF0YS5nZXRWYXIoIkxBWUVSVkVSU0lPTl8lcyIgJSBkZXAsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcCwgZGVwdmVyKSA9IG9wc3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gYmIudXRpbHMudmVyY21wX3N0cmluZ19vcChsYXllcnZlciwgZGVwdmVyLCBvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi51dGlscy5WZXJzaW9uU3RyaW5nRXhjZXB0aW9uIGFzIHZzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnRXJyb3IgcGFyc2luZyBMQVlFUkRFUEVORFNfJXM6ICVzJyAlIChjLCBzdHIodnNlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJMYXllciAnJXMnIGRlcGVuZHMgb24gdmVyc2lvbiAlcyBvZiBsYXllciAnJXMnLCBidXQgdmVyc2lvbiAlcyBpcyBjdXJyZW50bHkgZW5hYmxlZCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24uIENoZWNrIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBtYXRjaGluZyB2ZXJzaW9ucy9icmFuY2hlcyBvZiB0aGVzZSB0d28gbGF5ZXJzLiIsIGMsIG9wc3RyLCBkZXAsIGxheWVydmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJMYXllciAnJXMnIGRlcGVuZHMgb24gdmVyc2lvbiAlcyBvZiBsYXllciAnJXMnLCB3aGljaCBleGlzdHMgaW4geW91ciBjb25maWd1cmF0aW9uIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbi4gQ2hlY2sgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IG1hdGNoaW5nIHZlcnNpb25zL2JyYW5jaGVzIG9mIHRoZXNlIHR3byBsYXllcnMuIiwgYywgb3BzdHIsIGRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIkxheWVyICclcycgZGVwZW5kcyBvbiBsYXllciAnJXMnLCBidXQgdGhpcyBsYXllciBpcyBub3QgZW5hYmxlZCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24iLCBjLCBkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX2RlcGVuZHNbY10gPSBkZXBsaXN0LmtleXMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fZGVwZW5kc1tjXSA9IFtdCisKKyAgICAgICAgICAgICMgUmVjdXJzaXZlbHkgd29yayBvdXQgY29sbGVjdGlvbiBwcmlvcml0aWVzIGJhc2VkIG9uIGRlcGVuZGVuY2llcworICAgICAgICAgICAgZGVmIGNhbGNfbGF5ZXJfcHJpb3JpdHkoY29sbGVjdGlvbik6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjb2xsZWN0aW9uXToKKyAgICAgICAgICAgICAgICAgICAgbWF4X2RlcHByaW8gPSBtaW5fcHJpbworICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGNvbGxlY3Rpb25fZGVwZW5kc1tjb2xsZWN0aW9uXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNfbGF5ZXJfcHJpb3JpdHkoZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwcHJpbyA9IGNvbGxlY3Rpb25fcHJpb3JpdGllc1tkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBwcmlvID4gbWF4X2RlcHByaW86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2RlcHByaW8gPSBkZXBwcmlvCisgICAgICAgICAgICAgICAgICAgIG1heF9kZXBwcmlvICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMSwgIkNhbGN1bGF0ZWQgcHJpb3JpdHkgb2YgbGF5ZXIgJXMgYXMgJWQiLCBjb2xsZWN0aW9uLCBtYXhfZGVwcHJpbykKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NvbGxlY3Rpb25dID0gbWF4X2RlcHByaW8KKworICAgICAgICAgICAgIyBDYWxjdWxhdGUgYWxsIGxheWVyIHByaW9yaXRpZXMgdXNpbmcgY2FsY19sYXllcl9wcmlvcml0eSBhbmQgc3RvcmUgaW4gYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzCisgICAgICAgICAgICBmb3IgYyBpbiBjb2xsZWN0aW9uX2xpc3Q6CisgICAgICAgICAgICAgICAgY2FsY19sYXllcl9wcmlvcml0eShjKQorICAgICAgICAgICAgICAgIHJlZ2V4ID0gc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX1BBVFRFUk5fJXMiICUgYywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiByZWdleCA9PSBOb25lOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiQkJGSUxFX1BBVFRFUk5fJXMgbm90IGRlZmluZWQiICUgYykKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3JlID0gcmUuY29tcGlsZShyZWdleCkKKyAgICAgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJCQkZJTEVfUEFUVEVSTl8lcyBcIiVzXCIgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uIiwgYywgcmVnZXgpCisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcy5hcHBlbmQoKGMsIHJlZ2V4LCBjcmUsIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSkpCisgICAgICAgIGlmIGVycm9yczoKKyAgICAgICAgICAgICMgV2UndmUgYWxyZWFkeSBwcmludGVkIHRoZSBhY3R1YWwgZXJyb3IocykKKyAgICAgICAgICAgIHJhaXNlIENvbGxlY3Rpb25FcnJvcigiRXJyb3JzIGR1cmluZyBwYXJzaW5nIGxheWVyIGNvbmZpZ3VyYXRpb24iKQorCisgICAgZGVmIGJ1aWxkU2V0VmFycyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldHVwIGFueSB2YXJpYWJsZXMgbmVlZGVkIGJlZm9yZSBzdGFydGluZyBhIGJ1aWxkCisgICAgICAgICIiIgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKSAKKyAgICAgICAgaWYgbm90IHNlbGYuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsICIke0RBVEV9JHtUSU1FfSIpCisgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxEU1RBUlQiLCB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycsIHQpKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJEQVRFIiwgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdCkpCisgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIlRJTUUiLCB0aW1lLnN0cmZ0aW1lKCclSCVNJVMnLCB0KSkKKworICAgIGRlZiBtYXRjaEZpbGVzKHNlbGYsIGJmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIC5iYiBmaWxlcyB3aGljaCBtYXRjaCB0aGUgZXhwcmVzc2lvbiBpbiAnYnVpbGRmaWxlJy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJmLnN0YXJ0c3dpdGgoIi8iKSBvciBiZi5zdGFydHN3aXRoKCIuLi8iKToKKyAgICAgICAgICAgIGJmID0gb3MucGF0aC5hYnNwYXRoKGJmKQorCisgICAgICAgIHNlbGYuY29sbGVjdGlvbiA9IENvb2tlckNvbGxlY3RGaWxlcyhzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcykKKyAgICAgICAgZmlsZWxpc3QsIG1hc2tlZCA9IHNlbGYuY29sbGVjdGlvbi5jb2xsZWN0X2JiZmlsZXMoc2VsZi5kYXRhLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN0YXQoYmYpCisgICAgICAgICAgICBiZiA9IG9zLnBhdGguYWJzcGF0aChiZikKKyAgICAgICAgICAgIHJldHVybiBbYmZdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShiZikKKyAgICAgICAgICAgIG1hdGNoZXMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgcmVnZXhwLnNlYXJjaChmKSBhbmQgb3MucGF0aC5pc2ZpbGUoZik6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGYpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcworCisgICAgZGVmIG1hdGNoRmlsZShzZWxmLCBidWlsZGZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgLmJiIGZpbGUgd2hpY2ggbWF0Y2hlcyB0aGUgZXhwcmVzc2lvbiBpbiAnYnVpbGRmaWxlJy4KKyAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgbXVsdGlwbGUgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIG1hdGNoZXMgPSBzZWxmLm1hdGNoRmlsZXMoYnVpbGRmaWxlKQorICAgICAgICBpZiBsZW4obWF0Y2hlcykgIT0gMToKKyAgICAgICAgICAgIGlmIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgbXNnID0gIlVuYWJsZSB0byBtYXRjaCAnJXMnIHRvIGEgc3BlY2lmaWMgcmVjaXBlIGZpbGUgLSAlcyBtYXRjaGVzIGZvdW5kOiIgJSAoYnVpbGRmaWxlLCBsZW4obWF0Y2hlcykpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiXG4gICAgJXMiICUgZgorICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAnJXMnIiAlIGJ1aWxkZmlsZSkKKyAgICAgICAgICAgIHJhaXNlIE5vU3BlY2lmaWNNYXRjaAorICAgICAgICByZXR1cm4gbWF0Y2hlc1swXQorCisgICAgZGVmIGJ1aWxkRmlsZShzZWxmLCBidWlsZGZpbGUsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGQgdGhlIGZpbGUgbWF0Y2hpbmcgcmVnZXhwIGJ1aWxkZmlsZQorICAgICAgICAiIiIKKworICAgICAgICAjIFRvbyBtYW55IHBlb3BsZSB1c2UgLWIgYmVjYXVzZSB0aGV5IHRoaW5rIGl0J3MgaG93IHlvdSBub3JtYWxseQorICAgICAgICAjIHNwZWNpZnkgYSB0YXJnZXQgdG8gYmUgYnVpbHQsIHNvIHNob3cgYSB3YXJuaW5nCisgICAgICAgIGJiLndhcm4oIkJ1aWxkZmlsZSBzcGVjaWZpZWQsIGRlcGVuZGVuY2llcyB3aWxsIG5vdCBiZSBoYW5kbGVkLiBJZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50LCBkbyBub3QgdXNlIC1iIC8gLS1idWlsZGZpbGUuIikKKworICAgICAgICAjIFBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGhlcmUuIFdlIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseSBoZXJlIHNpbmNlCisgICAgICAgICMgYnVpbGRGaWxlKCkgZG9lc24ndCB1c2UgdGhlIGNhY2hlCisgICAgICAgIHNlbGYucGFyc2VDb25maWd1cmF0aW9uKCkKKworICAgICAgICAjIElmIHdlIGFyZSB0b2xkIHRvIGRvIHRoZSBOb25lIHRhc2sgdGhlbiBxdWVyeSB0aGUgZGVmYXVsdCB0YXNrCisgICAgICAgIGlmICh0YXNrID09IE5vbmUpOgorICAgICAgICAgICAgdGFzayA9IHNlbGYuY29uZmlndXJhdGlvbi5jbWQKKworICAgICAgICBmbiwgY2xzID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihidWlsZGZpbGUpCisgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCisKKyAgICAgICAgc2VsZi5idWlsZFNldFZhcnMoKQorCisgICAgICAgIGluZm9zID0gYmIuY2FjaGUuQ2FjaGUucGFyc2UoZm4sIHNlbGYuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlc19hcnJheSkKKyAgICAgICAgaW5mb3MgPSBkaWN0KGluZm9zKQorCisgICAgICAgIGZuID0gYmIuY2FjaGUuQ2FjaGUucmVhbGZuMnZpcnR1YWwoZm4sIGNscykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5mb19hcnJheSA9IGluZm9zW2ZuXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgZG9lcyBub3QgZXhpc3QiICUgZm4pCisKKyAgICAgICAgaWYgaW5mb19hcnJheVswXS5za2lwcGVkOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIHdhcyBza2lwcGVkOiAlcyIgJSAoZm4sIGluZm9fYXJyYXlbMF0uc2tpcHJlYXNvbikpCisKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5hZGRfZnJvbV9yZWNpcGVpbmZvKGZuLCBpbmZvX2FycmF5KQorCisgICAgICAgICMgVHdlYWsgc29tZSB2YXJpYWJsZXMKKyAgICAgICAgaXRlbSA9IGluZm9fYXJyYXlbMF0ucG4KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IHNldCgpCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX3ByaW9yaXR5W2ZuXSA9IDEKKworICAgICAgICAjIFJlbW92ZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS50YXNrX2RlcHNbZm5dWydkZXBlbmRzJ10gPSB7fQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmRlcHNbZm5dID0gW10KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5ydW5kZXBzW2ZuXSA9IFtdCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucnVucmVjc1tmbl0gPSBbXQorCisgICAgICAgICMgSW52YWxpZGF0ZSB0YXNrIGZvciB0YXJnZXQgaWYgZm9yY2UgbW9kZSBhY3RpdmUKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmZvcmNlOgorICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIkludmFsaWRhdGUgdGFzayAlcywgJXMiLCB0YXNrLCBmbikKKyAgICAgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgICAgIHRhc2sgPSAiZG9fJXMiICUgdGFzaworICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmludmFsaWRhdGVfdGFzayh0YXNrLCBzZWxmLnJlY2lwZWNhY2hlLCBmbikKKworICAgICAgICAjIFNldHVwIHRhc2tkYXRhIHN0cnVjdHVyZQorICAgICAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKHNlbGYuY29uZmlndXJhdGlvbi5hYm9ydCkKKyAgICAgICAgdGFza2RhdGEuYWRkX3Byb3ZpZGVyKHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgaXRlbSkKKworICAgICAgICBidWlsZG5hbWUgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBUcnVlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkU3RhcnRlZChidWlsZG5hbWUsIFtpdGVtXSksIHNlbGYuZXhwYW5kZWRfZGF0YSkKKworICAgICAgICAjIEV4ZWN1dGUgdGhlIHJ1bnF1ZXVlCisgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgdGFzayA9ICJkb18lcyIgJSB0YXNrCisgICAgICAgIHJ1bmxpc3QgPSBbW2l0ZW0sIHRhc2tdXQorCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKworICAgICAgICBkZWYgYnVpbGRGaWxlSWRsZShzZXJ2ZXIsIHJxLCBhYm9ydCk6CisKKyAgICAgICAgICAgIG1zZyA9IE5vbmUKKyAgICAgICAgICAgIGludGVycnVwdGVkID0gMAorICAgICAgICAgICAgaWYgYWJvcnQgb3Igc2VsZi5zdGF0ZSA9PSBzdGF0ZS5mb3JjZXNodXRkb3duOgorICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJGb3JjZWQgc2h1dGRvd24iCisgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAyCisgICAgICAgICAgICBlbGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUuc2h1dGRvd246CisgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJTdG9wcGVkIGJ1aWxkIgorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gMQorICAgICAgICAgICAgZmFpbHVyZXMgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcnEuZXhlY3V0ZV9ydW5xdWV1ZSgpCisgICAgICAgICAgICBleGNlcHQgcnVucXVldWUuVGFza0ZhaWx1cmUgYXMgZXhjOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzICs9IGxlbihleGMuYXJncykKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQobGVuKHJxLnJxZGF0YS5ydW5xX2ZuaWQpLCBidWlsZG5hbWUsIGl0ZW0sIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKG1zZykKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHJldHZhbCBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2soYnVpbGRGaWxlSWRsZSwgcnEpCisKKyAgICBkZWYgYnVpbGRUYXJnZXRzKHNlbGYsIHRhcmdldHMsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQXR0ZW1wdCB0byBidWlsZCB0aGUgdGFyZ2V0cyBzcGVjaWZpZWQKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIGJ1aWxkVGFyZ2V0c0lkbGUoc2VydmVyLCBycSwgYWJvcnQpOgorICAgICAgICAgICAgbXNnID0gTm9uZQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAwCisgICAgICAgICAgICBpZiBhYm9ydCBvciBzZWxmLnN0YXRlID09IHN0YXRlLmZvcmNlc2h1dGRvd246CisgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCisgICAgICAgICAgICAgICAgbXNnID0gIkZvcmNlZCBzaHV0ZG93biIKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IDIKKyAgICAgICAgICAgIGVsaWYgc2VsZi5zdGF0ZSA9PSBzdGF0ZS5zaHV0ZG93bjoKKyAgICAgICAgICAgICAgICBycS5maW5pc2hfcnVucXVldWUoRmFsc2UpCisgICAgICAgICAgICAgICAgbXNnID0gIlN0b3BwZWQgYnVpbGQiCisgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAxCisgICAgICAgICAgICBmYWlsdXJlcyA9IDAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBycS5leGVjdXRlX3J1bnF1ZXVlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBydW5xdWV1ZS5UYXNrRmFpbHVyZSBhcyBleGM6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMgKz0gbGVuKGV4Yy5hcmdzKQorICAgICAgICAgICAgICAgIHJldHZhbCA9IEZhbHNlCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZENvbXBsZXRlZChsZW4ocnEucnFkYXRhLnJ1bnFfZm5pZCksIGJ1aWxkbmFtZSwgdGFyZ2V0cywgZmFpbHVyZXMsIGludGVycnVwdGVkKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQobXNnKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgcmV0dmFsIGlzIFRydWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwKKworICAgICAgICBidWlsZC5yZXNldF9jYWNoZSgpCisgICAgICAgIHNlbGYuYnVpbGRTZXRWYXJzKCkKKworICAgICAgICB0YXNrZGF0YSwgcnVubGlzdCwgZnVsbHRhcmdldGxpc3QgPSBzZWxmLmJ1aWxkVGFza0RhdGEodGFyZ2V0cywgdGFzaywgc2VsZi5jb25maWd1cmF0aW9uLmFib3J0KQorCisgICAgICAgIGJ1aWxkbmFtZSA9IHNlbGYuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkU3RhcnRlZChidWlsZG5hbWUsIGZ1bGx0YXJnZXRsaXN0KSwgc2VsZi5kYXRhKQorCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKyAgICAgICAgaWYgJ3VuaXZlcnNlJyBpbiB0YXJnZXRzOgorICAgICAgICAgICAgcnEucnFkYXRhLndhcm5fbXVsdGlfYmIgPSBUcnVlCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2soYnVpbGRUYXJnZXRzSWRsZSwgcnEpCisKKworICAgIGRlZiBnZXRBbGxLZXlzV2l0aEZsYWdzKHNlbGYsIGZsYWdsaXN0KToKKyAgICAgICAgZHVtcCA9IHt9CisgICAgICAgIGZvciBrIGluIHNlbGYuZGF0YS5rZXlzKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdiA9IHNlbGYuZGF0YS5nZXRWYXIoaywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgay5zdGFydHN3aXRoKCJfXyIpIGFuZCBub3QgaXNpbnN0YW5jZSh2LCBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCk6CisgICAgICAgICAgICAgICAgICAgIGR1bXBba10gPSB7CisgICAgJ3YnIDogdiAsCisgICAgJ2hpc3RvcnknIDogc2VsZi5kYXRhLnZhcmhpc3RvcnkudmFyaWFibGUoayksCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gZmxhZ2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdW2RdID0gc2VsZi5kYXRhLmdldFZhckZsYWcoaywgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwcmludChlKQorICAgICAgICByZXR1cm4gZHVtcAorCisKKyAgICBkZWYgZ2VuZXJhdGVOZXdJbWFnZShzZWxmLCBpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZV9xdWV1ZSwgdGltZXN0YW1wLCBkZXNjcmlwdGlvbik6CisgICAgICAgICcnJworICAgICAgICBDcmVhdGUgYSBuZXcgaW1hZ2Ugd2l0aCBhICJyZXF1aXJlIi8iaW5oZXJpdCIgYmFzZV9pbWFnZSBzdGF0ZW1lbnQKKyAgICAgICAgJycnCisgICAgICAgIGlmIHRpbWVzdGFtcDoKKyAgICAgICAgICAgIGltYWdlX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGltYWdlKVswXQorICAgICAgICAgICAgdGltZXN0ciA9IHRpbWUuc3RyZnRpbWUoIi0lWSVtJWQtJUglTSVTIikKKyAgICAgICAgICAgIGRlc3QgPSBpbWFnZV9uYW1lICsgc3RyKHRpbWVzdHIpICsgIi5iYiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpbWFnZS5lbmRzd2l0aCgiLmJiIik6CisgICAgICAgICAgICAgICAgZGVzdCA9IGltYWdlICsgIi5iYiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdCA9IGltYWdlCisKKyAgICAgICAgYmFzZW5hbWUgPSBGYWxzZQorICAgICAgICBpZiBiYXNlX2ltYWdlOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJhc2VfaW1hZ2UsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICByZXF1aXJlX2xpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBwID0gcmUuY29tcGlsZSgiSU1BR0VfQkFTRU5BTUUgKj0iKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIHAuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBUcnVlCisKKyAgICAgICAgd2l0aCBvcGVuKGRlc3QsICJ3IikgYXMgaW1hZ2VmaWxlOgorICAgICAgICAgICAgaWYgYmFzZV9pbWFnZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZSgiaW5oZXJpdCBjb3JlLWltYWdlXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0b3BkaXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJUT1BESVIiLCBGYWxzZSkKKyAgICAgICAgICAgICAgICBpZiB0b3BkaXIgaW4gYmFzZV9pbWFnZToKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHJlcXVpcmVfbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKCJyZXF1aXJlICIgKyBiYXNlX2ltYWdlICsgIlxuIikKKyAgICAgICAgICAgIGltYWdlX2luc3RhbGwgPSAiSU1BR0VfSU5TVEFMTCA9IFwiIgorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZV9xdWV1ZToKKyAgICAgICAgICAgICAgICBpbWFnZV9pbnN0YWxsICs9IHN0cihwYWNrYWdlKSArICIgIgorICAgICAgICAgICAgaW1hZ2VfaW5zdGFsbCArPSAiXCJcbiIKKyAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZShpbWFnZV9pbnN0YWxsKQorCisgICAgICAgICAgICBkZXNjcmlwdGlvbl92YXIgPSAiREVTQ1JJUFRJT04gPSBcIiIgKyBkZXNjcmlwdGlvbiArICJcIlxuIgorICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKGRlc2NyaXB0aW9uX3ZhcikKKworICAgICAgICAgICAgaWYgYmFzZW5hbWU6CisgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIG92ZXJ3cml0dGVuIGluIGEgaW5oZXJpdGVkIGltYWdlLCByZXNldCBpdCB0byBkZWZhdWx0CisgICAgICAgICAgICAgICAgaW1hZ2VfYmFzZW5hbWUgPSAiSU1BR0VfQkFTRU5BTUUgPSBcIiR7UE59XCJcbiIKKyAgICAgICAgICAgICAgICBpbWFnZWZpbGUud3JpdGUoaW1hZ2VfYmFzZW5hbWUpCisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmluaXRpYWwKKyAgICAgICAgaWYgdGltZXN0YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRpbWVzdHIKKworICAgIGRlZiB1cGRhdGVDYWNoZVN5bmMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUucnVubmluZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgcmVsb2FkIGZpbGVzIGZvciB3aGljaCB3ZSBnb3Qgbm90aWZpY2F0aW9ucworICAgICAgICBmb3IgcCBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CisgICAgICAgICAgICBiYi5wYXJzZS51cGRhdGVfY2FjaGUocCkKKyAgICAgICAgc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzID0gW10KKworICAgICAgICBpZiBub3Qgc2VsZi5iYXNlY29uZmlnX3ZhbGlkOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZWxvYWRpbmcgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEiKQorICAgICAgICAgICAgc2VsZi5pbml0Q29uZmlndXJhdGlvbkRhdGEoKQorICAgICAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gRmFsc2UKKworICAgICMgVGhpcyBpcyBjYWxsZWQgZm9yIGFsbCBhc3luYyBjb21tYW5kcyB3aGVuIHNlbGYuc3RhdGUgIT0gcnVubmluZworICAgIGRlZiB1cGRhdGVDYWNoZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSA9PSBzdGF0ZS5ydW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpbiAoc3RhdGUuc2h1dGRvd24sIHN0YXRlLmZvcmNlc2h1dGRvd24sIHN0YXRlLmVycm9yKToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wYXJzZXIsICdzaHV0ZG93bicpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLnNodXRkb3duKGNsZWFuPUZhbHNlLCBmb3JjZSA9IFRydWUpCisgICAgICAgICAgICByYWlzZSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgIT0gc3RhdGUucGFyc2luZzoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlQ2FjaGVTeW5jKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlICE9IHN0YXRlLnBhcnNpbmcgYW5kIG5vdCBzZWxmLnBhcnNlY2FjaGVfdmFsaWQ6CisgICAgICAgICAgICBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbiAoKQorICAgICAgICAgICAgaWYgQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFMgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2soRmFsc2UpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgIGlnbm9yZSA9IHNlbGYuZXhwYW5kZWRfZGF0YS5nZXRWYXIoIkFTU1VNRV9QUk9WSURFRCIsIFRydWUpIG9yICIiCisgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzID0gc2V0KGlnbm9yZS5zcGxpdCgpKQorCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9hc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcy5hZGQoZGVwKQorCisgICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBDb29rZXJDb2xsZWN0RmlsZXMoc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMpCisgICAgICAgICAgICAoZmlsZWxpc3QsIG1hc2tlZCkgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdF9iYmZpbGVzKHNlbGYuZGF0YSwgc2VsZi5leHBhbmRlZF9kYXRhKQorCisgICAgICAgICAgICBzZWxmLnBhcnNlciA9IENvb2tlclBhcnNlcihzZWxmLCBmaWxlbGlzdCwgbWFza2VkKQorICAgICAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gVHJ1ZQorCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5wYXJzaW5nCisKKyAgICAgICAgaWYgbm90IHNlbGYucGFyc2VyLnBhcnNlX25leHQoKToKKyAgICAgICAgICAgIGNvbGxlY3Rsb2cuZGVidWcoMSwgInBhcnNpbmcgY29tcGxldGUiKQorICAgICAgICAgICAgaWYgc2VsZi5wYXJzZXIuZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHNlbGYuc2hvd19hcHBlbmRzX3dpdGhfbm9fcmVjaXBlcygpCisgICAgICAgICAgICBzZWxmLmhhbmRsZVByZWZQcm92aWRlcnMoKQorICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfcHJpb3JpdHkgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdGlvbl9wcmlvcml0aWVzKHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUucnVubmluZworCisgICAgICAgICAgICAjIFNlbmQgYW4gZXZlbnQgbGlzdGluZyBhbGwgc3RhbXBzIHJlYWNoYWJsZSBhZnRlciBwYXJzaW5nCisgICAgICAgICAgICAjIHdoaWNoIHRoZSBtZXRhZGF0YSBtYXkgdXNlIHRvIGNsZWFuIHVwIHN0YWxlIGRhdGEKKyAgICAgICAgICAgIGV2ZW50ID0gYmIuZXZlbnQuUmVhY2hhYmxlU3RhbXBzKHNlbGYucmVjaXBlY2FjaGUuc3RhbXApCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50LCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tQYWNrYWdlcyhzZWxmLCBwa2dzX3RvX2J1aWxkKToKKworICAgICAgICAjIFJldHVybiBhIGNvcHksIGRvbid0IG1vZGlmeSB0aGUgb3JpZ2luYWwKKyAgICAgICAgcGtnc190b19idWlsZCA9IHBrZ3NfdG9fYnVpbGRbOl0KKworICAgICAgICBpZiBsZW4ocGtnc190b19idWlsZCkgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE5vdGhpbmdUb0J1aWxkCisKKyAgICAgICAgaWdub3JlID0gKHNlbGYuZXhwYW5kZWRfZGF0YS5nZXRWYXIoIkFTU1VNRV9QUk9WSURFRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIGlmIHBrZyBpbiBpZ25vcmU6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cud2FybigiRXhwbGljaXQgdGFyZ2V0IFwiJXNcIiBpcyBpbiBBU1NVTUVfUFJPVklERUQsIGlnbm9yaW5nIiAlIHBrZykKKworICAgICAgICBpZiAnd29ybGQnIGluIHBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkV29ybGRUYXJnZXRMaXN0KCkKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd3b3JsZCcpCisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLndvcmxkX3RhcmdldDoKKyAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorCisgICAgICAgIGlmICd1bml2ZXJzZScgaW4gcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIHBhcnNlbG9nLndhcm4oIlRoZSBcInVuaXZlcnNlXCIgdGFyZ2V0IGlzIG9ubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5kIG1heSBwcm9kdWNlIGVycm9ycy4iKQorICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMSwgImNvbGxhdGluZyBwYWNrYWdlcyBmb3IgXCJ1bml2ZXJzZVwiIikKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd1bml2ZXJzZScpCisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLnVuaXZlcnNlX3RhcmdldDoKKyAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorCisgICAgICAgIHJldHVybiBwa2dzX3RvX2J1aWxkCisKKworCisKKyAgICBkZWYgcHJlX3NlcnZlKHNlbGYpOgorICAgICAgICAjIEVtcHR5IHRoZSBlbnZpcm9ubWVudC4gVGhlIGVudmlyb25tZW50IHdpbGwgYmUgcG9wdWxhdGVkIGFzCisgICAgICAgICMgbmVjZXNzYXJ5IGZyb20gdGhlIGRhdGEgc3RvcmUuCisgICAgICAgICNiYi51dGlscy5lbXB0eV9lbnZpcm9ubWVudCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucHJob3N0ID0gcHJzZXJ2LnNlcnYuYXV0b19zdGFydChzZWxmLmRhdGEpCisgICAgICAgIGV4Y2VwdCBwcnNlcnYuc2Vydi5QUlNlcnZpY2VDb25maWdFcnJvcjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuZXJyb3IKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcG9zdF9zZXJ2ZShzZWxmKToKKyAgICAgICAgcHJzZXJ2LnNlcnYuYXV0b19zaHV0ZG93bihzZWxmLmRhdGEpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIGxvY2tmaWxlID0gc2VsZi5sb2NrLm5hbWUKKyAgICAgICAgc2VsZi5sb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb2NrID0gTm9uZQorCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmxvY2s6CisgICAgICAgICAgICB3aXRoIGJiLnV0aWxzLnRpbWVvdXQoMyk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGUsIHNoYXJlZD1GYWxzZSwgcmV0cnk9RmFsc2UsIGJsb2NrPVRydWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYubG9jazoKKyAgICAgICAgICAgICAgICAgICAgIyBTb21lIHN5c3RlbXMgbWF5IG5vdCBoYXZlIGxzb2YgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIHByb2NzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHNvZiIsICctdycsIGxvY2tmaWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvY3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIGZ1c2VyIGlmIGxzb2YgaXMgdW5hdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZnVzZXIiLCAnLXYnLCBsb2NrZmlsZV0sIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIkRlbGF5aW5nIHNodXRkb3duIGR1ZSB0byBhY3RpdmUgcHJvY2Vzc2VzIHdoaWNoIGFwcGVhciB0byBiZSBob2xkaW5nIGJpdGJha2UubG9jayIKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvY3M6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIjpcbiVzIiAlIHN0cihwcm9jcykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZiwgZm9yY2UgPSBGYWxzZSk6CisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmZvcmNlc2h1dGRvd24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5zaHV0ZG93bgorCisgICAgZGVmIGZpbmlzaGNvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5pbml0aWFsCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKKworICAgIGRlZiBsb2NrQml0YmFrZShzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2xvY2snKToKKyAgICAgICAgICAgIHNlbGYubG9jayA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuZGF0YToKKyAgICAgICAgICAgICAgICBsb2NrZmlsZSA9IHNlbGYuZGF0YS5leHBhbmQoIiR7VE9QRElSfS9iaXRiYWtlLmxvY2siKQorICAgICAgICAgICAgICAgIGlmIGxvY2tmaWxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShsb2NrZmlsZSwgRmFsc2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gc2VsZi5sb2NrCisKKyAgICBkZWYgdW5sb2NrQml0YmFrZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnbG9jaycpIGFuZCBzZWxmLmxvY2s6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKHNlbGYubG9jaykKKworZGVmIHNlcnZlcl9tYWluKGNvb2tlciwgZnVuYywgKmFyZ3MpOgorICAgIGNvb2tlci5wcmVfc2VydmUoKQorCisgICAgaWYgY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNQcm9maWxlIGFzIHByb2ZpbGUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaW1wb3J0IHByb2ZpbGUKKyAgICAgICAgcHJvZiA9IHByb2ZpbGUuUHJvZmlsZSgpCisKKyAgICAgICAgcmV0ID0gcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgZnVuYywgKmFyZ3MpCisKKyAgICAgICAgcHJvZi5kdW1wX3N0YXRzKCJwcm9maWxlLmxvZyIpCisgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZygicHJvZmlsZS5sb2ciKQorICAgICAgICBwcmludCgiUmF3IHByb2ZpbGluZyBpbmZvcm1hdGlvbiBzYXZlZCB0byBwcm9maWxlLmxvZyBhbmQgcHJvY2Vzc2VkIHN0YXRpc3RpY3MgdG8gcHJvZmlsZS5sb2cucHJvY2Vzc2VkIikKKworICAgIGVsc2U6CisgICAgICAgIHJldCA9IGZ1bmMoKmFyZ3MpCisKKyAgICBjb29rZXIucG9zdF9zZXJ2ZSgpCisKKyAgICByZXR1cm4gcmV0CisKK2NsYXNzIENvb2tlckV4aXQoYmIuZXZlbnQuRXZlbnQpOgorICAgICIiIgorICAgIE5vdGlmeSBjbGllbnRzIG9mIHRoZSBDb29rZXIgc2h1dGRvd24KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgYmIuZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKworCitjbGFzcyBDb29rZXJDb2xsZWN0RmlsZXMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpb3JpdGllcyk6CisgICAgICAgIHNlbGYuYmJhcHBlbmRzID0gW10KKyAgICAgICAgc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMgPSBwcmlvcml0aWVzCisKKyAgICBkZWYgY2FsY19iYmZpbGVfcHJpb3JpdHkoIHNlbGYsIGZpbGVuYW1lLCBtYXRjaGVkID0gTm9uZSApOgorICAgICAgICBmb3IgXywgXywgcmVnZXgsIHByaSBpbiBzZWxmLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGlmIHJlZ2V4Lm1hdGNoKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBtYXRjaGVkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWdleCBpbiBtYXRjaGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hZGQocmVnZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHByaQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGdldF9iYmZpbGVzKHNlbGYpOgorICAgICAgICAiIiJHZXQgbGlzdCBvZiBkZWZhdWx0IC5iYiBmaWxlcyBieSByZWFkaW5nIG91dCB0aGUgY3VycmVudCBkaXJlY3RvcnkiIiIKKyAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbnRlbnRzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBiYmZpbGVzID0gW10KKyAgICAgICAgZm9yIGYgaW4gY29udGVudHM6CisgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCIuYmIiKToKKyAgICAgICAgICAgICAgICBiYmZpbGVzLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHBhdGgsIGYpKSkKKyAgICAgICAgcmV0dXJuIGJiZmlsZXMKKworICAgIGRlZiBmaW5kX2JiZmlsZXMoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkZpbmQgYWxsIHRoZSAuYmIgYW5kIC5iYmFwcGVuZCBmaWxlcyBpbiBhIGRpcmVjdG9yeSIiIgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBkaXIsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICBmb3IgaWdub3JlZCBpbiAoJ1NDQ1MnLCAnQ1ZTJywgJy5zdm4nKToKKyAgICAgICAgICAgICAgICBpZiBpZ25vcmVkIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKGlnbm9yZWQpCisgICAgICAgICAgICBmb3VuZCArPSBbb3MucGF0aC5qb2luKGRpciwgZikgZm9yIGYgaW4gZmlsZXMgaWYgKGYuZW5kc3dpdGgoWycuYmInLCAnLmJiYXBwZW5kJ10pKV0KKworICAgICAgICByZXR1cm4gZm91bmQKKworICAgIGRlZiBjb2xsZWN0X2JiZmlsZXMoc2VsZiwgY29uZmlnLCBldmVudGRhdGEpOgorICAgICAgICAiIiJDb2xsZWN0IGFsbCBhdmFpbGFibGUgLmJiIGJ1aWxkIGZpbGVzIiIiCisgICAgICAgIG1hc2tlZCA9IDAKKworICAgICAgICBjb2xsZWN0bG9nLmRlYnVnKDEsICJjb2xsZWN0aW5nIC5iYiBmaWxlcyIpCisKKyAgICAgICAgZmlsZXMgPSAoY29uZmlnLmdldFZhciggIkJCRklMRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBjb25maWcuc2V0VmFyKCJCQkZJTEVTIiwgIiAiLmpvaW4oZmlsZXMpKQorCisgICAgICAgICMgU29ydCBmaWxlcyBieSBwcmlvcml0eQorICAgICAgICBmaWxlcy5zb3J0KCBrZXk9bGFtYmRhIGZpbGVpdGVtOiBzZWxmLmNhbGNfYmJmaWxlX3ByaW9yaXR5KGZpbGVpdGVtKSApCisKKyAgICAgICAgaWYgbm90IGxlbihmaWxlcyk6CisgICAgICAgICAgICBmaWxlcyA9IHNlbGYuZ2V0X2JiZmlsZXMoKQorCisgICAgICAgIGlmIG5vdCBsZW4oZmlsZXMpOgorICAgICAgICAgICAgY29sbGVjdGxvZy5lcnJvcigibm8gcmVjaXBlIGZpbGVzIHRvIGJ1aWxkLCBjaGVjayB5b3VyIEJCUEFUSCBhbmQgQkJGSUxFUz8iKQorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShDb29rZXJFeGl0KCksIGV2ZW50ZGF0YSkKKworICAgICAgICAjIENhbid0IHVzZSBzZXQgaGVyZSBhcyBvcmRlciBpcyBpbXBvcnRhbnQKKyAgICAgICAgbmV3ZmlsZXMgPSBbXQorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgZGlyZmlsZXMgPSBzZWxmLmZpbmRfYmJmaWxlcyhmKQorICAgICAgICAgICAgICAgIGZvciBnIGluIGRpcmZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBnIG5vdCBpbiBuZXdmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2ZpbGVzLmFwcGVuZChnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBnbG9iYmVkID0gZ2xvYi5nbG9iKGYpCisgICAgICAgICAgICAgICAgaWYgbm90IGdsb2JiZWQgYW5kIG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgICAgICAgICBnbG9iYmVkID0gW2ZdCisgICAgICAgICAgICAgICAgZm9yIGcgaW4gZ2xvYmJlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZyBub3QgaW4gbmV3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdmaWxlcy5hcHBlbmQoZykKKworICAgICAgICBiYm1hc2sgPSBjb25maWcuZ2V0VmFyKCdCQk1BU0snLCBUcnVlKQorCisgICAgICAgIGlmIGJibWFzazoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYm1hc2tfY29tcGlsZWQgPSByZS5jb21waWxlKGJibWFzaykKKyAgICAgICAgICAgIGV4Y2VwdCBzcmVfY29uc3RhbnRzLmVycm9yOgorICAgICAgICAgICAgICAgIGNvbGxlY3Rsb2cuY3JpdGljYWwoIkJCTUFTSyBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24sIGlnbm9yaW5nLiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QobmV3ZmlsZXMpLCAwCisKKyAgICAgICAgYmJmaWxlcyA9IFtdCisgICAgICAgIGJiYXBwZW5kID0gW10KKyAgICAgICAgZm9yIGYgaW4gbmV3ZmlsZXM6CisgICAgICAgICAgICBpZiBiYm1hc2sgYW5kIGJibWFza19jb21waWxlZC5zZWFyY2goZik6CisgICAgICAgICAgICAgICAgY29sbGVjdGxvZy5kZWJ1ZygxLCAic2tpcHBpbmcgbWFza2VkIGZpbGUgJXMiLCBmKQorICAgICAgICAgICAgICAgIG1hc2tlZCArPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgICAgIGJiZmlsZXMuYXBwZW5kKGYpCisgICAgICAgICAgICBlbGlmIGYuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kLmFwcGVuZChmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb2xsZWN0bG9nLmRlYnVnKDEsICJza2lwcGluZyAlczogdW5rbm93biBmaWxlIGV4dGVuc2lvbiIsIGYpCisKKyAgICAgICAgIyBCdWlsZCBhIGxpc3Qgb2YgLmJiYXBwZW5kIGZpbGVzIGZvciBlYWNoIC5iYiBmaWxlCisgICAgICAgIGZvciBmIGluIGJiYXBwZW5kOgorICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZikucmVwbGFjZSgnLmJiYXBwZW5kJywgJy5iYicpCisgICAgICAgICAgICBzZWxmLmJiYXBwZW5kcy5hcHBlbmQoKGJhc2UsIGYpKQorCisgICAgICAgICMgRmluZCBvdmVybGF5ZWQgcmVjaXBlcworICAgICAgICAjIGJiZmlsZXMgd2lsbCBiZSBpbiBwcmlvcml0eSBvcmRlciB3aGljaCBtYWtlcyB0aGlzIGVhc3kKKyAgICAgICAgYmJmaWxlX3NlZW4gPSBkaWN0KCkKKyAgICAgICAgc2VsZi5vdmVybGF5ZWQgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBmb3IgZiBpbiByZXZlcnNlZChiYmZpbGVzKToKKyAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGYpCisgICAgICAgICAgICBpZiBiYXNlIG5vdCBpbiBiYmZpbGVfc2VlbjoKKyAgICAgICAgICAgICAgICBiYmZpbGVfc2VlbltiYXNlXSA9IGYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9wZmlsZSA9IGJiZmlsZV9zZWVuW2Jhc2VdCisgICAgICAgICAgICAgICAgc2VsZi5vdmVybGF5ZWRbdG9wZmlsZV0uYXBwZW5kKGYpCisKKyAgICAgICAgcmV0dXJuIChiYmZpbGVzLCBtYXNrZWQpCisKKyAgICBkZWYgZ2V0X2ZpbGVfYXBwZW5kcyhzZWxmLCBmbik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEgbGlzdCBvZiAuYmJhcHBlbmQgZmlsZXMgdG8gYXBwbHkgdG8gZm4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgZiA9IG9zLnBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgIGZvciBiIGluIHNlbGYuYmJhcHBlbmRzOgorICAgICAgICAgICAgKGJiYXBwZW5kLCBmaWxlbmFtZSkgPSBiCisgICAgICAgICAgICBpZiAoYmJhcHBlbmQgPT0gZikgb3IgKCclJyBpbiBiYmFwcGVuZCBhbmQgYmJhcHBlbmQuc3RhcnRzd2l0aChmWzpiYmFwcGVuZC5pbmRleCgnJScpXSkpOgorICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CisKKyAgICBkZWYgY29sbGVjdGlvbl9wcmlvcml0aWVzKHNlbGYsIHBrZ2ZucywgZCk6CisKKyAgICAgICAgcHJpb3JpdGllcyA9IHt9CisKKyAgICAgICAgIyBDYWxjdWxhdGUgcHJpb3JpdGllcyBmb3IgZWFjaCBmaWxlCisgICAgICAgIG1hdGNoZWQgPSBzZXQoKQorICAgICAgICBmb3IgcCBpbiBwa2dmbnM6CisgICAgICAgICAgICByZWFsZm4sIGNscyA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocCkKKyAgICAgICAgICAgIHByaW9yaXRpZXNbcF0gPSBzZWxmLmNhbGNfYmJmaWxlX3ByaW9yaXR5KHJlYWxmbiwgbWF0Y2hlZCkKKworICAgICAgICAjIERvbid0IHNob3cgdGhlIHdhcm5pbmcgaWYgdGhlIEJCRklMRV9QQVRURVJOIGRpZCBtYXRjaCAuYmJhcHBlbmQgZmlsZXMKKyAgICAgICAgdW5tYXRjaGVkID0gc2V0KCkKKyAgICAgICAgZm9yIF8sIF8sIHJlZ2V4LCBwcmkgaW4gc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CisgICAgICAgICAgICBpZiBub3QgcmVnZXggaW4gbWF0Y2hlZDoKKyAgICAgICAgICAgICAgICB1bm1hdGNoZWQuYWRkKHJlZ2V4KQorCisgICAgICAgIGRlZiBmaW5kbWF0Y2gocmVnZXgpOgorICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5iYmFwcGVuZHM6CisgICAgICAgICAgICAgICAgKGJiZmlsZSwgYXBwZW5kKSA9IGIKKyAgICAgICAgICAgICAgICBpZiByZWdleC5tYXRjaChhcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZm9yIHVubWF0Y2ggaW4gdW5tYXRjaGVkLmNvcHkoKToKKyAgICAgICAgICAgIGlmIGZpbmRtYXRjaCh1bm1hdGNoKToKKyAgICAgICAgICAgICAgICB1bm1hdGNoZWQucmVtb3ZlKHVubWF0Y2gpCisKKyAgICAgICAgZm9yIGNvbGxlY3Rpb24sIHBhdHRlcm4sIHJlZ2V4LCBfIGluIHNlbGYuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzOgorICAgICAgICAgICAgaWYgcmVnZXggaW4gdW5tYXRjaGVkOgorICAgICAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfJXMnICUgY29sbGVjdGlvbiwgVHJ1ZSkgIT0gJzEnOgorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0bG9nLndhcm4oIk5vIGJiIGZpbGVzIG1hdGNoZWQgQkJGSUxFX1BBVFRFUk5fJXMgJyVzJyIgJSAoY29sbGVjdGlvbiwgcGF0dGVybikpCisKKyAgICAgICAgcmV0dXJuIHByaW9yaXRpZXMKKworY2xhc3MgUGFyc2luZ0ZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhbGV4Y2VwdGlvbiwgcmVjaXBlKToKKyAgICAgICAgc2VsZi5yZWFsZXhjZXB0aW9uID0gcmVhbGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnJlY2lwZSA9IHJlY2lwZQorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgcmVhbGV4Y2VwdGlvbiwgcmVjaXBlKQorCitjbGFzcyBGZWVkZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqb2JzLCB0b19wYXJzZXJzLCBxdWl0KToKKyAgICAgICAgc2VsZi5xdWl0ID0gcXVpdAorICAgICAgICBzZWxmLmpvYnMgPSBqb2JzCisgICAgICAgIHNlbGYudG9fcGFyc2VycyA9IHRvX3BhcnNlcnMKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcXVpdCA9IHNlbGYucXVpdC5nZXRfbm93YWl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHF1aXQgPT0gJ2NhbmNlbCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudG9fcGFyc2Vycy5jYW5jZWxfam9pbl90aHJlYWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBqb2IgPSBzZWxmLmpvYnMucG9wKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnRvX3BhcnNlcnMucHV0KGpvYiwgdGltZW91dD0wLjUpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRnVsbDoKKyAgICAgICAgICAgICAgICBzZWxmLmpvYnMuaW5zZXJ0KDAsIGpvYikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCitjbGFzcyBQYXJzZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqb2JzLCByZXN1bHRzLCBxdWl0LCBpbml0LCBwcm9maWxlKToKKyAgICAgICAgc2VsZi5qb2JzID0gam9icworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRzCisgICAgICAgIHNlbGYucXVpdCA9IHF1aXQKKyAgICAgICAgc2VsZi5pbml0ID0gaW5pdAorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNvbnRleHQgPSBiYi51dGlscy5nZXRfY29udGV4dCgpLmNvcHkoKQorICAgICAgICBzZWxmLmhhbmRsZXJzID0gYmIuZXZlbnQuZ2V0X2NsYXNzX2hhbmRsZXJzKCkuY29weSgpCisgICAgICAgIHNlbGYucHJvZmlsZSA9IHByb2ZpbGUKKworICAgIGRlZiBydW4oc2VsZik6CisKKyAgICAgICAgaWYgbm90IHNlbGYucHJvZmlsZToKKyAgICAgICAgICAgIHNlbGYucmVhbHJ1bigpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpbXBvcnQgcHJvZmlsZQorICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgc2VsZi5yZWFscnVuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZmlsZSA9ICJwcm9maWxlLXBhcnNlLSVzLmxvZyIgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGxvZ2ZpbGUpCisKKyAgICBkZWYgcmVhbHJ1bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbml0OgorICAgICAgICAgICAgc2VsZi5pbml0KCkKKworICAgICAgICBwZW5kaW5nID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnF1aXQuZ2V0X25vd2FpdCgpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBwZW5kaW5nOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBlbmRpbmcucG9wKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBqb2IgPSBzZWxmLmpvYnMuZ2V0KHRpbWVvdXQ9MC4yNSkKKyAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBqb2IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlKCpqb2IpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMucHV0KHJlc3VsdCwgdGltZW91dD0wLjI1KQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkZ1bGw6CisgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQocmVzdWx0KQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGZpbGVuYW1lLCBhcHBlbmRzLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFJlc2V0IG91ciBlbnZpcm9ubWVudCBhbmQgaGFuZGxlcnMgdG8gdGhlIG9yaWdpbmFsIHNldHRpbmdzCisgICAgICAgICAgICBiYi51dGlscy5zZXRfY29udGV4dChzZWxmLmNvbnRleHQuY29weSgpKQorICAgICAgICAgICAgYmIuZXZlbnQuc2V0X2NsYXNzX2hhbmRsZXJzKHNlbGYuaGFuZGxlcnMuY29weSgpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUsIGJiLmNhY2hlLkNhY2hlLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzLCBzZWxmLmNmZywgY2FjaGVzX2FycmF5KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KKyAgICAgICAgICAgIGV4Yy5yZWNpcGUgPSBmaWxlbmFtZQorICAgICAgICAgICAgZXhjLnRyYWNlYmFjayA9IGxpc3QoYmIuZXhjZXB0aW9ucy5leHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0zKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBleGMKKyAgICAgICAgIyBOZWVkIHRvIHR1cm4gQmFzZUV4Y2VwdGlvbnMgaW50byBFeGNlcHRpb25zIGhlcmUgc28gd2UgZ3JhY2VmdWxseSBzaHV0ZG93bgorICAgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBhIHdvcmtlciB0aHJlYWQgZG9lc24ndCBqdXN0IGV4aXQgb24gaXRzIG93biBpbiByZXNwb25zZSB0bworICAgICAgICAjIGEgU3lzdGVtRXhpdCBldmVudCBmb3IgZXhhbXBsZS4KKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgcmV0dXJuIFRydWUsIFBhcnNpbmdGYWlsdXJlKGV4YywgZmlsZW5hbWUpCisKK2NsYXNzIENvb2tlclBhcnNlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29rZXIsIGZpbGVsaXN0LCBtYXNrZWQpOgorICAgICAgICBzZWxmLmZpbGVsaXN0ID0gZmlsZWxpc3QKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5jZmdkYXRhID0gY29va2VyLmRhdGEKKyAgICAgICAgc2VsZi5jZmdoYXNoID0gY29va2VyLmRhdGFfaGFzaAorCisgICAgICAgICMgQWNjb3VudGluZyBzdGF0aXN0aWNzCisgICAgICAgIHNlbGYucGFyc2VkID0gMAorICAgICAgICBzZWxmLmNhY2hlZCA9IDAKKyAgICAgICAgc2VsZi5lcnJvciA9IDAKKyAgICAgICAgc2VsZi5tYXNrZWQgPSBtYXNrZWQKKworICAgICAgICBzZWxmLnNraXBwZWQgPSAwCisgICAgICAgIHNlbGYudmlydHVhbHMgPSAwCisgICAgICAgIHNlbGYudG90YWwgPSBsZW4oZmlsZWxpc3QpCisKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gMAorICAgICAgICBzZWxmLm51bV9wcm9jZXNzZXMgPSBpbnQoc2VsZi5jZmdkYXRhLmdldFZhcigiQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMiLCBUcnVlKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorICAgICAgICBzZWxmLnByb2Nlc3NfbmFtZXMgPSBbXQorCisgICAgICAgIHNlbGYuYmJfY2FjaGUgPSBiYi5jYWNoZS5DYWNoZShzZWxmLmNmZ2RhdGEsIHNlbGYuY2ZnaGFzaCwgY29va2VyLmNhY2hlc19hcnJheSkKKyAgICAgICAgc2VsZi5mcm9tY2FjaGUgPSBbXQorICAgICAgICBzZWxmLndpbGxwYXJzZSA9IFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLmZpbGVsaXN0OgorICAgICAgICAgICAgYXBwZW5kcyA9IHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJiX2NhY2hlLmNhY2hlVmFsaWQoZmlsZW5hbWUsIGFwcGVuZHMpOgorICAgICAgICAgICAgICAgIHNlbGYud2lsbHBhcnNlLmFwcGVuZCgoZmlsZW5hbWUsIGFwcGVuZHMsIGNvb2tlci5jYWNoZXNfYXJyYXkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZyb21jYWNoZS5hcHBlbmQoKGZpbGVuYW1lLCBhcHBlbmRzKSkKKyAgICAgICAgc2VsZi50b3BhcnNlID0gc2VsZi50b3RhbCAtIGxlbihzZWxmLmZyb21jYWNoZSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19jaHVuayA9IG1heChzZWxmLnRvcGFyc2UgLyAxMDAsIDEpCisKKyAgICAgICAgc2VsZi5zdGFydCgpCisgICAgICAgIHNlbGYuaGF2ZXNodXRkb3duID0gRmFsc2UKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gc2VsZi5sb2FkX2NhY2hlZCgpCisgICAgICAgIHNlbGYucHJvY2Vzc2VzID0gW10KKyAgICAgICAgaWYgc2VsZi50b3BhcnNlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5QYXJzZVN0YXJ0ZWQoc2VsZi50b3BhcnNlKSwgc2VsZi5jZmdkYXRhKQorICAgICAgICAgICAgZGVmIGluaXQoKToKKyAgICAgICAgICAgICAgICBQYXJzZXIuY2ZnID0gc2VsZi5jZmdkYXRhCisgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnV0aWwuRmluYWxpemUoTm9uZSwgYmIuY29kZXBhcnNlci5wYXJzZXJfY2FjaGVfc2F2ZSwgYXJncz0oc2VsZi5jZmdkYXRhLCksIGV4aXRwcmlvcml0eT0xKQorICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy51dGlsLkZpbmFsaXplKE5vbmUsIGJiLmZldGNoLmZldGNoZXJfcGFyc2Vfc2F2ZSwgYXJncz0oc2VsZi5jZmdkYXRhLCksIGV4aXRwcmlvcml0eT0xKQorCisgICAgICAgICAgICBzZWxmLmZlZWRlcl9xdWl0ID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKG1heHNpemU9MSkKKyAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUobWF4c2l6ZT1zZWxmLm51bV9wcm9jZXNzZXMpCisgICAgICAgICAgICBzZWxmLmpvYnMgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUobWF4c2l6ZT1zZWxmLm51bV9wcm9jZXNzZXMpCisgICAgICAgICAgICBzZWxmLnJlc3VsdF9xdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgICAgICBzZWxmLmZlZWRlciA9IEZlZWRlcihzZWxmLndpbGxwYXJzZSwgc2VsZi5qb2JzLCBzZWxmLmZlZWRlcl9xdWl0KQorICAgICAgICAgICAgc2VsZi5mZWVkZXIuc3RhcnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc2VsZi5udW1fcHJvY2Vzc2VzKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBQYXJzZXIoc2VsZi5qb2JzLCBzZWxmLnJlc3VsdF9xdWV1ZSwgc2VsZi5wYXJzZXJfcXVpdCwgaW5pdCwgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlKQorICAgICAgICAgICAgICAgIHBhcnNlci5zdGFydCgpCisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX25hbWVzLmFwcGVuZChwYXJzZXIubmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Nlcy5hcHBlbmQocGFyc2VyKQorCisgICAgICAgICAgICBzZWxmLnJlc3VsdHMgPSBpdGVydG9vbHMuY2hhaW4oc2VsZi5yZXN1bHRzLCBzZWxmLnBhcnNlX2dlbmVyYXRvcigpKQorCisgICAgZGVmIHNodXRkb3duKHNlbGYsIGNsZWFuPVRydWUsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYudG9wYXJzZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLmhhdmVzaHV0ZG93bjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmhhdmVzaHV0ZG93biA9IFRydWUKKworICAgICAgICBpZiBjbGVhbjoKKyAgICAgICAgICAgIGV2ZW50ID0gYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQoc2VsZi5jYWNoZWQsIHNlbGYucGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQsIHNlbGYubWFza2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZpcnR1YWxzLCBzZWxmLmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvdGFsKQorCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50LCBzZWxmLmNmZ2RhdGEpCisgICAgICAgICAgICBzZWxmLmZlZWRlcl9xdWl0LnB1dChOb25lKQorICAgICAgICAgICAgZm9yIHByb2Nlc3MgaW4gc2VsZi5wcm9jZXNzZXM6CisgICAgICAgICAgICAgICAgc2VsZi5qb2JzLnB1dChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mZWVkZXJfcXVpdC5wdXQoJ2NhbmNlbCcpCisKKyAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKyAgICAgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQucHV0KE5vbmUpCisKKyAgICAgICAgICAgIHNlbGYuam9icy5jYW5jZWxfam9pbl90aHJlYWQoKQorCisgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHJvY2Vzc2VzOgorICAgICAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICAgICAgcHJvY2Vzcy5qb2luKC4xKQorICAgICAgICAgICAgICAgIHByb2Nlc3MudGVybWluYXRlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvY2Vzcy5qb2luKCkKKyAgICAgICAgc2VsZi5mZWVkZXIuam9pbigpCisKKyAgICAgICAgc3luYyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuYmJfY2FjaGUuc3luYykKKyAgICAgICAgc3luYy5zdGFydCgpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy51dGlsLkZpbmFsaXplKE5vbmUsIHN5bmMuam9pbiwgZXhpdHByaW9yaXR5PS0xMDApCisgICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX3NhdmVtZXJnZShzZWxmLmNvb2tlci5kYXRhKQorICAgICAgICBiYi5mZXRjaC5mZXRjaGVyX3BhcnNlX2RvbmUoc2VsZi5jb29rZXIuZGF0YSkKKyAgICAgICAgaWYgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlOgorICAgICAgICAgICAgcHJvZmlsZXMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5wcm9jZXNzX25hbWVzOgorICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSAicHJvZmlsZS1wYXJzZS0lcy5sb2ciICUgaQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBwcm9maWxlcy5hcHBlbmQobG9nZmlsZSkKKworICAgICAgICAgICAgcG91dCA9ICJwcm9maWxlLXBhcnNlLmxvZy5wcm9jZXNzZWQiCisgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZmlsZXMsIHBvdXQgPSBwb3V0KQorICAgICAgICAgICAgcHJpbnQoIlByb2Nlc3NlZCBwYXJzaW5nIHN0YXRpc3RpY3Mgc2F2ZWQgdG8gJXMiICUgKHBvdXQpKQorCisgICAgZGVmIGxvYWRfY2FjaGVkKHNlbGYpOgorICAgICAgICBmb3IgZmlsZW5hbWUsIGFwcGVuZHMgaW4gc2VsZi5mcm9tY2FjaGU6CisgICAgICAgICAgICBjYWNoZWQsIGluZm9zID0gc2VsZi5iYl9jYWNoZS5sb2FkKGZpbGVuYW1lLCBhcHBlbmRzLCBzZWxmLmNmZ2RhdGEpCisgICAgICAgICAgICB5aWVsZCBub3QgY2FjaGVkLCBpbmZvcworCisgICAgZGVmIHBhcnNlX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VkID49IHNlbGYudG9wYXJzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5yZXN1bHRfcXVldWUuZ2V0KHRpbWVvdXQ9MC4yNSkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0WzFdCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgQmFzZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisKKyAgICBkZWYgcGFyc2VfbmV4dChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgcGFyc2VkID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZWQsIHJlc3VsdCA9IHNlbGYucmVzdWx0cy5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBzZWxmLnNodXRkb3duKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgKz0gMQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgcmVjaXBlOiAlcycgJSBleGMucmVjaXBlKQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgUGFyc2luZ0ZhaWx1cmUgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgIChleGMucmVjaXBlLCBiYi5leGNlcHRpb25zLnRvX3N0cmluZyhleGMucmVhbGV4Y2VwdGlvbikpKQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgYmIucGFyc2UuUGFyc2VFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBfLCB2YWx1ZSwgXyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0V4cGFuc2lvbkVycm9yIGR1cmluZyBwYXJzaW5nICVzOiAlcycsIHZhbHVlLnJlY2lwZSwgc3RyKGV4YykpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duKGNsZWFuPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHBhcnNlICVzJywgZXhjLnJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgaGFzYXR0cih2YWx1ZSwgInJlY2lwZSIpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHBhcnNlICVzJywgdmFsdWUucmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShldHlwZSwgdmFsdWUsIGV4Yy50cmFjZWJhY2spKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE1vc3QgbGlrZWx5LCBhbiBleGNlcHRpb24gb2NjdXJyZWQgZHVyaW5nIHJhaXNpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXhjZXB0aW9uIGR1cmluZyBwYXJzZTogJXMnICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmN1cnJlbnQgKz0gMQorICAgICAgICBzZWxmLnZpcnR1YWxzICs9IGxlbihyZXN1bHQpCisgICAgICAgIGlmIHBhcnNlZDoKKyAgICAgICAgICAgIHNlbGYucGFyc2VkICs9IDEKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VkICUgc2VsZi5wcm9ncmVzc19jaHVuayA9PSAwOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyhzZWxmLnBhcnNlZCwgc2VsZi50b3BhcnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2ZnZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2FjaGVkICs9IDEKKworICAgICAgICBmb3IgdmlydHVhbGZuLCBpbmZvX2FycmF5IGluIHJlc3VsdDoKKyAgICAgICAgICAgIGlmIGluZm9fYXJyYXlbMF0uc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnNraXBsaXN0W3ZpcnR1YWxmbl0gPSBTa2lwcGVkUGFja2FnZShpbmZvX2FycmF5WzBdKQorICAgICAgICAgICAgc2VsZi5iYl9jYWNoZS5hZGRfaW5mbyh2aXJ0dWFsZm4sIGluZm9fYXJyYXksIHNlbGYuY29va2VyLnJlY2lwZWNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZD1wYXJzZWQsIHdhdGNoZXIgPSBzZWxmLmNvb2tlci5hZGRfZmlsZXdhdGNoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlcGFyc2Uoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBpbmZvcyA9IHNlbGYuYmJfY2FjaGUucGFyc2UoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZmdkYXRhLCBzZWxmLmNvb2tlci5jYWNoZXNfYXJyYXkpCisgICAgICAgIGZvciB2Zm4sIGluZm9fYXJyYXkgaW4gaW5mb3M6CisgICAgICAgICAgICBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZS5hZGRfZnJvbV9yZWNpcGVpbmZvKHZmbiwgaW5mb19hcnJheSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTljMjgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MsIHN5cworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tIGJiIGltcG9ydCBkYXRhCitpbXBvcnQgYmIucGFyc2UKKworbG9nZ2VyICAgICAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCitwYXJzZWxvZyAgICA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBhcnNpbmciKQorCitjbGFzcyBDb25maWdQYXJhbWV0ZXJzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3Y9c3lzLmFyZ3YpOgorICAgICAgICBzZWxmLm9wdGlvbnMsIHRhcmdldHMgPSBzZWxmLnBhcnNlQ29tbWFuZExpbmUoYXJndikKKyAgICAgICAgc2VsZi5lbnZpcm9ubWVudCA9IHNlbGYucGFyc2VFbnZpcm9ubWVudCgpCisKKyAgICAgICAgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQgPSB0YXJnZXRzIG9yIFtdCisKKyAgICAgICAgc2VsZi5vcHRpb25zLnRyYWNraW5nID0gRmFsc2UKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLm9wdGlvbnMsICJzaG93X2Vudmlyb25tZW50IikgYW5kIHNlbGYub3B0aW9ucy5zaG93X2Vudmlyb25tZW50OgorICAgICAgICAgICAgc2VsZi5vcHRpb25zLnRyYWNraW5nID0gVHJ1ZQorCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBzZWxmLm9wdGlvbnMuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWwpCisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYWxsZXIgbXVzdCBpbXBsZW1lbnQgY29tbWFuZGxpbmUgb3B0aW9uIHBhcnNpbmciKQorCisgICAgZGVmIHBhcnNlRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgZGVmIHVwZGF0ZUZyb21TZXJ2ZXIoc2VsZiwgc2VydmVyKToKKyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5jbWQ6CisgICAgICAgICAgICBkZWZhdWx0dGFzaywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0RFRkFVTFRfVEFTSyJdKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQl9ERUZBVUxUX1RBU0sgZnJvbSB0aGUgc2VydmVyOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIHNlbGYub3B0aW9ucy5jbWQgPSBkZWZhdWx0dGFzayBvciAiYnVpbGQiCisgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRDb25maWciLCAiY21kIiwgc2VsZi5vcHRpb25zLmNtZF0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gc2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9uICdjbWQnIG9uIHRoZSBzZXJ2ZXI6ICVzIiAlIGVycm9yKQorCisgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgIGJicGtncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCUEtHUyJdKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQlBLR1MgZnJvbSB0aGUgc2VydmVyOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIGlmIGJicGtnczoKKyAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZC5leHRlbmQoYmJwa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgdXBkYXRlVG9TZXJ2ZXIoc2VsZiwgc2VydmVyLCBlbnZpcm9ubWVudCk6CisgICAgICAgIG9wdGlvbnMgPSB7fQorICAgICAgICBmb3IgbyBpbiBbImFib3J0IiwgInRyeWFsdGNvbmZpZ3MiLCAiZm9yY2UiLCAiaW52YWxpZGF0ZV9zdGFtcCIsIAorICAgICAgICAgICAgICAgICAgInZlcmJvc2UiLCAiZGVidWciLCAiZHJ5X3J1biIsICJkdW1wX3NpZ25hdHVyZXMiLCAKKyAgICAgICAgICAgICAgICAgICJkZWJ1Z19kb21haW5zIiwgImV4dHJhX2Fzc3VtZV9wcm92aWRlZCIsICJwcm9maWxlIiwKKyAgICAgICAgICAgICAgICAgICJwcmVmaWxlIiwgInBvc3RmaWxlIl06CisgICAgICAgICAgICBvcHRpb25zW29dID0gZ2V0YXR0cihzZWxmLm9wdGlvbnMsIG8pCisKKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsidXBkYXRlQ29uZmlnIiwgb3B0aW9ucywgZW52aXJvbm1lbnRdKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuYWJsZSB0byB1cGRhdGUgdGhlIHNlcnZlciBjb25maWd1cmF0aW9uIHdpdGggbG9jYWwgcGFyYW1ldGVyczogJXMiICUgZXJyb3IpCisKKyAgICBkZWYgcGFyc2VBY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFBhcnNlIGFueSBjb21tYW5kbGluZSBpbnRvIGFjdGlvbnMKKyAgICAgICAgYWN0aW9uID0geydhY3Rpb24nOk5vbmUsICdtc2cnOk5vbmV9CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5zaG93X2Vudmlyb25tZW50OgorICAgICAgICAgICAgaWYgJ3dvcmxkJyBpbiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIid3b3JsZCcgaXMgbm90IGEgdmFsaWQgdGFyZ2V0IGZvciAtLWVudmlyb25tZW50LiIKKyAgICAgICAgICAgIGVsaWYgJ3VuaXZlcnNlJyBpbiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIid1bml2ZXJzZScgaXMgbm90IGEgdmFsaWQgdGFyZ2V0IGZvciAtLWVudmlyb25tZW50LiIKKyAgICAgICAgICAgIGVsaWYgbGVuKHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkKSA+IDE6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICJPbmx5IG9uZSB0YXJnZXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudCBvcHRpb24uIgorICAgICAgICAgICAgZWxpZiBzZWxmLm9wdGlvbnMuYnVpbGRmaWxlIGFuZCBsZW4oc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQpID4gMDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIk5vIHRhcmdldCBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSAtLWVudmlyb25tZW50IGFuZCAtLWJ1aWxkZmlsZSBvcHRpb25zLiIKKyAgICAgICAgICAgIGVsaWYgbGVuKHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkKSA+IDA6CisgICAgICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsic2hvd0Vudmlyb25tZW50VGFyZ2V0Iiwgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGRdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbInNob3dFbnZpcm9ubWVudCIsIHNlbGYub3B0aW9ucy5idWlsZGZpbGVdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmJ1aWxkZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImJ1aWxkRmlsZSIsIHNlbGYub3B0aW9ucy5idWlsZGZpbGUsIHNlbGYub3B0aW9ucy5jbWRdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnJldmlzaW9uc19jaGFuZ2VkOgorICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsiY29tcGFyZVJldmlzaW9ucyJdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnNob3dfdmVyc2lvbnM6CisgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbiddID0gWyJzaG93VmVyc2lvbnMiXQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5wYXJzZV9vbmx5OgorICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsicGFyc2VGaWxlcyJdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmRvdF9ncmFwaDoKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImdlbmVyYXRlRG90R3JhcGgiLCBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZCwgc2VsZi5vcHRpb25zLmNtZF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICJQbGVhc2Ugc3BlY2lmeSBhIHBhY2thZ2UgbmFtZSBmb3IgZGVwZW5kZW5jeSBncmFwaCBnZW5lcmF0aW9uLiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImJ1aWxkVGFyZ2V0cyIsIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkLCBzZWxmLm9wdGlvbnMuY21kXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjYWN0aW9uWydtc2cnXSA9ICJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIgorICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5vcHRpb25zLmluaXRpYWxhY3Rpb24gPSBhY3Rpb24KKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCitjbGFzcyBDb29rZXJDb25maWd1cmF0aW9uKG9iamVjdCk6CisgICAgIiIiCisgICAgTWFuYWdlcyBidWlsZCBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9ucyBmb3Igb25lIHJ1bgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRlYnVnX2RvbWFpbnMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX2Fzc3VtZV9wcm92aWRlZCA9IFtdCisgICAgICAgIHNlbGYucHJlZmlsZSA9IFtdCisgICAgICAgIHNlbGYucG9zdGZpbGUgPSBbXQorICAgICAgICBzZWxmLmRlYnVnID0gMAorICAgICAgICBzZWxmLmNtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5hYm9ydCA9IFRydWUKKyAgICAgICAgc2VsZi5mb3JjZSA9IEZhbHNlCisgICAgICAgIHNlbGYucHJvZmlsZSA9IEZhbHNlCisgICAgICAgIHNlbGYubm9zZXRzY2VuZSA9IEZhbHNlCisgICAgICAgIHNlbGYuaW52YWxpZGF0ZV9zdGFtcCA9IEZhbHNlCisgICAgICAgIHNlbGYuZHVtcF9zaWduYXR1cmVzID0gW10KKyAgICAgICAgc2VsZi5kcnlfcnVuID0gRmFsc2UKKyAgICAgICAgc2VsZi50cmFja2luZyA9IEZhbHNlCisgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gW10KKyAgICAgICAgc2VsZi53cml0ZWV2ZW50bG9nID0gRmFsc2UKKworICAgICAgICBzZWxmLmVudiA9IHt9CisKKyAgICBkZWYgc2V0Q29uZmlnUGFyYW1ldGVycyhzZWxmLCBwYXJhbWV0ZXJzKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9fZGljdF9fLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBpbiBwYXJhbWV0ZXJzLm9wdGlvbnMuX19kaWN0X186CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHBhcmFtZXRlcnMub3B0aW9ucy5fX2RpY3RfX1trZXldKQorICAgICAgICBzZWxmLmVudiA9IHBhcmFtZXRlcnMuZW52aXJvbm1lbnQuY29weSgpCisgICAgICAgIHNlbGYudHJhY2tpbmcgPSBwYXJhbWV0ZXJzLnRyYWNraW5nCisKKyAgICBkZWYgc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlbGYsIHNyY2IpOgorICAgICAgICBzZWxmLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2sgPSBzcmNiCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IHt9CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fX2RpY3RfXy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gInNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2siOgorICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSBnZXRhdHRyKHNlbGYsIGtleSkKKyAgICAgICAgcmV0dXJuIHN0YXRlCisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsc3RhdGUpOgorICAgICAgICBmb3IgayBpbiBzdGF0ZToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgc3RhdGVba10pIAorCisKK2RlZiBjYXRjaF9wYXJzZV9lcnJvcihmdW5jKToKKyAgICAiIiJFeGNlcHRpb24gaGFuZGxpbmcgYml0cyBmb3Igb3VyIHBhcnNpbmciIiIKKyAgICBAd3JhcHMoZnVuYykKKyAgICBkZWYgd3JhcHBlZChmbiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnVuYyhmbiwgKmFyZ3MpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgIHBhcnNlbG9nLmNyaXRpY2FsKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCgiVW5hYmxlIHRvIHBhcnNlICVzOiAlcyIgJSAoZm4sIGV4YykpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBleGNlcHQgKGJiLnBhcnNlLlBhcnNlRXJyb3IsIGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKworICAgICAgICAgICAgYmJkaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgb3Muc2VwCisgICAgICAgICAgICBleGNfY2xhc3MsIGV4YywgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZm9yIHRiIGluIGl0ZXIobGFtYmRhOiB0Yi50Yl9uZXh0LCBOb25lKToKKyAgICAgICAgICAgICAgICAjIFNraXAgZnJhbWVzIGluIGJpdGJha2UgaXRzZWxmLCB3ZSBvbmx5IHdhbnQgdGhlIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgZm4sIF8sIF8sIF8gPSB0cmFjZWJhY2suZXh0cmFjdF90Yih0YiwgMSlbMF0KKyAgICAgICAgICAgICAgICBpZiBub3QgZm4uc3RhcnRzd2l0aChiYmRpcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCgiVW5hYmxlIHRvIHBhcnNlICVzIiwgZm4sIGV4Y19pbmZvPShleGNfY2xhc3MsIGV4YywgdGIpKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICByZXR1cm4gd3JhcHBlZAorCitAY2F0Y2hfcGFyc2VfZXJyb3IKK2RlZiBwYXJzZV9jb25maWdfZmlsZShmbiwgZGF0YSwgaW5jbHVkZT1UcnVlKToKKyAgICByZXR1cm4gYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBpbmNsdWRlKQorCitAY2F0Y2hfcGFyc2VfZXJyb3IKK2RlZiBfaW5oZXJpdChiYmNsYXNzLCBkYXRhKToKKyAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChiYmNsYXNzLCAiY29uZmlndXJhdGlvbiBJTkhFUklUcyIsIDAsIGRhdGEpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIGZpbmRDb25maWdGaWxlKGNvbmZpZ2ZpbGUsIGRhdGEpOgorICAgIHNlYXJjaCA9IFtdCisgICAgYmJwYXRoID0gZGF0YS5nZXRWYXIoIkJCUEFUSCIsIFRydWUpCisgICAgaWYgYmJwYXRoOgorICAgICAgICBmb3IgaSBpbiBiYnBhdGguc3BsaXQoIjoiKToKKyAgICAgICAgICAgIHNlYXJjaC5hcHBlbmQob3MucGF0aC5qb2luKGksICJjb25mIiwgY29uZmlnZmlsZSkpCisgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgd2hpbGUgcGF0aCAhPSAiLyI6CisgICAgICAgIHNlYXJjaC5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsICJjb25mIiwgY29uZmlnZmlsZSkpCisgICAgICAgIHBhdGgsIF8gPSBvcy5wYXRoLnNwbGl0KHBhdGgpCisKKyAgICBmb3IgaSBpbiBzZWFyY2g6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGkpOgorICAgICAgICAgICAgcmV0dXJuIGkKKworICAgIHJldHVybiBOb25lCisKK2NsYXNzIENvb2tlckRhdGFCdWlsZGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyY2ZnLCB3b3JrZXIgPSBGYWxzZSk6CisKKyAgICAgICAgc2VsZi5wcmVmaWxlcyA9IGNvb2tlcmNmZy5wcmVmaWxlCisgICAgICAgIHNlbGYucG9zdGZpbGVzID0gY29va2VyY2ZnLnBvc3RmaWxlCisgICAgICAgIHNlbGYudHJhY2tpbmcgPSBjb29rZXJjZmcudHJhY2tpbmcKKworICAgICAgICBiYi51dGlscy5zZXRfY29udGV4dChiYi51dGlscy5jbGVhbl9jb250ZXh0KCkpCisgICAgICAgIGJiLmV2ZW50LnNldF9jbGFzc19oYW5kbGVycyhiYi5ldmVudC5jbGVhbl9jbGFzc19oYW5kbGVycygpKQorICAgICAgICBzZWxmLmRhdGEgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBpZiBzZWxmLnRyYWNraW5nOgorICAgICAgICAgICAgc2VsZi5kYXRhLmVuYWJsZVRyYWNraW5nKCkKKworICAgICAgICAjIEtlZXAgYSBkYXRhc3RvcmUgb2YgdGhlIGluaXRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGVpcgorICAgICAgICAjIHZhbHVlcyBmcm9tIHdoZW4gQml0QmFrZSB3YXMgbGF1bmNoZWQgdG8gZW5hYmxlIGNoaWxkIHByb2Nlc3NlcworICAgICAgICAjIHRvIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggaGF2ZSBiZWVuIGNsZWFuZWQgZnJvbSB0aGUKKyAgICAgICAgIyBCaXRCYWtlIHByb2Nlc3NlcyBlbnYKKyAgICAgICAgc2VsZi5zYXZlZGVudiA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIGZvciBrIGluIGNvb2tlcmNmZy5lbnY6CisgICAgICAgICAgICBzZWxmLnNhdmVkZW52LnNldFZhcihrLCBjb29rZXJjZmcuZW52W2tdKQorCisgICAgICAgIGZpbHRlcmVkX2tleXMgPSBiYi51dGlscy5hcHByb3ZlZF92YXJpYWJsZXMoKQorICAgICAgICBiYi5kYXRhLmluaGVyaXRGcm9tT1Moc2VsZi5kYXRhLCBzZWxmLnNhdmVkZW52LCBmaWx0ZXJlZF9rZXlzKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJCQl9PUklHRU5WIiwgc2VsZi5zYXZlZGVudikKKyAgICAgICAgCisgICAgICAgIGlmIHdvcmtlcjoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJCX1dPUktFUkNPTlRFWFQiLCAiMSIpCisKKyAgICBkZWYgcGFyc2VCYXNlQ29uZmlndXJhdGlvbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcykKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMiKQorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisKKyAgICBkZWYgX2ZpbmRMYXllckNvbmYoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBmaW5kQ29uZmlnRmlsZSgiYmJsYXllcnMuY29uZiIsIGRhdGEpCisKKyAgICBkZWYgcGFyc2VDb25maWd1cmF0aW9uRmlsZXMoc2VsZiwgcHJlZmlsZXMsIHBvc3RmaWxlcyk6CisgICAgICAgIGRhdGEgPSBzZWxmLmRhdGEKKyAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIoZGF0YSkKKworICAgICAgICAjIFBhcnNlIGZpbGVzIGZvciBsb2FkaW5nICpiZWZvcmUqIGJpdGJha2UuY29uZiBhbmQgYW55IGluY2x1ZGVzCisgICAgICAgIGZvciBmIGluIHByZWZpbGVzOgorICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKGYsIGRhdGEpCisKKyAgICAgICAgbGF5ZXJjb25mID0gc2VsZi5fZmluZExheWVyQ29uZihkYXRhKQorICAgICAgICBpZiBsYXllcmNvbmY6CisgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiRm91bmQgYmJsYXllcnMuY29uZiAoJXMpIiwgbGF5ZXJjb25mKQorICAgICAgICAgICAgIyBCeSBkZWZpbml0aW9uIGJibGF5ZXJzLmNvbmYgaXMgaW4gY29uZi8gb2YgVE9QRElSLgorICAgICAgICAgICAgIyBXZSBtYXkgaGF2ZSBiZWVuIGNhbGxlZCB3aXRoIGN3ZCBzb21ld2hlcmUgZWxzZSBzbyByZXNldCBUT1BESVIKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJUT1BESVIiLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKGxheWVyY29uZikpKQorICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKGxheWVyY29uZiwgZGF0YSkKKworICAgICAgICAgICAgbGF5ZXJzID0gKGRhdGEuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZGF0YSkKKyAgICAgICAgICAgIGFwcHJvdmVkID0gYmIudXRpbHMuYXBwcm92ZWRfdmFyaWFibGVzKCkKKyAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMiwgIkFkZGluZyBsYXllciAlcyIsIGxheWVyKQorICAgICAgICAgICAgICAgIGlmICdIT01FJyBpbiBhcHByb3ZlZCBhbmQgJ34nIGluIGxheWVyOgorICAgICAgICAgICAgICAgICAgICBsYXllciA9IG9zLnBhdGguZXhwYW5kdXNlcihsYXllcikKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcignTEFZRVJESVInLCBsYXllcikKKyAgICAgICAgICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUob3MucGF0aC5qb2luKGxheWVyLCAiY29uZiIsICJsYXllci5jb25mIiksIGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YS5leHBhbmRWYXJyZWYoJ0xBWUVSRElSJykKKworICAgICAgICAgICAgZGF0YS5kZWxWYXIoJ0xBWUVSRElSJykKKworICAgICAgICBpZiBub3QgZGF0YS5nZXRWYXIoIkJCUEFUSCIsIFRydWUpOgorICAgICAgICAgICAgbXNnID0gIlRoZSBCQlBBVEggdmFyaWFibGUgaXMgbm90IHNldCIKKyAgICAgICAgICAgIGlmIG5vdCBsYXllcmNvbmY6CisgICAgICAgICAgICAgICAgbXNnICs9ICgiIGFuZCBiaXRiYWtlIGRpZCBub3QgZmluZCBhIGNvbmYvYmJsYXllcnMuY29uZiBmaWxlIGluIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uXG5NYXliZSB5b3UgYWNjaWRlbnRhbGx5IgorICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2VkIGJpdGJha2UgZnJvbSB0aGUgd3JvbmcgZGlyZWN0b3J5PyIpCisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KG1zZykKKworICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUob3MucGF0aC5qb2luKCJjb25mIiwgImJpdGJha2UuY29uZiIpLCBkYXRhKQorCisgICAgICAgICMgUGFyc2UgZmlsZXMgZm9yIGxvYWRpbmcgKmFmdGVyKiBiaXRiYWtlLmNvbmYgYW5kIGFueSBpbmNsdWRlcworICAgICAgICBmb3IgcCBpbiBwb3N0ZmlsZXM6CisgICAgICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUocCwgZGF0YSkKKworICAgICAgICAjIEhhbmRsZSBhbnkgSU5IRVJJVHMgYW5kIGluaGVyaXQgdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgYmJjbGFzc2VzICA9IFsiYmFzZSJdICsgKGRhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGJiY2xhc3MgaW4gYmJjbGFzc2VzOgorICAgICAgICAgICAgZGF0YSA9IF9pbmhlcml0KGJiY2xhc3MsIGRhdGEpCisKKyAgICAgICAgIyBOb21hbGx5IHdlIG9ubHkgcmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMgYXQgdGhlIGVuZCBvZiBwYXJzaW5nIC5iYiBmaWxlcworICAgICAgICAjIFdlIHJlZ2lzdGVyIGFueSBoYW5kbGVycyB3ZSd2ZSBmb3VuZCBzbyBmYXIgaGVyZS4uLgorICAgICAgICBmb3IgdmFyIGluIGRhdGEuZ2V0VmFyKCdfX0JCSEFORExFUlMnLCBGYWxzZSkgb3IgW106CisgICAgICAgICAgICBiYi5ldmVudC5yZWdpc3Rlcih2YXIsIGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpLCAgKGRhdGEuZ2V0VmFyRmxhZyh2YXIsICJldmVudG1hc2siLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgYmIuZmV0Y2guZmV0Y2hlcl9pbml0KGRhdGEpCisgICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX2luaXQoZGF0YSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdQYXJzZWQoKSwgZGF0YSkKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSkgaXMgVHJ1ZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9JTlZBTElEQ09ORiIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKGRhdGEpCisgICAgICAgIGRhdGEuc2V0VmFyKCdCQklOQ0xVREVEJyxiYi5wYXJzZS5nZXRfZmlsZV9kZXBlbmRzKGRhdGEpKQorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gZGF0YS5nZXRfaGFzaCgpCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGFlbW9uaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmE2MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weQpAQCAtMCwwICsxLDE5MyBAQAorIiIiCitQeXRob24gRGFlbW9uaXppbmcgaGVscGVyCisKK0NvbmZpZ3VyYWJsZSBkYWVtb24gYmVoYXZpb3JzOgorCisgICAgMS4pIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNldCB0byB0aGUgIi8iIGRpcmVjdG9yeS4KKyAgICAyLikgVGhlIGN1cnJlbnQgZmlsZSBjcmVhdGlvbiBtb2RlIG1hc2sgc2V0IHRvIDAuCisgICAgMy4pIENsb3NlIGFsbCBvcGVuIGZpbGVzICgxMDI0KS4gCisgICAgNC4pIFJlZGlyZWN0IHN0YW5kYXJkIEkvTyBzdHJlYW1zIHRvICIvZGV2L251bGwiLgorCitBIGZhaWxlZCBjYWxsIHRvIGZvcmsoKSBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworUmVmZXJlbmNlczoKKyAgICAxKSBBZHZhbmNlZCBQcm9ncmFtbWluZyBpbiB0aGUgVW5peCBFbnZpcm9ubWVudDogVy4gUmljaGFyZCBTdGV2ZW5zCisJaHR0cDovL3d3dy5hcHVlYm9vay5jb20vYXB1ZTNlLmh0bWwKKyAgICAyKSBUaGUgTGludXggUHJvZ3JhbW1pbmcgSW50ZXJmYWNlOiBNaWNoYWVsIEtlcnJpc2sKKwlodHRwOi8vbWFuNy5vcmcvdGxwaS9pbmRleC5odG1sCisgICAgMykgVW5peCBQcm9ncmFtbWluZyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczoKKwlodHRwOi8vd3d3LmZhcXMub3JnL2ZhcXMvdW5peC1mYXEvcHJvZ3JhbW1lci9mYXEvCisKK01vZGlmaWVkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gYmUgZGFlbW9uaXplZCBhbmQgcmV0dXJuIGZvciAKK2JpdGJha2UgdXNlIGJ5IFJpY2hhcmQgUHVyZGllCisiIiIKKworX19hdXRob3JfXyA9ICJDaGFkIEouIFNjaHJvZWRlciIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChDKSAyMDA1IENoYWQgSi4gU2Nocm9lZGVyIgorX192ZXJzaW9uX18gPSAiMC4yIgorCisjIFN0YW5kYXJkIFB5dGhvbiBtb2R1bGVzLgoraW1wb3J0IG9zICAgICAgICAgICAgICAgICAgICAjIE1pc2NlbGxhbmVvdXMgT1MgaW50ZXJmYWNlcy4KK2ltcG9ydCBzeXMgICAgICAgICAgICAgICAgICAgIyBTeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25zLgorCisjIERlZmF1bHQgZGFlbW9uIHBhcmFtZXRlcnMuCisjIEZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrIG9mIHRoZSBkYWVtb24uCisjIEZvciBCaXRCYWtlJ3MgY2hpbGRyZW4sIHdlIGRvIHdhbnQgdG8gaW5oZXJpdCB0aGUgcGFyZW50IHVtYXNrLgorVU1BU0sgPSBOb25lCisKKyMgRGVmYXVsdCBtYXhpbXVtIGZvciB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3JzLgorTUFYRkQgPSAxMDI0CisKKyMgVGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWRpcmVjdGVkIHRvIC9kZXYvbnVsbCBieSBkZWZhdWx0LgoraWYgKGhhc2F0dHIob3MsICJkZXZudWxsIikpOgorICAgIFJFRElSRUNUX1RPID0gb3MuZGV2bnVsbAorZWxzZToKKyAgICBSRURJUkVDVF9UTyA9ICIvZGV2L251bGwiCisKK2RlZiBjcmVhdGVEYWVtb24oZnVuY3Rpb24sIGxvZ2ZpbGUpOgorICAgICIiIgorICAgIERldGFjaCBhIHByb2Nlc3MgZnJvbSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgYW5kIHJ1biBpdCBpbiB0aGUKKyAgICBiYWNrZ3JvdW5kIGFzIGEgZGFlbW9uLCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgY2FsbGVyLgorICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICAjIEZvcmsgYSBjaGlsZCBwcm9jZXNzIHNvIHRoZSBwYXJlbnQgY2FuIGV4aXQuICBUaGlzIHJldHVybnMgY29udHJvbCB0bworICAgICAgICAjIHRoZSBjb21tYW5kLWxpbmUgb3Igc2hlbGwuICBJdCBhbHNvIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2hpbGQgd2lsbCBub3QKKyAgICAgICAgIyBiZSBhIHByb2Nlc3MgZ3JvdXAgbGVhZGVyLCBzaW5jZSB0aGUgY2hpbGQgcmVjZWl2ZXMgYSBuZXcgcHJvY2VzcyBJRAorICAgICAgICAjIGFuZCBpbmhlcml0cyB0aGUgcGFyZW50J3MgcHJvY2VzcyBncm91cCBJRC4gIFRoaXMgc3RlcCBpcyByZXF1aXJlZAorICAgICAgICAjIHRvIGluc3VyZSB0aGF0IHRoZSBuZXh0IGNhbGwgdG8gb3Muc2V0c2lkIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCisKKyAgICBpZiAocGlkID09IDApOiAgICAgICMgVGhlIGZpcnN0IGNoaWxkLgorICAgICAgICAjIFRvIGJlY29tZSB0aGUgc2Vzc2lvbiBsZWFkZXIgb2YgdGhpcyBuZXcgc2Vzc2lvbiBhbmQgdGhlIHByb2Nlc3MgZ3JvdXAKKyAgICAgICAgIyBsZWFkZXIgb2YgdGhlIG5ldyBwcm9jZXNzIGdyb3VwLCB3ZSBjYWxsIG9zLnNldHNpZCgpLiAgVGhlIHByb2Nlc3MgaXMKKyAgICAgICAgIyBhbHNvIGd1YXJhbnRlZWQgbm90IHRvIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgb3Muc2V0c2lkKCkKKworICAgICAgICAjIElzIGlnbm9yaW5nIFNJR0hVUCBuZWNlc3Nhcnk/CisgICAgICAgICMKKyAgICAgICAgIyBJdCdzIG9mdGVuIHN1Z2dlc3RlZCB0aGF0IHRoZSBTSUdIVVAgc2lnbmFsIHNob3VsZCBiZSBpZ25vcmVkIGJlZm9yZQorICAgICAgICAjIHRoZSBzZWNvbmQgZm9yayB0byBhdm9pZCBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlIHByb2Nlc3MuICBUaGUKKyAgICAgICAgIyByZWFzb24gaXMgdGhhdCB3aGVuIHRoZSBmaXJzdCBjaGlsZCB0ZXJtaW5hdGVzLCBhbGwgcHJvY2Vzc2VzLCBlLmcuCisgICAgICAgICMgdGhlIHNlY29uZCBjaGlsZCwgaW4gdGhlIG9ycGhhbmVkIGdyb3VwIHdpbGwgYmUgc2VudCBhIFNJR0hVUC4KKyAgICAgICAgIworICAgICAgICAjICJIb3dldmVyLCBhcyBwYXJ0IG9mIHRoZSBzZXNzaW9uIG1hbmFnZW1lbnQgc3lzdGVtLCB0aGVyZSBhcmUgZXhhY3RseQorICAgICAgICAjIHR3byBjYXNlcyB3aGVyZSBTSUdIVVAgaXMgc2VudCBvbiB0aGUgZGVhdGggb2YgYSBwcm9jZXNzOgorICAgICAgICAjCisgICAgICAgICMgICAgMSkgV2hlbiB0aGUgcHJvY2VzcyB0aGF0IGRpZXMgaXMgdGhlIHNlc3Npb24gbGVhZGVyIG9mIGEgc2Vzc2lvbiB0aGF0CisgICAgICAgICMgICAgICAgIGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwgZGV2aWNlLCBTSUdIVVAgaXMgc2VudCB0byBhbGwgcHJvY2Vzc2VzCisgICAgICAgICMgICAgICAgIGluIHRoZSBmb3JlZ3JvdW5kIHByb2Nlc3MgZ3JvdXAgb2YgdGhhdCB0ZXJtaW5hbCBkZXZpY2UuCisgICAgICAgICMgICAgMikgV2hlbiB0aGUgZGVhdGggb2YgYSBwcm9jZXNzIGNhdXNlcyBhIHByb2Nlc3MgZ3JvdXAgdG8gYmVjb21lCisgICAgICAgICMgICAgICAgIG9ycGhhbmVkLCBhbmQgb25lIG9yIG1vcmUgcHJvY2Vzc2VzIGluIHRoZSBvcnBoYW5lZCBncm91cCBhcmUKKyAgICAgICAgIyAgICAgICAgc3RvcHBlZCwgdGhlbiBTSUdIVVAgYW5kIFNJR0NPTlQgYXJlIHNlbnQgdG8gYWxsIG1lbWJlcnMgb2YgdGhlCisgICAgICAgICMgICAgICAgIG9ycGhhbmVkIGdyb3VwLiIgWzJdCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgZmlyc3QgY2FzZSBjYW4gYmUgaWdub3JlZCBzaW5jZSB0aGUgY2hpbGQgaXMgZ3VhcmFudGVlZCBub3QgdG8gaGF2ZQorICAgICAgICAjIGEgY29udHJvbGxpbmcgdGVybWluYWwuICBUaGUgc2Vjb25kIGNhc2UgaXNuJ3Qgc28gZWFzeSB0byBkaXNtaXNzLgorICAgICAgICAjIFRoZSBwcm9jZXNzIGdyb3VwIGlzIG9ycGhhbmVkIHdoZW4gdGhlIGZpcnN0IGNoaWxkIHRlcm1pbmF0ZXMgYW5kCisgICAgICAgICMgUE9TSVguMSByZXF1aXJlcyB0aGF0IGV2ZXJ5IFNUT1BQRUQgcHJvY2VzcyBpbiBhbiBvcnBoYW5lZCBwcm9jZXNzCisgICAgICAgICMgZ3JvdXAgYmUgc2VudCBhIFNJR0hVUCBzaWduYWwgZm9sbG93ZWQgYnkgYSBTSUdDT05UIHNpZ25hbC4gIFNpbmNlIHRoZQorICAgICAgICAjIHNlY29uZCBjaGlsZCBpcyBub3QgU1RPUFBFRCB0aG91Z2gsIHdlIGNhbiBzYWZlbHkgZm9yZWdvIGlnbm9yaW5nIHRoZQorICAgICAgICAjIFNJR0hVUCBzaWduYWwuICBJbiBhbnkgY2FzZSwgdGhlcmUgYXJlIG5vIGlsbC1lZmZlY3RzIGlmIGl0IGlzIGlnbm9yZWQuCisgICAgICAgICMKKyAgICAgICAgIyBpbXBvcnQgc2lnbmFsICAgICAgICAgICAgICAjIFNldCBoYW5kbGVycyBmb3IgYXN5bmNocm9ub3VzIGV2ZW50cy4KKyAgICAgICAgIyBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRm9yayBhIHNlY29uZCBjaGlsZCBhbmQgZXhpdCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IHpvbWJpZXMuICBUaGlzCisgICAgICAgICAgICAjIGNhdXNlcyB0aGUgc2Vjb25kIGNoaWxkIHByb2Nlc3MgdG8gYmUgb3JwaGFuZWQsIG1ha2luZyB0aGUgaW5pdAorICAgICAgICAgICAgIyBwcm9jZXNzIHJlc3BvbnNpYmxlIGZvciBpdHMgY2xlYW51cC4gIEFuZCwgc2luY2UgdGhlIGZpcnN0IGNoaWxkIGlzCisgICAgICAgICAgICAjIGEgc2Vzc2lvbiBsZWFkZXIgd2l0aG91dCBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLCBpdCdzIHBvc3NpYmxlIGZvcgorICAgICAgICAgICAgIyBpdCB0byBhY3F1aXJlIG9uZSBieSBvcGVuaW5nIGEgdGVybWluYWwgaW4gdGhlIGZ1dHVyZSAoU3lzdGVtIFYtCisgICAgICAgICAgICAjIGJhc2VkIHN5c3RlbXMpLiAgVGhpcyBzZWNvbmQgZm9yayBndWFyYW50ZWVzIHRoYXQgdGhlIGNoaWxkIGlzIG5vCisgICAgICAgICAgICAjIGxvbmdlciBhIHNlc3Npb24gbGVhZGVyLCBwcmV2ZW50aW5nIHRoZSBkYWVtb24gZnJvbSBldmVyIGFjcXVpcmluZworICAgICAgICAgICAgIyBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpICAgICAjIEZvcmsgYSBzZWNvbmQgY2hpbGQuCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgICAgIGlmIChwaWQgPT0gMCk6ICAjIFRoZSBzZWNvbmQgY2hpbGQuCisgICAgICAgICAgICAjIFdlIHByb2JhYmx5IGRvbid0IHdhbnQgdGhlIGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrIGluaGVyaXRlZCBmcm9tCisgICAgICAgICAgICAjIHRoZSBwYXJlbnQsIHNvIHdlIGdpdmUgdGhlIGNoaWxkIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciBwZXJtaXNzaW9ucy4KKyAgICAgICAgICAgIGlmIFVNQVNLIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG9zLnVtYXNrKFVNQVNLKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQYXJlbnQgKHRoZSBmaXJzdCBjaGlsZCkgb2YgdGhlIHNlY29uZCBjaGlsZC4KKyAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgZWxzZToKKyAgICAgICAgIyBleGl0KCkgb3IgX2V4aXQoKT8KKyAgICAgICAgIyBfZXhpdCBpcyBsaWtlIGV4aXQoKSwgYnV0IGl0IGRvZXNuJ3QgY2FsbCBhbnkgZnVuY3Rpb25zIHJlZ2lzdGVyZWQKKyAgICAgICAgIyB3aXRoIGF0ZXhpdCAoYW5kIG9uX2V4aXQpIG9yIGFueSByZWdpc3RlcmVkIHNpZ25hbCBoYW5kbGVycy4gIEl0IGFsc28KKyAgICAgICAgIyBjbG9zZXMgYW55IG9wZW4gZmlsZSBkZXNjcmlwdG9ycy4gIFVzaW5nIGV4aXQoKSBtYXkgY2F1c2UgYWxsIHN0ZGlvCisgICAgICAgICMgc3RyZWFtcyB0byBiZSBmbHVzaGVkIHR3aWNlIGFuZCBhbnkgdGVtcG9yYXJ5IGZpbGVzIG1heSBiZSB1bmV4cGVjdGVkbHkKKyAgICAgICAgIyByZW1vdmVkLiAgSXQncyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdGhhdCBjaGlsZCBicmFuY2hlcyBvZiBhIGZvcmsoKQorICAgICAgICAjIGFuZCB0aGUgcGFyZW50IGJyYW5jaChlcykgb2YgYSBkYWVtb24gdXNlIF9leGl0KCkuCisgICAgICAgIHJldHVybgorCisgICAgIyBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzLiAgVGhpcyBwcmV2ZW50cyB0aGUgY2hpbGQgZnJvbSBrZWVwaW5nCisgICAgIyBvcGVuIGFueSBmaWxlIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQuICBUaGVyZSBpcyBhIHZhcmlldHkKKyAgICAjIG9mIG1ldGhvZHMgdG8gYWNjb21wbGlzaCB0aGlzIHRhc2suICBUaHJlZSBhcmUgbGlzdGVkIGJlbG93LgorICAgICMKKyAgICAjIFRyeSB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIFNDX09QRU5fTUFYLCB0byBvYnRhaW4gdGhlIG1heGltdW0KKyAgICAjIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgdG8gY2xvc2UuICBJZiBpdCBkb2Vzbid0IGV4aXN0LCB1c2UKKyAgICAjIHRoZSBkZWZhdWx0IHZhbHVlIChjb25maWd1cmFibGUpLgorICAgICMKKyAgICAjIHRyeToKKyAgICAjICAgICBtYXhmZCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKKyAgICAjIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICMgICAgIG1heGZkID0gTUFYRkQKKyAgICAjCisgICAgIyBPUgorICAgICMKKyAgICAjIGlmIChvcy5zeXNjb25mX25hbWVzLmhhc19rZXkoIlNDX09QRU5fTUFYIikpOgorICAgICMgICAgIG1heGZkID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorICAgICMgZWxzZToKKyAgICAjICAgICBtYXhmZCA9IE1BWEZECisgICAgIworICAgICMgT1IKKyAgICAjCisgICAgIyBVc2UgdGhlIGdldHJsaW1pdCBtZXRob2QgdG8gcmV0cmlldmUgdGhlIG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIG51bWJlcgorICAgICMgdGhhdCBjYW4gYmUgb3BlbmVkIGJ5IHRoaXMgcHJvY2Vzcy4gIElmIHRoZXJlIGlzIG5vIGxpbWl0IG9uIHRoZQorICAgICMgcmVzb3VyY2UsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAgICAjCisgICAgaW1wb3J0IHJlc291cmNlICAgICAgICAgICAgICMgUmVzb3VyY2UgdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgbWF4ZmQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSlbMV0KKyAgICBpZiAobWF4ZmQgPT0gcmVzb3VyY2UuUkxJTV9JTkZJTklUWSk6CisgICAgICAgIG1heGZkID0gTUFYRkQKKyAgCisgICAgIyBJdGVyYXRlIHRocm91Z2ggYW5kIGNsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzLgorIyAgICBmb3IgZmQgaW4gcmFuZ2UoMCwgbWF4ZmQpOgorIyAgICAgICAgdHJ5OgorIyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorIyAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAgICAgICAjIEVSUk9SLCBmZCB3YXNuJ3Qgb3BlbiB0byBiZWdpbiB3aXRoIChpZ25vcmVkKQorIyAgICAgICAgICAgIHBhc3MKKworICAgICMgUmVkaXJlY3QgdGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIFNpbmNlCisgICAgIyB0aGUgZGFlbW9uIGhhcyBubyBjb250cm9sbGluZyB0ZXJtaW5hbCwgbW9zdCBkYWVtb25zIHJlZGlyZWN0IHN0ZGluLAorICAgICMgc3Rkb3V0LCBhbmQgc3RkZXJyIHRvIC9kZXYvbnVsbC4gIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpZGUtZWZmZWN0cworICAgICMgZnJvbSByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBJL08gZmlsZSBkZXNjcmlwdG9ycy4KKworICAgICMgVGhpcyBjYWxsIHRvIG9wZW4gaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIGxvd2VzdCBmaWxlIGRlc2NyaXB0b3IsCisgICAgIyB3aGljaCB3aWxsIGJlIDAgKHN0ZGluKSwgc2luY2UgaXQgd2FzIGNsb3NlZCBhYm92ZS4KKyMgICAgb3Mub3BlbihSRURJUkVDVF9UTywgb3MuT19SRFdSKSAgICAjIHN0YW5kYXJkIGlucHV0ICgwKQorCisgICAgIyBEdXBsaWNhdGUgc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvci4KKyMgICAgb3MuZHVwMigwLCAxKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIG91dHB1dCAoMSkKKyMgICAgb3MuZHVwMigwLCAyKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIGVycm9yICgyKQorCisKKyAgICBzaSA9IGZpbGUoJy9kZXYvbnVsbCcsICdyJykKKyAgICBzbyA9IGZpbGUobG9nZmlsZSwgJ3cnKQorICAgIHNlID0gc28KKworCisgICAgIyBSZXBsYWNlIHRob3NlIGZkcyB3aXRoIG91ciBvd24KKyAgICBvcy5kdXAyKHNpLmZpbGVubygpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgb3MuZHVwMihzby5maWxlbm8oKSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICBvcy5kdXAyKHNlLmZpbGVubygpLCBzeXMuc3RkZXJyLmZpbGVubygpKQorCisgICAgZnVuY3Rpb24oKQorCisgICAgb3MuX2V4aXQoMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQxNWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9kYXRhLnB5CkBAIC0wLDAgKzEsNDQ2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdEYXRhJyBpbXBsZW1lbnRhdGlvbnMKKworRnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworVGhlIGV4cGFuZEtleXMgYW5kIHVwZGF0ZV9kYXRhIGFyZSB0aGUgbW9zdCBleHBlbnNpdmUKK29wZXJhdGlvbnMuIEF0IG5pZ2h0IHRoZSBjb29raWUgbW9uc3RlciBjYW1lIGJ5IGFuZAorc3VnZ2VzdGVkICdnaXZlIG1lIGNvb2tpZXMgb24gc2V0dGluZyB0aGUgdmFyaWFibGVzIGFuZAordGhpbmdzIHdpbGwgd29yayBvdXQnLiBUYWtpbmcgdGhpcyBzdWdnZXN0aW9uIGludG8gYWNjb3VudAorYXBwbHlpbmcgdGhlIHNraWxscyBmcm9tIHRoZSBub3QgeWV0IHBhc3NlZCAnRW50d3VyZiB1bmQKK0FuYWx5c2Ugdm9uIEFsZ29yaXRobWVuJyBsZWN0dXJlIGFuZCB0aGUgY29va2llCittb25zdGVyIHNlZW1zIHRvIGJlIHJpZ2h0LiBXZSB3aWxsIHRyYWNrIHNldFZhciBtb3JlIGNhcmVmdWxseQordG8gaGF2ZSBmYXN0ZXIgdXBkYXRlX2RhdGEgYW5kIGV4cGFuZEtleXMgb3BlcmF0aW9ucy4KKworVGhpcyBpcyBhIHRyYWRlLW9mZiBiZXR3ZWVuIHNwZWVkIGFuZCBtZW1vcnkgYWdhaW4gYnV0Cit0aGUgc3BlZWQgaXMgbW9yZSBjcml0aWNhbCBoZXJlLgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgc3lzLCBvcywgcmUKK2lmIHN5cy5hcmd2WzBdWy01Ol0gPT0gInB5ZG9jIjoKKyAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlsxXSkpCitlbHNlOgorICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSkKK3N5cy5wYXRoLmluc2VydCgwLCBwYXRoKQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGdyb3VwYnkKKworZnJvbSBiYiBpbXBvcnQgZGF0YV9zbWFydAorZnJvbSBiYiBpbXBvcnQgY29kZXBhcnNlcgoraW1wb3J0IGJiCisKK2xvZ2dlciA9IGRhdGFfc21hcnQubG9nZ2VyCitfZGljdF90eXBlID0gZGF0YV9zbWFydC5EYXRhU21hcnQKKworZGVmIGluaXQoKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQml0YmFrZSBkYXRhIiIiCisgICAgcmV0dXJuIF9kaWN0X3R5cGUoKQorCitkZWYgaW5pdF9kYihwYXJlbnQgPSBOb25lKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQml0YmFrZSBkYXRhLAorICAgIG9wdGlvbmFsbHkgYmFzZWQgb24gYW4gZXhpc3Rpbmcgb2JqZWN0IiIiCisgICAgaWYgcGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcGFyZW50LmNyZWF0ZUNvcHkoKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBfZGljdF90eXBlKCkKKworZGVmIGNyZWF0ZUNvcHkoc291cmNlKToKKyAgICAiIiJMaW5rIHRoZSBzb3VyY2Ugc2V0IHRvIHRoZSBkZXN0aW5hdGlvbgorICAgIElmIG9uZSBkb2VzIG5vdCBmaW5kIHRoZSB2YWx1ZSBpbiB0aGUgZGVzdGluYXRpb24gc2V0LAorICAgIHNlYXJjaCB3aWxsIGdvIG9uIHRvIHRoZSBzb3VyY2Ugc2V0IHRvIGdldCB0aGUgdmFsdWUuCisgICAgVmFsdWUgZnJvbSBzb3VyY2UgYXJlIGNvcHktb24td3JpdGUuIGkuZS4gYW55IHRyeSB0bworICAgIG1vZGlmeSBvbmUgb2YgdGhlbSB3aWxsIGVuZCB1cCBwdXR0aW5nIHRoZSBtb2RpZmllZCB2YWx1ZQorICAgIGluIHRoZSBkZXN0aW5hdGlvbiBzZXQuCisgICAgIiIiCisgICAgcmV0dXJuIHNvdXJjZS5jcmVhdGVDb3B5KCkKKworZGVmIGluaXRWYXIodmFyLCBkKToKKyAgICAiIiJOb24tZGVzdHJ1Y3RpdmUgdmFyIGluaXQgZm9yIGRhdGEgc3RydWN0dXJlIiIiCisgICAgZC5pbml0VmFyKHZhcikKKworCitkZWYgc2V0VmFyKHZhciwgdmFsdWUsIGQpOgorICAgICIiIlNldCBhIHZhcmlhYmxlIHRvIGEgZ2l2ZW4gdmFsdWUiIiIKKyAgICBkLnNldFZhcih2YXIsIHZhbHVlKQorCisKK2RlZiBnZXRWYXIodmFyLCBkLCBleHAgPSBGYWxzZSk6CisgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSIiIgorICAgIHJldHVybiBkLmdldFZhcih2YXIsIGV4cCkKKworCitkZWYgcmVuYW1lVmFyKGtleSwgbmV3a2V5LCBkKToKKyAgICAiIiJSZW5hbWVzIGEgdmFyaWFibGUgZnJvbSBrZXkgdG8gbmV3a2V5IiIiCisgICAgZC5yZW5hbWVWYXIoa2V5LCBuZXdrZXkpCisKK2RlZiBkZWxWYXIodmFyLCBkKToKKyAgICAiIiJSZW1vdmVzIGEgdmFyaWFibGUgZnJvbSB0aGUgZGF0YSBzZXQiIiIKKyAgICBkLmRlbFZhcih2YXIpCisKK2RlZiBhcHBlbmRWYXIodmFyLCB2YWx1ZSwgZCk6CisgICAgIiIiQXBwZW5kIGFkZGl0aW9uYWwgdmFsdWUgdG8gYSB2YXJpYWJsZSIiIgorICAgIGQuYXBwZW5kVmFyKHZhciwgdmFsdWUpCisKK2RlZiBzZXRWYXJGbGFnKHZhciwgZmxhZywgZmxhZ3ZhbHVlLCBkKToKKyAgICAiIiJTZXQgYSBmbGFnIGZvciBhIGdpdmVuIHZhcmlhYmxlIHRvIGEgZ2l2ZW4gdmFsdWUiIiIKKyAgICBkLnNldFZhckZsYWcodmFyLCBmbGFnLCBmbGFndmFsdWUpCisKK2RlZiBnZXRWYXJGbGFnKHZhciwgZmxhZywgZCk6CisgICAgIiIiR2V0cyBnaXZlbiBmbGFnIGZyb20gZ2l2ZW4gdmFyIiIiCisgICAgcmV0dXJuIGQuZ2V0VmFyRmxhZyh2YXIsIGZsYWcpCisKK2RlZiBkZWxWYXJGbGFnKHZhciwgZmxhZywgZCk6CisgICAgIiIiUmVtb3ZlcyBhIGdpdmVuIGZsYWcgZnJvbSB0aGUgdmFyaWFibGUncyBmbGFncyIiIgorICAgIGQuZGVsVmFyRmxhZyh2YXIsIGZsYWcpCisKK2RlZiBzZXRWYXJGbGFncyh2YXIsIGZsYWdzLCBkKToKKyAgICAiIiJTZXQgdGhlIGZsYWdzIGZvciBhIGdpdmVuIHZhcmlhYmxlCisKKyAgICBOb3RlOgorICAgICAgICBzZXRWYXJGbGFncyB3aWxsIG5vdCBjbGVhciBwcmV2aW91cworICAgICAgICBmbGFncy4gVGhpbmsgb2YgdGhpcyBtZXRob2QgYXMKKyAgICAgICAgYWRkVmFyRmxhZ3MKKyAgICAiIiIKKyAgICBkLnNldFZhckZsYWdzKHZhciwgZmxhZ3MpCisKK2RlZiBnZXRWYXJGbGFncyh2YXIsIGQpOgorICAgICIiIkdldHMgYSB2YXJpYWJsZSdzIGZsYWdzIiIiCisgICAgcmV0dXJuIGQuZ2V0VmFyRmxhZ3ModmFyKQorCitkZWYgZGVsVmFyRmxhZ3ModmFyLCBkKToKKyAgICAiIiJSZW1vdmVzIGEgdmFyaWFibGUncyBmbGFncyIiIgorICAgIGQuZGVsVmFyRmxhZ3ModmFyKQorCitkZWYga2V5cyhkKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGtleXMgaW4gZCIiIgorICAgIHJldHVybiBkLmtleXMoKQorCisKK19fZXhwYW5kX3Zhcl9yZWdleHBfXyA9IHJlLmNvbXBpbGUociJcJHtbXnt9XSt9IikKK19fZXhwYW5kX3B5dGhvbl9yZWdleHBfXyA9IHJlLmNvbXBpbGUociJcJHtALis/fSIpCisKK2RlZiBleHBhbmQocywgZCwgdmFybmFtZSA9IE5vbmUpOgorICAgICIiIlZhcmlhYmxlIGV4cGFuc2lvbiB1c2luZyB0aGUgZGF0YSBzdG9yZSIiIgorICAgIHJldHVybiBkLmV4cGFuZChzLCB2YXJuYW1lKQorCitkZWYgZXhwYW5kS2V5cyhhbHRlcmRhdGEsIHJlYWRkYXRhID0gTm9uZSk6CisgICAgaWYgcmVhZGRhdGEgPT0gTm9uZToKKyAgICAgICAgcmVhZGRhdGEgPSBhbHRlcmRhdGEKKworICAgIHRvZG9saXN0ID0ge30KKyAgICBmb3Iga2V5IGluIGFsdGVyZGF0YToKKyAgICAgICAgaWYgbm90ICckeycgaW4ga2V5OgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBla2V5ID0gZXhwYW5kKGtleSwgcmVhZGRhdGEpCisgICAgICAgIGlmIGtleSA9PSBla2V5OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdG9kb2xpc3Rba2V5XSA9IGVrZXkKKworICAgICMgVGhlc2UgdHdvIGZvciBsb29wcyBhcmUgc3BsaXQgZm9yIHBlcmZvcm1hbmNlIHRvIG1heGltaXNlIHRoZQorICAgICMgdXNlZnVsbmVzcyBvZiB0aGUgZXhwYW5kIGNhY2hlCisgICAgZm9yIGtleSBpbiBzb3J0ZWQodG9kb2xpc3QpOgorICAgICAgICBla2V5ID0gdG9kb2xpc3Rba2V5XQorICAgICAgICBuZXd2YWwgPSBhbHRlcmRhdGEuZ2V0VmFyKGVrZXksIEZhbHNlKQorICAgICAgICBpZiBuZXd2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWwgPSBhbHRlcmRhdGEuZ2V0VmFyKGtleSwgRmFsc2UpCisgICAgICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIud2FybigiVmFyaWFibGUga2V5ICVzICglcykgcmVwbGFjZXMgb3JpZ2luYWwga2V5ICVzICglcykuIiAlIChrZXksIHZhbCwgZWtleSwgbmV3dmFsKSkKKyAgICAgICAgYWx0ZXJkYXRhLnJlbmFtZVZhcihrZXksIGVrZXkpCisKK2RlZiBpbmhlcml0RnJvbU9TKGQsIHNhdmVkZW52LCBwZXJtaXR0ZWQpOgorICAgICIiIkluaGVyaXQgdmFyaWFibGVzIGZyb20gdGhlIGluaXRpYWwgZW52aXJvbm1lbnQuIiIiCisgICAgZXhwb3J0bGlzdCA9IGJiLnV0aWxzLnByZXNlcnZlZF9lbnZ2YXJzX2V4cG9ydGVkKCkKKyAgICBmb3IgcyBpbiBzYXZlZGVudi5rZXlzKCk6CisgICAgICAgIGlmIHMgaW4gcGVybWl0dGVkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKHMsIHNhdmVkZW52LmdldFZhcihzLCBUcnVlKSwgb3AgPSAnZnJvbSBlbnYnKQorICAgICAgICAgICAgICAgIGlmIHMgaW4gZXhwb3J0bGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKHMsICJleHBvcnQiLCBUcnVlLCBvcCA9ICdhdXRvIGVudiBleHBvcnQnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKK2RlZiBlbWl0X3Zhcih2YXIsIG89c3lzLl9fc3Rkb3V0X18sIGQgPSBpbml0KCksIGFsbD1GYWxzZSk6CisgICAgIiIiRW1pdCBhIHZhcmlhYmxlIHRvIGJlIHNvdXJjZWQgYnkgYSBzaGVsbC4iIiIKKyAgICBpZiBkLmdldFZhckZsYWcodmFyLCAicHl0aG9uIik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZXhwb3J0ID0gZC5nZXRWYXJGbGFnKHZhciwgImV4cG9ydCIpCisgICAgdW5leHBvcnQgPSBkLmdldFZhckZsYWcodmFyLCAidW5leHBvcnQiKQorICAgIGZ1bmMgPSBkLmdldFZhckZsYWcodmFyLCAiZnVuYyIpCisgICAgaWYgbm90IGFsbCBhbmQgbm90IGV4cG9ydCBhbmQgbm90IHVuZXhwb3J0IGFuZCBub3QgZnVuYzoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICB0cnk6CisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIG92YWwgPSBkLmdldFZhcih2YXIsIEZhbHNlKQorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgYmIuYnVpbGQuRnVuY0ZhaWxlZCk6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIG8ud3JpdGUoJyMgZXhwYW5zaW9uIG9mICVzIHRocmV3ICVzOiAlc1xuJyAlICh2YXIsIGV4Yy5fX2NsYXNzX18uX19uYW1lX18sIHN0cihleGMpKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBhbGw6CisgICAgICAgIGQudmFyaGlzdG9yeS5lbWl0KHZhciwgb3ZhbCwgdmFsLCBvLCBkKQorCisgICAgaWYgKHZhci5maW5kKCItIikgIT0gLTEgb3IgdmFyLmZpbmQoIi4iKSAhPSAtMSBvciB2YXIuZmluZCgneycpICE9IC0xIG9yIHZhci5maW5kKCd9JykgIT0gLTEgb3IgdmFyLmZpbmQoJysnKSAhPSAtMSkgYW5kIG5vdCBhbGw6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgdmFyRXhwYW5kZWQgPSBkLmV4cGFuZCh2YXIpCisKKyAgICBpZiB1bmV4cG9ydDoKKyAgICAgICAgby53cml0ZSgndW5zZXQgJXNcbicgJSB2YXJFeHBhbmRlZCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICB2YWwgPSBzdHIodmFsKQorCisgICAgaWYgdmFyRXhwYW5kZWQuc3RhcnRzd2l0aCgiQkFTSF9GVU5DXyIpOgorICAgICAgICB2YXJFeHBhbmRlZCA9IHZhckV4cGFuZGVkWzEwOi0yXQorICAgICAgICB2YWwgPSB2YWxbMzpdICMgU3RyaXAgb2ZmICIoKSAiCisgICAgICAgIG8ud3JpdGUoIiVzKCkgJXNcbiIgJSAodmFyRXhwYW5kZWQsIHZhbCkpCisgICAgICAgIG8ud3JpdGUoImV4cG9ydCAtZiAlc1xuIiAlICh2YXJFeHBhbmRlZCkpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBmdW5jOgorICAgICAgICAjIE5PVEU6IHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgdW5iYWxhbmNlZCB7fSB3aXRoaW4gdGhlIHZhcgorICAgICAgICBvLndyaXRlKCIlcygpIHtcbiVzXG59XG4iICUgKHZhckV4cGFuZGVkLCB2YWwpKQorICAgICAgICByZXR1cm4gMQorCisgICAgaWYgZXhwb3J0OgorICAgICAgICBvLndyaXRlKCdleHBvcnQgJykKKworICAgICMgaWYgd2UncmUgZ29pbmcgdG8gb3V0cHV0IHRoaXMgd2l0aGluIGRvdWJsZXF1b3RlcywKKyAgICAjIHRvIGEgc2hlbGwsIHdlIG5lZWQgdG8gZXNjYXBlIHRoZSBxdW90ZXMgaW4gdGhlIHZhcgorICAgIGFsdGVyID0gcmUuc3ViKCciJywgJ1xcIicsIHZhbCkKKyAgICBhbHRlciA9IHJlLnN1YignXG4nLCAnIFxcXG4nLCBhbHRlcikKKyAgICBhbHRlciA9IHJlLnN1YignXFwkJywgJ1xcXFwkJywgYWx0ZXIpCisgICAgby53cml0ZSgnJXM9IiVzIlxuJyAlICh2YXJFeHBhbmRlZCwgYWx0ZXIpKQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZW1pdF9lbnYobz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSwgYWxsPUZhbHNlKToKKyAgICAiIiJFbWl0cyBhbGwgaXRlbXMgaW4gdGhlIGRhdGEgc3RvcmUgaW4gYSBmb3JtYXQgc3VjaCB0aGF0IGl0IGNhbiBiZSBzb3VyY2VkIGJ5IGEgc2hlbGwuIiIiCisKKyAgICBpc2Z1bmMgPSBsYW1iZGEga2V5OiBib29sKGQuZ2V0VmFyRmxhZyhrZXksICJmdW5jIikpCisgICAga2V5cyA9IHNvcnRlZCgoa2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKSwga2V5PWlzZnVuYykKKyAgICBncm91cGVkID0gZ3JvdXBieShrZXlzLCBpc2Z1bmMpCisgICAgZm9yIGlzZnVuYywga2V5cyBpbiBncm91cGVkOgorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBlbWl0X3ZhcihrZXksIG8sIGQsIGFsbCBhbmQgbm90IGlzZnVuYykgYW5kIG8ud3JpdGUoJ1xuJykKKworZGVmIGV4cG9ydGVkX2tleXMoZCk6CisgICAgcmV0dXJuIChrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoJ19fJykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyRmxhZyhrZXksICdleHBvcnQnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGQuZ2V0VmFyRmxhZyhrZXksICd1bmV4cG9ydCcpKQorCitkZWYgZXhwb3J0ZWRfdmFycyhkKToKKyAgICBmb3Iga2V5IGluIGV4cG9ydGVkX2tleXMoZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQga2V5LCBzdHIodmFsdWUpCisKK2RlZiBlbWl0X2Z1bmMoZnVuYywgbz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSk6CisgICAgIiIiRW1pdHMgYWxsIGl0ZW1zIGluIHRoZSBkYXRhIHN0b3JlIGluIGEgZm9ybWF0IHN1Y2ggdGhhdCBpdCBjYW4gYmUgc291cmNlZCBieSBhIHNoZWxsLiIiIgorCisgICAga2V5cyA9IChrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoIl9fIikgYW5kIG5vdCBkLmdldFZhckZsYWcoa2V5LCAiZnVuYyIpKQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgZW1pdF92YXIoa2V5LCBvLCBkLCBGYWxzZSkKKworICAgIG8ud3JpdGUoJ1xuJykKKyAgICBlbWl0X3ZhcihmdW5jLCBvLCBkLCBGYWxzZSkgYW5kIG8ud3JpdGUoJ1xuJykKKyAgICBuZXdkZXBzID0gYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcihmdW5jLCBsb2dnZXIpLnBhcnNlX3NoZWxsKGQuZ2V0VmFyKGZ1bmMsIFRydWUpKQorICAgIG5ld2RlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZnVuYywgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICBzZWVuID0gc2V0KCkKKyAgICB3aGlsZSBuZXdkZXBzOgorICAgICAgICBkZXBzID0gbmV3ZGVwcworICAgICAgICBzZWVuIHw9IGRlcHMKKyAgICAgICAgbmV3ZGVwcyA9IHNldCgpCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhkZXAsICJmdW5jIikgYW5kIG5vdCBkLmdldFZhckZsYWcoZGVwLCAicHl0aG9uIik6CisgICAgICAgICAgICAgICBlbWl0X3ZhcihkZXAsIG8sIGQsIEZhbHNlKSBhbmQgby53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSAgYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcihkZXAsIGxvZ2dlcikucGFyc2Vfc2hlbGwoZC5nZXRWYXIoZGVwLCBUcnVlKSkKKyAgICAgICAgICAgICAgIG5ld2RlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZGVwLCAidmFyZGVwcyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICBuZXdkZXBzIC09IHNlZW4KKworX2Z1bmN0aW9uZm10ID0gIiIiCitkZWYge2Z1bmN0aW9ufShkKToKK3tib2R5fSIiIgorCitkZWYgZW1pdF9mdW5jX3B5dGhvbihmdW5jLCBvPXN5cy5fX3N0ZG91dF9fLCBkID0gaW5pdCgpKToKKyAgICAiIiJFbWl0cyBhbGwgaXRlbXMgaW4gdGhlIGRhdGEgc3RvcmUgaW4gYSBmb3JtYXQgc3VjaCB0aGF0IGl0IGNhbiBiZSBzb3VyY2VkIGJ5IGEgc2hlbGwuIiIiCisKKyAgICBkZWYgd3JpdGVfZnVuYyhmdW5jLCBvLCBjYWxsID0gRmFsc2UpOgorICAgICAgICBib2R5ID0gZC5nZXRWYXIoZnVuYywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGJvZHkuc3RhcnRzd2l0aCgiZGVmIik6CisgICAgICAgICAgICBib2R5ID0gX2Z1bmN0aW9uZm10LmZvcm1hdChmdW5jdGlvbj1mdW5jLCBib2R5PWJvZHkpCisKKyAgICAgICAgby53cml0ZShib2R5LnN0cmlwKCkgKyAiXG5cbiIpCisgICAgICAgIGlmIGNhbGw6CisgICAgICAgICAgICBvLndyaXRlKGZ1bmMgKyAiKGQpIiArICJcblxuIikKKworICAgIHdyaXRlX2Z1bmMoZnVuYywgbywgVHJ1ZSkKKyAgICBwcCA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKGZ1bmMsIGxvZ2dlcikKKyAgICBwcC5wYXJzZV9weXRob24oZC5nZXRWYXIoZnVuYywgVHJ1ZSkpCisgICAgbmV3ZGVwcyA9IHBwLmV4ZWNzCisgICAgbmV3ZGVwcyB8PSBzZXQoKGQuZ2V0VmFyRmxhZyhmdW5jLCAidmFyZGVwcyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgIHNlZW4gPSBzZXQoKQorICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgIGRlcHMgPSBuZXdkZXBzCisgICAgICAgIHNlZW4gfD0gZGVwcworICAgICAgICBuZXdkZXBzID0gc2V0KCkKKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGRlcCwgImZ1bmMiKSBhbmQgZC5nZXRWYXJGbGFnKGRlcCwgInB5dGhvbiIpOgorICAgICAgICAgICAgICAgd3JpdGVfZnVuYyhkZXAsIG8pCisgICAgICAgICAgICAgICBwcCA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKGRlcCwgbG9nZ2VyKQorICAgICAgICAgICAgICAgcHAucGFyc2VfcHl0aG9uKGQuZ2V0VmFyKGRlcCwgVHJ1ZSkpCisgICAgICAgICAgICAgICBuZXdkZXBzIHw9IHBwLmV4ZWNzCisgICAgICAgICAgICAgICBuZXdkZXBzIHw9IHNldCgoZC5nZXRWYXJGbGFnKGRlcCwgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgbmV3ZGVwcyAtPSBzZWVuCisKK2RlZiB1cGRhdGVfZGF0YShkKToKKyAgICAiIiJQZXJmb3JtcyBmaW5hbCBzdGVwcyB1cG9uIHRoZSBkYXRhc3RvcmUsIGluY2x1ZGluZyBhcHBsaWNhdGlvbiBvZiBvdmVycmlkZXMiIiIKKyAgICBkLmZpbmFsaXplKHBhcmVudCA9IFRydWUpCisKK2RlZiBidWlsZF9kZXBlbmRlbmNpZXMoa2V5LCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCk6CisgICAgZGVwcyA9IHNldCgpCisgICAgdHJ5OgorICAgICAgICBpZiBrZXlbLTFdID09ICddJzoKKyAgICAgICAgICAgIHZmID0ga2V5WzotMV0uc3BsaXQoJ1snKQorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhckZsYWcodmZbMF0sIHZmWzFdLCBGYWxzZSkKKyAgICAgICAgICAgIHBhcnNlciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKKyAgICAgICAgICAgIGRlcHMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgKGtleXMgJiBwYXJzZXIuZXhlY3MpCisgICAgICAgICAgICByZXR1cm4gZGVwcywgdmFsdWUKKyAgICAgICAgdmFyZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSwgWyJ2YXJkZXBzIiwgInZhcmRlcHZhbHVlIiwgInZhcmRlcHNleGNsdWRlIiwgInZhcmRlcHZhbHVlZXhjbHVkZSIsICJwb3N0ZnVuY3MiLCAicHJlZnVuY3MiXSkgb3Ige30KKyAgICAgICAgdmFyZGVwcyA9IHZhcmZsYWdzLmdldCgidmFyZGVwcyIpCisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBGYWxzZSkKKworICAgICAgICBkZWYgaGFuZGxlX2NvbnRhaW5zKHZhbHVlLCBjb250YWlucywgZCk6CisgICAgICAgICAgICBuZXd2YWx1ZSA9ICIiCisgICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWQoY29udGFpbnMpOgorICAgICAgICAgICAgICAgIGwgPSAoZC5nZXRWYXIoaywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBmb3Igd29yZCBpbiBzb3J0ZWQoY29udGFpbnNba10pOgorICAgICAgICAgICAgICAgICAgICBpZiB3b3JkIGluIGw6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSArPSAiXG4lc3slc30gPSBTZXQiICUgIChrLCB3b3JkKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgKz0gIlxuJXN7JXN9ID0gVW5zZXQiICUgIChrLCB3b3JkKQorICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBuZXd2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgbmV3dmFsdWUKKworICAgICAgICBpZiAidmFyZGVwdmFsdWUiIGluIHZhcmZsYWdzOgorICAgICAgICAgICB2YWx1ZSA9IHZhcmZsYWdzLmdldCgidmFyZGVwdmFsdWUiKQorICAgICAgICBlbGlmIHZhcmZsYWdzLmdldCgiZnVuYyIpOgorICAgICAgICAgICAgaWYgdmFyZmxhZ3MuZ2V0KCJweXRob24iKToKKyAgICAgICAgICAgICAgICBwYXJzZWR2YXIgPSBkLmV4cGFuZFdpdGhSZWZzKHZhbHVlLCBrZXkpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5QeXRob25QYXJzZXIoa2V5LCBsb2dnZXIpCisgICAgICAgICAgICAgICAgaWYgcGFyc2VkdmFyLnZhbHVlIGFuZCAiXHQiIGluIHBhcnNlZHZhci52YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlZhcmlhYmxlICVzIGNvbnRhaW5zIHRhYnMsIHBsZWFzZSByZW1vdmUgdGhlc2UgKCVzKSIgJSAoa2V5LCBkLmdldFZhcigiRklMRSIsIFRydWUpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfcHl0aG9uKHBhcnNlZHZhci52YWx1ZSkKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVfY29udGFpbnModmFsdWUsIHBhcnNlci5jb250YWlucywgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VkdmFyID0gZC5leHBhbmRXaXRoUmVmcyh2YWx1ZSwga2V5KQorICAgICAgICAgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoa2V5LCBsb2dnZXIpCisgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX3NoZWxsKHBhcnNlZHZhci52YWx1ZSkKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHNoZWxsZGVwcworICAgICAgICAgICAgaWYgdmFyZGVwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBhcnNlci5sb2cuZmx1c2goKQorICAgICAgICAgICAgaWYgInByZWZ1bmNzIiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHNldCh2YXJmbGFnc1sicHJlZnVuY3MiXS5zcGxpdCgpKQorICAgICAgICAgICAgaWYgInBvc3RmdW5jcyIgaW4gdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBzZXQodmFyZmxhZ3NbInBvc3RmdW5jcyJdLnNwbGl0KCkpCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHBhcnNlZHZhci5yZWZlcmVuY2VzCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IChrZXlzICYgcGFyc2VyLmV4ZWNzKSB8IChrZXlzICYgcGFyc2VkdmFyLmV4ZWNzKQorICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVfY29udGFpbnModmFsdWUsIHBhcnNlZHZhci5jb250YWlucywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKKyAgICAgICAgICAgIGRlcHMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgKGtleXMgJiBwYXJzZXIuZXhlY3MpCisgICAgICAgICAgICB2YWx1ZSA9IGhhbmRsZV9jb250YWlucyh2YWx1ZSwgcGFyc2VyLmNvbnRhaW5zLCBkKQorCisgICAgICAgIGlmICJ2YXJkZXB2YWx1ZWV4Y2x1ZGUiIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgZXhjbHVkZSA9IHZhcmZsYWdzLmdldCgidmFyZGVwdmFsdWVleGNsdWRlIikKKyAgICAgICAgICAgIGZvciBleGNsIGluIGV4Y2x1ZGUuc3BsaXQoJ3wnKToKKyAgICAgICAgICAgICAgICBpZiBleGNsOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoZXhjbCwgJycpCisKKyAgICAgICAgIyBBZGQgdmFyZmxhZ3MsIGFzc3VtaW5nIGFuIGV4Y2x1c2lvbiBsaXN0IGlzIHNldAorICAgICAgICBpZiB2YXJmbGFnc2V4Y2w6CisgICAgICAgICAgICB2YXJmZGVwcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiB2YXJmbGFnc2V4Y2w6CisgICAgICAgICAgICAgICAgICAgIHZhcmZkZXBzLmFwcGVuZCgnJXNbJXNdJyAlIChrZXksIGYpKQorICAgICAgICAgICAgaWYgdmFyZmRlcHM6CisgICAgICAgICAgICAgICAgZGVwcyB8PSBzZXQodmFyZmRlcHMpCisKKyAgICAgICAgZGVwcyB8PSBzZXQoKHZhcmRlcHMgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIGRlcHMgLT0gc2V0KHZhcmZsYWdzLmdldCgidmFyZGVwc2V4Y2x1ZGUiLCAiIikuc3BsaXQoKSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3Ioa2V5LCBOb25lLCBlKQorICAgIHJldHVybiBkZXBzLCB2YWx1ZQorICAgICNiYi5ub3RlKCJWYXJpYWJsZSAlcyByZWZlcmVuY2VzICVzIGFuZCBjYWxscyAlcyIgJSAoa2V5LCBzdHIoZGVwcyksIHN0cihleGVjcykpKQorICAgICNkLnNldFZhckZsYWcoa2V5LCAidmFyZGVwcyIsIGRlcHMpCisKK2RlZiBnZW5lcmF0ZV9kZXBlbmRlbmNpZXMoZCk6CisKKyAgICBrZXlzID0gc2V0KGtleSBmb3Iga2V5IGluIGQgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKQorICAgIHNoZWxsZGVwcyA9IHNldChrZXkgZm9yIGtleSBpbiBkLmdldFZhcigiX19leHBvcnRsaXN0IiwgRmFsc2UpIGlmIGQuZ2V0VmFyRmxhZyhrZXksICJleHBvcnQiKSBhbmQgbm90IGQuZ2V0VmFyRmxhZyhrZXksICJ1bmV4cG9ydCIpKQorICAgIHZhcmZsYWdzZXhjbCA9IGQuZ2V0VmFyKCdCQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUycsIFRydWUpCisKKyAgICBkZXBzID0ge30KKyAgICB2YWx1ZXMgPSB7fQorCisgICAgdGFza2xpc3QgPSBkLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpIG9yIFtdCisgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgIGRlcHNbdGFza10sIHZhbHVlc1t0YXNrXSA9IGJ1aWxkX2RlcGVuZGVuY2llcyh0YXNrLCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCkKKyAgICAgICAgbmV3ZGVwcyA9IGRlcHNbdGFza10KKyAgICAgICAgc2VlbiA9IHNldCgpCisgICAgICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgICAgICBuZXh0ZGVwcyA9IG5ld2RlcHMKKyAgICAgICAgICAgIHNlZW4gfD0gbmV4dGRlcHMKKyAgICAgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBuZXh0ZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGRlcHNbZGVwXSwgdmFsdWVzW2RlcF0gPSBidWlsZF9kZXBlbmRlbmNpZXMoZGVwLCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCkKKyAgICAgICAgICAgICAgICBuZXdkZXBzIHw9ICBkZXBzW2RlcF0KKyAgICAgICAgICAgIG5ld2RlcHMgLT0gc2VlbgorICAgICAgICAjcHJpbnQgIkZvciAlczogJXMiICUgKHRhc2ssIHN0cihkZXBzW3Rhc2tdKSkKKyAgICByZXR1cm4gdGFza2xpc3QsIGRlcHMsIHZhbHVlcworCitkZWYgaW5oZXJpdHNfY2xhc3Moa2xhc3MsIGQpOgorICAgIHZhbCA9IGQuZ2V0VmFyKCdfX2luaGVyaXRfY2FjaGUnLCBGYWxzZSkgb3IgW10KKyAgICBuZWVkbGUgPSBvcy5wYXRoLmpvaW4oJ2NsYXNzZXMnLCAnJXMuYmJjbGFzcycgJSBrbGFzcykKKyAgICBmb3IgdiBpbiB2YWw6CisgICAgICAgIGlmIHYuZW5kc3dpdGgobmVlZGxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2RhdGFfc21hcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NThjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZGF0YV9zbWFydC5weQpAQCAtMCwwICsxLDk2NCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSBTbWFydCBEaWN0aW9uYXJ5IEltcGxlbWVudGF0aW9uCisKK0Z1bmN0aW9ucyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgU2ViIEZyYW5rZW5ndWwKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFVsaSBMdWNrYXMKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBST0FEIEdtYkgKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IGNvcHksIHJlLCBzeXMsIHRyYWNlYmFjaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGJiLCBiYi5jb2RlcGFyc2VyCitmcm9tIGJiICAgaW1wb3J0IHV0aWxzCitmcm9tIGJiLkNPVyAgaW1wb3J0IENPV0RpY3RCYXNlCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLkRhdGEiKQorCitfX3NldHZhcl9rZXl3b3JkX18gPSBbIl9hcHBlbmQiLCAiX3ByZXBlbmQiLCAiX3JlbW92ZSJdCitfX3NldHZhcl9yZWdleHBfXyA9IHJlLmNvbXBpbGUoJyg/UDxiYXNlPi4qPykoP1A8a2V5d29yZD5fYXBwZW5kfF9wcmVwZW5kfF9yZW1vdmUpKF8oP1A8YWRkPi4qKSk/JCcpCitfX2V4cGFuZF92YXJfcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7W157fUBcblx0IF0rfSIpCitfX2V4cGFuZF9weXRob25fcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7QC4rP30iKQorCitkZWYgaW5mZXJfY2FsbGVyX2RldGFpbHMobG9naW5mbywgcGFyZW50ID0gRmFsc2UsIHZhcnZhbCA9IFRydWUpOgorICAgICIiIlNhdmUgdGhlIGNhbGxlciB0aGUgdHJvdWJsZSBvZiBzcGVjaWZ5aW5nIGV2ZXJ5dGhpbmcuIiIiCisgICAgIyBTYXZlIGVmZm9ydC4KKyAgICBpZiAnaWdub3JlJyBpbiBsb2dpbmZvIGFuZCBsb2dpbmZvWydpZ25vcmUnXToKKyAgICAgICAgcmV0dXJuCisgICAgIyBJZiBub3RoaW5nIHdhcyBwcm92aWRlZCwgbWFyayB0aGlzIGFzIHBvc3NpYmx5IHVubmVlZGVkLgorICAgIGlmIG5vdCBsb2dpbmZvOgorICAgICAgICBsb2dpbmZvWydpZ25vcmUnXSA9IFRydWUKKyAgICAgICAgcmV0dXJuCisgICAgIyBJbmZlciBjYWxsZXIncyBsaWtlbHkgdmFsdWVzIGZvciB2YXJpYWJsZSAodmFyKSBhbmQgdmFsdWUgKHZhbHVlKSwgCisgICAgIyB0byByZWR1Y2UgY2x1dHRlciBpbiB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKyAgICBhYm92ZSA9IE5vbmUKKyAgICBkZWYgc2V0X2Fib3ZlKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQorICAgICAgICAgICAgaWYgcGFyZW50OgorICAgICAgICAgICAgICAgIHJldHVybiB0Yi50Yl9mcmFtZS5mX2JhY2suZl9iYWNrLmZfYmFjaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGIudGJfZnJhbWUuZl9iYWNrLmZfYmFjaworCisgICAgaWYgdmFydmFsIGFuZCAoJ3ZhcmlhYmxlJyBub3QgaW4gbG9naW5mbyBvciAnZGV0YWlsJyBub3QgaW4gbG9naW5mbyk6CisgICAgICAgIGlmIG5vdCBhYm92ZToKKyAgICAgICAgICAgIGFib3ZlID0gc2V0X2Fib3ZlKCkKKyAgICAgICAgbGNscyA9IGFib3ZlLmZfbG9jYWxzLml0ZW1zKCkKKyAgICAgICAgZm9yIGssIHYgaW4gbGNsczoKKyAgICAgICAgICAgIGlmIGsgPT0gJ3ZhbHVlJyBhbmQgJ2RldGFpbCcgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSB2CisgICAgICAgICAgICBpZiBrID09ICd2YXInIGFuZCAndmFyaWFibGUnIG5vdCBpbiBsb2dpbmZvOgorICAgICAgICAgICAgICAgIGxvZ2luZm9bJ3ZhcmlhYmxlJ10gPSB2CisgICAgIyBJbmZlciBmaWxlL2xpbmUvZnVuY3Rpb24gZnJvbSB0cmFjZWJhY2sKKyAgICAjIERvbid0IHVzZSB0cmFjZWJhY2suZXh0cmFjdF9zdGFjaygpIHNpbmNlIGl0IGZpbGxzIHRoZSBsaW5lIGNvbnRlbnRzIHdoaWNoCisgICAgIyB3ZSBkb24ndCBuZWVkIGFuZCB0aGF0IGhpdHMgc3RhdCBzeXNjYWxscworICAgIGlmICdmaWxlJyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgaWYgbm90IGFib3ZlOgorICAgICAgICAgICAgYWJvdmUgPSBzZXRfYWJvdmUoKQorICAgICAgICBmID0gYWJvdmUuZl9iYWNrCisgICAgICAgIGxpbmUgPSBmLmZfbGluZW5vCisgICAgICAgIGZpbGUgPSBmLmZfY29kZS5jb19maWxlbmFtZQorICAgICAgICBmdW5jID0gZi5mX2NvZGUuY29fbmFtZQorICAgICAgICBsb2dpbmZvWydmaWxlJ10gPSBmaWxlCisgICAgICAgIGxvZ2luZm9bJ2xpbmUnXSA9IGxpbmUKKyAgICAgICAgaWYgZnVuYyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgICAgIGxvZ2luZm9bJ2Z1bmMnXSA9IGZ1bmMKKworY2xhc3MgVmFyaWFibGVQYXJzZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybmFtZSwgZCwgdmFsID0gTm9uZSk6CisgICAgICAgIHNlbGYudmFybmFtZSA9IHZhcm5hbWUKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnZhbHVlID0gdmFsCisKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5leGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29udGFpbnMgPSB7fQorCisgICAgZGVmIHZhcl9zdWIoc2VsZiwgbWF0Y2gpOgorICAgICAgICAgICAga2V5ID0gbWF0Y2guZ3JvdXAoKVsyOi0xXQorICAgICAgICAgICAgaWYgc2VsZi52YXJuYW1lIGFuZCBrZXk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52YXJuYW1lID09IGtleToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJ2YXJpYWJsZSAlcyByZWZlcmVuY2VzIGl0c2VsZiEiICUgc2VsZi52YXJuYW1lKQorICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuZC5leHBhbmRfY2FjaGU6CisgICAgICAgICAgICAgICAgdmFycGFyc2UgPSBzZWxmLmQuZXhwYW5kX2NhY2hlW2tleV0KKyAgICAgICAgICAgICAgICB2YXIgPSB2YXJwYXJzZS52YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyRmxhZyhrZXksICJfY29udGVudCIsIFRydWUpCisgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMuYWRkKGtleSkKKyAgICAgICAgICAgIGlmIHZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgpCisKKyAgICBkZWYgcHl0aG9uX3N1YihzZWxmLCBtYXRjaCk6CisgICAgICAgICAgICBjb2RlID0gbWF0Y2guZ3JvdXAoKVszOi0xXQorICAgICAgICAgICAgY29kZW9iaiA9IGNvbXBpbGUoY29kZS5zdHJpcCgpLCBzZWxmLnZhcm5hbWUgb3IgIjxleHBhbnNpb24+IiwgImV2YWwiKQorCisgICAgICAgICAgICBwYXJzZXIgPSBiYi5jb2RlcGFyc2VyLlB5dGhvblBhcnNlcihzZWxmLnZhcm5hbWUsIGxvZ2dlcikKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9weXRob24oY29kZSkKKyAgICAgICAgICAgIGlmIHNlbGYudmFybmFtZToKKyAgICAgICAgICAgICAgICB2YXJkZXBzID0gc2VsZi5kLmdldFZhckZsYWcoc2VsZi52YXJuYW1lLCAidmFyZGVwcyIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFyZGVwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwYXJzZXIubG9nLmZsdXNoKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLmxvZy5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgfD0gcGFyc2VyLmV4ZWNzCisKKyAgICAgICAgICAgIGZvciBrIGluIHBhcnNlci5jb250YWluczoKKyAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBzZWxmLmNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2tdID0gcGFyc2VyLmNvbnRhaW5zW2tdLmNvcHkoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNba10udXBkYXRlKHBhcnNlci5jb250YWluc1trXSkKKyAgICAgICAgICAgIHZhbHVlID0gdXRpbHMuYmV0dGVyX2V2YWwoY29kZW9iaiwgRGF0YUNvbnRleHQoc2VsZi5kKSkKKyAgICAgICAgICAgIHJldHVybiBzdHIodmFsdWUpCisKKworY2xhc3MgRGF0YUNvbnRleHQoZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGFkYXRhLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YQorICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYsICoqa3dhcmdzKQorICAgICAgICBzZWxmWydkJ10gPSBtZXRhZGF0YQorCisgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgIHZhbHVlID0gc2VsZi5tZXRhZGF0YS5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lIG9yIHNlbGYubWV0YWRhdGEuZ2V0VmFyRmxhZyhrZXksICdmdW5jJyk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgRXhwYW5zaW9uRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybmFtZSwgZXhwcmVzc2lvbiwgZXhjZXB0aW9uKToKKyAgICAgICAgc2VsZi5leHByZXNzaW9uID0gZXhwcmVzc2lvbgorICAgICAgICBzZWxmLnZhcmlhYmxlbmFtZSA9IHZhcm5hbWUKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBleGNlcHRpb24KKyAgICAgICAgaWYgdmFybmFtZToKKyAgICAgICAgICAgIGlmIGV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSAiRmFpbHVyZSBleHBhbmRpbmcgdmFyaWFibGUgJXMsIGV4cHJlc3Npb24gd2FzICVzIHdoaWNoIHRyaWdnZXJlZCBleGNlcHRpb24gJXM6ICVzIiAlICh2YXJuYW1lLCBleHByZXNzaW9uLCB0eXBlKGV4Y2VwdGlvbikuX19uYW1lX18sIGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSAiRmFpbHVyZSBleHBhbmRpbmcgdmFyaWFibGUgJXM6ICVzOiAlcyIgJSAodmFybmFtZSwgdHlwZShleGNlcHRpb24pLl9fbmFtZV9fLCBleGNlcHRpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1zZyA9ICJGYWlsdXJlIGV4cGFuZGluZyBleHByZXNzaW9uICVzIHdoaWNoIHRyaWdnZXJlZCBleGNlcHRpb24gJXM6ICVzIiAlIChleHByZXNzaW9uLCB0eXBlKGV4Y2VwdGlvbikuX19uYW1lX18sIGV4Y2VwdGlvbikKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIHNlbGYubXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAodmFybmFtZSwgZXhwcmVzc2lvbiwgZXhjZXB0aW9uKQorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tc2cKKworY2xhc3MgSW5jbHVkZUhpc3Rvcnkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50ID0gTm9uZSwgZmlsZW5hbWUgPSAnW1RPUCBMRVZFTF0nKToKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBbXQorICAgICAgICBzZWxmLmN1cnJlbnQgPSBzZWxmCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgbmV3ID0gSW5jbHVkZUhpc3Rvcnkoc2VsZi5wYXJlbnQsIHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGZvciBjIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBuZXcuY2hpbGRyZW4uYXBwZW5kKGMpCisgICAgICAgIHJldHVybiBuZXcKKworICAgIGRlZiBpbmNsdWRlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgbmV3ZmlsZSA9IEluY2x1ZGVIaXN0b3J5KHNlbGYuY3VycmVudCwgZmlsZW5hbWUpCisgICAgICAgIHNlbGYuY3VycmVudC5jaGlsZHJlbi5hcHBlbmQobmV3ZmlsZSkKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV3ZmlsZQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnQucGFyZW50OgorICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZi5jdXJyZW50LnBhcmVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiSW5jbHVkZSBsb2c6IFRyaWVkIHRvIGZpbmlzaCAnJXMnIGF0IHRvcCBsZXZlbC4iICUgZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGVtaXQoc2VsZiwgbywgbGV2ZWwgPSAwKToKKyAgICAgICAgIiIiRW1pdCBhbiBpbmNsdWRlIGhpc3RvcnkgZmlsZSwgYW5kIGl0cyBjaGlsZHJlbi4iIiIKKyAgICAgICAgaWYgbGV2ZWw6CisgICAgICAgICAgICBzcGFjZXMgPSAiICAiICogKGxldmVsIC0gMSkKKyAgICAgICAgICAgIG8ud3JpdGUoIiMgJXMlcyIgJSAoc3BhY2VzLCBzZWxmLmZpbGVuYW1lKSkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmNoaWxkcmVuKSA+IDA6CisgICAgICAgICAgICAgICAgby53cml0ZSgiIGluY2x1ZGVzOiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvLndyaXRlKCIjXG4jIElOQ0xVREUgSElTVE9SWTpcbiMiKQorICAgICAgICBsZXZlbCA9IGxldmVsICsgMQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIG8ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIGNoaWxkLmVtaXQobywgbGV2ZWwpCisKK2NsYXNzIFZhcmlhYmxlSGlzdG9yeShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhcm9vdCk6CisgICAgICAgIHNlbGYuZGF0YXJvb3QgPSBkYXRhcm9vdAorICAgICAgICBzZWxmLnZhcmlhYmxlcyA9IENPV0RpY3RCYXNlLmNvcHkoKQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIG5ldyA9IFZhcmlhYmxlSGlzdG9yeShzZWxmLmRhdGFyb290KQorICAgICAgICBuZXcudmFyaWFibGVzID0gc2VsZi52YXJpYWJsZXMuY29weSgpCisgICAgICAgIHJldHVybiBuZXcKKworICAgIGRlZiByZWNvcmQoc2VsZiwgKmt3b25seSwgKipsb2dpbmZvKToKKyAgICAgICAgaWYgbm90IHNlbGYuZGF0YXJvb3QuX3RyYWNraW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGxlbihrd29ubHkpID4gMDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBpbmZlcl9jYWxsZXJfZGV0YWlscyhsb2dpbmZvLCBwYXJlbnQgPSBUcnVlKQorICAgICAgICBpZiAnaWdub3JlJyBpbiBsb2dpbmZvIGFuZCBsb2dpbmZvWydpZ25vcmUnXToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiAnb3AnIG5vdCBpbiBsb2dpbmZvIG9yIG5vdCBsb2dpbmZvWydvcCddOgorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICdzZXQnCisgICAgICAgIGlmICdkZXRhaWwnIGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9IHN0cihsb2dpbmZvWydkZXRhaWwnXSkKKyAgICAgICAgaWYgJ3ZhcmlhYmxlJyBub3QgaW4gbG9naW5mbyBvciAnZmlsZScgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWNvcmQoKSBtaXNzaW5nIHZhcmlhYmxlIG9yIGZpbGUuIikKKyAgICAgICAgdmFyID0gbG9naW5mb1sndmFyaWFibGUnXQorCisgICAgICAgIGlmIHZhciBub3QgaW4gc2VsZi52YXJpYWJsZXM6CisgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1t2YXJdID0gW10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi52YXJpYWJsZXNbdmFyXSwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgJ25vZHVwcycgaW4gbG9naW5mbyBhbmQgbG9naW5mbyBpbiBzZWxmLnZhcmlhYmxlc1t2YXJdOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudmFyaWFibGVzW3Zhcl0uYXBwZW5kKGxvZ2luZm8uY29weSgpKQorCisgICAgZGVmIHZhcmlhYmxlKHNlbGYsIHZhcik6CisgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcmlhYmxlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcmlhYmxlc1t2YXJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBlbWl0KHNlbGYsIHZhciwgb3ZhbCwgdmFsLCBvLCBkKToKKyAgICAgICAgaGlzdG9yeSA9IHNlbGYudmFyaWFibGUodmFyKQorCisgICAgICAgICMgQXBwZW5kIG92ZXJyaWRlIGhpc3RvcnkKKyAgICAgICAgaWYgdmFyIGluIGQub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgZm9yIChyLCBvdmVycmlkZSkgaW4gZC5vdmVycmlkZWRhdGFbdmFyXToKKyAgICAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi52YXJpYWJsZShyKToKKyAgICAgICAgICAgICAgICAgICAgbG9naW5mbyA9IGV2ZW50LmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBpZiAnZmxhZycgaW4gbG9naW5mbyBhbmQgbm90IGxvZ2luZm9bJ2ZsYWcnXS5zdGFydHN3aXRoKCJfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gdmFyCisgICAgICAgICAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnb3ZlcnJpZGVbJXNdOiVzJyAlIChvdmVycmlkZSwgbG9naW5mb1snb3AnXSkKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5hcHBlbmQobG9naW5mbykKKworICAgICAgICBjb21tZW50VmFsID0gcmUuc3ViKCdcbicsICdcbiMnLCBzdHIob3ZhbCkpCisgICAgICAgIGlmIGhpc3Rvcnk6CisgICAgICAgICAgICBpZiBsZW4oaGlzdG9yeSkgPT0gMToKKyAgICAgICAgICAgICAgICBvLndyaXRlKCIjXG4jICQlc1xuIiAlIHZhcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgby53cml0ZSgiI1xuIyAkJXMgWyVkIG9wZXJhdGlvbnNdXG4iICUgKHZhciwgbGVuKGhpc3RvcnkpKSkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBoaXN0b3J5OgorICAgICAgICAgICAgICAgICMgby53cml0ZSgiIyAlc1xuIiAlIHN0cihldmVudCkpCisgICAgICAgICAgICAgICAgaWYgJ2Z1bmMnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGhhdmUgYSBmdW5jdGlvbiBsaXN0ZWQsIHRoaXMgaXMgaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgIyBjb2RlLCBub3QgYW4gb3BlcmF0aW9uIGluIGEgY29uZmlnIGZpbGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBmdWxsIHBhdGggaXMgZGlzdHJhY3RpbmcuCisgICAgICAgICAgICAgICAgICAgIGV2ZW50WydmaWxlJ10gPSByZS5zdWIoJy4qLycsICcnLCBldmVudFsnZmlsZSddKQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2Z1bmMgPSAnIFslc10nICUgZXZlbnRbJ2Z1bmMnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZnVuYyA9ICcnCisgICAgICAgICAgICAgICAgaWYgJ2ZsYWcnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICBmbGFnID0gJ1slc10gJyAlIChldmVudFsnZmxhZyddKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnJworICAgICAgICAgICAgICAgIG8ud3JpdGUoIiMgICAlcyAlczolcyVzXG4jICAgICAlc1wiJXNcIlxuIiAlIChldmVudFsnb3AnXSwgZXZlbnRbJ2ZpbGUnXSwgZXZlbnRbJ2xpbmUnXSwgZGlzcGxheV9mdW5jLCBmbGFnLCByZS5zdWIoJ1xuJywgJ1xuIyAgICAgJywgZXZlbnRbJ2RldGFpbCddKSkpCisgICAgICAgICAgICBpZiBsZW4oaGlzdG9yeSkgPiAxOgorICAgICAgICAgICAgICAgIG8ud3JpdGUoIiMgcHJlLWV4cGFuc2lvbiB2YWx1ZTpcbiIpCisgICAgICAgICAgICAgICAgby53cml0ZSgnIyAgICIlcyJcbicgJSAoY29tbWVudFZhbCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvLndyaXRlKCIjXG4jICQlc1xuIyAgIFtubyBoaXN0b3J5IHJlY29yZGVkXVxuI1xuIiAlIHZhcikKKyAgICAgICAgICAgIG8ud3JpdGUoJyMgICAiJXMiXG4nICUgKGNvbW1lbnRWYWwpKQorCisgICAgZGVmIGdldF92YXJpYWJsZV9maWxlcyhzZWxmLCB2YXIpOgorICAgICAgICAiIiJHZXQgdGhlIGZpbGVzIHdoZXJlIG9wZXJhdGlvbnMgYXJlIG1hZGUgb24gYSB2YXJpYWJsZSIiIgorICAgICAgICB2YXJfaGlzdG9yeSA9IHNlbGYudmFyaWFibGUodmFyKQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiB2YXJfaGlzdG9yeToKKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChldmVudFsnZmlsZSddKQorICAgICAgICByZXR1cm4gZmlsZXMKKworICAgIGRlZiBnZXRfdmFyaWFibGVfbGluZXMoc2VsZiwgdmFyLCBmKToKKyAgICAgICAgIiIiR2V0IHRoZSBsaW5lIHdoZXJlIGEgb3BlcmF0aW9uIGlzIG1hZGUgb24gYSB2YXJpYWJsZSBpbiBmaWxlIGYiIiIKKyAgICAgICAgdmFyX2hpc3RvcnkgPSBzZWxmLnZhcmlhYmxlKHZhcikKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZXZlbnQgaW4gdmFyX2hpc3Rvcnk6CisgICAgICAgICAgICBpZiBmPT0gZXZlbnRbJ2ZpbGUnXToKKyAgICAgICAgICAgICAgICBsaW5lID0gZXZlbnRbJ2xpbmUnXQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBnZXRfdmFyaWFibGVfaXRlbXNfZmlsZXMoc2VsZiwgdmFyLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFVzZSB2YXJpYWJsZSBoaXN0b3J5IHRvIG1hcCBpdGVtcyBhZGRlZCB0byBhIGxpc3QgdmFyaWFibGUgYW5kCisgICAgICAgIHRoZSBmaWxlcyBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCisgICAgICAgICIiIgorICAgICAgICBoaXN0b3J5ID0gc2VsZi52YXJpYWJsZSh2YXIpCisgICAgICAgIGZpbmFsaXRlbXMgPSAoZC5nZXRWYXIodmFyLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgICAgICBmaWxlbWFwID0ge30KKyAgICAgICAgaXNzZXQgPSBGYWxzZQorICAgICAgICBmb3IgZXZlbnQgaW4gaGlzdG9yeToKKyAgICAgICAgICAgIGlmICdmbGFnJyBpbiBldmVudDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZXZlbnRbJ29wJ10gPT0gJ19yZW1vdmUnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc3NldCBhbmQgZXZlbnRbJ29wJ10gPT0gJ3NldD8nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpc3NldCA9IFRydWUKKyAgICAgICAgICAgIGl0ZW1zID0gZC5leHBhbmQoZXZlbnRbJ2RldGFpbCddKS5zcGxpdCgpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgY3J1ZGUgYnV0IGlzIGJlbHQtYW5kLWJyYWNlcyB0byBhdm9pZCB1cworICAgICAgICAgICAgICAgICMgaGF2aW5nIHRvIGhhbmRsZSBldmVyeSBwb3NzaWJsZSBvcGVyYXRpb24gdHlwZSBzcGVjaWZpY2FsbHkKKyAgICAgICAgICAgICAgICBpZiBpdGVtIGluIGZpbmFsaXRlbXMgYW5kIG5vdCBpdGVtIGluIGZpbGVtYXA6CisgICAgICAgICAgICAgICAgICAgIGZpbGVtYXBbaXRlbV0gPSBldmVudFsnZmlsZSddCisgICAgICAgIHJldHVybiBmaWxlbWFwCisKKyAgICBkZWYgZGVsX3Zhcl9oaXN0b3J5KHNlbGYsIHZhciwgZj1Ob25lLCBsaW5lPU5vbmUpOgorICAgICAgICAiIiJJZiBmaWxlIGYgYW5kIGxpbmUgYXJlIG5vdCBnaXZlbiwgdGhlIGVudGlyZSBoaXN0b3J5IG9mIHZhciBpcyBkZWxldGVkIiIiCisgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcmlhYmxlczoKKyAgICAgICAgICAgIGlmIGYgYW5kIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYWJsZXNbdmFyXSA9IFsgeCBmb3IgeCBpbiBzZWxmLnZhcmlhYmxlc1t2YXJdIGlmIHhbJ2ZpbGUnXSE9ZiBhbmQgeFsnbGluZSddIT1saW5lXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1t2YXJdID0gW10KKworY2xhc3MgRGF0YVNtYXJ0KE11dGFibGVNYXBwaW5nKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZGljdCA9IHt9CisKKyAgICAgICAgc2VsZi5pbmNoaXN0b3J5ID0gSW5jbHVkZUhpc3RvcnkoKQorICAgICAgICBzZWxmLnZhcmhpc3RvcnkgPSBWYXJpYWJsZUhpc3Rvcnkoc2VsZikKKyAgICAgICAgc2VsZi5fdHJhY2tpbmcgPSBGYWxzZQorCisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKworICAgICAgICAjIGNvb2tpZSBtb25zdGVyIHRyaWJ1dGUKKyAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd3JpdGVzIHRvIG92ZXJyaWRlZGF0YSBhcworICAgICAgICAjIGl0cyBvbmx5IGEgc2hhbGxvdyBjb3B5LCBjb3VsZCBpbmZsdWVuY2Ugb3RoZXIgZGF0YSBzdG9yZQorICAgICAgICAjIGNvcGllcyEKKyAgICAgICAgc2VsZi5vdmVycmlkZWRhdGEgPSB7fQorICAgICAgICBzZWxmLm92ZXJyaWRlcyA9IE5vbmUKKyAgICAgICAgc2VsZi5vdmVycmlkZXZhcnMgPSBzZXQoWyJPVkVSUklERVMiLCAiRklMRSJdKQorICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBGYWxzZQorCisgICAgZGVmIGVuYWJsZVRyYWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90cmFja2luZyA9IFRydWUKKworICAgIGRlZiBkaXNhYmxlVHJhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3RyYWNraW5nID0gRmFsc2UKKworICAgIGRlZiBleHBhbmRXaXRoUmVmcyhzZWxmLCBzLCB2YXJuYW1lKToKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBiYXNlc3RyaW5nKTogIyBzYW5pdHkgY2hlY2sKKyAgICAgICAgICAgIHJldHVybiBWYXJpYWJsZVBhcnNlKHZhcm5hbWUsIHNlbGYsIHMpCisKKyAgICAgICAgaWYgdmFybmFtZSBhbmQgdmFybmFtZSBpbiBzZWxmLmV4cGFuZF9jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF9jYWNoZVt2YXJuYW1lXQorCisgICAgICAgIHZhcnBhcnNlID0gVmFyaWFibGVQYXJzZSh2YXJuYW1lLCBzZWxmKQorCisgICAgICAgIHdoaWxlIHMuZmluZCgnJHsnKSAhPSAtMToKKyAgICAgICAgICAgIG9sZHMgPSBzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IF9fZXhwYW5kX3Zhcl9yZWdleHBfXy5zdWIodmFycGFyc2UudmFyX3N1YiwgcykKKyAgICAgICAgICAgICAgICBzID0gX19leHBhbmRfcHl0aG9uX3JlZ2V4cF9fLnN1Yih2YXJwYXJzZS5weXRob25fc3ViLCBzKQorICAgICAgICAgICAgICAgIGlmIHMgPT0gb2xkczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBFeHBhbnNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGU6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGV4Y19jbGFzcywgZXhjLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhwYW5zaW9uRXJyb3IsIEV4cGFuc2lvbkVycm9yKHZhcm5hbWUsIHMsIGV4YyksIHRiCisKKyAgICAgICAgdmFycGFyc2UudmFsdWUgPSBzCisKKyAgICAgICAgaWYgdmFybmFtZToKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlW3Zhcm5hbWVdID0gdmFycGFyc2UKKworICAgICAgICByZXR1cm4gdmFycGFyc2UKKworICAgIGRlZiBleHBhbmQoc2VsZiwgcywgdmFybmFtZSA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRXaXRoUmVmcyhzLCB2YXJuYW1lKS52YWx1ZQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYsIHBhcmVudCA9IEZhbHNlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgaW50ZXJuYWxfZmluYWxpemUoc2VsZiwgcGFyZW50ID0gRmFsc2UpOgorICAgICAgICAiIiJQZXJmb3JtcyBmaW5hbCBzdGVwcyB1cG9uIHRoZSBkYXRhc3RvcmUsIGluY2x1ZGluZyBhcHBsaWNhdGlvbiBvZiBvdmVycmlkZXMiIiIKKyAgICAgICAgc2VsZi5vdmVycmlkZXMgPSBOb25lCisKKyAgICBkZWYgbmVlZF9vdmVycmlkZXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3ZlcnJpZGVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuaW5vdmVycmlkZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmb3IgY291bnQgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBUcnVlCisgICAgICAgICAgICAjIENhbiBlbmQgdXAgaGVyZSByZWN1cnNpdmVseSBzbyBzZXR1cCBkdW1teSB2YWx1ZXMKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzID0gW10KKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzc2V0ID0gc2V0KCkKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzID0gKHNlbGYuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKSBvciAiIikuc3BsaXQoIjoiKSBvciBbXQorICAgICAgICAgICAgc2VsZi5vdmVycmlkZXNzZXQgPSBzZXQoc2VsZi5vdmVycmlkZXMpCisgICAgICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICAgICAgbmV3b3ZlcnJpZGVzID0gKHNlbGYuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKSBvciAiIikuc3BsaXQoIjoiKSBvciBbXQorICAgICAgICAgICAgaWYgbmV3b3ZlcnJpZGVzID09IHNlbGYub3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLm92ZXJyaWRlcyA9IG5ld292ZXJyaWRlcworICAgICAgICAgICAgc2VsZi5vdmVycmlkZXNzZXQgPSBzZXQoc2VsZi5vdmVycmlkZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5mYXRhbCgiT3ZlcnJpZGVzIGNvdWxkIG5vdCBiZSBleHBhbmRlZCBpbnRvIGEgc3RhYmxlIHN0YXRlIGFmdGVyIDUgaXRlcmF0aW9ucywgb3ZlcnJpZGVzIG11c3QgYmUgYmVpbmcgcmVmZXJlbmNlZCBieSBvdGhlciBvdmVycmlkZGVuIHZhcmlhYmxlcyBpbiBzb21lIHJlY3Vyc2l2ZSBmYXNoaW9uLiBQbGVhc2UgcHJvdmlkZSB5b3VyIGNvbmZpZ3VyYXRpb24gdG8gYml0YmFrZS1kZXZlbCBzbyB3ZSBjYW4gbGF1Z2gsIGVyLCBJIG1lYW4gdHJ5IGFuZCB1bmRlcnN0YW5kIGhvdyB0byBtYWtlIGl0IHdvcmsuIikKKworICAgIGRlZiBpbml0VmFyKHNlbGYsIHZhcik6CisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKyAgICAgICAgaWYgbm90IHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXSA9IHt9CisKKyAgICBkZWYgX2ZpbmRWYXIoc2VsZiwgdmFyKToKKyAgICAgICAgZGVzdCA9IHNlbGYuZGljdAorICAgICAgICB3aGlsZSBkZXN0OgorICAgICAgICAgICAgaWYgdmFyIGluIGRlc3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RbdmFyXQorCisgICAgICAgICAgICBpZiAiX2RhdGEiIG5vdCBpbiBkZXN0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkZXN0ID0gZGVzdFsiX2RhdGEiXQorCisgICAgZGVmIF9tYWtlU2hhZG93Q29weShzZWxmLCB2YXIpOgorICAgICAgICBpZiB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9jYWxfdmFyID0gc2VsZi5fZmluZFZhcih2YXIpCisKKyAgICAgICAgaWYgbG9jYWxfdmFyOgorICAgICAgICAgICAgc2VsZi5kaWN0W3Zhcl0gPSBjb3B5LmNvcHkobG9jYWxfdmFyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5pbml0VmFyKHZhcikKKworCisgICAgZGVmIHNldFZhcihzZWxmLCB2YXIsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICAjcHJpbnQoInZhcj0iICsgc3RyKHZhcikgKyAiICB2YWw9IiArIHN0cih2YWx1ZSkpCisgICAgICAgIHBhcnNpbmc9RmFsc2UKKyAgICAgICAgaWYgJ3BhcnNpbmcnIGluIGxvZ2luZm86CisgICAgICAgICAgICBwYXJzaW5nPVRydWUKKworICAgICAgICBpZiAnb3AnIG5vdCBpbiBsb2dpbmZvOgorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICJzZXQiCisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKyAgICAgICAgbWF0Y2ggID0gX19zZXR2YXJfcmVnZXhwX18ubWF0Y2godmFyKQorICAgICAgICBpZiBtYXRjaCBhbmQgbWF0Y2guZ3JvdXAoImtleXdvcmQiKSBpbiBfX3NldHZhcl9rZXl3b3JkX186CisgICAgICAgICAgICBiYXNlID0gbWF0Y2guZ3JvdXAoJ2Jhc2UnKQorICAgICAgICAgICAga2V5d29yZCA9IG1hdGNoLmdyb3VwKCJrZXl3b3JkIikKKyAgICAgICAgICAgIG92ZXJyaWRlID0gbWF0Y2guZ3JvdXAoJ2FkZCcpCisgICAgICAgICAgICBsID0gc2VsZi5nZXRWYXJGbGFnKGJhc2UsIGtleXdvcmQpIG9yIFtdCisgICAgICAgICAgICBsLmFwcGVuZChbdmFsdWUsIG92ZXJyaWRlXSkKKyAgICAgICAgICAgIHNlbGYuc2V0VmFyRmxhZyhiYXNlLCBrZXl3b3JkLCBsLCBpZ25vcmU9VHJ1ZSkKKyAgICAgICAgICAgICMgQW5kIGNhdXNlIHRoYXQgdG8gYmUgcmVjb3JkZWQ6CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9IHZhbHVlCisgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gYmFzZQorICAgICAgICAgICAgaWYgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICclc1slc10nICUgKGtleXdvcmQsIG92ZXJyaWRlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dpbmZvWydvcCddID0ga2V5d29yZAorICAgICAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgICAgICAjIHRvZG8gbWFrZSBzdXJlIGtleXdvcmQgaXMgbm90IF9fZG9jX18gb3IgX19tb2R1bGVfXworICAgICAgICAgICAgIyBwYXkgdGhlIGNvb2tpZSBtb25zdGVyCisKKyAgICAgICAgICAgICMgbW9yZSBjb29raWVzIGZvciB0aGUgY29va2llIG1vbnN0ZXIKKyAgICAgICAgICAgIGlmICdfJyBpbiB2YXI6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0dmFyX3VwZGF0ZV9vdmVycmlkZXMoYmFzZSwgKipsb2dpbmZvKQorCisgICAgICAgICAgICBpZiBiYXNlIGluIHNlbGYub3ZlcnJpZGV2YXJzOgorICAgICAgICAgICAgICAgIHNlbGYuX3NldHZhcl91cGRhdGVfb3ZlcnJpZGV2YXJzKHZhciwgdmFsdWUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKworICAgICAgICBpZiBub3QgcGFyc2luZzoKKyAgICAgICAgICAgIGlmICJfYXBwZW5kIiBpbiBzZWxmLmRpY3RbdmFyXToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5kaWN0W3Zhcl1bIl9hcHBlbmQiXQorICAgICAgICAgICAgaWYgIl9wcmVwZW5kIiBpbiBzZWxmLmRpY3RbdmFyXToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5kaWN0W3Zhcl1bIl9wcmVwZW5kIl0KKyAgICAgICAgICAgIGlmIHZhciBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgICAgICBhY3RpdmUgPSBbXQorICAgICAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgICAgIGZvciAociwgbykgaW4gc2VsZi5vdmVycmlkZWRhdGFbdmFyXToKKyAgICAgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5hcHBlbmQocikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAiXyIgaW4gbzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNldChvLnNwbGl0KCJfIikpLmlzc3Vic2V0KHNlbGYub3ZlcnJpZGVzc2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUuYXBwZW5kKHIpCisgICAgICAgICAgICAgICAgZm9yIGEgaW4gYWN0aXZlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbFZhcihhKQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdCisKKyAgICAgICAgIyBtb3JlIGNvb2tpZXMgZm9yIHRoZSBjb29raWUgbW9uc3RlcgorICAgICAgICBpZiAnXycgaW4gdmFyOgorICAgICAgICAgICAgc2VsZi5fc2V0dmFyX3VwZGF0ZV9vdmVycmlkZXModmFyLCAqKmxvZ2luZm8pCisKKyAgICAgICAgIyBzZXR0aW5nIHZhcgorICAgICAgICBzZWxmLmRpY3RbdmFyXVsiX2NvbnRlbnQiXSA9IHZhbHVlCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLm92ZXJyaWRldmFyczoKKyAgICAgICAgICAgIHNlbGYuX3NldHZhcl91cGRhdGVfb3ZlcnJpZGV2YXJzKHZhciwgdmFsdWUpCisKKyAgICBkZWYgX3NldHZhcl91cGRhdGVfb3ZlcnJpZGV2YXJzKHNlbGYsIHZhciwgdmFsdWUpOgorICAgICAgICB2YXJkYXRhID0gc2VsZi5leHBhbmRXaXRoUmVmcyh2YWx1ZSwgdmFyKQorICAgICAgICBuZXcgPSB2YXJkYXRhLnJlZmVyZW5jZXMKKyAgICAgICAgbmV3LnVwZGF0ZSh2YXJkYXRhLmNvbnRhaW5zLmtleXMoKSkKKyAgICAgICAgd2hpbGUgbm90IG5ldy5pc3N1YnNldChzZWxmLm92ZXJyaWRldmFycyk6CisgICAgICAgICAgICBuZXh0bmV3ID0gc2V0KCkKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGV2YXJzLnVwZGF0ZShuZXcpCisgICAgICAgICAgICBmb3IgaSBpbiBuZXc6CisgICAgICAgICAgICAgICAgdmFyZGF0YSA9IHNlbGYuZXhwYW5kV2l0aFJlZnMoc2VsZi5nZXRWYXIoaSwgVHJ1ZSksIGkpCisgICAgICAgICAgICAgICAgbmV4dG5ldy51cGRhdGUodmFyZGF0YS5yZWZlcmVuY2VzKQorICAgICAgICAgICAgICAgIG5leHRuZXcudXBkYXRlKHZhcmRhdGEuY29udGFpbnMua2V5cygpKQorICAgICAgICAgICAgbmV3ID0gbmV4dG5ldworICAgICAgICBzZWxmLmludGVybmFsX2ZpbmFsaXplKFRydWUpCisKKyAgICBkZWYgX3NldHZhcl91cGRhdGVfb3ZlcnJpZGVzKHNlbGYsIHZhciwgKipsb2dpbmZvKToKKyAgICAgICAgIyBha2EgcGF5IHRoZSBjb29raWUgbW9uc3RlcgorICAgICAgICBvdmVycmlkZSA9IHZhclt2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgc2hvcnR2YXIgPSB2YXJbOnZhci5yZmluZCgnXycpXQorICAgICAgICB3aGlsZSBvdmVycmlkZToKKyAgICAgICAgICAgIGlmIHNob3J0dmFyIG5vdCBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl0gPSBbXQorICAgICAgICAgICAgaWYgW3Zhciwgb3ZlcnJpZGVdIG5vdCBpbiBzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl06CisgICAgICAgICAgICAgICAgIyBGb3JjZSBDb1cgYnkgcmVjcmVhdGluZyB0aGUgbGlzdCBmaXJzdAorICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSA9IGxpc3Qoc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdKQorICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXS5hcHBlbmQoW3Zhciwgb3ZlcnJpZGVdKQorICAgICAgICAgICAgb3ZlcnJpZGUgPSBOb25lCisgICAgICAgICAgICBpZiAiXyIgaW4gc2hvcnR2YXI6CisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSB2YXJbc2hvcnR2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgICAgICAgICBzaG9ydHZhciA9IHZhcls6c2hvcnR2YXIucmZpbmQoJ18nKV0KKyAgICAgICAgICAgICAgICBpZiBsZW4oc2hvcnR2YXIpID09IDA6CisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gTm9uZQorCisgICAgZGVmIGdldFZhcihzZWxmLCB2YXIsIGV4cGFuZD1GYWxzZSwgbm93ZWFrZGVmYXVsdD1GYWxzZSwgcGFyc2luZz1GYWxzZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldFZhckZsYWcodmFyLCAiX2NvbnRlbnQiLCBleHBhbmQsIG5vd2Vha2RlZmF1bHQsIHBhcnNpbmcpCisKKyAgICBkZWYgcmVuYW1lVmFyKHNlbGYsIGtleSwgbmV3a2V5LCAqKmxvZ2luZm8pOgorICAgICAgICAiIiIKKyAgICAgICAgUmVuYW1lIHRoZSB2YXJpYWJsZSBrZXkgdG8gbmV3a2V5CisgICAgICAgICIiIgorICAgICAgICB2YWwgPSBzZWxmLmdldFZhcihrZXksIDAsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9naW5mb1sndmFyaWFibGUnXSA9IG5ld2tleQorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICdyZW5hbWUgZnJvbSAlcycgJSBrZXkKKyAgICAgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gdmFsCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgICAgIHNlbGYuc2V0VmFyKG5ld2tleSwgdmFsLCBpZ25vcmU9VHJ1ZSwgcGFyc2luZz1UcnVlKQorCisgICAgICAgIGZvciBpIGluIChfX3NldHZhcl9rZXl3b3JkX18pOgorICAgICAgICAgICAgc3JjID0gc2VsZi5nZXRWYXJGbGFnKGtleSwgaSkKKyAgICAgICAgICAgIGlmIHNyYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlc3QgPSBzZWxmLmdldFZhckZsYWcobmV3a2V5LCBpKSBvciBbXQorICAgICAgICAgICAgZGVzdC5leHRlbmQoc3JjKQorICAgICAgICAgICAgc2VsZi5zZXRWYXJGbGFnKG5ld2tleSwgaSwgZGVzdCwgaWdub3JlPVRydWUpCisKKyAgICAgICAgaWYga2V5IGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbbmV3a2V5XSA9IFtdCisgICAgICAgICAgICBmb3IgKHYsIG8pIGluIHNlbGYub3ZlcnJpZGVkYXRhW2tleV06CisgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbbmV3a2V5XS5hcHBlbmQoW3YucmVwbGFjZShrZXksIG5ld2tleSksIG9dKQorICAgICAgICAgICAgICAgIHNlbGYucmVuYW1lVmFyKHYsIHYucmVwbGFjZShrZXksIG5ld2tleSkpCisKKyAgICAgICAgaWYgJ18nIGluIG5ld2tleSBhbmQgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyhuZXdrZXksICoqbG9naW5mbykKKworICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0ga2V5CisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAncmVuYW1lICh0byknCisgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gbmV3a2V5CisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBzZWxmLmRlbFZhcihrZXksIGlnbm9yZT1UcnVlKQorCisgICAgZGVmIGFwcGVuZFZhcihzZWxmLCB2YXIsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ2FwcGVuZCcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIHNlbGYuc2V0VmFyKHZhciArICJfYXBwZW5kIiwgdmFsdWUsIGlnbm9yZT1UcnVlLCBwYXJzaW5nPVRydWUpCisKKyAgICBkZWYgcHJlcGVuZFZhcihzZWxmLCB2YXIsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ3ByZXBlbmQnCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBzZWxmLnNldFZhcih2YXIgKyAiX3ByZXBlbmQiLCB2YWx1ZSwgaWdub3JlPVRydWUsIHBhcnNpbmc9VHJ1ZSkKKworICAgIGRlZiBkZWxWYXIoc2VsZiwgdmFyLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9ICIiCisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnZGVsJworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBzZWxmLmRpY3RbdmFyXSA9IHt9CisgICAgICAgIGlmIHZhciBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgIGRlbCBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdCisgICAgICAgIGlmICdfJyBpbiB2YXI6CisgICAgICAgICAgICBvdmVycmlkZSA9IHZhclt2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgICAgIHNob3J0dmFyID0gdmFyWzp2YXIucmZpbmQoJ18nKV0KKyAgICAgICAgICAgIHdoaWxlIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2hvcnR2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEZvcmNlIENvVyBieSByZWNyZWF0aW5nIHRoZSBsaXN0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl0gPSBsaXN0KHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXS5yZW1vdmUoW3Zhciwgb3ZlcnJpZGVdKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiAiXyIgaW4gc2hvcnR2YXI6CisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gdmFyW3Nob3J0dmFyLnJmaW5kKCdfJykrMTpdCisgICAgICAgICAgICAgICAgICAgIHNob3J0dmFyID0gdmFyWzpzaG9ydHZhci5yZmluZCgnXycpXQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc2hvcnR2YXIpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSBOb25lCisKKyAgICBkZWYgc2V0VmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGlmICdvcCcgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gInNldCIKKyAgICAgICAgbG9naW5mb1snZmxhZyddID0gZmxhZworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgaWYgbm90IHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBzZWxmLl9tYWtlU2hhZG93Q29weSh2YXIpCisgICAgICAgIHNlbGYuZGljdFt2YXJdW2ZsYWddID0gdmFsdWUKKworICAgICAgICBpZiBmbGFnID09ICJfZGVmYXVsdHZhbCIgYW5kICdfJyBpbiB2YXI6CisgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyh2YXIsICoqbG9naW5mbykKKyAgICAgICAgaWYgZmxhZyA9PSAiX2RlZmF1bHR2YWwiIGFuZCB2YXIgaW4gc2VsZi5vdmVycmlkZXZhcnM6CisgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRldmFycyh2YXIsIHZhbHVlKQorCisgICAgICAgIGlmIGZsYWcgPT0gInVuZXhwb3J0IiBvciBmbGFnID09ICJleHBvcnQiOgorICAgICAgICAgICAgaWYgbm90ICJfX2V4cG9ydGxpc3QiIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlU2hhZG93Q29weSgiX19leHBvcnRsaXN0IikKKyAgICAgICAgICAgIGlmIG5vdCAiX2NvbnRlbnQiIGluIHNlbGYuZGljdFsiX19leHBvcnRsaXN0Il06CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0WyJfX2V4cG9ydGxpc3QiXVsiX2NvbnRlbnQiXSA9IHNldCgpCisgICAgICAgICAgICBzZWxmLmRpY3RbIl9fZXhwb3J0bGlzdCJdWyJfY29udGVudCJdLmFkZCh2YXIpCisKKyAgICBkZWYgZ2V0VmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIGV4cGFuZD1GYWxzZSwgbm93ZWFrZGVmYXVsdD1GYWxzZSwgcGFyc2luZz1GYWxzZSk6CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAgaWYgZmxhZyA9PSAiX2NvbnRlbnQiIGFuZCB2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGEgYW5kIG5vdCBwYXJzaW5nOgorICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgYWN0aXZlID0ge30KKyAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdOgorICAgICAgICAgICAgICAgICMgV2hhdCBhYm91dCBkb3VibGUgb3ZlcnJpZGVzIGJvdGggd2l0aCAiXyIgaW4gdGhlIG5hbWU/CisgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlW29dID0gcgorICAgICAgICAgICAgICAgIGVsaWYgIl8iIGluIG86CisgICAgICAgICAgICAgICAgICAgIGlmIHNldChvLnNwbGl0KCJfIikpLmlzc3Vic2V0KHNlbGYub3ZlcnJpZGVzc2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVtvXSA9IHIKKworICAgICAgICAgICAgbW9kID0gVHJ1ZQorICAgICAgICAgICAgd2hpbGUgbW9kOgorICAgICAgICAgICAgICAgIG1vZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIG8gaW4gc2VsZi5vdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciBhIGluIGFjdGl2ZS5jb3B5KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhLmVuZHN3aXRoKCJfIiArIG8pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBhY3RpdmVbYV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgYWN0aXZlW2FdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlW2EucmVwbGFjZSgiXyIgKyBvLCAiIildID0gdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgYSA9PSBvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gYWN0aXZlW2FdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGFjdGl2ZVthXQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmdldFZhcihtYXRjaCkKKworICAgICAgICBpZiBsb2NhbF92YXIgaXMgbm90IE5vbmUgYW5kIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBmbGFnIGluIGxvY2FsX3ZhcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHkuY29weShsb2NhbF92YXJbZmxhZ10pCisgICAgICAgICAgICBlbGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgIl9kZWZhdWx0dmFsIiBpbiBsb2NhbF92YXIgYW5kIG5vdCBub3dlYWtkZWZhdWx0OgorICAgICAgICAgICAgICAgIHZhbHVlID0gY29weS5jb3B5KGxvY2FsX3ZhclsiX2RlZmF1bHR2YWwiXSkKKworCisgICAgICAgIGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCAiX2FwcGVuZCIgaW4gbG9jYWxfdmFyIGFuZCBub3QgcGFyc2luZzoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiCisgICAgICAgICAgICBzZWxmLm5lZWRfb3ZlcnJpZGVzKCkKKyAgICAgICAgICAgIGZvciAociwgbykgaW4gbG9jYWxfdmFyWyJfYXBwZW5kIl06CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG8yIGluIG8uc3BsaXQoIl8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvMiBpbiBzZWxmLm92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgcgorCisgICAgICAgIGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCAiX3ByZXBlbmQiIGluIGxvY2FsX3ZhciBhbmQgbm90IHBhcnNpbmc6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiIgorICAgICAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgICAgICBmb3IgKHIsIG8pIGluIGxvY2FsX3ZhclsiX3ByZXBlbmQiXToKKworICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG86CisgICAgICAgICAgICAgICAgICAgIGZvciBvMiBpbiBvLnNwbGl0KCJfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbzIgaW4gc2VsZi5vdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByICsgdmFsdWUKKworICAgICAgICBpZiBleHBhbmQgYW5kIHZhbHVlOgorICAgICAgICAgICAgIyBPbmx5IGdldHZhciAoZmxhZyA9PSBfY29udGVudCkgaGl0cyB0aGUgZXhwYW5kIGNhY2hlCisgICAgICAgICAgICBjYWNoZW5hbWUgPSBOb25lCisgICAgICAgICAgICBpZiBmbGFnID09ICJfY29udGVudCI6CisgICAgICAgICAgICAgICAgY2FjaGVuYW1lID0gdmFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNhY2hlbmFtZSA9IHZhciArICJbIiArIGZsYWcgKyAiXSIKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5leHBhbmQodmFsdWUsIGNhY2hlbmFtZSkKKworICAgICAgICBpZiB2YWx1ZSBhbmQgZmxhZyA9PSAiX2NvbnRlbnQiIGFuZCBsb2NhbF92YXIgaXMgbm90IE5vbmUgYW5kICJfcmVtb3ZlIiBpbiBsb2NhbF92YXI6CisgICAgICAgICAgICByZW1vdmVzID0gW10KKyAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBsb2NhbF92YXJbIl9yZW1vdmUiXToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBvOgorICAgICAgICAgICAgICAgICAgICBmb3IgbzIgaW4gby5zcGxpdCgiXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG8yIGluIHNlbGYub3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXMuZXh0ZW5kKHNlbGYuZXhwYW5kKHIpLnNwbGl0KCkpCisKKyAgICAgICAgICAgIGZpbHRlcmVkID0gZmlsdGVyKGxhbWJkYSB2OiB2IG5vdCBpbiByZW1vdmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc3BsaXQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gIiAiLmpvaW4oZmlsdGVyZWQpCisgICAgICAgICAgICBpZiBleHBhbmQgYW5kIHZhciBpbiBzZWxmLmV4cGFuZF9jYWNoZToKKyAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgZXhwYW5kIGNhY2hlIGhhcyB0aGUgY29ycmVjdCB2YWx1ZQorICAgICAgICAgICAgICAgICAjIGZsYWcgPT0gIl9jb250ZW50IiBoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5leHBhbmRfY2FjaGVbdmFyXS52YWx1ZSA9IHZhbHVlCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGRlbFZhckZsYWcoc2VsZiwgdmFyLCBmbGFnLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICBpZiBub3QgbG9jYWxfdmFyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3QgYW5kIGZsYWcgaW4gc2VsZi5kaWN0W3Zhcl06CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9ICIiCisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ2RlbEZsYWcnCisgICAgICAgICAgICBsb2dpbmZvWydmbGFnJ10gPSBmbGFnCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKworICAgICAgICAgICAgZGVsIHNlbGYuZGljdFt2YXJdW2ZsYWddCisKKyAgICBkZWYgYXBwZW5kVmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ2FwcGVuZCcKKyAgICAgICAgbG9naW5mb1snZmxhZyddID0gZmxhZworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgbmV3dmFsdWUgPSAoc2VsZi5nZXRWYXJGbGFnKHZhciwgZmxhZywgRmFsc2UpIG9yICIiKSArIHZhbHVlCisgICAgICAgIHNlbGYuc2V0VmFyRmxhZyh2YXIsIGZsYWcsIG5ld3ZhbHVlLCBpZ25vcmU9VHJ1ZSkKKworICAgIGRlZiBwcmVwZW5kVmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ3ByZXBlbmQnCisgICAgICAgIGxvZ2luZm9bJ2ZsYWcnXSA9IGZsYWcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIG5ld3ZhbHVlID0gdmFsdWUgKyAoc2VsZi5nZXRWYXJGbGFnKHZhciwgZmxhZywgRmFsc2UpIG9yICIiKQorICAgICAgICBzZWxmLnNldFZhckZsYWcodmFyLCBmbGFnLCBuZXd2YWx1ZSwgaWdub3JlPVRydWUpCisKKyAgICBkZWYgc2V0VmFyRmxhZ3Moc2VsZiwgdmFyLCBmbGFncywgKipsb2dpbmZvKToKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBpbmZlcl9jYWxsZXJfZGV0YWlscyhsb2dpbmZvKQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKworICAgICAgICBmb3IgaSBpbiBmbGFnczoKKyAgICAgICAgICAgIGlmIGkgPT0gIl9jb250ZW50IjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbG9naW5mb1snZmxhZyddID0gaQorICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSBmbGFnc1tpXQorICAgICAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXVtpXSA9IGZsYWdzW2ldCisKKyAgICBkZWYgZ2V0VmFyRmxhZ3Moc2VsZiwgdmFyLCBleHBhbmQgPSBGYWxzZSwgaW50ZXJuYWxmbGFncz1GYWxzZSk6CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICBmbGFncyA9IHt9CisKKyAgICAgICAgaWYgbG9jYWxfdmFyOgorICAgICAgICAgICAgZm9yIGkgaW4gbG9jYWxfdmFyOgorICAgICAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiXyIpIGFuZCBub3QgaW50ZXJuYWxmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmbGFnc1tpXSA9IGxvY2FsX3ZhcltpXQorICAgICAgICAgICAgICAgIGlmIGV4cGFuZCBhbmQgaSBpbiBleHBhbmQ6CisgICAgICAgICAgICAgICAgICAgIGZsYWdzW2ldID0gc2VsZi5leHBhbmQoZmxhZ3NbaV0sIHZhciArICJbIiArIGkgKyAiXSIpCisgICAgICAgIGlmIGxlbihmbGFncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBmbGFncworCisKKyAgICBkZWYgZGVsVmFyRmxhZ3Moc2VsZiwgdmFyLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBjb250ZW50ID0gTm9uZQorCisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ2RlbGV0ZSBmbGFncycKKyAgICAgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorCisgICAgICAgICAgICAjIHRyeSB0byBzYXZlIHRoZSBjb250ZW50CisgICAgICAgICAgICBpZiAiX2NvbnRlbnQiIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgICAgIGNvbnRlbnQgID0gc2VsZi5kaWN0W3Zhcl1bIl9jb250ZW50Il0KKyAgICAgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXSAgICAgICAgICAgID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXVsiX2NvbnRlbnQiXSA9IGNvbnRlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuZGljdFt2YXJdCisKKyAgICBkZWYgY3JlYXRlQ29weShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIGNvcHkgb2Ygc2VsZiBieSBzZXR0aW5nIF9kYXRhIHRvIHNlbGYKKyAgICAgICAgIiIiCisgICAgICAgICMgd2UgcmVhbGx5IHdhbnQgdGhpcyB0byBiZSBhIERhdGFTbWFydC4uLgorICAgICAgICBkYXRhID0gRGF0YVNtYXJ0KCkKKyAgICAgICAgZGF0YS5kaWN0WyJfZGF0YSJdID0gc2VsZi5kaWN0CisgICAgICAgIGRhdGEudmFyaGlzdG9yeSA9IHNlbGYudmFyaGlzdG9yeS5jb3B5KCkKKyAgICAgICAgZGF0YS52YXJoaXN0b3J5LmRhdGFzbWFydCA9IGRhdGEKKyAgICAgICAgZGF0YS5pbmNoaXN0b3J5ID0gc2VsZi5pbmNoaXN0b3J5LmNvcHkoKQorCisgICAgICAgIGRhdGEuX3RyYWNraW5nID0gc2VsZi5fdHJhY2tpbmcKKworICAgICAgICBkYXRhLm92ZXJyaWRlcyA9IE5vbmUKKyAgICAgICAgZGF0YS5vdmVycmlkZXZhcnMgPSBjb3B5LmNvcHkoc2VsZi5vdmVycmlkZXZhcnMpCisgICAgICAgICMgU2hvdWxkIHJlYWxseSBiZSBhIGRlZXBjb3B5IGJ1dCBoYXMgaGVhdnkgb3ZlcmhlYWQuCisgICAgICAgICMgSW5zdGVhZCwgd2UncmUgY2FyZWZ1bCB3aXRoIHdyaXRlcy4KKyAgICAgICAgZGF0YS5vdmVycmlkZWRhdGEgPSBjb3B5LmNvcHkoc2VsZi5vdmVycmlkZWRhdGEpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBleHBhbmRWYXJyZWYoc2VsZiwgdmFyaWFibGUsIHBhcmVudHM9RmFsc2UpOgorICAgICAgICAiIiJGaW5kIGFsbCByZWZlcmVuY2VzIHRvIHZhcmlhYmxlIGluIHRoZSBkYXRhIGFuZCBleHBhbmQgaXQKKyAgICAgICAgICAgaW4gcGxhY2UsIG9wdGlvbmFsbHkgZGVzY2VuZGluZyB0byBwYXJlbnQgZGF0YXN0b3Jlcy4iIiIKKworICAgICAgICBpZiBwYXJlbnRzOgorICAgICAgICAgICAga2V5cyA9IGl0ZXIoc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmxvY2Fsa2V5cygpCisKKyAgICAgICAgcmVmID0gJyR7JXN9JyAlIHZhcmlhYmxlCisgICAgICAgIHZhbHVlID0gc2VsZi5nZXRWYXIodmFyaWFibGUsIEZhbHNlKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICByZWZlcnJlcnZhbHVlID0gc2VsZi5nZXRWYXIoa2V5LCBGYWxzZSkKKyAgICAgICAgICAgIGlmIHJlZmVycmVydmFsdWUgYW5kIHJlZiBpbiByZWZlcnJlcnZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0VmFyKGtleSwgcmVmZXJyZXJ2YWx1ZS5yZXBsYWNlKHJlZiwgdmFsdWUpKQorCisgICAgZGVmIGxvY2Fsa2V5cyhzZWxmKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBpZiBrZXkgIT0gJ19kYXRhJzoKKyAgICAgICAgICAgICAgICB5aWVsZCBrZXkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZGVsZXRlZCA9IHNldCgpCisgICAgICAgIG92ZXJyaWRlcyA9IHNldCgpCisgICAgICAgIGRlZiBrZXlsaXN0KGQpOiAgICAgICAgCisgICAgICAgICAgICBrbGlzdCA9IHNldCgpCisgICAgICAgICAgICBmb3Iga2V5IGluIGQ6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJfZGF0YSI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIGRlbGV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIG92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgZFtrZXldOgorICAgICAgICAgICAgICAgICAgICBkZWxldGVkLmFkZChrZXkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAga2xpc3QuYWRkKGtleSkKKworICAgICAgICAgICAgaWYgIl9kYXRhIiBpbiBkOgorICAgICAgICAgICAgICAgIGtsaXN0IHw9IGtleWxpc3QoZFsiX2RhdGEiXSkKKworICAgICAgICAgICAgcmV0dXJuIGtsaXN0CisKKyAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgIGZvciB2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGE6CisgICAgICAgICAgICBmb3IgKHIsIG8pIGluIHNlbGYub3ZlcnJpZGVkYXRhW3Zhcl06CisgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLmFkZCh2YXIpCisgICAgICAgICAgICAgICAgZWxpZiAiXyIgaW4gbzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2V0KG8uc3BsaXQoIl8iKSkuaXNzdWJzZXQoc2VsZi5vdmVycmlkZXNzZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLmFkZCh2YXIpCisKKyAgICAgICAgZm9yIGsgaW4ga2V5bGlzdChzZWxmLmRpY3QpOgorICAgICAgICAgICAgIHlpZWxkIGsKKworICAgICAgICBmb3IgayBpbiBvdmVycmlkZXM6CisgICAgICAgICAgICAgeWllbGQgaworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oZnJvemVuc2V0KHNlbGYpKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pOgorICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0VmFyKGl0ZW0sIEZhbHNlKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIHZhciwgdmFsdWUpOgorICAgICAgICBzZWxmLnNldFZhcih2YXIsIHZhbHVlKQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIHZhcik6CisgICAgICAgIHNlbGYuZGVsVmFyKHZhcikKKworICAgIGRlZiBnZXRfaGFzaChzZWxmKToKKyAgICAgICAgZGF0YSA9IHt9CisgICAgICAgIGQgPSBzZWxmLmNyZWF0ZUNvcHkoKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoZCkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShkKQorCisgICAgICAgIGNvbmZpZ193aGl0ZWxpc3QgPSBzZXQoKGQuZ2V0VmFyKCJCQl9IQVNIQ09ORklHX1dISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICBrZXlzID0gc2V0KGtleSBmb3Iga2V5IGluIGl0ZXIoZCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBpZiBrZXkgaW4gY29uZmlnX3doaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpIG9yICIiCisgICAgICAgICAgICBkYXRhLnVwZGF0ZSh7a2V5OnZhbHVlfSkKKworICAgICAgICAgICAgdmFyZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSwgaW50ZXJuYWxmbGFncyA9IFRydWUpCisgICAgICAgICAgICBpZiBub3QgdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBmIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gIl9jb250ZW50IjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkYXRhLnVwZGF0ZSh7JyVzWyVzXScgJSAoa2V5LCBmKTp2YXJmbGFnc1tmXX0pCisKKyAgICAgICAgZm9yIGtleSBpbiBbIl9fQkJUQVNLUyIsICJfX0JCQU5PTkZVTkNTIiwgIl9fQkJIQU5ETEVSUyJdOgorICAgICAgICAgICAgYmJfbGlzdCA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpIG9yIFtdCisgICAgICAgICAgICBiYl9saXN0LnNvcnQoKQorICAgICAgICAgICAgZGF0YS51cGRhdGUoe2tleTpzdHIoYmJfbGlzdCl9KQorCisgICAgICAgICAgICBpZiBrZXkgPT0gIl9fQkJBTk9ORlVOQ1MiOgorICAgICAgICAgICAgICAgIGZvciBpIGluIGJiX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoaSwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgICAgICAgICAgZGF0YS51cGRhdGUoe2k6dmFsdWV9KQorCisgICAgICAgIGRhdGFfc3RyID0gc3RyKFsoaywgZGF0YVtrXSkgZm9yIGsgaW4gc29ydGVkKGRhdGEua2V5cygpKV0pCisgICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhX3N0cikuaGV4ZGlnZXN0KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZXZlbnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V2ZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmJjNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V2ZW50LnB5CkBAIC0wLDAgKzEsNjY4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdFdmVudCcgaW1wbGVtZW50YXRpb24KKworQ2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgJ2V2ZW50cycgaW4gdGhlCitCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgd2FybmluZ3MKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGF0ZXhpdAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgYmIuY29tcGF0CitpbXBvcnQgYmIuZXhjZXB0aW9ucworCisjIFRoaXMgaXMgdGhlIHBpZCBmb3Igd2hpY2ggd2Ugc2hvdWxkIGdlbmVyYXRlIHRoZSBldmVudC4gVGhpcyBpcyBzZXQgd2hlbgorIyB0aGUgcnVucXVldWUgZm9ya3Mgb2ZmLgord29ya2VyX3BpZCA9IDAKK3dvcmtlcl9maXJlID0gTm9uZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5FdmVudCcpCisKK2NsYXNzIEV2ZW50KG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgZXZlbnRzIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucGlkID0gd29ya2VyX3BpZAorCitSZWdpc3RlcmVkICAgICAgICA9IDEwCitBbHJlYWR5UmVnaXN0ZXJlZCA9IDE0CisKK2RlZiBnZXRfY2xhc3NfaGFuZGxlcnMoKToKKyAgICByZXR1cm4gX2hhbmRsZXJzCisKK2RlZiBzZXRfY2xhc3NfaGFuZGxlcnMoaCk6CisgICAgZ2xvYmFsIF9oYW5kbGVycworICAgIF9oYW5kbGVycyA9IGgKKworZGVmIGNsZWFuX2NsYXNzX2hhbmRsZXJzKCk6CisgICAgcmV0dXJuIGJiLmNvbXBhdC5PcmRlcmVkRGljdCgpCisKKyMgSW50ZXJuYWwKK19oYW5kbGVycyA9IGNsZWFuX2NsYXNzX2hhbmRsZXJzKCkKK191aV9oYW5kbGVycyA9IHt9CitfdWlfbG9nZmlsdGVycyA9IHt9CitfdWlfaGFuZGxlcl9zZXEgPSAwCitfZXZlbnRfaGFuZGxlcl9tYXAgPSB7fQorX2NhdGNoYWxsX2hhbmRsZXJzID0ge30KK19ldmVudGZpbHRlciA9IE5vbmUKK191aXJlYWR5ID0gRmFsc2UKKworZGVmIGV4ZWN1dGVfaGFuZGxlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCk6CisgICAgZXZlbnQuZGF0YSA9IGQKKyAgICBhZGRlZGQgPSBGYWxzZQorICAgIGlmICdkJyBub3QgaW4gX19idWlsdGluc19fOgorICAgICAgICBfX2J1aWx0aW5zX19bJ2QnXSA9IGQKKyAgICAgICAgYWRkZWRkID0gVHJ1ZQorICAgIHRyeToKKyAgICAgICAgcmV0ID0gaGFuZGxlcihldmVudCkKKyAgICBleGNlcHQgKGJiLnBhcnNlLlNraXBSZWNpcGUsIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGxvZ2dlci5lcnJvcigiRXhlY3V0aW9uIG9mIGV2ZW50IGhhbmRsZXIgJyVzJyBmYWlsZWQiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShldHlwZSwgdmFsdWUsIHRiLnRiX25leHQpKQorICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmNvZGUgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRXhlY3V0aW9uIG9mIGV2ZW50IGhhbmRsZXIgJyVzJyBmYWlsZWQiICUgbmFtZSkKKyAgICAgICAgcmFpc2UKKyAgICBmaW5hbGx5OgorICAgICAgICBkZWwgZXZlbnQuZGF0YQorICAgICAgICBpZiBhZGRlZGQ6CisgICAgICAgICAgICBkZWwgX19idWlsdGluc19fWydkJ10KKworZGVmIGZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQsIGQpOgorICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBlaWQgPSBzdHIoZXZlbnQuX19jbGFzc19fKVs4Oi0yXQorICAgIGV2dF9obWFwID0gX2V2ZW50X2hhbmRsZXJfbWFwLmdldChlaWQsIHt9KQorICAgIGZvciBuYW1lLCBoYW5kbGVyIGluIF9oYW5kbGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSBpbiBfY2F0Y2hhbGxfaGFuZGxlcnMgb3IgbmFtZSBpbiBldnRfaG1hcDoKKyAgICAgICAgICAgIGlmIF9ldmVudGZpbHRlcjoKKyAgICAgICAgICAgICAgICBpZiBub3QgX2V2ZW50ZmlsdGVyKG5hbWUsIGhhbmRsZXIsIGV2ZW50LCBkKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4ZWN1dGVfaGFuZGxlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCkKKwordWlfcXVldWUgPSBbXQorQGF0ZXhpdC5yZWdpc3RlcgorZGVmIHByaW50X3VpX3F1ZXVlKCk6CisgICAgIiIiSWYgd2UncmUgZXhpdGluZyBiZWZvcmUgYSBVSSBoYXMgYmVlbiBzcGF3bmVkLCBkaXNwbGF5IGFueSBxdWV1ZWQKKyAgICBMb2dSZWNvcmRzIHRvIHRoZSBjb25zb2xlLiIiIgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICBpZiBub3QgX3VpcmVhZHk6CisgICAgICAgIGZyb20gYmIubXNnIGltcG9ydCBCQkxvZ0Zvcm1hdHRlcgorICAgICAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKEJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgICAgICBsb2dnZXIuaGFuZGxlcnMgPSBbY29uc29sZV0KKworICAgICAgICAjIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGFueSBwcm9wZXIgbWVzc2FnZXMKKyAgICAgICAgbXNncHJpbnQgPSBGYWxzZQorICAgICAgICBmb3IgZXZlbnQgaW4gdWlfcXVldWU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuREVCVUc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgICAgIG1zZ3ByaW50ID0gVHJ1ZQorICAgICAgICBpZiBtc2dwcmludDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTm9wZSwgc28ganVzdCBwcmludCBhbGwgb2YgdGhlIG1lc3NhZ2VzIHdlIGhhdmUgKGluY2x1ZGluZyBkZWJ1ZyBtZXNzYWdlcykKKyAgICAgICAgZm9yIGV2ZW50IGluIHVpX3F1ZXVlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisKK2RlZiBmaXJlX3VpX2hhbmRsZXJzKGV2ZW50LCBkKToKKyAgICBpZiBub3QgX3VpcmVhZHk6CisgICAgICAgICMgTm8gVUkgaGFuZGxlcnMgcmVnaXN0ZXJlZCB5ZXQsIHF1ZXVlIHVwIHRoZSBtZXNzYWdlcworICAgICAgICB1aV9xdWV1ZS5hcHBlbmQoZXZlbnQpCisgICAgICAgIHJldHVybgorCisgICAgZXJyb3JzID0gW10KKyAgICBmb3IgaCBpbiBfdWlfaGFuZGxlcnM6CisgICAgICAgICNwcmludCAiU2VuZGluZyBldmVudCAlcyIgJSBldmVudAorICAgICAgICB0cnk6CisgICAgICAgICAgICAgaWYgbm90IF91aV9sb2dmaWx0ZXJzW2hdLmZpbHRlcihldmVudCk6CisgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgIyBXZSB1c2UgcGlja2xlIGhlcmUgc2luY2UgaXQgYmV0dGVyIGhhbmRsZXMgb2JqZWN0IGluc3RhbmNlcworICAgICAgICAgICAgICMgd2hpY2ggeG1scnBjJ3MgbWFyc2hhbGxlciBkb2VzIG5vdC4gRXZlbnRzICptdXN0KiBiZSBzZXJpYWxpemFibGUKKyAgICAgICAgICAgICAjIGJ5IHBpY2tsZS4KKyAgICAgICAgICAgICBpZiBoYXNhdHRyKF91aV9oYW5kbGVyc1toXS5ldmVudCwgInNlbmRwaWNrbGUiKToKKyAgICAgICAgICAgICAgICBfdWlfaGFuZGxlcnNbaF0uZXZlbnQuc2VuZHBpY2tsZSgocGlja2xlLmR1bXBzKGV2ZW50KSkpCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdWlfaGFuZGxlcnNbaF0uZXZlbnQuc2VuZChldmVudCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChoKQorICAgIGZvciBoIGluIGVycm9yczoKKyAgICAgICAgZGVsIF91aV9oYW5kbGVyc1toXQorCitkZWYgZmlyZShldmVudCwgZCk6CisgICAgIiIiRmlyZSBvZmYgYW4gRXZlbnQiIiIKKworICAgICMgV2UgY2FuIGZpcmUgY2xhc3MgaGFuZGxlcnMgaW4gdGhlIHdvcmtlciBwcm9jZXNzIGNvbnRleHQgYW5kIHRoaXMgaXMKKyAgICAjIGRlc2lyZWQgc28gdGhleSBnZXQgdGhlIHRhc2sgYmFzZWQgZGF0YXN0b3JlLgorICAgICMgVUkgaGFuZGxlcnMgbmVlZCB0byBiZSBmaXJlZCBpbiB0aGUgc2VydmVyIGNvbnRleHQgc28gd2UgZGVmZXIgdGhpcy4gVGhleQorICAgICMgZG9uJ3QgaGF2ZSBhIGRhdGFzdG9yZSBzbyB0aGUgZGF0YXN0b3JlIGNvbnRleHQgaXNuJ3QgYSBwcm9ibGVtLgorCisgICAgZmlyZV9jbGFzc19oYW5kbGVycyhldmVudCwgZCkKKyAgICBpZiB3b3JrZXJfZmlyZToKKyAgICAgICAgd29ya2VyX2ZpcmUoZXZlbnQsIGQpCisgICAgZWxzZToKKyAgICAgICAgZmlyZV91aV9oYW5kbGVycyhldmVudCwgZCkKKworZGVmIGZpcmVfZnJvbV93b3JrZXIoZXZlbnQsIGQpOgorICAgIGZpcmVfdWlfaGFuZGxlcnMoZXZlbnQsIGQpCisKK25vb3AgPSBsYW1iZGEgXzogTm9uZQorZGVmIHJlZ2lzdGVyKG5hbWUsIGhhbmRsZXIsIG1hc2s9Tm9uZSk6CisgICAgIiIiUmVnaXN0ZXIgYW4gRXZlbnQgaGFuZGxlciIiIgorCisgICAgIyBhbHJlYWR5IHJlZ2lzdGVyZWQKKyAgICBpZiBuYW1lIGluIF9oYW5kbGVyczoKKyAgICAgICAgcmV0dXJuIEFscmVhZHlSZWdpc3RlcmVkCisKKyAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAjIGhhbmRsZSBzdHJpbmcgY29udGFpbmluZyBweXRob24gY29kZQorICAgICAgICBpZiBpc2luc3RhbmNlKGhhbmRsZXIsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgdG1wID0gImRlZiAlcyhlKTpcbiVzIiAlIChuYW1lLCBoYW5kbGVyKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKHRtcCwgIiVzKGUpIiAlIG5hbWUsICJleGVjIikKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byByZWdpc3RlciBldmVudCBoYW5kbGVyICclcyc6XG4lcyIsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGMobGltaXQ9MCkpKQorICAgICAgICAgICAgICAgIF9oYW5kbGVyc1tuYW1lXSA9IG5vb3AKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVudiA9IHt9CisgICAgICAgICAgICBiYi51dGlscy5iZXR0ZXJfZXhlYyhjb2RlLCBlbnYpCisgICAgICAgICAgICBmdW5jID0gYmIudXRpbHMuYmV0dGVyX2V2YWwobmFtZSwgZW52KQorICAgICAgICAgICAgX2hhbmRsZXJzW25hbWVdID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2hhbmRsZXJzW25hbWVdID0gaGFuZGxlcgorCisgICAgICAgIGlmIG5vdCBtYXNrIG9yICcqJyBpbiBtYXNrOgorICAgICAgICAgICAgX2NhdGNoYWxsX2hhbmRsZXJzW25hbWVdID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIG0gaW4gbWFzazoKKyAgICAgICAgICAgICAgICBpZiBfZXZlbnRfaGFuZGxlcl9tYXAuZ2V0KG0sIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIF9ldmVudF9oYW5kbGVyX21hcFttXSA9IHt9CisgICAgICAgICAgICAgICAgX2V2ZW50X2hhbmRsZXJfbWFwW21dW25hbWVdID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBSZWdpc3RlcmVkCisKK2RlZiByZW1vdmUobmFtZSwgaGFuZGxlcik6CisgICAgIiIiUmVtb3ZlIGFuIEV2ZW50IGhhbmRsZXIiIiIKKyAgICBfaGFuZGxlcnMucG9wKG5hbWUpCisKK2RlZiBzZXRfZXZlbnRmaWx0ZXIoZnVuYyk6CisgICAgZ2xvYmFsIF9ldmVudGZpbHRlcgorICAgIF9ldmVudGZpbHRlciA9IGZ1bmMKKworZGVmIHJlZ2lzdGVyX1VJSGhhbmRsZXIoaGFuZGxlciwgbWFpbnVpPUZhbHNlKToKKyAgICBpZiBtYWludWk6CisgICAgICAgIGdsb2JhbCBfdWlyZWFkeQorICAgICAgICBfdWlyZWFkeSA9IFRydWUKKyAgICBiYi5ldmVudC5fdWlfaGFuZGxlcl9zZXEgPSBiYi5ldmVudC5fdWlfaGFuZGxlcl9zZXEgKyAxCisgICAgX3VpX2hhbmRsZXJzW191aV9oYW5kbGVyX3NlcV0gPSBoYW5kbGVyCisgICAgbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCisgICAgX3VpX2xvZ2ZpbHRlcnNbX3VpX2hhbmRsZXJfc2VxXSA9IFVJRXZlbnRGaWx0ZXIobGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisgICAgcmV0dXJuIF91aV9oYW5kbGVyX3NlcQorCitkZWYgdW5yZWdpc3Rlcl9VSUhoYW5kbGVyKGhhbmRsZXJOdW0pOgorICAgIGlmIGhhbmRsZXJOdW0gaW4gX3VpX2hhbmRsZXJzOgorICAgICAgICBkZWwgX3VpX2hhbmRsZXJzW2hhbmRsZXJOdW1dCisgICAgcmV0dXJuCisKKyMgQ2xhc3MgdG8gYWxsb3cgZmlsdGVyaW5nIG9mIGV2ZW50cyBhbmQgc3BlY2lmaWMgZmlsdGVyaW5nIG9mIExvZ1JlY29yZHMgKmJlZm9yZSogd2UgcHV0IHRoZW0gb3ZlciB0aGUgSVBDCitjbGFzcyBVSUV2ZW50RmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxldmVsLCBkZWJ1Z19kb21haW5zKToKKyAgICAgICAgc2VsZi51cGRhdGUoTm9uZSwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGV2ZW50bWFzaywgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpOgorICAgICAgICBzZWxmLmV2ZW50bWFzayA9IGV2ZW50bWFzaworICAgICAgICBzZWxmLnN0ZGxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5kZWJ1Z19kb21haW5zID0gZGVidWdfZG9tYWlucworCisgICAgZGVmIGZpbHRlcihzZWxmLCBldmVudCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gc2VsZi5zdGRsZXZlbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgZXZlbnQubmFtZSBpbiBzZWxmLmRlYnVnX2RvbWFpbnMgYW5kIGV2ZW50LmxldmVsbm8gPj0gc2VsZi5kZWJ1Z19kb21haW5zW2V2ZW50Lm5hbWVdOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWlkID0gc3RyKGV2ZW50Ll9fY2xhc3NfXylbODotMl0KKyAgICAgICAgaWYgc2VsZi5ldmVudG1hc2sgYW5kIGVpZCBub3QgaW4gc2VsZi5ldmVudG1hc2s6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIHNldF9VSUhtYXNrKGhhbmRsZXJOdW0sIGxldmVsLCBkZWJ1Z19kb21haW5zLCBtYXNrKToKKyAgICBpZiBub3QgaGFuZGxlck51bSBpbiBfdWlfaGFuZGxlcnM6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmICcqJyBpbiBtYXNrOgorICAgICAgICBfdWlfbG9nZmlsdGVyc1toYW5kbGVyTnVtXS51cGRhdGUoTm9uZSwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisgICAgZWxzZToKKyAgICAgICAgX3VpX2xvZ2ZpbHRlcnNbaGFuZGxlck51bV0udXBkYXRlKG1hc2ssIGxldmVsLCBkZWJ1Z19kb21haW5zKQorICAgIHJldHVybiBUcnVlCisKK2RlZiBnZXROYW1lKGUpOgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgYSBjbGFzcyBvciBjbGFzcyBpbnN0YW5jZSIiIgorICAgIGlmIGdldGF0dHIoZSwgIl9fbmFtZV9fIiwgTm9uZSkgPT0gTm9uZToKKyAgICAgICAgcmV0dXJuIGUuX19jbGFzc19fLl9fbmFtZV9fCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGUuX19uYW1lX18KKworY2xhc3MgT3BlcmF0aW9uU3RhcnRlZChFdmVudCk6CisgICAgIiIiQW4gb3BlcmF0aW9uIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cgPSAiT3BlcmF0aW9uIFN0YXJ0ZWQiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKworY2xhc3MgT3BlcmF0aW9uQ29tcGxldGVkKEV2ZW50KToKKyAgICAiIiJBbiBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCwgbXNnID0gIk9wZXJhdGlvbiBDb21wbGV0ZWQiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi50b3RhbCA9IHRvdGFsCisgICAgICAgIHNlbGYubXNnID0gbXNnCisKK2NsYXNzIE9wZXJhdGlvblByb2dyZXNzKEV2ZW50KToKKyAgICAiIiJBbiBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsIG1zZyA9ICJPcGVyYXRpb24gaW4gUHJvZ3Jlc3MiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gY3VycmVudAorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cgKyAiOiAlcy8lcyIgJSAoY3VycmVudCwgdG90YWwpOworCitjbGFzcyBDb25maWdQYXJzZWQoRXZlbnQpOgorICAgICIiIkNvbmZpZ3VyYXRpb24gUGFyc2luZyBDb21wbGV0ZSIiIgorCitjbGFzcyBSZWNpcGVFdmVudChFdmVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZuKToKKyAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIFJlY2lwZVByZUZpbmFsaXNlKFJlY2lwZUV2ZW50KToKKyAgICAiIiIgUmVjaXBlIFBhcnNpbmcgQ29tcGxldGUgYnV0IG5vdCB5ZXQgZmluaWFsaXNlZCIiIgorCitjbGFzcyBSZWNpcGVQYXJzZWQoUmVjaXBlRXZlbnQpOgorICAgICIiIiBSZWNpcGUgUGFyc2luZyBDb21wbGV0ZSAiIiIKKworY2xhc3MgU3RhbXBVcGRhdGUoRXZlbnQpOgorICAgICIiIlRyaWdnZXIgZm9yIGFueSBhZGp1c3RtZW50IG9mIHRoZSBzdGFtcCBmaWxlcyB0byBoYXBwZW4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXRzLCBzdGFtcGZucyk6CisgICAgICAgIHNlbGYuX3RhcmdldHMgPSB0YXJnZXRzCisgICAgICAgIHNlbGYuX3N0YW1wZm5zID0gc3RhbXBmbnMKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKworICAgIGRlZiBnZXRTdGFtcFByZWZpeChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YW1wZm5zCisKKyAgICBkZWYgZ2V0VGFyZ2V0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RhcmdldHMKKworICAgIHN0YW1wUHJlZml4ID0gcHJvcGVydHkoZ2V0U3RhbXBQcmVmaXgpCisgICAgdGFyZ2V0cyA9IHByb3BlcnR5KGdldFRhcmdldHMpCisKK2NsYXNzIEJ1aWxkQmFzZShFdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgYmJtYWtlIHJ1biBldmVudHMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBwLCBmYWlsdXJlcyA9IDApOgorICAgICAgICBzZWxmLl9uYW1lID0gbgorICAgICAgICBzZWxmLl9wa2dzID0gcAorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGZhaWx1cmVzCisKKyAgICBkZWYgZ2V0UGtncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BrZ3MKKworICAgIGRlZiBzZXRQa2dzKHNlbGYsIHBrZ3MpOgorICAgICAgICBzZWxmLl9wa2dzID0gcGtncworCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc2V0TmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBnZXRDZmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEKKworICAgIGRlZiBzZXRDZmcoc2VsZiwgY2ZnKToKKyAgICAgICAgc2VsZi5kYXRhID0gY2ZnCisKKyAgICBkZWYgZ2V0RmFpbHVyZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBmYWlsZWQgcGFja2FnZXMKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mYWlsdXJlcworCisgICAgcGtncyA9IHByb3BlcnR5KGdldFBrZ3MsIHNldFBrZ3MsIE5vbmUsICJwa2dzIHByb3BlcnR5IikKKyAgICBuYW1lID0gcHJvcGVydHkoZ2V0TmFtZSwgc2V0TmFtZSwgTm9uZSwgIm5hbWUgcHJvcGVydHkiKQorICAgIGNmZyA9IHByb3BlcnR5KGdldENmZywgc2V0Q2ZnLCBOb25lLCAiY2ZnIHByb3BlcnR5IikKKworCisKKworCitjbGFzcyBCdWlsZFN0YXJ0ZWQoQnVpbGRCYXNlLCBPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJiYm1ha2UgYnVpbGQgcnVuIHN0YXJ0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbiwgcCwgZmFpbHVyZXMgPSAwKToKKyAgICAgICAgT3BlcmF0aW9uU3RhcnRlZC5fX2luaXRfXyhzZWxmLCAiQnVpbGRpbmcgU3RhcnRlZCIpCisgICAgICAgIEJ1aWxkQmFzZS5fX2luaXRfXyhzZWxmLCBuLCBwLCBmYWlsdXJlcykKKworY2xhc3MgQnVpbGRDb21wbGV0ZWQoQnVpbGRCYXNlLCBPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiImJibWFrZSBidWlsZCBydW4gY29tcGxldGVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvdGFsLCBuLCBwLCBmYWlsdXJlcz0wLCBpbnRlcnJ1cHRlZD0wKToKKyAgICAgICAgaWYgbm90IGZhaWx1cmVzOgorICAgICAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiQnVpbGRpbmcgU3VjY2VlZGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIE9wZXJhdGlvbkNvbXBsZXRlZC5fX2luaXRfXyhzZWxmLCB0b3RhbCwgIkJ1aWxkaW5nIEZhaWxlZCIpCisgICAgICAgIHNlbGYuX2ludGVycnVwdGVkID0gaW50ZXJydXB0ZWQKKyAgICAgICAgQnVpbGRCYXNlLl9faW5pdF9fKHNlbGYsIG4sIHAsIGZhaWx1cmVzKQorCitjbGFzcyBEaXNrRnVsbChFdmVudCk6CisgICAgIiIiRGlzayBmdWxsIGNhc2UgYnVpbGQgYWJvcnRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXYsIHR5cGUsIGZyZWVzcGFjZSwgbW91bnRwb2ludCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2RldiA9IGRldgorICAgICAgICBzZWxmLl90eXBlID0gdHlwZQorICAgICAgICBzZWxmLl9mcmVlID0gZnJlZXNwYWNlCisgICAgICAgIHNlbGYuX21vdW50cG9pbnQgPSBtb3VudHBvaW50CisKK2NsYXNzIE5vUHJvdmlkZXIoRXZlbnQpOgorICAgICIiIk5vIFByb3ZpZGVyIGZvciBhbiBFdmVudCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW0sIHJ1bnRpbWU9RmFsc2UsIGRlcGVuZGVlcz1Ob25lLCByZWFzb25zPU5vbmUsIGNsb3NlX21hdGNoZXM9Tm9uZSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2l0ZW0gPSBpdGVtCisgICAgICAgIHNlbGYuX3J1bnRpbWUgPSBydW50aW1lCisgICAgICAgIHNlbGYuX2RlcGVuZGVlcyA9IGRlcGVuZGVlcworICAgICAgICBzZWxmLl9yZWFzb25zID0gcmVhc29ucworICAgICAgICBzZWxmLl9jbG9zZV9tYXRjaGVzID0gY2xvc2VfbWF0Y2hlcworCisgICAgZGVmIGdldEl0ZW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pdGVtCisKKyAgICBkZWYgaXNSdW50aW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVudGltZQorCitjbGFzcyBNdWx0aXBsZVByb3ZpZGVycyhFdmVudCk6CisgICAgIiIiTXVsdGlwbGUgUHJvdmlkZXJzIiIiCisKKyAgICBkZWYgIF9faW5pdF9fKHNlbGYsIGl0ZW0sIGNhbmRpZGF0ZXMsIHJ1bnRpbWUgPSBGYWxzZSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2l0ZW0gPSBpdGVtCisgICAgICAgIHNlbGYuX2NhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzCisgICAgICAgIHNlbGYuX2lzX3J1bnRpbWUgPSBydW50aW1lCisKKyAgICBkZWYgaXNSdW50aW1lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhpcyBhIHJ1bnRpbWUgaXNzdWU/CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5faXNfcnVudGltZQorCisgICAgZGVmIGdldEl0ZW0oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgbmFtZSBmb3IgdGhlIHRvIGJlIGJ1aWxkIGl0ZW0KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVtCisKKyAgICBkZWYgZ2V0Q2FuZGlkYXRlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgcG9zc2libGUgQ2FuZGlkYXRlcyBmb3IgYSBQUk9WSURFUi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jYW5kaWRhdGVzCisKK2NsYXNzIFBhcnNlU3RhcnRlZChPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJSZWNpcGUgcGFyc2luZyBmb3IgdGhlIHJ1bnF1ZXVlIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIlJlY2lwZSBwYXJzaW5nIFN0YXJ0ZWQiKQorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKworY2xhc3MgUGFyc2VDb21wbGV0ZWQoT3BlcmF0aW9uQ29tcGxldGVkKToKKyAgICAiIiJSZWNpcGUgcGFyc2luZyBmb3IgdGhlIHJ1bnF1ZXVlIGhhcyBjb21wbGV0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVkLCBwYXJzZWQsIHNraXBwZWQsIG1hc2tlZCwgdmlydHVhbHMsIGVycm9ycywgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25Db21wbGV0ZWQuX19pbml0X18oc2VsZiwgdG90YWwsICJSZWNpcGUgcGFyc2luZyBDb21wbGV0ZWQiKQorICAgICAgICBzZWxmLmNhY2hlZCA9IGNhY2hlZAorICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZAorICAgICAgICBzZWxmLnNraXBwZWQgPSBza2lwcGVkCisgICAgICAgIHNlbGYudmlydHVhbHMgPSB2aXJ0dWFscworICAgICAgICBzZWxmLm1hc2tlZCA9IG1hc2tlZAorICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycworICAgICAgICBzZWxmLnNvZmFyID0gY2FjaGVkICsgcGFyc2VkCisKK2NsYXNzIFBhcnNlUHJvZ3Jlc3MoT3BlcmF0aW9uUHJvZ3Jlc3MpOgorICAgICIiIlJlY2lwZSBwYXJzaW5nIHByb2dyZXNzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uUHJvZ3Jlc3MuX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsICJSZWNpcGUgcGFyc2luZyIpCisKKworY2xhc3MgQ2FjaGVMb2FkU3RhcnRlZChPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJMb2FkaW5nIG9mIHRoZSBkZXBlbmRlbmN5IGNhY2hlIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIkxvYWRpbmcgY2FjaGUgU3RhcnRlZCIpCisgICAgICAgIHNlbGYudG90YWwgPSB0b3RhbAorCitjbGFzcyBDYWNoZUxvYWRQcm9ncmVzcyhPcGVyYXRpb25Qcm9ncmVzcyk6CisgICAgIiIiQ2FjaGUgbG9hZGluZyBwcm9ncmVzcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjdXJyZW50LCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblByb2dyZXNzLl9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsLCAiTG9hZGluZyBjYWNoZSIpCisKK2NsYXNzIENhY2hlTG9hZENvbXBsZXRlZChPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiIkNhY2hlIGxvYWRpbmcgaXMgY29tcGxldGUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwsIG51bV9lbnRyaWVzKToKKyAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiTG9hZGluZyBjYWNoZSBDb21wbGV0ZWQiKQorICAgICAgICBzZWxmLm51bV9lbnRyaWVzID0gbnVtX2VudHJpZXMKKworY2xhc3MgVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQoT3BlcmF0aW9uU3RhcnRlZCk6CisgICAgIiIiVHJlZSBkYXRhIHByZXBhcmF0aW9uIHN0YXJ0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIlByZXBhcmluZyB0cmVlIGRhdGEgU3RhcnRlZCIpCisKK2NsYXNzIFRyZWVEYXRhUHJlcGFyYXRpb25Qcm9ncmVzcyhPcGVyYXRpb25Qcm9ncmVzcyk6CisgICAgIiIiVHJlZSBkYXRhIHByZXBhcmF0aW9uIGlzIGluIHByb2dyZXNzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uUHJvZ3Jlc3MuX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsICJQcmVwYXJpbmcgdHJlZSBkYXRhIikKKworY2xhc3MgVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZChPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiIlRyZWUgZGF0YSBwcmVwYXJhdGlvbiBjb21wbGV0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25Db21wbGV0ZWQuX19pbml0X18oc2VsZiwgdG90YWwsICJQcmVwYXJpbmcgdHJlZSBkYXRhIENvbXBsZXRlZCIpCisKK2NsYXNzIERlcFRyZWVHZW5lcmF0ZWQoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHdoZW4gYSBkZXBlbmRlbmN5IHRyZWUgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVwZ3JhcGgpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9kZXBncmFwaCA9IGRlcGdyYXBoCisKK2NsYXNzIFRhcmdldHNUcmVlR2VuZXJhdGVkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgc2V0IG9mIGJ1aWxkYWJsZSB0YXJnZXRzIGhhcyBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKworY2xhc3MgUmVhY2hhYmxlU3RhbXBzKEV2ZW50KToKKyAgICAiIiIKKyAgICBBbiBldmVudCBsaXN0aW5nIGFsbCBzdGFtcHMgcmVhY2hhYmxlIGFmdGVyIHBhcnNpbmcKKyAgICB3aGljaCB0aGUgbWV0YWRhdGEgbWF5IHVzZSB0byBjbGVhbiB1cCBzdGFsZSBkYXRhCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhbXBzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zdGFtcHMgPSBzdGFtcHMKKworY2xhc3MgRmlsZXNNYXRjaGluZ0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBmaWxlcyBtYXRjaGluZyB0aGUgc3VwcGxpZWQgcGF0dGVybiBoYXMKKyAgICBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXR0ZXJuLCBtYXRjaGVzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0dGVybiA9IHBhdHRlcm4KKyAgICAgICAgc2VsZi5fbWF0Y2hlcyA9IG1hdGNoZXMKKworY2xhc3MgQ29yZUJhc2VGaWxlc0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBhcHByb3ByaWF0ZSBjb25maWcgZmlsZXMgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0aHMgPSBwYXRocworCitjbGFzcyBDb25maWdGaWxlc0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBhcHByb3ByaWF0ZSBjb25maWcgZmlsZXMgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZXMpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl92YXJpYWJsZSA9IHZhcmlhYmxlCisgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHZhbHVlcworCitjbGFzcyBDb25maWdGaWxlUGF0aEZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgcGF0aCBmb3IgYSBjb25maWcgZmlsZSBoYXMgYmVlbiBmb3VuZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKworY2xhc3MgTXNnQmFzZShFdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgbWVzc2FnZXMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9tZXNzYWdlID0gbXNnCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIE1zZ0RlYnVnKE1zZ0Jhc2UpOgorICAgICIiIkRlYnVnIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnTm90ZShNc2dCYXNlKToKKyAgICAiIiJOb3RlIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnV2FybihNc2dCYXNlKToKKyAgICAiIiJXYXJuaW5nIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnRXJyb3IoTXNnQmFzZSk6CisgICAgIiIiRXJyb3IgTWVzc2FnZSIiIgorCitjbGFzcyBNc2dGYXRhbChNc2dCYXNlKToKKyAgICAiIiJGYXRhbCBNZXNzYWdlIiIiCisKK2NsYXNzIE1zZ1BsYWluKE1zZ0Jhc2UpOgorICAgICIiIkdlbmVyYWwgb3V0cHV0IiIiCisKK2NsYXNzIExvZ0V4ZWNUVFkoRXZlbnQpOgorICAgICIiIlNlbmQgZXZlbnQgY29udGFpbmluZyBwcm9ncmFtIHRvIHNwYXduIG9uIHR0eSBvZiB0aGUgbG9nZ2VyIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgcHJvZywgc2xlZXBfZGVsYXksIHJldHJpZXMpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLnByb2cgPSBwcm9nCisgICAgICAgIHNlbGYuc2xlZXBfZGVsYXkgPSBzbGVlcF9kZWxheQorICAgICAgICBzZWxmLnJldHJpZXMgPSByZXRyaWVzCisKK2NsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAiIiJEaXNwYXRjaCBsb2dnaW5nIG1lc3NhZ2VzIGFzIGJpdGJha2UgZXZlbnRzIiIiCisKKyAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICBpZiByZWNvcmQuZXhjX2luZm86CisgICAgICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gcmVjb3JkLmV4Y19pbmZvCisgICAgICAgICAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4dCcpOgorICAgICAgICAgICAgICAgIHRiID0gbGlzdChiYi5leGNlcHRpb25zLmV4dHJhY3RfdHJhY2ViYWNrKHRiLCBjb250ZXh0PTMpKQorICAgICAgICAgICAgcmVjb3JkLmJiX2V4Y19pbmZvID0gKGV0eXBlLCB2YWx1ZSwgdGIpCisgICAgICAgICAgICByZWNvcmQuZXhjX2luZm8gPSBOb25lCisgICAgICAgIGZpcmUocmVjb3JkLCBOb25lKQorCisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICByZWNvcmQudGFza3BpZCA9IHdvcmtlcl9waWQKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUmVxdWVzdFBhY2thZ2VJbmZvKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byByZXF1ZXN0IHBhY2thZ2UgaW5mb3JtYXRpb24KKyAgICAiIiIKKworY2xhc3MgUGFja2FnZUluZm8oRXZlbnQpOgorICAgICIiIgorICAgIFBhY2thZ2UgaW5mb3JtYXRpb24gZm9yIEdVSQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwa2dpbmZvbGlzdCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BrZ2luZm9saXN0ID0gcGtnaW5mb2xpc3QKKworY2xhc3MgTWV0YWRhdGFFdmVudChFdmVudCk6CisgICAgIiIiCisgICAgR2VuZXJpYyBldmVudCB0aGF0IHRhcmdldCBmb3IgT0UtQ29yZSBjbGFzc2VzCisgICAgdG8gcmVwb3J0IGluZm9ybWF0aW9uIGR1cmluZyBhc3luY2hyb3VzIGV4ZWN1dGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudHR5cGUsIGV2ZW50ZGF0YSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYudHlwZSA9IGV2ZW50dHlwZQorICAgICAgICBzZWxmLl9sb2NhbGRhdGEgPSBldmVudGRhdGEKKworY2xhc3MgU2FuaXR5Q2hlY2soRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIHJ1biBzYW5pdHkgY2hlY2tzLCBlaXRoZXIgcmFpc2UgZXJyb3JzIG9yIGdlbmVyYXRlIGV2ZW50cyBhcyByZXR1cm4gc3RhdHVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW5lcmF0ZWV2ZW50cyA9IFRydWUpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmdlbmVyYXRlZXZlbnRzID0gZ2VuZXJhdGVldmVudHMKKworY2xhc3MgU2FuaXR5Q2hlY2tQYXNzZWQoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIGluZGljYXRlIHNhbml0eSBjaGVjayBoYXMgcGFzc2VkCisgICAgIiIiCisKK2NsYXNzIFNhbml0eUNoZWNrRmFpbGVkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBpbmRpY2F0ZSBzYW5pdHkgY2hlY2sgaGFzIGZhaWxlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIG5ldHdvcmtfZXJyb3I9RmFsc2UpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5fbmV0d29ya19lcnJvciA9IG5ldHdvcmtfZXJyb3IKKworY2xhc3MgTmV0d29ya1Rlc3QoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIHJ1biBuZXR3b3JrIGNvbm5lY3Rpdml0eSB0ZXN0cywgZWl0aGVyIHJhaXNlIGVycm9ycyBvciBnZW5lcmF0ZSBldmVudHMgYXMgcmV0dXJuIHN0YXR1cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuZXJhdGVldmVudHMgPSBUcnVlKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZWV2ZW50cyA9IGdlbmVyYXRlZXZlbnRzCisKK2NsYXNzIE5ldHdvcmtUZXN0UGFzc2VkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBpbmRpY2F0ZSBuZXR3b3JrIHRlc3QgaGFzIHBhc3NlZAorICAgICIiIgorCitjbGFzcyBOZXR3b3JrVGVzdEZhaWxlZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgdG8gaW5kaWNhdGUgbmV0d29yayB0ZXN0IGhhcyBmYWlsZWQKKyAgICAiIiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9leGNlcHRpb25zLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9leGNlcHRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODJjOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2V4Y2VwdGlvbnMucHkKQEAgLTAsMCArMSw5MSBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgYmIubmFtZWR0dXBsZV93aXRoX2FiYworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCisKK2NsYXNzIFRyYWNlYmFja0VudHJ5KG5hbWVkdHVwbGUuYWJjKToKKyAgICAiIiJQaWNrbGVhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJhY2ViYWNrIGVudHJ5IiIiCisgICAgX2ZpZWxkcyA9ICdmaWxlbmFtZSBsaW5lbm8gZnVuY3Rpb24gYXJncyBjb2RlX2NvbnRleHQgaW5kZXgnCisgICAgX2hlYWRlciA9ICcgIEZpbGUgInswLmZpbGVuYW1lfSIsIGxpbmUgezAubGluZW5vfSwgaW4gezAuZnVuY3Rpb259ezAuYXJnc30nCisKKyAgICBkZWYgZm9ybWF0KHNlbGYsIGZvcm1hdHRlcj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuY29kZV9jb250ZXh0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWRlci5mb3JtYXQoc2VsZikgKyAnXG4nCisKKyAgICAgICAgZm9ybWF0dGVkID0gW3NlbGYuX2hlYWRlci5mb3JtYXQoc2VsZikgKyAnOlxuJ10KKworICAgICAgICBmb3IgbGluZWluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzZWxmLmNvZGVfY29udGV4dCk6CisgICAgICAgICAgICBpZiBmb3JtYXR0ZXI6CisgICAgICAgICAgICAgICAgbGluZSA9IGZvcm1hdHRlcihsaW5lKQorCisgICAgICAgICAgICBpZiBsaW5laW5kZXggPT0gc2VsZi5pbmRleDoKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZWQuYXBwZW5kKCcgICAgPiVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5hcHBlbmQoJyAgICAgJXMnICUgbGluZSkKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlZAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuZm9ybWF0KCkpCisKK2RlZiBfZ2V0X2ZyYW1lX2FyZ3MoZnJhbWUpOgorICAgICIiIkdldCB0aGUgZm9ybWF0dGVkIGFyZ3VtZW50cyBhbmQgY2xhc3MgKGlmIGF2YWlsYWJsZSkgZm9yIGEgZnJhbWUiIiIKKyAgICBhcmdpbmZvID0gaW5zcGVjdC5nZXRhcmd2YWx1ZXMoZnJhbWUpCisKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBhcmdpbmZvLmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gJycsIE5vbmUKKyAgICAjIFRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIGZyb20gdGhlIGZpZWxkIG9mIHB5dGhvbiAyLjYgd2hpY2ggZG9lc24ndCAKKyAgICAjIHJldHVybiBhIG5hbWVkdHVwbGUgaGVyZSBidXQgc2ltcGx5IGEgdHVwbGUgc28gZmFsbGJhY2sgZ3JhY2VmdWxseSBpZgorICAgICMgYXJncyBpc24ndCBwcmVzZW50LgorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuICcnLCBOb25lCisKKyAgICBmaXJzdGFyZyA9IGFyZ2luZm8uYXJnc1swXQorICAgIGlmIGZpcnN0YXJnID09ICdzZWxmJzoKKyAgICAgICAgc2VsZiA9IGFyZ2luZm8ubG9jYWxzWydzZWxmJ10KKyAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBhcmdpbmZvLmFyZ3MucG9wKDApCisgICAgICAgIGRlbCBhcmdpbmZvLmxvY2Fsc1snc2VsZiddCisgICAgZWxzZToKKyAgICAgICAgY2xzID0gTm9uZQorCisgICAgZm9ybWF0dGVkID0gaW5zcGVjdC5mb3JtYXRhcmd2YWx1ZXMoKmFyZ2luZm8pCisgICAgcmV0dXJuIGZvcm1hdHRlZCwgY2xzCisKK2RlZiBleHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0xKToKKyAgICBmcmFtZXMgPSBpbnNwZWN0LmdldGlubmVyZnJhbWVzKHRiLCBjb250ZXh0KQorICAgIGZvciBmcmFtZSwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGNvZGVfY29udGV4dCwgaW5kZXggaW4gZnJhbWVzOgorICAgICAgICBmb3JtYXR0ZWRfYXJncywgY2xzID0gX2dldF9mcmFtZV9hcmdzKGZyYW1lKQorICAgICAgICBpZiBjbHM6CisgICAgICAgICAgICBmdW5jdGlvbiA9ICclcy4lcycgJSAoY2xzLCBmdW5jdGlvbikKKyAgICAgICAgeWllbGQgVHJhY2ViYWNrRW50cnkoZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGZvcm1hdHRlZF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NvbnRleHQsIGluZGV4KQorCitkZWYgZm9ybWF0X2V4dHJhY3RlZChleHRyYWN0ZWQsIGZvcm1hdHRlcj1Ob25lLCBsaW1pdD1Ob25lKToKKyAgICBpZiBsaW1pdDoKKyAgICAgICAgZXh0cmFjdGVkID0gZXh0cmFjdGVkWy1saW1pdDpdCisKKyAgICBmb3JtYXR0ZWQgPSBbXQorICAgIGZvciB0cmFjZWJhY2tpbmZvIGluIGV4dHJhY3RlZDoKKyAgICAgICAgZm9ybWF0dGVkLmV4dGVuZCh0cmFjZWJhY2tpbmZvLmZvcm1hdChmb3JtYXR0ZXIpKQorICAgIHJldHVybiBmb3JtYXR0ZWQKKworCitkZWYgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBjb250ZXh0PTEsIGxpbWl0PU5vbmUsIGZvcm1hdHRlcj1Ob25lKToKKyAgICBmb3JtYXR0ZWQgPSBbJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiddCisKKyAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4dCcpOgorICAgICAgICB0YiA9IGV4dHJhY3RfdHJhY2ViYWNrKHRiLCBjb250ZXh0KQorCisgICAgZm9ybWF0dGVkLmV4dGVuZChmb3JtYXRfZXh0cmFjdGVkKHRiLCBmb3JtYXR0ZXIsIGxpbWl0KSkKKyAgICBmb3JtYXR0ZWQuZXh0ZW5kKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXR5cGUsIHZhbHVlKSkKKyAgICByZXR1cm4gZm9ybWF0dGVkCisKK2RlZiB0b19zdHJpbmcoZXhjKToKKyAgICBpZiBpc2luc3RhbmNlKGV4YywgU3lzdGVtRXhpdCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4Yy5jb2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiAnRXhpdGVkIHdpdGggIiVkIicgJSBleGMuY29kZQorICAgIHJldHVybiBzdHIoZXhjKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhhMWM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNzkzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Citmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgb3MsIHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgZ2xvYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgYmIucGVyc2lzdF9kYXRhLCBiYi51dGlscworaW1wb3J0IGJiLmNoZWNrc3VtCitmcm9tIGJiIGltcG9ydCBkYXRhCitpbXBvcnQgYmIucHJvY2VzcworaW1wb3J0IHN1YnByb2Nlc3MKKworX192ZXJzaW9uX18gPSAiMiIKK19jaGVja3N1bV9jYWNoZSA9IGJiLmNoZWNrc3VtLkZpbGVDaGVja3N1bUNhY2hlKCkKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuRmV0Y2hlciIpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworY2xhc3MgQkJGZXRjaEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIkNsYXNzIGFsbCBmZXRjaCBleGNlcHRpb25zIGluaGVyaXQgZnJvbSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIHNlbGYubXNnID0gbWVzc2FnZQorICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIHJldHVybiBzZWxmLm1zZworCitjbGFzcyBVbnRydXN0ZWRVcmwoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGVuY291bnRlcmluZyBhIGhvc3Qgbm90IGxpc3RlZCBpbiBCQl9BTExPV0VEX05FVFdPUktTIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgbWVzc2FnZT0nJyk6CisgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICBtc2cgPSBtZXNzYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAiVGhlIFVSTDogJyVzJyBpcyBub3QgdHJ1c3RlZCBhbmQgY2Fubm90IGJlIHVzZWQiICUgdXJsCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKworY2xhc3MgTWFsZm9ybWVkVXJsKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBlbmNvdW50ZXJpbmcgYW4gaW52YWxpZCB1cmwiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBtZXNzYWdlPScnKToKKyAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICAgbXNnID0gbWVzc2FnZQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBtc2cgPSAiVGhlIFVSTDogJyVzJyBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgaW50ZXJwcmV0ZWQiICUgdXJsCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKworY2xhc3MgRmV0Y2hFcnJvcihCQkZldGNoRXhjZXB0aW9uKToKKyAgICAiIiJHZW5lcmFsIGZldGNoZXIgZXhjZXB0aW9uIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMgaW5jb3JyZWN0bHkiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSwgdXJsID0gTm9uZSk6CisgICAgICAgICBpZiB1cmw6CisgICAgICAgICAgICBtc2cgPSAiRmV0Y2hlciBmYWlsdXJlIGZvciBVUkw6ICclcycuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gIkZldGNoZXIgZmFpbHVyZTogJXMiICUgbWVzc2FnZQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKG1lc3NhZ2UsIHVybCkKKworY2xhc3MgQ2hlY2tzdW1FcnJvcihGZXRjaEVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gd2hlbiBtaXNtYXRjaGVkIGNoZWNrc3VtIGVuY291bnRlcmVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCA9IE5vbmUsIGNoZWNrc3VtID0gTm9uZSk6CisgICAgICAgIHNlbGYuY2hlY2tzdW0gPSBjaGVja3N1bQorICAgICAgICBGZXRjaEVycm9yLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCkKKworY2xhc3MgTm9DaGVja3N1bUVycm9yKEZldGNoRXJyb3IpOgorICAgICIiIkV4Y2VwdGlvbiB3aGVuIG5vIGNoZWNrc3VtIGlzIHNwZWNpZmllZCwgYnV0IEJCX1NUUklDVF9DSEVDS1NVTSBpcyBzZXQiIiIKKworY2xhc3MgVW5wYWNrRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiR2VuZXJhbCBmZXRjaGVyIGV4Y2VwdGlvbiB3aGVuIHNvbWV0aGluZyBoYXBwZW5zIGluY29ycmVjdGx5IHdoZW4gdW5wYWNraW5nIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCk6CisgICAgICAgICBtc2cgPSAiVW5wYWNrIGZhaWx1cmUgZm9yIFVSTDogJyVzJy4gJXMiICUgKHVybCwgbWVzc2FnZSkKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9IChtZXNzYWdlLCB1cmwpCisKK2NsYXNzIE5vTWV0aG9kRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZXJlIGlzIG5vIG1ldGhvZCB0byBvYnRhaW4gYSBzdXBwbGllZCB1cmwgb3Igc2V0IG9mIHVybHMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKKyAgICAgICAgIG1zZyA9ICJDb3VsZCBub3QgZmluZCBhIGZldGNoZXIgd2hpY2ggc3VwcG9ydHMgdGhlIFVSTDogJyVzJyIgJSB1cmwKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9ICh1cmwsKQorCitjbGFzcyBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZmV0Y2ggbWV0aG9kIGlzIG1pc3NpbmcgYSBjcml0aWNhbCBwYXJhbWV0ZXIgaW4gdGhlIHVybCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtaXNzaW5nLCB1cmwpOgorICAgICAgICAgbXNnID0gIlVSTDogJyVzJyBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyIgJSAodXJsLCBtaXNzaW5nKQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIHNlbGYubWlzc2luZyA9IG1pc3NpbmcKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKG1pc3NpbmcsIHVybCkKKworY2xhc3MgUGFyYW1ldGVyRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgdXJsIGNhbm5vdCBiZSBwcm9jY2Vzc2VkIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCk6CisgICAgICAgICBtc2cgPSAiVVJMOiAnJXMnIGhhcyBpbnZhbGlkIHBhcmFtZXRlcnMuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQorCitjbGFzcyBOZXR3b3JrQWNjZXNzKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBuZXR3b3JrIGFjY2VzcyBpcyBkaXNhYmxlZCBidXQgaXQgaXMgcmVxdWlyZWQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgY21kKToKKyAgICAgICAgIG1zZyA9ICJOZXR3b3JrIGFjY2VzcyBkaXNhYmxlZCB0aHJvdWdoIEJCX05PX05FVFdPUksgKG9yIHNldCBpbmRpcmVjdGx5IGR1ZSB0byB1c2Ugb2YgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSkgYnV0IGFjY2VzcyByZXF1ZXN0ZWQgd2l0aCBjb21tYW5kICVzIChmb3IgdXJsICVzKSIgJSAoY21kLCB1cmwpCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKHVybCwgY21kKQorCitjbGFzcyBOb25Mb2NhbE1ldGhvZChFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYpCisKKworY2xhc3MgVVJJKG9iamVjdCk6CisgICAgIiIiCisgICAgQSBjbGFzcyByZXByZXNlbnRpbmcgYSBnZW5lcmljIFVSSSwgd2l0aCBtZXRob2RzIGZvcgorICAgIGFjY2Vzc2luZyB0aGUgVVJJIGNvbXBvbmVudHMsIGFuZCBzdHJpbmdpZmllcyB0byB0aGUKKyAgICBVUkkuCisKKyAgICBJdCBpcyBjb25zdHJ1Y3RlZCBieSBjYWxsaW5nIGl0IHdpdGggYSBVUkksIG9yIHNldHRpbmcKKyAgICB0aGUgYXR0cmlidXRlcyBtYW51YWxseToKKworICAgICB1cmkgPSBVUkkoImh0dHA6Ly9leGFtcGxlLmNvbS8iKQorCisgICAgIHVyaSA9IFVSSSgpCisgICAgIHVyaS5zY2hlbWUgPSAnaHR0cCcKKyAgICAgdXJpLmhvc3RuYW1lID0gJ2V4YW1wbGUuY29tJworICAgICB1cmkucGF0aCA9ICcvJworCisgICAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworICAgICAgKiBzY2hlbWUgKHJlYWQvd3JpdGUpCisgICAgICAqIHVzZXJpbmZvIChhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbikgKHJlYWQvd3JpdGUpCisgICAgICAgICogdXNlcm5hbWUgKHJlYWQvd3JpdGUpCisgICAgICAgICogcGFzc3dvcmQgKHJlYWQvd3JpdGUpCisKKyAgICAgICAgTm90ZSwgcGFzc3dvcmQgaXMgZGVwcmVjYXRlZCBhcyBvZiBSRkMgMzk4Ni4KKworICAgICAgKiBob3N0bmFtZSAocmVhZC93cml0ZSkKKyAgICAgICogcG9ydCAocmVhZC93cml0ZSkKKyAgICAgICogaG9zdHBvcnQgKHJlYWQgb25seSkKKyAgICAgICAgImhvc3RuYW1lOnBvcnQiLCBpZiBib3RoIGFyZSBzZXQsIG90aGVyd2lzZSBqdXN0ICJob3N0bmFtZSIKKyAgICAgICogcGF0aCAocmVhZC93cml0ZSkKKyAgICAgICogcGF0aF9xdW90ZWQgKHJlYWQvd3JpdGUpCisgICAgICAgIEEgVVJJIHF1b3RlZCB2ZXJzaW9uIG9mIHBhdGgKKyAgICAgICogcGFyYW1zIChkaWN0KSAocmVhZC93cml0ZSkKKyAgICAgICogcXVlcnkgKGRpY3QpIChyZWFkL3dyaXRlKQorICAgICAgKiByZWxhdGl2ZSAoYm9vbCkgKHJlYWQgb25seSkKKyAgICAgICAgVHJ1ZSBpZiB0aGlzIGlzIGEgInJlbGF0aXZlIFVSSSIsIChlLmcuIGZpbGU6Zm9vLmRpZmYpCisKKyAgICBJdCBzdHJpbmdpZmllcyB0byB0aGUgVVJJIGl0c2VsZi4KKworICAgIFNvbWUgbm90ZXMgYWJvdXQgcmVsYXRpdmUgVVJJczogd2hpbGUgaXQncyBzcGVjaWZpZWQgdGhhdAorICAgIGEgVVJJIGJlZ2lubmluZyB3aXRoIDxzY2hlbWU+Oi8vIHNob3VsZCBlaXRoZXIgYmUgZGlyZWN0bHkKKyAgICBmb2xsb3dlZCBieSBhIGhvc3RuYW1lIG9yIGEgLywgdGhlIG9sZCBVUkkgaGFuZGxpbmcgb2YgdGhlCisgICAgZmV0Y2gyIGxpYnJhcnkgZGlkIG5vdCBjb21mb3JtIHRvIHRoaXMuIFRoZXJlZm9yZSwgdGhpcyBVUkkKKyAgICBjbGFzcyBoYXMgc29tZSBrbHVkZ2VzIHRvIG1ha2Ugc3VyZSB0aGF0IFVSSXMgYXJlIHBhcnNlZCBpbgorICAgIGEgd2F5IGNvbWZvcm1pbmcgdG8gYml0YmFrZSdzIGN1cnJlbnQgdXNhZ2UuIFRoaXMgVVJJIGNsYXNzCisgICAgc3VwcG9ydHMgdGhlIGZvbGxvd2luZzoKKworICAgICBmaWxlOnJlbGF0aXZlL3BhdGguZGlmZiAoSUVURiBjb21wbGlhbnQpCisgICAgIGdpdDpyZWxhdGl2ZS9wYXRoLmdpdCAoSUVURiBjb21wbGlhbnQpCisgICAgIGdpdDovLy9hYnNvbHV0ZS9wYXRoLmdpdCAoSUVURiBjb21wbGlhbnQpCisgICAgIGZpbGU6Ly8vYWJzb2x1dGUvcGF0aC5kaWZmIChJRVRGIGNvbXBsaWFudCkKKworICAgICBmaWxlOi8vcmVsYXRpdmUvcGF0aC5kaWZmIChub3QgSUVURiBjb21wbGlhbnQpCisKKyAgICBCdXQgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZm9sbG93aW5nOgorCisgICAgIGZpbGU6Ly9ob3N0bmFtZS9hYnNvbHV0ZS9wYXRoLmRpZmYgKHdvdWxkIGJlIElFVEYgY29tcGxpYW50KQorCisgICAgTm90ZSB0aGF0IHRoZSBsYXN0IGNhc2Ugb25seSBhcHBsaWVzIHRvIGEgbGlzdCBvZgorICAgICJ3aGl0ZWxpc3RlZCIgc2NoZW1lcyAoY3VycmVudGx5IG9ubHkgZmlsZTovLyksIHRoYXQgcmVxdWlyZXMKKyAgICBpdHMgVVJJcyB0byBub3QgaGF2ZSBhIG5ldHdvcmsgbG9jYXRpb24uCisgICAgIiIiCisKKyAgICBfcmVsYXRpdmVfc2NoZW1lcyA9IFsnZmlsZScsICdnaXQnXQorICAgIF9uZXRsb2NfZm9yYmlkZGVuID0gWydmaWxlJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmk9Tm9uZSk6CisgICAgICAgIHNlbGYuc2NoZW1lID0gJycKKyAgICAgICAgc2VsZi51c2VyaW5mbyA9ICcnCisgICAgICAgIHNlbGYuaG9zdG5hbWUgPSAnJworICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdGggPSAnJworICAgICAgICBzZWxmLnBhcmFtcyA9IHt9CisgICAgICAgIHNlbGYucXVlcnkgPSB7fQorICAgICAgICBzZWxmLnJlbGF0aXZlID0gRmFsc2UKKworICAgICAgICBpZiBub3QgdXJpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBXZSBoaWphY2sgdGhlIFVSTCBwYXJhbWV0ZXJzLCBzaW5jZSB0aGUgd2F5IGJpdGJha2UgdXNlcworICAgICAgICAjIHRoZW0gYXJlIG5vdCBxdWl0ZSBSRkMgY29tcGxpYW50LgorICAgICAgICB1cmksIHBhcmFtX3N0ciA9ICh1cmkuc3BsaXQoIjsiLCAxKSArIFtOb25lXSlbOjJdCisKKyAgICAgICAgdXJscCA9IHVybHBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgc2VsZi5zY2hlbWUgPSB1cmxwLnNjaGVtZQorCisgICAgICAgIHJlcGFyc2UgPSAwCisKKyAgICAgICAgIyBDb2VyY2UgdXJscGFyc2UgdG8gbWFrZSBVUkkgc2NoZW1lIHVzZSBuZXRsb2MKKyAgICAgICAgaWYgbm90IHNlbGYuc2NoZW1lIGluIHVybHBhcnNlLnVzZXNfbmV0bG9jOgorICAgICAgICAgICAgdXJscGFyc2UudXNlc19wYXJhbXMuYXBwZW5kKHNlbGYuc2NoZW1lKQorICAgICAgICAgICAgcmVwYXJzZSA9IDEKKworICAgICAgICAjIE1ha2UgdXJscGFyc2UgaGFwcHkoL2llcikgYnkgY29udmVydGluZyBsb2NhbCByZXNvdXJjZXMKKyAgICAgICAgIyB0byBSRkMgY29tcGxpYW50IFVSTCBmb3JtYXQuIEUuZy46CisgICAgICAgICMgICBmaWxlOi8vZm9vLmRpZmYgLT4gZmlsZTpmb28uZGlmZgorICAgICAgICBpZiB1cmxwLnNjaGVtZSBpbiBzZWxmLl9uZXRsb2NfZm9yYmlkZGVuOgorICAgICAgICAgICAgdXJpID0gcmUuc3ViKCIoPzw9OikvLyg/IS8pIiwgIiIsIHVyaSwgMSkKKyAgICAgICAgICAgIHJlcGFyc2UgPSAxCisKKyAgICAgICAgaWYgcmVwYXJzZToKKyAgICAgICAgICAgIHVybHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisKKyAgICAgICAgIyBJZGVudGlmeSBpZiB0aGUgVVJJIGlzIHJlbGF0aXZlIG9yIG5vdAorICAgICAgICBpZiB1cmxwLnNjaGVtZSBpbiBzZWxmLl9yZWxhdGl2ZV9zY2hlbWVzIGFuZCBcCisgICAgICAgICAgIHJlLmNvbXBpbGUoIl5cdys6KD8hLy8pIikubWF0Y2godXJpKToKKyAgICAgICAgICAgIHNlbGYucmVsYXRpdmUgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IHNlbGYucmVsYXRpdmU6CisgICAgICAgICAgICBzZWxmLmhvc3RuYW1lID0gdXJscC5ob3N0bmFtZSBvciAnJworICAgICAgICAgICAgc2VsZi5wb3J0ID0gdXJscC5wb3J0CisKKyAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gdXJscC51c2VybmFtZSBvciAnJworCisgICAgICAgICAgICBpZiB1cmxwLnBhc3N3b3JkOgorICAgICAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gJzolcycgJSB1cmxwLnBhc3N3b3JkCisKKyAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUodXJscC5wYXRoKQorCisgICAgICAgIGlmIHBhcmFtX3N0cjoKKyAgICAgICAgICAgIHNlbGYucGFyYW1zID0gc2VsZi5fcGFyYW1fc3RyX3NwbGl0KHBhcmFtX3N0ciwgIjsiKQorICAgICAgICBpZiB1cmxwLnF1ZXJ5OgorICAgICAgICAgICAgc2VsZi5xdWVyeSA9IHNlbGYuX3BhcmFtX3N0cl9zcGxpdCh1cmxwLnF1ZXJ5LCAiJiIpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdXNlcmluZm8gPSBzZWxmLnVzZXJpbmZvCisgICAgICAgIGlmIHVzZXJpbmZvOgorICAgICAgICAgICAgdXNlcmluZm8gKz0gJ0AnCisKKyAgICAgICAgcmV0dXJuICIlczolcyVzJXMlcyVzJXMiICUgKAorICAgICAgICAgICAgc2VsZi5zY2hlbWUsCisgICAgICAgICAgICAnJyBpZiBzZWxmLnJlbGF0aXZlIGVsc2UgJy8vJywKKyAgICAgICAgICAgIHVzZXJpbmZvLAorICAgICAgICAgICAgc2VsZi5ob3N0cG9ydCwKKyAgICAgICAgICAgIHNlbGYucGF0aF9xdW90ZWQsCisgICAgICAgICAgICBzZWxmLl9xdWVyeV9zdHIoKSwKKyAgICAgICAgICAgIHNlbGYuX3BhcmFtX3N0cigpKQorCisgICAgZGVmIF9wYXJhbV9zdHIoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAnJy5qb2luKFsnOycsIHNlbGYuX3BhcmFtX3N0cl9qb2luKHNlbGYucGFyYW1zLCAiOyIpXSkKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1zIGVsc2UgJycpCisKKyAgICBkZWYgX3F1ZXJ5X3N0cihzZWxmKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgICcnLmpvaW4oWyc/Jywgc2VsZi5fcGFyYW1fc3RyX2pvaW4oc2VsZi5xdWVyeSwgIiYiKV0pCisgICAgICAgICAgICBpZiBzZWxmLnF1ZXJ5IGVsc2UgJycpCisKKyAgICBkZWYgX3BhcmFtX3N0cl9zcGxpdChzZWxmLCBzdHJpbmcsIGVsbWRlbGltLCBrdmRlbGltPSI9Iik6CisgICAgICAgIHJldCA9IHt9CisgICAgICAgIGZvciBrLCB2IGluIFt4LnNwbGl0KGt2ZGVsaW0sIDEpIGZvciB4IGluIHN0cmluZy5zcGxpdChlbG1kZWxpbSldOgorICAgICAgICAgICAgcmV0W2tdID0gdgorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX3BhcmFtX3N0cl9qb2luKHNlbGYsIGRpY3RfLCBlbG1kZWxpbSwga3ZkZWxpbT0iPSIpOgorICAgICAgICByZXR1cm4gZWxtZGVsaW0uam9pbihba3ZkZWxpbS5qb2luKFtrLCB2XSkgZm9yIGssIHYgaW4gZGljdF8uaXRlbXMoKV0pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaG9zdHBvcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnBvcnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ob3N0bmFtZQorICAgICAgICByZXR1cm4gIiVzOiVkIiAlIChzZWxmLmhvc3RuYW1lLCBzZWxmLnBvcnQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF0aF9xdW90ZWQoc2VsZik6CisgICAgICAgIHJldHVybiB1cmxsaWIucXVvdGUoc2VsZi5wYXRoKQorCisgICAgQHBhdGhfcXVvdGVkLnNldHRlcgorICAgIGRlZiBwYXRoX3F1b3RlZChzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUocGF0aCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAorCisgICAgQHBhdGguc2V0dGVyCisgICAgZGVmIHBhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCisKKyAgICAgICAgaWYgcmUuY29tcGlsZSgiXi8iKS5tYXRjaChwYXRoKToKKyAgICAgICAgICAgIHNlbGYucmVsYXRpdmUgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZWxhdGl2ZSA9IFRydWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1c2VybmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VyaW5mbzoKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi51c2VyaW5mby5zcGxpdCgiOiIsIDEpKVswXQorICAgICAgICByZXR1cm4gJycKKworICAgIEB1c2VybmFtZS5zZXR0ZXIKKyAgICBkZWYgdXNlcm5hbWUoc2VsZiwgdXNlcm5hbWUpOgorICAgICAgICBwYXNzd29yZCA9IHNlbGYucGFzc3dvcmQKKyAgICAgICAgc2VsZi51c2VyaW5mbyA9IHVzZXJuYW1lCisgICAgICAgIGlmIHBhc3N3b3JkOgorICAgICAgICAgICAgc2VsZi51c2VyaW5mbyArPSAiOiVzIiAlIHBhc3N3b3JkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFzc3dvcmQoc2VsZik6CisgICAgICAgIGlmIHNlbGYudXNlcmluZm8gYW5kICI6IiBpbiBzZWxmLnVzZXJpbmZvOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLnVzZXJpbmZvLnNwbGl0KCI6IiwgMSkpWzFdCisgICAgICAgIHJldHVybiAnJworCisgICAgQHBhc3N3b3JkLnNldHRlcgorICAgIGRlZiBwYXNzd29yZChzZWxmLCBwYXNzd29yZCk6CisgICAgICAgIHNlbGYudXNlcmluZm8gPSAiJXM6JXMiICUgKHNlbGYudXNlcm5hbWUsIHBhc3N3b3JkKQorCitkZWYgZGVjb2RldXJsKHVybCk6CisgICAgIiIiRGVjb2RlcyBhbiBVUkwgaW50byB0aGUgdG9rZW5zIChzY2hlbWUsIG5ldHdvcmsgbG9jYXRpb24sIHBhdGgsCisgICAgdXNlciwgcGFzc3dvcmQsIHBhcmFtZXRlcnMpLgorICAgICIiIgorCisgICAgbSA9IHJlLmNvbXBpbGUoJyg/UDx0eXBlPlteOl0qKTovLygoP1A8dXNlcj5bXi9dKylAKT8oP1A8bG9jYXRpb24+W147XSspKDsoP1A8cGFybT4uKikpPycpLm1hdGNoKHVybCkKKyAgICBpZiBub3QgbToKKyAgICAgICAgcmFpc2UgTWFsZm9ybWVkVXJsKHVybCkKKworICAgIHR5cGUgPSBtLmdyb3VwKCd0eXBlJykKKyAgICBsb2NhdGlvbiA9IG0uZ3JvdXAoJ2xvY2F0aW9uJykKKyAgICBpZiBub3QgbG9jYXRpb246CisgICAgICAgIHJhaXNlIE1hbGZvcm1lZFVybCh1cmwpCisgICAgdXNlciA9IG0uZ3JvdXAoJ3VzZXInKQorICAgIHBhcm0gPSBtLmdyb3VwKCdwYXJtJykKKworICAgIGxvY2lkeCA9IGxvY2F0aW9uLmZpbmQoJy8nKQorICAgIGlmIGxvY2lkeCAhPSAtMSBhbmQgdHlwZS5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgaG9zdCA9IGxvY2F0aW9uWzpsb2NpZHhdCisgICAgICAgIHBhdGggPSBsb2NhdGlvbltsb2NpZHg6XQorICAgIGVsc2U6CisgICAgICAgIGhvc3QgPSAiIgorICAgICAgICBwYXRoID0gbG9jYXRpb24KKyAgICBpZiB1c2VyOgorICAgICAgICBtID0gcmUuY29tcGlsZSgnKD9QPHVzZXI+W146XSspKDo/KD9QPHBzd2Q+LiopKScpLm1hdGNoKHVzZXIpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB1c2VyID0gbS5ncm91cCgndXNlcicpCisgICAgICAgICAgICBwc3dkID0gbS5ncm91cCgncHN3ZCcpCisgICAgZWxzZToKKyAgICAgICAgdXNlciA9ICcnCisgICAgICAgIHBzd2QgPSAnJworCisgICAgcCA9IHt9CisgICAgaWYgcGFybToKKyAgICAgICAgZm9yIHMgaW4gcGFybS5zcGxpdCgnOycpOgorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBpZiBub3QgJz0nIGluIHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE1hbGZvcm1lZFVybCh1cmwsICJUaGUgVVJMOiAnJXMnIGlzIGludmFsaWQ6IHBhcmFtZXRlciAlcyBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgKG1pc3NpbmcgJz0nKSIgJSAodXJsLCBzKSkKKyAgICAgICAgICAgICAgICBzMSwgczIgPSBzLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBwW3MxXSA9IHMyCisKKyAgICByZXR1cm4gdHlwZSwgaG9zdCwgdXJsbGliLnVucXVvdGUocGF0aCksIHVzZXIsIHBzd2QsIHAKKworZGVmIGVuY29kZXVybChkZWNvZGVkKToKKyAgICAiIiJFbmNvZGVzIGEgVVJMIGZyb20gdG9rZW5zIChzY2hlbWUsIG5ldHdvcmsgbG9jYXRpb24sIHBhdGgsCisgICAgdXNlciwgcGFzc3dvcmQsIHBhcmFtZXRlcnMpLgorICAgICIiIgorCisgICAgdHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcCA9IGRlY29kZWQKKworICAgIGlmIG5vdCBwYXRoOgorICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoJ3BhdGgnLCAiZW5jb2RlZCBmcm9tIHRoZSBkYXRhICVzIiAlIHN0cihkZWNvZGVkKSkKKyAgICBpZiBub3QgdHlwZToKKyAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCd0eXBlJywgImVuY29kZWQgZnJvbSB0aGUgZGF0YSAlcyIgJSBzdHIoZGVjb2RlZCkpCisgICAgdXJsID0gJyVzOi8vJyAlIHR5cGUKKyAgICBpZiB1c2VyIGFuZCB0eXBlICE9ICJmaWxlIjoKKyAgICAgICAgdXJsICs9ICIlcyIgJSB1c2VyCisgICAgICAgIGlmIHBzd2Q6CisgICAgICAgICAgICB1cmwgKz0gIjolcyIgJSBwc3dkCisgICAgICAgIHVybCArPSAiQCIKKyAgICBpZiBob3N0IGFuZCB0eXBlICE9ICJmaWxlIjoKKyAgICAgICAgdXJsICs9ICIlcyIgJSBob3N0CisgICAgIyBTdGFuZGFyZGlzZSBwYXRoIHRvIGVuc3VyZSBjb21wYXJpc29ucyB3b3JrCisgICAgd2hpbGUgJy8vJyBpbiBwYXRoOgorICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIvLyIsICIvIikKKyAgICB1cmwgKz0gIiVzIiAlIHVybGxpYi5xdW90ZShwYXRoKQorICAgIGlmIHA6CisgICAgICAgIGZvciBwYXJtIGluIHA6CisgICAgICAgICAgICB1cmwgKz0gIjslcz0lcyIgJSAocGFybSwgcFtwYXJtXSkKKworICAgIHJldHVybiB1cmwKKworZGVmIHVyaV9yZXBsYWNlKHVkLCB1cmlfZmluZCwgdXJpX3JlcGxhY2UsIHJlcGxhY2VtZW50cywgZCk6CisgICAgaWYgbm90IHVkLnVybCBvciBub3QgdXJpX2ZpbmQgb3Igbm90IHVyaV9yZXBsYWNlOgorICAgICAgICBsb2dnZXIuZXJyb3IoInVyaV9yZXBsYWNlOiBwYXNzZWQgYW4gdW5kZWZpbmVkIHZhbHVlLCBub3QgcmVwbGFjaW5nIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB1cmlfZGVjb2RlZCA9IGxpc3QoZGVjb2RldXJsKHVkLnVybCkpCisgICAgdXJpX2ZpbmRfZGVjb2RlZCA9IGxpc3QoZGVjb2RldXJsKHVyaV9maW5kKSkKKyAgICB1cmlfcmVwbGFjZV9kZWNvZGVkID0gbGlzdChkZWNvZGV1cmwodXJpX3JlcGxhY2UpKQorICAgIGxvZ2dlci5kZWJ1ZygyLCAiRm9yIHVybCAlcyBjb21wYXJpbmcgJXMgdG8gJXMiICUgKHVyaV9kZWNvZGVkLCB1cmlfZmluZF9kZWNvZGVkLCB1cmlfcmVwbGFjZV9kZWNvZGVkKSkKKyAgICByZXN1bHRfZGVjb2RlZCA9IFsnJywgJycsICcnLCAnJywgJycsIHt9XQorICAgIGZvciBsb2MsIGkgaW4gZW51bWVyYXRlKHVyaV9maW5kX2RlY29kZWQpOgorICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gdXJpX2RlY29kZWRbbG9jXQorICAgICAgICByZWdleHAgPSBpCisgICAgICAgIGlmIGxvYyA9PSAwIGFuZCByZWdleHAgYW5kIG5vdCByZWdleHAuZW5kc3dpdGgoIiQiKToKKyAgICAgICAgICAgICMgTGVhdmluZyB0aGUgdHlwZSB1bmFuY2hvcmVkIGNhbiBtZWFuICJodHRwcyIgbWF0Y2hpbmcgImZpbGUiIGNhbiBiZWNvbWUgImZpbGVzIgorICAgICAgICAgICAgIyB3aGljaCBpcyBjbGVhcmx5IHVuZGVzaXJhYmxlLgorICAgICAgICAgICAgcmVnZXhwICs9ICIkIgorICAgICAgICBpZiBsb2MgPT0gNToKKyAgICAgICAgICAgICMgSGFuZGxlIFVSTCBwYXJhbWV0ZXJzCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgICMgQW55IHNwZWNpZmllZCBVUkwgcGFyYW1ldGVycyBtdXN0IG1hdGNoCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdOgorICAgICAgICAgICAgICAgICAgICBpZiB1cmlfZGVjb2RlZFtsb2NdW2tdICE9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIE92ZXJ3cml0ZSBhbnkgc3BlY2lmaWVkIHJlcGxhY2VtZW50IHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGZvciBrIGluIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXToKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiByZXBsYWNlbWVudHM6CisgICAgICAgICAgICAgICAgICAgIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXSA9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXS5yZXBsYWNlKGwsIHJlcGxhY2VtZW50c1tsXSkKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdW2tdID0gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdW2tdCisgICAgICAgIGVsaWYgKHJlLm1hdGNoKHJlZ2V4cCwgdXJpX2RlY29kZWRbbG9jXSkpOgorICAgICAgICAgICAgaWYgbm90IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXToKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gIiIgICAgCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBrIGluIHJlcGxhY2VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdID0gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdLnJlcGxhY2UoaywgcmVwbGFjZW1lbnRzW2tdKQorICAgICAgICAgICAgICAgICNiYi5ub3RlKCIlcyAlcyAlcyIgJSAocmVnZXhwLCB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10sIHVyaV9kZWNvZGVkW2xvY10pKQorICAgICAgICAgICAgICAgIHJlc3VsdF9kZWNvZGVkW2xvY10gPSByZS5zdWIocmVnZXhwLCB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10sIHVyaV9kZWNvZGVkW2xvY10sIDEpCisgICAgICAgICAgICBpZiBsb2MgPT0gMjoKKyAgICAgICAgICAgICAgICAjIEhhbmRsZSBwYXRoIG1hbmlwdWxhdGlvbnMKKyAgICAgICAgICAgICAgICBiYXNlbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiB1cmlfZGVjb2RlZFswXSAhPSB1cmlfcmVwbGFjZV9kZWNvZGVkWzBdIGFuZCB1ZC5taXJyb3J0YXJiYWxsOgorICAgICAgICAgICAgICAgICAgICAjIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHVybCB0eXBlcyBkaWZmZXIsIG11c3QgYmUgYSBtaXJyb3J0YXJiYWxsIG1hcHBpbmcKKyAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLm1pcnJvcnRhcmJhbGwpCisgICAgICAgICAgICAgICAgICAgICMgS2lsbCBwYXJhbWV0ZXJzLCB0aGV5IG1ha2Ugbm8gc2Vuc2UgZm9yIG1pcnJvciB0YXJiYWxscworICAgICAgICAgICAgICAgICAgICB1cmlfZGVjb2RlZFs1XSA9IHt9CisgICAgICAgICAgICAgICAgZWxpZiB1ZC5sb2NhbHBhdGggYW5kIHVkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bSh1ZCk6CisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgICAgICAgICAgaWYgYmFzZW5hbWUgYW5kIG5vdCByZXN1bHRfZGVjb2RlZFtsb2NdLmVuZHN3aXRoKGJhc2VuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2RlY29kZWRbbG9jXSA9IG9zLnBhdGguam9pbihyZXN1bHRfZGVjb2RlZFtsb2NdLCBiYXNlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgcmVzdWx0ID0gZW5jb2RldXJsKHJlc3VsdF9kZWNvZGVkKQorICAgIGlmIHJlc3VsdCA9PSB1ZC51cmw6CisgICAgICAgIHJldHVybiBOb25lCisgICAgbG9nZ2VyLmRlYnVnKDIsICJGb3IgdXJsICVzIHJldHVybmluZyAlcyIgJSAodWQudXJsLCByZXN1bHQpKQorICAgIHJldHVybiByZXN1bHQKKworbWV0aG9kcyA9IFtdCit1cmxkYXRhX2NhY2hlID0ge30KK3NhdmVkX2hlYWRyZXZzID0ge30KKworZGVmIGZldGNoZXJfaW5pdChkKToKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZmV0Y2hlcnMgb25jZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGtub3duLgorICAgIENhbGxzIGJlZm9yZSB0aGlzIG11c3Qgbm90IGhpdCB0aGUgY2FjaGUuCisgICAgIiIiCisgICAgIyBXaGVuIHRvIGRyb3AgU0NNIGhlYWQgcmV2aXNpb25zIGNvbnRyb2xsZWQgYnkgdXNlciBwb2xpY3kKKyAgICBzcmNyZXZfcG9saWN5ID0gZC5nZXRWYXIoJ0JCX1NSQ1JFVl9QT0xJQ1knLCBUcnVlKSBvciAiY2xlYXIiCisgICAgaWYgc3JjcmV2X3BvbGljeSA9PSAiY2FjaGUiOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIktlZXBpbmcgU1JDUkVWIGNhY2hlIGR1ZSB0byBjYWNoZSBwb2xpY3kgb2Y6ICVzIiwgc3JjcmV2X3BvbGljeSkKKyAgICBlbGlmIHNyY3Jldl9wb2xpY3kgPT0gImNsZWFyIjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJDbGVhcmluZyBTUkNSRVYgY2FjaGUgZHVlIHRvIGNhY2hlIHBvbGljeSBvZjogJXMiLCBzcmNyZXZfcG9saWN5KQorICAgICAgICByZXZzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9IRUFEUkVWUycsIGQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmZldGNoMi5zYXZlZF9oZWFkcmV2cyA9IHJldnMuaXRlbXMoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldnMuY2xlYXIoKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgU1JDUkVWIGNhY2hlIHBvbGljeSBvZjogJXMiICUgc3JjcmV2X3BvbGljeSkKKworICAgIF9jaGVja3N1bV9jYWNoZS5pbml0X2NhY2hlKGQpCisKKyAgICBmb3IgbSBpbiBtZXRob2RzOgorICAgICAgICBpZiBoYXNhdHRyKG0sICJpbml0Iik6CisgICAgICAgICAgICBtLmluaXQoZCkKKworZGVmIGZldGNoZXJfcGFyc2Vfc2F2ZShkKToKKyAgICBfY2hlY2tzdW1fY2FjaGUuc2F2ZV9leHRyYXMoZCkKKworZGVmIGZldGNoZXJfcGFyc2VfZG9uZShkKToKKyAgICBfY2hlY2tzdW1fY2FjaGUuc2F2ZV9tZXJnZShkKQorCitkZWYgZmV0Y2hlcl9jb21wYXJlX3JldmlzaW9ucyhkKToKKyAgICAiIiIKKyAgICBDb21wYXJlIHRoZSByZXZpc2lvbnMgaW4gdGhlIHBlcnNpc3RhbnQgY2FjaGUgd2l0aCBjdXJyZW50IHZhbHVlcyBhbmQKKyAgICByZXR1cm4gdHJ1ZS9mYWxzZSBvbiB3aGV0aGVyIHRoZXkndmUgY2hhbmdlZC4KKyAgICAiIiIKKworICAgIGRhdGEgPSBiYi5wZXJzaXN0X2RhdGEucGVyc2lzdCgnQkJfVVJJX0hFQURSRVZTJywgZCkuaXRlbXMoKQorICAgIGRhdGEyID0gYmIuZmV0Y2gyLnNhdmVkX2hlYWRyZXZzCisKKyAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICBmb3Iga2V5IGluIGRhdGE6CisgICAgICAgIGlmIGtleSBub3QgaW4gZGF0YTIgb3IgZGF0YTJba2V5XSAhPSBkYXRhW2tleV06CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIiVzIGNoYW5nZWQiLCBrZXkpCisgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiJXMgZGlkIG5vdCBjaGFuZ2UiLCBrZXkpCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBtaXJyb3JfZnJvbV9zdHJpbmcoZGF0YSk6CisgICAgcmV0dXJuIFsgaS5zcGxpdCgpIGZvciBpIGluIChkYXRhIG9yICIiKS5yZXBsYWNlKCdcXG4nLCdcbicpLnNwbGl0KCdcbicpIGlmIGkgXQorCitkZWYgdmVyaWZ5X2NoZWNrc3VtKHVkLCBkLCBwcmVjb21wdXRlZD17fSk6CisgICAgIiIiCisgICAgdmVyaWZ5IHRoZSBNRDUgYW5kIFNIQTI1NiBjaGVja3N1bSBmb3IgZG93bmxvYWRlZCBzcmMKKworICAgIFJhaXNlcyBhIEZldGNoRXJyb3IgaWYgb25lIG9yIGJvdGggb2YgdGhlIFNSQ19VUkkgY2hlY2tzdW1zIGRvIG5vdCBtYXRjaAorICAgIHRoZSBkb3dubG9hZGVkIGZpbGUsIG9yIGlmIEJCX1NUUklDVF9DSEVDS1NVTSBpcyBzZXQgYW5kIHRoZXJlIGFyZSBubworICAgIGNoZWNrc3VtcyBzcGVjaWZpZWQuCisKKyAgICBSZXR1cm5zIGEgZGljdCBvZiBjaGVja3N1bXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIGEgZG9uZSBzdGFtcCBmaWxlIGFuZAorICAgIHBhc3NlZCBpbiBhcyBwcmVjb21wdXRlZCBwYXJhbWV0ZXIgaW4gYSBsYXRlciBjYWxsIHRvIGF2b2lkIHJlLWNvbXB1dGluZworICAgIHRoZSBjaGVja3N1bXMgZnJvbSB0aGUgZmlsZS4gVGhpcyBhbGxvd3MgdmVyaWZ5aW5nIHRoZSBjaGVja3N1bXMgb2YgdGhlCisgICAgZmlsZSBhZ2FpbnN0IHRob3NlIGluIHRoZSByZWNpcGUgZWFjaCB0aW1lLCByYXRoZXIgdGhhbiBvbmx5IGFmdGVyCisgICAgZG93bmxvYWRpbmcuIFNlZSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NzEuCisgICAgIiIiCisKKyAgICBfTUQ1X0tFWSA9ICJtZDUiCisgICAgX1NIQTI1Nl9LRVkgPSAic2hhMjU2IgorCisgICAgaWYgdWQuaWdub3JlX2NoZWNrc3VtcyBvciBub3QgdWQubWV0aG9kLnN1cHBvcnRzX2NoZWNrc3VtKHVkKToKKyAgICAgICAgcmV0dXJuIHt9CisKKyAgICBpZiBfTUQ1X0tFWSBpbiBwcmVjb21wdXRlZDoKKyAgICAgICAgbWQ1ZGF0YSA9IHByZWNvbXB1dGVkW19NRDVfS0VZXQorICAgIGVsc2U6CisgICAgICAgIG1kNWRhdGEgPSBiYi51dGlscy5tZDVfZmlsZSh1ZC5sb2NhbHBhdGgpCisKKyAgICBpZiBfU0hBMjU2X0tFWSBpbiBwcmVjb21wdXRlZDoKKyAgICAgICAgc2hhMjU2ZGF0YSA9IHByZWNvbXB1dGVkW19TSEEyNTZfS0VZXQorICAgIGVsc2U6CisgICAgICAgIHNoYTI1NmRhdGEgPSBiYi51dGlscy5zaGEyNTZfZmlsZSh1ZC5sb2NhbHBhdGgpCisKKyAgICBpZiB1ZC5tZXRob2QucmVjb21tZW5kc19jaGVja3N1bSh1ZCk6CisgICAgICAgICMgSWYgc3RyaWN0IGNoZWNraW5nIGVuYWJsZWQgYW5kIG5laXRoZXIgc3VtIGRlZmluZWQsIHJhaXNlIGVycm9yCisgICAgICAgIHN0cmljdCA9IGQuZ2V0VmFyKCJCQl9TVFJJQ1RfQ0hFQ0tTVU0iLCBUcnVlKSBvciAiMCIKKyAgICAgICAgaWYgKHN0cmljdCA9PSAiMSIpIGFuZCBub3QgKHVkLm1kNV9leHBlY3RlZCBvciB1ZC5zaGEyNTZfZXhwZWN0ZWQpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdObyBjaGVja3N1bSBzcGVjaWZpZWQgZm9yICVzLCBwbGVhc2UgYWRkIGF0IGxlYXN0IG9uZSB0byB0aGUgcmVjaXBlOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiXG5TUkNfVVJJWyVzXSA9ICIlcyInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVkLmxvY2FscGF0aCwgdWQubWQ1X25hbWUsIG1kNWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZC5zaGEyNTZfbmFtZSwgc2hhMjU2ZGF0YSkpCisgICAgICAgICAgICByYWlzZSBOb0NoZWNrc3VtRXJyb3IoJ01pc3NpbmcgU1JDX1VSSSBjaGVja3N1bScsIHVkLnVybCkKKworICAgICAgICAjIExvZyBtaXNzaW5nIHN1bXMgc28gdXNlciBjYW4gbW9yZSBlYXNpbHkgYWRkIHRoZW0KKyAgICAgICAgaWYgbm90IHVkLm1kNV9leHBlY3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIG1kNSBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQubWQ1X25hbWUsIG1kNWRhdGEpCisKKyAgICAgICAgaWYgbm90IHVkLnNoYTI1Nl9leHBlY3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIHNoYTI1NiBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQuc2hhMjU2X25hbWUsIHNoYTI1NmRhdGEpCisKKyAgICBtZDVtaXNtYXRjaCA9IEZhbHNlCisgICAgc2hhMjU2bWlzbWF0Y2ggPSBGYWxzZQorCisgICAgaWYgdWQubWQ1X2V4cGVjdGVkICE9IG1kNWRhdGE6CisgICAgICAgIG1kNW1pc21hdGNoID0gVHJ1ZQorCisgICAgaWYgdWQuc2hhMjU2X2V4cGVjdGVkICE9IHNoYTI1NmRhdGE6CisgICAgICAgIHNoYTI1Nm1pc21hdGNoID0gVHJ1ZQorCisgICAgIyBXZSB3YW50IHRvIGFsZXJ0IHRoZSB1c2VyIGlmIGEgY2hlY2tzdW0gaXMgZGVmaW5lZCBpbiB0aGUgcmVjaXBlIGJ1dAorICAgICMgaXQgZG9lcyBub3QgbWF0Y2guCisgICAgbXNnID0gIiIKKyAgICBtaXNtYXRjaCA9IEZhbHNlCisgICAgaWYgbWQ1bWlzbWF0Y2ggYW5kIHVkLm1kNV9leHBlY3RlZDoKKyAgICAgICAgbXNnID0gbXNnICsgIlxuRmlsZTogJyVzJyBoYXMgJXMgY2hlY2tzdW0gJXMgd2hlbiAlcyB3YXMgZXhwZWN0ZWQiICUgKHVkLmxvY2FscGF0aCwgJ21kNScsIG1kNWRhdGEsIHVkLm1kNV9leHBlY3RlZCkKKyAgICAgICAgbWlzbWF0Y2ggPSBUcnVlOworCisgICAgaWYgc2hhMjU2bWlzbWF0Y2ggYW5kIHVkLnNoYTI1Nl9leHBlY3RlZDoKKyAgICAgICAgbXNnID0gbXNnICsgIlxuRmlsZTogJyVzJyBoYXMgJXMgY2hlY2tzdW0gJXMgd2hlbiAlcyB3YXMgZXhwZWN0ZWQiICUgKHVkLmxvY2FscGF0aCwgJ3NoYTI1NicsIHNoYTI1NmRhdGEsIHVkLnNoYTI1Nl9leHBlY3RlZCkKKyAgICAgICAgbWlzbWF0Y2ggPSBUcnVlOworCisgICAgaWYgbWlzbWF0Y2g6CisgICAgICAgIG1zZyA9IG1zZyArICdcbklmIHRoaXMgY2hhbmdlIGlzIGV4cGVjdGVkIChlLmcuIHlvdSBoYXZlIHVwZ3JhZGVkIHRvIGEgbmV3IHZlcnNpb24gd2l0aG91dCB1cGRhdGluZyB0aGUgY2hlY2tzdW1zKSB0aGVuIHlvdSBjYW4gdXNlIHRoZXNlIGxpbmVzIHdpdGhpbiB0aGUgcmVjaXBlOlxuU1JDX1VSSVslc10gPSAiJXMiXG5TUkNfVVJJWyVzXSA9ICIlcyJcbk90aGVyd2lzZSB5b3Ugc2hvdWxkIHJldHJ5IHRoZSBkb3dubG9hZCBhbmQvb3IgY2hlY2sgd2l0aCB1cHN0cmVhbSB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgaGFzIGJlY29tZSBjb3JydXB0ZWQgb3Igb3RoZXJ3aXNlIHVuZXhwZWN0ZWRseSBtb2RpZmllZC5cbicgJSAodWQubWQ1X25hbWUsIG1kNWRhdGEsIHVkLnNoYTI1Nl9uYW1lLCBzaGEyNTZkYXRhKQorCisgICAgaWYgbGVuKG1zZyk6CisgICAgICAgIHJhaXNlIENoZWNrc3VtRXJyb3IoJ0NoZWNrc3VtIG1pc21hdGNoISVzJyAlIG1zZywgdWQudXJsLCBtZDVkYXRhKQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgX01ENV9LRVk6IG1kNWRhdGEsCisgICAgICAgIF9TSEEyNTZfS0VZOiBzaGEyNTZkYXRhCisgICAgfQorCisKK2RlZiB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBkLCBvcmlndWQ9Tm9uZSk6CisgICAgIiIiCisgICAgQ2hlY2sgd2hldGhlciB0aGUgZG9uZSBzdGFtcCBmaWxlIGhhcyB0aGUgcmlnaHQgY2hlY2tzdW1zIChpZiB0aGUgZmV0Y2gKKyAgICBtZXRob2Qgc3VwcG9ydHMgdGhlbSkuIElmIGl0IGRvZXNuJ3QsIGRlbGV0ZSB0aGUgZG9uZSBzdGFtcCBhbmQgZm9yY2UKKyAgICBhIHJlLWRvd25sb2FkLgorCisgICAgUmV0dXJucyBUcnVlLCBpZiB0aGUgZG9uZXN0YW1wIGV4aXN0cyBhbmQgaXMgdmFsaWQsIEZhbHNlIG90aGVyd2lzZS4gV2hlbgorICAgIHJldHVybmluZyBGYWxzZSwgYW55IGV4aXN0aW5nIGRvbmUgc3RhbXBzIGFyZSByZW1vdmVkLgorICAgICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5kb25lc3RhbXApOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIChub3QgdWQubWV0aG9kLnN1cHBvcnRzX2NoZWNrc3VtKHVkKSBvcgorICAgICAgICAob3JpZ3VkIGFuZCBub3Qgb3JpZ3VkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bShvcmlndWQpKSk6CisgICAgICAgICMgZG9uZSBzdGFtcCBleGlzdHMsIGNoZWNrc3VtcyBub3Qgc3VwcG9ydGVkOyBhc3N1bWUgdGhlIGxvY2FsIGZpbGUgaXMKKyAgICAgICAgIyBjdXJyZW50CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgIyBkb25lIHN0YW1wIGV4aXN0cywgYnV0IHRoZSBkb3dubG9hZGVkIGZpbGUgZG9lcyBub3Q7IHRoZSBkb25lIHN0YW1wCisgICAgICAgICMgbXVzdCBiZSBpbmNvcnJlY3QsIHJlLXRyaWdnZXIgdGhlIGRvd25sb2FkCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcHJlY29tcHV0ZWRfY2hlY2tzdW1zID0ge30KKyAgICAjIE9ubHkgcmUtdXNlIHRoZSBwcmVjb21wdXRlZCBjaGVja3N1bXMgaWYgdGhlIGRvbmVzdGFtcCBpcyBuZXdlciB0aGFuIHRoZQorICAgICMgZmlsZS4gRG8gbm90IHJlbHkgb24gdGhlIG10aW1lIG9mIGRpcmVjdG9yaWVzLCB0aG91Z2guIElmIHVkLmxvY2FscGF0aCBpcworICAgICMgYSBkaXJlY3RvcnksIHRoZXJlIHdpbGwgcHJvYmFibHkgbm90IGJlIGFueSBjaGVja3N1bXMgYW55d2F5LgorICAgIGlmIChvcy5wYXRoLmlzZGlyKHVkLmxvY2FscGF0aCkgb3IKKyAgICAgICAgICAgIG9zLnBhdGguZ2V0bXRpbWUodWQubG9jYWxwYXRoKSA8IG9zLnBhdGguZ2V0bXRpbWUodWQuZG9uZXN0YW1wKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLlVucGlja2xlcihjYWNoZWZpbGUpCisgICAgICAgICAgICAgICAgcHJlY29tcHV0ZWRfY2hlY2tzdW1zLnVwZGF0ZShwaWNrbGVkLmxvYWQoKSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgIyBBdm9pZCB0aGUgd2FybmluZ3Mgb24gdGhlIHVwZ3JhZGUgcGF0aCBmcm9tIGVtdHB5IGRvbmUgc3RhbXAKKyAgICAgICAgICAgICMgZmlsZXMgdG8gdGhvc2UgY29udGFpbmluZyB0aGUgY2hlY2tzdW1zLgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgICMgSWdub3JlIGVycm9ycywgdGhleSBhcmVuJ3QgZmF0YWwKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiQ291bGRuJ3QgbG9hZCBjaGVja3N1bXMgZnJvbSBkb25lc3RhbXAgJXM6ICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG1zZzogJXMpIiAlICh1ZC5kb25lc3RhbXAsIHR5cGUoZSkuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGUpKSkKKworICAgIHRyeToKKyAgICAgICAgY2hlY2tzdW1zID0gdmVyaWZ5X2NoZWNrc3VtKHVkLCBkLCBwcmVjb21wdXRlZF9jaGVja3N1bXMpCisgICAgICAgICMgSWYgdGhlIGNhY2hlIGZpbGUgZGlkIG5vdCBoYXZlIHRoZSBjaGVja3N1bXMsIGNvbXB1dGUgYW5kIHN0b3JlIHRoZW0KKyAgICAgICAgIyBhcyBhbiB1cGdyYWRlIHBhdGggZnJvbSB0aGUgcHJldmlvdXMgZG9uZSBzdGFtcCBmaWxlIGZvcm1hdC4KKyAgICAgICAgaWYgY2hlY2tzdW1zICE9IHByZWNvbXB1dGVkX2NoZWNrc3VtczoKKyAgICAgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJ3YiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICBwID0gcGlja2xlLlBpY2tsZXIoY2FjaGVmaWxlLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKyAgICAgICAgICAgICAgICBwLmR1bXAoY2hlY2tzdW1zKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBDaGVja3N1bUVycm9yIGFzIGU6CisgICAgICAgICMgQ2hlY2tzdW1zIGZhaWxlZCB0byB2ZXJpZnksIHRyaWdnZXIgcmUtZG93bmxvYWQgYW5kIHJlbW92ZSB0aGUKKyAgICAgICAgIyBpbmNvcnJlY3Qgc3RhbXAgZmlsZS4KKyAgICAgICAgbG9nZ2VyLndhcm4oIkNoZWNrc3VtIG1pc21hdGNoIGZvciBsb2NhbCBmaWxlICVzXG4iCisgICAgICAgICAgICAgICAgICAgICJDbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSB1ZC5sb2NhbHBhdGgpCisgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHVwZGF0ZV9zdGFtcCh1ZCwgZCk6CisgICAgIiIiCisgICAgICAgIGRvbmVzdGFtcCBpcyBmaWxlIHN0YW1wIGluZGljYXRpbmcgdGhlIHdob2xlIGZldGNoaW5nIGlzIGRvbmUKKyAgICAgICAgdGhpcyBmdW5jdGlvbiB1cGRhdGUgdGhlIHN0YW1wIGFmdGVyIHZlcmlmeWluZyB0aGUgY2hlY2tzdW0KKyAgICAiIiIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5kb25lc3RhbXApOgorICAgICAgICAjIFRvdWNoIHRoZSBkb25lIHN0YW1wIGZpbGUgdG8gc2hvdyBhY3RpdmUgdXNlIG9mIHRoZSBkb3dubG9hZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51dGltZSh1ZC5kb25lc3RhbXAsIE5vbmUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgRXJyb3JzIGFyZW4ndCBmYXRhbCBoZXJlCisgICAgICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tzdW1zID0gdmVyaWZ5X2NoZWNrc3VtKHVkLCBkKQorICAgICAgICAjIFN0b3JlIHRoZSBjaGVja3N1bXMgZm9yIGxhdGVyIHJlLXZlcmlmaWNhdGlvbiBhZ2FpbnN0IHRoZSByZWNpcGUKKyAgICAgICAgd2l0aCBvcGVuKHVkLmRvbmVzdGFtcCwgIndiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGNhY2hlZmlsZSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICBwLmR1bXAoY2hlY2tzdW1zKQorCitkZWYgc3VicHJvY2Vzc19zZXR1cCgpOgorICAgICMgUHl0aG9uIGluc3RhbGxzIGEgU0lHUElQRSBoYW5kbGVyIGJ5IGRlZmF1bHQuIFRoaXMgaXMgdXN1YWxseSBub3Qgd2hhdAorICAgICMgbm9uLVB5dGhvbiBzdWJwcm9jZXNzZXMgZXhwZWN0LgorICAgICMgU0lHUElQRSBlcnJvcnMgYXJlIGtub3duIGlzc3VlcyB3aXRoIGd6aXAvYmFzaAorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1BJUEUsIHNpZ25hbC5TSUdfREZMKQorCitkZWYgZ2V0X2F1dG9yZXYoZCk6CisgICAgIyAgb25seSBub3QgY2FjaGUgc3JjIHJldiBpbiBhdXRvcmV2IGNhc2UKKyAgICBpZiBkLmdldFZhcignQkJfU1JDUkVWX1BPTElDWScsIFRydWUpICE9ICJjYWNoZSI6CisgICAgICAgIGQuc2V0VmFyKCdfX0JCX0RPTlRfQ0FDSEUnLCAnMScpCisgICAgcmV0dXJuICJBVVRPSU5DIgorCitkZWYgZ2V0X3NyY3JldihkLCBtZXRob2RfbmFtZT0nc29ydGFibGVfcmV2aXNpb24nKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHJldnNpb24gc3RyaW5nLCB1c3VhbGx5IGZvciB1c2UgaW4gdGhlIHZlcnNpb24gc3RyaW5nIChQVikgb2YgdGhlIGN1cnJlbnQgcGFja2FnZQorICAgIE1vc3QgcGFja2FnZXMgdXN1YWxseSBvbmx5IGhhdmUgb25lIFNDTSBzbyB3ZSBqdXN0IHBhc3Mgb24gdGhlIGNhbGwuCisgICAgSW4gdGhlIG11bHRpIFNDTSBjYXNlLCB3ZSBidWlsZCBhIHZhbHVlIGJhc2VkIG9uIFNSQ1JFVl9GT1JNQVQgd2hpY2ggbXVzdAorICAgIGhhdmUgYmVlbiBzZXQuCisKKyAgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgd2UgcHV0IHRoZSBzdHJpbmcgIkFVVE9JTkMrIiBpbnRvIHJldHVybiB2YWx1ZSBpZiB0aGUgcmV2aXNpb25zIGFyZSBub3QgCisgICAgaW5jcmVtZW50YWwsIG90aGVyIGNvZGUgaXMgdGhlbiByZXNwb25zaWJsZSBmb3IgdHVybmluZyB0aGF0IGludG8gYW4gaW5jcmVhc2luZyB2YWx1ZSAoaWYgbmVlZGVkKQorCisgICAgQSBtZXRob2RfbmFtZSBjYW4gYmUgc3VwcGxpZWQgdG8gcmV0cmlldmUgYW4gYWx0ZXJuYXRpdmVseSBmb3JtYXR0ZWQgcmV2aXNpb24gZnJvbSBhIGZldGNoZXIsIGlmCisgICAgdGhhdCBmZXRjaGVyIHByb3ZpZGVzIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyBzb3J0YWJsZV9yZXZpc2lvbi4KKyAgICAiIiIKKworICAgIHNjbXMgPSBbXQorICAgIGZldGNoZXIgPSBGZXRjaChkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCksIGQpCisgICAgdXJsZGF0YSA9IGZldGNoZXIudWQKKyAgICBmb3IgdSBpbiB1cmxkYXRhOgorICAgICAgICBpZiB1cmxkYXRhW3VdLm1ldGhvZC5zdXBwb3J0c19zcmNyZXYoKToKKyAgICAgICAgICAgIHNjbXMuYXBwZW5kKHUpCisKKyAgICBpZiBsZW4oc2NtcykgPT0gMDoKKyAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiU1JDUkVWIHdhcyB1c2VkIHlldCBubyB2YWxpZCBTQ00gd2FzIGZvdW5kIGluIFNSQ19VUkkiKQorCisgICAgaWYgbGVuKHNjbXMpID09IDEgYW5kIGxlbih1cmxkYXRhW3NjbXNbMF1dLm5hbWVzKSA9PSAxOgorICAgICAgICBhdXRvaW5jLCByZXYgPSBnZXRhdHRyKHVybGRhdGFbc2Ntc1swXV0ubWV0aG9kLCBtZXRob2RfbmFtZSkodXJsZGF0YVtzY21zWzBdXSwgZCwgdXJsZGF0YVtzY21zWzBdXS5uYW1lc1swXSkKKyAgICAgICAgaWYgbGVuKHJldikgPiAxMDoKKyAgICAgICAgICAgIHJldiA9IHJldls6MTBdCisgICAgICAgIGlmIGF1dG9pbmM6CisgICAgICAgICAgICByZXR1cm4gIkFVVE9JTkMrIiArIHJldgorICAgICAgICByZXR1cm4gcmV2CisKKyAgICAjCisgICAgIyBNdXRpcGxlIFNDTXMgYXJlIGluIFNSQ19VUkkgc28gd2UgcmVzb3J0IHRvIFNSQ1JFVl9GT1JNQVQKKyAgICAjCisgICAgZm9ybWF0ID0gZC5nZXRWYXIoJ1NSQ1JFVl9GT1JNQVQnLCBUcnVlKQorICAgIGlmIG5vdCBmb3JtYXQ6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlRoZSBTUkNSRVZfRk9STUFUIHZhcmlhYmxlIG11c3QgYmUgc2V0IHdoZW4gbXVsdGlwbGUgU0NNcyBhcmUgdXNlZC4iKQorCisgICAgc2VlbmF1dG9pbmMgPSBGYWxzZQorICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgdWQgPSB1cmxkYXRhW3NjbV0KKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBhdXRvaW5jLCByZXYgPSBnZXRhdHRyKHVkLm1ldGhvZCwgbWV0aG9kX25hbWUpKHVkLCBkLCBuYW1lKQorICAgICAgICAgICAgc2VlbmF1dG9pbmMgPSBzZWVuYXV0b2luYyBvciBhdXRvaW5jCisgICAgICAgICAgICBpZiBsZW4ocmV2KSA+IDEwOgorICAgICAgICAgICAgICAgIHJldiA9IHJldls6MTBdCisgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShuYW1lLCByZXYpCisgICAgaWYgc2VlbmF1dG9pbmM6CisgICAgICAgZm9ybWF0ID0gIkFVVE9JTkMrIiArIGZvcm1hdAorCisgICAgcmV0dXJuIGZvcm1hdAorCitkZWYgbG9jYWxwYXRoKHVybCwgZCk6CisgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJsXSwgZCkKKyAgICByZXR1cm4gZmV0Y2hlci5sb2NhbHBhdGgodXJsKQorCitkZWYgcnVuZmV0Y2hjbWQoY21kLCBkLCBxdWlldD1GYWxzZSwgY2xlYW51cD1Ob25lKToKKyAgICAiIiIKKyAgICBSdW4gY21kIHJldHVybmluZyB0aGUgY29tbWFuZCBvdXRwdXQKKyAgICBSYWlzZSBhbiBlcnJvciBpZiBpbnRlcnJ1cHRlZCBvciBjbWQgZmFpbHMKKyAgICBPcHRpb25hbGx5IGVjaG8gY29tbWFuZCBvdXRwdXQgdG8gc3Rkb3V0CisgICAgT3B0aW9uYWxseSByZW1vdmUgdGhlIGZpbGVzL2RpcmVjdG9yaWVzIGxpc3RlZCBpbiBjbGVhbnVwIHVwb24gZmFpbHVyZQorICAgICIiIgorCisgICAgIyBOZWVkIHRvIGV4cG9ydCBQQVRIIGFzIGJpbmFyeSBjb3VsZCBiZSBpbiBtZXRhZGF0YSBwYXRocworICAgICMgcmF0aGVyIHRoYW4gaG9zdCBwcm92aWRlZAorICAgICMgQWxzbyBpbmNsdWRlIHNvbWUgb3RoZXIgdmFyaWFibGVzLgorICAgICMgRklYTUU6IFNob3VsZCByZWFsbHkgaW5jbHVkZSBhbGwgZXhwb3J0IHZhcmFpYWJsZXM/CisgICAgZXhwb3J0dmFycyA9IFsnSE9NRScsICdQQVRIJywKKyAgICAgICAgICAgICAgICAgICdIVFRQX1BST1hZJywgJ2h0dHBfcHJveHknLAorICAgICAgICAgICAgICAgICAgJ0hUVFBTX1BST1hZJywgJ2h0dHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdGVFBfUFJPWFknLCAnZnRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdGVFBTX1BST1hZJywgJ2Z0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgJ05PX1BST1hZJywgJ25vX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdBTExfUFJPWFknLCAnYWxsX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdHSVRfUFJPWFlfQ09NTUFORCcsCisgICAgICAgICAgICAgICAgICAnR0lUX1NTTF9DQUlORk8nLAorICAgICAgICAgICAgICAgICAgJ0dJVF9TTUFSVF9IVFRQJywKKyAgICAgICAgICAgICAgICAgICdTU0hfQVVUSF9TT0NLJywgJ1NTSF9BR0VOVF9QSUQnLAorICAgICAgICAgICAgICAgICAgJ1NPQ0tTNV9VU0VSJywgJ1NPQ0tTNV9QQVNTV0QnXQorCisgICAgaWYgbm90IGNsZWFudXA6CisgICAgICAgIGNsZWFudXAgPSBbXQorCisgICAgZm9yIHZhciBpbiBleHBvcnR2YXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGNtZCA9ICdleHBvcnQgJyArIHZhciArICc9XCIlc1wiOyAlcycgJSAodmFsLCBjbWQpCisKKyAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBjbWQpCisKKyAgICBzdWNjZXNzID0gRmFsc2UKKyAgICBlcnJvcl9tZXNzYWdlID0gIiIKKworICAgIHRyeToKKyAgICAgICAgKG91dHB1dCwgZXJyb3JzKSA9IGJiLnByb2Nlc3MucnVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5Ob3RGb3VuZEVycm9yIGFzIGU6CisgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiRmV0Y2ggY29tbWFuZCAlcyIgJSAoZS5jb21tYW5kKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgIGlmIGUuc3Rkb3V0OgorICAgICAgICAgICAgb3V0cHV0ID0gIm91dHB1dDpcbiVzXG4lcyIgJSAoZS5zdGRvdXQsIGUuc3RkZXJyKQorICAgICAgICBlbGlmIGUuc3RkZXJyOgorICAgICAgICAgICAgb3V0cHV0ID0gIm91dHB1dDpcbiVzIiAlIGUuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSAibm8gb3V0cHV0IgorICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzLCAlcyIgJSAoZS5leGl0Y29kZSwgb3V0cHV0KQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGU6CisgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiRmV0Y2ggY29tbWFuZCAlcyBjb3VsZCBub3QgYmUgcnVuOlxuJXMiICUgKGUuY29tbWFuZCwgZS5tc2cpCisgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgIGZvciBmIGluIGNsZWFudXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGYsIFRydWUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcihlcnJvcl9tZXNzYWdlKQorCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgaW5mbyA9ICIiLCB1cmwgPSBOb25lKToKKyAgICAiIiIKKyAgICBsb2cgcmVtb3RlIG5ldHdvcmsgYWNjZXNzLCBhbmQgZXJyb3IgaWYgQkJfTk9fTkVUV09SSyBpcyBzZXQKKyAgICAiIiIKKyAgICBpZiBkLmdldFZhcigiQkJfTk9fTkVUV09SSyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgcmFpc2UgTmV0d29ya0FjY2Vzcyh1cmwsIGluZm8pCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJGZXRjaGVyIGFjY2Vzc2VkIHRoZSBuZXR3b3JrIHdpdGggdGhlIGNvbW1hbmQgJXMiICUgaW5mbykKKworZGVmIGJ1aWxkX21pcnJvcnVyaXMob3JpZ3VkLCBtaXJyb3JzLCBsZCk6CisgICAgdXJpcyA9IFtdCisgICAgdWRzID0gW10KKworICAgIHJlcGxhY2VtZW50cyA9IHt9CisgICAgcmVwbGFjZW1lbnRzWyJUWVBFIl0gPSBvcmlndWQudHlwZQorICAgIHJlcGxhY2VtZW50c1siSE9TVCJdID0gb3JpZ3VkLmhvc3QKKyAgICByZXBsYWNlbWVudHNbIlBBVEgiXSA9IG9yaWd1ZC5wYXRoCisgICAgcmVwbGFjZW1lbnRzWyJCQVNFTkFNRSJdID0gb3JpZ3VkLnBhdGguc3BsaXQoIi8iKVstMV0KKyAgICByZXBsYWNlbWVudHNbIk1JUlJPUk5BTUUiXSA9IG9yaWd1ZC5ob3N0LnJlcGxhY2UoJzonLCcuJykgKyBvcmlndWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKS5yZXBsYWNlKCcqJywgJy4nKQorCisgICAgZGVmIGFkZHVyaSh1ZCwgdXJpcywgdWRzLCBtaXJyb3JzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gbWlycm9yczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAoZmluZCwgcmVwbGFjZSkgPSBsaW5lCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbmV3dXJpID0gdXJpX3JlcGxhY2UodWQsIGZpbmQsIHJlcGxhY2UsIHJlcGxhY2VtZW50cywgbGQpCisgICAgICAgICAgICBpZiBub3QgbmV3dXJpIG9yIG5ld3VyaSBpbiB1cmlzIG9yIG5ld3VyaSA9PSBvcmlndWQudXJsOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCB0cnVzdGVkX25ldHdvcmsobGQsIG5ld3VyaSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNaXJyb3IgJXMgbm90IGluIHRoZSBsaXN0IG9mIHRydXN0ZWQgbmV0d29ya3MsIHNraXBwaW5nIiAlICAobmV3dXJpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIENyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIG1pcnJvcnMgbWludXMgdGhlIGN1cnJlbnQgbGluZQorICAgICAgICAgICAgIyB0aGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJlY3Vyc2l2ZWx5IHByb2Nlc3NpbmcgdGhlIHNhbWUgbGluZQorICAgICAgICAgICAgIyBhcyB3ZWxsIGFzIGluZGlyZWN0IHJlY3Vyc2lvbiBBIC0+IEIgLT4gQyAtPiBBCisgICAgICAgICAgICBsb2NhbG1pcnJvcnMgPSBsaXN0KG1pcnJvcnMpCisgICAgICAgICAgICBsb2NhbG1pcnJvcnMucmVtb3ZlKGxpbmUpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuZXd1ZCA9IEZldGNoRGF0YShuZXd1cmksIGxkKQorICAgICAgICAgICAgICAgIG5ld3VkLnNldHVwX2xvY2FscGF0aChsZCkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWlycm9yIGZldGNoIGZhaWx1cmUgZm9yIHVybCAlcyAob3JpZ2luYWwgdXJsOiAlcykiICUgKG5ld3VyaSwgb3JpZ3VkLnVybCkpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsIHN0cihlKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICMgc2V0dXBfbG9jYWxwYXRoIG9mIGZpbGU6Ly8gdXJscyBtYXkgZmFpbCwgd2Ugc2hvdWxkIHN0aWxsIHNlZSAKKyAgICAgICAgICAgICAgICAgICAgIyBpZiBtaXJyb3JzIG9mIHRoZSB1cmwgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgYWRkdXJpKG5ld3VkLCB1cmlzLCB1ZHMsIGxvY2FsbWlycm9ycykKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBjb250aW51ZSAgIAorICAgICAgICAgICAgdXJpcy5hcHBlbmQobmV3dXJpKQorICAgICAgICAgICAgdWRzLmFwcGVuZChuZXd1ZCkKKworICAgICAgICAgICAgYWRkdXJpKG5ld3VkLCB1cmlzLCB1ZHMsIGxvY2FsbWlycm9ycykKKworICAgIGFkZHVyaShvcmlndWQsIHVyaXMsIHVkcywgbWlycm9ycykKKworICAgIHJldHVybiB1cmlzLCB1ZHMKKworZGVmIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIHN1ZmZpeCk6CisgICAgIiIiCisgICAgUmVuYW1lcyBmaWxlcyB0byBoYXZlIHN1ZmZpeCBmcm9tIHBhcmFtZXRlcgorICAgICIiIgorCisgICAgaWYgdWQubG9jYWxwYXRoIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgbmV3X2xvY2FscGF0aCA9ICIlc19iYWQtY2hlY2tzdW1fJXMiICUgKHVkLmxvY2FscGF0aCwgc3VmZml4KQorICAgIGJiLndhcm4oIlJlbmFtaW5nICVzIHRvICVzIiAlICh1ZC5sb2NhbHBhdGgsIG5ld19sb2NhbHBhdGgpKQorICAgIGJiLnV0aWxzLm1vdmVmaWxlKHVkLmxvY2FscGF0aCwgbmV3X2xvY2FscGF0aCkKKworCitkZWYgdHJ5X21pcnJvcl91cmwoZmV0Y2gsIG9yaWd1ZCwgdWQsIGxkLCBjaGVjayA9IEZhbHNlKToKKyAgICAjIFJldHVybiBvZiBOb25lIG9yIGEgdmFsdWUgbWVhbnMgd2UncmUgZmluaXNoZWQKKyAgICAjIEZhbHNlIG1lYW5zIHRyeSBhbm90aGVyIHVybAorICAgIHRyeToKKyAgICAgICAgaWYgY2hlY2s6CisgICAgICAgICAgICBmb3VuZCA9IHVkLm1ldGhvZC5jaGVja3N0YXR1cyhmZXRjaCwgdWQsIGxkKQorICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBvcy5jaGRpcihsZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgIGlmIG5vdCB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBsZCwgb3JpZ3VkKSBvciB1ZC5tZXRob2QubmVlZF91cGRhdGUodWQsIGxkKToKKyAgICAgICAgICAgIHVkLm1ldGhvZC5kb3dubG9hZCh1ZCwgbGQpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHVkLm1ldGhvZCwiYnVpbGRfbWlycm9yX2RhdGEiKToKKyAgICAgICAgICAgICAgICB1ZC5tZXRob2QuYnVpbGRfbWlycm9yX2RhdGEodWQsIGxkKQorCisgICAgICAgIGlmIG5vdCB1ZC5sb2NhbHBhdGggb3Igbm90IG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB1ZC5sb2NhbHBhdGggPT0gb3JpZ3VkLmxvY2FscGF0aDoKKyAgICAgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKworICAgICAgICAjIFdlIG1heSBiZSBvYnRhaW5pbmcgYSBtaXJyb3IgdGFyYmFsbCB3aGljaCBuZWVkcyBmdXJ0aGVyIHByb2Nlc3NpbmcgYnkgdGhlIHJlYWwgZmV0Y2hlcgorICAgICAgICAjIElmIHRoYXQgdGFyYmFsbCBpcyBhIGxvY2FsIGZpbGU6Ly8gd2UgbmVlZCB0byBwcm92aWRlIGEgc3ltbGluayB0byBpdAorICAgICAgICBkbGRpciA9IGxkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgaWYgb3JpZ3VkLm1pcnJvcnRhcmJhbGwgYW5kIG9zLnBhdGguYmFzZW5hbWUodWQubG9jYWxwYXRoKSA9PSBvcy5wYXRoLmJhc2VuYW1lKG9yaWd1ZC5taXJyb3J0YXJiYWxsKSBcCisgICAgICAgICAgICAgICAgYW5kIG9zLnBhdGguYmFzZW5hbWUodWQubG9jYWxwYXRoKSAhPSBvcy5wYXRoLmJhc2VuYW1lKG9yaWd1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgIyBDcmVhdGUgZG9uZXN0YW1wIGluIG9sZCBmb3JtYXQgdG8gYXZvaWQgdHJpZ2dlcmluZyBhIHJlLWRvd25sb2FkCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHVkLmRvbmVzdGFtcCkpCisgICAgICAgICAgICBvcGVuKHVkLmRvbmVzdGFtcCwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKGRsZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHVkLmxvY2FscGF0aCkpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdCk6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayh1ZC5sb2NhbHBhdGgsIGRlc3QpCisgICAgICAgICAgICBpZiBub3QgdmVyaWZ5X2RvbmVzdGFtcChvcmlndWQsIGxkKSBvciBvcmlndWQubWV0aG9kLm5lZWRfdXBkYXRlKG9yaWd1ZCwgbGQpOgorICAgICAgICAgICAgICAgIG9yaWd1ZC5tZXRob2QuZG93bmxvYWQob3JpZ3VkLCBsZCkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9yaWd1ZC5tZXRob2QsImJ1aWxkX21pcnJvcl9kYXRhIik6CisgICAgICAgICAgICAgICAgICAgIG9yaWd1ZC5tZXRob2QuYnVpbGRfbWlycm9yX2RhdGEob3JpZ3VkLCBsZCkKKyAgICAgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKyAgICAgICAgIyBPdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBhIGxvY2FsIGZpbGU6Ly8gYW5kIHdlIHN5bWxpbmsgdG8gaXQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9yaWd1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsob3JpZ3VkLmxvY2FscGF0aCk6CisgICAgICAgICAgICAgICAgIyBCcm9rZW4gc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgIG9zLnVubGluayhvcmlndWQubG9jYWxwYXRoKQorCisgICAgICAgICAgICBvcy5zeW1saW5rKHVkLmxvY2FscGF0aCwgb3JpZ3VkLmxvY2FscGF0aCkKKyAgICAgICAgdXBkYXRlX3N0YW1wKG9yaWd1ZCwgbGQpCisgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKworICAgIGV4Y2VwdCBiYi5mZXRjaDIuTmV0d29ya0FjY2VzczoKKyAgICAgICAgcmFpc2UKKworICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oIk1pcnJvciBjaGVja3N1bSBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpXG5DbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSAodWQudXJsLCBvcmlndWQudXJsKSkKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKHN0cihlKSkKKyAgICAgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBOb0NoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWlycm9yIGZldGNoIGZhaWx1cmUgZm9yIHVybCAlcyAob3JpZ2luYWwgdXJsOiAlcykiICUgKHVkLnVybCwgb3JpZ3VkLnVybCkpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1ZC5tZXRob2QuY2xlYW4odWQsIGxkKQorICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgdHJ5X21pcnJvcnMoZmV0Y2gsIGQsIG9yaWd1ZCwgbWlycm9ycywgY2hlY2sgPSBGYWxzZSk6CisgICAgIiIiCisgICAgVHJ5IHRvIHVzZSBhIG1pcnJvcmVkIHZlcnNpb24gb2YgdGhlIHNvdXJjZXMuCisgICAgVGhpcyBtZXRob2Qgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbGxlZCBiZWZvcmUgdGhlIGZldGNoZXJzIGdvLgorCisgICAgZCBJcyBhIGJiLmRhdGEgaW5zdGFuY2UKKyAgICB1cmkgaXMgdGhlIG9yaWdpbmFsIHVyaSB3ZSdyZSB0cnlpbmcgdG8gZG93bmxvYWQKKyAgICBtaXJyb3JzIGlzIHRoZSBsaXN0IG9mIG1pcnJvcnMgd2UncmUgZ29pbmcgdG8gdHJ5CisgICAgIiIiCisgICAgbGQgPSBkLmNyZWF0ZUNvcHkoKQorCisgICAgdXJpcywgdWRzID0gYnVpbGRfbWlycm9ydXJpcyhvcmlndWQsIG1pcnJvcnMsIGxkKQorCisgICAgZm9yIGluZGV4LCB1cmkgaW4gZW51bWVyYXRlKHVyaXMpOgorICAgICAgICByZXQgPSB0cnlfbWlycm9yX3VybChmZXRjaCwgb3JpZ3VkLCB1ZHNbaW5kZXhdLCBsZCwgY2hlY2spCisgICAgICAgIGlmIHJldCAhPSBGYWxzZToKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgdHJ1c3RlZF9uZXR3b3JrKGQsIHVybCk6CisgICAgIiIiCisgICAgVXNlIGEgdHJ1c3RlZCB1cmwgZHVyaW5nIGRvd25sb2FkIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCBhbmQKKyAgICBCQl9BTExPV0VEX05FVFdPUktTIGlzIHNldCBnbG9iYWxseSBvciBmb3IgYSBzcGVjaWZpYyByZWNpcGUuCisgICAgTm90ZTogbW9kaWZpZXMgU1JDX1VSSSAmIG1pcnJvcnMuCisgICAgIiIiCisgICAgaWYgZC5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBwa2duYW1lID0gZC5leHBhbmQoZC5nZXRWYXIoJ1BOJywgRmFsc2UpKQorICAgIHRydXN0ZWRfaG9zdHMgPSBkLmdldFZhckZsYWcoJ0JCX0FMTE9XRURfTkVUV09SS1MnLCBwa2duYW1lKQorCisgICAgaWYgbm90IHRydXN0ZWRfaG9zdHM6CisgICAgICAgIHRydXN0ZWRfaG9zdHMgPSBkLmdldFZhcignQkJfQUxMT1dFRF9ORVRXT1JLUycsIFRydWUpCisKKyAgICAjIE5vdCBlbmFibGVkLgorICAgIGlmIG5vdCB0cnVzdGVkX2hvc3RzOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgc2NoZW1lLCBuZXR3b3JrLCBwYXRoLCB1c2VyLCBwYXNzd2QsIHBhcmFtID0gZGVjb2RldXJsKHVybCkKKworICAgIGlmIG5vdCBuZXR3b3JrOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgbmV0d29yayA9IG5ldHdvcmsubG93ZXIoKQorCisgICAgZm9yIGhvc3QgaW4gdHJ1c3RlZF9ob3N0cy5zcGxpdCgiICIpOgorICAgICAgICBob3N0ID0gaG9zdC5sb3dlcigpCisgICAgICAgIGlmIGhvc3Quc3RhcnRzd2l0aCgiKi4iKSBhbmQgKCIuIiArIG5ldHdvcmspLmVuZHN3aXRoKGhvc3RbMTpdKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIGhvc3QgPT0gbmV0d29yazoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHNyY3Jldl9pbnRlcm5hbF9oZWxwZXIodWQsIGQsIG5hbWUpOgorICAgICIiIgorICAgIFJldHVybjoKKyAgICAgICAgYSkgYSBzb3VyY2UgcmV2aXNpb24gaWYgc3BlY2lmaWVkCisgICAgICAgIGIpIGxhdGVzdCByZXZpc2lvbiBpZiBTUkNSRVY9IkFVVE9JTkMiCisgICAgICAgIGMpIE5vbmUgaWYgbm90IHNwZWNpZmllZAorICAgICIiIgorCisgICAgc3JjcmV2ID0gTm9uZQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBhdHRlbXB0cyA9IFtdCisgICAgaWYgbmFtZSAhPSAnJyBhbmQgcG46CisgICAgICAgIGF0dGVtcHRzLmFwcGVuZCgiU1JDUkVWXyVzX3BuLSVzIiAlIChuYW1lLCBwbikpCisgICAgaWYgbmFtZSAhPSAnJzoKKyAgICAgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVZfJXMiICUgbmFtZSkKKyAgICBpZiBwbjoKKyAgICAgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVZfcG4tJXMiICUgcG4pCisgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVYiKQorCisgICAgZm9yIGEgaW4gYXR0ZW1wdHM6CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKGEsIFRydWUpICAgICAgICAgICAgICAKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBzcmNyZXYgIT0gIklOVkFMSUQiOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmICdyZXYnIGluIHVkLnBhcm0gYW5kICd0YWcnIGluIHVkLnBhcm06CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlBsZWFzZSBzcGVjaWZ5IGEgO3Jldj0gcGFyYW1ldGVyIG9yIGEgO3RhZz0gcGFyYW1ldGVyIGluIHRoZSB1cmwgJXMgYnV0IG5vdCBib3RoLiIgJSAodWQudXJsKSkKKworICAgIGlmICdyZXYnIGluIHVkLnBhcm0gb3IgJ3RhZycgaW4gdWQucGFybToKKyAgICAgICAgaWYgJ3JldicgaW4gdWQucGFybToKKyAgICAgICAgICAgIHBhcm1yZXYgPSB1ZC5wYXJtWydyZXYnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFybXJldiA9IHVkLnBhcm1bJ3RhZyddCisgICAgICAgIGlmIHNyY3JldiA9PSAiSU5WQUxJRCIgb3Igbm90IHNyY3JldjoKKyAgICAgICAgICAgIHJldHVybiBwYXJtcmV2CisgICAgICAgIGlmIHNyY3JldiAhPSBwYXJtcmV2OgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiQ29uZmxpY3RpbmcgcmV2aXNpb25zICglcyBmcm9tIFNSQ1JFViBhbmQgJXMgZnJvbSB0aGUgdXJsKSBmb3VuZCwgcGxlYXNlIHNwY2lmeSBvbmUgdmFsaWQgdmFsdWUiICUgKHNyY3JldiwgcGFybXJldikpCisgICAgICAgIHJldHVybiBwYXJtcmV2CisKKyAgICBpZiBzcmNyZXYgPT0gIklOVkFMSUQiIG9yIG5vdCBzcmNyZXY6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlBsZWFzZSBzZXQgYSB2YWxpZCBTUkNSRVYgZm9yIHVybCAlcyAocG9zc2libGUga2V5IG5hbWVzIGFyZSAlcywgb3IgdXNlIGEgO3Jldj1YIFVSTCBwYXJhbWV0ZXIpIiAlIChzdHIoYXR0ZW1wdHMpLCB1ZC51cmwpLCB1ZC51cmwpCisgICAgaWYgc3JjcmV2ID09ICJBVVRPSU5DIjoKKyAgICAgICAgc3JjcmV2ID0gdWQubWV0aG9kLmxhdGVzdF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKworICAgIHJldHVybiBzcmNyZXYKKworZGVmIGdldF9jaGVja3N1bV9maWxlX2xpc3QoZCk6CisgICAgIiIiIEdldCBhIGxpc3Qgb2YgZmlsZXMgY2hlY2tzdW0gaW4gU1JDX1VSSQorCisgICAgUmV0dXJucyB0aGUgcmVzb2x2ZWQgbG9jYWwgcGF0aHMgb2YgYWxsIGxvY2FsIGZpbGUgZW50cmllcyBpbgorICAgIFNSQ19VUkkgYXMgYSBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nCisgICAgIiIiCisgICAgZmV0Y2ggPSBGZXRjaChbXSwgZCwgY2FjaGUgPSBGYWxzZSwgbG9jYWxvbmx5ID0gVHJ1ZSkKKworICAgIGRsX2RpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIGZpbGVsaXN0ID0gW10KKyAgICBmb3IgdSBpbiBmZXRjaC51cmxzOgorICAgICAgICB1ZCA9IGZldGNoLnVkW3VdCisKKyAgICAgICAgaWYgdWQgYW5kIGlzaW5zdGFuY2UodWQubWV0aG9kLCBsb2NhbC5Mb2NhbCk6CisgICAgICAgICAgICBwYXRocyA9IHVkLm1ldGhvZC5sb2NhbHBhdGhzKHVkLCBkKQorICAgICAgICAgICAgZm9yIGYgaW4gcGF0aHM6CisgICAgICAgICAgICAgICAgcHRoID0gdWQuZGVjb2RlZHVybAorICAgICAgICAgICAgICAgIGlmICcqJyBpbiBwdGg6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKGYpLCBwdGgpCisgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKGRsX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGxvY2FsIGZldGNoZXIncyBiZWhhdmlvdXIgaXMgdG8gcmV0dXJuIGEgcGF0aCB1bmRlciBETF9ESVIgaWYgaXQgY291bGRuJ3QgZmluZCB0aGUgZmlsZSBhbnl3aGVyZSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiR2V0dGluZyBjaGVja3N1bSBmb3IgJXMgU1JDX1VSSSBlbnRyeSAlczogZmlsZSBub3QgZm91bmQgZXhjZXB0IGluIERMX0RJUiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG9zLnBhdGguYmFzZW5hbWUoZikpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVW5hYmxlIHRvIGdldCBjaGVja3N1bSBmb3IgJXMgU1JDX1VSSSBlbnRyeSAlczogZmlsZSBjb3VsZCBub3QgYmUgZm91bmQiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBvcy5wYXRoLmJhc2VuYW1lKGYpKSkKKyAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoZiArICI6IiArIHN0cihvcy5wYXRoLmV4aXN0cyhmKSkpCisKKyAgICByZXR1cm4gIiAiLmpvaW4oZmlsZWxpc3QpCisKK2RlZiBnZXRfZmlsZV9jaGVja3N1bXMoZmlsZWxpc3QsIHBuKToKKyAgICAiIiJHZXQgYSBsaXN0IG9mIHRoZSBjaGVja3N1bXMgZm9yIGEgbGlzdCBvZiBsb2NhbCBmaWxlcworCisgICAgUmV0dXJucyB0aGUgY2hlY2tzdW1zIGZvciBhIGxpc3Qgb2YgbG9jYWwgZmlsZXMsIGNhY2hpbmcgdGhlIHJlc3VsdHMgYXMKKyAgICBpdCBwcm9jZWVkcworCisgICAgIiIiCisKKyAgICBkZWYgY2hlY2tzdW1fZmlsZShmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2hlY2tzdW0gPSBfY2hlY2tzdW1fY2FjaGUuZ2V0X2NoZWNrc3VtKGYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJVbmFibGUgdG8gZ2V0IGNoZWNrc3VtIGZvciAlcyBTUkNfVVJJIGVudHJ5ICVzOiAlcyIgJSAocG4sIG9zLnBhdGguYmFzZW5hbWUoZiksIGUpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGNoZWNrc3VtCisKKyAgICBkZWYgY2hlY2tzdW1fZGlyKHB0aCk6CisgICAgICAgICMgSGFuZGxlIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5CisgICAgICAgIGRpcmNoZWNrc3VtcyA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHB0aCk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmdWxscHRoID0gb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpCisgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKGZ1bGxwdGgpCisgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICAgICAgICAgIGRpcmNoZWNrc3Vtcy5hcHBlbmQoKGZ1bGxwdGgsIGNoZWNrc3VtKSkKKyAgICAgICAgcmV0dXJuIGRpcmNoZWNrc3VtcworCisgICAgY2hlY2tzdW1zID0gW10KKyAgICBmb3IgcHRoIGluIGZpbGVsaXN0LnNwbGl0KCk6CisgICAgICAgIGV4aXN0ID0gcHRoLnNwbGl0KCI6IilbMV0KKyAgICAgICAgaWYgZXhpc3QgPT0gIkZhbHNlIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHB0aCA9IHB0aC5zcGxpdCgiOiIpWzBdCisgICAgICAgIGlmICcqJyBpbiBwdGg6CisgICAgICAgICAgICAjIEhhbmRsZSBnbG9icworICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKHB0aCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmKToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1zLmV4dGVuZChjaGVja3N1bV9kaXIoZikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKGYpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKGYsIGNoZWNrc3VtKSkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHB0aCk6CisgICAgICAgICAgICBjaGVja3N1bXMuZXh0ZW5kKGNoZWNrc3VtX2RpcihwdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKHB0aCkKKyAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKHB0aCwgY2hlY2tzdW0pKQorCisgICAgY2hlY2tzdW1zLnNvcnQoa2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMSkpCisgICAgcmV0dXJuIGNoZWNrc3VtcworCisKK2NsYXNzIEZldGNoRGF0YShvYmplY3QpOgorICAgICIiIgorICAgIEEgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyB0aGUgZmV0Y2hlciBzdGF0ZSBmb3IgYSBnaXZlbiBVUkkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZCwgbG9jYWxvbmx5ID0gRmFsc2UpOgorICAgICAgICAjIGxvY2FscGF0aCBpcyB0aGUgbG9jYXRpb24gb2YgYSBkb3dubG9hZGVkIHJlc3VsdC4gSWYgbm90IHNldCwgdGhlIGZpbGUgaXMgbG9jYWwuCisgICAgICAgIHNlbGYuZG9uZXN0YW1wID0gTm9uZQorICAgICAgICBzZWxmLmxvY2FsZmlsZSA9ICIiCisgICAgICAgIHNlbGYubG9jYWxwYXRoID0gTm9uZQorICAgICAgICBzZWxmLmxvY2tmaWxlID0gTm9uZQorICAgICAgICBzZWxmLm1pcnJvcnRhcmJhbGwgPSBOb25lCisgICAgICAgIHNlbGYuYmFzZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuYmFzZXBhdGggPSBOb25lCisgICAgICAgIChzZWxmLnR5cGUsIHNlbGYuaG9zdCwgc2VsZi5wYXRoLCBzZWxmLnVzZXIsIHNlbGYucHN3ZCwgc2VsZi5wYXJtKSA9IGRlY29kZXVybChkYXRhLmV4cGFuZCh1cmwsIGQpKQorICAgICAgICBzZWxmLmRhdGUgPSBzZWxmLmdldFNSQ0RhdGUoZCkKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgaWYgbm90IHNlbGYudXNlciBhbmQgInVzZXIiIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYudXNlciA9IHNlbGYucGFybVsidXNlciJdCisgICAgICAgIGlmIG5vdCBzZWxmLnBzd2QgYW5kICJwc3dkIiBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBzZWxmLnBzd2QgPSBzZWxmLnBhcm1bInBzd2QiXQorICAgICAgICBzZWxmLnNldHVwID0gRmFsc2UKKworICAgICAgICBpZiAibmFtZSIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgc2VsZi5tZDVfbmFtZSA9ICIlcy5tZDVzdW0iICUgc2VsZi5wYXJtWyJuYW1lIl0KKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X25hbWUgPSAiJXMuc2hhMjU2c3VtIiAlIHNlbGYucGFybVsibmFtZSJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1kNV9uYW1lID0gIm1kNXN1bSIKKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X25hbWUgPSAic2hhMjU2c3VtIgorICAgICAgICBpZiBzZWxmLm1kNV9uYW1lIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYubWQ1X2V4cGVjdGVkID0gc2VsZi5wYXJtW3NlbGYubWQ1X25hbWVdCisgICAgICAgIGVsaWYgc2VsZi50eXBlIG5vdCBpbiBbImh0dHAiLCAiaHR0cHMiLCAiZnRwIiwgImZ0cHMiLCAic2Z0cCJdOgorICAgICAgICAgICAgc2VsZi5tZDVfZXhwZWN0ZWQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1kNV9leHBlY3RlZCA9IGQuZ2V0VmFyRmxhZygiU1JDX1VSSSIsIHNlbGYubWQ1X25hbWUpCisgICAgICAgIGlmIHNlbGYuc2hhMjU2X25hbWUgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgc2VsZi5zaGEyNTZfZXhwZWN0ZWQgPSBzZWxmLnBhcm1bc2VsZi5zaGEyNTZfbmFtZV0KKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgbm90IGluIFsiaHR0cCIsICJodHRwcyIsICJmdHAiLCAiZnRwcyIsICJzZnRwIl06CisgICAgICAgICAgICBzZWxmLnNoYTI1Nl9leHBlY3RlZCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X2V4cGVjdGVkID0gZC5nZXRWYXJGbGFnKCJTUkNfVVJJIiwgc2VsZi5zaGEyNTZfbmFtZSkKKyAgICAgICAgc2VsZi5pZ25vcmVfY2hlY2tzdW1zID0gRmFsc2UKKworICAgICAgICBzZWxmLm5hbWVzID0gc2VsZi5wYXJtLmdldCgibmFtZSIsJ2RlZmF1bHQnKS5zcGxpdCgnLCcpCisKKyAgICAgICAgc2VsZi5tZXRob2QgPSBOb25lCisgICAgICAgIGZvciBtIGluIG1ldGhvZHM6CisgICAgICAgICAgICBpZiBtLnN1cHBvcnRzKHNlbGYsIGQpOgorICAgICAgICAgICAgICAgIHNlbGYubWV0aG9kID0gbQorICAgICAgICAgICAgICAgIGJyZWFrICAgICAgICAgICAgICAgIAorCisgICAgICAgIGlmIG5vdCBzZWxmLm1ldGhvZDoKKyAgICAgICAgICAgIHJhaXNlIE5vTWV0aG9kRXJyb3IodXJsKQorCisgICAgICAgIGlmIGxvY2Fsb25seSBhbmQgbm90IGlzaW5zdGFuY2Uoc2VsZi5tZXRob2QsIGxvY2FsLkxvY2FsKToKKyAgICAgICAgICAgIHJhaXNlIE5vbkxvY2FsTWV0aG9kKCkKKworICAgICAgICBpZiBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpIGFuZCAicHJvdG9jb2wiIG5vdCBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBsb2dnZXIud2FybignQ29uc2lkZXIgdXBkYXRpbmcgJXMgcmVjaXBlIHRvIHVzZSAicHJvdG9jb2wiIG5vdCAicHJvdG8iIGluIFNSQ19VUkkuJywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgICAgICAgICBzZWxmLnBhcm1bInByb3RvY29sIl0gPSBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpCisKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLm1ldGhvZCwgInVybGRhdGFfaW5pdCIpOgorICAgICAgICAgICAgc2VsZi5tZXRob2QudXJsZGF0YV9pbml0KHNlbGYsIGQpCisKKyAgICAgICAgaWYgImxvY2FscGF0aCIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgIyBpZiB1c2VyIHNldHMgbG9jYWxwYXRoIGZvciBmaWxlLCB1c2UgaXQgaW5zdGVhZC4KKyAgICAgICAgICAgIHNlbGYubG9jYWxwYXRoID0gc2VsZi5wYXJtWyJsb2NhbHBhdGgiXQorICAgICAgICAgICAgc2VsZi5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5sb2NhbHBhdGgpCisgICAgICAgIGVsaWYgc2VsZi5sb2NhbGZpbGU6CisgICAgICAgICAgICBzZWxmLmxvY2FscGF0aCA9IHNlbGYubWV0aG9kLmxvY2FscGF0aChzZWxmLCBkKQorCisgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgICMgTm90ZTogLmRvbmUgYW5kIC5sb2NrIGZpbGVzIHNob3VsZCBhbHdheXMgYmUgaW4gRExfRElSIHdoZXJlYXMgbG9jYWxwYXRoIG1heSBub3QgYmUuCisgICAgICAgIGlmIHNlbGYubG9jYWxwYXRoIGFuZCBzZWxmLmxvY2FscGF0aC5zdGFydHN3aXRoKGRsZGlyKToKKyAgICAgICAgICAgIGJhc2VwYXRoID0gc2VsZi5sb2NhbHBhdGgKKyAgICAgICAgZWxpZiBzZWxmLmxvY2FscGF0aDoKKyAgICAgICAgICAgIGJhc2VwYXRoID0gZGxkaXIgKyBvcy5zZXAgKyBvcy5wYXRoLmJhc2VuYW1lKHNlbGYubG9jYWxwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzZXBhdGggPSBkbGRpciArIG9zLnNlcCArIChzZWxmLmJhc2VwYXRoIG9yIHNlbGYuYmFzZW5hbWUpCisgICAgICAgIHNlbGYuZG9uZXN0YW1wID0gYmFzZXBhdGggKyAnLmRvbmUnCisgICAgICAgIHNlbGYubG9ja2ZpbGUgPSBiYXNlcGF0aCArICcubG9jaycKKworICAgIGRlZiBzZXR1cF9yZXZpc29ucyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5yZXZpc2lvbnMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLm5hbWVzOgorICAgICAgICAgICAgc2VsZi5yZXZpc2lvbnNbbmFtZV0gPSBzcmNyZXZfaW50ZXJuYWxfaGVscGVyKHNlbGYsIGQsIG5hbWUpCisKKyAgICAgICAgIyBhZGQgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBub24gbmFtZSBzcGVjaWZpZWQgY2FzZQorICAgICAgICBpZiBsZW4oc2VsZi5uYW1lcykgPT0gMToKKyAgICAgICAgICAgIHNlbGYucmV2aXNpb24gPSBzZWxmLnJldmlzaW9uc1tzZWxmLm5hbWVzWzBdXQorCisgICAgZGVmIHNldHVwX2xvY2FscGF0aChzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYubG9jYWxwYXRoOgorICAgICAgICAgICAgc2VsZi5sb2NhbHBhdGggPSBzZWxmLm1ldGhvZC5sb2NhbHBhdGgoc2VsZiwgZCkKKworICAgIGRlZiBnZXRTUkNEYXRlKHNlbGYsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBTUkMgRGF0ZSBmb3IgdGhlIGNvbXBvbmVudAorCisgICAgICAgIGQgdGhlIGJiLmRhdGEgbW9kdWxlCisgICAgICAgICIiIgorICAgICAgICBpZiAic3JjZGF0ZSIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFybVsnc3JjZGF0ZSddCisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgICAgIGlmIHBuOgorICAgICAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCJTUkNEQVRFXyVzIiAlIHBuLCBUcnVlKSBvciBkLmdldFZhcigiU1JDREFURSIsIFRydWUpIG9yIGQuZ2V0VmFyKCJEQVRFIiwgVHJ1ZSkKKworICAgICAgICByZXR1cm4gZC5nZXRWYXIoIlNSQ0RBVEUiLCBUcnVlKSBvciBkLmdldFZhcigiREFURSIsIFRydWUpCisKK2NsYXNzIEZldGNoTWV0aG9kKG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgJ2ZldGNoJ2luZyBkYXRhIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscz1Ob25lKToKKyAgICAgICAgc2VsZi51cmxzID0gW10KKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZldGNoIGNsYXNzIHN1cHBvcnRzIGEgZ2l2ZW4gdXJsLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxvY2FsIGZpbGVuYW1lIG9mIGEgZ2l2ZW4gdXJsIGFzc3VtaW5nIGEgc3VjY2Vzc2Z1bCBmZXRjaC4KKyAgICAgICAgQ2FuIGFsc28gc2V0dXAgdmFyaWFibGVzIGluIHVybGRhdGEgZm9yIHVzZSBpbiBnbyAoc2F2aW5nIGNvZGUgZHVwbGljYXRpb24KKyAgICAgICAgYW5kIGR1cGxpY2F0ZSBjb2RlIGV4ZWN1dGlvbikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZGF0YS5nZXRWYXIoIkRMX0RJUiIsIGQsIFRydWUpLCB1cmxkYXRhLmxvY2FsZmlsZSkKKworICAgIGRlZiBzdXBwb3J0c19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIGxvY2FscGF0aCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYSBjaGVja3N1bT8KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBjYW5ub3QgY29tcHV0ZSBjaGVja3N1bXMgZm9yIGRpcmVjdG9yaWVzCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIodXJsZGF0YS5sb2NhbHBhdGgpID09IFRydWU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgdXJsZGF0YS5sb2NhbHBhdGguZmluZCgiKiIpICE9IC0xOgorICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVjb21tZW5kc19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIHRoZSBiYWNrZW5kIG9uIHdoZXJlIGNoZWNrc3VtbWluZyBpcyByZWNvbW1lbmRlZCAoc2hvdWxkIHdhcm5pbmdzIAorICAgICAgICBiZSBkaXNwbGF5ZWQgaWYgdGhlcmUgaXMgbm8gY2hlY2tzdW0pPworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3N0cmlwX2xlYWRpbmdfc2xhc2hlcyhzZWxmLCByZWxwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSBsZWFkaW5nIHNsYXNoIGFzIG9zLnBhdGguam9pbiBjYW4ndCBjb3BlCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBvcy5wYXRoLmlzYWJzKHJlbHBhdGgpOgorICAgICAgICAgICAgcmVscGF0aCA9IHJlbHBhdGhbMTpdCisgICAgICAgIHJldHVybiByZWxwYXRoCisKKyAgICBkZWYgc2V0VXJscyhzZWxmLCB1cmxzKToKKyAgICAgICAgc2VsZi5fX3VybHMgPSB1cmxzCisKKyAgICBkZWYgZ2V0VXJscyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191cmxzCisKKyAgICB1cmxzID0gcHJvcGVydHkoZ2V0VXJscywgc2V0VXJscywgTm9uZSwgIlVybHMgcHJvcGVydHkiKQorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIEZvcmNlIGEgZmV0Y2gsIGV2ZW4gaWYgbG9jYWxwYXRoIGV4aXN0cz8KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgZmV0Y2hlciBzdXBwb3J0cyBhdXRvIHNvdXJjZSByZXZpc2lvbnMgKFNSQ1JFVikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggdXJscworICAgICAgICBBc3N1bWVzIGxvY2FscGF0aCB3YXMgY2FsbGVkIGZpcnN0CisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb01ldGhvZEVycm9yKHVybCkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdXJsZGF0YSwgcm9vdGRpciwgZGF0YSk6CisgICAgICAgIGl0ZXJhdGUgPSBGYWxzZQorICAgICAgICBmaWxlID0gdXJsZGF0YS5sb2NhbHBhdGgKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1bnBhY2sgPSBiYi51dGlscy50b19ib29sZWFuKHVybGRhdGEucGFybS5nZXQoJ3VucGFjaycpLCBUcnVlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CisgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCB2YWx1ZSBmb3IgJ3VucGFjaycgcGFyYW1ldGVyIGZvciAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChmaWxlLCB1cmxkYXRhLnBhcm0uZ2V0KCd1bnBhY2snKSkpCisKKyAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlKQorICAgICAgICBpZiBleHQgaW4gWycuZ3onLCAnLmJ6MicsICcuWicsICcueHonLCAnLmx6J106CisgICAgICAgICAgICBlZmlsZSA9IG9zLnBhdGguam9pbihyb290ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGJhc2UpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWZpbGUgPSBmaWxlCisgICAgICAgIGNtZCA9IE5vbmUKKworICAgICAgICBpZiB1bnBhY2s6CisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcudGFyJyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3RhciB4IC0tbm8tc2FtZS1vd25lciAtZiAlcycgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy50Z3onKSBvciBmaWxlLmVuZHN3aXRoKCcudGFyLmd6Jykgb3IgZmlsZS5lbmRzd2l0aCgnLnRhci5aJyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3RhciB4eiAtLW5vLXNhbWUtb3duZXIgLWYgJXMnICUgZmlsZQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcudGJ6Jykgb3IgZmlsZS5lbmRzd2l0aCgnLnRiejInKSBvciBmaWxlLmVuZHN3aXRoKCcudGFyLmJ6MicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdiemlwMiAtZGMgJXMgfCB0YXIgeCAtLW5vLXNhbWUtb3duZXIgLWYgLScgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5neicpIG9yIGZpbGUuZW5kc3dpdGgoJy5aJykgb3IgZmlsZS5lbmRzd2l0aCgnLnonKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnZ3ppcCAtZGMgJXMgPiAlcycgJSAoZmlsZSwgZWZpbGUpCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5iejInKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnYnppcDIgLWRjICVzID4gJXMnICUgKGZpbGUsIGVmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcudGFyLnh6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3h6IC1kYyAlcyB8IHRhciB4IC0tbm8tc2FtZS1vd25lciAtZiAtJyAlIGZpbGUKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnh6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3h6IC1kYyAlcyA+ICVzJyAlIChmaWxlLCBlZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnRhci5seicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdsemlwIC1kYyAlcyB8IHRhciB4IC0tbm8tc2FtZS1vd25lciAtZiAtJyAlIGZpbGUKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLmx6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ2x6aXAgLWRjICVzID4gJXMnICUgKGZpbGUsIGVmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuemlwJykgb3IgZmlsZS5lbmRzd2l0aCgnLmphcicpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZG9zID0gYmIudXRpbHMudG9fYm9vbGVhbih1cmxkYXRhLnBhcm0uZ2V0KCdkb3MnKSwgRmFsc2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCB2YWx1ZSBmb3IgJ2RvcycgcGFyYW1ldGVyIGZvciAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUsIHVybGRhdGEucGFybS5nZXQoJ2RvcycpKSkKKyAgICAgICAgICAgICAgICBjbWQgPSAndW56aXAgLXEgLW8nCisgICAgICAgICAgICAgICAgaWYgZG9zOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnJXMgLWEnICUgY21kCisgICAgICAgICAgICAgICAgY21kID0gIiVzICclcyciICUgKGNtZCwgZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnJwbScpIG9yIGZpbGUuZW5kc3dpdGgoJy5zcnBtJyk6CisgICAgICAgICAgICAgICAgaWYgJ2V4dHJhY3QnIGluIHVybGRhdGEucGFybToKKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrX2ZpbGUgPSB1cmxkYXRhLnBhcm0uZ2V0KCdleHRyYWN0JykKKyAgICAgICAgICAgICAgICAgICAgY21kID0gJ3JwbTJjcGlvLnNoICVzIHwgY3BpbyAtaWQgJXMnICUgKGZpbGUsIHVucGFja19maWxlKQorICAgICAgICAgICAgICAgICAgICBpdGVyYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpdGVyYXRlX2ZpbGUgPSB1bnBhY2tfZmlsZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdycG0yY3Bpby5zaCAlcyB8IGNwaW8gLWlkJyAlIChmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuZGViJykgb3IgZmlsZS5lbmRzd2l0aCgnLmlwaycpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdhciAtcCAlcyBkYXRhLnRhci5neiB8IHpjYXQgfCB0YXIgLS1uby1zYW1lLW93bmVyIC14cGYgLScgJSBmaWxlCisKKyAgICAgICAgaWYgbm90IHVucGFjayBvciBub3QgY21kOgorICAgICAgICAgICAgIyBJZiBmaWxlID09IGRlc3QsIHRoZW4gYXZvaWQgYW55IGNvcGllcywgYXMgd2UgYWxyZWFkeSBwdXQgdGhlIGZpbGUgaW50byBkZXN0IQorICAgICAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihyb290ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKQorICAgICAgICAgICAgaWYgKGZpbGUgIT0gZGVzdCkgYW5kIG5vdCAob3MucGF0aC5leGlzdHMoZGVzdCkgYW5kIG9zLnBhdGguc2FtZWZpbGUoZmlsZSwgZGVzdCkpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICMgSWYgZm9yIGV4YW1wbGUgd2UncmUgYXNrZWQgdG8gY29weSBmaWxlOi8vZm9vL2Jhciwgd2UgbmVlZCB0byB1bnBhY2sgdGhlIHJlc3VsdCBpbnRvIGZvby9iYXIKKyAgICAgICAgICAgICAgICAgICAgYmFzZXBhdGggPSBnZXRhdHRyKHVybGRhdGEsICJiYXNlcGF0aCIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSAiLiIKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXBhdGggYW5kIGJhc2VwYXRoLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlcGF0aCA9IGJhc2VwYXRoLnJzdHJpcCgiLyIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgYmFzZXBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlcGF0aCA9IG9zLnBhdGguZGlybmFtZShiYXNlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXBhdGggYW5kIGJhc2VwYXRoLmZpbmQoIi8iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSBiYXNlcGF0aFs6YmFzZXBhdGgucmZpbmQoJy8nKV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSBkZXN0ZGlyLnN0cmlwKCcvJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVzdGRpciAhPSAiLiIgYW5kIG5vdCBvcy5hY2Nlc3MoIiVzLyVzIiAlIChyb290ZGlyLCBkZXN0ZGlyKSwgb3MuRl9PSyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycygiJXMvJXMiICUgKHJvb3RkaXIsIGRlc3RkaXIpKQorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnY3AgLWZwUFIgJXMgJXMvJXMvJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgICAgICAgICAjY21kID0gJ3RhciAtY2YgLSAtQyAiJWQiIC1wcyAuIHwgdGFyIC14ZiAtIC1DICIlcy8lcy8iJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVGhlICJkZXN0ZGlyIiBoYW5kbGluZyB3YXMgc3BlY2lmaWNhbGx5IGRvbmUgZm9yIEZJTEVTUEFUSAorICAgICAgICAgICAgICAgICAgICAjIGl0ZW1zLiAgU28sIG9ubHkgZG8gc28gZm9yIGZpbGU6Ly8gZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgdXJsZGF0YS50eXBlID09ICJmaWxlIiBhbmQgdXJsZGF0YS5wYXRoLmZpbmQoIi8iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdGRpciA9IHVybGRhdGEucGF0aC5yc3BsaXQoIi8iLCAxKVswXQorICAgICAgICAgICAgICAgICAgICAgICBpZiB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKSAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gdXJsZGF0YS5wYXJtLmdldCgnc3ViZGlyJykgKyAiLyIgKyBkZXN0ZGlyCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgIGlmIHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKQorICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gIi4iCisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcigiJXMvJXMiICUgKHJvb3RkaXIsIGRlc3RkaXIpKQorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnY3AgLWYgJXMgJXMvJXMvJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorCisgICAgICAgIGlmIG5vdCBjbWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENoYW5nZSB0byBzdWJkaXIgYmVmb3JlIGV4ZWN1dGluZyBjb21tYW5kCisgICAgICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCk7CisgICAgICAgIG9zLmNoZGlyKHJvb3RkaXIpCisgICAgICAgIGlmICdzdWJkaXInIGluIHVybGRhdGEucGFybToKKyAgICAgICAgICAgIG5ld2RpciA9ICgiJXMvJXMiICUgKHJvb3RkaXIsIHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuZXdkaXIpCisgICAgICAgICAgICBvcy5jaGRpcihuZXdkaXIpCisKKyAgICAgICAgcGF0aCA9IGRhdGEuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkKKyAgICAgICAgaWYgcGF0aDoKKyAgICAgICAgICAgIGNtZCA9ICJQQVRIPVwiJXNcIiAlcyIgJSAocGF0aCwgY21kKQorICAgICAgICBiYi5ub3RlKCJVbnBhY2tpbmcgJXMgdG8gJXMvIiAlIChmaWxlLCBvcy5nZXRjd2QoKSkpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHByZWV4ZWNfZm49c3VicHJvY2Vzc19zZXR1cCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBvcy5jaGRpcihzYXZlX2N3ZCkKKworICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFVucGFja0Vycm9yKCJVbnBhY2sgY29tbWFuZCAlcyBmYWlsZWQgd2l0aCByZXR1cm4gdmFsdWUgJXMiICUgKGNtZCwgcmV0KSwgdXJsZGF0YS51cmwpCisKKyAgICAgICAgaWYgaXRlcmF0ZSBpcyBUcnVlOgorICAgICAgICAgICAgaXRlcmF0ZV91cmxkYXRhID0gdXJsZGF0YQorICAgICAgICAgICAgaXRlcmF0ZV91cmxkYXRhLmxvY2FscGF0aCA9ICIlcy8lcyIgJSAocm9vdGRpciwgaXRlcmF0ZV9maWxlKQorICAgICAgICAgICAgc2VsZi51bnBhY2sodXJsZGF0YSwgcm9vdGRpciwgZGF0YSkKKworICAgICAgICByZXR1cm4KKworICAgIGRlZiBjbGVhbihzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENsZWFuIGFueSBleGlzdGluZyBmdWxsIG9yIHBhcnRpYWwgZG93bmxvYWQKKyAgICAgICAgIiIiCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1cmxkYXRhLmxvY2FscGF0aCkKKworICAgIGRlZiB0cnlfcHJlbWlycm9yKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdWxkIHByZW1pcnJvcnMgYmUgdXNlZD8KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiBhIFVSTAorICAgICAgICBBc3N1bWVzIGxvY2FscGF0aCB3YXMgY2FsbGVkIGZpcnN0CisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuaW5mbygiVVJMICVzIGNvdWxkIG5vdCBiZSBjaGVja2VkIGZvciBzdGF0dXMgc2luY2Ugbm8gbWV0aG9kIGV4aXN0cy4iLCB1cmwpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIExvb2sgaW4gdGhlIGNhY2hlIGZvciB0aGUgbGF0ZXN0IHJldmlzaW9uLCBpZiBub3QgcHJlc2VudCBhc2sgdGhlIFNDTS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfbGF0ZXN0X3JldmlzaW9uIik6CisgICAgICAgICAgICByYWlzZSBQYXJhbWV0ZXJFcnJvcigiVGhlIGZldGNoZXIgZm9yIHRoaXMgVVJMIGRvZXMgbm90IHN1cHBvcnQgX2xhdGVzdF9yZXZpc2lvbiIsIHVybCkKKworICAgICAgICByZXZzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9IRUFEUkVWUycsIGQpCisgICAgICAgIGtleSA9IHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fa2V5KHVkLCBkLCBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcmV2c1trZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldnNba2V5XSA9IHJldiA9IHNlbGYuX2xhdGVzdF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiByZXYKKworICAgIGRlZiBzb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGxhdGVzdF9yZXYgPSBzZWxmLl9idWlsZF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgcmV0dXJuIFRydWUsIHN0cihsYXRlc3RfcmV2KQorCisgICAgZGVmIGdlbmVyYXRlX3JldmlzaW9uX2tleShzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGtleSA9IHNlbGYuX3JldmlzaW9uX2tleSh1ZCwgZCwgbmFtZSkKKyAgICAgICAgcmV0dXJuICIlcy0lcyIgJSAoa2V5LCBkLmdldFZhcigiUE4iLCBUcnVlKSBvciAiIikKKworY2xhc3MgRmV0Y2gob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscywgZCwgY2FjaGUgPSBUcnVlLCBsb2NhbG9ubHkgPSBGYWxzZSwgY29ubmVjdGlvbl9jYWNoZSA9IE5vbmUpOgorICAgICAgICBpZiBsb2NhbG9ubHkgYW5kIGNhY2hlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJiYi5mZXRjaDIuRmV0Y2guX19pbml0X186IGNhbm5vdCBzZXQgY2FjaGUgYW5kIGxvY2Fsb25seSBhdCBzYW1lIHRpbWUiKQorCisgICAgICAgIGlmIGxlbih1cmxzKSA9PSAwOgorICAgICAgICAgICAgdXJscyA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBzZWxmLnVybHMgPSB1cmxzCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi51ZCA9IHt9CisgICAgICAgIHNlbGYuY29ubmVjdGlvbl9jYWNoZSA9IGNvbm5lY3Rpb25fY2FjaGUKKworICAgICAgICBmbiA9IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICAgICAgaWYgY2FjaGUgYW5kIGZuIGFuZCBmbiBpbiB1cmxkYXRhX2NhY2hlOgorICAgICAgICAgICAgc2VsZi51ZCA9IHVybGRhdGFfY2FjaGVbZm5dCisKKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgaWYgdXJsIG5vdCBpbiBzZWxmLnVkOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51ZFt1cmxdID0gRmV0Y2hEYXRhKHVybCwgZCwgbG9jYWxvbmx5KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBOb25Mb2NhbE1ldGhvZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxvbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51ZFt1cmxdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIGZuIGFuZCBjYWNoZToKKyAgICAgICAgICAgIHVybGRhdGFfY2FjaGVbZm5dID0gc2VsZi51ZAorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1cmwpOgorICAgICAgICBpZiB1cmwgbm90IGluIHNlbGYudXJsczoKKyAgICAgICAgICAgIHNlbGYudWRbdXJsXSA9IEZldGNoRGF0YSh1cmwsIHNlbGYuZCkKKworICAgICAgICBzZWxmLnVkW3VybF0uc2V0dXBfbG9jYWxwYXRoKHNlbGYuZCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZC5leHBhbmQoc2VsZi51ZFt1cmxdLmxvY2FscGF0aCkKKworICAgIGRlZiBsb2NhbHBhdGhzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbG9jYWwgZmlsZW5hbWVzLCBhc3N1bWluZyBzdWNjZXNzZnVsIGZldGNoCisgICAgICAgICIiIgorICAgICAgICBsb2NhbCA9IFtdCisKKyAgICAgICAgZm9yIHUgaW4gc2VsZi51cmxzOgorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VdCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorICAgICAgICAgICAgbG9jYWwuYXBwZW5kKHVkLmxvY2FscGF0aCkKKworICAgICAgICByZXR1cm4gbG9jYWwKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1cmxzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggYWxsIHVybHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIG5ldHdvcmsgPSBzZWxmLmQuZ2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgVHJ1ZSkKKyAgICAgICAgcHJlbWlycm9yb25seSA9IChzZWxmLmQuZ2V0VmFyKCJCQl9GRVRDSF9QUkVNSVJST1JPTkxZIiwgVHJ1ZSkgPT0gIjEiKQorCisgICAgICAgIGZvciB1IGluIHVybHM6CisgICAgICAgICAgICB1ZCA9IHNlbGYudWRbdV0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisgICAgICAgICAgICBtID0gdWQubWV0aG9kCisgICAgICAgICAgICBsb2NhbHBhdGggPSAiIgorCisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHVkLmxvY2tmaWxlKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsIG5ldHdvcmspCisgCisgICAgICAgICAgICAgICAgaWYgdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgc2VsZi5kKSBhbmQgbm90IG0ubmVlZF91cGRhdGUodWQsIHNlbGYuZCk6CisgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHVkLmxvY2FscGF0aAorICAgICAgICAgICAgICAgIGVsaWYgbS50cnlfcHJlbWlycm9yKHVkLCBzZWxmLmQpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRyeWluZyBQUkVNSVJST1JTIikKKyAgICAgICAgICAgICAgICAgICAgbWlycm9ycyA9IG1pcnJvcl9mcm9tX3N0cmluZyhzZWxmLmQuZ2V0VmFyKCdQUkVNSVJST1JTJywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMsIEZhbHNlKQorCisgICAgICAgICAgICAgICAgaWYgcHJlbWlycm9yb25seToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKKworICAgICAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgICAgICAgICAgZmlyc3RlcnIgPSBOb25lCisgICAgICAgICAgICAgICAgdmVyaWZpZWRfc3RhbXAgPSB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgaWYgbm90IGxvY2FscGF0aCBhbmQgKG5vdCB2ZXJpZmllZF9zdGFtcCBvciBtLm5lZWRfdXBkYXRlKHVkLCBzZWxmLmQpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVkLnVybCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVW50cnVzdGVkVXJsKHVkLnVybCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVHJ5aW5nIFVwc3RyZWFtIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uZG93bmxvYWQodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobSwgImJ1aWxkX21pcnJvcl9kYXRhIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5idWlsZF9taXJyb3JfZGF0YSh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxwYXRoID0gdWQubG9jYWxwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAjIGVhcmx5IGNoZWNrc3VtIHZlcmlmeSwgc28gdGhhdCBpZiBjaGVja3N1bSBtaXNtYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBmZXRjaGVyIHN0aWxsIGhhdmUgY2hhbmNlIHRvIGZldGNoIGZyb20gbWlycm9yCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc3RhbXAodWQsIHNlbGYuZCkKKworICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLk5ldHdvcmtBY2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDaGVja3N1bSBmYWlsdXJlIGVuY291bnRlcmVkIHdpdGggZG93bmxvYWQgb2YgJXMgLSB3aWxsIGF0dGVtcHQgb3RoZXIgc291cmNlcyBpZiBhdmFpbGFibGUiICUgdSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgTm9DaGVja3N1bUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGZldGNoIFVSTCAlcywgYXR0ZW1wdGluZyBNSVJST1JTIGlmIGF2YWlsYWJsZScgJSB1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCBzdHIoZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGVyciA9IGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFueSBpbmNvbXBsZXRlIGZldGNoCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdmVyaWZpZWRfc3RhbXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5jbGVhbih1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJUcnlpbmcgTUlSUk9SUyIpCisgICAgICAgICAgICAgICAgICAgICAgICBtaXJyb3JzID0gbWlycm9yX2Zyb21fc3RyaW5nKHNlbGYuZC5nZXRWYXIoJ01JUlJPUlMnLCBUcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxwYXRoIG9yICgobm90IG9zLnBhdGguZXhpc3RzKGxvY2FscGF0aCkpIGFuZCBsb2NhbHBhdGguZmluZCgiKiIpID09IC0xKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGZpcnN0ZXJyKSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiVW5hYmxlIHRvIGZldGNoIFVSTCBmcm9tIGFueSBzb3VyY2UuIiwgdSkKKworICAgICAgICAgICAgICAgIHVwZGF0ZV9zdGFtcCh1ZCwgc2VsZi5kKQorCisgICAgICAgICAgICBleGNlcHQgQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgQ2hlY2tzdW1FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2hlY2tzdW0gZmFpbHVyZSBmZXRjaGluZyAlcyIgJSB1KQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCB1cmxzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgYWxsIHVybHMgZXhpc3QgdXBzdHJlYW0KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHVybHM6CisgICAgICAgICAgICB1cmxzID0gc2VsZi51cmxzCisKKyAgICAgICAgZm9yIHUgaW4gdXJsczoKKyAgICAgICAgICAgIHVkID0gc2VsZi51ZFt1XQorICAgICAgICAgICAgdWQuc2V0dXBfbG9jYWxwYXRoKHNlbGYuZCkKKyAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVGVzdGluZyBVUkwgJXMiLCB1KQorICAgICAgICAgICAgIyBGaXJzdCB0cnkgY2hlY2tpbmcgdXJpLCB1LCBmcm9tIFBSRU1JUlJPUlMKKyAgICAgICAgICAgIG1pcnJvcnMgPSBtaXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5kLmdldFZhcignUFJFTUlSUk9SUycsIFRydWUpKQorICAgICAgICAgICAgcmV0ID0gdHJ5X21pcnJvcnMoc2VsZiwgc2VsZi5kLCB1ZCwgbWlycm9ycywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCByZXQ6CisgICAgICAgICAgICAgICAgIyBOZXh0IHRyeSBjaGVja2luZyBmcm9tIHRoZSBvcmlnaW5hbCB1cmksIHUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldCA9IG0uY2hlY2tzdGF0dXMoc2VsZiwgdWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICMgRmluYWxseSwgdHJ5IGNoZWNraW5nIHVyaSwgdSwgZnJvbSBNSVJST1JTCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcnMgPSBtaXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5kLmdldFZhcignTUlSUk9SUycsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnlfbWlycm9ycyhzZWxmLCBzZWxmLmQsIHVkLCBtaXJyb3JzLCBUcnVlKQorCisgICAgICAgICAgICBpZiBub3QgcmV0OgorICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlVSTCAlcyBkb2Vzbid0IHdvcmsiICUgdSwgdSkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgcm9vdCwgdXJscz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIGFsbCB1cmxzIGV4aXN0IHVwc3RyZWFtCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIGZvciB1IGluIHVybHM6CisgICAgICAgICAgICB1ZCA9IHNlbGYudWRbdV0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuZC5leHBhbmQoc2VsZi5sb2NhbHBhdGgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdWQubG9ja2ZpbGU6CisgICAgICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSh1ZC5sb2NrZmlsZSkKKworICAgICAgICAgICAgdWQubWV0aG9kLnVucGFjayh1ZCwgcm9vdCwgc2VsZi5kKQorCisgICAgICAgICAgICBpZiB1ZC5sb2NrZmlsZToKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIHVybHM9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbiBmaWxlcyB0aGF0IHRoZSBmZXRjaGVyIGdldHMgb3IgcGxhY2VzCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGlmIHVybCBub3QgaW4gc2VsZi51ZDoKKyAgICAgICAgICAgICAgICBzZWxmLnVkW3VybF0gPSBGZXRjaERhdGEodXJsLCBkKQorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VybF0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisKKyAgICAgICAgICAgIGlmIG5vdCB1ZC5sb2NhbGZpbGUgYW5kIHVkLmxvY2FscGF0aCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHVkLmxvY2tmaWxlOgorICAgICAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUodWQubG9ja2ZpbGUpCisKKyAgICAgICAgICAgIHVkLm1ldGhvZC5jbGVhbih1ZCwgc2VsZi5kKQorICAgICAgICAgICAgaWYgdWQuZG9uZXN0YW1wOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisKKyAgICAgICAgICAgIGlmIHVkLmxvY2tmaWxlOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKK2NsYXNzIEZldGNoQ29ubmVjdGlvbkNhY2hlKG9iamVjdCk6CisgICAgIiIiCisgICAgICAgIEEgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyBhbiBjb250YWluZXIgZm9yIHNvY2tldCBjb25uZWN0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2FjaGUgPSB7fQorCisgICAgZGVmIGdldF9jb25uZWN0aW9uX25hbWUoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIHJldHVybiBob3N0ICsgJzonICsgc3RyKHBvcnQpCisKKyAgICBkZWYgYWRkX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCwgcG9ydCwgY29ubmVjdGlvbik6CisgICAgICAgIGNuID0gc2VsZi5nZXRfY29ubmVjdGlvbl9uYW1lKGhvc3QsIHBvcnQpCisKKyAgICAgICAgaWYgY24gbm90IGluIHNlbGYuY2FjaGU6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2NuXSA9IGNvbm5lY3Rpb24KKworICAgIGRlZiBnZXRfY29ubmVjdGlvbihzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgY29ubmVjdGlvbiA9IE5vbmUKKworICAgICAgICBjbiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb25fbmFtZShob3N0LCBwb3J0KQorICAgICAgICBpZiBjbiBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgY29ubmVjdGlvbiA9IHNlbGYuY2FjaGVbY25dCisKKyAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KKworICAgIGRlZiByZW1vdmVfY29ubmVjdGlvbihzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgY24gPSBzZWxmLmdldF9jb25uZWN0aW9uX25hbWUoaG9zdCwgcG9ydCkKKyAgICAgICAgaWYgY24gaW4gc2VsZi5jYWNoZToKKyAgICAgICAgICAgIHNlbGYuY2FjaGVbY25dLmNsb3NlKCkKKyAgICAgICAgICAgIGRlbCBzZWxmLmNhY2hlW2NuXQorCisgICAgZGVmIGNsb3NlX2Nvbm5lY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgY24gaW4gc2VsZi5jYWNoZS5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2NuXS5jbG9zZSgpCisgICAgICAgICAgICBkZWwgc2VsZi5jYWNoZVtjbl0KKworZnJvbSAuIGltcG9ydCBjdnMKK2Zyb20gLiBpbXBvcnQgZ2l0Citmcm9tIC4gaW1wb3J0IGdpdHNtCitmcm9tIC4gaW1wb3J0IGdpdGFubmV4Citmcm9tIC4gaW1wb3J0IGxvY2FsCitmcm9tIC4gaW1wb3J0IHN2bgorZnJvbSAuIGltcG9ydCB3Z2V0Citmcm9tIC4gaW1wb3J0IHNzaAorZnJvbSAuIGltcG9ydCBzZnRwCitmcm9tIC4gaW1wb3J0IHBlcmZvcmNlCitmcm9tIC4gaW1wb3J0IGJ6cgorZnJvbSAuIGltcG9ydCBoZworZnJvbSAuIGltcG9ydCBvc2MKK2Zyb20gLiBpbXBvcnQgcmVwbworZnJvbSAuIGltcG9ydCBjbGVhcmNhc2UKKworbWV0aG9kcy5hcHBlbmQobG9jYWwuTG9jYWwoKSkKK21ldGhvZHMuYXBwZW5kKHdnZXQuV2dldCgpKQorbWV0aG9kcy5hcHBlbmQoc3ZuLlN2bigpKQorbWV0aG9kcy5hcHBlbmQoZ2l0LkdpdCgpKQorbWV0aG9kcy5hcHBlbmQoZ2l0c20uR2l0U00oKSkKK21ldGhvZHMuYXBwZW5kKGdpdGFubmV4LkdpdEFOTkVYKCkpCittZXRob2RzLmFwcGVuZChjdnMuQ3ZzKCkpCittZXRob2RzLmFwcGVuZChzc2guU1NIKCkpCittZXRob2RzLmFwcGVuZChzZnRwLlNGVFAoKSkKK21ldGhvZHMuYXBwZW5kKHBlcmZvcmNlLlBlcmZvcmNlKCkpCittZXRob2RzLmFwcGVuZChienIuQnpyKCkpCittZXRob2RzLmFwcGVuZChoZy5IZygpKQorbWV0aG9kcy5hcHBlbmQob3NjLk9zYygpKQorbWV0aG9kcy5hcHBlbmQocmVwby5SZXBvKCkpCittZXRob2RzLmFwcGVuZChjbGVhcmNhc2UuQ2xlYXJDYXNlKCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ienIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9ienIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlOWFjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2J6ci5weQpAQCAtMCwwICsxLDE0MyBAQAorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb24gZm9yIGJ6ci4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFJvc3MgQnVydG9uCisjIENvcHlyaWdodCAoQykgMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyAgIENsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKKyMgICBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IGRhdGEKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBCenIoRmV0Y2hNZXRob2QpOgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnYnpyJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBienIgc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICAjIENyZWF0ZSBwYXRocyB0byBienIgY2hlY2tvdXRzCisgICAgICAgIHJlbHBhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXModWQucGF0aCkKKyAgICAgICAgdWQucGtnZGlyID0gb3MucGF0aC5qb2luKGRhdGEuZXhwYW5kKCcke0JaUkRJUn0nLCBkKSwgdWQuaG9zdCwgcmVscGF0aCkKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGlmIG5vdCB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gc2VsZi5sYXRlc3RfcmV2aXNpb24odWQsIGQpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJ2J6cl8lc18lc18lcy50YXIuZ3onICUgKHVkLmhvc3QsIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJyksIHVkLnJldmlzaW9uKSwgZCkKKworICAgIGRlZiBfYnVpbGRienJjb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGFuIGJ6ciBjb21tYW5kbGluZSBiYXNlZCBvbiB1ZAorICAgICAgICBjb21tYW5kIGlzICJmZXRjaCIsICJ1cGRhdGUiLCAicmV2bm8iCisgICAgICAgICIiIgorCisgICAgICAgIGJhc2VjbWQgPSBkYXRhLmV4cGFuZCgnJHtGRVRDSENNRF9ienJ9JywgZCkKKworICAgICAgICBwcm90byA9ICB1ZC5wYXJtLmdldCgncHJvdG9jb2wnLCAnaHR0cCcpCisKKyAgICAgICAgYnpycm9vdCA9IHVkLmhvc3QgKyB1ZC5wYXRoCisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgaWYgY29tbWFuZCA9PSAicmV2bm8iOgorICAgICAgICAgICAgYnpyY21kID0gIiVzIHJldm5vICVzICVzOi8vJXMiICUgKGJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgYnpycm9vdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHVkLnJldmlzaW9uOgorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKworICAgICAgICAgICAgaWYgY29tbWFuZCA9PSAiZmV0Y2giOgorICAgICAgICAgICAgICAgIGJ6cmNtZCA9ICIlcyBicmFuY2ggJXMgJXM6Ly8lcyIgJSAoYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBienJyb290KQorICAgICAgICAgICAgZWxpZiBjb21tYW5kID09ICJ1cGRhdGUiOgorICAgICAgICAgICAgICAgIGJ6cmNtZCA9ICIlcyBwdWxsICVzIC0tb3ZlcndyaXRlIiAlIChiYXNlY21kLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiSW52YWxpZCBienIgY29tbWFuZCAlcyIgJSBjb21tYW5kLCB1ZC51cmwpCisKKyAgICAgICAgcmV0dXJuIGJ6cmNtZAorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGtnZGlyKSwgJy5ienInKSwgb3MuUl9PSyk6CisgICAgICAgICAgICBienJjbWQgPSBzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJCWlIgVXBkYXRlICVzIiwgdWQudXJsKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGJ6cmNtZCwgdWQudXJsKQorICAgICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luICh1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGF0aCkpKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoYnpyY21kLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGtnZGlyKSksIFRydWUpCisgICAgICAgICAgICBienJjbWQgPSBzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJmZXRjaCIpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgYnpyY21kLCB1ZC51cmwpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJaUiBDaGVja291dCAlcyIsIHVkLnVybCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBienJjbWQpCisgICAgICAgICAgICBydW5mZXRjaGNtZChienJjbWQsIGQpCisKKyAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICcuYnpyJyAtLWV4Y2x1ZGUgJy5ienJ0YWdzJyIKKworICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBvcy5wYXRoLmJhc2VuYW1lKHVkLnBrZ2RpcikpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisKKyAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9yZXZpc2lvbl9rZXkoc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgdW5pcXVlIGtleSBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICJienI6IiArIHVkLnBrZ2RpcgorCisgICAgZGVmIF9sYXRlc3RfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsYXRlc3QgdXBzdHJlYW0gcmV2aXNpb24gbnVtYmVyCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkJaUiBmZXRjaGVyIGhpdHRpbmcgbmV0d29yayBmb3IgJXMiLCB1ZC51cmwpCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHNlbGYuX2J1aWxkYnpyY29tbWFuZCh1ZCwgZCwgInJldm5vIiksIHVkLnVybCkKKworICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJyZXZubyIpLCBkLCBUcnVlKQorCisgICAgICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKQorCisgICAgZGVmIHNvcnRhYmxlX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHNvcnRhYmxlIHJldmlzaW9uIG51bWJlciB3aGljaCBpbiBvdXIgY2FzZSBpcyB0aGUgcmV2aXNpb24gbnVtYmVyCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBGYWxzZSwgc2VsZi5fYnVpbGRfcmV2aXNpb24odWQsIGQpCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV0dXJuIHVkLnJldmlzaW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jbGVhcmNhc2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jbGVhcmNhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4M2U3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2NsZWFyY2FzZS5weQpAQCAtMCwwICsxLDI2MyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGNsZWFyY2FzZSBpbXBsZW1lbnRhdGlvbgorCitUaGUgY2xlYXJjYXNlIGZldGNoZXIgaXMgdXNlZCB0byByZXRyaWV2ZSBmaWxlcyBmcm9tIGEgQ2xlYXJDYXNlIHJlcG9zaXRvcnkuCisKK1VzYWdlIGluIHRoZSByZWNpcGU6CisKKyAgICBTUkNfVVJJID0gImNjcmM6Ly9jYy5leGFtcGxlLm9yZy9jY3JjO3ZvYj0vZXhhbXBsZV92b2I7bW9kdWxlPS9leGFtcGxlX21vZHVsZSIKKyAgICBTUkNSRVYgPSAiRVhBTVBMRV9DTEVBUkNBU0VfVEFHIgorICAgIFBWID0gIiR7QGQuZ2V0VmFyKCJTUkNSRVYiLCBGYWxzZSkucmVwbGFjZSgiLyIsICIrIil9IgorCitUaGUgZmV0Y2hlciB1c2VzIHRoZSByY2xlYXJ0b29sIG9yIGNsZWFydG9vbCByZW1vdGUgY2xpZW50LCBkZXBlbmRpbmcgb24gd2hpY2ggb25lIGlzIGF2YWlsYWJsZS4KKworU3VwcG9ydGVkIFNSQ19VUkkgb3B0aW9ucyBhcmU6CisKKy0gdm9iCisgICAgKHJlcXVpcmVkKSBUaGUgbmFtZSBvZiB0aGUgY2xlYXJjYXNlIFZPQiAod2l0aCBwcmVwZW5kaW5nICIvIikKKworLSBtb2R1bGUKKyAgICBUaGUgbW9kdWxlIGluIHRoZSBzZWxlY3RlZCBWT0IgKHdpdGggcHJlcGVuZGluZyAiLyIpCisKKyAgICBUaGUgbW9kdWxlIGFuZCB2b2IgcGFyYW1ldGVycyBhcmUgY29tYmluZWQgdG8gY3JlYXRlCisgICAgdGhlIGZvbGxvd2luZyBsb2FkIHJ1bGUgaW4gdGhlIHZpZXcgY29uZmlnIHNwZWM6CisgICAgICAgICAgICAgICAgbG9hZCA8dm9iPjxtb2R1bGU+CisKKy0gcHJvdG8KKyAgICBodHRwIG9yIGh0dHBzCisKK1JlbGF0ZWQgdmFyaWFibGVzOgorCisgICAgQ0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDCisgICAgICAgICAgICBXcml0ZSBhIGNvbmZpZyBzcGVjIHRvIHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUgdG8gdXNlIGl0IGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IGNvbmZpZyBzcGVjIGdlbmVyYXRlZCBieSB0aGlzIGZldGNoZXIuCisgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBTUkNSRVYgbG9zZXMgaXRzIGZ1bmN0aW9uYWxpdHkgaWYgeW91IHNwZWNpZnkKKyAgICAgICAgICAgIHRoaXMgdmFyaWFibGUuIFNSQ1JFViBpcyBzdGlsbCB1c2VkIHRvIGxhYmVsIHRoZSBhcmNoaXZlIGFmdGVyIGEgZmV0Y2gsCisgICAgICAgICAgICBidXQgaXQgZG9lc24ndCBkZWZpbmUgd2hhdCdzIGZldGNoZWQuCisKK1VzZXIgY3JlZGVudGlhbHM6CisgICAgY2xlYXJ0b29sOgorICAgICAgICAgICAgVGhlIGxvZ2luIG9mIGNsZWFydG9vbCBpcyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIE5vIHNwZWNpYWwgc3RlcHMgbmVlZGVkLgorCisgICAgcmNsZWFydG9vbDoKKyAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSByY2xlYXJ0b29sIHdpdGggYXV0aGVudGljYXRlZCB1c2VycyBhbiBgcmNsZWFydG9vbCBsb2dpbmAgaXMKKyAgICAgICAgICAgIG5lY2Vzc2FyeSBiZWZvcmUgdXNpbmcgdGhlIGZldGNoZXIuCisiIiIKKyMgQ29weXJpZ2h0IChDKSAyMDE0IFNpZW1lbnMgQUcKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IGJiCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCitmcm9tICAgZGlzdHV0aWxzIGltcG9ydCBzcGF3bgorCitjbGFzcyBDbGVhckNhc2UoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIHVybHMgdmlhICdjbGVhcmNhc2UnIiIiCisgICAgZGVmIGluaXQoc2VsZiwgZCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBDbGVhcmNhc2UuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2NjcmMnXQorCisgICAgZGVmIGRlYnVnKHNlbGYsIG1zZyk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQ2xlYXJDYXNlOiAlcyIsIG1zZykKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBDbGVhckNhc2Ugc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICB1ZC5wcm90byA9ICJodHRwcyIKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtWydwcm90b2NvbCddCisgICAgICAgIGlmIG5vdCB1ZC5wcm90byBpbiAoJ2h0dHAnLCAnaHR0cHMnKToKKyAgICAgICAgICAgIHJhaXNlIGZldGNoMi5QYXJhbWV0ZXJFcnJvcigiSW52YWxpZCBwcm90b2NvbCB0eXBlIiwgdWQudXJsKQorCisgICAgICAgIHVkLnZvYiA9ICcnCisgICAgICAgIGlmICd2b2InIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC52b2IgPSB1ZC5wYXJtWyd2b2InXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gdWQudXJsKyI6IHZvYiBtdXN0IGJlIGRlZmluZWQgc28gdGhlIGZldGNoZXIga25vd3Mgd2hhdCB0byBnZXQuIgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCd2b2InLCBtc2cpCisKKyAgICAgICAgaWYgJ21vZHVsZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bJ21vZHVsZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5tb2R1bGUgPSAiIgorCisgICAgICAgIHVkLmJhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfY2NyYyIsIFRydWUpIG9yIHNwYXduLmZpbmRfZXhlY3V0YWJsZSgiY2xlYXJ0b29sIikgb3Igc3Bhd24uZmluZF9leGVjdXRhYmxlKCJyY2xlYXJ0b29sIikKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiU1JDUkVWIiwgZCwgVHJ1ZSkgPT0gIklOVkFMSUQiOgorICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlNldCBhIHZhbGlkIFNSQ1JFViBmb3IgdGhlIGNsZWFyY2FzZSBmZXRjaGVyIGluIHlvdXIgcmVjaXBlLCBlLmcuIFNSQ1JFViA9IFwiL21haW4vTEFURVNUXCIgb3IgYW55IG90aGVyIGxhYmVsIG9mIHlvdXIgY2hvaWNlLiIpCisKKyAgICAgICAgdWQubGFiZWwgPSBkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpCisgICAgICAgIHVkLmN1c3RvbXNwZWMgPSBkLmdldFZhcigiQ0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDIiwgVHJ1ZSkKKworICAgICAgICB1ZC5zZXJ2ZXIgICAgID0gIiVzOi8vJXMlcyIgJSAodWQucHJvdG8sIHVkLmhvc3QsIHVkLnBhdGgpCisKKyAgICAgICAgdWQuaWRlbnRpZmllciA9ICJjbGVhcmNhc2UtJXMlcy0lcyIgJSAoIHVkLnZvYi5yZXBsYWNlKCIvIiwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQubW9kdWxlLnJlcGxhY2UoIi8iLCAiLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQubGFiZWwucmVwbGFjZSgiLyIsICIuIikpCisKKyAgICAgICAgdWQudmlld25hbWUgICAgICAgICA9ICIlcy12aWV3JXMiICUgKHVkLmlkZW50aWZpZXIsIGQuZ2V0VmFyKCJEQVRFVElNRSIsIGQsIFRydWUpKQorICAgICAgICB1ZC5jc25hbWUgICAgICAgICAgID0gIiVzLWNvbmZpZy1zcGVjIiAlICh1ZC5pZGVudGlmaWVyKQorICAgICAgICB1ZC5jY2FzZWRpciAgICAgICAgID0gb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQudHlwZSkKKyAgICAgICAgdWQudmlld2RpciAgICAgICAgICA9IG9zLnBhdGguam9pbih1ZC5jY2FzZWRpciwgdWQudmlld25hbWUpCisgICAgICAgIHVkLmNvbmZpZ3NwZWNmaWxlICAgPSBvcy5wYXRoLmpvaW4odWQuY2Nhc2VkaXIsIHVkLmNzbmFtZSkKKyAgICAgICAgdWQubG9jYWxmaWxlICAgICAgICA9ICIlcy50YXIuZ3oiICUgKHVkLmlkZW50aWZpZXIpCisKKyAgICAgICAgc2VsZi5kZWJ1ZygiaG9zdCAgICAgICAgICAgID0gJXMiICUgdWQuaG9zdCkKKyAgICAgICAgc2VsZi5kZWJ1ZygicGF0aCAgICAgICAgICAgID0gJXMiICUgdWQucGF0aCkKKyAgICAgICAgc2VsZi5kZWJ1Zygic2VydmVyICAgICAgICAgID0gJXMiICUgdWQuc2VydmVyKQorICAgICAgICBzZWxmLmRlYnVnKCJwcm90byAgICAgICAgICAgPSAlcyIgJSB1ZC5wcm90bykKKyAgICAgICAgc2VsZi5kZWJ1ZygidHlwZSAgICAgICAgICAgID0gJXMiICUgdWQudHlwZSkKKyAgICAgICAgc2VsZi5kZWJ1Zygidm9iICAgICAgICAgICAgID0gJXMiICUgdWQudm9iKQorICAgICAgICBzZWxmLmRlYnVnKCJtb2R1bGUgICAgICAgICAgPSAlcyIgJSB1ZC5tb2R1bGUpCisgICAgICAgIHNlbGYuZGVidWcoImJhc2VjbWQgICAgICAgICA9ICVzIiAlIHVkLmJhc2VjbWQpCisgICAgICAgIHNlbGYuZGVidWcoImxhYmVsICAgICAgICAgICA9ICVzIiAlIHVkLmxhYmVsKQorICAgICAgICBzZWxmLmRlYnVnKCJjY2FzZWRpciAgICAgICAgPSAlcyIgJSB1ZC5jY2FzZWRpcikKKyAgICAgICAgc2VsZi5kZWJ1Zygidmlld2RpciAgICAgICAgID0gJXMiICUgdWQudmlld2RpcikKKyAgICAgICAgc2VsZi5kZWJ1Zygidmlld25hbWUgICAgICAgID0gJXMiICUgdWQudmlld25hbWUpCisgICAgICAgIHNlbGYuZGVidWcoImNvbmZpZ3NwZWNmaWxlICA9ICVzIiAlIHVkLmNvbmZpZ3NwZWNmaWxlKQorICAgICAgICBzZWxmLmRlYnVnKCJsb2NhbGZpbGUgICAgICAgPSAlcyIgJSB1ZC5sb2NhbGZpbGUpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQubG9jYWxmaWxlKQorCisgICAgZGVmIF9idWlsZF9jY2FzZV9jb21tYW5kKHNlbGYsIHVkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGEgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpczogbWt2aWV3LCBzZXRjcywgcm12aWV3CisgICAgICAgICIiIgorICAgICAgICBvcHRpb25zID0gW10KKworICAgICAgICBpZiAicmNsZWFydG9vbCIgaW4gdWQuYmFzZWNtZDoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItc2VydmVyICVzIiAlIHVkLnNlcnZlcikKKworICAgICAgICBiYXNlY21kID0gIiVzICVzIiAlICh1ZC5iYXNlY21kLCBjb21tYW5kKQorCisgICAgICAgIGlmIGNvbW1hbmQgaXMgJ21rdmlldyc6CisgICAgICAgICAgICBpZiBub3QgInJjbGVhcnRvb2wiIGluIHVkLmJhc2VjbWQ6CisgICAgICAgICAgICAgICAgIyBDbGVhcnRvb2wgbmVlZHMgYSAtc25hcHNob3QgdmlldworICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItc25hcHNob3QiKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi10YWcgJXMiICUgdWQudmlld25hbWUpCisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCh1ZC52aWV3ZGlyKQorCisgICAgICAgIGVsaWYgY29tbWFuZCBpcyAncm12aWV3JzoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItZm9yY2UiKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIiVzIiAlIHVkLnZpZXdkaXIpCisKKyAgICAgICAgZWxpZiBjb21tYW5kIGlzICdzZXRjcyc6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLW92ZXJ3cml0ZSIpCisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCh1ZC5jb25maWdzcGVjZmlsZSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiSW52YWxpZCBjY2FzZSBjb21tYW5kICVzIiAlIGNvbW1hbmQpCisKKyAgICAgICAgY2Nhc2VjbWQgPSAiJXMgJXMiICUgKGJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICBzZWxmLmRlYnVnKCJjY2FzZWNtZCA9ICVzIiAlIGNjYXNlY21kKQorICAgICAgICByZXR1cm4gY2Nhc2VjbWQKKworICAgIGRlZiBfd3JpdGVfY29uZmlnc3BlYyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgY29uZmlnIHNwZWMgZmlsZSAodWQuY29uZmlnc3BlY2ZpbGUpIGZvciBjY2FzZSB2aWV3CisgICAgICAgICIiIgorICAgICAgICBjb25maWdfc3BlYyA9ICIiCisgICAgICAgIGN1c3RvbV9jb25maWdfc3BlYyA9IGQuZ2V0VmFyKCJDQ0FTRV9DVVNUT01fQ09ORklHX1NQRUMiLCBkKQorICAgICAgICBpZiBjdXN0b21fY29uZmlnX3NwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBjdXN0b21fY29uZmlnX3NwZWMuc3BsaXQoIlxcbiIpOgorICAgICAgICAgICAgICAgIGNvbmZpZ19zcGVjICs9IGxpbmUrIlxuIgorICAgICAgICAgICAgYmIud2FybigiQSBjdXN0b20gY29uZmlnIHNwZWMgaGFzIGJlZW4gc2V0LCBTUkNSRVYgaXMgb25seSByZWxldmFudCBmb3IgdGhlIHRhcmJhbGwgbmFtZS4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29uZmlnX3NwZWMgKz0gImVsZW1lbnQgKiBDSEVDS0VET1VUXG4iCisgICAgICAgICAgICBjb25maWdfc3BlYyArPSAiZWxlbWVudCAqICVzXG4iICUgdWQubGFiZWwKKyAgICAgICAgICAgIGNvbmZpZ19zcGVjICs9ICJsb2FkICVzJXNcbiIgJSAodWQudm9iLCB1ZC5tb2R1bGUpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oIlVzaW5nIGNvbmZpZyBzcGVjOiBcbiVzIiAlIGNvbmZpZ19zcGVjKQorCisgICAgICAgIHdpdGggb3Blbih1ZC5jb25maWdzcGVjZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjb25maWdfc3BlYykKKworICAgIGRlZiBfcmVtb3ZlX3ZpZXcoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC52aWV3ZGlyKToKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNjYXNlZGlyKQorICAgICAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3JtdmlldycpOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNsZWFuaW5nIHVwIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJybXZpZXcgb3V0cHV0OiAlcyIsIG91dHB1dCkKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICgiTEFURVNUIiBpbiB1ZC5sYWJlbCkgb3IgKHVkLmN1c3RvbXNwZWMgYW5kICJMQVRFU1QiIGluIHVkLmN1c3RvbXNwZWMpOgorICAgICAgICAgICAgdWQuaWRlbnRpZmllciArPSAiLSVzIiAlIGQuZ2V0VmFyKCJEQVRFVElNRSIsZCwgVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gRmFsc2UsIHVkLmlkZW50aWZpZXIKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybCIiIgorCisgICAgICAgICMgTWFrZSBhIGZyZXNoIHZpZXcKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLmNjYXNlZGlyKQorICAgICAgICBzZWxmLl93cml0ZV9jb25maWdzcGVjKHVkLCBkKQorICAgICAgICBjbWQgPSBzZWxmLl9idWlsZF9jY2FzZV9jb21tYW5kKHVkLCAnbWt2aWV3JykKKyAgICAgICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nIHZpZXcgW1ZPQj0lcyBsYWJlbD0lcyB2aWV3PSVzXSIsIHVkLnZvYiwgdWQubGFiZWwsIHVkLnZpZXduYW1lKQorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY21kLCB1ZC51cmwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGNtZCwgZCkKKyAgICAgICAgZXhjZXB0IEZldGNoRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmICJDUkNMSTIwMDhFIiBpbiBlLm1zZzoKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCIlc1xuJXNcbiIgJSAoZS5tc2csICJDYWxsIGByY2xlYXJ0b29sIGxvZ2luYCBpbiB5b3VyIGNvbnNvbGUgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBjbGVhcmNhc2Ugc2VydmVyIGJlZm9yZSBydW5uaW5nIGJpdGJha2UuIikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAjIFNldCBjb25maWdzcGVjOiBTZXR0aW5nIHRoZSBjb25maWdzcGVjIGVmZmVjdGl2ZWx5IGZldGNoZXMgdGhlIGZpbGVzIGFzIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3NwZWMKKyAgICAgICAgb3MuY2hkaXIodWQudmlld2RpcikKKyAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3NldGNzJyk7CisgICAgICAgIGxvZ2dlci5pbmZvKCJmZXRjaGluZyBkYXRhIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdWQudXJsKQorICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgIGxvZ2dlci5pbmZvKCIlcyIsIG91dHB1dCkKKworICAgICAgICAjIENvcHkgdGhlIGNvbmZpZ3NwZWMgdG8gdGhlIHZpZXdkaXIgc28gd2UgaGF2ZSBpdCBpbiBvdXIgc291cmNlIHRhcmJhbGwgbGF0ZXIKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHVkLmNvbmZpZ3NwZWNmaWxlLCBvcy5wYXRoLmpvaW4odWQudmlld2RpciwgdWQuY3NuYW1lKSkKKworICAgICAgICAjIENsZWFuIGNsZWFyY2FzZSBtZXRhLWRhdGEgYmVmb3JlIHRhcgorCisgICAgICAgIHJ1bmZldGNoY21kKCd0YXIgLWN6ZiAiJXMiIC4nICUgKHVkLmxvY2FscGF0aCksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgICAgICAjIENsZWFuIHVwIHNvIHdlIGNhbiBjcmVhdGUgYSBuZXcgdmlldyBuZXh0IHRpbWUKKyAgICAgICAgc2VsZi5jbGVhbih1ZCwgZCk7CisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICBzZWxmLl9yZW1vdmVfdmlldyh1ZCwgZCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmNvbmZpZ3NwZWNmaWxlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY3ZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyN2Q5NmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9jdnMucHkKQEAgLTAsMCArMSwxNzEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworQ2xhc3NlcyBmb3Igb2J0YWluaW5nIHVwc3RyZWFtIHNvdXJjZXMgZm9yIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworIworCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZCwgRmV0Y2hFcnJvciwgTWlzc2luZ1BhcmFtZXRlckVycm9yLCBsb2dnZXIKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCitjbGFzcyBDdnMoRmV0Y2hNZXRob2QpOgorICAgICIiIgorICAgIENsYXNzIHRvIGZldGNoIGEgbW9kdWxlIG9yIG1vZHVsZXMgZnJvbSBjdnMgcmVwb3NpdG9yaWVzCisgICAgIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGN2cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnY3ZzJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBub3QgIm1vZHVsZSIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcigibW9kdWxlIiwgdWQudXJsKQorICAgICAgICB1ZC5tb2R1bGUgPSB1ZC5wYXJtWyJtb2R1bGUiXQorCisgICAgICAgIHVkLnRhZyA9IHVkLnBhcm0uZ2V0KCd0YWcnLCAiIikKKworICAgICAgICAjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRhdGUgaW4gY2VydGFpbiBjYXNlcworICAgICAgICBpZiAnZGF0ZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLmRhdGUgPSB1ZC5wYXJtWydkYXRlJ10KKyAgICAgICAgZWxpZiB1ZC50YWc6CisgICAgICAgICAgICB1ZC5kYXRlID0gIiIKKworICAgICAgICBub3JlY3Vyc2UgPSAnJworICAgICAgICBpZiAnbm9yZWN1cnNlJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgbm9yZWN1cnNlID0gJ19ub3JlY3Vyc2UnCisKKyAgICAgICAgZnVsbHBhdGggPSAnJworICAgICAgICBpZiAnZnVsbHBhdGgnIGluIHVkLnBhcm06CisgICAgICAgICAgICBmdWxscGF0aCA9ICdfZnVsbHBhdGgnCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gYmIuZGF0YS5leHBhbmQoJyVzXyVzXyVzXyVzJXMlcy50YXIuZ3onICUgKHVkLm1vZHVsZS5yZXBsYWNlKCcvJywgJy4nKSwgdWQuaG9zdCwgdWQudGFnLCB1ZC5kYXRlLCBub3JlY3Vyc2UsIGZ1bGxwYXRoKSwgZCkKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICh1ZC5kYXRlID09ICJub3ciKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorCisgICAgICAgIG1ldGhvZCA9IHVkLnBhcm0uZ2V0KCdtZXRob2QnLCAncHNlcnZlcicpCisgICAgICAgIGxvY2FsZGlyID0gdWQucGFybS5nZXQoJ2xvY2FsZGlyJywgdWQubW9kdWxlKQorICAgICAgICBjdnNfcG9ydCA9IHVkLnBhcm0uZ2V0KCdwb3J0JywgJycpCisKKyAgICAgICAgY3ZzX3JzaCA9IE5vbmUKKyAgICAgICAgaWYgbWV0aG9kID09ICJleHQiOgorICAgICAgICAgICAgaWYgInJzaCIgaW4gdWQucGFybToKKyAgICAgICAgICAgICAgICBjdnNfcnNoID0gdWQucGFybVsicnNoIl0KKworICAgICAgICBpZiBtZXRob2QgPT0gImRpciI6CisgICAgICAgICAgICBjdnNyb290ID0gdWQucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3Zzcm9vdCA9ICI6IiArIG1ldGhvZAorICAgICAgICAgICAgY3ZzcHJveHlob3N0ID0gZC5nZXRWYXIoJ0NWU19QUk9YWV9IT1NUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGN2c3Byb3h5aG9zdDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI7cHJveHk9IiArIGN2c3Byb3h5aG9zdAorICAgICAgICAgICAgY3ZzcHJveHlwb3J0ID0gZC5nZXRWYXIoJ0NWU19QUk9YWV9QT1JUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGN2c3Byb3h5cG9ydDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI7cHJveHlwb3J0PSIgKyBjdnNwcm94eXBvcnQKKyAgICAgICAgICAgIGN2c3Jvb3QgKz0gIjoiICsgdWQudXNlcgorICAgICAgICAgICAgaWYgdWQucHN3ZDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI6IiArIHVkLnBzd2QKKyAgICAgICAgICAgIGN2c3Jvb3QgKz0gIkAiICsgdWQuaG9zdCArICI6IiArIGN2c19wb3J0ICsgdWQucGF0aAorCisgICAgICAgIG9wdGlvbnMgPSBbXQorICAgICAgICBpZiAnbm9yZWN1cnNlJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1sIikKKyAgICAgICAgaWYgdWQuZGF0ZToKKyAgICAgICAgICAgICMgdHJlYXQgWVlZWU1NRERISE1NIHNwZWNpYWxseSBmb3IgQ1ZTCisgICAgICAgICAgICBpZiBsZW4odWQuZGF0ZSkgPT0gMTI6CisgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1EIFwiJXMgJXM6JXMgVVRDXCIiICUgKHVkLmRhdGVbMDo4XSwgdWQuZGF0ZVs4OjEwXSwgdWQuZGF0ZVsxMDoxMl0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLUQgXCIlcyBVVENcIiIgJSB1ZC5kYXRlKQorICAgICAgICBpZiB1ZC50YWc6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLXIgJXMiICUgdWQudGFnKQorCisgICAgICAgIGN2c2Jhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfY3ZzIiwgVHJ1ZSkKKyAgICAgICAgY3ZzY21kID0gY3ZzYmFzZWNtZCArICIgJy1kIiArIGN2c3Jvb3QgKyAiJyBjbyAiICsgIiAiLmpvaW4ob3B0aW9ucykgKyAiICIgKyB1ZC5tb2R1bGUKKyAgICAgICAgY3ZzdXBkYXRlY21kID0gY3ZzYmFzZWNtZCArICIgJy1kIiArIGN2c3Jvb3QgKyAiJyB1cGRhdGUgLWQgLVAgIiArICIgIi5qb2luKG9wdGlvbnMpCisKKyAgICAgICAgaWYgY3ZzX3JzaDoKKyAgICAgICAgICAgIGN2c2NtZCA9ICJDVlNfUlNIPVwiJXNcIiAlcyIgJSAoY3ZzX3JzaCwgY3ZzY21kKQorICAgICAgICAgICAgY3ZzdXBkYXRlY21kID0gIkNWU19SU0g9XCIlc1wiICVzIiAlIChjdnNfcnNoLCBjdnN1cGRhdGVjbWQpCisKKyAgICAgICAgIyBjcmVhdGUgbW9kdWxlIGRpcmVjdG9yeQorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjaGVja2luZyBmb3IgbW9kdWxlIGRpcmVjdG9yeSIpCisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignQ1ZTRElSJywgVHJ1ZSksIHBrZykKKyAgICAgICAgbW9kZGlyID0gb3MucGF0aC5qb2luKHBrZ2RpciwgbG9jYWxkaXIpCisgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4obW9kZGlyLCAnQ1ZTJyksIG9zLlJfT0spOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0ZSAiICsgdWQudXJsKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGN2c3VwZGF0ZWNtZCwgdWQudXJsKQorICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgb3MuY2hkaXIobW9kZGlyKQorICAgICAgICAgICAgY21kID0gY3ZzdXBkYXRlY21kCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcihwa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBjdnNjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY3ZzY21kLCB1ZC51cmwpCisgICAgICAgICAgICBjbWQgPSBjdnNjbWQKKworICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQsIGNsZWFudXAgPSBbbW9kZGlyXSkKKworICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKG1vZGRpciwgb3MuUl9PSyk6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJEaXJlY3RvcnkgJXMgd2FzIG5vdCByZWFkYWJsZSBkZXNwaXRlIHN1Y2Vzc2Z1bCBmZXRjaD8hIiAlIG1vZGRpciwgdWQudXJsKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICdDVlMnIgorCisgICAgICAgICMgdGFyIHRoZW0gdXAgdG8gYSBkZWZpbmVkIGZpbGVuYW1lCisgICAgICAgIGlmICdmdWxscGF0aCcgaW4gdWQucGFybToKKyAgICAgICAgICAgIG9zLmNoZGlyKHBrZ2RpcikKKyAgICAgICAgICAgIGNtZCA9ICJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIGxvY2FsZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2hkaXIobW9kZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgIGNtZCA9ICJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIG9zLnBhdGguYmFzZW5hbWUobW9kZGlyKSkKKworICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgIGRlZiBjbGVhbihzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIiBDbGVhbiBDVlMgRmlsZXMgYW5kIHRhcmJhbGxzICIiIgorCisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcigiQ1ZTRElSIiwgVHJ1ZSksIHBrZykKKworICAgICAgICBiYi51dGlscy5yZW1vdmUocGtnZGlyLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkODdhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdC5weQpAQCAtMCwwICsxLDQ1MCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGdpdCBpbXBsZW1lbnRhdGlvbgorCitnaXQgZmV0Y2hlciBzdXBwb3J0IHRoZSBTUkNfVVJJIHdpdGggZm9ybWF0IG9mOgorU1JDX1VSSSA9ICJnaXQ6Ly9zb21lLmhvc3Qvc29tZXBhdGg7T3B0aW9uQT14eHg7T3B0aW9uQj14eHg7Li4uIgorCitTdXBwb3J0ZWQgU1JDX1VSSSBvcHRpb25zIGFyZToKKworLSBicmFuY2gKKyAgIFRoZSBnaXQgYnJhbmNoIHRvIHJldHJpZXZlIGZyb20uIFRoZSBkZWZhdWx0IGlzICJtYXN0ZXIiCisKKyAgIFRoaXMgb3B0aW9uIGFsc28gc3VwcG9ydHMgbXVsdGlwbGUgYnJhbmNoIGZldGNoaW5nLCB3aXRoIGJyYW5jaGVzCisgICBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgSW4gbXVsdGlwbGUgYnJhbmNoZXMgY2FzZSwgdGhlIG5hbWUgb3B0aW9uCisgICBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIG5hbWVzIHRvIG1hdGNoIHRoZSBicmFuY2hlcywgd2hpY2ggaXMKKyAgIHVzZWQgdG8gc3BlY2lmeSB0aGUgU1JDX1JFViBmb3IgdGhlIGJyYW5jaAorICAgZS5nOgorICAgU1JDX1VSST0iZ2l0Oi8vc29tZS5ob3N0L3NvbWVwYXRoO2JyYW5jaD1icmFuY2hYLGJyYW5jaFk7bmFtZT1uYW1lWCxuYW1lWSIKKyAgIFNSQ1JFVl9uYW1lWCA9ICJ4eHh4eHh4eHh4eHh4eHh4eHh4eCIKKyAgIFNSQ1JFVl9uYW1lWSA9ICJZWVlZWVlZWVlZWVlZWVlZWVlZWSIKKworLSB0YWcKKyAgICBUaGUgZ2l0IHRhZyB0byByZXRyaWV2ZS4gVGhlIGRlZmF1bHQgaXMgIm1hc3RlciIKKworLSBwcm90b2NvbAorICAgVGhlIG1ldGhvZCB0byB1c2UgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LiBDb21tb24gb3B0aW9ucyBhcmUgImdpdCIsCisgICAiaHR0cCIsICJodHRwcyIsICJmaWxlIiwgInNzaCIgYW5kICJyc3luYyIuIFRoZSBkZWZhdWx0IGlzICJnaXQiLgorCistIHJlYmFzZWFibGUKKyAgIHJlYmFzZWFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIGdpdCByZXBvIG1heSByZWJhc2UgaW4gdGhlIGZ1dHVyZSwKKyAgIGFuZCBjdXJyZW50IHJldmlzaW9uIG1heSBkaXNhcHBlYXIgZnJvbSB1cHN0cmVhbSByZXBvLiBUaGlzIG9wdGlvbiB3aWxsCisgICByZW1pbmQgZmV0Y2hlciB0byBwcmVzZXJ2ZSBsb2NhbCBjYWNoZSBjYXJlZnVsbHkgZm9yIGZ1dHVyZSB1c2UuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiMCIsIHNldCByZWJhc2VhYmxlPTEgZm9yIHJlYmFzZWFibGUgZ2l0IHJlcG8uCisKKy0gbm9jaGVja291dAorICAgRG9uJ3QgY2hlY2tvdXQgc291cmNlIGNvZGUgd2hlbiB1bnBhY2tpbmcuIHNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIHJlY2lwZQorICAgd2hvIGhhcyBpdHMgb3duIHJvdXRpbmUgdG8gY2hlY2tvdXQgY29kZS4KKyAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IG5vY2hlY2tvdXQ9MSBpZiBuZWVkZWQuCisKKy0gYmFyZWNsb25lCisgICBDcmVhdGUgYSBiYXJlIGNsb25lIG9mIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9uJ3QgY2hlY2tvdXQgdGhlIHNvdXJjZSBjb2RlCisgICB3aGVuIHVucGFja2luZy4gU2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlIHdobyBoYXMgaXRzIG93biByb3V0aW5lIHRvCisgICBjaGVja291dCBjb2RlIGFuZCB0cmFja2luZyBicmFuY2ggcmVxdWlyZW1lbnRzLgorICAgVGhlIGRlZmF1bHQgaXMgIjAiLCBzZXQgYmFyZWNsb25lPTEgaWYgbmVlZGVkLgorCistIG5vYnJhbmNoCisgICBEb24ndCBjaGVjayB0aGUgU0hBIHZhbGlkYXRpb24gZm9yIGJyYW5jaC4gc2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlCisgICByZWZlcnJpbmcgdG8gY29tbWl0IHdoaWNoIGlzIHZhbGlkIGluIHRhZyBpbnN0ZWFkIG9mIGJyYW5jaC4KKyAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IG5vYnJhbmNoPTEgaWYgbmVlZGVkLgorCisiIiIKKworI0NvcHlyaWdodCAoQykgMjAwNSBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiCitmcm9tICAgYmIgICAgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIEdpdChGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIGdpdCByZXBvc2l0b3JpZXMiIiIKKyAgICBkZWYgaW5pdChzZWxmLCBkKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdpdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnZ2l0J10KKworICAgIGRlZiBzdXBwb3J0c19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIGluaXQgZ2l0IHNwZWNpZmljIHZhcmlhYmxlIHdpdGhpbiB1cmwgZGF0YQorICAgICAgICBzbyB0aGF0IHRoZSBnaXQgbWV0aG9kIGxpa2UgbGF0ZXN0X3JldmlzaW9uKCkgY2FuIHdvcmsKKyAgICAgICAgIiIiCisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLnByb3RvID0gdWQucGFybVsncHJvdG9jb2wnXQorICAgICAgICBlbGlmIG5vdCB1ZC5ob3N0OgorICAgICAgICAgICAgdWQucHJvdG8gPSAnZmlsZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVkLnByb3RvID0gImdpdCIKKworICAgICAgICBpZiBub3QgdWQucHJvdG8gaW4gKCdnaXQnLCAnZmlsZScsICdzc2gnLCAnaHR0cCcsICdodHRwcycsICdyc3luYycpOgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKCJJbnZhbGlkIHByb3RvY29sIHR5cGUiLCB1ZC51cmwpCisKKyAgICAgICAgdWQubm9jaGVja291dCA9IHVkLnBhcm0uZ2V0KCJub2NoZWNrb3V0IiwiMCIpID09ICIxIgorCisgICAgICAgIHVkLnJlYmFzZWFibGUgPSB1ZC5wYXJtLmdldCgicmViYXNlYWJsZSIsIjAiKSA9PSAiMSIKKworICAgICAgICB1ZC5ub2JyYW5jaCA9IHVkLnBhcm0uZ2V0KCJub2JyYW5jaCIsIjAiKSA9PSAiMSIKKworICAgICAgICAjIGJhcmVjbG9uZSBpbXBsaWVzIG5vY2hlY2tvdXQKKyAgICAgICAgdWQuYmFyZWNsb25lID0gdWQucGFybS5nZXQoImJhcmVjbG9uZSIsIjAiKSA9PSAiMSIKKyAgICAgICAgaWYgdWQuYmFyZWNsb25lOgorICAgICAgICAgICAgdWQubm9jaGVja291dCA9IDEKKyAgCisgICAgICAgIHVkLnVucmVzb2x2ZWRyZXYgPSB7fQorICAgICAgICBicmFuY2hlcyA9IHVkLnBhcm0uZ2V0KCJicmFuY2giLCAibWFzdGVyIikuc3BsaXQoJywnKQorICAgICAgICBpZiBsZW4oYnJhbmNoZXMpICE9IGxlbih1ZC5uYW1lcyk6CisgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuUGFyYW1ldGVyRXJyb3IoIlRoZSBudW1iZXIgb2YgbmFtZSBhbmQgYnJhbmNoIHBhcmFtZXRlcnMgaXMgbm90IGJhbGFuY2VkIiwgdWQudXJsKQorICAgICAgICB1ZC5icmFuY2hlcyA9IHt9CisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoZXNbdWQubmFtZXMuaW5kZXgobmFtZSldCisgICAgICAgICAgICB1ZC5icmFuY2hlc1tuYW1lXSA9IGJyYW5jaAorICAgICAgICAgICAgdWQudW5yZXNvbHZlZHJldltuYW1lXSA9IGJyYW5jaAorCisgICAgICAgIHVkLmJhc2VjbWQgPSBkYXRhLmdldFZhcigiRkVUQ0hDTURfZ2l0IiwgZCwgVHJ1ZSkgb3IgImdpdCAtYyBjb3JlLmZzeW5jb2JqZWN0ZmlsZXM9MCIKKworICAgICAgICB1ZC53cml0ZV90YXJiYWxscyA9ICgoZGF0YS5nZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIsIGQsIFRydWUpIG9yICIwIikgIT0gIjAiKSBvciB1ZC5yZWJhc2VhYmxlCisKKyAgICAgICAgdWQuc2V0dXBfcmV2aXNvbnMoZCkKKworICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgICMgRW5zdXJlIGFueXRoaW5nIHRoYXQgZG9lc24ndCBsb29rIGxpa2UgYSBzaGEyNTYgY2hlY2tzdW0vcmV2aXNpb24gaXMgdHJhbnNsYXRlZCBpbnRvIG9uZQorICAgICAgICAgICAgaWYgbm90IHVkLnJldmlzaW9uc1tuYW1lXSBvciBsZW4odWQucmV2aXNpb25zW25hbWVdKSAhPSA0MCAgb3IgKEZhbHNlIGluIFtjIGluICJhYmNkZWYwMTIzNDU2Nzg5IiBmb3IgYyBpbiB1ZC5yZXZpc2lvbnNbbmFtZV1dKToKKyAgICAgICAgICAgICAgICBpZiB1ZC5yZXZpc2lvbnNbbmFtZV06CisgICAgICAgICAgICAgICAgICAgIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0gPSB1ZC5yZXZpc2lvbnNbbmFtZV0KKyAgICAgICAgICAgICAgICB1ZC5yZXZpc2lvbnNbbmFtZV0gPSBzZWxmLmxhdGVzdF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKworICAgICAgICBnaXRzcmNuYW1lID0gJyVzJXMnICUgKHVkLmhvc3QucmVwbGFjZSgnOicsICcuJyksIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJykucmVwbGFjZSgnKicsICcuJykpCisgICAgICAgIGlmIGdpdHNyY25hbWUuc3RhcnRzd2l0aCgnLicpOgorICAgICAgICAgICAgZ2l0c3JjbmFtZSA9IGdpdHNyY25hbWVbMTpdCisKKyAgICAgICAgIyBmb3IgcmViYXNlYWJsZSBnaXQgcmVwbywgaXQgaXMgbmVjZXNzYXJ5IHRvIGtlZXAgbWlycm9yIHRhciBiYWxsCisgICAgICAgICMgcGVyIHJldmlzaW9uLCBzbyB0aGF0IGV2ZW4gdGhlIHJldmlzaW9uIGRpc2FwcGVhcnMgZnJvbSB0aGUKKyAgICAgICAgIyB1cHN0cmVhbSByZXBvIGluIHRoZSBmdXR1cmUsIHRoZSBtaXJyb3Igd2lsbCByZW1haW4gaW50YWN0IGFuZCBzdGlsbAorICAgICAgICAjIGNvbnRhaW5zIHRoZSByZXZpc2lvbgorICAgICAgICBpZiB1ZC5yZWJhc2VhYmxlOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICAgICAgZ2l0c3JjbmFtZSA9IGdpdHNyY25hbWUgKyAnXycgKyB1ZC5yZXZpc2lvbnNbbmFtZV0KKyAgICAgICAgdWQubWlycm9ydGFyYmFsbCA9ICdnaXQyXyVzLnRhci5neicgJSAoZ2l0c3JjbmFtZSkKKyAgICAgICAgdWQuZnVsbG1pcnJvciA9IG9zLnBhdGguam9pbihkLmdldFZhcigiRExfRElSIiwgVHJ1ZSksIHVkLm1pcnJvcnRhcmJhbGwpCisgICAgICAgIGdpdGRpciA9IGQuZ2V0VmFyKCJHSVRESVIiLCBUcnVlKSBvciAoZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpICsgIi9naXQyLyIpCisgICAgICAgIHVkLmNsb25lZGlyID0gb3MucGF0aC5qb2luKGdpdGRpciwgZ2l0c3JjbmFtZSkKKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSB1ZC5jbG9uZWRpcgorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC5jbG9uZWRpcgorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLmNsb25lZGlyKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIHVkLndyaXRlX3RhcmJhbGxzIGFuZCBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB0cnlfcHJlbWlycm9yKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB1cGRhdGluZyBhbiBleGlzdGluZyBjaGVja291dCB3aXRoIG9ubHkgcHJlbWlycm9ycworICAgICAgICAjIGlzIG5vdCBwb3NzaWJsZQorICAgICAgICBpZiBkLmdldFZhcigiQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSIsIFRydWUpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmwiIiIKKworICAgICAgICAjIElmIHRoZSBjaGVja291dCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgbWlycm9yIHRhcmJhbGwgZG9lcywgZXh0cmFjdCBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQorCisgICAgICAgICMgSWYgdGhlIHJlcG8gc3RpbGwgZG9lc24ndCBleGlzdCwgZmFsbGJhY2sgdG8gY2xvbmluZyBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpOgorICAgICAgICAgICAgIyBXZSBkbyB0aGlzIHNpbmNlIGdpdCB3aWxsIHVzZSBhICItbCIgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZm9yIGxvY2FsIHVybHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgICAgIGlmIHJlcG91cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgIHJlcG91cmwgPSByZXBvdXJsWzc6XQorICAgICAgICAgICAgY2xvbmVfY21kID0gIiVzIGNsb25lIC0tYmFyZSAtLW1pcnJvciAlcyAlcyIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCwgdWQuY2xvbmVkaXIpCisgICAgICAgICAgICBpZiB1ZC5wcm90by5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY2xvbmVfY21kKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoY2xvbmVfY21kLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAjIFVwZGF0ZSB0aGUgY2hlY2tvdXQgaWYgbmVlZGVkCisgICAgICAgIG5lZWR1cGRhdGUgPSBGYWxzZQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgICAgIG5lZWR1cGRhdGUgPSBUcnVlCisgICAgICAgIGlmIG5lZWR1cGRhdGU6CisgICAgICAgICAgICB0cnk6IAorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZW1vdGUgcm0gb3JpZ2luIiAlIHVkLmJhc2VjbWQsIGQpIAorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTm8gT3JpZ2luIikKKworICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlbW90ZSBhZGQgLS1taXJyb3I9ZmV0Y2ggb3JpZ2luICVzIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsKSwgZCkKKyAgICAgICAgICAgIGZldGNoX2NtZCA9ICIlcyBmZXRjaCAtZiAtLXBydW5lICVzIHJlZnMvKjpyZWZzLyoiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpCisgICAgICAgICAgICBpZiB1ZC5wcm90by5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgZmV0Y2hfY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChmZXRjaF9jbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcHJ1bmUtcGFja2VkIiAlIHVkLmJhc2VjbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcGFjay1yZWR1bmRhbnQgLS1hbGwgfCB4YXJncyAtciBybSIgJSB1ZC5iYXNlY21kLCBkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5GZXRjaEVycm9yKCJVbmFibGUgdG8gZmluZCByZXZpc2lvbiAlcyBpbiBicmFuY2ggJXMgZXZlbiBmcm9tIHVwc3RyZWFtIiAlICh1ZC5yZXZpc2lvbnNbbmFtZV0sIHVkLmJyYW5jaGVzW25hbWVdKSkKKworICAgIGRlZiBidWlsZF9taXJyb3JfZGF0YShzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgR2VuZXJhdGUgYSBtaXJyb3IgdGFyYmFsbCBpZiBuZWVkZWQKKyAgICAgICAgaWYgdWQud3JpdGVfdGFyYmFsbHMgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgICAgICMgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgc3ltbGluayBwb2ludHMgdG8gcmVhZC1vbmx5IGZpbGVzeXN0ZW0gd2l0aCBQUkVNSVJST1IKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxtaXJyb3IpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQorCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDcmVhdGluZyB0YXJiYWxsIG9mIGdpdCByZXBvc2l0b3J5IikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQuZnVsbG1pcnJvciwgb3MucGF0aC5qb2luKCIuIikgKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpOgorICAgICAgICAiIiIgdW5wYWNrIHRoZSBkb3dubG9hZGVkIHNyYyB0byBkZXN0ZGlyIiIiCisKKyAgICAgICAgc3ViZGlyID0gdWQucGFybS5nZXQoInN1YnBhdGgiLCAiIikKKyAgICAgICAgaWYgc3ViZGlyICE9ICIiOgorICAgICAgICAgICAgcmVhZHBhdGhzcGVjID0gIjolcyIgJSAoc3ViZGlyKQorICAgICAgICAgICAgZGVmX2Rlc3RzdWZmaXggPSAiJXMvIiAlIG9zLnBhdGguYmFzZW5hbWUoc3ViZGlyLnJzdHJpcCgnLycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZHBhdGhzcGVjID0gIiIKKyAgICAgICAgICAgIGRlZl9kZXN0c3VmZml4ID0gImdpdC8iCisKKyAgICAgICAgZGVzdHN1ZmZpeCA9IHVkLnBhcm0uZ2V0KCJkZXN0c3VmZml4IiwgZGVmX2Rlc3RzdWZmaXgpCisgICAgICAgIGRlc3RkaXIgPSB1ZC5kZXN0ZGlyID0gb3MucGF0aC5qb2luKGRlc3RkaXIsIGRlc3RzdWZmaXgpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3RkaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoZGVzdGRpcikKKworICAgICAgICBjbG9uZWZsYWdzID0gIi1zIC1uIgorICAgICAgICBpZiB1ZC5iYXJlY2xvbmU6CisgICAgICAgICAgICBjbG9uZWZsYWdzICs9ICIgLS1taXJyb3IiCisKKyAgICAgICAgIyBWZXJzaW9ucyBvZiBnaXQgcHJpb3IgdG8gMS43LjkuMiBoYXZlIGlzc3VlcyB3aGVyZSBmb28uZ2l0IGFuZCBmb28gZ2V0IGNvbmZ1c2VkCisgICAgICAgICMgYW5kIHlvdSBlbmQgdXAgd2l0aCBzb21lIGhvcnJpYmxlIHVuaW9uIG9mIHRoZSB0d28gd2hlbiB5b3UgYXR0ZW1wdCB0byBjbG9uZSBpdAorICAgICAgICAjIFRoZSBsZWFzdCBpbnZhc2l2ZSB3b3JrYXJvdW5kIHNlZW1zIHRvIGJlIGEgc3ltbGluayB0byB0aGUgcmVhbCBkaXJlY3RvcnkgdG8KKyAgICAgICAgIyBmb29sIGdpdCBpbnRvIGlnbm9yaW5nIGFueSAuZ2l0IHZlcnNpb24gdGhhdCBtYXkgYWxzbyBiZSBwcmVzZW50LgorICAgICAgICAjCisgICAgICAgICMgVGhlIGlzc3VlIGlzIGZpeGVkIGluIG1vcmUgcmVjZW50IHZlcnNpb25zIG9mIGdpdCBzbyB3ZSBjYW4gZHJvcCB0aGlzIGhhY2sgaW4gZnV0dXJlCisgICAgICAgICMgd2hlbiB0aGF0IHZlcnNpb24gYmVjb21lcyBjb21tb24gZW5vdWdoLgorICAgICAgICBjbG9uZWRpciA9IHVkLmNsb25lZGlyCisgICAgICAgIGlmIG5vdCB1ZC5wYXRoLmVuZHN3aXRoKCIuZ2l0Iik6CisgICAgICAgICAgICBpbmRpcmVjdGlvbmRpciA9IGRlc3RkaXJbOi0xXSArICIuaW5kaXJlY3Rpb25zeW1saW5rIgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW5kaXJlY3Rpb25kaXIpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShpbmRpcmVjdGlvbmRpcikKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoaW5kaXJlY3Rpb25kaXIpKQorICAgICAgICAgICAgb3Muc3ltbGluayh1ZC5jbG9uZWRpciwgaW5kaXJlY3Rpb25kaXIpCisgICAgICAgICAgICBjbG9uZWRpciA9IGluZGlyZWN0aW9uZGlyCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGNsb25lICVzICVzLyAlcyIgJSAodWQuYmFzZWNtZCwgY2xvbmVmbGFncywgY2xvbmVkaXIsIGRlc3RkaXIpLCBkKQorICAgICAgICBvcy5jaGRpcihkZXN0ZGlyKQorICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQorICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVtb3RlIHNldC11cmwgb3JpZ2luICVzIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsKSwgZCkKKyAgICAgICAgaWYgbm90IHVkLm5vY2hlY2tvdXQ6CisgICAgICAgICAgICBpZiBzdWJkaXIgIT0gIiI6CisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlYWQtdHJlZSAlcyVzIiAlICh1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbdWQubmFtZXNbMF1dLCByZWFkcGF0aHNwZWMpLCBkKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dC1pbmRleCAtcSAtZiAtYSIgJSB1ZC5iYXNlY21kLCBkKQorICAgICAgICAgICAgZWxpZiBub3QgdWQubm9icmFuY2g6CisgICAgICAgICAgICAgICAgYnJhbmNobmFtZSA9ICB1ZC5icmFuY2hlc1t1ZC5uYW1lc1swXV0KKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2hlY2tvdXQgLUIgJXMgJXMiICUgKHVkLmJhc2VjbWQsIGJyYW5jaG5hbWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZC5yZXZpc2lvbnNbdWQubmFtZXNbMF1dKSwgZCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYnJhbmNoIC0tc2V0LXVwc3RyZWFtICVzIG9yaWdpbi8lcyIgJSAodWQuYmFzZWNtZCwgYnJhbmNobmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaG5hbWUpLCBkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2hlY2tvdXQgJXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0pLCBkKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgY2xlYW4gdGhlIGdpdCBkaXJlY3RvcnkgIiIiCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmxvY2FscGF0aCwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5mdWxsbWlycm9yICsgIi5kb25lIikKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2NvbnRhaW5zX3JlZihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGNtZCA9ICIiCisgICAgICAgIGlmIHVkLm5vYnJhbmNoOgorICAgICAgICAgICAgY21kID0gIiVzIGxvZyAtLXByZXR0eT1vbmVsaW5lIC1uIDEgJXMgLS0gMj4gL2Rldi9udWxsIHwgd2MgLWwiICUgKAorICAgICAgICAgICAgICAgIHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1tuYW1lXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICAiJXMgYnJhbmNoIC0tY29udGFpbnMgJXMgLS1saXN0ICVzIDI+IC9kZXYvbnVsbCB8IHdjIC1sIiAlICgKKyAgICAgICAgICAgICAgICB1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbbmFtZV0sIHVkLmJyYW5jaGVzW25hbWVdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQsIHF1aWV0PVRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBsZW4ob3V0cHV0LnNwbGl0KCkpID4gMToKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5GZXRjaEVycm9yKCJUaGUgY29tbWFuZCAnJXMnIGdhdmUgb3V0cHV0IHdpdGggbW9yZSB0aGVuIDEgbGluZSB1bmV4cGVjdGVkbHksIG91dHB1dDogJyVzJyIgJSAoY21kLCBvdXRwdXQpKQorICAgICAgICByZXR1cm4gb3V0cHV0LnNwbGl0KClbMF0gIT0gIjAiCisKKyAgICBkZWYgX2dldF9yZXBvX3VybChzZWxmLCB1ZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHJlcG9zaXRvcnkgVVJMCisgICAgICAgICIiIgorICAgICAgICBpZiB1ZC51c2VyOgorICAgICAgICAgICAgdXNlcm5hbWUgPSB1ZC51c2VyICsgJ0AnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VybmFtZSA9ICIiCisgICAgICAgIHJldHVybiAiJXM6Ly8lcyVzJXMiICUgKHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCkKKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiZ2l0OiIgKyB1ZC5ob3N0ICsgdWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKSArIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0KKworICAgIGRlZiBfbHNyZW1vdGUoc2VsZiwgdWQsIGQsIHNlYXJjaCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gZ2l0IGxzLXJlbW90ZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2VhcmNoIHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgcmVwb3VybCA9IHNlbGYuX2dldF9yZXBvX3VybCh1ZCkKKyAgICAgICAgY21kID0gIiVzIGxzLXJlbW90ZSAlcyAlcyIgJSBcCisgICAgICAgICAgICAgICh1ZC5iYXNlY21kLCByZXBvdXJsLCBzZWFyY2gpCisgICAgICAgIGlmIHVkLnByb3RvLmxvd2VyKCkgIT0gJ2ZpbGUnOgorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCkKKyAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoY21kLCBkLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3V0cHV0OgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIlRoZSBjb21tYW5kICVzIGdhdmUgZW1wdHkgb3V0cHV0IHVuZXhwZWN0ZWRseSIgJSBjbWQsIHVkLnVybCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIF9sYXRlc3RfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tcHV0ZSB0aGUgSEVBRCByZXZpc2lvbiBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fbHNyZW1vdGUodWQsIGQsICIiKQorICAgICAgICAjIFRhZ3Mgb2YgdGhlIGZvcm0gXnt9IG1heSBub3Qgd29yaywgbmVlZCB0byBmYWxsYmFjayB0byBvdGhlciBmb3JtCisgICAgICAgIGlmIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV1bOjVdID09ICJyZWZzLyI6CisgICAgICAgICAgICBoZWFkID0gdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICAgICAgdGFnID0gdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGVhZCA9ICJyZWZzL2hlYWRzLyVzIiAlIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0KKyAgICAgICAgICAgIHRhZyA9ICJyZWZzL3RhZ3MvJXMiICUgdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICBmb3IgcyBpbiBbaGVhZCwgdGFnICsgIl57fSIsIHRhZ106CisgICAgICAgICAgICBmb3IgbCBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgaWYgcyBpbiBsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbC5zcGxpdCgpWzBdCisgICAgICAgIHJhaXNlIGJiLmZldGNoMi5GZXRjaEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSAnJXMnIGluIHVwc3RyZWFtIGdpdCByZXBvc2l0b3J5IGluIGdpdCBscy1yZW1vdGUgb3V0cHV0IGZvciAlcyIgJSBcCisgICAgICAgICAgICAodWQudW5yZXNvbHZlZHJldltuYW1lXSwgdWQuaG9zdCt1ZC5wYXRoKSkKKworICAgIGRlZiBsYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRoZSBsYXRlc3QgcmVsZWFzZSBuYW1lIGxpa2UgIngueS54IiBpbiAieC55LngrZ2l0SEFTSCIKKyAgICAgICAgYnkgc2VhcmNoaW5nIHRocm91Z2ggdGhlIHRhZ3Mgb3V0cHV0IG9mIGxzLXJlbW90ZSwgY29tcGFyaW5nCisgICAgICAgIHZlcnNpb25zIGFuZCByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgbWF0Y2guCisgICAgICAgICIiIgorICAgICAgICBwdXB2ZXIgPSAoJycsICcnKQorCisgICAgICAgIHRhZ3JlZ2V4ID0gcmUuY29tcGlsZShkLmdldFZhcignR0lUVEFHUkVHRVgnLCBUcnVlKSBvciAiKD9QPHB2ZXI+KFswLTldW1wufF9dPykrKSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX2xzcmVtb3RlKHVkLCBkLCAicmVmcy90YWdzLyoiKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3Igb3IgYmIuZmV0Y2gyLk5ldHdvcmtBY2Nlc3M6CisgICAgICAgICAgICByZXR1cm4gcHVwdmVyCisKKyAgICAgICAgdmVyc3RyaW5nID0gIiIKKyAgICAgICAgcmV2aXNpb24gPSAiIgorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0YWdfaGVhZCA9IGxpbmUuc3BsaXQoIi8iKVstMV0KKyAgICAgICAgICAgICMgSWdub3JlIG5vbi1yZWxlYXNlZCBicmFuY2hlcworICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgiKGFscGhhfGJldGF8cmN8ZmluYWwpKyIsIHRhZ19oZWFkKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIHNlYXJjaCBmb3IgdmVyc2lvbiBpbiB0aGUgbGluZQorICAgICAgICAgICAgdGFnID0gdGFncmVnZXguc2VhcmNoKHRhZ19oZWFkKQorICAgICAgICAgICAgaWYgdGFnID09IE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdGFnID0gdGFnLmdyb3VwKCdwdmVyJykKKyAgICAgICAgICAgIHRhZyA9IHRhZy5yZXBsYWNlKCJfIiwgIi4iKQorCisgICAgICAgICAgICBpZiB2ZXJzdHJpbmcgYW5kIGJiLnV0aWxzLnZlcmNtcCgoIjAiLCB0YWcsICIiKSwgKCIwIiwgdmVyc3RyaW5nLCAiIikpIDwgMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB2ZXJzdHJpbmcgPSB0YWcKKyAgICAgICAgICAgIHJldmlzaW9uID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICBwdXB2ZXIgPSAodmVyc3RyaW5nLCByZXZpc2lvbikKKworICAgICAgICByZXR1cm4gcHVwdmVyCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHVkLnJldmlzaW9uc1tuYW1lXQorCisgICAgZGVmIGdpdHBrZ3ZfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgc29ydGFibGUgcmV2aXNpb24gbnVtYmVyIGJ5IGNvdW50aW5nIGNvbW1pdHMgaW4gdGhlIGhpc3RvcnkKKyAgICAgICAgQmFzZWQgb24gZ2l0cGtndi5iYmxhc3MgaW4gbWV0YS1vcGVuZW1iZWRkZWQKKyAgICAgICAgIiIiCisgICAgICAgIHJldiA9IHNlbGYuX2J1aWxkX3JldmlzaW9uKHVkLCBkLCBuYW1lKQorICAgICAgICBsb2NhbHBhdGggPSB1ZC5sb2NhbHBhdGgKKyAgICAgICAgcmV2X2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9jYWxwYXRoLCAib2UtZ2l0cGtndl8iICsgcmV2KQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9jYWxwYXRoKToKKyAgICAgICAgICAgIGNvbW1pdHMgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmV2X2ZpbGUpIG9yIG5vdCBvcy5wYXRoLmdldHNpemUocmV2X2ZpbGUpOgorICAgICAgICAgICAgICAgIGZyb20gcGlwZXMgaW1wb3J0IHF1b3RlCisgICAgICAgICAgICAgICAgY29tbWl0cyA9IGJiLmZldGNoMi5ydW5mZXRjaGNtZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJnaXQgcmV2LWxpc3QgJXMgLS0gfCB3YyAtbCIgJSAocXVvdGUocmV2KSksCisgICAgICAgICAgICAgICAgICAgICAgICBkLCBxdWlldD1UcnVlKS5zdHJpcCgpLmxzdHJpcCgnMCcpCisgICAgICAgICAgICAgICAgaWYgY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgb3BlbihyZXZfZmlsZSwgInciKS53cml0ZSgiJWRcbiIgJSBpbnQoY29tbWl0cykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbW1pdHMgPSBvcGVuKHJldl9maWxlLCAiciIpLnJlYWRsaW5lKDEyOCkuc3RyaXAoKQorICAgICAgICBpZiBjb21taXRzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiJXMrJXMiICUgKGNvbW1pdHMsIHJldls6N10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgc3RyKHJldikKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCBmZXRjaCwgdWQsIGQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9sc3JlbW90ZSh1ZCwgZCwgIiIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRhbm5leC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjM3ODk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkKQEAgLTAsMCArMSw3NiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGdpdCBhbm5leCBpbXBsZW1lbnRhdGlvbgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDE0IE90YXZpbyBTYWx2YWRvcgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgorZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyLmdpdCBpbXBvcnQgR2l0Citmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIEdpdEFOTkVYKEdpdCk6CisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdpdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnZ2l0YW5uZXgnXQorCisgICAgZGVmIHVzZXNfYW5uZXgoc2VsZiwgdWQsIGQpOgorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmV2LWxpc3QgZ2l0LWFubmV4IiAlICh1ZC5iYXNlY21kKSwgZCwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoLkZldGNoRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHVwZGF0ZV9hbm5leChzZWxmLCB1ZCwgZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhbm5leCBnZXQgLS1hbGwiICUgKHVkLmJhc2VjbWQpLCBkLCBxdWlldD1UcnVlKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBydW5mZXRjaGNtZCgiY2htb2QgdSt3IC1SICVzL2FubmV4IiAlICh1ZC5jbG9uZWRpciksIGQsIHF1aWV0PVRydWUpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgIEdpdC5kb3dubG9hZChzZWxmLCB1ZCwgZCkKKworICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgYW5uZXggPSBzZWxmLnVzZXNfYW5uZXgodWQsIGQpCisgICAgICAgIGlmIGFubmV4OgorICAgICAgICAgICAgc2VsZi51cGRhdGVfYW5uZXgodWQsIGQpCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKKyAgICAgICAgR2l0LnVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCkKKworICAgICAgICBvcy5jaGRpcih1ZC5kZXN0ZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYW5uZXggc3luYyIgJSAodWQuYmFzZWNtZCksIGQpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5GZXRjaEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGFubmV4ID0gc2VsZi51c2VzX2FubmV4KHVkLCBkKQorICAgICAgICBpZiBhbm5leDoKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhbm5leCBnZXQiICUgKHVkLmJhc2VjbWQpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoImNobW9kIHUrdyAtUiAlcy8uZ2l0L2FubmV4IiAlICh1ZC5kZXN0ZGlyKSwgZCwgcXVpZXQ9VHJ1ZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MmU0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgZ2l0IHN1Ym1vZHVsZXMgaW1wbGVtZW50YXRpb24KKworSW5oZXJpdHMgZnJvbSBhbmQgZXh0ZW5kcyB0aGUgR2l0IGZldGNoZXIgdG8gcmV0cmlldmUgc3VibW9kdWxlcyBvZiBhIGdpdCByZXBvc2l0b3J5CithZnRlciBjbG9uaW5nLgorCitTUkNfVVJJID0gImdpdHNtOi8vPHNlZSBHaXQgZmV0Y2hlciBmb3Igc3ludGF4PiIKKworU2VlIHRoZSBHaXQgZmV0Y2hlciwgZ2l0Oi8vLCBmb3IgdXNhZ2UgZG9jdW1lbnRhdGlvbi4KKworTk9URTogU3dpdGNoaW5nIGEgU1JDX1VSSSBmcm9tICJnaXQ6Ly8iIHRvICJnaXRzbTovLyIgcmVxdWlyZXMgYSBjbGVhbiBvZiB5b3VyIHJlY2lwZS4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDEzIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgorZnJvbSAgIGJiICAgIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyLmdpdCBpbXBvcnQgR2l0Citmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIEdpdFNNKEdpdCk6CisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdpdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnZ2l0c20nXQorCisgICAgZGVmIHVzZXNfc3VibW9kdWxlcyhzZWxmLCB1ZCwgZCk6CisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBzaG93ICVzOi5naXRtb2R1bGVzIiAlICh1ZC5iYXNlY21kLCB1ZC5yZXZpc2lvbnNbbmFtZV0pLCBkLCBxdWlldD1UcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9zZXRfcmVsYXRpdmVfcGF0aHMoc2VsZiwgcmVwb3BhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgRml4IHN1Ym1vZHVsZSBwYXRocyB0byBiZSByZWxhdGl2ZSBpbnN0ZWFkIG9mIGFic29sdXRlLAorICAgICAgICBzbyB0aGF0IHdoZW4gd2UgbW92ZSB0aGUgcmVwbyBpdCBkb2Vzbid0IGJyZWFrCisgICAgICAgIChJbiBHaXQgMS43LjEwKyB0aGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSkKKyAgICAgICAgIiIiCisgICAgICAgIHN1Ym1vZHVsZXMgPSBbXQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHJlcG9wYXRoLCAnLmdpdG1vZHVsZXMnKSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1tzdWJtb2R1bGUnKToKKyAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlcy5hcHBlbmQobGluZS5zcGxpdCgnIicpWzFdKQorCisgICAgICAgIGZvciBtb2R1bGUgaW4gc3VibW9kdWxlczoKKyAgICAgICAgICAgIHJlcG9fY29uZiA9IG9zLnBhdGguam9pbihyZXBvcGF0aCwgbW9kdWxlLCAnLmdpdCcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXBvX2NvbmYpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgbmV3cGF0aCA9ICcnCisgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdnaXRkaXI6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRwYXRoID0gbGluZS5zcGxpdCgnOiAnKVstMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9sZHBhdGguc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BhdGggPSAnLi4vJyAqIChtb2R1bGUuY291bnQoJy8nKSArIDEpICsgJy5naXQvbW9kdWxlcy8nICsgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSAnZ2l0ZGlyOiAlc1xuJyAlIG5ld3BhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIG5ld3BhdGg6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKworICAgICAgICAgICAgcmVwb19jb25mMiA9IG9zLnBhdGguam9pbihyZXBvcGF0aCwgJy5naXQnLCAnbW9kdWxlcycsIG1vZHVsZSwgJ2NvbmZpZycpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXBvX2NvbmYyKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocmVwb19jb25mMiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBuZXdwYXRoID0gJycKKyAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLmxzdHJpcCgpLnN0YXJ0c3dpdGgoJ3dvcmt0cmVlID0gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRwYXRoID0gbGluZS5zcGxpdCgnID0gJylbLTFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvbGRwYXRoLnN0YXJ0c3dpdGgoJy8nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwYXRoID0gJy4uLycgKiAobW9kdWxlLmNvdW50KCcvJykgKyAzKSArIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gJ1x0d29ya3RyZWUgPSAlc1xuJyAlIG5ld3BhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIG5ld3BhdGg6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYyLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisKKyAgICBkZWYgdXBkYXRlX3N1Ym1vZHVsZXMoc2VsZiwgdWQsIGQpOgorICAgICAgICAjIFdlIGhhdmUgdG8gY29udmVydCBiYXJlIC0+IGZ1bGwgcmVwbywgZG8gdGhlIHN1Ym1vZHVsZSBiaXQsIHRoZW4gY29udmVydCBiYWNrCisgICAgICAgIHRtcGNsb25lZGlyID0gdWQuY2xvbmVkaXIgKyAiLnRtcCIKKyAgICAgICAgZ2l0ZGlyID0gdG1wY2xvbmVkaXIgKyBvcy5zZXAgKyAiLmdpdCIKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRtcGNsb25lZGlyLCBUcnVlKQorICAgICAgICBvcy5ta2Rpcih0bXBjbG9uZWRpcikKKyAgICAgICAgb3MucmVuYW1lKHVkLmNsb25lZGlyLCBnaXRkaXIpCisgICAgICAgIHJ1bmZldGNoY21kKCJzZWQgIiArIGdpdGRpciArICIvY29uZmlnIC1pIC1lICdzL2JhcmUuKj0uKnRydWUvYmFyZSA9IGZhbHNlLyciLCBkKQorICAgICAgICBvcy5jaGRpcih0bXBjbG9uZWRpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgcmVzZXQgLS1oYXJkIiwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgY2hlY2tvdXQgIiArIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIGQpCisgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSBpbml0IiwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgc3VibW9kdWxlIHVwZGF0ZSIsIGQpCisgICAgICAgIHNlbGYuX3NldF9yZWxhdGl2ZV9wYXRocyh0bXBjbG9uZWRpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQoInNlZCAiICsgZ2l0ZGlyICsgIi9jb25maWcgLWkgLWUgJ3MvYmFyZS4qPS4qZmFsc2UvYmFyZSA9IHRydWUvJyIsIGQpCisgICAgICAgIG9zLnJlbmFtZShnaXRkaXIsIHVkLmNsb25lZGlyLCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRtcGNsb25lZGlyLCBUcnVlKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgR2l0LmRvd25sb2FkKHNlbGYsIHVkLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBzdWJtb2R1bGVzID0gc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQpCisgICAgICAgIGlmIHN1Ym1vZHVsZXM6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdWJtb2R1bGVzKHVkLCBkKQorCisgICAgZGVmIHVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCk6CisgICAgICAgIEdpdC51bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpCisgICAgICAgIAorICAgICAgICBvcy5jaGRpcih1ZC5kZXN0ZGlyKQorICAgICAgICBzdWJtb2R1bGVzID0gc2VsZi51c2VzX3N1Ym1vZHVsZXModWQsIGQpCisgICAgICAgIGlmIHN1Ym1vZHVsZXM6CisgICAgICAgICAgICBydW5mZXRjaGNtZCgiY3AgLXIgIiArIHVkLmNsb25lZGlyICsgIi9tb2R1bGVzICIgKyB1ZC5kZXN0ZGlyICsgIi8uZ2l0LyIsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBzdWJtb2R1bGUgaW5pdCIsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBzdWJtb2R1bGUgdXBkYXRlIiwgZCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmI0ZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkKQEAgLTAsMCArMSwyNzcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbiBmb3IgbWVyY3VyaWFsIERSQ1MgKGhnKS4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDA0ICAgICAgICBNYXJjaW4gSnVzemtpZXdpY3oKKyMgQ29weXJpZ2h0IChDKSAyMDA3ICAgICAgICBSb2JlcnQgU2NodXN0ZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tIGJiIGltcG9ydCBkYXRhCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgTWlzc2luZ1BhcmFtZXRlckVycm9yCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgSGcoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIGZyb20gbWVyY3VyaWFsIHJlcG9zaXRvcmllcyIiIgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBtZXJjdXJpYWwuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2hnJ10KKworICAgIGRlZiBzdXBwb3J0c19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIERvbid0IHJlcXVpcmUgY2hlY2tzdW1zIGZvciBsb2NhbCBhcmNoaXZlcyBjcmVhdGVkIGZyb20KKyAgICAgICAgcmVwb3NpdG9yeSBjaGVja291dHMuCisgICAgICAgICIiIiAKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIGluaXQgaGcgc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgIm1vZHVsZSIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcignbW9kdWxlJywgdWQudXJsKQorCisgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bIm1vZHVsZSJdCisKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtWydwcm90b2NvbCddCisgICAgICAgIGVsaWYgbm90IHVkLmhvc3Q6CisgICAgICAgICAgICB1ZC5wcm90byA9ICdmaWxlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQucHJvdG8gPSAiaGciCisKKyAgICAgICAgdWQuc2V0dXBfcmV2aXNvbnMoZCkKKworICAgICAgICBpZiAncmV2JyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucmV2aXNpb24gPSB1ZC5wYXJtWydyZXYnXQorICAgICAgICBlbGlmIG5vdCB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gc2VsZi5sYXRlc3RfcmV2aXNpb24odWQsIGQpCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aHMgdG8gbWVyY3VyaWFsIGNoZWNrb3V0cworICAgICAgICBoZ3NyY25hbWUgPSAnJXNfJXNfJXMnICUgKHVkLm1vZHVsZS5yZXBsYWNlKCcvJywgJy4nKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLmhvc3QsIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJykpCisgICAgICAgIHVkLm1pcnJvcnRhcmJhbGwgPSAnaGdfJXMudGFyLmd6JyAlIGhnc3JjbmFtZQorICAgICAgICB1ZC5mdWxsbWlycm9yID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSwgdWQubWlycm9ydGFyYmFsbCkKKworICAgICAgICBoZ2RpciA9IGQuZ2V0VmFyKCJIR0RJUiIsIFRydWUpIG9yIChkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkgKyAiL2hnLyIpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihoZ2RpciwgaGdzcmNuYW1lKQorICAgICAgICB1ZC5tb2RkaXIgPSBvcy5wYXRoLmpvaW4odWQucGtnZGlyLCB1ZC5tb2R1bGUpCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IHVkLm1vZGRpcgorICAgICAgICB1ZC5iYXNlY21kID0gZGF0YS5nZXRWYXIoIkZFVENIQ01EX2hnIiwgZCwgVHJ1ZSkgb3IgIi91c3IvYmluL2VudiBoZyIKKworICAgICAgICB1ZC53cml0ZV90YXJiYWxscyA9IGQuZ2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCBUcnVlKQorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV2VGFnID0gdWQucGFybS5nZXQoJ3JldicsICd0aXAnKQorICAgICAgICBpZiByZXZUYWcgPT0gInRpcCI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHRyeV9wcmVtaXJyb3Ioc2VsZiwgdWQsIGQpOgorICAgICAgICAjIElmIHdlIGRvbid0IGRvIHRoaXMsIHVwZGF0aW5nIGFuIGV4aXN0aW5nIGNoZWNrb3V0IHdpdGggb25seSBwcmVtaXJyb3JzCisgICAgICAgICMgaXMgbm90IHBvc3NpYmxlCisgICAgICAgIGlmIGQuZ2V0VmFyKCJCQl9GRVRDSF9QUkVNSVJST1JPTkxZIiwgVHJ1ZSkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5tb2RkaXIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2J1aWxkaGdjb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGFuIGhnIGNvbW1hbmRsaW5lIGJhc2VkIG9uIHVkCisgICAgICAgIGNvbW1hbmQgaXMgImZldGNoIiwgInVwZGF0ZSIsICJpbmZvIgorICAgICAgICAiIiIKKworICAgICAgICBwcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdodHRwJykKKworICAgICAgICBob3N0ID0gdWQuaG9zdAorICAgICAgICBpZiBwcm90byA9PSAiZmlsZSI6CisgICAgICAgICAgICBob3N0ID0gIi8iCisgICAgICAgICAgICB1ZC5ob3N0ID0gImxvY2FsaG9zdCIKKworICAgICAgICBpZiBub3QgdWQudXNlcjoKKyAgICAgICAgICAgIGhncm9vdCA9IGhvc3QgKyB1ZC5wYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB1ZC5wc3dkOgorICAgICAgICAgICAgICAgIGhncm9vdCA9IHVkLnVzZXIgKyAiOiIgKyB1ZC5wc3dkICsgIkAiICsgaG9zdCArIHVkLnBhdGgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGdyb290ID0gdWQudXNlciArICJAIiArIGhvc3QgKyB1ZC5wYXRoCisKKyAgICAgICAgaWYgY29tbWFuZCA9PSAiaW5mbyI6CisgICAgICAgICAgICByZXR1cm4gIiVzIGlkZW50aWZ5IC1pICVzOi8vJXMvJXMiICUgKHVkLmJhc2VjbWQsIHByb3RvLCBoZ3Jvb3QsIHVkLm1vZHVsZSkKKworICAgICAgICBvcHRpb25zID0gW107CisKKyAgICAgICAgIyBEb24ndCBzcGVjaWZ5IHJldmlzaW9uIGZvciB0aGUgZmV0Y2g7IGNsb25lIHRoZSBlbnRpcmUgcmVwby4KKyAgICAgICAgIyBUaGlzIGF2b2lkcyBhbiBpc3N1ZSBpZiB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIGlzIGEgdGFnLCBiZWNhdXNlCisgICAgICAgICMgdGhlIHRhZyBhY3R1YWxseSBleGlzdHMgaW4gdGhlIHNwZWNpZmllZCByZXZpc2lvbiArIDEsIHNvIGl0IHdvbid0CisgICAgICAgICMgYmUgYXZhaWxhYmxlIHdoZW4gdXNlZCBpbiBhbnkgc3VjY2Vzc2l2ZSBjb21tYW5kcy4KKyAgICAgICAgaWYgdWQucmV2aXNpb24gYW5kIGNvbW1hbmQgIT0gImZldGNoIjoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKworICAgICAgICBpZiBjb21tYW5kID09ICJmZXRjaCI6CisgICAgICAgICAgICBpZiB1ZC51c2VyIGFuZCB1ZC5wc3dkOgorICAgICAgICAgICAgICAgIGNtZCA9ICIlcyAtLWNvbmZpZyBhdXRoLmRlZmF1bHQucHJlZml4PSogLS1jb25maWcgYXV0aC5kZWZhdWx0LnVzZXJuYW1lPSVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wYXNzd29yZD0lcyAtLWNvbmZpZyBcImF1dGguZGVmYXVsdC5zY2hlbWVzPSVzXCIgY2xvbmUgJXMgJXM6Ly8lcy8lcyAlcyIgJSAodWQuYmFzZWNtZCwgdWQudXNlciwgdWQucHN3ZCwgcHJvdG8sICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgaGdyb290LCB1ZC5tb2R1bGUsIHVkLm1vZHVsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIGNsb25lICVzICVzOi8vJXMvJXMgJXMiICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgaGdyb290LCB1ZC5tb2R1bGUsIHVkLm1vZHVsZSkKKyAgICAgICAgZWxpZiBjb21tYW5kID09ICJwdWxsIjoKKyAgICAgICAgICAgICMgZG8gbm90IHBhc3Mgb3B0aW9ucyBsaXN0OyBsaW1pdGluZyBwdWxsIHRvIHJldiBjYXVzZXMgdGhlIGxvY2FsCisgICAgICAgICAgICAjIHJlcG8gbm90IHRvIGNvbnRhaW4gaXQgYW5kIGltbWVkaWF0ZWx5IGZvbGxvd2luZyAidXBkYXRlIiBjb21tYW5kCisgICAgICAgICAgICAjIHdpbGwgY3Jhc2gKKyAgICAgICAgICAgIGlmIHVkLnVzZXIgYW5kIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wcmVmaXg9KiAtLWNvbmZpZyBhdXRoLmRlZmF1bHQudXNlcm5hbWU9JXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnBhc3N3b3JkPSVzIC0tY29uZmlnIFwiYXV0aC5kZWZhdWx0LnNjaGVtZXM9JXNcIiBwdWxsIiAlICh1ZC5iYXNlY21kLCB1ZC51c2VyLCB1ZC5wc3dkLCBwcm90bykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIHB1bGwiICUgKHVkLmJhc2VjbWQpCisgICAgICAgIGVsaWYgY29tbWFuZCA9PSAidXBkYXRlIjoKKyAgICAgICAgICAgIGlmIHVkLnVzZXIgYW5kIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wcmVmaXg9KiAtLWNvbmZpZyBhdXRoLmRlZmF1bHQudXNlcm5hbWU9JXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnBhc3N3b3JkPSVzIC0tY29uZmlnIFwiYXV0aC5kZWZhdWx0LnNjaGVtZXM9JXNcIiB1cGRhdGUgLUMgJXMiICUgKHVkLmJhc2VjbWQsIHVkLnVzZXIsIHVkLnBzd2QsIHByb3RvLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIHVwZGF0ZSAtQyAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJJbnZhbGlkIGhnIGNvbW1hbmQgJXMiICUgY29tbWFuZCwgdWQudXJsKQorCisgICAgICAgIHJldHVybiBjbWQKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybCIiIgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2g6IGNoZWNraW5nIGZvciBtb2R1bGUgZGlyZWN0b3J5ICciICsgdWQubW9kZGlyICsgIiciKQorCisgICAgICAgICMgSWYgdGhlIGNoZWNrb3V0IGRvZXNuJ3QgZXhpc3QgYW5kIHRoZSBtaXJyb3IgdGFyYmFsbCBkb2VzLCBleHRyYWN0IGl0CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5wa2dkaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgidGFyIC14emYgJXMiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQorCisgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odWQubW9kZGlyLCAnLmhnJyksIG9zLlJfT0spOgorICAgICAgICAgICAgIyBGb3VuZCB0aGUgc291cmNlLCBjaGVjayB3aGV0aGVyIG5lZWQgcHVsbAorICAgICAgICAgICAgdXBkYXRlY21kID0gc2VsZi5fYnVpbGRoZ2NvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQorICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgdXBkYXRlY21kKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKHVwZGF0ZWNtZCwgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFJ1bm5uaW5nIHB1bGwgaW4gdGhlIHJlcG8KKyAgICAgICAgICAgICAgICBwdWxsY21kID0gc2VsZi5fYnVpbGRoZ2NvbW1hbmQodWQsIGQsICJwdWxsIikKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUHVsbGluZyAiICsgdWQudXJsKQorICAgICAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgICAgICBvcy5jaGRpcih1ZC5tb2RkaXIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgcHVsbGNtZCkKKyAgICAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgcHVsbGNtZCwgdWQudXJsKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKHB1bGxjbWQsIGQpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsodWQuZnVsbG1pcnJvcikKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgTm8gc291cmNlIGZvdW5kLCBjbG9uZSBpdC4KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLm1vZGRpcik6CisgICAgICAgICAgICBmZXRjaGNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAiZmV0Y2giKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgICAgICAjIGNoZWNrIG91dCBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgZmV0Y2hjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgZmV0Y2hjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGZldGNoY21kLCBkKQorCisgICAgICAgICMgRXZlbiB3aGVuIHdlIGNsb25lIChmZXRjaCksIHdlIHN0aWxsIG5lZWQgdG8gdXBkYXRlIGFzIGhnJ3MgY2xvbmUKKyAgICAgICAgIyB3b24ndCBjaGVja291dCB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIGlmIGl0cyBvbiBhIGJyYW5jaAorICAgICAgICB1cGRhdGVjbWQgPSBzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCisgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgdXBkYXRlY21kKQorICAgICAgICBydW5mZXRjaGNtZCh1cGRhdGVjbWQsIGQpCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgQ2xlYW4gdGhlIGhnIGRpciAiIiIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZnVsbG1pcnJvcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IgKyAiLmRvbmUiKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGlwIHJldmlzaW9uIGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgc2VsZi5fYnVpbGRoZ2NvbW1hbmQodWQsIGQsICJpbmZvIikpCisgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAiaW5mbyIpLCBkKQorICAgICAgICByZXR1cm4gb3V0cHV0LnN0cmlwKCkKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb24KKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiaGc6IiArIHVkLm1vZGRpcgorCisgICAgZGVmIGJ1aWxkX21pcnJvcl9kYXRhKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIyBHZW5lcmF0ZSBhIG1pcnJvciB0YXJiYWxsIGlmIG5lZWRlZAorICAgICAgICBpZiB1ZC53cml0ZV90YXJiYWxscyA9PSAiMSIgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgICAgICMgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgc3ltbGluayBwb2ludHMgdG8gcmVhZC1vbmx5IGZpbGVzeXN0ZW0gd2l0aCBQUkVNSVJST1IKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHVkLmZ1bGxtaXJyb3IpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayh1ZC5mdWxsbWlycm9yKQorCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ3JlYXRpbmcgdGFyYmFsbCBvZiBoZyByZXBvc2l0b3J5IikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0YXIgLWN6ZiAlcyAlcyIgJSAodWQuZnVsbG1pcnJvciwgdWQubW9kdWxlKSwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJ0b3VjaCAlcy5kb25lIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQucGtnZGlyCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2UgYSBsb2NhbCBjbG9uZSBvciBleHBvcnQgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV2ZmxhZyA9ICItciAlcyIgJSB1ZC5yZXZpc2lvbgorICAgICAgICBzdWJkaXIgPSB1ZC5wYXJtLmdldCgiZGVzdHN1ZmZpeCIsIHVkLm1vZHVsZSkKKyAgICAgICAgY29kaXIgPSAiJXMvJXMiICUgKGRlc3RkaXIsIHN1YmRpcikKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSAhPSAibm9rZWVwIjoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGNvZGlyLCAnLmhnJyksIG9zLlJfT0spOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiBjcmVhdGluZyBuZXcgaGcgcmVwb3NpdG9yeSBpbiAnIiArIGNvZGlyICsgIiciKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBpbml0ICVzIiAlICh1ZC5iYXNlY21kLCBjb2RpciksIGQpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlVucGFjazogdXBkYXRpbmcgc291cmNlIGluICciICsgY29kaXIgKyAiJyIpCisgICAgICAgICAgICBvcy5jaGRpcihjb2RpcikKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBwdWxsICVzIiAlICh1ZC5iYXNlY21kLCB1ZC5tb2RkaXIpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHVwIC1DICVzIiAlICh1ZC5iYXNlY21kLCByZXZmbGFnKSwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiBleHRyYWN0aW5nIHNvdXJjZSB0byAnIiArIGNvZGlyICsgIiciKQorICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFyY2hpdmUgLXQgZmlsZXMgJXMgJXMiICUgKHVkLmJhc2VjbWQsIHJldmZsYWcsIGNvZGlyKSwgZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2xvY2FsLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvbG9jYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5MjFmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2xvY2FsLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2ltcG9ydCBvcworaW1wb3J0IHVybGxpYgoraW1wb3J0IGJiCitpbXBvcnQgYmIudXRpbHMKK2Zyb20gICBiYiBpbXBvcnQgZGF0YQorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QsIEZldGNoRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBMb2NhbChGZXRjaE1ldGhvZCk6CisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIHJlcHJlc2VudHMgYSBsb2NhbCBmZXRjaC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1cmxkYXRhLnR5cGUgaW4gWydmaWxlJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAjIFdlIGRvbid0IHNldCBsb2NhbGZpbGUgYXMgZm9yIHRoaXMgZmV0Y2hlciB0aGUgZmlsZSBpcyBhbHJlYWR5IGxvY2FsIQorICAgICAgICB1ZC5kZWNvZGVkdXJsID0gdXJsbGliLnVucXVvdGUodWQudXJsLnNwbGl0KCI6Ly8iKVsxXS5zcGxpdCgiOyIpWzBdKQorICAgICAgICB1ZC5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodWQuZGVjb2RlZHVybCkKKyAgICAgICAgdWQuYmFzZXBhdGggPSB1ZC5kZWNvZGVkdXJsCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbG9jYWwgZmlsZW5hbWUgb2YgYSBnaXZlbiB1cmwgYXNzdW1pbmcgYSBzdWNjZXNzZnVsIGZldGNoLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubG9jYWxwYXRocyh1cmxkYXRhLCBkKVstMV0KKworICAgIGRlZiBsb2NhbHBhdGhzKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2NhbCBmaWxlbmFtZSBvZiBhIGdpdmVuIHVybCBhc3N1bWluZyBhIHN1Y2Nlc3NmdWwgZmV0Y2guCisgICAgICAgICIiIgorICAgICAgICBzZWFyY2hlZCA9IFtdCisgICAgICAgIHBhdGggPSB1cmxkYXRhLmRlY29kZWR1cmwKKyAgICAgICAgbmV3cGF0aCA9IHBhdGgKKyAgICAgICAgaWYgcGF0aFswXSA9PSAiLyI6CisgICAgICAgICAgICByZXR1cm4gW3BhdGhdCisgICAgICAgIGZpbGVzcGF0aCA9IGRhdGEuZ2V0VmFyKCdGSUxFU1BBVEgnLCBkLCBUcnVlKQorICAgICAgICBpZiBmaWxlc3BhdGg6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNlYXJjaGluZyBmb3IgJXMgaW4gcGF0aHM6XG4gICAgJXMiICUgKHBhdGgsICJcbiAgICAiLmpvaW4oZmlsZXNwYXRoLnNwbGl0KCI6IikpKSkKKyAgICAgICAgICAgIG5ld3BhdGgsIGhpc3QgPSBiYi51dGlscy53aGljaChmaWxlc3BhdGgsIHBhdGgsIGhpc3Rvcnk9VHJ1ZSkKKyAgICAgICAgICAgIHNlYXJjaGVkLmV4dGVuZChoaXN0KQorICAgICAgICBpZiBub3QgbmV3cGF0aDoKKyAgICAgICAgICAgIGZpbGVzZGlyID0gZGF0YS5nZXRWYXIoJ0ZJTEVTRElSJywgZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGZpbGVzZGlyOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2VhcmNoaW5nIGZvciAlcyBpbiBwYXRoOiAlcyIgJSAocGF0aCwgZmlsZXNkaXIpKQorICAgICAgICAgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIHBhdGgpCisgICAgICAgICAgICAgICAgc2VhcmNoZWQuYXBwZW5kKG5ld3BhdGgpCisgICAgICAgIGlmIChub3QgbmV3cGF0aCBvciBub3Qgb3MucGF0aC5leGlzdHMobmV3cGF0aCkpIGFuZCBwYXRoLmZpbmQoIioiKSAhPSAtMToKKyAgICAgICAgICAgICMgRm9yIGV4cHJlc3Npb25zIHVzaW5nICcqJywgYmVzdCB3ZSBjYW4gZG8gaXMgdGFrZSB0aGUgZmlyc3QgZGlyZWN0b3J5IGluIEZJTEVTUEFUSCB0aGF0IGV4aXN0cworICAgICAgICAgICAgbmV3cGF0aCwgaGlzdCA9IGJiLnV0aWxzLndoaWNoKGZpbGVzcGF0aCwgIi4iLCBoaXN0b3J5PVRydWUpCisgICAgICAgICAgICBzZWFyY2hlZC5leHRlbmQoaGlzdCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2VhcmNoaW5nIGZvciAlcyBpbiBwYXRoOiAlcyIgJSAocGF0aCwgbmV3cGF0aCkpCisgICAgICAgICAgICByZXR1cm4gc2VhcmNoZWQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld3BhdGgpOgorICAgICAgICAgICAgZGxkaXJmaWxlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSwgcGF0aCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRGVmYXVsdGluZyB0byAlcyBmb3IgJXMiICUgKGRsZGlyZmlsZSwgcGF0aCkpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRsZGlyZmlsZSkpCisgICAgICAgICAgICBzZWFyY2hlZC5hcHBlbmQoZGxkaXJmaWxlKQorICAgICAgICAgICAgcmV0dXJuIHNlYXJjaGVkCisgICAgICAgIHJldHVybiBzZWFyY2hlZAorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgdWQudXJsLmZpbmQoIioiKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIkZldGNoIHVybHMgKG5vLW9wIGZvciBMb2NhbCBtZXRob2QpIiIiCisgICAgICAgICMgbm8gbmVlZCB0byBmZXRjaCBsb2NhbCBmaWxlcywgd2UnbGwgZGVhbCB3aXRoIHRoZW0gaW4gcGxhY2UuCisgICAgICAgIGlmIHNlbGYuc3VwcG9ydHNfY2hlY2tzdW0odXJsZGF0YSkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh1cmxkYXRhLmxvY2FscGF0aCk6CisgICAgICAgICAgICBsb2NhdGlvbnMgPSBbXQorICAgICAgICAgICAgZmlsZXNwYXRoID0gZGF0YS5nZXRWYXIoJ0ZJTEVTUEFUSCcsIGQsIFRydWUpCisgICAgICAgICAgICBpZiBmaWxlc3BhdGg6CisgICAgICAgICAgICAgICAgbG9jYXRpb25zID0gZmlsZXNwYXRoLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGZpbGVzZGlyID0gZGF0YS5nZXRWYXIoJ0ZJTEVTRElSJywgZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGZpbGVzZGlyOgorICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQoZmlsZXNkaXIpCisgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSkKKworICAgICAgICAgICAgbXNnID0gIlVuYWJsZSB0byBmaW5kIGZpbGUgIiArIHVybGRhdGEudXJsICsgIiBhbnl3aGVyZS4gVGhlIHBhdGhzIHRoYXQgd2VyZSBzZWFyY2hlZCB3ZXJlOlxuICAgICIgKyAiXG4gICAgIi5qb2luKGxvY2F0aW9ucykKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IobXNnKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICBpZiB1cmxkYXRhLmxvY2FscGF0aC5maW5kKCIqIikgIT0gLTE6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVVJMICVzIGxvb2tzIGxpa2UgYSBnbG9iIGFuZCB3YXMgdGhlcmVmb3JlIG5vdCBjaGVja2VkLiIsIHVybGRhdGEudXJsKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModXJsZGF0YS5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIHJldHVybgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9vc2MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9vc2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4Nzc5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL29zYy5weQpAQCAtMCwwICsxLDEzNSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0YmFrZSAiRmV0Y2giIGltcGxlbWVudGF0aW9uIGZvciBvc2MgKE9wZW5zdXNlIGJ1aWxkIHNlcnZpY2UgY2xpZW50KS4KK0Jhc2VkIG9uIHRoZSBzdm4gIkZldGNoIiBpbXBsZW1lbnRhdGlvbi4KKworIiIiCisKK2ltcG9ydCAgb3MKK2ltcG9ydCAgc3lzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0ICBiYgorZnJvbSAgICBiYiAgICAgICBpbXBvcnQgZGF0YQorZnJvbSAgICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgorZnJvbSAgICBiYi5mZXRjaDIgaW1wb3J0IE1pc3NpbmdQYXJhbWV0ZXJFcnJvcgorZnJvbSAgICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCisKK2NsYXNzIE9zYyhGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIE9wZW5zdXNlIGJ1aWxkIHNlcnZlcgorICAgICAgIHJlcG9zaXRvcmllcy4iIiIKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBvc2MuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ29zYyddCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgbm90ICJtb2R1bGUiIGluIHVkLnBhcm06CisgICAgICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoJ21vZHVsZScsIHVkLnVybCkKKworICAgICAgICB1ZC5tb2R1bGUgPSB1ZC5wYXJtWyJtb2R1bGUiXQorCisgICAgICAgICMgQ3JlYXRlIHBhdGhzIHRvIG9zYyBjaGVja291dHMKKyAgICAgICAgcmVscGF0aCA9IHNlbGYuX3N0cmlwX2xlYWRpbmdfc2xhc2hlcyh1ZC5wYXRoKQorICAgICAgICB1ZC5wa2dkaXIgPSBvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQoJyR7T1NDRElSfScsIGQpLCB1ZC5ob3N0KQorICAgICAgICB1ZC5tb2RkaXIgPSBvcy5wYXRoLmpvaW4odWQucGtnZGlyLCByZWxwYXRoLCB1ZC5tb2R1bGUpCisKKyAgICAgICAgaWYgJ3JldicgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gdWQucGFybVsncmV2J10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2ID0gZGF0YS5nZXRWYXIoIlBWIiwgZCwgMCkKKyAgICAgICAgICAgIHJldiA9IGJiLmZldGNoMi5zcmNyZXZfaW50ZXJuYWxfaGVscGVyKHVkLCBkKQorICAgICAgICAgICAgaWYgcmV2IGFuZCByZXYgIT0gVHJ1ZToKKyAgICAgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9IHJldgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9ICIiCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzXyVzXyVzLnRhci5neicgJSAodWQubW9kdWxlLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5yZXZpc2lvbiksIGQpCisKKyAgICBkZWYgX2J1aWxkb3NjY29tbWFuZChzZWxmLCB1ZCwgZCwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCB1cCBhbiBvY3MgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpcyAiZmV0Y2giLCAidXBkYXRlIiwgImluZm8iCisgICAgICAgICIiIgorCisgICAgICAgIGJhc2VjbWQgPSBkYXRhLmV4cGFuZCgnJHtGRVRDSENNRF9vc2N9JywgZCkKKworICAgICAgICBwcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdvY3MnKQorCisgICAgICAgIG9wdGlvbnMgPSBbXQorCisgICAgICAgIGNvbmZpZyA9ICItYyAlcyIgJSBzZWxmLmdlbmVyYXRlX2NvbmZpZyh1ZCwgZCkKKworICAgICAgICBpZiB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKworICAgICAgICBjb3Jvb3QgPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXModWQucGF0aCkKKworICAgICAgICBpZiBjb21tYW5kID09ICJmZXRjaCI6CisgICAgICAgICAgICBvc2NjbWQgPSAiJXMgJXMgY28gJXMvJXMgJXMiICUgKGJhc2VjbWQsIGNvbmZpZywgY29yb290LCB1ZC5tb2R1bGUsICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICBlbGlmIGNvbW1hbmQgPT0gInVwZGF0ZSI6CisgICAgICAgICAgICBvc2NjbWQgPSAiJXMgJXMgdXAgJXMiICUgKGJhc2VjbWQsIGNvbmZpZywgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJJbnZhbGlkIG9zYyBjb21tYW5kICVzIiAlIGNvbW1hbmQsIHVkLnVybCkKKworICAgICAgICByZXR1cm4gb3NjY21kCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggdXJsCisgICAgICAgICIiIgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2g6IGNoZWNraW5nIGZvciBtb2R1bGUgZGlyZWN0b3J5ICciICsgdWQubW9kZGlyICsgIiciKQorCisgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQoJyR7T1NDRElSfScsIGQpLCB1ZC5wYXRoLCB1ZC5tb2R1bGUpLCBvcy5SX09LKToKKyAgICAgICAgICAgIG9zY3VwZGF0ZWNtZCA9IHNlbGYuX2J1aWxkb3NjY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRlICIrIHVkLnVybCkKKyAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIG9zY3VwZGF0ZWNtZCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBvc2N1cGRhdGVjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKG9zY3VwZGF0ZWNtZCwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zY2ZldGNoY21kID0gc2VsZi5fYnVpbGRvc2Njb21tYW5kKHVkLCBkLCAiZmV0Y2giKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgICAgICAjIGNoZWNrIG91dCBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgb3NjZmV0Y2hjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgb3NjZmV0Y2hjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKG9zY2ZldGNoY21kLCBkKQorCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbih1ZC5wa2dkaXIgKyB1ZC5wYXRoKSkKKyAgICAgICAgIyB0YXIgdGhlbSB1cCB0byBhIGRlZmluZWQgZmlsZW5hbWUKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5sb2NhbHBhdGgsIHVkLm1vZHVsZSksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdlbmVyYXRlX2NvbmZpZyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIC5vc2NyYyB0byBiZSB1c2VkIGZvciB0aGlzIHJ1bi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgY29uZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQoJyR7T1NDRElSfScsIGQpLCAib3NjcmMiKQorICAgICAgICBpZiAob3MucGF0aC5leGlzdHMoY29uZmlnX3BhdGgpKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb25maWdfcGF0aCkKKworICAgICAgICBmID0gb3Blbihjb25maWdfcGF0aCwgJ3cnKQorICAgICAgICBmLndyaXRlKCJbZ2VuZXJhbF1cbiIpCisgICAgICAgIGYud3JpdGUoImFwaXNydiA9ICVzXG4iICUgdWQuaG9zdCkKKyAgICAgICAgZi53cml0ZSgic2NoZW1lID0gaHR0cFxuIikKKyAgICAgICAgZi53cml0ZSgic3Utd3JhcHBlciA9IHN1IC1jXG4iKQorICAgICAgICBmLndyaXRlKCJidWlsZC1yb290ID0gJXNcbiIgJSBkYXRhLmV4cGFuZCgnJHtXT1JLRElSfScsIGQpKQorICAgICAgICBmLndyaXRlKCJ1cmxsaXN0ID0gaHR0cDovL21vYmxpbi1vYnMuamYuaW50ZWwuY29tOjg4ODgvYnVpbGQvJShwcm9qZWN0KXMvJShyZXBvc2l0b3J5KXMvJShidWlsZGFyY2gpcy86ZnVsbC8lKG5hbWUpcy5ycG1cbiIpCisgICAgICAgIGYud3JpdGUoImV4dHJhLXBrZ3MgPSBnemlwXG4iKQorICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgIGYud3JpdGUoIlslc11cbiIgJSB1ZC5ob3N0KQorICAgICAgICBmLndyaXRlKCJ1c2VyID0gJXNcbiIgJSB1ZC5wYXJtWyJ1c2VyIl0pCisgICAgICAgIGYud3JpdGUoInBhc3MgPSAlc1xuIiAlIHVkLnBhcm1bInBzd2QiXSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIGNvbmZpZ19wYXRoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3BlcmZvcmNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTBjN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weQpAQCAtMCwwICsxLDE4NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9ucworCitDbGFzc2VzIGZvciBvYnRhaW5pbmcgdXBzdHJlYW0gc291cmNlcyBmb3IgdGhlCitCaXRCYWtlIGJ1aWxkIHRvb2xzLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgemlwCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCisKK2NsYXNzIFBlcmZvcmNlKEZldGNoTWV0aG9kKToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ3A0J10KKworICAgIGRlZiBkb3BhcnNlKHVybCwgZCk6CisgICAgICAgIHBhcm0gPSB7fQorICAgICAgICBwYXRoID0gdXJsLnNwbGl0KCI6Ly8iKVsxXQorICAgICAgICBkZWxpbSA9IHBhdGguZmluZCgiQCIpOworICAgICAgICBpZiBkZWxpbSAhPSAtMToKKyAgICAgICAgICAgICh1c2VyLCBwc3dkLCBob3N0LCBwb3J0KSA9IHBhdGguc3BsaXQoJ0AnKVswXS5zcGxpdCgiOiIpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5zcGxpdCgnQCcpWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAoaG9zdCwgcG9ydCkgPSBkLmdldFZhcignUDRQT1JUJywgRmFsc2UpLnNwbGl0KCc6JykKKyAgICAgICAgICAgIHVzZXIgPSAiIgorICAgICAgICAgICAgcHN3ZCA9ICIiCisKKyAgICAgICAgaWYgcGF0aC5maW5kKCI7IikgIT0gLTE6CisgICAgICAgICAgICBrZXlzPVtdCisgICAgICAgICAgICB2YWx1ZXM9W10KKyAgICAgICAgICAgIHBsaXN0ID0gcGF0aC5zcGxpdCgnOycpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBwbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBpdGVtLmNvdW50KCc9Jyk6CisgICAgICAgICAgICAgICAgICAgIChrZXksIHZhbHVlKSA9IGl0ZW0uc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisKKyAgICAgICAgICAgIHBhcm0gPSBkaWN0KHppcChrZXlzLCB2YWx1ZXMpKQorICAgICAgICBwYXRoID0gIi8vIiArIHBhdGguc3BsaXQoJzsnKVswXQorICAgICAgICBob3N0ICs9ICI6JXMiICUgKHBvcnQpCisgICAgICAgIHBhcm1bImNzZXQiXSA9IFBlcmZvcmNlLmdldGNzZXQoZCwgcGF0aCwgaG9zdCwgdXNlciwgcHN3ZCwgcGFybSkKKworICAgICAgICByZXR1cm4gaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybQorICAgIGRvcGFyc2UgPSBzdGF0aWNtZXRob2QoZG9wYXJzZSkKKworICAgIGRlZiBnZXRjc2V0KGQsIGRlcG90LCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKToKKyAgICAgICAgcDRvcHQgPSAiIgorICAgICAgICBpZiAiY3NldCIgaW4gcGFybToKKyAgICAgICAgICAgIHJldHVybiBwYXJtWyJjc2V0Il07CisgICAgICAgIGlmIHVzZXI6CisgICAgICAgICAgICBwNG9wdCArPSAiIC11ICVzIiAlICh1c2VyKQorICAgICAgICBpZiBwc3dkOgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtUCAlcyIgJSAocHN3ZCkKKyAgICAgICAgaWYgaG9zdDoKKyAgICAgICAgICAgIHA0b3B0ICs9ICIgLXAgJXMiICUgKGhvc3QpCisKKyAgICAgICAgcDRkYXRlID0gZC5nZXRWYXIoIlA0REFURSIsIFRydWUpCisgICAgICAgIGlmICJyZXZpc2lvbiIgaW4gcGFybToKKyAgICAgICAgICAgIGRlcG90ICs9ICIjJXMiICUgKHBhcm1bInJldmlzaW9uIl0pCisgICAgICAgIGVsaWYgImxhYmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgZGVwb3QgKz0gIkAlcyIgJSAocGFybVsibGFiZWwiXSkKKyAgICAgICAgZWxpZiBwNGRhdGU6CisgICAgICAgICAgICBkZXBvdCArPSAiQCVzIiAlIChwNGRhdGUpCisKKyAgICAgICAgcDRjbWQgPSBkLmdldFZhcignRkVUQ0hDTURfcDQnLCBUcnVlKSBvciAicDQiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyVzIGNoYW5nZXMgLW0gMSAlcyIsIHA0Y21kLCBwNG9wdCwgZGVwb3QpCisgICAgICAgIHA0ZmlsZSwgZXJyb3JzID0gYmIucHJvY2Vzcy5ydW4oIiVzJXMgY2hhbmdlcyAtbSAxICVzIiAlIChwNGNtZCwgcDRvcHQsIGRlcG90KSkKKyAgICAgICAgY3NldCA9IHA0ZmlsZS5zdHJpcCgpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUkVBRCAlcyIsIGNzZXQpCisgICAgICAgIGlmIG5vdCBjc2V0OgorICAgICAgICAgICAgcmV0dXJuIC0xCisKKyAgICAgICAgcmV0dXJuIGNzZXQuc3BsaXQoJyAnKVsxXQorICAgIGdldGNzZXQgPSBzdGF0aWNtZXRob2QoZ2V0Y3NldCkKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAoaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBQZXJmb3JjZS5kb3BhcnNlKHVkLnVybCwgZCkKKworICAgICAgICBiYXNlX3BhdGggPSBwYXRoLnJlcGxhY2UoJy8uLi4nLCAnJykKKyAgICAgICAgYmFzZV9wYXRoID0gc2VsZi5fc3RyaXBfbGVhZGluZ19zbGFzaGVzKGJhc2VfcGF0aCkKKyAgICAgICAgCisgICAgICAgIGlmICJsYWJlbCIgaW4gcGFybToKKyAgICAgICAgICAgIHZlcnNpb24gPSBwYXJtWyJsYWJlbCJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2ZXJzaW9uID0gUGVyZm9yY2UuZ2V0Y3NldChkLCBwYXRoLCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKQorCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKCclcyslcyslcy50YXIuZ3onICUgKGhvc3QsIGJhc2VfcGF0aC5yZXBsYWNlKCcvJywgJy4nKSwgdmVyc2lvbiksIGQpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggdXJscworICAgICAgICAiIiIKKworICAgICAgICAoaG9zdCwgZGVwb3QsIHVzZXIsIHBzd2QsIHBhcm0pID0gUGVyZm9yY2UuZG9wYXJzZSh1ZC51cmwsIGQpCisKKyAgICAgICAgaWYgZGVwb3QuZmluZCgnLy4uLicpICE9IC0xOgorICAgICAgICAgICAgcGF0aCA9IGRlcG90WzpkZXBvdC5maW5kKCcvLi4uJyldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoID0gZGVwb3RbOmRlcG90LnJmaW5kKCcvJyldCisKKyAgICAgICAgbW9kdWxlID0gcGFybS5nZXQoJ21vZHVsZScsIG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCisKKyAgICAgICAgIyBHZXQgdGhlIHA0IGNvbW1hbmQKKyAgICAgICAgcDRvcHQgPSAiIgorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtdSAlcyIgJSAodXNlcikKKworICAgICAgICBpZiBwc3dkOgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtUCAlcyIgJSAocHN3ZCkKKworICAgICAgICBpZiBob3N0OgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtcCAlcyIgJSAoaG9zdCkKKworICAgICAgICBwNGNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9wNCcsIFRydWUpIG9yICJwNCIKKworICAgICAgICAjIGNyZWF0ZSB0ZW1wIGRpcmVjdG9yeQorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5IikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZXhwYW5kKCcke1dPUktESVJ9JykpCisgICAgICAgIG1rdGVtcCA9IGQuZ2V0VmFyKCJGRVRDSENNRF9wNG1rdGVtcCIsIFRydWUpIG9yIGQuZXhwYW5kKCJta3RlbXAgLWQgLXEgJyR7V09SS0RJUn0vb2VwNC5YWFhYWFgnIikKKyAgICAgICAgdG1wZmlsZSwgZXJyb3JzID0gYmIucHJvY2Vzcy5ydW4obWt0ZW1wKQorICAgICAgICB0bXBmaWxlID0gdG1wZmlsZS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCB0bXBmaWxlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiRmV0Y2g6IHVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4uIG1ha2Ugc3VyZSAnbWt0ZW1wJyBpcyBpbiB0aGUgUEFUSC4iLCB1ZC51cmwpCisKKyAgICAgICAgaWYgImxhYmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgZGVwb3QgPSAiJXNAJXMiICUgKGRlcG90LCBwYXJtWyJsYWJlbCJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3NldCA9IFBlcmZvcmNlLmdldGNzZXQoZCwgZGVwb3QsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pCisgICAgICAgICAgICBkZXBvdCA9ICIlc0AlcyIgJSAoZGVwb3QsIGNzZXQpCisKKyAgICAgICAgb3MuY2hkaXIodG1wZmlsZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgIGxvZ2dlci5pbmZvKCIlcyVzIGZpbGVzICVzIiwgcDRjbWQsIHA0b3B0LCBkZXBvdCkKKyAgICAgICAgcDRmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bigiJXMlcyBmaWxlcyAlcyIgJSAocDRjbWQsIHA0b3B0LCBkZXBvdCkpCisgICAgICAgIHA0ZmlsZSA9IFtmLnJzdHJpcCgpIGZvciBmIGluIHA0ZmlsZS5zcGxpdGxpbmVzKCldCisKKyAgICAgICAgaWYgbm90IHA0ZmlsZToKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkZldGNoOiB1bmFibGUgdG8gZ2V0IHRoZSBQNCBmaWxlcyBmcm9tICVzIiAlIGRlcG90LCB1ZC51cmwpCisKKyAgICAgICAgY291bnQgPSAwCisKKyAgICAgICAgZm9yIGZpbGUgaW4gcDRmaWxlOgorICAgICAgICAgICAgbGlzdCA9IGZpbGUuc3BsaXQoKQorCisgICAgICAgICAgICBpZiBsaXN0WzJdID09ICJkZWxldGUiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlc3QgPSBsaXN0WzBdW2xlbihwYXRoKSsxOl0KKyAgICAgICAgICAgIHdoZXJlID0gZGVzdC5maW5kKCIjIikKKworICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCIlcyVzIHByaW50IC1vICVzLyVzICVzIiAlIChwNGNtZCwgcDRvcHQsIG1vZHVsZSwgZGVzdFs6d2hlcmVdLCBsaXN0WzBdKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCisKKyAgICAgICAgaWYgY291bnQgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigpCisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJGZXRjaDogTm8gZmlsZXMgZ2F0aGVyZWQgZnJvbSB0aGUgUDQgZmV0Y2giLCB1ZC51cmwpCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5sb2NhbHBhdGgsIG1vZHVsZSksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKyAgICAgICAgIyBjbGVhbnVwCisgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHRtcGZpbGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcmVwby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY3OGViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvcmVwby5weQpAQCAtMCwwICsxLDk4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICJGZXRjaCIgcmVwbyAoZ2l0KSBpbXBsZW1lbnRhdGlvbgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDkgVG9tIFJpbmkgPHRyaW5pQGVtYmVkZGVkYWxsZXkuY29tPgorIworIyBCYXNlZCBvbiBnaXQucHkgd2hpY2ggaXM6CisjQ29weXJpZ2h0IChDKSAyMDA1IFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgorZnJvbSAgIGJiICAgIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworY2xhc3MgUmVwbyhGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIHJlcG8gKGdpdCkgcmVwb3NpdG9yaWVzIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIHJlcG8uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbInJlcG8iXQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBXZSBkb24idCBjYXJlIGFib3V0IHRoZSBnaXQgcmV2IG9mIHRoZSBtYW5pZmVzdHMgcmVwb3NpdG9yeSwgYnV0CisgICAgICAgIHdlIGRvIGNhcmUgYWJvdXQgdGhlIG1hbmlmZXN0IHRvIHVzZS4gIFRoZSBkZWZhdWx0IGlzICJkZWZhdWx0Ii4KKyAgICAgICAgV2UgYWxzbyBjYXJlIGFib3V0IHRoZSBicmFuY2ggb3IgdGFnIHRvIGJlIHVzZWQuICBUaGUgZGVmYXVsdCBpcworICAgICAgICAibWFzdGVyIi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtLmdldCgncHJvdG9jb2wnLCAnZ2l0JykKKyAgICAgICAgdWQuYnJhbmNoID0gdWQucGFybS5nZXQoJ2JyYW5jaCcsICdtYXN0ZXInKQorICAgICAgICB1ZC5tYW5pZmVzdCA9IHVkLnBhcm0uZ2V0KCdtYW5pZmVzdCcsICdkZWZhdWx0LnhtbCcpCisgICAgICAgIGlmIG5vdCB1ZC5tYW5pZmVzdC5lbmRzd2l0aCgnLnhtbCcpOgorICAgICAgICAgICAgdWQubWFuaWZlc3QgKz0gJy54bWwnCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoInJlcG9fJXMlc18lc18lcy50YXIuZ3oiICUgKHVkLmhvc3QsIHVkLnBhdGgucmVwbGFjZSgiLyIsICIuIiksIHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gpLCBkKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbihkYXRhLmdldFZhcigiRExfRElSIiwgZCwgVHJ1ZSksIHVkLmxvY2FsZmlsZSksIG9zLlJfT0spOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICIlcyBhbHJlYWR5IGV4aXN0cyAob3Igd2FzIHN0YXNoZWQpLiBTa2lwcGluZyByZXBvIGluaXQgLyBzeW5jLiIsIHVkLmxvY2FscGF0aCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGdpdHNyY25hbWUgPSAiJXMlcyIgJSAodWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCIvIiwgIi4iKSkKKyAgICAgICAgcmVwb2RpciA9IGRhdGEuZ2V0VmFyKCJSRVBPRElSIiwgZCwgVHJ1ZSkgb3Igb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgInJlcG8iKQorICAgICAgICBjb2RpciA9IG9zLnBhdGguam9pbihyZXBvZGlyLCBnaXRzcmNuYW1lLCB1ZC5tYW5pZmVzdCkKKworICAgICAgICBpZiB1ZC51c2VyOgorICAgICAgICAgICAgdXNlcm5hbWUgPSB1ZC51c2VyICsgIkAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VybmFtZSA9ICIiCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihjb2RpciwgInJlcG8iKSkKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKGNvZGlyLCAicmVwbyIpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGNvZGlyLCAicmVwbyIsICIucmVwbyIpKToKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCAicmVwbyBpbml0IC1tICVzIC1iICVzIC11ICVzOi8vJXMlcyVzIiAlICh1ZC5tYW5pZmVzdCwgdWQuYnJhbmNoLCB1ZC5wcm90bywgdXNlcm5hbWUsIHVkLmhvc3QsIHVkLnBhdGgpLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgicmVwbyBpbml0IC1tICVzIC1iICVzIC11ICVzOi8vJXMlcyVzIiAlICh1ZC5tYW5pZmVzdCwgdWQuYnJhbmNoLCB1ZC5wcm90bywgdXNlcm5hbWUsIHVkLmhvc3QsIHVkLnBhdGgpLCBkKQorCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCAicmVwbyBzeW5jICVzIiAlIHVkLnVybCwgdWQudXJsKQorICAgICAgICBydW5mZXRjaGNtZCgicmVwbyBzeW5jIiwgZCkKKyAgICAgICAgb3MuY2hkaXIoY29kaXIpCisKKyAgICAgICAgc2NtZGF0YSA9IHVkLnBhcm0uZ2V0KCJzY21kYXRhIiwgIiIpCisgICAgICAgIGlmIHNjbWRhdGEgPT0gImtlZXAiOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICItLWV4Y2x1ZGUgJy5yZXBvJyAtLWV4Y2x1ZGUgJy5naXQnIgorCisgICAgICAgICMgQ3JlYXRlIGEgY2FjaGUKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAlcyAtY3pmICVzICVzIiAlICh0YXJfZmxhZ3MsIHVkLmxvY2FscGF0aCwgb3MucGF0aC5qb2luKCIuIiwgIioiKSApLCBkKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV0dXJuIHVkLm1hbmlmZXN0CisKKyAgICBkZWYgX3dhbnRfc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zZnRwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMmY3NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zZnRwLnB5CkBAIC0wLDAgKzEsMTI5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlIFNGVFAgRmV0Y2ggaW1wbGVtZW50YXRpb24KKworQ2xhc3MgZm9yIGZldGNoaW5nIGZpbGVzIHZpYSBTRlRQLiBJdCB0cmllcyB0byBhZGhlcmUgdG8gdGhlIChub3cKK2V4cGlyZWQpIElFVEYgSW50ZXJuZXQgRHJhZnQgZm9yICJVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkKK1NjaGVtZSBmb3IgU2VjdXJlIEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wgKFNGVFApIGFuZCBTZWN1cmUgU2hlbGwKKyhTU0gpIiAoU0VDU0ggVVJJKS4KKworSXQgdXNlcyBTRlRQIChhcyB0byBhZGhlcmUgdG8gdGhlIFNFQ1NIIFVSSSBzcGVjaWZpY2F0aW9uKS4gSXQgb25seQorc3VwcG9ydHMga2V5IGJhc2VkIGF1dGhlbnRpY2F0aW9uLCBub3QgcGFzc3dvcmQuIFRoaXMgY2xhc3MsIHVubGlrZQordGhlIFNTSCBmZXRjaGVyLCBkb2VzIG5vdCBzdXBwb3J0IGZldGNoaW5nIGEgZGlyZWN0b3J5IHRyZWUgZnJvbSB0aGUKK3JlbW90ZS4KKworICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXNlY3NoLXNjcC1zZnRwLXNzaC11cmktMDQKKyAgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdXJpLXNjaGVtZXMvcHJvdi9zZnRwCisgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXNlY3NoLWZpbGV4ZmVyLTEzCisKK1BsZWFzZSBub3RlIHRoYXQgJy8nIGlzIHVzZWQgYXMgaG9zdCBwYXRoIHNlcGVyYXRvciwgYW5kIG5vdCAiOiIKK2FzIHlvdSBtYXkgYmUgdXNlZCB0byBmcm9tIHRoZSBzY3Avc2Z0cCBjb21tYW5kcy4gWW91IGNhbiB1c2UgYQorfiAodGlsZGUpIHRvIHNwZWNpZnkgYSBwYXRoIHJlbGF0aXZlIHRvIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisoVGhlIC9+dXNlci8gc3ludGF4LCBmb3Igc3BlY3lmaW5nIGEgcGF0aCByZWxhdGl2ZSB0byBhbm90aGVyCit1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgaXMgbm90IHN1cHBvcnRlZC4pIE5vdGUgdGhhdCB0aGUgdGlsZGUgbXVzdAorc3RpbGwgZm9sbG93IHRoZSBob3N0IHBhdGggc2VwZXJhdG9yICgiLyIpLiBTZWUgZXhhbXBlbHMgYmVsb3cuCisKK0V4YW1wbGUgU1JDX1VSSXM6CisKK1NSQ19VUkkgPSAic2Z0cDovL2hvc3QuZXhhbXBsZS5jb20vZGlyL3BhdGguZmlsZS50eHQiCisKK0EgcGF0aCByZWxhdGl2ZSB0byB5b3VyIGhvbWUgZGlyZWN0b3J5LgorCitTUkNfVVJJID0gInNmdHA6Ly9ob3N0LmV4YW1wbGUuY29tL34vZGlyL3BhdGguZmlsZS50eHQiCisKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgdXNlcm5hbWUgKHNwZWN5ZmluZyBwYXNzd29yZCBpbiB0aGUKK1VSSSBpcyBub3Qgc3VwcG9ydGVkLCB1c2UgU1NIIGtleXMgdG8gYXV0aGVudGljYXRlKToKKworU1JDX1VSSSA9ICJzZnRwOi8vdXNlckBob3N0LmV4YW1wbGUuY29tL2Rpci9wYXRoLmZpbGUudHh0IgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMTMsIE9sb2YgSm9oYW5zc29uIDxvbG9mLmpvaGFuc3NvbkBheGlzLmNvbT4KKyMKKyMgQmFzZWQgaW4gcGFydCBvbiBiYi5mZXRjaDIud2dldDoKKyMgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IG9zCitpbXBvcnQgYmIKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBjb21tYW5kcworZnJvbSBiYiBpbXBvcnQgZGF0YQorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IFVSSQorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworCitjbGFzcyBTRlRQKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCB1cmxzIHZpYSAnc2Z0cCciIiIKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBzZnRwLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydzZnRwJ10KKworICAgIGRlZiByZWNvbW1lbmRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdWQucGFybSBhbmQgdWQucGFybVsncHJvdG9jb2wnXSA9PSAnZ2l0JzoKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigKKyAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm90b2NvbCAtIGlmIHlvdSB3aXNoIHRvIGZldGNoIGZyb20gYSAiICsKKyAgICAgICAgICAgICAgICAiZ2l0IHJlcG9zaXRvcnkgdXNpbmcgc3NoLCB5b3UgbmVlZCB0byB1c2UgdGhlICIgKworICAgICAgICAgICAgICAgICJnaXQ6Ly8gcHJlZml4IHdpdGggcHJvdG9jb2w9c3NoIiwgdWQudXJsKQorCisgICAgICAgIGlmICdkb3dubG9hZGZpbGVuYW1lJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQuYmFzZW5hbWUgPSB1ZC5wYXJtWydkb3dubG9hZGZpbGVuYW1lJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVkLmJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5wYXRoKQorCisgICAgICAgIHVkLmxvY2FsZmlsZSA9IGRhdGEuZXhwYW5kKHVybGxpYi51bnF1b3RlKHVkLmJhc2VuYW1lKSwgZCkKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybHMiIiIKKworICAgICAgICB1cmxvID0gVVJJKHVkLnVybCkKKyAgICAgICAgYmFzZWNtZCA9ICdzZnRwIC1vQmF0Y2hNb2RlPXllcycKKyAgICAgICAgcG9ydCA9ICcnCisgICAgICAgIGlmIHVybG8ucG9ydDoKKyAgICAgICAgICAgIHBvcnQgPSAnLVAgJWQnICUgdXJsby5wb3J0CisgICAgICAgICAgICB1cmxvLnBvcnQgPSBOb25lCisKKyAgICAgICAgZGxkaXIgPSBkYXRhLmdldFZhcignRExfRElSJywgZCwgVHJ1ZSkKKyAgICAgICAgbHBhdGggPSBvcy5wYXRoLmpvaW4oZGxkaXIsIHVkLmxvY2FsZmlsZSkKKworICAgICAgICB1c2VyID0gJycKKyAgICAgICAgaWYgdXJsby51c2VyaW5mbzoKKyAgICAgICAgICAgIHVzZXIgPSB1cmxvLnVzZXJpbmZvICsgJ0AnCisKKyAgICAgICAgcGF0aCA9IHVybG8ucGF0aAorCisgICAgICAgICMgU3Vwb3BydCBVUklzIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIHdpdGgKKyAgICAgICAgIyB0aGUgdGlsZGUgc3ludGF4LiAoRS5nLiA8c2Z0cDovL2V4YW1wbGUuY29tL34vZm9vLmRpZmY+KS4KKyAgICAgICAgaWYgcGF0aFs6M10gPT0gJy9+Lyc6CisgICAgICAgICAgICBwYXRoID0gcGF0aFszOl0KKworICAgICAgICByZW1vdGUgPSAnJXMlczolcycgJSAodXNlciwgdXJsby5ob3N0bmFtZSwgcGF0aCkKKworICAgICAgICBjbWQgPSAnJXMgJXMgJXMgJXMnICUgKGJhc2VjbWQsIHBvcnQsIGNvbW1hbmRzLm1rYXJnKHJlbW90ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMubWthcmcobHBhdGgpKQorCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKKyAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkKQorICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3NoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTU3OGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zc2gucHkKQEAgLTAsMCArMSwxMjggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisnJycKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgU2VjdXJlIFNoZWxsIChTU0gpLCBhbmQgYXR0ZW1wdHMgdG8gY29tcGx5IHdpdGggdGhlCitJRVRGIHNlY3NoIGludGVybmV0IGRyYWZ0OgorICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy93Zy9zZWNzaC9kcmFmdC1pZXRmLXNlY3NoLXNjcC1zZnRwLXNzaC11cmkvCisKKyAgICBDdXJyZW50bHkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Z0cCBwYXJhbWV0ZXJzLCBhcyB0aGlzIHVzZXMgc2NwCisgICAgQWxzbyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAnZmluZ2VycHJpbnQnIGNvbm5lY3Rpb24gcGFyYW1ldGVyLgorCisgICAgUGxlYXNlIG5vdGUgdGhhdCAnLycgaXMgdXNlZCBhcyBob3N0LCBwYXRoIHNlcGFyYXRvciBub3QgJzonIGFzIHlvdSBtYXkgCisgICAgYmUgdXNlZCB0bywgYWxzbyAnficgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB1c2VyIEhPTUUsIGJ1dCBhZ2FpbiBhZnRlciAnLycKKyAgICAKKyAgICBFeGFtcGxlIFNSQ19VUkk6CisgICAgU1JDX1VSSSA9ICJzc2g6Ly91c2VyQGhvc3QuZXhhbXBsZS5jb20vZGlyL3BhdGgvZmlsZS50eHQiCisgICAgU1JDX1VSSSA9ICJzc2g6Ly91c2VyQGhvc3QuZXhhbXBsZS5jb20vfi9maWxlLnR4dCIKKycnJworCisjIENvcHlyaWdodCAoQykgMjAwNiAgT3BlbmVkSGFuZCBMdGQuCisjCisjCisjIEJhc2VkIGluIHBhcnQgb24gc3ZrLnB5OgorIyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMgICAgQmFzZWQgb24gc3ZuLnB5OgorIyAgICAgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgICAgICAgIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZToKKyMgICAgICAgICAgICBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworIworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHJlLCBvcworZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCisKK19fcGF0dGVybl9fID0gcmUuY29tcGlsZShyJycnCisgXHMqICAgICAgICAgICAgICAgICAjIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlCisgc3NoOi8vICAgICAgICAgICAgICAjIHNjaGVtZQorICggICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCB1c2VybmFtZS9wYXNzd29yZCBibG9jaworICAoP1A8dXNlcj5cUyspICAgICAgIyB1c2VybmFtZQorICAoOig/UDxwYXNzPlxTKykpPyAgIyBjb2xvbiBmb2xsb3dlZCBieSB0aGUgcGFzc3dvcmQgKG9wdGlvbmFsKQorICk/CisgKD9QPGNwYXJhbT4oO1teO10rKSopPyAgIyBjb25uZWN0aW9uIHBhcmFtZXRlcnMgYmxvY2sgKG9wdGlvbmFsKQorIEAKKyAoP1A8aG9zdD5cUys/KSAgICAgICAgICAjIG5vbi1ncmVlZHkgbWF0Y2ggb2YgdGhlIGhvc3QKKyAoOig/UDxwb3J0PlswLTldKykpPyAgICAjIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSBwb3J0IChvcHRpb25hbCkKKyAvCisgKD9QPHBhdGg+W147XSspICAgICAgICAgIyBwYXRoIG9uIHRoZSByZW1vdGUgc3lzdGVtLCBtYXkgYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgbWF5IGluY2x1ZGUgdGhlIHVzZSBvZiAnficgdG8gcmVmZXJlbmNlIHRoZSByZW1vdGUgaG9tZQorICAgICAgICAgICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5CisgKD9QPHNwYXJhbT4oO1teO10rKSopPyAgIyBwYXJhbWV0ZXJzIGJsb2NrIChvcHRpb25hbCkKKyAkCisnJycsIHJlLlZFUkJPU0UpCisKK2NsYXNzIFNTSChGZXRjaE1ldGhvZCk6CisgICAgJycnQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyB2aWEgU2VjdXJlIFNoZWxsJycnCisKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIHJldHVybiBfX3BhdHRlcm5fXy5tYXRjaCh1cmxkYXRhLnVybCkgIT0gTm9uZQorCisgICAgZGVmIHN1cHBvcnRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdXJsZGF0YS5wYXJtIGFuZCB1cmxkYXRhLnBhcm1bJ3Byb3RvY29sJ10gPT0gJ2dpdCc6CisgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuUGFyYW1ldGVyRXJyb3IoCisgICAgICAgICAgICAgICAgIkludmFsaWQgcHJvdG9jb2wgLSBpZiB5b3Ugd2lzaCB0byBmZXRjaCBmcm9tIGEgZ2l0ICIgKworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IHVzaW5nIHNzaCwgeW91IG5lZWQgdG8gdXNlICIgKworICAgICAgICAgICAgICAgICJnaXQ6Ly8gcHJlZml4IHdpdGggcHJvdG9jb2w9c3NoIiwgdXJsZGF0YS51cmwpCisgICAgICAgIG0gPSBfX3BhdHRlcm5fXy5tYXRjaCh1cmxkYXRhLnVybCkKKyAgICAgICAgcGF0aCA9IG0uZ3JvdXAoJ3BhdGgnKQorICAgICAgICBob3N0ID0gbS5ncm91cCgnaG9zdCcpCisgICAgICAgIHVybGRhdGEubG9jYWxwYXRoID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGgubm9ybXBhdGgocGF0aCkpKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICBkbGRpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorCisgICAgICAgIG0gPSBfX3BhdHRlcm5fXy5tYXRjaCh1cmxkYXRhLnVybCkKKyAgICAgICAgcGF0aCA9IG0uZ3JvdXAoJ3BhdGgnKQorICAgICAgICBob3N0ID0gbS5ncm91cCgnaG9zdCcpCisgICAgICAgIHBvcnQgPSBtLmdyb3VwKCdwb3J0JykKKyAgICAgICAgdXNlciA9IG0uZ3JvdXAoJ3VzZXInKQorICAgICAgICBwYXNzd29yZCA9IG0uZ3JvdXAoJ3Bhc3MnKQorCisgICAgICAgIGlmIHBvcnQ6CisgICAgICAgICAgICBwb3J0YXJnID0gJy1QICVzJyAlIHBvcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvcnRhcmcgPSAnJworCisgICAgICAgIGlmIHVzZXI6CisgICAgICAgICAgICBmciA9IHVzZXIKKyAgICAgICAgICAgIGlmIHBhc3N3b3JkOgorICAgICAgICAgICAgICAgIGZyICs9ICc6JXMnICUgcGFzc3dvcmQKKyAgICAgICAgICAgIGZyICs9ICdAJXMnICUgaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnIgPSBob3N0CisgICAgICAgIGZyICs9ICc6JXMnICUgcGF0aAorCisKKyAgICAgICAgaW1wb3J0IGNvbW1hbmRzCisgICAgICAgIGNtZCA9ICdzY3AgLUIgLXIgJXMgJXMgJXMvJyAlICgKKyAgICAgICAgICAgIHBvcnRhcmcsCisgICAgICAgICAgICBjb21tYW5kcy5ta2FyZyhmciksCisgICAgICAgICAgICBjb21tYW5kcy5ta2FyZyhkbGRpcikKKyAgICAgICAgKQorCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVybGRhdGEudXJsKQorCisgICAgICAgIHJ1bmZldGNoY21kKGNtZCwgZCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3ZuLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3ZuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzNjMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi9zdm4ucHkKQEAgLTAsMCArMSwxOTIgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbiBmb3Igc3ZuLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgICAgICAgIE1hcmNpbiBKdXN6a2lld2ljegorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2ltcG9ydCByZQorZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgTWlzc2luZ1BhcmFtZXRlckVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIFN2bihGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggYSBtb2R1bGUgb3IgbW9kdWxlcyBmcm9tIHN2biByZXBvc2l0b3JpZXMiIiIKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggc3ZuLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydzdm4nXQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBpbml0IHN2biBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdXJsIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCAibW9kdWxlIiBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCdtb2R1bGUnLCB1ZC51cmwpCisKKyAgICAgICAgdWQuYmFzZWNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9zdm4nLCBUcnVlKQorCisgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bIm1vZHVsZSJdCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aHMgdG8gc3ZuIGNoZWNrb3V0cworICAgICAgICByZWxwYXRoID0gc2VsZi5fc3RyaXBfbGVhZGluZ19zbGFzaGVzKHVkLnBhdGgpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtTVk5ESVJ9JywgZCksIHVkLmhvc3QsIHJlbHBhdGgpCisgICAgICAgIHVkLm1vZGRpciA9IG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIHVkLm1vZHVsZSkKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGlmICdyZXYnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9IHVkLnBhcm1bJ3JldiddCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzXyVzXyVzXyVzXy50YXIuZ3onICUgKHVkLm1vZHVsZS5yZXBsYWNlKCcvJywgJy4nKSwgdWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKSwgdWQucmV2aXNpb24pLCBkKQorCisgICAgZGVmIF9idWlsZHN2bmNvbW1hbmQoc2VsZiwgdWQsIGQsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGQgdXAgYW4gc3ZuIGNvbW1hbmRsaW5lIGJhc2VkIG9uIHVkCisgICAgICAgIGNvbW1hbmQgaXMgImZldGNoIiwgInVwZGF0ZSIsICJpbmZvIgorICAgICAgICAiIiIKKworICAgICAgICBwcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdzdm4nKQorCisgICAgICAgIHN2bl9yc2ggPSBOb25lCisgICAgICAgIGlmIHByb3RvID09ICJzdm4rc3NoIiBhbmQgInJzaCIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHN2bl9yc2ggPSB1ZC5wYXJtWyJyc2giXQorCisgICAgICAgIHN2bnJvb3QgPSB1ZC5ob3N0ICsgdWQucGF0aAorCisgICAgICAgIG9wdGlvbnMgPSBbXQorCisgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItLW5vLWF1dGgtY2FjaGUiKQorCisgICAgICAgIGlmIHVkLnVzZXI6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLS11c2VybmFtZSAlcyIgJSB1ZC51c2VyKQorCisgICAgICAgIGlmIHVkLnBzd2Q6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLS1wYXNzd29yZCAlcyIgJSB1ZC5wc3dkKQorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gImluZm8iOgorICAgICAgICAgICAgc3ZuY21kID0gIiVzIGluZm8gJXMgJXM6Ly8lcy8lcy8iICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgc3Zucm9vdCwgdWQubW9kdWxlKQorICAgICAgICBlbGlmIGNvbW1hbmQgPT0gImxvZzEiOgorICAgICAgICAgICAgc3ZuY21kID0gIiVzIGxvZyAtLWxpbWl0IDEgJXMgJXM6Ly8lcy8lcy8iICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgc3Zucm9vdCwgdWQubW9kdWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3VmZml4ID0gIiIKKyAgICAgICAgICAgIGlmIHVkLnJldmlzaW9uOgorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKyAgICAgICAgICAgICAgICBzdWZmaXggPSAiQCVzIiAlICh1ZC5yZXZpc2lvbikKKworICAgICAgICAgICAgaWYgY29tbWFuZCA9PSAiZmV0Y2giOgorICAgICAgICAgICAgICAgIHRyYW5zcG9ydHVzZXIgPSB1ZC5wYXJtLmdldCgidHJhbnNwb3J0dXNlciIsICIiKQorICAgICAgICAgICAgICAgIHN2bmNtZCA9ICIlcyBjbyAlcyAlczovLyVzJXMvJXMlcyAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCB0cmFuc3BvcnR1c2VyLCBzdm5yb290LCB1ZC5tb2R1bGUsIHN1ZmZpeCwgdWQubW9kdWxlKQorICAgICAgICAgICAgZWxpZiBjb21tYW5kID09ICJ1cGRhdGUiOgorICAgICAgICAgICAgICAgIHN2bmNtZCA9ICIlcyB1cGRhdGUgJXMiICUgKHVkLmJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJJbnZhbGlkIHN2biBjb21tYW5kICVzIiAlIGNvbW1hbmQsIHVkLnVybCkKKworICAgICAgICBpZiBzdm5fcnNoOgorICAgICAgICAgICAgc3ZuY21kID0gInN2bl9SU0g9XCIlc1wiICVzIiAlIChzdm5fcnNoLCBzdm5jbWQpCisKKyAgICAgICAgcmV0dXJuIHN2bmNtZAorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaDogY2hlY2tpbmcgZm9yIG1vZHVsZSBkaXJlY3RvcnkgJyIgKyB1ZC5tb2RkaXIgKyAiJyIpCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih1ZC5tb2RkaXIsICcuc3ZuJyksIG9zLlJfT0spOgorICAgICAgICAgICAgc3ZudXBkYXRlY21kID0gc2VsZi5fYnVpbGRzdm5jb21tYW5kKHVkLCBkLCAidXBkYXRlIikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGUgIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgdXBkYXRlIHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBhdHRlbXB0IHRvIHJ1biBzdm4gdXBncmFkZSBmaXJzdCBpbiBjYXNlIGl0cyBhbiBvbGRlciB3b3JraW5nIGZvcm1hdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHVwZ3JhZGUiLCBkKQorICAgICAgICAgICAgZXhjZXB0IEZldGNoRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgc3ZudXBkYXRlY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHN2bnVwZGF0ZWNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoc3ZudXBkYXRlY21kLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ZuZmV0Y2hjbWQgPSBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJmZXRjaCIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBzdm5mZXRjaGNtZCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBzdm5mZXRjaGNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoc3ZuZmV0Y2hjbWQsIGQpCisKKyAgICAgICAgc2NtZGF0YSA9IHVkLnBhcm0uZ2V0KCJzY21kYXRhIiwgIiIpCisgICAgICAgIGlmIHNjbWRhdGEgPT0gImtlZXAiOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICItLWV4Y2x1ZGUgJy5zdm4nIgorCisgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgIyB0YXIgdGhlbSB1cCB0byBhIGRlZmluZWQgZmlsZW5hbWUKKyAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAlcyAtY3pmICVzICVzIiAlICh0YXJfZmxhZ3MsIHVkLmxvY2FscGF0aCwgdWQubW9kdWxlKSwgZCwgY2xlYW51cCA9IFt1ZC5sb2NhbHBhdGhdKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiIENsZWFuIFNWTiBzcGVjaWZpYyBmaWxlcyBhbmQgZGlycyAiIiIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubW9kZGlyLCBUcnVlKQorICAgICAgICAKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3JldmlzaW9uX2tleShzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSB1bmlxdWUga2V5IGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gInN2bjoiICsgdWQubW9kZGlyCisKKyAgICBkZWYgX2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxhdGVzdCB1cHN0cmVhbSByZXZpc2lvbiBudW1iZXIKKyAgICAgICAgIiIiCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJsb2cxIikpCisKKyAgICAgICAgb3V0cHV0ID0gcnVuZmV0Y2hjbWQoIkxBTkc9QyBMQ19BTEw9QyAiICsgc2VsZi5fYnVpbGRzdm5jb21tYW5kKHVkLCBkLCAibG9nMSIpLCBkLCBUcnVlKQorCisgICAgICAgICMgc2tpcCB0aGUgZmlyc3QgbGluZSwgYXMgcGVyIG91dHB1dCBvZiBzdm4gbG9nCisgICAgICAgICMgdGhlbiB3ZSBleHBlY3QgdGhlIHJldmlzaW9uIG9uIHRoZSAybmQgbGluZQorICAgICAgICByZXZpc2lvbiA9IHJlLnNlYXJjaCgnXnIoWzAtOV0qKScsIG91dHB1dC5zcGxpdGxpbmVzKClbMV0pLmdyb3VwKDEpCisKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uCisKKyAgICBkZWYgc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgc29ydGFibGUgcmV2aXNpb24gbnVtYmVyIHdoaWNoIGluIG91ciBjYXNlIGlzIHRoZSByZXZpc2lvbiBudW1iZXIKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIEZhbHNlLCBzZWxmLl9idWlsZF9yZXZpc2lvbih1ZCwgZCkKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi93Z2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmE4OTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL2ZldGNoMi93Z2V0LnB5CkBAIC0wLDAgKzEsNTQxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2ltcG9ydCByZQoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgdXJsbGliCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCisKK2NsYXNzIFdnZXQoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIHVybHMgdmlhICd3Z2V0JyIiIgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCB3Z2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydodHRwJywgJ2h0dHBzJywgJ2Z0cCddCisKKyAgICBkZWYgcmVjb21tZW5kc19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiAncHJvdG9jb2wnIGluIHVkLnBhcm06CisgICAgICAgICAgICBpZiB1ZC5wYXJtWydwcm90b2NvbCddID09ICdnaXQnOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigiSW52YWxpZCBwcm90b2NvbCAtIGlmIHlvdSB3aXNoIHRvIGZldGNoIGZyb20gYSBnaXQgcmVwb3NpdG9yeSB1c2luZyBodHRwLCB5b3UgbmVlZCB0byBpbnN0ZWFkIHVzZSB0aGUgZ2l0Oi8vIHByZWZpeCB3aXRoIHByb3RvY29sPWh0dHAiLCB1ZC51cmwpCisKKyAgICAgICAgaWYgJ2Rvd25sb2FkZmlsZW5hbWUnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5iYXNlbmFtZSA9IHVkLnBhcm1bJ2Rvd25sb2FkZmlsZW5hbWUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQuYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLnBhdGgpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQodXJsbGliLnVucXVvdGUodWQuYmFzZW5hbWUpLCBkKQorCisgICAgICAgIHNlbGYuYmFzZWNtZCA9IGQuZ2V0VmFyKCJGRVRDSENNRF93Z2V0IiwgVHJ1ZSkgb3IgIi91c3IvYmluL2VudiB3Z2V0IC10IDIgLVQgMzAgLW52IC0tcGFzc2l2ZS1mdHAgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSIKKworICAgIGRlZiBfcnVud2dldChzZWxmLCB1ZCwgZCwgY29tbWFuZCwgcXVpZXQpOgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2hpbmcgJXMgdXNpbmcgY29tbWFuZCAnJXMnIiAlICh1ZC51cmwsIGNvbW1hbmQpKQorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY29tbWFuZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQoY29tbWFuZCwgZCwgcXVpZXQpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmxzIiIiCisKKyAgICAgICAgZmV0Y2hjbWQgPSBzZWxmLmJhc2VjbWQKKworICAgICAgICBpZiAnZG93bmxvYWRmaWxlbmFtZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRsZGlyICsgb3Muc2VwICsgdWQubG9jYWxmaWxlKSkKKyAgICAgICAgICAgIGZldGNoY21kICs9ICIgLU8gIiArIGRsZGlyICsgb3Muc2VwICsgdWQubG9jYWxmaWxlCisKKyAgICAgICAgdXJpID0gdWQudXJsLnNwbGl0KCI7IilbMF0KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgICAgICMgZmlsZSBleGlzdHMsIGJ1dCB3ZSBkaWRudCBjb21wbGV0ZSBpdC4uIHRyeWluZyBhZ2Fpbi4uCisgICAgICAgICAgICBmZXRjaGNtZCArPSBkLmV4cGFuZCgiIC1jIC1QICR7RExfRElSfSAnJXMnIiAlIHVyaSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZldGNoY21kICs9IGQuZXhwYW5kKCIgLVAgJHtETF9ESVJ9ICclcyciICUgdXJpKQorCisgICAgICAgIHNlbGYuX3J1bndnZXQodWQsIGQsIGZldGNoY21kLCBGYWxzZSkKKworICAgICAgICAjIFNhbml0eSBjaGVjayBzaW5jZSB3Z2V0IGNhbiBwcmV0ZW5kIGl0IHN1Y2NlZWQgd2hlbiBpdCBkaWRuJ3QKKyAgICAgICAgIyBBbHNvLCB0aGlzIHVzZWQgdG8gaGFwcGVuIGlmIHNvdXJjZWZvcmdlIHNlbnQgdXMgdG8gdGhlIG1pcnJvciBwYWdlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiVGhlIGZldGNoIGNvbW1hbmQgcmV0dXJuZWQgc3VjY2VzcyBmb3IgdXJsICVzIGJ1dCAlcyBkb2Vzbid0IGV4aXN0PyEiICUgKHVyaSwgdWQubG9jYWxwYXRoKSwgdXJpKQorCisgICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZSh1ZC5sb2NhbHBhdGgpID09IDA6CisgICAgICAgICAgICBvcy5yZW1vdmUodWQubG9jYWxwYXRoKQorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiVGhlIGZldGNoIG9mICVzIHJlc3VsdGVkIGluIGEgemVybyBzaXplIGZpbGU/ISBEZWxldGluZyBhbmQgZmFpbGluZyBzaW5jZSB0aGlzIGlzbid0IHJpZ2h0LiIgJSAodXJpKSwgdXJpKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVkLCBkKToKKyAgICAgICAgaW1wb3J0IHVybGxpYjIsIHNvY2tldCwgaHR0cGxpYgorICAgICAgICBmcm9tIHVybGxpYiBpbXBvcnQgYWRkaW5mb3VybAorICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hDb25uZWN0aW9uQ2FjaGUKKworICAgICAgICBjbGFzcyBIVFRQQ29ubmVjdGlvbkNhY2hlKGh0dHBsaWIuSFRUUENvbm5lY3Rpb24pOgorICAgICAgICAgICAgaWYgZmV0Y2guY29ubmVjdGlvbl9jYWNoZToKKyAgICAgICAgICAgICAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgIiIiQ29ubmVjdCB0byB0aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gX19pbml0X18uIiIiCisKKyAgICAgICAgICAgICAgICAgICAgc29jayA9IGZldGNoLmNvbm5lY3Rpb25fY2FjaGUuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisgICAgICAgICAgICAgICAgICAgIGlmIHNvY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCwgc2VsZi5zb3VyY2VfYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUuYWRkX2Nvbm5lY3Rpb24oc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHNlbGYuc29jaykKKworICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl90dW5uZWxfaG9zdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R1bm5lbCgpCisKKyAgICAgICAgY2xhc3MgQ2FjaGVIVFRQSGFuZGxlcih1cmxsaWIyLkhUVFBIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBodHRwX29wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kb19vcGVuKEhUVFBDb25uZWN0aW9uQ2FjaGUsIHJlcSkKKworICAgICAgICAgICAgZGVmIGRvX29wZW4oc2VsZiwgaHR0cF9jbGFzcywgcmVxKToKKyAgICAgICAgICAgICAgICAiIiJSZXR1cm4gYW4gYWRkaW5mb3VybCBvYmplY3QgZm9yIHRoZSByZXF1ZXN0LCB1c2luZyBodHRwX2NsYXNzLgorCisgICAgICAgICAgICAgICAgaHR0cF9jbGFzcyBtdXN0IGltcGxlbWVudCB0aGUgSFRUUENvbm5lY3Rpb24gQVBJIGZyb20gaHR0cGxpYi4KKyAgICAgICAgICAgICAgICBUaGUgYWRkaW5mb3VybCByZXR1cm4gdmFsdWUgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0LiAgSXQgYWxzbworICAgICAgICAgICAgICAgIGhhcyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIGluY2x1ZGluZzoKKyAgICAgICAgICAgICAgICAgICAgLSBpbmZvKCk6IHJldHVybiBhIG1pbWV0b29scy5NZXNzYWdlIG9iamVjdCBmb3IgdGhlIGhlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgLSBnZXR1cmwoKTogcmV0dXJuIHRoZSBvcmlnaW5hbCByZXF1ZXN0IFVSTAorICAgICAgICAgICAgICAgICAgICAtIGNvZGU6IEhUVFAgc3RhdHVzIGNvZGUKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICBob3N0ID0gcmVxLmdldF9ob3N0KCkKKyAgICAgICAgICAgICAgICBpZiBub3QgaG9zdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdXJsbGxpYjIuVVJMRXJyb3IoJ25vIGhvc3QgZ2l2ZW4nKQorCisgICAgICAgICAgICAgICAgaCA9IGh0dHBfY2xhc3MoaG9zdCwgdGltZW91dD1yZXEudGltZW91dCkgIyB3aWxsIHBhcnNlIGhvc3Q6cG9ydAorICAgICAgICAgICAgICAgIGguc2V0X2RlYnVnbGV2ZWwoc2VsZi5fZGVidWdsZXZlbCkKKworICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgICAgICAgICBoZWFkZXJzLnVwZGF0ZShkaWN0KChrLCB2KSBmb3IgaywgdiBpbiByZXEuaGVhZGVycy5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gaGVhZGVycykpCisKKyAgICAgICAgICAgICAgICAjIFdlIHdhbnQgdG8gbWFrZSBhbiBIVFRQLzEuMSByZXF1ZXN0LCBidXQgdGhlIGFkZGluZm91cmwKKyAgICAgICAgICAgICAgICAjIGNsYXNzIGlzbid0IHByZXBhcmVkIHRvIGRlYWwgd2l0aCBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAjIEl0IHdpbGwgdHJ5IHRvIHJlYWQgYWxsIHJlbWFpbmluZyBkYXRhIGZyb20gdGhlIHNvY2tldCwKKyAgICAgICAgICAgICAgICAjIHdoaWNoIHdpbGwgYmxvY2sgd2hpbGUgdGhlIHNlcnZlciB3YWl0cyBmb3IgdGhlIG5leHQgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICAjIFNvIG1ha2Ugc3VyZSB0aGUgY29ubmVjdGlvbiBnZXRzIGNsb3NlZCBhZnRlciB0aGUgKG9ubHkpCisgICAgICAgICAgICAgICAgIyByZXF1ZXN0LgorCisgICAgICAgICAgICAgICAgIyBEb24ndCBjbG9zZSBjb25uZWN0aW9uIHdoZW4gY29ubmVjdGlvbl9jYWNoZSBpcyBlbmFibGVkLAorICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgTm9uZTogCisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbIkNvbm5lY3Rpb24iXSA9ICJjbG9zZSIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyJDb25uZWN0aW9uIl0gPSAiS2VlcC1BbGl2ZSIgIyBXb3JrcyBmb3IgSFRUUC8xLjAKKworICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBkaWN0KAorICAgICAgICAgICAgICAgICAgICAobmFtZS50aXRsZSgpLCB2YWwpIGZvciBuYW1lLCB2YWwgaW4gaGVhZGVycy5pdGVtcygpKQorCisgICAgICAgICAgICAgICAgaWYgcmVxLl90dW5uZWxfaG9zdDoKKyAgICAgICAgICAgICAgICAgICAgdHVubmVsX2hlYWRlcnMgPSB7fQorICAgICAgICAgICAgICAgICAgICBwcm94eV9hdXRoX2hkciA9ICJQcm94eS1BdXRob3JpemF0aW9uIgorICAgICAgICAgICAgICAgICAgICBpZiBwcm94eV9hdXRoX2hkciBpbiBoZWFkZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgdHVubmVsX2hlYWRlcnNbcHJveHlfYXV0aF9oZHJdID0gaGVhZGVyc1twcm94eV9hdXRoX2hkcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgbm90IGJlIHNlbnQgdG8gb3JpZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBoZWFkZXJzW3Byb3h5X2F1dGhfaGRyXQorICAgICAgICAgICAgICAgICAgICBoLnNldF90dW5uZWwocmVxLl90dW5uZWxfaG9zdCwgaGVhZGVycz10dW5uZWxfaGVhZGVycykKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5nZXRfc2VsZWN0b3IoKSwgcmVxLmRhdGEsIGhlYWRlcnMpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOiAjIFhYWCB3aGF0IGVycm9yPworICAgICAgICAgICAgICAgICAgICAjIERvbid0IGNsb3NlIGNvbm5lY3Rpb24gd2hlbiBjYWNoZSBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICBpZiBmZXRjaC5jb25uZWN0aW9uX2NhY2hlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdXJsbGliMi5VUkxFcnJvcihlcnIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoYnVmZmVyaW5nPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6ICMgYnVmZmVyaW5nIGt3IG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBoLmdldHJlc3BvbnNlKCkKKworICAgICAgICAgICAgICAgICMgUGljayBhcGFydCB0aGUgSFRUUFJlc3BvbnNlIG9iamVjdCB0byBnZXQgdGhlIGFkZGluZm91cmwKKyAgICAgICAgICAgICAgICAjIG9iamVjdCBpbml0aWFsaXplZCBwcm9wZXJseS4KKworICAgICAgICAgICAgICAgICMgV3JhcCB0aGUgSFRUUFJlc3BvbnNlIG9iamVjdCBpbiBzb2NrZXQncyBmaWxlIG9iamVjdCBhZGFwdGVyCisgICAgICAgICAgICAgICAgIyBmb3IgV2luZG93cy4gIFRoYXQgYWRhcHRlciBjYWxscyByZWN2KCksIHNvIGRlbGVnYXRlIHJlY3YoKQorICAgICAgICAgICAgICAgICMgdG8gcmVhZCgpLiAgVGhpcyB3ZWlyZCB3cmFwcGluZyBhbGxvd3MgdGhlIHJldHVybmVkIG9iamVjdCB0bworICAgICAgICAgICAgICAgICMgaGF2ZSByZWFkbGluZSgpIGFuZCByZWFkbGluZXMoKSBtZXRob2RzLgorCisgICAgICAgICAgICAgICAgIyBYWFggSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGV4dHJhY3QgdGhlIHJlYWQgYnVmZmVyaW5nIGNvZGUKKyAgICAgICAgICAgICAgICAjIG91dCBvZiBzb2NrZXQuX2ZpbGVvYmplY3QoKSBhbmQgaW50byBhIGJhc2UgY2xhc3MuCisgICAgICAgICAgICAgICAgci5yZWN2ID0gci5yZWFkCisKKyAgICAgICAgICAgICAgICAjIG5vIGRhdGEsIGp1c3QgaGF2ZSB0byByZWFkCisgICAgICAgICAgICAgICAgci5yZWFkKCkKKyAgICAgICAgICAgICAgICBjbGFzcyBmcF9kdW1teShvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgcmVzcCA9IGFkZGluZm91cmwoZnBfZHVtbXkoKSwgci5tc2csIHJlcS5nZXRfZnVsbF91cmwoKSkKKyAgICAgICAgICAgICAgICByZXNwLmNvZGUgPSByLnN0YXR1cworICAgICAgICAgICAgICAgIHJlc3AubXNnID0gci5yZWFzb24KKworICAgICAgICAgICAgICAgICMgQ2xvc2UgY29ubmVjdGlvbiB3aGVuIHNlcnZlciByZXF1ZXN0IGl0LgorICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmICdDb25uZWN0aW9uJyBpbiByLm1zZyBhbmQgci5tc2dbJ0Nvbm5lY3Rpb24nXSA9PSAnY2xvc2UnOgorICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2guY29ubmVjdGlvbl9jYWNoZS5yZW1vdmVfY29ubmVjdGlvbihoLmhvc3QsIGgucG9ydCkKKworICAgICAgICAgICAgICAgIHJldHVybiByZXNwCisKKyAgICAgICAgZGVmIGV4cG9ydF9wcm94aWVzKGQpOgorICAgICAgICAgICAgdmFyaWFibGVzID0gWydodHRwX3Byb3h5JywgJ0hUVFBfUFJPWFknLCAnaHR0cHNfcHJveHknLCAnSFRUUFNfUFJPWFknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmdHBfcHJveHknLCAnRlRQX1BST1hZJywgJ25vX3Byb3h5JywgJ05PX1BST1hZJ10KKyAgICAgICAgICAgIGV4cG9ydGVkID0gRmFsc2UKKworICAgICAgICAgICAgZm9yIHYgaW4gdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIGlmIHYgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZfcHJveHkgPSBkLmdldFZhcih2LCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiB2X3Byb3h5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblt2XSA9IHZfcHJveHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkID0gVHJ1ZQorCisgICAgICAgICAgICByZXR1cm4gZXhwb3J0ZWQKKworICAgICAgICBkZWYgaGVhZF9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIkhFQUQiCisKKyAgICAgICAgZXhwb3J0ZWRfcHJveGllcyA9IGV4cG9ydF9wcm94aWVzKGQpCisKKyAgICAgICAgIyBYWFg6IFNpbmNlIFB5dGhvbiAyLjcuOSBzc2wgY2VydCB2YWxpZGF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICAjIHNlZSBQRVAtMDQ3NiwgdGhpcyBjYXVzZXMgdmVyaWZpY2F0aW9uIGVycm9ycyBvbiBzb21lIGh0dHBzIHNlcnZlcnMKKyAgICAgICAgIyBzbyBkaXNhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgIGltcG9ydCBzc2wKKyAgICAgICAgc3NsX2NvbnRleHQgPSBOb25lCisgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQnKToKKyAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0KCkKKworICAgICAgICBpZiBleHBvcnRlZF9wcm94aWVzID09IFRydWUgYW5kIHNzbF9jb250ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5Qcm94eUhhbmRsZXIsIENhY2hlSFRUUEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIHVybGxpYjIuSFRUUFNIYW5kbGVyKGNvbnRleHQ9c3NsX2NvbnRleHQpKQorICAgICAgICBlbGlmIGV4cG9ydGVkX3Byb3hpZXMgPT0gRmFsc2UgYW5kIHNzbF9jb250ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoQ2FjaGVIVFRQSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdXJsbGliMi5IVFRQU0hhbmRsZXIoY29udGV4dD1zc2xfY29udGV4dCkpCisgICAgICAgIGVsaWYgZXhwb3J0ZWRfcHJveGllcyA9PSBUcnVlIGFuZCBzc2xfY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5Qcm94eUhhbmRsZXIsIENhY2hlSFRUUEhhbmRsZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihDYWNoZUhUVFBIYW5kbGVyKQorCisgICAgICAgIHVybGxpYjIuUmVxdWVzdC5nZXRfbWV0aG9kID0gaGVhZF9tZXRob2QKKyAgICAgICAgdXJsbGliMi5pbnN0YWxsX29wZW5lcihvcGVuZXIpCisKKyAgICAgICAgdXJpID0gdWQudXJsLnNwbGl0KCI7IilbMF0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4odXJpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcGFyc2VfcGF0aChzZWxmLCByZWdleCwgcyk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIGFuZCBncm91cCBuYW1lLCB2ZXJzaW9uIGFuZCBhcmNoaXZlIHR5cGUgaW4gdGhlIGdpdmVuIHN0cmluZyBzCisgICAgICAgICIiIgorCisgICAgICAgIG0gPSByZWdleC5zZWFyY2gocykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHBuYW1lID0gJycKKyAgICAgICAgICAgIHB2ZXIgPSAnJworICAgICAgICAgICAgcHR5cGUgPSAnJworCisgICAgICAgICAgICBtZGljdCA9IG0uZ3JvdXBkaWN0KCkKKyAgICAgICAgICAgIGlmICduYW1lJyBpbiBtZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgcG5hbWUgPSBtZGljdFsnbmFtZSddCisgICAgICAgICAgICBpZiAncHZlcicgaW4gbWRpY3Qua2V5cygpOgorICAgICAgICAgICAgICAgIHB2ZXIgPSBtZGljdFsncHZlciddCisgICAgICAgICAgICBpZiAndHlwZScgaW4gbWRpY3Qua2V5cygpOgorICAgICAgICAgICAgICAgIHB0eXBlID0gbWRpY3RbJ3R5cGUnXQorCisgICAgICAgICAgICBiYi5kZWJ1ZygzLCAiX3BhcnNlX3BhdGg6ICVzLCAlcywgJXMiICUgKHBuYW1lLCBwdmVyLCBwdHlwZSkpCisKKyAgICAgICAgICAgIHJldHVybiAocG5hbWUsIHB2ZXIsIHB0eXBlKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX21vZGVsYXRlX3ZlcnNpb24oc2VsZiwgdmVyc2lvbik6CisgICAgICAgIGlmIHZlcnNpb25bMF0gaW4gWycuJywgJy0nXToKKyAgICAgICAgICAgIGlmIHZlcnNpb25bMV0uaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzFdICsgdmVyc2lvblswXSArIHZlcnNpb25bMjpsZW4odmVyc2lvbildCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzE6bGVuKHZlcnNpb24pXQorCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJy0nLCAnLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJ18nLCAnLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJyhyYykrJywgJy4xMDAwLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJyhiZXRhKSsnLCAnLjEwMC4nLCB2ZXJzaW9uKQorICAgICAgICB2ZXJzaW9uID0gcmUuc3ViKCcoYWxwaGEpKycsICcuMTAuJywgdmVyc2lvbikKKyAgICAgICAgaWYgdmVyc2lvblswXSA9PSAndic6CisgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvblsxOmxlbih2ZXJzaW9uKV0KKyAgICAgICAgcmV0dXJuIHZlcnNpb24KKworICAgIGRlZiBfdmVyY21wKHNlbGYsIG9sZCwgbmV3KToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHdoZXRoZXIgJ25ldycgaXMgbmV3ZXIgdGhhbiAnb2xkJyB2ZXJzaW9uLiBXZSB1c2UgZXhpc3RpbmcgdmVyY21wKCkgZm9yIHRoZQorICAgICAgICBwdXJwb3NlLiBQRSBpcyBjbGVhcmVkIGluIGNvbXBhcmlzb24gYXMgaXQncyBub3QgZm9yIGJ1aWxkLCBhbmQgUFIgaXMgY2xlYXJlZCB0b28KKyAgICAgICAgZm9yIHNpbXBsaWNpdHkgYXMgaXQncyBzb21laG93IGRpZmZpY3VsdCB0byBnZXQgZnJvbSB2YXJpb3VzIHVwc3RyZWFtIGZvcm1hdAorICAgICAgICAiIiIKKworICAgICAgICAob2xkcG4sIG9sZHB2LCBvbGRzdWZmaXgpID0gb2xkCisgICAgICAgIChuZXdwbiwgbmV3cHYsIG5ld3N1ZmZpeCkgPSBuZXcKKworICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgZm9yIGEgbmV3IHN1ZmZpeCB0eXBlIHRoYXQgd2UgaGF2ZSBuZXZlciBoZWFyZCBvZiBiZWZvcmUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIChuZXdzdWZmaXgpOgorICAgICAgICAgICAgbSA9IHNlbGYuc3VmZml4X3JlZ2V4X2NvbXAuc2VhcmNoKG5ld3N1ZmZpeCkKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzIGhhcyBhIHBvc3NpYmxlIHVua25vd24gc3VmZml4OiAlcyIgJSAobmV3cG4sIG5ld3N1ZmZpeCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIiIiCisgICAgICAgIE5vdCBvdXIgcGFja2FnZSBzbyBpZ25vcmUgaXQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9sZHBuICE9IG5ld3BuOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgb2xkcHYgPSBzZWxmLl9tb2RlbGF0ZV92ZXJzaW9uKG9sZHB2KQorICAgICAgICBuZXdwdiA9IHNlbGYuX21vZGVsYXRlX3ZlcnNpb24obmV3cHYpCisKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLnZlcmNtcCgoIjAiLCBvbGRwdiwgIiIpLCAoIjAiLCBuZXdwdiwgIiIpKQorCisgICAgZGVmIF9mZXRjaF9pbmRleChzZWxmLCB1cmksIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJ1biBmZXRjaCBjaGVja3N0YXR1cyB0byBnZXQgZGlyZWN0b3J5IGluZm9ybWF0aW9uCisgICAgICAgICIiIgorICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKworICAgICAgICBhZ2VudCA9ICJNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS45LjIuMTIpIEdlY2tvLzIwMTAxMDI3IFVidW50dS85LjEwIChrYXJtaWMpIEZpcmVmb3gvMy42LjEyIgorICAgICAgICBmZXRjaGNtZCA9IHNlbGYuYmFzZWNtZAorICAgICAgICBmZXRjaGNtZCArPSAiIC1PICIgKyBmLm5hbWUgKyAiIC0tdXNlci1hZ2VudD0nIiArIGFnZW50ICsgIicgJyIgKyB1cmkgKyAiJyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVud2dldCh1ZCwgZCwgZmV0Y2hjbWQsIFRydWUpCisgICAgICAgICAgICBmZXRjaHJlc3VsdCA9IGYucmVhZCgpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGZldGNocmVzdWx0ID0gIiIKKworICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGZldGNocmVzdWx0CisKKyAgICBkZWYgX2NoZWNrX2xhdGVzdF92ZXJzaW9uKHNlbGYsIHVybCwgcGFja2FnZSwgcGFja2FnZV9yZWdleCwgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgcGFja2FnZSBpbnNpZGUgYSBnaXZlbiBkaXJlY3RvcnkgcGF0aAorICAgICAgICBJZiBlcnJvciBvciBubyB2ZXJzaW9uLCByZXR1cm4gIiIKKyAgICAgICAgIiIiCisgICAgICAgIHZhbGlkID0gMAorICAgICAgICB2ZXJzaW9uID0gWycnLCAnJywgJyddCisKKyAgICAgICAgYmIuZGVidWcoMywgIlZlcnNpb25VUkw6ICVzIiAlICh1cmwpKQorICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChzZWxmLl9mZXRjaF9pbmRleCh1cmwsIHVkLCBkKSkKKyAgICAgICAgaWYgbm90IHNvdXA6CisgICAgICAgICAgICBiYi5kZWJ1ZygzLCAiKioqICVzIE5PIFNPVVAiICUgKHVybCkpCisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICBmb3IgbGluZSBpbiBzb3VwLmZpbmRfYWxsKCdhJywgaHJlZj1UcnVlKToKKyAgICAgICAgICAgIGJiLmRlYnVnKDMsICJsaW5lWydocmVmJ10gPSAnJXMnIiAlIChsaW5lWydocmVmJ10pKQorICAgICAgICAgICAgYmIuZGVidWcoMywgImxpbmUgPSAnJXMnIiAlIChzdHIobGluZSkpKQorCisgICAgICAgICAgICBuZXd2ZXIgPSBzZWxmLl9wYXJzZV9wYXRoKHBhY2thZ2VfcmVnZXgsIGxpbmVbJ2hyZWYnXSkKKyAgICAgICAgICAgIGlmIG5vdCBuZXd2ZXI6CisgICAgICAgICAgICAgICAgbmV3dmVyID0gc2VsZi5fcGFyc2VfcGF0aChwYWNrYWdlX3JlZ2V4LCBzdHIobGluZSkpCisKKyAgICAgICAgICAgIGlmIG5ld3ZlcjoKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygzLCAiVXBzdHJlYW0gdmVyc2lvbiBmb3VuZDogJXMiICUgbmV3dmVyWzFdKQorICAgICAgICAgICAgICAgIGlmIHZhbGlkID09IDA6CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBuZXd2ZXIKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSAxCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl92ZXJjbXAodmVyc2lvbiwgbmV3dmVyKSA8IDA6CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBuZXd2ZXIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcHVwdmVyID0gcmUuc3ViKCdfJywgJy4nLCB2ZXJzaW9uWzFdKQorCisgICAgICAgIGJiLmRlYnVnKDMsICIqKiogJXMgLT4gVXBzdHJlYW1WZXJzaW9uID0gJXMgKEN1cnJlbnRWZXJzaW9uID0gJXMpIiAlCisgICAgICAgICAgICAgICAgKHBhY2thZ2UsIHB1cHZlciBvciAiTi9BIiwgY3VycmVudF92ZXJzaW9uWzFdKSkKKworICAgICAgICBpZiB2YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBwdXB2ZXIKKworICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBfY2hlY2tfbGF0ZXN0X3ZlcnNpb25fYnlfZGlyKHNlbGYsIGRpcnZlciwgcGFja2FnZSwgcGFja2FnZV9yZWdleCwKKyAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIFNjYW4gZXZlcnkgZGlyZWN0b3J5IGluIG9yZGVyIHRvIGdldCB1cHN0cmVhbSB2ZXJzaW9uLgorICAgICAgICAiIiIKKyAgICAgICAgdmVyc2lvbl9kaXIgPSBbJycsICcnLCAnJ10KKyAgICAgICAgdmVyc2lvbiA9IFsnJywgJycsICcnXQorCisgICAgICAgIGRpcnZlcl9yZWdleCA9IHJlLmNvbXBpbGUoIihcRCopKChcZCtbXC5cLV9dKSsoXGQrKSkiKQorICAgICAgICBzID0gZGlydmVyX3JlZ2V4LnNlYXJjaChkaXJ2ZXIpCisgICAgICAgIGlmIHM6CisgICAgICAgICAgICB2ZXJzaW9uX2RpclsxXSA9IHMuZ3JvdXAoMikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZlcnNpb25fZGlyWzFdID0gZGlydmVyCisKKyAgICAgICAgZGlyc191cmkgPSBiYi5mZXRjaC5lbmNvZGV1cmwoW3VkLnR5cGUsIHVkLmhvc3QsCisgICAgICAgICAgICAgICAgdWQucGF0aC5zcGxpdChkaXJ2ZXIpWzBdLCB1ZC51c2VyLCB1ZC5wc3dkLCB7fV0pCisgICAgICAgIGJiLmRlYnVnKDMsICJEaXJVUkw6ICVzLCAlcyIgJSAoZGlyc191cmksIHBhY2thZ2UpKQorCisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYuX2ZldGNoX2luZGV4KGRpcnNfdXJpLCB1ZCwgZCkpCisgICAgICAgIGlmIG5vdCBzb3VwOgorICAgICAgICAgICAgcmV0dXJuIHZlcnNpb25bMV0KKworICAgICAgICBmb3IgbGluZSBpbiBzb3VwLmZpbmRfYWxsKCdhJywgaHJlZj1UcnVlKToKKyAgICAgICAgICAgIHMgPSBkaXJ2ZXJfcmVnZXguc2VhcmNoKGxpbmVbJ2hyZWYnXS5zdHJpcCgiLyIpKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICB2ZXJzaW9uX2Rpcl9uZXcgPSBbJycsIHMuZ3JvdXAoMiksICcnXQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3ZlcmNtcCh2ZXJzaW9uX2RpciwgdmVyc2lvbl9kaXJfbmV3KSA8PSAwOgorICAgICAgICAgICAgICAgICAgICBkaXJ2ZXJfbmV3ID0gcy5ncm91cCgxKSArIHMuZ3JvdXAoMikKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHVkLnBhdGgucmVwbGFjZShkaXJ2ZXIsIGRpcnZlcl9uZXcsIFRydWUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChwYWNrYWdlKVswXQorICAgICAgICAgICAgICAgICAgICB1cmkgPSBiYi5mZXRjaC5lbmNvZGV1cmwoW3VkLnR5cGUsIHVkLmhvc3QsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1ZC51c2VyLCB1ZC5wc3dkLCB7fV0pCisKKyAgICAgICAgICAgICAgICAgICAgcHVwdmVyID0gc2VsZi5fY2hlY2tfbGF0ZXN0X3ZlcnNpb24odXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIHBhY2thZ2VfcmVnZXgsIGN1cnJlbnRfdmVyc2lvbiwgdWQsIGQpCisgICAgICAgICAgICAgICAgICAgIGlmIHB1cHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25bMV0gPSBwdXB2ZXIKKworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX2RpciA9IHZlcnNpb25fZGlyX25ldworCisgICAgICAgIHJldHVybiB2ZXJzaW9uWzFdCisKKyAgICBkZWYgX2luaXRfcmVnZXhlcyhzZWxmLCBwYWNrYWdlLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBNYXRjaCBhcyBtYW55IHBhdHRlcm5zIGFzIHBvc3NpYmxlIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgZ25vbWUtY29tbW9uLTIuMjAuMC50YXIuZ3ogKG1vc3QgY29tbW9uIGZvcm1hdCkKKyAgICAgICAgICAgICAgICBndGsrLTIuOTAuMS50YXIuZ3oKKyAgICAgICAgICAgICAgICB4Zjg2LWlucHV0LXN5bmFwdGljcy0xMi42LjkudGFyLmd6CisgICAgICAgICAgICAgICAgZHJpMnByb3RvLTIuMy50YXIuZ3oKKyAgICAgICAgICAgICAgICBibGt0b29sXzQub3JpZy50YXIuZ3oKKyAgICAgICAgICAgICAgICBsaWJpZDN0YWctMC4xNS4xYi50YXIuZ3oKKyAgICAgICAgICAgICAgICB1bnppcDU1Mi50YXIuZ3oKKyAgICAgICAgICAgICAgICBpY3U0Yy0zXzYtc3JjLnRnegorICAgICAgICAgICAgICAgIGdlbmV4dDJmc18xLjMub3JpZy50YXIuZ3oKKyAgICAgICAgICAgICAgICBnc3QtZmx1ZW5kby1tcDMKKyAgICAgICAgIiIiCisgICAgICAgICMgbWF0Y2ggbW9zdCBwYXR0ZXJucyB3aGljaCB1c2VzICItIiBhcyBzZXBhcmF0b3IgdG8gdmVyc2lvbiBkaWdpdHMKKyAgICAgICAgcG5fcHJlZml4MSA9ICJbYS16QS1aXVthLXpBLVowLTldKihbLV9dW2EtekEtWl1cdyspKlwrP1stX10iCisgICAgICAgICMgYSBsb29zZSBwYXR0ZXJuIHN1Y2ggYXMgZm9yIHVuemlwNTUyLnRhci5negorICAgICAgICBwbl9wcmVmaXgyID0gIlthLXpBLVpdKyIKKyAgICAgICAgIyBhIGxvb3NlIHBhdHRlcm4gc3VjaCBhcyBmb3IgODAzMjUtcXVpY2t5LTAuNC50YXIuZ3oKKyAgICAgICAgcG5fcHJlZml4MyA9ICJbMC05XStbLV0/W2EtekEtWl0rIgorICAgICAgICAjIFNhdmUgdGhlIFBhY2thZ2UgTmFtZSAocG4pIFJlZ2V4IGZvciB1c2UgbGF0ZXIKKyAgICAgICAgcG5fcmVnZXggPSAiKCVzfCVzfCVzKSIgJSAocG5fcHJlZml4MSwgcG5fcHJlZml4MiwgcG5fcHJlZml4MykKKworICAgICAgICAjIG1hdGNoIHZlcnNpb24KKyAgICAgICAgcHZlcl9yZWdleCA9ICIoKFtBLVpdKlxkK1thLXpBLVpdKltcLlwtX10qKSspIgorCisgICAgICAgICMgbWF0Y2ggYXJjaAorICAgICAgICBwYXJjaF9yZWdleCA9ICItc291cmNlfF9hbGxfIgorCisgICAgICAgICMgc3JjLnJwbSBleHRlbnNpb24gd2FzIGFkZGVkIG9ubHkgZm9yIHJwbSBwYWNrYWdlLiBDYW4gYmUgcmVtb3ZlZCBpZiB0aGUgcnBtCisgICAgICAgICMgcGFja2FnZWQgd2lsbCBhbHdheXMgYmUgY29uc2lkZXJlZCBhcyBoYXZpbmcgdG8gYmUgbWFudWFsbHkgdXBncmFkZWQKKyAgICAgICAgcHN1ZmZpeF9yZWdleCA9ICIodGFyXC5nenx0Z3p8dGFyXC5iejJ8emlwfHh6fHJwbXxiejJ8b3JpZ1wudGFyXC5nenx0YXJcLnh6fHNyY1wudGFyXC5nenxzcmNcLnRnenxzdm5yXGQrXC50YXJcLmJ6MnxzdGFibGVcLnRhclwuZ3p8c3JjXC5ycG0pIgorCisgICAgICAgICMgbWF0Y2ggbmFtZSwgdmVyc2lvbiBhbmQgYXJjaGl2ZSB0eXBlIG9mIGEgcGFja2FnZQorICAgICAgICBwYWNrYWdlX3JlZ2V4X2NvbXAgPSByZS5jb21waWxlKCIoP1A8bmFtZT4lcz9cLj92PykoP1A8cHZlcj4lcykoP1A8YXJjaD4lcyk/W1wuLV0oP1A8dHlwZT4lcyQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBuX3JlZ2V4LCBwdmVyX3JlZ2V4LCBwYXJjaF9yZWdleCwgcHN1ZmZpeF9yZWdleCkpCisgICAgICAgIHNlbGYuc3VmZml4X3JlZ2V4X2NvbXAgPSByZS5jb21waWxlKHBzdWZmaXhfcmVnZXgpCisKKyAgICAgICAgIyBjb21waWxlIHJlZ2V4LCBjYW4gYmUgc3BlY2lmaWMgYnkgcGFja2FnZSBvciBnZW5lcmljIHJlZ2V4CisgICAgICAgIHBuX3JlZ2V4ID0gZC5nZXRWYXIoJ1JFR0VYJywgVHJ1ZSkKKyAgICAgICAgaWYgcG5fcmVnZXg6CisgICAgICAgICAgICBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wID0gcmUuY29tcGlsZShwbl9yZWdleCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZlcnNpb24gPSBzZWxmLl9wYXJzZV9wYXRoKHBhY2thZ2VfcmVnZXhfY29tcCwgcGFja2FnZSkKKyAgICAgICAgICAgIGlmIHZlcnNpb246CisgICAgICAgICAgICAgICAgcGFja2FnZV9jdXN0b21fcmVnZXhfY29tcCA9IHJlLmNvbXBpbGUoCisgICAgICAgICAgICAgICAgICAgICIoP1A8bmFtZT4lcykoP1A8cHZlcj4lcykoP1A8YXJjaD4lcyk/W1wuLV0oP1A8dHlwZT4lcykiICUKKyAgICAgICAgICAgICAgICAgICAgKHJlLmVzY2FwZSh2ZXJzaW9uWzBdKSwgcHZlcl9yZWdleCwgcGFyY2hfcmVnZXgsIHBzdWZmaXhfcmVnZXgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wID0gTm9uZQorCisgICAgICAgIHJldHVybiBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wCisKKyAgICBkZWYgbGF0ZXN0X3ZlcnNpb25zdHJpbmcoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFuaXB1bGF0ZSB0aGUgVVJMIGFuZCB0cnkgdG8gb2J0YWluIHRoZSBsYXRlc3QgcGFja2FnZSB2ZXJzaW9uCisKKyAgICAgICAgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBzYW1lIG5hbWUgYW5kIHR5cGUuCisgICAgICAgICIiIgorICAgICAgICBwYWNrYWdlID0gdWQucGF0aC5zcGxpdCgiLyIpWy0xXQorICAgICAgICBjdXJyZW50X3ZlcnNpb24gPSBbJycsIGQuZ2V0VmFyKCdQVicsIFRydWUpLCAnJ10KKworICAgICAgICAiIiJwb3NzaWJsZSB0byBoYXZlIG5vIHZlcnNpb24gaW4gcGtnIG5hbWUsIHN1Y2ggYXMgc3BlY3RydW0tZnciIiIKKyAgICAgICAgaWYgbm90IHJlLnNlYXJjaCgiXGQrIiwgcGFja2FnZSk6CisgICAgICAgICAgICBjdXJyZW50X3ZlcnNpb25bMV0gPSByZS5zdWIoJ18nLCAnLicsIGN1cnJlbnRfdmVyc2lvblsxXSkKKyAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvblsxXSA9IHJlLnN1YignLScsICcuJywgY3VycmVudF92ZXJzaW9uWzFdKQorICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50X3ZlcnNpb25bMV0sICcnKQorCisgICAgICAgIHBhY2thZ2VfcmVnZXggPSBzZWxmLl9pbml0X3JlZ2V4ZXMocGFja2FnZSwgdWQsIGQpCisgICAgICAgIGlmIHBhY2thZ2VfcmVnZXggaXMgTm9uZToKKyAgICAgICAgICAgIGJiLndhcm4oImxhdGVzdF92ZXJzaW9uc3RyaW5nOiBwYWNrYWdlICVzIGRvbid0IG1hdGNoIHBhdHRlcm4iICUgKHBhY2thZ2UpKQorICAgICAgICAgICAgcmV0dXJuICgnJywgJycpCisgICAgICAgIGJiLmRlYnVnKDMsICJsYXRlc3RfdmVyc2lvbnN0cmluZywgcmVnZXg6ICVzIiAlIChwYWNrYWdlX3JlZ2V4LnBhdHRlcm4pKQorCisgICAgICAgIHVyaSA9ICIiCisgICAgICAgIHJlZ2V4X3VyaSA9IGQuZ2V0VmFyKCJSRUdFWF9VUkkiLCBUcnVlKQorICAgICAgICBpZiBub3QgcmVnZXhfdXJpOgorICAgICAgICAgICAgcGF0aCA9IHVkLnBhdGguc3BsaXQocGFja2FnZSlbMF0KKworICAgICAgICAgICAgIyBzZWFyY2ggZm9yIHZlcnNpb24gbWF0Y2hlcyBvbiBmb2xkZXJzIGluc2lkZSB0aGUgcGF0aCwgbGlrZToKKyAgICAgICAgICAgICMgIjUuNyIgaW4gaHR0cDovL2Rvd25sb2FkLmdub21lLm9yZy9zb3VyY2VzLyR7UE59LzUuNy8ke1BOfS0ke1BWfS50YXIuZ3oKKyAgICAgICAgICAgIGRpcnZlcl9yZWdleCA9IHJlLmNvbXBpbGUoIig/UDxkaXJ2ZXI+W14vXSooXGQrXC4pKlxkKyhbLV9dclxkKykqKS8iKQorICAgICAgICAgICAgbSA9IGRpcnZlcl9yZWdleC5zZWFyY2gocGF0aCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICAgICAgICAgIGRpcnZlciA9IG0uZ3JvdXAoJ2RpcnZlcicpCisKKyAgICAgICAgICAgICAgICBkaXJ2ZXJfcG5fcmVnZXggPSByZS5jb21waWxlKCIlc1xkPyIgJSAocmUuZXNjYXBlKHBuKSkpCisgICAgICAgICAgICAgICAgaWYgbm90IGRpcnZlcl9wbl9yZWdleC5zZWFyY2goZGlydmVyKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9jaGVja19sYXRlc3RfdmVyc2lvbl9ieV9kaXIoZGlydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgcGFja2FnZV9yZWdleCwgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCksICcnKQorCisgICAgICAgICAgICB1cmkgPSBiYi5mZXRjaC5lbmNvZGV1cmwoW3VkLnR5cGUsIHVkLmhvc3QsIHBhdGgsIHVkLnVzZXIsIHVkLnBzd2QsIHt9XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVyaSA9IHJlZ2V4X3VyaQorCisgICAgICAgIHJldHVybiAoc2VsZi5fY2hlY2tfbGF0ZXN0X3ZlcnNpb24odXJpLCBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LAorICAgICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbiwgdWQsIGQpLCAnJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzYyZjcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tYWluLnB5CkBAIC0wLDAgKzEsNDI3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCB3YXJuaW5ncworCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IGV2ZW50CitpbXBvcnQgYmIubXNnCitmcm9tIGJiIGltcG9ydCBjb29rZXIKK2Zyb20gYmIgaW1wb3J0IHVpCitmcm9tIGJiIGltcG9ydCBzZXJ2ZXIKK2Zyb20gYmIgaW1wb3J0IGNvb2tlcmRhdGEKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorCitjbGFzcyBCQk1haW5FeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBwcmVzZW50X29wdGlvbnMob3B0aW9ubGlzdCk6CisgICAgaWYgbGVuKG9wdGlvbmxpc3QpID4gMToKKyAgICAgICAgcmV0dXJuICcgb3IgJy5qb2luKFsnLCAnLmpvaW4ob3B0aW9ubGlzdFs6LTFdKSwgb3B0aW9ubGlzdFstMV1dKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBvcHRpb25saXN0WzBdCisKK2NsYXNzIEJpdGJha2VIZWxwRm9ybWF0dGVyKG9wdHBhcnNlLkluZGVudGVkSGVscEZvcm1hdHRlcik6CisgICAgZGVmIGZvcm1hdF9vcHRpb24oc2VsZiwgb3B0aW9uKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgdGV4dCB3ZSBzdXBwbHkgdG8KKyAgICAgICAgIyBhZGRfb3B0aW9uKCkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGNhbGwgbGlzdF9leHRlbnNpb25fbW9kdWxlcygpCisgICAgICAgICMgb24gZXZlcnkgZXhlY3V0aW9uIChzaW5jZSBpdCBpbXBvcnRzIGFsbCBvZiB0aGUgbW9kdWxlcykKKyAgICAgICAgIyBOb3RlIGFsc28gdGhhdCB3ZSBtb2RpZnkgb3B0aW9uLmhlbHAgcmF0aGVyIHRoYW4gdGhlIHJldHVybmVkIHRleHQKKyAgICAgICAgIyAtIHRoaXMgaXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLWZvcm1hdCB0aGUgdGV4dCBvdXJzZWx2ZXMKKyAgICAgICAgaWYgb3B0aW9uLmRlc3QgPT0gJ3VpJzoKKyAgICAgICAgICAgIHZhbGlkX3VpcyA9IGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMoYmIudWksICdtYWluJykKKyAgICAgICAgICAgIG9wdGlvbi5oZWxwID0gb3B0aW9uLmhlbHAucmVwbGFjZSgnQENIT0lDRVNAJywgcHJlc2VudF9vcHRpb25zKHZhbGlkX3VpcykpCisgICAgICAgIGVsaWYgb3B0aW9uLmRlc3QgPT0gJ3NlcnZlcnR5cGUnOgorICAgICAgICAgICAgdmFsaWRfc2VydmVyX3R5cGVzID0gbGlzdF9leHRlbnNpb25fbW9kdWxlcyhiYi5zZXJ2ZXIsICdCaXRCYWtlU2VydmVyJykKKyAgICAgICAgICAgIG9wdGlvbi5oZWxwID0gb3B0aW9uLmhlbHAucmVwbGFjZSgnQENIT0lDRVNAJywgcHJlc2VudF9vcHRpb25zKHZhbGlkX3NlcnZlcl90eXBlcykpCisKKyAgICAgICAgcmV0dXJuIG9wdHBhcnNlLkluZGVudGVkSGVscEZvcm1hdHRlci5mb3JtYXRfb3B0aW9uKHNlbGYsIG9wdGlvbikKKworZGVmIGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMocGtnLCBjaGVja2F0dHIpOgorICAgICIiIgorICAgIExpc3RzIGV4dGVuc2lvbiBtb2R1bGVzIGluIGEgc3BlY2lmaWMgUHl0aG9uIHBhY2thZ2UKKyAgICAoZS5nLiBVSXMsIHNlcnZlcnMpLiBOT1RFOiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbXBvcnQgYWxsIG9mIHRoZQorICAgIHN1Ym1vZHVsZXMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgaW4gb3JkZXIgdG8gY2hlY2sgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICBhdHRyaWJ1dGU7IHRoaXMgY2FuIGhhdmUgdW51c3VhbCBzaWRlLWVmZmVjdHMuIEFzIGEgcmVzdWx0LCB0aGlzIHNob3VsZAorICAgIG9ubHkgYmUgY2FsbGVkIHdoZW4gZGlzcGxheWluZyBoZWxwIHRleHQgb3IgZXJyb3IgbWVzc2FnZXMuCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgcGtnOiBwcmV2aW91c2x5IGltcG9ydGVkIFB5dGhvbiBwYWNrYWdlIHRvIGxpc3QKKyAgICAgICAgY2hlY2thdHRyOiBhdHRyaWJ1dGUgdG8gbG9vayBmb3IgaW4gbW9kdWxlIHRvIGRldGVybWluZSBpZiBpdCdzIHZhbGlkCisgICAgICAgICAgICBhcyB0aGUgdHlwZSBvZiBleHRlbnNpb24geW91IGFyZSBsb29raW5nIGZvcgorICAgICIiIgorICAgIGltcG9ydCBwa2d1dGlsCisgICAgcGtnZGlyID0gb3MucGF0aC5kaXJuYW1lKHBrZy5fX2ZpbGVfXykKKworICAgIG1vZHVsZXMgPSBbXQorICAgIGZvciBfLCBtb2R1bGVuYW1lLCBfIGluIHBrZ3V0aWwuaXRlcl9tb2R1bGVzKFtwa2dkaXJdKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocGtnZGlyLCBtb2R1bGVuYW1lKSk6CisgICAgICAgICAgICAjIGlnbm9yZSBkaXJlY3RvcmllcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhwa2cuX19uYW1lX18sIGZyb21saXN0PVttb2R1bGVuYW1lXSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBJZiB3ZSBjYW4ndCBpbXBvcnQgaXQsIGl0J3Mgbm90IHZhbGlkCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBtb2R1bGVfaWYgPSBnZXRhdHRyKG1vZHVsZSwgbW9kdWxlbmFtZSkKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGVfaWYsICdoaWRkZW5fZXh0ZW5zaW9uJywgRmFsc2UpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IGNoZWNrYXR0ciBvciBoYXNhdHRyKG1vZHVsZV9pZiwgY2hlY2thdHRyKToKKyAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKG1vZHVsZW5hbWUpCisgICAgcmV0dXJuIG1vZHVsZXMKKworZGVmIGltcG9ydF9leHRlbnNpb25fbW9kdWxlKHBrZywgbW9kdWxlbmFtZSwgY2hlY2thdHRyKToKKyAgICB0cnk6CisgICAgICAgICMgRHluYW1pY2FsbHkgbG9hZCB0aGUgVUkgYmFzZWQgb24gdGhlIHVpIG5hbWUuIEFsdGhvdWdoIHdlCisgICAgICAgICMgc3VnZ2VzdCBhIGZpeGVkIHNldCB0aGlzIGFsbG93cyB5b3UgdG8gaGF2ZSBmbGV4aWJpbGl0eSBpbiB3aGljaAorICAgICAgICAjIG9uZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhwa2cuX19uYW1lX18sIGZyb21saXN0ID0gW21vZHVsZW5hbWVdKQorICAgICAgICByZXR1cm4gZ2V0YXR0cihtb2R1bGUsIG1vZHVsZW5hbWUpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oJ0ZBVEFMOiBVbmFibGUgdG8gaW1wb3J0IGV4dGVuc2lvbiBtb2R1bGUgIiVzIiBmcm9tICVzLiBWYWxpZCBleHRlbnNpb24gbW9kdWxlczogJXMnICUgKG1vZHVsZW5hbWUsIHBrZy5fX25hbWVfXywgcHJlc2VudF9vcHRpb25zKGxpc3RfZXh0ZW5zaW9uX21vZHVsZXMocGtnLCBjaGVja2F0dHIpKSkpCisKKworIyBEaXNwbGF5IGJpdGJha2UvT0Ugd2FybmluZ3MgdmlhIHRoZSBCaXRCYWtlLldhcm5pbmdzIGxvZ2dlciwgaWdub3Jpbmcgb3RoZXJzIiIiCit3YXJubG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuV2FybmluZ3MiKQorX3dhcm5pbmdzX3Nob3d3YXJuaW5nID0gd2FybmluZ3Muc2hvd3dhcm5pbmcKK2RlZiBfc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGU9Tm9uZSwgbGluZT1Ob25lKToKKyAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBfd2FybmluZ3Nfc2hvd3dhcm5pbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2FybmluZ3Nfc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGUsIGxpbmUpCisgICAgZWxzZToKKyAgICAgICAgcyA9IHdhcm5pbmdzLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHdhcm5sb2cud2FybihzKQorCit3YXJuaW5ncy5zaG93d2FybmluZyA9IF9zaG93d2FybmluZword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZGVmYXVsdCIsIG1vZHVsZT0iKDxzdHJpbmc+JHwob2V8YmIpXC4pIikKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQord2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIGNhdGVnb3J5PUltcG9ydFdhcm5pbmcpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLCBtb2R1bGU9IjxzdHJpbmc+JCIpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgbWVzc2FnZT0iV2l0aC1zdGF0ZW1lbnRzIG5vdyBkaXJlY3RseSBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMiKQorCitjbGFzcyBCaXRCYWtlQ29uZmlnUGFyYW1ldGVycyhjb29rZXJkYXRhLkNvbmZpZ1BhcmFtZXRlcnMpOgorCisgICAgZGVmIHBhcnNlQ29tbWFuZExpbmUoc2VsZiwgYXJndj1zeXMuYXJndik6CisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgICAgIGZvcm1hdHRlciA9IEJpdGJha2VIZWxwRm9ybWF0dGVyKCksCisgICAgICAgICAgICB2ZXJzaW9uID0gIkJpdEJha2UgQnVpbGQgVG9vbCBDb3JlIHZlcnNpb24gJXMiICUgYmIuX192ZXJzaW9uX18sCisgICAgICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBbcmVjaXBlbmFtZS90YXJnZXQgcmVjaXBlOmRvX3Rhc2sgLi4uXQorCisgICAgRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIChkZWZhdWx0IGlzICdidWlsZCcpIGZvciBhIGdpdmVuIHNldCBvZiB0YXJnZXQgcmVjaXBlcyAoLmJiIGZpbGVzKS4KKyAgICBJdCBpcyBhc3N1bWVkIHRoZXJlIGlzIGEgY29uZi9iYmxheWVycy5jb25mIGF2YWlsYWJsZSBpbiBjd2Qgb3IgaW4gQkJQQVRIIHdoaWNoCisgICAgd2lsbCBwcm92aWRlIHRoZSBsYXllciwgQkJGSUxFUyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iIiIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYnVpbGRmaWxlIiwgaGVscCA9ICJFeGVjdXRlIHRhc2tzIGZyb20gYSBzcGVjaWZpYyAuYmIgcmVjaXBlIGRpcmVjdGx5LiBXQVJOSU5HOiBEb2VzIG5vdCBoYW5kbGUgYW55IGRlcGVuZGVuY2llcyBmcm9tIG90aGVyIHJlY2lwZXMuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImJ1aWxkZmlsZSIsIGRlZmF1bHQgPSBOb25lKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItayIsICItLWNvbnRpbnVlIiwgaGVscCA9ICJDb250aW51ZSBhcyBtdWNoIGFzIHBvc3NpYmxlIGFmdGVyIGFuIGVycm9yLiBXaGlsZSB0aGUgdGFyZ2V0IHRoYXQgZmFpbGVkIGFuZCBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXQgY2Fubm90IGJlIGJ1aWx0LCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgYnVpbHQgYmVmb3JlIHN0b3BwaW5nLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX2ZhbHNlIiwgZGVzdCA9ICJhYm9ydCIsIGRlZmF1bHQgPSBUcnVlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLXRyeWFsdGNvbmZpZ3MiLCBoZWxwID0gIkNvbnRpbnVlIHdpdGggYnVpbGRzIGJ5IHRyeWluZyB0byB1c2UgYWx0ZXJuYXRpdmUgcHJvdmlkZXJzIHdoZXJlIHBvc3NpYmxlLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInRyeWFsdGNvbmZpZ3MiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9yY2UiLCBoZWxwID0gIkZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nIGFueSBleGlzdGluZyBzdGFtcCBmaWxlKS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJmb3JjZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jbWQiLCBoZWxwID0gIlNwZWNpZnkgdGhlIHRhc2sgdG8gZXhlY3V0ZS4gVGhlIGV4YWN0IG9wdGlvbnMgYXZhaWxhYmxlIGRlcGVuZCBvbiB0aGUgbWV0YWRhdGEuIFNvbWUgZXhhbXBsZXMgbWlnaHQgYmUgJ2NvbXBpbGUnIG9yICdwb3B1bGF0ZV9zeXNyb290JyBvciAnbGlzdHRhc2tzJyBtYXkgZ2l2ZSBhIGxpc3Qgb2YgdGhlIHRhc2tzIGF2YWlsYWJsZS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiY21kIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUMiLCAiLS1jbGVhci1zdGFtcCIsIGhlbHAgPSAiSW52YWxpZGF0ZSB0aGUgc3RhbXAgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayBzdWNoIGFzICdjb21waWxlJyBhbmQgdGhlbiBydW4gdGhlIGRlZmF1bHQgdGFzayBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQocykuIiwKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJpbnZhbGlkYXRlX3N0YW1wIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yZWFkIiwgaGVscCA9ICJSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAicHJlZmlsZSIsIGRlZmF1bHQgPSBbXSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVIiLCAiLS1wb3N0cmVhZCIsIGhlbHAgPSAiUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYWZ0ZXIgYml0YmFrZS5jb25mLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJhcHBlbmQiLCBkZXN0ID0gInBvc3RmaWxlIiwgZGVmYXVsdCA9IFtdKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBoZWxwID0gIk91dHB1dCBtb3JlIGxvZyBtZXNzYWdlIGRhdGEgdG8gdGhlIHRlcm1pbmFsLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInZlcmJvc2UiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBoZWxwID0gIkluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZSB0aGFuIG9uY2UuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiY291bnQiLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQgPSAwKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLWRyeS1ydW4iLCBoZWxwID0gIkRvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJkcnlfcnVuIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUyIsICItLWR1bXAtc2lnbmF0dXJlcyIsIGhlbHAgPSAiRHVtcCBvdXQgdGhlIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5mb3JtYXRpb24sIHdpdGggbm8gdGFzayBleGVjdXRpb24uIFRoZSBTSUdOQVRVUkVfSEFORExFUiBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLiBUd28gY29tbW9uIHZhbHVlcyBhcmUgbm9uZSBhbmQgcHJpbnRkaWZmIGJ1dCB0aGUgaGFuZGxlciBtYXkgZGVmaW5lIG1vcmUvbGVzcy4gbm9uZSBtZWFucyBvbmx5IGR1bXAgdGhlIHNpZ25hdHVyZSwgcHJpbnRkaWZmIG1lYW5zIGNvbXBhcmUgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUgY2FjaGVkIG9uZS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJhcHBlbmQiLCBkZXN0ID0gImR1bXBfc2lnbmF0dXJlcyIsIGRlZmF1bHQgPSBbXSwgbWV0YXZhcj0iU0lHTkFUVVJFX0hBTkRMRVIiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXBhcnNlLW9ubHkiLCBoZWxwID0gIlF1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgcmVjaXBlcy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJwYXJzZV9vbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXNob3ctdmVyc2lvbnMiLCBoZWxwID0gIlNob3cgY3VycmVudCBhbmQgcHJlZmVycmVkIHZlcnNpb25zIG9mIGFsbCByZWNpcGVzLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInNob3dfdmVyc2lvbnMiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0tZW52aXJvbm1lbnQiLCBoZWxwID0gIlNob3cgdGhlIGdsb2JhbCBvciBwZXItcmVjaXBlIGVudmlyb25tZW50IGNvbXBsZXRlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdmFyaWFibGVzIHdlcmUgc2V0L2NoYW5nZWQuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2hvd19lbnZpcm9ubWVudCIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWciLCAiLS1ncmFwaHZpeiIsIGhlbHAgPSAiU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cyBpbiB0aGUgZG90IHN5bnRheC4iLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAiZG90X2dyYXBoIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSSIsICItLWlnbm9yZS1kZXBzIiwgaGVscCA9ICIiIkFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5IHByb3ZpZGVkIChlcXVpdmFsZW50IHRvIEFTU1VNRV9QUk9WSURFRCkuIFVzZWZ1bCB0byBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nIiIiLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJleHRyYV9hc3N1bWVfcHJvdmlkZWQiLCBkZWZhdWx0ID0gW10pCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbG9nLWRvbWFpbnMiLCBoZWxwID0gIiIiU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucyIiIiwKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAiZGVidWdfZG9tYWlucyIsIGRlZmF1bHQgPSBbXSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVAiLCAiLS1wcm9maWxlIiwgaGVscCA9ICJQcm9maWxlIHRoZSBjb21tYW5kIGFuZCBzYXZlIHJlcG9ydHMuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAicHJvZmlsZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBlbnZfdWkgPSBvcy5lbnZpcm9uLmdldCgnQklUQkFLRV9VSScsIE5vbmUpCisgICAgICAgIGRlZmF1bHRfdWkgPSBlbnZfdWkgb3IgJ2tub3R0eScKKyAgICAgICAgIyBAQ0hPSUNFU0AgaXMgc3Vic3RpdHV0ZWQgb3V0IGJ5IEJpdGJha2VIZWxwRm9ybWF0dGVyIGFib3ZlCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdSIsICItLXVpIiwgaGVscCA9ICJUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChAQ0hPSUNFU0AgLSBkZWZhdWx0ICVkZWZhdWx0KS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJ1aSIsIGRlZmF1bHQ9ZGVmYXVsdF91aSkKKworICAgICAgICAjIEBDSE9JQ0VTQCBpcyBzdWJzdGl0dXRlZCBvdXQgYnkgQml0YmFrZUhlbHBGb3JtYXR0ZXIgYWJvdmUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tc2VydmVydHlwZSIsIGhlbHAgPSAiQ2hvb3NlIHdoaWNoIHNlcnZlciB0eXBlIHRvIHVzZSAoQENIT0lDRVNAIC0gZGVmYXVsdCAlZGVmYXVsdCkuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInNlcnZlcnR5cGUiLCBkZWZhdWx0ID0gInByb2Nlc3MiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS10b2tlbiIsIGhlbHAgPSAiU3BlY2lmeSB0aGUgY29ubmVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHdoZW4gY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInhtbHJwY3Rva2VuIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcmV2aXNpb25zLWNoYW5nZWQiLCBoZWxwID0gIlNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInJldmlzaW9uc19jaGFuZ2VkIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1zZXJ2ZXItb25seSIsIGhlbHAgPSAiUnVuIGJpdGJha2Ugd2l0aG91dCBhIFVJLCBvbmx5IHN0YXJ0aW5nIGEgc2VydmVyIChjb29rZXIpIHByb2Nlc3MuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2VydmVyX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1CIiwgIi0tYmluZCIsIGhlbHAgPSAiVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImJpbmQiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW5vLXNldHNjZW5lIiwgaGVscCA9ICJEbyBub3QgcnVuIGFueSBzZXRzY2VuZSB0YXNrcy4gc3N0YXRlIHdpbGwgYmUgaWdub3JlZCBhbmQgZXZlcnl0aGluZyBuZWVkZWQsIGJ1aWx0LiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gIm5vc2V0c2NlbmUiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXJlbW90ZS1zZXJ2ZXIiLCBoZWxwID0gIkNvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInJlbW90ZV9zZXJ2ZXIiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0ta2lsbC1zZXJ2ZXIiLCBoZWxwID0gIlRlcm1pbmF0ZSB0aGUgcmVtb3RlIHNlcnZlci4iLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAia2lsbF9zZXJ2ZXIiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLW9ic2VydmUtb25seSIsIGhlbHAgPSAiQ29ubmVjdCB0byBhIHNlcnZlciBhcyBhbiBvYnNlcnZpbmctb25seSBjbGllbnQuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAib2JzZXJ2ZV9vbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1zdGF0dXMtb25seSIsIGhlbHAgPSAiQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmVtb3RlIGJpdGJha2Ugc2VydmVyLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInN0YXR1c19vbmx5IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdyIsICItLXdyaXRlLWxvZyIsIGhlbHAgPSAiV3JpdGVzIHRoZSBldmVudCBsb2cgb2YgdGhlIGJ1aWxkIHRvIGEgYml0YmFrZSBldmVudCBqc29uIGZpbGUuIFVzZSAnJyAoZW1wdHkgc3RyaW5nKSB0byBhc3NpZ24gdGhlIG5hbWUgYXV0b21hdGljYWxseS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAid3JpdGVldmVudGxvZyIpCisKKyAgICAgICAgb3B0aW9ucywgdGFyZ2V0cyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICAgICAgIyBzb21lIGVudmlyb25tZW50YWwgdmFyaWFibGVzIHNldCBhbHNvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICBpZiAiQkJTRVJWRVIiIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBvcHRpb25zLnNlcnZlcnR5cGUgPSAieG1scnBjIgorICAgICAgICAgICAgb3B0aW9ucy5yZW1vdGVfc2VydmVyID0gb3MuZW52aXJvblsiQkJTRVJWRVIiXQorCisgICAgICAgIGlmICJCQlRPS0VOIiBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgb3B0aW9ucy54bWxycGN0b2tlbiA9IG9zLmVudmlyb25bIkJCVE9LRU4iXQorCisgICAgICAgIGlmICJCQkVWRU5UTE9HIiBpcyBvcy5lbnZpcm9uOgorICAgICAgICAgICAgb3B0aW9ucy53cml0ZWV2ZW50bG9nID0gb3MuZW52aXJvblsiQkJFVkVOVExPRyJdCisKKyAgICAgICAgIyBmaWxsIGluIHByb3BlciBsb2cgbmFtZSBpZiBub3Qgc3VwcGxpZWQKKyAgICAgICAgaWYgb3B0aW9ucy53cml0ZWV2ZW50bG9nIGlzIG5vdCBOb25lIGFuZCBsZW4ob3B0aW9ucy53cml0ZWV2ZW50bG9nKSA9PSAwOgorICAgICAgICAgICAgaW1wb3J0IGRhdGV0aW1lCisgICAgICAgICAgICBvcHRpb25zLndyaXRlZXZlbnRsb2cgPSAiYml0YmFrZV9ldmVudGxvZ18lcy5qc29uIiAlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWSVtJWQlSCVNJVMiKQorCisgICAgICAgICMgaWYgQkJTRVJWRVIgc2F5cyB0byBhdXRvZGV0ZWN0LCBsZXQncyBkbyB0aGF0CisgICAgICAgIGlmIG9wdGlvbnMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgICAgIFtob3N0LCBwb3J0XSA9IG9wdGlvbnMucmVtb3RlX3NlcnZlci5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAgICAjIHVzZSBhdXRvbWF0aWMgcG9ydCBpZiBwb3J0IHNldCB0byAtMSwgbWVhbnMgcmVhZCBpdCBmcm9tCisgICAgICAgICAgICAjIHRoZSBiaXRiYWtlLmxvY2sgZmlsZTsgdGhpcyBpcyBhIGJpdCB0cmlja3ksIGJ1dCB3ZSBhbHdheXMgZXhwZWN0CisgICAgICAgICAgICAjIHRvIGJlIGluIHRoZSBiYXNlIG9mIHRoZSBidWlsZCBkaXJlY3RvcnkgaWYgd2UgbmVlZCB0byBoYXZlIGEKKyAgICAgICAgICAgICMgY2hhbmNlIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgbGF0ZXIsIGFueXdheQorICAgICAgICAgICAgaWYgcG9ydCA9PSAtMToKKyAgICAgICAgICAgICAgICBsb2NrX2xvY2F0aW9uID0gIi4vYml0YmFrZS5sb2NrIgorICAgICAgICAgICAgICAgICMgd2UgdHJ5IHRvIHJlYWQgdGhlIGFkZHJlc3MgYXQgYWxsIHRpbWVzOyBpZiB0aGUgc2VydmVyIGlzIG5vdCBzdGFydGVkLAorICAgICAgICAgICAgICAgICMgd2UnbGwgdHJ5IHRvIHN0YXJ0IGl0IGFmdGVyIHRoZSBmaXJzdCBjb25uZWN0IGZhaWxzLCBiZWxvdworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbGYgPSBvcGVuKGxvY2tfbG9jYXRpb24sICdyJykKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlZGVmID0gbGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBbaG9zdCwgcG9ydF0gPSByZW1vdGVkZWYuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAgICAgICAgICAgIGxmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yZW1vdGVfc2VydmVyID0gcmVtb3RlZGVmCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZhaWxlZCB0byByZWFkIGJpdGJha2UubG9jayAoJXMpLCBpbnZhbGlkIHBvcnQiICUgc3RyKGUpKQorCisgICAgICAgIHJldHVybiBvcHRpb25zLCB0YXJnZXRzWzE6XQorCisKK2RlZiBzdGFydF9zZXJ2ZXIoc2VydmVybW9kdWxlLCBjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzKToKKyAgICBzZXJ2ZXIgPSBzZXJ2ZXJtb2R1bGUuQml0QmFrZVNlcnZlcigpCisgICAgaWYgY29uZmlnUGFyYW1zLmJpbmQ6CisgICAgICAgIChob3N0LCBwb3J0KSA9IGNvbmZpZ1BhcmFtcy5iaW5kLnNwbGl0KCc6JykKKyAgICAgICAgc2VydmVyLmluaXRTZXJ2ZXIoKGhvc3QsIGludChwb3J0KSkpCisgICAgICAgIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlID0gWyBzZXJ2ZXIuc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXIuc2VydmVySW1wbC5wb3J0IF0KKyAgICBlbHNlOgorICAgICAgICBzZXJ2ZXIuaW5pdFNlcnZlcigpCisgICAgICAgIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlID0gW10KKworICAgIHRyeToKKyAgICAgICAgY29uZmlndXJhdGlvbi5zZXRTZXJ2ZXJSZWdJZGxlQ2FsbGJhY2soc2VydmVyLmdldFNlcnZlcklkbGVDQigpKQorCisgICAgICAgIGNvb2tlciA9IGJiLmNvb2tlci5CQkNvb2tlcihjb25maWd1cmF0aW9uLCBmZWF0dXJlcykKKworICAgICAgICBzZXJ2ZXIuYWRkY29va2VyKGNvb2tlcikKKyAgICAgICAgc2VydmVyLnNhdmVDb25uZWN0aW9uRGV0YWlscygpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIHdoaWxlIGhhc2F0dHIoc2VydmVyLCAiZXZlbnRfcXVldWUiKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgcXVldWUKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgUXVldWUgYXMgcXVldWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmVudCA9IHNlcnZlci5ldmVudF9xdWV1ZS5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgKHF1ZXVlLkVtcHR5LCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgIHJhaXNlIGV4Y19pbmZvWzFdLCBOb25lLCBleGNfaW5mb1syXQorICAgIHNlcnZlci5kZXRhY2goKQorICAgIGNvb2tlci5sb2NrLmNsb3NlKCkKKyAgICByZXR1cm4gc2VydmVyCisKKworZGVmIGJpdGJha2VfbWFpbihjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24pOgorCisgICAgIyBQeXRob24gbXVsdGlwcm9jZXNzaW5nIHJlcXVpcmVzIC9kZXYvc2htIG9uIExpbnV4CisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4JykgYW5kIG5vdCBvcy5hY2Nlc3MoJy9kZXYvc2htJywgb3MuV19PSyB8IG9zLlhfT0spOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiAvZGV2L3NobSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3Qgd3JpdGFibGUiKQorCisgICAgIyBVbmJ1ZmZlciBzdGRvdXQgdG8gYXZvaWQgbG9nIHRydW5jYXRpb24gaW4gdGhlIGV2ZW50CisgICAgIyBvZiBhbiB1bm9yZGVybHkgZXhpdCBhcyB3ZWxsIGFzIHRvIHByb3ZpZGUgdGltZWx5CisgICAgIyB1cGRhdGVzIHRvIGxvZyBmaWxlcyBmb3IgdXNlIHdpdGggdGFpbAorICAgIHRyeToKKyAgICAgICAgaWYgc3lzLnN0ZG91dC5uYW1lID09ICc8c3Rkb3V0Pic6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworCisgICAgY29uZmlndXJhdGlvbi5zZXRDb25maWdQYXJhbWV0ZXJzKGNvbmZpZ1BhcmFtcykKKworICAgIHVpX21vZHVsZSA9IGltcG9ydF9leHRlbnNpb25fbW9kdWxlKGJiLnVpLCBjb25maWdQYXJhbXMudWksICdtYWluJykKKyAgICBzZXJ2ZXJtb2R1bGUgPSBpbXBvcnRfZXh0ZW5zaW9uX21vZHVsZShiYi5zZXJ2ZXIsIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJ0eXBlLCAnQml0QmFrZVNlcnZlcicpCisKKyAgICBpZiBjb25maWdQYXJhbXMuc2VydmVyX29ubHk6CisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJ0eXBlICE9ICJ4bWxycGMiOgorICAgICAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogSWYgJy0tc2VydmVyLW9ubHknIGlzIGRlZmluZWQsIHdlIG11c3Qgc2V0IHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlcnR5cGUgYXMgJ3htbHJwYycuXG4iKQorICAgICAgICBpZiBub3QgY29uZmlnUGFyYW1zLmJpbmQ6CisgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBUaGUgJy0tc2VydmVyLW9ubHknIG9wdGlvbiByZXF1aXJlcyBhIG5hbWUvYWRkcmVzcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIGJpbmQgdG8gd2l0aCB0aGUgLUIgb3B0aW9uLlxuIikKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6CisgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBUaGUgJy0tc2VydmVyLW9ubHknIG9wdGlvbiBjb25mbGljdHMgd2l0aCAlcy5cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgidGhlIEJCU0VSVkVSIGVudmlyb25tZW50IHZhcmlhYmxlIiBpZiAiQkJTRVJWRVIiIGluIG9zLmVudmlyb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICJ0aGUgJy0tcmVtb3RlLXNlcnZlcicgb3B0aW9uIiApKQorCisgICAgaWYgY29uZmlnUGFyYW1zLmJpbmQgYW5kIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJ0eXBlICE9ICJ4bWxycGMiOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBJZiAnLUInIG9yICctLWJpbmQnIGlzIGRlZmluZWQsIHdlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0aGUgc2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCisKKyAgICBpZiBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciBhbmQgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IElmICctLXJlbW90ZS1zZXJ2ZXInIGlzIGRlZmluZWQsIHdlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0aGUgc2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCisKKyAgICBpZiBjb25maWdQYXJhbXMub2JzZXJ2ZV9vbmx5IGFuZCAobm90IGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyIG9yIGNvbmZpZ1BhcmFtcy5iaW5kKToKKyAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogJy0tb2JzZXJ2ZS1vbmx5JyBjYW4gb25seSBiZSB1c2VkIGJ5IFVJIGNsaWVudHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3RpbmcgdG8gYSBzZXJ2ZXIuXG4iKQorCisgICAgaWYgY29uZmlnUGFyYW1zLmtpbGxfc2VydmVyIGFuZCBub3QgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6ICctLWtpbGwtc2VydmVyJyBjYW4gb25seSBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBhIHJlbW90ZSBzZXJ2ZXIiKQorCisgICAgaWYgIkJCREVCVUciIGluIG9zLmVudmlyb246CisgICAgICAgIGxldmVsID0gaW50KG9zLmVudmlyb25bIkJCREVCVUciXSkKKyAgICAgICAgaWYgbGV2ZWwgPiBjb25maWd1cmF0aW9uLmRlYnVnOgorICAgICAgICAgICAgY29uZmlndXJhdGlvbi5kZWJ1ZyA9IGxldmVsCisKKyAgICBiYi5tc2cuaW5pdF9tc2djb25maWcoY29uZmlnUGFyYW1zLnZlcmJvc2UsIGNvbmZpZ3VyYXRpb24uZGVidWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5kZWJ1Z19kb21haW5zKQorCisgICAgIyBFbnN1cmUgbG9nZ2luZyBtZXNzYWdlcyBnZXQgc2VudCB0byB0aGUgVUkgYXMgZXZlbnRzCisgICAgaGFuZGxlciA9IGJiLmV2ZW50LkxvZ0hhbmRsZXIoKQorICAgIGlmIG5vdCBjb25maWdQYXJhbXMuc3RhdHVzX29ubHk6CisgICAgICAgICMgSW4gc3RhdHVzIG9ubHkgbW9kZSB0aGVyZSBhcmUgbm8gbG9ncyBhbmQgbm8gVUkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKworICAgICMgQ2xlYXIgYXdheSBhbnkgc3B1cmlvdXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWxlIHdlIHN0b2tlIHVwIHRoZSBjb29rZXIKKyAgICBjbGVhbmVkdmFycyA9IGJiLnV0aWxzLmNsZWFuX2Vudmlyb25tZW50KCkKKworICAgIGZlYXR1cmVzZXQgPSBbXQorICAgIGlmIG5vdCBjb25maWdQYXJhbXMuc2VydmVyX29ubHk6CisgICAgICAgICMgQ29sbGVjdCB0aGUgZmVhdHVyZSBzZXQgZm9yIHRoZSBVSQorICAgICAgICBmZWF0dXJlc2V0ID0gZ2V0YXR0cih1aV9tb2R1bGUsICJmZWF0dXJlU2V0IiwgW10pCisKKyAgICBpZiBub3QgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXI6CisgICAgICAgICMgd2Ugc3RhcnQgYSBzZXJ2ZXIgd2l0aCBhIGdpdmVuIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VydmVyID0gc3RhcnRfc2VydmVyKHNlcnZlcm1vZHVsZSwgY29uZmlnUGFyYW1zLCBjb25maWd1cmF0aW9uLCBmZWF0dXJlc2V0KQorICAgICAgICBiYi5ldmVudC51aV9xdWV1ZSA9IFtdCisgICAgZWxzZToKKyAgICAgICAgIyB3ZSBzdGFydCBhIHN0dWIgc2VydmVyIHRoYXQgaXMgYWN0dWFsbHkgYSBYTUxSUENsaWVudCB0aGF0IGNvbm5lY3RzIHRvIGEgcmVhbCBzZXJ2ZXIKKyAgICAgICAgc2VydmVyID0gc2VydmVybW9kdWxlLkJpdEJha2VYTUxSUENDbGllbnQoY29uZmlnUGFyYW1zLm9ic2VydmVfb25seSwgY29uZmlnUGFyYW1zLnhtbHJwY3Rva2VuKQorICAgICAgICBzZXJ2ZXIuc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyKQorCisKKyAgICBpZiBub3QgY29uZmlnUGFyYW1zLnNlcnZlcl9vbmx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbiA9IHNlcnZlci5lc3RhYmxpc2hDb25uZWN0aW9uKGZlYXR1cmVzZXQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIgJXM6ICVzIiAlIChjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlciwgc3RyKGUpKSkKKworICAgICAgICAjIFJlc3RvcmUgdGhlIGVudmlyb25tZW50IGluIGNhc2UgdGhlIFVJIG5lZWRzIGl0CisgICAgICAgIGZvciBrIGluIGNsZWFuZWR2YXJzOgorICAgICAgICAgICAgb3MuZW52aXJvbltrXSA9IGNsZWFuZWR2YXJzW2tdCisKKyAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKKworCisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5zdGF0dXNfb25seToKKyAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGlmIGNvbmZpZ1BhcmFtcy5raWxsX3NlcnZlcjoKKyAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uLmNvbm5lY3Rpb24udGVybWluYXRlU2VydmVyKCkKKyAgICAgICAgICAgIGJiLmV2ZW50LnVpX3F1ZXVlID0gW10KKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHVpX21vZHVsZS5tYWluKHNlcnZlcl9jb25uZWN0aW9uLmNvbm5lY3Rpb24sIHNlcnZlcl9jb25uZWN0aW9uLmV2ZW50cywgY29uZmlnUGFyYW1zKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQorICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24udGVybWluYXRlKCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzczogJXMsIHNlcnZlciBwb3J0OiAlcyIgJSAoc2VydmVyLnNlcnZlckltcGwuaG9zdCwgc2VydmVyLnNlcnZlckltcGwucG9ydCkpCisgICAgICAgIHJldHVybiAwCisKKyAgICByZXR1cm4gMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tZXRob2Rwb29sLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tZXRob2Rwb29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmU5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21ldGhvZHBvb2wucHkKQEAgLTAsMCArMSwyOSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMKKyMgQ29weXJpZ2h0IChDKSAgICAgICAyMDA2IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGJiLnV0aWxzIGltcG9ydCBiZXR0ZXJfY29tcGlsZSwgYmV0dGVyX2V4ZWMKKworZGVmIGluc2VydF9tZXRob2QobW9kdWxlbmFtZSwgY29kZSwgZm4pOgorICAgICIiIgorICAgIEFkZCBjb2RlIG9mIGEgbW9kdWxlIHNob3VsZCBiZSBhZGRlZC4gVGhlIG1ldGhvZHMKKyAgICB3aWxsIGJlIHNpbXBseSBhZGRlZCwgbm8gY2hlY2tpbmcgd2lsbCBiZSBkb25lCisgICAgIiIiCisgICAgY29tcCA9IGJldHRlcl9jb21waWxlKGNvZGUsIG1vZHVsZW5hbWUsIGZuICkKKyAgICBiZXR0ZXJfZXhlYyhjb21wLCBOb25lLCBjb2RlLCBmbikKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9tb25pdG9yZGlzay5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbW9uaXRvcmRpc2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2NTIzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbW9uaXRvcmRpc2sucHkKQEAgLTAsMCArMSwyNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJvYmVydCBZYW5nCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MsIGxvZ2dpbmcsIHJlLCBzeXMKK2ltcG9ydCBiYgorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuTW9uaXRvciIpCisKK2RlZiBwcmludEVycihpbmZvKToKKyAgICBsb2dnZXIuZXJyb3IoIiVzXG4gICAgICAgRGlzayBzcGFjZSBtb25pdG9yIHdpbGwgTk9UIGJlIGVuYWJsZWQiICUgaW5mbykKKworZGVmIGNvbnZlcnRHTUsodW5pdCk6CisKKyAgICAiIiIgQ29udmVydCB0aGUgc3BhY2UgdW5pdCBHLCBNLCBLLCB0aGUgdW5pdCBpcyBjYXNlLWluc2Vuc2l0aXZlICIiIgorCisgICAgdW5pdEcgPSByZS5tYXRjaCgnKFsxLTldWzAtOV0qKVtnR11ccz8kJywgdW5pdCkKKyAgICBpZiB1bml0RzoKKyAgICAgICAgcmV0dXJuIGludCh1bml0Ry5ncm91cCgxKSkgKiAoMTAyNCAqKiAzKQorICAgIHVuaXRNID0gcmUubWF0Y2goJyhbMS05XVswLTldKilbbU1dXHM/JCcsIHVuaXQpCisgICAgaWYgdW5pdE06CisgICAgICAgIHJldHVybiBpbnQodW5pdE0uZ3JvdXAoMSkpICogKDEwMjQgKiogMikKKyAgICB1bml0SyA9IHJlLm1hdGNoKCcoWzEtOV1bMC05XSopW2tLXVxzPyQnLCB1bml0KQorICAgIGlmIHVuaXRLOgorICAgICAgICByZXR1cm4gaW50KHVuaXRLLmdyb3VwKDEpKSAqIDEwMjQKKyAgICB1bml0TiA9IHJlLm1hdGNoKCcoWzEtOV1bMC05XSopXHM/JCcsIHVuaXQpCisgICAgaWYgdW5pdE46CisgICAgICAgIHJldHVybiBpbnQodW5pdE4uZ3JvdXAoMSkpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGdldE1vdW50ZWREZXYocGF0aCk6CisKKyAgICAiIiIgR2V0IHRoZSBkZXZpY2UgbW91bnRlZCBhdCB0aGUgcGF0aCwgdXNlcyAvcHJvYy9tb3VudHMgIiIiCisKKyAgICAjIEdldCB0aGUgbW91bnQgcG9pbnQgb2YgdGhlIGZpbGVzeXN0ZW0gY29udGFpbmluZyBwYXRoCisgICAgIyBzdF9kZXYgaXMgdGhlIElEIG9mIGRldmljZSBjb250YWluaW5nIGZpbGUKKyAgICBwYXJlbnREZXYgPSBvcy5zdGF0KHBhdGgpLnN0X2RldgorICAgIGN1cnJlbnREZXYgPSBwYXJlbnREZXYKKyAgICAjIFdoZW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5J3MgZGV2aWNlIGlzIGRpZmZlcmVudCBmcm9tIHRoZQorICAgICMgcGFyZW50J3MsIHRoZW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGEgbW91bnQgcG9pbnQKKyAgICB3aGlsZSBwYXJlbnREZXYgPT0gY3VycmVudERldjoKKyAgICAgICAgbW91bnRQb2ludCA9IHBhdGgKKyAgICAgICAgIyBVc2UgZGlybmFtZSB0byBnZXQgdGhlIHBhcmVudCdzIGRpcmVjdG9yeQorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgICMgUmVhY2ggdGhlICIvIgorICAgICAgICBpZiBwYXRoID09IG1vdW50UG9pbnQ6CisgICAgICAgICAgICBicmVhaworICAgICAgICBwYXJlbnREZXY9IG9zLnN0YXQocGF0aCkuc3RfZGV2CisKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvbW91bnRzIiwgInIiKSBhcyBpZnA6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBpZnA6CisgICAgICAgICAgICAgICAgcHJvY0xpbmVzID0gbGluZS5yc3RyaXAoJ1xuJykuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIHByb2NMaW5lc1sxXSA9PSBtb3VudFBvaW50OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvY0xpbmVzWzBdCisgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gTm9uZQorCitkZWYgZ2V0RGlza0RhdGEoQkJEaXJzLCBjb25maWd1cmF0aW9uKToKKworICAgICIiIlByZXBhcmUgZGlzayBkYXRhIGZvciBkaXNrIHNwYWNlIG1vbml0b3IiIiIKKworICAgICMgU2F2ZSB0aGUgZGV2aWNlIElEcywgbmVlZCB0aGUgSUQgdG8gYmUgdW5pcXVlICh0aGUgZGljdGlvbmFyeSdzIGtleSBpcworICAgICMgdW5pcXVlKSwgc28gdGhhdCB3aGVuIG1vcmUgdGhhbiBvbmUgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgb24gdGhlIHNhbWUKKyAgICAjIGRldmljZSwgd2UganVzdCBtb25pdG9yIGl0IG9uY2UKKyAgICBkZXZEaWN0ID0ge30KKyAgICBmb3IgcGF0aFNwYWNlSW5vZGUgaW4gQkJEaXJzLnNwbGl0KCk6CisgICAgICAgICMgVGhlIGlucHV0IGZvcm1hdCBpczogImRpcixzcGFjZSxpbm9kZSIsIGRpciBpcyBhIG11c3QsIHNwYWNlCisgICAgICAgICMgYW5kIGlub2RlIGFyZSBvcHRpb25hbAorICAgICAgICBwYXRoU3BhY2VJbm9kZVJlID0gcmUubWF0Y2goJyhbXixdKiksKFteLF0qKSwoW14sXSopLD8oLiopJywgcGF0aFNwYWNlSW5vZGUpCisgICAgICAgIGlmIG5vdCBwYXRoU3BhY2VJbm9kZVJlOgorICAgICAgICAgICAgcHJpbnRFcnIoIkludmFsaWQgdmFsdWUgaW4gQkJfRElTS01PTl9ESVJTOiAlcyIgJSBwYXRoU3BhY2VJbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYWN0aW9uID0gcGF0aFNwYWNlSW5vZGVSZS5ncm91cCgxKQorICAgICAgICBpZiBhY3Rpb24gbm90IGluICgiQUJPUlQiLCAiU1RPUFRBU0tTIiwgIldBUk4iKToKKyAgICAgICAgICAgIHByaW50RXJyKCJVbmtub3duIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb246ICVzIiAlIGFjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocGF0aFNwYWNlSW5vZGVSZS5ncm91cCgyKSkKKyAgICAgICAgaWYgbm90IHBhdGg6CisgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBwYXRoIHZhbHVlIGluIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGUpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgVGhlIGRpc2sgc3BhY2Ugb3IgaW5vZGUgaXMgb3B0aW9uYWwsIGJ1dCBpdCBzaG91bGQgaGF2ZSBhIGNvcnJlY3QKKyAgICAgICAgIyB2YWx1ZSBvbmNlIGl0IGlzIHNwZWNpZmllZAorICAgICAgICBtaW5TcGFjZSA9IHBhdGhTcGFjZUlub2RlUmUuZ3JvdXAoMykKKyAgICAgICAgaWYgbWluU3BhY2U6CisgICAgICAgICAgICBtaW5TcGFjZSA9IGNvbnZlcnRHTUsobWluU3BhY2UpCisgICAgICAgICAgICBpZiBub3QgbWluU3BhY2U6CisgICAgICAgICAgICAgICAgcHJpbnRFcnIoIkludmFsaWQgZGlzayBzcGFjZSB2YWx1ZSBpbiBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlUmUuZ3JvdXAoMykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTm9uZSBtZWFucyB0aGF0IGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgICAgICAgIG1pblNwYWNlID0gTm9uZQorCisgICAgICAgIG1pbklub2RlID0gcGF0aFNwYWNlSW5vZGVSZS5ncm91cCg0KQorICAgICAgICBpZiBtaW5Jbm9kZToKKyAgICAgICAgICAgIG1pbklub2RlID0gY29udmVydEdNSyhtaW5Jbm9kZSkKKyAgICAgICAgICAgIGlmIG5vdCBtaW5Jbm9kZToKKyAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBpbm9kZSB2YWx1ZSBpbiBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlUmUuZ3JvdXAoNCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTm9uZSBtZWFucyB0aGF0IGl0IGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgICAgICAgIG1pbklub2RlID0gTm9uZQorCisgICAgICAgIGlmIG1pblNwYWNlIGlzIE5vbmUgYW5kIG1pbklub2RlIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludEVycigiTm8gZGlzayBzcGFjZSBvciBpbm9kZSB2YWx1ZSBpbiBmb3VuZCBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBta2RpciBmb3IgdGhlIGRpcmVjdG9yeSBzaW5jZSBpdCBtYXkgbm90IGV4aXN0LCBmb3IgZXhhbXBsZSB0aGUKKyAgICAgICAgIyBETF9ESVIgbWF5IG5vdCBleGlzdCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBhdGgpCisgICAgICAgIGRldiA9IGdldE1vdW50ZWREZXYocGF0aCkKKyAgICAgICAgIyBVc2UgcGF0aC9hY3Rpb24gYXMgdGhlIGtleQorICAgICAgICBkZXZEaWN0W29zLnBhdGguam9pbihwYXRoLCBhY3Rpb24pXSA9IFtkZXYsIG1pblNwYWNlLCBtaW5Jbm9kZV0KKworICAgIHJldHVybiBkZXZEaWN0CisKK2RlZiBnZXRJbnRlcnZhbChjb25maWd1cmF0aW9uKToKKworICAgICIiIiBHZXQgdGhlIGRpc2sgc3BhY2UgaW50ZXJ2YWwgIiIiCisKKyAgICAjIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUwTSBhbmQgNUsuCisgICAgc3BhY2VEZWZhdWx0ID0gNTAgKiAxMDI0ICogMTAyNAorICAgIGlub2RlRGVmYXVsdCA9IDUgKiAxMDI0CisKKyAgICBpbnRlcnZhbCA9IGNvbmZpZ3VyYXRpb24uZ2V0VmFyKCJCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCIsIFRydWUpCisgICAgaWYgbm90IGludGVydmFsOgorICAgICAgICByZXR1cm4gc3BhY2VEZWZhdWx0LCBpbm9kZURlZmF1bHQKKyAgICBlbHNlOgorICAgICAgICAjIFRoZSBkaXNrIHNwYWNlIG9yIGlub2RlIGludGVydmFsIGlzIG9wdGlvbmFsLCBidXQgaXQgc2hvdWxkCisgICAgICAgICMgaGF2ZSBhIGNvcnJlY3QgdmFsdWUgb25jZSBpdCBpcyBzcGVjaWZpZWQKKyAgICAgICAgaW50ZXJ2YWxSZSA9IHJlLm1hdGNoKCcoW14sXSopLD9ccyooLiopJywgaW50ZXJ2YWwpCisgICAgICAgIGlmIGludGVydmFsUmU6CisgICAgICAgICAgICBpbnRlcnZhbFNwYWNlID0gaW50ZXJ2YWxSZS5ncm91cCgxKQorICAgICAgICAgICAgaWYgaW50ZXJ2YWxTcGFjZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbFNwYWNlID0gY29udmVydEdNSyhpbnRlcnZhbFNwYWNlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpbnRlcnZhbFNwYWNlOgorICAgICAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBkaXNrIHNwYWNlIGludGVydmFsIHZhbHVlIGluIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMOiAlcyIgJSBpbnRlcnZhbFJlLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbFNwYWNlID0gc3BhY2VEZWZhdWx0CisgICAgICAgICAgICBpbnRlcnZhbElub2RlID0gaW50ZXJ2YWxSZS5ncm91cCgyKQorICAgICAgICAgICAgaWYgaW50ZXJ2YWxJbm9kZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbElub2RlID0gY29udmVydEdNSyhpbnRlcnZhbElub2RlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpbnRlcnZhbElub2RlOgorICAgICAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBkaXNrIGlub2RlIGludGVydmFsIHZhbHVlIGluIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMOiAlcyIgJSBpbnRlcnZhbFJlLmdyb3VwKDIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbnRlcnZhbElub2RlID0gaW5vZGVEZWZhdWx0CisgICAgICAgICAgICByZXR1cm4gaW50ZXJ2YWxTcGFjZSwgaW50ZXJ2YWxJbm9kZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnRFcnIoIkludmFsaWQgaW50ZXJ2YWwgdmFsdWUgaW4gQkJfRElTS01PTl9XQVJOSU5URVJWQUw6ICVzIiAlIGludGVydmFsKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworY2xhc3MgZGlza01vbml0b3I6CisKKyAgICAiIiJQcmVwYXJlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgZGF0YSIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb24pOgorCisgICAgICAgIHNlbGYuZW5hYmxlTW9uaXRvciA9IEZhbHNlCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKworICAgICAgICBCQkRpcnMgPSBjb25maWd1cmF0aW9uLmdldFZhcigiQkJfRElTS01PTl9ESVJTIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBpZiBCQkRpcnM6CisgICAgICAgICAgICBzZWxmLmRldkRpY3QgPSBnZXREaXNrRGF0YShCQkRpcnMsIGNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICBpZiBzZWxmLmRldkRpY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5zcGFjZUludGVydmFsLCBzZWxmLmlub2RlSW50ZXJ2YWwgPSBnZXRJbnRlcnZhbChjb25maWd1cmF0aW9uKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3BhY2VJbnRlcnZhbCBhbmQgc2VsZi5pbm9kZUludGVydmFsOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZU1vbml0b3IgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICMgVGhlc2UgYXJlIGZvciBzYXZpbmcgdGhlIHByZXZpb3VzIGRpc2sgZnJlZSBzcGFjZSBhbmQgaW5vZGUsIHdlCisgICAgICAgICAgICAgICAgICAgICMgdXNlIHRoZW0gdG8gYXZvaWQgcHJpbnRpbmcgdG9vIG1hbnkgd2FybmluZyBtZXNzYWdlcworICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVTID0ge30KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlSSA9IHt9CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBmb3IgU1RPUFRBU0tTIGFuZCBBQk9SVCwgdG8gYXZvaWQgcHJpbnRpbmcgdGhlIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgIyByZXBlYXRlZGx5IHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YXNrcyB0byBmaW5pc2gKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkID0ge30KKyAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5kZXZEaWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlU1trXSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZUlba10gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZWRba10gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNwYWNlSW50ZXJ2YWwgaXMgTm9uZSBhbmQgc2VsZi5pbm9kZUludGVydmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZU1vbml0b3IgPSBGYWxzZQorCisgICAgZGVmIGNoZWNrKHNlbGYsIHJxKToKKworICAgICAgICAiIiIgVGFrZSBhY3Rpb24gZm9yIHRoZSBtb25pdG9yICIiIgorCisgICAgICAgIGlmIHNlbGYuZW5hYmxlTW9uaXRvcjoKKyAgICAgICAgICAgIGZvciBrIGluIHNlbGYuZGV2RGljdDoKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGspCisgICAgICAgICAgICAgICAgYWN0aW9uID0gb3MucGF0aC5iYXNlbmFtZShrKQorICAgICAgICAgICAgICAgIGRldiA9IHNlbGYuZGV2RGljdFtrXVswXQorICAgICAgICAgICAgICAgIG1pblNwYWNlID0gc2VsZi5kZXZEaWN0W2tdWzFdCisgICAgICAgICAgICAgICAgbWluSW5vZGUgPSBzZWxmLmRldkRpY3Rba11bMl0KKworICAgICAgICAgICAgICAgIHN0ID0gb3Muc3RhdHZmcyhwYXRoKQorCisgICAgICAgICAgICAgICAgIyBUaGUgZnJlZSBzcGFjZSwgZmxvYXQgcG9pbnQgbnVtYmVyCisgICAgICAgICAgICAgICAgZnJlZVNwYWNlID0gc3QuZl9iYXZhaWwgKiBzdC5mX2Zyc2l6ZQorCisgICAgICAgICAgICAgICAgaWYgbWluU3BhY2UgYW5kIGZyZWVTcGFjZSA8IG1pblNwYWNlOgorICAgICAgICAgICAgICAgICAgICAjIEFsd2F5cyBzaG93IHdhcm5pbmcsIHRoZSBzZWxmLmNoZWNrZWQgd291bGQgYWx3YXlzIGJlIEZhbHNlIGlmIHRoZSBhY3Rpb24gaXMgV0FSTgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnByZUZyZWVTW2tdID09IDAgb3Igc2VsZi5wcmVGcmVlU1trXSAtIGZyZWVTcGFjZSA+IHNlbGYuc3BhY2VJbnRlcnZhbCBhbmQgbm90IHNlbGYuY2hlY2tlZFtrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJUaGUgZnJlZSBzcGFjZSBvZiAlcyAoJXMpIGlzIHJ1bm5pbmcgbG93ICglLjNmR0IgbGVmdCkiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCwgZGV2LCBmcmVlU3BhY2UgLyAxMDI0IC8gMTAyNCAvIDEwMjQuMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVTW2tdID0gZnJlZVNwYWNlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgYWN0aW9uID09ICJTVE9QVEFTS1MiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBuZXcgdGFza3MgY2FuIGJlIGV4ZWN1dGVkIHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzIFwiU1RPUFRBU0tTXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGlza0Z1bGwoZGV2LCAnZGlzaycsIGZyZWVTcGFjZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhY3Rpb24gPT0gIkFCT1JUIiBhbmQgbm90IHNlbGYuY2hlY2tlZFtrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiSW1tZWRpYXRlbHkgYWJvcnQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgXCJBQk9SVFwiISIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZWRba10gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBycS5maW5pc2hfcnVucXVldWUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGlza0Z1bGwoZGV2LCAnZGlzaycsIGZyZWVTcGFjZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKworICAgICAgICAgICAgICAgICMgVGhlIGZyZWUgaW5vZGVzLCBmbG9hdCBwb2ludCBudW1iZXIKKyAgICAgICAgICAgICAgICBmcmVlSW5vZGUgPSBzdC5mX2ZhdmFpbAorCisgICAgICAgICAgICAgICAgaWYgbWluSW5vZGUgYW5kIGZyZWVJbm9kZSA8IG1pbklub2RlOgorICAgICAgICAgICAgICAgICAgICAjIFNvbWUgZmlsZXN5c3RlbXMgdXNlIGR5bmFtaWMgaW5vZGVzIHNvIGNhbid0IHJ1biBvdXQKKyAgICAgICAgICAgICAgICAgICAgIyAoZS5nLiBidHJmcykuIFRoaXMgaXMgcmVwb3J0ZWQgYnkgdGhlIGlub2RlIGNvdW50IGJlaW5nIDAuCisgICAgICAgICAgICAgICAgICAgIGlmIHN0LmZfZmlsZXMgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGV2RGljdFtrXVsyXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgQWx3YXlzIHNob3cgd2FybmluZywgdGhlIHNlbGYuY2hlY2tlZCB3b3VsZCBhbHdheXMgYmUgRmFsc2UgaWYgdGhlIGFjdGlvbiBpcyBXQVJOCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlRnJlZUlba10gPT0gMCBvciBzZWxmLnByZUZyZWVJW2tdIC0gZnJlZUlub2RlID4gc2VsZi5pbm9kZUludGVydmFsIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlRoZSBmcmVlIGlub2RlIG9mICVzICglcykgaXMgcnVubmluZyBsb3cgKCUuM2ZLIGxlZnQpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGgsIGRldiwgZnJlZUlub2RlIC8gMTAyNC4wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZUlba10gPSBmcmVlSW5vZGUKKworICAgICAgICAgICAgICAgICAgICBpZiBhY3Rpb24gID09ICJTVE9QVEFTS1MiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBuZXcgdGFza3MgY2FuIGJlIGV4ZWN1dGVkIHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzIFwiU1RPUFRBU0tTXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRGlza0Z1bGwoZGV2LCAnaW5vZGUnLCBmcmVlSW5vZGUsIHBhdGgpLCBzZWxmLmNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICAgICAgICAgIGVsaWYgYWN0aW9uICA9PSAiQUJPUlQiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbW1lZGlhdGVseSBhYm9ydCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyBcIkFCT1JUXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdpbm9kZScsIGZyZWVJbm9kZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKyAgICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21zZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbXNnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NmI1YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL21zZy5weQpAQCAtMCwwICsxLDE5OSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnbXNnJyBpbXBsZW1lbnRhdGlvbgorCitNZXNzYWdlIGhhbmRsaW5nIGluZnJhc3RydWN0dXJlIGZvciBiaXRiYWtlCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBjb3B5CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGNvbGxlY3Rpb25zCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZ3JvdXBieQoraW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5ldmVudAorCitjbGFzcyBCQkxvZ0Zvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcik6CisgICAgIiIiRm9ybWF0dGVyIHdoaWNoIGVuc3VyZXMgdGhhdCBvdXIgJ3BsYWluJyBtZXNzYWdlcyAobG9nZ2luZy5JTkZPICsgMSkgYXJlIHVzZWQgYXMgaXMiIiIKKworICAgIERFQlVHMyA9IGxvZ2dpbmcuREVCVUcgLSAyCisgICAgREVCVUcyID0gbG9nZ2luZy5ERUJVRyAtIDEKKyAgICBERUJVRyA9IGxvZ2dpbmcuREVCVUcKKyAgICBWRVJCT1NFID0gbG9nZ2luZy5JTkZPIC0gMQorICAgIE5PVEUgPSBsb2dnaW5nLklORk8KKyAgICBQTEFJTiA9IGxvZ2dpbmcuSU5GTyArIDEKKyAgICBFUlJPUiA9IGxvZ2dpbmcuRVJST1IKKyAgICBXQVJOSU5HID0gbG9nZ2luZy5XQVJOSU5HCisgICAgQ1JJVElDQUwgPSBsb2dnaW5nLkNSSVRJQ0FMCisKKyAgICBsZXZlbG5hbWVzID0geworICAgICAgICBERUJVRzMgICA6ICdERUJVRycsCisgICAgICAgIERFQlVHMiAgIDogJ0RFQlVHJywKKyAgICAgICAgREVCVUcgICA6ICdERUJVRycsCisgICAgICAgIFZFUkJPU0U6ICdOT1RFJywKKyAgICAgICAgTk9URSAgICA6ICdOT1RFJywKKyAgICAgICAgUExBSU4gIDogJycsCisgICAgICAgIFdBUk5JTkcgOiAnV0FSTklORycsCisgICAgICAgIEVSUk9SICAgOiAnRVJST1InLAorICAgICAgICBDUklUSUNBTDogJ0VSUk9SJywKKyAgICB9CisKKyAgICBjb2xvcl9lbmFibGVkID0gRmFsc2UKKyAgICBCQVNFQ09MT1IsIEJMQUNLLCBSRUQsIEdSRUVOLCBZRUxMT1csIEJMVUUsIE1BR0VOVEEsIENZQU4sIFdISVRFID0gcmFuZ2UoMjksMzgpCisKKyAgICBDT0xPUlMgPSB7CisgICAgICAgIERFQlVHMyAgOiBDWUFOLAorICAgICAgICBERUJVRzIgIDogQ1lBTiwKKyAgICAgICAgREVCVUcgICA6IENZQU4sCisgICAgICAgIFZFUkJPU0UgOiBCQVNFQ09MT1IsCisgICAgICAgIE5PVEUgICAgOiBCQVNFQ09MT1IsCisgICAgICAgIFBMQUlOICAgOiBCQVNFQ09MT1IsCisgICAgICAgIFdBUk5JTkcgOiBZRUxMT1csCisgICAgICAgIEVSUk9SICAgOiBSRUQsCisgICAgICAgIENSSVRJQ0FMOiBSRUQsCisgICAgfQorCisgICAgQkxEID0gJ1wwMzNbMTslZG0nCisgICAgU1REID0gJ1wwMzNbJWRtJworICAgIFJTVCA9ICdcMDMzWzBtJworCisgICAgZGVmIGdldExldmVsTmFtZShzZWxmLCBsZXZlbG5vKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubGV2ZWxuYW1lc1tsZXZlbG5vXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLmxldmVsbmFtZXNbbGV2ZWxub10gPSB2YWx1ZSA9ICdMZXZlbCAlZCcgJSBsZXZlbG5vCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcmVjb3JkLmxldmVsbmFtZSA9IHNlbGYuZ2V0TGV2ZWxOYW1lKHJlY29yZC5sZXZlbG5vKQorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA9PSBzZWxmLlBMQUlOOgorICAgICAgICAgICAgbXNnID0gcmVjb3JkLmdldE1lc3NhZ2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jb2xvcl9lbmFibGVkOgorICAgICAgICAgICAgICAgIHJlY29yZCA9IHNlbGYuY29sb3JpemUocmVjb3JkKQorICAgICAgICAgICAgbXNnID0gbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0KHNlbGYsIHJlY29yZCkKKworICAgICAgICBpZiBoYXNhdHRyKHJlY29yZCwgJ2JiX2V4Y19pbmZvJyk6CisgICAgICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gcmVjb3JkLmJiX2V4Y19pbmZvCisgICAgICAgICAgICBmb3JtYXR0ZWQgPSBiYi5leGNlcHRpb25zLmZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9NSkKKyAgICAgICAgICAgIG1zZyArPSAnXG4nICsgJycuam9pbihmb3JtYXR0ZWQpCisgICAgICAgIHJldHVybiBtc2cKKworICAgIGRlZiBjb2xvcml6ZShzZWxmLCByZWNvcmQpOgorICAgICAgICBjb2xvciA9IHNlbGYuQ09MT1JTW3JlY29yZC5sZXZlbG5vXQorICAgICAgICBpZiBzZWxmLmNvbG9yX2VuYWJsZWQgYW5kIGNvbG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVjb3JkID0gY29weS5jb3B5KHJlY29yZCkKKyAgICAgICAgICAgIHJlY29yZC5sZXZlbG5hbWUgPSAiIi5qb2luKFtzZWxmLkJMRCAlIGNvbG9yLCByZWNvcmQubGV2ZWxuYW1lLCBzZWxmLlJTVF0pCisgICAgICAgICAgICByZWNvcmQubXNnID0gIiIuam9pbihbc2VsZi5TVEQgJSBjb2xvciwgcmVjb3JkLm1zZywgc2VsZi5SU1RdKQorICAgICAgICByZXR1cm4gcmVjb3JkCisKKyAgICBkZWYgZW5hYmxlX2NvbG9yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbG9yX2VuYWJsZWQgPSBUcnVlCisKK2NsYXNzIEJCTG9nRmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXIsIGxldmVsLCBkZWJ1Z19kb21haW5zKToKKyAgICAgICAgc2VsZi5zdGRsZXZlbCA9IGxldmVsCisgICAgICAgIHNlbGYuZGVidWdfZG9tYWlucyA9IGRlYnVnX2RvbWFpbnMKKyAgICAgICAgbG9nbGV2ZWwgPSBsZXZlbAorICAgICAgICBmb3IgZG9tYWluIGluIGRlYnVnX2RvbWFpbnM6CisgICAgICAgICAgICBpZiBkZWJ1Z19kb21haW5zW2RvbWFpbl0gPCBsb2dsZXZlbDoKKyAgICAgICAgICAgICAgICBsb2dsZXZlbCA9IGRlYnVnX2RvbWFpbnNbZG9tYWluXQorICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ2xldmVsKQorICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcihzZWxmKQorCisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+PSBzZWxmLnN0ZGxldmVsOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgcmVjb3JkLm5hbWUgaW4gc2VsZi5kZWJ1Z19kb21haW5zIGFuZCByZWNvcmQubGV2ZWxubyA+PSBzZWxmLmRlYnVnX2RvbWFpbnNbcmVjb3JkLm5hbWVdOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEJCTG9nRmlsdGVyU3RkRXJyKEJCTG9nRmlsdGVyKToKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIG5vdCBCQkxvZ0ZpbHRlci5maWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+PSBsb2dnaW5nLkVSUk9SOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEJCTG9nRmlsdGVyU3RkT3V0KEJCTG9nRmlsdGVyKToKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIG5vdCBCQkxvZ0ZpbHRlci5maWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA8IGxvZ2dpbmcuRVJST1I6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworIyBNZXNzYWdlIGNvbnRyb2wgZnVuY3Rpb25zCisjCisKK2xvZ2dlckRlZmF1bHREZWJ1Z0xldmVsID0gMAorbG9nZ2VyRGVmYXVsdFZlcmJvc2UgPSBGYWxzZQorbG9nZ2VyVmVyYm9zZUxvZ3MgPSBGYWxzZQorbG9nZ2VyRGVmYXVsdERvbWFpbnMgPSBbXQorCitkZWYgaW5pdF9tc2djb25maWcodmVyYm9zZSwgZGVidWcsIGRlYnVnX2RvbWFpbnM9Tm9uZSk6CisgICAgIiIiCisgICAgU2V0IGRlZmF1bHQgdmVyYm9zaXR5IGFuZCBkZWJ1ZyBsZXZlbHMgY29uZmlnIHRoZSBsb2dnZXIKKyAgICAiIiIKKyAgICBiYi5tc2cubG9nZ2VyRGVmYXVsdERlYnVnTGV2ZWwgPSBkZWJ1ZworICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0VmVyYm9zZSA9IHZlcmJvc2UKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MgPSBUcnVlCisgICAgaWYgZGVidWdfZG9tYWluczoKKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zID0gZGVidWdfZG9tYWlucworICAgIGVsc2U6CisgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RG9tYWlucyA9IFtdCisKK2RlZiBjb25zdHJ1Y3RMb2dPcHRpb25zKCk6CisgICAgZGVidWcgPSBsb2dnZXJEZWZhdWx0RGVidWdMZXZlbAorICAgIHZlcmJvc2UgPSBsb2dnZXJEZWZhdWx0VmVyYm9zZQorICAgIGRvbWFpbnMgPSBsb2dnZXJEZWZhdWx0RG9tYWlucworCisgICAgaWYgZGVidWc6CisgICAgICAgIGxldmVsID0gQkJMb2dGb3JtYXR0ZXIuREVCVUcgLSBkZWJ1ZyArIDEKKyAgICBlbGlmIHZlcmJvc2U6CisgICAgICAgIGxldmVsID0gQkJMb2dGb3JtYXR0ZXIuVkVSQk9TRQorICAgIGVsc2U6CisgICAgICAgIGxldmVsID0gQkJMb2dGb3JtYXR0ZXIuTk9URQorCisgICAgZGVidWdfZG9tYWlucyA9IHt9CisgICAgZm9yIChkb21haW5hcmcsIGl0ZXJhdG9yKSBpbiBncm91cGJ5KGRvbWFpbnMpOgorICAgICAgICBkbGV2ZWwgPSBsZW4odHVwbGUoaXRlcmF0b3IpKQorICAgICAgICBkZWJ1Z19kb21haW5zWyJCaXRCYWtlLiVzIiAlIGRvbWFpbmFyZ10gPSBsb2dnaW5nLkRFQlVHIC0gZGxldmVsICsgMQorICAgIHJldHVybiBsZXZlbCwgZGVidWdfZG9tYWlucworCitkZWYgYWRkRGVmYXVsdGxvZ0ZpbHRlcihoYW5kbGVyLCBjbHMgPSBCQkxvZ0ZpbHRlcik6CisgICAgbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBjb25zdHJ1Y3RMb2dPcHRpb25zKCkKKworICAgIGNscyhoYW5kbGVyLCBsZXZlbCwgZGVidWdfZG9tYWlucykKKworIworIyBNZXNzYWdlIGhhbmRsaW5nIGZ1bmN0aW9ucworIworCitkZWYgZmF0YWwobXNnZG9tYWluLCBtc2cpOgorICAgIGlmIG1zZ2RvbWFpbjoKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuJXMiICUgbXNnZG9tYWluKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICBsb2dnZXIuY3JpdGljYWwobXNnKQorICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL25hbWVkdHVwbGVfd2l0aF9hYmMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL25hbWVkdHVwbGVfd2l0aF9hYmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmMmZjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvbmFtZWR0dXBsZV93aXRoX2FiYy5weQpAQCAtMCwwICsxLDI1NSBAQAorIyBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvCisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDExIEphbiBLYWxpc3pld3NraSAoenVvKS4gQXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KKworIiIiCituYW1lZHR1cGxlX3dpdGhfYWJjLnB5OgorKiBuYW1lZCB0dXBsZSBtaXgtaW4gKyBBQkMgKGFic3RyYWN0IGJhc2UgY2xhc3MpIHJlY2lwZSwKKyogd29ya3MgdW5kZXIgUHl0aG9uIDIuNiwgMi43IGFzIHdlbGwgYXMgMy54LgorCitJbXBvcnQgdGhpcyBtb2R1bGUgdG8gcGF0Y2ggY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIGZhY3RvcnkgZnVuY3Rpb24KKy0tIGVucmljaGluZyBpdCB3aXRoIHRoZSAnYWJjJyBhdHRyaWJ1dGUgKGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgKyBtaXgtaW4KK2ZvciBuYW1lZCB0dXBsZXMpIGFuZCBkZWNvcmF0aW5nIGl0IHdpdGggYSB3cmFwcGVyIHRoYXQgcmVnaXN0ZXJzIGVhY2gKK25ld2x5IGNyZWF0ZWQgbmFtZWQgdHVwbGUgYXMgYSBzdWJjbGFzcyBvZiBuYW1lZHR1cGxlLmFiYy4KKworSG93IHRvIGltcG9ydDoKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMsIG5hbWVkdHVwbGVfd2l0aF9hYmMKK29yOgorICAgIGltcG9ydCBuYW1lZHR1cGxlX3dpdGhfYWJjCisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorICAgICMgXiBpbiB0aGlzIHZhcmlhbnQgeW91IG11c3QgaW1wb3J0IG5hbWVkdHVwbGUgZnVuY3Rpb24KKyAgICAjICAgKmFmdGVyKiBpbXBvcnRpbmcgbmFtZWR0dXBsZV93aXRoX2FiYyBtb2R1bGUKK29yIHNpbXBseToKKyAgICBmcm9tIG5hbWVkdHVwbGVfd2l0aF9hYmMgaW1wb3J0IG5hbWVkdHVwbGUKKworU2ltcGxlIHVzYWdlIGV4YW1wbGU6CisgICAgY2xhc3MgQ3JlZGVudGlhbHMobmFtZWR0dXBsZS5hYmMpOgorICAgICAgICBfZmllbGRzID0gJ3VzZXJuYW1lIHBhc3N3b3JkJworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAoJ3swLl9fY2xhc3NfXy5fX25hbWVfX30nCisgICAgICAgICAgICAgICAgICAgICcodXNlcm5hbWU9ezAudXNlcm5hbWV9LCBwYXNzd29yZD0uLi4pJy5mb3JtYXQoc2VsZikpCisgICAgcHJpbnQoQ3JlZGVudGlhbHMoImFsaWNlIiwgIkFsaWNlJ3MgcGFzc3dvcmQiKSkKKworRm9yIG1vcmUgYWR2YW5jZWQgZXhhbXBsZXMgLS0gc2VlIGJlbG93IHRoZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoiLgorIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0cHJvcGVydHkKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworZnJvbSBzeXMgaW1wb3J0IHZlcnNpb25faW5mbworCitfX2FsbF9fID0gKCduYW1lZHR1cGxlJywpCitfbmFtZWR0dXBsZSA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUKKworCitjbGFzcyBfTmFtZWRUdXBsZUFCQ01ldGEoQUJDTWV0YSk6CisgICAgJycnVGhlIG1ldGFjbGFzcyBmb3IgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgKyBtaXgtaW4gZm9yIG5hbWVkIHR1cGxlcy4nJycKKyAgICBkZWYgX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKToKKyAgICAgICAgZmllbGRzID0gbmFtZXNwYWNlLmdldCgnX2ZpZWxkcycpCisgICAgICAgIGZvciBiYXNlIGluIGJhc2VzOgorICAgICAgICAgICAgaWYgZmllbGRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaWVsZHMgPSBnZXRhdHRyKGJhc2UsICdfZmllbGRzJywgTm9uZSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZmllbGRzLCBhYnN0cmFjdHByb3BlcnR5KToKKyAgICAgICAgICAgIGJhc2V0dXBsZSA9IF9uYW1lZHR1cGxlKG5hbWUsIGZpZWxkcykKKyAgICAgICAgICAgIGJhc2VzID0gKGJhc2V0dXBsZSwpICsgYmFzZXMKKyAgICAgICAgICAgIG5hbWVzcGFjZS5wb3AoJ19maWVsZHMnLCBOb25lKQorICAgICAgICAgICAgbmFtZXNwYWNlLnNldGRlZmF1bHQoJ19fZG9jX18nLCBiYXNldHVwbGUuX19kb2NfXykKKyAgICAgICAgICAgIG5hbWVzcGFjZS5zZXRkZWZhdWx0KCdfX3Nsb3RzX18nLCAoKSkKKyAgICAgICAgcmV0dXJuIEFCQ01ldGEuX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKQorCisKK2V4ZWMoCisgICAgIyBQeXRob24gMi54IG1ldGFjbGFzcyBkZWNsYXJhdGlvbiBzeW50YXgKKyAgICAiIiJjbGFzcyBfTmFtZWRUdXBsZUFCQyhvYmplY3QpOgorICAgICAgICAnJydUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbiBmb3IgbmFtZWQgdHVwbGVzLicnJworICAgICAgICBfX21ldGFjbGFzc19fID0gX05hbWVkVHVwbGVBQkNNZXRhCisgICAgICAgIF9maWVsZHMgPSBhYnN0cmFjdHByb3BlcnR5KCkiIiIgaWYgdmVyc2lvbl9pbmZvWzBdIDwgMyBlbHNlCisgICAgIyBQeXRob24gMy54IG1ldGFjbGFzcyBkZWNsYXJhdGlvbiBzeW50YXgKKyAgICAiIiJjbGFzcyBfTmFtZWRUdXBsZUFCQyhtZXRhY2xhc3M9X05hbWVkVHVwbGVBQkNNZXRhKToKKyAgICAgICAgJycnVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgKyBtaXgtaW4gZm9yIG5hbWVkIHR1cGxlcy4nJycKKyAgICAgICAgX2ZpZWxkcyA9IGFic3RyYWN0cHJvcGVydHkoKSIiIgorKQorCisKK19uYW1lZHR1cGxlLmFiYyA9IF9OYW1lZFR1cGxlQUJDCisjX05hbWVkVHVwbGVBQkMucmVnaXN0ZXIodHlwZSh2ZXJzaW9uX2luZm8pKSAgIyAoYW5kIHNpbWlsYXIsIGluIHRoZSBmdXR1cmUuLi4pCisKK0B3cmFwcyhfbmFtZWR0dXBsZSkKK2RlZiBuYW1lZHR1cGxlKCphcmdzLCAqKmt3YXJncyk6CisgICAgJycnTmFtZWQgdHVwbGUgZmFjdG9yeSB3aXRoIG5hbWVkdHVwbGUuYWJjIHN1YmNsYXNzIHJlZ2lzdHJhdGlvbi4nJycKKyAgICBjbHMgPSBfbmFtZWR0dXBsZSgqYXJncywgKiprd2FyZ3MpCisgICAgX05hbWVkVHVwbGVBQkMucmVnaXN0ZXIoY2xzKQorICAgIHJldHVybiBjbHMKKworY29sbGVjdGlvbnMubmFtZWR0dXBsZSA9IG5hbWVkdHVwbGUKKworCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKworICAgICcnJ0V4YW1wbGVzIGFuZCBleHBsYW5hdGlvbnMnJycKKworICAgICMgU2ltcGxlIHVzYWdlCisKKyAgICBjbGFzcyBNeVJlY29yZChuYW1lZHR1cGxlLmFiYyk6CisgICAgICAgIF9maWVsZHMgPSAneCB5IHonICAjIHN1Y2ggZm9ybSB3aWxsIGJlIHRyYW5zZm9ybWVkIGludG8gKCd4JywgJ3knLCAneicpCisgICAgICAgIGRlZiBfbXlfY3VzdG9tX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2FzZGljdCgpLml0ZW1zKCkpCisgICAgIyAodGhlICdfZmllbGRzJyBhdHRyaWJ1dGUgYmVsb25ncyB0byB0aGUgbmFtZWQgdHVwbGUgcHVibGljIEFQSSBhbnl3YXkpCisKKyAgICByZWMgPSBNeVJlY29yZCgxLCAyLCAzKQorICAgIHByaW50KHJlYykKKyAgICBwcmludChyZWMuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMuX3JlcGxhY2UoeT0yMjIpKQorICAgIHByaW50KHJlYy5fcmVwbGFjZSh5PTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgICMgQ3VzdG9tIGFic3RyYWN0IGNsYXNzZXMuLi4KKworICAgIGNsYXNzIE15QWJzdHJhY3RSZWNvcmQobmFtZWR0dXBsZS5hYmMpOgorICAgICAgICBkZWYgX215X2N1c3RvbV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gbGlzdChzZWxmLl9hc2RpY3QoKS5pdGVtcygpKQorCisgICAgdHJ5OgorICAgICAgICBNeUFic3RyYWN0UmVjb3JkKCkgICMgKGFic3RyYWN0IGNsYXNzZXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCkKKyAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4YzoKKyAgICAgICAgcHJpbnQoZXhjKQorCisgICAgY2xhc3MgQW5vdGhlckFic3RyYWN0UmVjb3JkKE15QWJzdHJhY3RSZWNvcmQpOgorICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAnPDw8ezB9Pj4+Jy5mb3JtYXQoc3VwZXIoQW5vdGhlckFic3RyYWN0UmVjb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5fX3N0cl9fKCkpCisKKyAgICAjIC4uLmFuZCB0aGVpciBub24tYWJzdHJhY3Qgc3ViY2xhc3NlcworCisgICAgY2xhc3MgTXlSZWNvcmQyKE15QWJzdHJhY3RSZWNvcmQpOgorICAgICAgICBfZmllbGRzID0gJ2EsIGInCisKKyAgICBjbGFzcyBNeVJlY29yZDMoQW5vdGhlckFic3RyYWN0UmVjb3JkKToKKyAgICAgICAgX2ZpZWxkcyA9ICdwJywgJ3EnLCAncicKKworICAgIHJlYzIgPSBNeVJlY29yZDIoJ2ZvbycsICdiYXInKQorICAgIHByaW50KHJlYzIpCisgICAgcHJpbnQocmVjMi5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYzIuX3JlcGxhY2UoYj0yMjIpKQorICAgIHByaW50KHJlYzIuX3JlcGxhY2UoYj0yMjIpLl9teV9jdXN0b21fbWV0aG9kKCkpCisKKyAgICByZWMzID0gTXlSZWNvcmQzKCdmb28nLCAnYmFyJywgJ2JheicpCisgICAgcHJpbnQocmVjMykKKyAgICBwcmludChyZWMzLl9teV9jdXN0b21fbWV0aG9kKCkpCisgICAgcHJpbnQocmVjMy5fcmVwbGFjZShxPTIyMikpCisgICAgcHJpbnQocmVjMy5fcmVwbGFjZShxPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgIyBZb3UgY2FuIGFsc28gc3ViY2xhc3Mgbm9uLWFic3RyYWN0IG9uZXMuLi4KKworICAgIGNsYXNzIE15UmVjb3JkMzMoTXlSZWNvcmQzKToKKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gJzwgezAhcn0sIC4uLiwgezAhcn0gPicuZm9ybWF0KHNlbGYucCwgc2VsZi5yKQorCisgICAgcmVjMzMgPSBNeVJlY29yZDMzKCdmb28nLCAnYmFyJywgJ2JheicpCisgICAgcHJpbnQocmVjMzMpCisgICAgcHJpbnQocmVjMzMuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMzMy5fcmVwbGFjZShxPTIyMikpCisgICAgcHJpbnQocmVjMzMuX3JlcGxhY2UocT0yMjIpLl9teV9jdXN0b21fbWV0aG9kKCkpCisKKyAgICAjIC4uLmFuZCBldmVuIG92ZXJyaWRlIHRoZSBtYWdpYyAnX2ZpZWxkcycgYXR0cmlidXRlIGFnYWluCisKKyAgICBjbGFzcyBNeVJlY29yZDM0NShNeVJlY29yZDMpOgorICAgICAgICBfZmllbGRzID0gJ2UgZiBnIGggaSBqIGsnCisKKyAgICByZWMzNDUgPSBNeVJlY29yZDM0NSgxLCAyLCAzLCA0LCAzLCAyLCAxKQorICAgIHByaW50KHJlYzM0NSkKKyAgICBwcmludChyZWMzNDUuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMzNDUuX3JlcGxhY2UoZj0yMjIpKQorICAgIHByaW50KHJlYzM0NS5fcmVwbGFjZShmPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgICMgTWl4aW5nLWluIHNvbWUgb3RoZXIgY2xhc3NlcyBpcyBhbHNvIHBvc3NpYmxlOgorCisgICAgY2xhc3MgTXlNaXhJbihvYmplY3QpOgorICAgICAgICBkZWYgbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJNeU1peEluLm1ldGhvZCgpIGNhbGxlZCIKKyAgICAgICAgZGVmIF9teV9jdXN0b21fbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJNeU1peEluLl9teV9jdXN0b21fbWV0aG9kKCkgY2FsbGVkIgorICAgICAgICBkZWYgY291bnQoc2VsZiwgaXRlbSk6CisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4uY291bnQoezB9KSBjYWxsZWQiLmZvcm1hdChpdGVtKQorICAgICAgICBkZWYgX2FzZGljdChzZWxmKTogICMgKGNhbm5vdCBvdmVycmlkZSBhIG5hbWVkdHVwbGUgbWV0aG9kLCBzZWUgYmVsb3cpCisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4uX2FzZGljdCgpIGNhbGxlZCIKKworICAgIGNsYXNzIE15UmVjb3JkNChNeVJlY29yZDMzLCBNeU1peEluKTogICMgbWl4LWluIG9uIHRoZSByaWdodAorICAgICAgICBfZmllbGRzID0gJ2ogayBsIHgnCisKKyAgICBjbGFzcyBNeVJlY29yZDUoTXlNaXhJbiwgTXlSZWNvcmQzMyk6ICAjIG1peC1pbiBvbiB0aGUgbGVmdAorICAgICAgICBfZmllbGRzID0gJ2ogayBsIHggeScKKworICAgIHJlYzQgPSBNeVJlY29yZDQoMSwgMiwgMywgMikKKyAgICBwcmludChyZWM0KQorICAgIHByaW50KHJlYzQubWV0aG9kKCkpCisgICAgcHJpbnQocmVjNC5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeVJlY29yZDMzJ3MKKyAgICBwcmludChyZWM0LmNvdW50KDIpKSAgIyB0dXBsZSdzCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikpCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikubWV0aG9kKCkpCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkgICMgTXlSZWNvcmQzMydzCisgICAgcHJpbnQocmVjNC5fcmVwbGFjZShrPTIyMikuY291bnQoOCkpICAjIHR1cGxlJ3MKKworICAgIHJlYzUgPSBNeVJlY29yZDUoMSwgMiwgMywgMiwgMSkKKyAgICBwcmludChyZWM1KQorICAgIHByaW50KHJlYzUubWV0aG9kKCkpCisgICAgcHJpbnQocmVjNS5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeU1peEluJ3MKKyAgICBwcmludChyZWM1LmNvdW50KDIpKSAgIyBNeU1peEluJ3MKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKSkKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKS5tZXRob2QoKSkKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeU1peEluJ3MKKyAgICBwcmludChyZWM1Ll9yZXBsYWNlKGs9MjIyKS5jb3VudCgyKSkgICMgTXlNaXhJbidzCisKKyAgICAjIE5vdGUgdGhhdCBiZWhhdmlvcjogdGhlIHN0YW5kYXJkIG5hbWVkdHVwbGUgbWV0aG9kcyBjYW5ub3QgYmUKKyAgICAjIG92ZXJyaWRkZW4gYnkgYSBmb3JlaWduIG1peC1pbiAtLSBldmVuIGlmIHRoZSBtaXgtaW4gaXMgZGVjbGFyZWQKKyAgICAjIGFzIHRoZSBsZWZ0bW9zdCBiYXNlIGNsYXNzIChidXQsIG9idmlvdXNseSwgeW91IGNhbiBvdmVycmlkZSB0aGVtCisgICAgIyBpbiB0aGUgZGVmaW5lZCBjbGFzcyBvciBpdHMgc3ViY2xhc3Nlcyk6CisKKyAgICBwcmludChyZWM0Ll9hc2RpY3QoKSkgICMgKHJldHVybnMgYSBkaWN0LCBub3QgIk15TWl4SW4uX2FzZGljdCgpIGNhbGxlZCIpCisgICAgcHJpbnQocmVjNS5fYXNkaWN0KCkpICAjIChyZXR1cm5zIGEgZGljdCwgbm90ICJNeU1peEluLl9hc2RpY3QoKSBjYWxsZWQiKQorCisgICAgY2xhc3MgTXlSZWNvcmQ2KE15UmVjb3JkMzMpOgorICAgICAgICBfZmllbGRzID0gJ2ogayBsIHggeSB6JworICAgICAgICBkZWYgX2FzZGljdChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiTXlSZWNvcmQ2Ll9hc2RpY3QoKSBjYWxsZWQiCisgICAgcmVjNiA9IE15UmVjb3JkNigxLCAyLCAzLCAxLCAyLCAzKQorICAgIHByaW50KHJlYzYuX2FzZGljdCgpKSAgIyAodGhpcyByZXR1cm5zICJNeVJlY29yZDYuX2FzZGljdCgpIGNhbGxlZCIpCisKKyAgICAjIEFsbCB0aGF0IHJlY29yZCBjbGFzc2VzIGFyZSByZWFsIHN1YmNsYXNzZXMgb2YgbmFtZWR0dXBsZS5hYmM6CisKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZCwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlBYnN0cmFjdFJlY29yZCwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoQW5vdGhlckFic3RyYWN0UmVjb3JkLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDIsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMywgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzMywgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzNDUsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNCwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ1LCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDYsIG5hbWVkdHVwbGUuYWJjKQorCisgICAgIyAuLi5idXQgYWJzdHJhY3Qgb25lcyBhcmUgbm90IHN1YmNsYXNzZXMgb2YgdHVwbGUKKyAgICAjIChhbmQgdGhpcyBpcyB3aGF0IHlvdSBwcm9iYWJseSB3YW50KToKKworICAgIGFzc2VydCBub3QgaXNzdWJjbGFzcyhNeUFic3RyYWN0UmVjb3JkLCB0dXBsZSkKKyAgICBhc3NlcnQgbm90IGlzc3ViY2xhc3MoQW5vdGhlckFic3RyYWN0UmVjb3JkLCB0dXBsZSkKKworICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkLCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDIsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMywgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzMywgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzNDUsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNCwgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ1LCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDYsIHR1cGxlKQorCisgICAgIyBOYW1lZCB0dXBsZSBjbGFzc2VzIGNyZWF0ZWQgd2l0aCBuYW1lZHR1cGxlKCkgZmFjdG9yeSBmdW5jdGlvbgorICAgICMgKGluIHRoZSAidHJhZGl0aW9uYWwiIHdheSkgYXJlIHJlZ2lzdGVyZWQgYXMgInZpcnR1YWwiIHN1YmNsYXNzZXMKKyAgICAjIG9mIG5hbWVkdHVwbGUuYWJjOgorCisgICAgTXlUdXBsZSA9IG5hbWVkdHVwbGUoJ015VHVwbGUnLCAnYSBiIGMnKQorICAgIG10ID0gTXlUdXBsZSgxLCAyLCAzKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15VHVwbGUsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc2luc3RhbmNlKG10LCBuYW1lZHR1cGxlLmFiYykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWM3MWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTcwIEBACisiIiIKK0JpdEJha2UgUGFyc2VycworCitGaWxlIHBhcnNlcnMgZm9yIHRoZSBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorCisiIiIKKworCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitoYW5kbGVycyA9IFtdCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN0YXQKK2ltcG9ydCBiYgoraW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgYmIuc2lnZ2VuCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBhcnNpbmciKQorCitjbGFzcyBQYXJzZUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHBhcnNpbmcgZmFpbHMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBmaWxlbmFtZSwgbGluZW5vPTApOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZywgZmlsZW5hbWUsIGxpbmVubykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmxpbmVubzoKKyAgICAgICAgICAgIHJldHVybiAiUGFyc2VFcnJvciBhdCAlczolZDogJXMiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vLCBzZWxmLm1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiUGFyc2VFcnJvciBpbiAlczogJXMiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubXNnKQorCitjbGFzcyBTa2lwUmVjaXBlKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB0byBza2lwIHRoaXMgcmVjaXBlIiIiCisKK2NsYXNzIFNraXBQYWNrYWdlKFNraXBSZWNpcGUpOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgdG8gc2tpcCB0aGlzIHJlY2lwZSAodXNlIFNraXBSZWNpcGUgaW4gbmV3IGNvZGUpIiIiCisKK19fbXRpbWVfY2FjaGUgPSB7fQorZGVmIGNhY2hlZF9tdGltZShmKToKKyAgICBpZiBmIG5vdCBpbiBfX210aW1lX2NhY2hlOgorICAgICAgICBfX210aW1lX2NhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgIHJldHVybiBfX210aW1lX2NhY2hlW2ZdCisKK2RlZiBjYWNoZWRfbXRpbWVfbm9lcnJvcihmKToKKyAgICBpZiBmIG5vdCBpbiBfX210aW1lX2NhY2hlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfX210aW1lX2NhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgcmV0dXJuIF9fbXRpbWVfY2FjaGVbZl0KKworZGVmIHVwZGF0ZV9tdGltZShmKToKKyAgICB0cnk6CisgICAgICAgIF9fbXRpbWVfY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIGlmIGYgaW4gX19tdGltZV9jYWNoZToKKyAgICAgICAgICAgIGRlbCBfX210aW1lX2NhY2hlW2ZdCisgICAgICAgIHJldHVybiAwCisgICAgcmV0dXJuIF9fbXRpbWVfY2FjaGVbZl0KKworZGVmIHVwZGF0ZV9jYWNoZShmKToKKyAgICBpZiBmIGluIF9fbXRpbWVfY2FjaGU6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgbXRpbWUgY2FjaGUgZm9yICVzIiAlIGYpCisgICAgICAgIHVwZGF0ZV9tdGltZShmKQorCitkZWYgbWFya19kZXBlbmRlbmN5KGQsIGYpOgorICAgIGlmIGYuc3RhcnRzd2l0aCgnLi8nKToKKyAgICAgICAgZiA9ICIlcy8lcyIgJSAob3MuZ2V0Y3dkKCksIGZbMjpdKQorICAgIGRlcHMgPSAoZC5nZXRWYXIoJ19fZGVwZW5kcycsIEZhbHNlKSBvciBbXSkKKyAgICBzID0gKGYsIGNhY2hlZF9tdGltZV9ub2Vycm9yKGYpKQorICAgIGlmIHMgbm90IGluIGRlcHM6CisgICAgICAgIGRlcHMuYXBwZW5kKHMpCisgICAgICAgIGQuc2V0VmFyKCdfX2RlcGVuZHMnLCBkZXBzKQorCitkZWYgY2hlY2tfZGVwZW5kZW5jeShkLCBmKToKKyAgICBzID0gKGYsIGNhY2hlZF9tdGltZV9ub2Vycm9yKGYpKQorICAgIGRlcHMgPSAoZC5nZXRWYXIoJ19fZGVwZW5kcycsIEZhbHNlKSBvciBbXSkKKyAgICByZXR1cm4gcyBpbiBkZXBzCisgICAKK2RlZiBzdXBwb3J0cyhmbiwgZGF0YSk6CisgICAgIiIiUmV0dXJucyB0cnVlIGlmIHdlIGhhdmUgYSBoYW5kbGVyIGZvciB0aGlzIGZpbGUsIGZhbHNlIG90aGVyd2lzZSIiIgorICAgIGZvciBoIGluIGhhbmRsZXJzOgorICAgICAgICBpZiBoWydzdXBwb3J0cyddKGZuLCBkYXRhKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgcmV0dXJuIDAKKworZGVmIGhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSA9IDApOgorICAgICIiIkNhbGwgdGhlIGhhbmRsZXIgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBmaWxlIiIiCisgICAgZm9yIGggaW4gaGFuZGxlcnM6CisgICAgICAgIGlmIGhbJ3N1cHBvcnRzJ10oZm4sIGRhdGEpOgorICAgICAgICAgICAgd2l0aCBkYXRhLmluY2hpc3RvcnkuaW5jbHVkZShmbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhbJ2hhbmRsZSddKGZuLCBkYXRhLCBpbmNsdWRlKQorICAgIHJhaXNlIFBhcnNlRXJyb3IoIm5vdCBhIEJpdEJha2UgZmlsZSIsIGZuKQorCitkZWYgaW5pdChmbiwgZGF0YSk6CisgICAgZm9yIGggaW4gaGFuZGxlcnM6CisgICAgICAgIGlmIGhbJ3N1cHBvcnRzJ10oZm4pOgorICAgICAgICAgICAgcmV0dXJuIGhbJ2luaXQnXShkYXRhKQorCitkZWYgaW5pdF9wYXJzZXIoZCk6CisgICAgYmIucGFyc2Uuc2lnZ2VuID0gYmIuc2lnZ2VuLmluaXQoZCkKKworZGVmIHJlc29sdmVfZmlsZShmbiwgZCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZm4pOgorICAgICAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkKKyAgICAgICAgbmV3Zm4sIGF0dGVtcHRzID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBmbiwgaGlzdG9yeT1UcnVlKQorICAgICAgICBmb3IgYWYgaW4gYXR0ZW1wdHM6CisgICAgICAgICAgICBtYXJrX2RlcGVuZGVuY3koZCwgYWYpCisgICAgICAgIGlmIG5vdCBuZXdmbjoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRU5PRU5ULCAiZmlsZSAlcyBub3QgZm91bmQgaW4gJXMiICUgKGZuLCBiYnBhdGgpKQorICAgICAgICBmbiA9IG5ld2ZuCisKKyAgICBtYXJrX2RlcGVuZGVuY3koZCwgZm4pCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FTk9FTlQsICJmaWxlICVzIG5vdCBmb3VuZCIgJSBmbikKKworICAgIHJldHVybiBmbgorCisjIFVzZWQgYnkgT3BlbkVtYmVkZGVkIG1ldGFkYXRhCitfX3BrZ3NwbGl0X2NhY2hlX189e30KK2RlZiB2YXJzX2Zyb21fZmlsZShteXBrZywgZCk6CisgICAgaWYgbm90IG15cGtnIG9yIG5vdCBteXBrZy5lbmRzd2l0aCgoIi5iYiIsICIuYmJhcHBlbmQiKSk6CisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSkKKyAgICBpZiBteXBrZyBpbiBfX3BrZ3NwbGl0X2NhY2hlX186CisgICAgICAgIHJldHVybiBfX3BrZ3NwbGl0X2NhY2hlX19bbXlwa2ddCisKKyAgICBteWZpbGUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobXlwa2cpKQorICAgIHBhcnRzID0gbXlmaWxlWzBdLnNwbGl0KCdfJykKKyAgICBfX3BrZ3NwbGl0X2NhY2hlX19bbXlwa2ddID0gcGFydHMKKyAgICBpZiBsZW4ocGFydHMpID4gMzoKKyAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiVW5hYmxlIHRvIGdlbmVyYXRlIGRlZmF1bHQgdmFyaWFibGVzIGZyb20gZmlsZW5hbWUgKHRvbyBtYW55IHVuZGVyc2NvcmVzKSIsIG15cGtnKQorICAgIGV4cCA9IDMgLSBsZW4ocGFydHMpCisgICAgdG1wbGlzdCA9IFtdCisgICAgd2hpbGUgZXhwICE9IDA6CisgICAgICAgIGV4cCAtPSAxCisgICAgICAgIHRtcGxpc3QuYXBwZW5kKE5vbmUpCisgICAgcGFydHMuZXh0ZW5kKHRtcGxpc3QpCisgICAgcmV0dXJuIHBhcnRzCisKK2RlZiBnZXRfZmlsZV9kZXBlbmRzKGQpOgorICAgICcnJ1JldHVybiB0aGUgZGVwZW5kZW50IGZpbGVzJycnCisgICAgZGVwX2ZpbGVzID0gW10KKyAgICBkZXBlbmRzID0gZC5nZXRWYXIoJ19fYmFzZV9kZXBlbmRzJywgVHJ1ZSkgb3IgW10KKyAgICBkZXBlbmRzID0gZGVwZW5kcyArIChkLmdldFZhcignX19kZXBlbmRzJywgVHJ1ZSkgb3IgW10pCisgICAgZm9yIChmbiwgXykgaW4gZGVwZW5kczoKKyAgICAgICAgZGVwX2ZpbGVzLmFwcGVuZChvcy5wYXRoLmFic3BhdGgoZm4pKQorICAgIHJldHVybiAiICIuam9pbihkZXBfZmlsZXMpCisKK2Zyb20gYmIucGFyc2UucGFyc2VfcHkgaW1wb3J0IF9fdmVyc2lvbl9fLCBDb25mSGFuZGxlciwgQkJIYW5kbGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL2FzdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvYXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGIxODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL2FzdC5weQpAQCAtMCwwICsxLDQ4MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorIEFic3RyYWN0U3ludGF4VHJlZSBjbGFzc2VzIGZvciB0aGUgQml0YmFrZSBsYW5ndWFnZQorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2Zyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBmaWx0ZXIKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IGl0ZXJ0b29scworZnJvbSBiYiBpbXBvcnQgbWV0aG9kcG9vbAorZnJvbSBiYi5wYXJzZSBpbXBvcnQgbG9nZ2VyCisKK19iYnZlcnNpb25zX3JlID0gcmUuY29tcGlsZShyIlxbKD9QPGZyb20+WzAtOV0rKS0oP1A8dG8+WzAtOV0rKVxdIikKKworY2xhc3MgU3RhdGVtZW50R3JvdXAobGlzdCk6CisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGZvciBzdGF0ZW1lbnQgaW4gc2VsZjoKKyAgICAgICAgICAgIHN0YXRlbWVudC5ldmFsKGRhdGEpCisKK2NsYXNzIEFzdE5vZGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworCitjbGFzcyBJbmNsdWRlTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgd2hhdF9maWxlLCBmb3JjZSk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi53aGF0X2ZpbGUgPSB3aGF0X2ZpbGUKKyAgICAgICAgc2VsZi5mb3JjZSA9IGZvcmNlCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIEluY2x1ZGUgdGhlIGZpbGUgYW5kIGV2YWx1YXRlIHRoZSBzdGF0ZW1lbnRzCisgICAgICAgICIiIgorICAgICAgICBzID0gZGF0YS5leHBhbmQoc2VsZi53aGF0X2ZpbGUpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ09ORiAlczolczogaW5jbHVkaW5nICVzIiwgc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIHMpCisKKyAgICAgICAgIyBUT0RPOiBDYWNoZSB0aG9zZSBpbmNsdWRlcy4uLiBtYXliZSBub3QgaGVyZSB0aG91Z2gKKyAgICAgICAgaWYgc2VsZi5mb3JjZToKKyAgICAgICAgICAgIGJiLnBhcnNlLkNvbmZIYW5kbGVyLmluY2x1ZGUoc2VsZi5maWxlbmFtZSwgcywgc2VsZi5saW5lbm8sIGRhdGEsICJpbmNsdWRlIHJlcXVpcmVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLnBhcnNlLkNvbmZIYW5kbGVyLmluY2x1ZGUoc2VsZi5maWxlbmFtZSwgcywgc2VsZi5saW5lbm8sIGRhdGEsIEZhbHNlKQorCitjbGFzcyBFeHBvcnROb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCB2YXIpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYudmFyID0gdmFyCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYudmFyLCAiZXhwb3J0IiwgMSwgb3AgPSAnZXhwb3J0ZWQnKQorCitjbGFzcyBEYXRhTm9kZShBc3ROb2RlKToKKyAgICAiIiIKKyAgICBWYXJpb3VzIGRhdGEgcmVsYXRlZCB1cGRhdGVzLiBGb3IgdGhlIHNha2Ugb2Ygc2FuaXR5CisgICAgd2UgaGF2ZSBvbmUgY2xhc3MgZG9pbmcgYWxsIHRoaXMuIFRoaXMgbWVhbnMgdGhhdCBhbGwKKyAgICB0aGlzIG5lZWQgdG8gYmUgcmUtZXZhbHVhdGVkLi4uIHdlIG1pZ2h0IGJlIGFibGUgdG8gZG8KKyAgICB0aGF0IGZhc3RlciB3aXRoIG11bHRpcGxlIGNsYXNzZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGdyb3VwZCk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5ncm91cGQgPSBncm91cGQKKworICAgIGRlZiBnZXRGdW5jKHNlbGYsIGtleSwgZGF0YSk6CisgICAgICAgIGlmICdmbGFnJyBpbiBzZWxmLmdyb3VwZCBhbmQgc2VsZi5ncm91cGRbJ2ZsYWcnXSAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0VmFyRmxhZyhrZXksIHNlbGYuZ3JvdXBkWydmbGFnJ10sIG5vd2Vha2RlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkYXRhLmdldFZhcihrZXksIEZhbHNlLCBub3dlYWtkZWZhdWx0PVRydWUsIHBhcnNpbmc9VHJ1ZSkKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBncm91cGQgPSBzZWxmLmdyb3VwZAorICAgICAgICBrZXkgPSBncm91cGRbInZhciJdCisgICAgICAgIGxvZ2luZm8gPSB7CisgICAgICAgICAgICAndmFyaWFibGUnOiBrZXksCisgICAgICAgICAgICAnZmlsZSc6IHNlbGYuZmlsZW5hbWUsCisgICAgICAgICAgICAnbGluZSc6IHNlbGYubGluZW5vLAorICAgICAgICB9CisgICAgICAgIGlmICJleHAiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJleHAiXSAhPSBOb25lOgorICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGtleSwgImV4cG9ydCIsIDEsIG9wID0gJ2V4cG9ydGVkJywgKipsb2dpbmZvKQorCisgICAgICAgIG9wID0gInNldCIKKyAgICAgICAgaWYgInF1ZXMiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJxdWVzIl0gIT0gTm9uZToKKyAgICAgICAgICAgIHZhbCA9IHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpCisgICAgICAgICAgICBvcCA9ICJzZXQ/IgorICAgICAgICAgICAgaWYgdmFsID09IE5vbmU6CisgICAgICAgICAgICAgICAgdmFsID0gZ3JvdXBkWyJ2YWx1ZSJdCisgICAgICAgIGVsaWYgImNvbG9uIiBpbiBncm91cGQgYW5kIGdyb3VwZFsiY29sb24iXSAhPSBOb25lOgorICAgICAgICAgICAgZSA9IGRhdGEuY3JlYXRlQ29weSgpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGUpCisgICAgICAgICAgICBvcCA9ICJpbW1lZGlhdGUiCisgICAgICAgICAgICB2YWwgPSBlLmV4cGFuZChncm91cGRbInZhbHVlIl0sIGtleSArICJbOj1dIikKKyAgICAgICAgZWxpZiAiYXBwZW5kIiBpbiBncm91cGQgYW5kIGdyb3VwZFsiYXBwZW5kIl0gIT0gTm9uZToKKyAgICAgICAgICAgIG9wID0gImFwcGVuZCIKKyAgICAgICAgICAgIHZhbCA9ICIlcyAlcyIgJSAoKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSwgZ3JvdXBkWyJ2YWx1ZSJdKQorICAgICAgICBlbGlmICJwcmVwZW5kIiBpbiBncm91cGQgYW5kIGdyb3VwZFsicHJlcGVuZCJdICE9IE5vbmU6CisgICAgICAgICAgICBvcCA9ICJwcmVwZW5kIgorICAgICAgICAgICAgdmFsID0gIiVzICVzIiAlIChncm91cGRbInZhbHVlIl0sIChzZWxmLmdldEZ1bmMoa2V5LCBkYXRhKSBvciAiIikpCisgICAgICAgIGVsaWYgInBvc3Rkb3QiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJwb3N0ZG90Il0gIT0gTm9uZToKKyAgICAgICAgICAgIG9wID0gInBvc3Rkb3QiCisgICAgICAgICAgICB2YWwgPSAiJXMlcyIgJSAoKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSwgZ3JvdXBkWyJ2YWx1ZSJdKQorICAgICAgICBlbGlmICJwcmVkb3QiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJwcmVkb3QiXSAhPSBOb25lOgorICAgICAgICAgICAgb3AgPSAicHJlZG90IgorICAgICAgICAgICAgdmFsID0gIiVzJXMiICUgKGdyb3VwZFsidmFsdWUiXSwgKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbCA9IGdyb3VwZFsidmFsdWUiXQorCisgICAgICAgIGZsYWcgPSBOb25lCisgICAgICAgIGlmICdmbGFnJyBpbiBncm91cGQgYW5kIGdyb3VwZFsnZmxhZyddICE9IE5vbmU6CisgICAgICAgICAgICBmbGFnID0gZ3JvdXBkWydmbGFnJ10KKyAgICAgICAgZWxpZiBncm91cGRbImxhenlxdWVzIl06CisgICAgICAgICAgICBmbGFnID0gIl9kZWZhdWx0dmFsIgorCisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSBvcAorICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9IGdyb3VwZFsidmFsdWUiXQorCisgICAgICAgIGlmIGZsYWc6CisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoa2V5LCBmbGFnLCB2YWwsICoqbG9naW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKGtleSwgdmFsLCBwYXJzaW5nPVRydWUsICoqbG9naW5mbykKKworY2xhc3MgTWV0aG9kTm9kZShBc3ROb2RlKToKKyAgICB0cl90YmwgPSBzdHJpbmcubWFrZXRyYW5zKCcvListQCUmJywgJ19fX19fX18nKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNfbmFtZSwgYm9keSk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5mdW5jX25hbWUgPSBmdW5jX25hbWUKKyAgICAgICAgc2VsZi5ib2R5ID0gYm9keQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIHRleHQgPSAnXG4nLmpvaW4oc2VsZi5ib2R5KQorICAgICAgICBpZiBzZWxmLmZ1bmNfbmFtZSA9PSAiX19hbm9ueW1vdXMiOgorICAgICAgICAgICAgZnVuY25hbWUgPSAoIl9fYW5vbl8lc18lcyIgJSAoc2VsZi5saW5lbm8sIHNlbGYuZmlsZW5hbWUudHJhbnNsYXRlKE1ldGhvZE5vZGUudHJfdGJsKSkpCisgICAgICAgICAgICB0ZXh0ID0gImRlZiAlcyhkKTpcbiIgJSAoZnVuY25hbWUpICsgdGV4dAorICAgICAgICAgICAgYmIubWV0aG9kcG9vbC5pbnNlcnRfbWV0aG9kKGZ1bmNuYW1lLCB0ZXh0LCBzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgYW5vbmZ1bmNzID0gZGF0YS5nZXRWYXIoJ19fQkJBTk9ORlVOQ1MnLCBGYWxzZSkgb3IgW10KKyAgICAgICAgICAgIGFub25mdW5jcy5hcHBlbmQoZnVuY25hbWUpCisgICAgICAgICAgICBkYXRhLnNldFZhcignX19CQkFOT05GVU5DUycsIGFub25mdW5jcykKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKGZ1bmNuYW1lLCB0ZXh0LCBwYXJzaW5nPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5mdW5jX25hbWUsICJmdW5jIiwgMSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKHNlbGYuZnVuY19uYW1lLCB0ZXh0LCBwYXJzaW5nPVRydWUpCisKK2NsYXNzIFB5dGhvbk1ldGhvZE5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmN0aW9uLCBtb2R1bGVuYW1lLCBib2R5KToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2VsZi5tb2R1bGVuYW1lID0gbW9kdWxlbmFtZQorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgIyBOb3RlIHdlIHdpbGwgYWRkIHJvb3QgdG8gcGFyc2VkbWV0aG9kcyBhZnRlciBoYXZpbmcgcGFyc2UKKyAgICAgICAgIyAndGhpcycgZmlsZS4gVGhpcyBtZWFucyB3ZSB3aWxsIG5vdCBwYXJzZSBtZXRob2RzIGZyb20KKyAgICAgICAgIyBiYiBjbGFzc2VzIHR3aWNlCisgICAgICAgIHRleHQgPSAnXG4nLmpvaW4oc2VsZi5ib2R5KQorICAgICAgICBiYi5tZXRob2Rwb29sLmluc2VydF9tZXRob2Qoc2VsZi5tb2R1bGVuYW1lLCB0ZXh0LCBzZWxmLmZpbGVuYW1lKQorICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5mdW5jdGlvbiwgImZ1bmMiLCAxKQorICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5mdW5jdGlvbiwgInB5dGhvbiIsIDEpCisgICAgICAgIGRhdGEuc2V0VmFyKHNlbGYuZnVuY3Rpb24sIHRleHQsIHBhcnNpbmc9VHJ1ZSkKKworY2xhc3MgTWV0aG9kRmxhZ3NOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBrZXksIG0pOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYua2V5ID0ga2V5CisgICAgICAgIHNlbGYubSA9IG0KKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhLmdldFZhcihzZWxmLmtleSwgRmFsc2UpOgorICAgICAgICAgICAgIyBjbGVhbiB1cCBvbGQgdmVyc2lvbiBvZiB0aGlzIHBpZWNlIG9mIG1ldGFkYXRhLCBhcyBpdHMKKyAgICAgICAgICAgICMgZmxhZ3MgY291bGQgY2F1c2UgcHJvYmxlbXMKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgJ3B5dGhvbicsIE5vbmUpCisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi5rZXksICdmYWtlcm9vdCcsIE5vbmUpCisgICAgICAgIGlmIHNlbGYubS5ncm91cCgicHkiKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgInB5dGhvbiIsICIxIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEuZGVsVmFyRmxhZyhzZWxmLmtleSwgInB5dGhvbiIpCisgICAgICAgIGlmIHNlbGYubS5ncm91cCgiZnIiKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgImZha2Vyb290IiwgIjEiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YS5kZWxWYXJGbGFnKHNlbGYua2V5LCAiZmFrZXJvb3QiKQorCitjbGFzcyBFeHBvcnRGdW5jc05vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZucywgY2xhc3NuYW1lKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLm4gPSBmbnMuc3BsaXQoKQorICAgICAgICBzZWxmLmNsYXNzbmFtZSA9IGNsYXNzbmFtZQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisKKyAgICAgICAgZm9yIGZ1bmMgaW4gc2VsZi5uOgorICAgICAgICAgICAgY2FsbGVkZnVuYyA9IHNlbGYuY2xhc3NuYW1lICsgIl8iICsgZnVuYworCisgICAgICAgICAgICBpZiBkYXRhLmdldFZhcihmdW5jLCBGYWxzZSkgYW5kIG5vdCBkYXRhLmdldFZhckZsYWcoZnVuYywgJ2V4cG9ydF9mdW5jJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXIoZnVuYywgRmFsc2UpOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCAncHl0aG9uJywgTm9uZSkKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoZnVuYywgJ2Z1bmMnLCBOb25lKQorCisgICAgICAgICAgICBmb3IgZmxhZyBpbiBbICJmdW5jIiwgInB5dGhvbiIgXToKKyAgICAgICAgICAgICAgICBpZiBkYXRhLmdldFZhckZsYWcoY2FsbGVkZnVuYywgZmxhZyk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCBmbGFnLCBkYXRhLmdldFZhckZsYWcoY2FsbGVkZnVuYywgZmxhZykpCisgICAgICAgICAgICBmb3IgZmxhZyBpbiBbICJkaXJzIiBdOgorICAgICAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyRmxhZyhmdW5jLCBmbGFnKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGNhbGxlZGZ1bmMsIGZsYWcsIGRhdGEuZ2V0VmFyRmxhZyhmdW5jLCBmbGFnKSkKKworICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKGNhbGxlZGZ1bmMsICJweXRob24iKToKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcihmdW5jLCAiICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnIiArIGNhbGxlZGZ1bmMgKyAiJywgZClcbiIsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgIi0iIGluIHNlbGYuY2xhc3NuYW1lOgorICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgY2xhc3NuYW1lICVzIGNvbnRhaW5zIGEgZGFzaCBjaGFyYWN0ZXIgYW5kIGlzIGNhbGxpbmcgYW4gc2ggZnVuY3Rpb24gJXMgdXNpbmcgRVhQT1JUX0ZVTkNUSU9OUy4gU2luY2UgYSBkYXNoIGlzIGlsbGVnYWwgaW4gc2ggZnVuY3Rpb24gbmFtZXMsIHRoaXMgY2Fubm90IHdvcmssIHBsZWFzZSByZW5hbWUgdGhlIGNsYXNzIG9yIGRvbid0IHVzZSBFWFBPUlRfRlVOQ1RJT05TLiIgJSAoc2VsZi5jbGFzc25hbWUsIGNhbGxlZGZ1bmMpKQorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKGZ1bmMsICIgICAgIiArIGNhbGxlZGZ1bmMgKyAiXG4iLCBwYXJzaW5nPVRydWUpCisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoZnVuYywgJ2V4cG9ydF9mdW5jJywgJzEnKQorCitjbGFzcyBBZGRUYXNrTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZnVuYywgYmVmb3JlLCBhZnRlcik6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLmJlZm9yZSA9IGJlZm9yZQorICAgICAgICBzZWxmLmFmdGVyID0gYWZ0ZXIKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYi5idWlsZC5hZGR0YXNrKHNlbGYuZnVuYywgc2VsZi5iZWZvcmUsIHNlbGYuYWZ0ZXIsIGRhdGEpCisKK2NsYXNzIERlbFRhc2tOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgYmIuYnVpbGQuZGVsdGFzayhzZWxmLmZ1bmMsIGRhdGEpCisKK2NsYXNzIEJCSGFuZGxlck5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZucyk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5ocyA9IGZucy5zcGxpdCgpCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgYmJoYW5kcyA9IGRhdGEuZ2V0VmFyKCdfX0JCSEFORExFUlMnLCBGYWxzZSkgb3IgW10KKyAgICAgICAgZm9yIGggaW4gc2VsZi5oczoKKyAgICAgICAgICAgIGJiaGFuZHMuYXBwZW5kKGgpCisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoaCwgImhhbmRsZXIiLCAxKQorICAgICAgICBkYXRhLnNldFZhcignX19CQkhBTkRMRVJTJywgYmJoYW5kcykKKworY2xhc3MgSW5oZXJpdE5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGNsYXNzZXMpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNsYXNzZXMKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChzZWxmLmNsYXNzZXMsIHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vLCBkYXRhKQorCitkZWYgaGFuZGxlSW5jbHVkZShzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtLCBmb3JjZSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoSW5jbHVkZU5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSwgZm9yY2UpKQorCitkZWYgaGFuZGxlRXhwb3J0KHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKEV4cG9ydE5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSkpCisKK2RlZiBoYW5kbGVEYXRhKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGdyb3VwZCk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoRGF0YU5vZGUoZmlsZW5hbWUsIGxpbmVubywgZ3JvdXBkKSkKKworZGVmIGhhbmRsZU1ldGhvZChzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jX25hbWUsIGJvZHkpOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKE1ldGhvZE5vZGUoZmlsZW5hbWUsIGxpbmVubywgZnVuY19uYW1lLCBib2R5KSkKKworZGVmIGhhbmRsZVB5dGhvbk1ldGhvZChzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSwgbW9kdWxlbmFtZSwgYm9keSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoUHl0aG9uTWV0aG9kTm9kZShmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSwgbW9kdWxlbmFtZSwgYm9keSkpCisKK2RlZiBoYW5kbGVNZXRob2RGbGFncyhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBrZXksIG0pOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKE1ldGhvZEZsYWdzTm9kZShmaWxlbmFtZSwgbGluZW5vLCBrZXksIG0pKQorCitkZWYgaGFuZGxlRXhwb3J0RnVuY3Moc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgbSwgY2xhc3NuYW1lKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChFeHBvcnRGdW5jc05vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSwgY2xhc3NuYW1lKSkKKworZGVmIGhhbmRsZUFkZFRhc2soc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgbSk6CisgICAgZnVuYyA9IG0uZ3JvdXAoImZ1bmMiKQorICAgIGJlZm9yZSA9IG0uZ3JvdXAoImJlZm9yZSIpCisgICAgYWZ0ZXIgPSBtLmdyb3VwKCJhZnRlciIpCisgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIHN0YXRlbWVudHMuYXBwZW5kKEFkZFRhc2tOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmMsIGJlZm9yZSwgYWZ0ZXIpKQorCitkZWYgaGFuZGxlRGVsVGFzayhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBmdW5jID0gbS5ncm91cCgiZnVuYyIpCisgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIHN0YXRlbWVudHMuYXBwZW5kKERlbFRhc2tOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmMpKQorCitkZWYgaGFuZGxlQkJIYW5kbGVycyhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChCQkhhbmRsZXJOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIG0uZ3JvdXAoMSkpKQorCitkZWYgaGFuZGxlSW5oZXJpdChzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBjbGFzc2VzID0gbS5ncm91cCgxKQorICAgIHN0YXRlbWVudHMuYXBwZW5kKEluaGVyaXROb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGNsYXNzZXMpKQorCitkZWYgZmluYWxpemUoZm4sIGQsIHZhcmlhbnQgPSBOb25lKToKKyAgICBhbGxfaGFuZGxlcnMgPSB7fQorICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoJ19fQkJIQU5ETEVSUycsIEZhbHNlKSBvciBbXToKKyAgICAgICAgIyB0cnkgdG8gYWRkIHRoZSBoYW5kbGVyCisgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyKHZhciwgZC5nZXRWYXIodmFyLCBGYWxzZSksIChkLmdldFZhckZsYWcodmFyLCAiZXZlbnRtYXNrIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlKGZuKSwgZCkKKworICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZCkKKyAgICBjb2RlID0gW10KKyAgICBmb3IgZnVuY25hbWUgaW4gZC5nZXRWYXIoIl9fQkJBTk9ORlVOQ1MiLCBGYWxzZSkgb3IgW106CisgICAgICAgIGNvZGUuYXBwZW5kKCIlcyhkKSIgJSBmdW5jbmFtZSkKKyAgICBiYi51dGlscy5iZXR0ZXJfZXhlYygiXG4iLmpvaW4oY29kZSksIHsiZCI6IGR9KQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZCkKKworICAgIHRhc2tsaXN0ID0gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXQorICAgIGJiLmJ1aWxkLmFkZF90YXNrcyh0YXNrbGlzdCwgZCkKKworICAgIGJiLnBhcnNlLnNpZ2dlbi5maW5hbGlzZShmbiwgZCwgdmFyaWFudCkKKworICAgIGQuc2V0VmFyKCdCQklOQ0xVREVEJywgYmIucGFyc2UuZ2V0X2ZpbGVfZGVwZW5kcyhkKSkKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUmVjaXBlUGFyc2VkKGZuKSwgZCkKKworZGVmIF9jcmVhdGVfdmFyaWFudHMoZGF0YXN0b3JlcywgbmFtZXMsIGZ1bmN0aW9uLCBvbmx5ZmluYWxpc2UpOgorICAgIGRlZiBjcmVhdGVfdmFyaWFudChuYW1lLCBvcmlnX2QsIGFyZyA9IE5vbmUpOgorICAgICAgICBpZiBvbmx5ZmluYWxpc2UgYW5kIG5hbWUgbm90IGluIG9ubHlmaW5hbGlzZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBuZXdfZCA9IGJiLmRhdGEuY3JlYXRlQ29weShvcmlnX2QpCisgICAgICAgIGZ1bmN0aW9uKGFyZyBvciBuYW1lLCBuZXdfZCkKKyAgICAgICAgZGF0YXN0b3Jlc1tuYW1lXSA9IG5ld19kCisKKyAgICBmb3IgdmFyaWFudCwgdmFyaWFudF9kIGluIGRhdGFzdG9yZXMuaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBpZiBub3QgdmFyaWFudDoKKyAgICAgICAgICAgICAgICAjIEJhc2VkIG9uIG1haW4gcmVjaXBlCisgICAgICAgICAgICAgICAgY3JlYXRlX3ZhcmlhbnQobmFtZSwgdmFyaWFudF9kKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjcmVhdGVfdmFyaWFudCgiJXMtJXMiICUgKHZhcmlhbnQsIG5hbWUpLCB2YXJpYW50X2QsIG5hbWUpCisKK2RlZiBfZXhwYW5kX3ZlcnNpb25zKHZlcnNpb25zKToKKyAgICBkZWYgZXhwYW5kX29uZSh2ZXJzaW9uLCBzdGFydCwgZW5kKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHN0YXJ0LCBlbmQgKyAxKToKKyAgICAgICAgICAgIHZlciA9IF9iYnZlcnNpb25zX3JlLnN1YihzdHIoaSksIHZlcnNpb24sIDEpCisgICAgICAgICAgICB5aWVsZCB2ZXIKKworICAgIHZlcnNpb25zID0gaXRlcih2ZXJzaW9ucykKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2ZXJzaW9uID0gbmV4dCh2ZXJzaW9ucykKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJhbmdlX3ZlciA9IF9iYnZlcnNpb25zX3JlLnNlYXJjaCh2ZXJzaW9uKQorICAgICAgICBpZiBub3QgcmFuZ2VfdmVyOgorICAgICAgICAgICAgeWllbGQgdmVyc2lvbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3dmVyc2lvbnMgPSBleHBhbmRfb25lKHZlcnNpb24sIGludChyYW5nZV92ZXIuZ3JvdXAoImZyb20iKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KHJhbmdlX3Zlci5ncm91cCgidG8iKSkpCisgICAgICAgICAgICB2ZXJzaW9ucyA9IGl0ZXJ0b29scy5jaGFpbihuZXd2ZXJzaW9ucywgdmVyc2lvbnMpCisKK2RlZiBtdWx0aV9maW5hbGl6ZShmbiwgZCk6CisgICAgYXBwZW5kcyA9IChkLmdldFZhcigiX19CQkFQUEVORCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIGFwcGVuZCBpbiBhcHBlbmRzOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkFwcGVuZGluZyAuYmJhcHBlbmQgZmlsZSAlcyB0byAlcyIsIGFwcGVuZCwgZm4pCisgICAgICAgIGJiLnBhcnNlLkJCSGFuZGxlci5oYW5kbGUoYXBwZW5kLCBkLCBUcnVlKQorCisgICAgb25seWZpbmFsaXNlID0gZC5nZXRWYXIoIl9fT05MWUZJTkFMSVNFIiwgRmFsc2UpCisKKyAgICBzYWZlX2QgPSBkCisgICAgZCA9IGJiLmRhdGEuY3JlYXRlQ29weShzYWZlX2QpCisgICAgdHJ5OgorICAgICAgICBmaW5hbGl6ZShmbiwgZCkKKyAgICBleGNlcHQgYmIucGFyc2UuU2tpcFJlY2lwZSBhcyBlOgorICAgICAgICBkLnNldFZhcigiX19TS0lQUEVEIiwgZS5hcmdzWzBdKQorICAgIGRhdGFzdG9yZXMgPSB7IiI6IHNhZmVfZH0KKworICAgIHZlcnNpb25zID0gKGQuZ2V0VmFyKCJCQlZFUlNJT05TIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiB2ZXJzaW9uczoKKyAgICAgICAgcHYgPSBvcmlnX3B2ID0gZC5nZXRWYXIoIlBWIiwgVHJ1ZSkKKyAgICAgICAgYmFzZXZlcnNpb25zID0ge30KKworICAgICAgICBkZWYgdmVyZnVuYyh2ZXIsIGQsIHB2X2QgPSBOb25lKToKKyAgICAgICAgICAgIGlmIHB2X2QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwdl9kID0gZAorCisgICAgICAgICAgICBvdmVycmlkZXMgPSBkLmdldFZhcigiT1ZFUlJJREVTIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgICAgICAgICAgcHZfZC5zZXRWYXIoIlBWIiwgdmVyKQorICAgICAgICAgICAgb3ZlcnJpZGVzLmFwcGVuZCh2ZXIpCisgICAgICAgICAgICBicHYgPSBiYXNldmVyc2lvbnMuZ2V0KHZlcikgb3Igb3JpZ19wdgorICAgICAgICAgICAgcHZfZC5zZXRWYXIoIkJQViIsIGJwdikKKyAgICAgICAgICAgIG92ZXJyaWRlcy5hcHBlbmQoYnB2KQorICAgICAgICAgICAgZC5zZXRWYXIoIk9WRVJSSURFUyIsICI6Ii5qb2luKG92ZXJyaWRlcykpCisKKyAgICAgICAgdmVyc2lvbnMgPSBsaXN0KF9leHBhbmRfdmVyc2lvbnModmVyc2lvbnMpKQorICAgICAgICBmb3IgcG9zLCB2ZXJzaW9uIGluIGVudW1lcmF0ZShsaXN0KHZlcnNpb25zKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHYsIGJwdiA9IHZlcnNpb24uc3BsaXQoIjoiLCAyKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXJzaW9uc1twb3NdID0gcHYKKyAgICAgICAgICAgICAgICBiYXNldmVyc2lvbnNbcHZdID0gYnB2CisKKyAgICAgICAgaWYgcHYgaW4gdmVyc2lvbnMgYW5kIG5vdCBiYXNldmVyc2lvbnMuZ2V0KHB2KToKKyAgICAgICAgICAgIHZlcnNpb25zLnJlbW92ZShwdikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2ID0gdmVyc2lvbnMucG9wKCkKKworICAgICAgICAgICAgIyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG91ciBleGlzdGluZyBtYWluIGRhdGFzdG9yZQorICAgICAgICAgICAgIyBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCB3aXRoIHRoZSBvbGQgUFYsIHdlIG5lZWQgb25lCisgICAgICAgICAgICAjIHRoYXQncyBiZWVuIGZpbmFsaXplZCB3aXRoIHRoZSBuZXcgUFYuCisgICAgICAgICAgICBkID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNhZmVfZCkKKyAgICAgICAgICAgIHZlcmZ1bmMocHYsIGQsIHNhZmVfZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZShmbiwgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlIGFzIGU6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIl9fU0tJUFBFRCIsIGUuYXJnc1swXSkKKworICAgICAgICBfY3JlYXRlX3ZhcmlhbnRzKGRhdGFzdG9yZXMsIHZlcnNpb25zLCB2ZXJmdW5jLCBvbmx5ZmluYWxpc2UpCisKKyAgICBleHRlbmRlZCA9IGQuZ2V0VmFyKCJCQkNMQVNTRVhURU5EIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBleHRlbmRlZDoKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIGlzIHRvIHN1cHBvcnQgYmJleHRlbmRzIHdpdGggYXJndW1lbnRzLCBmb3IgZS5nLiBtdWx0aWxpYgorICAgICAgICAjIGFuIGV4YW1wbGUgaXMgYXMgZm9sbG93czoKKyAgICAgICAgIyAgIEJCQ0xBU1NFWFRFTkQgPSAibXVsdGlsaWI6bGliMzIiCisgICAgICAgICMgaXQgd2lsbCBjcmVhdGUgZm9vLWxpYjMyLCBpbmhlcml0aW5nIG11bHRpbGliLmJiY2xhc3MgYW5kIHNldAorICAgICAgICAjIEJCRVhURU5EQ1VSUiB0byAibXVsdGlsaWIiIGFuZCBCQkVYVEVORFZBUklBTlQgdG8gImxpYjMyIgorICAgICAgICBleHRlbmRlZG1hcCA9IHt9CisgICAgICAgIHZhcmlhbnRtYXAgPSB7fQorCisgICAgICAgIGZvciBleHQgaW4gZXh0ZW5kZWQuc3BsaXQoKToKKyAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonLCAyKQorICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMToKKyAgICAgICAgICAgICAgICBleHRlbmRlZG1hcFtleHRdID0gZWV4dFswXQorICAgICAgICAgICAgICAgIHZhcmlhbnRtYXBbZXh0XSA9IGVleHRbMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXh0ZW5kZWRtYXBbZXh0XSA9IGV4dAorCisgICAgICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICAgICAgZGVmIGV4dGVuZGZ1bmMobmFtZSwgZCk6CisgICAgICAgICAgICBpZiBuYW1lICE9IGV4dGVuZGVkbWFwW25hbWVdOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJCQkVYVEVORENVUlIiLCBleHRlbmRlZG1hcFtuYW1lXSkKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgdmFyaWFudG1hcFtuYW1lXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIlBOIiwgIiVzLSVzIiAlIChwbiwgbmFtZSkpCisgICAgICAgICAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChleHRlbmRlZG1hcFtuYW1lXSwgZm4sIDAsIGQpCisKKyAgICAgICAgc2FmZV9kLnNldFZhcigiQkJDTEFTU0VYVEVORCIsIGV4dGVuZGVkKQorICAgICAgICBfY3JlYXRlX3ZhcmlhbnRzKGRhdGFzdG9yZXMsIGV4dGVuZGVkbWFwLmtleXMoKSwgZXh0ZW5kZnVuYywgb25seWZpbmFsaXNlKQorCisgICAgZm9yIHZhcmlhbnQsIHZhcmlhbnRfZCBpbiBkYXRhc3RvcmVzLml0ZXJpdGVtcygpOgorICAgICAgICBpZiB2YXJpYW50OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBvbmx5ZmluYWxpc2Ugb3IgdmFyaWFudCBpbiBvbmx5ZmluYWxpc2U6CisgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKGZuLCB2YXJpYW50X2QsIHZhcmlhbnQpCisgICAgICAgICAgICBleGNlcHQgYmIucGFyc2UuU2tpcFJlY2lwZSBhcyBlOgorICAgICAgICAgICAgICAgIHZhcmlhbnRfZC5zZXRWYXIoIl9fU0tJUFBFRCIsIGUuYXJnc1swXSkKKworICAgIGlmIGxlbihkYXRhc3RvcmVzKSA+IDE6CisgICAgICAgIHZhcmlhbnRzID0gZmlsdGVyKE5vbmUsIGRhdGFzdG9yZXMuaXRlcmtleXMoKSkKKyAgICAgICAgc2FmZV9kLnNldFZhcigiX19WQVJJQU5UUyIsICIgIi5qb2luKHZhcmlhbnRzKSkKKworICAgIGRhdGFzdG9yZXNbIiJdID0gZAorICAgIHJldHVybiBkYXRhc3RvcmVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDk3YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weQpAQCAtMCwwICsxLDI2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCisgICBjbGFzcyBmb3IgaGFuZGxpbmcgLmJiIGZpbGVzCisKKyAgIFJlYWRzIGEgLmJiIGZpbGUgYW5kIG9idGFpbnMgaXRzIG1ldGFkYXRhCisKKyIiIgorCisKKyMgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CitpbXBvcnQgcmUsIGJiLCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYi5idWlsZCwgYmIudXRpbHMKK2Zyb20gYmIgaW1wb3J0IGRhdGEKKworZnJvbSAuIGltcG9ydCBDb25mSGFuZGxlcgorZnJvbSAuLiBpbXBvcnQgcmVzb2x2ZV9maWxlLCBhc3QsIGxvZ2dlciwgUGFyc2VFcnJvcgorZnJvbSAuQ29uZkhhbmRsZXIgaW1wb3J0IGluY2x1ZGUsIGluaXQKKworIyBGb3IgY29tcGF0aWJpbGl0eQorYmIuZGVwcmVjYXRlX2ltcG9ydChfX25hbWVfXywgImJiLnBhcnNlIiwgWyJ2YXJzX2Zyb21fZmlsZSJdKQorCitfX2Z1bmNfc3RhcnRfcmVnZXhwX18gICAgPSByZS5jb21waWxlKCByIigoKD9QPHB5PnB5dGhvbil8KD9QPGZyPmZha2Vyb290KSlccyopKig/UDxmdW5jPltcd1wuXC1cK1x7XH1cJF0rKT9ccypcKFxzKlwpXHMqeyQiICkKK19faW5oZXJpdF9yZWdleHBfXyAgICAgICA9IHJlLmNvbXBpbGUoIHIiaW5oZXJpdFxzKyguKykiICkKK19fZXhwb3J0X2Z1bmNfcmVnZXhwX18gICA9IHJlLmNvbXBpbGUoIHIiRVhQT1JUX0ZVTkNUSU9OU1xzKyguKykiICkKK19fYWRkdGFza19yZWdleHBfXyAgICAgICA9IHJlLmNvbXBpbGUoImFkZHRhc2tccysoP1A8ZnVuYz5cdyspXHMqKChiZWZvcmVccyooP1A8YmVmb3JlPigoLiooPz1hZnRlcikpfCguKikpKSl8KGFmdGVyXHMqKD9QPGFmdGVyPigoLiooPz1iZWZvcmUpKXwoLiopKSkpKSoiKQorX19kZWx0YXNrX3JlZ2V4cF9fICAgICAgID0gcmUuY29tcGlsZSgiZGVsdGFza1xzKyg/UDxmdW5jPlx3KykiKQorX19hZGRoYW5kbGVyX3JlZ2V4cF9fICAgID0gcmUuY29tcGlsZSggciJhZGRoYW5kbGVyXHMrKC4rKSIgKQorX19kZWZfcmVnZXhwX18gICAgICAgICAgID0gcmUuY29tcGlsZSggciJkZWZccysoXHcrKS4qOiIgKQorX19weXRob25fZnVuY19yZWdleHBfXyAgID0gcmUuY29tcGlsZSggciIoXHMrLiopfCheJCkiICkKKworCitfX2luZnVuY19fID0gW10KK19faW5weXRob25fXyA9IEZhbHNlCitfX2JvZHlfXyAgID0gW10KK19fY2xhc3NuYW1lX18gPSAiIgorCitjYWNoZWRfc3RhdGVtZW50cyA9IHt9CisKKyMgV2UgbmVlZCB0byBpbmRpY2F0ZSBFT0YgdG8gdGhlIGZlZWRlci4gVGhpcyBjb2RlIGlzIHNvIG1lc3N5IHRoYXQKKyMgZmFjdG9yaW5nIGl0IG91dCB0byBhIGNsb3NlX3BhcnNlX2ZpbGUgbWV0aG9kIGlzIG91dCBvZiBxdWVzdGlvbi4KKyMgV2Ugd2lsbCB1c2UgdGhlIElOX1BZVEhPTl9FT0YgYXMgYW4gaW5kaWNhdG9yIHRvIGp1c3QgY2xvc2UgdGhlIG1ldGhvZAorIworIyBUaGUgdHdvIHBhcnRzIHVzaW5nIGl0IGFyZSB0aWdodGx5IGludGVncmF0ZWQgYW55d2F5CitJTl9QWVRIT05fRU9GID0gLTk5OTk5OTk5OTk5OTkKKworCisKK2RlZiBzdXBwb3J0cyhmbiwgZCk6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgZm4gaGFzIGEgc3VwcG9ydGVkIGV4dGVuc2lvbiIiIgorICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZuKVstMV0gaW4gWyIuYmIiLCAiLmJiY2xhc3MiLCAiLmluYyJdCisKK2RlZiBpbmhlcml0KGZpbGVzLCBmbiwgbGluZW5vLCBkKToKKyAgICBfX2luaGVyaXRfY2FjaGUgPSBkLmdldFZhcignX19pbmhlcml0X2NhY2hlJywgRmFsc2UpIG9yIFtdCisgICAgZmlsZXMgPSBkLmV4cGFuZChmaWxlcykuc3BsaXQoKQorICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlKSBhbmQgbm90IGZpbGUuZW5kc3dpdGgoIi5iYmNsYXNzIik6CisgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKCdjbGFzc2VzJywgJyVzLmJiY2xhc3MnICUgZmlsZSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlKToKKyAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKQorICAgICAgICAgICAgYWJzX2ZuLCBhdHRlbXB0cyA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgZmlsZSwgaGlzdG9yeT1UcnVlKQorICAgICAgICAgICAgZm9yIGFmIGluIGF0dGVtcHRzOgorICAgICAgICAgICAgICAgIGlmIGFmICE9IGFic19mbjoKKyAgICAgICAgICAgICAgICAgICAgYmIucGFyc2UubWFya19kZXBlbmRlbmN5KGQsIGFmKQorICAgICAgICAgICAgaWYgYWJzX2ZuOgorICAgICAgICAgICAgICAgIGZpbGUgPSBhYnNfZm4KKworICAgICAgICBpZiBub3QgZmlsZSBpbiBfX2luaGVyaXRfY2FjaGU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkluaGVyaXRpbmcgJXMgKGZyb20gJXM6JWQpIiAlIChmaWxlLCBmbiwgbGluZW5vKSkKKyAgICAgICAgICAgIF9faW5oZXJpdF9jYWNoZS5hcHBlbmQoIGZpbGUgKQorICAgICAgICAgICAgZC5zZXRWYXIoJ19faW5oZXJpdF9jYWNoZScsIF9faW5oZXJpdF9jYWNoZSkKKyAgICAgICAgICAgIGluY2x1ZGUoZm4sIGZpbGUsIGxpbmVubywgZCwgImluaGVyaXQiKQorICAgICAgICAgICAgX19pbmhlcml0X2NhY2hlID0gZC5nZXRWYXIoJ19faW5oZXJpdF9jYWNoZScsIEZhbHNlKSBvciBbXQorCitkZWYgZ2V0X3N0YXRlbWVudHMoZmlsZW5hbWUsIGFic29sdXRlX2ZpbGVuYW1lLCBiYXNlX25hbWUpOgorICAgIGdsb2JhbCBjYWNoZWRfc3RhdGVtZW50cworCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gY2FjaGVkX3N0YXRlbWVudHNbYWJzb2x1dGVfZmlsZW5hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBmaWxlID0gb3BlbihhYnNvbHV0ZV9maWxlbmFtZSwgJ3InKQorICAgICAgICBzdGF0ZW1lbnRzID0gYXN0LlN0YXRlbWVudEdyb3VwKCkKKworICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCisgICAgICAgICAgICBzID0gZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgczogYnJlYWsKKyAgICAgICAgICAgIHMgPSBzLnJzdHJpcCgpCisgICAgICAgICAgICBmZWVkZXIobGluZW5vLCBzLCBmaWxlbmFtZSwgYmFzZV9uYW1lLCBzdGF0ZW1lbnRzKQorICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgaWYgX19pbnB5dGhvbl9fOgorICAgICAgICAgICAgIyBhZGQgYSBibGFuayBsaW5lIHRvIGNsb3NlIG91dCBhbnkgcHl0aG9uIGRlZmluaXRpb24KKyAgICAgICAgICAgIGZlZWRlcihJTl9QWVRIT05fRU9GLCAiIiwgZmlsZW5hbWUsIGJhc2VfbmFtZSwgc3RhdGVtZW50cykKKworICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLmJiY2xhc3MiKSBvciBmaWxlbmFtZS5lbmRzd2l0aCgiLmluYyIpOgorICAgICAgICAgICAgY2FjaGVkX3N0YXRlbWVudHNbYWJzb2x1dGVfZmlsZW5hbWVdID0gc3RhdGVtZW50cworICAgICAgICByZXR1cm4gc3RhdGVtZW50cworCitkZWYgaGFuZGxlKGZuLCBkLCBpbmNsdWRlKToKKyAgICBnbG9iYWwgX19mdW5jX3N0YXJ0X3JlZ2V4cF9fLCBfX2luaGVyaXRfcmVnZXhwX18sIF9fZXhwb3J0X2Z1bmNfcmVnZXhwX18sIF9fYWRkdGFza19yZWdleHBfXywgX19hZGRoYW5kbGVyX3JlZ2V4cF9fLCBfX2luZnVuY19fLCBfX2JvZHlfXywgX19yZXNpZHVlX18sIF9fY2xhc3NuYW1lX18KKyAgICBfX2JvZHlfXyA9IFtdCisgICAgX19pbmZ1bmNfXyA9IFtdCisgICAgX19jbGFzc25hbWVfXyA9ICIiCisgICAgX19yZXNpZHVlX18gPSBbXQorCisgICAgYmFzZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShmbikKKyAgICAocm9vdCwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoYmFzZV9uYW1lKQorICAgIGluaXQoZCkKKworICAgIGlmIGV4dCA9PSAiLmJiY2xhc3MiOgorICAgICAgICBfX2NsYXNzbmFtZV9fID0gcm9vdAorICAgICAgICBfX2luaGVyaXRfY2FjaGUgPSBkLmdldFZhcignX19pbmhlcml0X2NhY2hlJywgRmFsc2UpIG9yIFtdCisgICAgICAgIGlmIG5vdCBmbiBpbiBfX2luaGVyaXRfY2FjaGU6CisgICAgICAgICAgICBfX2luaGVyaXRfY2FjaGUuYXBwZW5kKGZuKQorICAgICAgICAgICAgZC5zZXRWYXIoJ19faW5oZXJpdF9jYWNoZScsIF9faW5oZXJpdF9jYWNoZSkKKworICAgIGlmIGluY2x1ZGUgIT0gMDoKKyAgICAgICAgb2xkZmlsZSA9IGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpCisgICAgZWxzZToKKyAgICAgICAgb2xkZmlsZSA9IE5vbmUKKworICAgIGFic19mbiA9IHJlc29sdmVfZmlsZShmbiwgZCkKKworICAgIGlmIGluY2x1ZGU6CisgICAgICAgIGJiLnBhcnNlLm1hcmtfZGVwZW5kZW5jeShkLCBhYnNfZm4pCisKKyAgICAjIGFjdHVhbCBsb2FkaW5nCisgICAgc3RhdGVtZW50cyA9IGdldF9zdGF0ZW1lbnRzKGZuLCBhYnNfZm4sIGJhc2VfbmFtZSkKKworICAgICMgRE9ORSBXSVRIIFBBUlNJTkcuLi4gdGltZSB0byBldmFsdWF0ZQorICAgIGlmIGV4dCAhPSAiLmJiY2xhc3MiIGFuZCBhYnNfZm4gIT0gb2xkZmlsZToKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEUnLCBhYnNfZm4pCisKKyAgICB0cnk6CisgICAgICAgIHN0YXRlbWVudHMuZXZhbChkKQorICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlOgorICAgICAgICBiYi5kYXRhLnNldFZhcigiX19TS0lQUEVEIiwgVHJ1ZSwgZCkKKyAgICAgICAgaWYgaW5jbHVkZSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHsgIiIgOiBkIH0KKworICAgIGlmIF9faW5mdW5jX186CisgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIlNoZWxsIGZ1bmN0aW9uICVzIGlzIG5ldmVyIGNsb3NlZCIgJSBfX2luZnVuY19fWzBdLCBfX2luZnVuY19fWzFdLCBfX2luZnVuY19fWzJdKQorICAgIGlmIF9fcmVzaWR1ZV9fOgorICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJMZWZ0b3ZlciB1bnBhcnNlZCAoaW5jb21wbGV0ZT8pIGRhdGEgJXMgZnJvbSAlcyIgJSBfX3Jlc2lkdWVfXywgZm4pCisKKyAgICBpZiBleHQgIT0gIi5iYmNsYXNzIiBhbmQgaW5jbHVkZSA9PSAwOgorICAgICAgICByZXR1cm4gYXN0Lm11bHRpX2ZpbmFsaXplKGZuLCBkKQorCisgICAgaWYgZXh0ICE9ICIuYmJjbGFzcyIgYW5kIG9sZGZpbGUgYW5kIGFic19mbiAhPSBvbGRmaWxlOgorICAgICAgICBkLnNldFZhcigiRklMRSIsIG9sZGZpbGUpCisKKyAgICByZXR1cm4gZAorCitkZWYgZmVlZGVyKGxpbmVubywgcywgZm4sIHJvb3QsIHN0YXRlbWVudHMpOgorICAgIGdsb2JhbCBfX2Z1bmNfc3RhcnRfcmVnZXhwX18sIF9faW5oZXJpdF9yZWdleHBfXywgX19leHBvcnRfZnVuY19yZWdleHBfXywgX19hZGR0YXNrX3JlZ2V4cF9fLCBfX2FkZGhhbmRsZXJfcmVnZXhwX18sIF9fZGVmX3JlZ2V4cF9fLCBfX3B5dGhvbl9mdW5jX3JlZ2V4cF9fLCBfX2lucHl0aG9uX18sIF9faW5mdW5jX18sIF9fYm9keV9fLCBiYiwgX19yZXNpZHVlX18sIF9fY2xhc3NuYW1lX18KKyAgICBpZiBfX2luZnVuY19fOgorICAgICAgICBpZiBzID09ICd9JzoKKyAgICAgICAgICAgIF9fYm9keV9fLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGFzdC5oYW5kbGVNZXRob2Qoc3RhdGVtZW50cywgZm4sIGxpbmVubywgX19pbmZ1bmNfX1swXSwgX19ib2R5X18pCisgICAgICAgICAgICBfX2luZnVuY19fID0gW10KKyAgICAgICAgICAgIF9fYm9keV9fID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9fYm9keV9fLmFwcGVuZChzKQorICAgICAgICByZXR1cm4KKworICAgIGlmIF9faW5weXRob25fXzoKKyAgICAgICAgbSA9IF9fcHl0aG9uX2Z1bmNfcmVnZXhwX18ubWF0Y2gocykKKyAgICAgICAgaWYgbSBhbmQgbGluZW5vICE9IElOX1BZVEhPTl9FT0Y6CisgICAgICAgICAgICBfX2JvZHlfXy5hcHBlbmQocykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXN0LmhhbmRsZVB5dGhvbk1ldGhvZChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBfX2lucHl0aG9uX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsIF9fYm9keV9fKQorICAgICAgICAgICAgX19ib2R5X18gPSBbXQorICAgICAgICAgICAgX19pbnB5dGhvbl9fID0gRmFsc2UKKworICAgICAgICAgICAgaWYgbGluZW5vID09IElOX1BZVEhPTl9FT0Y6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICBpZiBzIGFuZCBzWzBdID09ICcjJzoKKyAgICAgICAgaWYgbGVuKF9fcmVzaWR1ZV9fKSAhPSAwIGFuZCBfX3Jlc2lkdWVfX1swXVswXSAhPSAiIyI6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhlcmUgaXMgYSBjb21tZW50IG9uIGxpbmUgJXMgb2YgZmlsZSAlcyAoJXMpIHdoaWNoIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBtdWx0aWxpbmUgZXhwcmVzc2lvbi5cbkJpdGJha2UgdXNlZCB0byBpZ25vcmUgdGhlc2UgYnV0IG5vIGxvbmdlciBkb2VzIHNvLCBwbGVhc2UgZml4IHlvdXIgbWV0YWRhdGEgYXMgZXJyb3JzIGFyZSBsaWtlbHkgYXMgYSByZXN1bHQgb2YgdGhpcyBjaGFuZ2UuIiAlIChsaW5lbm8sIGZuLCBzKSkKKworICAgIGlmIGxlbihfX3Jlc2lkdWVfXykgIT0gMCBhbmQgX19yZXNpZHVlX19bMF1bMF0gPT0gIiMiIGFuZCAobm90IHMgb3Igc1swXSAhPSAiIyIpOgorICAgICAgICBiYi5mYXRhbCgiVGhlcmUgaXMgYSBjb25mdXNpbmcgbXVsdGlsaW5lLCBwYXJ0aWFsbHkgY29tbWVudGVkIGV4cHJlc3Npb24gb24gbGluZSAlcyBvZiBmaWxlICVzICglcykuXG5QbGVhc2UgY2xhcmlmeSB3aGV0aGVyIHRoaXMgaXMgYWxsIGEgY29tbWVudCBvciBzaG91bGQgYmUgcGFyc2VkLiIgJSAobGluZW5vLCBmbiwgcykpCisKKyAgICBpZiBzIGFuZCBzWy0xXSA9PSAnXFwnOgorICAgICAgICBfX3Jlc2lkdWVfXy5hcHBlbmQoc1s6LTFdKQorICAgICAgICByZXR1cm4KKworICAgIHMgPSAiIi5qb2luKF9fcmVzaWR1ZV9fKSArIHMKKyAgICBfX3Jlc2lkdWVfXyA9IFtdCisKKyAgICAjIFNraXAgZW1wdHkgbGluZXMKKyAgICBpZiBzID09ICcnOgorICAgICAgICByZXR1cm4gICAKKworICAgICMgU2tpcCBjb21tZW50cworICAgIGlmIHNbMF0gPT0gJyMnOgorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2Z1bmNfc3RhcnRfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBfX2luZnVuY19fID0gW20uZ3JvdXAoImZ1bmMiKSBvciAiX19hbm9ueW1vdXMiLCBmbiwgbGluZW5vXQorICAgICAgICBhc3QuaGFuZGxlTWV0aG9kRmxhZ3Moc3RhdGVtZW50cywgZm4sIGxpbmVubywgX19pbmZ1bmNfX1swXSwgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19kZWZfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBfX2JvZHlfXy5hcHBlbmQocykKKyAgICAgICAgX19pbnB5dGhvbl9fID0gbS5ncm91cCgxKQorCisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fZXhwb3J0X2Z1bmNfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlRXhwb3J0RnVuY3Moc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSwgX19jbGFzc25hbWVfXykKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19hZGR0YXNrX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUFkZFRhc2soc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19kZWx0YXNrX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZURlbFRhc2soc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19hZGRoYW5kbGVyX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUJCSGFuZGxlcnMoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19pbmhlcml0X3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUluaGVyaXQoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSkKKyAgICAgICAgcmV0dXJuCisKKyAgICByZXR1cm4gQ29uZkhhbmRsZXIuZmVlZGVyKGxpbmVubywgcywgZm4sIHN0YXRlbWVudHMpCisKKyMgQWRkIHVzIHRvIHRoZSBoYW5kbGVycyBsaXN0Citmcm9tIC4uIGltcG9ydCBoYW5kbGVycworaGFuZGxlcnMuYXBwZW5kKHsnc3VwcG9ydHMnOiBzdXBwb3J0cywgJ2hhbmRsZSc6IGhhbmRsZSwgJ2luaXQnOiBpbml0fSkKK2RlbCBoYW5kbGVycwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkNzViMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkKQEAgLTAsMCArMSwxOTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorICAgY2xhc3MgZm9yIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSBmaWxlcworCisgICBSZWFkcyBhIC5jb25mIGZpbGUgYW5kIG9idGFpbnMgaXRzIG1ldGFkYXRhCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBvcworaW1wb3J0IGJiLnV0aWxzCitmcm9tIGJiLnBhcnNlIGltcG9ydCBQYXJzZUVycm9yLCByZXNvbHZlX2ZpbGUsIGFzdCwgbG9nZ2VyLCBoYW5kbGUKKworX19jb25maWdfcmVnZXhwX18gID0gcmUuY29tcGlsZSggciIiIgorICAgIF4KKyAgICAoP1A8ZXhwPmV4cG9ydFxzKik/CisgICAgKD9QPHZhcj5bYS16QS1aMC05XC1+XysuJHt9L10rPykKKyAgICAoXFsoP1A8ZmxhZz5bYS16QS1aMC05XC1fKy5dKylcXSk/CisKKyAgICBccyogKAorICAgICAgICAoP1A8Y29sb24+Oj0pIHwKKyAgICAgICAgKD9QPGxhenlxdWVzPlw/XD89KSB8CisgICAgICAgICg/UDxxdWVzPlw/PSkgfAorICAgICAgICAoP1A8YXBwZW5kPlwrPSkgfAorICAgICAgICAoP1A8cHJlcGVuZD49XCspIHwKKyAgICAgICAgKD9QPHByZWRvdD49XC4pIHwKKyAgICAgICAgKD9QPHBvc3Rkb3Q+XC49KSB8CisgICAgICAgID0KKyAgICApIFxzKgorCisgICAgKD8hJ1teJ10qJ1teJ10qJyQpCisgICAgKD8hXCJbXlwiXSpcIlteXCJdKlwiJCkKKyAgICAoP1A8YXBvPlsnXCJdKQorICAgICg/UDx2YWx1ZT4uKikKKyAgICAoP1A9YXBvKQorICAgICQKKyAgICAiIiIsIHJlLlgpCitfX2luY2x1ZGVfcmVnZXhwX18gPSByZS5jb21waWxlKCByImluY2x1ZGVccysoLispIiApCitfX3JlcXVpcmVfcmVnZXhwX18gPSByZS5jb21waWxlKCByInJlcXVpcmVccysoLispIiApCitfX2V4cG9ydF9yZWdleHBfXyA9IHJlLmNvbXBpbGUoIHIiZXhwb3J0XHMrKFthLXpBLVowLTlcLV8rLiR7fS9dKykkIiApCisKK2RlZiBpbml0KGRhdGEpOgorICAgIHRvcGRpciA9IGRhdGEuZ2V0VmFyKCdUT1BESVInLCBGYWxzZSkKKyAgICBpZiBub3QgdG9wZGlyOgorICAgICAgICBkYXRhLnNldFZhcignVE9QRElSJywgb3MuZ2V0Y3dkKCkpCisKKworZGVmIHN1cHBvcnRzKGZuLCBkKToKKyAgICByZXR1cm4gZm5bLTU6XSA9PSAiLmNvbmYiCisKK2RlZiBpbmNsdWRlKHBhcmVudGZuLCBmbiwgbGluZW5vLCBkYXRhLCBlcnJvcl9vdXQpOgorICAgICIiIgorICAgIGVycm9yX291dDogQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmVyYiAoZS5nLiAiaW5jbHVkZSIsICJpbmhlcml0IikgdG8gYmUKKyAgICB1c2VkIGluIGEgUGFyc2VFcnJvciB0aGF0IHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBmaWxlIHRvIGJlIGluY2x1ZGVkIGNvdWxkCisgICAgbm90IGJlIGluY2x1ZGVkLiBTcGVjaWZ5IEZhbHNlIHRvIGF2b2lkIHJhaXNpbmcgYW4gZXJyb3IgaW4gdGhpcyBjYXNlLgorICAgICIiIgorICAgIGlmIHBhcmVudGZuID09IGZuOiAjIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBmbiA9IGRhdGEuZXhwYW5kKGZuKQorICAgIHBhcmVudGZuID0gZGF0YS5leHBhbmQocGFyZW50Zm4pCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyhmbik6CisgICAgICAgIGRuYW1lID0gb3MucGF0aC5kaXJuYW1lKHBhcmVudGZuKQorICAgICAgICBiYnBhdGggPSAiJXM6JXMiICUgKGRuYW1lLCBkYXRhLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkpCisgICAgICAgIGFic19mbiwgYXR0ZW1wdHMgPSBiYi51dGlscy53aGljaChiYnBhdGgsIGZuLCBoaXN0b3J5PVRydWUpCisgICAgICAgIGlmIGFic19mbiBhbmQgYmIucGFyc2UuY2hlY2tfZGVwZW5kZW5jeShkYXRhLCBhYnNfZm4pOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkR1cGxpY2F0ZSBpbmNsdXNpb24gZm9yICVzIGluICVzIiAlIChhYnNfZm4sIGRhdGEuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpKQorICAgICAgICBmb3IgYWYgaW4gYXR0ZW1wdHM6CisgICAgICAgICAgICBiYi5wYXJzZS5tYXJrX2RlcGVuZGVuY3koZGF0YSwgYWYpCisgICAgICAgIGlmIGFic19mbjoKKyAgICAgICAgICAgIGZuID0gYWJzX2ZuCisgICAgZWxpZiBiYi5wYXJzZS5jaGVja19kZXBlbmRlbmN5KGRhdGEsIGZuKToKKyAgICAgICAgbG9nZ2VyLndhcm4oIkR1cGxpY2F0ZSBpbmNsdXNpb24gZm9yICVzIGluICVzIiAlIChmbiwgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkpCisKKyAgICB0cnk6CisgICAgICAgIGJiLnBhcnNlLmhhbmRsZShmbiwgZGF0YSwgVHJ1ZSkKKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIGlmIGVycm9yX291dDoKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJDb3VsZCBub3QgJXMgZmlsZSAlcyIgJSAoZXJyb3Jfb3V0LCBmbiksIHBhcmVudGZuLCBsaW5lbm8pCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNPTkYgZmlsZSAnJXMnIG5vdCBmb3VuZCIsIGZuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZXJyb3Jfb3V0OgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIkNvdWxkIG5vdCAlcyBmaWxlICVzOiAlcyIgJSAoZXJyb3Jfb3V0LCBmbiwgZXhjLnN0cmVycm9yKSwgcGFyZW50Zm4sIGxpbmVubykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiRXJyb3IgcGFyc2luZyAlczogJXMiICUgKGZuLCBleGMuc3RyZXJyb3IpLCBwYXJlbnRmbiwgbGluZW5vKQorCisjIFdlIGhhdmUgYW4gaXNzdWUgd2hlcmUgYSBVSSBtaWdodCB3YW50IHRvIGVuZm9yY2UgcGFydGljdWxhciBzZXR0aW5ncyBzdWNoIGFzCisjIGFuIGVtcHR5IERJU1RSTyB2YXJpYWJsZS4gSWYgY29uZmlndXJhdGlvbiBmaWxlcyBkbyBzb21ldGhpbmcgbGlrZSBhc3NpZ25pbmcKKyMgYSB3ZWFrIGRlZmF1bHQsIGl0IHR1cm5zIG91dCB0byBiZSB2ZXJ5IGRpZmZpY3VsdCB0byBmaWx0ZXIgb3V0IHRoZXNlIGNoYW5nZXMsCisjIHBhcnRpY3VsYXJseSB3aGVuIHRoZSB3ZWFrIGRlZmF1bHQgbWlnaHQgYXBwZWFyIGhhbGYgd2F5IHRob3VnaCBwYXJzaW5nIGEgY2hhaW4gCisjIG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFdlIHRoZXJlZm9yZSBsZXQgdGhlIFVJcyBob29rIGludG8gY29uZmlndXJhdGlvbiBmaWxlCisjIHBhcnNpbmcuIFRoaXMgdHVybnMgb3V0IHRvIGJlIGEgaGFyZCBwcm9ibGVtIHRvIHNvbHZlIGFueSBvdGhlciB3YXkuCitjb25mRmlsdGVycyA9IFtdCisKK2RlZiBoYW5kbGUoZm4sIGRhdGEsIGluY2x1ZGUpOgorICAgIGluaXQoZGF0YSkKKworICAgIGlmIGluY2x1ZGUgPT0gMDoKKyAgICAgICAgb2xkZmlsZSA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBvbGRmaWxlID0gZGF0YS5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkKKworICAgIGFic19mbiA9IHJlc29sdmVfZmlsZShmbiwgZGF0YSkKKyAgICBmID0gb3BlbihhYnNfZm4sICdyJykKKworICAgIGlmIGluY2x1ZGU6CisgICAgICAgIGJiLnBhcnNlLm1hcmtfZGVwZW5kZW5jeShkYXRhLCBhYnNfZm4pCisKKyAgICBzdGF0ZW1lbnRzID0gYXN0LlN0YXRlbWVudEdyb3VwKCkKKyAgICBsaW5lbm8gPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQorICAgICAgICBzID0gZi5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdyA9IHMuc3RyaXAoKQorICAgICAgICAjIHNraXAgZW1wdHkgbGluZXMKKyAgICAgICAgaWYgbm90IHc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzID0gcy5yc3RyaXAoKQorICAgICAgICB3aGlsZSBzWy0xXSA9PSAnXFwnOgorICAgICAgICAgICAgczIgPSBmLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQorICAgICAgICAgICAgaWYgKG5vdCBzMiBvciBzMiBhbmQgczJbMF0gIT0gIiMiKSBhbmQgc1swXSA9PSAiIyIgOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaGVyZSBpcyBhIGNvbmZ1c2luZyBtdWx0aWxpbmUsIHBhcnRpYWxseSBjb21tZW50ZWQgZXhwcmVzc2lvbiBvbiBsaW5lICVzIG9mIGZpbGUgJXMgKCVzKS5cblBsZWFzZSBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyBhbGwgYSBjb21tZW50IG9yIHNob3VsZCBiZSBwYXJzZWQuIiAlIChsaW5lbm8sIGZuLCBzKSkKKyAgICAgICAgICAgIHMgPSBzWzotMV0gKyBzMgorICAgICAgICAjIHNraXAgY29tbWVudHMKKyAgICAgICAgaWYgc1swXSA9PSAnIyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmZWVkZXIobGluZW5vLCBzLCBhYnNfZm4sIHN0YXRlbWVudHMpCisKKyAgICAjIERPTkUgV0lUSCBQQVJTSU5HLi4uIHRpbWUgdG8gZXZhbHVhdGUKKyAgICBkYXRhLnNldFZhcignRklMRScsIGFic19mbikKKyAgICBzdGF0ZW1lbnRzLmV2YWwoZGF0YSkKKyAgICBpZiBvbGRmaWxlOgorICAgICAgICBkYXRhLnNldFZhcignRklMRScsIG9sZGZpbGUpCisKKyAgICBmLmNsb3NlKCkKKworICAgIGZvciBmIGluIGNvbmZGaWx0ZXJzOgorICAgICAgICBmKGZuLCBkYXRhKQorCisgICAgcmV0dXJuIGRhdGEKKworZGVmIGZlZWRlcihsaW5lbm8sIHMsIGZuLCBzdGF0ZW1lbnRzKToKKyAgICBtID0gX19jb25maWdfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBncm91cGQgPSBtLmdyb3VwZGljdCgpCisgICAgICAgIGFzdC5oYW5kbGVEYXRhKHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIGdyb3VwZCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19pbmNsdWRlX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUluY2x1ZGUoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSwgRmFsc2UpCisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fcmVxdWlyZV9yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIGFzdC5oYW5kbGVJbmNsdWRlKHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIG0sIFRydWUpCisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fZXhwb3J0X3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUV4cG9ydChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIHJhaXNlIFBhcnNlRXJyb3IoInVucGFyc2VkIGxpbmU6ICclcyciICUgcywgZm4sIGxpbmVubyk7CisKKyMgQWRkIHVzIHRvIHRoZSBoYW5kbGVycyBsaXN0Citmcm9tIGJiLnBhcnNlIGltcG9ydCBoYW5kbGVycworaGFuZGxlcnMuYXBwZW5kKHsnc3VwcG9ydHMnOiBzdXBwb3J0cywgJ2hhbmRsZSc6IGhhbmRsZSwgJ2luaXQnOiBpbml0fSkKK2RlbCBoYW5kbGVycwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2NThkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvX19pbml0X18ucHkKQEAgLTAsMCArMSwzMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlIFBhcnNlcnMKKworRmlsZSBwYXJzZXJzIGZvciB0aGUgQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Citmcm9tIC4gaW1wb3J0IENvbmZIYW5kbGVyCitmcm9tIC4gaW1wb3J0IEJCSGFuZGxlcgorCitfX3ZlcnNpb25fXyA9ICcxLjAnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BlcnNpc3RfZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcGVyc2lzdF9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTViYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3BlcnNpc3RfZGF0YS5weQpAQCAtMCwwICsxLDIxNyBAQAorIiIiQml0QmFrZSBQZXJzaXN0ZW50IERhdGEgU3RvcmUKKworVXNlZCB0byBzdG9yZSBkYXRhIGluIGEgY2VudHJhbCBsb2NhdGlvbiBzdWNoIHRoYXQgb3RoZXIgdGhyZWFkcy90YXNrcyBjYW4KK2FjY2VzcyB0aGVtIGF0IHNvbWUgZnV0dXJlIGRhdGUuICBBY3RzIGFzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgc3FsaXRlLAorY3VycmVudGx5LCBwcm92aWRpbmcgYSBrZXkvdmFsdWUgc3RvcmUgYWNjZXNzZWQgYnkgJ2RvbWFpbicuCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDcgICAgICAgIFJpY2hhcmQgUHVyZGllCisjIENvcHlyaWdodCAoQykgMjAxMCAgICAgICAgQ2hyaXMgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gYmIuY29tcGF0IGltcG9ydCB0b3RhbF9vcmRlcmluZworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTWFwcGluZworCit0cnk6CisgICAgaW1wb3J0IHNxbGl0ZTMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIHB5c3FsaXRlMiBpbXBvcnQgZGJhcGkyIGFzIHNxbGl0ZTMKKworc3FsdmVyc2lvbiA9IHNxbGl0ZTMuc3FsaXRlX3ZlcnNpb25faW5mbworaWYgc3FsdmVyc2lvblswXSA8IDMgb3IgKHNxbHZlcnNpb25bMF0gPT0gMyBhbmQgc3FsdmVyc2lvblsxXSA8IDMpOgorICAgIHJhaXNlIEV4Y2VwdGlvbigic3FsaXRlMyB2ZXJzaW9uIDMuMy4wIG9yIGxhdGVyIGlzIHJlcXVpcmVkLiIpCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUGVyc2lzdERhdGEiKQoraWYgaGFzYXR0cihzcWxpdGUzLCAnZW5hYmxlX3NoYXJlZF9jYWNoZScpOgorICAgIHRyeToKKyAgICAgICAgc3FsaXRlMy5lbmFibGVfc2hhcmVkX2NhY2hlKFRydWUpCisgICAgZXhjZXB0IHNxbGl0ZTMuT3BlcmF0aW9uYWxFcnJvcjoKKyAgICAgICAgcGFzcworCisKK0B0b3RhbF9vcmRlcmluZworY2xhc3MgU1FMVGFibGUoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgorICAgICIiIk9iamVjdCByZXByZXNlbnRpbmcgYSB0YWJsZS9kb21haW4gaW4gdGhlIGRhdGFiYXNlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlZmlsZSwgdGFibGUpOgorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IGNhY2hlZmlsZQorICAgICAgICBzZWxmLnRhYmxlID0gdGFibGUKKyAgICAgICAgc2VsZi5jdXJzb3IgPSBjb25uZWN0KHNlbGYuY2FjaGVmaWxlKQorCisgICAgICAgIHNlbGYuX2V4ZWN1dGUoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICVzKGtleSBURVhULCB2YWx1ZSBURVhUKTsiCisgICAgICAgICAgICAgICAgICAgICAgJSB0YWJsZSkKKworICAgIGRlZiBfZXhlY3V0ZShzZWxmLCAqcXVlcnkpOgorICAgICAgICAiIiJFeGVjdXRlIGEgcXVlcnksIHdhaXRpbmcgdG8gYWNxdWlyZSBhIGxvY2sgaWYgbmVjZXNzYXJ5IiIiCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmN1cnNvci5leGVjdXRlKCpxdWVyeSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLk9wZXJhdGlvbmFsRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmICdkYXRhYmFzZSBpcyBsb2NrZWQnIGluIHN0cihleGMpIGFuZCBjb3VudCA8IDUwMDoKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJzb3IuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnNvciA9IGNvbm5lY3Qoc2VsZi5jYWNoZWZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuY3Vyc29yLl9fZW50ZXJfXygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y2luZm8pOgorICAgICAgICBzZWxmLmN1cnNvci5fX2V4aXRfXygqZXhjaW5mbykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUICogZnJvbSAlcyB3aGVyZSBrZXk9PzsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZSwgW2tleV0pCisgICAgICAgIGZvciByb3cgaW4gZGF0YToKKyAgICAgICAgICAgIHJldHVybiByb3dbMV0KKyAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGtleSkKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiREVMRVRFIGZyb20gJXMgd2hlcmUga2V5PT87IiAlIHNlbGYudGFibGUsIFtrZXldKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdPbmx5IHN0cmluZyBrZXlzIGFyZSBzdXBwb3J0ZWQnKQorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignT25seSBzdHJpbmcgdmFsdWVzIGFyZSBzdXBwb3J0ZWQnKQorCisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBmcm9tICVzIHdoZXJlIGtleT0/OyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLCBba2V5XSkKKyAgICAgICAgZXhpc3RzID0gbGVuKGxpc3QoZGF0YSkpCisgICAgICAgIGlmIGV4aXN0czoKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIlVQREFURSAlcyBTRVQgdmFsdWU9PyBXSEVSRSBrZXk9PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlLCBrZXldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIGludG8gJXMoa2V5LCB2YWx1ZSkgdmFsdWVzICg/LCA/KTsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZSwgW2tleSwgdmFsdWVdKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNldChzZWxmKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgQ09VTlQoa2V5KSBGUk9NICVzOyIgJSBzZWxmLnRhYmxlKQorICAgICAgICBmb3Igcm93IGluIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gcm93WzBdCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1Qga2V5IEZST00gJXM7IiAlIHNlbGYudGFibGUpCisgICAgICAgIHJldHVybiAocm93WzBdIGZvciByb3cgaW4gZGF0YSkKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpCisKKyAgICBkZWYgZ2V0X2J5X3BhdHRlcm4oc2VsZiwgcGF0dGVybik6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBGUk9NICVzIFdIRVJFIGtleSBMSUtFID87IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGUsIFtwYXR0ZXJuXSkKKyAgICAgICAgcmV0dXJuIFtyb3dbMV0gZm9yIHJvdyBpbiBkYXRhXQorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVydmFsdWVzKCkpCisKKyAgICBkZWYgaXRlcnZhbHVlcyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzOyIgJSBzZWxmLnRhYmxlKQorICAgICAgICByZXR1cm4gKHJvd1swXSBmb3Igcm93IGluIGRhdGEpCisKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcml0ZW1zKCkpCisKKyAgICBkZWYgaXRlcml0ZW1zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUICogRlJPTSAlczsiICUgc2VsZi50YWJsZSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiREVMRVRFIEZST00gJXM7IiAlIHNlbGYudGFibGUpCisKKyAgICBkZWYgaGFzX2tleShzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYKKworCitjbGFzcyBQZXJzaXN0RGF0YShvYmplY3QpOgorICAgICIiIkRlcHJlY2F0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJpdGJha2UgcGVyc2lzdGVudCBkYXRhIHN0b3JlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJVc2Ugb2YgUGVyc2lzdERhdGEgaXMgZGVwcmVjYXRlZC4gIFBsZWFzZSB1c2UgIgorICAgICAgICAgICAgICAgICAgICAgICJwZXJzaXN0KGRvbWFpbiwgZCkgaW5zdGVhZC4iLAorICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICBzdGFja2xldmVsPTIpCisKKyAgICAgICAgc2VsZi5kYXRhID0gcGVyc2lzdChkKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVzaW5nICclcycgYXMgdGhlIHBlcnNpc3RlbnQgZGF0YSBjYWNoZSIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEuZmlsZW5hbWUpCisKKyAgICBkZWYgYWRkRG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSBkb21haW4gKHBlbmRpbmcgZGVwcmVjYXRpb24pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2RvbWFpbl0KKworICAgIGRlZiBkZWxEb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZXMgYSBkb21haW4gYW5kIGFsbCB0aGUgZGF0YSBpdCBjb250YWlucworICAgICAgICAiIiIKKyAgICAgICAgZGVsIHNlbGYuZGF0YVtkb21haW5dCisKKyAgICBkZWYgZ2V0S2V5VmFsdWVzKHNlbGYsIGRvbWFpbik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGtleSArIHZhbHVlIHBhaXJzIGZvciBhIGRvbWFpbgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtkb21haW5dLml0ZW1zKCkKKworICAgIGRlZiBnZXRWYWx1ZShzZWxmLCBkb21haW4sIGtleSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHZhbHVlIG9mIGEga2V5IGZvciBhIGRvbWFpbgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtkb21haW5dW2tleV0KKworICAgIGRlZiBzZXRWYWx1ZShzZWxmLCBkb21haW4sIGtleSwgdmFsdWUpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgYSBrZXkgZm9yIGEgZG9tYWluCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmRhdGFbZG9tYWluXVtrZXldID0gdmFsdWUKKworICAgIGRlZiBkZWxWYWx1ZShzZWxmLCBkb21haW4sIGtleSk6CisgICAgICAgICIiIgorICAgICAgICBEZWxldGVzIGEga2V5L3ZhbHVlIHBhaXIKKyAgICAgICAgIiIiCisgICAgICAgIGRlbCBzZWxmLmRhdGFbZG9tYWluXVtrZXldCisKK2RlZiBjb25uZWN0KGRhdGFiYXNlKToKKyAgICBjb25uZWN0aW9uID0gc3FsaXRlMy5jb25uZWN0KGRhdGFiYXNlLCB0aW1lb3V0PTUsIGlzb2xhdGlvbl9sZXZlbD1Ob25lKQorICAgIGNvbm5lY3Rpb24uZXhlY3V0ZSgicHJhZ21hIHN5bmNocm9ub3VzID0gb2ZmOyIpCisgICAgcmV0dXJuIGNvbm5lY3Rpb24KKworZGVmIHBlcnNpc3QoZG9tYWluLCBkKToKKyAgICAiIiJDb252ZW5pZW5jZSBmYWN0b3J5IGZvciBTUUxUYWJsZSBvYmplY3RzIGJhc2VkIHVwb24gbWV0YWRhdGEiIiIKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICBjYWNoZWRpciA9IChkLmdldFZhcigiUEVSU0lTVEVOVF9ESVIiLCBUcnVlKSBvcgorICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJDQUNIRSIsIFRydWUpKQorICAgIGlmIG5vdCBjYWNoZWRpcjoKKyAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJQbGVhc2Ugc2V0IHRoZSAnUEVSU0lTVEVOVF9ESVInIG9yICdDQUNIRScgdmFyaWFibGUiKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGNhY2hlZGlyKQorICAgIGNhY2hlZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgImJiX3BlcnNpc3RfZGF0YS5zcWxpdGUzIikKKyAgICByZXR1cm4gU1FMVGFibGUoY2FjaGVmaWxlLCBkb21haW4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb2Nlc3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwN2YyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHJvY2Vzcy5weQpAQCAtMCwwICsxLDE1NiBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzZWxlY3QKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUHJvY2VzcycpCisKK2RlZiBzdWJwcm9jZXNzX3NldHVwKCk6CisgICAgIyBQeXRob24gaW5zdGFsbHMgYSBTSUdQSVBFIGhhbmRsZXIgYnkgZGVmYXVsdC4gVGhpcyBpcyB1c3VhbGx5IG5vdCB3aGF0CisgICAgIyBub24tUHl0aG9uIHN1YnByb2Nlc3NlcyBleHBlY3QuCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHUElQRSwgc2lnbmFsLlNJR19ERkwpCisKK2NsYXNzIENtZEVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIG1zZz1Ob25lKToKKyAgICAgICAgc2VsZi5jb21tYW5kID0gY29tbWFuZAorICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuY29tbWFuZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBjbWQgPSBzdWJwcm9jZXNzLmxpc3QyY21kbGluZShzZWxmLmNvbW1hbmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSBzZWxmLmNvbW1hbmQKKworICAgICAgICBtc2cgPSAiRXhlY3V0aW9uIG9mICclcycgZmFpbGVkIiAlIGNtZAorICAgICAgICBpZiBzZWxmLm1zZzoKKyAgICAgICAgICAgIG1zZyArPSAnOiAlcycgJSBzZWxmLm1zZworICAgICAgICByZXR1cm4gbXNnCisKK2NsYXNzIE5vdEZvdW5kRXJyb3IoQ21kRXJyb3IpOgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gQ21kRXJyb3IuX19zdHJfXyhzZWxmKSArICI6IGNvbW1hbmQgbm90IGZvdW5kIgorCitjbGFzcyBFeGVjdXRpb25FcnJvcihDbWRFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIGV4aXRjb2RlLCBzdGRvdXQgPSBOb25lLCBzdGRlcnIgPSBOb25lKToKKyAgICAgICAgQ21kRXJyb3IuX19pbml0X18oc2VsZiwgY29tbWFuZCkKKyAgICAgICAgc2VsZi5leGl0Y29kZSA9IGV4aXRjb2RlCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgbWVzc2FnZSA9ICIiCisgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgbWVzc2FnZSArPSBzZWxmLnN0ZGVycgorICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgIG1lc3NhZ2UgKz0gc2VsZi5zdGRvdXQKKyAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiOlxuIiArIG1lc3NhZ2UKKyAgICAgICAgcmV0dXJuIChDbWRFcnJvci5fX3N0cl9fKHNlbGYpICsKKyAgICAgICAgICAgICAgICAiIHdpdGggZXhpdCBjb2RlICVzIiAlIHNlbGYuZXhpdGNvZGUgKyBtZXNzYWdlKQorCitjbGFzcyBQb3BlbihzdWJwcm9jZXNzLlBvcGVuKToKKyAgICBkZWZhdWx0cyA9IHsKKyAgICAgICAgImNsb3NlX2ZkcyI6IFRydWUsCisgICAgICAgICJwcmVleGVjX2ZuIjogc3VicHJvY2Vzc19zZXR1cCwKKyAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgInN0ZGVyciI6IHN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAic3RkaW4iOiBzdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICJzaGVsbCI6IEZhbHNlLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBvcHRpb25zID0gZGljdChzZWxmLmRlZmF1bHRzKQorICAgICAgICBvcHRpb25zLnVwZGF0ZShrd2FyZ3MpCisgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4uX19pbml0X18oc2VsZiwgKmFyZ3MsICoqb3B0aW9ucykKKworZGVmIF9sb2dnZWRfY29tbXVuaWNhdGUocGlwZSwgbG9nLCBpbnB1dCwgZXh0cmFmaWxlcyk6CisgICAgaWYgcGlwZS5zdGRpbjoKKyAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwaXBlLnN0ZGluLndyaXRlKGlucHV0KQorICAgICAgICBwaXBlLnN0ZGluLmNsb3NlKCkKKworICAgIG91dGRhdGEsIGVycmRhdGEgPSBbXSwgW10KKyAgICByaW4gPSBbXQorCisgICAgaWYgcGlwZS5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQocGlwZS5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIHJpbi5hcHBlbmQocGlwZS5zdGRvdXQpCisgICAgaWYgcGlwZS5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQocGlwZS5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgIHJpbi5hcHBlbmQocGlwZS5zdGRlcnIpCisgICAgZm9yIGZvYmosIF8gaW4gZXh0cmFmaWxlczoKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChmb2JqLmZpbGVubygpKQorICAgICAgICByaW4uYXBwZW5kKGZvYmopCisKKyAgICBkZWYgcmVhZGV4dHJhcyhzZWxlY3RlZCk6CisgICAgICAgIGZvciBmb2JqLCBmdW5jIGluIGV4dHJhZmlsZXM6CisgICAgICAgICAgICBpZiBmb2JqIGluIHNlbGVjdGVkOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gZXJybm8uRUFHQUlOIG9yIGVyci5lcnJubyA9PSBlcnJuby5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZnVuYyhkYXRhKQorCisgICAgdHJ5OgorICAgICAgICB3aGlsZSBwaXBlLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgcmxpc3QgPSByaW4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByLHcsZSA9IHNlbGVjdC5zZWxlY3QgKHJsaXN0LCBbXSwgW10sIDEpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGlmIHBpcGUuc3Rkb3V0IGluIHI6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBpcGUuc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGEuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGxvZy53cml0ZShkYXRhKQorCisgICAgICAgICAgICBpZiBwaXBlLnN0ZGVyciBpbiByOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwaXBlLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBlcnJkYXRhLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgICAgICAgICBsb2cud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgcmVhZGV4dHJhcyhyKQorCisgICAgZmluYWxseTogICAgCisgICAgICAgIGxvZy5mbHVzaCgpCisKKyAgICByZWFkZXh0cmFzKFtmb2JqIGZvciBmb2JqLCBfIGluIGV4dHJhZmlsZXNdKQorCisgICAgaWYgcGlwZS5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIHBpcGUuc3Rkb3V0LmNsb3NlKCkKKyAgICBpZiBwaXBlLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgcGlwZS5zdGRlcnIuY2xvc2UoKQorICAgIHJldHVybiAnJy5qb2luKG91dGRhdGEpLCAnJy5qb2luKGVycmRhdGEpCisKK2RlZiBydW4oY21kLCBpbnB1dD1Ob25lLCBsb2c9Tm9uZSwgZXh0cmFmaWxlcz1Ob25lLCAqKm9wdGlvbnMpOgorICAgICIiIkNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHJ1biBhIGNvbW1hbmQgYW5kIHJldHVybiBpdHMgb3V0cHV0LCByYWlzaW5nIGFuCisgICAgZXhjZXB0aW9uIHdoZW4gdGhlIGNvbW1hbmQgZmFpbHMiIiIKKworICAgIGlmIG5vdCBleHRyYWZpbGVzOgorICAgICAgICBleHRyYWZpbGVzID0gW10KKworICAgIGlmIGlzaW5zdGFuY2UoY21kLCBiYXNlc3RyaW5nKSBhbmQgbm90ICJzaGVsbCIgaW4gb3B0aW9uczoKKyAgICAgICAgb3B0aW9uc1sic2hlbGwiXSA9IFRydWUKKworICAgIHRyeToKKyAgICAgICAgcGlwZSA9IFBvcGVuKGNtZCwgKipvcHRpb25zKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vID09IDI6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKGNtZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIENtZEVycm9yKGNtZCwgZXhjKQorCisgICAgaWYgbG9nOgorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IF9sb2dnZWRfY29tbXVuaWNhdGUocGlwZSwgbG9nLCBpbnB1dCwgZXh0cmFmaWxlcykKKyAgICBlbHNlOgorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBpcGUuY29tbXVuaWNhdGUoaW5wdXQpCisKKyAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmFpc2UgRXhlY3V0aW9uRXJyb3IoY21kLCBwaXBlLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQorICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Byb3ZpZGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdlMWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkKQEAgLTAsMCArMSwzODEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGJiIGltcG9ydCBkYXRhLCB1dGlscworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCBiYgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5Qcm92aWRlciIpCisKK2NsYXNzIE5vUHJvdmlkZXIoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gbm8gcHJvdmlkZXIgb2YgYSBidWlsZCBkZXBlbmRlbmN5IGNhbiBiZSBmb3VuZCIiIgorCitjbGFzcyBOb1JQcm92aWRlcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBubyBwcm92aWRlciBvZiBhIHJ1bnRpbWUgZGVwZW5kZW5jeSBjYW4gYmUgZm91bmQiIiIKKworY2xhc3MgTXVsdGlwbGVSUHJvdmlkZXIoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gbXVsdGlwbGUgcHJvdmlkZXJzIG9mIGEgcnVudGltZSBkZXBlbmRlbmN5IGNhbiBiZSBmb3VuZCIiIgorCitkZWYgZmluZFByb3ZpZGVycyhjZmdEYXRhLCBkYXRhQ2FjaGUsIHBrZ19wbiA9IE5vbmUpOgorICAgICIiIgorICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCBsYXRlc3QgYW5kIHByZWZlcnJlZCBwcm92aWRlcnMgaW4gcGtnX3BuCisgICAgIiIiCisKKyAgICBpZiBub3QgcGtnX3BuOgorICAgICAgICBwa2dfcG4gPSBkYXRhQ2FjaGUucGtnX3BuCisKKyAgICAjIE5lZWQgdG8gZW5zdXJlIGRhdGEgc3RvcmUgaXMgZXhwYW5kZWQKKyAgICBsb2NhbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoY2ZnRGF0YSkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICBiYi5kYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorCisgICAgcHJlZmVycmVkX3ZlcnNpb25zID0ge30KKyAgICBsYXRlc3RfdmVyc2lvbnMgPSB7fQorCisgICAgZm9yIHBuIGluIHBrZ19wbjoKKyAgICAgICAgKGxhc3RfdmVyLCBsYXN0X2ZpbGUsIHByZWZfdmVyLCBwcmVmX2ZpbGUpID0gZmluZEJlc3RQcm92aWRlcihwbiwgbG9jYWxkYXRhLCBkYXRhQ2FjaGUsIHBrZ19wbikKKyAgICAgICAgcHJlZmVycmVkX3ZlcnNpb25zW3BuXSA9IChwcmVmX3ZlciwgcHJlZl9maWxlKQorICAgICAgICBsYXRlc3RfdmVyc2lvbnNbcG5dID0gKGxhc3RfdmVyLCBsYXN0X2ZpbGUpCisKKyAgICByZXR1cm4gKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKQorCisKK2RlZiBhbGxQcm92aWRlcnMoZGF0YUNhY2hlKToKKyAgICAiIiIKKyAgICBGaW5kIGFsbCBwcm92aWRlcnMgZm9yIGVhY2ggcG4KKyAgICAiIiIKKyAgICBhbGxfcHJvdmlkZXJzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICBmb3IgKGZuLCBwbikgaW4gZGF0YUNhY2hlLnBrZ19mbi5pdGVtcygpOgorICAgICAgICB2ZXIgPSBkYXRhQ2FjaGUucGtnX3BlcHZwcltmbl0KKyAgICAgICAgYWxsX3Byb3ZpZGVyc1twbl0uYXBwZW5kKCh2ZXIsIGZuKSkKKyAgICByZXR1cm4gYWxsX3Byb3ZpZGVycworCisKK2RlZiBzb3J0UHJpb3JpdGllcyhwbiwgZGF0YUNhY2hlLCBwa2dfcG4gPSBOb25lKToKKyAgICAiIiIKKyAgICBSZW9yZGVyIHBrZ19wbiBieSBmaWxlIHByaW9yaXR5IGFuZCBkZWZhdWx0IHByZWZlcmVuY2UKKyAgICAiIiIKKworICAgIGlmIG5vdCBwa2dfcG46CisgICAgICAgIHBrZ19wbiA9IGRhdGFDYWNoZS5wa2dfcG4KKworICAgIGZpbGVzID0gcGtnX3BuW3BuXQorICAgIHByaW9yaXRpZXMgPSB7fQorICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICBwcmlvcml0eSA9IGRhdGFDYWNoZS5iYmZpbGVfcHJpb3JpdHlbZl0KKyAgICAgICAgcHJlZmVyZW5jZSA9IGRhdGFDYWNoZS5wa2dfZHBbZl0KKyAgICAgICAgaWYgcHJpb3JpdHkgbm90IGluIHByaW9yaXRpZXM6CisgICAgICAgICAgICBwcmlvcml0aWVzW3ByaW9yaXR5XSA9IHt9CisgICAgICAgIGlmIHByZWZlcmVuY2Ugbm90IGluIHByaW9yaXRpZXNbcHJpb3JpdHldOgorICAgICAgICAgICAgcHJpb3JpdGllc1twcmlvcml0eV1bcHJlZmVyZW5jZV0gPSBbXQorICAgICAgICBwcmlvcml0aWVzW3ByaW9yaXR5XVtwcmVmZXJlbmNlXS5hcHBlbmQoZikKKyAgICB0bXBfcG4gPSBbXQorICAgIGZvciBwcmkgaW4gc29ydGVkKHByaW9yaXRpZXMpOgorICAgICAgICB0bXBfcHJlZiA9IFtdCisgICAgICAgIGZvciBwcmVmIGluIHNvcnRlZChwcmlvcml0aWVzW3ByaV0pOgorICAgICAgICAgICAgdG1wX3ByZWYuZXh0ZW5kKHByaW9yaXRpZXNbcHJpXVtwcmVmXSkKKyAgICAgICAgdG1wX3BuID0gW3RtcF9wcmVmXSArIHRtcF9wbgorCisgICAgcmV0dXJuIHRtcF9wbgorCitkZWYgcHJlZmVycmVkVmVyc2lvbk1hdGNoKHBlLCBwdiwgcHIsIHByZWZlcnJlZF9lLCBwcmVmZXJyZWRfdiwgcHJlZmVycmVkX3IpOgorICAgICIiIgorICAgIENoZWNrIGlmIHRoZSB2ZXJzaW9uIHBlLHB2LHByIGlzIHRoZSBwcmVmZXJyZWQgb25lLgorICAgIElmIHRoZXJlIGlzIHByZWZlcnJlZCB2ZXJzaW9uIGRlZmluZWQgYW5kIGVuZHMgd2l0aCAnJScsIHRoZW4gcHYgaGFzIHRvIHN0YXJ0IHdpdGggdGhhdCB2ZXJzaW9uIGFmdGVyIHJlbW92aW5nIHRoZSAnJScKKyAgICAiIiIKKyAgICBpZiAocHIgPT0gcHJlZmVycmVkX3Igb3IgcHJlZmVycmVkX3IgPT0gTm9uZSk6CisgICAgICAgIGlmIChwZSA9PSBwcmVmZXJyZWRfZSBvciBwcmVmZXJyZWRfZSA9PSBOb25lKToKKyAgICAgICAgICAgIGlmIHByZWZlcnJlZF92ID09IHB2OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBwcmVmZXJyZWRfdiAhPSBOb25lIGFuZCBwcmVmZXJyZWRfdi5lbmRzd2l0aCgnJScpIGFuZCBwdi5zdGFydHN3aXRoKHByZWZlcnJlZF92WzpsZW4ocHJlZmVycmVkX3YpLTFdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZmluZFByZWZlcnJlZFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHBrZ19wbiA9IE5vbmUsIGl0ZW0gPSBOb25lKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBmaXJzdCBwcm92aWRlciBpbiBwa2dfcG4gd2l0aCBhIFBSRUZFUlJFRF9WRVJTSU9OIHNldC4KKyAgICAiIiIKKworICAgIHByZWZlcnJlZF9maWxlID0gTm9uZQorICAgIHByZWZlcnJlZF92ZXIgPSBOb25lCisKKyAgICBsb2NhbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoY2ZnRGF0YSkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAiJXM6cG4tJXM6JXMiICUgKGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBsb2NhbGRhdGEpLCBwbiwgcG4pKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgcHJlZmVycmVkX3YgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQUkVGRVJSRURfVkVSU0lPTicsIFRydWUpCisgICAgaWYgcHJlZmVycmVkX3Y6CisgICAgICAgIG0gPSByZS5tYXRjaCgnKFxkKzopKiguKikoXy4qKSonLCBwcmVmZXJyZWRfdikKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGlmIG0uZ3JvdXAoMSk6CisgICAgICAgICAgICAgICAgcHJlZmVycmVkX2UgPSBtLmdyb3VwKDEpWzotMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJlZmVycmVkX2UgPSBOb25lCisgICAgICAgICAgICBwcmVmZXJyZWRfdiA9IG0uZ3JvdXAoMikKKyAgICAgICAgICAgIGlmIG0uZ3JvdXAoMyk6CisgICAgICAgICAgICAgICAgcHJlZmVycmVkX3IgPSBtLmdyb3VwKDMpWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZlcnJlZF9lID0gTm9uZQorICAgICAgICAgICAgcHJlZmVycmVkX3IgPSBOb25lCisKKyAgICAgICAgZm9yIGZpbGVfc2V0IGluIHBrZ19wbjoKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVfc2V0OgorICAgICAgICAgICAgICAgIHBlLCBwdiwgcHIgPSBkYXRhQ2FjaGUucGtnX3BlcHZwcltmXQorICAgICAgICAgICAgICAgIGlmIHByZWZlcnJlZFZlcnNpb25NYXRjaChwZSwgcHYsIHByLCBwcmVmZXJyZWRfZSwgcHJlZmVycmVkX3YsIHByZWZlcnJlZF9yKToKKyAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkX2ZpbGUgPSBmCisgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZF92ZXIgPSAocGUsIHB2LCBwcikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHByZWZlcnJlZF9maWxlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiBwcmVmZXJyZWRfcjoKKyAgICAgICAgICAgIHB2X3N0ciA9ICclcy0lcycgJSAocHJlZmVycmVkX3YsIHByZWZlcnJlZF9yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHZfc3RyID0gcHJlZmVycmVkX3YKKyAgICAgICAgaWYgbm90IChwcmVmZXJyZWRfZSBpcyBOb25lKToKKyAgICAgICAgICAgIHB2X3N0ciA9ICclczolcycgJSAocHJlZmVycmVkX2UsIHB2X3N0cikKKyAgICAgICAgaXRlbXN0ciA9ICIiCisgICAgICAgIGlmIGl0ZW06CisgICAgICAgICAgICBpdGVtc3RyID0gIiAoZm9yIGl0ZW0gJXMpIiAlIGl0ZW0KKyAgICAgICAgaWYgcHJlZmVycmVkX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJwcmVmZXJyZWQgdmVyc2lvbiAlcyBvZiAlcyBub3QgYXZhaWxhYmxlJXMiLCBwdl9zdHIsIHBuLCBpdGVtc3RyKQorICAgICAgICAgICAgYXZhaWxhYmxlX3ZlcnMgPSBbXQorICAgICAgICAgICAgZm9yIGZpbGVfc2V0IGluIHBrZ19wbjoKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlX3NldDoKKyAgICAgICAgICAgICAgICAgICAgcGUsIHB2LCBwciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZdCisgICAgICAgICAgICAgICAgICAgIHZlcl9zdHIgPSBwdgorICAgICAgICAgICAgICAgICAgICBpZiBwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcl9zdHIgPSAiJXM6JXMiICUgKHBlLCB2ZXJfc3RyKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdmVyX3N0ciBpbiBhdmFpbGFibGVfdmVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV92ZXJzLmFwcGVuZCh2ZXJfc3RyKQorICAgICAgICAgICAgaWYgYXZhaWxhYmxlX3ZlcnM6CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3ZlcnMuc29ydCgpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oInZlcnNpb25zIG9mICVzIGF2YWlsYWJsZTogJXMiLCBwbiwgJyAnLmpvaW4oYXZhaWxhYmxlX3ZlcnMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJzZWxlY3RpbmcgJXMgYXMgUFJFRkVSUkVEX1ZFUlNJT04gJXMgb2YgcGFja2FnZSAlcyVzIiwgcHJlZmVycmVkX2ZpbGUsIHB2X3N0ciwgcG4sIGl0ZW1zdHIpCisKKyAgICByZXR1cm4gKHByZWZlcnJlZF92ZXIsIHByZWZlcnJlZF9maWxlKQorCisKK2RlZiBmaW5kTGF0ZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgZmlsZV9zZXQpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIHRoZSBwcm92aWRlcnMgaW4gZmlsZV9zZXQuCisgICAgVGFrZSBkZWZhdWx0IHByZWZlcmVuY2VzIGludG8gYWNjb3VudC4KKyAgICAiIiIKKyAgICBsYXRlc3QgPSBOb25lCisgICAgbGF0ZXN0X3AgPSAwCisgICAgbGF0ZXN0X2YgPSBOb25lCisgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX3NldDoKKyAgICAgICAgcGUsIHB2LCBwciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZpbGVfbmFtZV0KKyAgICAgICAgZHAgPSBkYXRhQ2FjaGUucGtnX2RwW2ZpbGVfbmFtZV0KKworICAgICAgICBpZiAobGF0ZXN0IGlzIE5vbmUpIG9yICgobGF0ZXN0X3AgPT0gZHApIGFuZCAodXRpbHMudmVyY21wKGxhdGVzdCwgKHBlLCBwdiwgcHIpKSA8IDApKSBvciAoZHAgPiBsYXRlc3RfcCk6CisgICAgICAgICAgICBsYXRlc3QgPSAocGUsIHB2LCBwcikKKyAgICAgICAgICAgIGxhdGVzdF9mID0gZmlsZV9uYW1lCisgICAgICAgICAgICBsYXRlc3RfcCA9IGRwCisKKyAgICByZXR1cm4gKGxhdGVzdCwgbGF0ZXN0X2YpCisKKworZGVmIGZpbmRCZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgcGtnX3BuID0gTm9uZSwgaXRlbSA9IE5vbmUpOgorICAgICIiIgorICAgIElmIHRoZXJlIGlzIGEgUFJFRkVSUkVEX1ZFUlNJT04sIGZpbmQgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgYmJmaWxlCisgICAgcHJvdmlkaW5nIHRoYXQgdmVyc2lvbi4gIElmIG5vdCwgZmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gcHJvdmlkZWQgYnkKKyAgICBhbiBiYmZpbGUgaW4gdGhlIGhpZ2hlc3QtcHJpb3JpdHkgc2V0LgorICAgICIiIgorCisgICAgc29ydHBrZ19wbiA9IHNvcnRQcmlvcml0aWVzKHBuLCBkYXRhQ2FjaGUsIHBrZ19wbikKKyAgICAjIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvdmlkZXIgd2l0aCBhIFBSRUZFUlJFRF9WRVJTSU9OIHNldAorICAgIChwcmVmZXJyZWRfdmVyLCBwcmVmZXJyZWRfZmlsZSkgPSBmaW5kUHJlZmVycmVkUHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgc29ydHBrZ19wbiwgaXRlbSkKKyAgICAjIEZpbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5IHByb3ZpZGVyCisgICAgKGxhdGVzdCwgbGF0ZXN0X2YpID0gZmluZExhdGVzdFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHNvcnRwa2dfcG5bMF0pCisKKyAgICBpZiBwcmVmZXJyZWRfZmlsZSBpcyBOb25lOgorICAgICAgICBwcmVmZXJyZWRfZmlsZSA9IGxhdGVzdF9mCisgICAgICAgIHByZWZlcnJlZF92ZXIgPSBsYXRlc3QKKworICAgIHJldHVybiAobGF0ZXN0LCBsYXRlc3RfZiwgcHJlZmVycmVkX3ZlciwgcHJlZmVycmVkX2ZpbGUpCisKKworZGVmIF9maWx0ZXJQcm92aWRlcnMocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIFRha2UgYSBsaXN0IG9mIHByb3ZpZGVycyBhbmQgZmlsdGVyL3Jlb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgcHJldmlvdXMgYnVpbGQgcmVzdWx0cworICAgICIiIgorICAgIGVsaWdpYmxlID0gW10KKyAgICBwcmVmZXJyZWRfdmVyc2lvbnMgPSB7fQorICAgIHNvcnRwa2dfcG4gPSB7fQorCisgICAgIyBUaGUgb3JkZXIgb2YgcHJvdmlkZXJzIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHRoZSBmaWxlcyBvbiB0aGUgZGlzaworICAgICMgdXAgdG8gaGVyZS4gU29ydCBwa2dfcG4gdG8gbWFrZSBkZXBlbmRlbmN5IGlzc3VlcyByZXByb2R1Y2libGUgcmF0aGVyCisgICAgIyB0aGFuIGVmZmVjdGl2ZWx5IHJhbmRvbS4KKyAgICBwcm92aWRlcnMuc29ydCgpCisKKyAgICAjIENvbGxhdGUgcHJvdmlkZXJzIGJ5IFBOCisgICAgcGtnX3BuID0ge30KKyAgICBmb3IgcCBpbiBwcm92aWRlcnM6CisgICAgICAgIHBuID0gZGF0YUNhY2hlLnBrZ19mbltwXQorICAgICAgICBpZiBwbiBub3QgaW4gcGtnX3BuOgorICAgICAgICAgICAgcGtnX3BuW3BuXSA9IFtdCisgICAgICAgIHBrZ19wbltwbl0uYXBwZW5kKHApCisKKyAgICBsb2dnZXIuZGVidWcoMSwgInByb3ZpZGVycyBmb3IgJXMgYXJlOiAlcyIsIGl0ZW0sIHBrZ19wbi5rZXlzKCkpCisKKyAgICAjIEZpcnN0IGFkZCBQUkVGRVJSRURfVkVSU0lPTlMKKyAgICBmb3IgcG4gaW4gcGtnX3BuOgorICAgICAgICBzb3J0cGtnX3BuW3BuXSA9IHNvcnRQcmlvcml0aWVzKHBuLCBkYXRhQ2FjaGUsIHBrZ19wbikKKyAgICAgICAgcHJlZmVycmVkX3ZlcnNpb25zW3BuXSA9IGZpbmRQcmVmZXJyZWRQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBzb3J0cGtnX3BuW3BuXSwgaXRlbSkKKyAgICAgICAgaWYgcHJlZmVycmVkX3ZlcnNpb25zW3BuXVsxXToKKyAgICAgICAgICAgIGVsaWdpYmxlLmFwcGVuZChwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdKQorCisgICAgIyBOb3cgYWRkIGxhdGVzdCB2ZXJzaW9ucworICAgIGZvciBwbiBpbiBzb3J0cGtnX3BuOgorICAgICAgICBpZiBwbiBpbiBwcmVmZXJyZWRfdmVyc2lvbnMgYW5kIHByZWZlcnJlZF92ZXJzaW9uc1twbl1bMV06CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dID0gZmluZExhdGVzdFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHNvcnRwa2dfcG5bcG5dWzBdKQorICAgICAgICBlbGlnaWJsZS5hcHBlbmQocHJlZmVycmVkX3ZlcnNpb25zW3BuXVsxXSkKKworICAgIGlmIGxlbihlbGlnaWJsZSkgPT0gMDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJubyBlbGlnaWJsZSBwcm92aWRlcnMgZm9yICVzIiwgaXRlbSkKKyAgICAgICAgcmV0dXJuIDAKKworICAgICMgSWYgcG4gPT0gaXRlbSwgZ2l2ZSBpdCBhIHNsaWdodCBkZWZhdWx0IHByZWZlcmVuY2UKKyAgICAjIFRoaXMgbWVhbnMgUFJFRkVSUkVEX1BST1ZJREVSX2Zvb2JhciBkZWZhdWx0cyB0byBmb29iYXIgaWYgYXZhaWxhYmxlCisgICAgZm9yIHAgaW4gcHJvdmlkZXJzOgorICAgICAgICBwbiA9IGRhdGFDYWNoZS5wa2dfZm5bcF0KKyAgICAgICAgaWYgcG4gIT0gaXRlbToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIChuZXd2ZXJzLCBmbikgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dCisgICAgICAgIGlmIG5vdCBmbiBpbiBlbGlnaWJsZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsaWdpYmxlLnJlbW92ZShmbikKKyAgICAgICAgZWxpZ2libGUgPSBbZm5dICsgZWxpZ2libGUKKworICAgIHJldHVybiBlbGlnaWJsZQorCisKK2RlZiBmaWx0ZXJQcm92aWRlcnMocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIFRha2UgYSBsaXN0IG9mIHByb3ZpZGVycyBhbmQgZmlsdGVyL3Jlb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgcHJldmlvdXMgYnVpbGQgcmVzdWx0cworICAgIFRha2VzIGEgIm5vcm1hbCIgdGFyZ2V0IGl0ZW0KKyAgICAiIiIKKworICAgIGVsaWdpYmxlID0gX2ZpbHRlclByb3ZpZGVycyhwcm92aWRlcnMsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSkKKworICAgIHByZWZlcnZhciA9IGNmZ0RhdGEuZ2V0VmFyKCdQUkVGRVJSRURfUFJPVklERVJfJXMnICUgaXRlbSwgVHJ1ZSkKKyAgICBpZiBwcmVmZXJ2YXI6CisgICAgICAgIGRhdGFDYWNoZS5wcmVmZXJyZWRbaXRlbV0gPSBwcmVmZXJ2YXIKKworICAgIGZvdW5kVW5pcXVlID0gRmFsc2UKKyAgICBpZiBpdGVtIGluIGRhdGFDYWNoZS5wcmVmZXJyZWQ6CisgICAgICAgIGZvciBwIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgcG4gPSBkYXRhQ2FjaGUucGtnX2ZuW3BdCisgICAgICAgICAgICBpZiBkYXRhQ2FjaGUucHJlZmVycmVkW2l0ZW1dID09IHBuOgorICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJzZWxlY3RpbmcgJXMgdG8gc2F0aXNmeSAlcyBkdWUgdG8gUFJFRkVSUkVEX1BST1ZJREVSUyIsIHBuLCBpdGVtKQorICAgICAgICAgICAgICAgIGVsaWdpYmxlLnJlbW92ZShwKQorICAgICAgICAgICAgICAgIGVsaWdpYmxlID0gW3BdICsgZWxpZ2libGUKKyAgICAgICAgICAgICAgICBmb3VuZFVuaXF1ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgbG9nZ2VyLmRlYnVnKDEsICJzb3J0ZWQgcHJvdmlkZXJzIGZvciAlcyBhcmU6ICVzIiwgaXRlbSwgZWxpZ2libGUpCisKKyAgICByZXR1cm4gZWxpZ2libGUsIGZvdW5kVW5pcXVlCisKK2RlZiBmaWx0ZXJQcm92aWRlcnNSdW5UaW1lKHByb3ZpZGVycywgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKToKKyAgICAiIiIKKyAgICBUYWtlIGEgbGlzdCBvZiBwcm92aWRlcnMgYW5kIGZpbHRlci9yZW9yZGVyIGFjY29yZGluZyB0byB0aGUKKyAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHByZXZpb3VzIGJ1aWxkIHJlc3VsdHMKKyAgICBUYWtlcyBhICJydW50aW1lIiB0YXJnZXQgaXRlbQorICAgICIiIgorCisgICAgZWxpZ2libGUgPSBfZmlsdGVyUHJvdmlkZXJzKHByb3ZpZGVycywgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKQorCisgICAgIyBTaG91bGQgdXNlIGRhdGFDYWNoZS5wcmVmZXJyZWQgaGVyZT8KKyAgICBwcmVmZXJyZWQgPSBbXQorICAgIHByZWZlcnJlZF92YXJzID0gW10KKyAgICBwbnMgPSB7fQorICAgIGZvciBwIGluIGVsaWdpYmxlOgorICAgICAgICBwbnNbZGF0YUNhY2hlLnBrZ19mbltwXV0gPSBwCisgICAgZm9yIHAgaW4gZWxpZ2libGU6CisgICAgICAgIHBuID0gZGF0YUNhY2hlLnBrZ19mbltwXQorICAgICAgICBwcm92aWRlcyA9IGRhdGFDYWNoZS5wbl9wcm92aWRlc1twbl0KKyAgICAgICAgZm9yIHByb3ZpZGUgaW4gcHJvdmlkZXM6CisgICAgICAgICAgICBwcmVmZXJ2YXIgPSBjZmdEYXRhLmdldFZhcignUFJFRkVSUkVEX1BST1ZJREVSXyVzJyAlIHByb3ZpZGUsIFRydWUpCisgICAgICAgICAgICAjbG9nZ2VyLmRlYnVnKDEsICJjaGVja2luZyBQUkVGRVJSRURfUFJPVklERVJfJXMgKHZhbHVlICVzKSBhZ2FpbnN0ICVzIiwgcHJvdmlkZSwgcHJlZmVydmFyLCBwbnMua2V5cygpKQorICAgICAgICAgICAgaWYgcHJlZmVydmFyIGluIHBucyBhbmQgcG5zW3ByZWZlcnZhcl0gbm90IGluIHByZWZlcnJlZDoKKyAgICAgICAgICAgICAgICB2YXIgPSAiUFJFRkVSUkVEX1BST1ZJREVSXyVzID0gJXMiICUgKHByb3ZpZGUsIHByZWZlcnZhcikKKyAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZSgic2VsZWN0aW5nICVzIHRvIHNhdGlzZnkgcnVudGltZSAlcyBkdWUgdG8gJXMiLCBwcmVmZXJ2YXIsIGl0ZW0sIHZhcikKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfdmFycy5hcHBlbmQodmFyKQorICAgICAgICAgICAgICAgIHByZWYgPSBwbnNbcHJlZmVydmFyXQorICAgICAgICAgICAgICAgIGVsaWdpYmxlLnJlbW92ZShwcmVmKQorICAgICAgICAgICAgICAgIGVsaWdpYmxlID0gW3ByZWZdICsgZWxpZ2libGUKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWQuYXBwZW5kKHByZWYpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIG51bWJlclByZWZlcnJlZCA9IGxlbihwcmVmZXJyZWQpCisKKyAgICBpZiBudW1iZXJQcmVmZXJyZWQgPiAxOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlRyeWluZyB0byByZXNvbHZlIHJ1bnRpbWUgZGVwZW5kZW5jeSAlcyByZXN1bHRlZCBpbiBjb25mbGljdGluZyBQUkVGRVJSRURfUFJPVklERVIgZW50cmllcyBiZWluZyBmb3VuZC5cblRoZSBwcm92aWRlcnMgZm91bmQgd2VyZTogJXNcblRoZSBQUkVGRVJSRURfUFJPVklERVIgZW50cmllcyByZXN1bHRpbmcgaW4gdGhpcyBjb25mbGljdCB3ZXJlOiAlcyIsIGl0ZW0sIHByZWZlcnJlZCwgcHJlZmVycmVkX3ZhcnMpCisKKyAgICBsb2dnZXIuZGVidWcoMSwgInNvcnRlZCBydW50aW1lIHByb3ZpZGVycyBmb3IgJXMgYXJlOiAlcyIsIGl0ZW0sIGVsaWdpYmxlKQorCisgICAgcmV0dXJuIGVsaWdpYmxlLCBudW1iZXJQcmVmZXJyZWQKKworcmVnZXhwX2NhY2hlID0ge30KKworZGVmIGdldFJ1bnRpbWVQcm92aWRlcnMoZGF0YUNhY2hlLCByZGVwZW5kKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYW55IHByb3ZpZGVycyBvZiBydW50aW1lIGRlcGVuZGVuY3kKKyAgICAiIiIKKyAgICBycHJvdmlkZXJzID0gW10KKworICAgIGlmIHJkZXBlbmQgaW4gZGF0YUNhY2hlLnJwcm92aWRlcnM6CisgICAgICAgIHJwcm92aWRlcnMgKz0gZGF0YUNhY2hlLnJwcm92aWRlcnNbcmRlcGVuZF0KKworICAgIGlmIHJkZXBlbmQgaW4gZGF0YUNhY2hlLnBhY2thZ2VzOgorICAgICAgICBycHJvdmlkZXJzICs9IGRhdGFDYWNoZS5wYWNrYWdlc1tyZGVwZW5kXQorCisgICAgaWYgcnByb3ZpZGVyczoKKyAgICAgICAgcmV0dXJuIHJwcm92aWRlcnMKKworICAgICMgT25seSBzZWFyY2ggZHluYW1pYyBwYWNrYWdlcyBpZiB3ZSBjYW4ndCBmaW5kIGFueXRoaW5nIGluIG90aGVyIHZhcmlhYmxlcworICAgIGZvciBwYXR0ZXJuIGluIGRhdGFDYWNoZS5wYWNrYWdlc19keW5hbWljOgorICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKCcrJywgIlwrIikKKyAgICAgICAgaWYgcGF0dGVybiBpbiByZWdleHBfY2FjaGU6CisgICAgICAgICAgICByZWdleHAgPSByZWdleHBfY2FjaGVbcGF0dGVybl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWdleHAgPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvciBwYXJzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiAnJXMnIiwgcGF0dGVybikKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcmVnZXhwX2NhY2hlW3BhdHRlcm5dID0gcmVnZXhwCisgICAgICAgIGlmIHJlZ2V4cC5tYXRjaChyZGVwZW5kKToKKyAgICAgICAgICAgIHJwcm92aWRlcnMgKz0gZGF0YUNhY2hlLnBhY2thZ2VzX2R5bmFtaWNbcGF0dGVybl0KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQXNzdW1pbmcgJXMgaXMgYSBkeW5hbWljIHBhY2thZ2UsIGJ1dCBpdCBtYXkgbm90IGV4aXN0IiAlIHJkZXBlbmQpCisKKyAgICByZXR1cm4gcnByb3ZpZGVycwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2J1aWx0aW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0OGU0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5CkBAIC0wLDAgKzEsNzEwIEBACisjIGJ1aWx0aW4ucHkgLSBidWlsdGlucyBhbmQgdXRpbGl0aWVzIGRlZmluaXRpb25zIGZvciBweXNoLgorIworIyBDb3B5cmlnaHQgMjAwNyBQYXRyaWNrIE1lemFyZAorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisKKyIiIkJ1aWx0aW4gYW5kIGludGVybmFsIHV0aWxpdGllcyBpbXBsZW1lbnRhdGlvbnMuCisKKy0gQmV3YXJlIG5vdCB0byB1c2UgcHl0aG9uIGludGVycHJldGVyIGVudmlyb25tZW50IGFzIGlmIGl0IHdlcmUgdGhlIHNoZWxsCitlbnZpcm9ubWVudC4gRm9yIGluc3RhbmNlLCBjb21tYW5kcyB3b3JraW5nIGRpcmVjdG9yeSBtdXN0IGJlIGV4cGxpY2l0ZWx5IGhhbmRsZWQKK3Rocm91Z2ggZW52WydQV0QnXSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcHl0aG9uIHdvcmtpbmcgZGlyZWN0b3J5LgorIiIiCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitkZWYgaGFzX3N1YnByb2Nlc3NfYnVnKCk6CisgICAgcmV0dXJuIGdldGF0dHIoc3VicHJvY2VzcywgJ2xpc3QyY21kbGluZScpIGFuZCBcCisgICAgICAgKCAgICBzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJyddKSA9PSAnJyBvciBcCisgICAgICAgICAgICBzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJ2Zvb3xiYXInXSkgPT0gJ2Zvb3xiYXInKQorICAgICAgICAgICAgCisjIERldGVjdCBweXRob24gYnVnIDE2MzQzNDM6ICJzdWJwcm9jZXNzIHN3YWxsb3dzIGVtcHR5IGFyZ3VtZW50cyB1bmRlciB3aW4zMiIKKyMgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci9pbmRleC5waHA/ZnVuYz1kZXRhaWwmYWlkPTE2MzQzNDMmZ3JvdXBfaWQ9NTQ3MCZhdGlkPTEwNTQ3MD4KKyMgQWxzbyBkZXRlY3Q6ICJbIDE3MTA4MDIgXSBzdWJwcm9jZXNzIG11c3QgZXNjYXBlIHJlZGlyZWN0aW9uIGNoYXJhY3RlcnMgdW5kZXIgd2luMzIiCisjIDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvaW5kZXgucGhwP2Z1bmM9ZGV0YWlsJmFpZD0xNzEwODAyJmdyb3VwX2lkPTU0NzAmYXRpZD0xMDU0NzA+CitpZiBoYXNfc3VicHJvY2Vzc19idWcoKToKKyAgICBpbXBvcnQgc3VicHJvY2Vzc19maXgKKyAgICBzdWJwcm9jZXNzLmxpc3QyY21kbGluZSA9IHN1YnByb2Nlc3NfZml4Lmxpc3QyY21kbGluZQorCitmcm9tIHNoZXJyb3JzIGltcG9ydCAqCisKK2NsYXNzIE5vbkV4aXRpbmdQYXJzZXIob3B0cGFyc2UuT3B0aW9uUGFyc2VyKToKKyAgICAiIiJPcHRpb25QYXJzZXIgZGVmYXVsdCBiZWhhdmlvdXIgdXBvbiBlcnJvciBpcyB0byBwcmludCB0aGUgZXJyb3IgbWVzc2FnZSBhbmQKKyAgICBleGl0LiBSYWlzZSBhIHV0aWxpdHkgZXJyb3IgaW5zdGVhZC4KKyAgICAiIiIKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKyAgICAgICAgcmFpc2UgVXRpbGl0eUVycm9yKG1zZykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzZXQgc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfU0VUID0gTm9uRXhpdGluZ1BhcnNlcih1c2FnZT0ic2V0IC0gc2V0IG9yIHVuc2V0IG9wdGlvbnMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycyIpCitPUFRfU0VULmFkZF9vcHRpb24oICctZicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19mJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSdUaGUgc2hlbGwgc2hhbGwgZGlzYWJsZSBwYXRobmFtZSBleHBhbnNpb24uJykKK09QVF9TRVQuYWRkX29wdGlvbignLWUnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgaGVscD0iIiJXaGVuIHRoaXMgb3B0aW9uIGlzIG9uLCBpZiBhIHNpbXBsZSBjb21tYW5kIGZhaWxzIGZvciBhbnkgb2YgdGhlIFwKKyAgICByZWFzb25zIGxpc3RlZCBpbiBDb25zZXF1ZW5jZXMgb2YgU2hlbGwgRXJyb3JzIG9yIHJldHVybnMgYW4gZXhpdCBzdGF0dXMgXAorICAgIHZhbHVlID4wLCBhbmQgaXMgbm90IHBhcnQgb2YgdGhlIGNvbXBvdW5kIGxpc3QgZm9sbG93aW5nIGEgd2hpbGUsIHVudGlsLCBcCisgICAgb3IgaWYga2V5d29yZCwgYW5kIGlzIG5vdCBhIHBhcnQgb2YgYW4gQU5EIG9yIE9SIGxpc3QsIGFuZCBpcyBub3QgYSBcCisgICAgcGlwZWxpbmUgcHJlY2VkZWQgYnkgdGhlICEgcmVzZXJ2ZWQgd29yZCwgdGhlbiB0aGUgc2hlbGwgc2hhbGwgaW1tZWRpYXRlbHkgXAorICAgIGV4aXQuIiIiKQorT1BUX1NFVC5hZGRfb3B0aW9uKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc194JywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSIiIlRoZSBzaGVsbCBzaGFsbCB3cml0ZSB0byBzdGFuZGFyZCBlcnJvciBhIHRyYWNlIGZvciBlYWNoIGNvbW1hbmQgXAorICAgIGFmdGVyIGl0IGV4cGFuZHMgdGhlIGNvbW1hbmQgYW5kIGJlZm9yZSBpdCBleGVjdXRlcyBpdC4gSXQgaXMgdW5zcGVjaWZpZWQgXAorICAgIHdoZXRoZXIgdGhlIGNvbW1hbmQgdGhhdCB0dXJucyB0cmFjaW5nIG9mZiBpcyB0cmFjZWQuIiIiKQorCitkZWYgYnVpbHRpbl9zZXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKworICAgIG9wdGlvbiwgYXJncyA9IE9QVF9TRVQucGFyc2VfYXJncyhhcmdzKQorICAgIGVudiA9IGludGVycC5nZXRfZW52KCkKKyAgICAKKyAgICBpZiBvcHRpb24uaGFzX2Y6CisgICAgICAgIGVudi5zZXRfb3B0KCctZicpCisgICAgaWYgb3B0aW9uLmhhc19lOgorICAgICAgICBlbnYuc2V0X29wdCgnLWUnKQorICAgIGlmIG9wdGlvbi5oYXNfeDoKKyAgICAgICAgZW52LnNldF9vcHQoJy14JykKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzaGlmdCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiBidWlsdGluX3NoaWZ0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIHBhcmFtcyA9IGludGVycC5nZXRfZW52KCkuZ2V0X3Bvc2l0aW9uYWxfYXJncygpCisgICAgaWYgYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IGludChhcmdzWzBdKQorICAgICAgICAgICAgaWYgbiA+IGxlbihwYXJhbXMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZWxzZToKKyAgICAgICAgbiA9IDEKKyAgICAgICAgCisgICAgcGFyYW1zWzpuXSA9IFtdCisgICAgaW50ZXJwLmdldF9lbnYoKS5zZXRfcG9zaXRpb25hbF9hcmdzKHBhcmFtcykKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBleHBvcnQgc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfRVhQT1JUID0gTm9uRXhpdGluZ1BhcnNlcih1c2FnZT0ic2V0IC0gc2V0IG9yIHVuc2V0IG9wdGlvbnMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycyIpCitPUFRfRVhQT1JULmFkZF9vcHRpb24oJy1wJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3AnLCBkZWZhdWx0PUZhbHNlKQorCitkZWYgYnVpbHRpbl9leHBvcnQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX0VYUE9SVC5wYXJzZV9hcmdzKGFyZ3MpCisgICAgaWYgb3B0aW9uLmhhc19wOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICAKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gYXJnLnNwbGl0KCc9JywgMSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IGFyZywgTm9uZQorICAgICAgICBlbnYgPSBpbnRlcnAuZ2V0X2VudigpLmV4cG9ydChuYW1lLCB2YWx1ZSkKKyAgICAKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyByZXR1cm4gc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgYnVpbHRpbl9yZXR1cm4obmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICByZXMgPSAwCisgICAgaWYgYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gaW50KGFyZ3NbMF0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmVzID0gMAorICAgICAgICBpZiBub3QgMDw9cmVzPD0yNTU6CisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgICAgICAKKyAgICAjIEJVRzogc2hvdWxkIGJlIGxhc3QgZXhlY3V0ZWQgY29tbWFuZCBleGl0IGNvZGUgICAgICAgIAorICAgIHJhaXNlIFJldHVyblNpZ25hbChyZXMpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgdHJhcCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiBidWlsdGluX3RyYXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICBpZiBsZW4oYXJncykgPCAyOgorICAgICAgICBzdGRlcnIud3JpdGUoJ3RyYXA6IHVzYWdlOiB0cmFwIFtbYXJnXSBzaWduYWxfc3BlYyAuLi5dXG4nKQorICAgICAgICByZXR1cm4gMgorCisgICAgYWN0aW9uID0gYXJnc1swXQorICAgIGZvciBzaWcgaW4gYXJnc1sxOl06CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVudi50cmFwc1tzaWddID0gYWN0aW9uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHN0ZGVyci53cml0ZSgndHJhcDogJXNcbicgJSBzdHIoZSkpCisgICAgcmV0dXJuIDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB1bnNldCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPUFRfVU5TRVQgPSBOb25FeGl0aW5nUGFyc2VyKCJ1bnNldCAtIHVuc2V0IHZhbHVlcyBhbmQgYXR0cmlidXRlcyBvZiB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyIpCitPUFRfVU5TRVQuYWRkX29wdGlvbiggJy1mJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX2YnLCBkZWZhdWx0PUZhbHNlKQorT1BUX1VOU0VULmFkZF9vcHRpb24oICctdicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc192JywgZGVmYXVsdD1GYWxzZSkKKworZGVmIGJ1aWx0aW5fdW5zZXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX1VOU0VULnBhcnNlX2FyZ3MoYXJncykKKyAgICAKKyAgICBzdGF0dXMgPSAwCisgICAgZW52ID0gaW50ZXJwLmdldF9lbnYoKQorICAgIGZvciBhcmcgaW4gYXJnczogICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG9wdGlvbi5oYXNfZjoKKyAgICAgICAgICAgICAgICBlbnYucmVtb3ZlX2Z1bmN0aW9uKGFyZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIGVudlthcmddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFZhckFzc2lnbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgICAgIAorICAgIHJldHVybiBzdGF0dXMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB3YWl0IHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIGJ1aWx0aW5fd2FpdChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgcmV0dXJuIGludGVycC53YWl0KFtpbnQoYXJnKSBmb3IgYXJnIGluIGFyZ3NdKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGNhdCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfY2F0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgYXJncyA9IFsnLSddCisKKyAgICBzdGF0dXMgPSAwCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBpZiBhcmcgPT0gJy0nOgorICAgICAgICAgICAgZGF0YSA9IHN0ZGluLnJlYWQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihlbnZbJ1BXRCddLCBhcmcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IGZpbGUocGF0aCwgJ3JiJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgc3Rkb3V0LndyaXRlKGRhdGEpCisgICAgICAgIHN0ZG91dC5mbHVzaCgpCisgICAgcmV0dXJuIHN0YXR1cworICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBjZCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfQ0QgPSBOb25FeGl0aW5nUGFyc2VyKCJjZCAtIGNoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkiKQorCitkZWYgdXRpbGl0eV9jZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX0NELnBhcnNlX2FyZ3MoYXJncykKKyAgICBlbnYgPSBpbnRlcnAuZ2V0X2VudigpCisgICAgCisgICAgZGlyZWN0b3J5ID0gTm9uZQorICAgIHByaW50ZGlyID0gRmFsc2UKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgaG9tZSA9IGVudi5nZXQoJ0hPTUUnKQorICAgICAgICBpZiBob21lOgorICAgICAgICAgICAgIyBVbnNwZWNpZmllZCwgZG8gbm90aGluZworICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGhvbWUKKyAgICBlbGlmIGxlbihhcmdzKT09MToKKyAgICAgICAgZGlyZWN0b3J5ID0gYXJnc1swXQorICAgICAgICBpZiBkaXJlY3Rvcnk9PSctJzoKKyAgICAgICAgICAgIGlmICdPTERQV0QnIG5vdCBpbiBlbnY6CisgICAgICAgICAgICAgICAgcmFpc2UgVXRpbGl0eUVycm9yKCJPTERQV0Qgbm90IHNldCIpCisgICAgICAgICAgICBwcmludGRpciA9IFRydWUKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGVudlsnT0xEUFdEJ10KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3IoInRvbyBtYW55IGFyZ3VtZW50cyIpCisgICAgICAgICAgICAKKyAgICBjdXJwYXRoID0gTm9uZQorICAgICMgQWJzb2x1dGUgZGlyZWN0b3JpZXMgd2lsbCBiZSBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGUgb3MucGF0aC5qb2luIGNhbGwuCisgICAgaWYgbm90IGRpcmVjdG9yeS5zdGFydHN3aXRoKCcuJykgYW5kIG5vdCBkaXJlY3Rvcnkuc3RhcnRzd2l0aCgnLi4nKToKKyAgICAgICAgY2RwYXRocyA9IGVudi5nZXQoJ0NEUEFUSCcsICcuJykuc3BsaXQoJzsnKQorICAgICAgICBmb3IgY2RwYXRoIGluIGNkcGF0aHM6CisgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKGNkcGF0aCwgZGlyZWN0b3J5KQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwKToKKyAgICAgICAgICAgICAgICBjdXJwYXRoID0gcAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgCisgICAgaWYgY3VycGF0aCBpcyBOb25lOgorICAgICAgICBjdXJwYXRoID0gZGlyZWN0b3J5CisgICAgY3VycGF0aCA9IG9zLnBhdGguam9pbihlbnZbJ1BXRCddLCBkaXJlY3RvcnkpCisKKyAgICBlbnZbJ09MRFBXRCddID0gZW52WydQV0QnXQorICAgIGVudlsnUFdEJ10gPSBjdXJwYXRoCisgICAgaWYgcHJpbnRkaXI6CisgICAgICAgIHN0ZG91dC53cml0ZSgnJXNcbicgJSBjdXJwYXRoKQorICAgIHJldHVybiAwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgY29sb24gdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIHV0aWxpdHlfY29sb24obmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBlY2hvIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiB1dGlsaXR5X2VjaG8obmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgIyBFY2hvIG9ubHkgdGFrZXMgYXJndW1lbnRzLCBubyBvcHRpb25zLiBVc2UgcHJpbnRmIGlmIHlvdSBuZWVkIGZhbmN5IHN0dWZmLgorICAgIG91dHB1dCA9ICcgJy5qb2luKGFyZ3MpICsgJ1xuJworICAgIHN0ZG91dC53cml0ZShvdXRwdXQpCisgICAgc3Rkb3V0LmZsdXNoKCkKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBlZ3JlcCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBlZ3JlcCBpcyB1c3VhbGx5IGEgc2hlbGwgc2NyaXB0LgorIyBVbmZvcnR1bmF0ZWx5LCBweXNoIGRvZXMgbm90IHN1cHBvcnQgc2hlbGwgc2NyaXB0cyAqd2l0aCBhcmd1bWVudHMqIHJpZ2h0IG5vdywKKyMgc28gdGhlIHJlZGlyZWN0aW9uIGlzIGltcGxlbWVudGVkIGhlcmUsIGFzc3VtaW5nIGdyZXAgaXMgYXZhaWxhYmxlLgorZGVmIHV0aWxpdHlfZWdyZXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmV0dXJuIHJ1bl9jb21tYW5kKCdncmVwJywgWyctRSddICsgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGVudiB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgdXRpbGl0eV9lbnYobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAKKyAgICBpZiBhcmdzIGFuZCBhcmdzWzBdPT0nLWknOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdlbnY6IC1pIG9wdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQnKQorICAgIAorICAgIGkgPSAwCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBpZiAnPScgbm90IGluIGFyZzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgVXBkYXRlIHRoZSBjdXJyZW50IGVudmlyb25tZW50CisgICAgICAgIG5hbWUsIHZhbHVlID0gYXJnLnNwbGl0KCc9JywgMSkKKyAgICAgICAgZW52W25hbWVdID0gdmFsdWUKKyAgICAgICAgaSArPSAxCisgICAgICAgIAorICAgIGlmIGFyZ3NbaTpdOgorICAgICAgICAjIEZpbmQgdGhlbiBleGVjdXRlIHRoZSBzcGVjaWZpZWQgaW50ZXJwcmV0ZXIKKyAgICAgICAgdXRpbGl0eSA9IGVudi5maW5kX2luX3BhdGgoYXJnc1tpXSkKKyAgICAgICAgaWYgbm90IHV0aWxpdHk6CisgICAgICAgICAgICByZXR1cm4gMTI3CisgICAgICAgIGFyZ3NbaTppKzFdID0gdXRpbGl0eQorICAgICAgICBuYW1lID0gYXJnc1tpXQorICAgICAgICBhcmdzID0gYXJnc1tpKzE6XQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcnVuX2NvbW1hbmQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgCisgICAgICAgICAgICAgICAgZGVidWdmbGFncykKKyAgICAgICAgZXhjZXB0IFV0aWxpdHlFcnJvcjoKKyAgICAgICAgICAgIHN0ZGVyci53cml0ZSgnZW52OiBmYWlsZWQgdG8gZXhlY3V0ZSAlcycgJSAnICcuam9pbihbbmFtZV0rYXJncykpCisgICAgICAgICAgICByZXR1cm4gMTI2ICAgICAgICAgICAgCisgICAgZWxzZToKKyAgICAgICAgZm9yIHBhaXIgaW4gZW52LmdldF92YXJpYWJsZXMoKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnJXM9JXNcbicgJSBwYWlyKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGV4aXQgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X2V4aXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmVzID0gTm9uZQorICAgIGlmIGFyZ3M6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IGludChhcmdzWzBdKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJlcyA9IE5vbmUKKyAgICAgICAgaWYgbm90IDA8PXJlczw9MjU1OgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICAgICAgICAgCisgICAgaWYgcmVzIGlzIE5vbmU6CisgICAgICAgICMgQlVHOiBzaG91bGQgYmUgbGFzdCBleGVjdXRlZCBjb21tYW5kIGV4aXQgY29kZQorICAgICAgICByZXMgPSAwCisgICAgICAgIAorICAgIHJhaXNlIEV4aXRTaWduYWwocmVzKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGZncmVwIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNlZSBlZ3JlcAorZGVmIHV0aWxpdHlfZmdyZXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmV0dXJuIHJ1bl9jb21tYW5kKCdncmVwJywgWyctRiddICsgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZ3VuemlwIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNlZSBlZ3JlcAorZGVmIHV0aWxpdHlfZ3VuemlwKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIHJldHVybiBydW5fY29tbWFuZCgnZ3ppcCcsIFsnLWQnXSArIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCAKKyAgICAgICAgc3RkZXJyLCBkZWJ1Z2ZsYWdzKQorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBraWxsIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgdXRpbGl0eV9raWxsKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgcGlkID0gaW50KGFyZykKKyAgICAgICAgc3RhdHVzID0gc3VicHJvY2Vzcy5jYWxsKFsncHNraWxsJywgJy9UJywgc3RyKHBpZCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAjIHBza2lsbCBpcyBhc3luY2hyb25vdXMsIGhlbmNlIHRoZSBzdHVwaWQgcG9sbGluZyBsb29wCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BzbGlzdCcsIHN0cihwaWQpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgb3V0cHV0ID0gcC5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBpZiAoJ3Byb2Nlc3MgJWQgd2FzIG5vdCcgJSBwaWQpIGluIG91dHB1dDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgIHJldHVybiBzdGF0dXMKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgbWtkaXIgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09QVF9NS0RJUiA9IE5vbkV4aXRpbmdQYXJzZXIoIm1rZGlyIC0gbWFrZSBkaXJlY3Rvcmllcy4iKQorT1BUX01LRElSLmFkZF9vcHRpb24oJy1wJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3AnLCBkZWZhdWx0PUZhbHNlKQorCitkZWYgdXRpbGl0eV9ta2RpcihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICAjIFRPRE86IGltcGxlbWVudCB1bWFzaworICAgICMgVE9ETzogaW1wbGVtZW50IHByb3BlciB1dGlsaXR5IGVycm9yIHJlcG9ydAorICAgIG9wdGlvbiwgYXJncyA9IE9QVF9NS0RJUi5wYXJzZV9hcmdzKGFyZ3MpCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGVudlsnUFdEJ10sIGFyZykKKyAgICAgICAgaWYgb3B0aW9uLmhhc19wOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOiAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3MubWtkaXIocGF0aCkKKyAgICByZXR1cm4gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIG5ldHN0YXQgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X25ldHN0YXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgIyBEbyB5b3UgcmVhbGx5IGV4cGVjdCBtZSB0byBpbXBsZW1lbnQgbmV0c3RhdCA/CisgICAgIyBUaGlzIGVtcHR5IGZvcm0gaXMgZW5vdWdoIGZvciBNZXJjdXJpYWwgdGVzdHMgc2luY2UgaXQncworICAgICMgc3VwcG9zZWQgdG8gZ2VuZXJhdGUgbm90aGluZyB1cG9uIHN1Y2Nlc3MuIEZha2luZyB0aGlzIHRlc3QKKyAgICAjIGlzIG5vdCBhIGJpZyBkZWFsIGVpdGhlci4KKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHB3ZCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitPUFRfUFdEID0gTm9uRXhpdGluZ1BhcnNlcigicHdkIC0gcmV0dXJuIHdvcmtpbmcgZGlyZWN0b3J5IG5hbWUiKQorT1BUX1BXRC5hZGRfb3B0aW9uKCctTCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19MJywgZGVmYXVsdD1UcnVlLAorICAgIGhlbHA9IiIiSWYgdGhlIFBXRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWlucyBhbiBhYnNvbHV0ZSBwYXRobmFtZSBvZiBcCisgICAgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgZmlsZW5hbWVzIGRvdCBvciBkb3QtZG90LCBcCisgICAgcHdkIHNoYWxsIHdyaXRlIHRoaXMgcGF0aG5hbWUgdG8gc3RhbmRhcmQgb3V0cHV0LiBPdGhlcndpc2UsIHRoZSAtTCBvcHRpb24gXAorICAgIHNoYWxsIGJlaGF2ZSBhcyB0aGUgLVAgb3B0aW9uLiIiIikKK09QVF9QV0QuYWRkX29wdGlvbignLVAnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfTCcsIGRlZmF1bHQ9RmFsc2UsCisgICAgaGVscD0iIiJUaGUgYWJzb2x1dGUgcGF0aG5hbWUgd3JpdHRlbiBzaGFsbCBub3QgY29udGFpbiBmaWxlbmFtZXMgdGhhdCwgaW4gXAorICAgIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRobmFtZSwgcmVmZXIgdG8gZmlsZXMgb2YgdHlwZSBzeW1ib2xpYyBsaW5rLiIiIikKKworZGVmIHV0aWxpdHlfcHdkKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfUFdELnBhcnNlX2FyZ3MoYXJncykgICAgICAgIAorICAgIHN0ZG91dC53cml0ZSgnJXNcbicgJSBlbnZbJ1BXRCddKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHByaW50ZiB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVfVU5FU0NBUEUgPSByZS5jb21waWxlKHInKFxceFthLXpBLVowLTldezJ9fFxcWzAtN117MSwzfXxcXC4pJykKKworZGVmIHV0aWxpdHlfcHJpbnRmKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIGRlZiByZXBsYWNlKG0pOgorICAgICAgICBhc3NlcnQgbS5ncm91cCgpCisgICAgICAgIGcgPSBtLmdyb3VwKClbMTpdCisgICAgICAgIGlmIGcuc3RhcnRzd2l0aCgneCcpOgorICAgICAgICAgICAgcmV0dXJuIGNocihpbnQoZ1sxOl0sIDE2KSkKKyAgICAgICAgaWYgbGVuKGcpIDw9IDMgYW5kIGxlbihbYyBmb3IgYyBpbiBnIGlmIGMgaW4gJzAxMjM0NTY3J10pID09IGxlbihnKToKKyAgICAgICAgICAgICMgWWF5LCBhbiBvY3RhbCBudW1iZXIKKyAgICAgICAgICAgIHJldHVybiBjaHIoaW50KGcsIDgpKQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAgJ2EnOiAnXGEnLAorICAgICAgICAgICAgJ2InOiAnXGInLAorICAgICAgICAgICAgJ2YnOiAnXGYnLAorICAgICAgICAgICAgJ24nOiAnXG4nLAorICAgICAgICAgICAgJ3InOiAnXHInLAorICAgICAgICAgICAgJ3QnOiAnXHQnLAorICAgICAgICAgICAgJ3YnOiAnXHYnLAorICAgICAgICAgICAgJ1xcJzogJ1xcJywKKyAgICAgICAgfS5nZXQoZykKKyAgICAgICAgCisgICAgIyBDb252ZXJ0IGVzY2FwZSBzZXF1ZW5jZXMKKyAgICBmb3JtYXQgPSByZS5zdWIoUkVfVU5FU0NBUEUsIHJlcGxhY2UsIGFyZ3NbMF0pCisgICAgc3Rkb3V0LndyaXRlKGZvcm1hdCAlIHR1cGxlKGFyZ3NbMTpdKSkKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB0cnVlIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgdXRpbGl0eV90cnVlKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgcmV0dXJuIDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzZWQgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JFX1NFRCA9IHJlLmNvbXBpbGUocidecyguKS4qXDFbYS16QS1aXSokJykKKworIyBjeWd3aW4gc2VkIGZhaWxzIHdpdGggc29tZSBleHByZXNzaW9ucyB3aGVuIHRoZXkgZG8gbm90IGVuZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgorIyBzZWUgdW5pdCB0ZXN0cyBmb3IgZGV0YWlscy4gSW50ZXJlc3RpbmdseSwgdGhlIHNhbWUgZXhwcmVzc2lvbnMgd29ya3MgcGVyZmVjdGx5CisjIGluIGN5Z3dpbiBzaGVsbC4KK2RlZiB1dGlsaXR5X3NlZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICAjIFNjYW4gcGF0dGVybiBhcmd1bWVudHMgYW5kIGFwcGVuZCBhIHNwYWNlIGlmIG5lY2Vzc2FyeQorICAgIGZvciBpIGluIHhyYW5nZShsZW4oYXJncykpOgorICAgICAgICBpZiBub3QgUkVfU0VELnNlYXJjaChhcmdzW2ldKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGFyZ3NbaV0gPSBhcmdzW2ldICsgJyAnCisKKyAgICByZXR1cm4gcnVuX2NvbW1hbmQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgc2xlZXAgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X3NsZWVwKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgdGltZS5zbGVlcChpbnQoYXJnc1swXSkpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgc29ydCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT1BUX1NPUlQgPSBOb25FeGl0aW5nUGFyc2VyKCJzb3J0IC0gc29ydCwgbWVyZ2UsIG9yIHNlcXVlbmNlIGNoZWNrIHRleHQgZmlsZXMiKQorCitkZWYgdXRpbGl0eV9zb3J0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorCisgICAgZGVmIHNvcnQocGF0aCk6CisgICAgICAgIGlmIHBhdGggPT0gJy0nOgorICAgICAgICAgICAgbGluZXMgPSBzdGRpbi5yZWFkbGluZXMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBmaWxlKHBhdGgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc3RkZXJyLndyaXRlKHN0cihlKSArICdcbicpCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgCisgICAgICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV1bLTFdIT0nXG4nOgorICAgICAgICAgICAgbGluZXNbLTFdID0gbGluZXNbLTFdICsgJ1xuJworICAgICAgICByZXR1cm4gbGluZXMKKyAgICAKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfU09SVC5wYXJzZV9hcmdzKGFyZ3MpCisgICAgYWxsbGluZXMgPSBbXQorICAgIAorICAgIGlmIGxlbihhcmdzKTw9MDoKKyAgICAgICAgYXJncyArPSBbJy0nXQorICAgICAgICAKKyAgICAjIExvYWQgYWxsIGZpbGVzIGxpbmVzCisgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICB0cnk6CisgICAgICAgIG9zLmNoZGlyKGVudlsnUFdEJ10pCisgICAgICAgIGZvciBwYXRoIGluIGFyZ3M6CisgICAgICAgICAgICBhbGxsaW5lcyArPSBzb3J0KHBhdGgpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQorICAgICAgICAgICAgCisgICAgYWxsbGluZXMuc29ydCgpCisgICAgZm9yIGxpbmUgaW4gYWxsbGluZXM6CisgICAgICAgIHN0ZG91dC53cml0ZShsaW5lKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBoZyB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitoZ2NvbW1hbmRzID0gWworICAgICdhZGQnLAorICAgICdhZGRyZW1vdmUnLAorICAgICdjb21taXQnLCAnY2knLAorICAgICdkZWJ1Z3JlbmFtZScsCisgICAgJ2RlYnVnd2FsaycsCisgICAgJ2ZhbGFiYWxhJywgIyBEdW1teSBjb21tYW5kIHVzZWQgaW4gYSBtZXJjdXJpYWwgdGVzdAorICAgICdpbmNvbWluZycsCisgICAgJ2xvY2F0ZScsCisgICAgJ3B1bGwnLAorICAgICdwdXNoJywKKyAgICAncWluaXQnLAorICAgICdyZW1vdmUnLCAncm0nLAorICAgICdyZW5hbWUnLCAnbXYnLAorICAgICdyZXZlcnQnLCAgICAKKyAgICAnc2hvd2NvbmZpZycsCisgICAgJ3N0YXR1cycsICdzdCcsCisgICAgJ3N0cmlwJywKKyAgICBdCisKK2RlZiByZXdyaXRlc2xhc2hlcyhuYW1lLCBhcmdzKToKKyAgICAjIFNldmVyYWwgaGcgY29tbWFuZHMgb3V0cHV0IGZpbGUgcGF0aHMsIHJld3JpdGUgdGhlIHNlcGFyYXRvcnMKKyAgICBpZiBsZW4oYXJncykgPiAxIGFuZCBuYW1lLmxvd2VyKCkuZW5kc3dpdGgoJ3B5dGhvbicpIFwKKyAgICAgICBhbmQgYXJnc1swXS5lbmRzd2l0aCgnaGcnKToKKyAgICAgICAgZm9yIGNtZCBpbiBoZ2NvbW1hbmRzOgorICAgICAgICAgICAgaWYgY21kIGluIGFyZ3NbMTpdOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAKKyAgICAjIHN2biBvdXRwdXQgY29udGFpbnMgbWFueSBwYXRocyB3aXRoIE9TIHNwZWNpZmljIHNlcGFyYXRvcnMuCisgICAgIyBOb3JtYWxpemUgdGhlc2UgdG8gdW5peCBwYXRocy4KKyAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShuYW1lKQorICAgIGlmIGJhc2Uuc3RhcnRzd2l0aCgnc3ZuJyk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiByZXdyaXRlaGcob3V0cHV0KToKKyAgICBpZiBub3Qgb3V0cHV0OgorICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgIyBSZXdyaXRlIG9zIHNwZWNpZmljIG1lc3NhZ2VzCisgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoJzogVGhlIHN5c3RlbSBjYW5ub3QgZmluZCB0aGUgZmlsZSBzcGVjaWZpZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKQorICAgIG91dHB1dCA9IHJlLnN1YignOiBBY2Nlc3MgaXMgZGVuaWVkLiokJywgJzogUGVybWlzc2lvbiBkZW5pZWQnLCBvdXRwdXQpCisgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoJzogTm8gY29ubmVjdGlvbiBjb3VsZCBiZSBtYWRlIGJlY2F1c2UgdGhlIHRhcmdldCBtYWNoaW5lIGFjdGl2ZWx5IHJlZnVzZWQgaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IENvbm5lY3Rpb24gcmVmdXNlZCcpCisgICAgcmV0dXJuIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitkZWYgcnVuX2NvbW1hbmQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsCisgICAgICAgICAgICAgICAgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICAjIEV4ZWN1dGUgdGhlIGNvbW1hbmQKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgaGdiaW4gPSBpbnRlcnAub3B0aW9ucygpLmhnYmluYXJ5CisgICAgaXNoZyA9IGhnYmluIGFuZCAoJ2hnJyBpbiBuYW1lIG9yIGFyZ3MgYW5kICdoZycgaW4gYXJnc1swXSkKKyAgICB1bml4b3V0cHV0ID0gJ2N5Z3dpbicgaW4gbmFtZSBvciBpc2hnCisgICAgCisgICAgZXhlY19lbnYgPSBlbnYuZ2V0X3ZhcmlhYmxlcygpICAgICAgICAKKyAgICB0cnk6CisgICAgICAgICMgQlVHOiBjb21wYXJpbmcgZmlsZSBkZXNjcmlwdG9yIGlzIGNsZWFybHkgbm90IGEgcmVsaWFibGUgd2F5IHRvIHRlbGwKKyAgICAgICAgIyB3aGV0aGVyIHRoZXkgcG9pbnQgb24gdGhlIHNhbWUgdW5kZXJseWluZyBvYmplY3QuIEJ1dCBpbiBweXNoIGxpbWl0ZWQKKyAgICAgICAgIyBzY29wZSB0aGlzIGlzIHVzdWFsbHkgcmlnaHQsIHdlIGRvIG5vdCBleHBlY3QgY29tcGxpY2F0ZWQgcmVkaXJlY3Rpb25zCisgICAgICAgICMgYmVzaWRlcyB1c3VhbCAyPiYxLgorICAgICAgICAjIFN0aWxsIHRoZXJlIGlzIG9uZSBjYXNlIHdlIGhhdmUgYnV0IGNhbm5vdCBkZWFsIHdpdGggaXMgd2hlbiBzdGRvdXQKKyAgICAgICAgIyBhbmQgc3RkZXJyIGFyZSByZWRpcmVjdGVkICpieSBweXNoIGNhbGxlciouIFRoaXMgdGhlIHJlYXNvbiBmb3IgdGhlCisgICAgICAgICMgLS1yZWRpcmVjdCBweXNoKCkgb3B0aW9uLgorICAgICAgICAjIE5vdywgd2Ugd2FudCB0byBrbm93IHRoZXkgYXJlIHRoZSBzYW1lIGJlY2F1c2Ugd2Ugc29tZXRpbWVzIG5lZWQgdG8gCisgICAgICAgICMgdHJhbnNmb3JtIHRoZSBjb21tYW5kIG91dHB1dCwgbW9zdGx5IHJlbW92ZSBDUi1MRiB0byBlbnN1cmUgdGhhdAorICAgICAgICAjIGNvbW1hbmQgb3V0cHV0IGlzIHVuaXgtbGlrZS4gQ3lnd2luIHV0aWxpZXMgYXJlIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2UKKyAgICAgICAgIyB0aGV5IGV4cGxpY2l0ZWx5IHNldCB0aGVpciBvdXRwdXQgc3RyZWFtcyB0byBiaW5hcnkgbW9kZSwgc28gd2UgaGF2ZQorICAgICAgICAjIG5vdGhpbmcgdG8gZG8uIEZvciBhbGwgb3RoZXJzIGNvbW1hbmRzLCB3ZSBoYXZlIHRvIGd1ZXNzIHdoZXRoZXIgdGhleQorICAgICAgICAjIGFyZSBzZW5kaW5nIHRleHQgZGF0YSwgaW4gd2hpY2ggY2FzZSB0aGUgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBkb25lLgorICAgICAgICAjIEFnYWluLCB0aGUgTlVMIGNoYXJhY3RlciB0ZXN0IGlzIHVucmVsaWFibGUgYnV0IHNob3VsZCBiZSBlbm91Z2ggZm9yCisgICAgICAgICMgaGcgdGVzdHMuCisgICAgICAgIHJlZGlyZWN0ZWQgPSBzdGRvdXQuZmlsZW5vKCk9PXN0ZGVyci5maWxlbm8oKQorICAgICAgICBpZiBub3QgcmVkaXJlY3RlZDoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtuYW1lXSArIGFyZ3MsIGN3ZD1lbnZbJ1BXRCddLCBlbnY9ZXhlY19lbnYsIAorICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtuYW1lXSArIGFyZ3MsIGN3ZD1lbnZbJ1BXRCddLCBlbnY9ZXhlY19lbnYsIAorICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKKyAgICAgICAgcmFpc2UgVXRpbGl0eUVycm9yKHN0cihlKSkKKworICAgIGlmIG5vdCB1bml4b3V0cHV0OgorICAgICAgICBkZWYgZW5jb2RlKHMpOgorICAgICAgICAgICAgaWYgJ1wwJyBpbiBzOgorICAgICAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKCdcclxuJywgJ1xuJykKKyAgICBlbHNlOgorICAgICAgICBlbmNvZGUgPSBsYW1iZGEgczogcworCisgICAgaWYgcmV3cml0ZXNsYXNoZXMobmFtZSwgYXJncyk6CisgICAgICAgIGVuY29kZTFfID0gZW5jb2RlCisgICAgICAgIGRlZiBlbmNvZGUocyk6CisgICAgICAgICAgICBzID0gZW5jb2RlMV8ocykKKyAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoJ1xcXFwnLCAnXFwnKQorICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgnXFwnLCAnLycpCisgICAgICAgICAgICByZXR1cm4gcworCisgICAgaWYgaXNoZzoKKyAgICAgICAgZW5jb2RlMl8gPSBlbmNvZGUKKyAgICAgICAgZGVmIGVuY29kZShzKToKKyAgICAgICAgICAgIHJldHVybiByZXdyaXRlaGcoZW5jb2RlMl8ocykpCisgICAgCisgICAgc3Rkb3V0LndyaXRlKGVuY29kZShvdXQpKQorICAgIGlmIG5vdCByZWRpcmVjdGVkOgorICAgICAgICBzdGRlcnIud3JpdGUoZW5jb2RlKGVycikpCisgICAgcmV0dXJuIHAucmV0dXJuY29kZQorICAgICAgICAgICAgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2ludGVycC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWQ4YzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2ludGVycC5weQpAQCAtMCwwICsxLDEzNjcgQEAKKyMgaW50ZXJwLnB5IC0gc2hlbGwgaW50ZXJwcmV0ZXIgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiSW1wbGVtZW50IHRoZSBzaGVsbCBpbnRlcnByZXRlci4KKworTW9zdCByZWZlcmVuY2VzIGFyZSBtYWRlIHRvICJUaGUgT3BlbiBHcm91cCBCYXNlIFNwZWNpZmljYXRpb25zIElzc3VlIDYiLgorPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS91dGlsaXRpZXMveGN1X2NoYXAwMi5odG1sPgorIiIiCisjIFRPRE86IGRvY3VtZW50IHRoZSBmYWN0IGlucHV0IHN0cmVhbXMgbXVzdCBpbXBsZW1lbnQgZmlsZW5vKCkgc28gUG9wZW4gd2lsbCB3b3JrIGNvcnJlY3RseS4KKyMgaXQgcmVxdWlyZXMgbm9uLXN0ZGluIHN0cmVhbSB0byBiZSBpbXBsZW1lbnRlZCBhcyBmaWxlcy4gU3RpbGwgdG8gYmUgdGVzdGVkLi4uCisjIERPQzogcGF0aHNlcCBpcyB1c2VkIGluIFBBVEggaW5zdGVhZCBvZiAnOicuIENsZWFybHksIHRoZXJlIGFyZSBwYXRoIHN5bnRheCBpc3N1ZXMgaGVyZS4KKyMgVE9ETzogc3RvcCBjb21tYW5kIGV4ZWN1dGlvbiB1cG9uIGVycm9yLgorIyBUT0RPOiBzb3J0IG91dCB0aGUgZmlsZW5hbWUvaW9fbnVtYmVyIG1lc3MuIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgZmlsZW5hbWVzIG9ubHkuCisjIFRPRE86IHJldmlldyBzdWJzaGVsbCBpbXBsZW1lbnRhdGlvbgorIyBUT0RPOiB0ZXN0IGVudmlyb25tZW50IGNsb25pbmcgZm9yIG5vbi1zcGVjaWFsIGJ1aWx0aW5zCisjIFRPRE86IHNldCAteCBzaG91bGQgbm90IHJlYnVpbGQgY29tbWFuZHMgZnJvbSB0b2tlbnMsIGFzc2lnbm1lbnRzL3JlZGlyZWN0aW9ucyBhcmUgbG9zdAorIyBUT0RPOiB1bml0IHRlc3QgZm9yIHZhcmlhYmxlIGFzc2lnbm1lbnQKKyMgVE9ETzogdGVzdCBlcnJvciBtYW5hZ2VtZW50IHdydCBlcnJvciB0eXBlL3V0aWxpdHkgdHlwZQorIyBUT0RPOiB0ZXN0IGZvciBiaW5hcnkgb3V0cHV0IGV2ZXJ5d2hlcmUKKyMgQlVHOiBkZWJ1Zy1wYXJzaW5nIGRvZXMgbm90IHBhc3MgbG9nIGZpbGUgdG8gUExZLiBNYXliZSBhIFBMWSB1cGdyYWRlIGlzIG5lY2Vzc2FyeS4KK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQoraW1wb3J0IGVycm5vCitpbXBvcnQgZ2xvYgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKKwordHJ5OgorICAgIHMgPSBzZXQoKQorICAgIGRlbCBzCitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gU2V0IGltcG9ydCBTZXQgYXMgc2V0CisKK2ltcG9ydCBidWlsdGluCitmcm9tIHNoZXJyb3JzIGltcG9ydCAqCitpbXBvcnQgcHlzaGxleAoraW1wb3J0IHB5c2h5YWNjCisKK2RlZiBtYXBwZW5kKGZ1bmMsICphcmdzLCAqKmthcmdzKToKKyAgICAiIiJMaWtlIG1hcCBidXQgYXNzdW1lIGZ1bmMgcmV0dXJucyBhIGxpc3QuIFJldHVybmVkIGxpc3RzIGFyZSBtZXJnZWQgaW50bworICAgIGEgc2luZ2xlIG9uZS4KKyAgICAiIiIKKyAgICByZXR1cm4gcmVkdWNlKGxhbWJkYSBhLGI6IGErYiwgbWFwKGZ1bmMsICphcmdzLCAqKmthcmdzKSwgW10pCisKK2NsYXNzIEZpbGVXcmFwcGVyOgorICAgICIiIkZpbGUgb2JqZWN0IHdyYXBwZXIgdG8gZWFzZSBkZWJ1Z2dpbmcuCisgICAgCisgICAgQWxsb3cgbW9kZSBjaGVja2luZyBhbmQgaW1wbGVtZW50IGZpbGUgZHVwbGljYXRpb24gdGhyb3VnaCBhIHNpbXBsZSAKKyAgICByZWZlcmVuY2UgY291bnRpbmcgc2NoZW1lLiBOb3Qgc3VyZSB0aGUgbGF0dGVyIGlzIHJlYWxseSB1c2VmdWwgc2luY2UKKyAgICBvbmx5IHJlYWwgZmlsZSBkZXNjcmlwdG9ycyBjYW4gYmUgdXNlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZSwgZmlsZSwgY2xvc2U9VHJ1ZSk6CisgICAgICAgIGlmIG1vZGUgbm90IGluICgncicsICd3JywgJ2EnKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2ludmFsaWQgbW9kZTogJXMnICUgbW9kZSkKKyAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKKyAgICAgICAgc2VsZi5fY2xvc2UgPSBjbG9zZQorICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIEZpbGVXcmFwcGVyKToKKyAgICAgICAgICAgIGlmIGZpbGUuX3JlZmNvdW50WzBdIDw9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRXJyb3InKQorICAgICAgICAgICAgc2VsZi5fcmVmY291bnQgPSBmaWxlLl9yZWZjb3VudAorICAgICAgICAgICAgc2VsZi5fcmVmY291bnRbMF0gKz0gMQorICAgICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUuX2ZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlZmNvdW50ID0gWzFdCisgICAgICAgICAgICBzZWxmLl9maWxlID0gZmlsZQorICAgICAgICAKKyAgICBkZWYgZHVwKHNlbGYpOgorICAgICAgICByZXR1cm4gRmlsZVdyYXBwZXIoc2VsZi5fbW9kZSwgc2VsZiwgc2VsZi5fY2xvc2UpCisgICAgICAgIAorICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICIiImZpbGVubygpIHNob3VsZCBiZSBvbmx5IG5lY2Vzc2FyeSBmb3IgaW5wdXQgc3RyZWFtcy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgIGlmIHNlbGYuX21vZGUhPSdyJzoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0Vycm9yJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUucmVhZChzaXplKQorICAgICAgICAKKyAgICBkZWYgcmVhZGxpbmVzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlLnJlYWRsaW5lcygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIAorICAgIGRlZiB3cml0ZShzZWxmLCBzKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKCd3JywgJ2EnKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoMCwgJ0Vycm9yJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUud3JpdGUocykKKyAgICAgICAgCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKKyAgICAgICAgCisgICAgZGVmIGNsb3NlKHNlbGYpOiAgICAgICAgCisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWZjb3VudDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBhc3NlcnQgIHNlbGYuX3JlZmNvdW50WzBdID4gMAorICAgICAgICAKKyAgICAgICAgc2VsZi5fcmVmY291bnRbMF0gLT0gMSAgICAKKyAgICAgICAgaWYgc2VsZi5fcmVmY291bnRbMF0gPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX21vZGUgPSAnYycKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICBzZWxmLl9yZWZjb3VudCA9IE5vbmUKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgbW9kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGUKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSA9PSAnbmFtZSc6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBnZXRhdHRyKHNlbGYuX2ZpbGUsIG5hbWUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAKK2RlZiB3aW4zMl9vcGVuX2Rldm51bGwobW9kZSk6CisgICAgcmV0dXJuIG9wZW4oJ05VTCcsIG1vZGUpCisgICAgCisgICAgICAgIAorY2xhc3MgUmVkaXJlY3Rpb25zOgorICAgICIiIlN0b3JlcyBvcGVuIGZpbGVzIGFuZCB0aGVpciBtYXBwaW5nIHRvIHBzZXVkby1zaCBmaWxlIGRlc2NyaXB0b3IuCisgICAgIiIiCisgICAgIyBCVUc6IHJlZGlyZWN0aW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5OiAxPiYzIDI+JjMgMz4mNCBkb2VzIAorICAgICMgbm90IG1ha2UgMSB0byByZWRpcmVjdCB0byA0CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzID0ge30KKyAgICAgICAgaWYgc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGVzY3JpcHRvcigwLCBzdGRpbikKKyAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fYWRkX2Rlc2NyaXB0b3IoMSwgc3Rkb3V0KQorICAgICAgICBpZiBzdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGVzY3JpcHRvcigyLCBzdGRlcnIpCisgICAgICAgICAgICAKKyAgICBkZWYgYWRkX2hlcmVfZG9jdW1lbnQoc2VsZiwgaW50ZXJwLCBuYW1lLCBjb250ZW50LCBpb19udW1iZXI9Tm9uZSk6CisgICAgICAgIGlmIGlvX251bWJlciBpcyBOb25lOgorICAgICAgICAgICAgaW9fbnVtYmVyID0gMAorICAgICAgICAgICAgCisgICAgICAgIGlmIG5hbWU9PXB5c2hsZXgudW5xdW90ZV93b3JkdHJlZShuYW1lKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSBpbnRlcnAuZXhwYW5kX2hlcmVfZG9jdW1lbnQoKCdUT0tFTicsIGNvbnRlbnQpKQorICAgIAorICAgICAgICAjIFdyaXRlIGRvY3VtZW50IGNvbnRlbnQgaW4gYSB0ZW1wb3JhcnkgZmlsZQorICAgICAgICB0bXAgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG1wLndyaXRlKGNvbnRlbnQpCisgICAgICAgICAgICB0bXAuZmx1c2goKQorICAgICAgICAgICAgdG1wLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKGlvX251bWJlciwgRmlsZVdyYXBwZXIoJ3InLCB0bXApKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0bXAuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgaW50ZXJwLCBvcCwgZmlsZW5hbWUsIGlvX251bWJlcj1Ob25lKToKKyAgICAgICAgaWYgb3Agbm90IGluICgnPCcsICc+JywgJz58JywgJz4+JywgJz4mJyk6CisgICAgICAgICAgICAjIFRPRE86IGFkZCBkZXNjcmlwdG9yIGR1cGxpY2F0aW9uIGFuZCBoZXJlX2RvY3VtZW50cyAgICAgIAorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignVW5zdXBwb3J0ZWQgcmVkaXJlY3Rpb24gb3BlcmF0b3IgIiVzIicgJSBvcCkKKyAgICAgICAgICAgIAorICAgICAgICBpZiBpb19udW1iZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSBpbnQoaW9fbnVtYmVyKQorICAgICAgICAgICAgCisgICAgICAgIGlmIChvcCA9PSAnPiYnIGFuZCBmaWxlbmFtZS5pc2RpZ2l0KCkpIG9yIGZpbGVuYW1lPT0nLSc6CisgICAgICAgICAgICAjIE5vIGV4cGFuc2lvbiBmb3IgZmlsZSBkZXNjcmlwdG9ycywgcXVvdGUgdGhlbSBpZiB5b3Ugd2FudCBhIGZpbGVuYW1lCisgICAgICAgICAgICBmdWxsbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAgICAgIyBUT0RPOiB3aW4zMiBrbHVkZ2UKKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZT09Jy9kZXYvbnVsbCc6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gJ05VTCcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGhhbmRsZSBhYnNvbHV0ZSBwYXRobmFtZXMsIHRoZXkgYXJlIHVubGlrZWx5IHRvIGV4aXN0IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgcGxhdGZvcm0gKHdpbjMyIGZvciBpbnN0YW5jZSkuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IGludGVycC5leHBhbmRfcmVkaXJlY3Rpb24oKCdUT0tFTicsIGZpbGVuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZnVsbG5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0aW9uRXJyb3IoJyVzOiBhbWJpZ3VvdXMgcmVkaXJlY3QnICUgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgIyBCdWlsZCBhYnNvbHV0ZSBwYXRoIGJhc2VkIG9uIFBXRAorICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGludGVycC5nZXRfZW52KClbJ1BXRCddLCBmdWxsbmFtZSkKKyAgICAgICAgICAgIAorICAgICAgICBpZiBvcD09JzwnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9pbnB1dF9yZWRpcmVjdGlvbihpbnRlcnAsIGZ1bGxuYW1lLCBpb19udW1iZXIpCisgICAgICAgIGVsaWYgb3AgaW4gKCc+JywgJz58Jyk6CisgICAgICAgICAgICBjbG9iYmVyID0gKCc+fCc9PW9wKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9vdXRwdXRfcmVkaXJlY3Rpb24oaW50ZXJwLCBmdWxsbmFtZSwgaW9fbnVtYmVyLCBjbG9iYmVyKQorICAgICAgICBlbGlmIG9wPT0nPj4nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FkZF9vdXRwdXRfYXBwZW5kaW5nKGludGVycCwgZnVsbG5hbWUsIGlvX251bWJlcikKKyAgICAgICAgZWxpZiBvcD09Jz4mJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kdXBfb3V0cHV0X2Rlc2NyaXB0b3IoZnVsbG5hbWUsIGlvX251bWJlcikKKyAgICAgICAgCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kZXNjcmlwdG9ycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBkZXNjIGluIHNlbGYuX2Rlc2NyaXB0b3JzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBkZXNjLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBkZXNjLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzID0gTm9uZQorICAgICAgICAgICAgCisgICAgZGVmIHN0ZGluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRvcnNbMF0KKyAgICAgICAgICAKKyAgICBkZWYgc3Rkb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRvcnNbMV0gCisgICAgICAgIAorICAgIGRlZiBzdGRlcnIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdG9yc1syXSAKKyAgICAgICAgICAgIAorICAgIGRlZiBjbG9uZShzZWxmKToKKyAgICAgICAgY2xvbmUgPSBSZWRpcmVjdGlvbnMoKQorICAgICAgICBmb3IgZGVzYywgZmlsZW9iaiBpbiBzZWxmLl9kZXNjcmlwdG9ycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGNsb25lLl9kZXNjcmlwdG9yc1tkZXNjXSA9IGZpbGVvYmouZHVwKCkKKyAgICAgICAgcmV0dXJuIGNsb25lCisgICAgICAgICAgIAorICAgIGRlZiBfYWRkX291dHB1dF9yZWRpcmVjdGlvbihzZWxmLCBpbnRlcnAsIGZpbGVuYW1lLCBpb19udW1iZXIsIGNsb2JiZXIpOiAgICAKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICAjIGlvX251bWJlciBkZWZhdWx0IHRvIHN0YW5kYXJkIG91dHB1dAorICAgICAgICAgICAgaW9fbnVtYmVyID0gMQorICAgICAgICAKKyAgICAgICAgaWYgbm90IGNsb2JiZXIgYW5kIGludGVycC5nZXRfZW52KCkuaGFzX29wdCgnLUMnKSBhbmQgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgIyBGaWxlIGFscmVhZHkgZXhpc3QgaW4gbm8tY2xvYmJlciBtb2RlLCBiYWlsIG91dAorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignRmlsZSAiJXMiIGFscmVhZHkgZXhpc3RzJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgCisgICAgICAgICMgT3BlbiBhbmQgcmVnaXN0ZXIKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGVfZGVzY3JpcHRvcihpb19udW1iZXIsIGZpbGVuYW1lLCAndycpCisgICAgICAgIAorICAgIGRlZiBfYWRkX291dHB1dF9hcHBlbmRpbmcoc2VsZiwgaW50ZXJwLCBmaWxlbmFtZSwgaW9fbnVtYmVyKTogICAgCisgICAgICAgIGlmIGlvX251bWJlciBpcyBOb25lOgorICAgICAgICAgICAgaW9fbnVtYmVyID0gMQorICAgICAgICBzZWxmLl9hZGRfZmlsZV9kZXNjcmlwdG9yKGlvX251bWJlciwgZmlsZW5hbWUsICdhJykKKyAgICAgICAgICAgIAorICAgIGRlZiBfYWRkX2lucHV0X3JlZGlyZWN0aW9uKHNlbGYsIGludGVycCwgZmlsZW5hbWUsIGlvX251bWJlcik6CisgICAgICAgIGlmIGlvX251bWJlciBpcyBOb25lOgorICAgICAgICAgICAgaW9fbnVtYmVyID0gMAorICAgICAgICBzZWxmLl9hZGRfZmlsZV9kZXNjcmlwdG9yKGlvX251bWJlciwgZmlsZW5hbWUsICdyJykKKyAgICAgICAgCisgICAgZGVmIF9hZGRfZmlsZV9kZXNjcmlwdG9yKHNlbGYsIGlvX251bWJlciwgZmlsZW5hbWUsIG1vZGUpOiAgICAKKyAgICAgICAgdHJ5OiAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lPT0nL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgZiA9IHdpbjMyX29wZW5fZGV2bnVsbChtb2RlKydiJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGhhbmRsZSBhYnNvbHV0ZSBwYXRobmFtZXMsIHRoZXkgYXJlIHVubGlrZWx5IHRvIGV4aXN0IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgcGxhdGZvcm0gKHdpbjMyIGZvciBpbnN0YW5jZSkuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Nhbm5vdCBvcGVuIGFic29sdXRlIHBhdGggJXMnICUgcmVwcihmaWxlbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYgPSBmaWxlKGZpbGVuYW1lLCBtb2RlKydiJykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0aW9uRXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgCisgICAgICAgIHdyYXBwZXIgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyYXBwZXIgPSBGaWxlV3JhcHBlcihtb2RlLCBmKQorICAgICAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKGlvX251bWJlciwgd3JhcHBlcikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgZjogZi5jbG9zZSgpCisgICAgICAgICAgICBpZiB3cmFwcGVyOiB3cmFwcGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAKKyAgICBkZWYgX2R1cF9vdXRwdXRfZGVzY3JpcHRvcihzZWxmLCBzb3VyY2VfZmQsIGRlc3RfZmQpOgorICAgICAgICBpZiBzb3VyY2VfZmQgaXMgTm9uZToKKyAgICAgICAgICAgIHNvdXJjZV9mZCA9IDEKKyAgICAgICAgc2VsZi5fZHVwX2ZpbGVfZGVzY3JpcHRvcihzb3VyY2VfZmQsIGRlc3RfZmQsICd3JykKKyAgICAgICAgICAgIAorICAgIGRlZiBfZHVwX2ZpbGVfZGVzY3JpcHRvcihzZWxmLCBzb3VyY2VfZmQsIGRlc3RfZmQsIG1vZGUpOgorICAgICAgICBzb3VyY2VfZmQgPSBpbnQoc291cmNlX2ZkKQorICAgICAgICBpZiBzb3VyY2VfZmQgbm90IGluIHNlbGYuX2Rlc2NyaXB0b3JzOgorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignIiVzIiBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3InICUgc3RyKHNvdXJjZV9mZCkpCisgICAgICAgIHNvdXJjZSA9IHNlbGYuX2Rlc2NyaXB0b3JzW3NvdXJjZV9mZF0KKyAgICAgICAgCisgICAgICAgIGlmIHNvdXJjZS5tb2RlKCkhPW1vZGU6CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdEZXNjcmlwdG9yICVzIGNhbm5vdCBiZSBkdXBsaWNhdGVkIGluIG1vZGUgIiVzIicgJSAoc3RyKHNvdXJjZSksIG1vZGUpKQorICAgICAgICAKKyAgICAgICAgaWYgZGVzdF9mZD09Jy0nOgorICAgICAgICAgICAgIyBDbG9zZSB0aGUgc291cmNlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIGRlbCBzZWxmLl9kZXNjcmlwdG9yc1tzb3VyY2VfZmRdCisgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVzdF9mZCA9IGludChkZXN0X2ZkKQorICAgICAgICAgICAgaWYgZGVzdF9mZCBub3QgaW4gc2VsZi5fZGVzY3JpcHRvcnM6CisgICAgICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignQ2Fubm90IHJlcGxhY2UgZmlsZSBkZXNjcmlwdG9yICVzJyAlIHN0cihkZXN0X2ZkKSkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlc3QgPSBzZWxmLl9kZXNjcmlwdG9yc1tkZXN0X2ZkXQorICAgICAgICAgICAgaWYgZGVzdC5tb2RlKCkhPW1vZGU6CisgICAgICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignRGVzY3JpcHRvciAlcyBjYW5ub3QgYmUgY2Fubm90IGJlIHJlZGlyZWN0ZWQgaW4gbW9kZSAiJXMiJyAlIChzdHIoZGVzdCksIG1vZGUpKQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZWxmLl9kZXNjcmlwdG9yc1tkZXN0X2ZkXSA9IHNvdXJjZS5kdXAoKQorICAgICAgICAgICAgZGVzdC5jbG9zZSgpICAgICAgICAKKyAgICAgICAgICAgIAorICAgIGRlZiBfYWRkX2Rlc2NyaXB0b3Ioc2VsZiwgaW9fbnVtYmVyLCBmaWxlKToKKyAgICAgICAgaW9fbnVtYmVyID0gaW50KGlvX251bWJlcikKKyAgICAgICAgCisgICAgICAgIGlmIGlvX251bWJlciBpbiBzZWxmLl9kZXNjcmlwdG9yczoKKyAgICAgICAgICAgICMgQ2xvc2UgdGhlIGN1cnJlbnQgZGVzY3JpcHRvcgorICAgICAgICAgICAgZCA9IHNlbGYuX2Rlc2NyaXB0b3JzW2lvX251bWJlcl0KKyAgICAgICAgICAgIGRlbCBzZWxmLl9kZXNjcmlwdG9yc1tpb19udW1iZXJdCisgICAgICAgICAgICBkLmNsb3NlKCkKKyAgICAgICAgICAgIAorICAgICAgICBzZWxmLl9kZXNjcmlwdG9yc1tpb19udW1iZXJdID0gZmlsZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIG5hbWVzID0gWygnJWQ9JXInICUgKGssIGdldGF0dHIodiwgJ25hbWUnLCBOb25lKSkpIGZvciBrLHYKKyAgICAgICAgICAgICAgICAgaW4gc2VsZi5fZGVzY3JpcHRvcnMuaXRlcml0ZW1zKCldCisgICAgICAgIG5hbWVzID0gJywnLmpvaW4obmFtZXMpCisgICAgICAgIHJldHVybiAnUmVkaXJlY3Rpb25zKCVzKScgJSBuYW1lcworCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorICAgIAorZGVmIGN5Z3dpbl90b193aW5kb3dzX3BhdGgocGF0aCk6CisgICAgIiIiVHVybiAvY3lnZHJpdmUvYy9mb28gaW50byBjOi9mb28sIG9yIHJldHVybiBwYXRoIGlmIGl0CisgICAgaXMgbm90IGEgY3lnd2luIHBhdGguCisgICAgIiIiCisgICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aCgnL2N5Z2RyaXZlLycpOgorICAgICAgICByZXR1cm4gcGF0aAorICAgIHBhdGggPSBwYXRoW2xlbignL2N5Z2RyaXZlLycpOl0KKyAgICBwYXRoID0gcGF0aFs6MV0gKyAnOicgKyBwYXRoWzE6XQorICAgIHJldHVybiBwYXRoCisgICAgCitkZWYgd2luMzJfdG9fdW5peF9wYXRoKHBhdGgpOgorICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgIHJldHVybiBwYXRoICAgIAorICAgIAorX1JFX1NIRUJBTkcgPSByZS5jb21waWxlKHInXlwjIVxzPyhbXlxzXSspKD86XHMoW15cc10rKSk/JykKK19TSEVCQU5HX0NNRFMgPSB7CisgICAgJy91c3IvYmluL2Vudic6ICdlbnYnLAorICAgICcvYmluL3NoJzogJ3B5c2gnLAorICAgICdweXRob24nOiAncHl0aG9uJywKK30KKyAgICAKK2RlZiByZXNvbHZlX3NoZWJhbmcocGF0aCwgaWdub3Jlc2hlbGw9RmFsc2UpOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYXJndW1lbnRzIGFzIHNoZWJhbmcgaW50ZXJwcmV0ZXIgY2FsbCBvciBhbiBlbXB0eSBsaXN0CisgICAgaWYgcGF0aCBkb2VzIG5vdCByZWZlciB0byBhbiBleGVjdXRhYmxlIHNjcmlwdC4KKyAgICBTZWUgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9hdXN0aW4vZG9jcy9hdXN0aW5fNTFyMi50eHQ+LgorICAgIAorICAgIGlnbm9yZXNoZWxsIC0gc2V0IHRvIFRydWUgdG8gaWdub3JlIHNoIHNoZWJhbmdzLiBSZXR1cm4gYW4gZW1wdHkgbGlzdCBpbnN0ZWFkLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgZiA9IGZpbGUocGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBBdCBtb3N0IDgwIGNoYXJhY3RlcnMgaW4gdGhlIGZpcnN0IGxpbmUKKyAgICAgICAgICAgIGhlYWRlciA9IGYucmVhZCg4MCkuc3BsaXRsaW5lcygpWzBdCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIAorICAgICAgICBtID0gX1JFX1NIRUJBTkcuc2VhcmNoKGhlYWRlcikKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgY21kLCBhcmcgPSBtLmdyb3VwKDEsMikKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKToKKyAgICAgICAgICAgICMgS2VlcCB0aGlzIG9uZSwgdGhlIGhnIHNjcmlwdCBmb3IgaW5zdGFuY2UgY29udGFpbnMgYSB3ZWlyZCB3aW5kb3dzCisgICAgICAgICAgICAjIHNoZWJhbmcgcmVmZXJlbmNpbmcgdGhlIGN1cnJlbnQgcHl0aG9uIGluc3RhbGwuCisgICAgICAgICAgICBjbWRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShjbWQpLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGNtZGZpbGUgPT0gJ3B5dGhvbi5leGUnOgorICAgICAgICAgICAgICAgIGNtZCA9ICdweXRob24nCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsaWYgY21kIG5vdCBpbiBfU0hFQkFOR19DTURTOgorICAgICAgICAgICAgcmFpc2UgQ29tbWFuZE5vdEZvdW5kKCdVbmtub3duIGludGVycHJldGVyICIlcyIgcmVmZXJlbmNlZCBpbiAnXAorICAgICAgICAgICAgICAgICdzaGViYW5nJyAlIGhlYWRlcikKKyAgICAgICAgY21kID0gX1NIRUJBTkdfQ01EUy5nZXQoY21kKQorICAgICAgICBpZiBjbWQgaXMgTm9uZSBvciAoaWdub3Jlc2hlbGwgYW5kIGNtZCA9PSAncHlzaCcpOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGlmIGFyZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFtjbWQsIHdpbjMyX3RvX3VuaXhfcGF0aChwYXRoKV0KKyAgICAgICAgcmV0dXJuIFtjbWQsIGFyZywgd2luMzJfdG9fdW5peF9wYXRoKHBhdGgpXQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGlmICBlLmVycm5vIT1lcnJuby5FTk9FTlQgYW5kIFwKKyAgICAgICAgICAgIChlLmVycm5vIT1lcnJuby5FUEVSTSBhbmQgbm90IG9zLnBhdGguaXNkaXIocGF0aCkpOiAjIE9wZW5pbmcgYSBkaXJlY3RvcnkgcmFpc2VzIEVQRVJNCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gW10KKyAgICAgICAgCitkZWYgd2luMzJfZmluZF9pbl9wYXRoKG5hbWUsIHBhdGgpOgorICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgc3RyKToKKyAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKKyAgICAgICAgCisgICAgZXh0cyA9IG9zLmVudmlyb24uZ2V0KCdQQVRIRVhUJywgJycpLmxvd2VyKCkuc3BsaXQob3MucGF0aHNlcCkKKyAgICBmb3IgcCBpbiBwYXRoOgorICAgICAgICBwX25hbWUgPSBvcy5wYXRoLmpvaW4ocCwgbmFtZSkKKyAgICAgICAgCisgICAgICAgIHByZWZpeCA9IHJlc29sdmVfc2hlYmFuZyhwX25hbWUpCisgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgIHJldHVybiBwcmVmaXgKKyAgICAgICAgICAgIAorICAgICAgICBmb3IgZXh0IGluIGV4dHM6ICAgIAorICAgICAgICAgICAgcF9uYW1lX2V4dCA9IHBfbmFtZSArIGV4dAorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocF9uYW1lX2V4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFt3aW4zMl90b191bml4X3BhdGgocF9uYW1lX2V4dCldCisgICAgcmV0dXJuIFtdCisKK2NsYXNzIFRyYXBzKGRpY3QpOgorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5IG5vdCBpbiAoJ0VYSVQnLCk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICAgICAgc3VwZXIoVHJhcHMsIHNlbGYpLl9fc2V0aXRlbV9fKGtleSwgdmFsdWUpCisKKyMgSUZTIHdoaXRlIHNwYWNlcyBjaGFyYWN0ZXIgY2xhc3MKK19JRlNfV0hJVEVTUEFDRVMgPSAoJyAnLCAnXHQnLCAnXG4nKQorCitjbGFzcyBFbnZpcm9ubWVudDoKKyAgICAiIiJFbnZpcm9ubWVudCBob2xkcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGV4cG9ydCB0YWJsZSwgZnVuY3Rpb24gCisgICAgZGVmaW5pdGlvbnMgYW5kIHdoYXRldmVyIGlzIGRlZmluZWQgaW4gMi4xMiAiU2hlbGwgRXhlY3V0aW9uIEVudmlyb25tZW50IiwKKyAgICByZWRpcmVjdGlvbiBleGNlcHRlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHdkKToKKyAgICAgICAgc2VsZi5fb3B0ID0gc2V0KCkgICAgICAgI1NoZWxsIG9wdGlvbnMKKyAgICAgICAgCisgICAgICAgIHNlbGYuX2Z1bmN0aW9ucyA9IHt9ICAgICAgICAKKyAgICAgICAgc2VsZi5fZW52ID0geyc/JzogJzAnLCAnIyc6ICcwJ30KKyAgICAgICAgc2VsZi5fZXhwb3J0ZWQgPSBzZXQoWworICAgICAgICAgICAgJ0hPTUUnLCAnSUZTJywgJ1BBVEgnCisgICAgICAgIF0pCisgICAgICAgIAorICAgICAgICAjIFNldCBlbnZpcm9ubWVudCB2YXJzIHdpdGggc2lkZS1lZmZlY3RzCisgICAgICAgIHNlbGYuX2lmc193cyA9IE5vbmUgICAgICMgU2V0IG9mIElGUyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi5faWZzX3JlID0gTm9uZSAgICAgIyBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBzcGxpdCBiZXR3ZWVuIHdvcmRzIHVzaW5nIElGUyBjbGFzc2VzCisgICAgICAgIHNlbGZbJ0lGUyddID0gJycuam9pbihfSUZTX1dISVRFU1BBQ0VTKSAjRGVmYXVsdCBlbnZpcm9ubWVudCB2YWx1ZXMKKyAgICAgICAgc2VsZlsnUFdEJ10gPSBwd2QKKyAgICAgICAgc2VsZi50cmFwcyA9IFRyYXBzKCkKKyAgICAgICAgCisgICAgZGVmIGNsb25lKHNlbGYsIHN1YnNoZWxsPUZhbHNlKToKKyAgICAgICAgZW52ID0gRW52aXJvbm1lbnQoc2VsZlsnUFdEJ10pCisgICAgICAgIGVudi5fb3B0ID0gc2V0KHNlbGYuX29wdCkKKyAgICAgICAgZm9yIGssdiBpbiBzZWxmLmdldF92YXJpYWJsZXMoKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGsgaW4gc2VsZi5fZXhwb3J0ZWQ6CisgICAgICAgICAgICAgICAgZW52LmV4cG9ydChrLHYpCisgICAgICAgICAgICBlbGlmIHN1YnNoZWxsOgorICAgICAgICAgICAgICAgIGVudltrXSA9IHYKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgc3Vic2hlbGw6CisgICAgICAgICAgICBlbnYuX2Z1bmN0aW9ucyA9IGRpY3Qoc2VsZi5fZnVuY3Rpb25zKQorICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBlbnYgICAgICAgIAorICAgICAgICAKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5IGluICgnQCcsICcqJywgJy0nLCAnJCcpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignJXMgaXMgbm90IGltcGxlbWVudGVkJyAlIHJlcHIoa2V5KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VudltrZXldCisgICAgICAgIAorICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZ2YWw9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZnZhbAorICAgICAgICAKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIGlmIGtleT09J0lGUyc6CisgICAgICAgICAgICAjIFVwZGF0ZSB0aGUgd2hpdGVzcGFjZS9ub24td2hpdGVzcGFjZSBjbGFzc2VzCisgICAgICAgICAgICBzZWxmLl91cGRhdGVfaWZzKHZhbHVlKQorICAgICAgICBlbGlmIGtleT09J1BXRCc6CisgICAgICAgICAgICBwd2QgPSBvcy5wYXRoLmFic3BhdGgodmFsdWUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihwd2QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhckFzc2lnbm1lbnRFcnJvcignSW52YWxpZCBkaXJlY3RvcnkgJXMnICUgdmFsdWUpCisgICAgICAgICAgICB2YWx1ZSA9IHB3ZAorICAgICAgICBlbGlmIGtleSBpbiAoJz8nLCAnIScpOgorICAgICAgICAgICAgdmFsdWUgPSBzdHIoaW50KHZhbHVlKSkKKyAgICAgICAgc2VsZi5fZW52W2tleV0gPSB2YWx1ZQorICAgICAgICAKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5IGluICgnSUZTJywgJ1BXRCcsICc/Jyk6CisgICAgICAgICAgICByYWlzZSBWYXJBc3NpZ25tZW50RXJyb3IoJyVzIGNhbm5vdCBiZSB1bnNldCcgJSBrZXkpCisgICAgICAgIGRlbCBzZWxmLl9lbnZba2V5XQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5fZW52CisgICAgICAgIAorICAgIGRlZiBzZXRfcG9zaXRpb25hbF9hcmdzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJTZXQgdGhlIGNvbnRlbnQgb2YgJ2FyZ3MnIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgZnJvbSAxIHRvIGxlbihhcmdzKS4KKyAgICAgICAgUmV0dXJuIHByZXZpb3VzIGFyZ3VtZW50IGFzIGEgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBTYXZlIGFuZCByZW1vdmUgcHJldmlvdXMgYXJndW1lbnRzCisgICAgICAgIHByZXZhcmdzID0gW10gICAgICAgIAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX2VudlsnIyddKSk6CisgICAgICAgICAgICBpID0gc3RyKGkrMSkKKyAgICAgICAgICAgIHByZXZhcmdzLmFwcGVuZChzZWxmLl9lbnZbaV0pCisgICAgICAgICAgICBkZWwgc2VsZi5fZW52W2ldCisgICAgICAgIHNlbGYuX2VudlsnIyddID0gJzAnCisgICAgICAgICAgICAgICAgCisgICAgICAgICNTZXQgbmV3IG9uZXMKKyAgICAgICAgZm9yIGksYXJnIGluIGVudW1lcmF0ZShhcmdzKToKKyAgICAgICAgICAgIHNlbGYuX2VudltzdHIoaSsxKV0gPSBzdHIoYXJnKQorICAgICAgICBzZWxmLl9lbnZbJyMnXSA9IHN0cihsZW4oYXJncykpCisgICAgICAgIAorICAgICAgICByZXR1cm4gcHJldmFyZ3MKKyAgICAgICAgCisgICAgZGVmIGdldF9wb3NpdGlvbmFsX2FyZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBbc2VsZi5fZW52W3N0cihpKzEpXSBmb3IgaSBpbiB4cmFuZ2UoaW50KHNlbGYuX2VudlsnIyddKSldCisgICAgICAgIAorICAgIGRlZiBnZXRfdmFyaWFibGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gZGljdChzZWxmLl9lbnYpCisgICAgICAgIAorICAgIGRlZiBleHBvcnQoc2VsZiwga2V5LCB2YWx1ZT1Ob25lKToKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorICAgICAgICBzZWxmLl9leHBvcnRlZC5hZGQoa2V5KQorICAgICAgICAKKyAgICBkZWYgZ2V0X2V4cG9ydGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gWyhrLHNlbGYuX2Vudi5nZXQoaykpIGZvciBrIGluIHNlbGYuX2V4cG9ydGVkXQorICAgICAgICAgICAgCisgICAgZGVmIHNwbGl0X2ZpZWxkcyhzZWxmLCB3b3JkKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2lmc193cyBvciBub3Qgd29yZDoKKyAgICAgICAgICAgIHJldHVybiBbd29yZF0KKyAgICAgICAgcmV0dXJuIHJlLnNwbGl0KHNlbGYuX2lmc19yZSwgd29yZCkKKyAgIAorICAgIGRlZiBfdXBkYXRlX2lmcyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlVwZGF0ZSB0aGUgc3BsaXRfZmllbGRzIHJlbGF0ZWQgdmFyaWFibGVzIHdoZW4gSUZTIGNoYXJhY3RlciBzZXQgaXMKKyAgICAgICAgY2hhbmdlZC4KKyAgICAgICAgIiIiCisgICAgICAgICMgVE9ETzogaGFuZGxlIE5VTEwgSUZTCisgICAgICAgIAorICAgICAgICAjIFNlcGFyYXRlIGNoYXJhY3RlcnMgaW4gd2hpdGVzcGFjZSBhbmQgbm9uLXdoaXRlc3BhY2UKKyAgICAgICAgY2hhcnMgPSBzZXQodmFsdWUpCisgICAgICAgIHdzID0gW2MgZm9yIGMgaW4gY2hhcnMgaWYgYyBpbiBfSUZTX1dISVRFU1BBQ0VTXQorICAgICAgICBud3MgPSBbYyBmb3IgYyBpbiBjaGFycyBpZiBjIG5vdCBpbiBfSUZTX1dISVRFU1BBQ0VTXQorICAgICAgICAKKyAgICAgICAgIyBLZWVwIHdoaXRlc3BhY2VzIGluIGEgc3RyaW5nIGZvciBsZWZ0IGFuZCByaWdodCBzdHJpcHBpbmcKKyAgICAgICAgc2VsZi5faWZzX3dzID0gJycuam9pbih3cykKKyAgICAgICAgCisgICAgICAgICMgQnVpbGQgYSByZWdleHAgdG8gc3BsaXQgZmllbGRzCisgICAgICAgIHRyYWlsaW5nID0gJ1snICsgJycuam9pbihbcmUuZXNjYXBlKGMpIGZvciBjIGluIHdzXSkgKyAnXScKKyAgICAgICAgaWYgbndzOgorICAgICAgICAgICAgIyBGaXJzdCwgdGhlIHNpbmdsZSBub24td2hpdGVzcGFjZSBvY2N1cmVuY2UuCisgICAgICAgICAgICBud3MgPSAnWycgKyAnJy5qb2luKFtyZS5lc2NhcGUoYykgZm9yIGMgaW4gbndzXSkgKyAnXScKKyAgICAgICAgICAgIG53cyA9ICcoPzonICsgdHJhaWxpbmcgKyAnKicgKyBud3MgKyB0cmFpbGluZyArICcqJyArICd8JyArIHRyYWlsaW5nICsgJyspJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGVuIG1peCBhbGwgcGFydHMgd2l0aCBxdWFudGlmaWVycworICAgICAgICAgICAgbndzID0gdHJhaWxpbmcgKyAnKycKKyAgICAgICAgc2VsZi5faWZzX3JlID0gcmUuY29tcGlsZShud3MpCisgICAgICAgCisgICAgZGVmIGhhc19vcHQoc2VsZiwgb3B0LCB2YWw9Tm9uZSk6CisgICAgICAgIHJldHVybiAob3B0LCB2YWwpIGluIHNlbGYuX29wdAorICAgICAgICAKKyAgICBkZWYgc2V0X29wdChzZWxmLCBvcHQsIHZhbD1Ob25lKToKKyAgICAgICAgc2VsZi5fb3B0LmFkZCgob3B0LCB2YWwpKQorICAgICAgICAKKyAgICBkZWYgZmluZF9pbl9wYXRoKHNlbGYsIG5hbWUsIHB3ZD1GYWxzZSk6CisgICAgICAgIHBhdGggPSBzZWxmLl9lbnYuZ2V0KCdQQVRIJywgJycpLnNwbGl0KG9zLnBhdGhzZXApCisgICAgICAgIGlmIHB3ZDoKKyAgICAgICAgICAgIHBhdGhbOjBdID0gW3NlbGZbJ1BXRCddXQorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICByZXR1cm4gd2luMzJfZmluZF9pbl9wYXRoKG5hbWUsIHNlbGYuX2Vudi5nZXQoJ1BBVEgnLCAnJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICAgICAgICAgIAorICAgIGRlZiBkZWZpbmVfZnVuY3Rpb24oc2VsZiwgbmFtZSwgYm9keSk6CisgICAgICAgIGlmIG5vdCBpc19uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignJXMgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZScgJSByZXByKG5hbWUpKQorICAgICAgICBzZWxmLl9mdW5jdGlvbnNbbmFtZV0gPSBib2R5CisgICAgICAgIAorICAgIGRlZiByZW1vdmVfZnVuY3Rpb24oc2VsZiwgbmFtZSk6CisgICAgICAgIGRlbCBzZWxmLl9mdW5jdGlvbnNbbmFtZV0KKyAgICAgICAgCisgICAgZGVmIGlzX2Z1bmN0aW9uKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gbmFtZSBpbiBzZWxmLl9mdW5jdGlvbnMKKyAgICAgICAgCisgICAgZGVmIGdldF9mdW5jdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Z1bmN0aW9ucy5nZXQobmFtZSkKKyAgICAgICAgCisgICAgICAgCituYW1lX2NoYXJzZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODlfJworbmFtZV9jaGFyc2V0ID0gZGljdCh6aXAobmFtZV9jaGFyc2V0LG5hbWVfY2hhcnNldCkpCisgICAgICAgICAgIAorZGVmIG1hdGNoX25hbWUocyk6CisgICAgIiIiUmV0dXJuIHRoZSBsZW5ndGggaW4gY2hhcmFjdGVycyBvZiB0aGUgbG9uZ2VzdCBwcmVmaXggbWFkZSBvZiBuYW1lCisgICAgYWxsb3dlZCBjaGFyYWN0ZXJzIGluIHMuCisgICAgIiIiCisgICAgZm9yIGksYyBpbiBlbnVtZXJhdGUocyk6CisgICAgICAgIGlmIGMgbm90IGluIG5hbWVfY2hhcnNldDoKKyAgICAgICAgICAgIHJldHVybiBzWzppXQorICAgIHJldHVybiBzCisgICAgCitkZWYgaXNfbmFtZShzKToKKyAgICByZXR1cm4gbGVuKFtjIGZvciBjIGluIHMgaWYgYyBub3QgaW4gbmFtZV9jaGFyc2V0XSk8PTAKKyAgICAKK2RlZiBpc19zcGVjaWFsX3BhcmFtKGMpOgorICAgIHJldHVybiBsZW4oYyk9PTEgYW5kIGMgaW4gKCdAJywnKicsJyMnLCc/JywnLScsJyQnLCchJywnMCcpCisgICAgCitkZWYgdXRpbGl0eV9ub3RfaW1wbGVtZW50ZWQobmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyB1dGlsaXR5IGlzIG5vdCBpbXBsZW1lbnRlZCcgJSBuYW1lKQorICAgIAorCitjbGFzcyBVdGlsaXR5OgorICAgICIiIkRlZmluZSB1dGlsaXRpZXMgcHJvcGVydGllczoKKyAgICBmdW5jIC0tIHV0aWxpdHkgY2FsbGFibGUuIFNlZSBidWlsdGluIG1vZHVsZSBmb3IgdXRpbGl0eSBzYW1wbGVzLgorICAgIGlzX3NwZWNpYWwgLS0gc2VlIFhDVSAyLjguCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsIGlzX3NwZWNpYWw9MCk6CisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgc2VsZi5pc19zcGVjaWFsID0gYm9vbChpc19zcGVjaWFsKQorCisKK2RlZiBlbmNvZGVhcmdzKGFyZ3MpOgorICAgIGRlZiBlbmNvZGVhcmcocyk6CisgICAgICAgIGxpbmVzID0gYmFzZTY0LmVuY29kZXN0cmluZyhzKQorICAgICAgICBsaW5lcyA9IFtsLnNwbGl0bGluZXMoKVswXSBmb3IgbCBpbiBsaW5lc10KKyAgICAgICAgcmV0dXJuICcnLmpvaW4obGluZXMpCisKKyAgICBzID0gcGlja2xlLmR1bXBzKGFyZ3MpCisgICAgcmV0dXJuIGVuY29kZWFyZyhzKQorCitkZWYgZGVjb2RlYXJncyhzKToKKyAgICBzID0gYmFzZTY0LmRlY29kZXN0cmluZyhzKQorICAgIHJldHVybiBwaWNrbGUubG9hZHMocykKKyAgICAKKworY2xhc3MgR2xvYkVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBPcHRpb25zOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBUcnVlIGlmIE1lcmN1cmlhbCBvcGVyYXRlcyB3aXRoIGJpbmFyeSBzdHJlYW1zCisgICAgICAgIHNlbGYuaGdiaW5hcnkgPSBUcnVlCisKK2NsYXNzIEludGVycHJldGVyOgorICAgICMgSW1wbGVtZW50YXRpb24gaXMgdmVyeSBiYXNpYzogdGhlIGV4ZWN1dGUoKSBtZXRob2QganVzdCBtYWtlcyBhIERGUyBvbiB0aGUKKyAgICAjIEFTVCBhbmQgZXhlY3V0ZSBub2RlcyBvbmUgYnkgb25lLiBOb2RlcyBhcmUgdHVwbGUgKG5hbWUsb2JqKSB3aGVyZSBuYW1lCisgICAgIyBpcyBhIHN0cmluZyBpZGVudGlmaWVyIGFuZCBvYmogdGhlIEFTVCBlbGVtZW50IHJldHVybmVkIGJ5IHRoZSBwYXJzZXIuCisgICAgIworICAgICMgSGFuZGxlciBhcmUgbmFtZWQgYWZ0ZXIgdGhlIG5vZGUgaWRlbnRpZmllcnMuCisgICAgIyBUT0RPOiBjaGVjayBub2RlIG5hbWVzIGFuZCByZW1vdmUgdGhlIHN3aXRjaCBpbiBleGVjdXRlIHdpdGggc29tZQorICAgICMgZHluYW1pYyBnZXRhdHRyKCkgY2FsbCB0byBmaW5kIG5vZGUgaGFuZGxlcnMuCisgICAgIiIiU2hlbGwgaW50ZXJwcmV0ZXIuCisgICAgCisgICAgVGhlIGZvbGxvd2luZyBkZWJ1Z2dpbmcgZmxhZ3MgY2FuIGJlIHBhc3NlZDoKKyAgICBkZWJ1Zy1wYXJzaW5nIC0gZW5hYmxlIFBMWSBkZWJ1Z2dpbmcuCisgICAgZGVidWctdHJlZSAtIHByaW50IHRoZSBnZW5lcmF0ZWQgQVNULgorICAgIGRlYnVnLWNtZCAtIHRyYWNlIGNvbW1hbmQgZXhlY3V0aW9uIGJlZm9yZSB3b3JkIGV4cGFuc2lvbiwgcGx1cyBleGl0IHN0YXR1cy4KKyAgICBkZWJ1Zy11dGlsaXR5IC0gdHJhY2UgdXRpbGl0eSBleGVjdXRpb24uCisgICAgIiIiCisgICAgCisgICAgIyBMaXN0IHN1cHBvcnRlZCBjb21tYW5kcy4KKyAgICBDT01NQU5EUyA9IHsKKyAgICAgICAgJ2NhdCc6ICAgICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2NhdCwpLAorICAgICAgICAnY2QnOiAgICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9jZCwpLAorICAgICAgICAnOic6ICAgICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9jb2xvbiwpLAorICAgICAgICAnZWNobyc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9lY2hvKSwKKyAgICAgICAgJ2Vudic6ICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZW52KSwKKyAgICAgICAgJ2V4aXQnOiAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZXhpdCksCisgICAgICAgICdleHBvcnQnOiAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX2V4cG9ydCwgICAgIGlzX3NwZWNpYWw9MSksCisgICAgICAgICdlZ3JlcCc6ICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2VncmVwKSwKKyAgICAgICAgJ2ZncmVwJzogICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZmdyZXApLAorICAgICAgICAnZ3VuemlwJzogICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9ndW56aXApLAorICAgICAgICAna2lsbCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9raWxsKSwKKyAgICAgICAgJ21rZGlyJzogICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfbWtkaXIpLAorICAgICAgICAnbmV0c3RhdCc6ICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9uZXRzdGF0KSwKKyAgICAgICAgJ3ByaW50Zic6ICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfcHJpbnRmKSwKKyAgICAgICAgJ3B3ZCc6ICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfcHdkKSwKKyAgICAgICAgJ3JldHVybic6ICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fcmV0dXJuLCAgICAgaXNfc3BlY2lhbD0xKSwKKyAgICAgICAgJ3NlZCc6ICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfc2VkLCksCisgICAgICAgICdzZXQnOiAgICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3NldCwpLAorICAgICAgICAnc2hpZnQnOiAgICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl9zaGlmdCwpLAorICAgICAgICAnc2xlZXAnOiAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9zbGVlcCwpLAorICAgICAgICAnc29ydCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9zb3J0LCksCisgICAgICAgICd0cmFwJzogICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3RyYXAsICAgICAgIGlzX3NwZWNpYWw9MSksCisgICAgICAgICd0cnVlJzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X3RydWUpLAorICAgICAgICAndW5zZXQnOiAgICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl91bnNldCwgICAgICBpc19zcGVjaWFsPTEpLAorICAgICAgICAnd2FpdCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl93YWl0LCAgICAgICBpc19zcGVjaWFsPTEpLAorICAgIH0KKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHdkLCBkZWJ1Z2ZsYWdzID0gW10sIGVudj1Ob25lLCByZWRpcnM9Tm9uZSwgc3RkaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBvcHRzPU9wdGlvbnMoKSk6CisgICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAgICBpZiBzZWxmLl9lbnYgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2VudiA9IEVudmlyb25tZW50KHB3ZCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSB7fQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX3JlZGlycyA9IHJlZGlycworICAgICAgICBzZWxmLl9jbG9zZV9yZWRpcnMgPSBGYWxzZQorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fcmVkaXJzIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIHN0ZGluID0gc3lzLnN0ZGluCisgICAgICAgICAgICBpZiBzdGRvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBpZiBzdGRlcnIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzdGRlcnIgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICBzdGRpbiA9IEZpbGVXcmFwcGVyKCdyJywgc3RkaW4sIEZhbHNlKQorICAgICAgICAgICAgc3Rkb3V0ID0gRmlsZVdyYXBwZXIoJ3cnLCBzdGRvdXQsIEZhbHNlKQorICAgICAgICAgICAgc3RkZXJyID0gRmlsZVdyYXBwZXIoJ3cnLCBzdGRlcnIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fcmVkaXJzID0gUmVkaXJlY3Rpb25zKHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3JlZGlycyA9IFRydWUKKyAgICAgICAgICAgIAorICAgICAgICBzZWxmLl9kZWJ1Z2ZsYWdzID0gbGlzdChkZWJ1Z2ZsYWdzKQorICAgICAgICBzZWxmLl9sb2dmaWxlID0gc3lzLnN0ZGVycgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0cworICAgICAgICAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIk11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIGludGVycHJldGVyIGlzIG5vIGxvbmdlciB1c2VkLiIiIgorICAgICAgICBzY3JpcHQgPSBzZWxmLl9lbnYudHJhcHMuZ2V0KCdFWElUJykKKyAgICAgICAgaWYgc2NyaXB0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0PXNjcmlwdCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc2VsZi5fcmVkaXJzIGlzIG5vdCBOb25lIGFuZCBzZWxmLl9jbG9zZV9yZWRpcnM6CisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcmVkaXJzID0gTm9uZQorICAgICAgICAgICAgCisgICAgZGVmIGxvZyhzZWxmLCBzKToKKyAgICAgICAgc2VsZi5fbG9nZmlsZS53cml0ZShzKQorICAgICAgICBzZWxmLl9sb2dmaWxlLmZsdXNoKCkKKyAgICAgICAgICAgIAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW52W2tleV0KKyAgICAgICAgCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBzZWxmLl9lbnZba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMKKworICAgIGRlZiByZWRpcmVjdChzZWxmLCByZWRpcnMsIGlvcyk6CisgICAgICAgIGRlZiBhZGRfcmVkaXIoaW8pOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpbywgcHlzaHlhY2MuSU9SZWRpcmVjdCk6CisgICAgICAgICAgICAgICAgcmVkaXJzLmFkZChzZWxmLCBpby5vcCwgaW8uZmlsZW5hbWUsIGlvLmlvX251bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVkaXJzLmFkZF9oZXJlX2RvY3VtZW50KHNlbGYsIGlvLm5hbWUsIGlvLmNvbnRlbnQsIGlvLmlvX251bWJlcikKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIG1hcChhZGRfcmVkaXIsIGlvcykKKyAgICAgICAgcmV0dXJuIHJlZGlycworICAgICAgICAgICAgCisgICAgZGVmIGV4ZWN1dGVfc2NyaXB0KHNlbGYsIHNjcmlwdD1Ob25lLCBhc3Q9Tm9uZSwgc291cmNlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cGF0aD1Ob25lKToKKyAgICAgICAgIiIiSWYgc2NyaXB0IGlzIG5vdCBOb25lLCBwYXJzZSB0aGUgaW5wdXQuIE90aGVyd2lzZSB0YWtlcyB0aGUgc3VwcGxpZWQKKyAgICAgICAgQVNULiBUaGVuIGV4ZWN1dGUgdGhlIEFTVC4KKyAgICAgICAgUmV0dXJuIHRoZSBzY3JpcHQgZXhpdCBzdGF0dXMuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzY3JpcHRwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2VudlsnMCddID0gb3MucGF0aC5hYnNwYXRoKHNjcmlwdHBhdGgpCisKKyAgICAgICAgICAgIGlmIHNjcmlwdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBkZWJ1Z19wYXJzaW5nID0gKCdkZWJ1Zy1wYXJzaW5nJyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzKSAgICAKKyAgICAgICAgICAgICAgICBjbWRzLCBzY3JpcHQgPSBweXNoeWFjYy5wYXJzZShzY3JpcHQsIFRydWUsIGRlYnVnX3BhcnNpbmcpCisgICAgICAgICAgICAgICAgaWYgJ2RlYnVnLXRyZWUnIGluIHNlbGYuX2RlYnVnZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgIHB5c2h5YWNjLnByaW50X2NvbW1hbmRzKGNtZHMsIHNlbGYuX2xvZ2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2ZpbGUuZmx1c2goKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWRzLCBzY3JpcHQgPSBhc3QsICcnICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdHVzID0gMAorICAgICAgICAgICAgZm9yIGNtZCBpbiBjbWRzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGNtZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhpdFNpZ25hbCBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBzb3VyY2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gaW50KGUuYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAgICAgICAgIGV4Y2VwdCBTaGVsbEVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9lbnZbJz8nXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gc2VsZi5fZGVidWdmbGFncyBvciAnZGVidWctY21kJyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygncmV0dXJuY29kZSAnICsgc3RyKHN0YXR1cykrICdcbicpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgIGV4Y2VwdCBDb21tYW5kTm90Rm91bmQgYXMgZToKKyAgICAgICAgICAgIHByaW50ID4+c2VsZi5fcmVkaXJzLnN0ZGVyciwgc3RyKGUpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICMgQ29tbWFuZCBub3QgZm91bmQgYnkgbm9uLWludGVyYWN0aXZlIHNoZWxsCisgICAgICAgICAgICAjIHJldHVybiAxMjcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBSZWRpcmVjdGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAjIFRPRE86IHNob3VsZCBiZSBoYW5kbGVkIGRlcGVuZGluZyBvbiB0aGUgdXRpbGl0eSBzdGF0dXMKKyAgICAgICAgICAgIHByaW50ID4+c2VsZi5fcmVkaXJzLnN0ZGVyciwgc3RyKGUpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICMgQ29tbWFuZCBub3QgZm91bmQgYnkgbm9uLWludGVyYWN0aXZlIHNoZWxsCisgICAgICAgICAgICAjIHJldHVybiAxMjcKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgZG90Y29tbWFuZChzZWxmLCBlbnYsIGFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxFcnJvcignLiBleHBlY3RzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCcpCisgICAgICAgIHBhdGggPSBhcmdzWzBdCisgICAgICAgIGlmICcvJyBub3QgaW4gcGF0aDoKKyAgICAgICAgICAgIGZvdW5kID0gZW52LmZpbmRfaW5fcGF0aChhcmdzWzBdLCBUcnVlKQorICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgcGF0aCA9IGZvdW5kWzBdCisgICAgICAgIHNjcmlwdCA9IGZpbGUocGF0aCkucmVhZCgpCisgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGVfc2NyaXB0KHNjcmlwdD1zY3JpcHQsIHNvdXJjZWQ9VHJ1ZSkKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIHRva2VuLCByZWRpcnM9Tm9uZSk6CisgICAgICAgICIiIkV4ZWN1dGUgYW5kIEFTVCBzdWJ0cmVlIHdpdGggc3VwcGxpZWQgcmVkaXJlY3Rpb25zIG92ZXJyaWRpbmcgZGVmYXVsdAorICAgICAgICBpbnRlcnByZXRlciBvbmVzLgorICAgICAgICBSZXR1cm4gdGhlIGV4aXQgc3RhdHVzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHRva2VuOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIAorICAgICAgICBpZiByZWRpcnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJlZGlycyA9IHNlbGYuX3JlZGlycworICAgICAgICAgICAgCisgICAgICAgIGlmIGlzaW5zdGFuY2UodG9rZW4sIGxpc3QpOgorICAgICAgICAgICAgIyBDb21tYW5kcyBzZXF1ZW5jZQorICAgICAgICAgICAgcmVzID0gMAorICAgICAgICAgICAgZm9yIHQgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5leGVjdXRlKHQsIHJlZGlycykKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICB0eXBlLCB2YWx1ZSA9IHRva2VuCisgICAgICAgIHN0YXR1cyA9IDAKKyAgICAgICAgaWYgdHlwZT09J3NpbXBsZV9jb21tYW5kJzoKKyAgICAgICAgICAgIHJlZGlyc19jb3B5ID0gcmVkaXJzLmNsb25lKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRPRE86IGRlZmluZSBhbmQgaGFuZGxlIGNvbW1hbmQgcmV0dXJuIHZhbHVlcworICAgICAgICAgICAgICAgICMgVE9ETzogaW1wbGVtZW50IHNldCAtZQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfc2ltcGxlX2NvbW1hbmQodmFsdWUsIHJlZGlyc19jb3B5KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICByZWRpcnNfY29weS5jbG9zZSgpCisgICAgICAgIGVsaWYgdHlwZT09J3BpcGVsaW5lJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfcGlwZWxpbmUodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0nYW5kX29yJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfYW5kX29yKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2Zvcl9jbGF1c2UnOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9mb3JfY2xhdXNlKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J3doaWxlX2NsYXVzZSc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX3doaWxlX2NsYXVzZSh2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdmdW5jdGlvbl9kZWZpbml0aW9uJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfZnVuY3Rpb25fZGVmaW5pdGlvbih2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdicmFjZV9ncm91cCc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX2JyYWNlX2dyb3VwKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2lmX2NsYXVzZSc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX2lmX2NsYXVzZSh2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdzdWJzaGVsbCc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLnN1YnNoZWxsKGFzdD12YWx1ZS5jbWRzLCByZWRpcnM9cmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdhc3luYyc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9hc3luY2xpc3QodmFsdWUpCisgICAgICAgIGVsaWYgdHlwZT09J3JlZGlyZWN0X2xpc3QnOgorICAgICAgICAgICAgcmVkaXJzX2NvcHkgPSBzZWxmLnJlZGlyZWN0KHJlZGlycy5jbG9uZSgpLCB2YWx1ZS5yZWRpcnMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKHZhbHVlLmNtZCwgcmVkaXJzX2NvcHkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlZGlyc19jb3B5LmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Vuc3VwcG9ydGVkIHRva2VuIHR5cGUgJyArIHR5cGUpCisKKyAgICAgICAgaWYgc3RhdHVzIDwgMDoKKyAgICAgICAgICAgIHN0YXR1cyA9IDI1NQorICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfaWZfY2xhdXNlKHNlbGYsIGlmX2NsYXVzZSwgcmVkaXJzKToKKyAgICAgICAgY29uZF9zdGF0dXMgPSBzZWxmLmV4ZWN1dGUoaWZfY2xhdXNlLmNvbmQsIHJlZGlycykKKyAgICAgICAgaWYgY29uZF9zdGF0dXM9PTA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRlKGlmX2NsYXVzZS5pZl9jbWRzLCByZWRpcnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRlKGlmX2NsYXVzZS5lbHNlX2NtZHMsIHJlZGlycykKKyAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9icmFjZV9ncm91cChzZWxmLCBncm91cCwgcmVkaXJzKToKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBmb3IgY21kIGluIGdyb3VwLmNtZHM6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kLCByZWRpcnMpCisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9mdW5jdGlvbl9kZWZpbml0aW9uKHNlbGYsIGZ1bmRlZiwgcmVkaXJzKToKKyAgICAgICAgc2VsZi5fZW52LmRlZmluZV9mdW5jdGlvbihmdW5kZWYubmFtZSwgZnVuZGVmLmJvZHkpCisgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfd2hpbGVfY2xhdXNlKHNlbGYsIHdoaWxlX2NsYXVzZSwgcmVkaXJzKToKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgY29uZF9zdGF0dXMgPSAwCisgICAgICAgICAgICBmb3IgY29uZCBpbiB3aGlsZV9jbGF1c2UuY29uZGl0aW9uOgorICAgICAgICAgICAgICAgIGNvbmRfc3RhdHVzID0gc2VsZi5leGVjdXRlKGNvbmQsIHJlZGlycykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGNvbmRfc3RhdHVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgY21kIGluIHdoaWxlX2NsYXVzZS5jbWRzOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShjbWQsIHJlZGlycykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAgICAgCisgICAgZGVmIF9leGVjdXRlX2Zvcl9jbGF1c2Uoc2VsZiwgZm9yX2NsYXVzZSwgcmVkaXJzKToKKyAgICAgICAgaWYgbm90IGlzX25hbWUoZm9yX2NsYXVzZS5uYW1lKToKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoJyVzIGlzIG5vdCBhIHZhbGlkIG5hbWUnICUgcmVwcihmb3JfY2xhdXNlLm5hbWUpKQorICAgICAgICBpdGVtcyA9IG1hcHBlbmQoc2VsZi5leHBhbmRfdG9rZW4sIGZvcl9jbGF1c2UuaXRlbXMpCisgICAgICAgIAorICAgICAgICBzdGF0dXMgPSAwICAgIAorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIHNlbGYuX2Vudltmb3JfY2xhdXNlLm5hbWVdID0gaXRlbQorICAgICAgICAgICAgZm9yIGNtZCBpbiBmb3JfY2xhdXNlLmNtZHM6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGNtZCwgcmVkaXJzKQorICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfYW5kX29yKHNlbGYsIG9yX2FuZCwgcmVkaXJzKToKKyAgICAgICAgcmVzID0gc2VsZi5leGVjdXRlKG9yX2FuZC5sZWZ0LCByZWRpcnMpICAgICAgICAKKyAgICAgICAgaWYgKG9yX2FuZC5vcD09JyYmJyBhbmQgcmVzPT0wKSBvciAob3JfYW5kLm9wIT0nJiYnIGFuZCByZXMhPTApOgorICAgICAgICAgICAgcmVzID0gc2VsZi5leGVjdXRlKG9yX2FuZC5yaWdodCwgcmVkaXJzKQorICAgICAgICByZXR1cm4gcmVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfcGlwZWxpbmUoc2VsZiwgcGlwZWxpbmUsIHJlZGlycyk6ICAgICAgICAgICAgCisgICAgICAgIGlmIGxlbihwaXBlbGluZS5jb21tYW5kcyk9PTE6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUocGlwZWxpbmUuY29tbWFuZHNbMF0sIHJlZGlycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRXhlY3V0ZSBhbGwgY29tbWFuZHMgb25lIGFmdGVyIHRoZSBvdGhlcgorICAgICAgICAgICAgc3RhdHVzID0gMAorICAgICAgICAgICAgaW5wYXRoLCBvdXRwYXRoID0gTm9uZSwgTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgQ29tbWFuZHMgaW5wdXRzIGFuZCBvdXRwdXRzIGNhbm5vdCByZWFsbHkgYmUgcGx1Z2dlZCBhcyBkb25lCisgICAgICAgICAgICAgICAgIyBieSBhIHJlYWwgc2hlbGwuIFJ1biBjb21tYW5kcyBzZXF1ZW50aWFsbHkgYW5kIGNoYWluIHRoZWlyCisgICAgICAgICAgICAgICAgIyBpbnB1dC9vdXRwdXQgdGhyb3VnaHQgdGVtcG9yYXJ5IGZpbGVzLgorICAgICAgICAgICAgICAgIHRtcGZkLCBpbnBhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgICAgICAgICBvcy5jbG9zZSh0bXBmZCkKKyAgICAgICAgICAgICAgICB0bXBmZCwgb3V0cGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHRtcGZkKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlucGF0aCA9IHdpbjMyX3RvX3VuaXhfcGF0aChpbnBhdGgpCisgICAgICAgICAgICAgICAgb3V0cGF0aCA9IHdpbjMyX3RvX3VuaXhfcGF0aChvdXRwYXRoKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciBpLCBjbWQgaW4gZW51bWVyYXRlKHBpcGVsaW5lLmNvbW1hbmRzKToKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9yZWRpcnMgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpIT0wOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcmVkaXJzLmFkZChzZWxmLCAnPCcsIGlucGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkhPWxlbihwaXBlbGluZS5jb21tYW5kcyktMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3JlZGlycy5hZGQoc2VsZiwgJz4nLCBvdXRwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kLCBjYWxsX3JlZGlycykKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGFpbiBpbnB1dHMvb3V0cHV0cworICAgICAgICAgICAgICAgICAgICAgICAgaW5wYXRoLCBvdXRwYXRoID0gb3V0cGF0aCwgaW5wYXRoCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3JlZGlycy5jbG9zZSgpICAgICAgICAgICAgCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIGlucGF0aDogb3MucmVtb3ZlKGlucGF0aCkKKyAgICAgICAgICAgICAgICBpZiBvdXRwYXRoOiBvcy5yZW1vdmUob3V0cGF0aCkKKyAgICAgICAgCisgICAgICAgIGlmIHBpcGVsaW5lLnJldmVyc2Vfc3RhdHVzOgorICAgICAgICAgICAgc3RhdHVzID0gaW50KG5vdCBzdGF0dXMpCisgICAgICAgIHNlbGYuX2VudlsnPyddID0gc3RhdHVzCisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgCisgICAgZGVmIF9leGVjdXRlX2Z1bmN0aW9uKHNlbGYsIG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsICpvdGhlcnMpOgorICAgICAgICBhc3NlcnQgaW50ZXJwIGlzIHNlbGYKKyAgICAgICAgCisgICAgICAgIGZ1bmMgPSBlbnYuZ2V0X2Z1bmN0aW9uKG5hbWUpCisgICAgICAgICNTZXQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCisgICAgICAgIHByZXZhcmdzID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmV2YXJncyA9IGVudi5zZXRfcG9zaXRpb25hbF9hcmdzKGFyZ3MpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVkaXJzID0gUmVkaXJlY3Rpb25zKHN0ZGluLmR1cCgpLCBzdGRvdXQuZHVwKCksIHN0ZGVyci5kdXAoKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShmdW5jLCByZWRpcnMpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgcmVkaXJzLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSZXR1cm5TaWduYWwgYXMgZToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBpbnQoZS5hcmdzWzBdKQorICAgICAgICAgICAgICAgIGVudlsnPyddID0gc3RhdHVzCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjUmVzZXQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCisgICAgICAgICAgICBpZiBwcmV2YXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBlbnYuc2V0X3Bvc2l0aW9uYWxfYXJncyhwcmV2YXJncykKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfc2ltcGxlX2NvbW1hbmQoc2VsZiwgdG9rZW4sIHJlZGlycyk6CisgICAgICAgICIiIkNhbiByYWlzZSBSZXR1cm5TaWduYWwgd2hlbiByZXR1cm4gYnVpbHRpbiBpcyBjYWxsZWQsIEV4aXRTaWduYWwgd2hlbgorICAgICAgICBleGl0IGlzIGNhbGxlZCwgYW5kIG90aGVyIHNoZWxsIGV4Y2VwdGlvbnMgdXBvbiBidWlsdGluIGZhaWx1cmVzLgorICAgICAgICAiIiIKKyAgICAgICAgZGVidWdfY29tbWFuZCA9ICdkZWJ1Zy1jbWQnIGluIHNlbGYuX2RlYnVnZmxhZ3MKKyAgICAgICAgaWYgZGVidWdfY29tbWFuZDoKKyAgICAgICAgICAgIHNlbGYubG9nKCd3b3JkJyArIHJlcHIodG9rZW4ud29yZHMpICsgJ1xuJykKKyAgICAgICAgICAgIHNlbGYubG9nKCdhc3NpZ25zJyArIHJlcHIodG9rZW4uYXNzaWducykgKyAnXG4nKQorICAgICAgICAgICAgc2VsZi5sb2coJ3JlZGlycycgKyByZXByKHRva2VuLnJlZGlycykgKyAnXG4nKQorICAgICAgICAKKyAgICAgICAgaXNfc3BlY2lhbCA9IE5vbmUKKyAgICAgICAgZW52ID0gc2VsZi5fZW52CisgICAgICAgIAorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdvcmQgZXhwYW5zaW9uCisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgICAgIGZvciB3b3JkIGluIHRva2VuLndvcmRzOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhcmdzICs9IHNlbGYuZXhwYW5kX3Rva2VuKHdvcmQpCisgICAgICAgICAgICAgICAgaWYgaXNfc3BlY2lhbCBpcyBOb25lIGFuZCBhcmdzOgorICAgICAgICAgICAgICAgICAgICBpc19zcGVjaWFsID0gZW52LmlzX2Z1bmN0aW9uKGFyZ3NbMF0pIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmdzWzBdIGluIHNlbGYuQ09NTUFORFMgYW5kIHNlbGYuQ09NTUFORFNbYXJnc1swXV0uaXNfc3BlY2lhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgZGVidWdfY29tbWFuZDoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZygnX2V4ZWN1dGVfc2ltcGxlX2NvbW1hbmQnICsgc3RyKGFyZ3MpICsgJ1xuJykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgICAgICMgUmVkaXJlY3Rpb25zIGhhcHBlbiBpcyBhIHN1YnNoZWxsCisgICAgICAgICAgICAgICAgcmVkaXJzID0gcmVkaXJzLmNsb25lKCkKKyAgICAgICAgICAgIGVsaWYgbm90IGlzX3NwZWNpYWw6CisgICAgICAgICAgICAgICAgZW52ID0gc2VsZi5fZW52LmNsb25lKCkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgIyBSZWRpcmVjdGlvbnMKKyAgICAgICAgICAgIHNlbGYucmVkaXJlY3QocmVkaXJzLCB0b2tlbi5yZWRpcnMpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAjIFZhcmlhYmxlcyBhc3NpZ25tZW50cworICAgICAgICAgICAgcmVzID0gMAorICAgICAgICAgICAgZm9yIHR5cGUsKGssdikgaW4gdG9rZW4uYXNzaWduczoKKyAgICAgICAgICAgICAgICBzdGF0dXMsIGV4cGFuZGVkID0gc2VsZi5leHBhbmRfdmFyaWFibGUoKGssdikpCisgICAgICAgICAgICAgICAgaWYgc3RhdHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBzdGF0dXMKKyAgICAgICAgICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgICAgICAgICBlbnYuZXhwb3J0KGssIGV4cGFuZGVkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVudltrXSA9IGV4cGFuZGVkCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBhcmdzIGFuZCBhcmdzWzBdIGluICgnLicsICdzb3VyY2UnKToKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLmRvdGNvbW1hbmQoZW52LCBhcmdzWzE6XSkKKyAgICAgICAgICAgIGVsaWYgYXJnczoKKyAgICAgICAgICAgICAgICBpZiBhcmdzWzBdIGluIHNlbGYuQ09NTUFORFM6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLkNPTU1BTkRTW2FyZ3NbMF1dCisgICAgICAgICAgICAgICAgZWxpZiBlbnYuaXNfZnVuY3Rpb24oYXJnc1swXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBVdGlsaXR5KHNlbGYuX2V4ZWN1dGVfZnVuY3Rpb24sIGlzX3NwZWNpYWw9VHJ1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgJy8nIGluIGFyZ3NbMF0ucmVwbGFjZSgnXFwnLCAnLycpOgorICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gZW52LmZpbmRfaW5fcGF0aChhcmdzWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNtZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IHRlc3QgZXJyb3IgY29kZSBvbiB1bmtub3duIGNvbW1hbmQgPT4gMTI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29tbWFuZE5vdEZvdW5kKCdVbmtub3duIGNvbW1hbmQ6ICIlcyInICUgYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSGFuZGxlIGNvbW1hbmRzIGxpa2UgJy9jeWdkcml2ZS9jL2Zvby5iYXQnCisgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBjeWd3aW5fdG9fd2luZG93c19wYXRoKGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY21kKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21tYW5kTm90Rm91bmQoJyVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyAlIGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzaGViYW5nID0gcmVzb2x2ZV9zaGViYW5nKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNoZWJhbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gc2hlYmFuZworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBbY21kXQorICAgICAgICAgICAgICAgICAgICBhcmdzWzA6MV0gPSBjbWQKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IFV0aWxpdHkoYnVpbHRpbi5ydW5fY29tbWFuZCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIENvbW1hbmQgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgaWYgJ2RlYnVnLWNtZCcgaW4gc2VsZi5fZGVidWdmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coJ3JlZGlyZWN0aW9ucyAnICsgc3RyKHJlZGlycykgKyAnXG4nKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXMgPSBjb21tYW5kLmZ1bmMoYXJnc1swXSwgYXJnc1sxOl0sIHNlbGYsIGVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJzLnN0ZGluKCksIHJlZGlycy5zdGRvdXQoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlycy5zdGRlcnIoKSwgc2VsZi5fZGVidWdmbGFncykKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgc2VsZi5fZW52Lmhhc19vcHQoJy14Jyk6CisgICAgICAgICAgICAgICAgIyBUcmFjZSBjb21tYW5kIGV4ZWN1dGlvbiBpbiBzaGVsbCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICMgQlVHOiB3b3VsZCBiZSBoYXJkIHRvIHJlcHJvZHVjZSBhIHJlYWwgc2hlbGwgYmVoYXZpb3VyIHNpbmNlCisgICAgICAgICAgICAgICAgIyB0aGUgQVNUIGlzIG5vdCBhbm5vdGF0ZWQgd2l0aCBzb3VyY2UgbGluZXMvdG9rZW5zLgorICAgICAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRvdXQoKS53cml0ZSgnICcuam9pbihhcmdzKSkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZXhjZXB0IFJldHVyblNpZ25hbDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBTaGVsbEVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBpc19zcGVjaWFsIG9yIGlzaW5zdGFuY2UoZSwgKEV4aXRTaWduYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoZWxsU3ludGF4RXJyb3IsIEV4cGFuc2lvbkVycm9yKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICAgICAgc2VsZi5fcmVkaXJzLnN0ZGVycigpLndyaXRlKHN0cihlKSsnXG4nKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgZXhwYW5kX3Rva2VuKHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJFeHBhbmQgYSB3b3JkIGFzIHNwZWNpZmllZCBpbiBbMi42IFdvcmQgRXhwYW5zaW9uc10uIFJldHVybiB0aGUgbGlzdAorICAgICAgICBvZiBleHBhbmRlZCB3b3Jkcy4KKyAgICAgICAgIiIiCisgICAgICAgIHN0YXR1cywgd3RyZWVzID0gc2VsZi5fZXhwYW5kX3dvcmQod29yZCkKKyAgICAgICAgcmV0dXJuIG1hcChweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZywgd3RyZWVzKQorICAgICAgICAKKyAgICBkZWYgZXhwYW5kX3ZhcmlhYmxlKHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdGF0dXMgY29kZSAob3IgTm9uZSBpZiBubyBjb21tYW5kIGV4cGFuc2lvbiBvY2N1cnJlZCkKKyAgICAgICAgYW5kIGEgc2luZ2xlIHdvcmQuCisgICAgICAgICIiIgorICAgICAgICBzdGF0dXMsIHd0cmVlcyA9IHNlbGYuX2V4cGFuZF93b3JkKHdvcmQsIHBhdGhuYW1lPUZhbHNlLCBzcGxpdD1GYWxzZSkKKyAgICAgICAgd29yZHMgPSBtYXAocHlzaGxleC53b3JkdHJlZV9hc19zdHJpbmcsIHd0cmVlcykKKyAgICAgICAgYXNzZXJ0IGxlbih3b3Jkcyk9PTEKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgd29yZHNbMF0KKyAgICAgICAgCisgICAgZGVmIGV4cGFuZF9oZXJlX2RvY3VtZW50KHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGV4cGFuZGVkIGRvY3VtZW50IGFzIGEgc2luZ2xlIHdvcmQuIFRoZSBoZXJlIGRvY3VtZW50IGlzIAorICAgICAgICBhc3N1bWVkIHRvIGJlIHVucXVvdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc3RhdHVzLCB3dHJlZXMgPSBzZWxmLl9leHBhbmRfd29yZCh3b3JkLCBwYXRobmFtZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdD1GYWxzZSwgaGVyZV9kb2N1bWVudD1UcnVlKQorICAgICAgICB3b3JkcyA9IG1hcChweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZywgd3RyZWVzKQorICAgICAgICBhc3NlcnQgbGVuKHdvcmRzKT09MQorICAgICAgICByZXR1cm4gd29yZHNbMF0KKyAgICAgICAgCisgICAgZGVmIGV4cGFuZF9yZWRpcmVjdGlvbihzZWxmLCB3b3JkKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc2luZ2xlIHdvcmQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF92YXJpYWJsZSh3b3JkKVsxXQorICAgICAgICAKKyAgICBkZWYgZ2V0X2VudihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VudgorICAgICAgICAKKyAgICBkZWYgX2V4cGFuZF93b3JkKHNlbGYsIHRva2VuLCBwYXRobmFtZT1UcnVlLCBzcGxpdD1UcnVlLCBoZXJlX2RvY3VtZW50PUZhbHNlKToKKyAgICAgICAgd3RyZWUgPSBweXNobGV4Lm1ha2Vfd29yZHRyZWUodG9rZW5bMV0sIGhlcmVfZG9jdW1lbnQ9aGVyZV9kb2N1bWVudCkKKyAgICAgICAgCisgICAgICAgICMgVE9ETzogaW1wbGVtZW50IHRpbGRlIGV4cGFuc2lvbgorICAgICAgICBkZWYgZXhwYW5kKHd0cmVlKToKKyAgICAgICAgICAgICIiIlJldHVybiBhIHBzZXVkbyB3b3JkdHJlZTogdGhlIHRyZWUgb3IgaXRzIHN1YmVsZW1lbnRzIGNhbiBiZSBlbXB0eQorICAgICAgICAgICAgbGlzdHMgd2hlbiBubyB2YWx1ZSByZXN1bHQgZnJvbSB0aGUgZXhwYW5zaW9uLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzdGF0dXMgPSBOb25lCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBwYXJ0WzBdaW4gKCInIiwgJ1xcJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBwYXJ0WzBdIGluICgnYCcsICckKCcpOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IHNlbGYuX2V4cGFuZF9jb21tYW5kKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIHBhcnRbOl0gPSByZXN1bHQKKyAgICAgICAgICAgICAgICBlbGlmIHBhcnRbMF0gaW4gKCckJywgJyR7Jyk6CisgICAgICAgICAgICAgICAgICAgIHBhcnRbOl0gPSBzZWxmLl9leHBhbmRfcGFyYW1ldGVyKHBhcnQsIHd0cmVlWzBdPT0nIicsIHNwbGl0KQorICAgICAgICAgICAgICAgIGVsaWYgcGFydFswXSBpbiAoJycsICciJyk6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gZXhwYW5kKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIHBhcnRbOl0gPSByZXN1bHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBleHBhbnNpb24gaXMgbm90IGltcGxlbWVudGVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgcGFydFswXSkKKyAgICAgICAgICAgICMgW10gaXMgcmV0dXJuZWQgd2hlbiBhbiBleHBhbnNpb24gcmVzdWx0IGluIG5vLWZpZWxkLAorICAgICAgICAgICAgIyBsaWtlIGFuIGVtcHR5ICRACisgICAgICAgICAgICB3dHJlZSA9IFtwIGZvciBwIGluIHd0cmVlIGlmIHAgIT0gW11dCisgICAgICAgICAgICBpZiBsZW4od3RyZWUpIDwgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCBbXQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgd3RyZWUKKyAgICAgICAgCisgICAgICAgIHN0YXR1cywgd3RyZWUgPSBleHBhbmQod3RyZWUpCisgICAgICAgIGlmIGxlbih3dHJlZSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIHd0cmVlCisgICAgICAgIHd0cmVlID0gcHlzaGxleC5ub3JtYWxpemVfd29yZHRyZWUod3RyZWUpCisgICAgICAgIAorICAgICAgICBpZiBzcGxpdDoKKyAgICAgICAgICAgIHd0cmVlcyA9IHNlbGYuX3NwbGl0X2ZpZWxkcyh3dHJlZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHd0cmVlcyA9IFt3dHJlZV0KKyAgICAgICAgCisgICAgICAgIGlmIHBhdGhuYW1lOgorICAgICAgICAgICAgd3RyZWVzID0gbWFwcGVuZChzZWxmLl9leHBhbmRfcGF0aG5hbWUsIHd0cmVlcykKKyAgICAgICAgCisgICAgICAgIHd0cmVlcyA9IG1hcChzZWxmLl9yZW1vdmVfcXVvdGVzLCB3dHJlZXMpCisgICAgICAgIHJldHVybiBzdGF0dXMsIHd0cmVlcworICAgICAgICAKKyAgICBkZWYgX2V4cGFuZF9jb21tYW5kKHNlbGYsIHd0cmVlKToKKyAgICAgICAgIyBCVUc6IHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyB3aXRoIGJhY2tzbGFzaGVzIGFuZCBxdW90ZWQKKyAgICAgICAgIyBjaGFyYWN0ZXJzIGhlcmUKKyAgICAgICAgY29tbWFuZCA9IHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nKHd0cmVlWzE6LTFdKQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYuc3Vic2hlbGxfb3V0cHV0KGNvbW1hbmQpCisgICAgICAgIHJldHVybiBzdGF0dXMsIFsnJywgb3V0cHV0LCAnJ10KKyAgICAgICAgCisgICAgZGVmIF9leHBhbmRfcGFyYW1ldGVyKHNlbGYsIHd0cmVlLCBxdW90ZWQ9RmFsc2UsIHNwbGl0PUZhbHNlKToKKyAgICAgICAgIiIiUmV0dXJuIGEgdmFsaWQgd3RyZWUgb3IgYW4gZW1wdHkgbGlzdCB3aGVuIG5vIHBhcmFtZXRlciByZXN1bHRzLiIiIgorICAgICAgICAjIEdldCB0aGUgcGFyYW1ldGVyIG5hbWUKKyAgICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgd2VpcmQgZXhwYW5zaW9uIHJ1bGVzIHdpdGggJzonCisgICAgICAgIG5hbWUgPSBweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZyh3dHJlZVsxOi0xXSkKKyAgICAgICAgaWYgbm90IGlzX25hbWUobmFtZSkgYW5kIG5vdCBpc19zcGVjaWFsX3BhcmFtKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgRXhwYW5zaW9uRXJyb3IoJ0JhZCBzdWJzdGl0dXRpb24gIiVzIicgJSBuYW1lKQorICAgICAgICAjIFRPRE86IGltcGxlbWVudCBzcGVjaWFsIHBhcmFtZXRlcnMKKyAgICAgICAgaWYgbmFtZSBpbiAoJ0AnLCAnKicpOgorICAgICAgICAgICAgYXJncyA9IHNlbGYuX2Vudi5nZXRfcG9zaXRpb25hbF9hcmdzKCkKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpPDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnJywgJycuam9pbihhcmdzKSwgJyddCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzZXAgPSBzZWxmLl9lbnYuZ2V0KCdJRlMnLCAnJylbOjFdCisgICAgICAgICAgICBpZiBzcGxpdCBhbmQgcXVvdGVkIGFuZCBuYW1lPT0nQCc6CisgICAgICAgICAgICAgICAgIyBJbnRyb2R1Y2UgYSBuZXcgdG9rZW4gdG8gdGVsbCB0aGUgY2FsbGVyIHRoYXQgdGhlc2UgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICMgY2F1c2UgYSBzcGxpdCBhcyBzcGVjaWZpZWQgaW4gMi41LjIKKyAgICAgICAgICAgICAgICByZXR1cm4gWydAJ10gKyBhcmdzICsgWycnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gWycnLCBzZXAuam9pbihhcmdzKSwgJyddICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFsnJywgc2VsZi5fZW52LmdldChuYW1lLCAnJyksICcnXQorICAgICAgICAKKyAgICBkZWYgX3NwbGl0X2ZpZWxkcyhzZWxmLCB3dHJlZSk6CisgICAgICAgIGRlZiBpc19lbXB0eShzcGxpdCk6CisgICAgICAgICAgICByZXR1cm4gc3BsaXQ9PVsnJywgJycsICcnXQorICAgICAgICAgICAgCisgICAgICAgIGRlZiBzcGxpdF9wb3NpdGlvbmFsKHF1b3RlZCk6CisgICAgICAgICAgICAjIFJldHVybiBhIGxpc3Qgb2Ygd3RyZWUgc3BsaXQgYWNjb3JkaW5nIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBydWxlcy4KKyAgICAgICAgICAgICMgQWxsIHJlbWFpbmluZyAnQCcgZ3JvdXBzIGFyZSByZW1vdmVkLgorICAgICAgICAgICAgYXNzZXJ0IHF1b3RlZFswXT09JyInCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwbGl0cyA9IFtbXV0KKyAgICAgICAgICAgIGZvciBwYXJ0IGluIHF1b3RlZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KSBvciBwYXJ0WzBdIT0nQCc6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0c1stMV0uYXBwZW5kKHBhcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSBvciBzaW5nbGUgYXJndW1lbnQgbGlzdCB3ZXJlIGRlYWx0IHdpdGggYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKHBhcnQpPjMKKyAgICAgICAgICAgICAgICAgICAgIyBGaXJzdCBhcmd1bWVudCBtdXN0IGpvaW4gd2l0aCB0aGUgYmVnaW5uaW5nIHBhcnQgb2YgdGhlIG9yaWdpbmFsIHdvcmQKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRzWy0xXS5hcHBlbmQocGFydFsxXSkKKyAgICAgICAgICAgICAgICAgICAgIyBDcmVhdGUgZG91YmxlLXF1b3RlcyBleHByZXNzaW9ucyBmb3IgZXZlcnkgYXJndW1lbnQgYWZ0ZXIgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gcGFydFsyOi0xXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0c1stMV0uYXBwZW5kKCciJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0cy5hcHBlbmQoWyciJywgYXJnXSkKKyAgICAgICAgICAgIHJldHVybiBzcGxpdHMKKyAgICAgICAgCisgICAgICAgICMgQXQgdGhpcyBwb2ludCwgYWxsIGV4cGFuc2lvbnMgYnV0IHBhdGhuYW1lcyBoYXZlIG9jY3VyZWQuIE9ubHkgcXVvdGVkCisgICAgICAgICMgYW5kIHBvc2l0aW9uYWwgc2VxdWVuY2VzIHJlbWFpbi4gVGh1cywgYWxsIGNhbmRpZGF0ZXMgZm9yIGZpZWxkIHNwbGl0dGluZyAKKyAgICAgICAgIyBhcmUgaW4gdGhlIHRyZWUgcm9vdCwgb3IgYXJlIHBvc2l0aW9uYWwgc3BsaXRzICgnQCcpIGFuZCBsaWUgaW4gcm9vdAorICAgICAgICAjIGNoaWxkcmVuLgorICAgICAgICBpZiBub3Qgd3RyZWUgb3Igd3RyZWVbMF0gbm90IGluICgnJywgJyInKToKKyAgICAgICAgICAgICMgVGhlIHdob2xlIHRva2VuIGlzIHF1b3RlZCBvciBlbXB0eSwgbm90aGluZyB0byBzcGxpdAorICAgICAgICAgICAgcmV0dXJuIFt3dHJlZV0KKyAgICAgICAgICAgIAorICAgICAgICBpZiB3dHJlZVswXT09JyInOgorICAgICAgICAgICAgd3RyZWUgPSBbJycsIHd0cmVlLCAnJ10KKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IFtbJycsICcnXV0KKyAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWVbMTotMV06CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgIGlmIHBhcnRbMF09PSciJzoKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRzID0gc3BsaXRfcG9zaXRpb25hbChwYXJ0KQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRzKTw9MToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gW3BhcnQsICcnXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gW3NwbGl0c1swXSwgJyddCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3BsaXRzWzE6LTFdCisgICAgICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIG5ldyBzcGxpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFtbJycsIHNwbGl0c1stMV0sICcnXV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdICs9IFtwYXJ0LCAnJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BsaXRzID0gc2VsZi5fZW52LnNwbGl0X2ZpZWxkcyhwYXJ0KQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHMpPD0xOgorICAgICAgICAgICAgICAgICAgICAjIE5vIHNwbGl0CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV1bLTFdICs9IHBhcnQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRlcm1pbmF0ZSB0aGUgY3VycmVudCByZXN1bHRpbmcgcGFydCBhbmQgY3JlYXRlIGEgbmV3IG9uZQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdWy0xXSArPSBzcGxpdHNbMF0KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXS5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBbWycnLCByLCAnJ10gZm9yIHIgaW4gc3BsaXRzWzE6LTFdXQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gW1snJywgc3BsaXRzWy0xXV1dCisgICAgICAgIHJlc3VsdFstMV0uYXBwZW5kKCcnKQorICAgICAgICAKKyAgICAgICAgIyBMZWFkaW5nIGFuZCB0cmFpbGluZyBlbXB0eSBncm91cHMgY29tZSBmcm9tIGxlYWRpbmcvdHJhaWxpbmcgYmxhbmtzCisgICAgICAgIGlmIHJlc3VsdCBhbmQgaXNfZW1wdHkocmVzdWx0Wy0xXSk6CisgICAgICAgICAgICByZXN1bHRbLTE6XSA9IFtdCisgICAgICAgIGlmIHJlc3VsdCBhbmQgaXNfZW1wdHkocmVzdWx0WzBdKToKKyAgICAgICAgICAgIHJlc3VsdFs6MV0gPSBbXQorICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIAorICAgIGRlZiBfZXhwYW5kX3BhdGhuYW1lKHNlbGYsIHd0cmVlKToKKyAgICAgICAgIiIiU2VlIFsyLjYuNiBQYXRobmFtZSBFeHBhbnNpb25dLiIiIgorICAgICAgICBpZiBzZWxmLl9lbnYuaGFzX29wdCgnLWYnKToKKyAgICAgICAgICAgIHJldHVybiBbd3RyZWVdCisgICAgICAgIAorICAgICAgICAjIEFsbCBleHBhbnNpb25zIGhhdmUgYmVlbiBwZXJmb3JtZWQsIG9ubHkgcXVvdGVkIHNlcXVlbmNlcyBzaG91bGQgcmVtYWluCisgICAgICAgICMgaW4gdGhlIHRyZWUuIEdlbmVyYXRlIHRoZSBwYXR0ZXJuIGJ5IGZvbGRpbmcgdGhlIHRyZWUsIGVzY2FwaW5nIHNwZWNpYWwKKyAgICAgICAgIyBjaGFyYWN0ZXJzIHdoZW4gYXBwZWFyIHF1b3RlZAorICAgICAgICBzcGVjaWFsX2NoYXJzID0gJyo/W10nCisgICAgICAgIAorICAgICAgICBkZWYgbWFrZV9wYXR0ZXJuKHd0cmVlKToKKyAgICAgICAgICAgIHN1YnBhdHRlcm4gPSBbXQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWVbMTotMV06CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9IG1ha2VfcGF0dGVybihwYXJ0KQorICAgICAgICAgICAgICAgIGVsaWYgd3RyZWVbMF0hPScnOgorICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBwYXJ0OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXRhLWNoYXJhY3RlcnMgY2Fubm90IGJlIHF1b3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyBpbiBzcGVjaWFsX2NoYXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEdsb2JFcnJvcigpCisgICAgICAgICAgICAgICAgc3VicGF0dGVybi5hcHBlbmQocGFydCkKKyAgICAgICAgICAgIHJldHVybiAnJy5qb2luKHN1YnBhdHRlcm4pCisgICAgICAgICAgICAKKyAgICAgICAgZGVmIHB3ZF9nbG9iKHBhdHRlcm4pOgorICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuX2VudlsnUFdEJ10pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2IuZ2xvYihwYXR0ZXJuKSAKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKSAgICAKKyAgICAgICAgICAgIAorICAgICAgICAjVE9ETzogY2hlY2sgd29ya2luZyBkaXJlY3RvcnkgaXNzdWVzIGhlcmUgd3J0IHJlbGF0aXZlIHBhdHRlcm5zCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdHRlcm4gPSBtYWtlX3BhdHRlcm4od3RyZWUpCisgICAgICAgICAgICBwYXRocyA9IHB3ZF9nbG9iKHBhdHRlcm4pCisgICAgICAgIGV4Y2VwdCBHbG9iRXJyb3I6CisgICAgICAgICAgICAjIEJVRzogTWV0YS1jaGFyYWN0ZXJzIHdlcmUgZm91bmQgaW4gcXVvdGVkIHNlcXVlbmNlcy4gVGhlIHNob3VsZCAKKyAgICAgICAgICAgICMgaGF2ZSBiZWVuIHVzZWQgbGl0ZXJhbGx5IGJ1dCB0aGlzIGlzIHVuc3VwcG9ydGVkIGluIGN1cnJlbnQgZ2xvYiBtb2R1bGUuCisgICAgICAgICAgICAjIEluc3RlYWQgd2UgY29uc2lkZXIgdGhlIHdob2xlIHRyZWUgbXVzdCBiZSB1c2VkIGxpdGVyYWxseSBhbmQKKyAgICAgICAgICAgICMgdGhlcmVmb3JlIHRoZXJlIGlzIG5vIHBvaW50IGluIGdsb2JiaW5nLiBUaGlzIGlzIHdyb25nIHdoZW4gbWV0YQorICAgICAgICAgICAgIyBjaGFyYWN0ZXJzIGFyZSBtaXhlZCB3aXRoIHF1b3RlZCBtZXRhIGluIHRoZSBzYW1lIHBhdHRlcm4gbGlrZToKKyAgICAgICAgICAgICMgPCBmb28qInB5KiIgPgorICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICAgICAgCisgICAgICAgIGlmIG5vdCBwYXRoczoKKyAgICAgICAgICAgIHJldHVybiBbd3RyZWVdCisgICAgICAgIHJldHVybiBbWycnLCBwYXRoLCAnJ10gZm9yIHBhdGggaW4gcGF0aHNdCisgICAgICAgIAorICAgIGRlZiBfcmVtb3ZlX3F1b3RlcyhzZWxmLCB3dHJlZSk6CisgICAgICAgICIiIlNlZSBbMi42LjcgUXVvdGUgUmVtb3ZhbF0uIiIiCisgICAgICAgIAorICAgICAgICBkZWYgdW5xdW90ZSh3dHJlZSk6CisgICAgICAgICAgICB1bnF1b3RlZCA9IFtdCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gdW5xdW90ZShwYXJ0KQorICAgICAgICAgICAgICAgIHVucXVvdGVkLmFwcGVuZChwYXJ0KQorICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4odW5xdW90ZWQpCisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIFsnJywgdW5xdW90ZSh3dHJlZSksICcnXQorICAgICAgICAKKyAgICBkZWYgc3Vic2hlbGwoc2VsZiwgc2NyaXB0PU5vbmUsIGFzdD1Ob25lLCByZWRpcnM9Tm9uZSk6CisgICAgICAgICIiIkV4ZWN1dGUgdGhlIHNjcmlwdCBvciBBU1QgaW4gYSBzdWJzaGVsbCwgd2l0aCBpbmhlcml0ZWQgcmVkaXJlY3Rpb25zCisgICAgICAgIGlmIHJlZGlycyBpcyBub3QgTm9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHJlZGlyczoKKyAgICAgICAgICAgIHN1Yl9yZWRpcnMgPSByZWRpcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1Yl9yZWRpcnMgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAKKyAgICAgICAgc3Vic2hlbGwgPSBOb25lICAgIAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJzaGVsbCA9IEludGVycHJldGVyKE5vbmUsIHNlbGYuX2RlYnVnZmxhZ3MsIHNlbGYuX2Vudi5jbG9uZShUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX3JlZGlycywgb3B0cz1zZWxmLl9vcHRpb25zKQorICAgICAgICAgICAgcmV0dXJuIHN1YnNoZWxsLmV4ZWN1dGVfc2NyaXB0KHNjcmlwdCwgYXN0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IHJlZGlyczogc3ViX3JlZGlycy5jbG9zZSgpCisgICAgICAgICAgICBpZiBzdWJzaGVsbDogc3Vic2hlbGwuY2xvc2UoKQorICAgICAgICAKKyAgICBkZWYgc3Vic2hlbGxfb3V0cHV0KHNlbGYsIHNjcmlwdCk6CisgICAgICAgICIiIkV4ZWN1dGUgdGhlIHNjcmlwdCBpbiBhIHN1YnNoZWxsIGFuZCByZXR1cm4gdGhlIGNhcHR1cmVkIG91dHB1dC4iIiIgICAgICAgIAorICAgICAgICAjIENyZWF0ZSB0ZW1wb3JhcnkgZmlsZSB0byBjYXB0dXJlIHN1YnNoZWxsIG91dHB1dAorICAgICAgICB0bXBmZCwgdG1wcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0bXBmaWxlID0gb3MuZmRvcGVuKHRtcGZkLCAnd2InKQorICAgICAgICAgICAgc3Rkb3V0ID0gRmlsZVdyYXBwZXIoJ3cnLCB0bXBmaWxlKQorICAgICAgICAgICAgCisgICAgICAgICAgICByZWRpcnMgPSBSZWRpcmVjdGlvbnMoc2VsZi5fcmVkaXJzLnN0ZGluKCkuZHVwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRlcnIoKS5kdXAoKSkgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLnN1YnNoZWxsKHNjcmlwdD1zY3JpcHQsIHJlZGlycz1yZWRpcnMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlZGlycy5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmVkaXJzID0gTm9uZQorICAgICAgICAgICAgCisgICAgICAgICAgICAjIEV4dHJhY3Qgc3Vic2hlbGwgc3RhbmRhcmQgb3V0cHV0CisgICAgICAgICAgICB0bXBmaWxlID0gb3Blbih0bXBwYXRoLCAncmInKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHRtcGZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgb3V0cHV0LnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0bXBmaWxlLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBwYXRoKQorCisgICAgZGVmIF9hc3luY2xpc3Qoc2VsZiwgY21kKToKKyAgICAgICAgYXJncyA9IChzZWxmLl9lbnYuZ2V0X3ZhcmlhYmxlcygpLCBjbWQpCisgICAgICAgIGFyZyA9IGVuY29kZWFyZ3MoYXJncykKKyAgICAgICAgYXNzZXJ0IGxlbihhcmdzKSA8IDMwKjEwMjQKKyAgICAgICAgY21kID0gWydweXNoLmJhdCcsICctLWFzdCcsICctYycsIGFyZ10KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBjd2Q9c2VsZi5fZW52WydQV0QnXSkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW5bcC5waWRdID0gcAorICAgICAgICBzZWxmLl9lbnZbJyEnXSA9IHAucGlkCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgd2FpdChzZWxmLCBwaWRzPU5vbmUpOgorICAgICAgICBpZiBub3QgcGlkczoKKyAgICAgICAgICAgIHBpZHMgPSBzZWxmLl9jaGlsZHJlbi5rZXlzKCkKKworICAgICAgICBzdGF0dXMgPSAxMjcKKyAgICAgICAgZm9yIHBpZCBpbiBwaWRzOgorICAgICAgICAgICAgaWYgcGlkIG5vdCBpbiBzZWxmLl9jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcCA9IHNlbGYuX2NoaWxkcmVuLnBvcChwaWQpCisgICAgICAgICAgICBzdGF0dXMgPSBwLndhaXQoKQorCisgICAgICAgIHJldHVybiBzdGF0dXMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL2xzcHJvZi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9sc3Byb2YucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4MzFjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9sc3Byb2YucHkKQEAgLTAsMCArMSwxMTYgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHN5cworZnJvbSBfbHNwcm9mIGltcG9ydCBQcm9maWxlciwgcHJvZmlsZXJfZW50cnkKKworX19hbGxfXyA9IFsncHJvZmlsZScsICdTdGF0cyddCisKK2RlZiBwcm9maWxlKGYsICphcmdzLCAqKmt3ZHMpOgorICAgICIiIlhYWCBkb2NzdHJpbmciIiIKKyAgICBwID0gUHJvZmlsZXIoKQorICAgIHAuZW5hYmxlKHN1YmNhbGxzPVRydWUsIGJ1aWx0aW5zPVRydWUpCisgICAgdHJ5OgorICAgICAgICBmKCphcmdzLCAqKmt3ZHMpCisgICAgZmluYWxseToKKyAgICAgICAgcC5kaXNhYmxlKCkKKyAgICByZXR1cm4gU3RhdHMocC5nZXRzdGF0cygpKQorCisKK2NsYXNzIFN0YXRzKG9iamVjdCk6CisgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICBkZWYgc29ydChzZWxmLCBjcml0PSJpbmxpbmV0aW1lIik6CisgICAgICAgICIiIlhYWCBkb2NzdHJpbmciIiIKKyAgICAgICAgaWYgY3JpdCBub3QgaW4gcHJvZmlsZXJfZW50cnkuX19kaWN0X186CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW4ndCBzb3J0IGJ5ICVzIiAlIGNyaXQpCisgICAgICAgIHNlbGYuZGF0YS5zb3J0KGxhbWJkYSBiLCBhOiBjbXAoZ2V0YXR0cihhLCBjcml0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKGIsIGNyaXQpKSkKKyAgICAgICAgZm9yIGUgaW4gc2VsZi5kYXRhOgorICAgICAgICAgICAgaWYgZS5jYWxsczoKKyAgICAgICAgICAgICAgICBlLmNhbGxzLnNvcnQobGFtYmRhIGIsIGE6IGNtcChnZXRhdHRyKGEsIGNyaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoYiwgY3JpdCkpKQorCisgICAgZGVmIHBwcmludChzZWxmLCB0b3A9Tm9uZSwgZmlsZT1Ob25lLCBsaW1pdD1Ob25lLCBjbGltaXQ9Tm9uZSk6CisgICAgICAgICIiIlhYWCBkb2NzdHJpbmciIiIKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZSA9IHN5cy5zdGRvdXQKKyAgICAgICAgZCA9IHNlbGYuZGF0YQorICAgICAgICBpZiB0b3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkID0gZFs6dG9wXQorICAgICAgICBjb2xzID0gIiUgMTJzICUxMnMgJTExLjRmICUxMS40ZiAgICVzXG4iCisgICAgICAgIGhjb2xzID0gIiUgMTJzICUxMnMgJTEycyAlMTJzICVzXG4iCisgICAgICAgIGNvbHMyID0gIislMTJzICUxMnMgJTExLjRmICUxMS40ZiArICAlc1xuIgorICAgICAgICBmaWxlLndyaXRlKGhjb2xzICUgKCJDYWxsQ291bnQiLCAiUmVjdXJzaXZlIiwgIlRvdGFsKG1zKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklubGluZShtcykiLCAibW9kdWxlOmxpbmVubyhmdW5jdGlvbikiKSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBlIGluIGQ6CisgICAgICAgICAgICBmaWxlLndyaXRlKGNvbHMgJSAoZS5jYWxsY291bnQsIGUucmVjY2FsbGNvdW50LCBlLnRvdGFsdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlubGluZXRpbWUsIGxhYmVsKGUuY29kZSkpKQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmUgYW5kIGNvdW50ID09IGxpbWl0OgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgY2NvdW50ID0gMAorICAgICAgICAgICAgaWYgZS5jYWxsczoKKyAgICAgICAgICAgICAgICBmb3Igc2UgaW4gZS5jYWxsczoKKyAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShjb2xzICUgKCIrJXMiICUgc2UuY2FsbGNvdW50LCBzZS5yZWNjYWxsY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZS50b3RhbHRpbWUsIHNlLmlubGluZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKyVzIiAlIGxhYmVsKHNlLmNvZGUpKSkKKyAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBjY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgY291bnQgPT0gbGltaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgaWYgY2xpbWl0IGlzIG5vdCBOb25lIGFuZCBjY291bnQgPT0gY2xpbWl0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBmcmVlemUoc2VsZik6CisgICAgICAgICIiIlJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gY29kZSBvYmplY3RzIHdpdGggc3RyaW5nCisgICAgICAgIGRlc2NyaXB0aW9uczsgdGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBwaWNrbGUgdGhlIGluc3RhbmNlLiIiIgorCisgICAgICAgICMgdGhpcyBjb2RlIGlzIHByb2JhYmx5IHJhdGhlciBpY2tpZXIgdGhhbiBpdCBuZWVkcyB0byBiZSEKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuZGF0YSkpOgorICAgICAgICAgICAgZSA9IHNlbGYuZGF0YVtpXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZS5jb2RlLCBzdHIpOgorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtpXSA9IHR5cGUoZSkoKGxhYmVsKGUuY29kZSksKSArIGVbMTpdKQorICAgICAgICAgICAgaWYgZS5jYWxsczoKKyAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4oZS5jYWxscykpOgorICAgICAgICAgICAgICAgICAgICBzZSA9IGUuY2FsbHNbal0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2UuY29kZSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGUuY2FsbHNbal0gPSB0eXBlKHNlKSgobGFiZWwoc2UuY29kZSksKSArIHNlWzE6XSkKKworX2ZuMm1vZCA9IHt9CisKK2RlZiBsYWJlbChjb2RlKToKKyAgICBpZiBpc2luc3RhbmNlKGNvZGUsIHN0cik6CisgICAgICAgIHJldHVybiBjb2RlCisgICAgdHJ5OgorICAgICAgICBtbmFtZSA9IF9mbjJtb2RbY29kZS5jb19maWxlbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGZvciBrLCB2IGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHYsICdfX2ZpbGVfXycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2Ll9fZmlsZV9fLCBzdHIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB2Ll9fZmlsZV9fLnN0YXJ0c3dpdGgoY29kZS5jb19maWxlbmFtZSk6CisgICAgICAgICAgICAgICAgbW5hbWUgPSBfZm4ybW9kW2NvZGUuY29fZmlsZW5hbWVdID0gaworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtbmFtZSA9IF9mbjJtb2RbY29kZS5jb19maWxlbmFtZV0gPSAnPCVzPiclY29kZS5jb19maWxlbmFtZQorCisgICAgcmV0dXJuICclczolZCglcyknICUgKG1uYW1lLCBjb2RlLmNvX2ZpcnN0bGluZW5vLCBjb2RlLmNvX25hbWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgb3MKKyAgICBzeXMuYXJndiA9IHN5cy5hcmd2WzE6XQorICAgIGlmIG5vdCBzeXMuYXJndjoKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgInVzYWdlOiBsc3Byb2YucHkgPHNjcmlwdD4gPGFyZ3VtZW50cy4uLj4iCisgICAgICAgIHN5cy5leGl0KDIpCisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKSkKKyAgICBzdGF0cyA9IHByb2ZpbGUoZXhlY2ZpbGUsIHN5cy5hcmd2WzBdLCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgIHN0YXRzLnNvcnQoKQorICAgIHN0YXRzLnBwcmludCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZTYxNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaC5weQpAQCAtMCwwICsxLDE2NyBAQAorIyBweXNoLnB5IC0gY29tbWFuZCBwcm9jZXNzaW5nIGZvciBweXNoLgorIworIyBDb3B5cmlnaHQgMjAwNyBQYXRyaWNrIE1lemFyZAorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2ltcG9ydCBpbnRlcnAKKworU0hfT1BUID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHByb2c9J3B5c2gnLCB1c2FnZT0iJXByb2cgW09QVElPTlNdIiwgdmVyc2lvbj0nMC4xJykKK1NIX09QVC5hZGRfb3B0aW9uKCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2NvbW1hbmRfc3RyaW5nJywgZGVmYXVsdD1Ob25lLCAKKyAgICBoZWxwPSdBIHN0cmluZyB0aGF0IHNoYWxsIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbCBhcyBvbmUgb3IgbW9yZSBjb21tYW5kcycpCitTSF9PUFQuYWRkX29wdGlvbignLS1yZWRpcmVjdC10bycsIGRlc3Q9J3JlZGlyZWN0X3RvJywgZGVmYXVsdD1Ob25lLCAKKyAgICBoZWxwPSdSZWRpcmVjdCBzY3JpcHQgY29tbWFuZHMgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHNwZWNpZmllZCBmaWxlJykKKyMgU2VlIHV0aWxpdHlfY29tbWFuZCBpbiBidWlsdGluLnB5IGFib3V0IHRoZSByZWFzb24gZm9yIHRoaXMgZmxhZy4KK1NIX09QVC5hZGRfb3B0aW9uKCctLXJlZGlyZWN0ZWQnLCBkZXN0PSdyZWRpcmVjdGVkJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVGVsbCB0aGUgaW50ZXJwcmV0ZXIgdGhhdCBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgYWN0dWFsbHkgdGhlIHNhbWUgb2JqZWN0cywgd2hpY2ggaXMgcmVhbGx5IHN0ZG91dCcpCitTSF9PUFQuYWRkX29wdGlvbignLS1kZWJ1Zy1wYXJzaW5nJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZGVidWdfcGFyc2luZycsIGRlZmF1bHQ9RmFsc2UsIAorICAgIGhlbHA9J1RyYWNlIFBMWSBleGVjdXRpb24nKQorU0hfT1BULmFkZF9vcHRpb24oJy0tZGVidWctdHJlZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnX3RyZWUnLCBkZWZhdWx0PUZhbHNlLCAKKyAgICBoZWxwPSdEaXNwbGF5IHRoZSBnZW5lcmF0ZWQgc3ludGF4IHRyZWUuJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWRlYnVnLWNtZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnX2NtZCcsIGRlZmF1bHQ9RmFsc2UsIAorICAgIGhlbHA9J1RyYWNlIGNvbW1hbmQgZXhlY3V0aW9uIGJlZm9yZSBwYXJhbWV0ZXJzIGV4cGFuc2lvbiBhbmQgZXhpdCBzdGF0dXMuJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWRlYnVnLXV0aWxpdHknLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdkZWJ1Z191dGlsaXR5JywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVHJhY2UgdXRpbGl0eSBjYWxscywgYWZ0ZXIgcGFyYW1ldGVycyBleHBhbnNpb25zJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWFzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2FzdCcsIGRlZmF1bHQ9RmFsc2UsCisgICAgaGVscD0nRW5jb2RlZCBjb21tYW5kcyB0byBleGVjdXRlIGluIGEgc3VicHJvY2VzcycpCitTSF9PUFQuYWRkX29wdGlvbignLS1wcm9maWxlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSdQcm9maWxlIHB5c2ggcnVuJykKKyAgICAKKyAgICAKK2RlZiBzcGxpdF9hcmdzKGFyZ3MpOgorICAgICMgU2VwYXJhdGUgc2hlbGwgYXJndW1lbnRzIGZyb20gY29tbWFuZCBvbmVzCisgICAgIyBKdXN0IHN0b3AgYXQgdGhlIGZpcnN0IGFyZ3VtZW50IG5vdCBzdGFydGluZyB3aXRoIGEgZGFzaC4gSSBrbm93LCB0aGlzIGlzIGNvbXBsZXRlbHkgYnJva2VuLAorICAgICMgaXQgaWdub3JlcyBmaWxlcyBzdGFydGluZyB3aXRoIGEgZGFzaCBvciBtYXkgdGFrZSBvcHRpb24gdmFsdWVzIGZvciBjb21tYW5kIGZpbGUuIFRoaXMgaXMgbm90CisgICAgIyBzdXBwb3NlZCB0byBoYXBwZW4gZm9yIG5vdworICAgIGNvbW1hbmRfaW5kZXggPSBsZW4oYXJncykKKyAgICBmb3IgaSxhcmcgaW4gZW51bWVyYXRlKGFyZ3MpOgorICAgICAgICBpZiBub3QgYXJnLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgIGNvbW1hbmRfaW5kZXggPSBpCisgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgCisgICAgcmV0dXJuIGFyZ3NbOmNvbW1hbmRfaW5kZXhdLCBhcmdzW2NvbW1hbmRfaW5kZXg6XQorCisKK2RlZiBmaXhlbnYoZW52KToKKyAgICBwYXRoID0gZW52LmdldCgnUEFUSCcpCisgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgcGFydHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCisgICAgICAgICMgUmVtb3ZlIFdpbmRvd3MgdXRpbGl0aWVzIGZyb20gUEFUSCwgdGhleSBhcmUgdXNlbGVzcyBhdCBiZXN0IGFuZAorICAgICAgICAjIHNvbWUgb2YgdGhlbSAoZmluZCkgbWF5IGJlIGNvbmZ1c2VkIHdpdGggb3RoZXIgdXRpbGl0aWVzLgorICAgICAgICBwYXJ0cyA9IFtwIGZvciBwIGluIHBhcnRzIGlmICdzeXN0ZW0zMicgbm90IGluIHAubG93ZXIoKV0KKyAgICAgICAgZW52WydQQVRIJ10gPSBvcy5wYXRoc2VwLmpvaW4ocGFydHMpCisgICAgaWYgZW52LmdldCgnSE9NRScpIGlzIE5vbmU6CisgICAgICAgICMgU2V2ZXJhbCB1dGlsaXRpZXMsIGluY2x1ZGluZyBjdnNwcywgY2Fubm90IHdvcmsgd2l0aG91dAorICAgICAgICAjIGEgZGVmaW5lZCBIT01FIGRpcmVjdG9yeS4KKyAgICAgICAgZW52WydIT01FJ10gPSBvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKQorICAgIHJldHVybiBlbnYKKworZGVmIF9zaChjd2QsIHNoYXJncywgY21kYXJncywgb3B0aW9ucywgZGVidWdmbGFncz1Ob25lLCBlbnY9Tm9uZSk6CisgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1BZU0hfVEVYVCcpICE9ICcxJzoKKyAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICBmb3IgZnAgaW4gKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycik6CisgICAgICAgICAgICBtc3ZjcnQuc2V0bW9kZShmcC5maWxlbm8oKSwgb3MuT19CSU5BUlkpCisKKyAgICBoZ2JpbiA9IG9zLmVudmlyb24uZ2V0KCdQWVNIX0hHVEVYVCcpICE9ICcxJworICAgIAorICAgIGlmIGRlYnVnZmxhZ3MgaXMgTm9uZToKKyAgICAgICAgZGVidWdmbGFncyA9IFtdCisgICAgICAgIGlmIG9wdGlvbnMuZGVidWdfcGFyc2luZzogICAgZGVidWdmbGFncy5hcHBlbmQoJ2RlYnVnLXBhcnNpbmcnKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnX3V0aWxpdHk6ICAgIGRlYnVnZmxhZ3MuYXBwZW5kKCdkZWJ1Zy11dGlsaXR5JykKKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1Z19jbWQ6ICAgICAgICBkZWJ1Z2ZsYWdzLmFwcGVuZCgnZGVidWctY21kJykKKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1Z190cmVlOiAgICAgICBkZWJ1Z2ZsYWdzLmFwcGVuZCgnZGVidWctdHJlZScpCisgICAgCisgICAgaWYgZW52IGlzIE5vbmU6CisgICAgICAgIGVudiA9IGZpeGVudihkaWN0KG9zLmVudmlyb24pKQorICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorCisgICAgaWYgbm90IGNtZGFyZ3M6CisgICAgICAgICMgTm90aGluZyB0byBkbworICAgICAgICByZXR1cm4gMAorCisgICAgYXN0ID0gTm9uZQorICAgIGNvbW1hbmRfZmlsZSA9IE5vbmUKKyAgICBpZiBvcHRpb25zLmNvbW1hbmRfc3RyaW5nOgorICAgICAgICBpbnB1dCA9IGNtZGFyZ3NbMF0KKyAgICAgICAgaWYgbm90IG9wdGlvbnMuYXN0OgorICAgICAgICAgICAgaW5wdXQgKz0gJ1xuJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncywgaW5wdXQgPSBpbnRlcnAuZGVjb2RlYXJncyhpbnB1dCksIE5vbmUKKyAgICAgICAgICAgIGVudiwgYXN0ID0gYXJncworICAgICAgICAgICAgY3dkID0gZW52LmdldCgnUFdEJywgY3dkKQorICAgIGVsc2U6CisgICAgICAgIGNvbW1hbmRfZmlsZSA9IGNtZGFyZ3NbMF0KKyAgICAgICAgYXJndW1lbnRzID0gY21kYXJnc1sxOl0KKworICAgICAgICBwcmVmaXggPSBpbnRlcnAucmVzb2x2ZV9zaGViYW5nKGNvbW1hbmRfZmlsZSwgaWdub3Jlc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgaW5wdXQgPSAnICcuam9pbihwcmVmaXggKyBbY29tbWFuZF9maWxlXSArIGFyZ3VtZW50cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUmVhZCBjb21tYW5kcyBmcm9tIGZpbGUKKyAgICAgICAgICAgIGYgPSBmaWxlKGNvbW1hbmRfZmlsZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRyYWlsaW5nIG5ld2xpbmUgdG8gaGVscCB0aGUgcGFyc2VyCisgICAgICAgICAgICAgICAgaW5wdXQgPSBmLnJlYWQoKSArICdcbicKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgCisgICAgcmVkaXJlY3QgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBpZiBvcHRpb25zLnJlZGlyZWN0ZWQ6CisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzdGRlcnIgPSBzdGRvdXQKKyAgICAgICAgZWxpZiBvcHRpb25zLnJlZGlyZWN0X3RvOgorICAgICAgICAgICAgcmVkaXJlY3QgPSBvcGVuKG9wdGlvbnMucmVkaXJlY3RfdG8sICd3YicpCisgICAgICAgICAgICBzdGRvdXQgPSByZWRpcmVjdAorICAgICAgICAgICAgc3RkZXJyID0gcmVkaXJlY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgICAgIAorICAgICAgICAjIFRPRE86IHNldCBhcmd1bWVudHMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgIG9wdHMgPSBpbnRlcnAuT3B0aW9ucygpCisgICAgICAgIG9wdHMuaGdiaW5hcnkgPSBoZ2JpbgorICAgICAgICBpcCA9IGludGVycC5JbnRlcnByZXRlcihjd2QsIGRlYnVnZmxhZ3MsIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM9b3B0cykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBFeHBvcnQgZ2l2ZW4gZW52aXJvbm1lbnQgaW4gc2hlbGwgb2JqZWN0CisgICAgICAgICAgICBmb3Igayx2IGluIGVudi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpcC5nZXRfZW52KCkuZXhwb3J0KGssdikKKyAgICAgICAgICAgIHJldHVybiBpcC5leGVjdXRlX3NjcmlwdChpbnB1dCwgYXN0LCBzY3JpcHRwYXRoPWNvbW1hbmRfZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlwLmNsb3NlKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiByZWRpcmVjdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlZGlyZWN0LmNsb3NlKCkKKworZGVmIHNoKGN3ZD1Ob25lLCBhcmdzPU5vbmUsIGRlYnVnZmxhZ3M9Tm9uZSwgZW52PU5vbmUpOgorICAgIGlmIGFyZ3MgaXMgTm9uZToKKyAgICAgICAgYXJncyA9IHN5cy5hcmd2WzE6XQorICAgIHNoYXJncywgY21kYXJncyA9IHNwbGl0X2FyZ3MoYXJncykKKyAgICBvcHRpb25zLCBzaGFyZ3MgPSBTSF9PUFQucGFyc2VfYXJncyhzaGFyZ3MpCisKKyAgICBpZiBvcHRpb25zLnByb2ZpbGU6CisgICAgICAgIGltcG9ydCBsc3Byb2YKKyAgICAgICAgcCA9IGxzcHJvZi5Qcm9maWxlcigpCisgICAgICAgIHAuZW5hYmxlKHN1YmNhbGxzPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfc2goY3dkLCBzaGFyZ3MsIGNtZGFyZ3MsIG9wdGlvbnMsIGRlYnVnZmxhZ3MsIGVudikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHAuZGlzYWJsZSgpCisgICAgICAgICAgICBzdGF0cyA9IGxzcHJvZi5TdGF0cyhwLmdldHN0YXRzKCkpCisgICAgICAgICAgICBzdGF0cy5zb3J0KCkKKyAgICAgICAgICAgIHN0YXRzLnBwcmludCh0b3A9MTAsIGZpbGU9c3lzLnN0ZGVyciwgY2xpbWl0PTUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIF9zaChjd2QsIHNoYXJncywgY21kYXJncywgb3B0aW9ucywgZGVidWdmbGFncywgZW52KQorICAgICAgICAgICAgCitkZWYgbWFpbigpOgorICAgIHN5cy5leGl0KHNoKCkpCisKK2lmIF9fbmFtZV9fPT0nX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2hsZXgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaGxleC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzAxMjM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2hsZXgucHkKQEAgLTAsMCArMSw4ODggQEAKKyMgcHlzaGxleC5weSAtIFBMWSBjb21wYXRpYmxlIGxleGVyIGZvciBweXNoLgorIworIyBDb3B5cmlnaHQgMjAwNyBQYXRyaWNrIE1lemFyZAorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisKKyMgVE9ETzoKKyMgLSByZXZpZXcgYWxsICJjaGFyIGluICdhYmMnIiBzbmlwcGV0czogdGhlIGVtcHR5IHN0cmluZyBjYW4gYmUgbWF0Y2hlZAorIyAtIHRlc3QgbGluZSBjb250aW51YXRpb25zIHdpdGhpbiBxdW90ZWQvZXhwYW5zaW9uIHN0cmluZ3MKKyMgLSBlb2YgaXMgYnVnZ3kgd3J0IHN1YmxleGVycworIyAtIHRoZSBsZXhlciBjYW5ub3QgcmVhbGx5IHdvcmsgaW4gcHVsbCBtb2RlIGFzIGl0IHdvdWxkIGJlIHJlcXVpcmVkIHRvIHJ1bgorIyBQTFkgaW4gcHVsbCBtb2RlLiBJdCB3YXMgZGVzaWduZWQgdG8gd29yayBpbmNyZW1lbnRhbGx5IGFuZCBpdCB3b3VsZCBub3QgYmUKKyMgdGhhdCBoYXJkIHRvIGVuYWJsZSBwdWxsIG1vZGUuCitpbXBvcnQgcmUKK3RyeToKKyAgICBzID0gc2V0KCkKKyAgICBkZWwgcworZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBmcm9tIFNldCBpbXBvcnQgU2V0IGFzIHNldAorCitmcm9tIHBseSBpbXBvcnQgbGV4Citmcm9tIHNoZXJyb3JzIGltcG9ydCAqCisKK2NsYXNzIE5lZWRNb3JlKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgaXNfYmxhbmsoYyk6CisgICAgcmV0dXJuIGMgaW4gKCcgJywgJ1x0JykKKyAgICAKK19SRV9ESUdJVFMgPSByZS5jb21waWxlKHInXlxkKyQnKQorCitkZWYgYXJlX2RpZ2l0cyhzKToKKyAgICByZXR1cm4gX1JFX0RJR0lUUy5zZWFyY2gocykgaXMgbm90IE5vbmUKKworX09QRVJBVE9SUyA9IGRpY3QoWworICAgICgnJiYnLCAnQU5EX0lGJyksCisgICAgKCd8fCcsICdPUl9JRicpLAorICAgICgnOzsnLCAnRFNFTUknKSwKKyAgICAoJzw8JywgJ0RMRVNTJyksCisgICAgKCc+PicsICdER1JFQVQnKSwKKyAgICAoJzwmJywgJ0xFU1NBTkQnKSwKKyAgICAoJz4mJywgJ0dSRUFUQU5EJyksCisgICAgKCc8PicsICdMRVNTR1JFQVQnKSwKKyAgICAoJzw8LScsICdETEVTU0RBU0gnKSwKKyAgICAoJz58JywgJ0NMT0JCRVInKSwKKyAgICAoJyYnLCAnQU1QJyksCisgICAgKCc7JywgJ0NPTU1BJyksCisgICAgKCc8JywgJ0xFU1MnKSwKKyAgICAoJz4nLCAnR1JFQVRFUicpLAorICAgICgnKCcsICdMUEFSRU5TJyksCisgICAgKCcpJywgJ1JQQVJFTlMnKSwKK10pCisKKyNNYWtlIGEgZnVuY3Rpb24gdG8gc2lsZW5jZSBweWNoZWNrZXIgIkxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgZ2xvYmFsIgorZGVmIG1ha2VfcGFydGlhbF9vcHMoKToKKyAgICBwYXJ0aWFscyA9IHt9CisgICAgZm9yIGsgaW4gX09QRVJBVE9SUzoKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGspKzEpOgorICAgICAgICAgICAgcGFydGlhbHNba1s6aV1dID0gTm9uZQorICAgIHJldHVybiBwYXJ0aWFscyAgCisKK19QQVJUSUFMX09QRVJBVE9SUyA9IG1ha2VfcGFydGlhbF9vcHMoKSAgICAKKyAgICAgICAgCitkZWYgaXNfcGFydGlhbF9vcChzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzIG1hdGNoZXMgYSBub24tZW1wdHkgc3VicGFydCBvZiBhbiBvcGVyYXRvciBzdGFydGluZworICAgIGF0IGl0cyBmaXJzdCBjaGFyYWN0ZXIuCisgICAgIiIiCisgICAgcmV0dXJuIHMgaW4gX1BBUlRJQUxfT1BFUkFUT1JTCisgICAgCitkZWYgaXNfb3Aocyk6CisgICAgIiIiSWYgcyBtYXRjaGVzIGFuIG9wZXJhdG9yLCByZXR1cm5zIHRoZSBvcGVyYXRvciBpZGVudGlmaWVyLiBSZXR1cm4gTm9uZQorICAgIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICByZXR1cm4gX09QRVJBVE9SUy5nZXQocykKKworX1JFU0VSVkVEUyA9IGRpY3QoWworICAgICgnaWYnLCAnSWYnKSwKKyAgICAoJ3RoZW4nLCAnVGhlbicpLAorICAgICgnZWxzZScsICdFbHNlJyksCisgICAgKCdlbGlmJywgJ0VsaWYnKSwKKyAgICAoJ2ZpJywgJ0ZpJyksCisgICAgKCdkbycsICdEbycpLAorICAgICgnZG9uZScsICdEb25lJyksCisgICAgKCdjYXNlJywgJ0Nhc2UnKSwKKyAgICAoJ2VzYWMnLCAnRXNhYycpLAorICAgICgnd2hpbGUnLCAnV2hpbGUnKSwKKyAgICAoJ3VudGlsJywgJ1VudGlsJyksCisgICAgKCdmb3InLCAnRm9yJyksCisgICAgKCd7JywgJ0xicmFjZScpLAorICAgICgnfScsICdSYnJhY2UnKSwKKyAgICAoJyEnLCAnQmFuZycpLAorICAgICgnaW4nLCAnSW4nKSwKKyAgICAoJ3wnLCAnUElQRScpLAorXSkKKyAgICAKK2RlZiBnZXRfcmVzZXJ2ZWQocyk6CisgICAgcmV0dXJuIF9SRVNFUlZFRFMuZ2V0KHMpCisgICAgCitfUkVfTkFNRSA9IHJlLmNvbXBpbGUocideWzAtOWEtekEtWl9dKyQnKQorCitkZWYgaXNfbmFtZShzKToKKyAgICByZXR1cm4gX1JFX05BTUUuc2VhcmNoKHMpIGlzIG5vdCBOb25lCisKK2RlZiBmaW5kX2NoYXJzKHNlcSwgY2hhcnMpOgorICAgIGZvciBpLHYgaW4gZW51bWVyYXRlKHNlcSk6CisgICAgICAgIGlmIHYgaW4gY2hhcnM6CisgICAgICAgICAgICByZXR1cm4gaSx2CisgICAgcmV0dXJuIC0xLCBOb25lCisKK2NsYXNzIFdvcmRMZXhlcjoKKyAgICAiIiJXb3JkTGV4ZXIgcGFyc2UgcXVvdGVkIG9yIGV4cGFuc2lvbiBleHByZXNzaW9ucyBhbmQgcmV0dXJuIGFuIGV4cHJlc3Npb24KKyAgICB0cmVlLiBUaGUgaW5wdXQgc3RyaW5nIGNhbiBiZSBhbnkgd2VsbCBmb3JtZWQgc2VxdWVuY2UgYmVnaW5uaW5nIHdpdGggcXVvdGluZworICAgIG9yIGV4cGFuc2lvbiBjaGFyYWN0ZXIuIEVtYmVkZGVkIGV4cHJlc3Npb25zIGFyZSBoYW5kbGVkIHJlY3Vyc2l2ZWx5LiBUaGUKKyAgICByZXN1bHRpbmcgdHJlZSBpcyBtYWRlIG9mIGxpc3RzIGFuZCBzdHJpbmdzLiBMaXN0cyByZXByZXNlbnQgcXVvdGVkIG9yCisgICAgZXhwYW5zaW9uIGV4cHJlc3Npb25zLiBFYWNoIGxpc3QgZmlyc3QgZWxlbWVudCBpcyB0aGUgb3BlbmluZyBzZXBhcmF0b3IsCisgICAgdGhlIGxhc3Qgb25lIHRoZSBjbG9zaW5nIHNlcGFyYXRvci4gSW4tYmV0d2VlbiBjYW4gYmUgYW55IG51bWJlciBvZiBzdHJpbmdzCisgICAgb3IgbGlzdHMgZm9yIHN1Yi1leHByZXNzaW9ucy4gTm9uIHF1b3RlZC9leHBhbnNpb24gZXhwcmVzc2lvbiBjYW4gd3JpdHRlbiBhcworICAgIHN0cmluZ3Mgb3IgYXMgbGlzdHMgd2l0aCBlbXB0eSBzdHJpbmdzIGFzIHN0YXJ0aW5nIGFuZCBlbmRpbmcgZGVsaW1pdGVycy4KKyAgICAiIiIKKworICAgIE5BTUVfQ0hBUlNFVCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OV8nCisgICAgTkFNRV9DSEFSU0VUID0gZGljdCh6aXAoTkFNRV9DSEFSU0VULCBOQU1FX0NIQVJTRVQpKQorICAgIAorICAgIFNQRUNJQUxfQ0hBUlNFVCA9ICdAKiM/LSQhMCcKKyAgICAKKyAgICAjQ2hhcmFjdGVycyB3aGljaCBjYW4gYmUgZXNjYXBlZCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGRlbGltaXRlcnMKKyAgICBFU0NBUEFCTEUgPSB7CisgICAgICAgICdgJzogc2V0KFsnJCcsICdcXCcsICdgJ10pLAorICAgICAgICAnIic6IHNldChbJyQnLCAnXFwnLCAnYCcsICciJ10pLAorICAgICAgICAiJyI6IHNldCgpLAorICAgIH0KKyAgICAgICAgCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhlcmVkb2MgPSBGYWxzZSk6CisgICAgICAgICMgX2J1ZmZlciBpcyB0aGUgdW5wcm9jZXNzZWQgaW5wdXQgY2hhcmFjdGVycyBidWZmZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgIyBfc3RhY2sgaXMgZW1wdHkgb3IgY29udGFpbnMgYSBxdW90ZWQgbGlzdCBiZWluZyBwcm9jZXNzZWQKKyAgICAgICAgIyAodGhpcyBpcyB0aGUgREZTIHBhdGggdG8gdGhlIHF1b3RlZCBleHByZXNzaW9uIGJlaW5nIGV2YWx1YXRlZCkuCisgICAgICAgIHNlbGYuX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fZXNjYXBhYmxlID0gTm9uZQorICAgICAgICAjIFRydWUgd2hlbiBwYXJzaW5nIHVucXVvdGVkIGhlcmUgZG9jdW1lbnRzCisgICAgICAgIHNlbGYuX2hlcmVkb2MgPSBoZXJlZG9jCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgZGF0YSwgZW9mPUZhbHNlKToKKyAgICAgICAgIiIiRmVlZCB0aGUgbGV4ZXIgd2l0aCBtb3JlIGRhdGEuIElmIHRoZSBxdW90ZWQgZXhwcmVzc2lvbiBjYW4gYmUKKyAgICAgICAgZGVsaW1pdGVkLCByZXR1cm4gYSB0dXBsZSAoZXhwciwgcmVtYWluaW5nKSBjb250YWluaW5nIHRoZSBleHByZXNzaW9uCisgICAgICAgIHRyZWUgYW5kIHRoZSB1bmNvbnN1bWVkIGRhdGEuCisgICAgICAgIE90aGVyd2lzZSwgcmFpc2UgTmVlZE1vcmUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9idWZmZXIgKz0gbGlzdChkYXRhKQorICAgICAgICBzZWxmLl9wYXJzZShlb2YpCisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzZWxmLl9zdGFja1swXQorICAgICAgICByZW1haW5pbmcgPSAnJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5fc3RhY2sgPSBbXQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICByZXR1cm4gcmVzdWx0LCByZW1haW5pbmcKKyAgICAgICAgCisgICAgZGVmIF9pc19lc2NhcGFibGUoc2VsZiwgYywgZGVsaW09Tm9uZSk6CisgICAgICAgIGlmIGRlbGltIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9oZXJlZG9jOgorICAgICAgICAgICAgICAgICMgQmFja3NsYXNoZXMgd29ya3MgYXMgaWYgdGhleSB3ZXJlIGRvdWJsZSBxdW90ZWQgaW4gdW5xdW90ZWQKKyAgICAgICAgICAgICAgICAjIGhlcmUtZG9jdW1lbnRzCisgICAgICAgICAgICAgICAgZGVsaW0gPSAnIicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3N0YWNrKTw9MToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBkZWxpbSA9IHNlbGYuX3N0YWNrWy0yXVswXQorICAgICAgICAgICAgCisgICAgICAgIGVzY2FwYWJsZXMgPSBzZWxmLkVTQ0FQQUJMRS5nZXQoZGVsaW0sIE5vbmUpCisgICAgICAgIHJldHVybiBlc2NhcGFibGVzIGlzIE5vbmUgb3IgYyBpbiBlc2NhcGFibGVzCisgICAgICAgIAorICAgIGRlZiBfcGFyc2Vfc3F1b3RlKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3MgPSBidWYuaW5kZXgoIiciKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgcmVzdWx0ICs9IFsiJyJdCisgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2JxdW90ZShzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICBpZiBidWZbMF09PSdcbic6CisgICAgICAgICAgICAjUmVtb3ZlIGxpbmUgY29udGludWF0aW9ucworICAgICAgICAgICAgcmVzdWx0WzpdID0gWycnLCAnJywgJyddCisgICAgICAgIGVsaWYgc2VsZi5faXNfZXNjYXBhYmxlKGJ1ZlswXSk6CisgICAgICAgICAgICByZXN1bHRbLTFdICs9IGJ1ZlswXQorICAgICAgICAgICAgcmVzdWx0ICs9IFsnJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNLZWVwIGFzIHN1Y2gKKyAgICAgICAgICAgIHJlc3VsdFs6XSA9IFsnJywgJ1xcJytidWZbMF0sICcnXQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIDEsIFRydWUKKyAgICAgICAgCisgICAgZGVmIF9wYXJzZV9kcXVvdGUoc2VsZiwgYnVmLCByZXN1bHQsIGVvZik6CisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhidWYsICckXFxgIicpCisgICAgICAgIGlmIHBvcz09LTE6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgaWYgc2VwPT0nIic6CisgICAgICAgICAgICByZXN1bHQgKz0gWyciJ10KKyAgICAgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0tlZXAgZXZlcnl0aGluZyB1bnRpbCB0aGUgc2VwYXJhdG9yIGFuZCBkZWZlciBwcm9jZXNzaW5nCisgICAgICAgICAgICByZXR1cm4gcG9zLCBGYWxzZQorICAgICAgICAgICAgCisgICAgZGVmIF9wYXJzZV9jb21tYW5kKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorCisgICAgICAgIGNoYXJzID0gJyRcXGAiXCcnCisgICAgICAgIGlmIHJlc3VsdFswXSA9PSAnJCgnOgorICAgICAgICAgICAgY2hhcnMgKz0gJyknCisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhidWYsIGNoYXJzKQorICAgICAgICBpZiBwb3MgPT0gLTE6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgaWYgKHJlc3VsdFswXT09JyQoJyBhbmQgc2VwPT0nKScpIG9yIChyZXN1bHRbMF09PSdgJyBhbmQgc2VwPT0nYCcpOgorICAgICAgICAgICAgcmVzdWx0ICs9IFtzZXBdCisgICAgICAgICAgICByZXR1cm4gcG9zKzEsIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwb3MsIEZhbHNlCisgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX3BhcmFtZXRlcihzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICBwb3MsIHNlcCA9IGZpbmRfY2hhcnMoYnVmLCAnJFxcYCJcJ30nKQorICAgICAgICBpZiBwb3M9PS0xOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgCisgICAgICAgIHJlc3VsdFstMV0gKz0gJycuam9pbihidWZbOnBvc10pCisgICAgICAgIGlmIHNlcD09J30nOgorICAgICAgICAgICAgcmVzdWx0ICs9IFtzZXBdCisgICAgICAgICAgICByZXR1cm4gcG9zKzEsIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwb3MsIEZhbHNlCisgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2RvbGxhcihzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgc2VwID0gcmVzdWx0WzBdCisgICAgICAgIGlmIHNlcD09JyQnOiAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAjVE9ETzogaGFuZGxlIGVtcHR5ICQKKyAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICBpZiBidWZbMF09PScoJzoKKyAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKT09MToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBidWZbMV09PScoJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gJyQoKCcKKyAgICAgICAgICAgICAgICAgICAgYnVmWzoyXSA9IFtdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gJyQoJworICAgICAgICAgICAgICAgICAgICBidWZbOjFdID0gW10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGVsaWYgYnVmWzBdPT0neyc6CisgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gJyR7JworICAgICAgICAgICAgICAgIGJ1Zls6MV0gPSBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBidWZbMF0gaW4gc2VsZi5TUEVDSUFMX0NIQVJTRVQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gPSBidWZbMF0KKyAgICAgICAgICAgICAgICAgICAgcmVhZCA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcmVhZCxjIGluIGVudW1lcmF0ZShidWYpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyBub3QgaW4gc2VsZi5OQU1FX0NIQVJTRVQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1ZlswOnJlYWRdKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0Wy0xXToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzpdID0gWycnLCByZXN1bHRbMF0sICcnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBbJyddIAorICAgICAgICAgICAgICAgIHJldHVybiByZWFkLFRydWUKKyAgICAgICAgCisgICAgICAgIHNlcCA9IHJlc3VsdFswXSAgICAKKyAgICAgICAgaWYgc2VwPT0nJCgnOgorICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfY29tbWFuZAorICAgICAgICBlbGlmIHNlcD09JyR7JzoKKyAgICAgICAgICAgIHBhcnNlZnVuYyA9IHNlbGYuX3BhcnNlX3BhcmFtZXRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzZXApCisgICAgICAgICAgICAKKyAgICAgICAgcG9zLCBjbG9zZWQgPSBwYXJzZWZ1bmMoYnVmLCByZXN1bHQsIGVvZikKKyAgICAgICAgcmV0dXJuIHBvcywgY2xvc2VkCisKKyAgICBkZWYgX3BhcnNlKHNlbGYsIGVvZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuX2J1ZmZlcgorICAgICAgICBzdGFjayA9IHNlbGYuX3N0YWNrCisgICAgICAgIHJlY3Vyc2UgPSBGYWxzZQorICAgIAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaWYgbm90IHN0YWNrIG9yIHJlY3Vyc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgIGlmIGJ1ZlswXSBub3QgaW4gKCciXFxgJFwnJyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoJ0ludmFsaWQgcXVvdGVkIHN0cmluZyBzZXF1ZW5jZScpCisgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKFtidWZbMF0sICcnXSkKKyAgICAgICAgICAgICAgICBidWZbOjFdID0gW10KKyAgICAgICAgICAgICAgICByZWN1cnNlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YWNrWy0xXQorICAgICAgICAgICAgaWYgcmVzdWx0WzBdPT0iJyI6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2Vfc3F1b3RlCisgICAgICAgICAgICBlbGlmIHJlc3VsdFswXT09J1xcJzoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9icXVvdGUKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdPT0nIic6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfZHF1b3RlCisgICAgICAgICAgICBlbGlmIHJlc3VsdFswXT09J2AnOgorICAgICAgICAgICAgICAgIHBhcnNlZnVuYyA9IHNlbGYuX3BhcnNlX2NvbW1hbmQKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdWzBdPT0nJCc6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfZG9sbGFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVhZCwgY2xvc2VkID0gcGFyc2VmdW5jKGJ1ZiwgcmVzdWx0LCBlb2YpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBidWZbOnJlYWRdID0gW10KKyAgICAgICAgICAgIGlmIGNsb3NlZDoKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhY2spPjE6CisgICAgICAgICAgICAgICAgICAgICNNZXJnZSBpbiBwYXJlbnQgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGFja1stMV0gKz0gW3BhcnNlZF0KKyAgICAgICAgICAgICAgICAgICAgc3RhY2tbLTFdICs9IFsnJ10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWN1cnNlID0gVHJ1ZQorCitkZWYgbm9ybWFsaXplX3dvcmR0cmVlKHd0cmVlKToKKyAgICAiIiJGb2xkIGJhY2sgZXZlcnkgbGl0ZXJhbCBzZXF1ZW5jZSAoZGVsaW1pdGVkIHdpdGggZW1wdHkgc3RyaW5ncykgaW50bworICAgIHBhcmVudCBzZXF1ZW5jZS4KKyAgICAiIiIKKyAgICBkZWYgbm9ybWFsaXplKHd0cmVlKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWVbMTotMV06CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgIHBhcnQgPSBub3JtYWxpemUocGFydCkKKyAgICAgICAgICAgICAgICBpZiBwYXJ0WzBdPT0nJzoKKyAgICAgICAgICAgICAgICAgICAgI01vdmUgdGhlIHBhcnQgY29udGVudCBiYWNrIGF0IGN1cnJlbnQgbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHBhcnRbMTotMV0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgbm90IHBhcnQ6CisgICAgICAgICAgICAgICAgI1JlbW92ZSBlbXB0eSBzdHJpbmdzCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFydCkKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdCA9IFsnJ10gICAgCisgICAgICAgIHJldHVybiBbd3RyZWVbMF1dICsgcmVzdWx0ICsgW3d0cmVlWy0xXV0KKyAgICAgICAgICAgICAgICAKKyAgICByZXR1cm4gbm9ybWFsaXplKHd0cmVlKQorICAgIAorICAgICAgICAgICAgICAgIAorZGVmIG1ha2Vfd29yZHRyZWUodG9rZW4sIGhlcmVfZG9jdW1lbnQ9RmFsc2UpOgorICAgICIiIlBhcnNlIGEgZGVsaW1pdGVkIHRva2VuIGFuZCByZXR1cm4gYSB0cmVlIHNpbWlsYXIgdG8gdGhlIG9uZXMgcmV0dXJuZWQgYnkKKyAgICBXb3JkTGV4ZXIuIHRva2VuIG1heSBjb250YWluIGFueSBjb21iaW5hdGlvbnMgb2YgZXhwYW5zaW9uL3F1b3RlZCBmaWVsZHMgYW5kCisgICAgbm9uLW9uZXMuCisgICAgIiIiICAgIAorICAgIHRyZWUgPSBbJyddCisgICAgcmVtYWluaW5nID0gdG9rZW4KKyAgICBkZWxpbWl0ZXJzID0gJ1xcJGAnCisgICAgaWYgbm90IGhlcmVfZG9jdW1lbnQ6CisgICAgICAgIGRlbGltaXRlcnMgKz0gJ1wnIicKKyAgICAKKyAgICB3aGlsZSAxOgorICAgICAgICBwb3MsIHNlcCA9IGZpbmRfY2hhcnMocmVtYWluaW5nLCBkZWxpbWl0ZXJzKQorICAgICAgICBpZiBwb3M9PS0xOgorICAgICAgICAgICAgdHJlZSArPSBbcmVtYWluaW5nLCAnJ10KKyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVfd29yZHRyZWUodHJlZSkKKyAgICAgICAgdHJlZS5hcHBlbmQocmVtYWluaW5nWzpwb3NdKQorICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmdbcG9zOl0KKyAgICAgICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCwgcmVtYWluaW5nID0gV29yZExleGVyKGhlcmVkb2MgPSBoZXJlX2RvY3VtZW50KS5hZGQocmVtYWluaW5nLCBUcnVlKQorICAgICAgICBleGNlcHQgTmVlZE1vcmU6CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCdJbnZhbGlkIHRva2VuICIlcyInKQorICAgICAgICB0cmVlLmFwcGVuZChyZXN1bHQpCisgICAgICAgIAorICAgICAgICAgICAgICAgIAorZGVmIHdvcmR0cmVlX2FzX3N0cmluZyh3dHJlZSk6CisgICAgIiIiUmV3cml0ZSBhbiBleHByZXNzaW9uIHRyZWUgZ2VuZXJhdGVkIGJ5IG1ha2Vfd29yZHRyZWUgYXMgc3RyaW5nLiIiIgorICAgIGRlZiB2aXNpdChub2RlLCBvdXRwdXQpOgorICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIGxpc3QpOgorICAgICAgICAgICAgICAgIHZpc2l0KGNoaWxkLCBvdXRwdXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoY2hpbGQpCisgICAgCisgICAgb3V0cHV0ID0gW10KKyAgICB2aXNpdCh3dHJlZSwgb3V0cHV0KQorICAgIHJldHVybiAnJy5qb2luKG91dHB1dCkKKyAgICAKKyAgICAKK2RlZiB1bnF1b3RlX3dvcmR0cmVlKHd0cmVlKToKKyAgICAiIiJGb2xkIHRoZSB3b3JkIHRyZWUgd2hpbGUgcmVtb3ZpbmcgcXVvdGVzIGV2ZXJ5d2hlcmUuIE90aGVyIGV4cGFuc2lvbgorICAgIHNlcXVlbmNlcyBhcmUgam9pbmVkIGFzIHN1Y2guCisgICAgIiIiCisgICAgZGVmIHVucXVvdGUod3RyZWUpOgorICAgICAgICB1bnF1b3RlZCA9IFtdCisgICAgICAgIGlmIHd0cmVlWzBdIGluICgnJywgIiciLCAnIicsICdcXCcpOgorICAgICAgICAgICAgd3RyZWUgPSB3dHJlZVsxOi0xXQorICAgICAgICAgICAgCisgICAgICAgIGZvciBwYXJ0IGluIHd0cmVlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICBwYXJ0ID0gdW5xdW90ZShwYXJ0KQorICAgICAgICAgICAgdW5xdW90ZWQuYXBwZW5kKHBhcnQpCisgICAgICAgIHJldHVybiAnJy5qb2luKHVucXVvdGVkKQorICAgICAgICAgICAgCisgICAgcmV0dXJuIHVucXVvdGUod3RyZWUpCisgICAgCisgICAgCitjbGFzcyBIZXJlRG9jTGV4ZXI6CisgICAgIiIiSGVyZURvY0xleGVyIGRlbGltaXRzIHdoYXRldmVyIGNvbWVzIGZyb20gdGhlIGhlcmUtZG9jdW1lbnQgc3RhcnRpbmcgbmV3bGluZQorICAgIG5vdCBpbmNsdWRlZCB0byB0aGUgY2xvc2luZyBkZWxpbWl0ZXIgbGluZSBpbmNsdWRlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3AsIGRlbGltKToKKyAgICAgICAgYXNzZXJ0IG9wIGluICgnPDwnLCAnPDwtJykKKyAgICAgICAgaWYgbm90IGRlbGltOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignaW52YWxpZCBoZXJlIGRvY3VtZW50IGRlbGltaXRlciAlcycgJSBzdHIoZGVsaW0pKQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX29wID0gb3AKKyAgICAgICAgc2VsZi5fZGVsaW0gPSBkZWxpbQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLl90b2tlbiA9IFtdCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgZGF0YSwgZW9mKToKKyAgICAgICAgIiIiSWYgdGhlIGhlcmUtZG9jdW1lbnQgd2FzIGRlbGltaXRlZCwgcmV0dXJuIGEgdHVwbGUgKGNvbnRlbnQsIHJlbWFpbmluZykuCisgICAgICAgIFJhaXNlIE5lZWRNb3JlKCkgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYnVmZmVyICs9IGxpc3QoZGF0YSkKKyAgICAgICAgc2VsZi5fcGFyc2UoZW9mKQorICAgICAgICB0b2tlbiA9ICcnLmpvaW4oc2VsZi5fdG9rZW4pCisgICAgICAgIHJlbWFpbmluZyA9ICcnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBzZWxmLl90b2tlbiwgc2VsZi5fcmVtYWluaW5nID0gW10sIFtdCisgICAgICAgIHJldHVybiB0b2tlbiwgcmVtYWluaW5nCisgICAgCisgICAgZGVmIF9wYXJzZShzZWxmLCBlb2YpOgorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgI0xvb2sgZm9yIGZpcnN0IHVuZXNjYXBlZCBuZXdsaW5lLiBRdW90ZXMgbWF5IGJlIGlnbm9yZWQKKyAgICAgICAgICAgIGVzY2FwZWQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGksYyBpbiBlbnVtZXJhdGUoc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgICAgICBpZiBlc2NhcGVkOgorICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIGM9PSdcXCc6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBjPT0nXG4nOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpID0gLTEKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBpPT0tMSBvciBzZWxmLl9idWZmZXJbaV0hPSdcbic6CisgICAgICAgICAgICAgICAgaWYgbm90IGVvZjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgICNObyBtb3JlIGRhdGEsIG1heWJlIHRoZSBsYXN0IGxpbmUgaXMgY2xvc2luZyBkZWxpbWl0ZXIKKyAgICAgICAgICAgICAgICBsaW5lID0gJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgICAgICAgICAgZW9sID0gJycKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJbOl0gPSBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lID0gJycuam9pbihzZWxmLl9idWZmZXJbOmldKQorICAgICAgICAgICAgICAgIGVvbCA9IHNlbGYuX2J1ZmZlcltpXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcls6aSsxXSA9IFtdCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHNlbGYuX29wPT0nPDwtJzoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoJ1x0JykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGxpbmU9PXNlbGYuX2RlbGltOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBbbGluZSwgZW9sXQorICAgICAgICAgICAgaWYgaT09LTE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAKK2NsYXNzIFRva2VuOgorICAgICNUT0RPOiBjaGVjayB0aGlzIGlzIHN0aWxsIGluIHVzZQorICAgIE9QRVJBVE9SID0gJ09QRVJBVE9SJworICAgIFdPUkQgPSAnV09SRCcKKyAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudmFsdWUgPSAnJworICAgICAgICBzZWxmLnR5cGUgPSBOb25lCisgICAgICAgIAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAjQmVoYXZlIGxpa2UgYSB0d28gZWxlbWVudHMgdHVwbGUKKyAgICAgICAgaWYga2V5PT0wOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZQorICAgICAgICBpZiBrZXk9PTE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICByYWlzZSBJbmRleEVycm9yKGtleSkKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgCitjbGFzcyBIZXJlRG9jOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgbmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi5vcCA9IG9wCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5wZW5kaW5ncyA9IFtdCisgICAgICAgICAgICAgICAKK1RLX0NPTU1BICAgICAgICA9ICdDT01NQScKK1RLX0FNUEVSU0FORCAgICA9ICdBTVAnCitUS19PUCAgICAgICAgICAgPSAnT1AnCitUS19UT0tFTiAgICAgICAgPSAnVE9LRU4nCitUS19DT01NRU5UICAgICAgPSAnQ09NTUVOVCcKK1RLX05FV0xJTkUgICAgICA9ICdORVdMSU5FJyAKK1RLX0lPTlVNQkVSICAgICA9ICdJT19OVU1CRVInCitUS19BU1NJR05NRU5UICAgPSAnQVNTSUdOTUVOVF9XT1JEJworVEtfSEVSRU5BTUUgICAgID0gJ0hFUkVOQU1FJworCitjbGFzcyBMZXhlcjoKKyAgICAiIiJNYWluIGxleGVyLgorICAgIAorICAgIENhbGwgYWRkKCkgdW50aWwgdGhlIHNjcmlwdCBBU1QgaXMgcmV0dXJuZWQuCisgICAgIiIiCisgICAgIyBIZXJlLWRvY3VtZW50IGhhbmRsaW5nIG1ha2VzIHRoZSB3aG9sZSB0aGluZyBtb3JlIGNvbXBsZXggYmVjYXVzZSB0aGV5IGJhc2ljYWxseQorICAgICMgZm9yY2UgdG9rZW5zIHRvIGJlIHJlb3JkZXJlZDogaGVyZS1jb250ZW50IG11c3QgY29tZSByaWdodCBhZnRlciB0aGUgb3BlcmF0b3IKKyAgICAjIGFuZCB0aGUgaGVyZS1kb2N1bWVudCBuYW1lLCB3aGlsZSBzb21lIG90aGVyIHRva2VucyBtaWdodCBiZSBmb2xsb3dpbmcgdGhlCisgICAgIyBoZXJlLWRvY3VtZW50IGV4cHJlc3Npb24gb24gdGhlIHNhbWUgbGluZS4KKyAgICAjCisgICAgIyBTbywgaGVyZS1kb2Mgc3RhdGVzIGFyZSBiYXNpY2FsbHk6CisgICAgIyAgICpzZWxmLl9zdGF0ZT09U1RfTk9STUFMCisgICAgIyAgICAgICAtIHNlbGYuX2hlcmVkb2Mub3AgaXMgTm9uZTogbm8gaGVyZS1kb2N1bWVudAorICAgICMgICAgICAgLSBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lIGJ1dCBuYW1lIGlzOiBoZXJlLWRvY3VtZW50IG9wZXJhdG9yIG1hdGNoZWQsCisgICAgIyAgICAgICAgICAgd2FpdGluZyBmb3IgdGhlIGRvY3VtZW50IG5hbWUvZGVsaW1pdGVyCisgICAgIyAgICAgICAtIHNlbGYuX2hlcmVkb2Mub3AgYW5kIG5hbWUgYXJlIG5vdCBOb25lOiBoZXJlLWRvY3VtZW50IGlzIHJlYWR5LCBmb2xsb3dpbmcKKyAgICAjICAgICAgICAgICB0b2tlbnMgYXJlIGJlaW5nIHN0b3JlZCBhbmQgd2lsbCBiZSBwdXNoZWQgYWdhaW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMKKyAgICAjICAgICAgICAgICBjb21wbGV0ZWx5IHBhcnNlZC4KKyAgICAjICAgKnNlbGYuX3N0YXRlPT1TVF9IRVJFRE9DCisgICAgIyAgICAgICAtIFRoZSBoZXJlLWRvY3VtZW50IGlzIGJlaW5nIGRlbGltaXRlZCBieSBzZWxmLl9oZXJlbGV4ZXIuIE9uY2UgaXQgaXMgZG9uZQorICAgICMgICAgICAgICAgIHRoZSBjb250ZW50IGlzIHB1c2hlZCBpbiBmcm9udCBvZiB0aGUgcGVuZGluZyB0b2tlbiBsaXN0IHRoZW4gYWxsIHRoZXNlCisgICAgIyAgICAgICAgICAgdG9rZW5zIGFyZSBwdXNoZWQgb25jZSBhZ2Fpbi4KKyAgICBTVF9OT1JNQUwgICAgICAgPSAnU1RfTk9STUFMJworICAgIFNUX09QICAgICAgICAgICA9ICdTVF9PUCcKKyAgICBTVF9CQUNLU0xBU0ggICAgPSAnU1RfQkFDS1NMQVNIJworICAgIFNUX1FVT1RFRCAgICAgICA9ICdTVF9RVU9URUQnCisgICAgU1RfQ09NTUVOVCAgICAgID0gJ1NUX0NPTU1FTlQnCisgICAgU1RfSEVSRURPQyAgICAgID0gJ1NUX0hFUkVET0MnCisgICAgCisgICAgI01hdGNoIGVuZCBvZiBiYWNrcXVvdGUgc3RyaW5ncworICAgIFJFX0JBQ0tRVU9URV9FTkQgPSByZS5jb21waWxlKHInKD88IVxcKShgKScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50X3N0YXRlID0gTm9uZSk6CisgICAgICAgIHNlbGYuX2lucHV0ID0gW10KKyAgICAgICAgc2VsZi5fcG9zID0gMAorICAgICAgICAKKyAgICAgICAgc2VsZi5fdG9rZW4gPSAnJworICAgICAgICBzZWxmLl90eXBlID0gVEtfVE9LRU4KKyAgICAgICAgCisgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgc2VsZi5fcGFyZW50X3N0YXRlID0gcGFyZW50X3N0YXRlCisgICAgICAgIHNlbGYuX3dvcmRsZXhlciA9IE5vbmUKKyAgICAgICAgCisgICAgICAgIHNlbGYuX2hlcmVkb2MgPSBIZXJlRG9jKE5vbmUpCisgICAgICAgIHNlbGYuX2hlcmVsZXhlciA9IE5vbmUKKyAgICAgICAgCisgICAgICAgICMjIyBGb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgbm90IHVzZWQgZm9yIGRlbGltaXRpbmcgdG9rZW4gYW5kIGNhbiBzYWZlbHkKKyAgICAgICAgIyMjIGJlIGNoYW5nZWQgYWZ0ZXIgaGVyZS1kb2N1bWVudCBkZXRlY3Rpb24gKHNlZSBfcHVzaF90b2tlKQorICAgICAgICAKKyAgICAgICAgIyBDb3VudCB0aGUgbnVtYmVyIG9mIHRva2VucyBmb2xsb3dpbmcgYSAnRm9yJyByZXNlcnZlZCB3b3JkLiBOZWVkZWQgdG8KKyAgICAgICAgIyByZXR1cm4gYW4gJ0luJyByZXNlcnZlZCB3b3JkIGlmIGl0IGNvbWVzIGluIHRoaXJkIHBsYWNlLgorICAgICAgICBzZWxmLl9mb3JfY291bnQgPSBOb25lCisgICAgICAgIAorICAgIGRlZiBhZGQoc2VsZiwgZGF0YSwgZW9mPUZhbHNlKToKKyAgICAgICAgIiIiRmVlZCB0aGUgbGV4ZXIgd2l0aCBkYXRhLgorICAgICAgICAKKyAgICAgICAgV2hlbiBlb2YgaXMgc2V0IHRvIFRydWUsIHJldHVybnMgdW5jb25zdW1lZCBkYXRhIG9yIHJhaXNlIGlmIHRoZSBsZXhlcgorICAgICAgICBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgZGVsaW1pdGluZyBvcGVyYXRpb24uCisgICAgICAgIFJhaXNlIE5lZWRNb3JlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2lucHV0ICs9IGxpc3QoZGF0YSkKKyAgICAgICAgc2VsZi5fcGFyc2UoZW9mKQorICAgICAgICBzZWxmLl9pbnB1dFs6c2VsZi5fcG9zXSA9IFtdCisgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuX2lucHV0KQorICAgICAgICAKKyAgICBkZWYgX3BhcnNlKHNlbGYsIGVvZik6ICAgICAgICAgICAgCisgICAgICAgIHdoaWxlIHNlbGYuX3N0YXRlOgorICAgICAgICAgICAgaWYgc2VsZi5fcG9zPj1sZW4oc2VsZi5faW5wdXQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlIG5vdCBpbiAoc2VsZi5TVF9PUCwgc2VsZi5TVF9RVU9URUQsIHNlbGYuU1RfSEVSRURPQyk6CisgICAgICAgICAgICAgICAgICAgICNEZWxpbWl0IHRoZSBjdXJyZW50IHRva2VuIGFuZCBsZWF2ZSBjbGVhbmx5CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oJycpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgI0xldCB0aGUgc3VibGV4ZXIgaGFuZGxlIHRoZSBlb2YgdGhlbXNlbHZlcworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9OT1JNQUw6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfbm9ybWFsKCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGU9PXNlbGYuU1RfQ09NTUVOVDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9jb21tZW50KCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGU9PXNlbGYuU1RfT1A6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfb3AoZW9mKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9RVU9URUQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfcXVvdGVkKGVvZikKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGU9PXNlbGYuU1RfSEVSRURPQzoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9oZXJlZG9jKGVvZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAiVW5rbm93biBzdGF0ZSAiICsgc3RyKHNlbGYuX3N0YXRlKQorICAgICAgICAgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignbWlzc2luZyBoZXJlLWRvY3VtZW50IGRlbGltaXRlcicpCisgICAgICAgICAgICAgICAgCisgICAgZGVmIF9wYXJzZV9ub3JtYWwoc2VsZik6CisgICAgICAgIGMgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3NdCisgICAgICAgIGlmIGM9PSdcbic6CisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGMpCisgICAgICAgICAgICBzZWxmLl90b2tlbiA9IGMKKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19ORVdMSU5FCisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKCcnKQorICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgZWxpZiBjIGluICgnXFwnLCAnXCcnLCAnIicsICdgJywgJyQnKToKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9RVU9URUQKKyAgICAgICAgZWxpZiBpc19wYXJ0aWFsX29wKGMpOgorICAgICAgICAgICAgc2VsZi5fcHVzaF90b2tlbihjKQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfT1AKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuICs9IGMKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfT1AKKyAgICAgICAgZWxpZiBpc19ibGFuayhjKToKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oYykKKyAgICAgICAgICAgIAorICAgICAgICAgICAgI0Rpc2NhcmQgYmxhbmtzCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICBlbGlmIHNlbGYuX3Rva2VuOgorICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYworICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgZWxpZiBjPT0nIyc6CisgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfQ09NTUVOVAorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0NPTU1FTlQKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX29wKHNlbGYsIGVvZik6CisgICAgICAgIGFzc2VydCBzZWxmLl90b2tlbgorICAgICAgICAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Bvcz49bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAgICBpZiBub3QgZW9mOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgYyA9ICcnCisgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgb3AgPSBzZWxmLl90b2tlbiArIGMKKyAgICAgICAgICAgIGlmIGMgYW5kIGlzX3BhcnRpYWxfb3Aob3ApOgorICAgICAgICAgICAgICAgICNTdGlsbCBwYXJzaW5nIGFuIG9wZXJhdG9yCisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSBvcAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICNFbmQgb2Ygb3BlcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGMpICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2NvbW1lbnQoc2VsZik6CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3M+PWxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgYyA9IHNlbGYuX2lucHV0W3NlbGYuX3Bvc10KKyAgICAgICAgICAgIGlmIGM9PSdcbic6CisgICAgICAgICAgICAgICAgI0VuZCBvZiBjb21tZW50LCBkbyBub3QgY29uc3VtZSB0aGUgZW5kIG9mIGxpbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYworICAgICAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICAgICAgCisgICAgZGVmIF9wYXJzZV9xdW90ZWQoc2VsZiwgZW9mKToKKyAgICAgICAgIiIiUHJlY29uZGl0aW9uOiB0aGUgc3RhcnRpbmcgYmFja3F1b3RlL2RvbGxhciBpcyBzdGlsbCBpbiB0aGUgaW5wdXQgcXVldWUuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl93b3JkbGV4ZXI6CisgICAgICAgICAgICBzZWxmLl93b3JkbGV4ZXIgPSBXb3JkTGV4ZXIoKQorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fcG9zPGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgI1RyYW5zZmVyIGlucHV0IHF1ZXVlIGNoYXJhY3RlciBpbnRvIHRoZSBzdWJwYXJzZXIKKyAgICAgICAgICAgIGlucHV0ID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zOl0KKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oaW5wdXQpCisgICAgICAgICAgICAKKyAgICAgICAgd3RyZWUsIHJlbWFpbmluZyA9IHNlbGYuX3dvcmRsZXhlci5hZGQoaW5wdXQsIGVvZikKKyAgICAgICAgc2VsZi5fd29yZGxleGVyID0gTm9uZQorICAgICAgICBzZWxmLl90b2tlbiArPSB3b3JkdHJlZV9hc19zdHJpbmcod3RyZWUpCisgICAgICAgIAorICAgICAgICAjUHV0IHVucGFyc2VkIGNoYXJhY3RlciBiYWNrIGluIHRoZSBpbnB1dCBxdWV1ZQorICAgICAgICBpZiByZW1haW5pbmc6CisgICAgICAgICAgICBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6c2VsZi5fcG9zXSA9IGxpc3QocmVtYWluaW5nKSAgICAgICAgICAKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBzZWxmLlNUX05PUk1BTAorICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2hlcmVkb2Moc2VsZiwgZW9mKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl90b2tlbgorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5faGVyZWxleGVyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9oZXJlbGV4ZXIgPSBIZXJlRG9jTGV4ZXIoc2VsZi5faGVyZWRvYy5vcCwgc2VsZi5faGVyZWRvYy5uYW1lKQorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fcG9zPGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgI1RyYW5zZmVyIGlucHV0IHF1ZXVlIGNoYXJhY3RlciBpbnRvIHRoZSBzdWJwYXJzZXIKKyAgICAgICAgICAgIGlucHV0ID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zOl0KKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oaW5wdXQpCisgICAgICAgIAorICAgICAgICBzZWxmLl90b2tlbiwgcmVtYWluaW5nID0gc2VsZi5faGVyZWxleGVyLmFkZChpbnB1dCwgZW9mKQorICAgICAgICAKKyAgICAgICAgI1Jlc2V0IGhlcmUtZG9jdW1lbnQgc3RhdGUKKyAgICAgICAgc2VsZi5faGVyZWxleGVyID0gTm9uZQorICAgICAgICBoZXJlZG9jLCBzZWxmLl9oZXJlZG9jID0gc2VsZi5faGVyZWRvYywgSGVyZURvYyhOb25lKQorICAgICAgICBpZiByZW1haW5pbmc6CisgICAgICAgICAgICBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6c2VsZi5fcG9zXSA9IGxpc3QocmVtYWluaW5nKQorICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgIAorICAgICAgICAjUHVzaCBwZW5kaW5nIHRva2VucworICAgICAgICBoZXJlZG9jLnBlbmRpbmdzWzowXSA9IFsoc2VsZi5fdG9rZW4sIHNlbGYuX3R5cGUsIGhlcmVkb2MubmFtZSldCisgICAgICAgIGZvciB0b2tlbiwgdHlwZSwgZGVsaW0gaW4gaGVyZWRvYy5wZW5kaW5nczoKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuID0gdG9rZW4KKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSB0eXBlCisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGRlbGltKQorICAgICAgICAgICAgICAgICAgICAgCisgICAgZGVmIF9wdXNoX3Rva2VuKHNlbGYsIGRlbGltKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Rva2VuOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5faGVyZWRvYy5uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgI0hlcmUtZG9jdW1lbnQgbmFtZQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3R5cGUhPVRLX1RPS0VOOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCJleHBlY3RpbmcgaGVyZS1kb2N1bWVudCBuYW1lLCBnb3QgJyVzJyIgJSBzZWxmLl90b2tlbikKKyAgICAgICAgICAgICAgICBzZWxmLl9oZXJlZG9jLm5hbWUgPSB1bnF1b3RlX3dvcmR0cmVlKG1ha2Vfd29yZHRyZWUoc2VsZi5fdG9rZW4pKQorICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19IRVJFTkFNRQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjQ2FwdHVyZSBhbGwgdG9rZW5zIHVudGlsIHRoZSBuZXdsaW5lIHN0YXJ0aW5nIHRoZSBoZXJlLWRvY3VtZW50CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdHlwZT09VEtfTkVXTElORToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3N0YXRlPT1zZWxmLlNUX05PUk1BTAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfSEVSRURPQyAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLl9oZXJlZG9jLnBlbmRpbmdzLmFwcGVuZCgoc2VsZi5fdG9rZW4sIHNlbGYuX3R5cGUsIGRlbGltKSkgICAgCisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSAnJworICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgCisgICAgICAgICMgQkVXQVJFOiBkbyBub3QgY2hhbmdlIHBhcnNlciBzdGF0ZSBmcm9tIGhlcmUgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb246CisgICAgICAgICMgd2hlbiBwYXJzaW5nIGJldHdlZW4gYW4gaGVyZS1kb2N1bWVudCBvcGVyYXRvciB0byB0aGUgZW5kIG9mIHRoZSBsaW5lCisgICAgICAgICMgdG9rZW5zIGFyZSBzdG9yZWQgaW4gc2VsZi5faGVyZWRvYy5wZW5kaW5ncy4gVGhlcmVmb3JlLCB0aGV5IHdpbGwgbm90CisgICAgICAgICMgcmVhY2ggdGhlIHNlY3Rpb24gYmVsb3cuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAjQ2hlY2sgb3BlcmF0b3JzCisgICAgICAgIGlmIHNlbGYuX3R5cGU9PVRLX09QOgorICAgICAgICAgICAgI0ZhbHNlIHBvc2l0aXZlIGJlY2F1c2Ugb2YgcGFydGlhbCBvcCBtYXRjaGluZworICAgICAgICAgICAgb3AgPSBpc19vcChzZWxmLl90b2tlbikKKyAgICAgICAgICAgIGlmIG5vdCBvcDoKKyAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfVE9LRU4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI01hcCB0byB0aGUgc3BlY2lmaWMgb3BlcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gb3AKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90b2tlbiBpbiAoJzw8JywgJzw8LScpOgorICAgICAgICAgICAgICAgICAgICAjRG9uZSBoZXJlIHJhdGhlciB0aGFuIGluIF9wYXJzZV9vcCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgI3RvIGNoYW5nZSB0aGUgcGFyc2VyIHN0YXRlIHNpbmNlIHdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvcgorICAgICAgICAgICAgICAgICAgICAjdGhlIGhlcmUtZG9jdW1lbnQgbmFtZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm9wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcigic3ludGF4IGVycm9yIG5lYXIgdG9rZW4gJyVzJyIgJSBzZWxmLl90b2tlbikKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX2hlcmVkb2Mub3AgaXMgTm9uZQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oZXJlZG9jLm9wID0gc2VsZi5fdG9rZW4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fdHlwZT09VEtfVE9LRU46ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAnPScgaW4gc2VsZi5fdG9rZW4gYW5kIG5vdCBkZWxpbToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90b2tlbi5zdGFydHN3aXRoKCc9Jyk6CisgICAgICAgICAgICAgICAgICAgICNUb2tlbiBpcyBhIFdPUkQuLi4gYSBUT0tFTiB0aGF0IGlzLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJldiA9IHNlbGYuX3Rva2VuWzpzZWxmLl90b2tlbi5maW5kKCc9JyldCisgICAgICAgICAgICAgICAgICAgIGlmIGlzX25hbWUocHJldik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfQVNTSUdOTUVOVAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgI0p1c3QgYSB0b2tlbiAodW5zcGVjaWZpZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc2VydmVkID0gZ2V0X3Jlc2VydmVkKHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgICAgIGlmIHJlc2VydmVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiByZXNlcnZlZD09J0luJyBhbmQgc2VsZi5fZm9yX2NvdW50IT0yOgorICAgICAgICAgICAgICAgICAgICAgICAgI1NvcnJ5LCBub3QgYSByZXNlcnZlZCB3b3JkIGFmdGVyIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXNlcnZlZCBpbiAoJ0ZvcicsICdDYXNlJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9yX2NvdW50ID0gMCAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZWxpZiBhcmVfZGlnaXRzKHNlbGYuX3Rva2VuKSBhbmQgZGVsaW0gaW4gKCc8JywgJz4nKToKKyAgICAgICAgICAgICAgICAgICAgI0RldGVjdCBJT19OVU1CRVIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0lPTlVNQkVSCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl90b2tlbj09JzsnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfQ09NTUEKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3Rva2VuPT0nJic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19BTVBFUlNBTkQKKyAgICAgICAgZWxpZiBzZWxmLl90eXBlPT1US19DT01NRU5UOgorICAgICAgICAgICAgI0NvbW1lbnRzIGFyZSBub3QgcGFydCBvZiBzaCBncmFtbWFyLCBpZ25vcmUgdGhlbQorICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSAnJworICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX1RPS0VOCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAKKyAgICAgICAgaWYgc2VsZi5fZm9yX2NvdW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgI1RyYWNrIHRva2VuIGNvdW50IGluICdGb3InIGV4cHJlc3Npb24gdG8gZGV0ZWN0ICdJbicgcmVzZXJ2ZWQgd29yZHMuCisgICAgICAgICAgICAjQ2FuIG9ubHkgYmUgaW4gdGhpcmQgcG9zaXRpb24sIG5vIG5lZWQgdG8gZ28gYmV5b25kCisgICAgICAgICAgICBzZWxmLl9mb3JfY291bnQgKz0gMQorICAgICAgICAgICAgaWYgc2VsZi5fZm9yX2NvdW50PT0zOgorICAgICAgICAgICAgICAgIHNlbGYuX2Zvcl9jb3VudCA9IE5vbmUKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgc2VsZi5vbl90b2tlbigoc2VsZi5fdG9rZW4sIHNlbGYuX3R5cGUpKQorICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgZGVmIG9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgICAgICAKKwordG9rZW5zID0gWworICAgIFRLX1RPS0VOLAorIyBUbyBzaWxlbmNlIHlhY2MgdW51c2VkIHRva2VuIHdhcm5pbmdzCisjICAgIFRLX0NPTU1FTlQsCisgICAgVEtfTkVXTElORSwKKyAgICBUS19JT05VTUJFUiwKKyAgICBUS19BU1NJR05NRU5ULAorICAgIFRLX0hFUkVOQU1FLAorXSAgICAgICAgICAgIAorCisjQWRkIHNwZWNpZmljIG9wZXJhdG9ycwordG9rZW5zICs9IF9PUEVSQVRPUlMudmFsdWVzKCkKKyNBZGQgcmVzZXJ2ZWQgd29yZHMKK3Rva2VucyArPSBfUkVTRVJWRURTLnZhbHVlcygpCisgICAgICAgICAgICAKK2NsYXNzIFBMWUxleGVyKExleGVyKToKKyAgICAiIiJCcmlkZ2UgTGV4ZXIgYW5kIFBMWSBsZXhlciBpbnRlcmZhY2UuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBMZXhlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl90b2tlbnMgPSBbXQorICAgICAgICBzZWxmLl9jdXJyZW50ID0gMAorICAgICAgICBzZWxmLmxpbmVubyA9IDAKKworICAgIGRlZiBvbl90b2tlbihzZWxmLCB0b2tlbik6CisgICAgICAgIHZhbHVlLCB0eXBlID0gdG9rZW4KKworICAgICAgICBzZWxmLmxpbmVubyA9IDAKKyAgICAgICAgdCA9IGxleC5MZXhUb2tlbigpCisgICAgICAgIHQudmFsdWUgPSB2YWx1ZQorICAgICAgICB0LnR5cGUgPSB0eXBlCisgICAgICAgIHQubGV4ZXIgPSBzZWxmCisgICAgICAgIHQubGV4cG9zID0gMAorICAgICAgICB0LmxpbmVubyA9IDAKKyAgICAgICAgCisgICAgICAgIHNlbGYuX3Rva2Vucy5hcHBlbmQodCkKKyAgICAgICAgCisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IGJvb2woc2VsZi5fdG9rZW5zKQorICAgICAgICAKKyAgICAjUExZIGNvbXBsaWFudCBpbnRlcmZhY2UKKyAgICBkZWYgdG9rZW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQ+PWxlbihzZWxmLl90b2tlbnMpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdCA9IHNlbGYuX3Rva2Vuc1tzZWxmLl9jdXJyZW50XQorICAgICAgICBzZWxmLl9jdXJyZW50ICs9IDEKKyAgICAgICAgcmV0dXJuIHQgICAgICAKKyAgICAgICAgCisgICAgICAgIAorZGVmIGdldF90b2tlbnMocyk6CisgICAgIiIiUGFyc2UgdGhlIGlucHV0IHN0cmluZyBhbmQgcmV0dXJuIGEgdHVwbGUgKHRva2VucywgdW5wcm9jZXNzZWQpIHdoZXJlCisgICAgdG9rZW5zIGlzIGEgbGlzdCBvZiBwYXJzZWQgdG9rZW5zIGFuZCB1bnByb2Nlc3NlZCBpcyB0aGUgcGFydCBvZiB0aGUgaW5wdXQKKyAgICBzdHJpbmcgbGVmdCB1bnRvdWNoZWQgYnkgdGhlIGxleGVyLgorICAgICIiIgorICAgIGxleGVyID0gUExZTGV4ZXIoKQorICAgIHVudG91Y2hlZCA9IGxleGVyLmFkZChzLCBUcnVlKSAKKyAgICB0b2tlbnMgPSBbXQorICAgIHdoaWxlIDE6CisgICAgICAgIHRva2VuID0gbGV4ZXIudG9rZW4oKQorICAgICAgICBpZiB0b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdG9rZW5zLmFwcGVuZCh0b2tlbikKKyAgICAgICAgCisgICAgdG9rZW5zID0gWyh0LnZhbHVlLCB0LnR5cGUpIGZvciB0IGluIHRva2Vuc10KKyAgICByZXR1cm4gdG9rZW5zLCB1bnRvdWNoZWQgICAgICAgIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2h5YWNjLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2h5YWNjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTgwYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaHlhY2MucHkKQEAgLTAsMCArMSw3NzkgQEAKKyMgcHlzaHlhY2MucHkgLSBQTFkgZ3JhbW1hciBkZWZpbml0aW9uIGZvciBweXNoCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiUExZIGdyYW1tYXIgZmlsZS4KKyIiIgoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKKworaW1wb3J0IHB5c2hsZXgKK3Rva2VucyA9IHB5c2hsZXgudG9rZW5zCisKK2Zyb20gcGx5IGltcG9ydCB5YWNjCitpbXBvcnQgc2hlcnJvcnMKKyAgICAKK2NsYXNzIElPUmVkaXJlY3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wLCBmaWxlbmFtZSwgaW9fbnVtYmVyPU5vbmUpOgorICAgICAgICBzZWxmLm9wID0gb3AKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuaW9fbnVtYmVyID0gaW9fbnVtYmVyCisgICAgICAgIAorY2xhc3MgSGVyZURvY3VtZW50OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgbmFtZSwgY29udGVudCwgaW9fbnVtYmVyPU5vbmUpOgorICAgICAgICBzZWxmLm9wID0gb3AKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmNvbnRlbnQgPSBjb250ZW50CisgICAgICAgIHNlbGYuaW9fbnVtYmVyID0gaW9fbnVtYmVyCisKK2RlZiBtYWtlX2lvX3JlZGlyZWN0KHApOgorICAgICIiIk1ha2UgYW4gSU9SZWRpcmVjdCBpbnN0YW5jZSBmcm9tIHRoZSBpbnB1dCAnaW9fcmVkaXJlY3QnIHByb2R1Y3Rpb24uIiIiCisgICAgbmFtZSwgaW9fbnVtYmVyLCBpb190YXJnZXQgPSBwCisgICAgYXNzZXJ0IG5hbWU9PSdpb19yZWRpcmVjdCcKKyAgICAKKyAgICBpZiBpb190YXJnZXRbMF09PSdpb19maWxlJzoKKyAgICAgICAgaW9fdHlwZSwgaW9fb3AsIGlvX2ZpbGUgPSBpb190YXJnZXQKKyAgICAgICAgcmV0dXJuIElPUmVkaXJlY3QoaW9fb3AsIGlvX2ZpbGUsIGlvX251bWJlcikKKyAgICBlbGlmIGlvX3RhcmdldFswXT09J2lvX2hlcmUnOgorICAgICAgICBpb190eXBlLCBpb19vcCwgaW9fbmFtZSwgaW9fY29udGVudCA9IGlvX3RhcmdldAorICAgICAgICByZXR1cm4gSGVyZURvY3VtZW50KGlvX29wLCBpb19uYW1lLCBpb19jb250ZW50LCBpb19udW1iZXIpCisgICAgZWxzZToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiSW52YWxpZCBJTyByZWRpcmVjdGlvbiB0b2tlbiAlcyIgJSByZXByKGlvX3R5cGUpCisgICAgICAgIAorY2xhc3MgU2ltcGxlQ29tbWFuZDoKKyAgICAiIiIKKyAgICBhc3NpZ25zIGNvbnRhaW5zIChuYW1lLCB2YWx1ZSkgcGFpcnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmRzLCByZWRpcnMsIGFzc2lnbnMpOgorICAgICAgICBzZWxmLndvcmRzID0gbGlzdCh3b3JkcykKKyAgICAgICAgc2VsZi5yZWRpcnMgPSBsaXN0KHJlZGlycykKKyAgICAgICAgc2VsZi5hc3NpZ25zID0gbGlzdChhc3NpZ25zKQorCitjbGFzcyBQaXBlbGluZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZHMsIHJldmVyc2Vfc3RhdHVzPUZhbHNlKToKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IGxpc3QoY29tbWFuZHMpCisgICAgICAgIGFzc2VydCBzZWxmLmNvbW1hbmRzICAgICNHcmFtbWFyIGZvcmJpZHMgdGhpcworICAgICAgICBzZWxmLnJldmVyc2Vfc3RhdHVzID0gcmV2ZXJzZV9zdGF0dXMKKyAgICAgICAgCitjbGFzcyBBbmRPcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3AsIGxlZnQsIHJpZ2h0KToKKyAgICAgICAgc2VsZi5vcCA9IHN0cihvcCkKKyAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAorICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKKyAgICAgICAgCitjbGFzcyBGb3JMb29wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBpdGVtcywgY21kcyk6CisgICAgICAgIHNlbGYubmFtZSA9IHN0cihuYW1lKQorICAgICAgICBzZWxmLml0ZW1zID0gbGlzdChpdGVtcykKKyAgICAgICAgc2VsZi5jbWRzID0gbGlzdChjbWRzKQorICAgICAgICAKK2NsYXNzIFdoaWxlTG9vcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZGl0aW9uLCBjbWRzKToKKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBsaXN0KGNvbmRpdGlvbikKKyAgICAgICAgc2VsZi5jbWRzID0gbGlzdChjbWRzKQorICAgICAgICAKK2NsYXNzIFVudGlsTG9vcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZGl0aW9uLCBjbWRzKToKKyAgICAgICAgc2VsZi5jb25kaXRpb24gPSBsaXN0KGNvbmRpdGlvbikKKyAgICAgICAgc2VsZi5jbWRzID0gbGlzdChjbWRzKQorCitjbGFzcyBGdW5EZWY6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGJvZHkpOgorICAgICAgICBzZWxmLm5hbWUgPSBzdHIobmFtZSkKKyAgICAgICAgc2VsZi5ib2R5ID0gYm9keQorICAgICAgICAKK2NsYXNzIEJyYWNlR3JvdXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMpOgorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisgICAgICAgIAorY2xhc3MgSWZDb25kOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25kLCBpZl9jbWRzLCBlbHNlX2NtZHMpOgorICAgICAgICBzZWxmLmNvbmQgPSBsaXN0KGNvbmQpCisgICAgICAgIHNlbGYuaWZfY21kcyA9IGlmX2NtZHMKKyAgICAgICAgc2VsZi5lbHNlX2NtZHMgPSBlbHNlX2NtZHMKKworY2xhc3MgQ2FzZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgaXRlbXMpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuaXRlbXMgPSBpdGVtcworICAgICAgICAKK2NsYXNzIFN1YlNoZWxsOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzKToKKyAgICAgICAgc2VsZi5jbWRzID0gY21kcworCitjbGFzcyBSZWRpcmVjdExpc3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZCwgcmVkaXJzKToKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5yZWRpcnMgPSBsaXN0KHJlZGlycykKKyAgICAgICAgCitkZWYgZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsIHB0eXBlKToKKyAgICAiIiJwcm9kdWN0aW9ucyBtdXN0IGJlIGEgbGlzdCBvZiBwcm9kdWN0aW9uIHR1cGxlcyBsaWtlIChuYW1lLCBvYmopIHdoZXJlCisgICAgbmFtZSBpcyB0aGUgcHJvZHVjdGlvbiBzdHJpbmcgaWRlbnRpZmllci4KKyAgICBSZXR1cm4gdGhlIGZpcnN0IHByb2R1Y3Rpb24gbmFtZWQgJ3B0eXBlJy4gUmFpc2UgS2V5RXJyb3IgaWYgTm9uZSBjYW4gYmUKKyAgICBmb3VuZC4KKyAgICAiIiIKKyAgICBmb3IgcHJvZHVjdGlvbiBpbiBwcm9kdWN0aW9uczoKKyAgICAgICAgaWYgcHJvZHVjdGlvbiBpcyBub3QgTm9uZSBhbmQgcHJvZHVjdGlvblswXT09cHR5cGU6CisgICAgICAgICAgICByZXR1cm4gcHJvZHVjdGlvbgorICAgIHJhaXNlIEtleUVycm9yKHB0eXBlKQorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUExZIGdyYW1tYXIgZGVmaW5pdGlvbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHBfbXVsdGlwbGVfY29tbWFuZHMocCk6CisgICAgIiIibXVsdGlwbGVfY29tbWFuZHMgOiBuZXdsaW5lX3NlcXVlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb21wbGV0ZV9jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBtdWx0aXBsZV9jb21tYW5kcyBjb21wbGV0ZV9jb21tYW5kIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBpZiBwWzFdIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcFswXSA9IFtwWzFdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcFswXSA9IFtdCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFsyXV0KKworZGVmIHBfY29tcGxldGVfY29tbWFuZChwKToKKyAgICAiIiJjb21wbGV0ZV9jb21tYW5kIDogbGlzdCBzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgbGlzdCIiIgorICAgIGlmIGxlbihwKT09MyBhbmQgcFsyXSBhbmQgcFsyXVsxXSA9PSAnJic6CisgICAgICAgIHBbMF0gPSAoJ2FzeW5jJywgcFsxXSkKKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2xpc3QocCk6CisgICAgIiIibGlzdCA6IGxpc3Qgc2VwYXJhdG9yX29wIGFuZF9vcgorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBhbmRfb3IiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbcFsxXV0KKyAgICBlbHNlOgorICAgICAgICAjaWYgcFsyXSE9JzsnOgorICAgICAgICAjICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0FORC1PUiBsaXN0IGFzeW5jaHJvbm91cyBleGVjdXRpb24gaXMgbm90IGltcGxlbWVudGVkJykKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFszXV0KKyAgICAgICAKK2RlZiBwX2FuZF9vcihwKToKKyAgICAiIiJhbmRfb3IgOiBwaXBlbGluZQorICAgICAgICAgICAgICB8IGFuZF9vciBBTkRfSUYgbGluZWJyZWFrIHBpcGVsaW5lCisgICAgICAgICAgICAgIHwgYW5kX29yIE9SX0lGICBsaW5lYnJlYWsgcGlwZWxpbmUiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBwWzFdCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9ICgnYW5kX29yJywgQW5kT3IocFsyXSwgcFsxXSwgcFs0XSkpCisgICAgICAgIAorZGVmIHBfbWF5YmVfYmFuZ193b3JkKHApOgorICAgICIiIm1heWJlX2Jhbmdfd29yZCA6IEJhbmciIiIKKyAgICBwWzBdID0gKCdtYXliZV9iYW5nX3dvcmQnLCBwWzFdKQorICAgICAgICAgICAgCitkZWYgcF9waXBlbGluZShwKToKKyAgICAiIiJwaXBlbGluZSA6IHBpcGVfc2VxdWVuY2UKKyAgICAgICAgICAgICAgICB8IGJhbmdfd29yZCBwaXBlX3NlcXVlbmNlIiIiCisgICAgaWYgbGVuKHApPT0zOgorICAgICAgICBwWzBdID0gKCdwaXBlbGluZScsIFBpcGVsaW5lKHBbMl1bMTpdLCBUcnVlKSkKKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gKCdwaXBlbGluZScsIFBpcGVsaW5lKHBbMV1bMTpdKSkKKworZGVmIHBfcGlwZV9zZXF1ZW5jZShwKToKKyAgICAiIiJwaXBlX3NlcXVlbmNlIDogY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgfCBwaXBlX3NlcXVlbmNlIFBJUEUgbGluZWJyZWFrIGNvbW1hbmQiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ3BpcGVfc2VxdWVuY2UnLCBwWzFdXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgW3BbNF1dCisKK2RlZiBwX2NvbW1hbmQocCk6CisgICAgIiIiY29tbWFuZCA6IHNpbXBsZV9jb21tYW5kCisgICAgICAgICAgICAgICB8IGNvbXBvdW5kX2NvbW1hbmQKKyAgICAgICAgICAgICAgIHwgY29tcG91bmRfY29tbWFuZCByZWRpcmVjdF9saXN0CisgICAgICAgICAgICAgICB8IGZ1bmN0aW9uX2RlZmluaXRpb24iIiIKKyAgICAgICAgCisgICAgaWYgcFsxXVswXSBpbiAoICdzaW1wbGVfY29tbWFuZCcsIAorICAgICAgICAgICAgICAgICAgICAnZm9yX2NsYXVzZScsCisgICAgICAgICAgICAgICAgICAgICd3aGlsZV9jbGF1c2UnLAorICAgICAgICAgICAgICAgICAgICAndW50aWxfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ2Nhc2VfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ2lmX2NsYXVzZScsCisgICAgICAgICAgICAgICAgICAgICdmdW5jdGlvbl9kZWZpbml0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgJ3N1YnNoZWxsJywKKyAgICAgICAgICAgICAgICAgICAgJ2JyYWNlX2dyb3VwJywpOgorICAgICAgICBpZiBsZW4ocCkgPT0gMjoKKyAgICAgICAgICAgIHBbMF0gPSBwWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwWzBdID0gKCdyZWRpcmVjdF9saXN0JywgUmVkaXJlY3RMaXN0KHBbMV0sIHBbMl1bMTpdKSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCcgJSByZXByKHBbMV1bMF0pKQorCitkZWYgcF9jb21wb3VuZF9jb21tYW5kKHApOgorICAgICIiImNvbXBvdW5kX2NvbW1hbmQgOiBicmFjZV9ncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgfCBzdWJzaGVsbAorICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JfY2xhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB8IGNhc2VfY2xhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB8IGlmX2NsYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9jbGF1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgdW50aWxfY2xhdXNlIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfc3Vic2hlbGwocCk6CisgICAgIiIic3Vic2hlbGwgOiBMUEFSRU5TIGNvbXBvdW5kX2xpc3QgUlBBUkVOUyIiIgorICAgIHBbMF0gPSAoJ3N1YnNoZWxsJywgU3ViU2hlbGwocFsyXVsxOl0pKQorCitkZWYgcF9jb21wb3VuZF9saXN0KHApOgorICAgICIiImNvbXBvdW5kX2xpc3QgOiB0ZXJtCisgICAgICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCB0ZXJtCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB0ZXJtIHNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICAgfCBuZXdsaW5lX2xpc3QgdGVybSBzZXBhcmF0b3IiIiIKKyAgICBwcm9kdWN0aW9ucyA9IHBbMTpdICAgICAgICAgICAKKyAgICB0cnk6CisgICAgICAgIHNlcCA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnc2VwYXJhdG9yJykKKyAgICAgICAgaWYgc2VwWzFdIT0nOyc6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICB0ZXJtID0gZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsICd0ZXJtJykKKyAgICBwWzBdID0gWydjb21wb3VuZF9saXN0J10gKyB0ZXJtWzE6XQorCitkZWYgcF90ZXJtKHApOgorICAgICIiInRlcm0gOiB0ZXJtIHNlcGFyYXRvciBhbmRfb3IKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgYW5kX29yIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBwWzBdID0gWyd0ZXJtJywgcFsxXV0KKyAgICBlbHNlOgorICAgICAgICBpZiBwWzJdIGlzIG5vdCBOb25lIGFuZCBwWzJdWzFdID09ICcmJzoKKyAgICAgICAgICAgIHBbMF0gPSBbJ3Rlcm0nLCAoJ2FzeW5jJywgcFsxXVsxOl0pXSArIFtwWzNdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcFswXSA9IHBbMV0gKyBbcFszXV0KKyAgICAgICAgICAgIAorZGVmIHBfbWF5YmVfZm9yX3dvcmQocCk6CisgICAgIyBSZWFycmFuZ2UgJ0ZvcicgcHJpb3JpdHkgd3J0IFRPS0VOLiBTZWUgcF9mb3Jfd29yZAorICAgICIiIm1heWJlX2Zvcl93b3JkIDogRm9yIiIiCisgICAgcFswXSA9ICgnbWF5YmVfZm9yX3dvcmQnLCBwWzFdKQorCitkZWYgcF9mb3JfY2xhdXNlKHApOgorICAgICIiImZvcl9jbGF1c2UgOiBmb3Jfd29yZCBuYW1lIGxpbmVicmVhayAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19ncm91cAorICAgICAgICAgICAgICAgICAgfCBmb3Jfd29yZCBuYW1lIGxpbmVicmVhayBpbiAgICAgICAgICBzZXF1ZW50aWFsX3NlcCBkb19ncm91cAorICAgICAgICAgICAgICAgICAgfCBmb3Jfd29yZCBuYW1lIGxpbmVicmVhayBpbiB3b3JkbGlzdCBzZXF1ZW50aWFsX3NlcCBkb19ncm91cCIiIgorICAgIHByb2R1Y3Rpb25zID0gcFsxOl0KKyAgICBkb19ncm91cCA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnZG9fZ3JvdXAnKQorICAgIHRyeToKKyAgICAgICAgaXRlbXMgPSBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgJ2luJylbMTpdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCciaW4iIG9taXNzaW9uIGlzIG5vdCBpbXBsZW1lbnRlZCcpCisgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgaXRlbXMgPSBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgJ3dvcmRsaXN0JylbMTpdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBpdGVtcyA9IFtdCisgICAgICAgIAorICAgIG5hbWUgPSBwWzJdCisgICAgcFswXSA9ICgnZm9yX2NsYXVzZScsIEZvckxvb3AobmFtZSwgaXRlbXMsIGRvX2dyb3VwWzE6XSkpCisKK2RlZiBwX25hbWUocCk6CisgICAgIiIibmFtZSA6IHRva2VuIiIiICNXYXMgTkFNRSBpbnN0ZWFkIG9mIHRva2VuCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfaW4ocCk6CisgICAgIiIiaW4gOiBJbiIiIgorICAgIHBbMF0gPSAoJ2luJywgcFsxXSkKKworZGVmIHBfd29yZGxpc3QocCk6CisgICAgIiIid29yZGxpc3QgOiB3b3JkbGlzdCB0b2tlbgorICAgICAgICAgICAgICAgIHwgICAgICAgICAgdG9rZW4iIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ3dvcmRsaXN0JywgKCdUT0tFTicsIHBbMV0pXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgWygnVE9LRU4nLCBwWzJdKV0KKworZGVmIHBfY2FzZV9jbGF1c2UocCk6CisgICAgIiIiY2FzZV9jbGF1c2UgOiBDYXNlIHRva2VuIGxpbmVicmVhayBpbiBsaW5lYnJlYWsgY2FzZV9saXN0ICAgIEVzYWMKKyAgICAgICAgICAgICAgICAgICB8IENhc2UgdG9rZW4gbGluZWJyZWFrIGluIGxpbmVicmVhayBjYXNlX2xpc3RfbnMgRXNhYworICAgICAgICAgICAgICAgICAgIHwgQ2FzZSB0b2tlbiBsaW5lYnJlYWsgaW4gbGluZWJyZWFrICAgICAgICAgICAgICBFc2FjIiIiCisgICAgaWYgbGVuKHApIDwgODoKKyAgICAgICAgaXRlbXMgPSBbXQorICAgIGVsc2U6CisgICAgICAgIGl0ZW1zID0gcFs2XVsxOl0KKyAgICBuYW1lID0gcFsyXQorICAgIHBbMF0gPSAoJ2Nhc2VfY2xhdXNlJywgQ2FzZShuYW1lLCBbY1sxXSBmb3IgYyBpbiBpdGVtc10pKQorICAgICAgIAorZGVmIHBfY2FzZV9saXN0X25zKHApOgorICAgICIiImNhc2VfbGlzdF9ucyA6IGNhc2VfbGlzdCBjYXNlX2l0ZW1fbnMKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgY2FzZV9pdGVtX25zIiIiCisgICAgcF9jYXNlX2xpc3QocCkKKyAgICAgIAorZGVmIHBfY2FzZV9saXN0KHApOgorICAgICIiImNhc2VfbGlzdCA6IGNhc2VfbGlzdCBjYXNlX2l0ZW0KKyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgY2FzZV9pdGVtIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBwWzBdID0gWydjYXNlX2xpc3QnLCBwWzFdXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgW3BbMl1dCisgICAgICAgIAorZGVmIHBfY2FzZV9pdGVtX25zKHApOgorICAgICIiImNhc2VfaXRlbV9ucyA6ICAgICAgICAgcGF0dGVybiBSUEFSRU5TICAgICAgICAgICAgICAgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICBwYXR0ZXJuIFJQQVJFTlMgY29tcG91bmRfbGlzdCBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgfCBMUEFSRU5TIHBhdHRlcm4gUlBBUkVOUyAgICAgICAgICAgICAgIGxpbmVicmVhaworICAgICAgICAgICAgICAgICAgICB8IExQQVJFTlMgcGF0dGVybiBSUEFSRU5TIGNvbXBvdW5kX2xpc3QgbGluZWJyZWFrIiIiCisgICAgcF9jYXNlX2l0ZW0ocCkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9jYXNlX2l0ZW0ocCk6CisgICAgIiIiY2FzZV9pdGVtIDogICAgICAgICBwYXR0ZXJuIFJQQVJFTlMgbGluZWJyZWFrICAgICBEU0VNSSBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgfCAgICAgICAgIHBhdHRlcm4gUlBBUkVOUyBjb21wb3VuZF9saXN0IERTRU1JIGxpbmVicmVhaworICAgICAgICAgICAgICAgICB8IExQQVJFTlMgcGF0dGVybiBSUEFSRU5TIGxpbmVicmVhayAgICAgRFNFTUkgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgIHwgTFBBUkVOUyBwYXR0ZXJuIFJQQVJFTlMgY29tcG91bmRfbGlzdCBEU0VNSSBsaW5lYnJlYWsiIiIKKyAgICBpZiBsZW4ocCkgPCA3OgorICAgICAgICBuYW1lID0gcFsxXVsxOl0KKyAgICBlbHNlOgorICAgICAgICBuYW1lID0gcFsyXVsxOl0KKworICAgIHRyeToKKyAgICAgICAgY21kcyA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAiY29tcG91bmRfbGlzdCIpWzE6XQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgY21kcyA9IFtdCisKKyAgICBwWzBdID0gKCdjYXNlX2l0ZW0nLCAobmFtZSwgY21kcykpCisgICAgICAgICAgICAgICAgIAorZGVmIHBfcGF0dGVybihwKToKKyAgICAiIiJwYXR0ZXJuIDogICAgICAgICAgICAgIHRva2VuCisgICAgICAgICAgICAgICB8IHBhdHRlcm4gUElQRSB0b2tlbiIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFsncGF0dGVybicsICgnVE9LRU4nLCBwWzFdKV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXSArIFsoJ1RPS0VOJywgcFsyXSldCisKK2RlZiBwX21heWJlX2lmX3dvcmQocCk6CisgICAgIyBSZWFycmFuZ2UgJ0lmJyBwcmlvcml0eSB3cnQgVE9LRU4uIFNlZSBwX2lmX3dvcmQKKyAgICAiIiJtYXliZV9pZl93b3JkIDogSWYiIiIKKyAgICBwWzBdID0gKCdtYXliZV9pZl93b3JkJywgcFsxXSkKKworZGVmIHBfbWF5YmVfdGhlbl93b3JkKHApOgorICAgICMgUmVhcnJhbmdlICdUaGVuJyBwcmlvcml0eSB3cnQgVE9LRU4uIFNlZSBwX3RoZW5fd29yZAorICAgICIiIm1heWJlX3RoZW5fd29yZCA6IFRoZW4iIiIKKyAgICBwWzBdID0gKCdtYXliZV90aGVuX3dvcmQnLCBwWzFdKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2lmX2NsYXVzZShwKToKKyAgICAiIiJpZl9jbGF1c2UgOiBpZl93b3JkIGNvbXBvdW5kX2xpc3QgdGhlbl93b3JkIGNvbXBvdW5kX2xpc3QgZWxzZV9wYXJ0IEZpCisgICAgICAgICAgICAgICAgIHwgaWZfd29yZCBjb21wb3VuZF9saXN0IHRoZW5fd29yZCBjb21wb3VuZF9saXN0ICAgICAgICAgICBGaSIiIgorICAgIGVsc2VfcGFydCA9IFtdCisgICAgaWYgbGVuKHApPT03OgorICAgICAgICBlbHNlX3BhcnQgPSBwWzVdCisgICAgcFswXSA9ICgnaWZfY2xhdXNlJywgSWZDb25kKHBbMl1bMTpdLCBwWzRdWzE6XSwgZWxzZV9wYXJ0KSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9lbHNlX3BhcnQocCk6CisgICAgIiIiZWxzZV9wYXJ0IDogRWxpZiBjb21wb3VuZF9saXN0IHRoZW5fd29yZCBjb21wb3VuZF9saXN0IGVsc2VfcGFydAorICAgICAgICAgICAgICAgICB8IEVsaWYgY29tcG91bmRfbGlzdCB0aGVuX3dvcmQgY29tcG91bmRfbGlzdAorICAgICAgICAgICAgICAgICB8IEVsc2UgY29tcG91bmRfbGlzdCIiIgorICAgIGlmIGxlbihwKT09MzoKKyAgICAgICAgcFswXSA9IHBbMl1bMTpdCisgICAgZWxzZToKKyAgICAgICAgZWxzZV9wYXJ0ID0gW10KKyAgICAgICAgaWYgbGVuKHApPT02OgorICAgICAgICAgICAgZWxzZV9wYXJ0ID0gcFs1XQorICAgICAgICBwWzBdID0gKCdlbGlmJywgSWZDb25kKHBbMl1bMTpdLCBwWzRdWzE6XSwgZWxzZV9wYXJ0KSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF93aGlsZV9jbGF1c2UocCk6CisgICAgIiIid2hpbGVfY2xhdXNlIDogV2hpbGUgY29tcG91bmRfbGlzdCBkb19ncm91cCIiIgorICAgIHBbMF0gPSAoJ3doaWxlX2NsYXVzZScsIFdoaWxlTG9vcChwWzJdWzE6XSwgcFszXVsxOl0pKQorICAgIAorZGVmIHBfbWF5YmVfdW50aWxfd29yZChwKToKKyAgICAjIFJlYXJyYW5nZSAnVW50aWwnIHByaW9yaXR5IHdydCBUT0tFTi4gU2VlIHBfdW50aWxfd29yZAorICAgICIiIm1heWJlX3VudGlsX3dvcmQgOiBVbnRpbCIiIgorICAgIHBbMF0gPSAoJ21heWJlX3VudGlsX3dvcmQnLCBwWzFdKQorICAgICAgICAgICAKK2RlZiBwX3VudGlsX2NsYXVzZShwKToKKyAgICAiIiJ1bnRpbF9jbGF1c2UgOiB1bnRpbF93b3JkIGNvbXBvdW5kX2xpc3QgZG9fZ3JvdXAiIiIKKyAgICBwWzBdID0gKCd1bnRpbF9jbGF1c2UnLCBVbnRpbExvb3AocFsyXVsxOl0sIHBbM11bMTpdKSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9mdW5jdGlvbl9kZWZpbml0aW9uKHApOgorICAgICIiImZ1bmN0aW9uX2RlZmluaXRpb24gOiBmbmFtZSBMUEFSRU5TIFJQQVJFTlMgbGluZWJyZWFrIGZ1bmN0aW9uX2JvZHkiIiIKKyAgICBwWzBdID0gKCdmdW5jdGlvbl9kZWZpbml0aW9uJywgRnVuRGVmKHBbMV0sIHBbNV0pKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Z1bmN0aW9uX2JvZHkocCk6CisgICAgIiIiZnVuY3Rpb25fYm9keSA6IGNvbXBvdW5kX2NvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgIHwgY29tcG91bmRfY29tbWFuZCByZWRpcmVjdF9saXN0IiIiCisgICAgaWYgbGVuKHApIT0yOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdmdW5jdGlvbnMgcmVkaXJlY3Rpb25zIGxpc3RzIGFyZSBub3QgaW1wbGVtZW50ZWQnKSAgICAKKyAgICBwWzBdID0gcFsxXSAgICAKKworZGVmIHBfZm5hbWUocCk6CisgICAgIiIiZm5hbWUgOiBUT0tFTiIiIiAjV2FzIE5BTUUgaW5zdGVhZCBvZiB0b2tlbgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2JyYWNlX2dyb3VwKHApOgorICAgICIiImJyYWNlX2dyb3VwIDogTGJyYWNlIGNvbXBvdW5kX2xpc3QgUmJyYWNlIiIiCisgICAgcFswXSA9ICgnYnJhY2VfZ3JvdXAnLCBCcmFjZUdyb3VwKHBbMl1bMTpdKSkKKworZGVmIHBfbWF5YmVfZG9uZV93b3JkKHApOgorICAgICNTZWUgcF9hc3NpZ25tZW50X3dvcmQgZm9yIGRldGFpbHMuCisgICAgIiIibWF5YmVfZG9uZV93b3JkIDogRG9uZSIiIgorICAgIHBbMF0gPSAoJ21heWJlX2RvbmVfd29yZCcsIHBbMV0pCisKK2RlZiBwX21heWJlX2RvX3dvcmQocCk6CisgICAgIiIibWF5YmVfZG9fd29yZCA6IERvIiIiCisgICAgcFswXSA9ICgnbWF5YmVfZG9fd29yZCcsIHBbMV0pCisKK2RlZiBwX2RvX2dyb3VwKHApOgorICAgICIiImRvX2dyb3VwIDogZG9fd29yZCBjb21wb3VuZF9saXN0IGRvbmVfd29yZCIiIgorICAgICNEbyBncm91cCBjb250YWlucyBhIGxpc3Qgb2YgQW5kT3IKKyAgICBwWzBdID0gWydkb19ncm91cCddICsgcFsyXVsxOl0KKworZGVmIHBfc2ltcGxlX2NvbW1hbmQocCk6CisgICAgIiIic2ltcGxlX2NvbW1hbmQgOiBjbWRfcHJlZml4IGNtZF93b3JkIGNtZF9zdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9wcmVmaXggY21kX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9wcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9uYW1lIGNtZF9zdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgICB8IGNtZF9uYW1lIiIiCisgICAgd29yZHMsIHJlZGlycywgYXNzaWducyA9IFtdLCBbXSwgW10KKyAgICBmb3IgZSBpbiBwWzE6XToKKyAgICAgICAgbmFtZSA9IGVbMF0KKyAgICAgICAgaWYgbmFtZSBpbiAoJ2NtZF9wcmVmaXgnLCAnY21kX3N1ZmZpeCcpOgorICAgICAgICAgICAgZm9yIHN1YmUgaW4gZVsxOl06CisgICAgICAgICAgICAgICAgc3VibmFtZSA9IHN1YmVbMF0KKyAgICAgICAgICAgICAgICBpZiBzdWJuYW1lPT0naW9fcmVkaXJlY3QnOgorICAgICAgICAgICAgICAgICAgICByZWRpcnMuYXBwZW5kKG1ha2VfaW9fcmVkaXJlY3Qoc3ViZSkpCisgICAgICAgICAgICAgICAgZWxpZiBzdWJuYW1lPT0nQVNTSUdOTUVOVF9XT1JEJzoKKyAgICAgICAgICAgICAgICAgICAgYXNzaWducy5hcHBlbmQoc3ViZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB3b3Jkcy5hcHBlbmQoc3ViZSkKKyAgICAgICAgZWxpZiBuYW1lIGluICgnY21kX3dvcmQnLCAnY21kX25hbWUnKToKKyAgICAgICAgICAgIHdvcmRzLmFwcGVuZChlKQorICAgICAgICAgICAgCisgICAgY21kID0gU2ltcGxlQ29tbWFuZCh3b3JkcywgcmVkaXJzLCBhc3NpZ25zKQorICAgIHBbMF0gPSAoJ3NpbXBsZV9jb21tYW5kJywgY21kKQorCitkZWYgcF9jbWRfbmFtZShwKToKKyAgICAiIiJjbWRfbmFtZSA6IFRPS0VOIiIiCisgICAgcFswXSA9ICgnY21kX25hbWUnLCBwWzFdKQorICAgIAorZGVmIHBfY21kX3dvcmQocCk6CisgICAgIiIiY21kX3dvcmQgOiB0b2tlbiIiIgorICAgIHBbMF0gPSAoJ2NtZF93b3JkJywgcFsxXSkKKworZGVmIHBfbWF5YmVfYXNzaWdubWVudF93b3JkKHApOgorICAgICNTZWUgcF9hc3NpZ25tZW50X3dvcmQgZm9yIGRldGFpbHMuCisgICAgIiIibWF5YmVfYXNzaWdubWVudF93b3JkIDogQVNTSUdOTUVOVF9XT1JEIiIiCisgICAgcFswXSA9ICgnbWF5YmVfYXNzaWdubWVudF93b3JkJywgcFsxXSkKKyAgICAKK2RlZiBwX2NtZF9wcmVmaXgocCk6CisgICAgIiIiY21kX3ByZWZpeCA6ICAgICAgICAgICAgaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgIHwgY21kX3ByZWZpeCBpb19yZWRpcmVjdAorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIGFzc2lnbm1lbnRfd29yZAorICAgICAgICAgICAgICAgICAgfCBjbWRfcHJlZml4IGFzc2lnbm1lbnRfd29yZCIiIgorICAgIHRyeToKKyAgICAgICAgcHJlZml4ID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICdjbWRfcHJlZml4JykKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHByZWZpeCA9IFsnY21kX3ByZWZpeCddCisgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgdmFsdWUgPSBnZXRfcHJvZHVjdGlvbihwWzE6XSwgJ2Fzc2lnbm1lbnRfd29yZCcpWzFdCisgICAgICAgIHZhbHVlID0gKCdBU1NJR05NRU5UX1dPUkQnLCB2YWx1ZS5zcGxpdCgnPScsIDEpKQorICAgIGV4Y2VwdCBLZXlFcnJvcjogICAgICAgIAorICAgICAgICB2YWx1ZSA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAnaW9fcmVkaXJlY3QnKQorICAgIHBbMF0gPSBwcmVmaXggKyBbdmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitkZWYgcF9jbWRfc3VmZml4KHApOgorICAgICIiImNtZF9zdWZmaXggICA6ICAgICAgICAgICAgaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IGlvX3JlZGlyZWN0CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB0b2tlbgorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggdG9rZW4KKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2Zvcl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9mb3Jfd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfZG9uZV93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9kb25lX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2RvX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2RvX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX3VudGlsX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX3VudGlsX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2Fzc2lnbm1lbnRfd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfYXNzaWdubWVudF93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV9pZl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9pZl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV90aGVuX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX3RoZW5fd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfYmFuZ193b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9iYW5nX3dvcmQiIiIKKyAgICB0cnk6CisgICAgICAgIHN1ZmZpeCA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAnY21kX3N1ZmZpeCcpCisgICAgICAgIHRva2VuID0gcFsyXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgc3VmZml4ID0gWydjbWRfc3VmZml4J10KKyAgICAgICAgdG9rZW4gPSBwWzFdCisgICAgICAgIAorICAgIGlmIGlzaW5zdGFuY2UodG9rZW4sIHR1cGxlKToKKyAgICAgICAgaWYgdG9rZW5bMF09PSdpb19yZWRpcmVjdCc6CisgICAgICAgICAgICBwWzBdID0gc3VmZml4ICsgW3Rva2VuXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0NvbnZlcnQgbWF5YmVfKiAgdG8gVE9LRU4gaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICBwWzBdID0gc3VmZml4ICsgWygnVE9LRU4nLCB0b2tlblsxXSldCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHN1ZmZpeCArIFsoJ1RPS0VOJywgdG9rZW4pXQorICAgICAgICAgICAgICAgICAKK2RlZiBwX3JlZGlyZWN0X2xpc3QocCk6CisgICAgIiIicmVkaXJlY3RfbGlzdCA6IGlvX3JlZGlyZWN0CisgICAgICAgICAgICAgICAgICAgICB8IHJlZGlyZWN0X2xpc3QgaW9fcmVkaXJlY3QiIiIKKyAgICBpZiBsZW4ocCkgPT0gMjoKKyAgICAgICAgcFswXSA9IFsncmVkaXJlY3RfbGlzdCcsIG1ha2VfaW9fcmVkaXJlY3QocFsxXSldCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbbWFrZV9pb19yZWRpcmVjdChwWzJdKV0KKyAgICAKK2RlZiBwX2lvX3JlZGlyZWN0KHApOgorICAgICIiImlvX3JlZGlyZWN0IDogICAgICAgICAgIGlvX2ZpbGUKKyAgICAgICAgICAgICAgICAgICB8IElPX05VTUJFUiBpb19maWxlCisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgaW9faGVyZQorICAgICAgICAgICAgICAgICAgIHwgSU9fTlVNQkVSIGlvX2hlcmUiIiIKKyAgICBpZiBsZW4ocCk9PTM6CisgICAgICAgIHBbMF0gPSAoJ2lvX3JlZGlyZWN0JywgcFsxXSwgcFsyXSkKKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gKCdpb19yZWRpcmVjdCcsIE5vbmUsIHBbMV0pCisgICAgCitkZWYgcF9pb19maWxlKHApOgorICAgICNSZXR1cm4gdGhlIHR1cGxlIChvcGVyYXRvciwgZmlsZW5hbWUpCisgICAgIiIiaW9fZmlsZSA6IExFU1MgICAgICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBMRVNTQU5EICAgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgR1JFQVRFUiAgIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IEdSRUFUQU5EICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBER1JFQVQgICAgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgTEVTU0dSRUFUIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IENMT0JCRVIgICBmaWxlbmFtZSIiIgorICAgICNFeHRyYWN0IHRoZSBmaWxlbmFtZSBmcm9tIHRoZSBmaWxlCisgICAgcFswXSA9ICgnaW9fZmlsZScsIHBbMV0sIHBbMl1bMV0pCisKK2RlZiBwX2ZpbGVuYW1lKHApOgorICAgICNSZXR1cm4gdGhlIGZpbGVuYW1lCisgICAgIiIiZmlsZW5hbWUgOiBUT0tFTiIiIgorICAgIHBbMF0gPSAoJ2ZpbGVuYW1lJywgcFsxXSkKKyAgICAgICAgCitkZWYgcF9pb19oZXJlKHApOgorICAgICIiImlvX2hlcmUgOiBETEVTUyBoZXJlX2VuZAorICAgICAgICAgICAgICAgfCBETEVTU0RBU0ggaGVyZV9lbmQiIiIKKyAgICBwWzBdID0gKCdpb19oZXJlJywgcFsxXSwgcFsyXVsxXSwgcFsyXVsyXSkKKworZGVmIHBfaGVyZV9lbmQocCk6CisgICAgIiIiaGVyZV9lbmQgOiBIRVJFTkFNRSBUT0tFTiIiIgorICAgIHBbMF0gPSAoJ2hlcmVfZG9jdW1lbnQnLCBwWzFdLCBwWzJdKQorICAgIAorZGVmIHBfbmV3bGluZV9zZXF1ZW5jZShwKToKKyAgICAjIE5vdGhpbmcgaW4gdGhlIGdyYW1tYXIgY2FuIGhhbmRsZSBsZWFkaW5nIE5FV0xJTkUgcHJvZHVjdGlvbnMsIHNvIGFkZAorICAgICMgdGhpcyBvbmUgd2l0aCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByaW9yaXR5IHJlbGF0aXZlbHkgdG8gbmV3bGluZV9saXN0LgorICAgICIiIm5ld2xpbmVfc2VxdWVuY2UgOiBuZXdsaW5lX2xpc3QiIiIKKyAgICBwWzBdID0gTm9uZQorICAgIAorZGVmIHBfbmV3bGluZV9saXN0KHApOgorICAgICIiIm5ld2xpbmVfbGlzdCA6IE5FV0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfCBuZXdsaW5lX2xpc3QgTkVXTElORSIiIgorICAgIHBbMF0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIAorZGVmIHBfbGluZWJyZWFrKHApOgorICAgICIiImxpbmVicmVhayA6IG5ld2xpbmVfbGlzdAorICAgICAgICAgICAgICAgICB8IGVtcHR5IiIiCisgICAgcFswXSA9IE5vbmUKKworZGVmIHBfc2VwYXJhdG9yX29wKHApOiAgICAgICAgICAgICAgICAgCisgICAgIiIic2VwYXJhdG9yX29wIDogQ09NTUEKKyAgICAgICAgICAgICAgICAgICAgfCBBTVAiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9zZXBhcmF0b3IocCk6CisgICAgIiIic2VwYXJhdG9yIDogc2VwYXJhdG9yX29wIGxpbmVicmVhaworICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgI0lnbm9yZSBuZXdsaW5lcworICAgICAgICBwWzBdID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgICNLZWVwIHRoZSBzZXBhcmF0b3Igb3BlcmF0b3IKKyAgICAgICAgcFswXSA9ICgnc2VwYXJhdG9yJywgcFsxXSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9zZXF1ZW50aWFsX3NlcChwKToKKyAgICAiIiJzZXF1ZW50aWFsX3NlcCA6IENPTU1BIGxpbmVicmVhaworICAgICAgICAgICAgICAgICAgICAgIHwgbmV3bGluZV9saXN0IiIiCisgICAgcFswXSA9IE5vbmUKKworIyBMb3cgcHJpb3JpdHkgVE9LRU4gPT4gZm9yX3dvcmQgY29udmVyc2lvbi4KKyMgTGV0IG1heWJlX2Zvcl93b3JkIGJlIHVzZWQgYXMgYSB0b2tlbiB3aGVuIG5lY2Vzc2FyeSBpbiBoaWdoZXIgcHJpb3JpdHkKKyMgcnVsZXMuIAorZGVmIHBfZm9yX3dvcmQocCk6CisgICAgIiIiZm9yX3dvcmQgOiBtYXliZV9mb3Jfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2lmX3dvcmQocCk6CisgICAgIiIiaWZfd29yZCA6IG1heWJlX2lmX3dvcmQiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF90aGVuX3dvcmQocCk6CisgICAgIiIidGhlbl93b3JkIDogbWF5YmVfdGhlbl93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfZG9uZV93b3JkKHApOgorICAgICIiImRvbmVfd29yZCA6IG1heWJlX2RvbmVfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2RvX3dvcmQocCk6CisgICAgIiIiZG9fd29yZCA6IG1heWJlX2RvX3dvcmQiIiIKKyAgICBwWzBdID0gcFsxXQorICAgIAorZGVmIHBfdW50aWxfd29yZChwKToKKyAgICAiIiJ1bnRpbF93b3JkIDogbWF5YmVfdW50aWxfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisgICAgCitkZWYgcF9hc3NpZ25tZW50X3dvcmQocCk6CisgICAgIiIiYXNzaWdubWVudF93b3JkIDogbWF5YmVfYXNzaWdubWVudF93b3JkIiIiCisgICAgcFswXSA9ICgnYXNzaWdubWVudF93b3JkJywgcFsxXVsxXSkKKyAgICAKK2RlZiBwX2Jhbmdfd29yZChwKToKKyAgICAiIiJiYW5nX3dvcmQgOiBtYXliZV9iYW5nX3dvcmQiIiIKKyAgICBwWzBdID0gKCdiYW5nX3dvcmQnLCBwWzFdWzFdKQorCitkZWYgcF90b2tlbihwKToKKyAgICAiIiJ0b2tlbiA6IFRPS0VOCisgICAgICAgICAgICAgfCBGaSIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX2VtcHR5KHApOgorICAgICdlbXB0eSA6JworICAgIHBbMF0gPSBOb25lCisgICAgCisjIEVycm9yIHJ1bGUgZm9yIHN5bnRheCBlcnJvcnMKK2RlZiBwX2Vycm9yKHApOgorICAgIG1zZyA9IFtdCisgICAgdyA9IG1zZy5hcHBlbmQKKyAgICB3KCclclxuJyAlIHApCisgICAgdygnZm9sbG93ZWQgYnk6XG4nKQorICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICBuID0geWFjYy50b2tlbigpCisgICAgICAgIGlmIG5vdCBuOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdygnICAlclxuJyAlIG4pCisgICAgcmFpc2Ugc2hlcnJvcnMuU2hlbGxTeW50YXhFcnJvcignJy5qb2luKG1zZykpCisKKyMgQnVpbGQgdGhlIHBhcnNlcgordHJ5OgorICAgIGltcG9ydCBweXNodGFibGVzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgb3V0cHV0ZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIGlmIG5vdCBvcy5hY2Nlc3Mob3V0cHV0ZGlyLCBvcy5XX09LKToKKyAgICAgICAgb3V0cHV0ZGlyID0gJycKKyAgICB5YWNjLnlhY2ModGFibW9kdWxlID0gJ3B5c2h0YWJsZXMnLCBvdXRwdXRkaXIgPSBvdXRwdXRkaXIsIGRlYnVnID0gMCkKK2Vsc2U6CisgICAgeWFjYy55YWNjKHRhYm1vZHVsZSA9ICdweXNoLnB5c2h0YWJsZXMnLCB3cml0ZV90YWJsZXMgPSAwLCBkZWJ1ZyA9IDApCisKKworZGVmIHBhcnNlKGlucHV0LCBlb2Y9RmFsc2UsIGRlYnVnPUZhbHNlKToKKyAgICAiIiJQYXJzZSBhIHdob2xlIHNjcmlwdCBhdCBvbmNlIGFuZCByZXR1cm4gdGhlIGdlbmVyYXRlZCBBU1QgYW5kIHVuY29uc3VtZWQKKyAgICBkYXRhIGluIGEgdHVwbGUuCisgICAgCisgICAgTk9URTogZW9mIGlzIHByb2JhYmx5IG1lYW5pbmdsZXNzIGZvciBub3csIHRoZSBwYXJzZXIgYmVpbmcgdW5hYmxlIHRvIHdvcmsKKyAgICBpbiBwdWxsIG1vZGUuIEl0IHNob3VsZCBiZSBzZXQgdG8gVHJ1ZS4KKyAgICAiIiIKKyAgICBsZXhlciA9IHB5c2hsZXguUExZTGV4ZXIoKQorICAgIHJlbWFpbmluZyA9IGxleGVyLmFkZChpbnB1dCwgZW9mKQorICAgIGlmIGxleGVyLmlzX2VtcHR5KCk6CisgICAgICAgIHJldHVybiBbXSwgcmVtYWluaW5nCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnID0gMgorICAgIHJldHVybiB5YWNjLnBhcnNlKGxleGVyPWxleGVyLCBkZWJ1Zz1kZWJ1ZyksIHJlbWFpbmluZworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBU1QgcmVuZGVyaW5nIGhlbHBlcnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIAorCitkZWYgZm9ybWF0X2NvbW1hbmRzKHYpOgorICAgICIiIlJldHVybiBhIHRyZWUgbWFkZSBvZiBzdHJpbmdzIGFuZCBsaXN0cy4gTWFrZSBjb21tYW5kIHRyZWVzIGVhc2llciB0bworICAgIGRpc3BsYXkuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZSh2LCBsaXN0KToKKyAgICAgICAgcmV0dXJuIFtmb3JtYXRfY29tbWFuZHMoYykgZm9yIGMgaW4gdl0KKyAgICBpZiBpc2luc3RhbmNlKHYsIHR1cGxlKToKKyAgICAgICAgaWYgbGVuKHYpPT0yIGFuZCBpc2luc3RhbmNlKHZbMF0sIHN0cikgYW5kIG5vdCBpc2luc3RhbmNlKHZbMV0sIHN0cik6CisgICAgICAgICAgICBpZiB2WzBdID09ICdhc3luYyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnQXN5bmNMaXN0JywgbWFwKGZvcm1hdF9jb21tYW5kcywgdlsxXSldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNBdm9pZCBkZWNvbXBvc2luZyB0dXBsZXMgbGlrZSAoJ3BpcGVsaW5lJywgUGlwZWxpbmUoLi4uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0X2NvbW1hbmRzKHZbMV0pCisgICAgICAgIHJldHVybiBmb3JtYXRfY29tbWFuZHMobGlzdCh2KSkKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgSWZDb25kKToKKyAgICAgICAgbmFtZSA9IFsnSWZDb25kJ10KKyAgICAgICAgbmFtZSArPSBbJ2lmJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5jb25kKV0KKyAgICAgICAgbmFtZSArPSBbJ3RoZW4nLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LmlmX2NtZHMpXQorICAgICAgICBuYW1lICs9IFsnZWxzZScsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYuZWxzZV9jbWRzKV0KKyAgICAgICAgcmV0dXJuIG5hbWUKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgRm9yTG9vcCk6CisgICAgICAgIG5hbWUgPSBbJ0Zvckxvb3AnXQorICAgICAgICBuYW1lICs9IFtyZXByKHYubmFtZSkrJyBpbiAnLCBtYXAoc3RyLCB2Lml0ZW1zKV0KKyAgICAgICAgbmFtZSArPSBbJ2NvbW1hbmRzJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5jbWRzKV0KKyAgICAgICAgcmV0dXJuIG5hbWUKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgQW5kT3IpOgorICAgICAgICByZXR1cm4gW3Yub3AsIGZvcm1hdF9jb21tYW5kcyh2LmxlZnQpLCBmb3JtYXRfY29tbWFuZHModi5yaWdodCldCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIFBpcGVsaW5lKToKKyAgICAgICAgbmFtZSA9ICdQaXBlbGluZScKKyAgICAgICAgaWYgdi5yZXZlcnNlX3N0YXR1czoKKyAgICAgICAgICAgIG5hbWUgPSAnIScgKyBuYW1lCisgICAgICAgIHJldHVybiBbbmFtZSwgZm9ybWF0X2NvbW1hbmRzKHYuY29tbWFuZHMpXQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBDYXNlKToKKyAgICAgICAgbmFtZSA9IFsnQ2FzZSddCisgICAgICAgIG5hbWUgKz0gW3YubmFtZSwgZm9ybWF0X2NvbW1hbmRzKHYuaXRlbXMpXQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBTaW1wbGVDb21tYW5kKToKKyAgICAgICAgbmFtZSA9IFsnU2ltcGxlQ29tbWFuZCddCisgICAgICAgIGlmIHYud29yZHM6ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbmFtZSArPSBbJ3dvcmRzJywgbWFwKHN0ciwgdi53b3JkcyldCisgICAgICAgIGlmIHYuYXNzaWduczoKKyAgICAgICAgICAgIGFzc2lnbnMgPSBbdHVwbGUoYVsxXSkgZm9yIGEgaW4gdi5hc3NpZ25zXQorICAgICAgICAgICAgbmFtZSArPSBbJ2Fzc2lnbnMnLCBtYXAoc3RyLCBhc3NpZ25zKV0KKyAgICAgICAgaWYgdi5yZWRpcnM6CisgICAgICAgICAgICBuYW1lICs9IFsncmVkaXJzJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5yZWRpcnMpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBSZWRpcmVjdExpc3QpOgorICAgICAgICBuYW1lID0gWydSZWRpcmVjdExpc3QnXQorICAgICAgICBpZiB2LnJlZGlyczoKKyAgICAgICAgICAgIG5hbWUgKz0gWydyZWRpcnMnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LnJlZGlycyldCisgICAgICAgIG5hbWUgKz0gWydjb21tYW5kJywgZm9ybWF0X2NvbW1hbmRzKHYuY21kKV0KKyAgICAgICAgcmV0dXJuIG5hbWUKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgSU9SZWRpcmVjdCk6CisgICAgICAgIHJldHVybiAnICcuam9pbihtYXAoc3RyLCAodi5pb19udW1iZXIsIHYub3AsIHYuZmlsZW5hbWUpKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgSGVyZURvY3VtZW50KToKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKG1hcChzdHIsICh2LmlvX251bWJlciwgdi5vcCwgcmVwcih2Lm5hbWUpLCByZXByKHYuY29udGVudCkpKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgU3ViU2hlbGwpOgorICAgICAgICByZXR1cm4gWydTdWJTaGVsbCcsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYuY21kcyldCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHJlcHIodikKKyAgICAgICAgICAgICAKK2RlZiBwcmludF9jb21tYW5kcyhjbWRzLCBvdXRwdXQ9c3lzLnN0ZG91dCk6CisgICAgIiIiUHJldHR5IHByaW50IGEgY29tbWFuZCB0cmVlLiIiIgorICAgIGRlZiBwcmludF90cmVlKGNtZCwgc3BhY2VzLCBvdXRwdXQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNtZCwgbGlzdCk6CisgICAgICAgICAgICBmb3IgYyBpbiBjbWQ6CisgICAgICAgICAgICAgICAgcHJpbnRfdHJlZShjLCBzcGFjZXMgKyAzLCBvdXRwdXQpICAgICAgICAgICAgICAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ID4+b3V0cHV0LCAnICcqc3BhY2VzICsgc3RyKGNtZCkKKyAgICAKKyAgICBmb3JtYXR0ZWQgPSBmb3JtYXRfY29tbWFuZHMoY21kcykKKyAgICBwcmludF90cmVlKGZvcm1hdHRlZCwgMCwgb3V0cHV0KQorICAgIAorICAgIAorZGVmIHN0cmluZ2lmeV9jb21tYW5kcyhjbWRzKTogCisgICAgIiIiU2VyaWFsaXplIGEgY29tbWFuZCB0cmVlIGFzIGEgc3RyaW5nLgorICAgIAorICAgIFJldHVybmVkIHN0cmluZyBpcyBub3QgcHJldHR5IGFuZCBpcyBjdXJyZW50bHkgdXNlZCBmb3IgdW5pdCB0ZXN0cyBvbmx5LgorICAgICIiIiAgIAorICAgIGRlZiBzdHJpbmdpZnkodmFsdWUpOgorICAgICAgICBvdXRwdXQgPSBbXQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IFtdCisgICAgICAgICAgICBmb3IgdiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZWQuYXBwZW5kKHN0cmluZ2lmeSh2KSkKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9ICcgJy5qb2luKGZvcm1hdHRlZCkKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJycuam9pbihbJzwnLCBmb3JtYXR0ZWQsICc+J10pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKG91dHB1dCkKKyAgICAgICAgICAgIAorICAgIHJldHVybiBzdHJpbmdpZnkoZm9ybWF0X2NvbW1hbmRzKGNtZHMpKQorICAgIAorICAgICAgICAKK2RlZiB2aXNpdF9jb21tYW5kcyhjbWRzLCBjYWxsYWJsZSk6CisgICAgIiIiVmlzaXQgdGhlIGNvbW1hbmQgdHJlZSBhbmQgZXhlY3V0ZSBjYWxsYWJsZSBvbiBldmVyeSBQaXBlbGluZSBhbmQgCisgICAgU2ltcGxlQ29tbWFuZCBpbnN0YW5jZXMuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShjbWRzLCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgbWFwKGxhbWJkYSBjOiB2aXNpdF9jb21tYW5kcyhjLGNhbGxhYmxlKSwgY21kcykKKyAgICBlbGlmIGlzaW5zdGFuY2UoY21kcywgKFBpcGVsaW5lLCBTaW1wbGVDb21tYW5kKSk6CisgICAgICAgIGNhbGxhYmxlKGNtZHMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc2hlcnJvcnMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc2hlcnJvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkMDUzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zaGVycm9ycy5weQpAQCAtMCwwICsxLDQxIEBACisjIHNoZXJyb3JzLnB5IC0gc2hlbGwgZXJyb3JzIGFuZCBzaWduYWxzCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiRGVmaW5lIHNoZWxsIGV4Y2VwdGlvbnMgYW5kIGVycm9yIGNvZGVzLgorIiIiCisKK2NsYXNzIFNoZWxsRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIFNoZWxsU3ludGF4RXJyb3IoU2hlbGxFcnJvcik6CisgICAgcGFzcworICAgIAorY2xhc3MgVXRpbGl0eUVycm9yKFNoZWxsRXJyb3IpOgorICAgICIiIlJhaXNlZCB1cG9uIHV0aWxpdHkgc3ludGF4IGVycm9yIChvcHRpb24gb3Igb3BlcmFuZCBlcnJvcikuIiIiCisgICAgcGFzcworICAgCitjbGFzcyBFeHBhbnNpb25FcnJvcihTaGVsbEVycm9yKToKKyAgICBwYXNzCisgICAgIAorY2xhc3MgQ29tbWFuZE5vdEZvdW5kKFNoZWxsRXJyb3IpOgorICAgICIiIlNwZWNpZmllZCBjb21tYW5kIHdhcyBub3QgZm91bmQuIiIiCisgICAgcGFzcworICAgIAorY2xhc3MgUmVkaXJlY3Rpb25FcnJvcihTaGVsbEVycm9yKToKKyAgICBwYXNzCisgICAgCitjbGFzcyBWYXJBc3NpZ25tZW50RXJyb3IoU2hlbGxFcnJvcik6CisgICAgIiIiVmFyaWFibGUgYXNzaWdubWVudCBlcnJvci4iIiIKKyAgICBwYXNzCisgICAgCitjbGFzcyBFeGl0U2lnbmFsKFNoZWxsRXJyb3IpOgorICAgICIiIkV4aXQgc2lnbmFsLiIiIgorICAgIHBhc3MKKyAgICAKK2NsYXNzIFJldHVyblNpZ25hbChTaGVsbEVycm9yKToKKyAgICAiIiJFeGl0IHNpZ25hbC4iIiIKKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc3VicHJvY2Vzc19maXgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3B5c2gvc3VicHJvY2Vzc19maXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlY2EyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcHlzaC9zdWJwcm9jZXNzX2ZpeC5weQpAQCAtMCwwICsxLDc3IEBACisjIHN1YnByb2Nlc3MgLSBTdWJwcm9jZXNzZXMgd2l0aCBhY2Nlc3NpYmxlIEkvTyBzdHJlYW1zCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbW9kdWxlLCBzZWUgUEVQIDMyNC4KKyMKKyMgVGhpcyBtb2R1bGUgc2hvdWxkIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMiwgc2VlIFBFUCAyOTEuCisjCisjIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IGJ5IFBldGVyIEFzdHJhbmQgPGFzdHJhbmRAbHlzYXRvci5saXUuc2U+CisjCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCisKK2RlZiBsaXN0MmNtZGxpbmUoc2VxKToKKyAgICAiIiIKKyAgICBUcmFuc2xhdGUgYSBzZXF1ZW5jZSBvZiBhcmd1bWVudHMgaW50byBhIGNvbW1hbmQgbGluZQorICAgIHN0cmluZywgdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgdGhlIE1TIEMgcnVudGltZToKKworICAgIDEpIEFyZ3VtZW50cyBhcmUgZGVsaW1pdGVkIGJ5IHdoaXRlIHNwYWNlLCB3aGljaCBpcyBlaXRoZXIgYQorICAgICAgIHNwYWNlIG9yIGEgdGFiLgorCisgICAgMikgQSBzdHJpbmcgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGlzCisgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hpdGUgc3BhY2UKKyAgICAgICBjb250YWluZWQgd2l0aGluLiAgQSBxdW90ZWQgc3RyaW5nIGNhbiBiZSBlbWJlZGRlZCBpbiBhbgorICAgICAgIGFyZ3VtZW50LgorCisgICAgMykgQSBkb3VibGUgcXVvdGF0aW9uIG1hcmsgcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2ggaXMKKyAgICAgICBpbnRlcnByZXRlZCBhcyBhIGxpdGVyYWwgZG91YmxlIHF1b3RhdGlvbiBtYXJrLgorCisgICAgNCkgQmFja3NsYXNoZXMgYXJlIGludGVycHJldGVkIGxpdGVyYWxseSwgdW5sZXNzIHRoZXkKKyAgICAgICBpbW1lZGlhdGVseSBwcmVjZWRlIGEgZG91YmxlIHF1b3RhdGlvbiBtYXJrLgorCisgICAgNSkgSWYgYmFja3NsYXNoZXMgaW1tZWRpYXRlbHkgcHJlY2VkZSBhIGRvdWJsZSBxdW90YXRpb24gbWFyaywKKyAgICAgICBldmVyeSBwYWlyIG9mIGJhY2tzbGFzaGVzIGlzIGludGVycHJldGVkIGFzIGEgbGl0ZXJhbAorICAgICAgIGJhY2tzbGFzaC4gIElmIHRoZSBudW1iZXIgb2YgYmFja3NsYXNoZXMgaXMgb2RkLCB0aGUgbGFzdAorICAgICAgIGJhY2tzbGFzaCBlc2NhcGVzIHRoZSBuZXh0IGRvdWJsZSBxdW90YXRpb24gbWFyayBhcworICAgICAgIGRlc2NyaWJlZCBpbiBydWxlIDMuCisgICAgIiIiCisKKyAgICAjIFNlZQorICAgICMgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2VuLXVzL3ZjY2VsbmcvaHRtL3Byb2dzXzEyLmFzcAorICAgIHJlc3VsdCA9IFtdCisgICAgbmVlZHF1b3RlID0gRmFsc2UKKyAgICBmb3IgYXJnIGluIHNlcToKKyAgICAgICAgYnNfYnVmID0gW10KKworICAgICAgICAjIEFkZCBhIHNwYWNlIHRvIHNlcGFyYXRlIHRoaXMgYXJndW1lbnQgZnJvbSB0aGUgb3RoZXJzCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKQorCisgICAgICAgIG5lZWRxdW90ZSA9ICgiICIgaW4gYXJnKSBvciAoIlx0IiBpbiBhcmcpIG9yICgifCIgaW4gYXJnKSBvciBhcmcgPT0gIiIKKyAgICAgICAgaWYgbmVlZHF1b3RlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpCisKKyAgICAgICAgZm9yIGMgaW4gYXJnOgorICAgICAgICAgICAgaWYgYyA9PSAnXFwnOgorICAgICAgICAgICAgICAgICMgRG9uJ3Qga25vdyBpZiB3ZSBuZWVkIHRvIGRvdWJsZSB5ZXQuCisgICAgICAgICAgICAgICAgYnNfYnVmLmFwcGVuZChjKQorICAgICAgICAgICAgZWxpZiBjID09ICciJzoKKyAgICAgICAgICAgICAgICAjIERvdWJsZSBiYWNrc3BhY2VzLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcJyAqIGxlbihic19idWYpKjIpCisgICAgICAgICAgICAgICAgYnNfYnVmID0gW10KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcXCInKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBjaGFyCisgICAgICAgICAgICAgICAgaWYgYnNfYnVmOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGJzX2J1ZikKKyAgICAgICAgICAgICAgICAgICAgYnNfYnVmID0gW10KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpCisKKyAgICAgICAgIyBBZGQgcmVtYWluaW5nIGJhY2tzcGFjZXMsIGlmIGFueS4KKyAgICAgICAgaWYgYnNfYnVmOgorICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChic19idWYpCisKKyAgICAgICAgaWYgbmVlZHF1b3RlOgorICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChic19idWYpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJykKKyAgICAgICAgICAgIAorICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3J1bnF1ZXVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzFlZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3J1bnF1ZXVlLnB5CkBAIC0wLDAgKzEsMjE5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdSdW5RdWV1ZScgaW1wbGVtZW50YXRpb24KKworSGFuZGxlcyBwcmVwYXJhdGlvbiBhbmQgZXhlY3V0aW9uIG9mIGEgcXVldWUgb2YgdGFza3MKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGNvcHkKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN0YXQKK2ltcG9ydCBmY250bAoraW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IG1zZywgZGF0YSwgZXZlbnQKK2Zyb20gYmIgaW1wb3J0IG1vbml0b3JkaXNrCitpbXBvcnQgc3VicHJvY2VzcworCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQorCitiYmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlJ1blF1ZXVlIikKKworX19maW5kX21kNV9fID0gcmUuY29tcGlsZSggcicoP2kpKD88IVthLXowLTldKVthLWYwLTldezMyfSg/IVthLXowLTldKScgKQorCitjbGFzcyBSdW5RdWV1ZVN0YXRzOgorICAgICIiIgorICAgIEhvbGRzIHN0YXRpc3RpY3Mgb24gdGhlIHRhc2tzIGhhbmRsZWQgYnkgdGhlIGFzc29jaWF0ZWQgcnVuUXVldWUKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgorICAgICAgICBzZWxmLmNvbXBsZXRlZCA9IDAKKyAgICAgICAgc2VsZi5za2lwcGVkID0gMAorICAgICAgICBzZWxmLmZhaWxlZCA9IDAKKyAgICAgICAgc2VsZi5hY3RpdmUgPSAwCisgICAgICAgIHNlbGYudG90YWwgPSB0b3RhbAorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIG9iaiA9IHNlbGYuX19jbGFzc19fKHNlbGYudG90YWwpCisgICAgICAgIG9iai5fX2RpY3RfXy51cGRhdGUoc2VsZi5fX2RpY3RfXykKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHRhc2tGYWlsZWQoc2VsZik6CisgICAgICAgIHNlbGYuYWN0aXZlID0gc2VsZi5hY3RpdmUgLSAxCisgICAgICAgIHNlbGYuZmFpbGVkID0gc2VsZi5mYWlsZWQgKyAxCisKKyAgICBkZWYgdGFza0NvbXBsZXRlZChzZWxmLCBudW1iZXIgPSAxKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSAtIG51bWJlcgorICAgICAgICBzZWxmLmNvbXBsZXRlZCA9IHNlbGYuY29tcGxldGVkICsgbnVtYmVyCisKKyAgICBkZWYgdGFza1NraXBwZWQoc2VsZiwgbnVtYmVyID0gMSk6CisgICAgICAgIHNlbGYuYWN0aXZlID0gc2VsZi5hY3RpdmUgKyBudW1iZXIKKyAgICAgICAgc2VsZi5za2lwcGVkID0gc2VsZi5za2lwcGVkICsgbnVtYmVyCisKKyAgICBkZWYgdGFza0FjdGl2ZShzZWxmKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSArIDEKKworIyBUaGVzZSB2YWx1ZXMgaW5kaWNhdGUgdGhlIG5leHQgc3RlcCBkdWUgdG8gYmUgcnVuIGluIHRoZQorIyBydW5RdWV1ZSBzdGF0ZSBtYWNoaW5lCitydW5RdWV1ZVByZXBhcmUgPSAyCitydW5RdWV1ZVNjZW5lSW5pdCA9IDMKK3J1blF1ZXVlU2NlbmVSdW4gPSA0CitydW5RdWV1ZVJ1bkluaXQgPSA1CitydW5RdWV1ZVJ1bm5pbmcgPSA2CitydW5RdWV1ZUZhaWxlZCA9IDcKK3J1blF1ZXVlQ2xlYW5VcCA9IDgKK3J1blF1ZXVlQ29tcGxldGUgPSA5CisKK2NsYXNzIFJ1blF1ZXVlU2NoZWR1bGVyKG9iamVjdCk6CisgICAgIiIiCisgICAgQ29udHJvbCB0aGUgb3JkZXIgdGFza3MgYXJlIHNjaGVkdWxlZCBpbi4KKyAgICAiIiIKKyAgICBuYW1lID0gImJhc2ljIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIGRlZmF1bHQgc2NoZWR1bGVyIGp1c3QgcmV0dXJucyB0aGUgZmlyc3QgYnVpbGRhYmxlIHRhc2sgKHRoZQorICAgICAgICBwcmlvcml0eSBtYXAgaXMgc29ydGVkIGJ5IHRhc2sgbnVtYmVyKQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ycSA9IHJ1bnF1ZXVlCisgICAgICAgIHNlbGYucnFkYXRhID0gcnFkYXRhCisgICAgICAgIHNlbGYubnVtVGFza3MgPSBsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKQorCisgICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQorICAgICAgICBzZWxmLnByaW9fbWFwLmV4dGVuZChyYW5nZShzZWxmLm51bVRhc2tzKSkKKworICAgICAgICBzZWxmLmJ1aWxkYWJsZSA9IFtdCisgICAgICAgIHNlbGYuc3RhbXBzID0ge30KKyAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2Uoc2VsZi5udW1UYXNrcyk6CisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNraWRdXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza2lkXQorICAgICAgICAgICAgc2VsZi5zdGFtcHNbdGFza2lkXSA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKyAgICAgICAgICAgIGlmIHNlbGYucnEucnVucV9idWlsZGFibGVbdGFza2lkXSA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRhYmxlLmFwcGVuZCh0YXNraWQpCisKKyAgICAgICAgc2VsZi5yZXZfcHJpb19tYXAgPSBOb25lCisKKyAgICBkZWYgbmV4dF9idWlsZGFibGVfdGFzayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgaWQgb2YgdGhlIGZpcnN0IHRhc2sgd2UgZmluZCB0aGF0IGlzIGJ1aWxkYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5idWlsZGFibGUgPSBbeCBmb3IgeCBpbiBzZWxmLmJ1aWxkYWJsZSBpZiBub3Qgc2VsZi5ycS5ydW5xX3J1bm5pbmdbeF0gPT0gMV0KKyAgICAgICAgaWYgbm90IHNlbGYuYnVpbGRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgbGVuKHNlbGYuYnVpbGRhYmxlKSA9PSAxOgorICAgICAgICAgICAgdGFza2lkID0gc2VsZi5idWlsZGFibGVbMF0KKyAgICAgICAgICAgIHN0YW1wID0gc2VsZi5zdGFtcHNbdGFza2lkXQorICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHNlbGYucnEuYnVpbGRfc3RhbXBzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFza2lkCisKKyAgICAgICAgaWYgbm90IHNlbGYucmV2X3ByaW9fbWFwOgorICAgICAgICAgICAgc2VsZi5yZXZfcHJpb19tYXAgPSByYW5nZShzZWxmLm51bVRhc2tzKQorICAgICAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2Uoc2VsZi5udW1UYXNrcyk6CisgICAgICAgICAgICAgICAgc2VsZi5yZXZfcHJpb19tYXBbc2VsZi5wcmlvX21hcFt0YXNraWRdXSA9IHRhc2tpZAorCisgICAgICAgIGJlc3QgPSBOb25lCisgICAgICAgIGJlc3RwcmlvID0gTm9uZQorICAgICAgICBmb3IgdGFza2lkIGluIHNlbGYuYnVpbGRhYmxlOgorICAgICAgICAgICAgcHJpbyA9IHNlbGYucmV2X3ByaW9fbWFwW3Rhc2tpZF0KKyAgICAgICAgICAgIGlmIGJlc3RwcmlvIGlzIE5vbmUgb3IgYmVzdHByaW8gPiBwcmlvOgorICAgICAgICAgICAgICAgIHN0YW1wID0gc2VsZi5zdGFtcHNbdGFza2lkXQorICAgICAgICAgICAgICAgIGlmIHN0YW1wIGluIHNlbGYucnEuYnVpbGRfc3RhbXBzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBiZXN0cHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICBiZXN0ID0gdGFza2lkCisKKyAgICAgICAgcmV0dXJuIGJlc3QKKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBpZCBvZiB0aGUgdGFzayB3ZSBzaG91bGQgYnVpbGQgbmV4dAorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5ycS5zdGF0cy5hY3RpdmUgPCBzZWxmLnJxLm51bWJlcl90YXNrczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHRfYnVpbGRhYmxlX3Rhc2soKQorCisgICAgZGVmIG5ld2J1aWxhYmxlKHNlbGYsIHRhc2spOgorICAgICAgICBzZWxmLmJ1aWxkYWJsZS5hcHBlbmQodGFzaykKKworY2xhc3MgUnVuUXVldWVTY2hlZHVsZXJTcGVlZChSdW5RdWV1ZVNjaGVkdWxlcik6CisgICAgIiIiCisgICAgQSBzY2hlZHVsZXIgb3B0aW1pc2VkIGZvciBzcGVlZC4gVGhlIHByaW9yaXR5IG1hcCBpcyBzb3J0ZWQgYnkgdGFzayB3ZWlnaHQsCisgICAgaGVhdmllciB3ZWlnaHRlZCB0YXNrcyAodGFza3MgbmVlZGVkIGJ5IHRoZSBtb3N0IG90aGVyIHRhc2tzKSBhcmUgcnVuIGZpcnN0LgorICAgICIiIgorICAgIG5hbWUgPSAic3BlZWQiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgcHJpb3JpdHkgbWFwIGlzIHNvcnRlZCBieSB0YXNrIHdlaWdodC4KKyAgICAgICAgIiIiCisgICAgICAgIFJ1blF1ZXVlU2NoZWR1bGVyLl9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpCisKKyAgICAgICAgc29ydHdlaWdodCA9IHNvcnRlZChjb3B5LmRlZXBjb3B5KHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0KSkKKyAgICAgICAgY29weXdlaWdodCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5ycWRhdGEucnVucV93ZWlnaHQpCisgICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQorCisgICAgICAgIGZvciB3ZWlnaHQgaW4gc29ydHdlaWdodDoKKyAgICAgICAgICAgIGlkeCA9IGNvcHl3ZWlnaHQuaW5kZXgod2VpZ2h0KQorICAgICAgICAgICAgc2VsZi5wcmlvX21hcC5hcHBlbmQoaWR4KQorICAgICAgICAgICAgY29weXdlaWdodFtpZHhdID0gLTEKKworICAgICAgICBzZWxmLnByaW9fbWFwLnJldmVyc2UoKQorCitjbGFzcyBSdW5RdWV1ZVNjaGVkdWxlckNvbXBsZXRpb24oUnVuUXVldWVTY2hlZHVsZXJTcGVlZCk6CisgICAgIiIiCisgICAgQSBzY2hlZHVsZXIgb3B0aW1pc2VkIHRvIGNvbXBsZXRlIC5iYiBmaWxlcyBhcmUgcXVpY2tseSBhcyBwb3NzaWJsZS4gVGhlCisgICAgcHJpb3JpdHkgbWFwIGlzIHNvcnRlZCBieSB0YXNrIHdlaWdodCwgYnV0IHRoZW4gcmVvcmRlcmVkIHNvIG9uY2UgYSBnaXZlbgorICAgIC5iYiBmaWxlIHN0YXJ0cyB0byBidWlsZCwgaXQncyBjb21wbGV0ZWQgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4gVGhpcyB3b3JrcworICAgIHdlbGwgd2hlcmUgZGlzayBzcGFjZSBpcyBhdCBhIHByZW1pdW0gYW5kIGNsYXNzZXMgbGlrZSBPRSdzIHJtX3dvcmsgYXJlIGluCisgICAgZm9yY2UuCisgICAgIiIiCisgICAgbmFtZSA9ICJjb21wbGV0aW9uIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpOgorICAgICAgICBSdW5RdWV1ZVNjaGVkdWxlclNwZWVkLl9faW5pdF9fKHNlbGYsIHJ1bnF1ZXVlLCBycWRhdGEpCisKKyAgICAgICAgI0ZJWE1FIC0gd2hpbHN0IHRoaXMgZ3JvdXBzIGFsbCBmbmlkcyB0b2dldGhlciBpdCBkb2VzIG5vdCByZW9yZGVyIHRoZQorICAgICAgICAjZm5pZCBncm91cHMgb3B0aW1hbGx5LgorCisgICAgICAgIGJhc2VtYXAgPSBjb3B5LmRlZXBjb3B5KHNlbGYucHJpb19tYXApCisgICAgICAgIHNlbGYucHJpb19tYXAgPSBbXQorICAgICAgICB3aGlsZSAobGVuKGJhc2VtYXApID4gMCk6CisgICAgICAgICAgICBlbnRyeSA9IGJhc2VtYXAucG9wKDApCisgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChlbnRyeSkKKyAgICAgICAgICAgIGZuaWQgPSBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZW50cnldCisgICAgICAgICAgICB0b2RlbCA9IFtdCisgICAgICAgICAgICBmb3IgZW50cnkgaW4gYmFzZW1hcDoKKyAgICAgICAgICAgICAgICBlbnRyeV9mbmlkID0gc2VsZi5ycWRhdGEucnVucV9mbmlkW2VudHJ5XQorICAgICAgICAgICAgICAgIGlmIGVudHJ5X2ZuaWQgPT0gZm5pZDoKKyAgICAgICAgICAgICAgICAgICAgdG9kZWwuYXBwZW5kKGJhc2VtYXAuaW5kZXgoZW50cnkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChlbnRyeSkKKyAgICAgICAgICAgIHRvZGVsLnJldmVyc2UoKQorICAgICAgICAgICAgZm9yIGlkeCBpbiB0b2RlbDoKKyAgICAgICAgICAgICAgICBkZWwgYmFzZW1hcFtpZHhdCisKK2NsYXNzIFJ1blF1ZXVlRGF0YToKKyAgICAiIiIKKyAgICBCaXRCYWtlIFJ1biBRdWV1ZSBpbXBsZW1lbnRhdGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSwgY29va2VyLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHRhc2tEYXRhLCB0YXJnZXRzKToKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5kYXRhQ2FjaGUgPSBkYXRhQ2FjaGUKKyAgICAgICAgc2VsZi50YXNrRGF0YSA9IHRhc2tEYXRhCisgICAgICAgIHNlbGYudGFyZ2V0cyA9IHRhcmdldHMKKyAgICAgICAgc2VsZi5ycSA9IHJxCisgICAgICAgIHNlbGYud2Fybl9tdWx0aV9iYiA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5zdGFtcHdoaXRlbGlzdCA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TVEFNUF9XSElURUxJU1QiLCBUcnVlKSBvciAiIgorICAgICAgICBzZWxmLm11bHRpX3Byb3ZpZGVyX3doaXRlbGlzdCA9IChjZmdEYXRhLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5xX2ZuaWQgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfdGFzayA9IFtdCisgICAgICAgIHNlbGYucnVucV9kZXBlbmRzID0gW10KKyAgICAgICAgc2VsZi5ydW5xX3JldmRlcHMgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfaGFzaCA9IFtdCisKKyAgICBkZWYgcnVucV9kZXBlbmRzX25hbWVzKHNlbGYsIGlkcyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICByZXQgPSBbXQorICAgICAgICBmb3IgaWQgaW4gc2VsZi5ydW5xX2RlcGVuZHNbaWRzXToKKyAgICAgICAgICAgIG5hbSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfdXNlcl9pZHN0cmluZyhpZCkpCisgICAgICAgICAgICBuYW0gPSByZS5zdWIoIl9bXixdKiwiLCAiLCIsIG5hbSkKKyAgICAgICAgICAgIHJldC5leHRlbmQoW25hbV0pCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBnZXRfdGFza19uYW1lKHNlbGYsIHRhc2spOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5xX3Rhc2tbdGFza10KKworICAgIGRlZiBnZXRfdGFza19maWxlKHNlbGYsIHRhc2spOgorICAgICAgICByZXR1cm4gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KKworICAgIGRlZiBnZXRfdGFza19oYXNoKHNlbGYsIHRhc2spOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5xX2hhc2hbdGFza10KKworICAgIGRlZiBnZXRfdXNlcl9pZHN0cmluZyhzZWxmLCB0YXNrLCB0YXNrX25hbWVfc3VmZml4ID0gIiIpOgorICAgICAgICBmbiA9IHNlbGYudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ydW5xX3Rhc2tbdGFza10gKyB0YXNrX25hbWVfc3VmZml4CisgICAgICAgIHJldHVybiAiJXMsICVzIiAlIChmbiwgdGFza25hbWUpCisKKyAgICBkZWYgZ2V0X3Rhc2tfaWQoc2VsZiwgZm5pZCwgdGFza25hbWUpOgorICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9mbmlkW2xpc3RpZF0gPT0gZm5pZCBhbmQgc2VsZi5ydW5xX3Rhc2tbbGlzdGlkXSA9PSB0YXNrbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGlkCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY2lyY3VsYXJfZGVwY2hhaW5zX2hhbmRsZXIoc2VsZiwgdGFza3MpOgorICAgICAgICAiIiIKKyAgICAgICAgU29tZSB0YXNrcyBhcmVuJ3QgYnVpbGRhYmxlLCBsaWtlbHkgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgaXNzdWVzLgorICAgICAgICBJZGVudGlmeSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCBwcmludCB0aGVtIGluIGEgdXNlciByZWFkYWJsZSBmb3JtYXQuCisgICAgICAgICIiIgorICAgICAgICBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CisKKyAgICAgICAgdmFsaWRfY2hhaW5zID0gW10KKyAgICAgICAgZXhwbG9yZWRfZGVwcyA9IHt9CisgICAgICAgIG1zZ3MgPSBbXQorCisgICAgICAgIGRlZiBjaGFpbl9yZW9yZGVyKGNoYWluKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgUmVvcmRlciBhIGRlcGVuZGVuY3kgY2hhaW4gc28gdGhlIGxvd2VzdCB0YXNrIGlkIGlzIGZpcnN0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGxvd2VzdCA9IDAKKyAgICAgICAgICAgIG5ld19jaGFpbiA9IFtdCisgICAgICAgICAgICBmb3IgZW50cnkgaW4geHJhbmdlKGxlbihjaGFpbikpOgorICAgICAgICAgICAgICAgIGlmIGNoYWluW2VudHJ5XSA8IGNoYWluW2xvd2VzdF06CisgICAgICAgICAgICAgICAgICAgIGxvd2VzdCA9IGVudHJ5CisgICAgICAgICAgICBuZXdfY2hhaW4uZXh0ZW5kKGNoYWluW2xvd2VzdDpdKQorICAgICAgICAgICAgbmV3X2NoYWluLmV4dGVuZChjaGFpbls6bG93ZXN0XSkKKyAgICAgICAgICAgIHJldHVybiBuZXdfY2hhaW4KKworICAgICAgICBkZWYgY2hhaW5fY29tcGFyZV9lcXVhbChjaGFpbjEsIGNoYWluMik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIENvbXBhcmUgdHdvIGRlcGVuZGVuY3kgY2hhaW5zIGFuZCBzZWUgaWYgdGhleSdyZSB0aGUgc2FtZQorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiBsZW4oY2hhaW4xKSAhPSBsZW4oY2hhaW4yKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGZvciBpbmRleCBpbiB4cmFuZ2UobGVuKGNoYWluMSkpOgorICAgICAgICAgICAgICAgIGlmIGNoYWluMVtpbmRleF0gIT0gY2hhaW4yW2luZGV4XToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGRlZiBjaGFpbl9hcnJheV9jb250YWlucyhjaGFpbiwgY2hhaW5fYXJyYXkpOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBSZXR1cm4gVHJ1ZSBpZiBjaGFpbl9hcnJheSBjb250YWlucyBjaGFpbgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBmb3IgY2ggaW4gY2hhaW5fYXJyYXk6CisgICAgICAgICAgICAgICAgaWYgY2hhaW5fY29tcGFyZV9lcXVhbChjaCwgY2hhaW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIGZpbmRfY2hhaW5zKHRhc2tpZCwgcHJldl9jaGFpbik6CisgICAgICAgICAgICBwcmV2X2NoYWluLmFwcGVuZCh0YXNraWQpCisgICAgICAgICAgICB0b3RhbF9kZXBzID0gW10KKyAgICAgICAgICAgIHRvdGFsX2RlcHMuZXh0ZW5kKHNlbGYucnVucV9yZXZkZXBzW3Rhc2tpZF0pCisgICAgICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnVucV9yZXZkZXBzW3Rhc2tpZF06CisgICAgICAgICAgICAgICAgaWYgcmV2ZGVwIGluIHByZXZfY2hhaW46CisgICAgICAgICAgICAgICAgICAgIGlkeCA9IHByZXZfY2hhaW4uaW5kZXgocmV2ZGVwKQorICAgICAgICAgICAgICAgICAgICAjIFRvIHByZXZlbnQgZHVwbGljYXRlcywgcmVvcmRlciB0aGUgY2hhaW4gdG8gc3RhcnQgd2l0aCB0aGUgbG93ZXN0IHRhc2tpZAorICAgICAgICAgICAgICAgICAgICAjIGFuZCBzZWFyY2ggdGhyb3VnaCBhbiBhcnJheSBvZiB0aG9zZSB3ZSd2ZSBhbHJlYWR5IHByaW50ZWQKKyAgICAgICAgICAgICAgICAgICAgY2hhaW4gPSBwcmV2X2NoYWluW2lkeDpdCisgICAgICAgICAgICAgICAgICAgIG5ld19jaGFpbiA9IGNoYWluX3Jlb3JkZXIoY2hhaW4pCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaGFpbl9hcnJheV9jb250YWlucyhuZXdfY2hhaW4sIHZhbGlkX2NoYWlucyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZF9jaGFpbnMuYXBwZW5kKG5ld19jaGFpbikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKCJEZXBlbmRlbmN5IGxvb3AgIyVkIGZvdW5kOlxuIiAlIGxlbih2YWxpZF9jaGFpbnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBuZXdfY2hhaW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIiAgVGFzayAlcyAoJXMpIChkZXBlbmRlbnQgVGFza3MgJXMpXG4iICUgKGRlcCwgc2VsZi5nZXRfdXNlcl9pZHN0cmluZyhkZXApLCBzZWxmLnJ1bnFfZGVwZW5kc19uYW1lcyhkZXApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbih2YWxpZF9jaGFpbnMpID4gMTA6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dzLmFwcGVuZCgiQWJvcnRlZCBkZXBlbmRlbmN5IGxvb3BzIHNlYXJjaCBhZnRlciAxMCBtYXRjaGVzLlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtc2dzCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2NhbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgcmV2ZGVwIG5vdCBpbiBleHBsb3JlZF9kZXBzOgorICAgICAgICAgICAgICAgICAgICBzY2FuID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgcmV2ZGVwIGluIGV4cGxvcmVkX2RlcHNbcmV2ZGVwXToKKyAgICAgICAgICAgICAgICAgICAgc2NhbiA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHByZXZfY2hhaW46CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXAgaW4gZXhwbG9yZWRfZGVwc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW4gPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc2NhbjoKKyAgICAgICAgICAgICAgICAgICAgZmluZF9jaGFpbnMocmV2ZGVwLCBjb3B5LmRlZXBjb3B5KHByZXZfY2hhaW4pKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZXhwbG9yZWRfZGVwc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHRvdGFsX2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9kZXBzLmFwcGVuZChkZXApCisKKyAgICAgICAgICAgIGV4cGxvcmVkX2RlcHNbdGFza2lkXSA9IHRvdGFsX2RlcHMKKworICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGZpbmRfY2hhaW5zKHRhc2ssIFtdKQorCisgICAgICAgIHJldHVybiBtc2dzCisKKyAgICBkZWYgY2FsY3VsYXRlX3Rhc2tfd2VpZ2h0cyhzZWxmLCBlbmRwb2ludHMpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsY3VsYXRlIGEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgIndlaWdodCIgb2YgZWFjaCB0YXNrLiBIZWF2aWVyIHdlaWdodGVkIHRhc2tzCisgICAgICAgIGhhdmUgbW9yZSBkZXBlbmRlbmNpZXMgYW5kIGhlbmNlIHNob3VsZCBiZSBleGVjdXRlZCBzb29uZXIgZm9yIG1heGltdW0gc3BlZWQuCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHNvIHNhbml0eSBjaGVja3MgdGhlIHRhc2sgbGlzdCBmaW5kaW5nIHRhc2tzIHRoYXQgYXJlIG5vdAorICAgICAgICBwb3NzaWJsZSB0byBleGVjdXRlIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisgICAgICAgICIiIgorCisgICAgICAgIG51bVRhc2tzID0gbGVuKHNlbGYucnVucV9mbmlkKQorICAgICAgICB3ZWlnaHQgPSBbXQorICAgICAgICBkZXBzX2xlZnQgPSBbXQorICAgICAgICB0YXNrX2RvbmUgPSBbXQorCisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKG51bVRhc2tzKToKKyAgICAgICAgICAgIHRhc2tfZG9uZS5hcHBlbmQoRmFsc2UpCisgICAgICAgICAgICB3ZWlnaHQuYXBwZW5kKDEpCisgICAgICAgICAgICBkZXBzX2xlZnQuYXBwZW5kKGxlbihzZWxmLnJ1bnFfcmV2ZGVwc1tsaXN0aWRdKSkKKworICAgICAgICBmb3IgbGlzdGlkIGluIGVuZHBvaW50czoKKyAgICAgICAgICAgIHdlaWdodFtsaXN0aWRdID0gMTAKKyAgICAgICAgICAgIHRhc2tfZG9uZVtsaXN0aWRdID0gVHJ1ZQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBuZXh0X3BvaW50cyA9IFtdCisgICAgICAgICAgICBmb3IgbGlzdGlkIGluIGVuZHBvaW50czoKKyAgICAgICAgICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF06CisgICAgICAgICAgICAgICAgICAgIHdlaWdodFtyZXZkZXBdID0gd2VpZ2h0W3JldmRlcF0gKyB3ZWlnaHRbbGlzdGlkXQorICAgICAgICAgICAgICAgICAgICBkZXBzX2xlZnRbcmV2ZGVwXSA9IGRlcHNfbGVmdFtyZXZkZXBdIC0gMQorICAgICAgICAgICAgICAgICAgICBpZiBkZXBzX2xlZnRbcmV2ZGVwXSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9wb2ludHMuYXBwZW5kKHJldmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tfZG9uZVtyZXZkZXBdID0gVHJ1ZQorICAgICAgICAgICAgZW5kcG9pbnRzID0gbmV4dF9wb2ludHMKKyAgICAgICAgICAgIGlmIGxlbihuZXh0X3BvaW50cykgPT0gMDoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgQ2lyY3VsYXIgZGVwZW5kZW5jeSBzYW5pdHkgY2hlY2sKKyAgICAgICAgcHJvYmxlbV90YXNrcyA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShudW1UYXNrcyk6CisgICAgICAgICAgICBpZiB0YXNrX2RvbmVbdGFza10gaXMgRmFsc2Ugb3IgZGVwc19sZWZ0W3Rhc2tdICE9IDA6CisgICAgICAgICAgICAgICAgcHJvYmxlbV90YXNrcy5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlRhc2sgJXMgKCVzKSBpcyBub3QgYnVpbGRhYmxlIiwgdGFzaywgc2VsZi5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIihDb21wbGV0ZSBtYXJrZXIgd2FzICVzIGFuZCB0aGUgcmVtYWluaW5nIGRlcGVuZGVuY3kgY291bnQgd2FzICVzKVxuIiwgdGFza19kb25lW3Rhc2tdLCBkZXBzX2xlZnRbdGFza10pCisKKyAgICAgICAgaWYgcHJvYmxlbV90YXNrczoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiVW5idWlsZGFibGUgdGFza3Mgd2VyZSBmb3VuZC5cbiIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIlRoZXNlIGFyZSB1c3VhbGx5IGNhdXNlZCBieSBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFueSBjaXJjdWxhciBkZXBlbmRlbmN5IGNoYWlucyBmb3VuZCB3aWxsIGJlIHByaW50ZWQgYmVsb3cuIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbCB0byBzZWUgYSBsaXN0IG9mIHVuYnVpbGRhYmxlIHRhc2tzLlxuXG4iCisgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArICJJZGVudGlmeWluZyBkZXBlbmRlbmN5IGxvb3BzICh0aGlzIG1heSB0YWtlIGEgc2hvcnQgd2hpbGUpLi4uXG4iCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IobWVzc2FnZSkKKworICAgICAgICAgICAgbXNncyA9IHNlbGYuY2lyY3VsYXJfZGVwY2hhaW5zX2hhbmRsZXIocHJvYmxlbV90YXNrcykKKworICAgICAgICAgICAgbWVzc2FnZSA9ICJcbiIKKyAgICAgICAgICAgIGZvciBtc2cgaW4gbXNnczoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArIG1zZworICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsIG1lc3NhZ2UpCisKKyAgICAgICAgcmV0dXJuIHdlaWdodAorCisgICAgZGVmIHByZXBhcmUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUdXJuIGEgc2V0IG9mIHRhc2tEYXRhIGludG8gYSBSdW5RdWV1ZSBhbmQgY29tcHV0ZSBkYXRhIG5lZWRlZAorICAgICAgICB0byBvcHRpbWlzZSB0aGUgZXhlY3V0aW9uIG9yZGVyLgorICAgICAgICAiIiIKKworICAgICAgICBydW5xX2J1aWxkID0gW10KKyAgICAgICAgcmVjdXJzaXZldGFza3MgPSB7fQorICAgICAgICByZWN1cnNpdmVpdGFza3MgPSB7fQorICAgICAgICByZWN1cnNpdmV0YXNrc3NlbGZyZWYgPSBzZXQoKQorCisgICAgICAgIHRhc2tEYXRhID0gc2VsZi50YXNrRGF0YQorCisgICAgICAgIGlmIGxlbih0YXNrRGF0YS50YXNrc19uYW1lKSA9PSAwOgorICAgICAgICAgICAgIyBOb3RoaW5nIHRvIGRvCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGxvZ2dlci5pbmZvKCJQcmVwYXJpbmcgUnVuUXVldWUiKQorCisgICAgICAgICMgU3RlcCBBIC0gV29yayBvdXQgYSBsaXN0IG9mIHRhc2tzIHRvIHJ1bgorICAgICAgICAjCisgICAgICAgICMgVGFza2RhdGEgZ2l2ZXMgdXMgYSBsaXN0IG9mIHBvc3NpYmxlIHByb3ZpZGVycyBmb3IgZXZlcnkgYnVpbGQgYW5kIHJ1bgorICAgICAgICAjIHRhcmdldCBvcmRlcmVkIGJ5IHByaW9yaXR5LiBJdCBhbHNvIGdpdmVzIGluZm9ybWF0aW9uIG9uIGVhY2ggb2YgdGhvc2UKKyAgICAgICAgIyBwcm92aWRlcnMuCisgICAgICAgICMKKyAgICAgICAgIyBUbyBjcmVhdGUgdGhlIGFjdHVhbCBsaXN0IG9mIHRhc2tzIHRvIGV4ZWN1dGUgd2UgZml4IHRoZSBsaXN0IG9mCisgICAgICAgICMgcHJvdmlkZXJzIGFuZCB0aGVuIHJlc29sdmUgdGhlIGRlcGVuZGVuY2llcyBpbnRvIHRhc2sgSURzLiBUaGlzCisgICAgICAgICMgcHJvY2VzcyBpcyByZXBlYXRlZCBmb3IgZWFjaCB0eXBlIG9mIGRlcGVuZGVuY3kgKHRkZXBlbmRzLCBkZXB0YXNrLAorICAgICAgICAjIHJkZXB0YXN0LCByZWNyZGVwdGFzaywgaWRlcGVuZHMpLgorCisgICAgICAgIGRlZiBhZGRfYnVpbGRfZGVwZW5kZW5jaWVzKGRlcGlkcywgdGFza25hbWVzLCBkZXBlbmRzKToKKyAgICAgICAgICAgIGZvciBkZXBpZCBpbiBkZXBpZHM6CisgICAgICAgICAgICAgICAgIyBXb24ndCBiZSBpbiBidWlsZF90YXJnZXRzIGlmIEFTU1VNRV9QUk9WSURFRAorICAgICAgICAgICAgICAgIGlmIGRlcGlkIG5vdCBpbiB0YXNrRGF0YS5idWlsZF90YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5idWlsZF90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgIGlmIGRlcGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmb3IgdGFza25hbWUgaW4gdGFza25hbWVzOgorICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIHRhc2tuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisKKyAgICAgICAgZGVmIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyhkZXBpZHMsIHRhc2tuYW1lcywgZGVwZW5kcyk6CisgICAgICAgICAgICBmb3IgZGVwaWQgaW4gZGVwaWRzOgorICAgICAgICAgICAgICAgIGlmIGRlcGlkIG5vdCBpbiB0YXNrRGF0YS5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBkYXRhID0gdGFza0RhdGEucnVuX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgdGFza25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKworICAgICAgICBkZWYgYWRkX3Jlc29sdmVkX2RlcGVuZGVuY2llcyhkZXBpZHMsIHRhc2tuYW1lcywgZGVwZW5kcyk6CisgICAgICAgICAgICBmb3IgZGVwaWQgaW4gZGVwaWRzOgorICAgICAgICAgICAgICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwaWQsIHRhc2tuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbih0YXNrRGF0YS50YXNrc19uYW1lKSk6CisgICAgICAgICAgICBkZXBlbmRzID0gc2V0KCkKKyAgICAgICAgICAgIGZuaWQgPSB0YXNrRGF0YS50YXNrc19mbmlkW3Rhc2tdCisgICAgICAgICAgICBmbiA9IHRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICB0YXNrX2RlcHMgPSBzZWxmLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMiwgIlByb2Nlc3NpbmcgJXM6JXMiLCBmbiwgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSkKKworICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gdGFza0RhdGEuZmFpbGVkX2ZuaWRzOgorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlIHRhc2sgaW50ZXJuYWwgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBhZGR0YXNrIGJlZm9yZSBYIGFmdGVyIFkKKyAgICAgICAgICAgICAgICBkZXBlbmRzID0gc2V0KHRhc2tEYXRhLnRhc2tzX3RkZXBlbmRzW3Rhc2tdKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlICdkZXB0YXNrJyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW2RlcHRhc2tdID0gImRvX3NvbWVvdGhlcnRhc2siCisgICAgICAgICAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHNvbWVvdGhlcnRhc2sgb2YgYWxsIERFUEVORFMpCisgICAgICAgICAgICAgICAgaWYgJ2RlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ2RlcHRhc2snXToKKyAgICAgICAgICAgICAgICAgICAgdGFza25hbWVzID0gdGFza19kZXBzWydkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBhZGRfYnVpbGRfZGVwZW5kZW5jaWVzKHRhc2tEYXRhLmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlICdyZGVwdGFzaycgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tyZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgUkRFUEVORFMpCisgICAgICAgICAgICAgICAgaWYgJ3JkZXB0YXNrJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10gaW4gdGFza19kZXBzWydyZGVwdGFzayddOgorICAgICAgICAgICAgICAgICAgICB0YXNrbmFtZXMgPSB0YXNrX2RlcHNbJ3JkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBhZGRfcnVudGltZV9kZXBlbmRlbmNpZXModGFza0RhdGEucmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tkZXBlbmRzXSA9ICJ0YXJnZXRuYW1lOmRvX3NvbWVvdGhlcnRhc2siCisgICAgICAgICAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHRhcmdldG5hbWUncyBzb21lb3RoZXJ0YXNrKQorICAgICAgICAgICAgICAgIGlkZXBlbmRzID0gdGFza0RhdGEudGFza3NfaWRlcGVuZHNbdGFza10KKyAgICAgICAgICAgICAgICBmb3IgKGRlcGlkLCBpZGVwZW5kdGFzaykgaW4gaWRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcGlkIGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHMgYW5kIG5vdCBkZXBpZCBpbiB0YXNrRGF0YS5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV29uJ3QgYmUgaW4gYnVpbGRfdGFyZ2V0cyBpZiBBU1NVTUVfUFJPVklERUQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5idWlsZF90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIGlkZXBlbmR0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgaW4gJXMgZGVwZW5kcyB1cG9uIG5vbi1leGlzdGVudCB0YXNrICVzIGluICVzIiAlICh0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdLCBmbiwgaWRlcGVuZHRhc2ssIHRhc2tEYXRhLmZuX2luZGV4W2RlcGRhdGFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisgICAgICAgICAgICAgICAgaXJkZXBlbmRzID0gdGFza0RhdGEudGFza3NfaXJkZXBlbmRzW3Rhc2tdCisgICAgICAgICAgICAgICAgZm9yIChkZXBpZCwgaWRlcGVuZHRhc2spIGluIGlyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwaWQgaW4gdGFza0RhdGEucnVuX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFdvbid0IGJlIGluIHJ1bl90YXJnZXRzIGlmIEFTU1VNRV9QUk9WSURFRAorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHRhc2tEYXRhLnJ1bl90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGRlcGRhdGEsIGlkZXBlbmR0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgaW4gJXMgcmRlcGVuZHMgdXBvbiBub24tZXhpc3RlbnQgdGFzayAlcyBpbiAlcyIgJSAodGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSwgZm4sIGlkZXBlbmR0YXNrLCB0YXNrRGF0YS5mbl9pbmRleFtkZXBkYXRhXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hZGQodGFza2lkKQorCisgICAgICAgICAgICAgICAgIyBSZXNvbHZlIHJlY3Vyc2l2ZSAncmVjcmRlcHRhc2snIGRlcGVuZGVuY2llcyAoUGFydCBBKQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGUuZy4gZG9fc29tZXRhc2tbcmVjcmRlcHRhc2tdID0gImRvX3NvbWVvdGhlcnRhc2siCisgICAgICAgICAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHNvbWVvdGhlcnRhc2sgb2YgYWxsIERFUEVORFMsIFJERVBFTkRTIGFuZCBpbnRlcnRhc2sgZGVwZW5kZW5jaWVzLCByZWN1cnNpdmVseSkKKyAgICAgICAgICAgICAgICAjIFdlIGNvdmVyIHRoZSByZWN1cnNpdmUgcGFydCBvZiB0aGUgZGVwZW5kZW5jaWVzIGJlbG93CisgICAgICAgICAgICAgICAgaWYgJ3JlY3JkZXB0YXNrJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10gaW4gdGFza19kZXBzWydyZWNyZGVwdGFzayddOgorICAgICAgICAgICAgICAgICAgICB0YXNrbmFtZXMgPSB0YXNrX2RlcHNbJ3JlY3JkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmV0YXNrc1t0YXNrXSA9IHRhc2tuYW1lcworICAgICAgICAgICAgICAgICAgICBhZGRfYnVpbGRfZGVwZW5kZW5jaWVzKHRhc2tEYXRhLmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorICAgICAgICAgICAgICAgICAgICBhZGRfcnVudGltZV9kZXBlbmRlbmNpZXModGFza0RhdGEucmRlcGlkc1tmbmlkXSwgdGFza25hbWVzLCBkZXBlbmRzKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdIGluIHRhc2tuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZXRhc2tzc2VsZnJlZi5hZGQodGFzaykKKworICAgICAgICAgICAgICAgICAgICBpZiAncmVjaWRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JlY2lkZXB0YXNrJ106CisgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVpdGFza3NbdGFza10gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFza19kZXBzWydyZWNpZGVwdGFzayddW3Rhc2tEYXRhLnRhc2tzX25hbWVbdGFza11dLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChmbmlkLCB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWl0YXNrc1t0YXNrXS5hcHBlbmQobmV3ZGVwKQorCisgICAgICAgICAgICBzZWxmLnJ1bnFfZm5pZC5hcHBlbmQodGFza0RhdGEudGFza3NfZm5pZFt0YXNrXSkKKyAgICAgICAgICAgIHNlbGYucnVucV90YXNrLmFwcGVuZCh0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdKQorICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHMuYXBwZW5kKGRlcGVuZHMpCisgICAgICAgICAgICBzZWxmLnJ1bnFfcmV2ZGVwcy5hcHBlbmQoc2V0KCkpCisgICAgICAgICAgICBzZWxmLnJ1bnFfaGFzaC5hcHBlbmQoIiIpCisKKyAgICAgICAgICAgIHJ1bnFfYnVpbGQuYXBwZW5kKDApCisKKyAgICAgICAgIyBSZXNvbHZlIHJlY3Vyc2l2ZSAncmVjcmRlcHRhc2snIGRlcGVuZGVuY2llcyAoUGFydCBCKQorICAgICAgICAjCisgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tyZWNyZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgIyAobWFrZXMgc3VyZSBzb21ldGFzayBydW5zIGFmdGVyIHNvbWVvdGhlcnRhc2sgb2YgYWxsIERFUEVORFMsIFJERVBFTkRTIGFuZCBpbnRlcnRhc2sgZGVwZW5kZW5jaWVzLCByZWN1cnNpdmVseSkKKyAgICAgICAgIyBXZSBuZWVkIHRvIGRvIHRoaXMgc2VwYXJhdGVseSBzaW5jZSB3ZSBuZWVkIGFsbCBvZiBzZWxmLnJ1bnFfZGVwZW5kcyB0byBiZSBjb21wbGV0ZSBiZWZvcmUgdGhpcyBpcyBwcm9jZXNzZWQKKyAgICAgICAgZXh0cmFkZXBzID0ge30KKyAgICAgICAgZm9yIHRhc2sgaW4gcmVjdXJzaXZldGFza3M6CisgICAgICAgICAgICBleHRyYWRlcHNbdGFza10gPSBzZXQoc2VsZi5ydW5xX2RlcGVuZHNbdGFza10pCisgICAgICAgICAgICB0YXNrbmFtZXMgPSByZWN1cnNpdmV0YXNrc1t0YXNrXQorICAgICAgICAgICAgc2VlbmRlcHMgPSBzZXQoKQorICAgICAgICAgICAgc2VlbmZuaWQgPSBbXQorCisgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfcmVjZGVwcyh0KToKKyAgICAgICAgICAgICAgICBuZXdkZXBzID0gc2V0KCkKKyAgICAgICAgICAgICAgICBhZGRfcmVzb2x2ZWRfZGVwZW5kZW5jaWVzKFt0YXNrRGF0YS50YXNrc19mbmlkW3RdXSwgdGFza25hbWVzLCBuZXdkZXBzKQorICAgICAgICAgICAgICAgIGV4dHJhZGVwc1t0YXNrXS51cGRhdGUobmV3ZGVwcykKKyAgICAgICAgICAgICAgICBzZWVuZGVwcy5hZGQodCkKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFkZCh0KQorICAgICAgICAgICAgICAgIGZvciBpIGluIG5ld2RlcHM6CisgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIHNlbGYucnVucV9kZXBlbmRzW2ldOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gc2VlbmRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyhuKQorICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyh0YXNrKQorCisgICAgICAgICAgICBpZiB0YXNrIGluIHJlY3Vyc2l2ZWl0YXNrczoKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHJlY3Vyc2l2ZWl0YXNrc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfcmVjZGVwcyhkZXApCisKKyAgICAgICAgIyBSZW1vdmUgY2lyY3VsYXIgcmVmZXJlbmNlcyBzbyB0aGF0IGRvX2FbcmVjcmRlcHRhc2tdID0gImRvX2EgZG9fYiIgY2FuIHdvcmsKKyAgICAgICAgZm9yIHRhc2sgaW4gcmVjdXJzaXZldGFza3M6CisgICAgICAgICAgICBleHRyYWRlcHNbdGFza10uZGlmZmVyZW5jZV91cGRhdGUocmVjdXJzaXZldGFza3NzZWxmcmVmKQorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza0RhdGEudGFza3NfbmFtZSkpOgorICAgICAgICAgICAgIyBBZGQgaW4gZXh0cmEgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiB0YXNrIGluIGV4dHJhZGVwczoKKyAgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbdGFza10gPSBleHRyYWRlcHNbdGFza10KKyAgICAgICAgICAgICMgUmVtb3ZlIGFsbCBzZWxmIHJlZmVyZW5jZXMKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ydW5xX2RlcGVuZHNbdGFza106CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJUYXNrICVzICglcyAlcykgY29udGFpbnMgc2VsZiByZWZlcmVuY2UhICVzIiwgdGFzaywgdGFza0RhdGEuZm5faW5kZXhbdGFza0RhdGEudGFza3NfZm5pZFt0YXNrXV0sIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10sIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdKQorICAgICAgICAgICAgICAgIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdLnJlbW92ZSh0YXNrKQorCisgICAgICAgICMgU3RlcCBCIC0gTWFyayBhbGwgYWN0aXZlIHRhc2tzCisgICAgICAgICMKKyAgICAgICAgIyBTdGFydCB3aXRoIHRoZSB0YXNrcyB3ZSB3ZXJlIGFza2VkIHRvIHJ1biBhbmQgbWFyayBhbGwgZGVwZW5kZW5jaWVzCisgICAgICAgICMgYXMgYWN0aXZlIHRvby4gSWYgdGhlIHRhc2sgaXMgdG8gYmUgJ2ZvcmNlZCcsIGNsZWFyIGl0cyBzdGFtcC4gT25jZQorICAgICAgICAjIGFsbCBhY3RpdmUgdGFza3MgYXJlIG1hcmtlZCwgcHJ1bmUgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZC4KKworICAgICAgICBsb2dnZXIudmVyYm9zZSgiTWFya2luZyBBY3RpdmUgVGFza3MiKQorCisgICAgICAgIGRlZiBtYXJrX2FjdGl2ZShsaXN0aWQsIGRlcHRoKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgTWFyayBhbiBpdGVtIGFzIGFjdGl2ZSBhbG9uZyB3aXRoIGl0cyBkZXBlbmRzCisgICAgICAgICAgICAoY2FsbHMgaXRzZWxmIHJlY3Vyc2l2ZWx5KQorICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAgIGlmIHJ1bnFfYnVpbGRbbGlzdGlkXSA9PSAxOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBydW5xX2J1aWxkW2xpc3RpZF0gPSAxCisKKyAgICAgICAgICAgIGRlcGVuZHMgPSBzZWxmLnJ1bnFfZGVwZW5kc1tsaXN0aWRdCisgICAgICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGVuZHM6CisgICAgICAgICAgICAgICAgbWFya19hY3RpdmUoZGVwZW5kLCBkZXB0aCsxKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BhaXJzID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnRhcmdldHM6CisgICAgICAgICAgICB0YXJnZXRpZCA9IHRhc2tEYXRhLmdldGJ1aWxkX2lkKHRhcmdldFswXSkKKworICAgICAgICAgICAgaWYgdGFyZ2V0aWQgbm90IGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza0RhdGEuZmFpbGVkX2RlcHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm5pZCA9IHRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICBmbiA9IHRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICBzZWxmLnRhcmdldF9wYWlycy5hcHBlbmQoKGZuLCB0YXJnZXRbMV0pKQorCisgICAgICAgICAgICBpZiBmbmlkIGluIHRhc2tEYXRhLmZhaWxlZF9mbmlkczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiB0YXJnZXRbMV0gbm90IGluIHRhc2tEYXRhLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICBpbXBvcnQgZGlmZmxpYgorICAgICAgICAgICAgICAgIGNsb3NlX21hdGNoZXMgPSBkaWZmbGliLmdldF9jbG9zZV9tYXRjaGVzKHRhcmdldFsxXSwgdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdLCBjdXRvZmY9MC43KQorICAgICAgICAgICAgICAgIGlmIGNsb3NlX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgIlxuICAiLmpvaW4oY2xvc2VfbWF0Y2hlcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIiCisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzIGRvZXMgbm90IGV4aXN0IGZvciB0YXJnZXQgJXMlcyIgJSAodGFyZ2V0WzFdLCB0YXJnZXRbMF0sIGV4dHJhKSkKKworICAgICAgICAgICAgbGlzdGlkID0gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdW3RhcmdldFsxXV0KKworICAgICAgICAgICAgbWFya19hY3RpdmUobGlzdGlkLCAxKQorCisgICAgICAgICMgU3RlcCBDIC0gUHJ1bmUgYWxsIGluYWN0aXZlIHRhc2tzCisgICAgICAgICMKKyAgICAgICAgIyBPbmNlIGFsbCBhY3RpdmUgdGFza3MgYXJlIG1hcmtlZCwgcHJ1bmUgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZC4KKworICAgICAgICBtYXBzID0gW10KKyAgICAgICAgZGVsY291bnQgPSAwCisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgcnVucV9idWlsZFtsaXN0aWQtZGVsY291bnRdID09IDE6CisgICAgICAgICAgICAgICAgbWFwcy5hcHBlbmQobGlzdGlkLWRlbGNvdW50KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2ZuaWRbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bnFfdGFza1tsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgcnVucV9idWlsZFtsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV9yZXZkZXBzW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2hhc2hbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbGNvdW50ID0gZGVsY291bnQgKyAxCisgICAgICAgICAgICAgICAgbWFwcy5hcHBlbmQoLTEpCisKKyAgICAgICAgIworICAgICAgICAjIFN0ZXAgRCAtIFNhbml0eSBjaGVja3MgYW5kIGNvbXB1dGF0aW9uCisgICAgICAgICMKKworICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBzdGlsbCBoYXZlIHRhc2tzIHRvIHJ1bgorICAgICAgICBpZiBsZW4oc2VsZi5ydW5xX2ZuaWQpID09IDA6CisgICAgICAgICAgICBpZiBub3QgdGFza0RhdGEuYWJvcnQ6CisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJBbGwgYnVpbGRhYmxlIHRhc2tzIGhhdmUgYmVlbiBydW4gYnV0IHRoZSBidWlsZCBpcyBpbmNvbXBsZXRlICgtLWNvbnRpbnVlIG1vZGUpLiBFcnJvcnMgZm9yIHRoZSB0YXNrcyB0aGF0IGZhaWxlZCB3aWxsIGhhdmUgYmVlbiBwcmludGVkIGFib3ZlLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiTm8gYWN0aXZlIHRhc2tzIGFuZCBub3QgaW4gLS1jb250aW51ZSBtb2RlPyEgUGxlYXNlIHJlcG9ydCB0aGlzIGJ1Zy4iKQorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJQcnVuZWQgJXMgaW5hY3RpdmUgdGFza3MsICVzIGxlZnQiLCBkZWxjb3VudCwgbGVuKHNlbGYucnVucV9mbmlkKSkKKworICAgICAgICAjIFJlbWFwIHRoZSBkZXBlbmRlbmNpZXMgdG8gYWNjb3VudCBmb3IgdGhlIGRlbGV0ZWQgdGFza3MKKyAgICAgICAgIyBDaGVjayB3ZSBkaWRuJ3QgZGVsZXRlIGEgdGFzayB3ZSBkZXBlbmQgb24KKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVucV9mbmlkKSk6CisgICAgICAgICAgICBuZXdkZXBzID0gW10KKyAgICAgICAgICAgIG9yaWdkZXBzID0gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXQorICAgICAgICAgICAgZm9yIG9yaWdkZXAgaW4gb3JpZ2RlcHM6CisgICAgICAgICAgICAgICAgaWYgbWFwc1tvcmlnZGVwXSA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJJbnZhbGlkIG1hcHBpbmcgLSBTaG91bGQgbmV2ZXIgaGFwcGVuISIpCisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQobWFwc1tvcmlnZGVwXSkKKyAgICAgICAgICAgIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF0gPSBzZXQobmV3ZGVwcykKKworICAgICAgICBsb2dnZXIudmVyYm9zZSgiQXNzaWduIFdlaWdodGluZ3MiKQorCisgICAgICAgICMgR2VuZXJhdGUgYSBsaXN0IG9mIHJldmVyc2UgZGVwZW5kZW5jaWVzIHRvIGVhc2UgZnV0dXJlIGNhbGN1bGF0aW9ucworICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfcmV2ZGVwc1tkZXBdLmFkZChsaXN0aWQpCisKKyAgICAgICAgIyBJZGVudGlmeSB0YXNrcyBhdCB0aGUgZW5kIG9mIGRlcGVuZGVuY3kgY2hhaW5zCisgICAgICAgICMgRXJyb3Igb24gY2lyY3VsYXIgZGVwZW5kZW5jeSBsb29wcyAobGVuZ3RoIHR3bykKKyAgICAgICAgZW5kcG9pbnRzID0gW10KKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVucV9mbmlkKSk6CisgICAgICAgICAgICByZXZkZXBzID0gc2VsZi5ydW5xX3JldmRlcHNbbGlzdGlkXQorICAgICAgICAgICAgaWYgbGVuKHJldmRlcHMpID09IDA6CisgICAgICAgICAgICAgICAgZW5kcG9pbnRzLmFwcGVuZChsaXN0aWQpCisgICAgICAgICAgICBmb3IgZGVwIGluIHJldmRlcHM6CisgICAgICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF06CisgICAgICAgICAgICAgICAgICAgICNzZWxmLmR1bXBfZGF0YSh0YXNrRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzICglcykgaGFzIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gJXMgKCVzKSIgJSAodGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbZGVwXV0sIHNlbGYucnVucV90YXNrW2RlcF0sIHRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW2xpc3RpZF1dLCBzZWxmLnJ1bnFfdGFza1tsaXN0aWRdKSkKKworICAgICAgICBsb2dnZXIudmVyYm9zZSgiQ29tcHV0ZSB0b3RhbHMgKGhhdmUgJXMgZW5kcG9pbnQocykpIiwgbGVuKGVuZHBvaW50cykpCisKKyAgICAgICAgIyBDYWxjdWxhdGUgdGFzayB3ZWlnaHRzCisgICAgICAgICMgQ2hlY2sgb2YgaGlnaGVyIGxlbmd0aCBjaXJjdWxhciBkZXBlbmRlbmNpZXMKKyAgICAgICAgc2VsZi5ydW5xX3dlaWdodCA9IHNlbGYuY2FsY3VsYXRlX3Rhc2tfd2VpZ2h0cyhlbmRwb2ludHMpCisKKyAgICAgICAgIyBTYW5pdHkgQ2hlY2sgLSBDaGVjayBmb3IgbXVsdGlwbGUgdGFza3MgYnVpbGRpbmcgdGhlIHNhbWUgcHJvdmlkZXIKKyAgICAgICAgcHJvdl9saXN0ID0ge30KKyAgICAgICAgc2Vlbl9mbiA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGZuID0gdGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICBpZiBmbiBpbiBzZWVuX2ZuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWVuX2ZuLmFwcGVuZChmbikKKyAgICAgICAgICAgIGZvciBwcm92IGluIHNlbGYuZGF0YUNhY2hlLmZuX3Byb3ZpZGVzW2ZuXToKKyAgICAgICAgICAgICAgICBpZiBwcm92IG5vdCBpbiBwcm92X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHByb3ZfbGlzdFtwcm92XSA9IFtmbl0KKyAgICAgICAgICAgICAgICBlbGlmIGZuIG5vdCBpbiBwcm92X2xpc3RbcHJvdl06CisgICAgICAgICAgICAgICAgICAgIHByb3ZfbGlzdFtwcm92XS5hcHBlbmQoZm4pCisgICAgICAgIGZvciBwcm92IGluIHByb3ZfbGlzdDoKKyAgICAgICAgICAgIGlmIGxlbihwcm92X2xpc3RbcHJvdl0pID4gMSBhbmQgcHJvdiBub3QgaW4gc2VsZi5tdWx0aV9wcm92aWRlcl93aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgc2Vlbl9wbiA9IFtdCisgICAgICAgICAgICAgICAgIyBJZiB0d28gdmVyc2lvbnMgb2YgdGhlIHNhbWUgUE4gYXJlIGJlaW5nIGJ1aWx0IGl0cyBmYXRhbCwgd2UgZG9uJ3Qgc3VwcG9ydCBpdC4KKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gcHJvdl9saXN0W3Byb3ZdOgorICAgICAgICAgICAgICAgICAgICBwbiA9IHNlbGYuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgICAgICAgICAgaWYgcG4gbm90IGluIHNlZW5fcG46CisgICAgICAgICAgICAgICAgICAgICAgICBzZWVuX3BuLmFwcGVuZChwbikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJNdWx0aXBsZSB2ZXJzaW9ucyBvZiAlcyBhcmUgZHVlIHRvIGJlIGJ1aWx0ICglcykuIE9ubHkgb25lIHZlcnNpb24gb2YgYSBnaXZlbiBQTiBzaG91bGQgYmUgYnVpbHQgaW4gYW55IGdpdmVuIGJ1aWxkLiBZb3UgbGlrZWx5IG5lZWQgdG8gc2V0IFBSRUZFUlJFRF9WRVJTSU9OXyVzIHRvIHNlbGVjdCB0aGUgY29ycmVjdCB2ZXJzaW9uIG9yIGRvbid0IGRlcGVuZCBvbiBtdWx0aXBsZSB2ZXJzaW9ucy4iICUgKHBuLCAiICIuam9pbihwcm92X2xpc3RbcHJvdl0pLCBwbikpCisgICAgICAgICAgICAgICAgbXNnID0gIk11bHRpcGxlIC5iYiBmaWxlcyBhcmUgZHVlIHRvIGJlIGJ1aWx0IHdoaWNoIGVhY2ggcHJvdmlkZSAlcyAoJXMpLiIgJSAocHJvdiwgIiAiLmpvaW4ocHJvdl9saXN0W3Byb3ZdKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhcm5fbXVsdGlfYmI6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKG1zZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIlxuIFRoaXMgdXN1YWxseSBtZWFucyBvbmUgcHJvdmlkZXMgc29tZXRoaW5nIHRoZSBvdGhlciBkb2Vzbid0IGFuZCBzaG91bGQuIgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnKQorCisgICAgICAgICMgQ3JlYXRlIGEgd2hpdGVsaXN0IHVzYWJsZSBieSB0aGUgc3RhbXAgY2hlY2tzCisgICAgICAgIHN0YW1wZm53aGl0ZWxpc3QgPSBbXQorICAgICAgICBmb3IgZW50cnkgaW4gc2VsZi5zdGFtcHdoaXRlbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgZW50cnlpZCA9IHNlbGYudGFza0RhdGEuZ2V0YnVpbGRfaWQoZW50cnkpCisgICAgICAgICAgICBpZiBlbnRyeWlkIG5vdCBpbiBzZWxmLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZuaWQgPSBzZWxmLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZW50cnlpZF1bMF0KKyAgICAgICAgICAgIGZuID0gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtmbmlkXQorICAgICAgICAgICAgc3RhbXBmbndoaXRlbGlzdC5hcHBlbmQoZm4pCisgICAgICAgIHNlbGYuc3RhbXBmbndoaXRlbGlzdCA9IHN0YW1wZm53aGl0ZWxpc3QKKworICAgICAgICAjIEl0ZXJhdGUgb3ZlciB0aGUgdGFzayBsaXN0IGxvb2tpbmcgZm9yIHRhc2tzIHdpdGggYSAnc2V0c2NlbmUnIGZ1bmN0aW9uCisgICAgICAgIHNlbGYucnVucV9zZXRzY2VuZSA9IFtdCisgICAgICAgIGlmIG5vdCBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLm5vc2V0c2NlbmU6CisgICAgICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgICAgICBzZXRzY2VuZSA9IHRhc2tEYXRhLmdldHRhc2tfaWQoc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0sIHNlbGYucnVucV90YXNrW3Rhc2tdICsgIl9zZXRzY2VuZSIsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZXRzY2VuZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfc2V0c2NlbmUuYXBwZW5kKHRhc2spCisKKyAgICAgICAgZGVmIGludmFsaWRhdGVfdGFzayhmbiwgdGFza25hbWUsIGVycm9yX25vc3RhbXApOgorICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGZuaWQgPSBzZWxmLnRhc2tEYXRhLmdldGZuX2lkKGZuKQorICAgICAgICAgICAgaWYgdGFza25hbWUgbm90IGluIHRhc2tEYXRhLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiVGFzayAlcyBkb2VzIG5vdCBleGlzdCwgaW52YWxpZGF0aW5nIHRoaXMgdGFzayB3aWxsIGhhdmUgbm8gZWZmZWN0IiAlIHRhc2tuYW1lKQorICAgICAgICAgICAgaWYgJ25vc3RhbXAnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vc3RhbXAnXToKKyAgICAgICAgICAgICAgICBpZiBlcnJvcl9ub3N0YW1wOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGFzayAlcyBpcyBtYXJrZWQgbm9zdGFtcCwgY2Fubm90IGludmFsaWRhdGUgdGhpcyB0YXNrIiAlIHRhc2tuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJUYXNrICVzIGlzIG1hcmtlZCBub3N0YW1wLCBjYW5ub3QgaW52YWxpZGF0ZSB0aGlzIHRhc2siICUgdGFza25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJJbnZhbGlkYXRlIHRhc2sgJXMsICVzIiwgdGFza25hbWUsIGZuKQorICAgICAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5pbnZhbGlkYXRlX3Rhc2sodGFza25hbWUsIHNlbGYuZGF0YUNhY2hlLCBmbikKKworICAgICAgICAjIEludmFsaWRhdGUgdGFzayBpZiBmb3JjZSBtb2RlIGFjdGl2ZQorICAgICAgICBpZiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmZvcmNlOgorICAgICAgICAgICAgZm9yIChmbiwgdGFyZ2V0KSBpbiBzZWxmLnRhcmdldF9wYWlyczoKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlX3Rhc2soZm4sIHRhcmdldCwgRmFsc2UpCisKKyAgICAgICAgIyBJbnZhbGlkYXRlIHRhc2sgaWYgaW52YWxpZGF0ZSBtb2RlIGFjdGl2ZQorICAgICAgICBpZiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmludmFsaWRhdGVfc3RhbXA6CisgICAgICAgICAgICBmb3IgKGZuLCB0YXJnZXQpIGluIHNlbGYudGFyZ2V0X3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBzdCBpbiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmludmFsaWRhdGVfc3RhbXAuc3BsaXQoJywnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0LnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3QgPSAiZG9fJXMiICUgc3QKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZV90YXNrKGZuLCBzdCwgVHJ1ZSkKKworICAgICAgICAjIEl0ZXJhdGUgb3ZlciB0aGUgdGFzayBsaXN0IGFuZCBjYWxsIGludG8gdGhlIHNpZ2dlbiBjb2RlCisgICAgICAgIGRlYWx0d2l0aCA9IHNldCgpCisgICAgICAgIHRvZGVhbCA9IHNldChyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKSkKKyAgICAgICAgd2hpbGUgbGVuKHRvZGVhbCkgPiAwOgorICAgICAgICAgICAgZm9yIHRhc2sgaW4gdG9kZWFsLmNvcHkoKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5ydW5xX2RlcGVuZHNbdGFza10gLSBkZWFsdHdpdGgpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGRlYWx0d2l0aC5hZGQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgdG9kZWFsLnJlbW92ZSh0YXNrKQorICAgICAgICAgICAgICAgICAgICBwcm9jZGVwID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2NkZXAuYXBwZW5kKHNlbGYudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbZGVwXV0gKyAiLiIgKyBzZWxmLnJ1bnFfdGFza1tkZXBdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfaGFzaFt0YXNrXSA9IGJiLnBhcnNlLnNpZ2dlbi5nZXRfdGFza2hhc2goc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0sIHNlbGYucnVucV90YXNrW3Rhc2tdLCBwcm9jZGVwLCBzZWxmLmRhdGFDYWNoZSkKKworICAgICAgICByZXR1cm4gbGVuKHNlbGYucnVucV9mbmlkKQorCisgICAgZGVmIGR1bXBfZGF0YShzZWxmLCB0YXNrUXVldWUpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcCBzb21lIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAicnVuX3Rhc2tzOiIpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV90YXNrKSk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXMgLSAlczogJXMgICBEZXBzICVzIFJldkRlcHMgJXMiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tRdWV1ZS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3dlaWdodFt0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAic29ydGVkX3Rhc2tzOiIpCisgICAgICAgIGZvciB0YXNrMSBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfdGFzaykpOgorICAgICAgICAgICAgaWYgdGFzazEgaW4gc2VsZi5wcmlvX21hcDoKKyAgICAgICAgICAgICAgICB0YXNrID0gc2VsZi5wcmlvX21hcFt0YXNrMV0KKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXMgLSAlczogJXMgICBEZXBzICVzIFJldkRlcHMgJXMiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza1F1ZXVlLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3dlaWdodFt0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkKKworY2xhc3MgUnVuUXVldWU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvb2tlciwgY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXNrRGF0YSwgdGFyZ2V0cyk6CisKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5jZmdEYXRhID0gY2ZnRGF0YQorICAgICAgICBzZWxmLnJxZGF0YSA9IFJ1blF1ZXVlRGF0YShzZWxmLCBjb29rZXIsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFza0RhdGEsIHRhcmdldHMpCisKKyAgICAgICAgc2VsZi5zdGFtcHBvbGljeSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TVEFNUF9QT0xJQ1kiLCBUcnVlKSBvciAicGVyZmlsZSIKKyAgICAgICAgc2VsZi5oYXNodmFsaWRhdGUgPSBjZmdEYXRhLmdldFZhcigiQkJfSEFTSENIRUNLX0ZVTkNUSU9OIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnNldHNjZW5ldmVyaWZ5ID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTiIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgc2VsZi5kZXB2YWxpZGF0ZSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9TRVRTQ0VORV9ERVBWQUxJRCIsIFRydWUpIG9yIE5vbmUKKworICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVQcmVwYXJlCisKKyAgICAgICAgIyBGb3IgZGlzayBzcGFjZSBtb25pdG9yCisgICAgICAgIHNlbGYuZG0gPSBtb25pdG9yZGlzay5kaXNrTW9uaXRvcihjZmdEYXRhKQorCisgICAgICAgIHNlbGYucnFleGUgPSBOb25lCisgICAgICAgIHNlbGYud29ya2VyID0gTm9uZQorICAgICAgICBzZWxmLndvcmtlcnBpcGUgPSBOb25lCisgICAgICAgIHNlbGYuZmFrZXdvcmtlciA9IE5vbmUKKyAgICAgICAgc2VsZi5mYWtld29ya2VycGlwZSA9IE5vbmUKKworICAgIGRlZiBfc3RhcnRfd29ya2VyKHNlbGYsIGZha2Vyb290ID0gRmFsc2UsIHJxZXhlYyA9IE5vbmUpOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlN0YXJ0aW5nIGJpdGJha2Utd29ya2VyIikKKyAgICAgICAgbWFnaWMgPSAiZGVjYWZiYWQiCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKKyAgICAgICAgICAgIG1hZ2ljID0gImRlY2FmYmFkYmFkIgorICAgICAgICBpZiBmYWtlcm9vdDoKKyAgICAgICAgICAgIGZha2Vyb290Y21kID0gc2VsZi5jZmdEYXRhLmdldFZhcigiRkFLRVJPT1RDTUQiLCBUcnVlKQorICAgICAgICAgICAgZmFrZXJvb3RlbnYgPSAoc2VsZi5jZmdEYXRhLmdldFZhcigiRkFLRVJPT1RCQVNFRU5WIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAodmFyLnNwbGl0KCc9JykgZm9yIHZhciBpbiBmYWtlcm9vdGVudik6CisgICAgICAgICAgICAgICAgZW52W2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgd29ya2VyID0gc3VicHJvY2Vzcy5Qb3BlbihbZmFrZXJvb3RjbWQsICJiaXRiYWtlLXdvcmtlciIsIG1hZ2ljXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd29ya2VyID0gc3VicHJvY2Vzcy5Qb3BlbihbImJpdGJha2Utd29ya2VyIiwgbWFnaWNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQod29ya2VyLnN0ZG91dCkKKyAgICAgICAgd29ya2VycGlwZSA9IHJ1blF1ZXVlUGlwZSh3b3JrZXIuc3Rkb3V0LCBOb25lLCBzZWxmLmNmZ0RhdGEsIHNlbGYsIHJxZXhlYykKKworICAgICAgICB3b3JrZXJkYXRhID0geworICAgICAgICAgICAgInRhc2tkZXBzIiA6IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHMsCisgICAgICAgICAgICAiZmFrZXJvb3RlbnYiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmZha2Vyb290ZW52LAorICAgICAgICAgICAgImZha2Vyb290ZGlycyIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3RkaXJzLAorICAgICAgICAgICAgImZha2Vyb290bm9lbnYiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmZha2Vyb290bm9lbnYsCisgICAgICAgICAgICAic2lnZGF0YSIgOiBiYi5wYXJzZS5zaWdnZW4uZ2V0X3Rhc2tkYXRhKCksCisgICAgICAgICAgICAicnVucV9oYXNoIiA6IHNlbGYucnFkYXRhLnJ1bnFfaGFzaCwKKyAgICAgICAgICAgICJsb2dkZWZhdWx0ZGVidWciIDogYmIubXNnLmxvZ2dlckRlZmF1bHREZWJ1Z0xldmVsLAorICAgICAgICAgICAgImxvZ2RlZmF1bHR2ZXJib3NlIiA6IGJiLm1zZy5sb2dnZXJEZWZhdWx0VmVyYm9zZSwKKyAgICAgICAgICAgICJsb2dkZWZhdWx0dmVyYm9zZWxvZ3MiIDogYmIubXNnLmxvZ2dlclZlcmJvc2VMb2dzLAorICAgICAgICAgICAgImxvZ2RlZmF1bHRkb21haW4iIDogYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zLAorICAgICAgICAgICAgInByaG9zdCIgOiBzZWxmLmNvb2tlci5wcmhvc3QsCisgICAgICAgICAgICAiYnVpbGRuYW1lIiA6IHNlbGYuY2ZnRGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIFRydWUpLAorICAgICAgICAgICAgImRhdGUiIDogc2VsZi5jZmdEYXRhLmdldFZhcigiREFURSIsIFRydWUpLAorICAgICAgICAgICAgInRpbWUiIDogc2VsZi5jZmdEYXRhLmdldFZhcigiVElNRSIsIFRydWUpLAorICAgICAgICB9CisKKyAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8Y29va2VyY29uZmlnPiIgKyBwaWNrbGUuZHVtcHMoc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbikgKyAiPC9jb29rZXJjb25maWc+IikKKyAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8d29ya2VyZGF0YT4iICsgcGlja2xlLmR1bXBzKHdvcmtlcmRhdGEpICsgIjwvd29ya2VyZGF0YT4iKQorICAgICAgICB3b3JrZXIuc3RkaW4uZmx1c2goKQorCisgICAgICAgIHJldHVybiB3b3JrZXIsIHdvcmtlcnBpcGUKKworICAgIGRlZiBfdGVhcmRvd25fd29ya2VyKHNlbGYsIHdvcmtlciwgd29ya2VycGlwZSk6CisgICAgICAgIGlmIG5vdCB3b3JrZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJUZWFyZG93biBmb3IgYml0YmFrZS13b3JrZXIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgIHdvcmtlci5zdGRpbi53cml0ZSgiPHF1aXQ+PC9xdWl0PiIpCisgICAgICAgICAgIHdvcmtlci5zdGRpbi5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBwYXNzCisgICAgICAgIHdoaWxlIHdvcmtlci5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB3b3JrZXJwaXBlLnJlYWQoKQorICAgICAgICAgICAgd29ya2VyLnBvbGwoKQorICAgICAgICB3aGlsZSB3b3JrZXJwaXBlLnJlYWQoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHdvcmtlcnBpcGUuY2xvc2UoKQorCisgICAgZGVmIHN0YXJ0X3dvcmtlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi53b3JrZXI6CisgICAgICAgICAgICBzZWxmLnRlYXJkb3duX3dvcmtlcnMoKQorICAgICAgICBzZWxmLnRlYXJkb3duID0gRmFsc2UKKyAgICAgICAgc2VsZi53b3JrZXIsIHNlbGYud29ya2VycGlwZSA9IHNlbGYuX3N0YXJ0X3dvcmtlcigpCisKKyAgICBkZWYgc3RhcnRfZmFrZXdvcmtlcihzZWxmLCBycWV4ZWMpOgorICAgICAgICBpZiBub3Qgc2VsZi5mYWtld29ya2VyOgorICAgICAgICAgICAgc2VsZi5mYWtld29ya2VyLCBzZWxmLmZha2V3b3JrZXJwaXBlID0gc2VsZi5fc3RhcnRfd29ya2VyKFRydWUsIHJxZXhlYykKKworICAgIGRlZiB0ZWFyZG93bl93b3JrZXJzKHNlbGYpOgorICAgICAgICBzZWxmLnRlYXJkb3duID0gVHJ1ZQorICAgICAgICBzZWxmLl90ZWFyZG93bl93b3JrZXIoc2VsZi53b3JrZXIsIHNlbGYud29ya2VycGlwZSkKKyAgICAgICAgc2VsZi53b3JrZXIgPSBOb25lCisgICAgICAgIHNlbGYud29ya2VycGlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGVhcmRvd25fd29ya2VyKHNlbGYuZmFrZXdvcmtlciwgc2VsZi5mYWtld29ya2VycGlwZSkKKyAgICAgICAgc2VsZi5mYWtld29ya2VyID0gTm9uZQorICAgICAgICBzZWxmLmZha2V3b3JrZXJwaXBlID0gTm9uZQorCisgICAgZGVmIHJlYWRfd29ya2VycyhzZWxmKToKKyAgICAgICAgc2VsZi53b3JrZXJwaXBlLnJlYWQoKQorICAgICAgICBpZiBzZWxmLmZha2V3b3JrZXJwaXBlOgorICAgICAgICAgICAgc2VsZi5mYWtld29ya2VycGlwZS5yZWFkKCkKKworICAgIGRlZiBhY3RpdmVfZmRzKHNlbGYpOgorICAgICAgICBmZHMgPSBbXQorICAgICAgICBpZiBzZWxmLndvcmtlcnBpcGU6CisgICAgICAgICAgICBmZHMuYXBwZW5kKHNlbGYud29ya2VycGlwZS5pbnB1dCkKKyAgICAgICAgaWYgc2VsZi5mYWtld29ya2VycGlwZToKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoc2VsZi5mYWtld29ya2VycGlwZS5pbnB1dCkKKyAgICAgICAgcmV0dXJuIGZkcworCisgICAgZGVmIGNoZWNrX3N0YW1wX3Rhc2soc2VsZiwgdGFzaywgdGFza25hbWUgPSBOb25lLCByZWN1cnNlID0gRmFsc2UsIGNhY2hlID0gTm9uZSk6CisgICAgICAgIGRlZiBnZXRfdGltZXN0YW1wKGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MoZiwgb3MuRl9PSyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIHNlbGYuc3RhbXBwb2xpY3kgPT0gInBlcmZpbGUiOgorICAgICAgICAgICAgZnVsbGRlcHRyZWUgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVsbGRlcHRyZWUgPSBUcnVlCisgICAgICAgICAgICBzdGFtcHdoaXRlbGlzdCA9IFtdCisgICAgICAgICAgICBpZiBzZWxmLnN0YW1wcG9saWN5ID09ICJ3aGl0ZWxpc3QiOgorICAgICAgICAgICAgICAgIHN0YW1wd2hpdGVsaXN0ID0gc2VsZi5ycWRhdGEuc3RhbXBmbndoaXRlbGlzdAorCisgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICBpZiB0YXNrbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKworICAgICAgICBzdGFtcGZpbGUgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisKKyAgICAgICAgIyBJZiB0aGUgc3RhbXAgaXMgbWlzc2luZywgaXQncyBub3QgY3VycmVudAorICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHN0YW1wZmlsZSwgb3MuRl9PSyk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlN0YW1wZmlsZSAlcyBub3QgYXZhaWxhYmxlIiwgc3RhbXBmaWxlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICMgSWYgaXQncyBhICdub3N0YW1wJyB0YXNrLCBpdCdzIG5vdCBjdXJyZW50CisgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICBpZiAnbm9zdGFtcCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9zdGFtcCddOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcy4lcyBpcyBub3N0YW1wXG4iLCBmbiwgdGFza25hbWUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB0YXNrbmFtZSAhPSAiZG9fc2V0c2NlbmUiIGFuZCB0YXNrbmFtZS5lbmRzd2l0aCgiX3NldHNjZW5lIik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGlmIGNhY2hlIGlzIE5vbmU6CisgICAgICAgICAgICBjYWNoZSA9IHt9CisKKyAgICAgICAgaXNjdXJyZW50ID0gVHJ1ZQorICAgICAgICB0MSA9IGdldF90aW1lc3RhbXAoc3RhbXBmaWxlKQorICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgIGlmIGlzY3VycmVudDoKKyAgICAgICAgICAgICAgICBmbjIgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZGVwXV0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZTIgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbZGVwXQorICAgICAgICAgICAgICAgIHN0YW1wZmlsZTIgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUyLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuMikKKyAgICAgICAgICAgICAgICBzdGFtcGZpbGUzID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lMiArICJfc2V0c2NlbmUiLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuMikKKyAgICAgICAgICAgICAgICB0MiA9IGdldF90aW1lc3RhbXAoc3RhbXBmaWxlMikKKyAgICAgICAgICAgICAgICB0MyA9IGdldF90aW1lc3RhbXAoc3RhbXBmaWxlMykKKyAgICAgICAgICAgICAgICBpZiB0MyBhbmQgdDMgPiB0MjoKKyAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGZuID09IGZuMiBvciAoZnVsbGRlcHRyZWUgYW5kIGZuMiBub3QgaW4gc3RhbXB3aGl0ZWxpc3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdDI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wZmlsZSAlcyBkb2VzIG5vdCBleGlzdCcsIHN0YW1wZmlsZTIpCisgICAgICAgICAgICAgICAgICAgICAgICBpc2N1cnJlbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiB0MSA8IHQyOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTdGFtcGZpbGUgJXMgPCAlcycsIHN0YW1wZmlsZSwgc3RhbXBmaWxlMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIHJlY3Vyc2UgYW5kIGlzY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBjYWNoZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2N1cnJlbnQgPSBjYWNoZVtkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTdGFtcGZpbGUgZm9yIGRlcGVuZGVuY3kgJXM6JXMgaW52YWxpZCAoY2FjaGVkKScgJSAoZm4yLCB0YXNrbmFtZTIpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2N1cnJlbnQgPSBzZWxmLmNoZWNrX3N0YW1wX3Rhc2soZGVwLCByZWN1cnNlPVRydWUsIGNhY2hlPWNhY2hlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlW2RlcF0gPSBpc2N1cnJlbnQKKyAgICAgICAgaWYgcmVjdXJzZToKKyAgICAgICAgICAgIGNhY2hlW3Rhc2tdID0gaXNjdXJyZW50CisgICAgICAgIHJldHVybiBpc2N1cnJlbnQKKworICAgIGRlZiBfZXhlY3V0ZV9ydW5xdWV1ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJ1biB0aGUgdGFza3MgaW4gYSBxdWV1ZSBwcmVwYXJlZCBieSBycWRhdGEucHJlcGFyZSgpCisgICAgICAgIFVwb24gZmFpbHVyZSwgb3B0aW9uYWxseSB0cnkgdG8gcmVjb3ZlciB0aGUgYnVpbGQgdXNpbmcgYW55IGFsdGVybmF0ZSBwcm92aWRlcnMKKyAgICAgICAgKGlmIHRoZSBhYm9ydCBvbiBmYWlsdXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzbid0IHNldCkKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dmFsID0gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVQcmVwYXJlOgorICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZUR1bW15KHNlbGYpCisgICAgICAgICAgICBpZiBzZWxmLnJxZGF0YS5wcmVwYXJlKCkgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVTY2VuZUluaXQKKworICAgICAgICAgICAgICAgICMgd2UgYXJlIHJlYWR5IHRvIHJ1biwgc2VlIGlmIGFueSBVSSBjbGllbnQgbmVlZHMgdGhlIGRlcGVuZGVuY3kgaW5mbworICAgICAgICAgICAgICAgIGlmIGJiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX0RFUEVORFNfVFJFRSBpbiBzZWxmLmNvb2tlci5mZWF0dXJlc2V0OgorICAgICAgICAgICAgICAgICAgICBkZXBncmFwaCA9IHNlbGYuY29va2VyLmJ1aWxkRGVwZW5kVHJlZShzZWxmLCBzZWxmLnJxZGF0YS50YXNrRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKGRlcGdyYXBoKSwgc2VsZi5jb29rZXIuZGF0YSkKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlU2NlbmVJbml0OgorICAgICAgICAgICAgZHVtcCA9IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZHVtcF9zaWduYXR1cmVzCisgICAgICAgICAgICBpZiBkdW1wOgorICAgICAgICAgICAgICAgIGlmICdwcmludGRpZmYnIGluIGR1bXA6CisgICAgICAgICAgICAgICAgICAgIGludmFsaWR0YXNrcyA9IHNlbGYucHJpbnRfZGlmZnNjZW5ldGFza3MoKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9zaWduYXR1cmVzKGR1bXApCisgICAgICAgICAgICAgICAgaWYgJ3ByaW50ZGlmZicgaW4gZHVtcDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9kaWZmc2NlbmV0YXNrcyhpbnZhbGlkdGFza3MpCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdGFydF93b3JrZXIoKQorICAgICAgICAgICAgICAgIHNlbGYucnFleGUgPSBSdW5RdWV1ZUV4ZWN1dGVTY2VuZXF1ZXVlKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpbiBbcnVuUXVldWVTY2VuZVJ1biwgcnVuUXVldWVSdW5uaW5nLCBydW5RdWV1ZUNsZWFuVXBdOgorICAgICAgICAgICAgc2VsZi5kbS5jaGVjayhzZWxmKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVTY2VuZVJ1bjoKKyAgICAgICAgICAgIHJldHZhbCA9IHNlbGYucnFleGUuZXhlY3V0ZSgpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVJ1bkluaXQ6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRXhlY3V0aW5nIFJ1blF1ZXVlIFRhc2tzIikKKyAgICAgICAgICAgIHNlbGYucnFleGUgPSBSdW5RdWV1ZUV4ZWN1dGVUYXNrcyhzZWxmKQorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlUnVubmluZworCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVSdW5uaW5nOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5ycWV4ZS5leGVjdXRlKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlQ2xlYW5VcDoKKyAgICAgICAgICAgIHJldHZhbCA9IHNlbGYucnFleGUuZmluaXNoKCkKKworICAgICAgICBpZiAoc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUNvbXBsZXRlIG9yIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVGYWlsZWQpIGFuZCBzZWxmLnJxZXhlOgorICAgICAgICAgICAgc2VsZi50ZWFyZG93bl93b3JrZXJzKCkKKyAgICAgICAgICAgIGlmIHNlbGYucnFleGUuc3RhdHMuZmFpbGVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgJWQgdGFza3Mgb2Ygd2hpY2ggJWQgZGlkbid0IG5lZWQgdG8gYmUgcmVydW4gYW5kICVkIGZhaWxlZC4iLCBzZWxmLnJxZXhlLnN0YXRzLmNvbXBsZXRlZCArIHNlbGYucnFleGUuc3RhdHMuZmFpbGVkLCBzZWxmLnJxZXhlLnN0YXRzLnNraXBwZWQsIHNlbGYucnFleGUuc3RhdHMuZmFpbGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIExldCdzIGF2b2lkIHRoZSB3b3JkICJmYWlsZWQiIGlmIG5vdGhpbmcgYWN0dWFsbHkgZGlkCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCAlZCB0YXNrcyBvZiB3aGljaCAlZCBkaWRuJ3QgbmVlZCB0byBiZSByZXJ1biBhbmQgYWxsIHN1Y2NlZWRlZC4iLCBzZWxmLnJxZXhlLnN0YXRzLmNvbXBsZXRlZCwgc2VsZi5ycWV4ZS5zdGF0cy5za2lwcGVkKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVGYWlsZWQ6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycWRhdGEudGFza0RhdGEudHJ5YWx0Y29uZmlnczoKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5ydW5xdWV1ZS5UYXNrRmFpbHVyZShzZWxmLnJxZXhlLmZhaWxlZF9mbmlkcykKKyAgICAgICAgICAgIGZvciBmbmlkIGluIHNlbGYucnFleGUuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnRhc2tEYXRhLmZhaWxfZm5pZChmbmlkKQorICAgICAgICAgICAgc2VsZi5ycWRhdGEucmVzZXQoKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVDb21wbGV0ZToKKyAgICAgICAgICAgICMgQWxsIGRvbmUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgTG9vcAorICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgZXhlY3V0ZV9ydW5xdWV1ZShzZWxmKToKKyAgICAgICAgIyBDYXRjaCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgYW5kIGVuc3VyZSB3ZSBleGl0IHdoZW4gYW4gZXJyb3Igb2NjdXJzLCBub3QgbG9vcC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGVfcnVucXVldWUoKQorICAgICAgICBleGNlcHQgYmIucnVucXVldWUuVGFza0ZhaWx1cmU6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb246CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi50ZWFyZG93bl93b3JrZXJzKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJBbiB1bmNhdWdodCBleGNlcHRpb24gb2NjdXJlZCBpbiBydW5xdWV1ZSwgcGxlYXNlIHNlZSB0aGUgZmFpbHVyZSBiZWxvdzoiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYudGVhcmRvd25fd29ya2VycygpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgZmluaXNoX3J1bnF1ZXVlKHNlbGYsIG5vdyA9IEZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYucnFleGU6CisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm93OgorICAgICAgICAgICAgc2VsZi5ycWV4ZS5maW5pc2hfbm93KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucnFleGUuZmluaXNoKCkKKworICAgIGRlZiBkdW1wX3NpZ25hdHVyZXMoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGRvbmUgPSBzZXQoKQorICAgICAgICBiYi5ub3RlKCJSZXBhcnNpbmcgZmlsZXMgdG8gY29sbGVjdCBkZXBlbmRlbmN5IGRhdGEiKQorICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBpZiBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10gbm90IGluIGRvbmU6CisgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICAgICAgdGhlX2RhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIHNlbGYuY29va2VyLmRhdGEpCisgICAgICAgICAgICAgICAgZG9uZS5hZGQoc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdKQorCisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Moc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBvcHRpb25zKQorCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHByaW50X2RpZmZzY2VuZXRhc2tzKHNlbGYpOgorCisgICAgICAgIHZhbGlkID0gW10KKyAgICAgICAgc3FfaGFzaCA9IFtdCisgICAgICAgIHNxX2hhc2hmbiA9IFtdCisgICAgICAgIHNxX2ZuID0gW10KKyAgICAgICAgc3FfdGFza25hbWUgPSBbXQorICAgICAgICBzcV90YXNrID0gW10KKyAgICAgICAgbm9leGVjID0gW10KKyAgICAgICAgc3RhbXBwcmVzZW50ID0gW10KKyAgICAgICAgdmFsaWRfbmV3ID0gc2V0KCkKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQorICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgIG5vZXhlYy5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzcV9mbi5hcHBlbmQoZm4pCisgICAgICAgICAgICBzcV9oYXNoZm4uYXBwZW5kKHNlbGYucnFkYXRhLmRhdGFDYWNoZS5oYXNoZm5bZm5dKQorICAgICAgICAgICAgc3FfaGFzaC5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9oYXNoW3Rhc2tdKQorICAgICAgICAgICAgc3FfdGFza25hbWUuYXBwZW5kKHRhc2tuYW1lKQorICAgICAgICAgICAgc3FfdGFzay5hcHBlbmQodGFzaykKKyAgICAgICAgbG9jcyA9IHsgInNxX2ZuIiA6IHNxX2ZuLCAic3FfdGFzayIgOiBzcV90YXNrbmFtZSwgInNxX2hhc2giIDogc3FfaGFzaCwgInNxX2hhc2hmbiIgOiBzcV9oYXNoZm4sICJkIiA6IHNlbGYuY29va2VyLmV4cGFuZGVkX2RhdGEgfQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsID0gc2VsZi5oYXNodmFsaWRhdGUgKyAiKHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQsIHNpZ2luZm89VHJ1ZSkiCisgICAgICAgICAgICB2YWxpZCA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwsIGxvY3MpCisgICAgICAgICMgSGFuZGxlIHZlcnNpb24gd2l0aCBubyBzaWdpbmZvIHBhcmFtZXRlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgY2FsbCA9IHNlbGYuaGFzaHZhbGlkYXRlICsgIihzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKSIKKyAgICAgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKyAgICAgICAgZm9yIHYgaW4gdmFsaWQ6CisgICAgICAgICAgICB2YWxpZF9uZXcuYWRkKHNxX3Rhc2tbdl0pCisKKyAgICAgICAgIyBUYXNrcyB3aGljaCBhcmUgYm90aCBzZXRzY2VuZSBhbmQgbm9leGVjIG5ldmVyIGNhcmUgYWJvdXQgZGVwZW5kZW5jaWVzCisgICAgICAgICMgV2UgdGhlcmVmb3JlIGZpbmQgdGFza3Mgd2hpY2ggYXJlIHNldHNjZW5lIGFuZCBub2V4ZWMgYW5kIG1hcmsgdGhlaXIKKyAgICAgICAgIyB1bmlxdWUgZGVwZW5kZW5jaWVzIGFzIHZhbGlkLgorICAgICAgICBmb3IgdGFzayBpbiBub2V4ZWM6CisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICBoYXNub2V4ZWNwYXJlbnRzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBkZXAyIGluIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAyIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUgYW5kIGRlcDIgaW4gbm9leGVjOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaGFzbm9leGVjcGFyZW50cyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaGFzbm9leGVjcGFyZW50czoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRfbmV3LmFkZChkZXApCisKKyAgICAgICAgaW52YWxpZHRhc2tzID0gc2V0KCkKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHZhbGlkX25ldyBhbmQgdGFzayBub3QgaW4gbm9leGVjOgorICAgICAgICAgICAgICAgIGludmFsaWR0YXNrcy5hZGQodGFzaykKKworICAgICAgICBmb3VuZCA9IHNldCgpCisgICAgICAgIHByb2Nlc3NlZCA9IHNldCgpCisgICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgICAgIHRvcHJvY2VzcyA9IHNldChbdGFza10pCisgICAgICAgICAgICB3aGlsZSB0b3Byb2Nlc3M6CisgICAgICAgICAgICAgICAgbmV4dCA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdG9wcm9jZXNzOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0XToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQuYWRkKHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQuYWRkKGRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFkZChkZXApCisgICAgICAgICAgICAgICAgdG9wcm9jZXNzID0gbmV4dAorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHRvcHJvY2VzcyA9IHNldCgpCisKKyAgICAgICAgdGFza2xpc3QgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiBpbnZhbGlkdGFza3MuZGlmZmVyZW5jZShmb3VuZCk6CisgICAgICAgICAgICB0YXNrbGlzdC5hcHBlbmQoc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisKKyAgICAgICAgaWYgdGFza2xpc3Q6CisgICAgICAgICAgICBiYi5wbGFpbigiVGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGN1cnJlbnQgYnVpbGQgYW5kIGFueSBjYWNoZWQgdGFza3Mgc3RhcnQgYXQgdGhlIGZvbGxvd2luZyB0YXNrczpcbiIgKyAiXG4iLmpvaW4odGFza2xpc3QpKQorCisgICAgICAgIHJldHVybiBpbnZhbGlkdGFza3MuZGlmZmVyZW5jZShmb3VuZCkKKworICAgIGRlZiB3cml0ZV9kaWZmc2NlbmV0YXNrcyhzZWxmLCBpbnZhbGlkdGFza3MpOgorCisgICAgICAgICMgRGVmaW5lIHJlY3Vyc2lvbiBjYWxsYmFjaworICAgICAgICBkZWYgcmVjdXJzZWNiKGtleSwgaGFzaDEsIGhhc2gyKToKKyAgICAgICAgICAgIGhhc2hlcyA9IFtoYXNoMSwgaGFzaDJdCisgICAgICAgICAgICBoYXNoZmlsZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKGtleSwgTm9uZSwgaGFzaGVzLCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgICAgIHJlY291dCA9IFtdCisgICAgICAgICAgICBpZiBsZW4oaGFzaGZpbGVzKSA9PSAyOgorICAgICAgICAgICAgICAgIG91dDIgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhoYXNoZmlsZXNbaGFzaDFdLCBoYXNoZmlsZXNbaGFzaDJdLCByZWN1cnNlY2IpCisgICAgICAgICAgICAgICAgcmVjb3V0LmV4dGVuZChsaXN0KCcgICcgKyBsIGZvciBsIGluIG91dDIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWNvdXQuYXBwZW5kKCJVbmFibGUgdG8gZmluZCBtYXRjaGluZyBzaWdkYXRhIGZvciAlcyB3aXRoIGhhc2hlcyAlcyBvciAlcyIgJSAoa2V5LCBoYXNoMSwgaGFzaDIpKQorCisgICAgICAgICAgICByZXR1cm4gcmVjb3V0CisKKworICAgICAgICBmb3IgdGFzayBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICBoID0gc2VsZi5ycWRhdGEucnVucV9oYXNoW3Rhc2tdCisgICAgICAgICAgICBtYXRjaGVzID0gYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyhwbiwgdGFza25hbWUsIFtdLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgICAgICBtYXRjaCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBtIGluIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgaCBpbiBtOgorICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IG0KKyAgICAgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbid0IGZpbmQgYSB0YXNrIHdlJ3JlIHN1cHBvc2VkIHRvIGhhdmUgd3JpdHRlbiBvdXQ/IChoYXNoOiAlcyk/IiAlIGgpCisgICAgICAgICAgICBtYXRjaGVzID0ge2sgOiB2IGZvciBrLCB2IGluIG1hdGNoZXMuaXRlcml0ZW1zKCkgaWYgaCBub3QgaW4ga30KKyAgICAgICAgICAgIGlmIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgbGF0ZXN0bWF0Y2ggPSBzb3J0ZWQobWF0Y2hlcy5rZXlzKCksIGtleT1sYW1iZGEgZjogbWF0Y2hlc1tmXSlbLTFdCisgICAgICAgICAgICAgICAgcHJldmggPSBfX2ZpbmRfbWQ1X18uc2VhcmNoKGxhdGVzdG1hdGNoKS5ncm91cCgwKQorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGxhdGVzdG1hdGNoLCBtYXRjaCwgcmVjdXJzZWNiKQorICAgICAgICAgICAgICAgIGJiLnBsYWluKCJcblRhc2sgJXM6JXMgY291bGRuJ3QgYmUgdXNlZCBmcm9tIHRoZSBjYWNoZSBiZWNhdXNlOlxuICBXZSBuZWVkIGhhc2ggJXMsIGNsb3Nlc3QgbWF0Y2hpbmcgdGFzayB3YXMgJXNcbiAgIiAlIChwbiwgdGFza25hbWUsIGgsIHByZXZoKSArICdcbiAgJy5qb2luKG91dHB1dCkpCisKK2NsYXNzIFJ1blF1ZXVlRXhlY3V0ZToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSk6CisgICAgICAgIHNlbGYucnEgPSBycQorICAgICAgICBzZWxmLmNvb2tlciA9IHJxLmNvb2tlcgorICAgICAgICBzZWxmLmNmZ0RhdGEgPSBycS5jZmdEYXRhCisgICAgICAgIHNlbGYucnFkYXRhID0gcnEucnFkYXRhCisKKyAgICAgICAgc2VsZi5udW1iZXJfdGFza3MgPSBpbnQoc2VsZi5jZmdEYXRhLmdldFZhcigiQkJfTlVNQkVSX1RIUkVBRFMiLCBUcnVlKSBvciAxKQorICAgICAgICBzZWxmLnNjaGVkdWxlciA9IHNlbGYuY2ZnRGF0YS5nZXRWYXIoIkJCX1NDSEVEVUxFUiIsIFRydWUpIG9yICJzcGVlZCIKKworICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlID0gW10KKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmcgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfY29tcGxldGUgPSBbXQorCisgICAgICAgIHNlbGYuYnVpbGRfc3RhbXBzID0ge30KKyAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMyID0gW10KKyAgICAgICAgc2VsZi5mYWlsZWRfZm5pZHMgPSBbXQorCisgICAgICAgIHNlbGYuc3RhbXBjYWNoZSA9IHt9CisKKyAgICAgICAgcnEud29ya2VycGlwZS5zZXRydW5xdWV1ZWV4ZWMoc2VsZikKKyAgICAgICAgaWYgcnEuZmFrZXdvcmtlcnBpcGU6CisgICAgICAgICAgICBycS5mYWtld29ya2VycGlwZS5zZXRydW5xdWV1ZWV4ZWMoc2VsZikKKworICAgICAgICBpZiBzZWxmLm51bWJlcl90YXNrcyA8PSAwOgorICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIEJCX05VTUJFUl9USFJFQURTICVzIiAlIHNlbGYubnVtYmVyX3Rhc2tzKQorCisgICAgZGVmIHJ1bnF1ZXVlX3Byb2Nlc3Nfd2FpdHBpZChzZWxmLCB0YXNrLCBzdGF0dXMpOgorCisgICAgICAgICMgc2VsZi5idWlsZF9zdGFtcHNbcGlkXSBtYXkgbm90IGV4aXN0IHdoZW4gdXNlIHNoYXJlZCB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgaWYgdGFzayBpbiBzZWxmLmJ1aWxkX3N0YW1wczoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfc3RhbXBzMi5yZW1vdmUoc2VsZi5idWlsZF9zdGFtcHNbdGFza10pCisgICAgICAgICAgICBkZWwgc2VsZi5idWlsZF9zdGFtcHNbdGFza10KKworICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHNlbGYudGFza19mYWlsKHRhc2ssIHN0YXR1cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGFza19jb21wbGV0ZSh0YXNrKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGZpbmlzaF9ub3coc2VsZik6CisKKyAgICAgICAgZm9yIHdvcmtlciBpbiBbc2VsZi5ycS53b3JrZXIsIHNlbGYucnEuZmFrZXdvcmtlcl06CisgICAgICAgICAgICBpZiBub3Qgd29ya2VyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8ZmluaXNobm93PjwvZmluaXNobm93PiIpCisgICAgICAgICAgICAgICAgd29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgd29ya2VyIG11c3QgaGF2ZSBkaWVkPworICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBsZW4oc2VsZi5mYWlsZWRfZm5pZHMpICE9IDA6CisgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ2xlYW5VcAorCisgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlID4gMDoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVFeGl0V2FpdChzZWxmLnN0YXRzLmFjdGl2ZSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYucnEucmVhZF93b3JrZXJzKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJxLmFjdGl2ZV9mZHMoKQorCisgICAgICAgIGlmIGxlbihzZWxmLmZhaWxlZF9mbmlkcykgIT0gMDoKKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUZhaWxlZAorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNoZWNrX2RlcGVuZGVuY2llcyhzZWxmLCB0YXNrLCB0YXNrZGVwcywgc2V0c2NlbmUgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLnJxLmRlcHZhbGlkYXRlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgdGFza2RhdGEgPSB7fQorICAgICAgICB0YXNrZGVwcy5hZGQodGFzaykKKyAgICAgICAgZm9yIGRlcCBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgIGlmIHNldHNjZW5lOgorICAgICAgICAgICAgICAgIGRlcGlkID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVtkZXBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlcGlkID0gZGVwCisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtkZXBpZF1dCisgICAgICAgICAgICBwbiA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5wa2dfZm5bZm5dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tkZXBpZF0KKyAgICAgICAgICAgIHRhc2tkYXRhW2RlcF0gPSBbcG4sIHRhc2tuYW1lLCBmbl0KKyAgICAgICAgY2FsbCA9IHNlbGYucnEuZGVwdmFsaWRhdGUgKyAiKHRhc2ssIHRhc2tkYXRhLCBub3RuZWVkZWQsIGQpIgorICAgICAgICBsb2NzID0geyAidGFzayIgOiB0YXNrLCAidGFza2RhdGEiIDogdGFza2RhdGEsICJub3RuZWVkZWQiIDogc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZCwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CisgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKyAgICAgICAgcmV0dXJuIHZhbGlkCisKK2NsYXNzIFJ1blF1ZXVlRXhlY3V0ZUR1bW15KFJ1blF1ZXVlRXhlY3V0ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxKToKKyAgICAgICAgc2VsZi5ycSA9IHJxCisgICAgICAgIHNlbGYuc3RhdHMgPSBSdW5RdWV1ZVN0YXRzKDApCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICByZXR1cm4KKworY2xhc3MgUnVuUXVldWVFeGVjdXRlVGFza3MoUnVuUXVldWVFeGVjdXRlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnEpOgorICAgICAgICBSdW5RdWV1ZUV4ZWN1dGUuX19pbml0X18oc2VsZiwgcnEpCisKKyAgICAgICAgc2VsZi5zdGF0cyA9IFJ1blF1ZXVlU3RhdHMobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpCisKKyAgICAgICAgc2VsZi5zdGFtcGNhY2hlID0ge30KKworICAgICAgICBpbml0aWFsX2NvdmVyZWQgPSBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5jb3B5KCkKKworICAgICAgICAjIE1hcmsgaW5pdGlhbCBidWlsZGFibGUgdGFza3MKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmcuYXBwZW5kKDApCisgICAgICAgICAgICBzZWxmLnJ1bnFfY29tcGxldGUuYXBwZW5kKDApCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYXBwZW5kKDEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYXBwZW5kKDApCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA+IDAgYW5kIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXS5pc3N1YnNldChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkgYW5kIHRhc2sgbm90IGluIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkOgorICAgICAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZCh0YXNrKQorCisgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICB3aGlsZSBmb3VuZDoKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKKyAgICAgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnQ29uc2lkZXJpbmcgJXMgKCVzKTogJXMnICUgKHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spLCBzdHIoc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSkpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA+IDAgYW5kIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXS5pc3N1YnNldChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkgYW5kIHRhc2sgbm90IGluIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQuYWRkKHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdTa2lwIGxpc3QgKHByZSBzZXRzY2VuZXZlcmlmeSkgJXMnLCBzb3J0ZWQoc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpKQorCisgICAgICAgICMgQWxsb3cgdGhlIG1ldGFkYXRhIHRvIGVsZWN0IGZvciBzZXRzY2VuZSB0YXNrcyB0byBydW4gYW55d2F5CisgICAgICAgIGNvdmVyZWRfcmVtb3ZlID0gc2V0KCkKKyAgICAgICAgaWYgc2VsZi5ycS5zZXRzY2VuZXZlcmlmeToKKyAgICAgICAgICAgIGludmFsaWR0YXNrcyA9IFtdCisgICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfdGFzaykpOgorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub2V4ZWMnXToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2sodGFzaywgdGFza25hbWUgKyAiX3NldHNjZW5lIiwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTZXRzY2VuZSBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzKCVzKScsIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayh0YXNrLCB0YXNrbmFtZSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnTm9ybWFsIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzLmFwcGVuZCh0YXNrKQorCisgICAgICAgICAgICBjYWxsID0gc2VsZi5ycS5zZXRzY2VuZXZlcmlmeSArICIoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkLCBpbnZhbGlkdGFza3M9aW52YWxpZHRhc2tzKSIKKyAgICAgICAgICAgIGNhbGwyID0gc2VsZi5ycS5zZXRzY2VuZXZlcmlmeSArICIoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkKSIKKyAgICAgICAgICAgIGxvY3MgPSB7ICJjb3ZlcmVkIiA6IHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLCAidGFza25hbWVzIiA6IHNlbGYucnFkYXRhLnJ1bnFfdGFzaywgImZuaWRzIiA6IHNlbGYucnFkYXRhLnJ1bnFfZm5pZCwgImZucyIgOiBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleCwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSwgImludmFsaWR0YXNrcyIgOiBpbnZhbGlkdGFza3MgfQorICAgICAgICAgICAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIHdpdGhvdXQgaW52YWxpZHRhc2tzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY292ZXJlZF9yZW1vdmUgPSBiYi51dGlscy5iZXR0ZXJfZXZhbChjYWxsLCBsb2NzKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwyLCBsb2NzKQorCisgICAgICAgIGRlZiByZW1vdmVjb3ZlcmVkdGFzayh0YXNrKToKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10gKyAnX3NldHNjZW5lJworICAgICAgICAgICAgYmIuYnVpbGQuZGVsX3N0YW1wKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQucmVtb3ZlKHRhc2spCisKKyAgICAgICAgdG9yZW1vdmUgPSBjb3ZlcmVkX3JlbW92ZQorICAgICAgICBmb3IgdGFzayBpbiB0b3JlbW92ZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnTm90IHNraXBwaW5nIHRhc2sgJXMgZHVlIHRvIHNldHNjZW5ldmVyaWZ5JywgdGFzaykKKyAgICAgICAgd2hpbGUgdG9yZW1vdmU6CisgICAgICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IFtdCisgICAgICAgICAgICBmb3IgdGFzayBpbiB0b3JlbW92ZToKKyAgICAgICAgICAgICAgICByZW1vdmVjb3ZlcmVkdGFzayh0YXNrKQorICAgICAgICAgICAgICAgIGZvciBkZXB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwdGFzayBub3QgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBkZXB0YXNrIGluIHRvcmVtb3ZlIG9yIGRlcHRhc2sgaW4gY292ZXJlZF9yZW1vdmUgb3IgZGVwdGFzayBpbiBpbml0aWFsX2NvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ1Rhc2sgJXMgZGVwZW5kcyBvbiB0YXNrICVzIHNvIG5vdCBza2lwcGluZycgJSAodGFzaywgZGVwdGFzaykpCisgICAgICAgICAgICAgICAgICAgIGNvdmVyZWRfcmVtb3ZlLmFwcGVuZChkZXB0YXNrKQorICAgICAgICAgICAgdG9yZW1vdmUgPSBjb3ZlcmVkX3JlbW92ZQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnRnVsbCBza2lwIGxpc3QgJXMnLCBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkKKworICAgICAgICBldmVudC5maXJlKGJiLmV2ZW50LlN0YW1wVXBkYXRlKHNlbGYucnFkYXRhLnRhcmdldF9wYWlycywgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnN0YW1wKSwgc2VsZi5jZmdEYXRhKQorCisgICAgICAgIHNjaGVkdWxlcnMgPSBzZWxmLmdldF9zY2hlZHVsZXJzKCkKKyAgICAgICAgZm9yIHNjaGVkdWxlciBpbiBzY2hlZHVsZXJzOgorICAgICAgICAgICAgaWYgc2VsZi5zY2hlZHVsZXIgPT0gc2NoZWR1bGVyLm5hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5zY2hlZCA9IHNjaGVkdWxlcihzZWxmLCBzZWxmLnJxZGF0YSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVzaW5nIHJ1bnF1ZXVlIHNjaGVkdWxlciAnJXMnIiwgc2NoZWR1bGVyLm5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIHNjaGVkdWxlciAnJXMnLiAgQXZhaWxhYmxlIHNjaGVkdWxlcnM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoc2VsZi5zY2hlZHVsZXIsICIsICIuam9pbihvYmoubmFtZSBmb3Igb2JqIGluIHNjaGVkdWxlcnMpKSkKKworICAgIGRlZiBnZXRfc2NoZWR1bGVycyhzZWxmKToKKyAgICAgICAgc2NoZWR1bGVycyA9IHNldChvYmogZm9yIG9iaiBpbiBnbG9iYWxzKCkudmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZShvYmopIGlzIHR5cGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Mob2JqLCBSdW5RdWV1ZVNjaGVkdWxlcikpCisKKyAgICAgICAgdXNlcl9zY2hlZHVsZXJzID0gc2VsZi5jZmdEYXRhLmdldFZhcigiQkJfU0NIRURVTEVSUyIsIFRydWUpCisgICAgICAgIGlmIHVzZXJfc2NoZWR1bGVyczoKKyAgICAgICAgICAgIGZvciBzY2hlZCBpbiB1c2VyX3NjaGVkdWxlcnMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgIi4iIGluIHNjaGVkOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJZ25vcmluZyBzY2hlZHVsZXIgJyVzJyBmcm9tIEJCX1NDSEVEVUxFUlM6IG5vdCBhbiBpbXBvcnQiICUgc2NoZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBtb2RuYW1lLCBuYW1lID0gc2NoZWQucnNwbGl0KCIuIiwgMSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kbmFtZSwgZnJvbWxpc3Q9KG5hbWUsKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlVuYWJsZSB0byBpbXBvcnQgc2NoZWR1bGVyICclcycgZnJvbSAnJXMnOiAlcyIgJSAobmFtZSwgbW9kbmFtZSwgZXhjKSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgxKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcnMuYWRkKGdldGF0dHIobW9kdWxlLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIHNjaGVkdWxlcnMKKworICAgIGRlZiBzZXRidWlsZGFibGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisgICAgICAgIHNlbGYuc2NoZWQubmV3YnVpbGFibGUodGFzaykKKworICAgIGRlZiB0YXNrX2NvbXBsZXRlb3V0cmlnaHQoc2VsZiwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgdGFzayBhcyBjb21wbGV0ZWQKKyAgICAgICAgTG9vayBhdCB0aGUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgYW5kIG1hcmsgYW55IHRhc2sgd2l0aAorICAgICAgICBjb21wbGV0ZWQgZGVwZW5kZW5jaWVzIGFzIGJ1aWxkYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ydW5xX2NvbXBsZXRlW3Rhc2tdID0gMQorICAgICAgICBmb3IgcmV2ZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9ydW5uaW5nW3JldmRlcF0gPT0gMToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2J1aWxkYWJsZVtyZXZkZXBdID09IDE6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFsbGRlcHMgPSAxCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucnVucV9jb21wbGV0ZVtkZXBdICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGFsbGRlcHMgPSAwCisgICAgICAgICAgICBpZiBhbGxkZXBzID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRidWlsZGFibGUocmV2ZGVwKQorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JldmRlcF1dCisgICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmV2ZGVwXQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWFya2luZyB0YXNrICVzICglcywgJXMpIGFzIGJ1aWxkYWJsZSIsIHJldmRlcCwgZm4sIHRhc2tuYW1lKQorCisgICAgZGVmIHRhc2tfY29tcGxldGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVUYXNrQ29tcGxldGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisKKyAgICBkZWYgdGFza19mYWlsKHNlbGYsIHRhc2ssIGV4aXRjb2RlKToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB3aGVuIGEgdGFzayBoYXMgZmFpbGVkCisgICAgICAgIFVwZGF0ZXMgdGhlIHN0YXRlIGVuZ2luZSB3aXRoIHRoZSBmYWlsdXJlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN0YXRzLnRhc2tGYWlsZWQoKQorICAgICAgICBmbmlkID0gc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdCisgICAgICAgIHNlbGYuZmFpbGVkX2ZuaWRzLmFwcGVuZChmbmlkKQorICAgICAgICBiYi5ldmVudC5maXJlKHJ1blF1ZXVlVGFza0ZhaWxlZCh0YXNrLCBzZWxmLnN0YXRzLCBleGl0Y29kZSwgc2VsZi5ycSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgaWYgc2VsZi5ycWRhdGEudGFza0RhdGEuYWJvcnQ6CisgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDbGVhblVwCisKKyAgICBkZWYgdGFza19za2lwKHNlbGYsIHRhc2ssIHJlYXNvbik6CisgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnNldGJ1aWxkYWJsZSh0YXNrKQorICAgICAgICBiYi5ldmVudC5maXJlKHJ1blF1ZXVlVGFza1NraXBwZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSwgcmVhc29uKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICBzZWxmLnRhc2tfY29tcGxldGVvdXRyaWdodCh0YXNrKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tTa2lwcGVkKCkKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIHRoZSB0YXNrcyBpbiBhIHF1ZXVlIHByZXBhcmVkIGJ5IHJxZGF0YS5wcmVwYXJlKCkKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorICAgICAgICAKKworICAgICAgICBpZiBzZWxmLnN0YXRzLnRvdGFsID09IDA6CisgICAgICAgICAgICAjIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNsZWFuVXAKKworICAgICAgICB0YXNrID0gc2VsZi5zY2hlZC5uZXh0KCkKKyAgICAgICAgaWYgdGFzayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKworICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNldHNjZW5lIGNvdmVyZWQgdGFzayAlcyAoJXMpIiwgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaywgImNvdmVyZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayh0YXNrLCB0YXNrbmFtZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlN0YW1wIGN1cnJlbnQgdGFzayAlcyAoJXMpIiwgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaywgImV4aXN0aW5nIikKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgIHN0YXJ0ZXZlbnQgPSBydW5RdWV1ZVRhc2tTdGFydGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9leGVjPVRydWUpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShzdGFydGV2ZW50LCBzZWxmLmNmZ0RhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgICAgICAgICAgc2VsZi5zdGF0cy50YXNrQWN0aXZlKCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5kcnlfcnVuOgorICAgICAgICAgICAgICAgICAgICBiYi5idWlsZC5tYWtlX3N0YW1wKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgICAgIHNlbGYudGFza19jb21wbGV0ZSh0YXNrKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXJ0ZXZlbnQgPSBydW5RdWV1ZVRhc2tTdGFydGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShzdGFydGV2ZW50LCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgICAgIHRhc2tkZXBkYXRhID0gc2VsZi5idWlsZF90YXNrZGVwZGF0YSh0YXNrKQorCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGlmICdmYWtlcm9vdCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnZmFrZXJvb3QnXSBhbmQgbm90IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycS5mYWtld29ya2VyOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXJ0X2Zha2V3b3JrZXIoc2VsZikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJGYWlsZWQgdG8gc3Bhd24gZmFrZXJvb3Qgd29ya2VyIHRvIHJ1biAlczolczogJXMiICUgKGZuLCB0YXNrbmFtZSwgc3RyKGV4YykpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlRmFpbGVkCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgdGFza2RlcGRhdGEpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXIuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHRhc2ssIHRhc2tuYW1lLCBGYWxzZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgdGFza2RlcGRhdGEpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi5mbHVzaCgpCisKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfc3RhbXBzW3Rhc2tdID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMyLmFwcGVuZChzZWxmLmJ1aWxkX3N0YW1wc1t0YXNrXSkgCisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9IDEKKyAgICAgICAgICAgIHNlbGYuc3RhdHMudGFza0FjdGl2ZSgpCisgICAgICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA8IHNlbGYubnVtYmVyX3Rhc2tzOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPiAwOgorICAgICAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnEuYWN0aXZlX2ZkcygpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZmFpbGVkX2ZuaWRzKSAhPSAwOgorICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlRmFpbGVkCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgU2FuaXR5IENoZWNrcworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID09IDA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICVzIG5ldmVyIGJ1aWxkYWJsZSEiLCB0YXNrKQorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgbmV2ZXIgcmFuISIsIHRhc2spCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfY29tcGxldGVbdGFza10gPT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgbmV2ZXIgY29tcGxldGVkISIsIHRhc2spCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBidWlsZF90YXNrZGVwZGF0YShzZWxmLCB0YXNrKToKKyAgICAgICAgdGFza2RlcGRhdGEgPSB7fQorICAgICAgICBuZXh0ID0gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdCisgICAgICAgIG5leHQuYWRkKHRhc2spCisgICAgICAgIHdoaWxlIG5leHQ6CisgICAgICAgICAgICBhZGRpdGlvbmFsID0gW10KKyAgICAgICAgICAgIGZvciByZXZkZXAgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtyZXZkZXBdXQorICAgICAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZXZkZXBdCisgICAgICAgICAgICAgICAgZGVwcyA9IHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1tyZXZkZXBdCisgICAgICAgICAgICAgICAgcHJvdmlkZXMgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZm5fcHJvdmlkZXNbZm5dCisgICAgICAgICAgICAgICAgdGFza2RlcGRhdGFbcmV2ZGVwXSA9IFtwbiwgdGFza25hbWUsIGZuLCBkZXBzLCBwcm92aWRlc10KKyAgICAgICAgICAgICAgICBmb3IgcmV2ZGVwMiBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBpZiByZXZkZXAyIG5vdCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwuYXBwZW5kKHJldmRlcDIpCisgICAgICAgICAgICBuZXh0ID0gYWRkaXRpb25hbAorCisgICAgICAgICNiYi5ub3RlKCJUYXNrICVzOiAiICUgdGFzayArIHN0cih0YXNrZGVwZGF0YSkucmVwbGFjZSgiXSwgIiwgIl0sXG4iKSkKKyAgICAgICAgcmV0dXJuIHRhc2tkZXBkYXRhCisKK2NsYXNzIFJ1blF1ZXVlRXhlY3V0ZVNjZW5lcXVldWUoUnVuUXVldWVFeGVjdXRlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnEpOgorICAgICAgICBSdW5RdWV1ZUV4ZWN1dGUuX19pbml0X18oc2VsZiwgcnEpCisKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX2NvdmVyZWQgPSBzZXQoKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfbm90Y292ZXJlZCA9IHNldCgpCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3RuZWVkZWQgPSBzZXQoKQorCisgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgc2V0c2NlbmUgZnVuY3Rpb25zLCBza2lwIHRoaXMgc3RlcAorICAgICAgICBpZiBsZW4oc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZSkgPT0gMDoKKyAgICAgICAgICAgIHJxLnNjZW5lcXVldWVfY292ZXJlZCA9IHNldCgpCisgICAgICAgICAgICBycS5zdGF0ZSA9IHJ1blF1ZXVlUnVuSW5pdAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5zdGF0cyA9IFJ1blF1ZXVlU3RhdHMobGVuKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUpKQorCisgICAgICAgIHNxX3JldmRlcHMgPSBbXQorICAgICAgICBzcV9yZXZkZXBzX25ldyA9IFtdCisgICAgICAgIHNxX3JldmRlcHNfc3F1YXNoID0gW10KKyAgICAgICAgc2VsZi5zcV9oYXJkZGVwcyA9IHt9CisKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIGRlcGVuZGVuY3kgZ3JhcGggZm9yIHRoZSBzZXRzY2VuZSBmdW5jdGlvbnMuIEludGVybWVkaWF0ZQorICAgICAgICAjIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBzZXRzY2VuZSB0YXNrcyBvbmx5IGNvbXBsaWNhdGUgdGhlIGNvZGUuIFRoaXMgY29kZQorICAgICAgICAjIHRoZXJlZm9yZSBhaW1zIHRvIGNvbGxhcHNlIHRoZSBodWdlIHJ1bnF1ZXVlIGRlcGVuZGVuY3kgdHJlZSBpbnRvIGEgc21hbGxlciBvbmUKKyAgICAgICAgIyBvbmx5IGNvbnRhaW5pbmcgdGhlIHNldHNjZW5lIGZ1bmN0aW9ucy4KKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hcHBlbmQoMCkKKyAgICAgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZS5hcHBlbmQoMCkKKyAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUuYXBwZW5kKDApCisKKyAgICAgICAgIyBGaXJzdCBwcm9jZXNzIHRoZSBjaGFpbnMgdXAgdG8gdGhlIGZpcnN0IHNldHNjZW5lIHRhc2suCisgICAgICAgIGVuZHBvaW50cyA9IHt9CisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBzcV9yZXZkZXBzLmFwcGVuZChjb3B5LmNvcHkoc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSkKKyAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3LmFwcGVuZChzZXQoKSkKKyAgICAgICAgICAgIGlmIChsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA9PSAwKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgICAgICBlbmRwb2ludHNbdGFza10gPSBzZXQoKQorCisgICAgICAgICMgU2Vjb25kbHkgcHJvY2VzcyB0aGUgY2hhaW5zIGJldHdlZW4gc2V0c2NlbmUgdGFza3MuCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBlbmRwb2ludHM6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludHNbZGVwXSA9IHNldCgpCisgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50c1tkZXBdLmFkZCh0YXNrKQorCisgICAgICAgIGRlZiBwcm9jZXNzX2VuZHBvaW50cyhlbmRwb2ludHMpOgorICAgICAgICAgICAgbmV3ZW5kcG9pbnRzID0ge30KKyAgICAgICAgICAgIGZvciBwb2ludCwgdGFzayBpbiBlbmRwb2ludHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0YXNrcyA9IHNldCgpCisgICAgICAgICAgICAgICAgaWYgdGFzazoKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gdGFzaworICAgICAgICAgICAgICAgIGlmIHNxX3JldmRlcHNfbmV3W3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gc3FfcmV2ZGVwc19uZXdbcG9pbnRdCisgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXdbcG9pbnRdID0gc2V0KCkKKyAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ld1twb2ludF0gPSB0YXNrcworICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgaWYgcG9pbnQgaW4gc3FfcmV2ZGVwc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc1tkZXBdLnJlbW92ZShwb2ludCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ld1tkZXBdIHw9IHRhc2tzCisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oc3FfcmV2ZGVwc1tkZXBdKSA9PSAwIG9yIGxlbihzcV9yZXZkZXBzX25ld1tkZXBdKSAhPSAwKSBhbmQgZGVwIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZW5kcG9pbnRzW2RlcF0gPSB0YXNrCisgICAgICAgICAgICBpZiBsZW4obmV3ZW5kcG9pbnRzKSAhPSAwOgorICAgICAgICAgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzKG5ld2VuZHBvaW50cykKKworICAgICAgICBwcm9jZXNzX2VuZHBvaW50cyhlbmRwb2ludHMpCisKKyAgICAgICAgIyBCdWlsZCBhIGxpc3Qgb2Ygc2V0c2NlbmUgdGFza3Mgd2hpY2ggYXJlICJ1bnNraXBwYWJsZSIKKyAgICAgICAgIyBUaGVzZSBhcmUgZGlyZWN0IGVuZHBvaW50cyByZWZlcmVuY2VkIGJ5IHRoZSBidWlsZAorICAgICAgICBlbmRwb2ludHMyID0ge30KKyAgICAgICAgc3FfcmV2ZGVwczIgPSBbXQorICAgICAgICBzcV9yZXZkZXBzX25ldzIgPSBbXQorICAgICAgICBkZWYgcHJvY2Vzc19lbmRwb2ludHMyKGVuZHBvaW50cyk6CisgICAgICAgICAgICBuZXdlbmRwb2ludHMgPSB7fQorICAgICAgICAgICAgZm9yIHBvaW50LCB0YXNrIGluIGVuZHBvaW50cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRhc2tzID0gc2V0KFtwb2ludF0pCisgICAgICAgICAgICAgICAgaWYgdGFzazoKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gdGFzaworICAgICAgICAgICAgICAgIGlmIHNxX3JldmRlcHNfbmV3Mltwb2ludF06CisgICAgICAgICAgICAgICAgICAgIHRhc2tzIHw9IHNxX3JldmRlcHNfbmV3Mltwb2ludF0KKyAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbcG9pbnRdID0gc2V0KCkKKyAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbcG9pbnRdID0gdGFza3MKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1twb2ludF06CisgICAgICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNxX3JldmRlcHMyW2RlcF06CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzMltkZXBdLnJlbW92ZShwb2ludCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzJbZGVwXSB8PSB0YXNrcworICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHNxX3JldmRlcHMyW2RlcF0pID09IDAgb3IgbGVuKHNxX3JldmRlcHNfbmV3MltkZXBdKSAhPSAwKSBhbmQgZGVwIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZW5kcG9pbnRzW2RlcF0gPSB0YXNrcworICAgICAgICAgICAgaWYgbGVuKG5ld2VuZHBvaW50cykgIT0gMDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzX2VuZHBvaW50czIobmV3ZW5kcG9pbnRzKQorICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgc3FfcmV2ZGVwczIuYXBwZW5kKGNvcHkuY29weShzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pKQorICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXcyLmFwcGVuZChzZXQoKSkKKyAgICAgICAgICAgIGlmIChsZW4oc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKSA9PSAwKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgICAgICBlbmRwb2ludHMyW3Rhc2tdID0gc2V0KCkKKyAgICAgICAgcHJvY2Vzc19lbmRwb2ludHMyKGVuZHBvaW50czIpCisgICAgICAgIHNlbGYudW5za2lwcGFibGUgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgaWYgc3FfcmV2ZGVwc19uZXcyW3Rhc2tdOgorICAgICAgICAgICAgICAgIHNlbGYudW5za2lwcGFibGUuYXBwZW5kKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFzaykpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgICAgICBkZXBzID0gc2V0KCkKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNxX3JldmRlcHNfbmV3W3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFkZChzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KGRlcCkpCisgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2guYXBwZW5kKGRlcHMpCisgICAgICAgICAgICBlbGlmIGxlbihzcV9yZXZkZXBzX25ld1t0YXNrXSkgIT0gMDoKKyAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlNvbWV0aGluZyB3ZW50IGJhZGx5IHdyb25nIGR1cmluZyBzY2VuZXF1ZXVlIGdlbmVyYXRpb24sIGFib3J0aW5nLiBQbGVhc2UgcmVwb3J0IHRoaXMgcHJvYmxlbS4iKQorCisgICAgICAgICMgUmVzb2x2ZSBzZXRzY2VuZSBpbnRlci10YXNrIGRlcGVuZGVuY2llcworICAgICAgICAjIGUuZy4gZG9fc29tZXRhc2tfc2V0c2NlbmVbZGVwZW5kc10gPSAidGFyZ2V0bmFtZTpkb19zb21lb3RoZXJ0YXNrX3NldHNjZW5lIgorICAgICAgICAjIE5vdGUgdGhhdCBhbnl0aGluZyBleHBsaWNpdGx5IGRlcGVuZGVkIHVwb24gd2lsbCBoYXZlIGl0cyByZXZlcnNlIGRlcGVuZGVuY2llcyByZW1vdmVkIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcworICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIHJlYWxpZCA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmdldHRhc2tfaWQoc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXSwgc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdICsgIl9zZXRzY2VuZSIsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlkZXBlbmRzID0gc2VsZi5ycWRhdGEudGFza0RhdGEudGFza3NfaWRlcGVuZHNbcmVhbGlkXQorICAgICAgICAgICAgICAgIGZvciAoZGVwaWQsIGlkZXBlbmR0YXNrKSBpbiBpZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwaWQgbm90IGluIHNlbGYucnFkYXRhLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGRlcGRhdGEgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5idWlsZF90YXJnZXRzW2RlcGlkXVswXQorICAgICAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbZGVwZGF0YV0KKyAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gc2VsZi5ycWRhdGEuZ2V0X3Rhc2tfaWQoc2VsZi5ycWRhdGEudGFza0RhdGEuZ2V0Zm5faWQoZGVwKSwgaWRlcGVuZHRhc2sucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNraWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlc19zZXRzY2VuZSBkZXBlbmRzIHVwb24gbm9uLWV4aXN0ZW50IHRhc2sgJXM6JXMiICUgKHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spLCBkZXAsIGlkZXBlbmR0YXNrKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpIGluIHNlbGYuc3FfaGFyZGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNxX2hhcmRkZXBzW3NlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKV0gPSBzZXQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNxX2hhcmRkZXBzW3NlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKV0uYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFzaykpCisKKyAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2hbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNrKV0uYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFza2lkKSkKKyAgICAgICAgICAgICAgICAgICAgIyBIYXZlIHRvIHplcm8gdGhpcyB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2hbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpXSA9IHNldCgpCisKKyAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi5zcV9oYXJkZGVwczoKKyAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYuc3FfaGFyZGRlcHNbdGFza106CisgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfc3F1YXNoW2RlcF0uYWRkKHRhc2spCisKKyAgICAgICAgI2ZvciB0YXNrIGluIHhyYW5nZShsZW4oc3FfcmV2ZGVwc19zcXVhc2gpKToKKyAgICAgICAgIyAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgIyAgICBiYi53YXJuKCJUYXNrICVzOiAlc19zZXRzY2VuZSBpcyAlcyAiICUgKHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSAsIHNxX3JldmRlcHNfc3F1YXNoW3Rhc2tdKSkKKworICAgICAgICBzZWxmLnNxX2RlcHMgPSBbXQorICAgICAgICBzZWxmLnNxX3JldmRlcHMgPSBzcV9yZXZkZXBzX3NxdWFzaAorICAgICAgICBzZWxmLnNxX3JldmRlcHMyID0gY29weS5kZWVwY29weShzZWxmLnNxX3JldmRlcHMpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnNxX3JldmRlcHMpKToKKyAgICAgICAgICAgIHNlbGYuc3FfZGVwcy5hcHBlbmQoc2V0KCkpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6CisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYuc3FfcmV2ZGVwc1t0YXNrXToKKyAgICAgICAgICAgICAgICBzZWxmLnNxX2RlcHNbZGVwXS5hZGQodGFzaykKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYuc3FfcmV2ZGVwc1t0YXNrXSkgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorCisgICAgICAgIHNlbGYub3V0cmlnaHRmYWlsID0gW10KKyAgICAgICAgaWYgc2VsZi5ycS5oYXNodmFsaWRhdGU6CisgICAgICAgICAgICBzcV9oYXNoID0gW10KKyAgICAgICAgICAgIHNxX2hhc2hmbiA9IFtdCisgICAgICAgICAgICBzcV9mbiA9IFtdCisgICAgICAgICAgICBzcV90YXNrbmFtZSA9IFtdCisgICAgICAgICAgICBzcV90YXNrID0gW10KKyAgICAgICAgICAgIG5vZXhlYyA9IFtdCisgICAgICAgICAgICBzdGFtcHByZXNlbnQgPSBbXQorICAgICAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnNxX3JldmRlcHMpKToKKyAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtyZWFsdGFza11dCisgICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdCisgICAgICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub2V4ZWMnXToKKyAgICAgICAgICAgICAgICAgICAgbm9leGVjLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBiYi5idWlsZC5tYWtlX3N0YW1wKHRhc2tuYW1lICsgIl9zZXRzY2VuZSIsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2socmVhbHRhc2ssIHRhc2tuYW1lICsgIl9zZXRzY2VuZSIsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU2V0c2NlbmUgc3RhbXAgY3VycmVudCBmb3IgdGFzayAlcyglcyknLCB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykpCisgICAgICAgICAgICAgICAgICAgIHN0YW1wcHJlc2VudC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayhyZWFsdGFzaywgdGFza25hbWUsIHJlY3Vyc2UgPSBUcnVlLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ05vcm1hbCBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzKCVzKScsIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhbXBwcmVzZW50LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgc3FfZm4uYXBwZW5kKGZuKQorICAgICAgICAgICAgICAgIHNxX2hhc2hmbi5hcHBlbmQoc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmhhc2hmbltmbl0pCisgICAgICAgICAgICAgICAgc3FfaGFzaC5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9oYXNoW3JlYWx0YXNrXSkKKyAgICAgICAgICAgICAgICBzcV90YXNrbmFtZS5hcHBlbmQodGFza25hbWUpCisgICAgICAgICAgICAgICAgc3FfdGFzay5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGNhbGwgPSBzZWxmLnJxLmhhc2h2YWxpZGF0ZSArICIoc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCkiCisgICAgICAgICAgICBsb2NzID0geyAic3FfZm4iIDogc3FfZm4sICJzcV90YXNrIiA6IHNxX3Rhc2tuYW1lLCAic3FfaGFzaCIgOiBzcV9oYXNoLCAic3FfaGFzaGZuIiA6IHNxX2hhc2hmbiwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CisgICAgICAgICAgICB2YWxpZCA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwsIGxvY3MpCisKKyAgICAgICAgICAgIHZhbGlkX25ldyA9IHN0YW1wcHJlc2VudAorICAgICAgICAgICAgZm9yIHYgaW4gdmFsaWQ6CisgICAgICAgICAgICAgICAgdmFsaWRfbmV3LmFwcGVuZChzcV90YXNrW3ZdKQorCisgICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHZhbGlkX25ldyBhbmQgdGFzayBub3QgaW4gbm9leGVjOgorICAgICAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdObyBwYWNrYWdlIGZvdW5kLCBzbyBza2lwcGluZyBzZXRzY2VuZSB0YXNrICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRyaWdodGZhaWwuYXBwZW5kKHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0V4ZWN1dGluZyBTZXRTY2VuZSBUYXNrcycpCisKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlU2NlbmVSdW4KKworICAgIGRlZiBzY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKHNlbGYsIHRhc2ssIGZhaWwgPSBGYWxzZSk6CisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9kZXBzW3Rhc2tdOgorICAgICAgICAgICAgaWYgZmFpbCBhbmQgdGFzayBpbiBzZWxmLnNxX2hhcmRkZXBzIGFuZCBkZXAgaW4gc2VsZi5zcV9oYXJkZGVwc1t0YXNrXToKKyAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgICAgICByZWFsZGVwID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVtkZXBdCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcyB3YXMgdW5hdmFpbGFibGUgYW5kIGlzIGEgaGFyZCBkZXBlbmRlbmN5IG9mICVzIHNvIHNraXBwaW5nIiAlIChzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzayksIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWxkZXApKSkKKyAgICAgICAgICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnMoZGVwLCBmYWlsKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBzZWxmLnNxX3JldmRlcHMyW2RlcF06CisgICAgICAgICAgICAgICAgIyBNYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCBieSB0aGUgZmFpbCBjYXNlIGFib3ZlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuc3FfcmV2ZGVwczJbZGVwXS5yZW1vdmUodGFzaykKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnNxX3JldmRlcHMyW2RlcF0pID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZVtkZXBdID0gMQorCisgICAgZGVmIHRhc2tfY29tcGxldGVvdXRyaWdodChzZWxmLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSB0YXNrIGFzIGNvbXBsZXRlZAorICAgICAgICBMb29rIGF0IHRoZSByZXZlcnNlIGRlcGVuZGVuY2llcyBhbmQgbWFyayBhbnkgdGFzayB3aXRoCisgICAgICAgIGNvbXBsZXRlZCBkZXBlbmRlbmNpZXMgYXMgYnVpbGRhYmxlCisgICAgICAgICIiIgorCisgICAgICAgIGluZGV4ID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0ZvdW5kIHRhc2sgJXMgd2hpY2ggY291bGQgYmUgYWNjZWxlcmF0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoaW5kZXgpKQorCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnModGFzaykKKworICAgIGRlZiB0YXNrX2NvbXBsZXRlKHNlbGYsIHRhc2spOgorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBiYi5ldmVudC5maXJlKHNjZW5lUXVldWVUYXNrQ29tcGxldGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisKKyAgICBkZWYgdGFza19mYWlsKHNlbGYsIHRhc2ssIHJlc3VsdCk6CisgICAgICAgIHNlbGYuc3RhdHMudGFza0ZhaWxlZCgpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoc2NlbmVRdWV1ZVRhc2tGYWlsZWQodGFzaywgc2VsZi5zdGF0cywgcmVzdWx0LCBzZWxmKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfbm90Y292ZXJlZC5hZGQodGFzaykKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX3VwZGF0ZWNvdW50ZXJzKHRhc2ssIFRydWUpCisKKyAgICBkZWYgdGFza19mYWlsb3V0cmlnaHQoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tTa2lwcGVkKCkKKyAgICAgICAgaW5kZXggPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnModGFzaywgVHJ1ZSkKKworICAgIGRlZiB0YXNrX3NraXAoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW3Rhc2tdID0gMQorICAgICAgICBzZWxmLnRhc2tfY29tcGxldGVvdXRyaWdodCh0YXNrKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tDb21wbGV0ZWQoKQorICAgICAgICBzZWxmLnN0YXRzLnRhc2tTa2lwcGVkKCkKKworICAgIGRlZiBleGVjdXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIHRoZSB0YXNrcyBpbiBhIHF1ZXVlIHByZXBhcmVkIGJ5IHByZXBhcmVfcnVucXVldWUKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorCisgICAgICAgIHRhc2sgPSBOb25lCisgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlIDwgc2VsZi5udW1iZXJfdGFza3M6CisgICAgICAgICAgICAjIEZpbmQgdGhlIG5leHQgc2V0c2NlbmUgdG8gcnVuCisgICAgICAgICAgICBmb3IgbmV4dHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucnVucV9idWlsZGFibGVbbmV4dHRhc2tdID09IDEgYW5kIHNlbGYucnVucV9ydW5uaW5nW25leHR0YXNrXSAhPSAxOgorICAgICAgICAgICAgICAgICAgICBpZiBuZXh0dGFzayBpbiBzZWxmLnVuc2tpcHBhYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZXRzY2VuZSB0YXNrICVzIGlzIHVuc2tpcHBhYmxlIiAlIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdKSkgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIG5leHR0YXNrIG5vdCBpbiBzZWxmLnVuc2tpcHBhYmxlIGFuZCBsZW4oc2VsZi5zcV9yZXZkZXBzW25leHR0YXNrXSkgPiAwIGFuZCBzZWxmLnNxX3JldmRlcHNbbmV4dHRhc2tdLmlzc3Vic2V0KHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkKSBhbmQgc2VsZi5jaGVja19kZXBlbmRlbmNpZXMobmV4dHRhc2ssIHNlbGYuc3FfcmV2ZGVwc1tuZXh0dGFza10sIFRydWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVhbHRhc2sgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW25leHR0YXNrXQorICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmVhbHRhc2tdXQorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmR0YXJnZXQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJxZGF0YS50YXJnZXRfcGFpcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0WzBdID09IGZuIGFuZCB0YXJnZXRbMV0gPT0gc2VsZi5ycWRhdGEucnVucV90YXNrW3JlYWx0YXNrXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmR0YXJnZXQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZm91bmR0YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTa2lwcGluZyBzZXRzY2VuZSBmb3IgdGFzayAlcyIgJSBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW25leHR0YXNrXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAobmV4dHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZC5hZGQobmV4dHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV4dHRhc2sgaW4gc2VsZi5vdXRyaWdodGZhaWw6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfZmFpbG91dHJpZ2h0KG5leHR0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgdGFzayA9IG5leHR0YXNrCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHRhc2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JlYWx0YXNrXV0KKworICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdICsgIl9zZXRzY2VuZSIKKyAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayhyZWFsdGFzaywgc2VsZi5ycWRhdGEucnVucV90YXNrW3JlYWx0YXNrXSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTdGFtcCBmb3IgdW5kZXJseWluZyB0YXNrICVzKCVzKSBpcyBjdXJyZW50LCBzbyBza2lwcGluZyBzZXRzY2VuZSB2YXJpYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQorICAgICAgICAgICAgICAgIHNlbGYudGFza19mYWlsb3V0cmlnaHQodGFzaykKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBpZiBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmZvcmNlOgorICAgICAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ycWRhdGEudGFyZ2V0X3BhaXJzOgorICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXRbMF0gPT0gZm4gYW5kIHRhcmdldFsxXSA9PSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX2ZhaWxvdXRyaWdodCh0YXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCB0YXNrbmFtZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1NldHNjZW5lIHN0YW1wIGN1cnJlbnQgdGFzayAlcyglcyksIHNvIHNraXAgaXQgYW5kIGl0cyBkZXBlbmRlbmNpZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX3NraXAodGFzaykKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBzdGFydGV2ZW50ID0gc2NlbmVRdWV1ZVRhc2tTdGFydGVkKHRhc2ssIHNlbGYuc3RhdHMsIHNlbGYucnEpCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKHN0YXJ0ZXZlbnQsIHNlbGYuY2ZnRGF0YSkKKworICAgICAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisgICAgICAgICAgICBpZiAnZmFrZXJvb3QnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ2Zha2Vyb290J106CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucnEuZmFrZXdvcmtlcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ycS5zdGFydF9mYWtld29ya2VyKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLndyaXRlKCI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKChmbiwgcmVhbHRhc2ssIHRhc2tuYW1lLCBUcnVlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBOb25lKSkgKyAiPC9ydW50YXNrPiIpCisgICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5ycS53b3JrZXIuc3RkaW4ud3JpdGUoIjxydW50YXNrPiIgKyBwaWNrbGUuZHVtcHMoKGZuLCByZWFsdGFzaywgdGFza25hbWUsIFRydWUsIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIE5vbmUpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi5mbHVzaCgpCisKKyAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICAgICAgc2VsZi5zdGF0cy50YXNrQWN0aXZlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlIDwgc2VsZi5udW1iZXJfdGFza3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA+IDA6CisgICAgICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5ycS5hY3RpdmVfZmRzKCkKKworICAgICAgICAjZm9yIHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAjICAgIGlmIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdICE9IDE6CisgICAgICAgICMgICAgICAgIGJ1aWxkYWJsZSA9IHNlbGYucnVucV9idWlsZGFibGVbdGFza10KKyAgICAgICAgIyAgICAgICAgcmV2ZGVwcyA9IHNlbGYuc3FfcmV2ZGVwc1t0YXNrXQorICAgICAgICAjICAgICAgICBiYi53YXJuKCJGb3VuZCB3ZSBkaWRuJ3QgcnVuICVzICVzICVzICVzIiAlICh0YXNrLCBidWlsZGFibGUsIHN0cihyZXZkZXBzKSwgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXSkpKQorCisgICAgICAgICMgQ29udmVydCBzY2VuZXF1ZXVlX2NvdmVyZWQgdGFzayBudW1iZXJzIGludG8gZnVsbCB0YXNrZ3JhcGggaWRzCisgICAgICAgIG9sZGNvdmVyZWQgPSBzZWxmLnNjZW5lcXVldWVfY292ZXJlZAorICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCA9IHNldCgpCisgICAgICAgIGZvciB0YXNrIGluIG9sZGNvdmVyZWQ6CisgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXSkKKyAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQgPSBzZXQoKQorICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnNjZW5lcXVldWVfbm90Y292ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkLmFkZChzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnV2UgY2FuIHNraXAgdGFza3MgJXMnLCBzb3J0ZWQoc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQpKQorCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZVJ1bkluaXQKKworICAgICAgICBjb21wbGV0ZWV2ZW50ID0gc2NlbmVRdWV1ZUNvbXBsZXRlKHNlbGYuc3RhdHMsIHNlbGYucnEpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoY29tcGxldGVldmVudCwgc2VsZi5jZmdEYXRhKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHNlbGYsIHRhc2ssIHN0YXR1cyk6CisgICAgICAgIHRhc2sgPSBzZWxmLnJxLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2spCisKKyAgICAgICAgUnVuUXVldWVFeGVjdXRlLnJ1bnF1ZXVlX3Byb2Nlc3Nfd2FpdHBpZChzZWxmLCB0YXNrLCBzdGF0dXMpCisKK2NsYXNzIFRhc2tGYWlsdXJlKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgdGFzayBpbiBhIHJ1bnF1ZXVlIGZhaWxzCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICBzZWxmLmFyZ3MgPSB4CisKKworY2xhc3MgcnVuUXVldWVFeGl0V2FpdChiYi5ldmVudC5FdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgd2hlbiB3YWl0aW5nIGZvciB0YXNrIHByb2Nlc3NlcyB0byBleGl0CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVtYWluKToKKyAgICAgICAgc2VsZi5yZW1haW4gPSByZW1haW4KKyAgICAgICAgc2VsZi5tZXNzYWdlID0gIldhaXRpbmcgZm9yICVzIGFjdGl2ZSB0YXNrcyB0byBmaW5pc2giICUgcmVtYWluCisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIHJ1blF1ZXVlRXZlbnQoYmIuZXZlbnQuRXZlbnQpOgorICAgICIiIgorICAgIEJhc2UgcnVuUXVldWUgZXZlbnQgY2xhc3MKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKToKKyAgICAgICAgc2VsZi50YXNraWQgPSB0YXNrCisgICAgICAgIHNlbGYudGFza3N0cmluZyA9IHJxLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKQorICAgICAgICBzZWxmLnRhc2tuYW1lID0gcnEucnFkYXRhLmdldF90YXNrX25hbWUodGFzaykKKyAgICAgICAgc2VsZi50YXNrZmlsZSA9IHJxLnJxZGF0YS5nZXRfdGFza19maWxlKHRhc2spCisgICAgICAgIHNlbGYudGFza2hhc2ggPSBycS5ycWRhdGEuZ2V0X3Rhc2tfaGFzaCh0YXNrKQorICAgICAgICBzZWxmLnN0YXRzID0gc3RhdHMuY29weSgpCisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIHNjZW5lUXVldWVFdmVudChydW5RdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBCYXNlIHNjZW5lUXVldWUgZXZlbnQgY2xhc3MKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxLCBub2V4ZWM9RmFsc2UpOgorICAgICAgICBydW5RdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgcmVhbHRhc2sgPSBycS5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICBzZWxmLnRhc2tzdHJpbmcgPSBycS5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2ssICJfc2V0c2NlbmUiKQorICAgICAgICBzZWxmLnRhc2tuYW1lID0gcnEucnFkYXRhLmdldF90YXNrX25hbWUocmVhbHRhc2spICsgIl9zZXRzY2VuZSIKKyAgICAgICAgc2VsZi50YXNrZmlsZSA9IHJxLnJxZGF0YS5nZXRfdGFza19maWxlKHJlYWx0YXNrKQorICAgICAgICBzZWxmLnRhc2toYXNoID0gcnEucnFkYXRhLmdldF90YXNrX2hhc2gocmVhbHRhc2spCisKK2NsYXNzIHJ1blF1ZXVlVGFza1N0YXJ0ZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayB3YXMgc3RhcnRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEsIG5vZXhlYz1GYWxzZSk6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLm5vZXhlYyA9IG5vZXhlYworCitjbGFzcyBzY2VuZVF1ZXVlVGFza1N0YXJ0ZWQoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSBzZXRzY2VuZSB0YXNrIHdhcyBzdGFydGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSwgbm9leGVjPUZhbHNlKToKKyAgICAgICAgc2NlbmVRdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5ub2V4ZWMgPSBub2V4ZWMKKworY2xhc3MgcnVuUXVldWVUYXNrRmFpbGVkKHJ1blF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHRhc2sgZmFpbGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBleGl0Y29kZSwgcnEpOgorICAgICAgICBydW5RdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5leGl0Y29kZSA9IGV4aXRjb2RlCisKK2NsYXNzIHNjZW5lUXVldWVUYXNrRmFpbGVkKHNjZW5lUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgc2V0c2NlbmUgdGFzayBmYWlsZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIGV4aXRjb2RlLCBycSk6CisgICAgICAgIHNjZW5lUXVldWVFdmVudC5fX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpCisgICAgICAgIHNlbGYuZXhpdGNvZGUgPSBleGl0Y29kZQorCitjbGFzcyBzY2VuZVF1ZXVlQ29tcGxldGUoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGFsbCB0aGUgc2NlbmVRdWV1ZSB0YXNrcyBhcmUgY29tcGxldGUKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHMsIHJxKToKKyAgICAgICAgc2VsZi5zdGF0cyA9IHN0YXRzLmNvcHkoKQorICAgICAgICBiYi5ldmVudC5FdmVudC5fX2luaXRfXyhzZWxmKQorCitjbGFzcyBydW5RdWV1ZVRhc2tDb21wbGV0ZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayBjb21wbGV0ZWQKKyAgICAiIiIKKworY2xhc3Mgc2NlbmVRdWV1ZVRhc2tDb21wbGV0ZWQoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSBzZXRzY2VuZSB0YXNrIGNvbXBsZXRlZAorICAgICIiIgorCitjbGFzcyBydW5RdWV1ZVRhc2tTa2lwcGVkKHJ1blF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHRhc2sgd2FzIHNraXBwZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxLCByZWFzb24pOgorICAgICAgICBydW5RdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5yZWFzb24gPSByZWFzb24KKworY2xhc3MgcnVuUXVldWVQaXBlKCk6CisgICAgIiIiCisgICAgQWJzdHJhY3Rpb24gZm9yIGEgcGlwZSBiZXR3ZWVuIGEgd29ya2VyIHRocmVhZCBhbmQgdGhlIHNlcnZlcgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlaW4sIHBpcGVvdXQsIGQsIHJxLCBycWV4ZWMpOgorICAgICAgICBzZWxmLmlucHV0ID0gcGlwZWluCisgICAgICAgIGlmIHBpcGVvdXQ6CisgICAgICAgICAgICBwaXBlb3V0LmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzZWxmLmlucHV0KQorICAgICAgICBzZWxmLnF1ZXVlID0gIiIKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnJxID0gcnEKKyAgICAgICAgc2VsZi5ycWV4ZWMgPSBycWV4ZWMKKworICAgIGRlZiBzZXRydW5xdWV1ZWV4ZWMoc2VsZiwgcnFleGVjKToKKyAgICAgICAgc2VsZi5ycWV4ZWMgPSBycWV4ZWMKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiBbc2VsZi5ycS53b3JrZXIsIHNlbGYucnEuZmFrZXdvcmtlcl06CisgICAgICAgICAgICBpZiBub3QgdzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdy5wb2xsKCkKKyAgICAgICAgICAgIGlmIHcucmV0dXJuY29kZSBpcyBub3QgTm9uZSBhbmQgbm90IHNlbGYucnEudGVhcmRvd246CisgICAgICAgICAgICAgICAgbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJxLndvcmtlciBhbmQgdy5waWQgPT0gc2VsZi5ycS53b3JrZXIucGlkOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gIldvcmtlciIKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYucnEuZmFrZXdvcmtlciBhbmQgdy5waWQgPT0gc2VsZi5ycS5mYWtld29ya2VyLnBpZDoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJGYWtlcm9vdCIKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigiJXMgcHJvY2VzcyAoJXMpIGV4aXRlZCB1bmV4cGVjdGVkbHkgKCVzKSwgc2h1dHRpbmcgZG93bi4uLiIgJSAobmFtZSwgdy5waWQsIHN0cih3LnJldHVybmNvZGUpKSkKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorCisgICAgICAgIHN0YXJ0ID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlICsgc2VsZi5pbnB1dC5yZWFkKDEwMjQwMCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUdBSU46CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZW5kID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICB3aGlsZSBmb3VuZCBhbmQgbGVuKHNlbGYucXVldWUpOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgICAgIHdoaWxlIGluZGV4ICE9IC0xIGFuZCBzZWxmLnF1ZXVlLnN0YXJ0c3dpdGgoIjxldmVudD4iKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0gcGlja2xlLmxvYWRzKHNlbGYucXVldWVbNzppbmRleF0pCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJmYWlsZWQgbG9hZCBwaWNrbGUgJyVzJzogJyVzJyIgJSAoZSwgc2VsZi5xdWV1ZVs3OmluZGV4XSkpCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZV9mcm9tX3dvcmtlcihldmVudCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlW2luZGV4Kzg6XQorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V2ZW50PiIpCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9leGl0Y29kZT4iKQorICAgICAgICAgICAgd2hpbGUgaW5kZXggIT0gLTEgYW5kIHNlbGYucXVldWUuc3RhcnRzd2l0aCgiPGV4aXRjb2RlPiIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGFzaywgc3RhdHVzID0gcGlja2xlLmxvYWRzKHNlbGYucXVldWVbMTA6aW5kZXhdKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiZmFpbGVkIGxvYWQgcGlja2xlICclcyc6ICclcyciICUgKGUsIHNlbGYucXVldWVbMTA6aW5kZXhdKSkKKyAgICAgICAgICAgICAgICBzZWxmLnJxZXhlYy5ydW5xdWV1ZV9wcm9jZXNzX3dhaXRwaWQodGFzaywgc3RhdHVzKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlW2luZGV4KzExOl0KKyAgICAgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9leGl0Y29kZT4iKQorICAgICAgICByZXR1cm4gKGVuZCA+IHN0YXJ0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLnJlYWQoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxlbihzZWxmLnF1ZXVlKSA+IDA6CisgICAgICAgICAgICBwcmludCgiV2FybmluZywgd29ya2VyIGxlZnQgcGFydGlhbCBtZXNzYWdlOiAlcyIgJSBzZWxmLnF1ZXVlKQorICAgICAgICBzZWxmLmlucHV0LmNsb3NlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1ZTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOTYgQEAKKyMKKyMgQml0QmFrZSBCYXNlIFNlcnZlciBDb2RlCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCAgUmljaGFyZCBQdXJkaWUKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICAgQWxleGFuZHJ1IERhbWlhbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiIEJhc2UgY29kZSBmb3IgQml0YmFrZSBzZXJ2ZXIgcHJvY2VzcworCitIYXZlIGEgY29tbW9uIGJhc2UgZm9yIHRoYXQgYWxsIEJpdGJha2Ugc2VydmVyIGNsYXNzZXMgZW5zdXJlcyBhIGNvbnNpc3RlbnQKK2FwcHJvYWNoIHRvIHRoZSBpbnRlcmZhY2UsIGFuZCBtaW5pbWl6ZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggY29kZSBkdXBsaWNhdGlvbi4KKworIiIiCisKKyIiIiAgQmFzZUltcGxTZXJ2ZXIoKSB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIFhYU2VydmVyKCkgaW1wbGVtZW50YXRpb25zLgorCisgICAgVGhlc2UgY2xhc3NlcyBjb250YWluIHRoZSBhY3R1YWwgY29kZSB0aGF0IHJ1bnMgdGhlIHNlcnZlciBzaWRlLCBpLmUuCisgICAgbGlzdGVucyBmb3IgdGhlIGNvbW1hbmRzIGFuZCBleGVjdXRlcyB0aGVtLiBBbHRob3VnaCB0aGVzZSBpbXBsZW1lbnRhdGlvbnMKKyAgICBjb250YWluIGFsbCB0aGUgZGF0YSBvZiB0aGUgb3JpZ2luYWwgYml0YmFrZSBjb21tYW5kLCBpLmUgdGhlIGNvb2tlciBpbnN0YW5jZSwKKyAgICB0aGV5IG1heSB3ZWxsIHJ1biBvbiBhIGRpZmZlcmVudCBwcm9jZXNzIG9yIGV2ZW4gbWFjaGluZS4KKworIiIiCisKK2NsYXNzIEJhc2VJbXBsU2VydmVyKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9pZGxlZnVucyA9IHt9CisKKyAgICBkZWYgYWRkY29va2VyKHNlbGYsIGNvb2tlcik6CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisKKyAgICBkZWYgcmVnaXN0ZXJfaWRsZV9mdW5jdGlvbihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgaWRsZSIiIgorICAgICAgICBhc3NlcnQgaGFzYXR0cihmdW5jdGlvbiwgJ19fY2FsbF9fJykKKyAgICAgICAgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dID0gZGF0YQorCisKKworIiIiIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbiBjbGFzcyBpcyB0aGUgY29tbW9uIGFuY2VzdG9yIHRvIGFsbAorICAgIEJpdEJha2VTZXJ2ZXJDb25uZWN0aW9uIGNsYXNzZXMuCisKKyAgICBUaGVzZSBjbGFzc2VzIGNvbnRyb2wgdGhlIHJlbW90ZSBzZXJ2ZXIuIFRoZSBvbmx5IGNvbW1hbmQgY3VycmVudGx5CisgICAgaW1wbGVtZW50ZWQgaXMgdGhlIHRlcm1pbmF0ZSgpIGNvbW1hbmQuCisKKyIiIgorCitjbGFzcyBCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24oKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVySW1wbCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworCisiIiIgQml0QmFrZUJhc2VTZXJ2ZXIgY2xhc3MgaXMgdGhlIGNvbW1vbiBhbmNlc3RvciB0byBhbGwgQml0YmFrZSBzZXJ2ZXJzCisKKyAgICBEZXJpdmUgdGhpcyBjbGFzcyBpbiBvcmRlciB0byBpbXBsZW1lbnQgYSBCaXRCYWtlU2VydmVyIHdoaWNoIGlzIHRoZQorICAgIGNvbnRyb2xsaW5nIHN0dWIgZm9yIHRoZSBhY3R1YWwgc2VydmVyIGltcGxlbWVudGF0aW9uCisKKyIiIgorY2xhc3MgQml0QmFrZUJhc2VTZXJ2ZXIob2JqZWN0KToKKyAgICBkZWYgaW5pdFNlcnZlcihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gTm9uZSAgIyB3ZSBlbnN1cmUgYSBydW50aW1lIGNyYXNoIGlmIG5vdCBvdmVybG9hZGVkCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgYWRkY29va2VyKHNlbGYsIGNvb2tlcik6CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgIHNlbGYuc2VydmVySW1wbC5hZGRjb29rZXIoY29va2VyKQorCisgICAgZGVmIGdldFNlcnZlcklkbGVDQihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VydmVySW1wbC5yZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uCisKKyAgICBkZWYgc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKHNlbGYpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisgICAgICAgIHJhaXNlICAgIk11c3QgcmVkZWZpbmUgdGhlICVzLmVzdGFibGlzaENvbm5lY3Rpb24oKSIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgZGVmIGVuZFNlc3Npb24oc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi50ZXJtaW5hdGUoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3Byb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjYTM1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3Byb2Nlc3MucHkKQEAgLTAsMCArMSwyNjQgQEAKKyMKKyMgQml0QmFrZSBQcm9jZXNzIGJhc2VkIHNlcnZlci4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEJvYiBGb2Vyc3RlciA8cm9iZXJ0QGVyYWZ4LmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIgorICAgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcyBiYXNlZCBzZXJ2ZXIgZm9yIGJpdGJha2UuCisiIiIKKworaW1wb3J0IGJiCitpbXBvcnQgYmIuZXZlbnQKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2VsZWN0Citmcm9tIFF1ZXVlIGltcG9ydCBFbXB0eQorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IEV2ZW50LCBQcm9jZXNzLCB1dGlsLCBRdWV1ZSwgUGlwZSwgcXVldWVzLCBNYW5hZ2VyCisKK2Zyb20gLiBpbXBvcnQgQml0QmFrZUJhc2VTZXJ2ZXIsIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbiwgQmFzZUltcGxTZXJ2ZXIKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UnKQorCitjbGFzcyBTZXJ2ZXJDb21tdW5pY2F0b3IoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubmVjdGlvbiwgZXZlbnRfaGFuZGxlLCBzZXJ2ZXIpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuZXZlbnRfaGFuZGxlID0gZXZlbnRfaGFuZGxlCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisKKyAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgIyBAdG9kbyB0cnkvZXhjZXB0CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5zZW5kKGNvbW1hbmQpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgZG9uJ3QgbGV0IHRoZSB1c2VyIGN0cmwtYyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGZvciBhIHJlc3BvbnNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb25uZWN0aW9uLnBvbGwoMjApOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJlY3YoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaW1lb3V0IHdoaWxlIGF0dGVtcHRpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBiaXRiYWtlIHNlcnZlciIpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGdldEV2ZW50SGFuZGxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ldmVudF9oYW5kbGUudmFsdWUKKworY2xhc3MgRXZlbnRBZGFwdGVyKCk6CisgICAgIiIiCisgICAgQWRhcHRlciB0byB3cmFwIG91ciBldmVudCBxdWV1ZSBzaW5jZSB0aGUgY2FsbGVyIChiYi5ldmVudCkgZXhwZWN0cyB0bworICAgIGNhbGwgYSBzZW5kKCkgbWV0aG9kLCBidXQgb3VyIGFjdHVhbCBxdWV1ZSBvbmx5IGhhcyBwdXQoKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSk6CisgICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQorCisgICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChldmVudCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICBwcmludCgiRXZlbnRBZGFwdGVyIHB1a2VkOiAlcyIgJSBzdHIoZXJyKSkKKworCitjbGFzcyBQcm9jZXNzU2VydmVyKFByb2Nlc3MsIEJhc2VJbXBsU2VydmVyKToKKyAgICBwcm9maWxlX2ZpbGVuYW1lID0gInByb2ZpbGUubG9nIgorICAgIHByb2ZpbGVfcHJvY2Vzc2VkX2ZpbGVuYW1lID0gInByb2ZpbGUubG9nLnByb2Nlc3NlZCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX2NoYW5uZWwsIGV2ZW50X3F1ZXVlLCBmZWF0dXJlbGlzdCk6CisgICAgICAgIEJhc2VJbXBsU2VydmVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIFByb2Nlc3MuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwgPSBjb21tYW5kX2NoYW5uZWwKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IGV2ZW50X3F1ZXVlCisgICAgICAgIHNlbGYuZXZlbnQgPSBFdmVudEFkYXB0ZXIoZXZlbnRfcXVldWUpCisgICAgICAgIHNlbGYuZmVhdHVyZWxpc3QgPSBmZWF0dXJlbGlzdAorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorCisgICAgICAgIHNlbGYucXVpdGluLCBzZWxmLnF1aXRvdXQgPSBQaXBlKCkKKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoImkiKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgZm9yIGV2ZW50IGluIGJiLmV2ZW50LnVpX3F1ZXVlOgorICAgICAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5wdXQoZXZlbnQpCisgICAgICAgIHNlbGYuZXZlbnRfaGFuZGxlLnZhbHVlID0gYmIuZXZlbnQucmVnaXN0ZXJfVUlIaGFuZGxlcihzZWxmLCBUcnVlKQorCisgICAgICAgIGJiLmNvb2tlci5zZXJ2ZXJfbWFpbihzZWxmLmNvb2tlciwgc2VsZi5tYWluKQorCisgICAgZGVmIG1haW4oc2VsZik6CisgICAgICAgICMgSWdub3JlIFNJR0lOVCB3aXRoaW4gdGhlIHNlcnZlciwgYXMgYWxsIFNJR0lOVCBoYW5kbGluZyBpcyBkb25lIGJ5CisgICAgICAgICMgdGhlIFVJIGFuZCBjb21tdW5pY2F0ZWQgdG8gdXMKKyAgICAgICAgc2VsZi5xdWl0aW4uY2xvc2UoKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tbWFuZF9jaGFubmVsLnBvbGwoKToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuY29tbWFuZF9jaGFubmVsLnJlY3YoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoY29tbWFuZCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnF1aXRvdXQucG9sbCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnF1aXRvdXQucmVjdigpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucXVpdCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgIHNlbGYuaWRsZV9jb21tYW5kcyguMSwgW3NlbGYuY29tbWFuZF9jaGFubmVsLCBzZWxmLnF1aXRvdXRdKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdSdW5uaW5nIGNvbW1hbmQgJXMnLCBjb21tYW5kKQorCisgICAgICAgIHNlbGYuZXZlbnRfcXVldWUuY2xvc2UoKQorICAgICAgICBiYi5ldmVudC51bnJlZ2lzdGVyX1VJSGhhbmRsZXIoc2VsZi5ldmVudF9oYW5kbGUudmFsdWUpCisgICAgICAgIHNlbGYuY29tbWFuZF9jaGFubmVsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jb29rZXIuc2h1dGRvd24oVHJ1ZSkKKyAgICAgICAgc2VsZi5xdWl0b3V0LmNsb3NlKCkKKworICAgIGRlZiBpZGxlX2NvbW1hbmRzKHNlbGYsIGRlbGF5LCBmZHM9Tm9uZSk6CisgICAgICAgIG5leHRzbGVlcCA9IGRlbGF5CisgICAgICAgIGlmIG5vdCBmZHM6CisgICAgICAgICAgICBmZHMgPSBbXQorCisgICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ1bmN0aW9uKHNlbGYsIGRhdGEsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIHJldHZhbCBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2lkbGVmdW5zW2Z1bmN0aW9uXQorICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiByZXR2YWwgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgbmV4dHNsZWVwID0gTm9uZQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXR2YWwsIGZsb2F0KToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA8IG5leHRzbGVlcCk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSByZXR2YWwKKyAgICAgICAgICAgICAgICBlbGlmIG5leHRzbGVlcCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZkcyA9IGZkcyArIHJldHZhbAorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignUnVubmluZyBpZGxlIGZ1bmN0aW9uJykKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dCisgICAgICAgICAgICAgICAgc2VsZi5xdWl0ID0gVHJ1ZQorCisgICAgICAgIGlmIG5leHRzbGVlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoZmRzLFtdLFtdLG5leHRzbGVlcCkKKworICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGEgY29va2VyIGNvbW1hbmQgb24gdGhlIHNlcnZlcgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwuc2VuZChzZWxmLmNvb2tlci5jb21tYW5kLnJ1bkNvbW1hbmQoY29tbWFuZCkpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5xdWl0aW4uc2VuZCgicXVpdCIpCisgICAgICAgIHNlbGYucXVpdGluLmNsb3NlKCkKKworY2xhc3MgQml0QmFrZVByb2Nlc3NTZXJ2ZXJDb25uZWN0aW9uKEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlckltcGwsIHVpX2NoYW5uZWwsIGV2ZW50X3F1ZXVlKToKKyAgICAgICAgc2VsZi5wcm9jc2VydmVyID0gc2VydmVySW1wbAorICAgICAgICBzZWxmLnVpX2NoYW5uZWwgPSB1aV9jaGFubmVsCisgICAgICAgIHNlbGYuZXZlbnRfcXVldWUgPSBldmVudF9xdWV1ZQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTZXJ2ZXJDb21tdW5pY2F0b3Ioc2VsZi51aV9jaGFubmVsLCBzZWxmLnByb2NzZXJ2ZXIuZXZlbnRfaGFuZGxlLCBzZWxmLnByb2NzZXJ2ZXIpCisgICAgICAgIHNlbGYuZXZlbnRzID0gc2VsZi5ldmVudF9xdWV1ZQorICAgICAgICBzZWxmLnRlcm1pbmF0ZWQgPSBGYWxzZQorCisgICAgZGVmIHNpZ3Rlcm1fdGVybWluYXRlKHNlbGYpOgorICAgICAgICBiYi5lcnJvcigiVUkgcmVjZWl2ZWQgU0lHVEVSTSIpCisgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGVybWluYXRlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnRlcm1pbmF0ZWQgPSBUcnVlCisgICAgICAgIGRlZiBmbHVzaGV2ZW50cygpOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50ID0gc2VsZi5ldmVudF9xdWV1ZS5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IChFbXB0eSwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsLlNJR19JR04pCisgICAgICAgIHNlbGYucHJvY3NlcnZlci5zdG9wKCkKKworICAgICAgICB3aGlsZSBzZWxmLnByb2NzZXJ2ZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIGZsdXNoZXZlbnRzKCkKKyAgICAgICAgICAgIHNlbGYucHJvY3NlcnZlci5qb2luKDAuMSkKKworICAgICAgICBzZWxmLnVpX2NoYW5uZWwuY2xvc2UoKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5zZXRleGl0KCkKKworIyBXcmFwIFF1ZXVlIHRvIHByb3ZpZGUgQVBJIHdoaWNoIGlzbid0IHNlcnZlciBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYworY2xhc3MgUHJvY2Vzc0V2ZW50UXVldWUobXVsdGlwcm9jZXNzaW5nLnF1ZXVlcy5RdWV1ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemUpOgorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucXVldWVzLlF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUpCisgICAgICAgIHNlbGYuZXhpdCA9IEZhbHNlCisKKyAgICBkZWYgc2V0ZXhpdChzZWxmKToKKyAgICAgICAgc2VsZi5leGl0ID0gVHJ1ZQorCisgICAgZGVmIHdhaXRFdmVudChzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgaWYgc2VsZi5leGl0OgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRleGl0KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KFRydWUsIHRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBFbXB0eToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0RXZlbnQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0ZXhpdCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldChGYWxzZSkKKyAgICAgICAgZXhjZXB0IEVtcHR5OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBCaXRCYWtlU2VydmVyKEJpdEJha2VCYXNlU2VydmVyKToKKyAgICBkZWYgaW5pdFNlcnZlcihzZWxmKToKKyAgICAgICAgIyBlc3RhYmxpc2ggY29tbXVuaWNhdGlvbiBjaGFubmVscy4gIFdlIHVzZSBiaWRpcmVjdGlvbmFsIHBpcGVzIGZvcgorICAgICAgICAjIHVpIDwtLT4gc2VydmVyIGNvbW1hbmQvcmVzcG9uc2UgcGFpcnMKKyAgICAgICAgIyBhbmQgYSBxdWV1ZSBmb3Igc2VydmVyIC0+IHVpIGV2ZW50IG5vdGlmaWNhdGlvbnMKKyAgICAgICAgIworICAgICAgICBzZWxmLnVpX2NoYW5uZWwsIHNlbGYuc2VydmVyX2NoYW5uZWwgPSBQaXBlKCkKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IFByb2Nlc3NFdmVudFF1ZXVlKDApCisgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFByb2Nlc3NTZXJ2ZXIoc2VsZi5zZXJ2ZXJfY2hhbm5lbCwgc2VsZi5ldmVudF9xdWV1ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5zZXJ2ZXIgPSBzZWxmLnNlcnZlckltcGwKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVySW1wbC5zdGFydCgpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gQml0QmFrZVByb2Nlc3NTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgc2VsZi51aV9jaGFubmVsLCBzZWxmLmV2ZW50X3F1ZXVlKQorCisgICAgICAgIF8sIGVycm9yID0gc2VsZi5jb25uZWN0aW9uLmNvbm5lY3Rpb24ucnVuQ29tbWFuZChbInNldEZlYXR1cmVzIiwgZmVhdHVyZXNldF0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gc2V0IHRoZSBjb29rZXIgdG8gdGhlIGNvcnJlY3QgZmVhdHVyZXNldDogJXMiICUgZXJyb3IpCisgICAgICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBsYW1iZGEgaSwgczogc2VsZi5jb25uZWN0aW9uLnNpZ3Rlcm1fdGVybWluYXRlKCkpCisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY0N2MxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIveG1scnBjLnB5CkBAIC0wLDAgKzEsMzkyIEBACisjCisjIEJpdEJha2UgWE1MUlBDIFNlcnZlcgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDggIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisiIiIKKyAgICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGFuIHhtbHJwYyBzZXJ2ZXIgZm9yIEJpdEJha2UuCisKKyAgICBVc2UgdGhpcyBieSBkZXJpdmluZyBhIGNsYXNzIGZyb20gQml0QmFrZVhNTFJQQ1NlcnZlciBhbmQgdGhlbiBhZGRpbmcKKyAgICBtZXRob2RzIHdoaWNoIHlvdSB3YW50IHRvICJleHBvcnQiIHZpYSBYTUxSUEMuIElmIHRoZSBtZXRob2RzIGhhdmUgdGhlCisgICAgcHJlZml4IHhtbHJwY18sIHRoZW4gcmVnaXN0ZXJpbmcgdGhvc2UgZnVuY3Rpb24gd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSwKKyAgICBpZiBub3QsIHlvdSBuZWVkIHRvIGNhbGwgcmVnaXN0ZXJfZnVuY3Rpb24uCisKKyAgICBVc2UgcmVnaXN0ZXJfaWRsZV9mdW5jdGlvbigpIHRvIGFkZCBhIGZ1bmN0aW9uIHdoaWNoIHRoZSB4bWxycGMgc2VydmVyCisgICAgY2FsbHMgZnJvbSB3aXRoaW4gc2VydmVyX2ZvcmV2ZXIgd2hlbiBubyByZXF1ZXN0cyBhcmUgcGVuZGluZy4gTWFrZSBzdXJlCisgICAgdGhhdCB0aG9zZSBmdW5jdGlvbnMgYXJlIG5vbi1ibG9ja2luZyBvciBlbHNlIHlvdSB3aWxsIGludHJvZHVjZSBsYXRlbmN5CisgICAgaW4gdGhlIHNlcnZlcidzIG1haW4gbG9vcC4KKyIiIgorCitpbXBvcnQgYmIKK2ltcG9ydCB4bWxycGNsaWIsIHN5cworZnJvbSBiYiBpbXBvcnQgZGFlbW9uaXplCitmcm9tIGJiLnVpIGltcG9ydCB1aWV2ZW50CitpbXBvcnQgaGFzaGxpYiwgdGltZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IG9zLCBzaWduYWwKK2ltcG9ydCB0aHJlYWRpbmcKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisKK0RFQlVHID0gRmFsc2UKKworZnJvbSBTaW1wbGVYTUxSUENTZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKK2ltcG9ydCBpbnNwZWN0LCBzZWxlY3QsIGh0dHBsaWIKKworZnJvbSAuIGltcG9ydCBCaXRCYWtlQmFzZVNlcnZlciwgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uLCBCYXNlSW1wbFNlcnZlcgorCitjbGFzcyBCQlRyYW5zcG9ydCh4bWxycGNsaWIuVHJhbnNwb3J0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZW91dCk6CisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gTm9uZQorICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0Ll9faW5pdF9fKHNlbGYpCisKKyAgICAjIE1vZGlmaWVkIGZyb20gZGVmYXVsdCB0byBwYXNzIHRpbWVvdXQgdG8gSFRUUENvbm5lY3Rpb24KKyAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgorICAgICAgICAjcmV0dXJuIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gaWYgcG9zc2libGUuICBUaGlzIGFsbG93cworICAgICAgICAjSFRUUC8xLjEga2VlcC1hbGl2ZS4KKyAgICAgICAgaWYgc2VsZi5fY29ubmVjdGlvbiBhbmQgaG9zdCA9PSBzZWxmLl9jb25uZWN0aW9uWzBdOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb25bMV0KKworICAgICAgICAjIGNyZWF0ZSBhIEhUVFAgY29ubmVjdGlvbiBvYmplY3QgZnJvbSBhIGhvc3QgZGVzY3JpcHRvcgorICAgICAgICBjaG9zdCwgc2VsZi5fZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQorICAgICAgICAjc3RvcmUgdGhlIGhvc3QgYXJndW1lbnQgYWxvbmcgd2l0aCB0aGUgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IGhvc3QsIGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oY2hvc3QsIHRpbWVvdXQ9c2VsZi50aW1lb3V0KQorICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQorCisgICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gdG9rZW4KKworICAgIGRlZiBzZW5kX2NvbnRlbnQoc2VsZiwgaCwgYm9keSk6CisgICAgICAgIGlmIHNlbGYuY29ubmVjdGlvbl90b2tlbjoKKyAgICAgICAgICAgIGgucHV0aGVhZGVyKCJCaXRiYWtlLXRva2VuIiwgc2VsZi5jb25uZWN0aW9uX3Rva2VuKQorICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KQorCitkZWYgX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgdGltZW91dCA9IDYwKToKKyAgICB0ID0gQkJUcmFuc3BvcnQodGltZW91dCkKKyAgICBzID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vJXM6JWQvIiAlIChob3N0LCBwb3J0KSwgdHJhbnNwb3J0PXQsIGFsbG93X25vbmU9VHJ1ZSkKKyAgICByZXR1cm4gcywgdAorCitjbGFzcyBCaXRCYWtlU2VydmVyQ29tbWFuZHMoKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIpOgorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLmhhc19jbGllbnQgPSBGYWxzZQorCisgICAgZGVmIHJlZ2lzdGVyRXZlbnRIYW5kbGVyKHNlbGYsIGhvc3QsIHBvcnQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVnaXN0ZXIgYSByZW1vdGUgVUkgRXZlbnQgSGFuZGxlcgorICAgICAgICAiIiIKKyAgICAgICAgcywgdCA9IF9jcmVhdGVfc2VydmVyKGhvc3QsIHBvcnQpCisKKyAgICAgICAgIyB3ZSBkb24ndCBhbGxvdyBjb25uZWN0aW9ucyBpZiB0aGUgY29va2VyIGlzIHJ1bm5pbmcKKyAgICAgICAgaWYgKHNlbGYuY29va2VyLnN0YXRlIGluIFtiYi5jb29rZXIuc3RhdGUucGFyc2luZywgYmIuY29va2VyLnN0YXRlLnJ1bm5pbmddKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHMsIFRydWUpCisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50X2hhbmRsZQorCisgICAgZGVmIHVucmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZiwgaGFuZGxlck51bSk6CisgICAgICAgICIiIgorICAgICAgICBVbnJlZ2lzdGVyIGEgcmVtb3RlIFVJIEV2ZW50IEhhbmRsZXIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBiYi5ldmVudC51bnJlZ2lzdGVyX1VJSGhhbmRsZXIoaGFuZGxlck51bSkKKworICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGEgY29va2VyIGNvbW1hbmQgb24gdGhlIHNlcnZlcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY29va2VyLmNvbW1hbmQucnVuQ29tbWFuZChjb21tYW5kLCBzZWxmLnNlcnZlci5yZWFkb25seSkKKworICAgIGRlZiBnZXRFdmVudEhhbmRsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXZlbnRfaGFuZGxlCisKKyAgICBkZWYgdGVybWluYXRlU2VydmVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJpZ2dlciB0aGUgc2VydmVyIHRvIHF1aXQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc2VydmVyLnF1aXQgPSBUcnVlCisgICAgICAgIHByaW50KCJTZXJ2ZXIgKGNvb2tlcikgZXhpdGluZyIpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGFkZENsaWVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5oYXNfY2xpZW50OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdG9rZW4gPSBoYXNobGliLm1kNShzdHIodGltZS50aW1lKCkpKS5oZXhkaWdlc3QoKQorICAgICAgICBzZWxmLnNlcnZlci5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKKyAgICAgICAgc2VsZi5oYXNfY2xpZW50ID0gVHJ1ZQorICAgICAgICByZXR1cm4gdG9rZW4KKworICAgIGRlZiByZW1vdmVDbGllbnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaGFzX2NsaWVudDoKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnNldF9jb25uZWN0aW9uX3Rva2VuKE5vbmUpCisgICAgICAgICAgICBzZWxmLmhhc19jbGllbnQgPSBGYWxzZQorICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuc2luZ2xlX3VzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5xdWl0ID0gVHJ1ZQorCisjIFRoaXMgcmVxdWVzdCBoYW5kbGVyIGNoZWNrcyBpZiB0aGUgcmVxdWVzdCBoYXMgYSAiQml0YmFrZS10b2tlbiIgaGVhZGVyCisjIGZpZWxkICh0aGlzIGNvbWVzIGZyb20gdGhlIGNsaWVudCBzaWRlKSBhbmQgY29tcGFyZXMgaXQgd2l0aCBpdHMgaW50ZXJuYWwKKyMgIkJpdGJha2UtdG9rZW4iIGZpZWxkICh0aGlzIGNvbWVzIGZyb20gdGhlIHNlcnZlcikuIElmIHRoZSB0d28gYXJlIG5vdAorIyBlcXVhbCwgaXQgaXMgYXNzdW1lZCB0aGF0IGEgY2xpZW50IGlzIHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIKKyMgd2hpbGUgYW5vdGhlciBjbGllbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIuIEluIHRoaXMgY2FzZSwgYSA1MDMgZXJyb3IKKyMgKCJzZXJ2aWNlIHVuYXZhaWxhYmxlIikgaXMgcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4KK2NsYXNzIEJpdEJha2VYTUxSUENSZXF1ZXN0SGFuZGxlcihTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpOgorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQorCisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlbW90ZV90b2tlbiA9IHNlbGYuaGVhZGVyc1siQml0YmFrZS10b2tlbiJdCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJlbW90ZV90b2tlbiA9IE5vbmUKKyAgICAgICAgaWYgcmVtb3RlX3Rva2VuICE9IHNlbGYuc2VydmVyLmNvbm5lY3Rpb25fdG9rZW4gYW5kIHJlbW90ZV90b2tlbiAhPSAib2JzZXJ2ZXIiOgorICAgICAgICAgICAgc2VsZi5yZXBvcnRfNTAzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlbW90ZV90b2tlbiA9PSAib2JzZXJ2ZXIiOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWRvbmx5ID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkb25seSA9IEZhbHNlCisgICAgICAgICAgICBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5kb19QT1NUKHNlbGYpCisKKyAgICBkZWYgcmVwb3J0XzUwMyhzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDUwMykKKyAgICAgICAgcmVzcG9uc2UgPSAnTm8gbW9yZSBjbGllbnQgYWxsb3dlZCcKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQvcGxhaW4iKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHN0cihsZW4ocmVzcG9uc2UpKSkKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcG9uc2UpCisKKworY2xhc3MgWE1MUlBDUHJveHlTZXJ2ZXIoQmFzZUltcGxTZXJ2ZXIpOgorICAgICIiIiBub3QgYSByZWFsIHdvcmtpbmcgc2VydmVyLCBidXQgYSBzdHViIGZvciBhIHByb3h5IHNlcnZlciBjb25uZWN0aW9uCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorCitjbGFzcyBYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyLCBCYXNlSW1wbFNlcnZlcik6CisgICAgIyByZW1vdmUgdGhpcyB3aGVuIHlvdSdyZSBkb25lIHdpdGggZGVidWdnaW5nCisgICAgIyBhbGxvd19yZXVzZV9hZGRyZXNzID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGludGVyZmFjZSk6CisgICAgICAgICIiIgorICAgICAgICBDb25zdHJ1Y3RvcgorICAgICAgICAiIiIKKyAgICAgICAgQmFzZUltcGxTZXJ2ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgaWYgKGludGVyZmFjZVsxXSA9PSAwKTogICAgICMgYW5vbnltb3VzIHBvcnQsIG5vdCBnZXR0aW5nIHJldXNlZAorICAgICAgICAgICAgc2VsZi5zaW5nbGVfdXNlID0gVHJ1ZQorICAgICAgICAjIFVzZSBhdXRvIHBvcnQgY29uZmlndXJhdGlvbgorICAgICAgICBpZiAoaW50ZXJmYWNlWzFdID09IC0xKToKKyAgICAgICAgICAgIGludGVyZmFjZSA9IChpbnRlcmZhY2VbMF0sIDApCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5fX2luaXRfXyhzZWxmLCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlcj1CaXRCYWtlWE1MUlBDUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYWxsb3dfbm9uZT1UcnVlKQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gTm9uZQorICAgICAgICAjc2VsZi5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCisgICAgICAgIHNlbGYuY29tbWFuZHMgPSBCaXRCYWtlU2VydmVyQ29tbWFuZHMoc2VsZikKKyAgICAgICAgc2VsZi5hdXRvcmVnaXN0ZXJfYWxsX2Z1bmN0aW9ucyhzZWxmLmNvbW1hbmRzLCAiIikKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UgPSBpbnRlcmZhY2UKKyAgICAgICAgc2VsZi5zaW5nbGVfdXNlID0gRmFsc2UKKworICAgIGRlZiBhZGRjb29rZXIoc2VsZiwgY29va2VyKToKKyAgICAgICAgQmFzZUltcGxTZXJ2ZXIuYWRkY29va2VyKHNlbGYsIGNvb2tlcikKKyAgICAgICAgc2VsZi5jb21tYW5kcy5jb29rZXIgPSBjb29rZXIKKworICAgIGRlZiBhdXRvcmVnaXN0ZXJfYWxsX2Z1bmN0aW9ucyhzZWxmLCBjb250ZXh0LCBwcmVmaXgpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVuaWVuY2UgbWV0aG9kIGZvciByZWdpc3RlcmluZyBhbGwgZnVuY3Rpb25zIGluIHRoZSBzY29wZQorICAgICAgICBvZiB0aGlzIGNsYXNzIHRoYXQgc3RhcnQgd2l0aCBhIGNvbW1vbiBwcmVmaXgKKyAgICAgICAgIiIiCisgICAgICAgIG1ldGhvZGxpc3QgPSBpbnNwZWN0LmdldG1lbWJlcnMoY29udGV4dCwgaW5zcGVjdC5pc21ldGhvZCkKKyAgICAgICAgZm9yIG5hbWUsIG1ldGhvZCBpbiBtZXRob2RsaXN0OgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihtZXRob2QsIG5hbWVbbGVuKHByZWZpeCk6XSkKKworCisgICAgZGVmIHNlcnZlX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICMgU3RhcnQgdGhlIGFjdHVhbCBYTUxSUEMgc2VydmVyCisgICAgICAgIGJiLmNvb2tlci5zZXJ2ZXJfbWFpbihzZWxmLmNvb2tlciwgc2VsZi5fc2VydmVfZm9yZXZlcikKKworICAgIGRlZiBfc2VydmVfZm9yZXZlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlcnZlIFJlcXVlc3RzLiBPdmVybG9hZGVkIHRvIGhvbm9yIGEgcXVpdCBjb21tYW5kCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgZmRzID0gW3NlbGZdCisgICAgICAgICAgICBuZXh0c2xlZXAgPSAwLjEKKyAgICAgICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHJldHZhbCA9IE5vbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ1bmN0aW9uKHNlbGYsIGRhdGEsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWwgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcmV0dmFsIGlzIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXR2YWwsIGZsb2F0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPCBuZXh0c2xlZXApOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IHJldHZhbAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmRzID0gZmRzICsgcmV0dmFsCisgICAgICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWwgPT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGZ1bmN0aW9uIGV4ZWN1dGUgZmFpbGVkOyBkZWxldGUgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0KKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBzb2NrdGltZW91dCA9IHNlbGYuc29ja2V0LmdldHRpbWVvdXQoKSBvciBuZXh0c2xlZXAKKyAgICAgICAgICAgIHNvY2t0aW1lb3V0ID0gbWluKHNvY2t0aW1lb3V0LCBuZXh0c2xlZXApCisgICAgICAgICAgICAjIE1pcnJvciB3aGF0IEJhc2VTZXJ2ZXIgaGFuZGxlX3JlcXVlc3Qgd291bGQgZG8KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZF9zZXRzID0gc2VsZWN0LnNlbGVjdChmZHMsIFtdLCBbXSwgc29ja3RpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgZmRfc2V0c1swXSBhbmQgc2VsZiBpbiBmZF9zZXRzWzBdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdF9ub2Jsb2NrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgd2UgaWdub3JlIGludGVycnVwdGVkIGNhbGxzCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGVsbCBpZGxlIGZ1bmN0aW9ucyB3ZSdyZSBleGl0aW5nCisgICAgICAgIGZvciBmdW5jdGlvbiwgZGF0YSBpbiBzZWxmLl9pZGxlZnVucy5pdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ1bmN0aW9uKHNlbGYsIGRhdGEsIFRydWUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX3Rva2VuID0gdG9rZW4KKworY2xhc3MgQml0QmFrZVhNTFJQQ1NlcnZlckNvbm5lY3Rpb24oQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVySW1wbCwgY2xpZW50aW5mbz0oImxvY2FsaG9zdCIsIDApLCBvYnNlcnZlcl9vbmx5ID0gRmFsc2UsIGZlYXR1cmVzZXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLCBzZWxmLnRyYW5zcG9ydCA9IF9jcmVhdGVfc2VydmVyKHNlcnZlckltcGwuaG9zdCwgc2VydmVySW1wbC5wb3J0KQorICAgICAgICBzZWxmLmNsaWVudGluZm8gPSBjbGllbnRpbmZvCisgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IHNlcnZlckltcGwKKyAgICAgICAgc2VsZi5vYnNlcnZlcl9vbmx5ID0gb2JzZXJ2ZXJfb25seQorICAgICAgICBpZiBmZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gZmVhdHVyZXNldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mZWF0dXJlc2V0ID0gW10KKworICAgIGRlZiBjb25uZWN0KHNlbGYsIHRva2VuID0gTm9uZSk6CisgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm9ic2VydmVyX29ubHk6CisgICAgICAgICAgICAgICAgdG9rZW4gPSAib2JzZXJ2ZXIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5jb25uZWN0aW9uLmFkZENsaWVudCgpCisKKyAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi50cmFuc3BvcnQuc2V0X2Nvbm5lY3Rpb25fdG9rZW4odG9rZW4pCisKKyAgICAgICAgc2VsZi5ldmVudHMgPSB1aWV2ZW50LkJCVUlFdmVudFF1ZXVlKHNlbGYuY29ubmVjdGlvbiwgc2VsZi5jbGllbnRpbmZvKQorICAgICAgICBmb3IgZXZlbnQgaW4gYmIuZXZlbnQudWlfcXVldWU6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5xdWV1ZV9ldmVudChldmVudCkKKworICAgICAgICBfLCBlcnJvciA9IHNlbGYuY29ubmVjdGlvbi5ydW5Db21tYW5kKFsic2V0RmVhdHVyZXMiLCBzZWxmLmZlYXR1cmVzZXRdKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICMgZGlzY29ubmVjdCB0aGUgY2xpZW50LCB3ZSBjYW4ndCBtYWtlIHRoZSBzZXRGZWF0dXJlIHdvcmsKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKQorICAgICAgICAgICAgIyBubyBuZWVkIHRvIGxvZyBpdCBoZXJlLCB0aGUgZXJyb3Igc2hhbGwgYmUgc2VudCB0byB0aGUgY2xpZW50CisgICAgICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcmVtb3ZlQ2xpZW50KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5vYnNlcnZlcl9vbmx5OgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICAjIERvbid0IHdhaXQgZm9yIHNlcnZlciBpbmRlZmluaXRlbHkKKyAgICAgICAgaW1wb3J0IHNvY2tldAorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5ldmVudHMuc3lzdGVtX3F1aXQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIEJpdEJha2VTZXJ2ZXIoQml0QmFrZUJhc2VTZXJ2ZXIpOgorICAgIGRlZiBpbml0U2VydmVyKHNlbGYsIGludGVyZmFjZSA9ICgibG9jYWxob3N0IiwgMCkpOgorICAgICAgICBzZWxmLmludGVyZmFjZSA9IGludGVyZmFjZQorICAgICAgICBzZWxmLnNlcnZlckltcGwgPSBYTUxSUENTZXJ2ZXIoaW50ZXJmYWNlKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgZGFlbW9uaXplLmNyZWF0ZURhZW1vbihzZWxmLnNlcnZlckltcGwuc2VydmVfZm9yZXZlciwgImJpdGJha2UtY29va2VyZGFlbW9uLmxvZyIpCisgICAgICAgIGRlbCBzZWxmLmNvb2tlcgorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IEJpdEJha2VYTUxSUENTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgc2VsZi5pbnRlcmZhY2UsIEZhbHNlLCBmZWF0dXJlc2V0KQorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvbm5lY3QoKQorCisgICAgZGVmIHNldF9jb25uZWN0aW9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnRyYW5zcG9ydC5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKKworY2xhc3MgQml0QmFrZVhNTFJQQ0NsaWVudChCaXRCYWtlQmFzZVNlcnZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2JzZXJ2ZXJfb25seSA9IEZhbHNlLCB0b2tlbiA9IE5vbmUpOgorICAgICAgICBzZWxmLnRva2VuID0gdG9rZW4KKworICAgICAgICBzZWxmLm9ic2VydmVyX29ubHkgPSBvYnNlcnZlcl9vbmx5CisgICAgICAgICMgaWYgd2UgbmVlZCBleHRyYSBjYWNoZXMsIGp1c3QgdGVsbCB0aGUgc2VydmVyIHRvIGxvYWQgdGhlbSBhbGwKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNhdmVDb25uZWN0aW9uRGV0YWlscyhzZWxmLCByZW1vdGUpOgorICAgICAgICBzZWxmLnJlbW90ZSA9IHJlbW90ZQorCisgICAgZGVmIGVzdGFibGlzaENvbm5lY3Rpb24oc2VsZiwgZmVhdHVyZXNldCk6CisgICAgICAgICMgVGhlIGZvcm1hdCBvZiAicmVtb3RlIiBtdXN0IGJlICJzZXJ2ZXI6cG9ydCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgW2hvc3QsIHBvcnRdID0gc2VsZi5yZW1vdGUuc3BsaXQoIjoiKQorICAgICAgICAgICAgcG9ydCA9IGludChwb3J0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCByZW1vdGUgZGVmaW5pdGlvbiAoJXMpIiAlIHN0cihlKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAjIFdlIG5lZWQgb3VyIElQIGZvciB0aGUgc2VydmVyIGNvbm5lY3Rpb24uIFdlIGdldCB0aGUgSVAKKyAgICAgICAgIyBieSB0cnlpbmcgdG8gY29ubmVjdCB3aXRoIHRoZSBzZXJ2ZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIGlwID0gcy5nZXRzb2NrbmFtZSgpWzBdCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIud2FybigiQ291bGQgbm90IGNyZWF0ZSBzb2NrZXQgZm9yICVzOiVzICglcykiICUgKGhvc3QsIHBvcnQsIHN0cihlKSkpCisgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1Byb3h5U2VydmVyKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBCaXRCYWtlWE1MUlBDU2VydmVyQ29ubmVjdGlvbihzZWxmLnNlcnZlckltcGwsIChpcCwgMCksIHNlbGYub2JzZXJ2ZXJfb25seSwgZmVhdHVyZXNldCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdChzZWxmLnRva2VuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIgYXQgJXM6JXMgKCVzKSIgJSAoaG9zdCwgcG9ydCwgc3RyKGUpKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKworICAgIGRlZiBlbmRTZXNzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2hlbGwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NoZWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZDhkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3NoZWxsLnB5CkBAIC0wLDAgKzEsODIwIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFZhbmlsbGUgTWVkaWEKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGFua3MgdG86CisjICogSG9sZ2VyIEZyZXl0aGVyIDx6ZWNrZUBoYW5kaGVsZHMub3JnPgorIyAqIEp1c3RpbiBQYXRyaW4gPHBhcGVyY3JhbmVAcmV2ZXJzZWZvbGQuY29tPgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiCitCaXRCYWtlIFNoZWxsCisKK0lERUFTOgorICAgICogbGlzdCBkZWZpbmVkIHRhc2tzIHBlciBwYWNrYWdlCisgICAgKiBsaXN0IGNsYXNzZXMKKyAgICAqIHRvZ2dsZSBmb3JjZQorICAgICogY29tbWFuZCB0byByZXBhcnNlIGp1c3Qgb25lIChvciBtb3JlKSBiYmZpbGUocykKKyAgICAqIGF1dG9tYXRpYyBjaGVjayBpZiByZXBhcnNpbmcgaXMgbmVjZXNzYXJ5IChpbm90aWZ5PykKKyAgICAqIGZyb250ZW5kIGZvciBiYiBmaWxlIG1hbmlwdWxhdGlvbgorICAgICogbW9yZSBzaGVsbC1saWtlIGZlYXR1cmVzOgorICAgICAgICAtIG91dHB1dCBjb250cm9sLCBpLmUuIHBpcGUgb3V0cHV0IGludG8gZ3JlcCwgc29ydCwgZXRjLgorICAgICAgICAtIGpvYiBjb250cm9sLCBpLmUuIGJyaW5nIHJ1bm5pbmcgY29tbWFuZHMgaW50byBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kCisgICAgKiBzdGFydCBwYXJzaW5nIGluIGJhY2tncm91bmQgcmlnaHQgYWZ0ZXIgc3RhcnR1cAorICAgICogbmN1cnNlcyBpbnRlcmZhY2UKKworUFJPQkxFTVM6CisgICAgKiBmb3JjZSBkb2Vzbid0IGFsd2F5cyB3b3JrCisgICAgKiByZWFkbGluZSBjb21wbGV0aW9uIGZvciBjb21tYW5kcyB3aXRoIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVycworCisiIiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW1wb3J0IGFuZCBzZXR1cCBnbG9iYWwgdmFyaWFibGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCit0cnk6CisgICAgc2V0CitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gc2V0cyBpbXBvcnQgU2V0IGFzIHNldAoraW1wb3J0IHN5cywgb3MsIHJlYWRsaW5lLCBzb2NrZXQsIGh0dHBsaWIsIHVybGxpYiwgY29tbWFuZHMsIHBvcGVuMiwgc2hsZXgsIFF1ZXVlLCBmbm1hdGNoCitmcm9tIGJiIGltcG9ydCBkYXRhLCBwYXJzZSwgYnVpbGQsIGNhY2hlLCB0YXNrZGF0YSwgcnVucXVldWUsIHByb3ZpZGVycyBhcyBQcm92aWRlcnMKKworX192ZXJzaW9uX18gPSAiMC41LjMuMSIKK19fY3JlZGl0c19fID0gIiIiQml0QmFrZSBTaGVsbCBWZXJzaW9uICVzIChDKSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUBWYW5pbGxlLmRlPgorVHlwZSAnaGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24sIHByZXNzIENUUkwtRCB0byBleGl0LiIiIiAlIF9fdmVyc2lvbl9fCisKK2NtZHMgPSB7fQorbGVhdmVfbWFpbmxvb3AgPSBGYWxzZQorbGFzdF9leGNlcHRpb24gPSBOb25lCitjb29rZXIgPSBOb25lCitwYXJzZWQgPSBGYWxzZQorZGVidWcgPSBvcy5lbnZpcm9uLmdldCggIkJCU0hFTExfREVCVUciLCAiIiApCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENsYXNzIEJpdEJha2VTaGVsbENvbW1hbmRzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBCaXRCYWtlU2hlbGxDb21tYW5kczoKKyAgICAiIiJUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSB2YWxpZCBjb21tYW5kcyBmb3IgdGhlIHNoZWxsIiIiCisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIHNoZWxsICk6CisgICAgICAgICIiIlJlZ2lzdGVyIGFsbCB0aGUgY29tbWFuZHMiIiIKKyAgICAgICAgc2VsZi5fc2hlbGwgPSBzaGVsbAorICAgICAgICBmb3IgYXR0ciBpbiBCaXRCYWtlU2hlbGxDb21tYW5kcy5fX2RpY3RfXzoKKyAgICAgICAgICAgIGlmIG5vdCBhdHRyLnN0YXJ0c3dpdGgoICJfIiApOgorICAgICAgICAgICAgICAgIGlmIGF0dHIuZW5kc3dpdGgoICJfIiApOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gYXR0cls6LTFdLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gYXR0cls6XS5sb3dlcigpCisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0ciggQml0QmFrZVNoZWxsQ29tbWFuZHMsIGF0dHIgKQorICAgICAgICAgICAgICAgIGRlYnVnT3V0KCAicmVnaXN0ZXJpbmcgY29tbWFuZCAnJXMnIiAlIGNvbW1hbmQgKQorICAgICAgICAgICAgICAgICMgc2NhbiBudW1iZXIgb2YgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgdXNhZ2UgPSBnZXRhdHRyKCBtZXRob2QsICJ1c2FnZSIsICIiICkKKyAgICAgICAgICAgICAgICBpZiB1c2FnZSAhPSAiPC4uLj4iOgorICAgICAgICAgICAgICAgICAgICBudW1BcmdzID0gbGVuKCB1c2FnZS5zcGxpdCgpICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBudW1BcmdzID0gLTEKKyAgICAgICAgICAgICAgICBzaGVsbC5yZWdpc3RlckNvbW1hbmQoIGNvbW1hbmQsIG1ldGhvZCwgbnVtQXJncywgIiVzICVzIiAlICggY29tbWFuZCwgdXNhZ2UgKSwgbWV0aG9kLl9fZG9jX18gKQorCisgICAgZGVmIF9jaGVja1BhcnNlZCggc2VsZiApOgorICAgICAgICBpZiBub3QgcGFyc2VkOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBUaGlzIGNvbW1hbmQgbmVlZHMgdG8gcGFyc2UgYmJmaWxlcy4uLiIpCisgICAgICAgICAgICBzZWxmLnBhcnNlKCBOb25lICkKKworICAgIGRlZiBfZmluZFByb3ZpZGVyKCBzZWxmLCBpdGVtICk6CisgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgIyBOZWVkIHRvIHVzZSB0YXNrRGF0YSBmb3IgdGhpcyBpbmZvcm1hdGlvbgorICAgICAgICBwcmVmZXJyZWQgPSBkYXRhLmdldFZhciggIlBSRUZFUlJFRF9QUk9WSURFUl8lcyIgJSBpdGVtLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxICkKKyAgICAgICAgaWYgbm90IHByZWZlcnJlZDogcHJlZmVycmVkID0gaXRlbQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsdiwgbGYsIHB2LCBwZiA9IFByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHByZWZlcnJlZCwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgY29va2VyLnN0YXR1cykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgaXRlbSBpbiBjb29rZXIuc3RhdHVzLnByb3ZpZGVyczoKKyAgICAgICAgICAgICAgICBwZiA9IGNvb2tlci5zdGF0dXMucHJvdmlkZXJzW2l0ZW1dWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBmID0gTm9uZQorICAgICAgICByZXR1cm4gcGYKKworICAgIGRlZiBhbGlhcyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgbmV3IG5hbWUgZm9yIGEgY29tbWFuZCIiIgorICAgICAgICBuZXcsIG9sZCA9IHBhcmFtcworICAgICAgICBpZiBub3Qgb2xkIGluIGNtZHM6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IENvbW1hbmQgJyVzJyBub3Qga25vd24iICUgb2xkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kc1tuZXddID0gY21kc1tvbGRdCisgICAgICAgICAgICBwcmludCgiT0siKQorICAgIGFsaWFzLnVzYWdlID0gIjxhbGlhcz4gPGNvbW1hbmQ+IgorCisgICAgZGVmIGJ1ZmZlciggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkR1bXAgc3BlY2lmaWVkIG91dHB1dCBidWZmZXIiIiIKKyAgICAgICAgaW5kZXggPSBwYXJhbXNbMF0KKyAgICAgICAgcHJpbnQoc2VsZi5fc2hlbGwubXlvdXQuYnVmZmVyKCBpbnQoIGluZGV4ICkgKSkKKyAgICBidWZmZXIudXNhZ2UgPSAiPGluZGV4PiIKKworICAgIGRlZiBidWZmZXJzKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiU2hvdyB0aGUgYXZhaWxhYmxlIG91dHB1dCBidWZmZXJzIiIiCisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5fc2hlbGwubXlvdXQuYnVmZmVyZWRDb21tYW5kcygpCisgICAgICAgIGlmIG5vdCBjb21tYW5kczoKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogTm8gYnVmZmVyZWQgY29tbWFuZHMgYXZhaWxhYmxlIHlldC4gU3RhcnQgZG9pbmcgc29tZXRoaW5nLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiPSIqMzUsICJBdmFpbGFibGUgT3V0cHV0IEJ1ZmZlcnMiLCAiPSIqMjcpCisgICAgICAgICAgICBmb3IgaW5kZXgsIGNtZCBpbiBlbnVtZXJhdGUoIGNvbW1hbmRzICk6CisgICAgICAgICAgICAgICAgcHJpbnQoInwgJXMgJXMiICUgKCBzdHIoIGluZGV4ICkubGp1c3QoIDMgKSwgY21kICkpCisgICAgICAgICAgICBwcmludCgiPSIqODgpCisKKyAgICBkZWYgYnVpbGQoIHNlbGYsIHBhcmFtcywgY21kID0gImJ1aWxkIiApOgorICAgICAgICAiIiJCdWlsZCBhIHByb3ZpZGVlIiIiCisgICAgICAgIGdsb2JhbCBsYXN0X2V4Y2VwdGlvbgorICAgICAgICBnbG9iZXhwciA9IHBhcmFtc1swXQorICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisgICAgICAgIG5hbWVzID0gZ2xvYmZpbHRlciggY29va2VyLnN0YXR1cy5wa2dfcG4sIGdsb2JleHByICkKKyAgICAgICAgaWYgbGVuKCBuYW1lcyApID09IDA6IG5hbWVzID0gWyBnbG9iZXhwciBdCisgICAgICAgIHByaW50KCJTSEVMTDogQnVpbGRpbmcgJXMiICUgJyAnLmpvaW4oIG5hbWVzICkpCisKKyAgICAgICAgdGQgPSB0YXNrZGF0YS5UYXNrRGF0YShjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydCkKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEpCisgICAgICAgIGRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBkYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhc2tzID0gW10KKyAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgIHRkLmFkZF9wcm92aWRlcihsb2NhbGRhdGEsIGNvb2tlci5zdGF0dXMsIG5hbWUpCisgICAgICAgICAgICAgICAgcHJvdmlkZXJzID0gdGQuZ2V0X3Byb3ZpZGVyKG5hbWUpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocHJvdmlkZXJzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBQcm92aWRlcnMuTm9Qcm92aWRlcgorCisgICAgICAgICAgICAgICAgdGFza3MuYXBwZW5kKFtuYW1lLCAiZG9fJXMiICUgY21kXSkKKworICAgICAgICAgICAgdGQuYWRkX3VucmVzb2x2ZWQobG9jYWxkYXRhLCBjb29rZXIuc3RhdHVzKQorCisgICAgICAgICAgICBycSA9IHJ1bnF1ZXVlLlJ1blF1ZXVlKGNvb2tlciwgbG9jYWxkYXRhLCBjb29rZXIuc3RhdHVzLCB0ZCwgdGFza3MpCisgICAgICAgICAgICBycS5wcmVwYXJlX3J1bnF1ZXVlKCkKKyAgICAgICAgICAgIHJxLmV4ZWN1dGVfcnVucXVldWUoKQorCisgICAgICAgIGV4Y2VwdCBQcm92aWRlcnMuTm9Qcm92aWRlcjoKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm8gUHJvdmlkZXIiKQorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBQcm92aWRlcnMuTm9Qcm92aWRlcgorCisgICAgICAgIGV4Y2VwdCBydW5xdWV1ZS5UYXNrRmFpbHVyZSBhcyBmbmlkczoKKyAgICAgICAgICAgIGxhc3RfZXhjZXB0aW9uID0gcnVucXVldWUuVGFza0ZhaWx1cmUKKworICAgICAgICBleGNlcHQgYnVpbGQuRnVuY0ZhaWxlZCBhcyBlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBDb3VsZG4ndCBidWlsZCAnJXMnIiAlIG5hbWVzKQorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBlCisKKworICAgIGJ1aWxkLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgY2xlYW4oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDbGVhbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImNsZWFuIiApCisgICAgY2xlYW4udXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBjb21waWxlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnY29tcGlsZScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJjb21waWxlIiApCisgICAgY29tcGlsZS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGNvbmZpZ3VyZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ2NvbmZpZ3VyZScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJjb25maWd1cmUiICkKKyAgICBjb25maWd1cmUudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBpbnN0YWxsKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnaW5zdGFsbCcgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJpbnN0YWxsIiApCisgICAgaW5zdGFsbC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGVkaXQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDYWxsICRFRElUT1Igb24gYSBwcm92aWRlZSIiIgorICAgICAgICBuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggbmFtZSApCisgICAgICAgIGlmIGJiZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLnN5c3RlbSggIiVzICVzIiAlICggb3MuZW52aXJvbi5nZXQoICJFRElUT1IiLCAidmkiICksIGJiZmlsZSApICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm90aGluZyBwcm92aWRlcyAnJXMnIiAlIG5hbWUpCisgICAgZWRpdC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGVudmlyb25tZW50KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBvdXQgdGhlIG91dGVyIEJpdEJha2UgZW52aXJvbm1lbnQiIiIKKyAgICAgICAgY29va2VyLnNob3dFbnZpcm9ubWVudCgpCisKKyAgICBkZWYgZXhpdF8oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJMZWF2ZSB0aGUgQml0QmFrZSBTaGVsbCIiIgorICAgICAgICBkZWJ1Z091dCggInNldHRpbmcgbGVhdmVfbWFpbmxvb3AgdG8gdHJ1ZSIgKQorICAgICAgICBnbG9iYWwgbGVhdmVfbWFpbmxvb3AKKyAgICAgICAgbGVhdmVfbWFpbmxvb3AgPSBUcnVlCisKKyAgICBkZWYgZmV0Y2goIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJGZXRjaCBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImZldGNoIiApCisgICAgZmV0Y2gudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBmaWxlQnVpbGQoIHNlbGYsIHBhcmFtcywgY21kID0gImJ1aWxkIiApOgorICAgICAgICAiIiJQYXJzZSBhbmQgYnVpbGQgYSAuYmIgZmlsZSIiIgorICAgICAgICBnbG9iYWwgbGFzdF9leGNlcHRpb24KKyAgICAgICAgbmFtZSA9IHBhcmFtc1swXQorICAgICAgICBiZiA9IGNvbXBsZXRlRmlsZVBhdGgoIG5hbWUgKQorICAgICAgICBwcmludCgiU0hFTEw6IENhbGxpbmcgJyVzJyBvbiAnJXMnIiAlICggY21kLCBiZiApKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvb2tlci5idWlsZEZpbGUoYmYsIGNtZCkKKyAgICAgICAgZXhjZXB0IHBhcnNlLlBhcnNlRXJyb3I6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IFVuYWJsZSB0byBvcGVuIG9yIHBhcnNlICclcyciICUgYmYpCisgICAgICAgIGV4Y2VwdCBidWlsZC5GdW5jRmFpbGVkIGFzIGU6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IENvdWxkbid0IGJ1aWxkICclcyciICUgbmFtZSkKKyAgICAgICAgICAgIGxhc3RfZXhjZXB0aW9uID0gZQorCisgICAgZmlsZUJ1aWxkLnVzYWdlID0gIjxiYmZpbGU+IgorCisgICAgZGVmIGZpbGVDbGVhbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNsZWFuIGEgLmJiIGZpbGUiIiIKKyAgICAgICAgc2VsZi5maWxlQnVpbGQoIHBhcmFtcywgImNsZWFuIiApCisgICAgZmlsZUNsZWFuLnVzYWdlID0gIjxiYmZpbGU+IgorCisgICAgZGVmIGZpbGVFZGl0KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ2FsbCAkRURJVE9SIG9uIGEgLmJiIGZpbGUiIiIKKyAgICAgICAgbmFtZSA9IHBhcmFtc1swXQorICAgICAgICBvcy5zeXN0ZW0oICIlcyAlcyIgJSAoIG9zLmVudmlyb24uZ2V0KCAiRURJVE9SIiwgInZpIiApLCBjb21wbGV0ZUZpbGVQYXRoKCBuYW1lICkgKSApCisgICAgZmlsZUVkaXQudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZVJlYnVpbGQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJSZWJ1aWxkIChjbGVhbiAmIGJ1aWxkKSBhIC5iYiBmaWxlIiIiCisgICAgICAgIHNlbGYuZmlsZUJ1aWxkKCBwYXJhbXMsICJyZWJ1aWxkIiApCisgICAgZmlsZVJlYnVpbGQudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZVJlcGFyc2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiIocmUpUGFyc2UgYSBiYiBmaWxlIiIiCisgICAgICAgIGJiZmlsZSA9IHBhcmFtc1swXQorICAgICAgICBwcmludCgiU0hFTEw6IFBhcnNpbmcgJyVzJyIgJSBiYmZpbGUpCisgICAgICAgIHBhcnNlLnVwZGF0ZV9tdGltZSggYmJmaWxlICkKKyAgICAgICAgY29va2VyLnBhcnNlci5yZXBhcnNlKGJiZmlsZSkKKyAgICAgICAgaWYgRmFsc2U6ICNmcm9tQ2FjaGU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEZpbGUgaGFzIG5vdCBiZWVuIHVwZGF0ZWQsIG5vdCByZXBhcnNpbmciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBQYXJzZWQiKQorICAgIGZpbGVSZXBhcnNlLnVzYWdlID0gIjxiYmZpbGU+IgorCisgICAgZGVmIGFib3J0KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiVG9nZ2xlIGFib3J0IHRhc2sgZXhlY3V0aW9uIGZsYWcgKHNlZSBiaXRiYWtlIC1rKSIiIgorICAgICAgICBjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydCA9IG5vdCBjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydAorICAgICAgICBwcmludCgiU0hFTEw6IEFib3J0IEZsYWcgaXMgbm93ICclcyciICUgcmVwciggY29va2VyLmNvbmZpZ3VyYXRpb24uYWJvcnQgKSkKKworICAgIGRlZiBmb3JjZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlRvZ2dsZSBmb3JjZSB0YXNrIGV4ZWN1dGlvbiBmbGFnIChzZWUgYml0YmFrZSAtZikiIiIKKyAgICAgICAgY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2UgPSBub3QgY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2UKKyAgICAgICAgcHJpbnQoIlNIRUxMOiBGb3JjZSBGbGFnIGlzIG5vdyAnJXMnIiAlIHJlcHIoIGNvb2tlci5jb25maWd1cmF0aW9uLmZvcmNlICkpCisKKyAgICBkZWYgaGVscCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNob3cgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgY29tbWFuZHMgYW5kIHRoZWlyIHB1cnBvc2UiIiIKKyAgICAgICAgcHJpbnQoIj0iKjMwLCAiQXZhaWxhYmxlIENvbW1hbmRzIiwgIj0iKjMwKQorICAgICAgICBmb3IgY21kIGluIHNvcnRlZChjbWRzKToKKyAgICAgICAgICAgIGZ1bmN0aW9uLCBudW1wYXJhbXMsIHVzYWdlLCBoZWxwdGV4dCA9IGNtZHNbY21kXQorICAgICAgICAgICAgcHJpbnQoInwgJXMgfCAlcyIgJSAodXNhZ2UubGp1c3QoMzApLCBoZWxwdGV4dCkpCisgICAgICAgIHByaW50KCI9Iio3OCkKKworICAgIGRlZiBsYXN0RXJyb3IoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTaG93IHRoZSByZWFzb24gb3IgbG9nIHRoYXQgd2FzIHByb2R1Y2VkIGJ5IHRoZSBsYXN0IEJpdEJha2UgZXZlbnQgZXhjZXB0aW9uIiIiCisgICAgICAgIGlmIGxhc3RfZXhjZXB0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IE5vIEVycm9ycyB5ZXQgKFBoZXcpLi4uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYXNvbiwgZXZlbnQgPSBsYXN0X2V4Y2VwdGlvbi5hcmdzCisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFJlYXNvbiBmb3IgdGhlIGxhc3QgZXJyb3I6ICclcyciICUgcmVhc29uKQorICAgICAgICAgICAgaWYgJzonIGluIHJlYXNvbjoKKyAgICAgICAgICAgICAgICBtc2csIGZpbGVuYW1lID0gcmVhc29uLnNwbGl0KCAnOicgKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3RyaXAoKQorICAgICAgICAgICAgICAgIHByaW50KCJTSEVMTDogRHVtcGluZyBsb2cgZmlsZSBmb3IgbGFzdCBlcnJvcjoiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQob3BlbiggZmlsZW5hbWUgKS5yZWFkKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJFUlJPUjogQ291bGRuJ3Qgb3BlbiAnJXMnIiAlIGZpbGVuYW1lKQorCisgICAgZGVmIG1hdGNoKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBhbGwgZmlsZXMgb3IgcHJvdmlkZXJzIG1hdGNoaW5nIGEgZ2xvYiBleHByZXNzaW9uIiIiCisgICAgICAgIHdoYXQsIGdsb2JleHByID0gcGFyYW1zCisgICAgICAgIGlmIHdoYXQgPT0gImZpbGVzIjoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gZ2xvYmZpbHRlciggY29va2VyLnN0YXR1cy5wa2dfZm4sIGdsb2JleHByICk6IHByaW50KGtleSkKKyAgICAgICAgZWxpZiB3aGF0ID09ICJwcm92aWRlcnMiOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAgICAgZm9yIGtleSBpbiBnbG9iZmlsdGVyKCBjb29rZXIuc3RhdHVzLnBrZ19wbiwgZ2xvYmV4cHIgKTogcHJpbnQoa2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlOiBtYXRjaCAlcyIgJSBzZWxmLnByaW50Xy51c2FnZSkKKyAgICBtYXRjaC51c2FnZSA9ICI8ZmlsZXN8cHJvdmlkZXJzPiA8Z2xvYj4iCisKKyAgICBkZWYgbmV3KCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IC5iYiBmaWxlIGFuZCBvcGVuIHRoZSBlZGl0b3IiIiIKKyAgICAgICAgZGlybmFtZSwgZmlsZW5hbWUgPSBwYXJhbXMKKyAgICAgICAgcGFja2FnZXMgPSAnLycuam9pbiggZGF0YS5nZXRWYXIoICJCQkZJTEVTIiwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgMSApLnNwbGl0KCcvJylbOi0yXSApCisgICAgICAgIGZ1bGxkaXJuYW1lID0gIiVzLyVzIiAlICggcGFja2FnZXMsIGRpcm5hbWUgKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyggZnVsbGRpcm5hbWUgKToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogQ3JlYXRpbmcgJyVzJyIgJSBmdWxsZGlybmFtZSkKKyAgICAgICAgICAgIG9zLm1rZGlyKCBmdWxsZGlybmFtZSApCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCBmdWxsZGlybmFtZSApIGFuZCBvcy5wYXRoLmlzZGlyKCBmdWxsZGlybmFtZSApOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoICIlcy8lcyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApICk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBFUlJPUjogJXMvJXMgYWxyZWFkeSBleGlzdHMiICUgKCBmdWxsZGlybmFtZSwgZmlsZW5hbWUgKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogQ3JlYXRpbmcgJyVzLyVzJyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApKQorICAgICAgICAgICAgbmV3cGFja2FnZSA9IG9wZW4oICIlcy8lcyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApLCAidyIgKQorICAgICAgICAgICAgcHJpbnQoIiIiREVTQ1JJUFRJT04gPSAiIgorU0VDVElPTiA9ICIiCitBVVRIT1IgPSAiIgorSE9NRVBBR0UgPSAiIgorTUFJTlRBSU5FUiA9ICIiCitMSUNFTlNFID0gIkdQTCIKK1BSID0gInIwIgorCitTUkNfVVJJID0gIiIKKworI2luaGVyaXQgYmFzZQorCisjZG9fY29uZmlndXJlKCkgeworIworI30KKworI2RvX2NvbXBpbGUoKSB7CisjCisjfQorCisjZG9fc3RhZ2UoKSB7CisjCisjfQorCisjZG9faW5zdGFsbCgpIHsKKyMKKyN9CisiIiIsIGZpbGU9bmV3cGFja2FnZSkKKyAgICAgICAgICAgIG5ld3BhY2thZ2UuY2xvc2UoKQorICAgICAgICAgICAgb3Muc3lzdGVtKCAiJXMgJXMvJXMiICUgKCBvcy5lbnZpcm9uLmdldCggIkVESVRPUiIgKSwgZnVsbGRpcm5hbWUsIGZpbGVuYW1lICkgKQorICAgIG5ldy51c2FnZSA9ICI8ZGlyZWN0b3J5PiA8ZmlsZW5hbWU+IgorCisgICAgZGVmIHBhY2thZ2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdwYWNrYWdlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInBhY2thZ2UiICkKKyAgICBwYWNrYWdlLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgcGFzdGVCaW4oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZW5kIGEgY29tbWFuZCArIG91dHB1dCBidWZmZXIgdG8gdGhlIHBhc3RlYmluIGF0IGh0dHA6Ly9yYWZiLm5ldC9wYXN0ZSIiIgorICAgICAgICBpbmRleCA9IHBhcmFtc1swXQorICAgICAgICBjb250ZW50cyA9IHNlbGYuX3NoZWxsLm15b3V0LmJ1ZmZlciggaW50KCBpbmRleCApICkKKyAgICAgICAgc2VuZFRvUGFzdGViaW4oICJvdXRwdXQgb2YgIiArIHBhcmFtc1swXSwgY29udGVudHMgKQorICAgIHBhc3RlQmluLnVzYWdlID0gIjxpbmRleD4iCisKKyAgICBkZWYgcGFzdGVMb2coIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZW5kIHRoZSBsYXN0IGV2ZW50IGV4Y2VwdGlvbiBlcnJvciBsb2cgKGlmIHRoZXJlIGlzIG9uZSkgdG8gaHR0cDovL3JhZmIubmV0L3Bhc3RlIiIiCisgICAgICAgIGlmIGxhc3RfZXhjZXB0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IE5vIEVycm9ycyB5ZXQgKFBoZXcpLi4uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYXNvbiwgZXZlbnQgPSBsYXN0X2V4Y2VwdGlvbi5hcmdzCisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFJlYXNvbiBmb3IgdGhlIGxhc3QgZXJyb3I6ICclcyciICUgcmVhc29uKQorICAgICAgICAgICAgaWYgJzonIGluIHJlYXNvbjoKKyAgICAgICAgICAgICAgICBtc2csIGZpbGVuYW1lID0gcmVhc29uLnNwbGl0KCAnOicgKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3RyaXAoKQorICAgICAgICAgICAgICAgIHByaW50KCJTSEVMTDogUGFzdGluZyBsb2cgZmlsZSB0byBwYXN0ZWJpbi4uLiIpCisKKyAgICAgICAgICAgICAgICBmaWxlID0gb3BlbiggZmlsZW5hbWUgKS5yZWFkKCkKKyAgICAgICAgICAgICAgICBzZW5kVG9QYXN0ZWJpbiggImNvbnRlbnRzIG9mICIgKyBmaWxlbmFtZSwgZmlsZSApCisKKyAgICBkZWYgcGF0Y2goIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdwYXRjaCcgY29tbWFuZCBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInBhdGNoIiApCisgICAgcGF0Y2gudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBwYXJzZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIihSZS0pcGFyc2UgLmJiIGZpbGVzIGFuZCBjYWxjdWxhdGUgdGhlIGRlcGVuZGVuY3kgZ3JhcGgiIiIKKyAgICAgICAgY29va2VyLnN0YXR1cyA9IGNhY2hlLkNhY2hlRGF0YShjb29rZXIuY2FjaGVzX2FycmF5KQorICAgICAgICBpZ25vcmUgPSBkYXRhLmdldFZhcigiQVNTVU1FX1BST1ZJREVEIiwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgMSkgb3IgIiIKKyAgICAgICAgY29va2VyLnN0YXR1cy5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IHNldCggaWdub3JlLnNwbGl0KCkgKQorICAgICAgICBjb29rZXIuaGFuZGxlQ29sbGVjdGlvbnMoIGRhdGEuZ2V0VmFyKCJCQkZJTEVfQ09MTEVDVElPTlMiLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxKSApCisKKyAgICAgICAgKGZpbGVsaXN0LCBtYXNrZWQpID0gY29va2VyLmNvbGxlY3RfYmJmaWxlcygpCisgICAgICAgIGNvb2tlci5wYXJzZV9iYmZpbGVzKGZpbGVsaXN0LCBtYXNrZWQsIGNvb2tlci5teVByb2dyZXNzQ2FsbGJhY2spCisgICAgICAgIGNvb2tlci5idWlsZERlcGdyYXBoKCkKKyAgICAgICAgZ2xvYmFsIHBhcnNlZAorICAgICAgICBwYXJzZWQgPSBUcnVlCisgICAgICAgIHByaW50KCkKKworICAgIGRlZiByZXBhcnNlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiKHJlKVBhcnNlIGEgcHJvdmlkZWUncyBiYiBmaWxlIiIiCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggcGFyYW1zWzBdICkKKyAgICAgICAgaWYgYmJmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBGb3VuZCBiYmZpbGUgJyVzJyBmb3IgJyVzJyIgJSAoIGJiZmlsZSwgcGFyYW1zWzBdICkpCisgICAgICAgICAgICBzZWxmLmZpbGVSZXBhcnNlKCBbIGJiZmlsZSBdICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm90aGluZyBwcm92aWRlcyAnJXMnIiAlIHBhcmFtc1swXSkKKyAgICByZXBhcnNlLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgZ2V0dmFyKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCB0aGUgY29udGVudHMgb2YgYW4gb3V0ZXIgQml0QmFrZSBlbnZpcm9ubWVudCB2YXJpYWJsZSIiIgorICAgICAgICB2YXIgPSBwYXJhbXNbMF0KKyAgICAgICAgdmFsdWUgPSBkYXRhLmdldFZhciggdmFyLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxICkKKyAgICAgICAgcHJpbnQodmFsdWUpCisgICAgZ2V0dmFyLnVzYWdlID0gIjx2YXJpYWJsZT4iCisKKyAgICBkZWYgcGVlayggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkR1bXAgY29udGVudHMgb2YgdmFyaWFibGUgZGVmaW5lZCBpbiBwcm92aWRlZSdzIG1ldGFkYXRhIiIiCisgICAgICAgIG5hbWUsIHZhciA9IHBhcmFtcworICAgICAgICBiYmZpbGUgPSBzZWxmLl9maW5kUHJvdmlkZXIoIG5hbWUgKQorICAgICAgICBpZiBiYmZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aGVfZGF0YSA9IGNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChiYmZpbGUsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEpCisgICAgICAgICAgICB2YWx1ZSA9IHRoZV9kYXRhLmdldFZhciggdmFyLCAxICkKKyAgICAgICAgICAgIHByaW50KHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgbmFtZSkKKyAgICBwZWVrLnVzYWdlID0gIjxwcm92aWRlZT4gPHZhcmlhYmxlPiIKKworICAgIGRlZiBwb2tlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiU2V0IGNvbnRlbnRzIG9mIHZhcmlhYmxlIGRlZmluZWQgaW4gcHJvdmlkZWUncyBtZXRhZGF0YSIiIgorICAgICAgICBuYW1lLCB2YXIsIHZhbHVlID0gcGFyYW1zCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggbmFtZSApCisgICAgICAgIGlmIGJiZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogU29ycnksIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjdXJyZW50bHkgYnJva2VuIikKKyAgICAgICAgICAgICNkID0gY29va2VyLnBrZ2RhdGFbYmJmaWxlXQorICAgICAgICAgICAgI2RhdGEuc2V0VmFyKCB2YXIsIHZhbHVlLCBkICkKKworICAgICAgICAgICAgIyBtYXJrIHRoZSBjaGFuZ2Ugc2VtaSBwZXJzaXN0YW50CisgICAgICAgICAgICAjY29va2VyLnBrZ2RhdGEuc2V0RGlydHkoYmJmaWxlLCBkKQorICAgICAgICAgICAgI3ByaW50ICJPSyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogTm90aGluZyBwcm92aWRlcyAnJXMnIiAlIG5hbWUpCisgICAgcG9rZS51c2FnZSA9ICI8cHJvdmlkZWU+IDx2YXJpYWJsZT4gPHZhbHVlPiIKKworICAgIGRlZiBwcmludF8oIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIGFsbCBmaWxlcyBvciBwcm92aWRlcnMiIiIKKyAgICAgICAgd2hhdCA9IHBhcmFtc1swXQorICAgICAgICBpZiB3aGF0ID09ICJmaWxlcyI6CisgICAgICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisgICAgICAgICAgICBmb3Iga2V5IGluIGNvb2tlci5zdGF0dXMucGtnX2ZuOiBwcmludChrZXkpCisgICAgICAgIGVsaWYgd2hhdCA9PSAicHJvdmlkZXJzIjoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gY29va2VyLnN0YXR1cy5wcm92aWRlcnM6IHByaW50KGtleSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZTogcHJpbnQgJXMiICUgc2VsZi5wcmludF8udXNhZ2UpCisgICAgcHJpbnRfLnVzYWdlID0gIjxmaWxlc3xwcm92aWRlcnM+IgorCisgICAgZGVmIHB5dGhvbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkVudGVyIHRoZSBleHBlcnQgbW9kZSAtIGFuIGludGVyYWN0aXZlIEJpdEJha2UgUHl0aG9uIEludGVycHJldGVyIiIiCisgICAgICAgIHN5cy5wczEgPSAiRVhQRVJUIEJCPj4+ICIKKyAgICAgICAgc3lzLnBzMiA9ICJFWFBFUlQgQkIuLi4gIgorICAgICAgICBpbXBvcnQgY29kZQorICAgICAgICBpbnRlcnByZXRlciA9IGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlKCBkaWN0KCBnbG9iYWxzKCkgKSApCisgICAgICAgIGludGVycHJldGVyLmludGVyYWN0KCAiU0hFTEw6IEV4cGVydCBNb2RlIC0gQml0QmFrZSBQeXRob24gJXNcblR5cGUgJ2hlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLCBwcmVzcyBDVFJMLUQgdG8gc3dpdGNoIGJhY2sgdG8gQkJTSEVMTC4iICUgc3lzLnZlcnNpb24gKQorCisgICAgZGVmIHNob3dkYXRhKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnc2hvd2RhdGEnIG9uIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgY29va2VyLnNob3dFbnZpcm9ubWVudChOb25lLCBwYXJhbXMpCisgICAgc2hvd2RhdGEudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBzZXRWYXIoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZXQgYW4gb3V0ZXIgQml0QmFrZSBlbnZpcm9ubWVudCB2YXJpYWJsZSIiIgorICAgICAgICB2YXIsIHZhbHVlID0gcGFyYW1zCisgICAgICAgIGRhdGEuc2V0VmFyKCB2YXIsIHZhbHVlLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhICkKKyAgICAgICAgcHJpbnQoIk9LIikKKyAgICBzZXRWYXIudXNhZ2UgPSAiPHZhcmlhYmxlPiA8dmFsdWU+IgorCisgICAgZGVmIHJlYnVpbGQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDbGVhbiBhbmQgcmVidWlsZCBhIC5iYiBmaWxlIG9yIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiY2xlYW4iICkKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiYnVpbGQiICkKKyAgICByZWJ1aWxkLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgc2hlbGwoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlIGEgc2hlbGwgY29tbWFuZCBhbmQgZHVtcCB0aGUgb3V0cHV0IiIiCisgICAgICAgIGlmIHBhcmFtcyAhPSAiIjoKKyAgICAgICAgICAgIHByaW50KGNvbW1hbmRzLmdldG91dHB1dCggIiAiLmpvaW4oIHBhcmFtcyApICkpCisgICAgc2hlbGwudXNhZ2UgPSAiPC4uLj4iCisKKyAgICBkZWYgc3RhZ2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdzdGFnZScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJwb3B1bGF0ZV9zdGFnaW5nIiApCisgICAgc3RhZ2UudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBzdGF0dXMoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiI8anVzdCBmb3IgdGVzdGluZz4iIiIKKyAgICAgICAgcHJpbnQoIi0iICogNzgpCisgICAgICAgIHByaW50KCJidWlsZGluZyBsaXN0ID0gJyVzJyIgJSBjb29rZXIuYnVpbGRpbmdfbGlzdCkKKyAgICAgICAgcHJpbnQoImJ1aWxkIHBhdGggPSAnJXMnIiAlIGNvb2tlci5idWlsZF9wYXRoKQorICAgICAgICBwcmludCgiY29uc2lkZXJfbXNnc19jYWNoZSA9ICclcyciICUgY29va2VyLmNvbnNpZGVyX21zZ3NfY2FjaGUpCisgICAgICAgIHByaW50KCJidWlsZCBzdGF0cyA9ICclcyciICUgY29va2VyLnN0YXRzKQorICAgICAgICBpZiBsYXN0X2V4Y2VwdGlvbiBpcyBub3QgTm9uZTogcHJpbnQoImxhc3RfZXhjZXB0aW9uID0gJyVzJyIgJSByZXByKCBsYXN0X2V4Y2VwdGlvbi5hcmdzICkpCisgICAgICAgIHByaW50KCJtZW1vcnkgb3V0cHV0IGNvbnRlbnRzID0gJyVzJyIgJSBzZWxmLl9zaGVsbC5teW91dC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3QoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiI8anVzdCBmb3IgdGVzdGluZz4iIiIKKyAgICAgICAgcHJpbnQoInRlc3RDb21tYW5kIGNhbGxlZCB3aXRoICclcyciICUgcGFyYW1zKQorCisgICAgZGVmIHVucGFjayggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3VucGFjaycgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJ1bnBhY2siICkKKyAgICB1bnBhY2sudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiB3aGljaCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNvbXB1dGVzIHRoZSBwcm92aWRlcnMgZm9yIGEgZ2l2ZW4gcHJvdmlkZWUiIiIKKyAgICAgICAgIyBOZWVkIHRvIHVzZSB0YXNrRGF0YSBmb3IgdGhpcyBpbmZvcm1hdGlvbgorICAgICAgICBpdGVtID0gcGFyYW1zWzBdCisKKyAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorCisgICAgICAgIHByZWZlcnJlZCA9IGRhdGEuZ2V0VmFyKCAiUFJFRkVSUkVEX1BST1ZJREVSXyVzIiAlIGl0ZW0sIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEgKQorICAgICAgICBpZiBub3QgcHJlZmVycmVkOiBwcmVmZXJyZWQgPSBpdGVtCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbHYsIGxmLCBwdiwgcGYgPSBQcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwcmVmZXJyZWQsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIGNvb2tlci5zdGF0dXMpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGx2LCBsZiwgcHYsIHBmID0gKE5vbmUsKSo0CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvdmlkZXJzID0gY29va2VyLnN0YXR1cy5wcm92aWRlcnNbaXRlbV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBFUlJPUjogTm90aGluZyBwcm92aWRlcyIsIHByZWZlcnJlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBwcm92aWRlciBpbiBwcm92aWRlcnM6CisgICAgICAgICAgICAgICAgaWYgcHJvdmlkZXIgPT0gcGY6IHByb3ZpZGVyID0gIiAoKioqKSAlcyIgJSBwcm92aWRlcgorICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICBwcm92aWRlciA9ICIgICAgICAgJXMiICUgcHJvdmlkZXIKKyAgICAgICAgICAgICAgICBwcmludChwcm92aWRlcikKKyAgICB3aGljaC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb21tb24gaGVscGVyIGZ1bmN0aW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIGNvbXBsZXRlRmlsZVBhdGgoIGJiZmlsZSApOgorICAgICIiIkdldCB0aGUgY29tcGxldGUgYmJmaWxlIHBhdGgiIiIKKyAgICBpZiBub3QgY29va2VyLnN0YXR1czogcmV0dXJuIGJiZmlsZQorICAgIGlmIG5vdCBjb29rZXIuc3RhdHVzLnBrZ19mbjogcmV0dXJuIGJiZmlsZQorICAgIGZvciBrZXkgaW4gY29va2VyLnN0YXR1cy5wa2dfZm46CisgICAgICAgIGlmIGtleS5lbmRzd2l0aCggYmJmaWxlICk6CisgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgcmV0dXJuIGJiZmlsZQorCitkZWYgc2VuZFRvUGFzdGViaW4oIGRlc2MsIGNvbnRlbnQgKToKKyAgICAiIiJTZW5kIGNvbnRlbnQgdG8gaHR0cDovL29lLnBhc3RlYmluLmNvbSIiIgorICAgIG15ZGF0YSA9IHt9CisgICAgbXlkYXRhWyJsYW5nIl0gPSAiUGxhaW4gVGV4dCIKKyAgICBteWRhdGFbImRlc2MiXSA9IGRlc2MKKyAgICBteWRhdGFbImN2dF90YWJzIl0gPSAiTm8iCisgICAgbXlkYXRhWyJuaWNrIl0gPSAiJXNAJXMiICUgKCBvcy5lbnZpcm9uLmdldCggIlVTRVIiLCAidW5rbm93biIgKSwgc29ja2V0LmdldGhvc3RuYW1lKCkgb3IgInVua25vd24iICkKKyAgICBteWRhdGFbInRleHQiXSA9IGNvbnRlbnQKKyAgICBwYXJhbXMgPSB1cmxsaWIudXJsZW5jb2RlKCBteWRhdGEgKQorICAgIGhlYWRlcnMgPSB7IkNvbnRlbnQtdHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCAiQWNjZXB0IjogInRleHQvcGxhaW4ifQorCisgICAgaG9zdCA9ICJyYWZiLm5ldCIKKyAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbiggIiVzOjgwIiAlIGhvc3QgKQorICAgIGNvbm4ucmVxdWVzdCgiUE9TVCIsICIvcGFzdGUvcGFzdGUucGhwIiwgcGFyYW1zLCBoZWFkZXJzICkKKworICAgIHJlc3BvbnNlID0gY29ubi5nZXRyZXNwb25zZSgpCisgICAgY29ubi5jbG9zZSgpCisKKyAgICBpZiByZXNwb25zZS5zdGF0dXMgPT0gMzAyOgorICAgICAgICBsb2NhdGlvbiA9IHJlc3BvbnNlLmdldGhlYWRlciggImxvY2F0aW9uIiApIG9yICJ1bmtub3duIgorICAgICAgICBwcmludCgiU0hFTEw6IFBhc3RlZCB0byBodHRwOi8vJXMlcyIgJSAoIGhvc3QsIGxvY2F0aW9uICkpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkVSUk9SOiAlcyAlcyIgJSAoIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UucmVhc29uICkpCisKK2RlZiBjb21wbGV0ZXIoIHRleHQsIHN0YXRlICk6CisgICAgIiIiUmV0dXJuIGEgcG9zc2libGUgcmVhZGxpbmUgY29tcGxldGlvbiIiIgorICAgIGRlYnVnT3V0KCAiY29tcGxldGVyIGNhbGxlZCB3aXRoIHRleHQ9JyVzJywgc3RhdGU9JyVkJyIgJSAoIHRleHQsIHN0YXRlICkgKQorCisgICAgaWYgc3RhdGUgPT0gMDoKKyAgICAgICAgbGluZSA9IHJlYWRsaW5lLmdldF9saW5lX2J1ZmZlcigpCisgICAgICAgIGlmICIgIiBpbiBsaW5lOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgIyB3ZSBhcmUgaW4gc2Vjb25kIChvciBtb3JlKSBhcmd1bWVudAorICAgICAgICAgICAgaWYgbGluZVswXSBpbiBjbWRzIGFuZCBoYXNhdHRyKCBjbWRzW2xpbmVbMF1dWzBdLCAidXNhZ2UiICk6ICMga25vd24gY29tbWFuZCBhbmQgdXNhZ2UKKyAgICAgICAgICAgICAgICB1ID0gZ2V0YXR0ciggY21kc1tsaW5lWzBdXVswXSwgInVzYWdlIiApLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICBpZiB1ID09ICI8dmFyaWFibGU+IjoKKyAgICAgICAgICAgICAgICAgICAgYWxsbWF0Y2hlcyA9IGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEua2V5cygpCisgICAgICAgICAgICAgICAgZWxpZiB1ID09ICI8YmJmaWxlPiI6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvb2tlci5zdGF0dXMucGtnX2ZuIGlzIE5vbmU6IGFsbG1hdGNoZXMgPSBbICIoTm8gTWF0Y2hlcyBBdmFpbGFibGUuIFBhcnNlZCB5ZXQ/KSIgXQorICAgICAgICAgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gWyB4LnNwbGl0KCIvIilbLTFdIGZvciB4IGluIGNvb2tlci5zdGF0dXMucGtnX2ZuIF0KKyAgICAgICAgICAgICAgICBlbGlmIHUgPT0gIjxwcm92aWRlZT4iOgorICAgICAgICAgICAgICAgICAgICBpZiBjb29rZXIuc3RhdHVzLnBrZ19mbiBpcyBOb25lOiBhbGxtYXRjaGVzID0gWyAiKE5vIE1hdGNoZXMgQXZhaWxhYmxlLiBQYXJzZWQgeWV0PykiIF0KKyAgICAgICAgICAgICAgICAgICAgZWxzZTogYWxsbWF0Y2hlcyA9IGNvb2tlci5zdGF0dXMucHJvdmlkZXJzLml0ZXJrZXlzKCkKKyAgICAgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gWyAiKE5vIHRhYiBjb21wbGV0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBjb21tYW5kKSIgXQorICAgICAgICAgICAgZWxzZTogYWxsbWF0Y2hlcyA9IFsgIihObyB0YWIgY29tcGxldGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgY29tbWFuZCkiIF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgd2UgYXJlIGluIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICBhbGxtYXRjaGVzID0gY21kcy5pdGVya2V5cygpCisKKyAgICAgICAgY29tcGxldGVyLm1hdGNoZXMgPSBbIHggZm9yIHggaW4gYWxsbWF0Y2hlcyBpZiB4WzpsZW4odGV4dCldID09IHRleHQgXQorICAgICAgICAjcHJpbnQgImNvbXBsZXRlci5tYXRjaGVzID0gJyVzJyIgJSBjb21wbGV0ZXIubWF0Y2hlcworICAgIGlmIGxlbiggY29tcGxldGVyLm1hdGNoZXMgKSA+IHN0YXRlOgorICAgICAgICByZXR1cm4gY29tcGxldGVyLm1hdGNoZXNbc3RhdGVdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGRlYnVnT3V0KCB0ZXh0ICk6CisgICAgaWYgZGVidWc6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICIoICVzIClcbiIgJSB0ZXh0ICkKKworZGVmIGNvbHVtbml6ZSggYWxpc3QsIHdpZHRoID0gODAgKToKKyAgICAiIiIKKyAgICBBIHdvcmQtd3JhcCBmdW5jdGlvbiB0aGF0IHByZXNlcnZlcyBleGlzdGluZyBsaW5lIGJyZWFrcworICAgIGFuZCBtb3N0IHNwYWNlcyBpbiB0aGUgdGV4dC4gRXhwZWN0cyB0aGF0IGV4aXN0aW5nIGxpbmUKKyAgICBicmVha3MgYXJlIHBvc2l4IG5ld2xpbmVzIChcbikuCisgICAgIiIiCisgICAgcmV0dXJuIHJlZHVjZShsYW1iZGEgbGluZSwgd29yZCwgd2lkdGg9d2lkdGg6ICclcyVzJXMnICUKKyAgICAgICAgICAgICAgICAgIChsaW5lLAorICAgICAgICAgICAgICAgICAgICcgXG4nWyhsZW4obGluZVtsaW5lLnJmaW5kKCdcbicpKzE6XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICArIGxlbih3b3JkLnNwbGl0KCdcbicsIDEpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID49IHdpZHRoKV0sCisgICAgICAgICAgICAgICAgICAgd29yZCksCisgICAgICAgICAgICAgICAgICBhbGlzdAorICAgICAgICAgICAgICAgICApCisKK2RlZiBnbG9iZmlsdGVyKCBuYW1lcywgcGF0dGVybiApOgorICAgIHJldHVybiBmbm1hdGNoLmZpbHRlciggbmFtZXMsIHBhdHRlcm4gKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDbGFzcyBNZW1vcnlPdXRwdXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIE1lbW9yeU91dHB1dDoKKyAgICAiIiJGaWxlLWxpa2Ugb3V0cHV0IGNsYXNzIGJ1ZmZlcmluZyB0aGUgb3V0cHV0IG9mIHRoZSBsYXN0IDEwIGNvbW1hbmRzIiIiCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBkZWxlZ2F0ZSApOgorICAgICAgICBzZWxmLmRlbGVnYXRlID0gZGVsZWdhdGUKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi50ZXh0ID0gW10KKyAgICAgICAgc2VsZi5fY29tbWFuZCA9IE5vbmUKKworICAgIGRlZiBzdGFydENvbW1hbmQoIHNlbGYsIGNvbW1hbmQgKToKKyAgICAgICAgc2VsZi5fY29tbWFuZCA9IGNvbW1hbmQKKyAgICAgICAgc2VsZi50ZXh0ID0gW10KKyAgICBkZWYgZW5kQ29tbWFuZCggc2VsZiApOgorICAgICAgICBpZiBzZWxmLl9jb21tYW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbGVuKCBzZWxmLl9idWZmZXIgKSA9PSAxMDogZGVsIHNlbGYuX2J1ZmZlclswXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZCggKCBzZWxmLl9jb21tYW5kLCBzZWxmLnRleHQgKSApCisgICAgZGVmIHJlbW92ZUxhc3QoIHNlbGYgKToKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlclsgbGVuKCBzZWxmLl9idWZmZXIgKSAtIDEgXQorICAgICAgICBzZWxmLnRleHQgPSBbXQorICAgICAgICBzZWxmLl9jb21tYW5kID0gTm9uZQorICAgIGRlZiBsYXN0QnVmZmVyKCBzZWxmICk6CisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXJbIGxlbiggc2VsZi5fYnVmZmVyICkgLTEgXVsxXQorICAgIGRlZiBidWZmZXJlZENvbW1hbmRzKCBzZWxmICk6CisgICAgICAgIHJldHVybiBbIGNtZCBmb3IgY21kLCBvdXRwdXQgaW4gc2VsZi5fYnVmZmVyIF0KKyAgICBkZWYgYnVmZmVyKCBzZWxmLCBpICk6CisgICAgICAgIGlmIGkgPCBsZW4oIHNlbGYuX2J1ZmZlciApOgorICAgICAgICAgICAgcmV0dXJuICJCQj4+ICVzXG4lcyIgJSAoIHNlbGYuX2J1ZmZlcltpXVswXSwgIiIuam9pbiggc2VsZi5fYnVmZmVyW2ldWzFdICkgKQorICAgICAgICBlbHNlOiByZXR1cm4gIkVSUk9SOiBJbnZhbGlkIGJ1ZmZlciBudW1iZXIuIEJ1ZmZlciBuZWVkcyB0byBiZSBpbiAoMCwgJWQpIiAlICggbGVuKCBzZWxmLl9idWZmZXIgKSAtIDEgKQorICAgIGRlZiB3cml0ZSggc2VsZiwgdGV4dCApOgorICAgICAgICBpZiBzZWxmLl9jb21tYW5kIGlzIG5vdCBOb25lIGFuZCB0ZXh0ICE9ICJCQj4+ICI6IHNlbGYudGV4dC5hcHBlbmQoIHRleHQgKQorICAgICAgICBpZiBzZWxmLmRlbGVnYXRlIGlzIG5vdCBOb25lOiBzZWxmLmRlbGVnYXRlLndyaXRlKCB0ZXh0ICkKKyAgICBkZWYgZmx1c2goIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVsZWdhdGUuZmx1c2goKQorICAgIGRlZiBmaWxlbm8oIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVsZWdhdGUuZmlsZW5vKCkKKyAgICBkZWYgaXNhdHR5KCBzZWxmICk6CisgICAgICAgIHJldHVybiBzZWxmLmRlbGVnYXRlLmlzYXR0eSgpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENsYXNzIEJpdEJha2VTaGVsbAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgQml0QmFrZVNoZWxsOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmICk6CisgICAgICAgICIiIlJlZ2lzdGVyIGNvbW1hbmRzIGFuZCBzZXQgdXAgcmVhZGxpbmUiIiIKKyAgICAgICAgc2VsZi5jb21tYW5kUSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IEJpdEJha2VTaGVsbENvbW1hbmRzKCBzZWxmICkKKyAgICAgICAgc2VsZi5teW91dCA9IE1lbW9yeU91dHB1dCggc3lzLnN0ZG91dCApCisgICAgICAgIHNlbGYuaGlzdG9yeWZpbGVuYW1lID0gb3MucGF0aC5leHBhbmR1c2VyKCAifi8uYmJzaF9oaXN0b3J5IiApCisgICAgICAgIHNlbGYuc3RhcnR1cGZpbGVuYW1lID0gb3MucGF0aC5leHBhbmR1c2VyKCAifi8uYmJzaF9zdGFydHVwIiApCisKKyAgICAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlciggY29tcGxldGVyICkKKyAgICAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcl9kZWxpbXMoICIgIiApCisgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCJ0YWI6IGNvbXBsZXRlIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZSggc2VsZi5oaXN0b3J5ZmlsZW5hbWUgKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHBhc3MgICMgSXQgZG9lc24ndCBleGlzdCB5ZXQuCisKKyAgICAgICAgcHJpbnQoX19jcmVkaXRzX18pCisKKyAgICBkZWYgY2xlYW51cCggc2VsZiApOgorICAgICAgICAiIiJXcml0ZSByZWFkbGluZSBoaXN0b3J5IGFuZCBjbGVhbiB1cCByZXNvdXJjZXMiIiIKKyAgICAgICAgZGVidWdPdXQoICJ3cml0aW5nIGNvbW1hbmQgaGlzdG9yeSIgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoIHNlbGYuaGlzdG9yeWZpbGVuYW1lICkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBVbmFibGUgdG8gc2F2ZSBjb21tYW5kIGhpc3RvcnkiKQorCisgICAgZGVmIHJlZ2lzdGVyQ29tbWFuZCggc2VsZiwgY29tbWFuZCwgZnVuY3Rpb24sIG51bXBhcmFtcyA9IDAsIHVzYWdlID0gIiIsIGhlbHB0ZXh0ID0gIiIgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBjb21tYW5kIiIiCisgICAgICAgIGlmIHVzYWdlID09ICIiOiB1c2FnZSA9IGNvbW1hbmQKKyAgICAgICAgaWYgaGVscHRleHQgPT0gIiI6IGhlbHB0ZXh0ID0gZnVuY3Rpb24uX19kb2NfXyBvciAiPG5vdCB5ZXQgZG9jdW1lbnRlZD4iCisgICAgICAgIGNtZHNbY29tbWFuZF0gPSAoIGZ1bmN0aW9uLCBudW1wYXJhbXMsIHVzYWdlLCBoZWxwdGV4dCApCisKKyAgICBkZWYgcHJvY2Vzc0NvbW1hbmQoIHNlbGYsIGNvbW1hbmQsIHBhcmFtcyApOgorICAgICAgICAiIiJQcm9jZXNzIGEgY29tbWFuZC4gQ2hlY2sgbnVtYmVyIG9mIHBhcmFtcyBhbmQgcHJpbnQgYSB1c2FnZSBzdHJpbmcsIGlmIGFwcHJvcHJpYXRlIiIiCisgICAgICAgIGRlYnVnT3V0KCAicHJvY2Vzc2luZyBjb21tYW5kICclcycuLi4iICUgY29tbWFuZCApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmN0aW9uLCBudW1wYXJhbXMsIHVzYWdlLCBoZWxwdGV4dCA9IGNtZHNbY29tbWFuZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBFUlJPUjogJyVzJyBjb21tYW5kIGlzIG5vdCBhIHZhbGlkIGNvbW1hbmQuIiAlIGNvbW1hbmQpCisgICAgICAgICAgICBzZWxmLm15b3V0LnJlbW92ZUxhc3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgKG51bXBhcmFtcyAhPSAtMSkgYW5kIChub3QgbGVuKCBwYXJhbXMgKSA9PSBudW1wYXJhbXMpOgorICAgICAgICAgICAgICAgIHByaW50KCJVc2FnZTogJyVzJyIgJSB1c2FnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb24oIHNlbGYuY29tbWFuZHMsIHBhcmFtcyApCisgICAgICAgICAgICBkZWJ1Z091dCggInJlc3VsdCB3YXMgJyVzJyIgJSByZXN1bHQgKQorCisgICAgZGVmIHByb2Nlc3NTdGFydHVwRmlsZSggc2VsZiApOgorICAgICAgICAiIiJSZWFkIGFuZCBleGVjdXRlIGFsbCBjb21tYW5kcyBmb3VuZCBpbiAkSE9NRS8uYmJzaF9zdGFydHVwIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCBzZWxmLnN0YXJ0dXBmaWxlbmFtZSApOgorICAgICAgICAgICAgc3RhcnR1cGZpbGUgPSBvcGVuKCBzZWxmLnN0YXJ0dXBmaWxlbmFtZSwgInIiICkKKyAgICAgICAgICAgIGZvciBjbWRsaW5lIGluIHN0YXJ0dXBmaWxlOgorICAgICAgICAgICAgICAgIGRlYnVnT3V0KCAicHJvY2Vzc2luZyBzdGFydHVwIGxpbmUgJyVzJyIgJSBjbWRsaW5lICkKKyAgICAgICAgICAgICAgICBpZiBub3QgY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAifCIgaW4gY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiAnfCcgaW4gc3RhcnR1cCBmaWxlIGlzIG5vdCBhbGxvd2VkLiBJZ25vcmluZyBsaW5lIikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmRRLnB1dCggY21kbGluZS5zdHJpcCgpICkKKworICAgIGRlZiBtYWluKCBzZWxmICk6CisgICAgICAgICIiIlRoZSBtYWluIGNvbW1hbmQgbG9vcCIiIgorICAgICAgICB3aGlsZSBub3QgbGVhdmVfbWFpbmxvb3A6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21tYW5kUS5lbXB0eSgpOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5teW91dC5kZWxlZ2F0ZQorICAgICAgICAgICAgICAgICAgICBjbWRsaW5lID0gcmF3X2lucHV0KCAiQkI+PiAiICkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYubXlvdXQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbWRsaW5lID0gc2VsZi5jb21tYW5kUS5nZXQoKQorICAgICAgICAgICAgICAgIGlmIGNtZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGFsbENvbW1hbmRzID0gY21kbGluZS5zcGxpdCggJzsnICkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4gYWxsQ29tbWFuZHM6CisgICAgICAgICAgICAgICAgICAgICAgICBwaXBlY21kID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIGV4cGVydCBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb21tYW5kID09ICdweXRob24nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm15b3V0LmRlbGVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzQ29tbWFuZCggY29tbWFuZCwgIiIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm15b3V0CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlvdXQuc3RhcnRDb21tYW5kKCBjb21tYW5kICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnfCcgaW4gY29tbWFuZDogIyBkaXNhYmxlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBwaXBlY21kID0gY29tbWFuZC5zcGxpdCggJ3wnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGUgPSBzZWxmLm15b3V0LmRlbGVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlvdXQuZGVsZWdhdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gc2hsZXguc3BsaXQoIGNvbW1hbmQsIFRydWUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc0NvbW1hbmQoIHRva2Vuc1swXSwgdG9rZW5zWzE6XSBvciAiIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5lbmRDb21tYW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwaXBlY21kIGlzIG5vdCBOb25lOiAjIHJlc3RvcmUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubXlvdXQuZGVsZWdhdGUgPSBkZWxlZ2F0ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUgPSBwb3BlbjIuUG9wZW40KCBwaXBlY21kICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZS50b2NoaWxkLndyaXRlKCAiXG4iLmpvaW4oIHNlbGYubXlvdXQubGFzdEJ1ZmZlcigpICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLnRvY2hpbGQuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCBwaXBlLmZyb21jaGlsZC5yZWFkKCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBwcmludCgpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFN0YXJ0IGZ1bmN0aW9uIC0gY2FsbGVkIGZyb20gdGhlIEJpdEJha2UgY29tbWFuZCBsaW5lIHV0aWxpdHkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBzdGFydCggYUNvb2tlciApOgorICAgIGdsb2JhbCBjb29rZXIKKyAgICBjb29rZXIgPSBhQ29va2VyCisgICAgYmJzaGVsbCA9IEJpdEJha2VTaGVsbCgpCisgICAgYmJzaGVsbC5wcm9jZXNzU3RhcnR1cEZpbGUoKQorICAgIGJic2hlbGwubWFpbigpCisgICAgYmJzaGVsbC5jbGVhbnVwKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwcmludCgiU0hFTEw6IFNvcnJ5LCB0aGlzIHByb2dyYW0gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IEJpdEJha2UuIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi9zaWdnZW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NTI3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5CkBAIC0wLDAgKzEsNTI2IEBACitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBiYi5kYXRhCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLlNpZ0dlbicpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oJ0ltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIEZhbGxpbmcgYmFjayB0byBhIHZlcnkgc2xvdyBpbXBsZW1lbnRhdGlvbi4nKQorCitkZWYgaW5pdChkKToKKyAgICBzaWdnZW5zID0gW29iaiBmb3Igb2JqIGluIGdsb2JhbHMoKS5pdGVydmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKG9iaikgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhvYmosIFNpZ25hdHVyZUdlbmVyYXRvcildCisKKyAgICBkZXNpcmVkID0gZC5nZXRWYXIoIkJCX1NJR05BVFVSRV9IQU5ETEVSIiwgVHJ1ZSkgb3IgIm5vb3AiCisgICAgZm9yIHNnIGluIHNpZ2dlbnM6CisgICAgICAgIGlmIGRlc2lyZWQgPT0gc2cubmFtZToKKyAgICAgICAgICAgIHJldHVybiBzZyhkKQorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgc2lnbmF0dXJlIGdlbmVyYXRvciAnJXMnLCB1c2luZyBkZWZhdWx0ICdub29wJ1xuIgorICAgICAgICAgICAgICAgICAgICAgIkF2YWlsYWJsZSBnZW5lcmF0b3JzOiAlcyIsIGRlc2lyZWQsCisgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4ob2JqLm5hbWUgZm9yIG9iaiBpbiBzaWdnZW5zKSkKKyAgICAgICAgcmV0dXJuIFNpZ25hdHVyZUdlbmVyYXRvcihkKQorCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3Iob2JqZWN0KToKKyAgICAiIiIKKyAgICAiIiIKKyAgICBuYW1lID0gIm5vb3AiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYudGFza2hhc2ggPSB7fQorICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzID0ge30KKyAgICAgICAgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlcyA9IHt9CisKKyAgICBkZWYgZmluYWxpc2Uoc2VsZiwgZm4sIGQsIHZhcmllbnQpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBnZXRfdGFza2hhc2goc2VsZiwgZm4sIHRhc2ssIGRlcHMsIGRhdGFDYWNoZSk6CisgICAgICAgIHJldHVybiAiMCIKKworICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgaGFzaGVzLCBkZXBzLCBjaGVja3N1bSk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIHN0YW1wZmlsZShzZWxmLCBzdGFtcGJhc2UsIGZpbGVfbmFtZSwgdGFza25hbWUsIGV4dHJhaW5mbyk6CisgICAgICAgIHJldHVybiAoIiVzLiVzLiVzIiAlIChzdGFtcGJhc2UsIHRhc2tuYW1lLCBleHRyYWluZm8pKS5yc3RyaXAoJy4nKQorCisgICAgZGVmIHN0YW1wY2xlYW5tYXNrKHNlbGYsIHN0YW1wYmFzZSwgZmlsZV9uYW1lLCB0YXNrbmFtZSwgZXh0cmFpbmZvKToKKyAgICAgICAgcmV0dXJuICgiJXMuJXMuJXMiICUgKHN0YW1wYmFzZSwgdGFza25hbWUsIGV4dHJhaW5mbykpLnJzdHJpcCgnLicpCisKKyAgICBkZWYgZHVtcF9zaWd0YXNrKHNlbGYsIGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBpbnZhbGlkYXRlX3Rhc2soc2VsZiwgdGFzaywgZCwgZm4pOgorICAgICAgICBiYi5idWlsZC5kZWxfc3RhbXAodGFzaywgZCwgZm4pCisKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldF90YXNrZGF0YShzZWxmKToKKyAgICAgICByZXR1cm4gKHNlbGYucnVudGFza2RlcHMsIHNlbGYudGFza2hhc2gsIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXMpCisKKyAgICBkZWYgc2V0X3Rhc2tkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzLCBzZWxmLnRhc2toYXNoLCBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzID0gZGF0YQorCisKK2NsYXNzIFNpZ25hdHVyZUdlbmVyYXRvckJhc2ljKFNpZ25hdHVyZUdlbmVyYXRvcik6CisgICAgIiIiCisgICAgIiIiCisgICAgbmFtZSA9ICJiYXNpYyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5iYXNlaGFzaCA9IHt9CisgICAgICAgIHNlbGYudGFza2hhc2ggPSB7fQorICAgICAgICBzZWxmLnRhc2tkZXBzID0ge30KKyAgICAgICAgc2VsZi5ydW50YXNrZGVwcyA9IHt9CisgICAgICAgIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXMgPSB7fQorICAgICAgICBzZWxmLmdlbmRlcHMgPSB7fQorICAgICAgICBzZWxmLmxvb2t1cGNhY2hlID0ge30KKyAgICAgICAgc2VsZi5wa2duYW1lZXh0cmFjdCA9IHJlLmNvbXBpbGUoIig/UDxmbj4uKilcLi4qIikKKyAgICAgICAgc2VsZi5iYXNld2hpdGVsaXN0ID0gc2V0KChkYXRhLmdldFZhcigiQkJfSEFTSEJBU0VfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIHNlbGYudGFza3doaXRlbGlzdCA9IE5vbmUKKyAgICAgICAgc2VsZi5pbml0X3J1bmRlcGNoZWNrKGRhdGEpCisKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi50YXNrd2hpdGVsaXN0ID0gZGF0YS5nZXRWYXIoIkJCX0hBU0hUQVNLX1dISVRFTElTVCIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgaWYgc2VsZi50YXNrd2hpdGVsaXN0OgorICAgICAgICAgICAgc2VsZi50d2wgPSByZS5jb21waWxlKHNlbGYudGFza3doaXRlbGlzdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudHdsID0gTm9uZQorCisgICAgZGVmIF9idWlsZF9kYXRhKHNlbGYsIGZuLCBkKToKKworICAgICAgICB0YXNrbGlzdCwgZ2VuZGVwcywgbG9va3VwY2FjaGUgPSBiYi5kYXRhLmdlbmVyYXRlX2RlcGVuZGVuY2llcyhkKQorCisgICAgICAgIHRhc2tkZXBzID0ge30KKyAgICAgICAgYmFzZWhhc2ggPSB7fQorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tsaXN0OgorICAgICAgICAgICAgZGF0YSA9IGxvb2t1cGNhY2hlW3Rhc2tdCisKKyAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigiVGFzayAlcyBmcm9tICVzIHNlZW1zIHRvIGJlIGVtcHR5PyEiICUgKHRhc2ssIGZuKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gJycKKworICAgICAgICAgICAgZ2VuZGVwc1t0YXNrXSAtPSBzZWxmLmJhc2V3aGl0ZWxpc3QKKyAgICAgICAgICAgIG5ld2RlcHMgPSBnZW5kZXBzW3Rhc2tdCisgICAgICAgICAgICBzZWVuID0gc2V0KCkKKyAgICAgICAgICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgICAgICAgICAgbmV4dGRlcHMgPSBuZXdkZXBzCisgICAgICAgICAgICAgICAgc2VlbiB8PSBuZXh0ZGVwcworICAgICAgICAgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gbmV4dGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBzZWxmLmJhc2V3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBnZW5kZXBzW2RlcF0gLT0gc2VsZi5iYXNld2hpdGVsaXN0CisgICAgICAgICAgICAgICAgICAgIG5ld2RlcHMgfD0gZ2VuZGVwc1tkZXBdCisgICAgICAgICAgICAgICAgbmV3ZGVwcyAtPSBzZWVuCisKKyAgICAgICAgICAgIGFsbGRlcHMgPSBzb3J0ZWQoc2VlbikKKyAgICAgICAgICAgIGZvciBkZXAgaW4gYWxsZGVwczoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSArIGRlcAorICAgICAgICAgICAgICAgIHZhciA9IGxvb2t1cGNhY2hlW2RlcF0KKyAgICAgICAgICAgICAgICBpZiB2YXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc3RyKHZhcikKKyAgICAgICAgICAgIHNlbGYuYmFzZWhhc2hbZm4gKyAiLiIgKyB0YXNrXSA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisgICAgICAgICAgICB0YXNrZGVwc1t0YXNrXSA9IGFsbGRlcHMKKworICAgICAgICBzZWxmLnRhc2tkZXBzW2ZuXSA9IHRhc2tkZXBzCisgICAgICAgIHNlbGYuZ2VuZGVwc1tmbl0gPSBnZW5kZXBzCisgICAgICAgIHNlbGYubG9va3VwY2FjaGVbZm5dID0gbG9va3VwY2FjaGUKKworICAgICAgICByZXR1cm4gdGFza2RlcHMKKworICAgIGRlZiBmaW5hbGlzZShzZWxmLCBmbiwgZCwgdmFyaWFudCk6CisKKyAgICAgICAgaWYgdmFyaWFudDoKKyAgICAgICAgICAgIGZuID0gInZpcnR1YWw6IiArIHZhcmlhbnQgKyAiOiIgKyBmbgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhc2tkZXBzID0gc2VsZi5fYnVpbGRfZGF0YShmbiwgZCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgYmIubm90ZSgiRXJyb3IgZHVyaW5nIGZpbmFsaXNlIG9mICVzIiAlIGZuKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAjU2xvdyBidXQgY2FuIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIG1pc21hdGNoZWQgYmFzZWhhc2hlcworICAgICAgICAjZm9yIHRhc2sgaW4gc2VsZi50YXNrZGVwc1tmbl06CisgICAgICAgICMgICAgc2VsZi5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIGQuZ2V0VmFyKCJTVEFNUCIsIFRydWUpLCBGYWxzZSkKKworICAgICAgICBmb3IgdGFzayBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJCQl9CQVNFSEFTSF90YXNrLSVzIiAlIHRhc2ssIHNlbGYuYmFzZWhhc2hbZm4gKyAiLiIgKyB0YXNrXSkKKworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKToKKyAgICAgICAgIyBSZXR1cm4gVHJ1ZSBpZiB3ZSBzaG91bGQga2VlcCB0aGUgZGVwZW5kZW5jeSwgRmFsc2UgdG8gZHJvcCBpdAorICAgICAgICAjIFdlIG9ubHkgbWFuaXB1bGF0ZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlcyBub3QgaW4gdGhlIHdoaXRlbGlzdAorICAgICAgICBpZiBzZWxmLnR3bCBhbmQgbm90IHNlbGYudHdsLnNlYXJjaChyZWNpcGVuYW1lKToKKyAgICAgICAgICAgICMgdGhlbiBwcm9jZXNzIHRoZSBhY3R1YWwgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiBzZWxmLnR3bC5zZWFyY2goZGVwbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVhZF90YWludChzZWxmLCBmbiwgdGFzaywgc3RhbXBiYXNlKToKKyAgICAgICAgdGFpbnQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGFtcGJhc2UgKyAnLicgKyB0YXNrICsgJy50YWludCcsICdyJykgYXMgdGFpbnRmOgorICAgICAgICAgICAgICAgIHRhaW50ID0gdGFpbnRmLnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHRhaW50CisKKyAgICBkZWYgZ2V0X3Rhc2toYXNoKHNlbGYsIGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpOgorICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgIGRhdGEgPSBkYXRhQ2FjaGUuYmFzZXRhc2toYXNoW2tdCisgICAgICAgIHNlbGYucnVudGFza2RlcHNba10gPSBbXQorICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzW2tdID0ge30KKyAgICAgICAgcmVjaXBlbmFtZSA9IGRhdGFDYWNoZS5wa2dfZm5bZm5dCisgICAgICAgIGZvciBkZXAgaW4gc29ydGVkKGRlcHMsIGtleT1jbGVhbl9iYXNlcGF0aCk6CisgICAgICAgICAgICBkZXBuYW1lID0gZGF0YUNhY2hlLnBrZ19mbltzZWxmLnBrZ25hbWVleHRyYWN0LnNlYXJjaChkZXApLmdyb3VwKCdmbicpXQorICAgICAgICAgICAgaWYgbm90IHNlbGYucnVuZGVwX2NoZWNrKGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJXMgaXMgbm90IGluIHRhc2toYXNoLCBjYWxsZXIgaXNuJ3QgY2FsbGluZyBpbiBkZXBlbmRlbmN5IG9yZGVyPyIsIGRlcCkKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc2VsZi50YXNraGFzaFtkZXBdCisgICAgICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzW2tdLmFwcGVuZChkZXApCisKKyAgICAgICAgaWYgdGFzayBpbiBkYXRhQ2FjaGUuZmlsZV9jaGVja3N1bXNbZm5dOgorICAgICAgICAgICAgY2hlY2tzdW1zID0gYmIuZmV0Y2gyLmdldF9maWxlX2NoZWNrc3VtcyhkYXRhQ2FjaGUuZmlsZV9jaGVja3N1bXNbZm5dW3Rhc2tdLCByZWNpcGVuYW1lKQorICAgICAgICAgICAgZm9yIChmLGNzKSBpbiBjaGVja3N1bXM6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlc1trXVtmXSA9IGNzCisgICAgICAgICAgICAgICAgaWYgY3M6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgY3MKKworICAgICAgICB0YXNrZGVwID0gZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgaWYgJ25vc3RhbXAnIGluIHRhc2tkZXAgYW5kIHRhc2sgaW4gdGFza2RlcFsnbm9zdGFtcCddOgorICAgICAgICAgICAgIyBOb3N0YW1wIHRhc2tzIG5lZWQgYW4gaW1wbGljaXQgdGFpbnQgc28gdGhhdCB0aGV5IGZvcmNlIGFueSBkZXBlbmRlbnQgdGFza3MgdG8gcnVuCisgICAgICAgICAgICBpbXBvcnQgdXVpZAorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzdHIodXVpZC51dWlkNCgpKQorCisgICAgICAgIHRhaW50ID0gc2VsZi5yZWFkX3RhaW50KGZuLCB0YXNrLCBkYXRhQ2FjaGUuc3RhbXBbZm5dKQorICAgICAgICBpZiB0YWludDoKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgdGFpbnQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCIlcyBpcyB0YWludGVkIGZyb20gYSBmb3JjZWQgcnVuIiAlIGspCisKKyAgICAgICAgaCA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYudGFza2hhc2hba10gPSBoCisgICAgICAgICNkLnNldFZhcigiQkJfVEFTS0hBU0hfdGFzay0lcyIgJSB0YXNrLCB0YXNraGFzaFt0YXNrXSkKKyAgICAgICAgcmV0dXJuIGgKKworICAgIGRlZiBkdW1wX3NpZ3Rhc2soc2VsZiwgZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSk6CisgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgaWYgcnVudGltZSA9PSAiY3VzdG9tZmlsZSI6CisgICAgICAgICAgICBzaWdmaWxlID0gc3RhbXBiYXNlCisgICAgICAgIGVsaWYgcnVudGltZSBhbmQgayBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgc2lnZmlsZSA9IHN0YW1wYmFzZSArICIuIiArIHRhc2sgKyAiLnNpZ2RhdGEiICsgIi4iICsgc2VsZi50YXNraGFzaFtrXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2lnZmlsZSA9IHN0YW1wYmFzZSArICIuIiArIHRhc2sgKyAiLnNpZ2Jhc2VkYXRhIiArICIuIiArIHNlbGYuYmFzZWhhc2hba10KKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHNpZ2ZpbGUpKQorCisgICAgICAgIGRhdGEgPSB7fQorICAgICAgICBkYXRhWydiYXNld2hpdGVsaXN0J10gPSBzZWxmLmJhc2V3aGl0ZWxpc3QKKyAgICAgICAgZGF0YVsndGFza3doaXRlbGlzdCddID0gc2VsZi50YXNrd2hpdGVsaXN0CisgICAgICAgIGRhdGFbJ3Rhc2tkZXBzJ10gPSBzZWxmLnRhc2tkZXBzW2ZuXVt0YXNrXQorICAgICAgICBkYXRhWydiYXNlaGFzaCddID0gc2VsZi5iYXNlaGFzaFtrXQorICAgICAgICBkYXRhWydnZW5kZXBzJ10gPSB7fQorICAgICAgICBkYXRhWyd2YXJ2YWxzJ10gPSB7fQorICAgICAgICBkYXRhWyd2YXJ2YWxzJ11bdGFza10gPSBzZWxmLmxvb2t1cGNhY2hlW2ZuXVt0YXNrXQorICAgICAgICBmb3IgZGVwIGluIHNlbGYudGFza2RlcHNbZm5dW3Rhc2tdOgorICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuYmFzZXdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGF0YVsnZ2VuZGVwcyddW2RlcF0gPSBzZWxmLmdlbmRlcHNbZm5dW2RlcF0KKyAgICAgICAgICAgIGRhdGFbJ3ZhcnZhbHMnXVtkZXBdID0gc2VsZi5sb29rdXBjYWNoZVtmbl1bZGVwXQorCisgICAgICAgIGlmIHJ1bnRpbWUgYW5kIGsgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgIGRhdGFbJ3J1bnRhc2tkZXBzJ10gPSBzZWxmLnJ1bnRhc2tkZXBzW2tdCisgICAgICAgICAgICBkYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddID0gWyhvcy5wYXRoLmJhc2VuYW1lKGYpLCBjcykgZm9yIGYsY3MgaW4gc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlc1trXS5pdGVtcygpXQorICAgICAgICAgICAgZGF0YVsncnVudGFza2hhc2hlcyddID0ge30KKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGF0YVsncnVudGFza2RlcHMnXToKKyAgICAgICAgICAgICAgICBkYXRhWydydW50YXNraGFzaGVzJ11bZGVwXSA9IHNlbGYudGFza2hhc2hbZGVwXQorCisgICAgICAgIHRhaW50ID0gc2VsZi5yZWFkX3RhaW50KGZuLCB0YXNrLCBzdGFtcGJhc2UpCisgICAgICAgIGlmIHRhaW50OgorICAgICAgICAgICAgZGF0YVsndGFpbnQnXSA9IHRhaW50CisKKyAgICAgICAgZmQsIHRtcGZpbGUgPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1vcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSksIHByZWZpeD0ic2lndGFzay4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9zLmZkb3BlbihmZCwgIndiIikgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcChkYXRhLCBzdHJlYW0sIC0xKQorICAgICAgICAgICAgICAgIHN0cmVhbS5mbHVzaCgpCisgICAgICAgICAgICBvcy5jaG1vZCh0bXBmaWxlLCAwNjY0KQorICAgICAgICAgICAgb3MucmVuYW1lKHRtcGZpbGUsIHNpZ2ZpbGUpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmFpc2UgZXJyCisKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6CisgICAgICAgIGZvciBmbiBpbiBzZWxmLnRhc2tkZXBzOgorICAgICAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi50YXNrZGVwc1tmbl06CisgICAgICAgICAgICAgICAgayA9IGZuICsgIi4iICsgdGFzaworICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYudGFza2hhc2g6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZGF0YUNhY2hlLmJhc2V0YXNraGFzaFtrXSAhPSBzZWxmLmJhc2VoYXNoW2tdOgorICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigiQml0YmFrZSdzIGNhY2hlZCBiYXNlaGFzaCBkb2VzIG5vdCBtYXRjaCB0aGUgb25lIHdlIGp1c3QgZ2VuZXJhdGVkICglcykhIiAlIGspCisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJUaGUgbWlzbWF0Y2hlZCBoYXNoZXMgd2VyZSAlcyBhbmQgJXMiICUgKGRhdGFDYWNoZS5iYXNldGFza2hhc2hba10sIHNlbGYuYmFzZWhhc2hba10pKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtcF9zaWd0YXNrKGZuLCB0YXNrLCBkYXRhQ2FjaGUuc3RhbXBbZm5dLCBUcnVlKQorCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2goU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMpOgorICAgIG5hbWUgPSAiYmFzaWNoYXNoIgorCisgICAgZGVmIHN0YW1wZmlsZShzZWxmLCBzdGFtcGJhc2UsIGZuLCB0YXNrbmFtZSwgZXh0cmFpbmZvLCBjbGVhbj1GYWxzZSk6CisgICAgICAgIGlmIHRhc2tuYW1lICE9ICJkb19zZXRzY2VuZSIgYW5kIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2tuYW1lWzotOV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2tuYW1lCisgICAgICAgIGlmIGNsZWFuOgorICAgICAgICAgICAgaCA9ICIqIgorICAgICAgICBlbGlmIGsgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgIGggPSBzZWxmLnRhc2toYXNoW2tdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIGsgaXMgbm90IGluIGJhc2VoYXNoLCB0aGVuIGVycm9yCisgICAgICAgICAgICBoID0gc2VsZi5iYXNlaGFzaFtrXQorICAgICAgICByZXR1cm4gKCIlcy4lcy4lcy4lcyIgJSAoc3RhbXBiYXNlLCB0YXNrbmFtZSwgaCwgZXh0cmFpbmZvKSkucnN0cmlwKCcuJykKKworICAgIGRlZiBzdGFtcGNsZWFubWFzayhzZWxmLCBzdGFtcGJhc2UsIGZuLCB0YXNrbmFtZSwgZXh0cmFpbmZvKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhbXBmaWxlKHN0YW1wYmFzZSwgZm4sIHRhc2tuYW1lLCBleHRyYWluZm8sIGNsZWFuPVRydWUpCisgICAgICAgIAorICAgIGRlZiBpbnZhbGlkYXRlX3Rhc2soc2VsZiwgdGFzaywgZCwgZm4pOgorICAgICAgICBiYi5ub3RlKCJUYWludGluZyBoYXNoIHRvIGZvcmNlIHJlYnVpbGQgb2YgdGFzayAlcywgJXMiICUgKGZuLCB0YXNrKSkKKyAgICAgICAgYmIuYnVpbGQud3JpdGVfdGFpbnQodGFzaywgZCwgZm4pCisKK2RlZiBkdW1wX3RoaXNfdGFzayhvdXRmaWxlLCBkKToKKyAgICBpbXBvcnQgYmIucGFyc2UKKyAgICBmbiA9IGQuZ2V0VmFyKCJCQl9GSUxFTkFNRSIsIFRydWUpCisgICAgdGFzayA9ICJkb18iICsgZC5nZXRWYXIoIkJCX0NVUlJFTlRUQVNLIiwgVHJ1ZSkKKyAgICBiYi5wYXJzZS5zaWdnZW4uZHVtcF9zaWd0YXNrKGZuLCB0YXNrLCBvdXRmaWxlLCAiY3VzdG9tZmlsZSIpCisKK2RlZiBjbGVhbl9iYXNlcGF0aChhKToKKyAgICBiID0gYS5yc3BsaXQoIi8iLCAyKVsxXSArIGEucnNwbGl0KCIvIiwgMilbMl0KKyAgICBpZiBhLnN0YXJ0c3dpdGgoInZpcnR1YWw6Iik6CisgICAgICAgIGIgPSBiICsgIjoiICsgYS5yc3BsaXQoIjoiLCAxKVswXQorICAgIHJldHVybiBiCisKK2RlZiBjbGVhbl9iYXNlcGF0aHMoYSk6CisgICAgYiA9IHt9CisgICAgZm9yIHggaW4gYToKKyAgICAgICAgYltjbGVhbl9iYXNlcGF0aCh4KV0gPSBhW3hdCisgICAgcmV0dXJuIGIKKworZGVmIGNsZWFuX2Jhc2VwYXRoc19saXN0KGEpOgorICAgIGIgPSBbXQorICAgIGZvciB4IGluIGE6CisgICAgICAgIGIuYXBwZW5kKGNsZWFuX2Jhc2VwYXRoKHgpKQorICAgIHJldHVybiBiCisKK2RlZiBjb21wYXJlX3NpZ2ZpbGVzKGEsIGIsIHJlY3Vyc2VjYiA9IE5vbmUpOgorICAgIG91dHB1dCA9IFtdCisKKyAgICBwMSA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihhLCAicmIiKSkKKyAgICBhX2RhdGEgPSBwMS5sb2FkKCkKKyAgICBwMiA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihiLCAicmIiKSkKKyAgICBiX2RhdGEgPSBwMi5sb2FkKCkKKworICAgIGRlZiBkaWN0X2RpZmYoYSwgYiwgd2hpdGVsaXN0PXNldCgpKToKKyAgICAgICAgc2EgPSBzZXQoYS5rZXlzKCkpCisgICAgICAgIHNiID0gc2V0KGIua2V5cygpKQorICAgICAgICBjb21tb24gPSBzYSAmIHNiCisgICAgICAgIGNoYW5nZWQgPSBzZXQoKQorICAgICAgICBmb3IgaSBpbiBjb21tb246CisgICAgICAgICAgICBpZiBhW2ldICE9IGJbaV0gYW5kIGkgbm90IGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBjaGFuZ2VkLmFkZChpKQorICAgICAgICBhZGRlZCA9IHNiIC0gc2EKKyAgICAgICAgcmVtb3ZlZCA9IHNhIC0gc2IKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkCisKKyAgICBkZWYgZmlsZV9jaGVja3N1bXNfZGlmZihhLCBiKToKKyAgICAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgorICAgICAgICAjIEhhbmRsZSBvbGQgc2lnaW5mbyBmb3JtYXQKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBkaWN0KToKKyAgICAgICAgICAgIGEgPSBbKG9zLnBhdGguYmFzZW5hbWUoZiksIGNzKSBmb3IgZiwgY3MgaW4gYS5pdGVtcygpXQorICAgICAgICBpZiBpc2luc3RhbmNlKGIsIGRpY3QpOgorICAgICAgICAgICAgYiA9IFsob3MucGF0aC5iYXNlbmFtZShmKSwgY3MpIGZvciBmLCBjcyBpbiBiLml0ZW1zKCldCisgICAgICAgICMgQ29tcGFyZSBsaXN0cywgZW5zdXJpbmcgd2UgY2FuIGhhbmRsZSBkdXBsaWNhdGUgZmlsZW5hbWVzIGlmIHRoZXkgZXhpc3QKKyAgICAgICAgcmVtb3ZlZGNvdW50ID0gQ291bnRlcihhKQorICAgICAgICByZW1vdmVkY291bnQuc3VidHJhY3QoYikKKyAgICAgICAgYWRkZWRjb3VudCA9IENvdW50ZXIoYikKKyAgICAgICAgYWRkZWRjb3VudC5zdWJ0cmFjdChhKQorICAgICAgICBhZGRlZCA9IFtdCisgICAgICAgIGZvciB4IGluIGI6CisgICAgICAgICAgICBpZiBhZGRlZGNvdW50W3hdID4gMDoKKyAgICAgICAgICAgICAgICBhZGRlZGNvdW50W3hdIC09IDEKKyAgICAgICAgICAgICAgICBhZGRlZC5hcHBlbmQoeCkKKyAgICAgICAgcmVtb3ZlZCA9IFtdCisgICAgICAgIGNoYW5nZWQgPSBbXQorICAgICAgICBmb3IgeCBpbiBhOgorICAgICAgICAgICAgaWYgcmVtb3ZlZGNvdW50W3hdID4gMDoKKyAgICAgICAgICAgICAgICByZW1vdmVkY291bnRbeF0gLT0gMQorICAgICAgICAgICAgICAgIGZvciB5IGluIGFkZGVkOgorICAgICAgICAgICAgICAgICAgICBpZiB5WzBdID09IHhbMF06CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkLmFwcGVuZCgoeFswXSwgeFsxXSwgeVsxXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZC5yZW1vdmUoeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5hcHBlbmQoeCkKKyAgICAgICAgYWRkZWQgPSBbeFswXSBmb3IgeCBpbiBhZGRlZF0KKyAgICAgICAgcmVtb3ZlZCA9IFt4WzBdIGZvciB4IGluIHJlbW92ZWRdCisgICAgICAgIHJldHVybiBjaGFuZ2VkLCBhZGRlZCwgcmVtb3ZlZAorCisgICAgaWYgJ2Jhc2V3aGl0ZWxpc3QnIGluIGFfZGF0YSBhbmQgYV9kYXRhWydiYXNld2hpdGVsaXN0J10gIT0gYl9kYXRhWydiYXNld2hpdGVsaXN0J106CisgICAgICAgIG91dHB1dC5hcHBlbmQoImJhc2V3aGl0ZWxpc3QgY2hhbmdlZCBmcm9tICclcycgdG8gJyVzJyIgJSAoYV9kYXRhWydiYXNld2hpdGVsaXN0J10sIGJfZGF0YVsnYmFzZXdoaXRlbGlzdCddKSkKKyAgICAgICAgaWYgYV9kYXRhWydiYXNld2hpdGVsaXN0J10gYW5kIGJfZGF0YVsnYmFzZXdoaXRlbGlzdCddOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiY2hhbmdlZCBpdGVtczogJXMiICUgYV9kYXRhWydiYXNld2hpdGVsaXN0J10uc3ltbWV0cmljX2RpZmZlcmVuY2UoYl9kYXRhWydiYXNld2hpdGVsaXN0J10pKQorCisgICAgaWYgJ3Rhc2t3aGl0ZWxpc3QnIGluIGFfZGF0YSBhbmQgYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10gIT0gYl9kYXRhWyd0YXNrd2hpdGVsaXN0J106CisgICAgICAgIG91dHB1dC5hcHBlbmQoInRhc2t3aGl0ZWxpc3QgY2hhbmdlZCBmcm9tICclcycgdG8gJyVzJyIgJSAoYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10sIGJfZGF0YVsndGFza3doaXRlbGlzdCddKSkKKyAgICAgICAgaWYgYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10gYW5kIGJfZGF0YVsndGFza3doaXRlbGlzdCddOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiY2hhbmdlZCBpdGVtczogJXMiICUgYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10uc3ltbWV0cmljX2RpZmZlcmVuY2UoYl9kYXRhWyd0YXNrd2hpdGVsaXN0J10pKQorCisgICAgaWYgYV9kYXRhWyd0YXNrZGVwcyddICE9IGJfZGF0YVsndGFza2RlcHMnXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGFzayBkZXBlbmRlbmNpZXMgY2hhbmdlZCBmcm9tOlxuJXNcbnRvOlxuJXMiICUgKHNvcnRlZChhX2RhdGFbJ3Rhc2tkZXBzJ10pLCBzb3J0ZWQoYl9kYXRhWyd0YXNrZGVwcyddKSkpCisKKyAgICBpZiBhX2RhdGFbJ2Jhc2VoYXNoJ10gIT0gYl9kYXRhWydiYXNlaGFzaCddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJiYXNlaGFzaCBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGFfZGF0YVsnYmFzZWhhc2gnXSwgYl9kYXRhWydiYXNlaGFzaCddKSkKKworICAgIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkID0gZGljdF9kaWZmKGFfZGF0YVsnZ2VuZGVwcyddLCBiX2RhdGFbJ2dlbmRlcHMnXSwgYV9kYXRhWydiYXNld2hpdGVsaXN0J10gJiBiX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSkKKyAgICBpZiBjaGFuZ2VkOgorICAgICAgICBmb3IgZGVwIGluIGNoYW5nZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJMaXN0IG9mIGRlcGVuZGVuY2llcyBmb3IgdmFyaWFibGUgJXMgY2hhbmdlZCBmcm9tICclcycgdG8gJyVzJyIgJSAoZGVwLCBhX2RhdGFbJ2dlbmRlcHMnXVtkZXBdLCBiX2RhdGFbJ2dlbmRlcHMnXVtkZXBdKSkKKyAgICAgICAgICAgIGlmIGFfZGF0YVsnZ2VuZGVwcyddW2RlcF0gYW5kIGJfZGF0YVsnZ2VuZGVwcyddW2RlcF06CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiY2hhbmdlZCBpdGVtczogJXMiICUgYV9kYXRhWydnZW5kZXBzJ11bZGVwXS5zeW1tZXRyaWNfZGlmZmVyZW5jZShiX2RhdGFbJ2dlbmRlcHMnXVtkZXBdKSkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgZm9yIGRlcCBpbiBhZGRlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gdmFyaWFibGUgJXMgd2FzIGFkZGVkIiAlIChkZXApKQorICAgIGlmIHJlbW92ZWQ6CisgICAgICAgIGZvciBkZXAgaW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gVmFyaWFibGUgJXMgd2FzIHJlbW92ZWQiICUgKGRlcCkpCisKKworICAgIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkID0gZGljdF9kaWZmKGFfZGF0YVsndmFydmFscyddLCBiX2RhdGFbJ3ZhcnZhbHMnXSkKKyAgICBpZiBjaGFuZ2VkOgorICAgICAgICBmb3IgZGVwIGluIGNoYW5nZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJWYXJpYWJsZSAlcyB2YWx1ZSBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChkZXAsIGFfZGF0YVsndmFydmFscyddW2RlcF0sIGJfZGF0YVsndmFydmFscyddW2RlcF0pKQorCisgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBmaWxlX2NoZWNrc3Vtc19kaWZmKGFfZGF0YVsnZmlsZV9jaGVja3N1bV92YWx1ZXMnXSwgYl9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIGZvciBmLCBvbGQsIG5ldyBpbiBjaGFuZ2VkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiQ2hlY2tzdW0gZm9yIGZpbGUgJXMgY2hhbmdlZCBmcm9tICVzIHRvICVzIiAlIChmLCBvbGQsIG5ldykpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIGZvciBmIGluIGFkZGVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiBjaGVja3N1bSBvZiBmaWxlICVzIHdhcyBhZGRlZCIgJSAoZikpCisgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgZm9yIGYgaW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gY2hlY2tzdW0gb2YgZmlsZSAlcyB3YXMgcmVtb3ZlZCIgJSAoZikpCisKKworICAgIGlmIGxlbihhX2RhdGFbJ3J1bnRhc2tkZXBzJ10pICE9IGxlbihiX2RhdGFbJ3J1bnRhc2tkZXBzJ10pOgorICAgICAgICBjaGFuZ2VkID0gWyJOdW1iZXIgb2YgdGFzayBkZXBlbmRlbmNpZXMgY2hhbmdlZCJdCisgICAgZWxzZToKKyAgICAgICAgY2hhbmdlZCA9IFtdCisgICAgICAgIGZvciBpZHgsIHRhc2sgaW4gZW51bWVyYXRlKGFfZGF0YVsncnVudGFza2RlcHMnXSk6CisgICAgICAgICAgICBhID0gYV9kYXRhWydydW50YXNrZGVwcyddW2lkeF0KKyAgICAgICAgICAgIGIgPSBiX2RhdGFbJ3J1bnRhc2tkZXBzJ11baWR4XQorICAgICAgICAgICAgaWYgYV9kYXRhWydydW50YXNraGFzaGVzJ11bYV0gIT0gYl9kYXRhWydydW50YXNraGFzaGVzJ11bYl06CisgICAgICAgICAgICAgICAgY2hhbmdlZC5hcHBlbmQoIiVzIHdpdGggaGFzaCAlc1xuIGNoYW5nZWQgdG9cbiVzIHdpdGggaGFzaCAlcyIgJSAoYSwgYV9kYXRhWydydW50YXNraGFzaGVzJ11bYV0sIGIsIGJfZGF0YVsncnVudGFza2hhc2hlcyddW2JdKSkKKworICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIG91dHB1dC5hcHBlbmQoInJ1bnRhc2tkZXBzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyIgJSAoY2xlYW5fYmFzZXBhdGhzX2xpc3QoYV9kYXRhWydydW50YXNrZGVwcyddKSwgY2xlYW5fYmFzZXBhdGhzX2xpc3QoYl9kYXRhWydydW50YXNrZGVwcyddKSkpCisgICAgICAgIG91dHB1dC5hcHBlbmQoIlxuIi5qb2luKGNoYW5nZWQpKQorCisKKyAgICBpZiAncnVudGFza2hhc2hlcycgaW4gYV9kYXRhIGFuZCAncnVudGFza2hhc2hlcycgaW4gYl9kYXRhOgorICAgICAgICBhID0gYV9kYXRhWydydW50YXNraGFzaGVzJ10KKyAgICAgICAgYiA9IGJfZGF0YVsncnVudGFza2hhc2hlcyddCisgICAgICAgIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkID0gZGljdF9kaWZmKGEsIGIpCisgICAgICAgIGlmIGFkZGVkOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBhZGRlZDoKKyAgICAgICAgICAgICAgICBiZGVwX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiByZW1vdmVkOgorICAgICAgICAgICAgICAgICAgICBmb3IgYmRlcCBpbiByZW1vdmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYltkZXBdID09IGFbYmRlcF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI291dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gdGFzayAlcyB3YXMgcmVwbGFjZWQgYnkgJXMgd2l0aCBzYW1lIGhhc2giICUgKGRlcCwgYmRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmRlcF9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBub3QgYmRlcF9mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyBhZGRlZCB3aXRoIGhhc2ggJXMiICUgKGNsZWFuX2Jhc2VwYXRoKGRlcCksIGJbZGVwXSkpCisgICAgICAgIGlmIHJlbW92ZWQ6CisgICAgICAgICAgICBmb3IgZGVwIGluIHJlbW92ZWQ6CisgICAgICAgICAgICAgICAgYWRlcF9mb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgIGZvciBhZGVwIGluIGFkZGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYlthZGVwXSA9PSBhW2RlcF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI291dHB1dC5hcHBlbmQoIkRlcGVuZGVuY3kgb24gdGFzayAlcyB3YXMgcmVwbGFjZWQgYnkgJXMgd2l0aCBzYW1lIGhhc2giICUgKGFkZXAsIGRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRlcF9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBub3QgYWRlcF9mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyByZW1vdmVkIHdpdGggaGFzaCAlcyIgJSAoY2xlYW5fYmFzZXBhdGgoZGVwKSwgYVtkZXBdKSkKKyAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gY2hhbmdlZDoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJIYXNoIGZvciBkZXBlbmRlbnQgdGFzayAlcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGNsZWFuX2Jhc2VwYXRoKGRlcCksIGFbZGVwXSwgYltkZXBdKSkKKyAgICAgICAgICAgICAgICBpZiBjYWxsYWJsZShyZWN1cnNlY2IpOgorICAgICAgICAgICAgICAgICAgICAjIElmIGEgZGVwZW5kZW50IGhhc2ggY2hhbmdlZCwgbWlnaHQgYXMgd2VsbCBwcmludCB0aGUgbGluZSBhYm92ZSBhbmQgdGhlbiBkZWZlciB0byB0aGUgY2hhbmdlcyBpbiAKKyAgICAgICAgICAgICAgICAgICAgIyB0aGF0IGhhc2ggc2luY2UgaW4gYWxsIGxpa2VseWhvb2QsIHRoZXkncmUgdGhlIHNhbWUgY2hhbmdlcyB0aGlzIHRhc2sgYWxzbyBzYXcuCisgICAgICAgICAgICAgICAgICAgIHJlY291dCA9IHJlY3Vyc2VjYihkZXAsIGFbZGVwXSwgYltkZXBdKQorICAgICAgICAgICAgICAgICAgICBpZiByZWNvdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBbb3V0cHV0Wy0xXV0gKyByZWNvdXQKKworICAgIGFfdGFpbnQgPSBhX2RhdGEuZ2V0KCd0YWludCcsIE5vbmUpCisgICAgYl90YWludCA9IGJfZGF0YS5nZXQoJ3RhaW50JywgTm9uZSkKKyAgICBpZiBhX3RhaW50ICE9IGJfdGFpbnQ6CisgICAgICAgIG91dHB1dC5hcHBlbmQoIlRhaW50IChieSBmb3JjZWQvaW52YWxpZGF0ZWQgdGFzaykgY2hhbmdlZCBmcm9tICVzIHRvICVzIiAlIChhX3RhaW50LCBiX3RhaW50KSkKKworICAgIHJldHVybiBvdXRwdXQKKworCitkZWYgZHVtcF9zaWdmaWxlKGEpOgorICAgIG91dHB1dCA9IFtdCisKKyAgICBwMSA9IHBpY2tsZS5VbnBpY2tsZXIob3BlbihhLCAicmIiKSkKKyAgICBhX2RhdGEgPSBwMS5sb2FkKCkKKworICAgIG91dHB1dC5hcHBlbmQoImJhc2V3aGl0ZWxpc3Q6ICVzIiAlIChhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSkpCisKKyAgICBvdXRwdXQuYXBwZW5kKCJ0YXNrd2hpdGVsaXN0OiAlcyIgJSAoYV9kYXRhWyd0YXNrd2hpdGVsaXN0J10pKQorCisgICAgb3V0cHV0LmFwcGVuZCgiVGFzayBkZXBlbmRlbmNpZXM6ICVzIiAlIChzb3J0ZWQoYV9kYXRhWyd0YXNrZGVwcyddKSkpCisKKyAgICBvdXRwdXQuYXBwZW5kKCJiYXNlaGFzaDogJXMiICUgKGFfZGF0YVsnYmFzZWhhc2gnXSkpCisKKyAgICBmb3IgZGVwIGluIGFfZGF0YVsnZ2VuZGVwcyddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJMaXN0IG9mIGRlcGVuZGVuY2llcyBmb3IgdmFyaWFibGUgJXMgaXMgJXMiICUgKGRlcCwgYV9kYXRhWydnZW5kZXBzJ11bZGVwXSkpCisKKyAgICBmb3IgZGVwIGluIGFfZGF0YVsndmFydmFscyddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJWYXJpYWJsZSAlcyB2YWx1ZSBpcyAlcyIgJSAoZGVwLCBhX2RhdGFbJ3ZhcnZhbHMnXVtkZXBdKSkKKworICAgIGlmICdydW50YXNrZGVwcycgaW4gYV9kYXRhOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUYXNrcyB0aGlzIHRhc2sgZGVwZW5kcyBvbjogJXMiICUgKGFfZGF0YVsncnVudGFza2RlcHMnXSkpCisKKyAgICBpZiAnZmlsZV9jaGVja3N1bV92YWx1ZXMnIGluIGFfZGF0YToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGhpcyB0YXNrIGRlcGVuZHMgb24gdGhlIGNoZWNrc3VtcyBvZiBmaWxlczogJXMiICUgKGFfZGF0YVsnZmlsZV9jaGVja3N1bV92YWx1ZXMnXSkpCisKKyAgICBpZiAncnVudGFza2hhc2hlcycgaW4gYV9kYXRhOgorICAgICAgICBmb3IgZGVwIGluIGFfZGF0YVsncnVudGFza2hhc2hlcyddOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiSGFzaCBmb3IgZGVwZW5kZW50IHRhc2sgJXMgaXMgJXMiICUgKGRlcCwgYV9kYXRhWydydW50YXNraGFzaGVzJ11bZGVwXSkpCisKKyAgICBpZiAndGFpbnQnIGluIGFfZGF0YToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGFpbnRlZCAoYnkgZm9yY2VkL2ludmFsaWRhdGVkIHRhc2spOiAlcyIgJSBhX2RhdGFbJ3RhaW50J10pCisKKyAgICBkYXRhID0gYV9kYXRhWydiYXNlaGFzaCddCisgICAgZm9yIGRlcCBpbiBhX2RhdGFbJ3J1bnRhc2tkZXBzJ106CisgICAgICAgIGRhdGEgPSBkYXRhICsgYV9kYXRhWydydW50YXNraGFzaGVzJ11bZGVwXQorCisgICAgZm9yIGMgaW4gYV9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddOgorICAgICAgICBkYXRhID0gZGF0YSArIGNbMV0KKworICAgIGlmICd0YWludCcgaW4gYV9kYXRhOgorICAgICAgICBkYXRhID0gZGF0YSArIGFfZGF0YVsndGFpbnQnXQorCisgICAgaCA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisgICAgb3V0cHV0LmFwcGVuZCgiQ29tcHV0ZWQgSGFzaCBpcyAlcyIgJSBoKQorCisgICAgcmV0dXJuIG91dHB1dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGFza2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhYjcwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGFza2RhdGEucHkKQEAgLTAsMCArMSw2NTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnVGFza0RhdGEnIGltcGxlbWVudGF0aW9uCisKK1Rhc2sgZGF0YSBjb2xsZWN0aW9uIGFuZCBoYW5kbGluZworCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDYgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgYmIKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuVGFza0RhdGEiKQorCitkZWYgcmVfbWF0Y2hfc3RyaW5ncyh0YXJnZXQsIHN0cmluZ3MpOgorICAgICIiIgorICAgIFdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgJ3RhcmdldCcgbWF0Y2hlcworICAgIGFueSBvbmUgc3RyaW5nIG9mIHRoZSBzdHJpbmdzIHdoaWNoIGNhbiBiZSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nCisgICAgIiIiCisgICAgcmV0dXJuIGFueShuYW1lID09IHRhcmdldCBvciByZS5tYXRjaChuYW1lLCB0YXJnZXQpCisgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzdHJpbmdzKQorCitjbGFzcyBUYXNrRGF0YToKKyAgICAiIiIKKyAgICBCaXRCYWtlIFRhc2sgRGF0YSBpbXBsZW1lbnRhdGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhYm9ydCA9IFRydWUsIHRyeWFsdGNvbmZpZ3MgPSBGYWxzZSwgc2tpcGxpc3QgPSBOb25lLCBhbGxvd2luY29tcGxldGUgPSBGYWxzZSk6CisgICAgICAgIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXggPSBbXQorICAgICAgICBzZWxmLnJ1bl9uYW1lc19pbmRleCA9IFtdCisgICAgICAgIHNlbGYuZm5faW5kZXggPSBbXQorCisgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0cyA9IHt9CisgICAgICAgIHNlbGYucnVuX3RhcmdldHMgPSB7fQorCisgICAgICAgIHNlbGYuZXh0ZXJuYWxfdGFyZ2V0cyA9IFtdCisKKyAgICAgICAgc2VsZi50YXNrc19mbmlkID0gW10KKyAgICAgICAgc2VsZi50YXNrc19uYW1lID0gW10KKyAgICAgICAgc2VsZi50YXNrc190ZGVwZW5kcyA9IFtdCisgICAgICAgIHNlbGYudGFza3NfaWRlcGVuZHMgPSBbXQorICAgICAgICBzZWxmLnRhc2tzX2lyZGVwZW5kcyA9IFtdCisgICAgICAgICMgQ2FjaGUgdG8gc3BlZWQgdXAgdGFzayBJRCBsb29rdXBzCisgICAgICAgIHNlbGYudGFza3NfbG9va3VwID0ge30KKworICAgICAgICBzZWxmLmRlcGlkcyA9IHt9CisgICAgICAgIHNlbGYucmRlcGlkcyA9IHt9CisKKyAgICAgICAgc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlID0gW10KKworICAgICAgICBzZWxmLmZhaWxlZF9kZXBzID0gW10KKyAgICAgICAgc2VsZi5mYWlsZWRfcmRlcHMgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcyA9IFtdCisKKyAgICAgICAgc2VsZi5hYm9ydCA9IGFib3J0CisgICAgICAgIHNlbGYudHJ5YWx0Y29uZmlncyA9IHRyeWFsdGNvbmZpZ3MKKyAgICAgICAgc2VsZi5hbGxvd2luY29tcGxldGUgPSBhbGxvd2luY29tcGxldGUKKworICAgICAgICBzZWxmLnNraXBsaXN0ID0gc2tpcGxpc3QKKworICAgIGRlZiBnZXRidWlsZF9pZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSBidWlsZCB0YXJnZXQgbmFtZS4KKyAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXg6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX25hbWVzX2luZGV4LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmJ1aWxkX25hbWVzX2luZGV4KSAtIDEKKworICAgICAgICByZXR1cm4gc2VsZi5idWlsZF9uYW1lc19pbmRleC5pbmRleChuYW1lKQorCisgICAgZGVmIGdldHJ1bl9pZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSBydW4gdGFyZ2V0IG5hbWUuCisgICAgICAgIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgbmFtZSBpbiBzZWxmLnJ1bl9uYW1lc19pbmRleDoKKyAgICAgICAgICAgIHNlbGYucnVuX25hbWVzX2luZGV4LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnJ1bl9uYW1lc19pbmRleCkgLSAxCisKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX25hbWVzX2luZGV4LmluZGV4KG5hbWUpCisKKyAgICBkZWYgZ2V0Zm5faWQoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYW4gSUQgbnVtYmVyIGZvciB0aGUgZmlsZW5hbWUuCisgICAgICAgIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgbmFtZSBpbiBzZWxmLmZuX2luZGV4OgorICAgICAgICAgICAgc2VsZi5mbl9pbmRleC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5mbl9pbmRleCkgLSAxCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZm5faW5kZXguaW5kZXgobmFtZSkKKworICAgIGRlZiBnZXR0YXNrX2lkcyhzZWxmLCBmbmlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBhcnJheSBvZiB0aGUgSUQgbnVtYmVycyBtYXRjaGluZyBhIGdpdmVuIGZuaWQuCisgICAgICAgICIiIgorICAgICAgICBpZHMgPSBbXQorICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfbG9va3VwOgorICAgICAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi50YXNrc19sb29rdXBbZm5pZF06CisgICAgICAgICAgICAgICAgaWRzLmFwcGVuZChzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXVt0YXNrXSkKKyAgICAgICAgcmV0dXJuIGlkcworCisgICAgZGVmIGdldHRhc2tfaWRfZnJvbWZuaWQoc2VsZiwgZm5pZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYW4gSUQgbnVtYmVyIGZvciB0aGUgdGFzayBtYXRjaGluZyBmbmlkIGFuZCB0YXNrLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnRhc2tzX2xvb2t1cDoKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi50YXNrc19sb29rdXBbZm5pZF06CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXR0YXNrX2lkKHNlbGYsIGZuLCB0YXNrLCBjcmVhdGUgPSBUcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSB0YXNrIG1hdGNoaW5nIGZuIGFuZCB0YXNrLgorICAgICAgICBJZiBpdCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgb25lIGJ5IGRlZmF1bHQuCisgICAgICAgIE9wdGlvbmFsbHkgcmV0dXJuIE5vbmUgaW5zdGVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi50YXNrc19sb29rdXA6CisgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXVt0YXNrXQorCisgICAgICAgIGlmIG5vdCBjcmVhdGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHNlbGYudGFza3NfbmFtZS5hcHBlbmQodGFzaykKKyAgICAgICAgc2VsZi50YXNrc19mbmlkLmFwcGVuZChmbmlkKQorICAgICAgICBzZWxmLnRhc2tzX3RkZXBlbmRzLmFwcGVuZChbXSkKKyAgICAgICAgc2VsZi50YXNrc19pZGVwZW5kcy5hcHBlbmQoW10pCisgICAgICAgIHNlbGYudGFza3NfaXJkZXBlbmRzLmFwcGVuZChbXSkKKworICAgICAgICBsaXN0aWQgPSBsZW4oc2VsZi50YXNrc19uYW1lKSAtIDEKKworICAgICAgICBpZiBmbmlkIG5vdCBpbiBzZWxmLnRhc2tzX2xvb2t1cDoKKyAgICAgICAgICAgIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdID0ge30KKyAgICAgICAgc2VsZi50YXNrc19sb29rdXBbZm5pZF1bdGFza10gPSBsaXN0aWQKKworICAgICAgICByZXR1cm4gbGlzdGlkCisKKyAgICBkZWYgYWRkX3Rhc2tzKHNlbGYsIGZuLCBkYXRhQ2FjaGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRhc2tzIGZvciBhIGdpdmVuIGZuIHRvIHRoZSBkYXRhYmFzZQorICAgICAgICAiIiIKKworICAgICAgICB0YXNrX2RlcHMgPSBkYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIlRyeWluZyB0byByZS1hZGQgYSBmYWlsZWQgZmlsZT8gU29tZXRoaW5nIGlzIGJyb2tlbi4uLiIpCisKKyAgICAgICAgIyBDaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyBmbgorICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfZm5pZDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tfZGVwc1sndGFza3MnXToKKworICAgICAgICAgICAgIyBXb3JrIG91dCB0YXNrIGRlcGVuZGVuY2llcworICAgICAgICAgICAgcGFyZW50aWRzID0gW10KKyAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza19kZXBzWydwYXJlbnRzJ11bdGFza106CisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiB0YXNrX2RlcHNbJ3Rhc2tzJ106CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJOb3QgYWRkaW5nIGRlcGVuZGVueSBvZiAlcyBvbiAlcyBzaW5jZSAlcyBkb2VzIG5vdCBleGlzdCIgJSAodGFzaywgZGVwLCBkZXApKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBhcmVudGlkID0gc2VsZi5nZXR0YXNrX2lkKGZuLCBkZXApCisgICAgICAgICAgICAgICAgcGFyZW50aWRzLmFwcGVuZChwYXJlbnRpZCkKKyAgICAgICAgICAgIHRhc2tpZCA9IHNlbGYuZ2V0dGFza19pZChmbiwgdGFzaykKKyAgICAgICAgICAgIHNlbGYudGFza3NfdGRlcGVuZHNbdGFza2lkXS5leHRlbmQocGFyZW50aWRzKQorCisgICAgICAgICAgICAjIFRvdWNoIGFsbCBpbnRlcnRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiAnZGVwZW5kcycgaW4gdGFza19kZXBzIGFuZCB0YXNrIGluIHRhc2tfZGVwc1snZGVwZW5kcyddOgorICAgICAgICAgICAgICAgIGlkcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB0YXNrX2RlcHNbJ2RlcGVuZHMnXVt0YXNrXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAiOiIgbm90IGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIkVycm9yIGZvciAlcywgZGVwZW5kZW5jeSAlcyBkb2VzIG5vdCBjb250YWluICc6JyBjaGFyYWN0ZXJcbi4gVGFzayAnZGVwZW5kcycgc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSAncGFja2FnZW5hbWU6dGFzayciICUgKGZuLCBkZXApKQorICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmFwcGVuZCgoKHNlbGYuZ2V0YnVpbGRfaWQoZGVwLnNwbGl0KCI6IilbMF0pKSwgZGVwLnNwbGl0KCI6IilbMV0pKQorICAgICAgICAgICAgICAgIHNlbGYudGFza3NfaWRlcGVuZHNbdGFza2lkXS5leHRlbmQoaWRzKQorICAgICAgICAgICAgaWYgJ3JkZXBlbmRzJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2sgaW4gdGFza19kZXBzWydyZGVwZW5kcyddOgorICAgICAgICAgICAgICAgIGlkcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB0YXNrX2RlcHNbJ3JkZXBlbmRzJ11bdGFza10uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgIjoiIG5vdCBpbiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJUYXNrRGF0YSIsICJFcnJvciBmb3IgJXMsIGRlcGVuZGVuY3kgJXMgZG9lcyBub3QgY29udGFpbiAnOicgY2hhcmFjdGVyXG4uIFRhc2sgJ3JkZXBlbmRzJyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICdwYWNrYWdlbmFtZTp0YXNrJyIgJSAoZm4sIGRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKCgoc2VsZi5nZXRydW5faWQoZGVwLnNwbGl0KCI6IilbMF0pKSwgZGVwLnNwbGl0KCI6IilbMV0pKQorICAgICAgICAgICAgICAgIHNlbGYudGFza3NfaXJkZXBlbmRzW3Rhc2tpZF0uZXh0ZW5kKGlkcykKKworCisgICAgICAgICMgV29yayBvdXQgYnVpbGQgZGVwZW5kZW5jaWVzCisgICAgICAgIGlmIG5vdCBmbmlkIGluIHNlbGYuZGVwaWRzOgorICAgICAgICAgICAgZGVwZW5kaWRzID0ge30KKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGF0YUNhY2hlLmRlcHNbZm5dOgorICAgICAgICAgICAgICAgIGRlcGVuZGlkc1tzZWxmLmdldGJ1aWxkX2lkKGRlcGVuZCldID0gTm9uZQorICAgICAgICAgICAgc2VsZi5kZXBpZHNbZm5pZF0gPSBkZXBlbmRpZHMua2V5cygpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIGRlcGVuZGVuY2llcyAlcyBmb3IgJXMiLCBzdHIoZGF0YUNhY2hlLmRlcHNbZm5dKSwgZm4pCisKKyAgICAgICAgIyBXb3JrIG91dCBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICBpZiBub3QgZm5pZCBpbiBzZWxmLnJkZXBpZHM6CisgICAgICAgICAgICByZGVwZW5kaWRzID0ge30KKyAgICAgICAgICAgIHJkZXBlbmRzID0gZGF0YUNhY2hlLnJ1bmRlcHNbZm5dCisgICAgICAgICAgICBycmVjcyA9IGRhdGFDYWNoZS5ydW5yZWNzW2ZuXQorICAgICAgICAgICAgcmRlcGVuZGxpc3QgPSBbXQorICAgICAgICAgICAgcnJlY2xpc3QgPSBbXQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHNbcGFja2FnZV06CisgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRsaXN0LmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICByZGVwZW5kaWRzW3NlbGYuZ2V0cnVuX2lkKHJkZXBlbmQpXSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHJyZWNzOgorICAgICAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJyZWNzW3BhY2thZ2VdOgorICAgICAgICAgICAgICAgICAgICBycmVjbGlzdC5hcHBlbmQocmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmRlcGVuZGlkc1tzZWxmLmdldHJ1bl9pZChyZGVwZW5kKV0gPSBOb25lCisgICAgICAgICAgICBpZiByZGVwZW5kbGlzdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzICVzIGZvciAlcyIsIHN0cihyZGVwZW5kbGlzdCksIGZuKQorICAgICAgICAgICAgaWYgcnJlY2xpc3Q6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJBZGRlZCBydW50aW1lIHJlY29tbWVuZGF0aW9ucyAlcyBmb3IgJXMiLCBzdHIocnJlY2xpc3QpLCBmbikKKyAgICAgICAgICAgIHNlbGYucmRlcGlkc1tmbmlkXSA9IHJkZXBlbmRpZHMua2V5cygpCisKKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgIGlmIGRlcCBpbiBzZWxmLmZhaWxlZF9kZXBzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKGZuaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5yZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuZmFpbGVkX3JkZXBzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKGZuaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgaGF2ZV9idWlsZF90YXJnZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIEhhdmUgd2UgYSBidWlsZCB0YXJnZXQgbWF0Y2hpbmcgdGhpcyBuYW1lPworICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKHRhcmdldCkKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBoYXZlX3J1bnRpbWVfdGFyZ2V0KHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBIYXZlIHdlIGEgcnVudGltZSB0YXJnZXQgbWF0Y2hpbmcgdGhpcyBuYW1lPworICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldHJ1bl9pZCh0YXJnZXQpCisKKyAgICAgICAgaWYgdGFyZ2V0aWQgaW4gc2VsZi5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFkZF9idWlsZF90YXJnZXQoc2VsZiwgZm4sIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIGEgYnVpbGQgdGFyZ2V0LgorICAgICAgICBJZiBhbHJlYWR5IHByZXNlbnQsIGFwcGVuZCB0aGUgcHJvdmlkZXIgZm4gdG8gdGhlIGxpc3QKKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldGlkID0gc2VsZi5nZXRidWlsZF9pZChpdGVtKQorICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF06CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdLmFwcGVuZChmbmlkKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0gPSBbZm5pZF0KKworICAgIGRlZiBhZGRfcnVudGltZV90YXJnZXQoc2VsZiwgZm4sIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIGEgcnVudGltZSB0YXJnZXQuCisgICAgICAgIElmIGFscmVhZHkgcHJlc2VudCwgYXBwZW5kIHRoZSBwcm92aWRlciBmbiB0byB0aGUgbGlzdAorICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldHJ1bl9pZChpdGVtKQorICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnJ1bl90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0aWRdLmFwcGVuZChmbmlkKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0aWRdID0gW2ZuaWRdCisKKyAgICBkZWYgbWFya19leHRlcm5hbF90YXJnZXQoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgYnVpbGQgdGFyZ2V0IGFzIGJlaW5nIGV4dGVybmFsbHkgcmVxdWVzdGVkCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKKworICAgICAgICBpZiB0YXJnZXRpZCBub3QgaW4gc2VsZi5leHRlcm5hbF90YXJnZXRzOgorICAgICAgICAgICAgc2VsZi5leHRlcm5hbF90YXJnZXRzLmFwcGVuZCh0YXJnZXRpZCkKKworICAgIGRlZiBnZXRfdW5yZXNvbHZlZF9idWlsZF90YXJnZXRzKHNlbGYsIGRhdGFDYWNoZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIGJ1aWxkIHRhcmdldHMgd2hvJ3MgcHJvdmlkZXJzCisgICAgICAgIGFyZSB1bmtub3duLgorICAgICAgICAiIiIKKyAgICAgICAgdW5yZXNvbHZlZCA9IFtdCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5idWlsZF9uYW1lc19pbmRleDoKKyAgICAgICAgICAgIGlmIHJlX21hdGNoX3N0cmluZ3ModGFyZ2V0LCBkYXRhQ2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLmJ1aWxkX25hbWVzX2luZGV4LmluZGV4KHRhcmdldCkgaW4gc2VsZi5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaGF2ZV9idWlsZF90YXJnZXQodGFyZ2V0KToKKyAgICAgICAgICAgICAgICB1bnJlc29sdmVkLmFwcGVuZCh0YXJnZXQpCisgICAgICAgIHJldHVybiB1bnJlc29sdmVkCisKKyAgICBkZWYgZ2V0X3VucmVzb2x2ZWRfcnVuX3RhcmdldHMoc2VsZiwgZGF0YUNhY2hlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgcnVudGltZSB0YXJnZXRzIHdobydzIHByb3ZpZGVycworICAgICAgICBhcmUgdW5rbm93bi4KKyAgICAgICAgIiIiCisgICAgICAgIHVucmVzb2x2ZWQgPSBbXQorICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYucnVuX25hbWVzX2luZGV4OgorICAgICAgICAgICAgaWYgcmVfbWF0Y2hfc3RyaW5ncyh0YXJnZXQsIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNlbGYucnVuX25hbWVzX2luZGV4LmluZGV4KHRhcmdldCkgaW4gc2VsZi5mYWlsZWRfcmRlcHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhdmVfcnVudGltZV90YXJnZXQodGFyZ2V0KToKKyAgICAgICAgICAgICAgICB1bnJlc29sdmVkLmFwcGVuZCh0YXJnZXQpCisgICAgICAgIHJldHVybiB1bnJlc29sdmVkCisKKyAgICBkZWYgZ2V0X3Byb3ZpZGVyKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBwcm92aWRlcnMgb2YgaXRlbQorICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKGl0ZW0pCisKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0KKworICAgIGRlZiBnZXRfZGVwZW5kZWVzKHNlbGYsIGl0ZW1pZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHRhcmdldHMgd2hpY2ggZGVwZW5kIG9uIGl0ZW0KKyAgICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVlcyA9IFtdCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYuZGVwaWRzOgorICAgICAgICAgICAgaWYgaXRlbWlkIGluIHNlbGYuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgIGRlcGVuZGVlcy5hcHBlbmQoZm5pZCkKKyAgICAgICAgcmV0dXJuIGRlcGVuZGVlcworCisgICAgZGVmIGdldF9kZXBlbmRlZXNfc3RyKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBpdGVtIGFzIGEgdXNlciByZWFkYWJsZSBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW1pZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKKyAgICAgICAgZGVwZW5kZWVzID0gW10KKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBpZiBpdGVtaWQgaW4gc2VsZi5kZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChzZWxmLmZuX2luZGV4W2ZuaWRdKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X3JkZXBlbmRlZXMoc2VsZiwgaXRlbWlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gcnVudGltZSBpdGVtCisgICAgICAgICIiIgorICAgICAgICBkZXBlbmRlZXMgPSBbXQorICAgICAgICBmb3IgZm5pZCBpbiBzZWxmLnJkZXBpZHM6CisgICAgICAgICAgICBpZiBpdGVtaWQgaW4gc2VsZi5yZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgIGRlcGVuZGVlcy5hcHBlbmQoZm5pZCkKKyAgICAgICAgcmV0dXJuIGRlcGVuZGVlcworCisgICAgZGVmIGdldF9yZGVwZW5kZWVzX3N0cihzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gcnVudGltZSBpdGVtIGFzIGEgdXNlciByZWFkYWJsZSBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW1pZCA9IHNlbGYuZ2V0cnVuX2lkKGl0ZW0pCisgICAgICAgIGRlcGVuZGVlcyA9IFtdCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChzZWxmLmZuX2luZGV4W2ZuaWRdKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X3JlYXNvbnMoc2VsZiwgaXRlbSwgcnVudGltZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgdGhlIHJlYXNvbihzKSBmb3IgYW4gaXRlbSBub3QgYmVpbmcgcHJvdmlkZWQsIGlmIGFueQorICAgICAgICAiIiIKKyAgICAgICAgcmVhc29ucyA9IFtdCisgICAgICAgIGlmIHNlbGYuc2tpcGxpc3Q6CisgICAgICAgICAgICBmb3IgZm4gaW4gc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgICAgICBza2lwaXRlbSA9IHNlbGYuc2tpcGxpc3RbZm5dCisgICAgICAgICAgICAgICAgaWYgc2tpcGl0ZW0ucG4gPT0gaXRlbToKKyAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQoIiVzIHdhcyBza2lwcGVkOiAlcyIgJSAoc2tpcGl0ZW0ucG4sIHNraXBpdGVtLnNraXByZWFzb24pKQorICAgICAgICAgICAgICAgIGVsaWYgcnVudGltZSBhbmQgaXRlbSBpbiBza2lwaXRlbS5ycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKCIlcyBSUFJPVklERVMgJXMgYnV0IHdhcyBza2lwcGVkOiAlcyIgJSAoc2tpcGl0ZW0ucG4sIGl0ZW0sIHNraXBpdGVtLnNraXByZWFzb24pKQorICAgICAgICAgICAgICAgIGVsaWYgbm90IHJ1bnRpbWUgYW5kIGl0ZW0gaW4gc2tpcGl0ZW0ucHJvdmlkZXM6CisgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKCIlcyBQUk9WSURFUyAlcyBidXQgd2FzIHNraXBwZWQ6ICVzIiAlIChza2lwaXRlbS5wbiwgaXRlbSwgc2tpcGl0ZW0uc2tpcHJlYXNvbikpCisgICAgICAgIHJldHVybiByZWFzb25zCisKKyAgICBkZWYgZ2V0X2Nsb3NlX21hdGNoZXMoc2VsZiwgaXRlbSwgcHJvdmlkZXJfbGlzdCk6CisgICAgICAgIGltcG9ydCBkaWZmbGliCisgICAgICAgIGlmIHNlbGYuc2tpcGxpc3Q6CisgICAgICAgICAgICBza2lwcGVkID0gW10KKyAgICAgICAgICAgIGZvciBmbiBpbiBzZWxmLnNraXBsaXN0OgorICAgICAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHNlbGYuc2tpcGxpc3RbZm5dLnBuKQorICAgICAgICAgICAgZnVsbF9saXN0ID0gcHJvdmlkZXJfbGlzdCArIHNraXBwZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1bGxfbGlzdCA9IHByb3ZpZGVyX2xpc3QKKyAgICAgICAgcmV0dXJuIGRpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXMoaXRlbSwgZnVsbF9saXN0LCBjdXRvZmY9MC43KQorCisgICAgZGVmIGFkZF9wcm92aWRlcihzZWxmLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIGl0ZW0pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFkZF9wcm92aWRlcl9pbnRlcm5hbChjZmdEYXRhLCBkYXRhQ2FjaGUsIGl0ZW0pCisgICAgICAgIGV4Y2VwdCBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcjoKKyAgICAgICAgICAgIGlmIHNlbGYuYWJvcnQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX2J1aWxkdGFyZ2V0KHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkpCisKKyAgICAgICAgc2VsZi5tYXJrX2V4dGVybmFsX3RhcmdldChpdGVtKQorCisgICAgZGVmIGFkZF9wcm92aWRlcl9pbnRlcm5hbChzZWxmLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRoZSBwcm92aWRlcnMgb2YgaXRlbSB0byB0aGUgdGFzayBkYXRhCisgICAgICAgIE1hcmsgZW50cmllcyB3ZXJlIHNwZWNpZmljYWxseSBhZGRlZCBleHRlcm5hbGx5IGFzIGFnYWluc3QgZGVwZW5kZW5jaWVzCisgICAgICAgIGFkZGVkIGludGVybmFsbHkgZHVyaW5nIGRlcGVuZGVuY3kgcmVzb2x1dGlvbgorICAgICAgICAiIiIKKworICAgICAgICBpZiByZV9tYXRjaF9zdHJpbmdzKGl0ZW0sIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgaXRlbSBpbiBkYXRhQ2FjaGUucHJvdmlkZXJzOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIGRlcGVuZGVlcz1zZWxmLmdldF9kZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPXNlbGYuZ2V0X3JlYXNvbnMoaXRlbSksIGNsb3NlX21hdGNoZXM9c2VsZi5nZXRfY2xvc2VfbWF0Y2hlcyhpdGVtLCBkYXRhQ2FjaGUucHJvdmlkZXJzLmtleXMoKSkpLCBjZmdEYXRhKQorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoaXRlbSkKKworICAgICAgICBpZiBzZWxmLmhhdmVfYnVpbGRfdGFyZ2V0KGl0ZW0pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYWxsX3AgPSBkYXRhQ2FjaGUucHJvdmlkZXJzW2l0ZW1dCisKKyAgICAgICAgZWxpZ2libGUsIGZvdW5kVW5pcXVlID0gYmIucHJvdmlkZXJzLmZpbHRlclByb3ZpZGVycyhhbGxfcCwgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKQorICAgICAgICBlbGlnaWJsZSA9IFtwIGZvciBwIGluIGVsaWdpYmxlIGlmIG5vdCBzZWxmLmdldGZuX2lkKHApIGluIHNlbGYuZmFpbGVkX2ZuaWRzXQorCisgICAgICAgIGlmIG5vdCBlbGlnaWJsZToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTm9Qcm92aWRlcihpdGVtLCBkZXBlbmRlZXM9c2VsZi5nZXRfZGVwZW5kZWVzX3N0cihpdGVtKSwgcmVhc29ucz1bIk5vIGVsaWdpYmxlIFBST1ZJREVScyBleGlzdCBmb3IgJyVzJyIgJSBpdGVtXSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcihpdGVtKQorCisgICAgICAgIGlmIGxlbihlbGlnaWJsZSkgPiAxIGFuZCBmb3VuZFVuaXF1ZSA9PSBGYWxzZToKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZToKKyAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdC5hcHBlbmQoZGF0YUNhY2hlLnBrZ19mbltmbl0pCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyhpdGVtLCBwcm92aWRlcnNfbGlzdCksIGNmZ0RhdGEpCisgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGUuYXBwZW5kKGl0ZW0pCisKKyAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImFkZGluZyAlcyB0byBzYXRpc2Z5ICVzIiwgZm4sIGl0ZW0pCisgICAgICAgICAgICBzZWxmLmFkZF9idWlsZF90YXJnZXQoZm4sIGl0ZW0pCisgICAgICAgICAgICBzZWxmLmFkZF90YXNrcyhmbiwgZGF0YUNhY2hlKQorCisKKyAgICAgICAgICAgICNpdGVtID0gZGF0YUNhY2hlLnBrZ19mbltmbl0KKworICAgIGRlZiBhZGRfcnByb3ZpZGVyKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGhlIHJ1bnRpbWUgcHJvdmlkZXJzIG9mIGl0ZW0gdG8gdGhlIHRhc2sgZGF0YQorICAgICAgICAodGFrZXMgaXRlbSBuYW1lcyBmcm9tIFJERVBFTkRTL1BBQ0tBR0VTIG5hbWVzcGFjZSkKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgcmVfbWF0Y2hfc3RyaW5ncyhpdGVtLCBkYXRhQ2FjaGUuaWdub3JlZF9kZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5oYXZlX3J1bnRpbWVfdGFyZ2V0KGl0ZW0pOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYWxsX3AgPSBiYi5wcm92aWRlcnMuZ2V0UnVudGltZVByb3ZpZGVycyhkYXRhQ2FjaGUsIGl0ZW0pCisKKyAgICAgICAgaWYgbm90IGFsbF9wOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIHJ1bnRpbWU9VHJ1ZSwgZGVwZW5kZWVzPXNlbGYuZ2V0X3JkZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPXNlbGYuZ2V0X3JlYXNvbnMoaXRlbSwgVHJ1ZSkpLCBjZmdEYXRhKQorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUlByb3ZpZGVyKGl0ZW0pCisKKyAgICAgICAgZWxpZ2libGUsIG51bWJlclByZWZlcnJlZCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpCisgICAgICAgIGVsaWdpYmxlID0gW3AgZm9yIHAgaW4gZWxpZ2libGUgaWYgbm90IHNlbGYuZ2V0Zm5faWQocCkgaW4gc2VsZi5mYWlsZWRfZm5pZHNdCisKKyAgICAgICAgaWYgbm90IGVsaWdpYmxlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIHJ1bnRpbWU9VHJ1ZSwgZGVwZW5kZWVzPXNlbGYuZ2V0X3JkZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPVsiTm8gZWxpZ2libGUgUlBST1ZJREVScyBleGlzdCBmb3IgJyVzJyIgJSBpdGVtXSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIoaXRlbSkKKworICAgICAgICBpZiBsZW4oZWxpZ2libGUpID4gMSBhbmQgbnVtYmVyUHJlZmVycmVkID09IDA6CisgICAgICAgICAgICBpZiBpdGVtIG5vdCBpbiBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGU6CisgICAgICAgICAgICAgICAgcHJvdmlkZXJzX2xpc3QgPSBbXQorICAgICAgICAgICAgICAgIGZvciBmbiBpbiBlbGlnaWJsZToKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJzX2xpc3QuYXBwZW5kKGRhdGFDYWNoZS5wa2dfZm5bZm5dKQorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMoaXRlbSwgcHJvdmlkZXJzX2xpc3QsIHJ1bnRpbWU9VHJ1ZSksIGNmZ0RhdGEpCisgICAgICAgICAgICBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGUuYXBwZW5kKGl0ZW0pCisKKyAgICAgICAgaWYgbnVtYmVyUHJlZmVycmVkID4gMToKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZToKKyAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdC5hcHBlbmQoZGF0YUNhY2hlLnBrZ19mbltmbl0pCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyhpdGVtLCBwcm92aWRlcnNfbGlzdCwgcnVudGltZT1UcnVlKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZS5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5NdWx0aXBsZVJQcm92aWRlcihpdGVtKQorCisgICAgICAgICMgcnVuIHRocm91Z2ggdGhlIGxpc3QgdW50aWwgd2UgZmluZCBvbmUgdGhhdCB3ZSBjYW4gYnVpbGQKKyAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgImFkZGluZyAnJXMnIHRvIHNhdGlzZnkgcnVudGltZSAnJXMnIiwgZm4sIGl0ZW0pCisgICAgICAgICAgICBzZWxmLmFkZF9ydW50aW1lX3RhcmdldChmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX3Rhc2tzKGZuLCBkYXRhQ2FjaGUpCisKKyAgICBkZWYgZmFpbF9mbmlkKHNlbGYsIGZuaWQsIG1pc3NpbmdfbGlzdD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSBmaWxlIGFzIGZhaWxlZCAodW5idWlsZGFibGUpCisgICAgICAgIFJlbW92ZSBhbnkgcmVmZXJlbmNlcyBmcm9tIGJ1aWxkIGFuZCBydW50aW1lIHByb3ZpZGVyIGxpc3RzCisKKyAgICAgICAgbWlzc2luZ19saXN0LCBBIGxpc3Qgb2YgbWlzc2luZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgdGFyZ2V0CisgICAgICAgICIiIgorICAgICAgICBpZiBmbmlkIGluIHNlbGYuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBtaXNzaW5nX2xpc3Q6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbXQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkZpbGUgJyVzJyBpcyB1bmJ1aWxkYWJsZSwgcmVtb3ZpbmcuLi4iLCBzZWxmLmZuX2luZGV4W2ZuaWRdKQorICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcy5hcHBlbmQoZm5pZCkKKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdLnJlbW92ZShmbmlkKQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkX3RhcmdldHNbdGFyZ2V0XSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfYnVpbGR0YXJnZXQodGFyZ2V0LCBtaXNzaW5nX2xpc3QpCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdOgorICAgICAgICAgICAgICAgIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0XS5yZW1vdmUoZm5pZCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9ydW50YXJnZXQodGFyZ2V0LCBtaXNzaW5nX2xpc3QpCisKKyAgICBkZWYgcmVtb3ZlX2J1aWxkdGFyZ2V0KHNlbGYsIHRhcmdldGlkLCBtaXNzaW5nX2xpc3Q9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgYnVpbGQgdGFyZ2V0IGFzIGZhaWxlZCAodW5idWlsZGFibGUpCisgICAgICAgIFRyaWdnZXIgcmVtb3ZhbCBvZiBhbnkgZmlsZXMgdGhhdCBoYXZlIHRoaXMgYXMgYSBkZXBlbmRlbmN5CisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgbWlzc2luZ19saXN0OgorICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXSArIG1pc3NpbmdfbGlzdAorICAgICAgICBsb2dnZXIudmVyYm9zZSgiVGFyZ2V0ICclcycgaXMgdW5idWlsZGFibGUsIHJlbW92aW5nLi4uXG5NaXNzaW5nIG9yIHVuYnVpbGRhYmxlIGRlcGVuZGVuY3kgY2hhaW4gd2FzOiAlcyIsIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdLCBtaXNzaW5nX2xpc3QpCisgICAgICAgIHNlbGYuZmFpbGVkX2RlcHMuYXBwZW5kKHRhcmdldGlkKQorICAgICAgICBkZXBlbmRlZXMgPSBzZWxmLmdldF9kZXBlbmRlZXModGFyZ2V0aWQpCisgICAgICAgIGZvciBmbmlkIGluIGRlcGVuZGVlczoKKyAgICAgICAgICAgIHNlbGYuZmFpbF9mbmlkKGZuaWQsIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgZm9yIHRhc2tpZCBpbiB4cmFuZ2UobGVuKHNlbGYudGFza3NfaWRlcGVuZHMpKToKKyAgICAgICAgICAgIGlkZXBlbmRzID0gc2VsZi50YXNrc19pZGVwZW5kc1t0YXNraWRdCisgICAgICAgICAgICBmb3IgKGlkZXBlbmRpZCwgaWRlcGVuZHRhc2spIGluIGlkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmIGlkZXBlbmRpZCA9PSB0YXJnZXRpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoc2VsZi50YXNrc19mbmlkW3Rhc2tpZF0sIG1pc3NpbmdfbGlzdCkKKworICAgICAgICBpZiBzZWxmLmFib3J0IGFuZCB0YXJnZXRpZCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHM6CisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmJ1aWxkX25hbWVzX2luZGV4W3RhcmdldGlkXQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJSZXF1aXJlZCBidWlsZCB0YXJnZXQgJyVzJyBoYXMgbm8gYnVpbGRhYmxlIHByb3ZpZGVycy5cbk1pc3Npbmcgb3IgdW5idWlsZGFibGUgZGVwZW5kZW5jeSBjaGFpbiB3YXM6ICVzIiwgdGFyZ2V0LCBtaXNzaW5nX2xpc3QpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcih0YXJnZXQpCisKKyAgICBkZWYgcmVtb3ZlX3J1bnRhcmdldChzZWxmLCB0YXJnZXRpZCwgbWlzc2luZ19saXN0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhIHJ1biB0YXJnZXQgYXMgZmFpbGVkICh1bmJ1aWxkYWJsZSkKKyAgICAgICAgVHJpZ2dlciByZW1vdmFsIG9mIGFueSBmaWxlcyB0aGF0IGhhdmUgdGhpcyBhcyBhIGRlcGVuZGVuY3kKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBtaXNzaW5nX2xpc3Q6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5ydW5fbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWlzc2luZ19saXN0ID0gW3NlbGYucnVuX25hbWVzX2luZGV4W3RhcmdldGlkXV0gKyBtaXNzaW5nX2xpc3QKKworICAgICAgICBsb2dnZXIuaW5mbygiUnVudGltZSB0YXJnZXQgJyVzJyBpcyB1bmJ1aWxkYWJsZSwgcmVtb3ZpbmcuLi5cbk1pc3Npbmcgb3IgdW5idWlsZGFibGUgZGVwZW5kZW5jeSBjaGFpbiB3YXM6ICVzIiwgc2VsZi5ydW5fbmFtZXNfaW5kZXhbdGFyZ2V0aWRdLCBtaXNzaW5nX2xpc3QpCisgICAgICAgIHNlbGYuZmFpbGVkX3JkZXBzLmFwcGVuZCh0YXJnZXRpZCkKKyAgICAgICAgZGVwZW5kZWVzID0gc2VsZi5nZXRfcmRlcGVuZGVlcyh0YXJnZXRpZCkKKyAgICAgICAgZm9yIGZuaWQgaW4gZGVwZW5kZWVzOgorICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCwgbWlzc2luZ19saXN0KQorICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShsZW4oc2VsZi50YXNrc19pcmRlcGVuZHMpKToKKyAgICAgICAgICAgIGlyZGVwZW5kcyA9IHNlbGYudGFza3NfaXJkZXBlbmRzW3Rhc2tpZF0KKyAgICAgICAgICAgIGZvciAoaWRlcGVuZGlkLCBpZGVwZW5kdGFzaykgaW4gaXJkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmIGlkZXBlbmRpZCA9PSB0YXJnZXRpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoc2VsZi50YXNrc19mbmlkW3Rhc2tpZF0sIG1pc3NpbmdfbGlzdCkKKworICAgIGRlZiBhZGRfdW5yZXNvbHZlZChzZWxmLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzb2x2ZSBhbGwgdW5yZXNvbHZlZCBidWlsZCBhbmQgcnVudGltZSB0YXJnZXRzCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuaW5mbygiUmVzb2x2aW5nIGFueSBtaXNzaW5nIHRhc2sgcXVldWUgZGVwZW5kZW5jaWVzIikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGFkZGVkID0gMAorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmdldF91bnJlc29sdmVkX2J1aWxkX3RhcmdldHMoZGF0YUNhY2hlKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkX3Byb3ZpZGVyX2ludGVybmFsKGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBhZGRlZCA9IGFkZGVkICsgMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKHRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5hYm9ydCBhbmQgdGFyZ2V0aWQgaW4gc2VsZi5leHRlcm5hbF90YXJnZXRzIGFuZCBub3Qgc2VsZi5hbGxvd2luY29tcGxldGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5hbGxvd2luY29tcGxldGU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9idWlsZHRhcmdldCh0YXJnZXRpZCkKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5nZXRfdW5yZXNvbHZlZF9ydW5fdGFyZ2V0cyhkYXRhQ2FjaGUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRfcnByb3ZpZGVyKGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBhZGRlZCA9IGFkZGVkICsgMQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoYmIucHJvdmlkZXJzLk5vUlByb3ZpZGVyLCBiYi5wcm92aWRlcnMuTXVsdGlwbGVSUHJvdmlkZXIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9ydW50YXJnZXQoc2VsZi5nZXRydW5faWQodGFyZ2V0KSkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUmVzb2x2ZWQgIiArIHN0cihhZGRlZCkgKyAiIGV4dHJhIGRlcGVuZGVuY2llcyIpCisgICAgICAgICAgICBpZiBhZGRlZCA9PSAwOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgc2VsZi5kdW1wX2RhdGEoKQorCisgICAgZGVmIGR1bXBfZGF0YShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIER1bXAgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoMywgImJ1aWxkX25hbWVzOiIpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiLCAiLmpvaW4oc2VsZi5idWlsZF9uYW1lc19pbmRleCkpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW5fbmFtZXM6IikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIsICIuam9pbihzZWxmLnJ1bl9uYW1lc19pbmRleCkpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJidWlsZF90YXJnZXRzOiIpCisgICAgICAgIGZvciBidWlsZGlkIGluIHhyYW5nZShsZW4oc2VsZi5idWlsZF9uYW1lc19pbmRleCkpOgorICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5idWlsZF9uYW1lc19pbmRleFtidWlsZGlkXQorICAgICAgICAgICAgdGFyZ2V0cyA9ICJOb25lIgorICAgICAgICAgICAgaWYgYnVpbGRpZCBpbiBzZWxmLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHNlbGYuYnVpbGRfdGFyZ2V0c1tidWlsZGlkXQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgKCVzKSVzOiAlcyIsIGJ1aWxkaWQsIHRhcmdldCwgdGFyZ2V0cykKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bl90YXJnZXRzOiIpCisgICAgICAgIGZvciBydW5pZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVuX25hbWVzX2luZGV4KSk6CisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLnJ1bl9uYW1lc19pbmRleFtydW5pZF0KKyAgICAgICAgICAgIHRhcmdldHMgPSAiTm9uZSIKKyAgICAgICAgICAgIGlmIHJ1bmlkIGluIHNlbGYucnVuX3RhcmdldHM6CisgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IHNlbGYucnVuX3RhcmdldHNbcnVuaWRdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXM6ICVzIiwgcnVuaWQsIHRhcmdldCwgdGFyZ2V0cykKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInRhc2tzOiIpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi50YXNrc19uYW1lKSk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXMgLSAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZuX2luZGV4W3NlbGYudGFza3NfZm5pZFt0YXNrXV0sCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza3NfbmFtZVt0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrc190ZGVwZW5kc1t0YXNrXSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgImRlcGVuZGVuY3kgaWRzIChwZXIgZm4pOiIpCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYuZGVwaWRzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgJXMgJXM6ICVzIiwgZm5pZCwgc2VsZi5mbl9pbmRleFtmbmlkXSwgc2VsZi5kZXBpZHNbZm5pZF0pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW50aW1lIGRlcGVuZGVuY3kgaWRzIChwZXIgZm4pOiIpCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICVzICVzOiAlcyIsIGZuaWQsIHNlbGYuZm5faW5kZXhbZm5pZF0sIHNlbGYucmRlcGlkc1tmbmlkXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2NvZGVwYXJzZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2NvZGVwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1NGJjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY29kZXBhcnNlci5weQpAQCAtMCwwICsxLDM3NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0IGZvciBjb2RlcGFyc2VyLnB5CisjCisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuVGVzdENvZGVQYXJzZXInKQorCisjIGJiLmRhdGEgcmVmZXJlbmNlcyBiYi5wYXJzZSBidXQgY2FuJ3QgZGlyZWN0bHkgaW1wb3J0IGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisjIEhhY2sgYXJvdW5kIGl0IGZvciBub3cgOiggCitpbXBvcnQgYmIucGFyc2UKK2ltcG9ydCBiYi5kYXRhCisKK2NsYXNzIFJlZmVyZW5jZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKworICAgIGRlZiBzZXRFbXB0eVZhcnMoc2VsZiwgdmFybGlzdCk6CisgICAgICAgIGZvciBrIGluIHZhcmxpc3Q6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKGssICIiKQorCisgICAgZGVmIHNldFZhbHVlcyhzZWxmLCB2YWx1ZXMpOgorICAgICAgICBmb3IgaywgdiBpbiB2YWx1ZXMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoaywgdikKKworICAgIGRlZiBhc3NlcnRSZWZlcmVuY2VzKHNlbGYsIHJlZnMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVmZXJlbmNlcywgcmVmcykKKworICAgIGRlZiBhc3NlcnRFeGVjcyhzZWxmLCBleGVjcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5leGVjcywgZXhlY3MpCisKK2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNlVGVzdChSZWZlcmVuY2VUZXN0KToKKworICAgIGRlZiBwYXJzZUV4cHJlc3Npb24oc2VsZiwgZXhwKToKKyAgICAgICAgcGFyc2VkdmFyID0gc2VsZi5kLmV4cGFuZFdpdGhSZWZzKGV4cCwgTm9uZSkKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gcGFyc2VkdmFyLnJlZmVyZW5jZXMKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiRk9PIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIke0ZPT30iKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiRk9PIl0pKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJCQVIiXSkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIkJBUiIpCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIkeyR7Rk9PfX0iKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiRk9PIiwgIkJBUiJdKSkKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiQkFSIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIke0BiYi5kYXRhLmdldFZhcignQkFSJywgZCwgVHJ1ZSkgKyAnZm9vJ30iKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiQkFSIl0pKQorCitjbGFzcyBTaGVsbFJlZmVyZW5jZVRlc3QoUmVmZXJlbmNlVGVzdCk6CisKKyAgICBkZWYgcGFyc2VFeHByZXNzaW9uKHNlbGYsIGV4cCk6CisgICAgICAgIHBhcnNlZHZhciA9IHNlbGYuZC5leHBhbmRXaXRoUmVmcyhleHAsIE5vbmUpCisgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoIlBhcnNlclRlc3QiLCBsb2dnZXIpCisgICAgICAgIHBhcnNlci5wYXJzZV9zaGVsbChwYXJzZWR2YXIudmFsdWUpCisKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gcGFyc2VkdmFyLnJlZmVyZW5jZXMKKyAgICAgICAgc2VsZi5leGVjcyA9IHBhcnNlci5leGVjcworCisgICAgZGVmIHRlc3RfcXVvdGVzX2luc2lkZV9hc3NpZ24oc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCdmb289Zm9vImJhciJiYXonKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFtdKSkKKworICAgIGRlZiB0ZXN0X3F1b3Rlc19pbnNpZGVfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbignc2VkIHMjImJhciBiYXoiIyJhbHBoYSBiZXRhIiNnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKyAgICBkZWYgdGVzdF9hcmdfY29udGludWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigic2VkIC1pIC1lIHMsZm9vLGJhcixnIFxcXG4gKi5wYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsic2VkIl0pKQorCisgICAgZGVmIHRlc3RfZG9sbGFyX2luX3F1b3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oJ3NlZCAtaSAtZSAiZm9vJCIgKi5wYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsic2VkIl0pKQorCisgICAgZGVmIHRlc3RfcXVvdGVzX2luc2lkZV9hcmdfY29udGludWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbImJpbmRpciIsICJEIiwgImxpYmRpciJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiIiIKK3NlZCAtaSAtZSBzIyJtb2NfbG9jYXRpb249LiokIiMibW9jX2xvY2F0aW9uPSR7YmluZGlyfS9tb2M0IiMgXFwKKy1lIHMjInVpY19sb2NhdGlvbj0uKiQiIyJ1aWNfbG9jYXRpb249JHtiaW5kaXJ9L3VpYzQiIyBcXAorJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworIiIiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiYmluZGlyIiwgIkQiLCAibGliZGlyIl0pKQorCisgICAgZGVmIHRlc3RfYXNzaWduX3N1YnNoZWxsX2V4cGFuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImZvbz0kKGVjaG8gYmFyKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZWNobyJdKSkKKworICAgIGRlZiB0ZXN0X3NoZWxsX3VuZXhwYW5kZWQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiUVRfQkFTRV9OQU1FIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCdlY2hvICIke1FUX0JBU0VfTkFNRX0iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJlY2hvIl0pKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiUVRfQkFTRV9OQU1FIl0pKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV92YXJleHBfc2luZ2xlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInNlZCAtaSAtZSAnczpJUHs6SSR7OmcnICRwYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsic2VkIl0pKQorCisKKyAgICBkZWYgdGVzdF91bnRpbChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInVudGlsIGZhbHNlOyBkbyBlY2hvIHRydWU7IGRvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImZhbHNlIiwgImVjaG8iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoKSkKKworICAgIGRlZiB0ZXN0X2Nhc2Uoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorY2FzZSAkZm9vIGluCisqKQorYmFyCis7OworZXNhYworIiIiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImJhciJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCgpKQorCisgICAgZGVmIHRlc3RfYXNzaWduX2V4ZWMoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJhPWIgYz0nZm9vIGJhcicgYWxwaGEgMSAyIDMiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImFscGhhIl0pKQorCisgICAgZGVmIHRlc3RfcmVkaXJlY3RfdG9fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJmb28iXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImVjaG8gZm9vID4ke2Zvb30vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJlY2hvIl0pKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiZm9vIl0pKQorCisgICAgZGVmIHRlc3RfaGVyZWRvYyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJ0aGV0YSJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiIiIKK2NhdCA8PEVORAorYWxwaGEKK2JldGEKKyR7dGhldGF9CitFTkQKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbInRoZXRhIl0pKQorCisgICAgZGVmIHRlc3RfcmVkaXJlY3RfZnJvbV9oZXJlZG9jKHNlbGYpOgorICAgICAgICB2ID0gWyJCIiwgIlNIQURPV19NQUlMRElSIiwgIlNIQURPV19NQUlMRklMRSIsICJTSEFET1dfVVRNUERJUiIsICJTSEFET1dfTE9HRElSIiwgImJpbmRpciJdCisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKHYpCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorY2F0IDw8RU5EID4ke0J9L2NhY2hlZHBhdGhzCitzaGFkb3dfY3ZfbWFpbGRpcj0ke1NIQURPV19NQUlMRElSfQorc2hhZG93X2N2X21haWxmaWxlPSR7U0hBRE9XX01BSUxGSUxFfQorc2hhZG93X2N2X3V0bXBkaXI9JHtTSEFET1dfVVRNUERJUn0KK3NoYWRvd19jdl9sb2dkaXI9JHtTSEFET1dfTE9HRElSfQorc2hhZG93X2N2X3Bhc3N3ZF9kaXI9JHtiaW5kaXJ9CitFTkQKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCh2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJjYXQiXSkpCisKKyMgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9jb21tYW5kX2V4cGFuc2lvbihzZWxmKToKKyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlZnRyYWNrZXIuU2hlbGxTeW50YXhFcnJvciwgcmVmdHJhY2tlci5leGVjcywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGJidmFsdWUuc2hwYXJzZSgiY3AgZm9vYCIsIHNlbGYuZCksIHNlbGYuZCkKKworIyAgICBkZWYgdGVzdF9yb2d1ZV9kb2xsYXJzaWduKHNlbGYpOgorIyAgICAgICAgc2VsZi5zZXRWYWx1ZXMoeyJEIiA6ICIvdG1wIn0pCisjICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiaW5zdGFsbCAtZCAke0R9JCIpCisjICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsiRCJdKSkKKyMgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiaW5zdGFsbCJdKSkKKworCitjbGFzcyBQeXRob25SZWZlcmVuY2VUZXN0KFJlZmVyZW5jZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBpZiBoYXNhdHRyKGJiLnV0aWxzLCAiX2NvbnRleHQiKToKKyAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGJiLnV0aWxzLl9jb250ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBvcnQgX19idWlsdGluX18KKyAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IF9fYnVpbHRpbl9fLl9fZGljdF9fCisKKyAgICBkZWYgcGFyc2VFeHByZXNzaW9uKHNlbGYsIGV4cCk6CisgICAgICAgIHBhcnNlZHZhciA9IHNlbGYuZC5leHBhbmRXaXRoUmVmcyhleHAsIE5vbmUpCisgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKCJQYXJzZXJUZXN0IiwgbG9nZ2VyKQorICAgICAgICBwYXJzZXIucGFyc2VfcHl0aG9uKHBhcnNlZHZhci52YWx1ZSkKKworICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSBwYXJzZWR2YXIucmVmZXJlbmNlcyB8IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgIHNlbGYuZXhlY3MgPSBwYXJzZXIuZXhlY3MKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaW5kZW50KHZhbHVlKToKKyAgICAgICAgIiIiUHl0aG9uIFNuaXBwZXRzIGhhdmUgdG8gYmUgaW5kZW50ZWQsIHB5dGhvbiB2YWx1ZXMgZG9uJ3QgaGF2ZSB0bworYmUuIFRoZXNlIHVuaXQgdGVzdHMgYXJlIHRlc3Rpbmcgc25pcHBldHMuIiIiCisgICAgICAgIHJldHVybiAiICIgKyB2YWx1ZQorCisgICAgZGVmIHRlc3RfZ2V0dmFyX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImJiLmRhdGEuZ2V0VmFyKCdmb28nLCBkLCBUcnVlKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJmb28iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KCkpCisKKyAgICBkZWYgdGVzdF9nZXR2YXJfY29tcHV0ZWRfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiYmIuZGF0YS5nZXRWYXIoJ2YnICsgJ28nICsgJ28nLCBkLCBUcnVlKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoKSkKKworICAgIGRlZiB0ZXN0X2dldHZhcl9leGVjX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImV2YWwoJ2JiLmRhdGEuZ2V0VmFyKFwiZm9vXCIsIGQsIFRydWUpJykiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZXZhbCJdKSkKKworICAgIGRlZiB0ZXN0X3Zhcl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY29udGV4dFsiZm9vIl0gPSBsYW1iZGEgeDogeAorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbIkZPTyJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZm9vKCcke0ZPT30nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZm9vIl0pKQorICAgICAgICBkZWwgc2VsZi5jb250ZXh0WyJmb28iXQorCisgICAgZGVmIHRlc3RfdmFyX2V4ZWMoc2VsZik6CisgICAgICAgIGZvciBldHlwZSBpbiAoImZ1bmMiLCAidGFzayIpOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiZG9fc29tZXRoaW5nIiwgImVjaG8gJ2hpIG1vbSEgJHtGT099JyIpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiZG9fc29tZXRoaW5nIiwgZXR5cGUsIFRydWUpCisgICAgICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiYmIuYnVpbGQuZXhlY19mdW5jKCdkb19zb21ldGhpbmcnLCBkKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFtdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZG9fc29tZXRoaW5nIl0pKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnRleHRbInRlc3RmdW5jIl0gPSBsYW1iZGEgbXNnOiBiYi5tc2cubm90ZSgxLCBOb25lLCBtc2cpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJIZWxsbywgV29ybGQhIikKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRlc3RmdW5jKCcke0ZPT30nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsidGVzdGZ1bmMiXSkpCisgICAgICAgIGRlbCBzZWxmLmNvbnRleHRbInRlc3RmdW5jIl0KKworICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9mdW5jdGlvbl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJ0aW1lLnRpbWUoKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsidGltZS50aW1lIl0pKQorCisgICAgZGVmIHRlc3RfcXVhbGlmaWVkX2Z1bmN0aW9uX3JlZmVyZW5jZV8yKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigib3MucGF0aC5kaXJuYW1lKCcvZm9vL2JhcicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJvcy5wYXRoLmRpcm5hbWUiXSkpCisKKyAgICBkZWYgdGVzdF9xdWFsaWZpZWRfZnVuY3Rpb25fcmVmZXJlbmNlX25lc3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsdGltZS5nbXRpbWUoKSkiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbInRpbWUuc3RyZnRpbWUiLCAidGltZS5nbXRpbWUiXSkpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9yZWZlcmVuY2VfY2hhaW5lZChzZWxmKToKKyAgICAgICAgc2VsZi5jb250ZXh0WyJ0ZXN0Z2V0Il0gPSBsYW1iZGE6ICJcdHN0cmlwIG1lICIKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRlc3RnZXQoKS5zdHJpcCgpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJ0ZXN0Z2V0Il0pKQorICAgICAgICBkZWwgc2VsZi5jb250ZXh0WyJ0ZXN0Z2V0Il0KKworCitjbGFzcyBEZXBlbmRlbmN5UmVmZXJlbmNlVGVzdChSZWZlcmVuY2VUZXN0KToKKworICAgIHB5ZGF0YSA9ICIiIgorYmIuZGF0YS5nZXRWYXIoJ3NvbWV2YXInLCBkLCBUcnVlKQorZGVmIHRlc3QoZCk6CisgICAgZm9vID0gJ2JhciAlcycgJSAnZm9vJworZGVmIHRlc3QyKGQpOgorICAgIGQuZ2V0VmFyKGZvbywgVHJ1ZSkKKyAgICBkLmdldFZhcignYmFyJywgRmFsc2UpCisgICAgdGVzdDIoZCkKKworZGVmIGEoKToKKyAgICBcIlwiXCJzb21lCisgICAgc3R1ZmYKKyAgICBcIlwiXCIKKyAgICByZXR1cm4gImhlaCIKKwordGVzdChkKQorCitiYi5kYXRhLmV4cGFuZChiYi5kYXRhLmdldFZhcigic29tZXRoaW5nIiwgRmFsc2UsIGQpLCBkKQorYmIuZGF0YS5leHBhbmQoIiR7aW5leHBhbmR9IHNvbWV0aGluZ2Vsc2UiLCBkKQorYmIuZGF0YS5nZXRWYXIoYSgpLCBkLCBGYWxzZSkKKyIiIgorCisgICAgZGVmIHRlc3RfcHl0aG9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCBzZWxmLnB5ZGF0YSkKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJpbmV4cGFuZCIsICJhIiwgInRlc3QyIiwgInRlc3QiXSkKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWdzKCJGT08iLCB7ImZ1bmMiOiBUcnVlLCAicHl0aG9uIjogVHJ1ZX0pCisKKyAgICAgICAgZGVwcywgdmFsdWVzID0gYmIuZGF0YS5idWlsZF9kZXBlbmRlbmNpZXMoIkZPTyIsIHNldChzZWxmLmQua2V5cygpKSwgc2V0KCksIHNldCgpLCBzZWxmLmQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVwcywgc2V0KFsic29tZXZhciIsICJiYXIiLCAic29tZXRoaW5nIiwgImluZXhwYW5kIiwgInRlc3QiLCAidGVzdDIiLCAiYSJdKSkKKworCisgICAgc2hlbGxkYXRhID0gIiIiCitmb28gKCkgeworYmFyCit9Cit7CitlY2hvIGJhegorJChoZWgpCitldmFsIGBtb29gCit9CithPWIKK2M9ZAorKAordHJ1ZSAmJiBmYWxzZQordGVzdCAtZiBmb28KK3Rlc3R2YWw9c29tZXRoaW5nCiskdGVzdHZhbAorKSB8fCBhaWVlCishIGludmVydGVkCitlY2hvICR7c29tZXZhcn0KKworY2FzZSBmb28gaW4KK2JhcikKK2VjaG8gYmFyCis7OworYmF6KQorZWNobyBiYXoKKzs7Citmb28qKQorZWNobyBmb28KKzs7Citlc2FjCisiIiIKKworICAgIGRlZiB0ZXN0X3NoZWxsKHNlbGYpOgorICAgICAgICBleGVjcyA9IFsiYmFyIiwgImVjaG8iLCAiaGVoIiwgIm1vbyIsICJ0cnVlIiwgImFpZWUiXQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJzb21ldmFyIiwgImhlaCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoImludmVydGVkIiwgImVjaG8gaW52ZXJ0ZWQuLi4iKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiaW52ZXJ0ZWQiLCAiZnVuYyIsIFRydWUpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsIHNlbGYuc2hlbGxkYXRhKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZ3MoIkZPTyIsIHsiZnVuYyI6IFRydWV9KQorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhleGVjcykKKworICAgICAgICBkZXBzLCB2YWx1ZXMgPSBiYi5kYXRhLmJ1aWxkX2RlcGVuZGVuY2llcygiRk9PIiwgc2V0KHNlbGYuZC5rZXlzKCkpLCBzZXQoKSwgc2V0KCksIHNlbGYuZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJzb21ldmFyIiwgImludmVydGVkIl0gKyBleGVjcykpCisKKworICAgIGRlZiB0ZXN0X3ZhcmRlcHMoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIm9lX2xpYmluc3RhbGwiLCAiZWNobyB0ZXN0IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbz1vZV9saWJpbnN0YWxsOyBldmFsICRmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiRk9PIiwgInZhcmRlcHMiLCAib2VfbGliaW5zdGFsbCIpCisKKyAgICAgICAgZGVwcywgdmFsdWVzID0gYmIuZGF0YS5idWlsZF9kZXBlbmRlbmNpZXMoIkZPTyIsIHNldChzZWxmLmQua2V5cygpKSwgc2V0KCksIHNldCgpLCBzZWxmLmQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVwcywgc2V0KFsib2VfbGliaW5zdGFsbCJdKSkKKworICAgIGRlZiB0ZXN0X3ZhcmRlcHNfZXhwYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJvZV9saWJpbnN0YWxsIiwgImVjaG8gdGVzdCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb289b2VfbGliaW5zdGFsbDsgZXZhbCAkZm9vIikKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWcoIkZPTyIsICJ2YXJkZXBzIiwgIiR7QCdvZV9saWJpbnN0YWxsJ30iKQorCisgICAgICAgIGRlcHMsIHZhbHVlcyA9IGJiLmRhdGEuYnVpbGRfZGVwZW5kZW5jaWVzKCJGT08iLCBzZXQoc2VsZi5kLmtleXMoKSksIHNldCgpLCBzZXQoKSwgc2VsZi5kKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbIm9lX2xpYmluc3RhbGwiXSkpCisKKyAgICAjQ3VycmVudGx5IG5vIHdpbGRjYXJkIHN1cHBvcnQKKyAgICAjZGVmIHRlc3RfdmFyZGVwc193aWxkY2FyZHMoc2VsZik6CisgICAgIyAgICBzZWxmLmQuc2V0VmFyKCJvZV9saWJpbnN0YWxsIiwgImVjaG8gdGVzdCIpCisgICAgIyAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vPW9lX2xpYmluc3RhbGw7IGV2YWwgJGZvbyIpCisgICAgIyAgICBzZWxmLmQuc2V0VmFyRmxhZygiRk9PIiwgInZhcmRlcHMiLCAib2VfKiIpCisgICAgIyAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJvZV9saWJpbnN0YWxsIl0pKQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY293LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb3cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNTg0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvY293LnB5CkBAIC0wLDAgKzEsMTM2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciBDb3B5LW9uLVdyaXRlIChjb3cucHkpCisjCisjIENvcHlyaWdodCAyMDA2IEhvbGdlciBGcmV5dGhlciA8ZnJleXRoZXJAaGFuZGhlbGRzLm9yZz4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCisKK2NsYXNzIENPV1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGNhc2UgZm9yIHRoZSBDT1cgbW9kdWxlIGZyb20gbWl0aHJvCisgICAgIiIiCisKKyAgICBkZWYgdGVzdEdldFNldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgYW5kIHNldAorICAgICAgICAiIiIKKyAgICAgICAgZnJvbSBiYi5DT1cgaW1wb3J0IENPV0RpY3RCYXNlCisgICAgICAgIGEgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYS5oYXNfa2V5KCdhJykpCisKKyAgICAgICAgYVsnYSddID0gJ2EnCisgICAgICAgIGFbJ2InXSA9ICdiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBhLmhhc19rZXkoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYS5oYXNfa2V5KCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdhJywgYVsnYSddICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2InLCBhWydiJ10gKQorCisgICAgZGVmIHRlc3RDb3B5Q29weShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhlIGNvcHkgb2YgY29waWVzCisgICAgICAgICIiIgorCisgICAgICAgIGZyb20gYmIuQ09XIGltcG9ydCBDT1dEaWN0QmFzZQorCisgICAgICAgICMgY3JlYXRlIHR3byBDT1cgZGljdCAnaW5zdGFuY2VzJworICAgICAgICBiID0gQ09XRGljdEJhc2UuY29weSgpCisgICAgICAgIGMgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKworICAgICAgICAjIGFzc2lnbiBzb21lIGtleXMgdG8gb25lIGluc3RhbmNlLCBzb21lIGtleXMgdG8gYW5vdGhlcgorICAgICAgICBiWydhJ10gPSAxMAorICAgICAgICBiWydjJ10gPSAyMAorICAgICAgICBjWydhJ10gPSAzMAorCisgICAgICAgICMgdGVzdCBzZXBhcmF0aW9uIG9mIHRoZSB0d28gaW5zdGFuY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjLmhhc19rZXkoJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMzAsIGNbJ2EnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAsIGJbJ2EnXSkKKworICAgICAgICAjIHRlc3QgY29weQorICAgICAgICBiXzIgPSBiLmNvcHkoKQorICAgICAgICBjXzIgPSBjLmNvcHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMCwgYl8yWydhJ10pCisKKyAgICAgICAgYl8yWydkJ10gPSA0MAorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYl8yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDAsIGJfMlsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjLmhhc19rZXkoJ2QnKSkKKworICAgICAgICBjXzJbJ2QnXSA9IDMwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGNfMi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGJfMi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDMwLCBjXzJbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDAsIGJfMlsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYi5oYXNfa2V5KCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjLmhhc19rZXkoJ2QnKSkKKworICAgICAgICAjIHRlc3QgY29weSBvZiB0aGUgY29weQorICAgICAgICBjXzMgPSBjXzIuY29weSgpCisgICAgICAgIGJfMyA9IGJfMi5jb3B5KCkKKyAgICAgICAgYl8zXzIgPSBiXzIuY29weSgpCisKKyAgICAgICAgY18zWydlJ10gPSA0NzExCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNfM1snZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfMy5oYXNfa2V5KCdlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiXzNfMi5oYXNfa2V5KCdlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiXzIuaGFzX2tleSgnZScpKQorCisgICAgICAgIGJfM1snZSddID0gJ3ZpZWwnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCd2aWVsJywgYl8zWydlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNfM1snZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgY18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYl8zLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfM18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfMi5oYXNfa2V5KCdlJykpCisKKyAgICBkZWYgdGVzdENvdyhzZWxmKToKKyAgICAgICAgZnJvbSBiYi5DT1cgaW1wb3J0IENPV0RpY3RCYXNlCisgICAgICAgIGMgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKyAgICAgICAgY1snMTIzJ10gPSAxMDI3CisgICAgICAgIGNbJ290aGVyJ10gPSA0NzExCisgICAgICAgIGNbJ2QnXSA9IHsgJ2FiYycgOiAxMCwgJ2JjZCcgOiAyMCB9CisKKyAgICAgICAgY29weSA9IGMuY29weSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyNywgY1snMTIzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoxMCwgJ2JjZCc6MjB9LCBjWydkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwMjcsIGNvcHlbJzEyMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0NzExLCBjb3B5WydvdGhlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7J2FiYyc6MTAsICdiY2QnOjIwfSwgY29weVsnZCddKQorCisgICAgICAgICMgY293IGl0IG5vdworICAgICAgICBjb3B5WycxMjMnXSA9IDEwMjgKKyAgICAgICAgY29weVsnb3RoZXInXSA9IDQ3MTIKKyAgICAgICAgY29weVsnZCddWydhYmMnXSA9IDIwCisKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMDI3LCBjWycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY1snb3RoZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeydhYmMnOjEwLCAnYmNkJzoyMH0sIGNbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyOCwgY29weVsnMTIzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTIsIGNvcHlbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoyMCwgJ2JjZCc6MjB9LCBjb3B5WydkJ10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2RhdGEucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhYWI1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvZGF0YS5weQpAQCAtMCwwICsxLDQ0MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0cyBmb3IgdGhlIERhdGEgU3RvcmUgKGRhdGEucHkvZGF0YV9zbWFydC5weSkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGJiCitpbXBvcnQgYmIuZGF0YQoraW1wb3J0IGJiLnBhcnNlCitpbXBvcnQgbG9nZ2luZworCitjbGFzcyBMb2dSZWNvcmQoKToKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBsb2dzID0gW10KKyAgICAgICAgY2xhc3MgTG9nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgICAgICBsb2dzLmFwcGVuZChyZWNvcmQpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICAgICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgIHJldHVybiBsb2dzCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYuaGFuZGxlcikKKyAgICAgICAgcmV0dXJuCisKK2RlZiBsb2dDb250YWlucyhpdGVtLCBsb2dzKToKKyAgICBmb3IgbCBpbiBsb2dzOgorICAgICAgICBtID0gbC5nZXRNZXNzYWdlKCkKKyAgICAgICAgaWYgaXRlbSBpbiBtOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgRGF0YUV4cGFuc2lvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kWyJmb28iXSA9ICJ2YWx1ZV9vZl9mb28iCisgICAgICAgIHNlbGYuZFsiYmFyIl0gPSAidmFsdWVfb2ZfYmFyIgorICAgICAgICBzZWxmLmRbInZhbHVlX29mX2ZvbyJdID0gInZhbHVlX29mXyd2YWx1ZV9vZl9mb28nIgorCisgICAgZGVmIHRlc3Rfb25lX3ZhcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtmb299IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInZhbHVlX29mX2ZvbyIpCisKKyAgICBkZWYgdGVzdF9pbmRpcmVjdF9vbmVfdmFyKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyR7Zm9vfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfJ3ZhbHVlX29mX2ZvbyciKQorCisgICAgZGVmIHRlc3RfaW5kaXJlY3RfYW5kX2Fub3RoZXIoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7JHtmb299fSAke2Jhcn0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfJ3ZhbHVlX29mX2ZvbycgdmFsdWVfb2ZfYmFyIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0KHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0A1KjEyfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICI2MCIpCisKKyAgICBkZWYgdGVzdF9leHBhbmRfaW5fcHl0aG9uX3NuaXBwZXQoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QCdib28gJyArICcke2Zvb30nfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJib28gdmFsdWVfb2ZfZm9vIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X2dldHZhcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAZC5nZXRWYXIoJ2ZvbycsIFRydWUpICsgJyAke2Jhcn0nfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJ2YWx1ZV9vZl9mb28gdmFsdWVfb2ZfYmFyIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X3N5bnRheF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7QGZvbyA9IDV9IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9weXRob25fc25pcHBldF9ydW50aW1lX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtAaW50KCd0ZXN0Jyl9IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9weXRob25fc25pcHBldF9lcnJvcl9wYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vIHZhbHVlICR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJiYXIgdmFsdWUgJHtAaW50KCd0ZXN0Jyl9IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF92YWx1ZV9jb250YWluaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0BkLmdldFZhcignZm9vJywgVHJ1ZSkgKyAnICR7YmFyfSd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInZhbHVlX29mX2ZvbyB2YWx1ZV9vZl9iYXIiKQorCisgICAgZGVmIHRlc3RfcmVmZXJlbmNlX3VuZGVmaW5lZF92YXIoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7dW5kZWZpbmVkdmFyfSBtZWgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiJHt1bmRlZmluZWR2YXJ9IG1laCIpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiYmFyIHZhbHVlIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7QkFSfSBmb28gJHtCQVJ9IikKKyAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcigiRk9PIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgImJhciB2YWx1ZSBmb28gYmFyIHZhbHVlIikKKworICAgIGRlZiB0ZXN0X2RpcmVjdF9yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICIke0ZPT30iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2luZGlyZWN0X3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICIke0JBWn0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVoiLCAiJHtGT099IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIiR7JHtAJ0ZPTyd9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IsIHNlbGYuZC5nZXRWYXIsICJGT08iLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV92YXJleHBfc2luZ2xlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgInNlZCAtaSAtZSAnczpJUHs6SSR7OmcnICRwYyIpCisgICAgICAgIHZhbCA9IHNlbGYuZC5nZXRWYXIoIkZPTyIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJzZWQgLWkgLWUgJ3M6SVB7OkkkezpnJyAkcGMiKQorCisgICAgZGVmIHRlc3Rfbm9uc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgNSkKKyAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICI1IikKKworICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnJlbmFtZVZhcigiZm9vIiwgIm5ld2ZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigibmV3Zm9vIiwgRmFsc2UpLCAidmFsdWVfb2ZfZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJmb28iLCBGYWxzZSksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kZWxldGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLmRlbFZhcigiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJmb28iLCBGYWxzZSksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgorICAgICAgICBrZXlzID0gc2VsZi5kLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIFsndmFsdWVfb2ZfZm9vJywgJ2ZvbycsICdiYXInXSkKKworICAgIGRlZiB0ZXN0X2tleXNfZGVsZXRpb24oc2VsZik6CisgICAgICAgIG5ld2QgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kKQorICAgICAgICBuZXdkLmRlbFZhcigiYmFyIikKKyAgICAgICAga2V5cyA9IG5ld2Qua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWyd2YWx1ZV9vZl9mb28nLCAnZm9vJ10pCisKK2NsYXNzIFRlc3ROZXN0ZWRFeHBhbnNpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZFsiZm9vIl0gPSAiZm9vIgorICAgICAgICBzZWxmLmRbImJhciJdID0gImJhciIKKyAgICAgICAgc2VsZi5kWyJ2YWx1ZV9vZl9mb29iYXIiXSA9ICIxODciCisKKyAgICBkZWYgdGVzdF9yZWZzKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke3ZhbHVlX29mXyR7Zm9vfSR7YmFyfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiMTg3IikKKworICAgICNkZWYgdGVzdF9weXRob25fcmVmcyhzZWxmKToKKyAgICAjICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QCR7QDN9KioyICsgJHtANH0qKjJ9IikKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIyNSIpCisKKyAgICBkZWYgdGVzdF9yZWZfaW5fcHl0aG9uX3JlZihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAJyR7Zm9vfScgKyAnYmFyJ30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiZm9vYmFyIikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9yZWZfaW5fcmVmKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyR7QCdmJysnbycrJ28nfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2RlZXBfbmVzdGluZyhzZWxmKToKKyAgICAgICAgZGVwdGggPSAxMDAKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHsiICogZGVwdGggKyAiZm9vIiArICJ9IiAqIGRlcHRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiZm9vIikKKworICAgICNkZWYgdGVzdF9kZWVwX3B5dGhvbl9uZXN0aW5nKHNlbGYpOgorICAgICMgICAgZGVwdGggPSA1MAorICAgICMgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAIiAqIGRlcHRoICsgIjEiICsgIisxfSIgKiBkZXB0aCkKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksIHN0cihkZXB0aCArIDEpKQorCisgICAgZGVmIHRlc3RfbWl4ZWQoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7dmFsdWVfb2ZfJHtAKCcke2Zvb30nKydiYXInKVswOjNdfSR7JHtAJ0JBUicubG93ZXIoKX19fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIxODciKQorCisgICAgZGVmIHRlc3RfcnVudGltZShzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHske0AndmFsdWVfb2YnICsgJ19mJysnbycrJ28nKydiJysnYScrJ3InfX0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiMTg3IikKKworY2xhc3MgVGVzdE1lbW9pemUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X21lbW9pemVkKHNlbGYpOgorICAgICAgICBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZC5zZXRWYXIoIkZPTyIsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXRWYXIoIkZPTyIsIEZhbHNlKSBpcyBkLmdldFZhcigiRk9PIiwgRmFsc2UpKQorCisgICAgZGVmIHRlc3Rfbm90X21lbW9pemVkKHNlbGYpOgorICAgICAgICBkMSA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIGQyID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZDEuc2V0VmFyKCJGT08iLCAiYmFyIikKKyAgICAgICAgZDIuc2V0VmFyKCJGT08iLCAiYmFyMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMS5nZXRWYXIoIkZPTyIsIEZhbHNlKSBpcyBub3QgZDIuZ2V0VmFyKCJGT08iLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9jaGFuZ2VkX2FmdGVyX21lbW9pemVkKHNlbGYpOgorICAgICAgICBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZC5zZXRWYXIoImZvbyIsICJ2YWx1ZSBvZiBmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkLmdldFZhcigiZm9vIiwgRmFsc2UpKSwgInZhbHVlIG9mIGZvbyIpCisgICAgICAgIGQuc2V0VmFyKCJmb28iLCAic2Vjb25kIHZhbHVlIG9mIGZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQuZ2V0VmFyKCJmb28iLCBGYWxzZSkpLCAic2Vjb25kIHZhbHVlIG9mIGZvbyIpCisKKyAgICBkZWYgdGVzdF9zYW1lX3ZhbHVlKHNlbGYpOgorICAgICAgICBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZC5zZXRWYXIoImZvbyIsICJ2YWx1ZSBvZiIpCisgICAgICAgIGQuc2V0VmFyKCJiYXIiLCAidmFsdWUgb2YiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJmb28iLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoImJhciIsIEZhbHNlKSkKKworY2xhc3MgVGVzdENvbmNhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVkFMIiwgInZhbCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJiYXIiKQorCisgICAgZGVmIHRlc3RfcHJlcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0iKQorICAgICAgICBzZWxmLmQucHJlcGVuZFZhcigiVEVTVCIsICIke0ZPT306IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsIikKKworICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0iKQorICAgICAgICBzZWxmLmQuYXBwZW5kVmFyKCJURVNUIiwgIjoke0JBUn0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInZhbDpiYXIiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5wcmVwZW5kVmFyKCJURVNUIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmQuYXBwZW5kVmFyKCJURVNUIiwgIjp2YWwyIikKKyAgICAgICAgc2VsZi5kLmFwcGVuZFZhcigiVEVTVCIsICI6JHtCQVJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsOnZhbDI6YmFyIikKKworY2xhc3MgVGVzdENvbmNhdE92ZXJyaWRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUwiLCAidmFsIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgImJhciIpCisKKyAgICBkZWYgdGVzdF9wcmVwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcHJlcGVuZCIsICIke0ZPT306IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiZm9vOnZhbCIpCisKKyAgICBkZWYgdGVzdF9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9hcHBlbmQiLCAiOiR7QkFSfSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInZhbDpiYXIiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcHJlcGVuZCIsICIke0ZPT306IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9hcHBlbmQiLCAiOnZhbDIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6JHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiZm9vOnZhbDp2YWwyOmJhciIpCisKKyAgICBkZWYgdGVzdF9hcHBlbmRfdW5zZXQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcHJlcGVuZCIsICIke0ZPT306IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9hcHBlbmQiLCAiOnZhbDIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6JHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiZm9vOjp2YWwyOmJhciIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9ICR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgInZhbCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgImJhciIpCisKKyAgICBkZWYgdGVzdF9kb3VibGVyZWZfcmVtb3ZlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSAke0JBUn0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3JlbW92ZSIsICJ2YWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX1RFU1QiLCAiJHtURVNUfSAke1RFU1R9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVF9URVNUIiwgVHJ1ZSksICJiYXIgYmFyIikKKworICAgIGRlZiB0ZXN0X2VtcHR5X3JlbW92ZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3JlbW92ZSIsICJ2YWwiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICIiKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2V4cGFuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIloiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7QkFSfS9YIFkiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3JlbW92ZSIsICIke0JBUn0vWCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgIlkiKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2V4cGFuc2lvbl9pdGVtcyhzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICJBIEIgQyBEIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIkIgRCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgIiR7QkFSfSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgIkEgQyIpCisKK2NsYXNzIFRlc3RPdmVycmlkZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiT1ZFUlJJREVTIiwgImZvbzpiYXI6bG9jYWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgInRlc3R2YWx1ZSIpCisKKyAgICBkZWYgdGVzdF9ub19vdmVycmlkZShzZWxmKToKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlIikKKworICAgIGRlZiB0ZXN0X29uZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTIiKQorCisgICAgZGVmIHRlc3Rfb25lX292ZXJyaWRlX3Vuc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUMl9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QyIiwgVHJ1ZSksICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNlbGYuZC5rZXlzKCksIFsnVEVTVCcsICdURVNUMicsICdPVkVSUklERVMnLCAnVEVTVDJfYmFyJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfbG9jYWwiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfZm9vIiwgInRlc3R2YWx1ZTQiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNlbGYuZC5rZXlzKCksIFsnVEVTVCcsICdURVNUX2ZvbycsICdPVkVSUklERVMnLCAnVEVTVF9iYXInLCAnVEVTVF9sb2NhbCddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfY29tYmluZWRfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2xvY2FsX2Zvb19iYXIiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfb3ZlcnJpZGVzX3Vuc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUMl9sb2NhbF9mb29fYmFyIiwgInRlc3R2YWx1ZTMiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUMiIsIFRydWUpLCAidGVzdHZhbHVlMyIpCisKKyAgICBkZWYgdGVzdF9rZXlleHBhbnNpb25fb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkxPQ0FMIiwgImxvY2FsIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfJHtMT0NBTH0iLCAidGVzdHZhbHVlMyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfZm9vIiwgInRlc3R2YWx1ZTQiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgYmIuZGF0YS5leHBhbmRLZXlzKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJ0ZXN0dmFsdWUzIikKKworICAgIGRlZiB0ZXN0X3JlbmFtZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQUxURVJOQVRJVkVfbmN1cnNlcy10b29sc19jbGFzcy10YXJnZXQiLCAiYSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIk9WRVJSSURFUyIsICJjbGFzcy10YXJnZXQiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5kLnJlbmFtZVZhcigiQUxURVJOQVRJVkVfbmN1cnNlcy10b29scyIsICJBTFRFUk5BVElWRV9saWIzMi1uY3Vyc2VzLXRvb2xzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJBTFRFUk5BVElWRV9saWIzMi1uY3Vyc2VzLXRvb2xzIiwgVHJ1ZSksICJhIikKKworICAgIGRlZiB0ZXN0X3VuZGVyc2NvcmVfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfYmFyIiwgInRlc3R2YWx1ZTIiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX3NvbWVfdmFsIiwgInRlc3R2YWx1ZTMiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2ZvbyIsICJ0ZXN0dmFsdWU0IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiT1ZFUlJJREVTIiwgImZvbzpiYXI6c29tZV92YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorCitjbGFzcyBUZXN0S2V5RXhwYW5zaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2tleWV4cGFuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVkFMXyR7Rk9PfSIsICJBIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVkFMXyR7QkFSfSIsICJCIikKKyAgICAgICAgd2l0aCBMb2dSZWNvcmQoKSBhcyBsb2dzOgorICAgICAgICAgICAgYmIuZGF0YS5leHBhbmRLZXlzKHNlbGYuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dDb250YWlucygiVmFyaWFibGUga2V5IFZBTF8ke0ZPT30gKEEpIHJlcGxhY2VzIG9yaWdpbmFsIGtleSBWQUxfZm9vIChCKSIsIGxvZ3MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlZBTF9mb28iLCBUcnVlKSwgIkEiKQorCitjbGFzcyBUZXN0RmxhZ3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiZm9vIiwgInZhbHVlIG9mIGZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJmb28iLCAiZmxhZzEiLCAidmFsdWUgb2YgZmxhZzEiKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiZm9vIiwgImZsYWcyIiwgInZhbHVlIG9mIGZsYWcyIikKKworICAgIGRlZiB0ZXN0X3NldGZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhckZsYWcoImZvbyIsICJmbGFnMSIpLCAidmFsdWUgb2YgZmxhZzEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXJGbGFnKCJmb28iLCAiZmxhZzIiKSwgInZhbHVlIG9mIGZsYWcyIikKKworICAgIGRlZiB0ZXN0X2RlbGZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuZC5kZWxWYXJGbGFnKCJmb28iLCAiZmxhZzIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXJGbGFnKCJmb28iLCAiZmxhZzEiKSwgInZhbHVlIG9mIGZsYWcxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyRmxhZygiZm9vIiwgImZsYWcyIiksIE5vbmUpCisKKworY2xhc3MgQ29udGFpbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiU09NRUZMQUciLCAiYSBiIGMiKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImIiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJhIGIiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJiIGMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJjIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImEgYiBjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYyBiIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJ4IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImEgeCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJ4IGMgYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJ4IGMgYiBhIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICBkZWYgdGVzdF9jb250YWluc19hbnkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYSBiIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImIgYyIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJjIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJhIHgiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAieCBjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgIngiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgInggeSB6IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9mZXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDE3M2MxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9mZXRjaC5weQpAQCAtMCwwICsxLDc2OSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUZXN0cyBmb3IgdGhlIEZldGNoZXIgKGZldGNoMi8pCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBVUkkKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAoraW1wb3J0IGJiCisKK2NsYXNzIFVSSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHRlc3RfdXJpcyA9IHsKKyAgICAgICAgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbmRleC5odG1sIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnd3d3Lmdvb2dsZS5jb20nLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWw7cGFyYW0xPXZhbHVlMSIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbmRleC5odG1sO3BhcmFtMT12YWx1ZTEnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnd3d3Lmdvb2dsZS5jb20nLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHsKKyAgICAgICAgICAgICAgICAncGFyYW0xJzogJ3ZhbHVlMScKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2luZGV4Lmh0bWw/cGFyYW0xPXZhbHVlMSIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9wYXJhbTE9dmFsdWUxJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnaHR0cCcsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnd3d3LmV4YW1wbGUub3JnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZXhhbXBsZS5vcmcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5JzogeworICAgICAgICAgICAgICAgICdwYXJhbTEnOiAndmFsdWUxJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2luZGV4Lmh0bWw/cXBhcmFtMT1xdmFsdWUxO3BhcmFtMj12YWx1ZTIiIDogeworICAgICAgICAgICAgJ3VyaSc6ICdodHRwOi8vd3d3LmV4YW1wbGUub3JnL2luZGV4Lmh0bWw/cXBhcmFtMT1xdmFsdWUxO3BhcmFtMj12YWx1ZTInLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZXhhbXBsZS5vcmcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ3d3dy5leGFtcGxlLm9yZycsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICdwYXJhbTInOiAndmFsdWUyJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHsKKyAgICAgICAgICAgICAgICAncXBhcmFtMSc6ICdxdmFsdWUxJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3LmV4YW1wbGUuY29tOjgwODAvaW5kZXguaHRtbCIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb206ODA4MC9pbmRleC5odG1sJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnaHR0cCcsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnd3d3LmV4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdwb3J0JzogODA4MCwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZXhhbXBsZS5jb206ODA4MCcsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJjdnM6Ly9hbm9uY3ZzQGN2cy5oYW5kaGVsZHMub3JnL2N2czttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnY3ZzOi8vYW5vbmN2c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZycsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2N2cycsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnY3ZzLmhhbmRoZWxkcy5vcmcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ2N2cy5oYW5kaGVsZHMub3JnJywKKyAgICAgICAgICAgICdwYXRoJzogJy9jdnMnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJ2Fub25jdnMnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJ2Fub25jdnMnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImN2czovL2Fub25jdnM6YW5vbnltb3VzQGN2cy5oYW5kaGVsZHMub3JnL2N2czt0YWc9VjAtOTktODE7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZyI6IHsKKyAgICAgICAgICAgICd1cmknOiAnY3ZzOi8vYW5vbmN2czphbm9ueW1vdXNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO3RhZz1WMC05OS04MTttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnY3ZzJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICdjdnMuaGFuZGhlbGRzLm9yZycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnY3ZzLmhhbmRoZWxkcy5vcmcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2N2cycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnYW5vbmN2czphbm9ueW1vdXMnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJ2Fub25jdnMnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJ2Fub255bW91cycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICd0YWcnOiAnVjAtOTktODEnLAorICAgICAgICAgICAgICAgICdtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImZpbGU6Ly9leGFtcGxlLmRpZmYiOiB7ICMgTk9URTogTm90IFJGQyBjb21wbGlhbnQhCisgICAgICAgICAgICAndXJpJzogJ2ZpbGU6ZXhhbXBsZS5kaWZmJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZmlsZScsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnZXhhbXBsZS5kaWZmJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogVHJ1ZQorICAgICAgICB9LAorICAgICAgICAiZmlsZTpleGFtcGxlLmRpZmYiOiB7ICMgTk9URTogUkZDIGNvbXBsaWFudCB2ZXJzaW9uIG9mIHRoZSBmb3JtZXIKKyAgICAgICAgICAgICd1cmknOiAnZmlsZTpleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdmaWxlJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICdleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IFRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImZpbGU6Ly8vdG1wL2V4YW1wbGUuZGlmZiI6IHsKKyAgICAgICAgICAgICd1cmknOiAnZmlsZTovLy90bXAvZXhhbXBsZS5kaWZmJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZmlsZScsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL3RtcC9leGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJnaXQ6Ly8vcGF0aC9leGFtcGxlLmdpdCI6IHsKKyAgICAgICAgICAgICd1cmknOiAnZ2l0Oi8vL3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdnaXQnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnJywKKyAgICAgICAgICAgICdwYXRoJzogJy9wYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiZ2l0OnBhdGgvZXhhbXBsZS5naXQiOiB7CisgICAgICAgICAgICAndXJpJzogJ2dpdDpwYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZ2l0JywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICdwYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBUcnVlCisgICAgICAgIH0sCisgICAgICAgICJnaXQ6Ly9leGFtcGxlLm5ldC9wYXRoL2V4YW1wbGUuZ2l0IjogeworICAgICAgICAgICAgJ3VyaSc6ICdnaXQ6Ly9leGFtcGxlLm5ldC9wYXRoL2V4YW1wbGUuZ2l0JywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnZ2l0JywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICdleGFtcGxlLm5ldCcsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnZXhhbXBsZS5uZXQnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWYgdGVzdF91cmkoc2VsZik6CisgICAgICAgIGZvciB0ZXN0X3VyaSwgcmVmIGluIHNlbGYudGVzdF91cmlzLml0ZW1zKCk6CisgICAgICAgICAgICB1cmkgPSBVUkkodGVzdF91cmkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHVyaSksIHJlZlsndXJpJ10pCisKKyAgICAgICAgICAgICMgZXhwZWN0ZWQgYXR0cmlidXRlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuc2NoZW1lLCByZWZbJ3NjaGVtZSddKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VyaW5mbywgcmVmWyd1c2VyaW5mbyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsIHJlZlsndXNlcm5hbWUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhc3N3b3JkLCByZWZbJ3Bhc3N3b3JkJ10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3RuYW1lLCByZWZbJ2hvc3RuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wb3J0LCByZWZbJ3BvcnQnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3Rwb3J0LCByZWZbJ2hvc3Rwb3J0J10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhdGgsIHJlZlsncGF0aCddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFyYW1zLCByZWZbJ3BhcmFtcyddKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5yZWxhdGl2ZSwgcmVmWydyZWxhdGl2ZSddKQorCisgICAgZGVmIHRlc3RfZGljdChzZWxmKToKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi50ZXN0X3VyaXMudmFsdWVzKCk6CisgICAgICAgICAgICB1cmkgPSBVUkkoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5zY2hlbWUsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcmluZm8sICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdG5hbWUsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucG9ydCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhdGgsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFyYW1zLCB7fSkKKworCisgICAgICAgICAgICB1cmkuc2NoZW1lID0gdGVzdFsnc2NoZW1lJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnNjaGVtZSwgdGVzdFsnc2NoZW1lJ10pCisKKyAgICAgICAgICAgIHVyaS51c2VyaW5mbyA9IHRlc3RbJ3VzZXJpbmZvJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJpbmZvLCB0ZXN0Wyd1c2VyaW5mbyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsIHRlc3RbJ3VzZXJuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgdGVzdFsncGFzc3dvcmQnXSkKKworICAgICAgICAgICAgIyBtYWtlIHN1cmUgY2hhbmdpbmcgdGhlIHZhbHVlcyBkb2Vzbid0IGRvIGFueXRoaW5nIHVuZXhwZWN0ZWQKKyAgICAgICAgICAgIHVyaS51c2VybmFtZSA9ICdjaGFuZ2VtZScKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJuYW1lLCAnY2hhbmdlbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsIHRlc3RbJ3Bhc3N3b3JkJ10pCisgICAgICAgICAgICB1cmkucGFzc3dvcmQgPSAnaW5zZWN1cmUnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgJ2NoYW5nZW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhc3N3b3JkLCAnaW5zZWN1cmUnKQorCisgICAgICAgICAgICAjIHJlc2V0IGJhY2sgYWZ0ZXIgb3VyIHRyaWNrZXJ5CisgICAgICAgICAgICB1cmkudXNlcmluZm8gPSB0ZXN0Wyd1c2VyaW5mbyddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VyaW5mbywgdGVzdFsndXNlcmluZm8nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJuYW1lLCB0ZXN0Wyd1c2VybmFtZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsIHRlc3RbJ3Bhc3N3b3JkJ10pCisKKyAgICAgICAgICAgIHVyaS5ob3N0bmFtZSA9IHRlc3RbJ2hvc3RuYW1lJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3RuYW1lLCB0ZXN0Wydob3N0bmFtZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdHBvcnQsIHRlc3RbJ2hvc3RuYW1lJ10pCisKKyAgICAgICAgICAgIHVyaS5wb3J0ID0gdGVzdFsncG9ydCddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wb3J0LCB0ZXN0Wydwb3J0J10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5ob3N0cG9ydCwgdGVzdFsnaG9zdHBvcnQnXSkKKworICAgICAgICAgICAgdXJpLnBhdGggPSB0ZXN0WydwYXRoJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhdGgsIHRlc3RbJ3BhdGgnXSkKKworICAgICAgICAgICAgdXJpLnBhcmFtcyA9IHRlc3RbJ3BhcmFtcyddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHRlc3RbJ3BhcmFtcyddKQorCisgICAgICAgICAgICB1cmkucXVlcnkgPSB0ZXN0WydxdWVyeSddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5xdWVyeSwgdGVzdFsncXVlcnknXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodXJpKSwgdGVzdFsndXJpJ10pCisKKyAgICAgICAgICAgIHVyaS5wYXJhbXMgPSB7fQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFyYW1zLCB7fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHVyaSksIChzdHIodXJpKS5zcGxpdCgiOyIpKVswXSkKKworY2xhc3MgRmV0Y2hlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9yaWdkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLnRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5kbGRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICJkb3dubG9hZCIpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuZGxkaXIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkRMX0RJUiIsIHNlbGYuZGxkaXIpCisgICAgICAgIHNlbGYudW5wYWNrZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgInVucGFja2VkIikKKyAgICAgICAgb3MubWtkaXIoc2VsZi51bnBhY2tkaXIpCisgICAgICAgIHBlcnNpc3RkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAicGVyc2lzdGRhdGEiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJQRVJTSVNURU5UX0RJUiIsIHBlcnNpc3RkaXIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLmNoZGlyKHNlbGYub3JpZ2RpcikKKyAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi50ZW1wZGlyKQorCitjbGFzcyBNaXJyb3JVcmlUZXN0KEZldGNoZXJUZXN0KToKKworICAgIHJlcGxhY2V1cmlzID0geworICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8uKiIsICJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyLyIpIAorICAgICAgICAgICAgOiAiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9naXQyX2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcubXRkLXV0aWxzLmdpdC50YXIuZ3oiLAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8oW14vXSsvKSooW14vXSopIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9cXDI7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvZm9vL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovKFteL10rLykqKFteL10qKSIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvXFwyO3Byb3RvY29sPWh0dHAiKSAKKyAgICAgICAgICAgIDogImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwO3Byb3RvY29sPWh0dHAiLCAKKyAgICAgICAgKCJnaXQ6Ly9naXQuaW52YWxpZC5pbmZyYWRlYWQub3JnL2Zvby9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLyhbXi9dKy8pKihbXi9dKikiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9cXDI7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwO3Byb3RvY29sPWh0dHAiLCAKKyAgICAgICAgKCJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlO3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiLCAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIpCisgICAgICAgICAgICA6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlO3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwKKyAgICAgICAgKCJmaWxlOi8vc3N0YXRlLXh5ei50Z3oiLCAiZmlsZTovLy4qIiwgImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlIikgCisgICAgICAgICAgICA6ICJmaWxlOi8vL3NvbWV3aGVyZS8xMjM0L3NzdGF0ZS1jYWNoZS9zc3RhdGUteHl6LnRneiIsCisgICAgICAgICgiZmlsZTovL3NzdGF0ZS14eXoudGd6IiwgImZpbGU6Ly8uKiIsICJmaWxlOi8vL3NvbWV3aGVyZS8xMjM0L3NzdGF0ZS1jYWNoZS8iKSAKKyAgICAgICAgICAgIDogImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlL3NzdGF0ZS14eXoudGd6IiwKKyAgICAgICAgKCJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyMS9zb21lZGlyMi9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLCAiaHR0cDovLy4qLy4qIiwgImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMyIpIAorICAgICAgICAgICAgOiAiaHR0cDovL3NvbWV3aGVyZTIub3JnL3NvbWVkaXIzL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsCisgICAgICAgICgiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIxL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMS4yLjMudGFyLmd6IikgCisgICAgICAgICAgICA6ICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwKKyAgICAgICAgKCJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS43LjEudGFyLmJ6MiIsICJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCIsICJodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QiKQorICAgICAgICAgICAgOiAiaHR0cDovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0L3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwKKyAgICAgICAgKCJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS43LjEudGFyLmJ6MiIsICJodHRwOi8vLiovLioiLCAiZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvIikKKyAgICAgICAgICAgIDogImZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzL3N1YnZlcnNpb24tMS43LjEudGFyLmJ6MiIsCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLy4qIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9CQVNFTkFNRTtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9mb28vbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8uKiIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvQkFTRU5BTUU7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvZm9vL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovLioiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL01JUlJPUk5BTUU7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcuZm9vLm10ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorCisgICAgICAgICNSZW5hbWluZyBmaWxlcyBkb2Vzbid0IHdvcmsKKyAgICAgICAgIygiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIxL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMi4zLjQudGFyLmd6IikgOiAiaHR0cDovL3NvbWV3aGVyZTIub3JnL3NvbWVkaXIzL3NvbWVmaWxlXzIuMy40LnRhci5neiIKKyAgICAgICAgIygiZmlsZTovL3NzdGF0ZS14eXoudGd6IiwgImZpbGU6Ly8uKi8uKiIsICJmaWxlOi8vL3NvbWV3aGVyZS8xMjM0L3NzdGF0ZS1jYWNoZSIpIDogImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlL3NzdGF0ZS14eXoudGd6IiwKKyAgICB9CisKKyAgICBtaXJyb3J2YXIgPSAiaHR0cDovLy4qLy4qIGZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzLyBcbiIgXAorICAgICAgICAgICAgICAgICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgXG4iIFwKKyAgICAgICAgICAgICAgICAiaHR0cHM6Ly8uKi8uKiBmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzLyBcbiIgXAorICAgICAgICAgICAgICAgICJodHRwOi8vLiovLiogZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy8gXG4iCisKKyAgICBkZWYgdGVzdF91cmlyZXBsYWNlKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnJlcGxhY2V1cmlzLml0ZW1zKCk6CisgICAgICAgICAgICB1ZCA9IGJiLmZldGNoLkZldGNoRGF0YShrWzBdLCBzZWxmLmQpCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorICAgICAgICAgICAgbWlycm9ycyA9IGJiLmZldGNoMi5taXJyb3JfZnJvbV9zdHJpbmcoIiVzICVzIiAlIChrWzFdLCBrWzJdKSkKKyAgICAgICAgICAgIG5ld3VyaXMsIHVkcyA9IGJiLmZldGNoMi5idWlsZF9taXJyb3J1cmlzKHVkLCBtaXJyb3JzLCBzZWxmLmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt2XSwgbmV3dXJpcykKKworICAgIGRlZiB0ZXN0X3VyaWxpc3QxKHNlbGYpOgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2hEYXRhKCJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCBzZWxmLmQpCisgICAgICAgIG1pcnJvcnMgPSBiYi5mZXRjaDIubWlycm9yX2Zyb21fc3RyaW5nKHNlbGYubWlycm9ydmFyKQorICAgICAgICB1cmlzLCB1ZHMgPSBiYi5mZXRjaDIuYnVpbGRfbWlycm9ydXJpcyhmZXRjaGVyLCBtaXJyb3JzLCBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpcywgWydmaWxlOi8vL3NvbWVwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onLCAnZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onXSkKKworICAgIGRlZiB0ZXN0X3VyaWxpc3QyKHNlbGYpOgorICAgICAgICAjIENhdGNoIGh0dHBzOi8vIC0+IGZpbGVzOi8vIGJ1ZworICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2hEYXRhKCJodHRwczovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Iiwgc2VsZi5kKQorICAgICAgICBtaXJyb3JzID0gYmIuZmV0Y2gyLm1pcnJvcl9mcm9tX3N0cmluZyhzZWxmLm1pcnJvcnZhcikKKyAgICAgICAgdXJpcywgdWRzID0gYmIuZmV0Y2gyLmJ1aWxkX21pcnJvcnVyaXMoZmV0Y2hlciwgbWlycm9ycywgc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaXMsIFsnZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onXSkKKworICAgIGRlZiB0ZXN0X21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICMgVGVzdCBpZiBtaXJyb3Igb2YgYSBtaXJyb3Igd29ya3MKKyAgICAgICAgbWlycm9ydmFyID0gc2VsZi5taXJyb3J2YXIgKyAiIGh0dHA6Ly8uKi8uKiBodHRwOi8vb3RoZXJkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9kb3dubG9hZHMvIFxuIgorICAgICAgICBtaXJyb3J2YXIgPSBtaXJyb3J2YXIgKyAiIGh0dHA6Ly9vdGhlcmRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnLy4qIGh0dHA6Ly9kb3dubG9hZHMyLnlvY3RvcHJvamVjdC5vcmcvZG93bmxvYWRzLyBcbiIKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoRGF0YSgiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Iiwgc2VsZi5kKQorICAgICAgICBtaXJyb3JzID0gYmIuZmV0Y2gyLm1pcnJvcl9mcm9tX3N0cmluZyhtaXJyb3J2YXIpCisgICAgICAgIHVyaXMsIHVkcyA9IGJiLmZldGNoMi5idWlsZF9taXJyb3J1cmlzKGZldGNoZXIsIG1pcnJvcnMsIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmlzLCBbJ2ZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovLy9zb21lb3RoZXJwYXRoL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9vdGhlcmRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL2Rvd25sb2FkczIueW9jdG9wcm9qZWN0Lm9yZy9kb3dubG9hZHMvYml0YmFrZS0xLjAudGFyLmd6J10pCisKKyAgICByZWNtaXJyb3J2YXIgPSAiaHR0cHM6Ly8uKi9bXi9dKiAgICBodHRwOi8vQUFBQS9BL0EvQS8gXG4iIFwKKyAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly8uKi9bXi9dKiAgICBodHRwczovL0JCQkIvQi9CL0IvIFxuIgorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2hEYXRhKCJodHRwczovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Iiwgc2VsZi5kKQorICAgICAgICBtaXJyb3JzID0gYmIuZmV0Y2gyLm1pcnJvcl9mcm9tX3N0cmluZyhzZWxmLnJlY21pcnJvcnZhcikKKyAgICAgICAgdXJpcywgdWRzID0gYmIuZmV0Y2gyLmJ1aWxkX21pcnJvcnVyaXMoZmV0Y2hlciwgbWlycm9ycywgc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaXMsIFsnaHR0cDovL0FBQUEvQS9BL0EvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3onLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9CQkJCL0IvQi9CL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9BQUFBL0EvQS9BL0IvQi9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiddKQorCitjbGFzcyBGZXRjaGVyTG9jYWxUZXN0KEZldGNoZXJUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlZiB0b3VjaChmbik6CisgICAgICAgICAgICB3aXRoIGZpbGUoZm4sICdhJyk6CisgICAgICAgICAgICAgICAgb3MudXRpbWUoZm4sIE5vbmUpCisKKyAgICAgICAgc3VwZXIoRmV0Y2hlckxvY2FsVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmxvY2Fsc3JjZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2xvY2Fsc3JjJykKKyAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5sb2NhbHNyY2RpcikKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdhJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnYicpKQorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicpKQorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicsICdjJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnZGlyJywgJ2QnKSkKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdkaXInLCAnc3ViZGlyJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnZGlyJywgJ3N1YmRpcicsICdlJykpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZJTEVTUEFUSCIsIHNlbGYubG9jYWxzcmNkaXIpCisKKyAgICBkZWYgZmV0Y2hVbnBhY2soc2VsZiwgdXJpcyk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaCh1cmlzLCBzZWxmLmQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgZmxzdCA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudW5wYWNrZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZsc3QuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIHNlbGYudW5wYWNrZGlyKSkKKyAgICAgICAgZmxzdC5zb3J0KCkKKyAgICAgICAgcmV0dXJuIGZsc3QKKworICAgIGRlZiB0ZXN0X2xvY2FsKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hJywgJ2ZpbGU6Ly9kaXIvYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYScsICdkaXIvYyddKQorCisgICAgZGVmIHRlc3RfbG9jYWxfd2lsZGNhcmQoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2EnLCAnZmlsZTovL2Rpci8qJ10pCisgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYnJva2VuIC0gaXQgc2hvdWxkIHJldHVybiBbJ2EnLCAnZGlyL2MnLCAnZGlyL2QnLCAnZGlyL3N1YmRpci9lJ10KKyAgICAgICAgIyBzZWUgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydhJywgJ2InLCAnZGlyL2MnLCAnZGlyL2QnLCAnZGlyL3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9kaXIoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2EnLCAnZmlsZTovL2RpciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYScsICdkaXIvYycsICdkaXIvZCcsICdkaXIvc3ViZGlyL2UnXSkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3N1YmRpcihzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vZGlyL3N1YmRpciddKQorICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiAtIGl0IHNob3VsZCByZXR1cm4gWydkaXIvc3ViZGlyL2UnXQorICAgICAgICAjIHNlZSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9zdWJkaXJfZmlsZShzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vZGlyL3N1YmRpci9lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydkaXIvc3ViZGlyL2UnXSkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3N1YmRpcnBhcmFtKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hO3N1YmRpcj1iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ2Jhci9hJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9kZWVwc3ViZGlycGFyYW0oc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2Rpci9zdWJkaXIvZTtzdWJkaXI9YmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydiYXIvZGlyL3N1YmRpci9lJ10pCisKK2NsYXNzIEZldGNoZXJOZXR3b3JrVGVzdChGZXRjaGVyVGVzdCk6CisKKyAgICBpZiBvcy5lbnZpcm9uLmdldCgiQkJfU0tJUF9ORVRURVNUUyIpID09ICJ5ZXMiOgorICAgICAgICBwcmludCgiVW5zZXQgQkJfU0tJUF9ORVRURVNUUyB0byBydW4gbmV0d29yayB0ZXN0cyIpCisgICAgZWxzZToKKyAgICAgICAgZGVmIHRlc3RfZmV0Y2goc2VsZik6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjEudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjEudGFyLmd6IiksIDU3ODkyKQorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiIsICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMS50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIoc2VsZi51bnBhY2tkaXIgKyAiL2JpdGJha2UtMS4wLyIpKSwgOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIoc2VsZi51bnBhY2tkaXIgKyAiL2JpdGJha2UtMS4xLyIpKSwgOSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZSIpCisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vaW52YWxpZC55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgICAgIGRlZiB0ZXN0X2ZldGNoX21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vaW52YWxpZDIueW9jdG9wcm9qZWN0Lm9yZy8gXG4gaHR0cDovL2ludmFsaWQyLnlvY3RvcHJvamVjdC5vcmcvLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9maWxlX21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBmaWxlOi8vL3NvbWUxd2hlcmUvIFxuIGZpbGU6Ly8vc29tZTF3aGVyZS8uKiBmaWxlOi8vc29tZTJ3aGVyZS8gXG4gZmlsZTovL3NvbWUyd2hlcmUvLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBvcy5ta2RpcihzZWxmLmRsZGlyICsgIi9zb21lMndoZXJlIikKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgICAgIGRlZiB0ZXN0X2ZldGNoX3ByZW1pcnJvcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiaHR0cDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisKKyAgICAgICAgZGVmIGdpdGZldGNoZXIoc2VsZiwgdXJsMSwgdXJsMik6CisgICAgICAgICAgICBkZWYgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKToKKyAgICAgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgICAgICAgICByZXZpc2lvbiA9IGJiLnByb2Nlc3MucnVuKCJnaXQgcmV2LXBhcnNlIEhFQUQiLCBzaGVsbD1UcnVlLCBjd2Q9c2VsZi51bnBhY2tkaXIgKyAiL2dpdCIpWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCAiMjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIpCisKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIsICIxIikKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlNSQ1JFViIsICIyNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsMV0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKQorICAgICAgICAgICAgIyBXaXBlIG91dCB0aGUgZGxkaXIgY2xvbmUgYW5kIHRoZSB1bnBhY2tlZCBzb3VyY2UsIHR1cm4gb2ZmIHRoZSBuZXR3b3JrIGFuZCBjaGVjayBtaXJyb3IgdGFyYmFsbCB3b3JrcworICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi5kbGRpciArICIvZ2l0Mi8iKQorICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi51bnBhY2tkaXIpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgIjEiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFt1cmwyXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBjaGVja3JldmlzaW9uKHNlbGYsIGZldGNoZXIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2goc2VsZik6CisgICAgICAgICAgICB1cmwxID0gdXJsMiA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgc2VsZi5naXRmZXRjaGVyKHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfZ29vZHNyY3JldihzZWxmKToKKyAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgbWF0Y2hlcyByZXY9IHBhcmFtZXRlcgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTtyZXY9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIKKyAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX2JhZHNyY3JldihzZWxmKToKKyAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgZG9lcyBub3QgbWF0Y2ggcmV2PSBwYXJhbWV0ZXIKKyAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PWRlYWQwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5mZXRjaC5GZXRjaEVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfdGFnYW5kcmV2KHNlbGYpOgorICAgICAgICAgICAgIyBTUkNSRVYgaXMgc2V0IGJ1dCBkb2VzIG5vdCBtYXRjaCByZXY9IHBhcmFtZXRlcgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTtyZXY9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNTt0YWc9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmZldGNoLkZldGNoRXJyb3IsIHNlbGYuZ2l0ZmV0Y2hlciwgdXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3Ioc2VsZik6CisgICAgICAgICAgICB1cmwxID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgICAgICB1cmwyID0gImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSBcbiIpCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIodXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3IyKHNlbGYpOgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIFxuIikKKyAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX3ByZW1pcnJvcjMoc2VsZik6CisgICAgICAgICAgICByZWFsdXJsID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgICAgICBkdW1teXVybCA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgc2VsZi5zb3VyY2VkaXIgPSBzZWxmLnVucGFja2Rpci5yZXBsYWNlKCJ1bnBhY2tlZCIsICJzb3VyY2VtaXJyb3IuZ2l0IikKKyAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYudGVtcGRpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY2xvbmUgJXMgJXMgMj4gL2Rldi9udWxsIiAlIChyZWFsdXJsLCBzZWxmLnNvdXJjZWRpciksIHNoZWxsPVRydWUpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgIiVzIGdpdDovLyVzO3Byb3RvY29sPWZpbGUgXG4iICUgKGR1bW15dXJsLCBzZWxmLnNvdXJjZWRpcikpCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIoZHVtbXl1cmwsIGR1bW15dXJsKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJnaXRzbTovL2dpdC55b2N0b3Byb2plY3Qub3JnL2dpdC1zdWJtb2R1bGUtdGVzdDtyZXY9ZjEyZTU3ZjJlZGYwYWE1MzRjZjE2MTZmYTk4M2QxNjVhOTJiMDg0MiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgICMgUHJldmlvdXMgY3dkIGhhcyBiZWVuIGRlbGV0ZWQKKyAgICAgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShzZWxmLnVucGFja2RpcikpCisgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKworICAgICAgICBkZWYgdGVzdF90cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyBGYWxzZSB3aGVuIHRoZSBob3N0IElTIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgdXJsID0gImdpdDovL1NvbWVzZXJ2ZXIub3JnL2ZvbztyZXY9MSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0FMTE9XRURfTkVUV09SS1MiLCAic2VydmVyMS5vcmcgc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3Rfd2lsZF90cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyB0cnVlIHdoZW4gdGhlICouaG9zdCBJUyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnICouc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3RfcHJlZml4X3dpbGRfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwcmVmaXggbWF0Y2hlcyAqLmhvc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vZ2l0LlNvbWVzZXJ2ZXIub3JnL2ZvbztyZXY9MSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0FMTE9XRURfTkVUV09SS1MiLCAic2VydmVyMS5vcmcgKi5zb21lc2VydmVyLm9yZyBzZXJ2ZXIyLm9yZyBzZXJ2ZXIzLm9yZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworICAgICAgICBkZWYgdGVzdF90d29fcHJlZml4X3dpbGRfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwcmVmaXggbWF0Y2hlcyAqLmhvc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vc29tZXRoaW5nLmdpdC5Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnICouc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3RfdW50cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyBGYWxzZSB3aGVuIHRoZSBob3N0IGlzIE5PVCBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworICAgICAgICBkZWYgdGVzdF93aWxkX3VudHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgRmFsc2Ugd2hlbiB0aGUgaG9zdCBpcyBOT1QgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vKi5zb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworCitjbGFzcyBVUkxIYW5kbGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGF0YXRhYmxlID0geworICAgICAgICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW5kZXguaHRtbCIgOiAoJ2h0dHAnLCAnd3d3Lmdvb2dsZS5jb20nLCAnL2luZGV4Lmh0bWwnLCAnJywgJycsIHt9KSwKKyAgICAgICAiY3ZzOi8vYW5vbmN2c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZyIgOiAoJ2N2cycsICdjdnMuaGFuZGhlbGRzLm9yZycsICcvY3ZzJywgJ2Fub25jdnMnLCAnJywgeydtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJ30pLAorICAgICAgICJjdnM6Ly9hbm9uY3ZzOmFub255bW91c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7dGFnPVYwLTk5LTgxO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2ciIDogKCdjdnMnLCAnY3ZzLmhhbmRoZWxkcy5vcmcnLCAnL2N2cycsICdhbm9uY3ZzJywgJ2Fub255bW91cycsIHsndGFnJzogJ1YwLTk5LTgxJywgJ21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnfSksCisgICAgICAgImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7YnJhbmNoPUBmb28iIDogKCdnaXQnLCAnZ2l0Lm9wZW5lbWJlZGRlZC5vcmcnLCAnL2JpdGJha2UnLCAnJywgJycsIHsnYnJhbmNoJzogJ0Bmb28nfSkKKyAgICB9CisKKyAgICBkZWYgdGVzdF9kZWNvZGV1cmwoc2VsZik6CisgICAgICAgIGZvciBrLCB2IGluIHNlbGYuZGF0YXRhYmxlLml0ZW1zKCk6CisgICAgICAgICAgICByZXN1bHQgPSBiYi5mZXRjaC5kZWNvZGV1cmwoaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB2KQorCisgICAgZGVmIHRlc3RfZW5jb2RldXJsKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmRhdGF0YWJsZS5pdGVtcygpOgorICAgICAgICAgICAgcmVzdWx0ID0gYmIuZmV0Y2guZW5jb2RldXJsKHYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgaykKKworY2xhc3MgRmV0Y2hMYXRlc3RWZXJzaW9uVGVzdChGZXRjaGVyVGVzdCk6CisKKyAgICB0ZXN0X2dpdF91cmlzID0geworICAgICAgICAjIHZlcnNpb24gcGF0dGVybiAiWC5ZLloiCisgICAgICAgICgibXgtMS4wIiwgImdpdDovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214LmdpdDticmFuY2g9bXgtMS40IiwgIjliMWRiNmI4MDYwYmQwMGIxMjFhNjkyZjk0MjQwNGEyNGFlMjk2MGYiLCAiIikKKyAgICAgICAgICAgIDogIjEuOTkuNCIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJ2WC5ZIgorICAgICAgICAoIm10ZC11dGlscyIsICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IiwgImNhMzllYjFkOThlNzM2MTA5YzY0ZmY5YzFhYTJhNmVjY2EyMjJkOGYiLCAiIikKKyAgICAgICAgICAgIDogIjEuNS4wIiwKKyAgICAgICAgIyB2ZXJzaW9uIHBhdHRlcm4gInBrZ19uYW1lLVguWSIKKyAgICAgICAgKCJwcmVzZW50cHJvdG8iLCAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vcHJlc2VudHByb3RvIiwgIjI0ZjNhNTZlNTQxYjBhOWU2YzZlZTc2MDgxZjQ0MTIyMWExMjBlZjkiLCAiIikKKyAgICAgICAgICAgIDogIjEuMCIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJwa2dfbmFtZS12WC5ZLloiCisgICAgICAgICgiZHRjIiwgImdpdDovL2dpdC5xZW11Lm9yZy9kdGMuZ2l0IiwgIjY1Y2M0ZDI3NDhhMmMyZTZmMjdmMWNmMzllMDdhNWRiYWJkODBlYmYiLCAiIikKKyAgICAgICAgICAgIDogIjEuNC4wIiwKKyAgICAgICAgIyBjb21iaW5hdGlvbiB2ZXJzaW9uIHBhdHRlcm4KKyAgICAgICAgKCJzeXNwcm9mIiwgImdpdDovL2dpdC5nbm9tZS5vcmcvc3lzcHJvZiIsICJjZDQ0ZWU2NjQ0YzM2NDE1MDdmYjUzYjhhMmE2OTEzN2YyOTcxMjE5IiwgIiIpCisgICAgICAgICAgICA6ICIxLjIuMCIsCisgICAgICAgICgidS1ib290LW1raW1hZ2UiLCAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyO3Byb3RvY29sPWdpdCIsICI2MmMxNzVmYmI4YTBmOWE5MjZjODgyOTRlYTlmN2U4OGViODk4ZjZjIiwgIiIpCisgICAgICAgICAgICA6ICIyMDE0LjAxIiwKKyAgICAgICAgIyB2ZXJzaW9uIHBhdHRlcm4gInl5eXltbWRkIgorICAgICAgICAoIm1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIsICJnaXQ6Ly9naXQuZ25vbWUub3JnL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIsICI0ZWQxOWUxMWMyOTc1MTA1YjcxYjk1NjQ0MGFjZGIyNWQ0NmEzNDdkIiwgIiIpCisgICAgICAgICAgICA6ICIyMDEyMDYxNCIsCisgICAgICAgICMgcGFja2FnZXMgd2l0aCBhIHZhbGlkIEdJVFRBR1JFR0VYCisgICAgICAgICgieGY4Ni12aWRlby1vbWFwIiwgImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcvZHJpdmVyL3hmODYtdmlkZW8tb21hcCIsICJhZTAzOTRlNjg3ZjFhNzdlOTY2Y2Y3MmY4OTVkYTkxODQwZGZmYjhmIiwgIig/UDxwdmVyPihcZCtcLihcZFwuPykqKSkiKQorICAgICAgICAgICAgOiAiMC40LjMiLAorICAgICAgICAoImJ1aWxkLWFwcGxpYW5jZS1pbWFnZSIsICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5IiwgImIzN2RkNDUxYTUyNjIyZDViNTcwMTgzYTgxNTgzY2MzNGMyZmY1NTUiLCAiKD9QPHB2ZXI+KChbMC05XVtcLnxfXT8pK1swLTldKSkiKQorICAgICAgICAgICAgOiAiMTEuMC4wIiwKKyAgICAgICAgKCJjaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZSIsICJnaXQ6Ly9naXRodWIuY29tL2tlcmdvdGgvY2hrY29uZmlnO2JyYW5jaD1zeXNyb290IiwgImNkNDM3ZWNiZDg5ODZjODk0NDQyZjhmY2UxZTAwNjFlMjBmMDRkZWUiLCAiY2hrY29uZmlnXC0oP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKSIpCisgICAgICAgICAgICA6ICIxLjMuNTkiLAorICAgICAgICAoInJlbWFrZSIsICJnaXQ6Ly9naXRodWIuY29tL3JvY2t5L3JlbWFrZS5naXQiLCAiZjA1NTA4ZTUyMTk4N2M4NDk0YzkyZDljMjg3MWFlYzQ2MzA3ZDUxZCIsICIoP1A8cHZlcj4oXGQrXC4oXGQrXC4pKlxkKihcK2RiZ1xkKyhcLlxkKykqKSopKSIpCisgICAgICAgICAgICA6ICIzLjgyK2RiZzAuOSIsCisgICAgfQorCisgICAgdGVzdF93Z2V0X3VyaXMgPSB7CisgICAgICAgICMgcGFja2FnZXMgd2l0aCB2ZXJzaW9ucyBpbnNpZGUgZGlyZWN0b3J5IG5hbWUKKyAgICAgICAgKCJ1dGlsLWxpbnV4IiwgImh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L3YyLjIzL3V0aWwtbGludXgtMi4yNC4yLnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIyLjI0LjIiLAorICAgICAgICAoImVuY2hhbnQiLCAiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL2Rvd25sb2Fkcy9lbmNoYW50LzEuNi4wL2VuY2hhbnQtMS42LjAudGFyLmd6IiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMS42LjAiLAorICAgICAgICAoImNtYWtlIiwgImh0dHA6Ly93d3cuY21ha2Uub3JnL2ZpbGVzL3YyLjgvY21ha2UtMi44LjEyLjEudGFyLmd6IiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMi44LjEyLjEiLAorICAgICAgICAjIHBhY2thZ2VzIHdpdGggdmVyc2lvbnMgb25seSBpbiBjdXJyZW50IGRpcmVjdG9yeQorICAgICAgICAoImVnbGljIiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9lZ2xpYmMvZWdsaWJjLTIuMTgtc3ZucjIzNzg3LnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIyLjE5IiwKKyAgICAgICAgKCJnbnUtY29uZmlnIiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9nbnUtY29uZmlnL2dudS1jb25maWctMjAxMjA4MTQudGFyLmJ6MiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjIwMTIwODE0IiwKKyAgICAgICAgIyBwYWNrYWdlcyB3aXRoICI5OSIgaW4gdGhlIG5hbWUgb2YgcG9zc2libGUgdmVyc2lvbgorICAgICAgICAoInB1bHNlYXVkaW8iLCAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzL3B1bHNlYXVkaW8tNC4wLnRhci54eiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjUuMCIsCisgICAgICAgICgieHNlcnZlci14b3JnIiwgImh0dHA6Ly94b3JnLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9pbmRpdmlkdWFsL3hzZXJ2ZXIveG9yZy1zZXJ2ZXItMS4xNS4xLnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIxLjE1LjEiLAorICAgICAgICAjIHBhY2thZ2VzIHdpdGggdmFsaWQgUkVHRVhfVVJJIGFuZCBSRUdFWAorICAgICAgICAoImN1cHMiLCAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8xLjcuMi9jdXBzLTEuNy4yLXNvdXJjZS50YXIuYnoyIiwgImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUucGhwIiwgIig/UDxuYW1lPmN1cHNcLSkoP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKVwtc291cmNlXC50YXJcLmd6IikKKyAgICAgICAgICAgIDogIjIuMC4wIiwKKyAgICAgICAgKCJkYiIsICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi01LjMuMjEudGFyLmd6IiwgImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9wcm9kdWN0cy9iZXJrZWxleWRiL2Rvd25sb2Fkcy9pbmRleC0wODI5NDQuaHRtbCIsICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9vdG4vYmVya2VsZXktZGIvKD9QPG5hbWU+ZGItKSg/UDxwdmVyPigoXGQrW1wuXC1fXSopKykpXC50YXJcLmd6IikKKyAgICAgICAgICAgIDogIjYuMS4xOSIsCisgICAgfQorICAgIGlmIG9zLmVudmlyb24uZ2V0KCJCQl9TS0lQX05FVFRFU1RTIikgPT0gInllcyI6CisgICAgICAgIHByaW50KCJVbnNldCBCQl9TS0lQX05FVFRFU1RTIHRvIHJ1biBuZXR3b3JrIHRlc3RzIikKKyAgICBlbHNlOgorICAgICAgICBkZWYgdGVzdF9naXRfbGF0ZXN0X3ZlcnNpb25zdHJpbmcoc2VsZik6CisgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnRlc3RfZ2l0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiU1JDUkVWIiwga1syXSkKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJHSVRUQUdSRUdFWCIsIGtbM10pCisgICAgICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBwdXB2ZXI9IHVkLm1ldGhvZC5sYXRlc3RfdmVyc2lvbnN0cmluZyh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIHZlcnN0cmluZyA9IHB1cHZlclswXQorICAgICAgICAgICAgICAgIHIgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKHYsIHZlcnN0cmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAtMSBvciByID09IDAsIG1zZz0iUGFja2FnZSAlcywgdmVyc2lvbjogJXMgPD0gJXMiICUgKGtbMF0sIHYsIHZlcnN0cmluZykpCisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9sYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmKToKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYudGVzdF93Z2V0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUkVHRVhfVVJJIiwga1syXSkKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJSRUdFWCIsIGtbM10pCisgICAgICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBwdXB2ZXIgPSB1ZC5tZXRob2QubGF0ZXN0X3ZlcnNpb25zdHJpbmcodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICB2ZXJzdHJpbmcgPSBwdXB2ZXJbMF0KKyAgICAgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wX3N0cmluZyh2LCB2ZXJzdHJpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gLTEgb3IgciA9PSAwLCBtc2c9IlBhY2thZ2UgJXMsIHZlcnNpb246ICVzIDw9ICVzIiAlIChrWzBdLCB2LCB2ZXJzdHJpbmcpKQorCisKK2NsYXNzIEZldGNoQ2hlY2tTdGF0dXNUZXN0KEZldGNoZXJUZXN0KToKKyAgICB0ZXN0X3dnZXRfdXJpcyA9IFsiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8xLjcuMi9jdXBzLTEuNy4yLXNvdXJjZS50YXIuYnoyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS9pcHB0b29sL2lwcHRvb2wtMjAxMzA3MzEtbGludXgtdWJ1bnR1LWk2ODYudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5jdXBzLm9yZy8iLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvc2F0by9zYXRvLWVuZ2luZS0wLjEudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3NhdG8vc2F0by1lbmdpbmUtMC4yLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9zYXRvL3NhdG8tZW5naW5lLTAuMy50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL3lvY3RvcHJvamVjdC5vcmcvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly95b2N0b3Byb2plY3Qub3JnL2RvY3VtZW50YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvb3BrZy9vcGtnLTAuMS43LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9vcGtnL29wa2ctMC4zLjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2F1dG9jb25mL2F1dG9jb25mLTIuNjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2NoZXNzL2dudWNoZXNzLTUuMDgudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2dtcC9nbXAtNC4wLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgaWYgb3MuZW52aXJvbi5nZXQoIkJCX1NLSVBfTkVUVEVTVFMiKSA9PSAieWVzIjoKKyAgICAgICAgcHJpbnQoIlVuc2V0IEJCX1NLSVBfTkVUVEVTVFMgdG8gcnVuIG5ldHdvcmsgdGVzdHMiKQorICAgIGVsc2U6CisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9jaGVja3N0YXR1cyhzZWxmKToKKyAgICAgICAgICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHNlbGYudGVzdF93Z2V0X3VyaXMsIHNlbGYuZCkKKyAgICAgICAgICAgIGZvciB1IGluIHNlbGYudGVzdF93Z2V0X3VyaXM6CisgICAgICAgICAgICAgICAgdWQgPSBmZXRjaC51ZFt1XQorICAgICAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKKyAgICAgICAgICAgICAgICByZXQgPSBtLmNoZWNrc3RhdHVzKGZldGNoLCB1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXQsIG1zZz0iVVJJICVzLCBjYW4ndCBjaGVjayBzdGF0dXMiICUgKHUpKQorCisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9jaGVja3N0YXR1c19jb25uZWN0aW9uX2NhY2hlKHNlbGYpOgorICAgICAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoQ29ubmVjdGlvbkNhY2hlCisKKyAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUgPSBGZXRjaENvbm5lY3Rpb25DYWNoZSgpCisgICAgICAgICAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzZWxmLnRlc3Rfd2dldF91cmlzLCBzZWxmLmQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlID0gY29ubmVjdGlvbl9jYWNoZSkKKworICAgICAgICAgICAgZm9yIHUgaW4gc2VsZi50ZXN0X3dnZXRfdXJpczoKKyAgICAgICAgICAgICAgICB1ZCA9IGZldGNoLnVkW3VdCisgICAgICAgICAgICAgICAgbSA9IHVkLm1ldGhvZAorICAgICAgICAgICAgICAgIHJldCA9IG0uY2hlY2tzdGF0dXMoZmV0Y2gsIHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJldCwgbXNnPSJVUkkgJXMsIGNhbid0IGNoZWNrIHN0YXR1cyIgJSAodSkpCisKKyAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUuY2xvc2VfY29ubmVjdGlvbnMoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90ZXN0cy9wYXJzZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlYjc2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkKQEAgLTAsMCArMSwxNDcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVGVzdCBmb3IgbGliL2JiL3BhcnNlLworIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgb3MKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuVGVzdFBhcnNlJykKKworaW1wb3J0IGJiLnBhcnNlCitpbXBvcnQgYmIuZGF0YQoraW1wb3J0IGJiLnNpZ2dlbgorCitjbGFzcyBQYXJzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGVzdGZpbGUgPSAiIiIKK0EgPSAiMSIKK0IgPSAiMiIKK2RvX2luc3RhbGwoKSB7CisJZWNobyAiaGVsbG8iCit9CisKK0MgPSAiMyIKKyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBiYi5wYXJzZS5zaWdnZW4gPSBiYi5zaWdnZW4uaW5pdChzZWxmLmQpCisKKyAgICBkZWYgcGFyc2VoZWxwZXIoc2VsZiwgY29udGVudCwgc3VmZml4ID0gIi5iYiIpOgorCisgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoc3VmZml4ID0gc3VmZml4KQorICAgICAgICBmLndyaXRlKGNvbnRlbnQpCisgICAgICAgIGYuZmx1c2goKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmRpcm5hbWUoZi5uYW1lKSkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiB0ZXN0X3BhcnNlX3NpbXBsZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkEiLCBUcnVlKSwgIjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJCIiwgVHJ1ZSksICIyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiQyIsIFRydWUpLCAiMyIpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9pbmNvbXBsZXRlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICB0ZXN0ZmlsZUIgPSBzZWxmLnRlc3RmaWxlLnJlcGxhY2UoIn0iLCAiIikKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIodGVzdGZpbGVCKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLnBhcnNlLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisKKyAgICBvdmVycmlkZXRlc3QgPSAiIiIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImEiCitSUkVDT01NRU5EU18ke1BOfV9saWJjID0gImIiCitPVkVSUklERVMgPSAibGliYzoke1BOfSIKK1BOID0gImd0aysiCisiIiIKKworICAgIGRlZiB0ZXN0X3BhcnNlX292ZXJyaWRlcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi5vdmVycmlkZXRlc3QpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYiIpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYiIpCisgICAgICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU19ndGsrIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYyIpCisKKyAgICBvdmVycmlkZXRlc3QyID0gIiIiCitFWFRSQV9PRUNPTkYgPSAiIgorRVhUUkFfT0VDT05GX2NsYXNzLXRhcmdldCA9ICJiIgorRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgYyIKKyIiIgorCisgICAgZGVmIHRlc3RfcGFyc2Vfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLm92ZXJyaWRldGVzdDIpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBkLmFwcGVuZFZhcigiRVhUUkFfT0VDT05GIiwgIiBkIikKKyAgICAgICAgZC5zZXRWYXIoIk9WRVJSSURFUyIsICJjbGFzcy10YXJnZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJFWFRSQV9PRUNPTkYiLCBUcnVlKSwgImIgYyBkIikKKworICAgIG92ZXJyaWRldGVzdDMgPSAiIiIKK0RFU0NSSVBUSU9OID0gIkEiCitERVNDUklQVElPTl8ke1BOfS1kZXYgPSAiJHtERVNDUklQVElPTn0gQiIKK1BOID0gImJjIgorIiIiCisKKyAgICBkZWYgdGVzdF9wYXJzZV9jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYub3ZlcnJpZGV0ZXN0MykKKyAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJERVNDUklQVElPTl9iYy1kZXYiLCBUcnVlKSwgIkEgQiIpCisgICAgICAgIGQuc2V0VmFyKCJERVNDUklQVElPTiIsICJFIikKKyAgICAgICAgZC5zZXRWYXIoIkRFU0NSSVBUSU9OX2JjLWRldiIsICJDIEQiKQorICAgICAgICBkLnNldFZhcigiT1ZFUlJJREVTIiwgImJjLWRldiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkRFU0NSSVBUSU9OIiwgVHJ1ZSksICJDIEQiKQorCisKKyAgICBjbGFzc2V4dGVuZCA9ICIiIgorVkFSX3Zhcl9vdmVycmlkZTEgPSAiQiIKK0VYVFJBID0gIjpvdmVycmlkZTEiCitPVkVSUklERVMgPSAibm90aGluZyR7RVhUUkF9IgorCitCQkNMQVNTRVhURU5EID0gIiMjI0NMQVNTIyMjIgorIiIiCisgICAgY2xhc3NleHRlbmRfYmJjbGFzcyA9ICIiIgorRVhUUkEgPSAiIgorcHl0aG9uICgpIHsKKyAgICBkLnJlbmFtZVZhcigiVkFSX3ZhciIsICJWQVJfdmFyMiIpCit9CisiIiIKKworICAgICMKKyAgICAjIFRlc3QgYmFzZWQgdXBvbiBhIHJlYWwgd29ybGQgZGF0YSBjb3JydXB0aW9uIGlzc3VlLiBPbmUKKyAgICAjIGRhdGEgc3RvcmUgY2hhbmdpbmcgYSB2YXJpYWJsZSBwb2tlZCB0aHJvdWdoIGludG8gYSBkaWZmZXJlbnQgZGF0YQorICAgICMgc3RvcmUuIFRoaXMgdGVzdCBjYXNlIHJlcGxpY2F0ZXMgdGhhdCBpc3N1ZSB3aGVyZSB0aGUgdmFsdWUgJ0InIHdvdWxkIAorICAgICMgYmVjb21lIHVuc2V0L2Rpc2FwcGVhci4KKyAgICAjCisgICAgZGVmIHRlc3RfcGFyc2VfY2xhc3NleHRlbmRfY29udGFtaW5hdGlvbihzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLmNsYXNzZXh0ZW5kX2JiY2xhc3MsIHN1ZmZpeD0iLmJiY2xhc3MiKQorICAgICAgICAjY2xzbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoY2xzLm5hbWUpLnJlcGxhY2UoIi5iYmNsYXNzIiwgIiIpCisgICAgICAgIHNlbGYuY2xhc3NleHRlbmQgPSBzZWxmLmNsYXNzZXh0ZW5kLnJlcGxhY2UoIiMjI0NMQVNTIyMjIiwgY2xzLm5hbWUpCisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYuY2xhc3NleHRlbmQpCisgICAgICAgIGFsbGRhdGEgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpCisgICAgICAgIGQxID0gYWxsZGF0YVsnJ10KKyAgICAgICAgZDIgPSBhbGxkYXRhW2Nscy5uYW1lXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmdldFZhcigiVkFSX3ZhciIsIFRydWUpLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZ2V0VmFyKCJWQVJfdmFyIiwgVHJ1ZSksIE5vbmUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGVzdHMvdXRpbHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzE1MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3Rlc3RzL3V0aWxzLnB5CkBAIC0wLDAgKzEsMzc4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciB1dGlscy5weQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGJiCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQorCitjbGFzcyBWZXJDbXBTdHJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdmVyY21wc3RyaW5nKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxJywgJzInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZygnMicsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA+IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEnLCAnMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEnLCAnMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMScsICcxX3AyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMCcsICcxLjArMS4xLWJldGExJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMScsICcxLjArMS4xLWJldGExJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA+IDApCisKKyAgICBkZWYgdGVzdF9leHBsb2RlX2RlcF92ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgY29ycmVjdHJlc3VsdCA9IHsiZm9vIiA6IFsiPSAxLjEwIl19CisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICg9IDEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICg9MS4xMCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKCJmb28gKCA9IDEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPTEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPSAxLjEwICkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKCJmb28gKCA9MS4xMCApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisKKyAgICBkZWYgdGVzdF92ZXJjbXBfc3RyaW5nX29wKHNlbGYpOgorICAgICAgICBjb21wYXJlb3BzID0gWygnMScsICcxJywgJz0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc9PScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJyE9JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJz4nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzEnLCAnPCcsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc+PScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJzw9JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc9PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICchPScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz4nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc8JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz4+JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPDwnLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPj0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc8PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc9JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJz09JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJyE9JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPicsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc8JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPj4nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPDwnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc+PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc8PScsIFRydWUpXQorCisgICAgICAgIGZvciBhcmcxLCBhcmcyLCBvcCwgY29ycmVjdHJlc3VsdCBpbiBjb21wYXJlb3BzOgorICAgICAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZ19vcChhcmcxLCBhcmcyLCBvcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0LCAndmVyY21wX3N0cmluZ19vcCgiJXMiLCAiJXMiLCAiJXMiKSAhPSAlcycgJSAoYXJnMSwgYXJnMiwgb3AsIGNvcnJlY3RyZXN1bHQpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBjbGVhcmx5IGludmFsaWQgb3BlcmF0b3IgcmFpc2VzIGFuIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi51dGlscy5WZXJzaW9uU3RyaW5nRXhjZXB0aW9uLCBiYi51dGlscy52ZXJjbXBfc3RyaW5nX29wLCAnMCcsICcwJywgJyQnKQorCisKK2NsYXNzIFBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3Vuc2FmZV9kZWxldGVfcGF0aChzZWxmKToKKyAgICAgICAgY2hlY2tpdGVtcyA9IFsoJy8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJy8vJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvLy8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0Y3dkKCkuY291bnQob3Muc2VwKSAqICgnLi4nICsgb3Muc2VwKSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKG9zLmVudmlyb24uZ2V0KCdIT01FJywgJy9ob21lL3Rlc3QnKSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvaG9tZS9zb21lb25lJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvaG9tZS9vdGhlci8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJy9ob21lL290aGVyL3N1YmRpcicsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJycsIEZhbHNlKV0KKyAgICAgICAgZm9yIGFyZzEsIGNvcnJlY3RyZXN1bHQgaW4gY2hlY2tpdGVtczoKKyAgICAgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLl9jaGVja191bnNhZmVfZGVsZXRlX3BhdGgoYXJnMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0LCAnX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aCgiJXMiKSAhPSAlcycgJSAoYXJnMSwgY29ycmVjdHJlc3VsdCkpCisKKworY2xhc3MgRWRpdE1ldGFkYXRhRmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgX29yaWdmaWxlID0gIiIiCisjIEEgY29tbWVudAorSEVMTE8gPSAib2xkdmFsdWUiCisKK1RISVMgPSAidGhhdCIKKworIyBBbm90aGVyIGNvbW1lbnQKK05PQ0hBTkdFID0gInNhbWV2YWx1ZSIKK09USEVSID0gJ2Fub3RoZXJ2YWx1ZScKKworTVVMVElMSU5FID0gImExIFxcCisgICAgICAgICAgICAgYTIgXFwKKyAgICAgICAgICAgICBhMyIKKworTVVMVElMSU5FMiA6PSAiIFxcCisgICAgICAgICAgICAgICBiMSBcXAorICAgICAgICAgICAgICAgYjIgXFwKKyAgICAgICAgICAgICAgIGIzIFxcCisgICAgICAgICAgICAgICAiCisKKworTVVMVElMSU5FMyA9ICIgXFwKKyAgICAgICAgICAgICAgYzEgXFwKKyAgICAgICAgICAgICAgYzIgXFwKKyAgICAgICAgICAgICAgYzMgXFwKKyIKKworZG9fZnVuY3Rpb25uYW1lKCkgeworICAgIGNvbW1hbmQxICR7VkFMMX0gJHtWQUwyfQorICAgIGNvbW1hbmQyICR7VkFMM30gJHtWQUw0fQorfQorIiIiCisgICAgZGVmIF90ZXN0ZWRpdGZpbGUoc2VsZiwgdmFydmFsdWVzLCBjb21wYXJldG8sIGR1bW15dmFycz1Ob25lKToKKyAgICAgICAgaWYgZHVtbXl2YXJzIGlzIE5vbmU6CisgICAgICAgICAgICBkdW1teXZhcnMgPSBbXQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgICAgICB0Zi53cml0ZShzZWxmLl9vcmlnZmlsZSkKKyAgICAgICAgICAgIHRmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YXJjYWxscyA9IFtdCisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9maWxlKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YXJuYW1lLCB2YXJ2YWx1ZXMsICdDYWxsYmFjayBjYWxsZWQgZm9yIHZhcmlhYmxlICVzIG5vdCBpbiB0aGUgbGlzdCEnICUgdmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2YXJuYW1lLCBkdW1teXZhcnMsICdDYWxsYmFjayBjYWxsZWQgZm9yIHZhcmlhYmxlICVzIGluIGR1bW15IGxpc3QhJyAlIHZhcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHZhcmNhbGxzLmFwcGVuZCh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFydmFsdWVzW3Zhcm5hbWVdCisKKyAgICAgICAgICAgICAgICBiYi51dGlscy5lZGl0X21ldGFkYXRhX2ZpbGUodGYubmFtZSwgdmFydmFsdWVzLmtleXMoKSwgaGFuZGxlX2ZpbGUpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRmLm5hbWUpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIG1vZGZpbGUgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgIyBFbnN1cmUgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSBleHBlY3RlZCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBhcmV0by5zcGxpdGxpbmVzKFRydWUpLCBtb2RmaWxlKQorICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3YXMgY2FsbGVkIGZvciBldmVyeSB2YXJpYWJsZSB3ZSBhc2tlZCBmb3IKKyAgICAgICAgICAgICAgICAjIChwbHVzIGFsbG93IHRlc3RpbmcgYmVoYXZpb3VyIHdoZW4gYSByZXF1ZXN0ZWQgdmFyaWFibGUgaXMgbm90IHByZXNlbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodmFydmFsdWVzLmtleXMoKSksIHNvcnRlZCh2YXJjYWxscyArIGR1bW15dmFycykpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zi5uYW1lKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfbm9jaGFuZ2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBmaWxlIGRvZXNuJ3QgZ2V0IG1vZGlmaWVkIHdpdGggbm90aGluZyB0byBkbworICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoe30sIHNlbGYuX29yaWdmaWxlKQorICAgICAgICAjIFRlc3QgZmlsZSBkb2Vzbid0IGdldCBtb2RpZmllZCB3aXRoIG9ubHkgZHVtbXkgdmFyaWFibGVzCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J0RVTU1ZMSc6ICgnc2hvdWxkX25vdF9zZXQnLCBOb25lLCAwLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdEVU1NWTInOiAoJ3Nob3VsZF9ub3Rfc2V0X2FnYWluJywgTm9uZSwgMCwgVHJ1ZSl9LCBzZWxmLl9vcmlnZmlsZSwgZHVtbXl2YXJzPVsnRFVNTVkxJywgJ0RVTU1ZMiddKQorICAgICAgICAjIFRlc3QgZmlsZSBkb2Vzbid0IGdldCBtb2RpZmllZCB3aXRoIHNvbWUgdGhlIHNhbWUgdmFsdWVzCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J1RISVMnOiAoJ3RoYXQnLCBOb25lLCAwLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdPVEhFUic6ICgnYW5vdGhlcnZhbHVlJywgTm9uZSwgMCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FMyc6ICgnICAgICAgICAgICAgICAgYzEgICAgICAgICAgICAgICBjMiAgICAgICAgICAgICAgIGMzJywgTm9uZSwgNCwgRmFsc2UpfSwgc2VsZi5fb3JpZ2ZpbGUpCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfMShzZWxmKToKKworICAgICAgICBuZXdmaWxlMSA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm5ld3ZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAiIFxcCisgICAgICAgICAgICAgIGMxIFxcCisgICAgICAgICAgICAgIGMyIFxcCisgICAgICAgICAgICAgIGMzIFxcCisiCisKK2RvX2Z1bmN0aW9ubmFtZSgpIHsKKyAgICBjb21tYW5kMSAke1ZBTDF9ICR7VkFMMn0KKyAgICBjb21tYW5kMiAke1ZBTDN9ICR7VkFMNH0KK30KKyIiIgorICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoeydIRUxMTyc6ICgnbmV3dmFsdWUnLCBOb25lLCA0LCBUcnVlKX0sIG5ld2ZpbGUxKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfMihzZWxmKToKKworICAgICAgICBuZXdmaWxlMiA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICIgXFwKKyAgICBkMSBcXAorICAgIGQyIFxcCisgICAgZDMgXFwKKyAgICAiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAibm93c2luZ2xlIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgY29tbWFuZDEgJHtWQUwxfSAke1ZBTDJ9CisgICAgY29tbWFuZDIgJHtWQUwzfSAke1ZBTDR9Cit9CisiIiIKKyAgICAgICAgc2VsZi5fdGVzdGVkaXRmaWxlKHsnTVVMVElMSU5FJzogKFsnZDEnLCdkMicsJ2QzJ10sIE5vbmUsIDQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUzJzogKCdub3dzaW5nbGUnLCBOb25lLCA0LCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdOT1RQUkVTRU5UJzogKFsnYScsICdiJ10sIE5vbmUsIDQsIEZhbHNlKX0sIG5ld2ZpbGUyLCBkdW1teXZhcnM9WydOT1RQUkVTRU5UJ10pCisKKworICAgIGRlZiB0ZXN0X2VkaXRfbWV0YWRhdGFfZmlsZV8zKHNlbGYpOgorCisgICAgICAgIG5ld2ZpbGUzID0gIiIiCisjIEEgY29tbWVudAorSEVMTE8gPSAib2xkdmFsdWUiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICJ5ZXRhbm90aGVydmFsdWUiCisKK01VTFRJTElORSA9ICJlMSBcXAorICAgICAgICAgICAgIGUyIFxcCisgICAgICAgICAgICAgZTMgXFwKKyAgICAgICAgICAgICAiCisKK01VTFRJTElORTIgOj0gImYxIFxcCitcdGYyIFxcCitcdCIKKworCitNVUxUSUxJTkUzID0gIiBcXAorICAgICAgICAgICAgICBjMSBcXAorICAgICAgICAgICAgICBjMiBcXAorICAgICAgICAgICAgICBjMyBcXAorIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgb3RoZXJjb21tYW5kX29uZSBhIGIgYworICAgIG90aGVyY29tbWFuZF90d28gZCBlIGYKK30KKyIiIgorCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J2RvX2Z1bmN0aW9ubmFtZSgpJzogKFsnb3RoZXJjb21tYW5kX29uZSBhIGIgYycsICdvdGhlcmNvbW1hbmRfdHdvIGQgZSBmJ10sIE5vbmUsIDQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUyJzogKFsnZjEnLCAnZjInXSwgTm9uZSwgJ1x0JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FJzogKFsnZTEnLCAnZTInLCAnZTMnXSwgTm9uZSwgLTEsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1RISVMnOiAoTm9uZSwgTm9uZSwgMCwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ09USEVSJzogKCd5ZXRhbm90aGVydmFsdWUnLCBOb25lLCAwLCBUcnVlKX0sIG5ld2ZpbGUzKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfNChzZWxmKToKKworICAgICAgICBuZXdmaWxlNCA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKKyIiIgorCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J05PQ0hBTkdFJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUzJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdUSElTJzogKCd0aGF0JywgTm9uZSwgMCwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2Z1bmN0aW9ubmFtZSgpJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKX0sIG5ld2ZpbGU0KQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhKHNlbGYpOgorICAgICAgICBuZXdmaWxlNSA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gImhpdGhlcmUiCisKKyMgQSBuZXcgY29tbWVudAorVEhJUyArPSAidGhhdCIKKworIyBBbm90aGVyIGNvbW1lbnQKK05PQ0hBTkdFID0gInNhbWV2YWx1ZSIKK09USEVSID0gJ2Fub3RoZXJ2YWx1ZScKKworTVVMVElMSU5FID0gImExIFxcCisgICAgICAgICAgICAgYTIgXFwKKyAgICAgICAgICAgICBhMyIKKworTVVMVElMSU5FMiA6PSAiIFxcCisgICAgICAgICAgICAgICBiMSBcXAorICAgICAgICAgICAgICAgYjIgXFwKKyAgICAgICAgICAgICAgIGIzIFxcCisgICAgICAgICAgICAgICAiCisKKworTVVMVElMSU5FMyA9ICIgXFwKKyAgICAgICAgICAgICAgYzEgXFwKKyAgICAgICAgICAgICAgYzIgXFwKKyAgICAgICAgICAgICAgYzMgXFwKKyIKKworTkVXVkFSID0gInZhbHVlIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgY29tbWFuZDEgJHtWQUwxfSAke1ZBTDJ9CisgICAgY29tbWFuZDIgJHtWQUwzfSAke1ZBTDR9Cit9CisiIiIKKworCisgICAgICAgIGRlZiBoYW5kbGVfdmFyKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ1RISVMnOgorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnIyBBIG5ldyBjb21tZW50XG4nKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lID09ICdkb19mdW5jdGlvbm5hbWUoKSc6CisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCdORVdWQVIgPSAidmFsdWUiXG4nKQorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnXG4nKQorICAgICAgICAgICAgdmFsdWVpdGVtID0gdmFydmFsdWVzLmdldCh2YXJuYW1lLCBOb25lKQorICAgICAgICAgICAgaWYgdmFsdWVpdGVtOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZWl0ZW0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIChvcmlndmFsdWUsIG9wLCAwLCBUcnVlKQorCisgICAgICAgIHZhcnZhbHVlcyA9IHsnSEVMTE8nOiAoJ2hpdGhlcmUnLCBOb25lLCAwLCBUcnVlKSwgJ1RISVMnOiAoJ3RoYXQnLCAnKz0nLCAwLCBUcnVlKX0KKyAgICAgICAgdmFybGlzdCA9IFsnSEVMTE8nLCAnVEhJUycsICdkb19mdW5jdGlvbm5hbWUoKSddCisgICAgICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKHNlbGYuX29yaWdmaWxlLnNwbGl0bGluZXMoVHJ1ZSksIHZhcmxpc3QsIGhhbmRsZV92YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGRhdGVkLCAnTGlzdCBzaG91bGQgYmUgdXBkYXRlZCBidXQgaXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdsaW5lcywgbmV3ZmlsZTUuc3BsaXRsaW5lcyhUcnVlKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdGluZm9pbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWE0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi90aW5mb2lsLnB5CkBAIC0wLDAgKzEsMTA0IEBACisjIHRpbmZvaWw6IGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGNvb2tlciBmb3IgYml0YmFrZS1iYXNlZCBjb21tYW5kLWxpbmUgdXRpbGl0aWVzCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGJiLmNhY2hlCitpbXBvcnQgYmIuY29va2VyCitpbXBvcnQgYmIucHJvdmlkZXJzCitpbXBvcnQgYmIudXRpbHMKK2Zyb20gYmIuY29va2VyIGltcG9ydCBzdGF0ZSwgQkJDb29rZXIsIENvb2tlckZlYXR1cmVzCitmcm9tIGJiLmNvb2tlcmRhdGEgaW1wb3J0IENvb2tlckNvbmZpZ3VyYXRpb24sIENvbmZpZ1BhcmFtZXRlcnMKK2ltcG9ydCBiYi5mZXRjaDIKKworY2xhc3MgVGluZm9pbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0PXN5cy5zdGRvdXQsIHRyYWNraW5nPUZhbHNlKToKKyAgICAgICAgIyBOZWVkZWQgdG8gYXZvaWQgZGVwcmVjYXRpb24gd2FybmluZ3Mgd2l0aCBweXRob24gMi42CisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgIyBTZXQgdXAgbG9nZ2luZworICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlJykKKyAgICAgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGUpCisgICAgICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICBpZiBvdXRwdXQuaXNhdHR5KCk6CisgICAgICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICAgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQorICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisKKyAgICAgICAgc2VsZi5jb25maWcgPSBDb29rZXJDb25maWd1cmF0aW9uKCkKKyAgICAgICAgY29uZmlncGFyYW1zID0gVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMocGFyc2Vfb25seT1UcnVlKQorICAgICAgICBzZWxmLmNvbmZpZy5zZXRDb25maWdQYXJhbWV0ZXJzKGNvbmZpZ3BhcmFtcykKKyAgICAgICAgc2VsZi5jb25maWcuc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlbGYucmVnaXN0ZXJfaWRsZV9mdW5jdGlvbikKKyAgICAgICAgZmVhdHVyZXMgPSBbXQorICAgICAgICBpZiB0cmFja2luZzoKKyAgICAgICAgICAgIGZlYXR1cmVzLmFwcGVuZChDb29rZXJGZWF0dXJlcy5CQVNFREFUQVNUT1JFX1RSQUNLSU5HKQorICAgICAgICBzZWxmLmNvb2tlciA9IEJCQ29va2VyKHNlbGYuY29uZmlnLCBmZWF0dXJlcykKKyAgICAgICAgc2VsZi5jb25maWdfZGF0YSA9IHNlbGYuY29va2VyLmRhdGEKKyAgICAgICAgYmIucHJvdmlkZXJzLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorICAgICAgICBzZWxmLmNvb2tlcl9kYXRhID0gTm9uZQorCisgICAgZGVmIHJlZ2lzdGVyX2lkbGVfZnVuY3Rpb24oc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2VSZWNpcGVzKHNlbGYpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQYXJzaW5nIHJlY2lwZXMuLiIpCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBzZWxmLmNvb2tlci5zdGF0ZSBpbiAoc3RhdGUuaW5pdGlhbCwgc3RhdGUucGFyc2luZyk6CisgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGUoKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLmNvb2tlci5zaHV0ZG93bigpCisgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiZG9uZS5cbiIpCisKKyAgICAgICAgc2VsZi5jb29rZXJfZGF0YSA9IHNlbGYuY29va2VyLnJlY2lwZWNhY2hlCisKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBjb25maWdfb25seSA9IEZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYuY29va2VyX2RhdGE6CisgICAgICAgICAgICBpZiBjb25maWdfb25seToKKyAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5wYXJzZUNvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyX2RhdGEgPSBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlUmVjaXBlcygpCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY29va2VyLnNodXRkb3duKGZvcmNlPVRydWUpCisgICAgICAgIHNlbGYuY29va2VyLnBvc3Rfc2VydmUoKQorICAgICAgICBzZWxmLmNvb2tlci51bmxvY2tCaXRiYWtlKCkKKworY2xhc3MgVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMoQ29uZmlnUGFyYW1ldGVycyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipvcHRpb25zKToKKyAgICAgICAgc2VsZi5pbml0aWFsX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHN1cGVyKFRpbmZvaWxDb25maWdQYXJhbWV0ZXJzLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgY2xhc3MgRHVtbXlPcHRpb25zOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluaXRpYWxfb3B0aW9ucyk6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIGluaXRpYWxfb3B0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgICAgIHJldHVybiBEdW1teU9wdGlvbnMoc2VsZi5pbml0aWFsX29wdGlvbnMpLCBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDgwNWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE3IEBACisjCisjIEJpdEJha2UgVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvYnVpbGRpbmZvaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzEzZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weQpAQCAtMCwwICsxLDEzMzkgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IGJiCitpbXBvcnQgcmUKK2ltcG9ydCBvcworCitvcy5lbnZpcm9uWyJESkFOR09fU0VUVElOR1NfTU9EVUxFIl0gPSAidG9hc3Rlci50b2FzdGVybWFpbi5zZXR0aW5ncyIKKworCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKworCitkZWYgX2NvbmZpZ3VyZV90b2FzdGVyKCk6CisgICAgIiIiIEFkZCB0b2FzdGVyIHRvIHN5cyBwYXRoIGZvciBpbXBvcnRpbmcgbW9kdWxlcworICAgICIiIgorICAgIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSksICd0b2FzdGVyJykpCitfY29uZmlndXJlX3RvYXN0ZXIoKQorCitmcm9tIHRvYXN0ZXIub3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRhc2ssIFJlY2lwZSwgTGF5ZXJfVmVyc2lvbiwgTGF5ZXIsIFRhcmdldCwgTG9nTWVzc2FnZSwgSGVscFRleHQKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBUYXJnZXRfSW1hZ2VfRmlsZSwgQnVpbGRBcnRpZmFjdAorZnJvbSB0b2FzdGVyLm9ybS5tb2RlbHMgaW1wb3J0IFZhcmlhYmxlLCBWYXJpYWJsZUhpc3RvcnkKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBQYWNrYWdlLCBQYWNrYWdlX0ZpbGUsIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZSwgVGFyZ2V0X0ZpbGUKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBUYXNrX0RlcGVuZGVuY3ksIFBhY2thZ2VfRGVwZW5kZW5jeQorZnJvbSB0b2FzdGVyLm9ybS5tb2RlbHMgaW1wb3J0IFJlY2lwZV9EZXBlbmRlbmN5CisKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0Citmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCdWlsZFJlcXVlc3QKKworZnJvbSBiYi5tc2cgaW1wb3J0IEJCTG9nRm9ybWF0dGVyIGFzIGZvcm1hdHRlcgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbiwgY29ubmVjdGlvbgorCisjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKyMgdGhlIGxvZ2dlciBuYW1lIGlzIHN0YW5kYXJkIHRocm91Z2hvdXQgQml0QmFrZQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJMb2dnZXIiKQorCisKK2NsYXNzIE5vdEV4aXN0aW5nKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBPUk1XcmFwcGVyKG9iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgY3JlYXRlcyB0aGUgZGljdGlvbmFyaWVzIG5lZWRlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YWJhc2UKKyAgICAgICAgZm9sbG93aW5nIHRoZSBmb3JtYXQgZGVmaW5lZCBieSB0aGUgRGphbmdvIG1vZGVscy4gSXQgaXMgYWxzbyB1c2VkIHRvIHNhdmUgdGhpcworICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YWJhc2UuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubGF5ZXJfdmVyc2lvbl9vYmplY3RzID0gW10KKyAgICAgICAgc2VsZi50YXNrX29iamVjdHMgPSB7fQorICAgICAgICBzZWxmLnJlY2lwZV9vYmplY3RzID0ge30KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2J1aWxkX2tleSgqKmt3YXJncyk6CisgICAgICAgIGtleSA9ICIwIgorICAgICAgICBmb3IgayBpbiBzb3J0ZWQoa3dhcmdzLmtleXMoKSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGt3YXJnc1trXSwgbW9kZWxzLk1vZGVsKToKKyAgICAgICAgICAgICAgICBrZXkgKz0gIi0lZCIgJSBrd2FyZ3Nba10uaWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2V5ICs9ICItJXMiICUgc3RyKGt3YXJnc1trXSkKKyAgICAgICAgcmV0dXJuIGtleQorCisKKyAgICBkZWYgX2NhY2hlZF9nZXRfb3JfY3JlYXRlKHNlbGYsIGNsYXp6LCAqKmt3YXJncyk6CisgICAgICAgICIiIiBUaGlzIGlzIGEgbWVtb3J5LWNhY2hlZCBnZXRfb3JfY3JlYXRlLiBXZSBhc3N1bWUgdGhhdCB0aGUgb2JqZWN0cyB3aWxsIG5vdCBiZSBjcmVhdGVkIGluIHRoZQorICAgICAgICAgICAgZGF0YWJhc2UgdGhyb3VnaCBhbnkgb3RoZXIgbWVhbnMuCisgICAgICAgICIiIgorCisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKGNsYXp6LCBtb2RlbHMuTW9kZWwpLCAiX2NhY2hlZF9nZXRfb3JfY3JlYXRlIG5lZWRzIHRvIGdldCB0aGUgY2xhc3MgYXMgZmlyc3QgYXJndW1lbnQiCisKKyAgICAgICAga2V5ID0gT1JNV3JhcHBlci5fYnVpbGRfa2V5KCoqa3dhcmdzKQorICAgICAgICBkaWN0bmFtZSA9ICJvYmplY3RzXyVzIiAlIGNsYXp6Ll9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBkaWN0bmFtZSBpbiB2YXJzKHNlbGYpLmtleXMoKToKKyAgICAgICAgICAgIHZhcnMoc2VsZilbZGljdG5hbWVdID0ge30KKworICAgICAgICBjcmVhdGVkID0gRmFsc2UKKyAgICAgICAgaWYgbm90IGtleSBpbiB2YXJzKHNlbGYpW2RpY3RuYW1lXS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldID0gY2xhenoub2JqZWN0cy5jcmVhdGUoKiprd2FyZ3MpCisgICAgICAgICAgICBjcmVhdGVkID0gVHJ1ZQorCisgICAgICAgIHJldHVybiAodmFycyhzZWxmKVtkaWN0bmFtZV1ba2V5XSwgY3JlYXRlZCkKKworCisgICAgZGVmIF9jYWNoZWRfZ2V0KHNlbGYsIGNsYXp6LCAqKmt3YXJncyk6CisgICAgICAgICIiIiBUaGlzIGlzIGEgbWVtb3J5LWNhY2hlZCBnZXQuIFdlIGFzc3VtZSB0aGF0IHRoZSBvYmplY3RzIHdpbGwgbm90IGNoYW5nZSAgaW4gdGhlIGRhdGFiYXNlIGJldHdlZW4gZ2V0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKGNsYXp6LCBtb2RlbHMuTW9kZWwpLCAiX2NhY2hlZF9nZXQgbmVlZHMgdG8gZ2V0IHRoZSBjbGFzcyBhcyBmaXJzdCBhcmd1bWVudCIKKworICAgICAgICBrZXkgPSBPUk1XcmFwcGVyLl9idWlsZF9rZXkoKiprd2FyZ3MpCisgICAgICAgIGRpY3RuYW1lID0gIm9iamVjdHNfJXMiICUgY2xhenouX19uYW1lX18KKworICAgICAgICBpZiBub3QgZGljdG5hbWUgaW4gdmFycyhzZWxmKS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXSA9IHt9CisKKyAgICAgICAgaWYgbm90IGtleSBpbiB2YXJzKHNlbGYpW2RpY3RuYW1lXS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldID0gY2xhenoub2JqZWN0cy5nZXQoKiprd2FyZ3MpCisKKyAgICAgICAgcmV0dXJuIHZhcnMoc2VsZilbZGljdG5hbWVdW2tleV0KKworICAgICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCisgICAgIyB3ZSBkaXNhYmxlIGRldGVjdGlvbiBvZiBubyBzZWxmIHVzZSBpbiBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgbWV0aG9kcyBhY3R1YWxseSB3b3JrIG9uIHRoZSBvYmplY3QKKyAgICAjIGV2ZW4gaWYgdGhleSBkb24ndCB0b3VjaCBzZWxmIGFueXdoZXJlCisKKyAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCisgICAgIyB3ZSBkbyBub3QgZm9sbG93IHRoZSBweXRob24gY29udmVudGlvbnMgZm9yIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbiBkdWUgdG8gbG9uZyBsaW5lcyBoZXJlCisKKyAgICBkZWYgY3JlYXRlX2J1aWxkX29iamVjdChzZWxmLCBidWlsZF9pbmZvLCBicmJlLCBwcm9qZWN0X2lkKToKKyAgICAgICAgYXNzZXJ0ICdtYWNoaW5lJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnZGlzdHJvJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnZGlzdHJvX3ZlcnNpb24nIGluIGJ1aWxkX2luZm8KKyAgICAgICAgYXNzZXJ0ICdzdGFydGVkX29uJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnY29va2VyX2xvZ19wYXRoJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnYnVpbGRfbmFtZScgaW4gYnVpbGRfaW5mbworICAgICAgICBhc3NlcnQgJ2JpdGJha2VfdmVyc2lvbicgaW4gYnVpbGRfaW5mbworCisgICAgICAgIHByaiA9IE5vbmUKKyAgICAgICAgYnVpbGRyZXF1ZXN0ID0gTm9uZQorICAgICAgICBpZiBicmJlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICMgdGhpcyBidWlsZCB3YXMgdHJpZ2dlcmVkIGJ5IGEgcmVxdWVzdCBmcm9tIGEgdXNlcgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IGJyYmUgaXMgJXMiICUgYnJiZSkKKyAgICAgICAgICAgIGJyLCBfID0gYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicikKKyAgICAgICAgICAgIHByaiA9IGJ1aWxkcmVxdWVzdC5wcm9qZWN0CisKKyAgICAgICAgZWxpZiBwcm9qZWN0X2lkIGlzIG5vdCBOb25lOiAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhbiBleHRlcm5hbCBzeXN0ZW0gZm9yIGEgc3BlY2lmaWMgcHJvamVjdAorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IHByb2plY3QgaXMgJXMiICUgcHJqKQorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IHByb2plY3RfaWQpCisKKyAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhIGxlZ2FjeSBzeXN0ZW0sIG9yIGNvbW1hbmQgbGluZSBpbnRlcmFjdGl2ZSBtb2RlCisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0X2RlZmF1bHRfcHJvamVjdCgpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgImJ1aWxkaW5mb2hlbHBlcjogcHJvamVjdCBpcyBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRvICVzIiAlIHByaikKKworCisgICAgICAgIGlmIGJ1aWxkcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJ1aWxkID0gYnVpbGRyZXF1ZXN0LmJ1aWxkCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRpbmcgZXhpc3RpbmcgYnVpbGQsIHdpdGggJXMiLCBidWlsZF9pbmZvKQorICAgICAgICAgICAgYnVpbGQucHJvamVjdCA9IHByagorICAgICAgICAgICAgYnVpbGQubWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10KKyAgICAgICAgICAgIGJ1aWxkLmRpc3Rybz1idWlsZF9pbmZvWydkaXN0cm8nXQorICAgICAgICAgICAgYnVpbGQuZGlzdHJvX3ZlcnNpb249YnVpbGRfaW5mb1snZGlzdHJvX3ZlcnNpb24nXQorICAgICAgICAgICAgYnVpbGQuY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddCisgICAgICAgICAgICBidWlsZC5idWlsZF9uYW1lPWJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXQorICAgICAgICAgICAgYnVpbGQuYml0YmFrZV92ZXJzaW9uPWJ1aWxkX2luZm9bJ2JpdGJha2VfdmVyc2lvbiddCisgICAgICAgICAgICBidWlsZC5zYXZlKCkKKworICAgICAgICAgICAgVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGQpLmRlbGV0ZSgpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm89YnVpbGRfaW5mb1snZGlzdHJvJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm9fdmVyc2lvbj1idWlsZF9pbmZvWydkaXN0cm9fdmVyc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1idWlsZF9pbmZvWydzdGFydGVkX29uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249YnVpbGRfaW5mb1snc3RhcnRlZF9vbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfbmFtZT1idWlsZF9pbmZvWydidWlsZF9uYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249YnVpbGRfaW5mb1snYml0YmFrZV92ZXJzaW9uJ10pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IGJ1aWxkIGlzIGNyZWF0ZWQgJXMiICUgYnVpbGQpCisKKyAgICAgICAgaWYgYnVpbGRyZXF1ZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYnVpbGRyZXF1ZXN0LmJ1aWxkID0gYnVpbGQKKyAgICAgICAgICAgIGJ1aWxkcmVxdWVzdC5zYXZlKCkKKworICAgICAgICByZXR1cm4gYnVpbGQKKworICAgIGRlZiBjcmVhdGVfdGFyZ2V0X29iamVjdHMoc2VsZiwgdGFyZ2V0X2luZm8pOgorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiB0YXJnZXRfaW5mbworICAgICAgICBhc3NlcnQgJ3RhcmdldHMnIGluIHRhcmdldF9pbmZvCisKKyAgICAgICAgdGFyZ2V0cyA9IFtdCisgICAgICAgIGZvciB0Z3RfbmFtZSBpbiB0YXJnZXRfaW5mb1sndGFyZ2V0cyddOgorICAgICAgICAgICAgdGd0X29iamVjdCA9IFRhcmdldC5vYmplY3RzLmNyZWF0ZSggYnVpbGQgPSB0YXJnZXRfaW5mb1snYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRndF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2UgPSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHRndF9vYmplY3QpCisgICAgICAgIHJldHVybiB0YXJnZXRzCisKKyAgICBkZWYgdXBkYXRlX2J1aWxkX29iamVjdChzZWxmLCBidWlsZCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGQsQnVpbGQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVycm9ycywgaW50KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh3YXJuaW5ncywgaW50KQorCisgICAgICAgIG91dGNvbWUgPSBCdWlsZC5TVUNDRUVERUQKKyAgICAgICAgaWYgZXJyb3JzIG9yIHRhc2tmYWlsdXJlczoKKyAgICAgICAgICAgIG91dGNvbWUgPSBCdWlsZC5GQUlMRUQKKworICAgICAgICBidWlsZC5jb21wbGV0ZWRfb24gPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZC5vdXRjb21lID0gb3V0Y29tZQorICAgICAgICBidWlsZC5zYXZlKCkKKworICAgIGRlZiB1cGRhdGVfdGFyZ2V0X3NldF9saWNlbnNlX21hbmlmZXN0KHNlbGYsIHRhcmdldCwgbGljZW5zZV9tYW5pZmVzdF9wYXRoKToKKyAgICAgICAgdGFyZ2V0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aCA9IGxpY2Vuc2VfbWFuaWZlc3RfcGF0aAorICAgICAgICB0YXJnZXQuc2F2ZSgpCisKKyAgICBkZWYgZ2V0X3VwZGF0ZV90YXNrX29iamVjdChzZWxmLCB0YXNrX2luZm9ybWF0aW9uLCBtdXN0X2V4aXN0ID0gRmFsc2UpOgorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiB0YXNrX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAncmVjaXBlJyBpbiB0YXNrX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAndGFza19uYW1lJyBpbiB0YXNrX2luZm9ybWF0aW9uCisKKyAgICAgICAgIyB3ZSB1c2UgbXVzdF9leGlzdCBpbmZvIGZvciBkYXRhYmFzZSBsb29rLXVwIG9wdGltaXphdGlvbgorICAgICAgICB0YXNrX29iamVjdCwgY3JlYXRlZCA9IHNlbGYuX2NhY2hlZF9nZXRfb3JfY3JlYXRlKFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZD10YXNrX2luZm9ybWF0aW9uWydidWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlPXRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFza19uYW1lPXRhc2tfaW5mb3JtYXRpb25bJ3Rhc2tfbmFtZSddCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGlmIGNyZWF0ZWQgYW5kIG11c3RfZXhpc3Q6CisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydkZWJ1ZyddID0gImJ1aWxkIGlkICVkLCByZWNpcGUgaWQgJWQiICUgKHRhc2tfaW5mb3JtYXRpb25bJ2J1aWxkJ10ucGssIHRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddLnBrKQorICAgICAgICAgICAgcmFpc2UgTm90RXhpc3RpbmcoIlRhc2sgb2JqZWN0IGNyZWF0ZWQgd2hlbiBleHBlY3RlZCB0byBleGlzdCIsIHRhc2tfaW5mb3JtYXRpb24pCisKKyAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiBpbiB2YXJzKHRhc2tfb2JqZWN0KToKKyAgICAgICAgICAgIGlmIHYgaW4gdGFza19pbmZvcm1hdGlvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgdmFycyh0YXNrX29iamVjdClbdl0gIT0gdGFza19pbmZvcm1hdGlvblt2XToKKyAgICAgICAgICAgICAgICAgICAgdmFycyh0YXNrX29iamVjdClbdl0gPSB0YXNrX2luZm9ybWF0aW9uW3ZdCisgICAgICAgICAgICAgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICMgdXBkYXRlIHNldHNjZW5lLXJlbGF0ZWQgaW5mb3JtYXRpb24gaWYgdGhlIHRhc2sgaGFzIGEgc2V0c2NlbmUKKyAgICAgICAgaWYgdGFza19vYmplY3Qub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCBhbmQgMSA9PSB0YXNrX29iamVjdC5nZXRfcmVsYXRlZF9zZXRzY2VuZSgpLmNvdW50KCk6CisgICAgICAgICAgICB0YXNrX29iamVjdC5vdXRjb21lID0gVGFzay5PVVRDT01FX0NBQ0hFRAorICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgICAgIG91dGNvbWVfdGFza19zZXRzY2VuZSA9IFRhc2sub2JqZWN0cy5nZXQodGFza19leGVjdXRlZD1UcnVlLCBidWlsZCA9IHRhc2tfb2JqZWN0LmJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlID0gdGFza19vYmplY3QucmVjaXBlLCB0YXNrX25hbWU9dGFza19vYmplY3QudGFza19uYW1lKyJfc2V0c2NlbmUiKS5vdXRjb21lCisgICAgICAgICAgICBpZiBvdXRjb21lX3Rhc2tfc2V0c2NlbmUgPT0gVGFzay5PVVRDT01FX1NVQ0NFU1M6CisgICAgICAgICAgICAgICAgdGFza19vYmplY3Quc3N0YXRlX3Jlc3VsdCA9IFRhc2suU1NUQVRFX1JFU1RPUkVECisgICAgICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG91dGNvbWVfdGFza19zZXRzY2VuZSA9PSBUYXNrLk9VVENPTUVfRkFJTEVEOgorICAgICAgICAgICAgICAgIHRhc2tfb2JqZWN0LnNzdGF0ZV9yZXN1bHQgPSBUYXNrLlNTVEFURV9GQUlMRUQKKyAgICAgICAgICAgICAgICBvYmplY3RfY2hhbmdlZCA9IFRydWUKKworICAgICAgICAjIG1hcmsgZG93biBkdXJhdGlvbiBpZiB3ZSBoYXZlIGEgc3RhcnQgdGltZSBhbmQgYSBjdXJyZW50IHRpbWUKKyAgICAgICAgaWYgJ3N0YXJ0X3RpbWUnIGluIHRhc2tfaW5mb3JtYXRpb24ua2V5cygpIGFuZCAnZW5kX3RpbWUnIGluIHRhc2tfaW5mb3JtYXRpb24ua2V5cygpOgorICAgICAgICAgICAgZHVyYXRpb24gPSB0YXNrX2luZm9ybWF0aW9uWydlbmRfdGltZSddIC0gdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddCisgICAgICAgICAgICB0YXNrX29iamVjdC5lbGFwc2VkX3RpbWUgPSBkdXJhdGlvbgorICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBkZWwgdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddCisgICAgICAgICAgICBkZWwgdGFza19pbmZvcm1hdGlvblsnZW5kX3RpbWUnXQorCisgICAgICAgIGlmIG9iamVjdF9jaGFuZ2VkOgorICAgICAgICAgICAgdGFza19vYmplY3Quc2F2ZSgpCisgICAgICAgIHJldHVybiB0YXNrX29iamVjdAorCisKKyAgICBkZWYgZ2V0X3VwZGF0ZV9yZWNpcGVfb2JqZWN0KHNlbGYsIHJlY2lwZV9pbmZvcm1hdGlvbiwgbXVzdF9leGlzdCA9IEZhbHNlKToKKyAgICAgICAgYXNzZXJ0ICdsYXllcl92ZXJzaW9uJyBpbiByZWNpcGVfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdmaWxlX3BhdGgnIGluIHJlY2lwZV9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3BhdGhmbGFncycgaW4gcmVjaXBlX2luZm9ybWF0aW9uCisKKyAgICAgICAgYXNzZXJ0IG5vdCByZWNpcGVfaW5mb3JtYXRpb25bJ2ZpbGVfcGF0aCddLnN0YXJ0c3dpdGgoIi8iKSAgICAgICMgd2Ugc2hvdWxkIGhhdmUgbGF5ZXItcmVsYXRpdmUgcGF0aHMgYXQgYWxsIHRpbWVzCisKKyAgICAgICAgcmVjaXBlX29iamVjdCwgY3JlYXRlZCA9IHNlbGYuX2NhY2hlZF9nZXRfb3JfY3JlYXRlKFJlY2lwZSwgbGF5ZXJfdmVyc2lvbj1yZWNpcGVfaW5mb3JtYXRpb25bJ2xheWVyX3ZlcnNpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg9cmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXSwgcGF0aGZsYWdzID0gcmVjaXBlX2luZm9ybWF0aW9uWydwYXRoZmxhZ3MnXSkKKyAgICAgICAgaWYgY3JlYXRlZCBhbmQgbXVzdF9leGlzdDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEV4aXN0aW5nKCJSZWNpcGUgb2JqZWN0IGNyZWF0ZWQgd2hlbiBleHBlY3RlZCB0byBleGlzdCIsIHJlY2lwZV9pbmZvcm1hdGlvbikKKworICAgICAgICBvYmplY3RfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIGZvciB2IGluIHZhcnMocmVjaXBlX29iamVjdCk6CisgICAgICAgICAgICBpZiB2IGluIHJlY2lwZV9pbmZvcm1hdGlvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgdmFycyhyZWNpcGVfb2JqZWN0KVt2XSA9IHJlY2lwZV9pbmZvcm1hdGlvblt2XQorCisgICAgICAgIGlmIG9iamVjdF9jaGFuZ2VkOgorICAgICAgICAgICAgcmVjaXBlX29iamVjdC5zYXZlKCkKKworICAgICAgICByZXR1cm4gcmVjaXBlX29iamVjdAorCisgICAgZGVmIGdldF91cGRhdGVfbGF5ZXJfdmVyc2lvbl9vYmplY3Qoc2VsZiwgYnVpbGRfb2JqLCBsYXllcl9vYmosIGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb24pOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9vYmosIEJ1aWxkKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsYXllcl9vYmosIExheWVyKQorICAgICAgICBhc3NlcnQgJ2JyYW5jaCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2NvbW1pdCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3ByaW9yaXR5JyBpbiBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAnbG9jYWxfcGF0aCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorCisgICAgICAgIGxheWVyX3ZlcnNpb25fb2JqZWN0LCBfID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCA9IGJ1aWxkX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyID0gbGF5ZXJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsnYnJhbmNoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgPSBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uWydjb21taXQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsncHJpb3JpdHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3BhdGggPSBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uWydsb2NhbF9wYXRoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5sYXllcl92ZXJzaW9uX29iamVjdHMuYXBwZW5kKGxheWVyX3ZlcnNpb25fb2JqZWN0KQorCisgICAgICAgIHJldHVybiBsYXllcl92ZXJzaW9uX29iamVjdAorCisgICAgZGVmIGdldF91cGRhdGVfbGF5ZXJfb2JqZWN0KHNlbGYsIGxheWVyX2luZm9ybWF0aW9uLCBicmJlKToKKyAgICAgICAgYXNzZXJ0ICduYW1lJyBpbiBsYXllcl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2xheWVyX2luZGV4X3VybCcgaW4gbGF5ZXJfaW5mb3JtYXRpb24KKworICAgICAgICBpZiBicmJlIGlzIE5vbmU6CisgICAgICAgICAgICBsYXllcl9vYmplY3QsIF8gPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bGF5ZXJfaW5mb3JtYXRpb25bJ25hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfaW5kZXhfdXJsPWxheWVyX2luZm9ybWF0aW9uWydsYXllcl9pbmRleF91cmwnXSkKKyAgICAgICAgICAgIHJldHVybiBsYXllcl9vYmplY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgd2UgYXJlIHVuZGVyIG1hbmFnZWQgbW9kZTsgd2UgbXVzdCBtYXRjaCB0aGUgbGF5ZXIgdXNlZCBpbiB0aGUgUHJvamVjdCBMYXllcgorICAgICAgICAgICAgYnJfaWQsIGJlX2lkID0gYnJiZS5zcGxpdCgiOiIpCisKKyAgICAgICAgICAgICMgZmluZCBsYXllciBieSBjaGVja291dCBwYXRoOworICAgICAgICAgICAgZnJvbSBibGRjb250cm9sIGltcG9ydCBiYmNvbnRyb2xsZXIKKyAgICAgICAgICAgIGJjID0gYmJjb250cm9sbGVyLmdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKHBrID0gYmVfaWQpCisKKyAgICAgICAgICAgICMgd2UgbWlnaHQgaGF2ZSBhIHJhY2UgY29uZGl0aW9uIGhlcmUsIGFzIHRoZSBwcm9qZWN0IGxheWVycyBtYXkgY2hhbmdlIGJldHdlZW4gdGhlIGJ1aWxkIHRyaWdnZXIgYW5kIHRoZSBhY3R1YWwgYnVpbGQgZXhlY3V0aW9uCisgICAgICAgICAgICAjIGJ1dCB3ZSBjYW4gb25seSBtYXRjaCBvbiB0aGUgbGF5ZXIgbmFtZSwgc28gdGhlIHdvcnN0IHRoaW5nIGNhbiBoYXBwZW4gaXMgYSBtaXMtaWRlbnRpZmljYXRpb24gb2YgdGhlIGxheWVyLCBub3QgYSB0b3RhbCBmYWlsdXJlCisKKyAgICAgICAgICAgICMgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CisgICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkKKyAgICAgICAgICAgIGZvciBicmwgaW4gYnVpbGRyZXF1ZXN0LmJybGF5ZXJfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihiYy5nZXRHaXRDbG9uZURpcmVjdG9yeShicmwuZ2l0dXJsLCBicmwuY29tbWl0KSwgYnJsLmRpcnBhdGgpCisgICAgICAgICAgICAgICAgIyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoLCB1bmxlc3MgcnVubmluZyBpbiBIRUFEIG1vZGUgd2hlcmUgdGhlIHBhdGggaXMgYWJzb2x1dGUKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKGJjLmJlLnNvdXJjZWRpciwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgIkxvY2FsZGlybmFtZSAlcyBsY2FsX3BhdGggJXMiICUgKGxvY2FsZGlybmFtZSwgbGF5ZXJfaW5mb3JtYXRpb25bJ2xvY2FsX3BhdGgnXSkpCisgICAgICAgICAgICAgICAgaWYgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgobGF5ZXJfaW5mb3JtYXRpb25bJ2xvY2FsX3BhdGgnXSk6CisgICAgICAgICAgICAgICAgICAgICMgd2UgbWF0Y2hlZCB0aGUgQlJMYXllciwgYnV0IHdlIG5lZWQgdGhlIGxheWVyX3ZlcnNpb24gdGhhdCBnZW5lcmF0ZWQgdGhpcyBCUjsgcmV2ZXJzZSBvZiB0aGUgUHJvamVjdC5zY2hlZHVsZV9idWlsZCgpCisgICAgICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgIk1hdGNoZWQgJXMgdG8gQlJsYXllciAlcyIgJSAocGZvcm1hdChsYXllcl9pbmZvcm1hdGlvblsibG9jYWxfcGF0aCJdKSwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBsIGluIGJ1aWxkcmVxdWVzdC5wcm9qZWN0LnByb2plY3RsYXllcl9zZXQuZmlsdGVyKGxheWVyY29tbWl0X19sYXllcl9fbmFtZSA9IGJybC5uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBsLmxheWVyY29tbWl0LmxheWVyLnZjc191cmwgPT0gYnJsLmdpdHVybCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBwbC5sYXllcmNvbW1pdC5sYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNhdmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcgorCisgICAgICAgICAgICByYWlzZSBOb3RFeGlzdGluZygiVW5pZGVudGlmaWVkIGxheWVyICVzIiAlIHBmb3JtYXQobGF5ZXJfaW5mb3JtYXRpb24pKQorCisKKyAgICBkZWYgc2F2ZV90YXJnZXRfZmlsZV9pbmZvcm1hdGlvbihzZWxmLCBidWlsZF9vYmosIHRhcmdldF9vYmosIGZpbGVkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0X29iaiwgVGFyZ2V0KQorICAgICAgICBkaXJzID0gZmlsZWRhdGFbJ2RpcnMnXQorICAgICAgICBmaWxlcyA9IGZpbGVkYXRhWydmaWxlcyddCisgICAgICAgIHN5bXMgPSBmaWxlZGF0YVsnc3ltcyddCisKKyAgICAgICAgIyB3ZSBpbnNlcnQgZGlyZWN0b3JpZXMsIG9yZGVyZWQgYnkgbmFtZSBkZXB0aAorICAgICAgICBmb3IgZCBpbiBzb3J0ZWQoZGlycywga2V5PWxhbWJkYSB4Omxlbih4Wy0xXS5zcGxpdCgiLyIpKSk6CisgICAgICAgICAgICAodXNlciwgZ3JvdXAsIHNpemUpID0gZFsxOjRdCisgICAgICAgICAgICBwZXJtaXNzaW9uID0gZFswXVsxOl0KKyAgICAgICAgICAgIHBhdGggPSBkWzRdLmxzdHJpcCgiLiIpCisgICAgICAgICAgICBpZiBsZW4ocGF0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICAjIHdlIGNyZWF0ZSB0aGUgcm9vdCBkaXJlY3RvcnkgYXMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgICAgICAgICBwYXRoID0gIi8iCisgICAgICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB0Zl9vYmouZGlyZWN0b3J5ID0gdGZfb2JqCisgICAgICAgICAgICAgICAgdGZfb2JqLnNhdmUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIi5qb2luKHBhdGguc3BsaXQoIi8iKVs6bGVuKHBhdGguc3BsaXQoIi8iKSkgLSAxXSkKKyAgICAgICAgICAgIGlmIGxlbihwYXJlbnRfcGF0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIgorICAgICAgICAgICAgcGFyZW50X29iaiA9IHNlbGYuX2NhY2hlZF9nZXQoVGFyZ2V0X0ZpbGUsIHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IHBhcmVudF9vYmopCisKKworICAgICAgICAjIHdlIGluc2VydCBmaWxlcworICAgICAgICBmb3IgZCBpbiBmaWxlczoKKyAgICAgICAgICAgICh1c2VyLCBncm91cCwgc2l6ZSkgPSBkWzE6NF0KKyAgICAgICAgICAgIHBlcm1pc3Npb24gPSBkWzBdWzE6XQorICAgICAgICAgICAgcGF0aCA9IGRbNF0ubHN0cmlwKCIuIikKKyAgICAgICAgICAgIHBhcmVudF9wYXRoID0gIi8iLmpvaW4ocGF0aC5zcGxpdCgiLyIpWzpsZW4ocGF0aC5zcGxpdCgiLyIpKSAtIDFdKQorICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfUkVHVUxBUgorICAgICAgICAgICAgaWYgZFswXS5zdGFydHN3aXRoKCdiJyk6CisgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfQkxPQ0sKKyAgICAgICAgICAgIGlmIGRbMF0uc3RhcnRzd2l0aCgnYycpOgorICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0NIQVJBQ1RFUgorICAgICAgICAgICAgaWYgZFswXS5zdGFydHN3aXRoKCdwJyk6CisgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRklGTworCisgICAgICAgICAgICB0Zl9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gaW5vZGV0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHBlcm1pc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9IHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IGdyb3VwKQorICAgICAgICAgICAgcGFyZW50X29iaiA9IHNlbGYuX2NhY2hlZF9nZXQoVGFyZ2V0X0ZpbGUsIHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorICAgICAgICAgICAgdGZfb2JqLmRpcmVjdG9yeSA9IHBhcmVudF9vYmoKKyAgICAgICAgICAgIHRmX29iai5zYXZlKCkKKworICAgICAgICAjIHdlIGluc2VydCBzeW1saW5rcworICAgICAgICBmb3IgZCBpbiBzeW1zOgorICAgICAgICAgICAgKHVzZXIsIGdyb3VwLCBzaXplKSA9IGRbMTo0XQorICAgICAgICAgICAgcGVybWlzc2lvbiA9IGRbMF1bMTpdCisgICAgICAgICAgICBwYXRoID0gZFs0XS5sc3RyaXAoIi4iKQorICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gZFs2XQorCisgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIi5qb2luKHBhdGguc3BsaXQoIi8iKVs6bGVuKHBhdGguc3BsaXQoIi8iKSkgLSAxXSkKKyAgICAgICAgICAgIGlmIG5vdCBmaWxldGFyZ2V0X3BhdGguc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICMgd2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGgsIGdldCBhIG5vcm1hbGl6ZWQgYWJzb2x1dGUgb25lCisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gcGFyZW50X3BhdGggKyAiLyIgKyBmaWxldGFyZ2V0X3BhdGgKKyAgICAgICAgICAgICAgICBmY3AgPSBmaWxldGFyZ2V0X3BhdGguc3BsaXQoIi8iKQorICAgICAgICAgICAgICAgIGZjcGwgPSBbXQorICAgICAgICAgICAgICAgIGZvciBpIGluIGZjcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA9PSAiLi4iOgorICAgICAgICAgICAgICAgICAgICAgICAgZmNwbC5wb3AoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmNwbC5hcHBlbmQoaSkKKyAgICAgICAgICAgICAgICBmaWxldGFyZ2V0X3BhdGggPSAiLyIuam9pbihmY3BsKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmdldCh0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYXRoID0gZmlsZXRhcmdldF9wYXRoKQorICAgICAgICAgICAgZXhjZXB0IFRhcmdldF9GaWxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAjIHdlIG1pZ2h0IGhhdmUgYW4gaW52YWxpZCBsaW5rOyBubyB3YXkgdG8gZGV0ZWN0IHRoaXMuIGp1c3Qgc2V0IGl0IHRvIE5vbmUKKyAgICAgICAgICAgICAgICBmaWxldGFyZ2V0X29iaiA9IE5vbmUKKworICAgICAgICAgICAgcGFyZW50X29iaiA9IFRhcmdldF9GaWxlLm9iamVjdHMuZ2V0KHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorCisgICAgICAgICAgICB0Zl9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfU1lNTElOSywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IHBhcmVudF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBzeW1fdGFyZ2V0ID0gZmlsZXRhcmdldF9vYmopCisKKworICAgIGRlZiBzYXZlX3RhcmdldF9wYWNrYWdlX2luZm9ybWF0aW9uKHNlbGYsIGJ1aWxkX29iaiwgdGFyZ2V0X29iaiwgcGFja2FnZWRpY3QsIHBrZ3BubWFwLCByZWNpcGVzKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0X29iaiwgVGFyZ2V0KQorCisgICAgICAgIGVycm9ybXNnID0gIiIKKyAgICAgICAgZm9yIHAgaW4gcGFja2FnZWRpY3Q6CisgICAgICAgICAgICBzZWFyY2huYW1lID0gcAorICAgICAgICAgICAgaWYgJ09QS0dOJyBpbiBwa2dwbm1hcFtwXS5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2VhcmNobmFtZSA9IHBrZ3BubWFwW3BdWydPUEtHTiddCisKKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXSwgY3JlYXRlZCA9IFBhY2thZ2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKCBidWlsZCA9IGJ1aWxkX29iaiwgbmFtZSA9IHNlYXJjaG5hbWUgKQorICAgICAgICAgICAgaWYgY3JlYXRlZCBvciBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2l6ZSA9PSAtMTogICAgIyBzYXZlIHRoZSBkYXRhIGFueXdheSB3ZSBjYW4sIG5vdCBqdXN0IGlmIGl0IHdhcyBub3QgY3JlYXRlZCBoZXJlOyBidWcgW1lPQ1RPICM2ODg3XQorICAgICAgICAgICAgICAgICMgZmlsbCBpbiBldmVyeXRoaW5nIHdlIGNhbiBmcm9tIHRoZSBydW50aW1lLXJldmVyc2UgcGFja2FnZSBkYXRhCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10ucmVjaXBlID0gcmVjaXBlc1twa2dwbm1hcFtwXVsnUE4nXV0KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnZlcnNpb24gPSBwa2dwbm1hcFtwXVsnUFYnXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uaW5zdGFsbGVkX25hbWUgPSBwCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5yZXZpc2lvbiA9IHBrZ3BubWFwW3BdWydQUiddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5saWNlbnNlID0gcGtncG5tYXBbcF1bJ0xJQ0VOU0UnXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2VjdGlvbiA9IHBrZ3BubWFwW3BdWydTRUNUSU9OJ10KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnN1bW1hcnkgPSBwa2dwbm1hcFtwXVsnU1VNTUFSWSddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5kZXNjcmlwdGlvbiA9IHBrZ3BubWFwW3BdWydERVNDUklQVElPTiddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5zaXplID0gaW50KHBrZ3BubWFwW3BdWydQS0dTSVpFJ10pCisKKyAgICAgICAgICAgICAgICAjIG5vIGZpbGVzIHJlY29yZGVkIGZvciB0aGlzIHBhY2thZ2UsIHNvIHNhdmUgZmlsZXMgaW5mbworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZmlsZV9vYmplY3RzID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRhcmdldHBhdGggaW4gcGtncG5tYXBbcF1bJ0ZJTEVTX0lORk8nXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldGZpbGVzaXplID0gcGtncG5tYXBbcF1bJ0ZJTEVTX0lORk8nXVt0YXJnZXRwYXRoXQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cy5hcHBlbmQoUGFja2FnZV9GaWxlKCBwYWNrYWdlID0gcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0YXJnZXRwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSB0YXJnZXRmaWxlc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYWNrYWdlZmlsZV9vYmplY3RzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VfRmlsZS5vYmplY3RzLmJ1bGtfY3JlYXRlKHBhY2thZ2VmaWxlX29iamVjdHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9ICIgIHN0cGk6IEtleSBlcnJvciwgcGFja2FnZSAlcyBrZXkgJXMgXG4iICUgKCBwLCBlICkKKworICAgICAgICAgICAgIyBzYXZlIGRpc2sgaW5zdGFsbGVkIHNpemUKKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5pbnN0YWxsZWRfc2l6ZSA9IHBhY2thZ2VkaWN0W3BdWydzaXplJ10KKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5zYXZlKCkKKworICAgICAgICAgICAgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLm9iamVjdHMuY3JlYXRlKHRhcmdldCA9IHRhcmdldF9vYmosIHBhY2thZ2UgPSBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10pCisKKyAgICAgICAgcGFja2FnZWRlcHNfb2JqcyA9IFtdCisgICAgICAgIGZvciBwIGluIHBhY2thZ2VkaWN0OgorICAgICAgICAgICAgZm9yIChweCxkZXB0eXBlKSBpbiBwYWNrYWdlZGljdFtwXVsnZGVwZW5kcyddOgorICAgICAgICAgICAgICAgIGlmIGRlcHR5cGUgPT0gJ2RlcGVuZHMnOgorICAgICAgICAgICAgICAgICAgICB0ZGVwdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUworICAgICAgICAgICAgICAgIGVsaWYgZGVwdHlwZSA9PSAncmVjb21tZW5kcyc6CisgICAgICAgICAgICAgICAgICAgIHRkZXB0eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJFQ09NTUVORFMKKworICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggcGFja2FnZSA9IHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gcGFja2FnZWRpY3RbcHhdWydvYmplY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBfdHlwZSA9IHRkZXB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmopKQorCisgICAgICAgIGlmIGxlbihwYWNrYWdlZGVwc19vYmpzKSA+IDA6CisgICAgICAgICAgICBQYWNrYWdlX0RlcGVuZGVuY3kub2JqZWN0cy5idWxrX2NyZWF0ZShwYWNrYWdlZGVwc19vYmpzKQorCisgICAgICAgIGlmIGxlbihlcnJvcm1zZykgPiAwOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImJ1aWxkaW5mb2hlbHBlcjogdGFyZ2V0X3BhY2thZ2VfaW5mbyBjb3VsZCBub3QgaWRlbnRpZnkgcmVjaXBlczogXG4lcyIsIGVycm9ybXNnKQorCisgICAgZGVmIHNhdmVfdGFyZ2V0X2ltYWdlX2ZpbGVfaW5mb3JtYXRpb24oc2VsZiwgdGFyZ2V0X29iaiwgZmlsZV9uYW1lLCBmaWxlX3NpemUpOgorICAgICAgICBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmNyZWF0ZSggdGFyZ2V0ID0gdGFyZ2V0X29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gZmlsZV9zaXplKQorCisgICAgZGVmIHNhdmVfYXJ0aWZhY3RfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCBmaWxlX25hbWUsIGZpbGVfc2l6ZSk6CisgICAgICAgICMgd2Ugc2tpcCB0aGUgaW1hZ2UgZmlsZXMgZnJvbSBvdGhlciBidWlsZHMKKyAgICAgICAgaWYgVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIoZmlsZV9uYW1lID0gZmlsZV9uYW1lKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgZG8gbm90IHVwZGF0ZSBhcnRpZmFjdHMgZm91bmQgaW4gb3RoZXIgYnVpbGRzCisgICAgICAgIGlmIEJ1aWxkQXJ0aWZhY3Qub2JqZWN0cy5maWx0ZXIoZmlsZV9uYW1lID0gZmlsZV9uYW1lKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIEJ1aWxkQXJ0aWZhY3Qub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBidWlsZF9vYmosIGZpbGVfbmFtZSA9IGZpbGVfbmFtZSwgZmlsZV9zaXplID0gZmlsZV9zaXplKQorCisgICAgZGVmIGNyZWF0ZV9sb2dtZXNzYWdlKHNlbGYsIGxvZ19pbmZvcm1hdGlvbik6CisgICAgICAgIGFzc2VydCAnYnVpbGQnIGluIGxvZ19pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2xldmVsJyBpbiBsb2dfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdtZXNzYWdlJyBpbiBsb2dfaW5mb3JtYXRpb24KKworICAgICAgICBsb2dfb2JqZWN0ID0gTG9nTWVzc2FnZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkID0gbG9nX2luZm9ybWF0aW9uWydidWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBsb2dfaW5mb3JtYXRpb25bJ2xldmVsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbG9nX2luZm9ybWF0aW9uWydtZXNzYWdlJ10pCisKKyAgICAgICAgZm9yIHYgaW4gdmFycyhsb2dfb2JqZWN0KToKKyAgICAgICAgICAgIGlmIHYgaW4gbG9nX2luZm9ybWF0aW9uLmtleXMoKToKKyAgICAgICAgICAgICAgICB2YXJzKGxvZ19vYmplY3QpW3ZdID0gbG9nX2luZm9ybWF0aW9uW3ZdCisKKyAgICAgICAgcmV0dXJuIGxvZ19vYmplY3Quc2F2ZSgpCisKKworICAgIGRlZiBzYXZlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCBwYWNrYWdlX2luZm8sIHJlY2lwZXMpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9vYmosIEJ1aWxkKQorCisgICAgICAgICMgY3JlYXRlIGFuZCBzYXZlIHRoZSBvYmplY3QKKyAgICAgICAgcG5hbWUgPSBwYWNrYWdlX2luZm9bJ1BLRyddCisgICAgICAgIGlmICdPUEtHTicgaW4gcGFja2FnZV9pbmZvLmtleXMoKToKKyAgICAgICAgICAgIHBuYW1lID0gcGFja2FnZV9pbmZvWydPUEtHTiddCisKKyAgICAgICAgYnBfb2JqZWN0LCBfID0gUGFja2FnZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoIGJ1aWxkID0gYnVpbGRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBuYW1lICkKKworICAgICAgICBicF9vYmplY3QuaW5zdGFsbGVkX25hbWUgPSBwYWNrYWdlX2luZm9bJ1BLRyddCisgICAgICAgIGJwX29iamVjdC5yZWNpcGUgPSByZWNpcGVzW3BhY2thZ2VfaW5mb1snUE4nXV0KKyAgICAgICAgYnBfb2JqZWN0LnZlcnNpb24gPSBwYWNrYWdlX2luZm9bJ1BLR1YnXQorICAgICAgICBicF9vYmplY3QucmV2aXNpb24gPSBwYWNrYWdlX2luZm9bJ1BLR1InXQorICAgICAgICBicF9vYmplY3Quc3VtbWFyeSA9IHBhY2thZ2VfaW5mb1snU1VNTUFSWSddCisgICAgICAgIGJwX29iamVjdC5kZXNjcmlwdGlvbiA9IHBhY2thZ2VfaW5mb1snREVTQ1JJUFRJT04nXQorICAgICAgICBicF9vYmplY3Quc2l6ZSA9IGludChwYWNrYWdlX2luZm9bJ1BLR1NJWkUnXSkKKyAgICAgICAgYnBfb2JqZWN0LnNlY3Rpb24gPSBwYWNrYWdlX2luZm9bJ1NFQ1RJT04nXQorICAgICAgICBicF9vYmplY3QubGljZW5zZSA9IHBhY2thZ2VfaW5mb1snTElDRU5TRSddCisgICAgICAgIGJwX29iamVjdC5zYXZlKCkKKworICAgICAgICAjIHNhdmUgYW55IGF0dGFjaGVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhY2thZ2VfaW5mb1snRklMRVNfSU5GTyddOgorICAgICAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cy5hcHBlbmQoUGFja2FnZV9GaWxlKCBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBwYWNrYWdlX2luZm9bJ0ZJTEVTX0lORk8nXVtwYXRoXSApKQorICAgICAgICBpZiBsZW4ocGFja2FnZWZpbGVfb2JqZWN0cyk6CisgICAgICAgICAgICBQYWNrYWdlX0ZpbGUub2JqZWN0cy5idWxrX2NyZWF0ZShwYWNrYWdlZmlsZV9vYmplY3RzKQorCisgICAgICAgIGRlZiBfcG9fYnluYW1lKHApOgorICAgICAgICAgICAgcGtnLCBjcmVhdGVkID0gUGFja2FnZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoYnVpbGQgPSBidWlsZF9vYmosIG5hbWUgPSBwKQorICAgICAgICAgICAgaWYgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICBwa2cuc2l6ZSA9IC0xCisgICAgICAgICAgICAgICAgcGtnLnNhdmUoKQorICAgICAgICAgICAgcmV0dXJuIHBrZworCisgICAgICAgIHBhY2thZ2VkZXBzX29ianMgPSBbXQorICAgICAgICAjIHNhdmUgc29mdCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uCisgICAgICAgIGlmICdSREVQRU5EUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JERVBFTkRTJ106CisgICAgICAgICAgICBmb3IgcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMocGFja2FnZV9pbmZvWydSREVQRU5EUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SREVQRU5EUykpCisgICAgICAgIGlmICdSUFJPVklERVMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSUFJPVklERVMnXToKKyAgICAgICAgICAgIGZvciBwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhwYWNrYWdlX2luZm9bJ1JQUk9WSURFUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SUFJPVklERVMpKQorICAgICAgICBpZiAnUlJFQ09NTUVORFMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSUkVDT01NRU5EUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUlJFQ09NTUVORFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlJFQ09NTUVORFMpKQorICAgICAgICBpZiAnUlNVR0dFU1RTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUlNVR0dFU1RTJ106CisgICAgICAgICAgICBmb3IgcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMocGFja2FnZV9pbmZvWydSU1VHR0VTVFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlNVR0dFU1RTKSkKKyAgICAgICAgaWYgJ1JSRVBMQUNFUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JSRVBMQUNFUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUlJFUExBQ0VTJ10pOgorICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggIHBhY2thZ2UgPSBicF9vYmplY3QsCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBfcG9fYnluYW1lKHApLCBkZXBfdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRVBMQUNFUykpCisgICAgICAgIGlmICdSQ09ORkxJQ1RTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUkNPTkZMSUNUUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUkNPTkZMSUNUUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SQ09ORkxJQ1RTKSkKKworICAgICAgICBpZiBsZW4ocGFja2FnZWRlcHNfb2JqcykgPiAwOgorICAgICAgICAgICAgUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUocGFja2FnZWRlcHNfb2JqcykKKworICAgICAgICByZXR1cm4gYnBfb2JqZWN0CisKKyAgICBkZWYgc2F2ZV9idWlsZF92YXJpYWJsZXMoc2VsZiwgYnVpbGRfb2JqLCB2YXJkdW1wKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKworICAgICAgICBoZWxwdGV4dF9vYmplY3RzID0gW10KKyAgICAgICAgZm9yIGsgaW4gdmFyZHVtcDoKKyAgICAgICAgICAgIGRlc2MgPSB2YXJkdW1wW2tdWydkb2MnXQorICAgICAgICAgICAgaWYgZGVzYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHZhcl93b3JkcyA9IFt3b3JkIGZvciB3b3JkIGluIGsuc3BsaXQoJ18nKV0KKyAgICAgICAgICAgICAgICByb290X3ZhciA9ICJfIi5qb2luKFt3b3JkIGZvciB3b3JkIGluIHZhcl93b3JkcyBpZiB3b3JkLmlzdXBwZXIoKV0pCisgICAgICAgICAgICAgICAgaWYgcm9vdF92YXIgYW5kIHJvb3RfdmFyICE9IGsgYW5kIHJvb3RfdmFyIGluIHZhcmR1bXA6CisgICAgICAgICAgICAgICAgICAgIGRlc2MgPSB2YXJkdW1wW3Jvb3RfdmFyXVsnZG9jJ10KKyAgICAgICAgICAgIGlmIGRlc2MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkZXNjID0gJycKKyAgICAgICAgICAgIGlmIGxlbihkZXNjKToKKyAgICAgICAgICAgICAgICBoZWxwdGV4dF9vYmplY3RzLmFwcGVuZChIZWxwVGV4dChidWlsZD1idWlsZF9vYmosCisgICAgICAgICAgICAgICAgICAgIGFyZWE9SGVscFRleHQuVkFSSUFCTEUsCisgICAgICAgICAgICAgICAgICAgIGtleT1rLAorICAgICAgICAgICAgICAgICAgICB0ZXh0PWRlc2MpKQorICAgICAgICAgICAgaWYgbm90IGJvb2wodmFyZHVtcFtrXVsnZnVuYyddKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhcmR1bXBba11bJ3YnXQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgICAgICAgICB2YXJpYWJsZV9vYmogPSBWYXJpYWJsZS5vYmplY3RzLmNyZWF0ZSggYnVpbGQgPSBidWlsZF9vYmosCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX25hbWUgPSBrLAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV92YWx1ZSA9IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2MpCisKKyAgICAgICAgICAgICAgICB2YXJoaXN0X29iamVjdHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciB2aCBpbiB2YXJkdW1wW2tdWydoaXN0b3J5J106CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnZG9jdW1lbnRhdGlvbi5jb25mJyBpbiB2aFsnZmlsZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaGlzdF9vYmplY3RzLmFwcGVuZChWYXJpYWJsZUhpc3RvcnkoIHZhcmlhYmxlID0gdmFyaWFibGVfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSB2aFsnZmlsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IHZoWydsaW5lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IHZoWydvcCddKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4odmFyaGlzdF9vYmplY3RzKToKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVIaXN0b3J5Lm9iamVjdHMuYnVsa19jcmVhdGUodmFyaGlzdF9vYmplY3RzKQorCisgICAgICAgIEhlbHBUZXh0Lm9iamVjdHMuYnVsa19jcmVhdGUoaGVscHRleHRfb2JqZWN0cykKKworCitjbGFzcyBNb2NrRXZlbnQob2JqZWN0KToKKyAgICAiIiIgVGhpcyBvYmplY3QgaXMgdXNlZCB0byBjcmVhdGUgZXZlbnQsIGZvciB3aGljaCBub3JtYWwgZXZlbnQtcHJvY2Vzc2luZyBtZXRob2RzIGNhbgorICAgICAgICBiZSB1c2VkLCBvdXQgb2YgZGF0YSB0aGF0IGlzIG5vdCBjb21pbmcgdmlhIGFuIGFjdHVhbCBldmVudAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5tc2cgPSBOb25lCisgICAgICAgIHNlbGYubGV2ZWxubyA9IE5vbmUKKyAgICAgICAgc2VsZi50YXNrbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi50YXNraGFzaCA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXRobmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lbm8gPSBOb25lCisKKworY2xhc3MgQnVpbGRJbmZvSGVscGVyKG9iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgZ2F0aGVycyB0aGUgYnVpbGQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2VydmVyIGFuZCBzZW5kcyBpdAorICAgICAgICB0b3dhcmRzIHRoZSBPUk0gd3JhcHBlciBmb3Igc3RvcmluZyBpbiB0aGUgZGF0YWJhc2UKKyAgICAgICAgSXQgaXMgaW5zdGFudGlhdGVkIG9uY2UgcGVyIGJ1aWxkCisgICAgICAgIEtlZXBzIGluIG1lbW9yeSBhbGwgZGF0YSB0aGF0IG5lZWRzIG1hdGNoaW5nIGJlZm9yZSB3cml0aW5nIGl0IHRvIHRoZSBkYXRhYmFzZQorICAgICIiIgorCisgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICMgdGhlIGNvZGUgd2lsbCBsb29rIGludG8gdGhlIHByb3RlY3RlZCB2YXJpYWJsZXMgb2YgdGhlIGV2ZW50OyBubyBlYXN5IHdheSBhcm91bmQgdGhpcworICAgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1jb250aW51YXRpb24KKyAgICAjIHdlIGRvIG5vdCBmb2xsb3cgdGhlIHB5dGhvbiBjb252ZW50aW9ucyBmb3IgY29udGludWF0aW9uIGluZGVudGF0aW9uIGR1ZSB0byBsb25nIGxpbmVzIGhlcmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGhhc19idWlsZF9oaXN0b3J5ID0gRmFsc2UpOgorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlID0ge30KKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXSA9IHt9CisgICAgICAgIHNlbGYudGFza19vcmRlciA9IDAKKyAgICAgICAgc2VsZi5hdXRvY29tbWl0X3N0ZXAgPSAxCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgICMgd2UgdXNlIG1hbnVhbCB0cmFuc2FjdGlvbnMgaWYgdGhlIGRhdGFiYXNlIGRvZXNuJ3QgYXV0b2NvbW1pdCBvbiB1cworICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIgPSBPUk1XcmFwcGVyKCkKKyAgICAgICAgc2VsZi5oYXNfYnVpbGRfaGlzdG9yeSA9IGhhc19idWlsZF9oaXN0b3J5CisgICAgICAgIHNlbGYudG1wX2RpciA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUTVBESVIiXSlbMF0KKyAgICAgICAgc2VsZi5icmJlICAgID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRPQVNURVJfQlJCRSJdKVswXQorICAgICAgICBzZWxmLnByb2plY3QgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE9BU1RFUl9QUk9KRUNUIl0pWzBdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBCdWlsZCBpbmZvIGhlbHBlciBpbml0ZWQgJXMiICUgdmFycyhzZWxmKSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIG1ldGhvZHMgdG8gY29udmVydCBldmVudC9leHRlcm5hbCBpbmZvIGludG8gb2JqZWN0cyB0aGF0IHRoZSBPUk0gbGF5ZXIgdXNlcworCisKKyAgICBkZWYgX2dldF9idWlsZF9pbmZvcm1hdGlvbihzZWxmLCBjb25zb2xlbG9nZmlsZSk6CisgICAgICAgIGJ1aWxkX2luZm8gPSB7fQorICAgICAgICAjIEdlbmVyYXRlIGFuIGlkZW50aWZpZXIgZm9yIGVhY2ggbmV3IGJ1aWxkCisKKyAgICAgICAgYnVpbGRfaW5mb1snbWFjaGluZSddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIk1BQ0hJTkUiXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snZGlzdHJvJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPIl0pWzBdCisgICAgICAgIGJ1aWxkX2luZm9bJ2Rpc3Ryb192ZXJzaW9uJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPX1ZFUlNJT04iXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snc3RhcnRlZF9vbiddID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGRfaW5mb1snY29tcGxldGVkX29uJ10gPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZF9pbmZvWydjb29rZXJfbG9nX3BhdGgnXSA9IGNvbnNvbGVsb2dmaWxlCisgICAgICAgIGJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCVUlMRE5BTUUiXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snYml0YmFrZV92ZXJzaW9uJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfVkVSU0lPTiJdKVswXQorCisgICAgICAgIHJldHVybiBidWlsZF9pbmZvCisKKyAgICBkZWYgX2dldF90YXNrX2luZm9ybWF0aW9uKHNlbGYsIGV2ZW50LCByZWNpcGUpOgorICAgICAgICBhc3NlcnQgJ3Rhc2tuYW1lJyBpbiB2YXJzKGV2ZW50KQorCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSB7fQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydidWlsZCddID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfTkEKKyAgICAgICAgdGFza19pbmZvcm1hdGlvblsncmVjaXBlJ10gPSByZWNpcGUKKyAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19uYW1lJ10gPSBldmVudC50YXNrbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNvbWUgdGFza3MgZG9uJ3QgY29tZSB3aXRoIGEgaGFzaC4gYW5kIHRoYXQncyBvaworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3N0YXRlX2NoZWNrc3VtJ10gPSBldmVudC50YXNraGFzaAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiB0YXNrX2luZm9ybWF0aW9uCisKKyAgICBkZWYgX2dldF9sYXllcl92ZXJzaW9uX2Zvcl9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICBhc3NlcnQgcGF0aC5zdGFydHN3aXRoKCIvIikKKyAgICAgICAgYXNzZXJ0ICdidWlsZCcgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZQorCisgICAgICAgIGlmIHNlbGYuYnJiZSBpcyBOb25lOgorICAgICAgICAgICAgZGVmIF9zbGtleV9pbnRlcmFjdGl2ZShsYXllcl92ZXJzaW9uKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsYXllcl92ZXJzaW9uLCBMYXllcl9WZXJzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBsZW4obGF5ZXJfdmVyc2lvbi5sb2NhbF9wYXRoKQorCisgICAgICAgICAgICAjIEhldXJpc3RpY3M6IHdlIGFsd2F5cyBtYXRjaCByZWNpcGUgdG8gdGhlIGRlZXBlc3QgbGF5ZXIgcGF0aCBpbiB0aGUgZGlzY292ZXJlZCBsYXllcnMKKyAgICAgICAgICAgIGZvciBsdm8gaW4gc29ydGVkKHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzLCByZXZlcnNlPVRydWUsIGtleT1fc2xrZXlfaW50ZXJhY3RpdmUpOgorICAgICAgICAgICAgICAgICMgd2UgY2FuIG1hdGNoIHRvIHRoZSByZWNpcGUgZmlsZSBwYXRoCisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGx2by5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGx2bworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBicl9pZCwgYmVfaWQgPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIKKyAgICAgICAgICAgIGJjID0gZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIocGsgPSBiZV9pZCkKKworICAgICAgICAgICAgZGVmIF9zbGtleV9tYW5hZ2VkKGxheWVyX3ZlcnNpb24pOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oYmMuZ2V0R2l0Q2xvbmVEaXJlY3RvcnkobGF5ZXJfdmVyc2lvbi5naXR1cmwsIGxheWVyX3ZlcnNpb24uY29tbWl0KSArIGxheWVyX3ZlcnNpb24uZGlycGF0aCkKKworICAgICAgICAgICAgIyBIZXVyaXN0aWNzOiB3ZSBtYXRjaCB0aGUgcGF0aCB0byB3aGVyZSB0aGUgbGF5ZXJzIGhhdmUgYmVlbiBjaGVja2VkIG91dAorICAgICAgICAgICAgZm9yIGJybCBpbiBzb3J0ZWQoQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZ2V0KHBrID0gYnJfaWQpLmJybGF5ZXJfc2V0LmFsbCgpLCByZXZlcnNlID0gVHJ1ZSwga2V5ID0gX3Nsa2V5X21hbmFnZWQpOgorICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihiYy5nZXRHaXRDbG9uZURpcmVjdG9yeShicmwuZ2l0dXJsLCBicmwuY29tbWl0KSwgYnJsLmRpcnBhdGgpCisgICAgICAgICAgICAgICAgIyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoLCB1bmxlc3MgcnVubmluZyBpbiBIRUFEIG1vZGUgd2hlcmUgdGhlIHBhdGggaXMgYWJzb2x1dGUKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKGJjLmJlLnNvdXJjZWRpciwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChsb2NhbGRpcm5hbWUpOgorICAgICAgICAgICAgICAgICAgICAjbG9nZ2VyLndhcm4oIi0tIG1hbmFnZWQ6IG1hdGNoZWQgcGF0aCAlcyB3aXRoIGxheWVyICVzICIgJSAocGF0aCwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBtYXRjaGVkIHRoZSBCUkxheWVyLCBidXQgd2UgbmVlZCB0aGUgbGF5ZXJfdmVyc2lvbiB0aGF0IGdlbmVyYXRlZCB0aGlzIGJyCisgICAgICAgICAgICAgICAgICAgIGZvciBsdm8gaW4gc2VsZi5vcm1fd3JhcHBlci5sYXllcl92ZXJzaW9uX29iamVjdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBicmwubmFtZSA9PSBsdm8ubGF5ZXIubmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbHZvCisKKyAgICAgICAgI2lmIHdlIGdldCBoZXJlLCB3ZSBkaWRuJ3QgcmVhZCBsYXllcnMgY29ycmVjdGx5OyBkdW1wIHdoYXRldmVyIGluZm9ybWF0aW9uIHdlIGhhdmUgb24gdGhlIGVycm9yIGxvZworICAgICAgICBsb2dnZXIud2FybigiQ291bGQgbm90IG1hdGNoIGxheWVyIHZlcnNpb24gZm9yIHJlY2lwZSBwYXRoICVzIDogJXMiLCBwYXRoLCBzZWxmLm9ybV93cmFwcGVyLmxheWVyX3ZlcnNpb25fb2JqZWN0cykKKworICAgICAgICAjbW9ja3VwIHRoZSBuZXcgbGF5ZXIKKyAgICAgICAgdW5rbm93bl9sYXllciwgXyA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPSJfX0ZJWE1FX191bmlkZW50aWZpZWRfbGF5ZXIiLCBsYXllcl9pbmRleF91cmw9IiIpCisgICAgICAgIHVua25vd25fbGF5ZXJfdmVyc2lvbl9vYmosIF8gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllciA9IHVua25vd25fbGF5ZXIsIGJ1aWxkID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSkKKworICAgICAgICAjIGFwcGVuZCBpdCBzbyB3ZSBkb24ndCBydW4gaW50byB0aGlzIGVycm9yIGFnYWluIGFuZCBhZ2FpbgorICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmxheWVyX3ZlcnNpb25fb2JqZWN0cy5hcHBlbmQodW5rbm93bl9sYXllcl92ZXJzaW9uX29iaikKKworICAgICAgICByZXR1cm4gdW5rbm93bl9sYXllcl92ZXJzaW9uX29iagorCisgICAgZGVmIF9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUoc2VsZiwgdGFza2ZpbGUpOgorICAgICAgICBsb2NhbGZpbGVwYXRoID0gdGFza2ZpbGUuc3BsaXQoIjoiKVstMV0KKyAgICAgICAgZmlsZXBhdGhfZmxhZ3MgPSAiOiIuam9pbihzb3J0ZWQodGFza2ZpbGUuc3BsaXQoIjoiKVs6LTFdKSkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmogPSBzZWxmLl9nZXRfbGF5ZXJfdmVyc2lvbl9mb3JfcGF0aChsb2NhbGZpbGVwYXRoKQorCisKKworICAgICAgICByZWNpcGVfaW5mbyA9IHt9CisgICAgICAgIHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10gPSBsYXllcl92ZXJzaW9uX29iagorICAgICAgICByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10gPSBsb2NhbGZpbGVwYXRoCisgICAgICAgIHJlY2lwZV9pbmZvWydwYXRoZmxhZ3MnXSA9IGZpbGVwYXRoX2ZsYWdzCisKKyAgICAgICAgaWYgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddLnN0YXJ0c3dpdGgocmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSA9IHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXVtsZW4ocmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKTpdLmxzdHJpcCgiLyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlJlY2lwZSBmaWxlIHBhdGggJXMgaXMgbm90IHVuZGVyIGxheWVyIHZlcnNpb24gYXQgJXMiICUgKHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSwgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKSkKKworICAgICAgICByZXR1cm4gcmVjaXBlX2luZm8KKworICAgIGRlZiBfZ2V0X3BhdGhfaW5mb3JtYXRpb24oc2VsZiwgdGFza19vYmplY3QpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YXNrX29iamVjdCwgVGFzaykKKyAgICAgICAgYnVpbGRfc3RhdHNfZm9ybWF0ID0gInt0bXBkaXJ9L2J1aWxkc3RhdHMve3RhcmdldH0te21hY2hpbmV9L3tidWlsZG5hbWV9L3twYWNrYWdlfS8iCisgICAgICAgIGJ1aWxkX3N0YXRzX3BhdGggPSBbXQorCisgICAgICAgIGZvciB0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgIHRhcmdldCA9IHQudGFyZ2V0CisgICAgICAgICAgICBtYWNoaW5lID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXS5tYWNoaW5lCisgICAgICAgICAgICBidWlsZG5hbWUgPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLmJ1aWxkX25hbWUKKyAgICAgICAgICAgIHBlLCBwdiA9IHRhc2tfb2JqZWN0LnJlY2lwZS52ZXJzaW9uLnNwbGl0KCI6IiwxKQorICAgICAgICAgICAgaWYgbGVuKHBlKSA+IDA6CisgICAgICAgICAgICAgICAgcGFja2FnZSA9IHRhc2tfb2JqZWN0LnJlY2lwZS5uYW1lICsgIi0iICsgcGUgKyAiXyIgKyBwdgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlID0gdGFza19vYmplY3QucmVjaXBlLm5hbWUgKyAiLSIgKyBwdgorCisgICAgICAgICAgICBidWlsZF9zdGF0c19wYXRoLmFwcGVuZChidWlsZF9zdGF0c19mb3JtYXQuZm9ybWF0KHRtcGRpcj1zZWxmLnRtcF9kaXIsIHRhcmdldD10YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU9bWFjaGluZSwgYnVpbGRuYW1lPWJ1aWxkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT1wYWNrYWdlKSkKKworICAgICAgICByZXR1cm4gYnVpbGRfc3RhdHNfcGF0aAorCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIGV4dGVybmFsIGF2YWlsYWJsZSBtZXRob2RzIHRvIHN0b3JlIGluZm9ybWF0aW9uCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCk6CisgICAgICAgIGV2ZGF0YSA9IE5vbmUKKyAgICAgICAgaWYgJ19sb2NhbGRhdGEnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgZXZkYXRhID0gZXZlbnQuX2xvY2FsZGF0YQorICAgICAgICBlbGlmICdkYXRhJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIGV2ZGF0YSA9IGV2ZW50LmRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXZlbnQgd2l0aCBuZWl0aGVyIF9sb2NhbGRhdGEgb3IgZGF0YSBwcm9wZXJ0aWVzIikKKyAgICAgICAgcmV0dXJuIGV2ZGF0YQorCisgICAgZGVmIHN0b3JlX2xheWVyX2luZm8oc2VsZiwgZXZlbnQpOgorICAgICAgICBsYXllcmluZm9zID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KQorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydsdnMnXSA9IHt9CisgICAgICAgIGZvciBsYXllciBpbiBsYXllcmluZm9zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW3NlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl9vYmplY3QobGF5ZXJpbmZvc1tsYXllcl0sIHNlbGYuYnJiZSldID0gbGF5ZXJpbmZvc1tsYXllcl1bJ3ZlcnNpb24nXQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW3NlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl9vYmplY3QobGF5ZXJpbmZvc1tsYXllcl0sIHNlbGYuYnJiZSldWydsb2NhbF9wYXRoJ10gPSBsYXllcmluZm9zW2xheWVyXVsnbG9jYWxfcGF0aCddCisgICAgICAgICAgICBleGNlcHQgTm90RXhpc3RpbmcgYXMgbmVlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGluZm9oZWxwZXI6IGNhbm5vdCBpZGVudGlmeSBsYXllciBleGNlcHRpb246JXMgIiwgbmVlKQorCisKKyAgICBkZWYgc3RvcmVfc3RhcnRlZF9idWlsZChzZWxmLCBldmVudCwgY29uc29sZWxvZ2ZpbGUpOgorICAgICAgICBhc3NlcnQgJ19wa2dzJyBpbiB2YXJzKGV2ZW50KQorICAgICAgICBidWlsZF9pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF9idWlsZF9pbmZvcm1hdGlvbihjb25zb2xlbG9nZmlsZSkKKworICAgICAgICBidWlsZF9vYmogPSBzZWxmLm9ybV93cmFwcGVyLmNyZWF0ZV9idWlsZF9vYmplY3QoYnVpbGRfaW5mb3JtYXRpb24sIHNlbGYuYnJiZSwgc2VsZi5wcm9qZWN0KQorCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10gPSBidWlsZF9vYmoKKworICAgICAgICAjIHNhdmUgbGF5ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBidWlsZAorICAgICAgICBpZiBub3QgJ2x2cycgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTGF5ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiBub3QgZm91bmQ7IENoZWNrIGlmIHRoZSBiaXRiYWtlIHNlcnZlciB3YXMgY29uZmlndXJlZCB0byBpbmhlcml0IHRvYXN0ZXIuYmJjbGFzcy4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxheWVyX29iaiBpbiBzZWxmLmludGVybmFsX3N0YXRlWydsdnMnXToKKyAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfbGF5ZXJfdmVyc2lvbl9vYmplY3QoYnVpbGRfb2JqLCBsYXllcl9vYmosIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddW2xheWVyX29ial0pCisKKyAgICAgICAgICAgIGRlbCBzZWxmLmludGVybmFsX3N0YXRlWydsdnMnXQorCisgICAgICAgICMgY3JlYXRlIHRhcmdldCBpbmZvcm1hdGlvbgorICAgICAgICB0YXJnZXRfaW5mb3JtYXRpb24gPSB7fQorICAgICAgICB0YXJnZXRfaW5mb3JtYXRpb25bJ3RhcmdldHMnXSA9IGV2ZW50Ll9wa2dzCisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvblsnYnVpbGQnXSA9IGJ1aWxkX29iagorCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXSA9IHNlbGYub3JtX3dyYXBwZXIuY3JlYXRlX3RhcmdldF9vYmplY3RzKHRhcmdldF9pbmZvcm1hdGlvbikKKworICAgICAgICAjIFNhdmUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICBkYXRhID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldEFsbEtleXNXaXRoRmxhZ3MiLCBbImRvYyIsICJmdW5jIl1dKVswXQorCisgICAgICAgICMgY29udmVydCB0aGUgcGF0aHMgZnJvbSBhYnNvbHV0ZSB0byByZWxhdGl2ZSB0byBlaXRoZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeSBvciBsYXllciBjaGVja291dHMKKyAgICAgICAgcGF0aF9wcmVmaXhlcyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5icmJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgXywgYmVfaWQgPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZ2V0KHBrID0gYmVfaWQpCisgICAgICAgICAgICBwYXRoX3ByZWZpeGVzLmFwcGVuZChiZS5idWlsZGRpcikKKworICAgICAgICBmb3IgbGF5ZXIgaW4gc29ydGVkKHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzLCBrZXkgPSBsYW1iZGEgeDpsZW4oeC5sb2NhbF9wYXRoKSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgICAgIHBhdGhfcHJlZml4ZXMuYXBwZW5kKGxheWVyLmxvY2FsX3BhdGgpCisKKyAgICAgICAgIyB3ZSBzdHJpcCB0aGUgcHJlZml4ZXMKKyAgICAgICAgZm9yIGsgaW4gZGF0YToKKyAgICAgICAgICAgIGlmIG5vdCBib29sKGRhdGFba11bJ2Z1bmMnXSk6CisgICAgICAgICAgICAgICAgZm9yIHZoIGluIGRhdGFba11bJ2hpc3RvcnknXToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90ICdkb2N1bWVudGF0aW9uLmNvbmYnIGluIHZoWydmaWxlJ106CisgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZmlsZV9uYW1lID0gdmhbJ2ZpbGUnXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBwIGluIHBhdGhfcHJlZml4ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWJzX2ZpbGVfbmFtZS5zdGFydHN3aXRoKHBwICsgIi8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmhbJ2ZpbGUnXT1hYnNfZmlsZV9uYW1lW2xlbihwcCArICIvIik6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgc2F2ZSB0aGUgdmFyaWFibGVzCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV9idWlsZF92YXJpYWJsZXMoYnVpbGRfb2JqLCBkYXRhKQorCisgICAgICAgIHJldHVybiBzZWxmLmJyYmUKKworCisgICAgZGVmIHVwZGF0ZV90YXJnZXRfaW1hZ2VfZmlsZShzZWxmLCBldmVudCk6CisgICAgICAgIGV2ZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKKworICAgICAgICBmb3IgdCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ106CisgICAgICAgICAgICBpZiB0LmlzX2ltYWdlID09IFRydWU6CisgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVzID0gbGlzdChldmRhdGEudmlld2tleXMoKSkKKyAgICAgICAgICAgICAgICBmb3Igb3V0cHV0IGluIG91dHB1dF9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgdC50YXJnZXQgaW4gb3V0cHV0IGFuZCAncm9vdGZzJyBpbiBvdXRwdXQgYW5kIG5vdCBvdXRwdXQuZW5kc3dpdGgoIi5tYW5pZmVzdCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX3RhcmdldF9pbWFnZV9maWxlX2luZm9ybWF0aW9uKHQsIG91dHB1dCwgZXZkYXRhW291dHB1dF0pCisKKyAgICBkZWYgdXBkYXRlX2FydGlmYWN0X2ltYWdlX2ZpbGUoc2VsZiwgZXZlbnQpOgorICAgICAgICBldmRhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgIGZvciBhcnRpZmFjdF9wYXRoIGluIGV2ZGF0YS5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfYXJ0aWZhY3RfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgYXJ0aWZhY3RfcGF0aCwgZXZkYXRhW2FydGlmYWN0X3BhdGhdKQorCisgICAgZGVmIHVwZGF0ZV9idWlsZF9pbmZvcm1hdGlvbihzZWxmLCBldmVudCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKToKKyAgICAgICAgaWYgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci51cGRhdGVfYnVpbGRfb2JqZWN0KHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10sIGVycm9ycywgd2FybmluZ3MsIHRhc2tmYWlsdXJlcykKKworCisgICAgZGVmIHN0b3JlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aChzZWxmLCBldmVudCk6CisgICAgICAgIGRlcGxveV9kaXIgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydkZXBsb3lfZGlyJ10KKyAgICAgICAgaW1hZ2VfbmFtZSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2ltYWdlX25hbWUnXQorICAgICAgICBwYXRoID0gZGVwbG95X2RpciArICIvbGljZW5zZXMvIiArIGltYWdlX25hbWUgKyAiL2xpY2Vuc2UubWFuaWZlc3QiCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgaWYgdGFyZ2V0LnRhcmdldCBpbiBpbWFnZV9uYW1lOgorICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIudXBkYXRlX3RhcmdldF9zZXRfbGljZW5zZV9tYW5pZmVzdCh0YXJnZXQsIHBhdGgpCisKKworICAgIGRlZiBzdG9yZV9zdGFydGVkX3Rhc2soc2VsZiwgZXZlbnQpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU2tpcHBlZCkpCisgICAgICAgIGFzc2VydCAndGFza2ZpbGUnIGluIHZhcnMoZXZlbnQpCisgICAgICAgIGxvY2FsZmlsZXBhdGggPSBldmVudC50YXNrZmlsZS5zcGxpdCgiOiIpWy0xXQorICAgICAgICBhc3NlcnQgbG9jYWxmaWxlcGF0aC5zdGFydHN3aXRoKCIvIikKKworICAgICAgICBpZGVudGlmaWVyID0gZXZlbnQudGFza2ZpbGUgKyAiOiIgKyBldmVudC50YXNrbmFtZQorCisgICAgICAgIHJlY2lwZV9pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF9yZWNpcGVfaW5mb3JtYXRpb25fZnJvbV90YXNrZmlsZShldmVudC50YXNrZmlsZSkKKyAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm9ybWF0aW9uLCBUcnVlKQorCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfdGFza19pbmZvcm1hdGlvbihldmVudCwgcmVjaXBlKQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfTkEKKworICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTa2lwcGVkKToKKyAgICAgICAgICAgIGFzc2VydCAncmVhc29uJyBpbiB2YXJzKGV2ZW50KQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19leGVjdXRlZCddID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGV2ZW50LnJlYXNvbiA9PSAiY292ZXJlZCI6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX0NPVkVSRUQKKyAgICAgICAgICAgIGlmIGV2ZW50LnJlYXNvbiA9PSAiZXhpc3RpbmciOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9QUkVCVUlMVAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19leGVjdXRlZCddID0gVHJ1ZQorICAgICAgICAgICAgaWYgJ25vZXhlYycgaW4gdmFycyhldmVudCkgYW5kIGV2ZW50Lm5vZXhlYyA9PSBUcnVlOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3Rhc2tfZXhlY3V0ZWQnXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX0VNUFRZCisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc2NyaXB0X3R5cGUnXSA9IFRhc2suQ09ESU5HX05BCisKKyAgICAgICAgIyBkbyBub3QgYXNzaWduIG9yZGVyIG51bWJlcnMgdG8gc2NlbmUgdGFza3MKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICBzZWxmLnRhc2tfb3JkZXIgKz0gMQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3JkZXInXSA9IHNlbGYudGFza19vcmRlcgorCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uKQorCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAnb3V0Y29tZSc6IHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgfQorCisKKyAgICBkZWYgc3RvcmVfdGFza3Nfc3RhdHMoc2VsZiwgZXZlbnQpOgorICAgICAgICBmb3IgKHRhc2tmaWxlLCB0YXNrbmFtZSwgdGFza3N0YXRzLCByZWNpcGVuYW1lKSBpbiBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpOgorICAgICAgICAgICAgbG9jYWxmaWxlcGF0aCA9IHRhc2tmaWxlLnNwbGl0KCI6IilbLTFdCisgICAgICAgICAgICBhc3NlcnQgbG9jYWxmaWxlcGF0aC5zdGFydHN3aXRoKCIvIikKKworICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKHRhc2tmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHJlY2lwZV9pbmZvcm1hdGlvblsnZmlsZV9wYXRoJ10uc3RhcnRzd2l0aChyZWNpcGVfaW5mb3JtYXRpb25bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXSA9IHJlY2lwZV9pbmZvcm1hdGlvblsnZmlsZV9wYXRoJ11bbGVuKHJlY2lwZV9pbmZvcm1hdGlvblsnbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOl0ubHN0cmlwKCIvIikKKworICAgICAgICAgICAgICAgIHJlY2lwZV9vYmplY3QgPSBSZWNpcGUub2JqZWN0cy5nZXQobGF5ZXJfdmVyc2lvbiA9IHJlY2lwZV9pbmZvcm1hdGlvblsnbGF5ZXJfdmVyc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aF9fZW5kc3dpdGggPSByZWNpcGVfaW5mb3JtYXRpb25bJ2ZpbGVfcGF0aCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZWNpcGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IFJlY2lwZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb3VsZCBub3QgZmluZCByZWNpcGUgZm9yIHJlY2lwZV9pbmZvcm1hdGlvbiAlcyBuYW1lICVzIiAsIHBmb3JtYXQocmVjaXBlX2luZm9ybWF0aW9uKSwgcmVjaXBlbmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uID0ge30KKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2J1aWxkJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydyZWNpcGUnXSA9IHJlY2lwZV9vYmplY3QKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3Rhc2tfbmFtZSddID0gdGFza25hbWUKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2NwdV91c2FnZSddID0gdGFza3N0YXRzWydjcHVfdXNhZ2UnXQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnZGlza19pbyddID0gdGFza3N0YXRzWydkaXNrX2lvJ10KKyAgICAgICAgICAgIGlmICdlbGFwc2VkX3RpbWUnIGluIHRhc2tzdGF0czoKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydlbGFwc2VkX3RpbWUnXSA9IHRhc2tzdGF0c1snZWxhcHNlZF90aW1lJ10KKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uLCBUcnVlKSAgIyBtdXN0IGV4aXN0CisKKyAgICBkZWYgdXBkYXRlX2FuZF9zdG9yZV90YXNrKHNlbGYsIGV2ZW50KToKKyAgICAgICAgYXNzZXJ0ICd0YXNrZmlsZScgaW4gdmFycyhldmVudCkKKyAgICAgICAgbG9jYWxmaWxlcGF0aCA9IGV2ZW50LnRhc2tmaWxlLnNwbGl0KCI6IilbLTFdCisgICAgICAgIGFzc2VydCBsb2NhbGZpbGVwYXRoLnN0YXJ0c3dpdGgoIi8iKQorCisgICAgICAgIGlkZW50aWZpZXIgPSBldmVudC50YXNrZmlsZSArICI6IiArIGV2ZW50LnRhc2tuYW1lCisgICAgICAgIGlmIG5vdCBpZGVudGlmaWVyIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ106CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrQmFzZSk6CisgICAgICAgICAgICAgICAgIyB3ZSBkbyBhIGJpdCBvZiBndWVzc2luZworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBbeCBmb3IgeCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddLmtleXMoKSBpZiB4LmVuZHN3aXRoKGlkZW50aWZpZXIpXQorICAgICAgICAgICAgICAgIGlmIGxlbihjYW5kaWRhdGVzKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gY2FuZGlkYXRlc1swXQorCisgICAgICAgIGFzc2VydCBpZGVudGlmaWVyIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ10KKyAgICAgICAgaWRlbnRpZmllcmxpc3QgPSBpZGVudGlmaWVyLnNwbGl0KCI6IikKKyAgICAgICAgcmVhbHRhc2tmaWxlID0gIjoiLmpvaW4oaWRlbnRpZmllcmxpc3RbMDpsZW4oaWRlbnRpZmllcmxpc3QpLTFdKQorICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUocmVhbHRhc2tmaWxlKQorICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24sIFRydWUpCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfdGFza19pbmZvcm1hdGlvbihldmVudCxyZWNpcGUpCisKKyAgICAgICAgaWYgJ3RpbWUnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgaWYgbm90ICdzdGFydF90aW1lJyBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdOgorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl1bJ3N0YXJ0X3RpbWUnXSA9IGV2ZW50LnRpbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnZW5kX3RpbWUnXSA9IGV2ZW50LnRpbWUKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzdGFydF90aW1lJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdWydzdGFydF90aW1lJ10KKworICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdWydvdXRjb21lJ10KKworICAgICAgICBpZiAnbG9nZmlsZScgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydsb2dmaWxlJ10gPSBldmVudC5sb2dmaWxlCisKKyAgICAgICAgaWYgJ19tZXNzYWdlJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ21lc3NhZ2UnXSA9IGV2ZW50Ll9tZXNzYWdlCisKKyAgICAgICAgaWYgJ3Rhc2tmbGFncycgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICAjIHdpdGggVGFza1N0YXJ0ZWQsIHdlIGdldCBldmVuIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGlmICdweXRob24nIGluIGV2ZW50LnRhc2tmbGFncy5rZXlzKCkgYW5kIGV2ZW50LnRhc2tmbGFnc1sncHl0aG9uJ10gPT0gJzEnOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3NjcmlwdF90eXBlJ10gPSBUYXNrLkNPRElOR19QWVRIT04KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc2NyaXB0X3R5cGUnXSA9IFRhc2suQ09ESU5HX1NIRUxMCisKKyAgICAgICAgaWYgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID09IFRhc2suT1VUQ09NRV9OQToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tDb21wbGV0ZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrQ29tcGxldGVkKSk6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX1NVQ0NFU1MKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCkpOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9GQUlMRUQKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICAjIHdlIGZvcmNlIGEgc3luYyBwb2ludCBoZXJlLCB0byBnZXQgdGhlIHByb2dyZXNzIGJhciB0byBzaG93CisgICAgICAgICAgICBpZiBzZWxmLmF1dG9jb21taXRfc3RlcCAlIDMgPT0gMDoKKyAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hdXRvY29tbWl0X3N0ZXAgKz0gMQorCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uLCBUcnVlKSAjIG11c3QgZXhpc3QKKworCisgICAgZGVmIHN0b3JlX21pc3NlZF9zdGF0ZV90YXNrcyhzZWxmLCBldmVudCk6CisgICAgICAgIGZvciAoZm4sIHRhc2tuYW1lLCB0YXNraGFzaCwgc3N0YXRlZmlsZSkgaW4gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnbWlzc2VkJ106CisKKyAgICAgICAgICAgICMgaWRlbnRpZmllciA9IGZuICsgdGFza25hbWUgKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKGZuKQorICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm9ybWF0aW9uKQorICAgICAgICAgICAgbWV2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgICAgIG1ldmVudC50YXNrbmFtZSA9IHRhc2tuYW1lCisgICAgICAgICAgICBtZXZlbnQudGFza2hhc2ggPSB0YXNraGFzaAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKG1ldmVudCxyZWNpcGUpCisKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3N0YXJ0X3RpbWUnXSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfTkEKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3NzdGF0ZV9jaGVja3N1bSddID0gdGFza2hhc2gKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3NzdGF0ZV9yZXN1bHQnXSA9IFRhc2suU1NUQVRFX01JU1MKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3BhdGhfdG9fc3N0YXRlX29iaiddID0gc3N0YXRlZmlsZQorCisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfdGFza19vYmplY3QodGFza19pbmZvcm1hdGlvbikKKworICAgICAgICBmb3IgKGZuLCB0YXNrbmFtZSwgdGFza2hhc2gsIHNzdGF0ZWZpbGUpIGluIEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2ZvdW5kJ106CisKKyAgICAgICAgICAgICMgaWRlbnRpZmllciA9IGZuICsgdGFza25hbWUgKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKGZuKQorICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm9ybWF0aW9uKQorICAgICAgICAgICAgbWV2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgICAgIG1ldmVudC50YXNrbmFtZSA9IHRhc2tuYW1lCisgICAgICAgICAgICBtZXZlbnQudGFza2hhc2ggPSB0YXNraGFzaAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKG1ldmVudCxyZWNpcGUpCisKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3BhdGhfdG9fc3N0YXRlX29iaiddID0gc3N0YXRlZmlsZQorCisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfdGFza19vYmplY3QodGFza19pbmZvcm1hdGlvbikKKworCisgICAgZGVmIHN0b3JlX3RhcmdldF9wYWNrYWdlX2RhdGEoc2VsZiwgZXZlbnQpOgorICAgICAgICAjIGZvciBhbGwgaW1hZ2UgdGFyZ2V0cworICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgIGlmIHRhcmdldC5pc19pbWFnZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydwa2dkYXRhJ10KKyAgICAgICAgICAgICAgICAgICAgaW1nZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2ltZ2RhdGEnXVt0YXJnZXQudGFyZ2V0XQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgdGFyZ2V0LCBpbWdkYXRhLCBwa2dkYXRhLCBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ10pCisgICAgICAgICAgICAgICAgICAgIGZpbGVkYXRhID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnZmlsZWRhdGEnXVt0YXJnZXQudGFyZ2V0XQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X2ZpbGVfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgdGFyZ2V0LCBmaWxlZGF0YSkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgd2UgbXVzdCBoYXZlIG5vdCBnb3QgdGhlIGRhdGEgZm9yIHRoaXMgaW1hZ2UsIG5vdGhpbmcgdG8gc2F2ZQorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKworCisgICAgZGVmIHN0b3JlX2RlcGVuZGVuY3lfaW5mb3JtYXRpb24oc2VsZiwgZXZlbnQpOgorICAgICAgICBhc3NlcnQgJ19kZXBncmFwaCcgaW4gdmFycyhldmVudCkKKyAgICAgICAgYXNzZXJ0ICdsYXllci1wcmlvcml0aWVzJyBpbiBldmVudC5fZGVwZ3JhcGgKKyAgICAgICAgYXNzZXJ0ICdwbicgaW4gZXZlbnQuX2RlcGdyYXBoCisgICAgICAgIGFzc2VydCAndGRlcGVuZHMnIGluIGV2ZW50Ll9kZXBncmFwaAorCisgICAgICAgIGVycm9ybXNnID0gIiIKKworICAgICAgICAjIHNhdmUgbGF5ZXIgdmVyc2lvbiBwcmlvcml0aWVzCisgICAgICAgIGlmICdsYXllci1wcmlvcml0aWVzJyBpbiBldmVudC5fZGVwZ3JhcGgua2V5cygpOgorICAgICAgICAgICAgZm9yIGx2IGluIGV2ZW50Ll9kZXBncmFwaFsnbGF5ZXItcHJpb3JpdGllcyddOgorICAgICAgICAgICAgICAgIChfLCBwYXRoLCBfLCBwcmlvcml0eSkgPSBsdgorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb25fb2JqID0gc2VsZi5fZ2V0X2xheWVyX3ZlcnNpb25fZm9yX3BhdGgocGF0aFsxOl0pICMgcGF0aHMgc3RhcnQgd2l0aCBhIF4KKyAgICAgICAgICAgICAgICBhc3NlcnQgbGF5ZXJfdmVyc2lvbl9vYmogaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uX29iai5wcmlvcml0eSA9IHByaW9yaXR5CisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmouc2F2ZSgpCisKKyAgICAgICAgIyBzYXZlIHJlY2lwZSBpbmZvcm1hdGlvbgorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ10gPSB7fQorICAgICAgICBmb3IgcG4gaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddOgorCisgICAgICAgICAgICBmaWxlX25hbWUgPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydmaWxlbmFtZSddLnNwbGl0KCI6IilbLTFdCisgICAgICAgICAgICBwYXRoZmxhZ3MgPSAiOiIuam9pbihzb3J0ZWQoZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnZmlsZW5hbWUnXS5zcGxpdCgiOiIpWzotMV0pKQorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmogPSBzZWxmLl9nZXRfbGF5ZXJfdmVyc2lvbl9mb3JfcGF0aChmaWxlX25hbWUpCisKKyAgICAgICAgICAgIGFzc2VydCBsYXllcl92ZXJzaW9uX29iaiBpcyBub3QgTm9uZQorCisgICAgICAgICAgICByZWNpcGVfaW5mbyA9IHt9CisgICAgICAgICAgICByZWNpcGVfaW5mb1snbmFtZSddID0gcG4KKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10gPSBsYXllcl92ZXJzaW9uX29iagorCisgICAgICAgICAgICBpZiAndmVyc2lvbicgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1sndmVyc2lvbiddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsndmVyc2lvbiddLmxzdHJpcCgiOiIpCisKKyAgICAgICAgICAgIGlmICdzdW1tYXJ5JyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydzdW1tYXJ5J10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydzdW1tYXJ5J10KKworICAgICAgICAgICAgaWYgJ2xpY2Vuc2UnIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2xpY2Vuc2UnXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2xpY2Vuc2UnXQorCisgICAgICAgICAgICBpZiAnZGVzY3JpcHRpb24nIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2Rlc2NyaXB0aW9uJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydkZXNjcmlwdGlvbiddCisKKyAgICAgICAgICAgIGlmICdzZWN0aW9uJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydzZWN0aW9uJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydzZWN0aW9uJ10KKworICAgICAgICAgICAgaWYgJ2hvbWVwYWdlJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydob21lcGFnZSddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnaG9tZXBhZ2UnXQorCisgICAgICAgICAgICBpZiAnYnVndHJhY2tlcicgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snYnVndHJhY2tlciddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnYnVndHJhY2tlciddCisKKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSA9IGZpbGVfbmFtZQorICAgICAgICAgICAgcmVjaXBlX2luZm9bJ3BhdGhmbGFncyddID0gcGF0aGZsYWdzCisKKyAgICAgICAgICAgIGlmIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXS5zdGFydHN3aXRoKHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCk6CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddID0gcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddW2xlbihyZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOl0ubHN0cmlwKCIvIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJSZWNpcGUgZmlsZSBwYXRoICVzIGlzIG5vdCB1bmRlciBsYXllciB2ZXJzaW9uIGF0ICVzIiAlIChyZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10sIHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCkpCisKKyAgICAgICAgICAgIHJlY2lwZSA9IHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9yZWNpcGVfb2JqZWN0KHJlY2lwZV9pbmZvKQorICAgICAgICAgICAgcmVjaXBlLmlzX2ltYWdlID0gRmFsc2UKKyAgICAgICAgICAgIGlmICdpbmhlcml0cycgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXS5rZXlzKCk6CisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydpbmhlcml0cyddOgorICAgICAgICAgICAgICAgICAgICBpZiBjbHMuZW5kc3dpdGgoJy9pbWFnZS5iYmNsYXNzJyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuaXNfaW1hZ2UgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcmVjaXBlLmlzX2ltYWdlOgorICAgICAgICAgICAgICAgIGZvciB0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgICAgICAgICAgaWYgcG4gPT0gdC50YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0LmlzX2ltYWdlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgdC5zYXZlKCkKKyAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXVtwbl0gPSByZWNpcGUKKworICAgICAgICAjIHdlJ2xsIG5vdCBnZXQgcmVjaXBlcyBmb3Iga2V5IHcvIHZhbHVlcyBsaXN0ZWQgaW4gQVNTVU1FX1BST1ZJREVECisKKyAgICAgICAgYXNzdW1lX3Byb3ZpZGVkID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkFTU1VNRV9QUk9WSURFRCJdKVswXS5zcGxpdCgpCisKKyAgICAgICAgIyBzYXZlIHJlY2lwZSBkZXBlbmRlbmN5CisgICAgICAgICMgYnVpbGR0aW1lCisgICAgICAgIHJlY2lwZWRlcHNfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciByZWNpcGUgaW4gZXZlbnQuX2RlcGdyYXBoWydkZXBlbmRzJ106CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddW3JlY2lwZV0KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGV2ZW50Ll9kZXBncmFwaFsnZGVwZW5kcyddW3JlY2lwZV06CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgPSBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ11bZGVwXQorICAgICAgICAgICAgICAgICAgICByZWNpcGVkZXBzX29iamVjdHMuYXBwZW5kKFJlY2lwZV9EZXBlbmRlbmN5KCByZWNpcGUgPSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IGRlcGVuZGVuY3ksIGRlcF90eXBlID0gUmVjaXBlX0RlcGVuZGVuY3kuVFlQRV9ERVBFTkRTKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUgbm90IGluIGFzc3VtZV9wcm92aWRlZCBhbmQgbm90IHN0cihlKS5zdGFydHN3aXRoKCJ2aXJ0dWFsLyIpOgorICAgICAgICAgICAgICAgICAgICBlcnJvcm1zZyArPSAiICBzdHBkOiBLZXlFcnJvciBzYXZpbmcgcmVjaXBlIGRlcGVuZGVuY3kgZm9yICVzLCAlcyBcbiIgJSAocmVjaXBlLCBlKQorICAgICAgICBSZWNpcGVfRGVwZW5kZW5jeS5vYmplY3RzLmJ1bGtfY3JlYXRlKHJlY2lwZWRlcHNfb2JqZWN0cykKKworICAgICAgICAjIHNhdmUgYWxsIHRhc2sgaW5mb3JtYXRpb24KKyAgICAgICAgZGVmIF9zYXZlX2FfdGFzayh0YXNrZGVzYyk6CisgICAgICAgICAgICBzcGVjID0gcmUuc3BsaXQocidcLicsIHRhc2tkZXNjKQorICAgICAgICAgICAgcG4gPSAiLiIuam9pbihzcGVjWzA6LTFdKQorICAgICAgICAgICAgdGFza25hbWUgPSBzcGVjWy0xXQorICAgICAgICAgICAgZSA9IGV2ZW50CisgICAgICAgICAgICBlLnRhc2tuYW1lID0gcG4KKyAgICAgICAgICAgIHJlY2lwZSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXVtwbl0KKyAgICAgICAgICAgIHRhc2tfaW5mbyA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKGUsIHJlY2lwZSkKKyAgICAgICAgICAgIHRhc2tfaW5mb1sndGFza19uYW1lJ10gPSB0YXNrbmFtZQorICAgICAgICAgICAgdGFza19vYmogPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfdGFza19vYmplY3QodGFza19pbmZvKQorICAgICAgICAgICAgcmV0dXJuIHRhc2tfb2JqCisKKyAgICAgICAgIyBjcmVhdGUgdGFza3MKKyAgICAgICAgdGFza3MgPSB7fQorICAgICAgICBmb3IgdGFza2Rlc2MgaW4gZXZlbnQuX2RlcGdyYXBoWyd0ZGVwZW5kcyddOgorICAgICAgICAgICAgdGFza3NbdGFza2Rlc2NdID0gX3NhdmVfYV90YXNrKHRhc2tkZXNjKQorCisgICAgICAgICMgY3JlYXRlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRhc2tzCisgICAgICAgIHRhc2tkZXBzX29iamVjdHMgPSBbXQorICAgICAgICBmb3IgdGFza2Rlc2MgaW4gZXZlbnQuX2RlcGdyYXBoWyd0ZGVwZW5kcyddOgorICAgICAgICAgICAgdGFyZ2V0ID0gdGFza3NbdGFza2Rlc2NdCisgICAgICAgICAgICBmb3IgdGFza2RlcCBpbiBldmVudC5fZGVwZ3JhcGhbJ3RkZXBlbmRzJ11bdGFza2Rlc2NdOgorICAgICAgICAgICAgICAgIGlmIHRhc2tkZXAgbm90IGluIHRhc2tzOgorICAgICAgICAgICAgICAgICAgICAjIEZldGNoIHRhc2tzIGluZm8gaXMgbm90IGNvbGxlY3RlZCBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgIGRlcCA9IF9zYXZlX2FfdGFzayh0YXNrZGVwKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlcCA9IHRhc2tzW3Rhc2tkZXBdCisgICAgICAgICAgICAgICAgdGFza2RlcHNfb2JqZWN0cy5hcHBlbmQoVGFza19EZXBlbmRlbmN5KCB0YXNrID0gdGFyZ2V0LCBkZXBlbmRzX29uID0gZGVwICkpCisgICAgICAgIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmJ1bGtfY3JlYXRlKHRhc2tkZXBzX29iamVjdHMpCisKKyAgICAgICAgaWYgbGVuKGVycm9ybXNnKSA+IDA6CisgICAgICAgICAgICBsb2dnZXIud2FybigiYnVpbGRpbmZvaGVscGVyOiBkZXBlbmRlbmN5IGluZm8gbm90IGlkZW50aWZ5IHJlY2lwZXM6IFxuJXMiLCBlcnJvcm1zZykKKworCisgICAgZGVmIHN0b3JlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZiwgZXZlbnQpOgorICAgICAgICBwYWNrYWdlX2luZm8gPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV9idWlsZF9wYWNrYWdlX2luZm9ybWF0aW9uKHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgX3N0b3JlX2J1aWxkX2RvbmUoc2VsZiwgZXJyb3Jjb2RlKToKKyAgICAgICAgbG9nZ2VyLmluZm8oIkJ1aWxkIGV4aXRlZCB3aXRoIGVycm9yY29kZSAlZCIsIGVycm9yY29kZSkKKyAgICAgICAgYnJfaWQsIGJlX2lkID0gc2VsZi5icmJlLnNwbGl0KCI6IikKKyAgICAgICAgYmUgPSBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuZ2V0KHBrID0gYmVfaWQpCisgICAgICAgIGJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfTE9DSworICAgICAgICBiZS5zYXZlKCkKKyAgICAgICAgYnIgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkKKyAgICAgICAgaWYgZXJyb3Jjb2RlID09IDA6CisgICAgICAgICAgICAjIHJlcXVlc3QgYXJjaGl2YWwgb2YgdGhlIHByb2plY3QgYXJ0aWZhY3RzCisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfQVJDSElWRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRAorICAgICAgICBici5zYXZlKCkKKworCisgICAgZGVmIHN0b3JlX2xvZ19lcnJvcihzZWxmLCB0ZXh0KToKKyAgICAgICAgbW9ja2V2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgbW9ja2V2ZW50LmxldmVsbm8gPSBmb3JtYXR0ZXIuRVJST1IKKyAgICAgICAgbW9ja2V2ZW50Lm1zZyA9IHRleHQKKyAgICAgICAgbW9ja2V2ZW50LnBhdGhuYW1lID0gJy0tIE5vbmUnCisgICAgICAgIG1vY2tldmVudC5saW5lbm8gPSBMb2dNZXNzYWdlLkVSUk9SCisgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KG1vY2tldmVudCkKKworICAgIGRlZiBzdG9yZV9sb2dfZXhjZXB0aW9uKHNlbGYsIHRleHQsIGJhY2t0cmFjZSA9ICIiKToKKyAgICAgICAgbW9ja2V2ZW50ID0gTW9ja0V2ZW50KCkKKyAgICAgICAgbW9ja2V2ZW50LmxldmVsbm8gPSAtMQorICAgICAgICBtb2NrZXZlbnQubXNnID0gdGV4dAorICAgICAgICBtb2NrZXZlbnQucGF0aG5hbWUgPSBiYWNrdHJhY2UKKyAgICAgICAgbW9ja2V2ZW50LmxpbmVubyA9IC0xCisgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KG1vY2tldmVudCkKKworCisgICAgZGVmIHN0b3JlX2xvZ19ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPCBmb3JtYXR0ZXIuV0FSTklORzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmICdhcmdzJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIGV2ZW50Lm1zZyA9IGV2ZW50Lm1zZyAlIGV2ZW50LmFyZ3MKKworICAgICAgICBpZiBub3QgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgaWYgc2VsZi5icmJlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbm90ICdiYWNrbG9nJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10gPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXS5hcHBlbmQoZXZlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOiAgICMgd2UncmUgdW5kZXIgVG9hc3RlciBjb250cm9sLCB0aGUgYnVpbGQgaXMgYWxyZWFkeSBjcmVhdGVkCisgICAgICAgICAgICAgICAgYnIsIF8gPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIGJ1aWxkcmVxdWVzdCA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmdldChwayA9IGJyKQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10gPSBidWlsZHJlcXVlc3QuYnVpbGQKKworICAgICAgICBpZiAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGUgYW5kICdiYWNrbG9nJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGEgYmFja2xvZyBvZiBldmVudHMsIGRvIG91ciBiZXN0IHRvIHNhdmUgdGhlbSBoZXJlCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddKToKKyAgICAgICAgICAgICAgICB0ZW1wZXZlbnQgPSBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10ucG9wKCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgImJ1aWxkaW5mb2hlbHBlcjogU2F2aW5nIHN0b3JlZCBldmVudCAlcyAiICUgdGVtcGV2ZW50KQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KHRlbXBldmVudCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImJ1aWxkaW5mb2hlbHBlcjogQWxsIGV2ZW50cyBzYXZlZCIpCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXQorCisgICAgICAgIGxvZ19pbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnYnVpbGQnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10KKyAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA9PSBmb3JtYXR0ZXIuRVJST1I6CisgICAgICAgICAgICBsb2dfaW5mb3JtYXRpb25bJ2xldmVsJ10gPSBMb2dNZXNzYWdlLkVSUk9SCisgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA9PSBmb3JtYXR0ZXIuV0FSTklORzoKKyAgICAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGV2ZWwnXSA9IExvZ01lc3NhZ2UuV0FSTklORworICAgICAgICBlbGlmIGV2ZW50LmxldmVsbm8gPT0gLTI6ICAgIyB0b2FzdGVyIHNlbGYtbG9nZ2luZworICAgICAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsZXZlbCddID0gLTIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGV2ZWwnXSA9IExvZ01lc3NhZ2UuSU5GTworCisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbWVzc2FnZSddID0gZXZlbnQubXNnCisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsncGF0aG5hbWUnXSA9IGV2ZW50LnBhdGhuYW1lCisgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGluZW5vJ10gPSBldmVudC5saW5lbm8KKyAgICAgICAgbG9nZ2VyLmluZm8oIkxvZ2dpbmcgZXJyb3IgMjogJXMiLCBsb2dfaW5mb3JtYXRpb24pCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuY3JlYXRlX2xvZ21lc3NhZ2UobG9nX2luZm9ybWF0aW9uKQorCisgICAgZGVmIGNsb3NlKHNlbGYsIGVycm9yY29kZSk6CisgICAgICAgIGlmIHNlbGYuYnJiZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3N0b3JlX2J1aWxkX2RvbmUoZXJyb3Jjb2RlKQorCisgICAgICAgIGlmICdiYWNrbG9nJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgaWYgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgICAgICMgd2Ugc2F2ZSBtaXNzZWQgZXZlbnRzIGluIHRoZSBkYXRhYmFzZSBmb3IgdGhlIGN1cnJlbnQgYnVpbGQKKyAgICAgICAgICAgICAgICB0ZW1wZXZlbnQgPSBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10ucG9wKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3JlX2xvZ19ldmVudCh0ZW1wZXZlbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgd2UgaGF2ZSBubyBidWlsZCwgYW5kIHdlIHN0aWxsIGhhdmUgZXZlbnRzOyBzb21ldGhpbmcgYW1hemluZ2x5IHdyb25nIGhhcHBlbmQKKyAgICAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVOU0FWRUQgbG9nOiAlcyIsIGV2ZW50Lm1zZykKKworICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjYmUxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTcgQEAKKyMKKyMgR3RrKyBVSSBwaWVjZXMgZm9yIEJpdEJha2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGRldGFpbHNwYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRkZXRhaWxzcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZmM2OTBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRkZXRhaWxzcGFnZS5weQpAQCAtMCwwICsxLDQzNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IHBhbmdvCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGJiLnByb2Nlc3MKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYk5vdGVib29rLCBIb2JBbHRCdXR0b24sIEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0LCBIb2JCdXR0b24sIEhvYkluZm9CdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgUnVubmluZ0J1aWxkVHJlZVZpZXcKK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgQnVpbGRGYWlsdXJlVHJlZVZpZXcKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCisKK2NsYXNzIEJ1aWxkQ29uZmlndXJhdGlvblRyZWVWaWV3KGd0ay5UcmVlVmlldyk6CisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3J1bGVzX2hpbnQoRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2hlYWRlcnNfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoImhvdmVyLWV4cGFuZCIsIFRydWUpCisgICAgICAgIHNlbGYuZ2V0X3NlbGVjdGlvbigpLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgVGhlIGljb24gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBidWlsZGluZyBvciBmYWlsZWQuCisgICAgICAgIHJlbmRlcmVyMCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgcmVuZGVyZXIwLnNldF9wcm9wZXJ0eSgnZm9udC1kZXNjJywgcGFuZ28uRm9udERlc2NyaXB0aW9uKCdjb3VyaWVyIGJvbGQgMTInKSkKKyAgICAgICAgY29sMCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIk5hbWUiLCByZW5kZXJlcjAsIHRleHQ9MCkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wwKQorCisgICAgICAgICMgVGhlIG1lc3NhZ2Ugb2YgY29uZmlndXJhdGlvbi4KKyAgICAgICAgcmVuZGVyZXIxID0gSG9iV2FycENlbGxSZW5kZXJlclRleHQoY29sX251bWJlcj0xKQorICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiVmFsdWVzIiwgcmVuZGVyZXIxLCB0ZXh0PTEpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sMSkKKworICAgIGRlZiBzZXRfdmFycyhzZWxmLCBrZXk9IiIsIHZhcj1bIiJdKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGlmIHR5cGUodmFyKSA9PSBzdHI6CisgICAgICAgICAgICBkID0ge2tleTogW3Zhcl19CisgICAgICAgIGVsaWYgdHlwZSh2YXIpID09IGxpc3QgYW5kIGxlbih2YXIpID4gMToKKyAgICAgICAgICAgICNjcmVhdGUgdGhlIHN1YiBpdGVtIGxpbmUKKyAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgdGV4dCA9ICIiCisgICAgICAgICAgICBmb3IgaXRlbSBpbiB2YXI6CisgICAgICAgICAgICAgICAgdGV4dCA9ICIgLSAiICsgaXRlbQorICAgICAgICAgICAgICAgIGwuYXBwZW5kKHRleHQpCisgICAgICAgICAgICBkID0ge2tleTogdmFyfQorCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgc2V0X2NvbmZpZ19tb2RlbChzZWxmLCBzaG93X3ZhcnMpOgorICAgICAgICBsaXN0bW9kZWwgPSBndGsuVHJlZVN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHBhcmVudCA9IE5vbmUKKyAgICAgICAgZm9yIHZhciBpbiBzaG93X3ZhcnM6CisgICAgICAgICAgICBmb3Igc3ViaXRlbSBpbiB2YXIuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc3ViaXRlbVswXQorICAgICAgICAgICAgICAgIGlzX3BhcmVudCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gc3ViaXRlbVsxXToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNfcGFyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gbGlzdG1vZGVsLmFwcGVuZChwYXJlbnQsIChuYW1lLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpc19wYXJlbnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdG1vZGVsLmFwcGVuZChwYXJlbnQsIChOb25lLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiICAgICAtICIKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBOb25lCisgICAgICAgICMgcmVuZXcgdGhlIHRyZWUgbW9kZWwgYWZ0ZXIgZ2V0IHRoZSBjb25maWd1cmF0aW9uIG1lc3NhZ2VzCisgICAgICAgIHNlbGYuc2V0X21vZGVsKGxpc3Rtb2RlbCkKKworICAgIGRlZiBzaG93KHNlbGYsIHNyY19jb25maWdfaW5mbywgc3JjX3BhcmFtcyk6CisgICAgICAgIHZhcnMgPSBbXQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJCQiB2ZXJzaW9uOiIsIHNyY19wYXJhbXMuYmJfdmVyc2lvbikpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIlRhcmdldCBhcmNoOiIsIHNyY19wYXJhbXMudGFyZ2V0X2FyY2gpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJUYXJnZXQgT1M6Iiwgc3JjX3BhcmFtcy50YXJnZXRfb3MpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJNYWNoaW5lOiIsIHNyY19jb25maWdfaW5mby5jdXJyX21hY2gpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJEaXN0cm86Iiwgc3JjX2NvbmZpZ19pbmZvLmN1cnJfZGlzdHJvKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiRGlzdHJvIHZlcnNpb246Iiwgc3JjX3BhcmFtcy5kaXN0cm9fdmVyc2lvbikpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIlNESyBtYWNoaW5lOiIsIHNyY19jb25maWdfaW5mby5jdXJyX3Nka19tYWNoaW5lKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiVHVuZSBmZWF0dXJlczoiLCBzcmNfcGFyYW1zLnR1bmVfcGtnYXJjaCkpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkxheWVyczoiLCBzcmNfY29uZmlnX2luZm8ubGF5ZXJzKSkKKworICAgICAgICBmb3IgcGF0aCBpbiBzcmNfY29uZmlnX2luZm8ubGF5ZXJzOgorICAgICAgICAgICAgaW1wb3J0IG9zLCBvcy5wYXRoCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBiYi5wcm9jZXNzLnJ1bignY2QgJXM7IGdpdCBicmFuY2ggfCBncmVwICJeKiAiIHwgdHIgLWQgIiogIicgJSBwYXRoKVswXQorICAgICAgICAgICAgICAgIGlmIGJyYW5jaC5zdGFydHN3aXRoKCJmYXRhbDoiKToKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gIih1bmtub3duKSIKKyAgICAgICAgICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaC5zdHJpcCgnXG4nKQorICAgICAgICAgICAgICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJCcmFuY2g6IiwgYnJhbmNoKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tb2RlbCh2YXJzKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldF9tb2RlbChOb25lKQorCisjCisjIEJ1aWxkRGV0YWlsc1BhZ2UKKyMKKworY2xhc3MgQnVpbGREZXRhaWxzUGFnZSAoSG9iUGFnZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKEJ1aWxkRGV0YWlsc1BhZ2UsIHNlbGYpLl9faW5pdF9fKGJ1aWxkZXIsICJCdWlsZGluZyAuLi4iKQorCisgICAgICAgIHNlbGYubnVtX29mX2lzc3VlcyA9IDAKKyAgICAgICAgc2VsZi5lbmRwYXRoID0gKDAsKQorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi52Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYm94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnRhc2tfc3RhdHVzID0gZ3RrLkxhYmVsKCJcbiIpICMgdG8gZW5zdXJlIGxheW91dCBpcyBjb3JyZWN0CisgICAgICAgIHNlbGYudGFza19zdGF0dXMuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19ib3gucGFja19zdGFydChzZWxmLnRhc2tfc3RhdHVzLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLnByb2dyZXNzX2JveC5wYWNrX2VuZChzZWxmLnByb2dyZXNzX2hib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnByb2dyZXNzX2hib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzX2JhciwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiU3RvcCIpCisgICAgICAgIHNlbGYuc3RvcF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc3RvcF9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBzZWxmLnByb2dyZXNzX2hib3gucGFja19lbmQoc2VsZi5zdG9wX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYubm90ZWJvb2sgPSBIb2JOb3RlYm9vaygpCisgICAgICAgIHNlbGYuY29uZmlnX3R2ID0gQnVpbGRDb25maWd1cmF0aW9uVHJlZVZpZXcoKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfY29uZmlnID0gZ3RrLlNjcm9sbGVkV2luZG93ICgpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19jb25maWcuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2NvbmZpZy5hZGQoc2VsZi5jb25maWdfdHYpCisgICAgICAgIHNlbGYubm90ZWJvb2suYXBwZW5kX3BhZ2Uoc2VsZi5zY3JvbGxlZF92aWV3X2NvbmZpZywgIkJ1aWxkIGNvbmZpZ3VyYXRpb24iKQorCisgICAgICAgIHNlbGYuZmFpbHVyZV90diA9IEJ1aWxkRmFpbHVyZVRyZWVWaWV3KCkKKyAgICAgICAgc2VsZi5mYWlsdXJlX21vZGVsID0gc2VsZi5idWlsZGVyLmhhbmRsZXIuYnVpbGQubW9kZWwuZmFpbHVyZV9tb2RlbCgpCisgICAgICAgIHNlbGYuZmFpbHVyZV90di5zZXRfbW9kZWwoc2VsZi5mYWlsdXJlX21vZGVsKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfZmFpbHVyZSA9IGd0ay5TY3JvbGxlZFdpbmRvdyAoKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfZmFpbHVyZS5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQUxXQVlTKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfZmFpbHVyZS5hZGQoc2VsZi5mYWlsdXJlX3R2KQorICAgICAgICBzZWxmLm5vdGVib29rLmFwcGVuZF9wYWdlKHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlLCAiSXNzdWVzIikKKworICAgICAgICBzZWxmLmJ1aWxkX3R2ID0gUnVubmluZ0J1aWxkVHJlZVZpZXcocmVhZG9ubHk9VHJ1ZSwgaG9iPVRydWUpCisgICAgICAgIHNlbGYuYnVpbGRfdHYuc2V0X21vZGVsKHNlbGYuYnVpbGRlci5oYW5kbGVyLmJ1aWxkLm1vZGVsKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfYnVpbGQgPSBndGsuU2Nyb2xsZWRXaW5kb3cgKCkKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2J1aWxkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BTFdBWVMpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZC5hZGQoc2VsZi5idWlsZF90dikKKyAgICAgICAgc2VsZi5ub3RlYm9vay5hcHBlbmRfcGFnZShzZWxmLnNjcm9sbGVkX3ZpZXdfYnVpbGQsICJMb2ciKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5oYW5kbGVyLmJ1aWxkLm1vZGVsLmNvbm5lY3RfYWZ0ZXIoInJvdy1jaGFuZ2VkIiwgc2VsZi5zY3JvbGxfdG9fcHJlc2VudF9yb3csIHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZC5nZXRfdmFkanVzdG1lbnQoKSwgc2VsZi5idWlsZF90dikKKworICAgICAgICBzZWxmLmJ1dHRvbl9ib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignJmx0OyZsdDsgQmFjaycpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYmFja19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfc3RhcnQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgZGVmIHVwZGF0ZV9idWlsZF9zdGF0dXMoc2VsZiwgY3VycmVudCwgdG90YWwsIHRhc2spOgorICAgICAgICByZWNpcGVfcGF0aCwgcmVjaXBlX3Rhc2sgPSB0YXNrLnNwbGl0KCIsICIpCisgICAgICAgIHJlY2lwZSA9IG9zLnBhdGguYmFzZW5hbWUocmVjaXBlX3BhdGgpLnJzdHJpcCgiLmJiIikKKyAgICAgICAgdHNrX21zZyA9ICI8Yj5SdW5uaW5nIHRhc2sgJXMgb2YgJXM6PC9iPiAlc1xuPGI+UmVjaXBlOjwvYj4gJXMiICUgKGN1cnJlbnQsIHRvdGFsLCByZWNpcGVfdGFzaywgcmVjaXBlKQorICAgICAgICBzZWxmLnRhc2tfc3RhdHVzLnNldF9tYXJrdXAodHNrX21zZykKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICBkZWYgcmVzZXRfYnVpbGRfc3RhdHVzKHNlbGYpOgorICAgICAgICBzZWxmLnRhc2tfc3RhdHVzLnNldF9tYXJrdXAoIlxuIikgIyB0byBlbnN1cmUgbGF5b3V0IGlzIGNvcnJlY3QKKyAgICAgICAgc2VsZi5lbmRwYXRoID0gKDAsKQorCisgICAgZGVmIHNob3dfaXNzdWVzKHNlbGYpOgorICAgICAgICBzZWxmLm51bV9vZl9pc3N1ZXMgKz0gMQorICAgICAgICBzZWxmLm5vdGVib29rLnNob3dfaW5kaWNhdG9yX2ljb24oIklzc3VlcyIsIHNlbGYubnVtX29mX2lzc3VlcykKKyAgICAgICAgc2VsZi5ub3RlYm9vay5xdWV1ZV9kcmF3KCkKKworICAgIGRlZiByZXNldF9pc3N1ZXMoc2VsZik6CisgICAgICAgIHNlbGYubnVtX29mX2lzc3VlcyA9IDAKKyAgICAgICAgc2VsZi5ub3RlYm9vay5oaWRlX2luZGljYXRvcl9pY29uKCJJc3N1ZXMiKQorCisgICAgZGVmIF9yZW1vdmVfYWxsX3dpZGdldChzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLnZib3guZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi52Ym94LnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmJveF9ncm91cF9hcmVhLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoY2hpbGQpCisKKyAgICBkZWYgYWRkX2J1aWxkX2ZhaWxfdG9wX2JhcihzZWxmLCBhY3Rpb25zLCBsb2dfZmlsZT1Ob25lKToKKyAgICAgICAgcHJpbWFyeV9hY3Rpb24gPSAiRWRpdCAlcyIgJSBhY3Rpb25zCisKKyAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuRVJST1IKKyAgICAgICAgYnVpbGRfZmFpbF90b3AgPSBndGsuRXZlbnRCb3goKQorICAgICAgICAjYnVpbGRfZmFpbF90b3Auc2V0X3NpemVfcmVxdWVzdCgtMSwgMjAwKQorICAgICAgICBidWlsZF9mYWlsX3RvcC5tb2RpZnlfYmcoZ3RrLlNUQVRFX05PUk1BTCwgZ3RrLmdkay5jb2xvcl9wYXJzZShjb2xvcikpCisKKyAgICAgICAgYnVpbGRfZmFpbF90YWIgPSBndGsuVGFibGUoMTQsIDQ2LCBUcnVlKQorICAgICAgICBidWlsZF9mYWlsX3RvcC5hZGQoYnVpbGRfZmFpbF90YWIpCisKKyAgICAgICAgaWNvbiA9IGd0ay5JbWFnZSgpCisgICAgICAgIGljb25fcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9FUlJPUl9GSUxFKQorICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihpY29uX3BpeF9idWZmZXIpCisgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChpY29uLCAxLCA0LCAwLCA2KQorCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+PGI+JXM8L2I+PC9zcGFuPiIgJSBzZWxmLnRpdGxlKQorICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gobGFiZWwsIDQsIDI2LCAwLCA2KQorCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgIyBFbnN1cmUgdmFyaWFibGUgZGlza19mdWxsIGlzIGRlZmluZWQKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5idWlsZGVyLCAnZGlza19mdWxsJyk6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZGlza19mdWxsID0gRmFsc2UKKworICAgICAgICBpZiBzZWxmLmJ1aWxkZXIuZGlza19mdWxsOgorICAgICAgICAgICAgbWFya3VwID0gIjxzcGFuIHNpemU9J21lZGl1bSc+VGhlcmUgaXMgbm8gZGlzayBzcGFjZSBsZWZ0LCBzbyBIb2IgY2Fubm90IGZpbmlzaCBidWlsZGluZyB5b3VyIGltYWdlLiBGcmVlIHVwIHNvbWUgZGlzayBzcGFjZVxuIgorICAgICAgICAgICAgbWFya3VwICs9ICJhbmQgcmVzdGFydCB0aGUgYnVpbGQuIENoZWNrIHRoZSBcIklzc3Vlc1wiIHRhYiBmb3IgbW9yZSBkZXRhaWxzPC9zcGFuPiIKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0nbWVkaXVtJz5DaGVjayB0aGUgXCJJc3N1ZXNcIiBpbmZvcm1hdGlvbiBmb3IgbW9yZSBkZXRhaWxzPC9zcGFuPiIpCisgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChsYWJlbCwgNCwgNDAsIDQsIDkpCisKKyAgICAgICAgIyBjcmVhdGUgYnV0dG9uICdFZGl0IHBhY2thZ2VzJworICAgICAgICBhY3Rpb25fYnV0dG9uID0gSG9iQnV0dG9uKHByaW1hcnlfYWN0aW9uKQorICAgICAgICAjYWN0aW9uX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA0MCkKKyAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSAlcyBwYXJhbWV0ZXJzIiAlIGFjdGlvbnMpCisgICAgICAgIGFjdGlvbl9idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuZmFpbHVyZV9wcmltYXJ5X2FjdGlvbl9idXR0b25fY2xpY2tlZF9jYiwgcHJpbWFyeV9hY3Rpb24pCisKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24gPSBIb2JBbHRCdXR0b24oIk9wZW4gbG9nIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfSEFMRikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBidWlsZCdzIGxvZyBmaWxlIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5vcGVuX2xvZ19idXR0b25fY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisKKyAgICAgICAgYXR0YWNoX3BvcyA9ICgyNCBpZiBsb2dfZmlsZSBlbHNlIDE0KQorICAgICAgICBmaWxlX2J1Z19idXR0b24gPSBIb2JBbHRCdXR0b24oJ0ZpbGUgYSBidWcnKQorICAgICAgICBmaWxlX2J1Z19idXR0b24uc2V0X3JlbGllZihndGsuUkVMSUVGX0hBTEYpCisgICAgICAgIGZpbGVfYnVnX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBZb2N0byBQcm9qZWN0IGJ1ZyB0cmFja2luZyB3ZWJzaXRlIikKKyAgICAgICAgZmlsZV9idWdfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLmZhaWx1cmVfYWN0aXZhdGVfZmlsZV9idWdfbGlua19jYikKKworICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGVyLmRpc2tfZnVsbDoKKyAgICAgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChhY3Rpb25fYnV0dG9uLCA0LCAxMywgOSwgMTIpCisgICAgICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gob3Blbl9sb2dfYnV0dG9uLCAxNCwgMjMsIDksIDEyKQorICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGZpbGVfYnVnX2J1dHRvbiwgYXR0YWNoX3BvcywgYXR0YWNoX3BvcyArIDksIDksIDEyKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN0YXJ0X2J1aWxkID0gSG9iQnV0dG9uKCJSZXN0YXJ0IHRoZSBidWlsZCIpCisgICAgICAgICAgICByZXN0YXJ0X2J1aWxkLnNldF90b29sdGlwX3RleHQoIlJlc3RhcnQgdGhlIGJ1aWxkIikKKyAgICAgICAgICAgIHJlc3RhcnRfYnVpbGQuY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYucmVzdGFydF9idWlsZF9idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKHJlc3RhcnRfYnVpbGQsIDQsIDEzLCA5LCAxMikKKyAgICAgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChhY3Rpb25fYnV0dG9uLCAxNCwgMjMsIDksIDEyKQorICAgICAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKG9wZW5fbG9nX2J1dHRvbiwgYXR0YWNoX3BvcywgYXR0YWNoX3BvcyArIDksIDksIDEyKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5kaXNrX2Z1bGwgPSBGYWxzZQorICAgICAgICByZXR1cm4gYnVpbGRfZmFpbF90b3AKKworICAgIGRlZiBzaG93X2ZhaWxfcGFnZShzZWxmLCB0aXRsZSk6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgc2VsZi50aXRsZSA9ICJIb2IgY2Fubm90IGJ1aWxkIHlvdXIgJXMiICUgdGl0bGUKKworICAgICAgICBzZWxmLmJ1aWxkX2ZhaWxfYmFyID0gc2VsZi5hZGRfYnVpbGRfZmFpbF90b3BfYmFyKHRpdGxlLCBzZWxmLmJ1aWxkZXIuY3VycmVudF9sb2dmaWxlKQorCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9mYWlsX2JhciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi52Ym94LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubm90ZWJvb2ssIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5vdGVib29rLnNldF9wYWdlKCJJc3N1ZXMiKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmhpZGUoKQorCisgICAgZGVmIGFkZF9idWlsZF9zdG9wX3RvcF9iYXIoc2VsZiwgYWN0aW9uLCBsb2dfZmlsZT1Ob25lKToKKyAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuTElHSFRfR1JBWQorICAgICAgICBidWlsZF9zdG9wX3RvcCA9IGd0ay5FdmVudEJveCgpCisgICAgICAgICNidWlsZF9zdG9wX3RvcC5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCAyMDApCisgICAgICAgIGJ1aWxkX3N0b3BfdG9wLm1vZGlmeV9iZyhndGsuU1RBVEVfTk9STUFMLCBndGsuZ2RrLmNvbG9yX3BhcnNlKGNvbG9yKSkKKyAgICAgICAgYnVpbGRfc3RvcF90b3Auc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgYnVpbGRfc3RvcF90b3AuZ3JhYl9kZWZhdWx0KCkKKworICAgICAgICBidWlsZF9zdG9wX3RhYiA9IGd0ay5UYWJsZSgxMSwgNDYsIFRydWUpCisgICAgICAgIGJ1aWxkX3N0b3BfdG9wLmFkZChidWlsZF9zdG9wX3RhYikKKworICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaWNvbl9waXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0hPVkVSX0ZJTEUpCisgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKGljb25fcGl4X2J1ZmZlcikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGljb24sIDEsIDQsIDAsIDYpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIHNlbGYudGl0bGUpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChsYWJlbCwgNCwgMjYsIDAsIDYpCisKKyAgICAgICAgYWN0aW9uX2J1dHRvbiA9IEhvYkJ1dHRvbigiRWRpdCAlcyIgJSBhY3Rpb24pCisgICAgICAgIGFjdGlvbl9idXR0b24uc2V0X3NpemVfcmVxdWVzdCgtMSwgNDApCisgICAgICAgIGlmIGFjdGlvbiA9PSAiaW1hZ2UiOgorICAgICAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBpbWFnZSBwYXJhbWV0ZXJzIikKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gInJlY2lwZXMiOgorICAgICAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBpbmNsdWRlZCByZWNpcGVzIikKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gInBhY2thZ2VzIjoKKyAgICAgICAgICAgIGFjdGlvbl9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiRWRpdCB0aGUgaW5jbHVkZWQgcGFja2FnZXMiKQorICAgICAgICBhY3Rpb25fYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLnN0b3BfcHJpbWFyeV9hY3Rpb25fYnV0dG9uX2NsaWNrZWRfY2IsIGFjdGlvbikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGFjdGlvbl9idXR0b24sIDQsIDEzLCA2LCA5KQorCisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJPcGVuIGxvZyIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3JlbGllZihndGsuUkVMSUVGX0hBTEYpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgYnVpbGQncyBsb2cgZmlsZSIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYub3Blbl9sb2dfYnV0dG9uX2NsaWNrZWRfY2IsIGxvZ19maWxlKQorICAgICAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKG9wZW5fbG9nX2J1dHRvbiwgMTQsIDIzLCA2LCA5KQorCisgICAgICAgIGF0dGFjaF9wb3MgPSAoMjQgaWYgbG9nX2ZpbGUgZWxzZSAxNCkKKyAgICAgICAgYnVpbGRfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJCdWlsZCBuZXcgaW1hZ2UiKQorICAgICAgICAjYnVpbGRfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoLTEsIDQwKQorICAgICAgICBidWlsZF9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gc2NyYXRjaCIpCisgICAgICAgIGJ1aWxkX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5uZXdfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChidWlsZF9idXR0b24sIGF0dGFjaF9wb3MsIGF0dGFjaF9wb3MgKyA5LCA2LCA5KQorCisgICAgICAgIHJldHVybiBidWlsZF9zdG9wX3RvcCwgYWN0aW9uX2J1dHRvbgorCisgICAgZGVmIHNob3dfc3RvcF9wYWdlKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgc2VsZi50aXRsZSA9ICJCdWlsZCBzdG9wcGVkIgorICAgICAgICBzZWxmLmJ1aWxkX3N0b3BfYmFyLCBhY3Rpb25fYnV0dG9uID0gc2VsZi5hZGRfYnVpbGRfc3RvcF90b3BfYmFyKGFjdGlvbiwgc2VsZi5idWlsZGVyLmN1cnJlbnRfbG9nZmlsZSkKKworICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ncm91cF9hbGlnbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuYnVpbGRfc3RvcF9iYXIsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYudmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLm5vdGVib29rLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5oaWRlKCkKKyAgICAgICAgcmV0dXJuIGFjdGlvbl9idXR0b24KKworICAgIGRlZiBzaG93X3BhZ2Uoc2VsZiwgc3RlcCk6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgaWYgc3RlcCA9PSBzZWxmLmJ1aWxkZXIuUEFDS0FHRV9HRU5FUkFUSU5HIG9yIHN0ZXAgPT0gc2VsZi5idWlsZGVyLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIHNlbGYudGl0bGUgPSAiQnVpbGRpbmcgcGFja2FnZXMgLi4uIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50aXRsZSA9ICJCdWlsZGluZyBpbWFnZSAuLi4iCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc190b3AgPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoTm9uZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuYnVpbGRfZGV0YWlsc190b3AsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYudmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYuY29uZmlnX3R2LnJlc2V0KCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5wcm9ncmVzc19ib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLm5vdGVib29rLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoc2VsZi5idXR0b25fYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5vdGVib29rLnNldF9wYWdlKCJMb2ciKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmhpZGUoKQorCisgICAgICAgIHNlbGYucmVzZXRfYnVpbGRfc3RhdHVzKCkKKyAgICAgICAgc2VsZi5yZXNldF9pc3N1ZXMoKQorCisgICAgZGVmIHVwZGF0ZV9wcm9ncmVzc19iYXIoc2VsZiwgdGl0bGUsIGZyYWN0aW9uLCBzdGF0dXM9Tm9uZSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnVwZGF0ZShmcmFjdGlvbikKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RpdGxlKHRpdGxlKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZShzdGF0dXMpCisKKyAgICBkZWYgYmFja19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBuZXdfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlc2V0KCkKKworICAgIGRlZiBzaG93X2JhY2tfYnV0dG9uKHNlbGYpOgorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLnNob3coKQorCisgICAgZGVmIHN0b3BfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnN0b3BfYnVpbGQoKQorCisgICAgZGVmIGhpZGVfc3RvcF9idXR0b24oc2VsZik6CisgICAgICAgIHNlbGYuc3RvcF9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5oaWRlKCkKKworICAgIGRlZiBzY3JvbGxfdG9fcHJlc2VudF9yb3coc2VsZiwgbW9kZWwsIHBhdGgsIGl0ZXIsIHZfYWRqLCB0cmVldmlldyk6CisgICAgICAgIGlmIHRyZWV2aWV3IGFuZCB2X2FkajoKKyAgICAgICAgICAgIGlmIHBhdGhbMF0gPiBzZWxmLmVuZHBhdGhbMF06ICMgY2hlY2sgdGhlIGV2ZW50IGlzIGEgbmV3IHJvdyBhcHBlbmQgb3Igbm90CisgICAgICAgICAgICAgICAgc2VsZi5lbmRwYXRoID0gcGF0aAorICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIGd0ay5hZGp1c3RtZW50IHBvc2l0aW9uIGlzIGF0IGVuZCBib3VuZGFyeSBvciBub3QKKyAgICAgICAgICAgICAgICBpZiAodl9hZGoudXBwZXIgPD0gdl9hZGoucGFnZV9zaXplKSBvciAodl9hZGoudmFsdWUgPT0gdl9hZGoudXBwZXIgLSB2X2Fkai5wYWdlX3NpemUpOgorICAgICAgICAgICAgICAgICAgICB0cmVldmlldy5zY3JvbGxfdG9fY2VsbChwYXRoKQorCisgICAgZGVmIHNob3dfY29uZmlndXJhdGlvbnMoc2VsZiwgY29uZmlndXJhdGlvbnMsIHBhcmFtcyk6CisgICAgICAgIHNlbGYuY29uZmlnX3R2LnNob3coY29uZmlndXJhdGlvbnMsIHBhcmFtcykKKworICAgIGRlZiBmYWlsdXJlX3ByaW1hcnlfYWN0aW9uX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgYWN0aW9uKToKKyAgICAgICAgaWYgIkVkaXQgcmVjaXBlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcmVjaXBlcygpCisgICAgICAgIGVsaWYgIkVkaXQgcGFja2FnZXMiIGluIGFjdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3BhY2thZ2VzKCkKKyAgICAgICAgZWxpZiAiRWRpdCBpbWFnZSIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisKKyAgICBkZWYgcmVzdGFydF9idWlsZF9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuanVzdF9iYWtlKCkKKworICAgIGRlZiBzdG9wX3ByaW1hcnlfYWN0aW9uX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgYWN0aW9uKToKKyAgICAgICAgaWYgInJlY2lwZXMiIGluIGFjdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZXMoKQorICAgICAgICBlbGlmICJwYWNrYWdlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcGFja2FnZXMoKQorICAgICAgICBlbGlmICJpbWFnZSIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisKKyAgICBkZWYgb3Blbl9sb2dfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBsb2dfZmlsZSk6CisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgbG9nX2ZpbGUgPSAiZmlsZTovLy8iICsgbG9nX2ZpbGUKKyAgICAgICAgICAgIGd0ay5zaG93X3VyaShzY3JlZW49YnV0dG9uLmdldF9zY3JlZW4oKSwgdXJpPWxvZ19maWxlLCB0aW1lc3RhbXA9MCkKKworICAgIGRlZiBmYWlsdXJlX2FjdGl2YXRlX2ZpbGVfYnVnX2xpbmtfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgYnV0dG9uLmNoaWxkLmVtaXQoJ2FjdGl2YXRlLWxpbmsnLCAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmciKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGNjNDEwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkZXIucHkKQEAgLTAsMCArMSwxNDc1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnbGliCitpbXBvcnQgZ3RrLCBnb2JqZWN0CitpbXBvcnQgY29weQoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNobGV4CitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgdGltZQorZnJvbSBiYi51aS5jcnVtYnMuaW1hZ2Vjb25maWd1cmF0aW9ucGFnZSBpbXBvcnQgSW1hZ2VDb25maWd1cmF0aW9uUGFnZQorZnJvbSBiYi51aS5jcnVtYnMucmVjaXBlc2VsZWN0aW9ucGFnZSBpbXBvcnQgUmVjaXBlU2VsZWN0aW9uUGFnZQorZnJvbSBiYi51aS5jcnVtYnMucGFja2FnZXNlbGVjdGlvbnBhZ2UgaW1wb3J0IFBhY2thZ2VTZWxlY3Rpb25QYWdlCitmcm9tIGJiLnVpLmNydW1icy5idWlsZGRldGFpbHNwYWdlIGltcG9ydCBCdWlsZERldGFpbHNQYWdlCitmcm9tIGJiLnVpLmNydW1icy5pbWFnZWRldGFpbHNwYWdlIGltcG9ydCBJbWFnZURldGFpbHNQYWdlCitmcm9tIGJiLnVpLmNydW1icy5zYW5pdHljaGVja3BhZ2UgaW1wb3J0IFNhbml0eUNoZWNrUGFnZQorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBod2MsIEhvYkJ1dHRvbiwgSG9iQWx0QnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5wZXJzaXN0ZW50dG9vbHRpcCBpbXBvcnQgUGVyc2lzdGVudFRvb2x0aXAKK2ltcG9ydCBiYi51aS5jcnVtYnMudXRpbHMKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2ltcGxlc2V0dGluZ3NkaWFsb2cgaW1wb3J0IFNpbXBsZVNldHRpbmdzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuYWR2YW5jZWRzZXR0aW5nc2RpYWxvZyBpbXBvcnQgQWR2YW5jZWRTZXR0aW5nc0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmRlcGxveWltYWdlZGlhbG9nIGltcG9ydCBEZXBsb3lJbWFnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmltYWdlc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBJbWFnZVNlbGVjdGlvbkRpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnBhcnNpbmd3YXJuaW5nc2RpYWxvZyBpbXBvcnQgUGFyc2luZ1dhcm5pbmdzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcucHJvcGVydHlkaWFsb2cgaW1wb3J0IFByb3BlcnR5RGlhbG9nCisKK2hvYlZlciA9IDIwMTIwODA4CisKK2NsYXNzIENvbmZpZ3VyYXRpb246CisgICAgJycnUmVwcmVzZW50cyB0aGUgZGF0YSBzdHJ1Y3R1cmUgb2YgY29uZmlndXJhdGlvbi4nJycKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZV9wcm94eV9zdHJpbmcoY2xzLCBwcm94eSk6CisgICAgICAgIHBhdHRlcm4gPSAiXlxzKigoaHR0cHxodHRwc3xmdHB8c29ja3N8Y3ZzKTovLyk/KChcUyspOihcUyspQCk/KFteXHM6XSspKDooXGQrKSk/Lz8iCisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHBhdHRlcm4sIHByb3h5KQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgyKSwgbWF0Y2guZ3JvdXAoNCksIG1hdGNoLmdyb3VwKDUpLCBtYXRjaC5ncm91cCg2KSwgbWF0Y2guZ3JvdXAoOCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lLCBOb25lLCAiIiwgIiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtlX2hvc3Rfc3RyaW5nKGNscywgcHJvdCwgdXNlciwgcGFzc3dkLCBob3N0LCBkZWZhdWx0X3Byb3Q9IiIpOgorICAgICAgICBpZiBob3N0ID09IE5vbmUgb3IgaG9zdCA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHBhc3N3ZCA9IHBhc3N3ZCBvciAiIgorCisgICAgICAgIGlmIHVzZXIgIT0gTm9uZSBhbmQgdXNlciAhPSAiIjoKKyAgICAgICAgICAgIGlmIHByb3QgPT0gTm9uZSBvciBwcm90ID09ICIiOgorICAgICAgICAgICAgICAgIHByb3QgPSBkZWZhdWx0X3Byb3QKKyAgICAgICAgICAgIHJldHVybiBwcm90ICsgIjovLyIgKyB1c2VyICsgIjoiICsgcGFzc3dkICsgIkAiICsgaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcHJvdCA9PSBOb25lIG9yIHByb3QgPT0gIiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhvc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3QgKyAiOi8vIiArIGhvc3QKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtlX3BvcnRfc3RyaW5nKGNscywgcG9ydCk6CisgICAgICAgIHBvcnQgPSBwb3J0IG9yICIiCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFrZV9wcm94eV9zdHJpbmcoY2xzLCBwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIHBvcnQsIGRlZmF1bHRfcHJvdD0iIik6CisgICAgICAgIGlmIGhvc3QgPT0gTm9uZSBvciBob3N0ID09ICIiOiMgb3IgcG9ydCA9PSBOb25lIG9yIHBvcnQgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX2hvc3Rfc3RyaW5nKHByb3QsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgZGVmYXVsdF9wcm90KSArICgiOiIgKyBDb25maWd1cmF0aW9uLm1ha2VfcG9ydF9zdHJpbmcocG9ydCkgaWYgcG9ydCBlbHNlICIiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmN1cnJfbWFjaCA9ICIiCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfaW1hZ2UgPSBOb25lCisgICAgICAgICMgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5jdXJyX2Rpc3RybyA9ICIiCisgICAgICAgIHNlbGYuZGxkaXIgPSBzZWxmLnNzdGF0ZWRpciA9IHNlbGYuc3N0YXRlbWlycm9yID0gIiIKKyAgICAgICAgc2VsZi5wbWFrZSA9IHNlbGYuYmJ0aHJlYWQgPSAwCisgICAgICAgIHNlbGYuY3Vycl9wYWNrYWdlX2Zvcm1hdCA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzX3NpemUgPSBzZWxmLmltYWdlX2V4dHJhX3NpemUgPSAwCisgICAgICAgIHNlbGYuaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gMQorICAgICAgICBzZWxmLmluY29tcGF0X2xpY2Vuc2UgPSAiIgorICAgICAgICBzZWxmLmN1cnJfc2RrX21hY2hpbmUgPSAiIgorICAgICAgICBzZWxmLmNvbmZfdmVyc2lvbiA9IHNlbGYubGNvbmZfdmVyc2lvbiA9ICIiCisgICAgICAgIHNlbGYuZXh0cmFfc2V0dGluZyA9IHt9CisgICAgICAgIHNlbGYudG9vbGNoYWluX2J1aWxkID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGVzID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9zaXplID0gTm9uZQorICAgICAgICBzZWxmLmltYWdlX3BhY2thZ2VzID0gW10KKyAgICAgICAgIyBiYmxheWVycy5jb25mCisgICAgICAgIHNlbGYubGF5ZXJzID0gW10KKyAgICAgICAgIyBpbWFnZS9yZWNpcGVzL3BhY2thZ2VzCisgICAgICAgIHNlbGYuY2xlYXJfc2VsZWN0aW9uKCkKKworICAgICAgICBzZWxmLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMgPSBbXQorCisgICAgICAgIHNlbGYuZGVmYXVsdF90YXNrID0gImJ1aWxkIgorCisgICAgICAgICMgcHJveHkgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5lbmFibGVfcHJveHkgPSBOb25lCisgICAgICAgIHNlbGYuc2FtZV9wcm94eSA9IEZhbHNlCisgICAgICAgIHNlbGYucHJveGllcyA9IHsKKyAgICAgICAgICAgICJodHRwIiAgOiBbTm9uZSwgTm9uZSwgTm9uZSwgIiIsICIiXSwgICMgcHJvdG9jb2wgOiBbcHJvdCwgdXNlciwgcGFzc3dkLCBob3N0LCBwb3J0XQorICAgICAgICAgICAgImh0dHBzIiA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICAgICAgImZ0cCIgICA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICAgICAgInNvY2tzIiA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICAgICAgImN2cyIgICA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLAorICAgICAgICB9CisKKyAgICBkZWYgY2xlYXJfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnNlbGVjdGVkX3JlY2lwZXMgPSBbXQorICAgICAgICBzZWxmLnNlbGVjdGVkX3BhY2thZ2VzID0gW10KKyAgICAgICAgc2VsZi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlID0gTm9uZQorICAgICAgICBzZWxmLmluaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMgPSBbXQorICAgICAgICBzZWxmLmluaXRpYWxfdXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IFtdCisKKyAgICBkZWYgc3BsaXRfcHJveHkoc2VsZiwgcHJvdG9jb2wsIHByb3h5KToKKyAgICAgICAgZW50cnkgPSBbXQorICAgICAgICBwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIHBvcnQgPSBDb25maWd1cmF0aW9uLnBhcnNlX3Byb3h5X3N0cmluZyhwcm94eSkKKyAgICAgICAgZW50cnkuYXBwZW5kKHByb3QpCisgICAgICAgIGVudHJ5LmFwcGVuZCh1c2VyKQorICAgICAgICBlbnRyeS5hcHBlbmQocGFzc3dkKQorICAgICAgICBlbnRyeS5hcHBlbmQoaG9zdCkKKyAgICAgICAgZW50cnkuYXBwZW5kKHBvcnQpCisgICAgICAgIHNlbGYucHJveGllc1twcm90b2NvbF0gPSBlbnRyeQorCisgICAgZGVmIGNvbWJpbmVfcHJveHkoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBlbnRyeSA9IHNlbGYucHJveGllc1twcm90b2NvbF0KKyAgICAgICAgcmV0dXJuIENvbmZpZ3VyYXRpb24ubWFrZV9wcm94eV9zdHJpbmcoZW50cnlbMF0sIGVudHJ5WzFdLCBlbnRyeVsyXSwgZW50cnlbM10sIGVudHJ5WzRdLCBwcm90b2NvbCkKKworICAgIGRlZiBjb21iaW5lX2hvc3Rfb25seShzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5wcm94aWVzW3Byb3RvY29sXQorICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX2hvc3Rfc3RyaW5nKGVudHJ5WzBdLCBlbnRyeVsxXSwgZW50cnlbMl0sIGVudHJ5WzNdLCBwcm90b2NvbCkKKworICAgIGRlZiBjb21iaW5lX3BvcnRfb25seShzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5wcm94aWVzW3Byb3RvY29sXQorICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX3BvcnRfc3RyaW5nKGVudHJ5WzRdKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYXJhbXMpOgorICAgICAgICAjIHNldHRpbmdzCisgICAgICAgIHNlbGYuY3Vycl9kaXN0cm8gPSBwYXJhbXNbImRpc3RybyJdCisgICAgICAgIHNlbGYuZGxkaXIgPSBwYXJhbXNbImRsZGlyIl0KKyAgICAgICAgc2VsZi5zc3RhdGVkaXIgPSBwYXJhbXNbInNzdGF0ZWRpciJdCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yID0gcGFyYW1zWyJzc3RhdGVtaXJyb3IiXQorICAgICAgICBzZWxmLnBtYWtlID0gaW50KHBhcmFtc1sicG1ha2UiXS5zcGxpdCgpWzFdKQorICAgICAgICBzZWxmLmJidGhyZWFkID0gcGFyYW1zWyJiYnRocmVhZCJdCisgICAgICAgIHNlbGYuY3Vycl9wYWNrYWdlX2Zvcm1hdCA9ICIgIi5qb2luKHBhcmFtc1sicGNsYXNzIl0uc3BsaXQoInBhY2thZ2VfIikpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSA9IHBhcmFtc1siaW1hZ2Vfcm9vdGZzX3NpemUiXQorICAgICAgICBzZWxmLmltYWdlX2V4dHJhX3NpemUgPSBwYXJhbXNbImltYWdlX2V4dHJhX3NpemUiXQorICAgICAgICBzZWxmLmltYWdlX292ZXJoZWFkX2ZhY3RvciA9IHBhcmFtc1snaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yJ10KKyAgICAgICAgc2VsZi5pbmNvbXBhdF9saWNlbnNlID0gcGFyYW1zWyJpbmNvbXBhdF9saWNlbnNlIl0KKyAgICAgICAgc2VsZi5jdXJyX3Nka19tYWNoaW5lID0gcGFyYW1zWyJzZGtfbWFjaGluZSJdCisgICAgICAgIHNlbGYuY29uZl92ZXJzaW9uID0gcGFyYW1zWyJjb25mX3ZlcnNpb24iXQorICAgICAgICBzZWxmLmxjb25mX3ZlcnNpb24gPSBwYXJhbXNbImxjb25mX3ZlcnNpb24iXQorICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZXMgPSBwYXJhbXNbImltYWdlX2ZzdHlwZXMiXQorICAgICAgICAjIHNlbGYuZXh0cmFfc2V0dGluZy9zZWxmLnRvb2xjaGFpbl9idWlsZAorICAgICAgICAjIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgc2VsZi5sYXllcnMgPSBwYXJhbXNbImxheWVyIl0uc3BsaXQoKQorICAgICAgICBzZWxmLmxheWVyc19ub25fcmVtb3ZhYmxlID0gcGFyYW1zWyJsYXllcnNfbm9uX3JlbW92YWJsZSJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi5kZWZhdWx0X3Rhc2sgPSBwYXJhbXNbImRlZmF1bHRfdGFzayJdCisKKyAgICAgICAgIyBwcm94eSBzZXR0aW5ncworICAgICAgICBzZWxmLmVuYWJsZV9wcm94eSA9IHBhcmFtc1siaHR0cF9wcm94eSJdICE9ICIiIG9yIHBhcmFtc1siaHR0cHNfcHJveHkiXSAhPSAiIiBcCisgICAgICAgICAgICBvciBwYXJhbXNbImZ0cF9wcm94eSJdICE9ICIiIG9yIHBhcmFtc1sic29ja3NfcHJveHkiXSAhPSAiIiBcCisgICAgICAgICAgICBvciBwYXJhbXNbImN2c19wcm94eV9ob3N0Il0gIT0gIiIgb3IgcGFyYW1zWyJjdnNfcHJveHlfcG9ydCJdICE9ICIiCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoImh0dHAiLCBwYXJhbXNbImh0dHBfcHJveHkiXSkKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgiaHR0cHMiLCBwYXJhbXNbImh0dHBzX3Byb3h5Il0pCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoImZ0cCIsIHBhcmFtc1siZnRwX3Byb3h5Il0pCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoInNvY2tzIiwgcGFyYW1zWyJzb2Nrc19wcm94eSJdKQorICAgICAgICBzZWxmLnNwbGl0X3Byb3h5KCJjdnMiLCBwYXJhbXNbImN2c19wcm94eV9ob3N0Il0gKyAiOiIgKyBwYXJhbXNbImN2c19wcm94eV9wb3J0Il0pCisKKyAgICBkZWYgc2F2ZShzZWxmLCBoYW5kbGVyLCBkZWZhdWx0cz1GYWxzZSk6CisgICAgICAgICMgYmJsYXllcnMuY29uZgorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQkJMQVlFUlMiLCBzZWxmLmxheWVycywgImJibGF5ZXJzLmNvbmYiKQorICAgICAgICAjIGxvY2FsLmNvbmYKKyAgICAgICAgaWYgbm90IGRlZmF1bHRzOgorICAgICAgICAgICAgaGFuZGxlci5lYXJseV9hc3NpZ25fdmFyX2luX2ZpbGUoIk1BQ0hJTkUiLCBzZWxmLmN1cnJfbWFjaCwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiRElTVFJPIiwgc2VsZi5jdXJyX2Rpc3RybywgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiRExfRElSIiwgc2VsZi5kbGRpciwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX0RJUiIsIHNlbGYuc3N0YXRlZGlyLCAibG9jYWwuY29uZiIpCisgICAgICAgIHNzdGF0ZV9taXJyb3JfbGlzdCA9IHNlbGYuc3N0YXRlbWlycm9yLnNwbGl0KCJcXG4gIikKKyAgICAgICAgc3N0YXRlX21pcnJvcl9saXN0X21vZGlmaWVkID0gW10KKyAgICAgICAgZm9yIG1pcnJvciBpbiBzc3RhdGVfbWlycm9yX2xpc3Q6CisgICAgICAgICAgICBpZiBtaXJyb3IgIT0gIiI6CisgICAgICAgICAgICAgICAgbWlycm9yID0gbWlycm9yICsgIlxcbiIKKyAgICAgICAgICAgICAgICBzc3RhdGVfbWlycm9yX2xpc3RfbW9kaWZpZWQuYXBwZW5kKG1pcnJvcikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIlNTVEFURV9NSVJST1JTIiwgc3N0YXRlX21pcnJvcl9saXN0X21vZGlmaWVkLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJQQVJBTExFTF9NQUtFIiwgIi1qICVzIiAlIHNlbGYucG1ha2UsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkJCX05VTUJFUl9USFJFQURTIiwgc2VsZi5iYnRocmVhZCwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiUEFDS0FHRV9DTEFTU0VTIiwgIiAiLmpvaW4oWyJwYWNrYWdlXyIgKyBpIGZvciBpIGluIHNlbGYuY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpXSksICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX1JPT1RGU19TSVpFIiwgc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfRVhUUkFfU1BBQ0UiLCBzZWxmLmltYWdlX2V4dHJhX3NpemUsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklOQ09NUEFUSUJMRV9MSUNFTlNFIiwgc2VsZi5pbmNvbXBhdF9saWNlbnNlLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJTREtNQUNISU5FIiwgc2VsZi5jdXJyX3Nka19tYWNoaW5lLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDT05GX1ZFUlNJT04iLCBzZWxmLmNvbmZfdmVyc2lvbiwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiTENPTkZfVkVSU0lPTiIsIHNlbGYubGNvbmZfdmVyc2lvbiwgImJibGF5ZXJzLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF9leHRyYV9jb25maWcoc2VsZi5leHRyYV9zZXR0aW5nKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiVE9PTENIQUlOX0JVSUxEIiwgc2VsZi50b29sY2hhaW5fYnVpbGQsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX0ZTVFlQRVMiLCBzZWxmLmltYWdlX2ZzdHlwZXMsICJsb2NhbC5jb25mIikKKyAgICAgICAgaWYgbm90IGRlZmF1bHRzOgorICAgICAgICAgICAgIyBpbWFnZS9yZWNpcGVzL3BhY2thZ2VzCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiX19TRUxFQ1RFRF9JTUFHRV9fIiwgc2VsZi5zZWxlY3RlZF9pbWFnZSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkRFUEVORFMiLCBzZWxmLnNlbGVjdGVkX3JlY2lwZXMsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9JTlNUQUxMIiwgc2VsZi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCAibG9jYWwuY29uZiIpCisgICAgICAgICMgcHJveHkKKyAgICAgICAgaWYgc2VsZi5lbmFibGVfcHJveHkgPT0gVHJ1ZToKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJodHRwX3Byb3h5Iiwgc2VsZi5jb21iaW5lX3Byb3h5KCJodHRwIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJodHRwc19wcm94eSIsIHNlbGYuY29tYmluZV9wcm94eSgiaHR0cHMiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImZ0cF9wcm94eSIsIHNlbGYuY29tYmluZV9wcm94eSgiZnRwIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJhbGxfcHJveHkiLCBzZWxmLmNvbWJpbmVfcHJveHkoInNvY2tzIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfSE9TVCIsIHNlbGYuY29tYmluZV9ob3N0X29ubHkoImN2cyIpLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX1BPUlQiLCBzZWxmLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBfcHJveHkiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBzX3Byb3h5IiwgIiIsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJmdHBfcHJveHkiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImFsbF9wcm94eSIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX0hPU1QiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkNWU19QUk9YWV9QT1JUIiwgIiIsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBzID0gIlZFUlNJT046ICclcycsIEJCTEFZRVJTOiAnJXMnLCBNQUNISU5FOiAnJXMnLCBESVNUUk86ICclcycsIERMX0RJUjogJyVzJywiICUgXAorICAgICAgICAgICAgKGhvYlZlciwgIiAiLmpvaW4oc2VsZi5sYXllcnMpLCBzZWxmLmN1cnJfbWFjaCwgc2VsZi5jdXJyX2Rpc3Rybywgc2VsZi5kbGRpciApCisgICAgICAgIHMgKz0gIlNTVEFURV9ESVI6ICclcycsIFNTVEFURV9NSVJST1I6ICclcycsIFBBUkFMTEVMX01BS0U6ICctaiAlcycsIEJCX05VTUJFUl9USFJFQURTOiAnJXMnLCBQQUNLQUdFX0NMQVNTRVM6ICclcycsICIgJSBcCisgICAgICAgICAgICAoc2VsZi5zc3RhdGVkaXIsIHNlbGYuc3N0YXRlbWlycm9yLCBzZWxmLnBtYWtlLCBzZWxmLmJidGhyZWFkLCAiICIuam9pbihbInBhY2thZ2VfIiArIGkgZm9yIGkgaW4gc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KCldKSkKKyAgICAgICAgcyArPSAiSU1BR0VfUk9PVEZTX1NJWkU6ICclcycsIElNQUdFX0VYVFJBX1NQQUNFOiAnJXMnLCBJTkNPTVBBVElCTEVfTElDRU5TRTogJyVzJywgU0RLTUFDSElORTogJyVzJywgQ09ORl9WRVJTSU9OOiAnJXMnLCAiICUgXAorICAgICAgICAgICAgKHNlbGYuaW1hZ2Vfcm9vdGZzX3NpemUsIHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSwgc2VsZi5pbmNvbXBhdF9saWNlbnNlLCBzZWxmLmN1cnJfc2RrX21hY2hpbmUsIHNlbGYuY29uZl92ZXJzaW9uKQorICAgICAgICBzICs9ICJMQ09ORl9WRVJTSU9OOiAnJXMnLCBFWFRSQV9TRVRUSU5HOiAnJXMnLCBUT09MQ0hBSU5fQlVJTEQ6ICclcycsIElNQUdFX0ZTVFlQRVM6ICclcycsIF9fU0VMRUNURURfSU1BR0VfXzogJyVzJywgIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmxjb25mX3ZlcnNpb24sIHNlbGYuZXh0cmFfc2V0dGluZywgc2VsZi50b29sY2hhaW5fYnVpbGQsIHNlbGYuaW1hZ2VfZnN0eXBlcywgc2VsZi5zZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgcyArPSAiREVQRU5EUzogJyVzJywgSU1BR0VfSU5TVEFMTDogJyVzJywgZW5hYmxlX3Byb3h5OiAnJXMnLCB1c2Vfc2FtZV9wcm94eTogJyVzJywgaHR0cF9wcm94eTogJyVzJywgIiAlIFwKKyAgICAgICAgICAgIChzZWxmLnNlbGVjdGVkX3JlY2lwZXMsIHNlbGYudXNlcl9zZWxlY3RlZF9wYWNrYWdlcywgc2VsZi5lbmFibGVfcHJveHksIHNlbGYuc2FtZV9wcm94eSwgc2VsZi5jb21iaW5lX3Byb3h5KCJodHRwIikpCisgICAgICAgIHMgKz0gImh0dHBzX3Byb3h5OiAnJXMnLCBmdHBfcHJveHk6ICclcycsIGFsbF9wcm94eTogJyVzJywgQ1ZTX1BST1hZX0hPU1Q6ICclcycsIENWU19QUk9YWV9QT1JUOiAnJXMnIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmNvbWJpbmVfcHJveHkoImh0dHBzIiksIHNlbGYuY29tYmluZV9wcm94eSgiZnRwIiksIHNlbGYuY29tYmluZV9wcm94eSgic29ja3MiKSwKKyAgICAgICAgICAgICBzZWxmLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSwgc2VsZi5jb21iaW5lX3BvcnRfb25seSgiY3ZzIikpCisgICAgICAgIHJldHVybiBzCisKK2NsYXNzIFBhcmFtZXRlcnM6CisgICAgJycnUmVwcmVzZW50cyBvdGhlciB2YXJpYWJsZXMgbGlrZSBhdmFpbGFibGUgbWFjaGluZXMsIGV0Yy4nJycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBWYXJpYWJsZXMKKyAgICAgICAgc2VsZi5tYXhfdGhyZWFkcyA9IDY1NTM1CisgICAgICAgIHNlbGYuY29yZV9iYXNlID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9hZGRyID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IFtdCisgICAgICAgIHNlbGYucnVubmFibGVfaW1hZ2VfdHlwZXMgPSBbXQorICAgICAgICBzZWxmLnJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMgPSBbXQorICAgICAgICBzZWxmLmRlcGxveWFibGVfaW1hZ2VfdHlwZXMgPSBbXQorICAgICAgICBzZWxmLnRtcGRpciA9ICIiCisKKyAgICAgICAgc2VsZi5hbGxfbWFjaGluZXMgPSBbXQorICAgICAgICBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBbXQorICAgICAgICBzZWxmLmFsbF9kaXN0cm9zID0gW10KKyAgICAgICAgc2VsZi5hbGxfc2RrX21hY2hpbmVzID0gW10KKyAgICAgICAgc2VsZi5hbGxfbGF5ZXJzID0gW10KKyAgICAgICAgc2VsZi5pbWFnZV9uYW1lcyA9IFtdCisgICAgICAgIHNlbGYuaW1hZ2Vfd2hpdGVfcGF0dGVybiA9ICIiCisgICAgICAgIHNlbGYuaW1hZ2VfYmxhY2tfcGF0dGVybiA9ICIiCisKKyAgICAgICAgIyBmb3IgYnVpbGQgbG9nIHRvIHNob3cKKyAgICAgICAgc2VsZi5iYl92ZXJzaW9uID0gIiIKKyAgICAgICAgc2VsZi50YXJnZXRfYXJjaCA9ICIiCisgICAgICAgIHNlbGYudGFyZ2V0X29zID0gIiIKKyAgICAgICAgc2VsZi5kaXN0cm9fdmVyc2lvbiA9ICIiCisgICAgICAgIHNlbGYudHVuZV9wa2dhcmNoID0gIiIKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgcGFyYW1zKToKKyAgICAgICAgc2VsZi5tYXhfdGhyZWFkcyA9IHBhcmFtc1sibWF4X3RocmVhZHMiXQorICAgICAgICBzZWxmLmNvcmVfYmFzZSA9IHBhcmFtc1siY29yZV9iYXNlIl0KKyAgICAgICAgc2VsZi5pbWFnZV9hZGRyID0gcGFyYW1zWyJpbWFnZV9hZGRyIl0KKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IHBhcmFtc1siaW1hZ2VfdHlwZXMiXS5zcGxpdCgpCisgICAgICAgIHNlbGYucnVubmFibGVfaW1hZ2VfdHlwZXMgPSBwYXJhbXNbInJ1bm5hYmxlX2ltYWdlX3R5cGVzIl0uc3BsaXQoKQorICAgICAgICBzZWxmLnJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMgPSBwYXJhbXNbInJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMiXS5zcGxpdCgpCisgICAgICAgIHNlbGYuZGVwbG95YWJsZV9pbWFnZV90eXBlcyA9IHBhcmFtc1siZGVwbG95YWJsZV9pbWFnZV90eXBlcyJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi50bXBkaXIgPSBwYXJhbXNbInRtcGRpciJdCisgICAgICAgIHNlbGYuaW1hZ2Vfd2hpdGVfcGF0dGVybiA9IHBhcmFtc1siaW1hZ2Vfd2hpdGVfcGF0dGVybiJdCisgICAgICAgIHNlbGYuaW1hZ2VfYmxhY2tfcGF0dGVybiA9IHBhcmFtc1siaW1hZ2VfYmxhY2tfcGF0dGVybiJdCisgICAgICAgIHNlbGYua2VybmVsX2ltYWdlX3R5cGUgPSBwYXJhbXNbImtlcm5lbF9pbWFnZV90eXBlIl0KKyAgICAgICAgIyBmb3IgYnVpbGQgbG9nIHRvIHNob3cKKyAgICAgICAgc2VsZi5iYl92ZXJzaW9uID0gcGFyYW1zWyJiYl92ZXJzaW9uIl0KKyAgICAgICAgc2VsZi50YXJnZXRfYXJjaCA9IHBhcmFtc1sidGFyZ2V0X2FyY2giXQorICAgICAgICBzZWxmLnRhcmdldF9vcyA9IHBhcmFtc1sidGFyZ2V0X29zIl0KKyAgICAgICAgc2VsZi5kaXN0cm9fdmVyc2lvbiA9IHBhcmFtc1siZGlzdHJvX3ZlcnNpb24iXQorICAgICAgICBzZWxmLnR1bmVfcGtnYXJjaCA9IHBhcmFtc1sidHVuZV9wa2dhcmNoIl0KKworZGVmIGhvYl9jb25mX2ZpbHRlcihmbiwgZGF0YSk6CisgICAgaWYgZm4uZW5kc3dpdGgoIi9sb2NhbC5jb25mIik6CisgICAgICAgIGRpc3RybyA9IGRhdGEuZ2V0VmFyKCJESVNUUk9fSE9CIiwgRmFsc2UpCisgICAgICAgIGlmIGRpc3RybzoKKyAgICAgICAgICAgIGlmIGRpc3RybyAhPSAiZGVmYXVsdHNldHVwIjoKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcigiRElTVFJPIiwgZGlzdHJvKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhLmRlbFZhcigiRElTVFJPIikKKworICAgICAgICBrZXlzID0gWyJNQUNISU5FX0hPQiIsICJTREtNQUNISU5FX0hPQiIsICJQQUNLQUdFX0NMQVNTRVNfSE9CIiwgXAorICAgICAgICAgICAgICAgICJCQl9OVU1CRVJfVEhSRUFEU19IT0IiLCAiUEFSQUxMRUxfTUFLRV9IT0IiLCAiRExfRElSX0hPQiIsIFwKKyAgICAgICAgICAgICAgICAiU1NUQVRFX0RJUl9IT0IiLCAiU1NUQVRFX01JUlJPUlNfSE9CIiwgIklOQ09NUEFUSUJMRV9MSUNFTlNFX0hPQiJdCisgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIHZhcl9ob2IgPSBkYXRhLmdldFZhcihrZXksIEZhbHNlKQorICAgICAgICAgICAgaWYgdmFyX2hvYjoKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcihrZXkuc3BsaXQoIl9IT0IiKVswXSwgdmFyX2hvYikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBmbi5lbmRzd2l0aCgiL2JibGF5ZXJzLmNvbmYiKToKKyAgICAgICAgbGF5ZXJzID0gZGF0YS5nZXRWYXIoIkJCTEFZRVJTX0hPQiIsIEZhbHNlKQorICAgICAgICBpZiBsYXllcnM6CisgICAgICAgICAgICBkYXRhLnNldFZhcigiQkJMQVlFUlMiLCBsYXllcnMpCisgICAgICAgIHJldHVybgorCitjbGFzcyBCdWlsZGVyKGd0ay5XaW5kb3cpOgorCisgICAgKElOSVRJQUxfQ0hFQ0tTLAorICAgICBNQUNISU5FX1NFTEVDVElPTiwKKyAgICAgUkNQUEtHSU5GT19QT1BVTEFUSU5HLAorICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRFRCwKKyAgICAgQkFTRUlNR19TRUxFQ1RFRCwKKyAgICAgUkVDSVBFX1NFTEVDVElPTiwKKyAgICAgUEFDS0FHRV9HRU5FUkFUSU5HLAorICAgICBQQUNLQUdFX0dFTkVSQVRFRCwKKyAgICAgUEFDS0FHRV9TRUxFQ1RJT04sCisgICAgIEZBU1RfSU1BR0VfR0VORVJBVElORywKKyAgICAgSU1BR0VfR0VORVJBVElORywKKyAgICAgSU1BR0VfR0VORVJBVEVELAorICAgICBNWV9JTUFHRV9PUEVORUQsCisgICAgIEJBQ0ssCisgICAgIEVORF9OT09QKSA9IHJhbmdlKDE1KQorCisgICAgKFNBTklUWV9DSEVDSywKKyAgICAgSU1BR0VfQ09ORklHVVJBVElPTiwKKyAgICAgUkVDSVBFX0RFVEFJTFMsCisgICAgIEJVSUxEX0RFVEFJTFMsCisgICAgIFBBQ0tBR0VfREVUQUlMUywKKyAgICAgSU1BR0VfREVUQUlMUywKKyAgICAgRU5EX1RBQikgPSByYW5nZSg3KQorCisgICAgX19zdGVwMnBhZ2VfXyA9IHsKKyAgICAgICAgSU5JVElBTF9DSEVDS1MgICAgICAgIDogU0FOSVRZX0NIRUNLLAorICAgICAgICBNQUNISU5FX1NFTEVDVElPTiAgICAgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRJTkcgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRFRCAgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBCQVNFSU1HX1NFTEVDVEVEICAgICAgOiBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICAgICBSRUNJUEVfU0VMRUNUSU9OICAgICAgOiBSRUNJUEVfREVUQUlMUywKKyAgICAgICAgUEFDS0FHRV9HRU5FUkFUSU5HICAgIDogQlVJTERfREVUQUlMUywKKyAgICAgICAgUEFDS0FHRV9HRU5FUkFURUQgICAgIDogUEFDS0FHRV9ERVRBSUxTLAorICAgICAgICBQQUNLQUdFX1NFTEVDVElPTiAgICAgOiBQQUNLQUdFX0RFVEFJTFMsCisgICAgICAgIEZBU1RfSU1BR0VfR0VORVJBVElORyA6IEJVSUxEX0RFVEFJTFMsCisgICAgICAgIElNQUdFX0dFTkVSQVRJTkcgICAgICA6IEJVSUxEX0RFVEFJTFMsCisgICAgICAgIElNQUdFX0dFTkVSQVRFRCAgICAgICA6IElNQUdFX0RFVEFJTFMsCisgICAgICAgIE1ZX0lNQUdFX09QRU5FRCAgICAgICA6IElNQUdFX0RFVEFJTFMsCisgICAgICAgIEVORF9OT09QICAgICAgICAgICAgICA6IE5vbmUsCisgICAgfQorCisgICAgU0FOSVRZX0NIRUNLX01JTl9ESVNQTEFZX1RJTUUgPSA1CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9iSGFuZGxlciwgcmVjaXBlX21vZGVsLCBwYWNrYWdlX21vZGVsKToKKyAgICAgICAgc3VwZXIoQnVpbGRlciwgc2VsZikuX19pbml0X18oKQorCisgICAgICAgIHNlbGYuaG9iX2ltYWdlID0gImhvYi1pbWFnZSIKKworICAgICAgICAjIGhhbmRsZXIKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaG9iSGFuZGxlcgorCisgICAgICAgICMgbG9nZ2VyCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorICAgICAgICBzZWxmLmNvbnNvbGVsb2cgPSBOb25lCisgICAgICAgIHNlbGYuY3VycmVudF9sb2dmaWxlID0gTm9uZQorCisgICAgICAgICMgY29uZmlndXJhdGlvbiBhbmQgcGFyYW1ldGVycworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBDb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gUGFyYW1ldGVycygpCisKKyAgICAgICAgIyBidWlsZCBzdGVwCisgICAgICAgIHNlbGYuY3VycmVudF9zdGVwID0gTm9uZQorICAgICAgICBzZWxmLnByZXZpb3VzX3N0ZXAgPSBOb25lCisKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisKKyAgICAgICAgIyByZWNpcGUgbW9kZWwgYW5kIHBhY2thZ2UgbW9kZWwKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSByZWNpcGVfbW9kZWwKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsID0gcGFja2FnZV9tb2RlbAorCisgICAgICAgICMgSW5kaWNhdGUgd2hldGhlciB1c2VyIGhhcyBjdXN0b21pemVkIHRoZSBpbWFnZQorICAgICAgICBzZWxmLmN1c3RvbWl6ZWQgPSBGYWxzZQorCisgICAgICAgICMgSW5kaWNhdGUgd2hldGhlciB0aGUgVUkgaXMgd29ya2luZworICAgICAgICBzZWxmLnNlbnNpdGl2ZSA9IFRydWUKKworICAgICAgICAjIEluZGljYXRlIHdoZXRoZXIgdGhlIHNhbml0eSBjaGVjayByYW4KKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tlZCA9IEZhbHNlCisKKyAgICAgICAgIyBzYXZlIHBhcnNpbmcgd2FybmluZ3MKKyAgICAgICAgc2VsZi5wYXJzaW5nX3dhcm5pbmdzID0gW10KKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgICAgICAjIGNvbm5lY3QgdGhlIHNpZ25hbHMgdG8gZnVuY3Rpb25zCisgICAgICAgIHNlbGYuY29ubmVjdCgiZGVsZXRlLWV2ZW50Iiwgc2VsZi5kZXN0cm95X3dpbmRvd19jYikKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuY29ubmVjdCAoInJlY2lwZS1zZWxlY3Rpb24tY2hhbmdlZCIsICBzZWxmLnJlY2lwZWxpc3RfY2hhbmdlZF9jYikKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLmNvbm5lY3QoInBhY2thZ2Utc2VsZWN0aW9uLWNoYW5nZWQiLCBzZWxmLnBhY2thZ2VsaXN0X2NoYW5nZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJjb25maWctdXBkYXRlZCIsICAgICAgICAgICBzZWxmLmhhbmRsZXJfY29uZmlnX3VwZGF0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYWNrYWdlLWZvcm1hdHMtdXBkYXRlZCIsICBzZWxmLmhhbmRsZXJfcGFja2FnZV9mb3JtYXRzX3VwZGF0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYXJzaW5nLXN0YXJ0ZWQiLCAgICAgICAgICBzZWxmLmhhbmRsZXJfcGFyc2luZ19zdGFydGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicGFyc2luZyIsICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyX3BhcnNpbmdfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYXJzaW5nLWNvbXBsZXRlZCIsICAgICAgICBzZWxmLmhhbmRsZXJfcGFyc2luZ19jb21wbGV0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJidWlsZC1zdGFydGVkIiwgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfc3RhcnRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImJ1aWxkLXN1Y2NlZWRlZCIsICAgIHNlbGYuaGFuZGxlcl9idWlsZF9zdWNjZWVkZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJidWlsZC1mYWlsZWQiLCAgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfZmFpbGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgiYnVpbGQtYWJvcnRlZCIsICAgICAgc2VsZi5oYW5kbGVyX2J1aWxkX2Fib3J0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJ0YXNrLXN0YXJ0ZWQiLCAgICAgICBzZWxmLmhhbmRsZXJfdGFza19zdGFydGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgiZGlzay1mdWxsIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX2Rpc2tfZnVsbF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImxvZy1lcnJvciIsICAgICAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9mYWlsdXJlX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgibG9nLXdhcm5pbmciLCAgICAgICAgc2VsZi5oYW5kbGVyX2J1aWxkX2ZhaWx1cmVfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJsb2ciLCAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfbG9nX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgibm8tcHJvdmlkZXIiLCAgICAgICAgc2VsZi5oYW5kbGVyX25vX3Byb3ZpZGVyX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiZ2VuZXJhdGluZy1kYXRhIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX2dlbmVyYXRpbmdfZGF0YV9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImRhdGEtZ2VuZXJhdGVkIiwgICAgICAgICAgIHNlbGYuaGFuZGxlcl9kYXRhX2dlbmVyYXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImNvbW1hbmQtc3VjY2VlZGVkIiwgICAgICAgIHNlbGYuaGFuZGxlcl9jb21tYW5kX3N1Y2NlZWRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImNvbW1hbmQtZmFpbGVkIiwgICAgICAgICAgIHNlbGYuaGFuZGxlcl9jb21tYW5kX2ZhaWxlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhcnNpbmctd2FybmluZyIsICAgICAgICAgIHNlbGYuaGFuZGxlcl9wYXJzaW5nX3dhcm5pbmdfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJzYW5pdHktZmFpbGVkIiwgICAgICAgICAgICBzZWxmLmhhbmRsZXJfc2FuaXR5X2ZhaWxlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInJlY2lwZS1wb3B1bGF0ZWQiLCAgICAgICAgIHNlbGYuaGFuZGxlcl9yZWNpcGVfcG9wdWxhdGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicGFja2FnZS1wb3B1bGF0ZWQiLCAgICAgICAgc2VsZi5oYW5kbGVyX3BhY2thZ2VfcG9wdWxhdGVkX2NiKQorCisgICAgICAgIHNlbGYuaGFuZGxlci5hcHBlbmRfdG9fYmJmaWxlcygiJHtUT1BESVJ9L3JlY2lwZXMvaW1hZ2VzL2N1c3RvbS8qLmJiIikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmFwcGVuZF90b19iYmZpbGVzKCIke1RPUERJUn0vcmVjaXBlcy9pbWFnZXMvKi5iYiIpCisgICAgICAgIHNlbGYuaW5pdGlhdGVfbmV3X2J1aWxkX2FzeW5jKCkKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNlbGYuZXZlbnRfaGFuZGxlX1NJR0lOVCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF90aXRsZSgiSG9iIikKKyAgICAgICAgc2VsZi5zZXRfaWNvbl9uYW1lKCJhcHBsaWNhdGlvbnMtZGV2ZWxvcG1lbnQiKQorICAgICAgICBzZWxmLnNldF9yZXNpemFibGUoVHJ1ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aW5kb3dfd2lkdGggPSBzZWxmLmdldF9zY3JlZW4oKS5nZXRfd2lkdGgoKQorICAgICAgICAgICAgd2luZG93X2hlaWdodCA9IHNlbGYuZ2V0X3NjcmVlbigpLmdldF9oZWlnaHQoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiUGxlYXNlIHNldCBESVNQTEFZIHZhcmlhYmxlIGJlZm9yZSBydW5uaW5nIEhvYi4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGlmIHdpbmRvd193aWR0aCA+PSBod2MuTUFJTl9XSU5fV0lEVEg6CisgICAgICAgICAgICB3aW5kb3dfd2lkdGggPSBod2MuTUFJTl9XSU5fV0lEVEgKKyAgICAgICAgICAgIHdpbmRvd19oZWlnaHQgPSBod2MuTUFJTl9XSU5fSEVJR0hUCisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCh3aW5kb3dfd2lkdGgsIHdpbmRvd19oZWlnaHQpCisKKyAgICAgICAgc2VsZi52Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDApCisgICAgICAgIHNlbGYudmJveC5zZXRfYm9yZGVyX3dpZHRoKDApCisgICAgICAgIHNlbGYuYWRkKHNlbGYudmJveCkKKworICAgICAgICAjIGNyZWF0ZSBwYWdlcworICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZSA9IEltYWdlQ29uZmlndXJhdGlvblBhZ2Uoc2VsZikKKyAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlICAgICAgPSBSZWNpcGVTZWxlY3Rpb25QYWdlKHNlbGYpCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlICAgICAgID0gQnVpbGREZXRhaWxzUGFnZShzZWxmKQorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlICAgICA9IFBhY2thZ2VTZWxlY3Rpb25QYWdlKHNlbGYpCisgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlICAgICAgID0gSW1hZ2VEZXRhaWxzUGFnZShzZWxmKQorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlICAgICAgICA9IFNhbml0eUNoZWNrUGFnZShzZWxmKQorICAgICAgICBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrID0gRmFsc2UKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9mdW5jID0gRmFsc2UKKyAgICAgICAgc2VsZi5oYWRfbmV0d29ya19lcnJvciA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5uYiA9IGd0ay5Ob3RlYm9vaygpCisgICAgICAgIHNlbGYubmIuc2V0X3Nob3dfdGFicyhGYWxzZSkKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLnNhbml0eV9jaGVja19wYWdlLCAgICAgICAgTm9uZSwgc2VsZi5TQU5JVFlfQ0hFQ0spCisgICAgICAgIHNlbGYubmIuaW5zZXJ0X3BhZ2Uoc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UsIE5vbmUsIHNlbGYuSU1BR0VfQ09ORklHVVJBVElPTikKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLnJlY2lwZV9kZXRhaWxzX3BhZ2UsICAgICAgTm9uZSwgc2VsZi5SRUNJUEVfREVUQUlMUykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZSwgICAgICAgTm9uZSwgc2VsZi5CVUlMRF9ERVRBSUxTKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UsICAgICBOb25lLCBzZWxmLlBBQ0tBR0VfREVUQUlMUykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLmltYWdlX2RldGFpbHNfcGFnZSwgICAgICAgTm9uZSwgc2VsZi5JTUFHRV9ERVRBSUxTKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLm5iLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UoMCkKKworICAgIGRlZiBzYW5pdHlfY2hlY2tfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBUaGUgbWluaW11bSB0aW1lIGZvciBzaG93aW5nIHRoZSAnc2FuaXR5IGNoZWNrJyBwYWdlIGhhcyBwYXNzZQorICAgICAgICAjIElmIHNvbWVvbmUgc2V0IHRoZSAnc2FuaXR5X2NoZWNrX3Bvc3Rfc3RlcCcgbWVhbndoaWxlLCBleGVjdXRlIGl0IG5vdworICAgICAgICBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9mdW5jOgorICAgICAgICAgIHRlbXAgPSBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmMKKyAgICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmMgPSBOb25lCisgICAgICAgICAgdGVtcCgpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHNob3dfc2FuaXR5X2NoZWNrX3BhZ2Uoc2VsZik6CisgICAgICAgICMgVGhpcyB3aW5kb3cgbXVzdCBzdGF5IG9uIHNjcmVlbiBmb3IgYXQgbGVhc3QgNSBzZWNvbmRzLCBhY2NvcmRpbmcgdG8gdGhlIGRlc2lnbiBkb2N1bWVudAorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2Uoc2VsZi5TQU5JVFlfQ0hFQ0spCisgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3Rfc3RlcCA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXNwbGF5X3Nhbml0eV9jaGVjayA9IFRydWUKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcGFnZS5zdGFydCgpCisgICAgICAgIGdvYmplY3QudGltZW91dF9hZGQoc2VsZi5TQU5JVFlfQ0hFQ0tfTUlOX0RJU1BMQVlfVElNRSAqIDEwMDAsIHNlbGYuc2FuaXR5X2NoZWNrX3RpbWVvdXQpCisKKyAgICBkZWYgZXhlY3V0ZV9hZnRlcl9zYW5pdHlfY2hlY2soc2VsZiwgZnVuYyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrOgorICAgICAgICAgIGZ1bmMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3RfZnVuYyA9IGZ1bmMKKworICAgIGRlZiBnZW5lcmF0ZV9jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5zYW5pdHlfY2hlY2tlZDoKKyAgICAgICAgICAgIHNlbGYuc2hvd19zYW5pdHlfY2hlY2tfcGFnZSgpCisgICAgICAgIHNlbGYuaGFuZGxlci5nZW5lcmF0ZV9jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBpbml0aWF0ZV9uZXdfYnVpbGRfYXN5bmMoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IE5vbmUKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OKQorICAgICAgICBzZWxmLmhhbmRsZXIuaW5pdF9jb29rZXIoKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2V4dHJhX2luaGVyaXQoImltYWdlX3R5cGVzIikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiB1cGRhdGVfY29uZmlnX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZygpCisgICAgICAgIHNlbGYuZ2VuZXJhdGVfY29uZmlndXJhdGlvbigpCisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5NQUNISU5FX1NFTEVDVElPTikKKworICAgIGRlZiBzYW5pdHlfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci50cmlnZ2VyX3Nhbml0eV9jaGVjaygpCisKKyAgICBkZWYgcG9wdWxhdGVfcmVjaXBlX3BhY2thZ2VfaW5mb19hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORykKKyAgICAgICAgIyBQYXJzZSByZWNpcGVzCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX3JlY2lwZXMoKQorCisgICAgZGVmIGdlbmVyYXRlX3BhY2thZ2VzX2FzeW5jKHNlbGYsIGxvZyA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlBBQ0tBR0VfR0VORVJBVElORykKKyAgICAgICAgaWYgbG9nOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2xvZ2ZpbGUgPSBzZWxmLmhhbmRsZXIuZ2V0X2xvZ2ZpbGUoKQorICAgICAgICAgICAgc2VsZi5kb19sb2coc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisgICAgICAgICMgQnVpbGQgcGFja2FnZXMKKyAgICAgICAgXywgYWxsX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlc2V0X2J1aWxkKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX3BhY2thZ2VzKGFsbF9yZWNpcGVzLCBzZWxmLmNvbmZpZ3VyYXRpb24uZGVmYXVsdF90YXNrKQorCisgICAgZGVmIHJlc3RvcmVfaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLnNldF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF91c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCBUcnVlKQorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzKQorICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICBpZiBwYWNrYWdlIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuZXhjbHVkZV9pdGVtKHNlbGYucGFja2FnZV9tb2RlbC5maW5kX3BhdGhfZm9yX2l0ZW0ocGFja2FnZSkpCisKKyAgICBkZWYgZmFzdF9nZW5lcmF0ZV9pbWFnZV9hc3luYyhzZWxmLCBsb2cgPSBGYWxzZSk6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkcpCisgICAgICAgIGlmIGxvZzoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9sb2dmaWxlID0gc2VsZi5oYW5kbGVyLmdldF9sb2dmaWxlKCkKKyAgICAgICAgICAgIHNlbGYuZG9fbG9nKHNlbGYuY3VycmVudF9sb2dmaWxlKQorICAgICAgICAjIEJ1aWxkIHBhY2thZ2VzCisgICAgICAgIF8sIGFsbF9yZWNpcGVzID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX3JlY2lwZXMoKQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZygpCisgICAgICAgIHNlbGYuaGFuZGxlci5yZXNldF9idWlsZCgpCisgICAgICAgIHNlbGYuaGFuZGxlci5nZW5lcmF0ZV9wYWNrYWdlcyhhbGxfcmVjaXBlcywgc2VsZi5jb25maWd1cmF0aW9uLmRlZmF1bHRfdGFzaykKKworICAgIGRlZiBnZW5lcmF0ZV9pbWFnZV9hc3luYyhzZWxmLCBjb250ID0gRmFsc2UpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuSU1BR0VfR0VORVJBVElORykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlc2V0X2J1aWxkKCkKKyAgICAgICAgaWYgbm90IGNvbnQ6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbG9nZmlsZSA9IHNlbGYuaGFuZGxlci5nZXRfbG9nZmlsZSgpCisgICAgICAgICAgICBzZWxmLmRvX2xvZyhzZWxmLmN1cnJlbnRfbG9nZmlsZSkKKyAgICAgICAgIyBCdWlsZCBpbWFnZQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZygpCisgICAgICAgIHRvb2xjaGFpbl9wYWNrYWdlcyA9IFtdCisgICAgICAgIGJhc2VfaW1hZ2UgPSBOb25lCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi50b29sY2hhaW5fYnVpbGQ6CisgICAgICAgICAgICB0b29sY2hhaW5fcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzX3Rvb2xjaGFpbigpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgICAgIGltYWdlID0gc2VsZi5ob2JfaW1hZ2UKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZXMgPSBbXQorICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX2ltYWdlKGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluX3BhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmRlZmF1bHRfdGFzaykKKworICAgIGRlZiBnZW5lcmF0ZV9uZXdfaW1hZ2Uoc2VsZiwgaW1hZ2UsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlCisgICAgICAgIGlmIGJhc2VfaW1hZ2UgPT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBOb25lCisgICAgICAgIHBhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIHNlbGYuaGFuZGxlci5nZW5lcmF0ZV9uZXdfaW1hZ2UoaW1hZ2UsIGJhc2VfaW1hZ2UsIHBhY2thZ2VzLCBkZXNjcmlwdGlvbikKKworICAgIGRlZiBlbnN1cmVfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYuaGFuZGxlci5lbnN1cmVfZGlyKGRpcmVjdG9yeSkKKworICAgIGRlZiBnZXRfcGFyYW1ldGVyc19zeW5jKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVyLmdldF9wYXJhbWV0ZXJzKCkKKworICAgIGRlZiByZXF1ZXN0X3BhY2thZ2VfaW5mb19hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlcXVlc3RfcGFja2FnZV9pbmZvKCkKKworICAgIGRlZiBjYW5jZWxfYnVpbGRfc3luYyhzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIHNlbGYuaGFuZGxlci5jYW5jZWxfYnVpbGQoZm9yY2UpCisKKyAgICBkZWYgY2FuY2VsX3BhcnNlX3N5bmMoc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci5jYW5jZWxfcGFyc2UoKQorCisgICAgZGVmIHN3aXRjaF9wYWdlKHNlbGYsIG5leHRfc3RlcCk6CisgICAgICAgICMgTWFpbiBXb3JrZmxvdyAoQnVzaW5lc3MgTG9naWMpCisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShzZWxmLl9fc3RlcDJwYWdlX19bbmV4dF9zdGVwXSkKKworICAgICAgICBpZiBuZXh0X3N0ZXAgPT0gc2VsZi5NQUNISU5FX1NFTEVDVElPTjogIyBpbml0IHN0ZXAKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnNob3dfbWFjaGluZSgpCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICAjIE1BQ0hJTkUgQ0hBTkdFRCBhY3Rpb24gb3IgU0VUVElOR1MgQ0hBTkdFRAorICAgICAgICAgICAgIyBzaG93IHRoZSBwcm9ncmVzcyBiYXIKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnNob3dfaW5mb19wb3B1bGF0aW5nKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVEVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19pbmZvX3BvcHVsYXRlZCgpCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5CQVNFSU1HX1NFTEVDVEVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19iYXNlaW1nX3NlbGVjdGVkKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlJFQ0lQRV9TRUxFQ1RJT046CisgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5zZXRfcmVjaXBlX2N1cnJfdGFiKHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5BTEwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5zZXRfcmVjaXBlX2N1cnJfdGFiKHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5JTkNMVURFRCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfU0VMRUNUSU9OOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24udXNlcl9zZWxlY3RlZF9wYWNrYWdlcworICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfdGl0bGUoIkVkaXQgcGFja2FnZXMiKQorICAgICAgICAgICAgaWYgc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX2ltYWdlKCkgPT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLkFMTCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfcGFja2FnZXNfY3Vycl90YWIoc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5JTkNMVURFRCkKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKHNlbGYuY3VycmVudF9sb2dmaWxlKQorCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkcgb3IgbmV4dF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgIyBib3RoIFBBQ0tBR0VfR0VORVJBVElORyBhbmQgRkFTVF9JTUFHRV9HRU5FUkFUSU5HIHNoYXJlIHRoZSBzYW1lIHBhZ2UKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnNob3dfcGFnZShuZXh0X3N0ZXApCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRFRDoKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3RpdGxlKCJTdGVwIDIgb2YgMjogRWRpdCBwYWNrYWdlcyIpCisgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3BhY2thZ2VzX2N1cnJfdGFiKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UuQUxMKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLklOQ0xVREVEKQorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2Uoc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgIyBhZnRlciBwYWNrYWdlcyBhcmUgZ2VuZXJhdGVkLCBzZWxlY3RlZF9wYWNrYWdlcyBuZWVkIHRvCisgICAgICAgICAgICAjIGJlIHVwZGF0ZWQgaW4gcGFja2FnZV9tb2RlbCBwZXIgc2VsZWN0ZWRfaW1hZ2UgaW4gcmVjaXBlX21vZGVsCisgICAgICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X3BhZ2UobmV4dF9zdGVwKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVEVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKG5leHRfc3RlcCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLk1ZX0lNQUdFX09QRU5FRDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlLnNob3dfcGFnZShuZXh0X3N0ZXApCisKKyAgICAgICAgc2VsZi5wcmV2aW91c19zdGVwID0gc2VsZi5jdXJyZW50X3N0ZXAKKyAgICAgICAgc2VsZi5jdXJyZW50X3N0ZXAgPSBuZXh0X3N0ZXAKKworICAgIGRlZiBzZXRfdXNlcl9jb25maWdfcHJveGllcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSA9PSBUcnVlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJodHRwIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJodHRwcyIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9mdHBfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImZ0cCIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zb2Nrc19wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgic29ja3MiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfY3ZzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgiY3ZzIiksIHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiY3ZzIikpCisgICAgICAgIGVsaWYgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSA9PSBGYWxzZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cF9wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cHNfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Z0cF9wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc29ja3NfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2N2c19wcm94eSgiIiwgIiIpCisKKyAgICBkZWYgc2V0X3VzZXJfY29uZmlnX2V4dHJhKHNlbGYpOgorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3Jvb3Rmc19zaXplKHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9leHRyYV9zaXplKHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9leHRyYV9zaXplKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2luY29tcGF0aWJsZV9saWNlbnNlKHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3Nka19tYWNoaW5lKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3Nka19tYWNoaW5lKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2ltYWdlX2ZzdHlwZXMoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZXh0cmFfY29uZmlnKHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9zZXR0aW5nKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2V4dHJhX2luaGVyaXQoInBhY2thZ2VpbmZvIGltYWdlX3R5cGVzIikKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfcHJveGllcygpCisKKyAgICBkZWYgc2V0X3VzZXJfY29uZmlnKHNlbGYpOgorICAgICAgICAjIHNldCBiYiBsYXllcnMKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9iYmxheWVycyhzZWxmLmNvbmZpZ3VyYXRpb24ubGF5ZXJzKQorICAgICAgICAjIHNldCBsb2NhbCBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfbWFjaGluZShzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3BhY2thZ2VfZm9ybWF0KHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3BhY2thZ2VfZm9ybWF0KQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Rpc3RybyhzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8pCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZGxfZGlyKHNlbGYuY29uZmlndXJhdGlvbi5kbGRpcikKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zc3RhdGVfZGlyKHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVkaXIpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc3N0YXRlX21pcnJvcnMoc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZW1pcnJvcikKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9wbWFrZShzZWxmLmNvbmZpZ3VyYXRpb24ucG1ha2UpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfYmJ0aHJlYWRzKHNlbGYuY29uZmlndXJhdGlvbi5iYnRocmVhZCkKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfZXh0cmEoKQorCisgICAgZGVmIHVwZGF0ZV9yZWNpcGVfbW9kZWwoc2VsZiwgc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMpOgorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5zZXRfc2VsZWN0ZWRfaW1hZ2Uoc2VsZWN0ZWRfaW1hZ2UpCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9yZWNpcGVzKHNlbGVjdGVkX3JlY2lwZXMpCisKKyAgICBkZWYgdXBkYXRlX3BhY2thZ2VfbW9kZWwoc2VsZiwgc2VsZWN0ZWRfcGFja2FnZXMsIHVzZXJfc2VsZWN0ZWRfcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIGlmIHVzZXJfc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICBsZWZ0ID0gc2VsZi5wYWNrYWdlX21vZGVsLnNldF9zZWxlY3RlZF9wYWNrYWdlcyh1c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMgKz0gbGVmdAorICAgICAgICBsZWZ0ID0gc2VsZi5wYWNrYWdlX21vZGVsLnNldF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxlY3RlZF9wYWNrYWdlcykKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzICs9IGxlZnQKKworICAgIGRlZiB1cGRhdGVfY29uZmlndXJhdGlvbl9wYXJhbWV0ZXJzKHNlbGYsIHBhcmFtcyk6CisgICAgICAgIGlmIHBhcmFtczoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi51cGRhdGUocGFyYW1zKQorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLnVwZGF0ZShwYXJhbXMpCisKKyAgICBkZWYgc2V0X2Jhc2VfaW1hZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlID0gc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSAhPSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgc2VsZi5ob2JfaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UgKyAiLWVkaXRlZCIKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaCA9ICIiCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jbGVhcl9zZWxlY3Rpb24oKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zd2l0Y2hfbWFjaGluZV9jb21ibygpCisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5NQUNISU5FX1NFTEVDVElPTikKKworICAgICMgQ2FsbGJhY2sgRnVuY3Rpb25zCisgICAgZGVmIGhhbmRsZXJfY29uZmlnX3VwZGF0ZWRfY2Ioc2VsZiwgaGFuZGxlciwgd2hpY2gsIHZhbHVlcyk6CisgICAgICAgIGlmIHdoaWNoID09ICJkaXN0cm8iOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmFsbF9kaXN0cm9zID0gdmFsdWVzCisgICAgICAgIGVsaWYgd2hpY2ggPT0gIm1hY2hpbmUiOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmFsbF9tYWNoaW5lcyA9IHZhbHVlcworICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX21hY2hpbmVfY29tYm8oKQorICAgICAgICBlbGlmIHdoaWNoID09ICJtYWNoaW5lLXNkayI6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuYWxsX3Nka19tYWNoaW5lcyA9IHZhbHVlcworCisgICAgZGVmIGhhbmRsZXJfcGFja2FnZV9mb3JtYXRzX3VwZGF0ZWRfY2Ioc2VsZiwgaGFuZGxlciwgZm9ybWF0cyk6CisgICAgICAgIHNlbGYucGFyYW1ldGVycy5hbGxfcGFja2FnZV9mb3JtYXRzID0gZm9ybWF0cworCisgICAgZGVmIHN3aXRjaF90b19pbWFnZV9jb25maWd1cmF0aW9uX2hlbHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcGFnZS5zdG9wKCkKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLklNQUdFX0NPTkZJR1VSQVRJT04pCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN3aXRjaF9tYWNoaW5lX2NvbWJvKCkKKworICAgIGRlZiBzaG93X25ldHdvcmtfZXJyb3JfZGlhbG9nX2hlbHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcGFnZS5zdG9wKCkKKyAgICAgICAgc2VsZi5zaG93X25ldHdvcmtfZXJyb3JfZGlhbG9nKCkKKworICAgIGRlZiBoYW5kbGVyX2NvbW1hbmRfc3VjY2VlZGVkX2NiKHNlbGYsIGhhbmRsZXIsIGluaXRjbWQpOgorICAgICAgICBpZiBpbml0Y21kID09IHNlbGYuaGFuZGxlci5HRU5FUkFURV9DT05GSUdVUkFUSU9OOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2g6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaCA9IHNlbGYuaGFuZGxlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSE9CX01BQ0hJTkUiXSkgb3IgIiIKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX2NvbmZpZ3VyYXRpb25fcGFyYW1ldGVycyhzZWxmLmdldF9wYXJhbWV0ZXJzX3N5bmMoKSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNhbml0eV9jaGVja2VkOgorICAgICAgICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNhbml0eV9jaGVja2VkID0gVHJ1ZQorICAgICAgICBlbGlmIGluaXRjbWQgPT0gc2VsZi5oYW5kbGVyLlNBTklUWV9DSEVDSzoKKyAgICAgICAgICAgIGlmIHNlbGYuaGFkX25ldHdvcmtfZXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5oYWRfbmV0d29ya19lcnJvciA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlX2FmdGVyX3Nhbml0eV9jaGVjayhzZWxmLnNob3dfbmV0d29ya19lcnJvcl9kaWFsb2dfaGVscGVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFN3aXRjaCB0byB0aGUgJ2ltYWdlIGNvbmZpZ3VyYXRpb24nIHBhZ2Ugbm93LCBidXQgd2UgbWlnaHQgbmVlZAorICAgICAgICAgICAgICAgICMgdG8gd2FpdCBmb3IgdGhlIG1pbmltdW0gZGlzcGxheSB0aW1lIG9mIHRoZSBzYW5pdHkgY2hlY2sgcGFnZQorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9hZnRlcl9zYW5pdHlfY2hlY2soc2VsZi5zd2l0Y2hfdG9faW1hZ2VfY29uZmlndXJhdGlvbl9oZWxwZXIpCisgICAgICAgIGVsaWYgaW5pdGNtZCBpbiBbc2VsZi5oYW5kbGVyLkdFTkVSQVRFX1JFQ0lQRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLkdFTkVSQVRFX1BBQ0tBR0VTLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5HRU5FUkFURV9JTUFHRV06CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9jb25maWd1cmF0aW9uX3BhcmFtZXRlcnMoc2VsZi5nZXRfcGFyYW1ldGVyc19zeW5jKCkpCisgICAgICAgICAgICBzZWxmLnJlcXVlc3RfcGFja2FnZV9pbmZvX2FzeW5jKCkKKyAgICAgICAgZWxpZiBpbml0Y21kID09IHNlbGYuaGFuZGxlci5QT1BVTEFURV9QQUNLQUdFSU5GTzoKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HOgorICAgICAgICAgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRFRCkKKyAgICAgICAgICAgICAgICBzZWxmLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgc2VsZi5yY3Bwa2dsaXN0X3BvcHVsYXRlZCgpCisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBzZWxmLmdlbmVyYXRlX2ltYWdlX2FzeW5jKFRydWUpCisKKyAgICBkZWYgc2hvd19lcnJvcl9kaWFsb2coc2VsZiwgbXNnKToKKyAgICAgICAgbGJsID0gIjxiPkhvYiBmb3VuZCBhbiBlcnJvcjwvYj4iCisgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9FUlJPUiwgbXNnKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd193YXJuaW5nX2RpYWxvZyhzZWxmKToKKyAgICAgICAgZGlhbG9nID0gUGFyc2luZ1dhcm5pbmdzRGlhbG9nKHRpdGxlID0gIlZpZXcgd2FybmluZ3MiLAorICAgICAgICAgICAgICAgIHdhcm5pbmdzID0gc2VsZi5wYXJzaW5nX3dhcm5pbmdzLAorICAgICAgICAgICAgICAgIHBhcmVudCA9IE5vbmUsCisgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfbmV0d29ya19lcnJvcl9kaWFsb2coc2VsZik6CisgICAgICAgIGxibCA9ICI8Yj5Ib2IgY2Fubm90IGNvbm5lY3QgdG8gdGhlIG5ldHdvcms8L2I+IgorICAgICAgICBtc2cgPSBtc2cgKyAiUGxlYXNlIGNoZWNrIHlvdXIgbmV0d29yayBjb25uZWN0aW9uLiBJZiB5b3UgYXJlIHVzaW5nIGEgcHJveHkgc2VydmVyLCBwbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJQcm94eSBzZXR0aW5ncyIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXMgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICBpZiByZXMgPT0gZ3RrLlJFU1BPTlNFX0NBTkNFTDoKKyAgICAgICAgICAgIHJlcywgc2V0dGluZ3NfY2hhbmdlZCA9IHNlbGYuc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKFNpbXBsZVNldHRpbmdzRGlhbG9nLlBST1hJRVNfUEFHRV9JRCkKKyAgICAgICAgICAgIGlmIG5vdCByZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBzZXR0aW5nc19jaGFuZ2VkOgorICAgICAgICAgICAgICAgIHNlbGYucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCisKKyAgICBkZWYgaGFuZGxlcl9jb21tYW5kX2ZhaWxlZF9jYihzZWxmLCBoYW5kbGVyLCBtc2cpOgorICAgICAgICBpZiBtc2c6CisgICAgICAgICAgICBzZWxmLnNob3dfZXJyb3JfZGlhbG9nKG1zZykKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX3dhcm5pbmdfY2Ioc2VsZiwgaGFuZGxlciwgd2Fybl9tc2cpOgorICAgICAgICBzZWxmLnBhcnNpbmdfd2FybmluZ3MuYXBwZW5kKHdhcm5fbXNnKQorCisgICAgZGVmIGhhbmRsZXJfc2FuaXR5X2ZhaWxlZF9jYihzZWxmLCBoYW5kbGVyLCBtc2csIG5ldHdvcmtfZXJyb3IpOgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgaWYgbmV0d29ya19lcnJvcjoKKyAgICAgICAgICAgICMgTWFyayB0aGlzIGluIGFuIGludGVybmFsIGZpZWxkLiBUaGUgIm5ldHdvcmsgZXJyb3IiIGRpYWxvZyB3aWxsIGJlCisgICAgICAgICAgICAjIHNob3duIGxhdGVyLCB3aGVuIGEgU2FuaXR5Q2hlY2tQYXNzZWQgZXZlbnQgd2lsbCBiZSBoYW5kbGVkCisgICAgICAgICAgICAjIChhcyBzZW50IGJ5IHNhbml0eS5iYmNsYXNzKQorICAgICAgICAgICAgc2VsZi5oYWRfbmV0d29ya19lcnJvciA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKCJ5b3VyIGxvY2FsLmNvbmYiLCAiU2V0dGluZ3MiKQorICAgICAgICAgICAgc2VsZi5zaG93X2Vycm9yX2RpYWxvZyhtc2cpCisgICAgICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiB3aW5kb3dfc2Vuc2l0aXZlKHNlbGYsIHNlbnNpdGl2ZSk6CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLm1hY2hpbmVfY29tYm8uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLm1hY2hpbmVfY29tYm8uY2hpbGQuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmltYWdlX2NvbWJvLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5pbWFnZV9jb21iby5jaGlsZC5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UubGF5ZXJfYnV0dG9uLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5sYXllcl9pbmZvX2ljb24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnRvb2xiYXIuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5jb25maWdfYnVpbGRfYnV0dG9uLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorCisgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorCisgICAgICAgIGlmIHNlbnNpdGl2ZToKKyAgICAgICAgICAgIHNlbGYud2luZG93LnNldF9jdXJzb3IoTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2luZG93LnNldF9jdXJzb3IoZ3RrLmdkay5DdXJzb3IoZ3RrLmdkay5XQVRDSCkpCisgICAgICAgIHNlbGYuc2Vuc2l0aXZlID0gc2Vuc2l0aXZlCisKKworICAgIGRlZiBoYW5kbGVyX2dlbmVyYXRpbmdfZGF0YV9jYihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi53aW5kb3dfc2Vuc2l0aXZlKEZhbHNlKQorCisgICAgZGVmIGhhbmRsZXJfZGF0YV9nZW5lcmF0ZWRfY2Ioc2VsZiwgaGFuZGxlcik6CisgICAgICAgIHNlbGYud2luZG93X3NlbnNpdGl2ZShUcnVlKQorCisgICAgZGVmIHJjcHBrZ2xpc3RfcG9wdWxhdGVkKHNlbGYpOgorICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZQorICAgICAgICBzZWxlY3RlZF9yZWNpcGVzID0gc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3JlY2lwZXNbOl0KKyAgICAgICAgc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXNbOl0KKyAgICAgICAgdXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzWzpdCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX2ltYWdlX2NvbWJvKHNlbGYucmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX2ltYWdlX2Rlc2MoKQorICAgICAgICBzZWxmLnVwZGF0ZV9yZWNpcGVfbW9kZWwoc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMpCisgICAgICAgIHNlbGYudXBkYXRlX3BhY2thZ2VfbW9kZWwoc2VsZWN0ZWRfcGFja2FnZXMsIHVzZXJfc2VsZWN0ZWRfcGFja2FnZXMpCisKKyAgICBkZWYgcmVjaXBlbGlzdF9jaGFuZ2VkX2NiKHNlbGYsIHJlY2lwZV9tb2RlbCk6CisgICAgICAgIHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZS5yZWZyZXNoX3NlbGVjdGlvbigpCisKKyAgICBkZWYgcGFja2FnZWxpc3RfY2hhbmdlZF9jYihzZWxmLCBwYWNrYWdlX21vZGVsKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5yZWZyZXNoX3NlbGVjdGlvbigpCisKKyAgICBkZWYgaGFuZGxlcl9yZWNpcGVfcG9wdWxhdGVkX2NiKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJQb3B1bGF0aW5nIHJlY2lwZXMiLCAwLjk5KQorCisgICAgZGVmIGhhbmRsZXJfcGFja2FnZV9wb3B1bGF0ZWRfY2Ioc2VsZiwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIlBvcHVsYXRpbmcgcGFja2FnZXMiLCAxLjApCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX3N0YXJ0ZWRfY2Ioc2VsZiwgaGFuZGxlciwgbWVzc2FnZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwICE9IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnJhY3Rpb24gPSAwCisgICAgICAgIGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJUcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCI6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuNiArIGZyYWN0aW9uCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiR2VuZXJhdGluZyBkZXBlbmRlbmN5IHRyZWUiLCBmcmFjdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIobWVzc2FnZVsidGl0bGUiXSwgZnJhY3Rpb24pCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX2NiKHNlbGYsIGhhbmRsZXIsIG1lc3NhZ2UpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCAhPSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZyYWN0aW9uID0gbWVzc2FnZVsiY3VycmVudCJdICogMS4wL21lc3NhZ2VbInRvdGFsIl0KKyAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gIlRyZWVEYXRhUHJlcGFyYXRpb25Qcm9ncmVzcyI6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuNiArIDAuMzggKiBmcmFjdGlvbgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiR2VuZXJhdGluZyBkZXBlbmRlbmN5IHRyZWUiLCBmcmFjdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42ICogZnJhY3Rpb24KKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIobWVzc2FnZVsidGl0bGUiXSwgZnJhY3Rpb24pCisKKyAgICBkZWYgaGFuZGxlcl9wYXJzaW5nX2NvbXBsZXRlZF9jYihzZWxmLCBoYW5kbGVyLCBtZXNzYWdlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgIT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAiVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZCI6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOTgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIkdlbmVyYXRpbmcgZGVwZW5kZW5jeSB0cmVlIiwgZnJhY3Rpb24pCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9zdGFydGVkX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMAorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGlmIHNlbGYucHJldmlvdXNfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAKKyAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMAorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJCdWlsZCBTdGFydGVkOiAiLCBmcmFjdGlvbikKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19jb25maWd1cmF0aW9ucyhzZWxmLmNvbmZpZ3VyYXRpb24sIHNlbGYucGFyYW1ldGVycykKKworICAgIGRlZiBidWlsZF9zdWNjZWVkZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjkKKyAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDEuMAorICAgICAgICAgICAgdmVyc2lvbiA9ICIiCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfbmFtZXMgPSBbXQorICAgICAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSAhPSBzZWxlY3RlZF9pbWFnZToKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9jdXN0b21faW1hZ2VfdmVyc2lvbigpCisgICAgICAgICAgICAgICAgbGlua25hbWUgPSBzZWxmLmhvYl9pbWFnZSArIHZlcnNpb24gKyAiLSIgKyBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmtuYW1lID0gc2VsZWN0ZWRfaW1hZ2UgKyAnLScgKyBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoCisgICAgICAgICAgICBpbWFnZV9leHRlbnNpb24gPSBzZWxmLmdldF9pbWFnZV9leHRlbnNpb24oKQorICAgICAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzOgorICAgICAgICAgICAgICAgIGlmIGltYWdlX3R5cGUgaW4gaW1hZ2VfZXh0ZW5zaW9uOgorICAgICAgICAgICAgICAgICAgICByZWFsX3R5cGVzID0gaW1hZ2VfZXh0ZW5zaW9uW2ltYWdlX3R5cGVdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVhbF90eXBlcyA9IFtpbWFnZV90eXBlXQorICAgICAgICAgICAgICAgIGZvciByZWFsX2ltYWdlX3R5cGUgaW4gcmVhbF90eXBlczoKKyAgICAgICAgICAgICAgICAgICAgbGlua3BhdGggPSBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciArICcvJyArIGxpbmtuYW1lICsgJy4nICsgcmVhbF9pbWFnZV90eXBlCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxpbmtwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5pbWFnZV9uYW1lcy5hcHBlbmQob3MucmVhZGxpbmsobGlua3BhdGgpKQorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAxLjAKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiQnVpbGQgQ29tcGxldGVkOiAiLCBmcmFjdGlvbikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkX3N1Y2NlZWRlZF9hc3luYygpCisgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlBBQ0tBR0VfR0VORVJBVEVEKQorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5JTUFHRV9HRU5FUkFURUQpCisKKyAgICBkZWYgYnVpbGRfZmFpbGVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0b3BwaW5nOgorICAgICAgICAgICAgc3RhdHVzID0gInN0b3AiCisgICAgICAgICAgICBtZXNzYWdlID0gIkJ1aWxkIHN0b3BwZWQ6ICIKKyAgICAgICAgICAgIGZyYWN0aW9uID0gc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UucHJvZ3Jlc3NfYmFyLmdldF9mcmFjdGlvbigpCisgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICIiCisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gInBhY2thZ2VzIgorICAgICAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBzdG9wX3RvX25leHRfZWRpdCA9ICJyZWNpcGVzIgorICAgICAgICAgICAgYnV0dG9uID0gc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19zdG9wX3BhZ2Uoc3RvcF90b19uZXh0X2VkaXQuc3BsaXQoJyAnKVswXSkKKyAgICAgICAgICAgIHNlbGYuc2V0X2RlZmF1bHQoYnV0dG9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAiIgorICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAiaW1hZ2UgY29uZmlndXJhdGlvbiIKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOQorICAgICAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgICAgICBmYWlsX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZhaWxfdG9fbmV4dF9lZGl0ID0gInBhY2thZ2VzIgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMS4wCisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIGZhaWxfdG9fbmV4dF9lZGl0ID0gInJlY2lwZXMiCisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAxLjAKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnNob3dfZmFpbF9wYWdlKGZhaWxfdG9fbmV4dF9lZGl0LnNwbGl0KCcgJylbMF0pCisgICAgICAgICAgICBzdGF0dXMgPSAiZmFpbCIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiQnVpbGQgZmFpbGVkOiAiCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIobWVzc2FnZSwgZnJhY3Rpb24sIHN0YXR1cykKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19iYWNrX2J1dHRvbigpCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLmhpZGVfc3RvcF9idXR0b24oKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGRfZmFpbGVkX2FzeW5jKCkKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9zdWNjZWVkZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnN0b3BwaW5nOgorICAgICAgICAgICAgc2VsZi5idWlsZF9zdWNjZWVkZWQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9mYWlsZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIHNlbGYuYnVpbGRfZmFpbGVkKCkKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX2Fib3J0ZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIHNlbGYuYnVpbGRfZmFpbGVkKCkKKworICAgIGRlZiBoYW5kbGVyX25vX3Byb3ZpZGVyX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQsIG1zZyk6CisgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgZ2xpYi5tYXJrdXBfZXNjYXBlX3RleHQobXNnKSwgZ3RrLk1FU1NBR0VfSU5GTykKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisgICAgZGVmIGhhbmRsZXJfdGFza19zdGFydGVkX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQsIG1lc3NhZ2UpOiAKKyAgICAgICAgZnJhY3Rpb24gPSBtZXNzYWdlWyJjdXJyZW50Il0gKiAxLjAvbWVzc2FnZVsidG90YWwiXQorICAgICAgICB0aXRsZSA9ICJCdWlsZCBwYWNrYWdlcyIKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMjcgKiBmcmFjdGlvbgorICAgICAgICAgICAgZWxpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAicnVuUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjI3ICsgMC42MyAqIGZyYWN0aW9uCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgdGl0bGUgPSAiQnVpbGQgaW1hZ2UiCisgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzX3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInNjZW5lUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC4yNyArIDAuNjMgKyAwLjAzICogZnJhY3Rpb24KKyAgICAgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjI3ICsgMC42MyArIDAuMDMgKyAwLjA3ICogZnJhY3Rpb24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInNjZW5lUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC4yICogZnJhY3Rpb24KKyAgICAgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKyAwLjggKiBmcmFjdGlvbgorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInNjZW5lUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKiBmcmFjdGlvbgorICAgICAgICAgICAgZWxpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAicnVuUXVldWVUYXNrU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKyAwLjggKiBmcmFjdGlvbgorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKHRpdGxlICsgIjogIiwgZnJhY3Rpb24pCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9idWlsZF9zdGF0dXMobWVzc2FnZVsiY3VycmVudCJdLCBtZXNzYWdlWyJ0b3RhbCJdLCBtZXNzYWdlWyJ0YXNrIl0pCisKKyAgICBkZWYgaGFuZGxlcl9kaXNrX2Z1bGxfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIHNlbGYuZGlza19mdWxsID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZXJfYnVpbGRfZmFpbHVyZV9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19pc3N1ZXMoKQorCisgICAgZGVmIGhhbmRsZXJfYnVpbGRfbG9nX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQsIGZ1bmMsIG9iaik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5sb2dnZXIsIGZ1bmMpOgorICAgICAgICAgICAgZ2V0YXR0cihzZWxmLmxvZ2dlciwgZnVuYykob2JqKQorCisgICAgZGVmIGRlc3Ryb3lfd2luZG93X2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBpZiBub3Qgc2VsZi5zZW5zaXRpdmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbGlmIHNlbGYuaGFuZGxlci5idWlsZGluZzoKKyAgICAgICAgICAgIHNlbGYuc3RvcF9idWlsZCgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3RrLm1haW5fcXVpdCgpCisKKyAgICBkZWYgZXZlbnRfaGFuZGxlX1NJR0lOVChzZWxmLCBzaWduYWwsIGZyYW1lKToKKyAgICAgICAgZm9yIHcgaW4gZ3RrLndpbmRvd19saXN0X3RvcGxldmVscygpOgorICAgICAgICAgICAgaWYgdy5nZXRfbW9kYWwoKToKKyAgICAgICAgICAgICAgICB3LnJlc3BvbnNlKGd0ay5SRVNQT05TRV9ERUxFVEVfRVZFTlQpCisgICAgICAgIHN5cy5leGl0KDApCisKKyAgICBkZWYgYnVpbGRfcGFja2FnZXMoc2VsZik6CisgICAgICAgIF8sIGFsbF9yZWNpcGVzID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX3JlY2lwZXMoKQorICAgICAgICBpZiBub3QgYWxsX3JlY2lwZXM6CisgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3QgbWFkZSBhbnkgc2VsZWN0aW9ucyIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgc28gdGhlcmUgaXNuJ3QgYW55dGhpbmcgdG8gYmFrZSBhdCB0aGlzIHRpbWUuIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9wYWNrYWdlc19hc3luYyhUcnVlKQorCisgICAgZGVmIGJ1aWxkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICBpZiBub3Qgc2VsZWN0ZWRfcGFja2FnZXM6ICAgICAgCisgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3QgbWFkZSBhbnkgc2VsZWN0aW9ucyIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgc28gdGhlcmUgaXNuJ3QgYW55dGhpbmcgdG8gYmFrZSBhdCB0aGlzIHRpbWUuIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9pbWFnZV9hc3luYyhUcnVlKQorCisgICAgZGVmIGp1c3RfYmFrZShzZWxmKToKKyAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKSBvciBbXQorCisgICAgICAgICMgSWYgbm8gYmFzZSBpbWFnZSBhbmQgbm8gc2VsZWN0ZWQgcGFja2FnZXMgZG9uJ3QgYnVpbGQgYW55dGhpbmcKKyAgICAgICAgaWYgbm90IChzZWxlY3RlZF9wYWNrYWdlcyBvciBzZWxlY3RlZF9pbWFnZSAhPSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fKToKKyAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBzbyB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiYWtlIGF0IHRoaXMgdGltZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuZmFzdF9nZW5lcmF0ZV9pbWFnZV9hc3luYyhUcnVlKQorCisgICAgZGVmIHNob3dfcmVjaXBlX3Byb3BlcnR5X2RpYWxvZyhzZWxmLCBwcm9wZXJ0aWVzKToKKyAgICAgICAgaW5mb3JtYXRpb24gPSB7fQorICAgICAgICBkaWFsb2cgPSBQcm9wZXJ0eURpYWxvZyh0aXRsZSA9IHByb3BlcnRpZXNbIm5hbWUiXSArJyAnKyAicHJvcGVydGllcyIsCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiA9IHByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKworICAgICAgICBkaWFsb2cuc2V0X21vZGFsKEZhbHNlKQorCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgbGFtYmRhIHc6IGRpYWxvZy5kZXN0cm95KCkpCisKKyAgICAgICAgZGlhbG9nLnJ1bigpCisKKyAgICBkZWYgc2hvd19wYWNrYWdlc19wcm9wZXJ0eV9kaWFsb2coc2VsZiwgcHJvcGVydGllcyk6CisgICAgICAgIGluZm9ybWF0aW9uID0ge30KKyAgICAgICAgZGlhbG9nID0gUHJvcGVydHlEaWFsb2codGl0bGUgPSBwcm9wZXJ0aWVzWyJuYW1lIl0gKycgJysgInByb3BlcnRpZXMiLAorICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gPSBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IpCisKKyAgICAgICAgZGlhbG9nLnNldF9tb2RhbChGYWxzZSkKKworICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIGxhbWJkYSB3OiBkaWFsb2cuZGVzdHJveSgpKQorCisgICAgICAgIGRpYWxvZy5ydW4oKQorCisgICAgZGVmIHNob3dfbGF5ZXJfc2VsZWN0aW9uX2RpYWxvZyhzZWxmKToKKyAgICAgICAgZGlhbG9nID0gTGF5ZXJTZWxlY3Rpb25EaWFsb2codGl0bGUgPSAiTGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgIGxheWVycyA9IGNvcHkuZGVlcGNvcHkoc2VsZi5jb25maWd1cmF0aW9uLmxheWVycyksCisgICAgICAgICAgICAgICAgICAgICBsYXllcnNfbm9uX3JlbW92YWJsZSA9IGNvcHkuZGVlcGNvcHkoc2VsZi5jb25maWd1cmF0aW9uLmxheWVyc19ub25fcmVtb3ZhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgIGFsbF9sYXllcnMgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX2xheWVycywKKyAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT0siLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5sYXllcnMgPSBkaWFsb2cubGF5ZXJzCisgICAgICAgICAgICAjIERPIHJlZnJlc2ggbGF5ZXJzCisgICAgICAgICAgICBpZiBkaWFsb2cubGF5ZXJzX2NoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfY29uZmlnX2FzeW5jKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGdldF9pbWFnZV9leHRlbnNpb24oc2VsZik6CisgICAgICAgIGltYWdlX2V4dGVuc2lvbiA9IHt9CisgICAgICAgIGZvciB0eXBlIGluIHNlbGYucGFyYW1ldGVycy5pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGV4dCA9IHNlbGYuaGFuZGxlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfRVhURU5TSU9OXyVzIiAlIHR5cGVdKQorICAgICAgICAgICAgaWYgZXh0OgorICAgICAgICAgICAgICAgIGltYWdlX2V4dGVuc2lvblt0eXBlXSA9IGV4dC5zcGxpdCgnICcpCisKKyAgICAgICAgcmV0dXJuIGltYWdlX2V4dGVuc2lvbgorCisgICAgZGVmIHNob3dfbG9hZF9teV9pbWFnZXNfZGlhbG9nKHNlbGYpOgorICAgICAgICBpbWFnZV9leHRlbnNpb24gPSBzZWxmLmdldF9pbWFnZV9leHRlbnNpb24oKQorICAgICAgICBkaWFsb2cgPSBJbWFnZVNlbGVjdGlvbkRpYWxvZyhzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciwgc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3BlbiBNeSBJbWFnZXMiLCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2V4dGVuc2lvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBpZiBub3QgZGlhbG9nLmltYWdlX25hbWVzOgorICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3QgbWFkZSBhbnkgc2VsZWN0aW9ucyIKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmltYWdlX2FkZHIgPSBkaWFsb2cuaW1hZ2VfZm9sZGVyCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfbmFtZXMgPSBkaWFsb2cuaW1hZ2VfbmFtZXNbOl0KKyAgICAgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5NWV9JTUFHRV9PUEVORUQpCisKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfYWR2X3NldHRpbmdzX2RpYWxvZyhzZWxmLCB0YWI9Tm9uZSk6CisgICAgICAgIGRpYWxvZyA9IEFkdmFuY2VkU2V0dGluZ3NEaWFsb2codGl0bGUgPSAiQWR2YW5jZWQgY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24pLAorICAgICAgICAgICAgYWxsX2ltYWdlX3R5cGVzID0gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzLAorICAgICAgICAgICAgYWxsX3BhY2thZ2VfZm9ybWF0cyA9IHNlbGYucGFyYW1ldGVycy5hbGxfcGFja2FnZV9mb3JtYXRzLAorICAgICAgICAgICAgYWxsX2Rpc3Ryb3MgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX2Rpc3Ryb3MsCisgICAgICAgICAgICBhbGxfc2RrX21hY2hpbmVzID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9zZGtfbWFjaGluZXMsCisgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IHNlbGYucGFyYW1ldGVycy5tYXhfdGhyZWFkcywKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJTYXZlIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGRpYWxvZy5zZXRfc2F2ZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBzZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGRpYWxvZy5jb25maWd1cmF0aW9uCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2F2ZShzZWxmLmhhbmRsZXIsIFRydWUpICMgcmVtZW1iZXIgc2V0dGluZ3MKKyAgICAgICAgICAgIHNldHRpbmdzX2NoYW5nZWQgPSBkaWFsb2cuc2V0dGluZ3NfY2hhbmdlZAorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIHJldHVybiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTLCBzZXR0aW5nc19jaGFuZ2VkCisKKyAgICBkZWYgc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKHNlbGYsIHRhYj1Ob25lKToKKyAgICAgICAgZGlhbG9nID0gU2ltcGxlU2V0dGluZ3NEaWFsb2codGl0bGUgPSAiU2V0dGluZ3MiLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IGNvcHkuZGVlcGNvcHkoc2VsZi5jb25maWd1cmF0aW9uKSwKKyAgICAgICAgICAgIGFsbF9pbWFnZV90eXBlcyA9IHNlbGYucGFyYW1ldGVycy5pbWFnZV90eXBlcywKKyAgICAgICAgICAgIGFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX3BhY2thZ2VfZm9ybWF0cywKKyAgICAgICAgICAgIGFsbF9kaXN0cm9zID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9kaXN0cm9zLAorICAgICAgICAgICAgYWxsX3Nka19tYWNoaW5lcyA9IHNlbGYucGFyYW1ldGVycy5hbGxfc2RrX21hY2hpbmVzLAorICAgICAgICAgICAgbWF4X3RocmVhZHMgPSBzZWxmLnBhcmFtZXRlcnMubWF4X3RocmVhZHMsCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLAorICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX01PREFMCisgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UCisgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IsCisgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5oYW5kbGVyKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIlNhdmUiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgaWYgdGFiOgorICAgICAgICAgICAgZGlhbG9nLnN3aXRjaF90b19wYWdlKHRhYikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBkaWFsb2cuY29uZmlndXJhdGlvbgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNhdmUoc2VsZi5oYW5kbGVyLCBUcnVlKSAjIHJlbWVtYmVyIHNldHRpbmdzCisgICAgICAgICAgICBzZXR0aW5nc19jaGFuZ2VkID0gZGlhbG9nLnNldHRpbmdzX2NoYW5nZWQKKyAgICAgICAgICAgIGlmIGRpYWxvZy5wcm94eV9zZXR0aW5nc19jaGFuZ2VkOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnX3Byb3hpZXMoKQorICAgICAgICBlbGlmIGRpYWxvZy5wcm94eV90ZXN0X3JhbjoKKyAgICAgICAgICAgICMgVGhlIHVzZXIgbWlnaHQgaGF2ZSBtb2RpZmllZCB0aGUgcHJveGllcyBpbiB0aGUgIlByb3h5IgorICAgICAgICAgICAgIyB0YWIsIHdoaWNoIGluIHR1cm4gbWFkZSB0aGUgcHJveHkgc2V0dGluZ3MgbW9kaWZ5IGluIGJiLgorICAgICAgICAgICAgIyBJZiAiQ2FuY2VsIiB3YXMgcHJlc3NlZCwgcmVzdG9yZSB0aGUgcHJldmlvdXMgcHJveHkKKyAgICAgICAgICAgICMgc2V0dGluZ3MgaW5zaWRlIGJiLgorICAgICAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfcHJveGllcygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVMsIHNldHRpbmdzX2NoYW5nZWQKKworICAgIGRlZiByZXBhcnNlX3Bvc3RfYWR2X3NldHRpbmdzKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaDoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX2NvbmZpZ19hc3luYygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY2xlYXJfc2VsZWN0aW9uKCkKKyAgICAgICAgICAgICMgRE8gcmVwYXJzZSByZWNpcGVzCisgICAgICAgICAgICBzZWxmLnBvcHVsYXRlX3JlY2lwZV9wYWNrYWdlX2luZm9fYXN5bmMoKQorCisgICAgZGVmIGRlcGxveV9pbWFnZShzZWxmLCBpbWFnZV9uYW1lKToKKyAgICAgICAgaWYgbm90IGltYWdlX25hbWU6CisgICAgICAgICAgICBsYmwgPSAiPGI+UGxlYXNlIHNlbGVjdCBhbiBpbWFnZSB0byBkZXBsb3kuPC9iPiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9JTkZPKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGltYWdlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJhbWV0ZXJzLmltYWdlX2FkZHIsIGltYWdlX25hbWUpCisgICAgICAgIGRpYWxvZyA9IERlcGxveUltYWdlRGlhbG9nKHRpdGxlID0gIlVzYiBJbWFnZSBNYWtlciIsCisgICAgICAgICAgICBpbWFnZV9wYXRoID0gaW1hZ2VfcGF0aCwKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk1ha2UgdXNiIGltYWdlIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBzaG93X2xvYWRfa2VybmVsX2RpYWxvZyhzZWxmKToKKyAgICAgICAgZGlhbG9nID0gZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKCJMb2FkIEtlcm5lbCBGaWxlcyIsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgZmlsdGVyID0gZ3RrLkZpbGVGaWx0ZXIoKQorICAgICAgICBmaWx0ZXIuc2V0X25hbWUoIktlcm5lbCBGaWxlcyIpCisgICAgICAgIGZpbHRlci5hZGRfcGF0dGVybigiKi5iaW4iKQorICAgICAgICBkaWFsb2cuYWRkX2ZpbHRlcihmaWx0ZXIpCisKKyAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcihzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkcikKKworICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBrZXJuZWxfcGF0aCA9ICIiCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBrZXJuZWxfcGF0aCA9IGRpYWxvZy5nZXRfZmlsZW5hbWUoKQorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgICAgICByZXR1cm4ga2VybmVsX3BhdGgKKworICAgIGRlZiBydW5xZW11X2ltYWdlKHNlbGYsIGltYWdlX25hbWUsIGtlcm5lbF9uYW1lKToKKyAgICAgICAgaWYgbm90IGltYWdlX25hbWUgb3Igbm90IGtlcm5lbF9uYW1lOgorICAgICAgICAgICAgbGJsID0gIjxiPlBsZWFzZSBzZWxlY3QgJXMgdG8gbGF1bmNoIGluIFFFTVUuPC9iPiIgJSAoImEga2VybmVsIiBpZiBpbWFnZV9uYW1lIGVsc2UgImFuIGltYWdlIikKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9JTkZPKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGtlcm5lbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyLCBrZXJuZWxfbmFtZSkKKyAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciwgaW1hZ2VfbmFtZSkKKworICAgICAgICBzb3VyY2VfZW52X3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJhbWV0ZXJzLmNvcmVfYmFzZSwgIm9lLWluaXQtYnVpbGQtZW52IikKKyAgICAgICAgdG1wX3BhdGggPSBzZWxmLnBhcmFtZXRlcnMudG1wZGlyCisgICAgICAgIGNtZGxpbmUgPSBiYi51aS5jcnVtYnMudXRpbHMud2hpY2hfdGVybWluYWwoKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbWFnZV9wYXRoKSBhbmQgb3MucGF0aC5leGlzdHMoa2VybmVsX3BhdGgpIFwKKyAgICAgICAgICAgYW5kIG9zLnBhdGguZXhpc3RzKHNvdXJjZV9lbnZfcGF0aCkgYW5kIG9zLnBhdGguZXhpc3RzKHRtcF9wYXRoKSBcCisgICAgICAgICAgIGFuZCBjbWRsaW5lOgorICAgICAgICAgICAgY21kbGluZSArPSAiXCcgYmFzaCAtYyBcImV4cG9ydCBPRV9UTVBESVI9IiArIHRtcF9wYXRoICsgIjsgIgorICAgICAgICAgICAgY21kbGluZSArPSAic291cmNlICIgKyBzb3VyY2VfZW52X3BhdGggKyAiICIgKyBvcy5nZXRjd2QoKSArICI7ICIKKyAgICAgICAgICAgIGNtZGxpbmUgKz0gInJ1bnFlbXUgIiArIGtlcm5lbF9wYXRoICsgIiAiICsgaW1hZ2VfcGF0aCArICJcIlwnIgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdChjbWRsaW5lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxibCA9ICI8Yj5QYXRoIGVycm9yPC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJPbmUgb2YgeW91ciBwYXRocyBpcyB3cm9uZywiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHBsZWFzZSBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBwYXRocyBleGlzdDpcbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJpbWFnZSBwYXRoOiIgKyBpbWFnZV9wYXRoICsgIlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgImtlcm5lbCBwYXRoOiIgKyBrZXJuZWxfcGF0aCArICJcbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJzb3VyY2UgZW52aXJvbm1lbnQgcGF0aDoiICsgc291cmNlX2Vudl9wYXRoICsgIlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgInRtcCBwYXRoOiAiICsgdG1wX3BhdGggKyAiLiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJZb3UgbWF5IGJlIG1pc3NpbmcgZWl0aGVyIHh0ZXJtIG9yIHZ0ZSBmb3IgdGVybWluYWwgc2VydmljZXMuIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfcGFja2FnZXMoc2VsZik6CisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UucmVmcmVzaF90YWJsZXMoKQorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUEFDS0FHRV9TRUxFQ1RJT04pCisKKyAgICBkZWYgc2hvd19yZWNpcGVzKHNlbGYpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUkVDSVBFX1NFTEVDVElPTikKKworICAgIGRlZiBzaG93X2ltYWdlX2RldGFpbHMoc2VsZik6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5JTUFHRV9HRU5FUkFURUQpCisKKyAgICBkZWYgc2hvd19jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuQkFTRUlNR19TRUxFQ1RFRCkKKworICAgIGRlZiBzdG9wX2J1aWxkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0b3BwaW5nOgorICAgICAgICAgICAgbGJsID0gIjxiPkZvcmNlIFN0b3AgYnVpbGQ/PC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJZb3UndmUgYWxyZWFkeSBzZWxlY3RlZCBTdG9wIG9uY2UsIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiB3b3VsZCB5b3UgbGlrZSB0byAnRm9yY2UgU3RvcCcgdGhlIGJ1aWxkP1xuXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiVGhpcyB3aWxsIHN0b3AgdGhlIGJ1aWxkIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgYnV0IG1heSIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgd2VsbCBsZWF2ZSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSBpbiBhbiAgdW51c2FibGUgc3RhdGUiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHRoYXQgcmVxdWlyZXMgbWFudWFsIHN0ZXBzIHRvIGZpeC4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfV0FSTklORywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJGb3JjZSBTdG9wIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGJsID0gIjxiPlN0b3AgYnVpbGQ/PC9iPiIKKyAgICAgICAgICAgIG1zZyA9ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3RvcCB0aGlzIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBidWlsZD9cblxuJ1N0b3AnIHdpbGwgc3RvcCB0aGUgYnVpbGQgYXMgc29vbiBhcyBhbGwgaW4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHByb2dyZXNzIGJ1aWxkIHRhc2tzIGFyZSBmaW5pc2hlZC4gSG93ZXZlciBpZiBhIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBsZW5ndGh5IGNvbXBpbGF0aW9uIHBoYXNlIGlzIGluIHByb2dyZXNzIHRoaXMgbWF5IHRha2UiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHNvbWUgdGltZS5cblxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIidGb3JjZSBTdG9wJyB3aWxsIHN0b3AgdGhlIGJ1aWxkIGFzIHF1aWNrbHkgYXMiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHBvc3NpYmxlIGJ1dCBtYXkgd2VsbCBsZWF2ZSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSBpbiBhbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgdW51c2FibGUgc3RhdGUgdGhhdCByZXF1aXJlcyBtYW51YWwgc3RlcHMgdG8gZml4LiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkZvcmNlIHN0b3AiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiU3RvcCIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIGlmIHJlc3BvbnNlICE9IGd0ay5SRVNQT05TRV9DQU5DRUw6CisgICAgICAgICAgICBzZWxmLnN0b3BwaW5nID0gVHJ1ZQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfT0s6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5wcm9ncmVzc19iYXIuc2V0X3N0b3BfdGl0bGUoIlN0b3BwaW5nIHRoZSBidWlsZC4uLi4iKQorICAgICAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKCJzdG9wIikKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsX2J1aWxkX3N5bmMoKQorICAgICAgICBlbGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBzZWxmLmNhbmNlbF9idWlsZF9zeW5jKFRydWUpCisKKyAgICBkZWYgZG9fbG9nKHNlbGYsIGNvbnNvbGVsb2dmaWxlID0gTm9uZSk6CisgICAgICAgIGlmIGNvbnNvbGVsb2dmaWxlOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShjb25zb2xlbG9nZmlsZSkpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnNvbGVsb2c6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLmNvbnNvbGVsb2cpCisgICAgICAgICAgICAgICAgc2VsZi5jb25zb2xlbG9nID0gTm9uZQorICAgICAgICAgICAgc2VsZi5jb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihjb25zb2xlbG9nZmlsZSkKKyAgICAgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKHNlbGYuY29uc29sZWxvZykKKyAgICAgICAgICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICAgICAgc2VsZi5jb25zb2xlbG9nLnNldEZvcm1hdHRlcihmb3JtYXQpCisKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5jb25zb2xlbG9nKQorCisgICAgZGVmIGdldF90b3BkaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZXIuZ2V0X3RvcGRpcigpCisKKyAgICBkZWYgd2FpdChzZWxmLCBkZWxheSk6CisgICAgICAgIHRpbWVfc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICB0aW1lX2VuZCA9IHRpbWVfc3RhcnQgKyBkZWxheQorICAgICAgICB3aGlsZSB0aW1lX2VuZCA+IHRpbWUudGltZSgpOgorICAgICAgICAgICAgd2hpbGUgZ3RrLmV2ZW50c19wZW5kaW5nKCk6CisgICAgICAgICAgICAgICAgZ3RrLm1haW5faXRlcmF0aW9uKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkbWFuYWdlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkbWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODU4ZDc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNDU1IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHRpbWUKKworY2xhc3MgQnVpbGRDb25maWd1cmF0aW9uOgorICAgICIiIiBSZXByZXNlbnRzIGEgcG90ZW50aWFsICpvciogaGlzdG9yaWMgKm9yKiBjb25jcmV0ZSBidWlsZC4gSXQKKyAgICBlbmNvbXBhc3NlcyBhbGwgdGhlIHRoaW5ncyB0aGF0IHdlIG5lZWQgdG8gdGVsbCBiaXRiYWtlIHRvIGRvIHRvIG1ha2UgaXQKKyAgICBidWlsZCB3aGF0IHdlIHdhbnQgaXQgdG8gYnVpbGQuCisKKyAgICBJdCBhbHNvIHN0b3JlZCB0aGUgbWV0YWRhdGEgVVJMIGFuZCB0aGUgc2V0IG9mIHBvc3NpYmxlIG1hY2hpbmVzIChhbmQgdGhlCisgICAgZGlzdHJvcyAvIGltYWdlcyAvIHVyaXMgZm9yIHRoZXNlLiBBcGFydCBmcm9tIHRoZSBtZXRkYXRhIFVSTCB0aGVzZSBhcmUKKyAgICBub3Qgc2VyaWFsaXNlZCB0byBmaWxlIChzaW5jZSB0aGV5IG1heSBiZSB0cmFuc2llbnQpLiBJbiBzb21lIHdheXMgdGhpcworICAgIGZ1bmN0aW9uYWxpdHkgbWlnaHQgYmUgc2hpZnRlZCB0byB0aGUgbG9hZGVyIGNsYXNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgc2VsZi5tZXRhZGF0YV91cmwgPSBOb25lCisKKyAgICAgICAgIyBUdXBsZSBvZiAoZGlzdHJvcywgaW1hZ2UsIHVybHMpCisgICAgICAgIHNlbGYubWFjaGluZV9vcHRpb25zID0ge30KKworICAgICAgICBzZWxmLm1hY2hpbmUgPSBOb25lCisgICAgICAgIHNlbGYuZGlzdHJvID0gTm9uZQorICAgICAgICBzZWxmLmltYWdlID0gTm9uZQorICAgICAgICBzZWxmLnVybHMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX3VybHMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX3BrZ3MgPSBbXQorCisgICAgZGVmIGdldF9tYWNoaW5lc19tb2RlbCAoc2VsZik6CisgICAgICAgIG1vZGVsID0gZ3RrLkxpc3RTdG9yZSAoZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgZm9yIG1hY2hpbmUgaW4gc2VsZi5tYWNoaW5lX29wdGlvbnMua2V5cygpOgorICAgICAgICAgICAgbW9kZWwuYXBwZW5kIChbbWFjaGluZV0pCisKKyAgICAgICAgcmV0dXJuIG1vZGVsCisKKyAgICBkZWYgZ2V0X2Rpc3Ryb19hbmRfaW1hZ2VzX21vZGVscyAoc2VsZiwgbWFjaGluZSk6CisgICAgICAgIGRpc3Ryb19tb2RlbCA9IGd0ay5MaXN0U3RvcmUgKGdvYmplY3QuVFlQRV9TVFJJTkcpCisKKyAgICAgICAgZm9yIGRpc3RybyBpbiBzZWxmLm1hY2hpbmVfb3B0aW9uc1ttYWNoaW5lXVswXToKKyAgICAgICAgICAgIGRpc3Ryb19tb2RlbC5hcHBlbmQgKFtkaXN0cm9dKQorCisgICAgICAgIGltYWdlX21vZGVsID0gZ3RrLkxpc3RTdG9yZSAoZ29iamVjdC5UWVBFX1NUUklORykKKworICAgICAgICBmb3IgaW1hZ2UgaW4gc2VsZi5tYWNoaW5lX29wdGlvbnNbbWFjaGluZV1bMV06CisgICAgICAgICAgICBpbWFnZV9tb2RlbC5hcHBlbmQgKFtpbWFnZV0pCisKKyAgICAgICAgcmV0dXJuIChkaXN0cm9fbW9kZWwsIGltYWdlX21vZGVsKQorCisgICAgZGVmIGdldF9yZXBvcyAoc2VsZik6CisgICAgICAgIHNlbGYudXJscyA9IHNlbGYubWFjaGluZV9vcHRpb25zW3NlbGYubWFjaGluZV1bMl0KKyAgICAgICAgcmV0dXJuIHNlbGYudXJscworCisgICAgIyBJdCBtaWdodCBiZSBhIGxvdCBsb3QgYmV0dGVyIGlmIHdlIHN0b3JlZCB0aGVzZSBpbiBsaWtlLCBiaXRiYWtlIGNvbmYKKyAgICAjIGZpbGUgZm9ybWF0LgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZF9mcm9tX2ZpbGUgKGZpbGVuYW1lKToKKworICAgICAgICBjb25mID0gQnVpbGRDb25maWd1cmF0aW9uKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBsaW5lLnNwbGl0ICgiOyIpWzFdCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoIm1ldGFkYXRhLXVybDsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYubWV0YWRhdGFfdXJsID0gZGF0YS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoInVybDsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYudXJscyArPSBbZGF0YS5zdHJpcCgpXQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJleHRyYS11cmw7IikpOgorICAgICAgICAgICAgICAgICAgICBjb25mLmV4dHJhX3VybHMgKz0gW2RhdGEuc3RyaXAoKV0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAobGluZS5zdGFydHN3aXRoICgibWFjaGluZTsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYubWFjaGluZSA9IGRhdGEuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJkaXN0cmlidXRpb247IikpOgorICAgICAgICAgICAgICAgICAgICBjb25mLmRpc3RybyA9IGRhdGEuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJpbWFnZTsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYuaW1hZ2UgPSBkYXRhLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICByZXR1cm4gY29uZgorCisgICAgIyBTZXJpYWxpc2UgdG8gYSBmaWxlLiBUaGlzIGlzIHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHdlIHVzZSB0aGlzCisgICAgIyB0byBiZSBhYmxlIHRvIHJlcGVhdCBhIGdpdmVuIGJ1aWxkICh1c2luZyB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycykKKyAgICAjIGJ1dCBhbHNvIHNvIHRoYXQgd2UgY2FuIGluY2x1ZGUgdGhlIGRldGFpbHMgb2YgdGhlIGltYWdlIC8gbWFjaGluZSAvCisgICAgIyBkaXN0cm8gaW4gdGhlIGJ1aWxkIG1hbmFnZXIgdHJlZSB2aWV3LgorICAgIGRlZiB3cml0ZV90b19maWxlIChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGYgPSBvcGVuIChmaWxlbmFtZSwgInciKQorCisgICAgICAgIGxpbmVzID0gW10KKworICAgICAgICBpZiAoc2VsZi5tZXRhZGF0YV91cmwpOgorICAgICAgICAgICAgbGluZXMgKz0gWyJtZXRhZGF0YS11cmw7JXNcbiIgJSAoc2VsZi5tZXRhZGF0YV91cmwpXQorCisgICAgICAgIGZvciB1cmwgaW4gc2VsZi51cmxzOgorICAgICAgICAgICAgbGluZXMgKz0gWyJ1cmw7JXNcbiIgJSAodXJsKV0KKworICAgICAgICBmb3IgdXJsIGluIHNlbGYuZXh0cmFfdXJsczoKKyAgICAgICAgICAgIGxpbmVzICs9IFsiZXh0cmEtdXJsOyVzXG4iICUgKHVybCldCisKKyAgICAgICAgaWYgKHNlbGYubWFjaGluZSk6CisgICAgICAgICAgICBsaW5lcyArPSBbIm1hY2hpbmU7JXNcbiIgJSAoc2VsZi5tYWNoaW5lKV0KKworICAgICAgICBpZiAoc2VsZi5kaXN0cm8pOgorICAgICAgICAgICAgbGluZXMgKz0gWyJkaXN0cmlidXRpb247JXNcbiIgJSAoc2VsZi5kaXN0cm8pXQorCisgICAgICAgIGlmIChzZWxmLmltYWdlKToKKyAgICAgICAgICAgIGxpbmVzICs9IFsiaW1hZ2U7JXNcbiIgJSAoc2VsZi5pbWFnZSldCisKKyAgICAgICAgZi53cml0ZWxpbmVzIChsaW5lcykKKyAgICAgICAgZi5jbG9zZSAoKQorCitjbGFzcyBCdWlsZFJlc3VsdChnb2JqZWN0LkdPYmplY3QpOgorICAgICIiIiBSZXByZXNlbnRzIGFuIGhpc3RvcmljIGJ1aWxkLiBQZXJoYXBzIG5vdCBzdWNjZXNzZnVsLiBCdXQgaXQgaW5jbHVkZXMKKyAgICB0aGluZ3Mgc3VjaCBhcyB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIGRpcmVjdG9yeSAodGhlIG91dHB1dCBmcm9tIHRoZQorICAgIGJ1aWxkKSBhcyB3ZWxsIGFzIGEgZGVzZXJpYWxpc2VkIEJ1aWxkQ29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgc3RvcmVkIGluCisgICAgIi5jb25mIiBpbiB0aGUgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQuCisKKyAgICBUaGlzIGlzIEdPYmplY3Qgc28gdGhhdCBpdCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIFRyZWVTdG9yZS4iIiIKKworICAgIChTVEFURV9DT01QTEVURSwgU1RBVEVfRkFJTEVELCBTVEFURV9PTkdPSU5HKSA9IFwKKyAgICAgICAgKDAsIDEsIDIpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHBhcmVudCwgaWRlbnRpZmllcik6CisgICAgICAgIGdvYmplY3QuR09iamVjdC5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgc2VsZi5kYXRlID0gTm9uZQorCisgICAgICAgIHNlbGYuZmlsZXMgPSBbXQorICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmllcgorICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4gKHBhcmVudCwgaWRlbnRpZmllcikKKworICAgICAgICAjIEV4dHJhY3QgdGhlIGRhdGUsIHNpbmNlIHRoZSBkaXJlY3RvcnkgbmFtZSBpcyBvZiB0aGUKKyAgICAgICAgIyBmb3JtYXQgYnVpbGQtPHllYXI+PG1vbnRoPjxkYXk+LTxvcmRpbmFsPiB3ZSBjYW4gZWFzaWx5CisgICAgICAgICMgcHVsbCBpdCBvdXQuCisgICAgICAgICMgVE9ETzogQmV0dGVyIHRvIHN0YXQgYSBmaWxlPworICAgICAgICAoXywgZGF0ZSwgcmV2aXNpb24pID0gaWRlbnRpZmllci5zcGxpdCAoIi0iKQorICAgICAgICBwcmludChkYXRlKQorCisgICAgICAgIHllYXIgPSBpbnQgKGRhdGVbMDo0XSkKKyAgICAgICAgbW9udGggPSBpbnQgKGRhdGVbNDo2XSkKKyAgICAgICAgZGF5ID0gaW50IChkYXRlWzY6OF0pCisKKyAgICAgICAgc2VsZi5kYXRlID0gZGF0ZXRpbWUuZGF0ZSAoeWVhciwgbW9udGgsIGRheSkKKworICAgICAgICBzZWxmLmNvbmYgPSBOb25lCisKKyAgICAgICAgIyBCeSBkZWZhdWx0IGJ1aWxkcyBhcmUgU1RBVEVfRkFJTEVEIHVubGVzcyB3ZSBmaW5kIGEgImNvbXBsZXRlIiBmaWxlCisgICAgICAgICMgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBTVEFURV9DT01QTEVURQorICAgICAgICBzZWxmLnN0YXRlID0gQnVpbGRSZXN1bHQuU1RBVEVfRkFJTEVECisgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIgKHNlbGYucGF0aCk6CisgICAgICAgICAgICBpZiAoZmlsZS5zdGFydHN3aXRoICgiLmNvbmYiKSk6CisgICAgICAgICAgICAgICAgY29uZmZpbGUgPSBvcy5wYXRoLmpvaW4gKHNlbGYucGF0aCwgZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmYgPSBCdWlsZENvbmZpZ3VyYXRpb24ubG9hZF9mcm9tX2ZpbGUgKGNvbmZmaWxlKQorICAgICAgICAgICAgZWxpZiAoZmlsZS5zdGFydHN3aXRoICgiY29tcGxldGUiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IEJ1aWxkUmVzdWx0LlNUQVRFX0NPTVBMRVRFCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2ZpbGUgKGZpbGUpCisKKyAgICBkZWYgYWRkX2ZpbGUgKHNlbGYsIGZpbGUpOgorICAgICAgICAjIEp1c3QgYWRkIHRoZSBmaWxlIGZvciBub3cuIERvbid0IGNhcmUgYWJvdXQgdGhlIHR5cGUuCisgICAgICAgIHNlbGYuZmlsZXMgKz0gWyhmaWxlLCBOb25lKV0KKworY2xhc3MgQnVpbGRNYW5hZ2VyTW9kZWwgKGd0ay5UcmVlU3RvcmUpOgorICAgICIiIiBNb2RlbCBmb3IgdGhlIEJ1aWxkTWFuYWdlclRyZWVWaWV3LiBUaGlzIGRlcml2ZXMgZnJvbSBndGsuVHJlZVN0b3JlCisgICAgYnV0IGl0IGFic3RyYWN0cyBuaWNlbHkgd2hhdCB0aGUgY29sdW1ucyBtZWFuIGFuZCB0aGUgc2V0dXAgb2YgdGhlIGNvbHVtbnMKKyAgICBpbiB0aGUgbW9kZWwuICIiIgorCisgICAgKENPTF9JREVOVCwgQ09MX0RFU0MsIENPTF9NQUNISU5FLCBDT0xfRElTVFJPLCBDT0xfQlVJTERfUkVTVUxULCBDT0xfREFURSwgQ09MX1NUQVRFKSA9IFwKKyAgICAgICAgKDAsIDEsIDIsIDMsIDQsIDUsIDYpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9PQkpFQ1QsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5UNjQsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5UKQorCitjbGFzcyBCdWlsZE1hbmFnZXIgKGdvYmplY3QuR09iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgbWFuYWdlcyB0aGUgaGlzdG9yaWMgYnVpbGRzIHRoYXQgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZQorICAgICJyZXN1bHRzIiBkaXJlY3RvcnkgYnV0IGlzIGFsc28gdXNlZCBmb3Igc3RhcnRpbmcgYSBuZXcgYnVpbGQuIiIiCisKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICdwb3B1bGF0aW9uLWZpbmlzaGVkJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAncG9wdWxhdGUtZXJyb3InIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKQorICAgIH0KKworICAgIGRlZiB1cGRhdGVfYnVpbGRfcmVzdWx0IChzZWxmLCByZXN1bHQsIGl0ZXIpOgorICAgICAgICAjIENvbnZlcnQgdGhlIGRhdGUgaW50byBzb21ldGhpbmcgd2UgY2FuIHNvcnQgYnkuCisgICAgICAgIGRhdGUgPSBsb25nICh0aW1lLm1rdGltZSAocmVzdWx0LmRhdGUudGltZXR1cGxlKCkpKQorCisgICAgICAgICMgQWRkIGEgdG9wIGxldmVsIGVudHJ5IGZvciB0aGUgYnVpbGQKKworICAgICAgICBzZWxmLm1vZGVsLnNldCAoaXRlciwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9JREVOVCwgcmVzdWx0LmlkZW50aWZpZXIsCisgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfREVTQywgcmVzdWx0LmNvbmYuaW1hZ2UsCisgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfTUFDSElORSwgcmVzdWx0LmNvbmYubWFjaGluZSwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ESVNUUk8sIHJlc3VsdC5jb25mLmRpc3RybywKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9CVUlMRF9SRVNVTFQsIHJlc3VsdCwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9EQVRFLCBkYXRlLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX1NUQVRFLCByZXN1bHQuc3RhdGUpCisKKyAgICAgICAgIyBBbmQgdGhlbiB3ZSB1c2UgdGhlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXMgdGhlIGNoaWxkcmVuIGZvciB0aGUKKyAgICAgICAgIyB0b3AgbGV2ZWwgaXRlci4KKyAgICAgICAgZm9yIGZpbGUgaW4gcmVzdWx0LmZpbGVzOgorICAgICAgICAgICAgc2VsZi5tb2RlbC5hcHBlbmQgKGl0ZXIsIChOb25lLCBmaWxlWzBdLCBOb25lLCBOb25lLCBOb25lLCBkYXRlLCAtMSkpCisKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGFuIGlkbGUgYnkgdGhlIEJ1aWxkTWFuYWdlclBvcHVsYXRlclRocmVhZAorICAgIGRlZiBhZGRfYnVpbGRfcmVzdWx0IChzZWxmLCByZXN1bHQpOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmtub3duX2J1aWxkcyArPSBbcmVzdWx0XQorCisgICAgICAgIHNlbGYudXBkYXRlX2J1aWxkX3Jlc3VsdCAocmVzdWx0LCBzZWxmLm1vZGVsLmFwcGVuZCAoTm9uZSkpCisKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGRlZiBub3RpZnlfYnVpbGRfZmluaXNoZWQgKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJZiB3ZSBoYXZlIGEgcnVubmluZyBidWlsZCBydW5uaW5nIHRoZW4gd2UKKyAgICAgICAgIyB3aWxsIGhhdmUgYSByb3cgaW4gdGhlIG1vZGVsIGluIFNUQVRFX09OR09JTkcuIEZpbmQgaXQgYW5kIG1ha2UgaXQKKyAgICAgICAgIyBhcyBpZiBpdCB3YXMgYSBwcm9wZXIgaGlzdG9yaWMgYnVpbGQgKHdlbGwsIGl0IGlzIGNvbXBsZXRlZCBub3cuLi4uKQorCisgICAgICAgICMgV2UgbmVlZCB0byB1c2UgdGhlIGl0ZXJzIGhlcmUgcmF0aGVyIHRoYW4gdGhlIFB5dGhvbiBpdGVyYXRvcgorICAgICAgICAjIGludGVyZmFjZSB0byB0aGUgbW9kZWwgc2luY2Ugd2UgbmVlZCB0byBwYXNzIGl0IGludG8KKyAgICAgICAgIyB1cGRhdGVfYnVpbGRfcmVzdWx0CisKKyAgICAgICAgaXRlciA9IHNlbGYubW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorCisgICAgICAgIHdoaWxlIChpdGVyKToKKyAgICAgICAgICAgIChpZGVudCwgc3RhdGUpID0gc2VsZi5tb2RlbC5nZXQoaXRlciwKKyAgICAgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfSURFTlQsCisgICAgICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX1NUQVRFKQorCisgICAgICAgICAgICBpZiBzdGF0ZSA9PSBCdWlsZFJlc3VsdC5TVEFURV9PTkdPSU5HOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJ1aWxkUmVzdWx0IChzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCBpZGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9idWlsZF9yZXN1bHQgKHJlc3VsdCwgaXRlcikKKyAgICAgICAgICAgIGl0ZXIgPSBzZWxmLm1vZGVsLml0ZXJfbmV4dChpdGVyKQorCisgICAgZGVmIG5vdGlmeV9idWlsZF9zdWNjZWVkZWQgKHNlbGYpOgorICAgICAgICAjIFdyaXRlIHRoZSAiY29tcGxldGUiIGZpbGUgc28gdGhhdCB3aGVuIHdlIGNyZWF0ZSB0aGUgQnVpbGRSZXN1bHQKKyAgICAgICAgIyBvYmplY3Qgd2UgcHV0IGludG8gdGhlIG1vZGVsCisKKyAgICAgICAgY29tcGxldGVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luIChzZWxmLmN1cl9idWlsZF9kaXJlY3RvcnksICJjb21wbGV0ZSIpCisgICAgICAgIGYgPSBmaWxlIChjb21wbGV0ZV9maWxlX3BhdGgsICJ3IikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYubm90aWZ5X2J1aWxkX2ZpbmlzaGVkKCkKKworICAgIGRlZiBub3RpZnlfYnVpbGRfZmFpbGVkIChzZWxmKToKKyAgICAgICAgIyBXaXRob3V0IGEgImNvbXBsZXRlIiBmaWxlIHRoZW4gdGhpcyB3aWxsIG1hcmsgdGhlIGJ1aWxkIGFzIGZhaWxlZDoKKyAgICAgICAgc2VsZi5ub3RpZnlfYnVpbGRfZmluaXNoZWQoKQorCisgICAgIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhbiBpZGxlCisgICAgZGVmIGVtaXRfcG9wdWxhdGlvbl9maW5pc2hlZF9zaWduYWwgKHNlbGYpOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmVtaXQgKCJwb3B1bGF0aW9uLWZpbmlzaGVkIikKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGNsYXNzIEJ1aWxkTWFuYWdlclBvcHVsYXRlclRocmVhZCAodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbWFuYWdlciwgZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18gKHNlbGYpCisgICAgICAgICAgICBzZWxmLm1hbmFnZXIgPSBtYW5hZ2VyCisgICAgICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcmVjdG9yeQorCisgICAgICAgIGRlZiBydW4gKHNlbGYpOgorICAgICAgICAgICAgIyBGb3IgZWFjaCBvZiB0aGUgImJ1aWxkLTwuLi4+IiBkaXJlY3RvcmllcyAuLgorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyAoc2VsZi5kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gb3MubGlzdGRpciAoc2VsZi5kaXJlY3RvcnkpOgorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkaXJlY3Rvcnkuc3RhcnRzd2l0aCAoImJ1aWxkLSIpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgPSBCdWlsZFJlc3VsdCAoc2VsZi5kaXJlY3RvcnksIGRpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLmFkZF9idWlsZF9yZXN1bHQgKGJ1aWxkX3Jlc3VsdCkKKworICAgICAgICAgICAgZ29iamVjdC5pZGxlX2FkZCAoQnVpbGRNYW5hZ2VyLmVtaXRfcG9wdWxhdGlvbl9maW5pc2hlZF9zaWduYWwsCisgICAgICAgICAgICAgICAgc2VsZi5tYW5hZ2VyKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBzZXJ2ZXIsIHJlc3VsdHNfZGlyZWN0b3J5KToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fIChzZWxmKQorCisgICAgICAgICMgVGhlIGJ1aWxkcyB0aGF0IHdlJ3ZlIGZvdW5kIGZyb20gd2Fsa2luZyB0aGUgcmVzdWx0IGRpcmVjdG9yeQorICAgICAgICBzZWxmLmtub3duX2J1aWxkcyA9IFtdCisKKyAgICAgICAgIyBTYXZlIG91dCB0aGUgYml0YmFrZSBzZXJ2ZXIsIHdlIG5lZWQgdGhpcyBmb3IgaXNzdWluZyBjb21tYW5kcyB0bworICAgICAgICAjIHRoZSBjb29rZXI6CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisKKyAgICAgICAgIyBUaGUgVHJlZVN0b3JlIHRoYXQgd2UgdXNlCisgICAgICAgIHNlbGYubW9kZWwgPSBCdWlsZE1hbmFnZXJNb2RlbCAoKQorCisgICAgICAgICMgVGhlIHJlc3VsdHMgZGlyZWN0b3J5IGlzIHdoZXJlIHdlIGNyZWF0ZSAoYW5kIGxvb2sgZm9yKSB0aGUKKyAgICAgICAgIyBidWlsZC08eHl6Pi08bj4gZGlyZWN0b3JpZXMuIFdlIG5lZWQgdG8gcG9wdWxhdGUgb3Vyc2VsdmVzIGZyb20KKyAgICAgICAgIyBkaXJlY3RvcnkKKyAgICAgICAgc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5CisgICAgICAgIHNlbGYucG9wdWxhdGVfZnJvbV9kaXJlY3RvcnkgKHNlbGYucmVzdWx0c19kaXJlY3RvcnkpCisKKyAgICBkZWYgcG9wdWxhdGVfZnJvbV9kaXJlY3RvcnkgKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHRocmVhZCA9IEJ1aWxkTWFuYWdlci5CdWlsZE1hbmFnZXJQb3B1bGF0ZXJUaHJlYWQgKHNlbGYsIGRpcmVjdG9yeSkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKworICAgICMgQ29tZSB1cCB3aXRoIHRoZSBuYW1lIGZvciB0aGUgbmV4dCBidWlsZCBpZGVudCBieSBjb21iaW5pbmcgImJ1aWxkLSIKKyAgICAjIHdpdGggdGhlIGRhdGUgZm9ybWF0dGVkIGFzIHl5eXltbWRkIGFuZCB0aGVuIGFuIG9yZGluYWwuIFdlIGRvIHRoaXMgYnkKKyAgICAjIGFuIG9wdGltaXN0aWMgYWxnb3JpdGhtIGluY3JlbWVudGluZyB0aGUgb3JkaW5hbCBpZiB3ZSBmaW5kIHRoYXQgaXQKKyAgICAjIGFscmVhZHkgZXhpc3RzLgorICAgIGRlZiBnZXRfbmV4dF9idWlsZF9pZGVudCAoc2VsZik6CisgICAgICAgIHRvZGF5ID0gZGF0ZXRpbWUuZGF0ZS50b2RheSAoKQorICAgICAgICBkYXRlc3RyID0gc3RyICh0b2RheS55ZWFyKSArIHN0ciAodG9kYXkubW9udGgpICsgc3RyICh0b2RheS5kYXkpCisKKyAgICAgICAgcmV2aXNpb24gPSAwCisgICAgICAgIHRlc3RfbmFtZSA9ICJidWlsZC0lcy0lZCIgJSAoZGF0ZXN0ciwgcmV2aXNpb24pCisgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGguam9pbiAoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9uYW1lKQorCisgICAgICAgIHdoaWxlIChvcy5wYXRoLmV4aXN0cyAodGVzdF9wYXRoKSk6CisgICAgICAgICAgICByZXZpc2lvbiArPSAxCisgICAgICAgICAgICB0ZXN0X25hbWUgPSAiYnVpbGQtJXMtJWQiICUgKGRhdGVzdHIsIHJldmlzaW9uKQorICAgICAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5qb2luIChzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCisKKyAgICAgICAgcmV0dXJuIHRlc3RfbmFtZQorCisgICAgIyBUYWtlIGEgQnVpbGRDb25maWd1cmF0aW9uIGFuZCB0aGVuIHRyeSBhbmQgYnVpbGQgaXQgYmFzZWQgb24gdGhlCisgICAgIyBwYXJhbWV0ZXJzIG9mIHRoYXQgY29uZmlndXJhdGlvbi4gUworICAgIGRlZiBkb19idWlsZCAoc2VsZiwgY29uZik6CisgICAgICAgIHNlcnZlciA9IHNlbGYuc2VydmVyCisKKyAgICAgICAgIyBXb3JrIG91dCB0aGUgYnVpbGQgZGlyZWN0b3J5LiBOb3RlIHdlIGFjdHVhbGx5IGNyZWF0ZSB0aGUKKyAgICAgICAgIyBkaXJlY3RvcmllcyBoZXJlIHNpbmNlIHdlIG5lZWQgdG8gd3JpdGUgdGhlICIuY29uZiIgZmlsZS4gT3RoZXJ3aXNlCisgICAgICAgICMgd2UgY291bGQgaGF2ZSByZWxpZWQgb24gYml0YmFrZSdzIGJ1aWxkZXIgdGhyZWFkIHRvIGFjdHVhbGx5IG1ha2UKKyAgICAgICAgIyB0aGUgZGlyZWN0b3JpZXMgYXMgaXQgcHJvY2VlZHMgd2l0aCB0aGUgYnVpbGQuCisgICAgICAgIGlkZW50ID0gc2VsZi5nZXRfbmV4dF9idWlsZF9pZGVudCAoKQorICAgICAgICBidWlsZF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4gKHNlbGYucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICBpZGVudCkKKyAgICAgICAgc2VsZi5jdXJfYnVpbGRfZGlyZWN0b3J5ID0gYnVpbGRfZGlyZWN0b3J5CisgICAgICAgIG9zLm1ha2VkaXJzIChidWlsZF9kaXJlY3RvcnkpCisKKyAgICAgICAgY29uZmZpbGUgPSBvcy5wYXRoLmpvaW4gKGJ1aWxkX2RpcmVjdG9yeSwgIi5jb25mIikKKyAgICAgICAgY29uZi53cml0ZV90b19maWxlIChjb25mZmlsZSkKKworICAgICAgICAjIEFkZCBhIHJvdyB0byB0aGUgbW9kZWwgcmVwcmVzZW50aW5nIHRoaXMgb25nb2luZyBidWlsZC4gSXQncyBraW5kYSBhCisgICAgICAgICMgZmFrZSBlbnRyeS4gSWYgdGhpcyBidWlsZCBjb21wbGV0ZXMgb3IgZmFpbHMgdGhlbiB0aGlzIGdldHMgdXBkYXRlZAorICAgICAgICAjIHdpdGggdGhlIHJlYWwgc3R1ZmYgbGlrZSB0aGUgaGlzdG9yaWMgYnVpbGRzCisgICAgICAgIGRhdGUgPSBsb25nICh0aW1lLnRpbWUoKSkKKyAgICAgICAgc2VsZi5tb2RlbC5hcHBlbmQgKE5vbmUsIChpZGVudCwgY29uZi5pbWFnZSwgY29uZi5tYWNoaW5lLCBjb25mLmRpc3RybywKKyAgICAgICAgICAgIE5vbmUsIGRhdGUsIEJ1aWxkUmVzdWx0LlNUQVRFX09OR09JTkcpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkJVSUxEX0lNQUdFU19GUk9NX0ZFRURTIiwgMV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIk1BQ0hJTkUiLCBjb25mLm1hY2hpbmVdKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJpYWJsZSIsICJESVNUUk8iLCBjb25mLmRpc3Ryb10pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIlBBQ0tBR0VfQ0xBU1NFUyIsICJwYWNrYWdlX2lwayJdKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJpYWJsZSIsICJCQkZJTEVTIiwgXAorICAgICAgICAgICAgICAiIiIke09FUk9PVH0vbWV0YS9wYWNrYWdlcy8qLyouYmIgJHtPRVJPT1R9L21ldGEtbW9ibGluL3BhY2thZ2VzLyovKi5iYiIiIl0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIlRNUERJUiIsICIke09FUk9PVH0vYnVpbGQvdG1wIl0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIklQS19GRUVEX1VSSVMiLCBcCisgICAgICAgICAgICAgICAgIiAiLmpvaW4oY29uZi5nZXRfcmVwb3MoKSldKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJpYWJsZSIsICJERVBMT1lfRElSX0lNQUdFIiwKKyAgICAgICAgICAgICAgICBidWlsZF9kaXJlY3RvcnldKQorICAgICAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJidWlsZFRhcmdldHMiLCBbY29uZi5pbWFnZV0sICJyb290ZnMiXSkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludChlKQorCitjbGFzcyBCdWlsZE1hbmFnZXJUcmVlVmlldyAoZ3RrLlRyZWVWaWV3KToKKyAgICAiIiIgVGhlIHRyZWUgdmlldyBmb3IgdGhlIGJ1aWxkIG1hbmFnZXIuIFRoaXMgc2hvd3MgdGhlIGhpc3RvcmljIGJ1aWxkcworICAgIGFuZCBzbyBmb3J0aC4gIiIiCisKKyAgICAjIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbnRyb2wgd2hhdCBnb2VzIGluIHRoZSBjZWxsIHNpbmNlIHdlIHN0b3JlCisgICAgIyB0aGUgZGF0ZSBpbiB0aGUgbW9kZWwgYXMgc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKGZvciBzb3J0aW5nKSBhbmQgc28gd2UKKyAgICAjIG5lZWQgdG8gbWFrZSBpdCBodW1hbiByZWFkYWJsZS4KKyAgICBkZWYgZGF0ZV9mb3JtYXRfY3VzdG9tX2NlbGxfZGF0YV9mdW5jIChzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgZGF0ZSA9IG1vZGVsLmdldCAoaXRlciwgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RBVEUpWzBdCisgICAgICAgIGRhdGVzdHIgPSB0aW1lLnN0cmZ0aW1lKCIlQSAlZCAlQiAlWSIsIHRpbWUubG9jYWx0aW1lKGRhdGUpKQorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCBkYXRlc3RyKQorCisgICAgIyBUaGlzIGZvcm1hdCBmdW5jdGlvbiBjb250cm9scyB3aGF0IGdvZXMgaW4gdGhlIGNlbGwuIFdlIHVzZSB0aGlzIHRvIG1hcAorICAgICMgdGhlIGludGVnZXIgc3RhdGUgdG8gYSBzdHJpbmcgYW5kIGFsc28gdG8gY29sb3VyaXNlIHRoZSB0ZXh0CisgICAgZGVmIHN0YXRlX2Zvcm1hdF9jdXN0b21fY2VsbF9kYXRhX2Z1biAoc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIHN0YXRlID0gbW9kZWwuZ2V0IChpdGVyLCBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUpWzBdCisKKyAgICAgICAgaWYgKHN0YXRlID09IEJ1aWxkUmVzdWx0LlNUQVRFX09OR09JTkcpOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJ0ZXh0IiwgIkFjdGl2ZSIpCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoImZvcmVncm91bmQiLCAiIzAwMDAwMCIpCisgICAgICAgIGVsaWYgKHN0YXRlID09IEJ1aWxkUmVzdWx0LlNUQVRFX0ZBSUxFRCk6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCAiRmFpbGVkIikKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgiZm9yZWdyb3VuZCIsICIjZmYwMDAwIikKKyAgICAgICAgZWxpZiAoc3RhdGUgPT0gQnVpbGRSZXN1bHQuU1RBVEVfQ09NUExFVEUpOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJ0ZXh0IiwgIkNvbXBsZXRlIikKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgiZm9yZWdyb3VuZCIsICIjMDBmZjAwIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgidGV4dCIsICIiKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgIyBNaXNjIGRlc2NyaXB0aW9ueSB0aGluZworICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoTm9uZSwgcmVuZGVyZXIsCisgICAgICAgICAgICB0ZXh0PUJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ERVNDKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbCkKKworICAgICAgICAjIE1hY2hpbmUKKyAgICAgICAgcmVuZGVyZXIgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCAoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJNYWNoaW5lIiwgcmVuZGVyZXIsCisgICAgICAgICAgICB0ZXh0PUJ1aWxkTWFuYWdlck1vZGVsLkNPTF9NQUNISU5FKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbCkKKworICAgICAgICAjIGRpc3RybworICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIkRpc3RyaWJ1dGlvbiIsIHJlbmRlcmVyLAorICAgICAgICAgICAgdGV4dD1CdWlsZE1hbmFnZXJNb2RlbC5DT0xfRElTVFJPKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbCkKKworICAgICAgICAjIGRhdGUgKHVzaW5nIGEgY3VzdG9tIGZ1bmN0aW9uIGZvciBmb3JtYXR0aW5nIHRoZSBjZWxsIGNvbnRlbnRzIGl0CisgICAgICAgICMgdGFrZXMgZXBvY2ggLT4gaHVtYW4gcmVhZGFibGUgc3RyaW5nKQorICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIkRhdGUiLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQ9QnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RBVEUpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jIChyZW5kZXJlciwKKyAgICAgICAgICAgIHNlbGYuZGF0ZV9mb3JtYXRfY3VzdG9tX2NlbGxfZGF0YV9mdW5jKQorCisgICAgICAgICMgRm9yIHN0YXR1cy4KKyAgICAgICAgcmVuZGVyZXIgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCAoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJTdGF0dXMiLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQgPSBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jIChyZW5kZXJlciwKKyAgICAgICAgICAgIHNlbGYuc3RhdGVfZm9ybWF0X2N1c3RvbV9jZWxsX2RhdGFfZnVuKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9hZHZhbmNlZHNldHRpbmdzZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2FkdmFuY2Vkc2V0dGluZ3NkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiMzU1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9hZHZhbmNlZHNldHRpbmdzZGlhbG9nLnB5CkBAIC0wLDAgKzEsMzQxIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgaGFzaGxpYgorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JJbmZvQnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLnNldHRpbmdzdWloZWxwZXIgaW1wb3J0IFNldHRpbmdzVUlIZWxwZXIKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5wcm94eWRldGFpbHNkaWFsb2cgaW1wb3J0IFByb3h5RGV0YWlsc0RpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgQWR2YW5jZWRTZXR0aW5nc0RpYWxvZyAoQ3J1bWJzRGlhbG9nLCBTZXR0aW5nc1VJSGVscGVyKToKKyAgICAKKyAgICBkZWYgZGV0YWlsc19jYihzZWxmLCBidXR0b24sIHBhcmVudCwgcHJvdG9jb2wpOgorICAgICAgICBkaWFsb2cgPSBQcm94eURldGFpbHNEaWFsb2codGl0bGUgPSBwcm90b2NvbC51cHBlcigpICsgIiBQcm94eSBEZXRhaWxzIiwKKyAgICAgICAgICAgIHVzZXIgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMV0sCisgICAgICAgICAgICBwYXNzd2QgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0sCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgZGlhbG9nLmFkZF9idXR0b24oZ3RrLlNUT0NLX0NMT1NFLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSA9IGRpYWxvZy51c2VyCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0gPSBkaWFsb2cucGFzc3dkCisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBzZXRfc2F2ZV9idXR0b24oc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbiA9IGJ1dHRvbgorCisgICAgZGVmIHJvb3Rmc19jb21ib19jaGFuZ2VkX2NiKHNlbGYsIHJvb3Rmc19jb21ibywgYWxsX3BhY2thZ2VfZm9ybWF0LCBjaGVja19oYm94KToKKyAgICAgICAgY29tYm9faXRlbSA9IHNlbGYucm9vdGZzX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIG1vZGlmaWVkID0gRmFsc2UKKyAgICAgICAgZm9yIGNoaWxkIGluIGNoZWNrX2hib3guZ2V0X2NoaWxkcmVuKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBndGsuQ2hlY2tCdXR0b24pOgorICAgICAgICAgICAgICAgIGNoZWNrX2hib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gVHJ1ZQorICAgICAgICBmb3IgZm9ybWF0IGluIGFsbF9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIGlmIGZvcm1hdCAhPSBjb21ib19pdGVtOgorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbiA9IGd0ay5DaGVja0J1dHRvbihmb3JtYXQpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgICAgIG1vZGlmaWVkID0gVHJ1ZQorICAgICAgICBpZiBtb2RpZmllZDoKKyAgICAgICAgICAgIGNoZWNrX2hib3gucmVtb3ZlKHNlbGYucGtnZm10X2luZm8pCisgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoc2VsZi5wa2dmbXRfaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBjaGVja19oYm94LnNob3dfYWxsKCkKKworICAgIGRlZiBnZW5fcGtnZm10X3dpZGdldChzZWxmLCBjdXJyX3BhY2thZ2VfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm89IiIsIHRvb2x0aXBfZXh0cmE9IiIpOgorICAgICAgICBwa2dmbXRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJSb290IGZpbGUgc3lzdGVtIHBhY2thZ2UgZm9ybWF0IikKKyAgICAgICAgcGtnZm10X3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJvb3Rmc19mb3JtYXQgPSAiIgorICAgICAgICBpZiBjdXJyX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgcm9vdGZzX2Zvcm1hdCA9IGN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKVswXQorCisgICAgICAgIHJvb3Rmc19mb3JtYXRfd2lkZ2V0LCByb290ZnNfY29tYm8gPSBzZWxmLmdlbl9jb21ib193aWRnZXQocm9vdGZzX2Zvcm1hdCwgYWxsX3BhY2thZ2VfZm9ybWF0LCB0b29sdGlwX2NvbWJvKQorICAgICAgICBwa2dmbXRfdmJveC5wYWNrX3N0YXJ0KHJvb3Rmc19mb3JtYXRfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkFkZGl0aW9uYWwgcGFja2FnZSBmb3JtYXRzIikKKyAgICAgICAgcGtnZm10X3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGNoZWNrX2hib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIHBrZ2ZtdF92Ym94LnBhY2tfc3RhcnQoY2hlY2tfaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBmb3IgZm9ybWF0IGluIGFsbF9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIGlmIGZvcm1hdCAhPSByb290ZnNfZm9ybWF0OgorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbiA9IGd0ay5DaGVja0J1dHRvbihmb3JtYXQpCisgICAgICAgICAgICAgICAgaXNfYWN0aXZlID0gKGZvcm1hdCBpbiBjdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KCkpCisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uLnNldF9hY3RpdmUoaXNfYWN0aXZlKQorICAgICAgICAgICAgICAgIGNoZWNrX2hib3gucGFja19zdGFydChjaGVja19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnBrZ2ZtdF9pbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwX2V4dHJhLCBzZWxmKQorICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoc2VsZi5wa2dmbXRfaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJvb3Rmc19jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5yb290ZnNfY29tYm9fY2hhbmdlZF9jYiwgYWxsX3BhY2thZ2VfZm9ybWF0LCBjaGVja19oYm94KQorCisgICAgICAgIHBrZ2ZtdF92Ym94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gcGtnZm10X3Zib3gsIHJvb3Rmc19jb21ibywgY2hlY2tfaGJveAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlLCBjb25maWd1cmF0aW9uLCBhbGxfaW1hZ2VfdHlwZXMsCisgICAgICAgICAgICBhbGxfcGFja2FnZV9mb3JtYXRzLCBhbGxfZGlzdHJvcywgYWxsX3Nka19tYWNoaW5lcywKKyAgICAgICAgICAgIG1heF90aHJlYWRzLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihBZHZhbmNlZFNldHRpbmdzRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZnJvbSBvdGhlciBvYmplY3RzCisgICAgICAgICMgYml0YmFrZSBzZXR0aW5ncyBmcm9tIEJ1aWxkZXIuQ29uZmlndXJhdGlvbgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXMgPSBhbGxfaW1hZ2VfdHlwZXMKKyAgICAgICAgc2VsZi5hbGxfcGFja2FnZV9mb3JtYXRzID0gYWxsX3BhY2thZ2VfZm9ybWF0cworICAgICAgICBzZWxmLmFsbF9kaXN0cm9zID0gYWxsX2Rpc3Ryb3NbOl0KKyAgICAgICAgc2VsZi5hbGxfc2RrX21hY2hpbmVzID0gYWxsX3Nka19tYWNoaW5lcworICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gbWF4X3RocmVhZHMKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZm9yIGludGVybmFsIHVzZQorICAgICAgICBzZWxmLmRpc3Ryb19jb21ibyA9IE5vbmUKKyAgICAgICAgc2VsZi5kbGRpcl90ZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnNzdGF0ZWRpcl90ZXh0ID0gTm9uZQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcl90ZXh0ID0gTm9uZQorICAgICAgICBzZWxmLmJiX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYucG1ha2Vfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5yb290ZnNfc2l6ZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLmV4dHJhX3NpemVfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3ggPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zID0ge30KKworICAgICAgICBzZWxmLm1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzIG9uIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCisKKyAgICBkZWYgX2dldF9zb3J0ZWRfdmFsdWUoc2VsZiwgdmFyKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKHNvcnRlZChzdHIodmFyKS5zcGxpdCgpKSkgKyAiXG4iCisKKyAgICBkZWYgY29uZmlnX21kNShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiCisgICAgICAgIGRhdGEgKz0gKCJQQUNLQUdFX0NMQVNTRVM6ICIgICAgICArIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3BhY2thZ2VfZm9ybWF0ICsgJ1xuJykKKyAgICAgICAgZGF0YSArPSAoIkRJU1RSTzogIiAgICAgICAgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8pKQorICAgICAgICBkYXRhICs9ICgiSU1BR0VfUk9PVEZTX1NJWkU6ICIgICAgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSkpCisgICAgICAgIGRhdGEgKz0gKCJJTUFHRV9FWFRSQV9TSVpFOiAiICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUpKQorICAgICAgICBkYXRhICs9ICgiSU5DT01QQVRJQkxFX0xJQ0VOU0U6ICIgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlKSkKKyAgICAgICAgZGF0YSArPSAoIlNES19NQUNISU5FOiAiICAgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9zZGtfbWFjaGluZSkpCisgICAgICAgIGRhdGEgKz0gKCJUT09MQ0hBSU5fQlVJTEQ6ICIgICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLnRvb2xjaGFpbl9idWlsZCkpCisgICAgICAgIGRhdGEgKz0gKCJJTUFHRV9GU1RZUEVTOiAiICAgICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMpKQorICAgICAgICByZXR1cm4gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLm5iID0gZ3RrLk5vdGVib29rKCkKKyAgICAgICAgc2VsZi5uYi5zZXRfc2hvd190YWJzKFRydWUpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfaW1hZ2VfdHlwZXNfcGFnZSgpLCBndGsuTGFiZWwoIkltYWdlIHR5cGVzIikpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfb3V0cHV0X3BhZ2UoKSwgZ3RrLkxhYmVsKCJPdXRwdXQiKSkKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKDApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubmIsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYudmJveC5wYWNrX2VuZChndGsuSFNlcGFyYXRvcigpLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGdldF9udW1fY2hlY2tlZF9pbWFnZV90eXBlcyhzZWxmKToKKyAgICAgICAgdG90YWwgPSAwCisgICAgICAgIGZvciBiIGluIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgYi5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICAgIHRvdGFsID0gdG90YWwgKyAxCisgICAgICAgIHJldHVybiB0b3RhbAorCisgICAgZGVmIHNldF9zYXZlX2J1dHRvbl9zdGF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zYXZlX2J1dHRvbjoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShzZWxmLmdldF9udW1fY2hlY2tlZF9pbWFnZV90eXBlcygpID4gMCkKKworICAgIGRlZiBpbWFnZV90eXBlX2NoZWNrYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5zZXRfc2F2ZV9idXR0b25fc3RhdGUoKQorICAgICAgICBpZiBzZWxmLmdldF9udW1fY2hlY2tlZF9pbWFnZV90eXBlcygpID09IDA6CisgICAgICAgICAgICAjIFNob3cgYW4gZXJyb3IgZGlhbG9nCisgICAgICAgICAgICBsYmwgPSAiPGI+U2VsZWN0IGFuIGltYWdlIHR5cGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBuZWVkIHRvIHNlbGVjdCBhdCBsZWFzdCBvbmUgaW1hZ2UgdHlwZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfV0FSTklORywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9LIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGNyZWF0ZV9pbWFnZV90eXBlc19wYWdlKHNlbGYpOgorICAgICAgICBtYWluX3Zib3ggPSBndGsuVkJveChGYWxzZSwgMTYpCisgICAgICAgIG1haW5fdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBkaXN0cm9fdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KSAgICAgICAgCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJEaXN0cm86IikKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3RzIHRoZSBZb2N0byBQcm9qZWN0IGRpc3RyaWJ1dGlvbiB5b3Ugd2FudCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaSA9IHNlbGYuYWxsX2Rpc3Ryb3MuaW5kZXgoICJkZWZhdWx0c2V0dXAiICkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBpID0gLTEKKyAgICAgICAgaWYgaSAhPSAtMToKKyAgICAgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3NbIGkgXSA9ICJEZWZhdWx0IgorICAgICAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfZGlzdHJvID09ICJkZWZhdWx0c2V0dXAiOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3RybyA9ICJEZWZhdWx0IgorICAgICAgICBkaXN0cm9fd2lkZ2V0LCBzZWxmLmRpc3Ryb19jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8sIHNlbGYuYWxsX2Rpc3Ryb3MsIjxiPkRpc3RybzwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgZGlzdHJvX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBkaXN0cm9fdmJveC5wYWNrX3N0YXJ0KGRpc3Ryb193aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbWFpbl92Ym94LnBhY2tfc3RhcnQoZGlzdHJvX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworCisgICAgICAgIHJvd3MgPSAobGVuKHNlbGYuaW1hZ2VfdHlwZXMpKzEpLzMKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUocm93cyArIDEsIDEwLCBUcnVlKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICB0b29sdGlwID0gIkltYWdlIGZpbGUgc3lzdGVtIHR5cGVzIHlvdSB3YW50LiIKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24oIjxiPkltYWdlIHR5cGVzPC9iPiIgKyAiKiIgKyB0b29sdGlwLCBzZWxmKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiSW1hZ2UgdHlwZXM6IikKKyAgICAgICAgYWxpZ24gPSBndGsuQWxpZ25tZW50KDAsIDAuNSwgMCwgMCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGFsaWduLCAwLCA0LCAwLCAxKQorICAgICAgICBhbGlnbi5hZGQobGFiZWwpCisgICAgICAgIHRhYmxlLmF0dGFjaChpbmZvLCA0LCA1LCAwLCAxKQorCisgICAgICAgIGkgPSAxCisgICAgICAgIGogPSAxCisgICAgICAgIGZvciBpbWFnZV90eXBlIGluIHNvcnRlZChzZWxmLmltYWdlX3R5cGVzKToKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdID0gZ3RrLkNoZWNrQnV0dG9uKGltYWdlX3R5cGUpCisgICAgICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9uc1tpbWFnZV90eXBlXS5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi5pbWFnZV90eXBlX2NoZWNrYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBhcnRpY2xlID0gIiIKKyAgICAgICAgICAgIGlmIGltYWdlX3R5cGUuc3RhcnRzd2l0aCgoImEiLCAiZSIsICJpIiwgIm8iLCAidSIpKToKKyAgICAgICAgICAgICAgICBhcnRpY2xlID0gIm4iCisgICAgICAgICAgICBpZiBpbWFnZV90eXBlID09ICJsaXZlIjoKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9uc1tpbWFnZV90eXBlXS5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCBpc28gYW5kIGhkZGltZyBpbWFnZXMiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9uc1tpbWFnZV90eXBlXS5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCBhJXMgJXMgaW1hZ2UiICUgKGFydGljbGUsIGltYWdlX3R5cGUpKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLCBqIC0gMSwgaiArIDMsIGksIGkgKyAxKQorICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZSBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLnNldF9hY3RpdmUoVHJ1ZSkKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgaWYgaSA+IHJvd3M6CisgICAgICAgICAgICAgICAgaSA9IDEKKyAgICAgICAgICAgICAgICBqID0gaiArIDQKKworICAgICAgICBtYWluX3Zib3gucGFja19zdGFydChhZHZhbmNlZF92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuc2V0X3NhdmVfYnV0dG9uX3N0YXRlKCkKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtYWluX3Zib3gKKworICAgIGRlZiBjcmVhdGVfb3V0cHV0X3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgnPHNwYW4gd2VpZ2h0PSJib2xkIj5QYWNrYWdlIGZvcm1hdDwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgdG9vbHRpcF9jb21ibyA9ICJTZWxlY3RzIHRoZSBwYWNrYWdlIGZvcm1hdCB1c2VkIHRvIGdlbmVyYXRlIHJvb3Rmcy4iCisgICAgICAgIHRvb2x0aXBfZXh0cmEgPSAiU2VsZWN0cyBleHRyYSBwYWNrYWdlIGZvcm1hdHMgdG8gYnVpbGQiCisgICAgICAgIHBrZ2ZtdF93aWRnZXQsIHNlbGYucm9vdGZzX2NvbWJvLCBzZWxmLmNoZWNrX2hib3ggPSBzZWxmLmdlbl9wa2dmbXRfd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3BhY2thZ2VfZm9ybWF0LCBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMsIjxiPlJvb3QgZmlsZSBzeXN0ZW0gcGFja2FnZSBmb3JtYXQ8L2I+IiArICIqIiArIHRvb2x0aXBfY29tYm8sIjxiPkFkZGl0aW9uYWwgcGFja2FnZSBmb3JtYXRzPC9iPiIgKyAiKiIgKyB0b29sdGlwX2V4dHJhKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHBrZ2ZtdF93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPkltYWdlIHNpemU8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJJbWFnZSBiYXNpYyBzaXplIChpbiBNQikiKQorICAgICAgICB0b29sdGlwID0gIkRlZmluZXMgdGhlIHNpemUgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgdGhlIGZpbmFsIHNpemUgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgdGFrZXMgaW50byBhY2NvdW50IHRoZSBpbml0aWFsIGRpc2sgc3BhY2UgdXNlZCBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZSwgdGhlIEltYWdlIGJhc2ljIHNpemUgdmFsdWUsIGFuZCB0aGUgQWRkaXRpb25hbCBmcmVlIHNwYWNlIHZhbHVlLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgdGhlIDxhIGhyZWY9XCJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC9wb2t5LXJlZi1tYW51YWwuaHRtbCN2YXItSU1BR0VfUk9PVEZTX1NJWkVcIj5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L2E+LiIKKyAgICAgICAgcm9vdGZzX3NpemVfd2lkZ2V0LCBzZWxmLnJvb3Rmc19zaXplX3NwaW5uZXIgPSBzZWxmLmdlbl9zcGlubmVyX3dpZGdldChpbnQoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplKjEuMC8xMDI0KSwgMCwgNjU1MzYsIjxiPkltYWdlIGJhc2ljIHNpemU8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChyb290ZnNfc2l6ZV93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkFkZGl0aW9uYWwgZnJlZSBzcGFjZSAoaW4gTUIpIikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXRzIGV4dHJhIGZyZWUgZGlzayBzcGFjZSB0byBiZSBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIGltYWdlLiBVc2UgdGhpcyB2YXJpYWJsZSB3aGVuIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgc3BlY2lmaWMgYW1vdW50IG9mIGZyZWUgZGlzayBzcGFjZSBpcyBhdmFpbGFibGUgb24gYSBkZXZpY2UgYWZ0ZXIgYW4gaW1hZ2UgaXMgaW5zdGFsbGVkIGFuZCBydW5uaW5nLiIKKyAgICAgICAgZXh0cmFfc2l6ZV93aWRnZXQsIHNlbGYuZXh0cmFfc2l6ZV9zcGlubmVyID0gc2VsZi5nZW5fc3Bpbm5lcl93aWRnZXQoaW50KHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9leHRyYV9zaXplKjEuMC8xMDI0KSwgMCwgNjU1MzYsIjxiPkFkZGl0aW9uYWwgZnJlZSBzcGFjZTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGV4dHJhX3NpemVfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgnPHNwYW4gd2VpZ2h0PSJib2xkIj5MaWNlbnNpbmc8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveCA9IGd0ay5DaGVja0J1dHRvbigiRXhjbHVkZSBHUEx2MyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gcHJldmVudCBHUEx2MyBwYWNrYWdlcyBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UiKQorICAgICAgICBpZiAiR1BMdjMiIGluIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94LnNldF9hY3RpdmUoVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3guc2V0X2FjdGl2ZShGYWxzZSkKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ3BsdjNfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPlNESzwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX2hib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3ggPSBndGsuQ2hlY2tCdXR0b24oIlBvcHVsYXRlIFNESyIpCisgICAgICAgIHRvb2x0aXAgPSAiQ2hlY2sgdGhpcyBib3ggdG8gZ2VuZXJhdGUgYW4gU0RLIHRhcmJhbGwgdGhhdCBjb25zaXN0cyBvZiB0aGUgY3Jvc3MtdG9vbGNoYWluIGFuZCBhIHN5c3Jvb3QgdGhhdCBjb250YWlucyBkZXZlbG9wbWVudCBwYWNrYWdlcyBmb3IgeW91ciBpbWFnZS4iCisgICAgICAgIHNlbGYuc2RrX2NoZWNrYm94LnNldF90b29sdGlwX3RleHQodG9vbHRpcCkKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24udG9vbGNoYWluX2J1aWxkKQorICAgICAgICBzdWJfaGJveC5wYWNrX3N0YXJ0KHNlbGYuc2RrX2NoZWNrYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgdGhlIGhvc3QgcGxhdGZvcm0gZm9yIHdoaWNoIHlvdSB3YW50IHRvIHJ1biB0aGUgdG9vbGNoYWluIGNvbnRhaW5lZCBpbiB0aGUgU0RLIHRhcmJhbGwuIgorICAgICAgICBzZGtfbWFjaGluZV93aWRnZXQsIHNlbGYuc2RrX21hY2hpbmVfY29tYm8gPSBzZWxmLmdlbl9jb21ib193aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfc2RrX21hY2hpbmUsIHNlbGYuYWxsX3Nka19tYWNoaW5lcywiPGI+UG9wdWxhdGUgU0RLPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfaGJveC5wYWNrX3N0YXJ0KHNka19tYWNoaW5lX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgcmVzcG9uc2VfY2Ioc2VsZiwgZGlhbG9nLCByZXNwb25zZV9pZCk6CisgICAgICAgIHBhY2thZ2VfZm9ybWF0ID0gW10KKyAgICAgICAgcGFja2FnZV9mb3JtYXQuYXBwZW5kKHNlbGYucm9vdGZzX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpKQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGVja19oYm94OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgZ3RrLkNoZWNrQnV0dG9uKSBhbmQgY2hpbGQuZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgIHBhY2thZ2VfZm9ybWF0LmFwcGVuZChjaGlsZC5nZXRfbGFiZWwoKSkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQgPSAiICIuam9pbihwYWNrYWdlX2Zvcm1hdCkKKworICAgICAgICBkaXN0cm8gPSBzZWxmLmRpc3Ryb19jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBkaXN0cm8gPT0gIkRlZmF1bHQiOgorICAgICAgICAgICAgZGlzdHJvID0gImRlZmF1bHRzZXR1cCIKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfZGlzdHJvID0gZGlzdHJvCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSA9IHNlbGYucm9vdGZzX3NpemVfc3Bpbm5lci5nZXRfdmFsdWVfYXNfaW50KCkgKiAxMDI0CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9leHRyYV9zaXplID0gc2VsZi5leHRyYV9zaXplX3NwaW5uZXIuZ2V0X3ZhbHVlX2FzX2ludCgpICogMTAyNAorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9mc3R5cGVzID0gIiIKKyAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLmdldF9hY3RpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcyArPSAoIiAiICsgaW1hZ2VfdHlwZSkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMuc3RyaXAoKQorCisgICAgICAgIGlmIHNlbGYuZ3BsdjNfY2hlY2tib3guZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgaWYgIkdQTHYzIiBub3QgaW4gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZSArPSAiIEdQTHYzIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgIkdQTHYzIiBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlID0gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3BsaXQoKS5yZW1vdmUoIkdQTHYzIikKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZSA9ICIgIi5qb2luKHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlIG9yIFtdKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZSA9IHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlLnN0cmlwKCkKKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24udG9vbGNoYWluX2J1aWxkID0gc2VsZi5zZGtfY2hlY2tib3guZ2V0X2FjdGl2ZSgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3Nka19tYWNoaW5lID0gc2VsZi5zZGtfbWFjaGluZV9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBtZDUgPSBzZWxmLmNvbmZpZ19tZDUoKQorICAgICAgICBzZWxmLnNldHRpbmdzX2NoYW5nZWQgPSAoc2VsZi5tZDUgIT0gbWQ1KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2NydW1ic2RpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3OWY5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNkaWFsb2cucHkKQEAgLTAsMCArMSw0NCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgQ3J1bWJzRGlhbG9nKGd0ay5EaWFsb2cpOgorICAgICIiIgorICAgIEEgR05PTUUgSElHIGNvbXBsaWFudCBkaWFsb2cgd2lkZ2V0LgorICAgIEFkZCBidXR0b25zIHdpdGggZ3RrLkRpYWxvZy5hZGRfYnV0dG9uIG9yIGd0ay5EaWFsb2cuYWRkX2J1dHRvbnMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGU9IiIsIHBhcmVudD1Ob25lLCBmbGFncz0wLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihDcnVtYnNEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJoYXMtc2VwYXJhdG9yIiwgRmFsc2UpICMgbm90ZTogZGVwcmVjYXRlZCBpbiAyLjIyCisKKyAgICAgICAgc2VsZi5zZXRfYm9yZGVyX3dpZHRoKDYpCisgICAgICAgIHNlbGYudmJveC5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKKyAgICAgICAgc2VsZi5hY3Rpb25fYXJlYS5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKKyAgICAgICAgc2VsZi5hY3Rpb25fYXJlYS5zZXRfcHJvcGVydHkoImJvcmRlci13aWR0aCIsIDYpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzbWVzc2FnZWRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNtZXNzYWdlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOTk4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzbWVzc2FnZWRpYWxvZy5weQpAQCAtMCwwICsxLDcwIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ2xpYgoraW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JJY29uQ2hlY2tlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBDcnVtYnNNZXNzYWdlRGlhbG9nKGd0ay5NZXNzYWdlRGlhbG9nKToKKyAgICAiIiIKKyAgICBBIEdOT01FIEhJRyBjb21wbGlhbnQgZGlhbG9nIHdpZGdldC4KKyAgICBBZGQgYnV0dG9ucyB3aXRoIGd0ay5EaWFsb2cuYWRkX2J1dHRvbiBvciBndGsuRGlhbG9nLmFkZF9idXR0b25zCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCA9IE5vbmUsIGxhYmVsPSIiLCBkaWFsb2dfdHlwZSA9IGd0ay5NRVNTQUdFX1FVRVNUSU9OLCBtc2c9IiIpOgorICAgICAgICBzdXBlcihDcnVtYnNNZXNzYWdlRGlhbG9nLCBzZWxmKS5fX2luaXRfXyhOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkJVVFRPTlNfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkKKworICAgICAgICBzZWxmLnNldF9za2lwX3Rhc2tiYXJfaGludChGYWxzZSkKKworICAgICAgICBzZWxmLnNldF9tYXJrdXAobGFiZWwpCisKKyAgICAgICAgaWYgMCA8PSBsZW4obXNnKSA8IDMwMDoKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3NlY29uZGFyeV9tYXJrdXAobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmJveCA9IHNlbGYuZ2V0X21lc3NhZ2VfYXJlYSgpCisgICAgICAgICAgICB2Ym94LnNldF9ib3JkZXJfd2lkdGgoMSkKKyAgICAgICAgICAgIHZib3guc2V0X3Byb3BlcnR5KCJzcGFjaW5nIiwgMTIpCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3ID0gZ3RrLlRleHRWaWV3KCkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9jdXJzb3JfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwgMzAwKQorICAgICAgICAgICAgc2VsZi5idWYgPSBndGsuVGV4dEJ1ZmZlcigpCisgICAgICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChtc2cpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2J1ZmZlcihzZWxmLmJ1ZikKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5hZGQoc2VsZi5tc2dWaWV3KQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNob3coKQorICAgICAgICAgICAgdmJveC5hZGQoc2VsZi50ZXh0V2luZG93KQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNob3coKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2RlcGxveWltYWdlZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2RlcGxveWltYWdlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExM2ZmZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvZGVwbG95aW1hZ2VkaWFsb2cucHkKQEAgLTAsMCArMSwyMTkgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnbG9iCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaGxleAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitpbXBvcnQgYmIudWkuY3J1bWJzLnV0aWxzCitpbXBvcnQgYmIucHJvY2VzcworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgRGVwbG95SW1hZ2VEaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBfX2R1bW15X3VzYl9fID0gIi0tc2VsZWN0IGEgdXNiIGRyaXZlLS0iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGltYWdlX3BhdGgsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSwgc3RhbmRhbG9uZT1GYWxzZSk6CisgICAgICAgIHN1cGVyKERlcGxveUltYWdlRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKworICAgICAgICBzZWxmLmltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisgICAgICAgIHNlbGYuc3RhbmRhbG9uZSA9IHN0YW5kYWxvbmUKKworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF9zaXplX3JlcXVlc3QoNjAwLCA0MDApCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgbWFya3VwID0gIjxzcGFuIGZvbnRfZGVzYz0nMTInPlRoZSBpbWFnZSB0byBiZSB3cml0dGVuIGludG8gdXNiIGRyaXZlOjwvc3Bhbj4iCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTIpCisKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMiwgMTAsIEZhbHNlKQorICAgICAgICB0YWJsZS5zZXRfY29sX3NwYWNpbmdzKDUpCisgICAgICAgIHRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgdHYgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICB0di5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgIHR2LnNldF93cmFwX21vZGUoZ3RrLldSQVBfV09SRCkKKyAgICAgICAgdHYuc2V0X2N1cnNvcl92aXNpYmxlKEZhbHNlKQorICAgICAgICBzZWxmLmJ1ZiA9IGd0ay5UZXh0QnVmZmVyKCkKKyAgICAgICAgc2VsZi5idWYuc2V0X3RleHQoc2VsZi5pbWFnZV9wYXRoKQorICAgICAgICB0di5zZXRfYnVmZmVyKHNlbGYuYnVmKQorICAgICAgICBzY3JvbGwuYWRkKHR2KQorICAgICAgICB0YWJsZS5hdHRhY2goc2Nyb2xsLCAwLCAxMCwgMCwgMSkKKworICAgICAgICAjIFRoZXJlIGFyZSAyIHdheXMgdG8gdXNlIERlcGxveUltYWdlRGlhbG9nCisgICAgICAgICMgT25lIHdheSBpcyB0aGF0IGNhbGxlZCBieSBIT0Igd2hlbiB0aGUgJ0RlcGxveSBJbWFnZScgYnV0dG9uIGlzIGNsaWNrZWQKKyAgICAgICAgIyBUaGUgb3RoZXIgd2F5IGlzIHRoYXQgY2FsbGVkIGJ5IGEgc3RhbmRhbG9uZSBzY3JpcHQuCisgICAgICAgICMgRm9sbG93aW5nIGJsb2NrIG9mIGNvZGVzIGhhbmRsZXMgdGhlIGxhdHRlciB3YXkuIEl0IGFkZHMgYSAnU2VsZWN0IEltYWdlJyBidXR0b24gYW5kCisgICAgICAgICMgZW1pdCBhIHNpZ25hbCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC4KKyAgICAgICAgaWYgc2VsZi5zdGFuZGFsb25lOgorICAgICAgICAgICAgICAgIGdvYmplY3Quc2lnbmFsX25ldygic2VsZWN0X2ltYWdlX2NsaWNrZWQiLCBzZWxmLCBnb2JqZWN0LlNJR05BTF9SVU5fRklSU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLCAoKSkKKyAgICAgICAgICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgICAgICAgICBwaXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShoaWMuSUNPTl9JTUFHRVNfRElTUExBWV9GSUxFKQorICAgICAgICAgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKHBpeF9idWZmZXIpCisgICAgICAgICAgICAgICAgYnV0dG9uID0gZ3RrLkJ1dHRvbigiU2VsZWN0IEltYWdlIikKKyAgICAgICAgICAgICAgICBidXR0b24uc2V0X2ltYWdlKGljb24pCisgICAgICAgICAgICAgICAgI2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDE0MCwgNTApCisgICAgICAgICAgICAgICAgdGFibGUuYXR0YWNoKGJ1dHRvbiwgOSwgMTAsIDEsIDIsIGd0ay5GSUxMLCAwLCAwLCAwKQorICAgICAgICAgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zZWxlY3RfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgc2VwYXJhdG9yID0gZ3RrLkhTZXBhcmF0b3IoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZXBhcmF0b3IsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0xMCkKKworICAgICAgICBzZWxmLnVzYl9kZXNjID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+WW91IGhhdmVuJ3QgY2hvc2VuIGFueSBVU0IgZHJpdmUuPC9zcGFuPiIKKyAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfbWFya3VwKG1hcmt1cCkKKworICAgICAgICBzZWxmLnVzYl9jb21ibyA9IGd0ay5jb21ib19ib3hfbmV3X3RleHQoKQorICAgICAgICBzZWxmLnVzYl9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi51c2JfY29tYm9fY2hhbmdlZF9jYikKKyAgICAgICAgbW9kZWwgPSBzZWxmLnVzYl9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBtb2RlbC5jbGVhcigpCisgICAgICAgIHNlbGYudXNiX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuX19kdW1teV91c2JfXykKKyAgICAgICAgZm9yIHVzYiBpbiBzZWxmLmZpbmRfYWxsX3VzYl9kZXZpY2VzKCk6CisgICAgICAgICAgICBzZWxmLnVzYl9jb21iby5hcHBlbmRfdGV4dCgiL2Rldi8iICsgdXNiKQorICAgICAgICBzZWxmLnVzYl9jb21iby5zZXRfYWN0aXZlKDApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYudXNiX2NvbWJvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYudXNiX2Rlc2MsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0yKQorCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzX2JhciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlcGFyYXRvciwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUsIHBhZGRpbmc9MTApCisKKyAgICAgICAgc2VsZi52Ym94LnNob3dfYWxsKCkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuaGlkZSgpCisKKyAgICBkZWYgc2V0X2ltYWdlX3RleHRfYnVmZmVyKHNlbGYsIGltYWdlX3BhdGgpOgorICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChpbWFnZV9wYXRoKQorCisgICAgZGVmIHNldF9pbWFnZV9wYXRoKHNlbGYsIGltYWdlX3BhdGgpOgorICAgICAgICBzZWxmLmltYWdlX3BhdGggPSBpbWFnZV9wYXRoCisKKyAgICBkZWYgcG9wZW5fcmVhZChzZWxmLCBjbWQpOgorICAgICAgICB0bXBvdXQsIGVycm9ycyA9IGJiLnByb2Nlc3MucnVuKCIlcyIgJSBjbWQpCisgICAgICAgIHJldHVybiB0bXBvdXQuc3RyaXAoKQorCisgICAgZGVmIGZpbmRfYWxsX3VzYl9kZXZpY2VzKHNlbGYpOgorICAgICAgICB1c2JfZGV2cyA9IFsgb3MucmVhZGxpbmsodSkKKyAgICAgICAgICAgIGZvciB1IGluIGdsb2IuZ2xvYignL2Rldi9kaXNrL2J5LWlkL3VzYionKQorICAgICAgICAgICAgaWYgbm90IHJlLnNlYXJjaChyJ3BhcnRcZCsnLCB1KSBdCisgICAgICAgIHJldHVybiBbICclcycgJSB1W3UucmZpbmQoJy8nKSsxOl0gZm9yIHUgaW4gdXNiX2RldnMgXQorCisgICAgZGVmIGdldF91c2JfaW5mbyhzZWxmLCBkZXYpOgorICAgICAgICByZXR1cm4gIiVzICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLnBvcGVuX3JlYWQoJ2NhdCAvc3lzL2NsYXNzL2Jsb2NrLyVzL2RldmljZS92ZW5kb3InICUgZGV2KSwKKyAgICAgICAgICAgIHNlbGYucG9wZW5fcmVhZCgnY2F0IC9zeXMvY2xhc3MvYmxvY2svJXMvZGV2aWNlL21vZGVsJyAlIGRldikpCisKKyAgICBkZWYgc2VsZWN0X2ltYWdlX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICAgICBzZWxmLmVtaXQoJ3NlbGVjdF9pbWFnZV9jbGlja2VkJykKKworICAgIGRlZiB1c2JfY29tYm9fY2hhbmdlZF9jYihzZWxmLCB1c2JfY29tYm8pOgorICAgICAgICBjb21ib19pdGVtID0gc2VsZi51c2JfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgaWYgbm90IGNvbWJvX2l0ZW0gb3IgY29tYm9faXRlbSA9PSBzZWxmLl9fZHVtbXlfdXNiX186CisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+WW91IGhhdmVuJ3QgY2hvc2VuIGFueSBVU0IgZHJpdmUuPC9zcGFuPiIKKyAgICAgICAgICAgIHNlbGYudXNiX2Rlc2Muc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+IiArIHNlbGYuZ2V0X3VzYl9pbmZvKGNvbWJvX2l0ZW0ubHN0cmlwKCIvZGV2LyIpKSArICI8L3NwYW4+IgorICAgICAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfbWFya3VwKG1hcmt1cCkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGxibCA9ICcnCisgICAgICAgICAgICBtc2cgPSAnJworICAgICAgICAgICAgY29tYm9faXRlbSA9IHNlbGYudXNiX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgICAgICBpZiBjb21ib19pdGVtIGFuZCBjb21ib19pdGVtICE9IHNlbGYuX19kdW1teV91c2JfXyBhbmQgc2VsZi5pbWFnZV9wYXRoOgorICAgICAgICAgICAgICAgIGNtZGxpbmUgPSBiYi51aS5jcnVtYnMudXRpbHMud2hpY2hfdGVybWluYWwoKQorICAgICAgICAgICAgICAgIGlmIGNtZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcGZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgICAgICAgICBjbWRsaW5lICs9ICJcInN1ZG8gZGQgaWY9IiArIHNlbGYuaW1hZ2VfcGF0aCArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZj0iICsgY29tYm9faXRlbSArICIgJiYgc3luYzsgZWNobyAkPyA+ICIgKyB0bXBmaWxlLm5hbWUgKyAiXCIiCisgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzaGxleC5zcGxpdChjbWRsaW5lKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBpbnQodG1wZmlsZS5yZWFkbGluZSgpLnN0cmlwKCkpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+RGVwbG95IGltYWdlIHN1Y2Nlc3NmdWxseS48L2I+IgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPkZhaWxlZCB0byBkZXBsb3kgaW1hZ2UuPC9iPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJQbGVhc2UgY2hlY2sgaW1hZ2UgPGI+JXM8L2I+IGV4aXN0cyBhbmQgVVNCIGRldmljZSA8Yj4lczwvYj4gaXMgd3JpdGFibGUuIiAlIChzZWxmLmltYWdlX3BhdGgsIGNvbWJvX2l0ZW0pCisgICAgICAgICAgICAgICAgICAgIHRtcGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5pbWFnZV9wYXRoOgorICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9uIG1hZGUuPC9iPiIKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBzZWxlY3RlZCBhbiBpbWFnZSB0byBkZXBsb3kuIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb24gbWFkZS48L2I+IgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiWW91IGhhdmUgbm90IHNlbGVjdGVkIGEgVVNCIGRldmljZS4iCisgICAgICAgICAgICBpZiBsZW4obGJsKToKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8sIG1zZykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHVwZGF0ZV9wcm9ncmVzc19iYXIoc2VsZiwgdGl0bGUsIGZyYWN0aW9uLCBzdGF0dXM9Tm9uZSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnVwZGF0ZShmcmFjdGlvbikKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RpdGxlKHRpdGxlKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZShzdGF0dXMpCisKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBpZmlsZSwgb2ZpbGUpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNob3coKQorCisgICAgICAgIGZfZnJvbSA9IG9zLm9wZW4oaWZpbGUsIG9zLk9fUkRPTkxZKQorICAgICAgICBmX3RvID0gb3Mub3BlbihvZmlsZSwgb3MuT19XUk9OTFkpCisKKyAgICAgICAgdG90YWxfc2l6ZSA9IG9zLnN0YXQoaWZpbGUpLnN0X3NpemUKKyAgICAgICAgd3JpdHRlbl9zaXplID0gMAorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBidWYgPSBvcy5yZWFkKGZfZnJvbSwgMTAyNCoxMDI0KQorICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgb3Mud3JpdGUoZl90bywgYnVmKQorICAgICAgICAgICAgd3JpdHRlbl9zaXplICs9IDEwMjQqMTAyNAorICAgICAgICAgICAgc2VsZi51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJXcml0aW5nIHRvIHVzYjoiLCB3cml0dGVuX3NpemUgKiAxLjAvdG90YWxfc2l6ZSkKKworICAgICAgICBzZWxmLnVwZGF0ZV9wcm9ncmVzc19iYXIoIldyaXRpbmcgY29tcGxldGVkOiIsIDEuMCkKKyAgICAgICAgb3MuY2xvc2UoZl9mcm9tKQorICAgICAgICBvcy5jbG9zZShmX3RvKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5oaWRlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9pbWFnZXNlbGVjdGlvbmRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9pbWFnZXNlbGVjdGlvbmRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIxNmFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2ltYWdlc2VsZWN0aW9uZGlhbG9nLnB5CkBAIC0wLDAgKzEsMTcyIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYlZpZXdUYWJsZSwgSG9iSW5mb0J1dHRvbiwgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgSW1hZ2VTZWxlY3Rpb25EaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBfX2NvbHVtbnNfXyA9IFt7CisgICAgICAgICAgICAnY29sX25hbWUnIDogJ0ltYWdlIG5hbWUnLAorICAgICAgICAgICAgJ2NvbF9pZCcgICA6IDAsCisgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgJ2NvbF9taW4nICA6IDQwMCwKKyAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAKKyAgICAgICAgfSwgeworICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdTZWxlY3QnLAorICAgICAgICAgICAgJ2NvbF9pZCcgICA6IDEsCisgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3JhZGlvIHRvZ2dsZScsCisgICAgICAgICAgICAnY29sX21pbicgIDogMTYwLAorICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDE2MAorICAgIH1dCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9mb2xkZXIsIGltYWdlX3R5cGVzLCB0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lLCBpbWFnZV9leHRlbnNpb24gPSB7fSk6CisgICAgICAgIHN1cGVyKEltYWdlU2VsZWN0aW9uRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCisKKyAgICAgICAgc2VsZi5pbWFnZV9mb2xkZXIgPSBpbWFnZV9mb2xkZXIKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyAgPSBpbWFnZV90eXBlcworICAgICAgICBzZWxmLmltYWdlX2xpc3QgPSBbXQorICAgICAgICBzZWxmLmltYWdlX25hbWVzID0gW10KKyAgICAgICAgc2VsZi5pbWFnZV9leHRlbnNpb24gPSBpbWFnZV9leHRlbnNpb24KKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgICAgIHNlbGYuaW1hZ2Vfc3RvcmUgPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9CT09MRUFOKQorICAgICAgICBzZWxmLmZpbGxfaW1hZ2Vfc3RvcmUoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgNikKKworICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgZW50cnkgPSBndGsuRW50cnkoKQorICAgICAgICBlbnRyeS5zZXRfdGV4dChzZWxmLmltYWdlX2ZvbGRlcikKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMSwgMTAsIFRydWUpCisgICAgICAgIHRhYmxlLnNldF9zaXplX3JlcXVlc3QoNTYwLCAtMSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHRhYmxlLmF0dGFjaChlbnRyeSwgMCwgOSwgMCwgMSkKKyAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UoKQorICAgICAgICBpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfT1BFTiwgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIG9wZW5fYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIG9wZW5fYnV0dG9uLnNldF9pbWFnZShpbWFnZSkKKyAgICAgICAgb3Blbl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc2VsZWN0X3BhdGhfY2IsIHNlbGYsIGVudHJ5KQorICAgICAgICB0YWJsZS5hdHRhY2gob3Blbl9idXR0b24sIDksIDEwLCAwLCAxKQorCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUgPSBIb2JWaWV3VGFibGUoc2VsZi5fX2NvbHVtbnNfXywgIkltYWdlcyIpCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuc2V0X3NpemVfcmVxdWVzdCgtMSwgMzAwKQorICAgICAgICBzZWxmLmltYWdlX3RhYmxlLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRvZ2dsZWRfY2IpCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuY29ubmVjdF9ncm91cF9zZWxlY3Rpb24oc2VsZi50YWJsZV9zZWxlY3RlZF9jYikKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5yb3dfYWN0aXZlZF9jYikKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5pbWFnZV90YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBjaGFuZ2VfaW1hZ2VfY2Ioc2VsZiwgbW9kZWwsIHBhdGgsIGNvbHVtbmlkKToKKyAgICAgICAgaWYgbm90IG1vZGVsOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGl0ZXIgPSBtb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0ZXI6CisgICAgICAgICAgICByb3dwYXRoID0gbW9kZWwuZ2V0X3BhdGgoaXRlcikKKyAgICAgICAgICAgIG1vZGVsW3Jvd3BhdGhdW2NvbHVtbmlkXSA9IEZhbHNlCisgICAgICAgICAgICBpdGVyID0gbW9kZWwuaXRlcl9uZXh0KGl0ZXIpCisKKyAgICAgICAgbW9kZWxbcGF0aF1bY29sdW1uaWRdID0gVHJ1ZQorCisgICAgZGVmIHRvZ2dsZWRfY2Ioc2VsZiwgdGFibGUsIGNlbGwsIHBhdGgsIGNvbHVtbmlkLCB0cmVlKToKKyAgICAgICAgbW9kZWwgPSB0cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHNlbGYuY2hhbmdlX2ltYWdlX2NiKG1vZGVsLCBwYXRoLCBjb2x1bW5pZCkKKworICAgIGRlZiB0YWJsZV9zZWxlY3RlZF9jYihzZWxmLCBzZWxlY3Rpb24pOgorICAgICAgICBtb2RlbCwgcGF0aHMgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkX3Jvd3MoKQorICAgICAgICBpZiBwYXRoczoKKyAgICAgICAgICAgIHNlbGYuY2hhbmdlX2ltYWdlX2NiKG1vZGVsLCBwYXRoc1swXSwgMSkKKworICAgIGRlZiByb3dfYWN0aXZlZF9jYihzZWxmLCB0YWIsIG1vZGVsLCBwYXRoKToKKyAgICAgICAgc2VsZi5jaGFuZ2VfaW1hZ2VfY2IobW9kZWwsIHBhdGgsIDEpCisgICAgICAgIHNlbGYuZW1pdCgncmVzcG9uc2UnLCBndGsuUkVTUE9OU0VfWUVTKQorCisgICAgZGVmIHNlbGVjdF9wYXRoX2NiKHNlbGYsIGFjdGlvbiwgcGFyZW50LCBlbnRyeSk6CisgICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiIiwgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcih0ZXh0IGlmIGxlbih0ZXh0KSA+IDAgZWxzZSBvcy5nZXRjd2QoKSkKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBwYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisgICAgICAgICAgICBlbnRyeS5zZXRfdGV4dChwYXRoKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9mb2xkZXIgPSBwYXRoCisgICAgICAgICAgICBzZWxmLmZpbGxfaW1hZ2Vfc3RvcmUoKQorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBmaWxsX2ltYWdlX3N0b3JlKHNlbGYpOgorICAgICAgICBzZWxmLmltYWdlX2xpc3QgPSBbXQorICAgICAgICBzZWxmLmltYWdlX3N0b3JlLmNsZWFyKCkKKyAgICAgICAgaW1hZ2VzZXQgPSBzZXQoKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLmltYWdlX2ZvbGRlcik6CisgICAgICAgICAgICAjIGlnbm9yZSB0aGUgc3ViIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBkaXJzWzpdID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZvciBpbWFnZV90eXBlIGluIHNlbGYuaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV9leHRlbnNpb246CisgICAgICAgICAgICAgICAgICAgICAgICByZWFsX3R5cGVzID0gc2VsZi5pbWFnZV9leHRlbnNpb25baW1hZ2VfdHlwZV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfdHlwZXMgPSBbaW1hZ2VfdHlwZV0KKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYWxfaW1hZ2VfdHlwZSBpbiByZWFsX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgnLicgKyByZWFsX2ltYWdlX3R5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0LmFkZChmLnJzcGxpdCgnLicgKyByZWFsX2ltYWdlX3R5cGUpWzBdLnJzcGxpdCgnLnJvb3RmcycpWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfbGlzdC5hcHBlbmQoZikKKworICAgICAgICBmb3IgaW1hZ2UgaW4gaW1hZ2VzZXQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX3N0b3JlLnNldChzZWxmLmltYWdlX3N0b3JlLmFwcGVuZCgpLCAwLCBpbWFnZSwgMSwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5zZXRfbW9kZWwoc2VsZi5pbWFnZV9zdG9yZSkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgc2VsZi5pbWFnZV9uYW1lcyA9IFtdCisgICAgICAgIGlmIHJlc3BvbnNlX2lkID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBpdGVyID0gc2VsZi5pbWFnZV9zdG9yZS5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgICAgICB3aGlsZSBpdGVyOgorICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLmltYWdlX3N0b3JlLmdldF9wYXRoKGl0ZXIpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5pbWFnZV9zdG9yZVtwYXRoXVsxXToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5pbWFnZV9saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHNlbGYuaW1hZ2Vfc3RvcmVbcGF0aF1bMF0gKyAnLicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfbmFtZXMuYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaXRlciA9IHNlbGYuaW1hZ2Vfc3RvcmUuaXRlcl9uZXh0KGl0ZXIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvbGF5ZXJzZWxlY3Rpb25kaWFsb2cucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvbGF5ZXJzZWxlY3Rpb25kaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkNTdiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9sYXllcnNlbGVjdGlvbmRpYWxvZy5weQpAQCAtMCwwICsxLDI5OCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIENlbGxSZW5kZXJlclBpeGJ1ZkFjdGl2YXRhYmxlKGd0ay5DZWxsUmVuZGVyZXJQaXhidWYpOgorICAgICIiIgorICAgIEEgY3VzdG9tIENlbGxSZW5kZXJlciBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyBhY3RpdmF0YWJsZQorICAgIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSB1c2VyIGNsaWNrcworICAgICIiIgorICAgIF9fZ3NpZ25hbHNfXyAgICA9IHsgJ2NsaWNrZWQnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpLCB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJQaXhidWYuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoJ21vZGUnLCBndGsuQ0VMTF9SRU5ERVJFUl9NT0RFX0FDVElWQVRBQkxFKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgnZm9sbG93LXN0YXRlJywgVHJ1ZSkKKworICAgICIiIgorICAgIFJlc3BvbmQgdG8gYSB1c2VyIGNsaWNrIG9uIGEgY2VsbAorICAgICIiIgorICAgIGRlZiBkb19hY3RpdmF0ZShzZWxmLCBldmVuLCB3aWRnZXQsIHBhdGgsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBmbGFncyk6CisgICAgICAgIHNlbGYuZW1pdCgnY2xpY2tlZCcsIHBhdGgpCisKKyMKKyMgTGF5ZXJTZWxlY3Rpb25EaWFsb2cKKyMKK2NsYXNzIExheWVyU2VsZWN0aW9uRGlhbG9nIChDcnVtYnNEaWFsb2cpOgorCisgICAgVEFSR0VUUyA9IFsKKyAgICAgICAgKCJNWV9UUkVFX01PREVMX1JPVyIsIGd0ay5UQVJHRVRfU0FNRV9XSURHRVQsIDApLAorICAgICAgICAoInRleHQvcGxhaW4iLCAwLCAxKSwKKyAgICAgICAgKCJURVhUIiwgMCwgMiksCisgICAgICAgICgiU1RSSU5HIiwgMCwgMyksCisgICAgICAgIF0KKworICAgIGRlZiBnZW5fbGFiZWxfd2lkZ2V0KHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChjb250ZW50KQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgbGF5ZXJfd2lkZ2V0X3RvZ2dsZWRfY2Ioc2VsZiwgY2VsbCwgcGF0aCwgbGF5ZXJfc3RvcmUpOgorICAgICAgICBuYW1lID0gbGF5ZXJfc3RvcmVbcGF0aF1bMF0KKyAgICAgICAgdG9nZ2xlID0gbm90IGxheWVyX3N0b3JlW3BhdGhdWzFdCisgICAgICAgIGxheWVyX3N0b3JlW3BhdGhdWzFdID0gdG9nZ2xlCisKKyAgICBkZWYgbGF5ZXJfd2lkZ2V0X2FkZF9jbGlja2VkX2NiKHNlbGYsIGFjdGlvbiwgbGF5ZXJfc3RvcmUsIHBhcmVudCk6CisgICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiQWRkIG5ldyBsYXllciIsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NFTEVDVF9GT0xERVIpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT3BlbiIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgiU2VsZWN0IHRoZSBsYXllciB5b3Ugd2lzaCB0byBhZGQiKQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgZGlhbG9nLnNldF9leHRyYV93aWRnZXQobGFiZWwpCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIHBhdGggPSBkaWFsb2cuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgICAgIGxibCA9ICI8Yj5FcnJvcjwvYj4iCisgICAgICAgIG1zZyA9ICJVbmFibGUgdG8gbG9hZCBsYXllciA8aT4lczwvaT4gYmVjYXVzZSAiICUgcGF0aAorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgb3MucGF0aAorICAgICAgICAgICAgbGF5ZXJzID0gW10KKyAgICAgICAgICAgIGl0ID0gbGF5ZXJfc3RvcmUuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICAgICAgbGF5ZXJzLmFwcGVuZChsYXllcl9zdG9yZS5nZXRfdmFsdWUoaXQsIDApKQorICAgICAgICAgICAgICAgIGl0ID0gbGF5ZXJfc3RvcmUuaXRlcl9uZXh0KGl0KQorCisgICAgICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgICAgICBtc2cgKz0gIml0IGlzIGFuIGludmFsaWQgcGF0aC4iCisgICAgICAgICAgICBlbGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKyIvY29uZi9sYXllci5jb25mIik6CisgICAgICAgICAgICAgICAgbXNnICs9ICJ0aGVyZSBpcyBubyBsYXllci5jb25mIGluc2lkZSB0aGUgZGlyZWN0b3J5LiIKKyAgICAgICAgICAgIGVsaWYgcGF0aCBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgbXNnICs9ICJpdCBpcyBhbHJlYWR5IGluIGxvYWRlZCBsYXllcnMuIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsYXllcl9zdG9yZS5hcHBlbmQoW3BhdGhdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhwYXJlbnQsIGxibCwgZ3RrLk1FU1NBR0VfRVJST1IsIG1zZykKKyAgICAgICAgICAgIGRpYWxvZy5hZGRfYnV0dG9uKGd0ay5TVE9DS19DTE9TRSwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBsYXllcl93aWRnZXRfZGVsX2NsaWNrZWRfY2Ioc2VsZiwgYWN0aW9uLCB0cmVlX3NlbGVjdGlvbiwgbGF5ZXJfc3RvcmUpOgorICAgICAgICBtb2RlbCwgaXRlciA9IHRyZWVfc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGlmIGl0ZXI6CisgICAgICAgICAgICBsYXllcl9zdG9yZS5yZW1vdmUoaXRlcikKKworCisgICAgZGVmIGdlbl9sYXllcl93aWRnZXQoc2VsZiwgbGF5ZXJzLCBsYXllcnNfYXZhaWwsIHdpbmRvdywgdG9vbHRpcD0iIik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgNikKKworICAgICAgICBsYXllcl90diA9IGd0ay5UcmVlVmlldygpCisgICAgICAgIGxheWVyX3R2LnNldF9ydWxlc19oaW50KFRydWUpCisgICAgICAgIGxheWVyX3R2LnNldF9oZWFkZXJzX3Zpc2libGUoRmFsc2UpCisgICAgICAgIHRyZWVfc2VsZWN0aW9uID0gbGF5ZXJfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfc2VsZWN0aW9uLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgQWxsb3cgZW5hYmxlIGRyYWcgYW5kIGRyb3Agb2Ygcm93cyBpbmNsdWRpbmcgcm93IG1vdmUKKyAgICAgICAgZG5kX2ludGVybmFsX3RhcmdldCA9ICcnCisgICAgICAgIGRuZF90YXJnZXRzID0gWyhkbmRfaW50ZXJuYWxfdGFyZ2V0LCBndGsuVEFSR0VUX1NBTUVfV0lER0VULCAwKV0KKyAgICAgICAgbGF5ZXJfdHYuZW5hYmxlX21vZGVsX2RyYWdfc291cmNlKCBndGsuZ2RrLkJVVFRPTjFfTUFTSywKKyAgICAgICAgICAgIGRuZF90YXJnZXRzLAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fTU9WRSkKKyAgICAgICAgbGF5ZXJfdHYuZW5hYmxlX21vZGVsX2RyYWdfZGVzdChkbmRfdGFyZ2V0cywKKyAgICAgICAgICAgIGd0ay5nZGsuQUNUSU9OX01PVkUpCisgICAgICAgIGxheWVyX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9nZXQiLCBzZWxmLmRyYWdfZGF0YV9nZXRfY2IpCisgICAgICAgIGxheWVyX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9yZWNlaXZlZCIsIHNlbGYuZHJhZ19kYXRhX3JlY2VpdmVkX2NiKQorCisgICAgICAgIGNvbDA9IGd0ay5UcmVlVmlld0NvbHVtbignUGF0aCcpCisgICAgICAgIGNlbGwwID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBjZWxsMC5zZXRfcGFkZGluZyg1LDIpCisgICAgICAgIGNvbDAucGFja19zdGFydChjZWxsMCwgVHJ1ZSkKKyAgICAgICAgY29sMC5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbDAsIHNlbGYuZHJhd19sYXllcl9wYXRoX2NiKQorICAgICAgICBsYXllcl90di5hcHBlbmRfY29sdW1uKGNvbDApCisKKyAgICAgICAgc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2Nyb2xsLmFkZChsYXllcl90dikKKworICAgICAgICB0YWJsZV9sYXllciA9IGd0ay5UYWJsZSgyLCAxMCwgRmFsc2UpCisgICAgICAgIGhib3gucGFja19zdGFydCh0YWJsZV9sYXllciwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICB0YWJsZV9sYXllci5hdHRhY2goc2Nyb2xsLCAwLCAxMCwgMCwgMSkKKworICAgICAgICBsYXllcl9zdG9yZSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgIGxheWVyX3N0b3JlLmFwcGVuZChbbGF5ZXJdKQorCisgICAgICAgIGNvbDEgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ0VuYWJsZWQnKQorICAgICAgICBsYXllcl90di5hcHBlbmRfY29sdW1uKGNvbDEpCisKKyAgICAgICAgY2VsbDEgPSBDZWxsUmVuZGVyZXJQaXhidWZBY3RpdmF0YWJsZSgpCisgICAgICAgIGNlbGwxLnNldF9maXhlZF9zaXplKC0xLDM1KQorICAgICAgICBjZWxsMS5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5kZWxfY2VsbF9jbGlja2VkX2NiLCBsYXllcl9zdG9yZSkKKyAgICAgICAgY29sMS5wYWNrX3N0YXJ0KGNlbGwxLCBUcnVlKQorICAgICAgICBjb2wxLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMSwgc2VsZi5kcmF3X2RlbGV0ZV9idXR0b25fY2IsIGxheWVyX3R2KQorCisgICAgICAgIGFkZF9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgYWRkX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfTk9ORSkKKyAgICAgICAgYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIGJveC5zaG93KCkKKyAgICAgICAgYWRkX2J1dHRvbi5hZGQoYm94KQorICAgICAgICBhZGRfYnV0dG9uLmNvbm5lY3QoImVudGVyLW5vdGlmeS1ldmVudCIsIHNlbGYuYWRkX2hvdmVyX2NiKQorICAgICAgICBhZGRfYnV0dG9uLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYuYWRkX2xlYXZlX2NiKQorICAgICAgICBzZWxmLmltID0gZ3RrLkltYWdlKCkKKyAgICAgICAgc2VsZi5pbS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfQUREX0ZJTEUpCisgICAgICAgIHNlbGYuaW0uc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KHNlbGYuaW0sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorICAgICAgICBsYmwgPSBndGsuTGFiZWwoIkFkZCBsYXllciIpCisgICAgICAgIGxibC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYmwuc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGxibCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz02KQorICAgICAgICBhZGRfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmxheWVyX3dpZGdldF9hZGRfY2xpY2tlZF9jYiwgbGF5ZXJfc3RvcmUsIHdpbmRvdykKKyAgICAgICAgdGFibGVfbGF5ZXIuYXR0YWNoKGFkZF9idXR0b24sIDAsIDEwLCAxLCAyLCBndGsuRVhQQU5EIHwgZ3RrLkZJTEwsIDAsIDAsIDYpCisgICAgICAgIGxheWVyX3R2LnNldF9tb2RlbChsYXllcl9zdG9yZSkKKworICAgICAgICBoYm94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gaGJveCwgbGF5ZXJfc3RvcmUKKworICAgIGRlZiBkcmFnX2RhdGFfZ2V0X2NiKHNlbGYsIHRyZWV2aWV3LCBjb250ZXh0LCBzZWxlY3Rpb24sIHRhcmdldF9pZCwgZXRpbWUpOgorICAgICAgICB0cmVlc2VsZWN0aW9uID0gdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIG1vZGVsLCBpdGVyID0gdHJlZXNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBkYXRhID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApCisgICAgICAgIHNlbGVjdGlvbi5zZXQoc2VsZWN0aW9uLnRhcmdldCwgOCwgZGF0YSkKKworICAgIGRlZiBkcmFnX2RhdGFfcmVjZWl2ZWRfY2Ioc2VsZiwgdHJlZXZpZXcsIGNvbnRleHQsIHgsIHksIHNlbGVjdGlvbiwgaW5mbywgZXRpbWUpOgorICAgICAgICBtb2RlbCA9IHRyZWV2aWV3LmdldF9tb2RlbCgpCisgICAgICAgIGRhdGEgPSBzZWxlY3Rpb24uZGF0YQorICAgICAgICBkcm9wX2luZm8gPSB0cmVldmlldy5nZXRfZGVzdF9yb3dfYXRfcG9zKHgsIHkpCisgICAgICAgIGlmIGRyb3BfaW5mbzoKKyAgICAgICAgICAgIHBhdGgsIHBvc2l0aW9uID0gZHJvcF9pbmZvCisgICAgICAgICAgICBpdGVyID0gbW9kZWwuZ2V0X2l0ZXIocGF0aCkKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBndGsuVFJFRV9WSUVXX0RST1BfQkVGT1JFIG9yIHBvc2l0aW9uID09IGd0ay5UUkVFX1ZJRVdfRFJPUF9JTlRPX09SX0JFRk9SRSk6CisgICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0X2JlZm9yZShpdGVyLCBbZGF0YV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydF9hZnRlcihpdGVyLCBbZGF0YV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RlbC5hcHBlbmQoW2RhdGFdKQorICAgICAgICBpZiBjb250ZXh0LmFjdGlvbiA9PSBndGsuZ2RrLkFDVElPTl9NT1ZFOgorICAgICAgICAgICAgY29udGV4dC5maW5pc2goVHJ1ZSwgVHJ1ZSwgZXRpbWUpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGFkZF9ob3Zlcl9jYihzZWxmLCBidXR0b24sIGV2ZW50KToKKyAgICAgICAgc2VsZi5pbS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfQUREX0hPVkVSX0ZJTEUpCisKKyAgICBkZWYgYWRkX2xlYXZlX2NiKHNlbGYsIGJ1dHRvbiwgZXZlbnQpOgorICAgICAgICBzZWxmLmltLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BRERfRklMRSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgbGF5ZXJzLCBsYXllcnNfbm9uX3JlbW92YWJsZSwgYWxsX2xheWVycywgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoTGF5ZXJTZWxlY3Rpb25EaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmcm9tIG90aGVyIG9iamVjdHMKKyAgICAgICAgc2VsZi5sYXllcnMgPSBsYXllcnMKKyAgICAgICAgc2VsZi5sYXllcnNfbm9uX3JlbW92YWJsZSA9IGxheWVyc19ub25fcmVtb3ZhYmxlCisgICAgICAgIHNlbGYuYWxsX2xheWVycyA9IGFsbF9sYXllcnMKKyAgICAgICAgc2VsZi5sYXllcnNfY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgIyBpY29uIGZvciByZW1vdmUgYnV0dG9uIGluIFRyZWVWaWV3CisgICAgICAgIGltID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaW0uc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX1JFTU9WRV9GSUxFKQorICAgICAgICBzZWxmLnJlbV9pY29uID0gaW0uZ2V0X3BpeGJ1ZigpCisKKyAgICAgICAgIyBjbGFzcyBtZW1iZXJzIGZvciBpbnRlcm5hbCB1c2UKKyAgICAgICAgc2VsZi5sYXllcl9zdG9yZSA9IE5vbmUKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBsYXllcl93aWRnZXQsIHNlbGYubGF5ZXJfc3RvcmUgPSBzZWxmLmdlbl9sYXllcl93aWRnZXQoc2VsZi5sYXllcnMsIHNlbGYuYWxsX2xheWVycywgc2VsZiwgTm9uZSkKKyAgICAgICAgbGF5ZXJfd2lkZ2V0LnNldF9zaXplX3JlcXVlc3QoNDUwLCAyNTApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGxheWVyX3dpZGdldCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgcmVzcG9uc2VfY2Ioc2VsZiwgZGlhbG9nLCByZXNwb25zZV9pZCk6CisgICAgICAgIG1vZGVsID0gc2VsZi5sYXllcl9zdG9yZQorICAgICAgICBpdCA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgbGF5ZXJzID0gW10KKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBsYXllcnMuYXBwZW5kKG1vZGVsLmdldF92YWx1ZShpdCwgMCkpCisgICAgICAgICAgICBpdCA9IG1vZGVsLml0ZXJfbmV4dChpdCkKKworICAgICAgICBzZWxmLmxheWVyc19jaGFuZ2VkID0gKHNlbGYubGF5ZXJzICE9IGxheWVycykKKyAgICAgICAgc2VsZi5sYXllcnMgPSBsYXllcnMKKworICAgICIiIgorICAgIEEgY3VzdG9tIGNlbGxfZGF0YV9mdW5jIHRvIGRyYXcgYSBkZWxldGUgJ2J1dHRvbicgaW4gdGhlIFRyZWVWaWV3IGZvciBsYXllcnMKKyAgICBvdGhlciB0aGFuIHRoZSBtZXRhIGxheWVyLiBUaGUgZGVsZXRpb24gb2Ygd2hpY2ggaXMgcHJldmVudGVkIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4ndCBzaG9vdCB0aGVtc2VsdmVzIGluIHRoZSBmb290IHRvbyBiYWRseS4KKyAgICAiIiIKKyAgICBkZWYgZHJhd19kZWxldGVfYnV0dG9uX2NiKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0LCB0dik6CisgICAgICAgIHBhdGggPSAgbW9kZWwuZ2V0X3ZhbHVlKGl0LCAwKQorICAgICAgICBpZiBwYXRoIGluIHNlbGYubGF5ZXJzX25vbl9yZW1vdmFibGU6CisgICAgICAgICAgICBjZWxsLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgncGl4YnVmJywgTm9uZSkKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdtb2RlJywgZ3RrLkNFTExfUkVOREVSRVJfTU9ERV9JTkVSVCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdwaXhidWYnLCBzZWxmLnJlbV9pY29uKQorICAgICAgICAgICAgY2VsbC5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnbW9kZScsIGd0ay5DRUxMX1JFTkRFUkVSX01PREVfQUNUSVZBVEFCTEUpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICIiIgorICAgIEEgY3VzdG9tIGNlbGxfZGF0YV9mdW5jIHRvIHdyaXRlIGFuIGV4dHJhIG1lc3NhZ2UgaW50byB0aGUgbGF5ZXIgcGF0aCBjZWxsCisgICAgZm9yIHRoZSBtZXRhIGxheWVyLiBXZSBzaG91bGQgaW5mb3JtIHRoZSB1c2VyIHRoYXQgdGhleSBjYW4ndCByZW1vdmUgaXQgZm9yCisgICAgdGhlaXIgb3duIHNhZmV0eS4KKyAgICAiIiIKKyAgICBkZWYgZHJhd19sYXllcl9wYXRoX2NiKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0KToKKyAgICAgICAgcGF0aCA9IG1vZGVsLmdldF92YWx1ZShpdCwgMCkKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmxheWVyc19ub25fcmVtb3ZhYmxlOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ21hcmt1cCcsICI8Yj5JdCBjYW5ub3QgYmUgcmVtb3ZlZDwvYj5cbiVzIiAlIHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIHBhdGgpCisKKyAgICBkZWYgZGVsX2NlbGxfY2xpY2tlZF9jYihzZWxmLCBjZWxsLCBwYXRoLCBtb2RlbCk6CisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZnJvbV9zdHJpbmcocGF0aCkKKyAgICAgICAgbW9kZWwucmVtb3ZlKGl0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3BhcnNpbmd3YXJuaW5nc2RpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wYXJzaW5nd2FybmluZ3NkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiYWMzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wYXJzaW5nd2FybmluZ3NkaWFsb2cucHkKQEAgLTAsMCArMSwxNjMgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgQ3Jpc3RpYW5hIFZvaWN1IDxjcmlzdGlhbmEudm9pY3VAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQWx0QnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKKyMKKyMgUGFyc2luZ1dhcm5pbmdzRGlhbG9nCisjCitjbGFzcyBQYXJzaW5nV2FybmluZ3NEaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIHdhcm5pbmdzLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihQYXJzaW5nV2FybmluZ3NEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgIHNlbGYud2FybmluZ3MgPSB3YXJuaW5ncworICAgICAgICBzZWxmLndhcm5pbmdfb24gPSAwCisgICAgICAgIHNlbGYud2Fybl9uYiA9IGxlbih3YXJuaW5ncykKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNhbmNlbF9idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5kZXN0cm95KCkKKworICAgIGRlZiBwcmV2aW91c19idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi53YXJuaW5nX29uID0gc2VsZi53YXJuaW5nX29uIC0gMQorICAgICAgICBzZWxmLnJlZnJlc2hfY29tcG9uZW50cygpCisKKyAgICBkZWYgbmV4dF9idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi53YXJuaW5nX29uID0gc2VsZi53YXJuaW5nX29uICsgMQorICAgICAgICBzZWxmLnJlZnJlc2hfY29tcG9uZW50cygpCisKKyAgICBkZWYgcmVmcmVzaF9jb21wb25lbnRzKHNlbGYpOgorICAgICAgICBsYmwgPSBzZWxmLndhcm5pbmdzW3NlbGYud2FybmluZ19vbl0KKyAgICAgICAgI3doZW4gdGhlIHdhcm5pbmcgdGV4dCBoYXMgbW9yZSB0aGFuIDQwMCBjaGFycywgaXQgdXNlcyBhIHNjcm9sbCBiYXIKKyAgICAgICAgaWYgMDw9IGxlbihsYmwpIDwgNDAwOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLnNldF9zaXplX3JlcXVlc3QoMzIwLCAyMzApCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X3VzZV9tYXJrdXAoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X21hcmt1cChsYmwpCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X3Byb3BlcnR5KCJ5YWxpZ24iLCAwLjAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3ID0gZ3RrLlRleHRWaWV3KCkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9jdXJzb3JfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfc2l6ZV9yZXF1ZXN0KDMyMCwgMjMwKQorICAgICAgICAgICAgc2VsZi5idWYgPSBndGsuVGV4dEJ1ZmZlcigpCisgICAgICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChsYmwpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2J1ZmZlcihzZWxmLmJ1ZikKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5hZGQoc2VsZi5tc2dWaWV3KQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNob3coKQorCisgICAgICAgIGlmIHNlbGYud2FybmluZ19vbj09MDoKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICAgICAgaWYgc2VsZi53YXJuaW5nX29uPT1zZWxmLndhcm5fbmItMToKKyAgICAgICAgICAgIHNlbGYubmV4dF9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubmV4dF9idXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQorCisgICAgICAgIGlmIHNlbGYud2Fybl9uYj4xOgorICAgICAgICAgICAgc2VsZi5oZWFkaW5nID0gIldhcm5pbmcgIiArIHN0cihzZWxmLndhcm5pbmdfb24gKyAxKSArICIgb2YgIiArIHN0cihzZWxmLndhcm5fbmIpCisgICAgICAgICAgICBzZWxmLmhlYWRpbmdfbGFiZWwuc2V0X21hcmt1cCgnPHNwYW4gd2VpZ2h0PSJib2xkIj4lczwvc3Bhbj4nICUgc2VsZi5oZWFkaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5oZWFkaW5nID0gIldhcm5pbmciCisgICAgICAgICAgICBzZWxmLmhlYWRpbmdfbGFiZWwuc2V0X21hcmt1cCgnPHNwYW4gd2VpZ2h0PSJib2xkIj4lczwvc3Bhbj4nICUgc2VsZi5oZWFkaW5nKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgICAgIGlmIDA8PSBsZW4obGJsKSA8IDQwMDoKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5oaWRlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5oaWRlKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF9zaXplX3JlcXVlc3QoMzUwLCAzNTApCisgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIHNlbGYud2FybmluZ19sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBzZWxmLnRleHRXaW5kb3cgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDEwLCBGYWxzZSkKKworICAgICAgICBjYW5jZWxfYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIGNhbmNlbF9idXR0b24uc2V0X2xhYmVsKCJDbG9zZSIpCisgICAgICAgIGNhbmNlbF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuY2FuY2VsX2J1dHRvbl9jYikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgc2VsZi5wcmV2aW91c19idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgaW1hZ2UxID0gZ3RrLmltYWdlX25ld19mcm9tX3N0b2NrKGd0ay5TVE9DS19HT19CQUNLLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgaW1hZ2UxLnNob3coKQorICAgICAgICBib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgYm94LnNob3coKQorICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5hZGQoYm94KQorICAgICAgICBsYmwgPSBndGsuTGFiZWwoIlByZXZpb3VzIikKKyAgICAgICAgbGJsLnNob3coKQorICAgICAgICBib3gucGFja19zdGFydChpbWFnZTEsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0zKQorICAgICAgICBib3gucGFja19zdGFydChsYmwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUsIHBhZGRpbmc9MykKKyAgICAgICAgc2VsZi5wcmV2aW91c19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYucHJldmlvdXNfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBpbWFnZTIgPSBndGsuaW1hZ2VfbmV3X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0dPX0ZPUldBUkQsIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorICAgICAgICBpbWFnZTIuc2hvdygpCisgICAgICAgIGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBib3guc2hvdygpCisgICAgICAgIHNlbGYubmV4dF9idXR0b24uYWRkKGJveCkKKyAgICAgICAgbGJsID0gZ3RrLkxhYmVsKCJOZXh0IikKKyAgICAgICAgbGJsLnNob3coKQorICAgICAgICBib3gucGFja19zdGFydChsYmwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUsIHBhZGRpbmc9MykKKyAgICAgICAgYm94LnBhY2tfc3RhcnQoaW1hZ2UyLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MykKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5uZXh0X2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgI3doZW4gdGhlcmUgbW9yZSB0aGFuIG9uZSB3YXJuaW5nLCB3ZSBuZWVkICJwcmV2aW91cyIgYW5kICJuZXh0IiBidXR0b24KKyAgICAgICAgaWYgc2VsZi53YXJuX25iPjE6CisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmhlYWRpbmdfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYud2FybmluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi50ZXh0V2luZG93LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2goY2FuY2VsX2J1dHRvbiwgNiwgNywgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKyAgICAgICAgICAgIHRhYmxlLmF0dGFjaChzZWxmLnByZXZpb3VzX2J1dHRvbiwgNywgOCwgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKyAgICAgICAgICAgIHRhYmxlLmF0dGFjaChzZWxmLm5leHRfYnV0dG9uLCA4LCA5LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmhlYWRpbmdfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYud2FybmluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi50ZXh0V2luZG93LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBjYW5jZWxfYnV0dG9uID0gc2VsZi5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGNhbmNlbF9idXR0b24pCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX2NvbXBvbmVudHMoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3BlcnR5ZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3BlcnR5ZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjljZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJvcGVydHlkaWFsb2cucHkKQEAgLTAsMCArMSw0MzcgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEzICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN0cmluZworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgZ2xpYgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2V0dGluZ3N1aWhlbHBlciBpbXBvcnQgU2V0dGluZ3NVSUhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5sYXllcnNlbGVjdGlvbmRpYWxvZyBpbXBvcnQgTGF5ZXJTZWxlY3Rpb25EaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFByb3BlcnR5RGlhbG9nKENydW1ic0RpYWxvZyk6CisJCisJZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlLCBwYXJlbnQsIGluZm9ybWF0aW9uLCBmbGFncywgYnV0dG9ucz1Ob25lKToKKwkJCisJCXN1cGVyKFByb3BlcnR5RGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnRpZXMgPSBpbmZvcm1hdGlvbgorCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYucHJvcGVydGllcykgPT0gMTA6CisJCSAgICAgICAgc2VsZi5jcmVhdGVfcmVjaXBlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgICAgICAgICAgZWxpZiBsZW4oc2VsZi5wcm9wZXJ0aWVzKSA9PSA1OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVfcGFja2FnZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9pbmZvcm1hdGlvbl92aXN1YWxfZWxlbWVudHMoKQorCisKKyAgICAgICAgZGVmIGNyZWF0ZV9pbmZvcm1hdGlvbl92aXN1YWxfZWxlbWVudHMoc2VsZik6CisKKyAgICAgICAgICAgICAgICBIT0JfSUNPTl9CQVNFX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwgKCJpY29ucy8iKSkKKyAgICAgICAgICAgICAgICBJQ09OX1BBQ0tBR0VTX0RJU1BMQVlfRklMRSAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmZvL2luZm9fZGlzcGxheS5wbmcnKSkKKworICAgICAgICAgICAgICAgIHNlbGYuc2V0X3Jlc2l6YWJsZShGYWxzZSkKKworICAgICAgICAgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUoMSwxLEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5ncygwKQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X2NvbF9zcGFjaW5ncygwKQorCisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKElDT05fUEFDS0FHRVNfRElTUExBWV9GSUxFKQorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLDApCisgICAgICAgICAgICAgICAgI3NlbGYudmJveC5hZGQoc2VsZi5pbWFnZSkKKworICAgICAgICAgICAgICAgIGltYWdlX2luZm8gPSBzZWxmLnByb3BlcnRpZXMuc3BsaXQoIioiKVswXQorICAgICAgICAgICAgICAgIGluZm8gPSBzZWxmLnByb3BlcnRpZXMuc3BsaXQoIioiKVsxXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHZib3ggPSBndGsuVkJveChUcnVlLCBzcGFjaW5nPTMwKSAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cChpbWFnZV9pbmZvKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorCisgICAgICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuaW5mb19sYWJlbC5zZXRfbWFya3VwKGluZm8pCisgICAgICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsLnNldF9wcm9wZXJ0eSgieWFsaWduIiwgMC41KQorCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5pbWFnZSwgMCwxLDAsMSwgeG9wdGlvbnM9Z3RrLkZJTEx8Z3RrLkVYUEFORCwgeW9wdGlvbnM9Z3RrLkZJTEwseHBhZGRpbmc9NSx5cGFkZGluZz01KQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKHNlbGYubGFiZWxfc2hvcnQsIDAsMSwwLDEsIHhvcHRpb25zPWd0ay5GSUxMfGd0ay5FWFBBTkQsIHlvcHRpb25zPWd0ay5GSUxMLHhwYWRkaW5nPTQwLHlwYWRkaW5nPTUpCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5pbmZvX2xhYmVsLCAwLDEsMSwyLCB4b3B0aW9ucz1ndGsuRklMTHxndGsuRVhQQU5ELCB5b3B0aW9ucz1ndGsuRklMTCx4cGFkZGluZz00MCx5cGFkZGluZz0xMCkKKyAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLnRhYmxlKQorICAgICAgICAgICAgICAgIHNlbGYuY29ubmVjdCgnZGVsZXRlLWV2ZW50JywgbGFtYmRhIHcsIGU6IHNlbGYuZGVzdHJveSgpIG9yIFRydWUpIAorCisgICAgICAgIGRlZiB0cmVlVmlld1Rvb2x0aXAoIHNlbGYsIHdpZGdldCwgZSwgdG9vbHRpcHMsIGNlbGwsIGVtcHR5VGV4dD0iIiApOgorICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCxjb2wseCx5KSA9IHdpZGdldC5nZXRfcGF0aF9hdF9wb3MoIGludChlLngpLCBpbnQoZS55KSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCA9IHdpZGdldC5nZXRfbW9kZWwoKS5nZXRfaXRlcihwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB3aWRnZXQuZ2V0X21vZGVsKCkuZ2V0X3ZhbHVlKGl0LGNlbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmLnRvb2x0aXBfaXRlbXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBzLnNldF90aXAod2lkZ2V0LCBzZWxmLnRvb2x0aXBfaXRlbXNbdmFsdWVdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5lbmFibGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHMuc2V0X3RpcCh3aWRnZXQsIGVtcHR5VGV4dCkKKyAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHMuc2V0X3RpcCh3aWRnZXQsIGVtcHR5VGV4dCkKKworICAgICAgICAgICAgICAgIAorICAgICAgICBkZWYgY3JlYXRlX3BhY2thZ2VfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorCisgICAgICAgICAgICAgICAgaW1wb3J0IGpzb24KKworICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLnByb3BlcnRpZXNbJ25hbWUnXQorICAgICAgICAgICAgICAgIGJpbmIgPSBzZWxmLnByb3BlcnRpZXNbJ2JpbmInXQorICAgICAgICAgICAgICAgIHNpemUgPSBzZWxmLnByb3BlcnRpZXNbJ3NpemUnXQorICAgICAgICAgICAgICAgIHJlY2lwZSA9IHNlbGYucHJvcGVydGllc1sncmVjaXBlJ10KKyAgICAgICAgICAgICAgICBmaWxlX2xpc3QgPSBqc29uLmxvYWRzKHNlbGYucHJvcGVydGllc1snZmlsZXNfbGlzdCddKQorCisgICAgICAgICAgICAgICAgZmlsZXNfdGVtcCA9ICcnCisgICAgICAgICAgICAgICAgcGF0aHNfdGVtcCA9ICcnCisgICAgICAgICAgICAgICAgZmlsZXNfYmluYiA9IFtdCisgICAgICAgICAgICAgICAgcGF0aHNfYmluYiA9IFtdCisKKyAgICAgICAgICAgICAgICBzZWxmLnRvb2x0aXBfaXRlbXMgPSB7fQorCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICNjbGVhbmluZyBvdXQgdGhlIHJlY2lwZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgIHJlY2lwZSA9IHJlY2lwZS5zcGxpdCgiKyIpWzBdCisKKyAgICAgICAgICAgICAgICB2Ym94ID0gZ3RrLlZCb3goVHJ1ZSxzcGFjaW5nID0gMCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5BTUUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+TmFtZTogPC9zcGFuPiIgKyBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTSVpFIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2l6ZTogPC9zcGFuPiIgKyBzaXplKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVDSVBFIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+UmVjaXBlOiA8L3NwYW4+IiArIHJlY2lwZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKworICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQklOQiBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgYmluYiAhPSAnJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5Ccm91Z2h0IGluIGJ5OiA8L3NwYW4+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKSAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGJpbmIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKSAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZJTEVTIEJST1VHSFQgQlkgUEFDS0FHRVMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICAgICAgICAgIGlmIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NpemVfcmVxdWVzdCgxMDAsIDE3MCkKKworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVzX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShzdHIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2ID0gZ3RrLlRyZWVWaWV3KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9ydWxlc19oaW50KFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VmaWxlc190di5zZXRfaGVhZGVyc192aXNpYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuYWRkKHNlbGYucGFja2FnZWZpbGVzX3R2KQorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNlbGwxID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sMSA9IGd0ay5UcmVlVmlld0NvbHVtbignUGFja2FnZSBmaWxlcycsIHNlbGYuY2VsbDEpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2wxLnNldF9jZWxsX2RhdGFfZnVuYyhzZWxmLmNlbGwxLCBzZWxmLnJlZ2V4X2ZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuYXBwZW5kX2NvbHVtbihjb2wxKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGZpbGVfbGlzdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNvcnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gaXRlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZW4oaXRlbSkgPiAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbVs6bGVuKGl0ZW0pLzJdICsgIiIgKyBpdGVtW2xlbihpdGVtKS8yKzE6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaXRlbSkgPT0gMzU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1bOmxlbihpdGVtKS8yXSArICIuLi4iICsgaXRlbVtsZW4oaXRlbSkvMiszOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvb2x0aXBfaXRlbXNbaXRlbV0gPSBmdWxscGF0aAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VmaWxlc19zdG9yZS5hcHBlbmQoW3N0cihpdGVtKV0pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9tb2RlbChwYWNrYWdlZmlsZXNfc3RvcmUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpcHMgPSBndGsuVG9vbHRpcHMoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGlwcy5zZXRfdGlwKHNlbGYucGFja2FnZWZpbGVzX3R2LCAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LmNvbm5lY3QoIm1vdGlvbi1ub3RpZnktZXZlbnQiLCBzZWxmLnRyZWVWaWV3VG9vbHRpcCwgdGlwcywgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9ldmVudHMoZ3RrLmdkay5QT0lOVEVSX01PVElPTl9NQVNLKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYudGV4dFdpbmRvdykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LnNob3dfYWxsKCkKKworCisgICAgICAgIGRlZiByZWdleF9maWVsZChzZWxmLCBjb2x1bW4sIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworCisJZGVmIGNyZWF0ZV9yZWNpcGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorCisgICAgICAgICAgICAgICAgc3VtbWFyeSA9IHNlbGYucHJvcGVydGllc1snc3VtbWFyeSddCisJCW5hbWUgPSBzZWxmLnByb3BlcnRpZXNbJ25hbWUnXQorCQl2ZXJzaW9uID0gc2VsZi5wcm9wZXJ0aWVzWyd2ZXJzaW9uJ10KKwkJcmV2aXNpb24gPSBzZWxmLnByb3BlcnRpZXNbJ3JldmlzaW9uJ10KKwkJYmluYiA9IHNlbGYucHJvcGVydGllc1snYmluYiddCisJCWdyb3VwID0gc2VsZi5wcm9wZXJ0aWVzWydncm91cCddCisJCWxpY2Vuc2UgPSBzZWxmLnByb3BlcnRpZXNbJ2xpY2Vuc2UnXQorCQlob21lcGFnZSA9IHNlbGYucHJvcGVydGllc1snaG9tZXBhZ2UnXQorCQlidWd0cmFja2VyID0gc2VsZi5wcm9wZXJ0aWVzWydidWd0cmFja2VyJ10KKwkJZGVzY3JpcHRpb24gPSBzZWxmLnByb3BlcnRpZXNbJ2Rlc2NyaXB0aW9uJ10KKworICAgICAgICAgICAgICAgIHNlbGYuc2V0X3Jlc2l6YWJsZShGYWxzZSkKKwkJCisgICAgICAgICAgICAgICAgI2NsZWFuaW5nIG91dCB0aGUgdmVyc2lvbiB2YXJpYWJsZSBhbmQgYWxzbyB0aGUgc3VtbWFyeQorICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uLnNwbGl0KCI6IilbMV0KKyAgICAgICAgICAgICAgICBpZiBsZW4odmVyc2lvbikgPiAzMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uLnNwbGl0KCIrIilbMF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIi0iKVswXQorICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSBsaWNlbnNlLnJlcGxhY2UoIiYiICwgImFuZCIpCisgICAgICAgICAgICAgICAgaWYgKGhvbWVwYWdlID09ICcnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVwYWdlID0gJ3Vua25vd24nCisgICAgICAgICAgICAgICAgaWYgKGJ1Z3RyYWNrZXIgPT0gJycpOgorICAgICAgICAgICAgICAgICAgICAgICAgYnVndHJhY2tlciA9ICd1bmtub3duJworICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBzdW1tYXJ5LnNwbGl0KCIrIilbMF0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjY2FsY3VsYXRpbmcgdGhlIHJvd3MgbmVlZGVkIGZvciB0aGUgdGFibGUKKyAgICAgICAgICAgICAgICBiaW5iX2l0ZW1zX2NvdW50ID0gbGVuKGJpbmIuc3BsaXQoJywnKSkKKyAgICAgICAgICAgICAgICBiaW5iX2l0ZW1zID0gYmluYi5zcGxpdCgnLCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkKKwkJdmJveCA9IGd0ay5WQm94KEZhbHNlLHNwYWNpbmcgPSAwKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTVU1NQVJZIExBQkVMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc3VtbWFyeSAhPSAnJzogICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3dpZHRoX2NoYXJzKDM3KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj4iICsgc3VtbWFyeSArICI8L2I+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5BTUUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+TmFtZTogPC9zcGFuPiIgKyBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVkVSU0lPTiBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlZlcnNpb246IDwvc3Bhbj4iICsgdmVyc2lvbikKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFVklTSU9OIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+UmV2aXNpb246IDwvc3Bhbj4iICsgcmV2aXNpb24pCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR1JPVVAgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkdyb3VwOiA8L3NwYW4+IiArIGdyb3VwKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSE9NRVBBR0UgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaG9tZXBhZ2UgIT0gJ3Vua25vd24nOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihob21lcGFnZSkgPiAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgaG9tZXBhZ2UgKyAiXCI+IiArIGhvbWVwYWdlWzA6MzVdICsgIi4uLiIgKyAiPC9hPiIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X21hcmt1cCgiPGEgaHJlZj1cIiIgKyBob21lcGFnZSArICJcIj4iICsgaG9tZXBhZ2VbMDo2MF0gKyAiPC9hPiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPGI+SG9tZXBhZ2U6IDwvYj4iKSAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfaW5mbykKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCVUdUUkFDS0VSIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgYnVndHJhY2tlciAhPSAndW5rbm93bic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGJ1Z3RyYWNrZXIpID4gMzU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKCI8YSBocmVmPVwiIiArIGJ1Z3RyYWNrZXIgKyAiXCI+IiArIGJ1Z3RyYWNrZXJbMDozNV0gKyAiLi4uIiArICI8L2E+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKCI8YSBocmVmPVwiIiArIGJ1Z3RyYWNrZXIgKyAiXCI+IiArIGJ1Z3RyYWNrZXJbMDo2MF0gKyAiPC9hPiIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKSAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPGI+QnVndHJhY2tlcjogPC9iPiIpICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIExJQ0VOU0UgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGxpY2Vuc2UpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKworICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkxpY2Vuc2U6IDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfaW5mbykKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEJJTkIgUk9XK0NPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBiaW5iICE9ICcnOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkJyb3VnaHQgaW4gYnk6IDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3dpZHRoX2NoYXJzKDM2KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGJpbmIpID4gMjAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUixndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuc2V0X3NpemVfcmVxdWVzdCgxMDAsMTAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGJpbmIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wYWRkaW5nKDYsNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2FsaWdubWVudCgwLDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuYWRkX3dpdGhfdmlld3BvcnQoc2VsZi5sYWJlbF9pbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2Nyb2xsZWRfd2luZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X21hcmt1cChiaW5iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9saW5lX3dyYXAoVHJ1ZSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBERVNDUklQVElPTiBUQUcgUk9XICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5EZXNjcmlwdGlvbiA8L3NwYW4+IikKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgREVTQ1JJUFRJT04gSU5GT1JNQVRJT04gUk9XICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGhib3ggPSBndGsuSEJveChUcnVlLHNwYWNpbmcgPSAwKQorCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3dpZHRoX2NoYXJzKDM2KQorICAgICAgICAgICAgICAgIGlmIGxlbihkZXNjcmlwdGlvbikgPiAyMDA6CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsZ3RrLlBPTElDWV9BTFdBWVMpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwxMDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcGFkZGluZyg2LDYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2FsaWdubWVudCgwLDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuYWRkX3dpdGhfdmlld3BvcnQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzY3JvbGxlZF93aW5kb3cpCisgICAgICAgICAgICAgICAgZWxzZTogICAgCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfc2hvcnQpCisKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3h5ZGV0YWlsc2RpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wcm94eWRldGFpbHNkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllN2RmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wcm94eWRldGFpbHNkaWFsb2cucHkKQEAgLTAsMCArMSw5MCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBQcm94eURldGFpbHNEaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIHVzZXIsIHBhc3N3ZCwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoUHJveHlEZXRhaWxzRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJyZXNwb25zZSIsIHNlbGYucmVzcG9uc2VfY2IpCisKKyAgICAgICAgc2VsZi5hdXRoID0gbm90ICh1c2VyID09IE5vbmUgb3IgcGFzc3dkID09IE5vbmUgb3IgdXNlciA9PSAiIikKKyAgICAgICAgc2VsZi51c2VyID0gdXNlciBvciAiIgorICAgICAgICBzZWxmLnBhc3N3ZCA9IHBhc3N3ZCBvciAiIgorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hdXRoX2NoZWNrYm94ID0gZ3RrLkNoZWNrQnV0dG9uKCJVc2UgYXV0aGVudGljYXRpb24iKQorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gc2V0IHRoZSB1c2VybmFtZSBhbmQgdGhlIHBhc3N3b3JkIikKKyAgICAgICAgc2VsZi5hdXRoX2NoZWNrYm94LnNldF9hY3RpdmUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYuYXV0aF9jaGVja2JveF90b2dnbGVkX2NiKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmF1dGhfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYudXNlcl9sYWJlbCA9IGd0ay5MYWJlbCgiVXNlcm5hbWU6IikKKyAgICAgICAgc2VsZi51c2VyX3RleHQgPSBndGsuRW50cnkoKQorICAgICAgICBzZWxmLnVzZXJfdGV4dC5zZXRfdGV4dChzZWxmLnVzZXIpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnVzZXJfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgaGJveC5wYWNrX2VuZChzZWxmLnVzZXJfdGV4dCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLnBhc3N3ZF9sYWJlbCA9IGd0ay5MYWJlbCgiUGFzc3dvcmQ6IikKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dCA9IGd0ay5FbnRyeSgpCisgICAgICAgIHNlbGYucGFzc3dkX3RleHQuc2V0X3RleHQoc2VsZi5wYXNzd2QpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnBhc3N3ZF9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBoYm94LnBhY2tfZW5kKHNlbGYucGFzc3dkX3RleHQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9hdXRoX2NvbXBvbmVudHMoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiByZWZyZXNoX2F1dGhfY29tcG9uZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi51c2VyX2xhYmVsLnNldF9zZW5zaXRpdmUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnVzZXJfdGV4dC5zZXRfZWRpdGFibGUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnVzZXJfdGV4dC5zZXRfc2Vuc2l0aXZlKHNlbGYuYXV0aCkKKyAgICAgICAgc2VsZi5wYXNzd2RfbGFiZWwuc2V0X3NlbnNpdGl2ZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYucGFzc3dkX3RleHQuc2V0X2VkaXRhYmxlKHNlbGYuYXV0aCkKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dC5zZXRfc2Vuc2l0aXZlKHNlbGYuYXV0aCkKKworICAgIGRlZiBhdXRoX2NoZWNrYm94X3RvZ2dsZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5hdXRoID0gc2VsZi5hdXRoX2NoZWNrYm94LmdldF9hY3RpdmUoKQorICAgICAgICBzZWxmLnJlZnJlc2hfYXV0aF9jb21wb25lbnRzKCkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgaWYgc2VsZi5hdXRoOgorICAgICAgICAgICAgICAgIHNlbGYudXNlciA9IHNlbGYudXNlcl90ZXh0LmdldF90ZXh0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnBhc3N3ZCA9IHNlbGYucGFzc3dkX3RleHQuZ2V0X3RleHQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5wYXNzd2QgPSBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcmV0cmlldmVpbWFnZWRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9yZXRyaWV2ZWltYWdlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMTcxMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcmV0cmlldmVpbWFnZWRpYWxvZy5weQpAQCAtMCwwICsxLDUxIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBDcmlzdGlhbmEgVm9pY3UgPGNyaXN0aWFuYS52b2ljdUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCisKK2NsYXNzIFJldHJpZXZlSW1hZ2VEaWFsb2cgKGd0ay5GaWxlQ2hvb3NlckRpYWxvZyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIGRpYWxvZyB0aGF0IHBlcm1pdHMgdG8gcmV0cmlldmUKKyAgICBhIGN1c3RvbSBpbWFnZSBzYXZlZCBwcmV2aW91c2x5IGZyb20gSG9iLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXJlY3RvcnksdGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJldHJpZXZlSW1hZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBOb25lLCBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorICAgICAgICAgICAgKGd0ay5TVE9DS19DQU5DRUwsIGd0ay5SRVNQT05TRV9DQU5DRUwsZ3RrLlNUT0NLX09QRU4sIGd0ay5SRVNQT05TRV9PSykpCisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzIG9uIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNldF9zaG93X2hpZGRlbihUcnVlKQorICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3Jlc3BvbnNlKGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgc2VsZi5zZXRfY3VycmVudF9mb2xkZXIoc2VsZi5kaXJlY3RvcnkpCisKKyAgICAgICAgdmJveCA9IHNlbGYuZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0KKyAgICAgICAgZm9yIGNoaWxkIGluIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKCk6CisgICAgICAgICAgICB2Ym94LmdldF9jaGlsZHJlbigpWzBdLmdldF9jaGlsZHJlbigpWzBdLmdldF9jaGlsZHJlbigpWzBdLnJlbW92ZShjaGlsZCkKKworICAgICAgICBsYWJlbDEgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbDEuc2V0X3RleHQoIkZpbGUgc3lzdGVtIiArIHNlbGYuZGlyZWN0b3J5KQorICAgICAgICBsYWJlbDEuc2hvdygpCisgICAgICAgIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0ucGFja19zdGFydChsYWJlbDEsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0wKQorICAgICAgICB2Ym94LmdldF9jaGlsZHJlbigpWzBdLmdldF9jaGlsZHJlbigpWzFdLmdldF9jaGlsZHJlbigpWzBdLmhpZGUoKQorCisgICAgICAgIHNlbGYuZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMV0uZ2V0X2NoaWxkcmVuKClbMF0uc2V0X2xhYmVsKCJTZWxlY3QiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NhdmVpbWFnZWRpYWxvZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zYXZlaW1hZ2VkaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5NWY3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zYXZlaW1hZ2VkaWFsb2cucHkKQEAgLTAsMCArMSwxNTkgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IENyaXN0aWFuYSBWb2ljdSA8Y3Jpc3RpYW5hLnZvaWN1QGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnbGliCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYkJ1dHRvbgorCitjbGFzcyBTYXZlSW1hZ2VEaWFsb2cgKENydW1ic0RpYWxvZyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNyZWF0ZSBhIGRpYWxvZyB0aGF0IHBlcm1pdHMgdG8gc2F2ZQorICAgIGEgY3VzdG9tIGltYWdlIGluIGEgcHJlZGVmaW5lZCBkaXJlY3RvcnkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeSwgbmFtZSwgZGVzY3JpcHRpb24sIHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihTYXZlSW1hZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcmVjdG9yeQorICAgICAgICBzZWxmLmJ1aWxkZXIgPSBwYXJlbnQKKyAgICAgICAgc2VsZi5uYW1lX2ZpZWxkID0gbmFtZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2ZpZWxkID0gZGVzY3JpcHRpb24KKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfcmVzcG9uc2UoZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBzZWxmLnZib3guc2V0X2JvcmRlcl93aWR0aCg2KQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPGI+TmFtZTwvYj4iKQorICAgICAgICBzdWJfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzdWJfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBjb250ZW50ID0gIkltYWdlIHJlY2lwZSBuYW1lcyBzaG91bGQgYmUgYWxsIGxvd2VyY2FzZSBhbmQgaW5jbHVkZSBvbmx5IGFscGhhbnVtZXJpY1xuIgorICAgICAgICBjb250ZW50ICs9ICJjaGFyYWN0ZXJzLiBUaGUgb25seSBzcGVjaWFsIGNoYXJhY3RlciB5b3UgY2FuIHVzZSBpcyB0aGUgQVNDSUkgaHlwaGVuICgtKS4iCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfbWFya3VwKGNvbnRlbnQpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeS5zZXRfdGV4dChzZWxmLm5hbWVfZmllbGQpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeS5zZXRfc2l6ZV9yZXF1ZXN0KDM1MCwzMCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5LmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLm5hbWVfZW50cnlfY2hhbmdlZCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHN1Yl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYubmFtZV9lbnRyeSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPGI+RGVzY3JpcHRpb248L2I+IChvcHRpb25hbCkiKQorICAgICAgICBzdWJfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzdWJfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBzdWJfbGFiZWwuc2V0X21hcmt1cCgiVGhlIGRlc2NyaXB0aW9uIHNob3VsZCBiZSBsZXNzIHRoYW4gMTUwIGNoYXJhY3RlcnMgbG9uZy4iKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5ID0gZ3RrLlRleHRWaWV3KCkKKyAgICAgICAgZGVzY3JpcHRpb25fYnVmZmVyID0gc2VsZi5kZXNjcmlwdGlvbl9lbnRyeS5nZXRfYnVmZmVyKCkKKyAgICAgICAgZGVzY3JpcHRpb25fYnVmZmVyLnNldF90ZXh0KHNlbGYuZGVzY3JpcHRpb25fZmllbGQpCisgICAgICAgIGRlc2NyaXB0aW9uX2J1ZmZlci5jb25uZWN0KCJpbnNlcnQtdGV4dCIsIHNlbGYubGltaXRfZGVzY3JpcHRpb25fbGVuZ3RoKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LnNldF93cmFwX21vZGUoZ3RrLldSQVBfV09SRCkKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbl9lbnRyeS5zZXRfc2l6ZV9yZXF1ZXN0KDM1MCw1MCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHN1Yl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZGVzY3JpcHRpb25fZW50cnksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCAxMikKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIllvdXIgaW1hZ2UgcmVjaXBlIHdpbGwgYmUgc2F2ZWQgdG86IikKKyAgICAgICAgc3ViX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc3ViX2xhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgc3ViX2xhYmVsLnNldF9tYXJrdXAoc2VsZi5kaXJlY3RvcnkpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzdWJfbGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCA0LCBUcnVlKQorCisgICAgICAgIGNhbmNlbF9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfbGFiZWwoIkNhbmNlbCIpCisgICAgICAgIGNhbmNlbF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuY2FuY2VsX2J1dHRvbl9jYikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBzZWxmLnNhdmVfYnV0dG9uLnNldF9sYWJlbCgiU2F2ZSIpCisgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc2F2ZV9idXR0b25fY2IpCisgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NpemVfcmVxdWVzdCgxMTAsIDMwKQorICAgICAgICBpZiBzZWxmLm5hbWVfZW50cnkuZ2V0X3RleHQoKSA9PSAnJzoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKworICAgICAgICB0YWJsZS5hdHRhY2goY2FuY2VsX2J1dHRvbiwgMiwgMywgMCwgMSkKKyAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYuc2F2ZV9idXR0b24sIDMsIDQsIDAsIDEpCisgICAgICAgIHNlbGYudmJveC5wYWNrX2VuZCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGxpbWl0X2Rlc2NyaXB0aW9uX2xlbmd0aChzZWxmLCB0ZXh0YnVmZmVyLCBpdGVyLCB0ZXh0LCBsZW5ndGgpOgorICAgICAgICBidWZmZXJfYm91bmRzID0gdGV4dGJ1ZmZlci5nZXRfYm91bmRzKCkKKyAgICAgICAgZW50aXJlX3RleHQgPSB0ZXh0YnVmZmVyLmdldF90ZXh0KCpidWZmZXJfYm91bmRzKQorICAgICAgICBlbnRpcmVfdGV4dCArPSB0ZXh0CisgICAgICAgIGlmIGxlbihlbnRpcmVfdGV4dCk+MTUwIG9yIHRleHQ9PSJcbiI6CisgICAgICAgICAgICB0ZXh0YnVmZmVyLmVtaXRfc3RvcF9ieV9uYW1lKCJpbnNlcnQtdGV4dCIpCisKKyAgICBkZWYgbmFtZV9lbnRyeV9jaGFuZ2VkKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgaWYgdGV4dCA9PSAnJzoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQorCisgICAgZGVmIGNhbmNlbF9idXR0b25fY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5kZXN0cm95KCkKKworICAgIGRlZiBzYXZlX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICB0ZXh0ID0gc2VsZi5uYW1lX2VudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgbmV3X3RleHQgPSB0ZXh0LnJlcGxhY2UoIi0iLCIiKQorICAgICAgICBkZXNjcmlwdGlvbl9idWZmZXIgPSBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LmdldF9idWZmZXIoKQorICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uX2J1ZmZlci5nZXRfdGV4dChkZXNjcmlwdGlvbl9idWZmZXIuZ2V0X3N0YXJ0X2l0ZXIoKSxkZXNjcmlwdGlvbl9idWZmZXIuZ2V0X2VuZF9pdGVyKCkpCisgICAgICAgIGlmIG5ld190ZXh0LmlzbG93ZXIoKSBhbmQgbmV3X3RleHQuaXNhbG51bSgpOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2RldGFpbHNfcGFnZS5pbWFnZV9zYXZlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5nZW5lcmF0ZV9uZXdfaW1hZ2Uoc2VsZi5kaXJlY3RvcnkrdGV4dCwgZGVzY3JpcHRpb24pCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnNldF9pbl9saXN0KHRleHQsIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5zZXRfc2VsZWN0ZWRfaW1hZ2UodGV4dCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFURUQpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfZGV0YWlsc19wYWdlLm5hbWVfZmllbGRfdGVtcGxhdGUgPSB0ZXh0CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfZGV0YWlsc19wYWdlLmRlc2NyaXB0aW9uX2ZpZWxkX3RlbXBsYXRlID0gZGVzY3JpcHRpb24KKyAgICAgICAgICAgIHNlbGYuZGVzdHJveSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNob3dfaW52YWxpZF9pbnB1dF9lcnJvcl9kaWFsb2coKQorCisgICAgZGVmIHNob3dfaW52YWxpZF9pbnB1dF9lcnJvcl9kaWFsb2coc2VsZik6CisgICAgICAgIGxibCA9ICI8Yj5JbnZhbGlkIGNoYXJhY3RlcnMgaW4gaW1hZ2UgcmVjaXBlIG5hbWU8L2I+IgorICAgICAgICBtc2cgPSAiSW1hZ2UgcmVjaXBlIG5hbWVzIHNob3VsZCBiZSBhbGwgbG93ZXJjYXNlIGFuZFxuIgorICAgICAgICBtc2cgKz0gImluY2x1ZGUgb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gVGhlIG9ubHlcbiIKKyAgICAgICAgbXNnICs9ICJzcGVjaWFsIGNoYXJhY3RlciB5b3UgY2FuIHVzZSBpcyB0aGUgQVNDSUkgaHlwaGVuICgtKS4iCisgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9FUlJPUiwgbXNnKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorCisgICAgICAgIHJlcyA9IGRpYWxvZy5ydW4oKQorICAgICAgICBzZWxmLm5hbWVfZW50cnkuZ3JhYl9mb2N1cygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NldHRpbmdzdWloZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyODVjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgb3MKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iSW5mb0J1dHRvbiwgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFNldHRpbmdzVUlIZWxwZXIoKToKKworICAgIGRlZiBnZW5fbGFiZWxfd2lkZ2V0KHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChjb250ZW50KQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgZ2VuX2xhYmVsX2luZm9fd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIHRvb2x0aXApOgorICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgRmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KGNvbnRlbnQpCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIHRhYmxlLmF0dGFjaChsYWJlbCwgMCwgMSwgMCwgMSwgeG9wdGlvbnM9Z3RrLkZJTEwpCisgICAgICAgIHRhYmxlLmF0dGFjaChpbmZvLCAxLCAyLCAwLCAxLCB4b3B0aW9ucz1ndGsuRklMTCwgeHBhZGRpbmc9MTApCisgICAgICAgIHJldHVybiB0YWJsZQorCisgICAgZGVmIGdlbl9zcGlubmVyX3dpZGdldChzZWxmLCBjb250ZW50LCBsb3dlciwgdXBwZXIsIHRvb2x0aXA9IiIpOgorICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorICAgICAgICBhZGp1c3QgPSBndGsuQWRqdXN0bWVudCh2YWx1ZT1jb250ZW50LCBsb3dlcj1sb3dlciwgdXBwZXI9dXBwZXIsIHN0ZXBfaW5jcj0xKQorICAgICAgICBzcGlubmVyID0gZ3RrLlNwaW5CdXR0b24oYWRqdXN0bWVudD1hZGp1c3QsIGNsaW1iX3JhdGU9MSwgZGlnaXRzPTApCisKKyAgICAgICAgc3Bpbm5lci5zZXRfdmFsdWUoY29udGVudCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNwaW5uZXIsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwLCBzZWxmKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGhib3guc2hvd19hbGwoKQorICAgICAgICByZXR1cm4gaGJveCwgc3Bpbm5lcgorCisgICAgZGVmIGdlbl9jb21ib193aWRnZXQoc2VsZiwgY3Vycl9pdGVtLCBhbGxfaXRlbSwgdG9vbHRpcD0iIik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGNvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIGhib3gucGFja19zdGFydChjb21ibywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGluZGV4ID0gMAorICAgICAgICBmb3IgaXRlbSBpbiBhbGxfaXRlbSBvciBbXToKKyAgICAgICAgICAgIGNvbWJvLmFwcGVuZF90ZXh0KGl0ZW0pCisgICAgICAgICAgICBpZiBpdGVtID09IGN1cnJfaXRlbToKKyAgICAgICAgICAgICAgICBjb21iby5zZXRfYWN0aXZlKGluZGV4KQorICAgICAgICAgICAgaW5kZXggKz0gMQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGhib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisgICAgICAgIHJldHVybiBoYm94LCBjb21ibworCisgICAgZGVmIGVudHJ5X3dpZGdldF9zZWxlY3RfcGF0aF9jYihzZWxmLCBhY3Rpb24sIHBhcmVudCwgZW50cnkpOgorICAgICAgICBkaWFsb2cgPSBndGsuRmlsZUNob29zZXJEaWFsb2coIiIsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NFTEVDVF9GT0xERVIpCisgICAgICAgIHRleHQgPSBlbnRyeS5nZXRfdGV4dCgpCisgICAgICAgIGRpYWxvZy5zZXRfY3VycmVudF9mb2xkZXIodGV4dCBpZiBsZW4odGV4dCkgPiAwIGVsc2Ugb3MuZ2V0Y3dkKCkpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT3BlbiIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgcGF0aCA9IGRpYWxvZy5nZXRfZmlsZW5hbWUoKQorICAgICAgICAgICAgZW50cnkuc2V0X3RleHQocGF0aCkKKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgZ2VuX2VudHJ5X3dpZGdldChzZWxmLCBjb250ZW50LCBwYXJlbnQsIHRvb2x0aXA9IiIsIG5lZWRfYnV0dG9uPVRydWUpOgorICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorICAgICAgICBlbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIGVudHJ5LnNldF90ZXh0KGNvbnRlbnQpCisgICAgICAgIGVudHJ5LnNldF9zaXplX3JlcXVlc3QoMzUwLDMwKQorCisgICAgICAgIGlmIG5lZWRfYnV0dG9uOgorICAgICAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMSwgMTAsIEZhbHNlKQorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKGVudHJ5LCAwLCA5LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UoKQorICAgICAgICAgICAgaW1hZ2Uuc2V0X2Zyb21fc3RvY2soZ3RrLlNUT0NLX09QRU4sZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgICAgICBvcGVuX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICAgICAgb3Blbl9idXR0b24uc2V0X2ltYWdlKGltYWdlKQorICAgICAgICAgICAgb3Blbl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZW50cnlfd2lkZ2V0X3NlbGVjdF9wYXRoX2NiLCBwYXJlbnQsIGVudHJ5KQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKG9wZW5fYnV0dG9uLCA5LCAxMCwgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhib3gucGFja19zdGFydChlbnRyeSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBpZiB0b29sdGlwICE9ICIiOgorICAgICAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKKyAgICAgICAgICAgIGhib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisgICAgICAgIHJldHVybiBoYm94LCBlbnRyeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NpbXBsZXNldHRpbmdzZGlhbG9nLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NpbXBsZXNldHRpbmdzZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZWIzZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2ltcGxlc2V0dGluZ3NkaWFsb2cucHkKQEAgLTAsMCArMSw4OTEgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgaGFzaGxpYgorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYkluZm9CdXR0b24sIEhvYkJ1dHRvbiwgSG9iQWx0QnV0dG9uIAorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2V0dGluZ3N1aWhlbHBlciBpbXBvcnQgU2V0dGluZ3NVSUhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnByb3h5ZGV0YWlsc2RpYWxvZyBpbXBvcnQgUHJveHlEZXRhaWxzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBTaW1wbGVTZXR0aW5nc0RpYWxvZyAoQ3J1bWJzRGlhbG9nLCBTZXR0aW5nc1VJSGVscGVyKToKKworICAgIChCVUlMRF9FTlZfUEFHRV9JRCwKKyAgICAgU0hBUkVEX1NUQVRFX1BBR0VfSUQsCisgICAgIFBST1hJRVNfUEFHRV9JRCwKKyAgICAgT1RIRVJTX1BBR0VfSUQpID0gcmFuZ2UoNCkKKworICAgIChURVNUX05FVFdPUktfTk9ORSwKKyAgICAgVEVTVF9ORVRXT1JLX0lOSVRJQUwsCisgICAgIFRFU1RfTkVUV09SS19SVU5OSU5HLAorICAgICBURVNUX05FVFdPUktfUEFTU0VELAorICAgICBURVNUX05FVFdPUktfRkFJTEVELAorICAgICBURVNUX05FVFdPUktfQ0FOQ0VMRUQpID0gcmFuZ2UoNikKKworICAgIFRBUkdFVFMgPSBbCisgICAgICAgICgiTVlfVFJFRV9NT0RFTF9ST1ciLCBndGsuVEFSR0VUX1NBTUVfV0lER0VULCAwKSwKKyAgICAgICAgKCJ0ZXh0L3BsYWluIiwgMCwgMSksCisgICAgICAgICgiVEVYVCIsIDAsIDIpLAorICAgICAgICAoIlNUUklORyIsIDAsIDMpLAorICAgICAgICBdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGNvbmZpZ3VyYXRpb24sIGFsbF9pbWFnZV90eXBlcywKKyAgICAgICAgICAgIGFsbF9wYWNrYWdlX2Zvcm1hdHMsIGFsbF9kaXN0cm9zLCBhbGxfc2RrX21hY2hpbmVzLAorICAgICAgICAgICAgbWF4X3RocmVhZHMsIHBhcmVudCwgZmxhZ3MsIGhhbmRsZXIsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFNpbXBsZVNldHRpbmdzRGlhbG9nLCBzZWxmKS5fX2luaXRfXyh0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucykKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZnJvbSBvdGhlciBvYmplY3RzCisgICAgICAgICMgYml0YmFrZSBzZXR0aW5ncyBmcm9tIEJ1aWxkZXIuQ29uZmlndXJhdGlvbgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXMgPSBhbGxfaW1hZ2VfdHlwZXMKKyAgICAgICAgc2VsZi5hbGxfcGFja2FnZV9mb3JtYXRzID0gYWxsX3BhY2thZ2VfZm9ybWF0cworICAgICAgICBzZWxmLmFsbF9kaXN0cm9zID0gYWxsX2Rpc3Ryb3MKKyAgICAgICAgc2VsZi5hbGxfc2RrX21hY2hpbmVzID0gYWxsX3Nka19tYWNoaW5lcworICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gbWF4X3RocmVhZHMKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZm9yIGludGVybmFsIHVzZQorICAgICAgICBzZWxmLmRsZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0ID0gW10KKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2NoYW5nZWQgPSAwCisgICAgICAgIHNlbGYuYmJfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5wbWFrZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLnJvb3Rmc19zaXplX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuZXh0cmFfc2l6ZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94ID0gTm9uZQorICAgICAgICBzZWxmLnRvb2xjaGFpbl9jaGVja2JveCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXR0aW5nX3N0b3JlID0gTm9uZQorICAgICAgICBzZWxmLmltYWdlX3R5cGVzX2NoZWNrYnV0dG9ucyA9IHt9CisKKyAgICAgICAgc2VsZi5tZDUgPSBzZWxmLmNvbmZpZ19tZDUoKQorICAgICAgICBzZWxmLnByb3h5X21kNSA9IHNlbGYuY29uZmlnX3Byb3h5X21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYucHJveHlfc2V0dGluZ3NfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3JhbiA9IEZhbHNlCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IDAKKyAgICAgICAgc2VsZi5uZXdfbWlycm9yID0gRmFsc2UKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBfZ2V0X3NvcnRlZF92YWx1ZShzZWxmLCB2YXIpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oc29ydGVkKHN0cih2YXIpLnNwbGl0KCkpKSArICJcbiIKKworICAgIGRlZiBjb25maWdfcHJveHlfbWQ1KHNlbGYpOgorICAgICAgICBkYXRhID0gKCJFTkFCTEVfUFJPWFk6ICIgICAgICAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSkpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHk6CisgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gc2VsZi5jb25maWd1cmF0aW9uLnByb3hpZXMua2V5cygpOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gKHByb3RvY29sICsgIjogIiArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkocHJvdG9jb2wpKSkKKyAgICAgICAgcmV0dXJuIGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKKyAgICBkZWYgY29uZmlnX21kNShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcua2V5cygpOgorICAgICAgICAgICAgZGF0YSArPSAoa2V5ICsgIjogIiArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmdba2V5XSkpCisgICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorCisgICAgZGVmIGdlbl9wcm94eV9lbnRyeV93aWRnZXQoc2VsZiwgcHJvdG9jb2wsIHBhcmVudCwgbmVlZF9idXR0b249VHJ1ZSwgbGluZT0wKToKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwocHJvdG9jb2wudXBwZXIoKSArICIgcHJveHkiKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChsYWJlbCwgMCwgMSwgbGluZSwgbGluZSsxLCB4cGFkZGluZz0yNCkKKworICAgICAgICBwcm94eV9lbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIHByb3h5X2VudHJ5LnNldF9zaXplX3JlcXVlc3QoMzAwLCAtMSkKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2gocHJveHlfZW50cnksIDEsIDIsIGxpbmUsIGxpbmUrMSwgeXBhZGRpbmc9NCkKKworICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChndGsuTGFiZWwoIjoiKSwgMiwgMywgbGluZSwgbGluZSsxLCB4cGFkZGluZz0xMiwgeXBhZGRpbmc9NCkKKworICAgICAgICBwb3J0X2VudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgcG9ydF9lbnRyeS5zZXRfc2l6ZV9yZXF1ZXN0KDYwLCAtMSkKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2gocG9ydF9lbnRyeSwgMywgNCwgbGluZSwgbGluZSsxLCB5cGFkZGluZz00KQorCisgICAgICAgIGRldGFpbHNfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJEZXRhaWxzIikKKyAgICAgICAgZGV0YWlsc19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZGV0YWlsc19jYiwgcGFyZW50LCBwcm90b2NvbCkKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2goZGV0YWlsc19idXR0b24sIDQsIDUsIGxpbmUsIGxpbmUrMSwgeHBhZGRpbmc9NCwgeW9wdGlvbnM9Z3RrLkVYUEFORCkKKworICAgICAgICByZXR1cm4gcHJveHlfZW50cnksIHBvcnRfZW50cnksIGRldGFpbHNfYnV0dG9uCisKKyAgICBkZWYgcmVmcmVzaF9wcm94eV9jb21wb25lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorCisgICAgICAgIHNlbGYuaHR0cF9wcm94eS5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImh0dHAiKSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzZWxmLmh0dHBfcHJveHkuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzZWxmLmh0dHBfcHJveHlfcG9ydC5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImh0dHAiKSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJodHRwcyIpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5odHRwc19wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X3BvcnQuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJodHRwcyIpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5odHRwc19wcm94eV9kZXRhaWxzLnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisKKyAgICAgICAgc2VsZi5mdHBfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJmdHAiKSkKKyAgICAgICAgc2VsZi5mdHBfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiZnRwIikpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKworICAgICAgICBzZWxmLnNvY2tzX3Byb3h5LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgic29ja3MiKSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eS5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuc29ja3NfcHJveHkuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgic29ja3MiKSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9wb3J0LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuc29ja3NfcHJveHlfZGV0YWlscy5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgiY3ZzIikpCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHkuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHlfcG9ydC5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImN2cyIpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9wb3J0LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHlfcG9ydC5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9kZXRhaWxzLnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHk6CisgICAgICAgICAgICBpZiBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKToKKyAgICAgICAgICAgICAgICBbdy5zZXRfdGV4dChzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlc10KKyAgICAgICAgICAgIGlmIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCk6CisgICAgICAgICAgICAgICAgW3cuc2V0X3RleHQoc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X3BvcnRzXQorCisgICAgZGVmIHByb3h5X2NoZWNrYm94X3RvZ2dsZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSA9IHNlbGYucHJveHlfY2hlY2tib3guZ2V0X2FjdGl2ZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5OgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LnNldF9hY3RpdmUoc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpCisgICAgICAgIHNlbGYuc2F2ZV9wcm94eV9kYXRhKCkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3Byb3h5X2NvbXBvbmVudHMoKQorCisgICAgZGVmIHNhbWVfY2hlY2tib3hfdG9nZ2xlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSA9IHNlbGYuc2FtZV9jaGVja2JveC5nZXRfYWN0aXZlKCkKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisKKyAgICBkZWYgc2F2ZV9wcm94eV9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImh0dHAiLCBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5OgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJodHRwcyIsIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zcGxpdF9wcm94eSgiZnRwIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJzb2NrcyIsIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zcGxpdF9wcm94eSgiY3ZzIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJodHRwcyIsIHNlbGYuaHR0cHNfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJmdHAiLCBzZWxmLmZ0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5mdHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJzb2NrcyIsIHNlbGYuc29ja3NfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuc29ja3NfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJjdnMiLCBzZWxmLmN2c19wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5jdnNfcHJveHlfcG9ydC5nZXRfdGV4dCgpKSAgICAgICAKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGlmIHNlbGYucHJveHlfY2hlY2tib3guZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBhbGwgcHJveHkgZW50cmllcyBoYXZlIGEgY29ycmVzcG9uZGluZyBwb3J0CisgICAgICAgICAgICAgICAgZm9yIHByb3h5LCBwb3J0IGluIHppcChzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXMsIHNlbGYuYWxsX3Byb3h5X3BvcnRzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJveHkuZ2V0X3RleHQoKSBhbmQgbm90IHBvcnQuZ2V0X3RleHQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5FbnRlciBhbGwgcG9ydCBudW1iZXJzPC9iPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJQcm94eSBzZXJ2ZXJzIHJlcXVpcmUgYSBwb3J0IG51bWJlci4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBlbnRlcmVkIGEgcG9ydCBudW1iZXIgZm9yIGVhY2ggcHJveHkgc2VydmVyLiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXRfc3RvcF9ieV9uYW1lKCJyZXNwb25zZSIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZGxkaXIgPSBzZWxmLmRsZGlyX3RleHQuZ2V0X3RleHQoKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlZGlyID0gc2VsZi5zc3RhdGVkaXJfdGV4dC5nZXRfdGV4dCgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVtaXJyb3IgPSAiIgorICAgICAgICBmb3IgbWlycm9yIGluIHNlbGYuc3N0YXRlbWlycm9yc19saXN0OgorICAgICAgICAgICAgaWYgbWlycm9yWzFdICE9ICIiIGFuZCBtaXJyb3JbMl0uc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgIHNtaXJyb3IgPSBtaXJyb3JbMl0gKyAiICIgKyBtaXJyb3JbMV0gKyAiIFxcbiAiCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZW1pcnJvciArPSBzbWlycm9yCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5iYnRocmVhZCA9IHNlbGYuYmJfc3Bpbm5lci5nZXRfdmFsdWVfYXNfaW50KCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnBtYWtlID0gc2VsZi5wbWFrZV9zcGlubmVyLmdldF92YWx1ZV9hc19pbnQoKQorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9zZXR0aW5nID0ge30KKyAgICAgICAgaXQgPSBzZWxmLnNldHRpbmdfc3RvcmUuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGtleSA9IHNlbGYuc2V0dGluZ19zdG9yZS5nZXRfdmFsdWUoaXQsIDApCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuc2V0dGluZ19zdG9yZS5nZXRfdmFsdWUoaXQsIDEpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZ1trZXldID0gdmFsdWUKKyAgICAgICAgICAgIGl0ID0gc2VsZi5zZXR0aW5nX3N0b3JlLml0ZXJfbmV4dChpdCkKKworICAgICAgICBtZDUgPSBzZWxmLmNvbmZpZ19tZDUoKQorICAgICAgICBzZWxmLnNldHRpbmdzX2NoYW5nZWQgPSAoc2VsZi5tZDUgIT0gbWQ1KQorICAgICAgICBzZWxmLnByb3h5X3NldHRpbmdzX2NoYW5nZWQgPSAoc2VsZi5wcm94eV9tZDUgIT0gc2VsZi5jb25maWdfcHJveHlfbWQ1KCkpCisKKyAgICBkZWYgY3JlYXRlX2J1aWxkX2Vudmlyb25tZW50X3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgnPHNwYW4gd2VpZ2h0PSJib2xkIj5QYXJhbGxlbCB0aHJlYWRzPC9zcGFuPicpLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiQml0QmFrZSBwYXJhbGxlbCB0aHJlYWRzIikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXRzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0aGF0IEJpdEJha2UgdGFza3MgY2FuIHNpbXVsdGFuZW91c2x5IHJ1bi4gU2VlIHRoZSA8YSBocmVmPVwiIgorICAgICAgICB0b29sdGlwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC8iCisgICAgICAgIHRvb2x0aXAgKz0gInBva3ktcmVmLW1hbnVhbC5odG1sI3Zhci1CQl9OVU1CRVJfVEhSRUFEU1wiPlBva3kgcmVmZXJlbmNlIG1hbnVhbDwvYT4gZm9yIGluZm9ybWF0aW9uIgorICAgICAgICBiYnRocmVhZF93aWRnZXQsIHNlbGYuYmJfc3Bpbm5lciA9IHNlbGYuZ2VuX3NwaW5uZXJfd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5iYnRocmVhZCwgMSwgc2VsZi5tYXhfdGhyZWFkcywiPGI+Qml0QmFrZSBwcmFsbGFsZWwgdGhyZWFkczwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGJidGhyZWFkX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiTWFrZSBwYXJhbGxlbCB0aHJlYWRzIikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRoZSBob3N0IGNhbiB1c2UgZHVyaW5nIHRoZSBidWlsZC4gU2VlIHRoZSA8YSBocmVmPVwiIgorICAgICAgICB0b29sdGlwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC8iCisgICAgICAgIHRvb2x0aXAgKz0gInBva3ktcmVmLW1hbnVhbC5odG1sI3Zhci1QQVJBTExFTF9NQUtFXCI+UG9reSByZWZlcmVuY2UgbWFudWFsPC9hPiBmb3IgaW5mb3JtYXRpb24iCisgICAgICAgIHBtYWtlX3dpZGdldCwgc2VsZi5wbWFrZV9zcGlubmVyID0gc2VsZi5nZW5fc3Bpbm5lcl93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLnBtYWtlLCAxLCBzZWxmLm1heF90aHJlYWRzLCI8Yj5NYWtlIHBhcmFsbGVsIHRocmVhZHM8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChwbWFrZV93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPkRvd25sb2FkZWQgc291cmNlIGNvZGU8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJEb3dubG9hZHMgZGlyZWN0b3J5IikKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgYSBmb2xkZXIgdGhhdCBjYWNoZXMgdGhlIHVwc3RyZWFtIHByb2plY3Qgc291cmNlIGNvZGUiCisgICAgICAgIGRsZGlyX3dpZGdldCwgc2VsZi5kbGRpcl90ZXh0ID0gc2VsZi5nZW5fZW50cnlfd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5kbGRpciwgc2VsZiwiPGI+RG93bmxvYWRlZCBzb3VyY2UgY29kZTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGRsZGlyX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgY3JlYXRlX3NoYXJlZF9zdGF0ZV9wYWdlKHNlbGYpOgorICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCgxMikKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0yNCkKKyAgICAgICAgY29udGVudCA9ICI8c3Bhbj5TaGFyZWQgc3RhdGUgZGlyZWN0b3J5PC9zcGFuPiIKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgYSBmb2xkZXIgdGhhdCBjYWNoZXMgeW91ciBwcmVidWlsdCByZXN1bHRzIgorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX2luZm9fd2lkZ2V0KGNvbnRlbnQsIjxiPlNoYXJlZCBzdGF0ZSBkaXJlY3Rvcnk8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHNzdGF0ZWRpcl93aWRnZXQsIHNlbGYuc3N0YXRlZGlyX3RleHQgPSBzZWxmLmdlbl9lbnRyeV93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZWRpciwgc2VsZikKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNzdGF0ZWRpcl93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorCisgICAgICAgIGNvbnRlbnQgPSAiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlNoYXJlZCBzdGF0ZSBtaXJyb3JzPC9zcGFuPiIKKyAgICAgICAgdG9vbHRpcCA9ICJVUkxzIHBvaW50aW5nIHRvIHByZS1idWlsdCBtaXJyb3JzIHRoYXQgd2lsbCBzcGVlZCB5b3VyIGJ1aWxkLiAiCisgICAgICAgIHRvb2x0aXAgKz0gIlNlbGVjdCB0aGUgXCdTdGFuZGFyZFwnIGNvbmZpZ3VyYXRpb24gaWYgdGhlIHN0cnVjdHVyZSBvZiB5b3VyICIKKyAgICAgICAgdG9vbHRpcCArPSAibWlycm9yIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB5b3VyIGxvY2FsIHNoYXJlZCBzdGF0ZSBkaXJlY3RvcnkuICIKKyAgICAgICAgdG9vbHRpcCArPSAiRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2hhcmVkIHN0YXRlIG1pcnJvcnMsIGNoZWNrIHRoZSA8YSBocmVmPVwiIgorICAgICAgICB0b29sdGlwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3Bva3ktcmVmLW1hbnVhbC8iCisgICAgICAgIHRvb2x0aXAgKz0gInBva3ktcmVmLW1hbnVhbC5odG1sI3NoYXJlZC1zdGF0ZVwiPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvYT4uIgorICAgICAgICB0YWJsZSA9IHNlbGYuZ2VuX2xhYmVsX2luZm9fd2lkZ2V0KGNvbnRlbnQsIjxiPlNoYXJlZCBzdGF0ZSBtaXJyb3JzPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZ3RrLlRSVUUsIGd0ay5UUlVFLCAwKQorCisgICAgICAgIGlmIHNlbGYuc3N0YXRlbWlycm9yc19jaGFuZ2VkID09IDA6CisgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfY2hhbmdlZCA9IDEKKyAgICAgICAgICAgIHNzdGF0ZW1pcnJvcnMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlbWlycm9yCisgICAgICAgICAgICBpZiBzc3RhdGVtaXJyb3JzID09ICIiOgorICAgICAgICAgICAgICAgIHNtX2xpc3QgPSBbIlN0YW5kYXJkIiwgIiIsICJmaWxlOi8vKC4qKSJdCisgICAgICAgICAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QuYXBwZW5kKHNtX2xpc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNzdGF0ZW1pcnJvcnMgPSBbeCBmb3IgeCBpbiBzc3RhdGVtaXJyb3JzLnNwbGl0KCdcXG4nKV0KKyAgICAgICAgICAgICAgICBmb3Igc3N0YXRlbWlycm9yIGluIHNzdGF0ZW1pcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHNzdGF0ZW1pcnJvcl9maWVsZHMgPSBbeCBmb3IgeCBpbiBzc3RhdGVtaXJyb3Iuc3BsaXQoJyAnKSBpZiB4LnN0cmlwKCldCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzc3RhdGVtaXJyb3JfZmllbGRzKSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3N0YXRlbWlycm9yX2ZpZWxkc1swXSA9PSAiZmlsZTovLyguKikiIG9yIHNzdGF0ZW1pcnJvcl9maWVsZHNbMF0gPT0gImZpbGU6Ly8uKiI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21fbGlzdCA9IFsiU3RhbmRhcmQiLCBzc3RhdGVtaXJyb3JfZmllbGRzWzFdLCBzc3RhdGVtaXJyb3JfZmllbGRzWzBdXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbV9saXN0ID0gWyJDdXN0b20iLCBzc3RhdGVtaXJyb3JfZmllbGRzWzFdLCBzc3RhdGVtaXJyb3JfZmllbGRzWzBdXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QuYXBwZW5kKHNtX2xpc3QpCisKKyAgICAgICAgc3N0YXRlbWlycm9yc193aWRnZXQsIHNzdGF0ZW1pcnJvcnNfc3RvcmUgPSBzZWxmLmdlbl9zaGFyZWRfc3N0YXRlX3dpZGdldChzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdCwgc2VsZikKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzc3RhdGVtaXJyb3JzX3dpZGdldCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgRmFsc2UpCisgICAgICAgIHRhYmxlLnNldF9jb2xfc3BhY2luZ3MoNikKKyAgICAgICAgYWRkX21pcnJvcl9idXR0b24gPSBIb2JBbHRCdXR0b24oIkFkZCBtaXJyb3IiKQorICAgICAgICBhZGRfbWlycm9yX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5hZGRfbWlycm9yKQorICAgICAgICBhZGRfbWlycm9yX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDEyMCwzMCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGFkZF9taXJyb3JfYnV0dG9uLCAxLCAyLCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorCisgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiRGVsZXRlIG1pcnJvciIpCisgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5kZWxldGVfY2IpCisgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDEyMCwgMzApCisgICAgICAgIHRhYmxlLmF0dGFjaChzZWxmLmRlbGV0ZV9idXR0b24sIDMsIDQsIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9NikKKworICAgICAgICByZXR1cm4gYWR2YW5jZWRfdmJveAorCisgICAgZGVmIGdlbl9zaGFyZWRfc3N0YXRlX3dpZGdldChzZWxmLCBzc3RhdGVtaXJyb3JzX2xpc3QsIHdpbmRvdyk6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSkKKworICAgICAgICBzc3RhdGVtaXJyb3JzX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShzdHIsIHN0ciwgc3RyKQorICAgICAgICBmb3Igc3N0YXRlbWlycm9yIGluIHNzdGF0ZW1pcnJvcnNfbGlzdDoKKyAgICAgICAgICAgIHNzdGF0ZW1pcnJvcnNfc3RvcmUuYXBwZW5kKHNzdGF0ZW1pcnJvcikKKworICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYgPSBndGsuVHJlZVZpZXcoKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X3J1bGVzX2hpbnQoVHJ1ZSkKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LnNldF9oZWFkZXJzX3Zpc2libGUoVHJ1ZSkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfc2VsZWN0aW9uLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgQWxsb3cgZW5hYmxlIGRyYWcgYW5kIGRyb3Agb2Ygcm93cyBpbmNsdWRpbmcgcm93IG1vdmUKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmVuYWJsZV9tb2RlbF9kcmFnX3NvdXJjZSggZ3RrLmdkay5CVVRUT04xX01BU0ssCisgICAgICAgICAgICBzZWxmLlRBUkdFVFMsCisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9ERUZBVUxUfAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fTU9WRSkKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmVuYWJsZV9tb2RlbF9kcmFnX2Rlc3Qoc2VsZi5UQVJHRVRTLAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fREVGQVVMVCkKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9nZXQiLCBzZWxmLmRyYWdfZGF0YV9nZXRfY2IpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5jb25uZWN0KCJkcmFnX2RhdGFfcmVjZWl2ZWQiLCBzZWxmLmRyYWdfZGF0YV9yZWNlaXZlZF9jYikKKworCisgICAgICAgIHNlbGYuc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2VsZi5zY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2VsZi5zY3JvbGwuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgIHNlbGYuc2Nyb2xsLmNvbm5lY3QoJ3NpemUtYWxsb2NhdGUnLCBzZWxmLnNjcm9sbF9jaGFuZ2VkKQorICAgICAgICBzZWxmLnNjcm9sbC5hZGQoc2VsZi5zc3RhdGVtaXJyb3JzX3R2KQorCisgICAgICAgICNsaXN0IHN0b3JlIGZvciBjZWxsIHJlbmRlcmVyCisgICAgICAgIG0gPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIG0uYXBwZW5kKFsiU3RhbmRhcmQiXSkKKyAgICAgICAgbS5hcHBlbmQoWyJDdXN0b20iXSkKKworICAgICAgICBjZWxsMCA9IGd0ay5DZWxsUmVuZGVyZXJDb21ibygpCisgICAgICAgIGNlbGwwLnNldF9wcm9wZXJ0eSgibW9kZWwiLG0pCisgICAgICAgIGNlbGwwLnNldF9wcm9wZXJ0eSgidGV4dC1jb2x1bW4iLCAwKQorICAgICAgICBjZWxsMC5zZXRfcHJvcGVydHkoImVkaXRhYmxlIiwgVHJ1ZSkKKyAgICAgICAgY2VsbDAuc2V0X3Byb3BlcnR5KCJoYXMtZW50cnkiLCBGYWxzZSkKKyAgICAgICAgY29sMCA9IGd0ay5UcmVlVmlld0NvbHVtbigiQ29uZmlndXJhdGlvbiIpCisgICAgICAgIGNvbDAucGFja19zdGFydChjZWxsMCwgRmFsc2UpCisgICAgICAgIGNvbDAuYWRkX2F0dHJpYnV0ZShjZWxsMCwgInRleHQiLCAwKQorICAgICAgICBjb2wwLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMCwgc2VsZi5jb25maWd1cmF0aW9uX2ZpZWxkKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuYXBwZW5kX2NvbHVtbihjb2wwKQorCisgICAgICAgIGNlbGwwLmNvbm5lY3QoImVkaXRlZCIsIHNlbGYuY29tYm9fY2hhbmdlZCwgc3N0YXRlbWlycm9yc19zdG9yZSkKKworICAgICAgICBzZWxmLmNlbGwxID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBzZWxmLmNlbGwxLnNldF9wYWRkaW5nKDUsMikKKyAgICAgICAgY29sMSA9IGd0ay5UcmVlVmlld0NvbHVtbignUmVnZXgnLCBzZWxmLmNlbGwxKQorICAgICAgICBjb2wxLnNldF9jZWxsX2RhdGFfZnVuYyhzZWxmLmNlbGwxLCBzZWxmLnJlZ2V4X2ZpZWxkKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuYXBwZW5kX2NvbHVtbihjb2wxKQorCisgICAgICAgIHNlbGYuY2VsbDEuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5yZWdleF9jaGFuZ2VkLCBzc3RhdGVtaXJyb3JzX3N0b3JlKQorCisgICAgICAgIGNlbGwyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBjZWxsMi5zZXRfcGFkZGluZyg1LDIpCisgICAgICAgIGNlbGwyLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBUcnVlKQorICAgICAgICBjb2wyID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdVUkwnLCBjZWxsMikKKyAgICAgICAgY29sMi5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbDIsIHNlbGYudXJsX2ZpZWxkKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuYXBwZW5kX2NvbHVtbihjb2wyKQorCisgICAgICAgIGNlbGwyLmNvbm5lY3QoImVkaXRlZCIsIHNlbGYudXJsX2NoYW5nZWQsIHNzdGF0ZW1pcnJvcnNfc3RvcmUpCisKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LnNldF9tb2RlbChzc3RhdGVtaXJyb3JzX3N0b3JlKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X2N1cnNvcihzZWxmLnNlbGVjdGVkX21pcnJvcl9yb3cpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnNjcm9sbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisKKyAgICAgICAgcmV0dXJuIGhib3gsIHNzdGF0ZW1pcnJvcnNfc3RvcmUKKworICAgIGRlZiBkcmFnX2RhdGFfZ2V0X2NiKHNlbGYsIHRyZWV2aWV3LCBjb250ZXh0LCBzZWxlY3Rpb24sIHRhcmdldF9pZCwgZXRpbWUpOgorICAgICAgICB0cmVlc2VsZWN0aW9uID0gdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIG1vZGVsLCBpdGVyID0gdHJlZXNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBkYXRhID0gbW9kZWwuZ2V0X3N0cmluZ19mcm9tX2l0ZXIoaXRlcikKKyAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3Rpb24udGFyZ2V0LCA4LCBkYXRhKQorCisgICAgZGVmIGRyYWdfZGF0YV9yZWNlaXZlZF9jYihzZWxmLCB0cmVldmlldywgY29udGV4dCwgeCwgeSwgc2VsZWN0aW9uLCBpbmZvLCBldGltZSk6CisgICAgICAgIG1vZGVsID0gdHJlZXZpZXcuZ2V0X21vZGVsKCkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIHRyZWVfaXRlciA9IG1vZGVsLmdldF9pdGVyX2Zyb21fc3RyaW5nKHNlbGVjdGlvbi5kYXRhKQorICAgICAgICBkYXRhLmFwcGVuZChtb2RlbC5nZXRfdmFsdWUodHJlZV9pdGVyLCAwKSkKKyAgICAgICAgZGF0YS5hcHBlbmQobW9kZWwuZ2V0X3ZhbHVlKHRyZWVfaXRlciwgMSkpCisgICAgICAgIGRhdGEuYXBwZW5kKG1vZGVsLmdldF92YWx1ZSh0cmVlX2l0ZXIsIDIpKQorCisgICAgICAgIGRyb3BfaW5mbyA9IHRyZWV2aWV3LmdldF9kZXN0X3Jvd19hdF9wb3MoeCwgeSkKKyAgICAgICAgaWYgZHJvcF9pbmZvOgorICAgICAgICAgICAgcGF0aCwgcG9zaXRpb24gPSBkcm9wX2luZm8KKyAgICAgICAgICAgIGl0ZXIgPSBtb2RlbC5nZXRfaXRlcihwYXRoKQorICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IGd0ay5UUkVFX1ZJRVdfRFJPUF9CRUZPUkUgb3IgcG9zaXRpb24gPT0gZ3RrLlRSRUVfVklFV19EUk9QX0lOVE9fT1JfQkVGT1JFKToKKyAgICAgICAgICAgICAgICBtb2RlbC5pbnNlcnRfYmVmb3JlKGl0ZXIsIGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydF9hZnRlcihpdGVyLCBkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kZWwuYXBwZW5kKGRhdGEpCisgICAgICAgIGlmIGNvbnRleHQuYWN0aW9uID09IGd0ay5nZGsuQUNUSU9OX01PVkU6CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaChUcnVlLCBUcnVlLCBldGltZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZGVsZXRlX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGVjdGlvbiA9IHNlbGYuc3N0YXRlbWlycm9yc190di5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgdHJlZV9tb2RlbCwgdHJlZV9pdGVyID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGluZGV4ID0gaW50KHRyZWVfbW9kZWwuZ2V0X3N0cmluZ19mcm9tX2l0ZXIodHJlZV9pdGVyKSkKKyAgICAgICAgaWYgaW5kZXggPT0gMDoKKyAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IGluZGV4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlbGVjdGVkX21pcnJvcl9yb3cgPSBpbmRleCAtIDEKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QucG9wKGluZGV4KQorICAgICAgICBzZWxmLnJlZnJlc2hfc2hhcmVkX3N0YXRlX3BhZ2UoKQorICAgICAgICBpZiBub3Qgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKworICAgIGRlZiBhZGRfbWlycm9yKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYubmV3X21pcnJvciA9IFRydWUKKyAgICAgICAgdG9vbHRpcCA9ICJTZWxlY3QgdGhlIHByZS1idWlsdCBtaXJyb3IgdGhhdCB3aWxsIHNwZWVkIHlvdXIgYnVpbGQiCisgICAgICAgIGluZGV4ID0gbGVuKHNlbGYuc3N0YXRlbWlycm9yc19saXN0KQorICAgICAgICBzZWxmLnNlbGVjdGVkX21pcnJvcl9yb3cgPSBpbmRleAorICAgICAgICBzbV9saXN0ID0gWyJTdGFuZGFyZCIsICIiLCAiZmlsZTovLyguKikiXQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5hcHBlbmQoc21fbGlzdCkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3NoYXJlZF9zdGF0ZV9wYWdlKCkKKworICAgIGRlZiBzY3JvbGxfY2hhbmdlZChzZWxmLCB3aWRnZXQsIGV2ZW50LCBkYXRhPU5vbmUpOgorICAgICAgICBpZiBzZWxmLm5ld19taXJyb3IgPT0gVHJ1ZToKKyAgICAgICAgICAgIGFkaiA9IHdpZGdldC5nZXRfdmFkanVzdG1lbnQoKQorICAgICAgICAgICAgYWRqLnNldF92YWx1ZShhZGoudXBwZXIgLSBhZGoucGFnZV9zaXplKQorICAgICAgICAgICAgc2VsZi5uZXdfbWlycm9yID0gRmFsc2UKKworICAgIGRlZiBjb21ib19jaGFuZ2VkKHNlbGYsIHdpZGdldCwgcGF0aCwgdGV4dCwgbW9kZWwpOgorICAgICAgICBtb2RlbFtwYXRoXVswXSA9IHRleHQKKyAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaW5kZXggPSBpbnQodHJlZV9tb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcih0cmVlX2l0ZXIpKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdFtpbmRleF1bMF0gPSB0ZXh0CisKKyAgICBkZWYgcmVnZXhfY2hhbmdlZChzZWxmLCBjZWxsLCBwYXRoLCBuZXdfdGV4dCwgdXNlcl9kYXRhKToKKyAgICAgICAgdXNlcl9kYXRhW3BhdGhdWzJdID0gbmV3X3RleHQKKyAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaW5kZXggPSBpbnQodHJlZV9tb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcih0cmVlX2l0ZXIpKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdFtpbmRleF1bMl0gPSBuZXdfdGV4dAorICAgICAgICByZXR1cm4KKworICAgIGRlZiB1cmxfY2hhbmdlZChzZWxmLCBjZWxsLCBwYXRoLCBuZXdfdGV4dCwgdXNlcl9kYXRhKToKKyAgICAgICAgaWYgbmV3X3RleHQhPSJFbnRlciB0aGUgbWlycm9yIFVSTCIgYW5kIG5ld190ZXh0IT0iTWF0Y2ggcmVnZXggYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGlzIFVSTCI6CisgICAgICAgICAgICB1c2VyX2RhdGFbcGF0aF1bMV0gPSBuZXdfdGV4dAorICAgICAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICAgICAgdHJlZV9tb2RlbCwgdHJlZV9pdGVyID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgICAgICBpbmRleCA9IGludCh0cmVlX21vZGVsLmdldF9zdHJpbmdfZnJvbV9pdGVyKHRyZWVfaXRlcikpCisgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdFtpbmRleF1bMV0gPSBuZXdfdGV4dAorICAgICAgICByZXR1cm4KKworICAgIGRlZiBjb25maWd1cmF0aW9uX2ZpZWxkKHNlbGYsIGNvbHVtbiwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKSkKKyAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApID09ICJTdGFuZGFyZCI6CisgICAgICAgICAgICBzZWxmLmNlbGwxLnNldF9wcm9wZXJ0eSgic2Vuc2l0aXZlIiwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmNlbGwxLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2VsbDEuc2V0X3Byb3BlcnR5KCJzZW5zaXRpdmUiLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5jZWxsMS5zZXRfcHJvcGVydHkoImVkaXRhYmxlIiwgVHJ1ZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcmVnZXhfZmllbGQoc2VsZiwgY29sdW1uLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDIpKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB1cmxfZmllbGQoc2VsZiwgY29sdW1uLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIHRleHQgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMSkKKyAgICAgICAgaWYgdGV4dCA9PSAiIjoKKyAgICAgICAgICAgIGlmIG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKSA9PSAiU3RhbmRhcmQiOgorICAgICAgICAgICAgICAgIHRleHQgPSAiRW50ZXIgdGhlIG1pcnJvciBVUkwiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRleHQgPSAiTWF0Y2ggcmVnZXggYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGlzIFVSTCIKKyAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3RleHQnLCB0ZXh0KQorICAgICAgICByZXR1cm4KKworICAgIGRlZiByZWZyZXNoX3NoYXJlZF9zdGF0ZV9wYWdlKHNlbGYpOgorICAgICAgICBwYWdlX251bSA9IHNlbGYubmIuZ2V0X2N1cnJlbnRfcGFnZSgpCisgICAgICAgIHNlbGYubmIucmVtb3ZlX3BhZ2UocGFnZV9udW0pOworICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuY3JlYXRlX3NoYXJlZF9zdGF0ZV9wYWdlKCksIGd0ay5MYWJlbCgiU2hhcmVkIHN0YXRlIikscGFnZV9udW0pCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UocGFnZV9udW0pCisKKyAgICBkZWYgdGVzdF9wcm94eV9lbmRlZChzZWxmLCBwYXNzZWQpOgorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfUEFTU0VEIGlmIHBhc3NlZCBlbHNlIHNlbGYuVEVTVF9ORVRXT1JLX0ZBSUxFRCkKKyAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKworICAgIGRlZiB0aW1lcl9mdW5jKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfcHJveHlfcHJvZ3Jlc3MucHVsc2UoKQorICAgICAgICByZXR1cm4gc2VsZi5wcm94eV90ZXN0X3J1bm5pbmcKKworICAgIGRlZiB0ZXN0X25ldHdvcmtfYnV0dG9uX2NiKHNlbGYsIGIpOgorICAgICAgICBzZWxmLnNldF90ZXN0X3Byb3h5X3N0YXRlKHNlbGYuVEVTVF9ORVRXT1JLX1JVTk5JTkcpCisgICAgICAgIHNlbGYuc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IFRydWU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHAiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cHNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHBzIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Z0cF9wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiZnRwIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NvY2tzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJzb2NrcyIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9jdnNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSwgc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSkKKyAgICAgICAgZWxpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IEZhbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZnRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zb2Nrc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfY3ZzX3Byb3h5KCIiLCAiIikKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3JhbiA9IFRydWUKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3J1bm5pbmcgPSBUcnVlCisgICAgICAgIGdvYmplY3QudGltZW91dF9hZGQoMTAwLCBzZWxmLnRpbWVyX2Z1bmMpCisgICAgICAgIHNlbGYuaGFuZGxlci50cmlnZ2VyX25ldHdvcmtfdGVzdCgpCisKKyAgICBkZWYgdGVzdF9wcm94eV9mb2N1c19ldmVudChzZWxmLCB3LCBkaXJlY3Rpb24pOgorICAgICAgICBpZiBzZWxmLnRlc3RfcHJveHlfc3RhdGUgaW4gW3NlbGYuVEVTVF9ORVRXT1JLX1BBU1NFRCwgc2VsZi5URVNUX05FVFdPUktfRkFJTEVEXToKKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfSU5JVElBTCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaHR0cF9wcm94eV9jaGFuZ2VkKHNlbGYsIGUpOgorICAgICAgICBpZiBub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZSA9PSBzZWxmLmh0dHBfcHJveHk6CisgICAgICAgICAgICBbdy5zZXRfdGV4dChzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlc10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFt3LnNldF90ZXh0KHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpIGZvciB3IGluIHNlbGYuc2FtZV9wcm94eV9wb3J0c10KKworICAgIGRlZiBwcm94eV9hZGRyZXNzX2ZvY3VzX291dF9ldmVudChzZWxmLCB3LCBkaXJlY3Rpb24pOgorICAgICAgICB0ZXh0ID0gdy5nZXRfdGV4dCgpCisgICAgICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHRleHQuZmluZCgiLy8iKSA9PSAtMToKKyAgICAgICAgICAgIHcuc2V0X3RleHQoImh0dHA6Ly8iICsgdGV4dCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgICBpZiBzZWxmLnRlc3RfcHJveHlfc3RhdGUgPT0gc3RhdGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgW3NlbGYucHJveHlfdGFibGUucmVtb3ZlKHcpIGZvciB3IGluIHNlbGYudGVzdF9ndWlfZWxlbWVudHNdCisgICAgICAgIGlmIHN0YXRlID09IHNlbGYuVEVTVF9ORVRXT1JLX0lOSVRJQUw6CisgICAgICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChzZWxmLnRlc3RfbmV0d29ya19idXR0b24sIDEsIDIsIDUsIDYpCisgICAgICAgICAgICBzZWxmLnRlc3RfbmV0d29ya19idXR0b24uc2hvdygpCisgICAgICAgIGVsaWYgc3RhdGUgPT0gc2VsZi5URVNUX05FVFdPUktfUlVOTklORzoKKyAgICAgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5zZXRfcmNzdHlsZSgicnVubmluZyIpCisgICAgICAgICAgICBzZWxmLnRlc3RfcHJveHlfcHJvZ3Jlc3Muc2V0X3RleHQoIlRlc3RpbmcgbmV0d29yayBjb25maWd1cmF0aW9uIikKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcywgMCwgNSwgNSwgNiwgeHBhZGRpbmc9NCkKKyAgICAgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5zaG93KCkKKyAgICAgICAgZWxzZTogIyBwYXNzZWQgb3IgZmFpbGVkCisgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnVwZGF0ZSgxLjApCisgICAgICAgICAgICBpZiBzdGF0ZSA9PSBzZWxmLlRFU1RfTkVUV09SS19QQVNTRUQ6CisgICAgICAgICAgICAgICAgc2VsZi5kdW1teV9wcm9ncmVzcy5zZXRfdGV4dCgiWW91ciBuZXR3b3JrIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQiKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2V0X3Jjc3R5bGUoInJ1bm5pbmciKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnNldF90ZXh0KCJOZXR3b3JrIHRlc3QgZmFpbGVkIikKKyAgICAgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnNldF9yY3N0eWxlKCJmYWlsIikKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYuZHVtbXlfcHJvZ3Jlc3MsIDAsIDQsIDUsIDYpCisgICAgICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbiwgNCwgNSwgNSwgNiwgeHBhZGRpbmc9NCkKKyAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2hvdygpCisgICAgICAgICAgICBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbi5zaG93KCkKKyAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3N0YXRlID0gc3RhdGUKKworICAgIGRlZiBjcmVhdGVfbmV0d29ya19wYWdlKHNlbGYpOgorICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCg2KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzID0gW10KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzID0gW10KKyAgICAgICAgc2VsZi5hbGxfcHJveHlfcG9ydHMgPSBbXQorICAgICAgICBzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXMgPSBbXQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlNldCB0aGUgcHJveGllcyB1c2VkIHdoZW4gZmV0Y2hpbmcgc291cmNlIGNvZGU8L3NwYW4+IikKKyAgICAgICAgdG9vbHRpcCA9ICJTZXQgdGhlIHByb3hpZXMgdXNlZCB3aGVuIGZldGNoaW5nIHNvdXJjZSBjb2RlLiAgQSBibGFuayBmaWVsZCB1c2VzIGEgZGlyZWN0IGludGVybmV0IGNvbm5lY3Rpb24uIgorICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbigiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPlNldCB0aGUgcHJveGllcyB1c2VkIHdoZW4gZmV0Y2hpbmcgc291cmNlIGNvZGU8L3NwYW4+IiArICIqIiArIHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGhib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyA9IFtdCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94ID0gZ3RrLlJhZGlvQnV0dG9uKE5vbmUsICJEaXJlY3QgbmV0d29yayBjb25uZWN0aW9uIikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cy5hcHBlbmQoc2VsZi5kaXJlY3RfY2hlY2tib3gpCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94LnNldF90b29sdGlwX3RleHQoIkNoZWNrIHRoaXMgYm94IHRvIHVzZSBhIGRpcmVjdCBpbnRlcm5ldCBjb25uZWN0aW9uIHdpdGggbm8gcHJveHkiKQorICAgICAgICBzZWxmLmRpcmVjdF9jaGVja2JveC5zZXRfYWN0aXZlKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYuZGlyZWN0X2NoZWNrYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveCA9IGd0ay5SYWRpb0J1dHRvbihzZWxmLmRpcmVjdF9jaGVja2JveCwgIk1hbnVhbCBwcm94eSBjb25maWd1cmF0aW9uIikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cy5hcHBlbmQoc2VsZi5wcm94eV9jaGVja2JveCkKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveC5zZXRfdG9vbHRpcF90ZXh0KCJDaGVjayB0aGlzIGJveCB0byBtYW51YWxseSBzZXQgdXAgYSBzcGVjaWZpYyBwcm94eSIpCisgICAgICAgIHNlbGYucHJveHlfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNlbGYucHJveHlfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3ggPSBndGsuQ2hlY2tCdXR0b24oIlVzZSB0aGUgSFRUUCBwcm94eSBmb3IgYWxsIHByb3RvY29scyIpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMuYXBwZW5kKHNlbGYuc2FtZV9jaGVja2JveCkKKyAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LnNldF90b29sdGlwX3RleHQoIkNoZWNrIHRoaXMgYm94IHRvIHVzZSB0aGUgSFRUUCBwcm94eSBmb3IgYWxsIGZpdmUgcHJveGllcyIpCisgICAgICAgIHNlbGYuc2FtZV9jaGVja2JveC5zZXRfYWN0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KQorICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc2VsZi5zYW1lX2NoZWNrYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MjQpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYucHJveHlfdGFibGUgPSBndGsuVGFibGUoNiwgNSwgRmFsc2UpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eSwgc2VsZi5odHRwX3Byb3h5X3BvcnQsIHNlbGYuaHR0cF9wcm94eV9kZXRhaWxzID0gc2VsZi5nZW5fcHJveHlfZW50cnlfd2lkZ2V0KAorICAgICAgICAgICAgImh0dHAiLCBzZWxmLCBUcnVlLCAwKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzICs9W3NlbGYuaHR0cF9wcm94eSwgc2VsZi5odHRwX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuaHR0cF9wcm94eS5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5odHRwX3Byb3h5X2NoYW5nZWQpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eV9wb3J0LmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLmh0dHBfcHJveHlfY2hhbmdlZCkKKworICAgICAgICBzZWxmLmh0dHBzX3Byb3h5LCBzZWxmLmh0dHBzX3Byb3h5X3BvcnQsIHNlbGYuaHR0cHNfcHJveHlfZGV0YWlscyA9IHNlbGYuZ2VuX3Byb3h5X2VudHJ5X3dpZGdldCgKKyAgICAgICAgICAgICJodHRwcyIsIHNlbGYsIFRydWUsIDEpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz0gW3NlbGYuaHR0cHNfcHJveHksIHNlbGYuaHR0cHNfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlcy5hcHBlbmQoc2VsZi5odHRwc19wcm94eSkKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzLmFwcGVuZChzZWxmLmh0dHBzX3Byb3h5X3BvcnQpCisKKyAgICAgICAgc2VsZi5mdHBfcHJveHksIHNlbGYuZnRwX3Byb3h5X3BvcnQsIHNlbGYuZnRwX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAiZnRwIiwgc2VsZiwgVHJ1ZSwgMikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyArPSBbc2VsZi5mdHBfcHJveHksIHNlbGYuZnRwX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMuYXBwZW5kKHNlbGYuZnRwX3Byb3h5KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMuYXBwZW5kKHNlbGYuZnRwX3Byb3h5X3BvcnQpCisKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eSwgc2VsZi5zb2Nrc19wcm94eV9wb3J0LCBzZWxmLnNvY2tzX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAic29ja3MiLCBzZWxmLCBUcnVlLCAzKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzICs9IFtzZWxmLnNvY2tzX3Byb3h5LCBzZWxmLnNvY2tzX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMuYXBwZW5kKHNlbGYuc29ja3NfcHJveHkpCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9wb3J0cy5hcHBlbmQoc2VsZi5zb2Nrc19wcm94eV9wb3J0KQorCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5LCBzZWxmLmN2c19wcm94eV9wb3J0LCBzZWxmLmN2c19wcm94eV9kZXRhaWxzID0gc2VsZi5nZW5fcHJveHlfZW50cnlfd2lkZ2V0KAorICAgICAgICAgICAgImN2cyIsIHNlbGYsIFRydWUsIDQpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz0gW3NlbGYuY3ZzX3Byb3h5LCBzZWxmLmN2c19wcm94eV9wb3J0XQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzLmFwcGVuZChzZWxmLmN2c19wcm94eSkKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzLmFwcGVuZChzZWxmLmN2c19wcm94eV9wb3J0KQorICAgICAgICBzZWxmLmFsbF9wcm94eV9wb3J0cyA9IHNlbGYuc2FtZV9wcm94eV9wb3J0cyArIFtzZWxmLmh0dHBfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5hbGxfcHJveHlfYWRkcmVzc2VzID0gc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3NlcyArIFtzZWxmLmh0dHBfcHJveHldCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5wcm94eV90YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLnNob3dfYWxsKCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgZ3JhcGhpY2FsIGVsZW1lbnRzIGZvciB0aGUgbmV0d29yayB0ZXN0IGZlYXR1cmUsIGJ1dCBkb24ndCBkaXNwbGF5IHRoZW0geWV0CisgICAgICAgIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiVGVzdCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24iKQorICAgICAgICBzZWxmLnRlc3RfbmV0d29ya19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiUmV0ZXN0IikKKyAgICAgICAgc2VsZi5yZXRlc3RfbmV0d29ya19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi50ZXN0X2d1aV9lbGVtZW50cyA9IFtzZWxmLnRlc3RfbmV0d29ya19idXR0b24sIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcywgc2VsZi5kdW1teV9wcm9ncmVzcywgc2VsZi5yZXRlc3RfbmV0d29ya19idXR0b25dCisgICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgbmV0d29yayB0ZXN0ZXIKKyAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3N0YXRlID0gc2VsZi5URVNUX05FVFdPUktfTk9ORQorICAgICAgICBzZWxmLnNldF90ZXN0X3Byb3h5X3N0YXRlKHNlbGYuVEVTVF9ORVRXT1JLX0lOSVRJQUwpCisgICAgICAgIHNlbGYucHJveHlfdGVzdF9wYXNzZWRfaWQgPSBzZWxmLmhhbmRsZXIuY29ubmVjdCgibmV0d29yay1wYXNzZWQiLCBsYW1iZGEgaDpzZWxmLnRlc3RfcHJveHlfZW5kZWQoVHJ1ZSkpCisgICAgICAgIHNlbGYucHJveHlfdGVzdF9mYWlsZWRfaWQgPSBzZWxmLmhhbmRsZXIuY29ubmVjdCgibmV0d29yay1mYWlsZWQiLCBsYW1iZGEgaDpzZWxmLnRlc3RfcHJveHlfZW5kZWQoRmFsc2UpKQorICAgICAgICBbdy5jb25uZWN0KCJmb2N1cy1pbi1ldmVudCIsIHNlbGYudGVzdF9wcm94eV9mb2N1c19ldmVudCkgZm9yIHcgaW4gcHJveHlfdGVzdF9mb2N1c10KKyAgICAgICAgW3cuY29ubmVjdCgiZm9jdXMtb3V0LWV2ZW50Iiwgc2VsZi5wcm94eV9hZGRyZXNzX2ZvY3VzX291dF9ldmVudCkgZm9yIHcgaW4gc2VsZi5hbGxfcHJveHlfYWRkcmVzc2VzXQorCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94LmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnByb3h5X2NoZWNrYm94X3RvZ2dsZWRfY2IpCisgICAgICAgIHNlbGYucHJveHlfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYucHJveHlfY2hlY2tib3hfdG9nZ2xlZF9jYikKKyAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnNhbWVfY2hlY2tib3hfdG9nZ2xlZF9jYikKKworICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgc3dpdGNoX3RvX3BhZ2Uoc2VsZiwgcGFnZV9pZCk6CisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShwYWdlX2lkKQorCisgICAgZGVmIGRldGFpbHNfY2Ioc2VsZiwgYnV0dG9uLCBwYXJlbnQsIHByb3RvY29sKToKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBkaWFsb2cgPSBQcm94eURldGFpbHNEaWFsb2codGl0bGUgPSBwcm90b2NvbC51cHBlcigpICsgIiBQcm94eSBEZXRhaWxzIiwKKyAgICAgICAgICAgIHVzZXIgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMV0sCisgICAgICAgICAgICBwYXNzd2QgPSBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0sCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgZGlhbG9nLmFkZF9idXR0b24oZ3RrLlNUT0NLX0NMT1NFLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSA9IGRpYWxvZy51c2VyCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllc1twcm90b2NvbF1bMl0gPSBkaWFsb2cucGFzc3dkCisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkgICAgCisKKyAgICBkZWYgcm9vdGZzX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgcm9vdGZzX2NvbWJvLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpOgorICAgICAgICBjb21ib19pdGVtID0gc2VsZi5yb290ZnNfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgZm9yIGNoaWxkIGluIGNoZWNrX2hib3guZ2V0X2NoaWxkcmVuKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBndGsuQ2hlY2tCdXR0b24pOgorICAgICAgICAgICAgICAgIGNoZWNrX2hib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICBmb3IgZm9ybWF0IGluIGFsbF9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIGlmIGZvcm1hdCAhPSBjb21ib19pdGVtOgorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbiA9IGd0ay5DaGVja0J1dHRvbihmb3JtYXQpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBjaGVja19oYm94LnNob3dfYWxsKCkKKworICAgIGRlZiBnZW5fcGtnZm10X3dpZGdldChzZWxmLCBjdXJyX3BhY2thZ2VfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm89IiIsIHRvb2x0aXBfZXh0cmE9IiIpOgorICAgICAgICBwa2dmbXRfaGJveCA9IGd0ay5IQm94KEZhbHNlLCAyNCkKKworICAgICAgICByb290ZnNfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBwa2dmbXRfaGJveC5wYWNrX3N0YXJ0KHJvb3Rmc192Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIlJvb3QgZmlsZSBzeXN0ZW0gcGFja2FnZSBmb3JtYXQiKQorICAgICAgICByb290ZnNfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdCA9ICIiCisgICAgICAgIGlmIGN1cnJfcGFja2FnZV9mb3JtYXQ6CisgICAgICAgICAgICByb290ZnNfZm9ybWF0ID0gY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpWzBdCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdF93aWRnZXQsIHJvb3Rmc19jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChyb290ZnNfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm8pCisgICAgICAgIHJvb3Rmc192Ym94LnBhY2tfc3RhcnQocm9vdGZzX2Zvcm1hdF93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBleHRyYV92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIHBrZ2ZtdF9oYm94LnBhY2tfc3RhcnQoZXh0cmFfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJBZGRpdGlvbmFsIHBhY2thZ2UgZm9ybWF0cyIpCisgICAgICAgIGV4dHJhX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGNoZWNrX2hib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGV4dHJhX3Zib3gucGFja19zdGFydChjaGVja19oYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IHJvb3Rmc19mb3JtYXQ6CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBpc19hY3RpdmUgPSAoZm9ybWF0IGluIGN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICBjaGVja19idXR0b24uc2V0X2FjdGl2ZShpc19hY3RpdmUpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXBfZXh0cmEsIHNlbGYpCisgICAgICAgIGNoZWNrX2hib3gucGFja19lbmQoaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJvb3Rmc19jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5yb290ZnNfY29tYm9fY2hhbmdlZF9jYiwgYWxsX3BhY2thZ2VfZm9ybWF0LCBjaGVja19oYm94KQorCisgICAgICAgIHBrZ2ZtdF9oYm94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gcGtnZm10X2hib3gsIHJvb3Rmc19jb21ibywgY2hlY2tfaGJveAorCisgICAgZGVmIGVkaXRhYmxlX3NldHRpbmdzX2NlbGxfZWRpdGVkKHNlbGYsIGNlbGwsIHBhdGhfc3RyaW5nLCBuZXdfdGV4dCwgbW9kZWwpOgorICAgICAgICBpdCA9IG1vZGVsLmdldF9pdGVyX2Zyb21fc3RyaW5nKHBhdGhfc3RyaW5nKQorICAgICAgICBjb2x1bW4gPSBjZWxsLmdldF9kYXRhKCJjb2x1bW4iKQorICAgICAgICBtb2RlbC5zZXQoaXQsIGNvbHVtbiwgbmV3X3RleHQpCisKKyAgICBkZWYgZWRpdGFibGVfc2V0dGluZ3NfYWRkX2l0ZW1fY2xpY2tlZChzZWxmLCBidXR0b24sIG1vZGVsKToKKyAgICAgICAgbmV3X2l0ZW0gPSBbIiMjS0VZIyMiLCAiIyNWQUxVRSMjIl0KKworICAgICAgICBpdGVyID0gbW9kZWwuYXBwZW5kKCkKKyAgICAgICAgbW9kZWwuc2V0IChpdGVyLAorICAgICAgICAgICAgMCwgbmV3X2l0ZW1bMF0sCisgICAgICAgICAgICAxLCBuZXdfaXRlbVsxXSwKKyAgICAgICApCisKKyAgICBkZWYgZWRpdGFibGVfc2V0dGluZ3NfcmVtb3ZlX2l0ZW1fY2xpY2tlZChzZWxmLCBidXR0b24sIHRyZWV2aWV3KToKKyAgICAgICAgc2VsZWN0aW9uID0gdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIG1vZGVsLCBpdGVyID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisKKyAgICAgICAgaWYgaXRlcjoKKyAgICAgICAgICAgIHBhdGggPSBtb2RlbC5nZXRfcGF0aChpdGVyKVswXQorICAgICAgICAgICAgbW9kZWwucmVtb3ZlKGl0ZXIpCisgCisgICAgZGVmIGdlbl9lZGl0YWJsZV9zZXR0aW5ncyhzZWxmLCBzZXR0aW5nLCB0b29sdGlwPSIiKToKKyAgICAgICAgc2V0dGluZ19oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEyKQorCisgICAgICAgIHZib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNldHRpbmdfaGJveC5wYWNrX3N0YXJ0KHZib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2V0dGluZ19zdG9yZSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgZm9yIGtleSBpbiBzZXR0aW5nLmtleXMoKToKKyAgICAgICAgICAgIHNldHRpbmdfc3RvcmUuc2V0KHNldHRpbmdfc3RvcmUuYXBwZW5kKCksIDAsIGtleSwgMSwgc2V0dGluZ1trZXldKQorCisgICAgICAgIHNldHRpbmdfdHJlZSA9IGd0ay5UcmVlVmlldyhzZXR0aW5nX3N0b3JlKQorICAgICAgICBzZXR0aW5nX3RyZWUuc2V0X2hlYWRlcnNfdmlzaWJsZShUcnVlKQorICAgICAgICBzZXR0aW5nX3RyZWUuc2V0X3NpemVfcmVxdWVzdCgzMDAsIDEwMCkKKworICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ0tleScpCisgICAgICAgIGNvbC5zZXRfbWluX3dpZHRoKDEwMCkKKyAgICAgICAgY29sLnNldF9tYXhfd2lkdGgoMTUwKQorICAgICAgICBjb2wuc2V0X3Jlc2l6YWJsZShUcnVlKQorICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdWYWx1ZScpCisgICAgICAgIGNvbDEuc2V0X21pbl93aWR0aCgxMDApCisgICAgICAgIGNvbDEuc2V0X21heF93aWR0aCgxNTApCisgICAgICAgIGNvbDEuc2V0X3Jlc2l6YWJsZShUcnVlKQorICAgICAgICBzZXR0aW5nX3RyZWUuYXBwZW5kX2NvbHVtbihjb2wpCisgICAgICAgIHNldHRpbmdfdHJlZS5hcHBlbmRfY29sdW1uKGNvbDEpCisgICAgICAgIGNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd3aWR0aC1jaGFycycsIDEwKQorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnZWRpdGFibGUnLCBUcnVlKQorICAgICAgICBjZWxsLnNldF9kYXRhKCJjb2x1bW4iLCAwKQorICAgICAgICBjZWxsLmNvbm5lY3QoImVkaXRlZCIsIHNlbGYuZWRpdGFibGVfc2V0dGluZ3NfY2VsbF9lZGl0ZWQsIHNldHRpbmdfc3RvcmUpCisgICAgICAgIGNlbGwxID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBjZWxsMS5zZXRfcHJvcGVydHkoJ3dpZHRoLWNoYXJzJywgMTApCisgICAgICAgIGNlbGwxLnNldF9wcm9wZXJ0eSgnZWRpdGFibGUnLCBUcnVlKQorICAgICAgICBjZWxsMS5zZXRfZGF0YSgiY29sdW1uIiwgMSkKKyAgICAgICAgY2VsbDEuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5lZGl0YWJsZV9zZXR0aW5nc19jZWxsX2VkaXRlZCwgc2V0dGluZ19zdG9yZSkKKyAgICAgICAgY29sLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgY29sMS5wYWNrX2VuZChjZWxsMSwgVHJ1ZSkKKyAgICAgICAgY29sLnNldF9hdHRyaWJ1dGVzKGNlbGwsIHRleHQ9MCkKKyAgICAgICAgY29sMS5zZXRfYXR0cmlidXRlcyhjZWxsMSwgdGV4dD0xKQorCisgICAgICAgIHNjcm9sbCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGwuYWRkKHNldHRpbmdfdHJlZSkKKyAgICAgICAgdmJveC5wYWNrX3N0YXJ0KHNjcm9sbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIHNvbWUgYnV0dG9ucworICAgICAgICBoYm94ID0gZ3RrLkhCb3goVHJ1ZSwgNikKKyAgICAgICAgdmJveC5wYWNrX3N0YXJ0KGhib3gsIEZhbHNlLCBGYWxzZSkKKworICAgICAgICBidXR0b24gPSBndGsuQnV0dG9uKHN0b2NrPWd0ay5TVE9DS19BREQpCisgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0YWJsZV9zZXR0aW5nc19hZGRfaXRlbV9jbGlja2VkLCBzZXR0aW5nX3N0b3JlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoYnV0dG9uKQorCisgICAgICAgIGJ1dHRvbiA9IGd0ay5CdXR0b24oc3RvY2s9Z3RrLlNUT0NLX1JFTU9WRSkKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRhYmxlX3NldHRpbmdzX3JlbW92ZV9pdGVtX2NsaWNrZWQsIHNldHRpbmdfdHJlZSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGJ1dHRvbikKKworICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwLCBzZWxmKQorICAgICAgICBzZXR0aW5nX2hib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcmV0dXJuIHNldHRpbmdfaGJveCwgc2V0dGluZ19zdG9yZQorCisgICAgZGVmIGNyZWF0ZV9vdGhlcnNfcGFnZShzZWxmKToKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+QWRkIHlvdXIgb3duIHZhcmlhYmxlczo8L3NwYW4+IikKKyAgICAgICAgdG9vbHRpcCA9ICJUaGVzZSBhcmUga2V5L3ZhbHVlIHBhaXJzIGZvciB5b3VyIGV4dHJhIHNldHRpbmdzLiBDbGljayBcJ0FkZFwnIGFuZCB0aGVuIGRpcmVjdGx5IGVkaXQgdGhlIGtleSBhbmQgdGhlIHZhbHVlIgorICAgICAgICBzZXR0aW5nX3dpZGdldCwgc2VsZi5zZXR0aW5nX3N0b3JlID0gc2VsZi5nZW5fZWRpdGFibGVfc2V0dGluZ3Moc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcsIjxiPkFkZCB5b3VyIG93biB2YXJpYWJsZXM8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzZXR0aW5nX3dpZGdldCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICByZXR1cm4gYWR2YW5jZWRfdmJveAorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYubmIgPSBndGsuTm90ZWJvb2soKQorICAgICAgICBzZWxmLm5iLnNldF9zaG93X3RhYnMoVHJ1ZSkgICAgICAgIAorICAgICAgICBzZWxmLm5iLmFwcGVuZF9wYWdlKHNlbGYuY3JlYXRlX2J1aWxkX2Vudmlyb25tZW50X3BhZ2UoKSwgZ3RrLkxhYmVsKCJCdWlsZCBlbnZpcm9ubWVudCIpKQorICAgICAgICBzZWxmLm5iLmFwcGVuZF9wYWdlKHNlbGYuY3JlYXRlX3NoYXJlZF9zdGF0ZV9wYWdlKCksIGd0ay5MYWJlbCgiU2hhcmVkIHN0YXRlIikpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfbmV0d29ya19wYWdlKCksIGd0ay5MYWJlbCgiTmV0d29yayIpKSAgICAgICAgCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfb3RoZXJzX3BhZ2UoKSwgZ3RrLkxhYmVsKCJPdGhlcnMiKSkKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKDApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubmIsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYudmJveC5wYWNrX2VuZChndGsuSFNlcGFyYXRvcigpLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGRlc3Ryb3koc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci5kaXNjb25uZWN0KHNlbGYucHJveHlfdGVzdF9wYXNzZWRfaWQpCisgICAgICAgIHNlbGYuaGFuZGxlci5kaXNjb25uZWN0KHNlbGYucHJveHlfdGVzdF9mYWlsZWRfaWQpCisgICAgICAgIHN1cGVyKFNpbXBsZVNldHRpbmdzRGlhbG9nLCBzZWxmKS5kZXN0cm95KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iY29sb3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxNjU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5CkBAIC0wLDAgKzEsMzggQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitjbGFzcyBIb2JDb2xvcnM6CisgICAgV0hJVEUgICAgICAgID0gIiNmZmZmZmYiCisgICAgUEFMRV9HUkVFTiAgID0gIiNhYWZmYWEiCisgICAgT1JBTkdFICAgICAgID0gIiNlYjhlNjgiCisgICAgUEFMRV9SRUQgICAgID0gIiNmZmFhYWEiCisgICAgR1JBWSAgICAgICAgID0gIiNhYWFhYWEiCisgICAgTElHSFRfR1JBWSAgID0gIiNkZGRkZGQiCisgICAgU0xJR0hUX0RBUksgID0gIiM1ZjVmNWYiCisgICAgREFSSyAgICAgICAgID0gIiMzYzNiMzciCisgICAgQkxBQ0sgICAgICAgID0gIiMwMDAwMDAiCisgICAgUEFMRV9CTFVFICAgID0gIiM1M2I4ZmYiCisgICAgREVFUF9SRUQgICAgID0gIiNhYTNlM2UiCisgICAgS0hBS0kgICAgICAgID0gIiNmZmY2OGYiCisKKyAgICBPSyA9IFdISVRFCisgICAgUlVOTklORyA9IFBBTEVfR1JFRU4KKyAgICBXQVJOSU5HID0gT1JBTkdFCisgICAgRVJST1IgPSBQQUxFX1JFRApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iZXZlbnRoYW5kbGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iZXZlbnRoYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JldmVudGhhbmRsZXIucHkKQEAgLTAsMCArMSw2NDUgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXN0Citmcm9tIGJiLnVpLmNydW1icy5ydW5uaW5nYnVpbGQgaW1wb3J0IFJ1bm5pbmdCdWlsZAorCitjbGFzcyBIb2JIYW5kbGVyKGdvYmplY3QuR09iamVjdCk6CisKKyAgICAiIiIKKyAgICBUaGlzIG9iamVjdCBkb2VzIEJpdEJha2UgZXZlbnQgaGFuZGxpbmcgZm9yIHRoZSBob2IgZ3VpLgorICAgICIiIgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgICJwYWNrYWdlLWZvcm1hdHMtdXBkYXRlZCIgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAiY29uZmlnLXVwZGF0ZWQiICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgImNvbW1hbmQtc3VjY2VlZGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9JTlQsKSksCisgICAgICAgICAiY29tbWFuZC1mYWlsZWQiICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywpKSwKKyAgICAgICAgICJwYXJzaW5nLXdhcm5pbmciICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpLAorICAgICAgICAgInNhbml0eS1mYWlsZWQiICAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsIGdvYmplY3QuVFlQRV9JTlQpKSwKKyAgICAgICAgICJnZW5lcmF0aW5nLWRhdGEiICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJkYXRhLWdlbmVyYXRlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJwYXJzaW5nLXN0YXJ0ZWQiICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAicGFyc2luZyIgICAgICAgICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgInBhcnNpbmctY29tcGxldGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJyZWNpcGUtcG9wdWxhdGVkIiAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJwYWNrYWdlLXBvcHVsYXRlZCIgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJuZXR3b3JrLXBhc3NlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICJuZXR3b3JrLWZhaWxlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICB9CisKKyAgICAoR0VORVJBVEVfQ09ORklHVVJBVElPTiwgR0VORVJBVEVfUkVDSVBFUywgR0VORVJBVEVfUEFDS0FHRVMsIEdFTkVSQVRFX0lNQUdFLCBQT1BVTEFURV9QQUNLQUdFSU5GTywgU0FOSVRZX0NIRUNLLCBORVRXT1JLX1RFU1QpID0gcmFuZ2UoNykKKyAgICAoU1VCX1BBVEhfTEFZRVJTLCBTVUJfRklMRVNfRElTVFJPLCBTVUJfRklMRVNfTUFDSCwgU1VCX0ZJTEVTX1NES01BQ0gsIFNVQl9NQVRDSF9DTEFTUywgU1VCX1BBUlNFX0NPTkZJRywgU1VCX1NBTklUWV9DSEVDSywKKyAgICAgU1VCX0dORVJBVEVfVEdUUywgU1VCX0dFTkVSQVRFX1BLR0lORk8sIFNVQl9CVUlMRF9SRUNJUEVTLCBTVUJfQlVJTERfSU1BR0UsIFNVQl9ORVRXT1JLX1RFU1QpID0gcmFuZ2UoMTIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCByZWNpcGVfbW9kZWwsIHBhY2thZ2VfbW9kZWwpOgorICAgICAgICBzdXBlcihIb2JIYW5kbGVyLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAgc2VsZi5idWlsZCA9IFJ1bm5pbmdCdWlsZChzZXF1ZW50aWFsPVRydWUpCisKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSByZWNpcGVfbW9kZWwKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsID0gcGFja2FnZV9tb2RlbAorCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMgPSBbXQorICAgICAgICBzZWxmLmdlbmVyYXRpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSBOb25lCisgICAgICAgIHNlbGYuYnVpbGRpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLnJlY2lwZV9xdWV1ZSA9IFtdCisgICAgICAgIHNlbGYucGFja2FnZV9xdWV1ZSA9IFtdCisKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5lcnJvcl9tc2cgPSAiIgorICAgICAgICBzZWxmLmluaXRjbWQgPSBOb25lCisgICAgICAgIHNlbGYucGFyc2luZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0X2J1c3koc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmdlbmVyYXRpbmc6CisgICAgICAgICAgICBzZWxmLmVtaXQoImdlbmVyYXRpbmctZGF0YSIpCisgICAgICAgICAgICBzZWxmLmdlbmVyYXRpbmcgPSBUcnVlCisKKyAgICBkZWYgY2xlYXJfYnVzeShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZW5lcmF0aW5nOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJkYXRhLWdlbmVyYXRlZCIpCisgICAgICAgICAgICBzZWxmLmdlbmVyYXRpbmcgPSBGYWxzZQorCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZGxpbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQsIGVycm9yID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChjb21tYW5kbGluZSkKKyAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjb21tYW5kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jID0gW10KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgICAgICBzZWxmLmVtaXQoImNvbW1hbmQtZmFpbGVkIiwgIkhvYiBFeGNlcHRpb24gLSAlcyIgJSAoc3RyKGUpKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcnVuX25leHRfY29tbWFuZChzZWxmLCBpbml0Y21kPU5vbmUpOgorICAgICAgICBpZiBpbml0Y21kICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLmluaXRjbWQgPSBpbml0Y21kCisKKyAgICAgICAgaWYgc2VsZi5jb21tYW5kc19hc3luYzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2J1c3koKQorICAgICAgICAgICAgbmV4dF9jb21tYW5kID0gc2VsZi5jb21tYW5kc19hc3luYy5wb3AoMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgICAgICBpZiBzZWxmLmluaXRjbWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImNvbW1hbmQtc3VjY2VlZGVkIiwgc2VsZi5pbml0Y21kKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX1BBVEhfTEFZRVJTOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVQYXRoIiwgImJibGF5ZXJzLmNvbmYiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfRklMRVNfRElTVFJPOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVzIiwgIkRJU1RSTyJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9GSUxFU19NQUNIOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVzIiwgIk1BQ0hJTkUiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfRklMRVNfU0RLTUFDSDoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImZpbmRDb25maWdGaWxlcyIsICJNQUNISU5FLVNESyJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9NQVRDSF9DTEFTUzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImZpbmRGaWxlc01hdGNoaW5nSW5EaXIiLCAicm9vdGZzXyIsICJjbGFzc2VzIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX1BBUlNFX0NPTkZJRzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInJlc2V0Q29va2VyIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0dORVJBVEVfVEdUUzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImdlbmVyYXRlVGFyZ2V0c1RyZWUiLCAiY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIiwgW11dKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9HRU5FUkFURV9QS0dJTkZPOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsidHJpZ2dlckV2ZW50IiwgImJiLmV2ZW50LlJlcXVlc3RQYWNrYWdlSW5mbygpIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX1NBTklUWV9DSEVDSzoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInRyaWdnZXJFdmVudCIsICJiYi5ldmVudC5TYW5pdHlDaGVjaygpIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX05FVFdPUktfVEVTVDoKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInRyaWdnZXJFdmVudCIsICJiYi5ldmVudC5OZXR3b3JrVGVzdCgpIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0JVSUxEX1JFQ0lQRVM6CisgICAgICAgICAgICBzZWxmLmNsZWFyX2J1c3koKQorICAgICAgICAgICAgc2VsZi5idWlsZGluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImJ1aWxkVGFyZ2V0cyIsIHNlbGYucmVjaXBlX3F1ZXVlLCBzZWxmLmRlZmF1bHRfdGFza10pCisgICAgICAgICAgICBzZWxmLnJlY2lwZV9xdWV1ZSA9IFtdCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0JVSUxEX0lNQUdFOgorICAgICAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRpbmcgPSBUcnVlCisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmltYWdlCisKKyAgICAgICAgICAgIGlmIHNlbGYuYmFzZV9pbWFnZToKKyAgICAgICAgICAgICAgICAjIFJlcXVlc3QgdGhlIGJ1aWxkIG9mIGEgY3VzdG9tIGltYWdlCisgICAgICAgICAgICAgICAgc2VsZi5nZW5lcmF0ZV9ob2JfYmFzZV9pbWFnZSh0YXJnZXQpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkxJTkdVQVNfSU5TVEFMTCIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICAgICAgaG9iSW1hZ2UgPSBzZWxmLnJ1bkNvbW1hbmQoWyJtYXRjaEZpbGUiLCB0YXJnZXQgKyAiLmJiIl0pCisgICAgICAgICAgICAgICAgaWYgc2VsZi5iYXNlX2ltYWdlICE9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgICAgIGJhc2VJbWFnZSA9IHNlbGYucnVuQ29tbWFuZChbIm1hdGNoRmlsZSIsIHNlbGYuYmFzZV9pbWFnZSArICIuYmIiXSkKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYucnVuQ29tbWFuZChbImdlbmVyYXRlTmV3SW1hZ2UiLCBob2JJbWFnZSwgYmFzZUltYWdlLCBzZWxmLnBhY2thZ2VfcXVldWUsIFRydWUsICIiXSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ICs9IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc2V0X2N1c3RvbV9pbWFnZV92ZXJzaW9uKHZlcnNpb24pCisKKyAgICAgICAgICAgIHRhcmdldHMgPSBbdGFyZ2V0XQorICAgICAgICAgICAgaWYgc2VsZi50b29sY2hhaW5fcGFja2FnZXM6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyIsICIgIi5qb2luKHNlbGYudG9vbGNoYWluX3BhY2thZ2VzKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHRhcmdldCArICI6ZG9fcG9wdWxhdGVfc2RrIikKKworICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiYnVpbGRUYXJnZXRzIiwgdGFyZ2V0cywgc2VsZi5kZWZhdWx0X3Rhc2tdKQorCisgICAgZGVmIGRpc3BsYXlfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgIHNlbGYuZW1pdCgiY29tbWFuZC1mYWlsZWQiLCBzZWxmLmVycm9yX21zZykKKyAgICAgICAgc2VsZi5lcnJvcl9tc2cgPSAiIgorICAgICAgICBpZiBzZWxmLmJ1aWxkaW5nOgorICAgICAgICAgICAgc2VsZi5idWlsZGluZyA9IEZhbHNlCisKKyAgICBkZWYgaGFuZGxlX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2ZW50OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuYnVpbGRpbmc6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSAiYnVpbGRpbmciCisgICAgICAgICAgICBzZWxmLmJ1aWxkLmhhbmRsZV9ldmVudChldmVudCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYWNrYWdlSW5mbyk6CisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwucG9wdWxhdGUoZXZlbnQuX3BrZ2luZm9saXN0KQorICAgICAgICAgICAgc2VsZi5lbWl0KCJwYWNrYWdlLXBvcHVsYXRlZCIpCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQpOgorICAgICAgICAgICAgcmVwYXJzZSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0lOVkFMSURDT05GIl0pIG9yIE5vbmUKKyAgICAgICAgICAgIGlmIHJlcGFyc2UgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5wcmVwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZCgpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5TYW5pdHlDaGVja0ZhaWxlZCk6CisgICAgICAgICAgICBzZWxmLmVtaXQoInNhbml0eS1mYWlsZWQiLCBldmVudC5fbXNnLCBldmVudC5fbmV0d29ya19lcnJvcikKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkaW5nOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gbG9nZ2luZy5FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCkKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gZm9ybWF0dGVyLmZvcm1hdChldmVudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9tc2cgKz0gbXNnICsgJ1xuJworICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLldBUk5JTkcgYW5kIHNlbGYucGFyc2luZyA9PSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoKQorICAgICAgICAgICAgICAgICAgICBtc2cgPSBmb3JtYXR0ZXIuZm9ybWF0KGV2ZW50KQorICAgICAgICAgICAgICAgICAgICB3YXJuX21zZyA9IG1zZyArICdcbicKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJwYXJzaW5nLXdhcm5pbmciLCB3YXJuX21zZykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkKToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJkYXRhIGdlbmVyYXRpb24iCisgICAgICAgICAgICBpZiBldmVudC5fbW9kZWw6CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwucG9wdWxhdGUoZXZlbnQuX21vZGVsKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgicmVjaXBlLXBvcHVsYXRlZCIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZCk6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSAiY29uZmlndXJhdGlvbiBsb29rdXAiCisgICAgICAgICAgICB2YXIgPSBldmVudC5fdmFyaWFibGUKKyAgICAgICAgICAgIHZhbHVlcyA9IGV2ZW50Ll92YWx1ZXMKKyAgICAgICAgICAgIHZhbHVlcy5zb3J0KCkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiY29uZmlnLXVwZGF0ZWQiLCB2YXIsIHZhbHVlcykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kKToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJjb25maWd1cmF0aW9uIGxvb2t1cCIKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5GaWxlc01hdGNoaW5nRm91bmQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gImNvbmZpZ3VyYXRpb24gbG9va3VwIgorICAgICAgICAgICAgIyBGSVhNRTogaGFyZCBjb2RpbmcsIHNob3VsZCBhdCBsZWFzdCBiZSBhIHZhcmlhYmxlIHNoYXJlZCBiZXR3ZWVuCisgICAgICAgICAgICAjIGhlcmUgYW5kIHRoZSBjYWxsZXIKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9wYXR0ZXJuID09ICJyb290ZnNfIjoKKyAgICAgICAgICAgICAgICBmb3JtYXRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgbWF0Y2ggaW4gZXZlbnQuX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZSwgc2VwLCBjbHMgPSBtYXRjaC5ycGFydGl0aW9uKCIuIikKKyAgICAgICAgICAgICAgICAgICAgZnMsIHNlcCwgZm9ybWF0ID0gY2xhc3NuYW1lLnJwYXJ0aXRpb24oIl8iKQorICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLmFwcGVuZChmb3JtYXQpCisgICAgICAgICAgICAgICAgZm9ybWF0cy5zb3J0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoInBhY2thZ2UtZm9ybWF0cy11cGRhdGVkIiwgZm9ybWF0cykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3Igbm90IGluICgiRm9yY2VkIHNodXRkb3duIiwgIlN0b3BwZWQgYnVpbGQiKToKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yX21zZyArPSBldmVudC5lcnJvcgorICAgICAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYyA9IFtdCisgICAgICAgICAgICBzZWxmLmRpc3BsYXlfZXJyb3IoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5QYXJzZVN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkLAorICAgICAgICAgICAgICAgICApKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB7fQorICAgICAgICAgICAgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgICAgICAgICAgbWVzc2FnZVsiY3VycmVudCJdID0gMAorICAgICAgICAgICAgbWVzc2FnZVsidG90YWwiXSA9IE5vbmUKKyAgICAgICAgICAgIG1lc3NhZ2VbInRpdGxlIl0gPSAiUGFyc2luZyByZWNpcGVzIgorICAgICAgICAgICAgc2VsZi5lbWl0KCJwYXJzaW5nLXN0YXJ0ZWQiLCBtZXNzYWdlKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNpbmcgPSBUcnVlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzKSk6CisgICAgICAgICAgICBtZXNzYWdlID0ge30KKyAgICAgICAgICAgIG1lc3NhZ2VbImV2ZW50bmFtZSJdID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICAgICAgICAgIG1lc3NhZ2VbImN1cnJlbnQiXSA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgIG1lc3NhZ2VbInRvdGFsIl0gPSBldmVudC50b3RhbAorICAgICAgICAgICAgbWVzc2FnZVsidGl0bGUiXSA9ICJQYXJzaW5nIHJlY2lwZXMiCisgICAgICAgICAgICBzZWxmLmVtaXQoInBhcnNpbmciLCBtZXNzYWdlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQsCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZCkpOgorICAgICAgICAgICAgbWVzc2FnZSA9IHt9CisgICAgICAgICAgICBtZXNzYWdlWyJldmVudG5hbWUiXSA9IGJiLmV2ZW50LmdldE5hbWUoZXZlbnQpCisgICAgICAgICAgICBtZXNzYWdlWyJjdXJyZW50Il0gPSBldmVudC50b3RhbAorICAgICAgICAgICAgbWVzc2FnZVsidG90YWwiXSA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBtZXNzYWdlWyJ0aXRsZSJdID0gIlBhcnNpbmcgcmVjaXBlcyIKKyAgICAgICAgICAgIHNlbGYuZW1pdCgicGFyc2luZy1jb21wbGV0ZWQiLCBtZXNzYWdlKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2luZyA9IEZhbHNlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTmV0d29ya1Rlc3RGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJuZXR3b3JrLWZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk5ldHdvcmtUZXN0UGFzc2VkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibmV0d29yay1wYXNzZWQiKQorICAgICAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKCkKKworICAgICAgICBpZiBzZWxmLmVycm9yX21zZyBhbmQgbm90IHNlbGYuY29tbWFuZHNfYXN5bmM6CisgICAgICAgICAgICBzZWxmLmRpc3BsYXlfZXJyb3IoKQorCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGluaXRfY29va2VyKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJjcmVhdGVDb25maWdGaWxlIiwgIi5ob2IuY29uZiJdKQorCisgICAgZGVmIHNldF9leHRyYV9pbmhlcml0KHNlbGYsIGJiY2xhc3MpOgorICAgICAgICBzZWxmLmFwcGVuZF92YXJfaW5fZmlsZSgiSU5IRVJJVCIsIGJiY2xhc3MsICIuaG9iLmNvbmYiKQorCisgICAgZGVmIHNldF9iYmxheWVycyhzZWxmLCBiYmxheWVycyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJCQkxBWUVSUyIsICIgIi5qb2luKGJibGF5ZXJzKSwgImJibGF5ZXJzLmNvbmYiKQorCisgICAgZGVmIHNldF9tYWNoaW5lKHNlbGYsIG1hY2hpbmUpOgorICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgc2VsZi5lYXJseV9hc3NpZ25fdmFyX2luX2ZpbGUoIk1BQ0hJTkUiLCBtYWNoaW5lLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X3Nka19tYWNoaW5lKHNlbGYsIHNka19tYWNoaW5lKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlNES01BQ0hJTkUiLCBzZGtfbWFjaGluZSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9pbWFnZV9mc3R5cGVzKHNlbGYsIGltYWdlX2ZzdHlwZXMpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfRlNUWVBFUyIsIGltYWdlX2ZzdHlwZXMsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZGlzdHJvKHNlbGYsIGRpc3Rybyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJESVNUUk8iLCBkaXN0cm8sICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfcGFja2FnZV9mb3JtYXQoc2VsZiwgZm9ybWF0KToKKyAgICAgICAgcGFja2FnZV9jbGFzc2VzID0gIiIKKyAgICAgICAgZm9yIHBrZ2ZtdCBpbiBmb3JtYXQuc3BsaXQoKToKKyAgICAgICAgICAgIHBhY2thZ2VfY2xhc3NlcyArPSAoInBhY2thZ2VfJXMiICUgcGtnZm10ICsgIiAiKQorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiUEFDS0FHRV9DTEFTU0VTIiwgcGFja2FnZV9jbGFzc2VzLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2JidGhyZWFkcyhzZWxmLCB0aHJlYWRzKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkJCX05VTUJFUl9USFJFQURTIiwgdGhyZWFkcywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9wbWFrZShzZWxmLCB0aHJlYWRzKToKKyAgICAgICAgcG1ha2UgPSAiLWogJXMiICUgdGhyZWFkcworICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiUEFSQUxMRUxfTUFLRSIsIHBtYWtlLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2RsX2RpcihzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiRExfRElSIiwgZGlyZWN0b3J5LCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X3NzdGF0ZV9kaXIoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlNTVEFURV9ESVIiLCBkaXJlY3RvcnksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc3N0YXRlX21pcnJvcnMoc2VsZiwgdXJsKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIlNTVEFURV9NSVJST1JTIiwgdXJsLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2V4dHJhX3NpemUoc2VsZiwgaW1hZ2VfZXh0cmFfc2l6ZSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UiLCBzdHIoaW1hZ2VfZXh0cmFfc2l6ZSksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfcm9vdGZzX3NpemUoc2VsZiwgaW1hZ2Vfcm9vdGZzX3NpemUpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfUk9PVEZTX1NJWkUiLCBzdHIoaW1hZ2Vfcm9vdGZzX3NpemUpLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2luY29tcGF0aWJsZV9saWNlbnNlKHNlbGYsIGluY29tcGF0X2xpY2Vuc2UpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiSU5DT01QQVRJQkxFX0xJQ0VOU0UiLCBpbmNvbXBhdF9saWNlbnNlLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2V4dHJhX3NldHRpbmcoc2VsZiwgZXh0cmFfc2V0dGluZyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJFWFRSQV9TRVRUSU5HIiwgZXh0cmFfc2V0dGluZywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9leHRyYV9jb25maWcoc2VsZiwgZXh0cmFfc2V0dGluZyk6CisgICAgICAgIG9sZF9leHRyYV9zZXR0aW5nID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRVhUUkFfU0VUVElORyJdKSBvciB7fQorICAgICAgICBvbGRfZXh0cmFfc2V0dGluZyA9IHN0cihvbGRfZXh0cmFfc2V0dGluZykKKworICAgICAgICBvbGRfZXh0cmFfc2V0dGluZyA9IGFzdC5saXRlcmFsX2V2YWwob2xkX2V4dHJhX3NldHRpbmcpCisgICAgICAgIGlmIG5vdCB0eXBlKG9sZF9leHRyYV9zZXR0aW5nKSA9PSBkaWN0OgorICAgICAgICAgICAgb2xkX2V4dHJhX3NldHRpbmcgPSB7fQorCisgICAgICAgICMgc2V0dGluZ3Mgbm90IGNoYW5nZWQKKyAgICAgICAgaWYgb2xkX2V4dHJhX3NldHRpbmcgPT0gZXh0cmFfc2V0dGluZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgcmVtb3ZlIHRoZSBvbGQgRVhUUkEgU0VUVElORyB2YXJpYWJsZQorICAgICAgICBzZWxmLnJlbW92ZV92YXJfZnJvbV9maWxlKCJFWFRSQV9TRVRUSU5HIikKKworICAgICAgICAjIHJlbW92ZSBvbGQgc2V0dGluZ3MgZnJvbSBjb25mCisgICAgICAgIGZvciBrZXkgaW4gb2xkX2V4dHJhX3NldHRpbmcua2V5cygpOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBleHRyYV9zZXR0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3Zhcl9mcm9tX2ZpbGUoa2V5KQorCisgICAgICAgICMgYWRkIG5ldyBzZXR0aW5ncworICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBleHRyYV9zZXR0aW5nLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoa2V5LCB2YWx1ZSwgImxvY2FsLmNvbmYiKQorCisgICAgICAgIGlmIGV4dHJhX3NldHRpbmc6CisgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiRVhUUkFfU0VUVElORyIsIGV4dHJhX3NldHRpbmcsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfaHR0cF9wcm94eShzZWxmLCBodHRwX3Byb3h5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoImh0dHBfcHJveHkiLCBodHRwX3Byb3h5LCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2h0dHBzX3Byb3h5KHNlbGYsIGh0dHBzX3Byb3h5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoImh0dHBzX3Byb3h5IiwgaHR0cHNfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZnRwX3Byb3h5KHNlbGYsIGZ0cF9wcm94eSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJmdHBfcHJveHkiLCBmdHBfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc29ja3NfcHJveHkoc2VsZiwgc29ja3NfcHJveHkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiYWxsX3Byb3h5Iiwgc29ja3NfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfY3ZzX3Byb3h5KHNlbGYsIGhvc3QsIHBvcnQpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX0hPU1QiLCBob3N0LCAibG9jYWwuY29uZiIpCisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfUE9SVCIsIHBvcnQsICJsb2NhbC5jb25mIikKKworICAgIGRlZiByZXF1ZXN0X3BhY2thZ2VfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfR0VORVJBVEVfUEtHSU5GTykKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuUE9QVUxBVEVfUEFDS0FHRUlORk8pCisKKyAgICBkZWYgdHJpZ2dlcl9zYW5pdHlfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1NBTklUWV9DSEVDSykKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuU0FOSVRZX0NIRUNLKQorCisgICAgZGVmIHRyaWdnZXJfbmV0d29ya190ZXN0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9ORVRXT1JLX1RFU1QpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLk5FVFdPUktfVEVTVCkKKworICAgIGRlZiBnZW5lcmF0ZV9jb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzZXRQcmVQb3N0Q29uZkZpbGVzIiwgImNvbmYvLmhvYi5jb25mIiwgIiJdKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9QQVJTRV9DT05GSUcpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBVEhfTEFZRVJTKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9GSUxFU19ESVNUUk8pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0ZJTEVTX01BQ0gpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0ZJTEVTX1NES01BQ0gpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX01BVENIX0NMQVNTKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5HRU5FUkFURV9DT05GSUdVUkFUSU9OKQorCisgICAgZGVmIGdlbmVyYXRlX3JlY2lwZXMoc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfR05FUkFURV9UR1RTKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5HRU5FUkFURV9SRUNJUEVTKQorCisgICAgZGVmIGdlbmVyYXRlX3BhY2thZ2VzKHNlbGYsIHRndHMsIGRlZmF1bHRfdGFzaz0iYnVpbGQiKToKKyAgICAgICAgdGFyZ2V0cyA9IFtdCisgICAgICAgIHRhcmdldHMuZXh0ZW5kKHRndHMpCisgICAgICAgIHNlbGYucmVjaXBlX3F1ZXVlID0gdGFyZ2V0cworICAgICAgICBzZWxmLmRlZmF1bHRfdGFzayA9IGRlZmF1bHRfdGFzaworICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzZXRQcmVQb3N0Q29uZkZpbGVzIiwgImNvbmYvLmhvYi5jb25mIiwgIiJdKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9QQVJTRV9DT05GSUcpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0JVSUxEX1JFQ0lQRVMpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX1BBQ0tBR0VTKQorCisgICAgZGVmIGdlbmVyYXRlX2ltYWdlKHNlbGYsIGltYWdlLCBiYXNlX2ltYWdlLCBpbWFnZV9wYWNrYWdlcz1Ob25lLCB0b29sY2hhaW5fcGFja2FnZXM9Tm9uZSwgZGVmYXVsdF90YXNrPSJidWlsZCIpOgorICAgICAgICBzZWxmLmltYWdlID0gaW1hZ2UKKyAgICAgICAgc2VsZi5iYXNlX2ltYWdlID0gYmFzZV9pbWFnZQorICAgICAgICBpZiBpbWFnZV9wYWNrYWdlczoKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9xdWV1ZSA9IGltYWdlX3BhY2thZ2VzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfcXVldWUgPSBbXQorICAgICAgICBpZiB0b29sY2hhaW5fcGFja2FnZXM6CisgICAgICAgICAgICBzZWxmLnRvb2xjaGFpbl9wYWNrYWdlcyA9IHRvb2xjaGFpbl9wYWNrYWdlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50b29sY2hhaW5fcGFja2FnZXMgPSBbXQorICAgICAgICBzZWxmLmRlZmF1bHRfdGFzayA9IGRlZmF1bHRfdGFzaworICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzZXRQcmVQb3N0Q29uZkZpbGVzIiwgImNvbmYvLmhvYi5jb25mIiwgIiJdKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9QQVJTRV9DT05GSUcpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0JVSUxEX0lNQUdFKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5HRU5FUkFURV9JTUFHRSkKKworICAgIGRlZiBnZW5lcmF0ZV9uZXdfaW1hZ2Uoc2VsZiwgaW1hZ2UsIGJhc2VfaW1hZ2UsIHBhY2thZ2VfcXVldWUsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgaWYgYmFzZV9pbWFnZToKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBzZWxmLnJ1bkNvbW1hbmQoWyJtYXRjaEZpbGUiLCBzZWxmLmJhc2VfaW1hZ2UgKyAiLmJiIl0pCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImdlbmVyYXRlTmV3SW1hZ2UiLCBpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZV9xdWV1ZSwgRmFsc2UsIGRlc2NyaXB0aW9uXSkKKworICAgIGRlZiBnZW5lcmF0ZV9ob2JfYmFzZV9pbWFnZShzZWxmLCBob2JfaW1hZ2UpOgorICAgICAgICBpbWFnZV9kaXIgPSBzZWxmLmdldF90b3BkaXIoKSArICIvcmVjaXBlcy9pbWFnZXMvIgorICAgICAgICByZWNpcGVfbmFtZSA9IGhvYl9pbWFnZSArICIuYmIiCisgICAgICAgIHNlbGYuZW5zdXJlX2RpcihpbWFnZV9kaXIpCisgICAgICAgIHNlbGYuZ2VuZXJhdGVfbmV3X2ltYWdlKGltYWdlX2RpciArIHJlY2lwZV9uYW1lLCBOb25lLCBbXSwgIiIpCisKKyAgICBkZWYgZW5zdXJlX2RpcihzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJlbnN1cmVEaXIiLCBkaXJlY3RvcnldKQorCisgICAgZGVmIGJ1aWxkX3N1Y2NlZWRlZF9hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGluZyA9IEZhbHNlCisKKyAgICBkZWYgYnVpbGRfZmFpbGVkX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmluaXRjbWQgPSBOb25lCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMgPSBbXQorICAgICAgICBzZWxmLmJ1aWxkaW5nID0gRmFsc2UKKworICAgIGRlZiBjYW5jZWxfcGFyc2Uoc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorCisgICAgZGVmIGNhbmNlbF9idWlsZChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgIyBGb3JjZSB0aGUgY29va2VyIHRvIHN0b3AgYXMgcXVpY2tseSBhcyBwb3NzaWJsZQorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdhaXQgZm9yIHRhc2tzIHRvIGNvbXBsZXRlIGJlZm9yZSBzaHV0dGluZyBkb3duLCB0aGlzIGhlbHBzCisgICAgICAgICAgICAjIGxlYXZlIHRoZSB3b3JrZGlyIGluIGEgdXNhYmxlIHN0YXRlCisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzdGF0ZVNodXRkb3duIl0pCisKKyAgICBkZWYgcmVzZXRfYnVpbGQoc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGQucmVzZXQoKQorCisgICAgZGVmIGdldF9sb2dmaWxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0NPTlNPTEVMT0ciXSlbMF0KKworICAgIGRlZiBnZXRfdG9wZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE9QRElSIl0pIG9yICIiCisKKyAgICBkZWYgX3JlbW92ZV9yZWR1bmRhbnQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0ID0gW10KKyAgICAgICAgZm9yIGkgaW4gc3RyaW5nLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBpIG5vdCBpbiByZXQ6CisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZChpKQorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQorCisgICAgZGVmIHNldF92YXJfaW5fZmlsZShzZWxmLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlPU5vbmUpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJlbmFibGVEYXRhVHJhY2tpbmciXSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhckZpbGUiLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAic2V0Il0pCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImRpc2FibGVEYXRhVHJhY2tpbmciXSkKKworICAgIGRlZiBlYXJseV9hc3NpZ25fdmFyX2luX2ZpbGUoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZW5hYmxlRGF0YVRyYWNraW5nIl0pCisgICAgICAgIHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJGaWxlIiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgImVhcmx5QXNzaWduIl0pCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImRpc2FibGVEYXRhVHJhY2tpbmciXSkKKworICAgIGRlZiByZW1vdmVfdmFyX2Zyb21fZmlsZShzZWxmLCB2YXIpOgorICAgICAgICBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsicmVtb3ZlVmFyRmlsZSIsIHZhcl0pCisKKyAgICBkZWYgYXBwZW5kX3Zhcl9pbl9maWxlKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRWYXJGaWxlIiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgImFwcGVuZCJdKQorCisgICAgZGVmIGFwcGVuZF90b19iYmZpbGVzKHNlbGYsIHZhbCk6CisgICAgICAgIGJiZmlsZXMgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQkZJTEVTIiwgIkZhbHNlIl0pIG9yICIiCisgICAgICAgIGJiZmlsZXMgPSBiYmZpbGVzLnNwbGl0KCkKKyAgICAgICAgaWYgdmFsIG5vdCBpbiBiYmZpbGVzOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfdmFyX2luX2ZpbGUoIkJCRklMRVMiLCB2YWwsICJiYmxheWVycy5jb25mIikKKworICAgIGRlZiBnZXRfcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgIyByZXRyaWV2ZSB0aGUgcGFyYW1ldGVycyBmcm9tIGJpdGJha2UKKyAgICAgICAgcGFyYW1zID0ge30KKyAgICAgICAgcGFyYW1zWyJjb3JlX2Jhc2UiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNPUkVCQVNFIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibGF5ZXIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCTEFZRVJTIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibGF5ZXJzX25vbl9yZW1vdmFibGUiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCTEFZRVJTX05PTl9SRU1PVkFCTEUiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJkbGRpciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRExfRElSIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibWFjaGluZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiTUFDSElORSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImRpc3RybyJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiRElTVFJPIl0pIG9yICJkZWZhdWx0c2V0dXAiCisgICAgICAgIHBhcmFtc1sicGNsYXNzIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJQQUNLQUdFX0NMQVNTRVMiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJzc3RhdGVkaXIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlNTVEFURV9ESVIiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJzc3RhdGVtaXJyb3IiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlNTVEFURV9NSVJST1JTIl0pIG9yICIiCisKKyAgICAgICAgbnVtX3RocmVhZHMgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRDcHVDb3VudCJdKQorICAgICAgICBpZiBub3QgbnVtX3RocmVhZHM6CisgICAgICAgICAgICBudW1fdGhyZWFkcyA9IDEKKyAgICAgICAgICAgIG1heF90aHJlYWRzID0gNjU1MzYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBudW1fdGhyZWFkcyA9IGludChudW1fdGhyZWFkcykKKyAgICAgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IDE2ICogbnVtX3RocmVhZHMKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBudW1fdGhyZWFkcyA9IDEKKyAgICAgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IDY1NTM2CisgICAgICAgIHBhcmFtc1sibWF4X3RocmVhZHMiXSA9IG1heF90aHJlYWRzCisKKyAgICAgICAgYmJ0aHJlYWQgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9OVU1CRVJfVEhSRUFEUyJdKQorICAgICAgICBpZiBub3QgYmJ0aHJlYWQ6CisgICAgICAgICAgICBiYnRocmVhZCA9IG51bV90aHJlYWRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmJ0aHJlYWQgPSBpbnQoYmJ0aHJlYWQpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgYmJ0aHJlYWQgPSBudW1fdGhyZWFkcworICAgICAgICBwYXJhbXNbImJidGhyZWFkIl0gPSBiYnRocmVhZAorCisgICAgICAgIHBtYWtlID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiUEFSQUxMRUxfTUFLRSJdKQorICAgICAgICBpZiBub3QgcG1ha2U6CisgICAgICAgICAgICBwbWFrZSA9IG51bV90aHJlYWRzCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwbWFrZSwgaW50KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwbWFrZSA9IGludChwbWFrZS5sc3RyaXAoIi1qICIpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBtYWtlID0gbnVtX3RocmVhZHMKKyAgICAgICAgcGFyYW1zWyJwbWFrZSJdID0gIi1qICVzIiAlIHBtYWtlCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9hZGRyIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJERVBMT1lfRElSX0lNQUdFIl0pIG9yICIiCisKKyAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSJdKQorICAgICAgICBpZiBub3QgaW1hZ2VfZXh0cmFfc2l6ZToKKyAgICAgICAgICAgIGltYWdlX2V4dHJhX3NpemUgPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IGludChpbWFnZV9leHRyYV9zaXplKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltYWdlX2V4dHJhX3NpemUgPSAwCisgICAgICAgIHBhcmFtc1siaW1hZ2VfZXh0cmFfc2l6ZSJdID0gaW1hZ2VfZXh0cmFfc2l6ZQorCisgICAgICAgIGltYWdlX3Jvb3Rmc19zaXplID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfUk9PVEZTX1NJWkUiXSkKKyAgICAgICAgaWYgbm90IGltYWdlX3Jvb3Rmc19zaXplOgorICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSBpbnQoaW1hZ2Vfcm9vdGZzX3NpemUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSAwCisgICAgICAgIHBhcmFtc1siaW1hZ2Vfcm9vdGZzX3NpemUiXSA9IGltYWdlX3Jvb3Rmc19zaXplCisKKyAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfT1ZFUkhFQURfRkFDVE9SIl0pCisgICAgICAgIGlmIG5vdCBpbWFnZV9vdmVyaGVhZF9mYWN0b3I6CisgICAgICAgICAgICBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gZmxvYXQoaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltYWdlX292ZXJoZWFkX2ZhY3RvciA9IDEKKyAgICAgICAgcGFyYW1zWydpbWFnZV9vdmVyaGVhZF9mYWN0b3InXSA9IGltYWdlX292ZXJoZWFkX2ZhY3RvcgorCisgICAgICAgIHBhcmFtc1siaW5jb21wYXRfbGljZW5zZSJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTkNPTVBBVElCTEVfTElDRU5TRSJdKSBvciAiIikKKyAgICAgICAgcGFyYW1zWyJzZGtfbWFjaGluZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiU0RLTUFDSElORSJdKSBvciBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJTREtfQVJDSCJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siaW1hZ2VfZnN0eXBlcyJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9GU1RZUEVTIl0pIG9yICIiKQorCisgICAgICAgIHBhcmFtc1siaW1hZ2VfdHlwZXMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfVFlQRVMiXSkgb3IgIiIpCisKKyAgICAgICAgcGFyYW1zWyJjb25mX3ZlcnNpb24iXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNPTkZfVkVSU0lPTiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImxjb25mX3ZlcnNpb24iXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkxDT05GX1ZFUlNJT04iXSkgb3IgIiIKKworICAgICAgICBwYXJhbXNbInJ1bm5hYmxlX2ltYWdlX3R5cGVzIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlJVTk5BQkxFX0lNQUdFX1RZUEVTIl0pIG9yICIiKQorICAgICAgICBwYXJhbXNbInJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiUlVOTkFCTEVfTUFDSElORV9QQVRURVJOUyJdKSBvciAiIikKKyAgICAgICAgcGFyYW1zWyJkZXBsb3lhYmxlX2ltYWdlX3R5cGVzIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRFUExPWUFCTEVfSU1BR0VfVFlQRVMiXSkgb3IgIiIpCisgICAgICAgIHBhcmFtc1sia2VybmVsX2ltYWdlX3R5cGUiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIktFUk5FTF9JTUFHRVRZUEUiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJ0bXBkaXIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRNUERJUiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImRpc3Ryb192ZXJzaW9uIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk9fVkVSU0lPTiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInRhcmdldF9vcyJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVEFSR0VUX09TIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sidGFyZ2V0X2FyY2giXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRBUkdFVF9BUkNIIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sidHVuZV9wa2dhcmNoIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUVU5FX1BLR0FSQ0giXSkgIG9yICIiCisgICAgICAgIHBhcmFtc1siYmJfdmVyc2lvbiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfTUlOX1ZFUlNJT04iXSkgb3IgIiIKKworICAgICAgICBwYXJhbXNbImRlZmF1bHRfdGFzayJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfREVGQVVMVF9UQVNLIl0pIG9yICJidWlsZCIKKworICAgICAgICBwYXJhbXNbInNvY2tzX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJhbGxfcHJveHkiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJodHRwX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJodHRwX3Byb3h5Il0pIG9yICIiCisgICAgICAgIHBhcmFtc1siZnRwX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJmdHBfcHJveHkiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJodHRwc19wcm94eSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiaHR0cHNfcHJveHkiXSkgb3IgIiIKKworICAgICAgICBwYXJhbXNbImN2c19wcm94eV9ob3N0Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJDVlNfUFJPWFlfSE9TVCJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImN2c19wcm94eV9wb3J0Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJDVlNfUFJPWFlfUE9SVCJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siaW1hZ2Vfd2hpdGVfcGF0dGVybiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJVSV9JTUFHRV9XSElURV9QQVRURVJOIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siaW1hZ2VfYmxhY2tfcGF0dGVybiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJVSV9JTUFHRV9CTEFDS19QQVRURVJOIl0pIG9yICIiCisgICAgICAgIHJldHVybiBwYXJhbXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmxpc3Rtb2RlbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmxpc3Rtb2RlbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGRmMTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9ibGlzdG1vZGVsLnB5CkBAIC0wLDAgKzEsOTAzIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAorZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKKworIworIyBQYWNrYWdlTGlzdE1vZGVsCisjCitjbGFzcyBQYWNrYWdlTGlzdE1vZGVsKGd0ay5MaXN0U3RvcmUpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgZGVmaW5lcyBhbiBndGsuTGlzdFN0b3JlIHN1YmNsYXNzIHdoaWNoIHdpbGwgY29udmVydCB0aGUgb3V0cHV0CisgICAgb2YgdGhlIGJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkIGV2ZW50IGludG8gYSBndGsuTGlzdFN0b3JlIHdoaWxzdCBhbHNvCisgICAgcHJvdmlkaW5nIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBhY2Nlc3MgZ3RrLlRyZWVNb2RlbCBzdWJjbGFzc2VzIHdoaWNoCisgICAgcHJvdmlkZSBmaWx0ZXJlZCB2aWV3cyBvZiB0aGUgZGF0YS4KKyAgICAiIiIKKworICAgIChDT0xfTkFNRSwgQ09MX1ZFUiwgQ09MX1JFViwgQ09MX1JOTSwgQ09MX1NFQywgQ09MX1NVTSwgQ09MX1JERVAsIENPTF9SUFJPViwgQ09MX1NJWkUsIENPTF9SQ1AsIENPTF9CSU5CLCBDT0xfSU5DLCBDT0xfRkFERV9JTkMsIENPTF9GT05ULCBDT0xfRkxJU1QpID0gcmFuZ2UoMTUpCisKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICJwYWNrYWdlLXNlbGVjdGlvbi1jaGFuZ2VkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICB9CisKKyAgICBfX3Rvb2xjaGFpbl9yZXF1aXJlZF9wYWNrYWdlc19fID0gWyJwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQiLCAicGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LWRiZyJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucnByb3ZfcGtnID0ge30KKyAgICAgICAgZ3RrLkxpc3RTdG9yZS5fX2luaXRfXyAoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIgPSBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcKKworICAgICIiIgorICAgIEZpbmQgdGhlIG1vZGVsIHBhdGggZm9yIHRoZSBpdGVtX25hbWUKKyAgICBSZXR1cm5zIHRoZSBwYXRoIGluIHRoZSBtb2RlbCBvciBOb25lCisgICAgIiIiCisgICAgZGVmIGZpbmRfcGF0aF9mb3JfaXRlbShzZWxmLCBpdGVtX25hbWUpOgorICAgICAgICBwa2cgPSBpdGVtX25hbWUKKyAgICAgICAgaWYgaXRlbV9uYW1lIG5vdCBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgaWYgaXRlbV9uYW1lIG5vdCBpbiBzZWxmLnJwcm92X3BrZy5rZXlzKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHBrZyA9IHNlbGYucnByb3ZfcGtnW2l0ZW1fbmFtZV0KKyAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gc2VsZi5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiBzZWxmLnBuX3BhdGhbcGtnXQorCisgICAgZGVmIGZpbmRfaXRlbV9mb3JfcGF0aChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisKKyAgICAiIiIKKyAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaXRlbSBpcyBhbiBpdGVtIHNwZWNpZmllZCBieSBmaWx0ZXIKKyAgICAiIiIKKyAgICBkZWYgdHJlZV9tb2RlbF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0LCBmaWx0ZXIpOgorICAgICAgICBuYW1lID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorCisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSA9PSBzZWxmLkNPTF9OQU1FOgorICAgICAgICAgICAgICAgIGlmIGZpbHRlcltrZXldICE9ICdTZWFyY2ggcGFja2FnZXMgYnkgbmFtZSc6CisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgYW5kIGZpbHRlcltrZXldIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG1vZGVsLmdldF92YWx1ZShpdCwga2V5KSBub3QgaW4gZmlsdGVyW2tleV06CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLmZpbHRlcmVkX25iICs9IDEKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICIiIgorICAgIENyZWF0ZSwgaWYgcmVxdWlyZWQsIGFuZCByZXR1cm4gYSBmaWx0ZXJlZCBndGsuVHJlZU1vZGVsU29ydAorICAgIGNvbnRhaW5pbmcgb25seSB0aGUgaXRlbXMgc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsKHNlbGYsIGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9RmFsc2UsIGluY2x1ZGVkX2l0ZW1zX2FoZWFkPUZhbHNlLCBzZWFyY2hfZGF0YT1Ob25lLCBpbml0aWFsPUZhbHNlKToKKyAgICAgICAgbW9kZWwgPSBzZWxmLmZpbHRlcl9uZXcoKQorICAgICAgICBzZWxmLmZpbHRlcmVkX25iID0gMAorICAgICAgICBtb2RlbC5zZXRfdmlzaWJsZV9mdW5jKHNlbGYudHJlZV9tb2RlbF9maWx0ZXIsIGZpbHRlcikKKworICAgICAgICBzb3J0ID0gZ3RrLlRyZWVNb2RlbFNvcnQobW9kZWwpCisgICAgICAgIHNvcnQuY29ubmVjdCAoJ3NvcnQtY29sdW1uLWNoYW5nZWQnLCBzZWxmLnNvcnRfY29sdW1uX2NoYW5nZWRfY2IpCisgICAgICAgIGlmIGluaXRpYWw6CisgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorICAgICAgICBlbGlmIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5leGNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxpZiBpbmNsdWRlZF9pdGVtc19haGVhZDoKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKHNlbGYuaW5jbHVkZV9pdGVtX3NvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWFyY2hfZGF0YSBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJyBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcGFja2FnZSBncm91cHMgYnkgbmFtZSc6CisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIpCisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoTm9uZSkKKworICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DLCBzZWxmLnNvcnRfY29sdW1uLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFLCBzZWxmLnNvcnRfY29sdW1uLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQiwgc2VsZi5zb3J0X2JpbmJfY29sdW1uKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQLCBzZWxmLnNvcnRfY29sdW1uLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1ApCisgICAgICAgIHJldHVybiBzb3J0CisKKyAgICBkZWYgc29ydF9jb2x1bW5fY2hhbmdlZF9jYiAoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IGRhdGEuZ2V0X3NvcnRfY29sdW1uX2lkICgpCisKKyAgICBkZWYgc29ydF9jb2x1bW4oc2VsZiwgbW9kZWwsIHJvdzEsIHJvdzIsIGNvbCk6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBjb2wpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBjb2wpCisgICAgICAgIGlmIGNvbD09UGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRToKKyAgICAgICAgICAgIHZhbHVlMSA9IEhvYlBhZ2UuX3N0cmluZ190b19zaXplKHZhbHVlMSkKKyAgICAgICAgICAgIHZhbHVlMiA9IEhvYlBhZ2UuX3N0cmluZ190b19zaXplKHZhbHVlMikKKworICAgICAgICBjbXBfcmVzID0gY21wKHZhbHVlMSwgdmFsdWUyKQorICAgICAgICBpZiBjbXBfcmVzIT0wOgorICAgICAgICAgICAgaWYgY29sPT1QYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkM6CisgICAgICAgICAgICAgICAgcmV0dXJuIC1jbXBfcmVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXBfcmVzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgbmFtZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBjbXAobmFtZTEsbmFtZTIpCisKKyAgICBkZWYgc29ydF9iaW5iX2NvbHVtbihzZWxmLCBtb2RlbCwgcm93MSwgcm93Mik6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9CSU5CKQorICAgICAgICB2YWx1ZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgdmFsdWUxX2xpc3QgPSB2YWx1ZTEuc3BsaXQoJywgJykKKyAgICAgICAgdmFsdWUyX2xpc3QgPSB2YWx1ZTIuc3BsaXQoJywgJykKKworICAgICAgICB2YWx1ZTEgPSB2YWx1ZTFfbGlzdFswXQorICAgICAgICB2YWx1ZTIgPSB2YWx1ZTJfbGlzdFswXQorCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXM9PTA6CisgICAgICAgICAgICBjbXBfc2l6ZSA9IGNtcChsZW4odmFsdWUxX2xpc3QpLCBsZW4odmFsdWUyX2xpc3QpKQorICAgICAgICAgICAgaWYgY21wX3NpemU9PTA6CisgICAgICAgICAgICAgICAgbmFtZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBuYW1lMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIHJldHVybiBjbXAobmFtZTEsbmFtZTIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXBfc2l6ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGNtcF9yZXMKKworICAgIGRlZiBleGNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbXBfdmFscyh2YWwxLCB2YWwyLCB1c2VyX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GQURFX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gVHJ1ZSkgYW5kICh2YWwyID09IEZhbHNlKSkKKworICAgIGRlZiBpbmNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbXBfdmFscyh2YWwxLCB2YWwyLCB1c2VyX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICByZXR1cm4gKCh2YWwxID09IEZhbHNlKSBhbmQgKHZhbDIgPT0gVHJ1ZSkpCisKKyAgICBkZWYgc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YSk6CisgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKworICAgIGRlZiBjbXBfdmFscyhzZWxmLCB2YWwxLCB2YWwyLCB1c2VyX2RhdGEpOgorICAgICAgICBpZiB2YWwxIGlzIE5vbmUgb3IgdmFsMiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxpZiB2YWwxLnN0YXJ0c3dpdGgodXNlcl9kYXRhKSBhbmQgbm90IHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgbm90IHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCB2YWwyLnN0YXJ0c3dpdGgodXNlcl9kYXRhKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wKHZhbDEsIHZhbDIpCisKKyAgICBkZWYgY29udmVydF92cGF0aF90b19wYXRoKHNlbGYsIHZpZXdfbW9kZWwsIHZpZXdfcGF0aCk6CisgICAgICAgICMgdmlld19tb2RlbCBpcyB0aGUgbW9kZWwgc29ydGVkCisgICAgICAgICMgZ2V0IHRoZSBwYXRoIG9mIHRoZSBtb2RlbCBmaWx0ZXJlZAorICAgICAgICBmaWx0ZXJlZF9tb2RlbF9wYXRoID0gdmlld19tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aCh2aWV3X3BhdGgpCisgICAgICAgICMgZ2V0IHRoZSBtb2RlbCBmaWx0ZXJlZAorICAgICAgICBmaWx0ZXJlZF9tb2RlbCA9IHZpZXdfbW9kZWwuZ2V0X21vZGVsKCkKKyAgICAgICAgIyBnZXQgdGhlIHBhdGggb2YgdGhlIG9yaWdpbmFsIG1vZGVsCisgICAgICAgIHBhdGggPSBmaWx0ZXJlZF9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aChmaWx0ZXJlZF9tb2RlbF9wYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIGNvbnZlcnRfcGF0aF90b192cGF0aChzZWxmLCB2aWV3X21vZGVsLCBwYXRoKToKKyAgICAgICAgaXQgPSB2aWV3X21vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBuYW1lID0gc2VsZi5maW5kX2l0ZW1fZm9yX3BhdGgocGF0aCkKKyAgICAgICAgICAgIHZpZXdfbmFtZSA9IHZpZXdfbW9kZWwuZ2V0X3ZhbHVlKGl0LCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgaWYgdmlld19uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgdmlld19wYXRoID0gdmlld19tb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmlld19wYXRoCisgICAgICAgICAgICBpdCA9IHZpZXdfbW9kZWwuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIiIiCisgICAgVGhlIHBvcHVsYXRlKCkgZnVuY3Rpb24gdGFrZXMgYXMgaW5wdXQgdGhlIGRhdGEgZnJvbSBhCisgICAgYmIuZXZlbnQuUGFja2FnZUluZm8gZXZlbnQgYW5kIHBvcHVsYXRlcyB0aGUgcGFja2FnZSBsaXN0LgorICAgICIiIgorICAgIGRlZiBwb3B1bGF0ZShzZWxmLCBwa2dpbmZvbGlzdCk6CisgICAgICAgICMgRmlyc3QgY2xlYXIgdGhlIG1vZGVsLCBpbiBjYXNlIHJlcG9wdWxhdGluZworICAgICAgICBzZWxmLmNsZWFyKCkKKworICAgICAgICBkZWYgZ2V0cGtndmFsdWUocGtnZGljdCwga2V5LCBwa2duYW1lLCBkZWZhdWx0dmFsID0gTm9uZSk6CisgICAgICAgICAgICB2YWx1ZSA9IHBrZ2RpY3QuZ2V0KCclc18lcycgJSAoa2V5LCBwa2duYW1lKSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHBrZ2RpY3QuZ2V0KGtleSwgZGVmYXVsdHZhbCkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGZvciBwa2dpbmZvIGluIHBrZ2luZm9saXN0OgorICAgICAgICAgICAgcG4gPSBwa2dpbmZvWydQTiddCisgICAgICAgICAgICBwdiA9IHBrZ2luZm9bJ1BWJ10KKyAgICAgICAgICAgIHByID0gcGtnaW5mb1snUFInXQorICAgICAgICAgICAgcGtnID0gcGtnaW5mb1snUEtHJ10KKyAgICAgICAgICAgIHBrZ3YgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUEtHVicsIHBrZykKKyAgICAgICAgICAgIHBrZ3IgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUEtHUicsIHBrZykKKyAgICAgICAgICAgICMgUEtHU0laRSBpcyBhcnRpZmljaWFsLCB3aWxsIGFsd2F5cyBiZSBvdmVycmlkZGVuIHdpdGggdGhlIHBhY2thZ2UgbmFtZSBpZiBwcmVzZW50CisgICAgICAgICAgICBwa2dzaXplID0gaW50KHBrZ2luZm8uZ2V0KCdQS0dTSVpFXyVzJyAlIHBrZywgIjAiKSkKKyAgICAgICAgICAgICMgUEtHXyVzIGlzIHRoZSByZW5hbWVkIHZlcnNpb24KKyAgICAgICAgICAgIHBrZ19yZW5hbWUgPSBwa2dpbmZvLmdldCgnUEtHXyVzJyAlIHBrZywgIiIpCisgICAgICAgICAgICAjIFRoZSByZXN0IG1heSBiZSBvdmVycmlkZGVuIG9yIG5vdAorICAgICAgICAgICAgc2VjdGlvbiA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdTRUNUSU9OJywgcGtnLCAiIikKKyAgICAgICAgICAgIHN1bW1hcnkgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnU1VNTUFSWScsIHBrZywgIiIpCisgICAgICAgICAgICByZGVwID0gZ2V0cGtndmFsdWUocGtnaW5mbywgJ1JERVBFTkRTJywgcGtnLCAiIikKKyAgICAgICAgICAgIHJyZWMgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUlJFQ09NTUVORFMnLCBwa2csICIiKQorICAgICAgICAgICAgcnByb3YgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUlBST1ZJREVTJywgcGtnLCAiIikKKyAgICAgICAgICAgIGZpbGVzX2xpc3QgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnRklMRVNfSU5GTycsIHBrZywgIiIpCisgICAgICAgICAgICBmb3IgaSBpbiBycHJvdi5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYucnByb3ZfcGtnW2ldID0gcGtnCisKKyAgICAgICAgICAgIHJlY2lwZSA9IHBuICsgJy0nICsgcHYgKyAnLScgKyBwcgorCisgICAgICAgICAgICBhbGxvd19lbXB0eSA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdBTExPV19FTVBUWScsIHBrZywgIiIpCisKKyAgICAgICAgICAgIGlmIHBrZ3NpemUgPT0gMCBhbmQgbm90IGFsbG93X2VtcHR5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNpemUgPSBIb2JQYWdlLl9zaXplX3RvX3N0cmluZyhwa2dzaXplKQorICAgICAgICAgICAgc2VsZi5zZXQoc2VsZi5hcHBlbmQoKSwgc2VsZi5DT0xfTkFNRSwgcGtnLCBzZWxmLkNPTF9WRVIsIHBrZ3YsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SRVYsIHBrZ3IsIHNlbGYuQ09MX1JOTSwgcGtnX3JlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1NFQywgc2VjdGlvbiwgc2VsZi5DT0xfU1VNLCBzdW1tYXJ5LAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfUkRFUCwgcmRlcCArICcgJyArIHJyZWMsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SUFJPViwgcnByb3YsIHNlbGYuQ09MX1NJWkUsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SQ1AsIHJlY2lwZSwgc2VsZi5DT0xfQklOQiwgIiIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTkMsIEZhbHNlLCBzZWxmLkNPTF9GT05ULCAnMTAnLCBzZWxmLkNPTF9GTElTVCwgZmlsZXNfbGlzdCkKKworICAgICAgICBzZWxmLnBuX3BhdGggPSB7fQorICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBuID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgICAgICBwYXRoID0gc2VsZi5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHNlbGYucG5fcGF0aFtwbl0gPSBwYXRoCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgIiIiCisgICAgVXBkYXRlIHRoZSBtb2RlbCwgc2VuZCBvdXQgdGhlIG5vdGlmaWNhdGlvbi4KKyAgICAiIiIKKyAgICBkZWYgc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuZW1pdCgicGFja2FnZS1zZWxlY3Rpb24tY2hhbmdlZCIpCisKKyAgICAiIiIKKyAgICBDaGVjayB3aGV0aGVyIHRoZSBpdGVtIGF0IGl0ZW1fcGF0aCBpcyBpbmNsdWRlZCBvciBub3QKKyAgICAiIiIKKyAgICBkZWYgcGF0aF9pbmNsdWRlZChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10KKworICAgICIiIgorICAgIEFkZCB0aGlzIGl0ZW0sIGFuZCBhbnkgb2YgaXRzIGRlcGVuZGVuY2llcywgdG8gdGhlIGltYWdlIGNvbnRlbnRzCisgICAgIiIiCisgICAgZGVmIGluY2x1ZGVfaXRlbShzZWxmLCBpdGVtX3BhdGgsIGJpbmI9IiIpOgorICAgICAgICBpZiBzZWxmLnBhdGhfaW5jbHVkZWQoaXRlbV9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGl0ZW1fbmFtZSA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXQorICAgICAgICBpdGVtX2RlcHMgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfUkRFUF0KKworICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU5DXSA9IFRydWUKKworICAgICAgICBpdGVtX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBiaW5iIGFuZCBub3QgYmluYiBpbiBpdGVtX2JpbjoKKyAgICAgICAgICAgIGl0ZW1fYmluLmFwcGVuZChiaW5iKQorICAgICAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGl0ZW1fYmluKS5sc3RyaXAoJywgJykKKworICAgICAgICBpZiBpdGVtX2RlcHM6CisgICAgICAgICAgICAjIEVuc3VyZSBhbGwgb2YgdGhlIGl0ZW1zIGRlcHMgYXJlIGluY2x1ZGVkIGFuZCwgd2hlcmUgYXBwcm9wcmlhdGUsCisgICAgICAgICAgICAjIGFkZCB0aGlzIGl0ZW0gdG8gdGhlaXIgQ09MX0JJTkIKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgoJygnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIElmIHRoZSBjb250ZW50cyBtb2RlbCBkb2Vzbid0IGFscmVhZHkgY29udGFpbiBkZXAsIGFkZCBpdAorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfaW5jbHVkZWQgPSBzZWxmLnBhdGhfaW5jbHVkZWQoZGVwX3BhdGgpCisKKyAgICAgICAgICAgICAgICBpZiBkZXBfaW5jbHVkZWQgYW5kIG5vdCBkZXAgaW4gaXRlbV9iaW46CisgICAgICAgICAgICAgICAgICAgICMgZG9uJ3Qgc2V0IHRoZSBDT0xfQklOQiB0byB0aGlzIGl0ZW0gaWYgdGhlIHRhcmdldCBpcyBhbgorICAgICAgICAgICAgICAgICAgICAjIGl0ZW0gaW4gb3VyIG93biBDT0xfQklOQgorICAgICAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGl0ZW1fbmFtZSBpbiBkZXBfYmluOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5hcHBlbmQoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisgICAgICAgICAgICAgICAgZWxpZiBub3QgZGVwX2luY2x1ZGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfaXRlbShkZXBfcGF0aCwgYmluYj1pdGVtX25hbWUpCisKKyAgICBkZWYgZXhjbHVkZV9pdGVtKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnBhdGhfaW5jbHVkZWQoaXRlbV9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gRmFsc2UKKworICAgICAgICBpdGVtX25hbWUgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKyAgICAgICAgaXRlbV9kZXBzID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX1JERVBdCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgoJygnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGRlcCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGVwX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwX2JpbiA9IHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgICAgICAgICAgaWYgaXRlbV9uYW1lIGluIGRlcF9iaW46CisgICAgICAgICAgICAgICAgICAgIGRlcF9iaW4ucmVtb3ZlKGl0ZW1fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisKKyAgICAgICAgaXRlbV9iaW4gPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgaWYgaXRlbV9iaW46CisgICAgICAgICAgICBmb3IgYmluYiBpbiBpdGVtX2JpbjoKKyAgICAgICAgICAgICAgICBiaW5iX3BhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShiaW5iKQorICAgICAgICAgICAgICAgIGlmIG5vdCBiaW5iX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5leGNsdWRlX2l0ZW0oYmluYl9wYXRoKQorCisgICAgIiIiCisgICAgRW1wdHkgc2VsZi5jb250ZW50cyBieSBzZXR0aW5nIHRoZSBpbmNsdWRlIG9mIGVhY2ggZW50cnkgdG8gTm9uZQorICAgICIiIgorICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBzZWxmLnNldChpdCwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9CSU5CLCAiIikKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgc2VsZi5zZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbigpCisKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBwYWNrYWdlbGlzdCA9IFtdCisKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgICAgICAgICAgcGFja2FnZWxpc3QuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiBwYWNrYWdlbGlzdAorCisgICAgZGVmIGdldF91c2VyX3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBwYWNrYWdlbGlzdCA9IFtdCisKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBiaW5iID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0JJTkIpCisgICAgICAgICAgICAgICAgaWYgYmluYiA9PSAiVXNlciBTZWxlY3RlZCI6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWxpc3QuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiBwYWNrYWdlbGlzdAorCisgICAgZGVmIGdldF9zZWxlY3RlZF9wYWNrYWdlc190b29sY2hhaW4oc2VsZik6CisgICAgICAgIHBhY2thZ2VsaXN0ID0gW10KKworICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCItZGV2Iikgb3IgbmFtZS5lbmRzd2l0aCgiLWRiZyIpOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlbGlzdC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2V0KHBhY2thZ2VsaXN0ICsgc2VsZi5fX3Rvb2xjaGFpbl9yZXF1aXJlZF9wYWNrYWdlc19fKSk7CisKKyAgICAiIiIKKyAgICBQYWNrYWdlIG1vZGVsIG1heSBiZSBpbmNvbXBsZXRlLCB0aGVyZWZvcmUgd2hlbiBjYWxsaW5nIHRoZQorICAgIHNldF9zZWxlY3RlZF9wYWNrYWdlcygpLCBzb21lIHBhY2thZ2VzIHdpbGwgbm90IGJlIHNldCBpbmNsdWRlZC4KKyAgICBSZXR1cm4gdGhlIHVuLXNldCBwYWNrYWdlcyBsaXN0LgorICAgICIiIgorICAgIGRlZiBzZXRfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZiwgcGFja2FnZWxpc3QsIHVzZXJfc2VsZWN0ZWQ9RmFsc2UpOgorICAgICAgICBsZWZ0ID0gW10KKyAgICAgICAgYmluYiA9ICdVc2VyIFNlbGVjdGVkJyBpZiB1c2VyX3NlbGVjdGVkIGVsc2UgJycKKyAgICAgICAgZm9yIHBuIGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgaWYgcG4gaW4gc2VsZi5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5wbl9wYXRoW3BuXQorICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLCBiaW5iPWJpbmIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxlZnQuYXBwZW5kKHBuKQorCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorICAgICAgICByZXR1cm4gbGVmdAorCisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBzZWxlY3RlZCBwYWNrYWdlIHNpemUsIHVuaXQgaXMgQi4KKyAgICAiIiIKKyAgICBkZWYgZ2V0X3BhY2thZ2VzX3NpemUoc2VsZik6CisgICAgICAgIHBhY2thZ2VzX3NpemUgPSAwCisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgc3RyX3NpemUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfU0laRSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RyX3NpemU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBwYWNrYWdlc19zaXplICs9IEhvYlBhZ2UuX3N0cmluZ190b19zaXplKHN0cl9zaXplKQorCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gcGFja2FnZXNfc2l6ZQorCisgICAgIiIiCisgICAgUmVzeW5jIHRoZSBzdGF0ZSBvZiBpbmNsdWRlZCBpdGVtcyB0byBhIGJhY2t1cCBjb2x1bW4gYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZhZGVvdXQgdmlzaWJsZSBlZmZlY3QKKyAgICAiIiIKKyAgICBkZWYgcmVzeW5jX2ZhZGVvdXRfY29sdW1uKHNlbGYsIG1vZGVsX2ZpcnN0X2l0ZXI9Tm9uZSk6CisgICAgICAgIGl0ID0gbW9kZWxfZmlyc3RfaXRlcgorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGFjdGl2ZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpCisgICAgICAgICAgICBzZWxmLnNldChpdCwgc2VsZi5DT0xfRkFERV9JTkMsIGFjdGl2ZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyMKKyMgUmVjaXBlTGlzdE1vZGVsCisjCitjbGFzcyBSZWNpcGVMaXN0TW9kZWwoZ3RrLkxpc3RTdG9yZSk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIGFuIGd0ay5MaXN0U3RvcmUgc3ViY2xhc3Mgd2hpY2ggd2lsbCBjb252ZXJ0IHRoZSBvdXRwdXQKKyAgICBvZiB0aGUgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQgZXZlbnQgaW50byBhIGd0ay5MaXN0U3RvcmUgd2hpbHN0IGFsc28KKyAgICBwcm92aWRpbmcgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGFjY2VzcyBndGsuVHJlZU1vZGVsIHN1YmNsYXNzZXMgd2hpY2gKKyAgICBwcm92aWRlIGZpbHRlcmVkIHZpZXdzIG9mIHRoZSBkYXRhLgorICAgICIiIgorICAgIChDT0xfTkFNRSwgQ09MX0RFU0MsIENPTF9MSUMsIENPTF9HUk9VUCwgQ09MX0RFUFMsIENPTF9CSU5CLCBDT0xfVFlQRSwgQ09MX0lOQywgQ09MX0lNRywgQ09MX0lOU1RBTEwsIENPTF9QTiwgQ09MX0ZBREVfSU5DLCBDT0xfU1VNTUFSWSwgQ09MX1ZFUlNJT04sCisgICAgIENPTF9SRVZJU0lPTiwgQ09MX0hPTUVQQUdFLCBDT0xfQlVHVFJBQ0tFUiwgQ09MX0ZJTEUpID0gcmFuZ2UoMTgpCisKKyAgICBfX2N1c3RvbV9pbWFnZV9fID0gIlN0YXJ0IHdpdGggYW4gZW1wdHkgaW1hZ2UgcmVjaXBlIgorCisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAicmVjaXBlLXNlbGVjdGlvbi1jaGFuZ2VkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgfQorCisgICAgIiIiCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBndGsuTGlzdFN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIgPSBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORworCisgICAgIiIiCisgICAgRmluZCB0aGUgbW9kZWwgcGF0aCBmb3IgdGhlIGl0ZW1fbmFtZQorICAgIFJldHVybnMgdGhlIHBhdGggaW4gdGhlIG1vZGVsIG9yIE5vbmUKKyAgICAiIiIKKyAgICBkZWYgZmluZF9wYXRoX2Zvcl9pdGVtKHNlbGYsIGl0ZW1fbmFtZSk6CisgICAgICAgIGlmIHNlbGYubm9uX3RhcmdldF9uYW1lKGl0ZW1fbmFtZSkgb3IgaXRlbV9uYW1lIG5vdCBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBuX3BhdGhbaXRlbV9uYW1lXQorCisgICAgZGVmIGZpbmRfaXRlbV9mb3JfcGF0aChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisKKyAgICAiIiIKKyAgICBIZWxwZXIgbWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIG5hbWUgaXMgYSB0YXJnZXQgcG4KKyAgICAiIiIKKyAgICBkZWYgbm9uX3RhcmdldF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGFuZCAoJy1uYXRpdmUnIGluIG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAiIiIKKyAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gaXRlbSBpcyBhbiBpdGVtIHNwZWNpZmllZCBieSBmaWx0ZXIKKyAgICAiIiIKKyAgICBkZWYgdHJlZV9tb2RlbF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0LCBmaWx0ZXIpOgorICAgICAgICBuYW1lID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICBpZiBzZWxmLm5vbl90YXJnZXRfbmFtZShuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSA9PSBzZWxmLkNPTF9OQU1FOgorICAgICAgICAgICAgICAgIGlmIGZpbHRlcltrZXldICE9ICdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJyBhbmQgZmlsdGVyW2tleV0gIT0gJ1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsdGVyW2tleV0gbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0LCBrZXkpIG5vdCBpbiBmaWx0ZXJba2V5XToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuZmlsdGVyZWRfbmIgKz0gMQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZXhjbHVkZV9pdGVtX3NvcnRfZnVuYyhzZWxmLCBtb2RlbCwgaXRlcjEsIGl0ZXIyLCB1c2VyX2RhdGE9Tm9uZSk6CisgICAgICAgIGlmIHVzZXJfZGF0YToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfRkFERV9JTkMpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gVHJ1ZSkgYW5kICh2YWwyID09IEZhbHNlKSkKKworICAgIGRlZiBpbmNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gRmFsc2UpIGFuZCAodmFsMiA9PSBUcnVlKSkKKworICAgIGRlZiBzb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhKToKKyAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKworICAgIGRlZiBjbXBfdmFscyhzZWxmLCB2YWwxLCB2YWwyLCB1c2VyX2RhdGEpOgorICAgICAgICBpZiB2YWwxIGlzIE5vbmUgb3IgdmFsMiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxpZiB2YWwxLnN0YXJ0c3dpdGgodXNlcl9kYXRhKSBhbmQgbm90IHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgbm90IHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCB2YWwyLnN0YXJ0c3dpdGgodXNlcl9kYXRhKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wKHZhbDEsIHZhbDIpCisKKyAgICAiIiIKKyAgICBDcmVhdGUsIGlmIHJlcXVpcmVkLCBhbmQgcmV0dXJuIGEgZmlsdGVyZWQgZ3RrLlRyZWVNb2RlbFNvcnQKKyAgICBjb250YWluaW5nIG9ubHkgdGhlIGl0ZW1zIHNwZWNpZmllZCBieSBmaWx0ZXIKKyAgICAiIiIKKyAgICBkZWYgdHJlZV9tb2RlbChzZWxmLCBmaWx0ZXIsIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkPUZhbHNlLCBpbmNsdWRlZF9pdGVtc19haGVhZD1GYWxzZSwgc2VhcmNoX2RhdGE9Tm9uZSwgaW5pdGlhbD1GYWxzZSk6CisgICAgICAgIG1vZGVsID0gc2VsZi5maWx0ZXJfbmV3KCkKKyAgICAgICAgc2VsZi5maWx0ZXJlZF9uYiA9IDAKKyAgICAgICAgbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLnRyZWVfbW9kZWxfZmlsdGVyLCBmaWx0ZXIpCisKKyAgICAgICAgc29ydCA9IGd0ay5UcmVlTW9kZWxTb3J0KG1vZGVsKQorICAgICAgICBzb3J0LmNvbm5lY3QgKCdzb3J0LWNvbHVtbi1jaGFuZ2VkJywgc2VsZi5zb3J0X2NvbHVtbl9jaGFuZ2VkX2NiKQorICAgICAgICBpZiBpbml0aWFsOgorICAgICAgICAgICAgc29ydC5zZXRfc29ydF9jb2x1bW5faWQoUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorICAgICAgICBlbGlmIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5leGNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxpZiBpbmNsdWRlZF9pdGVtc19haGVhZDoKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKHNlbGYuaW5jbHVkZV9pdGVtX3NvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWFyY2hfZGF0YSBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJyBhbmQgc2VhcmNoX2RhdGEhPSdTZWFyY2ggcGFja2FnZSBncm91cHMgYnkgbmFtZSc6CisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIpCisgICAgICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoTm9uZSkKKworICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMsIHNlbGYuc29ydF9jb2x1bW4sIFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9HUk9VUCwgc2VsZi5zb3J0X2NvbHVtbiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9HUk9VUCkKKyAgICAgICAgc29ydC5zZXRfc29ydF9mdW5jKFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQiwgc2VsZi5zb3J0X2JpbmJfY29sdW1uKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMsIHNlbGYuc29ydF9jb2x1bW4sIFJlY2lwZUxpc3RNb2RlbC5DT0xfTElDKQorICAgICAgICByZXR1cm4gc29ydAorCisgICAgZGVmIHNvcnRfY29sdW1uX2NoYW5nZWRfY2IgKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkLCBzZWxmLnNvcnRfb3JkZXIgPSBkYXRhLmdldF9zb3J0X2NvbHVtbl9pZCAoKQorCisgICAgZGVmIHNvcnRfY29sdW1uKHNlbGYsIG1vZGVsLCByb3cxLCByb3cyLCBjb2wpOgorICAgICAgICB2YWx1ZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgY29sKQorICAgICAgICB2YWx1ZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgY29sKQorICAgICAgICBjbXBfcmVzID0gY21wKHZhbHVlMSwgdmFsdWUyKQorICAgICAgICBpZiBjbXBfcmVzIT0wOgorICAgICAgICAgICAgaWYgY29sPT1SZWNpcGVMaXN0TW9kZWwuQ09MX0lOQzoKKyAgICAgICAgICAgICAgICByZXR1cm4gLWNtcF9yZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9yZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIG5hbWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBjbXAobmFtZTEsbmFtZTIpCisKKyAgICBkZWYgc29ydF9iaW5iX2NvbHVtbihzZWxmLCBtb2RlbCwgcm93MSwgcm93Mik6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgIHZhbHVlMV9saXN0ID0gdmFsdWUxLnNwbGl0KCcsICcpCisgICAgICAgIHZhbHVlMl9saXN0ID0gdmFsdWUyLnNwbGl0KCcsICcpCisKKyAgICAgICAgdmFsdWUxID0gdmFsdWUxX2xpc3RbMF0KKyAgICAgICAgdmFsdWUyID0gdmFsdWUyX2xpc3RbMF0KKworICAgICAgICBjbXBfcmVzID0gY21wKHZhbHVlMSwgdmFsdWUyKQorICAgICAgICBpZiBjbXBfcmVzPT0wOgorICAgICAgICAgICAgY21wX3NpemUgPSBjbXAobGVuKHZhbHVlMV9saXN0KSwgbGVuKHZhbHVlMl9saXN0KSkKKyAgICAgICAgICAgIGlmIGNtcF9zaXplPT0wOgorICAgICAgICAgICAgICAgIG5hbWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBuYW1lMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9zaXplCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wX3JlcworCisgICAgZGVmIGNvbnZlcnRfdnBhdGhfdG9fcGF0aChzZWxmLCB2aWV3X21vZGVsLCB2aWV3X3BhdGgpOgorICAgICAgICBmaWx0ZXJlZF9tb2RlbF9wYXRoID0gdmlld19tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aCh2aWV3X3BhdGgpCisgICAgICAgIGZpbHRlcmVkX21vZGVsID0gdmlld19tb2RlbC5nZXRfbW9kZWwoKQorCisgICAgICAgICMgZ2V0IHRoZSBwYXRoIG9mIHRoZSBvcmlnaW5hbCBtb2RlbAorICAgICAgICBwYXRoID0gZmlsdGVyZWRfbW9kZWwuY29udmVydF9wYXRoX3RvX2NoaWxkX3BhdGgoZmlsdGVyZWRfbW9kZWxfcGF0aCkKKyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiBjb252ZXJ0X3BhdGhfdG9fdnBhdGgoc2VsZiwgdmlld19tb2RlbCwgcGF0aCk6CisgICAgICAgIGl0ID0gdmlld19tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgbmFtZSA9IHNlbGYuZmluZF9pdGVtX2Zvcl9wYXRoKHBhdGgpCisgICAgICAgICAgICB2aWV3X25hbWUgPSB2aWV3X21vZGVsLmdldF92YWx1ZShpdCwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgaWYgdmlld19uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgdmlld19wYXRoID0gdmlld19tb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmlld19wYXRoCisgICAgICAgICAgICBpdCA9IHZpZXdfbW9kZWwuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIiIiCisgICAgVGhlIHBvcHVsYXRlKCkgZnVuY3Rpb24gdGFrZXMgYXMgaW5wdXQgdGhlIGRhdGEgZnJvbSBhCisgICAgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQgZXZlbnQgYW5kIHBvcHVsYXRlcyB0aGUgUmVjaXBlTGlzdC4KKyAgICAiIiIKKyAgICBkZWYgcG9wdWxhdGUoc2VsZiwgZXZlbnRfbW9kZWwpOgorICAgICAgICAjIEZpcnN0IGNsZWFyIHRoZSBtb2RlbCwgaW4gY2FzZSByZXBvcHVsYXRpbmcKKyAgICAgICAgc2VsZi5jbGVhcigpCisKKyAgICAgICAgIyBkdW1teSBpbWFnZSBmb3IgcHJvbXB0CisgICAgICAgIHNlbGYuc2V0X2luX2xpc3Qoc2VsZi5fX2N1c3RvbV9pbWFnZV9fLCAgIlVzZSAnRWRpdCBpbWFnZSByZWNpcGUnIHRvIGN1c3RvbWl6ZSByZWNpcGVzIGFuZCBwYWNrYWdlcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIGJlIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UgIikKKworICAgICAgICBmb3IgaXRlbSBpbiBldmVudF9tb2RlbFsicG4iXToKKyAgICAgICAgICAgIG5hbWUgPSBpdGVtCisgICAgICAgICAgICBkZXNjID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImRlc2NyaXB0aW9uIl0KKyAgICAgICAgICAgIGxpYyA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJsaWNlbnNlIl0KKyAgICAgICAgICAgIGdyb3VwID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bInNlY3Rpb24iXQorICAgICAgICAgICAgaW5oZXJpdHMgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiaW5oZXJpdHMiXQorICAgICAgICAgICAgc3VtbWFyeSA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJzdW1tYXJ5Il0KKyAgICAgICAgICAgIHZlcnNpb24gPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsidmVyc2lvbiJdCisgICAgICAgICAgICByZXZpc2lvbiA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJwcmV2aXNpb24iXQorICAgICAgICAgICAgaG9tZXBhZ2UgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiaG9tZXBhZ2UiXQorICAgICAgICAgICAgYnVndHJhY2tlciA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJidWd0cmFja2VyIl0KKyAgICAgICAgICAgIGZpbGVuYW1lID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImZpbGVuYW1lIl0KKyAgICAgICAgICAgIGluc3RhbGwgPSBbXQorCisgICAgICAgICAgICBkZXBlbmRzID0gZXZlbnRfbW9kZWxbImRlcGVuZHMiXS5nZXQoaXRlbSwgW10pICsgZXZlbnRfbW9kZWxbInJkZXBlbmRzLXBuIl0uZ2V0KGl0ZW0sIFtdKQorCisgICAgICAgICAgICBpZiAoJ3BhY2thZ2Vncm91cC5iYmNsYXNzJyBpbiAiICIuam9pbihpbmhlcml0cykpOgorICAgICAgICAgICAgICAgIGF0eXBlID0gJ3BhY2thZ2Vncm91cCcKKyAgICAgICAgICAgIGVsaWYgKCcvaW1hZ2UuYmJjbGFzcycgaW4gIiAiLmpvaW4oaW5oZXJpdHMpKToKKyAgICAgICAgICAgICAgICBpZiAiZWRpdGVkIiBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgYXR5cGUgPSAnaW1hZ2UnCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgPSBldmVudF9tb2RlbFsicmRlcGVuZHMtcGtnIl0uZ2V0KGl0ZW0sIFtdKSArIGV2ZW50X21vZGVsWyJycmVjcy1wa2ciXS5nZXQoaXRlbSwgW10pCisgICAgICAgICAgICBlbGlmICgnbWV0YS0nIGluIG5hbWUpOgorICAgICAgICAgICAgICAgIGF0eXBlID0gJ3Rvb2xjaGFpbicKKyAgICAgICAgICAgIGVsaWYgKG5hbWUgPT0gJ2R1bW15LWltYWdlJyBvciBuYW1lID09ICdkdW1teS10b29sY2hhaW4nKToKKyAgICAgICAgICAgICAgICBhdHlwZSA9ICdkdW1teScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXR5cGUgPSAncmVjaXBlJworCisgICAgICAgICAgICBzZWxmLnNldChzZWxmLmFwcGVuZCgpLCBzZWxmLkNPTF9OQU1FLCBpdGVtLCBzZWxmLkNPTF9ERVNDLCBkZXNjLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfTElDLCBsaWMsIHNlbGYuQ09MX0dST1VQLCBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0RFUFMsICIgIi5qb2luKGRlcGVuZHMpLCBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1RZUEUsIGF0eXBlLCBzZWxmLkNPTF9JTkMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSU1HLCBGYWxzZSwgc2VsZi5DT0xfSU5TVEFMTCwgIiAiLmpvaW4oaW5zdGFsbCksIHNlbGYuQ09MX1BOLCBpdGVtLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfU1VNTUFSWSwgc3VtbWFyeSwgc2VsZi5DT0xfVkVSU0lPTiwgdmVyc2lvbiwgc2VsZi5DT0xfUkVWSVNJT04sIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSE9NRVBBR0UsIGhvbWVwYWdlLCBzZWxmLkNPTF9CVUdUUkFDS0VSLCBidWd0cmFja2VyLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfRklMRSwgZmlsZW5hbWUpCisKKyAgICAgICAgc2VsZi5wbl9wYXRoID0ge30KKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwbiA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBzZWxmLnBuX3BhdGhbcG5dID0gcGF0aAorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgIGRlZiBzZXRfaW5fbGlzdChzZWxmLCBpdGVtLCBkZXNjKToKKyAgICAgICAgc2VsZi5zZXQoc2VsZi5hcHBlbmQoKSwgc2VsZi5DT0xfTkFNRSwgaXRlbSwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfREVTQywgZGVzYywKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfTElDLCAiIiwgc2VsZi5DT0xfR1JPVVAsICIiLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9ERVBTLCAiIiwgc2VsZi5DT0xfQklOQiwgIiIsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1RZUEUsICJpbWFnZSIsIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lNRywgRmFsc2UsIHNlbGYuQ09MX0lOU1RBTEwsICIiLCBzZWxmLkNPTF9QTiwgaXRlbSwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfU1VNTUFSWSwgIiIsIHNlbGYuQ09MX1ZFUlNJT04sICIiLCBzZWxmLkNPTF9SRVZJU0lPTiwgIiIsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0hPTUVQQUdFLCAiIiwgc2VsZi5DT0xfQlVHVFJBQ0tFUiwgIiIpCisgICAgICAgIHNlbGYucG5fcGF0aCA9IHt9CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgcG4gPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgc2VsZi5wbl9wYXRoW3BuXSA9IHBhdGgKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAiIiIKKyAgICBVcGRhdGUgdGhlIG1vZGVsLCBzZW5kIG91dCB0aGUgbm90aWZpY2F0aW9uLgorICAgICIiIgorICAgIGRlZiBzZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5lbWl0KCJyZWNpcGUtc2VsZWN0aW9uLWNoYW5nZWQiKQorCisgICAgZGVmIHBhdGhfaW5jbHVkZWQoc2VsZiwgaXRlbV9wYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdCisKKyAgICAiIiIKKyAgICBBZGQgdGhpcyBpdGVtLCBhbmQgYW55IG9mIGl0cyBkZXBlbmRlbmNpZXMsIHRvIHRoZSBpbWFnZSBjb250ZW50cworICAgICIiIgorICAgIGRlZiBpbmNsdWRlX2l0ZW0oc2VsZiwgaXRlbV9wYXRoLCBiaW5iPSIiLCBpbWFnZV9jb250ZW50cz1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYucGF0aF9pbmNsdWRlZChpdGVtX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXRlbV9uYW1lID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisgICAgICAgIGl0ZW1fZGVwcyA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9ERVBTXQorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gVHJ1ZQorCisgICAgICAgIGl0ZW1fYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIGJpbmIgYW5kIG5vdCBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgaXRlbV9iaW4uYXBwZW5kKGJpbmIpCisgICAgICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oaXRlbV9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgICAgICMgV2Ugd2FudCB0byBkbyBzb21lIG1hZ2ljIHdpdGggdGhpbmdzIHdoaWNoIGFyZSBicm91Z2h0IGluIGJ5IHRoZQorICAgICAgICAjIGJhc2UgaW1hZ2Ugc28gdGFnIHRoZW0gYXMgc28KKyAgICAgICAgaWYgaW1hZ2VfY29udGVudHM6CisgICAgICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU1HXSA9IFRydWUKKworICAgICAgICBpZiBpdGVtX2RlcHM6CisgICAgICAgICAgICAjIEVuc3VyZSBhbGwgb2YgdGhlIGl0ZW1zIGRlcHMgYXJlIGluY2x1ZGVkIGFuZCwgd2hlcmUgYXBwcm9wcmlhdGUsCisgICAgICAgICAgICAjIGFkZCB0aGlzIGl0ZW0gdG8gdGhlaXIgQ09MX0JJTkIKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgIyBJZiB0aGUgY29udGVudHMgbW9kZWwgZG9lc24ndCBhbHJlYWR5IGNvbnRhaW4gZGVwLCBhZGQgaXQKKyAgICAgICAgICAgICAgICBkZXBfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGRlcCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGVwX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwX2luY2x1ZGVkID0gc2VsZi5wYXRoX2luY2x1ZGVkKGRlcF9wYXRoKQorCisgICAgICAgICAgICAgICAgaWYgZGVwX2luY2x1ZGVkIGFuZCBub3QgZGVwIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgICAgICAgICAjIGRvbid0IHNldCB0aGUgQ09MX0JJTkIgdG8gdGhpcyBpdGVtIGlmIHRoZSB0YXJnZXQgaXMgYW4KKyAgICAgICAgICAgICAgICAgICAgIyBpdGVtIGluIG91ciBvd24gQ09MX0JJTkIKKyAgICAgICAgICAgICAgICAgICAgZGVwX2JpbiA9IHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtX25hbWUgaW4gZGVwX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcF9iaW4uYXBwZW5kKGl0ZW1fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGRlcF9iaW4pLmxzdHJpcCgnLCAnKQorICAgICAgICAgICAgICAgIGVsaWYgbm90IGRlcF9pbmNsdWRlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2l0ZW0oZGVwX3BhdGgsIGJpbmI9aXRlbV9uYW1lLCBpbWFnZV9jb250ZW50cz1pbWFnZV9jb250ZW50cykKKyAgICAgICAgZGVwX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0gaW4gZGVwX2JpbjoKKyAgICAgICAgICAgIGRlcF9iaW4ucmVtb3ZlKHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXSkKKyAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGRlcF9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgZGVmIGV4Y2x1ZGVfaXRlbShzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICBpZiBub3Qgc2VsZi5wYXRoX2luY2x1ZGVkKGl0ZW1fcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU5DXSA9IEZhbHNlCisKKyAgICAgICAgaXRlbV9uYW1lID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisgICAgICAgIGl0ZW1fZGVwcyA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9ERVBTXQorICAgICAgICBpZiBpdGVtX2RlcHM6CisgICAgICAgICAgICBmb3IgZGVwIGluIGl0ZW1fZGVwcy5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICBpZiBpdGVtX25hbWUgaW4gZGVwX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5yZW1vdmUoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihkZXBfYmluKS5sc3RyaXAoJywgJykKKworICAgICAgICBpdGVtX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBpdGVtX2JpbjoKKyAgICAgICAgICAgIGZvciBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgICAgIGJpbmJfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGJpbmIpCisgICAgICAgICAgICAgICAgaWYgbm90IGJpbmJfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmV4Y2x1ZGVfaXRlbShiaW5iX3BhdGgpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgc2VsZi5zZXQoaXQsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTkMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfQklOQiwgIiIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTUcsIEZhbHNlKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICBzZWxmLnNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKCkKKworICAgICIiIgorICAgIFJldHVybnMgdHdvIGxpc3RzLiBPbmUgb2YgdXNlciBzZWxlY3RlZCByZWNpcGVzIGFuZCB0aGUgb3RoZXIgY29udGFpbmluZworICAgIGFsbCBzZWxlY3RlZCByZWNpcGVzCisgICAgIiIiCisgICAgZGVmIGdldF9zZWxlY3RlZF9yZWNpcGVzKHNlbGYpOgorICAgICAgICBhbGxyZWNpcGVzID0gW10KKyAgICAgICAgdXNlcnJlY2lwZXMgPSBbXQorCisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9QTikKKyAgICAgICAgICAgICAgICB0eXBlID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1RZUEUpCisgICAgICAgICAgICAgICAgaWYgdHlwZSAhPSAiaW1hZ2UiOgorICAgICAgICAgICAgICAgICAgICBhbGxyZWNpcGVzLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWwgPSAiVXNlciBTZWxlY3RlZCIgaW4gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0JJTkIpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJyZWNpcGVzLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICByZXR1cm4gbGlzdChzZXQodXNlcnJlY2lwZXMpKSwgbGlzdChzZXQoYWxscmVjaXBlcykpCisKKyAgICBkZWYgc2V0X3NlbGVjdGVkX3JlY2lwZXMoc2VsZiwgcmVjaXBlbGlzdCk6CisgICAgICAgIGZvciBwbiBpbiByZWNpcGVsaXN0OgorICAgICAgICAgICAgaWYgcG4gaW4gc2VsZi5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5wbl9wYXRoW3BuXQorICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmI9IlVzZXIgU2VsZWN0ZWQiKQorICAgICAgICBzZWxmLnNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKCkKKworICAgIGRlZiBnZXRfc2VsZWN0ZWRfaW1hZ2Uoc2VsZik6CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9QTikKKyAgICAgICAgICAgICAgICB0eXBlID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1RZUEUpCisgICAgICAgICAgICAgICAgaWYgdHlwZSA9PSAiaW1hZ2UiOgorICAgICAgICAgICAgICAgICAgICBzZWwgPSAiVXNlciBTZWxlY3RlZCIgaW4gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0JJTkIpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNldF9zZWxlY3RlZF9pbWFnZShzZWxmLCBpbWcpOgorICAgICAgICBpZiBub3QgaW1nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBwYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oaW1nKQorICAgICAgICBzZWxmLmluY2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYj0iVXNlciBTZWxlY3RlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2NvbnRlbnRzPVRydWUpCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorCisgICAgZGVmIHNldF9jdXN0b21faW1hZ2VfdmVyc2lvbihzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgc2VsZi5jdXN0b21faW1hZ2VfdmVyc2lvbiA9IHZlcnNpb24KKworICAgIGRlZiBnZXRfY3VzdG9tX2ltYWdlX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmN1c3RvbV9pbWFnZV92ZXJzaW9uCisKKyAgICBkZWYgaXNfY3VzdG9tX2ltYWdlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLl9fY3VzdG9tX2ltYWdlX18KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYnBhZ2VzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9icGFnZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZkMzU5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYnBhZ2VzLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGh3YworCisjCisjIEhvYlBhZ2U6IHRoZSBzdXBlciBjbGFzcyBmb3IgYWxsIEhvYi1yZWxhdGVkIHBhZ2VzCisjICAgIAorY2xhc3MgSG9iUGFnZSAoZ3RrLlZCb3gpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIsIHRpdGxlID0gTm9uZSk6CisgICAgICAgIHN1cGVyKEhvYlBhZ2UsIHNlbGYpLl9faW5pdF9fKEZhbHNlLCAwKQorICAgICAgICBzZWxmLmJ1aWxkZXIgPSBidWlsZGVyCisgICAgICAgIHNlbGYuYnVpbGRlcl93aWR0aCwgc2VsZi5idWlsZGVyX2hlaWdodCA9IHNlbGYuYnVpbGRlci5zaXplX3JlcXVlc3QoKQorCisgICAgICAgIGlmIG5vdCB0aXRsZToKKyAgICAgICAgICAgIHNlbGYudGl0bGUgPSAiSG9iIC0tIEltYWdlIENyZWF0b3IiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRpdGxlID0gdGl0bGUKKyAgICAgICAgc2VsZi50aXRsZV9sYWJlbCA9IGd0ay5MYWJlbCgpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYSA9IGd0ay5WQm94KEZhbHNlLCAxMikKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5zZXRfc2l6ZV9yZXF1ZXN0KHNlbGYuYnVpbGRlcl93aWR0aCAtIDczIC0gNzMsIHNlbGYuYnVpbGRlcl9oZWlnaHQgLSA4OCAtIDE1IC0gMTUpCisgICAgICAgIHNlbGYuZ3JvdXBfYWxpZ24gPSBndGsuQWxpZ25tZW50KHhhbGlnbiA9IDAsIHlhbGlnbj0wLjUsIHhzY2FsZT0xLCB5c2NhbGU9MSkKKyAgICAgICAgc2VsZi5ncm91cF9hbGlnbi5zZXRfcGFkZGluZygxNSwgMTUsIDczLCA3MykKKyAgICAgICAgc2VsZi5ncm91cF9hbGlnbi5hZGQoc2VsZi5ib3hfZ3JvdXBfYXJlYSkKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5zZXRfaG9tb2dlbmVvdXMoRmFsc2UpCisKKyAgICBkZWYgc2V0X3RpdGxlKHNlbGYsIHRpdGxlKToKKyAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCisgICAgICAgIHNlbGYudGl0bGVfbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+JXM8L3NwYW4+IiAlIHNlbGYudGl0bGUpCisKKyAgICBkZWYgYWRkX29udG9fdG9wX2JhcihzZWxmLCB3aWRnZXQgPSBOb25lLCBwYWRkaW5nID0gMCk6CisgICAgICAgICMgdGhlIHRvcCBidXR0b24gb2NjdXBpZXMgMS83IG9mIHRoZSBwYWdlIGhlaWdodAorICAgICAgICAjIHNldHVwIGFuIGV2ZW50IGJveAorICAgICAgICBldmVudGJveCA9IGd0ay5FdmVudEJveCgpCisgICAgICAgIHN0eWxlID0gZXZlbnRib3guZ2V0X3N0eWxlKCkuY29weSgpCisgICAgICAgIHN0eWxlLmJnW2d0ay5TVEFURV9OT1JNQUxdID0gZXZlbnRib3guZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkxJR0hUX0dSQVksIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgZXZlbnRib3guc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICBldmVudGJveC5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA4OCkKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goKQorCisgICAgICAgIHNlbGYudGl0bGVfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLnRpdGxlX2xhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPiVzPC9zcGFuPiIgJSBzZWxmLnRpdGxlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc2VsZi50aXRsZV9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTIwKQorCisgICAgICAgIGlmIHdpZGdldDoKKyAgICAgICAgICAgICMgYWRkIHRoZSB3aWRnZXQgaW4gdGhlIGV2ZW50IGJveAorICAgICAgICAgICAgaGJveC5wYWNrX2VuZCh3aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz1wYWRkaW5nKQorICAgICAgICBldmVudGJveC5hZGQoaGJveCkKKworICAgICAgICByZXR1cm4gZXZlbnRib3gKKworICAgIGRlZiBzcGFuX3RhZyhzZWxmLCBzaXplPSJtZWRpdW0iLCB3ZWlnaHQ9Im5vcm1hbCIsIGZvcmdyb3VuZD0iIzFjMWMxYyIpOgorICAgICAgICBzcGFuX3RhZyA9ICJ3ZWlnaHQ9JyVzJyBmb3JlZ3JvdW5kPSclcycgc2l6ZT0nJXMnIiAlICh3ZWlnaHQsIGZvcmdyb3VuZCwgc2l6ZSkKKyAgICAgICAgcmV0dXJuIHNwYW5fdGFnCisKKyAgICBkZWYgYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYsIHRvb2xiYXIsIGJ1dHRvbm5hbWUsIGljb25fZGlzcCwgaWNvbl9ob3ZvciwgdGlwLCBjYik6CisgICAgICAgICMgQ3JlYXRlIGEgYnV0dG9uIGFuZCBhcHBlbmQgaXQgb24gdGhlIHRvb2xiYXIgYWNjb3JkaW5nIHRvIGJ1dHRvbiBuYW1lCisgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBpY29uX2Rpc3BsYXkgPSBpY29uX2Rpc3AKKyAgICAgICAgaWNvbl9ob3ZlciA9IGljb25faG92b3IKKyAgICAgICAgcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUoaWNvbl9kaXNwbGF5KQorICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihwaXhfYnVmZmVyKQorICAgICAgICB0aXBfdGV4dCA9IHRpcAorICAgICAgICBidXR0b24gPSB0b29sYmFyLmFwcGVuZF9pdGVtKGJ1dHRvbm5hbWUsIHRpcCwgTm9uZSwgaWNvbiwgY2IpCisgICAgICAgIHJldHVybiBidXR0b24KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3NpemVfdG9fc3RyaW5nKHNpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2l6ZToKKyAgICAgICAgICAgICAgICBzaXplX3N0ciA9ICIwIEIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxlbihzdHIoaW50KHNpemUpKSkgPiA2OgorICAgICAgICAgICAgICAgICAgICBzaXplX3N0ciA9ICclLjFmJyAlIChzaXplKjEuMC8oMTAyNCoxMDI0KSkgKyAnIE1CJworICAgICAgICAgICAgICAgIGVsaWYgbGVuKHN0cihpbnQoc2l6ZSkpKSA+IDM6CisgICAgICAgICAgICAgICAgICAgIHNpemVfc3RyID0gJyUuMWYnICUgKHNpemUqMS4wLzEwMjQpICsgJyBLQicKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzaXplX3N0ciA9IHN0cihzaXplKSArICcgQicKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2l6ZV9zdHIgPSAiMCBCIgorICAgICAgICByZXR1cm4gc2l6ZV9zdHIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3N0cmluZ190b19zaXplKHN0cl9zaXplKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHN0cl9zaXplOgorICAgICAgICAgICAgICAgIHNpemUgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVuaXQgPSBzdHJfc2l6ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKHVuaXQpID4gMToKKyAgICAgICAgICAgICAgICAgICAgaWYgdW5pdFsxXSA9PSAnTUInOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZsb2F0KHVuaXRbMF0pKjEwMjQqMTAyNAorICAgICAgICAgICAgICAgICAgICBlbGlmIHVuaXRbMV0gPT0gJ0tCJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBmbG9hdCh1bml0WzBdKSoxMDI0CisgICAgICAgICAgICAgICAgICAgIGVsaWYgdW5pdFsxXSA9PSAnQic6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZmxvYXQodW5pdFswXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZsb2F0KHVuaXRbMF0pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNpemUgPSAwCisgICAgICAgIHJldHVybiBzaXplCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYndpZGdldC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYndpZGdldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjk2OWMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9id2lkZ2V0LnB5CkBAIC0wLDAgKzEsOTA0IEBACisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQgcGFuZ28sIHBhbmdvY2Fpcm8KK2ltcG9ydCBjYWlybworaW1wb3J0IG1hdGgKKworZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMucGVyc2lzdGVudHRvb2x0aXAgaW1wb3J0IFBlcnNpc3RlbnRUb29sdGlwCisKK2NsYXNzIGh3YzoKKworICAgIE1BSU5fV0lOX1dJRFRIICAgPSAxMDI0CisgICAgTUFJTl9XSU5fSEVJR0hUICA9IDcwMAorCitjbGFzcyBoaWM6CisKKyAgICBIT0JfSUNPTl9CQVNFX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwgKCJ1aS9pY29ucy8iKSkKKworICAgIElDT05fUkNJUEVfRElTUExBWV9GSUxFICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3JlY2lwZS9yZWNpcGVfZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX1JDSVBFX0hPVkVSX0ZJTEUgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdyZWNpcGUvcmVjaXBlX2hvdmVyLnBuZycpKQorICAgIElDT05fUEFDS0FHRVNfRElTUExBWV9GSUxFICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nJykpCisgICAgSUNPTl9QQUNLQUdFU19IT1ZFUl9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncGFja2FnZXMvcGFja2FnZXNfaG92ZXIucG5nJykpCisgICAgSUNPTl9MQVlFUlNfRElTUExBWV9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnbGF5ZXJzL2xheWVyc19kaXNwbGF5LnBuZycpKQorICAgIElDT05fTEFZRVJTX0hPVkVSX0ZJTEUgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2xheWVycy9sYXllcnNfaG92ZXIucG5nJykpCisgICAgSUNPTl9JTUFHRVNfRElTUExBWV9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW1hZ2VzL2ltYWdlc19kaXNwbGF5LnBuZycpKQorICAgIElDT05fSU1BR0VTX0hPVkVSX0ZJTEUgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nJykpCisgICAgSUNPTl9TRVRUSU5HU19ESVNQTEFZX0ZJTEUgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnc2V0dGluZ3Mvc2V0dGluZ3NfZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX1NFVFRJTkdTX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdzZXR0aW5ncy9zZXR0aW5nc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORk9fRElTUExBWV9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmZvL2luZm9fZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX0lORk9fSE9WRVJfRklMRSAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmZvL2luZm9faG92ZXIucG5nJykpCisgICAgSUNPTl9JTkRJX0NPTkZJUk1fRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9jb25maXJtYXRpb24ucG5nJykpCisgICAgSUNPTl9JTkRJX0VSUk9SX0ZJTEUgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9kZW5pZWQucG5nJykpCisgICAgSUNPTl9JTkRJX1JFTU9WRV9GSUxFICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9yZW1vdmUucG5nJykpCisgICAgSUNPTl9JTkRJX1JFTU9WRV9IT1ZFUl9GSUxFICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9yZW1vdmUtaG92ZXIucG5nJykpCisgICAgSUNPTl9JTkRJX0FERF9GSUxFICAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9hZGQucG5nJykpCisgICAgSUNPTl9JTkRJX0FERF9IT1ZFUl9GSUxFICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9hZGQtaG92ZXIucG5nJykpCisgICAgSUNPTl9JTkRJX1JFRlJFU0hfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9yZWZyZXNoLnBuZycpKQorICAgIElDT05fSU5ESV9BTEVSVF9GSUxFICAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZGljYXRvcnMvYWxlcnQucG5nJykpCisgICAgSUNPTl9JTkRJX1RJQ0tfRklMRSAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy90aWNrLnBuZycpKQorICAgIElDT05fSU5ESV9JTkZPX0ZJTEUgICAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZGljYXRvcnMvaW5mby5wbmcnKSkKKworY2xhc3MgSG9iVmlld1RhYmxlIChndGsuVkJveCk6CisgICAgIiIiCisgICAgQSBWQm94IHRvIGNvbnRhaW4gdGhlIHRhYmxlIGZvciBkaWZmZXJlbnQgcmVjaXBlIHZpZXdzIGFuZCBwYWNrYWdlIHZpZXcKKyAgICAiIiIKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICAidG9nZ2xlZCIgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0lOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAicm93LWFjdGl2YXRlZCIgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29sdW1ucywgbmFtZSk6CisgICAgICAgIGd0ay5WQm94Ll9faW5pdF9fKHNlbGYsIEZhbHNlLCA2KQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUgPSBndGsuVHJlZVZpZXcoKQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X2hlYWRlcnNfdmlzaWJsZShUcnVlKQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X2hlYWRlcnNfY2xpY2thYmxlKFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfcnVsZXNfaGludChUcnVlKQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X2VuYWJsZV90cmVlX2xpbmVzKFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5nZXRfc2VsZWN0aW9uKCkuc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisgICAgICAgIHNlbGYudG9nZ2xlX2NvbHVtbnMgPSBbXQorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYucm93X2FjdGl2YXRlZF9jYikKKyAgICAgICAgc2VsZi50b3BfYmFyID0gTm9uZQorICAgICAgICBzZWxmLnRhYl9uYW1lID0gbmFtZQorCisgICAgICAgIGZvciBpLCBjb2x1bW4gaW4gZW51bWVyYXRlKGNvbHVtbnMpOgorICAgICAgICAgICAgY29sX25hbWUgPSBjb2x1bW5bJ2NvbF9uYW1lJ10KKyAgICAgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbihjb2xfbmFtZSkKKyAgICAgICAgICAgIGNvbC5zZXRfY2xpY2thYmxlKFRydWUpCisgICAgICAgICAgICBjb2wuc2V0X3Jlc2l6YWJsZShUcnVlKQorICAgICAgICAgICAgaWYgc2VsZi50YWJfbmFtZS5zdGFydHN3aXRoKCdJbmNsdWRlZCcpOgorICAgICAgICAgICAgICAgIGlmIGNvbF9uYW1lIT0nSW5jbHVkZWQnOgorICAgICAgICAgICAgICAgICAgICBjb2wuc2V0X3NvcnRfY29sdW1uX2lkKGNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbC5zZXRfc29ydF9jb2x1bW5faWQoY29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgIGlmICdjb2xfbWluJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgIGNvbC5zZXRfbWluX3dpZHRoKGNvbHVtblsnY29sX21pbiddKQorICAgICAgICAgICAgaWYgJ2NvbF9tYXgnIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgY29sLnNldF9tYXhfd2lkdGgoY29sdW1uWydjb2xfbWF4J10pCisgICAgICAgICAgICBpZiAnZXhwYW5kJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgIGNvbC5zZXRfZXhwYW5kKFRydWUpCisgICAgICAgICAgICBzZWxmLnRhYmxlX3RyZWUuYXBwZW5kX2NvbHVtbihjb2wpCisKKyAgICAgICAgICAgIGlmIChub3QgJ2NvbF9zdHlsZScgaW4gY29sdW1uLmtleXMoKSkgb3IgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAndGV4dCc6CisgICAgICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgICAgICAgICBjb2wucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCB0ZXh0PWNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgaWYgJ2NvbF90X2lkJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZShjZWxsLCAnZm9udCcsIGNvbHVtblsnY29sX3RfaWQnXSkKKyAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAnY2hlY2sgdG9nZ2xlJzoKKyAgICAgICAgICAgICAgICBjZWxsID0gSG9iQ2VsbFJlbmRlcmVyVG9nZ2xlKCkKKyAgICAgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnYWN0aXZhdGFibGUnLCBUcnVlKQorICAgICAgICAgICAgICAgIGNlbGwuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudG9nZ2xlZF9jYiwgaSwgc2VsZi50YWJsZV90cmVlKQorICAgICAgICAgICAgICAgIGNlbGwuY29ubmVjdF9yZW5kZXJfc3RhdGVfY2hhbmdlZChzZWxmLnN0b3BfY2VsbF9mYWRlaW5vdXRfY2IsIHNlbGYudGFibGVfdHJlZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9pZCA9IGkKKyAgICAgICAgICAgICAgICBjb2wucGFja19lbmQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjb2wuc2V0X2F0dHJpYnV0ZXMoY2VsbCwgYWN0aXZlPWNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgc2VsZi50b2dnbGVfY29sdW1ucy5hcHBlbmQoY29sX25hbWUpCisgICAgICAgICAgICAgICAgaWYgJ2NvbF9ncm91cCcgaW4gY29sdW1uLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgY29sLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsLCBzZWxmLnNldF9ncm91cF9udW1iZXJfY2IpCisgICAgICAgICAgICBlbGlmIGNvbHVtblsnY29sX3N0eWxlJ10gPT0gJ3JhZGlvIHRvZ2dsZSc6CisgICAgICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUoKQorICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdhY3RpdmF0YWJsZScsIFRydWUpCisgICAgICAgICAgICAgICAgY2VsbC5zZXRfcmFkaW8oVHJ1ZSkKKyAgICAgICAgICAgICAgICBjZWxsLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRvZ2dsZWRfY2IsIGksIHNlbGYudGFibGVfdHJlZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9pZCA9IGkKKyAgICAgICAgICAgICAgICBjb2wucGFja19lbmQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjb2wuc2V0X2F0dHJpYnV0ZXMoY2VsbCwgYWN0aXZlPWNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgc2VsZi50b2dnbGVfY29sdW1ucy5hcHBlbmQoY29sX25hbWUpCisgICAgICAgICAgICBlbGlmIGNvbHVtblsnY29sX3N0eWxlJ10gPT0gJ2JpbmInOgorICAgICAgICAgICAgICAgIGNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgICAgICAgICAgY29sLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwsIHNlbGYuZGlzcGxheV9iaW5iX2NiLCBjb2x1bW5bJ2NvbF9pZCddKQorICAgICAgICAgICAgICAgIGlmICdjb2xfdF9pZCcgaW4gY29sdW1uLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgY29sLmFkZF9hdHRyaWJ1dGUoY2VsbCwgJ2ZvbnQnLCBjb2x1bW5bJ2NvbF90X2lkJ10pCisKKyAgICAgICAgc2VsZi5zY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzZWxmLnNjcm9sbC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzZWxmLnNjcm9sbC5hZGQoc2VsZi50YWJsZV90cmVlKQorCisgICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5zY3JvbGwsIFRydWUsIFRydWUsIDApCisKKyAgICBkZWYgYWRkX25vX3Jlc3VsdF9iYXIoc2VsZiwgZW50cnkpOgorICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5LSEFLSQorICAgICAgICBzZWxmLnRvcF9iYXIgPSBndGsuRXZlbnRCb3goKQorICAgICAgICBzZWxmLnRvcF9iYXIuc2V0X3NpemVfcmVxdWVzdCgtMSwgNzApCisgICAgICAgIHNlbGYudG9wX2Jhci5tb2RpZnlfYmcoZ3RrLlNUQVRFX05PUk1BTCwgZ3RrLmdkay5jb2xvcl9wYXJzZShjb2xvcikpCisgICAgICAgIHNlbGYudG9wX2Jhci5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBzZWxmLnRvcF9iYXIuZ3JhYl9kZWZhdWx0KCkKKworICAgICAgICBub19yZXN1bHRfdGFiID0gZ3RrLlRhYmxlKDUsIDIwLCBUcnVlKQorICAgICAgICBzZWxmLnRvcF9iYXIuYWRkKG5vX3Jlc3VsdF90YWIpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICB0aXRsZSA9ICJObyByZXN1bHRzIG1hdGNoaW5nIHlvdXIgc2VhcmNoIgorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIHRpdGxlKQorICAgICAgICBub19yZXN1bHRfdGFiLmF0dGFjaChsYWJlbCwgMSwgMTQsIDEsIDQpCisKKyAgICAgICAgY2xlYXJfYnV0dG9uID0gSG9iQnV0dG9uKCJDbGVhciBzZWFyY2giKQorICAgICAgICBjbGVhcl9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ2xlYXIgc2VhcmNoIHF1ZXJ5IikKKyAgICAgICAgY2xlYXJfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfY2xlYXJfY2IsIGVudHJ5KQorICAgICAgICBub19yZXN1bHRfdGFiLmF0dGFjaChjbGVhcl9idXR0b24sIDE2LCAxOSwgMSwgNCkKKworICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi50b3BfYmFyLCBGYWxzZSwgVHJ1ZSwgMTIpCisgICAgICAgIHNlbGYudG9wX2Jhci5zaG93X2FsbCgpCisKKyAgICBkZWYgc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYihzZWxmLCBidXR0b24sIHNlYXJjaCk6CisgICAgICAgIGlmIHNlYXJjaC5nZXRfZWRpdGFibGUoKSA9PSBUcnVlOgorICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQorICAgICAgICBzZWFyY2guc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIHNlYXJjaC5ncmFiX2ZvY3VzKCkKKworICAgIGRlZiBkaXNwbGF5X2JpbmJfY2Ioc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXQsIGNvbF9pZCk6CisgICAgICAgIGJpbmIgPSAgbW9kZWwuZ2V0X3ZhbHVlKGl0LCBjb2xfaWQpCisgICAgICAgICMgSnVzdCBkaXNwbGF5IHRoZSBmaXJzdCBpdGVtCisgICAgICAgIGlmIGJpbmI6CisgICAgICAgICAgICBiaW4gPSBiaW5iLnNwbGl0KCcsICcpCisgICAgICAgICAgICB0b3RhbF9ubyA9IGxlbihiaW4pCisgICAgICAgICAgICBpZiB0b3RhbF9ubyA+IDEgYW5kIGJpblswXSA9PSAiVXNlciBTZWxlY3RlZCI6CisgICAgICAgICAgICAgICAgaWYgdG90YWxfbm8gPiAyOgorICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMV0gKyAnICgrJyArIHN0cih0b3RhbF9ubyAtIDEpICsgJyknCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9iaW5iID0gYmluWzFdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHRvdGFsX25vID4gMToKKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9iaW5iID0gYmluWzBdICsgJyAoKycgKyBzdHIodG90YWxfbm8gLSAxKSArICcpJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfYmluYiA9IGJpblswXQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3RleHQnLCBwcmVzZW50X2JpbmIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsICIiKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNldF9tb2RlbChzZWxmLCB0cmVlX21vZGVsKToKKyAgICAgICAgc2VsZi50YWJsZV90cmVlLnNldF9tb2RlbCh0cmVlX21vZGVsKQorCisgICAgZGVmIHRvZ2dsZV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBtb2RlbCA9IHNlbGYudGFibGVfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpZiBub3QgbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaXRlciA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgaWYgaXRlcjoKKyAgICAgICAgICAgIHJvd3BhdGggPSBtb2RlbC5nZXRfcGF0aChpdGVyKQorICAgICAgICAgICAgbW9kZWxbcm93cGF0aF1bc2VsZi50b2dnbGVfaWRdID0gVHJ1ZQorCisgICAgZGVmIHRvZ2dsZWRfY2Ioc2VsZiwgY2VsbCwgcGF0aCwgY29sdW1uaWQsIHRyZWUpOgorICAgICAgICBzZWxmLmVtaXQoInRvZ2dsZWQiLCBjZWxsLCBwYXRoLCBjb2x1bW5pZCwgdHJlZSkKKworICAgIGRlZiByb3dfYWN0aXZhdGVkX2NiKHNlbGYsIHRyZWUsIHBhdGgsIHZpZXdfY29sdW1uKToKKyAgICAgICAgaWYgbm90IHZpZXdfY29sdW1uLmdldF90aXRsZSgpIGluIHNlbGYudG9nZ2xlX2NvbHVtbnM6CisgICAgICAgICAgICBzZWxmLmVtaXQoInJvdy1hY3RpdmF0ZWQiLCB0cmVlLmdldF9tb2RlbCgpLCBwYXRoKQorCisgICAgZGVmIHN0b3BfY2VsbF9mYWRlaW5vdXRfY2Ioc2VsZiwgY3RybCwgY2VsbCwgdHJlZSk6CisgICAgICAgIHNlbGYuZW1pdCgiY2VsbC1mYWRlaW5vdXQtc3RvcHBlZCIsIGN0cmwsIGNlbGwsIHRyZWUpCisKKyAgICBkZWYgc2V0X2dyb3VwX251bWJlcl9jYihzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgaWYgbW9kZWwgYW5kIChtb2RlbC5pdGVyX3BhcmVudChpdGVyKSA9PSBOb25lKToKKyAgICAgICAgICAgIGNlbGwuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXSA9IG1vZGVsLml0ZXJfbl9jaGlsZHJlbihpdGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2VsbC5jZWxsX2F0dHJbIm51bWJlcl9vZl9jaGlsZHJlbiJdID0gMAorCisgICAgZGVmIGNvbm5lY3RfZ3JvdXBfc2VsZWN0aW9uKHNlbGYsIGNiX2Z1bmMpOgorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuZ2V0X3NlbGVjdGlvbigpLmNvbm5lY3QoImNoYW5nZWQiLCBjYl9mdW5jKQorCisiIiIKK0EgbWV0aG9kIHRvIGNhbGN1bGF0ZSBhIHNvZnRlbmVkIHZhbHVlIGZvciB0aGUgY29sb3VyIG9mIHdpZGdldCB3aGVuIGluIHRoZQorcHJvdmlkZWQgc3RhdGUuCisKK3dpZGdldDogdGhlIHdpZGdldCB3aG9zZSBzdHlsZSB0byB1c2UKK3N0YXRlOiB0aGUgc3RhdGUgb2YgdGhlIHdpZGdldCB0byB1c2UgdGhlIHN0eWxlIGZvcgorCitSZXR1cm5zIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc29mdGVuZWQgY29sb3VyCisiIiIKK2RlZiBzb2Z0ZW5fY29sb3Iod2lkZ2V0LCBzdGF0ZT1ndGsuU1RBVEVfTk9STUFMKToKKyAgICAjIHRoaXMgY29sb3VyIG11bmdpbmcgcm91dGluZSBpcyBoZWF2aWx5IGluc3BpcmVkIGJ1IGdkdV91dGlsX2dldF9taXhfY29sb3IoKQorICAgICMgZnJvbSBnbm9tZS1kaXNrLXV0aWxpdHk6CisgICAgIyBodHRwOi8vZ2l0Lmdub21lLm9yZy9icm93c2UvZ25vbWUtZGlzay11dGlsaXR5L3RyZWUvc3JjL2dkdS1ndGsvZ2R1LWd0ay5jP2g9Z25vbWUtMy0wCisgICAgYmxlbmQgPSAwLjcKKyAgICBzdHlsZSA9IHdpZGdldC5nZXRfc3R5bGUoKQorICAgIGNvbG9yID0gc3R5bGUudGV4dFtzdGF0ZV0KKyAgICBjb2xvci5yZWQgPSBjb2xvci5yZWQgKiBibGVuZCArIHN0eWxlLmJhc2Vbc3RhdGVdLnJlZCAqICgxLjAgLSBibGVuZCkKKyAgICBjb2xvci5ncmVlbiA9IGNvbG9yLmdyZWVuICogYmxlbmQgKyBzdHlsZS5iYXNlW3N0YXRlXS5ncmVlbiAqICgxLjAgLSBibGVuZCkKKyAgICBjb2xvci5ibHVlID0gY29sb3IuYmx1ZSAqIGJsZW5kICsgc3R5bGUuYmFzZVtzdGF0ZV0uYmx1ZSAqICgxLjAgLSBibGVuZCkKKyAgICByZXR1cm4gY29sb3IudG9fc3RyaW5nKCkKKworY2xhc3MgQmFzZUhvYkJ1dHRvbihndGsuQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gc3ViY2xhc3Mgd2hpY2ggZm9sbG93cyB0aGUgdmlzdWFsIGRlc2lnbiBvZiBIb2IgZm9yIHByaW1hcnkKKyAgICBhY3Rpb24gYnV0dG9ucworCisgICAgbGFiZWw6IHRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGJ1dHRvbidzIGxhYmVsCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsKToKKyAgICAgICAgZ3RrLkJ1dHRvbi5fX2luaXRfXyhzZWxmLCBsYWJlbCkKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihzZWxmKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzdHlsZV9idXR0b24oYnV0dG9uKToKKyAgICAgICAgc3R5bGUgPSBidXR0b24uZ2V0X3N0eWxlKCkKKyAgICAgICAgc3R5bGUgPSBndGsucmNfZ2V0X3N0eWxlX2J5X3BhdGhzKGd0ay5zZXR0aW5nc19nZXRfZGVmYXVsdCgpLCAnZ3RrLWJ1dHRvbicsICdndGstYnV0dG9uJywgZ29iamVjdC5UWVBFX05PTkUpCisKKyAgICAgICAgYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIGJ1dHRvbi5ncmFiX2RlZmF1bHQoKQorCisjICAgICAgICBsYWJlbCA9ICI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIGdvYmplY3QubWFya3VwX2VzY2FwZV90ZXh0KGJ1dHRvbi5nZXRfbGFiZWwoKSkKKyAgICAgICAgbGFiZWwgPSBidXR0b24uZ2V0X2xhYmVsKCkKKyAgICAgICAgYnV0dG9uLnNldF9sYWJlbChsYWJlbCkKKyAgICAgICAgYnV0dG9uLmNoaWxkLnNldF91c2VfbWFya3VwKFRydWUpCisKK2NsYXNzIEhvYkJ1dHRvbihCYXNlSG9iQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gc3ViY2xhc3Mgd2hpY2ggZm9sbG93cyB0aGUgdmlzdWFsIGRlc2lnbiBvZiBIb2IgZm9yIHByaW1hcnkKKyAgICBhY3Rpb24gYnV0dG9ucworCisgICAgbGFiZWw6IHRoZSB0ZXh0IHRvIGRpc3BsYXkgYXMgdGhlIGJ1dHRvbidzIGxhYmVsCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsKToKKyAgICAgICAgQmFzZUhvYkJ1dHRvbi5fX2luaXRfXyhzZWxmLCBsYWJlbCkKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihzZWxmKQorCitjbGFzcyBIb2JBbHRCdXR0b24oQmFzZUhvYkJ1dHRvbik6CisgICAgIiIiCisgICAgQSBndGsuQnV0dG9uIHN1YmNsYXNzIHdoaWNoIGhhcyBubyByZWxpZWYsIGFuZCBzbyBpcyBtb3JlIGRpc2NyZXRlCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsKToKKyAgICAgICAgQmFzZUhvYkJ1dHRvbi5fX2luaXRfXyhzZWxmLCBsYWJlbCkKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihzZWxmKQorCisgICAgIiIiCisgICAgQSBjYWxsYmFjayBmb3IgdGhlIHN0YXRlLWNoYW5nZWQgZXZlbnQgdG8gZW5zdXJlIHRoZSB0ZXh0IGlzIGRpc3BsYXllZAorICAgIGRpZmZlcmVudGx5IHdoZW4gdGhlIHdpZGdldCBpcyBub3Qgc2Vuc2l0aXZlCisgICAgIiIiCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBkZXNlbnNpdGlzZV9vbl9zdGF0ZV9jaGFuZ2VfY2IoYnV0dG9uLCBzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBidXR0b24uZ2V0X3Byb3BlcnR5KCJzZW5zaXRpdmUiKToKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zZXRfdGV4dChidXR0b24sIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnNldF90ZXh0KGJ1dHRvbiwgVHJ1ZSkKKworICAgICIiIgorICAgIFNldCB0aGUgYnV0dG9uIGxhYmVsIHdpdGggYW4gYXBwcm9wcmlhdGUgY29sb3VyIGZvciB0aGUgY3VycmVudCB3aWRnZXQgc3RhdGUKKyAgICAiIiIKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNldF90ZXh0KGJ1dHRvbiwgc2Vuc2l0aXZlPVRydWUpOgorICAgICAgICBpZiBzZW5zaXRpdmU6CisgICAgICAgICAgICBjb2xvdXIgPSBIb2JDb2xvcnMuUEFMRV9CTFVFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb2xvdXIgPSBIb2JDb2xvcnMuTElHSFRfR1JBWQorICAgICAgICBidXR0b24uc2V0X2xhYmVsKCI8c3BhbiBzaXplPSdsYXJnZScgY29sb3I9JyVzJz48Yj4lczwvYj48L3NwYW4+IiAlIChjb2xvdXIsIGdvYmplY3QubWFya3VwX2VzY2FwZV90ZXh0KGJ1dHRvbi50ZXh0KSkpCisgICAgICAgIGJ1dHRvbi5jaGlsZC5zZXRfdXNlX21hcmt1cChUcnVlKQorCitjbGFzcyBIb2JJbWFnZUJ1dHRvbihndGsuQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gd2l0aCBhbiBpY29uIGFuZCB0d28gcm93cyBvZiB0ZXh0LCB0aGUgc2Vjb25kIG9mIHdoaWNoIGlzCisgICAgZGlzcGxheWVkIGluIGEgYmxlbmRlZCBjb2xvdXIuCisKKyAgICBwcmltYXJ5X3RleHQ6IHRoZSBtYWluIGJ1dHRvbiBsYWJlbAorICAgIHNlY29uZGFyeV90ZXh0OiBvcHRpb25hbCBzZWNvbmQgbGluZSBvZiB0ZXh0CisgICAgaWNvbl9wYXRoOiBwYXRoIHRvIHRoZSBpY29uIGZpbGUgdG8gZGlzcGxheSBvbiB0aGUgYnV0dG9uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW1hcnlfdGV4dCwgc2Vjb25kYXJ5X3RleHQ9IiIsIGljb25fcGF0aD0iIiwgaG92ZXJfaWNvbl9wYXRoPSIiKToKKyAgICAgICAgZ3RrLkJ1dHRvbi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorCisgICAgICAgIHNlbGYuaWNvbl9wYXRoID0gaWNvbl9wYXRoCisgICAgICAgIHNlbGYuaG92ZXJfaWNvbl9wYXRoID0gaG92ZXJfaWNvbl9wYXRoCisKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMCkKKyAgICAgICAgaGJveC5zaG93KCkKKyAgICAgICAgc2VsZi5hZGQoaGJveCkKKyAgICAgICAgc2VsZi5pY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgc2VsZi5pY29uLnNldF9mcm9tX2ZpbGUoc2VsZi5pY29uX3BhdGgpCisgICAgICAgIHNlbGYuaWNvbi5zZXRfYWxpZ25tZW50KDAuNSwgMC4wKQorICAgICAgICBzZWxmLmljb24uc2hvdygpCisgICAgICAgIGlmIHNlbGYuaG92ZXJfaWNvbl9wYXRoIGFuZCBsZW4oc2VsZi5ob3Zlcl9pY29uX3BhdGgpOgorICAgICAgICAgICAgc2VsZi5jb25uZWN0KCJlbnRlci1ub3RpZnktZXZlbnQiLCBzZWxmLnNldF9ob3Zlcl9pY29uX2NiKQorICAgICAgICAgICAgc2VsZi5jb25uZWN0KCJsZWF2ZS1ub3RpZnktZXZlbnQiLCBzZWxmLnNldF9pY29uX2NiKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc2VsZi5pY29uLCBGYWxzZSwgRmFsc2UsIDApCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgY29sb3VyID0gc29mdGVuX2NvbG9yKGxhYmVsKQorICAgICAgICBtYXJrID0gIjxzcGFuIHNpemU9J3gtbGFyZ2UnPiVzPC9zcGFuPlxuPHNwYW4gc2l6ZT0nbWVkaXVtJyBmZ2NvbG9yPSclcycgd2VpZ2h0PSd1bHRyYWxpZ2h0Jz4lczwvc3Bhbj4iICUgKHByaW1hcnlfdGV4dCwgY29sb3VyLCBzZWNvbmRhcnlfdGV4dCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrKQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGxhYmVsLCBUcnVlLCBUcnVlLCAwKQorCisgICAgZGVmIHNldF9ob3Zlcl9pY29uX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmhvdmVyX2ljb25fcGF0aCkKKworICAgIGRlZiBzZXRfaWNvbl9jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgc2VsZi5pY29uLnNldF9mcm9tX2ZpbGUoc2VsZi5pY29uX3BhdGgpCisKK2NsYXNzIEhvYkluZm9CdXR0b24oZ3RrLkV2ZW50Qm94KToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBidXR0b24tbGlrZSB3aWRnZXQgcGVyIHRoZSBIb2IgdmlzdWFsIGFuZCBVWCBkZXNpZ25zCisgICAgd2hpY2ggd2lsbCBkaXNwbGF5IGEgcGVyc2lzdGVudCB0b29sdGlwLCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aXBfbWFya3VwLCB3aGVuCisgICAgY2xpY2tlZC4KKworICAgIHRpcF9tYXJrdXA6IHRoZSBQYW5nbyBNYXJrdXAgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwZXJzaXN0ZW50IHRvb2x0aXAKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGlwX21hcmt1cCwgcGFyZW50PU5vbmUpOgorICAgICAgICBndGsuRXZlbnRCb3guX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5pbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X2Zyb21fZmlsZSgKKyAgICAgICAgaGljLklDT05fSU5GT19ESVNQTEFZX0ZJTEUpCisgICAgICAgIHNlbGYuaW1hZ2Uuc2hvdygpCisgICAgICAgIHNlbGYuYWRkKHNlbGYuaW1hZ2UpCisgICAgICAgIHNlbGYudGlwX21hcmt1cCA9IHRpcF9tYXJrdXAKKyAgICAgICAgc2VsZi5teV9wYXJlbnQgPSBwYXJlbnQKKworICAgICAgICBzZWxmLnNldF9ldmVudHMoZ3RrLmdkay5CVVRUT05fUkVMRUFTRSB8CisgICAgICAgICAgICAgICAgICAgICAgICBndGsuZ2RrLkVOVEVSX05PVElGWV9NQVNLIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5nZGsuTEVBVkVfTk9USUZZX01BU0spCisKKyAgICAgICAgc2VsZi5jb25uZWN0KCJidXR0b24tcmVsZWFzZS1ldmVudCIsIHNlbGYuYnV0dG9uX3JlbGVhc2VfY2IpCisgICAgICAgIHNlbGYuY29ubmVjdCgiZW50ZXItbm90aWZ5LWV2ZW50Iiwgc2VsZi5tb3VzZV9pbl9jYikKKyAgICAgICAgc2VsZi5jb25uZWN0KCJsZWF2ZS1ub3RpZnktZXZlbnQiLCBzZWxmLm1vdXNlX291dF9jYikKKworICAgICIiIgorICAgIFdoZW4gdGhlIG1vdXNlIGNsaWNrIGlzIHJlbGVhc2VkIGVtdWxhdGUgYSBidXR0b24tY2xpY2sgYW5kIHNob3cgdGhlIGFzc29jaWF0ZWQKKyAgICBQZXJzaXN0ZW50VG9vbHRpcAorICAgICIiIgorICAgIGRlZiBidXR0b25fcmVsZWFzZV9jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgZnJvbSBiYi51aS5jcnVtYnMuaGlnLnByb3BlcnR5ZGlhbG9nIGltcG9ydCBQcm9wZXJ0eURpYWxvZworICAgICAgICBzZWxmLmRpYWxvZyA9IFByb3BlcnR5RGlhbG9nKHRpdGxlID0gJycsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYubXlfcGFyZW50LAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiA9IHNlbGYudGlwX21hcmt1cCwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IpCisKKyAgICAgICAgYnV0dG9uID0gc2VsZi5kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfQ0FOQ0VMKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBsYW1iZGEgdzogc2VsZi5kaWFsb2cuZGVzdHJveSgpKQorICAgICAgICBzZWxmLmRpYWxvZy5zaG93X2FsbCgpCisgICAgICAgIHNlbGYuZGlhbG9nLnJ1bigpCisKKyAgICAiIiIKKyAgICBDaGFuZ2UgdG8gdGhlIHByZWxpZ2h0IGltYWdlIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgd2lkZ2V0CisgICAgIiIiCisgICAgZGVmIG1vdXNlX2luX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBzZWxmLmltYWdlLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5GT19IT1ZFUl9GSUxFKQorCisgICAgIiIiCisgICAgQ2hhbmdlIHRvIHRoZSBzdG9jayBpbWFnZSB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgdGhlIHdpZGdldAorICAgICIiIgorICAgIGRlZiBtb3VzZV9vdXRfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0RJU1BMQVlfRklMRSkKKworY2xhc3MgSG9iSW5kaWNhdG9yKGd0ay5EcmF3aW5nQXJlYSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvdW50KToKKyAgICAgICAgZ3RrLkRyYXdpbmdBcmVhLl9faW5pdF9fKHNlbGYpCisgICAgICAgICMgU2V0IG5vIHdpbmRvdyBmb3IgdHJhbnNwYXJlbnQgYmFja2dyb3VuZAorICAgICAgICBzZWxmLnNldF9oYXNfd2luZG93KEZhbHNlKQorICAgICAgICBzZWxmLnNldF9zaXplX3JlcXVlc3QoMzgsMzgpCisgICAgICAgICMgV2UgbmVlZCB0byBwYXNzIHRocm91Z2ggYnV0dG9uIGNsaWNrcworICAgICAgICBzZWxmLmFkZF9ldmVudHMoZ3RrLmdkay5CVVRUT05fUFJFU1NfTUFTSyB8IGd0ay5nZGsuQlVUVE9OX1JFTEVBU0VfTUFTSykKKworICAgICAgICBzZWxmLmNvbm5lY3QoJ2V4cG9zZS1ldmVudCcsIHNlbGYuZXhwb3NlKQorCisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorICAgICAgICBzZWxmLmNvbG9yID0gSG9iQ29sb3JzLkdSQVkKKworICAgIGRlZiBleHBvc2Uoc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIGlmIHNlbGYuY291bnQgYW5kIHNlbGYuY291bnQgPiAwOgorICAgICAgICAgICAgY3R4ID0gd2lkZ2V0LndpbmRvdy5jYWlyb19jcmVhdGUoKQorCisgICAgICAgICAgICB4LCB5LCB3LCBoID0gc2VsZi5hbGxvY2F0aW9uCisKKyAgICAgICAgICAgIGN0eC5zZXRfb3BlcmF0b3IoY2Fpcm8uT1BFUkFUT1JfT1ZFUikKKyAgICAgICAgICAgIGN0eC5zZXRfc291cmNlX2NvbG9yKGd0ay5nZGsuY29sb3JfcGFyc2Uoc2VsZi5jb2xvcikpCisgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHcvMiwgaC8yKQorICAgICAgICAgICAgY3R4LmFyYyh4LCB5LCBtaW4odyxoKS8yIC0gMiwgMCwgMiptYXRoLnBpKQorICAgICAgICAgICAgY3R4LmZpbGxfcHJlc2VydmUoKQorCisgICAgICAgICAgICBsYXlvdXQgPSBzZWxmLmNyZWF0ZV9wYW5nb19sYXlvdXQoc3RyKHNlbGYuY291bnQpKQorICAgICAgICAgICAgdGV4dHcsIHRleHRoID0gbGF5b3V0LmdldF9waXhlbF9zaXplKCkKKyAgICAgICAgICAgIHggPSAody8yKS0odGV4dHcvMikgKyB4CisgICAgICAgICAgICB5ID0gKGgvMikgLSAodGV4dGgvMikgKyB5CisgICAgICAgICAgICBjdHgubW92ZV90byh4LCB5KQorICAgICAgICAgICAgc2VsZi53aW5kb3cuZHJhd19sYXlvdXQoc2VsZi5zdHlsZS5saWdodF9nY1tndGsuU1RBVEVfTk9STUFMXSwgaW50KHgpLCBpbnQoeSksIGxheW91dCkKKworICAgIGRlZiBzZXRfY291bnQoc2VsZiwgY291bnQpOgorICAgICAgICBzZWxmLmNvdW50ID0gY291bnQKKworICAgIGRlZiBzZXRfYWN0aXZlKHNlbGYsIGFjdGl2ZSk6CisgICAgICAgIGlmIGFjdGl2ZToKKyAgICAgICAgICAgIHNlbGYuY29sb3IgPSBIb2JDb2xvcnMuREVFUF9SRUQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29sb3IgPSBIb2JDb2xvcnMuR1JBWQorCitjbGFzcyBIb2JUYWJMYWJlbChndGsuSEJveCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGNvdW50PTApOgorICAgICAgICBndGsuSEJveC5fX2luaXRfXyhzZWxmLCBGYWxzZSwgMCkKKyAgICAgICAgc2VsZi5pbmRpY2F0b3IgPSBIb2JJbmRpY2F0b3IoY291bnQpCisgICAgICAgIHNlbGYuaW5kaWNhdG9yLnNob3coKQorICAgICAgICBzZWxmLnBhY2tfZW5kKHNlbGYuaW5kaWNhdG9yLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYubGJsID0gZ3RrLkxhYmVsKHRleHQpCisgICAgICAgIHNlbGYubGJsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIHNlbGYubGJsLnNob3coKQorICAgICAgICBzZWxmLnBhY2tfZW5kKHNlbGYubGJsLCBUcnVlLCBUcnVlLCA2KQorCisgICAgZGVmIHNldF9jb3VudChzZWxmLCBjb3VudCk6CisgICAgICAgIHNlbGYuaW5kaWNhdG9yLnNldF9jb3VudChjb3VudCkKKworICAgIGRlZiBzZXRfYWN0aXZlKHNlbGYsIGFjdGl2ZT1UcnVlKToKKyAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2V0X2FjdGl2ZShhY3RpdmUpCisKK2NsYXNzIEhvYk5vdGVib29rKGd0ay5Ob3RlYm9vayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBndGsuTm90ZWJvb2suX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoJ2hvbW9nZW5lb3VzJywgVHJ1ZSkKKworICAgICAgICBzZWxmLnBhZ2VzID0gW10KKworICAgICAgICBzZWxmLnNlYXJjaCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZWFyY2hfZm9jdXMgPSBGYWxzZQorICAgICAgICBzZWxmLnBhZ2VfY2hhbmdlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5jb25uZWN0KCJzd2l0Y2gtcGFnZSIsIHNlbGYucGFnZV9jaGFuZ2VkX2NiKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHBhZ2VfY2hhbmdlZF9jYihzZWxmLCBuYiwgcGFnZSwgcGFnZV9udW0pOgorICAgICAgICBmb3IgcCwgbGJsIGluIGVudW1lcmF0ZShzZWxmLnBhZ2VzKToKKyAgICAgICAgICAgIGlmIHAgPT0gcGFnZV9udW06CisgICAgICAgICAgICAgICAgbGJsLnNldF9hY3RpdmUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsYmwuc2V0X2FjdGl2ZShGYWxzZSkKKworICAgICAgICBpZiBzZWxmLnNlYXJjaDoKKyAgICAgICAgICAgIHNlbGYucGFnZV9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5yZXNldF9lbnRyeShzZWxmLnNlYXJjaCwgcGFnZV9udW0pCisKKyAgICBkZWYgYXBwZW5kX3BhZ2Uoc2VsZiwgY2hpbGQsIHRhYl9sYWJlbCwgdGFiX3Rvb2x0aXA9Tm9uZSk6CisgICAgICAgIGxhYmVsID0gSG9iVGFiTGFiZWwodGFiX2xhYmVsKQorICAgICAgICBpZiB0YWJfdG9vbHRpcDoKKyAgICAgICAgICAgIGxhYmVsLnNldF90b29sdGlwX3RleHQodGFiX3Rvb2x0aXApCisgICAgICAgIGxhYmVsLnNldF9hY3RpdmUoRmFsc2UpCisgICAgICAgIHNlbGYucGFnZXMuYXBwZW5kKGxhYmVsKQorICAgICAgICBndGsuTm90ZWJvb2suYXBwZW5kX3BhZ2Uoc2VsZiwgY2hpbGQsIGxhYmVsKQorCisgICAgZGVmIHNldF9lbnRyeShzZWxmLCBuYW1lcywgdGlwcyk6CisgICAgICAgIHNlbGYuc2VhcmNoID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgc2VsZi5zZWFyY2hfbmFtZXMgPSBuYW1lcworICAgICAgICBzZWxmLnNlYXJjaF90aXBzID0gdGlwcworICAgICAgICBzdHlsZSA9IHNlbGYuc2VhcmNoLmdldF9zdHlsZSgpCisgICAgICAgIHN0eWxlLnRleHRbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKEhvYkNvbG9ycy5HUkFZLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF9zdHlsZShzdHlsZSkKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X3RleHQobmFtZXNbMF0pCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF90b29sdGlwX3RleHQoc2VsZi5zZWFyY2hfdGlwc1swXSkKKyAgICAgICAgc2VsZi5zZWFyY2gucHJvcHMuaGFzX3Rvb2x0aXAgPSBUcnVlCisKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X2VkaXRhYmxlKEZhbHNlKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfaWNvbl9mcm9tX3N0b2NrKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgZ3RrLlNUT0NLX0NMRUFSKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zZWFyY2guY29ubmVjdCgiaWNvbi1yZWxlYXNlIiwgc2VsZi5zZXRfc2VhcmNoX2VudHJ5X2NsZWFyX2NiKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfd2lkdGhfY2hhcnMoMzApCisgICAgICAgIHNlbGYuc2VhcmNoLnNob3coKQorCisgICAgICAgIHNlbGYuc2VhcmNoLmNvbm5lY3QoImZvY3VzLWluLWV2ZW50Iiwgc2VsZi5zZXRfc2VhcmNoX2VudHJ5X2VkaXRhYmxlX2NiKQorICAgICAgICBzZWxmLnNlYXJjaC5jb25uZWN0KCJmb2N1cy1vdXQtZXZlbnQiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfcmVzZXRfY2IpCisgICAgICAgIHNlbGYuc2V0X2FjdGlvbl93aWRnZXQoc2VsZi5zZWFyY2gsIGd0ay5QQUNLX0VORCkKKworICAgIGRlZiBzaG93X2luZGljYXRvcl9pY29uKHNlbGYsIHRpdGxlLCBudW1iZXIpOgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGlmIGNoaWxkLmxibC5nZXRfbGFiZWwoKSA9PSB0aXRsZToKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRfY291bnQobnVtYmVyKQorCisgICAgZGVmIGhpZGVfaW5kaWNhdG9yX2ljb24oc2VsZiwgdGl0bGUpOgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGlmIGNoaWxkLmxibC5nZXRfbGFiZWwoKSA9PSB0aXRsZToKKyAgICAgICAgICAgICAgICBjaGlsZC5zZXRfY291bnQoMCkKKworICAgIGRlZiBzZXRfc2VhcmNoX2VudHJ5X2VkaXRhYmxlX2NiKHNlbGYsIHNlYXJjaCwgZXZlbnQpOgorICAgICAgICBzZWxmLnNlYXJjaF9mb2N1cyA9IFRydWUKKyAgICAgICAgc2VhcmNoLnNldF9lZGl0YWJsZShUcnVlKQorICAgICAgICB0ZXh0ID0gc2VhcmNoLmdldF90ZXh0KCkKKyAgICAgICAgaWYgdGV4dCBpbiBzZWxmLnNlYXJjaF9uYW1lczoKKyAgICAgICAgICAgIHNlYXJjaC5zZXRfdGV4dCgiIikKKyAgICAgICAgc3R5bGUgPSBzZWxmLnNlYXJjaC5nZXRfc3R5bGUoKQorICAgICAgICBzdHlsZS50ZXh0W2d0ay5TVEFURV9OT1JNQUxdID0gc2VsZi5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihIb2JDb2xvcnMuQkxBQ0ssIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VhcmNoLnNldF9zdHlsZShzdHlsZSkKKworICAgIGRlZiBzZXRfc2VhcmNoX2VudHJ5X3Jlc2V0X2NiKHNlbGYsIHNlYXJjaCwgZXZlbnQpOgorICAgICAgICBwYWdlX251bSA9IHNlbGYuZ2V0X2N1cnJlbnRfcGFnZSgpCisgICAgICAgIHRleHQgPSBzZWFyY2guZ2V0X3RleHQoKQorICAgICAgICBpZiBub3QgdGV4dDoKKyAgICAgICAgICAgIHNlbGYucmVzZXRfZW50cnkoc2VhcmNoLCBwYWdlX251bSkKKworICAgIGRlZiByZXNldF9lbnRyeShzZWxmLCBlbnRyeSwgcGFnZV9udW0pOgorICAgICAgICBzdHlsZSA9IGVudHJ5LmdldF9zdHlsZSgpCisgICAgICAgIHN0eWxlLnRleHRbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKEhvYkNvbG9ycy5HUkFZLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIGVudHJ5LnNldF9zdHlsZShzdHlsZSkKKyAgICAgICAgZW50cnkuc2V0X3RleHQoc2VsZi5zZWFyY2hfbmFtZXNbcGFnZV9udW1dKQorICAgICAgICBlbnRyeS5zZXRfdG9vbHRpcF90ZXh0KHNlbGYuc2VhcmNoX3RpcHNbcGFnZV9udW1dKQorICAgICAgICBlbnRyeS5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgIGVudHJ5LnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorCisgICAgZGVmIHNldF9zZWFyY2hfZW50cnlfY2xlYXJfY2Ioc2VsZiwgc2VhcmNoLCBpY29uX3BvcywgZXZlbnQpOgorICAgICAgICBpZiBzZWFyY2guZ2V0X2VkaXRhYmxlKCkgPT0gVHJ1ZToKKyAgICAgICAgICAgIHNlYXJjaC5zZXRfdGV4dCgiIikKKyAgICAgICAgc2VhcmNoLnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBzZWFyY2guZ3JhYl9mb2N1cygpCisKKyAgICBkZWYgc2V0X3BhZ2Uoc2VsZiwgdGl0bGUpOgorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGlmIGNoaWxkLmxibC5nZXRfbGFiZWwoKSA9PSB0aXRsZToKKyAgICAgICAgICAgICAgICBjaGlsZC5ncmFiX2ZvY3VzKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9jdXJyZW50X3BhZ2Uoc2VsZi5wYWdlcy5pbmRleChjaGlsZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKK2NsYXNzIEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0KGd0ay5DZWxsUmVuZGVyZXJUZXh0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29sX251bWJlcik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJUZXh0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJ3cmFwLW1vZGUiLCBwYW5nby5XUkFQX1dPUkRfQ0hBUikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoIndyYXAtd2lkdGgiLCAzMDApICMgZGVmYXVsdCB2YWx1ZSB3cmFwIHdpZHRoIGlzIDMwMAorICAgICAgICBzZWxmLmNvbF9uID0gY29sX251bWJlcgorCisgICAgZGVmIGRvX3JlbmRlcihzZWxmLCB3aW5kb3csIHdpZGdldCwgYmFja2dyb3VuZF9hcmVhLCBjZWxsX2FyZWEsIGV4cG9zZV9hcmVhLCBmbGFncyk6CisgICAgICAgIGlmIHdpZGdldDoKKyAgICAgICAgICAgIHNlbGYucHJvcHMud3JhcF93aWR0aCA9IHNlbGYuZ2V0X3Jlc2l6ZWRfd3JhcF93aWR0aCh3aWRnZXQsIHdpZGdldC5nZXRfY29sdW1uKHNlbGYuY29sX24pKQorICAgICAgICByZXR1cm4gZ3RrLkNlbGxSZW5kZXJlclRleHQuZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKQorCisgICAgZGVmIGdldF9yZXNpemVkX3dyYXBfd2lkdGgoc2VsZiwgdHJlZXZpZXcsIGNvbHVtbik6CisgICAgICAgIG90aGVyQ29scyA9IFtdCisgICAgICAgIGZvciBjb2wgaW4gdHJlZXZpZXcuZ2V0X2NvbHVtbnMoKToKKyAgICAgICAgICAgIGlmIGNvbCAhPSBjb2x1bW46CisgICAgICAgICAgICAgICAgb3RoZXJDb2xzLmFwcGVuZChjb2wpCisgICAgICAgIGFkandpZHRoID0gdHJlZXZpZXcuYWxsb2NhdGlvbi53aWR0aCAtIHN1bShjLmdldF93aWR0aCgpIGZvciBjIGluIG90aGVyQ29scykKKyAgICAgICAgYWRqd2lkdGggLT0gdHJlZXZpZXcuc3R5bGVfZ2V0X3Byb3BlcnR5KCJob3Jpem9udGFsLXNlcGFyYXRvciIpICogNAorICAgICAgICBpZiBzZWxmLnByb3BzLndyYXBfd2lkdGggPT0gYWRqd2lkdGggb3IgYWRqd2lkdGggPD0gMDoKKyAgICAgICAgICAgICAgICBhZGp3aWR0aCA9IHNlbGYucHJvcHMud3JhcF93aWR0aAorICAgICAgICByZXR1cm4gYWRqd2lkdGgKKworZ29iamVjdC50eXBlX3JlZ2lzdGVyKEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0KQorCitjbGFzcyBIb2JJY29uQ2hlY2tlcihoaWMpOgorICAgIGRlZiBzZXRfaG9iX2ljb25fdG9fc3RvY2tfaWNvbihzZWxmLCBmaWxlX3BhdGgsIHN0b2NrX2lkPSIiKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGl4YnVmID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShmaWxlX3BhdGgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIHN0b2NrX2lkIGFuZCAoZ3RrLmljb25fZmFjdG9yeV9sb29rdXBfZGVmYXVsdChzdG9ja19pZCkgPT0gTm9uZSk6CisgICAgICAgICAgICBpY29uX2ZhY3RvcnkgPSBndGsuSWNvbkZhY3RvcnkoKQorICAgICAgICAgICAgaWNvbl9mYWN0b3J5LmFkZF9kZWZhdWx0KCkKKyAgICAgICAgICAgIGljb25fZmFjdG9yeS5hZGQoc3RvY2tfaWQsIGd0ay5JY29uU2V0KHBpeGJ1ZikpCisgICAgICAgICAgICBndGsuc3RvY2tfYWRkKFsoc3RvY2tfaWQsICdfbGFiZWwnLCAwLCAwLCAnJyldKQorCisgICAgICAgICAgICByZXR1cm4gaWNvbl9mYWN0b3J5Lmxvb2t1cChzdG9ja19pZCkKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIiIiCisgICAgRm9yIG1ha2UgaG9iIGljb24gY29uc2lzdGVudGx5IGJ5IHJlcXVlc3QsIGFuZCBhdm9pZCBpY29uIHZpZXcgZGlmZiBieSBzeXN0ZW0gb3IgZ3RrIHZlcnNpb24sIHdlIHVzZSBzb21lICdob2IgaWNvbicgdG8gcmVwbGFjZSB0aGUgJ2d0ayBpY29uJy4KKyAgICB0aGlzIGZ1bmN0aW9uIGNoZWNrIHRoZSBzdG9ja19pZCBhbmQgbWFrZSBob2JfaWQgdG8gcmVwbGFjZWQgdGhlIGd0a19pZCB0aGVuIHJldHVybiBpdCBvciAiIgorICAgICIiIgorICAgIGRlZiBjaGVja19zdG9ja19pY29uKHNlbGYsIHN0b2NrX25hbWU9IiIpOgorICAgICAgICBIT0JfQ0hFQ0tfU1RPQ0tfTkFNRSA9IHsKKyAgICAgICAgICAgICgnaGljLWRpYWxvZy1pbmZvJywgJ2d0ay1kaWFsb2ctaW5mbycsICdkaWFsb2ctaW5mbycpICAgICAgICAgICA6IHNlbGYuSUNPTl9JTkRJX0lORk9fRklMRSwKKyAgICAgICAgICAgICgnaGljLW9rJywgICAgICAgICAgJ2d0ay1vaycsICAgICAgICAgICAnb2snKSAgICAgICAgICAgICAgICAgICA6IHNlbGYuSUNPTl9JTkRJX1RJQ0tfRklMRSwKKyAgICAgICAgICAgICgnaGljLWRpYWxvZy1lcnJvcicsICdndGstZGlhbG9nLWVycm9yJywgJ2RpYWxvZy1lcnJvcicpICAgICAgICA6IHNlbGYuSUNPTl9JTkRJX0VSUk9SX0ZJTEUsCisgICAgICAgICAgICAoJ2hpYy1kaWFsb2ctd2FybmluZycsICdndGstZGlhbG9nLXdhcm5pbmcnLCAnZGlhbG9nLXdhcm5pbmcnKSAgOiBzZWxmLklDT05fSU5ESV9BTEVSVF9GSUxFLAorICAgICAgICAgICAgKCdoaWMtdGFzay1yZWZyZXNoJywgJ2d0ay1leGVjdXRlJywgJ2V4ZWN1dGUnKSAgICAgICAgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfUkVGUkVTSF9GSUxFLAorICAgICAgICB9CisgICAgICAgIHZhbGlkX3N0b2NrX2lkID0gc3RvY2tfbmFtZQorICAgICAgICBpZiBzdG9ja19uYW1lOgorICAgICAgICAgICAgZm9yIG5hbWVzLCBwYXRoIGluIEhPQl9DSEVDS19TVE9DS19OQU1FLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHN0b2NrX25hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHZhbGlkX3N0b2NrX2lkID0gbmFtZXNbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGd0ay5pY29uX2ZhY3RvcnlfbG9va3VwX2RlZmF1bHQodmFsaWRfc3RvY2tfaWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRfaG9iX2ljb25fdG9fc3RvY2tfaWNvbihwYXRoLCB2YWxpZF9zdG9ja19pZCkKKworICAgICAgICByZXR1cm4gdmFsaWRfc3RvY2tfaWQKKworY2xhc3MgSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcihnb2JqZWN0LkdPYmplY3QpOgorICAgIChNT0RFX0NZQ0xFX1JVTk5JTkcsIE1PREVfT05FX1NIT1JUKSA9IHJhbmdlKDIpCisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAicnVuLXRpbWVyLXN0b3BwZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgIH0KKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVubmluZ21vZGU9TU9ERV9DWUNMRV9SVU5OSU5HLCBpc19kcmF3X3Jvdz1GYWxzZSk6CisgICAgICAgIGdvYmplY3QuR09iamVjdC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnRpbWVvdXRfaWQgPSBOb25lCisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPSAwLjAKKyAgICAgICAgc2VsZi5zdGVwX2FuZ2xlID0gMC4wCisgICAgICAgIHNlbGYudHJlZV9oZWFkZXJzX2hlaWdodCA9IDAKKyAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMgPSBbXQorICAgICAgICBzZWxmLnJ1bm5pbmdfbW9kZSA9IHJ1bm5pbmdtb2RlCisgICAgICAgIHNlbGYuaXNfcXVldWVfZHJhd19yb3dfYXJlYSA9IGlzX2RyYXdfcm93CisgICAgICAgIHNlbGYuZm9yY2Vfc3RvcF9lbmFibGUgPSBGYWxzZQorCisgICAgZGVmIGlzX2FjdGl2ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50aW1lb3V0X2lkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJlc2V0X3J1bihzZWxmKToKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wKCkKKyAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMgPSBbXQorICAgICAgICBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zID0gMC4wCisgICAgICAgIHNlbGYuc3RlcF9hbmdsZSA9IDAuMAorCisgICAgJycnIHRpbWVfaXRlcnZhbDogKDF+MTAwMCltcywgd2hpY2ggd2lsbCBiZSBhcyB0aGUgYmFzaWMgaW50ZXJ2YWwgY291bnQgZm9yIHRpbWVyCisgICAgICAgIGluaXRfdXNyZGF0YTogdGhlIGN1cnJlbnQgZGF0YSB3aGljaCByZWxhdGVkIHRoZSBwcm9ncmVzcy1iYXIgd2lsbCBiZSBhdAorICAgICAgICBtaW5fdXNyZGF0YTogdGhlIHJhbmdlIG9mIG1pbiBvZiB1c2VyIGRhdGEKKyAgICAgICAgbWF4X3VzcmRhdGE6IHRoZSByYW5nZSBvZiBtYXggb2YgdXNlciBkYXRhCisgICAgICAgIHN0ZXA6IGVhY2ggc3RlcCB3aGljaCB5b3Ugd2FudCB0byBwcm9ncmVzcworICAgICAgICBOb3RlOiB0aGUgaW5pdF91c3JkYXRhIHNob3VsZCBpbiB0aGUgcmFuZ2Ugb2YgZnJvbSBtaW4gdG8gbWF4LCBhbmQgbWF4IHNob3VsZCA+IG1pbgorICAgICAgICAgICAgIHN0ZXAgc2hvdWxkIDwgKG1heCAtIG1pbikKKyAgICAnJycKKyAgICBkZWYgc3RhcnRfcnVuKHNlbGYsIHRpbWVfaXRlcnZhbCwgaW5pdF91c3JkYXRhLCBtaW5fdXNyZGF0YSwgbWF4X3VzcmRhdGEsIHN0ZXAsIHRyZWUpOgorICAgICAgICBpZiAobm90IHRpbWVfaXRlcnZhbCkgb3IgKG5vdCBtYXhfdXNyZGF0YSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdXNyX3JhbmdlID0gKG1heF91c3JkYXRhIC0gbWluX3VzcmRhdGEpICogMS4wCisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPSAoaW5pdF91c3JkYXRhICogMS4wKSAvIHVzcl9yYW5nZQorICAgICAgICBzZWxmLnN0ZXBfYW5nbGUgPSAoc3RlcCAqIDEpIC8gdXNyX3JhbmdlCisgICAgICAgIHNlbGYudGltZW91dF9pZCA9IGdvYmplY3QudGltZW91dF9hZGQoaW50KHRpbWVfaXRlcnZhbCksCisgICAgICAgIHNlbGYubWFrZV9pbWFnZV9vbl9wcm9ncmVzc2luZ19jYiwgdHJlZSkKKyAgICAgICAgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0ID0gc2VsZi5nZXRfdHJlZXZpZXdfaGVhZGVyc19oZWlnaHQodHJlZSkKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IEZhbHNlCisKKyAgICBkZWYgZm9yY2Vfc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5lbWl0KCJydW4tdGltZXItc3RvcHBlZCIpCisgICAgICAgIHNlbGYuZm9yY2Vfc3RvcF9lbmFibGUgPSBUcnVlCisgICAgICAgIGlmIHNlbGYudGltZW91dF9pZDoKKyAgICAgICAgICAgIGlmIGdvYmplY3Quc291cmNlX3JlbW92ZShzZWxmLnRpbWVvdXRfaWQpOgorICAgICAgICAgICAgICAgIHNlbGYudGltZW91dF9pZCA9IE5vbmUKKworICAgIGRlZiBvbl9kcmF3X3BpeGJ1Zl9jYihzZWxmLCBwaXhidWYsIGNyLCB4LCB5LCBpbWdfd2lkdGgsIGltZ19oZWlnaHQsIGRvX3JlZnJlc2g9VHJ1ZSk6CisgICAgICAgIGlmIHBpeGJ1ZjoKKyAgICAgICAgICAgIHIgPSBtYXgoaW1nX3dpZHRoLzIsIGltZ19oZWlnaHQvMikKKyAgICAgICAgICAgIGNyLnRyYW5zbGF0ZSh4ICsgciwgeSArIHIpCisgICAgICAgICAgICBpZiBkb19yZWZyZXNoOgorICAgICAgICAgICAgICAgIGNyLnJvdGF0ZSgyICogbWF0aC5waSAqIHNlbGYuY3VycmVudF9hbmdsZV9wb3MpCisKKyAgICAgICAgICAgIGNyLnNldF9zb3VyY2VfcGl4YnVmKHBpeGJ1ZiwgLWltZ193aWR0aC8yLCAtaW1nX2hlaWdodC8yKQorICAgICAgICAgICAgY3IucGFpbnQoKQorCisgICAgZGVmIG9uX2RyYXdfZmFkZWlub3V0X2NiKHNlbGYsIGNyLCBjb2xvciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZG9fZmFkZW91dD1UcnVlKToKKyAgICAgICAgaWYgZG9fZmFkZW91dDoKKyAgICAgICAgICAgIGFscGhhID0gc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyAqIDAuOAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWxwaGEgPSAoMS4wIC0gc2VsZi5jdXJyZW50X2FuZ2xlX3BvcykgKiAwLjgKKworICAgICAgICBjci5zZXRfc291cmNlX3JnYmEoY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSwgYWxwaGEpCisgICAgICAgIGNyLnJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KQorICAgICAgICBjci5maWxsKCkKKworICAgIGRlZiBnZXRfdHJlZXZpZXdfaGVhZGVyc19oZWlnaHQoc2VsZiwgdHJlZSk6CisgICAgICAgIGlmIHRyZWUgYW5kICh0cmVlLmdldF9wcm9wZXJ0eSgiaGVhZGVycy12aXNpYmxlIikgPT0gVHJ1ZSk6CisgICAgICAgICAgICBoZWlnaHQgPSB0cmVlLmdldF9hbGxvY2F0aW9uKCkuaGVpZ2h0IC0gdHJlZS5nZXRfYmluX3dpbmRvdygpLmdldF9zaXplKClbMV0KKyAgICAgICAgICAgIHJldHVybiBoZWlnaHQKKworICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIG1ha2VfaW1hZ2Vfb25fcHJvZ3Jlc3NpbmdfY2Ioc2VsZiwgdHJlZSk6CisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgKz0gc2VsZi5zdGVwX2FuZ2xlCisgICAgICAgIGlmIHNlbGYucnVubmluZ19tb2RlID09IHNlbGYuTU9ERV9DWUNMRV9SVU5OSU5HOgorICAgICAgICAgICAgaWYgKHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPj0gMSk6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPiAxOgorICAgICAgICAgICAgICAgIHNlbGYuZm9yY2Vfc3RvcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5pc19xdWV1ZV9kcmF3X3Jvd19hcmVhOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXM6CisgICAgICAgICAgICAgICAgcmVjdCA9IHRyZWUuZ2V0X2NlbGxfYXJlYShwYXRoLCB0cmVlLmdldF9jb2x1bW4oMCkpCisgICAgICAgICAgICAgICAgcm93X3gsIF8sIHJvd193aWR0aCwgXyA9IHRyZWUuZ2V0X3Zpc2libGVfcmVjdCgpCisgICAgICAgICAgICAgICAgdHJlZS5xdWV1ZV9kcmF3X2FyZWEocm93X3gsIHJlY3QueSArIHNlbGYudHJlZV9oZWFkZXJzX2hlaWdodCwgcm93X3dpZHRoLCByZWN0LmhlaWdodCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciByZWN0IGluIHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgorICAgICAgICAgICAgICAgIHRyZWUucXVldWVfZHJhd19hcmVhKHJlY3QueCwgcmVjdC55ICsgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCkKKworICAgICAgICByZXR1cm4gKG5vdCBzZWxmLmZvcmNlX3N0b3BfZW5hYmxlKQorCisgICAgZGVmIGFwcGVuZF9ydW5uaW5nX2NlbGxfYXJlYShzZWxmLCBjZWxsX2FyZWEpOgorICAgICAgICBpZiBjZWxsX2FyZWEgYW5kIChjZWxsX2FyZWEgbm90IGluIHNlbGYucnVubmluZ19jZWxsX2FyZWFzKToKKyAgICAgICAgICAgIHNlbGYucnVubmluZ19jZWxsX2FyZWFzLmFwcGVuZChjZWxsX2FyZWEpCisKKyAgICBkZWYgcmVtb3ZlX3J1bm5pbmdfY2VsbF9hcmVhKHNlbGYsIGNlbGxfYXJlYSk6CisgICAgICAgIGlmIGNlbGxfYXJlYSBpbiBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgIHNlbGYucnVubmluZ19jZWxsX2FyZWFzLnJlbW92ZShjZWxsX2FyZWEpCisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgIHNlbGYucmVzZXRfcnVuKCkKKworZ29iamVjdC50eXBlX3JlZ2lzdGVyKEhvYkNlbGxSZW5kZXJlckNvbnRyb2xsZXIpCisKK2NsYXNzIEhvYkNlbGxSZW5kZXJlclBpeGJ1ZihndGsuQ2VsbFJlbmRlcmVyUGl4YnVmKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJQaXhidWYuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jb250cm9sID0gSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcigpCisgICAgICAgICMgYWRkIGljb24gY2hlY2tlciBmb3IgbWFrZSB0aGUgZ3RrLWljb24gdHJhbnNmZXIgdG8gaG9iLWljb24KKyAgICAgICAgc2VsZi5jaGVja2VyID0gSG9iSWNvbkNoZWNrZXIoKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgic3RvY2stc2l6ZSIsIGd0ay5JQ09OX1NJWkVfRE5EKQorCisgICAgZGVmIGdldF9waXhidWZfZnJvbV9zdG9ja19pY29uKHNlbGYsIHdpZGdldCwgc3RvY2tfaWQ9IiIsIHNpemU9Z3RrLklDT05fU0laRV9ESUFMT0cpOgorICAgICAgICBpZiB3aWRnZXQgYW5kIHN0b2NrX2lkIGFuZCBndGsuaWNvbl9mYWN0b3J5X2xvb2t1cF9kZWZhdWx0KHN0b2NrX2lkKToKKyAgICAgICAgICAgIHJldHVybiB3aWRnZXQucmVuZGVyX2ljb24oc3RvY2tfaWQsIHNpemUpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZXRfaWNvbl9uYW1lX3RvX2lkKHNlbGYsIG5ld19uYW1lKToKKyAgICAgICAgaWYgbmV3X25hbWUgYW5kIHR5cGUobmV3X25hbWUpID09IHN0cjoKKyAgICAgICAgICAgICMgY2hlY2sgdGhlIG5hbWUgaXMgbmVlZCB0byB0cmFuc2ZlciB0byBob2IgaWNvbiBvciBub3QKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLmNoZWNrZXIuY2hlY2tfc3RvY2tfaWNvbihuZXdfbmFtZSkKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiaGljIikgb3IgbmFtZS5zdGFydHN3aXRoKCJndGsiKToKKyAgICAgICAgICAgICAgICBzdG9ja19pZCA9IG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RvY2tfaWQgPSAnZ3RrLScgKyBuYW1lCisKKyAgICAgICAgcmV0dXJuIHN0b2NrX2lkCisKKyAgICAnJycgcmVuZGVyIGNlbGwgZXhhY3RseSwgImljb24tbmFtZSIgaXMgcHJpb3JpdHkKKyAgICAgICAgaWYgdXNlIHRoZSAnaGljLXRhc2stcmVmcmVzaCcgd2lsbCBtYWtlIHRoZSBwaXggYW5pbWF0aW9uCisgICAgICAgIGlmICdwaXgnIHdpbGwgY2hhbmdlIHRoZSBwaXhidWYgZm9yIGl0IGZyb20gdGhlIHBpeGJ1ZiBvciBpbWFnZS4KKyAgICAnJycKKyAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgdHJlZSwgYmFja2dyb3VuZF9hcmVhLGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKKyAgICAgICAgaWYgKG5vdCBzZWxmLmNvbnRyb2wpIG9yIChub3QgdHJlZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB4LCB5LCB3LCBoID0gc2VsZi5vbl9nZXRfc2l6ZSh0cmVlLCBjZWxsX2FyZWEpCisgICAgICAgIHggKz0gY2VsbF9hcmVhLngKKyAgICAgICAgeSArPSBjZWxsX2FyZWEueQorICAgICAgICB3IC09IDIgKiBzZWxmLmdldF9wcm9wZXJ0eSgieHBhZCIpCisgICAgICAgIGggLT0gMiAqIHNlbGYuZ2V0X3Byb3BlcnR5KCJ5cGFkIikKKworICAgICAgICBzdG9ja19pZCA9ICIiCisgICAgICAgIGlmIHNlbGYucHJvcHMuaWNvbl9uYW1lOgorICAgICAgICAgICAgc3RvY2tfaWQgPSBzZWxmLnNldF9pY29uX25hbWVfdG9faWQoc2VsZi5wcm9wcy5pY29uX25hbWUpCisgICAgICAgIGVsaWYgc2VsZi5wcm9wcy5zdG9ja19pZDoKKyAgICAgICAgICAgIHN0b2NrX2lkID0gc2VsZi5wcm9wcy5zdG9ja19pZAorICAgICAgICBlbGlmIHNlbGYucHJvcHMucGl4YnVmOgorICAgICAgICAgICAgcGl4ID0gc2VsZi5wcm9wcy5waXhidWYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHN0b2NrX2lkOgorICAgICAgICAgICAgcGl4ID0gc2VsZi5nZXRfcGl4YnVmX2Zyb21fc3RvY2tfaWNvbih0cmVlLCBzdG9ja19pZCwgc2VsZi5wcm9wcy5zdG9ja19zaXplKQorICAgICAgICBpZiBzdG9ja19pZCA9PSAnaGljLXRhc2stcmVmcmVzaCc6CisgICAgICAgICAgICBzZWxmLmNvbnRyb2wuYXBwZW5kX3J1bm5pbmdfY2VsbF9hcmVhKGNlbGxfYXJlYSkKKyAgICAgICAgICAgIGlmIHNlbGYuY29udHJvbC5pc19hY3RpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRyb2wub25fZHJhd19waXhidWZfY2IocGl4LCB3aW5kb3cuY2Fpcm9fY3JlYXRlKCksIHgsIHksIHcsIGgsIFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuY29udHJvbC5zdGFydF9ydW4oMjAwLCAwLCAwLCAxMDAwLCAxNTAsIHRyZWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbnRyb2wucmVtb3ZlX3J1bm5pbmdfY2VsbF9hcmVhKGNlbGxfYXJlYSkKKyAgICAgICAgICAgIHNlbGYuY29udHJvbC5vbl9kcmF3X3BpeGJ1Zl9jYihwaXgsIHdpbmRvdy5jYWlyb19jcmVhdGUoKSwgeCwgeSwgdywgaCwgRmFsc2UpCisKKyAgICBkZWYgb25fZ2V0X3NpemUoc2VsZiwgd2lkZ2V0LCBjZWxsX2FyZWEpOgorICAgICAgICBpZiBzZWxmLnByb3BzLmljb25fbmFtZSBvciBzZWxmLnByb3BzLnBpeGJ1ZiBvciBzZWxmLnByb3BzLnN0b2NrX2lkOgorICAgICAgICAgICAgdywgaCA9IGd0ay5pY29uX3NpemVfbG9va3VwKHNlbGYucHJvcHMuc3RvY2tfc2l6ZSkKKyAgICAgICAgICAgIGNhbGNfd2lkdGggPSBzZWxmLmdldF9wcm9wZXJ0eSgieHBhZCIpICogMiArIHcKKyAgICAgICAgICAgIGNhbGNfaGVpZ2h0ID0gc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKSAqIDIgKyBoCisgICAgICAgICAgICB4X29mZnNldCA9IDAKKyAgICAgICAgICAgIHlfb2Zmc2V0ID0gMAorICAgICAgICAgICAgaWYgY2VsbF9hcmVhIGFuZCB3ID4gMCBhbmQgaCA+IDA6CisgICAgICAgICAgICAgICAgeF9vZmZzZXQgPSBzZWxmLmdldF9wcm9wZXJ0eSgieGFsaWduIikgKiAoY2VsbF9hcmVhLndpZHRoIC0gY2FsY193aWR0aCAtIHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikpCisgICAgICAgICAgICAgICAgeV9vZmZzZXQgPSBzZWxmLmdldF9wcm9wZXJ0eSgieWFsaWduIikgKiAoY2VsbF9hcmVhLmhlaWdodCAtIGNhbGNfaGVpZ2h0IC0gc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKSkKKworICAgICAgICAgICAgcmV0dXJuIHhfb2Zmc2V0LCB5X29mZnNldCwgdywgaAorCisgICAgICAgIHJldHVybiAwLCAwLCAwLCAwCisKK2dvYmplY3QudHlwZV9yZWdpc3RlcihIb2JDZWxsUmVuZGVyZXJQaXhidWYpCisKK2NsYXNzIEhvYkNlbGxSZW5kZXJlclRvZ2dsZShndGsuQ2VsbFJlbmRlcmVyVG9nZ2xlKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdHJsID0gSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcihpc19kcmF3X3Jvdz1UcnVlKQorICAgICAgICBzZWxmLmN0cmwucnVubmluZ19tb2RlID0gc2VsZi5jdHJsLk1PREVfT05FX1NIT1JUCisgICAgICAgIHNlbGYuY2VsbF9hdHRyID0geyJmYWRlb3V0IjogRmFsc2UsICJudW1iZXJfb2ZfY2hpbGRyZW4iOiAwfQorCisgICAgZGVmIGRvX3JlbmRlcihzZWxmLCB3aW5kb3csIHdpZGdldCwgYmFja2dyb3VuZF9hcmVhLCBjZWxsX2FyZWEsIGV4cG9zZV9hcmVhLCBmbGFncyk6CisgICAgICAgIGlmIChub3Qgc2VsZi5jdHJsKSBvciAobm90IHdpZGdldCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBmbGFncyAmIGd0ay5DRUxMX1JFTkRFUkVSX1NFTEVDVEVEOgorICAgICAgICAgICAgc3RhdGUgPSBndGsuU1RBVEVfU0VMRUNURUQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXRlID0gZ3RrLlNUQVRFX05PUk1BTAorCisgICAgICAgIGlmIHNlbGYuY3RybC5pc19hY3RpdmUoKToKKyAgICAgICAgICAgIHBhdGggPSB3aWRnZXQuZ2V0X3BhdGhfYXRfcG9zKGNlbGxfYXJlYS54ICsgY2VsbF9hcmVhLndpZHRoLzIsIGNlbGxfYXJlYS55ICsgY2VsbF9hcmVhLmhlaWdodC8yKQorICAgICAgICAgICAgIyBzb21ldGltZXMgdGhlIHBhcmFtZXRlcnMgb2YgY2VsbF9hcmVhIHdpbGwgYmUgYSBuZWdhdGl2ZSBudW1iZXIsc3VjaCBhcyBwdWxsIHVwIGRvd24gdGhlIHNjcm9sbCBiYXIKKyAgICAgICAgICAgICMgaXQncyBvdmVyIHRoZSB0cmVlIGNvbnRhaW5lciByYW5nZSwgc28gdGhlIHBhdGggd2lsbCBiZSBiYWQKKyAgICAgICAgICAgIGlmIG5vdCBwYXRoOiByZXR1cm4KKyAgICAgICAgICAgIHBhdGggPSBwYXRoWzBdCisgICAgICAgICAgICBpZiBwYXRoIGluIHNlbGYuY3RybC5ydW5uaW5nX2NlbGxfYXJlYXM6CisgICAgICAgICAgICAgICAgY3IgPSB3aW5kb3cuY2Fpcm9fY3JlYXRlKCkKKyAgICAgICAgICAgICAgICBjb2xvciA9IHdpZGdldC5nZXRfc3R5bGUoKS5iYXNlW3N0YXRlXQorCisgICAgICAgICAgICAgICAgcm93X3gsIF8sIHJvd193aWR0aCwgXyA9IHdpZGdldC5nZXRfdmlzaWJsZV9yZWN0KCkKKyAgICAgICAgICAgICAgICBib3JkZXJfeSA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ5cGFkIikKKyAgICAgICAgICAgICAgICBzZWxmLmN0cmwub25fZHJhd19mYWRlaW5vdXRfY2IoY3IsIGNvbG9yLCByb3dfeCwgY2VsbF9hcmVhLnkgLSBib3JkZXJfeSwgcm93X3dpZHRoLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxfYXJlYS5oZWlnaHQgKyBib3JkZXJfeSAqIDIsIHNlbGYuY2VsbF9hdHRyWyJmYWRlb3V0Il0pCisgICAgICAgICMgZHJhdyBudW1iZXIgb2YgYSBncm91cAorICAgICAgICBpZiBzZWxmLmNlbGxfYXR0clsibnVtYmVyX29mX2NoaWxkcmVuIl06CisgICAgICAgICAgICB0ZXh0ID0gIiVkIHBrZyIgJSBzZWxmLmNlbGxfYXR0clsibnVtYmVyX29mX2NoaWxkcmVuIl0KKyAgICAgICAgICAgIHBhbmdvbGF5b3V0ID0gd2lkZ2V0LmNyZWF0ZV9wYW5nb19sYXlvdXQodGV4dCkKKyAgICAgICAgICAgIHRleHR3LCB0ZXh0aCA9IHBhbmdvbGF5b3V0LmdldF9waXhlbF9zaXplKCkKKyAgICAgICAgICAgIHggPSBjZWxsX2FyZWEueCArIChjZWxsX2FyZWEud2lkdGgvMikgLSAodGV4dHcvMikKKyAgICAgICAgICAgIHkgPSBjZWxsX2FyZWEueSArIChjZWxsX2FyZWEuaGVpZ2h0LzIpIC0gKHRleHRoLzIpCisKKyAgICAgICAgICAgIHdpZGdldC5zdHlsZS5wYWludF9sYXlvdXQod2luZG93LCBzdGF0ZSwgVHJ1ZSwgY2VsbF9hcmVhLCB3aWRnZXQsICJjaGVja2JveCIsIHgsIHksIHBhbmdvbGF5b3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUuZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKQorCisgICAgJycnZGVsYXk6IG5vcm1hbGx5IGRlbGF5IHRpbWUgaXMgMTAwMG1zCisgICAgICAgY2VsbF9saXN0OiB3aGlsY2ggY2VsbHMgbmVlZCB0byBiZSByZW5kZXIKKyAgICAnJycKKyAgICBkZWYgZmFkZW91dChzZWxmLCB0cmVlLCBkZWxheSwgY2VsbF9saXN0PU5vbmUpOgorICAgICAgICBpZiAoZGVsYXkgPCAyMDApIG9yIChub3QgdHJlZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5jZWxsX2F0dHJbImZhZGVvdXQiXSA9IFRydWUKKyAgICAgICAgc2VsZi5jdHJsLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IGNlbGxfbGlzdAorICAgICAgICBzZWxmLmN0cmwuc3RhcnRfcnVuKDIwMCwgMCwgMCwgZGVsYXksIChkZWxheSAqIDIwMCAvIDEwMDApLCB0cmVlKQorCisgICAgZGVmIGNvbm5lY3RfcmVuZGVyX3N0YXRlX2NoYW5nZWQoc2VsZiwgZnVuYywgdXNyZGF0YT1Ob25lKToKKyAgICAgICAgaWYgbm90IGZ1bmM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgdXNyZGF0YToKKyAgICAgICAgICAgIHNlbGYuY3RybC5jb25uZWN0KCJydW4tdGltZXItc3RvcHBlZCIsIGZ1bmMsIHNlbGYsIHVzcmRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmN0cmwuY29ubmVjdCgicnVuLXRpbWVyLXN0b3BwZWQiLCBmdW5jLCBzZWxmKQorCitnb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iQ2VsbFJlbmRlcmVyVG9nZ2xlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2Vjb25maWd1cmF0aW9ucGFnZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2ltYWdlY29uZmlndXJhdGlvbnBhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2NmJlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2ltYWdlY29uZmlndXJhdGlvbnBhZ2UucHkKQEAgLTAsMCArMSw1NjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnbGliCitpbXBvcnQgcmUKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYkltYWdlQnV0dG9uLCBIb2JJbmZvQnV0dG9uLCBIb2JBbHRCdXR0b24sIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaG9ibGlzdG1vZGVsIGltcG9ydCBSZWNpcGVMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCitmcm9tIGJiLnVpLmNydW1icy5oaWcucmV0cmlldmVpbWFnZWRpYWxvZyBpbXBvcnQgUmV0cmlldmVJbWFnZURpYWxvZworCisjCisjIEltYWdlQ29uZmlndXJhdGlvblBhZ2UKKyMKK2NsYXNzIEltYWdlQ29uZmlndXJhdGlvblBhZ2UgKEhvYlBhZ2UpOgorCisgICAgX19kdW1teV9tYWNoaW5lX18gPSAiLS1zZWxlY3QgYSBtYWNoaW5lLS0iCisgICAgX19kdW1teV9pbWFnZV9fICAgPSAiLS1zZWxlY3QgYW4gaW1hZ2UgcmVjaXBlLS0iCisgICAgX19jdXN0b21faW1hZ2VfXyAgPSAiU2VsZWN0IGZyb20gbXkgaW1hZ2UgcmVjaXBlcyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyKToKKyAgICAgICAgc3VwZXIoSW1hZ2VDb25maWd1cmF0aW9uUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIkltYWdlIGNvbmZpZ3VyYXRpb24iKQorCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm9faWQgPSBOb25lCisgICAgICAgICMgd2UgdXNlIG1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWwgdG8gaWRlbnRpZnkgdGhlIG1hY2hpbmUgaXMgY2hhbmdlZCBieSBjb2RlCisgICAgICAgICMgb3IgYnkgbWFudWFsLiBJZiBieSBtYW51YWwsIGFsbCB1c2VyJ3MgcmVjaXBlIHNlbGVjdGlvbiBhbmQgcGFja2FnZSBzZWxlY3Rpb24gYXJlCisgICAgICAgICMgY2xlYXJlZC4KKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsID0gVHJ1ZQorICAgICAgICBzZWxmLnN0b3BwaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXJuaW5nX3NoaWZ0ID0gMAorICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgc2VsZi50b29sYmFyID0gZ3RrLlRvb2xiYXIoKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X29yaWVudGF0aW9uKGd0ay5PUklFTlRBVElPTl9IT1JJWk9OVEFMKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X3N0eWxlKGd0ay5UT09MQkFSX0JPVEgpCisKKyAgICAgICAgbXlfaW1hZ2VzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJJbWFnZXMiLAorICAgICAgICAgICAgaGljLklDT05fSU1BR0VTX0RJU1BMQVlfRklMRSwKKyAgICAgICAgICAgIGhpYy5JQ09OX0lNQUdFU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIk9wZW4gcHJldmlvdXNseSBidWlsdCBpbWFnZXMiLAorICAgICAgICAgICAgc2VsZi5teV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIHNldHRpbmdzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19ESVNQTEFZX0ZJTEUsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIlZpZXcgYWRkaXRpb25hbCBidWlsZCBzZXR0aW5ncyIsCisgICAgICAgICAgICBzZWxmLnNldHRpbmdzX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgIHNlbGYuY29uZmlnX3RvcF9idXR0b24gPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoc2VsZi50b29sYmFyKQorCisgICAgICAgIHNlbGYuZ3RhYmxlID0gZ3RrLlRhYmxlKDQwLCA0MCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5jcmVhdGVfY29uZmlnX21hY2hpbmUoKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb25maWdfYmFzZWltZygpCisgICAgICAgIHNlbGYuY29uZmlnX2J1aWxkX2J1dHRvbiA9IHNlbGYuY3JlYXRlX2NvbmZpZ19idWlsZF9idXR0b24oKQorCisgICAgZGVmIF9yZW1vdmVfYWxsX3dpZGdldChzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmd0YWJsZS5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmd0YWJsZS5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5ib3hfZ3JvdXBfYXJlYS5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKGNoaWxkKQorCisgICAgZGVmIF9wYWNrX2NvbXBvbmVudHMoc2VsZiwgcGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gRmFsc2UpOgorICAgICAgICBzZWxmLl9yZW1vdmVfYWxsX3dpZGdldCgpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmNvbmZpZ190b3BfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmd0YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgaWYgcGFja19jb25maWdfYnVpbGRfYnV0dG9uOgorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX2VuZChzZWxmLmNvbmZpZ19idWlsZF9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICAgICAgYm94LnNob3coKQorICAgICAgICAgICAgc3ViYm94ID0gZ3RrLkhCb3goRmFsc2UsIDApCisgICAgICAgICAgICBzdWJib3guc2V0X3NpemVfcmVxdWVzdCgyMDUsIDQ5KQorICAgICAgICAgICAgc3ViYm94LnNob3coKQorICAgICAgICAgICAgYm94LmFkZChzdWJib3gpCisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKGJveCwgRmFsc2UsIEZhbHNlKQorCisgICAgZGVmIHNob3dfbWFjaGluZShzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucmVzZXQoKQorICAgICAgICBzZWxmLl9wYWNrX2NvbXBvbmVudHMocGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiB1cGRhdGVfcHJvZ3Jlc3NfYmFyKHNlbGYsIHRpdGxlLCBmcmFjdGlvbiwgc3RhdHVzPU5vbmUpOgorICAgICAgICBpZiBzZWxmLnN0b3BwaW5nID09IEZhbHNlOgorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIudXBkYXRlKGZyYWN0aW9uKQorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RleHQodGl0bGUpCisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZShzdGF0dXMpCisKKyAgICBkZWYgc2hvd19pbmZvX3BvcHVsYXRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3BhY2tfY29tcG9uZW50cyhwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgc2hvd19pbmZvX3BvcHVsYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucmVzZXQoKQorICAgICAgICBzZWxmLl9wYWNrX2NvbXBvbmVudHMocGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKQorICAgICAgICBzZWxmLnNldF9jb25maWdfYmFzZWltZ19sYXlvdXQoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBzaG93X2Jhc2VpbWdfc2VsZWN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5fcGFja19jb21wb25lbnRzKHBhY2tfY29uZmlnX2J1aWxkX2J1dHRvbiA9IFRydWUpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKQorICAgICAgICBzZWxmLnNldF9jb25maWdfYmFzZWltZ19sYXlvdXQoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uaGlkZSgpCisKKyAgICBkZWYgYWRkX3dhcm5pbmdzX2JhcihzZWxmKToKKyAgICAgICAgI2NyZWF0ZSB0aGUgd2FybmluZ3MgYmFyIHNob3duIHdoZW4gcmVjaXBlcyBwYXJzaW5nIGdlbmVyYXRlcyB3YXJuaW5ncworICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5LSEFLSQorICAgICAgICB3YXJuaW5nc19iYXIgPSBndGsuRXZlbnRCb3goKQorICAgICAgICB3YXJuaW5nc19iYXIubW9kaWZ5X2JnKGd0ay5TVEFURV9OT1JNQUwsIGd0ay5nZGsuY29sb3JfcGFyc2UoY29sb3IpKQorICAgICAgICB3YXJuaW5nc19iYXIuc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgd2FybmluZ3NfYmFyLmdyYWJfZGVmYXVsdCgpCisKKyAgICAgICAgYnVpbGRfc3RvcF90YWIgPSBndGsuVGFibGUoMTAsIDIwLCBUcnVlKQorICAgICAgICB3YXJuaW5nc19iYXIuYWRkKGJ1aWxkX3N0b3BfdGFiKQorCisgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBpY29uX3BpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfQUxFUlRfRklMRSkKKyAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYoaWNvbl9waXhfYnVmZmVyKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2goaWNvbiwgMCwgMiwgMCwgMTApCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICB3YXJuaW5nc19uYiA9IGxlbihzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5ncykKKyAgICAgICAgaWYgd2FybmluZ3NfbmIgPT0gMToKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPjEgcmVjaXBlIHBhcnNpbmcgd2FybmluZzwvYj48L3NwYW4+IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzIHJlY2lwZSBwYXJzaW5nIHdhcm5pbmdzPC9iPjwvc3Bhbj4iICUgd2FybmluZ3NfbmIpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChsYWJlbCwgMiwgMTIsIDAsIDEwKQorCisgICAgICAgIHZpZXdfd2FybmluZ3NfYnV0dG9uID0gSG9iQnV0dG9uKCJWaWV3IHdhcm5pbmdzIikKKyAgICAgICAgdmlld193YXJuaW5nc19idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYudmlld193YXJuaW5nc19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKHZpZXdfd2FybmluZ3NfYnV0dG9uLCAxNSwgMTksIDEsIDkpCisKKyAgICAgICAgcmV0dXJuIHdhcm5pbmdzX2JhcgorCisgICAgZGVmIGRpc2FibGVfd2FybmluZ3NfYmFyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5nczoKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3dhcm5pbmdzX2JhcicpOgorICAgICAgICAgICAgICAgIHNlbGYud2FybmluZ3NfYmFyLmhpZGVfYWxsKCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKworICAgIGRlZiBjcmVhdGVfY29uZmlnX21hY2hpbmUoc2VsZik6CisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZSA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZS5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrID0gIjxzcGFuICVzPlNlbGVjdCBhIG1hY2hpbmU8L3NwYW4+IiAlIHNlbGYuc3Bhbl90YWcoJ3gtbGFyZ2UnLCAnYm9sZCcpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZS5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrID0gKCI8c3BhbiAlcz5Zb3VyIHNlbGVjdGlvbiBpcyB0aGUgcHJvZmlsZSBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgZm9yIHdoaWNoIHlvdSIKKyAgICAgICAgIiBhcmUgYnVpbGRpbmcgdGhlIGltYWdlLlxuPC9zcGFuPiIpICUgKHNlbGYuc3Bhbl90YWcoJ21lZGl1bScpKQorICAgICAgICBzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYy5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfY2IpCisKKyAgICAgICAgaWNvbl9maWxlID0gaGljLklDT05fTEFZRVJTX0RJU1BMQVlfRklMRQorICAgICAgICBob3Zlcl9maWxlID0gaGljLklDT05fTEFZRVJTX0hPVkVSX0ZJTEUKKyAgICAgICAgc2VsZi5sYXllcl9idXR0b24gPSBIb2JJbWFnZUJ1dHRvbigiTGF5ZXJzIiwgIkFkZCBzdXBwb3J0IGZvciBtYWNoaW5lcywgc29mdHdhcmUsIGV0Yy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uX2ZpbGUsIGhvdmVyX2ZpbGUpCisgICAgICAgIHNlbGYubGF5ZXJfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmxheWVyX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgIG1hcmt1cCA9ICJMYXllcnMgYXJlIGEgcG93ZXJmdWwgbWVjaGFuaXNtIHRvIGV4dGVuZCB0aGUgWW9jdG8gUHJvamVjdCAiCisgICAgICAgIG1hcmt1cCArPSAid2l0aCB5b3VyIG93biBmdW5jdGlvbmFsaXR5LlxuIgorICAgICAgICBtYXJrdXAgKz0gIkZvciBtb3JlIG9uIGxheWVycywgY2hlY2sgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIG1hcmt1cCArPSAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvY3VycmVudC9kZXYtbWFudWFsLyIKKyAgICAgICAgbWFya3VwICs9ICJkZXYtbWFudWFsLmh0bWwjdW5kZXJzdGFuZGluZy1hbmQtdXNpbmctbGF5ZXJzXCI+cmVmZXJlbmNlIG1hbnVhbDwvYT4uIgorICAgICAgICBzZWxmLmxheWVyX2luZm9faWNvbiA9IEhvYkluZm9CdXR0b24oIjxiPkxheWVyczwvYj4iICsgIioiICsgbWFya3VwLCBzZWxmLmdldF9wYXJlbnQoKSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYuc3RvcF9idXR0b24gPSBIb2JBbHRCdXR0b24oIlN0b3AiKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnN0b3BfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIHNlbGYubWFjaGluZV9zZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisKKyAgICBkZWYgc2V0X2NvbmZpZ19tYWNoaW5lX2xheW91dChzZWxmLCBzaG93X3Byb2dyZXNzX2JhciA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV90aXRsZSwgMCwgNDAsIDAsIDQpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYywgMCwgNDAsIDQsIDYpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLm1hY2hpbmVfY29tYm8sIDAsIDEyLCA3LCAxMCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubGF5ZXJfYnV0dG9uLCAxNCwgMzYsIDcsIDEyKQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5sYXllcl9pbmZvX2ljb24sIDM2LCA0MCwgNywgMTEpCisgICAgICAgIGlmIHNob3dfcHJvZ3Jlc3NfYmFyOgorICAgICAgICAgICAgI3NlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnByb2dyZXNzX2JveCwgMCwgNDAsIDE1LCAxOCkKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnByb2dyZXNzX2JhciwgMCwgMzcsIDE1LCAxOCkKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnN0b3BfYnV0dG9uLCAzNywgNDAsIDE1LCAxOCwgMCwgMCkKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhcm5pbmdzX2JhciA9IHNlbGYuYWRkX3dhcm5pbmdzX2JhcigpCisgICAgICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi53YXJuaW5nc19iYXIsIDAsIDQwLCAxNCwgMTgpCisgICAgICAgICAgICBzZWxmLndhcm5pbmdfc2hpZnQgPSA0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndhcm5pbmdfc2hpZnQgPSAwCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLm1hY2hpbmVfc2VwYXJhdG9yLCAwLCA0MCwgMTMsIDE0KQorCisgICAgZGVmIGNyZWF0ZV9jb25maWdfYmFzZWltZyhzZWxmKToKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZSA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuaW1hZ2VfdGl0bGUuc2V0X2FsaWdubWVudCgwLCAxLjApCisgICAgICAgIG1hcmsgPSAiPHNwYW4gJXM+U2VsZWN0IGFuIGltYWdlIHJlY2lwZTwvc3Bhbj4iICUgc2VsZi5zcGFuX3RhZygneC1sYXJnZScsICdib2xkJykKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZS5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZV9kZXNjID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZV9kZXNjLnNldF9hbGlnbm1lbnQoMCwgMC41KQorCisgICAgICAgIG1hcmsgPSAoIjxzcGFuICVzPkltYWdlIHJlY2lwZXMgYXJlIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSB0eXBlIG9mIGltYWdlIHlvdSB3YW50LiAiCisgICAgICAgICAgICAgICAgIllvdSBjYW4gYnVpbGQgdGhlbSBhcyBcbiIKKyAgICAgICAgICAgICAgICAidGhleSBhcmUgb3IgZWRpdCB0aGVtIHRvIHN1aXQgeW91ciBuZWVkcy5cbjwvc3Bhbj4iKSAlIHNlbGYuc3Bhbl90YWcoJ21lZGl1bScpCisgICAgICAgIHNlbGYuaW1hZ2VfdGl0bGVfZGVzYy5zZXRfbWFya3VwKG1hcmspCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ibyA9IGd0ay5jb21ib19ib3hfbmV3X3RleHQoKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnNldF9yb3dfc2VwYXJhdG9yX2Z1bmMoc2VsZi5jb21ib19zZXBhcmF0b3JfZnVuYywgTm9uZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IHNlbGYuaW1hZ2VfY29tYm8uY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuaW1hZ2VfY29tYm9fY2hhbmdlZF9jYikKKworICAgICAgICBzZWxmLmltYWdlX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9zaXplX3JlcXVlc3QoMjU2LCAtMSkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9qdXN0aWZ5KGd0ay5KVVNUSUZZX0xFRlQpCisgICAgICAgIHNlbGYuaW1hZ2VfZGVzYy5zZXRfbGluZV93cmFwKFRydWUpCisKKyAgICAgICAgIyBidXR0b24gdG8gdmlldyByZWNpcGVzCisgICAgICAgIGljb25fZmlsZSA9IGhpYy5JQ09OX1JDSVBFX0RJU1BMQVlfRklMRQorICAgICAgICBob3Zlcl9maWxlID0gaGljLklDT05fUkNJUEVfSE9WRVJfRklMRQorICAgICAgICBzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uID0gSG9iSW1hZ2VCdXR0b24oIkFkdmFuY2VkIGNvbmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VsZWN0IGltYWdlIHR5cGVzLCBwYWNrYWdlIGZvcm1hdHMsIGV0YyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZmlsZSwgaG92ZXJfZmlsZSkgICAgICAgIAorICAgICAgICBzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgc2VsZi5pbWFnZV9zZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisKKyAgICBkZWYgY29tYm9fc2VwYXJhdG9yX2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIsIHVzZXJfZGF0YSk6CisgICAgICAgIG5hbWUgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMCkKKyAgICAgICAgaWYgbmFtZSA9PSAiLS1TZXBhcmF0b3ItLSI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNldF9jb25maWdfYmFzZWltZ19sYXlvdXQoc2VsZik6CisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLmltYWdlX3RpdGxlLCAwLCA0MCwgMTUrc2VsZi53YXJuaW5nX3NoaWZ0LCAxNytzZWxmLndhcm5pbmdfc2hpZnQpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLmltYWdlX3RpdGxlX2Rlc2MsIDAsIDQwLCAxOCtzZWxmLndhcm5pbmdfc2hpZnQsIDIyK3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfY29tYm8sIDAsIDEyLCAyMytzZWxmLndhcm5pbmdfc2hpZnQsIDI2K3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfZGVzYywgMCwgMTIsIDI3K3NlbGYud2FybmluZ19zaGlmdCwgMzMrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi52aWV3X2Fkdl9jb25maWd1cmF0aW9uX2J1dHRvbiwgMTQsIDM2LCAyMytzZWxmLndhcm5pbmdfc2hpZnQsIDI4K3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2Vfc2VwYXJhdG9yLCAwLCA0MCwgMzUrc2VsZi53YXJuaW5nX3NoaWZ0LCAzNitzZWxmLndhcm5pbmdfc2hpZnQpCisKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ19idWlsZF9idXR0b24oc2VsZik6CisgICAgICAgICMgQ3JlYXRlIHRoZSAiQnVpbGQgcGFja2FnZXMiIGFuZCAiQnVpbGQgaW1hZ2UiIGJ1dHRvbnMgYXQgdGhlIGJvdHRvbQorICAgICAgICBidXR0b25fYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisKKyAgICAgICAgIyBjcmVhdGUgYnV0dG9uICJCdWlsZCBpbWFnZSIKKyAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uID0gSG9iQnV0dG9uKCJCdWlsZCBpbWFnZSIpCisgICAgICAgIHNlbGYuanVzdF9iYWtlX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCB0aGUgaW1hZ2UgcmVjaXBlIGFzIGl0IGlzIikKKyAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmp1c3RfYmFrZV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmp1c3RfYmFrZV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICAjIGNyZWF0ZSBidXR0b24gIkVkaXQgaW1hZ2UgcmVjaXBlIgorICAgICAgICBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJFZGl0IGltYWdlIHJlY2lwZSIpCisgICAgICAgIHNlbGYuZWRpdF9pbWFnZV9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ3VzdG9taXplIHRoZSByZWNpcGVzIGFuZCBwYWNrYWdlcyB0byBiZSBpbmNsdWRlZCBpbiB5b3VyIGltYWdlIikKKyAgICAgICAgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuZWRpdF9pbWFnZV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICByZXR1cm4gYnV0dG9uX2JveAorCisgICAgZGVmIHN0b3BfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IFRydWUKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3RleHQoIlN0b3BwaW5nIHJlY2lwZSBwYXJzaW5nIikKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2V0X3Jjc3R5bGUoInN0b3AiKQorICAgICAgICBzZWxmLmJ1aWxkZXIuY2FuY2VsX3BhcnNlX3N5bmMoKQorCisgICAgZGVmIHZpZXdfd2FybmluZ3NfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfd2FybmluZ19kaWFsb2coKQorCisgICAgZGVmIG1hY2hpbmVfY29tYm9fY2hhbmdlZF9pZGxlX2NiKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93LnNldF9jdXJzb3IoTm9uZSkKKworICAgIGRlZiBtYWNoaW5lX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgbWFjaGluZV9jb21ibyk6CisgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5ncyA9IFtdCisgICAgICAgIGNvbWJvX2l0ZW0gPSBtYWNoaW5lX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIGlmIG5vdCBjb21ib19pdGVtIG9yIGNvbWJvX2l0ZW0gPT0gc2VsZi5fX2R1bW15X21hY2hpbmVfXzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLldBVENIKSkKKyAgICAgICAgc2VsZi5idWlsZGVyLndhaXQoMC4xKSAjd2FpdCBmb3IgY29tYm8gYW5kIGN1cnNvciB0byB1cGRhdGUKKworICAgICAgICAjIHJlbW92ZSBfX2R1bW15X21hY2hpbmVfXyBpdGVtIGZyb20gdGhlIHN0b3JlIGxpc3QgYWZ0ZXIgZmlyc3QgdXNlciBzZWxlY3Rpb24KKyAgICAgICAgIyBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciB2YWxpZAorICAgICAgICBjb21ib19zdG9yZSA9IG1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgbGVuKGNvbWJvX3N0b3JlKSBhbmQgKGNvbWJvX3N0b3JlWzBdWzBdID09IHNlbGYuX19kdW1teV9tYWNoaW5lX18pOgorICAgICAgICAgICAgbWFjaGluZV9jb21iby5yZW1vdmVfdGV4dCgwKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmN1cnJfbWFjaCA9IGNvbWJvX2l0ZW0KKyAgICAgICAgaWYgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY2xlYXJfc2VsZWN0aW9uKCkKKyAgICAgICAgIyByZXNldCBtYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsCisgICAgICAgIHNlbGYubWFjaGluZV9jb21ib19jaGFuZ2VkX2J5X21hbnVhbCA9IFRydWUKKworICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IE5vbmUKKworICAgICAgICAjIERvIHJlcGFyc2UgcmVjaXBlcworICAgICAgICBzZWxmLmJ1aWxkZXIucG9wdWxhdGVfcmVjaXBlX3BhY2thZ2VfaW5mb19hc3luYygpCisKKyAgICAgICAgZ2xpYi5pZGxlX2FkZChzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9pZGxlX2NiKQorCisgICAgZGVmIHVwZGF0ZV9tYWNoaW5lX2NvbWJvKHNlbGYpOgorICAgICAgICBzZWxmLmRpc2FibGVfd2FybmluZ3NfYmFyKCkKKyAgICAgICAgYWxsX21hY2hpbmVzID0gW3NlbGYuX19kdW1teV9tYWNoaW5lX19dICsgc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuYWxsX21hY2hpbmVzCisKKyAgICAgICAgbW9kZWwgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgbW9kZWwuY2xlYXIoKQorICAgICAgICBmb3IgbWFjaGluZSBpbiBhbGxfbWFjaGluZXM6CisgICAgICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uYXBwZW5kX3RleHQobWFjaGluZSkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUoMCkKKworICAgIGRlZiBzd2l0Y2hfbWFjaGluZV9jb21ibyhzZWxmKToKKyAgICAgICAgc2VsZi5kaXNhYmxlX3dhcm5pbmdzX2JhcigpCisgICAgICAgIHNlbGYubWFjaGluZV9jb21ib19jaGFuZ2VkX2J5X21hbnVhbCA9IEZhbHNlCisgICAgICAgIG1vZGVsID0gc2VsZi5tYWNoaW5lX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZSA9IDAKKyAgICAgICAgd2hpbGUgYWN0aXZlIDwgbGVuKG1vZGVsKToKKyAgICAgICAgICAgIGlmIG1vZGVsW2FjdGl2ZV1bMF0gPT0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoOgorICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfYWN0aXZlKGFjdGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGFjdGl2ZSArPSAxCisKKyAgICAgICAgaWYgbW9kZWxbMF1bMF0gIT0gc2VsZi5fX2R1bW15X21hY2hpbmVfXzoKKyAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5pbnNlcnRfdGV4dCgwLCBzZWxmLl9fZHVtbXlfbWFjaGluZV9fKQorCisgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfYWN0aXZlKDApCisKKyAgICBkZWYgdXBkYXRlX2ltYWdlX2Rlc2Moc2VsZik6CisgICAgICAgIGRlc2MgPSAiIgorICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYuaW1hZ2VfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgYW5kIHNlbGVjdGVkX2ltYWdlIGluIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwucG5fcGF0aC5rZXlzKCk6CisgICAgICAgICAgICBpbWFnZV9wYXRoID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5wbl9wYXRoW3NlbGVjdGVkX2ltYWdlXQorICAgICAgICAgICAgaW1hZ2VfaXRlciA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X2l0ZXIoaW1hZ2VfcGF0aCkKKyAgICAgICAgICAgIGRlc2MgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF92YWx1ZShpbWFnZV9pdGVyLCBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLkNPTF9ERVNDKQorCisgICAgICAgIG1hcmsgPSAoIjxzcGFuICVzPiVzPC9zcGFuPlxuIikgJSAoc2VsZi5zcGFuX3RhZygnc21hbGwnKSwgZGVzYykKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9tYXJrdXAobWFyaykKKworICAgIGRlZiBpbWFnZV9jb21ib19jaGFuZ2VkX2lkbGVfY2Ioc2VsZiwgc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMsIHNlbGVjdGVkX3BhY2thZ2VzKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnVwZGF0ZV9yZWNpcGVfbW9kZWwoc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMpCisgICAgICAgIHNlbGYuYnVpbGRlci51cGRhdGVfcGFja2FnZV9tb2RlbChzZWxlY3RlZF9wYWNrYWdlcykKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoVHJ1ZSkKKworICAgIGRlZiBpbWFnZV9jb21ib19jaGFuZ2VkX2NiKHNlbGYsIGNvbWJvKToKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5pbWFnZV9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICB0b3BkaXIgPSBzZWxmLmJ1aWxkZXIuZ2V0X3RvcGRpcigpCisgICAgICAgICAgICBpbWFnZXNfZGlyID0gdG9wZGlyICsgIi9yZWNpcGVzL2ltYWdlcy9jdXN0b20vIgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmVuc3VyZV9kaXIoaW1hZ2VzX2RpcikKKworICAgICAgICAgICAgZGlhbG9nID0gUmV0cmlldmVJbWFnZURpYWxvZyhpbWFnZXNfZGlyLCAiU2VsZWN0IGZyb20gbXkgaW1hZ2UgcmVjaXBlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZGVyLCBndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgICAgICBpbWFnZV9uYW1lID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisgICAgICAgICAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoaW1hZ2VfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IG9zLnBhdGguc3BsaXRleHQodGFpbClbMF0KKyAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9IHNlbGVjdGVkX2ltYWdlCisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbCwgc2VsZWN0ZWRfaW1hZ2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5fX2R1bW15X2ltYWdlX18KKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBOb25lKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbCwgc2VsZWN0ZWRfaW1hZ2UpCisKKyAgICAgICAgaWYgbm90IHNlbGVjdGVkX2ltYWdlIG9yIChzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLl9fZHVtbXlfaW1hZ2VfXyk6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLmhpZGUoKQorICAgICAgICAgICAgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbi5oaWRlKCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgcmVtb3ZlIF9fZHVtbXlfaW1hZ2VfXyBpdGVtIGZyb20gdGhlIHN0b3JlIGxpc3QgYWZ0ZXIgZmlyc3QgdXNlciBzZWxlY3Rpb24KKyAgICAgICAgIyBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciB2YWxpZAorICAgICAgICBjb21ib19zdG9yZSA9IGNvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGlmIGxlbihjb21ib19zdG9yZSkgYW5kIChjb21ib19zdG9yZVswXVswXSA9PSBzZWxmLl9fZHVtbXlfaW1hZ2VfXyk6CisgICAgICAgICAgICBjb21iby5yZW1vdmVfdGV4dCgwKQorCisgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gRmFsc2UKKworICAgICAgICBzZWxlY3RlZF9yZWNpcGVzID0gW10KKworICAgICAgICBpbWFnZV9wYXRoID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5wbl9wYXRoW3NlbGVjdGVkX2ltYWdlXQorICAgICAgICBpbWFnZV9pdGVyID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfaXRlcihpbWFnZV9wYXRoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGltYWdlX2l0ZXIsIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuQ09MX0lOU1RBTEwpLnNwbGl0KCkKKyAgICAgICAgc2VsZi51cGRhdGVfaW1hZ2VfZGVzYygpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5yZXNldCgpCisgICAgICAgIHNlbGYuYnVpbGRlci5wYWNrYWdlX21vZGVsLnJlc2V0KCkKKworICAgICAgICBzZWxmLnNob3dfYmFzZWltZ19zZWxlY3RlZCgpCisKKyAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLmhpZGUoKQorCisgICAgICAgIGdsaWIuaWRsZV9hZGQoc2VsZi5pbWFnZV9jb21ib19jaGFuZ2VkX2lkbGVfY2IsIHNlbGVjdGVkX2ltYWdlLCBzZWxlY3RlZF9yZWNpcGVzLCBzZWxlY3RlZF9wYWNrYWdlcykKKworICAgIGRlZiBfaW1hZ2VfY29tYm9fY29ubmVjdF9zaWduYWwoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmltYWdlX2NvbWJvX2lkOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IHNlbGYuaW1hZ2VfY29tYm8uY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuaW1hZ2VfY29tYm9fY2hhbmdlZF9jYikKKworICAgIGRlZiBfaW1hZ2VfY29tYm9fZGlzY29ubmVjdF9zaWduYWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW1hZ2VfY29tYm9faWQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmRpc2Nvbm5lY3Qoc2VsZi5pbWFnZV9jb21ib19pZCkKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm9faWQgPSBOb25lCisKKyAgICBkZWYgdXBkYXRlX2ltYWdlX2NvbWJvKHNlbGYsIHJlY2lwZV9tb2RlbCwgc2VsZWN0ZWRfaW1hZ2UpOgorICAgICAgICAjIFVwZGF0ZSB0aGUgaW1hZ2UgY29tYm8gYWNjb3JkaW5nIHRvIHRoZSBpbWFnZXMgaW4gdGhlIHJlY2lwZV9tb2RlbAorICAgICAgICAjIHBvcHVsYXRlIGltYWdlIGNvbWJvCisgICAgICAgIGZpbHRlciA9IHtSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ2ltYWdlJ119CisgICAgICAgIGltYWdlX21vZGVsID0gcmVjaXBlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyKQorICAgICAgICBpbWFnZV9tb2RlbC5zZXRfc29ydF9jb2x1bW5faWQocmVjaXBlX21vZGVsLkNPTF9OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgIGFjdGl2ZSA9IDAKKyAgICAgICAgY250ID0gMAorCisgICAgICAgIHdoaXRlX3BhdHRlcm4gPSBbXQorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV93aGl0ZV9wYXR0ZXJuOgorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2Vfd2hpdGVfcGF0dGVybi5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHdoaXRlX3BhdHRlcm4uYXBwZW5kKHJlLmNvbXBpbGUoaSkpCisKKyAgICAgICAgYmxhY2tfcGF0dGVybiA9IFtdCisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2JsYWNrX3BhdHRlcm46CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV9ibGFja19wYXR0ZXJuLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgYmxhY2tfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZShpKSkKKyAgICAgICAgYmxhY2tfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZSgiaG9iLWltYWdlIikpCisgICAgICAgIGJsYWNrX3BhdHRlcm4uYXBwZW5kKHJlLmNvbXBpbGUoImVkaXRlZCgtWzAtOV0qKSouYmIkIikpCisKKyAgICAgICAgaXQgPSBpbWFnZV9tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHNlbGYuX2ltYWdlX2NvbWJvX2Rpc2Nvbm5lY3Rfc2lnbmFsKCkKKyAgICAgICAgbW9kZWwgPSBzZWxmLmltYWdlX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIG1vZGVsLmNsZWFyKCkKKyAgICAgICAgIyBTZXQgYSBpbmRpY2F0b3IgdGV4dCB0byBjb21ibyBzdG9yZSB3aGVuIGZpcnN0IG9wZW4KKyAgICAgICAgaWYgbm90IHNlbGVjdGVkX2ltYWdlOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChzZWxmLl9fZHVtbXlfaW1hZ2VfXykKKyAgICAgICAgICAgIGNudCA9IGNudCArIDEKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuX19jdXN0b21faW1hZ2VfXykKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dCgiLS1TZXBhcmF0b3ItLSIpCisgICAgICAgIGNudCA9IGNudCArIDIKKworICAgICAgICB0b3BkaXIgPSBzZWxmLmJ1aWxkZXIuZ2V0X3RvcGRpcigpCisgICAgICAgICMgYXBwZW5kIGFuZCBzZXQgYWN0aXZlCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgcGF0aCA9IGltYWdlX21vZGVsLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgaXQgPSBpbWFnZV9tb2RlbC5pdGVyX25leHQoaXQpCisgICAgICAgICAgICBpbWFnZV9uYW1lID0gaW1hZ2VfbW9kZWxbcGF0aF1bcmVjaXBlX21vZGVsLkNPTF9OQU1FXQorICAgICAgICAgICAgaWYgaW1hZ2VfbmFtZSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgYmxhY2tfcGF0dGVybjoKKyAgICAgICAgICAgICAgICBhbGxvdyA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBibGFja19wYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXR0ZXJuLnNlYXJjaChpbWFnZV9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIHdoaXRlX3BhdHRlcm46CisgICAgICAgICAgICAgICAgYWxsb3cgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIHdoaXRlX3BhdHRlcm46CisgICAgICAgICAgICAgICAgICAgIGlmIHBhdHRlcm4uc2VhcmNoKGltYWdlX25hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhbGxvdyA9IFRydWUKKworICAgICAgICAgICAgZmlsZV9uYW1lID0gaW1hZ2VfbW9kZWxbcGF0aF1bcmVjaXBlX21vZGVsLkNPTF9GSUxFXQorICAgICAgICAgICAgaWYgZmlsZV9uYW1lIGFuZCB0b3BkaXIgaW4gZmlsZV9uYW1lOgorICAgICAgICAgICAgICAgIGFsbG93ID0gRmFsc2UKKworICAgICAgICAgICAgaWYgYWxsb3c6CisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChpbWFnZV9uYW1lKQorICAgICAgICAgICAgICAgIGlmIGltYWdlX25hbWUgPT0gc2VsZWN0ZWRfaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGNudAorICAgICAgICAgICAgICAgIGNudCA9IGNudCArIDEKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX18pCisKKyAgICAgICAgaWYgc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgYWN0aXZlID0gY250CisKKyAgICAgICAgaWYgc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KCItLVNlcGFyYXRvci0tIikKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYXBwZW5kX3RleHQoc2VsZi5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQpCisgICAgICAgICAgICBjbnQgPSBjbnQgKyAyCisgICAgICAgICAgICBpZiBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9PSBzZWxlY3RlZF9pbWFnZToKKyAgICAgICAgICAgICAgICBhY3RpdmUgPSBjbnQKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnNldF9hY3RpdmUoYWN0aXZlKQorCisgICAgICAgIGlmIGFjdGl2ZSAhPSAwOgorICAgICAgICAgICAgc2VsZi5zaG93X2Jhc2VpbWdfc2VsZWN0ZWQoKQorCisgICAgICAgIHNlbGYuX2ltYWdlX2NvbWJvX2Nvbm5lY3Rfc2lnbmFsKCkKKworICAgIGRlZiBsYXllcl9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhIGxheWVyIHNlbGVjdGlvbiBkaWFsb2cKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfbGF5ZXJfc2VsZWN0aW9uX2RpYWxvZygpCisKKyAgICBkZWYgdmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhbiBhZHZhbmNlZCBzZXR0aW5ncyBkaWFsb2cKKyAgICAgICAgcmVzcG9uc2UsIHNldHRpbmdzX2NoYW5nZWQgPSBzZWxmLmJ1aWxkZXIuc2hvd19hZHZfc2V0dGluZ3NfZGlhbG9nKCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93LnNldF9jdXJzb3IoZ3RrLmdkay5DdXJzb3IoZ3RrLmdkay5XQVRDSCkpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2FpdCgwLjEpICN3YWl0IGZvciBhZHZfc2V0dGluZ3NfZGlhbG9nIHRvIHRlcm1pbmF0ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJlcGFyc2VfcG9zdF9hZHZfc2V0dGluZ3MoKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvdy5zZXRfY3Vyc29yKE5vbmUpCisKKyAgICBkZWYganVzdF9iYWtlX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKyAgICAgICAgc2VsZi5idWlsZGVyLmp1c3RfYmFrZSgpCisKKyAgICBkZWYgZWRpdF9pbWFnZV9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2V0X2Jhc2VfaW1hZ2UoKQorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19yZWNpcGVzKCkKKworICAgIGRlZiBteV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfbG9hZF9teV9pbWFnZXNfZGlhbG9nKCkKKworICAgIGRlZiBzZXR0aW5nc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhbiBhZHZhbmNlZCBzZXR0aW5ncyBkaWFsb2cKKyAgICAgICAgcmVzcG9uc2UsIHNldHRpbmdzX2NoYW5nZWQgPSBzZWxmLmJ1aWxkZXIuc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWRldGFpbHNwYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2VkZXRhaWxzcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNTJlOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2VkZXRhaWxzcGFnZS5weQpAQCAtMCwwICsxLDY2OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaGljLCBIb2JWaWV3VGFibGUsIEhvYkFsdEJ1dHRvbiwgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQoraW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnNhdmVpbWFnZWRpYWxvZyBpbXBvcnQgU2F2ZUltYWdlRGlhbG9nCisKKyMKKyMgSW1hZ2VEZXRhaWxzUGFnZQorIworY2xhc3MgSW1hZ2VEZXRhaWxzUGFnZSAoSG9iUGFnZSk6CisKKyAgICBjbGFzcyBEZXRhaWxCb3ggKGd0ay5FdmVudEJveCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aWRnZXQgPSBOb25lLCB2YXJsaXN0ID0gTm9uZSwgdmFsbGlzdCA9IE5vbmUsIGljb24gPSBOb25lLCBidXR0b24gPSBOb25lLCBidXR0b24yPU5vbmUsIGNvbG9yID0gSG9iQ29sb3JzLkxJR0hUX0dSQVkpOgorICAgICAgICAgICAgZ3RrLkV2ZW50Qm94Ll9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgICAgICMgc2V0IGNvbG9yCisgICAgICAgICAgICBzdHlsZSA9IHNlbGYuZ2V0X3N0eWxlKCkuY29weSgpCisgICAgICAgICAgICBzdHlsZS5iZ1tndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoY29sb3IsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuc2V0X3N0eWxlKHN0eWxlKQorCisgICAgICAgICAgICBzZWxmLnJvdyA9IGd0ay5UYWJsZSgxLCAyLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYucm93LnNldF9ib3JkZXJfd2lkdGgoMTApCisgICAgICAgICAgICBzZWxmLmFkZChzZWxmLnJvdykKKyAgICAgICAgCisgICAgICAgICAgICB0b3RhbF9yb3dzID0gMAorICAgICAgICAgICAgaWYgd2lkZ2V0OgorICAgICAgICAgICAgICAgIHRvdGFsX3Jvd3MgPSAxMAorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICAjIHBhY2sgdGhlIGljb24gYW5kIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgdG90YWxfcm93cyArPSBsZW4odmFybGlzdCkKKyAgICAgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUodG90YWxfcm93cywgMjAsIFRydWUpCisgICAgICAgICAgICBzZWxmLnRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNikKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3NpemVfcmVxdWVzdCgxMDAsIC0xKQorICAgICAgICAgICAgc2VsZi5yb3cuYXR0YWNoKHNlbGYudGFibGUsIDAsIDEsIDAsIDEsIHhvcHRpb25zPWd0ay5GSUxMfGd0ay5FWFBBTkQsIHlvcHRpb25zPWd0ay5GSUxMKQorICAgICAgICAgICAgCisgICAgICAgICAgICBjb2xpZCA9IDAKKyAgICAgICAgICAgIHJvd2lkID0gMAorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHMgPSB7fQorICAgICAgICAgICAgaWYgaWNvbjoKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChpY29uLCBjb2xpZCwgY29saWQgKyAyLCAwLCAxKQorICAgICAgICAgICAgICAgIGNvbGlkID0gY29saWQgKyAyCisgICAgICAgICAgICBpZiB3aWRnZXQ6CisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2god2lkZ2V0LCBjb2xpZCwgMjAsIDAsIDEwKQorICAgICAgICAgICAgICAgIHJvd2lkID0gMTAKKyAgICAgICAgICAgIGlmIHZhcmxpc3QgYW5kIHZhbGxpc3Q6CisgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByYW5nZShyb3dpZCwgdG90YWxfcm93cyk6CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcm93IC0gcm93aWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHNbdmFybGlzdFtpbmRleF1dID0gc2VsZi50ZXh0MmxhYmVsKHZhcmxpc3RbaW5kZXhdLCB2YWxsaXN0W2luZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5saW5lX3dpZGdldHNbdmFybGlzdFtpbmRleF1dLCBjb2xpZCwgMjAsIHJvdywgcm93ICsgMSkKKyAgICAgICAgICAgICMgcGFjayB0aGUgYnV0dG9uIG9uIHRoZSByaWdodAorICAgICAgICAgICAgaWYgYnV0dG9uOgorICAgICAgICAgICAgICAgIHNlbGYuYmJveCA9IGd0ay5WQm94KCkKKyAgICAgICAgICAgICAgICBzZWxmLmJib3gucGFja19zdGFydChidXR0b24sIGV4cGFuZD1UcnVlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgICAgIGlmIGJ1dHRvbjI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJveC5wYWNrX3N0YXJ0KGJ1dHRvbjIsIGV4cGFuZD1UcnVlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuYmJveC5zZXRfc2l6ZV9yZXF1ZXN0KDE1MCwtMSkKKyAgICAgICAgICAgICAgICBzZWxmLnJvdy5hdHRhY2goc2VsZi5iYm94LCAxLCAyLCAwLCAxLCB4b3B0aW9ucz1ndGsuRklMTCwgeW9wdGlvbnM9Z3RrLkVYUEFORCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgZGVmIHVwZGF0ZV9saW5lX3dpZGdldHMoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmxpbmVfd2lkZ2V0cykgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYubGluZV93aWRnZXRzW3ZhcmlhYmxlXSwgZ3RrLkxhYmVsKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYubGluZV93aWRnZXRzW3ZhcmlhYmxlXS5zZXRfbWFya3VwKHNlbGYuZm9ybWF0X2xpbmUodmFyaWFibGUsIHZhbHVlKSkKKworICAgICAgICBkZWYgd3JhcF9saW5lKHNlbGYsIGlucHV0cyk6CisgICAgICAgICAgICAjIHdyYXAgdGhlIGxvbmcgdGV4dCBvZiBpbnB1dHMKKyAgICAgICAgICAgIHdyYXBfd2lkdGhfY2hhcnMgPSA3NQorICAgICAgICAgICAgb3V0cHV0cyA9ICIiCisgICAgICAgICAgICB0bXBzID0gaW5wdXRzCisgICAgICAgICAgICBsZXNzX2NoYXJzID0gbGVuKGlucHV0cykKKyAgICAgICAgICAgIHdoaWxlIChsZXNzX2NoYXJzIC0gd3JhcF93aWR0aF9jaGFycykgPiAwOgorICAgICAgICAgICAgICAgIGxlc3NfY2hhcnMgLT0gd3JhcF93aWR0aF9jaGFycworICAgICAgICAgICAgICAgIG91dHB1dHMgKz0gdG1wc1s6d3JhcF93aWR0aF9jaGFyc10gKyAiXG4gICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgdG1wcyA9IGlucHV0c1tsZXNzX2NoYXJzOl0KKyAgICAgICAgICAgIG91dHB1dHMgKz0gdG1wcworICAgICAgICAgICAgcmV0dXJuIG91dHB1dHMKKworICAgICAgICBkZWYgZm9ybWF0X2xpbmUoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgIHdyYXBlZF92YWx1ZSA9IHNlbGYud3JhcF9saW5lKHZhbHVlKQorICAgICAgICAgICAgbWFya3VwID0gIjxzcGFuIHdlaWdodD1cJ2JvbGRcJz4lczwvc3Bhbj4iICUgdmFyaWFibGUKKyAgICAgICAgICAgIG1hcmt1cCArPSAiPHNwYW4gd2VpZ2h0PVwnbm9ybWFsXCcgZm9yZWdyb3VuZD1cJyMxYzFjMWNcJyBmb250X2Rlc2M9XCcxNHB4XCc+JXM8L3NwYW4+IiAlIHdyYXBlZF92YWx1ZQorICAgICAgICAgICAgcmV0dXJuIG1hcmt1cAorCisgICAgICAgIGRlZiB0ZXh0MmxhYmVsKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZSk6CisgICAgICAgICAgICAjIGFwcGVuZCB0aGUgbmFtZTp2YWx1ZSB0byB0aGUgbGVmdCBib3gKKyAgICAgICAgICAgICMgc3VjaCBhcyAiTmFtZTogaG9iLWNvcmUtbWluaW1hbC12YXJpYW50LTIwMTEtMTItMTUtYmVhZ2xlYm9hcmQiCisgICAgICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cChzZWxmLmZvcm1hdF9saW5lKHZhcmlhYmxlLCB2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGNsYXNzIEJ1aWxkRGV0YWlsQm94IChndGsuRXZlbnRCb3gpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybGlzdCA9IE5vbmUsIHZhbGxpc3QgPSBOb25lLCBpY29uID0gTm9uZSwgY29sb3IgPSBIb2JDb2xvcnMuTElHSFRfR1JBWSk6CisgICAgICAgICAgICBndGsuRXZlbnRCb3guX19pbml0X18oc2VsZikKKworICAgICAgICAgICAgIyBzZXQgY29sb3IKKyAgICAgICAgICAgIHN0eWxlID0gc2VsZi5nZXRfc3R5bGUoKS5jb3B5KCkKKyAgICAgICAgICAgIHN0eWxlLmJnW2d0ay5TVEFURV9OT1JNQUxdID0gc2VsZi5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihjb2xvciwgRmFsc2UsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5zZXRfc3R5bGUoc3R5bGUpCisKKyAgICAgICAgICAgIHNlbGYuaGJveCA9IGd0ay5IQm94KCkKKyAgICAgICAgICAgIHNlbGYuaGJveC5zZXRfYm9yZGVyX3dpZHRoKDEwKQorICAgICAgICAgICAgc2VsZi5hZGQoc2VsZi5oYm94KQorCisgICAgICAgICAgICB0b3RhbF9yb3dzID0gMAorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICAjIHBhY2sgdGhlIGljb24gYW5kIHRoZSB0ZXh0IG9uIHRoZSBsZWZ0CisgICAgICAgICAgICAgICAgdG90YWxfcm93cyArPSBsZW4odmFybGlzdCkKKyAgICAgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUodG90YWxfcm93cywgMjAsIFRydWUpCisgICAgICAgICAgICBzZWxmLnRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNikKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3NpemVfcmVxdWVzdCgxMDAsIC0xKQorICAgICAgICAgICAgc2VsZi5oYm94LnBhY2tfc3RhcnQoc2VsZi50YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz0xNSkKKworICAgICAgICAgICAgY29saWQgPSAwCisgICAgICAgICAgICByb3dpZCA9IDAKKyAgICAgICAgICAgIHNlbGYubGluZV93aWRnZXRzID0ge30KKyAgICAgICAgICAgIGlmIGljb246CisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goaWNvbiwgY29saWQsIGNvbGlkICsgMiwgMCwgMSkKKyAgICAgICAgICAgICAgICBjb2xpZCA9IGNvbGlkICsgMgorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJhbmdlKHJvd2lkLCB0b3RhbF9yb3dzKToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByb3cgLSByb3dpZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0gPSBzZWxmLnRleHQybGFiZWwodmFybGlzdFtpbmRleF0sIHZhbGxpc3RbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0sIGNvbGlkLCAyMCwgcm93LCByb3cgKyAxKQorICAgICAgICAgICAgICAgIAorICAgICAgICBkZWYgdXBkYXRlX2xpbmVfd2lkZ2V0cyhzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYubGluZV93aWRnZXRzKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLCBndGsuTGFiZWwpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLnNldF9tYXJrdXAoc2VsZi5mb3JtYXRfbGluZSh2YXJpYWJsZSwgdmFsdWUpKQorCisgICAgICAgIGRlZiB3cmFwX2xpbmUoc2VsZiwgaW5wdXRzKToKKyAgICAgICAgICAgICMgd3JhcCB0aGUgbG9uZyB0ZXh0IG9mIGlucHV0cworICAgICAgICAgICAgd3JhcF93aWR0aF9jaGFycyA9IDc1CisgICAgICAgICAgICBvdXRwdXRzID0gIiIKKyAgICAgICAgICAgIHRtcHMgPSBpbnB1dHMKKyAgICAgICAgICAgIGxlc3NfY2hhcnMgPSBsZW4oaW5wdXRzKQorICAgICAgICAgICAgd2hpbGUgKGxlc3NfY2hhcnMgLSB3cmFwX3dpZHRoX2NoYXJzKSA+IDA6CisgICAgICAgICAgICAgICAgbGVzc19jaGFycyAtPSB3cmFwX3dpZHRoX2NoYXJzCisgICAgICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzWzp3cmFwX3dpZHRoX2NoYXJzXSArICJcbiAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICB0bXBzID0gaW5wdXRzW2xlc3NfY2hhcnM6XQorICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0cworCisgICAgICAgIGRlZiBmb3JtYXRfbGluZShzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgd3JhcGVkX3ZhbHVlID0gc2VsZi53cmFwX2xpbmUodmFsdWUpCisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gd2VpZ2h0PVwnYm9sZFwnPiVzPC9zcGFuPiIgJSB2YXJpYWJsZQorICAgICAgICAgICAgbWFya3VwICs9ICI8c3BhbiB3ZWlnaHQ9XCdub3JtYWxcJyBmb3JlZ3JvdW5kPVwnIzFjMWMxY1wnIGZvbnRfZGVzYz1cJzE0cHhcJz4lczwvc3Bhbj4iICUgd3JhcGVkX3ZhbHVlCisgICAgICAgICAgICByZXR1cm4gbWFya3VwCisKKyAgICAgICAgZGVmIHRleHQybGFiZWwoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgICMgYXBwZW5kIHRoZSBuYW1lOnZhbHVlIHRvIHRoZSBsZWZ0IGJveAorICAgICAgICAgICAgIyBzdWNoIGFzICJOYW1lOiBob2ItY29yZS1taW5pbWFsLXZhcmlhbnQtMjAxMS0xMi0xNS1iZWFnbGVib2FyZCIKKyAgICAgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKHNlbGYuZm9ybWF0X2xpbmUodmFyaWFibGUsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBsYWJlbAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBzdXBlcihJbWFnZURldGFpbHNQYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiSW1hZ2UgZGV0YWlscyIpCisKKyAgICAgICAgc2VsZi5pbWFnZV9zdG9yZSA9IFtdCisgICAgICAgIHNlbGYuYnV0dG9uX2lkcyA9IHt9CisgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucyA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmltYWdlX3NhdmVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlID0gIiIKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbl9maWVsZF90ZW1wbGF0ZSA9ICIiCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzCisgICAgICAgICMgY3JlYXRlIHRoZSB0b29sYmFyCisgICAgICAgIHNlbGYudG9vbGJhciA9IGd0ay5Ub29sYmFyKCkKKyAgICAgICAgc2VsZi50b29sYmFyLnNldF9vcmllbnRhdGlvbihndGsuT1JJRU5UQVRJT05fSE9SSVpPTlRBTCkKKyAgICAgICAgc2VsZi50b29sYmFyLnNldF9zdHlsZShndGsuVE9PTEJBUl9CT1RIKQorCisgICAgICAgIG15X2ltYWdlc19idXR0b24gPSBzZWxmLmFwcGVuZF90b29sYmFyX2J1dHRvbihzZWxmLnRvb2xiYXIsCisgICAgICAgICAgICAiSW1hZ2VzIiwKKyAgICAgICAgICAgIGhpYy5JQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUsCisgICAgICAgICAgICBoaWMuSUNPTl9JTUFHRVNfSE9WRVJfRklMRSwKKyAgICAgICAgICAgICJPcGVuIHByZXZpb3VzbHkgYnVpbHQgaW1hZ2VzIiwKKyAgICAgICAgICAgIHNlbGYubXlfaW1hZ2VzX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZXR0aW5nc19idXR0b24gPSBzZWxmLmFwcGVuZF90b29sYmFyX2J1dHRvbihzZWxmLnRvb2xiYXIsCisgICAgICAgICAgICAiU2V0dGluZ3MiLAorICAgICAgICAgICAgaGljLklDT05fU0VUVElOR1NfRElTUExBWV9GSUxFLAorICAgICAgICAgICAgaGljLklDT05fU0VUVElOR1NfSE9WRVJfRklMRSwKKyAgICAgICAgICAgICJWaWV3IGFkZGl0aW9uYWwgYnVpbGQgc2V0dGluZ3MiLAorICAgICAgICAgICAgc2VsZi5zZXR0aW5nc19idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICBzZWxmLmRldGFpbHNfdG9wX2J1dHRvbnMgPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoc2VsZi50b29sYmFyKQorCisgICAgZGVmIF9yZW1vdmVfYWxsX3dpZGdldChzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuYm94X2dyb3VwX2FyZWEuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5yZW1vdmUoY2hpbGQpCisKKyAgICBkZWYgc2hvd19wYWdlKHNlbGYsIHN0ZXApOgorICAgICAgICBzZWxmLmJ1aWxkX3N1Y2NlZWRlZCA9IChzdGVwID09IHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFURUQpCisgICAgICAgIGltYWdlX2FkZHIgPSBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV9hZGRyCisgICAgICAgIGltYWdlX25hbWVzID0gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2VfbmFtZXMKKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICBtYWNoaW5lID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoCisgICAgICAgICAgICBiYXNlX2ltYWdlID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICAgICAgbGF5ZXJzID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24ubGF5ZXJzCisgICAgICAgICAgICBwa2dfbnVtID0gIiVzIiAlIGxlbihzZWxmLmJ1aWxkZXIucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKSkKKyAgICAgICAgICAgIGxvZ19maWxlID0gc2VsZi5idWlsZGVyLmN1cnJlbnRfbG9nZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnX251bSA9ICJOL0EiCisgICAgICAgICAgICBsb2dfZmlsZSA9IE5vbmUKKworICAgICAgICAjIHJlbW92ZQorICAgICAgICBmb3IgYnV0dG9uX2lkLCBidXR0b24gaW4gc2VsZi5idXR0b25faWRzLml0ZW1zKCk6CisgICAgICAgICAgICBidXR0b24uZGlzY29ubmVjdChidXR0b25faWQpCisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKworICAgICAgICAjIHJlcGFjaworICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5kZXRhaWxzX3RvcF9idXR0b25zLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYnVpbGRfcmVzdWx0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLmltYWdlX3NhdmVkIG9yIChzZWxmLmJ1aWxkX3N1Y2NlZWRlZCBhbmQgc2VsZi5idWlsZGVyLmN1cnJlbnRfc3RlcCA9PSBzZWxmLmJ1aWxkZXIuSU1BR0VfR0VORVJBVElORyk6CisgICAgICAgICAgICAjIGJ1aWxkaW5nIGlzIHRoZSBwcmV2aW91cyBzdGVwCisgICAgICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgICAgIHBpeG1hcF9wYXRoID0gaGljLklDT05fSU5ESV9DT05GSVJNX0ZJTEUKKyAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLlJVTk5JTkcKKyAgICAgICAgICAgIHBpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKHBpeG1hcF9wYXRoKQorICAgICAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYocGl4X2J1ZmZlcikKKyAgICAgICAgICAgIHZhcmxpc3QgPSBbIiJdCisgICAgICAgICAgICBpZiBzZWxmLmltYWdlX3NhdmVkOgorICAgICAgICAgICAgICAgIHZhbGxpc3QgPSBbIllvdXIgaW1hZ2UgcmVjaXBlIGhhcyBiZWVuIHNhdmVkIl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsbGlzdCA9IFsiWW91ciBpbWFnZSBpcyByZWFkeSJdCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3Jlc3VsdCA9IHNlbGYuQnVpbGREZXRhaWxCb3godmFybGlzdD12YXJsaXN0LCB2YWxsaXN0PXZhbGxpc3QsIGljb249aWNvbiwgY29sb3I9Y29sb3IpCisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9yZXN1bHQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLmJ1dHRvbmxpc3QgPSBbIkJ1aWxkIG5ldyBpbWFnZSIsICJTYXZlIGltYWdlIHJlY2lwZSIsICJSdW4gaW1hZ2UiLCAiRGVwbG95IGltYWdlIl0KKworICAgICAgICAjIE5hbWUKKyAgICAgICAgc2VsZi5pbWFnZV9zdG9yZSA9IFtdCisgICAgICAgIHNlbGYudG9nZ2xlZF9pbWFnZSA9ICIiCisgICAgICAgIGRlZmF1bHRfaW1hZ2Vfc2l6ZSA9IDAKKyAgICAgICAgc2VsZi5udW1fdG9nZ2xlZCA9IDAKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGltYWdlX25hbWUgaW4gaW1hZ2VfbmFtZXM6CisgICAgICAgICAgICBpbWFnZV9zaXplID0gSG9iUGFnZS5fc2l6ZV90b19zdHJpbmcob3Muc3RhdChvcy5wYXRoLmpvaW4oaW1hZ2VfYWRkciwgaW1hZ2VfbmFtZSkpLnN0X3NpemUpCisKKyAgICAgICAgICAgIGltYWdlX2F0dHIgPSAoInJ1biIgaWYgKHNlbGYudGVzdF90eXBlX3J1bm5hYmxlKGltYWdlX25hbWUpIGFuZCBzZWxmLnRlc3RfbWFjaF9ydW5uYWJsZShpbWFnZV9uYW1lKSkgZWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGVwbG95IiBpZiBzZWxmLnRlc3RfZGVwbG95YWJsZShpbWFnZV9uYW1lKSBlbHNlICIiKSkKKyAgICAgICAgICAgIGlzX3RvZ2dsZWQgPSAoaW1hZ2VfYXR0ciAhPSAiIikKKworICAgICAgICAgICAgaWYgbm90IHNlbGYudG9nZ2xlZF9pbWFnZToKKyAgICAgICAgICAgICAgICBpZiBpID09IChsZW4oaW1hZ2VfbmFtZXMpIC0gMSk6CisgICAgICAgICAgICAgICAgICAgIGlzX3RvZ2dsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgaXNfdG9nZ2xlZDoKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9pbWFnZV9zaXplID0gaW1hZ2Vfc2l6ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZWRfaW1hZ2UgPSBpbWFnZV9uYW1lCisKKyAgICAgICAgICAgIHNwbGl0X3N0dWZmID0gaW1hZ2VfbmFtZS5zcGxpdCgnLicpCisgICAgICAgICAgICBpZiAicm9vdGZzIiBpbiBzcGxpdF9zdHVmZjoKKyAgICAgICAgICAgICAgICBpbWFnZV90eXBlID0gaW1hZ2VfbmFtZVsobGVuKHNwbGl0X3N0dWZmWzBdKSArIGxlbigiLnJvb3RmcyIpICsgMSk6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbWFnZV90eXBlID0gaW1hZ2VfbmFtZVsobGVuKHNwbGl0X3N0dWZmWzBdKSArIDEpOl0KKworICAgICAgICAgICAgc2VsZi5pbWFnZV9zdG9yZS5hcHBlbmQoeyduYW1lJzogaW1hZ2VfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogaW1hZ2VfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJzogaW1hZ2Vfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc190b2dnbGVkJzogaXNfdG9nZ2xlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fYXR0cic6IGltYWdlX2F0dHIsfSkKKworICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICBzZWxmLm51bV90b2dnbGVkICs9IGlzX3RvZ2dsZWQKKworICAgICAgICBpc19ydW5uYWJsZSA9IHNlbGYuY3JlYXRlX2JvdHRvbV9idXR0b25zKHNlbGYuYnV0dG9ubGlzdCwgc2VsZi50b2dnbGVkX2ltYWdlKQorCisgICAgICAgICMgR2VuZXJhdGVkIGltYWdlIGZpbGVzIGluZm8KKyAgICAgICAgdmFybGlzdCA9IFsiTmFtZTogIiwgIkZpbGVzIGNyZWF0ZWQ6ICIsICJEaXJlY3Rvcnk6ICJdCisgICAgICAgIHZhbGxpc3QgPSBbXQorCisgICAgICAgIHZhbGxpc3QuYXBwZW5kKGltYWdlX25hbWUuc3BsaXQoJy4nKVswXSkKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoJywgICcuam9pbihmaWxlaXRlbVsndHlwZSddIGZvciBmaWxlaXRlbSBpbiBzZWxmLmltYWdlX3N0b3JlKSkKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoaW1hZ2VfYWRkcikKKworICAgICAgICB2aWV3X2ZpbGVzX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiVmlldyBmaWxlcyIpCisgICAgICAgIHZpZXdfZmlsZXNfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnZpZXdfZmlsZXNfY2xpY2tlZF9jYiwgaW1hZ2VfYWRkcikKKyAgICAgICAgdmlld19maWxlc19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGltYWdlIGZpbGVzIikKKyAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gTm9uZQorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiT3BlbiBsb2ciKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm9wZW5fbG9nX2NsaWNrZWRfY2IsIGxvZ19maWxlKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIGJ1aWxkJ3MgbG9nIGZpbGUiKQorICAgICAgICBzZWxmLmltYWdlX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249dmlld19maWxlc19idXR0b24sIGJ1dHRvbjI9b3Blbl9sb2dfYnV0dG9uKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5pbWFnZV9kZXRhaWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgVGhlIGRlZmF1bHQga2VybmVsIGJveCBmb3IgdGhlIHFlbXUgaW1hZ2VzCisgICAgICAgIHNlbGYuc2VsX2tlcm5lbCA9ICIiCisgICAgICAgIHNlbGYua2VybmVsX2RldGFpbCA9IE5vbmUKKyAgICAgICAgaWYgJ3FlbXUnIGluIGltYWdlX25hbWU6CisgICAgICAgICAgICBzZWxmLnNlbF9rZXJuZWwgPSBzZWxmLmdldF9rZXJuZWxfZmlsZV9uYW1lKCkKKworICAgICAgICAjICAgIHZhcmxpc3QgPSBbIktlcm5lbDogIl0KKyAgICAgICAgIyAgICB2YWxsaXN0ID0gW10KKyAgICAgICAgIyAgICB2YWxsaXN0LmFwcGVuZChzZWxmLnNlbF9rZXJuZWwpCisKKyAgICAgICAgIyAgICBjaGFuZ2Vfa2VybmVsX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiQ2hhbmdlIikKKyAgICAgICAgIyAgICBjaGFuZ2Vfa2VybmVsX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5jaGFuZ2Vfa2VybmVsX2NiKQorICAgICAgICAjICAgIGNoYW5nZV9rZXJuZWxfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkNoYW5nZSBxZW11IGtlcm5lbCBmaWxlIikKKyAgICAgICAgIyAgICBzZWxmLmtlcm5lbF9kZXRhaWwgPSBzZWxmLkRldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgYnV0dG9uPWNoYW5nZV9rZXJuZWxfYnV0dG9uKQorICAgICAgICAjICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmtlcm5lbF9kZXRhaWwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBNYWNoaW5lLCBJbWFnZSByZWNpcGUgYW5kIExheWVycworICAgICAgICBsYXllcl9udW1fbGltaXQgPSAxNQorICAgICAgICB2YXJsaXN0ID0gWyJNYWNoaW5lOiAiLCAiSW1hZ2UgcmVjaXBlOiAiLCAiTGF5ZXJzOiAiXQorICAgICAgICB2YWxsaXN0ID0gW10KKyAgICAgICAgc2VsZi5zZXR0aW5nX2RldGFpbCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZChtYWNoaW5lKQorICAgICAgICAgICAgaWYgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5pc19jdXN0b21faW1hZ2UoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlID09IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSA9Ik5ldyBpbWFnZSByZWNpcGUiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgKyAiIChlZGl0ZWQpIgorICAgICAgICAgICAgdmFsbGlzdC5hcHBlbmQoYmFzZV9pbWFnZSkKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIGkgPiBsYXllcl9udW1fbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdmFybGlzdC5hcHBlbmQoIiAtICIpCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZCgiIikKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIGkgPiBsYXllcl9udW1fbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBpID09IGxheWVyX251bV9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgdmFsbGlzdC5hcHBlbmQoImFuZCBtb3JlLi4uIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZChsYXllcikKKyAgICAgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAgICAgZWRpdF9jb25maWdfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJFZGl0IGNvbmZpZ3VyYXRpb24iKQorICAgICAgICAgICAgZWRpdF9jb25maWdfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgbWFjaGluZSBhbmQgaW1hZ2UgcmVjaXBlIikKKyAgICAgICAgICAgIGVkaXRfY29uZmlnX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0X2NvbmZpZ19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIHNlbGYuc2V0dGluZ19kZXRhaWwgPSBzZWxmLkRldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgYnV0dG9uPWVkaXRfY29uZmlnX2J1dHRvbikKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLnNldHRpbmdfZGV0YWlsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgUGFja2FnZXMgaW5jbHVkZWQsIGFuZCBUb3RhbCBpbWFnZSBzaXplCisgICAgICAgIHZhcmxpc3QgPSBbIlBhY2thZ2VzIGluY2x1ZGVkOiAiLCAiVG90YWwgaW1hZ2Ugc2l6ZTogIl0KKyAgICAgICAgdmFsbGlzdCA9IFtdCisgICAgICAgIHZhbGxpc3QuYXBwZW5kKHBrZ19udW0pCisgICAgICAgIHZhbGxpc3QuYXBwZW5kKGRlZmF1bHRfaW1hZ2Vfc2l6ZSkKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfc2l6ZSA9IGRlZmF1bHRfaW1hZ2Vfc2l6ZQorICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9wYWNrYWdlcyA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzCisgICAgICAgIGlmIHNlbGYuYnVpbGRfc3VjY2VlZGVkOgorICAgICAgICAgICAgZWRpdF9wYWNrYWdlc19idXR0b24gPSBIb2JBbHRCdXR0b24oIkVkaXQgcGFja2FnZXMiKQorICAgICAgICAgICAgZWRpdF9wYWNrYWdlc19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiRWRpdCB0aGUgcGFja2FnZXMgaW5jbHVkZWQgaW4geW91ciBpbWFnZSIpCisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lZGl0X3BhY2thZ2VzX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBlbHNlOiAjIGdldCB0byB0aGlzIHBhZ2UgZnJvbSAiTXkgaW1hZ2VzIgorICAgICAgICAgICAgZWRpdF9wYWNrYWdlc19idXR0b24gPSBOb25lCisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWwgPSBzZWxmLkRldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgYnV0dG9uPWVkaXRfcGFja2FnZXNfYnV0dG9uKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5wYWNrYWdlX2RldGFpbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIHBhY2sgdGhlIGJ1dHRvbnMgYXQgdGhlIGJvdHRvbSwgYXQgdGhpcyB0aW1lIHRoZXkgYXJlIGFscmVhZHkgY3JlYXRlZC4KKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBlbHNlOiAjIGZvciAiTXkgaW1hZ2VzIiBwYWdlCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfc2VwYXJhdG9yID0gZ3RrLkhTZXBhcmF0b3IoKQorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuZGV0YWlsc19zZXBhcmF0b3IsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnNob3dfYWxsKCkKKyAgICAgICAgaWYgc2VsZi5rZXJuZWxfZGV0YWlsIGFuZCAobm90IGlzX3J1bm5hYmxlKToKKyAgICAgICAgICAgIHNlbGYua2VybmVsX2RldGFpbC5oaWRlKCkKKyAgICAgICAgc2VsZi5pbWFnZV9zYXZlZCA9IEZhbHNlCisKKyAgICBkZWYgdmlld19maWxlc19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgaW1hZ2VfYWRkcik6CisgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgieGRnLW9wZW4gLyVzIiAlIGltYWdlX2FkZHIsIHNoZWxsPVRydWUpCisKKyAgICBkZWYgb3Blbl9sb2dfY2xpY2tlZF9jYihzZWxmLCBidXR0b24sIGxvZ19maWxlKToKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBsb2dfZmlsZSA9ICJmaWxlOi8vLyIgKyBsb2dfZmlsZQorICAgICAgICAgICAgZ3RrLnNob3dfdXJpKHNjcmVlbj1idXR0b24uZ2V0X3NjcmVlbigpLCB1cmk9bG9nX2ZpbGUsIHRpbWVzdGFtcD0wKQorCisgICAgZGVmIHJlZnJlc2hfcGFja2FnZV9kZXRhaWxfYm94KHNlbGYsIGltYWdlX3NpemUpOgorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsLnVwZGF0ZV9saW5lX3dpZGdldHMoIlRvdGFsIGltYWdlIHNpemU6ICIsIGltYWdlX3NpemUpCisKKyAgICBkZWYgdGVzdF90eXBlX3J1bm5hYmxlKHNlbGYsIGltYWdlX25hbWUpOgorICAgICAgICB0eXBlX3J1bm5hYmxlID0gRmFsc2UKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMucnVubmFibGVfaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICBpZiBpbWFnZV9uYW1lLmVuZHN3aXRoKHQpOgorICAgICAgICAgICAgICAgIHR5cGVfcnVubmFibGUgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIHR5cGVfcnVubmFibGUKKworICAgIGRlZiB0ZXN0X21hY2hfcnVubmFibGUoc2VsZiwgaW1hZ2VfbmFtZSk6CisgICAgICAgIG1hY2hfcnVubmFibGUgPSBGYWxzZQorICAgICAgICBmb3IgdCBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5ydW5uYWJsZV9tYWNoaW5lX3BhdHRlcm5zOgorICAgICAgICAgICAgaWYgdCBpbiBpbWFnZV9uYW1lOgorICAgICAgICAgICAgICAgIG1hY2hfcnVubmFibGUgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIG1hY2hfcnVubmFibGUKKworICAgIGRlZiB0ZXN0X2RlcGxveWFibGUoc2VsZiwgaW1hZ2VfbmFtZSk6CisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmN1cnJfbWFjaC5zdGFydHN3aXRoKCJxZW11Iik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZGVwbG95YWJsZSA9IEZhbHNlCisgICAgICAgIGZvciB0IGluIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmRlcGxveWFibGVfaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICBpZiBpbWFnZV9uYW1lLmVuZHN3aXRoKHQpOgorICAgICAgICAgICAgICAgIGRlcGxveWFibGUgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGRlcGxveWFibGUKKworICAgIGRlZiBnZXRfa2VybmVsX2ZpbGVfbmFtZShzZWxmLCBrZXJuZWxfYWRkcj0iIik6CisgICAgICAgIGtlcm5lbF9uYW1lID0gIiIKKworICAgICAgICBpZiBub3Qga2VybmVsX2FkZHI6CisgICAgICAgICAgICBrZXJuZWxfYWRkciA9IHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2FkZHIKKworICAgICAgICBmaWxlcyA9IFtmIGZvciBmIGluIG9zLmxpc3RkaXIoa2VybmVsX2FkZHIpIGlmIGZbMF0gPD4gJy4nXQorICAgICAgICBmb3IgY2hlY2tfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGNoZWNrX2ZpbGUuZW5kc3dpdGgoIi5iaW4iKToKKyAgICAgICAgICAgICAgICBuYW1lX3NwbGl0cyA9IGNoZWNrX2ZpbGUuc3BsaXQoIi4iKVswXQorICAgICAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmtlcm5lbF9pbWFnZV90eXBlIGluIG5hbWVfc3BsaXRzLnNwbGl0KCItIik6CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9uYW1lID0gY2hlY2tfZmlsZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBrZXJuZWxfbmFtZQorCisgICAgZGVmIHNob3dfYnVpbGRlZF9pbWFnZXNfZGlhbG9nKHNlbGYsIHdpZGdldCwgcHJpbWFyeV9hY3Rpb249IiIpOgorICAgICAgICB0aXRsZSA9IHByaW1hcnlfYWN0aW9uIGlmIHByaW1hcnlfYWN0aW9uIGVsc2UgIllvdXIgYnVpbGRlZCBpbWFnZXMiCisgICAgICAgIGRpYWxvZyA9IENydW1ic0RpYWxvZyh0aXRsZSwgc2VsZi5idWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCkKKyAgICAgICAgZGlhbG9nLnNldF9ib3JkZXJfd2lkdGgoMTIpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfdXNlX21hcmt1cChUcnVlKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYWJlbC5zZXRfcGFkZGluZygxMiwwKQorICAgICAgICBpZiBwcmltYXJ5X2FjdGlvbiA9PSAiUnVuIGltYWdlIjoKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIGZvbnRfZGVzYz0nMTInPlNlbGVjdCB0aGUgaW1hZ2UgZmlsZSB5b3Ugd2FudCB0byBydW46PC9zcGFuPiIpCisgICAgICAgIGVsaWYgcHJpbWFyeV9hY3Rpb24gPT0gIkRlcGxveSBpbWFnZSI6CisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBmb250X2Rlc2M9JzEyJz5TZWxlY3QgdGhlIGltYWdlIGZpbGUgeW91IHdhbnQgdG8gZGVwbG95Ojwvc3Bhbj4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gZm9udF9kZXNjPScxMic+U2VsZWN0IHRoZSBpbWFnZSBmaWxlIHlvdSB3YW50IHRvICVzPC9zcGFuPiIgJSBwcmltYXJ5X2FjdGlvbikKKyAgICAgICAgZGlhbG9nLnZib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgICMgZmlsdGVyIGNyZWF0ZWQgaW1hZ2VzIGFzIGFjdGlvbiBhdHRyaWJ1dGlvbiAoZGVwbG95IG9yIHJ1bikKKyAgICAgICAgYWN0aW9uX2F0dHIgPSAiIgorICAgICAgICBhY3Rpb25faW1hZ2VzID0gW10KKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIHNlbGYuaW1hZ2Vfc3RvcmU6CisgICAgICAgICAgICBhY3Rpb25fYXR0ciA9IGZpbGVpdGVtWydhY3Rpb25fYXR0ciddCisgICAgICAgICAgICBpZiAgKGFjdGlvbl9hdHRyID09ICdydW4nIGFuZCBwcmltYXJ5X2FjdGlvbiA9PSAiUnVuIGltYWdlIikgXAorICAgICAgICAgICAgIG9yIChhY3Rpb25fYXR0ciA9PSAnZGVwbG95JyBhbmQgcHJpbWFyeV9hY3Rpb24gPT0gIkRlcGxveSBpbWFnZSIpOgorICAgICAgICAgICAgICAgIGFjdGlvbl9pbWFnZXMuYXBwZW5kKGZpbGVpdGVtKQorCisgICAgICAgICMgcGFjayB0aGUgY29ycmVzcG9uZGluZyAncnVubmFibGUnIG9yICdkZXBsb3knIHJhZGlvX2J1dHRvbnMsIGlmIHRoZXJlIGhhcyBubyBtb3JlIHRoYW4gb25lIGZpbGUuCisgICAgICAgICMgYXNzdW1lIHRoYXQgdGhlcmUgZG9lcyBub3QgYm90aCBoYXZlICdkZXBsb3knIGFuZCAncnVubmFibGUnIGZpbGVzIGluIHRoZSBzYW1lIGJ1aWxkaW5nIHJlc3VsdAorICAgICAgICAjIGluIHBvc3NpYmxlIGFzIGRlc2lnbi4KKyAgICAgICAgY3Vycl9yb3cgPSAwCisgICAgICAgIHJvd3MgPSAobGVuKGFjdGlvbl9pbWFnZXMpKSBpZiBsZW4oYWN0aW9uX2ltYWdlcykgPCAxMCBlbHNlIDEwCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKHJvd3MsIDEwLCBUcnVlKQorICAgICAgICB0YWJsZS5zZXRfcm93X3NwYWNpbmdzKDYpCisgICAgICAgIHRhYmxlLnNldF9jb2xfc3BhY2luZygwLCAxMikKKyAgICAgICAgdGFibGUuc2V0X2NvbF9zcGFjaW5nKDUsIDEyKQorCisgICAgICAgIHNlbF9wYXJlbnRfYnRuID0gTm9uZQorICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gYWN0aW9uX2ltYWdlczoKKyAgICAgICAgICAgIHNlbF9idG4gPSBndGsuUmFkaW9CdXR0b24oc2VsX3BhcmVudF9idG4sIGZpbGVpdGVtWyd0eXBlJ10pCisgICAgICAgICAgICBzZWxfcGFyZW50X2J0biA9IHNlbF9idG4gaWYgbm90IHNlbF9wYXJlbnRfYnRuIGVsc2Ugc2VsX3BhcmVudF9idG4KKyAgICAgICAgICAgIHNlbF9idG4uc2V0X2FjdGl2ZShmaWxlaXRlbVsnaXNfdG9nZ2xlZCddKQorICAgICAgICAgICAgc2VsX2J0bi5jb25uZWN0KCd0b2dnbGVkJywgc2VsZi50YWJsZV9zZWxlY3RlZF9jYiwgZmlsZWl0ZW0pCisgICAgICAgICAgICBpZiBjdXJyX3JvdyA8IDEwOgorICAgICAgICAgICAgICAgIHRhYmxlLmF0dGFjaChzZWxfYnRuLCAwLCA0LCBjdXJyX3JvdywgY3Vycl9yb3cgKyAxLCB4cGFkZGluZz0yNCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbF9idG4sIDUsIDksIGN1cnJfcm93IC0gMTAsIGN1cnJfcm93IC0gOSwgeHBhZGRpbmc9MjQpCisgICAgICAgICAgICBjdXJyX3JvdyArPSAxCisKKyAgICAgICAgZGlhbG9nLnZib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorCisgICAgICAgIGlmIHByaW1hcnlfYWN0aW9uOgorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24ocHJpbWFyeV9hY3Rpb24sIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKworICAgICAgICBkaWFsb2cuc2hvd19hbGwoKQorCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgICAgICBpZiByZXNwb25zZSAhPSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIHNlbGYuaW1hZ2Vfc3RvcmU6CisgICAgICAgICAgICBpZiBmaWxlaXRlbVsnaXNfdG9nZ2xlZCddOgorICAgICAgICAgICAgICAgIGlmIGZpbGVpdGVtWydhY3Rpb25fYXR0ciddID09ICdydW4nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucnVucWVtdV9pbWFnZShmaWxlaXRlbVsnbmFtZSddLCBzZWxmLnNlbF9rZXJuZWwpCisgICAgICAgICAgICAgICAgZWxpZiBmaWxlaXRlbVsnYWN0aW9uX2F0dHInXSA9PSAnZGVwbG95JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZGVyLmRlcGxveV9pbWFnZShmaWxlaXRlbVsnbmFtZSddKQorCisgICAgZGVmIHRhYmxlX3NlbGVjdGVkX2NiKHNlbGYsIHRidXR0b24sIGltYWdlKToKKyAgICAgICAgaW1hZ2VbJ2lzX3RvZ2dsZWQnXSA9IHRidXR0b24uZ2V0X2FjdGl2ZSgpCisgICAgICAgIGlmIGltYWdlWydpc190b2dnbGVkJ106CisgICAgICAgICAgICBzZWxmLnRvZ2dsZWRfaW1hZ2UgPSBpbWFnZVsnbmFtZSddCisKKyAgICBkZWYgY2hhbmdlX2tlcm5lbF9jYihzZWxmLCB3aWRnZXQpOgorICAgICAgICBrZXJuZWxfcGF0aCA9IHNlbGYuYnVpbGRlci5zaG93X2xvYWRfa2VybmVsX2RpYWxvZygpCisgICAgICAgIGlmIGtlcm5lbF9wYXRoIGFuZCBzZWxmLmtlcm5lbF9kZXRhaWw6CisgICAgICAgICAgICBpbXBvcnQgb3MucGF0aAorICAgICAgICAgICAgc2VsZi5zZWxfa2VybmVsID0gb3MucGF0aC5iYXNlbmFtZShrZXJuZWxfcGF0aCkKKyAgICAgICAgICAgIG1hcmt1cCA9IHNlbGYua2VybmVsX2RldGFpbC5mb3JtYXRfbGluZSgiS2VybmVsOiAiLCBzZWxmLnNlbF9rZXJuZWwpCisgICAgICAgICAgICBsYWJlbCA9ICgoc2VsZi5rZXJuZWxfZGV0YWlsLmdldF9jaGlsZHJlbigpWzBdKS5nZXRfY2hpbGRyZW4oKVswXSkuZ2V0X2NoaWxkcmVuKClbMF0KKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorCisgICAgZGVmIGNyZWF0ZV9ib3R0b21fYnV0dG9ucyhzZWxmLCBidXR0b25saXN0LCBpbWFnZV9uYW1lKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIGJ1dHRvbnMgYXQgdGhlIGJvdHRvbQorICAgICAgICBjcmVhdGVkID0gRmFsc2UKKyAgICAgICAgcGFja2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5idXR0b25faWRzID0ge30KKyAgICAgICAgaXNfcnVubmFibGUgPSBGYWxzZQorCisgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiRGVwbG95IGltYWdlIgorICAgICAgICBuYW1lID0gIkRlcGxveSBpbWFnZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0IGFuZCBzZWxmLnRlc3RfZGVwbG95YWJsZShpbWFnZV9uYW1lKToKKyAgICAgICAgICAgIGRlcGxveV9idXR0b24gPSBIb2JCdXR0b24oJ0RlcGxveSBpbWFnZScpCisgICAgICAgICAgICAjZGVwbG95X2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICBkZXBsb3lfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1cm4gYSBsaXZlIGltYWdlIHRvIGEgVVNCIGRyaXZlIG9yIGZsYXNoIG1lbW9yeSIpCisgICAgICAgICAgICBkZXBsb3lfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgICAgICBidXR0b25faWQgPSBkZXBsb3lfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmRlcGxveV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIHNlbGYuYnV0dG9uX2lkc1tidXR0b25faWRdID0gZGVwbG95X2J1dHRvbgorICAgICAgICAgICAgc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLnBhY2tfZW5kKGRlcGxveV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIGNyZWF0ZWQgPSBUcnVlCisgICAgICAgICAgICBwYWNrZWQgPSBUcnVlCisKKyAgICAgICAgbmFtZSA9ICJSdW4gaW1hZ2UiCisgICAgICAgIGlmIG5hbWUgaW4gYnV0dG9ubGlzdCBhbmQgc2VsZi50ZXN0X3R5cGVfcnVubmFibGUoaW1hZ2VfbmFtZSkgYW5kIHNlbGYudGVzdF9tYWNoX3J1bm5hYmxlKGltYWdlX25hbWUpOgorICAgICAgICAgICAgaWYgY3JlYXRlZCA9PSBUcnVlOgorICAgICAgICAgICAgICAgICMgc2VwYXJhdG9yCisgICAgICAgICAgICAgICAgI2xhYmVsID0gZ3RrLkxhYmVsKCIgb3IgIikKKyAgICAgICAgICAgICAgICAjc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLnBhY2tfZW5kKGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgICAgICAgICAjIGNyZWF0ZSBidXR0b24gIlJ1biBpbWFnZSIKKyAgICAgICAgICAgICAgICBydW5fYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJSdW4gaW1hZ2UiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGNyZWF0ZSBidXR0b24gIlJ1biBpbWFnZSIgYXMgdGhlIHByaW1hcnkgYnV0dG9uCisgICAgICAgICAgICAgICAgcnVuX2J1dHRvbiA9IEhvYkJ1dHRvbigiUnVuIGltYWdlIikKKyAgICAgICAgICAgICAgICAjcnVuX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICAgICAgcnVuX2J1dHRvbi5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICAgICAgICAgIHBhY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJ1bl9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiU3RhcnQgdXAgYW4gaW1hZ2Ugd2l0aCBxZW11IGVtdWxhdG9yIikKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IHJ1bl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYucnVuX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5idXR0b25faWRzW2J1dHRvbl9pZF0gPSBydW5fYnV0dG9uCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQocnVuX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgY3JlYXRlZCA9IFRydWUKKyAgICAgICAgICAgIGlzX3J1bm5hYmxlID0gVHJ1ZQorCisgICAgICAgIG5hbWUgPSAiU2F2ZSBpbWFnZSByZWNpcGUiCisgICAgICAgIGlmIG5hbWUgaW4gYnV0dG9ubGlzdCBhbmQgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5pc19jdXN0b21faW1hZ2UoKToKKyAgICAgICAgICAgIHNhdmVfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJTYXZlIGltYWdlIHJlY2lwZSIpCisgICAgICAgICAgICBzYXZlX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJLZWVwIHlvdXIgY2hhbmdlcyBzYXZpbmcgdGhlbSBhcyBhbiBpbWFnZSByZWNpcGUiKQorICAgICAgICAgICAgc2F2ZV9idXR0b24uc2V0X3NlbnNpdGl2ZShub3Qgc2VsZi5pbWFnZV9zYXZlZCkKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IHNhdmVfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnNhdmVfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9pZHNbYnV0dG9uX2lkXSA9IHNhdmVfYnV0dG9uCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQoc2F2ZV9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBuYW1lID0gIkJ1aWxkIG5ldyBpbWFnZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0OgorICAgICAgICAgICAgIyBjcmVhdGUgYnV0dG9uICJCdWlsZCBuZXcgaW1hZ2UiCisgICAgICAgICAgICBpZiBwYWNrZWQ6CisgICAgICAgICAgICAgICAgYnVpbGRfbmV3X2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiQnVpbGQgbmV3IGltYWdlIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnVpbGRfbmV3X2J1dHRvbiA9IEhvYkJ1dHRvbigiQnVpbGQgbmV3IGltYWdlIikKKyAgICAgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgICAgICAjYnVpbGRfbmV3X2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQoYnVpbGRfbmV3X2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgYnVpbGRfbmV3X2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBzY3JhdGNoIikKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IGJ1aWxkX25ld19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYnVpbGRfbmV3X2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5idXR0b25faWRzW2J1dHRvbl9pZF0gPSBidWlsZF9uZXdfYnV0dG9uCisKKyAgICAgICAgcmV0dXJuIGlzX3J1bm5hYmxlCisKKyAgICBkZWYgZGVwbG95X2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIGlmIHNlbGYudG9nZ2xlZF9pbWFnZToKKyAgICAgICAgICAgIGlmIHNlbGYubnVtX3RvZ2dsZWQgPiAxOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgICAgICAgICBzZWxmLnNob3dfYnVpbGRlZF9pbWFnZXNfZGlhbG9nKE5vbmUsICJEZXBsb3kgaW1hZ2UiKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZGVwbG95X2ltYWdlKHNlbGYudG9nZ2xlZF9pbWFnZSkKKworICAgIGRlZiBydW5fYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgaWYgc2VsZi50b2dnbGVkX2ltYWdlOgorICAgICAgICAgICAgaWYgc2VsZi5udW1fdG9nZ2xlZCA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuc2hvd19idWlsZGVkX2ltYWdlc19kaWFsb2coTm9uZSwgIlJ1biBpbWFnZSIpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRlci5ydW5xZW11X2ltYWdlKHNlbGYudG9nZ2xlZF9pbWFnZSwgc2VsZi5zZWxfa2VybmVsKQorCisgICAgZGVmIHNhdmVfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgdG9wZGlyID0gc2VsZi5idWlsZGVyLmdldF90b3BkaXIoKQorICAgICAgICBpbWFnZXNfZGlyID0gdG9wZGlyICsgIi9yZWNpcGVzL2ltYWdlcy9jdXN0b20vIgorICAgICAgICBzZWxmLmJ1aWxkZXIuZW5zdXJlX2RpcihpbWFnZXNfZGlyKQorCisgICAgICAgIHNlbGYubmFtZV9maWVsZF90ZW1wbGF0ZSA9IHNlbGYuYnVpbGRlci5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UuY3VzdG9tX2ltYWdlX3NlbGVjdGVkCisgICAgICAgIGlmIHNlbGYubmFtZV9maWVsZF90ZW1wbGF0ZToKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnBuX3BhdGhbc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlXQorICAgICAgICAgICAgaW1hZ2VfaXRlciA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X2l0ZXIoaW1hZ2VfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZmllbGRfdGVtcGxhdGUgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF92YWx1ZShpbWFnZV9pdGVyLCBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLkNPTF9ERVNDKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlID0gIiIKKworICAgICAgICBkaWFsb2cgPSBTYXZlSW1hZ2VEaWFsb2coaW1hZ2VzX2Rpciwgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlLCBzZWxmLmRlc2NyaXB0aW9uX2ZpZWxkX3RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAiU2F2ZSBpbWFnZSByZWNpcGUiLCBzZWxmLmJ1aWxkZXIsIGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBidWlsZF9uZXdfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLmluaXRpYXRlX25ld19idWlsZF9hc3luYygpCisKKyAgICBkZWYgZWRpdF9jb25maWdfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisKKyAgICBkZWYgZWRpdF9wYWNrYWdlc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19wYWNrYWdlcygpCisKKyAgICBkZWYgbXlfaW1hZ2VzX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2xvYWRfbXlfaW1hZ2VzX2RpYWxvZygpCisKKyAgICBkZWYgc2V0dGluZ3NfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgIyBDcmVhdGUgYW4gYWR2YW5jZWQgc2V0dGluZ3MgZGlhbG9nCisgICAgICAgIHJlc3BvbnNlLCBzZXR0aW5nc19jaGFuZ2VkID0gc2VsZi5idWlsZGVyLnNob3dfc2ltcGxlX3NldHRpbmdzX2RpYWxvZygpCisgICAgICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZXR0aW5nc19jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJlcGFyc2VfcG9zdF9hZHZfc2V0dGluZ3MoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGFja2FnZXNlbGVjdGlvbnBhZ2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wYWNrYWdlc2VsZWN0aW9ucGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YzYyYjM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGFja2FnZXNlbGVjdGlvbnBhZ2UucHkKQEAgLTAsMCArMSwzNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnbGliCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYlZpZXdUYWJsZSwgSG9iTm90ZWJvb2ssIEhvYkFsdEJ1dHRvbiwgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5ob2JsaXN0bW9kZWwgaW1wb3J0IFBhY2thZ2VMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCisKKyMKKyMgUGFja2FnZVNlbGVjdGlvblBhZ2UKKyMKK2NsYXNzIFBhY2thZ2VTZWxlY3Rpb25QYWdlIChIb2JQYWdlKToKKworICAgIHBhZ2VzID0gWworICAgICAgICB7CisgICAgICAgICAnbmFtZScgICAgICA6ICdJbmNsdWRlZCBwYWNrYWdlcycsCisgICAgICAgICAndG9vbHRpcCcgICA6ICdUaGUgcGFja2FnZXMgY3VycmVudGx5IGluY2x1ZGVkIGZvciB5b3VyIGltYWdlJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMgOiBbVHJ1ZV0gfSwKKyAgICAgICAgICdzZWFyY2gnICAgIDogJ1NlYXJjaCBwYWNrYWdlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcGFja2FnZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1BhY2thZ2UgbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1NpemUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDMwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdSZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMjUwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0Jyb3VnaHQgaW4gYnkgKCtvdGhlcnMpJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0JJTkIsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnYmluYicsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAzNTAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgIH0sIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ0FsbCBwYWNrYWdlcycsCisgICAgICAgICAndG9vbHRpcCcgICA6ICdBbGwgcGFja2FnZXMgdGhhdCBoYXZlIGJlZW4gYnVpbHQnLAorICAgICAgICAgJ2ZpbHRlcicgICAgOiB7fSwKKyAgICAgICAgICdzZWFyY2gnICAgIDogJ1NlYXJjaCBwYWNrYWdlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcGFja2FnZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1BhY2thZ2UgbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1NpemUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdSZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMjUwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0luY2x1ZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdjaGVjayB0b2dnbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMTAwCisgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfQorICAgIF0KKyAgICAKKyAgICAoSU5DTFVERUQsCisgICAgIEFMTCkgPSByYW5nZSgyKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBzdXBlcihQYWNrYWdlU2VsZWN0aW9uUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIkVkaXQgcGFja2FnZXMiKQorCisgICAgICAgICMgc2V0IGludmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwgPSBzZWxmLmJ1aWxkZXIucGFja2FnZV9tb2RlbAorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGluY2x1ZGVkX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShzZWxmLklOQ0xVREVEKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYubGFiZWwgPSBndGsuTGFiZWwoIlBhY2thZ2VzIGluY2x1ZGVkOiAwXG5TZWxlY3RlZCBwYWNrYWdlcyBzaXplOiAwIE1CIikKKyAgICAgICAgc2VsZi5ldmVudGJveCA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihzZWxmLmxhYmVsLCA3MykKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZXZlbnRib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBzZXQgdmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYuaW5zID0gSG9iTm90ZWJvb2soKQorICAgICAgICBzZWxmLnRhYmxlcyA9IFtdICMgd2UgbmVlZCB0byBtb2RpZnkgdGFibGUgd2hlbiB0aGUgZGlhbG9nIGlzIHNob3duCisKKyAgICAgICAgc2VhcmNoX25hbWVzID0gW10KKyAgICAgICAgc2VhcmNoX3RpcHMgPSBbXQorICAgICAgICAjIGFwcGVuZCB0aGUgdGFiCisgICAgICAgIGZvciBwYWdlIGluIHNlbGYucGFnZXM6CisgICAgICAgICAgICBjb2x1bW5zID0gcGFnZVsnY29sdW1ucyddCisgICAgICAgICAgICBuYW1lID0gcGFnZVsnbmFtZSddCisgICAgICAgICAgICB0YWIgPSBIb2JWaWV3VGFibGUoY29sdW1ucywgbmFtZSkKKyAgICAgICAgICAgIHNlYXJjaF9uYW1lcy5hcHBlbmQocGFnZVsnc2VhcmNoJ10pCisgICAgICAgICAgICBzZWFyY2hfdGlwcy5hcHBlbmQocGFnZVsnc2VhcmNodGlwJ10pCisgICAgICAgICAgICBmaWx0ZXIgPSBwYWdlWydmaWx0ZXInXQorICAgICAgICAgICAgc29ydF9tb2RlbCA9IHNlbGYucGFja2FnZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgaW5pdGlhbD1UcnVlKQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzb3J0X21vZGVsKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRhYmxlX3RvZ2dsZWRfY2IsIG5hbWUpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBzZWxmLmJ1dHRvbl9jbGlja19jYikKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiwgc2VsZi5hZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZSwgZmlsdGVyKQorICAgICAgICAgICAgc2VsZi5pbnMuYXBwZW5kX3BhZ2UodGFiLCBwYWdlWyduYW1lJ10sIHBhZ2VbJ3Rvb2x0aXAnXSkKKyAgICAgICAgICAgIHNlbGYudGFibGVzLmFwcGVuZCh0YWIpCisKKyAgICAgICAgc2VsZi5pbnMuc2V0X2VudHJ5KHNlYXJjaF9uYW1lcywgc2VhcmNoX3RpcHMpCisgICAgICAgIHNlbGYuaW5zLnNlYXJjaC5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5zZWFyY2hfZW50cnlfY2hhbmdlZCkKKworICAgICAgICAjIGFkZCBhbGwgaW50byB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmlucywgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLmJ1dHRvbl9ib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuYnV0dG9uX2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uID0gSG9iQnV0dG9uKCdCdWlsZCBpbWFnZScpCisgICAgICAgICNzZWxmLmJ1aWxkX2ltYWdlX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIHRhcmdldCBpbWFnZSIpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLmdyYWJfZGVmYXVsdCgpCisgICAgICAgIHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmJ1aWxkX2ltYWdlX2NsaWNrZWRfY2IpCisgICAgICAgIHNlbGYuYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmJ1aWxkX2ltYWdlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYmFja19idXR0b24gPSBIb2JBbHRCdXR0b24oJ0NhbmNlbCcpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYmFja19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYmFja19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgIGRlZiBzZWFyY2hfZW50cnlfY2hhbmdlZChzZWxmLCBlbnRyeSk6CisgICAgICAgIHRleHQgPSBlbnRyeS5nZXRfdGV4dCgpCisgICAgICAgIGlmIHNlbGYuaW5zLnNlYXJjaF9mb2N1czoKKyAgICAgICAgICAgIHNlbGYuaW5zLnNlYXJjaF9mb2N1cyA9IEZhbHNlCisgICAgICAgIGVsaWYgc2VsZi5pbnMucGFnZV9jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5pbnMucGFnZV9jaGFuZ2UgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorICAgICAgICBlbGlmIHRleHQgbm90IGluIHNlbGYuaW5zLnNlYXJjaF9uYW1lczoKKyAgICAgICAgICAgIHNlbGYuZmlsdGVyX3NlYXJjaChlbnRyeSkKKworICAgIGRlZiBmaWx0ZXJfc2VhcmNoKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgY3VycmVudF90YWIgPSBzZWxmLmlucy5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgZmlsdGVyID0gc2VsZi5wYWdlc1tjdXJyZW50X3RhYl1bJ2ZpbHRlciddCisgICAgICAgIGZpbHRlcltQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FXSA9IHRleHQKKyAgICAgICAgc2VsZi50YWJsZXNbY3VycmVudF90YWJdLnNldF9tb2RlbChzZWxmLnBhY2thZ2VfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIHNlYXJjaF9kYXRhPXRleHQpKQorICAgICAgICBpZiBzZWxmLnBhY2thZ2VfbW9kZWwuZmlsdGVyZWRfbmIgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXI6CisgICAgICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS5hZGRfbm9fcmVzdWx0X2JhcihlbnRyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2V0X25vX3Nob3dfYWxsKFRydWUpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2hvdygpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5oaWRlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuaGlkZSgpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5zaG93KCkKKyAgICAgICAgaWYgZW50cnkuZ2V0X3RleHQoKSA9PSAnJzoKKyAgICAgICAgICAgIGVudHJ5LnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgVHJ1ZSkKKworICAgIGRlZiBidXR0b25fY2xpY2tfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHBhdGgsIGNvbCA9IHdpZGdldC50YWJsZV90cmVlLmdldF9jdXJzb3IoKQorICAgICAgICB0cmVlX21vZGVsID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgcGF0aCBhbmQgY29sLmdldF90aXRsZSgpICE9ICdJbmNsdWRlZCc6ICMgZWxzZSBhY3RpdmF0aW9uIGlzIGxpa2VseSBhIHJlbW92YWwKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7J2JpbmInOiAnJyAsICduYW1lJzogJycsICdzaXplJzonJywgJ3JlY2lwZSc6JycsICdmaWxlc19saXN0JzonJ30KKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2JpbmInXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWyduYW1lJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcHJvcGVydGllc1snc2l6ZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfU0laRSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3JlY2lwZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfUkNQKQorICAgICAgICAgICAgcHJvcGVydGllc1snZmlsZXNfbGlzdCddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfRkxJU1QpCisKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZV9wcm9wZXJ0eV9kaWFsb2cocHJvcGVydGllcykKKworICAgIGRlZiBvcGVuX2xvZ19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgbG9nX2ZpbGUpOgorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIGxvZ19maWxlID0gImZpbGU6Ly8vIiArIGxvZ19maWxlCisgICAgICAgICAgICBndGsuc2hvd191cmkoc2NyZWVuPWJ1dHRvbi5nZXRfc2NyZWVuKCksIHVyaT1sb2dfZmlsZSwgdGltZXN0YW1wPTApCisKKyAgICBkZWYgc2hvd19wYWdlKHNlbGYsIGxvZ19maWxlKToKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmJ1dHRvbl9ib3guZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5idXR0b25fYm94LnJlbW92ZShjaGlsZCkKKyAgICAgICAgIyByZS1wYWNrZWQgdGhlIGJ1dHRvbnMgYXMgcmVxdWVzdCwgYWRkIHRoZSAnb3BlbiBsb2cnIGJ1dHRvbiBpZiBidWlsZCBzdWNjZXNzCisgICAgICAgIHNlbGYuYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmJ1aWxkX2ltYWdlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiT3BlbiBsb2ciKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm9wZW5fbG9nX2NsaWNrZWRfY2IsIGxvZ19maWxlKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIGJ1aWxkJ3MgbG9nIGZpbGUiKQorICAgICAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKG9wZW5fbG9nX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBidWlsZF9pbWFnZV9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKyAgICAgICAgc2VsZi5idWlsZGVyLmJ1aWxkX2ltYWdlKCkKKworICAgIGRlZiByZWZyZXNoX3RhYmxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5pbnMucmVzZXRfZW50cnkoc2VsZi5pbnMuc2VhcmNoLCAwKQorICAgICAgICBmb3IgdGFiIGluIHNlbGYudGFibGVzOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnRhYmxlcy5pbmRleCh0YWIpCisgICAgICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2luZGV4XVsnZmlsdGVyJ10KKyAgICAgICAgICAgIHRhYi5zZXRfbW9kZWwoc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBpbml0aWFsPVRydWUpKQorCisgICAgZGVmIGJhY2tfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnByZXZpb3VzX3N0ZXAgPT0gIHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFURUQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVzdG9yZV9pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9zZWxlY3Rpb24oKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfaW1hZ2VfZGV0YWlscygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3RhYmxlcygpCisKKyAgICBkZWYgcmVmcmVzaF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlc19udW0gPSBsZW4oc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzX3NpemUgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3BhY2thZ2VzX3NpemUoKQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlc19zaXplX3N0ciA9IEhvYlBhZ2UuX3NpemVfdG9fc3RyaW5nKHNlbGVjdGVkX3BhY2thZ2VzX3NpemUpCisKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2VfcGFja2FnZXMgPT0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICBpbWFnZV90b3RhbF9zaXplX3N0ciA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX3NpemUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltYWdlX292ZXJoZWFkX2ZhY3RvciA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX292ZXJoZWFkX2ZhY3RvcgorICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9yb290ZnNfc2l6ZSAvIDEwMjQgIyBpbWFnZV9yb290ZnNfc2l6ZSBpcyBLQgorICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUgLyAxMDI0ICMgaW1hZ2VfZXh0cmFfc2l6ZSBpcyBLQgorICAgICAgICAgICAgYmFzZV9zaXplID0gaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yICogc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZQorICAgICAgICAgICAgaW1hZ2VfdG90YWxfc2l6ZSA9IG1heChiYXNlX3NpemUsIGltYWdlX3Jvb3Rmc19zaXplKSArIGltYWdlX2V4dHJhX3NpemUKKyAgICAgICAgICAgIGlmICJ6eXBwZXIiIGluIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3BhY2thZ2VzOgorICAgICAgICAgICAgICAgIGltYWdlX3RvdGFsX3NpemUgKz0gKDUxMjAwICogMTAyNCkKKyAgICAgICAgICAgIGltYWdlX3RvdGFsX3NpemVfc3RyID0gSG9iUGFnZS5fc2l6ZV90b19zdHJpbmcoaW1hZ2VfdG90YWxfc2l6ZSkKKworICAgICAgICBzZWxmLmxhYmVsLnNldF9sYWJlbCgiUGFja2FnZXMgaW5jbHVkZWQ6ICVzXG5TZWxlY3RlZCBwYWNrYWdlcyBzaXplOiAlc1xuRXN0aW1hdGVkIGltYWdlIHNpemU6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkX3BhY2thZ2VzX251bSwgc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZV9zdHIsIGltYWdlX3RvdGFsX3NpemVfc3RyKSkKKyAgICAgICAgc2VsZi5pbnMuc2hvd19pbmRpY2F0b3JfaWNvbigiSW5jbHVkZWQgcGFja2FnZXMiLCBzZWxlY3RlZF9wYWNrYWdlc19udW0pCisKKyAgICBkZWYgdG9nZ2xlX2l0ZW1faWRsZV9jYihzZWxmLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKToKKyAgICAgICAgaWYgbm90IHNlbGYucGFja2FnZV9tb2RlbC5wYXRoX2luY2x1ZGVkKHBhdGgpOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLmluY2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCwgYmluYj0iVXNlciBTZWxlY3RlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUodmlld190cmVlKQorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLmV4Y2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCkKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX2ZhZGVvdXQodmlld190cmVlLCBjZWxsKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9zZWxlY3Rpb24oKQorICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zZXRfYmFzZV9pbWFnZSgpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX18KKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yY3Bwa2dsaXN0X3BvcHVsYXRlZCgpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgdmlld19tb2RlbCA9IHZpZXdfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICB2cGF0aCA9IHNlbGYucGFja2FnZV9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fdnBhdGgodmlld19tb2RlbCwgcGF0aCkKKyAgICAgICAgdmlld190cmVlLnNldF9jdXJzb3IodnBhdGgpCisKKyAgICBkZWYgdGFibGVfdG9nZ2xlZF9jYihzZWxmLCB0YWJsZSwgY2VsbCwgdmlld19wYXRoLCB0b2dnbGVkX2NvbHVtbmlkLCB2aWV3X3RyZWUsIHBhZ2VuYW1lKToKKyAgICAgICAgIyBDbGljayB0byBpbmNsdWRlIGEgcGFja2FnZQorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgdmlld19tb2RlbCA9IHZpZXdfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBwYXRoID0gc2VsZi5wYWNrYWdlX21vZGVsLmNvbnZlcnRfdnBhdGhfdG9fcGF0aCh2aWV3X21vZGVsLCB2aWV3X3BhdGgpCisgICAgICAgIGdsaWIuaWRsZV9hZGQoc2VsZi50b2dnbGVfaXRlbV9pZGxlX2NiLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKQorCisgICAgZGVmIHByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUoc2VsZiwgdHJlZSk6CisgICAgICAgICNhZnRlciB0aGUgZmFkZW91dCB0aGUgdGFibGUgd2lsbCBiZSBzb3J0ZWQgYXMgYmVmb3JlCisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc29ydF9jb2x1bW5faWQKKyAgICAgICAgc2VsZi5zb3J0X29yZGVyID0gc2VsZi5wYWNrYWdlX21vZGVsLnNvcnRfb3JkZXIKKworICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwucmVzeW5jX2ZhZGVvdXRfY29sdW1uKHNlbGYucGFja2FnZV9tb2RlbC5nZXRfaXRlcl9maXJzdCgpKQorICAgICAgICAjIENoZWNrIG91dCBhIG1vZGVsIHdoaWNoIGJhc2Ugb24gdGhlIGNvbHVtbiBDT0xfRkFERV9JTkMsCisgICAgICAgICMgaXQncyBzYXZlIHRoZSBwcmV2IHN0YXRlIG9mIGNvbHVtbiBDT0xfSU5DIGJlZm9yZSBkbyBleGNsdWRlX2l0ZW0KKyAgICAgICAgZmlsdGVyID0geyBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GQURFX0lOQyAgOiBbVHJ1ZV19CisgICAgICAgIG5ld19tb2RlbCA9IHNlbGYucGFja2FnZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9VHJ1ZSkKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwobmV3X21vZGVsKQorICAgICAgICB0cmVlLmV4cGFuZF9hbGwoKQorCisgICAgZGVmIGdldF9leGNsdWRlZF9yb3dzKHNlbGYsIHRvX3JlbmRlcl9jZWxscywgbW9kZWwsIGl0KToKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwYXRoID0gbW9kZWwuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBwcmV2X2NlbGxfaXNfYWN0aXZlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GQURFX0lOQykKKyAgICAgICAgICAgIGN1cnJfY2VsbF9pc19hY3RpdmUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIGlmIChwcmV2X2NlbGxfaXNfYWN0aXZlID09IFRydWUpIGFuZCAoY3Vycl9jZWxsX2lzX2FjdGl2ZSA9PSBGYWxzZSk6CisgICAgICAgICAgICAgICAgdG9fcmVuZGVyX2NlbGxzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgaWYgbW9kZWwuaXRlcl9oYXNfY2hpbGQoaXQpOgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2V4Y2x1ZGVkX3Jvd3ModG9fcmVuZGVyX2NlbGxzLCBtb2RlbCwgbW9kZWwuaXRlcl9jaGlsZHJlbihpdCkpCisgICAgICAgICAgICBpdCA9IG1vZGVsLml0ZXJfbmV4dChpdCkKKworICAgICAgICByZXR1cm4gdG9fcmVuZGVyX2NlbGxzCisKKyAgICBkZWYgcmVuZGVyX2ZhZGVvdXQoc2VsZiwgdHJlZSwgY2VsbCk6CisgICAgICAgIGlmIChub3QgY2VsbCkgb3IgKG5vdCB0cmVlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0b19yZW5kZXJfY2VsbHMgPSBbXQorICAgICAgICB2aWV3X21vZGVsID0gdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBzZWxmLmdldF9leGNsdWRlZF9yb3dzKHRvX3JlbmRlcl9jZWxscywgdmlld19tb2RlbCwgdmlld19tb2RlbC5nZXRfaXRlcl9maXJzdCgpKQorCisgICAgICAgIGNlbGwuZmFkZW91dCh0cmVlLCAxMDAwLCB0b19yZW5kZXJfY2VsbHMpCisKKyAgICBkZWYgYWZ0ZXJfZmFkZW91dF9jaGVja2luX2luY2x1ZGUoc2VsZiwgdGFibGUsIGN0cmwsIGNlbGwsIHRyZWUsIGZpbHRlcik6CisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5zb3J0X2NvbHVtbl9pZCA9IHNlbGYuc29ydF9jb2x1bW5faWQKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLnNvcnRfb3JkZXIgPSBzZWxmLnNvcnRfb3JkZXIKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwoc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyKSkKKyAgICAgICAgdHJlZS5leHBhbmRfYWxsKCkKKworICAgIGRlZiBzZXRfcGFja2FnZXNfY3Vycl90YWIoc2VsZiwgY3Vycl9wYWdlKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShjdXJyX3BhZ2UpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGVyc2lzdGVudHRvb2x0aXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3YzE5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5CkBAIC0wLDAgKzEsMTg2IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGd0awordHJ5OgorICAgIGltcG9ydCBnY29uZgorZXhjZXB0OgorICAgIHBhc3MKKworY2xhc3MgUGVyc2lzdGVudFRvb2x0aXAoZ3RrLldpbmRvdyk6CisgICAgIiIiCisgICAgQSB0b29sdGlwIHdoaWNoIHBlcnNpc3RzIG9uY2Ugc2hvd24gdW50aWwgdGhlIHVzZXIgZGlzbWlzc2VzIGl0IHdpdGggdGhlIEVzYworICAgIGtleSBvciBieSBjbGlja2luZyB0aGUgY2xvc2UgYnV0dG9uLgorCisgICAgIyBGSVhNRTogdGhlIFBlcnNpc3RlbnRUb29sdGlwIHNob3VsZCBiZSBkaXNhYmxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhbnl3aGVyZSBvZmYKKyAgICAjIGl0LiBXZSBjYW4ndCBkbyB0aGlzIHdpdGggZm9jdXMtb3V0LWV2ZW50IGJlY3Vhc2UgbW9kYWwgZW5zdXJlcyB3ZSBoYXZlIGZvY3VzPworCisgICAgbWFya3VwOiBzb21lIFBhbmdvIHRleHQgbWFya3VwIHRvIGRpc3BsYXkgaW4gdGhlIHRvb2x0aXAKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwLCBwYXJlbnRfd2luPU5vbmUpOgorICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fKHNlbGYsIGd0ay5XSU5ET1dfUE9QVVApCisKKyAgICAgICAgIyBJbmhlcml0IHRoZSBzeXN0ZW0gdGhlbWUgZm9yIGEgdG9vbHRpcAorICAgICAgICBzdHlsZSA9IGd0ay5yY19nZXRfc3R5bGVfYnlfcGF0aHMoZ3RrLnNldHRpbmdzX2dldF9kZWZhdWx0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZ3RrLXRvb2x0aXAnLCAnZ3RrLXRvb2x0aXAnLCBnb2JqZWN0LlRZUEVfTk9ORSkKKyAgICAgICAgc2VsZi5zZXRfc3R5bGUoc3R5bGUpCisKKyAgICAgICAgIyBUaGUgcGxhY2VtZW50IG9mIHRoZSBjbG9zZSBidXR0b24gb24gdGhlIHRpcCBzaG91bGQgcmVmbGVjdCBob3cgdGhlCisgICAgICAgICMgd2luZG93IG1hbmFnZXIgb2YgdGhlIHVzZXJzIHN5c3RlbSBwbGFjZXMgY2xvc2UgYnV0dG9ucy4gVHJ5IHRvIHJlYWQKKyAgICAgICAgIyB0aGUgbWV0YWNpdHkgZ2NvbmYga2V5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjbG9zZSBidXR0b24gaXMgb24gdGhlCisgICAgICAgICMgbGVmdCBvciB0aGUgcmlnaHQuCisgICAgICAgICMgSW4gdGhlIGNhc2UgdGhhdCB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhlIHVzZXJzIGNvbmZpZ3VyYXRpb24gd2UgZGVmYXVsdAorICAgICAgICAjIHRvIGNsb3NlIGJ1dHRvbnMgYmVpbmcgb24gdGhlIHJpZ2h0LgorICAgICAgICBfX2J1dHRvbl9yaWdodCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xpZW50ID0gZ2NvbmYuY2xpZW50X2dldF9kZWZhdWx0KCkKKyAgICAgICAgICAgIG9yZGVyID0gY2xpZW50LmdldF9zdHJpbmcoIi9hcHBzL21ldGFjaXR5L2dlbmVyYWwvYnV0dG9uX2xheW91dCIpCisgICAgICAgICAgICBpZiBvcmRlciBhbmQgb3JkZXIuZW5kc3dpdGgoIjoiKToKKyAgICAgICAgICAgICAgICBfX2J1dHRvbl9yaWdodCA9IEZhbHNlCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIGVuc3VyZSB3ZSdyZSBvbmx5IHNob3duIG9uY2UKKyAgICAgICAgc2VsZi5zaG93biA9IEZhbHNlCisKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IGFueSBXTSBkZWNvcmF0aW9ucworICAgICAgICBzZWxmLnNldF9kZWNvcmF0ZWQoRmFsc2UpCisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byBzaG93IGluIHRoZSB0YXNrYmFyIG9yIHdpbmRvdyBzd2l0Y2hlcgorICAgICAgICBzZWxmLnNldF9za2lwX3BhZ2VyX2hpbnQoVHJ1ZSkKKyAgICAgICAgc2VsZi5zZXRfc2tpcF90YXNrYmFyX2hpbnQoVHJ1ZSkKKyAgICAgICAgIyBXZSBtdXN0IGJlIG1vZGFsIHRvIGVuc3VyZSB3ZSBncmFiIGZvY3VzIHdoZW4gcHJlc2VudGVkIGZyb20gYSBndGsuRGlhbG9nCisgICAgICAgIHNlbGYuc2V0X21vZGFsKFRydWUpCisKKyAgICAgICAgc2VsZi5zZXRfYm9yZGVyX3dpZHRoKDApCisgICAgICAgIHNlbGYuc2V0X3Bvc2l0aW9uKGd0ay5XSU5fUE9TX01PVVNFKQorICAgICAgICBzZWxmLnNldF9vcGFjaXR5KDAuOTUpCisKKyAgICAgICAgIyBFbnN1cmUgYSByZWFzb25hYmxlIG1pbmltdW0gc2l6ZQorICAgICAgICBzZWxmLnNldF9nZW9tZXRyeV9oaW50cyhzZWxmLCAxMDAsIDUwKQorCisgICAgICAgICMgU2V0IHRoaXMgd2luZG93IGFzIGEgdHJhbnNpZW50IHdpbmRvdyBmb3IgcGFyZW50KG1haW4gd2luZG93KQorICAgICAgICBpZiBwYXJlbnRfd2luOgorICAgICAgICAgICAgc2VsZi5zZXRfdHJhbnNpZW50X2ZvcihwYXJlbnRfd2luKQorICAgICAgICAgICAgc2VsZi5zZXRfZGVzdHJveV93aXRoX3BhcmVudChUcnVlKQorICAgICAgICAjIERyYXcgb3VyIGxhYmVsIGFuZCBjbG9zZSBidXR0b25zCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMCkKKyAgICAgICAgaGJveC5zaG93KCkKKyAgICAgICAgc2VsZi5hZGQoaGJveCkKKworICAgICAgICBpbWcgPSBndGsuSW1hZ2UoKQorICAgICAgICBpbWcuc2V0X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0NMT1NFLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKworICAgICAgICBzZWxmLmJ1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBzZWxmLmJ1dHRvbi5zZXRfaW1hZ2UoaW1nKQorICAgICAgICBzZWxmLmJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5fZGlzbWlzc19jYikKKyAgICAgICAgc2VsZi5idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgc2VsZi5idXR0b24uZ3JhYl9mb2N1cygpCisgICAgICAgIHNlbGYuYnV0dG9uLnNob3coKQorICAgICAgICB2Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDApCisgICAgICAgIHZib3guc2hvdygpCisgICAgICAgIHZib3gucGFja19zdGFydChzZWxmLmJ1dHRvbiwgRmFsc2UsIEZhbHNlLCAwKQorICAgICAgICBpZiBfX2J1dHRvbl9yaWdodDoKKyAgICAgICAgICAgIGhib3gucGFja19lbmQodmJveCwgVHJ1ZSwgVHJ1ZSwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhib3gucGFja19zdGFydCh2Ym94LCBUcnVlLCBUcnVlLCAwKQorCisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHQoc2VsZi5idXR0b24pCisKKyAgICAgICAgYmluID0gZ3RrLkhCb3goVHJ1ZSwgNikKKyAgICAgICAgYmluLnNldF9ib3JkZXJfd2lkdGgoNikKKyAgICAgICAgYmluLnNob3coKQorICAgICAgICBzZWxmLmxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5sYWJlbC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICMgV2Ugd2FudCB0byBtYXRjaCB0aGUgY29sb3VycyBvZiB0aGUgbm9ybWFsIHRvb2x0aXBzLCBhcyBkaWN0YXRlZCBieQorICAgICAgICAjIHRoZSB1c2VycyBndGsrLTIuMCB0aGVtZSwgd2hlcmV2ZXIgcG9zc2libGUgLSBvbiBzb21lIHN5c3RlbXMgdGhpcworICAgICAgICAjIHJlcXVpcmVzIGV4cGxpY2l0bHkgc2V0dGluZyBhIGZnX2NvbG9yIGZvciB0aGUgbGFiZWwgd2hpY2ggbWF0Y2hlcyB0aGUKKyAgICAgICAgIyB0b29sdGlwX2ZnX2NvbG9yCisgICAgICAgIHNldHRpbmdzID0gZ3RrLnNldHRpbmdzX2dldF9kZWZhdWx0KCkKKyAgICAgICAgY29sb3VycyA9IHNldHRpbmdzLmdldF9wcm9wZXJ0eSgnZ3RrLWNvbG9yLXNjaGVtZScpLnNwbGl0KCdcbicpCisgICAgICAgICMgcmVtb3ZlIGFueSBlbXB0eSBsaW5lcywgdGhlcmUncyBsaWtlbHkgdG8gYmUgYSB0cmFpbGluZyBvbmUgYWZ0ZXIKKyAgICAgICAgIyBjYWxsaW5nIHNwbGl0IG9uIGEgZGljdGlvbmFyeS1saWtlIHN0cmluZworICAgICAgICBjb2xvdXJzID0gZmlsdGVyKE5vbmUsIGNvbG91cnMpCisgICAgICAgIGZvciBjb2wgaW4gY29sb3VyczoKKyAgICAgICAgICAgIGl0ZW0sIHZhbCA9IGNvbC5zcGxpdCgnOiAnKQorICAgICAgICAgICAgaWYgaXRlbSA9PSAndG9vbHRpcF9mZ19jb2xvcic6CisgICAgICAgICAgICAgICAgc3R5bGUgPSBzZWxmLmxhYmVsLmdldF9zdHlsZSgpCisgICAgICAgICAgICAgICAgc3R5bGUuZmdbZ3RrLlNUQVRFX05PUk1BTF0gPSBndGsuZ2RrLmNvbG9yX3BhcnNlKHZhbCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsLnNldF9zdHlsZShzdHlsZSkKKyAgICAgICAgICAgICAgICBicmVhayAjIHdlIG9ubHkgY2FyZSBmb3IgdGhlIHRvb2x0aXBfZmdfY29sb3IKKworICAgICAgICBzZWxmLmxhYmVsLnNldF9tYXJrdXAobWFya3VwKQorICAgICAgICBzZWxmLmxhYmVsLnNob3coKQorICAgICAgICBiaW4uYWRkKHNlbGYubGFiZWwpCisgICAgICAgIGhib3gucGFja19lbmQoYmluLCBUcnVlLCBUcnVlLCA2KQorCisgICAgICAgICMgYWRkIHRoZSBvcmlnaW5hbCBVUkwgZGlzcGxheSBmb3IgdXNlciByZWZlcmVuY2UKKyAgICAgICAgaWYgJ2EgaHJlZicgaW4gbWFya3VwOgorICAgICAgICAgICAgaGJveC5zZXRfdG9vbHRpcF90ZXh0KHNlbGYuZ2V0X21hcmt1cF91cmwobWFya3VwKSkKKyAgICAgICAgaGJveC5zaG93KCkKKworICAgICAgICBzZWxmLmNvbm5lY3QoImtleS1wcmVzcy1ldmVudCIsIHNlbGYuX2NhdGNoX2VzY19jYikKKworICAgICIiIgorICAgIENhbGxiYWNrIHdoZW4gdGhlIFBlcnNpc3RlbnRUb29sdGlwJ3MgY2xvc2UgYnV0dG9uIGlzIGNsaWNrZWQuCisgICAgSGlkZXMgdGhlIFBlcnNpc3RlbnRUb29sdGlwLgorICAgICIiIgorICAgIGRlZiBfZGlzbWlzc19jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmhpZGUoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQ2FsbGJhY2sgd2hlbiB0aGUgRXNjIGtleSBpcyBkZXRlY3RlZC4gSGlkZXMgdGhlIFBlcnNpc3RlbnRUb29sdGlwLgorICAgICIiIgorICAgIGRlZiBfY2F0Y2hfZXNjX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBrZXluYW1lID0gZ3RrLmdkay5rZXl2YWxfbmFtZShldmVudC5rZXl2YWwpCisgICAgICAgIGlmIGtleW5hbWUgPT0gIkVzY2FwZSI6CisgICAgICAgICAgICBzZWxmLmhpZGUoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQ2FsbGVkIHRvIHByZXNlbnQgdGhlIFBlcnNpc3RlbnRUb29sdGlwLgorICAgIE92ZXJyaWRlcyB0aGUgc3VwZXJjbGFzc2VzIHNob3coKSBtZXRob2QgdG8gaW5jbHVkZSBzdGF0ZSB0cmFja2luZy4KKyAgICAiIiIKKyAgICBkZWYgc2hvdyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuc2hvd246CisgICAgICAgICAgICBzZWxmLnNob3duID0gVHJ1ZQorICAgICAgICAgICAgZ3RrLldpbmRvdy5zaG93KHNlbGYpCisKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gaGlkZSB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgT3ZlcnJpZGVzIHRoZSBzdXBlcmNsYXNzZXMgaGlkZSgpIG1ldGhvZCB0byBpbmNsdWRlIHN0YXRlIHRyYWNraW5nLgorICAgICIiIgorICAgIGRlZiBoaWRlKHNlbGYpOgorICAgICAgICBzZWxmLnNob3duID0gRmFsc2UKKyAgICAgICAgZ3RrLldpbmRvdy5oaWRlKHNlbGYpCisKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gZ2V0IHRoZSBoeXBlcmxpbmsgVVJMIGZyb20gbWFya3VwIHRleHQuCisgICAgIiIiCisgICAgZGVmIGdldF9tYXJrdXBfdXJsKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIHVybCA9ICJodHRwOiIKKyAgICAgICAgaWYgbWFya3VwIGFuZCB0eXBlKG1hcmt1cCkgPT0gc3RyOgorICAgICAgICAgICAgcyA9IG1hcmt1cAorICAgICAgICAgICAgaWYgJ2h0dHA6JyBpbiBzOgorICAgICAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgICAgIHVybCA9IHJlLnNlYXJjaCgnKGh0dHA6W14sXFwgIl0rKScsIHMpLmdyb3VwKDApCisKKyAgICAgICAgcmV0dXJuIHVybApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHJvZ3Jlc3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDI4YTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHJvZ3Jlc3MucHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGd0aworCitjbGFzcyBQcm9ncmVzc0JhcihndGsuRGlhbG9nKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50KToKKworICAgICAgICBndGsuRGlhbG9nLl9faW5pdF9fKHNlbGYsIGZsYWdzPShndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKSkKKyAgICAgICAgc2VsZi5zZXRfdGl0bGUoIlBhcnNpbmcgbWV0YWRhdGEsIHBsZWFzZSB3YWl0Li4uIikKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKDUwMCwgMCkKKyAgICAgICAgc2VsZi5zZXRfdHJhbnNpZW50X2ZvcihwYXJlbnQpCisgICAgICAgIHNlbGYucHJvZ3Jlc3MgPSBndGsuUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBzZXRfdGV4dChzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KG1zZykKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgeCwgeSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X2ZyYWN0aW9uKGZsb2F0KHgpL2Zsb2F0KHkpKQorICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KCIlMmQgJSUiICUgKHgqMTAwL3kpKQorCisgICAgZGVmIHB1bHNlKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzLnNldF90ZXh0KCJMb2FkaW5nLi4uIikKKyAgICAgICAgc2VsZi5wcm9ncmVzcy5wdWxzZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzc2Jhci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzYmFyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmM2NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzc2Jhci5weQpAQCAtMCwwICsxLDU5IEBACisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworCitjbGFzcyBIb2JQcm9ncmVzc0JhciAoZ3RrLlByb2dyZXNzQmFyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5Qcm9ncmVzc0Jhci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9yY3N0eWxlKFRydWUpCisgICAgICAgIHNlbGYucGVyY2VudGFnZSA9IDAKKworICAgIGRlZiBzZXRfcmNzdHlsZShzZWxmLCBzdGF0dXMpOgorICAgICAgICByY3N0eWxlID0gZ3RrLlJjU3R5bGUoKQorICAgICAgICByY3N0eWxlLmZnWzJdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuQkxBQ0spCisgICAgICAgIGlmIHN0YXR1cyA9PSAic3RvcCI6CisgICAgICAgICAgICByY3N0eWxlLmJnWzNdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuV0FSTklORykKKyAgICAgICAgZWxpZiBzdGF0dXMgPT0gImZhaWwiOgorICAgICAgICAgICAgcmNzdHlsZS5iZ1szXSA9IGd0ay5nZGsuQ29sb3IoSG9iQ29sb3JzLkVSUk9SKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmNzdHlsZS5iZ1szXSA9IGd0ay5nZGsuQ29sb3IoSG9iQ29sb3JzLlJVTk5JTkcpCisgICAgICAgIHNlbGYubW9kaWZ5X3N0eWxlKHJjc3R5bGUpCisKKyAgICBkZWYgc2V0X3RpdGxlKHNlbGYsIHRleHQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9ICIiCisgICAgICAgIHRleHQgKz0gIiAlLjBmJSUiICUgc2VsZi5wZXJjZW50YWdlCisgICAgICAgIHNlbGYuc2V0X3RleHQodGV4dCkKKworICAgIGRlZiBzZXRfc3RvcF90aXRsZShzZWxmLCB0ZXh0PU5vbmUpOgorCWlmIG5vdCB0ZXh0OgorCSAgICB0ZXh0ID0gIiIKKwlzZWxmLnNldF90ZXh0KHRleHQpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X2ZyYWN0aW9uKDApCisgICAgICAgIHNlbGYuc2V0X3RleHQoIiIpCisgICAgICAgIHNlbGYuc2V0X3Jjc3R5bGUoVHJ1ZSkKKyAgICAgICAgc2VsZi5wZXJjZW50YWdlID0gMAorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBmcmFjdGlvbik6CisgICAgICAgIHNlbGYucGVyY2VudGFnZSA9IGludChmcmFjdGlvbiAqIDEwMCkKKyAgICAgICAgc2VsZi5zZXRfZnJhY3Rpb24oZnJhY3Rpb24pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wdWNjaG8uZ2xhZGUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wdWNjaG8uZ2xhZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1NTNhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3B1Y2Noby5nbGFkZQpAQCAtMCwwICsxLDYwNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IURPQ1RZUEUgZ2xhZGUtaW50ZXJmYWNlIFNZU1RFTSAiZ2xhZGUtMi4wLmR0ZCI+Cis8IS0tR2VuZXJhdGVkIHdpdGggZ2xhZGUzIDMuNC41IG9uIE1vbiBOb3YgMTAgMTI6MjQ6MTIgMjAwOCAtLT4KKzxnbGFkZS1pbnRlcmZhY2U+CisgIDx3aWRnZXQgY2xhc3M9Ikd0a0RpYWxvZyIgaWQ9ImJ1aWxkX2RpYWxvZyI+CisgICAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xhdGFibGU9InllcyI+U3RhcnQgYSBidWlsZDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfQ0VOVEVSX09OX1BBUkVOVDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9InR5cGVfaGludCI+R0RLX1dJTkRPV19UWVBFX0hJTlRfRElBTE9HPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzX3NlcGFyYXRvciI+RmFsc2U8L3Byb3BlcnR5PgorICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0idmJveCI+CisgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWQm94IiBpZD0iZGlhbG9nLXZib3gxIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3BhY2luZyI+MjwvcHJvcGVydHk+CisgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUYWJsZSIgaWQ9ImJ1aWxkX3RhYmxlIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3JkZXJfd2lkdGgiPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5fcm93cyI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9jb2x1bW5zIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb2x1bW5fc3BhY2luZyI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icm93X3NwYWNpbmciPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJzdGF0dXNfYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfcGFkZGluZyI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0hCb3giIGlkPSJzdGF0dXNfaGJveCI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0ic3RhdHVzX2ltYWdlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJub19zaG93X2FsbCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLWRpYWxvZy1lcnJvcjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ic3RhdHVzX2xhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+SWYgeW91IHNlZSB0aGlzIHRleHQgc29tZXRoaW5nIGlzIHdyb25nLi4uPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWwyIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2ImZ3Q7QnVpbGQgY29uZmlndXJhdGlvbiZsdDsvYiZndDs8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQ29tYm9Cb3giIGlkPSJpbWFnZV9jb21ibyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImltYWdlX2xhYmVsIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+SW1hZ2U6PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQ29tYm9Cb3giIGlkPSJkaXN0cmlidXRpb25fY29tYm8iPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJkaXN0cmlidXRpb25fbGFiZWwiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5EaXN0cmlidXRpb246PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQ29tYm9Cb3giIGlkPSJtYWNoaW5lX2NvbWJvIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibWFjaGluZV9sYWJlbCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPk1hY2hpbmU6PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0icmVmcmVzaF9idXR0b24iPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1yZWZyZXNoPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0VudHJ5IiBpZD0ibG9jYXRpb25fZW50cnkiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0id2lkdGhfY2hhcnMiPjMyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImxhYmVsMyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TG9jYXRpb246PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDEiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtSZXBvc2l0b3J5Jmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50MSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQyIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDMiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImFjdGlvbl9hcmVhIj4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtIQnV0dG9uQm94IiBpZD0iZGlhbG9nLWFjdGlvbl9hcmVhMSI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGF5b3V0X3N0eWxlIj5HVEtfQlVUVE9OQk9YX0VORDwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icGFja190eXBlIj5HVEtfUEFDS19FTkQ8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgIDwvd2lkZ2V0PgorICAgIDwvY2hpbGQ+CisgIDwvd2lkZ2V0PgorICA8d2lkZ2V0IGNsYXNzPSJHdGtEaWFsb2ciIGlkPSJkaWFsb2cyIj4KKyAgICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19DRU5URVJfT05fUEFSRU5UPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0idHlwZV9oaW50Ij5HREtfV0lORE9XX1RZUEVfSElOVF9ESUFMT0c8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNfc2VwYXJhdG9yIj5GYWxzZTwvcHJvcGVydHk+CisgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJ2Ym94Ij4KKyAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJkaWFsb2ctdmJveDIiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgPGNoaWxkPgorICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RhYmxlIiBpZD0idGFibGUyIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3JkZXJfd2lkdGgiPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5fcm93cyI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9jb2x1bW5zIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb2x1bW5fc3BhY2luZyI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icm93X3NwYWNpbmciPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImxhYmVsNyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPiZsdDtiJmd0O1JlcG9zaXRvcmllcyZsdDsvYiZndDs8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9wYWRkaW5nIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzEiPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUcmVlVmlldyIgaWQ9InRyZWV2aWV3MSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoZWFkZXJzX2NsaWNrYWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtFbnRyeSIgaWQ9ImVudHJ5MSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWw5Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2ImZ3Q7QWRkaXRpb25hbCBwYWNrYWdlcyZsdDsvYiZndDs8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfbWFya3VwIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NiI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4c2NhbGUiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWw4Ij4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxvY2F0aW9uOiA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4c2NhbGUiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0hCdXR0b25Cb3giIGlkPSJoYnV0dG9uYm94MSI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0iYnV0dG9uNyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZWNlaXZlc19kZWZhdWx0Ij5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1yZW1vdmU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0iYnV0dG9uNiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZWNlaXZlc19kZWZhdWx0Ij5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1lZGl0PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vfc3RvY2siPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc3BvbnNlX2lkIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQnV0dG9uIiBpZD0iYnV0dG9uNSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZWNlaXZlc19kZWZhdWx0Ij5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1hZGQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDUiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWwxMCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2VhcmNoOjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0VudHJ5IiBpZD0iZW50cnkyIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50OCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X3BhZGRpbmciPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93MiI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlYWRlcnNfY2xpY2thYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjc8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjE8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJhY3Rpb25fYXJlYSI+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJ1dHRvbkJveCIgaWQ9ImRpYWxvZy1hY3Rpb25fYXJlYTIiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxheW91dF9zdHlsZSI+R1RLX0JVVFRPTkJPWF9FTkQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b240Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPmd0ay1jbG9zZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc3BvbnNlX2lkIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBhY2tfdHlwZSI+R1RLX1BBQ0tfRU5EPC9wcm9wZXJ0eT4KKyAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgIDwvY2hpbGQ+CisgICAgICA8L3dpZGdldD4KKyAgICA8L2NoaWxkPgorICA8L3dpZGdldD4KKyAgPHdpZGdldCBjbGFzcz0iR3RrV2luZG93IiBpZD0ibWFpbl93aW5kb3ciPgorICAgIDxjaGlsZD4KKyAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJtYWluX3dpbmRvd192Ym94Ij4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVG9vbGJhciIgaWQ9Im1haW5fdG9vbGJhciI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJtYWluX3Rvb2xidXR0b25fYnVpbGQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5CdWlsZDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstZXhlY3V0ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVlBhbmVkIiBpZD0idnBhbmVkMSI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJyZXN1bHRzX3Njcm9sbGVkd2luZG93Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InByb2dyZXNzX3Njcm9sbGVkd2luZG93Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjE8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgIDwvd2lkZ2V0PgorICAgIDwvY2hpbGQ+CisgIDwvd2lkZ2V0PgorPC9nbGFkZS1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9yZWNpcGVzZWxlY3Rpb25wYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcmVjaXBlc2VsZWN0aW9ucGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OGRiNDNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcmVjaXBlc2VsZWN0aW9ucGFnZS5weQpAQCAtMCwwICsxLDMzNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iVmlld1RhYmxlLCBIb2JOb3RlYm9vaywgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhvYmxpc3Rtb2RlbCBpbXBvcnQgUmVjaXBlTGlzdE1vZGVsCitmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQorCisjCisjIFJlY2lwZVNlbGVjdGlvblBhZ2UKKyMKK2NsYXNzIFJlY2lwZVNlbGVjdGlvblBhZ2UgKEhvYlBhZ2UpOgorICAgIHBhZ2VzID0gWworICAgICAgICB7CisgICAgICAgICAnbmFtZScgICAgICA6ICdJbmNsdWRlZCByZWNpcGVzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ1RoZSByZWNpcGVzIGN1cnJlbnRseSBpbmNsdWRlZCBmb3IgeW91ciBpbWFnZScsCisgICAgICAgICAnZmlsdGVyJyAgICA6IHsgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMgIDogW1RydWVdLAorICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ3JlY2lwZScsICdwYWNrYWdlZ3JvdXAnXSB9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHJlY2lwZXMgYnkgbmFtZScsCisgICAgICAgICAnc2VhcmNodGlwJyA6ICdFbnRlciBhIHJlY2lwZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdHcm91cCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0Jyb3VnaHQgaW4gYnkgKCtvdGhlcnMpJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQiwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdiaW5iJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdJbmNsdWRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdjaGVjayB0b2dnbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMTAwCisgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfSwgeworICAgICAgICAgJ25hbWUnICAgICAgOiAnQWxsIHJlY2lwZXMnLAorICAgICAgICAgJ3Rvb2x0aXAnICAgOiAnQWxsIHJlY2lwZXMgaW4geW91ciBjb25maWd1cmVkIGxheWVycycsCisgICAgICAgICAnZmlsdGVyJyAgICA6IHsgUmVjaXBlTGlzdE1vZGVsLkNPTF9UWVBFIDogWydyZWNpcGUnXSB9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHJlY2lwZXMgYnkgbmFtZScsCisgICAgICAgICAnc2VhcmNodGlwJyA6ICdFbnRlciBhIHJlY2lwZSBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdHcm91cCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnY2hlY2sgdG9nZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDEwMAorICAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgIH0sIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ1BhY2thZ2UgR3JvdXBzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ0FsbCBwYWNrYWdlIGdyb3VwcyBpbiB5b3VyIGNvbmZpZ3VyZWQgbGF5ZXJzJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ3BhY2thZ2Vncm91cCddIH0sCisgICAgICAgICAnc2VhcmNoJyAgICA6ICdTZWFyY2ggcGFja2FnZSBncm91cHMgYnkgbmFtZScsCisgICAgICAgICAnc2VhcmNodGlwJyA6ICdFbnRlciBhIHBhY2thZ2UgZ3JvdXAgbmFtZSB0byBmaW5kIGl0JywKKyAgICAgICAgICdjb2x1bW5zJyAgIDogW3sKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdQYWNrYWdlIGdyb3VwIG5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0luY2x1ZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICB9CisgICAgXQorICAgIAorICAgIChJTkNMVURFRCwKKyAgICAgQUxMLAorICAgICBUQVNLUykgPSByYW5nZSgzKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIgPSBOb25lKToKKyAgICAgICAgc3VwZXIoUmVjaXBlU2VsZWN0aW9uUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIlN0ZXAgMSBvZiAyOiBFZGl0IHJlY2lwZXMiKQorCisgICAgICAgICMgc2V0IGludmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbAorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGluY2x1ZGVkX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShzZWxmLklOQ0xVREVEKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuZXZlbnRib3ggPSBzZWxmLmFkZF9vbnRvX3RvcF9iYXIoTm9uZSwgNzMpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmV2ZW50Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgc2V0IHZpc2libGUgbWVtYmVycworICAgICAgICBzZWxmLmlucyA9IEhvYk5vdGVib29rKCkKKyAgICAgICAgc2VsZi50YWJsZXMgPSBbXSAjIHdlIG5lZWQgbW9kaWZ5IHRhYmxlIHdoZW4gdGhlIGRpYWxvZyBpcyBzaG93bgorCisgICAgICAgIHNlYXJjaF9uYW1lcyA9IFtdCisgICAgICAgIHNlYXJjaF90aXBzID0gW10KKyAgICAgICAgIyBhcHBlbmQgdGhlIHRhYnMgaW4gb3JkZXIKKyAgICAgICAgZm9yIHBhZ2UgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGNvbHVtbnMgPSBwYWdlWydjb2x1bW5zJ10KKyAgICAgICAgICAgIG5hbWUgPSBwYWdlWyduYW1lJ10KKyAgICAgICAgICAgIHRhYiA9IEhvYlZpZXdUYWJsZShjb2x1bW5zLCBuYW1lKQorICAgICAgICAgICAgc2VhcmNoX25hbWVzLmFwcGVuZChwYWdlWydzZWFyY2gnXSkKKyAgICAgICAgICAgIHNlYXJjaF90aXBzLmFwcGVuZChwYWdlWydzZWFyY2h0aXAnXSkKKyAgICAgICAgICAgIGZpbHRlciA9IHBhZ2VbJ2ZpbHRlciddCisgICAgICAgICAgICBzb3J0X21vZGVsID0gc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIGluaXRpYWw9VHJ1ZSkKKyAgICAgICAgICAgIHRhYi5zZXRfbW9kZWwoc29ydF9tb2RlbCkKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi50YWJsZV90b2dnbGVkX2NiLCBuYW1lKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoImJ1dHRvbi1yZWxlYXNlLWV2ZW50Iiwgc2VsZi5idXR0b25fY2xpY2tfY2IpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgiY2VsbC1mYWRlaW5vdXQtc3RvcHBlZCIsIHNlbGYuYWZ0ZXJfZmFkZW91dF9jaGVja2luX2luY2x1ZGUsIGZpbHRlcikKKyAgICAgICAgICAgIHNlbGYuaW5zLmFwcGVuZF9wYWdlKHRhYiwgcGFnZVsnbmFtZSddLCBwYWdlWyd0b29sdGlwJ10pCisgICAgICAgICAgICBzZWxmLnRhYmxlcy5hcHBlbmQodGFiKQorCisgICAgICAgIHNlbGYuaW5zLnNldF9lbnRyeShzZWFyY2hfbmFtZXMsIHNlYXJjaF90aXBzKQorICAgICAgICBzZWxmLmlucy5zZWFyY2guY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuc2VhcmNoX2VudHJ5X2NoYW5nZWQpCisKKyAgICAgICAgIyBhZGQgYWxsIGludG8gdGhlIHdpbmRvdworICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5pbnMsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgYnV0dG9uX2JveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKGJ1dHRvbl9ib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbiA9IEhvYkJ1dHRvbignQnVpbGQgcGFja2FnZXMnKQorICAgICAgICAjc2VsZi5idWlsZF9wYWNrYWdlc19idXR0b24uc2V0X3NpemVfcmVxdWVzdCgyMDUsIDQ5KQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJCdWlsZCBzZWxlY3RlZCByZWNpcGVzIGludG8gcGFja2FnZXMiKQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5ncmFiX2RlZmF1bHQoKQorICAgICAgICBzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5idWlsZF9wYWNrYWdlc19jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignQ2FuY2VsJykKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5iYWNrX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYmFja19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgIGRlZiBzZWFyY2hfZW50cnlfY2hhbmdlZChzZWxmLCBlbnRyeSk6CisgICAgICAgIHRleHQgPSBlbnRyeS5nZXRfdGV4dCgpCisgICAgICAgIGlmIHNlbGYuaW5zLnNlYXJjaF9mb2N1czoKKyAgICAgICAgICAgIHNlbGYuaW5zLnNlYXJjaF9mb2N1cyA9IEZhbHNlCisgICAgICAgIGVsaWYgc2VsZi5pbnMucGFnZV9jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5pbnMucGFnZV9jaGFuZ2UgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorICAgICAgICBlbGlmIHRleHQgbm90IGluIHNlbGYuaW5zLnNlYXJjaF9uYW1lczoKKyAgICAgICAgICAgIHNlbGYuZmlsdGVyX3NlYXJjaChlbnRyeSkKKworICAgIGRlZiBmaWx0ZXJfc2VhcmNoKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgY3VycmVudF90YWIgPSBzZWxmLmlucy5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgZmlsdGVyID0gc2VsZi5wYWdlc1tjdXJyZW50X3RhYl1bJ2ZpbHRlciddCisgICAgICAgIGZpbHRlcltSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUVdID0gdGV4dAorICAgICAgICBzZWxmLnRhYmxlc1tjdXJyZW50X3RhYl0uc2V0X21vZGVsKHNlbGYucmVjaXBlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBzZWFyY2hfZGF0YT10ZXh0KSkKKyAgICAgICAgaWYgc2VsZi5yZWNpcGVfbW9kZWwuZmlsdGVyZWRfbmIgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXI6CisgICAgICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS5hZGRfbm9fcmVzdWx0X2JhcihlbnRyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2V0X25vX3Nob3dfYWxsKFRydWUpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuc2hvdygpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5oaWRlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnRvcF9iYXIuaGlkZSgpCisgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLnNjcm9sbC5zaG93KCkKKyAgICAgICAgaWYgZW50cnkuZ2V0X3RleHQoKSA9PSAnJzoKKyAgICAgICAgICAgIGVudHJ5LnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgVHJ1ZSkKKworICAgIGRlZiBidXR0b25fY2xpY2tfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHBhdGgsIGNvbCA9IHdpZGdldC50YWJsZV90cmVlLmdldF9jdXJzb3IoKQorICAgICAgICB0cmVlX21vZGVsID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgcGF0aCBhbmQgY29sLmdldF90aXRsZSgpICE9ICdJbmNsdWRlZCc6ICMgZWxzZSBhY3RpdmF0aW9uIGlzIGxpa2VseSBhIHJlbW92YWwKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7J3N1bW1hcnknOiAnJywgJ25hbWUnOiAnJywgJ3ZlcnNpb24nOiAnJywgJ3JldmlzaW9uJzogJycsICdiaW5iJzogJycsICdncm91cCc6ICcnLCAnbGljZW5zZSc6ICcnLCAnaG9tZXBhZ2UnOiAnJywgJ2J1Z3RyYWNrZXInOiAnJywgJ2Rlc2NyaXB0aW9uJzogJyd9CisgICAgICAgICAgICBwcm9wZXJ0aWVzWydzdW1tYXJ5J10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX1NVTU1BUlkpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWyduYW1lJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWyd2ZXJzaW9uJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX1ZFUlNJT04pCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydyZXZpc2lvbiddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9SRVZJU0lPTikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2JpbmInXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2dyb3VwJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQKQorICAgICAgICAgICAgcHJvcGVydGllc1snbGljZW5zZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydob21lcGFnZSddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9IT01FUEFHRSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2J1Z3RyYWNrZXInXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfQlVHVFJBQ0tFUikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2Rlc2NyaXB0aW9uJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0RFU0MpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19yZWNpcGVfcHJvcGVydHlfZGlhbG9nKHByb3BlcnRpZXMpCisKKyAgICBkZWYgYnVpbGRfcGFja2FnZXNfY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnJlZnJlc2hfdGFibGVzKCkKKyAgICAgICAgc2VsZi5idWlsZGVyLmJ1aWxkX3BhY2thZ2VzKCkKKworICAgIGRlZiByZWZyZXNoX3RhYmxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5pbnMucmVzZXRfZW50cnkoc2VsZi5pbnMuc2VhcmNoLCAwKQorICAgICAgICBmb3IgdGFiIGluIHNlbGYudGFibGVzOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnRhYmxlcy5pbmRleCh0YWIpCisgICAgICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2luZGV4XVsnZmlsdGVyJ10KKyAgICAgICAgICAgIHRhYi5zZXRfbW9kZWwoc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIHNlYXJjaF9kYXRhPSIiLCBpbml0aWFsPVRydWUpKQorCisgICAgZGVmIGJhY2tfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5zZXRfc2VsZWN0ZWRfaW1hZ2Uoc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbCwgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfZGVzYygpCisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2NvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLnJlZnJlc2hfdGFibGVzKCkKKworICAgIGRlZiByZWZyZXNoX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKQorICAgICAgICBfLCBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9yZWNpcGVzID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3NlbGVjdGVkX3JlY2lwZXMoKQorICAgICAgICBzZWxmLmlucy5zaG93X2luZGljYXRvcl9pY29uKCJJbmNsdWRlZCByZWNpcGVzIiwgbGVuKHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3JlY2lwZXMpKQorCisgICAgZGVmIHRvZ2dsZV9pdGVtX2lkbGVfY2Ioc2VsZiwgcGF0aCwgdmlld190cmVlLCBjZWxsLCBwYWdlbmFtZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLnJlY2lwZV9tb2RlbC5wYXRoX2luY2x1ZGVkKHBhdGgpOgorICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLCBiaW5iPSJVc2VyIFNlbGVjdGVkIiwgaW1hZ2VfY29udGVudHM9RmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUodmlld190cmVlLCBwYWdlbmFtZSkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLmV4Y2x1ZGVfaXRlbShpdGVtX3BhdGg9cGF0aCkKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX2ZhZGVvdXQodmlld190cmVlLCBjZWxsKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9zZWxlY3Rpb24oKQorICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXworICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKworICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorCisgICAgICAgIHZpZXdfbW9kZWwgPSB2aWV3X3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgdnBhdGggPSBzZWxmLnJlY2lwZV9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fdnBhdGgodmlld19tb2RlbCwgcGF0aCkKKyAgICAgICAgdmlld190cmVlLnNldF9jdXJzb3IodnBhdGgpCisKKyAgICBkZWYgdGFibGVfdG9nZ2xlZF9jYihzZWxmLCB0YWJsZSwgY2VsbCwgdmlld19wYXRoLCB0b2dnbGVkX2NvbHVtbmlkLCB2aWV3X3RyZWUsIHBhZ2VuYW1lKToKKyAgICAgICAgIyBDbGljayB0byBpbmNsdWRlIGEgcmVjaXBlCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICB2aWV3X21vZGVsID0gdmlld190cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHBhdGggPSBzZWxmLnJlY2lwZV9tb2RlbC5jb252ZXJ0X3ZwYXRoX3RvX3BhdGgodmlld19tb2RlbCwgdmlld19wYXRoKQorICAgICAgICBnbGliLmlkbGVfYWRkKHNlbGYudG9nZ2xlX2l0ZW1faWRsZV9jYiwgcGF0aCwgdmlld190cmVlLCBjZWxsLCBwYWdlbmFtZSkKKworICAgIGRlZiBwcmVfZmFkZW91dF9jaGVja291dF9pbmNsdWRlKHNlbGYsIHRyZWUsIHBhZ2VuYW1lKToKKyAgICAgICAgI2FmdGVyIHRoZSBmYWRlb3V0IHRoZSB0YWJsZSB3aWxsIGJlIHNvcnRlZCBhcyBiZWZvcmUKKyAgICAgICAgc2VsZi5zb3J0X2NvbHVtbl9pZCA9IHNlbGYucmVjaXBlX21vZGVsLnNvcnRfY29sdW1uX2lkCisgICAgICAgIHNlbGYuc29ydF9vcmRlciA9IHNlbGYucmVjaXBlX21vZGVsLnNvcnRfb3JkZXIKKworICAgICAgICAjcmVzeW5jIHRoZSBpbmNsdWRlZCBpdGVtcyB0byBhIGJhY2t1cCBmYWRlIGluY2x1ZGUgY29sdW1uCisgICAgICAgIGl0ID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGFjdGl2ZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF92YWx1ZShpdCwgc2VsZi5yZWNpcGVfbW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNldChpdCwgc2VsZi5yZWNpcGVfbW9kZWwuQ09MX0ZBREVfSU5DLCBhY3RpdmUpCisgICAgICAgICAgICBpdCA9IHNlbGYucmVjaXBlX21vZGVsLml0ZXJfbmV4dChpdCkKKyAgICAgICAgIyBDaGVjayBvdXQgYSBtb2RlbCB3aGljaCBiYXNlIG9uIHRoZSBjb2x1bW4gQ09MX0ZBREVfSU5DLAorICAgICAgICAjIGl0J3Mgc2F2ZSB0aGUgcHJldiBzdGF0ZSBvZiBjb2x1bW4gQ09MX0lOQyBiZWZvcmUgZG8gZXhjbHVkZV9pdGVtCisgICAgICAgIGZpbHRlciA9IHsgUmVjaXBlTGlzdE1vZGVsLkNPTF9GQURFX0lOQzpbVHJ1ZV0gfQorICAgICAgICBpZiBwYWdlbmFtZSA9PSAiSW5jbHVkZWQgcmVjaXBlcyI6CisgICAgICAgICAgICBmaWx0ZXJbUmVjaXBlTGlzdE1vZGVsLkNPTF9UWVBFXSA9IFsncmVjaXBlJywgJ3BhY2thZ2Vncm91cCddCisgICAgICAgIGVsaWYgcGFnZW5hbWUgPT0gIkFsbCByZWNpcGVzIjoKKyAgICAgICAgICAgIGZpbHRlcltSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEVdID0gWydyZWNpcGUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsdGVyW1JlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRV0gPSBbJ3BhY2thZ2Vncm91cCddCisKKyAgICAgICAgbmV3X21vZGVsID0gc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIGV4Y2x1ZGVkX2l0ZW1zX2FoZWFkPVRydWUpCisgICAgICAgIHRyZWUuc2V0X21vZGVsKG5ld19tb2RlbCkKKworICAgIGRlZiByZW5kZXJfZmFkZW91dChzZWxmLCB0cmVlLCBjZWxsKToKKyAgICAgICAgaWYgKG5vdCBjZWxsKSBvciAobm90IHRyZWUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRvX3JlbmRlcl9jZWxscyA9IFtdCisgICAgICAgIG1vZGVsID0gdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpdCA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwYXRoID0gbW9kZWwuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBwcmV2X2NlbGxfaXNfYWN0aXZlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBSZWNpcGVMaXN0TW9kZWwuQ09MX0ZBREVfSU5DKQorICAgICAgICAgICAgY3Vycl9jZWxsX2lzX2FjdGl2ZSA9IG1vZGVsLmdldF92YWx1ZShpdCwgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgICAgICBpZiAocHJldl9jZWxsX2lzX2FjdGl2ZSA9PSBUcnVlKSBhbmQgKGN1cnJfY2VsbF9pc19hY3RpdmUgPT0gRmFsc2UpOgorICAgICAgICAgICAgICAgIHRvX3JlbmRlcl9jZWxscy5hcHBlbmQocGF0aCkKKyAgICAgICAgICAgIGl0ID0gbW9kZWwuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIGNlbGwuZmFkZW91dCh0cmVlLCAxMDAwLCB0b19yZW5kZXJfY2VsbHMpCisKKyAgICBkZWYgYWZ0ZXJfZmFkZW91dF9jaGVja2luX2luY2x1ZGUoc2VsZiwgdGFibGUsIGN0cmwsIGNlbGwsIHRyZWUsIGZpbHRlcik6CisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNvcnRfY29sdW1uX2lkID0gc2VsZi5zb3J0X2NvbHVtbl9pZAorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5zb3J0X29yZGVyID0gc2VsZi5zb3J0X29yZGVyCisgICAgICAgIHRyZWUuc2V0X21vZGVsKHNlbGYucmVjaXBlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyKSkKKworICAgIGRlZiBzZXRfcmVjaXBlX2N1cnJfdGFiKHNlbGYsIGN1cnJfcGFnZSk6CisgICAgICAgIHNlbGYuaW5zLnNldF9jdXJyZW50X3BhZ2UoY3Vycl9wYWdlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcnVubmluZ2J1aWxkLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcnVubmluZ2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTk1NWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ydW5uaW5nYnVpbGQucHkKQEAgLTAsMCArMSw1NTEgQEAKKworIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBSb2IgQnJhZGZvcmQgPHJvYkBsaW51eC5pbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdXJsbGliCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHBhbmdvCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0LCBIb2JDZWxsUmVuZGVyZXJQaXhidWYKKworY2xhc3MgUnVubmluZ0J1aWxkTW9kZWwgKGd0ay5UcmVlU3RvcmUpOgorICAgIChDT0xfTE9HLCBDT0xfUEFDS0FHRSwgQ09MX1RBU0ssIENPTF9NRVNTQUdFLCBDT0xfSUNPTiwgQ09MX0NPTE9SLCBDT0xfTlVNX0FDVElWRSkgPSByYW5nZSg3KQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLlRyZWVTdG9yZS5fX2luaXRfXyAoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0lOVCkKKworICAgIGRlZiBmYWlsdXJlX21vZGVsX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXQpOgorICAgICAgICBjb2xvciA9IG1vZGVsLmdldChpdCwgc2VsZi5DT0xfQ09MT1IpWzBdCisgICAgICAgIGlmIG5vdCBjb2xvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBjb2xvciA9PSBIb2JDb2xvcnMuRVJST1Igb3IgY29sb3IgPT0gSG9iQ29sb3JzLldBUk5JTkc6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBmYWlsdXJlX21vZGVsKHNlbGYpOgorICAgICAgICBtb2RlbCA9IHNlbGYuZmlsdGVyX25ldygpCisgICAgICAgIG1vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi5mYWlsdXJlX21vZGVsX2ZpbHRlcikKKyAgICAgICAgcmV0dXJuIG1vZGVsCisKKyAgICBkZWYgZm9yZWFjaF9jZWxsX2Z1bmMoc2VsZiwgbW9kZWwsIHBhdGgsIGl0ZXIsIHVzcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiBtb2RlbC5nZXRfdmFsdWUoaXRlciwgc2VsZi5DT0xfSUNPTikgPT0gImd0ay1leGVjdXRlIjoKKyAgICAgICAgICAgIG1vZGVsLnNldChpdGVyLCBzZWxmLkNPTF9JQ09OLCAiIikKKworICAgIGRlZiBjbG9zZV90YXNrX3JlZnJlc2goc2VsZik6CisgICAgICAgIHNlbGYuZm9yZWFjaChzZWxmLmZvcmVhY2hfY2VsbF9mdW5jLCBOb25lKQorCitjbGFzcyBSdW5uaW5nQnVpbGQgKGdvYmplY3QuR09iamVjdCk6CisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAgICdidWlsZC1zdGFydGVkJyAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1zdWNjZWVkZWQnIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1mYWlsZWQnICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1jb21wbGV0ZScgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdidWlsZC1hYm9ydGVkJyAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICd0YXNrLXN0YXJ0ZWQnICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICAnbG9nLWVycm9yJyAgICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICAnbG9nLXdhcm5pbmcnICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICAnZGlzay1mdWxsJyAgICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpKSwKKyAgICAgICAgICAnbm8tcHJvdmlkZXInICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAgJ2xvZycgICAgICAgICAgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgIH0KKyAgICBwaWRzX3RvX3Rhc2sgPSB7fQorICAgIHRhc2tzX3RvX2l0ZXIgPSB7fQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBzZXF1ZW50aWFsPUZhbHNlKToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fIChzZWxmKQorICAgICAgICBzZWxmLm1vZGVsID0gUnVubmluZ0J1aWxkTW9kZWwoKQorICAgICAgICBzZWxmLnNlcXVlbnRpYWwgPSBzZXF1ZW50aWFsCisgICAgICAgIHNlbGYuYnVpbGRhYm9ydGVkID0gRmFsc2UKKworICAgIGRlZiByZXNldCAoc2VsZik6CisgICAgICAgIHNlbGYucGlkc190b190YXNrLmNsZWFyKCkKKyAgICAgICAgc2VsZi50YXNrc190b19pdGVyLmNsZWFyKCkKKyAgICAgICAgc2VsZi5tb2RlbC5jbGVhcigpCisKKyAgICBkZWYgaGFuZGxlX2V2ZW50IChzZWxmLCBldmVudCwgcGJhcj1Ob25lKToKKyAgICAgICAgIyBIYW5kbGUgYW4gZXZlbnQgZnJvbSB0aGUgZXZlbnQgcXVldWUsIHRoaXMgbWF5IHJlc3VsdCBpbiB1cGRhdGluZworICAgICAgICAjIHRoZSBtb2RlbCBhbmQgdGh1cyB0aGUgVUkuIE9yIGl0IG1heSBiZSB0byB0ZWxsIHVzIHRoYXQgdGhlIGJ1aWxkCisgICAgICAgICMgaGFzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSAob3Igbm90LCBhcyB0aGUgY2FzZSBtYXkgYmUuKQorCisgICAgICAgIHBhcmVudCA9IE5vbmUKKyAgICAgICAgcGlkID0gMAorICAgICAgICBwYWNrYWdlID0gTm9uZQorICAgICAgICB0YXNrID0gTm9uZQorCisgICAgICAgICMgSWYgd2UgaGF2ZSBhIHBpZCBhdHRhY2hlZCB0byB0aGlzIG1lc3NhZ2UvZXZlbnQgdHJ5IGFuZCBnZXQgdGhlCisgICAgICAgICMgKHBhY2thZ2UsIHRhc2spIHBhaXIgZm9yIGl0LiBJZiB3ZSBnZXQgdGhhdCB0aGVuIGdldCB0aGUgcGFyZW50IGl0ZXIKKyAgICAgICAgIyBmb3IgdGhlIG1lc3NhZ2UuCisgICAgICAgIGlmIGhhc2F0dHIoZXZlbnQsICdwaWQnKToKKyAgICAgICAgICAgIHBpZCA9IGV2ZW50LnBpZAorICAgICAgICBpZiBoYXNhdHRyKGV2ZW50LCAncHJvY2VzcycpOgorICAgICAgICAgICAgcGlkID0gZXZlbnQucHJvY2VzcworCisgICAgICAgIGlmIHBpZCBhbmQgcGlkIGluIHNlbGYucGlkc190b190YXNrOgorICAgICAgICAgICAgKHBhY2thZ2UsIHRhc2spID0gc2VsZi5waWRzX3RvX3Rhc2tbcGlkXQorICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0KKworICAgICAgICBpZihpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCkpOgorICAgICAgICAgICAgaWYgZXZlbnQudGFza3BpZCA9PSAwIG9yIGV2ZW50LmxldmVsbm8gPiBsb2dnaW5nLklORk86CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaGFuZGxlIiwgZXZlbnQpCisgICAgICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGEgaGFjayEgTW9yZSBpbmZvIGluIFlvY3RvICMxNDMzCisgICAgICAgICAgICAjIGh0dHA6Ly9idWd6aWxsYS5wb2t5bGludXgub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMzLCB0ZW1wb3JhcmlseQorICAgICAgICAgICAgIyBtYXNrIHRoZSBlcnJvciBtZXNzYWdlIGFzIGl0J3Mgbm90IGluZm9ybWF0aXZlIGZvciB0aGUgdXNlci4KKyAgICAgICAgICAgIGlmIGV2ZW50Lm1zZy5zdGFydHN3aXRoKCJFeGVjdXRpb24gb2YgZXZlbnQgaGFuZGxlciAncnVuX2J1aWxkc3RhdHMnIGZhaWxlZCIpOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiAoZXZlbnQubGV2ZWxubyA8IGxvZ2dpbmcuSU5GTyBvcgorICAgICAgICAgICAgICAgIGV2ZW50Lm1zZy5zdGFydHN3aXRoKCJSdW5uaW5nIHRhc2siKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICMgZG9uJ3QgYWRkIHRoZXNlIHRvIHRoZSBsaXN0CisKKyAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gbG9nZ2luZy5FUlJPUjoKKyAgICAgICAgICAgICAgICBpY29uID0gImRpYWxvZy1lcnJvciIKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5FUlJPUgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nLWVycm9yIikKKyAgICAgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLldBUk5JTkc6CisgICAgICAgICAgICAgICAgaWNvbiA9ICJkaWFsb2ctd2FybmluZyIKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5XQVJOSU5HCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ctd2FybmluZyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGljb24gPSBOb25lCisgICAgICAgICAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuT0sKKworICAgICAgICAgICAgIyBpZiB3ZSBrbm93IHdoaWNoIHBhY2thZ2Ugd2UgYmVsb25nIHRvLCB3ZSdsbCBhcHBlbmQgb250byBpdHMgbGlzdC4KKyAgICAgICAgICAgICMgb3RoZXJ3aXNlLCB3ZSdsbCBqdW1wIHRvIHRoZSB0b3Agb2YgdGhlIG1hc3RlciBsaXN0CisgICAgICAgICAgICBpZiBzZWxmLnNlcXVlbnRpYWwgb3Igbm90IHBhcmVudDoKKyAgICAgICAgICAgICAgICB0cmVlX2FkZCA9IHNlbGYubW9kZWwuYXBwZW5kCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyZWVfYWRkID0gc2VsZi5tb2RlbC5wcmVwZW5kCisgICAgICAgICAgICB0cmVlX2FkZChwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0TWVzc2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgIGljb24sCisgICAgICAgICAgICAgICAgICAgICAgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgMCkpCisKKyAgICAgICAgICAgICMgaWYgdGhlcmUgYXJlIHdhcm5pbmdzIHdoaWxlIHByb2Nlc3NpbmcgYSBwYWNrYWdlCisgICAgICAgICAgICAjICAocGFyZW50KSwgbWFyayB0aGUgdGFzayB3aXRoIHdhcm5pbmcgY29sb3I7CisgICAgICAgICAgICAjIGluIGNhc2UgdGhlcmUgYXJlIGVycm9ycywgdGhlIHVwZGF0ZXMgd2lsbCBiZQorICAgICAgICAgICAgIyAgaGFuZGxlZCBvbiBUYXNrRmFpbGVkLgorICAgICAgICAgICAgaWYgY29sb3IgPT0gSG9iQ29sb3JzLldBUk5JTkcgYW5kIHBhcmVudDoKKyAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKKyAgICAgICAgICAgICAgICBpZiB0YXNrOiAjdGhlbiB3ZSBoYXZlIGEgcGFyZW50IChwYWNrYWdlKSwgYW5kIHVwZGF0ZSBpdCdzIGNvbG9yCisgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHNlbGYudGFza3NfdG9faXRlclsocGFja2FnZSwgTm9uZSldLCBzZWxmLm1vZGVsLkNPTF9DT0xPUiwgY29sb3IpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAocGFja2FnZSwgdGFzaykgPSAoZXZlbnQuX3BhY2thZ2UsIGV2ZW50Ll90YXNrKQorCisgICAgICAgICAgICAjIFNhdmUgb3V0IHRoaXMgUElELgorICAgICAgICAgICAgc2VsZi5waWRzX3RvX3Rhc2tbcGlkXSA9IChwYWNrYWdlLCB0YXNrKQorCisgICAgICAgICAgICAjIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIHBhY2thZ2UgaW4gb3VyIG1vZGVsLiBJZiBzbyB0aGVuCisgICAgICAgICAgICAjIHRoYXQgY2FuIGJlIHRoZSBwYXJlbnQgZm9yIHRoZSB0YXNrLiBPdGhlcndpc2Ugd2UgY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAjIHRvcCBsZXZlbCBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICBpZiAoKHBhY2thZ2UsIE5vbmUpIGluIHNlbGYudGFza3NfdG9faXRlcik6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXF1ZW50aWFsOgorICAgICAgICAgICAgICAgICAgICBhZGQgPSBzZWxmLm1vZGVsLmFwcGVuZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFkZCA9IHNlbGYubW9kZWwucHJlcGVuZAorICAgICAgICAgICAgICAgIHBhcmVudCA9IGFkZChOb25lLCAoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICVzIiAlIChwYWNrYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2JDb2xvcnMuT0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIE5vbmUpXSA9IHBhcmVudAorCisgICAgICAgICAgICAjIEJlY2F1c2UgdGhpcyBwYXJlbnQgcGFja2FnZSBub3cgaGFzIGFuIGFjdGl2ZSBjaGlsZCBtYXJrIGl0IGFzCisgICAgICAgICAgICAjIHN1Y2guCisgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0lDT04sICJndGstZXhlY3V0ZSIpCisgICAgICAgICAgICBwYXJlbnRfY29sb3IgPSBzZWxmLm1vZGVsLmdldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SKVswXQorICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yICE9IEhvYkNvbG9ycy5FUlJPUiBhbmQgcGFyZW50X2NvbG9yICE9IEhvYkNvbG9ycy5XQVJOSU5HOgorICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5SVU5OSU5HKQorCisgICAgICAgICAgICAjIEFkZCBhbiBlbnRyeSBpbiB0aGUgbW9kZWwgZm9yIHRoaXMgdGFzaworICAgICAgICAgICAgaSA9IHNlbGYubW9kZWwuYXBwZW5kIChwYXJlbnQsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFzazogJXMiICUgKHRhc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3RrLWV4ZWN1dGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2JDb2xvcnMuUlVOTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpCisKKyAgICAgICAgICAgICMgdXBkYXRlIHRoZSBwYXJlbnQncyBhY3RpdmUgdGFzayBjb3VudAorICAgICAgICAgICAgbnVtX2FjdGl2ZSA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSlbMF0gKyAxCisgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX05VTV9BQ1RJVkUsIG51bV9hY3RpdmUpCisKKyAgICAgICAgICAgICMgU2F2ZSBvdXQgdGhlIGl0ZXIgc28gdGhhdCB3ZSBjYW4gZmluZCBpdCB3aGVuIHdlIGhhdmUgYSBtZXNzYWdlCisgICAgICAgICAgICAjIHRoYXQgd2UgbmVlZCB0byBhdHRhY2ggdG8gYSB0YXNrLgorICAgICAgICAgICAgc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0gPSBpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrQmFzZSk6CisgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgZXZlbnQuX21lc3NhZ2UpCisgICAgICAgICAgICBjdXJyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0KKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYudGFza3NfdG9faXRlclsocGFja2FnZSwgTm9uZSldCisKKyAgICAgICAgICAgICMgcmVtb3ZlIHRoaXMgdGFzayBmcm9tIHRoZSBwYXJlbnQncyBhY3RpdmUgY291bnQKKyAgICAgICAgICAgIG51bV9hY3RpdmUgPSBzZWxmLm1vZGVsLmdldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX05VTV9BQ1RJVkUpWzBdIC0gMQorICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9OVU1fQUNUSVZFLCBudW1fYWN0aXZlKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhlIHRhc2sgYW5kIHBhcmVudCBhcyBmYWlsZWQKKyAgICAgICAgICAgICAgICBpY29uID0gImRpYWxvZy1lcnJvciIKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5FUlJPUgorCisgICAgICAgICAgICAgICAgbG9nZmlsZSA9IGV2ZW50LmxvZ2ZpbGUKKyAgICAgICAgICAgICAgICBpZiBsb2dmaWxlIGFuZCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuYXBwZW5kKGN1cnJlbnQsICgncGFzdGViaW4nLCBOb25lLCBOb25lLCBsb2dkYXRhLCAnZ3RrLWVycm9yJywgSG9iQ29sb3JzLk9LLCAwKSkKKworICAgICAgICAgICAgICAgIGZvciBpIGluIChjdXJyZW50LCBwYXJlbnQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChpLCBzZWxmLm1vZGVsLkNPTF9JQ09OLCBpY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLkNPTF9DT0xPUiwgY29sb3IpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTWFyayB0aGUgcGFyZW50IHBhY2thZ2UgYW5kIHRoZSB0YXNrIGFzIGluYWN0aXZlLAorICAgICAgICAgICAgICAgICMgYnV0IG1ha2Ugc3VyZSB0byBwcmVzZXJ2ZSBlcnJvciwgd2FybmluZ3MgYW5kIGFjdGl2ZQorICAgICAgICAgICAgICAgICMgc3RhdGVzCisgICAgICAgICAgICAgICAgcGFyZW50X2NvbG9yID0gc2VsZi5tb2RlbC5nZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUilbMF0KKyAgICAgICAgICAgICAgICB0YXNrX2NvbG9yID0gc2VsZi5tb2RlbC5nZXQoY3VycmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IpWzBdCisKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhlIHRhc2sgYXMgaW5hY3RpdmUKKyAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHRhc2tfY29sb3IgIT0gSG9iQ29sb3JzLkVSUk9SOgorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrX2NvbG9yID09IEhvYkNvbG9ycy5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoY3VycmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgJ2RpYWxvZy13YXJuaW5nJykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGN1cnJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBIb2JDb2xvcnMuT0spCisKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhlIHBhcmVudCBhcyBpbmFjdGl2ZQorICAgICAgICAgICAgICAgIGlmIHBhcmVudF9jb2xvciAhPSBIb2JDb2xvcnMuRVJST1I6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmVudF9jb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgImRpYWxvZy13YXJuaW5nIikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bV9hY3RpdmUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBIb2JDb2xvcnMuT0spCisKKyAgICAgICAgICAgICMgQ2xlYXIgdGhlIGl0ZXJzIGFuZCB0aGUgcGlkcyBzaW5jZSB3aGVuIHRoZSB0YXNrIGdvZXMgYXdheSB0aGUKKyAgICAgICAgICAgICMgcGlkIHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQgZm9yIG1lc3NhZ2VzCisgICAgICAgICAgICBkZWwgc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCB0YXNrKV0KKyAgICAgICAgICAgIGRlbCBzZWxmLnBpZHNfdG9fdGFza1twaWRdCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQpOgorCisgICAgICAgICAgICBzZWxmLmVtaXQoImJ1aWxkLXN0YXJ0ZWQiKQorICAgICAgICAgICAgc2VsZi5tb2RlbC5wcmVwZW5kKE5vbmUsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVpbGQgU3RhcnRlZCAoJXMpIiAlIHRpbWUuc3RyZnRpbWUoJyVtLyVkLyVZICVIOiVNOiVTJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5PSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpCisgICAgICAgICAgICBpZiBwYmFyOgorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKDAsIHNlbGYucHJvZ3Jlc3NfdG90YWwpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfdGl0bGUoYmIuZXZlbnQuZ2V0TmFtZShldmVudCkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CisgICAgICAgICAgICBmYWlsdXJlcyA9IGludCAoZXZlbnQuX2ZhaWx1cmVzKQorICAgICAgICAgICAgc2VsZi5tb2RlbC5wcmVwZW5kKE5vbmUsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVpbGQgQ29tcGxldGVkICglcykiICUgdGltZS5zdHJmdGltZSgnJW0vJWQvJVkgJUg6JU06JVMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9iQ29sb3JzLk9LLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKworICAgICAgICAgICAgIyBFbWl0IHRoZSBhcHByb3ByaWF0ZSBzaWduYWwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgZmFpbHVyZXMKKyAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRhYm9ydGVkOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCAoImJ1aWxkLWFib3J0ZWQiKQorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRhYm9ydGVkID0gRmFsc2UKKyAgICAgICAgICAgIGVsaWYgKGZhaWx1cmVzID49IDEpOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCAoImJ1aWxkLWZhaWxlZCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCAoImJ1aWxkLXN1Y2NlZWRlZCIpCisgICAgICAgICAgICAjIEVtaXQgYSBnZW5lcmljICJidWlsZC1jb21wbGV0ZSIgc2lnbmFsIGZvciB0aGluZ3Mgd2lzaGluZyB0bworICAgICAgICAgICAgIyBoYW5kbGUgd2hlbiB0aGUgYnVpbGQgaXMgZmluaXNoZWQKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtY29tcGxldGUiKQorICAgICAgICAgICAgIyByZXNldCB0aGUgYWxsIGNlbGwncyBpY29uIGluZGljYXRvcgorICAgICAgICAgICAgc2VsZi5tb2RlbC5jbG9zZV90YXNrX3JlZnJlc2goKQorICAgICAgICAgICAgaWYgcGJhcjoKKyAgICAgICAgICAgICAgICBwYmFyLnNldF90ZXh0KGV2ZW50Lm1zZykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRpc2tGdWxsKToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRhYm9ydGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5lbWl0KCJkaXNrLWZ1bGwiKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImVycm9yIiwgIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiICUgKGV2ZW50LmVycm9yKSkKKyAgICAgICAgICAgIGlmIGV2ZW50LmVycm9yLnN0YXJ0c3dpdGgoIkV4aXRlZCB3aXRoIik6CisgICAgICAgICAgICAgICAgIyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGFuIGV4aXQgY29kZSB3ZSdyZSBkb25lLCBlbWl0IHRoZQorICAgICAgICAgICAgICAgICMgZ2VuZXJpYyBzaWduYWwgZm9yIHRoZSBVSSB0byBub3RpZnkgdGhlIHVzZXIKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImJ1aWxkLWNvbXBsZXRlIikKKyAgICAgICAgICAgICAgICAjIHJlc2V0IHRoZSBhbGwgY2VsbCdzIGljb24gaW5kaWNhdG9yCisgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5jbG9zZV90YXNrX3JlZnJlc2goKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCkgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLnNldF90aXRsZSgiTG9hZGluZyBjYWNoZSIpCisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgIHBiYXIudXBkYXRlKDAsIHNlbGYucHJvZ3Jlc3NfdG90YWwpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci51cGRhdGUoZXZlbnQuY3VycmVudCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci51cGRhdGUoc2VsZi5wcm9ncmVzc190b3RhbCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgICAgIHBiYXIuaGlkZSgpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKSBhbmQgcGJhcjoKKyAgICAgICAgICAgIGlmIGV2ZW50LnRvdGFsID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYmFyLnNldF90aXRsZSgiUHJvY2Vzc2luZyByZWNpcGVzIikKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKSBhbmQgcGJhcjoKKyAgICAgICAgICAgIHBiYXIudXBkYXRlKGV2ZW50LmN1cnJlbnQsIHNlbGYucHJvZ3Jlc3NfdG90YWwpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci5oaWRlKCkKKyAgICAgICAgI3VzaW5nIHJ1bnF1ZXVlIGV2ZW50cyBhcyBtYW55IGFzIHBvc3NpYmxlIHRvIHVwZGF0ZSB0aGUgcHJvZ3Jlc3MgYmFyCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImVycm9yIiwgIlRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyIgJSAoZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAid2FybiIsICJTZXRzY2VuZSB0YXNrICVzICglcykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICclcycgLSByZWFsIHRhc2sgd2lsbCBiZSBydW4gaW5zdGVhZCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV2ZW50LnRhc2tpZCwgZXZlbnQudGFza3N0cmluZywgZXZlbnQuZXhpdGNvZGUpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQpKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaW5mbyIsICJSdW5uaW5nIHNldHNjZW5lIHRhc2sgJWQgb2YgJWQgKCVzKSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMudG90YWwsIGV2ZW50LnRhc2tzdHJpbmcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5ub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ25vZXhlYyB0YXNrJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ3Rhc2snCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaW5mbyIsICJSdW5uaW5nICVzICVzIG9mICVzIChJRDogJXMsICVzKSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXNrdHlwZSwgZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuYWN0aXZlICsgZXZlbnQuc3RhdHMuZmFpbGVkICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRzLnRvdGFsLCBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcpKQorICAgICAgICAgICAgbWVzc2FnZSA9IHt9CisgICAgICAgICAgICBtZXNzYWdlWyJldmVudG5hbWUiXSA9IGJiLmV2ZW50LmdldE5hbWUoZXZlbnQpCisgICAgICAgICAgICBudW1fb2ZfY29tcGxldGVkID0gZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuZmFpbGVkCisgICAgICAgICAgICBtZXNzYWdlWyJjdXJyZW50Il0gPSBudW1fb2ZfY29tcGxldGVkCisgICAgICAgICAgICBtZXNzYWdlWyJ0b3RhbCJdID0gZXZlbnQuc3RhdHMudG90YWwKKyAgICAgICAgICAgIG1lc3NhZ2VbInRpdGxlIl0gPSAiIgorICAgICAgICAgICAgbWVzc2FnZVsidGFzayJdID0gZXZlbnQudGFza3N0cmluZworICAgICAgICAgICAgc2VsZi5lbWl0KCJ0YXNrLXN0YXJ0ZWQiLCBtZXNzYWdlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCAibXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgZm9yICVzJXMgKCVzKSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV2ZW50Ll9pc19ydW50aW1lIGFuZCAicnVudGltZSAiIG9yICIiLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9jYW5kaWRhdGVzKSkpCisgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgImNvbnNpZGVyIGRlZmluaW5nIGEgUFJFRkVSUkVEX1BST1ZJREVSIGVudHJ5IHRvIG1hdGNoICVzIiAlIChldmVudC5faXRlbSkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICBtc2cgPSAiIgorICAgICAgICAgICAgaWYgZXZlbnQuX3J1bnRpbWU6CisgICAgICAgICAgICAgICAgciA9ICJSIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByID0gIiIKKworICAgICAgICAgICAgZXh0cmEgPSAnJworICAgICAgICAgICAgaWYgbm90IGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9jbG9zZV9tYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIuIENsb3NlIG1hdGNoZXM6XG4gICVzIiAlICdcbiAgJy5qb2luKGV2ZW50Ll9jbG9zZV9tYXRjaGVzKQorCisgICAgICAgICAgICBpZiBldmVudC5fZGVwZW5kZWVzOgorICAgICAgICAgICAgICAgIG1zZyA9ICJOb3RoaW5nICVzUFJPVklERVMgJyVzJyAoYnV0ICVzICVzREVQRU5EUyBvbiBvciBvdGhlcndpc2UgcmVxdWlyZXMgaXQpJXNcbiIgJSAociwgZXZlbnQuX2l0ZW0sICIsICIuam9pbihldmVudC5fZGVwZW5kZWVzKSwgciwgZXh0cmEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJOb3RoaW5nICVzUFJPVklERVMgJyVzJyVzXG4iICUgKHIsIGV2ZW50Ll9pdGVtLCBleHRyYSkKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgIGZvciByZWFzb24gaW4gZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAoIiVzXG4iICUgcmVhc29uKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJuby1wcm92aWRlciIsIG1zZykKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImVycm9yIiwgbXNnKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkxvZ0V4ZWNUVFkpOgorICAgICAgICAgICAgaWNvbiA9ICJkaWFsb2ctd2FybmluZyIKKyAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLldBUk5JTkcKKyAgICAgICAgICAgIGlmIHNlbGYuc2VxdWVudGlhbCBvciBub3QgcGFyZW50OgorICAgICAgICAgICAgICAgIHRyZWVfYWRkID0gc2VsZi5tb2RlbC5hcHBlbmQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLnByZXBlbmQKKyAgICAgICAgICAgIHRyZWVfYWRkKHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICBldmVudC5tc2csCisgICAgICAgICAgICAgICAgICAgICAgaWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAwKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5TdGFtcFVwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ29uZmlnUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5SZWNpcGVQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25TdGFydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25Db21wbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblByb2dyZXNzKSk6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiVW5rbm93biBldmVudDogJXMiICUgKGV2ZW50LmVycm9yIGlmIGhhc2F0dHIoZXZlbnQsICdlcnJvcicpIGVsc2UgJ2Vycm9yJykpCisKKyAgICAgICAgcmV0dXJuCisKKworZGVmIGRvX3Bhc3RlYmluKHRleHQpOgorICAgIHVybCA9ICdodHRwOi8vcGFzdGViaW4uY29tL2FwaV9wdWJsaWMucGhwJworICAgIHBhcmFtcyA9IHsncGFzdGVfY29kZSc6IHRleHQsICdwYXN0ZV9mb3JtYXQnOiAndGV4dCd9CisKKyAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsLCB1cmxsaWIudXJsZW5jb2RlKHBhcmFtcykpCisgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4ocmVxKQorICAgIHBhc3RlX3VybCA9IHJlc3BvbnNlLnJlYWQoKQorCisgICAgcmV0dXJuIHBhc3RlX3VybAorCisKK2NsYXNzIFJ1bm5pbmdCdWlsZFRyZWVWaWV3IChndGsuVHJlZVZpZXcpOgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgImJ1dHRvbl9wcmVzc19ldmVudCIgOiAib3ZlcnJpZGUiCisgICAgICAgIH0KKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHJlYWRvbmx5PUZhbHNlLCBob2I9RmFsc2UpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18gKHNlbGYpCisgICAgICAgIHNlbGYucmVhZG9ubHkgPSByZWFkb25seQorCisgICAgICAgICMgVGhlIGljb24gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBidWlsZGluZyBvciBmYWlsZWQuCisgICAgICAgICMgYWRkICdob2InIGZsYWcgYmVjYXVzZSB0aGVyZSBoYXMgbm90IG9ubHkgaG9iIHRvIHNoYXJlIHRoaXMgY29kZQorICAgICAgICBpZiBob2I6CisgICAgICAgICAgICByZW5kZXJlciA9IEhvYkNlbGxSZW5kZXJlclBpeGJ1ZiAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVuZGVyZXIgPSBndGsuQ2VsbFJlbmRlcmVyUGl4YnVmKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiU3RhdHVzIiwgcmVuZGVyZXIpCisgICAgICAgIGNvbC5hZGRfYXR0cmlidXRlIChyZW5kZXJlciwgImljb24tbmFtZSIsIDQpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgVGhlIG1lc3NhZ2Ugb2YgdGhlIGJ1aWxkLgorICAgICAgICAjIGFkZCAnaG9iJyBmbGFnIGJlY2F1c2UgdGhlcmUgaGFzIG5vdCBvbmx5IGhvYiB0byBzaGFyZSB0aGlzIGNvZGUKKyAgICAgICAgaWYgaG9iOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3JlbmRlcmVyID0gSG9iV2FycENlbGxSZW5kZXJlclRleHQgKGNvbF9udW1iZXI9MSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZV9yZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIHNlbGYubWVzc2FnZV9jb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJNZXNzYWdlIiwgc2VsZi5tZXNzYWdlX3JlbmRlcmVyLCB0ZXh0PTMpCisgICAgICAgIHNlbGYubWVzc2FnZV9jb2x1bW4uYWRkX2F0dHJpYnV0ZShzZWxmLm1lc3NhZ2VfcmVuZGVyZXIsICdiYWNrZ3JvdW5kJywgNSkKKyAgICAgICAgc2VsZi5tZXNzYWdlX3JlbmRlcmVyLnNldF9wcm9wZXJ0eSgnZWRpdGFibGUnLCAobm90IHNlbGYucmVhZG9ubHkpKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKHNlbGYubWVzc2FnZV9jb2x1bW4pCisKKyAgICBkZWYgZG9fYnV0dG9uX3ByZXNzX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgZ3RrLlRyZWVWaWV3LmRvX2J1dHRvbl9wcmVzc19ldmVudChzZWxmLCBldmVudCkKKworICAgICAgICBpZiBldmVudC5idXR0b24gPT0gMzoKKyAgICAgICAgICAgIHNlbGVjdGlvbiA9IHN1cGVyKFJ1bm5pbmdCdWlsZFRyZWVWaWV3LCBzZWxmKS5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgICAgIChtb2RlbCwgaXQpID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgICAgICBpZiBpdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYW5fcGFzdGUgPSBtb2RlbC5nZXQoaXQsIG1vZGVsLkNPTF9MT0cpWzBdCisgICAgICAgICAgICAgICAgaWYgY2FuX3Bhc3RlID09ICdwYXN0ZWJpbic6CisgICAgICAgICAgICAgICAgICAgICMgYnVpbGQgYSBzaW1wbGUgbWVudSB3aXRoIGEgcGFzdGViaW4gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgIG1lbnUgPSBndGsuTWVudSgpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtID0gZ3RrLk1lbnVJdGVtKCJDb3B5IikKKyAgICAgICAgICAgICAgICAgICAgbWVudS5hcHBlbmQobWVudWl0ZW0pCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLmNvbm5lY3QoImFjdGl2YXRlIiwgc2VsZi5jbGlwYm9hcmRfaGFuZGxlciwgKG1vZGVsLCBpdCkpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLnNob3coKQorICAgICAgICAgICAgICAgICAgICBtZW51aXRlbSA9IGd0ay5NZW51SXRlbSgiU2VuZCBsb2cgdG8gcGFzdGViaW4iKQorICAgICAgICAgICAgICAgICAgICBtZW51LmFwcGVuZChtZW51aXRlbSkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY29ubmVjdCgiYWN0aXZhdGUiLCBzZWxmLnBhc3RlYmluX2hhbmRsZXIsIChtb2RlbCwgaXQpKQorICAgICAgICAgICAgICAgICAgICBtZW51aXRlbS5zaG93KCkKKyAgICAgICAgICAgICAgICAgICAgbWVudS5zaG93KCkKKyAgICAgICAgICAgICAgICAgICAgbWVudS5wb3B1cChOb25lLCBOb25lLCBOb25lLCBldmVudC5idXR0b24sIGV2ZW50LnRpbWUpCisKKyAgICBkZWYgX2FkZF90b19jbGlwYm9hcmQoc2VsZiwgY2xpcHBpbmcpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRoZSBjb250ZW50cyBvZiBjbGlwcGluZyB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsaXBib2FyZCA9IGd0ay5jbGlwYm9hcmRfZ2V0KCkKKyAgICAgICAgY2xpcGJvYXJkLnNldF90ZXh0KGNsaXBwaW5nKQorICAgICAgICBjbGlwYm9hcmQuc3RvcmUoKQorCisgICAgZGVmIHBhc3RlYmluX2hhbmRsZXIoc2VsZiwgd2lkZ2V0LCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlbmQgdGhlIGxvZyBkYXRhIHRvIHBhc3RlYmluLCB0aGVuIGFkZCB0aGUgbmV3IHBhc3RlIHVybCB0byB0aGUKKyAgICAgICAgY2xpcGJvYXJkLgorICAgICAgICAiIiIKKyAgICAgICAgKG1vZGVsLCBpdCkgPSBkYXRhCisgICAgICAgIHBhc3RlX3VybCA9IGRvX3Bhc3RlYmluKG1vZGVsLmdldChpdCwgbW9kZWwuQ09MX01FU1NBR0UpWzBdKQorCisgICAgICAgICMgQHRvZG8gUHJvdmlkZSB2aXN1YWwgZmVlZGJhY2sgdG8gdGhlIHVzZXIgdGhhdCBpdCBpcyBkb25lIGFuZCB0aGF0CisgICAgICAgICMgaXQgd29ya2VkLgorICAgICAgICBwcmludCBwYXN0ZV91cmwKKworICAgICAgICBzZWxmLl9hZGRfdG9fY2xpcGJvYXJkKHBhc3RlX3VybCkKKworICAgIGRlZiBjbGlwYm9hcmRfaGFuZGxlcihzZWxmLCB3aWRnZXQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgIiIiCisgICAgICAgIChtb2RlbCwgaXQpID0gZGF0YQorICAgICAgICBtZXNzYWdlID0gbW9kZWwuZ2V0KGl0LCBtb2RlbC5DT0xfTUVTU0FHRSlbMF0KKworICAgICAgICBzZWxmLl9hZGRfdG9fY2xpcGJvYXJkKG1lc3NhZ2UpCisKK2NsYXNzIEJ1aWxkRmFpbHVyZVRyZWVWaWV3KGd0ay5UcmVlVmlldyk6CisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcnVsZXNfaGludChGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfaGVhZGVyc192aXNpYmxlKEZhbHNlKQorICAgICAgICBzZWxmLmdldF9zZWxlY3Rpb24oKS5zZXRfbW9kZShndGsuU0VMRUNUSU9OX1NJTkdMRSkKKworICAgICAgICAjIFRoZSBpY29uIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UncmUgYnVpbGRpbmcgb3IgZmFpbGVkLgorICAgICAgICByZW5kZXJlciA9IEhvYkNlbGxSZW5kZXJlclBpeGJ1ZiAoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJTdGF0dXMiLCByZW5kZXJlcikKKyAgICAgICAgY29sLmFkZF9hdHRyaWJ1dGUgKHJlbmRlcmVyLCAiaWNvbi1uYW1lIiwgUnVubmluZ0J1aWxkTW9kZWwuQ09MX0lDT04pCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgVGhlIG1lc3NhZ2Ugb2YgdGhlIGJ1aWxkLgorICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIgPSBIb2JXYXJwQ2VsbFJlbmRlcmVyVGV4dCAoY29sX251bWJlcj0xKQorICAgICAgICBzZWxmLm1lc3NhZ2VfY29sdW1uID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiTWVzc2FnZSIsIHNlbGYubWVzc2FnZV9yZW5kZXJlciwgdGV4dD1SdW5uaW5nQnVpbGRNb2RlbC5DT0xfTUVTU0FHRSwgYmFja2dyb3VuZD1SdW5uaW5nQnVpbGRNb2RlbC5DT0xfQ09MT1IpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoc2VsZi5tZXNzYWdlX2NvbHVtbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Nhbml0eWNoZWNrcGFnZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Nhbml0eWNoZWNrcGFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmNlMmVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvc2FuaXR5Y2hlY2twYWdlLnB5CkBAIC0wLDAgKzEsODUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBCb2dkYW4gTWFyaW5lc2N1IDxib2dkYW4uYS5tYXJpbmVzY3VAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aywgZ29iamVjdAorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYworZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKKworIworIyBTYW5pdHlDaGVja1BhZ2UKKyMKK2NsYXNzIFNhbml0eUNoZWNrUGFnZSAoSG9iUGFnZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKFNhbml0eUNoZWNrUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlcikKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgbWFrZV9sYWJlbChzZWxmLCB0ZXh0LCBib2xkPVRydWUpOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmsgPSAiPHNwYW4gJXM+JXM8L3NwYW4+IiAlIChzZWxmLnNwYW5fdGFnKCd4LWxhcmdlJywgJ2JvbGQnKSBpZiBib2xkIGVsc2Ugc2VsZi5zcGFuX3RhZygnbWVkaXVtJyksIHRleHQpCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAobWFyaykKKyAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgIGdvYmplY3QudGltZW91dF9hZGQoMTAwLCBzZWxmLnRpbWVyX2Z1bmMpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5uaW5nCisKKyAgICBkZWYgdGltZXJfZnVuYyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucHVsc2UoKQorICAgICAgICByZXR1cm4gc2VsZi5ydW5uaW5nCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIyBUYWJsZSdkIGxheW91dC4gJ3Jvd3MnIGFuZCAnY29scycgZ2l2ZSB0aGUgdGFibGUgc2l6ZQorICAgICAgICByb3dzLCBjb2xzID0gMzAsIDUwCisgICAgICAgIHNlbGYudGFibGUgPSBndGsuVGFibGUocm93cywgY29scywgVHJ1ZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYudGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3gsIHN5ID0gMiwgMgorICAgICAgICAjICdpbmZvJyBpY29uCisgICAgICAgIGltYWdlID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaW1hZ2Uuc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0RJU1BMQVlfRklMRSkKKyAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goaW1hZ2UsIHN4LCBzeCArIDIsIHN5LCBzeSArIDMgKQorICAgICAgICBpbWFnZS5zaG93KCkKKyAgICAgICAgIyAnQ2hlY2tpbmcnIG1lc3NhZ2UKKyAgICAgICAgbGFiZWwgPSBzZWxmLm1ha2VfbGFiZWwoJ0hvYiBpcyBjaGVja2luZyBmb3IgY29ycmVjdCBidWlsZCBzeXN0ZW0gc2V0dXAnKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChsYWJlbCwgc3ggKyAyLCBjb2xzLCBzeSwgc3kgKyAzLCB4cGFkZGluZz01ICkKKyAgICAgICAgbGFiZWwuc2hvdygpCisgICAgICAgICMgJ1Nob3VsZG4ndCB0YWtlIGxvbmcnIG1lc3NhZ2UuCisgICAgICAgIGxhYmVsID0gc2VsZi5tYWtlX2xhYmVsKCJUaGUgY2hlY2sgc2hvdWxkbid0IHRha2UgbG9uZy4iLCBGYWxzZSkKKyAgICAgICAgc2VsZi50YWJsZS5hdHRhY2gobGFiZWwsIHN4ICsgMiwgY29scywgc3kgKyAzLCBzeSArIDQsIHhwYWRkaW5nPTUpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICAjIFByb2dyZXNzIGJhcgorICAgICAgICBzZWxmLnByb2dyZXNzX2JhciA9IEhvYlByb2dyZXNzQmFyKCkKKyAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5wcm9ncmVzc19iYXIsIHN4ICsgMiwgY29scyAtIDMsIHN5ICsgNSwgc3kgKyA3LCB4cGFkZGluZz01KQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zaG93KCkKKyAgICAgICAgIyBBbGwgZG9uZQorICAgICAgICBzZWxmLnRhYmxlLnNob3coKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTg2NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weQpAQCAtMCwwICsxLDM0IEBACisjCisjIEJpdEJha2UgVUkgVXRpbHMgCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBUaGlzIHV0aWxpdHkgbWV0aG9kIGxvb2tzIGZvciB4dGVybSBvciB2dGUgYW5kIHJldHVybiB0aGUgCisjIGZyaXN0IHRvIGV4aXN0LCBjdXJyZW50bHkgd2UgYXJlIGtlZXBpbmcgdGhpcyBzaW1wbGUsIGJ1dCAKKyMgd2Ugd2lsbCBsaWtlbHkgbW92ZSB0aGUgb2UudGVybWluYWwgaW1wbGVtZW50YXRpb24gaW50byAKKyMgYml0YmFrZSB3aGljaCB3aWxsIGFsbG93IG1vcmUgZmxleGliaWxpdHkuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCisKK2RlZiB3aGljaF90ZXJtaW5hbCgpOgorICAgIHRlcm0gPSBiYi51dGlscy53aGljaChvcy5lbnZpcm9uWyJQQVRIIl0sICJ4dGVybSIpCisgICAgaWYgdGVybToKKyAgICAgICAgcmV0dXJuIHRlcm0gKyAiIC1lICIKKyAgICB0ZXJtID0gYmIudXRpbHMud2hpY2gob3MuZW52aXJvblsiUEFUSCJdLCAidnRlIikKKyAgICBpZiB0ZXJtOgorICAgICAgICByZXR1cm4gdGVybSArICIgLWMgIgorICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2RlcGV4cC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZGVwZXhwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGFhZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2RlcGV4cC5weQpAQCAtMCwwICsxLDMzMyBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgYmFzZWQgRGVwZW5kZW5jeSBFeHBsb3JlcgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgICAgICAgIFJvc3MgQnVydG9uCisjIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDggUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB4bWxycGNsaWIKK2ltcG9ydCBiYgoraW1wb3J0IGJiLmV2ZW50Citmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKKworIyBQYWNrYWdlIE1vZGVsCisoQ09MX1BLR19OQU1FKSA9ICgwKQorCisjIERlcGVuZGVuY3kgTW9kZWwKKyhUWVBFX0RFUCwgVFlQRV9SREVQKSA9ICgwLCAxKQorKENPTF9ERVBfVFlQRSwgQ09MX0RFUF9QQVJFTlQsIENPTF9ERVBfUEFDS0FHRSkgPSAoMCwgMSwgMikKKworCitjbGFzcyBQYWNrYWdlRGVwVmlldyhndGsuVHJlZVZpZXcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgZGVwX3R5cGUsIGxhYmVsKToKKyAgICAgICAgZ3RrLlRyZWVWaWV3Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY3VycmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5kZXBfdHlwZSA9IGRlcF90eXBlCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsID0gbW9kZWwuZmlsdGVyX25ldygpCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi5fZmlsdGVyKQorICAgICAgICBzZWxmLnNldF9tb2RlbChzZWxmLmZpbHRlcl9tb2RlbCkKKyAgICAgICAgI3NlbGYuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYub25fcGFja2FnZV9hY3RpdmF0ZWQsIENPTF9ERVBfUEFDS0FHRSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uKGd0ay5UcmVlVmlld0NvbHVtbihsYWJlbCwgZ3RrLkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD1DT0xfREVQX1BBQ0tBR0UpKQorCisgICAgZGVmIF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0ZXIpOgorICAgICAgICAodGhpc190eXBlLCBwYWNrYWdlKSA9IG1vZGVsLmdldChpdGVyLCBDT0xfREVQX1RZUEUsIENPTF9ERVBfUEFSRU5UKQorICAgICAgICBpZiB0aGlzX3R5cGUgIT0gc2VsZi5kZXBfdHlwZTogcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBwYWNrYWdlID09IHNlbGYuY3VycmVudAorCisgICAgZGVmIHNldF9jdXJyZW50X3BhY2thZ2Uoc2VsZiwgcGFja2FnZSk6CisgICAgICAgIHNlbGYuY3VycmVudCA9IHBhY2thZ2UKKyAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwucmVmaWx0ZXIoKQorCisKK2NsYXNzIFBhY2thZ2VSZXZlcnNlRGVwVmlldyhndGsuVHJlZVZpZXcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgbGFiZWwpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbCA9IG1vZGVsLmZpbHRlcl9uZXcoKQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5zZXRfdmlzaWJsZV9mdW5jKHNlbGYuX2ZpbHRlcikKKyAgICAgICAgc2VsZi5zZXRfbW9kZWwoc2VsZi5maWx0ZXJfbW9kZWwpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbihndGsuVHJlZVZpZXdDb2x1bW4obGFiZWwsIGd0ay5DZWxsUmVuZGVyZXJUZXh0KCksIHRleHQ9Q09MX0RFUF9QQVJFTlQpKQorCisgICAgZGVmIF9maWx0ZXIoc2VsZiwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBwYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIENPTF9ERVBfUEFDS0FHRSkKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UgPT0gc2VsZi5jdXJyZW50CisKKyAgICBkZWYgc2V0X2N1cnJlbnRfcGFja2FnZShzZWxmLCBwYWNrYWdlKToKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gcGFja2FnZQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5yZWZpbHRlcigpCisKKworY2xhc3MgRGVwRXhwbG9yZXIoZ3RrLldpbmRvdyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3RpdGxlKCJEZXBlbmRlbmN5IEV4cGxvcmVyIikKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKDUwMCwgNTAwKQorICAgICAgICBzZWxmLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIGRhdGEgbW9kZWxzCisgICAgICAgIHNlbGYucGtnX21vZGVsID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLnBrZ19tb2RlbC5zZXRfc29ydF9jb2x1bW5faWQoQ09MX1BLR19OQU1FLCBndGsuU09SVF9BU0NFTkRJTkcpCisgICAgICAgIHNlbGYuZGVwZW5kc19tb2RlbCA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX0lOVCwgZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsLnNldF9zb3J0X2NvbHVtbl9pZChDT0xfREVQX1BBQ0tBR0UsIGd0ay5TT1JUX0FTQ0VORElORykKKworICAgICAgICBwYW5lID0gZ3RrLkhQYW5lZCgpCisgICAgICAgIHBhbmUuc2V0X3Bvc2l0aW9uKDI1MCkKKyAgICAgICAgc2VsZi5hZGQocGFuZSkKKworICAgICAgICAjIFRoZSBtYXN0ZXIgbGlzdCBvZiBwYWNrYWdlcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKworICAgICAgICBzZWxmLnBrZ190cmVldmlldyA9IGd0ay5UcmVlVmlldyhzZWxmLnBrZ19tb2RlbCkKKyAgICAgICAgc2VsZi5wa2dfdHJlZXZpZXcuZ2V0X3NlbGVjdGlvbigpLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLm9uX2N1cnNvcl9jaGFuZ2VkKQorICAgICAgICBjb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4oIlBhY2thZ2UiLCBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpLCB0ZXh0PUNPTF9QS0dfTkFNRSkKKyAgICAgICAgc2VsZi5wa2dfdHJlZXZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisgICAgICAgIHBhbmUuYWRkMShzY3JvbGxlZCkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYucGtnX3RyZWV2aWV3KQorCisgICAgICAgIGJveCA9IGd0ay5WQm94KGhvbW9nZW5lb3VzPVRydWUsIHNwYWNpbmc9NCkKKworICAgICAgICAjIFJ1bnRpbWUgRGVwZW5kcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5yZGVwX3RyZWV2aWV3ID0gUGFja2FnZURlcFZpZXcoc2VsZi5kZXBlbmRzX21vZGVsLCBUWVBFX1JERVAsICJSdW50aW1lIERlcGVuZHMiKQorICAgICAgICBzZWxmLnJkZXBfdHJlZXZpZXcuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYub25fcGFja2FnZV9hY3RpdmF0ZWQsIENPTF9ERVBfUEFDS0FHRSkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYucmRlcF90cmVldmlldykKKyAgICAgICAgYm94LmFkZChzY3JvbGxlZCkKKworICAgICAgICAjIEJ1aWxkIERlcGVuZHMKKyAgICAgICAgc2Nyb2xsZWQgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGxlZC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgIHNlbGYuZGVwX3RyZWV2aWV3ID0gUGFja2FnZURlcFZpZXcoc2VsZi5kZXBlbmRzX21vZGVsLCBUWVBFX0RFUCwgIkJ1aWxkIERlcGVuZHMiKQorICAgICAgICBzZWxmLmRlcF90cmVldmlldy5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5vbl9wYWNrYWdlX2FjdGl2YXRlZCwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5kZXBfdHJlZXZpZXcpCisgICAgICAgIGJveC5hZGQoc2Nyb2xsZWQpCisgICAgICAgIHBhbmUuYWRkMihib3gpCisKKyAgICAgICAgIyBSZXZlcnNlIERlcGVuZHMKKyAgICAgICAgc2Nyb2xsZWQgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGxlZC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgIHNlbGYucmV2ZGVwX3RyZWV2aWV3ID0gUGFja2FnZVJldmVyc2VEZXBWaWV3KHNlbGYuZGVwZW5kc19tb2RlbCwgIlJldmVyc2UgRGVwZW5kcyIpCisgICAgICAgIHNlbGYucmV2ZGVwX3RyZWV2aWV3LmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLm9uX3BhY2thZ2VfYWN0aXZhdGVkLCBDT0xfREVQX1BBUkVOVCkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYucmV2ZGVwX3RyZWV2aWV3KQorICAgICAgICBib3guYWRkKHNjcm9sbGVkKQorICAgICAgICBwYW5lLmFkZDIoYm94KQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIG9uX3BhY2thZ2VfYWN0aXZhdGVkKHNlbGYsIHRyZWV2aWV3LCBwYXRoLCBjb2x1bW4sIGRhdGFfY29sKToKKyAgICAgICAgbW9kZWwgPSB0cmVldmlldy5nZXRfbW9kZWwoKQorICAgICAgICBwYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKG1vZGVsLmdldF9pdGVyKHBhdGgpLCBkYXRhX2NvbCkKKworICAgICAgICBwa2dfcGF0aCA9IFtdCisgICAgICAgIGRlZiBmaW5kZXIobW9kZWwsIHBhdGgsIGl0ZXIsIG5lZWRsZSk6CisgICAgICAgICAgICBwYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIENPTF9QS0dfTkFNRSkKKyAgICAgICAgICAgIGlmIHBhY2thZ2UgPT0gbmVlZGxlOgorICAgICAgICAgICAgICAgIHBrZ19wYXRoLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLnBrZ19tb2RlbC5mb3JlYWNoKGZpbmRlciwgcGFja2FnZSkKKyAgICAgICAgaWYgcGtnX3BhdGg6CisgICAgICAgICAgICBzZWxmLnBrZ190cmVldmlldy5nZXRfc2VsZWN0aW9uKCkuc2VsZWN0X3BhdGgocGtnX3BhdGhbMF0pCisgICAgICAgICAgICBzZWxmLnBrZ190cmVldmlldy5zY3JvbGxfdG9fY2VsbChwa2dfcGF0aFswXSkKKworICAgIGRlZiBvbl9jdXJzb3JfY2hhbmdlZChzZWxmLCBzZWxlY3Rpb24pOgorICAgICAgICAobW9kZWwsIGl0KSA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBpZiBpdCBpcyBOb25lOgorICAgICAgICAgICAgY3VycmVudF9wYWNrYWdlID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3VycmVudF9wYWNrYWdlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBDT0xfUEtHX05BTUUpCisgICAgICAgIHNlbGYucmRlcF90cmVldmlldy5zZXRfY3VycmVudF9wYWNrYWdlKGN1cnJlbnRfcGFja2FnZSkKKyAgICAgICAgc2VsZi5kZXBfdHJlZXZpZXcuc2V0X2N1cnJlbnRfcGFja2FnZShjdXJyZW50X3BhY2thZ2UpCisgICAgICAgIHNlbGYucmV2ZGVwX3RyZWV2aWV3LnNldF9jdXJyZW50X3BhY2thZ2UoY3VycmVudF9wYWNrYWdlKQorCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgZGVwZ3JhcGgpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBkZXBncmFwaFsicG4iXToKKyAgICAgICAgICAgIHNlbGYucGtnX21vZGVsLmluc2VydCgwLCAocGFja2FnZSwpKQorCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJkZXBlbmRzIl06CisgICAgICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGdyYXBoWyJkZXBlbmRzIl1bcGFja2FnZV06CisgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsLmluc2VydCAoMCwgKFRZUEVfREVQLCBwYWNrYWdlLCBkZXBlbmQpKQorCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wbiJdOgorICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl1bcGFja2FnZV06CisgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsLmluc2VydCAoMCwgKFRZUEVfUkRFUCwgcGFja2FnZSwgcmRlcGVuZCkpCisKKworY2xhc3MgZ3RrdGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIHF1aXQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaHV0ZG93bik6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi5zaHV0ZG93biA9IHNodXRkb3duCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBnb2JqZWN0LnRocmVhZHNfaW5pdCgpCisgICAgICAgIGd0ay5nZGsudGhyZWFkc19pbml0KCkKKyAgICAgICAgZ3RrLm1haW4oKQorICAgICAgICBndGt0aHJlYWQucXVpdC5zZXQoKQorCisKK2RlZiBtYWluKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpOgorICAgIHRyeToKKyAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICBjbWRsaW5lID0gcGFyYW1zLnBhcnNlQWN0aW9ucygpCisgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgJ21zZycgaW4gY21kbGluZSBhbmQgY21kbGluZVsnbXNnJ106CisgICAgICAgICAgICBwcmludChjbWRsaW5lWydtc2cnXSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNtZGxpbmUgPSBjbWRsaW5lWydhY3Rpb24nXQorICAgICAgICBpZiBub3QgY21kbGluZSBvciBjbWRsaW5lWzBdICE9ICJnZW5lcmF0ZURvdEdyYXBoIjoKKyAgICAgICAgICAgIHByaW50KCJUaGlzIFVJIHJlcXVpcmVzIHRoZSAtZyBvcHRpb24iKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2VuZXJhdGVEZXBUcmVlRXZlbnQiLCBjbWRsaW5lWzFdLCBjbWRsaW5lWzJdXSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjbWRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbGlmIHJldCAhPSBUcnVlOgorICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiByZXR1cm5lZCAlcyIgJSAoY21kbGluZSwgcmV0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZXhjZXB0IHhtbHJwY2xpYi5GYXVsdCBhcyB4OgorICAgICAgICBwcmludCgiWE1MUlBDIEZhdWx0IGdldHRpbmcgY29tbWFuZGxpbmU6XG4gJXMiICUgeCkKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGd0ay5pbml0X2NoZWNrKCkKKyAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQbGVhc2Ugc2V0IERJU1BMQVkgdmFyaWFibGUgYmVmb3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kIFxuIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBzaHV0ZG93biA9IDAKKworICAgIGd0a2d1aSA9IGd0a3RocmVhZChzaHV0ZG93bikKKyAgICBndGtndWkuc3RhcnQoKQorCisgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICBkZXAgPSBEZXBFeHBsb3JlcigpCisgICAgYmFyZGlhbG9nID0gZ3RrLkRpYWxvZyhwYXJlbnQ9ZGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9Z3RrLkRJQUxPR19NT0RBTHxndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpCisgICAgYmFyZGlhbG9nLnNldF9kZWZhdWx0X3NpemUoNDAwLCA1MCkKKyAgICBwYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgIGJhcmRpYWxvZy52Ym94LnBhY2tfc3RhcnQocGJhcikKKyAgICBiYXJkaWFsb2cuc2hvd19hbGwoKQorICAgIGJhcmRpYWxvZy5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBndGsubWFpbl9xdWl0KQorICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICBwcm9ncmVzc190b3RhbCA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMC4yNSkKKyAgICAgICAgICAgIGlmIGd0a3RocmVhZC5xdWl0LmlzU2V0KCk6CisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnVW5hYmxlIHRvIGNsZWFubHkgc3RvcDogJXMnICUgZXJyb3IpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKToKKyAgICAgICAgICAgICAgICBwcm9ncmVzc190b3RhbCA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuc2V0X3RpdGxlKCJMb2FkaW5nIENhY2hlIikKKyAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSgwKQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKToKKyAgICAgICAgICAgICAgICB4ID0gZXZlbnQuY3VycmVudAorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgcGJhci51cGRhdGUoeCAqIDEuMCAvIHByb2dyZXNzX3RvdGFsKQorICAgICAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCcnKQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuaGlkZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgICAgICAgICBwcm9ncmVzc190b3RhbCA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICAgICAgaWYgcHJvZ3Jlc3NfdG90YWwgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKDApCisgICAgICAgICAgICAgICAgYmFyZGlhbG9nLnNldF90aXRsZSgiUHJvY2Vzc2luZyByZWNpcGVzIikKKworICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIHggPSBldmVudC5jdXJyZW50CisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSh4ICogMS4wIC8gcHJvZ3Jlc3NfdG90YWwpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfdGl0bGUoJycpCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgYmFyZGlhbG9nLmhpZGUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQpOgorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgZGVwLnBhcnNlKGV2ZW50Ll9kZXBncmFwaCkKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICAgICAgcHJpbnQoIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiICUgZXZlbnQuZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmV4aXRjb2RlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5leGl0Y29kZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb29rZXIuQ29va2VyRXhpdCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgaW9lcnJvcjoKKyAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGlmIHNodXRkb3duID09IDI6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuVGhpcmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBleGl0LlxuIikKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMToKKyAgICAgICAgICAgICAgICBwcmludCgiXG5TZWNvbmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBzdG9wcGluZy4uLlxuIikKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdVbmFibGUgdG8gY2xlYW5seSBzdG9wOiAlcycgJSBlcnJvcikKKyAgICAgICAgICAgIGlmIHNodXRkb3duID09IDA6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuS2V5Ym9hcmQgSW50ZXJydXB0LCBjbG9zaW5nIGRvd24uLi5cbiIpCisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1VuYWJsZSB0byBjbGVhbmx5IHNodXRkb3duOiAlcycgJSBlcnJvcikKKyAgICAgICAgICAgIHNodXRkb3duID0gc2h1dGRvd24gKyAxCisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2dvZ2dsZS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvZ29nZ2xlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZWU3YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2dvZ2dsZS5weQpAQCAtMCwwICsxLDEyMSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBSb2IgQnJhZGZvcmQgPHJvYkBsaW51eC5pbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGd0aworaW1wb3J0IHhtbHJwY2xpYgorZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBSdW5uaW5nQnVpbGRUcmVlVmlldywgUnVubmluZ0J1aWxkCitmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzcyBpbXBvcnQgUHJvZ3Jlc3NCYXIKKworaW1wb3J0IFF1ZXVlCisKKworZGVmIGV2ZW50X2hhbmRsZV9pZGxlX2Z1bmMgKGV2ZW50SGFuZGxlciwgYnVpbGQsIHBiYXIpOgorCisgICAgIyBDb25zdW1lIGFzIG1hbnkgbWVzc2FnZXMgYXMgd2UgY2FuIGluIHRoZSB0aW1lIGF2YWlsYWJsZSB0byB1cworICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICB3aGlsZSBldmVudDoKKyAgICAgICAgYnVpbGQuaGFuZGxlX2V2ZW50IChldmVudCwgcGJhcikKKyAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorCisgICAgcmV0dXJuIFRydWUKKworZGVmIHNjcm9sbF90dl9jYiAobW9kZWwsIHBhdGgsIGl0ZXIsIHZpZXcpOgorICAgIHZpZXcuc2Nyb2xsX3RvX2NlbGwgKHBhdGgpCisKKworIyBAdG9kbyBob29rIHRoZXNlIGludG8gdGhlIEdVSSBzbyB0aGUgdXNlciBoYXMgZmVlZGJhY2suLi4KK2RlZiBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYiAocnVubmluZ19idWlsZCk6CisgICAgcGFzcworCisKK2RlZiBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYiAocnVubmluZ19idWlsZCk6CisgICAgcGFzcworCisKK2NsYXNzIE1haW5XaW5kb3cgKGd0ay5XaW5kb3cpOgorICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18gKHNlbGYsIGd0ay5XSU5ET1dfVE9QTEVWRUwpCisKKyAgICAgICAgIyBTZXR1cCB0cmVlIHZpZXcgYW5kIHRoZSBzY3JvbGxlZCB3aW5kb3cKKyAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93ICgpCisgICAgICAgIHNlbGYuYWRkIChzY3JvbGxlZF93aW5kb3cpCisgICAgICAgIHNlbGYuY3VyX2J1aWxkX3R2ID0gUnVubmluZ0J1aWxkVHJlZVZpZXcoKQorICAgICAgICBzZWxmLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfc2l6ZSg2NDAsIDQ4MCkKKyAgICAgICAgc2Nyb2xsZWRfd2luZG93LmFkZCAoc2VsZi5jdXJfYnVpbGRfdHYpCisKKworZGVmIG1haW4gKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpOgorICAgIGdvYmplY3QudGhyZWFkc19pbml0KCkKKyAgICBndGsuZ2RrLnRocmVhZHNfaW5pdCgpCisKKyAgICB3aW5kb3cgPSBNYWluV2luZG93ICgpCisgICAgd2luZG93LnNob3dfYWxsICgpCisgICAgcGJhciA9IFByb2dyZXNzQmFyKHdpbmRvdykKKyAgICBwYmFyLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGZvciB0aGUgY3VycmVudCBidWlsZAorICAgIHJ1bm5pbmdfYnVpbGQgPSBSdW5uaW5nQnVpbGQgKCkKKyAgICB3aW5kb3cuY3VyX2J1aWxkX3R2LnNldF9tb2RlbCAocnVubmluZ19idWlsZC5tb2RlbCkKKyAgICBydW5uaW5nX2J1aWxkLm1vZGVsLmNvbm5lY3QoInJvdy1pbnNlcnRlZCIsIHNjcm9sbF90dl9jYiwgd2luZG93LmN1cl9idWlsZF90dikKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1zdWNjZWVkZWQiLCBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYikKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1mYWlsZWQiLCBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYikKKworICAgIHRyeToKKyAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICBjbWRsaW5lID0gcGFyYW1zLnBhcnNlQWN0aW9ucygpCisgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgJ21zZycgaW4gY21kbGluZSBhbmQgY21kbGluZVsnbXNnJ106CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoY21kbGluZVsnbXNnJ10pCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBjbWRsaW5lID0gY21kbGluZVsnYWN0aW9uJ10KKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKGNtZGxpbmUpCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiAlcyIgJSAoY21kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxpZiByZXQgIT0gVHJ1ZToKKyAgICAgICAgICAgIHByaW50KCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogcmV0dXJuZWQgJXMiICUgKGNtZGxpbmUsIHJldCkpCisgICAgICAgICAgICByZXR1cm4gMQorICAgIGV4Y2VwdCB4bWxycGNsaWIuRmF1bHQgYXMgeDoKKyAgICAgICAgcHJpbnQoIlhNTFJQQyBGYXVsdCBnZXR0aW5nIGNvbW1hbmRsaW5lOlxuICVzIiAlIHgpCisgICAgICAgIHJldHVybiAxCisKKyAgICAjIFVzZSBhIHRpbWVvdXQgZnVuY3Rpb24gZm9yIHByb2JpbmcgdGhlIGV2ZW50IHF1ZXVlIHRvIGZpbmQgb3V0IGlmIHdlCisgICAgIyBoYXZlIGEgbWVzc2FnZSB3YWl0aW5nIGZvciB1cy4KKyAgICBnb2JqZWN0LnRpbWVvdXRfYWRkICgxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaGFuZGxlX2lkbGVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZ19idWlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYmFyKQorCisgICAgdHJ5OgorICAgICAgICBndGsubWFpbigpCisgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgaW9lcnJvcjoKKyAgICAgICAgIyBpZ25vcmUgaW50ZXJydXB0ZWQgaW8KKyAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICBwYXNzCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9ob2IucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2hvYi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTViNDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9ob2IucHkKQEAgLTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK3JlcXVpcmVtZW50cyA9ICJGQVRBTDogSG9iIHJlcXVpcmVzIEd0aysgMi4yMC4wIG9yIGhpZ2hlciwgUHlHdGsgMi4yMS4wIG9yIGhpZ2hlciIKK3RyeToKKyAgICBpbXBvcnQgZ29iamVjdAorICAgIGltcG9ydCBndGsKKyAgICBpbXBvcnQgcHlndGsKKyAgICBweWd0ay5yZXF1aXJlKCcyLjAnKSAjIHRvIGJlIGNlcnRhaW4gd2UgZG9uJ3QgaGF2ZSBndGsrIDEueCAhPyEKKyAgICBndGt2ZXIgPSBndGsuZ3RrX3ZlcnNpb24KKyAgICBweWd0a3ZlciA9IGd0ay5weWd0a192ZXJzaW9uCisgICAgaWYgZ3RrdmVyICA8ICgyLCAyMCwgMCkgb3IgcHlndGt2ZXIgPCAoMiwgMjEsIDApOgorICAgICAgICBzeXMuZXhpdCgiJXMsXG5Zb3UgaGF2ZSBHdGsrICVzIGFuZCBQeUd0ayAlcy4iICUgKHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgICAgICAiLiIuam9pbihtYXAoc3RyLCBndGt2ZXIpKSwKKyAgICAgICAgICAgICAgICAiLiIuam9pbihtYXAoc3RyLCBweWd0a3ZlcikpKSkKK2V4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoIiVzICglcykuIiAlIChyZXF1aXJlbWVudHMsIHN0cihleGMpKSkKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSkKK3RyeToKKyAgICBpbXBvcnQgYmIKK2V4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXhjOgorICAgIHN5cy5leGl0KHN0cihleGMpKQorZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmxpc3Rtb2RlbCBpbXBvcnQgUmVjaXBlTGlzdE1vZGVsLCBQYWNrYWdlTGlzdE1vZGVsCitmcm9tIGJiLnVpLmNydW1icy5ob2JldmVudGhhbmRsZXIgaW1wb3J0IEhvYkhhbmRsZXIKK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkZXIgaW1wb3J0IEJ1aWxkZXIKKworZmVhdHVyZVNldCA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuSE9CX0VYVFJBX0NBQ0hFUywgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkddCisKK2RlZiBldmVudF9oYW5kbGVfaWRsZV9mdW5jKGV2ZW50SGFuZGxlciwgaG9iSGFuZGxlcik6CisgICAgIyBDb25zdW1lIGFzIG1hbnkgbWVzc2FnZXMgYXMgd2UgY2FuIGluIHRoZSB0aW1lIGF2YWlsYWJsZSB0byB1cworICAgIGlmIG5vdCBldmVudEhhbmRsZXI6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICB3aGlsZSBldmVudDoKKyAgICAgICAgaG9iSGFuZGxlci5oYW5kbGVfZXZlbnQoZXZlbnQpCisgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICByZXR1cm4gVHJ1ZQorCitfZXZ0X2xpc3QgPSBbICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0IiwgImJiLmV2ZW50LkxvZ0V4ZWNUVFkiLCAibG9nZ2luZy5Mb2dSZWNvcmQiLAorICAgICAgICAgICAgICAiYmIuYnVpbGQuVGFza0ZhaWxlZCIsICJiYi5idWlsZC5UYXNrQmFzZSIsICJiYi5ldmVudC5QYXJzZVN0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyIsICJiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCIsICJiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzIiwgImJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCIsICJiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQiLAorICAgICAgICAgICAgICAiYmIuY29tbWFuZC5Db21tYW5kRXhpdCIsICJiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQiLCAgImJiLmNvb2tlci5Db29rZXJFeGl0IiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzIiwgImJiLmV2ZW50Lk5vUHJvdmlkZXIiLCAiYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQiLCAiYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkIiwgImJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkJ1aWxkQmFzZSIsICJiYi5idWlsZC5UYXNrU3RhcnRlZCIsICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIiwgImJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQiLCAiYmIuZXZlbnQuU2FuaXR5Q2hlY2tGYWlsZWQiLCAiYmIuZXZlbnQuUGFja2FnZUluZm8iLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQiLCAiYmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZCIsICJiYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZCIsICJiYi5ldmVudC5OZXR3b3JrVGVzdEZhaWxlZCIsICJiYi5ldmVudC5OZXR3b3JrVGVzdFBhc3NlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiLCAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiLCAiYmIuZXZlbnQuRGlza0Z1bGwiXQorCitkZWYgbWFpbiAoc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgIGdvYmplY3QudGhyZWFkc19pbml0KCkKKworICAgICMgVGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgSG9iIGFuZCB0aGUgYml0YmFrZSBzZXJ2ZXIgYXJlCisgICAgIyBydW5uaW5nIG9uIGRpZmZlcmVudCBtYWNoaW5lcworICAgICMgcmVjaXBlIG1vZGVsIGFuZCBwYWNrYWdlIG1vZGVsCisgICAgcmVjaXBlX21vZGVsID0gUmVjaXBlTGlzdE1vZGVsKCkKKyAgICBwYWNrYWdlX21vZGVsID0gUGFja2FnZUxpc3RNb2RlbCgpCisKKyAgICBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCisgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRFdmVudE1hc2siLCBzZXJ2ZXIuZ2V0RXZlbnRIYW5kbGUoKSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBfZXZ0X2xpc3RdKQorICAgIGhvYkhhbmRsZXIgPSBIb2JIYW5kbGVyKHNlcnZlciwgcmVjaXBlX21vZGVsLCBwYWNrYWdlX21vZGVsKQorICAgIGJ1aWxkZXIgPSBCdWlsZGVyKGhvYkhhbmRsZXIsIHJlY2lwZV9tb2RlbCwgcGFja2FnZV9tb2RlbCkKKworICAgICMgVGhpcyB0aW1lb3V0IGZ1bmN0aW9uIHJlZ3VsYXJseSBwcm9iZXMgdGhlIGV2ZW50IHF1ZXVlIHRvIGZpbmQgb3V0IGlmIHdlCisgICAgIyBoYXZlIGFueSBtZXNzYWdlcyB3YWl0aW5nIGZvciB1cy4KKyAgICBnb2JqZWN0LnRpbWVvdXRfYWRkKDEwLCBldmVudF9oYW5kbGVfaWRsZV9mdW5jLCBldmVudEhhbmRsZXIsIGhvYkhhbmRsZXIpCisKKyAgICB0cnk6CisgICAgICAgIGd0ay5tYWluKCkKKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBob2JIYW5kbGVyLmNhbmNlbF9idWlsZChmb3JjZSA9IFRydWUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygxNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmODcxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW1hZ2VzL2ltYWdlc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbWFnZXMvaW1hZ2VzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDljZDk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbWFnZXMvaW1hZ2VzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLWhvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQtaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNmRmNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLWhvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTcwOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWxlcnQucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2FsZXJ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWM2ZjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2FsZXJ0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvY29uZmlybWF0aW9uLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9jb25maXJtYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTQwMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvY29uZmlybWF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZGVuaWVkLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9kZW5pZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzVjN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZGVuaWVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZXJyb3IucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2Vycm9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZhOGMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2Vycm9yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaW5mby5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4ZThkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pbmZvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaXNzdWVzLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pc3N1ZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYzc0NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaXNzdWVzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVmcmVzaC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVmcmVzaC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2YzQxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZWZyZXNoLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLWhvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUtaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTdjNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLWhvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzNjMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvdGljay5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvdGljay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhYWQzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy90aWNrLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZmJiYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19ob3Zlci5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkMjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmOTA1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvbGF5ZXJzL2xheWVyc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9sYXllcnMvbGF5ZXJzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmYzY2UwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9sYXllcnMvbGF5ZXJzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9wYWNrYWdlcy9wYWNrYWdlc19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQwYTUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9wYWNrYWdlcy9wYWNrYWdlc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2hvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcGFja2FnZXMvcGFja2FnZXNfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODExNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4MDliYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcmVjaXBlL3JlY2lwZV9kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9yZWNpcGUvcmVjaXBlX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9yZWNpcGUvcmVjaXBlX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2Rpc3BsYXkucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9zZXR0aW5ncy9zZXR0aW5nc19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM0NjRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9zZXR0aW5ncy9zZXR0aW5nc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvc2V0dGluZ3Mvc2V0dGluZ3NfaG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmEwYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfZGlzcGxheS5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzYzdhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvdGVtcGxhdGVzL3RlbXBsYXRlc19kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfaG92ZXIucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy90ZW1wbGF0ZXMvdGVtcGxhdGVzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmI3MTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy90ZW1wbGF0ZXMvdGVtcGxhdGVzX2hvdmVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWUyNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weQpAQCAtMCwwICsxLDU2NCBAQAorIworIyBCaXRCYWtlIChObylUVFkgVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgSGFuZGxpbmcgb3V0cHV0IHRvIFRUWXMgb3IgZmlsZXMgKG5vIFRUWSkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgeG1scnBjbGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHByb2dyZXNzYmFyCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgYmIubXNnCitpbXBvcnQgdGltZQoraW1wb3J0IGZjbnRsCitpbXBvcnQgc3RydWN0CitpbXBvcnQgY29weQoraW1wb3J0IGF0ZXhpdAorZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKKworZmVhdHVyZVNldCA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFNdCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKK2ludGVyYWN0aXZlID0gc3lzLnN0ZG91dC5pc2F0dHkoKQorCitjbGFzcyBCQlByb2dyZXNzKHByb2dyZXNzYmFyLlByb2dyZXNzQmFyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBtYXh2YWwpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICB3aWRnZXRzID0gW3Byb2dyZXNzYmFyLlBlcmNlbnRhZ2UoKSwgJyAnLCBwcm9ncmVzc2Jhci5CYXIoKSwgJyAnLAorICAgICAgICAgICBwcm9ncmVzc2Jhci5FVEEoKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR1dJTkNIKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdCA9IE5vbmUKKyAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuX19pbml0X18oc2VsZiwgbWF4dmFsLCBbc2VsZi5tc2cgKyAiOiAiXSArIHdpZGdldHMsIGZkPXN5cy5zdGRvdXQpCisKKyAgICBkZWYgX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIHByb2dyZXNzYmFyLlByb2dyZXNzQmFyLl9oYW5kbGVfcmVzaXplKHNlbGYsIHNpZ251bSwgZnJhbWUpCisgICAgICAgIGlmIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0OgorICAgICAgICAgICAgc2VsZi5fcmVzaXplX2RlZmF1bHQoc2lnbnVtLCBmcmFtZSkKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBwcm9ncmVzc2Jhci5Qcm9ncmVzc0Jhci5maW5pc2goc2VsZikKKyAgICAgICAgaWYgc2VsZi5fcmVzaXplX2RlZmF1bHQ6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdXSU5DSCwgc2VsZi5fcmVzaXplX2RlZmF1bHQpCisKK2NsYXNzIE5vbkludGVyYWN0aXZlUHJvZ3Jlc3Mob2JqZWN0KToKKyAgICBmb2JqID0gc3lzLnN0ZG91dAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgbWF4dmFsKToKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5tYXh2YWwgPSBtYXh2YWwKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5mb2JqLndyaXRlKCIlcy4uLiIgJSBzZWxmLm1zZykKKyAgICAgICAgc2VsZi5mb2JqLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgdmFsdWUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLmZvYmoud3JpdGUoImRvbmUuXG4iKQorICAgICAgICBzZWxmLmZvYmouZmx1c2goKQorCitkZWYgbmV3X3Byb2dyZXNzKG1zZywgbWF4dmFsKToKKyAgICBpZiBpbnRlcmFjdGl2ZToKKyAgICAgICAgcmV0dXJuIEJCUHJvZ3Jlc3MobXNnLCBtYXh2YWwpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbkludGVyYWN0aXZlUHJvZ3Jlc3MobXNnLCBtYXh2YWwpCisKK2RlZiBwbHVyYWxpc2Uoc2luZ3VsYXIsIHBsdXJhbCwgcXR5KToKKyAgICBpZihxdHkgPT0gMSk6CisgICAgICAgIHJldHVybiBzaW5ndWxhciAlIHF0eQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBwbHVyYWwgJSBxdHkKKworCitjbGFzcyBJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIobG9nZ2luZy5GaWx0ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZiwgZm9ybWF0KToKKyAgICAgICAgc2VsZi50ZiA9IHRmCisgICAgICAgIHNlbGYuZm9ybWF0ID0gZm9ybWF0CisKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID09IHNlbGYuZm9ybWF0Lk5PVEUgYW5kIChyZWNvcmQubXNnLnN0YXJ0c3dpdGgoIlJ1bm5pbmciKSBvciByZWNvcmQubXNnLnN0YXJ0c3dpdGgoInJlY2lwZSAiKSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi50Zi5jbGVhckZvb3RlcigpCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFRlcm1pbmFsRmlsdGVyKG9iamVjdCk6CisgICAgY29sdW1ucyA9IDgwCisKKyAgICBkZWYgc2lnd2luY2hfaGFuZGxlKHNlbGYsIHNpZ251bSwgZnJhbWUpOgorICAgICAgICBzZWxmLmNvbHVtbnMgPSBzZWxmLmdldFRlcm1pbmFsQ29sdW1ucygpCisgICAgICAgIGlmIHNlbGYuX3NpZ3dpbmNoX2RlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLl9zaWd3aW5jaF9kZWZhdWx0KHNpZ251bSwgZnJhbWUpCisKKyAgICBkZWYgZ2V0VGVybWluYWxDb2x1bW5zKHNlbGYpOgorICAgICAgICBkZWYgaW9jdGxfR1dJTlNaKGZkKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjciA9IHN0cnVjdC51bnBhY2soJ2hoJywgZmNudGwuaW9jdGwoZmQsIHNlbGYudGVybWlvcy5USU9DR1dJTlNaLCAnMTIzNCcpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gY3IKKyAgICAgICAgY3IgPSBpb2N0bF9HV0lOU1ooc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgaWYgbm90IGNyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkID0gb3Mub3Blbihvcy5jdGVybWlkKCksIG9zLk9fUkRPTkxZKQorICAgICAgICAgICAgICAgIGNyID0gaW9jdGxfR1dJTlNaKGZkKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IGNyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNyID0gKGVudlsnTElORVMnXSwgZW52WydDT0xVTU5TJ10pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgY3IgPSAoMjUsIDgwKQorICAgICAgICByZXR1cm4gY3JbMV0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWluLCBoZWxwZXIsIGNvbnNvbGUsIGVycmNvbnNvbGUsIGZvcm1hdCk6CisgICAgICAgIHNlbGYubWFpbiA9IG1haW4KKyAgICAgICAgc2VsZi5oZWxwZXIgPSBoZWxwZXIKKyAgICAgICAgc2VsZi5jdXUgPSBOb25lCisgICAgICAgIHNlbGYuc3RkaW5iYWNrdXAgPSBOb25lCisgICAgICAgIHNlbGYuaW50ZXJhY3RpdmUgPSBzeXMuc3Rkb3V0LmlzYXR0eSgpCisgICAgICAgIHNlbGYuZm9vdGVyX3ByZXNlbnQgPSBGYWxzZQorICAgICAgICBzZWxmLmxhc3RwaWRzID0gW10KKworICAgICAgICBpZiBub3Qgc2VsZi5pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjdXJzZXMKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc3lzLmV4aXQoIkZBVEFMOiBUaGUga25vdHR5IHVpIGNvdWxkIG5vdCBsb2FkIHRoZSByZXF1aXJlZCBjdXJzZXMgcHl0aG9uIG1vZHVsZS4iKQorCisgICAgICAgIGltcG9ydCB0ZXJtaW9zCisgICAgICAgIHNlbGYuY3Vyc2VzID0gY3Vyc2VzCisgICAgICAgIHNlbGYudGVybWlvcyA9IHRlcm1pb3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuc3RkaW5iYWNrdXAgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkKKyAgICAgICAgICAgIG5ldyA9IGNvcHkuZGVlcGNvcHkoc2VsZi5zdGRpbmJhY2t1cCkKKyAgICAgICAgICAgIG5ld1szXSA9IG5ld1szXSAmIH50ZXJtaW9zLkVDSE8KKyAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgbmV3KQorICAgICAgICAgICAgY3Vyc2VzLnNldHVwdGVybSgpCisgICAgICAgICAgICBpZiBjdXJzZXMudGlnZXRudW0oImNvbG9ycyIpID4gMjoKKyAgICAgICAgICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICAgICAgICAgIHNlbGYuZWQgPSBjdXJzZXMudGlnZXRzdHIoImVkIikKKyAgICAgICAgICAgIGlmIHNlbGYuZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jdXUgPSBjdXJzZXMudGlnZXRzdHIoImN1dSIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fc2lnd2luY2hfZGVmYXVsdCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR1dJTkNIKQorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzZWxmLnNpZ3dpbmNoX2hhbmRsZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmNvbHVtbnMgPSBzZWxmLmdldFRlcm1pbmFsQ29sdW1ucygpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuY3V1ID0gTm9uZQorICAgICAgICBjb25zb2xlLmFkZEZpbHRlcihJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIoc2VsZiwgZm9ybWF0KSkKKyAgICAgICAgZXJyY29uc29sZS5hZGRGaWx0ZXIoSW50ZXJhY3RDb25zb2xlTG9nRmlsdGVyKHNlbGYsIGZvcm1hdCkpCisKKyAgICBkZWYgY2xlYXJGb290ZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZm9vdGVyX3ByZXNlbnQ6CisgICAgICAgICAgICBsaW5lcyA9IHNlbGYuZm9vdGVyX3ByZXNlbnQKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc2VsZi5jdXJzZXMudHBhcm0oc2VsZi5jdXUsIGxpbmVzKSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc2VsZi5jdXJzZXMudHBhcm0oc2VsZi5lZCkpCisgICAgICAgIHNlbGYuZm9vdGVyX3ByZXNlbnQgPSBGYWxzZQorCisgICAgZGVmIHVwZGF0ZUZvb3RlcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuY3V1OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFjdGl2ZXRhc2tzID0gc2VsZi5oZWxwZXIucnVubmluZ190YXNrcworICAgICAgICBmYWlsZWR0YXNrcyA9IHNlbGYuaGVscGVyLmZhaWxlZF90YXNrcworICAgICAgICBydW5uaW5ncGlkcyA9IHNlbGYuaGVscGVyLnJ1bm5pbmdfcGlkcworICAgICAgICBpZiBzZWxmLmZvb3Rlcl9wcmVzZW50IGFuZCAoc2VsZi5sYXN0Y291bnQgPT0gc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50KSBhbmQgKHNlbGYubGFzdHBpZHMgPT0gcnVubmluZ3BpZHMpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuZm9vdGVyX3ByZXNlbnQ6CisgICAgICAgICAgICBzZWxmLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgaWYgKG5vdCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsIG9yIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCA9PSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKSBhbmQgbm90IGxlbihhY3RpdmV0YXNrcyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdGFza3MgPSBbXQorICAgICAgICBmb3IgdCBpbiBydW5uaW5ncGlkczoKKyAgICAgICAgICAgIHRhc2tzLmFwcGVuZCgiJXMgKHBpZCAlcykiICUgKGFjdGl2ZXRhc2tzW3RdWyJ0aXRsZSJdLCB0KSkKKworICAgICAgICBpZiBzZWxmLm1haW4uc2h1dGRvd246CisgICAgICAgICAgICBjb250ZW50ID0gIldhaXRpbmcgZm9yICVzIHJ1bm5pbmcgdGFza3MgdG8gZmluaXNoOiIgJSBsZW4oYWN0aXZldGFza3MpCisgICAgICAgIGVsaWYgbm90IGxlbihhY3RpdmV0YXNrcyk6CisgICAgICAgICAgICBjb250ZW50ID0gIk5vIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzICglcyBvZiAlcykiICUgKHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiQ3VycmVudGx5ICVzIHJ1bm5pbmcgdGFza3MgKCVzIG9mICVzKToiICUgKGxlbihhY3RpdmV0YXNrcyksIHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudCwgc2VsZi5oZWxwZXIudGFza251bWJlcl90b3RhbCkKKyAgICAgICAgcHJpbnQoY29udGVudCkKKyAgICAgICAgbGluZXMgPSAxICsgaW50KGxlbihjb250ZW50KSAvIChzZWxmLmNvbHVtbnMgKyAxKSkKKyAgICAgICAgZm9yIHRhc2tudW0sIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiJXM6ICVzIiAlICh0YXNrbnVtLCB0YXNrKQorICAgICAgICAgICAgcHJpbnQoY29udGVudCkKKyAgICAgICAgICAgIGxpbmVzID0gbGluZXMgKyAxICsgaW50KGxlbihjb250ZW50KSAvIChzZWxmLmNvbHVtbnMgKyAxKSkKKyAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IGxpbmVzCisgICAgICAgIHNlbGYubGFzdHBpZHMgPSBydW5uaW5ncGlkc1s6XQorICAgICAgICBzZWxmLmxhc3Rjb3VudCA9IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfY3VycmVudAorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGRpbmJhY2t1cDoKKyAgICAgICAgICAgIGZkID0gc3lzLnN0ZGluLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLnRlcm1pb3MudGNzZXRhdHRyKGZkLCBzZWxmLnRlcm1pb3MuVENTQURSQUlOLCBzZWxmLnN0ZGluYmFja3VwKQorCitkZWYgX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpOgorICAgICMgR2V0IHZhbHVlcyBvZiB2YXJpYWJsZXMgd2hpY2ggY29udHJvbCBvdXIgb3V0cHV0CisgICAgaW5jbHVkZWxvZ3MsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQklOQ0xVREVMT0dTIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJJTkNMVURFTE9HUyB2YXJpYWJsZTogJXMiICUgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgbG9nbGluZXMsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQklOQ0xVREVMT0dTX0xJTkVTIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJJTkNMVURFTE9HU19MSU5FUyB2YXJpYWJsZTogJXMiICUgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgY29uc29sZWxvZ2ZpbGUsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9DT05TT0xFTE9HIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJfQ09OU09MRUxPRyB2YXJpYWJsZTogJXMiICUgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgcmV0dXJuIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgY29uc29sZWxvZ2ZpbGUKKworX2V2dF9saXN0ID0gWyAiYmIucnVucXVldWUucnVuUXVldWVFeGl0V2FpdCIsICJiYi5ldmVudC5Mb2dFeGVjVFRZIiwgImxvZ2dpbmcuTG9nUmVjb3JkIiwKKyAgICAgICAgICAgICAgImJiLmJ1aWxkLlRhc2tGYWlsZWQiLCAiYmIuYnVpbGQuVGFza0Jhc2UiLCAiYmIuZXZlbnQuUGFyc2VTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MiLCAiYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQiLCAiYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyIsICJiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQiLCAiYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkIiwKKyAgICAgICAgICAgICAgImJiLmNvbW1hbmQuQ29tbWFuZEV4aXQiLCAiYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkIiwgICJiYi5jb29rZXIuQ29va2VyRXhpdCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyIsICJiYi5ldmVudC5Ob1Byb3ZpZGVyIiwgImJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCIsCisgICAgICAgICAgICAgICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkIiwgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0ZhaWxlZCIsICJiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5CdWlsZEJhc2UiLCAiYmIuYnVpbGQuVGFza1N0YXJ0ZWQiLCAiYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCIsICJiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50Il0KKworZGVmIG1haW4oc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcywgdGYgPSBUZXJtaW5hbEZpbHRlcik6CisKKyAgICBpbmNsdWRlbG9ncywgbG9nbGluZXMsIGNvbnNvbGVsb2dmaWxlID0gX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpCisKKyAgICBpZiBzeXMuc3RkaW4uaXNhdHR5KCkgYW5kIHN5cy5zdGRvdXQuaXNhdHR5KCk6CisgICAgICAgIGxvZ19leGVjX3R0eSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBsb2dfZXhlY190dHkgPSBGYWxzZQorCisgICAgaGVscGVyID0gdWloZWxwZXIuQkJVSUhlbHBlcigpCisKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgZXJyY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKQorICAgIGZvcm1hdF9zdHIgPSAiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKGZvcm1hdF9zdHIpCisgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoY29uc29sZSwgYmIubXNnLkJCTG9nRmlsdGVyU3RkT3V0KQorICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGVycmNvbnNvbGUsIGJiLm1zZy5CQkxvZ0ZpbHRlclN0ZEVycikKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgZXJyY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoZXJyY29uc29sZSkKKworICAgIGlmIHBhcmFtcy5vcHRpb25zLnJlbW90ZV9zZXJ2ZXIgYW5kIHBhcmFtcy5vcHRpb25zLmtpbGxfc2VydmVyOgorICAgICAgICBzZXJ2ZXIudGVybWluYXRlU2VydmVyKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBjb25zb2xlbG9nZmlsZSBhbmQgbm90IHBhcmFtcy5vcHRpb25zLnNob3dfZW52aXJvbm1lbnQgYW5kIG5vdCBwYXJhbXMub3B0aW9ucy5zaG93X3ZlcnNpb25zOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGNvbnNvbGVsb2dmaWxlKSkKKyAgICAgICAgY29ubG9nZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKGZvcm1hdF9zdHIpCisgICAgICAgIGNvbnNvbGVsb2cgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGNvbnNvbGVsb2dmaWxlKQorICAgICAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlbG9nKQorICAgICAgICBjb25zb2xlbG9nLnNldEZvcm1hdHRlcihjb25sb2dmb3JtYXQpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGVsb2cpCisKKyAgICBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCisgICAgc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRFdmVudE1hc2siLCBzZXJ2ZXIuZ2V0RXZlbnRIYW5kbGUoKSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBfZXZ0X2xpc3RdKQorCisgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgIHBhcmFtcy51cGRhdGVGcm9tU2VydmVyKHNlcnZlcikKKyAgICAgICAgcGFyYW1zLnVwZGF0ZVRvU2VydmVyKHNlcnZlciwgb3MuZW52aXJvbi5jb3B5KCkpCisgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICBwcmludCgiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihjbWRsaW5lWydtc2cnXSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKGNtZGxpbmVbJ2FjdGlvbiddKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCAnJXMnIGZhaWxlZDogJXMiICUgKGNtZGxpbmUsIGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsaWYgcmV0ICE9IFRydWU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvbW1hbmQgJyVzJyBmYWlsZWQ6IHJldHVybmVkICVzIiAlIChjbWRsaW5lLCByZXQpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworCisgICAgcGFyc2Vwcm9ncmVzcyA9IE5vbmUKKyAgICBjYWNoZXByb2dyZXNzID0gTm9uZQorICAgIG1haW4uc2h1dGRvd24gPSAwCisgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgIHJldHVybl92YWx1ZSA9IDAKKyAgICBlcnJvcnMgPSAwCisgICAgd2FybmluZ3MgPSAwCisgICAgdGFza2ZhaWx1cmVzID0gW10KKworICAgIHRlcm1maWx0ZXIgPSB0ZihtYWluLCBoZWxwZXIsIGNvbnNvbGUsIGVycmNvbnNvbGUsIGZvcm1hdCkKKyAgICBhdGV4aXQucmVnaXN0ZXIodGVybWZpbHRlci5maW5pc2gpCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMCkKKyAgICAgICAgICAgIGlmIGV2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbWFpbi5zaHV0ZG93biA+IDE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdGVybWZpbHRlci51cGRhdGVGb290ZXIoKQorICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwLjI1KQorICAgICAgICAgICAgICAgIGlmIGV2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBoZWxwZXIuZXZlbnRIYW5kbGVyKGV2ZW50KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVFeGl0V2FpdCk6CisgICAgICAgICAgICAgICAgaWYgbm90IG1haW4uc2h1dGRvd246CisgICAgICAgICAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkxvZ0V4ZWNUVFkpOgorICAgICAgICAgICAgICAgIGlmIGxvZ19leGVjX3R0eToKKyAgICAgICAgICAgICAgICAgICAgdHJpZXMgPSBldmVudC5yZXRyaWVzCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRyaWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlRyeWluZyB0byBydW46ICVzIiAlIGV2ZW50LnByb2cpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5zeXN0ZW0oZXZlbnQucHJvZykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChldmVudC5zbGVlcF9kZWxheSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWVzIC09IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgdHJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGV2ZW50Lm1zZykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBmb3JtYXQuRVJST1I6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA9PSBmb3JtYXQuV0FSTklORzoKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgPSB3YXJuaW5ncyArIDEKKyAgICAgICAgICAgICAgICAjIEZvciAibm9ybWFsIiBsb2dnaW5nIGNvbmRpdGlvbnMsIGRvbid0IHNob3cgbm90ZSBsb2dzIGZyb20gdGFza3MKKyAgICAgICAgICAgICAgICAjIGJ1dCBkbyBzaG93IHRoZW0gaWYgdGhlIHVzZXIgaGFzIGNoYW5nZWQgdGhlIGRlZmF1bHQgbG9nIGxldmVsIHRvCisgICAgICAgICAgICAgICAgIyBpbmNsdWRlIHZlcmJvc2UvZGVidWcgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICBpZiBldmVudC50YXNrcGlkICE9IDAgYW5kIGV2ZW50LmxldmVsbm8gPD0gZm9ybWF0Lk5PVEUgYW5kIChldmVudC5sZXZlbG5vIDwgbGxldmVsIG9yIChldmVudC5sZXZlbG5vID09IGZvcm1hdC5OT1RFIGFuZCBsbGV2ZWwgIT0gZm9ybWF0LlZFUkJPU0UpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKGV2ZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJMb2dmaWxlIGZvciBmYWlsZWQgc2V0c2NlbmUgdGFzayBpcyAlcyIgJSBldmVudC5sb2dmaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCisgICAgICAgICAgICAgICAgbG9nZmlsZSA9IGV2ZW50LmxvZ2ZpbGUKKyAgICAgICAgICAgICAgICBpZiBsb2dmaWxlIGFuZCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJMb2dmaWxlIG9mIGZhaWx1cmUgc3RvcmVkIGluOiAlcyIgJSBsb2dmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBpbmNsdWRlbG9ncyBhbmQgbm90IGV2ZW50LmVycnByaW50ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiTG9nIGRhdGEgZm9sbG93czoiKQorICAgICAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4obG9nZmlsZSwgInIiKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbCA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvZ2xpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyB8ICVzJyAlIGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcykgPiBpbnQobG9nbGluZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucG9wKDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ3wgJXMnICUgbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGxpbmUpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrQmFzZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oZXZlbnQuX21lc3NhZ2UpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQudG90YWwgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzID0gbmV3X3Byb2dyZXNzKCJQYXJzaW5nIHJlY2lwZXMiLCBldmVudC50b3RhbCkuc3RhcnQoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKToKKyAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLnVwZGF0ZShldmVudC5jdXJyZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHBhcnNlcHJvZ3Jlc3M6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBwYXJzZXByb2dyZXNzLmZpbmlzaCgpCisgICAgICAgICAgICAgICAgcHJpbnQoKCJQYXJzaW5nIG9mICVkIC5iYiBmaWxlcyBjb21wbGV0ZSAoJWQgY2FjaGVkLCAlZCBwYXJzZWQpLiAlZCB0YXJnZXRzLCAlZCBza2lwcGVkLCAlZCBtYXNrZWQsICVkIGVycm9ycy4iCisgICAgICAgICAgICAgICAgICAgICUgKCBldmVudC50b3RhbCwgZXZlbnQuY2FjaGVkLCBldmVudC5wYXJzZWQsIGV2ZW50LnZpcnR1YWxzLCBldmVudC5za2lwcGVkLCBldmVudC5tYXNrZWQsIGV2ZW50LmVycm9ycykpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIGNhY2hlcHJvZ3Jlc3MgPSBuZXdfcHJvZ3Jlc3MoIkxvYWRpbmcgY2FjaGUiLCBldmVudC50b3RhbCkuc3RhcnQoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgY2FjaGVwcm9ncmVzcy51cGRhdGUoZXZlbnQuY3VycmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBjYWNoZXByb2dyZXNzLmZpbmlzaCgpCisgICAgICAgICAgICAgICAgcHJpbnQoIkxvYWRlZCAlZCBlbnRyaWVzIGZyb20gZGVwZW5kZW5jeSBjYWNoZS4iICUgZXZlbnQubnVtX2VudHJpZXMpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBldmVudC5leGl0Y29kZQorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmVycm9yOgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIsIGV2ZW50LmVycm9yKQorICAgICAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAyCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IGV2ZW50LmV4aXRjb2RlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQsIGJiLmNvb2tlci5Db29rZXJFeGl0KSk6CisgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSBmb3IgJXMlcyAoJXMpIiwgZXZlbnQuX2lzX3J1bnRpbWUgYW5kICJydW50aW1lICIgb3IgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2l0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgIi5qb2luKGV2ZW50Ll9jYW5kaWRhdGVzKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY29uc2lkZXIgZGVmaW5pbmcgYSBQUkVGRVJSRURfUFJPVklERVIgZW50cnkgdG8gbWF0Y2ggJXMiLCBldmVudC5faXRlbSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQorICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fcnVudGltZToKKyAgICAgICAgICAgICAgICAgICAgciA9ICJSIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHIgPSAiIgorCisgICAgICAgICAgICAgICAgZXh0cmEgPSAnJworICAgICAgICAgICAgICAgIGlmIG5vdCBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2Nsb3NlX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9ICIuIENsb3NlIG1hdGNoZXM6XG4gICVzIiAlICdcbiAgJy5qb2luKGV2ZW50Ll9jbG9zZV9tYXRjaGVzKQorCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2RlcGVuZGVlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJOb3RoaW5nICVzUFJPVklERVMgJyVzJyAoYnV0ICVzICVzREVQRU5EUyBvbiBvciBvdGhlcndpc2UgcmVxdWlyZXMgaXQpJXMiLCByLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9kZXBlbmRlZXMpLCByLCBleHRyYSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnJXMiLCByLCBldmVudC5faXRlbSwgZXh0cmEpCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciByZWFzb24gaW4gZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIiwgcmVhc29uKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcgc2V0c2NlbmUgdGFzayAlZCBvZiAlZCAoJXMpIiAlIChldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxLCBldmVudC5zdGF0cy50b3RhbCwgZXZlbnQudGFza3N0cmluZykpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubm9leGVjOgorICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSA9ICdub2V4ZWMgdGFzaycKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSA9ICd0YXNrJworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSdW5uaW5nICVzICVzIG9mICVzIChJRDogJXMsICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuYWN0aXZlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMuZmFpbGVkICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy50b3RhbCwgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0ZhaWxlZCk6CisgICAgICAgICAgICAgICAgdGFza2ZhaWx1cmVzLmFwcGVuZChldmVudC50YXNrc3RyaW5nKQorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlNldHNjZW5lIHRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyAtIHJlYWwgdGFzayB3aWxsIGJlIHJ1biBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIGlnbm9yZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LkJ1aWxkQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5NZXRhZGF0YUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlN0YW1wVXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5SZWNpcGVQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIucnVucXVldWUucnVuUXVldWVFdmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25TdGFydGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25Qcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5EaXNrRnVsbCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5rbm93biBldmVudDogJXMiLCBldmVudCkKKworICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAgICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCisgICAgICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGlvZXJyb3IpKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgdGVybWZpbHRlci5jbGVhckZvb3RlcigpCisgICAgICAgICAgICBpZiBwYXJhbXMub2JzZXJ2ZV9vbmx5OgorICAgICAgICAgICAgICAgIHByaW50KCJcbktleWJvYXJkIEludGVycnVwdCwgZXhpdGluZyBvYnNlcnZlci4uLiIpCisgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbXMub2JzZXJ2ZV9vbmx5IGFuZCBtYWluLnNodXRkb3duID09IDE6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuU2Vjb25kIEtleWJvYXJkIEludGVycnVwdCwgc3RvcHBpbmcuLi5cbiIpCisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBjbGVhbmx5IHN0b3A6ICVzIiAlIGVycm9yKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHkgYW5kIG1haW4uc2h1dGRvd24gPT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiXG5LZXlib2FyZCBJbnRlcnJ1cHQsIGNsb3NpbmcgZG93bi4uLlxuIikKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBjbGVhbmx5IHNodXRkb3duOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSBtYWluLnNodXRkb3duICsgMQorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihlKSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbXMub2JzZXJ2ZV9vbmx5OgorICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAyCisgICAgdHJ5OgorICAgICAgICBzdW1tYXJ5ID0gIiIKKyAgICAgICAgaWYgdGFza2ZhaWx1cmVzOgorICAgICAgICAgICAgc3VtbWFyeSArPSBwbHVyYWxpc2UoIlxuU3VtbWFyeTogJXMgdGFzayBmYWlsZWQ6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblN1bW1hcnk6ICVzIHRhc2tzIGZhaWxlZDoiLCBsZW4odGFza2ZhaWx1cmVzKSkKKyAgICAgICAgICAgIGZvciBmYWlsdXJlIGluIHRhc2tmYWlsdXJlczoKKyAgICAgICAgICAgICAgICBzdW1tYXJ5ICs9ICJcbiAgJXMiICUgZmFpbHVyZQorICAgICAgICBpZiB3YXJuaW5nczoKKyAgICAgICAgICAgIHN1bW1hcnkgKz0gcGx1cmFsaXNlKCJcblN1bW1hcnk6IFRoZXJlIHdhcyAlcyBXQVJOSU5HIG1lc3NhZ2Ugc2hvd24uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblN1bW1hcnk6IFRoZXJlIHdlcmUgJXMgV0FSTklORyBtZXNzYWdlcyBzaG93bi4iLCB3YXJuaW5ncykKKyAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGFuZCBlcnJvcnM6CisgICAgICAgICAgICBzdW1tYXJ5ICs9IHBsdXJhbGlzZSgiXG5TdW1tYXJ5OiBUaGVyZSB3YXMgJXMgRVJST1IgbWVzc2FnZSBzaG93biwgcmV0dXJuaW5nIGEgbm9uLXplcm8gZXhpdCBjb2RlLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5TdW1tYXJ5OiBUaGVyZSB3ZXJlICVzIEVSUk9SIG1lc3NhZ2VzIHNob3duLCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuIiwgZXJyb3JzKQorICAgICAgICBpZiBzdW1tYXJ5OgorICAgICAgICAgICAgcHJpbnQoc3VtbWFyeSkKKworICAgICAgICBpZiBpbnRlcnJ1cHRlZDoKKyAgICAgICAgICAgIHByaW50KCJFeGVjdXRpb24gd2FzIGludGVycnVwdGVkLCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuIikKKyAgICAgICAgICAgIGlmIHJldHVybl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKKyAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiByZXR1cm5fdmFsdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvbmN1cnNlcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvbmN1cnNlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg5YTc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9uY3Vyc2VzLnB5CkBAIC0wLDAgKzEsMzczIEBACisjCisjIEJpdEJha2UgQ3Vyc2VzIFVJIEltcGxlbWVudGF0aW9uCisjCisjIEltcGxlbWVudHMgYW4gbmN1cnNlcyBmcm9udGVuZCBmb3IgdGhlIEJpdEJha2UgdXRpbGl0eS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIgorICAgIFdlIGhhdmUgdGhlIGZvbGxvd2luZyB3aW5kb3dzOgorCisgICAgICAgIDEuKSBNYWluIFdpbmRvdzogU2hvd3Mgd2hhdCB3ZSBhcmUgdWx0aW1hdGVseSBidWlsZGluZyBhbmQgaG93IGZhciB3ZSBhcmUuIEluY2x1ZGVzIHN0YXR1cyBiYXIKKyAgICAgICAgMi4pIFRocmVhZCBBY3Rpdml0eSBXaW5kb3c6IFNob3dzIG9uZSBzdGF0dXMgbGluZSBmb3IgZXZlcnkgY29uY3VycmVudCBiaXRiYWtlIHRocmVhZC4KKyAgICAgICAgMy4pIENvbW1hbmQgTGluZSBXaW5kb3c6IENvbnRhaW5zIGFuIGludGVyYWN0aXZlIGNvbW1hbmQgbGluZSB3aGVyZSB5b3UgY2FuIGludGVyYWN0IHcvIEJpdGJha2UuCisKKyAgICBCYXNpYyB3aW5kb3cgbGF5b3V0IGlzIGxpa2UgdGhhdDoKKworICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICB8IDxNYWluIFdpbmRvdz4gICAgICAgICAgICAgICB8IDxUaHJlYWQgQWN0aXZpdHkgV2luZG93PiAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDA6IGZvbyBkb19jb21waWxlIGNvbXBsZXRlfAorICAgICAgICB8IEJ1aWxkaW5nIEd0aystMi42LjEwICAgICAgICB8IDE6IGJhciBkb19wYXRjaCBjb21wbGV0ZSAgfAorICAgICAgICB8IFN0YXR1czogNjAlICAgICAgICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICB8PENvbW1hbmQgTGluZSBXaW5kb3c+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8Pj4+IHdoaWNoIHZpcnR1YWwva2VybmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8b3BlbnphdXJ1cy1rZXJuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8Pj4+IF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCisiIiIKKworCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLCBzeXMsIGl0ZXJ0b29scywgdGltZSwgc3VicHJvY2VzcworCit0cnk6CisgICAgaW1wb3J0IGN1cnNlcworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHN5cy5leGl0KCJGQVRBTDogVGhlIG5jdXJzZXMgdWkgY291bGQgbm90IGxvYWQgdGhlIHJlcXVpcmVkIGN1cnNlcyBweXRob24gbW9kdWxlLiIpCisKK2ltcG9ydCBiYgoraW1wb3J0IHhtbHJwY2xpYgorZnJvbSBiYiBpbXBvcnQgdWkKK2Zyb20gYmIudWkgaW1wb3J0IHVpaGVscGVyCisKK3BhcnNlc3BpbiA9IGl0ZXJ0b29scy5jeWNsZSggcid8Ly1cXCcgKQorCitYID0gMAorWSA9IDEKK1dJRFRIID0gMgorSEVJR0hUID0gMworCitNQVhTVEFUVVNMRU5HVEggPSAzMgorCitjbGFzcyBOQ3Vyc2VzVUk6CisgICAgIiIiCisgICAgTkN1cnNlcyBVSSBDbGFzcworICAgICIiIgorICAgIGNsYXNzIFdpbmRvdzoKKyAgICAgICAgIiIiQmFzZSBXaW5kb3cgQ2xhc3MiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmZz1jdXJzZXMuQ09MT1JfQkxBQ0ssIGJnPWN1cnNlcy5DT0xPUl9XSElURSApOgorICAgICAgICAgICAgc2VsZi53aW4gPSBjdXJzZXMubmV3d2luKCBoZWlnaHQsIHdpZHRoLCB5LCB4ICkKKyAgICAgICAgICAgIHNlbGYuZGltZW5zaW9ucyA9ICggeCwgeSwgd2lkdGgsIGhlaWdodCApCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6CisgICAgICAgICAgICAgICAgY29sb3IgPSAxCisgICAgICAgICAgICAgICAgY3Vyc2VzLmluaXRfcGFpciggY29sb3IsIGZnLCBiZyApCisgICAgICAgICAgICAgICAgc2VsZi53aW4uYmtnZHNldCggb3JkKCcgJyksIGN1cnNlcy5jb2xvcl9wYWlyKGNvbG9yKSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud2luLmJrZ2RzZXQoIG9yZCgnICcpLCBjdXJzZXMuQV9CT0xEICkKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi5lcmFzZSgpCisgICAgICAgICAgICBzZWxmLnNldFNjcm9sbGluZygpCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICAgICAgZGVmIGVyYXNlKCBzZWxmICk6CisgICAgICAgICAgICBzZWxmLndpbi5lcmFzZSgpCisKKyAgICAgICAgZGVmIHNldFNjcm9sbGluZyggc2VsZiwgYiA9IFRydWUgKToKKyAgICAgICAgICAgIHNlbGYud2luLnNjcm9sbG9rKCBiICkKKyAgICAgICAgICAgIHNlbGYud2luLmlkbG9rKCBiICkKKworICAgICAgICBkZWYgc2V0Qm94ZWQoIHNlbGYgKToKKyAgICAgICAgICAgIHNlbGYuYm94ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndpbi5ib3goKQorICAgICAgICAgICAgc2VsZi53aW4ubm91dHJlZnJlc2goKQorCisgICAgICAgIGRlZiBzZXRUZXh0KCBzZWxmLCB4LCB5LCB0ZXh0LCAqYXJncyApOgorICAgICAgICAgICAgc2VsZi53aW4uYWRkc3RyKCB5LCB4LCB0ZXh0LCAqYXJncyApCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICAgICAgZGVmIGFwcGVuZFRleHQoIHNlbGYsIHRleHQsICphcmdzICk6CisgICAgICAgICAgICBzZWxmLndpbi5hZGRzdHIoIHRleHQsICphcmdzICkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgICAgICBkZWYgZHJhd0hsaW5lKCBzZWxmLCB5ICk6CisgICAgICAgICAgICBzZWxmLndpbi5obGluZSggeSwgMCwgY3Vyc2VzLkFDU19ITElORSwgc2VsZi5kaW1lbnNpb25zW1dJRFRIXSApCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICBjbGFzcyBEZWNvcmF0ZWRXaW5kb3coIFdpbmRvdyApOgorICAgICAgICAiIiJCYXNlIGNsYXNzIGZvciB3aW5kb3dzIHdpdGggYSBib3ggYW5kIGEgdGl0bGUgYmFyIiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgdGl0bGUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnPWN1cnNlcy5DT0xPUl9CTEFDSywgYmc9Y3Vyc2VzLkNPTE9SX1dISVRFICk6CisgICAgICAgICAgICBOQ3Vyc2VzVUkuV2luZG93Ll9faW5pdF9fKCBzZWxmLCB4KzEsIHkrMywgd2lkdGgtMiwgaGVpZ2h0LTQsIGZnLCBiZyApCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24gPSBOQ3Vyc2VzVUkuV2luZG93KCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmZywgYmcgKQorICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLnNldEJveGVkKCkKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi53aW4uaGxpbmUoIDIsIDEsIGN1cnNlcy5BQ1NfSExJTkUsIHdpZHRoLTIgKQorICAgICAgICAgICAgc2VsZi5zZXRUaXRsZSggdGl0bGUgKQorCisgICAgICAgIGRlZiBzZXRUaXRsZSggc2VsZiwgdGl0bGUgKToKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCAxLCAxLCB0aXRsZS5jZW50ZXIoIHNlbGYuZGltZW5zaW9uc1tXSURUSF0tMiApLCBjdXJzZXMuQV9CT0xEICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIyAgICBjbGFzcyBUaXRsZVdpbmRvdyggV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjICAgICAgICAiIiJUaXRsZSBXaW5kb3ciIiIKKyMgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorIyAgICAgICAgICAgIE5DdXJzZXNVSS5XaW5kb3cuX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorIyAgICAgICAgICAgIHZlcnNpb24gPSBiYi5fX3ZlcnNpb25fXworIyAgICAgICAgICAgIHRpdGxlID0gIkJpdEJha2UgJXMiICUgdmVyc2lvbgorIyAgICAgICAgICAgIGNyZWRpdCA9ICIoQykgMjAwMy0yMDA3IFRlYW0gQml0QmFrZSIKKyMgICAgICAgICAgICAjc2VsZi53aW4uaGxpbmUoIDIsIDEsIGN1cnNlcy5BQ1NfSExJTkUsIHdpZHRoLTIgKQorIyAgICAgICAgICAgIHNlbGYud2luLmJvcmRlcigpCisjICAgICAgICAgICAgc2VsZi5zZXRUZXh0KCAxLCAxLCB0aXRsZS5jZW50ZXIoIHNlbGYuZGltZW5zaW9uc1tXSURUSF0tMiApLCBjdXJzZXMuQV9CT0xEICkKKyMgICAgICAgICAgICBzZWxmLnNldFRleHQoIDEsIDIsIGNyZWRpdC5jZW50ZXIoIHNlbGYuZGltZW5zaW9uc1tXSURUSF0tMiApLCBjdXJzZXMuQV9CT0xEICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGNsYXNzIFRocmVhZEFjdGl2aXR5V2luZG93KCBEZWNvcmF0ZWRXaW5kb3cgKToKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyAgICAgICAgIiIiVGhyZWFkIEFjdGl2aXR5IFdpbmRvdyIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKToKKyAgICAgICAgICAgIE5DdXJzZXNVSS5EZWNvcmF0ZWRXaW5kb3cuX19pbml0X18oIHNlbGYsICJUaHJlYWQgQWN0aXZpdHkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKworICAgICAgICBkZWYgc2V0U3RhdHVzKCBzZWxmLCB0aHJlYWQsIHRleHQgKToKKyAgICAgICAgICAgIGxpbmUgPSAiJTAyZDogJXMiICUgKCB0aHJlYWQsIHRleHQgKQorICAgICAgICAgICAgd2lkdGggPSBzZWxmLmRpbWVuc2lvbnNbV0lEVEhdCisgICAgICAgICAgICBpZiAoIGxlbihsaW5lKSA+IHdpZHRoICk6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOndpZHRoLTNdICsgIi4uLiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubGp1c3QoIHdpZHRoICkKKyAgICAgICAgICAgIHNlbGYuc2V0VGV4dCggMCwgdGhyZWFkLCBsaW5lICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGNsYXNzIE1haW5XaW5kb3coIERlY29yYXRlZFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJNYWluIFdpbmRvdyIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKToKKyAgICAgICAgICAgIHNlbGYuU3RhdHVzUG9zaXRpb24gPSB3aWR0aCAtIE1BWFNUQVRVU0xFTkdUSAorICAgICAgICAgICAgTkN1cnNlc1VJLkRlY29yYXRlZFdpbmRvdy5fX2luaXRfXyggc2VsZiwgTm9uZSwgeCwgeSwgd2lkdGgsIGhlaWdodCApCisgICAgICAgICAgICBjdXJzZXMubmwoKQorCisgICAgICAgIGRlZiBzZXRUaXRsZSggc2VsZiwgdGl0bGUgKToKKyAgICAgICAgICAgIHRpdGxlID0gIkJpdEJha2UgJXMiICUgYmIuX192ZXJzaW9uX18KKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCAyLCAxLCB0aXRsZSwgY3Vyc2VzLkFfQk9MRCApCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24uc2V0VGV4dCggc2VsZi5TdGF0dXNQb3NpdGlvbiAtIDgsIDEsICJTdGF0dXM6IiwgY3Vyc2VzLkFfQk9MRCApCisKKyAgICAgICAgZGVmIHNldFN0YXR1cyhzZWxmLCBzdGF0dXMpOgorICAgICAgICAgICAgd2hpbGUgbGVuKHN0YXR1cykgPCBNQVhTVEFUVVNMRU5HVEg6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzICsgIiAiCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24uc2V0VGV4dCggc2VsZi5TdGF0dXNQb3NpdGlvbiwgMSwgc3RhdHVzLCBjdXJzZXMuQV9CT0xEICkKKworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgU2hlbGxPdXRwdXRXaW5kb3coIERlY29yYXRlZFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJJbnRlcmFjdGl2ZSBDb21tYW5kIExpbmUgT3V0cHV0IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorICAgICAgICAgICAgTkN1cnNlc1VJLkRlY29yYXRlZFdpbmRvdy5fX2luaXRfXyggc2VsZiwgIkNvbW1hbmQgTGluZSBXaW5kb3ciLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGNsYXNzIFNoZWxsSW5wdXRXaW5kb3coIFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJJbnRlcmFjdGl2ZSBDb21tYW5kIExpbmUgSW5wdXQiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk6CisgICAgICAgICAgICBOQ3Vyc2VzVUkuV2luZG93Ll9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKworIyBwdXQgdGhhdCB0byB0aGUgdG9wIGFnYWluIGZyb20gY3Vyc2VzLnRleHRwYWQgaW1wb3J0IFRleHRib3gKKyMgICAgICAgICAgICBzZWxmLnRleHRib3ggPSBUZXh0Ym94KCBzZWxmLndpbiApCisjICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQoKQorIyAgICAgICAgICAgIHQucnVuID0gc2VsZi50ZXh0Ym94LmVkaXQKKyMgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgIGRlZiBtYWluKHNlbGYsIHN0ZHNjciwgc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgIGhlaWdodCwgd2lkdGggPSBzdGRzY3IuZ2V0bWF4eXgoKQorCisgICAgICAgICMgZm9yIG5vdyBzcGxpdCBpdCBsaWtlIHRoYXQ6CisgICAgICAgICMgTUFJTl95ICsgVEhSRUFEX3kgPSAyLzMgc2NyZWVuIGF0IHRoZSB0b3AKKyAgICAgICAgIyBNQUlOX3ggPSAyLzMgbGVmdCwgVEhSRUFEX3kgPSAxLzMgcmlnaHQKKyAgICAgICAgIyBDTElfeSA9IDEvMyBvZiBzY3JlZW4gYXQgdGhlIGJvdHRvbQorICAgICAgICAjIENMSV94ID0gZnVsbAorCisgICAgICAgIG1haW5fbGVmdCA9IDAKKyAgICAgICAgbWFpbl90b3AgPSAwCisgICAgICAgIG1haW5faGVpZ2h0ID0gKCBoZWlnaHQgLy8gMyAqIDIgKQorICAgICAgICBtYWluX3dpZHRoID0gKCB3aWR0aCAvLyAzICkgKiAyCisgICAgICAgIGNsb19sZWZ0ID0gbWFpbl9sZWZ0CisgICAgICAgIGNsb190b3AgPSBtYWluX3RvcCArIG1haW5faGVpZ2h0CisgICAgICAgIGNsb19oZWlnaHQgPSBoZWlnaHQgLSBtYWluX2hlaWdodCAtIG1haW5fdG9wIC0gMQorICAgICAgICBjbG9fd2lkdGggPSB3aWR0aAorICAgICAgICBjbGlfbGVmdCA9IG1haW5fbGVmdAorICAgICAgICBjbGlfdG9wID0gY2xvX3RvcCArIGNsb19oZWlnaHQKKyAgICAgICAgY2xpX2hlaWdodCA9IDEKKyAgICAgICAgY2xpX3dpZHRoID0gd2lkdGgKKyAgICAgICAgdGhyZWFkX2xlZnQgPSBtYWluX2xlZnQgKyBtYWluX3dpZHRoCisgICAgICAgIHRocmVhZF90b3AgPSBtYWluX3RvcAorICAgICAgICB0aHJlYWRfaGVpZ2h0ID0gbWFpbl9oZWlnaHQKKyAgICAgICAgdGhyZWFkX3dpZHRoID0gd2lkdGggLSBtYWluX3dpZHRoCisKKyAgICAgICAgI3R3ID0gc2VsZi5UaXRsZVdpbmRvdyggMCwgMCwgd2lkdGgsIG1haW5fdG9wICkKKyAgICAgICAgbXcgPSBzZWxmLk1haW5XaW5kb3coIG1haW5fbGVmdCwgbWFpbl90b3AsIG1haW5fd2lkdGgsIG1haW5faGVpZ2h0ICkKKyAgICAgICAgdGF3ID0gc2VsZi5UaHJlYWRBY3Rpdml0eVdpbmRvdyggdGhyZWFkX2xlZnQsIHRocmVhZF90b3AsIHRocmVhZF93aWR0aCwgdGhyZWFkX2hlaWdodCApCisgICAgICAgIGNsbyA9IHNlbGYuU2hlbGxPdXRwdXRXaW5kb3coIGNsb19sZWZ0LCBjbG9fdG9wLCBjbG9fd2lkdGgsIGNsb19oZWlnaHQgKQorICAgICAgICBjbGkgPSBzZWxmLlNoZWxsSW5wdXRXaW5kb3coIGNsaV9sZWZ0LCBjbGlfdG9wLCBjbGlfd2lkdGgsIGNsaV9oZWlnaHQgKQorICAgICAgICBjbGkuc2V0VGV4dCggMCwgMCwgIkJCPiIgKQorCisgICAgICAgIG13LnNldFN0YXR1cygiSWRsZSIpCisKKyAgICAgICAgaGVscGVyID0gdWloZWxwZXIuQkJVSUhlbHBlcigpCisgICAgICAgIHNodXRkb3duID0gMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcmFtcy51cGRhdGVGcm9tU2VydmVyKHNlcnZlcikKKyAgICAgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgICAgIHByaW50KCJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIikKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgaWYgJ21zZycgaW4gY21kbGluZSBhbmQgY21kbGluZVsnbXNnJ106CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGNtZGxpbmVbJ21zZyddKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBjbWRsaW5lID0gY21kbGluZVsnYWN0aW9uJ10KKyAgICAgICAgICAgIHJldCwgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChjbWRsaW5lKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiAlcyIgJSAoY21kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxpZiByZXQgIT0gVHJ1ZToKKyAgICAgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZ2V0IGRlZmF1bHQgY29tbWFuZGxpbmQhICVzIiAlIHJldCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IHhtbHJwY2xpYi5GYXVsdCBhcyB4OgorICAgICAgICAgICAgcHJpbnQoIlhNTFJQQyBGYXVsdCBnZXR0aW5nIGNvbW1hbmRsaW5lOlxuICVzIiAlIHgpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBleGl0ZmxhZyA9IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCBleGl0ZmxhZzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMC4yNSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZXZlbnQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBoZWxwZXIuZXZlbnRIYW5kbGVyKGV2ZW50KQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiTk9URTogJXNcbiIgJSBldmVudC5fbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQobG9nZ2luZy5nZXRMZXZlbE5hbWUoZXZlbnQubGV2ZWxubykgKyAnOiAnICsgZXZlbnQuZ2V0TWVzc2FnZSgpICsgJ1xuJykKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgICAgIHggPSBldmVudC5jdXJyZW50CisgICAgICAgICAgICAgICAgICAgIHkgPSBzZWxmLnBhcnNlX3RvdGFsCisgICAgICAgICAgICAgICAgICAgIG13LnNldFN0YXR1cygiTG9hZGluZyBDYWNoZTogICAlcyBbJTJkICUlXSIgJSAoIG5leHQocGFyc2VzcGluKSwgeCoxMDAveSApICkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICBtdy5zZXRTdGF0dXMoIklkbGUiKQorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJMb2FkZWQgJWQgZW50cmllcyBmcm9tIGRlcGVuZGVuY3kgY2FjaGUuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKCBldmVudC5udW1fZW50cmllcykpCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVByb2dyZXNzKToKKyAgICAgICAgICAgICAgICAgICAgeCA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgeSA9IHNlbGYucGFyc2VfdG90YWwKKyAgICAgICAgICAgICAgICAgICAgbXcuc2V0U3RhdHVzKCJQYXJzaW5nIFJlY2lwZXM6ICVzIFslMmQgJSVdIiAlICggbmV4dChwYXJzZXNwaW4pLCB4KjEwMC95ICkgKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICAgICAgbXcuc2V0U3RhdHVzKCJJZGxlIikKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiUGFyc2luZyBmaW5pc2hlZC4gJWQgY2FjaGVkLCAlZCBwYXJzZWQsICVkIHNraXBwZWQsICVkIG1hc2tlZC5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoIGV2ZW50LmNhY2hlZCwgZXZlbnQucGFyc2VkLCBldmVudC5za2lwcGVkLCBldmVudC5tYXNrZWQgKSkKKworIyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyMgICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxvZ2ZpbGU6CisjICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXIoIkJCSU5DTFVERUxPR1MiLCBkKToKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoImxvZyBkYXRhIGZvbGxvd3MgKCVzKSIgJSBsb2dmaWxlKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfbGluZXMgPSBkYXRhLmdldFZhcigiQkJJTkNMVURFTE9HU19MSU5FUyIsIGQpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bWJlcl9vZl9saW5lczoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgndGFpbCAtbiVzICVzJyAlIChudW1iZXJfb2ZfbGluZXMsIGxvZ2ZpbGUpLCBzaGVsbD1UcnVlKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4obG9nZmlsZSwgInIiKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZi5yZWFkbGluZSgpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbCA9PSAnJzoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICd8ICVzJyAlIGwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorIyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJzZWUgbG9nIGluICVzIiAlIGxvZ2ZpbGUpCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICAjIHN0b3Agc28gdGhlIHVzZXIgY2FuIHNlZSB0aGUgcmVzdWx0IG9mIHRoZSBidWlsZCwgYnV0CisgICAgICAgICAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtIHRvIG5vdyBleGl0IHdpdGggYSBzaW5nbGUgXkMKKyAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24gPSAyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSBldmVudC5lcnJvcikKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICAgICAgICAgICAgICBleGl0ZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRFeGl0KToKKyAgICAgICAgICAgICAgICAgICAgZXhpdGZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29va2VyLkNvb2tlckV4aXQpOgorICAgICAgICAgICAgICAgICAgICBleGl0ZmxhZyA9IFRydWUKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkxvZ0V4ZWNUVFkpOgorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCdXQVJOOiAnICsgZXZlbnQubXNnICsgJ1xuJykKKyAgICAgICAgICAgICAgICBpZiBoZWxwZXIubmVlZFVwZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZldGFza3MsIGZhaWxlZHRhc2tzID0gaGVscGVyLmdldFRhc2tzKCkKKyAgICAgICAgICAgICAgICAgICAgdGF3LmVyYXNlKCkKKyAgICAgICAgICAgICAgICAgICAgdGF3LnNldFRleHQoMCwgMCwgIiIpCisgICAgICAgICAgICAgICAgICAgIGlmIGFjdGl2ZXRhc2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGF3LmFwcGVuZFRleHQoIkFjdGl2ZSBUYXNrczpcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiBhY3RpdmV0YXNrcy5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF3LmFwcGVuZFRleHQodGFza1sidGl0bGUiXSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIGlmIGZhaWxlZHRhc2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGF3LmFwcGVuZFRleHQoIkZhaWxlZCBUYXNrczpcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFzayBpbiBmYWlsZWR0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCh0YXNrWyJ0aXRsZSJdICsgJ1xuJykKKworICAgICAgICAgICAgICAgIGN1cnNlcy5kb3VwZGF0ZSgpCisgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgICAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIGlmIHNodXRkb3duID09IDI6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIlRoaXJkIEtleWJvYXJkIEludGVycnVwdCwgZXhpdC5cbiIpCisgICAgICAgICAgICAgICAgICAgIGV4aXRmbGFnID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIHNodXRkb3duID09IDE6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIlNlY29uZCBLZXlib2FyZCBJbnRlcnJ1cHQsIHN0b3BwaW5nLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlVuYWJsZSB0byBjbGVhbmx5IHN0b3A6ICVzIiAlIGVycm9yKQorICAgICAgICAgICAgICAgIGlmIHNodXRkb3duID09IDA6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIktleWJvYXJkIEludGVycnVwdCwgY2xvc2luZyBkb3duLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJVbmFibGUgdG8gY2xlYW5seSBzaHV0ZG93bjogJXMiICUgZXJyb3IpCisgICAgICAgICAgICAgICAgc2h1dGRvd24gPSBzaHV0ZG93biArIDEKKyAgICAgICAgICAgICAgICBwYXNzCisKK2RlZiBtYWluKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpOgorICAgIGlmIG5vdCBvcy5pc2F0dHkoc3lzLnN0ZG91dC5maWxlbm8oKSk6CisgICAgICAgIHByaW50KCJGQVRBTDogVW5hYmxlIHRvIHJ1biAnbmN1cnNlcycgVUkgd2l0aG91dCBhIFRUWS4iKQorICAgICAgICByZXR1cm4KKyAgICB1aSA9IE5DdXJzZXNVSSgpCisgICAgdHJ5OgorICAgICAgICBjdXJzZXMud3JhcHBlcih1aS5tYWluLCBzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zKQorICAgIGV4Y2VwdDoKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvcHVjY2hvLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS9wdWNjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlNDU5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvcHVjY2hvLnB5CkBAIC0wLDAgKzEsNDI1IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrLmdsYWRlCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IG9zCitpbXBvcnQgY29udGV4dGxpYgorCitmcm9tIGJiLnVpLmNydW1icy5idWlsZG1hbmFnZXIgaW1wb3J0IEJ1aWxkTWFuYWdlciwgQnVpbGRDb25maWd1cmF0aW9uCitmcm9tIGJiLnVpLmNydW1icy5idWlsZG1hbmFnZXIgaW1wb3J0IEJ1aWxkTWFuYWdlclRyZWVWaWV3CisKK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgUnVubmluZ0J1aWxkLCBSdW5uaW5nQnVpbGRUcmVlVmlldworCisjIFRoZSBtZXRhZGF0YSBsb2FkZXIgaXMgdXNlZCBieSB0aGUgQnVpbGRTZXR1cERpYWxvZyB0byBkb3dubG9hZCB0aGUKKyMgYXZhaWxhYmxlIG9wdGlvbnMgdG8gcG9wdWxhdGUgdGhlIGRpYWxvZworY2xhc3MgTWV0YURhdGFMb2FkZXIoZ29iamVjdC5HT2JqZWN0KToKKyAgICAiIiIgVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgbWVjaGFuaXNtIGZvciBsb2FkaW5nIHRoZSBtZXRhZGF0YSAodGhlCisgICAgZmV0Y2hpbmcgYW5kIHBhcnNpbmcpIGZyb20gYSBnaXZlbiBVUkwuIFRoZSBtZXRhZGF0YSBlbmNvbXBhc3NlcyBkZXRhaWxzCisgICAgb24gd2hhdCBtYWNoaW5lcyBhcmUgYXZhaWxhYmxlLiBUaGUgZGlzdHJpYnV0aW9uIGFuZCBpbWFnZXMgYXZhaWxhYmxlIGZvcgorICAgIHRoZSBtYWNoaW5lIGFuZCB0aGUgdGhlIHVyaXMgdG8gdXNlIGZvciBidWlsZGluZyB0aGUgZ2l2ZW4gbWFjaGluZS4iIiIKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICdzdWNjZXNzJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAnZXJyb3InIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpCisgICAgICAgIH0KKworICAgICMgV2UgdXNlIHRoZXNlIGxpdHRsZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGF0IHdlIHRha2UgdGhlIGdkayBsb2NrCisgICAgIyB3aGVuIGVtaXR0aW5nIHRoZSBzaWduYWwuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFzIGlkbGVzIChzbyB0aGF0CisgICAgIyB0aGV5IGhhcHBlbiBpbiB0aGUgZ3RrIC8gbWFpbiB0aHJlYWQncyBtYWluIGxvb3AuCisgICAgZGVmIGVtaXRfZXJyb3Jfc2lnbmFsIChzZWxmLCByZW1hcmspOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmVtaXQgKCJlcnJvciIsIHJlbWFyaykKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGRlZiBlbWl0X3N1Y2Nlc3Nfc2lnbmFsIChzZWxmKToKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgc2VsZi5lbWl0ICgic3VjY2VzcyIpCisgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBnb2JqZWN0LkdPYmplY3QuX19pbml0X18gKHNlbGYpCisKKyAgICBjbGFzcyBMb2FkZXJUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICIiIiBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGFzeW5jaHJvbm91cyBsb2FkZXIgZm9yIHRoZSBtZXRhZGF0YSAoYnkKKyAgICAgICAgdXNpbmcgdGhyZWFkcyBhbmQgc2lnbmFscykuIFRoaXMgaXMgdXNlZnVsIHNpbmNlIHRoZSBtZXRhZGF0YSBtYXkgYmUKKyAgICAgICAgYXQgYSByZW1vdGUgVVJMLiIiIgorICAgICAgICBjbGFzcyBMb2FkZXJJbXBvcnRFeGNlcHRpb24gKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvYWRlciwgdXJsKToKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18gKHNlbGYpCisgICAgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKKworICAgICAgICBkZWYgcnVuIChzZWxmKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3NpbmcgKHVybGxpYjIudXJsb3BlbiAoc2VsZi51cmwpKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAjIFBhcnNlIHRoZSBtZXRhZGF0YSBmb3JtYXQuIFRoZSBmb3JtYXQgaXMuLi4uCisgICAgICAgICAgICAgICAgICAgICMgPG1hY2hpbmU+OzxkZWZhdWx0IGRpc3Rybz58PGRpc3Rybz4uLi47PGRlZmF1bHQgaW1hZ2U+fDxpbWFnZT4uLi47PHR5cGUjI3VybD58Li4uCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gbGluZS5zcGxpdCgiOyIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuIChjb21wb25lbnRzKSA8IDQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE1ldGFEYXRhTG9hZGVyLkxvYWRlclRocmVhZC5Mb2FkZXJJbXBvcnRFeGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBjb21wb25lbnRzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm9zID0gY29tcG9uZW50c1sxXS5zcGxpdCgifCIpCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgPSBjb21wb25lbnRzWzJdLnNwbGl0KCJ8IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSBjb21wb25lbnRzWzNdLnNwbGl0KCJ8IikKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W21hY2hpbmVdID0gKGRpc3Ryb3MsIGltYWdlcywgdXJscykKKworICAgICAgICAgICAgICAgICMgQ3JlYXRlIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyAqcG90ZW50aWFsKgorICAgICAgICAgICAgICAgICMgY29uZmlndXJhdGlvbi4gSXQgY2FuIGJlY29tZSBjb25jcmV0ZSBpZiB0aGUgbWFjaGluZSwgZGlzdHJvCisgICAgICAgICAgICAgICAgIyBhbmQgaW1hZ2UgYXJlIGFsbCBjaG9zZW4gaW4gdGhlIFVJCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IEJ1aWxkQ29uZmlndXJhdGlvbigpCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5tZXRhZGF0YV91cmwgPSBzZWxmLnVybAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ubWFjaGluZV9vcHRpb25zID0gcmVzdWx0CisgICAgICAgICAgICAgICAgc2VsZi5sb2FkZXIuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKworICAgICAgICAgICAgICAgICMgRW1pdCB0aGF0IHdlJ3ZlIGFjdHVhbGx5IGdvdCBhIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBnb2JqZWN0LmlkbGVfYWRkIChNZXRhRGF0YUxvYWRlci5lbWl0X3N1Y2Nlc3Nfc2lnbmFsLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRlcikKKworICAgICAgICAgICAgZXhjZXB0IE1ldGFEYXRhTG9hZGVyLkxvYWRlclRocmVhZC5Mb2FkZXJJbXBvcnRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBnb2JqZWN0LmlkbGVfYWRkIChNZXRhRGF0YUxvYWRlci5lbWl0X2Vycm9yX3NpZ25hbCwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICJSZXBvc2l0b3J5IG1ldGFkYXRhIGNvcnJ1cHQiKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGdvYmplY3QuaWRsZV9hZGQgKE1ldGFEYXRhTG9hZGVyLmVtaXRfZXJyb3Jfc2lnbmFsLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBkb3dubG9hZCByZXBvc2l0b3J5IG1ldGFkYXRhIikKKyAgICAgICAgICAgICAgICBwcmludChlKQorCisgICAgZGVmIHRyeV9mZXRjaF9mcm9tX3VybCAoc2VsZiwgdXJsKToKKyAgICAgICAgIyBUcnkgYW5kIGRvd25sb2FkIHRoZSBtZXRhZGF0YS4gRmlyaW5nIGEgc2lnbmFsIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAgdGhyZWFkID0gTWV0YURhdGFMb2FkZXIuTG9hZGVyVGhyZWFkKHNlbGYsIHVybCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKworY2xhc3MgQnVpbGRTZXR1cERpYWxvZyAoZ3RrLkRpYWxvZyk6CisgICAgUkVTUE9OU0VfQlVJTEQgPSAxCisKKyAgICAjIEEgbGl0dGxlIGhlbHBlciBtZXRob2QgdGhhdCBqdXN0IHNldHMgdGhlIHN0YXRlcyBvbiB0aGUgd2lkZ2V0cyBiYXNlZCBvbgorICAgICMgd2hldGhlciB3ZSd2ZSBnb3QgZ29vZCBtZXRhZGF0YSBvciBub3QuCisgICAgZGVmIHNldF9jb25maWd1cmFibGUgKHNlbGYsIGNvbmZpZ3VyYWJsZSk6CisgICAgICAgIGlmIChzZWxmLmNvbmZpZ3VyYWJsZSA9PSBjb25maWd1cmFibGUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jb25maWd1cmFibGUgPSBjb25maWd1cmFibGUKKyAgICAgICAgZm9yIHdpZGdldCBpbiBzZWxmLmNvbmZfd2lkZ2V0czoKKyAgICAgICAgICAgIHdpZGdldC5zZXRfc2Vuc2l0aXZlIChjb25maWd1cmFibGUpCisKKyAgICAgICAgaWYgbm90IGNvbmZpZ3VyYWJsZToKKyAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfYWN0aXZlICgtMSkKKyAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLnNldF9hY3RpdmUgKC0xKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5zZXRfYWN0aXZlICgtMSkKKworICAgICMgR1RLIHdpZGdldCBjYWxsYmFja3MKKyAgICBkZWYgcmVmcmVzaF9idXR0b25fY2xpY2tlZCAoc2VsZiwgYnV0dG9uKToKKyAgICAgICAgIyBSZWZyZXNoIGJ1dHRvbiBjbGlja2VkLgorCisgICAgICAgIHVybCA9IHNlbGYubG9jYXRpb25fZW50cnkuZ2V0X2NoYXJzICgwLCAtMSkKKyAgICAgICAgc2VsZi5sb2FkZXIudHJ5X2ZldGNoX2Zyb21fdXJsKHVybCkKKworICAgIGRlZiByZXBvc2l0b3J5X2VudHJ5X2VkaXRhYmxlX2NoYW5nZWQgKHNlbGYsIGVudHJ5KToKKyAgICAgICAgaWYgKGxlbiAoZW50cnkuZ2V0X2NoYXJzICgwLCAtMSkpID4gMCk6CisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfYnV0dG9uLnNldF9zZW5zaXRpdmUgKFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJlZnJlc2hfYnV0dG9uLnNldF9zZW5zaXRpdmUgKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdGF0dXNfbWVzc2FnZSgpCisKKyAgICAgICAgIyBJZiB3ZSB3ZXJlIHByZXZpb3VzbHkgY29uZmlndXJhYmxlIHdlIGFyZSBubyBsb25nZXIgc2luY2UgdGhlCisgICAgICAgICMgbG9jYXRpb24gZW50cnkgaGFzIGJlZW4gY2hhbmdlZAorICAgICAgICBzZWxmLnNldF9jb25maWd1cmFibGUgKEZhbHNlKQorCisgICAgZGVmIG1hY2hpbmVfY29tYm9fY2hhbmdlZCAoc2VsZiwgY29tYm9ib3gpOgorICAgICAgICBhY3RpdmVfaXRlciA9IGNvbWJvYm94LmdldF9hY3RpdmVfaXRlcigpCisKKyAgICAgICAgaWYgbm90IGFjdGl2ZV9pdGVyOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbW9kZWwgPSBjb21ib2JveC5nZXRfbW9kZWwoKQorCisgICAgICAgIGlmIG1vZGVsOgorICAgICAgICAgICAgY2hvc2VuX21hY2hpbmUgPSBtb2RlbC5nZXQgKGFjdGl2ZV9pdGVyLCAwKVswXQorCisgICAgICAgIChkaXN0cm9zX21vZGVsLCBpbWFnZXNfbW9kZWwpID0gXAorICAgICAgICAgICAgc2VsZi5sb2FkZXIuY29uZmlndXJhdGlvbi5nZXRfZGlzdHJvX2FuZF9pbWFnZXNfbW9kZWxzIChjaG9zZW5fbWFjaGluZSkKKworICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbl9jb21iby5zZXRfbW9kZWwgKGRpc3Ryb3NfbW9kZWwpCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uc2V0X21vZGVsIChpbWFnZXNfbW9kZWwpCisKKyAgICAjIENhbGxiYWNrcyBmcm9tIHRoZSBsb2FkZXIKKyAgICBkZWYgbG9hZGVyX3N1Y2Nlc3NfY2IgKHNlbGYsIGxvYWRlcik6CisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNldF9mcm9tX2ljb25fbmFtZSAoImluZm8iLAorICAgICAgICAgICAgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNob3coKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbC5zZXRfbGFiZWwgKCJSZXBvc2l0b3J5IG1ldGFkYXRhIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIikKKworICAgICAgICAjIFNldCB0aGUgbW9kZWxzIG9uIHRoZSBjb21ibyBib3hlcyBiYXNlZCBvbiB0aGUgbW9kZWxzIGdlbmVyYXRlZCBmcm9tCisgICAgICAgICMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB0aGUgbG9hZGVyIGhhcyBjcmVhdGVkCisKKyAgICAgICAgIyBXZSBqdXN0IG5lZWQgdG8gc2V0IHRoZSBtYWNoaW5lIGhlcmUsIHRoYXQgdGhlbiBkZXRlcm1pbmVzIHRoZQorICAgICAgICAjIGRpc3RybyBhbmQgaW1hZ2Ugb3B0aW9ucy4gQ3VubmluZyBodWg/IDotKQorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IHNlbGYubG9hZGVyLmNvbmZpZ3VyYXRpb24KKyAgICAgICAgbW9kZWwgPSBzZWxmLmNvbmZpZ3VyYXRpb24uZ2V0X21hY2hpbmVzX21vZGVsICgpCisgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5zZXRfbW9kZWwgKG1vZGVsKQorCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ3VyYWJsZSAoVHJ1ZSkKKworICAgIGRlZiBsb2FkZXJfZXJyb3JfY2IgKHNlbGYsIGxvYWRlciwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNldF9mcm9tX2ljb25fbmFtZSAoImVycm9yIiwKKyAgICAgICAgICAgIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorICAgICAgICBzZWxmLnN0YXR1c19pbWFnZS5zaG93KCkKKyAgICAgICAgc2VsZi5zdGF0dXNfbGFiZWwuc2V0X3RleHQgKCJFcnJvciBkb3dubG9hZGluZyByZXBvc2l0b3J5IG1ldGFkYXRhIikKKyAgICAgICAgZm9yIHdpZGdldCBpbiBzZWxmLmNvbmZfd2lkZ2V0czoKKyAgICAgICAgICAgIHdpZGdldC5zZXRfc2Vuc2l0aXZlIChGYWxzZSkKKworICAgIGRlZiBjbGVhcl9zdGF0dXNfbWVzc2FnZSAoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLmhpZGUoKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbC5zZXRfbGFiZWwgKAorICAgICAgICAgICAgIiIiPGk+RW50ZXIgdGhlIHJlcG9zaXRvcnkgbG9jYXRpb24gYW5kIHByZXNzIF9SZWZyZXNoPC9pPiIiIikKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5EaWFsb2cuX19pbml0X18gKHNlbGYpCisKKyAgICAgICAgIyBDYW5jZWwKKyAgICAgICAgc2VsZi5hZGRfYnV0dG9uIChndGsuU1RPQ0tfQ0FOQ0VMLCBndGsuUkVTUE9OU0VfQ0FOQ0VMKQorCisgICAgICAgICMgQnVpbGQKKyAgICAgICAgYnV0dG9uID0gZ3RrLkJ1dHRvbiAoIl9CdWlsZCIsIE5vbmUsIFRydWUpCisgICAgICAgIGltYWdlID0gZ3RrLkltYWdlICgpCisgICAgICAgIGltYWdlLnNldF9mcm9tX3N0b2NrIChndGsuU1RPQ0tfRVhFQ1VURSwgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIGJ1dHRvbi5zZXRfaW1hZ2UgKGltYWdlKQorICAgICAgICBzZWxmLmFkZF9hY3Rpb25fd2lkZ2V0IChidXR0b24sIEJ1aWxkU2V0dXBEaWFsb2cuUkVTUE9OU0VfQlVJTEQpCisgICAgICAgIGJ1dHRvbi5zaG93X2FsbCAoKQorCisgICAgICAgICMgUHVsbCBpbiAqanVzdCogdGhlIHRhYmxlIGZyb20gdGhlIEdsYWRlIFhNTCBkYXRhLgorICAgICAgICBneG1sID0gZ3RrLmdsYWRlLlhNTCAob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICIvY3J1bWJzL3B1Y2Noby5nbGFkZSIsCisgICAgICAgICAgICByb290ID0gImJ1aWxkX3RhYmxlIikKKyAgICAgICAgdGFibGUgPSBneG1sLmdldF93aWRnZXQgKCJidWlsZF90YWJsZSIpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0ICh0YWJsZSwgVHJ1ZSwgRmFsc2UsIDApCisKKyAgICAgICAgIyBHcmFiIGFsbCB0aGUgd2lkZ2V0cyB0aGF0IHdlIG5lZWQgdG8gdHVybiBvbi9vZmYgd2hlbiB3ZSByZWZyZXNoLi4uCisgICAgICAgIHNlbGYuY29uZl93aWRnZXRzID0gW10KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoIm1hY2hpbmVfbGFiZWwiKV0KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoImRpc3RyaWJ1dGlvbl9sYWJlbCIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiaW1hZ2VfbGFiZWwiKV0KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoIm1hY2hpbmVfY29tYm8iKV0KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgKz0gW2d4bWwuZ2V0X3dpZGdldCAoImRpc3RyaWJ1dGlvbl9jb21ibyIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiaW1hZ2VfY29tYm8iKV0KKworICAgICAgICAjIEdyYWIgdGhlIHN0YXR1cyB3aWRnZXRzCisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlID0gZ3htbC5nZXRfd2lkZ2V0ICgic3RhdHVzX2ltYWdlIikKKyAgICAgICAgc2VsZi5zdGF0dXNfbGFiZWwgPSBneG1sLmdldF93aWRnZXQgKCJzdGF0dXNfbGFiZWwiKQorCisgICAgICAgICMgR3JhYiB0aGUgcmVmcmVzaCBidXR0b24gYW5kIGNvbm5lY3QgdG8gdGhlIGNsaWNrZWQgc2lnbmFsCisgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24gPSBneG1sLmdldF93aWRnZXQgKCJyZWZyZXNoX2J1dHRvbiIpCisgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24uY29ubmVjdCAoImNsaWNrZWQiLCBzZWxmLnJlZnJlc2hfYnV0dG9uX2NsaWNrZWQpCisKKyAgICAgICAgIyBHcmFiIHRoZSBsb2NhdGlvbiBlbnRyeSBhbmQgY29ubmVjdCB0byBlZGl0YWJsZTo6Y2hhbmdlZAorICAgICAgICBzZWxmLmxvY2F0aW9uX2VudHJ5ID0gZ3htbC5nZXRfd2lkZ2V0ICgibG9jYXRpb25fZW50cnkiKQorICAgICAgICBzZWxmLmxvY2F0aW9uX2VudHJ5LmNvbm5lY3QgKCJjaGFuZ2VkIiwKKyAgICAgICAgICAgIHNlbGYucmVwb3NpdG9yeV9lbnRyeV9lZGl0YWJsZV9jaGFuZ2VkKQorCisgICAgICAgICMgR3JhYiB0aGUgbWFjaGluZSBjb21ibyBhbmQgaG9vayBvbnRvIHRoZSBjaGFuZ2VkIHNpZ25hbC4gVGhpcyB0aGVuCisgICAgICAgICMgYWxsb3dzIHVzIHRvIHBvcHVsYXRlIHRoZSBkaXN0cm8gYW5kIGltYWdlIGNvbWJvcworICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8gPSBneG1sLmdldF93aWRnZXQgKCJtYWNoaW5lX2NvbWJvIikKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmNvbm5lY3QgKCJjaGFuZ2VkIiwgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWQpCisKKyAgICAgICAgIyBTZXR1cCB0aGUgY29tYm8KKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmFkZF9hdHRyaWJ1dGUoY2VsbCwgJ3RleHQnLCAwKQorCisgICAgICAgICMgR3JhYiB0aGUgZGlzdHJvIGFuZCBpbWFnZSBjb21ib3MuIFdlIG5lZWQgdGhlc2UgdG8gcG9wdWxhdGUgd2l0aAorICAgICAgICAjIG1vZGVscyBvbmNlIHRoZSBtYWNoaW5lIGlzIGNob3NlbgorICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbl9jb21ibyA9IGd4bWwuZ2V0X3dpZGdldCAoImRpc3RyaWJ1dGlvbl9jb21ibyIpCisgICAgICAgIGNlbGwgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kaXN0cmlidXRpb25fY29tYm8uYWRkX2F0dHJpYnV0ZShjZWxsLCAndGV4dCcsIDApCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ibyA9IGd4bWwuZ2V0X3dpZGdldCAoImltYWdlX2NvbWJvIikKKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5wYWNrX3N0YXJ0KGNlbGwsIFRydWUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYWRkX2F0dHJpYnV0ZShjZWxsLCAndGV4dCcsIDApCisKKyAgICAgICAgIyBQdXQgdGhlIGRlZmF1bHQgZGVzY3JpcHRpdmUgdGV4dCBpbiB0aGUgc3RhdHVzIGJveAorICAgICAgICBzZWxmLmNsZWFyX3N0YXR1c19tZXNzYWdlKCkKKworICAgICAgICAjIE1hcmsgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgdGhpcyBpcyBqdXN0IGdyZXlzIG91dCB0aGUgd2lkZ2V0cyB0aGUKKyAgICAgICAgIyB1c2VyIGNhbid0IHlldCB1c2UKKyAgICAgICAgc2VsZi5jb25maWd1cmFibGUgPSBGYWxzZQorICAgICAgICBzZWxmLnNldF9jb25maWd1cmFibGUoRmFsc2UpCisKKyAgICAgICAgIyBTaG93IHRoZSB0YWJsZQorICAgICAgICB0YWJsZS5zaG93X2FsbCAoKQorCisgICAgICAgICMgVGhlIGxvYWRlciBhbmQgc29tZSBzaWduYWxzIGNvbm5lY3RlZCB0byBpdCB0byB1cGRhdGUgdGhlIHN0YXR1cworICAgICAgICAjIGFyZWEKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBNZXRhRGF0YUxvYWRlcigpCisgICAgICAgIHNlbGYubG9hZGVyLmNvbm5lY3QgKCJzdWNjZXNzIiwgc2VsZi5sb2FkZXJfc3VjY2Vzc19jYikKKyAgICAgICAgc2VsZi5sb2FkZXIuY29ubmVjdCAoImVycm9yIiwgc2VsZi5sb2FkZXJfZXJyb3JfY2IpCisKKyAgICBkZWYgdXBkYXRlX2NvbmZpZ3VyYXRpb24gKHNlbGYpOgorICAgICAgICAiIiIgQSBwb29ybHkgbmFtZWQgZnVuY3Rpb24gYnV0IGl0IHVwZGF0ZXMgdGhlIGludGVybmFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgZnJvbSB0aGUgd2lkZ2V0cy4gVGhpcyBjYW4gbWFrZSB0aGF0IGNvbmZpZ3VyYXRpb24gY29uY3JldGUgYW5kIGNhbgorICAgICAgICB0aHVzIGJlIHVzZWQgZm9yIGJ1aWxkaW5nICIiIgorICAgICAgICAjIEV4dHJhY3QgdGhlIGNob3NlbiBtYWNoaW5lIGZyb20gdGhlIGNvbWJvCisgICAgICAgIG1vZGVsID0gc2VsZi5tYWNoaW5lX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZV9pdGVyID0gc2VsZi5tYWNoaW5lX2NvbWJvLmdldF9hY3RpdmVfaXRlcigpCisgICAgICAgIGlmIChhY3RpdmVfaXRlcik6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ubWFjaGluZSA9IG1vZGVsLmdldChhY3RpdmVfaXRlciwgMClbMF0KKworICAgICAgICAjIEV4dHJhY3QgdGhlIGNob3NlbiBkaXN0cm8gZnJvbSB0aGUgY29tYm8KKyAgICAgICAgbW9kZWwgPSBzZWxmLmRpc3RyaWJ1dGlvbl9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBhY3RpdmVfaXRlciA9IHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLmdldF9hY3RpdmVfaXRlcigpCisgICAgICAgIGlmIChhY3RpdmVfaXRlcik6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZGlzdHJvID0gbW9kZWwuZ2V0KGFjdGl2ZV9pdGVyLCAwKVswXQorCisgICAgICAgICMgRXh0cmFjdCB0aGUgY2hvc2VuIGltYWdlIGZyb20gdGhlIGNvbWJvCisgICAgICAgIG1vZGVsID0gc2VsZi5pbWFnZV9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBhY3RpdmVfaXRlciA9IHNlbGYuaW1hZ2VfY29tYm8uZ2V0X2FjdGl2ZV9pdGVyKCkKKyAgICAgICAgaWYgKGFjdGl2ZV9pdGVyKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZSA9IG1vZGVsLmdldChhY3RpdmVfaXRlciwgMClbMF0KKworIyBUaGlzIGZ1bmN0aW9uIG9wZXJhdGVzIHRvIHB1bGwgZXZlbnRzIG91dCBmcm9tIHRoZSBldmVudCBxdWV1ZSBhbmQgdGhlbiBwdXNoCisjIHRoZW0gaW50byB0aGUgUnVubmluZ0J1aWxkICh3aGljaCB0aGVuIGRyaXZlcyB0aGUgUnVubmluZ0J1aWxkIHdoaWNoIHRoZW4KKyMgcHVzaGVzIHRocm91Z2ggYW5kIHVwZGF0ZXMgdGhlIHByb2dyZXNzIHRyZWUgdmlldy4pCisjCisjIFRPRE86IFNob3VsZCBiZSBhIG1ldGhvZCBvbiB0aGUgUnVubmluZ0J1aWxkIGNsYXNzCitkZWYgZXZlbnRfaGFuZGxlX3RpbWVvdXQgKGV2ZW50SGFuZGxlciwgYnVpbGQpOgorICAgICMgQ29uc3VtZSBhcyBtYW55IG1lc3NhZ2VzIGFzIHdlIGNhbiAuLi4KKyAgICBldmVudCA9IGV2ZW50SGFuZGxlci5nZXRFdmVudCgpCisgICAgd2hpbGUgZXZlbnQ6CisgICAgICAgIGJ1aWxkLmhhbmRsZV9ldmVudCAoZXZlbnQpCisgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBNYWluV2luZG93IChndGsuV2luZG93KToKKworICAgICMgQ2FsbGJhY2sgdGhhdCBnZXRzIGZpcmVkIHdoZW4gdGhlIHVzZXIgaGl0cyBhIGJ1dHRvbiBpbiB0aGUKKyAgICAjIEJ1aWxkU2V0dXBEaWFsb2cuCisgICAgZGVmIGJ1aWxkX2RpYWxvZ19ib3hfcmVzcG9uc2VfY2IgKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBjb25mID0gTm9uZQorICAgICAgICBpZiAocmVzcG9uc2VfaWQgPT0gQnVpbGRTZXR1cERpYWxvZy5SRVNQT05TRV9CVUlMRCk6CisgICAgICAgICAgICBkaWFsb2cudXBkYXRlX2NvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgcHJpbnQoZGlhbG9nLmNvbmZpZ3VyYXRpb24ubWFjaGluZSwgZGlhbG9nLmNvbmZpZ3VyYXRpb24uZGlzdHJvLCBcCisgICAgICAgICAgICAgICAgZGlhbG9nLmNvbmZpZ3VyYXRpb24uaW1hZ2UpCisgICAgICAgICAgICBjb25mID0gZGlhbG9nLmNvbmZpZ3VyYXRpb24KKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICAgICAgaWYgY29uZjoKKyAgICAgICAgICAgIHNlbGYubWFuYWdlci5kb19idWlsZCAoY29uZikKKworICAgIGRlZiBidWlsZF9idXR0b25fY2xpY2tlZF9jYiAoc2VsZiwgYnV0dG9uKToKKyAgICAgICAgZGlhbG9nID0gQnVpbGRTZXR1cERpYWxvZyAoKQorCisgICAgICAgICMgRm9yIHNvbWUgdW5rbm93biByZWFzb24gRGlhbG9nLnJ1biBjYXVzZXMgbmljZSBsaXR0bGUgZGVhZGxvY2tzIC4uLiA6LSgKKyAgICAgICAgZGlhbG9nLmNvbm5lY3QgKCJyZXNwb25zZSIsIHNlbGYuYnVpbGRfZGlhbG9nX2JveF9yZXNwb25zZV9jYikKKyAgICAgICAgZGlhbG9nLnNob3coKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLldpbmRvdy5fX2luaXRfXyAoc2VsZikKKworICAgICAgICAjIFB1bGwgaW4gKmp1c3QqIHRoZSBtYWluIHZib3ggZnJvbSB0aGUgR2xhZGUgWE1MIGRhdGEgYW5kIHRoZW4gcGFjaworICAgICAgICAjIHRoYXQgaW5zaWRlIHRoZSB3aW5kb3cKKyAgICAgICAgZ3htbCA9IGd0ay5nbGFkZS5YTUwgKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAiL2NydW1icy9wdWNjaG8uZ2xhZGUiLAorICAgICAgICAgICAgcm9vdCA9ICJtYWluX3dpbmRvd192Ym94IikKKyAgICAgICAgdmJveCA9IGd4bWwuZ2V0X3dpZGdldCAoIm1haW5fd2luZG93X3Zib3giKQorICAgICAgICBzZWxmLmFkZCAodmJveCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgdHJlZSB2aWV3cyBmb3IgdGhlIGJ1aWxkIG1hbmFnZXIgdmlldyBhbmQgdGhlIHByb2dyZXNzIHZpZXcKKyAgICAgICAgc2VsZi5idWlsZF9tYW5hZ2VyX3ZpZXcgPSBCdWlsZE1hbmFnZXJUcmVlVmlldygpCisgICAgICAgIHNlbGYucnVubmluZ19idWlsZF92aWV3ID0gUnVubmluZ0J1aWxkVHJlZVZpZXcoKQorCisgICAgICAgICMgR3JhYiB0aGUgc2Nyb2xsZWQgd2luZG93cyB0aGF0IHdlIHB1dCB0aGUgdHJlZSB2aWV3cyBpbnRvCisgICAgICAgIHNlbGYucmVzdWx0c19zY3JvbGxlZHdpbmRvdyA9IGd4bWwuZ2V0X3dpZGdldCAoInJlc3VsdHNfc2Nyb2xsZWR3aW5kb3ciKQorICAgICAgICBzZWxmLnByb2dyZXNzX3Njcm9sbGVkd2luZG93ID0gZ3htbC5nZXRfd2lkZ2V0ICgicHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3ciKQorCisgICAgICAgICMgUHV0IHRoZSB0cmVlIHZpZXdzIGluc2lkZSAuLi4KKyAgICAgICAgc2VsZi5yZXN1bHRzX3Njcm9sbGVkd2luZG93LmFkZCAoc2VsZi5idWlsZF9tYW5hZ2VyX3ZpZXcpCisgICAgICAgIHNlbGYucHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3cuYWRkIChzZWxmLnJ1bm5pbmdfYnVpbGRfdmlldykKKworICAgICAgICAjIEhvb2sgdXAgdGhlIGJ1aWxkIGJ1dHRvbi4uLgorICAgICAgICBzZWxmLmJ1aWxkX2J1dHRvbiA9IGd4bWwuZ2V0X3dpZGdldCAoIm1haW5fdG9vbGJ1dHRvbl9idWlsZCIpCisgICAgICAgIHNlbGYuYnVpbGRfYnV0dG9uLmNvbm5lY3QgKCJjbGlja2VkIiwgc2VsZi5idWlsZF9idXR0b25fY2xpY2tlZF9jYikKKworIyBJJ20gbm90IHZlcnkgaGFwcHkgYWJvdXQgdGhlIGN1cnJlbnQgb3duZXJzaGlwIG9mIHRoZSBSdW5uaW5nQnVpbGQuIEkgaGF2ZQorIyBteSBzdXNwaWNpb25zIHRoYXQgdGhpcyBvYmplY3Qgc2hvdWxkIGJlIGhlbGQgYnkgdGhlIEJ1aWxkTWFuYWdlciBzaW5jZSB3ZQorIyBjYXJlIGFib3V0IHRoZSBzaWduYWxzIGluIHRoZSBtYW5hZ2VyCisKK2RlZiBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYiAocnVubmluZ19idWlsZCwgbWFuYWdlcik6CisgICAgIyBOb3RpZnkgdGhlIG1hbmFnZXIgdGhhdCBhIGJ1aWxkIGhhcyBzdWNjZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHBhcnQKKyAgICAjIG9mIHRoZSAnaGFjaycgdGhhdCB3ZSB1c2UgZm9yIG1ha2luZyB0aGUgcm93IGluIHRoZSBtb2RlbCAvIHZpZXcKKyAgICAjIHJlcHJlc2VudGluZyB0aGUgb25nb2luZyBidWlsZCBjaGFuZ2UgaW50byBhIHJvdyByZXByZXNlbnRpbmcgdGhlCisgICAgIyBjb21wbGV0ZWQgYnVpbGQuIFNpbmNlIHdlIGtub3cgb25seSBvbmUgYnVpbGQgY2FuIGJlIHJ1bm5pbmcgYSB0aW1lIHRoZW4KKyAgICAjIHdlIGNhbiBoYW5kbGUgdGhpcy4KKworICAgICMgRklYTUU6IFJlZmFjdG9yIGFsbCB0aGlzIHNvIHRoYXQgdGhlIFJ1bm5pbmdCdWlsZCBpcyBvd25lZCBieSB0aGUKKyAgICAjIEJ1aWxkTWFuYWdlci4gSXQgY2FuIHRoZW4gaG9vayBvbnRvIHRoZSBzaWduYWxzIGRpcmVjdGx5IGFuZCBkcml2ZQorICAgICMgaW50ZXJlc3RpbmcgdGhpbmdzIGl0IGNhcmVzIGFib3V0LgorICAgIG1hbmFnZXIubm90aWZ5X2J1aWxkX3N1Y2NlZWRlZCAoKQorICAgIHByaW50KCJidWlsZCBzdWNjZWVkZWQiKQorCitkZWYgcnVubmluZ19idWlsZF9mYWlsZWRfY2IgKHJ1bm5pbmdfYnVpbGQsIG1hbmFnZXIpOgorICAgICMgQXMgYWJvdmUKKyAgICBwcmludCgiYnVpbGQgZmFpbGVkIikKKyAgICBtYW5hZ2VyLm5vdGlmeV9idWlsZF9mYWlsZWQgKCkKKworZGVmIG1haW4gKHNlcnZlciwgZXZlbnRIYW5kbGVyKToKKyAgICAjIEluaXRpYWxpc2UgdGhyZWFkaW5nLi4uCisgICAgZ29iamVjdC50aHJlYWRzX2luaXQoKQorICAgIGd0ay5nZGsudGhyZWFkc19pbml0KCkKKworICAgIG1haW5fd2luZG93ID0gTWFpbldpbmRvdyAoKQorICAgIG1haW5fd2luZG93LnNob3dfYWxsICgpCisKKyAgICAjIFNldCB1cCB0aGUgYnVpbGQgbWFuYWdlciBzdHVmZiBpbiBnZW5lcmFsCisgICAgYnVpbGRzX2RpciA9IG9zLnBhdGguam9pbiAob3MuZ2V0Y3dkKCksICAicmVzdWx0cyIpCisgICAgbWFuYWdlciA9IEJ1aWxkTWFuYWdlciAoc2VydmVyLCBidWlsZHNfZGlyKQorICAgIG1haW5fd2luZG93LmJ1aWxkX21hbmFnZXJfdmlldy5zZXRfbW9kZWwgKG1hbmFnZXIubW9kZWwpCisKKyAgICAjIERvIHRoZSBydW5uaW5nIGJ1aWxkIHNldHVwCisgICAgcnVubmluZ19idWlsZCA9IFJ1bm5pbmdCdWlsZCAoKQorICAgIG1haW5fd2luZG93LnJ1bm5pbmdfYnVpbGRfdmlldy5zZXRfbW9kZWwgKHJ1bm5pbmdfYnVpbGQubW9kZWwpCisgICAgcnVubmluZ19idWlsZC5jb25uZWN0ICgiYnVpbGQtc3VjY2VlZGVkIiwgcnVubmluZ19idWlsZF9zdWNjZWVkZWRfY2IsCisgICAgICAgIG1hbmFnZXIpCisgICAgcnVubmluZ19idWlsZC5jb25uZWN0ICgiYnVpbGQtZmFpbGVkIiwgcnVubmluZ19idWlsZF9mYWlsZWRfY2IsIG1hbmFnZXIpCisKKyAgICAjIFdlIG5lZWQgdG8gc2F2ZSB0aGUgbWFuYWdlciBpbnRvIHRoZSBNYWluV2luZG93IHNvIHRoYXQgdGhlIHRvb2xiYXIKKyAgICAjIGJ1dHRvbiBjYW4gdXNlIGl0LgorICAgICMgRklYTUU6IFJlZmFjdG9yID8KKyAgICBtYWluX3dpbmRvdy5tYW5hZ2VyID0gbWFuYWdlcgorCisgICAgIyBVc2UgYSB0aW1lb3V0IGZ1bmN0aW9uIGZvciBwcm9iaW5nIHRoZSBldmVudCBxdWV1ZSB0byBmaW5kIG91dCBpZiB3ZQorICAgICMgaGF2ZSBhIG1lc3NhZ2Ugd2FpdGluZyBmb3IgdXMuCisgICAgZ29iamVjdC50aW1lb3V0X2FkZCAoMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2hhbmRsZV90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX2J1aWxkKQorCisgICAgZ3RrLm1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3RvYXN0ZXJ1aS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGMyNzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkKQEAgLTAsMCArMSwzNTUgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyVUkgSW1wbGVtZW50YXRpb24KKyMgYmFzZWQgb24gKE5vKVRUWSBVSSBJbXBsZW1lbnRhdGlvbiBieSBSaWNoYXJkIFB1cmRpZQorIworIyBIYW5kbGluZyBvdXRwdXQgdG8gVFRZcyBvciBmaWxlcyAobm8gVFRZKQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBSaWNoYXJkIFB1cmRpZQorIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoraW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2Zyb20gYmIudWkgaW1wb3J0IHVpaGVscGVyCitmcm9tIGJiLnVpLmJ1aWxkaW5mb2hlbHBlciBpbXBvcnQgQnVpbGRJbmZvSGVscGVyCisKK2ltcG9ydCBiYi5tc2cKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCisjIG1vZHVsZSBwcm9wZXJ0aWVzIGZvciBVSSBtb2R1bGVzIGFyZSByZWFkIGJ5IGJpdGJha2UgYW5kIHRoZSBjb250cmFjdCBzaG91bGQgbm90IGJlIGJyb2tlbgorCisKK2ZlYXR1cmVTZXQgPSBbYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLkhPQl9FWFRSQV9DQUNIRVMsIGJiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX0RFUEVORFNfVFJFRSwgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcsIGJiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX1NBTklUWUVWRU5UU10KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJMb2dnZXIiKQoraW50ZXJhY3RpdmUgPSBzeXMuc3Rkb3V0LmlzYXR0eSgpCisKKworCitkZWYgX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpOgorICAgICMgR2V0IHZhbHVlcyBvZiB2YXJpYWJsZXMgd2hpY2ggY29udHJvbCBvdXIgb3V0cHV0CisgICAgaW5jbHVkZWxvZ3MsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQklOQ0xVREVMT0dTIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJJTkNMVURFTE9HUyB2YXJpYWJsZTogJXMiLCBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICBsb2dsaW5lcywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1NfTElORVMiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTX0xJTkVTIHZhcmlhYmxlOiAlcyIsIGVycm9yKQorICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorICAgIGNvbnNvbGVsb2dmaWxlLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfQ09OU09MRUxPRyJdKQorICAgIGlmIGVycm9yOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBnZXQgdGhlIHZhbHVlIG9mIEJCX0NPTlNPTEVMT0cgdmFyaWFibGU6ICVzIiwgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgcmV0dXJuIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgY29uc29sZWxvZ2ZpbGUKKworCitkZWYgbWFpbihzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zICk6CisgICAgaGVscGVyID0gdWloZWxwZXIuQkJVSUhlbHBlcigpCisKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICBfLCBfLCBjb25zb2xlbG9nZmlsZSA9IF9sb2dfc2V0dGluZ3NfZnJvbV9zZXJ2ZXIoc2VydmVyKQorCisgICAgIyB2ZXJpZnkgYW5kIHdhcm4KKyAgICBidWlsZF9oaXN0b3J5X2VuYWJsZWQgPSBUcnVlCisgICAgaW5oZXJpdGxpc3QsIF8gPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklOSEVSSVQiXSkKKworICAgIGlmIG5vdCAiYnVpbGRoaXN0b3J5IiBpbiBpbmhlcml0bGlzdC5zcGxpdCgiICIpOgorICAgICAgICBsb2dnZXIud2FybigiYnVpbGRoaXN0b3J5IGlzIG5vdCBlbmFibGVkLiBQbGVhc2UgZW5hYmxlIElOSEVSSVQgKz0gXCJidWlsZGhpc3RvcnlcIiB0byBzZWUgaW1hZ2UgZGV0YWlscy4iKQorICAgICAgICBidWlsZF9oaXN0b3J5X2VuYWJsZWQgPSBGYWxzZQorCisgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVG9hc3RlclVJIGNhbiBvbmx5IHdvcmsgaW4gb2JzZXJ2ZXIgbW9kZSIpCisgICAgICAgIHJldHVybiAxCisKKworICAgIG1haW4uc2h1dGRvd24gPSAwCisgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgIHJldHVybl92YWx1ZSA9IDAKKyAgICBlcnJvcnMgPSAwCisgICAgd2FybmluZ3MgPSAwCisgICAgdGFza2ZhaWx1cmVzID0gW10KKyAgICBmaXJzdCA9IFRydWUKKworICAgIGJ1aWxkaW5mb2hlbHBlciA9IEJ1aWxkSW5mb0hlbHBlcihzZXJ2ZXIsIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCkKKworICAgIGlmIGJ1aWxkaW5mb2hlbHBlci5icmJlIGlzIG5vdCBOb25lIGFuZCBjb25zb2xlbG9nZmlsZToKKyAgICAgICAgIyBpZiB3ZSBhcmUgdW5kZXIgbWFuYWdlZCBtb2RlIHdlIGhhdmUgbm8gb3RoZXIgVUkgYW5kIHdlIG5lZWQgdG8gd3JpdGUgb3VyIG93biBmaWxlCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoY29uc29sZWxvZ2ZpbGUpKQorICAgICAgICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICAgICAgY29uc29sZWxvZyA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoY29uc29sZWxvZ2ZpbGUpCisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGVsb2cpCisgICAgICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZWxvZykKKworCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIud2FpdEV2ZW50KDAuMjUpCisgICAgICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRvYXN0ZXJVSSB3YWl0aW5nIGZvciBldmVudHMiKQorCisgICAgICAgICAgICBpZiBldmVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG1haW4uc2h1dGRvd24gPiAwOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGhlbHBlci5ldmVudEhhbmRsZXIoZXZlbnQpCisKKyAgICAgICAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKKyAgICAgICAgICAgICMgdGhlIGNvZGUgd2lsbCBsb29rIGludG8gdGhlIHByb3RlY3RlZCB2YXJpYWJsZXMgb2YgdGhlIGV2ZW50OyBubyBlYXN5IHdheSBhcm91bmQgdGhpcworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9zdGFydGVkX2J1aWxkKGV2ZW50LCBjb25zb2xlbG9nZmlsZSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmJ1aWxkLlRhc2tTdGFydGVkLCBiYi5idWlsZC5UYXNrU3VjY2VlZGVkLCBiYi5idWlsZC5UYXNrRmFpbGVkU2lsZW50KSk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9hbmRfc3RvcmVfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiTG9nZmlsZSBmb3IgdGFzayAlcyIsIGV2ZW50LmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0Jhc2UpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGV2ZW50Ll9tZXNzYWdlKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Mb2dFeGVjVFRZKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybihldmVudC5tc2cpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmxldmVsbm8gPSBmb3JtYXR0ZXIuRVJST1IKKworICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9sb2dfZXZlbnQoZXZlbnQpCisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBmb3JtYXR0ZXIuRVJST1I6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LmxldmVsbm8gPT0gZm9ybWF0dGVyLldBUk5JTkc6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzID0gd2FybmluZ3MgKyAxCisgICAgICAgICAgICAgICAgIyBGb3IgIm5vcm1hbCIgbG9nZ2luZyBjb25kaXRpb25zLCBkb24ndCBzaG93IG5vdGUgbG9ncyBmcm9tIHRhc2tzCisgICAgICAgICAgICAgICAgIyBidXQgZG8gc2hvdyB0aGVtIGlmIHRoZSB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBkZWZhdWx0IGxvZyBsZXZlbCB0bworICAgICAgICAgICAgICAgICMgaW5jbHVkZSB2ZXJib3NlL2RlYnVnIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgaWYgZXZlbnQudGFza3BpZCAhPSAwIGFuZCBldmVudC5sZXZlbG5vIDw9IGZvcm1hdHRlci5OT1RFOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FuZF9zdG9yZV90YXNrKGV2ZW50KQorICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSBldmVudC5sb2dmaWxlCisgICAgICAgICAgICAgICAgaWYgbG9nZmlsZSBhbmQgb3MucGF0aC5leGlzdHMobG9nZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJMb2dmaWxlIG9mIGZhaWx1cmUgc3RvcmVkIGluOiAlcyIgJSBsb2dmaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgdGhlc2UgZXZlbnRzIGFyZSB1bnByb2Nlc3NlZCBub3csIGJ1dCBtYXkgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHRvIGxvZworICAgICAgICAgICAgIyB0aW1pbmcgYW5kIGVycm9yIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBwYXJzaW5nIHBoYXNlIGluIFRvYXN0ZXIKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCwgYmIuZXZlbnQuU2FuaXR5Q2hlY2spKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSBmb3IgJXMlcyAoJXMpIiwgZXZlbnQuX2lzX3J1bnRpbWUgYW5kICJydW50aW1lICIgb3IgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2l0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgIi5qb2luKGV2ZW50Ll9jYW5kaWRhdGVzKSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY29uc2lkZXIgZGVmaW5pbmcgYSBQUkVGRVJSRURfUFJPVklERVIgZW50cnkgdG8gbWF0Y2ggJXMiLCBldmVudC5faXRlbSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX3J1bnRpbWU6CisgICAgICAgICAgICAgICAgICAgIHIgPSAiUiIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByID0gIiIKKworICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9kZXBlbmRlZXM6CisgICAgICAgICAgICAgICAgICAgIHRleHQgPSAiTm90aGluZyAlc1BST1ZJREVTICclcycgKGJ1dCAlcyAlc0RFUEVORFMgb24gb3Igb3RoZXJ3aXNlIHJlcXVpcmVzIGl0KSIgJSAociwgZXZlbnQuX2l0ZW0sICIsICIuam9pbihldmVudC5fZGVwZW5kZWVzKSwgcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIiAlIChyLCBldmVudC5faXRlbSkKKworICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcih0ZXh0KQorICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgICAgICBmb3IgcmVhc29uIGluIGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyIsIHJlYXNvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gcmVhc29uCisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2xvZ19lcnJvcih0ZXh0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBlbmQgb2Ygc2F2ZWQgZXZlbnRzCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1NraXBwZWQpKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfc3RhcnRlZF90YXNrKGV2ZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0NvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9hbmRfc3RvcmVfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgdGFza2ZhaWx1cmVzLmFwcGVuZChldmVudC50YXNrc3RyaW5nKQorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tDb21wbGV0ZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkKSk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9hbmRfc3RvcmVfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCwgYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5CdWlsZENvbXBsZXRlZCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKSk6CisKKyAgICAgICAgICAgICAgICBlcnJvcmNvZGUgPSAwCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb2RlID0gMQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZDogJXMiLCBldmVudC5lcnJvcikKKworICAgICAgICAgICAgICAgICMgdXBkYXRlIHRoZSBidWlsZCBpbmZvIGhlbHBlciBvbiBCdWlsZENvbXBsZXRlZCwgbm90IG9uIENvbW1hbmRYWFgKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2J1aWxkX2luZm9ybWF0aW9uKGV2ZW50LCBlcnJvcnMsIHdhcm5pbmdzLCB0YXNrZmFpbHVyZXMpCisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLmNsb3NlKGVycm9yY29kZSkKKyAgICAgICAgICAgICAgICAjIG1hcmsgdGhlIGxvZyBvdXRwdXQ7IGNvbnRyb2xsZXJzIG1heSBraWxsIHRoZSB0b2FzdGVyVUkgYWZ0ZXIgc2VlaW5nIHRoaXMgbG9nCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRvYXN0ZXJVSSBidWlsZCBkb25lIDEsIGJyYmU6ICVzIiwgYnVpbGRpbmZvaGVscGVyLmJyYmUgKQorCisgICAgICAgICAgICAgICAgIyB3ZSBzdGFydCBhIG5ldyBidWlsZCBpbmZvCisgICAgICAgICAgICAgICAgaWYgYnVpbGRpbmZvaGVscGVyLmJyYmUgaXMgbm90IE5vbmU6CisKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJUb2FzdGVyVUkgdW5kZXIgQnVpbGRFbnZpcm9ubWVudCBtYW5hZ2VtZW50IC0gZXhpdGluZyBhZnRlciB0aGUgYnVpbGQiKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIudGVybWluYXRlU2VydmVyKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlRvYXN0ZXJVSSBwcmVwYXJlZCBmb3IgbmV3IGJ1aWxkIikKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gMAorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyA9IDAKKyAgICAgICAgICAgICAgICAgICAgdGFza2ZhaWx1cmVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyID0gQnVpbGRJbmZvSGVscGVyKHNlcnZlciwgYnVpbGRfaGlzdG9yeV9lbmFibGVkKQorCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRvYXN0ZXJVSSBidWlsZCBkb25lIDIiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpKToKKyAgICAgICAgICAgICAgICBlcnJvcmNvZGUgPSAwCisKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5NZXRhZGF0YUV2ZW50KToKKyAgICAgICAgICAgICAgICBpZiBldmVudC50eXBlID09ICJTaW5nbGVQYWNrYWdlSW5mbyI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9idWlsZF9wYWNrYWdlX2luZm9ybWF0aW9uKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiTGF5ZXJJbmZvIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2xheWVyX2luZm8oZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJCdWlsZFN0YXRzTGlzdCI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV90YXNrc19zdGF0cyhldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkltYWdlUGtnTGlzdCI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV90YXJnZXRfcGFja2FnZV9kYXRhKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiTWlzc2VkU3N0YXRlIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX21pc3NlZF9zdGF0ZV90YXNrcyhldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkltYWdlRmlsZVNpemUiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX3RhcmdldF9pbWFnZV9maWxlKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiQXJ0aWZhY3RGaWxlU2l6ZSI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYXJ0aWZhY3RfaW1hZ2VfZmlsZShldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkxpY2Vuc2VNYW5pZmVzdFBhdGgiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbGljZW5zZV9tYW5pZmVzdF9wYXRoKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5wcm9jZXNzZWQgTWV0YWRhdGFFdmVudCAlcyAiLCBzdHIoZXZlbnQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvb2tlci5Db29rZXJFeGl0KToKKyAgICAgICAgICAgICAgICAjIGV4aXQgd2hlbiB0aGUgc2VydmVyIGV4aXRzCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBpZ25vcmUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5CdWlsZEJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuU3RhbXBVcGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIucnVucXVldWUucnVuUXVldWVFdmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblByb2dyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRFeGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9kZXBlbmRlbmN5X2luZm9ybWF0aW9uKGV2ZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5rbm93biBldmVudDogJXMiLCBldmVudCkKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSArPSAxCisKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgaW9lcnJvcjoKKyAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIG1haW4uc2h1dGRvd24gPSAxCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICMgcHJpbnQgZXJyb3JzIHRvIGxvZworICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKKyAgICAgICAgICAgIGV4Y2VwdGlvbl9kYXRhID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlc1xuJXMiICwgZSwgZXhjZXB0aW9uX2RhdGEpCisKKyAgICAgICAgICAgIF8sIF8sIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIHRiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGN1cnIgPSB0YgorICAgICAgICAgICAgICAgIHdoaWxlIGN1cnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJFcnJvciBkYXRhIGR1bXAgJXNcbiVzXG4iICwgdHJhY2ViYWNrLmZvcm1hdF90YihjdXJyLDEpLCBwZm9ybWF0KGN1cnIudGJfZnJhbWUuZl9sb2NhbHMpKQorICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci50Yl9uZXh0CisKKyAgICAgICAgICAgICMgc2F2ZSB0aGVtIHRvIGRhdGFiYXNlLCBpZiBwb3NzaWJsZTsgaWYgaXQgZmFpbHMsIHdlIGFscmVhZHkgbG9nZ2VkIHRvIGNvbnNvbGUuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2xvZ19leGNlcHRpb24oIiVzXG4lcyIgJSAoc3RyKGUpLCBleGNlcHRpb25fZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ1JJVElDQUwgLSBGYWlsZWQgdG8gdG8gc2F2ZSB0b2FzdGVyIGV4Y2VwdGlvbiB0byB0aGUgZGF0YWJhc2U6ICVzIiwgc3RyKGNlKSkKKworICAgICAgICAgICAgIyBtYWtlIHN1cmUgd2UgcmV0dXJuIHdpdGggYW4gZXJyb3IKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSArPSAxCisKKyAgICBpZiBpbnRlcnJ1cHRlZDoKKyAgICAgICAgaWYgcmV0dXJuX3ZhbHVlID09IDA6CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgKz0gMQorCisgICAgbG9nZ2VyLndhcm4oIlJldHVybiB2YWx1ZSBpcyAlZCIsIHJldHVybl92YWx1ZSkKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjNTBjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWlldmVudC5weQpAQCAtMCwwICsxLDE1NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCisiIiIKK1VzZSB0aGlzIGNsYXNzIHRvIGZvcmsgb2ZmIGEgdGhyZWFkIHRvIHJlY2lldmUgZXZlbnQgY2FsbGJhY2tzIGZyb20gdGhlIGJpdGJha2UKK3NlcnZlciBhbmQgcXVldWUgdGhlbSBmb3IgdGhlIFVJIHRvIHByb2Nlc3MuIFRoaXMgcHJvY2VzcyBtdXN0IGJlIHVzZWQgdG8gYXZvaWQKK2NsaWVudC9zZXJ2ZXIgZGVhZGxvY2tzLgorIiIiCisKK2ltcG9ydCBzb2NrZXQsIHRocmVhZGluZywgcGlja2xlCitmcm9tIFNpbXBsZVhNTFJQQ1NlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyLCBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorCitjbGFzcyBCQlVJRXZlbnRRdWV1ZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgQkJTZXJ2ZXIsIGNsaWVudGluZm89KCJsb2NhbGhvc3QsIDAiKSk6CisKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlID0gW10KKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTm90aWZ5ID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBzZWxmLkJCU2VydmVyID0gQkJTZXJ2ZXIKKyAgICAgICAgc2VsZi5jbGllbnRpbmZvID0gY2xpZW50aW5mbworCisgICAgICAgIHNlcnZlciA9IFVJWE1MUlBDU2VydmVyKHNlbGYuY2xpZW50aW5mbykKKyAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKCkKKworICAgICAgICBzZXJ2ZXIucmVnaXN0ZXJfZnVuY3Rpb24oIHNlbGYuc3lzdGVtX3F1aXQsICJldmVudC5xdWl0IiApCisgICAgICAgIHNlcnZlci5yZWdpc3Rlcl9mdW5jdGlvbiggc2VsZi5zZW5kX2V2ZW50LCAiZXZlbnQuc2VuZHBpY2tsZSIgKQorICAgICAgICBzZXJ2ZXIuc29ja2V0LnNldHRpbWVvdXQoMSkKKworICAgICAgICBzZWxmLkV2ZW50SGFuZGxlciA9IE5vbmUKKyAgICAgICAgY291bnRfdHJpZXMgPSAwCisKKyAgICAgICAgIyB0aGUgZXZlbnQgaGFuZGxlciByZWdpc3RyYXRpb24gbWF5IGZhaWwgaGVyZSBkdWUgdG8gY29va2VyIGJlaW5nIGluIGludmFsaWQgc3RhdGUKKyAgICAgICAgIyB0aGlzIGlzIGEgdHJhbnNpZW50IHNpdHVhdGlvbiwgYW5kIHdlIHNob3VsZCByZXRyeSBhIGNvdXBsZSBvZiB0aW1lcyBiZWZvcmUKKyAgICAgICAgIyBnaXZpbmcgdXAKKworICAgICAgICB3aGlsZSBzZWxmLkV2ZW50SGFuZGxlciA9PSBOb25lIGFuZCBjb3VudF90cmllcyA8IDU6CisgICAgICAgICAgICBzZWxmLkV2ZW50SGFuZGxlID0gc2VsZi5CQlNlcnZlci5yZWdpc3RlckV2ZW50SGFuZGxlcihzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgICAgICAgICAgaWYgKHNlbGYuRXZlbnRIYW5kbGUgIT0gTm9uZSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgYmIud2FybigiQ291bGQgbm90IHJlZ2lzdGVyIFVJIGV2ZW50IGhhbmRsZXIgJXM6JWQsIHJldHJ5IiAlIChzZWxmLmhvc3QsIHNlbGYucG9ydCkpCisgICAgICAgICAgICBjb3VudF90cmllcyArPSAxCisgICAgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisKKyAgICAgICAgaWYgc2VsZi5FdmVudEhhbmRsZSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgcmVnaXN0ZXIgVUkgZXZlbnQgaGFuZGxlciIpCisKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKworICAgICAgICBzZWxmLnQgPSB0aHJlYWRpbmcuVGhyZWFkKCkKKyAgICAgICAgc2VsZi50LnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnQucnVuID0gc2VsZi5zdGFydENhbGxiYWNrSGFuZGxlcgorICAgICAgICBzZWxmLnQuc3RhcnQoKQorCisgICAgZGVmIGdldEV2ZW50KHNlbGYpOgorCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2suYWNxdWlyZSgpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZXZlbnRRdWV1ZSkgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGl0ZW0gPSBzZWxmLmV2ZW50UXVldWUucG9wKDApCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZXZlbnRRdWV1ZSkgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuZXZlbnRRdWV1ZU5vdGlmeS5jbGVhcigpCisKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jay5yZWxlYXNlKCkKKyAgICAgICAgcmV0dXJuIGl0ZW0KKworICAgIGRlZiB3YWl0RXZlbnQoc2VsZiwgZGVsYXkpOgorICAgICAgICBzZWxmLmV2ZW50UXVldWVOb3RpZnkud2FpdChkZWxheSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RXZlbnQoKQorCisgICAgZGVmIHF1ZXVlX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTG9jay5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlLmFwcGVuZChldmVudCkKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTm90aWZ5LnNldCgpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgc2VuZF9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIHNlbGYucXVldWVfZXZlbnQocGlja2xlLmxvYWRzKGV2ZW50KSkKKworICAgIGRlZiBzdGFydENhbGxiYWNrSGFuZGxlcihzZWxmKToKKworICAgICAgICBzZWxmLnNlcnZlci50aW1lb3V0ID0gMQorICAgICAgICB3aGlsZSBub3Qgc2VsZi5zZXJ2ZXIucXVpdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQkJVSUV2ZW50UXVldWUuc3RhcnRDYWxsYmFja0hhbmRsZXI6IEV4Y2VwdGlvbiB3aGlsZSB0cnlpbmcgdG8gaGFuZGxlIHJlcXVlc3Q6ICVzXG4lcyIgJSAoZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpKQorCisgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9jbG9zZSgpCisKKyAgICBkZWYgc3lzdGVtX3F1aXQoIHNlbGYgKToKKyAgICAgICAgIiIiCisgICAgICAgIFNodXQgZG93biB0aGUgY2FsbGJhY2sgdGhyZWFkCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLkJCU2VydmVyLnVucmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZi5FdmVudEhhbmRsZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnNlcnZlci5xdWl0ID0gVHJ1ZQorCitjbGFzcyBVSVhNTFJQQ1NlcnZlciAoU2ltcGxlWE1MUlBDU2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgaW50ZXJmYWNlICk6CisgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5fX2luaXRfXyggc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyPVNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9RmFsc2UsIGFsbG93X25vbmU9VHJ1ZSkKKworICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYucXVpdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNvY2ssIGFkZHIpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCisKKyAgICBkZWYgY2xvc2VfcmVxdWVzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgaWYgcmVxdWVzdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5jbG9zZV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpCisKKyAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgaWYgcmVxdWVzdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5wcm9jZXNzX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdWkvdWloZWxwZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDMzODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3VpL3VpaGVscGVyLnB5CkBAIC0wLDAgKzEsMTAwIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgYmIuYnVpbGQKKworY2xhc3MgQkJVSUhlbHBlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IEZhbHNlCisgICAgICAgIHNlbGYucnVubmluZ190YXNrcyA9IHt9CisgICAgICAgICMgUnVubmluZyBQSURzIHByZXNlcnZlcyB0aGUgb3JkZXIgdGFza3Mgd2VyZSBleGVjdXRlZCBpbgorICAgICAgICBzZWxmLnJ1bm5pbmdfcGlkcyA9IFtdCisgICAgICAgIHNlbGYuZmFpbGVkX3Rhc2tzID0gW10KKyAgICAgICAgc2VsZi50YXNrbnVtYmVyX2N1cnJlbnQgPSAwCisgICAgICAgIHNlbGYudGFza251bWJlcl90b3RhbCA9IDAKKworICAgIGRlZiBldmVudEhhbmRsZXIoc2VsZiwgZXZlbnQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrU3RhcnRlZCk6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfdGFza3NbZXZlbnQucGlkXSA9IHsgJ3RpdGxlJyA6ICIlcyAlcyIgJSAoZXZlbnQuX3BhY2thZ2UsIGV2ZW50Ll90YXNrKSB9CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfcGlkcy5hcHBlbmQoZXZlbnQucGlkKQorICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrU3VjY2VlZGVkKToKKyAgICAgICAgICAgIGRlbCBzZWxmLnJ1bm5pbmdfdGFza3NbZXZlbnQucGlkXQorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMucmVtb3ZlKGV2ZW50LnBpZCkKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCk6CisgICAgICAgICAgICBkZWwgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF0KKyAgICAgICAgICAgIHNlbGYucnVubmluZ19waWRzLnJlbW92ZShldmVudC5waWQpCisgICAgICAgICAgICAjIERvbid0IGFkZCB0byB0aGUgZmFpbGVkIHRhc2tzIGxpc3Qgc2luY2UgdGhpcyBpcyBlLmcuIGEgc2V0c2NlbmUgdGFzayBmYWlsdXJlCisgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgZGVsIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdCisgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfcGlkcy5yZW1vdmUoZXZlbnQucGlkKQorICAgICAgICAgICAgc2VsZi5mYWlsZWRfdGFza3MuYXBwZW5kKCB7ICd0aXRsZScgOiAiJXMgJXMiICUgKGV2ZW50Ll9wYWNrYWdlLCBldmVudC5fdGFzayl9KQorICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkKSBvciBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQpOgorICAgICAgICAgICAgc2VsZi50YXNrbnVtYmVyX2N1cnJlbnQgPSBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxCisgICAgICAgICAgICBzZWxmLnRhc2tudW1iZXJfdG90YWwgPSBldmVudC5zdGF0cy50b3RhbAorICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQorCisgICAgZGVmIGdldFRhc2tzKHNlbGYpOgorICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBGYWxzZQorICAgICAgICByZXR1cm4gKHNlbGYucnVubmluZ190YXNrcywgc2VsZi5mYWlsZWRfdGFza3MpCisKKyAgICBkZWYgZmluZFNlcnZlckRldGFpbHMoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaW1wb3J0IG9wdHBhcnNlCisgICAgICAgIGZyb20gYmIuc2VydmVyLnhtbHJwYyBpbXBvcnQgQml0YmFrZVNlcnZlckluZm8sIEJpdEJha2VTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGhvc3QgPSAiIgorICAgICAgICBwb3J0ID0gMAorICAgICAgICBiaW5kID0gIiIKKyAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICAgICAgdXNhZ2UgPSAiIiIlcHJvZyAtSCBob3N0IC1QIHBvcnQgLUIgYmluZGFkZHIiIiIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1IIiwgIi0taG9zdCIsIGhlbHAgPSAiQml0YmFrZSBzZXJ2ZXIncyBJUCBhZGRyZXNzIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImhvc3QiLCBkZWZhdWx0ID0gTm9uZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLVAiLCAiLS1wb3J0IiwgaGVscCA9ICJCaXRiYWtlIHNlcnZlcidzIFBvcnQgbnVtYmVyIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInBvcnQiLCBkZWZhdWx0ID0gTm9uZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUIiLCAiLS1iaW5kIiwgaGVscCA9ICJIb2IyIGxvY2FsIGJpbmQgYWRkcmVzcyIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJiaW5kIiwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorICAgICAgICBmb3Iga2V5LCB2YWwgaW4gb3B0aW9ucy5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgaWYga2V5ID09ICdob3N0JyBhbmQgdmFsOgorICAgICAgICAgICAgICAgIGhvc3QgPSB2YWwKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdwb3J0JyBhbmQgdmFsOgorICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQodmFsKQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ2JpbmQnIGFuZCB2YWw6CisgICAgICAgICAgICAgICAgYmluZCA9IHZhbAorCisgICAgICAgIGlmIG5vdCBob3N0IG9yIG5vdCBwb3J0IG9yIG5vdCBiaW5kOgorICAgICAgICAgICAgcGFyc2VyLnByaW50X3VzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgc2VydmVyaW5mbyA9IEJpdGJha2VTZXJ2ZXJJbmZvKGhvc3QsIHBvcnQpCisgICAgICAgIGNsaWVudGluZm8gPSAoYmluZCwgMCkKKyAgICAgICAgY29ubmVjdGlvbiA9IEJpdEJha2VTZXJ2ZXJDb25uZWN0aW9uKHNlcnZlcmluZm8sIGNsaWVudGluZm8pCisKKyAgICAgICAgc2VydmVyID0gY29ubmVjdGlvbi5jb25uZWN0aW9uCisgICAgICAgIGV2ZW50SGFuZGxlciA9IGNvbm5lY3Rpb24uZXZlbnRzCisKKyAgICAgICAgcmV0dXJuIHNlcnZlciwgZXZlbnRIYW5kbGVyLCBob3N0LCBiaW5kCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYmIvdXRpbHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmFhNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JiL3V0aWxzLnB5CkBAIC0wLDAgKzEsMTMxMiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSBVdGlsaXR5IEZ1bmN0aW9ucworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA0IE1pY2hhZWwgTGF1ZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCByZSwgZmNudGwsIG9zLCBzdHJpbmcsIHN0YXQsIHNodXRpbCwgdGltZQoraW1wb3J0IHN5cworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgYmIubXNnCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgZmNudGwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgZ2xvYgoraW1wb3J0IGZubWF0Y2gKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBlcnJubworaW1wb3J0IHNpZ25hbAorZnJvbSBjb21tYW5kcyBpbXBvcnQgZ2V0c3RhdHVzb3V0cHV0Citmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCitmcm9tIGN0eXBlcyBpbXBvcnQgY2RsbAorCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlV0aWwiKQorCitkZWYgY2xlYW5fY29udGV4dCgpOgorICAgIHJldHVybiB7CisgICAgICAgICJvcyI6IG9zLAorICAgICAgICAiYmIiOiBiYiwKKyAgICAgICAgInRpbWUiOiB0aW1lLAorICAgIH0KKworZGVmIGdldF9jb250ZXh0KCk6CisgICAgcmV0dXJuIF9jb250ZXh0CisgICAgCisKK2RlZiBzZXRfY29udGV4dChjdHgpOgorICAgIF9jb250ZXh0ID0gY3R4CisKKyMgQ29udGV4dCB1c2VkIGluIGJldHRlcl9leGVjLCBldmFsCitfY29udGV4dCA9IGNsZWFuX2NvbnRleHQoKQorCitjbGFzcyBWZXJzaW9uU3RyaW5nRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGludmFsaWQgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGlzIGZvdW5kIiIiCisKK2RlZiBleHBsb2RlX3ZlcnNpb24ocyk6CisgICAgciA9IFtdCisgICAgYWxwaGFfcmVnZXhwID0gcmUuY29tcGlsZSgnXihbYS16QS1aXSspKC4qKSQnKQorICAgIG51bWVyaWNfcmVnZXhwID0gcmUuY29tcGlsZSgnXihcZCspKC4qKSQnKQorICAgIHdoaWxlIChzICE9ICcnKToKKyAgICAgICAgaWYgc1swXSBpbiBzdHJpbmcuZGlnaXRzOgorICAgICAgICAgICAgbSA9IG51bWVyaWNfcmVnZXhwLm1hdGNoKHMpCisgICAgICAgICAgICByLmFwcGVuZCgoMCwgaW50KG0uZ3JvdXAoMSkpKSkKKyAgICAgICAgICAgIHMgPSBtLmdyb3VwKDIpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBzWzBdIGluIHN0cmluZy5sZXR0ZXJzOgorICAgICAgICAgICAgbSA9IGFscGhhX3JlZ2V4cC5tYXRjaChzKQorICAgICAgICAgICAgci5hcHBlbmQoKDEsIG0uZ3JvdXAoMSkpKQorICAgICAgICAgICAgcyA9IG0uZ3JvdXAoMikKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHNbMF0gPT0gJ34nOgorICAgICAgICAgICAgci5hcHBlbmQoKC0xLCBzWzBdKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHIuYXBwZW5kKCgyLCBzWzBdKSkKKyAgICAgICAgcyA9IHNbMTpdCisgICAgcmV0dXJuIHIKKworZGVmIHNwbGl0X3ZlcnNpb24ocyk6CisgICAgIiIiU3BsaXQgYSB2ZXJzaW9uIHN0cmluZyBpbnRvIGl0cyBjb25zdGl0dWVudCBwYXJ0cyAoUEUsIFBWLCBQUikiIiIKKyAgICBzID0gcy5zdHJpcCgiIDw+PSIpCisgICAgZSA9IDAKKyAgICBpZiBzLmNvdW50KCc6Jyk6CisgICAgICAgIGUgPSBpbnQocy5zcGxpdCgiOiIpWzBdKQorICAgICAgICBzID0gcy5zcGxpdCgiOiIpWzFdCisgICAgciA9ICIiCisgICAgaWYgcy5jb3VudCgnLScpOgorICAgICAgICByID0gcy5yc3BsaXQoIi0iLCAxKVsxXQorICAgICAgICBzID0gcy5yc3BsaXQoIi0iLCAxKVswXQorICAgIHYgPSBzCisgICAgcmV0dXJuIChlLCB2LCByKQorCitkZWYgdmVyY21wX3BhcnQoYSwgYik6CisgICAgdmEgPSBleHBsb2RlX3ZlcnNpb24oYSkKKyAgICB2YiA9IGV4cGxvZGVfdmVyc2lvbihiKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGlmIHZhID09IFtdOgorICAgICAgICAgICAgKG9hLCBjYSkgPSAoMCwgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChvYSwgY2EpID0gdmEucG9wKDApCisgICAgICAgIGlmIHZiID09IFtdOgorICAgICAgICAgICAgKG9iLCBjYikgPSAoMCwgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChvYiwgY2IpID0gdmIucG9wKDApCisgICAgICAgIGlmIChvYSwgY2EpID09ICgwLCBOb25lKSBhbmQgKG9iLCBjYikgPT0gKDAsIE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgb2EgPCBvYjoKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbGlmIG9hID4gb2I6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbGlmIGNhIDwgY2I6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBjYSA+IGNiOgorICAgICAgICAgICAgcmV0dXJuIDEKKworZGVmIHZlcmNtcCh0YSwgdGIpOgorICAgIChlYSwgdmEsIHJhKSA9IHRhCisgICAgKGViLCB2YiwgcmIpID0gdGIKKworICAgIHIgPSBpbnQoZWEgb3IgMCkgLSBpbnQoZWIgb3IgMCkKKyAgICBpZiAociA9PSAwKToKKyAgICAgICAgciA9IHZlcmNtcF9wYXJ0KHZhLCB2YikKKyAgICBpZiAociA9PSAwKToKKyAgICAgICAgciA9IHZlcmNtcF9wYXJ0KHJhLCByYikKKyAgICByZXR1cm4gcgorCitkZWYgdmVyY21wX3N0cmluZyhhLCBiKToKKyAgICB0YSA9IHNwbGl0X3ZlcnNpb24oYSkKKyAgICB0YiA9IHNwbGl0X3ZlcnNpb24oYikKKyAgICByZXR1cm4gdmVyY21wKHRhLCB0YikKKworZGVmIHZlcmNtcF9zdHJpbmdfb3AoYSwgYiwgb3ApOgorICAgICIiIgorICAgIENvbXBhcmUgdHdvIHZlcnNpb25zIGFuZCBjaGVjayBpZiB0aGUgc3BlY2lmaWVkIGNvbXBhcmlzb24gb3BlcmF0b3IgbWF0Y2hlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uLgorICAgIFRoaXMgZnVuY3Rpb24gaXMgZmFpcmx5IGxpYmVyYWwgYWJvdXQgd2hhdCBvcGVyYXRvcnMgaXQgd2lsbCBhY2NlcHQgc2luY2UgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZiBzdHlsZXMKKyAgICBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuCisgICAgIiIiCisgICAgcmVzID0gdmVyY21wX3N0cmluZyhhLCBiKQorICAgIGlmIG9wIGluICgnPScsICc9PScpOgorICAgICAgICByZXR1cm4gcmVzID09IDAKKyAgICBlbGlmIG9wID09ICc8PSc6CisgICAgICAgIHJldHVybiByZXMgPD0gMAorICAgIGVsaWYgb3AgPT0gJz49JzoKKyAgICAgICAgcmV0dXJuIHJlcyA+PSAwCisgICAgZWxpZiBvcCBpbiAoJz4nLCAnPj4nKToKKyAgICAgICAgcmV0dXJuIHJlcyA+IDAKKyAgICBlbGlmIG9wIGluICgnPCcsICc8PCcpOgorICAgICAgICByZXR1cm4gcmVzIDwgMAorICAgIGVsaWYgb3AgPT0gJyE9JzoKKyAgICAgICAgcmV0dXJuIHJlcyAhPSAwCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmVyc2lvblN0cmluZ0V4Y2VwdGlvbignVW5zdXBwb3J0ZWQgY29tcGFyaXNvbiBvcGVyYXRvciAiJXMiJyAlIG9wKQorCitkZWYgZXhwbG9kZV9kZXBzKHMpOgorICAgICIiIgorICAgIFRha2UgYW4gUkRFUEVORFMgc3R5bGUgc3RyaW5nIG9mIGZvcm1hdDoKKyAgICAiREVQRU5EMSAob3B0aW9uYWwgdmVyc2lvbikgREVQRU5EMiAob3B0aW9uYWwgdmVyc2lvbikgLi4uIgorICAgIGFuZCByZXR1cm4gYSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KKyAgICBWZXJzaW9uIGluZm9ybWF0aW9uIGlzIGlnbm9yZWQuCisgICAgIiIiCisgICAgciA9IFtdCisgICAgbCA9IHMuc3BsaXQoKQorICAgIGZsYWcgPSBGYWxzZQorICAgIGZvciBpIGluIGw6CisgICAgICAgIGlmIGlbMF0gPT0gJygnOgorICAgICAgICAgICAgZmxhZyA9IFRydWUKKyAgICAgICAgICAgICNqID0gW10KKyAgICAgICAgaWYgbm90IGZsYWc6CisgICAgICAgICAgICByLmFwcGVuZChpKQorICAgICAgICAjZWxzZToKKyAgICAgICAgIyAgICBqLmFwcGVuZChpKQorICAgICAgICBpZiBmbGFnIGFuZCBpLmVuZHN3aXRoKCcpJyk6CisgICAgICAgICAgICBmbGFnID0gRmFsc2UKKyAgICAgICAgICAgICMgSWdub3JlIHZlcnNpb24KKyAgICAgICAgICAgICNyWy0xXSArPSAnICcgKyAnICcuam9pbihqKQorICAgIHJldHVybiByCisKK2RlZiBleHBsb2RlX2RlcF92ZXJzaW9uczIocyk6CisgICAgIiIiCisgICAgVGFrZSBhbiBSREVQRU5EUyBzdHlsZSBzdHJpbmcgb2YgZm9ybWF0OgorICAgICJERVBFTkQxIChvcHRpb25hbCB2ZXJzaW9uKSBERVBFTkQyIChvcHRpb25hbCB2ZXJzaW9uKSAuLi4iCisgICAgYW5kIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgZGVwZW5kZW5jaWVzIGFuZCB2ZXJzaW9ucy4KKyAgICAiIiIKKyAgICByID0ge30KKyAgICBsID0gcy5yZXBsYWNlKCIsIiwgIiIpLnNwbGl0KCkKKyAgICBsYXN0ZGVwID0gTm9uZQorICAgIGxhc3RjbXAgPSAiIgorICAgIGxhc3R2ZXIgPSAiIgorICAgIGluY21wID0gRmFsc2UKKyAgICBpbnZlcnNpb24gPSBGYWxzZQorICAgIGZvciBpIGluIGw6CisgICAgICAgIGlmIGlbMF0gPT0gJygnOgorICAgICAgICAgICAgaW5jbXAgPSBUcnVlCisgICAgICAgICAgICBpID0gaVsxOl0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBpbmNtcDoKKyAgICAgICAgICAgIGluY21wID0gRmFsc2UKKyAgICAgICAgICAgIGludmVyc2lvbiA9IFRydWUKKyAgICAgICAgICAgICMgVGhpcyBsaXN0IGlzIGJhc2VkIG9uIGJlaGF2aW9yIGFuZCBzdXBwb3J0ZWQgY29tcGFyaXNvbnMgZnJvbSBkZWIsIG9wa2cgYW5kIHJwbS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgRXZlbiB0aG91Z2ggPTwsIDw8LCA9PSwgIT0sID0+LCBhbmQgPj4gbWF5IG5vdCBiZSBzdXBwb3J0ZWQsIAorICAgICAgICAgICAgIyB3ZSBsaXN0IGVhY2ggcG9zc2libHkgdmFsaWQgaXRlbS4gCisgICAgICAgICAgICAjIFRoZSBidWlsZCBzeXN0ZW0gaXMgcmVzcG9uc2libGUgZm9yIHZhbGlkYXRpb24gb2Ygd2hhdCBpdCBzdXBwb3J0cy4KKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgoJzw9JywgJz08JywgJzw8JywgJz09JywgJyE9JywgJz49JywgJz0+JywgJz4+JykpOgorICAgICAgICAgICAgICAgIGxhc3RjbXAgPSBpWzA6Ml0KKyAgICAgICAgICAgICAgICBpID0gaVsyOl0KKyAgICAgICAgICAgIGVsaWYgaS5zdGFydHN3aXRoKCgnPCcsICc+JywgJz0nKSk6CisgICAgICAgICAgICAgICAgbGFzdGNtcCA9IGlbMDoxXQorICAgICAgICAgICAgICAgIGkgPSBpWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYW4gdW5zdXBwb3J0ZWQgY2FzZSEKKyAgICAgICAgICAgICAgICByYWlzZSBWZXJzaW9uU3RyaW5nRXhjZXB0aW9uKCdJbnZhbGlkIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBpbiAiKCVzIiAtIGludmFsaWQgb3IgbWlzc2luZyBvcGVyYXRvcicgJSBpKQorICAgICAgICAgICAgICAgIGxhc3RjbXAgPSAoaSBvciAiIikKKyAgICAgICAgICAgICAgICBpID0gIiIKKyAgICAgICAgICAgIGkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBpbnZlcnNpb246CisgICAgICAgICAgICBpZiBpLmVuZHN3aXRoKCcpJyk6CisgICAgICAgICAgICAgICAgaSA9IGlbOi0xXSBvciAiIgorICAgICAgICAgICAgICAgIGludmVyc2lvbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgbGFzdHZlciBhbmQgaToKKyAgICAgICAgICAgICAgICAgICAgbGFzdHZlciArPSAiICIKKyAgICAgICAgICAgIGlmIGk6CisgICAgICAgICAgICAgICAgbGFzdHZlciArPSBpCisgICAgICAgICAgICAgICAgaWYgbGFzdGRlcCBub3QgaW4gcjoKKyAgICAgICAgICAgICAgICAgICAgcltsYXN0ZGVwXSA9IFtdCisgICAgICAgICAgICAgICAgcltsYXN0ZGVwXS5hcHBlbmQobGFzdGNtcCArICIgIiArIGxhc3R2ZXIpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICNpZiBub3QgaW52ZXJzaW9uOgorICAgICAgICBsYXN0ZGVwID0gaQorICAgICAgICBsYXN0dmVyID0gIiIKKyAgICAgICAgbGFzdGNtcCA9ICIiCisgICAgICAgIGlmIG5vdCAoaSBpbiByIGFuZCByW2ldKToKKyAgICAgICAgICAgIHJbbGFzdGRlcF0gPSBbXQorCisgICAgcmV0dXJuIHIKKworZGVmIGV4cGxvZGVfZGVwX3ZlcnNpb25zKHMpOgorICAgIHIgPSBleHBsb2RlX2RlcF92ZXJzaW9uczIocykKKyAgICBmb3IgZCBpbiByOgorICAgICAgICBpZiBub3QgcltkXToKKyAgICAgICAgICAgIHJbZF0gPSBOb25lCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBsZW4ocltkXSkgPiAxOgorICAgICAgICAgICAgYmIud2FybigiZXhwbG9kZV9kZXBfdmVyc2lvbnMoKTogSXRlbSAlcyBhcHBlYXJlZCBpbiBkZXBlbmRlbmN5IHN0cmluZyAnJXMnIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4gIGV4cGxvZGVfZGVwX3ZlcnNpb25zIGNhbm5vdCBjb3BlIHdpdGggdGhpcy4iICUgKGQsIHMpKQorICAgICAgICByW2RdID0gcltkXVswXQorICAgIHJldHVybiByCisKK2RlZiBqb2luX2RlcHMoZGVwcywgY29tbWFzZXA9VHJ1ZSk6CisgICAgIiIiCisgICAgVGFrZSB0aGUgcmVzdWx0IGZyb20gZXhwbG9kZV9kZXBfdmVyc2lvbnMgYW5kIGdlbmVyYXRlIGEgZGVwZW5kZW5jeSBzdHJpbmcKKyAgICAiIiIKKyAgICByZXN1bHQgPSBbXQorICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgaWYgZGVwc1tkZXBdOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZXBzW2RlcF0sIGxpc3QpOgorICAgICAgICAgICAgICAgIGZvciB2IGluIGRlcHNbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZXAgKyAiICgiICsgdiArICIpIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZXAgKyAiICgiICsgZGVwc1tkZXBdICsgIikiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZXApCisgICAgaWYgY29tbWFzZXA6CisgICAgICAgIHJldHVybiAiLCAiLmpvaW4ocmVzdWx0KQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAiICIuam9pbihyZXN1bHQpCisKK2RlZiBfcHJpbnRfdHJhY2UoYm9keSwgbGluZSk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIEVudmlyb25tZW50IG9mIGEgVGV4dCBCb2R5CisgICAgIiIiCisgICAgZXJyb3IgPSBbXQorICAgICMgcHJpbnQgdGhlIGVudmlyb25tZW50IG9mIHRoZSBtZXRob2QKKyAgICBtaW5fbGluZSA9IG1heCgxLCBsaW5lLTQpCisgICAgbWF4X2xpbmUgPSBtaW4obGluZSArIDQsIGxlbihib2R5KSkKKyAgICBmb3IgaSBpbiByYW5nZShtaW5fbGluZSwgbWF4X2xpbmUgKyAxKToKKyAgICAgICAgaWYgbGluZSA9PSBpOgorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCcgKioqICUuNGQ6JXMnICUgKGksIGJvZHlbaS0xXS5yc3RyaXAoKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoJyAgICAgJS40ZDolcycgJSAoaSwgYm9keVtpLTFdLnJzdHJpcCgpKSkKKyAgICByZXR1cm4gZXJyb3IKKworZGVmIGJldHRlcl9jb21waWxlKHRleHQsIGZpbGUsIHJlYWxmaWxlLCBtb2RlID0gImV4ZWMiKToKKyAgICAiIiIKKyAgICBBIGJldHRlciBjb21waWxlIG1ldGhvZC4gVGhpcyBtZXRob2QKKyAgICB3aWxsIHByaW50IHRoZSBvZmZlbmRpbmcgbGluZXMuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gY29tcGlsZSh0ZXh0LCBmaWxlLCBtb2RlKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgZXJyb3IgPSBbXQorICAgICAgICAjIHNwbGl0IHRoZSB0ZXh0IGludG8gbGluZXMgYWdhaW4KKyAgICAgICAgYm9keSA9IHRleHQuc3BsaXQoJ1xuJykKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJFcnJvciBpbiBjb21waWxpbmcgcHl0aG9uIGZ1bmN0aW9uIGluICVzOlxuIiAlIHJlYWxmaWxlKQorICAgICAgICBpZiBlLmxpbmVubzoKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiVGhlIGNvZGUgbGluZXMgcmVzdWx0aW5nIGluIHRoaXMgZXJyb3Igd2VyZToiKQorICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKF9wcmludF90cmFjZShib2R5LCBlLmxpbmVubykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoIlRoZSBmdW5jdGlvbiBjYXVzaW5nIHRoaXMgZXJyb3Igd2FzOiIpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBib2R5OgorICAgICAgICAgICAgICAgIGVycm9yLmFwcGVuZChsaW5lKQorICAgICAgICBlcnJvci5hcHBlbmQoIiVzOiAlcyIgJSAoZS5fX2NsYXNzX18uX19uYW1lX18sIHN0cihlKSkpCisKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJcbiIuam9pbihlcnJvcikpCisKKyAgICAgICAgZSA9IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbihlKQorICAgICAgICByYWlzZSBlCisKK2RlZiBfcHJpbnRfZXhjZXB0aW9uKHQsIHZhbHVlLCB0YiwgcmVhbGZpbGUsIHRleHQsIGNvbnRleHQpOgorICAgIGVycm9yID0gW10KKyAgICB0cnk6CisgICAgICAgIGV4Y2VwdGlvbiA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkodCwgdmFsdWUpCisgICAgICAgIGVycm9yLmFwcGVuZCgnRXJyb3IgZXhlY3V0aW5nIGEgcHl0aG9uIGZ1bmN0aW9uIGluICVzOlxuJyAlIHJlYWxmaWxlKQorCisgICAgICAgICMgU3RyaXAgJ3VzJyBmcm9tIHRoZSBzdGFjayAoYmV0dGVyX2V4ZWMgY2FsbCkKKyAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisKKyAgICAgICAgdGV4dGFycmF5ID0gdGV4dC5zcGxpdCgnXG4nKQorCisgICAgICAgIGxpbmVmYWlsZWQgPSB0Yi50Yl9saW5lbm8KKworICAgICAgICB0YmV4dHJhY3QgPSB0cmFjZWJhY2suZXh0cmFjdF90Yih0YikKKyAgICAgICAgdGJmb3JtYXQgPSB0cmFjZWJhY2suZm9ybWF0X2xpc3QodGJleHRyYWN0KQorICAgICAgICBlcnJvci5hcHBlbmQoIlRoZSBzdGFjayB0cmFjZSBvZiBweXRob24gY2FsbHMgdGhhdCByZXN1bHRlZCBpbiB0aGlzIGV4Y2VwdGlvbi9mYWlsdXJlIHdhczoiKQorICAgICAgICBlcnJvci5hcHBlbmQoIkZpbGU6ICclcycsIGxpbmVubzogJXMsIGZ1bmN0aW9uOiAlcyIgJSAodGJleHRyYWN0WzBdWzBdLCB0YmV4dHJhY3RbMF1bMV0sIHRiZXh0cmFjdFswXVsyXSkpCisgICAgICAgIGVycm9yLmV4dGVuZChfcHJpbnRfdHJhY2UodGV4dGFycmF5LCBsaW5lZmFpbGVkKSkKKworICAgICAgICAjIFNlZSBpZiB0aGlzIGlzIGEgZnVuY3Rpb24gd2UgY29uc3RydWN0ZWQgYW5kIGhhcyBjYWxscyBiYWNrIGludG8gb3RoZXIgZnVuY3Rpb25zIGluCisgICAgICAgICMgInRleHQiLiBJZiBzbywgdHJ5IGFuZCBpbXByb3ZlIHRoZSBjb250ZXh0IG9mIHRoZSBlcnJvciBieSBkaXZpbmcgZG93biB0aGUgdHJhY2UKKyAgICAgICAgbGV2ZWwgPSAwCisgICAgICAgIG5leHR0YiA9IHRiLnRiX25leHQKKyAgICAgICAgd2hpbGUgbmV4dHRiIGlzIG5vdCBOb25lIGFuZCAobGV2ZWwrMSkgPCBsZW4odGJleHRyYWN0KToKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiRmlsZTogJyVzJywgbGluZW5vOiAlcywgZnVuY3Rpb246ICVzIiAlICh0YmV4dHJhY3RbbGV2ZWwrMV1bMF0sIHRiZXh0cmFjdFtsZXZlbCsxXVsxXSwgdGJleHRyYWN0W2xldmVsKzFdWzJdKSkKKyAgICAgICAgICAgIGlmIHRiZXh0cmFjdFtsZXZlbF1bMF0gPT0gdGJleHRyYWN0W2xldmVsKzFdWzBdIGFuZCB0YmV4dHJhY3RbbGV2ZWwrMV1bMl0gPT0gdGJleHRyYWN0W2xldmVsXVswXToKKyAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIHdhcyBwb3NzaWJseSBpbiB0aGUgc3RyaW5nIHdlIGNvbXBpbGVkIG91cnNlbHZlcworICAgICAgICAgICAgICAgIGVycm9yLmV4dGVuZChfcHJpbnRfdHJhY2UodGV4dGFycmF5LCB0YmV4dHJhY3RbbGV2ZWwrMV1bMV0pKQorICAgICAgICAgICAgZWxpZiB0YmV4dHJhY3RbbGV2ZWwrMV1bMF0uc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBpbiBhIGZpbGUsIHRyeSBhbmQgbG9hZCBpdAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRiZXh0cmFjdFtsZXZlbCsxXVswXSwgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmV4dGVuZChfcHJpbnRfdHJhY2UodGV4dCwgdGJleHRyYWN0W2xldmVsKzFdWzFdKSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGVycm9yLmFwcGVuZCh0YmZvcm1hdFtsZXZlbCsxXSkKKyAgICAgICAgICAgIGVsaWYgImQiIGluIGNvbnRleHQgYW5kIHRiZXh0cmFjdFtsZXZlbCsxXVsyXToKKyAgICAgICAgICAgICAgICAjIFRyeSBhbmQgZmluZCB0aGUgY29kZSBpbiB0aGUgZGF0YXN0b3JlIGJhc2VkIG9uIHRoZSBmdW5jdGlvbm5hbWUKKyAgICAgICAgICAgICAgICBkID0gY29udGV4dFsiZCJdCisgICAgICAgICAgICAgICAgZnVuY3Rpb25uYW1lID0gdGJleHRyYWN0W2xldmVsKzFdWzJdCisgICAgICAgICAgICAgICAgdGV4dCA9IGQuZ2V0VmFyKGZ1bmN0aW9ubmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKHRleHQuc3BsaXQoJ1xuJyksIHRiZXh0cmFjdFtsZXZlbCsxXVsxXSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IuYXBwZW5kKHRiZm9ybWF0W2xldmVsKzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJvci5hcHBlbmQodGJmb3JtYXRbbGV2ZWwrMV0pCisgICAgICAgICAgICBuZXh0dGIgPSB0Yi50Yl9uZXh0CisgICAgICAgICAgICBsZXZlbCA9IGxldmVsICsgMQorCisgICAgICAgIGVycm9yLmFwcGVuZCgiRXhjZXB0aW9uOiAlcyIgJSAnJy5qb2luKGV4Y2VwdGlvbikpCisgICAgZmluYWxseToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJcbiIuam9pbihlcnJvcikpCisKK2RlZiBiZXR0ZXJfZXhlYyhjb2RlLCBjb250ZXh0LCB0ZXh0ID0gTm9uZSwgcmVhbGZpbGUgPSAiPGNvZGU+Iik6CisgICAgIiIiCisgICAgU2ltaWxpYXIgdG8gYmV0dGVyX2NvbXBpbGUsIGJldHRlcl9leGVjIHdpbGwKKyAgICBwcmludCB0aGUgbGluZXMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRoZQorICAgIGVycm9yLgorICAgICIiIgorICAgIGltcG9ydCBiYi5wYXJzZQorICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICB0ZXh0ID0gY29kZQorICAgIGlmIG5vdCBoYXNhdHRyKGNvZGUsICJjb19maWxlbmFtZSIpOgorICAgICAgICBjb2RlID0gYmV0dGVyX2NvbXBpbGUoY29kZSwgcmVhbGZpbGUsIHJlYWxmaWxlKQorICAgIHRyeToKKyAgICAgICAgZXhlYyhjb2RlLCBnZXRfY29udGV4dCgpLCBjb250ZXh0KQorICAgIGV4Y2VwdCAoYmIuQkJIYW5kbGVkRXhjZXB0aW9uLCBiYi5wYXJzZS5Ta2lwUmVjaXBlLCBiYi5idWlsZC5GdW5jRmFpbGVkLCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yKToKKyAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duIHNvIHBhc3N0aHJvdWdoLCBubyBuZWVkIGZvciB0cmFjZWJhY2sKKyAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICh0LCB2YWx1ZSwgdGIpID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3ByaW50X2V4Y2VwdGlvbih0LCB2YWx1ZSwgdGIsIHJlYWxmaWxlLCB0ZXh0LCBjb250ZXh0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBoYW5kbGVyIGVycm9yOiAlcyIgJSBzdHIoZSkpCisKKyAgICAgICAgZSA9IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbihlKQorICAgICAgICByYWlzZSBlCisKK2RlZiBzaW1wbGVfZXhlYyhjb2RlLCBjb250ZXh0KToKKyAgICBleGVjKGNvZGUsIGdldF9jb250ZXh0KCksIGNvbnRleHQpCisKK2RlZiBiZXR0ZXJfZXZhbChzb3VyY2UsIGxvY2Fscyk6CisgICAgcmV0dXJuIGV2YWwoc291cmNlLCBnZXRfY29udGV4dCgpLCBsb2NhbHMpCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIGZpbGVzbG9ja2VkKGZpbGVzKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgZm9yIGxvY2tpbmcgYW5kIHVubG9ja2luZyBmaWxlIGxvY2tzLiIiIgorICAgIGxvY2tzID0gW10KKyAgICBpZiBmaWxlczoKKyAgICAgICAgZm9yIGxvY2tmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2tmaWxlKSkKKworICAgIHlpZWxkCisKKyAgICBmb3IgbG9jayBpbiBsb2NrczoKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCitAY29udGV4dG1hbmFnZXIKK2RlZiB0aW1lb3V0KHNlY29uZHMpOgorICAgIGRlZiB0aW1lb3V0X2hhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIHBhc3MKKworICAgIG9yaWdpbmFsX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCB0aW1lb3V0X2hhbmRsZXIpCisKKyAgICB0cnk6CisgICAgICAgIHNpZ25hbC5hbGFybShzZWNvbmRzKQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIHNpZ25hbC5hbGFybSgwKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBvcmlnaW5hbF9oYW5kbGVyKQorCitkZWYgbG9ja2ZpbGUobmFtZSwgc2hhcmVkPUZhbHNlLCByZXRyeT1UcnVlLCBibG9jaz1GYWxzZSk6CisgICAgIiIiCisgICAgVXNlIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhIGxvY2sgZmlsZSwgcmV0dXJuIHdoZW4gdGhlIGxvY2sgaGFzCisgICAgYmVlbiBhY3F1aXJlZC4gUmV0dXJucyBhIHZhcmlhYmxlIHRvIHBhc3MgdG8gdW5sb2NrZmlsZSgpLgorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHJldHJ5OiBUcnVlIHRvIHJlLXRyeSBsb2NraW5nIGlmIGl0IGZhaWxzLCBGYWxzZSBvdGhlcndpc2UKKyAgICAgICAgYmxvY2s6IFRydWUgdG8gYmxvY2sgdW50aWwgdGhlIGxvY2sgc3VjY2VlZHMsIEZhbHNlIG90aGVyd2lzZQorICAgIFRoZSByZXRyeSBhbmQgYmxvY2sgcGFyYW1ldGVycyBhcmUga2luZCBvZiBlcXVpdmFsZW50IHVubGVzcyB5b3UKKyAgICBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2Ygc2VuZGluZyBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcyB0byBicmVhaworICAgIG91dCAtIGF0IHdoaWNoIHBvaW50IHlvdSB3YW50IGJsb2NrPVRydWUgcmF0aGVyIHRoYW4gcmV0cnk9VHJ1ZS4KKyAgICAiIiIKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKG5hbWUpCisgICAgbWtkaXJoaWVyKGRpcm5hbWUpCisKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGRpcm5hbWUsIG9zLldfT0spOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBhY3F1aXJlIGxvY2sgJyVzJywgZGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgb3AgPSBmY250bC5MT0NLX0VYCisgICAgaWYgc2hhcmVkOgorICAgICAgICBvcCA9IGZjbnRsLkxPQ0tfU0gKKyAgICBpZiBub3QgcmV0cnkgYW5kIG5vdCBibG9jazoKKyAgICAgICAgb3AgPSBvcCB8IGZjbnRsLkxPQ0tfTkIKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgICMgSWYgd2UgbGVhdmUgdGhlIGxvY2tmaWxlcyBseWluZyBhcm91bmQgdGhlcmUgaXMgbm8gcHJvYmxlbQorICAgICAgICAjIGJ1dCB3ZSBzaG91bGQgY2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzLiBUaGlzIGdpdmVzIHBvdGVudGlhbAorICAgICAgICAjIGZvciByYWNlcyB0aG91Z2guIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHdoZW4gd2UgYWNxdWlyZSB0aGUgbG9jaworICAgICAgICAjIHdlIGNoZWNrIHRoZSBmaWxlIHdlIGxvY2tlZCB3YXMgc3RpbGwgdGhlIGxvY2sgZmlsZSBvbiBkaXNrLgorICAgICAgICAjIGJ5IGNvbXBhcmluZyBpbm9kZSBudW1iZXJzLiBJZiB0aGV5IGRvbid0IG1hdGNoIG9yIHRoZSBsb2NrZmlsZQorICAgICAgICAjIG5vIGxvbmdlciBleGlzdHMsIHdlIHN0YXJ0IGFnYWluLgorCisgICAgICAgICMgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB1bmZhaXIgc2luY2UgdGhlIGxhc3QgcGVyc29uIHRvIHJlcXVlc3QgdGhlCisgICAgICAgICMgbG9jayBpcyB0aGUgbW9zdCBsaWtlbHkgdG8gd2luIGl0LgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxmID0gb3BlbihuYW1lLCAnYSsnKQorICAgICAgICAgICAgZmlsZW5vID0gbGYuZmlsZW5vKCkKKyAgICAgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgb3ApCisgICAgICAgICAgICBzdGF0aW5mbyA9IG9zLmZzdGF0KGZpbGVubykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxmLm5hbWUpOgorICAgICAgICAgICAgICAgIHN0YXRpbmZvMiA9IG9zLnN0YXQobGYubmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0aW5mby5zdF9pbm8gPT0gc3RhdGluZm8yLnN0X2lubzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxmCisgICAgICAgICAgICBsZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCByZXRyeToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKK2RlZiB1bmxvY2tmaWxlKGxmKToKKyAgICAiIiIKKyAgICBVbmxvY2sgYSBmaWxlIGxvY2tlZCB1c2luZyBsb2NrZmlsZSgpCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICAjIElmIHdlIGhhZCBhIHNoYXJlZCBsb2NrLCB3ZSBuZWVkIHRvIHByb21vdGUgdG8gZXhjbHVzaXZlIGJlZm9yZQorICAgICAgICAjIHJlbW92aW5nIHRoZSBsb2NrZmlsZS4gQXR0ZW1wdCB0aGlzLCBpZ25vcmUgZmFpbHVyZXMuCisgICAgICAgIGZjbnRsLmZsb2NrKGxmLmZpbGVubygpLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIG9zLnVubGluayhsZi5uYW1lKQorICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICBmY250bC5mbG9jayhsZi5maWxlbm8oKSwgZmNudGwuTE9DS19VTikKKyAgICBsZi5jbG9zZSgpCisKK2RlZiBtZDVfZmlsZShmaWxlbmFtZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNRDUgY2hlY2tzdW0gb2YgZmlsZW5hbWUuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgaGFzaGxpYgorICAgICAgICBtID0gaGFzaGxpYi5tZDUoKQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgaW1wb3J0IG1kNQorICAgICAgICBtID0gbWQ1Lm5ldygpCisKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBtLnVwZGF0ZShsaW5lKQorICAgIHJldHVybiBtLmhleGRpZ2VzdCgpCisKK2RlZiBzaGEyNTZfZmlsZShmaWxlbmFtZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAyNTYtYml0IFNIQSBjaGVja3N1bSBvZgorICAgIGZpbGVuYW1lLiAgT24gUHl0aG9uIDIuNCB0aGlzIHdpbGwgcmV0dXJuIE5vbmUsIHNvIGNhbGxlcnMgd2lsbCBuZWVkIHRvCisgICAgaGFuZGxlIHRoYXQgYnkgZWl0aGVyIHNraXBwaW5nIFNIQSBjaGVja3MsIG9yIHJ1bm5pbmcgYSBzdGFuZGFsb25lIHNoYTI1NnN1bQorICAgIGJpbmFyeS4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBoYXNobGliCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcyA9IGhhc2hsaWIuc2hhMjU2KCkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBzLnVwZGF0ZShsaW5lKQorICAgIHJldHVybiBzLmhleGRpZ2VzdCgpCisKK2RlZiBwcmVzZXJ2ZWRfZW52dmFyc19leHBvcnRlZCgpOgorICAgICIiIlZhcmlhYmxlcyB3aGljaCBhcmUgdGFrZW4gZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIHBsYWNlZCBpbiBhbmQgZXhwb3J0ZWQKKyAgICBmcm9tIHRoZSBtZXRhZGF0YSIiIgorICAgIHJldHVybiBbCisgICAgICAgICdCQl9UQVNLSEFTSCcsCisgICAgICAgICdIT01FJywKKyAgICAgICAgJ0xPR05BTUUnLAorICAgICAgICAnUEFUSCcsCisgICAgICAgICdQV0QnLAorICAgICAgICAnU0hFTEwnLAorICAgICAgICAnVEVSTScsCisgICAgICAgICdVU0VSJywKKyAgICBdCisKK2RlZiBwcmVzZXJ2ZWRfZW52dmFycygpOgorICAgICIiIlZhcmlhYmxlcyB3aGljaCBhcmUgdGFrZW4gZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIHBsYWNlZCBpbiB0aGUgbWV0YWRhdGEiIiIKKyAgICB2ID0gWworICAgICAgICAnQkJQQVRIJywKKyAgICAgICAgJ0JCX1BSRVNFUlZFX0VOVicsCisgICAgICAgICdCQl9FTlZfV0hJVEVMSVNUJywKKyAgICAgICAgJ0JCX0VOVl9FWFRSQVdISVRFJywKKyAgICBdCisgICAgcmV0dXJuIHYgKyBwcmVzZXJ2ZWRfZW52dmFyc19leHBvcnRlZCgpCisKK2RlZiBmaWx0ZXJfZW52aXJvbm1lbnQoZ29vZF92YXJzKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSBwcmlzdGluZSBlbnZpcm9ubWVudCBmb3IgYml0YmFrZS4gVGhpcyB3aWxsIHJlbW92ZSB2YXJpYWJsZXMgdGhhdAorICAgIGFyZSBub3Qga25vd24gYW5kIG1heSBpbmZsdWVuY2UgdGhlIGJ1aWxkIGluIGEgbmVnYXRpdmUgd2F5LgorICAgICIiIgorCisgICAgcmVtb3ZlZF92YXJzID0ge30KKyAgICBmb3Iga2V5IGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICBpZiBrZXkgaW4gZ29vZF92YXJzOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICByZW1vdmVkX3ZhcnNba2V5XSA9IG9zLmVudmlyb25ba2V5XQorICAgICAgICBvcy51bnNldGVudihrZXkpCisgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KKworICAgIGlmIHJlbW92ZWRfdmFyczoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZW1vdmVkIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50OiAlcyIsICIsICIuam9pbihyZW1vdmVkX3ZhcnMua2V5cygpKSkKKworICAgIHJldHVybiByZW1vdmVkX3ZhcnMKKworZGVmIGFwcHJvdmVkX3ZhcmlhYmxlcygpOgorICAgICIiIgorICAgIERldGVybWluZSBhbmQgcmV0dXJuIHRoZSBsaXN0IG9mIHdoaXRlbGlzdGVkIHZhcmlhYmxlcyB3aGljaCBhcmUgYXBwcm92ZWQKKyAgICB0byByZW1haW4gaW4gdGhlIGVudmlyb25tZW50LgorICAgICIiIgorICAgIGlmICdCQl9QUkVTRVJWRV9FTlYnIGluIG9zLmVudmlyb246CisgICAgICAgIHJldHVybiBvcy5lbnZpcm9uLmtleXMoKQorICAgIGFwcHJvdmVkID0gW10KKyAgICBpZiAnQkJfRU5WX1dISVRFTElTVCcgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgYXBwcm92ZWQgPSBvcy5lbnZpcm9uWydCQl9FTlZfV0hJVEVMSVNUJ10uc3BsaXQoKQorICAgICAgICBhcHByb3ZlZC5leHRlbmQoWydCQl9FTlZfV0hJVEVMSVNUJ10pCisgICAgZWxzZToKKyAgICAgICAgYXBwcm92ZWQgPSBwcmVzZXJ2ZWRfZW52dmFycygpCisgICAgaWYgJ0JCX0VOVl9FWFRSQVdISVRFJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICBhcHByb3ZlZC5leHRlbmQob3MuZW52aXJvblsnQkJfRU5WX0VYVFJBV0hJVEUnXS5zcGxpdCgpKQorICAgICAgICBpZiAnQkJfRU5WX0VYVFJBV0hJVEUnIG5vdCBpbiBhcHByb3ZlZDoKKyAgICAgICAgICAgIGFwcHJvdmVkLmV4dGVuZChbJ0JCX0VOVl9FWFRSQVdISVRFJ10pCisgICAgcmV0dXJuIGFwcHJvdmVkCisKK2RlZiBjbGVhbl9lbnZpcm9ubWVudCgpOgorICAgICIiIgorICAgIENsZWFuIHVwIGFueSBzcHVyaW91cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXMgd2lsbCByZW1vdmUgYW55CisgICAgdmFyaWFibGVzIHRoZSB1c2VyIGhhc24ndCBjaG9zZW4gdG8gcHJlc2VydmUuCisgICAgIiIiCisgICAgaWYgJ0JCX1BSRVNFUlZFX0VOVicgbm90IGluIG9zLmVudmlyb246CisgICAgICAgIGdvb2RfdmFycyA9IGFwcHJvdmVkX3ZhcmlhYmxlcygpCisgICAgICAgIHJldHVybiBmaWx0ZXJfZW52aXJvbm1lbnQoZ29vZF92YXJzKQorCisgICAgcmV0dXJuIHt9CisKK2RlZiBlbXB0eV9lbnZpcm9ubWVudCgpOgorICAgICIiIgorICAgIFJlbW92ZSBhbGwgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50LgorICAgICIiIgorICAgIGZvciBzIGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICBvcy51bnNldGVudihzKQorICAgICAgICBkZWwgb3MuZW52aXJvbltzXQorCitkZWYgYnVpbGRfZW52aXJvbm1lbnQoZCk6CisgICAgIiIiCisgICAgQnVpbGQgYW4gZW52aXJvbm1lbnQgZnJvbSBhbGwgZXhwb3J0ZWQgdmFyaWFibGVzLgorICAgICIiIgorICAgIGltcG9ydCBiYi5kYXRhCisgICAgZm9yIHZhciBpbiBiYi5kYXRhLmtleXMoZCk6CisgICAgICAgIGV4cG9ydCA9IGQuZ2V0VmFyRmxhZyh2YXIsICJleHBvcnQiKQorICAgICAgICBpZiBleHBvcnQ6CisgICAgICAgICAgICBvcy5lbnZpcm9uW3Zhcl0gPSBkLmdldFZhcih2YXIsIFRydWUpIG9yICIiCisKK2RlZiBfY2hlY2tfdW5zYWZlX2RlbGV0ZV9wYXRoKHBhdGgpOgorICAgICIiIgorICAgIEJhc2ljIHNhZmVndWFyZCBhZ2FpbnN0IHJlY3Vyc2l2ZWx5IGRlbGV0aW5nIHNvbWV0aGluZyB3ZSBzaG91bGRuJ3QuIElmIGl0IHJldHVybnMgVHJ1ZSwKKyAgICB0aGUgY2FsbGVyIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gd2l0aCBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlLgorICAgIE5PVEU6IFRoaXMgaXMgTk9UIG1lYW50IHRvIGJlIGEgc2VjdXJpdHkgbWVjaGFuaXNtIC0ganVzdCBhIGd1YXJkIGFnYWluc3Qgc2lsbHkgbWlzdGFrZXMKKyAgICB3aXRoIHBvdGVudGlhbGx5IGRpc2FzdHJvdXMgcmVzdWx0cy4KKyAgICAiIiIKKyAgICBleHRyYSA9ICcnCisgICAgIyBIT01FIG1pZ2h0IG5vdCBiZSAvaG9tZS9zb21ldGhpbmcsIHNvIGluIGNhc2Ugd2UgY2FuIGdldCBpdCwgY2hlY2sgYWdhaW5zdCBpdAorICAgIGhvbWVkaXIgPSBvcy5lbnZpcm9uLmdldCgnSE9NRScsICcnKQorICAgIGlmIGhvbWVkaXI6CisgICAgICAgIGV4dHJhID0gJ3wlcycgJSBob21lZGlyCisgICAgaWYgcmUubWF0Y2goJygvfC8vfC9ob21lfC9ob21lL1teL10qJXMpJCcgJSBleHRyYSwgb3MucGF0aC5hYnNwYXRoKHBhdGgpKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHJlbW92ZShwYXRoLCByZWN1cnNlPUZhbHNlKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIHJtIC1mIG9yIHJtIC1yZiIiIgorICAgIGlmIG5vdCBwYXRoOgorICAgICAgICByZXR1cm4KKyAgICBpZiByZWN1cnNlOgorICAgICAgICBmb3IgbmFtZSBpbiBnbG9iLmdsb2IocGF0aCk6CisgICAgICAgICAgICBpZiBfY2hlY2tfdW5zYWZlX2RlbGV0ZV9wYXRoKHBhdGgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignYmIudXRpbHMucmVtb3ZlOiBjYWxsZWQgd2l0aCBkYW5nZXJvdXMgcGF0aCAiJXMiIGFuZCByZWN1cnNlPVRydWUsIHJlZnVzaW5nIHRvIGRlbGV0ZSEnICUgcGF0aCkKKyAgICAgICAgIyBzaHV0aWwucm10cmVlKG5hbWUpIHdvdWxkIGJlIGlkZWFsIGJ1dCBpdHMgdG9vIHNsb3cKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsncm0nLCAnLXJmJ10gKyBnbG9iLmdsb2IocGF0aCkpCisgICAgICAgIHJldHVybgorICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIHBydW5lZGlyKHRvcGRpcik6CisgICAgIyBEZWxldGUgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSB0aGUgZGlyZWN0b3J5IG5hbWVkIGluICd0b3BkaXInLgorICAgICMgQ0FVVElPTjogIFRoaXMgaXMgZGFuZ2Vyb3VzIQorICAgIGlmIF9jaGVja191bnNhZmVfZGVsZXRlX3BhdGgodG9wZGlyKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdiYi51dGlscy5wcnVuZWRpcjogY2FsbGVkIHdpdGggZGFuZ2Vyb3VzIHBhdGggIiVzIiwgcmVmdXNpbmcgdG8gZGVsZXRlIScgJSB0b3BkaXIpCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodG9wZGlyLCB0b3Bkb3duID0gRmFsc2UpOgorICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICBvcy5ybWRpcih0b3BkaXIpCisKKyMKKyMgQ291bGQgYWxzbyB1c2UgcmV0dXJuIHJlLmNvbXBpbGUoIiglcykiICUgInwiLmpvaW4obWFwKHJlLmVzY2FwZSwgc3VmZml4ZXMpKSkuc3ViKGxhbWJkYSBtbzogIiIsIHZhcikKKyMgYnV0IHRoYXRzIHBvc3NpYmx5IGluc2FuZSBhbmQgc3VmZml4ZXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgc21hbGwKKyMKK2RlZiBwcnVuZV9zdWZmaXgodmFyLCBzdWZmaXhlcywgZCk6CisgICAgIyBTZWUgaWYgdmFyIGVuZHMgd2l0aCBhbnkgb2YgdGhlIHN1ZmZpeGVzIGxpc3RlZCBhbmQKKyAgICAjIHJlbW92ZSBpdCBpZiBmb3VuZAorICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgIGlmIHZhci5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgcmV0dXJuIHZhci5yZXBsYWNlKHN1ZmZpeCwgIiIpCisgICAgcmV0dXJuIHZhcgorCitkZWYgbWtkaXJoaWVyKGRpcmVjdG9yeSk6CisgICAgIiIiQ3JlYXRlIGEgZGlyZWN0b3J5IGxpa2UgJ21rZGlyIC1wJywgYnV0IGRvZXMgbm90IGNvbXBsYWluIGlmCisgICAgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGxpa2Ugb3MubWFrZWRpcnMKKyAgICAiIiIKKworICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlyZWN0b3J5KQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UgZQorCitkZWYgbW92ZWZpbGUoc3JjLCBkZXN0LCBuZXdtdGltZSA9IE5vbmUsIHNzdGF0ID0gTm9uZSk6CisgICAgIiIiTW92ZXMgYSBmaWxlIGZyb20gc3JjIHRvIGRlc3QsIHByZXNlcnZpbmcgYWxsIHBlcm1pc3Npb25zIGFuZAorICAgIGF0dHJpYnV0ZXM7IG10aW1lIHdpbGwgYmUgcHJlc2VydmVkIGV2ZW4gd2hlbiBtb3ZpbmcgYWNyb3NzCisgICAgZmlsZXN5c3RlbXMuICBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBhbmQgZmFsc2Ugb24gZmFpbHVyZS4gTW92ZSBpcworICAgIGF0b21pYy4KKyAgICAiIiIKKworICAgICNwcmludCAibW92ZWZpbGUoIiArIHNyYyArICIsIiArIGRlc3QgKyAiLCIgKyBzdHIobmV3bXRpbWUpICsgIiwiICsgc3RyKHNzdGF0KSArICIpIgorICAgIHRyeToKKyAgICAgICAgaWYgbm90IHNzdGF0OgorICAgICAgICAgICAgc3N0YXQgPSBvcy5sc3RhdChzcmMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBwcmludCgibW92ZWZpbGU6IFN0YXRpbmcgc291cmNlIGZpbGUgZmFpbGVkLi4uIiwgZSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlc3RleGlzdHMgPSAxCisgICAgdHJ5OgorICAgICAgICBkc3RhdCA9IG9zLmxzdGF0KGRlc3QpCisgICAgZXhjZXB0OgorICAgICAgICBkc3RhdCA9IG9zLmxzdGF0KG9zLnBhdGguZGlybmFtZShkZXN0KSkKKyAgICAgICAgZGVzdGV4aXN0cyA9IDAKKworICAgIGlmIGRlc3RleGlzdHM6CisgICAgICAgIGlmIHN0YXQuU19JU0xOSyhkc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgICAgICAgICBkZXN0ZXhpc3RzID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGlmIHN0YXQuU19JU0xOSyhzc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucmVhZGxpbmsoc3JjKQorICAgICAgICAgICAgaWYgZGVzdGV4aXN0cyBhbmQgbm90IHN0YXQuU19JU0RJUihkc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsodGFyZ2V0LCBkZXN0KQorICAgICAgICAgICAgI29zLmxjaG93bihkZXN0LHNzdGF0W3N0YXQuU1RfVUlEXSxzc3RhdFtzdGF0LlNUX0dJRF0pCisgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQorICAgICAgICAgICAgcmV0dXJuIG9zLmxzdGF0KGRlc3QpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KCJtb3ZlZmlsZTogZmFpbGVkIHRvIHByb3Blcmx5IGNyZWF0ZSBzeW1saW5rOiIsIGRlc3QsICItPiIsIHRhcmdldCwgZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICByZW5hbWVmYWlsZWQgPSAxCisgICAgaWYgc3N0YXRbc3RhdC5TVF9ERVZdID09IGRzdGF0W3N0YXQuU1RfREVWXToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBvcy5yZW5hbWUgbmVlZHMgdG8ga25vdyB0aGUgZGVzdCBwYXRoIGVuZGluZyB3aXRoIGZpbGUgbmFtZQorICAgICAgICAgICAgIyBzbyBhcHBlbmQgdGhlIGZpbGUgbmFtZSB0byBhIHBhdGggb25seSBpZiBpdCdzIGEgZGlyIHNwZWNpZmllZAorICAgICAgICAgICAgc3JjZm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyYykKKyAgICAgICAgICAgIGRlc3RwYXRoID0gb3MucGF0aC5qb2luKGRlc3QsIHNyY2ZuYW1lKSBpZiBvcy5wYXRoLmlzZGlyKGRlc3QpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGVzdAorICAgICAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdHBhdGgpCisgICAgICAgICAgICByZW5hbWVmYWlsZWQgPSAwCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGlmIGVbMF0gIT0gZXJybm8uRVhERVY6CisgICAgICAgICAgICAgICAgIyBTb21lIHJhbmRvbSBlcnJvci4KKyAgICAgICAgICAgICAgICBwcmludCgibW92ZWZpbGU6IEZhaWxlZCB0byBtb3ZlIiwgc3JjLCAidG8iLCBkZXN0LCBlKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIEludmFsaWQgY3Jvc3MtZGV2aWNlLWxpbmsgJ2JpbmQnIG1vdW50ZWQgb3IgYWN0dWFsbHkgQ3Jvc3MtRGV2aWNlCisKKyAgICBpZiByZW5hbWVmYWlsZWQ6CisgICAgICAgIGRpZGNvcHkgPSAwCisgICAgICAgIGlmIHN0YXQuU19JU1JFRyhzc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgICAgIHRyeTogIyBGb3Igc2FmZXR5IGNvcHkgdGhlbiBtb3ZlIGl0IG92ZXIuCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZGVzdCArICIjbmV3IikKKyAgICAgICAgICAgICAgICBvcy5yZW5hbWUoZGVzdCArICIjbmV3IiwgZGVzdCkKKyAgICAgICAgICAgICAgICBkaWRjb3B5ID0gMQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHByaW50KCdtb3ZlZmlsZTogY29weScsIHNyYywgJy0+JywgZGVzdCwgJ2ZhaWxlZC4nLCBlKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjd2UgZG9uJ3QgeWV0IGhhbmRsZSBzcGVjaWFsLCBzbyB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byAvYmluL212CisgICAgICAgICAgICBhID0gZ2V0c3RhdHVzb3V0cHV0KCIvYmluL212IC1mICIgKyAiJyIgKyBzcmMgKyAiJyAnIiArIGRlc3QgKyAiJyIpCisgICAgICAgICAgICBpZiBhWzBdICE9IDA6CisgICAgICAgICAgICAgICAgcHJpbnQoIm1vdmVmaWxlOiBGYWlsZWQgdG8gbW92ZSBzcGVjaWFsIGZpbGU6IiArIHNyYyArICInIHRvICciICsgZGVzdCArICInIiwgYSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSAjIGZhaWx1cmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZGlkY29weToKKyAgICAgICAgICAgICAgICBvcy5sY2hvd24oZGVzdCwgc3N0YXRbc3RhdC5TVF9VSURdLCBzc3RhdFtzdGF0LlNUX0dJRF0pCisgICAgICAgICAgICAgICAgb3MuY2htb2QoZGVzdCwgc3RhdC5TX0lNT0RFKHNzdGF0W3N0YXQuU1RfTU9ERV0pKSAjIFN0aWNreSBpcyByZXNldCBvbiBjaG93bgorICAgICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KCJtb3ZlZmlsZTogRmFpbGVkIHRvIGNob3duL2NobW9kL3VubGluayIsIGRlc3QsIGUpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgaWYgbmV3bXRpbWU6CisgICAgICAgIG9zLnV0aW1lKGRlc3QsIChuZXdtdGltZSwgbmV3bXRpbWUpKQorICAgIGVsc2U6CisgICAgICAgIG9zLnV0aW1lKGRlc3QsIChzc3RhdFtzdGF0LlNUX0FUSU1FXSwgc3N0YXRbc3RhdC5TVF9NVElNRV0pKQorICAgICAgICBuZXdtdGltZSA9IHNzdGF0W3N0YXQuU1RfTVRJTUVdCisgICAgcmV0dXJuIG5ld210aW1lCisKK2RlZiBjb3B5ZmlsZShzcmMsIGRlc3QsIG5ld210aW1lID0gTm9uZSwgc3N0YXQgPSBOb25lKToKKyAgICAiIiIKKyAgICBDb3BpZXMgYSBmaWxlIGZyb20gc3JjIHRvIGRlc3QsIHByZXNlcnZpbmcgYWxsIHBlcm1pc3Npb25zIGFuZAorICAgIGF0dHJpYnV0ZXM7IG10aW1lIHdpbGwgYmUgcHJlc2VydmVkIGV2ZW4gd2hlbiBtb3ZpbmcgYWNyb3NzCisgICAgZmlsZXN5c3RlbXMuICBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBhbmQgZmFsc2Ugb24gZmFpbHVyZS4KKyAgICAiIiIKKyAgICAjcHJpbnQgImNvcHlmaWxlKCIgKyBzcmMgKyAiLCIgKyBkZXN0ICsgIiwiICsgc3RyKG5ld210aW1lKSArICIsIiArIHN0cihzc3RhdCkgKyAiKSIKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBzc3RhdDoKKyAgICAgICAgICAgIHNzdGF0ID0gb3MubHN0YXQoc3JjKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBzdGF0IG9mICVzIGZhaWxlZCAoJXMpIiAlIChzcmMsIGUpKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlc3RleGlzdHMgPSAxCisgICAgdHJ5OgorICAgICAgICBkc3RhdCA9IG9zLmxzdGF0KGRlc3QpCisgICAgZXhjZXB0OgorICAgICAgICBkc3RhdCA9IG9zLmxzdGF0KG9zLnBhdGguZGlybmFtZShkZXN0KSkKKyAgICAgICAgZGVzdGV4aXN0cyA9IDAKKworICAgIGlmIGRlc3RleGlzdHM6CisgICAgICAgIGlmIHN0YXQuU19JU0xOSyhkc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgICAgICAgICBkZXN0ZXhpc3RzID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGlmIHN0YXQuU19JU0xOSyhzc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucmVhZGxpbmsoc3JjKQorICAgICAgICAgICAgaWYgZGVzdGV4aXN0cyBhbmQgbm90IHN0YXQuU19JU0RJUihkc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsodGFyZ2V0LCBkZXN0KQorICAgICAgICAgICAgI29zLmxjaG93bihkZXN0LHNzdGF0W3N0YXQuU1RfVUlEXSxzc3RhdFtzdGF0LlNUX0dJRF0pCisgICAgICAgICAgICByZXR1cm4gb3MubHN0YXQoZGVzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBmYWlsZWQgdG8gY3JlYXRlIHN5bWxpbmsgJXMgdG8gJXMgKCVzKSIgJSAoZGVzdCwgdGFyZ2V0LCBlKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgc3RhdC5TX0lTUkVHKHNzdGF0W3N0YXQuU1RfTU9ERV0pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcmNjaG93biA9IEZhbHNlCisgICAgICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHNyYywgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgY2FuIHJlYWQgaXQKKyAgICAgICAgICAgICAgICBzcmNjaG93biA9IFRydWUKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChzcmMsIHNzdGF0W3N0YXQuU1RfTU9ERV0gfCBzdGF0LlNfSVJVU1IpCisKKyAgICAgICAgICAgICMgRm9yIHNhZmV0eSBjb3B5IHRoZW4gbW92ZSBpdCBvdmVyLgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZGVzdCArICIjbmV3IikKKyAgICAgICAgICAgIG9zLnJlbmFtZShkZXN0ICsgIiNuZXciLCBkZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IGNvcHkgJXMgdG8gJXMgZmFpbGVkICglcykiICUgKHNyYywgZGVzdCwgZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHNyY2Nob3duOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKHNyYywgc3N0YXRbc3RhdC5TVF9NT0RFXSkKKyAgICAgICAgICAgICAgICBvcy51dGltZShzcmMsIChzc3RhdFtzdGF0LlNUX0FUSU1FXSwgc3N0YXRbc3RhdC5TVF9NVElNRV0pKQorCisgICAgZWxzZToKKyAgICAgICAgI3dlIGRvbid0IHlldCBoYW5kbGUgc3BlY2lhbCwgc28gd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gL2Jpbi9tdgorICAgICAgICBhID0gZ2V0c3RhdHVzb3V0cHV0KCIvYmluL2NwIC1mICIgKyAiJyIgKyBzcmMgKyAiJyAnIiArIGRlc3QgKyAiJyIpCisgICAgICAgIGlmIGFbMF0gIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogZmFpbGVkIHRvIGNvcHkgc3BlY2lhbCBmaWxlICVzIHRvICVzICglcykiICUgKHNyYywgZGVzdCwgYSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UgIyBmYWlsdXJlCisgICAgdHJ5OgorICAgICAgICBvcy5sY2hvd24oZGVzdCwgc3N0YXRbc3RhdC5TVF9VSURdLCBzc3RhdFtzdGF0LlNUX0dJRF0pCisgICAgICAgIG9zLmNobW9kKGRlc3QsIHN0YXQuU19JTU9ERShzc3RhdFtzdGF0LlNUX01PREVdKSkgIyBTdGlja3kgaXMgcmVzZXQgb24gY2hvd24KKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogZmFpbGVkIHRvIGNob3duL2NobW9kICVzICglcykiICUgKGRlc3QsIGUpKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIG5ld210aW1lOgorICAgICAgICBvcy51dGltZShkZXN0LCAobmV3bXRpbWUsIG5ld210aW1lKSkKKyAgICBlbHNlOgorICAgICAgICBvcy51dGltZShkZXN0LCAoc3N0YXRbc3RhdC5TVF9BVElNRV0sIHNzdGF0W3N0YXQuU1RfTVRJTUVdKSkKKyAgICAgICAgbmV3bXRpbWUgPSBzc3RhdFtzdGF0LlNUX01USU1FXQorICAgIHJldHVybiBuZXdtdGltZQorCitkZWYgd2hpY2gocGF0aCwgaXRlbSwgZGlyZWN0aW9uID0gMCwgaGlzdG9yeSA9IEZhbHNlKToKKyAgICAiIiIKKyAgICBMb2NhdGUgYSBmaWxlIGluIGEgUEFUSAorICAgICIiIgorCisgICAgaGlzdCA9IFtdCisgICAgcGF0aHMgPSAocGF0aCBvciAiIikuc3BsaXQoJzonKQorICAgIGlmIGRpcmVjdGlvbiAhPSAwOgorICAgICAgICBwYXRocy5yZXZlcnNlKCkKKworICAgIGZvciBwIGluIHBhdGhzOgorICAgICAgICBuZXh0ID0gb3MucGF0aC5qb2luKHAsIGl0ZW0pCisgICAgICAgIGhpc3QuYXBwZW5kKG5leHQpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5leHQpOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobmV4dCk6CisgICAgICAgICAgICAgICAgbmV4dCA9IG9zLnBhdGguYWJzcGF0aChuZXh0KQorICAgICAgICAgICAgaWYgaGlzdG9yeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dCwgaGlzdAorICAgICAgICAgICAgcmV0dXJuIG5leHQKKworICAgIGlmIGhpc3Rvcnk6CisgICAgICAgIHJldHVybiAiIiwgaGlzdAorICAgIHJldHVybiAiIgorCitkZWYgdG9fYm9vbGVhbihzdHJpbmcsIGRlZmF1bHQ9Tm9uZSk6CisgICAgaWYgbm90IHN0cmluZzoKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIG5vcm1hbGl6ZWQgPSBzdHJpbmcubG93ZXIoKQorICAgIGlmIG5vcm1hbGl6ZWQgaW4gKCJ5IiwgInllcyIsICIxIiwgInRydWUiKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIG5vcm1hbGl6ZWQgaW4gKCJuIiwgIm5vIiwgIjAiLCAiZmFsc2UiKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3IgdG9fYm9vbGVhbjogJXMiICUgc3RyaW5nKQorCitkZWYgY29udGFpbnModmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHZhbCA9IGQuZ2V0VmFyKHZhcmlhYmxlLCBUcnVlKQorICAgIGlmIG5vdCB2YWw6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisgICAgdmFsID0gc2V0KHZhbC5zcGxpdCgpKQorICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZXMsIGJhc2VzdHJpbmcpOgorICAgICAgICBjaGVja3ZhbHVlcyA9IHNldChjaGVja3ZhbHVlcy5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIGNoZWNrdmFsdWVzID0gc2V0KGNoZWNrdmFsdWVzKQorICAgIGlmIGNoZWNrdmFsdWVzLmlzc3Vic2V0KHZhbCk6IAorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGNvbnRhaW5zX2FueSh2YXJpYWJsZSwgY2hlY2t2YWx1ZXMsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgdmFsID0gZC5nZXRWYXIodmFyaWFibGUsIFRydWUpCisgICAgaWYgbm90IHZhbDoKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKyAgICB2YWwgPSBzZXQodmFsLnNwbGl0KCkpCisgICAgaWYgaXNpbnN0YW5jZShjaGVja3ZhbHVlcywgYmFzZXN0cmluZyk6CisgICAgICAgIGNoZWNrdmFsdWVzID0gc2V0KGNoZWNrdmFsdWVzLnNwbGl0KCkpCisgICAgZWxzZToKKyAgICAgICAgY2hlY2t2YWx1ZXMgPSBzZXQoY2hlY2t2YWx1ZXMpCisgICAgaWYgY2hlY2t2YWx1ZXMgJiB2YWw6CisgICAgICAgIHJldHVybiB0cnVldmFsdWUKKyAgICByZXR1cm4gZmFsc2V2YWx1ZQorCitkZWYgY3B1X2NvdW50KCk6CisgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQorCitkZWYgbm9uYmxvY2tpbmdmZChmZCk6CisgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKSB8IG9zLk9fTk9OQkxPQ0spCisKK2RlZiBwcm9jZXNzX3Byb2ZpbGVsb2coZm4sIHBvdXQgPSBOb25lKToKKyAgICAjIEVpdGhlciBjYWxsIHdpdGggYSBsaXN0IG9mIGZpbGVuYW1lcyBhbmQgc2V0IHBvdXQgb3IgYSBmaWxlbmFtZSBhbmQgb3B0aW9uYWxseSBwb3V0LgorICAgIGlmIG5vdCBwb3V0OgorICAgICAgICBwb3V0ID0gZm4gKyAnLnByb2Nlc3NlZCcKKyAgICBwb3V0ID0gb3Blbihwb3V0LCAndycpCisgICAKKyAgICBpbXBvcnQgcHN0YXRzCisgICAgaWYgaXNpbnN0YW5jZShmbiwgbGlzdCk6CisgICAgICAgIHAgPSBwc3RhdHMuU3RhdHMoKmZuLCBzdHJlYW09cG91dCkKKyAgICBlbHNlOgorICAgICAgICBwID0gcHN0YXRzLlN0YXRzKGZuLCBzdHJlYW09cG91dCkKKyAgICBwLnNvcnRfc3RhdHMoJ3RpbWUnKQorICAgIHAucHJpbnRfc3RhdHMoKQorICAgIHAucHJpbnRfY2FsbGVycygpCisgICAgcC5zb3J0X3N0YXRzKCdjdW11bGF0aXZlJykKKyAgICBwLnByaW50X3N0YXRzKCkKKworICAgIHBvdXQuZmx1c2goKQorICAgIHBvdXQuY2xvc2UoKSAgCisKKyMKKyMgV2FzIHByZXNlbnQgdG8gd29yayBhcm91bmQgbXVsdGlwcm9jZXNzaW5nIHBvb2wgYnVncyBpbiBweXRob24gPCAyLjcuMworIworZGVmIG11bHRpcHJvY2Vzc2luZ3Bvb2woKmFyZ3MsICoqa3dhcmdzKToKKworICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcucG9vbAorICAgICNpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnV0aWwKKyAgICAjbXVsdGlwcm9jZXNzaW5nLnV0aWwubG9nX3RvX3N0ZGVycigxMCkKKyAgICAjIERlYWwgd2l0aCBhIG11bHRpcHJvY2Vzc2luZyBidWcgd2hlcmUgc2lnbmFscyB0byB0aGUgcHJvY2Vzc2VzIHdvdWxkIGJlIGRlbGF5ZWQgdW50aWwgdGhlIHdvcmsKKyAgICAjIGNvbXBsZXRlcy4gUHV0dGluZyBpbiBhIHRpbWVvdXQgbWVhbnMgdGhlIHNpZ25hbHMgKGxpa2UgU0lHSU5UL1NJR1RFUk0pIGdldCBwcm9jZXNzZWQuCisgICAgZGVmIHdyYXBwZXIoZnVuYyk6CisgICAgICAgIGRlZiB3cmFwKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICByZXR1cm4gZnVuYyhzZWxmLCB0aW1lb3V0PXRpbWVvdXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNlIDFlMTAwKQorICAgICAgICByZXR1cm4gd3JhcAorICAgIG11bHRpcHJvY2Vzc2luZy5wb29sLklNYXBJdGVyYXRvci5uZXh0ID0gd3JhcHBlcihtdWx0aXByb2Nlc3NpbmcucG9vbC5JTWFwSXRlcmF0b3IubmV4dCkKKworICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuUG9vbCgqYXJncywgKiprd2FyZ3MpCisKK2RlZiBleGVjX2ZsYXRfcHl0aG9uX2Z1bmMoZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAiIiJFeGVjdXRlIGEgZmxhdCBweXRob24gZnVuY3Rpb24gKGRlZmluZWQgd2l0aCBkZWYgZnVuY25hbWUoYXJncyk6Li4uKSIiIgorICAgICMgUHJlcGFyZSBhIHNtYWxsIHBpZWNlIG9mIHB5dGhvbiBjb2RlIHdoaWNoIGNhbGxzIHRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24KKyAgICAjIFRvIGRvIHRoaXMgd2UgbmVlZCB0byBwcmVwYXJlIHR3byB0aGluZ3MgLSBhIHNldCBvZiB2YXJpYWJsZXMgd2UgY2FuIHVzZSB0byBwYXNzCisgICAgIyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBpbnRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBhbmQgdGhlIGxpc3Qgb2YgYXJndW1lbnRzIGZvcgorICAgICMgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZAorICAgIGNvbnRleHQgPSB7fQorICAgIGZ1bmNhcmdzID0gW10KKyAgICAjIEhhbmRsZSB1bm5hbWVkIGFyZ3VtZW50cworICAgIGFpZHggPSAxCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBhcmduYW1lID0gJ2FyZ18lcycgJSBhaWR4CisgICAgICAgIGNvbnRleHRbYXJnbmFtZV0gPSBhcmcKKyAgICAgICAgZnVuY2FyZ3MuYXBwZW5kKGFyZ25hbWUpCisgICAgICAgIGFpZHggKz0gMQorICAgICMgSGFuZGxlIGtleXdvcmQgYXJndW1lbnRzCisgICAgY29udGV4dC51cGRhdGUoa3dhcmdzKQorICAgIGZ1bmNhcmdzLmV4dGVuZChbJyVzPSVzJyAlIChhcmcsIGFyZykgZm9yIGFyZyBpbiBrd2FyZ3MuaXRlcmtleXMoKV0pCisgICAgY29kZSA9ICdyZXR2YWwgPSAlcyglcyknICUgKGZ1bmMsICcsICcuam9pbihmdW5jYXJncykpCisgICAgY29tcCA9IGJiLnV0aWxzLmJldHRlcl9jb21waWxlKGNvZGUsICc8c3RyaW5nPicsICc8c3RyaW5nPicpCisgICAgYmIudXRpbHMuYmV0dGVyX2V4ZWMoY29tcCwgY29udGV4dCwgY29kZSwgJzxzdHJpbmc+JykKKyAgICByZXR1cm4gY29udGV4dFsncmV0dmFsJ10KKworZGVmIGVkaXRfbWV0YWRhdGEobWV0YV9saW5lcywgdmFyaWFibGVzLCB2YXJmdW5jLCBtYXRjaF9vdmVycmlkZXM9RmFsc2UpOgorICAgICIiIkVkaXQgbGluZXMgZnJvbSBhIHJlY2lwZSBvciBjb25maWcgZmlsZSBhbmQgbW9kaWZ5IG9uZSBvciBtb3JlCisgICAgc3BlY2lmaWVkIHZhcmlhYmxlIHZhbHVlcyBzZXQgaW4gdGhlIGZpbGUgdXNpbmcgYSBzcGVjaWZpZWQgY2FsbGJhY2sKKyAgICBmdW5jdGlvbi4gTGluZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdHJhaWxpbmcgbmV3bGluZXMuCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgbWV0YV9saW5lczogbGluZXMgZnJvbSB0aGUgZmlsZTsgY2FuIGJlIGEgbGlzdCBvciBhbiBpdGVyYWJsZQorICAgICAgICAgICAgKGUuZy4gZmlsZSBwb2ludGVyKQorICAgICAgICB2YXJpYWJsZXM6IGEgbGlzdCBvZiB2YXJpYWJsZSBuYW1lcyB0byBsb29rIGZvci4gRnVuY3Rpb25zCisgICAgICAgICAgICBtYXkgYWxzbyBiZSBzcGVjaWZpZWQsIGJ1dCBtdXN0IGJlIHNwZWNpZmllZCB3aXRoICcoKScgYXQKKyAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIG5hbWUuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gZG9lc24ndCBoYXZlCisgICAgICAgICAgICBhbnkgaW50cmluc2ljIHVuZGVyc3RhbmRpbmcgb2YgX2FwcGVuZCwgX3ByZXBlbmQsIF9yZW1vdmUsCisgICAgICAgICAgICBvciBvdmVycmlkZXMsIHNvIHRoZXNlIGFyZSBjb25zaWRlcmVkIGFzIHBhcnQgb2YgdGhlIG5hbWUuCisgICAgICAgICAgICBUaGVzZSB2YWx1ZXMgZ28gaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgc28gcmVndWxhcgorICAgICAgICAgICAgZXhwcmVzc2lvbiBzeW50YXggaXMgYWxsb3dlZC4KKyAgICAgICAgdmFyZnVuYzogY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGZvciBldmVyeSB2YXJpYWJsZSBtYXRjaGluZworICAgICAgICAgICAgb25lIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB2YXJpYWJsZXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24KKyAgICAgICAgICAgIHNob3VsZCB0YWtlIGZvdXIgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIHZhcm5hbWU6IG5hbWUgb2YgdmFyaWFibGUgbWF0Y2hlZAorICAgICAgICAgICAgICAgIG9yaWd2YWx1ZTogY3VycmVudCB2YWx1ZSBpbiBmaWxlCisgICAgICAgICAgICAgICAgb3A6IHRoZSBvcGVyYXRvciAoZS5nLiAnKz0nKQorICAgICAgICAgICAgICAgIG5ld2xpbmVzOiBsaXN0IG9mIGxpbmVzIHVwIHRvIHRoaXMgcG9pbnQuIFlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIHRoaXMgdG8gcHJlcGVuZCBsaW5lcyBiZWZvcmUgdGhpcyB2YXJpYWJsZSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3aXNoLgorICAgICAgICAgICAgYW5kIHNob3VsZCByZXR1cm4gYSB0aHJlZS1lbGVtZW50IHR1cGxlOgorICAgICAgICAgICAgICAgIG5ld3ZhbHVlOiBuZXcgdmFsdWUgdG8gc3Vic3RpdHV0ZSBpbiwgb3IgTm9uZSB0byBkcm9wCisgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBzZXR0aW5nIGVudGlyZWx5LiAoSWYgdGhlIHJlbW92YWwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyBpbiB0d28gY29uc2VjdXRpdmUgYmxhbmsgbGluZXMsIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYmxhbmsgbGluZXMgd2lsbCBhbHNvIGJlIGRyb3BwZWQpLgorICAgICAgICAgICAgICAgIG5ld29wOiB0aGUgb3BlcmF0b3IgdG8gdXNlIC0gaWYgeW91IHNwZWNpZnkgTm9uZSBoZXJlLAorICAgICAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgb3BlcmF0aW9uIHdpbGwgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICBpbmRlbnQ6IG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IG11bHRpLWxpbmUgZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgb3IgLTEgdG8gaW5kZW50IHVwIHRvIHRoZSBsZXZlbCBvZiB0aGUgYXNzaWdubWVudAorICAgICAgICAgICAgICAgICAgICBhbmQgb3BlbmluZyBxdW90ZSwgb3IgYSBzdHJpbmcgdG8gdXNlIGFzIHRoZSBpbmRlbnQuCisgICAgICAgICAgICAgICAgbWluYnJlYWs6IFRydWUgdG8gYWxsb3cgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYQorICAgICAgICAgICAgICAgICAgICBtdWx0aS1saW5lIHZhbHVlIHRvIGNvbnRpbnVlIG9uIHRoZSBzYW1lIGxpbmUgYXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGFzc2lnbm1lbnQsIEZhbHNlIHRvIGluZGVudCBiZWZvcmUgdGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuCisgICAgICAgIG1hdGNoX292ZXJyaWRlczogVHJ1ZSB0byBtYXRjaCBpdGVtcyB3aXRoIF9vdmVycmlkZXMgb24gdGhlIGVuZCwKKyAgICAgICAgICAgIEZhbHNlIG90aGVyd2lzZQorICAgIFJldHVybnMgYSB0dXBsZToKKyAgICAgICAgdXBkYXRlZDoKKyAgICAgICAgICAgIFRydWUgaWYgY2hhbmdlcyB3ZXJlIG1hZGUsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgbmV3bGluZXM6CisgICAgICAgICAgICBMaW5lcyBhZnRlciBwcm9jZXNzaW5nCisgICAgIiIiCisKKyAgICB2YXJfcmVzID0ge30KKyAgICBpZiBtYXRjaF9vdmVycmlkZXM6CisgICAgICAgIG92ZXJyaWRlX3JlID0gJyhfW2EtekEtWjAtOS1fJCgpe31dKyk/JworICAgIGVsc2U6CisgICAgICAgIG92ZXJyaWRlX3JlID0gJycKKyAgICBmb3IgdmFyIGluIHZhcmlhYmxlczoKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgdmFyX3Jlc1t2YXJdID0gcmUuY29tcGlsZSgnXiglcyVzKVsgXFx0XSpcKFsgXFx0XSpcKVsgXFx0XSp7JyAlICh2YXJbOi0yXS5yc3RyaXAoKSwgb3ZlcnJpZGVfcmUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFyX3Jlc1t2YXJdID0gcmUuY29tcGlsZSgnXiglcyVzKVsgXFx0XSpbPys6Ll0qPVsrLl0qWyBcXHRdKihbIlwnXSknICUgKHZhciwgb3ZlcnJpZGVfcmUpKQorCisgICAgdXBkYXRlZCA9IEZhbHNlCisgICAgdmFyc2V0X3N0YXJ0ID0gJycKKyAgICB2YXJsaW5lcyA9IFtdCisgICAgbmV3bGluZXMgPSBbXQorICAgIGluX3ZhciA9IE5vbmUKKyAgICBmdWxsX3ZhbHVlID0gJycKKyAgICB2YXJfZW5kID0gJycKKworICAgIGRlZiBoYW5kbGVfdmFyX2VuZCgpOgorICAgICAgICBwcmVydW5fbmV3bGluZXMgPSBuZXdsaW5lc1s6XQorICAgICAgICBvcCA9IHZhcnNldF9zdGFydFtsZW4oaW5fdmFyKTpdLnN0cmlwKCkKKyAgICAgICAgKG5ld3ZhbHVlLCBuZXdvcCwgaW5kZW50LCBtaW5icmVhaykgPSB2YXJmdW5jKGluX3ZhciwgZnVsbF92YWx1ZSwgb3AsIG5ld2xpbmVzKQorICAgICAgICBjaGFuZ2VkID0gKHByZXJ1bl9uZXdsaW5lcyAhPSBuZXdsaW5lcykKKworICAgICAgICBpZiBuZXd2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgIyBEcm9wIHRoZSB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxpZiBuZXd2YWx1ZSAhPSBmdWxsX3ZhbHVlIG9yIChuZXdvcCBub3QgaW4gW05vbmUsIG9wXSk6CisgICAgICAgICAgICBpZiBuZXdvcCBub3QgaW4gW05vbmUsIG9wXToKKyAgICAgICAgICAgICAgICAjIENhbGxiYWNrIGNoYW5nZWQgdGhlIG9wZXJhdG9yCisgICAgICAgICAgICAgICAgdmFyc2V0X25ldyA9ICIlcyAlcyIgJSAoaW5fdmFyLCBuZXdvcCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFyc2V0X25ldyA9IHZhcnNldF9zdGFydAorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGluZGVudCwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgICAgIGlmIGluZGVudCA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgaW5kZW50c3BjID0gJyAnICogKGxlbih2YXJzZXRfbmV3KSArIDIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5kZW50c3BjID0gJyAnICogaW5kZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZGVudHNwYyA9IGluZGVudAorICAgICAgICAgICAgaWYgaW5fdmFyLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgICMgQSBmdW5jdGlvbiBkZWZpbml0aW9uCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShuZXd2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMge1xuJXMlc1xufVxuJyAlICh2YXJzZXRfbmV3LCBpbmRlbnRzcGMsICgnXG4lcycgJSBpbmRlbnRzcGMpLmpvaW4obmV3dmFsdWUpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dmFsdWUuc3RhcnRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gJ1xuJyArIG5ld3ZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd2YWx1ZS5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3dmFsdWUgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMgeyVzfVxuJyAlICh2YXJzZXRfbmV3LCBuZXd2YWx1ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTm9ybWFsIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShuZXd2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRW1wdHkgbGlzdCAtPiBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMgIiJcbicgJSB2YXJzZXRfbmV3KQorICAgICAgICAgICAgICAgICAgICBlbGlmIG1pbmJyZWFrOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGaXJzdCBpdGVtIG9uIGZpcnN0IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihuZXd2YWx1ZSkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICIlcyJcbicgJSAodmFyc2V0X25ldywgbmV3dmFsdWVbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICIlcyBcXFxuJyAlICh2YXJzZXRfbmV3LCBuZXd2YWx1ZVswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbmV3dmFsdWVbMTpdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzJXMgXFxcbicgJSAoaW5kZW50c3BjLCBpdGVtKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIlxuJyAlIGluZGVudHNwYykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTm8gaXRlbSBvbiBmaXJzdCBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICIgXFxcbicgJSB2YXJzZXRfbmV3KQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyVzIFxcXG4nICUgKGluZGVudHNwYywgaXRlbSkpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIlxuJyAlIGluZGVudHNwYykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICIlcyJcbicgJSAodmFyc2V0X25ldywgbmV3dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUHV0IHRoZSBvbGQgbGluZXMgYmFjayB3aGVyZSB0aGV5IHdlcmUKKyAgICAgICAgICAgIG5ld2xpbmVzLmV4dGVuZCh2YXJsaW5lcykKKyAgICAgICAgICAgICMgSWYgbmV3bGluZXMgd2FzIHRvdWNoZWQgYnkgdGhlIGZ1bmN0aW9uLCB3ZSdsbCBuZWVkIHRvIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gY2hhbmdlZAorCisgICAgY2hlY2tzcGMgPSBGYWxzZQorCisgICAgZm9yIGxpbmUgaW4gbWV0YV9saW5lczoKKyAgICAgICAgaWYgaW5fdmFyOgorICAgICAgICAgICAgdmFsdWUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICB2YXJsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGlmIGluX3Zhci5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgICAgICBmdWxsX3ZhbHVlICs9ICdcbicgKyB2YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdWxsX3ZhbHVlICs9IHZhbHVlWzotMV0KKyAgICAgICAgICAgIGlmIHZhbHVlLmVuZHN3aXRoKHZhcl9lbmQpOgorICAgICAgICAgICAgICAgIGlmIGluX3Zhci5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZnVsbF92YWx1ZS5jb3VudCgneycpIC0gZnVsbF92YWx1ZS5jb3VudCgnfScpID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZ1bGxfdmFsdWUgPSBmdWxsX3ZhbHVlWzotMV0KKyAgICAgICAgICAgICAgICBpZiBoYW5kbGVfdmFyX2VuZCgpOgorICAgICAgICAgICAgICAgICAgICB1cGRhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjaGVja3NwYyA9IFRydWUKKyAgICAgICAgICAgICAgICBpbl92YXIgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBza2lwID0gRmFsc2UKKyAgICAgICAgICAgIGZvciAodmFybmFtZSwgdmFyX3JlKSBpbiB2YXJfcmVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHJlcyA9IHZhcl9yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgaXNmdW5jID0gdmFybmFtZS5lbmRzd2l0aCgnKCknKQorICAgICAgICAgICAgICAgICAgICBpZiBpc2Z1bmM6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbHVlID0gbGluZS5zcGxpdCgneycsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJfZW5kID0gJ30nCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJfZW5kID0gcmVzLmdyb3VwcygpWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWx1ZSA9IGxpbmUuc3BsaXQodmFyX2VuZCwgMSkKKyAgICAgICAgICAgICAgICAgICAgdmFyc2V0X3N0YXJ0ID0gc3BsaXR2YWx1ZVswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0dmFsdWVbMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzZnVuYyBhbmQgdmFsdWUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzotMV0KKyAgICAgICAgICAgICAgICAgICAgZnVsbF92YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHZhcmxpbmVzID0gW2xpbmVdCisgICAgICAgICAgICAgICAgICAgIGluX3ZhciA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBpZiBpc2Z1bmM6CisgICAgICAgICAgICAgICAgICAgICAgICBpbl92YXIgKz0gJygpJworICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZS5lbmRzd2l0aCh2YXJfZW5kKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfdmFsdWUgPSBmdWxsX3ZhbHVlWzotMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhbmRsZV92YXJfZW5kKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3NwYyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGluX3ZhciA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgc2tpcCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBza2lwOgorICAgICAgICAgICAgICAgIGlmIGNoZWNrc3BjOgorICAgICAgICAgICAgICAgICAgICBjaGVja3NwYyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld2xpbmVzWy0xXSA9PSAnXG4nIGFuZCBsaW5lID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFNxdWFzaCBibGFuayBsaW5lIGlmIHRoZXJlIGFyZSB0d28gY29uc2VjdXRpdmUgYmxhbmtzIGFmdGVyIGEgcmVtb3ZhbAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gKHVwZGF0ZWQsIG5ld2xpbmVzKQorCisKK2RlZiBlZGl0X21ldGFkYXRhX2ZpbGUobWV0YV9maWxlLCB2YXJpYWJsZXMsIHZhcmZ1bmMpOgorICAgICIiIkVkaXQgYSByZWNpcGUgb3IgY29uZmlnIGZpbGUgYW5kIG1vZGlmeSBvbmUgb3IgbW9yZSBzcGVjaWZpZWQKKyAgICB2YXJpYWJsZSB2YWx1ZXMgc2V0IGluIHRoZSBmaWxlIHVzaW5nIGEgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgIFRoZSBmaWxlIGlzIG9ubHkgd3JpdHRlbiB0byBpZiB0aGUgdmFsdWUocykgYWN0dWFsbHkgY2hhbmdlLgorICAgIFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBmaWxlIHZlcnNpb24gb2YgZWRpdF9tZXRhZGF0YSgpLCBzZWUgdGhhdAorICAgIGZ1bmN0aW9uJ3MgZGVzY3JpcHRpb24gZm9yIHBhcmFtZXRlci91c2FnZSBpbmZvcm1hdGlvbi4KKyAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGZpbGUgd2FzIHdyaXR0ZW4gdG8sIEZhbHNlIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICB3aXRoIG9wZW4obWV0YV9maWxlLCAncicpIGFzIGY6CisgICAgICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBlZGl0X21ldGFkYXRhKGYsIHZhcmlhYmxlcywgdmFyZnVuYykKKyAgICBpZiB1cGRhdGVkOgorICAgICAgICB3aXRoIG9wZW4obWV0YV9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlbGluZXMobmV3bGluZXMpCisgICAgcmV0dXJuIHVwZGF0ZWQKKworCitkZWYgZWRpdF9iYmxheWVyc19jb25mKGJibGF5ZXJzX2NvbmYsIGFkZCwgcmVtb3ZlKToKKyAgICAiIiJFZGl0IGJibGF5ZXJzLmNvbmYsIGFkZGluZyBhbmQvb3IgcmVtb3ZpbmcgbGF5ZXJzIiIiCisKKyAgICBpbXBvcnQgZm5tYXRjaAorCisgICAgZGVmIHJlbW92ZV90cmFpbGluZ19zZXAocHRoKToKKyAgICAgICAgaWYgcHRoIGFuZCBwdGhbLTFdID09IG9zLnNlcDoKKyAgICAgICAgICAgIHB0aCA9IHB0aFs6LTFdCisgICAgICAgIHJldHVybiBwdGgKKworICAgIGRlZiBsYXllcmxpc3RfcGFyYW0odmFsdWUpOgorICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgIHJldHVybiBbcmVtb3ZlX3RyYWlsaW5nX3NlcCh4KSBmb3IgeCBpbiB2YWx1ZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbcmVtb3ZlX3RyYWlsaW5nX3NlcCh2YWx1ZSldCisKKyAgICBub3RhZGRlZCA9IFtdCisgICAgbm90cmVtb3ZlZCA9IFtdCisKKyAgICBhZGRsYXllcnMgPSBsYXllcmxpc3RfcGFyYW0oYWRkKQorICAgIHJlbW92ZWxheWVycyA9IGxheWVybGlzdF9wYXJhbShyZW1vdmUpCisKKyAgICAjIE5lZWQgdG8gdXNlIGEgbGlzdCBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3Qgc2V0IG5vbi1sb2NhbCB2YXJpYWJsZXMgZnJvbSBhIGNhbGxiYWNrIGluIHB5dGhvbiAyLngKKyAgICBiYmxheWVyY2FsbHMgPSBbXQorCisgICAgZGVmIGhhbmRsZV9iYmxheWVycyh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgIGJibGF5ZXJjYWxscy5hcHBlbmQodmFybmFtZSkKKyAgICAgICAgdXBkYXRlZCA9IEZhbHNlCisgICAgICAgIGJibGF5ZXJzID0gW3JlbW92ZV90cmFpbGluZ19zZXAoeCkgZm9yIHggaW4gb3JpZ3ZhbHVlLnNwbGl0KCldCisgICAgICAgIGlmIHJlbW92ZWxheWVyczoKKyAgICAgICAgICAgIGZvciByZW1vdmVsYXllciBpbiByZW1vdmVsYXllcnM6CisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIGxheWVyIGluIGJibGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2gobGF5ZXIsIHJlbW92ZWxheWVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYmJsYXllcnMucmVtb3ZlKGxheWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0Y2hlZDoKKyAgICAgICAgICAgICAgICAgICAgbm90cmVtb3ZlZC5hcHBlbmQocmVtb3ZlbGF5ZXIpCisgICAgICAgIGlmIGFkZGxheWVyczoKKyAgICAgICAgICAgIGZvciBhZGRsYXllciBpbiBhZGRsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgYWRkbGF5ZXIgbm90IGluIGJibGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICB1cGRhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBiYmxheWVycy5hcHBlbmQoYWRkbGF5ZXIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbm90YWRkZWQuYXBwZW5kKGFkZGxheWVyKQorCisgICAgICAgIGlmIHVwZGF0ZWQ6CisgICAgICAgICAgICByZXR1cm4gKGJibGF5ZXJzLCBOb25lLCAyLCBGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAob3JpZ3ZhbHVlLCBOb25lLCAyLCBGYWxzZSkKKworICAgIGVkaXRfbWV0YWRhdGFfZmlsZShiYmxheWVyc19jb25mLCBbJ0JCTEFZRVJTJ10sIGhhbmRsZV9iYmxheWVycykKKworICAgIGlmIG5vdCBiYmxheWVyY2FsbHM6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5hYmxlIHRvIGZpbmQgQkJMQVlFUlMgaW4gJXMnICUgYmJsYXllcnNfY29uZikKKworICAgIHJldHVybiAobm90YWRkZWQsIG5vdHJlbW92ZWQpCisKKworZGVmIGdldF9maWxlX2xheWVyKGZpbGVuYW1lLCBkKToKKyAgICAiIiJEZXRlcm1pbmUgdGhlIGNvbGxlY3Rpb24gKGFzIGRlZmluZWQgYnkgYSBsYXllcidzIGxheWVyLmNvbmYgZmlsZSkgY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIGZpbGUiIiIKKyAgICBjb2xsZWN0aW9ucyA9IChkLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBjb2xsZWN0aW9uX3JlcyA9IHt9CisgICAgZm9yIGNvbGxlY3Rpb24gaW4gY29sbGVjdGlvbnM6CisgICAgICAgIGNvbGxlY3Rpb25fcmVzW2NvbGxlY3Rpb25dID0gZC5nZXRWYXIoJ0JCRklMRV9QQVRURVJOXyVzJyAlIGNvbGxlY3Rpb24sIFRydWUpIG9yICcnCisKKyAgICBkZWYgcGF0aF90b19sYXllcihwYXRoKToKKyAgICAgICAgIyBVc2UgbG9uZ2VzdCBwYXRoIHNvIHdlIGhhbmRsZSBuZXN0ZWQgbGF5ZXJzCisgICAgICAgIG1hdGNobGVuID0gMAorICAgICAgICBtYXRjaCA9IE5vbmUKKyAgICAgICAgZm9yIGNvbGxlY3Rpb24sIHJlZ2V4IGluIGNvbGxlY3Rpb25fcmVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbGVuKHJlZ2V4KSA+IG1hdGNobGVuIGFuZCByZS5tYXRjaChyZWdleCwgcGF0aCk6CisgICAgICAgICAgICAgICAgbWF0Y2hsZW4gPSBsZW4ocmVnZXgpCisgICAgICAgICAgICAgICAgbWF0Y2ggPSBjb2xsZWN0aW9uCisgICAgICAgIHJldHVybiBtYXRjaAorCisgICAgcmVzdWx0ID0gTm9uZQorICAgIGJiZmlsZXMgPSAoZC5nZXRWYXIoJ0JCRklMRVMnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGJiZmlsZXNtYXRjaCA9IEZhbHNlCisgICAgZm9yIGJiZmlsZXNlbnRyeSBpbiBiYmZpbGVzOgorICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZW5hbWUsIGJiZmlsZXNlbnRyeSk6CisgICAgICAgICAgICBiYmZpbGVzbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICByZXN1bHQgPSBwYXRoX3RvX2xheWVyKGJiZmlsZXNlbnRyeSkKKworICAgIGlmIG5vdCBiYmZpbGVzbWF0Y2g6CisgICAgICAgICMgUHJvYmFibHkgYSBiYmNsYXNzCisgICAgICAgIHJlc3VsdCA9IHBhdGhfdG9fbGF5ZXIoZmlsZW5hbWUpCisKKyAgICByZXR1cm4gcmVzdWx0CisKKworIyBDb25zdGFudCB0YWtlbiBmcm9tIGh0dHA6Ly9saW51eC5kaWUubmV0L2luY2x1ZGUvbGludXgvcHJjdGwuaAorUFJfU0VUX1BERUFUSFNJRyA9IDEKKworY2xhc3MgUHJDdGxFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHNpZ25hbF9vbl9wYXJlbnRfZXhpdChzaWduYW1lKToKKyAgICAiIiIKKyAgICBUcmlnZ2VyIHNpZ25hbWUgdG8gYmUgc2VudCB3aGVuIHRoZSBwYXJlbnQgcHJvY2VzcyBkaWVzCisgICAgIiIiCisgICAgc2lnbnVtID0gZ2V0YXR0cihzaWduYWwsIHNpZ25hbWUpCisgICAgIyBodHRwOi8vbGludXguZGllLm5ldC9tYW4vMi9wcmN0bAorICAgIHJlc3VsdCA9IGNkbGxbJ2xpYmMuc28uNiddLnByY3RsKFBSX1NFVF9QREVBVEhTSUcsIHNpZ251bSkKKyAgICBpZiByZXN1bHQgIT0gMDoKKyAgICAgICAgcmFpc2UgUHJDdGxFcnJvcigncHJjdGwgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlcycgJSByZXN1bHQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9BVVRIT1JTLnR4dCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L0FVVEhPUlMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzhmY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9BVVRIT1JTLnR4dApAQCAtMCwwICsxLDQzIEBACitCZWhvbGQsIG1vcnRhbCwgdGhlIG9yaWdpbnMgb2YgQmVhdXRpZnVsIFNvdXAuLi4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMZW9uYXJkIFJpY2hhcmRzb24gaXMgdGhlIHByaW1hcnkgcHJvZ3JhbW1lci4KKworQWFyb24gRGVWb3JlIGlzIGF3ZXNvbWUuCisKK01hcmsgUGlsZ3JpbSBwcm92aWRlZCB0aGUgZW5jb2RpbmcgZGV0ZWN0aW9uIGNvZGUgdGhhdCBmb3JtcyB0aGUgYmFzZQorb2YgVW5pY29kZURhbW1pdC4KKworVGhvbWFzIEtsdXl2ZXIgYW5kIEV6aW8gTWVsb3R0aSBmaW5pc2hlZCB0aGUgd29yayBvZiBnZXR0aW5nIEJlYXV0aWZ1bAorU291cCA0IHdvcmtpbmcgdW5kZXIgUHl0aG9uIDMuCisKK1NpbW9uIFdpbGxpc29uIHdyb3RlIHNvdXBzZWxlY3QsIHdoaWNoIHdhcyB1c2VkIHRvIG1ha2UgQmVhdXRpZnVsIFNvdXAKK3N1cHBvcnQgQ1NTIHNlbGVjdG9ycy4KKworU2FtIFJ1YnkgaGVscGVkIHdpdGggYSBsb3Qgb2YgZWRnZSBjYXNlcy4KKworSm9uYXRoYW4gRWxsaXMgd2FzIGF3YXJkZWQgdGhlIHByZXN0aWdvdXMgQmVhdSBQb3RhZ2UgRCdPciBmb3IgaGlzCit3b3JrIGluIHNvbHZpbmcgdGhlIG5lc3RhYmxlIHRhZ3MgY29udW5kcnVtLgorCitBbiBpbmNvbXBsZXRlIGxpc3Qgb2YgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgcGF0Y2hlcyB0byBCZWF1dGlmdWwKK1NvdXA6CisKKyBJc3R2YW4gQWxiZXJ0LCBBbmRyZXcgTGluLCBBbnRob255IEJheHRlciwgQW5kcmV3IEJveWtvLCBUb255IENoYW5nLAorIFplcGh5ciBGYW5nLCBGdXp6eSwgUm9tYW4gR2F1Zm1hbiwgWW9uaSBHaWxhZCwgUmljaGllIEhpbmRsZSwgUGV0ZXJpcworIEtydW1pbnMsIEtlbnQgSm9obnNvbiwgQmVuIExhc3QsIFJvYmVydCBMZWZ0d2ljaCwgU3RhZmZhbiBNYWxtZ3JlbiwKKyBLc2VuaWEgTWFyYXNhbm92YSwgSlAgTW9pbnMsIEFkYW0gTW9uc2VuLCBKb2huIE5hZ2xlLCAiSm9uIiwgRWQKKyBPc2tpZXdpY3osIEdyZWcgUGhpbGxpcHMsIEdpbGVzIFJhZGZvcmQsIEFydGh1ciBSdWRvbHBoLCBNYXJrbworIFNhbWFzdHVyLCBKb3VuaSBTZXBw5G5lbiwgQWxleGFuZGVyIFNjaG1vbGNrLCBBbmR5IFRoZXllcnMsIEdseW4KKyBXZWJzdGVyLCBQYXVsIFdyaWdodCwgRGFubnkgWW9vCisKK0FuIGluY29tcGxldGUgbGlzdCBvZiBwZW9wbGUgd2hvIG1hZGUgc3VnZ2VzdGlvbnMgb3IgZm91bmQgYnVncyBvcgorZm91bmQgd2F5cyB0byBicmVhayBCZWF1dGlmdWwgU291cDoKKworIEhhbm5vIEL2Y2ssIE1hdHRlbyBCZXJ0aW5pLCBDaHJpcyBDdXJ2ZXksIFNpbW9uIEN1c2FjaywgQnJ1Y2UgRWNrZWwsCisgTWF0dCBFcm5zdCwgTWljaGFlbCBGb29yZCwgVG9tIEhhcnJpcywgQmlsbCBkZSBoT3JhLCBEb25hbGQgSG93ZXMsCisgTWF0dCBQYXR0ZXJzb24sIFNjb3R0IFJvYmVydHMsIFN0ZXZlIFN0cmFzc21hbm4sIE1pa2UgV2lsbGlhbXMsCisgd2FyY2hpbGQgYXQgcmVkaG8gZG90IGNvbSwgU2FtaSBLdWlzbWEsIENhcmxvcyBSb2NoYSwgQm9iIEh1dGNoaXNvbiwKKyBKb3JlbiBNYywgTWljaGFsIE1pZ3Vyc2tpLCBKb2huIEtsZXZlbiwgVGltIEhlYW5leSwgVHJpcHAgTGlsbGV5LCBFZAorIFN1bW1lcnMsIERlbm5pcyBTdXRjaCwgQ2hyaXMgU21pdGgsIEFhcm9uIFN3ZWVwXlcgU3dhcnR6LCBTdHVhcnQKKyBUdXJuZXIsIEdyZWcgRWR3YXJkcywgS2V2aW4gSiBLYWx1cHNvbiwgTmlrb3MgS291cmVtZW5vcywgQXJ0dXIgZGUKKyBTb3VzYSBSb2NoYSwgWWljaHVuIFdlaSwgUGVyIFZvZ25zZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L0NPUFlJTkcudHh0IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvQ09QWUlORy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2OGQxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L0NPUFlJTkcudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0JlYXV0aWZ1bCBTb3VwIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgbGljZW5zZToKKworIENvcHlyaWdodCAoYykgMjAwNC0yMDEyIExlb25hcmQgUmljaGFyZHNvbgorCisgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgU09GVFdBUkUsIERBTU1JVC4KKworQmVhdXRpZnVsIFNvdXAgaW5jb3Jwb3JhdGVzIGNvZGUgZnJvbSB0aGUgaHRtbDVsaWIgbGlicmFyeSwgd2hpY2ggaXMKK2Fsc28gbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvTkVXUy50eHQgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9ORVdTLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE2MGEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvTkVXUy50eHQKQEAgLTAsMCArMSwxMDY2IEBACis9IDQuMy4yICgyMDEzMTAwMikgPQorCisqIEZpeGVkIGEgYnVnIGluIHdoaWNoIHNob3J0IFVuaWNvZGUgaW5wdXQgd2FzIGltcHJvcGVybHkgZW5jb2RlZCB0bworICBBU0NJSSB3aGVuIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IGl0IHdhcyB0aGUgbmFtZSBvZiBhIGZpbGUgb24KKyAgZGlzay4gW2J1Zz0xMjI3MDE2XQorCisqIEZpeGVkIGEgY3Jhc2ggd2hlbiBhIHNob3J0IGlucHV0IGNvbnRhaW5zIGRhdGEgbm90IHZhbGlkIGluCisgIGZpbGVuYW1lcy4gW2J1Zz0xMjMyNjA0XQorCisqIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIFVuaWNvZGUgZGF0YSBwdXQgaW50byBVbmljb2RlRGFtbWl0IHRvCisgIHJldHVybiBOb25lIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGRhdGEuIFtidWc9MTIxNDk4M10KKworKiBDb21iaW5lZCB0d28gdGVzdHMgdG8gc3RvcCBhIHNwdXJpb3VzIHRlc3QgZmFpbHVyZSB3aGVuIHRlc3RzIGFyZQorICBydW4gYnkgbm9zZXRlc3RzLiBbYnVnPTEyMTI0NDVdCisKKz0gNC4zLjEgKDIwMTMwODE1KSA9CisKKyogRml4ZWQgeWV0IGFub3RoZXIgcHJvYmxlbSB3aXRoIHRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIsIGNhdXNlZCBieQorICBodG1sNWxpYidzIHRlbmRlbmN5IHRvIHJlYXJyYW5nZSB0aGUgdHJlZSBkdXJpbmcKKyAgcGFyc2luZy4gW2J1Zz0xMTg5MjY3XQorCisqIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBmaW5kX2FsbCgpIHRvCisgIHJldHVybiBub3RoaW5nLiBbYnVnPTEyMTI2NTVdCisKKz0gNC4zLjAgKDIwMTMwODEyKSA9CisKKyogSW5zdGVhZCBvZiBjb252ZXJ0aW5nIGluY29taW5nIGRhdGEgdG8gVW5pY29kZSBhbmQgZmVlZGluZyBpdCB0byB0aGUKKyAgbHhtbCB0cmVlIGJ1aWxkZXIgaW4gY2h1bmtzLCBCZWF1dGlmdWwgU291cCBub3cgbWFrZXMgc3VjY2Vzc2l2ZQorICBndWVzc2VzIGF0IHRoZSBlbmNvZGluZyBvZiB0aGUgaW5jb21pbmcgZGF0YSwgYW5kIHRlbGxzIGx4bWwgdG8KKyAgcGFyc2UgdGhlIGRhdGEgYXMgdGhhdCBlbmNvZGluZy4gR2l2aW5nIGx4bWwgbW9yZSBjb250cm9sIG92ZXIgdGhlCisgIHBhcnNpbmcgcHJvY2VzcyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgYXZvaWRzIGEgbnVtYmVyIG9mIGJ1Z3MgYW5kCisgIGlzc3VlcyB3aXRoIHRoZSBseG1sIHBhcnNlciB3aGljaCBoYWQgcHJldmlvdXNseSByZXF1aXJlZCBlbGFib3JhdGUKKyAgd29ya2Fyb3VuZHM6CisKKyAgLSBBbiBpc3N1ZSBpbiB3aGljaCBseG1sIHJlZnVzZXMgdG8gcGFyc2UgVW5pY29kZSBzdHJpbmdzIG9uIHNvbWUKKyAgICBzeXN0ZW1zLiBbYnVnPTExODA1MjddCisKKyAgLSBBIHJldHVybmluZyBidWcgdGhhdCB0cnVuY2F0ZWQgZG9jdW1lbnRzIGxvbmdlciB0aGFuIGEgKHZlcnkKKyAgICBzbWFsbCkgc2l6ZS4gW2J1Zz05NjM4ODBdCisKKyAgLSBBIHJldHVybmluZyBidWcgaW4gd2hpY2ggZXh0cmEgc3BhY2VzIHdlcmUgYWRkZWQgdG8gYSBkb2N1bWVudCBpZgorICAgIHRoZSBkb2N1bWVudCBkZWZpbmVkIGEgY2hhcnNldCBvdGhlciB0aGFuIFVURi04LiBbYnVnPTk3MjQ2Nl0KKworICBUaGlzIHJlcXVpcmVkIGEgbWFqb3Igb3ZlcmhhdWwgb2YgdGhlIHRyZWUgYnVpbGRlciBhcmNoaXRlY3R1cmUuIElmCisgIHlvdSB3cm90ZSB5b3VyIG93biB0cmVlIGJ1aWxkZXIgYW5kIGRpZG4ndCB0ZWxsIG1lLCB5b3UnbGwgbmVlZCB0bworICBtb2RpZnkgeW91ciBwcmVwYXJlX21hcmt1cCgpIG1ldGhvZC4KKworKiBUaGUgVW5pY29kZURhbW1pdCBjb2RlIHRoYXQgbWFrZXMgZ3Vlc3NlcyBhdCBlbmNvZGluZ3MgaGFzIGJlZW4KKyAgc3BsaXQgaW50byBpdHMgb3duIGNsYXNzLCBFbmNvZGluZ0RldGVjdG9yLiBBIGxvdCBvZiBhcHBhcmVudGx5CisgIHJlZHVuZGFudCBjb2RlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBVbmljb2RlLCBEYW1taXQsIGFuZCBzb21lCisgIHVuZG9jdW1lbnRlZCBmZWF0dXJlcyBoYXZlIGFsc28gYmVlbiByZW1vdmVkLgorCisqIEJlYXV0aWZ1bCBTb3VwIHdpbGwgaXNzdWUgYSB3YXJuaW5nIGlmIGluc3RlYWQgb2YgbWFya3VwIHlvdSBwYXNzIGl0CisgIGEgVVJMIG9yIHRoZSBuYW1lIG9mIGEgZmlsZSBvbiBkaXNrIChhIGNvbW1vbiBiZWdpbm5lcidzIG1pc3Rha2UpLgorCisqIEEgbnVtYmVyIG9mIG9wdGltaXphdGlvbnMgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGx4bWwgdHJlZQorICBidWlsZGVyIGJ5IGFib3V0IDMzJSwgdGhlIGh0bWwucGFyc2VyIHRyZWUgYnVpbGRlciBieSBhYm91dCAyMCUsIGFuZAorICB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGJ5IGFib3V0IDE1JS4KKworKiBBbGwgZmluZF9hbGwgY2FsbHMgc2hvdWxkIG5vdyByZXR1cm4gYSBSZXN1bHRTZXQgb2JqZWN0LiBQYXRjaCBieQorICBBYXJvbiBEZVZvcmUuIFtidWc9MTE5NDAzNF0KKworPSA0LjIuMSAoMjAxMzA1MzEpID0KKworKiBUaGUgZGVmYXVsdCBYTUwgZm9ybWF0dGVyIHdpbGwgbm93IHJlcGxhY2UgYW1wZXJzYW5kcyBldmVuIGlmIHRoZXkKKyAgYXBwZWFyIHRvIGJlIHBhcnQgb2YgZW50aXRpZXMuIFRoYXQgaXMsICImbHQ7IiB3aWxsIGJlY29tZQorICAiJmFtcDtsdDsiLiBUaGUgb2xkIGNvZGUgd2FzIGxlZnQgb3ZlciBmcm9tIEJlYXV0aWZ1bCBTb3VwIDMsIHdoaWNoCisgIGRpZG4ndCBhbHdheXMgdHVybiBlbnRpdGllcyBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycy4KKworICBJZiB5b3UgcmVhbGx5IHdhbnQgdGhlIG9sZCBiZWhhdmlvciAobWF5YmUgYmVjYXVzZSB5b3UgYWRkIG5ldworICBzdHJpbmdzIHRvIHRoZSB0cmVlLCB0aG9zZSBzdHJpbmdzIGluY2x1ZGUgZW50aXRpZXMsIGFuZCB5b3Ugd2FudAorICB0aGUgZm9ybWF0dGVyIHRvIGxlYXZlIHRoZW0gYWxvbmUgb24gb3V0cHV0KSwgaXQgY2FuIGJlIGZvdW5kIGluCisgIEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbF9jb250YWluaW5nX2VudGl0aWVzKCkuIFtidWc9MTE4MjE4M10KKworKiBHYXZlIG5ld19zdHJpbmcoKSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgc3ViY2xhc3NlcyBvZgorICBOYXZpZ2FibGVTdHJpbmcuIFtidWc9MTE4MTk4Nl0KKworKiBGaXhlZCBhbm90aGVyIGJ1ZyBieSB3aGljaCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGNvdWxkIGNyZWF0ZSBhCisgIGRpc2Nvbm5lY3RlZCB0cmVlLiBbYnVnPTExODIwODldCisKKyogVGhlIC5wcmV2aW91c19lbGVtZW50IG9mIGEgQmVhdXRpZnVsU291cCBvYmplY3QgaXMgbm93IGFsd2F5cyBOb25lLAorICBub3QgdGhlIGxhc3QgZWxlbWVudCB0byBiZSBwYXJzZWQuIFtidWc9MTE4MjA4OV0KKworKiBGaXhlZCB0ZXN0IGZhaWx1cmVzIHdoZW4gbHhtbCBpcyBub3QgaW5zdGFsbGVkLiBbYnVnPTExODE1ODldCisKKyogaHRtbDVsaWIgbm93IHN1cHBvcnRzIFB5dGhvbiAzLiBGaXhlZCBzb21lIFB5dGhvbiAyLXNwZWNpZmljCisgIGNvZGUgaW4gdGhlIGh0bWw1bGliIHRlc3Qgc3VpdGUuIFtidWc9MTE4MTYyNF0KKworKiBUaGUgaHRtbC5wYXJzZXIgdHJlZWJ1aWxkZXIgY2FuIG5vdyBoYW5kbGUgbnVtZXJpYyBhdHRyaWJ1dGVzIGluCisgIHRleHQgd2hlbiB0aGUgaGV4aWRlY2ltYWwgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHN0YXJ0cyB3aXRoIGEKKyAgY2FwaXRhbCBYLiBQYXRjaCBieSBUaW0gU2hpcmxleS4gW2J1Zz0xMTg2MjQyXQorCis9IDQuMi4wICgyMDEzMDUxNCkgPQorCisqIFRoZSBUYWcuc2VsZWN0KCkgbWV0aG9kIG5vdyBzdXBwb3J0cyBhIG11Y2ggd2lkZXIgdmFyaWV0eSBvZiBDU1MKKyAgc2VsZWN0b3JzLgorCisgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYWRqYWNlbnQgc2libGluZyBjb21iaW5hdG9yICgrKSBhbmQgdGhlCisgICBnZW5lcmFsIHNpYmxpbmcgY29tYmluYXRvciAofikuIFRlc3RzIGJ5ICJsaXF1aWRlciIuIFtidWc9MTA4MjE0NF0KKworIC0gVGhlIGNvbWJpbmF0b3JzICg+LCArLCBhbmQgfikgY2FuIG5vdyBjb21iaW5lIHdpdGggYW55IHN1cHBvcnRlZAorICAgc2VsZWN0b3IsIG5vdCBqdXN0IG9uZSB0aGF0IHNlbGVjdHMgYmFzZWQgb24gdGFnIG5hbWUuCisKKyAtIEFkZGVkIGxpbWl0ZWQgc3VwcG9ydCBmb3IgdGhlICJudGgtb2YtdHlwZSIgcHNldWRvLWNsYXNzLiBDb2RlCisgICBieSBTdmVuIFNsb290d2VnLiBbYnVnPTExMDk5NTJdCisKKyogVGhlIEJlYXV0aWZ1bFNvdXAgY2xhc3MgaXMgbm93IGFsaWFzZWQgdG8gIl9zIiBhbmQgIl9zb3VwIiwgbWFraW5nCisgIGl0IHF1aWNrZXIgdG8gdHlwZSB0aGUgaW1wb3J0IHN0YXRlbWVudCBpbiBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uOgorCisgIGZyb20gYnM0IGltcG9ydCBfcworICAgb3IKKyAgZnJvbSBiczQgaW1wb3J0IF9zb3VwCisKKyAgVGhlIGFsaWFzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwgc28gZG9uJ3QgdXNlIHRoaXMgaW4gY29kZSB5b3UncmUKKyAgZ29pbmcgdG8gcnVuIG1vcmUgdGhhbiBvbmNlLgorCisqIEFkZGVkIHRoZSAnZGlhZ25vc2UnIHN1Ym1vZHVsZSwgd2hpY2ggaW5jbHVkZXMgc2V2ZXJhbCB1c2VmdWwKKyAgZnVuY3Rpb25zIGZvciByZXBvcnRpbmcgcHJvYmxlbXMgYW5kIGRvaW5nIHRlY2ggc3VwcG9ydC4KKworICAtIGRpYWdub3NlKGRhdGEpIHRyaWVzIHRoZSBnaXZlbiBtYXJrdXAgb24gZXZlcnkgaW5zdGFsbGVkIHBhcnNlciwKKyAgICByZXBvcnRpbmcgZXhjZXB0aW9ucyBhbmQgZGlzcGxheWluZyBzdWNjZXNzZXMuIElmIGEgcGFyc2VyIGlzIG5vdAorICAgIGluc3RhbGxlZCwgZGlhZ25vc2UoKSBtZW50aW9ucyB0aGlzIGZhY3QuCisKKyAgLSBseG1sX3RyYWNlKGRhdGEsIGh0bWw9VHJ1ZSkgcnVucyB0aGUgZ2l2ZW4gbWFya3VwIHRocm91Z2ggbHhtbCdzCisgICAgWE1MIHBhcnNlciBvciBIVE1MIHBhcnNlciwgYW5kIHByaW50cyBvdXQgdGhlIHBhcnNlciBldmVudHMgYXMKKyAgICB0aGV5IGhhcHBlbi4gVGhpcyBoZWxwcyB5b3UgcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciBhIGdpdmVuCisgICAgcHJvYmxlbSBvY2N1cnMgaW4gbHhtbCBjb2RlIG9yIEJlYXV0aWZ1bCBTb3VwIGNvZGUuCisKKyAgLSBodG1scGFyc2VyX3RyYWNlKGRhdGEpIGlzIHRoZSBzYW1lIHRoaW5nLCBidXQgZm9yIFB5dGhvbidzCisgICAgYnVpbHQtaW4gSFRNTFBhcnNlciBjbGFzcy4KKworKiBJbiBhbiBIVE1MIGRvY3VtZW50LCB0aGUgY29udGVudHMgb2YgYSA8c2NyaXB0PiBvciA8c3R5bGU+IHRhZyB3aWxsCisgIG5vIGxvbmdlciB1bmRlcmdvIGVudGl0eSBzdWJzdGl0dXRpb24gYnkgZGVmYXVsdC4gWE1MIGRvY3VtZW50cyB3b3JrCisgIHRoZSBzYW1lIHdheSB0aGV5IGRpZCBiZWZvcmUuIFtidWc9MTA4NTk1M10KKworKiBNZXRob2RzIGxpa2UgZ2V0X3RleHQoKSBhbmQgcHJvcGVydGllcyBsaWtlIC5zdHJpbmdzIG5vdyBvbmx5IGdpdmUKKyAgeW91IHN0cmluZ3MgdGhhdCBhcmUgdmlzaWJsZSBpbiB0aGUgZG9jdW1lbnQtLW5vIGNvbW1lbnRzIG9yCisgIHByb2Nlc3NpbmcgY29tbWFuZHMuIFtidWc9MTA1MDE2NF0KKworKiBUaGUgcHJldHRpZnkoKSBtZXRob2Qgbm93IGxlYXZlcyB0aGUgY29udGVudHMgb2YgPHByZT4gdGFncworICBhbG9uZS4gW2J1Zz0xMDk1NjU0XQorCisqIEZpeCBhIGJ1ZyBpbiB0aGUgaHRtbDVsaWIgdHJlZWJ1aWxkZXIgd2hpY2ggc29tZXRpbWVzIGNyZWF0ZWQKKyAgZGlzY29ubmVjdGVkIHRyZWVzLiBbYnVnPTEwMzk1MjddCisKKyogRml4IGEgYnVnIGluIHRoZSBseG1sIHRyZWVidWlsZGVyIHdoaWNoIGNyYXNoZWQgd2hlbiBhIHRhZyBpbmNsdWRlZAorICBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgcHJlZGVmaW5lZCAieG1sOiIgbmFtZXNwYWNlLiBbYnVnPTEwNjU2MTddCisKKyogRml4IGEgYnVnIGJ5IHdoaWNoIGtleXdvcmQgYXJndW1lbnRzIHRvIGZpbmRfcGFyZW50KCkgd2VyZSBub3QKKyAgYmVpbmcgcGFzc2VkIG9uLiBbYnVnPTExMjY3MzRdCisKKyogU3RvcCBhIGNyYXNoIHdoZW4gdW53aXNlbHkgbWVzc2luZyB3aXRoIGEgdGFnIHRoYXQncyBiZWVuCisgIGRlY29tcG9zZWQuIFtidWc9MTA5NzY5OV0KKworKiBOb3cgdGhhdCBseG1sJ3Mgc2VnZmF1bHQgb24gaW52YWxpZCBkb2N0eXBlIGhhcyBiZWVuIGZpeGVkLCBmaXhlZCBhCisgIGNvcnJlc3BvbmRpbmcgcHJvYmxlbSBvbiB0aGUgQmVhdXRpZnVsIFNvdXAgZW5kIHRoYXQgd2FzIHByZXZpb3VzbHkKKyAgaW52aXNpYmxlLiBbYnVnPTk4NDkzNl0KKworKiBGaXhlZCBhbiBleGNlcHRpb24gd2hlbiBhbiBvdmVyc3BlY2lmaWVkIENTUyBzZWxlY3RvciBkaWRuJ3QgbWF0Y2gKKyAgYW55dGhpbmcuIENvZGUgYnkgU3RlZmFhbiBMaXBwZW5zLiBbYnVnPTExNjgxNjddCisKKz0gNC4xLjMgKDIwMTIwODIwKSA9CisKKyogU2tpcHBlZCBhIHRlc3QgdW5kZXIgUHl0aG9uIDIuNiBhbmQgUHl0aG9uIDMuMSB0byBhdm9pZCBhIHNwdXJpb3VzCisgIHRlc3QgZmFpbHVyZSBjYXVzZWQgYnkgdGhlIGxvdXN5IEhUTUxQYXJzZXIgaW4gdGhvc2UKKyAgdmVyc2lvbnMuIFtidWc9MTAzODUwM10KKworKiBSYWlzZSBhIG1vcmUgc3BlY2lmaWMgZXJyb3IgKEZlYXR1cmVOb3RGb3VuZCkgd2hlbiBhIHJlcXVlc3RlZAorICBwYXJzZXIgb3IgcGFyc2VyIGZlYXR1cmUgaXMgbm90IGluc3RhbGxlZC4gUmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICBpbnN0ZWFkIG9mIFZhbHVlRXJyb3Igd2hlbiB0aGUgdXNlciBjYWxscyBpbnNlcnRfYmVmb3JlKCkgb3IKKyAgaW5zZXJ0X2FmdGVyKCkgb24gdGhlIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGl0c2VsZi4gUGF0Y2ggYnkgQWFyb24KKyAgRGV2b3JlLiBbYnVnPTEwMzgzMDFdCisKKz0gNC4xLjIgKDIwMTIwODE3KSA9CisKKyogQXMgcGVyIFBFUC04LCBhbGxvdyBzZWFyY2hpbmcgYnkgQ1NTIGNsYXNzIHVzaW5nIHRoZSAnY2xhc3NfJworICBrZXl3b3JkIGFyZ3VtZW50LiBbYnVnPTEwMzc2MjRdCisKKyogRGlzcGxheSBuYW1lc3BhY2UgcHJlZml4ZXMgZm9yIG5hbWVzcGFjZWQgYXR0cmlidXRlIG5hbWVzLCBpbnN0ZWFkIG9mCisgIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZXMgZ2l2ZW4gYnkgdGhlIGx4bWwgcGFyc2VyLiBbYnVnPTEwMzc1OTddCisKKyogRml4ZWQgYSBjcmFzaCBvbiBlbmNvZGluZyB3aGVuIGFuIGF0dHJpYnV0ZSBuYW1lIGNvbnRhaW5lZAorICBub24tQVNDSUkgY2hhcmFjdGVycy4KKworKiBXaGVuIHNuaWZmaW5nIGVuY29kaW5ncywgaWYgdGhlIGNjaGFyZGV0IGxpYnJhcnkgaXMgaW5zdGFsbGVkLAorICBCZWF1dGlmdWwgU291cCB1c2VzIGl0IGluc3RlYWQgb2YgY2hhcmRldC4gY2NoYXJkZXQgaXMgbXVjaAorICBmYXN0ZXIuIFtidWc9MTAyMDc0OF0KKworKiBVc2UgbG9nZ2luZy53YXJuaW5nKCkgaW5zdGVhZCBvZiB3YXJuaW5nLndhcm4oKSB0byBub3RpZnkgdGhlIHVzZXIKKyAgdGhhdCBjaGFyYWN0ZXJzIHdlcmUgcmVwbGFjZWQgd2l0aCBSRVBMQUNFTUVOVAorICBDSEFSQUNURVIuIFtidWc9MTAxMzg2Ml0KKworPSA0LjEuMSAoMjAxMjA3MDMpID0KKworKiBGaXhlZCBhbiBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgY3Jhc2ggd2hpY2ggaGFwcGVuZWQgd2hlbiBodG1sNWxpYgorICBtb3ZlZCBhIHRhZyB3aXRoIGEgbXVsdGl2YWx1ZWQgYXR0cmlidXRlIGZyb20gb25lIHBhcnQgb2YgdGhlIHRyZWUKKyAgdG8gYW5vdGhlci4gW2J1Zz0xMDE5NjAzXQorCisqIENvcnJlY3RseSBkaXNwbGF5IGNsb3NpbmcgdGFncyB3aXRoIGFuIFhNTCBuYW1lc3BhY2UgZGVjbGFyZWQuIFBhdGNoCisgIGJ5IEFuZHJlYXMgS29zdHlya2EuIFtidWc9MTAxOTYzNV0KKworKiBGaXhlZCBhIHR5cG8gdGhhdCBtYWRlIHBhcnNpbmcgc2lnbmlmaWNhbnRseSBzbG93ZXIgdGhhbiBpdCBzaG91bGQKKyAgaGF2ZSBiZWVuLCBhbmQgYWxzbyB3YWl0ZWQgdG9vIGxvbmcgdG8gY2xvc2UgdGFncyB3aXRoIFhNTAorICBuYW1lc3BhY2VzLiBbYnVnPTEwMjAyNjhdCisKKyogZ2V0X3RleHQoKSBub3cgcmV0dXJucyBhbiBlbXB0eSBVbmljb2RlIHN0cmluZyBpZiB0aGVyZSBpcyBubyB0ZXh0LAorICByYXRoZXIgdGhhbiBhbiBlbXB0eSBieXRlc3RyaW5nLiBbYnVnPTEwMjAzODddCisKKz0gNC4xLjAgKDIwMTIwNTI5KSA9CisKKyogQWRkZWQgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIGZpeGluZyBXaW5kb3dzLTEyNTIgY2hhcmFjdGVycworICBlbWJlZGRlZCBpbiBVVEYtOCBkb2N1bWVudHMuIChVbmljb2RlRGFtbWl0LmRldHdpbmdsZSgpKQorCisqIEZpeGVkIHRoZSBoYW5kbGluZyBvZiAmcXVvdDsgd2l0aCB0aGUgYnVpbHQtaW4gcGFyc2VyLiBbYnVnPTk5Mzg3MV0KKworKiBDb21tZW50cywgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb25zLCBhbmQKKyAgbWFya3VwIGRlY2xhcmF0aW9ucyBhcmUgbm93IHRyZWF0ZWQgYXMgcHJlZm9ybWF0dGVkIHN0cmluZ3MsIHRoZSB3YXkKKyAgQ0RhdGEgYmxvY2tzIGFyZS4gW2J1Zz0xMDAxMDI1XQorCisqIEZpeGVkIGEgYnVnIHdpdGggdGhlIGx4bWwgdHJlZWJ1aWxkZXIgdGhhdCBwcmV2ZW50ZWQgdGhlIHVzZXIgZnJvbQorICBhZGRpbmcgYXR0cmlidXRlcyB0byBhIHRhZyB0aGF0IGRpZG4ndCBvcmlnaW5hbGx5IGhhdmUKKyAgYXR0cmlidXRlcy4gW2J1Zz0xMDAyMzc4XSBUaGFua3MgdG8gT2xpdmVyIEJlYXR0aWUgZm9yIHRoZSBwYXRjaC4KKworKiBGaXhlZCBzb21lIGVkZ2UtY2FzZSBidWdzIGhhdmluZyB0byBkbyB3aXRoIGluc2VydGluZyBhbiBlbGVtZW50CisgIGludG8gYSB0YWcgaXQncyBhbHJlYWR5IGluc2lkZSwgYW5kIHJlcGxhY2luZyBvbmUgb2YgYSB0YWcncworICBjaGlsZHJlbiB3aXRoIGFub3RoZXIuIFtidWc9OTk3NTI5XQorCisqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNlYXJjaCBmb3IgYXR0cmlidXRlIHZhbHVlcyBzcGVjaWZpZWQgaW4gVVRGLTguIFtidWc9MTAwMzk3NF0KKworICBUaGlzIGNhdXNlZCBhIG1ham9yIHJlZmFjdG9yaW5nIG9mIHRoZSBzZWFyY2ggY29kZS4gQWxsIHRoZSB0ZXN0cworICBwYXNzLCBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgc2VhcmNoZXMgd2lsbCBiZWhhdmUgZGlmZmVyZW50bHkuCisKKz0gNC4wLjUgKDIwMTIwNDI3KSA9CisKKyogQWRkZWQgYSBuZXcgbWV0aG9kLCB3cmFwKCksIHdoaWNoIHdyYXBzIGFuIGVsZW1lbnQgaW4gYSB0YWcuCisKKyogUmVuYW1lZCByZXBsYWNlX3dpdGhfY2hpbGRyZW4oKSB0byB1bndyYXAoKSwgd2hpY2ggaXMgZWFzaWVyIHRvCisgIHVuZGVyc3RhbmQgYW5kIGFsc28gdGhlIGpRdWVyeSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KKworKiBNYWRlIGVuY29kaW5nIHN1YnN0aXR1dGlvbiBpbiA8bWV0YT4gdGFncyBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IChubworICBtb3JlICVTT1VQLUVOQ09ESU5HJSkuCisKKyogRml4ZWQgYSBidWcgaW4gZGVjb2RpbmcgZGF0YSB0aGF0IGNvbnRhaW5lZCBhIGJ5dGUtb3JkZXIgbWFyaywgc3VjaAorICBhcyBkYXRhIGVuY29kZWQgaW4gVVRGLTE2TEUuIFtidWc9OTg4OTgwXQorCisqIEZpeGVkIGEgYnVnIHRoYXQgbWFkZSB0aGUgSFRNTFBhcnNlciB0cmVlYnVpbGRlciBnZW5lcmF0ZSBYTUwKKyAgZGVmaW5pdGlvbnMgZW5kaW5nIHdpdGggdHdvIHF1ZXN0aW9uIG1hcmtzIGluc3RlYWQgb2YKKyAgb25lLiBbYnVnPTk4NDI1OF0KKworKiBVcG9uIGRvY3VtZW50IGdlbmVyYXRpb24sIENEYXRhIG9iamVjdHMgYXJlIG5vIGxvbmdlciBydW4gdGhyb3VnaAorICB0aGUgZm9ybWF0dGVyLiBbYnVnPTk4ODkwNV0KKworKiBUaGUgdGVzdCBzdWl0ZSBub3cgcGFzc2VzIHdoZW4gbHhtbCBpcyBub3QgaW5zdGFsbGVkLCB3aGV0aGVyIG9yIG5vdAorICBodG1sNWxpYiBpcyBpbnN0YWxsZWQuIFtidWc9OTg3MDA0XQorCisqIFByaW50IGEgd2FybmluZyBvbiBIVE1MUGFyc2VFcnJvcnMgdG8gbGV0IHBlb3BsZSBrbm93IHRoZXkgc2hvdWxkCisgIGluc3RhbGwgYSBiZXR0ZXIgcGFyc2VyIGxpYnJhcnkuCisKKz0gNC4wLjQgKDIwMTIwNDE2KSA9CisKKyogRml4ZWQgYSBidWcgdGhhdCBzb21ldGltZXMgY3JlYXRlZCBkaXNjb25uZWN0ZWQgdHJlZXMuCisKKyogRml4ZWQgYSBidWcgd2l0aCB0aGUgc3RyaW5nIHNldHRlciB0aGF0IG1vdmVkIGEgc3RyaW5nIGFyb3VuZCB0aGUKKyAgdHJlZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQuIFtidWc9OTgzMDUwXQorCisqIEF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdyBydW4gdGhyb3VnaCB0aGUgcHJvdmlkZWQgb3V0cHV0IGZvcm1hdHRlci4KKyAgUHJldmlvdXNseSB0aGV5IHdlcmUgYWx3YXlzIHJ1biB0aHJvdWdoIHRoZSAnbWluaW1hbCcgZm9ybWF0dGVyLiBJbgorICB0aGUgZnV0dXJlIEkgbWF5IG1ha2UgaXQgcG9zc2libGUgdG8gc3BlY2lmeSBkaWZmZXJlbnQgZm9ybWF0dGVycworICBmb3IgYXR0cmlidXRlIHZhbHVlcyBhbmQgc3RyaW5ncywgYnV0IGZvciBub3csIGNvbnNpc3RlbnQgYmVoYXZpb3IKKyAgaXMgYmV0dGVyIHRoYW4gaW5jb25zaXN0ZW50IGJlaGF2aW9yLiBbYnVnPTk4MDIzN10KKworKiBBZGRlZCB0aGUgbWlzc2luZyByZW5kZXJDb250ZW50cyBtZXRob2QgZnJvbSBCZWF1dGlmdWwgU291cCAzLiBBbHNvCisgIGFkZGVkIGFuIGVuY29kZV9jb250ZW50cygpIG1ldGhvZCB0byBnbyBhbG9uZyB3aXRoIGRlY29kZV9jb250ZW50cygpLgorCisqIEdpdmUgYSBtb3JlIHVzZWZ1bCBlcnJvciB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIHJ1biB0aGUgUHl0aG9uIDIKKyAgdmVyc2lvbiBvZiBCUyB1bmRlciBQeXRob24gMy4KKworKiBVbmljb2RlRGFtbWl0IGNhbiBub3cgY29udmVydCBNaWNyb3NvZnQgc21hcnQgcXVvdGVzIHRvIEFTQ0lJIHdpdGgKKyAgVW5pY29kZURhbW1pdChtYXJrdXAsIHNtYXJ0X3F1b3Rlc190bz0iYXNjaWkiKS4KKworPSA0LjAuMyAoMjAxMjA0MDMpID0KKworKiBGaXhlZCBhIHR5cG8gdGhhdCBjYXVzZWQgc29tZSB2ZXJzaW9ucyBvZiBQeXRob24gMyB0byBjb252ZXJ0IHRoZQorICBCZWF1dGlmdWwgU291cCBjb2RlYmFzZSBpbmNvcnJlY3RseS4KKworKiBHb3QgcmlkIG9mIHRoZSA0LjAuMiB3b3JrYXJvdW5kIGZvciBIVE1MIGRvY3VtZW50cy0taXQgd2FzCisgIHVubmVjZXNzYXJ5IGFuZCB0aGUgd29ya2Fyb3VuZCB3YXMgdHJpZ2dlcmluZyBhIChwb3NzaWJseSBkaWZmZXJlbnQsCisgIGJ1dCByZWxhdGVkKSBidWcgaW4gbHhtbC4gW2J1Zz05NzI0NjZdCisKKz0gNC4wLjIgKDIwMTIwMzI2KSA9CisKKyogV29ya2VkIGFyb3VuZCBhIHBvc3NpYmxlIGJ1ZyBpbiBseG1sIHRoYXQgcHJldmVudHMgbm9uLXRpbnkgWE1MCisgIGRvY3VtZW50cyBmcm9tIGJlaW5nIHBhcnNlZC4gW2J1Zz05NjM4ODAsIGJ1Zz05NjM5MzZdCisKKyogRml4ZWQgYSBidWcgd2hlcmUgc3BlY2lmeWluZyBgdGV4dGAgd2hpbGUgYWxzbyBzZWFyY2hpbmcgZm9yIGEgdGFnCisgIG9ubHkgd29ya2VkIGlmIGB0ZXh0YCB3YW50ZWQgYW4gZXhhY3Qgc3RyaW5nIG1hdGNoLiBbYnVnPTk1NTk0Ml0KKworPSA0LjAuMSAoMjAxMjAzMTQpID0KKworKiBUaGlzIGlzIHRoZSBmaXJzdCBvZmZpY2lhbCByZWxlYXNlIG9mIEJlYXV0aWZ1bCBTb3VwIDQuIFRoZXJlIGlzIG5vCisgIDQuMC4wIHJlbGVhc2UsIHRvIGVsaW1pbmF0ZSBhbnkgcG9zc2liaWxpdHkgdGhhdCBwYWNrYWdpbmcgc29mdHdhcmUKKyAgbWlnaHQgdHJlYXQgIjQuMC4wIiBhcyBiZWluZyBhbiBlYXJsaWVyIHZlcnNpb24gdGhhbiAiNC4wLjBiMTAiLgorCisqIEJyb3VnaHQgQlMgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiBzb3Vwc2VsZWN0LCBhZGRpbmcKKyAgQ1NTIHNlbGVjdG9yIHN1cHBvcnQgZm9yIGRpcmVjdCBkZXNjZW5kYW50IG1hdGNoZXMgYW5kIG11bHRpcGxlIENTUworICBjbGFzcyBtYXRjaGVzLgorCis9IDQuMC4wYjEwICgyMDEyMDMwMikgPQorCisqIEFkZGVkIHN1cHBvcnQgZm9yIHNpbXBsZSBDU1Mgc2VsZWN0b3JzLCB0YWtlbiBmcm9tIHRoZSBzb3Vwc2VsZWN0IHByb2plY3QuCisKKyogRml4ZWQgYSBjcmFzaCB3aGVuIHVzaW5nIGh0bWw1bGliLiBbYnVnPTk0MzI0Nl0KKworKiBJbiBIVE1MNS1zdHlsZSA8bWV0YSBjaGFyc2V0PSJmb28iPiB0YWdzLCB0aGUgdmFsdWUgb2YgdGhlICJjaGFyc2V0IgorICBhdHRyaWJ1dGUgaXMgbm93IHJlcGxhY2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGVuY29kaW5nIG9uCisgIG91dHB1dC4gW2J1Zz05NDI3MTRdCisKKyogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgY2FsbGluZyBhIHRhZyB0byBzb21ldGltZXMgY2FsbCBmaW5kX2FsbCgpCisgIHdpdGggdGhlIHdyb25nIGFyZ3VtZW50cy4gW2J1Zz05NDQ0MjZdCisKKyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBicm91Z2h0IGJhY2sgdGhlIEJlYXV0aWZ1bFN0b25lU291cAorICBjbGFzcyBhcyBhIGRlcHJlY2F0ZWQgd3JhcHBlciBhcm91bmQgQmVhdXRpZnVsU291cC4KKworPSA0LjAuMGI5ICgyMDEyMDIyOCkgPQorCisqIEZpeGVkIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgRE9DVFlQRXMgdGhhdCBoYXZlIGJvdGggYSBwdWJsaWMKKyAgSUQgYW5kIGEgc3lzdGVtIElELgorCisqIEZpeGVkIHRoZSBnZW5lcmF0ZWQgWE1MIGRlY2xhcmF0aW9uLgorCisqIFJlbmFtZWQgVGFnLm5zcHJlZml4IHRvIFRhZy5wcmVmaXgsIGZvciBjb25zaXN0ZW5jeSB3aXRoCisgIE5hbWVzcGFjZWRBdHRyaWJ1dGUuCisKKyogRml4ZWQgYSB0ZXN0IGZhaWx1cmUgdGhhdCBvY2N1cmVkIG9uIFB5dGhvbiAzLnggd2hlbiBjaGFyZGV0IHdhcworICBpbnN0YWxsZWQuCisKKyogTWFkZSBwcmV0dGlmeSgpIHJldHVybiBVbmljb2RlIGJ5IGRlZmF1bHQsIHNvIGl0IHdpbGwgbG9vayBuaWNlIG9uCisgIFB5dGhvbiAzIHdoZW4gcGFzc2VkIGludG8gcHJpbnQoKS4KKworPSA0LjAuMGI4ICgyMDEyMDIyNCkgPQorCisqIEFsbCB0cmVlIGJ1aWxkZXJzIG5vdyBwcmVzZXJ2ZSBuYW1lc3BhY2UgaW5mb3JtYXRpb24gaW4gdGhlCisgIGRvY3VtZW50cyB0aGV5IHBhcnNlLiBJZiB5b3UgdXNlIHRoZSBodG1sNWxpYiBwYXJzZXIgb3IgbHhtbCdzIFhNTAorICBwYXJzZXIsIHlvdSBjYW4gYWNjZXNzIHRoZSBuYW1lc3BhY2UgVVJMIGZvciBhIHRhZyBhcyB0YWcubmFtZXNwYWNlLgorCisgIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIHNwZWNpYWwgc3VwcG9ydCBmb3IgbmFtZXNwYWNlLW9yaWVudGVkCisgIHNlYXJjaGluZyBvciB0cmVlIG1hbmlwdWxhdGlvbi4gV2hlbiB5b3Ugc2VhcmNoIHRoZSB0cmVlLCB5b3UgbmVlZAorICB0byB1c2UgbmFtZXNwYWNlIHByZWZpeGVzIGV4YWN0bHkgYXMgdGhleSdyZSB1c2VkIGluIHRoZSBvcmlnaW5hbAorICBkb2N1bWVudC4KKworKiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9DVFlQRSBhbHdheXMgZW5kcyBpbiBhIG5ld2xpbmUuCisKKyogSXNzdWUgYSB3YXJuaW5nIGlmIHRoZSB1c2VyIHRyaWVzIHRvIHVzZSBhIFNvdXBTdHJhaW5lciBpbgorICBjb25qdW5jdGlvbiB3aXRoIHRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIsIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydAorICB0aGVtLgorCis9IDQuMC4wYjcgKDIwMTIwMjIzKSA9CisKKyogVXBvbiBkZWNvZGluZyB0byBzdHJpbmcsIGFueSBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgaW4KKyAgeW91ciBjaG9zZW4gZW5jb2Rpbmcgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBudW1lcmljIFhNTCBlbnRpdHkKKyAgcmVmZXJlbmNlcy4KKworKiBJc3N1ZSBhIHdhcm5pbmcgaWYgY2hhcmFjdGVycyB3ZXJlIHJlcGxhY2VkIHdpdGggUkVQTEFDRU1FTlQKKyAgQ0hBUkFDVEVSIGR1cmluZyBVbmljb2RlIGNvbnZlcnNpb24uCisKKyogUmVzdG9yZWQgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjYuCisKKyogVGhlIGluc3RhbGwgcHJvY2VzcyBubyBsb25nZXIgaW5zdGFsbHMgZG9jcyBvciBhdXhpbGxhcnkgdGV4dCBmaWxlcy4KKworKiBJdCdzIG5vdyBwb3NzaWJsZSB0byBkZWVwY29weSBhIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGNyZWF0ZWQgd2l0aAorICBQeXRob24ncyBidWlsdC1pbiBIVE1MIHBhcnNlci4KKworKiBBYm91dCAxMDAgdW5pdCB0ZXN0cyB0aGF0ICJ0ZXN0IiB0aGUgYmVoYXZpb3Igb2YgdmFyaW91cyBwYXJzZXJzIG9uCisgIGludmFsaWQgbWFya3VwIGhhdmUgYmVlbiByZW1vdmVkLiBMZWdpdGltYXRlIGNoYW5nZXMgdG8gdGhvc2UKKyAgcGFyc2VycyBjYXVzZWQgdGhlc2UgdGVzdHMgdG8gZmFpbCwgaW5kaWNhdGluZyB0aGF0IHBlcmhhcHMKKyAgQmVhdXRpZnVsIFNvdXAgc2hvdWxkIG5vdCB0ZXN0IHRoZSBiZWhhdmlvciBvZiBmb3JlaWduCisgIGxpYnJhcmllcy4KKworICBUaGUgcHJvYmxlbWF0aWMgdW5pdCB0ZXN0cyBoYXZlIGJlZW4gcmVmb3JtdWxhdGVkIGFzIGluZm9ybWF0aW9uYWwKKyAgY29tcGFyaXNvbnMgZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQKKyAgc2NyaXB0cy9kZW1vbnN0cmF0ZV9wYXJzZXJfZGlmZmVyZW5jZXMucHkuCisKKyAgVGhpcyBtYWtlcyBCZWF1dGlmdWwgU291cCBjb21wYXRpYmxlIHdpdGggaHRtbDVsaWIgdmVyc2lvbiAwLjk1IGFuZAorICBmdXR1cmUgdmVyc2lvbnMgb2YgSFRNTFBhcnNlci4KKworPSA0LjAuMGI2ICgyMDEyMDIxNikgPQorCisqIE11bHRpLXZhbHVlZCBhdHRyaWJ1dGVzIGxpa2UgImNsYXNzIiBhbHdheXMgaGF2ZSBhIGxpc3Qgb2YgdmFsdWVzLAorICBldmVuIGlmIHRoZXJlJ3Mgb25seSBvbmUgdmFsdWUgaW4gdGhlIGxpc3QuCisKKyogQWRkZWQgYSBudW1iZXIgb2YgbXVsdGktdmFsdWVkIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiBIVE1MNS4KKworKiBTdG9wcGVkIGdlbmVyYXRpbmcgYSBzcGFjZSBiZWZvcmUgdGhlIHNsYXNoIHRoYXQgY2xvc2VzIGFuCisgIGVtcHR5LWVsZW1lbnQgdGFnLiBUaGlzIG1heSBjb21lIGJhY2sgaWYgSSBhZGQgYSBzcGVjaWFsIFhIVE1MIG1vZGUKKyAgKGh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS8jQ18yKSwgYnV0IHJpZ2h0IG5vdyBpdCdzIHByZXR0eQorICB1c2VsZXNzLgorCisqIFBhc3NpbmcgdGV4dCBhbG9uZyB3aXRoIHRhZy1zcGVjaWZpYyBhcmd1bWVudHMgdG8gYSBmaW5kKiBtZXRob2Q6CisKKyAgIGZpbmQoImEiLCB0ZXh0PSJDbGljayBoZXJlIikKKworICB3aWxsIGZpbmQgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGdpdmVuIHRleHQgYXMgdGhlaXIKKyAgLnN0cmluZy4gUHJldmlvdXNseSwgdGhlIHRhZy1zcGVjaWZpYyBhcmd1bWVudHMgd2VyZSBpZ25vcmVkIGFuZAorICBvbmx5IHN0cmluZ3Mgd2VyZSBzZWFyY2hlZC4KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIHRvIGJ1aWxkIGEKKyAgcGFydGlhbGx5IGRpc2Nvbm5lY3RlZCB0cmVlLiBHZW5lcmFsbHkgY2xlYW5lZCB1cCB0aGUgaHRtbDVsaWIgdHJlZQorICBidWlsZGVyLgorCisqIElmIHlvdSByZXN0cmljdCBhIG11bHRpLXZhbHVlZCBhdHRyaWJ1dGUgbGlrZSAiY2xhc3MiIHRvIGEgc3RyaW5nCisgIHRoYXQgY29udGFpbnMgc3BhY2VzLCBCZWF1dGlmdWwgU291cCB3aWxsIG9ubHkgY29uc2lkZXIgaXQgYSBtYXRjaAorICBpZiB0aGUgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhhdCBzcGVjaWZpYyBzdHJpbmcuCisKKz0gNC4wLjBiNSAoMjAxMjAyMDkpID0KKworKiBSYXRpb25hbGl6ZWQgQmVhdXRpZnVsIFNvdXAncyB0cmVhdG1lbnQgb2YgQ1NTIGNsYXNzLiBBIHRhZworICBiZWxvbmdpbmcgdG8gbXVsdGlwbGUgQ1NTIGNsYXNzZXMgaXMgdHJlYXRlZCBhcyBoYXZpbmcgYSBsaXN0IG9mCisgIHZhbHVlcyBmb3IgdGhlICdjbGFzcycgYXR0cmlidXRlLiBTZWFyY2hpbmcgZm9yIGEgQ1NTIGNsYXNzIHdpbGwKKyAgbWF0Y2ggKmFueSogb2YgdGhlIENTUyBjbGFzc2VzLgorCisgIFRoaXMgYWN0dWFsbHkgYWZmZWN0cyBhbGwgYXR0cmlidXRlcyB0aGF0IHRoZSBIVE1MIHN0YW5kYXJkIGRlZmluZXMKKyAgYXMgdGFraW5nIG11bHRpcGxlIHZhbHVlcyAoY2xhc3MsIHJlbCwgcmV2LCBhcmNoaXZlLCBhY2NlcHQtY2hhcnNldCwKKyAgYW5kIGhlYWRlcnMpLCBidXQgJ2NsYXNzJyBpcyBieSBmYXIgdGhlIG1vc3QgY29tbW9uLiBbYnVnPTQxMDM0XQorCisqIElmIHlvdSBwYXNzIGFueXRoaW5nIG90aGVyIHRoYW4gYSBkaWN0aW9uYXJ5IGFzIHRoZSBzZWNvbmQgYXJndW1lbnQKKyAgdG8gb25lIG9mIHRoZSBmaW5kKiBtZXRob2RzLCBpdCdsbCBhc3N1bWUgeW91IHdhbnQgdG8gdXNlIHRoYXQKKyAgb2JqZWN0IHRvIHNlYXJjaCBhZ2FpbnN0IGEgdGFnJ3MgQ1NTIGNsYXNzZXMuIFByZXZpb3VzbHkgdGhpcyBvbmx5CisgIHdvcmtlZCBpZiB5b3UgcGFzc2VkIGluIGEgc3RyaW5nLgorCisqIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIGEgY3Jhc2ggd2hlbiB5b3UgcGFzc2VkIGEgZGljdGlvbmFyeSBhcyBhbgorICBhdHRyaWJ1dGUgdmFsdWUgKHBvc3NpYmx5IGJlY2F1c2UgeW91IG1pc3R5cGVkICJhdHRycyIpLiBbYnVnPTg0MjQxOV0KKworKiBVbmljb2RlLCBEYW1taXQgbm93IGRldGVjdHMgdGhlIGVuY29kaW5nIGluIEhUTUwgNS1zdHlsZSA8bWV0YT4gdGFncworICBsaWtlIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPi4gW2J1Zz04MzcyNjhdCisKKyogSWYgVW5pY29kZSwgRGFtbWl0IGNhbid0IGZpZ3VyZSBvdXQgYSBjb25zaXN0ZW50IGVuY29kaW5nIGZvciBhCisgIHBhZ2UsIGl0IHdpbGwgdHJ5IGVhY2ggb2YgaXRzIGd1ZXNzZXMgYWdhaW4sIHdpdGggZXJyb3JzPSJyZXBsYWNlIgorICBpbnN0ZWFkIG9mIGVycm9ycz0ic3RyaWN0Ii4gVGhpcyBtYXkgbWVhbiB0aGF0IHNvbWUgZGF0YSBnZXRzCisgIHJlcGxhY2VkIHdpdGggUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLCBidXQgYXQgbGVhc3QgbW9zdCBvZiBpdCB3aWxsCisgIGdldCB0dXJuZWQgaW50byBVbmljb2RlLiBbYnVnPTc1NDkwM10KKworKiBQYXRjaGVkIG92ZXIgYSBidWcgaW4gaHRtbDVsaWIgKD8pIHRoYXQgd2FzIGNyYXNoaW5nIEJlYXV0aWZ1bCBTb3VwCisgIG9uIGNlcnRhaW4ga2luZHMgb2YgbWFya3VwLiBbYnVnPTgzODgwMF0KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IHdyZWNrZWQgdGhlIHRyZWUgaWYgeW91IHJlcGxhY2VkIGFuIGVsZW1lbnQgd2l0aCBhbgorICBlbXB0eSBzdHJpbmcuIFtidWc9NzI4Njk3XQorCisqIEltcHJvdmVkIFVuaWNvZGUsIERhbW1pdCdzIGJlaGF2aW9yIHdoZW4geW91IGdpdmUgaXQgVW5pY29kZSB0bworICBiZWdpbiB3aXRoLgorCis9IDQuMC4wYjQgKDIwMTIwMjA4KSA9CisKKyogQWRkZWQgQmVhdXRpZnVsU291cC5uZXdfc3RyaW5nKCkgdG8gZ28gYWxvbmcgd2l0aCBCZWF1dGlmdWxTb3VwLm5ld190YWcoKQorCisqIEJlYXV0aWZ1bFNvdXAubmV3X3RhZygpIHdpbGwgZm9sbG93IHRoZSBydWxlcyBvZiB3aGF0ZXZlcgorICB0cmVlLWJ1aWxkZXIgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSBvcmlnaW5hbCBCZWF1dGlmdWxTb3VwIG9iamVjdC4gQQorICBuZXcgPHA+IHRhZyB3aWxsIGxvb2sgbGlrZSAiPHAgLz4iIGlmIHRoZSBzb3VwIG9iamVjdCB3YXMgY3JlYXRlZCB0bworICBwYXJzZSBYTUwsIGJ1dCBpdCB3aWxsIGxvb2sgbGlrZSAiPHA+PC9wPiIgaWYgdGhlIHNvdXAgb2JqZWN0IHdhcworICBjcmVhdGVkIHRvIHBhcnNlIEhUTUwuCisKKyogV2UgcGFzcyBpbiBzdHJpY3Q9RmFsc2UgdG8gaHRtbC5wYXJzZXIgb24gUHl0aG9uIDMsIGdyZWF0bHkKKyAgaW1wcm92aW5nIGh0bWwucGFyc2VyJ3MgYWJpbGl0eSB0byBoYW5kbGUgYmFkIEhUTUwuCisKKyogV2UgYWxzbyBtb25rZXlwYXRjaCBhIHNlcmlvdXMgYnVnIGluIGh0bWwucGFyc2VyIHRoYXQgbWFkZQorICBzdHJpY3Q9RmFsc2UgZGlzYXN0cm91cyBvbiBQeXRob24gMy4yLjIuCisKKyogUmVwbGFjZWQgdGhlICJzdWJzdGl0dXRlX2h0bWxfZW50aXRpZXMiIGFyZ3VtZW50IHdpdGggdGhlCisgIG1vcmUgZ2VuZXJhbCAiZm9ybWF0dGVyIiBhcmd1bWVudC4KKworKiBCYXJlIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIGFyZSBhbHdheXMgY29udmVydGVkIHRvIFhNTAorICBlbnRpdGllcyB1bmxlc3MgdGhlIHVzZXIgcHJldmVudHMgaXQuCisKKyogQWRkZWQgUGFnZUVsZW1lbnQuaW5zZXJ0X2JlZm9yZSgpIGFuZCBQYWdlRWxlbWVudC5pbnNlcnRfYWZ0ZXIoKSwKKyAgd2hpY2ggbGV0IHlvdSBwdXQgYW4gZWxlbWVudCBpbnRvIHRoZSBwYXJzZSB0cmVlIHdpdGggcmVzcGVjdCB0bworICBzb21lIG90aGVyIGVsZW1lbnQuCisKKyogUmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gZG8gc29tZXRoaW5nIG5vbnNlbnNpY2FsCisgIGxpa2UgaW5zZXJ0IGEgdGFnIGludG8gaXRzZWxmLgorCisKKz0gNC4wLjBiMyAoMjAxMjAyMDMpID0KKworQmVhdXRpZnVsIFNvdXAgNCBpcyBhIG5lYXJseS1jb21wbGV0ZSByZXdyaXRlIHRoYXQgcmVtb3ZlcyBCZWF1dGlmdWwKK1NvdXAncyBjdXN0b20gSFRNTCBwYXJzZXIgaW4gZmF2b3Igb2YgYSBzeXN0ZW0gdGhhdCBsZXRzIHlvdSB3cml0ZSBhCitsaXR0bGUgZ2x1ZSBjb2RlIGFuZCBwbHVnIGluIGFueSBIVE1MIG9yIFhNTCBwYXJzZXIgeW91IHdhbnQuCisKK0JlYXV0aWZ1bCBTb3VwIDQuMCBjb21lcyB3aXRoIGdsdWUgY29kZSBmb3IgZm91ciBwYXJzZXJzOgorCisgKiBQeXRob24ncyBzdGFuZGFyZCBIVE1MUGFyc2VyIChodG1sLnBhcnNlciBpbiBQeXRob24gMykKKyAqIGx4bWwncyBIVE1MIGFuZCBYTUwgcGFyc2VycworICogaHRtbDVsaWIncyBIVE1MIHBhcnNlcgorCitIVE1MUGFyc2VyIGlzIHRoZSBkZWZhdWx0LCBidXQgSSByZWNvbW1lbmQgeW91IGluc3RhbGwgbHhtbCBpZiB5b3UKK2Nhbi4KKworRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHNlZSB0aGUgU3BoaW54IGRvY3VtZW50YXRpb24gaW4KK2JzNC9kb2Mvc291cmNlLy4gV2hhdCBmb2xsb3dzIGlzIGEgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBmcm9tCitCZWF1dGlmdWwgU291cCAzLgorCis9PT0gVGhlIG1vZHVsZSBuYW1lIGhhcyBjaGFuZ2VkID09PQorCitQcmV2aW91c2x5IHlvdSBpbXBvcnRlZCB0aGUgQmVhdXRpZnVsU291cCBjbGFzcyBmcm9tIGEgbW9kdWxlIGFsc28KK2NhbGxlZCBCZWF1dGlmdWxTb3VwLiBUbyBzYXZlIGtleXN0cm9rZXMgYW5kIG1ha2UgaXQgY2xlYXIgd2hpY2gKK3ZlcnNpb24gb2YgdGhlIEFQSSBpcyBpbiB1c2UsIHRoZSBtb2R1bGUgaXMgbm93IGNhbGxlZCAnYnM0JzoKKworICAgID4+PiBmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAorCis9PT0gSXQgd29ya3Mgd2l0aCBQeXRob24gMyA9PT0KKworQmVhdXRpZnVsIFNvdXAgMy4xLjAgd29ya2VkIHdpdGggUHl0aG9uIDMsIGJ1dCB0aGUgcGFyc2VyIGl0IHVzZWQgd2FzCitzbyBiYWQgdGhhdCBpdCBiYXJlbHkgd29ya2VkIGF0IGFsbC4gQmVhdXRpZnVsIFNvdXAgNCB3b3JrcyB3aXRoCitQeXRob24gMywgYW5kIHNpbmNlIGl0cyBwYXJzZXIgaXMgcGx1Z2dhYmxlLCB5b3UgZG9uJ3Qgc2FjcmlmaWNlCitxdWFsaXR5LgorCitTcGVjaWFsIHRoYW5rcyB0byBUaG9tYXMgS2x1eXZlciBhbmQgRXppbyBNZWxvdHRpIGZvciBnZXR0aW5nIFB5dGhvbiAzCitzdXBwb3J0IHRvIHRoZSBmaW5pc2ggbGluZS4gRXppbyBNZWxvdHRpIGlzIGFsc28gdG8gdGhhbmsgZm9yIGdyZWF0bHkKK2ltcHJvdmluZyB0aGUgSFRNTCBwYXJzZXIgdGhhdCBjb21lcyB3aXRoIFB5dGhvbiAzLjIuCisKKz09PSBDREFUQSBzZWN0aW9ucyBhcmUgbm9ybWFsIHRleHQsIGlmIHRoZXkncmUgdW5kZXJzdG9vZCBhdCBhbGwuID09PQorCitDdXJyZW50bHksIHRoZSBseG1sIGFuZCBodG1sNWxpYiBIVE1MIHBhcnNlcnMgaWdub3JlIENEQVRBIHNlY3Rpb25zIGluCittYXJrdXA6CisKKyA8cD48IVtDREFUQVtmb29dXT48L3A+ID0+IDxwPjwvcD4KKworQSBmdXR1cmUgdmVyc2lvbiBvZiBodG1sNWxpYiB3aWxsIHR1cm4gQ0RBVEEgc2VjdGlvbnMgaW50byB0ZXh0IG5vZGVzLAorYnV0IG9ubHkgd2l0aGluIHRhZ3MgbGlrZSA8c3ZnPiBhbmQgPG1hdGg+OgorCisgPHN2Zz48IVtDREFUQVtmb29dXT48L3N2Zz4gPT4gPHA+Zm9vPC9wPgorCitUaGUgZGVmYXVsdCBYTUwgcGFyc2VyICh3aGljaCB1c2VzIGx4bWwgYmVoaW5kIHRoZSBzY2VuZXMpIHR1cm5zIENEQVRBCitzZWN0aW9ucyBpbnRvIG9yZGluYXJ5IHRleHQgZWxlbWVudHM6CisKKyA8cD48IVtDREFUQVtmb29dXT48L3A+ID0+IDxwPmZvbzwvcD4KKworSW4gdGhlb3J5IGl0J3MgcG9zc2libGUgdG8gcHJlc2VydmUgdGhlIENEQVRBIHNlY3Rpb25zIHdoZW4gdXNpbmcgdGhlCitYTUwgcGFyc2VyLCBidXQgSSBkb24ndCBzZWUgaG93IHRvIGdldCBpdCB0byB3b3JrIGluIHByYWN0aWNlLgorCis9PT0gTWlzY2VsbGFuZW91cyBvdGhlciBzdHVmZiA9PT0KKworSWYgdGhlIEJlYXV0aWZ1bFNvdXAgaW5zdGFuY2UgaGFzIC5pc194bWwgc2V0IHRvIFRydWUsIGFuIGFwcHJvcHJpYXRlCitYTUwgZGVjbGFyYXRpb24gd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIHRyZWUgaXMgdHJhbnNmb3JtZWQgaW50byBhCitzdHJpbmc6CisKKyAgICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI+CisgICAgPG1hcmt1cD4KKyAgICAgLi4uCisgICAgPC9tYXJrdXA+CisKK1RoZSBbJ2x4bWwnLCAneG1sJ10gdHJlZSBidWlsZGVyIHNldHMgLmlzX3htbCB0byBUcnVlOyB0aGUgb3RoZXIgdHJlZQorYnVpbGRlcnMgc2V0IGl0IHRvIEZhbHNlLiBJZiB5b3Ugd2FudCB0byBwYXJzZSBYSFRNTCB3aXRoIGFuIEhUTUwKK3BhcnNlciwgeW91IGNhbiBzZXQgaXQgbWFudWFsbHkuCisKKworPSAzLjIuMCA9CisKK1RoZSAzLjEgc2VyaWVzIHdhc24ndCB2ZXJ5IHVzZWZ1bCwgc28gSSByZW5hbWVkIHRoZSAzLjAgc2VyaWVzIHRvIDMuMgordG8gbWFrZSBpdCBvYnZpb3VzIHdoaWNoIG9uZSB5b3Ugc2hvdWxkIHVzZS4KKworPSAzLjEuMCA9CisKK0EgaHlicmlkIHZlcnNpb24gdGhhdCBzdXBwb3J0cyAyLjQgYW5kIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZAordG8gcnVuIHVuZGVyIFB5dGhvbiAzLjAuIFRoZXJlIGFyZSB0aHJlZSBiYWNrd2FyZHMtaW5jb21wYXRpYmxlCitjaGFuZ2VzIHlvdSBzaG91bGQgYmUgYXdhcmUgb2YsIGJ1dCBubyBuZXcgZmVhdHVyZXMgb3IgZGVsaWJlcmF0ZQorYmVoYXZpb3IgY2hhbmdlcy4KKworMS4gc3RyKCkgbWF5IG5vIGxvbmdlciBkbyB3aGF0IHlvdSB3YW50LiBUaGlzIGlzIGJlY2F1c2UgdGhlIG1lYW5pbmcKK29mIHN0cigpIGludmVydHMgYmV0d2VlbiBQeXRob24gMiBhbmQgMzsgaW4gUHl0aG9uIDIgaXQgZ2l2ZXMgeW91IGEKK2J5dGUgc3RyaW5nLCBpbiBQeXRob24gMyBpdCBnaXZlcyB5b3UgYSBVbmljb2RlIHN0cmluZy4KKworVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgeW91IGNhbid0IHBhc3MgYW4gZW5jb2RpbmcgdG8gLl9fc3RyX18KK2FueW1vcmUuIFVzZSBlbmNvZGUoKSB0byBnZXQgYSBzdHJpbmcgYW5kIGRlY29kZSgpIHRvIGdldCBVbmljb2RlLCBhbmQKK3lvdSdsbCBiZSByZWFkeSAod2VsbCwgcmVhZGllcikgZm9yIFB5dGhvbiAzLgorCisyLiBCZWF1dGlmdWwgU291cCBpcyBub3cgYmFzZWQgb24gSFRNTFBhcnNlciByYXRoZXIgdGhhbiBTR01MUGFyc2VyLAord2hpY2ggaXMgZ29uZSBpbiBQeXRob24gMy4gVGhlcmUncyBzb21lIGJhZCBIVE1MIHRoYXQgU0dNTFBhcnNlcgoraGFuZGxlZCBidXQgSFRNTFBhcnNlciBkb2Vzbid0LCB1c3VhbGx5IHRvIGRvIHdpdGggYXR0cmlidXRlIHZhbHVlcwordGhhdCBhcmVuJ3QgY2xvc2VkIG9yIGhhdmUgYnJhY2tldHMgaW5zaWRlIHRoZW06CisKKyAgPGEgaHJlZj0iZm9vPC9hPiwgPC9hPjxhIGhyZWY9ImJhciI+YmF6PC9hPgorICA8YSBiPSI8YT4iPicsICc8YSBiPSImbHQ7YSZndDsiPjwvYT48YT4iPjwvYT4KKworQSBsYXRlciB2ZXJzaW9uIG9mIEJlYXV0aWZ1bCBTb3VwIHdpbGwgYWxsb3cgeW91IHRvIHBsdWcgaW4gZGlmZmVyZW50CitwYXJzZXJzIHRvIG1ha2UgdHJhZGVvZmZzIGJldHdlZW4gc3BlZWQgYW5kIHRoZSBhYmlsaXR5IHRvIGhhbmRsZSBiYWQKK0hUTUwuCisKKzMuIEluIFB5dGhvbiAzIChidXQgbm90IFB5dGhvbiAyKSwgSFRNTFBhcnNlciBjb252ZXJ0cyBlbnRpdGllcyB3aXRoaW4KK2F0dHJpYnV0ZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLiBJbiBQeXRob24gMiBpdCdzCitwb3NzaWJsZSB0byBwYXJzZSB0aGlzIHN0cmluZyBhbmQgbGVhdmUgdGhlICZlYWN1dGU7IGludGFjdC4KKworIDxhIGhyZWY9Imh0dHA6Ly9jcnVtbXkuY29tP3NhY3ImZWFjdXRlOyZibGV1Ij4KKworSW4gUHl0aG9uIDMsIHRoZSAmZWFjdXRlOyBpcyBhbHdheXMgY29udmVydGVkIHRvIFx4ZTkgZHVyaW5nCitwYXJzaW5nLgorCisKKz0gMy4wLjdhID0KKworQWRkZWQgYW4gaW1wb3J0IHRoYXQgbWFrZXMgQlMgd29yayBpbiBQeXRob24gMi4zLgorCisKKz0gMy4wLjcgPQorCitGaXhlZCBhIFVuaWNvZGVEZWNvZGVFcnJvciB3aGVuIHVucGlja2xpbmcgZG9jdW1lbnRzIHRoYXQgY29udGFpbgorbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKK0ZpeGVkIGEgVHlwZUVycm9yIHRoYXQgb2NjdXJlZCBpbiBzb21lIGNpcmN1bXN0YW5jZXMgd2hlbiBhIHRhZworY29udGFpbmVkIG5vIHRleHQuCisKK0p1bXAgdGhyb3VnaCBob29wcyB0byBhdm9pZCB0aGUgdXNlIG9mIGNoYXJkZXQsIHdoaWNoIGNhbiBiZSBleHRyZW1lbHkKK3Nsb3cgaW4gc29tZSBjaXJjdW1zdGFuY2VzLiBVVEYtOCBkb2N1bWVudHMgc2hvdWxkIG5ldmVyIHRyaWdnZXIgdGhlCit1c2Ugb2YgY2hhcmRldC4KKworV2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWQgaW5zaWRlIDxwcmU+IGFuZCA8dGV4dGFyZWE+IHRhZ3MgdGhhdCBjb250YWluCitub3RoaW5nIGJ1dCB3aGl0ZXNwYWNlLgorCitCZWF1dGlmdWwgU291cCBjYW4gbm93IHBhcnNlIGEgZG9jdHlwZSB0aGF0J3Mgc2NvcGVkIHRvIGFuIFhNTCBuYW1lc3BhY2UuCisKKworPSAzLjAuNiA9CisKK0dvdCByaWQgb2YgYSB2ZXJ5IG9sZCBkZWJ1ZyBsaW5lIHRoYXQgcHJldmVudGVkIGNoYXJkZXQgZnJvbSB3b3JraW5nLgorCitBZGRlZCBhIFRhZy5kZWNvbXBvc2UoKSBtZXRob2QgdGhhdCBjb21wbGV0ZWx5IGRpc2Nvbm5lY3RzIGEgdHJlZSBvciBhCitzdWJzZXQgb2YgYSB0cmVlLCBicmVha2luZyBpdCB1cCBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIHRoYXQgYXJlCitlYXN5IGZvciB0aGUgZ2FyYmFnZSBjb2xsZWN0ZXIgdG8gY29sbGVjdC4KKworVGFnLmV4dHJhY3QoKSBub3cgcmV0dXJucyB0aGUgdGFnIHRoYXQgd2FzIGV4dHJhY3RlZC4KKworVGFnLmZpbmROZXh0KCkgbm93IGRvZXMgc29tZXRoaW5nIHdpdGggdGhlIGtleXdvcmQgYXJndW1lbnRzIHlvdSBwYXNzCitpdCBpbnN0ZWFkIG9mIGRyb3BwaW5nIHRoZW0gb24gdGhlIGZsb29yLgorCitGaXhlZCBhIFVuaWNvZGUgY29udmVyc2lvbiBidWcuCisKK0ZpeGVkIGEgYnVnIHRoYXQgZ2FyYmxlZCBzb21lIDxtZXRhPiB0YWdzIHdoZW4gcmV3cml0aW5nIHRoZW0uCisKKworPSAzLjAuNSA9CisKK1NvdXAgb2JqZWN0cyBjYW4gbm93IGJlIHBpY2tsZWQsIGFuZCBjb3BpZWQgd2l0aCBjb3B5LmRlZXBjb3B5LgorCitUYWcuYXBwZW5kIG5vdyB3b3JrcyBwcm9wZXJseSBvbiBleGlzdGluZyBCUyBvYmplY3RzLiAoSXQgd2Fzbid0CitvcmlnaW5hbGx5IGludGVuZGVkIGZvciBvdXRzaWRlIHVzZSwgYnV0IGl0IGNhbiBiZSBub3cuKSAoR2lsZXMKK1JhZGZvcmQpCisKK1Bhc3NpbmcgaW4gYSBub25leGlzdGVudCBlbmNvZGluZyB3aWxsIG5vIGxvbmdlciBjcmFzaCB0aGUgcGFyc2VyIG9uCitQeXRob24gMi40IChKb2huIE5hZ2xlKS4KKworRml4ZWQgYW4gdW5kZXJseWluZyBidWcgaW4gU0dNTFBhcnNlciB0aGF0IHRoaW5rcyBBU0NJSSBoYXMgMjU1CitjaGFyYWN0ZXJzIGluc3RlYWQgb2YgMTI3IChKb2huIE5hZ2xlKS4KKworRW50aXRpZXMgYXJlIGNvbnZlcnRlZCBtb3JlIGNvbnNpc3RlbnRseSB0byBVbmljb2RlIGNoYXJhY3RlcnMuCisKK0VudGl0eSByZWZlcmVuY2VzIGluIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdyBjb252ZXJ0ZWQgdG8gVW5pY29kZQorY2hhcmFjdGVycyB3aGVuIGFwcHJvcHJpYXRlLiBOdW1lcmljIGVudGl0aWVzIGFyZSBhbHdheXMgY29udmVydGVkLAorYmVjYXVzZSBTR01MUGFyc2VyIGFsd2F5cyBjb252ZXJ0cyB0aGVtIG91dHNpZGUgb2YgYXR0cmlidXRlIHZhbHVlcy4KKworQUxMX0VOVElUSUVTIGhhcHBlbnMgdG8ganVzdCBiZSB0aGUgWEhUTUwgZW50aXRpZXMsIHNvIEkgcmVuYW1lZCBpdCB0bworWEhUTUxfRU5USVRJRVMuCisKK1RoZSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGJhcmUgYW1wZXJzYW5kcyB3YXMgdG9vIGxvb3NlLiBJbiBzb21lCitjYXNlcyBhbXBlcnNhbmRzIHdlcmUgbm90IGJlaW5nIGVzY2FwZWQuIChTYW0gUnVieT8pCisKK05vbi1icmVha2luZyBzcGFjZXMgYW5kIG90aGVyIHNwZWNpYWwgVW5pY29kZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBubworbG9uZ2VyIGZvbGRlZCB0byBBU0NJSSBzcGFjZXMuIChSb2JlcnQgTGVmdHdpY2gpCisKK0luZm9ybWF0aW9uIGluc2lkZSBhIFRFWFRBUkVBIHRhZyBpcyBub3cgcGFyc2VkIGxpdGVyYWxseSwgbm90IGFzIEhUTUwKK3RhZ3MuIFRFWFRBUkVBIG5vdyB3b3JrcyBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyBTQ1JJUFQuIChaZXBoeXIgRmFuZykKKworPSAzLjAuNCA9CisKK0ZpeGVkIGEgYnVnIHRoYXQgY3Jhc2hlZCBVbmljb2RlIGNvbnZlcnNpb24gaW4gc29tZSBjYXNlcy4KKworRml4ZWQgYSBidWcgdGhhdCBwcmV2ZW50ZWQgVW5pY29kZURhbW1pdCBmcm9tIGJlaW5nIHVzZWQgYXMgYQorZ2VuZXJhbC1wdXJwb3NlIGRhdGEgc2NydWJiZXIuCisKK0ZpeGVkIHNvbWUgdW5pdCB0ZXN0IGZhaWx1cmVzIHdoZW4gcnVubmluZyBhZ2FpbnN0IFB5dGhvbiAyLjUuCisKK1doZW4gY29uc2lkZXJpbmcgd2hldGhlciB0byBjb252ZXJ0IHNtYXJ0IHF1b3RlcywgVW5pY29kZURhbW1pdCBub3cKK2xvb2tzIGF0IHRoZSBvcmlnaW5hbCBlbmNvZGluZyBpbiBhIGNhc2UtaW5zZW5zaXRpdmUgd2F5LgorCis9IDMuMC4zICgyMDA2MDYwNikgPQorCitCZWF1dGlmdWwgU291cCBpcyBub3cgdXNhYmxlIGFzIGEgd2F5IHRvIGNsZWFuIHVwIGludmFsaWQgWE1ML0hUTUwgKGJlCitzdXJlIHRvIHBhc3MgaW4gYW4gYXBwcm9wcmlhdGUgdmFsdWUgZm9yIGNvbnZlcnRFbnRpdGllcywgb3IgWE1ML0hUTUwKK2VudGl0aWVzIG1pZ2h0IHN0aWNrIGFyb3VuZCB0aGF0IGFyZW4ndCB2YWxpZCBpbiBIVE1ML1hNTCkuIFRoZSByZXN1bHQKK21heSBub3QgdmFsaWRhdGUsIGJ1dCBpdCBzaG91bGQgYmUgZ29vZCBlbm91Z2ggdG8gbm90IGNob2tlIGEKK3JlYWwtd29ybGQgWE1MIHBhcnNlci4gU3BlY2lmaWNhbGx5LCB0aGUgb3V0cHV0IG9mIGEgcHJvcGVybHkKK2NvbnN0cnVjdGVkIHNvdXAgb2JqZWN0IHNob3VsZCBhbHdheXMgYmUgdmFsaWQgYXMgcGFydCBvZiBhbiBYTUwKK2RvY3VtZW50LCBidXQgcGFydHMgbWF5IGJlIG1pc3NpbmcgaWYgdGhleSB3ZXJlIG1pc3NpbmcgaW4gdGhlCitvcmlnaW5hbC4gQXMgYWx3YXlzLCBpZiB0aGUgaW5wdXQgaXMgdmFsaWQgWE1MLCB0aGUgb3V0cHV0IHdpbGwgYWxzbworYmUgdmFsaWQuCisKKz0gMy4wLjIgKDIwMDYwNjAyKSA9CisKK1ByZXZpb3VzbHksIEJlYXV0aWZ1bCBTb3VwIGNvcnJlY3RseSBoYW5kbGVkIGF0dHJpYnV0ZSB2YWx1ZXMgdGhhdAorY29udGFpbmVkIGVtYmVkZGVkIHF1b3RlcyAoc29tZXRpbWVzIGJ5IGVzY2FwaW5nKSwgYnV0IG5vdCBvdGhlciBraW5kcworb2YgWE1MIGNoYXJhY3Rlci4gTm93LCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBvciBlc2NhcGVzIGFsbCBzcGVjaWFsIFhNTAorY2hhcmFjdGVycyBpbiBhdHRyaWJ1dGUgdmFsdWVzLgorCitJIGFsaWFzZWQgbWV0aG9kcyB0byB0aGUgMi54IG5hbWVzIChmZXRjaCwgZmluZCwgZmluZFRleHQsIGV0Yy4pIGZvcgorYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHVycG9zZXMuIFRob3NlIG5hbWVzIGFyZSBkZXByZWNhdGVkIGFuZCBpZiBJCitldmVyIGRvIGEgNC4wIEkgd2lsbCByZW1vdmUgdGhlbS4gSSB3aWxsLCBJIHRlbGwgeW91IQorCitGaXhlZCBhIGJ1ZyB3aGVyZSB0aGUgZmluZEFsbCBtZXRob2Qgd2Fzbid0IHBhc3NpbmcgYWxvbmcgYW55IGtleXdvcmQKK2FyZ3VtZW50cy4KKworV2hlbiBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBCZWF1dGlmdWwgU291cCBub3cgYWN0cyBhcyBhbiBIVE1MCitwcmV0dHktcHJpbnRlciwgbm90IGFuIFhNTCBwcmV0dHktcHJpbnRlci4KKworPSAzLjAuMSAoMjAwNjA1MzApID0KKworUmVpbnRyb2R1Y2VkIHRoZSAiZmV0Y2ggYnkgQ1NTIGNsYXNzIiBzaG9ydGN1dC4gSSB0aG91Z2h0IGtleXdvcmQKK2FyZ3VtZW50cyB3b3VsZCByZXBsYWNlIGl0LCBidXQgdGhleSBkb24ndC4gWW91IGNhbid0IGNhbGwgc291cCgnYScsCitjbGFzcz0nZm9vJykgYmVjYXVzZSBjbGFzcyBpcyBhIFB5dGhvbiBrZXl3b3JkLgorCitJZiBCZWF1dGlmdWwgU291cCBlbmNvdW50ZXJzIGEgbWV0YSB0YWcgdGhhdCBkZWNsYXJlcyB0aGUgZW5jb2RpbmcsCitidXQgYSBTb3VwU3RyYWluZXIgdGVsbHMgaXQgbm90IHRvIHBhcnNlIHRoYXQgdGFnLCBCZWF1dGlmdWwgU291cCB3aWxsCitubyBsb25nZXIgdHJ5IHRvIHJld3JpdGUgdGhlIG1ldGEgdGFnIHRvIG1lbnRpb24gdGhlIG5ldworZW5jb2RpbmcuIEJhc2ljYWxseSwgdGhpcyBtYWtlcyBTb3VwU3RyYWluZXJzIHdvcmsgaW4gcmVhbC13b3JsZAorYXBwbGljYXRpb25zIGluc3RlYWQgb2YgY3Jhc2hpbmcgdGhlIHBhcnNlci4KKworPSAzLjAuMCAiV2hvIHdvdWxkIG5vdCBnaXZlIGFsbCBlbHNlIGZvciB0d28gcCIgKDIwMDYwNTI4KSA9CisKK1RoaXMgcmVsZWFzZSBpcyBub3QgYmFja3dhcmQtY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIHJlbGVhc2VzLiBJZgoreW91J3ZlIGdvdCBjb2RlIHdyaXR0ZW4gd2l0aCBhIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGdvCithaGVhZCBhbmQga2VlcCB1c2luZyBpdCwgdW5sZXNzIG9uZSBvZiB0aGUgZmVhdHVyZXMgbWVudGlvbmVkIGhlcmUKK3JlYWxseSBtYWtlcyB5b3VyIGxpZmUgZWFzaWVyLiBTaW5jZSB0aGUgbGlicmFyeSBpcyBzZWxmLWNvbnRhaW5lZCwKK3lvdSBjYW4gaW5jbHVkZSBhbiBvbGQgY29weSBvZiB0aGUgbGlicmFyeSBpbiB5b3VyIG9sZCBhcHBsaWNhdGlvbnMsCithbmQgdXNlIHRoZSBuZXcgdmVyc2lvbiBmb3IgZXZlcnl0aGluZyBlbHNlLgorCitUaGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiByZXdyaXR0ZW4gYW5kIGdyZWF0bHkgZXhwYW5kZWQgd2l0aCBtYW55Cittb3JlIGV4YW1wbGVzLgorCitCZWF1dGlmdWwgU291cCBhdXRvZGV0ZWN0cyB0aGUgZW5jb2Rpbmcgb2YgYSBkb2N1bWVudCAob3IgdXNlcyB0aGUgb25lCit5b3Ugc3BlY2lmeSksIGFuZCBjb252ZXJ0cyBpdCBmcm9tIGl0cyBuYXRpdmUgZW5jb2RpbmcgdG8KK1VuaWNvZGUuIEludGVybmFsbHksIGl0IG9ubHkgZGVhbHMgd2l0aCBVbmljb2RlIHN0cmluZ3MuIFdoZW4geW91CitwcmludCBvdXQgdGhlIGRvY3VtZW50LCBpdCBjb252ZXJ0cyB0byBVVEYtOCAob3IgYW5vdGhlciBlbmNvZGluZyB5b3UKK3NwZWNpZnkpLiBbRG9jIHJlZmVyZW5jZV0KKworSXQncyBub3cgZWFzeSB0byBtYWtlIGxhcmdlLXNjYWxlIGNoYW5nZXMgdG8gdGhlIHBhcnNlIHRyZWUgd2l0aG91dAorc2NyZXdpbmcgdXAgdGhlIG5hdmlnYXRpb24gbWVtYmVycy4gVGhlIG1ldGhvZHMgYXJlIGV4dHJhY3QsCityZXBsYWNlV2l0aCwgYW5kIGluc2VydC4gW0RvYyByZWZlcmVuY2UuIFNlZSBhbHNvIEltcHJvdmluZyBNZW1vcnkKK1VzYWdlIHdpdGggZXh0cmFjdF0KKworUGFzc2luZyBUcnVlIGluIGFzIGFuIGF0dHJpYnV0ZSB2YWx1ZSBnaXZlcyB5b3UgdGFncyB0aGF0IGhhdmUgYW55Cit2YWx1ZSBmb3IgdGhhdCBhdHRyaWJ1dGUuIFlvdSBkb24ndCBoYXZlIHRvIGNyZWF0ZSBhIHJlZ3VsYXIKK2V4cHJlc3Npb24uIFBhc3NpbmcgTm9uZSBmb3IgYW4gYXR0cmlidXRlIHZhbHVlIGdpdmVzIHlvdSB0YWdzIHRoYXQKK2Rvbid0IGhhdmUgdGhhdCBhdHRyaWJ1dGUgYXQgYWxsLgorCitUYWcgb2JqZWN0cyBub3cga25vdyB3aGV0aGVyIG9yIG5vdCB0aGV5J3JlIHNlbGYtY2xvc2luZy4gVGhpcyBhdm9pZHMKK3RoZSBwcm9ibGVtIHdoZXJlIEJlYXV0aWZ1bCBTb3VwIHRob3VnaHQgdGhhdCB0YWdzIGxpa2UgPEJSIC8+IHdlcmUKK3NlbGYtY2xvc2luZyBldmVuIGluIFhNTCBkb2N1bWVudHMuIFlvdSBjYW4gY3VzdG9taXplIHRoZSBzZWxmLWNsb3NpbmcKK3RhZ3MgZm9yIGEgcGFyc2VyIG9iamVjdCBieSBwYXNzaW5nIHRoZW0gaW4gYXMgYSBsaXN0IG9mCitzZWxmQ2xvc2luZ1RhZ3M6IHlvdSBkb24ndCBoYXZlIHRvIHN1YmNsYXNzIGFueW1vcmUuCisKK1RoZXJlJ3MgYSBuZXcgYnVpbHQtaW4gcGFyc2VyLCBNaW5pbWFsU291cCwgd2hpY2ggaGFzIG1vc3Qgb2YKK0JlYXV0aWZ1bFNvdXAncyBIVE1MLXNwZWNpZmljIHJ1bGVzLCBidXQgbm8gdGFnIG5lc3RpbmcgcnVsZXMuIFtEb2MKK3JlZmVyZW5jZV0KKworWW91IGNhbiB1c2UgYSBTb3VwU3RyYWluZXIgdG8gdGVsbCBCZWF1dGlmdWwgU291cCB0byBwYXJzZSBvbmx5IHBhcnQKK29mIGEgZG9jdW1lbnQuIFRoaXMgc2F2ZXMgdGltZSBhbmQgbWVtb3J5LCBvZnRlbiBtYWtpbmcgQmVhdXRpZnVsIFNvdXAKK2Fib3V0IGFzIGZhc3QgYXMgYSBjdXN0b20tYnVpbHQgU0dNTFBhcnNlciBzdWJjbGFzcy4gW0RvYyByZWZlcmVuY2UsCitTb3VwU3RyYWluZXIgcmVmZXJlbmNlXQorCitZb3UgY2FuICh1c3VhbGx5KSB1c2Uga2V5d29yZCBhcmd1bWVudHMgaW5zdGVhZCBvZiBwYXNzaW5nIGEKK2RpY3Rpb25hcnkgb2YgYXR0cmlidXRlcyB0byBhIHNlYXJjaCBtZXRob2QuIFRoYXQgaXMsIHlvdSBjYW4gcmVwbGFjZQorc291cChhcmdzPXsiaWQiIDogIjUifSkgd2l0aCBzb3VwKGlkPSI1IikuIFlvdSBjYW4gc3RpbGwgdXNlIGFyZ3MgaWYKKyhmb3IgaW5zdGFuY2UpIHlvdSBuZWVkIHRvIGZpbmQgYW4gYXR0cmlidXRlIHdob3NlIG5hbWUgY2xhc2hlcyB3aXRoCit0aGUgbmFtZSBvZiBhbiBhcmd1bWVudCB0byBmaW5kQWxsLiBbRG9jIHJlZmVyZW5jZTogKiprd2FyZ3MgYXR0cnNdCisKK1RoZSBtZXRob2QgbmFtZXMgaGF2ZSBjaGFuZ2VkIHRvIHRoZSBiZXR0ZXIgbWV0aG9kIG5hbWVzIHVzZWQgaW4KK1J1YnlmdWwgU291cC4gSW5zdGVhZCBvZiBmaW5kIG1ldGhvZHMgYW5kIGZldGNoIG1ldGhvZHMsIHRoZXJlIGFyZQorb25seSBmaW5kIG1ldGhvZHMuIEluc3RlYWQgb2YgYSBzY2hlbWUgd2hlcmUgeW91IGNhbid0IHJlbWVtYmVyIHdoaWNoCittZXRob2QgZmluZHMgb25lIGVsZW1lbnQgYW5kIHdoaWNoIG9uZSBmaW5kcyB0aGVtIGFsbCwgd2UgaGF2ZSBmaW5kCithbmQgZmluZEFsbC4gSW4gZ2VuZXJhbCwgaWYgdGhlIG1ldGhvZCBuYW1lIG1lbnRpb25zIEFsbCBvciBhIHBsdXJhbAorbm91biAoZWcuIGZpbmROZXh0U2libGluZ3MpLCB0aGVuIGl0IGZpbmRzIG1hbnkgZWxlbWVudHMKK21ldGhvZC4gT3RoZXJ3aXNlLCBpdCBvbmx5IGZpbmRzIG9uZSBlbGVtZW50LiBbRG9jIHJlZmVyZW5jZV0KKworU29tZSBvZiB0aGUgYXJndW1lbnQgbmFtZXMgaGF2ZSBiZWVuIHJlbmFtZWQgZm9yIGNsYXJpdHkuIEZvciBpbnN0YW5jZQorYXZvaWRQYXJzZXJQcm9ibGVtcyBpcyBub3cgcGFyc2VyTWFzc2FnZS4KKworQmVhdXRpZnVsIFNvdXAgbm8gbG9uZ2VyIGltcGxlbWVudHMgYSBmZWVkIG1ldGhvZC4gWW91IG5lZWQgdG8gcGFzcyBhCitzdHJpbmcgb3IgYSBmaWxlaGFuZGxlIGludG8gdGhlIHNvdXAgY29uc3RydWN0b3IsIG5vdCB3aXRoIGZlZWQgYWZ0ZXIKK3RoZSBzb3VwIGhhcyBiZWVuIGNyZWF0ZWQuIFRoZXJlIGlzIHN0aWxsIGEgZmVlZCBtZXRob2QsIGJ1dCBpdCdzIHRoZQorZmVlZCBtZXRob2QgaW1wbGVtZW50ZWQgYnkgU0dNTFBhcnNlciBhbmQgY2FsbGluZyBpdCB3aWxsIGJ5cGFzcworQmVhdXRpZnVsIFNvdXAgYW5kIGNhdXNlIHByb2JsZW1zLgorCitUaGUgTmF2aWdhYmxlVGV4dCBjbGFzcyBoYXMgYmVlbiByZW5hbWVkIHRvIE5hdmlnYWJsZVN0cmluZy4gVGhlcmUgaXMKK25vIE5hdmlnYWJsZVVuaWNvZGVTdHJpbmcgYW55bW9yZSwgYmVjYXVzZSBldmVyeSBzdHJpbmcgaW5zaWRlIGEKK0JlYXV0aWZ1bCBTb3VwIHBhcnNlIHRyZWUgaXMgYSBVbmljb2RlIHN0cmluZy4KKworZmluZFRleHQgYW5kIGZldGNoVGV4dCBhcmUgZ29uZS4gSnVzdCBwYXNzIGEgdGV4dCBhcmd1bWVudCBpbnRvIGZpbmQKK29yIGZpbmRBbGwuCisKK051bGwgd2FzIG1vcmUgdHJvdWJsZSB0aGFuIGl0IHdhcyB3b3J0aCwgc28gSSBnb3QgcmlkIG9mIGl0LiBBbnl0aGluZwordGhhdCB1c2VkIHRvIHJldHVybiBOdWxsIG5vdyByZXR1cm5zIE5vbmUuCisKK1NwZWNpYWwgWE1MIGNvbnN0cnVjdHMgbGlrZSBjb21tZW50cyBhbmQgQ0RBVEEgbm93IGhhdmUgdGhlaXIgb3duCitOYXZpZ2FibGVTdHJpbmcgc3ViY2xhc3NlcywgaW5zdGVhZCBvZiBiZWluZyB0cmVhdGVkIGFzIG9kZGx5LWZvcm1lZAorZGF0YS4gSWYgeW91IHBhcnNlIGEgZG9jdW1lbnQgdGhhdCBjb250YWlucyBDREFUQSBhbmQgd3JpdGUgaXQgYmFjaworb3V0LCB0aGUgQ0RBVEEgd2lsbCBzdGlsbCBiZSB0aGVyZS4KKworV2hlbiB5b3UncmUgcGFyc2luZyBhIGRvY3VtZW50LCB5b3UgY2FuIGdldCBCZWF1dGlmdWwgU291cCB0byBjb252ZXJ0CitYTUwgb3IgSFRNTCBlbnRpdGllcyBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4gW0RvYworcmVmZXJlbmNlXQorCis9IDIuMS4xICgyMDA1MDkxOCkgPQorCitGaXhlZCBhIHNlcmlvdXMgcGVyZm9ybWFuY2UgYnVnIGluIEJlYXV0aWZ1bFN0b25lU291cCB3aGljaCB3YXMKK2NhdXNpbmcgcGFyc2luZyB0byBiZSBpbmNyZWRpYmx5IHNsb3cuCisKK0NvcnJlY3RlZCBzZXZlcmFsIGVudGl0aWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGJlaW5nIGluY29ycmVjdGx5Cit0cmFuc2xhdGVkIGZyb20gTWljcm9zb2Z0IHNtYXJ0LXF1b3RlLWxpa2UgY2hhcmFjdGVycy4KKworRml4ZWQgYSBidWcgdGhhdCB3YXMgYnJlYWtpbmcgdGV4dCBmZXRjaC4KKworRml4ZWQgYSBidWcgdGhhdCBjcmFzaGVkIHRoZSBwYXJzZXIgd2hlbiB0ZXh0IGNodW5rcyB0aGF0IGxvb2sgbGlrZQorSFRNTCB0YWcgbmFtZXMgc2hvd2VkIHVwIHdpdGhpbiBhIFNDUklQVCB0YWcuCisKK1RIRUFELCBUQk9EWSwgYW5kIFRGT09UIHRhZ3MgYXJlIG5vdyBuZXN0YWJsZSB3aXRoaW4gVEFCTEUKK3RhZ3MuIE5lc3RlZCB0YWJsZXMgc2hvdWxkIHBhcnNlIG1vcmUgc2Vuc2libHkgbm93LgorCitCQVNFIGlzIG5vdyBjb25zaWRlcmVkIGEgc2VsZi1jbG9zaW5nIHRhZy4KKworPSAyLjEuMCAiR2FtZSwgb3IgYW55IG90aGVyIGRpc2g/IiAoMjAwNTA1MDQpID0KKworQWRkZWQgYSB3aWRlIHZhcmlldHkgb2YgbmV3IHNlYXJjaCBtZXRob2RzIHdoaWNoLCBnaXZlbiBhIHN0YXJ0aW5nCitwb2ludCBpbnNpZGUgdGhlIHRyZWUsIGZvbGxvdyBhIHBhcnRpY3VsYXIgbmF2aWdhdGlvbiBtZW1iZXIgKGxpa2UKK25leHRTaWJsaW5nKSBvdmVyIGFuZCBvdmVyIGFnYWluLCBsb29raW5nIGZvciBUYWcgYW5kIE5hdmlnYWJsZVRleHQKK29iamVjdHMgdGhhdCBtYXRjaCBjZXJ0YWluIGNyaXRlcmlhLiBUaGUgbmV3IG1ldGhvZHMgYXJlIGZpbmROZXh0LAorZmV0Y2hOZXh0LCBmaW5kUHJldmlvdXMsIGZldGNoUHJldmlvdXMsIGZpbmROZXh0U2libGluZywKK2ZldGNoTmV4dFNpYmxpbmdzLCBmaW5kUHJldmlvdXNTaWJsaW5nLCBmZXRjaFByZXZpb3VzU2libGluZ3MsCitmaW5kUGFyZW50LCBhbmQgZmV0Y2hQYXJlbnRzLiBBbGwgb2YgdGhlc2UgdXNlIHRoZSBzYW1lIGJhc2ljIGNvZGUKK3VzZWQgYnkgZmlyc3QgYW5kIGZldGNoLCBzbyB5b3UgY2FuIHBhc3MgeW91ciB3ZWlyZCB3YXlzIG9mIG1hdGNoaW5nCit0aGluZ3MgaW50byB0aGVzZSBtZXRob2RzLgorCitUaGUgZmV0Y2ggbWV0aG9kIGFuZCBpdHMgZGVyaXZhdGl2ZXMgbm93IGFjY2VwdCBhIGxpbWl0IGFyZ3VtZW50LgorCitZb3UgY2FuIG5vdyBwYXNzIGtleXdvcmQgYXJndW1lbnRzIHdoZW4gY2FsbGluZyBhIFRhZyBvYmplY3QgYXMgdGhvdWdoCitpdCB3ZXJlIGEgbWV0aG9kLgorCitGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBhbGwgaGFuZC1jcmVhdGVkIHRhZ3MgdG8gc2hhcmUgYSBzaW5nbGUgc2V0IG9mCithdHRyaWJ1dGVzLgorCis9IDIuMC4zICgyMDA1MDUwMSkgPQorCitGaXhlZCBQeXRob24gMi4yIHN1cHBvcnQgZm9yIGl0ZXJhdG9ycy4KKworRml4ZWQgYSBidWcgdGhhdCBnYXZlIHRoZSB3cm9uZyByZXByZXNlbnRhdGlvbiB0byB0YWdzIHdpdGhpbiBxdW90ZQordGFncyBsaWtlIDxzY3JpcHQ+LgorCitUb29rIHNvbWUgY29kZSBmcm9tIE1hcmsgUGlsZ3JpbSB0aGF0IHRyZWF0cyBDREFUQSBkZWNsYXJhdGlvbnMgYXMKK2RhdGEgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtLgorCitCZWF1dGlmdWwgU291cCdzIHNldHVwLnB5IHdpbGwgbm93IGRvIGFuIGluc3RhbGwgZXZlbiBpZiB0aGUgdW5pdAordGVzdHMgZmFpbC4gSXQgd29uJ3QgYnVpbGQgYSBzb3VyY2UgZGlzdHJpYnV0aW9uIGlmIHRoZSB1bml0IHRlc3RzCitmYWlsLCBzbyBJIGNhbid0IHJlbGVhc2UgYSBuZXcgdmVyc2lvbiB1bmxlc3MgdGhleSBwYXNzLgorCis9IDIuMC4yICgyMDA1MDQxNikgPQorCitBZGRlZCB0aGUgdW5pdCB0ZXN0cyBpbiBhIHNlcGFyYXRlIG1vZHVsZSwgYW5kIHBhY2thZ2VkIGl0IHdpdGgKK2Rpc3R1dGlscy4KKworRml4ZWQgYSBidWcgdGhhdCBzb21ldGltZXMgY2F1c2VkIHJlbmRlckNvbnRlbnRzKCkgdG8gcmV0dXJuIGEgVW5pY29kZQorc3RyaW5nIGV2ZW4gaWYgdGhlcmUgd2FzIG5vIFVuaWNvZGUgaW4gdGhlIG9yaWdpbmFsIHN0cmluZy4KKworQWRkZWQgdGhlIGRvbmUoKSBtZXRob2QsIHdoaWNoIGNsb3NlcyBhbGwgb2YgdGhlIHBhcnNlcidzIG9wZW4KK3RhZ3MuIEl0IGdldHMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgcGFzcyBpbiBzb21lIHRleHQgdG8gdGhlCitjb25zdHJ1Y3RvciBvZiBhIHBhcnNlciBjbGFzczsgb3RoZXJ3aXNlIHlvdSBtdXN0IGNhbGwgaXQgeW91cnNlbGYuCisKK1JlaW5zdGF0ZWQgc29tZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDEueCB2ZXJzaW9uczogcmVmZXJlbmNpbmcKK3RoZSBzdHJpbmcgbWVtYmVyIG9mIGEgTmF2aWdhYmxlVGV4dCBvYmplY3QgcmV0dXJucyB0aGUgTmF2aWdhYmxlVGV4dAorb2JqZWN0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuCisKKz0gMi4wLjEgKDIwMDUwNDEyKSA9CisKK0ZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIGJhZCByZXN1bHRzIHdoZW4geW91IHRyaWVkIHRvIHJlZmVyZW5jZSBhIHRhZworbmFtZSBzaG9ydGVyIHRoYW4gMyBjaGFyYWN0ZXJzIGFzIGEgbWVtYmVyIG9mIGEgVGFnLCBlZy4gdGFnLnRhYmxlLnRkLgorCitNYWRlIHN1cmUgYWxsIFRhZ3MgaGF2ZSB0aGUgJ2hpZGRlbicgYXR0cmlidXRlIHNvIHRoYXQgYW4gYXR0ZW1wdCB0bworYWNjZXNzIHRhZy5oaWRkZW4gZG9lc24ndCBzcGF3biBhbiBhdHRlbXB0IHRvIGZpbmQgYSB0YWcgbmFtZWQKKydoaWRkZW4nLgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvci4KKworPSAyLjAuMCAiV2hvIGNhcmVzIGZvciBmaXNoPyIgKDIwMDUwNDEwKQorCitCZWF1dGlmdWwgU291cCB2ZXJzaW9uIDEgd2FzIHZlcnkgdXNlZnVsIGJ1dCBhbHNvIHByZXR0eSBzdHVwaWQuIEkKK29yaWdpbmFsbHkgd3JvdGUgaXQgd2l0aG91dCBub3RpY2luZyBhbnkgb2YgdGhlIHByb2JsZW1zIGluaGVyZW50IGluCit0cnlpbmcgdG8gYnVpbGQgYSBwYXJzZSB0cmVlIG91dCBvZiBhbWJpZ3VvdXMgSFRNTCB0YWdzLiBUaGlzIHZlcnNpb24KK3NvbHZlcyBhbGwgb2YgdGhvc2UgcHJvYmxlbXMgdG8gbXkgc2F0aXNmYWN0aW9uLiBJdCBhbHNvIGFkZHMgbWFueSBuZXcKK2NsZXZlciB0aGluZ3MgdG8gbWFrZSB1cCBmb3IgdGhlIHJlbW92YWwgb2YgdGhlIHN0dXBpZCB0aGluZ3MuCisKKz09IFBhcnNpbmcgPT0KKworVGhlIHBhcnNlciBsb2dpYyBoYXMgYmVlbiBncmVhdGx5IGltcHJvdmVkLCBhbmQgdGhlIEJlYXV0aWZ1bFNvdXAKK2NsYXNzIHNob3VsZCBtdWNoIG1vcmUgcmVsaWFibHkgeWllbGQgYSBwYXJzZSB0cmVlIHRoYXQgbG9va3MgbGlrZQord2hhdCB0aGUgcGFnZSBhdXRob3IgaW50ZW5kZWQuIEZvciBhIHBhcnRpY3VsYXIgY2xhc3Mgb2Ygb2RkIGVkZ2UKK2Nhc2VzIHRoYXQgbm93IGNhdXNlcyBwcm9ibGVtcywgdGhlcmUgaXMgYSBuZXcgY2xhc3MsCitJQ2FudEJlbGlldmVJdHNCZWF1dGlmdWxTb3VwLgorCitCeSBkZWZhdWx0LCBCZWF1dGlmdWwgU291cCBub3cgcGVyZm9ybXMgc29tZSBjbGVhbnVwIG9wZXJhdGlvbnMgb24KK3RleHQgYmVmb3JlIHBhcnNpbmcgaXQuIFRoaXMgaXMgdG8gYXZvaWQgY29tbW9uIHByb2JsZW1zIHdpdGggYmFkCitkZWZpbml0aW9ucyBhbmQgc2VsZi1jbG9zaW5nIHRhZ3MgdGhhdCBjcmFzaCBTR01MUGFyc2VyLiBZb3UgY2FuCitwcm92aWRlIHlvdXIgb3duIHNldCBvZiBjbGVhbnVwIG9wZXJhdGlvbnMsIG9yIHR1cm4gaXQgb2ZmCithbHRvZ2V0aGVyLiBUaGUgY2xlYW51cCBvcGVyYXRpb25zIGluY2x1ZGUgZml4aW5nIHNlbGYtY2xvc2luZyB0YWdzCit0aGF0IGRvbid0IGNsb3NlLCBhbmQgcmVwbGFjaW5nIE1pY3Jvc29mdCBzbWFydCBxdW90ZXMgYW5kIHNpbWlsYXIKK2NoYXJhY3RlcnMgd2l0aCB0aGVpciBIVE1MIGVudGl0eSBlcXVpdmFsZW50cy4KKworWW91IGNhbiBub3cgZ2V0IGEgcHJldHR5LXByaW50IHZlcnNpb24gb2YgcGFyc2VkIEhUTUwgdG8gZ2V0IGEgdmlzdWFsCitwaWN0dXJlIG9mIGhvdyBCZWF1dGlmdWwgU291cCBwYXJzZXMgaXQsIHdpdGggdGhlIFRhZy5wcmV0dGlmeSgpCittZXRob2QuCisKKz09IFN0cmluZ3MgYW5kIFVuaWNvZGUgPT0KKworVGhlcmUgYXJlIHNlcGFyYXRlIE5hdmlnYWJsZVRleHQgc3ViY2xhc3NlcyBmb3IgQVNDSUkgYW5kIFVuaWNvZGUKK3N0cmluZ3MuIFRoZXNlIGNsYXNzZXMgZGlyZWN0bHkgc3ViY2xhc3MgdGhlIGNvcnJlc3BvbmRpbmcgYmFzZSBkYXRhCit0eXBlcy4gVGhpcyBtZWFucyB5b3UgY2FuIHRyZWF0IE5hdmlnYWJsZVRleHQgb2JqZWN0cyBhcyBzdHJpbmdzCitpbnN0ZWFkIG9mIGhhdmluZyB0byBjYWxsIG1ldGhvZHMgb24gdGhlbSB0byBnZXQgdGhlIHN0cmluZ3MuCisKK3N0cigpIG9uIGEgVGFnIGFsd2F5cyByZXR1cm5zIGEgc3RyaW5nLCBhbmQgdW5pY29kZSgpIGFsd2F5cyByZXR1cm5zCitVbmljb2RlLiBQcmV2aW91c2x5IGl0IHdhcyBpbmNvbnNpc3RlbnQuCisKKz09IFRyZWUgdHJhdmVyc2FsID09CisKK0luIGEgZmlyc3QoKSBvciBmZXRjaCgpIGNhbGwsIHRoZSB0YWcgbmFtZSBvciB0aGUgZGVzaXJlZCB2YWx1ZSBvZiBhbgorYXR0cmlidXRlIGNhbiBub3cgYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAqIEEgc3RyaW5nIChtYXRjaGVzIHRoYXQgc3BlY2lmaWMgdGFnIG9yIHRoYXQgc3BlY2lmaWMgYXR0cmlidXRlIHZhbHVlKQorICogQSBsaXN0IG9mIHN0cmluZ3MgKG1hdGNoZXMgYW55IHRhZyBvciBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIGxpc3QpCisgKiBBIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgKG1hdGNoZXMgYW55IHRhZyBvciBhdHRyaWJ1dGUKKyAgIHZhbHVlIHRoYXQgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uKQorICogQSBjYWxsYWJsZSBvYmplY3QgdGhhdCB0YWtlcyB0aGUgVGFnIG9iamVjdCBvciBhdHRyaWJ1dGUgdmFsdWUgYXMgYQorICAgc3RyaW5nLiBJdCByZXR1cm5zIE5vbmUvZmFsc2UvZW1wdHkgc3RyaW5nIGlmIHRoZSBnaXZlbiBzdHJpbmcKKyAgIGRvZXNuJ3QgbWF0Y2gsIGFuZCBhbnkgb3RoZXIgdmFsdWUgaWYgaXQgZG9lcy4KKworVGhpcyBpcyBtdWNoIGVhc2llciB0byB1c2UgdGhhbiBTUUwtc3R5bGUgd2lsZGNhcmRzIChzZWUsIHJlZ3VsYXIKK2V4cHJlc3Npb25zIGFyZSBnb29kIGZvciBzb21ldGhpbmcpLiBCZWNhdXNlIG9mIHRoaXMsIEkgdG9vayBvdXQKK1NRTC1zdHlsZSB3aWxkY2FyZHMuIEknbGwgcHV0IHRoZW0gYmFjayBpZiBzb21lb25lIGNvbXBsYWlucywgYnV0Cit0aGVpciByZW1vdmFsIHNpbXBsaWZpZXMgdGhlIGNvZGUgYSBsb3QuCisKK1lvdSBjYW4gdXNlIGZldGNoKCkgYW5kIGZpcnN0KCkgdG8gc2VhcmNoIGZvciB0ZXh0IGluIHRoZSBwYXJzZSB0cmVlLAorbm90IGp1c3QgdGFncy4gVGhlcmUgYXJlIG5ldyBhbGlhcyBtZXRob2RzIGZldGNoVGV4dCgpIGFuZCBmaXJzdFRleHQoKQorZGVzaWduZWQgZm9yIHRoaXMgcHVycG9zZS4gQXMgd2l0aCBzZWFyY2hpbmcgZm9yIHRhZ3MsIHlvdSBjYW4gcGFzcyBpbgorYSBzdHJpbmcsIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCwgb3IgYSBtZXRob2QgdG8gbWF0Y2ggeW91ciB0ZXh0LgorCitJZiB5b3UgcGFzcyBpbiBzb21ldGhpbmcgYmVzaWRlcyBhIG1hcCB0byB0aGUgYXR0cnMgYXJndW1lbnQgb2YKK2ZldGNoKCkgb3IgZmlyc3QoKSwgQmVhdXRpZnVsIFNvdXAgd2lsbCBhc3N1bWUgeW91IHdhbnQgdG8gbWF0Y2ggdGhhdAordGhpbmcgYWdhaW5zdCB0aGUgImNsYXNzIiBhdHRyaWJ1dGUuIFdoZW4geW91J3JlIHNjcmFwaW5nCit3ZWxsLXN0cnVjdHVyZWQgSFRNTCwgdGhpcyBtYWtlcyB5b3VyIGNvZGUgYSBsb3QgY2xlYW5lci4KKworMS54IGFuZCAyLnggYm90aCBsZXQgeW91IGNhbGwgYSBUYWcgb2JqZWN0IGFzIGEgc2hvcnRoYW5kIGZvcgorZmV0Y2goKS4gRm9yIGluc3RhbmNlLCBmb28oImJhciIpIGlzIGEgc2hvcnRoYW5kIGZvcgorZm9vLmZldGNoKCJiYXIiKS4gSW4gMi54LCB5b3UgY2FuIGFsc28gYWNjZXNzIGEgc3BlY2lhbGx5LW5hbWVkIG1lbWJlcgorb2YgYSBUYWcgb2JqZWN0IGFzIGEgc2hvcnRoYW5kIGZvciBmaXJzdCgpLiBGb3IgaW5zdGFuY2UsIGZvby5iYXJUYWcKK2lzIGEgc2hvcnRoYW5kIGZvciBmb28uZmlyc3QoImJhciIpLiBCeSBjaGFpbmluZyB0aGVzZSBzaG9ydGN1dHMgeW91Cit0cmF2ZXJzZSBhIHRyZWUgaW4gdmVyeSBsaXR0bGUgY29kZTogZm9yIGhlYWRlciBpbgorc291cC5ib2R5VGFnLnBUYWcudGFibGVUYWcoJ3RoJyk6CisKK0lmIGFuIGVsZW1lbnQgcmVsYXRpb25zaGlwIChsaWtlIHBhcmVudCBvciBuZXh0KSBkb2Vzbid0IGFwcGx5IHRvIGEKK3RhZywgaXQnbGwgbm93IHNob3cgdXAgTnVsbCBpbnN0ZWFkIG9mIE5vbmUuIGZpcnN0KCkgd2lsbCBhbHNvIHJldHVybgorTnVsbCBpZiB5b3UgYXNrIGl0IGZvciBhIG5vbmV4aXN0ZW50IHRhZy4gTnVsbCBpcyBhbiBvYmplY3QgdGhhdCdzCitqdXN0IGxpa2UgTm9uZSwgZXhjZXB0IHlvdSBjYW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQgdG8gaXQgYW5kIGl0J2xsCitnaXZlIHlvdSBOdWxsIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuCisKK1RoaXMgbGV0cyB5b3UgZG8gdHJlZSB0cmF2ZXJzYWxzIGxpa2Ugc291cC5odG1sVGFnLmhlYWRUYWcudGl0bGVUYWcKK3dpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGlmIHRoZSBpbnRlcm1lZGlhdGUgc3RhZ2VzIGFyZSBhY3R1YWxseQordGhlcmUuIFByZXZpb3VzbHksIGlmIHRoZXJlIHdhcyBubyAnaGVhZCcgdGFnIGluIHRoZSBkb2N1bWVudCwgaGVhZFRhZworaW4gdGhhdCBpbnN0YW5jZSB3b3VsZCBoYXZlIGJlZW4gTm9uZSwgYW5kIGFjY2Vzc2luZyBpdHMgJ3RpdGxlVGFnJworbWVtYmVyIHdvdWxkIGhhdmUgdGhyb3duIGFuIEF0dHJpYnV0ZUVycm9yLiBOb3csIHlvdSBjYW4gZ2V0IHdoYXQgeW91Cit3YW50IHdoZW4gaXQgZXhpc3RzLCBhbmQgZ2V0IE51bGwgd2hlbiBpdCBkb2Vzbid0LCB3aXRob3V0IGhhdmluZyB0bworZG8gYSBsb3Qgb2YgY29uZGl0aW9uYWxzIGNoZWNraW5nIHRvIHNlZSBpZiBldmVyeSBzdGFnZSBpcyBOb25lLgorCitUaGVyZSBhcmUgdHdvIG5ldyByZWxhdGlvbnMgYmV0d2VlbiBwYWdlIGVsZW1lbnRzOiBwcmV2aW91c1NpYmxpbmcgYW5kCituZXh0U2libGluZy4gVGhleSByZWZlcmVuY2UgdGhlIHByZXZpb3VzIGFuZCBuZXh0IGVsZW1lbnQgYXQgdGhlIHNhbWUKK2xldmVsIG9mIHRoZSBwYXJzZSB0cmVlLiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBoYXZlIEhUTUwgbGlrZSB0aGlzOgorCisgIDxwPjx1bD48bGk+Rm9vPGJyIC8+PGxpPkJhcjwvdWw+CisKK1RoZSBmaXJzdCAnbGknIHRhZyBoYXMgYSBwcmV2aW91c1NpYmxpbmcgb2YgTnVsbCBhbmQgaXRzIG5leHRTaWJsaW5nCitpcyB0aGUgc2Vjb25kICdsaScgdGFnLiBUaGUgc2Vjb25kICdsaScgdGFnIGhhcyBhIG5leHRTaWJsaW5nIG9mIE51bGwKK2FuZCBpdHMgcHJldmlvdXNTaWJsaW5nIGlzIHRoZSBmaXJzdCAnbGknIHRhZy4gVGhlIHByZXZpb3VzU2libGluZyBvZgordGhlICd1bCcgdGFnIGlzIHRoZSBmaXJzdCAncCcgdGFnLiBUaGUgbmV4dFNpYmxpbmcgb2YgJ0ZvbycgaXMgdGhlCisnYnInIHRhZy4KKworSSB0b29rIG91dCB0aGUgYWJpbGl0eSB0byB1c2UgZmV0Y2goKSB0byBmaW5kIHRhZ3MgdGhhdCBoYXZlIGEKK3NwZWNpZmljIGxpc3Qgb2YgY29udGVudHMuIFNlZSwgSSBjYW4ndCBldmVuIGV4cGxhaW4gaXQgd2VsbC4gSXQgd2FzCityZWFsbHkgZGlmZmljdWx0IHRvIHVzZSwgSSBuZXZlciB1c2VkIGl0LCBhbmQgSSBkb24ndCB0aGluayBhbnlvbmUKK2Vsc2UgZXZlciB1c2VkIGl0LiBUbyB0aGUgZXh0ZW50IGFueW9uZSBkaWQsIHRoZXkgY2FuIHByb2JhYmx5IHVzZQorZmV0Y2hUZXh0KCkgaW5zdGVhZC4gSWYgaXQgdHVybnMgb3V0IHNvbWVvbmUgbmVlZHMgaXQgSSdsbCB0aGluayBvZgorYW5vdGhlciBzb2x1dGlvbi4KKworPT0gVHJlZSBtYW5pcHVsYXRpb24gPT0KKworWW91IGNhbiBhZGQgbmV3IGF0dHJpYnV0ZXMgdG8gYSB0YWcsIGFuZCBkZWxldGUgYXR0cmlidXRlcyBmcm9tIGEKK3RhZy4gSW4gMS54IHlvdSBjb3VsZCBvbmx5IGNoYW5nZSBhIHRhZydzIGV4aXN0aW5nIGF0dHJpYnV0ZXMuCisKKz09IFBvcnRpbmcgQ29uc2lkZXJhdGlvbnMgPT0KKworVGhlcmUgYXJlIHRocmVlIGNoYW5nZXMgaW4gMi4wIHRoYXQgYnJlYWsgb2xkIGNvZGU6CisKK0luIHRoZSBwb3N0LTEuMiByZWxlYXNlIHlvdSBjb3VsZCBwYXNzIGluIGEgZnVuY3Rpb24gaW50byBmZXRjaCgpLiBUaGUKK2Z1bmN0aW9uIHRvb2sgYSBzdHJpbmcsIHRoZSB0YWcgbmFtZS4gSW4gMi4wLCB0aGUgZnVuY3Rpb24gdGFrZXMgdGhlCithY3R1YWwgVGFnIG9iamVjdC4KKworSXQncyBubyBsb25nZXIgdG8gcGFzcyBpbiBTUUwtc3R5bGUgd2lsZGNhcmRzIHRvIGZldGNoKCkuIFVzZSBhCityZWd1bGFyIGV4cHJlc3Npb24gaW5zdGVhZC4KKworVGhlIGRpZmZlcmVudCBwYXJzaW5nIGFsZ29yaXRobSBtZWFucyB0aGUgcGFyc2UgdHJlZSBtYXkgbm90IGJlIHNoYXBlZAorbGlrZSB5b3UgZXhwZWN0LiBUaGlzIHdpbGwgb25seSBhY3R1YWxseSBhZmZlY3QgeW91IGlmIHlvdXIgY29kZSB1c2VzCitvbmUgb2YgdGhlIGFmZmVjdGVkIHBhcnRzLiBJIGhhdmVuJ3QgcnVuIGludG8gdGhpcyBwcm9ibGVtIHlldCB3aGlsZQorcG9ydGluZyBteSBjb2RlLgorCis9IEJldHdlZW4gMS4yIGFuZCAyLjAgPQorCitUaGlzIGlzIHRoZSByZWxlYXNlIHRvIGdldCBpZiB5b3Ugd2FudCBQeXRob24gMS41IGNvbXBhdGliaWxpdHkuCisKK1RoZSBkZXNpcmVkIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBjYW4gbm93IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisgKiBBIHN0cmluZworICogQSBzdHJpbmcgd2l0aCBTUUwtc3R5bGUgd2lsZGNhcmRzCisgKiBBIGNvbXBpbGVkIFJFIG9iamVjdAorICogQSBjYWxsYWJsZSB0aGF0IHJldHVybnMgTm9uZS9mYWxzZS9lbXB0eSBzdHJpbmcgaWYgdGhlIGdpdmVuIHZhbHVlCisgICBkb2Vzbid0IG1hdGNoLCBhbmQgYW55IG90aGVyIHZhbHVlIG90aGVyd2lzZS4KKworVGhpcyBpcyBtdWNoIGVhc2llciB0byB1c2UgdGhhbiBTUUwtc3R5bGUgd2lsZGNhcmRzIChzZWUsIHJlZ3VsYXIKK2V4cHJlc3Npb25zIGFyZSBnb29kIGZvciBzb21ldGhpbmcpLiBCZWNhdXNlIG9mIHRoaXMsIEkgbm8gbG9uZ2VyCityZWNvbW1lbmQgeW91IHVzZSBTUUwtc3R5bGUgd2lsZGNhcmRzLiBUaGV5IG1heSBnbyBhd2F5IGluIGEgZnV0dXJlCityZWxlYXNlIHRvIGNsZWFuIHVwIHRoZSBjb2RlLgorCitNYWRlIEJlYXV0aWZ1bCBTb3VwIGhhbmRsZSBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyBhcyB0ZXh0IGluc3RlYWQgb2YKK2lnbm9yaW5nIHRoZW0uCisKK0FwcGxpZWQgcGF0Y2ggZnJvbSBSaWNoaWUgSGluZGxlIChyaWNoaWUgYXQgZW50cmlhbiBkb3QgY29tKSB0aGF0CittYWtlcyB0YWcuc3RyaW5nIGEgc2hvcnRoYW5kIGZvciB0YWcuY29udGVudHNbMF0uc3RyaW5nIHdoZW4gdGhlIHRhZworaGFzIG9ubHkgb25lIHN0cmluZy1vd25pbmcgY2hpbGQuCisKK0FkZGVkIHN0aWxsIG1vcmUgbmVzdGFibGUgdGFncy4gVGhlIG5lc3RhYmxlIHRhZ3MgdGhpbmcgd29uJ3Qgd29yayBpbgorYSBsb3Qgb2YgY2FzZXMgYW5kIG5lZWRzIHRvIGJlIHJldGhvdWdodC4KKworRml4ZWQgYW4gZWRnZSBjYXNlIHdoZXJlIHNlYXJjaGluZyBmb3IgIiVmb28iIHdvdWxkIG1hdGNoIGFueSBzdHJpbmcKK3Nob3J0ZXIgdGhhbiAiZm9vIi4KKworPSAxLjIgIldobyBmb3Igc3VjaCBkYWludGllcyB3b3VsZCBub3Qgc3Rvb3A/IiAoMjAwNDA3MDgpID0KKworQXBwbGllZCBwYXRjaCBmcm9tIEJlbiBMYXN0IChiZW4gYXQgYmVubGFzdCBkb3QgY29tKSB0aGF0IG1hZGUKK1RhZy5yZW5kZXJDb250ZW50cygpIGNvcnJlY3RseSBoYW5kbGUgVW5pY29kZS4KKworTWFkZSBCZWF1dGlmdWxTdG9uZVNvdXAgZXZlbiBkdW1iZXIgYnkgbWFraW5nIGl0IG5vdCBpbXBsaWNpdGx5IGNsb3NlCithIHRhZyB3aGVuIGFub3RoZXIgdGFnIG9mIHRoZSBzYW1lIHR5cGUgaXMgZW5jb3VudGVyZWQ7IG9ubHkgd2hlbiBhbgorYWN0dWFsIGNsb3NpbmcgdGFnIGlzIGVuY291bnRlcmVkLiBUaGlzIGNoYW5nZSBjb3VydGVzeSBvZiBGdXp6eSAobWlrZQorYXQgcGNibG9rZXMgZG90IGNvbSkuIEJlYXV0aWZ1bFNvdXAgc3RpbGwgd29ya3MgYXMgYmVmb3JlLgorCis9IDEuMSAiU3dpbW1pbmcgaW4gYSBob3QgdHVyZWVuIiA9CisKK0FkZGVkIG1vcmUgJ25lc3RhYmxlJyB0YWdzLiBDaGFuZ2VkIHBvcHBpbmcgc2VtYW50aWNzIHNvIHRoYXQgd2hlbiBhCituZXN0YWJsZSB0YWcgaXMgZW5jb3VudGVyZWQsIHRhZ3MgYXJlIHBvcHBlZCB1cCB0byB0aGUgcHJldmlvdXNseQorZW5jb3VudGVyZWQgbmVzdGFibGUgdGFnIChvZiB3aGF0ZXZlciBraW5kKS4gSSB3aWxsIHJldmVydCB0aGlzIGlmCitlbm91Z2ggcGVvcGxlIGNvbXBsYWluLCBidXQgaXQgc2hvdWxkIG1ha2UgbW9yZSBwZW9wbGUncyBsaXZlcyBlYXNpZXIKK3RoYW4gaGFyZGVyLiBUaGlzIGVuaGFuY2VtZW50IHdhcyBzdWdnZXN0ZWQgYnkgQW50aG9ueSBCYXh0ZXIgKGFudGhvbnkKK2F0IGludGVybGluayBkb3QgY29tIGRvdCBhdSkuCisKKz0gMS4wICJTbyByaWNoIGFuZCBncmVlbiIgKDIwMDQwNDIwKSA9CisKK0luaXRpYWwgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhMzQyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNDA2IEBACisiIiJCZWF1dGlmdWwgU291cAorRWxpeGlyIGFuZCBUb25pYworIlRoZSBTY3JlZW4tU2NyYXBlcidzIEZyaWVuZCIKK2h0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9CZWF1dGlmdWxTb3VwLworCitCZWF1dGlmdWwgU291cCB1c2VzIGEgcGx1Z2dhYmxlIFhNTCBvciBIVE1MIHBhcnNlciB0byBwYXJzZSBhCisocG9zc2libHkgaW52YWxpZCkgZG9jdW1lbnQgaW50byBhIHRyZWUgcmVwcmVzZW50YXRpb24uIEJlYXV0aWZ1bCBTb3VwCitwcm92aWRlcyBwcm92aWRlcyBtZXRob2RzIGFuZCBQeXRob25pYyBpZGlvbXMgdGhhdCBtYWtlIGl0IGVhc3kgdG8KK25hdmlnYXRlLCBzZWFyY2gsIGFuZCBtb2RpZnkgdGhlIHBhcnNlIHRyZWUuCisKK0JlYXV0aWZ1bCBTb3VwIHdvcmtzIHdpdGggUHl0aG9uIDIuNiBhbmQgdXAuIEl0IHdvcmtzIGJldHRlciBpZiBseG1sCithbmQvb3IgaHRtbDVsaWIgaXMgaW5zdGFsbGVkLgorCitGb3IgbW9yZSB0aGFuIHlvdSBldmVyIHdhbnRlZCB0byBrbm93IGFib3V0IEJlYXV0aWZ1bCBTb3VwLCBzZWUgdGhlCitkb2N1bWVudGF0aW9uOgoraHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvYnM0L2RvYy8KKyIiIgorCitfX2F1dGhvcl9fID0gIkxlb25hcmQgUmljaGFyZHNvbiAobGVvbmFyZHJAc2VnZmF1bHQub3JnKSIKK19fdmVyc2lvbl9fID0gIjQuMy4yIgorX19jb3B5cmlnaHRfXyA9ICJDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMyBMZW9uYXJkIFJpY2hhcmRzb24iCitfX2xpY2Vuc2VfXyA9ICJNSVQiCisKK19fYWxsX18gPSBbJ0JlYXV0aWZ1bFNvdXAnXQorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCisKK2Zyb20gLmJ1aWxkZXIgaW1wb3J0IGJ1aWxkZXJfcmVnaXN0cnksIFBhcnNlclJlamVjdGVkTWFya3VwCitmcm9tIC5kYW1taXQgaW1wb3J0IFVuaWNvZGVEYW1taXQKK2Zyb20gLmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDRGF0YSwKKyAgICBDb21tZW50LAorICAgIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgIERlY2xhcmF0aW9uLAorICAgIERvY3R5cGUsCisgICAgTmF2aWdhYmxlU3RyaW5nLAorICAgIFBhZ2VFbGVtZW50LAorICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwKKyAgICBSZXN1bHRTZXQsCisgICAgU291cFN0cmFpbmVyLAorICAgIFRhZywKKyAgICApCisKKyMgVGhlIHZlcnkgZmlyc3QgdGhpbmcgd2UgZG8gaXMgZ2l2ZSBhIHVzZWZ1bCBlcnJvciBpZiBzb21lb25lIGlzCisjIHJ1bm5pbmcgdGhpcyBjb2RlIHVuZGVyIFB5dGhvbiAzIHdpdGhvdXQgY29udmVydGluZyBpdC4KK3N5bnRheF9lcnJvciA9IHUnWW91IGFyZSB0cnlpbmcgdG8gcnVuIHRoZSBQeXRob24gMiB2ZXJzaW9uIG9mIEJlYXV0aWZ1bCBTb3VwIHVuZGVyIFB5dGhvbiAzLiBUaGlzIHdpbGwgbm90IHdvcmsuIFlvdSBuZWVkIHRvIGNvbnZlcnQgdGhlIGNvZGUsIGVpdGhlciBieSBpbnN0YWxsaW5nIGl0IChgcHl0aG9uIHNldHVwLnB5IGluc3RhbGxgKSBvciBieSBydW5uaW5nIDJ0bzMgKGAydG8zIC13IGJzNGApLicKKworY2xhc3MgQmVhdXRpZnVsU291cChUYWcpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgYmFzaWMgaW50ZXJmYWNlIGNhbGxlZCBieSB0aGUgdHJlZSBidWlsZGVycy4KKworICAgIFRoZXNlIG1ldGhvZHMgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHBhcnNlcjoKKyAgICAgIHJlc2V0KCkKKyAgICAgIGZlZWQobWFya3VwKQorCisgICAgVGhlIHRyZWUgYnVpbGRlciBtYXkgY2FsbCB0aGVzZSBtZXRob2RzIGZyb20gaXRzIGZlZWQoKSBpbXBsZW1lbnRhdGlvbjoKKyAgICAgIGhhbmRsZV9zdGFydHRhZyhuYW1lLCBhdHRycykgIyBTZWUgbm90ZSBhYm91dCByZXR1cm4gdmFsdWUKKyAgICAgIGhhbmRsZV9lbmR0YWcobmFtZSkKKyAgICAgIGhhbmRsZV9kYXRhKGRhdGEpICMgQXBwZW5kcyB0byB0aGUgY3VycmVudCBkYXRhIG5vZGUKKyAgICAgIGVuZERhdGEoY29udGFpbmVyQ2xhc3M9TmF2aWdhYmxlU3RyaW5nKSAjIEVuZHMgdGhlIGN1cnJlbnQgZGF0YSBub2RlCisKKyAgICBObyBtYXR0ZXIgaG93IGNvbXBsaWNhdGVkIHRoZSB1bmRlcmx5aW5nIHBhcnNlciBpcywgeW91IHNob3VsZCBiZQorICAgIGFibGUgdG8gYnVpbGQgYSB0cmVlIHVzaW5nICdzdGFydCB0YWcnIGV2ZW50cywgJ2VuZCB0YWcnIGV2ZW50cywKKyAgICAnZGF0YScgZXZlbnRzLCBhbmQgImRvbmUgd2l0aCBkYXRhIiBldmVudHMuCisKKyAgICBJZiB5b3UgZW5jb3VudGVyIGFuIGVtcHR5LWVsZW1lbnQgdGFnIChha2EgYSBzZWxmLWNsb3NpbmcgdGFnLAorICAgIGxpa2UgSFRNTCdzIDxicj4gdGFnKSwgY2FsbCBoYW5kbGVfc3RhcnR0YWcgYW5kIHRoZW4KKyAgICBoYW5kbGVfZW5kdGFnLgorICAgICIiIgorICAgIFJPT1RfVEFHX05BTUUgPSB1J1tkb2N1bWVudF0nCisKKyAgICAjIElmIHRoZSBlbmQtdXNlciBnaXZlcyBubyBpbmRpY2F0aW9uIHdoaWNoIHRyZWUgYnVpbGRlciB0aGV5CisgICAgIyB3YW50LCBsb29rIGZvciBvbmUgd2l0aCB0aGVzZSBmZWF0dXJlcy4KKyAgICBERUZBVUxUX0JVSUxERVJfRkVBVFVSRVMgPSBbJ2h0bWwnLCAnZmFzdCddCisKKyAgICBBU0NJSV9TUEFDRVMgPSAnXHgyMFx4MGFceDA5XHgwY1x4MGQnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwPSIiLCBmZWF0dXJlcz1Ob25lLCBidWlsZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIHBhcnNlX29ubHk9Tm9uZSwgZnJvbV9lbmNvZGluZz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlRoZSBTb3VwIG9iamVjdCBpcyBpbml0aWFsaXplZCBhcyB0aGUgJ3Jvb3QgdGFnJywgYW5kIHRoZQorICAgICAgICBwcm92aWRlZCBtYXJrdXAgKHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIGZpbGUtbGlrZSBvYmplY3QpCisgICAgICAgIGlzIGZlZCBpbnRvIHRoZSB1bmRlcmx5aW5nIHBhcnNlci4iIiIKKworICAgICAgICBpZiAnY29udmVydEVudGl0aWVzJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJCUzQgZG9lcyBub3QgcmVzcGVjdCB0aGUgY29udmVydEVudGl0aWVzIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIEVudGl0aWVzIGFyZSBhbHdheXMgY29udmVydGVkICIKKyAgICAgICAgICAgICAgICAidG8gVW5pY29kZSBjaGFyYWN0ZXJzLiIpCisKKyAgICAgICAgaWYgJ21hcmt1cE1hc3NhZ2UnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ21hcmt1cE1hc3NhZ2UnXQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiQlM0IGRvZXMgbm90IHJlc3BlY3QgdGhlIG1hcmt1cE1hc3NhZ2UgYXJndW1lbnQgdG8gdGhlICIKKyAgICAgICAgICAgICAgICAiQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4gVGhlIHRyZWUgYnVpbGRlciBpcyByZXNwb25zaWJsZSAiCisgICAgICAgICAgICAgICAgImZvciBhbnkgbmVjZXNzYXJ5IG1hcmt1cCBtYXNzYWdlLiIpCisKKyAgICAgICAgaWYgJ3NtYXJ0UXVvdGVzVG8nIGluIGt3YXJnczoKKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ3NtYXJ0UXVvdGVzVG8nXQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiQlM0IGRvZXMgbm90IHJlc3BlY3QgdGhlIHNtYXJ0UXVvdGVzVG8gYXJndW1lbnQgdG8gdGhlICIKKyAgICAgICAgICAgICAgICAiQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4gU21hcnQgcXVvdGVzIGFyZSBhbHdheXMgY29udmVydGVkICIKKyAgICAgICAgICAgICAgICAidG8gVW5pY29kZSBjaGFyYWN0ZXJzLiIpCisKKyAgICAgICAgaWYgJ3NlbGZDbG9zaW5nVGFncycgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGVsIGt3YXJnc1snc2VsZkNsb3NpbmdUYWdzJ10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBzZWxmQ2xvc2luZ1RhZ3MgYXJndW1lbnQgdG8gdGhlICIKKyAgICAgICAgICAgICAgICAiQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4gVGhlIHRyZWUgYnVpbGRlciBpcyByZXNwb25zaWJsZSAiCisgICAgICAgICAgICAgICAgImZvciB1bmRlcnN0YW5kaW5nIHNlbGYtY2xvc2luZyB0YWdzLiIpCisKKyAgICAgICAgaWYgJ2lzSFRNTCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGVsIGt3YXJnc1snaXNIVE1MJ10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBpc0hUTUwgYXJndW1lbnQgdG8gdGhlICIKKyAgICAgICAgICAgICAgICAiQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4gWW91IGNhbiBwYXNzIGluIGZlYXR1cmVzPSdodG1sJyAiCisgICAgICAgICAgICAgICAgIm9yIGZlYXR1cmVzPSd4bWwnIHRvIGdldCBhIGJ1aWxkZXIgY2FwYWJsZSBvZiBoYW5kbGluZyAiCisgICAgICAgICAgICAgICAgIm9uZSBvciB0aGUgb3RoZXIuIikKKworICAgICAgICBkZWYgZGVwcmVjYXRlZF9hcmd1bWVudChvbGRfbmFtZSwgbmV3X25hbWUpOgorICAgICAgICAgICAgaWYgb2xkX25hbWUgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgICAgICdUaGUgIiVzIiBhcmd1bWVudCB0byB0aGUgQmVhdXRpZnVsU291cCBjb25zdHJ1Y3RvciAnCisgICAgICAgICAgICAgICAgICAgICdoYXMgYmVlbiByZW5hbWVkIHRvICIlcy4iJyAlIChvbGRfbmFtZSwgbmV3X25hbWUpKQorICAgICAgICAgICAgICAgIHZhbHVlID0ga3dhcmdzW29sZF9uYW1lXQorICAgICAgICAgICAgICAgIGRlbCBrd2FyZ3Nbb2xkX25hbWVdCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHBhcnNlX29ubHkgPSBwYXJzZV9vbmx5IG9yIGRlcHJlY2F0ZWRfYXJndW1lbnQoCisgICAgICAgICAgICAicGFyc2VPbmx5VGhlc2UiLCAicGFyc2Vfb25seSIpCisKKyAgICAgICAgZnJvbV9lbmNvZGluZyA9IGZyb21fZW5jb2Rpbmcgb3IgZGVwcmVjYXRlZF9hcmd1bWVudCgKKyAgICAgICAgICAgICJmcm9tRW5jb2RpbmciLCAiZnJvbV9lbmNvZGluZyIpCisKKyAgICAgICAgaWYgbGVuKGt3YXJncykgPiAwOgorICAgICAgICAgICAgYXJnID0ga3dhcmdzLmtleXMoKS5wb3AoKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgICAgICJfX2luaXRfXygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVzJyIgJSBhcmcpCisKKyAgICAgICAgaWYgYnVpbGRlciBpcyBOb25lOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmZWF0dXJlcywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgZmVhdHVyZXMgPSBbZmVhdHVyZXNdCisgICAgICAgICAgICBpZiBmZWF0dXJlcyBpcyBOb25lIG9yIGxlbihmZWF0dXJlcykgPT0gMDoKKyAgICAgICAgICAgICAgICBmZWF0dXJlcyA9IHNlbGYuREVGQVVMVF9CVUlMREVSX0ZFQVRVUkVTCisgICAgICAgICAgICBidWlsZGVyX2NsYXNzID0gYnVpbGRlcl9yZWdpc3RyeS5sb29rdXAoKmZlYXR1cmVzKQorICAgICAgICAgICAgaWYgYnVpbGRlcl9jbGFzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIEZlYXR1cmVOb3RGb3VuZCgKKyAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgYSB0cmVlIGJ1aWxkZXIgd2l0aCB0aGUgZmVhdHVyZXMgeW91ICIKKyAgICAgICAgICAgICAgICAgICAgInJlcXVlc3RlZDogJXMuIERvIHlvdSBuZWVkIHRvIGluc3RhbGwgYSBwYXJzZXIgbGlicmFyeT8iCisgICAgICAgICAgICAgICAgICAgICUgIiwiLmpvaW4oZmVhdHVyZXMpKQorICAgICAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXJfY2xhc3MoKQorICAgICAgICBzZWxmLmJ1aWxkZXIgPSBidWlsZGVyCisgICAgICAgIHNlbGYuaXNfeG1sID0gYnVpbGRlci5pc194bWwKKyAgICAgICAgc2VsZi5idWlsZGVyLnNvdXAgPSBzZWxmCisKKyAgICAgICAgc2VsZi5wYXJzZV9vbmx5ID0gcGFyc2Vfb25seQorCisgICAgICAgIGlmIGhhc2F0dHIobWFya3VwLCAncmVhZCcpOiAgICAgICAgIyBJdCdzIGEgZmlsZS10eXBlIG9iamVjdC4KKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cC5yZWFkKCkKKyAgICAgICAgZWxpZiBsZW4obWFya3VwKSA8PSAyNTY6CisgICAgICAgICAgICAjIFByaW50IG91dCB3YXJuaW5ncyBmb3IgYSBjb3VwbGUgYmVnaW5uZXIgcHJvYmxlbXMKKyAgICAgICAgICAgICMgaW52b2x2aW5nIHBhc3Npbmcgbm9uLW1hcmt1cCB0byBCZWF1dGlmdWwgU291cC4KKyAgICAgICAgICAgICMgQmVhdXRpZnVsIFNvdXAgd2lsbCBzdGlsbCBwYXJzZSB0aGUgaW5wdXQgYXMgbWFya3VwLAorICAgICAgICAgICAgIyBqdXN0IGluIGNhc2UgdGhhdCdzIHdoYXQgdGhlIHVzZXIgcmVhbGx5IHdhbnRzLgorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKQorICAgICAgICAgICAgICAgIGFuZCBub3Qgb3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyk6CisgICAgICAgICAgICAgICAgcG9zc2libGVfZmlsZW5hbWUgPSBtYXJrdXAuZW5jb2RlKCJ1dGY4IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG9zc2libGVfZmlsZW5hbWUgPSBtYXJrdXAKKyAgICAgICAgICAgIGlzX2ZpbGUgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX2ZpbGUgPSBvcy5wYXRoLmV4aXN0cyhwb3NzaWJsZV9maWxlbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBwcm9ibGVtIGludm9sdmluZworICAgICAgICAgICAgICAgICMgY2hhcmFjdGVycyBub3QgdmFsaWQgaW4gZmlsZW5hbWVzIG9uIHRoaXMKKyAgICAgICAgICAgICAgICAjIHN5c3RlbS4gSnVzdCBsZXQgaXQgZ28uCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgaXNfZmlsZToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAnIiVzIiBsb29rcyBsaWtlIGEgZmlsZW5hbWUsIG5vdCBtYXJrdXAuIFlvdSBzaG91bGQgcHJvYmFibHkgb3BlbiB0aGlzIGZpbGUgYW5kIHBhc3MgdGhlIGZpbGVoYW5kbGUgaW50byBCZWF1dGlmdWwgU291cC4nICUgbWFya3VwKQorICAgICAgICAgICAgaWYgbWFya3VwWzo1XSA9PSAiaHR0cDoiIG9yIG1hcmt1cFs6Nl0gPT0gImh0dHBzOiI6CisgICAgICAgICAgICAgICAgIyBUT0RPOiBUaGlzIGlzIHVnbHkgYnV0IEkgY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgaW4KKyAgICAgICAgICAgICAgICAjIFB5dGhvbiAzIG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICBpZiAoKGlzaW5zdGFuY2UobWFya3VwLCBieXRlcykgYW5kIG5vdCBiJyAnIGluIG1hcmt1cCkKKyAgICAgICAgICAgICAgICAgICAgb3IgKGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKSBhbmQgbm90IHUnICcgaW4gbWFya3VwKSk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgICAgICAgICAnIiVzIiBsb29rcyBsaWtlIGEgVVJMLiBCZWF1dGlmdWwgU291cCBpcyBub3QgYW4gSFRUUCBjbGllbnQuIFlvdSBzaG91bGQgcHJvYmFibHkgdXNlIGFuIEhUVFAgY2xpZW50IHRvIGdldCB0aGUgZG9jdW1lbnQgYmVoaW5kIHRoZSBVUkwsIGFuZCBmZWVkIHRoYXQgZG9jdW1lbnQgdG8gQmVhdXRpZnVsIFNvdXAuJyAlIG1hcmt1cCkKKworICAgICAgICBmb3IgKHNlbGYubWFya3VwLCBzZWxmLm9yaWdpbmFsX2VuY29kaW5nLCBzZWxmLmRlY2xhcmVkX2h0bWxfZW5jb2RpbmcsCisgICAgICAgICBzZWxmLmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMpIGluICgKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5wcmVwYXJlX21hcmt1cChtYXJrdXAsIGZyb21fZW5jb2RpbmcpKToKKyAgICAgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgUGFyc2VyUmVqZWN0ZWRNYXJrdXA6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgQ2xlYXIgb3V0IHRoZSBtYXJrdXAgYW5kIHJlbW92ZSB0aGUgYnVpbGRlcidzIGNpcmN1bGFyCisgICAgICAgICMgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LgorICAgICAgICBzZWxmLm1hcmt1cCA9IE5vbmUKKyAgICAgICAgc2VsZi5idWlsZGVyLnNvdXAgPSBOb25lCisKKyAgICBkZWYgX2ZlZWQoc2VsZik6CisgICAgICAgICMgQ29udmVydCB0aGUgZG9jdW1lbnQgdG8gVW5pY29kZS4KKyAgICAgICAgc2VsZi5idWlsZGVyLnJlc2V0KCkKKworICAgICAgICBzZWxmLmJ1aWxkZXIuZmVlZChzZWxmLm1hcmt1cCkKKyAgICAgICAgIyBDbG9zZSBvdXQgYW55IHVuZmluaXNoZWQgc3RyaW5ncyBhbmQgY2xvc2UgYWxsIHRoZSBvcGVuIHRhZ3MuCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisgICAgICAgIHdoaWxlIHNlbGYuY3VycmVudFRhZy5uYW1lICE9IHNlbGYuUk9PVF9UQUdfTkFNRToKKyAgICAgICAgICAgIHNlbGYucG9wVGFnKCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgVGFnLl9faW5pdF9fKHNlbGYsIHNlbGYsIHNlbGYuYnVpbGRlciwgc2VsZi5ST09UX1RBR19OQU1FKQorICAgICAgICBzZWxmLmhpZGRlbiA9IDEKKyAgICAgICAgc2VsZi5idWlsZGVyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5jdXJyZW50X2RhdGEgPSBbXQorICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBOb25lCisgICAgICAgIHNlbGYudGFnU3RhY2sgPSBbXQorICAgICAgICBzZWxmLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5wdXNoVGFnKHNlbGYpCisKKyAgICBkZWYgbmV3X3RhZyhzZWxmLCBuYW1lLCBuYW1lc3BhY2U9Tm9uZSwgbnNwcmVmaXg9Tm9uZSwgKiphdHRycyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyB0YWcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cC4iIiIKKyAgICAgICAgcmV0dXJuIFRhZyhOb25lLCBzZWxmLmJ1aWxkZXIsIG5hbWUsIG5hbWVzcGFjZSwgbnNwcmVmaXgsIGF0dHJzKQorCisgICAgZGVmIG5ld19zdHJpbmcoc2VsZiwgcywgc3ViY2xhc3M9TmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IE5hdmlnYWJsZVN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzb3VwLiIiIgorICAgICAgICBuYXZpZ2FibGUgPSBzdWJjbGFzcyhzKQorICAgICAgICBuYXZpZ2FibGUuc2V0dXAoKQorICAgICAgICByZXR1cm4gbmF2aWdhYmxlCisKKyAgICBkZWYgaW5zZXJ0X2JlZm9yZShzZWxmLCBzdWNjZXNzb3IpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJCZWF1dGlmdWxTb3VwIG9iamVjdHMgZG9uJ3Qgc3VwcG9ydCBpbnNlcnRfYmVmb3JlKCkuIikKKworICAgIGRlZiBpbnNlcnRfYWZ0ZXIoc2VsZiwgc3VjY2Vzc29yKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiQmVhdXRpZnVsU291cCBvYmplY3RzIGRvbid0IHN1cHBvcnQgaW5zZXJ0X2FmdGVyKCkuIikKKworICAgIGRlZiBwb3BUYWcoc2VsZik6CisgICAgICAgIHRhZyA9IHNlbGYudGFnU3RhY2sucG9wKCkKKyAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFjayBhbmQgdGFnID09IHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2tbLTFdOgorICAgICAgICAgICAgc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFjay5wb3AoKQorICAgICAgICAjcHJpbnQgIlBvcCIsIHRhZy5uYW1lCisgICAgICAgIGlmIHNlbGYudGFnU3RhY2s6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBzZWxmLnRhZ1N0YWNrWy0xXQorICAgICAgICByZXR1cm4gc2VsZi5jdXJyZW50VGFnCisKKyAgICBkZWYgcHVzaFRhZyhzZWxmLCB0YWcpOgorICAgICAgICAjcHJpbnQgIlB1c2giLCB0YWcubmFtZQorICAgICAgICBpZiBzZWxmLmN1cnJlbnRUYWc6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRUYWcuY29udGVudHMuYXBwZW5kKHRhZykKKyAgICAgICAgc2VsZi50YWdTdGFjay5hcHBlbmQodGFnKQorICAgICAgICBzZWxmLmN1cnJlbnRUYWcgPSBzZWxmLnRhZ1N0YWNrWy0xXQorICAgICAgICBpZiB0YWcubmFtZSBpbiBzZWxmLmJ1aWxkZXIucHJlc2VydmVfd2hpdGVzcGFjZV90YWdzOgorICAgICAgICAgICAgc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFjay5hcHBlbmQodGFnKQorCisgICAgZGVmIGVuZERhdGEoc2VsZiwgY29udGFpbmVyQ2xhc3M9TmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2RhdGE6CisgICAgICAgICAgICBjdXJyZW50X2RhdGEgPSB1Jycuam9pbihzZWxmLmN1cnJlbnRfZGF0YSkKKyAgICAgICAgICAgICMgSWYgd2hpdGVzcGFjZSBpcyBub3QgcHJlc2VydmVkLCBhbmQgdGhpcyBzdHJpbmcgY29udGFpbnMKKyAgICAgICAgICAgICMgbm90aGluZyBidXQgQVNDSUkgc3BhY2VzLCByZXBsYWNlIGl0IHdpdGggYSBzaW5nbGUgc3BhY2UKKyAgICAgICAgICAgICMgb3IgbmV3bGluZS4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnX3N0YWNrOgorICAgICAgICAgICAgICAgIHN0cmlwcGFibGUgPSBUcnVlCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gY3VycmVudF9kYXRhOgorICAgICAgICAgICAgICAgICAgICBpZiBpIG5vdCBpbiBzZWxmLkFTQ0lJX1NQQUNFUzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwcGFibGUgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBzdHJpcHBhYmxlOgorICAgICAgICAgICAgICAgICAgICBpZiAnXG4nIGluIGN1cnJlbnRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZGF0YSA9ICdcbicKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZGF0YSA9ICcgJworCisgICAgICAgICAgICAjIFJlc2V0IHRoZSBkYXRhIGNvbGxlY3Rvci4KKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9kYXRhID0gW10KKworICAgICAgICAgICAgIyBTaG91bGQgd2UgYWRkIHRoaXMgc3RyaW5nIHRvIHRoZSB0cmVlIGF0IGFsbD8KKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2Vfb25seSBhbmQgbGVuKHNlbGYudGFnU3RhY2spIDw9IDEgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAobm90IHNlbGYucGFyc2Vfb25seS50ZXh0IG9yIFwKKyAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYucGFyc2Vfb25seS5zZWFyY2goY3VycmVudF9kYXRhKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIG8gPSBjb250YWluZXJDbGFzcyhjdXJyZW50X2RhdGEpCisgICAgICAgICAgICBzZWxmLm9iamVjdF93YXNfcGFyc2VkKG8pCisKKyAgICBkZWYgb2JqZWN0X3dhc19wYXJzZWQoc2VsZiwgbywgcGFyZW50PU5vbmUsIG1vc3RfcmVjZW50X2VsZW1lbnQ9Tm9uZSk6CisgICAgICAgICIiIkFkZCBhbiBvYmplY3QgdG8gdGhlIHBhcnNlIHRyZWUuIiIiCisgICAgICAgIHBhcmVudCA9IHBhcmVudCBvciBzZWxmLmN1cnJlbnRUYWcKKyAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudCA9IG1vc3RfcmVjZW50X2VsZW1lbnQgb3Igc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudAorICAgICAgICBvLnNldHVwKHBhcmVudCwgbW9zdF9yZWNlbnRfZWxlbWVudCkKKworICAgICAgICBpZiBtb3N0X3JlY2VudF9lbGVtZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBvCisgICAgICAgIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQgPSBvCisgICAgICAgIHBhcmVudC5jb250ZW50cy5hcHBlbmQobykKKworICAgIGRlZiBfcG9wVG9UYWcoc2VsZiwgbmFtZSwgbnNwcmVmaXg9Tm9uZSwgaW5jbHVzaXZlUG9wPVRydWUpOgorICAgICAgICAiIiJQb3BzIHRoZSB0YWcgc3RhY2sgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHRhZy4gSWYgaW5jbHVzaXZlUG9wIGlzIGZhbHNlLCBwb3BzIHRoZSB0YWcKKyAgICAgICAgc3RhY2sgdXAgdG8gYnV0ICpub3QqIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQgaW5zdHFhbmNlIG9mCisgICAgICAgIHRoZSBnaXZlbiB0YWcuIiIiCisgICAgICAgICNwcmludCAiUG9wcGluZyB0byAlcyIgJSBuYW1lCisgICAgICAgIGlmIG5hbWUgPT0gc2VsZi5ST09UX1RBR19OQU1FOgorICAgICAgICAgICAgIyBUaGUgQmVhdXRpZnVsU291cCBvYmplY3QgaXRzZWxmIGNhbiBuZXZlciBiZSBwb3BwZWQuCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBtb3N0X3JlY2VudGx5X3BvcHBlZCA9IE5vbmUKKworICAgICAgICBzdGFja19zaXplID0gbGVuKHNlbGYudGFnU3RhY2spCisgICAgICAgIGZvciBpIGluIHJhbmdlKHN0YWNrX3NpemUgLSAxLCAwLCAtMSk6CisgICAgICAgICAgICB0ID0gc2VsZi50YWdTdGFja1tpXQorICAgICAgICAgICAgaWYgKG5hbWUgPT0gdC5uYW1lIGFuZCBuc3ByZWZpeCA9PSB0LnByZWZpeCk6CisgICAgICAgICAgICAgICAgaWYgaW5jbHVzaXZlUG9wOgorICAgICAgICAgICAgICAgICAgICBtb3N0X3JlY2VudGx5X3BvcHBlZCA9IHNlbGYucG9wVGFnKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbW9zdF9yZWNlbnRseV9wb3BwZWQgPSBzZWxmLnBvcFRhZygpCisKKyAgICAgICAgcmV0dXJuIG1vc3RfcmVjZW50bHlfcG9wcGVkCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIG5hbWVzcGFjZSwgbnNwcmVmaXgsIGF0dHJzKToKKyAgICAgICAgIiIiUHVzaCBhIHN0YXJ0IHRhZyBvbiB0byB0aGUgc3RhY2suCisKKyAgICAgICAgSWYgdGhpcyBtZXRob2QgcmV0dXJucyBOb25lLCB0aGUgdGFnIHdhcyByZWplY3RlZCBieSB0aGUKKyAgICAgICAgU291cFN0cmFpbmVyLiBZb3Ugc2hvdWxkIHByb2NlZWQgYXMgaWYgdGhlIHRhZyBoYWQgbm90IG9jY3VyZWQKKyAgICAgICAgaW4gdGhlIGRvY3VtZW50LiBGb3IgaW5zdGFuY2UsIGlmIHRoaXMgd2FzIGEgc2VsZi1jbG9zaW5nIHRhZywKKyAgICAgICAgZG9uJ3QgY2FsbCBoYW5kbGVfZW5kdGFnLgorICAgICAgICAiIiIKKworICAgICAgICAjIHByaW50ICJTdGFydCB0YWcgJXM6ICVzIiAlIChuYW1lLCBhdHRycykKKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKworICAgICAgICBpZiAoc2VsZi5wYXJzZV9vbmx5IGFuZCBsZW4oc2VsZi50YWdTdGFjaykgPD0gMQorICAgICAgICAgICAgYW5kIChzZWxmLnBhcnNlX29ubHkudGV4dAorICAgICAgICAgICAgICAgICBvciBub3Qgc2VsZi5wYXJzZV9vbmx5LnNlYXJjaF90YWcobmFtZSwgYXR0cnMpKSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHRhZyA9IFRhZyhzZWxmLCBzZWxmLmJ1aWxkZXIsIG5hbWUsIG5hbWVzcGFjZSwgbnNwcmVmaXgsIGF0dHJzLAorICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50VGFnLCBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50KQorICAgICAgICBpZiB0YWcgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB0YWcKKyAgICAgICAgaWYgc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudDoKKyAgICAgICAgICAgIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gdGFnCisgICAgICAgIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQgPSB0YWcKKyAgICAgICAgc2VsZi5wdXNoVGFnKHRhZykKKyAgICAgICAgcmV0dXJuIHRhZworCisgICAgZGVmIGhhbmRsZV9lbmR0YWcoc2VsZiwgbmFtZSwgbnNwcmVmaXg9Tm9uZSk6CisgICAgICAgICNwcmludCAiRW5kIHRhZzogIiArIG5hbWUKKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5fcG9wVG9UYWcobmFtZSwgbnNwcmVmaXgpCisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuY3VycmVudF9kYXRhLmFwcGVuZChkYXRhKQorCisgICAgZGVmIGRlY29kZShzZWxmLCBwcmV0dHlfcHJpbnQ9RmFsc2UsCisgICAgICAgICAgICAgICBldmVudHVhbF9lbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIG9yIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkb2N1bWVudC4KKyAgICAgICAgVG8gZ2V0IFVuaWNvZGUsIHBhc3MgTm9uZSBmb3IgZW5jb2RpbmcuIiIiCisKKyAgICAgICAgaWYgc2VsZi5pc194bWw6CisgICAgICAgICAgICAjIFByaW50IHRoZSBYTUwgZGVjbGFyYXRpb24KKyAgICAgICAgICAgIGVuY29kaW5nX3BhcnQgPSAnJworICAgICAgICAgICAgaWYgZXZlbnR1YWxfZW5jb2RpbmcgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBlbmNvZGluZ19wYXJ0ID0gJyBlbmNvZGluZz0iJXMiJyAlIGV2ZW50dWFsX2VuY29kaW5nCisgICAgICAgICAgICBwcmVmaXggPSB1Jzw/eG1sIHZlcnNpb249IjEuMCIlcz8+XG4nICUgZW5jb2RpbmdfcGFydAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gdScnCisgICAgICAgIGlmIG5vdCBwcmV0dHlfcHJpbnQ6CisgICAgICAgICAgICBpbmRlbnRfbGV2ZWwgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmRlbnRfbGV2ZWwgPSAwCisgICAgICAgIHJldHVybiBwcmVmaXggKyBzdXBlcihCZWF1dGlmdWxTb3VwLCBzZWxmKS5kZWNvZGUoCisgICAgICAgICAgICBpbmRlbnRfbGV2ZWwsIGV2ZW50dWFsX2VuY29kaW5nLCBmb3JtYXR0ZXIpCisKKyMgQWxpYXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdHlwZSBpbXBvcnQ6ICdmcm9tIGJzNCBpbXBvcnQgX3NvdXAnCitfcyA9IEJlYXV0aWZ1bFNvdXAKK19zb3VwID0gQmVhdXRpZnVsU291cAorCitjbGFzcyBCZWF1dGlmdWxTdG9uZVNvdXAoQmVhdXRpZnVsU291cCk6CisgICAgIiIiRGVwcmVjYXRlZCBpbnRlcmZhY2UgdG8gYW4gWE1MIHBhcnNlci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBrd2FyZ3NbJ2ZlYXR1cmVzJ10gPSAneG1sJworICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgJ1RoZSBCZWF1dGlmdWxTdG9uZVNvdXAgY2xhc3MgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCBvZiB1c2luZyAnCisgICAgICAgICAgICAnaXQsIHBhc3MgZmVhdHVyZXM9InhtbCIgaW50byB0aGUgQmVhdXRpZnVsU291cCBjb25zdHJ1Y3Rvci4nKQorICAgICAgICBzdXBlcihCZWF1dGlmdWxTdG9uZVNvdXAsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKworCitjbGFzcyBTdG9wUGFyc2luZyhFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgRmVhdHVyZU5vdEZvdW5kKFZhbHVlRXJyb3IpOgorICAgIHBhc3MKKworCisjQnkgZGVmYXVsdCwgYWN0IGFzIGFuIEhUTUwgcHJldHR5LXByaW50ZXIuCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBzeXMKKyAgICBzb3VwID0gQmVhdXRpZnVsU291cChzeXMuc3RkaW4pCisgICAgcHJpbnQgc291cC5wcmV0dGlmeSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDBmNWYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMyMSBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBzeXMKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUsCisgICAgd2hpdGVzcGFjZV9yZQorICAgICkKKworX19hbGxfXyA9IFsKKyAgICAnSFRNTFRyZWVCdWlsZGVyJywKKyAgICAnU0FYVHJlZUJ1aWxkZXInLAorICAgICdUcmVlQnVpbGRlcicsCisgICAgJ1RyZWVCdWlsZGVyUmVnaXN0cnknLAorICAgIF0KKworIyBTb21lIHVzZWZ1bCBmZWF0dXJlcyBmb3IgYSBUcmVlQnVpbGRlciB0byBoYXZlLgorRkFTVCA9ICdmYXN0JworUEVSTUlTU0lWRSA9ICdwZXJtaXNzaXZlJworU1RSSUNUID0gJ3N0cmljdCcKK1hNTCA9ICd4bWwnCitIVE1MID0gJ2h0bWwnCitIVE1MXzUgPSAnaHRtbDUnCisKKworY2xhc3MgVHJlZUJ1aWxkZXJSZWdpc3RyeShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkZXJzX2Zvcl9mZWF0dXJlID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgc2VsZi5idWlsZGVycyA9IFtdCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgdHJlZWJ1aWxkZXJfY2xhc3MpOgorICAgICAgICAiIiJSZWdpc3RlciBhIHRyZWVidWlsZGVyIGJhc2VkIG9uIGl0cyBhZHZlcnRpc2VkIGZlYXR1cmVzLiIiIgorICAgICAgICBmb3IgZmVhdHVyZSBpbiB0cmVlYnVpbGRlcl9jbGFzcy5mZWF0dXJlczoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlcnNfZm9yX2ZlYXR1cmVbZmVhdHVyZV0uaW5zZXJ0KDAsIHRyZWVidWlsZGVyX2NsYXNzKQorICAgICAgICBzZWxmLmJ1aWxkZXJzLmluc2VydCgwLCB0cmVlYnVpbGRlcl9jbGFzcykKKworICAgIGRlZiBsb29rdXAoc2VsZiwgKmZlYXR1cmVzKToKKyAgICAgICAgaWYgbGVuKHNlbGYuYnVpbGRlcnMpID09IDA6CisgICAgICAgICAgICAjIFRoZXJlIGFyZSBubyBidWlsZGVycyBhdCBhbGwuCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIGxlbihmZWF0dXJlcykgPT0gMDoKKyAgICAgICAgICAgICMgVGhleSBkaWRuJ3QgYXNrIGZvciBhbnkgZmVhdHVyZXMuIEdpdmUgdGhlbSB0aGUgbW9zdAorICAgICAgICAgICAgIyByZWNlbnRseSByZWdpc3RlcmVkIGJ1aWxkZXIuCisgICAgICAgICAgICByZXR1cm4gc2VsZi5idWlsZGVyc1swXQorCisgICAgICAgICMgR28gZG93biB0aGUgbGlzdCBvZiBmZWF0dXJlcyBpbiBvcmRlciwgYW5kIGVsaW1pbmF0ZSBhbnkgYnVpbGRlcnMKKyAgICAgICAgIyB0aGF0IGRvbid0IG1hdGNoIGV2ZXJ5IGZlYXR1cmUuCisgICAgICAgIGZlYXR1cmVzID0gbGlzdChmZWF0dXJlcykKKyAgICAgICAgZmVhdHVyZXMucmV2ZXJzZSgpCisgICAgICAgIGNhbmRpZGF0ZXMgPSBOb25lCisgICAgICAgIGNhbmRpZGF0ZV9zZXQgPSBOb25lCisgICAgICAgIHdoaWxlIGxlbihmZWF0dXJlcykgPiAwOgorICAgICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmVzLnBvcCgpCisgICAgICAgICAgICB3ZV9oYXZlX3RoZV9mZWF0dXJlID0gc2VsZi5idWlsZGVyc19mb3JfZmVhdHVyZS5nZXQoZmVhdHVyZSwgW10pCisgICAgICAgICAgICBpZiBsZW4od2VfaGF2ZV90aGVfZmVhdHVyZSkgPiAwOgorICAgICAgICAgICAgICAgIGlmIGNhbmRpZGF0ZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IHdlX2hhdmVfdGhlX2ZlYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlX3NldCA9IHNldChjYW5kaWRhdGVzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgRWxpbWluYXRlIGFueSBjYW5kaWRhdGVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZV9zZXQgPSBjYW5kaWRhdGVfc2V0LmludGVyc2VjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCh3ZV9oYXZlX3RoZV9mZWF0dXJlKSkKKworICAgICAgICAjIFRoZSBvbmx5IHZhbGlkIGNhbmRpZGF0ZXMgYXJlIHRoZSBvbmVzIGluIGNhbmRpZGF0ZV9zZXQuCisgICAgICAgICMgR28gdGhyb3VnaCB0aGUgb3JpZ2luYWwgbGlzdCBvZiBjYW5kaWRhdGVzIGFuZCBwaWNrIHRoZSBmaXJzdCBvbmUKKyAgICAgICAgIyB0aGF0J3MgaW4gY2FuZGlkYXRlX3NldC4KKyAgICAgICAgaWYgY2FuZGlkYXRlX3NldCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiBjYW5kaWRhdGVzOgorICAgICAgICAgICAgaWYgY2FuZGlkYXRlIGluIGNhbmRpZGF0ZV9zZXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZQorICAgICAgICByZXR1cm4gTm9uZQorCisjIFRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzIHdpbGwgdGFrZSBmZWF0dXJlIGxpc3RzIGZyb20gZGV2ZWxvcGVycyBhbmQgdXNlIHRoZW0KKyMgdG8gbG9vayB1cCBidWlsZGVycyBpbiB0aGlzIHJlZ2lzdHJ5LgorYnVpbGRlcl9yZWdpc3RyeSA9IFRyZWVCdWlsZGVyUmVnaXN0cnkoKQorCitjbGFzcyBUcmVlQnVpbGRlcihvYmplY3QpOgorICAgICIiIlR1cm4gYSBkb2N1bWVudCBpbnRvIGEgQmVhdXRpZnVsIFNvdXAgb2JqZWN0IHRyZWUuIiIiCisKKyAgICBmZWF0dXJlcyA9IFtdCisKKyAgICBpc194bWwgPSBGYWxzZQorICAgIHByZXNlcnZlX3doaXRlc3BhY2VfdGFncyA9IHNldCgpCisgICAgZW1wdHlfZWxlbWVudF90YWdzID0gTm9uZSAjIEEgdGFnIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBlbXB0eS1lbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRhZyB3aGVuIGFuZCBvbmx5IHdoZW4gaXQgaGFzIG5vIGNvbnRlbnRzLgorCisgICAgIyBBIHZhbHVlIGZvciB0aGVzZSB0YWcvYXR0cmlidXRlIGNvbWJpbmF0aW9ucyBpcyBhIHNwYWNlLSBvcgorICAgICMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgQ0RBVEEsIHJhdGhlciB0aGFuIGEgc2luZ2xlIENEQVRBLgorICAgIGNkYXRhX2xpc3RfYXR0cmlidXRlcyA9IHt9CisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zb3VwID0gTm9uZQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2FuX2JlX2VtcHR5X2VsZW1lbnQoc2VsZiwgdGFnX25hbWUpOgorICAgICAgICAiIiJNaWdodCBhIHRhZyB3aXRoIHRoaXMgbmFtZSBiZSBhbiBlbXB0eS1lbGVtZW50IHRhZz8KKworICAgICAgICBUaGUgZmluYWwgbWFya3VwIG1heSBvciBtYXkgbm90IGFjdHVhbGx5IHByZXNlbnQgdGhpcyB0YWcgYXMKKyAgICAgICAgc2VsZi1jbG9zaW5nLgorCisgICAgICAgIEZvciBpbnN0YW5jZTogYW4gSFRNTEJ1aWxkZXIgZG9lcyBub3QgY29uc2lkZXIgYSA8cD4gdGFnIHRvIGJlCisgICAgICAgIGFuIGVtcHR5LWVsZW1lbnQgdGFnIChpdCdzIG5vdCBpbgorICAgICAgICBIVE1MQnVpbGRlci5lbXB0eV9lbGVtZW50X3RhZ3MpLiBUaGlzIG1lYW5zIGFuIGVtcHR5IDxwPiB0YWcKKyAgICAgICAgd2lsbCBiZSBwcmVzZW50ZWQgYXMgIjxwPjwvcD4iLCBub3QgIjxwIC8+Ii4KKworICAgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gb3BpbmlvbiBhYm91dCB3aGljaCB0YWdzIGFyZQorICAgICAgICBlbXB0eS1lbGVtZW50IHRhZ3MsIHNvIGEgdGFnIHdpbGwgYmUgcHJlc2VudGVkIGFzIGFuCisgICAgICAgIGVtcHR5LWVsZW1lbnQgdGFnIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBubyBjb250ZW50cy4KKyAgICAgICAgIjxmb28+PC9mb28+IiB3aWxsIGJlY29tZSAiPGZvbyAvPiIsIGFuZCAiPGZvbz5iYXI8L2Zvbz4iIHdpbGwKKyAgICAgICAgYmUgbGVmdCBhbG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZW1wdHlfZWxlbWVudF90YWdzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gdGFnX25hbWUgaW4gc2VsZi5lbXB0eV9lbGVtZW50X3RhZ3MKKworICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgIHJldHVybiBtYXJrdXAsIE5vbmUsIE5vbmUsIEZhbHNlCisKKyAgICBkZWYgdGVzdF9mcmFnbWVudF90b19kb2N1bWVudChzZWxmLCBmcmFnbWVudCk6CisgICAgICAgICIiIldyYXAgYW4gSFRNTCBmcmFnbWVudCB0byBtYWtlIGl0IGxvb2sgbGlrZSBhIGRvY3VtZW50LgorCisgICAgICAgIERpZmZlcmVudCBwYXJzZXJzIGRvIHRoaXMgZGlmZmVyZW50bHkuIEZvciBpbnN0YW5jZSwgbHhtbAorICAgICAgICBpbnRyb2R1Y2VzIGFuIGVtcHR5IDxoZWFkPiB0YWcsIGFuZCBodG1sNWxpYgorICAgICAgICBkb2Vzbid0LiBBYnN0cmFjdGluZyB0aGlzIGF3YXkgbGV0cyB1cyB3cml0ZSBzaW1wbGUgdGVzdHMKKyAgICAgICAgd2hpY2ggcnVuIEhUTUwgZnJhZ21lbnRzIHRocm91Z2ggdGhlIHBhcnNlciBhbmQgY29tcGFyZSB0aGUKKyAgICAgICAgcmVzdWx0cyBhZ2FpbnN0IG90aGVyIEhUTUwgZnJhZ21lbnRzLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50CisKKyAgICBkZWYgc2V0X3VwX3N1YnN0aXR1dGlvbnMoc2VsZiwgdGFnKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3JlcGxhY2VfY2RhdGFfbGlzdF9hdHRyaWJ1dGVfdmFsdWVzKHNlbGYsIHRhZ19uYW1lLCBhdHRycyk6CisgICAgICAgICIiIlJlcGxhY2VzIGNsYXNzPSJmb28gYmFyIiB3aXRoIGNsYXNzPVsiZm9vIiwgImJhciJdCisKKyAgICAgICAgTW9kaWZpZXMgaXRzIGlucHV0IGluIHBsYWNlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGF0dHJzOgorICAgICAgICAgICAgcmV0dXJuIGF0dHJzCisgICAgICAgIGlmIHNlbGYuY2RhdGFfbGlzdF9hdHRyaWJ1dGVzOgorICAgICAgICAgICAgdW5pdmVyc2FsID0gc2VsZi5jZGF0YV9saXN0X2F0dHJpYnV0ZXMuZ2V0KCcqJywgW10pCisgICAgICAgICAgICB0YWdfc3BlY2lmaWMgPSBzZWxmLmNkYXRhX2xpc3RfYXR0cmlidXRlcy5nZXQoCisgICAgICAgICAgICAgICAgdGFnX25hbWUubG93ZXIoKSwgTm9uZSkKKyAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBhdHRyIGluIHVuaXZlcnNhbCBvciAodGFnX3NwZWNpZmljIGFuZCBhdHRyIGluIHRhZ19zcGVjaWZpYyk6CisgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhICJjbGFzcyItdHlwZSBhdHRyaWJ1dGUgd2hvc2Ugc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICMgdmFsdWUgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICMgdmFsdWVzLiBTcGxpdCBpdCBpbnRvIGEgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhdHRyc1thdHRyXQorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHdoaXRlc3BhY2VfcmUuc3BsaXQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGh0bWw1bGliIHNvbWV0aW1lcyBjYWxscyBzZXRBdHRyaWJ1dGVzIHR3aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGZvciB0aGUgc2FtZSB0YWcgd2hlbiByZWFycmFuZ2luZyB0aGUgcGFyc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdHJlZS4gT24gdGhlIHNlY29uZCBjYWxsIHRoZSBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaGVyZSBpcyBhbHJlYWR5IGEgbGlzdC4gIElmIHRoaXMgaGFwcGVucywKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbGVhdmUgdGhlIHZhbHVlIGFsb25lIHJhdGhlciB0aGFuIHRyeWluZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgIyBzcGxpdCBpdCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGF0dHJzW2F0dHJdID0gdmFsdWVzCisgICAgICAgIHJldHVybiBhdHRycworCitjbGFzcyBTQVhUcmVlQnVpbGRlcihUcmVlQnVpbGRlcik6CisgICAgIiIiQSBCZWF1dGlmdWwgU291cCB0cmVlYnVpbGRlciB0aGF0IGxpc3RlbnMgZm9yIFNBWCBldmVudHMuIiIiCisKKyAgICBkZWYgZmVlZChzZWxmLCBtYXJrdXApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0RWxlbWVudChzZWxmLCBuYW1lLCBhdHRycyk6CisgICAgICAgIGF0dHJzID0gZGljdCgoa2V5WzFdLCB2YWx1ZSkgZm9yIGtleSwgdmFsdWUgaW4gbGlzdChhdHRycy5pdGVtcygpKSkKKyAgICAgICAgI3ByaW50ICJTdGFydCAlcywgJXIiICUgKG5hbWUsIGF0dHJzKQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX3N0YXJ0dGFnKG5hbWUsIGF0dHJzKQorCisgICAgZGVmIGVuZEVsZW1lbnQoc2VsZiwgbmFtZSk6CisgICAgICAgICNwcmludCAiRW5kICVzIiAlIG5hbWUKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9lbmR0YWcobmFtZSkKKworICAgIGRlZiBzdGFydEVsZW1lbnROUyhzZWxmLCBuc1R1cGxlLCBub2RlTmFtZSwgYXR0cnMpOgorICAgICAgICAjIFRocm93IGF3YXkgKG5zLCBub2RlTmFtZSkgZm9yIG5vdy4KKyAgICAgICAgc2VsZi5zdGFydEVsZW1lbnQobm9kZU5hbWUsIGF0dHJzKQorCisgICAgZGVmIGVuZEVsZW1lbnROUyhzZWxmLCBuc1R1cGxlLCBub2RlTmFtZSk6CisgICAgICAgICMgVGhyb3cgYXdheSAobnMsIG5vZGVOYW1lKSBmb3Igbm93LgorICAgICAgICBzZWxmLmVuZEVsZW1lbnQobm9kZU5hbWUpCisgICAgICAgICNoYW5kbGVyLmVuZEVsZW1lbnROUygobnMsIG5vZGUubm9kZU5hbWUpLCBub2RlLm5vZGVOYW1lKQorCisgICAgZGVmIHN0YXJ0UHJlZml4TWFwcGluZyhzZWxmLCBwcmVmaXgsIG5vZGVWYWx1ZSk6CisgICAgICAgICMgSWdub3JlIHRoZSBwcmVmaXggZm9yIG5vdy4KKyAgICAgICAgcGFzcworCisgICAgZGVmIGVuZFByZWZpeE1hcHBpbmcoc2VsZiwgcHJlZml4KToKKyAgICAgICAgIyBJZ25vcmUgdGhlIHByZWZpeCBmb3Igbm93LgorICAgICAgICAjIGhhbmRsZXIuZW5kUHJlZml4TWFwcGluZyhwcmVmaXgpCisgICAgICAgIHBhc3MKKworICAgIGRlZiBjaGFyYWN0ZXJzKHNlbGYsIGNvbnRlbnQpOgorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoY29udGVudCkKKworICAgIGRlZiBzdGFydERvY3VtZW50KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZW5kRG9jdW1lbnQoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBIVE1MVHJlZUJ1aWxkZXIoVHJlZUJ1aWxkZXIpOgorICAgICIiIlRoaXMgVHJlZUJ1aWxkZXIga25vd3MgZmFjdHMgYWJvdXQgSFRNTC4KKworICAgIFN1Y2ggYXMgd2hpY2ggdGFncyBhcmUgZW1wdHktZWxlbWVudCB0YWdzLgorICAgICIiIgorCisgICAgcHJlc2VydmVfd2hpdGVzcGFjZV90YWdzID0gc2V0KFsncHJlJywgJ3RleHRhcmVhJ10pCisgICAgZW1wdHlfZWxlbWVudF90YWdzID0gc2V0KFsnYnInICwgJ2hyJywgJ2lucHV0JywgJ2ltZycsICdtZXRhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFjZXInLCAnbGluaycsICdmcmFtZScsICdiYXNlJ10pCisKKyAgICAjIFRoZSBIVE1MIHN0YW5kYXJkIGRlZmluZXMgdGhlc2UgYXR0cmlidXRlcyBhcyBjb250YWluaW5nIGEKKyAgICAjIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHZhbHVlcywgbm90IGEgc2luZ2xlIHZhbHVlLiBUaGF0IGlzLAorICAgICMgY2xhc3M9ImZvbyBiYXIiIG1lYW5zIHRoYXQgdGhlICdjbGFzcycgYXR0cmlidXRlIGhhcyB0d28gdmFsdWVzLAorICAgICMgJ2ZvbycgYW5kICdiYXInLCBub3QgdGhlIHNpbmdsZSB2YWx1ZSAnZm9vIGJhcicuICBXaGVuIHdlCisgICAgIyBlbmNvdW50ZXIgb25lIG9mIHRoZXNlIGF0dHJpYnV0ZXMsIHdlIHdpbGwgcGFyc2UgaXRzIHZhbHVlIGludG8KKyAgICAjIGEgbGlzdCBvZiB2YWx1ZXMgaWYgcG9zc2libGUuIFVwb24gb3V0cHV0LCB0aGUgbGlzdCB3aWxsIGJlCisgICAgIyBjb252ZXJ0ZWQgYmFjayBpbnRvIGEgc3RyaW5nLgorICAgIGNkYXRhX2xpc3RfYXR0cmlidXRlcyA9IHsKKyAgICAgICAgIioiIDogWydjbGFzcycsICdhY2Nlc3NrZXknLCAnZHJvcHpvbmUnXSwKKyAgICAgICAgImEiIDogWydyZWwnLCAncmV2J10sCisgICAgICAgICJsaW5rIiA6ICBbJ3JlbCcsICdyZXYnXSwKKyAgICAgICAgInRkIiA6IFsiaGVhZGVycyJdLAorICAgICAgICAidGgiIDogWyJoZWFkZXJzIl0sCisgICAgICAgICJ0ZCIgOiBbImhlYWRlcnMiXSwKKyAgICAgICAgImZvcm0iIDogWyJhY2NlcHQtY2hhcnNldCJdLAorICAgICAgICAib2JqZWN0IiA6IFsiYXJjaGl2ZSJdLAorCisgICAgICAgICMgVGhlc2UgYXJlIEhUTUw1IHNwZWNpZmljLCBhcyBhcmUgKi5hY2Nlc3NrZXkgYW5kICouZHJvcHpvbmUgYWJvdmUuCisgICAgICAgICJhcmVhIiA6IFsicmVsIl0sCisgICAgICAgICJpY29uIiA6IFsic2l6ZXMiXSwKKyAgICAgICAgImlmcmFtZSIgOiBbInNhbmRib3giXSwKKyAgICAgICAgIm91dHB1dCIgOiBbImZvciJdLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X3VwX3N1YnN0aXR1dGlvbnMoc2VsZiwgdGFnKToKKyAgICAgICAgIyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIDxtZXRhPiB0YWdzCisgICAgICAgIGlmIHRhZy5uYW1lICE9ICdtZXRhJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGh0dHBfZXF1aXYgPSB0YWcuZ2V0KCdodHRwLWVxdWl2JykKKyAgICAgICAgY29udGVudCA9IHRhZy5nZXQoJ2NvbnRlbnQnKQorICAgICAgICBjaGFyc2V0ID0gdGFnLmdldCgnY2hhcnNldCcpCisKKyAgICAgICAgIyBXZSBhcmUgaW50ZXJlc3RlZCBpbiA8bWV0YT4gdGFncyB0aGF0IHNheSB3aGF0IGVuY29kaW5nIHRoZQorICAgICAgICAjIGRvY3VtZW50IHdhcyBvcmlnaW5hbGx5IGluLiBUaGlzIG1lYW5zIEhUTUwgNS1zdHlsZSA8bWV0YT4KKyAgICAgICAgIyB0YWdzIHRoYXQgcHJvdmlkZSB0aGUgImNoYXJzZXQiIGF0dHJpYnV0ZS4gSXQgYWxzbyBtZWFucworICAgICAgICAjIEhUTUwgNC1zdHlsZSA8bWV0YT4gdGFncyB0aGF0IHByb3ZpZGUgdGhlICJjb250ZW50IgorICAgICAgICAjIGF0dHJpYnV0ZSBhbmQgaGF2ZSAiaHR0cC1lcXVpdiIgc2V0IHRvICJjb250ZW50LXR5cGUiLgorICAgICAgICAjCisgICAgICAgICMgSW4gYm90aCBjYXNlcyB3ZSB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAjIGF0dHJpYnV0ZSB3aXRoIGEgc3RhbmRpbiBvYmplY3QgdGhhdCBjYW4gdGFrZSBvbiBhbnkKKyAgICAgICAgIyBlbmNvZGluZy4KKyAgICAgICAgbWV0YV9lbmNvZGluZyA9IE5vbmUKKyAgICAgICAgaWYgY2hhcnNldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgSFRNTCA1IHN0eWxlOgorICAgICAgICAgICAgIyA8bWV0YSBjaGFyc2V0PSJ1dGY4Ij4KKyAgICAgICAgICAgIG1ldGFfZW5jb2RpbmcgPSBjaGFyc2V0CisgICAgICAgICAgICB0YWdbJ2NoYXJzZXQnXSA9IENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUoY2hhcnNldCkKKworICAgICAgICBlbGlmIChjb250ZW50IGlzIG5vdCBOb25lIGFuZCBodHRwX2VxdWl2IGlzIG5vdCBOb25lCisgICAgICAgICAgICAgIGFuZCBodHRwX2VxdWl2Lmxvd2VyKCkgPT0gJ2NvbnRlbnQtdHlwZScpOgorICAgICAgICAgICAgIyBIVE1MIDQgc3R5bGU6CisgICAgICAgICAgICAjIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0ZjgiPgorICAgICAgICAgICAgdGFnWydjb250ZW50J10gPSBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlKGNvbnRlbnQpCisKKyAgICAgICAgcmV0dXJuIChtZXRhX2VuY29kaW5nIGlzIG5vdCBOb25lKQorCitkZWYgcmVnaXN0ZXJfdHJlZWJ1aWxkZXJzX2Zyb20obW9kdWxlKToKKyAgICAiIiJDb3B5IFRyZWVCdWlsZGVycyBmcm9tIHRoZSBnaXZlbiBtb2R1bGUgaW50byB0aGlzIG1vZHVsZS4iIiIKKyAgICAjIEknbSBmYWlybHkgc3VyZSB0aGlzIGlzIG5vdCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcy4KKyAgICB0aGlzX21vZHVsZSA9IHN5cy5tb2R1bGVzWydiczQuYnVpbGRlciddCisgICAgZm9yIG5hbWUgaW4gbW9kdWxlLl9fYWxsX186CisgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQorCisgICAgICAgIGlmIGlzc3ViY2xhc3Mob2JqLCBUcmVlQnVpbGRlcik6CisgICAgICAgICAgICBzZXRhdHRyKHRoaXNfbW9kdWxlLCBuYW1lLCBvYmopCisgICAgICAgICAgICB0aGlzX21vZHVsZS5fX2FsbF9fLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgIyBSZWdpc3RlciB0aGUgYnVpbGRlciB3aGlsZSB3ZSdyZSBhdCBpdC4KKyAgICAgICAgICAgIHRoaXNfbW9kdWxlLmJ1aWxkZXJfcmVnaXN0cnkucmVnaXN0ZXIob2JqKQorCitjbGFzcyBQYXJzZXJSZWplY3RlZE1hcmt1cChFeGNlcHRpb24pOgorICAgIHBhc3MKKworIyBCdWlsZGVycyBhcmUgcmVnaXN0ZXJlZCBpbiByZXZlcnNlIG9yZGVyIG9mIHByaW9yaXR5LCBzbyB0aGF0IGN1c3RvbQorIyBidWlsZGVyIHJlZ2lzdHJhdGlvbnMgd2lsbCB0YWtlIHByZWNlZGVuY2UuIEluIGdlbmVyYWwsIHdlIHdhbnQgbHhtbAorIyB0byB0YWtlIHByZWNlZGVuY2Ugb3ZlciBodG1sNWxpYiwgYmVjYXVzZSBpdCdzIGZhc3Rlci4gQW5kIHdlIG9ubHkKKyMgd2FudCB0byB1c2UgSFRNTFBhcnNlciBhcyBhIGxhc3QgcmVzdWx0LgorZnJvbSAuIGltcG9ydCBfaHRtbHBhcnNlcgorcmVnaXN0ZXJfdHJlZWJ1aWxkZXJzX2Zyb20oX2h0bWxwYXJzZXIpCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBfaHRtbDVsaWIKKyAgICByZWdpc3Rlcl90cmVlYnVpbGRlcnNfZnJvbShfaHRtbDVsaWIpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBUaGV5IGRvbid0IGhhdmUgaHRtbDVsaWIgaW5zdGFsbGVkLgorICAgIHBhc3MKK3RyeToKKyAgICBmcm9tIC4gaW1wb3J0IF9seG1sCisgICAgcmVnaXN0ZXJfdHJlZWJ1aWxkZXJzX2Zyb20oX2x4bWwpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBUaGV5IGRvbid0IGhhdmUgbHhtbCBpbnN0YWxsZWQuCisgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbDVsaWIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1sNWxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGUzNmFlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWw1bGliLnB5CkBAIC0wLDAgKzEsMjg1IEBACitfX2FsbF9fID0gWworICAgICdIVE1MNVRyZWVCdWlsZGVyJywKKyAgICBdCisKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAorICAgIFBFUk1JU1NJVkUsCisgICAgSFRNTCwKKyAgICBIVE1MXzUsCisgICAgSFRNTFRyZWVCdWlsZGVyLAorICAgICkKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0IE5hbWVzcGFjZWRBdHRyaWJ1dGUKK2ltcG9ydCBodG1sNWxpYgorZnJvbSBodG1sNWxpYi5jb25zdGFudHMgaW1wb3J0IG5hbWVzcGFjZXMKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDb21tZW50LAorICAgIERvY3R5cGUsCisgICAgTmF2aWdhYmxlU3RyaW5nLAorICAgIFRhZywKKyAgICApCisKK2NsYXNzIEhUTUw1VHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyKToKKyAgICAiIiJVc2UgaHRtbDVsaWIgdG8gYnVpbGQgYSB0cmVlLiIiIgorCisgICAgZmVhdHVyZXMgPSBbJ2h0bWw1bGliJywgUEVSTUlTU0lWRSwgSFRNTF81LCBIVE1MXQorCisgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcpOgorICAgICAgICAjIFN0b3JlIHRoZSB1c2VyLXNwZWNpZmllZCBlbmNvZGluZyBmb3IgdXNlIGxhdGVyIG9uLgorICAgICAgICBzZWxmLnVzZXJfc3BlY2lmaWVkX2VuY29kaW5nID0gdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcKKyAgICAgICAgeWllbGQgKG1hcmt1cCwgTm9uZSwgTm9uZSwgRmFsc2UpCisKKyAgICAjIFRoZXNlIG1ldGhvZHMgYXJlIGRlZmluZWQgYnkgQmVhdXRpZnVsIFNvdXAuCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgaWYgc2VsZi5zb3VwLnBhcnNlX29ubHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJZb3UgcHJvdmlkZWQgYSB2YWx1ZSBmb3IgcGFyc2Vfb25seSwgYnV0IHRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgZG9lc24ndCBzdXBwb3J0IHBhcnNlX29ubHkuIFRoZSBlbnRpcmUgZG9jdW1lbnQgd2lsbCBiZSBwYXJzZWQuIikKKyAgICAgICAgcGFyc2VyID0gaHRtbDVsaWIuSFRNTFBhcnNlcih0cmVlPXNlbGYuY3JlYXRlX3RyZWVidWlsZGVyKQorICAgICAgICBkb2MgPSBwYXJzZXIucGFyc2UobWFya3VwLCBlbmNvZGluZz1zZWxmLnVzZXJfc3BlY2lmaWVkX2VuY29kaW5nKQorCisgICAgICAgICMgU2V0IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgZGV0ZWN0ZWQgYnkgdGhlIHRva2VuaXplci4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHNwZWNpYWwtY2FzZSB0aGlzIGJlY2F1c2UgaHRtbDVsaWIgc2V0cworICAgICAgICAgICAgIyBjaGFyRW5jb2RpbmcgdG8gVVRGLTggaWYgaXQgZ2V0cyBVbmljb2RlIGlucHV0LgorICAgICAgICAgICAgZG9jLm9yaWdpbmFsX2VuY29kaW5nID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZG9jLm9yaWdpbmFsX2VuY29kaW5nID0gcGFyc2VyLnRva2VuaXplci5zdHJlYW0uY2hhckVuY29kaW5nWzBdCisKKyAgICBkZWYgY3JlYXRlX3RyZWVidWlsZGVyKHNlbGYsIG5hbWVzcGFjZUhUTUxFbGVtZW50cyk6CisgICAgICAgIHNlbGYudW5kZXJseWluZ19idWlsZGVyID0gVHJlZUJ1aWxkZXJGb3JIdG1sNWxpYigKKyAgICAgICAgICAgIHNlbGYuc291cCwgbmFtZXNwYWNlSFRNTEVsZW1lbnRzKQorICAgICAgICByZXR1cm4gc2VsZi51bmRlcmx5aW5nX2J1aWxkZXIKKworICAgIGRlZiB0ZXN0X2ZyYWdtZW50X3RvX2RvY3VtZW50KHNlbGYsIGZyYWdtZW50KToKKyAgICAgICAgIiIiU2VlIGBUcmVlQnVpbGRlcmAuIiIiCisgICAgICAgIHJldHVybiB1JzxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT4lczwvYm9keT48L2h0bWw+JyAlIGZyYWdtZW50CisKKworY2xhc3MgVHJlZUJ1aWxkZXJGb3JIdG1sNWxpYihodG1sNWxpYi50cmVlYnVpbGRlcnMuX2Jhc2UuVHJlZUJ1aWxkZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXAsIG5hbWVzcGFjZUhUTUxFbGVtZW50cyk6CisgICAgICAgIHNlbGYuc291cCA9IHNvdXAKKyAgICAgICAgc3VwZXIoVHJlZUJ1aWxkZXJGb3JIdG1sNWxpYiwgc2VsZikuX19pbml0X18obmFtZXNwYWNlSFRNTEVsZW1lbnRzKQorCisgICAgZGVmIGRvY3VtZW50Q2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuc291cC5yZXNldCgpCisgICAgICAgIHJldHVybiBFbGVtZW50KHNlbGYuc291cCwgc2VsZi5zb3VwLCBOb25lKQorCisgICAgZGVmIGluc2VydERvY3R5cGUoc2VsZiwgdG9rZW4pOgorICAgICAgICBuYW1lID0gdG9rZW5bIm5hbWUiXQorICAgICAgICBwdWJsaWNJZCA9IHRva2VuWyJwdWJsaWNJZCJdCisgICAgICAgIHN5c3RlbUlkID0gdG9rZW5bInN5c3RlbUlkIl0KKworICAgICAgICBkb2N0eXBlID0gRG9jdHlwZS5mb3JfbmFtZV9hbmRfaWRzKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkKKyAgICAgICAgc2VsZi5zb3VwLm9iamVjdF93YXNfcGFyc2VkKGRvY3R5cGUpCisKKyAgICBkZWYgZWxlbWVudENsYXNzKHNlbGYsIG5hbWUsIG5hbWVzcGFjZSk6CisgICAgICAgIHRhZyA9IHNlbGYuc291cC5uZXdfdGFnKG5hbWUsIG5hbWVzcGFjZSkKKyAgICAgICAgcmV0dXJuIEVsZW1lbnQodGFnLCBzZWxmLnNvdXAsIG5hbWVzcGFjZSkKKworICAgIGRlZiBjb21tZW50Q2xhc3Moc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBUZXh0Tm9kZShDb21tZW50KGRhdGEpLCBzZWxmLnNvdXApCisKKyAgICBkZWYgZnJhZ21lbnRDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5zb3VwID0gQmVhdXRpZnVsU291cCgiIikKKyAgICAgICAgc2VsZi5zb3VwLm5hbWUgPSAiW2RvY3VtZW50X2ZyYWdtZW50XSIKKyAgICAgICAgcmV0dXJuIEVsZW1lbnQoc2VsZi5zb3VwLCBzZWxmLnNvdXAsIE5vbmUpCisKKyAgICBkZWYgYXBwZW5kQ2hpbGQoc2VsZiwgbm9kZSk6CisgICAgICAgICMgWFhYIFRoaXMgY29kZSBpcyBub3QgY292ZXJlZCBieSB0aGUgQlM0IHRlc3RzLgorICAgICAgICBzZWxmLnNvdXAuYXBwZW5kKG5vZGUuZWxlbWVudCkKKworICAgIGRlZiBnZXREb2N1bWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cAorCisgICAgZGVmIGdldEZyYWdtZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gaHRtbDVsaWIudHJlZWJ1aWxkZXJzLl9iYXNlLlRyZWVCdWlsZGVyLmdldEZyYWdtZW50KHNlbGYpLmVsZW1lbnQKKworY2xhc3MgQXR0ckxpc3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudCk6CisgICAgICAgIHNlbGYuZWxlbWVudCA9IGVsZW1lbnQKKyAgICAgICAgc2VsZi5hdHRycyA9IGRpY3Qoc2VsZi5lbGVtZW50LmF0dHJzKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5hdHRycy5pdGVtcygpKS5fX2l0ZXJfXygpCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgInNldCBhdHRyIiwgbmFtZSwgdmFsdWUKKyAgICAgICAgc2VsZi5lbGVtZW50W25hbWVdID0gdmFsdWUKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuYXR0cnMuaXRlbXMoKSkKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5hdHRycy5rZXlzKCkpCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5hdHRycykKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLmF0dHJzW25hbWVdCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgaW4gbGlzdChzZWxmLmF0dHJzLmtleXMoKSkKKworCitjbGFzcyBFbGVtZW50KGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5Ob2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudCwgc291cCwgbmFtZXNwYWNlKToKKyAgICAgICAgaHRtbDVsaWIudHJlZWJ1aWxkZXJzLl9iYXNlLk5vZGUuX19pbml0X18oc2VsZiwgZWxlbWVudC5uYW1lKQorICAgICAgICBzZWxmLmVsZW1lbnQgPSBlbGVtZW50CisgICAgICAgIHNlbGYuc291cCA9IHNvdXAKKyAgICAgICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKKworICAgIGRlZiBhcHBlbmRDaGlsZChzZWxmLCBub2RlKToKKyAgICAgICAgc3RyaW5nX2NoaWxkID0gY2hpbGQgPSBOb25lCisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAjIFNvbWUgb3RoZXIgcGllY2Ugb2YgY29kZSBkZWNpZGVkIHRvIHBhc3MgaW4gYSBzdHJpbmcKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiBjcmVhdGluZyBhIFRleHRFbGVtZW50IG9iamVjdCB0byBjb250YWluIHRoZQorICAgICAgICAgICAgIyBzdHJpbmcuCisgICAgICAgICAgICBzdHJpbmdfY2hpbGQgPSBjaGlsZCA9IG5vZGUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIFRhZyk6CisgICAgICAgICAgICAjIFNvbWUgb3RoZXIgcGllY2Ugb2YgY29kZSBkZWNpZGVkIHRvIHBhc3MgaW4gYSBUYWcKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiBjcmVhdGluZyBhbiBFbGVtZW50IG9iamVjdCB0byBjb250YWluIHRoZQorICAgICAgICAgICAgIyBUYWcuCisgICAgICAgICAgICBjaGlsZCA9IG5vZGUKKyAgICAgICAgZWxpZiBub2RlLmVsZW1lbnQuX19jbGFzc19fID09IE5hdmlnYWJsZVN0cmluZzoKKyAgICAgICAgICAgIHN0cmluZ19jaGlsZCA9IGNoaWxkID0gbm9kZS5lbGVtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjaGlsZCA9IG5vZGUuZWxlbWVudAorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNoaWxkLCBiYXNlc3RyaW5nKSBhbmQgY2hpbGQucGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbm9kZS5lbGVtZW50LmV4dHJhY3QoKQorCisgICAgICAgIGlmIChzdHJpbmdfY2hpbGQgYW5kIHNlbGYuZWxlbWVudC5jb250ZW50cworICAgICAgICAgICAgYW5kIHNlbGYuZWxlbWVudC5jb250ZW50c1stMV0uX19jbGFzc19fID09IE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICAjIFdlIGFyZSBhcHBlbmRpbmcgYSBzdHJpbmcgb250byBhbm90aGVyIHN0cmluZy4KKyAgICAgICAgICAgICMgVE9ETyBUaGlzIGhhcyBPKG5eMikgcGVyZm9ybWFuY2UsIGZvciBpbnB1dCBsaWtlCisgICAgICAgICAgICAjICJhPC9hPmE8L2E+YTwvYT4uLi4iCisgICAgICAgICAgICBvbGRfZWxlbWVudCA9IHNlbGYuZWxlbWVudC5jb250ZW50c1stMV0KKyAgICAgICAgICAgIG5ld19lbGVtZW50ID0gc2VsZi5zb3VwLm5ld19zdHJpbmcob2xkX2VsZW1lbnQgKyBzdHJpbmdfY2hpbGQpCisgICAgICAgICAgICBvbGRfZWxlbWVudC5yZXBsYWNlX3dpdGgobmV3X2VsZW1lbnQpCisgICAgICAgICAgICBzZWxmLnNvdXAuX21vc3RfcmVjZW50X2VsZW1lbnQgPSBuZXdfZWxlbWVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIGJyYW5kIG5ldyBOYXZpZ2FibGVTdHJpbmcgZnJvbSB0aGlzIHN0cmluZy4KKyAgICAgICAgICAgICAgICBjaGlsZCA9IHNlbGYuc291cC5uZXdfc3RyaW5nKG5vZGUpCisKKyAgICAgICAgICAgICMgVGVsbCBCZWF1dGlmdWwgU291cCB0byBhY3QgYXMgaWYgaXQgcGFyc2VkIHRoaXMgZWxlbWVudAorICAgICAgICAgICAgIyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcGFyZW50J3MgbGFzdCBkZXNjZW5kYW50LiAoT3IKKyAgICAgICAgICAgICMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHBhcmVudCwgaWYgaXQgaGFzIG5vIGNoaWxkcmVuLikKKyAgICAgICAgICAgIGlmIHNlbGYuZWxlbWVudC5jb250ZW50czoKKyAgICAgICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50ID0gc2VsZi5lbGVtZW50Ll9sYXN0X2Rlc2NlbmRhbnQoRmFsc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vc3RfcmVjZW50X2VsZW1lbnQgPSBzZWxmLmVsZW1lbnQKKworICAgICAgICAgICAgc2VsZi5zb3VwLm9iamVjdF93YXNfcGFyc2VkKAorICAgICAgICAgICAgICAgIGNoaWxkLCBwYXJlbnQ9c2VsZi5lbGVtZW50LAorICAgICAgICAgICAgICAgIG1vc3RfcmVjZW50X2VsZW1lbnQ9bW9zdF9yZWNlbnRfZWxlbWVudCkKKworICAgIGRlZiBnZXRBdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gQXR0ckxpc3Qoc2VsZi5lbGVtZW50KQorCisgICAgZGVmIHNldEF0dHJpYnV0ZXMoc2VsZiwgYXR0cmlidXRlcyk6CisgICAgICAgIGlmIGF0dHJpYnV0ZXMgaXMgbm90IE5vbmUgYW5kIGxlbihhdHRyaWJ1dGVzKSA+IDA6CisKKyAgICAgICAgICAgIGNvbnZlcnRlZF9hdHRyaWJ1dGVzID0gW10KKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBsaXN0KGF0dHJpYnV0ZXMuaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCB0dXBsZSk6CisgICAgICAgICAgICAgICAgICAgIG5ld19uYW1lID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgqbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIGF0dHJpYnV0ZXNbbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1tuZXdfbmFtZV0gPSB2YWx1ZQorCisgICAgICAgICAgICBzZWxmLnNvdXAuYnVpbGRlci5fcmVwbGFjZV9jZGF0YV9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoCisgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGF0dHJpYnV0ZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnRbbmFtZV0gPSB2YWx1ZQorCisgICAgICAgICAgICAjIFRoZSBhdHRyaWJ1dGVzIG1heSBjb250YWluIHZhcmlhYmxlcyB0aGF0IG5lZWQgc3Vic3RpdHV0aW9uLgorICAgICAgICAgICAgIyBDYWxsIHNldF91cF9zdWJzdGl0dXRpb25zIG1hbnVhbGx5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGUgVGFnIGNvbnN0cnVjdG9yIGNhbGxlZCB0aGlzIG1ldGhvZCB3aGVuIHRoZSBUYWcgd2FzIGNyZWF0ZWQsCisgICAgICAgICAgICAjIGJ1dCB3ZSBqdXN0IHNldC9jaGFuZ2VkIHRoZSBhdHRyaWJ1dGVzLCBzbyBjYWxsIGl0IGFnYWluLgorICAgICAgICAgICAgc2VsZi5zb3VwLmJ1aWxkZXIuc2V0X3VwX3N1YnN0aXR1dGlvbnMoc2VsZi5lbGVtZW50KQorICAgIGF0dHJpYnV0ZXMgPSBwcm9wZXJ0eShnZXRBdHRyaWJ1dGVzLCBzZXRBdHRyaWJ1dGVzKQorCisgICAgZGVmIGluc2VydFRleHQoc2VsZiwgZGF0YSwgaW5zZXJ0QmVmb3JlPU5vbmUpOgorICAgICAgICBpZiBpbnNlcnRCZWZvcmU6CisgICAgICAgICAgICB0ZXh0ID0gVGV4dE5vZGUoc2VsZi5zb3VwLm5ld19zdHJpbmcoZGF0YSksIHNlbGYuc291cCkKKyAgICAgICAgICAgIHNlbGYuaW5zZXJ0QmVmb3JlKGRhdGEsIGluc2VydEJlZm9yZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kQ2hpbGQoZGF0YSkKKworICAgIGRlZiBpbnNlcnRCZWZvcmUoc2VsZiwgbm9kZSwgcmVmTm9kZSk6CisgICAgICAgIGluZGV4ID0gc2VsZi5lbGVtZW50LmluZGV4KHJlZk5vZGUuZWxlbWVudCkKKyAgICAgICAgaWYgKG5vZGUuZWxlbWVudC5fX2NsYXNzX18gPT0gTmF2aWdhYmxlU3RyaW5nIGFuZCBzZWxmLmVsZW1lbnQuY29udGVudHMKKyAgICAgICAgICAgIGFuZCBzZWxmLmVsZW1lbnQuY29udGVudHNbaW5kZXgtMV0uX19jbGFzc19fID09IE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICAjIChTZWUgY29tbWVudHMgaW4gYXBwZW5kQ2hpbGQpCisgICAgICAgICAgICBvbGRfbm9kZSA9IHNlbGYuZWxlbWVudC5jb250ZW50c1tpbmRleC0xXQorICAgICAgICAgICAgbmV3X3N0ciA9IHNlbGYuc291cC5uZXdfc3RyaW5nKG9sZF9ub2RlICsgbm9kZS5lbGVtZW50KQorICAgICAgICAgICAgb2xkX25vZGUucmVwbGFjZV93aXRoKG5ld19zdHIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVsZW1lbnQuaW5zZXJ0KGluZGV4LCBub2RlLmVsZW1lbnQpCisgICAgICAgICAgICBub2RlLnBhcmVudCA9IHNlbGYKKworICAgIGRlZiByZW1vdmVDaGlsZChzZWxmLCBub2RlKToKKyAgICAgICAgbm9kZS5lbGVtZW50LmV4dHJhY3QoKQorCisgICAgZGVmIHJlcGFyZW50Q2hpbGRyZW4oc2VsZiwgbmV3X3BhcmVudCk6CisgICAgICAgICIiIk1vdmUgYWxsIG9mIHRoaXMgdGFnJ3MgY2hpbGRyZW4gaW50byBhbm90aGVyIHRhZy4iIiIKKyAgICAgICAgZWxlbWVudCA9IHNlbGYuZWxlbWVudAorICAgICAgICBuZXdfcGFyZW50X2VsZW1lbnQgPSBuZXdfcGFyZW50LmVsZW1lbnQKKyAgICAgICAgIyBEZXRlcm1pbmUgd2hhdCB0aGlzIHRhZydzIG5leHRfZWxlbWVudCB3aWxsIGJlIG9uY2UgYWxsIHRoZSBjaGlsZHJlbgorICAgICAgICAjIGFyZSByZW1vdmVkLgorICAgICAgICBmaW5hbF9uZXh0X2VsZW1lbnQgPSBlbGVtZW50Lm5leHRfc2libGluZworCisgICAgICAgIG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudCA9IG5ld19wYXJlbnRfZWxlbWVudC5fbGFzdF9kZXNjZW5kYW50KEZhbHNlLCBGYWxzZSkKKyAgICAgICAgaWYgbGVuKG5ld19wYXJlbnRfZWxlbWVudC5jb250ZW50cykgPiAwOgorICAgICAgICAgICAgIyBUaGUgbmV3IHBhcmVudCBhbHJlYWR5IGNvbnRhaW5zIGNoaWxkcmVuLiBXZSB3aWxsIGJlCisgICAgICAgICAgICAjIGFwcGVuZGluZyB0aGlzIHRhZydzIGNoaWxkcmVuIHRvIHRoZSBlbmQuCisgICAgICAgICAgICBuZXdfcGFyZW50c19sYXN0X2NoaWxkID0gbmV3X3BhcmVudF9lbGVtZW50LmNvbnRlbnRzWy0xXQorICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50X25leHRfZWxlbWVudCA9IG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudC5uZXh0X2VsZW1lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIG5ldyBwYXJlbnQgY29udGFpbnMgbm8gY2hpbGRyZW4uCisgICAgICAgICAgICBuZXdfcGFyZW50c19sYXN0X2NoaWxkID0gTm9uZQorICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50X25leHRfZWxlbWVudCA9IG5ld19wYXJlbnRfZWxlbWVudC5uZXh0X2VsZW1lbnQKKworICAgICAgICB0b19hcHBlbmQgPSBlbGVtZW50LmNvbnRlbnRzCisgICAgICAgIGFwcGVuZF9hZnRlciA9IG5ld19wYXJlbnQuZWxlbWVudC5jb250ZW50cworICAgICAgICBpZiBsZW4odG9fYXBwZW5kKSA+IDA6CisgICAgICAgICAgICAjIFNldCB0aGUgZmlyc3QgY2hpbGQncyBwcmV2aW91c19lbGVtZW50IGFuZCBwcmV2aW91c19zaWJsaW5nCisgICAgICAgICAgICAjIHRvIGVsZW1lbnRzIHdpdGhpbiB0aGUgbmV3IHBhcmVudAorICAgICAgICAgICAgZmlyc3RfY2hpbGQgPSB0b19hcHBlbmRbMF0KKyAgICAgICAgICAgIGZpcnN0X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQgPSBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnQKKyAgICAgICAgICAgIGZpcnN0X2NoaWxkLnByZXZpb3VzX3NpYmxpbmcgPSBuZXdfcGFyZW50c19sYXN0X2NoaWxkCisKKyAgICAgICAgICAgICMgRml4IHRoZSBsYXN0IGNoaWxkJ3MgbmV4dF9lbGVtZW50IGFuZCBuZXh0X3NpYmxpbmcKKyAgICAgICAgICAgIGxhc3RfY2hpbGQgPSB0b19hcHBlbmRbLTFdCisgICAgICAgICAgICBsYXN0X2NoaWxkLm5leHRfZWxlbWVudCA9IG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudF9uZXh0X2VsZW1lbnQKKyAgICAgICAgICAgIGxhc3RfY2hpbGQubmV4dF9zaWJsaW5nID0gTm9uZQorCisgICAgICAgIGZvciBjaGlsZCBpbiB0b19hcHBlbmQ6CisgICAgICAgICAgICBjaGlsZC5wYXJlbnQgPSBuZXdfcGFyZW50X2VsZW1lbnQKKyAgICAgICAgICAgIG5ld19wYXJlbnRfZWxlbWVudC5jb250ZW50cy5hcHBlbmQoY2hpbGQpCisKKyAgICAgICAgIyBOb3cgdGhhdCB0aGlzIGVsZW1lbnQgaGFzIG5vIGNoaWxkcmVuLCBjaGFuZ2UgaXRzIC5uZXh0X2VsZW1lbnQuCisgICAgICAgIGVsZW1lbnQuY29udGVudHMgPSBbXQorICAgICAgICBlbGVtZW50Lm5leHRfZWxlbWVudCA9IGZpbmFsX25leHRfZWxlbWVudAorCisgICAgZGVmIGNsb25lTm9kZShzZWxmKToKKyAgICAgICAgdGFnID0gc2VsZi5zb3VwLm5ld190YWcoc2VsZi5lbGVtZW50Lm5hbWUsIHNlbGYubmFtZXNwYWNlKQorICAgICAgICBub2RlID0gRWxlbWVudCh0YWcsIHNlbGYuc291cCwgc2VsZi5uYW1lc3BhY2UpCisgICAgICAgIGZvciBrZXksdmFsdWUgaW4gc2VsZi5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIGhhc0NvbnRlbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVsZW1lbnQuY29udGVudHMKKworICAgIGRlZiBnZXROYW1lVHVwbGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYubmFtZXNwYWNlID09IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlc1siaHRtbCJdLCBzZWxmLm5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWVzcGFjZSwgc2VsZi5uYW1lCisKKyAgICBuYW1lVHVwbGUgPSBwcm9wZXJ0eShnZXROYW1lVHVwbGUpCisKK2NsYXNzIFRleHROb2RlKEVsZW1lbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50LCBzb3VwKToKKyAgICAgICAgaHRtbDVsaWIudHJlZWJ1aWxkZXJzLl9iYXNlLk5vZGUuX19pbml0X18oc2VsZiwgTm9uZSkKKyAgICAgICAgc2VsZi5lbGVtZW50ID0gZWxlbWVudAorICAgICAgICBzZWxmLnNvdXAgPSBzb3VwCisKKyAgICBkZWYgY2xvbmVOb2RlKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1scGFyc2VyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbHBhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYThkOGI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbHBhcnNlci5weQpAQCAtMCwwICsxLDI1OCBAQAorIiIiVXNlIHRoZSBIVE1MUGFyc2VyIGxpYnJhcnkgdG8gcGFyc2UgSFRNTCBmaWxlcyB0aGF0IGFyZW4ndCB0b28gYmFkLiIiIgorCitfX2FsbF9fID0gWworICAgICdIVE1MUGFyc2VyVHJlZUJ1aWxkZXInLAorICAgIF0KKworZnJvbSBIVE1MUGFyc2VyIGltcG9ydCAoCisgICAgSFRNTFBhcnNlciwKKyAgICBIVE1MUGFyc2VFcnJvciwKKyAgICApCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKKworIyBTdGFydGluZyBpbiBQeXRob24gMy4yLCB0aGUgSFRNTFBhcnNlciBjb25zdHJ1Y3RvciB0YWtlcyBhICdzdHJpY3QnCisjIGFyZ3VtZW50LCB3aGljaCB3ZSdkIGxpa2UgdG8gc2V0IHRvIEZhbHNlLiBVbmZvcnR1bmF0ZWx5LAorIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMyNzMgbWFrZXMgc3RyaWN0PVRydWUgYSBiZXR0ZXIgYmV0CisjIGJlZm9yZSBQeXRob24gMy4yLjMuCisjCisjIEF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLCB3ZSBtb25rZXlwYXRjaCBIVE1MUGFyc2VyIHNvIHRoYXQKKyMgc3RyaWN0PVRydWUgd29ya3Mgd2VsbCBvbiBQeXRob24gMy4yLjIuCittYWpvciwgbWlub3IsIHJlbGVhc2UgPSBzeXMudmVyc2lvbl9pbmZvWzozXQorQ09OU1RSVUNUT1JfVEFLRVNfU1RSSUNUID0gKAorICAgIG1ham9yID4gMworICAgIG9yIChtYWpvciA9PSAzIGFuZCBtaW5vciA+IDIpCisgICAgb3IgKG1ham9yID09IDMgYW5kIG1pbm9yID09IDIgYW5kIHJlbGVhc2UgPj0gMykpCisKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDRGF0YSwKKyAgICBDb21tZW50LAorICAgIERlY2xhcmF0aW9uLAorICAgIERvY3R5cGUsCisgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uLAorICAgICkKK2Zyb20gYnM0LmRhbW1pdCBpbXBvcnQgRW50aXR5U3Vic3RpdHV0aW9uLCBVbmljb2RlRGFtbWl0CisKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBIVE1MLAorICAgIEhUTUxUcmVlQnVpbGRlciwKKyAgICBTVFJJQ1QsCisgICAgKQorCisKK0hUTUxQQVJTRVIgPSAnaHRtbC5wYXJzZXInCisKK2NsYXNzIEJlYXV0aWZ1bFNvdXBIVE1MUGFyc2VyKEhUTUxQYXJzZXIpOgorICAgIGRlZiBoYW5kbGVfc3RhcnR0YWcoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICAjIFhYWCBuYW1lc3BhY2UKKyAgICAgICAgYXR0cl9kaWN0ID0ge30KKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0cnM6CisgICAgICAgICAgICAjIENoYW5nZSBOb25lIGF0dHJpYnV0ZSB2YWx1ZXMgdG8gdGhlIGVtcHR5IHN0cmluZworICAgICAgICAgICAgIyBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgdHJlZSBidWlsZGVycy4KKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAnJworICAgICAgICAgICAgYXR0cl9kaWN0W2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgYXR0cnZhbHVlID0gJyIiJworICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX3N0YXJ0dGFnKG5hbWUsIE5vbmUsIE5vbmUsIGF0dHJfZGljdCkKKworICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2VuZHRhZyhuYW1lKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoZGF0YSkKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgIyBYWFggd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gSFRNTFBhcnNlci4gUmVtb3ZlIHRoaXMgb25jZQorICAgICAgICAjIGl0J3MgZml4ZWQuCisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgneCcpOgorICAgICAgICAgICAgcmVhbF9uYW1lID0gaW50KG5hbWUubHN0cmlwKCd4JyksIDE2KQorICAgICAgICBlbGlmIG5hbWUuc3RhcnRzd2l0aCgnWCcpOgorICAgICAgICAgICAgcmVhbF9uYW1lID0gaW50KG5hbWUubHN0cmlwKCdYJyksIDE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhbF9uYW1lID0gaW50KG5hbWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHVuaWNocihyZWFsX25hbWUpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvciksIGU6CisgICAgICAgICAgICBkYXRhID0gdSJcTntSRVBMQUNFTUVOVCBDSEFSQUNURVJ9IgorCisgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoZGF0YSkKKworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIG5hbWUpOgorICAgICAgICBjaGFyYWN0ZXIgPSBFbnRpdHlTdWJzdGl0dXRpb24uSFRNTF9FTlRJVFlfVE9fQ0hBUkFDVEVSLmdldChuYW1lKQorICAgICAgICBpZiBjaGFyYWN0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkYXRhID0gY2hhcmFjdGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhID0gIiYlczsiICUgbmFtZQorICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2NvbW1lbnQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKENvbW1lbnQpCisKKyAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgaWYgZGF0YS5zdGFydHN3aXRoKCJET0NUWVBFICIpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbbGVuKCJET0NUWVBFICIpOl0KKyAgICAgICAgZWxpZiBkYXRhID09ICdET0NUWVBFJzoKKyAgICAgICAgICAgICMgaS5lLiAiPCFET0NUWVBFPiIKKyAgICAgICAgICAgIGRhdGEgPSAnJworICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoZGF0YSkKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoRG9jdHlwZSkKKworICAgIGRlZiB1bmtub3duX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGRhdGEudXBwZXIoKS5zdGFydHN3aXRoKCdDREFUQVsnKToKKyAgICAgICAgICAgIGNscyA9IENEYXRhCisgICAgICAgICAgICBkYXRhID0gZGF0YVtsZW4oJ0NEQVRBWycpOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNscyA9IERlY2xhcmF0aW9uCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKGNscykKKworICAgIGRlZiBoYW5kbGVfcGkoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgaWYgZGF0YS5lbmRzd2l0aCgiPyIpIGFuZCBkYXRhLmxvd2VyKCkuc3RhcnRzd2l0aCgieG1sIik6CisgICAgICAgICAgICAjICJBbiBYSFRNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHVzaW5nIHRoZSB0cmFpbGluZyAnPycKKyAgICAgICAgICAgICMgd2lsbCBjYXVzZSB0aGUgJz8nIHRvIGJlIGluY2x1ZGVkIGluIGRhdGEuIiAtIEhUTUxQYXJzZXIKKyAgICAgICAgICAgICMgZG9jcy4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgU3RyaXAgdGhlIHF1ZXN0aW9uIG1hcmsgc28gd2UgZG9uJ3QgZW5kIHVwIHdpdGggdHdvCisgICAgICAgICAgICAjIHF1ZXN0aW9uIG1hcmtzLgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbOi0xXQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoZGF0YSkKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoUHJvY2Vzc2luZ0luc3RydWN0aW9uKQorCisKK2NsYXNzIEhUTUxQYXJzZXJUcmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXIpOgorCisgICAgaXNfeG1sID0gRmFsc2UKKyAgICBmZWF0dXJlcyA9IFtIVE1MLCBTVFJJQ1QsIEhUTUxQQVJTRVJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgQ09OU1RSVUNUT1JfVEFLRVNfU1RSSUNUOgorICAgICAgICAgICAga3dhcmdzWydzdHJpY3QnXSA9IEZhbHNlCisgICAgICAgIHNlbGYucGFyc2VyX2FyZ3MgPSAoYXJncywga3dhcmdzKQorCisgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICA6cmV0dXJuOiBBIDQtdHVwbGUgKG1hcmt1cCwgb3JpZ2luYWwgZW5jb2RpbmcsIGVuY29kaW5nCisgICAgICAgIGRlY2xhcmVkIHdpdGhpbiBtYXJrdXAsIHdoZXRoZXIgYW55IGNoYXJhY3RlcnMgaGFkIHRvIGJlCisgICAgICAgIHJlcGxhY2VkIHdpdGggUkVQTEFDRU1FTlQgQ0hBUkFDVEVSKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgIHlpZWxkIChtYXJrdXAsIE5vbmUsIE5vbmUsIEZhbHNlKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5X2VuY29kaW5ncyA9IFt1c2VyX3NwZWNpZmllZF9lbmNvZGluZywgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmddCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwLCB0cnlfZW5jb2RpbmdzLCBpc19odG1sPVRydWUpCisgICAgICAgIHlpZWxkIChkYW1taXQubWFya3VwLCBkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcsCisgICAgICAgICAgICAgICBkYW1taXQuZGVjbGFyZWRfaHRtbF9lbmNvZGluZywKKyAgICAgICAgICAgICAgIGRhbW1pdC5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKQorCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgYXJncywga3dhcmdzID0gc2VsZi5wYXJzZXJfYXJncworICAgICAgICBwYXJzZXIgPSBCZWF1dGlmdWxTb3VwSFRNTFBhcnNlcigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHBhcnNlci5zb3VwID0gc2VsZi5zb3VwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5mZWVkKG1hcmt1cCkKKyAgICAgICAgZXhjZXB0IEhUTUxQYXJzZUVycm9yLCBlOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybihSdW50aW1lV2FybmluZygKKyAgICAgICAgICAgICAgICAiUHl0aG9uJ3MgYnVpbHQtaW4gSFRNTFBhcnNlciBjYW5ub3QgcGFyc2UgdGhlIGdpdmVuIGRvY3VtZW50LiBUaGlzIGlzIG5vdCBhIGJ1ZyBpbiBCZWF1dGlmdWwgU291cC4gVGhlIGJlc3Qgc29sdXRpb24gaXMgdG8gaW5zdGFsbCBhbiBleHRlcm5hbCBwYXJzZXIgKGx4bWwgb3IgaHRtbDVsaWIpLCBhbmQgdXNlIEJlYXV0aWZ1bCBTb3VwIHdpdGggdGhhdCBwYXJzZXIuIFNlZSBodHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC9iczQvZG9jLyNpbnN0YWxsaW5nLWEtcGFyc2VyIGZvciBoZWxwLiIpKQorICAgICAgICAgICAgcmFpc2UgZQorCisjIFBhdGNoIDMuMiB2ZXJzaW9ucyBvZiBIVE1MUGFyc2VyIGVhcmxpZXIgdGhhbiAzLjIuMyB0byB1c2Ugc29tZQorIyAzLjIuMyBjb2RlLiBUaGlzIGVuc3VyZXMgdGhleSBkb24ndCB0cmVhdCBtYXJrdXAgbGlrZSA8cD48L3A+IGFzIGEKKyMgc3RyaW5nLgorIworIyBYWFggVGhpcyBjb2RlIGNhbiBiZSByZW1vdmVkIG9uY2UgbW9zdCBQeXRob24gMyB1c2VycyBhcmUgb24gMy4yLjMuCitpZiBtYWpvciA9PSAzIGFuZCBtaW5vciA9PSAyIGFuZCBub3QgQ09OU1RSVUNUT1JfVEFLRVNfU1RSSUNUOgorICAgIGltcG9ydCByZQorICAgIGF0dHJmaW5kX3RvbGVyYW50ID0gcmUuY29tcGlsZSgKKyAgICAgICAgcidccyooKD88PVtcJyJcc10pW15ccy8+XVteXHMvPT5dKikoXHMqPStccyonCisgICAgICAgIHInKFwnW15cJ10qXCd8IlteIl0qInwoPyFbXCciXSlbXj5cc10qKSk/JykKKyAgICBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIuYXR0cmZpbmRfdG9sZXJhbnQgPSBhdHRyZmluZF90b2xlcmFudAorCisgICAgbG9jYXRlc3RhcnR0YWdlbmQgPSByZS5jb21waWxlKHIiIiIKKyAgPFthLXpBLVpdWy0uYS16QS1aMC05Ol9dKiAgICAgICAgICAjIHRhZyBuYW1lCisgICg/OlxzKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3aGl0ZXNwYWNlIGJlZm9yZSBhdHRyaWJ1dGUgbmFtZQorICAgICg/OlthLXpBLVpfXVstLjphLXpBLVowLTlfXSogICAgICMgYXR0cmlidXRlIG5hbWUKKyAgICAgICg/OlxzKj1ccyogICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIGluZGljYXRvcgorICAgICAgICAoPzonW14nXSonICAgICAgICAgICAgICAgICAgICMgTElUQS1lbmNsb3NlZCB2YWx1ZQorICAgICAgICAgIHxcIlteXCJdKlwiICAgICAgICAgICAgICAgICMgTElULWVuY2xvc2VkIHZhbHVlCisgICAgICAgICAgfFteJ1wiPlxzXSsgICAgICAgICAgICAgICAgIyBiYXJlIHZhbHVlCisgICAgICAgICApCisgICAgICAgKT8KKyAgICAgKQorICAgKSoKKyAgXHMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyIiIiwgcmUuVkVSQk9TRSkKKyAgICBCZWF1dGlmdWxTb3VwSFRNTFBhcnNlci5sb2NhdGVzdGFydHRhZ2VuZCA9IGxvY2F0ZXN0YXJ0dGFnZW5kCisKKyAgICBmcm9tIGh0bWwucGFyc2VyIGltcG9ydCB0YWdmaW5kLCBhdHRyZmluZAorCisgICAgZGVmIHBhcnNlX3N0YXJ0dGFnKHNlbGYsIGkpOgorICAgICAgICBzZWxmLl9fc3RhcnR0YWdfdGV4dCA9IE5vbmUKKyAgICAgICAgZW5kcG9zID0gc2VsZi5jaGVja19mb3Jfd2hvbGVfc3RhcnRfdGFnKGkpCisgICAgICAgIGlmIGVuZHBvcyA8IDA6CisgICAgICAgICAgICByZXR1cm4gZW5kcG9zCisgICAgICAgIHJhd2RhdGEgPSBzZWxmLnJhd2RhdGEKKyAgICAgICAgc2VsZi5fX3N0YXJ0dGFnX3RleHQgPSByYXdkYXRhW2k6ZW5kcG9zXQorCisgICAgICAgICMgTm93IHBhcnNlIHRoZSBkYXRhIGJldHdlZW4gaSsxIGFuZCBqIGludG8gYSB0YWcgYW5kIGF0dHJzCisgICAgICAgIGF0dHJzID0gW10KKyAgICAgICAgbWF0Y2ggPSB0YWdmaW5kLm1hdGNoKHJhd2RhdGEsIGkrMSkKKyAgICAgICAgYXNzZXJ0IG1hdGNoLCAndW5leHBlY3RlZCBjYWxsIHRvIHBhcnNlX3N0YXJ0dGFnKCknCisgICAgICAgIGsgPSBtYXRjaC5lbmQoKQorICAgICAgICBzZWxmLmxhc3R0YWcgPSB0YWcgPSByYXdkYXRhW2krMTprXS5sb3dlcigpCisgICAgICAgIHdoaWxlIGsgPCBlbmRwb3M6CisgICAgICAgICAgICBpZiBzZWxmLnN0cmljdDoKKyAgICAgICAgICAgICAgICBtID0gYXR0cmZpbmQubWF0Y2gocmF3ZGF0YSwgaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbSA9IGF0dHJmaW5kX3RvbGVyYW50Lm1hdGNoKHJhd2RhdGEsIGspCisgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYXR0cm5hbWUsIHJlc3QsIGF0dHJ2YWx1ZSA9IG0uZ3JvdXAoMSwgMiwgMykKKyAgICAgICAgICAgIGlmIG5vdCByZXN0OgorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIGVsaWYgYXR0cnZhbHVlWzoxXSA9PSAnXCcnID09IGF0dHJ2YWx1ZVstMTpdIG9yIFwKKyAgICAgICAgICAgICAgICAgYXR0cnZhbHVlWzoxXSA9PSAnIicgPT0gYXR0cnZhbHVlWy0xOl06CisgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gYXR0cnZhbHVlWzE6LTFdCisgICAgICAgICAgICBpZiBhdHRydmFsdWU6CisgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gc2VsZi51bmVzY2FwZShhdHRydmFsdWUpCisgICAgICAgICAgICBhdHRycy5hcHBlbmQoKGF0dHJuYW1lLmxvd2VyKCksIGF0dHJ2YWx1ZSkpCisgICAgICAgICAgICBrID0gbS5lbmQoKQorCisgICAgICAgIGVuZCA9IHJhd2RhdGFbazplbmRwb3NdLnN0cmlwKCkKKyAgICAgICAgaWYgZW5kIG5vdCBpbiAoIj4iLCAiLz4iKToKKyAgICAgICAgICAgIGxpbmVubywgb2Zmc2V0ID0gc2VsZi5nZXRwb3MoKQorICAgICAgICAgICAgaWYgIlxuIiBpbiBzZWxmLl9fc3RhcnR0YWdfdGV4dDoKKyAgICAgICAgICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyBzZWxmLl9fc3RhcnR0YWdfdGV4dC5jb3VudCgiXG4iKQorICAgICAgICAgICAgICAgIG9mZnNldCA9IGxlbihzZWxmLl9fc3RhcnR0YWdfdGV4dCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2VsZi5fX3N0YXJ0dGFnX3RleHQucmZpbmQoIlxuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgbGVuKHNlbGYuX19zdGFydHRhZ190ZXh0KQorICAgICAgICAgICAgaWYgc2VsZi5zdHJpY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigianVuayBjaGFyYWN0ZXJzIGluIHN0YXJ0IHRhZzogJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChyYXdkYXRhW2s6ZW5kcG9zXVs6MjBdLCkpCisgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTplbmRwb3NdKQorICAgICAgICAgICAgcmV0dXJuIGVuZHBvcworICAgICAgICBpZiBlbmQuZW5kc3dpdGgoJy8+Jyk6CisgICAgICAgICAgICAjIFhIVE1MLXN0eWxlIGVtcHR5IHRhZzogPHNwYW4gYXR0cj0idmFsdWUiIC8+CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9zdGFydGVuZHRhZyh0YWcsIGF0dHJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfc3RhcnR0YWcodGFnLCBhdHRycykKKyAgICAgICAgICAgIGlmIHRhZyBpbiBzZWxmLkNEQVRBX0NPTlRFTlRfRUxFTUVOVFM6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfY2RhdGFfbW9kZSh0YWcpCisgICAgICAgIHJldHVybiBlbmRwb3MKKworICAgIGRlZiBzZXRfY2RhdGFfbW9kZShzZWxmLCBlbGVtKToKKyAgICAgICAgc2VsZi5jZGF0YV9lbGVtID0gZWxlbS5sb3dlcigpCisgICAgICAgIHNlbGYuaW50ZXJlc3RpbmcgPSByZS5jb21waWxlKHInPC9ccyolc1xzKj4nICUgc2VsZi5jZGF0YV9lbGVtLCByZS5JKQorCisgICAgQmVhdXRpZnVsU291cEhUTUxQYXJzZXIucGFyc2Vfc3RhcnR0YWcgPSBwYXJzZV9zdGFydHRhZworICAgIEJlYXV0aWZ1bFNvdXBIVE1MUGFyc2VyLnNldF9jZGF0YV9tb2RlID0gc2V0X2NkYXRhX21vZGUKKworICAgIENPTlNUUlVDVE9SX1RBS0VTX1NUUklDVCA9IFRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2x4bWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19seG1sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWQ0OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19seG1sLnB5CkBAIC0wLDAgKzEsMjMzIEBACitfX2FsbF9fID0gWworICAgICdMWE1MVHJlZUJ1aWxkZXJGb3JYTUwnLAorICAgICdMWE1MVHJlZUJ1aWxkZXInLAorICAgIF0KKworZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBjb2xsZWN0aW9ucworZnJvbSBseG1sIGltcG9ydCBldHJlZQorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgQ29tbWVudCwgRG9jdHlwZSwgTmFtZXNwYWNlZEF0dHJpYnV0ZQorZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAorICAgIEZBU1QsCisgICAgSFRNTCwKKyAgICBIVE1MVHJlZUJ1aWxkZXIsCisgICAgUEVSTUlTU0lWRSwKKyAgICBQYXJzZXJSZWplY3RlZE1hcmt1cCwKKyAgICBUcmVlQnVpbGRlciwKKyAgICBYTUwpCitmcm9tIGJzNC5kYW1taXQgaW1wb3J0IEVuY29kaW5nRGV0ZWN0b3IKKworTFhNTCA9ICdseG1sJworCitjbGFzcyBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwoVHJlZUJ1aWxkZXIpOgorICAgIERFRkFVTFRfUEFSU0VSX0NMQVNTID0gZXRyZWUuWE1MUGFyc2VyCisKKyAgICBpc194bWwgPSBUcnVlCisKKyAgICAjIFdlbGwsIGl0J3MgcGVybWlzc2l2ZSBieSBYTUwgcGFyc2VyIHN0YW5kYXJkcy4KKyAgICBmZWF0dXJlcyA9IFtMWE1MLCBYTUwsIEZBU1QsIFBFUk1JU1NJVkVdCisKKyAgICBDSFVOS19TSVpFID0gNTEyCisKKyAgICAjIFRoaXMgbmFtZXNwYWNlIG1hcHBpbmcgaXMgc3BlY2lmaWVkIGluIHRoZSBYTUwgTmFtZXNwYWNlCisgICAgIyBzdGFuZGFyZC4KKyAgICBERUZBVUxUX05TTUFQUyA9IHsnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJyA6ICJ4bWwifQorCisgICAgZGVmIGRlZmF1bHRfcGFyc2VyKHNlbGYsIGVuY29kaW5nKToKKyAgICAgICAgIyBUaGlzIGNhbiBlaXRoZXIgcmV0dXJuIGEgcGFyc2VyIG9iamVjdCBvciBhIGNsYXNzLCB3aGljaAorICAgICAgICAjIHdpbGwgYmUgaW5zdGFudGlhdGVkIHdpdGggZGVmYXVsdCBhcmd1bWVudHMuCisgICAgICAgIGlmIHNlbGYuX2RlZmF1bHRfcGFyc2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlZmF1bHRfcGFyc2VyCisgICAgICAgIHJldHVybiBldHJlZS5YTUxQYXJzZXIoCisgICAgICAgICAgICB0YXJnZXQ9c2VsZiwgc3RyaXBfY2RhdGE9RmFsc2UsIHJlY292ZXI9VHJ1ZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpCisKKyAgICBkZWYgcGFyc2VyX2ZvcihzZWxmLCBlbmNvZGluZyk6CisgICAgICAgICMgVXNlIHRoZSBkZWZhdWx0IHBhcnNlci4KKyAgICAgICAgcGFyc2VyID0gc2VsZi5kZWZhdWx0X3BhcnNlcihlbmNvZGluZykKKworICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnNlciwgY29sbGVjdGlvbnMuQ2FsbGFibGUpOgorICAgICAgICAgICAgIyBJbnN0YW50aWF0ZSB0aGUgcGFyc2VyIHdpdGggZGVmYXVsdCBhcmd1bWVudHMKKyAgICAgICAgICAgIHBhcnNlciA9IHBhcnNlcih0YXJnZXQ9c2VsZiwgc3RyaXBfY2RhdGE9RmFsc2UsIGVuY29kaW5nPWVuY29kaW5nKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyc2VyPU5vbmUsIGVtcHR5X2VsZW1lbnRfdGFncz1Ob25lKToKKyAgICAgICAgIyBUT0RPOiBJc3N1ZSBhIHdhcm5pbmcgaWYgcGFyc2VyIGlzIHByZXNlbnQgYnV0IG5vdCBhCisgICAgICAgICMgY2FsbGFibGUsIHNpbmNlIHRoYXQgbWVhbnMgdGhlcmUncyBubyB3YXkgdG8gY3JlYXRlIG5ldworICAgICAgICAjIHBhcnNlcnMgZm9yIGRpZmZlcmVudCBlbmNvZGluZ3MuCisgICAgICAgIHNlbGYuX2RlZmF1bHRfcGFyc2VyID0gcGFyc2VyCisgICAgICAgIGlmIGVtcHR5X2VsZW1lbnRfdGFncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZW1wdHlfZWxlbWVudF90YWdzID0gc2V0KGVtcHR5X2VsZW1lbnRfdGFncykKKyAgICAgICAgc2VsZi5zb3VwID0gTm9uZQorICAgICAgICBzZWxmLm5zbWFwcyA9IFtzZWxmLkRFRkFVTFRfTlNNQVBTXQorCisgICAgZGVmIF9nZXROc1RhZyhzZWxmLCB0YWcpOgorICAgICAgICAjIFNwbGl0IHRoZSBuYW1lc3BhY2UgVVJMIG91dCBvZiBhIGZ1bGx5LXF1YWxpZmllZCBseG1sIHRhZworICAgICAgICAjIG5hbWUuIENvcGllZCBmcm9tIGx4bWwncyBzcmMvbHhtbC9zYXgucHkuCisgICAgICAgIGlmIHRhZ1swXSA9PSAneyc6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUodGFnWzE6XS5zcGxpdCgnfScsIDEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChOb25lLCB0YWcpCisKKyAgICBkZWYgcHJlcGFyZV9tYXJrdXAoc2VsZiwgbWFya3VwLCB1c2VyX3NwZWNpZmllZF9lbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIDp5aWVsZDogQSBzZXJpZXMgb2YgNC10dXBsZXMuCisgICAgICAgICAobWFya3VwLCBlbmNvZGluZywgZGVjbGFyZWQgZW5jb2RpbmcsCisgICAgICAgICAgaGFzIHVuZGVyZ29uZSBjaGFyYWN0ZXIgcmVwbGFjZW1lbnQpCisKKyAgICAgICAgRWFjaCA0LXR1cGxlIHJlcHJlc2VudHMgYSBzdHJhdGVneSBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICAjIFdlIHdlcmUgZ2l2ZW4gVW5pY29kZS4gTWF5YmUgbHhtbCBjYW4gcGFyc2UgVW5pY29kZSBvbgorICAgICAgICAgICAgIyB0aGlzIHN5c3RlbT8KKyAgICAgICAgICAgIHlpZWxkIG1hcmt1cCwgTm9uZSwgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmcsIEZhbHNlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgIyBObywgYXBwYXJlbnRseSBub3QuIENvbnZlcnQgdGhlIFVuaWNvZGUgdG8gVVRGLTggYW5kCisgICAgICAgICAgICAjIHRlbGwgbHhtbCB0byBwYXJzZSBpdCBhcyBVVEYtOC4KKyAgICAgICAgICAgIHlpZWxkIChtYXJrdXAuZW5jb2RlKCJ1dGY4IiksICJ1dGY4IiwKKyAgICAgICAgICAgICAgICAgICBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZywgRmFsc2UpCisKKyAgICAgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIFVuaWNvZGVEYW1taXQgdG8gY29udmVydCB0aGUgYnl0ZXN0cmluZyB0bworICAgICAgICAjIFVuaWNvZGUgdXNpbmcgZGlmZmVyZW50IGVuY29kaW5ncywgdXNlIEVuY29kaW5nRGV0ZWN0b3IgdG8KKyAgICAgICAgIyBpdGVyYXRlIG92ZXIgdGhlIGVuY29kaW5ncywgYW5kIHRlbGwgbHhtbCB0byB0cnkgdG8gcGFyc2UKKyAgICAgICAgIyB0aGUgZG9jdW1lbnQgYXMgZWFjaCBvbmUgaW4gdHVybi4KKyAgICAgICAgaXNfaHRtbCA9IG5vdCBzZWxmLmlzX3htbAorICAgICAgICB0cnlfZW5jb2RpbmdzID0gW3VzZXJfc3BlY2lmaWVkX2VuY29kaW5nLCBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZ10KKyAgICAgICAgZGV0ZWN0b3IgPSBFbmNvZGluZ0RldGVjdG9yKG1hcmt1cCwgdHJ5X2VuY29kaW5ncywgaXNfaHRtbCkKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGRldGVjdG9yLmVuY29kaW5nczoKKyAgICAgICAgICAgIHlpZWxkIChkZXRlY3Rvci5tYXJrdXAsIGVuY29kaW5nLCBkb2N1bWVudF9kZWNsYXJlZF9lbmNvZGluZywgRmFsc2UpCisKKyAgICBkZWYgZmVlZChzZWxmLCBtYXJrdXApOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgYnl0ZXMpOgorICAgICAgICAgICAgbWFya3VwID0gQnl0ZXNJTyhtYXJrdXApCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgbWFya3VwID0gU3RyaW5nSU8obWFya3VwKQorCisgICAgICAgICMgQ2FsbCBmZWVkKCkgYXQgbGVhc3Qgb25jZSwgZXZlbiBpZiB0aGUgbWFya3VwIGlzIGVtcHR5LAorICAgICAgICAjIG9yIHRoZSBwYXJzZXIgd29uJ3QgYmUgaW5pdGlhbGl6ZWQuCisgICAgICAgIGRhdGEgPSBtYXJrdXAucmVhZChzZWxmLkNIVU5LX1NJWkUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5wYXJzZXJfZm9yKHNlbGYuc291cC5vcmlnaW5hbF9lbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgICAgIHdoaWxlIGxlbihkYXRhKSAhPSAwOgorICAgICAgICAgICAgICAgICMgTm93IGNhbGwgZmVlZCgpIG9uIHRoZSByZXN0IG9mIHRoZSBkYXRhLCBjaHVuayBieSBjaHVuay4KKyAgICAgICAgICAgICAgICBkYXRhID0gbWFya3VwLnJlYWQoc2VsZi5DSFVOS19TSVpFKQorICAgICAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5mZWVkKGRhdGEpCisgICAgICAgICAgICBzZWxmLnBhcnNlci5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCAoVW5pY29kZURlY29kZUVycm9yLCBMb29rdXBFcnJvciwgZXRyZWUuUGFyc2VyRXJyb3IpLCBlOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VyUmVqZWN0ZWRNYXJrdXAoc3RyKGUpKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLm5zbWFwcyA9IFtzZWxmLkRFRkFVTFRfTlNNQVBTXQorCisgICAgZGVmIHN0YXJ0KHNlbGYsIG5hbWUsIGF0dHJzLCBuc21hcD17fSk6CisgICAgICAgICMgTWFrZSBzdXJlIGF0dHJzIGlzIGEgbXV0YWJsZSBkaWN0LS1seG1sIG1heSBzZW5kIGFuIGltbXV0YWJsZSBkaWN0cHJveHkuCisgICAgICAgIGF0dHJzID0gZGljdChhdHRycykKKyAgICAgICAgbnNwcmVmaXggPSBOb25lCisgICAgICAgICMgSW52ZXJ0IGVhY2ggbmFtZXNwYWNlIG1hcCBhcyBpdCBjb21lcyBpbi4KKyAgICAgICAgaWYgbGVuKHNlbGYubnNtYXBzKSA+IDE6CisgICAgICAgICAgICAjIFRoZXJlIGFyZSBubyBuZXcgbmFtZXNwYWNlcyBmb3IgdGhpcyB0YWcsIGJ1dAorICAgICAgICAgICAgIyBub24tZGVmYXVsdCBuYW1lc3BhY2VzIGFyZSBpbiBwbGF5LCBzbyB3ZSBuZWVkIGEKKyAgICAgICAgICAgICMgc2VwYXJhdGUgdGFnIHN0YWNrIHRvIGtub3cgd2hlbiB0aGV5IGVuZC4KKyAgICAgICAgICAgIHNlbGYubnNtYXBzLmFwcGVuZChOb25lKQorICAgICAgICBlbGlmIGxlbihuc21hcCkgPiAwOgorICAgICAgICAgICAgIyBBIG5ldyBuYW1lc3BhY2UgbWFwcGluZyBoYXMgY29tZSBpbnRvIHBsYXkuCisgICAgICAgICAgICBpbnZlcnRlZF9uc21hcCA9IGRpY3QoKHZhbHVlLCBrZXkpIGZvciBrZXksIHZhbHVlIGluIG5zbWFwLml0ZW1zKCkpCisgICAgICAgICAgICBzZWxmLm5zbWFwcy5hcHBlbmQoaW52ZXJ0ZWRfbnNtYXApCisgICAgICAgICAgICAjIEFsc28gdHJlYXQgdGhlIG5hbWVzcGFjZSBtYXBwaW5nIGFzIGEgc2V0IG9mIGF0dHJpYnV0ZXMgb24gdGhlCisgICAgICAgICAgICAjIHRhZywgc28gd2UgY2FuIHJlY3JlYXRlIGl0IGxhdGVyLgorICAgICAgICAgICAgYXR0cnMgPSBhdHRycy5jb3B5KCkKKyAgICAgICAgICAgIGZvciBwcmVmaXgsIG5hbWVzcGFjZSBpbiBuc21hcC5pdGVtcygpOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgICAgICJ4bWxucyIsIHByZWZpeCwgImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIikKKyAgICAgICAgICAgICAgICBhdHRyc1thdHRyaWJ1dGVdID0gbmFtZXNwYWNlCisKKyAgICAgICAgIyBOYW1lc3BhY2VzIGFyZSBpbiBwbGF5LiBGaW5kIGFueSBhdHRyaWJ1dGVzIHRoYXQgY2FtZSBpbgorICAgICAgICAjIGZyb20gbHhtbCB3aXRoIG5hbWVzcGFjZXMgYXR0YWNoZWQgdG8gdGhlaXIgbmFtZXMsIGFuZAorICAgICAgICAjIHR1cm4gdGhlbiBpbnRvIE5hbWVzcGFjZWRBdHRyaWJ1dGUgb2JqZWN0cy4KKyAgICAgICAgbmV3X2F0dHJzID0ge30KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGF0dHJzLml0ZW1zKCk6CisgICAgICAgICAgICBuYW1lc3BhY2UsIGF0dHIgPSBzZWxmLl9nZXROc1RhZyhhdHRyKQorICAgICAgICAgICAgaWYgbmFtZXNwYWNlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbmV3X2F0dHJzW2F0dHJdID0gdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnNwcmVmaXggPSBzZWxmLl9wcmVmaXhfZm9yX25hbWVzcGFjZShuYW1lc3BhY2UpCisgICAgICAgICAgICAgICAgYXR0ciA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUobnNwcmVmaXgsIGF0dHIsIG5hbWVzcGFjZSkKKyAgICAgICAgICAgICAgICBuZXdfYXR0cnNbYXR0cl0gPSB2YWx1ZQorICAgICAgICBhdHRycyA9IG5ld19hdHRycworCisgICAgICAgIG5hbWVzcGFjZSwgbmFtZSA9IHNlbGYuX2dldE5zVGFnKG5hbWUpCisgICAgICAgIG5zcHJlZml4ID0gc2VsZi5fcHJlZml4X2Zvcl9uYW1lc3BhY2UobmFtZXNwYWNlKQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX3N0YXJ0dGFnKG5hbWUsIG5hbWVzcGFjZSwgbnNwcmVmaXgsIGF0dHJzKQorCisgICAgZGVmIF9wcmVmaXhfZm9yX25hbWVzcGFjZShzZWxmLCBuYW1lc3BhY2UpOgorICAgICAgICAiIiJGaW5kIHRoZSBjdXJyZW50bHkgYWN0aXZlIHByZWZpeCBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZS4iIiIKKyAgICAgICAgaWYgbmFtZXNwYWNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmb3IgaW52ZXJ0ZWRfbnNtYXAgaW4gcmV2ZXJzZWQoc2VsZi5uc21hcHMpOgorICAgICAgICAgICAgaWYgaW52ZXJ0ZWRfbnNtYXAgaXMgbm90IE5vbmUgYW5kIG5hbWVzcGFjZSBpbiBpbnZlcnRlZF9uc21hcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW52ZXJ0ZWRfbnNtYXBbbmFtZXNwYWNlXQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGVuZChzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBjb21wbGV0ZWRfdGFnID0gc2VsZi5zb3VwLnRhZ1N0YWNrWy0xXQorICAgICAgICBuYW1lc3BhY2UsIG5hbWUgPSBzZWxmLl9nZXROc1RhZyhuYW1lKQorICAgICAgICBuc3ByZWZpeCA9IE5vbmUKKyAgICAgICAgaWYgbmFtZXNwYWNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGludmVydGVkX25zbWFwIGluIHJldmVyc2VkKHNlbGYubnNtYXBzKToKKyAgICAgICAgICAgICAgICBpZiBpbnZlcnRlZF9uc21hcCBpcyBub3QgTm9uZSBhbmQgbmFtZXNwYWNlIGluIGludmVydGVkX25zbWFwOgorICAgICAgICAgICAgICAgICAgICBuc3ByZWZpeCA9IGludmVydGVkX25zbWFwW25hbWVzcGFjZV0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9lbmR0YWcobmFtZSwgbnNwcmVmaXgpCisgICAgICAgIGlmIGxlbihzZWxmLm5zbWFwcykgPiAxOgorICAgICAgICAgICAgIyBUaGlzIHRhZywgb3Igb25lIG9mIGl0cyBwYXJlbnRzLCBpbnRyb2R1Y2VkIGEgbmFtZXNwYWNlCisgICAgICAgICAgICAjIG1hcHBpbmcsIHNvIHBvcCBpdCBvZmYgdGhlIHN0YWNrLgorICAgICAgICAgICAgc2VsZi5uc21hcHMucG9wKCkKKworICAgIGRlZiBwaShzZWxmLCB0YXJnZXQsIGRhdGEpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZGF0YShzZWxmLCBjb250ZW50KToKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGNvbnRlbnQpCisKKyAgICBkZWYgZG9jdHlwZShzZWxmLCBuYW1lLCBwdWJpZCwgc3lzdGVtKToKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBkb2N0eXBlID0gRG9jdHlwZS5mb3JfbmFtZV9hbmRfaWRzKG5hbWUsIHB1YmlkLCBzeXN0ZW0pCisgICAgICAgIHNlbGYuc291cC5vYmplY3Rfd2FzX3BhcnNlZChkb2N0eXBlKQorCisgICAgZGVmIGNvbW1lbnQoc2VsZiwgY29udGVudCk6CisgICAgICAgICJIYW5kbGUgY29tbWVudHMgYXMgQ29tbWVudCBvYmplY3RzLiIKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoKQorICAgICAgICBzZWxmLnNvdXAuaGFuZGxlX2RhdGEoY29udGVudCkKKyAgICAgICAgc2VsZi5zb3VwLmVuZERhdGEoQ29tbWVudCkKKworICAgIGRlZiB0ZXN0X2ZyYWdtZW50X3RvX2RvY3VtZW50KHNlbGYsIGZyYWdtZW50KToKKyAgICAgICAgIiIiU2VlIGBUcmVlQnVpbGRlcmAuIiIiCisgICAgICAgIHJldHVybiB1Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4lcycgJSBmcmFnbWVudAorCisKK2NsYXNzIExYTUxUcmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXIsIExYTUxUcmVlQnVpbGRlckZvclhNTCk6CisKKyAgICBmZWF0dXJlcyA9IFtMWE1MLCBIVE1MLCBGQVNULCBQRVJNSVNTSVZFXQorICAgIGlzX3htbCA9IEZhbHNlCisKKyAgICBkZWYgZGVmYXVsdF9wYXJzZXIoc2VsZiwgZW5jb2RpbmcpOgorICAgICAgICByZXR1cm4gZXRyZWUuSFRNTFBhcnNlcgorCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgZW5jb2RpbmcgPSBzZWxmLnNvdXAub3JpZ2luYWxfZW5jb2RpbmcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLnBhcnNlcl9mb3IoZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLnBhcnNlci5mZWVkKG1hcmt1cCkKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IChVbmljb2RlRGVjb2RlRXJyb3IsIExvb2t1cEVycm9yLCBldHJlZS5QYXJzZXJFcnJvciksIGU6CisgICAgICAgICAgICByYWlzZSBQYXJzZXJSZWplY3RlZE1hcmt1cChzdHIoZSkpCisKKworICAgIGRlZiB0ZXN0X2ZyYWdtZW50X3RvX2RvY3VtZW50KHNlbGYsIGZyYWdtZW50KToKKyAgICAgICAgIiIiU2VlIGBUcmVlQnVpbGRlcmAuIiIiCisgICAgICAgIHJldHVybiB1JzxodG1sPjxib2R5PiVzPC9ib2R5PjwvaHRtbD4nICUgZnJhZ21lbnQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2RhbW1pdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2RhbW1pdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY0MGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGFtbWl0LnB5CkBAIC0wLDAgKzEsODI5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiQmVhdXRpZnVsIFNvdXAgYm9udXMgbGlicmFyeTogVW5pY29kZSwgRGFtbWl0CisKK1RoaXMgbGlicmFyeSBjb252ZXJ0cyBhIGJ5dGVzdHJlYW0gdG8gVW5pY29kZSB0aHJvdWdoIGFueSBtZWFucworbmVjZXNzYXJ5LiBJdCBpcyBoZWF2aWx5IGJhc2VkIG9uIGNvZGUgZnJvbSBNYXJrIFBpbGdyaW0ncyBVbml2ZXJzYWwKK0ZlZWQgUGFyc2VyLiBJdCB3b3JrcyBiZXN0IG9uIFhNTCBhbmQgWE1MLCBidXQgaXQgZG9lcyBub3QgcmV3cml0ZSB0aGUKK1hNTCBvciBIVE1MIHRvIHJlZmxlY3QgYSBuZXcgZW5jb2Rpbmc7IHRoYXQncyB0aGUgdHJlZSBidWlsZGVyJ3Mgam9iLgorIiIiCisKK2ltcG9ydCBjb2RlY3MKK2Zyb20gaHRtbGVudGl0eWRlZnMgaW1wb3J0IGNvZGVwb2ludDJuYW1lCitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCisKKyMgSW1wb3J0IGEgbGlicmFyeSB0byBhdXRvZGV0ZWN0IGNoYXJhY3RlciBlbmNvZGluZ3MuCitjaGFyZGV0X3R5cGUgPSBOb25lCit0cnk6CisgICAgIyBGaXJzdCB0cnkgdGhlIGZhc3QgQyBpbXBsZW1lbnRhdGlvbi4KKyAgICAjICBQeVBJIHBhY2thZ2U6IGNjaGFyZGV0CisgICAgaW1wb3J0IGNjaGFyZGV0CisgICAgZGVmIGNoYXJkZXRfZGFtbWl0KHMpOgorICAgICAgICByZXR1cm4gY2NoYXJkZXQuZGV0ZWN0KHMpWydlbmNvZGluZyddCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdHJ5OgorICAgICAgICAjIEZhbGwgYmFjayB0byB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyAgRGViaWFuIHBhY2thZ2U6IHB5dGhvbi1jaGFyZGV0CisgICAgICAgICMgIFB5UEkgcGFja2FnZTogY2hhcmRldAorICAgICAgICBpbXBvcnQgY2hhcmRldAorICAgICAgICBkZWYgY2hhcmRldF9kYW1taXQocyk6CisgICAgICAgICAgICByZXR1cm4gY2hhcmRldC5kZXRlY3QocylbJ2VuY29kaW5nJ10KKyAgICAgICAgI2ltcG9ydCBjaGFyZGV0LmNvbnN0YW50cworICAgICAgICAjY2hhcmRldC5jb25zdGFudHMuX2RlYnVnID0gMQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgIyBObyBjaGFyZGV0IGF2YWlsYWJsZS4KKyAgICAgICAgZGVmIGNoYXJkZXRfZGFtbWl0KHMpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworIyBBdmFpbGFibGUgZnJvbSBodHRwOi8vY2prcHl0aG9uLmkxOG4ub3JnLy4KK3RyeToKKyAgICBpbXBvcnQgaWNvbnZfY29kZWMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKK3htbF9lbmNvZGluZ19yZSA9IHJlLmNvbXBpbGUoCisgICAgJ148XD8uKmVuY29kaW5nPVtcJyJdKC4qPylbXCciXS4qXD8+Jy5lbmNvZGUoKSwgcmUuSSkKK2h0bWxfbWV0YV9yZSA9IHJlLmNvbXBpbGUoCisgICAgJzxccyptZXRhW14+XStjaGFyc2V0XHMqPVxzKlsiXCddPyhbXj5dKj8pWyAvO1wnIj5dJy5lbmNvZGUoKSwgcmUuSSkKKworY2xhc3MgRW50aXR5U3Vic3RpdHV0aW9uKG9iamVjdCk6CisKKyAgICAiIiJTdWJzdGl0dXRlIFhNTCBvciBIVE1MIGVudGl0aWVzIGZvciB0aGUgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLiIiIgorCisgICAgZGVmIF9wb3B1bGF0ZV9jbGFzc192YXJpYWJsZXMoKToKKyAgICAgICAgbG9va3VwID0ge30KKyAgICAgICAgcmV2ZXJzZV9sb29rdXAgPSB7fQorICAgICAgICBjaGFyYWN0ZXJzX2Zvcl9yZSA9IFtdCisgICAgICAgIGZvciBjb2RlcG9pbnQsIG5hbWUgaW4gbGlzdChjb2RlcG9pbnQybmFtZS5pdGVtcygpKToKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IHVuaWNocihjb2RlcG9pbnQpCisgICAgICAgICAgICBpZiBjb2RlcG9pbnQgIT0gMzQ6CisgICAgICAgICAgICAgICAgIyBUaGVyZSdzIG5vIHBvaW50IGluIHR1cm5pbmcgdGhlIHF1b3RhdGlvbiBtYXJrIGludG8KKyAgICAgICAgICAgICAgICAjICZxdW90OywgdW5sZXNzIGl0IGhhcHBlbnMgd2l0aGluIGFuIGF0dHJpYnV0ZSB2YWx1ZSwgd2hpY2gKKyAgICAgICAgICAgICAgICAjIGlzIGhhbmRsZWQgZWxzZXdoZXJlLgorICAgICAgICAgICAgICAgIGNoYXJhY3RlcnNfZm9yX3JlLmFwcGVuZChjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgbG9va3VwW2NoYXJhY3Rlcl0gPSBuYW1lCisgICAgICAgICAgICAjIEJ1dCB3ZSBkbyB3YW50IHRvIHR1cm4gJnF1b3Q7IGludG8gdGhlIHF1b3RhdGlvbiBtYXJrLgorICAgICAgICAgICAgcmV2ZXJzZV9sb29rdXBbbmFtZV0gPSBjaGFyYWN0ZXIKKyAgICAgICAgcmVfZGVmaW5pdGlvbiA9ICJbJXNdIiAlICIiLmpvaW4oY2hhcmFjdGVyc19mb3JfcmUpCisgICAgICAgIHJldHVybiBsb29rdXAsIHJldmVyc2VfbG9va3VwLCByZS5jb21waWxlKHJlX2RlZmluaXRpb24pCisgICAgKENIQVJBQ1RFUl9UT19IVE1MX0VOVElUWSwgSFRNTF9FTlRJVFlfVE9fQ0hBUkFDVEVSLAorICAgICBDSEFSQUNURVJfVE9fSFRNTF9FTlRJVFlfUkUpID0gX3BvcHVsYXRlX2NsYXNzX3ZhcmlhYmxlcygpCisKKyAgICBDSEFSQUNURVJfVE9fWE1MX0VOVElUWSA9IHsKKyAgICAgICAgIiciOiAiYXBvcyIsCisgICAgICAgICciJzogInF1b3QiLAorICAgICAgICAiJiI6ICJhbXAiLAorICAgICAgICAiPCI6ICJsdCIsCisgICAgICAgICI+IjogImd0IiwKKyAgICAgICAgfQorCisgICAgQkFSRV9BTVBFUlNBTkRfT1JfQlJBQ0tFVCA9IHJlLmNvbXBpbGUoIihbPD5dfCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJig/ISNcZCs7fCN4WzAtOWEtZkEtRl0rO3xcdys7KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIpCisKKyAgICBBTVBFUlNBTkRfT1JfQlJBQ0tFVCA9IHJlLmNvbXBpbGUoIihbPD4mXSkiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zdWJzdGl0dXRlX2h0bWxfZW50aXR5KGNscywgbWF0Y2hvYmopOgorICAgICAgICBlbnRpdHkgPSBjbHMuQ0hBUkFDVEVSX1RPX0hUTUxfRU5USVRZLmdldChtYXRjaG9iai5ncm91cCgwKSkKKyAgICAgICAgcmV0dXJuICImJXM7IiAlIGVudGl0eQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zdWJzdGl0dXRlX3htbF9lbnRpdHkoY2xzLCBtYXRjaG9iaik6CisgICAgICAgICIiIlVzZWQgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzdWJzdGl0dXRlIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBYTUwgZW50aXR5IGZvciBhbiBYTUwgc3BlY2lhbCBjaGFyYWN0ZXIuIiIiCisgICAgICAgIGVudGl0eSA9IGNscy5DSEFSQUNURVJfVE9fWE1MX0VOVElUWVttYXRjaG9iai5ncm91cCgwKV0KKyAgICAgICAgcmV0dXJuICImJXM7IiAlIGVudGl0eQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHF1b3RlZF9hdHRyaWJ1dGVfdmFsdWUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJNYWtlIGEgdmFsdWUgaW50byBhIHF1b3RlZCBYTUwgYXR0cmlidXRlLCBwb3NzaWJseSBlc2NhcGluZyBpdC4KKworICAgICAgICAgTW9zdCBzdHJpbmdzIHdpbGwgYmUgcXVvdGVkIHVzaW5nIGRvdWJsZSBxdW90ZXMuCisKKyAgICAgICAgICBCb2IncyBCYXIgLT4gIkJvYidzIEJhciIKKworICAgICAgICAgSWYgYSBzdHJpbmcgY29udGFpbnMgZG91YmxlIHF1b3RlcywgaXQgd2lsbCBiZSBxdW90ZWQgdXNpbmcKKyAgICAgICAgIHNpbmdsZSBxdW90ZXMuCisKKyAgICAgICAgICBXZWxjb21lIHRvICJteSBiYXIiIC0+ICdXZWxjb21lIHRvICJteSBiYXIiJworCisgICAgICAgICBJZiBhIHN0cmluZyBjb250YWlucyBib3RoIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlcywgdGhlCisgICAgICAgICBkb3VibGUgcXVvdGVzIHdpbGwgYmUgZXNjYXBlZCwgYW5kIHRoZSBzdHJpbmcgd2lsbCBiZSBxdW90ZWQKKyAgICAgICAgIHVzaW5nIGRvdWJsZSBxdW90ZXMuCisKKyAgICAgICAgICBXZWxjb21lIHRvICJCb2IncyBCYXIiIC0+ICJXZWxjb21lIHRvICZxdW90O0JvYidzIGJhciZxdW90OworICAgICAgICAiIiIKKyAgICAgICAgcXVvdGVfd2l0aCA9ICciJworICAgICAgICBpZiAnIicgaW4gdmFsdWU6CisgICAgICAgICAgICBpZiAiJyIgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgIyBUaGUgc3RyaW5nIGNvbnRhaW5zIGJvdGggc2luZ2xlIGFuZCBkb3VibGUKKyAgICAgICAgICAgICAgICAjIHF1b3Rlcy4gIFR1cm4gdGhlIGRvdWJsZSBxdW90ZXMgaW50bworICAgICAgICAgICAgICAgICMgZW50aXRpZXMuIFdlIHF1b3RlIHRoZSBkb3VibGUgcXVvdGVzIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgIyB0aGUgc2luZ2xlIHF1b3RlcyBiZWNhdXNlIHRoZSBlbnRpdHkgbmFtZSBpcworICAgICAgICAgICAgICAgICMgIiZxdW90OyIgd2hldGhlciB0aGlzIGlzIEhUTUwgb3IgWE1MLiAgSWYgd2UKKyAgICAgICAgICAgICAgICAjIHF1b3RlZCB0aGUgc2luZ2xlIHF1b3Rlcywgd2UnZCBoYXZlIHRvIGRlY2lkZQorICAgICAgICAgICAgICAgICMgYmV0d2VlbiAmYXBvczsgYW5kICZzcXVvdDsuCisgICAgICAgICAgICAgICAgcmVwbGFjZV93aXRoID0gIiZxdW90OyIKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJyInLCByZXBsYWNlX3dpdGgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhlcmUgYXJlIGRvdWJsZSBxdW90ZXMgYnV0IG5vIHNpbmdsZSBxdW90ZXMuCisgICAgICAgICAgICAgICAgIyBXZSBjYW4gdXNlIHNpbmdsZSBxdW90ZXMgdG8gcXVvdGUgdGhlIGF0dHJpYnV0ZS4KKyAgICAgICAgICAgICAgICBxdW90ZV93aXRoID0gIiciCisgICAgICAgIHJldHVybiBxdW90ZV93aXRoICsgdmFsdWUgKyBxdW90ZV93aXRoCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3Vic3RpdHV0ZV94bWwoY2xzLCB2YWx1ZSwgbWFrZV9xdW90ZWRfYXR0cmlidXRlPUZhbHNlKToKKyAgICAgICAgIiIiU3Vic3RpdHV0ZSBYTUwgZW50aXRpZXMgZm9yIHNwZWNpYWwgWE1MIGNoYXJhY3RlcnMuCisKKyAgICAgICAgOnBhcmFtIHZhbHVlOiBBIHN0cmluZyB0byBiZSBzdWJzdGl0dXRlZC4gVGhlIGxlc3MtdGhhbiBzaWduCisgICAgICAgICAgd2lsbCBiZWNvbWUgJmx0OywgdGhlIGdyZWF0ZXItdGhhbiBzaWduIHdpbGwgYmVjb21lICZndDssCisgICAgICAgICAgYW5kIGFueSBhbXBlcnNhbmRzIHdpbGwgYmVjb21lICZhbXA7LiBJZiB5b3Ugd2FudCBhbXBlcnNhbmRzCisgICAgICAgICAgdGhhdCBhcHBlYXIgdG8gYmUgcGFydCBvZiBhbiBlbnRpdHkgZGVmaW5pdGlvbiB0byBiZSBsZWZ0CisgICAgICAgICAgYWxvbmUsIHVzZSBzdWJzdGl0dXRlX3htbF9jb250YWluaW5nX2VudGl0aWVzKCkgaW5zdGVhZC4KKworICAgICAgICA6cGFyYW0gbWFrZV9xdW90ZWRfYXR0cmlidXRlOiBJZiBUcnVlLCB0aGVuIHRoZSBzdHJpbmcgd2lsbCBiZQorICAgICAgICAgcXVvdGVkLCBhcyBiZWZpdHMgYW4gYXR0cmlidXRlIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgIyBFc2NhcGUgYW5nbGUgYnJhY2tldHMgYW5kIGFtcGVyc2FuZHMuCisgICAgICAgIHZhbHVlID0gY2xzLkFNUEVSU0FORF9PUl9CUkFDS0VULnN1YigKKyAgICAgICAgICAgIGNscy5fc3Vic3RpdHV0ZV94bWxfZW50aXR5LCB2YWx1ZSkKKworICAgICAgICBpZiBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU6CisgICAgICAgICAgICB2YWx1ZSA9IGNscy5xdW90ZWRfYXR0cmlidXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX3htbF9jb250YWluaW5nX2VudGl0aWVzKAorICAgICAgICBjbHMsIHZhbHVlLCBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU9RmFsc2UpOgorICAgICAgICAiIiJTdWJzdGl0dXRlIFhNTCBlbnRpdGllcyBmb3Igc3BlY2lhbCBYTUwgY2hhcmFjdGVycy4KKworICAgICAgICA6cGFyYW0gdmFsdWU6IEEgc3RyaW5nIHRvIGJlIHN1YnN0aXR1dGVkLiBUaGUgbGVzcy10aGFuIHNpZ24gd2lsbAorICAgICAgICAgIGJlY29tZSAmbHQ7LCB0aGUgZ3JlYXRlci10aGFuIHNpZ24gd2lsbCBiZWNvbWUgJmd0OywgYW5kIGFueQorICAgICAgICAgIGFtcGVyc2FuZHMgdGhhdCBhcmUgbm90IHBhcnQgb2YgYW4gZW50aXR5IGRlZml0aW9uIHdpbGwKKyAgICAgICAgICBiZWNvbWUgJmFtcDsuCisKKyAgICAgICAgOnBhcmFtIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZTogSWYgVHJ1ZSwgdGhlbiB0aGUgc3RyaW5nIHdpbGwgYmUKKyAgICAgICAgIHF1b3RlZCwgYXMgYmVmaXRzIGFuIGF0dHJpYnV0ZSB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgRXNjYXBlIGFuZ2xlIGJyYWNrZXRzLCBhbmQgYW1wZXJzYW5kcyB0aGF0IGFyZW4ndCBwYXJ0IG9mCisgICAgICAgICMgZW50aXRpZXMuCisgICAgICAgIHZhbHVlID0gY2xzLkJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQuc3ViKAorICAgICAgICAgICAgY2xzLl9zdWJzdGl0dXRlX3htbF9lbnRpdHksIHZhbHVlKQorCisgICAgICAgIGlmIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZToKKyAgICAgICAgICAgIHZhbHVlID0gY2xzLnF1b3RlZF9hdHRyaWJ1dGVfdmFsdWUodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN1YnN0aXR1dGVfaHRtbChjbHMsIHMpOgorICAgICAgICAiIiJSZXBsYWNlIGNlcnRhaW4gVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggbmFtZWQgSFRNTCBlbnRpdGllcy4KKworICAgICAgICBUaGlzIGRpZmZlcnMgZnJvbSBkYXRhLmVuY29kZShlbmNvZGluZywgJ3htbGNoYXJyZWZyZXBsYWNlJykKKyAgICAgICAgaW4gdGhhdCB0aGUgZ29hbCBpcyB0byBtYWtlIHRoZSByZXN1bHQgbW9yZSByZWFkYWJsZSAodG8gdGhvc2UKKyAgICAgICAgd2l0aCBBU0NJSSBkaXNwbGF5cykgcmF0aGVyIHRoYW4gdG8gcmVjb3ZlciBmcm9tCisgICAgICAgIGVycm9ycy4gVGhlcmUncyBhYnNvbHV0ZWx5IG5vdGhpbmcgd3Jvbmcgd2l0aCBhIFVURi04IHN0cmluZworICAgICAgICBjb250YWluZyBhIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUsIGJ1dCByZXBsYWNpbmcgdGhhdAorICAgICAgICBjaGFyYWN0ZXIgd2l0aCAiJmVhY3V0ZTsiIHdpbGwgbWFrZSBpdCBtb3JlIHJlYWRhYmxlIHRvIHNvbWUKKyAgICAgICAgcGVvcGxlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGNscy5DSEFSQUNURVJfVE9fSFRNTF9FTlRJVFlfUkUuc3ViKAorICAgICAgICAgICAgY2xzLl9zdWJzdGl0dXRlX2h0bWxfZW50aXR5LCBzKQorCisKK2NsYXNzIEVuY29kaW5nRGV0ZWN0b3I6CisgICAgIiIiU3VnZ2VzdHMgYSBudW1iZXIgb2YgcG9zc2libGUgZW5jb2RpbmdzIGZvciBhIGJ5dGVzdHJpbmcuCisKKyAgICBPcmRlciBvZiBwcmVjZWRlbmNlOgorCisgICAgMS4gRW5jb2RpbmdzIHlvdSBzcGVjaWZpY2FsbHkgdGVsbCBFbmNvZGluZ0RldGVjdG9yIHRvIHRyeSBmaXJzdAorICAgICh0aGUgb3ZlcnJpZGVfZW5jb2RpbmdzIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvcikuCisKKyAgICAyLiBBbiBlbmNvZGluZyBkZWNsYXJlZCB3aXRoaW4gdGhlIGJ5dGVzdHJpbmcgaXRzZWxmLCBlaXRoZXIgaW4gYW4KKyAgICBYTUwgZGVjbGFyYXRpb24gKGlmIHRoZSBieXRlc3RyaW5nIGlzIHRvIGJlIGludGVycHJldGVkIGFzIGFuIFhNTAorICAgIGRvY3VtZW50KSwgb3IgaW4gYSA8bWV0YT4gdGFnIChpZiB0aGUgYnl0ZXN0cmluZyBpcyB0byBiZQorICAgIGludGVycHJldGVkIGFzIGFuIEhUTUwgZG9jdW1lbnQuKQorCisgICAgMy4gQW4gZW5jb2RpbmcgZGV0ZWN0ZWQgdGhyb3VnaCB0ZXh0dWFsIGFuYWx5c2lzIGJ5IGNoYXJkZXQsCisgICAgY2NoYXJkZXQsIG9yIGEgc2ltaWxhciBleHRlcm5hbCBsaWJyYXJ5LgorCisgICAgNC4gVVRGLTguCisKKyAgICA1LiBXaW5kb3dzLTEyNTIuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmt1cCwgb3ZlcnJpZGVfZW5jb2RpbmdzPU5vbmUsIGlzX2h0bWw9RmFsc2UpOgorICAgICAgICBzZWxmLm92ZXJyaWRlX2VuY29kaW5ncyA9IG92ZXJyaWRlX2VuY29kaW5ncyBvciBbXQorICAgICAgICBzZWxmLmNoYXJkZXRfZW5jb2RpbmcgPSBOb25lCisgICAgICAgIHNlbGYuaXNfaHRtbCA9IGlzX2h0bWwKKyAgICAgICAgc2VsZi5kZWNsYXJlZF9lbmNvZGluZyA9IE5vbmUKKworICAgICAgICAjIEZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzOiBzdHJpcCBhIGJ5dGUtb3JkZXIgbWFyay4KKyAgICAgICAgc2VsZi5tYXJrdXAsIHNlbGYuc25pZmZlZF9lbmNvZGluZyA9IHNlbGYuc3RyaXBfYnl0ZV9vcmRlcl9tYXJrKG1hcmt1cCkKKworICAgIGRlZiBfdXNhYmxlKHNlbGYsIGVuY29kaW5nLCB0cmllZCk6CisgICAgICAgIGlmIGVuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZy5sb3dlcigpCisgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gdHJpZWQ6CisgICAgICAgICAgICAgICAgdHJpZWQuYWRkKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVuY29kaW5ncyhzZWxmKToKKyAgICAgICAgIiIiWWllbGQgYSBudW1iZXIgb2YgZW5jb2RpbmdzIHRoYXQgbWlnaHQgd29yayBmb3IgdGhpcyBtYXJrdXAuIiIiCisgICAgICAgIHRyaWVkID0gc2V0KCkKKyAgICAgICAgZm9yIGUgaW4gc2VsZi5vdmVycmlkZV9lbmNvZGluZ3M6CisgICAgICAgICAgICBpZiBzZWxmLl91c2FibGUoZSwgdHJpZWQpOgorICAgICAgICAgICAgICAgIHlpZWxkIGUKKworICAgICAgICAjIERpZCB0aGUgZG9jdW1lbnQgb3JpZ2luYWxseSBzdGFydCB3aXRoIGEgYnl0ZS1vcmRlciBtYXJrCisgICAgICAgICMgdGhhdCBpbmRpY2F0ZWQgaXRzIGVuY29kaW5nPworICAgICAgICBpZiBzZWxmLl91c2FibGUoc2VsZi5zbmlmZmVkX2VuY29kaW5nLCB0cmllZCk6CisgICAgICAgICAgICB5aWVsZCBzZWxmLnNuaWZmZWRfZW5jb2RpbmcKKworICAgICAgICAjIExvb2sgd2l0aGluIHRoZSBkb2N1bWVudCBmb3IgYW4gWE1MIG9yIEhUTUwgZW5jb2RpbmcKKyAgICAgICAgIyBkZWNsYXJhdGlvbi4KKyAgICAgICAgaWYgc2VsZi5kZWNsYXJlZF9lbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5kZWNsYXJlZF9lbmNvZGluZyA9IHNlbGYuZmluZF9kZWNsYXJlZF9lbmNvZGluZygKKyAgICAgICAgICAgICAgICBzZWxmLm1hcmt1cCwgc2VsZi5pc19odG1sKQorICAgICAgICBpZiBzZWxmLl91c2FibGUoc2VsZi5kZWNsYXJlZF9lbmNvZGluZywgdHJpZWQpOgorICAgICAgICAgICAgeWllbGQgc2VsZi5kZWNsYXJlZF9lbmNvZGluZworCisgICAgICAgICMgVXNlIHRoaXJkLXBhcnR5IGNoYXJhY3RlciBzZXQgZGV0ZWN0aW9uIHRvIGd1ZXNzIGF0IHRoZQorICAgICAgICAjIGVuY29kaW5nLgorICAgICAgICBpZiBzZWxmLmNoYXJkZXRfZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY2hhcmRldF9lbmNvZGluZyA9IGNoYXJkZXRfZGFtbWl0KHNlbGYubWFya3VwKQorICAgICAgICBpZiBzZWxmLl91c2FibGUoc2VsZi5jaGFyZGV0X2VuY29kaW5nLCB0cmllZCk6CisgICAgICAgICAgICB5aWVsZCBzZWxmLmNoYXJkZXRfZW5jb2RpbmcKKworICAgICAgICAjIEFzIGEgbGFzdC1kaXRjaCBlZmZvcnQsIHRyeSB1dGYtOCBhbmQgd2luZG93cy0xMjUyLgorICAgICAgICBmb3IgZSBpbiAoJ3V0Zi04JywgJ3dpbmRvd3MtMTI1MicpOgorICAgICAgICAgICAgaWYgc2VsZi5fdXNhYmxlKGUsIHRyaWVkKToKKyAgICAgICAgICAgICAgICB5aWVsZCBlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3RyaXBfYnl0ZV9vcmRlcl9tYXJrKGNscywgZGF0YSk6CisgICAgICAgICIiIklmIGEgYnl0ZS1vcmRlciBtYXJrIGlzIHByZXNlbnQsIHN0cmlwIGl0IGFuZCByZXR1cm4gdGhlIGVuY29kaW5nIGl0IGltcGxpZXMuIiIiCisgICAgICAgIGVuY29kaW5nID0gTm9uZQorICAgICAgICBpZiAobGVuKGRhdGEpID49IDQpIGFuZCAoZGF0YVs6Ml0gPT0gYidceGZlXHhmZicpIFwKKyAgICAgICAgICAgICAgIGFuZCAoZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTE2YmUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVsyOl0KKyAgICAgICAgZWxpZiAobGVuKGRhdGEpID49IDQpIGFuZCAoZGF0YVs6Ml0gPT0gYidceGZmXHhmZScpIFwKKyAgICAgICAgICAgICAgICAgYW5kIChkYXRhWzI6NF0gIT0gJ1x4MDBceDAwJyk6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMTZsZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzI6XQorICAgICAgICBlbGlmIGRhdGFbOjNdID09IGInXHhlZlx4YmJceGJmJzoKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi04JworICAgICAgICAgICAgZGF0YSA9IGRhdGFbMzpdCisgICAgICAgIGVsaWYgZGF0YVs6NF0gPT0gYidceDAwXHgwMFx4ZmVceGZmJzoKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0zMmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisgICAgICAgIGVsaWYgZGF0YVs6NF0gPT0gYidceGZmXHhmZVx4MDBceDAwJzoKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0zMmxlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisgICAgICAgIHJldHVybiBkYXRhLCBlbmNvZGluZworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRfZGVjbGFyZWRfZW5jb2RpbmcoY2xzLCBtYXJrdXAsIGlzX2h0bWw9RmFsc2UsIHNlYXJjaF9lbnRpcmVfZG9jdW1lbnQ9RmFsc2UpOgorICAgICAgICAiIiJHaXZlbiBhIGRvY3VtZW50LCB0cmllcyB0byBmaW5kIGl0cyBkZWNsYXJlZCBlbmNvZGluZy4KKworICAgICAgICBBbiBYTUwgZW5jb2RpbmcgaXMgZGVjbGFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgQW4gSFRNTCBlbmNvZGluZyBpcyBkZWNsYXJlZCBpbiBhIDxtZXRhPiB0YWcsIGhvcGVmdWxseSBuZWFyIHRoZQorICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VhcmNoX2VudGlyZV9kb2N1bWVudDoKKyAgICAgICAgICAgIHhtbF9lbmRwb3MgPSBodG1sX2VuZHBvcyA9IGxlbihtYXJrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB4bWxfZW5kcG9zID0gMTAyNAorICAgICAgICAgICAgaHRtbF9lbmRwb3MgPSBtYXgoMjA0OCwgaW50KGxlbihtYXJrdXApICogMC4wNSkpCisgICAgICAgICAgICAKKyAgICAgICAgZGVjbGFyZWRfZW5jb2RpbmcgPSBOb25lCisgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nX21hdGNoID0geG1sX2VuY29kaW5nX3JlLnNlYXJjaChtYXJrdXAsIGVuZHBvcz14bWxfZW5kcG9zKQorICAgICAgICBpZiBub3QgZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2ggYW5kIGlzX2h0bWw6CisgICAgICAgICAgICBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaCA9IGh0bWxfbWV0YV9yZS5zZWFyY2gobWFya3VwLCBlbmRwb3M9aHRtbF9lbmRwb3MpCisgICAgICAgIGlmIGRlY2xhcmVkX2VuY29kaW5nX21hdGNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVjbGFyZWRfZW5jb2RpbmcgPSBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaC5ncm91cHMoKVswXS5kZWNvZGUoCisgICAgICAgICAgICAgICAgJ2FzY2lpJykKKyAgICAgICAgaWYgZGVjbGFyZWRfZW5jb2Rpbmc6CisgICAgICAgICAgICByZXR1cm4gZGVjbGFyZWRfZW5jb2RpbmcubG93ZXIoKQorICAgICAgICByZXR1cm4gTm9uZQorCitjbGFzcyBVbmljb2RlRGFtbWl0OgorICAgICIiIkEgY2xhc3MgZm9yIGRldGVjdGluZyB0aGUgZW5jb2Rpbmcgb2YgYSAqTUwgZG9jdW1lbnQgYW5kCisgICAgY29udmVydGluZyBpdCB0byBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgc291cmNlIGVuY29kaW5nIGlzCisgICAgd2luZG93cy0xMjUyLCBjYW4gcmVwbGFjZSBNUyBzbWFydCBxdW90ZXMgd2l0aCB0aGVpciBIVE1MIG9yIFhNTAorICAgIGVxdWl2YWxlbnRzLiIiIgorCisgICAgIyBUaGlzIGRpY3Rpb25hcnkgbWFwcyBjb21tb25seSBzZWVuIHZhbHVlcyBmb3IgImNoYXJzZXQiIGluIEhUTUwKKyAgICAjIG1ldGEgdGFncyB0byB0aGUgY29ycmVzcG9uZGluZyBQeXRob24gY29kZWMgbmFtZXMuIEl0IG9ubHkgY292ZXJzCisgICAgIyB2YWx1ZXMgdGhhdCBhcmVuJ3QgaW4gUHl0aG9uJ3MgYWxpYXNlcyBhbmQgY2FuJ3QgYmUgZGV0ZXJtaW5lZAorICAgICMgYnkgdGhlIGhldXJpc3RpY3MgaW4gZmluZF9jb2RlYy4KKyAgICBDSEFSU0VUX0FMSUFTRVMgPSB7Im1hY2ludG9zaCI6ICJtYWMtcm9tYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAieC1zamlzIjogInNoaWZ0LWppcyJ9CisKKyAgICBFTkNPRElOR1NfV0lUSF9TTUFSVF9RVU9URVMgPSBbCisgICAgICAgICJ3aW5kb3dzLTEyNTIiLAorICAgICAgICAiaXNvLTg4NTktMSIsCisgICAgICAgICJpc28tODg1OS0yIiwKKyAgICAgICAgXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmt1cCwgb3ZlcnJpZGVfZW5jb2RpbmdzPVtdLAorICAgICAgICAgICAgICAgICBzbWFydF9xdW90ZXNfdG89Tm9uZSwgaXNfaHRtbD1GYWxzZSk6CisgICAgICAgIHNlbGYuc21hcnRfcXVvdGVzX3RvID0gc21hcnRfcXVvdGVzX3RvCisgICAgICAgIHNlbGYudHJpZWRfZW5jb2RpbmdzID0gW10KKyAgICAgICAgc2VsZi5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzID0gRmFsc2UKKyAgICAgICAgc2VsZi5pc19odG1sID0gaXNfaHRtbAorCisgICAgICAgIHNlbGYuZGV0ZWN0b3IgPSBFbmNvZGluZ0RldGVjdG9yKG1hcmt1cCwgb3ZlcnJpZGVfZW5jb2RpbmdzLCBpc19odG1sKQorCisgICAgICAgICMgU2hvcnQtY2lyY3VpdCBpZiB0aGUgZGF0YSBpcyBpbiBVbmljb2RlIHRvIGJlZ2luIHdpdGguCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKSBvciBtYXJrdXAgPT0gJyc6CisgICAgICAgICAgICBzZWxmLm1hcmt1cCA9IG1hcmt1cAorICAgICAgICAgICAgc2VsZi51bmljb2RlX21hcmt1cCA9IHVuaWNvZGUobWFya3VwKQorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbF9lbmNvZGluZyA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgVGhlIGVuY29kaW5nIGRldGVjdG9yIG1heSBoYXZlIHN0cmlwcGVkIGEgYnl0ZS1vcmRlciBtYXJrLgorICAgICAgICAjIFVzZSB0aGUgc3RyaXBwZWQgbWFya3VwIGZyb20gdGhpcyBwb2ludCBvbi4KKyAgICAgICAgc2VsZi5tYXJrdXAgPSBzZWxmLmRldGVjdG9yLm1hcmt1cAorCisgICAgICAgIHUgPSBOb25lCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBzZWxmLmRldGVjdG9yLmVuY29kaW5nczoKKyAgICAgICAgICAgIG1hcmt1cCA9IHNlbGYuZGV0ZWN0b3IubWFya3VwCisgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVydF9mcm9tKGVuY29kaW5nKQorICAgICAgICAgICAgaWYgdSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCB1OgorICAgICAgICAgICAgIyBOb25lIG9mIHRoZSBlbmNvZGluZ3Mgd29ya2VkLiBBcyBhbiBhYnNvbHV0ZSBsYXN0IHJlc29ydCwKKyAgICAgICAgICAgICMgdHJ5IHRoZW0gYWdhaW4gd2l0aCBjaGFyYWN0ZXIgcmVwbGFjZW1lbnQuCisKKyAgICAgICAgICAgIGZvciBlbmNvZGluZyBpbiBzZWxmLmRldGVjdG9yLmVuY29kaW5nczoKKyAgICAgICAgICAgICAgICBpZiBlbmNvZGluZyAhPSAiYXNjaWkiOgorICAgICAgICAgICAgICAgICAgICB1ID0gc2VsZi5fY29udmVydF9mcm9tKGVuY29kaW5nLCAicmVwbGFjZSIpCisgICAgICAgICAgICAgICAgaWYgdSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb21lIGNoYXJhY3RlcnMgY291bGQgbm90IGJlIGRlY29kZWQsIGFuZCB3ZXJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwbGFjZWQgd2l0aCBSRVBMQUNFTUVOVCBDSEFSQUNURVIuIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgSWYgbm9uZSBvZiB0aGF0IHdvcmtlZCwgd2UgY291bGQgYXQgdGhpcyBwb2ludCBmb3JjZSBpdCB0bworICAgICAgICAjIEFTQ0lJLCBidXQgdGhhdCB3b3VsZCBkZXN0cm95IHNvIG11Y2ggZGF0YSB0aGF0IEkgdGhpbmsKKyAgICAgICAgIyBnaXZpbmcgdXAgaXMgYmV0dGVyLgorICAgICAgICBzZWxmLnVuaWNvZGVfbWFya3VwID0gdQorICAgICAgICBpZiBub3QgdToKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfZW5jb2RpbmcgPSBOb25lCisKKyAgICBkZWYgX3N1Yl9tc19jaGFyKHNlbGYsIG1hdGNoKToKKyAgICAgICAgIiIiQ2hhbmdlcyBhIE1TIHNtYXJ0IHF1b3RlIGNoYXJhY3RlciB0byBhbiBYTUwgb3IgSFRNTAorICAgICAgICBlbnRpdHksIG9yIGFuIEFTQ0lJIGNoYXJhY3Rlci4iIiIKKyAgICAgICAgb3JpZyA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIHNlbGYuc21hcnRfcXVvdGVzX3RvID09ICdhc2NpaSc6CisgICAgICAgICAgICBzdWIgPSBzZWxmLk1TX0NIQVJTX1RPX0FTQ0lJLmdldChvcmlnKS5lbmNvZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ViID0gc2VsZi5NU19DSEFSUy5nZXQob3JpZykKKyAgICAgICAgICAgIGlmIHR5cGUoc3ViKSA9PSB0dXBsZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNtYXJ0X3F1b3Rlc190byA9PSAneG1sJzoKKyAgICAgICAgICAgICAgICAgICAgc3ViID0gJyYjeCcuZW5jb2RlKCkgKyBzdWJbMV0uZW5jb2RlKCkgKyAnOycuZW5jb2RlKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdWIgPSAnJicuZW5jb2RlKCkgKyBzdWJbMF0uZW5jb2RlKCkgKyAnOycuZW5jb2RlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3ViID0gc3ViLmVuY29kZSgpCisgICAgICAgIHJldHVybiBzdWIKKworICAgIGRlZiBfY29udmVydF9mcm9tKHNlbGYsIHByb3Bvc2VkLCBlcnJvcnM9InN0cmljdCIpOgorICAgICAgICBwcm9wb3NlZCA9IHNlbGYuZmluZF9jb2RlYyhwcm9wb3NlZCkKKyAgICAgICAgaWYgbm90IHByb3Bvc2VkIG9yIChwcm9wb3NlZCwgZXJyb3JzKSBpbiBzZWxmLnRyaWVkX2VuY29kaW5nczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYudHJpZWRfZW5jb2RpbmdzLmFwcGVuZCgocHJvcG9zZWQsIGVycm9ycykpCisgICAgICAgIG1hcmt1cCA9IHNlbGYubWFya3VwCisgICAgICAgICMgQ29udmVydCBzbWFydCBxdW90ZXMgdG8gSFRNTCBpZiBjb21pbmcgZnJvbSBhbiBlbmNvZGluZworICAgICAgICAjIHRoYXQgbWlnaHQgaGF2ZSB0aGVtLgorICAgICAgICBpZiAoc2VsZi5zbWFydF9xdW90ZXNfdG8gaXMgbm90IE5vbmUKKyAgICAgICAgICAgIGFuZCBwcm9wb3NlZCBpbiBzZWxmLkVOQ09ESU5HU19XSVRIX1NNQVJUX1FVT1RFUyk6CisgICAgICAgICAgICBzbWFydF9xdW90ZXNfcmUgPSBiIihbXHg4MC1ceDlmXSkiCisgICAgICAgICAgICBzbWFydF9xdW90ZXNfY29tcGlsZWQgPSByZS5jb21waWxlKHNtYXJ0X3F1b3Rlc19yZSkKKyAgICAgICAgICAgIG1hcmt1cCA9IHNtYXJ0X3F1b3Rlc19jb21waWxlZC5zdWIoc2VsZi5fc3ViX21zX2NoYXIsIG1hcmt1cCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjcHJpbnQgIlRyeWluZyB0byBjb252ZXJ0IGRvY3VtZW50IHRvICVzIChlcnJvcnM9JXMpIiAlICgKKyAgICAgICAgICAgICMgICAgcHJvcG9zZWQsIGVycm9ycykKKyAgICAgICAgICAgIHUgPSBzZWxmLl90b191bmljb2RlKG1hcmt1cCwgcHJvcG9zZWQsIGVycm9ycykKKyAgICAgICAgICAgIHNlbGYubWFya3VwID0gdQorICAgICAgICAgICAgc2VsZi5vcmlnaW5hbF9lbmNvZGluZyA9IHByb3Bvc2VkCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICNwcmludCAiVGhhdCBkaWRuJ3Qgd29yayEiCisgICAgICAgICAgICAjcHJpbnQgZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgI3ByaW50ICJDb3JyZWN0IGVuY29kaW5nOiAlcyIgJSBwcm9wb3NlZAorICAgICAgICByZXR1cm4gc2VsZi5tYXJrdXAKKworICAgIGRlZiBfdG9fdW5pY29kZShzZWxmLCBkYXRhLCBlbmNvZGluZywgZXJyb3JzPSJzdHJpY3QiKToKKyAgICAgICAgJycnR2l2ZW4gYSBzdHJpbmcgYW5kIGl0cyBlbmNvZGluZywgZGVjb2RlcyB0aGUgc3RyaW5nIGludG8gVW5pY29kZS4KKyAgICAgICAgJWVuY29kaW5nIGlzIGEgc3RyaW5nIHJlY29nbml6ZWQgYnkgZW5jb2RpbmdzLmFsaWFzZXMnJycKKyAgICAgICAgcmV0dXJuIHVuaWNvZGUoZGF0YSwgZW5jb2RpbmcsIGVycm9ycykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWNsYXJlZF9odG1sX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19odG1sOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuZGV0ZWN0b3IuZGVjbGFyZWRfZW5jb2RpbmcKKworICAgIGRlZiBmaW5kX2NvZGVjKHNlbGYsIGNoYXJzZXQpOgorICAgICAgICB2YWx1ZSA9IChzZWxmLl9jb2RlYyhzZWxmLkNIQVJTRVRfQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCkpCisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5yZXBsYWNlKCItIiwgIiIpKSkKKyAgICAgICAgICAgICAgIG9yIChjaGFyc2V0IGFuZCBzZWxmLl9jb2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAiXyIpKSkKKyAgICAgICAgICAgICAgIG9yIChjaGFyc2V0IGFuZCBjaGFyc2V0Lmxvd2VyKCkpCisgICAgICAgICAgICAgICBvciBjaGFyc2V0CisgICAgICAgICAgICAgICAgKQorICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sb3dlcigpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2NvZGVjKHNlbGYsIGNoYXJzZXQpOgorICAgICAgICBpZiBub3QgY2hhcnNldDoKKyAgICAgICAgICAgIHJldHVybiBjaGFyc2V0CisgICAgICAgIGNvZGVjID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb2RlY3MubG9va3VwKGNoYXJzZXQpCisgICAgICAgICAgICBjb2RlYyA9IGNoYXJzZXQKKyAgICAgICAgZXhjZXB0IChMb29rdXBFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBjb2RlYworCisKKyAgICAjIEEgcGFydGlhbCBtYXBwaW5nIG9mIElTTy1MYXRpbi0xIHRvIEhUTUwgZW50aXRpZXMvWE1MIG51bWVyaWMgZW50aXRpZXMuCisgICAgTVNfQ0hBUlMgPSB7YidceDgwJzogKCdldXJvJywgJzIwQUMnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODEnOiAnICcsCisgICAgICAgICAgICAgICAgYidceDgyJzogKCdzYnF1bycsICcyMDFBJyksCisgICAgICAgICAgICAgICAgYidceDgzJzogKCdmbm9mJywgJzE5MicpLAorICAgICAgICAgICAgICAgIGInXHg4NCc6ICgnYmRxdW8nLCAnMjAxRScpLAorICAgICAgICAgICAgICAgIGInXHg4NSc6ICgnaGVsbGlwJywgJzIwMjYnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODYnOiAoJ2RhZ2dlcicsICcyMDIwJyksCisgICAgICAgICAgICAgICAgYidceDg3JzogKCdEYWdnZXInLCAnMjAyMScpLAorICAgICAgICAgICAgICAgIGInXHg4OCc6ICgnY2lyYycsICcyQzYnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODknOiAoJ3Blcm1pbCcsICcyMDMwJyksCisgICAgICAgICAgICAgICAgYidceDhBJzogKCdTY2Fyb24nLCAnMTYwJyksCisgICAgICAgICAgICAgICAgYidceDhCJzogKCdsc2FxdW8nLCAnMjAzOScpLAorICAgICAgICAgICAgICAgIGInXHg4Qyc6ICgnT0VsaWcnLCAnMTUyJyksCisgICAgICAgICAgICAgICAgYidceDhEJzogJz8nLAorICAgICAgICAgICAgICAgIGInXHg4RSc6ICgnI3gxN0QnLCAnMTdEJyksCisgICAgICAgICAgICAgICAgYidceDhGJzogJz8nLAorICAgICAgICAgICAgICAgIGInXHg5MCc6ICc/JywKKyAgICAgICAgICAgICAgICBiJ1x4OTEnOiAoJ2xzcXVvJywgJzIwMTgnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTInOiAoJ3JzcXVvJywgJzIwMTknKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTMnOiAoJ2xkcXVvJywgJzIwMUMnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTQnOiAoJ3JkcXVvJywgJzIwMUQnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTUnOiAoJ2J1bGwnLCAnMjAyMicpLAorICAgICAgICAgICAgICAgIGInXHg5Nic6ICgnbmRhc2gnLCAnMjAxMycpLAorICAgICAgICAgICAgICAgIGInXHg5Nyc6ICgnbWRhc2gnLCAnMjAxNCcpLAorICAgICAgICAgICAgICAgIGInXHg5OCc6ICgndGlsZGUnLCAnMkRDJyksCisgICAgICAgICAgICAgICAgYidceDk5JzogKCd0cmFkZScsICcyMTIyJyksCisgICAgICAgICAgICAgICAgYidceDlhJzogKCdzY2Fyb24nLCAnMTYxJyksCisgICAgICAgICAgICAgICAgYidceDliJzogKCdyc2FxdW8nLCAnMjAzQScpLAorICAgICAgICAgICAgICAgIGInXHg5Yyc6ICgnb2VsaWcnLCAnMTUzJyksCisgICAgICAgICAgICAgICAgYidceDlkJzogJz8nLAorICAgICAgICAgICAgICAgIGInXHg5ZSc6ICgnI3gxN0UnLCAnMTdFJyksCisgICAgICAgICAgICAgICAgYidceDlmJzogKCdZdW1sJywgJycpLH0KKworICAgICMgQSBwYXJvY2hpYWwgcGFydGlhbCBtYXBwaW5nIG9mIElTTy1MYXRpbi0xIHRvIEFTQ0lJLiBDb250YWlucworICAgICMgaG9ycm9ycyBsaWtlIHN0cmlwcGluZyBkaWFjcml0aWNhbCBtYXJrcyB0byB0dXJuIMOhIGludG8gYSwgYnV0IGFsc28KKyAgICAjIGNvbnRhaW5zIG5vbi1ob3Jyb3JzIGxpa2UgdHVybmluZyDigJwgaW50byAiLgorICAgIE1TX0NIQVJTX1RPX0FTQ0lJID0geworICAgICAgICBiJ1x4ODAnIDogJ0VVUicsCisgICAgICAgIGInXHg4MScgOiAnICcsCisgICAgICAgIGInXHg4MicgOiAnLCcsCisgICAgICAgIGInXHg4MycgOiAnZicsCisgICAgICAgIGInXHg4NCcgOiAnLCwnLAorICAgICAgICBiJ1x4ODUnIDogJy4uLicsCisgICAgICAgIGInXHg4NicgOiAnKycsCisgICAgICAgIGInXHg4NycgOiAnKysnLAorICAgICAgICBiJ1x4ODgnIDogJ14nLAorICAgICAgICBiJ1x4ODknIDogJyUnLAorICAgICAgICBiJ1x4OGEnIDogJ1MnLAorICAgICAgICBiJ1x4OGInIDogJzwnLAorICAgICAgICBiJ1x4OGMnIDogJ09FJywKKyAgICAgICAgYidceDhkJyA6ICc/JywKKyAgICAgICAgYidceDhlJyA6ICdaJywKKyAgICAgICAgYidceDhmJyA6ICc/JywKKyAgICAgICAgYidceDkwJyA6ICc/JywKKyAgICAgICAgYidceDkxJyA6ICInIiwKKyAgICAgICAgYidceDkyJyA6ICInIiwKKyAgICAgICAgYidceDkzJyA6ICciJywKKyAgICAgICAgYidceDk0JyA6ICciJywKKyAgICAgICAgYidceDk1JyA6ICcqJywKKyAgICAgICAgYidceDk2JyA6ICctJywKKyAgICAgICAgYidceDk3JyA6ICctLScsCisgICAgICAgIGInXHg5OCcgOiAnficsCisgICAgICAgIGInXHg5OScgOiAnKFRNKScsCisgICAgICAgIGInXHg5YScgOiAncycsCisgICAgICAgIGInXHg5YicgOiAnPicsCisgICAgICAgIGInXHg5YycgOiAnb2UnLAorICAgICAgICBiJ1x4OWQnIDogJz8nLAorICAgICAgICBiJ1x4OWUnIDogJ3onLAorICAgICAgICBiJ1x4OWYnIDogJ1knLAorICAgICAgICBiJ1x4YTAnIDogJyAnLAorICAgICAgICBiJ1x4YTEnIDogJyEnLAorICAgICAgICBiJ1x4YTInIDogJ2MnLAorICAgICAgICBiJ1x4YTMnIDogJ0dCUCcsCisgICAgICAgIGInXHhhNCcgOiAnJCcsICNUaGlzIGFwcHJveGltYXRpb24gaXMgZXNwZWNpYWxseSBwYXJvY2hpYWwtLXRoaXMgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICNnZW5lcmljIGN1cnJlbmN5IHN5bWJvbC4KKyAgICAgICAgYidceGE1JyA6ICdZRU4nLAorICAgICAgICBiJ1x4YTYnIDogJ3wnLAorICAgICAgICBiJ1x4YTcnIDogJ1MnLAorICAgICAgICBiJ1x4YTgnIDogJy4uJywKKyAgICAgICAgYidceGE5JyA6ICcnLAorICAgICAgICBiJ1x4YWEnIDogJyh0aCknLAorICAgICAgICBiJ1x4YWInIDogJzw8JywKKyAgICAgICAgYidceGFjJyA6ICchJywKKyAgICAgICAgYidceGFkJyA6ICcgJywKKyAgICAgICAgYidceGFlJyA6ICcoUiknLAorICAgICAgICBiJ1x4YWYnIDogJy0nLAorICAgICAgICBiJ1x4YjAnIDogJ28nLAorICAgICAgICBiJ1x4YjEnIDogJystJywKKyAgICAgICAgYidceGIyJyA6ICcyJywKKyAgICAgICAgYidceGIzJyA6ICczJywKKyAgICAgICAgYidceGI0JyA6ICgiJyIsICdhY3V0ZScpLAorICAgICAgICBiJ1x4YjUnIDogJ3UnLAorICAgICAgICBiJ1x4YjYnIDogJ1AnLAorICAgICAgICBiJ1x4YjcnIDogJyonLAorICAgICAgICBiJ1x4YjgnIDogJywnLAorICAgICAgICBiJ1x4YjknIDogJzEnLAorICAgICAgICBiJ1x4YmEnIDogJyh0aCknLAorICAgICAgICBiJ1x4YmInIDogJz4+JywKKyAgICAgICAgYidceGJjJyA6ICcxLzQnLAorICAgICAgICBiJ1x4YmQnIDogJzEvMicsCisgICAgICAgIGInXHhiZScgOiAnMy80JywKKyAgICAgICAgYidceGJmJyA6ICc/JywKKyAgICAgICAgYidceGMwJyA6ICdBJywKKyAgICAgICAgYidceGMxJyA6ICdBJywKKyAgICAgICAgYidceGMyJyA6ICdBJywKKyAgICAgICAgYidceGMzJyA6ICdBJywKKyAgICAgICAgYidceGM0JyA6ICdBJywKKyAgICAgICAgYidceGM1JyA6ICdBJywKKyAgICAgICAgYidceGM2JyA6ICdBRScsCisgICAgICAgIGInXHhjNycgOiAnQycsCisgICAgICAgIGInXHhjOCcgOiAnRScsCisgICAgICAgIGInXHhjOScgOiAnRScsCisgICAgICAgIGInXHhjYScgOiAnRScsCisgICAgICAgIGInXHhjYicgOiAnRScsCisgICAgICAgIGInXHhjYycgOiAnSScsCisgICAgICAgIGInXHhjZCcgOiAnSScsCisgICAgICAgIGInXHhjZScgOiAnSScsCisgICAgICAgIGInXHhjZicgOiAnSScsCisgICAgICAgIGInXHhkMCcgOiAnRCcsCisgICAgICAgIGInXHhkMScgOiAnTicsCisgICAgICAgIGInXHhkMicgOiAnTycsCisgICAgICAgIGInXHhkMycgOiAnTycsCisgICAgICAgIGInXHhkNCcgOiAnTycsCisgICAgICAgIGInXHhkNScgOiAnTycsCisgICAgICAgIGInXHhkNicgOiAnTycsCisgICAgICAgIGInXHhkNycgOiAnKicsCisgICAgICAgIGInXHhkOCcgOiAnTycsCisgICAgICAgIGInXHhkOScgOiAnVScsCisgICAgICAgIGInXHhkYScgOiAnVScsCisgICAgICAgIGInXHhkYicgOiAnVScsCisgICAgICAgIGInXHhkYycgOiAnVScsCisgICAgICAgIGInXHhkZCcgOiAnWScsCisgICAgICAgIGInXHhkZScgOiAnYicsCisgICAgICAgIGInXHhkZicgOiAnQicsCisgICAgICAgIGInXHhlMCcgOiAnYScsCisgICAgICAgIGInXHhlMScgOiAnYScsCisgICAgICAgIGInXHhlMicgOiAnYScsCisgICAgICAgIGInXHhlMycgOiAnYScsCisgICAgICAgIGInXHhlNCcgOiAnYScsCisgICAgICAgIGInXHhlNScgOiAnYScsCisgICAgICAgIGInXHhlNicgOiAnYWUnLAorICAgICAgICBiJ1x4ZTcnIDogJ2MnLAorICAgICAgICBiJ1x4ZTgnIDogJ2UnLAorICAgICAgICBiJ1x4ZTknIDogJ2UnLAorICAgICAgICBiJ1x4ZWEnIDogJ2UnLAorICAgICAgICBiJ1x4ZWInIDogJ2UnLAorICAgICAgICBiJ1x4ZWMnIDogJ2knLAorICAgICAgICBiJ1x4ZWQnIDogJ2knLAorICAgICAgICBiJ1x4ZWUnIDogJ2knLAorICAgICAgICBiJ1x4ZWYnIDogJ2knLAorICAgICAgICBiJ1x4ZjAnIDogJ28nLAorICAgICAgICBiJ1x4ZjEnIDogJ24nLAorICAgICAgICBiJ1x4ZjInIDogJ28nLAorICAgICAgICBiJ1x4ZjMnIDogJ28nLAorICAgICAgICBiJ1x4ZjQnIDogJ28nLAorICAgICAgICBiJ1x4ZjUnIDogJ28nLAorICAgICAgICBiJ1x4ZjYnIDogJ28nLAorICAgICAgICBiJ1x4ZjcnIDogJy8nLAorICAgICAgICBiJ1x4ZjgnIDogJ28nLAorICAgICAgICBiJ1x4ZjknIDogJ3UnLAorICAgICAgICBiJ1x4ZmEnIDogJ3UnLAorICAgICAgICBiJ1x4ZmInIDogJ3UnLAorICAgICAgICBiJ1x4ZmMnIDogJ3UnLAorICAgICAgICBiJ1x4ZmQnIDogJ3knLAorICAgICAgICBiJ1x4ZmUnIDogJ2InLAorICAgICAgICBiJ1x4ZmYnIDogJ3knLAorICAgICAgICB9CisKKyAgICAjIEEgbWFwIHVzZWQgd2hlbiByZW1vdmluZyByb2d1ZSBXaW5kb3dzLTEyNTIvSVNPLTg4NTktMQorICAgICMgY2hhcmFjdGVycyBpbiBvdGhlcndpc2UgVVRGLTggZG9jdW1lbnRzLgorICAgICMKKyAgICAjIE5vdGUgdGhhdCBceDgxLCBceDhkLCBceDhmLCBceDkwLCBhbmQgXHg5ZCBhcmUgdW5kZWZpbmVkIGluCisgICAgIyBXaW5kb3dzLTEyNTIuCisgICAgV0lORE9XU18xMjUyX1RPX1VURjggPSB7CisgICAgICAgIDB4ODAgOiBiJ1x4ZTJceDgyXHhhYycsICMg4oKsCisgICAgICAgIDB4ODIgOiBiJ1x4ZTJceDgwXHg5YScsICMg4oCaCisgICAgICAgIDB4ODMgOiBiJ1x4YzZceDkyJywgICAgICMgxpIKKyAgICAgICAgMHg4NCA6IGInXHhlMlx4ODBceDllJywgIyDigJ4KKyAgICAgICAgMHg4NSA6IGInXHhlMlx4ODBceGE2JywgIyDigKYKKyAgICAgICAgMHg4NiA6IGInXHhlMlx4ODBceGEwJywgIyDigKAKKyAgICAgICAgMHg4NyA6IGInXHhlMlx4ODBceGExJywgIyDigKEKKyAgICAgICAgMHg4OCA6IGInXHhjYlx4ODYnLCAgICAgIyDLhgorICAgICAgICAweDg5IDogYidceGUyXHg4MFx4YjAnLCAjIOKAsAorICAgICAgICAweDhhIDogYidceGM1XHhhMCcsICAgICAjIMWgCisgICAgICAgIDB4OGIgOiBiJ1x4ZTJceDgwXHhiOScsICMg4oC5CisgICAgICAgIDB4OGMgOiBiJ1x4YzVceDkyJywgICAgICMgxZIKKyAgICAgICAgMHg4ZSA6IGInXHhjNVx4YmQnLCAgICAgIyDFvQorICAgICAgICAweDkxIDogYidceGUyXHg4MFx4OTgnLCAjIOKAmAorICAgICAgICAweDkyIDogYidceGUyXHg4MFx4OTknLCAjIOKAmQorICAgICAgICAweDkzIDogYidceGUyXHg4MFx4OWMnLCAjIOKAnAorICAgICAgICAweDk0IDogYidceGUyXHg4MFx4OWQnLCAjIOKAnQorICAgICAgICAweDk1IDogYidceGUyXHg4MFx4YTInLCAjIOKAogorICAgICAgICAweDk2IDogYidceGUyXHg4MFx4OTMnLCAjIOKAkworICAgICAgICAweDk3IDogYidceGUyXHg4MFx4OTQnLCAjIOKAlAorICAgICAgICAweDk4IDogYidceGNiXHg5YycsICAgICAjIMucCisgICAgICAgIDB4OTkgOiBiJ1x4ZTJceDg0XHhhMicsICMg4oSiCisgICAgICAgIDB4OWEgOiBiJ1x4YzVceGExJywgICAgICMgxaEKKyAgICAgICAgMHg5YiA6IGInXHhlMlx4ODBceGJhJywgIyDigLoKKyAgICAgICAgMHg5YyA6IGInXHhjNVx4OTMnLCAgICAgIyDFkworICAgICAgICAweDllIDogYidceGM1XHhiZScsICAgICAjIMW+CisgICAgICAgIDB4OWYgOiBiJ1x4YzVceGI4JywgICAgICMgxbgKKyAgICAgICAgMHhhMCA6IGInXHhjMlx4YTAnLCAgICAgIyDCoAorICAgICAgICAweGExIDogYidceGMyXHhhMScsICAgICAjIMKhCisgICAgICAgIDB4YTIgOiBiJ1x4YzJceGEyJywgICAgICMgwqIKKyAgICAgICAgMHhhMyA6IGInXHhjMlx4YTMnLCAgICAgIyDCoworICAgICAgICAweGE0IDogYidceGMyXHhhNCcsICAgICAjIMKkCisgICAgICAgIDB4YTUgOiBiJ1x4YzJceGE1JywgICAgICMgwqUKKyAgICAgICAgMHhhNiA6IGInXHhjMlx4YTYnLCAgICAgIyDCpgorICAgICAgICAweGE3IDogYidceGMyXHhhNycsICAgICAjIMKnCisgICAgICAgIDB4YTggOiBiJ1x4YzJceGE4JywgICAgICMgwqgKKyAgICAgICAgMHhhOSA6IGInXHhjMlx4YTknLCAgICAgIyDCqQorICAgICAgICAweGFhIDogYidceGMyXHhhYScsICAgICAjIMKqCisgICAgICAgIDB4YWIgOiBiJ1x4YzJceGFiJywgICAgICMgwqsKKyAgICAgICAgMHhhYyA6IGInXHhjMlx4YWMnLCAgICAgIyDCrAorICAgICAgICAweGFkIDogYidceGMyXHhhZCcsICAgICAjIMKtCisgICAgICAgIDB4YWUgOiBiJ1x4YzJceGFlJywgICAgICMgwq4KKyAgICAgICAgMHhhZiA6IGInXHhjMlx4YWYnLCAgICAgIyDCrworICAgICAgICAweGIwIDogYidceGMyXHhiMCcsICAgICAjIMKwCisgICAgICAgIDB4YjEgOiBiJ1x4YzJceGIxJywgICAgICMgwrEKKyAgICAgICAgMHhiMiA6IGInXHhjMlx4YjInLCAgICAgIyDCsgorICAgICAgICAweGIzIDogYidceGMyXHhiMycsICAgICAjIMKzCisgICAgICAgIDB4YjQgOiBiJ1x4YzJceGI0JywgICAgICMgwrQKKyAgICAgICAgMHhiNSA6IGInXHhjMlx4YjUnLCAgICAgIyDCtQorICAgICAgICAweGI2IDogYidceGMyXHhiNicsICAgICAjIMK2CisgICAgICAgIDB4YjcgOiBiJ1x4YzJceGI3JywgICAgICMgwrcKKyAgICAgICAgMHhiOCA6IGInXHhjMlx4YjgnLCAgICAgIyDCuAorICAgICAgICAweGI5IDogYidceGMyXHhiOScsICAgICAjIMK5CisgICAgICAgIDB4YmEgOiBiJ1x4YzJceGJhJywgICAgICMgwroKKyAgICAgICAgMHhiYiA6IGInXHhjMlx4YmInLCAgICAgIyDCuworICAgICAgICAweGJjIDogYidceGMyXHhiYycsICAgICAjIMK8CisgICAgICAgIDB4YmQgOiBiJ1x4YzJceGJkJywgICAgICMgwr0KKyAgICAgICAgMHhiZSA6IGInXHhjMlx4YmUnLCAgICAgIyDCvgorICAgICAgICAweGJmIDogYidceGMyXHhiZicsICAgICAjIMK/CisgICAgICAgIDB4YzAgOiBiJ1x4YzNceDgwJywgICAgICMgw4AKKyAgICAgICAgMHhjMSA6IGInXHhjM1x4ODEnLCAgICAgIyDDgQorICAgICAgICAweGMyIDogYidceGMzXHg4MicsICAgICAjIMOCCisgICAgICAgIDB4YzMgOiBiJ1x4YzNceDgzJywgICAgICMgw4MKKyAgICAgICAgMHhjNCA6IGInXHhjM1x4ODQnLCAgICAgIyDDhAorICAgICAgICAweGM1IDogYidceGMzXHg4NScsICAgICAjIMOFCisgICAgICAgIDB4YzYgOiBiJ1x4YzNceDg2JywgICAgICMgw4YKKyAgICAgICAgMHhjNyA6IGInXHhjM1x4ODcnLCAgICAgIyDDhworICAgICAgICAweGM4IDogYidceGMzXHg4OCcsICAgICAjIMOICisgICAgICAgIDB4YzkgOiBiJ1x4YzNceDg5JywgICAgICMgw4kKKyAgICAgICAgMHhjYSA6IGInXHhjM1x4OGEnLCAgICAgIyDDigorICAgICAgICAweGNiIDogYidceGMzXHg4YicsICAgICAjIMOLCisgICAgICAgIDB4Y2MgOiBiJ1x4YzNceDhjJywgICAgICMgw4wKKyAgICAgICAgMHhjZCA6IGInXHhjM1x4OGQnLCAgICAgIyDDjQorICAgICAgICAweGNlIDogYidceGMzXHg4ZScsICAgICAjIMOOCisgICAgICAgIDB4Y2YgOiBiJ1x4YzNceDhmJywgICAgICMgw48KKyAgICAgICAgMHhkMCA6IGInXHhjM1x4OTAnLCAgICAgIyDDkAorICAgICAgICAweGQxIDogYidceGMzXHg5MScsICAgICAjIMORCisgICAgICAgIDB4ZDIgOiBiJ1x4YzNceDkyJywgICAgICMgw5IKKyAgICAgICAgMHhkMyA6IGInXHhjM1x4OTMnLCAgICAgIyDDkworICAgICAgICAweGQ0IDogYidceGMzXHg5NCcsICAgICAjIMOUCisgICAgICAgIDB4ZDUgOiBiJ1x4YzNceDk1JywgICAgICMgw5UKKyAgICAgICAgMHhkNiA6IGInXHhjM1x4OTYnLCAgICAgIyDDlgorICAgICAgICAweGQ3IDogYidceGMzXHg5NycsICAgICAjIMOXCisgICAgICAgIDB4ZDggOiBiJ1x4YzNceDk4JywgICAgICMgw5gKKyAgICAgICAgMHhkOSA6IGInXHhjM1x4OTknLCAgICAgIyDDmQorICAgICAgICAweGRhIDogYidceGMzXHg5YScsICAgICAjIMOaCisgICAgICAgIDB4ZGIgOiBiJ1x4YzNceDliJywgICAgICMgw5sKKyAgICAgICAgMHhkYyA6IGInXHhjM1x4OWMnLCAgICAgIyDDnAorICAgICAgICAweGRkIDogYidceGMzXHg5ZCcsICAgICAjIMOdCisgICAgICAgIDB4ZGUgOiBiJ1x4YzNceDllJywgICAgICMgw54KKyAgICAgICAgMHhkZiA6IGInXHhjM1x4OWYnLCAgICAgIyDDnworICAgICAgICAweGUwIDogYidceGMzXHhhMCcsICAgICAjIMOgCisgICAgICAgIDB4ZTEgOiBiJ1x4YTEnLCAgICAgIyDDoQorICAgICAgICAweGUyIDogYidceGMzXHhhMicsICAgICAjIMOiCisgICAgICAgIDB4ZTMgOiBiJ1x4YzNceGEzJywgICAgICMgw6MKKyAgICAgICAgMHhlNCA6IGInXHhjM1x4YTQnLCAgICAgIyDDpAorICAgICAgICAweGU1IDogYidceGMzXHhhNScsICAgICAjIMOlCisgICAgICAgIDB4ZTYgOiBiJ1x4YzNceGE2JywgICAgICMgw6YKKyAgICAgICAgMHhlNyA6IGInXHhjM1x4YTcnLCAgICAgIyDDpworICAgICAgICAweGU4IDogYidceGMzXHhhOCcsICAgICAjIMOoCisgICAgICAgIDB4ZTkgOiBiJ1x4YzNceGE5JywgICAgICMgw6kKKyAgICAgICAgMHhlYSA6IGInXHhjM1x4YWEnLCAgICAgIyDDqgorICAgICAgICAweGViIDogYidceGMzXHhhYicsICAgICAjIMOrCisgICAgICAgIDB4ZWMgOiBiJ1x4YzNceGFjJywgICAgICMgw6wKKyAgICAgICAgMHhlZCA6IGInXHhjM1x4YWQnLCAgICAgIyDDrQorICAgICAgICAweGVlIDogYidceGMzXHhhZScsICAgICAjIMOuCisgICAgICAgIDB4ZWYgOiBiJ1x4YzNceGFmJywgICAgICMgw68KKyAgICAgICAgMHhmMCA6IGInXHhjM1x4YjAnLCAgICAgIyDDsAorICAgICAgICAweGYxIDogYidceGMzXHhiMScsICAgICAjIMOxCisgICAgICAgIDB4ZjIgOiBiJ1x4YzNceGIyJywgICAgICMgw7IKKyAgICAgICAgMHhmMyA6IGInXHhjM1x4YjMnLCAgICAgIyDDsworICAgICAgICAweGY0IDogYidceGMzXHhiNCcsICAgICAjIMO0CisgICAgICAgIDB4ZjUgOiBiJ1x4YzNceGI1JywgICAgICMgw7UKKyAgICAgICAgMHhmNiA6IGInXHhjM1x4YjYnLCAgICAgIyDDtgorICAgICAgICAweGY3IDogYidceGMzXHhiNycsICAgICAjIMO3CisgICAgICAgIDB4ZjggOiBiJ1x4YzNceGI4JywgICAgICMgw7gKKyAgICAgICAgMHhmOSA6IGInXHhjM1x4YjknLCAgICAgIyDDuQorICAgICAgICAweGZhIDogYidceGMzXHhiYScsICAgICAjIMO6CisgICAgICAgIDB4ZmIgOiBiJ1x4YzNceGJiJywgICAgICMgw7sKKyAgICAgICAgMHhmYyA6IGInXHhjM1x4YmMnLCAgICAgIyDDvAorICAgICAgICAweGZkIDogYidceGMzXHhiZCcsICAgICAjIMO9CisgICAgICAgIDB4ZmUgOiBiJ1x4YzNceGJlJywgICAgICMgw74KKyAgICAgICAgfQorCisgICAgTVVMVElCWVRFX01BUktFUlNfQU5EX1NJWkVTID0gWworICAgICAgICAoMHhjMiwgMHhkZiwgMiksICMgMi1ieXRlIGNoYXJhY3RlcnMgc3RhcnQgd2l0aCBhIGJ5dGUgQzItREYKKyAgICAgICAgKDB4ZTAsIDB4ZWYsIDMpLCAjIDMtYnl0ZSBjaGFyYWN0ZXJzIHN0YXJ0IHdpdGggRTAtRUYKKyAgICAgICAgKDB4ZjAsIDB4ZjQsIDQpLCAjIDQtYnl0ZSBjaGFyYWN0ZXJzIHN0YXJ0IHdpdGggRjAtRjQKKyAgICAgICAgXQorCisgICAgRklSU1RfTVVMVElCWVRFX01BUktFUiA9IE1VTFRJQllURV9NQVJLRVJTX0FORF9TSVpFU1swXVswXQorICAgIExBU1RfTVVMVElCWVRFX01BUktFUiA9IE1VTFRJQllURV9NQVJLRVJTX0FORF9TSVpFU1stMV1bMV0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkZXR3aW5nbGUoY2xzLCBpbl9ieXRlcywgbWFpbl9lbmNvZGluZz0idXRmOCIsCisgICAgICAgICAgICAgICAgICBlbWJlZGRlZF9lbmNvZGluZz0id2luZG93cy0xMjUyIik6CisgICAgICAgICIiIkZpeCBjaGFyYWN0ZXJzIGZyb20gb25lIGVuY29kaW5nIGVtYmVkZGVkIGluIHNvbWUgb3RoZXIgZW5jb2RpbmcuCisKKyAgICAgICAgQ3VycmVudGx5IHRoZSBvbmx5IHNpdHVhdGlvbiBzdXBwb3J0ZWQgaXMgV2luZG93cy0xMjUyIChvciBpdHMKKyAgICAgICAgc3Vic2V0IElTTy04ODU5LTEpLCBlbWJlZGRlZCBpbiBVVEYtOC4KKworICAgICAgICBUaGUgaW5wdXQgbXVzdCBiZSBhIGJ5dGVzdHJpbmcuIElmIHlvdSd2ZSBhbHJlYWR5IGNvbnZlcnRlZAorICAgICAgICB0aGUgZG9jdW1lbnQgdG8gVW5pY29kZSwgeW91J3JlIHRvbyBsYXRlLgorCisgICAgICAgIFRoZSBvdXRwdXQgaXMgYSBieXRlc3RyaW5nIGluIHdoaWNoIGBlbWJlZGRlZF9lbmNvZGluZ2AKKyAgICAgICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gY29udmVydGVkIHRvIHRoZWlyIGBtYWluX2VuY29kaW5nYAorICAgICAgICBlcXVpdmFsZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGVtYmVkZGVkX2VuY29kaW5nLnJlcGxhY2UoJ18nLCAnLScpLmxvd2VyKCkgbm90IGluICgKKyAgICAgICAgICAgICd3aW5kb3dzLTEyNTInLCAnd2luZG93c18xMjUyJyk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgICAgICJXaW5kb3dzLTEyNTIgYW5kIElTTy04ODU5LTEgYXJlIHRoZSBvbmx5IGN1cnJlbnRseSBzdXBwb3J0ZWQgIgorICAgICAgICAgICAgICAgICJlbWJlZGRlZCBlbmNvZGluZ3MuIikKKworICAgICAgICBpZiBtYWluX2VuY29kaW5nLmxvd2VyKCkgbm90IGluICgndXRmOCcsICd1dGYtOCcpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAiVVRGLTggaXMgdGhlIG9ubHkgY3VycmVudGx5IHN1cHBvcnRlZCBtYWluIGVuY29kaW5nLiIpCisKKyAgICAgICAgYnl0ZV9jaHVua3MgPSBbXQorCisgICAgICAgIGNodW5rX3N0YXJ0ID0gMAorICAgICAgICBwb3MgPSAwCisgICAgICAgIHdoaWxlIHBvcyA8IGxlbihpbl9ieXRlcyk6CisgICAgICAgICAgICBieXRlID0gaW5fYnl0ZXNbcG9zXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYnl0ZSwgaW50KToKKyAgICAgICAgICAgICAgICAjIFB5dGhvbiAyLngKKyAgICAgICAgICAgICAgICBieXRlID0gb3JkKGJ5dGUpCisgICAgICAgICAgICBpZiAoYnl0ZSA+PSBjbHMuRklSU1RfTVVMVElCWVRFX01BUktFUgorICAgICAgICAgICAgICAgIGFuZCBieXRlIDw9IGNscy5MQVNUX01VTFRJQllURV9NQVJLRVIpOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBVVEYtOCBtdWx0aWJ5dGUgY2hhcmFjdGVyLiBTa2lwCisgICAgICAgICAgICAgICAgIyB0byB0aGUgZW5kLgorICAgICAgICAgICAgICAgIGZvciBzdGFydCwgZW5kLCBzaXplIGluIGNscy5NVUxUSUJZVEVfTUFSS0VSU19BTkRfU0laRVM6CisgICAgICAgICAgICAgICAgICAgIGlmIGJ5dGUgPj0gc3RhcnQgYW5kIGJ5dGUgPD0gZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGJ5dGUgPj0gMHg4MCBhbmQgYnl0ZSBpbiBjbHMuV0lORE9XU18xMjUyX1RPX1VURjg6CisgICAgICAgICAgICAgICAgIyBXZSBmb3VuZCBhIFdpbmRvd3MtMTI1MiBjaGFyYWN0ZXIhCisgICAgICAgICAgICAgICAgIyBTYXZlIHRoZSBzdHJpbmcgdXAgdG8gdGhpcyBwb2ludCBhcyBhIGNodW5rLgorICAgICAgICAgICAgICAgIGJ5dGVfY2h1bmtzLmFwcGVuZChpbl9ieXRlc1tjaHVua19zdGFydDpwb3NdKQorCisgICAgICAgICAgICAgICAgIyBOb3cgdHJhbnNsYXRlIHRoZSBXaW5kb3dzLTEyNTIgY2hhcmFjdGVyIGludG8gVVRGLTgKKyAgICAgICAgICAgICAgICAjIGFuZCBhZGQgaXQgYXMgYW5vdGhlciwgb25lLWJ5dGUgY2h1bmsuCisgICAgICAgICAgICAgICAgYnl0ZV9jaHVua3MuYXBwZW5kKGNscy5XSU5ET1dTXzEyNTJfVE9fVVRGOFtieXRlXSkKKyAgICAgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICAgICAgICAgIGNodW5rX3N0YXJ0ID0gcG9zCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgR28gb24gdG8gdGhlIG5leHQgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgIHBvcyArPSAxCisgICAgICAgIGlmIGNodW5rX3N0YXJ0ID09IDA6CisgICAgICAgICAgICAjIFRoZSBzdHJpbmcgaXMgdW5jaGFuZ2VkLgorICAgICAgICAgICAgcmV0dXJuIGluX2J5dGVzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFN0b3JlIHRoZSBmaW5hbCBjaHVuay4KKyAgICAgICAgICAgIGJ5dGVfY2h1bmtzLmFwcGVuZChpbl9ieXRlc1tjaHVua19zdGFydDpdKQorICAgICAgICByZXR1cm4gYicnLmpvaW4oYnl0ZV9jaHVua3MpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2RpYWdub3NlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZGlhZ25vc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwYjAwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L2RpYWdub3NlLnB5CkBAIC0wLDAgKzEsMjA0IEBACisiIiJEaWFnbm9zdGljIGZ1bmN0aW9ucywgbWFpbmx5IGZvciB1c2Ugd2hlbiBkb2luZyB0ZWNoIHN1cHBvcnQuIiIiCitpbXBvcnQgY1Byb2ZpbGUKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIEhUTUxQYXJzZXIgaW1wb3J0IEhUTUxQYXJzZXIKK2ltcG9ydCBiczQKK2Zyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwLCBfX3ZlcnNpb25fXworZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgYnVpbGRlcl9yZWdpc3RyeQorCitpbXBvcnQgb3MKK2ltcG9ydCBwc3RhdHMKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMKK2ltcG9ydCBjUHJvZmlsZQorCitkZWYgZGlhZ25vc2UoZGF0YSk6CisgICAgIiIiRGlhZ25vc3RpYyBzdWl0ZSBmb3IgaXNvbGF0aW5nIGNvbW1vbiBwcm9ibGVtcy4iIiIKKyAgICBwcmludCAiRGlhZ25vc3RpYyBydW5uaW5nIG9uIEJlYXV0aWZ1bCBTb3VwICVzIiAlIF9fdmVyc2lvbl9fCisgICAgcHJpbnQgIlB5dGhvbiB2ZXJzaW9uICVzIiAlIHN5cy52ZXJzaW9uCisKKyAgICBiYXNpY19wYXJzZXJzID0gWyJodG1sLnBhcnNlciIsICJodG1sNWxpYiIsICJseG1sIl0KKyAgICBmb3IgbmFtZSBpbiBiYXNpY19wYXJzZXJzOgorICAgICAgICBmb3IgYnVpbGRlciBpbiBidWlsZGVyX3JlZ2lzdHJ5LmJ1aWxkZXJzOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBidWlsZGVyLmZlYXR1cmVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNpY19wYXJzZXJzLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgcHJpbnQgKAorICAgICAgICAgICAgICAgICJJIG5vdGljZWQgdGhhdCAlcyBpcyBub3QgaW5zdGFsbGVkLiBJbnN0YWxsaW5nIGl0IG1heSBoZWxwLiIgJQorICAgICAgICAgICAgICAgIG5hbWUpCisKKyAgICBpZiAnbHhtbCcgaW4gYmFzaWNfcGFyc2VyczoKKyAgICAgICAgYmFzaWNfcGFyc2Vycy5hcHBlbmQoWyJseG1sIiwgInhtbCJdKQorICAgICAgICBmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCisgICAgICAgIHByaW50ICJGb3VuZCBseG1sIHZlcnNpb24gJXMiICUgIi4iLmpvaW4obWFwKHN0cixldHJlZS5MWE1MX1ZFUlNJT04pKQorCisgICAgaWYgJ2h0bWw1bGliJyBpbiBiYXNpY19wYXJzZXJzOgorICAgICAgICBpbXBvcnQgaHRtbDVsaWIKKyAgICAgICAgcHJpbnQgIkZvdW5kIGh0bWw1bGliIHZlcnNpb24gJXMiICUgaHRtbDVsaWIuX192ZXJzaW9uX18KKworICAgIGlmIGhhc2F0dHIoZGF0YSwgJ3JlYWQnKToKKyAgICAgICAgZGF0YSA9IGRhdGEucmVhZCgpCisgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhkYXRhKToKKyAgICAgICAgcHJpbnQgJyIlcyIgbG9va3MgbGlrZSBhIGZpbGVuYW1lLiBSZWFkaW5nIGRhdGEgZnJvbSB0aGUgZmlsZS4nICUgZGF0YQorICAgICAgICBkYXRhID0gb3BlbihkYXRhKS5yZWFkKCkKKyAgICBlbGlmIGRhdGEuc3RhcnRzd2l0aCgiaHR0cDoiKSBvciBkYXRhLnN0YXJ0c3dpdGgoImh0dHBzOiIpOgorICAgICAgICBwcmludCAnIiVzIiBsb29rcyBsaWtlIGEgVVJMLiBCZWF1dGlmdWwgU291cCBpcyBub3QgYW4gSFRUUCBjbGllbnQuJyAlIGRhdGEKKyAgICAgICAgcHJpbnQgIllvdSBuZWVkIHRvIHVzZSBzb21lIG90aGVyIGxpYnJhcnkgdG8gZ2V0IHRoZSBkb2N1bWVudCBiZWhpbmQgdGhlIFVSTCwgYW5kIGZlZWQgdGhhdCBkb2N1bWVudCB0byBCZWF1dGlmdWwgU291cC4iCisgICAgICAgIHJldHVybgorICAgIHByaW50CisKKyAgICBmb3IgcGFyc2VyIGluIGJhc2ljX3BhcnNlcnM6CisgICAgICAgIHByaW50ICJUcnlpbmcgdG8gcGFyc2UgeW91ciBtYXJrdXAgd2l0aCAlcyIgJSBwYXJzZXIKKyAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGRhdGEsIHBhcnNlcikKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAiJXMgY291bGQgbm90IHBhcnNlIHRoZSBtYXJrdXAuIiAlIHBhcnNlcgorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICBwcmludCAiSGVyZSdzIHdoYXQgJXMgZGlkIHdpdGggdGhlIG1hcmt1cDoiICUgcGFyc2VyCisgICAgICAgICAgICBwcmludCBzb3VwLnByZXR0aWZ5KCkKKworICAgICAgICBwcmludCAiLSIgKiA4MAorCitkZWYgbHhtbF90cmFjZShkYXRhLCBodG1sPVRydWUsICoqa3dhcmdzKToKKyAgICAiIiJQcmludCBvdXQgdGhlIGx4bWwgZXZlbnRzIHRoYXQgb2NjdXIgZHVyaW5nIHBhcnNpbmcuCisKKyAgICBUaGlzIGxldHMgeW91IHNlZSBob3cgbHhtbCBwYXJzZXMgYSBkb2N1bWVudCB3aGVuIG5vIEJlYXV0aWZ1bAorICAgIFNvdXAgY29kZSBpcyBydW5uaW5nLgorICAgICIiIgorICAgIGZyb20gbHhtbCBpbXBvcnQgZXRyZWUKKyAgICBmb3IgZXZlbnQsIGVsZW1lbnQgaW4gZXRyZWUuaXRlcnBhcnNlKFN0cmluZ0lPKGRhdGEpLCBodG1sPWh0bWwsICoqa3dhcmdzKToKKyAgICAgICAgcHJpbnQoIiVzLCAlNHMsICVzIiAlIChldmVudCwgZWxlbWVudC50YWcsIGVsZW1lbnQudGV4dCkpCisKK2NsYXNzIEFubm91bmNpbmdQYXJzZXIoSFRNTFBhcnNlcik6CisgICAgIiIiQW5ub3VuY2VzIEhUTUxQYXJzZXIgcGFyc2UgZXZlbnRzLCB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuIiIiCisKKyAgICBkZWYgX3Aoc2VsZiwgcyk6CisgICAgICAgIHByaW50KHMpCisKKyAgICBkZWYgaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgc2VsZi5fcCgiJXMgU1RBUlQiICUgbmFtZSkKKworICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9wKCIlcyBFTkQiICUgbmFtZSkKKworICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fcCgiJXMgREFUQSIgJSBkYXRhKQorCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9wKCIlcyBDSEFSUkVGIiAlIG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fcCgiJXMgRU5USVRZUkVGIiAlIG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2NvbW1lbnQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIENPTU1FTlQiICUgZGF0YSkKKworICAgIGRlZiBoYW5kbGVfZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fcCgiJXMgREVDTCIgJSBkYXRhKQorCisgICAgZGVmIHVua25vd25fZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fcCgiJXMgVU5LTk9XTi1ERUNMIiAlIGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX3BpKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9wKCIlcyBQSSIgJSBkYXRhKQorCitkZWYgaHRtbHBhcnNlcl90cmFjZShkYXRhKToKKyAgICAiIiJQcmludCBvdXQgdGhlIEhUTUxQYXJzZXIgZXZlbnRzIHRoYXQgb2NjdXIgZHVyaW5nIHBhcnNpbmcuCisKKyAgICBUaGlzIGxldHMgeW91IHNlZSBob3cgSFRNTFBhcnNlciBwYXJzZXMgYSBkb2N1bWVudCB3aGVuIG5vCisgICAgQmVhdXRpZnVsIFNvdXAgY29kZSBpcyBydW5uaW5nLgorICAgICIiIgorICAgIHBhcnNlciA9IEFubm91bmNpbmdQYXJzZXIoKQorICAgIHBhcnNlci5mZWVkKGRhdGEpCisKK192b3dlbHMgPSAiYWVpb3UiCitfY29uc29uYW50cyA9ICJiY2RmZ2hqa2xtbnBxcnN0dnd4eXoiCisKK2RlZiByd29yZChsZW5ndGg9NSk6CisgICAgIkdlbmVyYXRlIGEgcmFuZG9tIHdvcmQtbGlrZSBzdHJpbmcuIgorICAgIHMgPSAnJworICAgIGZvciBpIGluIHJhbmdlKGxlbmd0aCk6CisgICAgICAgIGlmIGkgJSAyID09IDA6CisgICAgICAgICAgICB0ID0gX2NvbnNvbmFudHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHQgPSBfdm93ZWxzCisgICAgICAgIHMgKz0gcmFuZG9tLmNob2ljZSh0KQorICAgIHJldHVybiBzCisKK2RlZiByc2VudGVuY2UobGVuZ3RoPTQpOgorICAgICJHZW5lcmF0ZSBhIHJhbmRvbSBzZW50ZW5jZS1saWtlIHN0cmluZy4iCisgICAgcmV0dXJuICIgIi5qb2luKHJ3b3JkKHJhbmRvbS5yYW5kaW50KDQsOSkpIGZvciBpIGluIHJhbmdlKGxlbmd0aCkpCisgICAgICAgIAorZGVmIHJkb2MobnVtX2VsZW1lbnRzPTEwMDApOgorICAgICIiIlJhbmRvbWx5IGdlbmVyYXRlIGFuIGludmFsaWQgSFRNTCBkb2N1bWVudC4iIiIKKyAgICB0YWdfbmFtZXMgPSBbJ3AnLCAnZGl2JywgJ3NwYW4nLCAnaScsICdiJywgJ3NjcmlwdCcsICd0YWJsZSddCisgICAgZWxlbWVudHMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKG51bV9lbGVtZW50cyk6CisgICAgICAgIGNob2ljZSA9IHJhbmRvbS5yYW5kaW50KDAsMykKKyAgICAgICAgaWYgY2hvaWNlID09IDA6CisgICAgICAgICAgICAjIE5ldyB0YWcuCisgICAgICAgICAgICB0YWdfbmFtZSA9IHJhbmRvbS5jaG9pY2UodGFnX25hbWVzKQorICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKCI8JXM+IiAlIHRhZ19uYW1lKQorICAgICAgICBlbGlmIGNob2ljZSA9PSAxOgorICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKHJzZW50ZW5jZShyYW5kb20ucmFuZGludCgxLDQpKSkKKyAgICAgICAgZWxpZiBjaG9pY2UgPT0gMjoKKyAgICAgICAgICAgICMgQ2xvc2UgYSB0YWcuCisgICAgICAgICAgICB0YWdfbmFtZSA9IHJhbmRvbS5jaG9pY2UodGFnX25hbWVzKQorICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKCI8LyVzPiIgJSB0YWdfbmFtZSkKKyAgICByZXR1cm4gIjxodG1sPiIgKyAiXG4iLmpvaW4oZWxlbWVudHMpICsgIjwvaHRtbD4iCisKK2RlZiBiZW5jaG1hcmtfcGFyc2VycyhudW1fZWxlbWVudHM9MTAwMDAwKToKKyAgICAiIiJWZXJ5IGJhc2ljIGhlYWQtdG8taGVhZCBwZXJmb3JtYW5jZSBiZW5jaG1hcmsuIiIiCisgICAgcHJpbnQgIkNvbXBhcmF0aXZlIHBhcnNlciBiZW5jaG1hcmsgb24gQmVhdXRpZnVsIFNvdXAgJXMiICUgX192ZXJzaW9uX18KKyAgICBkYXRhID0gcmRvYyhudW1fZWxlbWVudHMpCisgICAgcHJpbnQgIkdlbmVyYXRlZCBhIGxhcmdlIGludmFsaWQgSFRNTCBkb2N1bWVudCAoJWQgYnl0ZXMpLiIgJSBsZW4oZGF0YSkKKyAgICAKKyAgICBmb3IgcGFyc2VyIGluIFsibHhtbCIsIFsibHhtbCIsICJodG1sIl0sICJodG1sNWxpYiIsICJodG1sLnBhcnNlciJdOgorICAgICAgICBzdWNjZXNzID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChkYXRhLCBwYXJzZXIpCisgICAgICAgICAgICBiID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAiJXMgY291bGQgbm90IHBhcnNlIHRoZSBtYXJrdXAuIiAlIHBhcnNlcgorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICBwcmludCAiQlM0KyVzIHBhcnNlZCB0aGUgbWFya3VwIGluICUuMmZzLiIgJSAocGFyc2VyLCBiLWEpCisKKyAgICBmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCisgICAgYSA9IHRpbWUudGltZSgpCisgICAgZXRyZWUuSFRNTChkYXRhKQorICAgIGIgPSB0aW1lLnRpbWUoKQorICAgIHByaW50ICJSYXcgbHhtbCBwYXJzZWQgdGhlIG1hcmt1cCBpbiAlLjJmcy4iICUgKGItYSkKKworICAgIGltcG9ydCBodG1sNWxpYgorICAgIHBhcnNlciA9IGh0bWw1bGliLkhUTUxQYXJzZXIoKQorICAgIGEgPSB0aW1lLnRpbWUoKQorICAgIHBhcnNlci5wYXJzZShkYXRhKQorICAgIGIgPSB0aW1lLnRpbWUoKQorICAgIHByaW50ICJSYXcgaHRtbDVsaWIgcGFyc2VkIHRoZSBtYXJrdXAgaW4gJS4yZnMuIiAlIChiLWEpCisKK2RlZiBwcm9maWxlKG51bV9lbGVtZW50cz0xMDAwMDAsIHBhcnNlcj0ibHhtbCIpOgorCisgICAgZmlsZWhhbmRsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgZmlsZW5hbWUgPSBmaWxlaGFuZGxlLm5hbWUKKworICAgIGRhdGEgPSByZG9jKG51bV9lbGVtZW50cykKKyAgICB2YXJzID0gZGljdChiczQ9YnM0LCBkYXRhPWRhdGEsIHBhcnNlcj1wYXJzZXIpCisgICAgY1Byb2ZpbGUucnVuY3R4KCdiczQuQmVhdXRpZnVsU291cChkYXRhLCBwYXJzZXIpJyAsIHZhcnMsIHZhcnMsIGZpbGVuYW1lKQorCisgICAgc3RhdHMgPSBwc3RhdHMuU3RhdHMoZmlsZW5hbWUpCisgICAgIyBzdGF0cy5zdHJpcF9kaXJzKCkKKyAgICBzdGF0cy5zb3J0X3N0YXRzKCJjdW11bGF0aXZlIikKKyAgICBzdGF0cy5wcmludF9zdGF0cygnX2h0bWw1bGlifGJzNCcsIDUwKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGRpYWdub3NlKHN5cy5zdGRpbi5yZWFkKCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC9lbGVtZW50LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZWxlbWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTlhZmRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvZWxlbWVudC5weQpAQCAtMCwwICsxLDE2MTEgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gYnM0LmRhbW1pdCBpbXBvcnQgRW50aXR5U3Vic3RpdHV0aW9uCisKK0RFRkFVTFRfT1VUUFVUX0VOQ09ESU5HID0gInV0Zi04IgorUFkzSyA9IChzeXMudmVyc2lvbl9pbmZvWzBdID4gMikKKword2hpdGVzcGFjZV9yZSA9IHJlLmNvbXBpbGUoIlxzKyIpCisKK2RlZiBfYWxpYXMoYXR0cik6CisgICAgIiIiQWxpYXMgb25lIGF0dHJpYnV0ZSBuYW1lIHRvIGFub3RoZXIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkiIiIKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWxpYXMoc2VsZik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIGF0dHIpCisKKyAgICBAYWxpYXMuc2V0dGVyCisgICAgZGVmIGFsaWFzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2V0YXR0cihzZWxmLCBhdHRyKQorICAgIHJldHVybiBhbGlhcworCisKK2NsYXNzIE5hbWVzcGFjZWRBdHRyaWJ1dGUodW5pY29kZSk6CisKKyAgICBkZWYgX19uZXdfXyhjbHMsIHByZWZpeCwgbmFtZSwgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBwcmVmaXgpCisgICAgICAgIGVsaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vdCByZWFsbHkgbmFtZXNwYWNlZC4KKyAgICAgICAgICAgIG9iaiA9IHVuaWNvZGUuX19uZXdfXyhjbHMsIG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBwcmVmaXggKyAiOiIgKyBuYW1lKQorICAgICAgICBvYmoucHJlZml4ID0gcHJlZml4CisgICAgICAgIG9iai5uYW1lID0gbmFtZQorICAgICAgICBvYmoubmFtZXNwYWNlID0gbmFtZXNwYWNlCisgICAgICAgIHJldHVybiBvYmoKKworY2xhc3MgQXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbih1bmljb2RlKToKKyAgICAiIiJBIHN0YW5kLWluIG9iamVjdCBmb3IgYSBjaGFyYWN0ZXIgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIEhUTUwuIiIiCisKK2NsYXNzIENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUoQXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbik6CisgICAgIiIiQSBnZW5lcmljIHN0YW5kLWluIGZvciB0aGUgdmFsdWUgb2YgYSBtZXRhIHRhZydzICdjaGFyc2V0JyBhdHRyaWJ1dGUuCisKKyAgICBXaGVuIEJlYXV0aWZ1bCBTb3VwIHBhcnNlcyB0aGUgbWFya3VwICc8bWV0YSBjaGFyc2V0PSJ1dGY4Ij4nLCB0aGUKKyAgICB2YWx1ZSBvZiB0aGUgJ2NoYXJzZXQnIGF0dHJpYnV0ZSB3aWxsIGJlIG9uZSBvZiB0aGVzZSBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIF9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSk6CisgICAgICAgIG9iaiA9IHVuaWNvZGUuX19uZXdfXyhjbHMsIG9yaWdpbmFsX3ZhbHVlKQorICAgICAgICBvYmoub3JpZ2luYWxfdmFsdWUgPSBvcmlnaW5hbF92YWx1ZQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIGVuY29kaW5nCisKKworY2xhc3MgQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZShBdHRyaWJ1dGVWYWx1ZVdpdGhDaGFyc2V0U3Vic3RpdHV0aW9uKToKKyAgICAiIiJBIGdlbmVyaWMgc3RhbmQtaW4gZm9yIHRoZSB2YWx1ZSBvZiBhIG1ldGEgdGFnJ3MgJ2NvbnRlbnQnIGF0dHJpYnV0ZS4KKworICAgIFdoZW4gQmVhdXRpZnVsIFNvdXAgcGFyc2VzIHRoZSBtYXJrdXA6CisgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0ZjgiPgorCisgICAgVGhlIHZhbHVlIG9mIHRoZSAnY29udGVudCcgYXR0cmlidXRlIHdpbGwgYmUgb25lIG9mIHRoZXNlIG9iamVjdHMuCisgICAgIiIiCisKKyAgICBDSEFSU0VUX1JFID0gcmUuY29tcGlsZSgiKChefDspXHMqY2hhcnNldD0pKFteO10qKSIsIHJlLk0pCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG9yaWdpbmFsX3ZhbHVlKToKKyAgICAgICAgbWF0Y2ggPSBjbHMuQ0hBUlNFVF9SRS5zZWFyY2gob3JpZ2luYWxfdmFsdWUpCisgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vIHN1YnN0aXR1dGlvbiBuZWNlc3NhcnkuCisgICAgICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKHVuaWNvZGUsIG9yaWdpbmFsX3ZhbHVlKQorCisgICAgICAgIG9iaiA9IHVuaWNvZGUuX19uZXdfXyhjbHMsIG9yaWdpbmFsX3ZhbHVlKQorICAgICAgICBvYmoub3JpZ2luYWxfdmFsdWUgPSBvcmlnaW5hbF92YWx1ZQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nKToKKyAgICAgICAgZGVmIHJld3JpdGUobWF0Y2gpOgorICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpICsgZW5jb2RpbmcKKyAgICAgICAgcmV0dXJuIHNlbGYuQ0hBUlNFVF9SRS5zdWIocmV3cml0ZSwgc2VsZi5vcmlnaW5hbF92YWx1ZSkKKworY2xhc3MgSFRNTEF3YXJlRW50aXR5U3Vic3RpdHV0aW9uKEVudGl0eVN1YnN0aXR1dGlvbik6CisKKyAgICAiIiJFbnRpdHkgc3Vic3RpdHV0aW9uIHJ1bGVzIHRoYXQgYXJlIGF3YXJlIG9mIHNvbWUgSFRNTCBxdWlya3MuCisKKyAgICBTcGVjaWZpY2FsbHksIHRoZSBjb250ZW50cyBvZiA8c2NyaXB0PiBhbmQgPHN0eWxlPiB0YWdzIHNob3VsZCBub3QKKyAgICB1bmRlcmdvIGVudGl0eSBzdWJzdGl0dXRpb24uCisKKyAgICBJbmNvbWluZyBOYXZpZ2FibGVTdHJpbmcgb2JqZWN0cyBhcmUgY2hlY2tlZCB0byBzZWUgaWYgdGhleSdyZSB0aGUKKyAgICBkaXJlY3QgY2hpbGRyZW4gb2YgYSA8c2NyaXB0PiBvciA8c3R5bGU+IHRhZy4KKyAgICAiIiIKKworICAgIGNkYXRhX2NvbnRhaW5pbmdfdGFncyA9IHNldChbInNjcmlwdCIsICJzdHlsZSJdKQorCisgICAgcHJlZm9ybWF0dGVkX3RhZ3MgPSBzZXQoWyJwcmUiXSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc3Vic3RpdHV0ZV9pZl9hcHByb3ByaWF0ZShjbHMsIG5zLCBmKToKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UobnMsIE5hdmlnYWJsZVN0cmluZykKKyAgICAgICAgICAgIGFuZCBucy5wYXJlbnQgaXMgbm90IE5vbmUKKyAgICAgICAgICAgIGFuZCBucy5wYXJlbnQubmFtZSBpbiBjbHMuY2RhdGFfY29udGFpbmluZ190YWdzKToKKyAgICAgICAgICAgICMgRG8gbm90aGluZy4KKyAgICAgICAgICAgIHJldHVybiBucworICAgICAgICAjIFN1YnN0aXR1dGUuCisgICAgICAgIHJldHVybiBmKG5zKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN1YnN0aXR1dGVfaHRtbChjbHMsIG5zKToKKyAgICAgICAgcmV0dXJuIGNscy5fc3Vic3RpdHV0ZV9pZl9hcHByb3ByaWF0ZSgKKyAgICAgICAgICAgIG5zLCBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV9odG1sKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN1YnN0aXR1dGVfeG1sKGNscywgbnMpOgorICAgICAgICByZXR1cm4gY2xzLl9zdWJzdGl0dXRlX2lmX2FwcHJvcHJpYXRlKAorICAgICAgICAgICAgbnMsIEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCkKKworY2xhc3MgUGFnZUVsZW1lbnQob2JqZWN0KToKKyAgICAiIiJDb250YWlucyB0aGUgbmF2aWdhdGlvbmFsIGluZm9ybWF0aW9uIGZvciBzb21lIHBhcnQgb2YgdGhlIHBhZ2UKKyAgICAoZWl0aGVyIGEgdGFnIG9yIGEgcGllY2Ugb2YgdGV4dCkiIiIKKworICAgICMgVGhlcmUgYXJlIGZpdmUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgImZvcm1hdHRlciIgYXJndW1lbnQgcGFzc2VkIGluCisgICAgIyB0byBtZXRob2RzIGxpa2UgZW5jb2RlKCkgYW5kIHByZXR0aWZ5KCk6CisgICAgIworICAgICMgImh0bWwiIC0gQWxsIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcworICAgICMgICBhcmUgY29udmVydGVkIHRvIHRob3NlIGVudGl0aWVzIG9uIG91dHB1dC4KKyAgICAjICJtaW5pbWFsIiAtIEJhcmUgYW1wZXJzYW5kcyBhbmQgYW5nbGUgYnJhY2tldHMgYXJlIGNvbnZlcnRlZCB0bworICAgICMgICBYTUwgZW50aXRpZXM6ICZhbXA7ICZsdDsgJmd0OworICAgICMgTm9uZSAtIFRoZSBudWxsIGZvcm1hdHRlci4gVW5pY29kZSBjaGFyYWN0ZXJzIGFyZSBuZXZlcgorICAgICMgICBjb252ZXJ0ZWQgdG8gZW50aXRpZXMuICBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCwgYnV0IGl0J3MKKyAgICAjICAgZmFzdGVyIHRoYW4gIm1pbmltYWwiLgorICAgICMgQSBmdW5jdGlvbiAtIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgc3RyaW5nIHRoYXQKKyAgICAjICBuZWVkcyB0byB1bmRlcmdvIGVudGl0eSBzdWJzdGl0dXRpb24uCisgICAgIworCisgICAgIyBJbiBhbiBIVE1MIGRvY3VtZW50LCB0aGUgZGVmYXVsdCAiaHRtbCIgYW5kICJtaW5pbWFsIiBmdW5jdGlvbnMKKyAgICAjIHdpbGwgbGVhdmUgdGhlIGNvbnRlbnRzIG9mIDxzY3JpcHQ+IGFuZCA8c3R5bGU+IHRhZ3MgYWxvbmUuIEZvcgorICAgICMgYW4gWE1MIGRvY3VtZW50LCBhbGwgdGFncyB3aWxsIGJlIGdpdmVuIHRoZSBzYW1lIHRyZWF0bWVudC4KKworICAgIEhUTUxfRk9STUFUVEVSUyA9IHsKKyAgICAgICAgImh0bWwiIDogSFRNTEF3YXJlRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfaHRtbCwKKyAgICAgICAgIm1pbmltYWwiIDogSFRNTEF3YXJlRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfeG1sLAorICAgICAgICBOb25lIDogTm9uZQorICAgICAgICB9CisKKyAgICBYTUxfRk9STUFUVEVSUyA9IHsKKyAgICAgICAgImh0bWwiIDogRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfaHRtbCwKKyAgICAgICAgIm1pbmltYWwiIDogRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfeG1sLAorICAgICAgICBOb25lIDogTm9uZQorICAgICAgICB9CisKKyAgICBkZWYgZm9ybWF0X3N0cmluZyhzZWxmLCBzLCBmb3JtYXR0ZXI9J21pbmltYWwnKToKKyAgICAgICAgIiIiRm9ybWF0IHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgdGhlIGdpdmVuIGZvcm1hdHRlci4iIiIKKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZvcm1hdHRlcik6CisgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9mb3JtYXR0ZXJfZm9yX25hbWUoZm9ybWF0dGVyKQorICAgICAgICBpZiBmb3JtYXR0ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIG91dHB1dCA9IHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dCA9IGZvcm1hdHRlcihzKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX2lzX3htbChzZWxmKToKKyAgICAgICAgIiIiSXMgdGhpcyBlbGVtZW50IHBhcnQgb2YgYW4gWE1MIHRyZWUgb3IgYW4gSFRNTCB0cmVlPworCisgICAgICAgIFRoaXMgaXMgdXNlZCB3aGVuIG1hcHBpbmcgYSBmb3JtYXR0ZXIgbmFtZSAoIm1pbmltYWwiKSB0byBhbgorICAgICAgICBhcHByb3ByaWF0ZSBmdW5jdGlvbiAob25lIHRoYXQgcGVyZm9ybXMgZW50aXR5LXN1YnN0aXR1dGlvbiBvbgorICAgICAgICB0aGUgY29udGVudHMgb2YgPHNjcmlwdD4gYW5kIDxzdHlsZT4gdGFncywgb3Igbm90KS4gSXQncworICAgICAgICBpbmVmZmljaWVudCwgYnV0IGl0IHNob3VsZCBiZSBjYWxsZWQgdmVyeSByYXJlbHkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgb2JqZWN0LiBJdCBzaG91bGQgaGF2ZSAuaXNfeG1sIHNldAorICAgICAgICAgICAgIyBmcm9tIHRyZWUgY3JlYXRpb24uIElmIG5vdCwgdGFrZSBhIGd1ZXNzLS1CUyBpcyB1c3VhbGx5CisgICAgICAgICAgICAjIHVzZWQgb24gSFRNTCBtYXJrdXAuCisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAnaXNfeG1sJywgRmFsc2UpCisgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5faXNfeG1sCisKKyAgICBkZWYgX2Zvcm1hdHRlcl9mb3JfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgIkxvb2sgdXAgYSBmb3JtYXR0ZXIgZnVuY3Rpb24gYmFzZWQgb24gaXRzIG5hbWUgYW5kIHRoZSB0cmVlLiIKKyAgICAgICAgaWYgc2VsZi5faXNfeG1sOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuWE1MX0ZPUk1BVFRFUlMuZ2V0KAorICAgICAgICAgICAgICAgIG5hbWUsIEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLkhUTUxfRk9STUFUVEVSUy5nZXQoCisgICAgICAgICAgICAgICAgbmFtZSwgSFRNTEF3YXJlRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfeG1sKQorCisgICAgZGVmIHNldHVwKHNlbGYsIHBhcmVudD1Ob25lLCBwcmV2aW91c19lbGVtZW50PU5vbmUpOgorICAgICAgICAiIiJTZXRzIHVwIHRoZSBpbml0aWFsIHJlbGF0aW9ucyBiZXR3ZWVuIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAgb3RoZXIgZWxlbWVudHMuIiIiCisgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudCA9IHByZXZpb3VzX2VsZW1lbnQKKyAgICAgICAgaWYgcHJldmlvdXNfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBzZWxmCisgICAgICAgIHNlbGYubmV4dF9lbGVtZW50ID0gTm9uZQorICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcgPSBOb25lCisgICAgICAgIHNlbGYubmV4dF9zaWJsaW5nID0gTm9uZQorICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZSBhbmQgc2VsZi5wYXJlbnQuY29udGVudHM6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcgPSBzZWxmLnBhcmVudC5jb250ZW50c1stMV0KKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfc2libGluZy5uZXh0X3NpYmxpbmcgPSBzZWxmCisKKyAgICBuZXh0U2libGluZyA9IF9hbGlhcygibmV4dF9zaWJsaW5nIikgICMgQlMzCisgICAgcHJldmlvdXNTaWJsaW5nID0gX2FsaWFzKCJwcmV2aW91c19zaWJsaW5nIikgICMgQlMzCisKKyAgICBkZWYgcmVwbGFjZV93aXRoKHNlbGYsIHJlcGxhY2Vfd2l0aCk6CisgICAgICAgIGlmIHJlcGxhY2Vfd2l0aCBpcyBzZWxmOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHJlcGxhY2Vfd2l0aCBpcyBzZWxmLnBhcmVudDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCByZXBsYWNlIGEgVGFnIHdpdGggaXRzIHBhcmVudC4iKQorICAgICAgICBvbGRfcGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgbXlfaW5kZXggPSBzZWxmLnBhcmVudC5pbmRleChzZWxmKQorICAgICAgICBzZWxmLmV4dHJhY3QoKQorICAgICAgICBvbGRfcGFyZW50Lmluc2VydChteV9pbmRleCwgcmVwbGFjZV93aXRoKQorICAgICAgICByZXR1cm4gc2VsZgorICAgIHJlcGxhY2VXaXRoID0gcmVwbGFjZV93aXRoICAjIEJTMworCisgICAgZGVmIHVud3JhcChzZWxmKToKKyAgICAgICAgbXlfcGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgbXlfaW5kZXggPSBzZWxmLnBhcmVudC5pbmRleChzZWxmKQorICAgICAgICBzZWxmLmV4dHJhY3QoKQorICAgICAgICBmb3IgY2hpbGQgaW4gcmV2ZXJzZWQoc2VsZi5jb250ZW50c1s6XSk6CisgICAgICAgICAgICBteV9wYXJlbnQuaW5zZXJ0KG15X2luZGV4LCBjaGlsZCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICByZXBsYWNlX3dpdGhfY2hpbGRyZW4gPSB1bndyYXAKKyAgICByZXBsYWNlV2l0aENoaWxkcmVuID0gdW53cmFwICAjIEJTMworCisgICAgZGVmIHdyYXAoc2VsZiwgd3JhcF9pbnNpZGUpOgorICAgICAgICBtZSA9IHNlbGYucmVwbGFjZV93aXRoKHdyYXBfaW5zaWRlKQorICAgICAgICB3cmFwX2luc2lkZS5hcHBlbmQobWUpCisgICAgICAgIHJldHVybiB3cmFwX2luc2lkZQorCisgICAgZGVmIGV4dHJhY3Qoc2VsZik6CisgICAgICAgICIiIkRlc3RydWN0aXZlbHkgcmlwcyB0aGlzIGVsZW1lbnQgb3V0IG9mIHRoZSB0cmVlLiIiIgorICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlbCBzZWxmLnBhcmVudC5jb250ZW50c1tzZWxmLnBhcmVudC5pbmRleChzZWxmKV0KKworICAgICAgICAjRmluZCB0aGUgdHdvIGVsZW1lbnRzIHRoYXQgd291bGQgYmUgbmV4dCB0byBlYWNoIG90aGVyIGlmCisgICAgICAgICN0aGlzIGVsZW1lbnQgKGFuZCBhbnkgY2hpbGRyZW4pIGhhZG4ndCBiZWVuIHBhcnNlZC4gQ29ubmVjdAorICAgICAgICAjdGhlIHR3by4KKyAgICAgICAgbGFzdF9jaGlsZCA9IHNlbGYuX2xhc3RfZGVzY2VuZGFudCgpCisgICAgICAgIG5leHRfZWxlbWVudCA9IGxhc3RfY2hpbGQubmV4dF9lbGVtZW50CisKKyAgICAgICAgaWYgc2VsZi5wcmV2aW91c19lbGVtZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19lbGVtZW50Lm5leHRfZWxlbWVudCA9IG5leHRfZWxlbWVudAorICAgICAgICBpZiBuZXh0X2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuZXh0X2VsZW1lbnQucHJldmlvdXNfZWxlbWVudCA9IHNlbGYucHJldmlvdXNfZWxlbWVudAorICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQgPSBOb25lCisgICAgICAgIGxhc3RfY2hpbGQubmV4dF9lbGVtZW50ID0gTm9uZQorCisgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQorICAgICAgICBpZiBzZWxmLnByZXZpb3VzX3NpYmxpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcubmV4dF9zaWJsaW5nID0gc2VsZi5uZXh0X3NpYmxpbmcKKyAgICAgICAgaWYgc2VsZi5uZXh0X3NpYmxpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLm5leHRfc2libGluZy5wcmV2aW91c19zaWJsaW5nID0gc2VsZi5wcmV2aW91c19zaWJsaW5nCisgICAgICAgIHNlbGYucHJldmlvdXNfc2libGluZyA9IHNlbGYubmV4dF9zaWJsaW5nID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9sYXN0X2Rlc2NlbmRhbnQoc2VsZiwgaXNfaW5pdGlhbGl6ZWQ9VHJ1ZSwgYWNjZXB0X3NlbGY9VHJ1ZSk6CisgICAgICAgICJGaW5kcyB0aGUgbGFzdCBlbGVtZW50IGJlbmVhdGggdGhpcyBvYmplY3QgdG8gYmUgcGFyc2VkLiIKKyAgICAgICAgaWYgaXNfaW5pdGlhbGl6ZWQgYW5kIHNlbGYubmV4dF9zaWJsaW5nOgorICAgICAgICAgICAgbGFzdF9jaGlsZCA9IHNlbGYubmV4dF9zaWJsaW5nLnByZXZpb3VzX2VsZW1lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxhc3RfY2hpbGQgPSBzZWxmCisgICAgICAgICAgICB3aGlsZSBpc2luc3RhbmNlKGxhc3RfY2hpbGQsIFRhZykgYW5kIGxhc3RfY2hpbGQuY29udGVudHM6CisgICAgICAgICAgICAgICAgbGFzdF9jaGlsZCA9IGxhc3RfY2hpbGQuY29udGVudHNbLTFdCisgICAgICAgIGlmIG5vdCBhY2NlcHRfc2VsZiBhbmQgbGFzdF9jaGlsZCA9PSBzZWxmOgorICAgICAgICAgICAgbGFzdF9jaGlsZCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIGxhc3RfY2hpbGQKKyAgICAjIEJTMzogTm90IHBhcnQgb2YgdGhlIEFQSSEKKyAgICBfbGFzdFJlY3Vyc2l2ZUNoaWxkID0gX2xhc3RfZGVzY2VuZGFudAorCisgICAgZGVmIGluc2VydChzZWxmLCBwb3NpdGlvbiwgbmV3X2NoaWxkKToKKyAgICAgICAgaWYgbmV3X2NoaWxkIGlzIHNlbGY6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgaW5zZXJ0IGEgdGFnIGludG8gaXRzZWxmLiIpCisgICAgICAgIGlmIChpc2luc3RhbmNlKG5ld19jaGlsZCwgYmFzZXN0cmluZykKKyAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShuZXdfY2hpbGQsIE5hdmlnYWJsZVN0cmluZykpOgorICAgICAgICAgICAgbmV3X2NoaWxkID0gTmF2aWdhYmxlU3RyaW5nKG5ld19jaGlsZCkKKworICAgICAgICBwb3NpdGlvbiA9IG1pbihwb3NpdGlvbiwgbGVuKHNlbGYuY29udGVudHMpKQorICAgICAgICBpZiBoYXNhdHRyKG5ld19jaGlsZCwgJ3BhcmVudCcpIGFuZCBuZXdfY2hpbGQucGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSdyZSAnaW5zZXJ0aW5nJyBhbiBlbGVtZW50IHRoYXQncyBhbHJlYWR5IG9uZQorICAgICAgICAgICAgIyBvZiB0aGlzIG9iamVjdCdzIGNoaWxkcmVuLgorICAgICAgICAgICAgaWYgbmV3X2NoaWxkLnBhcmVudCBpcyBzZWxmOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfaW5kZXggPSBzZWxmLmluZGV4KG5ld19jaGlsZCkKKyAgICAgICAgICAgICAgICBpZiBjdXJyZW50X2luZGV4IDwgcG9zaXRpb246CisgICAgICAgICAgICAgICAgICAgICMgV2UncmUgbW92aW5nIHRoaXMgZWxlbWVudCBmdXJ0aGVyIGRvd24gdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgIyBvZiB0aGlzIG9iamVjdCdzIGNoaWxkcmVuLiBUaGF0IG1lYW5zIHRoYXQgd2hlbgorICAgICAgICAgICAgICAgICAgICAjIHdlIGV4dHJhY3QgdGhpcyBlbGVtZW50LCBvdXIgdGFyZ2V0IGluZGV4IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgIyBqdW1wIGRvd24gb25lLgorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAtPSAxCisgICAgICAgICAgICBuZXdfY2hpbGQuZXh0cmFjdCgpCisKKyAgICAgICAgbmV3X2NoaWxkLnBhcmVudCA9IHNlbGYKKyAgICAgICAgcHJldmlvdXNfY2hpbGQgPSBOb25lCisgICAgICAgIGlmIHBvc2l0aW9uID09IDA6CisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfc2libGluZyA9IE5vbmUKKyAgICAgICAgICAgIG5ld19jaGlsZC5wcmV2aW91c19lbGVtZW50ID0gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJldmlvdXNfY2hpbGQgPSBzZWxmLmNvbnRlbnRzW3Bvc2l0aW9uIC0gMV0KKyAgICAgICAgICAgIG5ld19jaGlsZC5wcmV2aW91c19zaWJsaW5nID0gcHJldmlvdXNfY2hpbGQKKyAgICAgICAgICAgIG5ld19jaGlsZC5wcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZyA9IG5ld19jaGlsZAorICAgICAgICAgICAgbmV3X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQgPSBwcmV2aW91c19jaGlsZC5fbGFzdF9kZXNjZW5kYW50KEZhbHNlKQorICAgICAgICBpZiBuZXdfY2hpbGQucHJldmlvdXNfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5ld19jaGlsZC5wcmV2aW91c19lbGVtZW50Lm5leHRfZWxlbWVudCA9IG5ld19jaGlsZAorCisgICAgICAgIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50ID0gbmV3X2NoaWxkLl9sYXN0X2Rlc2NlbmRhbnQoRmFsc2UpCisKKyAgICAgICAgaWYgcG9zaXRpb24gPj0gbGVuKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAgbmV3X2NoaWxkLm5leHRfc2libGluZyA9IE5vbmUKKworICAgICAgICAgICAgcGFyZW50ID0gc2VsZgorICAgICAgICAgICAgcGFyZW50c19uZXh0X3NpYmxpbmcgPSBOb25lCisgICAgICAgICAgICB3aGlsZSBwYXJlbnRzX25leHRfc2libGluZyBpcyBOb25lIGFuZCBwYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGFyZW50c19uZXh0X3NpYmxpbmcgPSBwYXJlbnQubmV4dF9zaWJsaW5nCisgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudAorICAgICAgICAgICAgICAgIGlmIHBhcmVudHNfbmV4dF9zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIHRoZSBlbGVtZW50IHRoYXQgY29tZXMgbmV4dCBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwYXJlbnRzX25leHRfc2libGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBwYXJlbnRzX25leHRfc2libGluZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoZSBsYXN0IGVsZW1lbnQgb2YgdGhpcyB0YWcgaXMgdGhlIGxhc3QgZWxlbWVudCBpbgorICAgICAgICAgICAgICAgICMgdGhlIGRvY3VtZW50LgorICAgICAgICAgICAgICAgIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50Lm5leHRfZWxlbWVudCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5leHRfY2hpbGQgPSBzZWxmLmNvbnRlbnRzW3Bvc2l0aW9uXQorICAgICAgICAgICAgbmV3X2NoaWxkLm5leHRfc2libGluZyA9IG5leHRfY2hpbGQKKyAgICAgICAgICAgIGlmIG5ld19jaGlsZC5uZXh0X3NpYmxpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbmV3X2NoaWxkLm5leHRfc2libGluZy5wcmV2aW91c19zaWJsaW5nID0gbmV3X2NoaWxkCisgICAgICAgICAgICBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBuZXh0X2NoaWxkCisKKyAgICAgICAgaWYgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQubmV4dF9lbGVtZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQubmV4dF9lbGVtZW50LnByZXZpb3VzX2VsZW1lbnQgPSBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudAorICAgICAgICBzZWxmLmNvbnRlbnRzLmluc2VydChwb3NpdGlvbiwgbmV3X2NoaWxkKQorCisgICAgZGVmIGFwcGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJBcHBlbmRzIHRoZSBnaXZlbiB0YWcgdG8gdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnLiIiIgorICAgICAgICBzZWxmLmluc2VydChsZW4oc2VsZi5jb250ZW50cyksIHRhZykKKworICAgIGRlZiBpbnNlcnRfYmVmb3JlKHNlbGYsIHByZWRlY2Vzc29yKToKKyAgICAgICAgIiIiTWFrZXMgdGhlIGdpdmVuIGVsZW1lbnQgdGhlIGltbWVkaWF0ZSBwcmVkZWNlc3NvciBvZiB0aGlzIG9uZS4KKworICAgICAgICBUaGUgdHdvIGVsZW1lbnRzIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXJlbnQsIGFuZCB0aGUgZ2l2ZW4gZWxlbWVudAorICAgICAgICB3aWxsIGJlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYgaXMgcHJlZGVjZXNzb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW4ndCBpbnNlcnQgYW4gZWxlbWVudCBiZWZvcmUgaXRzZWxmLiIpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIGlmIHBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAiRWxlbWVudCBoYXMgbm8gcGFyZW50LCBzbyAnYmVmb3JlJyBoYXMgbm8gbWVhbmluZy4iKQorICAgICAgICAjIEV4dHJhY3QgZmlyc3Qgc28gdGhhdCB0aGUgaW5kZXggd29uJ3QgYmUgc2NyZXdlZCB1cCBpZiB0aGV5CisgICAgICAgICMgYXJlIHNpYmxpbmdzLgorICAgICAgICBpZiBpc2luc3RhbmNlKHByZWRlY2Vzc29yLCBQYWdlRWxlbWVudCk6CisgICAgICAgICAgICBwcmVkZWNlc3Nvci5leHRyYWN0KCkKKyAgICAgICAgaW5kZXggPSBwYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgcGFyZW50Lmluc2VydChpbmRleCwgcHJlZGVjZXNzb3IpCisKKyAgICBkZWYgaW5zZXJ0X2FmdGVyKHNlbGYsIHN1Y2Nlc3Nvcik6CisgICAgICAgICIiIk1ha2VzIHRoZSBnaXZlbiBlbGVtZW50IHRoZSBpbW1lZGlhdGUgc3VjY2Vzc29yIG9mIHRoaXMgb25lLgorCisgICAgICAgIFRoZSB0d28gZWxlbWVudHMgd2lsbCBoYXZlIHRoZSBzYW1lIHBhcmVudCwgYW5kIHRoZSBnaXZlbiBlbGVtZW50CisgICAgICAgIHdpbGwgYmUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmIGlzIHN1Y2Nlc3NvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbid0IGluc2VydCBhbiBlbGVtZW50IGFmdGVyIGl0c2VsZi4iKQorICAgICAgICBwYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBpZiBwYXJlbnQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIkVsZW1lbnQgaGFzIG5vIHBhcmVudCwgc28gJ2FmdGVyJyBoYXMgbm8gbWVhbmluZy4iKQorICAgICAgICAjIEV4dHJhY3QgZmlyc3Qgc28gdGhhdCB0aGUgaW5kZXggd29uJ3QgYmUgc2NyZXdlZCB1cCBpZiB0aGV5CisgICAgICAgICMgYXJlIHNpYmxpbmdzLgorICAgICAgICBpZiBpc2luc3RhbmNlKHN1Y2Nlc3NvciwgUGFnZUVsZW1lbnQpOgorICAgICAgICAgICAgc3VjY2Vzc29yLmV4dHJhY3QoKQorICAgICAgICBpbmRleCA9IHBhcmVudC5pbmRleChzZWxmKQorICAgICAgICBwYXJlbnQuaW5zZXJ0KGluZGV4KzEsIHN1Y2Nlc3NvcikKKworICAgIGRlZiBmaW5kX25leHQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQKKyAgICAgICAgYXBwZWFycyBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX29uZShzZWxmLmZpbmRfYWxsX25leHQsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKKyAgICBmaW5kTmV4dCA9IGZpbmRfbmV4dCAgIyBCUzMKKworICAgIGRlZiBmaW5kX2FsbF9uZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAgICAgIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgc2VsZi5uZXh0X2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmaW5kQWxsTmV4dCA9IGZpbmRfYWxsX25leHQgICMgQlMzCisKKyAgICBkZWYgZmluZF9uZXh0X3NpYmxpbmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGFmdGVyIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfb25lKHNlbGYuZmluZF9uZXh0X3NpYmxpbmdzLCBuYW1lLCBhdHRycywgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgZmluZE5leHRTaWJsaW5nID0gZmluZF9uZXh0X3NpYmxpbmcgICMgQlMzCisKKyAgICBkZWYgZmluZF9uZXh0X3NpYmxpbmdzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgbGltaXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc2libGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEgYW5kIGFwcGVhciBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5leHRfc2libGluZ3MsICoqa3dhcmdzKQorICAgIGZpbmROZXh0U2libGluZ3MgPSBmaW5kX25leHRfc2libGluZ3MgICAjIEJTMworICAgIGZldGNoTmV4dFNpYmxpbmdzID0gZmluZF9uZXh0X3NpYmxpbmdzICAjIEJTMgorCisgICAgZGVmIGZpbmRfcHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQKKyAgICAgICAgYXBwZWFycyBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9vbmUoCisgICAgICAgICAgICBzZWxmLmZpbmRfYWxsX3ByZXZpb3VzLCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCisgICAgZmluZFByZXZpb3VzID0gZmluZF9wcmV2aW91cyAgIyBCUzMKKworICAgIGRlZiBmaW5kX2FsbF9wcmV2aW91cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgYWxsIGl0ZW1zIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXIKKyAgICAgICAgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfYWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgc2VsZi5wcmV2aW91c19lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZpbmRBbGxQcmV2aW91cyA9IGZpbmRfYWxsX3ByZXZpb3VzICAjIEJTMworICAgIGZldGNoUHJldmlvdXMgPSBmaW5kX2FsbF9wcmV2aW91cyAgICAjIEJTMgorCisgICAgZGVmIGZpbmRfcHJldmlvdXNfc2libGluZyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBzaWJsaW5nIHRvIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAgICAgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfb25lKHNlbGYuZmluZF9wcmV2aW91c19zaWJsaW5ncywgbmFtZSwgYXR0cnMsIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZpbmRQcmV2aW91c1NpYmxpbmcgPSBmaW5kX3ByZXZpb3VzX3NpYmxpbmcgICMgQlMzCisKKyAgICBkZWYgZmluZF9wcmV2aW91c19zaWJsaW5ncyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzaWJsaW5ncyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYSBhbmQgYXBwZWFyIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmdzLCAqKmt3YXJncykKKyAgICBmaW5kUHJldmlvdXNTaWJsaW5ncyA9IGZpbmRfcHJldmlvdXNfc2libGluZ3MgICAjIEJTMworICAgIGZldGNoUHJldmlvdXNTaWJsaW5ncyA9IGZpbmRfcHJldmlvdXNfc2libGluZ3MgICMgQlMyCisKKyAgICBkZWYgZmluZF9wYXJlbnQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHBhcmVudCBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorICAgICAgICAjIE5PVEU6IFdlIGNhbid0IHVzZSBfZmluZF9vbmUgYmVjYXVzZSBmaW5kUGFyZW50cyB0YWtlcyBhIGRpZmZlcmVudAorICAgICAgICAjIHNldCBvZiBhcmd1bWVudHMuCisgICAgICAgIHIgPSBOb25lCisgICAgICAgIGwgPSBzZWxmLmZpbmRfcGFyZW50cyhuYW1lLCBhdHRycywgMSwgKiprd2FyZ3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1cm4gcgorICAgIGZpbmRQYXJlbnQgPSBmaW5kX3BhcmVudCAgIyBCUzMKKworICAgIGRlZiBmaW5kX3BhcmVudHMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgbGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBwYXJlbnRzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgTm9uZSwgbGltaXQsIHNlbGYucGFyZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgZmluZFBhcmVudHMgPSBmaW5kX3BhcmVudHMgICAjIEJTMworICAgIGZldGNoUGFyZW50cyA9IGZpbmRfcGFyZW50cyAgIyBCUzIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uZXh0X2VsZW1lbnQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmV2aW91cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJldmlvdXNfZWxlbWVudAorCisgICAgI1RoZXNlIG1ldGhvZHMgZG8gdGhlIHJlYWwgaGVhdnkgbGlmdGluZy4KKworICAgIGRlZiBfZmluZF9vbmUoc2VsZiwgbWV0aG9kLCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpOgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gbWV0aG9kKG5hbWUsIGF0dHJzLCB0ZXh0LCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2ZpbmRfYWxsKHNlbGYsIG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwgZ2VuZXJhdG9yLCAqKmt3YXJncyk6CisgICAgICAgICJJdGVyYXRlcyBvdmVyIGEgZ2VuZXJhdG9yIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1hdGNoLiIKKworICAgICAgICBpZiBpc2luc3RhbmNlKG5hbWUsIFNvdXBTdHJhaW5lcik6CisgICAgICAgICAgICBzdHJhaW5lciA9IG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncykKKworICAgICAgICBpZiB0ZXh0IGlzIE5vbmUgYW5kIG5vdCBsaW1pdCBhbmQgbm90IGF0dHJzIGFuZCBub3Qga3dhcmdzOgorICAgICAgICAgICAgaWYgbmFtZSBpcyBUcnVlIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIE9wdGltaXphdGlvbiB0byBmaW5kIGFsbCB0YWdzLgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IChlbGVtZW50IGZvciBlbGVtZW50IGluIGdlbmVyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZykpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFNldChzdHJhaW5lciwgcmVzdWx0KQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5hbWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICMgT3B0aW1pemF0aW9uIHRvIGZpbmQgYWxsIHRhZ3Mgd2l0aCBhIGdpdmVuIG5hbWUuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gKGVsZW1lbnQgZm9yIGVsZW1lbnQgaW4gZ2VuZXJhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGFnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbGVtZW50Lm5hbWUgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0U2V0KHN0cmFpbmVyLCByZXN1bHQpCisgICAgICAgIHJlc3VsdHMgPSBSZXN1bHRTZXQoc3RyYWluZXIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaSA9IG5leHQoZ2VuZXJhdG9yKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBzdHJhaW5lci5zZWFyY2goaSkKKyAgICAgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoZm91bmQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IGFuZCBsZW4ocmVzdWx0cykgPj0gbGltaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgI1RoZXNlIGdlbmVyYXRvcnMgY2FuIGJlIHVzZWQgdG8gbmF2aWdhdGUgc3RhcnRpbmcgZnJvbSBib3RoCisgICAgI05hdmlnYWJsZVN0cmluZ3MgYW5kIFRhZ3MuCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5leHRfZWxlbWVudHMoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLm5leHRfZWxlbWVudAorICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkubmV4dF9lbGVtZW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV4dF9zaWJsaW5ncyhzZWxmKToKKyAgICAgICAgaSA9IHNlbGYubmV4dF9zaWJsaW5nCisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICBpID0gaS5uZXh0X3NpYmxpbmcKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmV2aW91c19lbGVtZW50cyhzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucHJldmlvdXNfZWxlbWVudAorICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkucHJldmlvdXNfZWxlbWVudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByZXZpb3VzX3NpYmxpbmdzKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5wcmV2aW91c19zaWJsaW5nCisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICBpID0gaS5wcmV2aW91c19zaWJsaW5nCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyZW50cyhzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucGFyZW50CisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICBpID0gaS5wYXJlbnQKKworICAgICMgTWV0aG9kcyBmb3Igc3VwcG9ydGluZyBDU1Mgc2VsZWN0b3JzLgorCisgICAgdGFnX25hbWVfcmUgPSByZS5jb21waWxlKCdeW2EtejAtOV0rJCcpCisKKyAgICAjIC9eKFx3KylcWyhcdyspKFs9flx8XF5cJFwqXT8pPT8iPyhbXlxdIl0qKSI/XF0kLworICAgICMgICBcLS0tLyAgXC0tLS9cLS0tLS0tLS0tLS0tLS8gICAgXC0tLS0tLS0vCisgICAgIyAgICAgfCAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgICMgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgVGhlIHZhbHVlCisgICAgIyAgICAgfCAgICAgIHwgICAgfix8LF4sJCwqIG9yID0KKyAgICAjICAgICB8ICAgQXR0cmlidXRlCisgICAgIyAgICBUYWcKKyAgICBhdHRyaWJzZWxlY3RfcmUgPSByZS5jb21waWxlKAorICAgICAgICByJ14oP1A8dGFnPlx3Kyk/XFsoP1A8YXR0cmlidXRlPlx3KykoP1A8b3BlcmF0b3I+Wz1+XHxcXlwkXCpdPyknICsKKyAgICAgICAgcic9PyI/KD9QPHZhbHVlPlteXF0iXSopIj9cXSQnCisgICAgICAgICkKKworICAgIGRlZiBfYXR0cl92YWx1ZV9hc19zdHJpbmcoc2VsZiwgdmFsdWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIkZvcmNlIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorCisgICAgICAgIEEgbXVsdGktdmFsdWVkIGF0dHJpYnV0ZSB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEKKyAgICAgICAgc3BhY2Utc2VwYXJhdGVkIHN0aXJuZy4KKyAgICAgICAgIiIiCisgICAgICAgIHZhbHVlID0gc2VsZi5nZXQodmFsdWUsIGRlZmF1bHQpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpIG9yIGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgIHZhbHVlID0iICIuam9pbih2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgX3RhZ19uYW1lX21hdGNoZXNfYW5kKHNlbGYsIGZ1bmN0aW9uLCB0YWdfbmFtZSk6CisgICAgICAgIGlmIG5vdCB0YWdfbmFtZToKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmIF9tYXRjaCh0YWcpOgorICAgICAgICAgICAgICAgIHJldHVybiB0YWcubmFtZSA9PSB0YWdfbmFtZSBhbmQgZnVuY3Rpb24odGFnKQorICAgICAgICAgICAgcmV0dXJuIF9tYXRjaAorCisgICAgZGVmIF9hdHRyaWJ1dGVfY2hlY2tlcihzZWxmLCBvcGVyYXRvciwgYXR0cmlidXRlLCB2YWx1ZT0nJyk6CisgICAgICAgICIiIkNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBDU1Mgc2VsZWN0b3Igb3BlcmF0aW9uLgorCisgICAgICAgIFRha2VzIGFuIG9wZXJhdG9yLCBhdHRyaWJ1dGUgYW5kIG9wdGlvbmFsIHZhbHVlLiBSZXR1cm5zIGEKKyAgICAgICAgZnVuY3Rpb24gdGhhdCB3aWxsIHJldHVybiBUcnVlIGZvciBlbGVtZW50cyB0aGF0IG1hdGNoIHRoYXQKKyAgICAgICAgY29tYmluYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBpZiBvcGVyYXRvciA9PSAnPSc6CisgICAgICAgICAgICAjIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBgYXR0cmlidXRlYCBpcyBlcXVhbCB0byBgdmFsdWVgCisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiBlbC5fYXR0cl92YWx1ZV9hc19zdHJpbmcoYXR0cmlidXRlKSA9PSB2YWx1ZQorICAgICAgICBlbGlmIG9wZXJhdG9yID09ICd+JzoKKyAgICAgICAgICAgICMgc3BhY2Utc2VwYXJhdGVkIGxpc3QgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAKKyAgICAgICAgICAgICMgY29udGFpbnMgYHZhbHVlYAorICAgICAgICAgICAgZGVmIF9pbmNsdWRlc192YWx1ZShlbGVtZW50KToKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVfdmFsdWUgPSBlbGVtZW50LmdldChhdHRyaWJ1dGUsIFtdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHJpYnV0ZV92YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV92YWx1ZSA9IGF0dHJpYnV0ZV92YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIGF0dHJpYnV0ZV92YWx1ZQorICAgICAgICAgICAgcmV0dXJuIF9pbmNsdWRlc192YWx1ZQorICAgICAgICBlbGlmIG9wZXJhdG9yID09ICdeJzoKKyAgICAgICAgICAgICMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGBhdHRyaWJ1dGVgIHN0YXJ0cyB3aXRoIGB2YWx1ZWAKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZWw6IGVsLl9hdHRyX3ZhbHVlX2FzX3N0cmluZygKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsICcnKS5zdGFydHN3aXRoKHZhbHVlKQorICAgICAgICBlbGlmIG9wZXJhdG9yID09ICckJzoKKyAgICAgICAgICAgICMgc3RyaW5nIHJlcHJlc2VuYXRpb24gb2YgYGF0dHJpYnV0ZWAgZW5kcyB3aXRoIGB2YWx1ZWAKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZWw6IGVsLl9hdHRyX3ZhbHVlX2FzX3N0cmluZygKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsICcnKS5lbmRzd2l0aCh2YWx1ZSkKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnKic6CisgICAgICAgICAgICAjIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBgYXR0cmlidXRlYCBjb250YWlucyBgdmFsdWVgCisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiB2YWx1ZSBpbiBlbC5fYXR0cl92YWx1ZV9hc19zdHJpbmcoYXR0cmlidXRlLCAnJykKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnfCc6CisgICAgICAgICAgICAjIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBgYXR0cmlidXRlYCBpcyBlaXRoZXIgZXhhY3RseQorICAgICAgICAgICAgIyBgdmFsdWVgIG9yIHN0YXJ0cyB3aXRoIGB2YWx1ZWAgYW5kIHRoZW4gYSBkYXNoLgorICAgICAgICAgICAgZGVmIF9pc19vcl9zdGFydHNfd2l0aF9kYXNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV92YWx1ZSA9IGVsZW1lbnQuX2F0dHJfdmFsdWVfYXNfc3RyaW5nKGF0dHJpYnV0ZSwgJycpCisgICAgICAgICAgICAgICAgcmV0dXJuIChhdHRyaWJ1dGVfdmFsdWUgPT0gdmFsdWUgb3IgYXR0cmlidXRlX3ZhbHVlLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArICctJykpCisgICAgICAgICAgICByZXR1cm4gX2lzX29yX3N0YXJ0c193aXRoX2Rhc2gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZWw6IGVsLmhhc19hdHRyKGF0dHJpYnV0ZSkKKworICAgICMgT2xkIG5vbi1wcm9wZXJ0eSB2ZXJzaW9ucyBvZiB0aGUgZ2VuZXJhdG9ycywgZm9yIGJhY2t3YXJkcworICAgICMgY29tcGF0aWJpbGl0eSB3aXRoIEJTMy4KKyAgICBkZWYgbmV4dEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dF9lbGVtZW50cworCisgICAgZGVmIG5leHRTaWJsaW5nR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uZXh0X3NpYmxpbmdzCisKKyAgICBkZWYgcHJldmlvdXNHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByZXZpb3VzX2VsZW1lbnRzCisKKyAgICBkZWYgcHJldmlvdXNTaWJsaW5nR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcmV2aW91c19zaWJsaW5ncworCisgICAgZGVmIHBhcmVudEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50cworCisKK2NsYXNzIE5hdmlnYWJsZVN0cmluZyh1bmljb2RlLCBQYWdlRWxlbWVudCk6CisKKyAgICBQUkVGSVggPSAnJworICAgIFNVRkZJWCA9ICcnCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIHZhbHVlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IE5hdmlnYWJsZVN0cmluZy4KKworICAgICAgICBXaGVuIHVucGlja2xpbmcgYSBOYXZpZ2FibGVTdHJpbmcsIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoCisgICAgICAgIHRoZSBzdHJpbmcgaW4gREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcuIFRoYXQgZW5jb2RpbmcgbmVlZHMgdG8gYmUKKyAgICAgICAgcGFzc2VkIGluIHRvIHRoZSBzdXBlcmNsYXNzJ3MgX19uZXdfXyBvciB0aGUgc3VwZXJjbGFzcyB3b24ndCBrbm93CisgICAgICAgIGhvdyB0byBoYW5kbGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyhjbHMsIHZhbHVlLCBERUZBVUxUX09VVFBVVF9FTkNPRElORykKKworICAgIGRlZiBfX2NvcHlfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICh1bmljb2RlKHNlbGYpLCkKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgIiIidGV4dC5zdHJpbmcgZ2l2ZXMgeW91IHRleHQuIFRoaXMgaXMgZm9yIGJhY2t3YXJkcworICAgICAgICBjb21wYXRpYmlsaXR5IGZvciBOYXZpZ2FibGUqU3RyaW5nLCBidXQgZm9yIENEYXRhKiBpdCBsZXRzIHlvdQorICAgICAgICBnZXQgdGhlIHN0cmluZyB3aXRob3V0IHRoZSBDRGF0YSB3cmFwcGVyLiIiIgorICAgICAgICBpZiBhdHRyID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAorICAgICAgICAgICAgICAgICInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclcyciICUgKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikpCisKKyAgICBkZWYgb3V0cHV0X3JlYWR5KHNlbGYsIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLmZvcm1hdF9zdHJpbmcoc2VsZiwgZm9ybWF0dGVyKQorICAgICAgICByZXR1cm4gc2VsZi5QUkVGSVggKyBvdXRwdXQgKyBzZWxmLlNVRkZJWAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAbmFtZS5zZXR0ZXIKKyAgICBkZWYgbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkEgTmF2aWdhYmxlU3RyaW5nIGNhbm5vdCBiZSBnaXZlbiBhIG5hbWUuIikKKworY2xhc3MgUHJlZm9ybWF0dGVkU3RyaW5nKE5hdmlnYWJsZVN0cmluZyk6CisgICAgIiIiQSBOYXZpZ2FibGVTdHJpbmcgbm90IHN1YmplY3QgdG8gdGhlIG5vcm1hbCBmb3JtYXR0aW5nIHJ1bGVzLgorCisgICAgVGhlIHN0cmluZyB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZSBmb3JtYXR0ZXIgKHRvIHRyaWdnZXIgc2lkZSBlZmZlY3RzKSwKKyAgICBidXQgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuCisgICAgIiIiCisKKyAgICBkZWYgb3V0cHV0X3JlYWR5KHNlbGYsIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICAiIiJDRGF0YSBzdHJpbmdzIGFyZSBwYXNzZWQgaW50byB0aGUgZm9ybWF0dGVyLgorICAgICAgICBCdXQgdGhlIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLiIiIgorICAgICAgICBzZWxmLmZvcm1hdF9zdHJpbmcoc2VsZiwgZm9ybWF0dGVyKQorICAgICAgICByZXR1cm4gc2VsZi5QUkVGSVggKyBzZWxmICsgc2VsZi5TVUZGSVgKKworY2xhc3MgQ0RhdGEoUHJlZm9ybWF0dGVkU3RyaW5nKToKKworICAgIFBSRUZJWCA9IHUnPCFbQ0RBVEFbJworICAgIFNVRkZJWCA9IHUnXV0+JworCitjbGFzcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oUHJlZm9ybWF0dGVkU3RyaW5nKToKKworICAgIFBSRUZJWCA9IHUnPD8nCisgICAgU1VGRklYID0gdSc/PicKKworY2xhc3MgQ29tbWVudChQcmVmb3JtYXR0ZWRTdHJpbmcpOgorCisgICAgUFJFRklYID0gdSc8IS0tJworICAgIFNVRkZJWCA9IHUnLS0+JworCisKK2NsYXNzIERlY2xhcmF0aW9uKFByZWZvcm1hdHRlZFN0cmluZyk6CisgICAgUFJFRklYID0gdSc8IScKKyAgICBTVUZGSVggPSB1JyE+JworCisKK2NsYXNzIERvY3R5cGUoUHJlZm9ybWF0dGVkU3RyaW5nKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmb3JfbmFtZV9hbmRfaWRzKGNscywgbmFtZSwgcHViX2lkLCBzeXN0ZW1faWQpOgorICAgICAgICB2YWx1ZSA9IG5hbWUgb3IgJycKKyAgICAgICAgaWYgcHViX2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFsdWUgKz0gJyBQVUJMSUMgIiVzIicgJSBwdWJfaWQKKyAgICAgICAgICAgIGlmIHN5c3RlbV9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAnICIlcyInICUgc3lzdGVtX2lkCisgICAgICAgIGVsaWYgc3lzdGVtX2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFsdWUgKz0gJyBTWVNURU0gIiVzIicgJSBzeXN0ZW1faWQKKworICAgICAgICByZXR1cm4gRG9jdHlwZSh2YWx1ZSkKKworICAgIFBSRUZJWCA9IHUnPCFET0NUWVBFICcKKyAgICBTVUZGSVggPSB1Jz5cbicKKworCitjbGFzcyBUYWcoUGFnZUVsZW1lbnQpOgorCisgICAgIiIiUmVwcmVzZW50cyBhIGZvdW5kIEhUTUwgdGFnIHdpdGggaXRzIGF0dHJpYnV0ZXMgYW5kIGNvbnRlbnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlcj1Ob25lLCBidWlsZGVyPU5vbmUsIG5hbWU9Tm9uZSwgbmFtZXNwYWNlPU5vbmUsCisgICAgICAgICAgICAgICAgIHByZWZpeD1Ob25lLCBhdHRycz1Ob25lLCBwYXJlbnQ9Tm9uZSwgcHJldmlvdXM9Tm9uZSk6CisgICAgICAgICJCYXNpYyBjb25zdHJ1Y3Rvci4iCisKKyAgICAgICAgaWYgcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnBhcnNlcl9jbGFzcyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2UgZG9uJ3QgYWN0dWFsbHkgc3RvcmUgdGhlIHBhcnNlciBvYmplY3Q6IHRoYXQgbGV0cyBleHRyYWN0ZWQKKyAgICAgICAgICAgICMgY2h1bmtzIGJlIGdhcmJhZ2UtY29sbGVjdGVkLgorICAgICAgICAgICAgc2VsZi5wYXJzZXJfY2xhc3MgPSBwYXJzZXIuX19jbGFzc19fCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIHZhbHVlIHByb3ZpZGVkIGZvciBuZXcgdGFnJ3MgbmFtZS4iKQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCisgICAgICAgIHNlbGYucHJlZml4ID0gcHJlZml4CisgICAgICAgIGlmIGF0dHJzIGlzIE5vbmU6CisgICAgICAgICAgICBhdHRycyA9IHt9CisgICAgICAgIGVsaWYgYXR0cnMgYW5kIGJ1aWxkZXIuY2RhdGFfbGlzdF9hdHRyaWJ1dGVzOgorICAgICAgICAgICAgYXR0cnMgPSBidWlsZGVyLl9yZXBsYWNlX2NkYXRhX2xpc3RfYXR0cmlidXRlX3ZhbHVlcygKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUsIGF0dHJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXR0cnMgPSBkaWN0KGF0dHJzKQorICAgICAgICBzZWxmLmF0dHJzID0gYXR0cnMKKyAgICAgICAgc2VsZi5jb250ZW50cyA9IFtdCisgICAgICAgIHNlbGYuc2V0dXAocGFyZW50LCBwcmV2aW91cykKKyAgICAgICAgc2VsZi5oaWRkZW4gPSBGYWxzZQorCisgICAgICAgICMgU2V0IHVwIGFueSBzdWJzdGl0dXRpb25zLCBzdWNoIGFzIHRoZSBjaGFyc2V0IGluIGEgTUVUQSB0YWcuCisgICAgICAgIGlmIGJ1aWxkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBidWlsZGVyLnNldF91cF9zdWJzdGl0dXRpb25zKHNlbGYpCisgICAgICAgICAgICBzZWxmLmNhbl9iZV9lbXB0eV9lbGVtZW50ID0gYnVpbGRlci5jYW5fYmVfZW1wdHlfZWxlbWVudChuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jYW5fYmVfZW1wdHlfZWxlbWVudCA9IEZhbHNlCisKKyAgICBwYXJzZXJDbGFzcyA9IF9hbGlhcygicGFyc2VyX2NsYXNzIikgICMgQlMzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZW1wdHlfZWxlbWVudChzZWxmKToKKyAgICAgICAgIiIiSXMgdGhpcyB0YWcgYW4gZW1wdHktZWxlbWVudCB0YWc/IChha2EgYSBzZWxmLWNsb3NpbmcgdGFnKQorCisgICAgICAgIEEgdGFnIHRoYXQgaGFzIGNvbnRlbnRzIGlzIG5ldmVyIGFuIGVtcHR5LWVsZW1lbnQgdGFnLgorCisgICAgICAgIEEgdGFnIHRoYXQgaGFzIG5vIGNvbnRlbnRzIG1heSBvciBtYXkgbm90IGJlIGFuIGVtcHR5LWVsZW1lbnQKKyAgICAgICAgdGFnLiBJdCBkZXBlbmRzIG9uIHRoZSBidWlsZGVyIHVzZWQgdG8gY3JlYXRlIHRoZSB0YWcuIElmIHRoZQorICAgICAgICBidWlsZGVyIGhhcyBhIGRlc2lnbmF0ZWQgbGlzdCBvZiBlbXB0eS1lbGVtZW50IHRhZ3MsIHRoZW4gb25seQorICAgICAgICBhIHRhZyB3aG9zZSBuYW1lIHNob3dzIHVwIGluIHRoYXQgbGlzdCBpcyBjb25zaWRlcmVkIGFuCisgICAgICAgIGVtcHR5LWVsZW1lbnQgdGFnLgorCisgICAgICAgIElmIHRoZSBidWlsZGVyIGhhcyBubyBkZXNpZ25hdGVkIGxpc3Qgb2YgZW1wdHktZWxlbWVudCB0YWdzLAorICAgICAgICB0aGVuIGFueSB0YWcgd2l0aCBubyBjb250ZW50cyBpcyBhbiBlbXB0eS1lbGVtZW50IHRhZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5jb250ZW50cykgPT0gMCBhbmQgc2VsZi5jYW5fYmVfZW1wdHlfZWxlbWVudAorICAgIGlzU2VsZkNsb3NpbmcgPSBpc19lbXB0eV9lbGVtZW50ICAjIEJTMworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN0cmluZyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVuaWVuY2UgcHJvcGVydHkgdG8gZ2V0IHRoZSBzaW5nbGUgc3RyaW5nIHdpdGhpbiB0aGlzIHRhZy4KKworICAgICAgICA6UmV0dXJuOiBJZiB0aGlzIHRhZyBoYXMgYSBzaW5nbGUgc3RyaW5nIGNoaWxkLCByZXR1cm4gdmFsdWUKKyAgICAgICAgIGlzIHRoYXQgc3RyaW5nLiBJZiB0aGlzIHRhZyBoYXMgbm8gY2hpbGRyZW4sIG9yIG1vcmUgdGhhbiBvbmUKKyAgICAgICAgIGNoaWxkLCByZXR1cm4gdmFsdWUgaXMgTm9uZS4gSWYgdGhpcyB0YWcgaGFzIG9uZSBjaGlsZCB0YWcsCisgICAgICAgICByZXR1cm4gdmFsdWUgaXMgdGhlICdzdHJpbmcnIGF0dHJpYnV0ZSBvZiB0aGUgY2hpbGQgdGFnLAorICAgICAgICAgcmVjdXJzaXZlbHkuCisgICAgICAgICIiIgorICAgICAgICBpZiBsZW4oc2VsZi5jb250ZW50cykgIT0gMToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGNoaWxkID0gc2VsZi5jb250ZW50c1swXQorICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIGNoaWxkCisgICAgICAgIHJldHVybiBjaGlsZC5zdHJpbmcKKworICAgIEBzdHJpbmcuc2V0dGVyCisgICAgZGVmIHN0cmluZyhzZWxmLCBzdHJpbmcpOgorICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hcHBlbmQoc3RyaW5nLl9fY2xhc3NfXyhzdHJpbmcpKQorCisgICAgZGVmIF9hbGxfc3RyaW5ncyhzZWxmLCBzdHJpcD1GYWxzZSwgdHlwZXM9KE5hdmlnYWJsZVN0cmluZywgQ0RhdGEpKToKKyAgICAgICAgIiIiWWllbGQgYWxsIHN0cmluZ3Mgb2YgY2VydGFpbiBjbGFzc2VzLCBwb3NzaWJseSBzdHJpcHBpbmcgdGhlbS4KKworICAgICAgICBCeSBkZWZhdWx0LCB5aWVsZHMgb25seSBOYXZpZ2FibGVTdHJpbmcgYW5kIENEYXRhIG9iamVjdHMuIFNvCisgICAgICAgIG5vIGNvbW1lbnRzLCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgZXRjLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGRlc2NlbmRhbnQgaW4gc2VsZi5kZXNjZW5kYW50czoKKyAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICAodHlwZXMgaXMgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UoZGVzY2VuZGFudCwgTmF2aWdhYmxlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICh0eXBlcyBpcyBub3QgTm9uZSBhbmQgdHlwZShkZXNjZW5kYW50KSBub3QgaW4gdHlwZXMpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc3RyaXA6CisgICAgICAgICAgICAgICAgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGxlbihkZXNjZW5kYW50KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgeWllbGQgZGVzY2VuZGFudAorCisgICAgc3RyaW5ncyA9IHByb3BlcnR5KF9hbGxfc3RyaW5ncykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdHJpcHBlZF9zdHJpbmdzKHNlbGYpOgorICAgICAgICBmb3Igc3RyaW5nIGluIHNlbGYuX2FsbF9zdHJpbmdzKFRydWUpOgorICAgICAgICAgICAgeWllbGQgc3RyaW5nCisKKyAgICBkZWYgZ2V0X3RleHQoc2VsZiwgc2VwYXJhdG9yPXUiIiwgc3RyaXA9RmFsc2UsCisgICAgICAgICAgICAgICAgIHR5cGVzPShOYXZpZ2FibGVTdHJpbmcsIENEYXRhKSk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYWxsIGNoaWxkIHN0cmluZ3MsIGNvbmNhdGVuYXRlZCB1c2luZyB0aGUgZ2l2ZW4gc2VwYXJhdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlcGFyYXRvci5qb2luKFtzIGZvciBzIGluIHNlbGYuX2FsbF9zdHJpbmdzKAorICAgICAgICAgICAgICAgICAgICBzdHJpcCwgdHlwZXM9dHlwZXMpXSkKKyAgICBnZXRUZXh0ID0gZ2V0X3RleHQKKyAgICB0ZXh0ID0gcHJvcGVydHkoZ2V0X3RleHQpCisKKyAgICBkZWYgZGVjb21wb3NlKHNlbGYpOgorICAgICAgICAiIiJSZWN1cnNpdmVseSBkZXN0cm95cyB0aGUgY29udGVudHMgb2YgdGhpcyB0cmVlLiIiIgorICAgICAgICBzZWxmLmV4dHJhY3QoKQorICAgICAgICBpID0gc2VsZgorICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV4dCA9IGkubmV4dF9lbGVtZW50CisgICAgICAgICAgICBpLl9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgIGkuY29udGVudHMgPSBbXQorICAgICAgICAgICAgaSA9IG5leHQKKworICAgIGRlZiBjbGVhcihzZWxmLCBkZWNvbXBvc2U9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgRXh0cmFjdCBhbGwgY2hpbGRyZW4uIElmIGRlY29tcG9zZSBpcyBUcnVlLCBkZWNvbXBvc2UgaW5zdGVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGRlY29tcG9zZToKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHNlbGYuY29udGVudHNbOl06CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBUYWcpOgorICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRlY29tcG9zZSgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHRyYWN0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHNlbGYuY29udGVudHNbOl06CisgICAgICAgICAgICAgICAgZWxlbWVudC5leHRyYWN0KCkKKworICAgIGRlZiBpbmRleChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIGluZGV4IG9mIGEgY2hpbGQgYnkgaWRlbnRpdHksIG5vdCB2YWx1ZS4gQXZvaWRzIGlzc3VlcyB3aXRoCisgICAgICAgIHRhZy5jb250ZW50cy5pbmRleChlbGVtZW50KSBnZXR0aW5nIHRoZSBpbmRleCBvZiBlcXVhbCBlbGVtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBpLCBjaGlsZCBpbiBlbnVtZXJhdGUoc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICBpZiBjaGlsZCBpcyBlbGVtZW50OgorICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRhZy5pbmRleDogZWxlbWVudCBub3QgaW4gdGFnIikKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFnLCBvcgorICAgICAgICB0aGUgdmFsdWUgZ2l2ZW4gZm9yICdkZWZhdWx0JyBpZiBpdCBkb2Vzbid0IGhhdmUgdGhhdAorICAgICAgICBhdHRyaWJ1dGUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmF0dHJzLmdldChrZXksIGRlZmF1bHQpCisKKyAgICBkZWYgaGFzX2F0dHIoc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLmF0dHJzCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZikuX19oYXNoX18oKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICIiInRhZ1trZXldIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAna2V5JyBhdHRyaWJ1dGUgZm9yIHRoZSB0YWcsCisgICAgICAgIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIGl0J3Mgbm90IHRoZXJlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5hdHRyc1trZXldCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICJJdGVyYXRpbmcgb3ZlciBhIHRhZyBpdGVyYXRlcyBvdmVyIGl0cyBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuY29udGVudHMpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgIlRoZSBsZW5ndGggb2YgYSB0YWcgaXMgdGhlIGxlbmd0aCBvZiBpdHMgbGlzdCBvZiBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5jb250ZW50cykKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6CisgICAgICAgIHJldHVybiB4IGluIHNlbGYuY29udGVudHMKKworICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgIkEgdGFnIGlzIG5vbi1Ob25lIGV2ZW4gaWYgaXQgaGFzIG5vIGNvbnRlbnRzLiIKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiU2V0dGluZyB0YWdba2V5XSBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUKKyAgICAgICAgdGFnLiIiIgorICAgICAgICBzZWxmLmF0dHJzW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICJEZWxldGluZyB0YWdba2V5XSBkZWxldGVzIGFsbCAna2V5JyBhdHRyaWJ1dGVzIGZvciB0aGUgdGFnLiIKKyAgICAgICAgc2VsZi5hdHRycy5wb3Aoa2V5LCBOb25lKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNhbGxpbmcgYSB0YWcgbGlrZSBhIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgaXRzCisgICAgICAgIGZpbmRfYWxsKCkgbWV0aG9kLiBFZy4gdGFnKCdhJykgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRoZSBBIHRhZ3MKKyAgICAgICAgZm91bmQgd2l0aGluIHRoaXMgdGFnLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5maW5kX2FsbCgqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgdGFnKToKKyAgICAgICAgI3ByaW50ICJHZXRhdHRyICVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXywgdGFnKQorICAgICAgICBpZiBsZW4odGFnKSA+IDMgYW5kIHRhZy5lbmRzd2l0aCgnVGFnJyk6CisgICAgICAgICAgICAjIEJTMzogc291cC5hVGFnIC0+ICJzb3VwLmZpbmQoImEiKQorICAgICAgICAgICAgdGFnX25hbWUgPSB0YWdbOi0zXQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAnLiVzVGFnIGlzIGRlcHJlY2F0ZWQsIHVzZSAuZmluZCgiJXMiKSBpbnN0ZWFkLicgJSAoCisgICAgICAgICAgICAgICAgICAgIHRhZ19uYW1lLCB0YWdfbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5maW5kKHRhZ19uYW1lKQorICAgICAgICAjIFdlIHNwZWNpYWwgY2FzZSBjb250ZW50cyB0byBhdm9pZCByZWN1cnNpb24uCisgICAgICAgIGVsaWYgbm90IHRhZy5zdGFydHN3aXRoKCJfXyIpIGFuZCBub3QgdGFnPT0iY29udGVudHMiOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWcpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAorICAgICAgICAgICAgIiclcycgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmZiB0aGlzIHRhZyBoYXMgdGhlIHNhbWUgbmFtZSwgdGhlIHNhbWUgYXR0cmlidXRlcywKKyAgICAgICAgYW5kIHRoZSBzYW1lIGNvbnRlbnRzIChyZWN1cnNpdmVseSkgYXMgdGhlIGdpdmVuIHRhZy4iIiIKKyAgICAgICAgaWYgc2VsZiBpcyBvdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIChub3QgaGFzYXR0cihvdGhlciwgJ25hbWUnKSBvcgorICAgICAgICAgICAgbm90IGhhc2F0dHIob3RoZXIsICdhdHRycycpIG9yCisgICAgICAgICAgICBub3QgaGFzYXR0cihvdGhlciwgJ2NvbnRlbnRzJykgb3IKKyAgICAgICAgICAgIHNlbGYubmFtZSAhPSBvdGhlci5uYW1lIG9yCisgICAgICAgICAgICBzZWxmLmF0dHJzICE9IG90aGVyLmF0dHJzIG9yCisgICAgICAgICAgICBsZW4oc2VsZikgIT0gbGVuKG90aGVyKSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGksIG15X2NoaWxkIGluIGVudW1lcmF0ZShzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIGlmIG15X2NoaWxkICE9IG90aGVyLmNvbnRlbnRzW2ldOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhpcyB0YWcgaXMgbm90IGlkZW50aWNhbCB0byB0aGUgb3RoZXIgdGFnLAorICAgICAgICBhcyBkZWZpbmVkIGluIF9fZXFfXy4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAgICBkZWYgX19yZXByX18oc2VsZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAgICAgICAiIiJSZW5kZXJzIHRoaXMgdGFnIGFzIGEgc3RyaW5nLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoZW5jb2RpbmcpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRlY29kZSgpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKCkKKworICAgIGlmIFBZM0s6CisgICAgICAgIF9fc3RyX18gPSBfX3JlcHJfXyA9IF9fdW5pY29kZV9fCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgaW5kZW50X2xldmVsPU5vbmUsIGZvcm1hdHRlcj0ibWluaW1hbCIsCisgICAgICAgICAgICAgICBlcnJvcnM9InhtbGNoYXJyZWZyZXBsYWNlIik6CisgICAgICAgICMgVHVybiB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW50byBVbmljb2RlLCB0aGVuIGVuY29kZSB0aGUKKyAgICAgICAgIyBVbmljb2RlLgorICAgICAgICB1ID0gc2VsZi5kZWNvZGUoaW5kZW50X2xldmVsLCBlbmNvZGluZywgZm9ybWF0dGVyKQorICAgICAgICByZXR1cm4gdS5lbmNvZGUoZW5jb2RpbmcsIGVycm9ycykKKworICAgIGRlZiBfc2hvdWxkX3ByZXR0eV9wcmludChzZWxmLCBpbmRlbnRfbGV2ZWwpOgorICAgICAgICAiIiJTaG91bGQgdGhpcyB0YWcgYmUgcHJldHR5LXByaW50ZWQ/IiIiCisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBpbmRlbnRfbGV2ZWwgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAoc2VsZi5uYW1lIG5vdCBpbiBIVE1MQXdhcmVFbnRpdHlTdWJzdGl0dXRpb24ucHJlZm9ybWF0dGVkX3RhZ3MKKyAgICAgICAgICAgICBvciBzZWxmLl9pc194bWwpKQorCisgICAgZGVmIGRlY29kZShzZWxmLCBpbmRlbnRfbGV2ZWw9Tm9uZSwKKyAgICAgICAgICAgICAgIGV2ZW50dWFsX2VuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgICIiIlJldHVybnMgYSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFnIGFuZCBpdHMgY29udGVudHMuCisKKyAgICAgICAgOnBhcmFtIGV2ZW50dWFsX2VuY29kaW5nOiBUaGUgdGFnIGlzIGRlc3RpbmVkIHRvIGJlCisgICAgICAgICAgIGVuY29kZWQgaW50byB0aGlzIGVuY29kaW5nLiBUaGlzIG1ldGhvZCBpcyBfbm90XworICAgICAgICAgICByZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZyB0aGF0IGVuY29kaW5nLiBUaGlzIGluZm9ybWF0aW9uCisgICAgICAgICAgIGlzIHBhc3NlZCBpbiBzbyB0aGF0IGl0IGNhbiBiZSBzdWJzdGl0dXRlZCBpbiBpZiB0aGUKKyAgICAgICAgICAgZG9jdW1lbnQgY29udGFpbnMgYSA8TUVUQT4gdGFnIHRoYXQgbWVudGlvbnMgdGhlIGRvY3VtZW50J3MKKyAgICAgICAgICAgZW5jb2RpbmcuCisgICAgICAgICIiIgorCisgICAgICAgICMgRmlyc3Qgb2ZmLCB0dXJuIGEgc3RyaW5nIGZvcm1hdHRlciBpbnRvIGEgZnVuY3Rpb24uIFRoaXMKKyAgICAgICAgIyB3aWxsIHN0b3AgdGhlIGxvb2t1cCBmcm9tIGhhcHBlbmluZyBvdmVyIGFuZCBvdmVyIGFnYWluLgorICAgICAgICBpZiBub3QgY2FsbGFibGUoZm9ybWF0dGVyKToKKyAgICAgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2Zvcm1hdHRlcl9mb3JfbmFtZShmb3JtYXR0ZXIpCisKKyAgICAgICAgYXR0cnMgPSBbXQorICAgICAgICBpZiBzZWxmLmF0dHJzOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIHNvcnRlZChzZWxmLmF0dHJzLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgIGlmIHZhbCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0ga2V5CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGxpc3QpIG9yIGlzaW5zdGFuY2UodmFsLCB0dXBsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAnICcuam9pbih2YWwpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHVuaWNvZGUodmFsKQorICAgICAgICAgICAgICAgICAgICBlbGlmICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsLCBBdHRyaWJ1dGVWYWx1ZVdpdGhDaGFyc2V0U3Vic3RpdHV0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV2ZW50dWFsX2VuY29kaW5nIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5lbmNvZGUoZXZlbnR1YWxfZW5jb2RpbmcpCisKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuZm9ybWF0X3N0cmluZyh2YWwsIGZvcm1hdHRlcikKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUoa2V5KSArICc9JworICAgICAgICAgICAgICAgICAgICAgICAgKyBFbnRpdHlTdWJzdGl0dXRpb24ucXVvdGVkX2F0dHJpYnV0ZV92YWx1ZSh0ZXh0KSkKKyAgICAgICAgICAgICAgICBhdHRycy5hcHBlbmQoZGVjb2RlZCkKKyAgICAgICAgY2xvc2UgPSAnJworICAgICAgICBjbG9zZVRhZyA9ICcnCisKKyAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgaWYgc2VsZi5wcmVmaXg6CisgICAgICAgICAgICBwcmVmaXggPSBzZWxmLnByZWZpeCArICI6IgorCisgICAgICAgIGlmIHNlbGYuaXNfZW1wdHlfZWxlbWVudDoKKyAgICAgICAgICAgIGNsb3NlID0gJy8nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbG9zZVRhZyA9ICc8LyVzJXM+JyAlIChwcmVmaXgsIHNlbGYubmFtZSkKKworICAgICAgICBwcmV0dHlfcHJpbnQgPSBzZWxmLl9zaG91bGRfcHJldHR5X3ByaW50KGluZGVudF9sZXZlbCkKKyAgICAgICAgc3BhY2UgPSAnJworICAgICAgICBpbmRlbnRfc3BhY2UgPSAnJworICAgICAgICBpZiBpbmRlbnRfbGV2ZWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmRlbnRfc3BhY2UgPSAoJyAnICogKGluZGVudF9sZXZlbCAtIDEpKQorICAgICAgICBpZiBwcmV0dHlfcHJpbnQ6CisgICAgICAgICAgICBzcGFjZSA9IGluZGVudF9zcGFjZQorICAgICAgICAgICAgaW5kZW50X2NvbnRlbnRzID0gaW5kZW50X2xldmVsICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5kZW50X2NvbnRlbnRzID0gTm9uZQorICAgICAgICBjb250ZW50cyA9IHNlbGYuZGVjb2RlX2NvbnRlbnRzKAorICAgICAgICAgICAgaW5kZW50X2NvbnRlbnRzLCBldmVudHVhbF9lbmNvZGluZywgZm9ybWF0dGVyKQorCisgICAgICAgIGlmIHNlbGYuaGlkZGVuOgorICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSAnZG9jdW1lbnQgcm9vdCcgb2JqZWN0LgorICAgICAgICAgICAgcyA9IGNvbnRlbnRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzID0gW10KKyAgICAgICAgICAgIGF0dHJpYnV0ZV9zdHJpbmcgPSAnJworICAgICAgICAgICAgaWYgYXR0cnM6CisgICAgICAgICAgICAgICAgYXR0cmlidXRlX3N0cmluZyA9ICcgJyArICcgJy5qb2luKGF0dHJzKQorICAgICAgICAgICAgaWYgaW5kZW50X2xldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgRXZlbiBpZiB0aGlzIHBhcnRpY3VsYXIgdGFnIGlzIG5vdCBwcmV0dHktcHJpbnRlZCwKKyAgICAgICAgICAgICAgICAjIHdlIHNob3VsZCBpbmRlbnQgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YWcuCisgICAgICAgICAgICAgICAgcy5hcHBlbmQoaW5kZW50X3NwYWNlKQorICAgICAgICAgICAgcy5hcHBlbmQoJzwlcyVzJXMlcz4nICUgKAorICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIHNlbGYubmFtZSwgYXR0cmlidXRlX3N0cmluZywgY2xvc2UpKQorICAgICAgICAgICAgaWYgcHJldHR5X3ByaW50OgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBzLmFwcGVuZChjb250ZW50cykKKyAgICAgICAgICAgIGlmIHByZXR0eV9wcmludCBhbmQgY29udGVudHMgYW5kIGNvbnRlbnRzWy0xXSAhPSAiXG4iOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBpZiBwcmV0dHlfcHJpbnQgYW5kIGNsb3NlVGFnOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNwYWNlKQorICAgICAgICAgICAgcy5hcHBlbmQoY2xvc2VUYWcpCisgICAgICAgICAgICBpZiBpbmRlbnRfbGV2ZWwgaXMgbm90IE5vbmUgYW5kIGNsb3NlVGFnIGFuZCBzZWxmLm5leHRfc2libGluZzoKKyAgICAgICAgICAgICAgICAjIEV2ZW4gaWYgdGhpcyBwYXJ0aWN1bGFyIHRhZyBpcyBub3QgcHJldHR5LXByaW50ZWQsCisgICAgICAgICAgICAgICAgIyB3ZSdyZSBub3cgZG9uZSB3aXRoIHRoZSB0YWcsIGFuZCB3ZSBzaG91bGQgYWRkIGEKKyAgICAgICAgICAgICAgICAjIG5ld2xpbmUgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgIHMgPSAnJy5qb2luKHMpCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgcHJldHRpZnkoc2VsZiwgZW5jb2Rpbmc9Tm9uZSwgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGUoVHJ1ZSwgZm9ybWF0dGVyPWZvcm1hdHRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmVuY29kZShlbmNvZGluZywgVHJ1ZSwgZm9ybWF0dGVyPWZvcm1hdHRlcikKKworICAgIGRlZiBkZWNvZGVfY29udGVudHMoc2VsZiwgaW5kZW50X2xldmVsPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50dWFsX2VuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGUgY29udGVudHMgb2YgdGhpcyB0YWcgYXMgYSBVbmljb2RlIHN0cmluZy4KKworICAgICAgICA6cGFyYW0gZXZlbnR1YWxfZW5jb2Rpbmc6IFRoZSB0YWcgaXMgZGVzdGluZWQgdG8gYmUKKyAgICAgICAgICAgZW5jb2RlZCBpbnRvIHRoaXMgZW5jb2RpbmcuIFRoaXMgbWV0aG9kIGlzIF9ub3RfCisgICAgICAgICAgIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIHRoYXQgZW5jb2RpbmcuIFRoaXMgaW5mb3JtYXRpb24KKyAgICAgICAgICAgaXMgcGFzc2VkIGluIHNvIHRoYXQgaXQgY2FuIGJlIHN1YnN0aXR1dGVkIGluIGlmIHRoZQorICAgICAgICAgICBkb2N1bWVudCBjb250YWlucyBhIDxNRVRBPiB0YWcgdGhhdCBtZW50aW9ucyB0aGUgZG9jdW1lbnQncworICAgICAgICAgICBlbmNvZGluZy4KKyAgICAgICAgIiIiCisgICAgICAgICMgRmlyc3Qgb2ZmLCB0dXJuIGEgc3RyaW5nIGZvcm1hdHRlciBpbnRvIGEgZnVuY3Rpb24uIFRoaXMKKyAgICAgICAgIyB3aWxsIHN0b3AgdGhlIGxvb2t1cCBmcm9tIGhhcHBlbmluZyBvdmVyIGFuZCBvdmVyIGFnYWluLgorICAgICAgICBpZiBub3QgY2FsbGFibGUoZm9ybWF0dGVyKToKKyAgICAgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2Zvcm1hdHRlcl9mb3JfbmFtZShmb3JtYXR0ZXIpCisKKyAgICAgICAgcHJldHR5X3ByaW50ID0gKGluZGVudF9sZXZlbCBpcyBub3QgTm9uZSkKKyAgICAgICAgcyA9IFtdCisgICAgICAgIGZvciBjIGluIHNlbGY6CisgICAgICAgICAgICB0ZXh0ID0gTm9uZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjLCBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgICAgIHRleHQgPSBjLm91dHB1dF9yZWFkeShmb3JtYXR0ZXIpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYywgVGFnKToKKyAgICAgICAgICAgICAgICBzLmFwcGVuZChjLmRlY29kZShpbmRlbnRfbGV2ZWwsIGV2ZW50dWFsX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcikpCisgICAgICAgICAgICBpZiB0ZXh0IGFuZCBpbmRlbnRfbGV2ZWwgYW5kIG5vdCBzZWxmLm5hbWUgPT0gJ3ByZSc6CisgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc3RyaXAoKQorICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICBpZiBwcmV0dHlfcHJpbnQgYW5kIG5vdCBzZWxmLm5hbWUgPT0gJ3ByZSc6CisgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCIgIiAqIChpbmRlbnRfbGV2ZWwgLSAxKSkKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCh0ZXh0KQorICAgICAgICAgICAgICAgIGlmIHByZXR0eV9wcmludCBhbmQgbm90IHNlbGYubmFtZSA9PSAncHJlJzoKKyAgICAgICAgICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocykKKworICAgIGRlZiBlbmNvZGVfY29udGVudHMoCisgICAgICAgIHNlbGYsIGluZGVudF9sZXZlbD1Ob25lLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgICIiIlJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnIGFzIGEgYnl0ZXN0cmluZy4iIiIKKyAgICAgICAgY29udGVudHMgPSBzZWxmLmRlY29kZV9jb250ZW50cyhpbmRlbnRfbGV2ZWwsIGVuY29kaW5nLCBmb3JtYXR0ZXIpCisgICAgICAgIHJldHVybiBjb250ZW50cy5lbmNvZGUoZW5jb2RpbmcpCisKKyAgICAjIE9sZCBtZXRob2QgZm9yIEJTMyBjb21wYXRpYmlsaXR5CisgICAgZGVmIHJlbmRlckNvbnRlbnRzKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLAorICAgICAgICAgICAgICAgICAgICAgICBwcmV0dHlQcmludD1GYWxzZSwgaW5kZW50TGV2ZWw9MCk6CisgICAgICAgIGlmIG5vdCBwcmV0dHlQcmludDoKKyAgICAgICAgICAgIGluZGVudExldmVsID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGVfY29udGVudHMoCisgICAgICAgICAgICBpbmRlbnRfbGV2ZWw9aW5kZW50TGV2ZWwsIGVuY29kaW5nPWVuY29kaW5nKQorCisgICAgI1NvdXAgbWV0aG9kcworCisgICAgZGVmIGZpbmQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgcmVjdXJzaXZlPVRydWUsIHRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybiBvbmx5IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGlzIFRhZyBtYXRjaGluZyB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuIiIiCisgICAgICAgIHIgPSBOb25lCisgICAgICAgIGwgPSBzZWxmLmZpbmRfYWxsKG5hbWUsIGF0dHJzLCByZWN1cnNpdmUsIHRleHQsIDEsICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAgcmV0dXJuIHIKKyAgICBmaW5kQ2hpbGQgPSBmaW5kCisKKyAgICBkZWYgZmluZF9hbGwoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgcmVjdXJzaXZlPVRydWUsIHRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJFeHRyYWN0cyBhIGxpc3Qgb2YgVGFnIG9iamVjdHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuICBZb3UgY2FuIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIFRhZyBhbmQgYW55CisgICAgICAgIGF0dHJpYnV0ZXMgeW91IHdhbnQgdGhlIFRhZyB0byBoYXZlLgorCisgICAgICAgIFRoZSB2YWx1ZSBvZiBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSAnYXR0cnMnIG1hcCBjYW4gYmUgYQorICAgICAgICBzdHJpbmcsIGEgbGlzdCBvZiBzdHJpbmdzLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIG9yIGEKKyAgICAgICAgY2FsbGFibGUgdGhhdCB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUKKyAgICAgICAgc3RyaW5nIG1hdGNoZXMgZm9yIHNvbWUgY3VzdG9tIGRlZmluaXRpb24gb2YgJ21hdGNoZXMnLiBUaGUKKyAgICAgICAgc2FtZSBpcyB0cnVlIG9mIHRoZSB0YWcgbmFtZS4iIiIKKworICAgICAgICBnZW5lcmF0b3IgPSBzZWxmLmRlc2NlbmRhbnRzCisgICAgICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgICAgICBnZW5lcmF0b3IgPSBzZWxmLmNoaWxkcmVuCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIGdlbmVyYXRvciwgKiprd2FyZ3MpCisgICAgZmluZEFsbCA9IGZpbmRfYWxsICAgICAgICMgQlMzCisgICAgZmluZENoaWxkcmVuID0gZmluZF9hbGwgICMgQlMyCisKKyAgICAjR2VuZXJhdG9yIG1ldGhvZHMKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2hpbGRyZW4oc2VsZik6CisgICAgICAgICMgcmV0dXJuIGl0ZXIoKSB0byBtYWtlIHRoZSBwdXJwb3NlIG9mIHRoZSBtZXRob2QgY2xlYXIKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykgICMgWFhYIFRoaXMgc2VlbXMgdG8gYmUgdW50ZXN0ZWQuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVzY2VuZGFudHMoc2VsZik6CisgICAgICAgIGlmIG5vdCBsZW4oc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3RvcE5vZGUgPSBzZWxmLl9sYXN0X2Rlc2NlbmRhbnQoKS5uZXh0X2VsZW1lbnQKKyAgICAgICAgY3VycmVudCA9IHNlbGYuY29udGVudHNbMF0KKyAgICAgICAgd2hpbGUgY3VycmVudCBpcyBub3Qgc3RvcE5vZGU6CisgICAgICAgICAgICB5aWVsZCBjdXJyZW50CisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0X2VsZW1lbnQKKworICAgICMgQ1NTIHNlbGVjdG9yIGNvZGUKKworICAgIF9zZWxlY3Rvcl9jb21iaW5hdG9ycyA9IFsnPicsICcrJywgJ34nXQorICAgIF9zZWxlY3RfZGVidWcgPSBGYWxzZQorICAgIGRlZiBzZWxlY3Qoc2VsZiwgc2VsZWN0b3IsIF9jYW5kaWRhdGVfZ2VuZXJhdG9yPU5vbmUpOgorICAgICAgICAiIiJQZXJmb3JtIGEgQ1NTIHNlbGVjdGlvbiBvcGVyYXRpb24gb24gdGhlIGN1cnJlbnQgZWxlbWVudC4iIiIKKyAgICAgICAgdG9rZW5zID0gc2VsZWN0b3Iuc3BsaXQoKQorICAgICAgICBjdXJyZW50X2NvbnRleHQgPSBbc2VsZl0KKworICAgICAgICBpZiB0b2tlbnNbLTFdIGluIHNlbGYuX3NlbGVjdG9yX2NvbWJpbmF0b3JzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnRmluYWwgY29tYmluYXRvciAiJXMiIGlzIG1pc3NpbmcgYW4gYXJndW1lbnQuJyAlIHRva2Vuc1stMV0pCisgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgIHByaW50ICdSdW5uaW5nIENTUyBzZWxlY3RvciAiJXMiJyAlIHNlbGVjdG9yCisgICAgICAgIGZvciBpbmRleCwgdG9rZW4gaW4gZW51bWVyYXRlKHRva2Vucyk6CisgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgcHJpbnQgJyBDb25zaWRlcmluZyB0b2tlbiAiJXMiJyAlIHRva2VuCisgICAgICAgICAgICByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvciA9IE5vbmUKKyAgICAgICAgICAgIHRhZ19uYW1lID0gTm9uZQorICAgICAgICAgICAgaWYgdG9rZW5zW2luZGV4LTFdIGluIHNlbGYuX3NlbGVjdG9yX2NvbWJpbmF0b3JzOgorICAgICAgICAgICAgICAgICMgVGhpcyB0b2tlbiB3YXMgY29uc3VtZWQgYnkgdGhlIHByZXZpb3VzIGNvbWJpbmF0b3IuIFNraXAgaXQuCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnICBUb2tlbiB3YXMgY29uc3VtZWQgYnkgdGhlIHByZXZpb3VzIGNvbWJpbmF0b3IuJworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIEVhY2ggb3BlcmF0aW9uIGNvcnJlc3BvbmRzIHRvIGEgY2hlY2tlciBmdW5jdGlvbiwgYSBydWxlCisgICAgICAgICAgICAjIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIGEgY2FuZGlkYXRlIG1hdGNoZXMgdGhlCisgICAgICAgICAgICAjIHNlbGVjdG9yLiBDYW5kaWRhdGVzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGFjdGl2ZQorICAgICAgICAgICAgIyBpdGVyYXRvci4KKyAgICAgICAgICAgIGNoZWNrZXIgPSBOb25lCisKKyAgICAgICAgICAgIG0gPSBzZWxmLmF0dHJpYnNlbGVjdF9yZS5tYXRjaCh0b2tlbikKKyAgICAgICAgICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBBdHRyaWJ1dGUgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICB0YWdfbmFtZSwgYXR0cmlidXRlLCBvcGVyYXRvciwgdmFsdWUgPSBtLmdyb3VwcygpCisgICAgICAgICAgICAgICAgY2hlY2tlciA9IHNlbGYuX2F0dHJpYnV0ZV9jaGVja2VyKG9wZXJhdG9yLCBhdHRyaWJ1dGUsIHZhbHVlKQorCisgICAgICAgICAgICBlbGlmICcjJyBpbiB0b2tlbjoKKyAgICAgICAgICAgICAgICAjIElEIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgdGFnX25hbWUsIHRhZ19pZCA9IHRva2VuLnNwbGl0KCcjJywgMSkKKyAgICAgICAgICAgICAgICBkZWYgaWRfbWF0Y2hlcyh0YWcpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnLmdldCgnaWQnLCBOb25lKSA9PSB0YWdfaWQKKyAgICAgICAgICAgICAgICBjaGVja2VyID0gaWRfbWF0Y2hlcworCisgICAgICAgICAgICBlbGlmICcuJyBpbiB0b2tlbjoKKyAgICAgICAgICAgICAgICAjIENsYXNzIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgdGFnX25hbWUsIGtsYXNzID0gdG9rZW4uc3BsaXQoJy4nLCAxKQorICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBzZXQoa2xhc3Muc3BsaXQoJy4nKSkKKyAgICAgICAgICAgICAgICBkZWYgY2xhc3Nlc19tYXRjaChjYW5kaWRhdGUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3Nlcy5pc3N1YnNldChjYW5kaWRhdGUuZ2V0KCdjbGFzcycsIFtdKSkKKyAgICAgICAgICAgICAgICBjaGVja2VyID0gY2xhc3Nlc19tYXRjaAorCisgICAgICAgICAgICBlbGlmICc6JyBpbiB0b2tlbjoKKyAgICAgICAgICAgICAgICAjIFBzZXVkby1jbGFzcworICAgICAgICAgICAgICAgIHRhZ19uYW1lLCBwc2V1ZG8gPSB0b2tlbi5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICAgICAgaWYgdGFnX25hbWUgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiQSBwc2V1ZG8tY2xhc3MgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGEgdGFnIG5hbWUuIikKKyAgICAgICAgICAgICAgICBwc2V1ZG9fYXR0cmlidXRlcyA9IHJlLm1hdGNoKCcoW2EtekEtWlxkLV0rKVwoKFthLXpBLVpcZF0rKVwpJywgcHNldWRvKQorICAgICAgICAgICAgICAgIGZvdW5kID0gW10KKyAgICAgICAgICAgICAgICBpZiBwc2V1ZG9fYXR0cmlidXRlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcHNldWRvX3R5cGUsIHBzZXVkb192YWx1ZSA9IHBzZXVkb19hdHRyaWJ1dGVzLmdyb3VwcygpCisgICAgICAgICAgICAgICAgICAgIGlmIHBzZXVkb190eXBlID09ICdudGgtb2YtdHlwZSc6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvX3ZhbHVlID0gaW50KHBzZXVkb192YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT25seSBudW1lcmljIHZhbHVlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBmb3IgdGhlIG50aC1vZi10eXBlIHBzZXVkby1jbGFzcy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHNldWRvX3ZhbHVlIDwgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnRoLW9mLXR5cGUgcHNldWRvLWNsYXNzIHZhbHVlIG11c3QgYmUgYXQgbGVhc3QgMS4nKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ291bnRlcihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0aW5hdGlvbik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG50aF9jaGlsZF9vZl90eXBlKHNlbGYsIHRhZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID09IHNlbGYuZGVzdGluYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID4gc2VsZi5kZXN0aW5hdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU3RvcCB0aGUgZ2VuZXJhdG9yIHRoYXQncyBzZW5kaW5nIHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZXNlIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBDb3VudGVyKHBzZXVkb192YWx1ZSkubnRoX2NoaWxkX29mX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09ubHkgdGhlIGZvbGxvd2luZyBwc2V1ZG8tY2xhc3NlcyBhcmUgaW1wbGVtZW50ZWQ6IG50aC1vZi10eXBlLicpCisKKyAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gJyonOgorICAgICAgICAgICAgICAgICMgU3RhciBzZWxlY3RvciAtLSBtYXRjaGVzIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbGlmIHRva2VuID09ICc+JzoKKyAgICAgICAgICAgICAgICAjIFJ1biB0aGUgbmV4dCB0b2tlbiBhcyBhIENTUyBzZWxlY3RvciBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgICMgZGlyZWN0IGNoaWxkcmVuIG9mIGVhY2ggdGFnIGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisgICAgICAgICAgICAgICAgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBsYW1iZGEgdGFnOiB0YWcuY2hpbGRyZW4KKyAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gJ34nOgorICAgICAgICAgICAgICAgICMgUnVuIHRoZSBuZXh0IHRva2VuIGFzIGEgQ1NTIHNlbGVjdG9yIGFnYWluc3QgdGhlCisgICAgICAgICAgICAgICAgIyBzaWJsaW5ncyBvZiBlYWNoIHRhZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LgorICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gbGFtYmRhIHRhZzogdGFnLm5leHRfc2libGluZ3MKKyAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gJysnOgorICAgICAgICAgICAgICAgICMgRm9yIGVhY2ggdGFnIGluIHRoZSBjdXJyZW50IGNvbnRleHQsIHJ1biB0aGUgbmV4dAorICAgICAgICAgICAgICAgICMgdG9rZW4gYXMgYSBDU1Mgc2VsZWN0b3IgYWdhaW5zdCB0aGUgdGFnJ3MgbmV4dAorICAgICAgICAgICAgICAgICMgc2libGluZyB0aGF0J3MgYSB0YWcuCisgICAgICAgICAgICAgICAgZGVmIG5leHRfdGFnX3NpYmxpbmcodGFnKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdGFnLmZpbmRfbmV4dF9zaWJsaW5nKFRydWUpCisgICAgICAgICAgICAgICAgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBuZXh0X3RhZ19zaWJsaW5nCisKKyAgICAgICAgICAgIGVsaWYgc2VsZi50YWdfbmFtZV9yZS5tYXRjaCh0b2tlbik6CisgICAgICAgICAgICAgICAgIyBKdXN0IGEgdGFnIG5hbWUuCisgICAgICAgICAgICAgICAgdGFnX25hbWUgPSB0b2tlbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBDU1Mgc2VsZWN0b3I6ICIlcyInICUgdG9rZW4pCisKKyAgICAgICAgICAgIGlmIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICMgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHNlbGVjdG9yIGxvb2tzIGxpa2UgICI+IGZvbyIuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhlIGdlbmVyYXRvciBjYWxscyBzZWxlY3QoKSByZWN1cnNpdmVseSBvbiBldmVyeQorICAgICAgICAgICAgICAgICMgbWVtYmVyIG9mIHRoZSBjdXJyZW50IGNvbnRleHQsIHBhc3NpbmcgaW4gYSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAjIGNhbmRpZGF0ZSBnZW5lcmF0b3IgYW5kIGEgZGlmZmVyZW50IHNlbGVjdG9yLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEluIHRoZSBjYXNlIG9mICI+IGZvbyIsIHRoZSBjYW5kaWRhdGUgZ2VuZXJhdG9yIGlzCisgICAgICAgICAgICAgICAgIyBvbmUgdGhhdCB5aWVsZHMgYSB0YWcncyBkaXJlY3QgY2hpbGRyZW4gKCI+IiksIGFuZAorICAgICAgICAgICAgICAgICMgdGhlIHNlbGVjdG9yIGlzICJmb28iLgorICAgICAgICAgICAgICAgIG5leHRfdG9rZW4gPSB0b2tlbnNbaW5kZXgrMV0KKyAgICAgICAgICAgICAgICBkZWYgcmVjdXJzaXZlX3NlbGVjdCh0YWcpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnICAgIENhbGxpbmcgc2VsZWN0KCIlcyIpIHJlY3Vyc2l2ZWx5IG9uICVzICVzJyAlIChuZXh0X3Rva2VuLCB0YWcubmFtZSwgdGFnLmF0dHJzKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJy0nICogNDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gdGFnLnNlbGVjdChuZXh0X3Rva2VuLCByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyhSZWN1cnNpdmUgc2VsZWN0IHBpY2tlZCB1cCBjYW5kaWRhdGUgJXMgJXMpJyAlIChpLm5hbWUsIGkuYXR0cnMpCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctJyAqIDQwCisgICAgICAgICAgICAgICAgX3VzZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gcmVjdXJzaXZlX3NlbGVjdAorICAgICAgICAgICAgZWxpZiBfY2FuZGlkYXRlX2dlbmVyYXRvciBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgQnkgZGVmYXVsdCwgYSB0YWcncyBjYW5kaWRhdGVzIGFyZSBhbGwgb2YgaXRzCisgICAgICAgICAgICAgICAgIyBjaGlsZHJlbi4gSWYgdGFnX25hbWUgaXMgZGVmaW5lZCwgb25seSB5aWVsZCB0YWdzCisgICAgICAgICAgICAgICAgIyB3aXRoIHRoYXQgbmFtZS4KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgIGlmIHRhZ19uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSAiW2FueV0iCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayA9IHRhZ19uYW1lCisgICAgICAgICAgICAgICAgICAgIHByaW50ICcgICBEZWZhdWx0IGNhbmRpZGF0ZSBnZW5lcmF0b3IsIHRhZyBuYW1lPSIlcyInICUgY2hlY2sKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyByZWR1bmRhbnQgd2l0aCBsYXRlciBjb2RlLCBidXQgaXQgc3RvcHMKKyAgICAgICAgICAgICAgICAgICAgIyBhIGJ1bmNoIG9mIGJvZ3VzIHRhZ3MgZnJvbSBjbHV0dGVyaW5nIHVwIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGRlYnVnIGxvZy4KKyAgICAgICAgICAgICAgICAgICAgZGVmIGRlZmF1bHRfY2FuZGlkYXRlX2dlbmVyYXRvcih0YWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNoaWxkIGluIHRhZy5kZXNjZW5kYW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjaGlsZCwgVGFnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YWdfbmFtZSBhbmQgbm90IGNoaWxkLm5hbWUgPT0gdGFnX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgX3VzZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gZGVmYXVsdF9jYW5kaWRhdGVfZ2VuZXJhdG9yCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX3VzZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gbGFtYmRhIHRhZzogdGFnLmRlc2NlbmRhbnRzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IF9jYW5kaWRhdGVfZ2VuZXJhdG9yCisKKyAgICAgICAgICAgIG5ld19jb250ZXh0ID0gW10KKyAgICAgICAgICAgIG5ld19jb250ZXh0X2lkcyA9IHNldChbXSkKKyAgICAgICAgICAgIGZvciB0YWcgaW4gY3VycmVudF9jb250ZXh0OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgICBSdW5uaW5nIGNhbmRpZGF0ZSBnZW5lcmF0b3Igb24gJXMgJXMiICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgdGFnLm5hbWUsIHJlcHIodGFnLmF0dHJzKSkKKyAgICAgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvcih0YWcpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjYW5kaWRhdGUsIFRhZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiB0YWdfbmFtZSBhbmQgY2FuZGlkYXRlLm5hbWUgIT0gdGFnX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBjaGVja2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNoZWNrZXIoY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY2hlY2tlciBoYXMgZGVjaWRlZCB3ZSBzaG91bGQgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBydW4gdGhlIGdlbmVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBjaGVja2VyIGlzIE5vbmUgb3IgcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICAgIFNVQ0NFU1MgJXMgJXMiICUgKGNhbmRpZGF0ZS5uYW1lLCByZXByKGNhbmRpZGF0ZS5hdHRycykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpZChjYW5kaWRhdGUpIG5vdCBpbiBuZXdfY29udGV4dF9pZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHRhZyBtYXRjaGVzIGEgc2VsZWN0b3IgbW9yZSB0aGFuIG9uY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBpbmNsdWRlIGl0IGluIHRoZSBjb250ZXh0IG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jb250ZXh0LmFwcGVuZChjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NvbnRleHRfaWRzLmFkZChpZChjYW5kaWRhdGUpKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICAgIEZBSUxVUkUgJXMgJXMiICUgKGNhbmRpZGF0ZS5uYW1lLCByZXByKGNhbmRpZGF0ZS5hdHRycykpCisKKyAgICAgICAgICAgIGN1cnJlbnRfY29udGV4dCA9IG5ld19jb250ZXh0CisKKyAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgcHJpbnQgIkZpbmFsIHZlcmRpY3Q6IgorICAgICAgICAgICAgZm9yIGkgaW4gY3VycmVudF9jb250ZXh0OgorICAgICAgICAgICAgICAgIHByaW50ICIgJXMgJXMiICUgKGkubmFtZSwgaS5hdHRycykKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRfY29udGV4dAorCisgICAgIyBPbGQgbmFtZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICAgZGVmIGNoaWxkR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jaGlsZHJlbgorCisgICAgZGVmIHJlY3Vyc2l2ZUNoaWxkR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kZXNjZW5kYW50cworCisgICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKKyAgICAgICAgIiIiVGhpcyB3YXMga2luZCBvZiBtaXNsZWFkaW5nIGJlY2F1c2UgaGFzX2tleSgpIChhdHRyaWJ1dGVzKQorICAgICAgICB3YXMgZGlmZmVyZW50IGZyb20gX19pbl9fIChjb250ZW50cykuIGhhc19rZXkoKSBpcyBnb25lIGluCisgICAgICAgIFB5dGhvbiAzLCBhbnl3YXkuIiIiCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ2hhc19rZXkgaXMgZGVwcmVjYXRlZC4gVXNlIGhhc19hdHRyKCIlcyIpIGluc3RlYWQuJyAlICgKKyAgICAgICAgICAgICAgICBrZXkpKQorICAgICAgICByZXR1cm4gc2VsZi5oYXNfYXR0cihrZXkpCisKKyMgTmV4dCwgYSBjb3VwbGUgY2xhc3NlcyB0byByZXByZXNlbnQgcXVlcmllcyBhbmQgdGhlaXIgcmVzdWx0cy4KK2NsYXNzIFNvdXBTdHJhaW5lcihvYmplY3QpOgorICAgICIiIkVuY2Fwc3VsYXRlcyBhIG51bWJlciBvZiB3YXlzIG9mIG1hdGNoaW5nIGEgbWFya3VwIGVsZW1lbnQgKHRhZyBvcgorICAgIHRleHQpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLl9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKG5hbWUpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHJzLCBkaWN0KToKKyAgICAgICAgICAgICMgVHJlYXQgYSBub24tZGljdCB2YWx1ZSBmb3IgYXR0cnMgYXMgYSBzZWFyY2ggZm9yIHRoZSAnY2xhc3MnCisgICAgICAgICAgICAjIGF0dHJpYnV0ZS4KKyAgICAgICAgICAgIGt3YXJnc1snY2xhc3MnXSA9IGF0dHJzCisgICAgICAgICAgICBhdHRycyA9IE5vbmUKKworICAgICAgICBpZiAnY2xhc3NfJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICAjIFRyZWF0IGNsYXNzXz0iZm9vIiBhcyBhIHNlYXJjaCBmb3IgdGhlICdjbGFzcycKKyAgICAgICAgICAgICMgYXR0cmlidXRlLCBvdmVycmlkaW5nIGFueSBub24tZGljdCB2YWx1ZSBmb3IgYXR0cnMuCisgICAgICAgICAgICBrd2FyZ3NbJ2NsYXNzJ10gPSBrd2FyZ3NbJ2NsYXNzXyddCisgICAgICAgICAgICBkZWwga3dhcmdzWydjbGFzc18nXQorCisgICAgICAgIGlmIGt3YXJnczoKKyAgICAgICAgICAgIGlmIGF0dHJzOgorICAgICAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuY29weSgpCisgICAgICAgICAgICAgICAgYXR0cnMudXBkYXRlKGt3YXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXR0cnMgPSBrd2FyZ3MKKyAgICAgICAgbm9ybWFsaXplZF9hdHRycyA9IHt9CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGF0dHJzLml0ZW1zKCk6CisgICAgICAgICAgICBub3JtYWxpemVkX2F0dHJzW2tleV0gPSBzZWxmLl9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKHZhbHVlKQorCisgICAgICAgIHNlbGYuYXR0cnMgPSBub3JtYWxpemVkX2F0dHJzCisgICAgICAgIHNlbGYudGV4dCA9IHNlbGYuX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUodGV4dCkKKworICAgIGRlZiBfbm9ybWFsaXplX3NlYXJjaF92YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgTGVhdmUgaXQgYWxvbmUgaWYgaXQncyBhIFVuaWNvZGUgc3RyaW5nLCBhIGNhbGxhYmxlLCBhCisgICAgICAgICMgcmVndWxhciBleHByZXNzaW9uLCBhIGJvb2xlYW4sIG9yIE5vbmUuCisgICAgICAgIGlmIChpc2luc3RhbmNlKHZhbHVlLCB1bmljb2RlKSBvciBjYWxsYWJsZSh2YWx1ZSkgb3IgaGFzYXR0cih2YWx1ZSwgJ21hdGNoJykKKyAgICAgICAgICAgIG9yIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpIG9yIHZhbHVlIGlzIE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgIyBJZiBpdCdzIGEgYnl0ZXN0cmluZywgY29udmVydCBpdCB0byBVbmljb2RlLCB0cmVhdGluZyBpdCBhcyBVVEYtOC4KKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYnl0ZXMpOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmRlY29kZSgidXRmOCIpCisKKyAgICAgICAgIyBJZiBpdCdzIGxpc3RsaWtlLCBjb252ZXJ0IGl0IGludG8gYSBsaXN0IG9mIHN0cmluZ3MuCisgICAgICAgIGlmIGhhc2F0dHIodmFsdWUsICdfX2l0ZXJfXycpOgorICAgICAgICAgICAgbmV3X3ZhbHVlID0gW10KKyAgICAgICAgICAgIGZvciB2IGluIHZhbHVlOgorICAgICAgICAgICAgICAgIGlmIChoYXNhdHRyKHYsICdfX2l0ZXJfXycpIGFuZCBub3QgaXNpbnN0YW5jZSh2LCBieXRlcykKKyAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKHYsIHVuaWNvZGUpKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIHVzZXIncyBtaXN0YWtlLiBJbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBpbnRlcmVzdHMgb2YgYXZvaWRpbmcgaW5maW5pdGUgbG9vcHMsIHdlJ2xsIGxldAorICAgICAgICAgICAgICAgICAgICAjIGl0IHRocm91Z2ggYXMtaXMgcmF0aGVyIHRoYW4gZG9pbmcgYSByZWN1cnNpdmUgY2FsbC4KKyAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlLmFwcGVuZCh2KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZS5hcHBlbmQoc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZSh2KSkKKyAgICAgICAgICAgIHJldHVybiBuZXdfdmFsdWUKKworICAgICAgICAjIE90aGVyd2lzZSwgY29udmVydCBpdCBpbnRvIGEgVW5pY29kZSBzdHJpbmcuCisgICAgICAgICMgVGhlIHVuaWNvZGUoc3RyKCkpIHRoaW5nIGlzIHNvIHRoaXMgd2lsbCBkbyB0aGUgc2FtZSB0aGluZyBvbiBQeXRob24gMgorICAgICAgICAjIGFuZCBQeXRob24gMy4KKyAgICAgICAgcmV0dXJuIHVuaWNvZGUoc3RyKHZhbHVlKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRleHQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiVzfCVzIiAlIChzZWxmLm5hbWUsIHNlbGYuYXR0cnMpCisKKyAgICBkZWYgc2VhcmNoX3RhZyhzZWxmLCBtYXJrdXBfbmFtZT1Ob25lLCBtYXJrdXBfYXR0cnM9e30pOgorICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgbWFya3VwID0gTm9uZQorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cF9uYW1lLCBUYWcpOgorICAgICAgICAgICAgbWFya3VwID0gbWFya3VwX25hbWUKKyAgICAgICAgICAgIG1hcmt1cF9hdHRycyA9IG1hcmt1cAorICAgICAgICBjYWxsX2Z1bmN0aW9uX3dpdGhfdGFnX2RhdGEgPSAoCisgICAgICAgICAgICBpc2luc3RhbmNlKHNlbGYubmFtZSwgY29sbGVjdGlvbnMuQ2FsbGFibGUpCisgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UobWFya3VwX25hbWUsIFRhZykpCisKKyAgICAgICAgaWYgKChub3Qgc2VsZi5uYW1lKQorICAgICAgICAgICAgb3IgY2FsbF9mdW5jdGlvbl93aXRoX3RhZ19kYXRhCisgICAgICAgICAgICBvciAobWFya3VwIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cCwgc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIG9yIChub3QgbWFya3VwIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cF9uYW1lLCBzZWxmLm5hbWUpKSk6CisgICAgICAgICAgICBpZiBjYWxsX2Z1bmN0aW9uX3dpdGhfdGFnX2RhdGE6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLm5hbWUobWFya3VwX25hbWUsIG1hcmt1cF9hdHRycykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgbWFya3VwX2F0dHJfbWFwID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBhdHRyLCBtYXRjaF9hZ2FpbnN0IGluIGxpc3Qoc2VsZi5hdHRycy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1hcmt1cF9hdHRyX21hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobWFya3VwX2F0dHJzLCAnZ2V0Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwX2F0dHJfbWFwID0gbWFya3VwX2F0dHJzCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cF9hdHRyX21hcCA9IHt9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gbWFya3VwX2F0dHJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBfYXR0cl9tYXBba10gPSB2CisgICAgICAgICAgICAgICAgICAgIGF0dHJfdmFsdWUgPSBtYXJrdXBfYXR0cl9tYXAuZ2V0KGF0dHIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9tYXRjaGVzKGF0dHJfdmFsdWUsIG1hdGNoX2FnYWluc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGlmIG1hcmt1cDoKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcmt1cF9uYW1lCisgICAgICAgIGlmIGZvdW5kIGFuZCBzZWxmLnRleHQgYW5kIG5vdCBzZWxmLl9tYXRjaGVzKGZvdW5kLnN0cmluZywgc2VsZi50ZXh0KToKKyAgICAgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICByZXR1cm4gZm91bmQKKyAgICBzZWFyY2hUYWcgPSBzZWFyY2hfdGFnCisKKyAgICBkZWYgc2VhcmNoKHNlbGYsIG1hcmt1cCk6CisgICAgICAgICMgcHJpbnQgJ2xvb2tpbmcgZm9yICVzIGluICVzJyAlIChzZWxmLCBtYXJrdXApCisgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICAjIElmIGdpdmVuIGEgbGlzdCBvZiBpdGVtcywgc2NhbiBpdCBmb3IgYSB0ZXh0IGVsZW1lbnQgdGhhdAorICAgICAgICAjIG1hdGNoZXMuCisgICAgICAgIGlmIGhhc2F0dHIobWFya3VwLCAnX19pdGVyX18nKSBhbmQgbm90IGlzaW5zdGFuY2UobWFya3VwLCAoVGFnLCBiYXNlc3RyaW5nKSk6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBtYXJrdXA6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBOYXZpZ2FibGVTdHJpbmcpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2VhcmNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBJZiBpdCdzIGEgVGFnLCBtYWtlIHN1cmUgaXRzIG5hbWUgb3IgYXR0cmlidXRlcyBtYXRjaC4KKyAgICAgICAgIyBEb24ndCBib3RoZXIgd2l0aCBUYWdzIGlmIHdlJ3JlIHNlYXJjaGluZyBmb3IgdGV4dC4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRleHQgb3Igc2VsZi5uYW1lIG9yIHNlbGYuYXR0cnM6CisgICAgICAgICAgICAgICAgZm91bmQgPSBzZWxmLnNlYXJjaF90YWcobWFya3VwKQorICAgICAgICAjIElmIGl0J3MgdGV4dCwgbWFrZSBzdXJlIHRoZSB0ZXh0IG1hdGNoZXMuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIE5hdmlnYWJsZVN0cmluZykgb3IgXAorICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKG1hcmt1cCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5uYW1lIGFuZCBub3Qgc2VsZi5hdHRycyBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXAsIHNlbGYudGV4dCk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiSSBkb24ndCBrbm93IGhvdyB0byBtYXRjaCBhZ2FpbnN0IGEgJXMiICUgbWFya3VwLl9fY2xhc3NfXykKKyAgICAgICAgcmV0dXJuIGZvdW5kCisKKyAgICBkZWYgX21hdGNoZXMoc2VsZiwgbWFya3VwLCBtYXRjaF9hZ2FpbnN0KToKKyAgICAgICAgIyBwcmludCB1Ik1hdGNoaW5nICVzIGFnYWluc3QgJXMiICUgKG1hcmt1cCwgbWF0Y2hfYWdhaW5zdCkKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIGxpc3QpIG9yIGlzaW5zdGFuY2UobWFya3VwLCB0dXBsZSk6CisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4gc2VhcmNoaW5nIGEgbXVsdGktdmFsdWVkIGF0dHJpYnV0ZQorICAgICAgICAgICAgIyBsaWtlICdjbGFzcycuCisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtYXRjaF9hZ2FpbnN0LCB1bmljb2RlKQorICAgICAgICAgICAgICAgIGFuZCAnICcgaW4gbWF0Y2hfYWdhaW5zdCk6CisgICAgICAgICAgICAgICAgIyBBIGJpdCBvZiBhIHNwZWNpYWwgY2FzZS4gSWYgdGhleSB0cnkgdG8gbWF0Y2ggImZvbworICAgICAgICAgICAgICAgICMgYmFyIiBvbiBhIG11bHRpdmFsdWUgYXR0cmlidXRlJ3MgdmFsdWUsIG9ubHkgYWNjZXB0CisgICAgICAgICAgICAgICAgIyB0aGUgbGl0ZXJhbCB2YWx1ZSAiZm9vIGJhciIKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBYWFggVGhpcyBpcyBnb2luZyB0byBiZSBwcmV0dHkgc2xvdyBiZWNhdXNlIHdlIGtlZXAKKyAgICAgICAgICAgICAgICAjIHNwbGl0dGluZyBtYXRjaF9hZ2FpbnN0LiBCdXQgaXQgc2hvdWxkbid0IGNvbWUgdXAKKyAgICAgICAgICAgICAgICAjIHRvbyBvZnRlbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gKHdoaXRlc3BhY2VfcmUuc3BsaXQobWF0Y2hfYWdhaW5zdCkgPT0gbWFya3VwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBtYXJrdXA6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX21hdGNoZXMoaXRlbSwgbWF0Y2hfYWdhaW5zdCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG1hdGNoX2FnYWluc3QgaXMgVHJ1ZToKKyAgICAgICAgICAgICMgVHJ1ZSBtYXRjaGVzIGFueSBub24tTm9uZSB2YWx1ZS4KKyAgICAgICAgICAgIHJldHVybiBtYXJrdXAgaXMgbm90IE5vbmUKKworICAgICAgICBpZiBpc2luc3RhbmNlKG1hdGNoX2FnYWluc3QsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKToKKyAgICAgICAgICAgIHJldHVybiBtYXRjaF9hZ2FpbnN0KG1hcmt1cCkKKworICAgICAgICAjIEN1c3RvbSBjYWxsYWJsZXMgdGFrZSB0aGUgdGFnIGFzIGFuIGFyZ3VtZW50LCBidXQgYWxsCisgICAgICAgICMgb3RoZXIgd2F5cyBvZiBtYXRjaGluZyBtYXRjaCB0aGUgdGFnIG5hbWUgYXMgYSBzdHJpbmcuCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAgICAgICAgbWFya3VwID0gbWFya3VwLm5hbWUKKworICAgICAgICAjIEVuc3VyZSB0aGF0IGBtYXJrdXBgIGlzIGVpdGhlciBhIFVuaWNvZGUgc3RyaW5nLCBvciBOb25lLgorICAgICAgICBtYXJrdXAgPSBzZWxmLl9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKG1hcmt1cCkKKworICAgICAgICBpZiBtYXJrdXAgaXMgTm9uZToKKyAgICAgICAgICAgICMgTm9uZSBtYXRjaGVzIE5vbmUsIEZhbHNlLCBhbiBlbXB0eSBzdHJpbmcsIGFuIGVtcHR5IGxpc3QsIGFuZCBzbyBvbi4KKyAgICAgICAgICAgIHJldHVybiBub3QgbWF0Y2hfYWdhaW5zdAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWF0Y2hfYWdhaW5zdCwgdW5pY29kZSk6CisgICAgICAgICAgICAjIEV4YWN0IHN0cmluZyBtYXRjaAorICAgICAgICAgICAgcmV0dXJuIG1hcmt1cCA9PSBtYXRjaF9hZ2FpbnN0CisKKyAgICAgICAgaWYgaGFzYXR0cihtYXRjaF9hZ2FpbnN0LCAnbWF0Y2gnKToKKyAgICAgICAgICAgICMgUmVnZXhwIG1hdGNoCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hfYWdhaW5zdC5zZWFyY2gobWFya3VwKQorCisgICAgICAgIGlmIGhhc2F0dHIobWF0Y2hfYWdhaW5zdCwgJ19faXRlcl9fJyk6CisgICAgICAgICAgICAjIFRoZSBtYXJrdXAgbXVzdCBiZSBhbiBleGFjdCBtYXRjaCBhZ2FpbnN0IHNvbWV0aGluZworICAgICAgICAgICAgIyBpbiB0aGUgaXRlcmFibGUuCisgICAgICAgICAgICByZXR1cm4gbWFya3VwIGluIG1hdGNoX2FnYWluc3QKKworCitjbGFzcyBSZXN1bHRTZXQobGlzdCk6CisgICAgIiIiQSBSZXN1bHRTZXQgaXMganVzdCBhIGxpc3QgdGhhdCBrZWVwcyB0cmFjayBvZiB0aGUgU291cFN0cmFpbmVyCisgICAgdGhhdCBjcmVhdGVkIGl0LiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIHJlc3VsdD0oKSk6CisgICAgICAgIHN1cGVyKFJlc3VsdFNldCwgc2VsZikuX19pbml0X18ocmVzdWx0KQorICAgICAgICBzZWxmLnNvdXJjZSA9IHNvdXJjZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdGluZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NDk1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RpbmcucHkKQEAgLTAsMCArMSw1OTIgQEAKKyIiIkhlbHBlciBjbGFzc2VzIGZvciB0ZXN0cy4iIiIKKworaW1wb3J0IGNvcHkKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKK2Zyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICBDb21tZW50LAorICAgIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUsCisgICAgRG9jdHlwZSwKKyAgICBTb3VwU3RyYWluZXIsCispCisKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IEhUTUxQYXJzZXJUcmVlQnVpbGRlcgorZGVmYXVsdF9idWlsZGVyID0gSFRNTFBhcnNlclRyZWVCdWlsZGVyCisKKworY2xhc3MgU291cFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRfYnVpbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRfYnVpbGRlcigpCisKKyAgICBkZWYgc291cChzZWxmLCBtYXJrdXAsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQnVpbGQgYSBCZWF1dGlmdWwgU291cCBvYmplY3QgZnJvbSBtYXJrdXAuIiIiCisgICAgICAgIGJ1aWxkZXIgPSBrd2FyZ3MucG9wKCdidWlsZGVyJywgc2VsZi5kZWZhdWx0X2J1aWxkZXIpCisgICAgICAgIHJldHVybiBCZWF1dGlmdWxTb3VwKG1hcmt1cCwgYnVpbGRlcj1idWlsZGVyLCAqKmt3YXJncykKKworICAgIGRlZiBkb2N1bWVudF9mb3Ioc2VsZiwgbWFya3VwKToKKyAgICAgICAgIiIiVHVybiBhbiBIVE1MIGZyYWdtZW50IGludG8gYSBkb2N1bWVudC4KKworICAgICAgICBUaGUgZGV0YWlscyBkZXBlbmQgb24gdGhlIGJ1aWxkZXIuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kZWZhdWx0X2J1aWxkZXIudGVzdF9mcmFnbWVudF90b19kb2N1bWVudChtYXJrdXApCisKKyAgICBkZWYgYXNzZXJ0U291cEVxdWFscyhzZWxmLCB0b19wYXJzZSwgY29tcGFyZV9wYXJzZWRfdG89Tm9uZSk6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmRlZmF1bHRfYnVpbGRlcgorICAgICAgICBvYmogPSBCZWF1dGlmdWxTb3VwKHRvX3BhcnNlLCBidWlsZGVyPWJ1aWxkZXIpCisgICAgICAgIGlmIGNvbXBhcmVfcGFyc2VkX3RvIGlzIE5vbmU6CisgICAgICAgICAgICBjb21wYXJlX3BhcnNlZF90byA9IHRvX3BhcnNlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKGNvbXBhcmVfcGFyc2VkX3RvKSkKKworCitjbGFzcyBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3Qob2JqZWN0KToKKworICAgICIiIkEgYmFzaWMgdGVzdCBvZiBhIHRyZWVidWlsZGVyJ3MgY29tcGV0ZW5jZS4KKworICAgIEFueSBIVE1MIHRyZWVidWlsZGVyLCBwcmVzZW50IG9yIGZ1dHVyZSwgc2hvdWxkIGJlIGFibGUgdG8gcGFzcworICAgIHRoZXNlIHRlc3RzLiBXaXRoIGludmFsaWQgbWFya3VwLCB0aGVyZSdzIHJvb20gZm9yIGludGVycHJldGF0aW9uLAorICAgIGFuZCBkaWZmZXJlbnQgcGFyc2VycyBjYW4gaGFuZGxlIGl0IGRpZmZlcmVudGx5LiBCdXQgd2l0aCB0aGUKKyAgICBtYXJrdXAgaW4gdGhlc2UgdGVzdHMsIHRoZXJlJ3Mgbm90IG11Y2ggcm9vbSBmb3IgaW50ZXJwcmV0YXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgYXNzZXJ0RG9jdHlwZUhhbmRsZWQoc2VsZiwgZG9jdHlwZV9mcmFnbWVudCk6CisgICAgICAgICIiIkFzc2VydCB0aGF0IGEgZ2l2ZW4gZG9jdHlwZSBzdHJpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIiIiCisgICAgICAgIGRvY3R5cGVfc3RyLCBzb3VwID0gc2VsZi5fZG9jdW1lbnRfd2l0aF9kb2N0eXBlKGRvY3R5cGVfZnJhZ21lbnQpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgYSBEb2N0eXBlIG9iamVjdCB3YXMgY3JlYXRlZC4KKyAgICAgICAgZG9jdHlwZSA9IHNvdXAuY29udGVudHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb2N0eXBlLl9fY2xhc3NfXywgRG9jdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb2N0eXBlLCBkb2N0eXBlX2ZyYWdtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwKVs6bGVuKGRvY3R5cGVfc3RyKV0sIGRvY3R5cGVfc3RyKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIGRvY3R5cGUgd2FzIGNvcnJlY3RseSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICMgcGFyc2UgdHJlZSBhbmQgdGhhdCB0aGUgcmVzdCBvZiB0aGUgZG9jdW1lbnQgcGFyc2VkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAucC5jb250ZW50c1swXSwgJ2ZvbycpCisKKyAgICBkZWYgX2RvY3VtZW50X3dpdGhfZG9jdHlwZShzZWxmLCBkb2N0eXBlX2ZyYWdtZW50KToKKyAgICAgICAgIiIiR2VuZXJhdGUgYW5kIHBhcnNlIGEgZG9jdW1lbnQgd2l0aCB0aGUgZ2l2ZW4gZG9jdHlwZS4iIiIKKyAgICAgICAgZG9jdHlwZSA9ICc8IURPQ1RZUEUgJXM+JyAlIGRvY3R5cGVfZnJhZ21lbnQKKyAgICAgICAgbWFya3VwID0gZG9jdHlwZSArICdcbjxwPmZvbzwvcD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICByZXR1cm4gZG9jdHlwZSwgc291cAorCisgICAgZGVmIHRlc3Rfbm9ybWFsX2RvY3R5cGVzKHNlbGYpOgorICAgICAgICAiIiJNYWtlIHN1cmUgbm9ybWFsLCBldmVyeWRheSBIVE1MIGRvY3R5cGVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZCgiaHRtbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RG9jdHlwZUhhbmRsZWQoCisgICAgICAgICAgICAnaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIicpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kb2N0eXBlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8IURPQ1RZUEU+IikKKyAgICAgICAgZG9jdHlwZSA9IHNvdXAuY29udGVudHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiwgZG9jdHlwZS5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfcHVibGljX2RvY3R5cGVfd2l0aF91cmwoc2VsZik6CisgICAgICAgIGRvY3R5cGUgPSAnaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCInCisgICAgICAgIHNlbGYuYXNzZXJ0RG9jdHlwZUhhbmRsZWQoZG9jdHlwZSkKKworICAgIGRlZiB0ZXN0X3N5c3RlbV9kb2N0eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKCdmb28gU1lTVEVNICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyInKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlZF9zeXN0ZW1fZG9jdHlwZShzZWxmKToKKyAgICAgICAgIyBXZSBjYW4gaGFuZGxlIGEgbmFtZXNwYWNlZCBkb2N0eXBlIHdpdGggYSBzeXN0ZW0gSUQuCisgICAgICAgIHNlbGYuYXNzZXJ0RG9jdHlwZUhhbmRsZWQoJ3hzbDpzdHlsZXNoZWV0IFNZU1RFTSAiaHRtbGVudC5kdGQiJykKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfcHVibGljX2RvY3R5cGUoc2VsZik6CisgICAgICAgICMgVGVzdCBhIG5hbWVzcGFjZWQgZG9jdHlwZSB3aXRoIGEgcHVibGljIGlkLgorICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKCd4c2w6c3R5bGVzaGVldCBQVUJMSUMgImh0bWxlbnQuZHRkIicpCisKKyAgICBkZWYgdGVzdF9yZWFsX3hodG1sX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAiIiJBIHJlYWwgWEhUTUwgZG9jdW1lbnQgc2hvdWxkIGNvbWUgb3V0IG1vcmUgb3IgbGVzcyB0aGUgc2FtZSBhcyBpdCB3ZW50IGluLiIiIgorICAgICAgICBtYXJrdXAgPSBiIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+PHRpdGxlPkhlbGxvLjwvdGl0bGU+PC9oZWFkPgorPGJvZHk+R29vZGJ5ZS48L2JvZHk+Cis8L2h0bWw+IiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5lbmNvZGUoInV0Zi04IikucmVwbGFjZShiIlxuIiwgYiIiKSwKKyAgICAgICAgICAgIG1hcmt1cC5yZXBsYWNlKGIiXG4iLCBiIiIpKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHkoc2VsZik6CisgICAgICAgICIiIk1ha2Ugc3VyZSB5b3UgY2FuIGNvcHkgdGhlIHRyZWUgYnVpbGRlci4KKworICAgICAgICBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBidWlsZGVyIGlzIHBhcnQgb2YgYQorICAgICAgICBCZWF1dGlmdWxTb3VwIG9iamVjdCwgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBjb3B5IHRoYXQuCisgICAgICAgICIiIgorICAgICAgICBjb3B5LmRlZXBjb3B5KHNlbGYuZGVmYXVsdF9idWlsZGVyKQorCisgICAgZGVmIHRlc3RfcF90YWdfaXNfbmV2ZXJfZW1wdHlfZWxlbWVudChzZWxmKToKKyAgICAgICAgIiIiQSA8cD4gdGFnIGlzIG5ldmVyIGRlc2lnbmF0ZWQgYXMgYW4gZW1wdHktZWxlbWVudCB0YWcuCisKKyAgICAgICAgRXZlbiBpZiB0aGUgbWFya3VwIHNob3dzIGl0IGFzIGFuIGVtcHR5LWVsZW1lbnQgdGFnLCBpdAorICAgICAgICBzaG91bGRuJ3QgYmUgcHJlc2VudGVkIHRoYXQgd2F5LgorICAgICAgICAiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHAvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc291cC5wLmlzX2VtcHR5X2VsZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNvdXAucCksICI8cD48L3A+IikKKworICAgIGRlZiB0ZXN0X3VuY2xvc2VkX3RhZ3NfZ2V0X2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiQSB0YWcgdGhhdCdzIG5vdCBjbG9zZWQgYnkgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlIGNsb3NlZC4KKworICAgICAgICBUaGlzIGFwcGxpZXMgdG8gYWxsIHRhZ3MgZXhjZXB0IGVtcHR5LWVsZW1lbnQgdGFncy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+IiwgIjxwPjwvcD4iKQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxiPiIsICI8Yj48L2I+IikKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxicj4iLCAiPGJyLz4iKQorCisgICAgZGVmIHRlc3RfYnJfaXNfYWx3YXlzX2VtcHR5X2VsZW1lbnRfdGFnKHNlbGYpOgorICAgICAgICAiIiJBIDxicj4gdGFnIGlzIGRlc2lnbmF0ZWQgYXMgYW4gZW1wdHktZWxlbWVudCB0YWcuCisKKyAgICAgICAgU29tZSBwYXJzZXJzIHRyZWF0IDxicj48L2JyPiBhcyBvbmUgPGJyLz4gdGFnLCBzb21lIHBhcnNlcnMgYXMKKyAgICAgICAgdHdvIHRhZ3MsIGJ1dCBpdCBzaG91bGQgYWx3YXlzIGJlIGFuIGVtcHR5LWVsZW1lbnQgdGFnLgorICAgICAgICAiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGJyPjwvYnI+IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvdXAuYnIuaXNfZW1wdHlfZWxlbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cC5iciksICI8YnIvPiIpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfZm9ybWF0dGluZ19lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8ZW0+PGVtPjwvZW0+PC9lbT4iKQorCisgICAgZGVmIHRlc3RfY29tbWVudChzZWxmKToKKyAgICAgICAgIyBDb21tZW50cyBhcmUgcmVwcmVzZW50ZWQgYXMgQ29tbWVudCBvYmplY3RzLgorICAgICAgICBtYXJrdXAgPSAiPHA+Zm9vPCEtLWZvb2Jhci0tPmJhejwvcD4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyhtYXJrdXApCisKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGNvbW1lbnQgPSBzb3VwLmZpbmQodGV4dD0iZm9vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tZW50Ll9fY2xhc3NfXywgQ29tbWVudCkKKworICAgICAgICAjIFRoZSBjb21tZW50IGlzIHByb3Blcmx5IGludGVncmF0ZWQgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9vID0gc291cC5maW5kKHRleHQ9ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWVudCwgZm9vLm5leHRfZWxlbWVudCkKKyAgICAgICAgYmF6ID0gc291cC5maW5kKHRleHQ9ImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWVudCwgYmF6LnByZXZpb3VzX2VsZW1lbnQpCisKKyAgICBkZWYgdGVzdF9wcmVzZXJ2ZWRfd2hpdGVzcGFjZV9pbl9wcmVfYW5kX3RleHRhcmVhKHNlbGYpOgorICAgICAgICAiIiJXaGl0ZXNwYWNlIG11c3QgYmUgcHJlc2VydmVkIGluIDxwcmU+IGFuZCA8dGV4dGFyZWE+IHRhZ3MuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHByZT4gICA8L3ByZT4iKQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjx0ZXh0YXJlYT4gd29vICA8L3RleHRhcmVhPiIpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfaW5saW5lX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAiIiJJbmxpbmUgZWxlbWVudHMgY2FuIGJlIG5lc3RlZCBpbmRlZmluaXRlbHkuIiIiCisgICAgICAgIGJfdGFnID0gIjxiPkluc2lkZSBhIEIgdGFnPC9iPiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKGJfdGFnKQorCisgICAgICAgIG5lc3RlZF9iX3RhZyA9ICI8cD5BIDxpPm5lc3RlZCA8Yj50YWc8L2I+PC9pPjwvcD4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyhuZXN0ZWRfYl90YWcpCisKKyAgICAgICAgZG91YmxlX25lc3RlZF9iX3RhZyA9ICI8cD5BIDxhPmRvdWJseSA8aT5uZXN0ZWQgPGI+dGFnPC9iPjwvaT48L2E+PC9wPiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKG5lc3RlZF9iX3RhZykKKworICAgIGRlZiB0ZXN0X25lc3RlZF9ibG9ja19sZXZlbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgZWxlbWVudHMgY2FuIGJlIG5lc3RlZC4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGJsb2NrcXVvdGU+PHA+PGI+Rm9vPC9iPjwvcD48L2Jsb2NrcXVvdGU+JykKKyAgICAgICAgYmxvY2txdW90ZSA9IHNvdXAuYmxvY2txdW90ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJsb2NrcXVvdGUucC5iLnN0cmluZywgJ0ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmxvY2txdW90ZS5iLnN0cmluZywgJ0ZvbycpCisKKyAgICBkZWYgdGVzdF9jb3JyZWN0bHlfbmVzdGVkX3RhYmxlcyhzZWxmKToKKyAgICAgICAgIiIiT25lIHRhYmxlIGNhbiBnbyBpbnNpZGUgYW5vdGhlciBvbmUuIiIiCisgICAgICAgIG1hcmt1cCA9ICgnPHRhYmxlIGlkPSIxIj4nCisgICAgICAgICAgICAgICAgICAnPHRyPicKKyAgICAgICAgICAgICAgICAgICI8dGQ+SGVyZSdzIGFub3RoZXIgdGFibGU6IgorICAgICAgICAgICAgICAgICAgJzx0YWJsZSBpZD0iMiI+JworICAgICAgICAgICAgICAgICAgJzx0cj48dGQ+Zm9vPC90ZD48L3RyPicKKyAgICAgICAgICAgICAgICAgICc8L3RhYmxlPjwvdGQ+JykKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICBtYXJrdXAsCisgICAgICAgICAgICAnPHRhYmxlIGlkPSIxIj48dHI+PHRkPkhlcmVcJ3MgYW5vdGhlciB0YWJsZTonCisgICAgICAgICAgICAnPHRhYmxlIGlkPSIyIj48dHI+PHRkPmZvbzwvdGQ+PC90cj48L3RhYmxlPicKKyAgICAgICAgICAgICc8L3RkPjwvdHI+PC90YWJsZT4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgICI8dGFibGU+PHRoZWFkPjx0cj48dGQ+Rm9vPC90ZD48L3RyPjwvdGhlYWQ+IgorICAgICAgICAgICAgIjx0Ym9keT48dHI+PHRkPkJhcjwvdGQ+PC90cj48L3Rib2R5PiIKKyAgICAgICAgICAgICI8dGZvb3Q+PHRyPjx0ZD5CYXo8L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiIpCisKKyAgICBkZWYgdGVzdF9kZWVwbHlfbmVzdGVkX211bHRpdmFsdWVkX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgIyBodG1sNWxpYiBjYW4gc2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1lIHRhZyBtYW55IHRpbWVzCisgICAgICAgICMgYXMgaXQgcmVhcnJhbmdlcyB0aGUgdHJlZS4gVGhpcyBoYXMgY2F1c2VkIHByb2JsZW1zIHdpdGgKKyAgICAgICAgIyBtdWx0aXZhbHVlZCBhdHRyaWJ1dGVzLgorICAgICAgICBtYXJrdXAgPSAnPHRhYmxlPjxkaXY+PGRpdiBjbGFzcz0iY3NzIj48L2Rpdj48L2Rpdj48L3RhYmxlPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJjc3MiXSwgc291cC5kaXYuZGl2WydjbGFzcyddKQorCisgICAgZGVmIHRlc3RfYW5nbGVfYnJhY2tldHNfaW5fYXR0cmlidXRlX3ZhbHVlc19hcmVfZXNjYXBlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8YSBiPSI8YT4iPjwvYT4nLCAnPGEgYj0iJmx0O2EmZ3Q7Ij48L2E+JykKKworICAgIGRlZiB0ZXN0X2VudGl0aWVzX2luX2F0dHJpYnV0ZXNfY29udmVydGVkX3RvX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGV4cGVjdCA9IHUnPHAgaWQ9InBpXE57TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERX1hdGEiPjwvcD4nCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPHAgaWQ9InBpJiMyNDE7YXRhIj48L3A+JywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSYjeGYxO2F0YSI+PC9wPicsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8cCBpZD0icGkmI1hmMTthdGEiPjwvcD4nLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPHAgaWQ9InBpJm50aWxkZTthdGEiPjwvcD4nLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9lbnRpdGllc19pbl90ZXh0X2NvbnZlcnRlZF90b191bmljb2RlKHNlbGYpOgorICAgICAgICBleHBlY3QgPSB1JzxwPnBpXE57TEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERX1hdGE8L3A+JworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPnBpJiMyNDE7YXRhPC9wPiIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5waSYjeGYxO2F0YTwvcD4iLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+cGkmI1hmMTthdGE8L3A+IiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPnBpJm50aWxkZTthdGE8L3A+IiwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfcXVvdF9lbnRpdHlfY29udmVydGVkX3RvX3F1b3RhdGlvbl9tYXJrKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPkkgc2FpZCAmcXVvdDtnb29kIGRheSEmcXVvdDs8L3A+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8cD5JIHNhaWQgImdvb2QgZGF5ISI8L3A+JykKKworICAgIGRlZiB0ZXN0X291dF9vZl9yYW5nZV9lbnRpdHkoc2VsZik6CisgICAgICAgIGV4cGVjdCA9IHUiXE57UkVQTEFDRU1FTlQgQ0hBUkFDVEVSfSIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCImIzEwMDAwMDAwMDAwMDAwOyIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCImI3gxMDAwMDAwMDAwMDAwMDsiLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiJiMxMDAwMDAwMDAwOyIsIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X211bHRpcGFydF9zdHJpbmdzKHNlbGYpOgorICAgICAgICAiTW9zdGx5IHRvIHByZXZlbnQgYSByZWN1cnJlbmNlIG9mIGEgYnVnIGluIHRoZSBodG1sNWxpYiB0cmVlYnVpbGRlci4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxodG1sPjxoMj5cbmZvbzwvaDI+PHA+PC9wPjwvaHRtbD4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJwIiwgc291cC5oMi5zdHJpbmcubmV4dF9lbGVtZW50Lm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInAiLCBzb3VwLnAubmFtZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX25hbWVzcGFjZXMoc2VsZik6CisgICAgICAgICIiIlBhcnNlcnMgZG9uJ3QgbmVlZCB0byAqdW5kZXJzdGFuZCogbmFtZXNwYWNlcywgYnV0IGF0IHRoZQorICAgICAgICB2ZXJ5IGxlYXN0IHRoZXkgc2hvdWxkIG5vdCBjaG9rZSBvbiBuYW1lc3BhY2VzIG9yIGxvc2UKKyAgICAgICAgZGF0YS4iIiIKKworICAgICAgICBtYXJrdXAgPSBiJzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczptYXRobWw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxoZWFkPjwvaGVhZD48Ym9keT48bWF0aG1sOm1zcXJ0PjQ8L21hdGhtbDptc3FydD48YiBzdmc6ZmlsbD0icmVkIj48L2I+PC9ib2R5PjwvaHRtbD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcmt1cCwgc291cC5lbmNvZGUoKSkKKyAgICAgICAgaHRtbCA9IHNvdXAuaHRtbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgc291cC5odG1sWyd4bWxucyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnLCBzb3VwLmh0bWxbJ3htbG5zOm1hdGhtbCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgc291cC5odG1sWyd4bWxuczpzdmcnXSkKKworICAgIGRlZiB0ZXN0X211bHRpdmFsdWVkX2F0dHJpYnV0ZV92YWx1ZV9iZWNvbWVzX2xpc3Qoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IGInPGEgY2xhc3M9ImZvbyBiYXIiPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydmb28nLCAnYmFyJ10sIHNvdXAuYVsnY2xhc3MnXSkKKworICAgICMKKyAgICAjIEdlbmVyYWxseSBzcGVha2luZywgdGVzdHMgYmVsb3cgdGhpcyBwb2ludCBhcmUgbW9yZSB0ZXN0cyBvZgorICAgICMgQmVhdXRpZnVsIFNvdXAgdGhhbiB0ZXN0cyBvZiB0aGUgdHJlZSBidWlsZGVycy4gQnV0IHBhcnNlcnMgYXJlCisgICAgIyB3ZWlyZCwgc28gd2UgcnVuIHRoZXNlIHRlc3RzIHNlcGFyYXRlbHkgZm9yIGV2ZXJ5IHRyZWUgYnVpbGRlcgorICAgICMgdG8gZGV0ZWN0IGFueSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZW0uCisgICAgIworCisgICAgZGVmIHRlc3RfY2FuX3BhcnNlX3VuaWNvZGVfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICMgQSBzZWVtaW5nbHkgaW5ub2N1b3VzIGRvY3VtZW50Li4uIGJ1dCBpdCdzIGluIFVuaWNvZGUhIEFuZAorICAgICAgICAjIGl0IGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiB0aGUKKyAgICAgICAgIyBlbmNvZGluZyBmb3VuZCBpbiB0aGUgIGRlY2xhcmF0aW9uISBUaGUgaG9ycm9yIQorICAgICAgICBtYXJrdXAgPSB1JzxodG1sPjxoZWFkPjxtZXRhIGVuY29kaW5nPSJldWMtanAiPjwvaGVhZD48Ym9keT5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L2JvZHk+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1NhY3JceGU5IGJsZXUhJywgc291cC5ib2R5LnN0cmluZykKKworICAgIGRlZiB0ZXN0X3NvdXBzdHJhaW5lcihzZWxmKToKKyAgICAgICAgIiIiUGFyc2VycyBzaG91bGQgYmUgYWJsZSB0byB3b3JrIHdpdGggU291cFN0cmFpbmVycy4iIiIKKyAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIoImIiKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJBIDxiPmJvbGQ8L2I+IDxtZXRhLz4gPGk+c3RhdGVtZW50PC9pPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vfb25seT1zdHJhaW5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmRlY29kZSgpLCAiPGI+Ym9sZDwvYj4iKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3F1b3RlX2F0dHJpYnV0ZV92YWx1ZXNfYmVjb21lX2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPGZvbyBhdHRyPSdiYXInPjwvZm9vPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGZvbyBhdHRyPSJiYXIiPjwvZm9vPicpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfdmFsdWVzX3dpdGhfbmVzdGVkX3F1b3Rlc19hcmVfbGVmdF9hbG9uZShzZWxmKToKKyAgICAgICAgdGV4dCA9ICIiIjxmb28gYXR0cj0nYmFyICJicmF3bHMiIGhhcHBlbic+YTwvZm9vPiIiIgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHModGV4dCkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV92YWx1ZXNfd2l0aF9kb3VibGVfbmVzdGVkX3F1b3Rlc19nZXRfcXVvdGVkKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIiIiPGZvbyBhdHRyPSdiYXIgImJyYXdscyIgaGFwcGVuJz5hPC9mb28+IiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgc291cC5mb29bJ2F0dHInXSA9ICdCcmF3bHMgaGFwcGVuIGF0ICJCb2JcJ3MgQmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgc291cC5mb28uZGVjb2RlKCksCisgICAgICAgICAgICAiIiI8Zm9vIGF0dHI9IkJyYXdscyBoYXBwZW4gYXQgJnF1b3Q7Qm9iXCdzIEJhciZxdW90OyI+YTwvZm9vPiIiIikKKworICAgIGRlZiB0ZXN0X2FtcGVyc2FuZF9pbl9hdHRyaWJ1dGVfdmFsdWVfZ2V0c19lc2NhcGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzx0aGlzIGlzPSJyZWFsbHkgbWVzc2VkIHVwICYgc3R1ZmYiPjwvdGhpcz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0aGlzIGlzPSJyZWFsbHkgbWVzc2VkIHVwICZhbXA7IHN0dWZmIj48L3RoaXM+JykKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAnPGEgaHJlZj0iaHR0cDovL2V4YW1wbGUub3JnP2E9MSZiPTI7MyI+Zm9vPC9hPicsCisgICAgICAgICAgICAnPGEgaHJlZj0iaHR0cDovL2V4YW1wbGUub3JnP2E9MSZhbXA7Yj0yOzMiPmZvbzwvYT4nKQorCisgICAgZGVmIHRlc3RfZXNjYXBlZF9hbXBlcnNhbmRfaW5fYXR0cmlidXRlX3ZhbHVlX2lzX2xlZnRfYWxvbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPGEgaHJlZj0iaHR0cDovL2V4YW1wbGUub3JnP2E9MSZhbXA7Yj0yOzMiPjwvYT4nKQorCisgICAgZGVmIHRlc3RfZW50aXRpZXNfaW5fc3RyaW5nc19jb252ZXJ0ZWRfZHVyaW5nX3BhcnNpbmcoc2VsZik6CisgICAgICAgICMgQm90aCBYTUwgYW5kIEhUTUwgZW50aXRpZXMgYXJlIGNvbnZlcnRlZCB0byBVbmljb2RlIGNoYXJhY3RlcnMKKyAgICAgICAgIyBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgdGV4dCA9ICI8cD4mbHQ7Jmx0O3NhY3ImZWFjdXRlOyYjMzI7YmxldSEmZ3Q7Jmd0OzwvcD4iCisgICAgICAgIGV4cGVjdGVkID0gdSI8cD4mbHQ7Jmx0O3NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9wPiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKHRleHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVzX2NvbnZlcnRlZF9vbl90aGVfd2F5X2luKHNlbGYpOgorICAgICAgICAjIE1pY3Jvc29mdCBzbWFydCBxdW90ZXMgYXJlIGNvbnZlcnRlZCB0byBVbmljb2RlIGNoYXJhY3RlcnMgZHVyaW5nCisgICAgICAgICMgcGFyc2luZy4KKyAgICAgICAgcXVvdGUgPSBiIjxwPlx4OTFGb29ceDkyPC9wPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChxdW90ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAucC5zdHJpbmcsCisgICAgICAgICAgICB1IlxOe0xFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLfUZvb1xOe1JJR0hUIFNJTkdMRSBRVU9UQVRJT04gTUFSS30iKQorCisgICAgZGVmIHRlc3Rfbm9uX2JyZWFraW5nX3NwYWNlc19jb252ZXJ0ZWRfb25fdGhlX3dheV9pbihzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Jm5ic3A7Jm5ic3A7PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLnN0cmluZywgdSJcTntOTy1CUkVBSyBTUEFDRX0iICogMikKKworICAgIGRlZiB0ZXN0X2VudGl0aWVzX2NvbnZlcnRlZF9vbl90aGVfd2F5X291dChzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8cD4mbHQ7Jmx0O3NhY3ImZWFjdXRlOyYjMzI7YmxldSEmZ3Q7Jmd0OzwvcD4iCisgICAgICAgIGV4cGVjdGVkID0gdSI8cD4mbHQ7Jmx0O3NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9wPiIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLnAuZW5jb2RlKCJ1dGYtOCIpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlYWxfaXNvX2xhdGluX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIFNtb2tlIHRlc3Qgb2YgaW50ZXJyZWxhdGVkIGZ1bmN0aW9uYWxpdHksIHVzaW5nIGFuCisgICAgICAgICMgZWFzeS10by11bmRlcnN0YW5kIGRvY3VtZW50LgorCisgICAgICAgICMgSGVyZSBpdCBpcyBpbiBVbmljb2RlLiBOb3RlIHRoYXQgaXQgY2xhaW1zIHRvIGJlIGluIElTTy1MYXRpbi0xLgorICAgICAgICB1bmljb2RlX2h0bWwgPSB1JzxodG1sPjxoZWFkPjxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tTGF0aW4tMSIgaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIi8+PC9oZWFkPjxib2R5PjxwPlNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ITwvcD48L2JvZHk+PC9odG1sPicKKworICAgICAgICAjIFRoYXQncyBiZWNhdXNlIHdlJ3JlIGdvaW5nIHRvIGVuY29kZSBpdCBpbnRvIElTTy1MYXRpbi0xLCBhbmQgdXNlCisgICAgICAgICMgdGhhdCB0byB0ZXN0LgorICAgICAgICBpc29fbGF0aW5faHRtbCA9IHVuaWNvZGVfaHRtbC5lbmNvZGUoImlzby04ODU5LTEiKQorCisgICAgICAgICMgUGFyc2UgdGhlIElTTy1MYXRpbi0xIEhUTUwuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaXNvX2xhdGluX2h0bWwpCisgICAgICAgICMgRW5jb2RlIGl0IHRvIFVURi04LgorICAgICAgICByZXN1bHQgPSBzb3VwLmVuY29kZSgidXRmLTgiKQorCisgICAgICAgICMgV2hhdCBkbyB3ZSBleHBlY3QgdGhlIHJlc3VsdCB0byBsb29rIGxpa2U/IFdlbGwsIGl0IHdvdWxkCisgICAgICAgICMgbG9vayBsaWtlIHVuaWNvZGVfaHRtbCwgZXhjZXB0IHRoYXQgdGhlIE1FVEEgdGFnIHdvdWxkIHNheQorICAgICAgICAjIFVURi04IGluc3RlYWQgb2YgSVNPLUxhdGluLTEuCisgICAgICAgIGV4cGVjdGVkID0gdW5pY29kZV9odG1sLnJlcGxhY2UoIklTTy1MYXRpbi0xIiwgInV0Zi04IikKKworICAgICAgICAjIEFuZCwgb2YgY291cnNlLCBpdCB3b3VsZCBiZSBpbiBVVEYtOCwgbm90IFVuaWNvZGUuCisgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuZW5jb2RlKCJ1dGYtOCIpCisKKyAgICAgICAgIyBUYS1kYSEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVhbF9zaGlmdF9qaXNfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICMgU21va2UgdGVzdCB0byBtYWtlIHN1cmUgdGhlIHBhcnNlciBjYW4gaGFuZGxlIGEgZG9jdW1lbnQgaW4KKyAgICAgICAgIyBTaGlmdC1KSVMgZW5jb2RpbmcsIHdpdGhvdXQgY2hva2luZy4KKyAgICAgICAgc2hpZnRfamlzX2h0bWwgPSAoCisgICAgICAgICAgICBiJzxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48cHJlPicKKyAgICAgICAgICAgIGInXHg4Mlx4YjFceDgyXHhlYVx4ODJceGNkU2hpZnQtSklTXHg4Mlx4YzVceDgzUlx4ODFbXHg4M2YnCisgICAgICAgICAgICBiJ1x4ODNCXHg4M1x4OTNceDgzT1x4ODJceGIzXHg4Mlx4ZWFceDgyXHhiZFx4OTNceGZhXHg5NntceDhjJworICAgICAgICAgICAgYidceGVhXHg4Mlx4Y2NceDgzdFx4ODNAXHg4M0NceDgzXHg4Ylx4ODJceGM1XHg4Mlx4YjdceDgxQicKKyAgICAgICAgICAgIGInPC9wcmU+PC9ib2R5PjwvaHRtbD4nKQorICAgICAgICB1bmljb2RlX2h0bWwgPSBzaGlmdF9qaXNfaHRtbC5kZWNvZGUoInNoaWZ0LWppcyIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodW5pY29kZV9odG1sKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBwYXJzZSB0cmVlIGlzIGNvcnJlY3RseSBlbmNvZGVkIHRvIHZhcmlvdXMKKyAgICAgICAgIyBlbmNvZGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5lbmNvZGUoInV0Zi04IiksIHVuaWNvZGVfaHRtbC5lbmNvZGUoInV0Zi04IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5lbmNvZGUoImV1Y19qcCIpLCB1bmljb2RlX2h0bWwuZW5jb2RlKCJldWNfanAiKSkKKworICAgIGRlZiB0ZXN0X3JlYWxfaGVicmV3X2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIEEgcmVhbC13b3JsZCB0ZXN0IHRvIG1ha2Ugc3VyZSB3ZSBjYW4gY29udmVydCBJU08tODg1OS05IChhCisgICAgICAgICMgSGVicmV3IGVuY29kaW5nKSB0byBVVEYtOC4KKyAgICAgICAgaGVicmV3X2RvY3VtZW50ID0gYic8aHRtbD48aGVhZD48dGl0bGU+SGVicmV3IChJU08gODg1OS04KSBpbiBWaXN1YWwgRGlyZWN0aW9uYWxpdHk8L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+SGVicmV3IChJU08gODg1OS04KSBpbiBWaXN1YWwgRGlyZWN0aW9uYWxpdHk8L2gxPlx4ZWRceGU1XHhlY1x4Zjk8L2JvZHk+PC9odG1sPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgKKyAgICAgICAgICAgIGhlYnJld19kb2N1bWVudCwgZnJvbV9lbmNvZGluZz0iaXNvODg1OS04IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLm9yaWdpbmFsX2VuY29kaW5nLCAnaXNvODg1OS04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCd1dGYtOCcpLAorICAgICAgICAgICAgaGVicmV3X2RvY3VtZW50LmRlY29kZSgiaXNvODg1OS04IikuZW5jb2RlKCJ1dGYtOCIpKQorCisgICAgZGVmIHRlc3RfbWV0YV90YWdfcmVmbGVjdHNfY3VycmVudF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBIZXJlJ3MgdGhlIDxtZXRhPiB0YWcgc2F5aW5nIHRoYXQgYSBkb2N1bWVudCBpcworICAgICAgICAjIGVuY29kZWQgaW4gU2hpZnQtSklTLgorICAgICAgICBtZXRhX3RhZyA9ICgnPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXgtc2ppcyIgJworICAgICAgICAgICAgICAgICAgICAnaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIi8+JykKKworICAgICAgICAjIEhlcmUncyBhIGRvY3VtZW50IGluY29ycG9yYXRpbmcgdGhhdCBtZXRhIHRhZy4KKyAgICAgICAgc2hpZnRfamlzX2h0bWwgPSAoCisgICAgICAgICAgICAnPGh0bWw+PGhlYWQ+XG4lc1xuJworICAgICAgICAgICAgJzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtbGFuZ3VhZ2UiIGNvbnRlbnQ9ImphIi8+JworICAgICAgICAgICAgJzwvaGVhZD48Ym9keT5TaGlmdC1KSVMgbWFya3VwIGdvZXMgaGVyZS4nKSAlIG1ldGFfdGFnCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoc2hpZnRfamlzX2h0bWwpCisKKyAgICAgICAgIyBQYXJzZSB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgY2hhcnNldCBpcyBzZWVtaW5nbHkgdW5hZmZlY3RlZC4KKyAgICAgICAgcGFyc2VkX21ldGEgPSBzb3VwLmZpbmQoJ21ldGEnLCB7J2h0dHAtZXF1aXYnOiAnQ29udGVudC10eXBlJ30pCisgICAgICAgIGNvbnRlbnQgPSBwYXJzZWRfbWV0YVsnY29udGVudCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RleHQvaHRtbDsgY2hhcnNldD14LXNqaXMnLCBjb250ZW50KQorCisgICAgICAgICMgQnV0IHRoYXQgdmFsdWUgaXMgYWN0dWFsbHkgYSBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlIG9iamVjdC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoY29udGVudCwgQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZSkpCisKKyAgICAgICAgIyBBbmQgaXQgd2lsbCB0YWtlIG9uIGEgdmFsdWUgdGhhdCByZWZsZWN0cyBpdHMgY3VycmVudAorICAgICAgICAjIGVuY29kaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmOCcsIGNvbnRlbnQuZW5jb2RlKCJ1dGY4IikpCisKKyAgICAgICAgIyBGb3IgdGhlIHJlc3Qgb2YgdGhlIHN0b3J5LCBzZWUgVGVzdFN1YnN0aXR1dGlvbnMgaW4KKyAgICAgICAgIyB0ZXN0X3RyZWUucHkuCisKKyAgICBkZWYgdGVzdF9odG1sNV9zdHlsZV9tZXRhX3RhZ19yZWZsZWN0c19jdXJyZW50X2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIEhlcmUncyB0aGUgPG1ldGE+IHRhZyBzYXlpbmcgdGhhdCBhIGRvY3VtZW50IGlzCisgICAgICAgICMgZW5jb2RlZCBpbiBTaGlmdC1KSVMuCisgICAgICAgIG1ldGFfdGFnID0gKCc8bWV0YSBpZD0iZW5jb2RpbmciIGNoYXJzZXQ9Ingtc2ppcyIgLz4nKQorCisgICAgICAgICMgSGVyZSdzIGEgZG9jdW1lbnQgaW5jb3Jwb3JhdGluZyB0aGF0IG1ldGEgdGFnLgorICAgICAgICBzaGlmdF9qaXNfaHRtbCA9ICgKKyAgICAgICAgICAgICc8aHRtbD48aGVhZD5cbiVzXG4nCisgICAgICAgICAgICAnPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1sYW5ndWFnZSIgY29udGVudD0iamEiLz4nCisgICAgICAgICAgICAnPC9oZWFkPjxib2R5PlNoaWZ0LUpJUyBtYXJrdXAgZ29lcyBoZXJlLicpICUgbWV0YV90YWcKKyAgICAgICAgc291cCA9IHNlbGYuc291cChzaGlmdF9qaXNfaHRtbCkKKworICAgICAgICAjIFBhcnNlIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBjaGFyc2V0IGlzIHNlZW1pbmdseSB1bmFmZmVjdGVkLgorICAgICAgICBwYXJzZWRfbWV0YSA9IHNvdXAuZmluZCgnbWV0YScsIGlkPSJlbmNvZGluZyIpCisgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRfbWV0YVsnY2hhcnNldCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3gtc2ppcycsIGNoYXJzZXQpCisKKyAgICAgICAgIyBCdXQgdGhhdCB2YWx1ZSBpcyBhY3R1YWxseSBhIENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUgb2JqZWN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShjaGFyc2V0LCBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlKSkKKworICAgICAgICAjIEFuZCBpdCB3aWxsIHRha2Ugb24gYSB2YWx1ZSB0aGF0IHJlZmxlY3RzIGl0cyBjdXJyZW50CisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3V0ZjgnLCBjaGFyc2V0LmVuY29kZSgidXRmOCIpKQorCisgICAgZGVmIHRlc3RfdGFnX3dpdGhfbm9fYXR0cmlidXRlc19jYW5faGF2ZV9hdHRyaWJ1dGVzX2FkZGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gc2VsZi5zb3VwKCI8YT50ZXh0PC9hPiIpCisgICAgICAgIGRhdGEuYVsnZm9vJ10gPSAnYmFyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc8YSBmb289ImJhciI+dGV4dDwvYT4nLCBkYXRhLmEuZGVjb2RlKCkpCisKK2NsYXNzIFhNTFRyZWVCdWlsZGVyU21va2VUZXN0KG9iamVjdCk6CisKKyAgICBkZWYgdGVzdF9kb2NzdHJpbmdfZ2VuZXJhdGVkKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8cm9vdC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCksIGInPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbjxyb290Lz4nKQorCisgICAgZGVmIHRlc3RfcmVhbF94aHRtbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIiIiQSByZWFsIFhIVE1MIGRvY3VtZW50IHNob3VsZCBjb21lIG91dCAqZXhhY3RseSogdGhlIHNhbWUgYXMgaXQgd2VudCBpbi4iIiIKKyAgICAgICAgbWFya3VwID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPjx0aXRsZT5IZWxsby48L3RpdGxlPjwvaGVhZD4KKzxib2R5Pkdvb2RieWUuPC9ib2R5PgorPC9odG1sPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCJ1dGYtOCIpLCBtYXJrdXApCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfcHJvY2Vzc2VzX3NjcmlwdF90YWdfZm9yX3htbF9kb2N1bWVudHMoc2VsZik6CisgICAgICAgIGRvYyA9ICIiIgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgIDwvc2NyaXB0PgorIiIiCisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGRvYywgInhtbCIpCisgICAgICAgICMgbHhtbCB3b3VsZCBoYXZlIHN0cmlwcGVkIHRoaXMgd2hpbGUgcGFyc2luZywgYnV0IHdlIGNhbiBhZGQKKyAgICAgICAgIyBpdCBsYXRlci4KKyAgICAgICAgc291cC5zY3JpcHQuc3RyaW5nID0gJ2NvbnNvbGUubG9nKCI8IDwgaGV5ID4gPiAiKTsnCisgICAgICAgIGVuY29kZWQgPSBzb3VwLmVuY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIiZsdDsgJmx0OyBoZXkgJmd0OyAmZ3Q7IiBpbiBlbmNvZGVkKQorCisgICAgZGVmIHRlc3RfY2FuX3BhcnNlX3VuaWNvZGVfZG9jdW1lbnQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iZXVjLWpwIj48cm9vdD5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L3Jvb3Q+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1NhY3JceGU5IGJsZXUhJywgc291cC5yb290LnN0cmluZykKKworICAgIGRlZiB0ZXN0X3BvcHBpbmdfbmFtZXNwYWNlZF90YWcoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8cnNzIHhtbG5zOmRjPSJmb28iPjxkYzpjcmVhdG9yPmI8L2RjOmNyZWF0b3I+PGRjOmRhdGU+MjAxMi0wNy0wMlQyMDozMzo0Mlo8L2RjOmRhdGU+PGRjOnJpZ2h0cz5jPC9kYzpyaWdodHM+PGltYWdlPmQ8L2ltYWdlPjwvcnNzPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1bmljb2RlKHNvdXAucnNzKSwgbWFya3VwKQorCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2luY2x1ZGVzX2NvcnJlY3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxyb290Lz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5lbmNvZGUoImxhdGluMSIpLAorICAgICAgICAgICAgYic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJsYXRpbjEiPz5cbjxyb290Lz4nKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfeG1sX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAiIiJBIGxhcmdlIFhNTCBkb2N1bWVudCBzaG91bGQgY29tZSBvdXQgdGhlIHNhbWUgYXMgaXQgd2VudCBpbi4iIiIKKyAgICAgICAgbWFya3VwID0gKGInPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbjxyb290PicKKyAgICAgICAgICAgICAgICAgICsgYicwJyAqICgyKioxMikKKyAgICAgICAgICAgICAgICAgICsgYic8L3Jvb3Q+JykKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5lbmNvZGUoInV0Zi04IiksIG1hcmt1cCkKKworCisgICAgZGVmIHRlc3RfdGFnc19hcmVfZW1wdHlfZWxlbWVudF9pZl9hbmRfb25seV9pZl90aGV5X2FyZV9lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD4iLCAiPHAvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+Zm9vPC9wPiIpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VzX2FyZV9wcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8cm9vdCB4bWxuczphPSJodHRwOi8vZXhhbXBsZS5jb20vIiB4bWxuczpiPSJodHRwOi8vZXhhbXBsZS5uZXQvIj48YTpmb28+VGhpcyB0YWcgaXMgaW4gdGhlIGEgbmFtZXNwYWNlPC9hOmZvbz48Yjpmb28+VGhpcyB0YWcgaXMgaW4gdGhlIGIgbmFtZXNwYWNlPC9iOmZvbz48L3Jvb3Q+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgcm9vdCA9IHNvdXAucm9vdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwOi8vZXhhbXBsZS5jb20vIiwgcm9vdFsneG1sbnM6YSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwOi8vZXhhbXBsZS5uZXQvIiwgcm9vdFsneG1sbnM6YiddKQorCisgICAgZGVmIHRlc3RfY2xvc2luZ19uYW1lc3BhY2VkX3RhZyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxwIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+PGRjOmRhdGU+MjAwMTA1MDQ8L2RjOmRhdGU+PC9wPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShzb3VwLnApLCBtYXJrdXApCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8Zm9vIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPjxiYXIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIi8+PC9mb28+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHNvdXAuZm9vKSwgbWFya3VwKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlZF9hdHRyaWJ1dGVzX3htbF9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8Zm9vIHhtbDpsYW5nPSJmciI+YmFyPC9mb28+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHNvdXAuZm9vKSwgbWFya3VwKQorCitjbGFzcyBIVE1MNVRyZWVCdWlsZGVyU21va2VUZXN0KEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdCk6CisgICAgIiIiU21va2UgdGVzdCBmb3IgYSB0cmVlIGJ1aWxkZXIgdGhhdCBzdXBwb3J0cyBIVE1MNS4iIiIKKworICAgIGRlZiB0ZXN0X3JlYWxfeGh0bWxfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICMgU2luY2UgWEhUTUwgaXMgbm90IEhUTUw1LCBIVE1MNSBwYXJzZXJzIGFyZSBub3QgdGVzdGVkIHRvIGhhbmRsZQorICAgICAgICAjIFhIVE1MIGRvY3VtZW50cyBpbiBhbnkgcGFydGljdWxhciB3YXkuCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2h0bWxfdGFnc19oYXZlX25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gIjxhPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCBzb3VwLmEubmFtZXNwYWNlKQorCisgICAgZGVmIHRlc3Rfc3ZnX3RhZ3NfaGF2ZV9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8c3ZnPjxjaXJjbGUvPjwvc3ZnPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIG5hbWVzcGFjZSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2UsIHNvdXAuc3ZnLm5hbWVzcGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2UsIHNvdXAuY2lyY2xlLm5hbWVzcGFjZSkKKworCisgICAgZGVmIHRlc3RfbWF0aG1sX3RhZ3NfaGF2ZV9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8bWF0aD48bXNxcnQ+NTwvbXNxcnQ+PC9tYXRoPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIG5hbWVzcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzcGFjZSwgc291cC5tYXRoLm5hbWVzcGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2UsIHNvdXAubXNxcnQubmFtZXNwYWNlKQorCisgICAgZGVmIHRlc3RfeG1sX2RlY2xhcmF0aW9uX2JlY29tZXNfY29tbWVudChzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PGh0bWw+PC9odG1sPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNvdXAuY29udGVudHNbMF0sIENvbW1lbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuY29udGVudHNbMF0sICc/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodG1sIiwgc291cC5jb250ZW50c1swXS5uZXh0X2VsZW1lbnQubmFtZSkKKworZGVmIHNraXBJZihjb25kaXRpb24sIHJlYXNvbik6CisgICBkZWYgbm90aGluZyh0ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgIHJldHVybiBOb25lCisKKyAgIGRlZiBkZWNvcmF0b3IodGVzdF9pdGVtKToKKyAgICAgICBpZiBjb25kaXRpb246CisgICAgICAgICAgIHJldHVybiBub3RoaW5nCisgICAgICAgZWxzZToKKyAgICAgICAgICAgcmV0dXJuIHRlc3RfaXRlbQorCisgICByZXR1cm4gZGVjb3JhdG9yCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MmM4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisiVGhlIGJlYXV0aWZ1bHNvdXAgdGVzdHMuIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9idWlsZGVyX3JlZ2lzdHJ5LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9idWlsZGVyX3JlZ2lzdHJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWQxMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2J1aWxkZXJfcmVnaXN0cnkucHkKQEAgLTAsMCArMSwxNDEgQEAKKyIiIlRlc3RzIG9mIHRoZSBidWlsZGVyIHJlZ2lzdHJ5LiIiIgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBidWlsZGVyX3JlZ2lzdHJ5IGFzIHJlZ2lzdHJ5LAorICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlciwKKyAgICBUcmVlQnVpbGRlclJlZ2lzdHJ5LAorKQorCit0cnk6CisgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgSFRNTDVUcmVlQnVpbGRlcgorICAgIEhUTUw1TElCX1BSRVNFTlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgSFRNTDVMSUJfUFJFU0VOVCA9IEZhbHNlCisKK3RyeToKKyAgICBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgICAgIExYTUxUcmVlQnVpbGRlckZvclhNTCwKKyAgICAgICAgTFhNTFRyZWVCdWlsZGVyLAorICAgICAgICApCisgICAgTFhNTF9QUkVTRU5UID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIExYTUxfUFJFU0VOVCA9IEZhbHNlCisKKworY2xhc3MgQnVpbHRJblJlZ2lzdHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgYnVpbHQtaW4gcmVnaXN0cnkgd2l0aCB0aGUgZGVmYXVsdCBidWlsZGVycyByZWdpc3RlcmVkLiIiIgorCisgICAgZGVmIHRlc3RfY29tYmluYXRpb24oc2VsZik6CisgICAgICAgIGlmIExYTUxfUFJFU0VOVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdmYXN0JywgJ2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFhNTFRyZWVCdWlsZGVyKQorCisgICAgICAgIGlmIExYTUxfUFJFU0VOVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdwZXJtaXNzaXZlJywgJ3htbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdzdHJpY3QnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIpCisgICAgICAgIGlmIEhUTUw1TElCX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbDVsaWInLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTDVUcmVlQnVpbGRlcikKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9ieV9tYXJrdXBfdHlwZShzZWxmKToKKyAgICAgICAgaWYgTFhNTF9QUkVTRU5UOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWwnKSwgTFhNTFRyZWVCdWlsZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ3htbCcpLCBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgneG1sJyksIE5vbmUpCisgICAgICAgICAgICBpZiBIVE1MNUxJQl9QUkVTRU5UOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdodG1sJyksIEhUTUw1VHJlZUJ1aWxkZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdodG1sJyksIEhUTUxQYXJzZXJUcmVlQnVpbGRlcikKKworICAgIGRlZiB0ZXN0X25hbWVkX2xpYnJhcnkoc2VsZik6CisgICAgICAgIGlmIExYTUxfUFJFU0VOVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdseG1sJywgJ3htbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnbHhtbCcsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExYTUxUcmVlQnVpbGRlcikKKyAgICAgICAgaWYgSFRNTDVMSUJfUFJFU0VOVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdodG1sNWxpYicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTDVUcmVlQnVpbGRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbC5wYXJzZXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyKQorCisgICAgZGVmIHRlc3RfYmVhdXRpZnVsc291cF9jb25zdHJ1Y3Rvcl9kb2VzX2xvb2t1cChzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgaW4gYSBzdHJpbmcuCisgICAgICAgIEJlYXV0aWZ1bFNvdXAoIiIsIGZlYXR1cmVzPSJodG1sIikKKyAgICAgICAgIyBPciBhIGxpc3Qgb2Ygc3RyaW5ncy4KKyAgICAgICAgQmVhdXRpZnVsU291cCgiIiwgZmVhdHVyZXM9WyJodG1sIiwgImZhc3QiXSkKKworICAgICAgICAjIFlvdSdsbCBnZXQgYW4gZXhjZXB0aW9uIGlmIEJTIGNhbid0IGZpbmQgYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgIyBidWlsZGVyLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBCZWF1dGlmdWxTb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgZmVhdHVyZXM9Im5vLXN1Y2gtZmVhdHVyZSIpCisKK2NsYXNzIFJlZ2lzdHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgVHJlZUJ1aWxkZXJSZWdpc3RyeSBjbGFzcyBpbiBnZW5lcmFsLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnJlZ2lzdHJ5ID0gVHJlZUJ1aWxkZXJSZWdpc3RyeSgpCisKKyAgICBkZWYgYnVpbGRlcl9mb3JfZmVhdHVyZXMoc2VsZiwgKmZlYXR1cmVfbGlzdCk6CisgICAgICAgIGNscyA9IHR5cGUoJ0J1aWxkZXJfJyArICdfJy5qb2luKGZlYXR1cmVfbGlzdCksCisgICAgICAgICAgICAgICAgICAgKG9iamVjdCwpLCB7J2ZlYXR1cmVzJyA6IGZlYXR1cmVfbGlzdH0pCisKKyAgICAgICAgc2VsZi5yZWdpc3RyeS5yZWdpc3RlcihjbHMpCisgICAgICAgIHJldHVybiBjbHMKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX3dpdGhfbm9fZmVhdHVyZXMoc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCkKKworICAgICAgICAjIFNpbmNlIHRoZSBidWlsZGVyIGFkdmVydGlzZXMgbm8gZmVhdHVyZXMsIHlvdSBjYW4ndCBmaW5kIGl0CisgICAgICAgICMgYnkgbG9va2luZyB1cCBmZWF0dXJlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnZm9vJyksIE5vbmUpCisKKyAgICAgICAgIyBCdXQgeW91IGNhbiBmaW5kIGl0IGJ5IGRvaW5nIGEgbG9va3VwIHdpdGggbm8gZmVhdHVyZXMsIGlmCisgICAgICAgICMgdGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBvbmx5IHJlZ2lzdGVyZWQgYnVpbGRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgpLCBidWlsZGVyKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfd2l0aF9mZWF0dXJlc19tYWtlc19sb29rdXBfc3VjY2VlZChzZWxmKToKKyAgICAgICAgYnVpbGRlciA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycsICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdmb28nKSwgYnVpbGRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnYmFyJyksIGJ1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZmFpbHNfd2hlbl9ub19idWlsZGVyX2ltcGxlbWVudHNfZmVhdHVyZShzZWxmKToKKyAgICAgICAgYnVpbGRlciA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycsICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdiYXonKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9nZXRzX21vc3RfcmVjZW50X3JlZ2lzdHJhdGlvbl93aGVuX25vX2ZlYXR1cmVfc3BlY2lmaWVkKHNlbGYpOgorICAgICAgICBidWlsZGVyMSA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycpCisgICAgICAgIGJ1aWxkZXIyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgpLCBidWlsZGVyMikKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9mYWlsc193aGVuX25vX3RyZWVfYnVpbGRlcnNfcmVnaXN0ZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfbG9va3VwX2dldHNfbW9zdF9yZWNlbnRfYnVpbGRlcl9zdXBwb3J0aW5nX2FsbF9mZWF0dXJlcyhzZWxmKToKKyAgICAgICAgaGFzX29uZSA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycpCisgICAgICAgIGhhc190aGVfb3RoZXIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdiYXInKQorICAgICAgICBoYXNfYm90aF9lYXJseSA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycsICdiYXInLCAnYmF6JykKKyAgICAgICAgaGFzX2JvdGhfbGF0ZSA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycsICdiYXInLCAncXV1eCcpCisgICAgICAgIGxhY2tzX29uZSA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2JhcicpCisgICAgICAgIGhhc190aGVfb3RoZXIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nKQorCisgICAgICAgICMgVGhlcmUgYXJlIHR3byBidWlsZGVycyBmZWF0dXJpbmcgJ2ZvbycgYW5kICdiYXInLCBidXQKKyAgICAgICAgIyB0aGUgb25lIHRoYXQgYWxzbyBmZWF0dXJlcyAncXV1eCcgd2FzIHJlZ2lzdGVyZWQgbGF0ZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2ZvbycsICdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2JvdGhfbGF0ZSkKKworICAgICAgICAjIFRoZXJlIGlzIG9ubHkgb25lIGJ1aWxkZXIgZmVhdHVyaW5nICdmb28nLCAnYmFyJywgYW5kICdiYXonLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdmb28nLCAnYmFyJywgJ2JheicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfYm90aF9lYXJseSkKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9mYWlsc193aGVuX2Nhbm5vdF9yZWNvbmNpbGVfcmVxdWVzdGVkX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICBidWlsZGVyMSA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycsICdiYXInKQorICAgICAgICBidWlsZGVyMiA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2ZvbycsICdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdiYXInLCAnYmF6JyksIE5vbmUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2RvY3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2RvY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI5ZjY3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfZG9jcy5weQpAQCAtMCwwICsxLDM2IEBACisiVGVzdCBoYXJuZXNzIGZvciBkb2N0ZXN0cy4iCisKKyMgcHlsaW50OiBkaXNhYmxlLW1zZz1FMDYxMSxXMDE0MgorCitfX21ldGFjbGFzc19fID0gdHlwZQorX19hbGxfXyA9IFsKKyAgICAnYWRkaXRpb25hbF90ZXN0cycsCisgICAgXQorCitpbXBvcnQgYXRleGl0CitpbXBvcnQgZG9jdGVzdAoraW1wb3J0IG9zCisjZnJvbSBwa2dfcmVzb3VyY2VzIGltcG9ydCAoCisjICAgIHJlc291cmNlX2ZpbGVuYW1lLCByZXNvdXJjZV9leGlzdHMsIHJlc291cmNlX2xpc3RkaXIsIGNsZWFudXBfcmVzb3VyY2VzKQoraW1wb3J0IHVuaXR0ZXN0CisKK0RPQ1RFU1RfRkxBR1MgPSAoCisgICAgZG9jdGVzdC5FTExJUFNJUyB8CisgICAgZG9jdGVzdC5OT1JNQUxJWkVfV0hJVEVTUEFDRSB8CisgICAgZG9jdGVzdC5SRVBPUlRfTkRJRkYpCisKKworIyBkZWYgYWRkaXRpb25hbF90ZXN0cygpOgorIyAgICAgIlJ1biB0aGUgZG9jIHRlc3RzIChSRUFETUUudHh0IGFuZCBkb2NzLyosIGlmIGFueSBleGlzdCkiCisjICAgICBkb2N0ZXN0X2ZpbGVzID0gWworIyAgICAgICAgIG9zLnBhdGguYWJzcGF0aChyZXNvdXJjZV9maWxlbmFtZSgnYnM0JywgJ1JFQURNRS50eHQnKSldCisjICAgICBpZiByZXNvdXJjZV9leGlzdHMoJ2JzNCcsICdkb2NzJyk6CisjICAgICAgICAgZm9yIG5hbWUgaW4gcmVzb3VyY2VfbGlzdGRpcignYnM0JywgJ2RvY3MnKToKKyMgICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnR4dCcpOgorIyAgICAgICAgICAgICAgICAgZG9jdGVzdF9maWxlcy5hcHBlbmQoCisjICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5hYnNwYXRoKAorIyAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9maWxlbmFtZSgnYnM0JywgJ2RvY3MvJXMnICUgbmFtZSkpKQorIyAgICAga3dhcmdzID0gZGljdChtb2R1bGVfcmVsYXRpdmU9RmFsc2UsIG9wdGlvbmZsYWdzPURPQ1RFU1RfRkxBR1MpCisjICAgICBhdGV4aXQucmVnaXN0ZXIoY2xlYW51cF9yZXNvdXJjZXMpCisjICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKCgKKyMgICAgICAgICBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgqZG9jdGVzdF9maWxlcywgKiprd2FyZ3MpKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfaHRtbDVsaWIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWw1bGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NGMzZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWw1bGliLnB5CkBAIC0wLDAgKzEsODUgQEAKKyIiIlRlc3RzIHRvIGVuc3VyZSB0aGF0IHRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgZ2VuZXJhdGVzIGdvb2QgdHJlZXMuIiIiCisKK2ltcG9ydCB3YXJuaW5ncworCit0cnk6CisgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgSFRNTDVUcmVlQnVpbGRlcgorICAgIEhUTUw1TElCX1BSRVNFTlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgSFRNTDVMSUJfUFJFU0VOVCA9IEZhbHNlCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCBTb3VwU3RyYWluZXIKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0ICgKKyAgICBIVE1MNVRyZWVCdWlsZGVyU21va2VUZXN0LAorICAgIFNvdXBUZXN0LAorICAgIHNraXBJZiwKKykKKworQHNraXBJZigKKyAgICBub3QgSFRNTDVMSUJfUFJFU0VOVCwKKyAgICAiaHRtbDVsaWIgc2VlbXMgbm90IHRvIGJlIHByZXNlbnQsIG5vdCB0ZXN0aW5nIGl0cyB0cmVlIGJ1aWxkZXIuIikKK2NsYXNzIEhUTUw1TGliQnVpbGRlclNtb2tlVGVzdChTb3VwVGVzdCwgSFRNTDVUcmVlQnVpbGRlclNtb2tlVGVzdCk6CisgICAgIiIiU2VlIGBgSFRNTDVUcmVlQnVpbGRlclNtb2tlVGVzdGBgLiIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRfYnVpbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEhUTUw1VHJlZUJ1aWxkZXIoKQorCisgICAgZGVmIHRlc3Rfc291cHN0cmFpbmVyKHNlbGYpOgorICAgICAgICAjIFRoZSBodG1sNWxpYiB0cmVlIGJ1aWxkZXIgZG9lcyBub3Qgc3VwcG9ydCBTb3VwU3RyYWluZXJzLgorICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcigiYiIpCisgICAgICAgIG1hcmt1cCA9ICI8cD5BIDxiPmJvbGQ8L2I+IHN0YXRlbWVudC48L3A+IgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXAsIHBhcnNlX29ubHk9c3RyYWluZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcihtYXJrdXApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICJ0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBwYXJzZV9vbmx5IiBpbgorICAgICAgICAgICAgc3RyKHdbMF0ubWVzc2FnZSkpCisKKyAgICBkZWYgdGVzdF9jb3JyZWN0bHlfbmVzdGVkX3RhYmxlcyhzZWxmKToKKyAgICAgICAgIiIiaHRtbDVsaWIgaW5zZXJ0cyA8dGJvZHk+IHRhZ3Mgd2hlcmUgb3RoZXIgcGFyc2VycyBkb24ndC4iIiIKKyAgICAgICAgbWFya3VwID0gKCc8dGFibGUgaWQ9IjEiPicKKyAgICAgICAgICAgICAgICAgICc8dHI+JworICAgICAgICAgICAgICAgICAgIjx0ZD5IZXJlJ3MgYW5vdGhlciB0YWJsZToiCisgICAgICAgICAgICAgICAgICAnPHRhYmxlIGlkPSIyIj4nCisgICAgICAgICAgICAgICAgICAnPHRyPjx0ZD5mb288L3RkPjwvdHI+JworICAgICAgICAgICAgICAgICAgJzwvdGFibGU+PC90ZD4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgIG1hcmt1cCwKKyAgICAgICAgICAgICc8dGFibGUgaWQ9IjEiPjx0Ym9keT48dHI+PHRkPkhlcmVcJ3MgYW5vdGhlciB0YWJsZTonCisgICAgICAgICAgICAnPHRhYmxlIGlkPSIyIj48dGJvZHk+PHRyPjx0ZD5mb288L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPicKKyAgICAgICAgICAgICc8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgIjx0YWJsZT48dGhlYWQ+PHRyPjx0ZD5Gb288L3RkPjwvdHI+PC90aGVhZD4iCisgICAgICAgICAgICAiPHRib2R5Pjx0cj48dGQ+QmFyPC90ZD48L3RyPjwvdGJvZHk+IgorICAgICAgICAgICAgIjx0Zm9vdD48dHI+PHRkPkJhejwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+IikKKworICAgIGRlZiB0ZXN0X3htbF9kZWNsYXJhdGlvbl9mb2xsb3dlZF9ieV9kb2N0eXBlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnJyc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICA8cD5mb288L3A+CisgIDwvYm9keT4KKzwvaHRtbD4nJycKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgY2FuIHJlYWNoIHRoZSA8cD4gdGFnOyB0aGlzIG1lYW5zIHRoZSB0cmVlIGlzIGNvbm5lY3RlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxwPmZvbzwvcD4iLCBzb3VwLnAuZW5jb2RlKCkpCisKKyAgICBkZWYgdGVzdF9yZXBhcmVudGVkX21hcmt1cChzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxwPjxlbT5mb288L3A+XG48cD5iYXI8YT48L2E+PC9lbT48L3A+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ijxib2R5PjxwPjxlbT5mb288L2VtPjwvcD48ZW0+XG48L2VtPjxwPjxlbT5iYXI8YT48L2E+PC9lbT48L3A+PC9ib2R5PiIsIHNvdXAuYm9keS5kZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgncCcpKSkKKworCisgICAgZGVmIHRlc3RfcmVwYXJlbnRlZF9tYXJrdXBfZW5kc193aXRoX3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8cD48ZW0+Zm9vPC9wPlxuPHA+YmFyPGE+PC9hPjwvZW0+PC9wPlxuJworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ijxib2R5PjxwPjxlbT5mb288L2VtPjwvcD48ZW0+XG48L2VtPjxwPjxlbT5iYXI8YT48L2E+PC9lbT48L3A+XG48L2JvZHk+Iiwgc291cC5ib2R5LmRlY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzb3VwLmZpbmRfYWxsKCdwJykpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1scGFyc2VyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1scGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjVlZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWxwYXJzZXIucHkKQEAgLTAsMCArMSwxOSBAQAorIiIiVGVzdHMgdG8gZW5zdXJlIHRoYXQgdGhlIGh0bWwucGFyc2VyIHRyZWUgYnVpbGRlciBnZW5lcmF0ZXMgZ29vZAordHJlZXMuIiIiCisKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0IFNvdXBUZXN0LCBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IEhUTUxQYXJzZXJUcmVlQnVpbGRlcgorCitjbGFzcyBIVE1MUGFyc2VyVHJlZUJ1aWxkZXJTbW9rZVRlc3QoU291cFRlc3QsIEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdCk6CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVmYXVsdF9idWlsZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gSFRNTFBhcnNlclRyZWVCdWlsZGVyKCkKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfc3lzdGVtX2RvY3R5cGUoc2VsZik6CisgICAgICAgICMgaHRtbC5wYXJzZXIgY2FuJ3QgaGFuZGxlIG5hbWVzcGFjZWQgZG9jdHlwZXMsIHNvIHNraXAgdGhpcyBvbmUuCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfcHVibGljX2RvY3R5cGUoc2VsZik6CisgICAgICAgICMgaHRtbC5wYXJzZXIgY2FuJ3QgaGFuZGxlIG5hbWVzcGFjZWQgZG9jdHlwZXMsIHNvIHNraXAgdGhpcyBvbmUuCisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjJlOWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9seG1sLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyIiIlRlc3RzIHRvIGVuc3VyZSB0aGF0IHRoZSBseG1sIHRyZWUgYnVpbGRlciBnZW5lcmF0ZXMgZ29vZCB0cmVlcy4iIiIKKworaW1wb3J0IHJlCitpbXBvcnQgd2FybmluZ3MKKwordHJ5OgorICAgIGltcG9ydCBseG1sLmV0cmVlCisgICAgTFhNTF9QUkVTRU5UID0gVHJ1ZQorICAgIExYTUxfVkVSU0lPTiA9IGx4bWwuZXRyZWUuTFhNTF9WRVJTSU9OCitleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgTFhNTF9QUkVTRU5UID0gRmFsc2UKKyAgICBMWE1MX1ZFUlNJT04gPSAoMCwpCisKK2lmIExYTUxfUFJFU0VOVDoKKyAgICBmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBMWE1MVHJlZUJ1aWxkZXIsIExYTUxUcmVlQnVpbGRlckZvclhNTAorCitmcm9tIGJzNCBpbXBvcnQgKAorICAgIEJlYXV0aWZ1bFNvdXAsCisgICAgQmVhdXRpZnVsU3RvbmVTb3VwLAorICAgICkKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0IENvbW1lbnQsIERvY3R5cGUsIFNvdXBTdHJhaW5lcgorZnJvbSBiczQudGVzdGluZyBpbXBvcnQgc2tpcElmCitmcm9tIGJzNC50ZXN0cyBpbXBvcnQgdGVzdF9odG1scGFyc2VyCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCAoCisgICAgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0LAorICAgIFhNTFRyZWVCdWlsZGVyU21va2VUZXN0LAorICAgIFNvdXBUZXN0LAorICAgIHNraXBJZiwKKykKKworQHNraXBJZigKKyAgICBub3QgTFhNTF9QUkVTRU5ULAorICAgICJseG1sIHNlZW1zIG5vdCB0byBiZSBwcmVzZW50LCBub3QgdGVzdGluZyBpdHMgdHJlZSBidWlsZGVyLiIpCitjbGFzcyBMWE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QoU291cFRlc3QsIEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdCk6CisgICAgIiIiU2VlIGBgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0YGAuIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVmYXVsdF9idWlsZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gTFhNTFRyZWVCdWlsZGVyKCkKKworICAgIGRlZiB0ZXN0X291dF9vZl9yYW5nZV9lbnRpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgICI8cD5mb28mIzEwMDAwMDAwMDAwMDAwO2JhcjwvcD4iLCAiPHA+Zm9vYmFyPC9wPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgICI8cD5mb28mI3gxMDAwMDAwMDAwMDAwMDtiYXI8L3A+IiwgIjxwPmZvb2JhcjwvcD4iKQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHA+Zm9vJiMxMDAwMDAwMDAwO2JhcjwvcD4iLCAiPHA+Zm9vYmFyPC9wPiIpCisKKyAgICAjIEluIGx4bWwgPCAyLjMuNSwgYW4gZW1wdHkgZG9jdHlwZSBjYXVzZXMgYSBzZWdmYXVsdC4gU2tpcCB0aGlzCisgICAgIyB0ZXN0IGlmIGFuIG9sZCB2ZXJzaW9uIG9mIGx4bWwgaXMgaW5zdGFsbGVkLgorCisgICAgQHNraXBJZigKKyAgICAgICAgbm90IExYTUxfUFJFU0VOVCBvciBMWE1MX1ZFUlNJT04gPCAoMiwzLDUsMCksCisgICAgICAgICJTa2lwcGluZyBkb2N0eXBlIHRlc3QgZm9yIG9sZCB2ZXJzaW9uIG9mIGx4bWwgdG8gYXZvaWQgc2VnZmF1bHQuIikKKyAgICBkZWYgdGVzdF9lbXB0eV9kb2N0eXBlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8IURPQ1RZUEU+IikKKyAgICAgICAgZG9jdHlwZSA9IHNvdXAuY29udGVudHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiwgZG9jdHlwZS5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfYmVhdXRpZnVsc3RvbmVzb3VwX2lzX3htbF9wYXJzZXIoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIGRlcHJlY2F0ZWQgQlNTIGNsYXNzIHVzZXMgYW4geG1sIGJ1aWxkZXIKKyAgICAgICAgIyBpZiBvbmUgaXMgaW5zdGFsbGVkLgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFN0b25lU291cCgiPGIgLz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiPGIvPiIsIHVuaWNvZGUoc291cC5iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJCZWF1dGlmdWxTdG9uZVNvdXAgY2xhc3MgaXMgZGVwcmVjYXRlZCIgaW4gc3RyKHdbMF0ubWVzc2FnZSkpCisKKyAgICBkZWYgdGVzdF9yZWFsX3hodG1sX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAiIiJseG1sIHN0cmlwcyB0aGUgWE1MIGRlZmluaXRpb24gZnJvbSBhbiBYSFRNTCBkb2MsIHdoaWNoIGlzIGZpbmUuIiIiCisgICAgICAgIG1hcmt1cCA9IGIiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD48dGl0bGU+SGVsbG8uPC90aXRsZT48L2hlYWQ+Cis8Ym9keT5Hb29kYnllLjwvYm9keT4KKzwvaHRtbD4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgidXRmLTgiKS5yZXBsYWNlKGIiXG4iLCBiJycpLAorICAgICAgICAgICAgbWFya3VwLnJlcGxhY2UoYidcbicsIGInJykucmVwbGFjZSgKKyAgICAgICAgICAgICAgICBiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+JywgYicnKSkKKworCitAc2tpcElmKAorICAgIG5vdCBMWE1MX1BSRVNFTlQsCisgICAgImx4bWwgc2VlbXMgbm90IHRvIGJlIHByZXNlbnQsIG5vdCB0ZXN0aW5nIGl0cyBYTUwgdHJlZSBidWlsZGVyLiIpCitjbGFzcyBMWE1MWE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QoU291cFRlc3QsIFhNTFRyZWVCdWlsZGVyU21va2VUZXN0KToKKyAgICAiIiJTZWUgYGBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3RgYC4iIiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWZhdWx0X2J1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YWMyNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3NvdXAucHkKQEAgLTAsMCArMSw0MzQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisiIiJUZXN0cyBvZiBCZWF1dGlmdWwgU291cCBhcyBhIHdob2xlLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSBiczQgaW1wb3J0ICgKKyAgICBCZWF1dGlmdWxTb3VwLAorICAgIEJlYXV0aWZ1bFN0b25lU291cCwKKykKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUsCisgICAgU291cFN0cmFpbmVyLAorICAgIE5hbWVzcGFjZWRBdHRyaWJ1dGUsCisgICAgKQoraW1wb3J0IGJzNC5kYW1taXQKK2Zyb20gYnM0LmRhbW1pdCBpbXBvcnQgKAorICAgIEVudGl0eVN1YnN0aXR1dGlvbiwKKyAgICBVbmljb2RlRGFtbWl0LAorKQorZnJvbSBiczQudGVzdGluZyBpbXBvcnQgKAorICAgIFNvdXBUZXN0LAorICAgIHNraXBJZiwKKykKK2ltcG9ydCB3YXJuaW5ncworCit0cnk6CisgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgTFhNTFRyZWVCdWlsZGVyLCBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwKKyAgICBMWE1MX1BSRVNFTlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgTFhNTF9QUkVTRU5UID0gRmFsc2UKKworUFlUSE9OXzJfUFJFXzJfNyA9IChzeXMudmVyc2lvbl9pbmZvIDwgKDIsNykpCitQWVRIT05fM19QUkVfM18yID0gKHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMyBhbmQgc3lzLnZlcnNpb25faW5mbyA8ICgzLDIpKQorCitjbGFzcyBUZXN0Q29uc3RydWN0b3IoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3Rfc2hvcnRfdW5pY29kZV9pbnB1dChzZWxmKToKKyAgICAgICAgZGF0YSA9IHUiPGgxPsOpw6k8L2gxPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiw6nDqSIsIHNvdXAuaDEuc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZW1iZWRkZWRfbnVsbChzZWxmKToKKyAgICAgICAgZGF0YSA9IHUiPGgxPmZvb1wwYmFyPC9oMT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ImZvb1wwYmFyIiwgc291cC5oMS5zdHJpbmcpCisKKworY2xhc3MgVGVzdERlcHJlY2F0ZWRDb25zdHJ1Y3RvckFyZ3VtZW50cyhTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9wYXJzZU9ubHlUaGVzZV9yZW5hbWVkX3RvX3BhcnNlX29ubHkoc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj48L2I+PC9hPiIsIHBhcnNlT25seVRoZXNlPVNvdXBTdHJhaW5lcigiYiIpKQorICAgICAgICBtc2cgPSBzdHIod1swXS5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInBhcnNlT25seVRoZXNlIiBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicGFyc2Vfb25seSIgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPGI+PC9iPiIsIHNvdXAuZW5jb2RlKCkpCisKKyAgICBkZWYgdGVzdF9mcm9tRW5jb2RpbmdfcmVuYW1lZF90b19mcm9tX2VuY29kaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgdXRmOCA9IGIiXHhjM1x4YTkiCisgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHV0ZjgsIGZyb21FbmNvZGluZz0idXRmOCIpCisgICAgICAgIG1zZyA9IHN0cih3WzBdLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZnJvbUVuY29kaW5nIiBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZnJvbV9lbmNvZGluZyIgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ1dGY4Iiwgc291cC5vcmlnaW5hbF9lbmNvZGluZykKKworICAgIGRlZiB0ZXN0X3VucmVjb2duaXplZF9rZXl3b3JkX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5zb3VwLCAiPGE+Iiwgbm9fc3VjaF9hcmd1bWVudD1UcnVlKQorCitjbGFzcyBUZXN0V2FybmluZ3MoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfZGlza19maWxlX3dhcm5pbmcoc2VsZik6CisgICAgICAgIGZpbGVoYW5kbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVoYW5kbGUubmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZmlsZW5hbWUpCisgICAgICAgICAgICBtc2cgPSBzdHIod1swXS5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJsb29rcyBsaWtlIGEgZmlsZW5hbWUiIGluIG1zZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVoYW5kbGUuY2xvc2UoKQorCisgICAgICAgICMgVGhlIGZpbGUgbm8gbG9uZ2VyIGV4aXN0cywgc28gQmVhdXRpZnVsIFNvdXAgd2lsbCBubyBsb25nZXIgaXNzdWUgdGhlIHdhcm5pbmcuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbih3KSkKKworICAgIGRlZiB0ZXN0X3VybF93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCgiaHR0cDovL3d3dy5jcnVtbXkuY29tLyIpCisgICAgICAgIG1zZyA9IHN0cih3WzBdLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibG9va3MgbGlrZSBhIFVSTCIgaW4gbXNnKQorCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJodHRwOi8vd3d3LmNydW1teS5jb20vIGlzIGdyZWF0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4odykpCisKK2NsYXNzIFRlc3RTZWxlY3RpdmVQYXJzaW5nKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X3BhcnNlX3dpdGhfc291cHN0cmFpbmVyKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAiTm88Yj5ZZXM8L2I+PGE+Tm88Yj5ZZXMgPGM+WWVzPC9jPjwvYj4iCisgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKCJiIikKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXAsIHBhcnNlX29ubHk9c3RyYWluZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5lbmNvZGUoKSwgYiI8Yj5ZZXM8L2I+PGI+WWVzIDxjPlllczwvYz48L2I+IikKKworCitjbGFzcyBUZXN0RW50aXR5U3Vic3RpdHV0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJTdGFuZGFsb25lIHRlc3RzIG9mIHRoZSBFbnRpdHlTdWJzdGl0dXRpb24gY2xhc3MuIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnN1YiA9IEVudGl0eVN1YnN0aXR1dGlvbgorCisgICAgZGVmIHRlc3Rfc2ltcGxlX2h0bWxfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICAjIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZXNwb25kaW5nIHRvIG5hbWVkIEhUTUwgZW50aXRlcworICAgICAgICAjIGFyZSBzdWJzdGl0dXRlZCwgYW5kIG5vIG90aGVycy4KKyAgICAgICAgcyA9IHUiZm9vXHUyMjAwXE57U05PV01BTn1cdTAwZjViYXIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV9odG1sKHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1ImZvbyZmb3JhbGw7XE57U05PV01BTn0mb3RpbGRlO2JhciIpCisKKyAgICBkZWYgdGVzdF9zbWFydF9xdW90ZV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgICMgTVMgc21hcnQgcXVvdGVzIGFyZSBhIGNvbW1vbiBzb3VyY2Ugb2YgZnJ1c3RyYXRpb24sIHNvIHdlCisgICAgICAgICMgZ2l2ZSB0aGVtIGEgc3BlY2lhbCB0ZXN0LgorICAgICAgICBxdW90ZXMgPSBiIlx4OTFceDkyZm9vXHg5M1x4OTQiCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQocXVvdGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfaHRtbChkYW1taXQubWFya3VwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiZsc3F1bzsmcnNxdW87Zm9vJmxkcXVvOyZyZHF1bzsiKQorCisgICAgZGVmIHRlc3RfeG1sX2NvbnZlcnN0aW9uX2luY2x1ZGVzX25vX3F1b3Rlc19pZl9tYWtlX3F1b3RlZF9hdHRyaWJ1dGVfaXNfZmFsc2Uoc2VsZik6CisgICAgICAgIHMgPSAnV2VsY29tZSB0byAibXkgYmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbChzLCBGYWxzZSksIHMpCisKKyAgICBkZWYgdGVzdF94bWxfYXR0cmlidXRlX3F1b3Rpbmdfbm9ybWFsbHlfdXNlc19kb3VibGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKCJXZWxjb21lIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICciV2VsY29tZSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKCJCb2IncyBCYXIiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJyJCb2JcJ3MgQmFyIicpCisKKyAgICBkZWYgdGVzdF94bWxfYXR0cmlidXRlX3F1b3RpbmdfdXNlc19zaW5nbGVfcXVvdGVzX3doZW5fdmFsdWVfY29udGFpbnNfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgcyA9ICdXZWxjb21lIHRvICJteSBiYXIiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKHMsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJ1dlbGNvbWUgdG8gXCJteSBiYXJcIiciKQorCisgICAgZGVmIHRlc3RfeG1sX2F0dHJpYnV0ZV9xdW90aW5nX2VzY2FwZXNfc2luZ2xlX3F1b3Rlc193aGVuX3ZhbHVlX2NvbnRhaW5zX2JvdGhfc2luZ2xlX2FuZF9kb3VibGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzID0gJ1dlbGNvbWUgdG8gIkJvYlwncyBCYXIiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwocywgVHJ1ZSksCisgICAgICAgICAgICAnIldlbGNvbWUgdG8gJnF1b3Q7Qm9iXCdzIEJhciZxdW90OyInKQorCisgICAgZGVmIHRlc3RfeG1sX3F1b3Rlc19hcmVudF9lc2NhcGVkX3doZW5fdmFsdWVfaXNfbm90X2JlaW5nX3F1b3RlZChzZWxmKToKKyAgICAgICAgcXVvdGVkID0gJ1dlbGNvbWUgdG8gIkJvYlwncyBCYXIiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKHF1b3RlZCksIHF1b3RlZCkKKworICAgIGRlZiB0ZXN0X3htbF9xdW90aW5nX2hhbmRsZXNfYW5nbGVfYnJhY2tldHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbCgiZm9vPGJhcj4iKSwKKyAgICAgICAgICAgICJmb28mbHQ7YmFyJmd0OyIpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGluZ19oYW5kbGVzX2FtcGVyc2FuZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwoIkFUJlQiKSwgIkFUJmFtcDtUIikKKworICAgIGRlZiB0ZXN0X3htbF9xdW90aW5nX2luY2x1ZGluZ19hbXBlcnNhbmRzX3doZW5fdGhleV9hcmVfcGFydF9vZl9hbl9lbnRpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbCgiJkFhY3V0ZTtUJlQiKSwKKyAgICAgICAgICAgICImYW1wO0FhY3V0ZTtUJmFtcDtUIikKKworICAgIGRlZiB0ZXN0X3htbF9xdW90aW5nX2lnbm9yaW5nX2FtcGVyc2FuZHNfd2hlbl90aGV5X2FyZV9wYXJ0X29mX2FuX2VudGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sX2NvbnRhaW5pbmdfZW50aXRpZXMoIiZBYWN1dGU7VCZUIiksCisgICAgICAgICAgICAiJkFhY3V0ZTtUJmFtcDtUIikKKworICAgIGRlZiB0ZXN0X3F1b3Rlc19ub3RfaHRtbF9zdWJzdGl0dXRlZChzZWxmKToKKyAgICAgICAgIiIiVGhlcmUncyBubyBuZWVkIHRvIGRvIHRoaXMgZXhjZXB0IGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzLiIiIgorICAgICAgICB0ZXh0ID0gJ0JvYlwncyAiYmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX2h0bWwodGV4dCksIHRleHQpCisKKworY2xhc3MgVGVzdEVuY29kaW5nQ29udmVyc2lvbihTb3VwVGVzdCk6CisgICAgIyBUZXN0IEJlYXV0aWZ1bCBTb3VwJ3MgYWJpbGl0eSB0byBkZWNvZGUgYW5kIGVuY29kZSBmcm9tIHZhcmlvdXMKKyAgICAjIGVuY29kaW5ncy4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEVuY29kaW5nQ29udmVyc2lvbiwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnVuaWNvZGVfZGF0YSA9IHUnPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48L2hlYWQ+PGJvZHk+PGZvbz5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L2Zvbz48L2JvZHk+PC9odG1sPicKKyAgICAgICAgc2VsZi51dGY4X2RhdGEgPSBzZWxmLnVuaWNvZGVfZGF0YS5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgIyBKdXN0IHNvIHlvdSBrbm93IHdoYXQgaXQgbG9va3MgbGlrZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYudXRmOF9kYXRhLAorICAgICAgICAgICAgYic8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjwvaGVhZD48Ym9keT48Zm9vPlNhY3JceGMzXHhhOSBibGV1ITwvZm9vPjwvYm9keT48L2h0bWw+JykKKworICAgIGRlZiB0ZXN0X2FzY2lpX2luX3VuaWNvZGVfb3V0KHNlbGYpOgorICAgICAgICAjIEFTQ0lJIGlucHV0IGlzIGNvbnZlcnRlZCB0byBVbmljb2RlLiBUaGUgb3JpZ2luYWxfZW5jb2RpbmcKKyAgICAgICAgIyBhdHRyaWJ1dGUgaXMgc2V0IHRvICd1dGYtOCcsIGEgc3VwZXJzZXQgb2YgQVNDSUkuCisgICAgICAgIGNoYXJkZXQgPSBiczQuZGFtbWl0LmNoYXJkZXRfZGFtbWl0CisgICAgICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLldBUk5JTkcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiBub29wKHN0cik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgRGlzYWJsZSBjaGFyZGV0LCB3aGljaCB3aWxsIHJlYWxpemUgdGhhdCB0aGUgQVNDSUkgaXMgQVNDSUkuCisgICAgICAgICAgICBiczQuZGFtbWl0LmNoYXJkZXRfZGFtbWl0ID0gbm9vcAorICAgICAgICAgICAgYXNjaWkgPSBiIjxmb28+YTwvZm9vPiIKKyAgICAgICAgICAgIHNvdXBfZnJvbV9hc2NpaSA9IHNlbGYuc291cChhc2NpaSkKKyAgICAgICAgICAgIHVuaWNvZGVfb3V0cHV0ID0gc291cF9mcm9tX2FzY2lpLmRlY29kZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh1bmljb2RlX291dHB1dCwgdW5pY29kZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVfb3V0cHV0LCBzZWxmLmRvY3VtZW50X2Zvcihhc2NpaS5kZWNvZGUoKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV9hc2NpaS5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAidXRmLTgiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuTk9UU0VUKQorICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IGNoYXJkZXQKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfaW5fdW5pY29kZV9vdXQoc2VsZik6CisgICAgICAgICMgVW5pY29kZSBpbnB1dCBpcyBsZWZ0IGFsb25lLiBUaGUgb3JpZ2luYWxfZW5jb2RpbmcgYXR0cmlidXRlCisgICAgICAgICMgaXMgbm90IHNldC4KKyAgICAgICAgc291cF9mcm9tX3VuaWNvZGUgPSBzZWxmLnNvdXAoc2VsZi51bmljb2RlX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cF9mcm9tX3VuaWNvZGUuZGVjb2RlKCksIHNlbGYudW5pY29kZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLmZvby5zdHJpbmcsIHUnU2Fjclx4ZTkgYmxldSEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLm9yaWdpbmFsX2VuY29kaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfdXRmOF9pbl91bmljb2RlX291dChzZWxmKToKKyAgICAgICAgIyBVVEYtOCBpbnB1dCBpcyBjb252ZXJ0ZWQgdG8gVW5pY29kZS4gVGhlIG9yaWdpbmFsX2VuY29kaW5nCisgICAgICAgICMgYXR0cmlidXRlIGlzIHNldC4KKyAgICAgICAgc291cF9mcm9tX3V0ZjggPSBzZWxmLnNvdXAoc2VsZi51dGY4X2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cF9mcm9tX3V0ZjguZGVjb2RlKCksIHNlbGYudW5pY29kZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91dGY4LmZvby5zdHJpbmcsIHUnU2Fjclx4ZTkgYmxldSEnKQorCisgICAgZGVmIHRlc3RfdXRmOF9vdXQoc2VsZik6CisgICAgICAgICMgVGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBjYW4gYmUgZW5jb2RlZCBhcyBVVEYtOC4KKyAgICAgICAgc291cF9mcm9tX3VuaWNvZGUgPSBzZWxmLnNvdXAoc2VsZi51bmljb2RlX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cF9mcm9tX3VuaWNvZGUuZW5jb2RlKCd1dGYtOCcpLCBzZWxmLnV0ZjhfZGF0YSkKKworICAgIEBza2lwSWYoCisgICAgICAgIFBZVEhPTl8yX1BSRV8yXzcgb3IgUFlUSE9OXzNfUFJFXzNfMiwKKyAgICAgICAgIkJhZCBIVE1MUGFyc2VyIGRldGVjdGVkOyBza2lwcGluZyB0ZXN0IG9mIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGF0dHJpYnV0ZSBuYW1lLiIpCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX25hbWVfY29udGFpbmluZ191bmljb2RlX2NoYXJhY3RlcnMoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUnPGRpdj48YSBcTntTTk9XTUFOfT0ic25vd21hbiI+PC9hPjwvZGl2PicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvdXAobWFya3VwKS5kaXYuZW5jb2RlKCJ1dGY4IiksIG1hcmt1cC5lbmNvZGUoInV0ZjgiKSkKKworY2xhc3MgVGVzdFVuaWNvZGVEYW1taXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlN0YW5kYWxvbmUgdGVzdHMgb2YgVW5pY29kZURhbW1pdC4iIiIKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfaW5wdXQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiSSdtIGFscmVhZHkgVW5pY29kZSEgXE57U05PV01BTn0iCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC51bmljb2RlX21hcmt1cCwgbWFya3VwKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVzX3RvX3VuaWNvZGUoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IGIiPGZvbz5ceDkxXHg5Mlx4OTNceDk0PC9mb28+IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRhbW1pdC51bmljb2RlX21hcmt1cCwgdSI8Zm9vPlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZDwvZm9vPiIpCisKKyAgICBkZWYgdGVzdF9zbWFydF9xdW90ZXNfdG9feG1sX2VudGl0aWVzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiIjxmb28+XHg5MVx4OTJceDkzXHg5NDwvZm9vPiIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHNtYXJ0X3F1b3Rlc190bz0ieG1sIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRhbW1pdC51bmljb2RlX21hcmt1cCwgIjxmb28+JiN4MjAxODsmI3gyMDE5OyYjeDIwMUM7JiN4MjAxRDs8L2Zvbz4iKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVzX3RvX2h0bWxfZW50aXRpZXMoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IGIiPGZvbz5ceDkxXHg5Mlx4OTNceDk0PC9mb28+IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCwgc21hcnRfcXVvdGVzX3RvPSJodG1sIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRhbW1pdC51bmljb2RlX21hcmt1cCwgIjxmb28+JmxzcXVvOyZyc3F1bzsmbGRxdW87JnJkcXVvOzwvZm9vPiIpCisKKyAgICBkZWYgdGVzdF9zbWFydF9xdW90ZXNfdG9fYXNjaWkoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IGIiPGZvbz5ceDkxXHg5Mlx4OTNceDk0PC9mb28+IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCwgc21hcnRfcXVvdGVzX3RvPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkYW1taXQudW5pY29kZV9tYXJrdXAsICIiIjxmb28+JyciIjwvZm9vPiIiIikKKworICAgIGRlZiB0ZXN0X2RldGVjdF91dGY4KHNlbGYpOgorICAgICAgICB1dGY4ID0gYiJceGMzXHhhOSIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGY4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC51bmljb2RlX21hcmt1cCwgdSdceGU5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgJ3V0Zi04JykKKworICAgIGRlZiB0ZXN0X2NvbnZlcnRfaGVicmV3KHNlbGYpOgorICAgICAgICBoZWJyZXcgPSBiIlx4ZWRceGU1XHhlY1x4ZjkiCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQoaGVicmV3LCBbImlzby04ODU5LTgiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgJ2lzby04ODU5LTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC51bmljb2RlX21hcmt1cCwgdSdcdTA1ZGRcdTA1ZDVcdTA1ZGNcdTA1ZTknKQorCisgICAgZGVmIHRlc3RfZG9udF9zZWVfc21hcnRfcXVvdGVzX3doZXJlX3RoZXJlX2FyZV9ub25lKHNlbGYpOgorICAgICAgICB1dGZfOCA9IGIiXDM0M1wyMDJcMjYxXDM0M1wyMDNcMjc0XDM0M1wyMDJcMjc3XDM0M1wyMDJcMjQ0IFdhdGNoIgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHV0Zl84KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC51bmljb2RlX21hcmt1cC5lbmNvZGUoInV0Zi04IiksIHV0Zl84KQorCisgICAgZGVmIHRlc3RfaWdub3JlX2luYXBwcm9wcmlhdGVfY29kZWNzKHNlbGYpOgorICAgICAgICB1dGY4X2RhdGEgPSB1IlLDpGtzbcO2cmfDpXMiLmVuY29kZSgidXRmLTgiKQorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHV0ZjhfZGF0YSwgWyJpc28tODg1OS04Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICd1dGYtOCcpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfaW52YWxpZF9jb2RlY3Moc2VsZik6CisgICAgICAgIHV0ZjhfZGF0YSA9IHUiUsOka3Ntw7ZyZ8OlcyIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIGZvciBiYWRfZW5jb2RpbmcgaW4gWycudXRmOCcsICcuLi4nLCAndXRGLS0tMTYuISddOgorICAgICAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGY4X2RhdGEsIFtiYWRfZW5jb2RpbmddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgJ3V0Zi04JykKKworICAgIGRlZiB0ZXN0X2RldGVjdF9odG1sNV9zdHlsZV9tZXRhX3RhZyhzZWxmKToKKworICAgICAgICBmb3IgZGF0YSBpbiAoCisgICAgICAgICAgICBiJzxodG1sPjxtZXRhIGNoYXJzZXQ9ImV1Yy1qcCIgLz48L2h0bWw+JywKKyAgICAgICAgICAgIGIiPGh0bWw+PG1ldGEgY2hhcnNldD0nZXVjLWpwJyAvPjwvaHRtbD4iLAorICAgICAgICAgICAgYiI8aHRtbD48bWV0YSBjaGFyc2V0PWV1Yy1qcCAvPjwvaHRtbD4iLAorICAgICAgICAgICAgYiI8aHRtbD48bWV0YSBjaGFyc2V0PWV1Yy1qcC8+PC9odG1sPiIpOgorICAgICAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChkYXRhLCBpc19odG1sPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICJldWMtanAiLCBkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF9sYXN0X2RpdGNoX2VudGl0eV9yZXBsYWNlbWVudChzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGEgVVRGLTggZG9jdW1lbnQgdGhhdCBjb250YWlucyBieXRlc3RyaW5ncworICAgICAgICAjIGNvbXBsZXRlbHkgaW5jb21wYXRpYmxlIHdpdGggVVRGLTggKGllLiBlbmNvZGVkIHdpdGggc29tZSBvdGhlcgorICAgICAgICAjIGVuY29kaW5nKS4KKyAgICAgICAgIworICAgICAgICAjIFNpbmNlIHRoZXJlIGlzIG5vIGNvbnNpc3RlbnQgZW5jb2RpbmcgZm9yIHRoZSBkb2N1bWVudCwKKyAgICAgICAgIyBVbmljb2RlLCBEYW1taXQgd2lsbCBldmVudHVhbGx5IGVuY29kZSB0aGUgZG9jdW1lbnQgYXMgVVRGLTgKKyAgICAgICAgIyBhbmQgZW5jb2RlIHRoZSBpbmNvbXBhdGlibGUgY2hhcmFjdGVycyBhcyBSRVBMQUNFTUVOVAorICAgICAgICAjIENIQVJBQ1RFUi4KKyAgICAgICAgIworICAgICAgICAjIElmIGNoYXJkZXQgaXMgaW5zdGFsbGVkLCBpdCB3aWxsIGRldGVjdCB0aGF0IHRoZSBkb2N1bWVudAorICAgICAgICAjIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBJU08tODg1OS0xIHdpdGhvdXQgZXJyb3JzLiBUaGlzIGhhcHBlbnMKKyAgICAgICAgIyB0byBiZSB0aGUgd3JvbmcgZW5jb2RpbmcsIGJ1dCBpdCBpcyBhIGNvbnNpc3RlbnQgZW5jb2RpbmcsIHNvIHRoZQorICAgICAgICAjIGNvZGUgd2UncmUgdGVzdGluZyBoZXJlIHdvbid0IHJ1bi4KKyAgICAgICAgIworICAgICAgICAjIFNvIHdlIHRlbXBvcmFyaWx5IGRpc2FibGUgY2hhcmRldCBpZiBpdCdzIHByZXNlbnQuCisgICAgICAgIGRvYyA9IGIiIiJcMzU3XDI3M1wyNzc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGh0bWw+PGI+XDMzMFwyNTBcMzMwXDI1MlwzMzBcMjYxPC9iPgorPGk+XDMxMFwzMjJcMzIxXDIyMFwzMTJcMzIxXDM1NVwzNDQ8L2k+PC9odG1sPiIiIgorICAgICAgICBjaGFyZGV0ID0gYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdAorICAgICAgICBsb2dnaW5nLmRpc2FibGUobG9nZ2luZy5XQVJOSU5HKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWYgbm9vcChzdHIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBiczQuZGFtbWl0LmNoYXJkZXRfZGFtbWl0ID0gbm9vcAorICAgICAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChkb2MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGRhbW1pdC5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiXHVmZmZkIiBpbiBkYW1taXQudW5pY29kZV9tYXJrdXApCisKKyAgICAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKGRvYywgImh0bWwucGFyc2VyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VwLmNvbnRhaW5zX3JlcGxhY2VtZW50X2NoYXJhY3RlcnMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2dnaW5nLmRpc2FibGUobG9nZ2luZy5OT1RTRVQpCisgICAgICAgICAgICBiczQuZGFtbWl0LmNoYXJkZXRfZGFtbWl0ID0gY2hhcmRldAorCisgICAgZGVmIHRlc3RfYnl0ZV9vcmRlcl9tYXJrX3JlbW92ZWQoc2VsZik6CisgICAgICAgICMgQSBkb2N1bWVudCB3cml0dGVuIGluIFVURi0xNkxFIHdpbGwgaGF2ZSBpdHMgYnl0ZSBvcmRlciBtYXJrZXIgc3RyaXBwZWQuCisgICAgICAgIGRhdGEgPSBiJ1x4ZmZceGZlPFx4MDBhXHgwMD5ceDAwXHhlMVx4MDBceGU5XHgwMDxceDAwL1x4MDBhXHgwMD5ceDAwJworICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8YT7DocOpPC9hPiIsIGRhbW1pdC51bmljb2RlX21hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidXRmLTE2bGUiLCBkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF9kZXR3aW5nbGUoc2VsZik6CisgICAgICAgICMgSGVyZSdzIGEgVVRGOCBkb2N1bWVudC4KKyAgICAgICAgdXRmOCA9ICh1IlxOe1NOT1dNQU59IiAqIDMpLmVuY29kZSgidXRmOCIpCisKKyAgICAgICAgIyBIZXJlJ3MgYSBXaW5kb3dzLTEyNTIgZG9jdW1lbnQuCisgICAgICAgIHdpbmRvd3NfMTI1MiA9ICgKKyAgICAgICAgICAgIHUiXE57TEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUkt9SGksIEkgbGlrZSBXaW5kb3dzISIKKyAgICAgICAgICAgIHUiXE57UklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLfSIpLmVuY29kZSgid2luZG93c18xMjUyIikKKworICAgICAgICAjIFRocm91Z2ggc29tZSB1bmhvbHkgYWxjaGVteSwgdGhleSd2ZSBiZWVuIHN0dWNrIHRvZ2V0aGVyLgorICAgICAgICBkb2MgPSB1dGY4ICsgd2luZG93c18xMjUyICsgdXRmOAorCisgICAgICAgICMgVGhlIGRvY3VtZW50IGNhbid0IGJlIHR1cm5lZCBpbnRvIFVURi04OgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRvYy5kZWNvZGUsICJ1dGY4IikKKworICAgICAgICAjIFVuaWNvZGUsIERhbW1pdCB0aGlua3MgdGhlIHdob2xlIGRvY3VtZW50IGlzIFdpbmRvd3MtMTI1MiwKKyAgICAgICAgIyBhbmQgZGVjb2RlcyBpdCBpbnRvICLDosucxpLDosucxpLDosucxpLigJxIaSwgSSBsaWtlIFdpbmRvd3Mh4oCdw6LLnMaSw6LLnMaSw6LLnMaSIgorCisgICAgICAgICMgQnV0IGlmIHdlIHJ1biBpdCB0aHJvdWdoIGZpeF9lbWJlZGRlZF93aW5kb3dzXzEyNTIsIGl0J3MgZml4ZWQ6CisKKyAgICAgICAgZml4ZWQgPSBVbmljb2RlRGFtbWl0LmRldHdpbmdsZShkb2MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1IuKYg+KYg+KYg+KAnEhpLCBJIGxpa2UgV2luZG93cyHigJ3imIPimIPimIMiLCBmaXhlZC5kZWNvZGUoInV0ZjgiKSkKKworICAgIGRlZiB0ZXN0X2RldHdpbmdsZV9pZ25vcmVzX211bHRpYnl0ZV9jaGFyYWN0ZXJzKHNlbGYpOgorICAgICAgICAjIEVhY2ggb2YgdGhlc2UgY2hhcmFjdGVycyBoYXMgYSBVVEYtOCByZXByZXNlbnRhdGlvbiBlbmRpbmcKKyAgICAgICAgIyBpbiBceDkzLiBceDkzIGlzIGEgc21hcnQgcXVvdGUgaWYgaW50ZXJwcmV0ZWQgYXMKKyAgICAgICAgIyBXaW5kb3dzLTEyNTIuIEJ1dCBvdXIgY29kZSBrbm93cyB0byBza2lwIG92ZXIgbXVsdGlieXRlCisgICAgICAgICMgVVRGLTggY2hhcmFjdGVycywgc28gdGhleSdsbCBzdXJ2aXZlIHRoZSBwcm9jZXNzIHVuc2NhdGhlZC4KKyAgICAgICAgZm9yIHRyaWNreV91bmljb2RlX2NoYXIgaW4gKAorICAgICAgICAgICAgdSJcTntMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRX0iLCAjIDItYnl0ZSBjaGFyICdceGM1XHg5MycKKyAgICAgICAgICAgIHUiXE57TEFUSU4gU1VCU0NSSVBUIFNNQUxMIExFVFRFUiBYfSIsICMgMy1ieXRlIGNoYXIgJ1x4ZTJceDgyXHg5MycKKyAgICAgICAgICAgIHUiXHhmMFx4OTBceDkwXHg5MyIsICMgVGhpcyBpcyBhIENKSyBjaGFyYWN0ZXIsIG5vdCBzdXJlIHdoaWNoIG9uZS4KKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBpbnB1dCA9IHRyaWNreV91bmljb2RlX2NoYXIuZW5jb2RlKCJ1dGY4IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnB1dC5lbmRzd2l0aChiJ1x4OTMnKSkKKyAgICAgICAgICAgIG91dHB1dCA9IFVuaWNvZGVEYW1taXQuZGV0d2luZ2xlKGlucHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGlucHV0KQorCitjbGFzcyBUZXN0TmFtZWRzcGFjZWRBdHRyaWJ1dGUoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfbmFtZV9tYXlfYmVfbm9uZShzZWxmKToKKyAgICAgICAgYSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoInhtbG5zIiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCAieG1sbnMiKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2lzX2VxdWl2YWxlbnRfdG9fY29sb25fc2VwYXJhdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgYSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoImEiLCAiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImE6YiIsIGEpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX2FyZV9lcXVpdmFsZW50X2lmX3ByZWZpeF9hbmRfbmFtZV9pZGVudGljYWwoc2VsZik6CisgICAgICAgIGEgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJhIiwgImIiLCAiYyIpCisgICAgICAgIGIgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJhIiwgImIiLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgICAgICAjIFRoZSBhY3R1YWwgbmFtZXNwYWNlIGlzIG5vdCBjb25zaWRlcmVkLgorICAgICAgICBjID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgiYSIsICJiIiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBjKQorCisgICAgICAgICMgQnV0IG5hbWUgYW5kIHByZWZpeCBhcmUgaW1wb3J0YW50LgorICAgICAgICBkID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgiYSIsICJ6IiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEsIGQpCisKKyAgICAgICAgZSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoInoiLCAiYiIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBlKQorCisKK2NsYXNzIFRlc3RBdHRyaWJ1dGVWYWx1ZVdpdGhDaGFyc2V0U3Vic3RpdHV0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnRlbnRfbWV0YV9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgIHZhbHVlID0gQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSgiZXVjLWpwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZXVjLWpwIiwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImV1Yy1qcCIsIHZhbHVlLm9yaWdpbmFsX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ1dGY4IiwgdmFsdWUuZW5jb2RlKCJ1dGY4IikpCisKKworICAgIGRlZiB0ZXN0X2NvbnRlbnRfbWV0YV9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgIHZhbHVlID0gQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZSgidGV4dC9odG1sOyBjaGFyc2V0PWV1Yy1qcCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRleHQvaHRtbDsgY2hhcnNldD1ldWMtanAiLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGV4dC9odG1sOyBjaGFyc2V0PWV1Yy1qcCIsIHZhbHVlLm9yaWdpbmFsX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmOCIsIHZhbHVlLmVuY29kZSgidXRmOCIpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF90cmVlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF90cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTE1YzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3RyZWUucHkKQEAgLTAsMCArMSwxODI5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiVGVzdHMgZm9yIEJlYXV0aWZ1bCBTb3VwJ3MgdHJlZSB0cmF2ZXJzYWwgbWV0aG9kcy4KKworVGhlIHRyZWUgdHJhdmVyc2FsIG1ldGhvZHMgYXJlIHRoZSBtYWluIGFkdmFudGFnZSBvZiB1c2luZyBCZWF1dGlmdWwKK1NvdXAgb3ZlciBqdXN0IHVzaW5nIGEgcGFyc2VyLgorCitEaWZmZXJlbnQgcGFyc2VycyB3aWxsIGJ1aWxkIGRpZmZlcmVudCBCZWF1dGlmdWwgU291cCB0cmVlcyBnaXZlbiB0aGUKK3NhbWUgbWFya3VwLCBidXQgYWxsIEJlYXV0aWZ1bCBTb3VwIHRyZWVzIGNhbiBiZSB0cmF2ZXJzZWQgd2l0aCB0aGUKK21ldGhvZHMgdGVzdGVkIGhlcmUuCisiIiIKKworaW1wb3J0IGNvcHkKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCitmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAorZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAorICAgIGJ1aWxkZXJfcmVnaXN0cnksCisgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyLAorKQorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIENEYXRhLAorICAgIENvbW1lbnQsCisgICAgRG9jdHlwZSwKKyAgICBOYXZpZ2FibGVTdHJpbmcsCisgICAgU291cFN0cmFpbmVyLAorICAgIFRhZywKKykKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0ICgKKyAgICBTb3VwVGVzdCwKKyAgICBza2lwSWYsCispCisKK1hNTF9CVUlMREVSX1BSRVNFTlQgPSAoYnVpbGRlcl9yZWdpc3RyeS5sb29rdXAoInhtbCIpIGlzIG5vdCBOb25lKQorTFhNTF9QUkVTRU5UID0gKGJ1aWxkZXJfcmVnaXN0cnkubG9va3VwKCJseG1sIikgaXMgbm90IE5vbmUpCisKK2NsYXNzIFRyZWVUZXN0KFNvdXBUZXN0KToKKworICAgIGRlZiBhc3NlcnRTZWxlY3RzKHNlbGYsIHRhZ3MsIHNob3VsZF9tYXRjaCk6CisgICAgICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiB0YWdzIGhhdmUgdGhlIGNvcnJlY3QgdGV4dC4KKworICAgICAgICBUaGlzIGlzIHVzZWQgaW4gdGVzdHMgdGhhdCBkZWZpbmUgYSBidW5jaCBvZiB0YWdzLCBlYWNoCisgICAgICAgIGNvbnRhaW5pbmcgYSBzaW5nbGUgc3RyaW5nLCBhbmQgdGhlbiBzZWxlY3QgY2VydGFpbiBzdHJpbmdzIGJ5CisgICAgICAgIHNvbWUgbWVjaGFuaXNtLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbdGFnLnN0cmluZyBmb3IgdGFnIGluIHRhZ3NdLCBzaG91bGRfbWF0Y2gpCisKKyAgICBkZWYgYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLCB0YWdzLCBzaG91bGRfbWF0Y2gpOgorICAgICAgICAiIiJNYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gdGFncyBoYXZlIHRoZSBjb3JyZWN0IElEcy4KKworICAgICAgICBUaGlzIGlzIHVzZWQgaW4gdGVzdHMgdGhhdCBkZWZpbmUgYSBidW5jaCBvZiB0YWdzLCBlYWNoCisgICAgICAgIGNvbnRhaW5pbmcgYSBzaW5nbGUgc3RyaW5nLCBhbmQgdGhlbiBzZWxlY3QgY2VydGFpbiBzdHJpbmdzIGJ5CisgICAgICAgIHNvbWUgbWVjaGFuaXNtLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbdGFnWydpZCddIGZvciB0YWcgaW4gdGFnc10sIHNob3VsZF9tYXRjaCkKKworCitjbGFzcyBUZXN0RmluZChUcmVlVGVzdCk6CisgICAgIiIiQmFzaWMgdGVzdHMgb2YgdGhlIGZpbmQoKSBtZXRob2QuCisKKyAgICBmaW5kKCkganVzdCBjYWxscyBmaW5kX2FsbCgpIHdpdGggbGltaXQ9MSwgc28gaXQncyBub3QgdGVzdGVkIGFsbAorICAgIHRoYXQgdGhvdXJvdWdobHkgaGVyZS4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGFnKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT4xPC9hPjxiPjI8L2I+PGE+MzwvYT48Yj40PC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kKCJiIikuc3RyaW5nLCAiMiIpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3RleHRfZmluZChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh1JzxoMT5Sw6Rrc23DtnJnw6VzPC9oMT4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZCh0ZXh0PXUnUsOka3Ntw7ZyZ8OlcycpLCB1J1LDpGtzbcO2cmfDpXMnKQorCisgICAgZGVmIHRlc3RfZmluZF9ldmVyeXRoaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGFuIG9wdGltaXphdGlvbiB0aGF0IGZpbmRzIGFsbCB0YWdzLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2E+PGI+YmFyPC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNvdXAuZmluZF9hbGwoKSkpCisKKyAgICBkZWYgdGVzdF9maW5kX2V2ZXJ5dGhpbmdfd2l0aF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGFuIG9wdGltaXphdGlvbiB0aGF0IGZpbmRzIGFsbCB0YWdzIHdpdGggYSBnaXZlbiBuYW1lLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2E+PGI+YmFyPC9iPjxhPmJhejwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzb3VwLmZpbmRfYWxsKCdhJykpKQorCitjbGFzcyBUZXN0RmluZEFsbChUcmVlVGVzdCk6CisgICAgIiIiQmFzaWMgdGVzdHMgb2YgdGhlIGZpbmRfYWxsKCkgbWV0aG9kLiIiIgorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfdGV4dF9ub2RlcyhzZWxmKToKKyAgICAgICAgIiIiWW91IGNhbiBzZWFyY2ggdGhlIHRyZWUgZm9yIHRleHQgbm9kZXMuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxodG1sPkZvbzxiPmJhcjwvYj5ceGJiPC9odG1sPiIpCisgICAgICAgICMgRXhhY3QgbWF0Y2guCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kX2FsbCh0ZXh0PSJiYXIiKSwgW3UiYmFyIl0pCisgICAgICAgICMgTWF0Y2ggYW55IG9mIGEgbnVtYmVyIG9mIHN0cmluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmZpbmRfYWxsKHRleHQ9WyJGb28iLCAiYmFyIl0pLCBbdSJGb28iLCB1ImJhciJdKQorICAgICAgICAjIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwodGV4dD1yZS5jb21waWxlKCcuKicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbdSJGb28iLCB1ImJhciIsIHUnXHhiYiddKQorICAgICAgICAjIE1hdGNoIGFueXRoaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwodGV4dD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbdSJGb28iLCB1ImJhciIsIHUnXHhiYiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfbGltaXQoc2VsZik6CisgICAgICAgICIiIllvdSBjYW4gbGltaXQgdGhlIG51bWJlciBvZiBpdGVtcyByZXR1cm5lZCBieSBmaW5kX2FsbC4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+MTwvYT48YT4yPC9hPjxhPjM8L2E+PGE+NDwvYT48YT41PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwLmZpbmRfYWxsKCdhJywgbGltaXQ9MyksIFsiMSIsICIyIiwgIjMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAuZmluZF9hbGwoJ2EnLCBsaW1pdD0xKSwgWyIxIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNvdXAuZmluZF9hbGwoJ2EnLCBsaW1pdD0xMCksIFsiMSIsICIyIiwgIjMiLCAiNCIsICI1Il0pCisKKyAgICAgICAgIyBBIGxpbWl0IG9mIDAgbWVhbnMgbm8gbGltaXQuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNvdXAuZmluZF9hbGwoJ2EnLCBsaW1pdD0wKSwgWyIxIiwgIjIiLCAiMyIsICI0IiwgIjUiXSkKKworICAgIGRlZiB0ZXN0X2NhbGxpbmdfYV90YWdfaXNfY2FsbGluZ19maW5kYWxsKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT4xPC9hPjxiPjI8YSBpZD0nZm9vJz4zPC9hPjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cCgnYScsIGxpbWl0PTEpLCBbIjEiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAuYihpZD0iZm9vIiksIFsiMyJdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9zZWxmX3JlZmVyZW50aWFsX2RhdGFfc3RydWN0dXJlX2RvZXNfbm90X2NhdXNlX2luZmluaXRlX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiIpCisgICAgICAgICMgQ3JlYXRlIGEgc2VsZi1yZWZlcmVudGlhbCBsaXN0LgorICAgICAgICBsID0gW10KKyAgICAgICAgbC5hcHBlbmQobCkKKworICAgICAgICAjIFdpdGhvdXQgc3BlY2lhbCBjb2RlIGluIF9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlLCB0aGlzIHdvdWxkIGNhdXNlIGluZmluaXRlCisgICAgICAgICMgcmVjdXJzaW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzb3VwLmZpbmRfYWxsKGwpKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfcmVzdWx0c2V0KHNlbGYpOgorICAgICAgICAiIiJBbGwgZmluZF9hbGwgY2FsbHMgcmV0dXJuIGEgUmVzdWx0U2V0IiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICByZXN1bHQgPSBzb3VwLmZpbmRfYWxsKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVzdWx0LCAic291cmNlIikpCisKKyAgICAgICAgcmVzdWx0ID0gc291cC5maW5kX2FsbChUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZXN1bHQsICJzb3VyY2UiKSkKKworICAgICAgICByZXN1bHQgPSBzb3VwLmZpbmRfYWxsKHRleHQ9ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHJlc3VsdCwgInNvdXJjZSIpKQorCisKK2NsYXNzIFRlc3RGaW5kQWxsQmFzaWNOYW1lc3BhY2VzKFRyZWVUZXN0KToKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfbmFtZXNwYWNlZF9uYW1lKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8bWF0aG1sOm1zcXJ0PjQ8L21hdGhtbDptc3FydD48YSBzdmc6ZmlsbD0icmVkIj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI0Iiwgc291cC5maW5kKCJtYXRobWw6bXNxcnQiKS5zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBzb3VwLmZpbmQoYXR0cnM9IHsgInN2ZzpmaWxsIiA6ICJyZWQiIH0pLm5hbWUpCisKKworY2xhc3MgVGVzdEZpbmRBbGxCeU5hbWUoVHJlZVRlc3QpOgorICAgICIiIlRlc3Qgd2F5cyBvZiBmaW5kaW5nIHRhZ3MgYnkgdGFnIG5hbWUuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRyZWVUZXN0LCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYudHJlZSA9ICBzZWxmLnNvdXAoIiIiPGE+Rmlyc3QgdGFnLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5TZWNvbmQgdGFnLjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yz5UaGlyZCA8YT5OZXN0ZWQgdGFnLjwvYT4gdGFnLjwvYz4iIiIpCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV90YWdfbmFtZShzZWxmKToKKyAgICAgICAgIyBGaW5kIGFsbCB0aGUgPGE+IHRhZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCgnYScpLCBbJ0ZpcnN0IHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X25hbWVfYW5kX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCgnYScsIHRleHQ9J0ZpcnN0IHRhZy4nKSwgWydGaXJzdCB0YWcuJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKCdhJywgdGV4dD1UcnVlKSwgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKCdhJywgdGV4dD1yZS5jb21waWxlKCJ0YWciKSksCisgICAgICAgICAgICBbJ0ZpcnN0IHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworCisgICAgZGVmIHRlc3RfZmluZF9hbGxfb25fbm9uX3Jvb3RfZWxlbWVudChzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIGNhbGwgZmluZF9hbGwgb24gYW55IG5vZGUsIG5vdCBqdXN0IHRoZSByb290LgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZi50cmVlLmMuZmluZF9hbGwoJ2EnKSwgWydOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfY2FsbGluZ19lbGVtZW50X2ludm9rZXNfZmluZF9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLnRyZWUoJ2EnKSwgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV90YWdfc3RyYWluZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbChTb3VwU3RyYWluZXIoJ2EnKSksCisgICAgICAgICAgICBbJ0ZpcnN0IHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X3RhZ19uYW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKFsnYScsICdiJ10pLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ1NlY29uZCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV90YWdfZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKHsnYScgOiBUcnVlLCAnYicgOiBUcnVlfSksCisgICAgICAgICAgICBbJ0ZpcnN0IHRhZy4nLCAnU2Vjb25kIHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X3RhZ19yZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi50cmVlLmZpbmRfYWxsKHJlLmNvbXBpbGUoJ15bYWJdJCcpKSwKKyAgICAgICAgICAgIFsnRmlyc3QgdGFnLicsICdTZWNvbmQgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF90YWdzX21hdGNoaW5nX21ldGhvZChzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIGRlZmluZSBhbiBvcmFjbGUgbWV0aG9kIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCisgICAgICAgICMgYSB0YWcgbWF0Y2hlcyB0aGUgc2VhcmNoLgorICAgICAgICBkZWYgaWRfbWF0Y2hlc19uYW1lKHRhZyk6CisgICAgICAgICAgICByZXR1cm4gdGFnLm5hbWUgPT0gdGFnLmdldCgnaWQnKQorCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9ImEiPk1hdGNoIDEuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIxIj5Eb2VzIG5vdCBtYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgaWQ9ImIiPk1hdGNoIDIuPC9hPiIiIikKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICB0cmVlLmZpbmRfYWxsKGlkX21hdGNoZXNfbmFtZSksIFsiTWF0Y2ggMS4iLCAiTWF0Y2ggMi4iXSkKKworCitjbGFzcyBUZXN0RmluZEFsbEJ5QXR0cmlidXRlKFRyZWVUZXN0KToKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X2F0dHJpYnV0ZV9uYW1lKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBpbiBrZXl3b3JkIGFyZ3VtZW50cyB0byBmaW5kX2FsbCB0byBzZWFyY2ggYnkKKyAgICAgICAgIyBhdHRyaWJ1dGUuCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImZpcnN0Ij5NYXRjaGluZyBhLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0ic2Vjb25kIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uLW1hdGNoaW5nIDxiIGlkPSJmaXJzdCI+TWF0Y2hpbmcgYi48L2I+YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+IiIiKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChpZD0nZmlyc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWF0Y2hpbmcgYS4iLCAiTWF0Y2hpbmcgYi4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X3V0ZjhfYXR0cmlidXRlX3ZhbHVlKHNlbGYpOgorICAgICAgICBwZWFjZSA9IHUi153Xldec16kiLmVuY29kZSgidXRmOCIpCisgICAgICAgIGRhdGEgPSB1JzxhIHRpdGxlPSLXndeV15zXqSI+PC9hPicuZW5jb2RlKCJ1dGY4IikKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzb3VwLmFdLCBzb3VwLmZpbmRfYWxsKHRpdGxlPXBlYWNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbc291cC5hXSwgc291cC5maW5kX2FsbCh0aXRsZT1wZWFjZS5kZWNvZGUoInV0ZjgiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3NvdXAuYV0sIHNvdXAuZmluZF9hbGwodGl0bGU9W3BlYWNlLCAic29tZXRoaW5nIGVsc2UiXSkpCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9hdHRyaWJ1dGVfZGljdChzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgaW4gYSBkaWN0aW9uYXJ5IGFzIHRoZSBhcmd1bWVudCAnYXR0cnMnLiBUaGlzCisgICAgICAgICMgbGV0cyB5b3Ugc2VhcmNoIGZvciBhdHRyaWJ1dGVzIGxpa2UgJ25hbWUnIChhIGZpeGVkIGFyZ3VtZW50CisgICAgICAgICMgdG8gZmluZF9hbGwpIGFuZCAnY2xhc3MnIChhIHJlc2VydmVkIHdvcmQgaW4gUHl0aG9uLikKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBuYW1lPSJuYW1lMSIgY2xhc3M9ImNsYXNzMSI+TmFtZSBtYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmFtZT0ibmFtZTIiIGNsYXNzPSJjbGFzczIiPkNsYXNzIG1hdGNoLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBuYW1lPSJuYW1lMyIgY2xhc3M9ImNsYXNzMyI+Tm9uLW1hdGNoLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZTE+QSB0YWcgY2FsbGVkICduYW1lMScuPC9uYW1lMT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgIyBUaGlzIGRvZXNuJ3QgZG8gd2hhdCB5b3Ugd2FudC4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwobmFtZT0nbmFtZTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiQSB0YWcgY2FsbGVkICduYW1lMScuIl0pCisgICAgICAgICMgVGhpcyBkb2VzIHdoYXQgeW91IHdhbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGF0dHJzPXsnbmFtZScgOiAnbmFtZTEnfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk5hbWUgbWF0Y2guIl0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoYXR0cnM9eydjbGFzcycgOiAnY2xhc3MyJ30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJDbGFzcyBtYXRjaC4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X2NsYXNzKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIxIj5DbGFzcyAxLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iMiI+Q2xhc3MgMi48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9IjEiPkNsYXNzIDEuPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxjIGNsYXNzPSIzIDQiPkNsYXNzIDMgYW5kIDQuPC9jPgorICAgICAgICAgICAgICAgICAgICAgICAgICIiIikKKworICAgICAgICAjIFBhc3NpbmcgaW4gdGhlIGNsYXNzXyBrZXl3b3JkIGFyZ3VtZW50IHdpbGwgc2VhcmNoIGFnYWluc3QKKyAgICAgICAgIyB0aGUgJ2NsYXNzJyBhdHRyaWJ1dGUuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdhJywgY2xhc3NfPScxJyksIFsnQ2xhc3MgMS4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2MnLCBjbGFzc189JzMnKSwgWydDbGFzcyAzIGFuZCA0LiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYycsIGNsYXNzXz0nNCcpLCBbJ0NsYXNzIDMgYW5kIDQuJ10pCisKKyAgICAgICAgIyBQYXNzaW5nIGluIGEgc3RyaW5nIHRvICdhdHRycycgd2lsbCBhbHNvIHNlYXJjaCB0aGUgQ1NTIGNsYXNzLgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYScsICcxJyksIFsnQ2xhc3MgMS4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoYXR0cnM9JzEnKSwgWydDbGFzcyAxLicsICdDbGFzcyAxLiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYycsICczJyksIFsnQ2xhc3MgMyBhbmQgNC4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2MnLCAnNCcpLCBbJ0NsYXNzIDMgYW5kIDQuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2J5X2NsYXNzX3doZW5fbXVsdGlwbGVfY2xhc3Nlc19wcmVzZW50KHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCI8Z2FyIGNsYXNzPSdmb28gYmFyJz5Gb3VuZCBpdDwvZ2FyPiIpCisKKyAgICAgICAgZiA9IHRyZWUuZmluZF9hbGwoImdhciIsIGNsYXNzXz1yZS5jb21waWxlKCJvIikpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhmLCBbIkZvdW5kIGl0Il0pCisKKyAgICAgICAgZiA9IHRyZWUuZmluZF9hbGwoImdhciIsIGNsYXNzXz1yZS5jb21waWxlKCJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhmLCBbIkZvdW5kIGl0Il0pCisKKyAgICAgICAgIyBTaW5jZSB0aGUgY2xhc3MgaXMgbm90IHRoZSBzdHJpbmcgImZvbyBiYXIiLCBidXQgdGhlIHR3bworICAgICAgICAjIHN0cmluZ3MgImZvbyIgYW5kICJiYXIiLCB0aGlzIHdpbGwgbm90IGZpbmQgYW55dGhpbmcuCisgICAgICAgIGYgPSB0cmVlLmZpbmRfYWxsKCJnYXIiLCBjbGFzc189cmUuY29tcGlsZSgibyBiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhmLCBbXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfbm9uX2RpY3Rpb25hcnlfZm9yX2F0dHJzX2ZpbmRzX2J5X2NsYXNzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nYmFyJz5Gb3VuZCBpdDwvYT4iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwLmZpbmRfYWxsKCJhIiwgcmUuY29tcGlsZSgiYmEiKSksIFsiRm91bmQgaXQiXSkKKworICAgICAgICBkZWYgYmlnX2F0dHJpYnV0ZV92YWx1ZSh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gbGVuKHZhbHVlKSA+IDMKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cC5maW5kX2FsbCgiYSIsIGJpZ19hdHRyaWJ1dGVfdmFsdWUpLCBbXSkKKworICAgICAgICBkZWYgc21hbGxfYXR0cmlidXRlX3ZhbHVlKHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiBsZW4odmFsdWUpIDw9IDMKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzb3VwLmZpbmRfYWxsKCJhIiwgc21hbGxfYXR0cmlidXRlX3ZhbHVlKSwgWyJGb3VuZCBpdCJdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9zdHJpbmdfZm9yX2F0dHJzX2ZpbmRzX211bHRpcGxlX2NsYXNzZXMoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxhIGNsYXNzPSJmb28gYmFyIj48L2E+PGEgY2xhc3M9ImZvbyI+PC9hPicpCisgICAgICAgIGEsIGEyID0gc291cC5maW5kX2FsbCgiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2EsIGEyXSwgc291cC5maW5kX2FsbCgiYSIsICJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYV0sIHNvdXAuZmluZF9hbGwoImEiLCAiYmFyIikpCisKKyAgICAgICAgIyBJZiB5b3Ugc3BlY2lmeSB0aGUgY2xhc3MgYXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhCisgICAgICAgICMgc3BhY2UsIG9ubHkgdGhhdCBzcGVjaWZpYyB2YWx1ZSB3aWxsIGJlIGZvdW5kLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthXSwgc291cC5maW5kX2FsbCgiYSIsIGNsYXNzXz0iZm9vIGJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthXSwgc291cC5maW5kX2FsbCgiYSIsICJmb28gYmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNvdXAuZmluZF9hbGwoImEiLCAiYmFyIGZvbyIpKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfYXR0cmlidXRlX3NvdXBzdHJhaW5lcihzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iZmlyc3QiPk1hdGNoLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0ic2Vjb25kIj5Ob24tbWF0Y2guPC9hPiIiIikKKworICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcihhdHRycz17J2lkJyA6ICdmaXJzdCd9KQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChzdHJhaW5lciksIFsnTWF0Y2guJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX21pc3NpbmdfYXRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIE5vbmUgYXMgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSB0byBmaW5kX2FsbC4KKyAgICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggdGFncyB0aGF0IGRvIG5vdCBoYXZlIHRoYXQgYXR0cmlidXRlIHNldC4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0iMSI+SUQgcHJlc2VudC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+Tm8gSUQgcHJlc2VudC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IiI+SUQgaXMgZW1wdHkuPC9hPiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2EnLCBpZD1Ob25lKSwgWyJObyBJRCBwcmVzZW50LiJdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9kZWZpbmVkX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgaW4gTm9uZSBhcyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIHRvIGZpbmRfYWxsLgorICAgICAgICAjIFRoaXMgd2lsbCBtYXRjaCB0YWdzIHRoYXQgaGF2ZSB0aGF0IGF0dHJpYnV0ZSBzZXQgdG8gYW55IHZhbHVlLgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPSIxIj5JRCBwcmVzZW50LjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YT5ObyBJRCBwcmVzZW50LjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iIj5JRCBpcyBlbXB0eS48L2E+IiIiKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICB0cmVlLmZpbmRfYWxsKGlkPVRydWUpLCBbIklEIHByZXNlbnQuIiwgIklEIGlzIGVtcHR5LiJdKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9udW1lcmljX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgIyBJZiB5b3Ugc2VhcmNoIGZvciBhIG51bWJlciwgaXQncyB0cmVhdGVkIGFzIGEgc3RyaW5nLgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPTE+VW5xdW90ZWQgYXR0cmlidXRlLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iMSI+UXVvdGVkIGF0dHJpYnV0ZS48L2E+IiIiKQorCisgICAgICAgIGV4cGVjdGVkID0gWyJVbnF1b3RlZCBhdHRyaWJ1dGUuIiwgIlF1b3RlZCBhdHRyaWJ1dGUuIl0KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9MSksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChpZD0iMSIpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfbGlzdF9hdHRyaWJ1dGVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBhIGxpc3Qgb2YgYXR0cmlidXRlIHZhbHVlcyBpbnN0ZWFkIG9mIGp1c3Qgb25lLAorICAgICAgICAjIGFuZCB5b3UnbGwgZ2V0IHRhZ3MgdGhhdCBtYXRjaCBhbnkgb2YgdGhlIHZhbHVlcy4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0iMSI+MTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iMiI+MjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iMyI+MzwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YT5ObyBJRC48L2E+IiIiKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChpZD1bIjEiLCAiMyIsICI0Il0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyIxIiwgIjMiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfcmVndWxhcl9leHByZXNzaW9uX2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgYSByZWd1bGFyIGV4cHJlc3Npb24gYXMgYW4gYXR0cmlidXRlIHZhbHVlLCBhbmQKKyAgICAgICAgIyB5b3UnbGwgZ2V0IHRhZ3Mgd2hvc2UgdmFsdWVzIGZvciB0aGF0IGF0dHJpYnV0ZSBtYXRjaCB0aGUKKyAgICAgICAgIyByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9ImEiPk9uZSBhLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iYWEiPlR3byBhcy48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImFiIj5NaXhlZCBhcyBhbmQgYnMuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJiIj5PbmUgYi48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+Tm8gSUQuPC9hPiIiIikKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChpZD1yZS5jb21waWxlKCJeYSskIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJPbmUgYS4iLCAiVHdvIGFzLiJdKQorCisgICAgZGVmIHRlc3RfZmluZF9ieV9uYW1lX2FuZF9jb250YWluaW5nX3N0cmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+Zm9vPC9iPjxiPmJhcjwvYj48YT5mb288L2E+IikKKyAgICAgICAgYSA9IHNvdXAuYQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2FdLCBzb3VwLmZpbmRfYWxsKCJhIiwgdGV4dD0iZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNvdXAuZmluZF9hbGwoImEiLCB0ZXh0PSJiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc291cC5maW5kX2FsbCgiYSIsIHRleHQ9ImJhciIpKQorCisgICAgZGVmIHRlc3RfZmluZF9ieV9uYW1lX2FuZF9jb250YWluaW5nX3N0cmluZ193aGVuX3N0cmluZ19pc19idXJpZWQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48YT48Yj48Yz5mb288L2M+PC9iPjwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwoImEiKSwgc291cC5maW5kX2FsbCgiYSIsIHRleHQ9ImZvbyIpKQorCisgICAgZGVmIHRlc3RfZmluZF9ieV9hdHRyaWJ1dGVfYW5kX2NvbnRhaW5pbmdfc3RyaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8YiBpZD0iMSI+Zm9vPC9iPjxhIGlkPSIyIj5mb288L2E+JykKKyAgICAgICAgYSA9IHNvdXAuYQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2FdLCBzb3VwLmZpbmRfYWxsKGlkPTIsIHRleHQ9ImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzb3VwLmZpbmRfYWxsKGlkPTEsIHRleHQ9ImJhciIpKQorCisKKworCitjbGFzcyBUZXN0SW5kZXgoVHJlZVRlc3QpOgorICAgICIiIlRlc3QgVGFnLmluZGV4IiIiCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YT5JZGVudGljYWw8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Tm90IGlkZW50aWNhbDwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YT5JZGVudGljYWw8L2E+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yz48ZD5JZGVudGljYWwgd2l0aCBjaGlsZDwvZD48L2M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QWxzbyBub3QgaWRlbnRpY2FsPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjPjxkPklkZW50aWNhbCB3aXRoIGNoaWxkPC9kPjwvYz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4iIiIpCisgICAgICAgIGRpdiA9IHRyZWUuZGl2CisgICAgICAgIGZvciBpLCBlbGVtZW50IGluIGVudW1lcmF0ZShkaXYuY29udGVudHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBkaXYuaW5kZXgoZWxlbWVudCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRyZWUuaW5kZXgsIDEpCisKKworY2xhc3MgVGVzdFBhcmVudE9wZXJhdGlvbnMoVHJlZVRlc3QpOgorICAgICIiIlRlc3QgbmF2aWdhdGlvbiBhbmQgc2VhcmNoaW5nIHRocm91Z2ggYW4gZWxlbWVudCdzIHBhcmVudHMuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RQYXJlbnRPcGVyYXRpb25zLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYudHJlZSA9IHNlbGYuc291cCgnJyc8dWwgaWQ9ImVtcHR5Ij48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJ0b3AiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ibWlkZGxlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJib3R0b20iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+U3RhcnQgaGVyZTwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPicnJykKKyAgICAgICAgc2VsZi5zdGFydCA9IHNlbGYudHJlZS5iCisKKworICAgIGRlZiB0ZXN0X3BhcmVudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LnBhcmVudFsnaWQnXSwgJ2JvdHRvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5wYXJlbnQucGFyZW50WydpZCddLCAnbWlkZGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LnBhcmVudC5wYXJlbnQucGFyZW50WydpZCddLCAndG9wJykKKworICAgIGRlZiB0ZXN0X3BhcmVudF9vZl90b3BfdGFnX2lzX3NvdXBfb2JqZWN0KHNlbGYpOgorICAgICAgICB0b3BfdGFnID0gc2VsZi50cmVlLmNvbnRlbnRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9wX3RhZy5wYXJlbnQsIHNlbGYudHJlZSkKKworICAgIGRlZiB0ZXN0X3NvdXBfb2JqZWN0X2hhc19ub19wYXJlbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi50cmVlLnBhcmVudCkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcGFyZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKAorICAgICAgICAgICAgc2VsZi5zdGFydC5maW5kX3BhcmVudHMoJ3VsJyksIFsnYm90dG9tJywgJ21pZGRsZScsICd0b3AnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKAorICAgICAgICAgICAgc2VsZi5zdGFydC5maW5kX3BhcmVudHMoJ3VsJywgaWQ9Im1pZGRsZSIpLCBbJ21pZGRsZSddKQorCisgICAgZGVmIHRlc3RfZmluZF9wYXJlbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5maW5kX3BhcmVudCgndWwnKVsnaWQnXSwgJ2JvdHRvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5maW5kX3BhcmVudCgndWwnLCBpZD0ndG9wJylbJ2lkJ10sICd0b3AnKQorCisgICAgZGVmIHRlc3RfcGFyZW50X29mX3RleHRfZWxlbWVudChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlN0YXJ0IGhlcmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQucGFyZW50Lm5hbWUsICdiJykKKworICAgIGRlZiB0ZXN0X3RleHRfZWxlbWVudF9maW5kX3BhcmVudChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlN0YXJ0IGhlcmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuZmluZF9wYXJlbnQoJ3VsJylbJ2lkJ10sICdib3R0b20nKQorCisgICAgZGVmIHRlc3RfcGFyZW50X2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtwYXJlbnRbJ2lkJ10gZm9yIHBhcmVudCBpbiBzZWxmLnN0YXJ0LnBhcmVudHMKKyAgICAgICAgICAgICAgICAgICBpZiBwYXJlbnQgaXMgbm90IE5vbmUgYW5kICdpZCcgaW4gcGFyZW50LmF0dHJzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudHMsIFsnYm90dG9tJywgJ21pZGRsZScsICd0b3AnXSkKKworCitjbGFzcyBQcm94aW1pdHlUZXN0KFRyZWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVHJlZVRlc3QsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi50cmVlID0gc2VsZi5zb3VwKAorICAgICAgICAgICAgJzxodG1sIGlkPSJzdGFydCI+PGhlYWQ+PC9oZWFkPjxib2R5PjxiIGlkPSIxIj5PbmU8L2I+PGIgaWQ9IjIiPlR3bzwvYj48YiBpZD0iMyI+VGhyZWU8L2I+PC9ib2R5PjwvaHRtbD4nKQorCisKK2NsYXNzIFRlc3ROZXh0T3BlcmF0aW9ucyhQcm94aW1pdHlUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdE5leHRPcGVyYXRpb25zLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuc3RhcnQgPSBzZWxmLnRyZWUuYgorCisgICAgZGVmIHRlc3RfbmV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0Lm5leHRfZWxlbWVudCwgIk9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5uZXh0X2VsZW1lbnQubmV4dF9lbGVtZW50WydpZCddLCAiMiIpCisKKyAgICBkZWYgdGVzdF9uZXh0X29mX2xhc3RfaXRlbV9pc19ub25lKHNlbGYpOgorICAgICAgICBsYXN0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iVGhyZWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhc3QubmV4dF9lbGVtZW50LCBOb25lKQorCisgICAgZGVmIHRlc3RfbmV4dF9vZl9yb290X2lzX25vbmUoc2VsZik6CisgICAgICAgICMgVGhlIGRvY3VtZW50IHJvb3QgaXMgb3V0c2lkZSB0aGUgbmV4dC9wcmV2aW91cyBjaGFpbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUubmV4dF9lbGVtZW50LCBOb25lKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfbmV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGYuc3RhcnQuZmluZF9hbGxfbmV4dCgnYicpLCBbIlR3byIsICJUaHJlZSJdKQorICAgICAgICBzZWxmLnN0YXJ0LmZpbmRfYWxsX25leHQoaWQ9MykKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGYuc3RhcnQuZmluZF9hbGxfbmV4dChpZD0zKSwgWyJUaHJlZSJdKQorCisgICAgZGVmIHRlc3RfZmluZF9uZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQuZmluZF9uZXh0KCdiJylbJ2lkJ10sICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LmZpbmRfbmV4dCh0ZXh0PSJUaHJlZSIpLCAiVGhyZWUiKQorCisgICAgZGVmIHRlc3RfZmluZF9uZXh0X2Zvcl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJPbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuZmluZF9uZXh0KCJiIikuc3RyaW5nLCAiVHdvIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRleHQuZmluZF9hbGxfbmV4dCgiYiIpLCBbIlR3byIsICJUaHJlZSJdKQorCisgICAgZGVmIHRlc3RfbmV4dF9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHN0YXJ0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iVHdvIikKKyAgICAgICAgc3VjY2Vzc29ycyA9IFtub2RlIGZvciBub2RlIGluIHN0YXJ0Lm5leHRfZWxlbWVudHNdCisgICAgICAgICMgVGhlcmUgYXJlIHR3byBzdWNjZXNzb3JzOiB0aGUgZmluYWwgPGI+IHRhZyBhbmQgaXRzIHRleHQgY29udGVudHMuCisgICAgICAgIHRhZywgY29udGVudHMgPSBzdWNjZXNzb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFnWydpZCddLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsICJUaHJlZSIpCisKK2NsYXNzIFRlc3RQcmV2aW91c09wZXJhdGlvbnMoUHJveGltaXR5VGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RQcmV2aW91c09wZXJhdGlvbnMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5lbmQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJUaHJlZSIpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5wcmV2aW91c19lbGVtZW50WydpZCddLCAiMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQucHJldmlvdXNfZWxlbWVudC5wcmV2aW91c19lbGVtZW50LCAiVHdvIikKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX29mX2ZpcnN0X2l0ZW1faXNfbm9uZShzZWxmKToKKyAgICAgICAgZmlyc3QgPSBzZWxmLnRyZWUuZmluZCgnaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3QucHJldmlvdXNfZWxlbWVudCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX29mX3Jvb3RfaXNfbm9uZShzZWxmKToKKyAgICAgICAgIyBUaGUgZG9jdW1lbnQgcm9vdCBpcyBvdXRzaWRlIHRoZSBuZXh0L3ByZXZpb3VzIGNoYWluLgorICAgICAgICAjIFhYWCBUaGlzIGlzIGJyb2tlbiEKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmVlLnByZXZpb3VzX2VsZW1lbnQsIE5vbmUpCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3ByZXZpb3VzKHNlbGYpOgorICAgICAgICAjIFRoZSA8Yj4gdGFnIGNvbnRhaW5pbmcgdGhlICJUaHJlZSIgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3IKKyAgICAgICAgIyBvZiB0aGUgIlRocmVlIiBub2RlIGl0c2VsZiwgd2hpY2ggaXMgd2h5ICJUaHJlZSIgc2hvd3MgdXAKKyAgICAgICAgIyBoZXJlLgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLmVuZC5maW5kX2FsbF9wcmV2aW91cygnYicpLCBbIlRocmVlIiwgIlR3byIsICJPbmUiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGYuZW5kLmZpbmRfYWxsX3ByZXZpb3VzKGlkPTEpLCBbIk9uZSJdKQorCisgICAgZGVmIHRlc3RfZmluZF9wcmV2aW91cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5maW5kX3ByZXZpb3VzKCdiJylbJ2lkJ10sICczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5maW5kX3ByZXZpb3VzKHRleHQ9Ik9uZSIpLCAiT25lIikKKworICAgIGRlZiB0ZXN0X2ZpbmRfcHJldmlvdXNfZm9yX3RleHRfZWxlbWVudChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlRocmVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmZpbmRfcHJldmlvdXMoImIiKS5zdHJpbmcsICJUaHJlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHRleHQuZmluZF9hbGxfcHJldmlvdXMoImIiKSwgWyJUaHJlZSIsICJUd28iLCAiT25lIl0pCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHN0YXJ0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iT25lIikKKyAgICAgICAgcHJlZGVjZXNzb3JzID0gW25vZGUgZm9yIG5vZGUgaW4gc3RhcnQucHJldmlvdXNfZWxlbWVudHNdCisKKyAgICAgICAgIyBUaGVyZSBhcmUgZm91ciBwcmVkZWNlc3NvcnM6IHRoZSA8Yj4gdGFnIGNvbnRhaW5pbmcgIk9uZSIKKyAgICAgICAgIyB0aGUgPGJvZHk+IHRhZywgdGhlIDxoZWFkPiB0YWcsIGFuZCB0aGUgPGh0bWw+IHRhZy4KKyAgICAgICAgYiwgYm9keSwgaGVhZCwgaHRtbCA9IHByZWRlY2Vzc29ycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbJ2lkJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib2R5Lm5hbWUsICJib2R5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkLm5hbWUsICJoZWFkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1sLm5hbWUsICJodG1sIikKKworCitjbGFzcyBTaWJsaW5nVGVzdChUcmVlVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFNpYmxpbmdUZXN0LCBzZWxmKS5zZXRVcCgpCisgICAgICAgIG1hcmt1cCA9ICcnJzxodG1sPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMSI+CisgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMS4xIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjIiPgorICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjIuMSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIzIj4KKyAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIzLjEiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iNCI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2h0bWw+JycnCisgICAgICAgICMgQWxsIHRoYXQgd2hpdGVzcGFjZSBsb29rcyBnb29kIGJ1dCBtYWtlcyB0aGUgdGVzdHMgbW9yZQorICAgICAgICAjIGRpZmZpY3VsdC4gR2V0IHJpZCBvZiBpdC4KKyAgICAgICAgbWFya3VwID0gcmUuY29tcGlsZSgiXG5ccyoiKS5zdWIoIiIsIG1hcmt1cCkKKyAgICAgICAgc2VsZi50cmVlID0gc2VsZi5zb3VwKG1hcmt1cCkKKworCitjbGFzcyBUZXN0TmV4dFNpYmxpbmcoU2libGluZ1Rlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0TmV4dFNpYmxpbmcsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5zdGFydCA9IHNlbGYudHJlZS5maW5kKGlkPSIxIikKKworICAgIGRlZiB0ZXN0X25leHRfc2libGluZ19vZl9yb290X2lzX25vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmVlLm5leHRfc2libGluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X25leHRfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0Lm5leHRfc2libGluZ1snaWQnXSwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQubmV4dF9zaWJsaW5nLm5leHRfc2libGluZ1snaWQnXSwgJzMnKQorCisgICAgICAgICMgTm90ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG5leHRfc2libGluZyBhbmQgbmV4dF9lbGVtZW50LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQubmV4dF9lbGVtZW50WydpZCddLCAnMS4xJykKKworICAgIGRlZiB0ZXN0X25leHRfc2libGluZ19tYXlfbm90X2V4aXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5odG1sLm5leHRfc2libGluZywgTm9uZSkKKworICAgICAgICBuZXN0ZWRfc3BhbiA9IHNlbGYudHJlZS5maW5kKGlkPSIxLjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5lc3RlZF9zcGFuLm5leHRfc2libGluZywgTm9uZSkKKworICAgICAgICBsYXN0X3NwYW4gPSBzZWxmLnRyZWUuZmluZChpZD0iNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFzdF9zcGFuLm5leHRfc2libGluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfbmV4dF9zaWJsaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQuZmluZF9uZXh0X3NpYmxpbmcoJ3NwYW4nKVsnaWQnXSwgJzInKQorCisgICAgZGVmIHRlc3RfbmV4dF9zaWJsaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKHNlbGYuc3RhcnQuZmluZF9uZXh0X3NpYmxpbmdzKCJzcGFuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJzInLCAnMycsICc0J10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKHNlbGYuc3RhcnQuZmluZF9uZXh0X3NpYmxpbmdzKGlkPSczJyksIFsnMyddKQorCisgICAgZGVmIHRlc3RfbmV4dF9zaWJsaW5nX2Zvcl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIkZvbzxiPmJhcjwvYj5iYXoiKQorICAgICAgICBzdGFydCA9IHNvdXAuZmluZCh0ZXh0PSJGb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0Lm5leHRfc2libGluZy5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQubmV4dF9zaWJsaW5nLm5leHRfc2libGluZywgJ2JheicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5ncygnYicpLCBbJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5nKHRleHQ9ImJheiIpLCAiYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5maW5kX25leHRfc2libGluZyh0ZXh0PSJub25lc3VjaCIpLCBOb25lKQorCisKK2NsYXNzIFRlc3RQcmV2aW91c1NpYmxpbmcoU2libGluZ1Rlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0UHJldmlvdXNTaWJsaW5nLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuZW5kID0gc2VsZi50cmVlLmZpbmQoaWQ9IjQiKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfc2libGluZ19vZl9yb290X2lzX25vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmVlLnByZXZpb3VzX3NpYmxpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19zaWJsaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLnByZXZpb3VzX3NpYmxpbmdbJ2lkJ10sICczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5wcmV2aW91c19zaWJsaW5nLnByZXZpb3VzX3NpYmxpbmdbJ2lkJ10sICcyJykKKworICAgICAgICAjIE5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwcmV2aW91c19zaWJsaW5nIGFuZCBwcmV2aW91c19lbGVtZW50LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLnByZXZpb3VzX2VsZW1lbnRbJ2lkJ10sICczLjEnKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfc2libGluZ19tYXlfbm90X2V4aXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5odG1sLnByZXZpb3VzX3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgbmVzdGVkX3NwYW4gPSBzZWxmLnRyZWUuZmluZChpZD0iMS4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXN0ZWRfc3Bhbi5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgICAgIGZpcnN0X3NwYW4gPSBzZWxmLnRyZWUuZmluZChpZD0iMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3Rfc3Bhbi5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfZmluZF9wcmV2aW91c19zaWJsaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLmZpbmRfcHJldmlvdXNfc2libGluZygnc3BhbicpWydpZCddLCAnMycpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19zaWJsaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKHNlbGYuZW5kLmZpbmRfcHJldmlvdXNfc2libGluZ3MoInNwYW4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnMycsICcyJywgJzEnXSkKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHNJRHMoc2VsZi5lbmQuZmluZF9wcmV2aW91c19zaWJsaW5ncyhpZD0nMScpLCBbJzEnXSkKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3NpYmxpbmdfZm9yX3RleHRfZWxlbWVudChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiRm9vPGI+YmFyPC9iPmJheiIpCisgICAgICAgIHN0YXJ0ID0gc291cC5maW5kKHRleHQ9ImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQucHJldmlvdXNfc2libGluZy5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQucHJldmlvdXNfc2libGluZy5wcmV2aW91c19zaWJsaW5nLCAnRm9vJykKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc3RhcnQuZmluZF9wcmV2aW91c19zaWJsaW5ncygnYicpLCBbJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LmZpbmRfcHJldmlvdXNfc2libGluZyh0ZXh0PSJGb28iKSwgIkZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQuZmluZF9wcmV2aW91c19zaWJsaW5nKHRleHQ9Im5vbmVzdWNoIiksIE5vbmUpCisKKworY2xhc3MgVGVzdFRhZ0NyZWF0aW9uKFNvdXBUZXN0KToKKyAgICAiIiJUZXN0IHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBuZXcgdGFncy4iIiIKKyAgICBkZWYgdGVzdF9uZXdfdGFnKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBuZXdfdGFnID0gc291cC5uZXdfdGFnKCJmb28iLCBiYXI9ImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG5ld190YWcsIFRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZvbyIsIG5ld190YWcubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGJhcj0iYmF6IiksIG5ld190YWcuYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbmV3X3RhZy5wYXJlbnQpCisKKyAgICBkZWYgdGVzdF90YWdfaW5oZXJpdHNfc2VsZl9jbG9zaW5nX3J1bGVzX2Zyb21fYnVpbGRlcihzZWxmKToKKyAgICAgICAgaWYgWE1MX0JVSUxERVJfUFJFU0VOVDoKKyAgICAgICAgICAgIHhtbF9zb3VwID0gQmVhdXRpZnVsU291cCgiIiwgInhtbCIpCisgICAgICAgICAgICB4bWxfYnIgPSB4bWxfc291cC5uZXdfdGFnKCJiciIpCisgICAgICAgICAgICB4bWxfcCA9IHhtbF9zb3VwLm5ld190YWcoInAiKQorCisgICAgICAgICAgICAjIEJvdGggdGhlIDxicj4gYW5kIDxwPiB0YWcgYXJlIGVtcHR5LWVsZW1lbnQsIGp1c3QgYmVjYXVzZQorICAgICAgICAgICAgIyB0aGV5IGhhdmUgbm8gY29udGVudHMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPGJyLz4iLCB4bWxfYnIuZW5jb2RlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPHAvPiIsIHhtbF9wLmVuY29kZSgpKQorCisgICAgICAgIGh0bWxfc291cCA9IEJlYXV0aWZ1bFNvdXAoIiIsICJodG1sIikKKyAgICAgICAgaHRtbF9iciA9IGh0bWxfc291cC5uZXdfdGFnKCJiciIpCisgICAgICAgIGh0bWxfcCA9IGh0bWxfc291cC5uZXdfdGFnKCJwIikKKworICAgICAgICAjIFRoZSBIVE1MIGJ1aWxkZXIgdXNlcnMgSFRNTCdzIHJ1bGVzIGFib3V0IHdoaWNoIHRhZ3MgYXJlCisgICAgICAgICMgZW1wdHktZWxlbWVudCB0YWdzLCBhbmQgdGhlIG5ldyB0YWdzIHJlZmxlY3QgdGhlc2UgcnVsZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiI8YnIvPiIsIGh0bWxfYnIuZW5jb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiI8cD48L3A+IiwgaHRtbF9wLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3RfbmV3X3N0cmluZ19jcmVhdGVzX25hdmlnYWJsZXN0cmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgcyA9IHNvdXAubmV3X3N0cmluZygiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZm9vIiwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocywgTmF2aWdhYmxlU3RyaW5nKSkKKworICAgIGRlZiB0ZXN0X25ld19zdHJpbmdfY2FuX2NyZWF0ZV9uYXZpZ2FibGVzdHJpbmdfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHMgPSBzb3VwLm5ld19zdHJpbmcoImZvbyIsIENvbW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZvbyIsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHMsIENvbW1lbnQpKQorCitjbGFzcyBUZXN0VHJlZU1vZGlmaWNhdGlvbihTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfbW9kaWZpY2F0aW9uKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8YSBpZD0iMSI+PC9hPicpCisgICAgICAgIHNvdXAuYVsnaWQnXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcignPGEgaWQ9IjIiPjwvYT4nKSkKKyAgICAgICAgZGVsKHNvdXAuYVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcignPGE+PC9hPicpKQorICAgICAgICBzb3VwLmFbJ2lkMiddID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcignPGEgaWQyPSJmb28iPjwvYT4nKSkKKworICAgIGRlZiB0ZXN0X25ld190YWdfY3JlYXRpb24oc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyX3JlZ2lzdHJ5Lmxvb2t1cCgnaHRtbCcpKCkKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGJvZHk+PC9ib2R5PiIsIGJ1aWxkZXI9YnVpbGRlcikKKyAgICAgICAgYSA9IFRhZyhzb3VwLCBidWlsZGVyLCAnYScpCisgICAgICAgIG9sID0gVGFnKHNvdXAsIGJ1aWxkZXIsICdvbCcpCisgICAgICAgIGFbJ2hyZWYnXSA9ICdodHRwOi8vZm9vLmNvbS8nCisgICAgICAgIHNvdXAuYm9keS5pbnNlcnQoMCwgYSkKKyAgICAgICAgc291cC5ib2R5Lmluc2VydCgxLCBvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuYm9keS5lbmNvZGUoKSwKKyAgICAgICAgICAgIGInPGJvZHk+PGEgaHJlZj0iaHR0cDovL2Zvby5jb20vIj48L2E+PG9sPjwvb2w+PC9ib2R5PicpCisKKyAgICBkZWYgdGVzdF9hcHBlbmRfdG9fY29udGVudHNfbW92ZXNfdGFnKHNlbGYpOgorICAgICAgICBkb2MgPSAiIiI8cCBpZD0iMSI+RG9uJ3QgbGVhdmUgbWUgPGI+aGVyZTwvYj4uPC9wPgorICAgICAgICAgICAgICAgIDxwIGlkPSIyIj5Eb25cJ3QgbGVhdmUhPC9wPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRvYykKKyAgICAgICAgc2Vjb25kX3BhcmEgPSBzb3VwLmZpbmQoaWQ9JzInKQorICAgICAgICBib2xkID0gc291cC5iCisKKyAgICAgICAgIyBNb3ZlIHRoZSA8Yj4gdGFnIHRvIHRoZSBlbmQgb2YgdGhlIHNlY29uZCBwYXJhZ3JhcGguCisgICAgICAgIHNvdXAuZmluZChpZD0nMicpLmFwcGVuZChzb3VwLmIpCisKKyAgICAgICAgIyBUaGUgPGI+IHRhZyBpcyBub3cgYSBjaGlsZCBvZiB0aGUgc2Vjb25kIHBhcmFncmFwaC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib2xkLnBhcmVudCwgc2Vjb25kX3BhcmEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgICc8cCBpZD0iMSI+RG9uXCd0IGxlYXZlIG1lIC48L3A+XG4nCisgICAgICAgICAgICAgICAgJzxwIGlkPSIyIj5Eb25cJ3QgbGVhdmUhPGI+aGVyZTwvYj48L3A+JykpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3dpdGhfcmV0dXJuc190aGluZ190aGF0X3dhc19yZXBsYWNlZChzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8YT48L2E+PGI+PGM+PC9jPjwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgYSA9IHNvdXAuYQorICAgICAgICBuZXdfYSA9IGEucmVwbGFjZV93aXRoKHNvdXAuYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBuZXdfYSkKKworICAgIGRlZiB0ZXN0X3Vud3JhcF9yZXR1cm5zX3RoaW5nX3RoYXRfd2FzX3JlcGxhY2VkKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxhPjxiPjwvYj48Yz48L2M+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBhID0gc291cC5hCisgICAgICAgIG5ld19hID0gYS51bndyYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIG5ld19hKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV90YWdfd2l0aF9pdHNlbGYoc2VsZik6CisgICAgICAgIHRleHQgPSAiPGE+PGI+PC9iPjxjPkZvbzxkPjwvZD48L2M+PC9hPjxhPjxlPjwvZT48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIGMgPSBzb3VwLmMKKyAgICAgICAgc291cC5jLnJlcGxhY2Vfd2l0aChjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKHRleHQpKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV90YWdfd2l0aF9pdHNfcGFyZW50X3JhaXNlc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHRleHQgPSAiPGE+PGI+PC9iPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc291cC5iLnJlcGxhY2Vfd2l0aCwgc291cC5hKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X3RhZ19pbnRvX2l0c2VsZl9yYWlzZXNfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxhPjxiPjwvYj48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNvdXAuYS5pbnNlcnQsIDAsIHNvdXAuYSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Vfd2l0aF9tYWludGFpbnNfbmV4dF9lbGVtZW50X3Rocm91Z2hvdXQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxwPjxhPm9uZTwvYT48Yj50aHJlZTwvYj48L3A+JykKKyAgICAgICAgYSA9IHNvdXAuYQorICAgICAgICBiID0gYS5jb250ZW50c1swXQorICAgICAgICAjIE1ha2UgaXQgc28gdGhlIDxhPiB0YWcgaGFzIHR3byB0ZXh0IGNoaWxkcmVuLgorICAgICAgICBhLmluc2VydCgxLCAidHdvIikKKworICAgICAgICAjIE5vdyByZXBsYWNlIGVhY2ggb25lIHdpdGggdGhlIGVtcHR5IHN0cmluZy4KKyAgICAgICAgbGVmdCwgcmlnaHQgPSBhLmNvbnRlbnRzCisgICAgICAgIGxlZnQucmVwbGFjZVdpdGgoJycpCisgICAgICAgIHJpZ2h0LnJlcGxhY2VXaXRoKCcnKQorCisgICAgICAgICMgVGhlIDxiPiB0YWcgaXMgc3RpbGwgY29ubmVjdGVkIHRvIHRoZSB0cmVlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0aHJlZSIsIHNvdXAuYi5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX2ZpbmFsX25vZGUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPkFyZ2ghPC9iPiIpCisgICAgICAgIHNvdXAuZmluZCh0ZXh0PSJBcmdoISIpLnJlcGxhY2Vfd2l0aCgiSG9vcmF5ISIpCisgICAgICAgIG5ld190ZXh0ID0gc291cC5maW5kKHRleHQ9Ikhvb3JheSEiKQorICAgICAgICBiID0gc291cC5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucHJldmlvdXNfZWxlbWVudCwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wYXJlbnQsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQsIG5ld190ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0Lm5leHRfZWxlbWVudCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NvbnNlY3V0aXZlX3RleHRfbm9kZXMoc2VsZik6CisgICAgICAgICMgQSBidWlsZGVyIHNob3VsZCBuZXZlciBjcmVhdGUgdHdvIGNvbnNlY3V0aXZlIHRleHQgbm9kZXMsCisgICAgICAgICMgYnV0IGlmIHlvdSBpbnNlcnQgb25lIG5leHQgdG8gYW5vdGhlciwgQmVhdXRpZnVsIFNvdXAgd2lsbAorICAgICAgICAjIGhhbmRsZSBpdCBjb3JyZWN0bHkuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjxiPkFyZ2ghPC9iPjxjPjwvYz48L2E+IikKKyAgICAgICAgc291cC5iLmluc2VydCgxLCAiSG9vcmF5ISIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgICI8YT48Yj5BcmdoIUhvb3JheSE8L2I+PGM+PC9jPjwvYT4iKSkKKworICAgICAgICBuZXdfdGV4dCA9IHNvdXAuZmluZCh0ZXh0PSJIb29yYXkhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19lbGVtZW50LCAiQXJnaCEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50LCBuZXdfdGV4dCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX3NpYmxpbmcsICJBcmdoISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucHJldmlvdXNfc2libGluZy5uZXh0X3NpYmxpbmcsIG5ld190ZXh0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQubmV4dF9zaWJsaW5nLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0Lm5leHRfZWxlbWVudCwgc291cC5jKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X3N0cmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiIpCisgICAgICAgIHNvdXAuYS5pbnNlcnQoMCwgImJhciIpCisgICAgICAgIHNvdXAuYS5pbnNlcnQoMCwgImZvbyIpCisgICAgICAgICMgVGhlIHN0cmluZyB3ZXJlIGFkZGVkIHRvIHRoZSB0YWcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJmb28iLCAiYmFyIl0sIHNvdXAuYS5jb250ZW50cykKKyAgICAgICAgIyBBbmQgdGhleSB3ZXJlIGNvbnZlcnRlZCB0byBOYXZpZ2FibGVTdHJpbmdzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5jb250ZW50c1swXS5uZXh0X2VsZW1lbnQsICJiYXIiKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X3RhZyhzZWxmKToKKyAgICAgICAgYnVpbGRlciA9IHNlbGYuZGVmYXVsdF9idWlsZGVyCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICAiPGE+PGI+RmluZDwvYj48Yz5sYWR5ITwvYz48ZD48L2Q+PC9hPiIsIGJ1aWxkZXI9YnVpbGRlcikKKyAgICAgICAgbWFnaWNfdGFnID0gVGFnKHNvdXAsIGJ1aWxkZXIsICdtYWdpY3RhZycpCisgICAgICAgIG1hZ2ljX3RhZy5pbnNlcnQoMCwgInRoZSIpCisgICAgICAgIHNvdXAuYS5pbnNlcnQoMSwgbWFnaWNfdGFnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPGE+PGI+RmluZDwvYj48bWFnaWN0YWc+dGhlPC9tYWdpY3RhZz48Yz5sYWR5ITwvYz48ZD48L2Q+PC9hPiIpKQorCisgICAgICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgcmVsYXRpb25zaGlwcyBhcmUgaG9va2VkIHVwIGNvcnJlY3RseS4KKyAgICAgICAgYl90YWcgPSBzb3VwLmIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX3RhZy5uZXh0X3NpYmxpbmcsIG1hZ2ljX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWdpY190YWcucHJldmlvdXNfc2libGluZywgYl90YWcpCisKKyAgICAgICAgZmluZCA9IGJfdGFnLmZpbmQodGV4dD0iRmluZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZC5uZXh0X2VsZW1lbnQsIG1hZ2ljX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWdpY190YWcucHJldmlvdXNfZWxlbWVudCwgZmluZCkKKworICAgICAgICBjX3RhZyA9IHNvdXAuYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljX3RhZy5uZXh0X3NpYmxpbmcsIGNfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfdGFnLnByZXZpb3VzX3NpYmxpbmcsIG1hZ2ljX3RhZykKKworICAgICAgICB0aGUgPSBtYWdpY190YWcuZmluZCh0ZXh0PSJ0aGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZS5wYXJlbnQsIG1hZ2ljX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGUubmV4dF9lbGVtZW50LCBjX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3RhZy5wcmV2aW91c19lbGVtZW50LCB0aGUpCisKKyAgICBkZWYgdGVzdF9hcHBlbmRfY2hpbGRfdGhhdHNfYWxyZWFkeV9hdF90aGVfZW5kKHNlbGYpOgorICAgICAgICBkYXRhID0gIjxhPjxiPjwvYj48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNvdXAuYS5hcHBlbmQoc291cC5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNvdXAuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9tb3ZlX3RhZ190b19iZWdpbm5pbmdfb2ZfcGFyZW50KHNlbGYpOgorICAgICAgICBkYXRhID0gIjxhPjxiPjwvYj48Yz48L2M+PGQ+PC9kPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc291cC5hLmluc2VydCgwLCBzb3VwLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxhPjxkPjwvZD48Yj48L2I+PGM+PC9jPjwvYT4iLCBzb3VwLmRlY29kZSgpKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X3dvcmtzX29uX2VtcHR5X2VsZW1lbnRfdGFnKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgc3RyYW5nZSwgc2luY2UgbW9zdCBIVE1MIHBhcnNlcnMgZG9uJ3QgYWxsb3cKKyAgICAgICAgIyBtYXJrdXAgbGlrZSB0aGlzIHRvIGNvbWUgdGhyb3VnaC4gQnV0IGluIGdlbmVyYWwsIHdlIGRvbid0CisgICAgICAgICMga25vdyB3aGF0IHRoZSBwYXJzZXIgd291bGQgb3Igd291bGRuJ3QgaGF2ZSBhbGxvd2VkLCBzbworICAgICAgICAjIEknbSBsZXR0aW5nIHRoaXMgc3VjY2VlZCBmb3Igbm93LgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YnIvPiIpCisgICAgICAgIHNvdXAuYnIuaW5zZXJ0KDEsICJDb250ZW50cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNvdXAuYnIpLCAiPGJyPkNvbnRlbnRzPC9icj4iKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X2JlZm9yZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxiPmJhcjwvYj4iKQorICAgICAgICBzb3VwLmIuaW5zZXJ0X2JlZm9yZSgiQkFaIikKKyAgICAgICAgc291cC5hLmluc2VydF9iZWZvcmUoIlFVVVgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIlFVVVg8YT5mb288L2E+QkFaPGI+YmFyPC9iPiIpKQorCisgICAgICAgIHNvdXAuYS5pbnNlcnRfYmVmb3JlKHNvdXAuYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCJRVVVYPGI+YmFyPC9iPjxhPmZvbzwvYT5CQVoiKSkKKworICAgIGRlZiB0ZXN0X2luc2VydF9hZnRlcihzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxiPmJhcjwvYj4iKQorICAgICAgICBzb3VwLmIuaW5zZXJ0X2FmdGVyKCJCQVoiKQorICAgICAgICBzb3VwLmEuaW5zZXJ0X2FmdGVyKCJRVVVYIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCI8YT5mb288L2E+UVVVWDxiPmJhcjwvYj5CQVoiKSkKKyAgICAgICAgc291cC5iLmluc2VydF9hZnRlcihzb3VwLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiUVVVWDxiPmJhcjwvYj48YT5mb288L2E+QkFaIikpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfYWZ0ZXJfcmFpc2VzX2V4Y2VwdGlvbl9pZl9hZnRlcl9oYXNfbm9fbWVhbmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgdGFnID0gc291cC5uZXdfdGFnKCJhIikKKyAgICAgICAgc3RyaW5nID0gc291cC5uZXdfc3RyaW5nKCIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuaW5zZXJ0X2FmdGVyLCB0YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNvdXAuaW5zZXJ0X2FmdGVyLCB0YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhZy5pbnNlcnRfYWZ0ZXIsIHRhZykKKworICAgIGRlZiB0ZXN0X2luc2VydF9iZWZvcmVfcmFpc2VzX25vdGltcGxlbWVudGVkZXJyb3JfaWZfYmVmb3JlX2hhc19ub19tZWFuaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICB0YWcgPSBzb3VwLm5ld190YWcoImEiKQorICAgICAgICBzdHJpbmcgPSBzb3VwLm5ld19zdHJpbmcoIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5pbnNlcnRfYmVmb3JlLCB0YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNvdXAuaW5zZXJ0X2JlZm9yZSwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YWcuaW5zZXJ0X2JlZm9yZSwgdGFnKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV93aXRoKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKAorICAgICAgICAgICAgICAgICI8cD5UaGVyZSdzIDxiPm5vPC9iPiBidXNpbmVzcyBsaWtlIDxiPnNob3c8L2I+IGJ1c2luZXNzPC9wPiIpCisgICAgICAgIG5vLCBzaG93ID0gc291cC5maW5kX2FsbCgnYicpCisgICAgICAgIHNob3cucmVwbGFjZV93aXRoKG5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgICI8cD5UaGVyZSdzICBidXNpbmVzcyBsaWtlIDxiPm5vPC9iPiBidXNpbmVzczwvcD4iKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNob3cucGFyZW50LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vLnBhcmVudCwgc291cC5wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vLm5leHRfZWxlbWVudCwgIm5vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuby5uZXh0X3NpYmxpbmcsICIgYnVzaW5lc3MiKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV9maXJzdF9jaGlsZChzZWxmKToKKyAgICAgICAgZGF0YSA9ICI8YT48Yj48L2I+PGM+PC9jPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc291cC5iLnJlcGxhY2Vfd2l0aChzb3VwLmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxhPjxjPjwvYz48L2E+Iiwgc291cC5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfbGFzdF9jaGlsZChzZWxmKToKKyAgICAgICAgZGF0YSA9ICI8YT48Yj48L2I+PGM+PC9jPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc291cC5jLnJlcGxhY2Vfd2l0aChzb3VwLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxhPjxiPjwvYj48L2E+Iiwgc291cC5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF90YWdfcmVwbGFjZV93aXRoKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKAorICAgICAgICAgICAgIiIiPGE+V2U8Yj5yZXNlcnZlPGM+dGhlPC9jPjxkPnJpZ2h0PC9kPjwvYj48L2E+PGU+dG88Zj5yZWZ1c2U8L2Y+PGc+c2VydmljZTwvZz48L2U+IiIiKQorCisgICAgICAgICMgUmVwbGFjZSB0aGUgZW50aXJlIDxiPiB0YWcgYW5kIGl0cyBjb250ZW50cyAoInJlc2VydmUgdGhlCisgICAgICAgICMgcmlnaHQiKSB3aXRoIHRoZSA8Zj4gdGFnICgicmVmdXNlIikuCisgICAgICAgIHJlbW92ZV90YWcgPSBzb3VwLmIKKyAgICAgICAgbW92ZV90YWcgPSBzb3VwLmYKKyAgICAgICAgcmVtb3ZlX3RhZy5yZXBsYWNlX3dpdGgobW92ZV90YWcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgICI8YT5XZTxmPnJlZnVzZTwvZj48L2E+PGU+dG88Zz5zZXJ2aWNlPC9nPjwvZT4iKSkKKworICAgICAgICAjIFRoZSA8Yj4gdGFnIGlzIG5vdyBhbiBvcnBoYW4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3RhZy5wYXJlbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3RhZy5maW5kKHRleHQ9InJpZ2h0IikubmV4dF9lbGVtZW50LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV90YWcucHJldmlvdXNfZWxlbWVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfdGFnLm5leHRfc2libGluZywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfdGFnLnByZXZpb3VzX3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgIyBUaGUgPGY+IHRhZyBpcyBub3cgY29ubmVjdGVkIHRvIHRoZSA8YT4gdGFnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vdmVfdGFnLnBhcmVudCwgc291cC5hKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vdmVfdGFnLnByZXZpb3VzX2VsZW1lbnQsICJXZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW92ZV90YWcubmV4dF9lbGVtZW50Lm5leHRfZWxlbWVudCwgc291cC5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vdmVfdGFnLm5leHRfc2libGluZywgTm9uZSkKKworICAgICAgICAjIFRoZSBnYXAgd2hlcmUgdGhlIDxmPiB0YWcgdXNlZCB0byBiZSBoYXMgYmVlbiBtZW5kZWQsIGFuZAorICAgICAgICAjIHRoZSB3b3JkICJ0byIgaXMgbm93IGNvbm5lY3RlZCB0byB0aGUgPGc+IHRhZy4KKyAgICAgICAgdG9fdGV4dCA9IHNvdXAuZmluZCh0ZXh0PSJ0byIpCisgICAgICAgIGdfdGFnID0gc291cC5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9fdGV4dC5uZXh0X2VsZW1lbnQsIGdfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvX3RleHQubmV4dF9zaWJsaW5nLCBnX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnX3RhZy5wcmV2aW91c19lbGVtZW50LCB0b190ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdfdGFnLnByZXZpb3VzX3NpYmxpbmcsIHRvX3RleHQpCisKKyAgICBkZWYgdGVzdF91bndyYXAoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiCisgICAgICAgICAgICA8cD5Vbm5lZWRlZCA8ZW0+Zm9ybWF0dGluZzwvZW0+IGlzIHVubmVlZGVkPC9wPgorICAgICAgICAgICAgIiIiKQorICAgICAgICB0cmVlLmVtLnVud3JhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZS5lbSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLnAudGV4dCwgIlVubmVlZGVkIGZvcm1hdHRpbmcgaXMgdW5uZWVkZWQiKQorCisgICAgZGVmIHRlc3Rfd3JhcChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiSSB3aXNoIEkgd2FzIGJvbGQuIikKKyAgICAgICAgdmFsdWUgPSBzb3VwLnN0cmluZy53cmFwKHNvdXAubmV3X3RhZygiYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLmRlY29kZSgpLCAiPGI+SSB3aXNoIEkgd2FzIGJvbGQuPC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiPGI+SSB3aXNoIEkgd2FzIGJvbGQuPC9iPiIpKQorCisgICAgZGVmIHRlc3Rfd3JhcF9leHRyYWN0c190YWdfZnJvbV9lbHNld2hlcmUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPjwvYj5JIHdpc2ggSSB3YXMgYm9sZC4iKQorICAgICAgICBzb3VwLmIubmV4dF9zaWJsaW5nLndyYXAoc291cC5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIjxiPkkgd2lzaCBJIHdhcyBib2xkLjwvYj4iKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfcHV0c19uZXdfY29udGVudHNfYXRfdGhlX2VuZChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+SSBsaWtlIGJlaW5nIGJvbGQuPC9iPkkgd2lzaCBJIHdhcyBib2xkLiIpCisgICAgICAgIHNvdXAuYi5uZXh0X3NpYmxpbmcud3JhcChzb3VwLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNvdXAuYi5jb250ZW50cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPGI+SSBsaWtlIGJlaW5nIGJvbGQuSSB3aXNoIEkgd2FzIGJvbGQuPC9iPiIpKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICc8aHRtbD48Ym9keT5Tb21lIGNvbnRlbnQuIDxkaXYgaWQ9Im5hdiI+TmF2IGNyYXA8L2Rpdj4gTW9yZSBjb250ZW50LjwvYm9keT48L2h0bWw+JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLmJvZHkuY29udGVudHMpLCAzKQorICAgICAgICBleHRyYWN0ZWQgPSBzb3VwLmZpbmQoaWQ9Im5hdiIpLmV4dHJhY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCAiPGh0bWw+PGJvZHk+U29tZSBjb250ZW50LiAgTW9yZSBjb250ZW50LjwvYm9keT48L2h0bWw+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0ZWQuZGVjb2RlKCksICc8ZGl2IGlkPSJuYXYiPk5hdiBjcmFwPC9kaXY+JykKKworICAgICAgICAjIFRoZSBleHRyYWN0ZWQgdGFnIGlzIG5vdyBhbiBvcnBoYW4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXAuYm9keS5jb250ZW50cyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdGVkLnBhcmVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0ZWQucHJldmlvdXNfZWxlbWVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0ZWQubmV4dF9lbGVtZW50Lm5leHRfZWxlbWVudCwgTm9uZSkKKworICAgICAgICAjIFRoZSBnYXAgd2hlcmUgdGhlIGV4dHJhY3RlZCB0YWcgdXNlZCB0byBiZSBoYXMgYmVlbiBtZW5kZWQuCisgICAgICAgIGNvbnRlbnRfMSA9IHNvdXAuZmluZCh0ZXh0PSJTb21lIGNvbnRlbnQuICIpCisgICAgICAgIGNvbnRlbnRfMiA9IHNvdXAuZmluZCh0ZXh0PSIgTW9yZSBjb250ZW50LiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF8xLm5leHRfZWxlbWVudCwgY29udGVudF8yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfMS5uZXh0X3NpYmxpbmcsIGNvbnRlbnRfMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50XzIucHJldmlvdXNfZWxlbWVudCwgY29udGVudF8xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfMi5wcmV2aW91c19zaWJsaW5nLCBjb250ZW50XzEpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2Rpc3Rpbmd1aXNoZXNfYmV0d2Vlbl9pZGVudGljYWxfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxiPmJhcjwvYj4iKQorICAgICAgICBmb29fMSA9IHNvdXAuYS5zdHJpbmcKKyAgICAgICAgYmFyXzEgPSBzb3VwLmIuc3RyaW5nCisgICAgICAgIGZvb18yID0gc291cC5uZXdfc3RyaW5nKCJmb28iKQorICAgICAgICBiYXJfMiA9IHNvdXAubmV3X3N0cmluZygiYmFyIikKKyAgICAgICAgc291cC5hLmFwcGVuZChmb29fMikKKyAgICAgICAgc291cC5iLmFwcGVuZChiYXJfMikKKworICAgICAgICAjIE5vdyB0aGVyZSBhcmUgdHdvIGlkZW50aWNhbCBzdHJpbmdzIGluIHRoZSA8YT4gdGFnLCBhbmQgdHdvCisgICAgICAgICMgaW4gdGhlIDxiPiB0YWcuIExldCdzIHJlbW92ZSB0aGUgZmlyc3QgImZvbyIgYW5kIHRoZSBzZWNvbmQKKyAgICAgICAgIyAiYmFyIi4KKyAgICAgICAgZm9vXzEuZXh0cmFjdCgpCisgICAgICAgIGJhcl8yLmV4dHJhY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvb18yLCBzb3VwLmEuc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhcl8yLCBzb3VwLmIuc3RyaW5nKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgICIiIlRhZy5jbGVhcigpIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxwPjxhPlN0cmluZyA8ZW0+SXRhbGljaXplZDwvZW0+PC9hPiBhbmQgYW5vdGhlcjwvcD4iKQorICAgICAgICAjIGNsZWFyIHVzaW5nIGV4dHJhY3QoKQorICAgICAgICBhID0gc291cC5hCisgICAgICAgIHNvdXAucC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXAucC5jb250ZW50cyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJjb250ZW50cyIpKQorCisgICAgICAgICMgY2xlYXIgdXNpbmcgZGVjb21wb3NlKCkKKyAgICAgICAgZW0gPSBhLmVtCisgICAgICAgIGEuY2xlYXIoZGVjb21wb3NlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGVtLmNvbnRlbnRzKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19zZXQoc2VsZik6CisgICAgICAgICIiIlRhZy5zdHJpbmcgPSAnc3RyaW5nJyIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IDxiPjxjPjwvYz48L2I+IikKKyAgICAgICAgc291cC5hLnN0cmluZyA9ICJmb28iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLmNvbnRlbnRzLCBbImZvbyJdKQorICAgICAgICBzb3VwLmIuc3RyaW5nID0gImJhciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuY29udGVudHMsIFsiYmFyIl0pCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfc2V0X2RvZXNfbm90X2FmZmVjdF9vcmlnaW5hbF9zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjxiPmZvbzwvYj48Yz5iYXI8L2M+IikKKyAgICAgICAgc291cC5iLnN0cmluZyA9IHNvdXAuYy5zdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuZW5jb2RlKCksIGIiPGE+PGI+YmFyPC9iPjxjPmJhcjwvYz48L2E+IikKKworICAgIGRlZiB0ZXN0X3NldF9zdHJpbmdfcHJlc2VydmVzX2NsYXNzX29mX3N0cmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiIpCisgICAgICAgIGNkYXRhID0gQ0RhdGEoImZvbyIpCisgICAgICAgIHNvdXAuYS5zdHJpbmcgPSBjZGF0YQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzb3VwLmEuc3RyaW5nLCBDRGF0YSkpCisKK2NsYXNzIFRlc3RFbGVtZW50T2JqZWN0cyhTb3VwVGVzdCk6CisgICAgIiIiVGVzdCB2YXJpb3VzIGZlYXR1cmVzIG9mIGVsZW1lbnQgb2JqZWN0cy4iIiIKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgIiIiVGhlIGxlbmd0aCBvZiBhbiBlbGVtZW50IGlzIGl0cyBudW1iZXIgb2YgY2hpbGRyZW4uIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjx0b3A+MTxiPjI8L2I+MzwvdG9wPiIpCisKKyAgICAgICAgIyBUaGUgQmVhdXRpZnVsU291cCBvYmplY3QgaXRzZWxmIGNvbnRhaW5zIG9uZSBlbGVtZW50OiB0aGUKKyAgICAgICAgIyA8dG9wPiB0YWcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXAuY29udGVudHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwKSwgMSkKKworICAgICAgICAjIFRoZSA8dG9wPiB0YWcgY29udGFpbnMgdGhyZWUgZWxlbWVudHM6IHRoZSB0ZXh0IG5vZGUgIjEiLCB0aGUKKyAgICAgICAgIyA8Yj4gdGFnLCBhbmQgdGhlIHRleHQgbm9kZSAiMyIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXAudG9wKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cC50b3AuY29udGVudHMpLCAzKQorCisgICAgZGVmIHRlc3RfbWVtYmVyX2FjY2Vzc19pbnZva2VzX2ZpbmQoc2VsZik6CisgICAgICAgICIiIkFjY2Vzc2luZyBhIFB5dGhvbiBtZW1iZXIgLmZvbyBpbnZva2VzIGZpbmQoJ2ZvbycpIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxiPjxpPjwvaT48L2I+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIsIHNvdXAuZmluZCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5pLCBzb3VwLmZpbmQoJ2InKS5maW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLCBOb25lKQorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9tZW1iZXJfYWNjZXNzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8Yj48aT48L2k+PC9iPicpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICB0YWcgPSBzb3VwLmJUYWcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIsIHRhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICcuYlRhZyBpcyBkZXByZWNhdGVkLCB1c2UgLmZpbmQoImIiKSBpbnN0ZWFkLicsCisgICAgICAgICAgICBzdHIod1swXS5tZXNzYWdlKSkKKworICAgIGRlZiB0ZXN0X2hhc19hdHRyKHNlbGYpOgorICAgICAgICAiIiJoYXNfYXR0cigpIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGFuIGF0dHJpYnV0ZS4KKworICAgICAgICBQbGVhc2Ugbm90ZSBub3RlOiBoYXNfYXR0cigpIGlzIGRpZmZlcmVudCBmcm9tCisgICAgICAgIF9faW5fXy4gaGFzX2F0dHIoKSBjaGVja3MgdGhlIHRhZydzIGF0dHJpYnV0ZXMgYW5kIF9faW5fXworICAgICAgICBjaGVja3MgdGhlIHRhZydzIGNoaWRscmVuLgorICAgICAgICAiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGZvbyBhdHRyPSdiYXInPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VwLmZvby5oYXNfYXR0cignYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvdXAuZm9vLmhhc19hdHRyKCdhdHRyMicpKQorCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX2NvbWVfb3V0X2luX2FscGhhYmV0aWNhbF9vcmRlcihzZWxmKToKKyAgICAgICAgbWFya3VwID0gJzxiIGE9IjEiIHo9IjUiIG09IjMiIGY9IjIiIHk9IjQiPjwvYj4nCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyhtYXJrdXAsICc8YiBhPSIxIiBmPSIyIiBtPSIzIiB5PSI0IiB6PSI1Ij48L2I+JykKKworICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBBIHRhZyB0aGF0IGNvbnRhaW5zIG9ubHkgYSB0ZXh0IG5vZGUgbWFrZXMgdGhhdCBub2RlCisgICAgICAgICMgYXZhaWxhYmxlIGFzIC5zdHJpbmcuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPmZvbzwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5zdHJpbmcsICdmb28nKQorCisgICAgZGVmIHRlc3RfZW1wdHlfdGFnX2hhc19ub19zdHJpbmcoc2VsZik6CisgICAgICAgICMgQSB0YWcgd2l0aCBubyBjaGlsZHJlbiBoYXMgbm8gLnN0aXJuZy4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+PC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLnN0cmluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3RhZ193aXRoX211bHRpcGxlX2NoaWxkcmVuX2hhc19ub19zdHJpbmcoc2VsZik6CisgICAgICAgICMgQSB0YWcgd2l0aCBubyBjaGlsZHJlbiBoYXMgbm8gLnN0cmluZy4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPGI+PC9iPjxiPjwvYj48L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuc3RyaW5nLCBOb25lKQorCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzxiPjwvYj5iYXI8L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuc3RyaW5nLCBOb25lKQorCisgICAgICAgICMgRXZlbiBpZiBhbGwgdGhlIGNoaWxkcmVuIGFyZSBzdHJpbmdzLCBkdWUgdG8gdHJpY2tlcnksCisgICAgICAgICMgaXQgd29uJ3Qgd29yay0tYnV0IHRoaXMgd291bGQgYmUgYSBnb29kIG9wdGltaXphdGlvbi4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9iPiIpCisgICAgICAgIHNvdXAuYS5pbnNlcnQoMSwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLnN0cmluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3RhZ193aXRoX3JlY3Vyc2l2ZV9zdHJpbmdfaGFzX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBBIHRhZyB3aXRoIGEgc2luZ2xlIGNoaWxkIHdoaWNoIGhhcyBhIC5zdHJpbmcgaW5oZXJpdHMgdGhhdAorICAgICAgICAjIC5zdHJpbmcuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjxiPmZvbzwvYj48L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuc3RyaW5nLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLnN0cmluZywgImZvbyIpCisKKyAgICBkZWYgdGVzdF9sYWNrX29mX3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiT25seSBhIHRhZyBjb250YWluaW5nIGEgc2luZ2xlIHRleHQgbm9kZSBoYXMgYSAuc3RyaW5nLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj5mPGk+ZTwvaT5vPC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc291cC5iLnN0cmluZykKKworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj48L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb3VwLmIuc3RyaW5nKQorCisgICAgZGVmIHRlc3RfYWxsX3RleHQoc2VsZik6CisgICAgICAgICIiIlRhZy50ZXh0IGFuZCBUYWcuZ2V0X3RleHQoc2VwPXUiIikgLT4gYWxsIGNoaWxkIHRleHQsIGNvbmNhdGVuYXRlZCIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5hPGI+cjwvYj4gICA8cj4gdCA8L3I+PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLnRleHQsICJhciAgdCAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5nZXRfdGV4dChzdHJpcD1UcnVlKSwgImFydCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLmdldF90ZXh0KCIsIiksICJhLHIsICwgdCAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5nZXRfdGV4dCgiLCIsIHN0cmlwPVRydWUpLCAiYSxyLHQiKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaWdub3Jlc19jb21tZW50cyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiZm9vPCEtLUlHTk9SRS0tPmJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5nZXRfdGV4dCgpLCAiZm9vYmFyIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5nZXRfdGV4dCh0eXBlcz0oTmF2aWdhYmxlU3RyaW5nLCBDb21tZW50KSksICJmb29JR05PUkViYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5nZXRfdGV4dCh0eXBlcz1Ob25lKSwgImZvb0lHTk9SRWJhciIpCisKKyAgICBkZWYgdGVzdF9hbGxfc3RyaW5nc19pZ25vcmVzX2NvbW1lbnRzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJmb288IS0tSUdOT1JFLS0+YmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ2ZvbycsICdiYXInXSwgbGlzdChzb3VwLnN0cmluZ3MpKQorCitjbGFzcyBUZXN0Q0RBdGFMaXN0QXR0cmlidXRlcyhTb3VwVGVzdCk6CisKKyAgICAiIiJUZXN0aW5nIGNkYXRhLWxpc3QgYXR0cmlidXRlcyBsaWtlICdjbGFzcycuCisgICAgIiIiCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlX2JlY29tZXNfbGlzdChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGEgY2xhc3M9J2Zvbyc+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImZvbyJdLHNvdXAuYVsnY2xhc3MnXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3ZhbHVlc19iZWNvbWVzX2xpc3Qoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhIGNsYXNzPSdmb28gYmFyJz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiZm9vIiwgImJhciJdLCBzb3VwLmFbJ2NsYXNzJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV92YWx1ZXNfc2VwYXJhdGVkX2J5X3dlaXJkX3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhIGNsYXNzPSdmb29cdGJhclxuYmF6Jz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiZm9vIiwgImJhciIsICJiYXoiXSxzb3VwLmFbJ2NsYXNzJ10pCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX2pvaW5lZF9pbnRvX3N0cmluZ19vbl9vdXRwdXQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhIGNsYXNzPSdmb29cdGJhcic+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzxhIGNsYXNzPSJmb28gYmFyIj48L2E+Jywgc291cC5hLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3RfYWNjZXB0X2NoYXJzZXQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxmb3JtIGFjY2VwdC1jaGFyc2V0PSJJU08tODg1OS0xIFVURi04Ij4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSVNPLTg4NTktMScsICdVVEYtOCddLCBzb3VwLmZvcm1bJ2FjY2VwdC1jaGFyc2V0J10pCisKKyAgICBkZWYgdGVzdF9jZGF0YV9hdHRyaWJ1dGVfYXBwbHlpbmdfb25seV90b19vbmVfdGFnKHNlbGYpOgorICAgICAgICBkYXRhID0gJzxhIGFjY2VwdC1jaGFyc2V0PSJJU08tODg1OS0xIFVURi04Ij48L2E+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgICMgV2Ugc2F3IGluIGFub3RoZXIgdGVzdCB0aGF0IGFjY2VwdC1jaGFyc2V0IGlzIGEgY2RhdGEtbGlzdAorICAgICAgICAjIGF0dHJpYnV0ZSBmb3IgdGhlIDxmb3JtPiB0YWcuIEJ1dCBpdCdzIG5vdCBhIGNkYXRhLWxpc3QKKyAgICAgICAgIyBhdHRyaWJ1dGUgZm9yIGFueSBvdGhlciB0YWcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0lTTy04ODU5LTEgVVRGLTgnLCBzb3VwLmFbJ2FjY2VwdC1jaGFyc2V0J10pCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfaGFzX2ltbXV0YWJsZV9uYW1lX3Byb3BlcnR5KHNlbGYpOgorICAgICAgICBzdHJpbmcgPSBzZWxmLnNvdXAoInMiKS5zdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzdHJpbmcubmFtZSkKKyAgICAgICAgZGVmIHQoKToKKyAgICAgICAgICAgIHN0cmluZy5uYW1lID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHQpCisKK2NsYXNzIFRlc3RQZXJzaXN0ZW5jZShTb3VwVGVzdCk6CisgICAgIlRlc3RpbmcgZmVhdHVyZXMgbGlrZSBwaWNrbGUgYW5kIGRlZXBjb3B5LiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFBlcnNpc3RlbmNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYucGFnZSA9ICIiIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL3RyYW5zaXRpb25hbC5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5CZWF1dGlmdWwgU291cDogV2UgY2FsbGVkIGhpbSBUb3J0b2lzZSBiZWNhdXNlIGhlIHRhdWdodCB1cy48L3RpdGxlPgorPGxpbmsgcmV2PSJtYWRlIiBocmVmPSJtYWlsdG86bGVvbmFyZHJAc2VnZmF1bHQub3JnIj4KKzxtZXRhIG5hbWU9IkRlc2NyaXB0aW9uIiBjb250ZW50PSJCZWF1dGlmdWwgU291cDogYW4gSFRNTCBwYXJzZXIgb3B0aW1pemVkIGZvciBzY3JlZW4tc2NyYXBpbmcuIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iTWFya292IEFwcHJveGltYXRpb24gMS40IChtb2R1bGU6IGxlb25hcmRyKSI+Cis8bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9Ikxlb25hcmQgUmljaGFyZHNvbiI+Cis8L2hlYWQ+Cis8Ym9keT4KKzxhIGhyZWY9ImZvbyI+Zm9vPC9hPgorPGEgaHJlZj0iZm9vIj48Yj5iYXI8L2I+PC9hPgorPC9ib2R5PgorPC9odG1sPiIiIgorICAgICAgICBzZWxmLnRyZWUgPSBzZWxmLnNvdXAoc2VsZi5wYWdlKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2FuZF91bnBpY2tsZV9pZGVudGl0eShzZWxmKToKKyAgICAgICAgIyBQaWNrbGluZyBhIHRyZWUsIHRoZW4gdW5waWNrbGluZyBpdCwgeWllbGRzIGEgdHJlZSBpZGVudGljYWwKKyAgICAgICAgIyB0byB0aGUgb3JpZ2luYWwuCisgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyhzZWxmLnRyZWUsIDIpCisgICAgICAgIGxvYWRlZCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fY2xhc3NfXywgQmVhdXRpZnVsU291cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZGVjb2RlKCksIHNlbGYudHJlZS5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2lkZW50aXR5KHNlbGYpOgorICAgICAgICAjIE1ha2luZyBhIGRlZXBjb3B5IG9mIGEgdHJlZSB5aWVsZHMgYW4gaWRlbnRpY2FsIHRyZWUuCisgICAgICAgIGNvcGllZCA9IGNvcHkuZGVlcGNvcHkoc2VsZi50cmVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcGllZC5kZWNvZGUoKSwgc2VsZi50cmVlLmRlY29kZSgpKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9waWNrbGUoc2VsZik6CisgICAgICAgICMgQSB0cmVlIGNvbnRhaW5pbmcgVW5pY29kZSBjaGFyYWN0ZXJzIGNhbiBiZSBwaWNrbGVkLgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgZHVtcGVkID0gcGlja2xlLmR1bXBzKHNvdXAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQorICAgICAgICBsb2FkZWQgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5kZWNvZGUoKSwgc291cC5kZWNvZGUoKSkKKworCitjbGFzcyBUZXN0U3Vic3RpdHV0aW9ucyhTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2Zvcm1hdHRlcl9pc19taW5pbWFsKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlcj0ibWluaW1hbCIpCisgICAgICAgICMgVGhlIDwgaXMgY29udmVydGVkIGJhY2sgaW50byAmbHQ7IGJ1dCB0aGUgZS13aXRoLWFjdXRlIGlzIGxlZnQgYWxvbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLAorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX2h0bWwoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBkZWNvZGVkID0gc291cC5kZWNvZGUoZm9ybWF0dGVyPSJodG1sIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRlY29kZWQsCisgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2ZvcigiPGI+Jmx0OyZsdDtTYWNyJmVhY3V0ZTsgYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9taW5pbWFsKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlcj0ibWluaW1hbCIpCisgICAgICAgICMgVGhlIDwgaXMgY29udmVydGVkIGJhY2sgaW50byAmbHQ7IGJ1dCB0aGUgZS13aXRoLWFjdXRlIGlzIGxlZnQgYWxvbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLAorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX251bGwoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBkZWNvZGVkID0gc291cC5kZWNvZGUoZm9ybWF0dGVyPU5vbmUpCisgICAgICAgICMgTmVpdGhlciB0aGUgYW5nbGUgYnJhY2tldHMgbm9yIHRoZSBlLXdpdGgtYWN1dGUgYXJlIGNvbnZlcnRlZC4KKyAgICAgICAgIyBUaGlzIGlzIG5vdCB2YWxpZCBIVE1MLCBidXQgaXQncyB3aGF0IHRoZSB1c2VyIHdhbnRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2Zvcih1IjxiPjw8U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPj48L2I+IikpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfY3VzdG9tKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDtmb28mZ3Q7PC9iPjxiPmJhcjwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBkZWNvZGVkID0gc291cC5kZWNvZGUoZm9ybWF0dGVyID0gbGFtYmRhIHg6IHgudXBwZXIoKSkKKyAgICAgICAgIyBJbnN0ZWFkIG9mIG5vcm1hbCBlbnRpdHkgY29udmVyc2lvbiBjb2RlLCB0aGUgY3VzdG9tCisgICAgICAgICMgY2FsbGFibGUgaXMgY2FsbGVkIG9uIGV2ZXJ5IHN0cmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGRlY29kZWQsCisgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2Zvcih1IjxiPjxGT08+PC9iPjxiPkJBUjwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9pc19ydW5fb25fYXR0cmlidXRlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSc8YSBocmVmPSJodHRwOi8vYS5jb20/YT1iJmM9w6kiPmU8L2E+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgYSA9IHNvdXAuYQorCisgICAgICAgIGV4cGVjdF9taW5pbWFsID0gdSc8YSBocmVmPSJodHRwOi8vYS5jb20/YT1iJmFtcDtjPcOpIj5lPC9hPicKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF9taW5pbWFsLCBhLmRlY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF9taW5pbWFsLCBhLmRlY29kZShmb3JtYXR0ZXI9Im1pbmltYWwiKSkKKworICAgICAgICBleHBlY3RfaHRtbCA9IHUnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZhbXA7Yz0mZWFjdXRlOyI+ZTwvYT4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X2h0bWwsIGEuZGVjb2RlKGZvcm1hdHRlcj0iaHRtbCIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFya3VwLCBhLmRlY29kZShmb3JtYXR0ZXI9Tm9uZSkpCisgICAgICAgIGV4cGVjdF91cHBlciA9IHUnPGEgaHJlZj0iSFRUUDovL0EuQ09NP0E9QiZDPcOJIj5FPC9hPicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfdXBwZXIsIGEuZGVjb2RlKGZvcm1hdHRlcj1sYW1iZGEgeDogeC51cHBlcigpKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9za2lwc19zY3JpcHRfdGFnX2Zvcl9odG1sX2RvY3VtZW50cyhzZWxmKToKKyAgICAgICAgZG9jID0gIiIiCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgIGNvbnNvbGUubG9nKCI8IDwgaGV5ID4gPiAiKTsKKyAgPC9zY3JpcHQ+CisiIiIKKyAgICAgICAgZW5jb2RlZCA9IEJlYXV0aWZ1bFNvdXAoZG9jKS5lbmNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiI8IDwgaGV5ID4gPiIgaW4gZW5jb2RlZCkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9za2lwc19zdHlsZV90YWdfZm9yX2h0bWxfZG9jdW1lbnRzKHNlbGYpOgorICAgICAgICBkb2MgPSAiIiIKKyAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgIGNvbnNvbGUubG9nKCI8IDwgaGV5ID4gPiAiKTsKKyAgPC9zdHlsZT4KKyIiIgorICAgICAgICBlbmNvZGVkID0gQmVhdXRpZnVsU291cChkb2MpLmVuY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIjwgPCBoZXkgPiA+IiBpbiBlbmNvZGVkKQorCisgICAgZGVmIHRlc3RfcHJldHRpZnlfbGVhdmVzX3ByZWZvcm1hdHRlZF90ZXh0X2Fsb25lKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8ZGl2PiAgZm9vICA8cHJlPiAgXHRiYXJcbiAgXG4gIDwvcHJlPiAgYmF6ICAiKQorICAgICAgICAjIEV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGUgPHByZT4gdGFnIGlzIHJlZm9ybWF0dGVkLCBidXQgZXZlcnl0aGluZworICAgICAgICAjIGluc2lkZSBpcyBsZWZ0IGFsb25lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSc8ZGl2PlxuIGZvb1xuIDxwcmU+ICBcdGJhclxuICBcbiAgPC9wcmU+XG4gYmF6XG48L2Rpdj4nLAorICAgICAgICAgICAgc291cC5kaXYucHJldHRpZnkoKSkKKworICAgIGRlZiB0ZXN0X3ByZXR0aWZ5X2FjY2VwdHNfZm9ybWF0dGVyKHNlbGYpOgorICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cCgiPGh0bWw+PGJvZHk+Zm9vPC9ib2R5PjwvaHRtbD4iKQorICAgICAgICBwcmV0dHkgPSBzb3VwLnByZXR0aWZ5KGZvcm1hdHRlciA9IGxhbWJkYSB4OiB4LnVwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRk9PIiBpbiBwcmV0dHkpCisKKyAgICBkZWYgdGVzdF9wcmV0dGlmeV9vdXRwdXRzX3VuaWNvZGVfYnlfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSwgdHlwZShzb3VwLnByZXR0aWZ5KCkpKQorCisgICAgZGVmIHRlc3RfcHJldHRpZnlfY2FuX2VuY29kZV9kYXRhKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcywgdHlwZShzb3VwLnByZXR0aWZ5KCJ1dGYtOCIpKSkKKworICAgIGRlZiB0ZXN0X2h0bWxfZW50aXR5X3N1YnN0aXR1dGlvbl9vZmZfYnlfZGVmYXVsdChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZW5jb2RlZCA9IHNvdXAuYi5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVkLCBtYXJrdXAuZW5jb2RlKCd1dGYtOCcpKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmdfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICAjIEhlcmUncyB0aGUgPG1ldGE+IHRhZyBzYXlpbmcgdGhhdCBhIGRvY3VtZW50IGlzCisgICAgICAgICMgZW5jb2RlZCBpbiBTaGlmdC1KSVMuCisgICAgICAgIG1ldGFfdGFnID0gKCc8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9eC1zamlzIiAnCisgICAgICAgICAgICAgICAgICAgICdodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiLz4nKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1ldGFfdGFnKQorCisgICAgICAgICMgUGFyc2UgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGNoYXJzZXQgYXBwcmVhcnMgdW5jaGFuZ2VkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAubWV0YVsnY29udGVudCddLCAndGV4dC9odG1sOyBjaGFyc2V0PXgtc2ppcycpCisKKyAgICAgICAgIyBFbmNvZGUgdGhlIGRvY3VtZW50IGludG8gc29tZSBlbmNvZGluZywgYW5kIHRoZSBlbmNvZGluZyBpcworICAgICAgICAjIHN1YnN0aXR1dGVkIGludG8gdGhlIG1ldGEgdGFnLgorICAgICAgICB1dGZfOCA9IHNvdXAuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImNoYXJzZXQ9dXRmLTgiIGluIHV0Zl84KQorCisgICAgICAgIGV1Y19qcCA9IHNvdXAuZW5jb2RlKCJldWNfanAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJjaGFyc2V0PWV1Y19qcCIgaW4gZXVjX2pwKQorCisgICAgICAgIHNoaWZ0X2ppcyA9IHNvdXAuZW5jb2RlKCJzaGlmdC1qaXMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJjaGFyc2V0PXNoaWZ0LWppcyIgaW4gc2hpZnRfamlzKQorCisgICAgICAgIHV0Zl8xNl91ID0gc291cC5lbmNvZGUoInV0Zi0xNiIpLmRlY29kZSgidXRmLTE2IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJjaGFyc2V0PXV0Zi0xNiIgaW4gdXRmXzE2X3UpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19zdWJzdGl0dXRpb25fZG9lc250X2hhcHBlbl9pZl90YWdfaXNfc3RyYWluZWQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICgnPGhlYWQ+PG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXgtc2ppcyIgJworICAgICAgICAgICAgICAgICAgICAnaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIi8+PC9oZWFkPjxwcmU+Zm9vPC9wcmU+JykKKworICAgICAgICAjIEJlYXV0aWZ1bCBTb3VwIHVzZWQgdG8gdHJ5IHRvIHJld3JpdGUgdGhlIG1ldGEgdGFnIGV2ZW4gaWYgdGhlCisgICAgICAgICMgbWV0YSB0YWcgZ290IGZpbHRlcmVkIG91dCBieSB0aGUgc3RyYWluZXIuIFRoaXMgdGVzdCBtYWtlcworICAgICAgICAjIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4KKyAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIoJ3ByZScpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwLCBwYXJzZV9vbmx5PXN0cmFpbmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuY29udGVudHNbMF0ubmFtZSwgJ3ByZScpCisKK2NsYXNzIFRlc3RFbmNvZGluZyhTb3VwVGVzdCk6CisgICAgIiIiVGVzdCB0aGUgYWJpbGl0eSB0byBlbmNvZGUgb2JqZWN0cyBpbnRvIHN0cmluZ3MuIiIiCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3N0cmluZ19jYW5fYmVfZW5jb2RlZChzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLnN0cmluZy5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUiXE57U05PV01BTn0iLmVuY29kZSgidXRmLTgiKSkKKworICAgIGRlZiB0ZXN0X3RhZ19jb250YWluaW5nX3VuaWNvZGVfc3RyaW5nX2Nhbl9iZV9lbmNvZGVkKHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuYi5lbmNvZGUoInV0Zi04IiksIGh0bWwuZW5jb2RlKCJ1dGYtOCIpKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmdfc3Vic3RpdHV0ZXNfdW5yZWNvZ25pemVkX2NoYXJhY3RlcnNfYnlfZGVmYXVsdChzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLmVuY29kZSgiYXNjaWkiKSwgYiI8Yj4mIzk3MzE7PC9iPiIpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19jYW5fYmVfbWFkZV9zdHJpY3Qoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwgc291cC5lbmNvZGUsICJhc2NpaSIsIGVycm9ycz0ic3RyaWN0IikKKworICAgIGRlZiB0ZXN0X2RlY29kZV9jb250ZW50cyhzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJcTntTTk9XTUFOfSIsIHNvdXAuYi5kZWNvZGVfY29udGVudHMoKSkKKworICAgIGRlZiB0ZXN0X2VuY29kZV9jb250ZW50cyhzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1IlxOe1NOT1dNQU59Ii5lbmNvZGUoInV0ZjgiKSwgc291cC5iLmVuY29kZV9jb250ZW50cygKKyAgICAgICAgICAgICAgICBlbmNvZGluZz0idXRmOCIpKQorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9yZW5kZXJDb250ZW50cyhzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1IlxOe1NOT1dNQU59Ii5lbmNvZGUoInV0ZjgiKSwgc291cC5iLnJlbmRlckNvbnRlbnRzKCkpCisKK2NsYXNzIFRlc3ROYXZpZ2FibGVTdHJpbmdTdWJjbGFzc2VzKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X2NkYXRhKHNlbGYpOgorICAgICAgICAjIE5vbmUgb2YgdGhlIGN1cnJlbnQgYnVpbGRlcnMgdHVybiBDREFUQSBzZWN0aW9ucyBpbnRvIENEYXRhCisgICAgICAgICMgb2JqZWN0cywgYnV0IHlvdSBjYW4gY3JlYXRlIHRoZW0gbWFudWFsbHkuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIGNkYXRhID0gQ0RhdGEoImZvbyIpCisgICAgICAgIHNvdXAuaW5zZXJ0KDEsIGNkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwKSwgIjwhW0NEQVRBW2Zvb11dPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5maW5kKHRleHQ9ImZvbyIpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmNvbnRlbnRzWzBdLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2NkYXRhX2lzX25ldmVyX2Zvcm1hdHRlZChzZWxmKToKKyAgICAgICAgIiIiVGV4dCBpbnNpZGUgYSBDRGF0YSBvYmplY3QgaXMgcGFzc2VkIGludG8gdGhlIGZvcm1hdHRlci4KKworICAgICAgICBCdXQgdGhlIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLmNvdW50ID0gMAorICAgICAgICBkZWYgaW5jcmVtZW50KCphcmdzKToKKyAgICAgICAgICAgIHNlbGYuY291bnQgKz0gMQorICAgICAgICAgICAgcmV0dXJuICJCSVRURVIgRkFJTFVSRSIKKworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBjZGF0YSA9IENEYXRhKCI8Pjw+PD4iKQorICAgICAgICBzb3VwLmluc2VydCgxLCBjZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGIiPCFbQ0RBVEFbPD48Pjw+XV0+Iiwgc291cC5lbmNvZGUoZm9ybWF0dGVyPWluY3JlbWVudCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5jb3VudCkKKworICAgIGRlZiB0ZXN0X2RvY3R5cGVfZW5kc19pbl9uZXdsaW5lKHNlbGYpOgorICAgICAgICAjIFVubGlrZSBvdGhlciBOYXZpZ2FibGVTdHJpbmcgc3ViY2xhc3NlcywgYSBET0NUWVBFIGFsd2F5cyBlbmRzCisgICAgICAgICMgaW4gYSBuZXdsaW5lLgorICAgICAgICBkb2N0eXBlID0gRG9jdHlwZSgiZm9vIikKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgc291cC5pbnNlcnQoMSwgZG9jdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmVuY29kZSgpLCBiIjwhRE9DVFlQRSBmb28+XG4iKQorCisKK2NsYXNzIFRlc3RTb3VwU2VsZWN0b3IoVHJlZVRlc3QpOgorCisgICAgSFRNTCA9ICIiIgorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIgorImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UaGUgdGl0bGU8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJibGFoLmNzcyIgdHlwZT0idGV4dC9jc3MiIGlkPSJsMSI+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImZhbmN5Ij4KKzxkaXYgaWQ9ImlubmVyIj4KKzxoMSBpZD0iaGVhZGVyMSI+QW4gSDE8L2gxPgorPHA+U29tZSB0ZXh0PC9wPgorPHAgY2xhc3M9Im9uZXAiIGlkPSJwMSI+U29tZSBtb3JlIHRleHQ8L3A+Cis8aDIgaWQ9ImhlYWRlcjIiPkFuIEgyPC9oMj4KKzxwIGNsYXNzPSJjbGFzczEgY2xhc3MyIGNsYXNzMyIgaWQ9InBtdWx0aSI+QW5vdGhlcjwvcD4KKzxhIGhyZWY9Imh0dHA6Ly9ib2IuZXhhbXBsZS5vcmcvIiByZWw9ImZyaWVuZCBtZXQiIGlkPSJib2IiPkJvYjwvYT4KKzxoMiBpZD0iaGVhZGVyMyI+QW5vdGhlciBIMjwvaDI+Cis8YSBpZD0ibWUiIGhyZWY9Imh0dHA6Ly9zaW1vbndpbGxpc29uLm5ldC8iIHJlbD0ibWUiPm1lPC9hPgorPHNwYW4gY2xhc3M9InMxIj4KKzxhIGhyZWY9IiMiIGlkPSJzMWExIj5zcGFuMWExPC9hPgorPGEgaHJlZj0iIyIgaWQ9InMxYTIiPnNwYW4xYTIgPHNwYW4gaWQ9InMxYTJzMSI+dGVzdDwvc3Bhbj48L2E+Cis8c3BhbiBjbGFzcz0ic3BhbjIiPgorPGEgaHJlZj0iIyIgaWQ9InMyYTEiPnNwYW4yYTE8L2E+Cis8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BhbjMiPjwvc3Bhbj4KKzwvc3Bhbj4KKzwvZGl2PgorPHAgbGFuZz0iZW4iIGlkPSJsYW5nLWVuIj5FbmdsaXNoPC9wPgorPHAgbGFuZz0iZW4tZ2IiIGlkPSJsYW5nLWVuLWdiIj5FbmdsaXNoIFVLPC9wPgorPHAgbGFuZz0iZW4tdXMiIGlkPSJsYW5nLWVuLXVzIj5FbmdsaXNoIFVTPC9wPgorPHAgbGFuZz0iZnIiIGlkPSJsYW5nLWZyIj5GcmVuY2g8L3A+Cis8L2Rpdj4KKworPGRpdiBpZD0iZm9vdGVyIj4KKzwvZGl2PgorIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc291cCA9IEJlYXV0aWZ1bFNvdXAoc2VsZi5IVE1MKQorCisgICAgZGVmIGFzc2VydFNlbGVjdHMoc2VsZiwgc2VsZWN0b3IsIGV4cGVjdGVkX2lkcyk6CisgICAgICAgIGVsX2lkcyA9IFtlbFsnaWQnXSBmb3IgZWwgaW4gc2VsZi5zb3VwLnNlbGVjdChzZWxlY3RvcildCisgICAgICAgIGVsX2lkcy5zb3J0KCkKKyAgICAgICAgZXhwZWN0ZWRfaWRzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2lkcywgZWxfaWRzLAorICAgICAgICAgICAgIlNlbGVjdG9yICVzLCBleHBlY3RlZCBbJXNdLCBnb3QgWyVzXSIgJSAoCisgICAgICAgICAgICAgICAgc2VsZWN0b3IsICcsICcuam9pbihleHBlY3RlZF9pZHMpLCAnLCAnLmpvaW4oZWxfaWRzKQorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICBhc3NlcnRTZWxlY3QgPSBhc3NlcnRTZWxlY3RzCisKKyAgICBkZWYgYXNzZXJ0U2VsZWN0TXVsdGlwbGUoc2VsZiwgKnRlc3RzKToKKyAgICAgICAgZm9yIHNlbGVjdG9yLCBleHBlY3RlZF9pZHMgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdChzZWxlY3RvciwgZXhwZWN0ZWRfaWRzKQorCisgICAgZGVmIHRlc3Rfb25lX3RhZ19vbmUoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ3RpdGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0ubmFtZSwgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0uY29udGVudHMsIFt1J1RoZSB0aXRsZSddKQorCisgICAgZGVmIHRlc3Rfb25lX3RhZ19tYW55KHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAzKQorICAgICAgICBmb3IgZGl2IGluIGVsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2Lm5hbWUsICdkaXYnKQorCisgICAgZGVmIHRlc3RfdGFnX2luX3RhZ19vbmUoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiBkaXYnKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJ2RpdiBkaXYnLCBbJ2lubmVyJ10pCisKKyAgICBkZWYgdGVzdF90YWdfaW5fdGFnX21hbnkoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJ2h0bWwgZGl2JywgJ2h0bWwgYm9keSBkaXYnLCAnYm9keSBkaXYnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxlY3RvciwgWydtYWluJywgJ2lubmVyJywgJ2Zvb3RlciddKQorCisgICAgZGVmIHRlc3RfdGFnX25vX21hdGNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnNvdXAuc2VsZWN0KCdkZWwnKSksIDApCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3RhZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zb3VwLnNlbGVjdCwgJ3RhZyV0JykKKworICAgIGRlZiB0ZXN0X2hlYWRlcl90YWdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdoMScsIFsnaGVhZGVyMSddKSwKKyAgICAgICAgICAgICgnaDInLCBbJ2hlYWRlcjInLCAnaGVhZGVyMyddKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY2xhc3Nfb25lKHNlbGYpOgorICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCcub25lcCcsICdwLm9uZXAnLCAnaHRtbCBwLm9uZXAnKToKKyAgICAgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3Qoc2VsZWN0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0ubmFtZSwgJ3AnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF1bJ2NsYXNzJ10sIFsnb25lcCddKQorCisgICAgZGVmIHRlc3RfY2xhc3NfbWlzbWF0Y2hlZF90YWcoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2Rpdi5vbmVwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMCkKKworICAgIGRlZiB0ZXN0X29uZV9pZChzZWxmKToKKyAgICAgICAgZm9yIHNlbGVjdG9yIGluICgnZGl2I2lubmVyJywgJyNpbm5lcicsICdkaXYgZGl2I2lubmVyJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsnaW5uZXInXSkKKworICAgIGRlZiB0ZXN0X2JhZF9pZChzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnI2RvZXNub3RleGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDApCisKKyAgICBkZWYgdGVzdF9pdGVtc19pbl9pZChzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2I2lubmVyIHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAzKQorICAgICAgICBmb3IgZWwgaW4gZWxzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbC5uYW1lLCAncCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzFdWydjbGFzcyddLCBbJ29uZXAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbHNbMF0uaGFzX2F0dHIoJ2NsYXNzJykpCisKKyAgICBkZWYgdGVzdF9hX2J1bmNoX29mX2VtcHR5cyhzZWxmKToKKyAgICAgICAgZm9yIHNlbGVjdG9yIGluICgnZGl2I21haW4gZGVsJywgJ2RpdiNtYWluIGRpdi5vb3BzJywgJ2RpdiBkaXYjbWFpbicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zb3VwLnNlbGVjdChzZWxlY3RvcikpLCAwKQorCisgICAgZGVmIHRlc3RfbXVsdGlfY2xhc3Nfc3VwcG9ydChzZWxmKToKKyAgICAgICAgZm9yIHNlbGVjdG9yIGluICgnLmNsYXNzMScsICdwLmNsYXNzMScsICcuY2xhc3MyJywgJ3AuY2xhc3MyJywKKyAgICAgICAgICAgICcuY2xhc3MzJywgJ3AuY2xhc3MzJywgJ2h0bWwgcC5jbGFzczInLCAnZGl2I2lubmVyIC5jbGFzczInKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxlY3RvciwgWydwbXVsdGknXSkKKworICAgIGRlZiB0ZXN0X211bHRpX2NsYXNzX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgZm9yIHNlbGVjdG9yIGluICgnLmNsYXNzMS5jbGFzczMnLCAnLmNsYXNzMy5jbGFzczInLAorICAgICAgICAgICAgICAgICAgICAgICAgICcuY2xhc3MxLmNsYXNzMi5jbGFzczMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxlY3RvciwgWydwbXVsdGknXSkKKworICAgIGRlZiB0ZXN0X2NoaWxkX3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJy5zMSA+IGEnLCBbJ3MxYTEnLCAnczFhMiddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJy5zMSA+IGEgc3BhbicsIFsnczFhMnMxJ10pCisKKyAgICBkZWYgdGVzdF9jaGlsZF9zZWxlY3Rvcl9pZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcuczEgPiBhI3MxYTIgc3BhbicsIFsnczFhMnMxJ10pCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZXF1YWxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdwW2NsYXNzPSJvbmVwIl0nLCBbJ3AxJ10pLAorICAgICAgICAgICAgKCdwW2lkPSJwMSJdJywgWydwMSddKSwKKyAgICAgICAgICAgICgnW2NsYXNzPSJvbmVwIl0nLCBbJ3AxJ10pLAorICAgICAgICAgICAgKCdbaWQ9InAxIl0nLCBbJ3AxJ10pLAorICAgICAgICAgICAgKCdsaW5rW3JlbD0ic3R5bGVzaGVldCJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1t0eXBlPSJ0ZXh0L2NzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmPSJibGFoLmNzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmPSJuby1ibGFoLmNzcyJdJywgW10pLAorICAgICAgICAgICAgKCdbcmVsPSJzdHlsZXNoZWV0Il0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdbdHlwZT0idGV4dC9jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ1tocmVmPSJibGFoLmNzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnW2hyZWY9Im5vLWJsYWguY3NzIl0nLCBbXSksCisgICAgICAgICAgICAoJ3BbaHJlZj0ibm8tYmxhaC5jc3MiXScsIFtdKSwKKyAgICAgICAgICAgICgnW2hyZWY9Im5vLWJsYWguY3NzIl0nLCBbXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV90aWxkZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgncFtjbGFzc349ImNsYXNzMSJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ3BbY2xhc3N+PSJjbGFzczIiXScsIFsncG11bHRpJ10pLAorICAgICAgICAgICAgKCdwW2NsYXNzfj0iY2xhc3MzIl0nLCBbJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgnW2NsYXNzfj0iY2xhc3MxIl0nLCBbJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgnW2NsYXNzfj0iY2xhc3MyIl0nLCBbJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgnW2NsYXNzfj0iY2xhc3MzIl0nLCBbJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgnYVtyZWx+PSJmcmllbmQiXScsIFsnYm9iJ10pLAorICAgICAgICAgICAgKCdhW3JlbH49Im1ldCJdJywgWydib2InXSksCisgICAgICAgICAgICAoJ1tyZWx+PSJmcmllbmQiXScsIFsnYm9iJ10pLAorICAgICAgICAgICAgKCdbcmVsfj0ibWV0Il0nLCBbJ2JvYiddKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX3N0YXJ0c3dpdGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ1tyZWxePSJzdHlsZSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tyZWxePSJzdHlsZSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbm90bGlua1tyZWxePSJub3RzdHlsZSJdJywgW10pLAorICAgICAgICAgICAgKCdbcmVsXj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnbGlua1tyZWxePSJub3RzdHlsZSJdJywgW10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWZePSJibGEiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2FbaHJlZl49Imh0dHA6Ly8iXScsIFsnYm9iJywgJ21lJ10pLAorICAgICAgICAgICAgKCdbaHJlZl49Imh0dHA6Ly8iXScsIFsnYm9iJywgJ21lJ10pLAorICAgICAgICAgICAgKCdbaWRePSJwIl0nLCBbJ3BtdWx0aScsICdwMSddKSwKKyAgICAgICAgICAgICgnW2lkXj0ibSJdJywgWydtZScsICdtYWluJ10pLAorICAgICAgICAgICAgKCdkaXZbaWRePSJtIl0nLCBbJ21haW4nXSksCisgICAgICAgICAgICAoJ2FbaWRePSJtIl0nLCBbJ21lJ10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZW5kc3dpdGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ1tocmVmJD0iLmNzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmJD0iLmNzcyJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tpZCQ9IjEiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ1tpZCQ9IjEiXScsIFsnbDEnLCAncDEnLCAnaGVhZGVyMScsICdzMWExJywgJ3MyYTEnLCAnczFhMnMxJ10pLAorICAgICAgICAgICAgKCdkaXZbaWQkPSIxIl0nLCBbXSksCisgICAgICAgICAgICAoJ1tpZCQ9Im5vZW5kaW5nIl0nLCBbXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9jb250YWlucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICMgRnJvbSB0ZXN0X2F0dHJpYnV0ZV9zdGFydHN3aXRoCisgICAgICAgICAgICAoJ1tyZWwqPSJzdHlsZSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbGlua1tyZWwqPSJzdHlsZSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnbm90bGlua1tyZWwqPSJub3RzdHlsZSJdJywgW10pLAorICAgICAgICAgICAgKCdbcmVsKj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnbGlua1tyZWwqPSJub3RzdHlsZSJdJywgW10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWYqPSJibGEiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2FbaHJlZio9Imh0dHA6Ly8iXScsIFsnYm9iJywgJ21lJ10pLAorICAgICAgICAgICAgKCdbaHJlZio9Imh0dHA6Ly8iXScsIFsnYm9iJywgJ21lJ10pLAorICAgICAgICAgICAgKCdbaWQqPSJwIl0nLCBbJ3BtdWx0aScsICdwMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkKj0ibSJdJywgWydtYWluJ10pLAorICAgICAgICAgICAgKCdhW2lkKj0ibSJdJywgWydtZSddKSwKKyAgICAgICAgICAgICMgRnJvbSB0ZXN0X2F0dHJpYnV0ZV9lbmRzd2l0aAorICAgICAgICAgICAgKCdbaHJlZio9Ii5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZio9Ii5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaWQqPSIxIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdbaWQqPSIxIl0nLCBbJ2wxJywgJ3AxJywgJ2hlYWRlcjEnLCAnczFhMScsICdzMWEyJywgJ3MyYTEnLCAnczFhMnMxJ10pLAorICAgICAgICAgICAgKCdkaXZbaWQqPSIxIl0nLCBbXSksCisgICAgICAgICAgICAoJ1tpZCo9Im5vZW5kaW5nIl0nLCBbXSksCisgICAgICAgICAgICAjIE5ldyBmb3IgdGhpcyB0ZXN0CisgICAgICAgICAgICAoJ1tocmVmKj0iLiJdJywgWydib2InLCAnbWUnLCAnbDEnXSksCisgICAgICAgICAgICAoJ2FbaHJlZio9Ii4iXScsIFsnYm9iJywgJ21lJ10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWYqPSIuIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdkaXZbaWQqPSJuIl0nLCBbJ21haW4nLCAnaW5uZXInXSksCisgICAgICAgICAgICAoJ2RpdltpZCo9Im5uIl0nLCBbJ2lubmVyJ10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZXhhY3Rfb3JfaHlwZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ3BbbGFuZ3w9ImVuIl0nLCBbJ2xhbmctZW4nLCAnbGFuZy1lbi1nYicsICdsYW5nLWVuLXVzJ10pLAorICAgICAgICAgICAgKCdbbGFuZ3w9ImVuIl0nLCBbJ2xhbmctZW4nLCAnbGFuZy1lbi1nYicsICdsYW5nLWVuLXVzJ10pLAorICAgICAgICAgICAgKCdwW2xhbmd8PSJmciJdJywgWydsYW5nLWZyJ10pLAorICAgICAgICAgICAgKCdwW2xhbmd8PSJnYiJdJywgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZXhpc3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdbcmVsXScsIFsnbDEnLCAnYm9iJywgJ21lJ10pLAorICAgICAgICAgICAgKCdsaW5rW3JlbF0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdhW3JlbF0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2xhbmddJywgWydsYW5nLWVuJywgJ2xhbmctZW4tZ2InLCAnbGFuZy1lbi11cycsICdsYW5nLWZyJ10pLAorICAgICAgICAgICAgKCdwW2NsYXNzXScsIFsncDEnLCAncG11bHRpJ10pLAorICAgICAgICAgICAgKCdbYmxhaF0nLCBbXSksCisgICAgICAgICAgICAoJ3BbYmxhaF0nLCBbXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X250aF9vZl90eXBlKHNlbGYpOgorICAgICAgICAjIFRyeSB0byBzZWxlY3QgZmlyc3QgcGFyYWdyYXBoCisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciBwOm50aC1vZi10eXBlKDEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbHNbMF0uc3RyaW5nLCB1J1NvbWUgdGV4dCcpCisKKyAgICAgICAgIyBUcnkgdG8gc2VsZWN0IHRoaXJkIHBhcmFncmFwaAorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgcDpudGgtb2YtdHlwZSgzKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLnN0cmluZywgdSdBbm90aGVyJykKKworICAgICAgICAjIFRyeSB0byBzZWxlY3QgKG5vbi1leGlzdGVudCEpIGZvdXJ0aCBwYXJhZ3JhcGgKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2I2lubmVyIHA6bnRoLW9mLXR5cGUoNCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAwKQorCisgICAgICAgICMgUGFzcyBpbiBhbiBpbnZhbGlkIHZhbHVlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYuc291cC5zZWxlY3QsICdkaXYgcDpudGgtb2YtdHlwZSgwKScpCisKKyAgICBkZWYgdGVzdF9udGhfb2ZfdHlwZV9kaXJlY3RfZGVzY2VuZGFudChzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2I2lubmVyID4gcDpudGgtb2YtdHlwZSgxKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLnN0cmluZywgdSdTb21lIHRleHQnKQorCisgICAgZGVmIHRlc3RfaWRfY2hpbGRfc2VsZWN0b3JfbnRoX29mX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI2lubmVyID4gcDpudGgtb2YtdHlwZSgyKScsIFsncDEnXSkKKworICAgIGRlZiB0ZXN0X3NlbGVjdF9vbl9lbGVtZW50KHNlbGYpOgorICAgICAgICAjIE90aGVyIHRlc3RzIG9wZXJhdGUgb24gdGhlIHRyZWU7IHRoaXMgb3BlcmF0ZXMgb24gYW4gZWxlbWVudAorICAgICAgICAjIHdpdGhpbiB0aGUgdHJlZS4KKyAgICAgICAgaW5uZXIgPSBzZWxmLnNvdXAuZmluZCgiZGl2IiwgaWQ9Im1haW4iKQorICAgICAgICBzZWxlY3RlZCA9IGlubmVyLnNlbGVjdCgiZGl2IikKKyAgICAgICAgIyBUaGUgPGRpdiBpZD0iaW5uZXIiPiB0YWcgd2FzIHNlbGVjdGVkLiBUaGUgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgIyB0YWcgd2FzIG5vdC4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKHNlbGVjdGVkLCBbJ2lubmVyJ10pCisKKyAgICBkZWYgdGVzdF9vdmVyc3BlY2lmaWVkX2NoaWxkX2lkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoIi5mYW5jeSAjaW5uZXIiLCBbJ2lubmVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygiLm5vcm1hbCAjaW5uZXIiLCBbXSkKKworICAgIGRlZiB0ZXN0X2FkamFjZW50X3NpYmxpbmdfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxICsgaDInLCBbJ2hlYWRlcjInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgKyBoMiArIHAnLCBbJ3BtdWx0aSddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSArICNoZWFkZXIyICsgLmNsYXNzMScsIFsncG11bHRpJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNlbGYuc291cC5zZWxlY3QoJyNwMSArIHAnKSkKKworICAgIGRlZiB0ZXN0X2dlbmVyYWxfc2libGluZ19zZWxlY3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgfiBoMicsIFsnaGVhZGVyMicsICdoZWFkZXIzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxIH4gI2hlYWRlcjInLCBbJ2hlYWRlcjInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgfiBoMiArIGEnLCBbJ21lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxIH4gaDIgKyBbcmVsPSJtZSJdJywgWydtZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzZWxmLnNvdXAuc2VsZWN0KCcjaW5uZXIgfiBoMicpKQorCisgICAgZGVmIHRlc3RfZGFuZ2xpbmdfY29tYmluYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zb3VwLnNlbGVjdCwgJ2gxID4nKQorCisgICAgZGVmIHRlc3Rfc2libGluZ19jb21iaW5hdG9yX3dvbnRfc2VsZWN0X3NhbWVfdGFnX3R3aWNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJ3BbbGFuZ10gfiBwJywgWydsYW5nLWVuLWdiJywgJ2xhbmctZW4tdXMnLCAnbGFuZy1mciddKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9jb2RlZ2VuLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9jb2RlZ2VuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzcyZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL2NvZGVnZW4ucHkKQEAgLTAsMCArMSw1NzAgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisiIiIKKyAgICBjb2RlZ2VuCisgICAgfn5+fn5+fgorCisgICAgRXh0ZW5zaW9uIHRvIGFzdCB0aGF0IGFsbG93IGFzdCAtPiBweXRob24gY29kZSBnZW5lcmF0aW9uLgorCisgICAgOmNvcHlyaWdodDogQ29weXJpZ2h0IDIwMDggYnkgQXJtaW4gUm9uYWNoZXIuCisgICAgOmxpY2Vuc2U6IEJTRC4KKyIiIgorZnJvbSBhc3QgaW1wb3J0ICoKKworQk9PTE9QX1NZTUJPTFMgPSB7CisgICAgQW5kOiAgICAgICAgJ2FuZCcsCisgICAgT3I6ICAgICAgICAgJ29yJworfQorCitCSU5PUF9TWU1CT0xTID0geworICAgIEFkZDogICAgICAgICcrJywKKyAgICBTdWI6ICAgICAgICAnLScsCisgICAgTXVsdDogICAgICAgJyonLAorICAgIERpdjogICAgICAgICcvJywKKyAgICBGbG9vckRpdjogICAnLy8nLAorICAgIE1vZDogICAgICAgICclJywKKyAgICBMU2hpZnQ6ICAgICAnPDwnLAorICAgIFJTaGlmdDogICAgICc+PicsCisgICAgQml0T3I6ICAgICAgJ3wnLAorICAgIEJpdEFuZDogICAgICcmJywKKyAgICBCaXRYb3I6ICAgICAnXicKK30KKworQ01QT1BfU1lNQk9MUyA9IHsKKyAgICBFcTogICAgICAgICAnPT0nLAorICAgIEd0OiAgICAgICAgICc+JywKKyAgICBHdEU6ICAgICAgICAnPj0nLAorICAgIEluOiAgICAgICAgICdpbicsCisgICAgSXM6ICAgICAgICAgJ2lzJywKKyAgICBJc05vdDogICAgICAnaXMgbm90JywKKyAgICBMdDogICAgICAgICAnPCcsCisgICAgTHRFOiAgICAgICAgJzw9JywKKyAgICBOb3RFcTogICAgICAnIT0nLAorICAgIE5vdEluOiAgICAgICdub3QgaW4nCit9CisKK1VOQVJZT1BfU1lNQk9MUyA9IHsKKyAgICBJbnZlcnQ6ICAgICAnficsCisgICAgTm90OiAgICAgICAgJ25vdCcsCisgICAgVUFkZDogICAgICAgJysnLAorICAgIFVTdWI6ICAgICAgICctJworfQorCitBTExfU1lNQk9MUyA9IHt9CitBTExfU1lNQk9MUy51cGRhdGUoQk9PTE9QX1NZTUJPTFMpCitBTExfU1lNQk9MUy51cGRhdGUoQklOT1BfU1lNQk9MUykKK0FMTF9TWU1CT0xTLnVwZGF0ZShDTVBPUF9TWU1CT0xTKQorQUxMX1NZTUJPTFMudXBkYXRlKFVOQVJZT1BfU1lNQk9MUykKKworZGVmIHRvX3NvdXJjZShub2RlLCBpbmRlbnRfd2l0aD0nICcgKiA0LCBhZGRfbGluZV9pbmZvcm1hdGlvbj1GYWxzZSk6CisgICAgIiIiVGhpcyBmdW5jdGlvbiBjYW4gY29udmVydCBhIG5vZGUgdHJlZSBiYWNrIGludG8gcHl0aG9uIHNvdXJjZWNvZGUuCisgICAgVGhpcyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgZXNwZWNpYWxseSBpZiB5b3UncmUgZGVhbGluZyB3aXRoCisgICAgY3VzdG9tIGFzdHMgbm90IGdlbmVyYXRlZCBieSBweXRob24gaXRzZWxmLgorCisgICAgSXQgY291bGQgYmUgdGhhdCB0aGUgc291cmNlY29kZSBpcyBldmFsdWFibGUgd2hlbiB0aGUgQVNUIGl0c2VsZiBpcyBub3QKKyAgICBjb21waWxhYmxlIC8gZXZhbHVhYmxlLiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBBU1QgY29udGFpbnMgc29tZQorICAgIG1vcmUgZGF0YSB0aGFuIHJlZ3VsYXIgc291cmNlY29kZSBkb2VzLCB3aGljaCBpcyBkcm9wcGVkIGR1cmluZworICAgIGNvbnZlcnNpb24uCisKKyAgICBFYWNoIGxldmVsIG9mIGluZGVudGF0aW9uIGlzIHJlcGxhY2VkIHdpdGggYGluZGVudF93aXRoYC4gIFBlciBkZWZhdWx0IHRoaXMKKyAgICBwYXJhbWV0ZXIgaXMgZXF1YWwgdG8gZm91ciBzcGFjZXMgYXMgc3VnZ2VzdGVkIGJ5IFBFUCA4LCBidXQgaXQgbWlnaHQgYmUKKyAgICBhZGp1c3RlZCB0byBtYXRjaCB0aGUgYXBwbGljYXRpb24ncyBzdHlsZWd1aWRlLgorCisgICAgSWYgYGFkZF9saW5lX2luZm9ybWF0aW9uYCBpcyBzZXQgdG8gYFRydWVgIGNvbW1lbnRzIGZvciB0aGUgbGluZSBudW1iZXJzCisgICAgb2YgdGhlIG5vZGVzIGFyZSBhZGRlZCB0byB0aGUgb3V0cHV0LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBzcG90IHdyb25nIGxpbmUKKyAgICBudW1iZXIgaW5mb3JtYXRpb24gb2Ygc3RhdGVtZW50IG5vZGVzLgorICAgICIiIgorICAgIGdlbmVyYXRvciA9IFNvdXJjZUdlbmVyYXRvcihpbmRlbnRfd2l0aCwgYWRkX2xpbmVfaW5mb3JtYXRpb24pCisgICAgZ2VuZXJhdG9yLnZpc2l0KG5vZGUpCisgICAgcmV0dXJuICcnLmpvaW4oZ2VuZXJhdG9yLnJlc3VsdCkKKworCitjbGFzcyBTb3VyY2VHZW5lcmF0b3IoTm9kZVZpc2l0b3IpOgorICAgICIiIlRoaXMgdmlzaXRvciBpcyBhYmxlIHRvIHRyYW5zZm9ybSBhIHdlbGwgZm9ybWVkIHN5bnRheCB0cmVlIGludG8gcHl0aG9uCisgICAgc291cmNlY29kZS4gIEZvciBtb3JlIGRldGFpbHMgaGF2ZSBhIGxvb2sgYXQgdGhlIGRvY3N0cmluZyBvZiB0aGUKKyAgICBgbm9kZV90b19zb3VyY2VgIGZ1bmN0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudF93aXRoLCBhZGRfbGluZV9pbmZvcm1hdGlvbj1GYWxzZSk6CisgICAgICAgIHNlbGYucmVzdWx0ID0gW10KKyAgICAgICAgc2VsZi5pbmRlbnRfd2l0aCA9IGluZGVudF93aXRoCisgICAgICAgIHNlbGYuYWRkX2xpbmVfaW5mb3JtYXRpb24gPSBhZGRfbGluZV9pbmZvcm1hdGlvbgorICAgICAgICBzZWxmLmluZGVudGF0aW9uID0gMAorICAgICAgICBzZWxmLm5ld19saW5lcyA9IDAKKworICAgIGRlZiB3cml0ZShzZWxmLCB4KToKKyAgICAgICAgaWYgc2VsZi5uZXdfbGluZXM6CisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdDoKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdC5hcHBlbmQoJ1xuJyAqIHNlbGYubmV3X2xpbmVzKQorICAgICAgICAgICAgc2VsZi5yZXN1bHQuYXBwZW5kKHNlbGYuaW5kZW50X3dpdGggKiBzZWxmLmluZGVudGF0aW9uKQorICAgICAgICAgICAgc2VsZi5uZXdfbGluZXMgPSAwCisgICAgICAgIHNlbGYucmVzdWx0LmFwcGVuZCh4KQorCisgICAgZGVmIG5ld2xpbmUoc2VsZiwgbm9kZT1Ob25lLCBleHRyYT0wKToKKyAgICAgICAgc2VsZi5uZXdfbGluZXMgPSBtYXgoc2VsZi5uZXdfbGluZXMsIDEgKyBleHRyYSkKKyAgICAgICAgaWYgbm9kZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5hZGRfbGluZV9pbmZvcm1hdGlvbjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyMgbGluZTogJXMnICUgbm9kZS5saW5lbm8pCisgICAgICAgICAgICBzZWxmLm5ld19saW5lcyA9IDEKKworICAgIGRlZiBib2R5KHNlbGYsIHN0YXRlbWVudHMpOgorICAgICAgICBzZWxmLm5ld19saW5lID0gVHJ1ZQorICAgICAgICBzZWxmLmluZGVudGF0aW9uICs9IDEKKyAgICAgICAgZm9yIHN0bXQgaW4gc3RhdGVtZW50czoKKyAgICAgICAgICAgIHNlbGYudmlzaXQoc3RtdCkKKyAgICAgICAgc2VsZi5pbmRlbnRhdGlvbiAtPSAxCisKKyAgICBkZWYgYm9keV9vcl9lbHNlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorICAgICAgICBpZiBub2RlLm9yZWxzZToKKyAgICAgICAgICAgIHNlbGYubmV3bGluZSgpCisgICAgICAgICAgICBzZWxmLndyaXRlKCdlbHNlOicpCisgICAgICAgICAgICBzZWxmLmJvZHkobm9kZS5vcmVsc2UpCisKKyAgICBkZWYgc2lnbmF0dXJlKHNlbGYsIG5vZGUpOgorICAgICAgICB3YW50X2NvbW1hID0gW10KKyAgICAgICAgZGVmIHdyaXRlX2NvbW1hKCk6CisgICAgICAgICAgICBpZiB3YW50X2NvbW1hOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2FudF9jb21tYS5hcHBlbmQoVHJ1ZSkKKworICAgICAgICBwYWRkaW5nID0gW05vbmVdICogKGxlbihub2RlLmFyZ3MpIC0gbGVuKG5vZGUuZGVmYXVsdHMpKQorICAgICAgICBmb3IgYXJnLCBkZWZhdWx0IGluIHppcChub2RlLmFyZ3MsIHBhZGRpbmcgKyBub2RlLmRlZmF1bHRzKToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYudmlzaXQoYXJnKQorICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCc9JykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGRlZmF1bHQpCisgICAgICAgIGlmIG5vZGUudmFyYXJnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi53cml0ZSgnKicgKyBub2RlLnZhcmFyZykKKyAgICAgICAgaWYgbm9kZS5rd2FyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyoqJyArIG5vZGUua3dhcmcpCisKKyAgICBkZWYgZGVjb3JhdG9ycyhzZWxmLCBub2RlKToKKyAgICAgICAgZm9yIGRlY29yYXRvciBpbiBub2RlLmRlY29yYXRvcl9saXN0OgorICAgICAgICAgICAgc2VsZi5uZXdsaW5lKGRlY29yYXRvcikKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJ0AnKQorICAgICAgICAgICAgc2VsZi52aXNpdChkZWNvcmF0b3IpCisKKyAgICAjIFN0YXRlbWVudHMKKworICAgIGRlZiB2aXNpdF9Bc3NpZ24oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBmb3IgaWR4LCB0YXJnZXQgaW4gZW51bWVyYXRlKG5vZGUudGFyZ2V0cyk6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdCh0YXJnZXQpCisgICAgICAgIHNlbGYud3JpdGUoJyA9ICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9BdWdBc3NpZ24oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGFyZ2V0KQorICAgICAgICBzZWxmLndyaXRlKEJJTk9QX1NZTUJPTFNbdHlwZShub2RlLm9wKV0gKyAnPScpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9JbXBvcnRGcm9tKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZnJvbSAlcyVzIGltcG9ydCAnICUgKCcuJyAqIG5vZGUubGV2ZWwsIG5vZGUubW9kdWxlKSkKKyAgICAgICAgZm9yIGlkeCwgaXRlbSBpbiBlbnVtZXJhdGUobm9kZS5uYW1lcyk6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi53cml0ZShpdGVtKQorCisgICAgZGVmIHZpc2l0X0ltcG9ydChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIGZvciBpdGVtIGluIG5vZGUubmFtZXM6CisgICAgICAgICAgICBzZWxmLndyaXRlKCdpbXBvcnQgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoaXRlbSkKKworICAgIGRlZiB2aXNpdF9FeHByKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKKyAgICBkZWYgdmlzaXRfRnVuY3Rpb25EZWYoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShleHRyYT0xKQorICAgICAgICBzZWxmLmRlY29yYXRvcnMobm9kZSkKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2RlZiAlcygnICUgbm9kZS5uYW1lKQorICAgICAgICBzZWxmLnNpZ25hdHVyZShub2RlLmFyZ3MpCisgICAgICAgIHNlbGYud3JpdGUoJyk6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKworICAgIGRlZiB2aXNpdF9DbGFzc0RlZihzZWxmLCBub2RlKToKKyAgICAgICAgaGF2ZV9hcmdzID0gW10KKyAgICAgICAgZGVmIHBhcmVuX29yX2NvbW1hKCk6CisgICAgICAgICAgICBpZiBoYXZlX2FyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoYXZlX2FyZ3MuYXBwZW5kKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnKCcpCisKKyAgICAgICAgc2VsZi5uZXdsaW5lKGV4dHJhPTIpCisgICAgICAgIHNlbGYuZGVjb3JhdG9ycyhub2RlKQorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnY2xhc3MgJXMnICUgbm9kZS5uYW1lKQorICAgICAgICBmb3IgYmFzZSBpbiBub2RlLmJhc2VzOgorICAgICAgICAgICAgcGFyZW5fb3JfY29tbWEoKQorICAgICAgICAgICAgc2VsZi52aXNpdChiYXNlKQorICAgICAgICAjIFhYWDogdGhlIGlmIGhlcmUgaXMgdXNlZCB0byBrZWVwIHRoaXMgbW9kdWxlIGNvbXBhdGlibGUKKyAgICAgICAgIyAgICAgIHdpdGggcHl0aG9uIDIuNi4KKyAgICAgICAgaWYgaGFzYXR0cihub2RlLCAna2V5d29yZHMnKToKKyAgICAgICAgICAgIGZvciBrZXl3b3JkIGluIG5vZGUua2V5d29yZHM6CisgICAgICAgICAgICAgICAgcGFyZW5fb3JfY29tbWEoKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoa2V5d29yZC5hcmcgKyAnPScpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChrZXl3b3JkLnZhbHVlKQorICAgICAgICAgICAgaWYgbm9kZS5zdGFyYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwYXJlbl9vcl9jb21tYSgpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnKicpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnN0YXJhcmdzKQorICAgICAgICAgICAgaWYgbm9kZS5rd2FyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGFyZW5fb3JfY29tbWEoKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyoqJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUua3dhcmdzKQorICAgICAgICBzZWxmLndyaXRlKGhhdmVfYXJncyBhbmQgJyk6JyBvciAnOicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisKKyAgICBkZWYgdmlzaXRfSWYoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdpZiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGVzdCkKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBlbHNlXyA9IG5vZGUub3JlbHNlCisgICAgICAgICAgICBpZiBsZW4oZWxzZV8pID09IDEgYW5kIGlzaW5zdGFuY2UoZWxzZV9bMF0sIElmKToKKyAgICAgICAgICAgICAgICBub2RlID0gZWxzZV9bMF0KKyAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmUoKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJ2VsaWYgJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmUoKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJ2Vsc2U6JykKKyAgICAgICAgICAgICAgICBzZWxmLmJvZHkoZWxzZV8pCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiB2aXNpdF9Gb3Ioc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdmb3IgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRhcmdldCkKKyAgICAgICAgc2VsZi53cml0ZSgnIGluICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5pdGVyKQorICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgc2VsZi5ib2R5X29yX2Vsc2Uobm9kZSkKKworICAgIGRlZiB2aXNpdF9XaGlsZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3doaWxlICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQorICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgc2VsZi5ib2R5X29yX2Vsc2Uobm9kZSkKKworICAgIGRlZiB2aXNpdF9XaXRoKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnd2l0aCAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuY29udGV4dF9leHByKQorICAgICAgICBpZiBub2RlLm9wdGlvbmFsX3ZhcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgYXMgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5vcHRpb25hbF92YXJzKQorICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKworICAgIGRlZiB2aXNpdF9QYXNzKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgncGFzcycpCisKKyAgICBkZWYgdmlzaXRfUHJpbnQoc2VsZiwgbm9kZSk6CisgICAgICAgICMgWFhYOiBweXRob24gMi42IG9ubHkKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3ByaW50ICcpCisgICAgICAgIHdhbnRfY29tbWEgPSBGYWxzZQorICAgICAgICBpZiBub2RlLmRlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgPj4gJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5kZXN0KQorICAgICAgICAgICAgd2FudF9jb21tYSA9IFRydWUKKyAgICAgICAgZm9yIHZhbHVlIGluIG5vZGUudmFsdWVzOgorICAgICAgICAgICAgaWYgd2FudF9jb21tYToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KHZhbHVlKQorICAgICAgICAgICAgd2FudF9jb21tYSA9IFRydWUKKyAgICAgICAgaWYgbm90IG5vZGUubmw6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcsJykKKworICAgIGRlZiB2aXNpdF9EZWxldGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdkZWwgJykKKyAgICAgICAgZm9yIGlkeCwgdGFyZ2V0IGluIGVudW1lcmF0ZShub2RlKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KHRhcmdldCkKKworICAgIGRlZiB2aXNpdF9UcnlFeGNlcHQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCd0cnk6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKyAgICAgICAgZm9yIGhhbmRsZXIgaW4gbm9kZS5oYW5kbGVyczoKKyAgICAgICAgICAgIHNlbGYudmlzaXQoaGFuZGxlcikKKworICAgIGRlZiB2aXNpdF9UcnlGaW5hbGx5KHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgndHJ5OicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdmaW5hbGx5OicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmZpbmFsYm9keSkKKworICAgIGRlZiB2aXNpdF9HbG9iYWwoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdnbG9iYWwgJyArICcsICcuam9pbihub2RlLm5hbWVzKSkKKworICAgIGRlZiB2aXNpdF9Ob25sb2NhbChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ25vbmxvY2FsICcgKyAnLCAnLmpvaW4obm9kZS5uYW1lcykpCisKKyAgICBkZWYgdmlzaXRfUmV0dXJuKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgncmV0dXJuICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9CcmVhayhzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2JyZWFrJykKKworICAgIGRlZiB2aXNpdF9Db250aW51ZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2NvbnRpbnVlJykKKworICAgIGRlZiB2aXNpdF9SYWlzZShzZWxmLCBub2RlKToKKyAgICAgICAgIyBYWFg6IFB5dGhvbiAyLjYgLyAzLjAgY29tcGF0aWJpbGl0eQorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgncmFpc2UnKQorICAgICAgICBpZiBoYXNhdHRyKG5vZGUsICdleGMnKSBhbmQgbm9kZS5leGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5leGMpCisgICAgICAgICAgICBpZiBub2RlLmNhdXNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyBmcm9tICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmNhdXNlKQorICAgICAgICBlbGlmIGhhc2F0dHIobm9kZSwgJ3R5cGUnKSBhbmQgbm9kZS50eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnR5cGUpCisgICAgICAgICAgICBpZiBub2RlLmluc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5pbnN0KQorICAgICAgICAgICAgaWYgbm9kZS50YmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnRiYWNrKQorCisgICAgIyBFeHByZXNzaW9ucworCisgICAgZGVmIHZpc2l0X0F0dHJpYnV0ZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorICAgICAgICBzZWxmLndyaXRlKCcuJyArIG5vZGUuYXR0cikKKworICAgIGRlZiB2aXNpdF9DYWxsKHNlbGYsIG5vZGUpOgorICAgICAgICB3YW50X2NvbW1hID0gW10KKyAgICAgICAgZGVmIHdyaXRlX2NvbW1hKCk6CisgICAgICAgICAgICBpZiB3YW50X2NvbW1hOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2FudF9jb21tYS5hcHBlbmQoVHJ1ZSkKKworICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZnVuYykKKyAgICAgICAgc2VsZi53cml0ZSgnKCcpCisgICAgICAgIGZvciBhcmcgaW4gbm9kZS5hcmdzOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi52aXNpdChhcmcpCisgICAgICAgIGZvciBrZXl3b3JkIGluIG5vZGUua2V5d29yZHM6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLndyaXRlKGtleXdvcmQuYXJnICsgJz0nKQorICAgICAgICAgICAgc2VsZi52aXNpdChrZXl3b3JkLnZhbHVlKQorICAgICAgICBpZiBub2RlLnN0YXJhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi53cml0ZSgnKicpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuc3RhcmFyZ3MpCisgICAgICAgIGlmIG5vZGUua3dhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi53cml0ZSgnKionKQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmt3YXJncykKKyAgICAgICAgc2VsZi53cml0ZSgnKScpCisKKyAgICBkZWYgdmlzaXRfTmFtZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZShub2RlLmlkKQorCisgICAgZGVmIHZpc2l0X1N0cihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZShyZXByKG5vZGUucykpCisKKyAgICBkZWYgdmlzaXRfQnl0ZXMoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUocmVwcihub2RlLnMpKQorCisgICAgZGVmIHZpc2l0X051bShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZShyZXByKG5vZGUubikpCisKKyAgICBkZWYgdmlzaXRfVHVwbGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJygnKQorICAgICAgICBpZHggPSAtMQorICAgICAgICBmb3IgaWR4LCBpdGVtIGluIGVudW1lcmF0ZShub2RlLmVsdHMpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoaXRlbSkKKyAgICAgICAgc2VsZi53cml0ZShpZHggYW5kICcpJyBvciAnLCknKQorCisgICAgZGVmIHNlcXVlbmNlX3Zpc2l0KGxlZnQsIHJpZ2h0KToKKyAgICAgICAgZGVmIHZpc2l0KHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgc2VsZi53cml0ZShsZWZ0KQorICAgICAgICAgICAgZm9yIGlkeCwgaXRlbSBpbiBlbnVtZXJhdGUobm9kZS5lbHRzKToKKyAgICAgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGl0ZW0pCisgICAgICAgICAgICBzZWxmLndyaXRlKHJpZ2h0KQorICAgICAgICByZXR1cm4gdmlzaXQKKworICAgIHZpc2l0X0xpc3QgPSBzZXF1ZW5jZV92aXNpdCgnWycsICddJykKKyAgICB2aXNpdF9TZXQgPSBzZXF1ZW5jZV92aXNpdCgneycsICd9JykKKyAgICBkZWwgc2VxdWVuY2VfdmlzaXQKKworICAgIGRlZiB2aXNpdF9EaWN0KHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCd7JykKKyAgICAgICAgZm9yIGlkeCwgKGtleSwgdmFsdWUpIGluIGVudW1lcmF0ZSh6aXAobm9kZS5rZXlzLCBub2RlLnZhbHVlcykpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoa2V5KQorICAgICAgICAgICAgc2VsZi53cml0ZSgnOiAnKQorICAgICAgICAgICAgc2VsZi52aXNpdCh2YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgnfScpCisKKyAgICBkZWYgdmlzaXRfQmluT3Aoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYudmlzaXQobm9kZS5sZWZ0KQorICAgICAgICBzZWxmLndyaXRlKCcgJXMgJyAlIEJJTk9QX1NZTUJPTFNbdHlwZShub2RlLm9wKV0pCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5yaWdodCkKKworICAgIGRlZiB2aXNpdF9Cb29sT3Aoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJygnKQorICAgICAgICBmb3IgaWR4LCB2YWx1ZSBpbiBlbnVtZXJhdGUobm9kZS52YWx1ZXMpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyAlcyAnICUgQk9PTE9QX1NZTUJPTFNbdHlwZShub2RlLm9wKV0pCisgICAgICAgICAgICBzZWxmLnZpc2l0KHZhbHVlKQorICAgICAgICBzZWxmLndyaXRlKCcpJykKKworICAgIGRlZiB2aXNpdF9Db21wYXJlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgc2VsZi53cml0ZShub2RlLmxlZnQpCisgICAgICAgIGZvciBvcCwgcmlnaHQgaW4gemlwKG5vZGUub3BzLCBub2RlLmNvbXBhcmF0b3JzKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyAlcyAlJScgJSBDTVBPUF9TWU1CT0xTW3R5cGUob3ApXSkKKyAgICAgICAgICAgIHNlbGYudmlzaXQocmlnaHQpCisgICAgICAgIHNlbGYud3JpdGUoJyknKQorCisgICAgZGVmIHZpc2l0X1VuYXJ5T3Aoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJygnKQorICAgICAgICBvcCA9IFVOQVJZT1BfU1lNQk9MU1t0eXBlKG5vZGUub3ApXQorICAgICAgICBzZWxmLndyaXRlKG9wKQorICAgICAgICBpZiBvcCA9PSAnbm90JzoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUub3BlcmFuZCkKKyAgICAgICAgc2VsZi53cml0ZSgnKScpCisKKyAgICBkZWYgdmlzaXRfU3Vic2NyaXB0KHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisgICAgICAgIHNlbGYud3JpdGUoJ1snKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuc2xpY2UpCisgICAgICAgIHNlbGYud3JpdGUoJ10nKQorCisgICAgZGVmIHZpc2l0X1NsaWNlKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBub2RlLmxvd2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmxvd2VyKQorICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgaWYgbm9kZS51cHBlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS51cHBlcikKKyAgICAgICAgaWYgbm9kZS5zdGVwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2Uobm9kZS5zdGVwLCBOYW1lKSBhbmQgbm9kZS5zdGVwLmlkID09ICdOb25lJyk6CisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnN0ZXApCisKKyAgICBkZWYgdmlzaXRfRXh0U2xpY2Uoc2VsZiwgbm9kZSk6CisgICAgICAgIGZvciBpZHgsIGl0ZW0gaW4gbm9kZS5kaW1zOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoaXRlbSkKKworICAgIGRlZiB2aXNpdF9ZaWVsZChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgneWllbGQgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorCisgICAgZGVmIHZpc2l0X0xhbWJkYShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnbGFtYmRhICcpCisgICAgICAgIHNlbGYuc2lnbmF0dXJlKG5vZGUuYXJncykKKyAgICAgICAgc2VsZi53cml0ZSgnOiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuYm9keSkKKworICAgIGRlZiB2aXNpdF9FbGxpcHNpcyhzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnRWxsaXBzaXMnKQorCisgICAgZGVmIGdlbmVyYXRvcl92aXNpdChsZWZ0LCByaWdodCk6CisgICAgICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUobGVmdCkKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5lbHQpCisgICAgICAgICAgICBmb3IgY29tcHJlaGVuc2lvbiBpbiBub2RlLmdlbmVyYXRvcnM6CisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChjb21wcmVoZW5zaW9uKQorICAgICAgICAgICAgc2VsZi53cml0ZShyaWdodCkKKyAgICAgICAgcmV0dXJuIHZpc2l0CisKKyAgICB2aXNpdF9MaXN0Q29tcCA9IGdlbmVyYXRvcl92aXNpdCgnWycsICddJykKKyAgICB2aXNpdF9HZW5lcmF0b3JFeHAgPSBnZW5lcmF0b3JfdmlzaXQoJygnLCAnKScpCisgICAgdmlzaXRfU2V0Q29tcCA9IGdlbmVyYXRvcl92aXNpdCgneycsICd9JykKKyAgICBkZWwgZ2VuZXJhdG9yX3Zpc2l0CisKKyAgICBkZWYgdmlzaXRfRGljdENvbXAoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ3snKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUua2V5KQorICAgICAgICBzZWxmLndyaXRlKCc6ICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKyAgICAgICAgZm9yIGNvbXByZWhlbnNpb24gaW4gbm9kZS5nZW5lcmF0b3JzOgorICAgICAgICAgICAgc2VsZi52aXNpdChjb21wcmVoZW5zaW9uKQorICAgICAgICBzZWxmLndyaXRlKCd9JykKKworICAgIGRlZiB2aXNpdF9JZkV4cChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmJvZHkpCisgICAgICAgIHNlbGYud3JpdGUoJyBpZiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGVzdCkKKyAgICAgICAgc2VsZi53cml0ZSgnIGVsc2UgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLm9yZWxzZSkKKworICAgIGRlZiB2aXNpdF9TdGFycmVkKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcqJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorCisgICAgZGVmIHZpc2l0X1JlcHIoc2VsZiwgbm9kZSk6CisgICAgICAgICMgWFhYOiBweXRob24gMi42IG9ubHkKKyAgICAgICAgc2VsZi53cml0ZSgnYCcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgnYCcpCisKKyAgICAjIEhlbHBlciBOb2RlcworCisgICAgZGVmIHZpc2l0X2FsaWFzKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKG5vZGUubmFtZSkKKyAgICAgICAgaWYgbm9kZS5hc25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgYXMgJyArIG5vZGUuYXNuYW1lKQorCisgICAgZGVmIHZpc2l0X2NvbXByZWhlbnNpb24oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJyBmb3IgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRhcmdldCkKKyAgICAgICAgc2VsZi53cml0ZSgnIGluICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5pdGVyKQorICAgICAgICBpZiBub2RlLmlmczoKKyAgICAgICAgICAgIGZvciBpZl8gaW4gbm9kZS5pZnM6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnIGlmICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChpZl8pCisKKyAgICBkZWYgdmlzaXRfZXhjZXB0aGFuZGxlcihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2V4Y2VwdCcpCisgICAgICAgIGlmIG5vZGUudHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyAnKQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnR5cGUpCisgICAgICAgICAgICBpZiBub2RlLm5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnIGFzICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLm5hbWUpCisgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNhOTg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkvX19pbml0X18ucHkKQEAgLTAsMCArMSw0IEBACisjIFBMWSBwYWNrYWdlCisjIEF1dGhvcjogRGF2aWQgQmVhemxleSAoZGF2ZUBkYWJlYXouY29tKQorCitfX2FsbF9fID0gWydsZXgnLCd5YWNjJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L2xleC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L2xleC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjdlYzEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wbHkvbGV4LnB5CkBAIC0wLDAgKzEsMTA1OCBAQAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBwbHk6IGxleC5weQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSwKKyMgRGF2aWQgTS4gQmVhemxleSAoRGFiZWF6IExMQykKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gIAorIyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisjICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAgCisjICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRGF2aWQgQmVhemxleSBvciBEYWJlYXogTExDIG1heSBiZSB1c2VkIHRvCisjICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyMgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworX192ZXJzaW9uX18gICAgPSAiMy4zIgorX190YWJ2ZXJzaW9uX18gPSAiMy4yIiAgICAgICAjIFZlcnNpb24gb2YgdGFibGUgZmlsZSB1c2VkCisKK2ltcG9ydCByZSwgc3lzLCB0eXBlcywgY29weSwgb3MKKworIyBUaGlzIHR1cGxlIGNvbnRhaW5zIGtub3duIHN0cmluZyB0eXBlcwordHJ5OgorICAgICMgUHl0aG9uIDIuNgorICAgIFN0cmluZ1R5cGVzID0gKHR5cGVzLlN0cmluZ1R5cGUsIHR5cGVzLlVuaWNvZGVUeXBlKQorZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICMgUHl0aG9uIDMuMAorICAgIFN0cmluZ1R5cGVzID0gKHN0ciwgYnl0ZXMpCisKKyMgRXh0cmFjdCB0aGUgY29kZSBhdHRyaWJ1dGUgb2YgYSBmdW5jdGlvbi4gRGlmZmVyZW50IGltcGxlbWVudGF0aW9ucworIyBhcmUgZm9yIFB5dGhvbiAyLzMgY29tcGF0aWJpbGl0eS4KKworaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgZGVmIGZ1bmNfY29kZShmKToKKyAgICAgICAgcmV0dXJuIGYuZnVuY19jb2RlCitlbHNlOgorICAgIGRlZiBmdW5jX2NvZGUoZik6CisgICAgICAgIHJldHVybiBmLl9fY29kZV9fCisKKyMgVGhpcyByZWd1bGFyIGV4cHJlc3Npb24gaXMgdXNlZCB0byBtYXRjaCB2YWxpZCB0b2tlbiBuYW1lcworX2lzX2lkZW50aWZpZXIgPSByZS5jb21waWxlKHInXlthLXpBLVowLTlfXSskJykKKworIyBFeGNlcHRpb24gdGhyb3duIHdoZW4gaW52YWxpZCB0b2tlbiBlbmNvdW50ZXJlZCBhbmQgbm8gZGVmYXVsdCBlcnJvcgorIyBoYW5kbGVyIGlzIGRlZmluZWQuCisKK2NsYXNzIExleEVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsbWVzc2FnZSxzKToKKyAgICAgICAgIHNlbGYuYXJncyA9IChtZXNzYWdlLCkKKyAgICAgICAgIHNlbGYudGV4dCA9IHMKKworIyBUb2tlbiBjbGFzcy4gIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIHRva2VucyBwcm9kdWNlZC4KK2NsYXNzIExleFRva2VuKG9iamVjdCk6CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTGV4VG9rZW4oJXMsJXIsJWQsJWQpIiAlIChzZWxmLnR5cGUsc2VsZi52YWx1ZSxzZWxmLmxpbmVubyxzZWxmLmxleHBvcykKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZikKKworIyBUaGlzIG9iamVjdCBpcyBhIHN0YW5kLWluIGZvciBhIGxvZ2dpbmcgb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIAorIyBsb2dnaW5nIG1vZHVsZS4gIAorCitjbGFzcyBQbHlMb2dnZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixmKToKKyAgICAgICAgc2VsZi5mID0gZgorICAgIGRlZiBjcml0aWNhbChzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgobXNnICUgYXJncykgKyAiXG4iKQorCisgICAgZGVmIHdhcm5pbmcoc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoIldBUk5JTkc6ICIrIChtc2cgJSBhcmdzKSArICJcbiIpCisKKyAgICBkZWYgZXJyb3Ioc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoIkVSUk9SOiAiICsgKG1zZyAlIGFyZ3MpICsgIlxuIikKKworICAgIGluZm8gPSBjcml0aWNhbAorICAgIGRlYnVnID0gY3JpdGljYWwKKworIyBOdWxsIGxvZ2dlciBpcyB1c2VkIHdoZW4gbm8gb3V0cHV0IGlzIGdlbmVyYXRlZC4gRG9lcyBub3RoaW5nLgorY2xhc3MgTnVsbExvZ2dlcihvYmplY3QpOgorICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgPT09IExleGluZyBFbmdpbmUgPT09CisjCisjIFRoZSBmb2xsb3dpbmcgTGV4ZXIgY2xhc3MgaW1wbGVtZW50cyB0aGUgbGV4ZXIgcnVudGltZS4gICBUaGVyZSBhcmUgb25seQorIyBhIGZldyBwdWJsaWMgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKKyMKKyMgICAgaW5wdXQoKSAgICAgICAgICAtICBTdG9yZSBhIG5ldyBzdHJpbmcgaW4gdGhlIGxleGVyCisjICAgIHRva2VuKCkgICAgICAgICAgLSAgR2V0IHRoZSBuZXh0IHRva2VuCisjICAgIGNsb25lKCkgICAgICAgICAgLSAgQ2xvbmUgdGhlIGxleGVyCisjCisjICAgIGxpbmVubyAgICAgICAgICAgLSAgQ3VycmVudCBsaW5lIG51bWJlcgorIyAgICBsZXhwb3MgICAgICAgICAgIC0gIEN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGlucHV0IHN0cmluZworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBMZXhlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubGV4cmUgPSBOb25lICAgICAgICAgICAgICMgTWFzdGVyIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVGhpcyBpcyBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0dXBsZXMgKHJlLGZpbmRleCkgd2hlcmUgcmUgaXMgYSBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgZmluZGV4IGlzIGEgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1hcHBpbmcgcmVnZXggZ3JvdXAgbnVtYmVycyB0byBydWxlcworICAgICAgICBzZWxmLmxleHJldGV4dCA9IE5vbmUgICAgICAgICAjIEN1cnJlbnQgcmVndWxhciBleHByZXNzaW9uIHN0cmluZ3MKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXJlID0ge30gICAgICAgICAgIyBEaWN0aW9uYXJ5IG1hcHBpbmcgbGV4ZXIgc3RhdGVzIHRvIG1hc3RlciByZWdleHMKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXJldGV4dCA9IHt9ICAgICAgIyBEaWN0aW9uYXJ5IG1hcHBpbmcgbGV4ZXIgc3RhdGVzIHRvIHJlZ2V4IHN0cmluZ3MKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXJlbmFtZXMgPSB7fSAgICAgIyBEaWN0aW9uYXJ5IG1hcHBpbmcgbGV4ZXIgc3RhdGVzIHRvIHN5bWJvbCBuYW1lcworICAgICAgICBzZWxmLmxleHN0YXRlID0gIklOSVRJQUwiICAgICAjIEN1cnJlbnQgbGV4ZXIgc3RhdGUKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXN0YWNrID0gW10gICAgICAgIyBTdGFjayBvZiBsZXhlciBzdGF0ZXMKKyAgICAgICAgc2VsZi5sZXhzdGF0ZWluZm8gPSBOb25lICAgICAgIyBTdGF0ZSBpbmZvcm1hdGlvbgorICAgICAgICBzZWxmLmxleHN0YXRlaWdub3JlID0ge30gICAgICAjIERpY3Rpb25hcnkgb2YgaWdub3JlZCBjaGFyYWN0ZXJzIGZvciBlYWNoIHN0YXRlCisgICAgICAgIHNlbGYubGV4c3RhdGVlcnJvcmYgPSB7fSAgICAgICMgRGljdGlvbmFyeSBvZiBlcnJvciBmdW5jdGlvbnMgZm9yIGVhY2ggc3RhdGUKKyAgICAgICAgc2VsZi5sZXhyZWZsYWdzID0gMCAgICAgICAgICAgIyBPcHRpb25hbCByZSBjb21waWxlIGZsYWdzCisgICAgICAgIHNlbGYubGV4ZGF0YSA9IE5vbmUgICAgICAgICAgICMgQWN0dWFsIGlucHV0IGRhdGEgKGFzIGEgc3RyaW5nKQorICAgICAgICBzZWxmLmxleHBvcyA9IDAgICAgICAgICAgICAgICAjIEN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgdGV4dAorICAgICAgICBzZWxmLmxleGxlbiA9IDAgICAgICAgICAgICAgICAjIExlbmd0aCBvZiB0aGUgaW5wdXQgdGV4dAorICAgICAgICBzZWxmLmxleGVycm9yZiA9IE5vbmUgICAgICAgICAjIEVycm9yIHJ1bGUgKGlmIGFueSkKKyAgICAgICAgc2VsZi5sZXh0b2tlbnMgPSBOb25lICAgICAgICAgIyBMaXN0IG9mIHZhbGlkIHRva2VucworICAgICAgICBzZWxmLmxleGlnbm9yZSA9ICIiICAgICAgICAgICAjIElnbm9yZWQgY2hhcmFjdGVycworICAgICAgICBzZWxmLmxleGxpdGVyYWxzID0gIiIgICAgICAgICAjIExpdGVyYWwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSBwYXNzZWQgdGhyb3VnaAorICAgICAgICBzZWxmLmxleG1vZHVsZSA9IE5vbmUgICAgICAgICAjIE1vZHVsZQorICAgICAgICBzZWxmLmxpbmVubyA9IDEgICAgICAgICAgICAgICAjIEN1cnJlbnQgbGluZSBudW1iZXIKKyAgICAgICAgc2VsZi5sZXhvcHRpbWl6ZSA9IDAgICAgICAgICAgIyBPcHRpbWl6ZWQgbW9kZQorCisgICAgZGVmIGNsb25lKHNlbGYsb2JqZWN0PU5vbmUpOgorICAgICAgICBjID0gY29weS5jb3B5KHNlbGYpCisKKyAgICAgICAgIyBJZiB0aGUgb2JqZWN0IHBhcmFtZXRlciBoYXMgYmVlbiBzdXBwbGllZCwgaXQgbWVhbnMgd2UgYXJlIGF0dGFjaGluZyB0aGUKKyAgICAgICAgIyBsZXhlciB0byBhIG5ldyBvYmplY3QuICBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgdG8gcmViaW5kIGFsbCBtZXRob2RzIGluCisgICAgICAgICMgdGhlIGxleHN0YXRlcmUgYW5kIGxleHN0YXRlZXJyb3JmIHRhYmxlcy4KKworICAgICAgICBpZiBvYmplY3Q6CisgICAgICAgICAgICBuZXd0YWIgPSB7IH0KKyAgICAgICAgICAgIGZvciBrZXksIHJpdGVtIGluIHNlbGYubGV4c3RhdGVyZS5pdGVtcygpOgorICAgICAgICAgICAgICAgIG5ld3JlID0gW10KKyAgICAgICAgICAgICAgICBmb3IgY3JlLCBmaW5kZXggaW4gcml0ZW06CisgICAgICAgICAgICAgICAgICAgICBuZXdmaW5kZXggPSBbXQorICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmluZGV4OgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmIG9yIG5vdCBmWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdmaW5kZXguYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZmluZGV4LmFwcGVuZCgoZ2V0YXR0cihvYmplY3QsZlswXS5fX25hbWVfXyksZlsxXSkpCisgICAgICAgICAgICAgICAgbmV3cmUuYXBwZW5kKChjcmUsbmV3ZmluZGV4KSkKKyAgICAgICAgICAgICAgICBuZXd0YWJba2V5XSA9IG5ld3JlCisgICAgICAgICAgICBjLmxleHN0YXRlcmUgPSBuZXd0YWIKKyAgICAgICAgICAgIGMubGV4c3RhdGVlcnJvcmYgPSB7IH0KKyAgICAgICAgICAgIGZvciBrZXksIGVmIGluIHNlbGYubGV4c3RhdGVlcnJvcmYuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBjLmxleHN0YXRlZXJyb3JmW2tleV0gPSBnZXRhdHRyKG9iamVjdCxlZi5fX25hbWVfXykKKyAgICAgICAgICAgIGMubGV4bW9kdWxlID0gb2JqZWN0CisgICAgICAgIHJldHVybiBjCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgd3JpdGV0YWIoKSAtIFdyaXRlIGxleGVyIGluZm9ybWF0aW9uIHRvIGEgdGFibGUgZmlsZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHdyaXRldGFiKHNlbGYsdGFiZmlsZSxvdXRwdXRkaXI9IiIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRhYmZpbGUsdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYmFzZXRhYmZpbGVuYW1lID0gdGFiZmlsZS5zcGxpdCgiLiIpWy0xXQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRkaXIsYmFzZXRhYmZpbGVuYW1lKSsiLnB5IgorICAgICAgICB0ZiA9IG9wZW4oZmlsZW5hbWUsInciKQorICAgICAgICB0Zi53cml0ZSgiIyAlcy5weS4gVGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBQTFkgKHZlcnNpb24gJXMpLiBEb24ndCBlZGl0IVxuIiAlICh0YWJmaWxlLF9fdmVyc2lvbl9fKSkKKyAgICAgICAgdGYud3JpdGUoIl90YWJ2ZXJzaW9uICAgPSAlc1xuIiAlIHJlcHIoX192ZXJzaW9uX18pKQorICAgICAgICB0Zi53cml0ZSgiX2xleHRva2VucyAgICA9ICVzXG4iICUgcmVwcihzZWxmLmxleHRva2VucykpCisgICAgICAgIHRmLndyaXRlKCJfbGV4cmVmbGFncyAgID0gJXNcbiIgJSByZXByKHNlbGYubGV4cmVmbGFncykpCisgICAgICAgIHRmLndyaXRlKCJfbGV4bGl0ZXJhbHMgID0gJXNcbiIgJSByZXByKHNlbGYubGV4bGl0ZXJhbHMpKQorICAgICAgICB0Zi53cml0ZSgiX2xleHN0YXRlaW5mbyA9ICVzXG4iICUgcmVwcihzZWxmLmxleHN0YXRlaW5mbykpCisKKyAgICAgICAgdGFicmUgPSB7IH0KKyAgICAgICAgIyBDb2xsZWN0IGFsbCBmdW5jdGlvbnMgaW4gdGhlIGluaXRpYWwgc3RhdGUKKyAgICAgICAgaW5pdGlhbCA9IHNlbGYubGV4c3RhdGVyZVsiSU5JVElBTCJdCisgICAgICAgIGluaXRpYWxmdW5jcyA9IFtdCisgICAgICAgIGZvciBwYXJ0IGluIGluaXRpYWw6CisgICAgICAgICAgICBmb3IgZiBpbiBwYXJ0WzFdOgorICAgICAgICAgICAgICAgIGlmIGYgYW5kIGZbMF06CisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxmdW5jcy5hcHBlbmQoZikKKworICAgICAgICBmb3Iga2V5LCBscmUgaW4gc2VsZi5sZXhzdGF0ZXJlLml0ZW1zKCk6CisgICAgICAgICAgICAgdGl0ZW0gPSBbXQorICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihscmUpKToKKyAgICAgICAgICAgICAgICAgIHRpdGVtLmFwcGVuZCgoc2VsZi5sZXhzdGF0ZXJldGV4dFtrZXldW2ldLF9mdW5jc190b19uYW1lcyhscmVbaV1bMV0sc2VsZi5sZXhzdGF0ZXJlbmFtZXNba2V5XVtpXSkpKQorICAgICAgICAgICAgIHRhYnJlW2tleV0gPSB0aXRlbQorCisgICAgICAgIHRmLndyaXRlKCJfbGV4c3RhdGVyZSAgID0gJXNcbiIgJSByZXByKHRhYnJlKSkKKyAgICAgICAgdGYud3JpdGUoIl9sZXhzdGF0ZWlnbm9yZSA9ICVzXG4iICUgcmVwcihzZWxmLmxleHN0YXRlaWdub3JlKSkKKworICAgICAgICB0YWJlcnIgPSB7IH0KKyAgICAgICAgZm9yIGtleSwgZWYgaW4gc2VsZi5sZXhzdGF0ZWVycm9yZi5pdGVtcygpOgorICAgICAgICAgICAgIGlmIGVmOgorICAgICAgICAgICAgICAgICAgdGFiZXJyW2tleV0gPSBlZi5fX25hbWVfXworICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICB0YWJlcnJba2V5XSA9IE5vbmUKKyAgICAgICAgdGYud3JpdGUoIl9sZXhzdGF0ZWVycm9yZiA9ICVzXG4iICUgcmVwcih0YWJlcnIpKQorICAgICAgICB0Zi5jbG9zZSgpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgcmVhZHRhYigpIC0gUmVhZCBsZXhlciBpbmZvcm1hdGlvbiBmcm9tIGEgdGFiIGZpbGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiByZWFkdGFiKHNlbGYsdGFiZmlsZSxmZGljdCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodGFiZmlsZSx0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIGxleHRhYiA9IHRhYmZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgICAgICAgICAgICAgIGV4ZWMoImltcG9ydCAlcyBhcyBsZXh0YWIiICUgdGFiZmlsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW52ID0geyB9CisgICAgICAgICAgICAgICAgZXhlYygiaW1wb3J0ICVzIGFzIGxleHRhYiIgJSB0YWJmaWxlLCBlbnYsZW52KQorICAgICAgICAgICAgICAgIGxleHRhYiA9IGVudlsnbGV4dGFiJ10KKworICAgICAgICBpZiBnZXRhdHRyKGxleHRhYiwiX3RhYnZlcnNpb24iLCIwLjAiKSAhPSBfX3ZlcnNpb25fXzoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJJbmNvbnNpc3RlbnQgUExZIHZlcnNpb24iKQorCisgICAgICAgIHNlbGYubGV4dG9rZW5zICAgICAgPSBsZXh0YWIuX2xleHRva2VucworICAgICAgICBzZWxmLmxleHJlZmxhZ3MgICAgID0gbGV4dGFiLl9sZXhyZWZsYWdzCisgICAgICAgIHNlbGYubGV4bGl0ZXJhbHMgICAgPSBsZXh0YWIuX2xleGxpdGVyYWxzCisgICAgICAgIHNlbGYubGV4c3RhdGVpbmZvICAgPSBsZXh0YWIuX2xleHN0YXRlaW5mbworICAgICAgICBzZWxmLmxleHN0YXRlaWdub3JlID0gbGV4dGFiLl9sZXhzdGF0ZWlnbm9yZQorICAgICAgICBzZWxmLmxleHN0YXRlcmUgICAgID0geyB9CisgICAgICAgIHNlbGYubGV4c3RhdGVyZXRleHQgPSB7IH0KKyAgICAgICAgZm9yIGtleSxscmUgaW4gbGV4dGFiLl9sZXhzdGF0ZXJlLml0ZW1zKCk6CisgICAgICAgICAgICAgdGl0ZW0gPSBbXQorICAgICAgICAgICAgIHR4dGl0ZW0gPSBbXQorICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihscmUpKToKKyAgICAgICAgICAgICAgICAgIHRpdGVtLmFwcGVuZCgocmUuY29tcGlsZShscmVbaV1bMF0sbGV4dGFiLl9sZXhyZWZsYWdzIHwgcmUuVkVSQk9TRSksX25hbWVzX3RvX2Z1bmNzKGxyZVtpXVsxXSxmZGljdCkpKQorICAgICAgICAgICAgICAgICAgdHh0aXRlbS5hcHBlbmQobHJlW2ldWzBdKQorICAgICAgICAgICAgIHNlbGYubGV4c3RhdGVyZVtrZXldID0gdGl0ZW0KKyAgICAgICAgICAgICBzZWxmLmxleHN0YXRlcmV0ZXh0W2tleV0gPSB0eHRpdGVtCisgICAgICAgIHNlbGYubGV4c3RhdGVlcnJvcmYgPSB7IH0KKyAgICAgICAgZm9yIGtleSxlZiBpbiBsZXh0YWIuX2xleHN0YXRlZXJyb3JmLml0ZW1zKCk6CisgICAgICAgICAgICAgc2VsZi5sZXhzdGF0ZWVycm9yZltrZXldID0gZmRpY3RbZWZdCisgICAgICAgIHNlbGYuYmVnaW4oJ0lOSVRJQUwnKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGlucHV0KCkgLSBQdXNoIGEgbmV3IHN0cmluZyBpbnRvIHRoZSBsZXhlcgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGlucHV0KHNlbGYscyk6CisgICAgICAgICMgUHVsbCBvZmYgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBzZWUgaWYgcyBsb29rcyBsaWtlIGEgc3RyaW5nCisgICAgICAgIGMgPSBzWzoxXQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjLFN0cmluZ1R5cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIikKKyAgICAgICAgc2VsZi5sZXhkYXRhID0gcworICAgICAgICBzZWxmLmxleHBvcyA9IDAKKyAgICAgICAgc2VsZi5sZXhsZW4gPSBsZW4ocykKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBiZWdpbigpIC0gQ2hhbmdlcyB0aGUgbGV4aW5nIHN0YXRlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgYmVnaW4oc2VsZixzdGF0ZSk6CisgICAgICAgIGlmIG5vdCBzdGF0ZSBpbiBzZWxmLmxleHN0YXRlcmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmRlZmluZWQgc3RhdGUiKQorICAgICAgICBzZWxmLmxleHJlID0gc2VsZi5sZXhzdGF0ZXJlW3N0YXRlXQorICAgICAgICBzZWxmLmxleHJldGV4dCA9IHNlbGYubGV4c3RhdGVyZXRleHRbc3RhdGVdCisgICAgICAgIHNlbGYubGV4aWdub3JlID0gc2VsZi5sZXhzdGF0ZWlnbm9yZS5nZXQoc3RhdGUsIiIpCisgICAgICAgIHNlbGYubGV4ZXJyb3JmID0gc2VsZi5sZXhzdGF0ZWVycm9yZi5nZXQoc3RhdGUsTm9uZSkKKyAgICAgICAgc2VsZi5sZXhzdGF0ZSA9IHN0YXRlCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgcHVzaF9zdGF0ZSgpIC0gQ2hhbmdlcyB0aGUgbGV4aW5nIHN0YXRlIGFuZCBzYXZlcyBvbGQgb24gc3RhY2sKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBwdXNoX3N0YXRlKHNlbGYsc3RhdGUpOgorICAgICAgICBzZWxmLmxleHN0YXRlc3RhY2suYXBwZW5kKHNlbGYubGV4c3RhdGUpCisgICAgICAgIHNlbGYuYmVnaW4oc3RhdGUpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgcG9wX3N0YXRlKCkgLSBSZXN0b3JlcyB0aGUgcHJldmlvdXMgc3RhdGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBwb3Bfc3RhdGUoc2VsZik6CisgICAgICAgIHNlbGYuYmVnaW4oc2VsZi5sZXhzdGF0ZXN0YWNrLnBvcCgpKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGN1cnJlbnRfc3RhdGUoKSAtIFJldHVybnMgdGhlIGN1cnJlbnQgbGV4aW5nIHN0YXRlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgY3VycmVudF9zdGF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGV4c3RhdGUKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBza2lwKCkgLSBTa2lwIGFoZWFkIG4gY2hhcmFjdGVycworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHNraXAoc2VsZixuKToKKyAgICAgICAgc2VsZi5sZXhwb3MgKz0gbgorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIG9wdHRva2VuKCkgLSBSZXR1cm4gdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgTGV4ZXIKKyAgICAjCisgICAgIyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNhcmVmdWxseSBpbXBsZW1lbnRlZCB0byBiZSBhcyBmYXN0CisgICAgIyBhcyBwb3NzaWJsZS4gIERvbid0IG1ha2UgY2hhbmdlcyB1bmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQKKyAgICAjIHlvdSBhcmUgZG9pbmcKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiB0b2tlbihzZWxmKToKKyAgICAgICAgIyBNYWtlIGxvY2FsIGNvcGllcyBvZiBmcmVxdWVudGx5IHJlZmVyZW5jZWQgYXR0cmlidXRlcworICAgICAgICBsZXhwb3MgICAgPSBzZWxmLmxleHBvcworICAgICAgICBsZXhsZW4gICAgPSBzZWxmLmxleGxlbgorICAgICAgICBsZXhpZ25vcmUgPSBzZWxmLmxleGlnbm9yZQorICAgICAgICBsZXhkYXRhICAgPSBzZWxmLmxleGRhdGEKKworICAgICAgICB3aGlsZSBsZXhwb3MgPCBsZXhsZW46CisgICAgICAgICAgICAjIFRoaXMgY29kZSBwcm92aWRlcyBzb21lIHNob3J0LWNpcmN1aXQgY29kZSBmb3Igd2hpdGVzcGFjZSwgdGFicywgYW5kIG90aGVyIGlnbm9yZWQgY2hhcmFjdGVycworICAgICAgICAgICAgaWYgbGV4ZGF0YVtsZXhwb3NdIGluIGxleGlnbm9yZToKKyAgICAgICAgICAgICAgICBsZXhwb3MgKz0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgTG9vayBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2gKKyAgICAgICAgICAgIGZvciBsZXhyZSxsZXhpbmRleGZ1bmMgaW4gc2VsZi5sZXhyZToKKyAgICAgICAgICAgICAgICBtID0gbGV4cmUubWF0Y2gobGV4ZGF0YSxsZXhwb3MpCisgICAgICAgICAgICAgICAgaWYgbm90IG06IGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIHRva2VuIGZvciByZXR1cm4KKyAgICAgICAgICAgICAgICB0b2sgPSBMZXhUb2tlbigpCisgICAgICAgICAgICAgICAgdG9rLnZhbHVlID0gbS5ncm91cCgpCisgICAgICAgICAgICAgICAgdG9rLmxpbmVubyA9IHNlbGYubGluZW5vCisgICAgICAgICAgICAgICAgdG9rLmxleHBvcyA9IGxleHBvcworCisgICAgICAgICAgICAgICAgaSA9IG0ubGFzdGluZGV4CisgICAgICAgICAgICAgICAgZnVuYyx0b2sudHlwZSA9IGxleGluZGV4ZnVuY1tpXQorCisgICAgICAgICAgICAgICAgaWYgbm90IGZ1bmM6CisgICAgICAgICAgICAgICAgICAgIyBJZiBubyB0b2tlbiB0eXBlIHdhcyBzZXQsIGl0J3MgYW4gaWdub3JlZCB0b2tlbgorICAgICAgICAgICAgICAgICAgIGlmIHRvay50eXBlOgorICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGV4cG9zID0gbS5lbmQoKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2sKKyAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgIGxleHBvcyA9IG0uZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgbGV4cG9zID0gbS5lbmQoKQorCisgICAgICAgICAgICAgICAgIyBJZiB0b2tlbiBpcyBwcm9jZXNzZWQgYnkgYSBmdW5jdGlvbiwgY2FsbCBpdAorCisgICAgICAgICAgICAgICAgdG9rLmxleGVyID0gc2VsZiAgICAgICMgU2V0IGFkZGl0aW9uYWwgYXR0cmlidXRlcyB1c2VmdWwgaW4gdG9rZW4gcnVsZXMKKyAgICAgICAgICAgICAgICBzZWxmLmxleG1hdGNoID0gbQorICAgICAgICAgICAgICAgIHNlbGYubGV4cG9zID0gbGV4cG9zCisKKyAgICAgICAgICAgICAgICBuZXd0b2sgPSBmdW5jKHRvaykKKworICAgICAgICAgICAgICAgICMgRXZlcnkgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB0b2tlbiwgaWYgbm90aGluZywgd2UganVzdCBtb3ZlIHRvIG5leHQgdG9rZW4KKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3dG9rOgorICAgICAgICAgICAgICAgICAgICBsZXhwb3MgICAgPSBzZWxmLmxleHBvcyAgICAgICAgICMgVGhpcyBpcyBoZXJlIGluIGNhc2UgdXNlciBoYXMgdXBkYXRlZCBsZXhwb3MuCisgICAgICAgICAgICAgICAgICAgIGxleGlnbm9yZSA9IHNlbGYubGV4aWdub3JlICAgICAgIyBUaGlzIGlzIGhlcmUgaW4gY2FzZSB0aGVyZSB3YXMgYSBzdGF0ZSBjaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgVmVyaWZ5IHR5cGUgb2YgdGhlIHRva2VuLiAgSWYgbm90IGluIHRoZSB0b2tlbiBtYXAsIHJhaXNlIGFuIGVycm9yCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYubGV4b3B0aW1pemU6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd0b2sudHlwZSBpbiBzZWxmLmxleHRva2VuczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIExleEVycm9yKCIlczolZDogUnVsZSAnJXMnIHJldHVybmVkIGFuIHVua25vd24gdG9rZW4gdHlwZSAnJXMnIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2NvZGUoZnVuYykuY29fZmlsZW5hbWUsIGZ1bmNfY29kZShmdW5jKS5jb19maXJzdGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLl9fbmFtZV9fLCBuZXd0b2sudHlwZSksbGV4ZGF0YVtsZXhwb3M6XSkKKworICAgICAgICAgICAgICAgIHJldHVybiBuZXd0b2sKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBObyBtYXRjaCwgc2VlIGlmIGluIGxpdGVyYWxzCisgICAgICAgICAgICAgICAgaWYgbGV4ZGF0YVtsZXhwb3NdIGluIHNlbGYubGV4bGl0ZXJhbHM6CisgICAgICAgICAgICAgICAgICAgIHRvayA9IExleFRva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgdG9rLnZhbHVlID0gbGV4ZGF0YVtsZXhwb3NdCisgICAgICAgICAgICAgICAgICAgIHRvay5saW5lbm8gPSBzZWxmLmxpbmVubworICAgICAgICAgICAgICAgICAgICB0b2sudHlwZSA9IHRvay52YWx1ZQorICAgICAgICAgICAgICAgICAgICB0b2subGV4cG9zID0gbGV4cG9zCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGV4cG9zID0gbGV4cG9zICsgMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rCisKKyAgICAgICAgICAgICAgICAjIE5vIG1hdGNoLiBDYWxsIHRfZXJyb3IoKSBpZiBkZWZpbmVkLgorICAgICAgICAgICAgICAgIGlmIHNlbGYubGV4ZXJyb3JmOgorICAgICAgICAgICAgICAgICAgICB0b2sgPSBMZXhUb2tlbigpCisgICAgICAgICAgICAgICAgICAgIHRvay52YWx1ZSA9IHNlbGYubGV4ZGF0YVtsZXhwb3M6XQorICAgICAgICAgICAgICAgICAgICB0b2subGluZW5vID0gc2VsZi5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgdG9rLnR5cGUgPSAiZXJyb3IiCisgICAgICAgICAgICAgICAgICAgIHRvay5sZXhlciA9IHNlbGYKKyAgICAgICAgICAgICAgICAgICAgdG9rLmxleHBvcyA9IGxleHBvcworICAgICAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcworICAgICAgICAgICAgICAgICAgICBuZXd0b2sgPSBzZWxmLmxleGVycm9yZih0b2spCisgICAgICAgICAgICAgICAgICAgIGlmIGxleHBvcyA9PSBzZWxmLmxleHBvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRXJyb3IgbWV0aG9kIGRpZG4ndCBjaGFuZ2UgdGV4dCBwb3NpdGlvbiBhdCBhbGwuIFRoaXMgaXMgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMZXhFcnJvcigiU2Nhbm5pbmcgZXJyb3IuIElsbGVnYWwgY2hhcmFjdGVyICclcyciICUgKGxleGRhdGFbbGV4cG9zXSksIGxleGRhdGFbbGV4cG9zOl0pCisgICAgICAgICAgICAgICAgICAgIGxleHBvcyA9IHNlbGYubGV4cG9zCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd0b2s6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXd0b2sKKworICAgICAgICAgICAgICAgIHNlbGYubGV4cG9zID0gbGV4cG9zCisgICAgICAgICAgICAgICAgcmFpc2UgTGV4RXJyb3IoIklsbGVnYWwgY2hhcmFjdGVyICclcycgYXQgaW5kZXggJWQiICUgKGxleGRhdGFbbGV4cG9zXSxsZXhwb3MpLCBsZXhkYXRhW2xleHBvczpdKQorCisgICAgICAgIHNlbGYubGV4cG9zID0gbGV4cG9zICsgMQorICAgICAgICBpZiBzZWxmLmxleGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIk5vIGlucHV0IHN0cmluZyBnaXZlbiB3aXRoIGlucHV0KCkiKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBJdGVyYXRvciBpbnRlcmZhY2UKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudG9rZW4oKQorICAgICAgICBpZiB0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHJldHVybiB0CisKKyAgICBfX25leHRfXyA9IG5leHQKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgID09PT0gTGV4IEJ1aWxkZXIgPT09CisjCisjIFRoZSBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYmVsb3cgYXJlIHVzZWQgdG8gY29sbGVjdCBsZXhpbmcgaW5mb3JtYXRpb24KKyMgYW5kIGJ1aWxkIGEgTGV4ZXIgb2JqZWN0IGZyb20gaXQuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZ2V0X2NhbGxlcl9tb2R1bGVfZGljdCgpCisjCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgb2YgdGhlIHN5bWJvbHMgZGVmaW5lZCB3aXRoaW4KKyMgYSBjYWxsZXIgZnVydGhlciBkb3duIHRoZSBjYWxsIHN0YWNrLiAgVGhpcyBpcyB1c2VkIHRvIGdldCB0aGUgZW52aXJvbm1lbnQKKyMgYXNzb2NpYXRlZCB3aXRoIHRoZSB5YWNjKCkgY2FsbCBpZiBub25lIHdhcyBwcm92aWRlZC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdldF9jYWxsZXJfbW9kdWxlX2RpY3QobGV2ZWxzKToKKyAgICB0cnk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIGUsYix0ID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgZiA9IHQudGJfZnJhbWUKKyAgICAgICAgd2hpbGUgbGV2ZWxzID4gMDoKKyAgICAgICAgICAgIGYgPSBmLmZfYmFjayAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldmVscyAtPSAxCisgICAgICAgIGxkaWN0ID0gZi5mX2dsb2JhbHMuY29weSgpCisgICAgICAgIGlmIGYuZl9nbG9iYWxzICE9IGYuZl9sb2NhbHM6CisgICAgICAgICAgICBsZGljdC51cGRhdGUoZi5mX2xvY2FscykKKworICAgICAgICByZXR1cm4gbGRpY3QKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBfZnVuY3NfdG9fbmFtZXMoKQorIworIyBHaXZlbiBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9uIGZ1bmN0aW9ucywgdGhpcyBjb252ZXJ0cyBpdCB0byBhIGxpc3QKKyMgc3VpdGFibGUgZm9yIG91dHB1dCB0byBhIHRhYmxlIGZpbGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIF9mdW5jc190b19uYW1lcyhmdW5jbGlzdCxuYW1lbGlzdCk6CisgICAgcmVzdWx0ID0gW10KKyAgICBmb3IgZixuYW1lIGluIHppcChmdW5jbGlzdCxuYW1lbGlzdCk6CisgICAgICAgICBpZiBmIGFuZCBmWzBdOgorICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKG5hbWUsIGZbMV0pKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGYpCisgICAgcmV0dXJuIHJlc3VsdAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIF9uYW1lc190b19mdW5jcygpCisjCisjIEdpdmVuIGEgbGlzdCBvZiByZWd1bGFyIGV4cHJlc3Npb24gZnVuY3Rpb24gbmFtZXMsIHRoaXMgY29udmVydHMgaXQgYmFjayB0bworIyBmdW5jdGlvbnMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBfbmFtZXNfdG9fZnVuY3MobmFtZWxpc3QsZmRpY3QpOgorICAgICByZXN1bHQgPSBbXQorICAgICBmb3IgbiBpbiBuYW1lbGlzdDoKKyAgICAgICAgICBpZiBuIGFuZCBuWzBdOgorICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKChmZGljdFtuWzBdXSxuWzFdKSkKKyAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG4pCisgICAgIHJldHVybiByZXN1bHQKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBfZm9ybV9tYXN0ZXJfcmUoKQorIworIyBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgbGlzdCBvZiBhbGwgb2YgdGhlIHJlZ2V4IGNvbXBvbmVudHMgYW5kIGF0dGVtcHRzIHRvCisjIGZvcm0gdGhlIG1hc3RlciByZWd1bGFyIGV4cHJlc3Npb24uICBHaXZlbiBsaW1pdGF0aW9ucyBpbiB0aGUgUHl0aG9uIHJlCisjIG1vZHVsZSwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBicmVhayB0aGUgbWFzdGVyIHJlZ2V4IGludG8gc2VwYXJhdGUgZXhwcmVzc2lvbnMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBfZm9ybV9tYXN0ZXJfcmUocmVsaXN0LHJlZmxhZ3MsbGRpY3QsdG9rbmFtZXMpOgorICAgIGlmIG5vdCByZWxpc3Q6IHJldHVybiBbXQorICAgIHJlZ2V4ID0gInwiLmpvaW4ocmVsaXN0KQorICAgIHRyeToKKyAgICAgICAgbGV4cmUgPSByZS5jb21waWxlKHJlZ2V4LHJlLlZFUkJPU0UgfCByZWZsYWdzKQorCisgICAgICAgICMgQnVpbGQgdGhlIGluZGV4IHRvIGZ1bmN0aW9uIG1hcCBmb3IgdGhlIG1hdGNoaW5nIGVuZ2luZQorICAgICAgICBsZXhpbmRleGZ1bmMgPSBbIE5vbmUgXSAqIChtYXgobGV4cmUuZ3JvdXBpbmRleC52YWx1ZXMoKSkrMSkKKyAgICAgICAgbGV4aW5kZXhuYW1lcyA9IGxleGluZGV4ZnVuY1s6XQorCisgICAgICAgIGZvciBmLGkgaW4gbGV4cmUuZ3JvdXBpbmRleC5pdGVtcygpOgorICAgICAgICAgICAgaGFuZGxlID0gbGRpY3QuZ2V0KGYsTm9uZSkKKyAgICAgICAgICAgIGlmIHR5cGUoaGFuZGxlKSBpbiAodHlwZXMuRnVuY3Rpb25UeXBlLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICBsZXhpbmRleGZ1bmNbaV0gPSAoaGFuZGxlLHRva25hbWVzW2ZdKQorICAgICAgICAgICAgICAgIGxleGluZGV4bmFtZXNbaV0gPSBmCisgICAgICAgICAgICBlbGlmIGhhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsZXhpbmRleG5hbWVzW2ldID0gZgorICAgICAgICAgICAgICAgIGlmIGYuZmluZCgiaWdub3JlXyIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgbGV4aW5kZXhmdW5jW2ldID0gKE5vbmUsTm9uZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsZXhpbmRleGZ1bmNbaV0gPSAoTm9uZSwgdG9rbmFtZXNbZl0pCisgICAgICAgIAorICAgICAgICByZXR1cm4gWyhsZXhyZSxsZXhpbmRleGZ1bmMpXSxbcmVnZXhdLFtsZXhpbmRleG5hbWVzXQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIG0gPSBpbnQobGVuKHJlbGlzdCkvMikKKyAgICAgICAgaWYgbSA9PSAwOiBtID0gMQorICAgICAgICBsbGlzdCwgbHJlLCBsbmFtZXMgPSBfZm9ybV9tYXN0ZXJfcmUocmVsaXN0WzptXSxyZWZsYWdzLGxkaWN0LHRva25hbWVzKQorICAgICAgICBybGlzdCwgcnJlLCBybmFtZXMgPSBfZm9ybV9tYXN0ZXJfcmUocmVsaXN0W206XSxyZWZsYWdzLGxkaWN0LHRva25hbWVzKQorICAgICAgICByZXR1cm4gbGxpc3Qrcmxpc3QsIGxyZStycmUsIGxuYW1lcytybmFtZXMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBkZWYgX3N0YXRldG9rZW4ocyxuYW1lcykKKyMKKyMgR2l2ZW4gYSBkZWNsYXJhdGlvbiBuYW1lIHMgb2YgdGhlIGZvcm0gInRfIiBhbmQgYSBkaWN0aW9uYXJ5IHdob3NlIGtleXMgYXJlCisjIHN0YXRlIG5hbWVzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0dXBsZSAoc3RhdGVzLHRva2VubmFtZSkgd2hlcmUgc3RhdGVzCisjIGlzIGEgdHVwbGUgb2Ygc3RhdGUgbmFtZXMgYW5kIHRva2VubmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgdG9rZW4uICBGb3IgZXhhbXBsZSwKKyMgY2FsbGluZyB0aGlzIHdpdGggcyA9ICJ0X2Zvb19iYXJfU1BBTSIgbWlnaHQgcmV0dXJuICgoJ2ZvbycsJ2JhcicpLCdTUEFNJykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIF9zdGF0ZXRva2VuKHMsbmFtZXMpOgorICAgIG5vbnN0YXRlID0gMQorICAgIHBhcnRzID0gcy5zcGxpdCgiXyIpCisgICAgZm9yIGkgaW4gcmFuZ2UoMSxsZW4ocGFydHMpKToKKyAgICAgICAgIGlmIG5vdCBwYXJ0c1tpXSBpbiBuYW1lcyBhbmQgcGFydHNbaV0gIT0gJ0FOWSc6IGJyZWFrCisgICAgaWYgaSA+IDE6CisgICAgICAgc3RhdGVzID0gdHVwbGUocGFydHNbMTppXSkKKyAgICBlbHNlOgorICAgICAgIHN0YXRlcyA9ICgnSU5JVElBTCcsKQorCisgICAgaWYgJ0FOWScgaW4gc3RhdGVzOgorICAgICAgIHN0YXRlcyA9IHR1cGxlKG5hbWVzKQorCisgICAgdG9rZW5uYW1lID0gIl8iLmpvaW4ocGFydHNbaTpdKQorICAgIHJldHVybiAoc3RhdGVzLHRva2VubmFtZSkKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExleGVyUmVmbGVjdCgpCisjCisjIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQgYSBsZXhlciBhcyBleHRyYWN0ZWQgZnJvbSBhCisjIHVzZXIncyBpbnB1dCBmaWxlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgTGV4ZXJSZWZsZWN0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsbGRpY3QsbG9nPU5vbmUscmVmbGFncz0wKToKKyAgICAgICAgc2VsZi5sZGljdCAgICAgID0gbGRpY3QKKyAgICAgICAgc2VsZi5lcnJvcl9mdW5jID0gTm9uZQorICAgICAgICBzZWxmLnRva2VucyAgICAgPSBbXQorICAgICAgICBzZWxmLnJlZmxhZ3MgICAgPSByZWZsYWdzCisgICAgICAgIHNlbGYuc3RhdGVpbmZvICA9IHsgJ0lOSVRJQUwnIDogJ2luY2x1c2l2ZSd9CisgICAgICAgIHNlbGYuZmlsZXMgICAgICA9IHt9CisgICAgICAgIHNlbGYuZXJyb3IgICAgICA9IDAKKworICAgICAgICBpZiBsb2cgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubG9nID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZyA9IGxvZworCisgICAgIyBHZXQgYWxsIG9mIHRoZSBiYXNpYyBpbmZvcm1hdGlvbgorICAgIGRlZiBnZXRfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmdldF90b2tlbnMoKQorICAgICAgICBzZWxmLmdldF9saXRlcmFscygpCisgICAgICAgIHNlbGYuZ2V0X3N0YXRlcygpCisgICAgICAgIHNlbGYuZ2V0X3J1bGVzKCkKKyAgICAgICAgCisgICAgIyBWYWxpZGF0ZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uCisgICAgZGVmIHZhbGlkYXRlX2FsbChzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZV90b2tlbnMoKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2xpdGVyYWxzKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9ydWxlcygpCisgICAgICAgIHJldHVybiBzZWxmLmVycm9yCisKKyAgICAjIEdldCB0aGUgdG9rZW5zIG1hcAorICAgIGRlZiBnZXRfdG9rZW5zKHNlbGYpOgorICAgICAgICB0b2tlbnMgPSBzZWxmLmxkaWN0LmdldCgidG9rZW5zIixOb25lKQorICAgICAgICBpZiBub3QgdG9rZW5zOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk5vIHRva2VuIGxpc3QgaXMgZGVmaW5lZCIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodG9rZW5zLChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInRva2VucyBtdXN0IGJlIGEgbGlzdCBvciB0dXBsZSIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIAorICAgICAgICBpZiBub3QgdG9rZW5zOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInRva2VucyBpcyBlbXB0eSIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi50b2tlbnMgPSB0b2tlbnMKKworICAgICMgVmFsaWRhdGUgdGhlIHRva2VucworICAgIGRlZiB2YWxpZGF0ZV90b2tlbnMoc2VsZik6CisgICAgICAgIHRlcm1pbmFscyA9IHt9CisgICAgICAgIGZvciBuIGluIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgaWYgbm90IF9pc19pZGVudGlmaWVyLm1hdGNoKG4pOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJCYWQgdG9rZW4gbmFtZSAnJXMnIixuKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICBpZiBuIGluIHRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCJUb2tlbiAnJXMnIG11bHRpcGx5IGRlZmluZWQiLCBuKQorICAgICAgICAgICAgdGVybWluYWxzW25dID0gMQorCisgICAgIyBHZXQgdGhlIGxpdGVyYWxzIHNwZWNpZmllcgorICAgIGRlZiBnZXRfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgIHNlbGYubGl0ZXJhbHMgPSBzZWxmLmxkaWN0LmdldCgibGl0ZXJhbHMiLCIiKQorCisgICAgIyBWYWxpZGF0ZSBsaXRlcmFscworICAgIGRlZiB2YWxpZGF0ZV9saXRlcmFscyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGMgaW4gc2VsZi5saXRlcmFsczoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjLFN0cmluZ1R5cGVzKSBvciBsZW4oYykgPiAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiSW52YWxpZCBsaXRlcmFsICVzLiBNdXN0IGJlIGEgc2luZ2xlIGNoYXJhY3RlciIsIHJlcHIoYykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJJbnZhbGlkIGxpdGVyYWxzIHNwZWNpZmljYXRpb24uIGxpdGVyYWxzIG11c3QgYmUgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICBkZWYgZ2V0X3N0YXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5zdGF0ZXMgPSBzZWxmLmxkaWN0LmdldCgic3RhdGVzIixOb25lKQorICAgICAgICAjIEJ1aWxkIHN0YXRlbWFwCisgICAgICAgIGlmIHNlbGYuc3RhdGVzOgorICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhdGVzLCh0dXBsZSxsaXN0KSk6CisgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigic3RhdGVzIG11c3QgYmUgZGVmaW5lZCBhcyBhIHR1cGxlIG9yIGxpc3QiKQorICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc2VsZi5zdGF0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLHR1cGxlKSBvciBsZW4ocykgIT0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiSW52YWxpZCBzdGF0ZSBzcGVjaWZpZXIgJXMuIE11c3QgYmUgYSB0dXBsZSAoc3RhdGVuYW1lLCdleGNsdXNpdmV8aW5jbHVzaXZlJykiLHJlcHIocykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc3RhdGV0eXBlID0gcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSxTdHJpbmdUeXBlcyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlN0YXRlIG5hbWUgJXMgbXVzdCBiZSBhIHN0cmluZyIsIHJlcHIobmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IChzdGF0ZXR5cGUgPT0gJ2luY2x1c2l2ZScgb3Igc3RhdGV0eXBlID09ICdleGNsdXNpdmUnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiU3RhdGUgdHlwZSBmb3Igc3RhdGUgJXMgbXVzdCBiZSAnaW5jbHVzaXZlJyBvciAnZXhjbHVzaXZlJyIsbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuc3RhdGVpbmZvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJTdGF0ZSAnJXMnIGFscmVhZHkgZGVmaW5lZCIsbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlaW5mb1tuYW1lXSA9IHN0YXRldHlwZQorCisgICAgIyBHZXQgYWxsIG9mIHRoZSBzeW1ib2xzIHdpdGggYSB0XyBwcmVmaXggYW5kIHNvcnQgdGhlbSBpbnRvIHZhcmlvdXMKKyAgICAjIGNhdGVnb3JpZXMgKGZ1bmN0aW9ucywgc3RyaW5ncywgZXJyb3IgZnVuY3Rpb25zLCBhbmQgaWdub3JlIGNoYXJhY3RlcnMpCisKKyAgICBkZWYgZ2V0X3J1bGVzKHNlbGYpOgorICAgICAgICB0c3ltYm9scyA9IFtmIGZvciBmIGluIHNlbGYubGRpY3QgaWYgZls6Ml0gPT0gJ3RfJyBdCisKKyAgICAgICAgIyBOb3cgYnVpbGQgdXAgYSBsaXN0IG9mIGZ1bmN0aW9ucyBhbmQgYSBsaXN0IG9mIHN0cmluZ3MKKworICAgICAgICBzZWxmLnRva25hbWVzID0geyB9ICAgICAgICAjIE1hcHBpbmcgb2Ygc3ltYm9scyB0byB0b2tlbiBuYW1lcworICAgICAgICBzZWxmLmZ1bmNzeW0gPSAgeyB9ICAgICAgICAjIFN5bWJvbHMgZGVmaW5lZCBhcyBmdW5jdGlvbnMKKyAgICAgICAgc2VsZi5zdHJzeW0gPSAgIHsgfSAgICAgICAgIyBTeW1ib2xzIGRlZmluZWQgYXMgc3RyaW5ncworICAgICAgICBzZWxmLmlnbm9yZSAgID0geyB9ICAgICAgICAjIElnbm9yZSBzdHJpbmdzIGJ5IHN0YXRlCisgICAgICAgIHNlbGYuZXJyb3JmICAgPSB7IH0gICAgICAgICMgRXJyb3IgZnVuY3Rpb25zIGJ5IHN0YXRlCisKKyAgICAgICAgZm9yIHMgaW4gc2VsZi5zdGF0ZWluZm86CisgICAgICAgICAgICAgc2VsZi5mdW5jc3ltW3NdID0gW10KKyAgICAgICAgICAgICBzZWxmLnN0cnN5bVtzXSA9IFtdCisKKyAgICAgICAgaWYgbGVuKHRzeW1ib2xzKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk5vIHJ1bGVzIG9mIHRoZSBmb3JtIHRfcnVsZW5hbWUgYXJlIGRlZmluZWQiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciBmIGluIHRzeW1ib2xzOgorICAgICAgICAgICAgdCA9IHNlbGYubGRpY3RbZl0KKyAgICAgICAgICAgIHN0YXRlcywgdG9rbmFtZSA9IF9zdGF0ZXRva2VuKGYsc2VsZi5zdGF0ZWluZm8pCisgICAgICAgICAgICBzZWxmLnRva25hbWVzW2ZdID0gdG9rbmFtZQorCisgICAgICAgICAgICBpZiBoYXNhdHRyKHQsIl9fY2FsbF9fIik6CisgICAgICAgICAgICAgICAgaWYgdG9rbmFtZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yZltzXSA9IHQKKyAgICAgICAgICAgICAgICBlbGlmIHRva25hbWUgPT0gJ2lnbm9yZSc6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmdW5jX2NvZGUodCkuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZ1bmNfY29kZSh0KS5jb19maWxlbmFtZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyBtdXN0IGJlIGRlZmluZWQgYXMgYSBzdHJpbmciLGZpbGUsbGluZSx0Ll9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIHN0YXRlczogCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZ1bmNzeW1bc10uYXBwZW5kKChmLHQpKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHQsIFN0cmluZ1R5cGVzKToKKyAgICAgICAgICAgICAgICBpZiB0b2tuYW1lID09ICdpZ25vcmUnOgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlnbm9yZVtzXSA9IHQKKyAgICAgICAgICAgICAgICAgICAgaWYgIlxcIiBpbiB0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiJXMgY29udGFpbnMgYSBsaXRlcmFsIGJhY2tzbGFzaCAnXFwnIixmKQorCisgICAgICAgICAgICAgICAgZWxpZiB0b2tuYW1lID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJSdWxlICclcycgbXVzdCBiZSBkZWZpbmVkIGFzIGEgZnVuY3Rpb24iLCBmKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIHN0YXRlczogCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cnN5bVtzXS5hcHBlbmQoKGYsdCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBub3QgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uIG9yIHN0cmluZyIsIGYpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICAgICAjIFNvcnQgdGhlIGZ1bmN0aW9ucyBieSBsaW5lIG51bWJlcgorICAgICAgICBmb3IgZiBpbiBzZWxmLmZ1bmNzeW0udmFsdWVzKCk6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICAgICAgICAgICAgICBmLnNvcnQobGFtYmRhIHgseTogY21wKGZ1bmNfY29kZSh4WzFdKS5jb19maXJzdGxpbmVubyxmdW5jX2NvZGUoeVsxXSkuY29fZmlyc3RsaW5lbm8pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFB5dGhvbiAzLjAKKyAgICAgICAgICAgICAgICBmLnNvcnQoa2V5PWxhbWJkYSB4OiBmdW5jX2NvZGUoeFsxXSkuY29fZmlyc3RsaW5lbm8pCisKKyAgICAgICAgIyBTb3J0IHRoZSBzdHJpbmdzIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiBsZW5ndGgKKyAgICAgICAgZm9yIHMgaW4gc2VsZi5zdHJzeW0udmFsdWVzKCk6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICAgICAgICAgICAgICBzLnNvcnQobGFtYmRhIHgseTogKGxlbih4WzFdKSA8IGxlbih5WzFdKSkgLSAobGVuKHhbMV0pID4gbGVuKHlbMV0pKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBQeXRob24gMy4wCisgICAgICAgICAgICAgICAgcy5zb3J0KGtleT1sYW1iZGEgeDogbGVuKHhbMV0pLHJldmVyc2U9VHJ1ZSkKKworICAgICMgVmFsaWRhdGUgYWxsIG9mIHRoZSB0X3J1bGVzIGNvbGxlY3RlZCAKKyAgICBkZWYgdmFsaWRhdGVfcnVsZXMoc2VsZik6CisgICAgICAgIGZvciBzdGF0ZSBpbiBzZWxmLnN0YXRlaW5mbzoKKyAgICAgICAgICAgICMgVmFsaWRhdGUgYWxsIHJ1bGVzIGRlZmluZWQgYnkgZnVuY3Rpb25zCisKKyAgICAgICAgICAgIAorCisgICAgICAgICAgICBmb3IgZm5hbWUsIGYgaW4gc2VsZi5mdW5jc3ltW3N0YXRlXToKKyAgICAgICAgICAgICAgICBsaW5lID0gZnVuY19jb2RlKGYpLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICAgICAgZmlsZSA9IGZ1bmNfY29kZShmKS5jb19maWxlbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuZmlsZXNbZmlsZV0gPSAxCisKKyAgICAgICAgICAgICAgICB0b2tuYW1lID0gc2VsZi50b2tuYW1lc1tmbmFtZV0KKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGYsIHR5cGVzLk1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgICAgICByZXFhcmdzID0gMgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlcWFyZ3MgPSAxCisgICAgICAgICAgICAgICAgbmFyZ3MgPSBmdW5jX2NvZGUoZikuY29fYXJnY291bnQKKyAgICAgICAgICAgICAgICBpZiBuYXJncyA+IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIGhhcyB0b28gbWFueSBhcmd1bWVudHMiLGZpbGUsbGluZSxmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPCByZXFhcmdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyByZXF1aXJlcyBhbiBhcmd1bWVudCIsIGZpbGUsbGluZSxmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IGYuX19kb2NfXzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBObyByZWd1bGFyIGV4cHJlc3Npb24gZGVmaW5lZCBmb3IgcnVsZSAnJXMnIixmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYyA9IHJlLmNvbXBpbGUoIig/UDwlcz4lcykiICUgKGZuYW1lLGYuX19kb2NfXyksIHJlLlZFUkJPU0UgfCBzZWxmLnJlZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIGlmIGMubWF0Y2goIiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHJ1bGUgJyVzJyBtYXRjaGVzIGVtcHR5IHN0cmluZyIsIGZpbGUsbGluZSxmLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIF9ldHlwZSwgZSwgX2V0cmFjZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHJ1bGUgJyVzJy4gJXMiLCBmaWxlLGxpbmUsZi5fX25hbWVfXyxlKQorICAgICAgICAgICAgICAgICAgICBpZiAnIycgaW4gZi5fX2RvY19fOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkLiBNYWtlIHN1cmUgJyMnIGluIHJ1bGUgJyVzJyBpcyBlc2NhcGVkIHdpdGggJ1xcIyciLGZpbGUsbGluZSwgZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICAgICAgICAgIyBWYWxpZGF0ZSBhbGwgcnVsZXMgZGVmaW5lZCBieSBzdHJpbmdzCisgICAgICAgICAgICBmb3IgbmFtZSxyIGluIHNlbGYuc3Ryc3ltW3N0YXRlXToKKyAgICAgICAgICAgICAgICB0b2tuYW1lID0gc2VsZi50b2tuYW1lc1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIHRva25hbWUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlJ1bGUgJyVzJyBtdXN0IGJlIGRlZmluZWQgYXMgYSBmdW5jdGlvbiIsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3QgdG9rbmFtZSBpbiBzZWxmLnRva2VucyBhbmQgdG9rbmFtZS5maW5kKCJpZ25vcmVfIikgPCAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiUnVsZSAnJXMnIGRlZmluZWQgZm9yIGFuIHVuc3BlY2lmaWVkIHRva2VuICVzIixuYW1lLHRva25hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGMgPSByZS5jb21waWxlKCIoP1A8JXM+JXMpIiAlIChuYW1lLHIpLHJlLlZFUkJPU0UgfCBzZWxmLnJlZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIGlmIChjLm1hdGNoKCIiKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcnVsZSAnJXMnIG1hdGNoZXMgZW1wdHkgc3RyaW5nIixuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgZXhjZXB0IHJlLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBfZXR5cGUsIGUsIF9ldHJhY2UgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHJ1bGUgJyVzJy4gJXMiLG5hbWUsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgJyMnIGluIHI6CisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk1ha2Ugc3VyZSAnIycgaW4gcnVsZSAnJXMnIGlzIGVzY2FwZWQgd2l0aCAnXFwjJyIsbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuZnVuY3N5bVtzdGF0ZV0gYW5kIG5vdCBzZWxmLnN0cnN5bVtzdGF0ZV06CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk5vIHJ1bGVzIGRlZmluZWQgZm9yIHN0YXRlICclcyciLHN0YXRlKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgICMgVmFsaWRhdGUgdGhlIGVycm9yIGZ1bmN0aW9uCisgICAgICAgICAgICBlZnVuYyA9IHNlbGYuZXJyb3JmLmdldChzdGF0ZSxOb25lKQorICAgICAgICAgICAgaWYgZWZ1bmM6CisgICAgICAgICAgICAgICAgZiA9IGVmdW5jCisgICAgICAgICAgICAgICAgbGluZSA9IGZ1bmNfY29kZShmKS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUoZikuY29fZmlsZW5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVzW2ZpbGVdID0gMQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgcmVxYXJncyA9IDIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXFhcmdzID0gMQorICAgICAgICAgICAgICAgIG5hcmdzID0gZnVuY19jb2RlKGYpLmNvX2FyZ2NvdW50CisgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPiByZXFhcmdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyBoYXMgdG9vIG1hbnkgYXJndW1lbnRzIixmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICAgICAgICAgICAgIGlmIG5hcmdzIDwgcmVxYXJnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgcmVxdWlyZXMgYW4gYXJndW1lbnQiLCBmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICAgICBmb3IgZiBpbiBzZWxmLmZpbGVzOgorICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9maWxlKGYpCisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHZhbGlkYXRlX2ZpbGUoKQorICAgICMKKyAgICAjIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBhcmUgZHVwbGljYXRlZCB0X3J1bGVuYW1lKCkgZnVuY3Rpb25zIG9yIHN0cmluZ3MKKyAgICAjIGluIHRoZSBwYXJzZXIgaW5wdXQgZmlsZS4gIFRoaXMgaXMgZG9uZSB1c2luZyBhIHNpbXBsZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAjIG1hdGNoIG9uIGVhY2ggbGluZSBpbiB0aGUgZ2l2ZW4gZmlsZS4gIAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB2YWxpZGF0ZV9maWxlKHNlbGYsZmlsZW5hbWUpOgorICAgICAgICBpbXBvcnQgb3MucGF0aAorICAgICAgICBiYXNlLGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgIGlmIGV4dCAhPSAnLnB5JzogcmV0dXJuICAgICAgICAgIyBObyBpZGVhIHdoYXQgdGhlIGZpbGUgaXMuIFJldHVybiBPSworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQorICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgIyBDb3VsZG4ndCBmaW5kIHRoZSBmaWxlLiAgRG9uJ3Qgd29ycnkgYWJvdXQgaXQKKworICAgICAgICBmcmUgPSByZS5jb21waWxlKHInXHMqZGVmXHMrKHRfW2EtekEtWl8wLTldKilcKCcpCisgICAgICAgIHNyZSA9IHJlLmNvbXBpbGUocidccyoodF9bYS16QS1aXzAtOV0qKVxzKj0nKQorCisgICAgICAgIGNvdW50aGFzaCA9IHsgfQorICAgICAgICBsaW5lbiA9IDEKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gZnJlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICBtID0gc3JlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgcHJldiA9IGNvdW50aGFzaC5nZXQobmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcHJldjoKKyAgICAgICAgICAgICAgICAgICAgY291bnRoYXNoW25hbWVdID0gbGluZW4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJXMgcmVkZWZpbmVkLiBQcmV2aW91c2x5IGRlZmluZWQgb24gbGluZSAlZCIsZmlsZW5hbWUsbGluZW4sbmFtZSxwcmV2KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgbGluZW4gKz0gMQorICAgICAgICAgICAgCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxleChtb2R1bGUpCisjCisjIEJ1aWxkIGFsbCBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIHJ1bGVzIGZyb20gZGVmaW5pdGlvbnMgaW4gdGhlIHN1cHBsaWVkIG1vZHVsZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIGxleChtb2R1bGU9Tm9uZSxvYmplY3Q9Tm9uZSxkZWJ1Zz0wLG9wdGltaXplPTAsbGV4dGFiPSJsZXh0YWIiLHJlZmxhZ3M9MCxub3dhcm49MCxvdXRwdXRkaXI9IiIsIGRlYnVnbG9nPU5vbmUsIGVycm9ybG9nPU5vbmUpOgorICAgIGdsb2JhbCBsZXhlcgorICAgIGxkaWN0ID0gTm9uZQorICAgIHN0YXRlaW5mbyAgPSB7ICdJTklUSUFMJyA6ICdpbmNsdXNpdmUnfQorICAgIGxleG9iaiA9IExleGVyKCkKKyAgICBsZXhvYmoubGV4b3B0aW1pemUgPSBvcHRpbWl6ZQorICAgIGdsb2JhbCB0b2tlbixpbnB1dAorCisgICAgaWYgZXJyb3Jsb2cgaXMgTm9uZToKKyAgICAgICAgZXJyb3Jsb2cgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKworICAgIGlmIGRlYnVnOgorICAgICAgICBpZiBkZWJ1Z2xvZyBpcyBOb25lOgorICAgICAgICAgICAgZGVidWdsb2cgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKworICAgICMgR2V0IHRoZSBtb2R1bGUgZGljdGlvbmFyeSB1c2VkIGZvciB0aGUgbGV4ZXIKKyAgICBpZiBvYmplY3Q6IG1vZHVsZSA9IG9iamVjdAorCisgICAgaWYgbW9kdWxlOgorICAgICAgICBfaXRlbXMgPSBbKGssZ2V0YXR0cihtb2R1bGUsaykpIGZvciBrIGluIGRpcihtb2R1bGUpXQorICAgICAgICBsZGljdCA9IGRpY3QoX2l0ZW1zKQorICAgIGVsc2U6CisgICAgICAgIGxkaWN0ID0gZ2V0X2NhbGxlcl9tb2R1bGVfZGljdCgyKQorCisgICAgIyBDb2xsZWN0IHBhcnNlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkaWN0aW9uYXJ5CisgICAgbGluZm8gPSBMZXhlclJlZmxlY3QobGRpY3QsbG9nPWVycm9ybG9nLHJlZmxhZ3M9cmVmbGFncykKKyAgICBsaW5mby5nZXRfYWxsKCkKKyAgICBpZiBub3Qgb3B0aW1pemU6CisgICAgICAgIGlmIGxpbmZvLnZhbGlkYXRlX2FsbCgpOgorICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIkNhbid0IGJ1aWxkIGxleGVyIikKKworICAgIGlmIG9wdGltaXplIGFuZCBsZXh0YWI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxleG9iai5yZWFkdGFiKGxleHRhYixsZGljdCkKKyAgICAgICAgICAgIHRva2VuID0gbGV4b2JqLnRva2VuCisgICAgICAgICAgICBpbnB1dCA9IGxleG9iai5pbnB1dAorICAgICAgICAgICAgbGV4ZXIgPSBsZXhvYmoKKyAgICAgICAgICAgIHJldHVybiBsZXhvYmoKKworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIER1bXAgc29tZSBiYXNpYyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiB0b2tlbnMgICA9ICVyIiwgbGluZm8udG9rZW5zKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6IGxpdGVyYWxzID0gJXIiLCBsaW5mby5saXRlcmFscykKKyAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiBzdGF0ZXMgICA9ICVyIiwgbGluZm8uc3RhdGVpbmZvKQorCisgICAgIyBCdWlsZCBhIGRpY3Rpb25hcnkgb2YgdmFsaWQgdG9rZW4gbmFtZXMKKyAgICBsZXhvYmoubGV4dG9rZW5zID0geyB9CisgICAgZm9yIG4gaW4gbGluZm8udG9rZW5zOgorICAgICAgICBsZXhvYmoubGV4dG9rZW5zW25dID0gMQorCisgICAgIyBHZXQgbGl0ZXJhbHMgc3BlY2lmaWNhdGlvbgorICAgIGlmIGlzaW5zdGFuY2UobGluZm8ubGl0ZXJhbHMsKGxpc3QsdHVwbGUpKToKKyAgICAgICAgbGV4b2JqLmxleGxpdGVyYWxzID0gdHlwZShsaW5mby5saXRlcmFsc1swXSkoKS5qb2luKGxpbmZvLmxpdGVyYWxzKQorICAgIGVsc2U6CisgICAgICAgIGxleG9iai5sZXhsaXRlcmFscyA9IGxpbmZvLmxpdGVyYWxzCisKKyAgICAjIEdldCB0aGUgc3RhdGVpbmZvIGRpY3Rpb25hcnkKKyAgICBzdGF0ZWluZm8gPSBsaW5mby5zdGF0ZWluZm8KKworICAgIHJlZ2V4cyA9IHsgfQorICAgICMgQnVpbGQgdGhlIG1hc3RlciByZWd1bGFyIGV4cHJlc3Npb25zCisgICAgZm9yIHN0YXRlIGluIHN0YXRlaW5mbzoKKyAgICAgICAgcmVnZXhfbGlzdCA9IFtdCisKKyAgICAgICAgIyBBZGQgcnVsZXMgZGVmaW5lZCBieSBmdW5jdGlvbnMgZmlyc3QKKyAgICAgICAgZm9yIGZuYW1lLCBmIGluIGxpbmZvLmZ1bmNzeW1bc3RhdGVdOgorICAgICAgICAgICAgbGluZSA9IGZ1bmNfY29kZShmKS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgZmlsZSA9IGZ1bmNfY29kZShmKS5jb19maWxlbmFtZQorICAgICAgICAgICAgcmVnZXhfbGlzdC5hcHBlbmQoIig/UDwlcz4lcykiICUgKGZuYW1lLGYuX19kb2NfXykpCisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6IEFkZGluZyBydWxlICVzIC0+ICclcycgKHN0YXRlICclcycpIixmbmFtZSxmLl9fZG9jX18sIHN0YXRlKQorCisgICAgICAgICMgTm93IGFkZCBhbGwgb2YgdGhlIHNpbXBsZSBydWxlcworICAgICAgICBmb3IgbmFtZSxyIGluIGxpbmZvLnN0cnN5bVtzdGF0ZV06CisgICAgICAgICAgICByZWdleF9saXN0LmFwcGVuZCgiKD9QPCVzPiVzKSIgJSAobmFtZSxyKSkKKyAgICAgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogQWRkaW5nIHJ1bGUgJXMgLT4gJyVzJyAoc3RhdGUgJyVzJykiLG5hbWUsciwgc3RhdGUpCisKKyAgICAgICAgcmVnZXhzW3N0YXRlXSA9IHJlZ2V4X2xpc3QKKworICAgICMgQnVpbGQgdGhlIG1hc3RlciByZWd1bGFyIGV4cHJlc3Npb25zCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiA9PT09IE1BU1RFUiBSRUdFWFMgRk9MTE9XID09PT0iKQorCisgICAgZm9yIHN0YXRlIGluIHJlZ2V4czoKKyAgICAgICAgbGV4cmUsIHJlX3RleHQsIHJlX25hbWVzID0gX2Zvcm1fbWFzdGVyX3JlKHJlZ2V4c1tzdGF0ZV0scmVmbGFncyxsZGljdCxsaW5mby50b2tuYW1lcykKKyAgICAgICAgbGV4b2JqLmxleHN0YXRlcmVbc3RhdGVdID0gbGV4cmUKKyAgICAgICAgbGV4b2JqLmxleHN0YXRlcmV0ZXh0W3N0YXRlXSA9IHJlX3RleHQKKyAgICAgICAgbGV4b2JqLmxleHN0YXRlcmVuYW1lc1tzdGF0ZV0gPSByZV9uYW1lcworICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihyZV90ZXh0KSk6CisgICAgICAgICAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiBzdGF0ZSAnJXMnIDogcmVnZXhbJWRdID0gJyVzJyIsc3RhdGUsIGksIHJlX3RleHRbaV0pCisKKyAgICAjIEZvciBpbmNsdXNpdmUgc3RhdGVzLCB3ZSBuZWVkIHRvIGFkZCB0aGUgcmVndWxhciBleHByZXNzaW9ucyBmcm9tIHRoZSBJTklUSUFMIHN0YXRlCisgICAgZm9yIHN0YXRlLHN0eXBlIGluIHN0YXRlaW5mby5pdGVtcygpOgorICAgICAgICBpZiBzdGF0ZSAhPSAiSU5JVElBTCIgYW5kIHN0eXBlID09ICdpbmNsdXNpdmUnOgorICAgICAgICAgICAgIGxleG9iai5sZXhzdGF0ZXJlW3N0YXRlXS5leHRlbmQobGV4b2JqLmxleHN0YXRlcmVbJ0lOSVRJQUwnXSkKKyAgICAgICAgICAgICBsZXhvYmoubGV4c3RhdGVyZXRleHRbc3RhdGVdLmV4dGVuZChsZXhvYmoubGV4c3RhdGVyZXRleHRbJ0lOSVRJQUwnXSkKKyAgICAgICAgICAgICBsZXhvYmoubGV4c3RhdGVyZW5hbWVzW3N0YXRlXS5leHRlbmQobGV4b2JqLmxleHN0YXRlcmVuYW1lc1snSU5JVElBTCddKQorCisgICAgbGV4b2JqLmxleHN0YXRlaW5mbyA9IHN0YXRlaW5mbworICAgIGxleG9iai5sZXhyZSA9IGxleG9iai5sZXhzdGF0ZXJlWyJJTklUSUFMIl0KKyAgICBsZXhvYmoubGV4cmV0ZXh0ID0gbGV4b2JqLmxleHN0YXRlcmV0ZXh0WyJJTklUSUFMIl0KKyAgICBsZXhvYmoubGV4cmVmbGFncyA9IHJlZmxhZ3MKKworICAgICMgU2V0IHVwIGlnbm9yZSB2YXJpYWJsZXMKKyAgICBsZXhvYmoubGV4c3RhdGVpZ25vcmUgPSBsaW5mby5pZ25vcmUKKyAgICBsZXhvYmoubGV4aWdub3JlID0gbGV4b2JqLmxleHN0YXRlaWdub3JlLmdldCgiSU5JVElBTCIsIiIpCisKKyAgICAjIFNldCB1cCBlcnJvciBmdW5jdGlvbnMKKyAgICBsZXhvYmoubGV4c3RhdGVlcnJvcmYgPSBsaW5mby5lcnJvcmYKKyAgICBsZXhvYmoubGV4ZXJyb3JmID0gbGluZm8uZXJyb3JmLmdldCgiSU5JVElBTCIsTm9uZSkKKyAgICBpZiBub3QgbGV4b2JqLmxleGVycm9yZjoKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygiTm8gdF9lcnJvciBydWxlIGlzIGRlZmluZWQiKQorCisgICAgIyBDaGVjayBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgaWdub3JlIGFuZCBlcnJvciBydWxlcworICAgIGZvciBzLHN0eXBlIGluIHN0YXRlaW5mby5pdGVtcygpOgorICAgICAgICBpZiBzdHlwZSA9PSAnZXhjbHVzaXZlJzoKKyAgICAgICAgICAgICAgaWYgbm90IHMgaW4gbGluZm8uZXJyb3JmOgorICAgICAgICAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIk5vIGVycm9yIHJ1bGUgaXMgZGVmaW5lZCBmb3IgZXhjbHVzaXZlIHN0YXRlICclcyciLCBzKQorICAgICAgICAgICAgICBpZiBub3QgcyBpbiBsaW5mby5pZ25vcmUgYW5kIGxleG9iai5sZXhpZ25vcmU6CisgICAgICAgICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiTm8gaWdub3JlIHJ1bGUgaXMgZGVmaW5lZCBmb3IgZXhjbHVzaXZlIHN0YXRlICclcyciLCBzKQorICAgICAgICBlbGlmIHN0eXBlID09ICdpbmNsdXNpdmUnOgorICAgICAgICAgICAgICBpZiBub3QgcyBpbiBsaW5mby5lcnJvcmY6CisgICAgICAgICAgICAgICAgICAgbGluZm8uZXJyb3JmW3NdID0gbGluZm8uZXJyb3JmLmdldCgiSU5JVElBTCIsTm9uZSkKKyAgICAgICAgICAgICAgaWYgbm90IHMgaW4gbGluZm8uaWdub3JlOgorICAgICAgICAgICAgICAgICAgIGxpbmZvLmlnbm9yZVtzXSA9IGxpbmZvLmlnbm9yZS5nZXQoIklOSVRJQUwiLCIiKQorCisgICAgIyBDcmVhdGUgZ2xvYmFsIHZlcnNpb25zIG9mIHRoZSB0b2tlbigpIGFuZCBpbnB1dCgpIGZ1bmN0aW9ucworICAgIHRva2VuID0gbGV4b2JqLnRva2VuCisgICAgaW5wdXQgPSBsZXhvYmouaW5wdXQKKyAgICBsZXhlciA9IGxleG9iagorCisgICAgIyBJZiBpbiBvcHRpbWl6ZSBtb2RlLCB3ZSB3cml0ZSB0aGUgbGV4dGFiCisgICAgaWYgbGV4dGFiIGFuZCBvcHRpbWl6ZToKKyAgICAgICAgbGV4b2JqLndyaXRldGFiKGxleHRhYixvdXRwdXRkaXIpCisKKyAgICByZXR1cm4gbGV4b2JqCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcnVubWFpbigpCisjCisjIFRoaXMgcnVucyB0aGUgbGV4ZXIgYXMgYSBtYWluIHByb2dyYW0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHJ1bm1haW4obGV4ZXI9Tm9uZSxkYXRhPU5vbmUpOgorICAgIGlmIG5vdCBkYXRhOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IHN5cy5hcmd2WzFdCisgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiUmVhZGluZyBmcm9tIHN0YW5kYXJkIGlucHV0ICh0eXBlIEVPRiB0byBlbmQpOlxuIikKKyAgICAgICAgICAgIGRhdGEgPSBzeXMuc3RkaW4ucmVhZCgpCisKKyAgICBpZiBsZXhlcjoKKyAgICAgICAgX2lucHV0ID0gbGV4ZXIuaW5wdXQKKyAgICBlbHNlOgorICAgICAgICBfaW5wdXQgPSBpbnB1dAorICAgIF9pbnB1dChkYXRhKQorICAgIGlmIGxleGVyOgorICAgICAgICBfdG9rZW4gPSBsZXhlci50b2tlbgorICAgIGVsc2U6CisgICAgICAgIF90b2tlbiA9IHRva2VuCisKKyAgICB3aGlsZSAxOgorICAgICAgICB0b2sgPSBfdG9rZW4oKQorICAgICAgICBpZiBub3QgdG9rOiBicmVhaworICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIoJXMsJXIsJWQsJWQpXG4iICUgKHRvay50eXBlLCB0b2sudmFsdWUsIHRvay5saW5lbm8sdG9rLmxleHBvcykpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQFRPS0VOKHJlZ2V4KQorIworIyBUaGlzIGRlY29yYXRvciBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHJlZ2V4IGV4cHJlc3Npb24gb24gYSBmdW5jdGlvbgorIyB3aGVuIGl0cyBkb2NzdHJpbmcgbWlnaHQgbmVlZCB0byBiZSBzZXQgaW4gYW4gYWx0ZXJuYXRpdmUgd2F5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBUT0tFTihyKToKKyAgICBkZWYgc2V0X2RvYyhmKToKKyAgICAgICAgaWYgaGFzYXR0cihyLCJfX2NhbGxfXyIpOgorICAgICAgICAgICAgZi5fX2RvY19fID0gci5fX2RvY19fCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmLl9fZG9jX18gPSByCisgICAgICAgIHJldHVybiBmCisgICAgcmV0dXJuIHNldF9kb2MKKworIyBBbHRlcm5hdGl2ZSBzcGVsbGluZyBvZiB0aGUgVE9LRU4gZGVjb3JhdG9yCitUb2tlbiA9IFRPS0VOCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcGx5L3lhY2MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS95YWNjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjhmZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3BseS95YWNjLnB5CkBAIC0wLDAgKzEsMzI3NiBAQAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBwbHk6IHlhY2MucHkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDksCisjIERhdmlkIE0uIEJlYXpsZXkgKERhYmVheiBMTEMpCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIAorIyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIERhdmlkIEJlYXpsZXkgb3IgRGFiZWF6IExMQyBtYXkgYmUgdXNlZCB0bworIyAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisjICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFRoaXMgaW1wbGVtZW50cyBhbiBMUiBwYXJzZXIgdGhhdCBpcyBjb25zdHJ1Y3RlZCBmcm9tIGdyYW1tYXIgcnVsZXMgZGVmaW5lZAorIyBhcyBQeXRob24gZnVuY3Rpb25zLiBUaGUgZ3JhbW1lciBpcyBzcGVjaWZpZWQgYnkgc3VwcGx5aW5nIHRoZSBCTkYgaW5zaWRlCisjIFB5dGhvbiBkb2N1bWVudGF0aW9uIHN0cmluZ3MuICBUaGUgaW5zcGlyYXRpb24gZm9yIHRoaXMgdGVjaG5pcXVlIHdhcyBib3Jyb3dlZAorIyBmcm9tIEpvaG4gQXljb2NrJ3MgU3BhcmsgcGFyc2luZyBzeXN0ZW0uICBQTFkgbWlnaHQgYmUgdmlld2VkIGFzIGNyb3NzIGJldHdlZW4KKyMgU3BhcmsgYW5kIHRoZSBHTlUgYmlzb24gdXRpbGl0eS4KKyMKKyMgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgb25seSBzb21ld2hhdCBvYmplY3Qtb3JpZW50ZWQuIFRoZQorIyBMUiBwYXJzZXIgaXRzZWxmIGlzIGRlZmluZWQgaW4gdGVybXMgb2YgYW4gb2JqZWN0ICh3aGljaCBhbGxvd3MgbXVsdGlwbGUKKyMgcGFyc2VycyB0byBjby1leGlzdCkuICBIb3dldmVyLCBtb3N0IG9mIHRoZSB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgdGFibGUKKyMgY29uc3RydWN0aW9uIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIGdsb2JhbCB2YXJpYWJsZXMuICBVc2VycyBzaG91bGRuJ3QKKyMgbm90aWNlIHVubGVzcyB0aGV5IGFyZSB0cnlpbmcgdG8gZGVmaW5lIG11bHRpcGxlIHBhcnNlcnMgYXQgdGhlIHNhbWUKKyMgdGltZSB1c2luZyB0aHJlYWRzIChpbiB3aGljaCBjYXNlIHRoZXkgc2hvdWxkIGhhdmUgdGhlaXIgaGVhZCBleGFtaW5lZCkuCisjCisjIFRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgYm90aCBTTFIgYW5kIExBTFIoMSkgcGFyc2luZy4gIExBTFIoMSkKKyMgc3VwcG9ydCB3YXMgb3JpZ2luYWxseSBpbXBsZW1lbnRlZCBieSBFbGlhcyBJb3VwIChlemlvdXBAYWx1bW5pLnVjaGljYWdvLmVkdSksCisjIHVzaW5nIHRoZSBhbGdvcml0aG0gZm91bmQgaW4gQWhvLCBTZXRoaSwgYW5kIFVsbG1hbiAiQ29tcGlsZXJzOiBQcmluY2lwbGVzLAorIyBUZWNobmlxdWVzLCBhbmQgVG9vbHMiIChUaGUgRHJhZ29uIEJvb2spLiAgTEFMUigxKSBoYXMgc2luY2UgYmVlbiByZXBsYWNlZAorIyBieSB0aGUgbW9yZSBlZmZpY2llbnQgRGVSZW1lciBhbmQgUGVubmVsbG8gYWxnb3JpdGhtLgorIworIyA6Ojo6Ojo6OiBXQVJOSU5HIDo6Ojo6OjoKKyMKKyMgQ29uc3RydWN0aW9uIG9mIExSIHBhcnNpbmcgdGFibGVzIGlzIGZhaXJseSBjb21wbGljYXRlZCBhbmQgZXhwZW5zaXZlLgorIyBUbyBtYWtlIHRoaXMgbW9kdWxlIHJ1biBmYXN0LCBhICpMT1QqIG9mIHdvcmsgaGFzIGJlZW4gcHV0IGludG8KKyMgb3B0aW1pemF0aW9uLS0tb2Z0ZW4gYXQgdGhlIGV4cGVuc2l2ZSBvZiByZWFkYWJpbGl0eSBhbmQgd2hhdCBtaWdodAorIyBjb25zaWRlciB0byBiZSBnb29kIFB5dGhvbiAiY29kaW5nIHN0eWxlLiIgICBNb2RpZnkgdGhlIGNvZGUgYXQgeW91cgorIyBvd24gcmlzayEKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitfX3ZlcnNpb25fXyAgICA9ICIzLjMiCitfX3RhYnZlcnNpb25fXyA9ICIzLjIiICAgICAgICMgVGFibGUgdmVyc2lvbgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICA9PT0gVXNlciBjb25maWd1cmFibGUgcGFyYW1ldGVycyA9PT0KKyMKKyMgQ2hhbmdlIHRoZXNlIHRvIG1vZGlmeSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB5YWNjIChpZiB5b3Ugd2lzaCkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit5YWNjZGVidWcgICA9IDAgICAgICAgICAgICAgICAgIyBEZWJ1Z2dpbmcgbW9kZS4gIElmIHNldCwgeWFjYyBnZW5lcmF0ZXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSAncGFyc2VyLm91dCcgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKworZGVidWdfZmlsZSAgPSAncGFyc2VyLm91dCcgICAgICMgRGVmYXVsdCBuYW1lIG9mIHRoZSBkZWJ1Z2dpbmcgZmlsZQordGFiX21vZHVsZSAgPSAncGFyc2V0YWInICAgICAgICMgRGVmYXVsdCBuYW1lIG9mIHRoZSB0YWJsZSBtb2R1bGUKK2RlZmF1bHRfbHIgID0gJ0xBTFInICAgICAgICAgICAjIERlZmF1bHQgTFIgdGFibGUgZ2VuZXJhdGlvbiBtZXRob2QKKworZXJyb3JfY291bnQgPSAzICAgICAgICAgICAgICAgICMgTnVtYmVyIG9mIHN5bWJvbHMgdGhhdCBtdXN0IGJlIHNoaWZ0ZWQgdG8gbGVhdmUgcmVjb3ZlcnkgbW9kZQorCit5YWNjZGV2ZWwgICA9IDAgICAgICAgICAgICAgICAgIyBTZXQgdG8gVHJ1ZSBpZiBkZXZlbG9waW5nIHlhY2MuICBUaGlzIHR1cm5zIG9mZiBvcHRpbWl6ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGltcGxlbWVudGF0aW9ucyBvZiBjZXJ0YWluIGZ1bmN0aW9ucy4KKworcmVzdWx0bGltaXQgPSA0MCAgICAgICAgICAgICAgICMgU2l6ZSBsaW1pdCBvZiByZXN1bHRzIHdoZW4gcnVubmluZyBpbiBkZWJ1ZyBtb2RlLgorCitwaWNrbGVfcHJvdG9jb2wgPSAwICAgICAgICAgICAgIyBQcm90b2NvbCB0byB1c2Ugd2hlbiB3cml0aW5nIHBpY2tsZSBmaWxlcworCitpbXBvcnQgcmUsIHR5cGVzLCBzeXMsIG9zLnBhdGgKKworIyBDb21wYXRpYmlsaXR5IGZ1bmN0aW9uIGZvciBweXRob24gMi42LzMuMAoraWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgZGVmIGZ1bmNfY29kZShmKToKKyAgICAgICAgcmV0dXJuIGYuZnVuY19jb2RlCitlbHNlOgorICAgIGRlZiBmdW5jX2NvZGUoZik6CisgICAgICAgIHJldHVybiBmLl9fY29kZV9fCisKKyMgQ29tcGF0aWJpbGl0eQordHJ5OgorICAgIE1BWElOVCA9IHN5cy5tYXhpbnQKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBNQVhJTlQgPSBzeXMubWF4c2l6ZQorCisjIFB5dGhvbiAyLngvMy4wIGNvbXBhdGliaWxpdHkuCitkZWYgbG9hZF9wbHlfbGV4KCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgIGltcG9ydCBsZXgKKyAgICBlbHNlOgorICAgICAgICBpbXBvcnQgcGx5LmxleCBhcyBsZXgKKyAgICByZXR1cm4gbGV4CisKKyMgVGhpcyBvYmplY3QgaXMgYSBzdGFuZC1pbiBmb3IgYSBsb2dnaW5nIG9iamVjdCBjcmVhdGVkIGJ5IHRoZSAKKyMgbG9nZ2luZyBtb2R1bGUuICAgUExZIHdpbGwgdXNlIHRoaXMgYnkgZGVmYXVsdCB0byBjcmVhdGUgdGhpbmdzCisjIHN1Y2ggYXMgdGhlIHBhcnNlci5vdXQgZmlsZS4gIElmIGEgdXNlciB3YW50cyBtb3JlIGRldGFpbGVkCisjIGluZm9ybWF0aW9uLCB0aGV5IGNhbiBjcmVhdGUgdGhlaXIgb3duIGxvZ2dpbmcgb2JqZWN0IGFuZCBwYXNzCisjIGl0IGludG8gUExZLgorCitjbGFzcyBQbHlMb2dnZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixmKToKKyAgICAgICAgc2VsZi5mID0gZgorICAgIGRlZiBkZWJ1ZyhzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgobXNnICUgYXJncykgKyAiXG4iKQorICAgIGluZm8gICAgID0gZGVidWcKKworICAgIGRlZiB3YXJuaW5nKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKCJXQVJOSU5HOiAiKyAobXNnICUgYXJncykgKyAiXG4iKQorCisgICAgZGVmIGVycm9yKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKCJFUlJPUjogIiArIChtc2cgJSBhcmdzKSArICJcbiIpCisKKyAgICBjcml0aWNhbCA9IGRlYnVnCisKKyMgTnVsbCBsb2dnZXIgaXMgdXNlZCB3aGVuIG5vIG91dHB1dCBpcyBnZW5lcmF0ZWQuIERvZXMgbm90aGluZy4KK2NsYXNzIE51bGxMb2dnZXIob2JqZWN0KToKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgCisjIEV4Y2VwdGlvbiByYWlzZWQgZm9yIHlhY2MtcmVsYXRlZCBlcnJvcnMKK2NsYXNzIFlhY2NFcnJvcihFeGNlcHRpb24pOiAgIHBhc3MKKworIyBGb3JtYXQgdGhlIHJlc3VsdCBtZXNzYWdlIHRoYXQgdGhlIHBhcnNlciBwcm9kdWNlcyB3aGVuIHJ1bm5pbmcgaW4gZGVidWcgbW9kZS4KK2RlZiBmb3JtYXRfcmVzdWx0KHIpOgorICAgIHJlcHJfc3RyID0gcmVwcihyKQorICAgIGlmICdcbicgaW4gcmVwcl9zdHI6IHJlcHJfc3RyID0gcmVwcihyZXByX3N0cikKKyAgICBpZiBsZW4ocmVwcl9zdHIpID4gcmVzdWx0bGltaXQ6CisgICAgICAgIHJlcHJfc3RyID0gcmVwcl9zdHJbOnJlc3VsdGxpbWl0XSsiIC4uLiIKKyAgICByZXN1bHQgPSAiPCVzIEAgMHgleD4gKCVzKSIgJSAodHlwZShyKS5fX25hbWVfXyxpZChyKSxyZXByX3N0cikKKyAgICByZXR1cm4gcmVzdWx0CisKKworIyBGb3JtYXQgc3RhY2sgZW50cmllcyB3aGVuIHRoZSBwYXJzZXIgaXMgcnVubmluZyBpbiBkZWJ1ZyBtb2RlCitkZWYgZm9ybWF0X3N0YWNrX2VudHJ5KHIpOgorICAgIHJlcHJfc3RyID0gcmVwcihyKQorICAgIGlmICdcbicgaW4gcmVwcl9zdHI6IHJlcHJfc3RyID0gcmVwcihyZXByX3N0cikKKyAgICBpZiBsZW4ocmVwcl9zdHIpIDwgMTY6CisgICAgICAgIHJldHVybiByZXByX3N0cgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAiPCVzIEAgMHgleD4iICUgKHR5cGUocikuX19uYW1lX18saWQocikpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgID09PSAgTFIgUGFyc2luZyBFbmdpbmUgPT09CisjCisjIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgdXNlZCBmb3IgdGhlIExSIHBhcnNlciBpdHNlbGYuICBUaGVzZSBhcmUgbm90CisjIHVzZWQgZHVyaW5nIHRhYmxlIGNvbnN0cnVjdGlvbiBhbmQgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBhY3R1YWwgTFIKKyMgdGFibGUgZ2VuZXJhdGlvbiBhbGdvcml0aG0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBob2xkIG5vbi10ZXJtaW5hbCBncmFtbWFyIHN5bWJvbHMgZHVyaW5nIHBhcnNpbmcuCisjIEl0IG5vcm1hbGx5IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgc2V0OgorIyAgICAgICAgLnR5cGUgICAgICAgPSBHcmFtbWFyIHN5bWJvbCB0eXBlCisjICAgICAgICAudmFsdWUgICAgICA9IFN5bWJvbCB2YWx1ZQorIyAgICAgICAgLmxpbmVubyAgICAgPSBTdGFydGluZyBsaW5lIG51bWJlcgorIyAgICAgICAgLmVuZGxpbmVubyAgPSBFbmRpbmcgbGluZSBudW1iZXIgKG9wdGlvbmFsLCBzZXQgYXV0b21hdGljYWxseSkKKyMgICAgICAgIC5sZXhwb3MgICAgID0gU3RhcnRpbmcgbGV4IHBvc2l0aW9uCisjICAgICAgICAuZW5kbGV4cG9zICA9IEVuZGluZyBsZXggcG9zaXRpb24gKG9wdGlvbmFsLCBzZXQgYXV0b21hdGljYWxseSkKKworY2xhc3MgWWFjY1N5bWJvbDoKKyAgICBkZWYgX19zdHJfXyhzZWxmKTogICAgcmV0dXJuIHNlbGYudHlwZQorICAgIGRlZiBfX3JlcHJfXyhzZWxmKTogICByZXR1cm4gc3RyKHNlbGYpCisKKyMgVGhpcyBjbGFzcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBvYmplY3RzIGFjdHVhbGx5IHBhc3NlZCB0byBlYWNoCisjIGdyYW1tYXIgcnVsZS4gICBJbmRleCBsb29rdXAgYW5kIGFzc2lnbm1lbnQgYWN0dWFsbHkgYXNzaWduIHRoZQorIyAudmFsdWUgYXR0cmlidXRlIG9mIHRoZSB1bmRlcmx5aW5nIFlhY2NTeW1ib2wgb2JqZWN0LgorIyBUaGUgbGluZW5vKCkgbWV0aG9kIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIG9mIGEgZ2l2ZW4KKyMgaXRlbSAob3IgMCBpZiBub3QgZGVmaW5lZCkuICAgVGhlIGxpbmVzcGFuKCkgbWV0aG9kIHJldHVybnMKKyMgYSB0dXBsZSBvZiAoc3RhcnRsaW5lLGVuZGxpbmUpIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugb2YgbGluZXMKKyMgZm9yIGEgc3ltYm9sLiAgVGhlIGxleHNwYW4oKSBtZXRob2QgcmV0dXJucyBhIHR1cGxlIChsZXhwb3MsZW5kbGV4cG9zKQorIyByZXByZXNlbnRpbmcgdGhlIHJhbmdlIG9mIHBvc2l0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGEgc3ltYm9sLgorCitjbGFzcyBZYWNjUHJvZHVjdGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZixzLHN0YWNrPU5vbmUpOgorICAgICAgICBzZWxmLnNsaWNlID0gcworICAgICAgICBzZWxmLnN0YWNrID0gc3RhY2sKKyAgICAgICAgc2VsZi5sZXhlciA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXJzZXI9IE5vbmUKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZixuKToKKyAgICAgICAgaWYgbiA+PSAwOiByZXR1cm4gc2VsZi5zbGljZVtuXS52YWx1ZQorICAgICAgICBlbHNlOiByZXR1cm4gc2VsZi5zdGFja1tuXS52YWx1ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsbix2KToKKyAgICAgICAgc2VsZi5zbGljZVtuXS52YWx1ZSA9IHYKKworICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZixpLGopOgorICAgICAgICByZXR1cm4gW3MudmFsdWUgZm9yIHMgaW4gc2VsZi5zbGljZVtpOmpdXQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5zbGljZSkKKworICAgIGRlZiBsaW5lbm8oc2VsZixuKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5zbGljZVtuXSwibGluZW5vIiwwKQorCisgICAgZGVmIHNldF9saW5lbm8oc2VsZixuLGxpbmVubyk6CisgICAgICAgIHNlbGYuc2xpY2Vbbl0ubGluZW5vID0gbGluZW5vCisKKyAgICBkZWYgbGluZXNwYW4oc2VsZixuKToKKyAgICAgICAgc3RhcnRsaW5lID0gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJsaW5lbm8iLDApCisgICAgICAgIGVuZGxpbmUgPSBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImVuZGxpbmVubyIsc3RhcnRsaW5lKQorICAgICAgICByZXR1cm4gc3RhcnRsaW5lLGVuZGxpbmUKKworICAgIGRlZiBsZXhwb3Moc2VsZixuKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5zbGljZVtuXSwibGV4cG9zIiwwKQorCisgICAgZGVmIGxleHNwYW4oc2VsZixuKToKKyAgICAgICAgc3RhcnRwb3MgPSBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImxleHBvcyIsMCkKKyAgICAgICAgZW5kcG9zID0gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJlbmRsZXhwb3MiLHN0YXJ0cG9zKQorICAgICAgICByZXR1cm4gc3RhcnRwb3MsZW5kcG9zCisKKyAgICBkZWYgZXJyb3Ioc2VsZik6CisgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IExSUGFyc2VyID09CisjCisjIFRoZSBMUiBQYXJzaW5nIGVuZ2luZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTFJQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsbHJ0YWIsZXJyb3JmKToKKyAgICAgICAgc2VsZi5wcm9kdWN0aW9ucyA9IGxydGFiLmxyX3Byb2R1Y3Rpb25zCisgICAgICAgIHNlbGYuYWN0aW9uICAgICAgPSBscnRhYi5scl9hY3Rpb24KKyAgICAgICAgc2VsZi5nb3RvICAgICAgICA9IGxydGFiLmxyX2dvdG8KKyAgICAgICAgc2VsZi5lcnJvcmZ1bmMgICA9IGVycm9yZgorCisgICAgZGVmIGVycm9rKHNlbGYpOgorICAgICAgICBzZWxmLmVycm9yb2sgICAgID0gMQorCisgICAgZGVmIHJlc3RhcnQoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLnN0YXRlc3RhY2tbOl0KKyAgICAgICAgZGVsIHNlbGYuc3ltc3RhY2tbOl0KKyAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgIHN5bS50eXBlID0gJyRlbmQnCisgICAgICAgIHNlbGYuc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgc2VsZi5zdGF0ZXN0YWNrLmFwcGVuZCgwKQorCisgICAgZGVmIHBhcnNlKHNlbGYsaW5wdXQ9Tm9uZSxsZXhlcj1Ob25lLGRlYnVnPTAsdHJhY2tpbmc9MCx0b2tlbmZ1bmM9Tm9uZSk6CisgICAgICAgIGlmIGRlYnVnIG9yIHlhY2NkZXZlbDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVidWcsaW50KToKKyAgICAgICAgICAgICAgICBkZWJ1ZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VkZWJ1ZyhpbnB1dCxsZXhlcixkZWJ1Zyx0cmFja2luZyx0b2tlbmZ1bmMpCisgICAgICAgIGVsaWYgdHJhY2tpbmc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZW9wdChpbnB1dCxsZXhlcixkZWJ1Zyx0cmFja2luZyx0b2tlbmZ1bmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZW9wdF9ub3RyYWNrKGlucHV0LGxleGVyLGRlYnVnLHRyYWNraW5nLHRva2VuZnVuYykKKyAgICAgICAgCisKKyAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgIyBwYXJzZWRlYnVnKCkuCisgICAgIworICAgICMgVGhpcyBpcyB0aGUgZGVidWdnaW5nIGVuYWJsZWQgdmVyc2lvbiBvZiBwYXJzZSgpLiAgQWxsIGNoYW5nZXMgbWFkZSB0byB0aGUKKyAgICAjIHBhcnNpbmcgZW5naW5lIHNob3VsZCBiZSBtYWRlIGhlcmUuICAgRm9yIHRoZSBub24tZGVidWdnaW5nIHZlcnNpb24sCisgICAgIyBjb3B5IHRoaXMgY29kZSB0byBhIG1ldGhvZCBwYXJzZW9wdCgpIGFuZCBkZWxldGUgYWxsIG9mIHRoZSBzZWN0aW9ucworICAgICMgZW5jbG9zZWQgaW46CisgICAgIworICAgICMgICAgICAjLS0hIERFQlVHCisgICAgIyAgICAgIHN0YXRlbWVudHMKKyAgICAjICAgICAgIy0tISBERUJVRworICAgICMKKyAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisKKyAgICBkZWYgcGFyc2VkZWJ1ZyhzZWxmLGlucHV0PU5vbmUsbGV4ZXI9Tm9uZSxkZWJ1Zz1Ob25lLHRyYWNraW5nPTAsdG9rZW5mdW5jPU5vbmUpOgorICAgICAgICBsb29rYWhlYWQgPSBOb25lICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbAorICAgICAgICBsb29rYWhlYWRzdGFjayA9IFsgXSAgICAgICAgICAgICAjIFN0YWNrIG9mIGxvb2thaGVhZCBzeW1ib2xzCisgICAgICAgIGFjdGlvbnMgPSBzZWxmLmFjdGlvbiAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGFjdGlvbiB0YWJsZSAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBnb3RvICAgID0gc2VsZi5nb3RvICAgICAgICAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBnb3RvIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHByb2QgICAgPSBzZWxmLnByb2R1Y3Rpb25zICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIHByb2R1Y3Rpb24gbGlzdCAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBwc2xpY2UgID0gWWFjY1Byb2R1Y3Rpb24oTm9uZSkgICAjIFByb2R1Y3Rpb24gb2JqZWN0IHBhc3NlZCB0byBncmFtbWFyIHJ1bGVzCisgICAgICAgIGVycm9yY291bnQgPSAwICAgICAgICAgICAgICAgICAgICMgVXNlZCBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkgCisKKyAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgZGVidWcuaW5mbygiUExZOiBQQVJTRSBERUJVRyBTVEFSVCIpCisgICAgICAgICMgLS0hIERFQlVHCisKKyAgICAgICAgIyBJZiBubyBsZXhlciB3YXMgZ2l2ZW4sIHdlIHdpbGwgdHJ5IHRvIHVzZSB0aGUgbGV4IG1vZHVsZQorICAgICAgICBpZiBub3QgbGV4ZXI6CisgICAgICAgICAgICBsZXggPSBsb2FkX3BseV9sZXgoKQorICAgICAgICAgICAgbGV4ZXIgPSBsZXgubGV4ZXIKKworICAgICAgICAjIFNldCB1cCB0aGUgbGV4ZXIgYW5kIHBhcnNlciBvYmplY3RzIG9uIHBzbGljZQorICAgICAgICBwc2xpY2UubGV4ZXIgPSBsZXhlcgorICAgICAgICBwc2xpY2UucGFyc2VyID0gc2VsZgorCisgICAgICAgICMgSWYgaW5wdXQgd2FzIHN1cHBsaWVkLCBwYXNzIHRvIGxleGVyCisgICAgICAgIGlmIGlucHV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGV4ZXIuaW5wdXQoaW5wdXQpCisKKyAgICAgICAgaWYgdG9rZW5mdW5jIGlzIE5vbmU6CisgICAgICAgICAgICMgVG9rZW5pemUgZnVuY3Rpb24KKyAgICAgICAgICAgZ2V0X3Rva2VuID0gbGV4ZXIudG9rZW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgZ2V0X3Rva2VuID0gdG9rZW5mdW5jCisKKyAgICAgICAgIyBTZXQgdXAgdGhlIHN0YXRlIGFuZCBzeW1ib2wgc3RhY2tzCisKKyAgICAgICAgc3RhdGVzdGFjayA9IFsgXSAgICAgICAgICAgICAgICAjIFN0YWNrIG9mIHBhcnNpbmcgc3RhdGVzCisgICAgICAgIHNlbGYuc3RhdGVzdGFjayA9IHN0YXRlc3RhY2sKKyAgICAgICAgc3ltc3RhY2sgICA9IFsgXSAgICAgICAgICAgICAgICAjIFN0YWNrIG9mIGdyYW1tYXIgc3ltYm9scworICAgICAgICBzZWxmLnN5bXN0YWNrID0gc3ltc3RhY2sKKworICAgICAgICBwc2xpY2Uuc3RhY2sgPSBzeW1zdGFjayAgICAgICAgICMgUHV0IGluIHRoZSBwcm9kdWN0aW9uCisgICAgICAgIGVycnRva2VuICAgPSBOb25lICAgICAgICAgICAgICAgIyBFcnIgdG9rZW4KKworICAgICAgICAjIFRoZSBzdGFydCBzdGF0ZSBpcyBhc3N1bWVkIHRvIGJlICgwLCRlbmQpCisKKyAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoMCkKKyAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgIHN5bS50eXBlID0gIiRlbmQiCisgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgIHN0YXRlID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgIyBHZXQgdGhlIG5leHQgc3ltYm9sIG9uIHRoZSBpbnB1dC4gIElmIGEgbG9va2FoZWFkIHN5bWJvbAorICAgICAgICAgICAgIyBpcyBhbHJlYWR5IHNldCwgd2UganVzdCB1c2UgdGhhdC4gT3RoZXJ3aXNlLCB3ZSdsbCBwdWxsCisgICAgICAgICAgICAjIHRoZSBuZXh0IHRva2VuIG9mZiBvZiB0aGUgbG9va2FoZWFkc3RhY2sgb3IgZnJvbSB0aGUgbGV4ZXIKKworICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgIGRlYnVnLmRlYnVnKCcnKQorICAgICAgICAgICAgZGVidWcuZGVidWcoJ1N0YXRlICA6ICVzJywgc3RhdGUpCisgICAgICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWRzdGFjazoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gZ2V0X3Rva2VuKCkgICAgICMgR2V0IHRoZSBuZXh0IHRva2VuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gbG9va2FoZWFkc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkLnR5cGUgPSAiJGVuZCIKKworICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgIGRlYnVnLmRlYnVnKCdTdGFjayAgOiAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAoIiVzIC4gJXMiICUgKCIgIi5qb2luKFt4eC50eXBlIGZvciB4eCBpbiBzeW1zdGFja11bMTpdKSwgc3RyKGxvb2thaGVhZCkpKS5sc3RyaXAoKSkKKyAgICAgICAgICAgICMgLS0hIERFQlVHCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIGFjdGlvbiB0YWJsZQorICAgICAgICAgICAgbHR5cGUgPSBsb29rYWhlYWQudHlwZQorICAgICAgICAgICAgdCA9IGFjdGlvbnNbc3RhdGVdLmdldChsdHlwZSkKKworICAgICAgICAgICAgaWYgdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB0ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBzaGlmdCBhIHN5bWJvbCBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQodCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB0CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5kZWJ1ZygiQWN0aW9uIDogU2hpZnQgYW5kIGdvdG8gc3RhdGUgJXMiLCB0KQorICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICAjIERlY3JlYXNlIGVycm9yIGNvdW50IG9uIHN1Y2Nlc3NmdWwgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudDogZXJyb3Jjb3VudCAtPTEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHQgPCAwOgorICAgICAgICAgICAgICAgICAgICAjIHJlZHVjZSBhIHN5bWJvbCBvbiB0aGUgc3RhY2ssIGVtaXQgYSBwcm9kdWN0aW9uCisgICAgICAgICAgICAgICAgICAgIHAgPSBwcm9kWy10XQorICAgICAgICAgICAgICAgICAgICBwbmFtZSA9IHAubmFtZQorICAgICAgICAgICAgICAgICAgICBwbGVuICA9IHAubGVuCisKKyAgICAgICAgICAgICAgICAgICAgIyBHZXQgcHJvZHVjdGlvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSBwbmFtZSAgICAgICAjIFByb2R1Y3Rpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICBzeW0udmFsdWUgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIkFjdGlvbiA6IFJlZHVjZSBydWxlIFslc10gd2l0aCAlcyBhbmQgZ290byBzdGF0ZSAlZCIsIHAuc3RyLCAiWyIrIiwiLmpvaW4oW2Zvcm1hdF9zdGFja19lbnRyeShfdi52YWx1ZSkgZm9yIF92IGluIHN5bXN0YWNrWy1wbGVuOl1dKSsiXSIsLXQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJBY3Rpb24gOiBSZWR1Y2UgcnVsZSBbJXNdIHdpdGggJXMgYW5kIGdvdG8gc3RhdGUgJWQiLCBwLnN0ciwgW10sLXQpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAgICAgICAgICAgICBpZiBwbGVuOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZyA9IHN5bXN0YWNrWy1wbGVuLTE6XQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ1swXSA9IHN5bQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHJhY2tpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHRhcmdbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5saW5lbm8gPSB0MS5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5sZXhwb3MgPSB0MS5sZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdGFyZ1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5lbmRsaW5lbm8gPSBnZXRhdHRyKHQxLCJlbmRsaW5lbm8iLHQxLmxpbmVubykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5lbmRsZXhwb3MgPSBnZXRhdHRyKHQxLCJlbmRsZXhwb3MiLHQxLmxleHBvcykKKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYmVsb3cgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3ltc3RhY2tbLXBsZW46XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzdGF0ZXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIlJlc3VsdCA6ICVzIiwgZm9ybWF0X3Jlc3VsdChwc2xpY2VbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgIAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHJhY2tpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGluZW5vID0gbGV4ZXIubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGV4cG9zID0gbGV4ZXIubGV4cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnID0gWyBzeW0gXQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGVuY2xvc2VkIGluIHRoaXMgc2VjdGlvbiBpcyBkdXBsaWNhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhYm92ZSBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIE1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIGdldCBtYWRlIGluIGJvdGggbG9jYXRpb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xpY2Uuc2xpY2UgPSB0YXJnCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGwgdGhlIGdyYW1tYXIgcnVsZSB3aXRoIG91ciBzcGVjaWFsIHNsaWNlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2FsbGFibGUocHNsaWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiUmVzdWx0IDogJXMiLCBmb3JtYXRfcmVzdWx0KHBzbGljZVswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gZ290b1tzdGF0ZXN0YWNrWy0xXV1bcG5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhbiBlcnJvciB3YXMgc2V0LiBFbnRlciBlcnJvciByZWNvdmVyeSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHN5bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisKKyAgICAgICAgICAgICAgICBpZiB0ID09IDA6CisgICAgICAgICAgICAgICAgICAgIG4gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0YXR0cihuLCJ2YWx1ZSIsTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiRG9uZSAgIDogUmV0dXJuaW5nICVzIiwgZm9ybWF0X3Jlc3VsdChyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJQTFk6IFBBUlNFIERFQlVHIEVORCIpCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgaWYgdCA9PSBOb25lOgorCisgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICBkZWJ1Zy5lcnJvcignRXJyb3IgIDogJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiJXMgLiAlcyIgJSAoIiAiLmpvaW4oW3h4LnR5cGUgZm9yIHh4IGluIHN5bXN0YWNrXVsxOl0pLCBzdHIobG9va2FoZWFkKSkpLmxzdHJpcCgpKQorICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgc29tZSBraW5kIG9mIHBhcnNpbmcgZXJyb3IgaGVyZS4gIFRvIGhhbmRsZQorICAgICAgICAgICAgICAgICMgdGhpcywgd2UgYXJlIGdvaW5nIHRvIHB1c2ggdGhlIGN1cnJlbnQgdG9rZW4gb250bworICAgICAgICAgICAgICAgICMgdGhlIHRva2Vuc3RhY2sgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiAnZXJyb3InIHRva2VuLgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgYXJlIGFueSBzeW5jaHJvbml6YXRpb24gcnVsZXMsIHRoZXkgbWF5CisgICAgICAgICAgICAgICAgIyBjYXRjaCBpdC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJbiBhZGRpdGlvbiB0byBwdXNoaW5nIHRoZSBlcnJvciB0b2tlbiwgd2UgY2FsbCBjYWxsCisgICAgICAgICAgICAgICAgIyB0aGUgdXNlciBkZWZpbmVkIHBfZXJyb3IoKSBmdW5jdGlvbiBpZiB0aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICMgZmlyc3Qgc3ludGF4IGVycm9yLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZgorICAgICAgICAgICAgICAgICMgZXJyb3Jjb3VudCA9PSAwLgorICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQgPT0gMCBvciBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuLnR5cGUgPT0gIiRlbmQiOgorICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lICAgICAgICAgICAgICAgIyBFbmQgb2YgZmlsZSEKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmZ1bmM6CisgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgZXJyb2ssdG9rZW4scmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb2sgPSBzZWxmLmVycm9rICAgICAgICAjIFNldCBzb21lIHNwZWNpYWwgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBnZXRfdG9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RhcnQgPSBzZWxmLnJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuIGFuZCBub3QgaGFzYXR0cihlcnJ0b2tlbiwnbGV4ZXInKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbi5sZXhlciA9IGxleGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBzZWxmLmVycm9yZnVuYyhlcnJ0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBlcnJvaywgdG9rZW4sIHJlc3RhcnQgICAjIERlbGV0ZSBzcGVjaWFsIGZ1bmN0aW9ucworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyIG11c3QgaGF2ZSBkb25lIHNvbWUga2luZCBvZiBwYW5pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbW9kZSByZWNvdmVyeSBvbiB0aGVpciBvd24uICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybmVkIHRva2VuIGlzIHRoZSBuZXh0IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHRvaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGVycnRva2VuLCJsaW5lbm8iKTogbGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6IGxpbmVubyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lbm86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciBhdCBsaW5lICVkLCB0b2tlbj0lc1xuIiAlIChsaW5lbm8sIGVycnRva2VuLnR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciwgdG9rZW49JXMiICUgZXJydG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogUGFyc2UgZXJyb3IgaW4gaW5wdXQuIEVPRlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorCisgICAgICAgICAgICAgICAgIyBjYXNlIDE6ICB0aGUgc3RhdGVzdGFjayBvbmx5IGhhcyAxIGVudHJ5IG9uIGl0LiAgSWYgd2UncmUgaW4gdGhpcyBzdGF0ZSwgdGhlCisgICAgICAgICAgICAgICAgIyBlbnRpcmUgcGFyc2UgaGFzIGJlZW4gcm9sbGVkIGJhY2sgYW5kIHdlJ3JlIGNvbXBsZXRlbHkgaG9zZWQuICAgVGhlIHRva2VuIGlzCisgICAgICAgICAgICAgICAgIyBkaXNjYXJkZWQgYW5kIHdlIGp1c3Qga2VlcCBnb2luZy4KKworICAgICAgICAgICAgICAgIGlmIGxlbihzdGF0ZXN0YWNrKSA8PSAxIGFuZCBsb29rYWhlYWQudHlwZSAhPSAiJGVuZCI6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMAorICAgICAgICAgICAgICAgICAgICAjIE51a2UgdGhlIHB1c2hiYWNrIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIGRlbCBsb29rYWhlYWRzdGFja1s6XQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBjYXNlIDI6IHRoZSBzdGF0ZXN0YWNrIGhhcyBhIGNvdXBsZSBvZiBlbnRyaWVzIG9uIGl0LCBidXQgd2UncmUKKyAgICAgICAgICAgICAgICAjIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIG51a2UgdGhlIHRvcCBlbnRyeSBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgdG9rZW4KKworICAgICAgICAgICAgICAgICMgU3RhcnQgbnVraW5nIGVudHJpZXMgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgaWYgbG9va2FoZWFkLnR5cGUgPT0gIiRlbmQiOgorICAgICAgICAgICAgICAgICAgICAjIFdob2EuIFdlJ3JlIHJlYWxseSBob3NlZCBoZXJlLiBCYWlsIG91dAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHN5bSA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICBpZiBzeW0udHlwZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIbW1tLiBFcnJvciBpcyBvbiB0b3Agb2Ygc3RhY2ssIHdlJ2xsIGp1c3QgbnVrZSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW1ib2wgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0ID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHQudHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihsb29rYWhlYWQsImxpbmVubyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdC5saW5lbm8gPSBsb29rYWhlYWQubGluZW5vCisgICAgICAgICAgICAgICAgICAgIHQudmFsdWUgPSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXSAgICAgICAjIFBvdGVudGlhbCBidWcgZml4CisKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIENhbGwgYW4gZXJyb3IgZnVuY3Rpb24gaGVyZQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ5YWNjOiBpbnRlcm5hbCBwYXJzZXIgZXJyb3IhISFcbiIpCisKKyAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgIyBwYXJzZW9wdCgpLgorICAgICMKKyAgICAjIE9wdGltaXplZCB2ZXJzaW9uIG9mIHBhcnNlKCkgbWV0aG9kLiAgRE8gTk9UIEVESVQgVEhJUyBDT0RFIERJUkVDVExZLgorICAgICMgRWRpdCB0aGUgZGVidWcgdmVyc2lvbiBhYm92ZSwgdGhlbiBjb3B5IGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBtZXRob2QKKyAgICAjIGJlbG93IHdoaWxlIHJlbW92aW5nICMtLSEgREVCVUcgc2VjdGlvbnMuCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisKKyAgICBkZWYgcGFyc2VvcHQoc2VsZixpbnB1dD1Ob25lLGxleGVyPU5vbmUsZGVidWc9MCx0cmFja2luZz0wLHRva2VuZnVuYz1Ob25lKToKKyAgICAgICAgbG9va2FoZWFkID0gTm9uZSAgICAgICAgICAgICAgICAgIyBDdXJyZW50IGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgbG9va2FoZWFkc3RhY2sgPSBbIF0gICAgICAgICAgICAgIyBTdGFjayBvZiBsb29rYWhlYWQgc3ltYm9scworICAgICAgICBhY3Rpb25zID0gc2VsZi5hY3Rpb24gICAgICAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBhY3Rpb24gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgZ290byAgICA9IHNlbGYuZ290byAgICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gZ290byB0YWJsZSAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBwcm9kICAgID0gc2VsZi5wcm9kdWN0aW9ucyAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBwcm9kdWN0aW9uIGxpc3QgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHNsaWNlICA9IFlhY2NQcm9kdWN0aW9uKE5vbmUpICAgIyBQcm9kdWN0aW9uIG9iamVjdCBwYXNzZWQgdG8gZ3JhbW1hciBydWxlcworICAgICAgICBlcnJvcmNvdW50ID0gMCAgICAgICAgICAgICAgICAgICAjIFVzZWQgZHVyaW5nIGVycm9yIHJlY292ZXJ5IAorCisgICAgICAgICMgSWYgbm8gbGV4ZXIgd2FzIGdpdmVuLCB3ZSB3aWxsIHRyeSB0byB1c2UgdGhlIGxleCBtb2R1bGUKKyAgICAgICAgaWYgbm90IGxleGVyOgorICAgICAgICAgICAgbGV4ID0gbG9hZF9wbHlfbGV4KCkKKyAgICAgICAgICAgIGxleGVyID0gbGV4LmxleGVyCisgICAgICAgIAorICAgICAgICAjIFNldCB1cCB0aGUgbGV4ZXIgYW5kIHBhcnNlciBvYmplY3RzIG9uIHBzbGljZQorICAgICAgICBwc2xpY2UubGV4ZXIgPSBsZXhlcgorICAgICAgICBwc2xpY2UucGFyc2VyID0gc2VsZgorCisgICAgICAgICMgSWYgaW5wdXQgd2FzIHN1cHBsaWVkLCBwYXNzIHRvIGxleGVyCisgICAgICAgIGlmIGlucHV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGV4ZXIuaW5wdXQoaW5wdXQpCisKKyAgICAgICAgaWYgdG9rZW5mdW5jIGlzIE5vbmU6CisgICAgICAgICAgICMgVG9rZW5pemUgZnVuY3Rpb24KKyAgICAgICAgICAgZ2V0X3Rva2VuID0gbGV4ZXIudG9rZW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgZ2V0X3Rva2VuID0gdG9rZW5mdW5jCisKKyAgICAgICAgIyBTZXQgdXAgdGhlIHN0YXRlIGFuZCBzeW1ib2wgc3RhY2tzCisKKyAgICAgICAgc3RhdGVzdGFjayA9IFsgXSAgICAgICAgICAgICAgICAjIFN0YWNrIG9mIHBhcnNpbmcgc3RhdGVzCisgICAgICAgIHNlbGYuc3RhdGVzdGFjayA9IHN0YXRlc3RhY2sKKyAgICAgICAgc3ltc3RhY2sgICA9IFsgXSAgICAgICAgICAgICAgICAjIFN0YWNrIG9mIGdyYW1tYXIgc3ltYm9scworICAgICAgICBzZWxmLnN5bXN0YWNrID0gc3ltc3RhY2sKKworICAgICAgICBwc2xpY2Uuc3RhY2sgPSBzeW1zdGFjayAgICAgICAgICMgUHV0IGluIHRoZSBwcm9kdWN0aW9uCisgICAgICAgIGVycnRva2VuICAgPSBOb25lICAgICAgICAgICAgICAgIyBFcnIgdG9rZW4KKworICAgICAgICAjIFRoZSBzdGFydCBzdGF0ZSBpcyBhc3N1bWVkIHRvIGJlICgwLCRlbmQpCisKKyAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoMCkKKyAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgIHN5bS50eXBlID0gJyRlbmQnCisgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgIHN0YXRlID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgIyBHZXQgdGhlIG5leHQgc3ltYm9sIG9uIHRoZSBpbnB1dC4gIElmIGEgbG9va2FoZWFkIHN5bWJvbAorICAgICAgICAgICAgIyBpcyBhbHJlYWR5IHNldCwgd2UganVzdCB1c2UgdGhhdC4gT3RoZXJ3aXNlLCB3ZSdsbCBwdWxsCisgICAgICAgICAgICAjIHRoZSBuZXh0IHRva2VuIG9mZiBvZiB0aGUgbG9va2FoZWFkc3RhY2sgb3IgZnJvbSB0aGUgbGV4ZXIKKworICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkc3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGdldF90b2tlbigpICAgICAjIEdldCB0aGUgbmV4dCB0b2tlbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGxvb2thaGVhZHN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZC50eXBlID0gJyRlbmQnCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIGFjdGlvbiB0YWJsZQorICAgICAgICAgICAgbHR5cGUgPSBsb29rYWhlYWQudHlwZQorICAgICAgICAgICAgdCA9IGFjdGlvbnNbc3RhdGVdLmdldChsdHlwZSkKKworICAgICAgICAgICAgaWYgdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB0ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBzaGlmdCBhIHN5bWJvbCBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQodCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB0CisKKyAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgICMgRGVjcmVhc2UgZXJyb3IgY291bnQgb24gc3VjY2Vzc2Z1bCBzaGlmdAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50OiBlcnJvcmNvdW50IC09MQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgdCA8IDA6CisgICAgICAgICAgICAgICAgICAgICMgcmVkdWNlIGEgc3ltYm9sIG9uIHRoZSBzdGFjaywgZW1pdCBhIHByb2R1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgcCA9IHByb2RbLXRdCisgICAgICAgICAgICAgICAgICAgIHBuYW1lID0gcC5uYW1lCisgICAgICAgICAgICAgICAgICAgIHBsZW4gID0gcC5sZW4KKworICAgICAgICAgICAgICAgICAgICAjIEdldCBwcm9kdWN0aW9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9IHBuYW1lICAgICAgICMgUHJvZHVjdGlvbiBuYW1lCisgICAgICAgICAgICAgICAgICAgIHN5bS52YWx1ZSA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICBpZiBwbGVuOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZyA9IHN5bXN0YWNrWy1wbGVuLTE6XQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ1swXSA9IHN5bQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHJhY2tpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHRhcmdbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5saW5lbm8gPSB0MS5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5sZXhwb3MgPSB0MS5sZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdGFyZ1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5lbmRsaW5lbm8gPSBnZXRhdHRyKHQxLCJlbmRsaW5lbm8iLHQxLmxpbmVubykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5lbmRsZXhwb3MgPSBnZXRhdHRyKHQxLCJlbmRsZXhwb3MiLHQxLmxleHBvcykKKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYmVsb3cgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3ltc3RhY2tbLXBsZW46XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzdGF0ZXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gZ290b1tzdGF0ZXN0YWNrWy0xXV1bcG5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhbiBlcnJvciB3YXMgc2V0LiBFbnRlciBlcnJvciByZWNvdmVyeSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHN5bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0cmFja2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5saW5lbm8gPSBsZXhlci5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS5sZXhwb3MgPSBsZXhlci5sZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBbIHN5bSBdCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGFib3ZlIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgICAgICAgICAgICAgaWYgdCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKG4sInZhbHVlIixOb25lKQorCisgICAgICAgICAgICBpZiB0ID09IE5vbmU6CisKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgc29tZSBraW5kIG9mIHBhcnNpbmcgZXJyb3IgaGVyZS4gIFRvIGhhbmRsZQorICAgICAgICAgICAgICAgICMgdGhpcywgd2UgYXJlIGdvaW5nIHRvIHB1c2ggdGhlIGN1cnJlbnQgdG9rZW4gb250bworICAgICAgICAgICAgICAgICMgdGhlIHRva2Vuc3RhY2sgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiAnZXJyb3InIHRva2VuLgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgYXJlIGFueSBzeW5jaHJvbml6YXRpb24gcnVsZXMsIHRoZXkgbWF5CisgICAgICAgICAgICAgICAgIyBjYXRjaCBpdC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJbiBhZGRpdGlvbiB0byBwdXNoaW5nIHRoZSBlcnJvciB0b2tlbiwgd2UgY2FsbCBjYWxsCisgICAgICAgICAgICAgICAgIyB0aGUgdXNlciBkZWZpbmVkIHBfZXJyb3IoKSBmdW5jdGlvbiBpZiB0aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICMgZmlyc3Qgc3ludGF4IGVycm9yLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZgorICAgICAgICAgICAgICAgICMgZXJyb3Jjb3VudCA9PSAwLgorICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQgPT0gMCBvciBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuLnR5cGUgPT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lICAgICAgICAgICAgICAgIyBFbmQgb2YgZmlsZSEKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmZ1bmM6CisgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgZXJyb2ssdG9rZW4scmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb2sgPSBzZWxmLmVycm9rICAgICAgICAjIFNldCBzb21lIHNwZWNpYWwgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBnZXRfdG9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RhcnQgPSBzZWxmLnJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuIGFuZCBub3QgaGFzYXR0cihlcnJ0b2tlbiwnbGV4ZXInKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbi5sZXhlciA9IGxleGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBzZWxmLmVycm9yZnVuYyhlcnJ0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBlcnJvaywgdG9rZW4sIHJlc3RhcnQgICAjIERlbGV0ZSBzcGVjaWFsIGZ1bmN0aW9ucworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyIG11c3QgaGF2ZSBkb25lIHNvbWUga2luZCBvZiBwYW5pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbW9kZSByZWNvdmVyeSBvbiB0aGVpciBvd24uICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybmVkIHRva2VuIGlzIHRoZSBuZXh0IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHRvaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGVycnRva2VuLCJsaW5lbm8iKTogbGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6IGxpbmVubyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lbm86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciBhdCBsaW5lICVkLCB0b2tlbj0lc1xuIiAlIChsaW5lbm8sIGVycnRva2VuLnR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciwgdG9rZW49JXMiICUgZXJydG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogUGFyc2UgZXJyb3IgaW4gaW5wdXQuIEVPRlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorCisgICAgICAgICAgICAgICAgIyBjYXNlIDE6ICB0aGUgc3RhdGVzdGFjayBvbmx5IGhhcyAxIGVudHJ5IG9uIGl0LiAgSWYgd2UncmUgaW4gdGhpcyBzdGF0ZSwgdGhlCisgICAgICAgICAgICAgICAgIyBlbnRpcmUgcGFyc2UgaGFzIGJlZW4gcm9sbGVkIGJhY2sgYW5kIHdlJ3JlIGNvbXBsZXRlbHkgaG9zZWQuICAgVGhlIHRva2VuIGlzCisgICAgICAgICAgICAgICAgIyBkaXNjYXJkZWQgYW5kIHdlIGp1c3Qga2VlcCBnb2luZy4KKworICAgICAgICAgICAgICAgIGlmIGxlbihzdGF0ZXN0YWNrKSA8PSAxIGFuZCBsb29rYWhlYWQudHlwZSAhPSAnJGVuZCc6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMAorICAgICAgICAgICAgICAgICAgICAjIE51a2UgdGhlIHB1c2hiYWNrIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIGRlbCBsb29rYWhlYWRzdGFja1s6XQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBjYXNlIDI6IHRoZSBzdGF0ZXN0YWNrIGhhcyBhIGNvdXBsZSBvZiBlbnRyaWVzIG9uIGl0LCBidXQgd2UncmUKKyAgICAgICAgICAgICAgICAjIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIG51a2UgdGhlIHRvcCBlbnRyeSBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgdG9rZW4KKworICAgICAgICAgICAgICAgICMgU3RhcnQgbnVraW5nIGVudHJpZXMgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgaWYgbG9va2FoZWFkLnR5cGUgPT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICAjIFdob2EuIFdlJ3JlIHJlYWxseSBob3NlZCBoZXJlLiBCYWlsIG91dAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHN5bSA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICBpZiBzeW0udHlwZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIbW1tLiBFcnJvciBpcyBvbiB0b3Agb2Ygc3RhY2ssIHdlJ2xsIGp1c3QgbnVrZSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW1ib2wgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0ID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHQudHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihsb29rYWhlYWQsImxpbmVubyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdC5saW5lbm8gPSBsb29rYWhlYWQubGluZW5vCisgICAgICAgICAgICAgICAgICAgIHQudmFsdWUgPSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXSAgICAgICAjIFBvdGVudGlhbCBidWcgZml4CisKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIENhbGwgYW4gZXJyb3IgZnVuY3Rpb24gaGVyZQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ5YWNjOiBpbnRlcm5hbCBwYXJzZXIgZXJyb3IhISFcbiIpCisKKyAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgIyBwYXJzZW9wdF9ub3RyYWNrKCkuCisgICAgIworICAgICMgT3B0aW1pemVkIHZlcnNpb24gb2YgcGFyc2VvcHQoKSB3aXRoIGxpbmUgbnVtYmVyIHRyYWNraW5nIHJlbW92ZWQuIAorICAgICMgRE8gTk9UIEVESVQgVEhJUyBDT0RFIERJUkVDVExZLiBDb3B5IHRoZSBvcHRpbWl6ZWQgdmVyc2lvbiBhbmQgcmVtb3ZlCisgICAgIyBjb2RlIGluIHRoZSAjLS0hIFRSQUNLSU5HIHNlY3Rpb25zCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgZGVmIHBhcnNlb3B0X25vdHJhY2soc2VsZixpbnB1dD1Ob25lLGxleGVyPU5vbmUsZGVidWc9MCx0cmFja2luZz0wLHRva2VuZnVuYz1Ob25lKToKKyAgICAgICAgbG9va2FoZWFkID0gTm9uZSAgICAgICAgICAgICAgICAgIyBDdXJyZW50IGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgbG9va2FoZWFkc3RhY2sgPSBbIF0gICAgICAgICAgICAgIyBTdGFjayBvZiBsb29rYWhlYWQgc3ltYm9scworICAgICAgICBhY3Rpb25zID0gc2VsZi5hY3Rpb24gICAgICAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBhY3Rpb24gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgZ290byAgICA9IHNlbGYuZ290byAgICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gZ290byB0YWJsZSAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBwcm9kICAgID0gc2VsZi5wcm9kdWN0aW9ucyAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBwcm9kdWN0aW9uIGxpc3QgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHNsaWNlICA9IFlhY2NQcm9kdWN0aW9uKE5vbmUpICAgIyBQcm9kdWN0aW9uIG9iamVjdCBwYXNzZWQgdG8gZ3JhbW1hciBydWxlcworICAgICAgICBlcnJvcmNvdW50ID0gMCAgICAgICAgICAgICAgICAgICAjIFVzZWQgZHVyaW5nIGVycm9yIHJlY292ZXJ5IAorCisgICAgICAgICMgSWYgbm8gbGV4ZXIgd2FzIGdpdmVuLCB3ZSB3aWxsIHRyeSB0byB1c2UgdGhlIGxleCBtb2R1bGUKKyAgICAgICAgaWYgbm90IGxleGVyOgorICAgICAgICAgICAgbGV4ID0gbG9hZF9wbHlfbGV4KCkKKyAgICAgICAgICAgIGxleGVyID0gbGV4LmxleGVyCisgICAgICAgIAorICAgICAgICAjIFNldCB1cCB0aGUgbGV4ZXIgYW5kIHBhcnNlciBvYmplY3RzIG9uIHBzbGljZQorICAgICAgICBwc2xpY2UubGV4ZXIgPSBsZXhlcgorICAgICAgICBwc2xpY2UucGFyc2VyID0gc2VsZgorCisgICAgICAgICMgSWYgaW5wdXQgd2FzIHN1cHBsaWVkLCBwYXNzIHRvIGxleGVyCisgICAgICAgIGlmIGlucHV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGV4ZXIuaW5wdXQoaW5wdXQpCisKKyAgICAgICAgaWYgdG9rZW5mdW5jIGlzIE5vbmU6CisgICAgICAgICAgICMgVG9rZW5pemUgZnVuY3Rpb24KKyAgICAgICAgICAgZ2V0X3Rva2VuID0gbGV4ZXIudG9rZW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgZ2V0X3Rva2VuID0gdG9rZW5mdW5jCisKKyAgICAgICAgIyBTZXQgdXAgdGhlIHN0YXRlIGFuZCBzeW1ib2wgc3RhY2tzCisKKyAgICAgICAgc3RhdGVzdGFjayA9IFsgXSAgICAgICAgICAgICAgICAjIFN0YWNrIG9mIHBhcnNpbmcgc3RhdGVzCisgICAgICAgIHNlbGYuc3RhdGVzdGFjayA9IHN0YXRlc3RhY2sKKyAgICAgICAgc3ltc3RhY2sgICA9IFsgXSAgICAgICAgICAgICAgICAjIFN0YWNrIG9mIGdyYW1tYXIgc3ltYm9scworICAgICAgICBzZWxmLnN5bXN0YWNrID0gc3ltc3RhY2sKKworICAgICAgICBwc2xpY2Uuc3RhY2sgPSBzeW1zdGFjayAgICAgICAgICMgUHV0IGluIHRoZSBwcm9kdWN0aW9uCisgICAgICAgIGVycnRva2VuICAgPSBOb25lICAgICAgICAgICAgICAgIyBFcnIgdG9rZW4KKworICAgICAgICAjIFRoZSBzdGFydCBzdGF0ZSBpcyBhc3N1bWVkIHRvIGJlICgwLCRlbmQpCisKKyAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoMCkKKyAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgIHN5bS50eXBlID0gJyRlbmQnCisgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgIHN0YXRlID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgIyBHZXQgdGhlIG5leHQgc3ltYm9sIG9uIHRoZSBpbnB1dC4gIElmIGEgbG9va2FoZWFkIHN5bWJvbAorICAgICAgICAgICAgIyBpcyBhbHJlYWR5IHNldCwgd2UganVzdCB1c2UgdGhhdC4gT3RoZXJ3aXNlLCB3ZSdsbCBwdWxsCisgICAgICAgICAgICAjIHRoZSBuZXh0IHRva2VuIG9mZiBvZiB0aGUgbG9va2FoZWFkc3RhY2sgb3IgZnJvbSB0aGUgbGV4ZXIKKworICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkc3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGdldF90b2tlbigpICAgICAjIEdldCB0aGUgbmV4dCB0b2tlbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGxvb2thaGVhZHN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZC50eXBlID0gJyRlbmQnCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIGFjdGlvbiB0YWJsZQorICAgICAgICAgICAgbHR5cGUgPSBsb29rYWhlYWQudHlwZQorICAgICAgICAgICAgdCA9IGFjdGlvbnNbc3RhdGVdLmdldChsdHlwZSkKKworICAgICAgICAgICAgaWYgdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB0ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBzaGlmdCBhIHN5bWJvbCBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQodCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB0CisKKyAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgICMgRGVjcmVhc2UgZXJyb3IgY291bnQgb24gc3VjY2Vzc2Z1bCBzaGlmdAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50OiBlcnJvcmNvdW50IC09MQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgdCA8IDA6CisgICAgICAgICAgICAgICAgICAgICMgcmVkdWNlIGEgc3ltYm9sIG9uIHRoZSBzdGFjaywgZW1pdCBhIHByb2R1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgcCA9IHByb2RbLXRdCisgICAgICAgICAgICAgICAgICAgIHBuYW1lID0gcC5uYW1lCisgICAgICAgICAgICAgICAgICAgIHBsZW4gID0gcC5sZW4KKworICAgICAgICAgICAgICAgICAgICAjIEdldCBwcm9kdWN0aW9uIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9IHBuYW1lICAgICAgICMgUHJvZHVjdGlvbiBuYW1lCisgICAgICAgICAgICAgICAgICAgIHN5bS52YWx1ZSA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICBpZiBwbGVuOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZyA9IHN5bXN0YWNrWy1wbGVuLTE6XQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ1swXSA9IHN5bQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGVuY2xvc2VkIGluIHRoaXMgc2VjdGlvbiBpcyBkdXBsaWNhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWxvdyBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIE1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIGdldCBtYWRlIGluIGJvdGggbG9jYXRpb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xpY2Uuc2xpY2UgPSB0YXJnCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGwgdGhlIGdyYW1tYXIgcnVsZSB3aXRoIG91ciBzcGVjaWFsIHNsaWNlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzeW1zdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN0YXRlc3RhY2tbLXBsZW46XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2FsbGFibGUocHNsaWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZyA9IFsgc3ltIF0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWJvdmUgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gZ290b1tzdGF0ZXN0YWNrWy0xXV1bcG5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhbiBlcnJvciB3YXMgc2V0LiBFbnRlciBlcnJvciByZWNvdmVyeSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHN5bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisKKyAgICAgICAgICAgICAgICBpZiB0ID09IDA6CisgICAgICAgICAgICAgICAgICAgIG4gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIobiwidmFsdWUiLE5vbmUpCisKKyAgICAgICAgICAgIGlmIHQgPT0gTm9uZToKKworICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBzb21lIGtpbmQgb2YgcGFyc2luZyBlcnJvciBoZXJlLiAgVG8gaGFuZGxlCisgICAgICAgICAgICAgICAgIyB0aGlzLCB3ZSBhcmUgZ29pbmcgdG8gcHVzaCB0aGUgY3VycmVudCB0b2tlbiBvbnRvCisgICAgICAgICAgICAgICAgIyB0aGUgdG9rZW5zdGFjayBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuICdlcnJvcicgdG9rZW4uCisgICAgICAgICAgICAgICAgIyBJZiB0aGVyZSBhcmUgYW55IHN5bmNocm9uaXphdGlvbiBydWxlcywgdGhleSBtYXkKKyAgICAgICAgICAgICAgICAjIGNhdGNoIGl0LgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEluIGFkZGl0aW9uIHRvIHB1c2hpbmcgdGhlIGVycm9yIHRva2VuLCB3ZSBjYWxsIGNhbGwKKyAgICAgICAgICAgICAgICAjIHRoZSB1c2VyIGRlZmluZWQgcF9lcnJvcigpIGZ1bmN0aW9uIGlmIHRoaXMgaXMgdGhlCisgICAgICAgICAgICAgICAgIyBmaXJzdCBzeW50YXggZXJyb3IuICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmCisgICAgICAgICAgICAgICAgIyBlcnJvcmNvdW50ID09IDAuCisgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudCA9PSAwIG9yIHNlbGYuZXJyb3JvazoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW4udHlwZSA9PSAnJGVuZCc6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUgICAgICAgICAgICAgICAjIEVuZCBvZiBmaWxlIQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yZnVuYzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBlcnJvayx0b2tlbixyZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvayA9IHNlbGYuZXJyb2sgICAgICAgICMgU2V0IHNvbWUgc3BlY2lhbCBmdW5jdGlvbnMgYXZhaWxhYmxlIGluIGVycm9yIHJlY292ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGdldF90b2tlbgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdGFydCA9IHNlbGYucmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW4gYW5kIG5vdCBoYXNhdHRyKGVycnRva2VuLCdsZXhlcicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuLmxleGVyID0gbGV4ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHNlbGYuZXJyb3JmdW5jKGVycnRva2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGVycm9rLCB0b2tlbiwgcmVzdGFydCAgICMgRGVsZXRlIHNwZWNpYWwgZnVuY3Rpb25zCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JvazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXIgbXVzdCBoYXZlIGRvbmUgc29tZSBraW5kIG9mIHBhbmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtb2RlIHJlY292ZXJ5IG9uIHRoZWlyIG93bi4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmV0dXJuZWQgdG9rZW4gaXMgdGhlIG5leHQgbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gdG9rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZXJydG9rZW4sImxpbmVubyIpOiBsaW5lbm8gPSBsb29rYWhlYWQubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZTogbGluZW5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVubzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogU3ludGF4IGVycm9yIGF0IGxpbmUgJWQsIHRva2VuPSVzXG4iICUgKGxpbmVubywgZXJydG9rZW4udHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogU3ludGF4IGVycm9yLCB0b2tlbj0lcyIgJSBlcnJ0b2tlbi50eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBQYXJzZSBlcnJvciBpbiBpbnB1dC4gRU9GXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisKKyAgICAgICAgICAgICAgICAjIGNhc2UgMTogIHRoZSBzdGF0ZXN0YWNrIG9ubHkgaGFzIDEgZW50cnkgb24gaXQuICBJZiB3ZSdyZSBpbiB0aGlzIHN0YXRlLCB0aGUKKyAgICAgICAgICAgICAgICAjIGVudGlyZSBwYXJzZSBoYXMgYmVlbiByb2xsZWQgYmFjayBhbmQgd2UncmUgY29tcGxldGVseSBob3NlZC4gICBUaGUgdG9rZW4gaXMKKyAgICAgICAgICAgICAgICAjIGRpc2NhcmRlZCBhbmQgd2UganVzdCBrZWVwIGdvaW5nLgorCisgICAgICAgICAgICAgICAgaWYgbGVuKHN0YXRlc3RhY2spIDw9IDEgYW5kIGxvb2thaGVhZC50eXBlICE9ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwCisgICAgICAgICAgICAgICAgICAgICMgTnVrZSB0aGUgcHVzaGJhY2sgc3RhY2sKKyAgICAgICAgICAgICAgICAgICAgZGVsIGxvb2thaGVhZHN0YWNrWzpdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIGNhc2UgMjogdGhlIHN0YXRlc3RhY2sgaGFzIGEgY291cGxlIG9mIGVudHJpZXMgb24gaXQsIGJ1dCB3ZSdyZQorICAgICAgICAgICAgICAgICMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gbnVrZSB0aGUgdG9wIGVudHJ5IGFuZCBnZW5lcmF0ZSBhbiBlcnJvciB0b2tlbgorCisgICAgICAgICAgICAgICAgIyBTdGFydCBudWtpbmcgZW50cmllcyBvbiB0aGUgc3RhY2sKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSA9PSAnJGVuZCc6CisgICAgICAgICAgICAgICAgICAgICMgV2hvYS4gV2UncmUgcmVhbGx5IGhvc2VkIGhlcmUuIEJhaWwgb3V0CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgbG9va2FoZWFkLnR5cGUgIT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgc3ltID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIGlmIHN5bS50eXBlID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEhtbW0uIEVycm9yIGlzIG9uIHRvcCBvZiBzdGFjaywgd2UnbGwganVzdCBudWtlIGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAjIHN5bWJvbCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHQgPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgdC50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGxvb2thaGVhZCwibGluZW5vIik6CisgICAgICAgICAgICAgICAgICAgICAgICB0LmxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdICAgICAgICMgUG90ZW50aWFsIGJ1ZyBmaXgKKworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgQ2FsbCBhbiBlcnJvciBmdW5jdGlvbiBoZXJlCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInlhY2M6IGludGVybmFsIHBhcnNlciBlcnJvciEhIVxuIikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgPT09IEdyYW1tYXIgUmVwcmVzZW50YXRpb24gPT09CisjCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgdmFyaWFibGVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBhbmQKKyMgbWFuaXB1bGF0ZSB0aGUgcnVsZXMgdGhhdCBtYWtlIHVwIGEgZ3JhbW1hci4gCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2ltcG9ydCByZQorCisjIHJlZ2V4IG1hdGNoaW5nIGlkZW50aWZpZXJzCitfaXNfaWRlbnRpZmllciA9IHJlLmNvbXBpbGUocideW2EtekEtWjAtOV8tXSskJykKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjbGFzcyBQcm9kdWN0aW9uOgorIworIyBUaGlzIGNsYXNzIHN0b3JlcyB0aGUgcmF3IGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHByb2R1Y3Rpb24gb3IgZ3JhbW1hciBydWxlLgorIyBBIGdyYW1tYXIgcnVsZSByZWZlcnMgdG8gYSBzcGVjaWZpY2F0aW9uIHN1Y2ggYXMgdGhpczoKKyMKKyMgICAgICAgZXhwciA6IGV4cHIgUExVUyB0ZXJtIAorIworIyBIZXJlIGFyZSB0aGUgYmFzaWMgYXR0cmlidXRlcyBkZWZpbmVkIG9uIGFsbCBwcm9kdWN0aW9ucworIworIyAgICAgICBuYW1lICAgICAtIE5hbWUgb2YgdGhlIHByb2R1Y3Rpb24uICBGb3IgZXhhbXBsZSAnZXhwcicKKyMgICAgICAgcHJvZCAgICAgLSBBIGxpc3Qgb2Ygc3ltYm9scyBvbiB0aGUgcmlnaHQgc2lkZSBbJ2V4cHInLCdQTFVTJywndGVybSddCisjICAgICAgIHByZWMgICAgIC0gUHJvZHVjdGlvbiBwcmVjZWRlbmNlIGxldmVsCisjICAgICAgIG51bWJlciAgIC0gUHJvZHVjdGlvbiBudW1iZXIuCisjICAgICAgIGZ1bmMgICAgIC0gRnVuY3Rpb24gdGhhdCBleGVjdXRlcyBvbiByZWR1Y2UKKyMgICAgICAgZmlsZSAgICAgLSBGaWxlIHdoZXJlIHByb2R1Y3Rpb24gZnVuY3Rpb24gaXMgZGVmaW5lZAorIyAgICAgICBsaW5lbm8gICAtIExpbmUgbnVtYmVyIHdoZXJlIHByb2R1Y3Rpb24gZnVuY3Rpb24gaXMgZGVmaW5lZAorIworIyBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgb3Igb3B0aW9uYWwuCisjCisjICAgICAgIGxlbiAgICAgICAtIExlbmd0aCBvZiB0aGUgcHJvZHVjdGlvbiAobnVtYmVyIG9mIHN5bWJvbHMgb24gcmlnaHQgaGFuZCBzaWRlKQorIyAgICAgICB1c3ltcyAgICAgLSBTZXQgb2YgdW5pcXVlIHN5bWJvbHMgZm91bmQgaW4gdGhlIHByb2R1Y3Rpb24KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgUHJvZHVjdGlvbihvYmplY3QpOgorICAgIHJlZHVjZWQgPSAwCisgICAgZGVmIF9faW5pdF9fKHNlbGYsbnVtYmVyLG5hbWUscHJvZCxwcmVjZWRlbmNlPSgncmlnaHQnLDApLGZ1bmM9Tm9uZSxmaWxlPScnLGxpbmU9MCk6CisgICAgICAgIHNlbGYubmFtZSAgICAgPSBuYW1lCisgICAgICAgIHNlbGYucHJvZCAgICAgPSB0dXBsZShwcm9kKQorICAgICAgICBzZWxmLm51bWJlciAgID0gbnVtYmVyCisgICAgICAgIHNlbGYuZnVuYyAgICAgPSBmdW5jCisgICAgICAgIHNlbGYuY2FsbGFibGUgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZSAgICAgPSBmaWxlCisgICAgICAgIHNlbGYubGluZSAgICAgPSBsaW5lCisgICAgICAgIHNlbGYucHJlYyAgICAgPSBwcmVjZWRlbmNlCisKKyAgICAgICAgIyBJbnRlcm5hbCBzZXR0aW5ncyB1c2VkIGR1cmluZyB0YWJsZSBjb25zdHJ1Y3Rpb24KKyAgICAgICAgCisgICAgICAgIHNlbGYubGVuICA9IGxlbihzZWxmLnByb2QpICAgIyBMZW5ndGggb2YgdGhlIHByb2R1Y3Rpb24KKworICAgICAgICAjIENyZWF0ZSBhIGxpc3Qgb2YgdW5pcXVlIHByb2R1Y3Rpb24gc3ltYm9scyB1c2VkIGluIHRoZSBwcm9kdWN0aW9uCisgICAgICAgIHNlbGYudXN5bXMgPSBbIF0gICAgICAgICAgICAgCisgICAgICAgIGZvciBzIGluIHNlbGYucHJvZDoKKyAgICAgICAgICAgIGlmIHMgbm90IGluIHNlbGYudXN5bXM6CisgICAgICAgICAgICAgICAgc2VsZi51c3ltcy5hcHBlbmQocykKKworICAgICAgICAjIExpc3Qgb2YgYWxsIExSIGl0ZW1zIGZvciB0aGUgcHJvZHVjdGlvbgorICAgICAgICBzZWxmLmxyX2l0ZW1zID0gW10KKyAgICAgICAgc2VsZi5scl9uZXh0ID0gTm9uZQorCisgICAgICAgICMgQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgICAgICAgIGlmIHNlbGYucHJvZDoKKyAgICAgICAgICAgIHNlbGYuc3RyID0gIiVzIC0+ICVzIiAlIChzZWxmLm5hbWUsIiAiLmpvaW4oc2VsZi5wcm9kKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RyID0gIiVzIC0+IDxlbXB0eT4iICUgc2VsZi5uYW1lCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUHJvZHVjdGlvbigiK3N0cihzZWxmKSsiKSIKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYucHJvZCkKKworICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLGluZGV4KToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvZFtpbmRleF0KKyAgICAgICAgICAgIAorICAgICMgUmV0dXJuIHRoZSBudGggbHJfaXRlbSBmcm9tIHRoZSBwcm9kdWN0aW9uIChvciBOb25lIGlmIGF0IHRoZSBlbmQpCisgICAgZGVmIGxyX2l0ZW0oc2VsZixuKToKKyAgICAgICAgaWYgbiA+IGxlbihzZWxmLnByb2QpOiByZXR1cm4gTm9uZQorICAgICAgICBwID0gTFJJdGVtKHNlbGYsbikKKworICAgICAgICAjIFByZWNvbXB1dGUgdGhlIGxpc3Qgb2YgcHJvZHVjdGlvbnMgaW1tZWRpYXRlbHkgZm9sbG93aW5nLiAgSGFjay4gUmVtb3ZlIGxhdGVyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAubHJfYWZ0ZXIgPSBQcm9kbmFtZXNbcC5wcm9kW24rMV1dCisgICAgICAgIGV4Y2VwdCAoSW5kZXhFcnJvcixLZXlFcnJvcik6CisgICAgICAgICAgICBwLmxyX2FmdGVyID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcC5scl9iZWZvcmUgPSBwLnByb2Rbbi0xXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHAubHJfYmVmb3JlID0gTm9uZQorCisgICAgICAgIHJldHVybiBwCisgICAgCisgICAgIyBCaW5kIHRoZSBwcm9kdWN0aW9uIGZ1bmN0aW9uIG5hbWUgdG8gYSBjYWxsYWJsZQorICAgIGRlZiBiaW5kKHNlbGYscGRpY3QpOgorICAgICAgICBpZiBzZWxmLmZ1bmM6CisgICAgICAgICAgICBzZWxmLmNhbGxhYmxlID0gcGRpY3Rbc2VsZi5mdW5jXQorCisjIFRoaXMgY2xhc3Mgc2VydmVzIGFzIGEgbWluaW1hbCBzdGFuZGluIGZvciBQcm9kdWN0aW9uIG9iamVjdHMgd2hlbgorIyByZWFkaW5nIHRhYmxlIGRhdGEgZnJvbSBmaWxlcy4gICBJdCBvbmx5IGNvbnRhaW5zIGluZm9ybWF0aW9uCisjIGFjdHVhbGx5IHVzZWQgYnkgdGhlIExSIHBhcnNpbmcgZW5naW5lLCBwbHVzIHNvbWUgYWRkaXRpb25hbAorIyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCitjbGFzcyBNaW5pUHJvZHVjdGlvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHN0cixuYW1lLGxlbixmdW5jLGZpbGUsbGluZSk6CisgICAgICAgIHNlbGYubmFtZSAgICAgPSBuYW1lCisgICAgICAgIHNlbGYubGVuICAgICAgPSBsZW4KKyAgICAgICAgc2VsZi5mdW5jICAgICA9IGZ1bmMKKyAgICAgICAgc2VsZi5jYWxsYWJsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5maWxlICAgICA9IGZpbGUKKyAgICAgICAgc2VsZi5saW5lICAgICA9IGxpbmUKKyAgICAgICAgc2VsZi5zdHIgICAgICA9IHN0cgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdHIKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTWluaVByb2R1Y3Rpb24oJXMpIiAlIHNlbGYuc3RyCisKKyAgICAjIEJpbmQgdGhlIHByb2R1Y3Rpb24gZnVuY3Rpb24gbmFtZSB0byBhIGNhbGxhYmxlCisgICAgZGVmIGJpbmQoc2VsZixwZGljdCk6CisgICAgICAgIGlmIHNlbGYuZnVuYzoKKyAgICAgICAgICAgIHNlbGYuY2FsbGFibGUgPSBwZGljdFtzZWxmLmZ1bmNdCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjbGFzcyBMUkl0ZW0KKyMKKyMgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3BlY2lmaWMgc3RhZ2Ugb2YgcGFyc2luZyBhIHByb2R1Y3Rpb24gcnVsZS4gIEZvcgorIyBleGFtcGxlOiAKKyMKKyMgICAgICAgZXhwciA6IGV4cHIgLiBQTFVTIHRlcm0gCisjCisjIEluIHRoZSBhYm92ZSwgdGhlICIuIiByZXByZXNlbnRzIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIHRoZSBwYXJzZS4gIEhlcmUKKyMgYmFzaWMgYXR0cmlidXRlczoKKyMKKyMgICAgICAgbmFtZSAgICAgICAtIE5hbWUgb2YgdGhlIHByb2R1Y3Rpb24uICBGb3IgZXhhbXBsZSAnZXhwcicKKyMgICAgICAgcHJvZCAgICAgICAtIEEgbGlzdCBvZiBzeW1ib2xzIG9uIHRoZSByaWdodCBzaWRlIFsnZXhwcicsJy4nLCAnUExVUycsJ3Rlcm0nXQorIyAgICAgICBudW1iZXIgICAgIC0gUHJvZHVjdGlvbiBudW1iZXIuCisjCisjICAgICAgIGxyX25leHQgICAgICBOZXh0IExSIGl0ZW0uIEV4YW1wbGUsIGlmIHdlIGFyZSAnIGV4cHIgLT4gZXhwciAuIFBMVVMgdGVybScKKyMgICAgICAgICAgICAgICAgICAgIHRoZW4gbHJfbmV4dCByZWZlcnMgdG8gJ2V4cHIgLT4gZXhwciBQTFVTIC4gdGVybScKKyMgICAgICAgbHJfaW5kZXggICAtIExSIGl0ZW0gaW5kZXggKGxvY2F0aW9uIG9mIHRoZSAiLiIpIGluIHRoZSBwcm9kIGxpc3QuCisjICAgICAgIGxvb2thaGVhZHMgLSBMQUxSIGxvb2thaGVhZCBzeW1ib2xzIGZvciB0aGlzIGl0ZW0KKyMgICAgICAgbGVuICAgICAgICAtIExlbmd0aCBvZiB0aGUgcHJvZHVjdGlvbiAobnVtYmVyIG9mIHN5bWJvbHMgb24gcmlnaHQgaGFuZCBzaWRlKQorIyAgICAgICBscl9hZnRlciAgICAtIExpc3Qgb2YgYWxsIHByb2R1Y3Rpb25zIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93CisjICAgICAgIGxyX2JlZm9yZSAgIC0gR3JhbW1hciBzeW1ib2wgaW1tZWRpYXRlbHkgYmVmb3JlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIExSSXRlbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHAsbik6CisgICAgICAgIHNlbGYubmFtZSAgICAgICA9IHAubmFtZQorICAgICAgICBzZWxmLnByb2QgICAgICAgPSBsaXN0KHAucHJvZCkKKyAgICAgICAgc2VsZi5udW1iZXIgICAgID0gcC5udW1iZXIKKyAgICAgICAgc2VsZi5scl9pbmRleCAgID0gbgorICAgICAgICBzZWxmLmxvb2thaGVhZHMgPSB7IH0KKyAgICAgICAgc2VsZi5wcm9kLmluc2VydChuLCIuIikKKyAgICAgICAgc2VsZi5wcm9kICAgICAgID0gdHVwbGUoc2VsZi5wcm9kKQorICAgICAgICBzZWxmLmxlbiAgICAgICAgPSBsZW4oc2VsZi5wcm9kKQorICAgICAgICBzZWxmLnVzeW1zICAgICAgPSBwLnVzeW1zCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5wcm9kOgorICAgICAgICAgICAgcyA9ICIlcyAtPiAlcyIgJSAoc2VsZi5uYW1lLCIgIi5qb2luKHNlbGYucHJvZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzID0gIiVzIC0+IDxlbXB0eT4iICUgc2VsZi5uYW1lCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiTFJJdGVtKCIrc3RyKHNlbGYpKyIpIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJpZ2h0bW9zdF90ZXJtaW5hbCgpCisjCisjIFJldHVybiB0aGUgcmlnaHRtb3N0IHRlcm1pbmFsIGZyb20gYSBsaXN0IG9mIHN5bWJvbHMuICBVc2VkIGluIGFkZF9wcm9kdWN0aW9uKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiByaWdodG1vc3RfdGVybWluYWwoc3ltYm9scywgdGVybWluYWxzKToKKyAgICBpID0gbGVuKHN5bWJvbHMpIC0gMQorICAgIHdoaWxlIGkgPj0gMDoKKyAgICAgICAgaWYgc3ltYm9sc1tpXSBpbiB0ZXJtaW5hbHM6CisgICAgICAgICAgICByZXR1cm4gc3ltYm9sc1tpXQorICAgICAgICBpIC09IDEKKyAgICByZXR1cm4gTm9uZQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09IEdSQU1NQVIgQ0xBU1MgPT09CisjCisjIFRoZSBmb2xsb3dpbmcgY2xhc3MgcmVwcmVzZW50cyB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBncmFtbWFyIGFsb25nCisjIHdpdGggdmFyaW91cyBjb21wdXRlZCBwcm9wZXJ0aWVzIHN1Y2ggYXMgZmlyc3Qgc2V0cywgZm9sbG93IHNldHMsIExSIGl0ZW1zLCBldGMuCisjIFRoaXMgZGF0YSBpcyB1c2VkIGZvciBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgdGFibGUgZ2VuZXJhdGlvbiBwcm9jZXNzIGxhdGVyLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBHcmFtbWFyRXJyb3IoWWFjY0Vycm9yKTogcGFzcworCitjbGFzcyBHcmFtbWFyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsdGVybWluYWxzKToKKyAgICAgICAgc2VsZi5Qcm9kdWN0aW9ucyAgPSBbTm9uZV0gICMgQSBsaXN0IG9mIGFsbCBvZiB0aGUgcHJvZHVjdGlvbnMuICBUaGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZW50cnkgaXMgYWx3YXlzIHJlc2VydmVkIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBidWlsZGluZyBhbiBhdWdtZW50ZWQgZ3JhbW1hcgorCisgICAgICAgIHNlbGYuUHJvZG5hbWVzICAgID0geyB9ICAgICAjIEEgZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBuYW1lcyBvZiBub250ZXJtaW5hbHMgdG8gYSBsaXN0IG9mIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9kdWN0aW9ucyBvZiB0aGF0IG5vbnRlcm1pbmFsLgorCisgICAgICAgIHNlbGYuUHJvZG1hcCAgICAgID0geyB9ICAgICAjIEEgZGljdGlvbmFyeSB0aGF0IGlzIG9ubHkgdXNlZCB0byBkZXRlY3QgZHVwbGljYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByb2R1Y3Rpb25zLgorCisgICAgICAgIHNlbGYuVGVybWluYWxzICAgID0geyB9ICAgICAjIEEgZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBuYW1lcyBvZiB0ZXJtaW5hbCBzeW1ib2xzIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbGlzdCBvZiB0aGUgcnVsZXMgd2hlcmUgdGhleSBhcmUgdXNlZC4KKworICAgICAgICBmb3IgdGVybSBpbiB0ZXJtaW5hbHM6CisgICAgICAgICAgICBzZWxmLlRlcm1pbmFsc1t0ZXJtXSA9IFtdCisKKyAgICAgICAgc2VsZi5UZXJtaW5hbHNbJ2Vycm9yJ10gPSBbXQorCisgICAgICAgIHNlbGYuTm9udGVybWluYWxzID0geyB9ICAgICAjIEEgZGljdGlvbmFyeSBtYXBwaW5nIG5hbWVzIG9mIG5vbnRlcm1pbmFscyB0byBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgcnVsZSBudW1iZXJzIHdoZXJlIHRoZXkgYXJlIHVzZWQuCisKKyAgICAgICAgc2VsZi5GaXJzdCAgICAgICAgPSB7IH0gICAgICMgQSBkaWN0aW9uYXJ5IG9mIHByZWNvbXB1dGVkIEZJUlNUKHgpIHN5bWJvbHMKKworICAgICAgICBzZWxmLkZvbGxvdyAgICAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgb2YgcHJlY29tcHV0ZWQgRk9MTE9XKHgpIHN5bWJvbHMKKworICAgICAgICBzZWxmLlByZWNlZGVuY2UgICA9IHsgfSAgICAgIyBQcmVjZWRlbmNlIHJ1bGVzIGZvciBlYWNoIHRlcm1pbmFsLiBDb250YWlucyB0dXBsZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZvcm0gKCdyaWdodCcsbGV2ZWwpIG9yICgnbm9uYXNzb2MnLCBsZXZlbCkgb3IgKCdsZWZ0JyxsZXZlbCkKKworICAgICAgICBzZWxmLlVzZWRQcmVjZWRlbmNlID0geyB9ICAgIyBQcmVjZWRlbmNlIHJ1bGVzIHRoYXQgd2VyZSBhY3R1YWxseSB1c2VkIGJ5IHRoZSBncmFtbWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIG9ubHkgdXNlZCB0byBwcm92aWRlIGVycm9yIGNoZWNraW5nIGFuZCB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIHdhcm5pbmcgYWJvdXQgdW51c2VkIHByZWNlZGVuY2UgcnVsZXMuCisKKyAgICAgICAgc2VsZi5TdGFydCA9IE5vbmUgICAgICAgICAgICMgU3RhcnRpbmcgc3ltYm9sIGZvciB0aGUgZ3JhbW1hcgorCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLlByb2R1Y3Rpb25zKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsaW5kZXgpOgorICAgICAgICByZXR1cm4gc2VsZi5Qcm9kdWN0aW9uc1tpbmRleF0KKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHNldF9wcmVjZWRlbmNlKCkKKyAgICAjCisgICAgIyBTZXRzIHRoZSBwcmVjZWRlbmNlIGZvciBhIGdpdmVuIHRlcm1pbmFsLiBhc3NvYyBpcyB0aGUgYXNzb2NpYXRpdml0eSBzdWNoIGFzCisgICAgIyAnbGVmdCcsJ3JpZ2h0Jywgb3IgJ25vbmFzc29jJy4gIGxldmVsIGlzIGEgbnVtZXJpYyBsZXZlbC4KKyAgICAjCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHNldF9wcmVjZWRlbmNlKHNlbGYsdGVybSxhc3NvYyxsZXZlbCk6CisgICAgICAgIGFzc2VydCBzZWxmLlByb2R1Y3Rpb25zID09IFtOb25lXSwiTXVzdCBjYWxsIHNldF9wcmVjZWRlbmNlKCkgYmVmb3JlIGFkZF9wcm9kdWN0aW9uKCkiCisgICAgICAgIGlmIHRlcm0gaW4gc2VsZi5QcmVjZWRlbmNlOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCJQcmVjZWRlbmNlIGFscmVhZHkgc3BlY2lmaWVkIGZvciB0ZXJtaW5hbCAnJXMnIiAlIHRlcm0pCisgICAgICAgIGlmIGFzc29jIG5vdCBpbiBbJ2xlZnQnLCdyaWdodCcsJ25vbmFzc29jJ106CisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIkFzc29jaWF0aXZpdHkgbXVzdCBiZSBvbmUgb2YgJ2xlZnQnLCdyaWdodCcsIG9yICdub25hc3NvYyciKQorICAgICAgICBzZWxmLlByZWNlZGVuY2VbdGVybV0gPSAoYXNzb2MsbGV2ZWwpCisgCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYWRkX3Byb2R1Y3Rpb24oKQorICAgICMKKyAgICAjIEdpdmVuIGFuIGFjdGlvbiBmdW5jdGlvbiwgdGhpcyBmdW5jdGlvbiBhc3NlbWJsZXMgYSBwcm9kdWN0aW9uIHJ1bGUgYW5kCisgICAgIyBjb21wdXRlcyBpdHMgcHJlY2VkZW5jZSBsZXZlbC4KKyAgICAjCisgICAgIyBUaGUgcHJvZHVjdGlvbiBydWxlIGlzIHN1cHBsaWVkIGFzIGEgbGlzdCBvZiBzeW1ib2xzLiAgIEZvciBleGFtcGxlLAorICAgICMgYSBydWxlIHN1Y2ggYXMgJ2V4cHIgOiBleHByIFBMVVMgdGVybScgaGFzIGEgcHJvZHVjdGlvbiBuYW1lIG9mICdleHByJyBhbmQKKyAgICAjIHN5bWJvbHMgWydleHByJywnUExVUycsJ3Rlcm0nXS4KKyAgICAjCisgICAgIyBQcmVjZWRlbmNlIGlzIGRldGVybWluZWQgYnkgdGhlIHByZWNlZGVuY2Ugb2YgdGhlIHJpZ2h0LW1vc3Qgbm9uLXRlcm1pbmFsCisgICAgIyBvciB0aGUgcHJlY2VkZW5jZSBvZiBhIHRlcm1pbmFsIHNwZWNpZmllZCBieSAlcHJlYy4KKyAgICAjCisgICAgIyBBIHZhcmlldHkgb2YgZXJyb3IgY2hlY2tzIGFyZSBwZXJmb3JtZWQgdG8gbWFrZSBzdXJlIHByb2R1Y3Rpb24gc3ltYm9scworICAgICMgYXJlIHZhbGlkIGFuZCB0aGF0ICVwcmVjIGlzIHVzZWQgY29ycmVjdGx5LgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBhZGRfcHJvZHVjdGlvbihzZWxmLHByb2RuYW1lLHN5bXMsZnVuYz1Ob25lLGZpbGU9JycsbGluZT0wKToKKworICAgICAgICBpZiBwcm9kbmFtZSBpbiBzZWxmLlRlcm1pbmFsczoKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IElsbGVnYWwgcnVsZSBuYW1lICclcycuIEFscmVhZHkgZGVmaW5lZCBhcyBhIHRva2VuIiAlIChmaWxlLGxpbmUscHJvZG5hbWUpKQorICAgICAgICBpZiBwcm9kbmFtZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogSWxsZWdhbCBydWxlIG5hbWUgJyVzJy4gZXJyb3IgaXMgYSByZXNlcnZlZCB3b3JkIiAlIChmaWxlLGxpbmUscHJvZG5hbWUpKQorICAgICAgICBpZiBub3QgX2lzX2lkZW50aWZpZXIubWF0Y2gocHJvZG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogSWxsZWdhbCBydWxlIG5hbWUgJyVzJyIgJSAoZmlsZSxsaW5lLHByb2RuYW1lKSkKKworICAgICAgICAjIExvb2sgZm9yIGxpdGVyYWwgdG9rZW5zIAorICAgICAgICBmb3IgbixzIGluIGVudW1lcmF0ZShzeW1zKToKKyAgICAgICAgICAgIGlmIHNbMF0gaW4gIidcIiI6CisgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIGMgPSBldmFsKHMpCisgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKGMpID4gMSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IExpdGVyYWwgdG9rZW4gJXMgaW4gcnVsZSAnJXMnIG1heSBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciIgJSAoZmlsZSxsaW5lLHMsIHByb2RuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjIGluIHNlbGYuVGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlRlcm1pbmFsc1tjXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICBzeW1zW25dID0gYworICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IF9pc19pZGVudGlmaWVyLm1hdGNoKHMpIGFuZCBzICE9ICclcHJlYyc6CisgICAgICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogSWxsZWdhbCBuYW1lICclcycgaW4gcnVsZSAnJXMnIiAlIChmaWxlLGxpbmUscywgcHJvZG5hbWUpKQorICAgICAgICAKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIHByZWNlZGVuY2UgbGV2ZWwKKyAgICAgICAgaWYgJyVwcmVjJyBpbiBzeW1zOgorICAgICAgICAgICAgaWYgc3ltc1stMV0gPT0gJyVwcmVjJzoKKyAgICAgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBTeW50YXggZXJyb3IuIE5vdGhpbmcgZm9sbG93cyAlJXByZWMiICUgKGZpbGUsbGluZSkpCisgICAgICAgICAgICBpZiBzeW1zWy0yXSAhPSAnJXByZWMnOgorICAgICAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IFN5bnRheCBlcnJvci4gJSVwcmVjIGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgZW5kIG9mIGEgZ3JhbW1hciBydWxlIiAlIChmaWxlLGxpbmUpKQorICAgICAgICAgICAgcHJlY25hbWUgPSBzeW1zWy0xXQorICAgICAgICAgICAgcHJvZHByZWMgPSBzZWxmLlByZWNlZGVuY2UuZ2V0KHByZWNuYW1lLE5vbmUpCisgICAgICAgICAgICBpZiBub3QgcHJvZHByZWM6CisgICAgICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogTm90aGluZyBrbm93biBhYm91dCB0aGUgcHJlY2VkZW5jZSBvZiAnJXMnIiAlIChmaWxlLGxpbmUscHJlY25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLlVzZWRQcmVjZWRlbmNlW3ByZWNuYW1lXSA9IDEKKyAgICAgICAgICAgIGRlbCBzeW1zWy0yOl0gICAgICMgRHJvcCAlcHJlYyBmcm9tIHRoZSBydWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIG5vICVwcmVjLCBwcmVjZWRlbmNlIGlzIGRldGVybWluZWQgYnkgdGhlIHJpZ2h0bW9zdCB0ZXJtaW5hbCBzeW1ib2wKKyAgICAgICAgICAgIHByZWNuYW1lID0gcmlnaHRtb3N0X3Rlcm1pbmFsKHN5bXMsc2VsZi5UZXJtaW5hbHMpCisgICAgICAgICAgICBwcm9kcHJlYyA9IHNlbGYuUHJlY2VkZW5jZS5nZXQocHJlY25hbWUsKCdyaWdodCcsMCkpIAorICAgICAgICAgICAgCisgICAgICAgICMgU2VlIGlmIHRoZSBydWxlIGlzIGFscmVhZHkgaW4gdGhlIHJ1bGVtYXAKKyAgICAgICAgbWFwID0gIiVzIC0+ICVzIiAlIChwcm9kbmFtZSxzeW1zKQorICAgICAgICBpZiBtYXAgaW4gc2VsZi5Qcm9kbWFwOgorICAgICAgICAgICAgbSA9IHNlbGYuUHJvZG1hcFttYXBdCisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBEdXBsaWNhdGUgcnVsZSAlcy4gIiAlIChmaWxlLGxpbmUsIG0pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJldmlvdXMgZGVmaW5pdGlvbiBhdCAlczolZCIgJSAobS5maWxlLCBtLmxpbmUpKQorCisgICAgICAgICMgRnJvbSB0aGlzIHBvaW50IG9uLCBldmVyeXRoaW5nIGlzIHZhbGlkLiAgQ3JlYXRlIGEgbmV3IFByb2R1Y3Rpb24gaW5zdGFuY2UKKyAgICAgICAgcG51bWJlciAgPSBsZW4oc2VsZi5Qcm9kdWN0aW9ucykKKyAgICAgICAgaWYgbm90IHByb2RuYW1lIGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5Ob250ZXJtaW5hbHNbcHJvZG5hbWVdID0gWyBdCisKKyAgICAgICAgIyBBZGQgdGhlIHByb2R1Y3Rpb24gbnVtYmVyIHRvIFRlcm1pbmFscyBhbmQgTm9udGVybWluYWxzCisgICAgICAgIGZvciB0IGluIHN5bXM6CisgICAgICAgICAgICBpZiB0IGluIHNlbGYuVGVybWluYWxzOgorICAgICAgICAgICAgICAgIHNlbGYuVGVybWluYWxzW3RdLmFwcGVuZChwbnVtYmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgdCBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5Ob250ZXJtaW5hbHNbdF0gPSBbIF0KKyAgICAgICAgICAgICAgICBzZWxmLk5vbnRlcm1pbmFsc1t0XS5hcHBlbmQocG51bWJlcikKKworICAgICAgICAjIENyZWF0ZSBhIHByb2R1Y3Rpb24gYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBwcm9kdWN0aW9ucworICAgICAgICBwID0gUHJvZHVjdGlvbihwbnVtYmVyLHByb2RuYW1lLHN5bXMscHJvZHByZWMsZnVuYyxmaWxlLGxpbmUpCisgICAgICAgIHNlbGYuUHJvZHVjdGlvbnMuYXBwZW5kKHApCisgICAgICAgIHNlbGYuUHJvZG1hcFttYXBdID0gcAorCisgICAgICAgICMgQWRkIHRvIHRoZSBnbG9iYWwgcHJvZHVjdGlvbnMgbGlzdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLlByb2RuYW1lc1twcm9kbmFtZV0uYXBwZW5kKHApCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuUHJvZG5hbWVzW3Byb2RuYW1lXSA9IFsgcCBdCisgICAgICAgIHJldHVybiAwCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBzZXRfc3RhcnQoKQorICAgICMKKyAgICAjIFNldHMgdGhlIHN0YXJ0aW5nIHN5bWJvbCBhbmQgY3JlYXRlcyB0aGUgYXVnbWVudGVkIGdyYW1tYXIuICBQcm9kdWN0aW9uIAorICAgICMgcnVsZSAwIGlzIFMnIC0+IHN0YXJ0IHdoZXJlIHN0YXJ0IGlzIHRoZSBzdGFydCBzeW1ib2wuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHNldF9zdGFydChzZWxmLHN0YXJ0PU5vbmUpOgorICAgICAgICBpZiBub3Qgc3RhcnQ6CisgICAgICAgICAgICBzdGFydCA9IHNlbGYuUHJvZHVjdGlvbnNbMV0ubmFtZQorICAgICAgICBpZiBzdGFydCBub3QgaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoInN0YXJ0IHN5bWJvbCAlcyB1bmRlZmluZWQiICUgc3RhcnQpCisgICAgICAgIHNlbGYuUHJvZHVjdGlvbnNbMF0gPSBQcm9kdWN0aW9uKDAsIlMnIixbc3RhcnRdKQorICAgICAgICBzZWxmLk5vbnRlcm1pbmFsc1tzdGFydF0uYXBwZW5kKDApCisgICAgICAgIHNlbGYuU3RhcnQgPSBzdGFydAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgZmluZF91bnJlYWNoYWJsZSgpCisgICAgIworICAgICMgRmluZCBhbGwgb2YgdGhlIG5vbnRlcm1pbmFsIHN5bWJvbHMgdGhhdCBjYW4ndCBiZSByZWFjaGVkIGZyb20gdGhlIHN0YXJ0aW5nCisgICAgIyBzeW1ib2wuICBSZXR1cm5zIGEgbGlzdCBvZiBub250ZXJtaW5hbHMgdGhhdCBjYW4ndCBiZSByZWFjaGVkLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBmaW5kX3VucmVhY2hhYmxlKHNlbGYpOgorICAgICAgICAKKyAgICAgICAgIyBNYXJrIGFsbCBzeW1ib2xzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGEgc3ltYm9sIHMKKyAgICAgICAgZGVmIG1hcmtfcmVhY2hhYmxlX2Zyb20ocyk6CisgICAgICAgICAgICBpZiByZWFjaGFibGVbc106CisgICAgICAgICAgICAgICAgIyBXZSd2ZSBhbHJlYWR5IHJlYWNoZWQgc3ltYm9sIHMuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZWFjaGFibGVbc10gPSAxCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLlByb2RuYW1lcy5nZXQocyxbXSk6CisgICAgICAgICAgICAgICAgZm9yIHIgaW4gcC5wcm9kOgorICAgICAgICAgICAgICAgICAgICBtYXJrX3JlYWNoYWJsZV9mcm9tKHIpCisKKyAgICAgICAgcmVhY2hhYmxlICAgPSB7IH0KKyAgICAgICAgZm9yIHMgaW4gbGlzdChzZWxmLlRlcm1pbmFscykgKyBsaXN0KHNlbGYuTm9udGVybWluYWxzKToKKyAgICAgICAgICAgIHJlYWNoYWJsZVtzXSA9IDAKKworICAgICAgICBtYXJrX3JlYWNoYWJsZV9mcm9tKCBzZWxmLlByb2R1Y3Rpb25zWzBdLnByb2RbMF0gKQorCisgICAgICAgIHJldHVybiBbcyBmb3IgcyBpbiBsaXN0KHNlbGYuTm9udGVybWluYWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWNoYWJsZVtzXV0KKyAgICAKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBpbmZpbml0ZV9jeWNsZXMoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gbG9va3MgYXQgdGhlIHZhcmlvdXMgcGFyc2luZyBydWxlcyBhbmQgdHJpZXMgdG8gZGV0ZWN0CisgICAgIyBpbmZpbml0ZSByZWN1cnNpb24gY3ljbGVzIChncmFtbWFyIHJ1bGVzIHdoZXJlIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHdheQorICAgICMgdG8gZGVyaXZlIGEgc3RyaW5nIG9mIG9ubHkgdGVybWluYWxzKS4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgaW5maW5pdGVfY3ljbGVzKHNlbGYpOgorICAgICAgICB0ZXJtaW5hdGVzID0ge30KKworICAgICAgICAjIFRlcm1pbmFsczoKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5UZXJtaW5hbHM6CisgICAgICAgICAgICB0ZXJtaW5hdGVzW3RdID0gMQorCisgICAgICAgIHRlcm1pbmF0ZXNbJyRlbmQnXSA9IDEKKworICAgICAgICAjIE5vbnRlcm1pbmFsczoKKworICAgICAgICAjIEluaXRpYWxpemUgdG8gZmFsc2U6CisgICAgICAgIGZvciBuIGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgdGVybWluYXRlc1tuXSA9IDAKKworICAgICAgICAjIFRoZW4gcHJvcGFnYXRlIHRlcm1pbmF0aW9uIHVudGlsIG5vIGNoYW5nZToKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHNvbWVfY2hhbmdlID0gMAorICAgICAgICAgICAgZm9yIChuLHBsKSBpbiBzZWxmLlByb2RuYW1lcy5pdGVtcygpOgorICAgICAgICAgICAgICAgICMgTm9udGVybWluYWwgbiB0ZXJtaW5hdGVzIGlmZiBhbnkgb2YgaXRzIHByb2R1Y3Rpb25zIHRlcm1pbmF0ZXMuCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGw6CisgICAgICAgICAgICAgICAgICAgICMgUHJvZHVjdGlvbiBwIHRlcm1pbmF0ZXMgaWZmIGFsbCBvZiBpdHMgcmhzIHN5bWJvbHMgdGVybWluYXRlLgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBwLnByb2Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdGVybWluYXRlc1tzXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBzeW1ib2wgcyBkb2VzIG5vdCB0ZXJtaW5hdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyBwcm9kdWN0aW9uIHAgZG9lcyBub3QgdGVybWluYXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfdGVybWluYXRlcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBkaWRuJ3QgYnJlYWsgZnJvbSB0aGUgbG9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc28gZXZlcnkgc3ltYm9sIHMgdGVybWluYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyBwcm9kdWN0aW9uIHAgdGVybWluYXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBfdGVybWluYXRlcyA9IDEKKworICAgICAgICAgICAgICAgICAgICBpZiBwX3Rlcm1pbmF0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHN5bWJvbCBuIHRlcm1pbmF0ZXMhCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdGVybWluYXRlc1tuXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVzW25dID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVfY2hhbmdlID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBuZWVkIHRvIGNvbnNpZGVyIGFueSBtb3JlIHByb2R1Y3Rpb25zIGZvciB0aGlzIG4uCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3Qgc29tZV9jaGFuZ2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpbmZpbml0ZSA9IFtdCisgICAgICAgIGZvciAocyx0ZXJtKSBpbiB0ZXJtaW5hdGVzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgdGVybToKKyAgICAgICAgICAgICAgICBpZiBub3QgcyBpbiBzZWxmLlByb2RuYW1lcyBhbmQgbm90IHMgaW4gc2VsZi5UZXJtaW5hbHMgYW5kIHMgIT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgIyBzIGlzIHVzZWQtYnV0LW5vdC1kZWZpbmVkLCBhbmQgd2UndmUgYWxyZWFkeSB3YXJuZWQgb2YgdGhhdCwKKyAgICAgICAgICAgICAgICAgICAgIyBzbyBpdCB3b3VsZCBiZSBvdmVya2lsbCB0byBzYXkgdGhhdCBpdCdzIGFsc28gbm9uLXRlcm1pbmF0aW5nLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5maW5pdGUuYXBwZW5kKHMpCisKKyAgICAgICAgcmV0dXJuIGluZmluaXRlCisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHVuZGVmaW5lZF9zeW1ib2xzKCkKKyAgICAjCisgICAgIyBGaW5kIGFsbCBzeW1ib2xzIHRoYXQgd2VyZSB1c2VkIHRoZSBncmFtbWFyLCBidXQgbm90IGRlZmluZWQgYXMgdG9rZW5zIG9yCisgICAgIyBncmFtbWFyIHJ1bGVzLiAgUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIChzeW0sIHByb2QpIHdoZXJlIHN5bSBpbiB0aGUgc3ltYm9sCisgICAgIyBhbmQgcHJvZCBpcyB0aGUgcHJvZHVjdGlvbiB3aGVyZSB0aGUgc3ltYm9sIHdhcyB1c2VkLiAKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgcCBpbiBzZWxmLlByb2R1Y3Rpb25zOgorICAgICAgICAgICAgaWYgbm90IHA6IGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBzIGluIHAucHJvZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgcyBpbiBzZWxmLlByb2RuYW1lcyBhbmQgbm90IHMgaW4gc2VsZi5UZXJtaW5hbHMgYW5kIHMgIT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgocyxwKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgdW51c2VkX3Rlcm1pbmFscygpCisgICAgIworICAgICMgRmluZCBhbGwgdGVybWluYWxzIHRoYXQgd2VyZSBkZWZpbmVkLCBidXQgbm90IHVzZWQgYnkgdGhlIGdyYW1tYXIuICBSZXR1cm5zCisgICAgIyBhIGxpc3Qgb2YgYWxsIHN5bWJvbHMuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiB1bnVzZWRfdGVybWluYWxzKHNlbGYpOgorICAgICAgICB1bnVzZWRfdG9rID0gW10KKyAgICAgICAgZm9yIHMsdiBpbiBzZWxmLlRlcm1pbmFscy5pdGVtcygpOgorICAgICAgICAgICAgaWYgcyAhPSAnZXJyb3InIGFuZCBub3QgdjoKKyAgICAgICAgICAgICAgICB1bnVzZWRfdG9rLmFwcGVuZChzKQorCisgICAgICAgIHJldHVybiB1bnVzZWRfdG9rCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgdW51c2VkX3J1bGVzKCkKKyAgICAjCisgICAgIyBGaW5kIGFsbCBncmFtbWFyIHJ1bGVzIHRoYXQgd2VyZSBkZWZpbmVkLCAgYnV0IG5vdCB1c2VkIChtYXliZSBub3QgcmVhY2hhYmxlKQorICAgICMgUmV0dXJucyBhIGxpc3Qgb2YgcHJvZHVjdGlvbnMuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB1bnVzZWRfcnVsZXMoc2VsZik6CisgICAgICAgIHVudXNlZF9wcm9kID0gW10KKyAgICAgICAgZm9yIHMsdiBpbiBzZWxmLk5vbnRlcm1pbmFscy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IHY6CisgICAgICAgICAgICAgICAgcCA9IHNlbGYuUHJvZG5hbWVzW3NdWzBdCisgICAgICAgICAgICAgICAgdW51c2VkX3Byb2QuYXBwZW5kKHApCisgICAgICAgIHJldHVybiB1bnVzZWRfcHJvZAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgdW51c2VkX3ByZWNlZGVuY2UoKQorICAgICMKKyAgICAjIFJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyAodGVybSxwcmVjZWRlbmNlKSBjb3JyZXNwb25kaW5nIHRvIHByZWNlZGVuY2UKKyAgICAjIHJ1bGVzIHRoYXQgd2VyZSBuZXZlciB1c2VkIGJ5IHRoZSBncmFtbWFyLiAgdGVybSBpcyB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwKKyAgICAjIG9uIHdoaWNoIHByZWNlZGVuY2Ugd2FzIGFwcGxpZWQgYW5kIHByZWNlZGVuY2UgaXMgYSBzdHJpbmcgc3VjaCBhcyAnbGVmdCcgb3IKKyAgICAjICdyaWdodCcgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZSBvZiBwcmVjZWRlbmNlLiAKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdW51c2VkX3ByZWNlZGVuY2Uoc2VsZik6CisgICAgICAgIHVudXNlZCA9IFtdCisgICAgICAgIGZvciB0ZXJtbmFtZSBpbiBzZWxmLlByZWNlZGVuY2U6CisgICAgICAgICAgICBpZiBub3QgKHRlcm1uYW1lIGluIHNlbGYuVGVybWluYWxzIG9yIHRlcm1uYW1lIGluIHNlbGYuVXNlZFByZWNlZGVuY2UpOgorICAgICAgICAgICAgICAgIHVudXNlZC5hcHBlbmQoKHRlcm1uYW1lLHNlbGYuUHJlY2VkZW5jZVt0ZXJtbmFtZV1bMF0pKQorICAgICAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gdW51c2VkCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIF9maXJzdCgpCisgICAgIworICAgICMgQ29tcHV0ZSB0aGUgdmFsdWUgb2YgRklSU1QxKGJldGEpIHdoZXJlIGJldGEgaXMgYSB0dXBsZSBvZiBzeW1ib2xzLgorICAgICMKKyAgICAjIER1cmluZyBleGVjdXRpb24gb2YgY29tcHV0ZV9maXJzdDEsIHRoZSByZXN1bHQgbWF5IGJlIGluY29tcGxldGUuCisgICAgIyBBZnRlcndhcmQgKGUuZy4sIHdoZW4gY2FsbGVkIGZyb20gY29tcHV0ZV9mb2xsb3coKSksIGl0IHdpbGwgYmUgY29tcGxldGUuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIF9maXJzdChzZWxmLGJldGEpOgorCisgICAgICAgICMgV2UgYXJlIGNvbXB1dGluZyBGaXJzdCh4MSx4Mix4MywuLi4seG4pCisgICAgICAgIHJlc3VsdCA9IFsgXQorICAgICAgICBmb3IgeCBpbiBiZXRhOgorICAgICAgICAgICAgeF9wcm9kdWNlc19lbXB0eSA9IDAKKworICAgICAgICAgICAgIyBBZGQgYWxsIHRoZSBub24tPGVtcHR5PiBzeW1ib2xzIG9mIEZpcnN0W3hdIHRvIHRoZSByZXN1bHQuCisgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLkZpcnN0W3hdOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gJzxlbXB0eT4nOgorICAgICAgICAgICAgICAgICAgICB4X3Byb2R1Y2VzX2VtcHR5ID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGYgbm90IGluIHJlc3VsdDogcmVzdWx0LmFwcGVuZChmKQorCisgICAgICAgICAgICBpZiB4X3Byb2R1Y2VzX2VtcHR5OgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSB0byBjb25zaWRlciB0aGUgbmV4dCB4IGluIGJldGEsCisgICAgICAgICAgICAgICAgIyBpLmUuIHN0YXkgaW4gdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGhhdmUgdG8gY29uc2lkZXIgYW55IGZ1cnRoZXIgc3ltYm9scyBpbiBiZXRhLgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZXJlIHdhcyBubyAnYnJlYWsnIGZyb20gdGhlIGxvb3AsCisgICAgICAgICAgICAjIHNvIHhfcHJvZHVjZXNfZW1wdHkgd2FzIHRydWUgZm9yIGFsbCB4IGluIGJldGEsCisgICAgICAgICAgICAjIHNvIGJldGEgcHJvZHVjZXMgZW1wdHkgYXMgd2VsbC4KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzxlbXB0eT4nKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9maXJzdCgpCisgICAgIworICAgICMgQ29tcHV0ZSB0aGUgdmFsdWUgb2YgRklSU1QxKFgpIGZvciBhbGwgc3ltYm9scworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBjb21wdXRlX2ZpcnN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLkZpcnN0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuRmlyc3QKKworICAgICAgICAjIFRlcm1pbmFsczoKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5UZXJtaW5hbHM6CisgICAgICAgICAgICBzZWxmLkZpcnN0W3RdID0gW3RdCisKKyAgICAgICAgc2VsZi5GaXJzdFsnJGVuZCddID0gWyckZW5kJ10KKworICAgICAgICAjIE5vbnRlcm1pbmFsczoKKworICAgICAgICAjIEluaXRpYWxpemUgdG8gdGhlIGVtcHR5IHNldDoKKyAgICAgICAgZm9yIG4gaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICBzZWxmLkZpcnN0W25dID0gW10KKworICAgICAgICAjIFRoZW4gcHJvcGFnYXRlIHN5bWJvbHMgdW50aWwgbm8gY2hhbmdlOgorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc29tZV9jaGFuZ2UgPSAwCisgICAgICAgICAgICBmb3IgbiBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLlByb2RuYW1lc1tuXToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5fZmlyc3QocC5wcm9kKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgbm90IGluIHNlbGYuRmlyc3Rbbl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GaXJzdFtuXS5hcHBlbmQoIGYgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVfY2hhbmdlID0gMQorICAgICAgICAgICAgaWYgbm90IHNvbWVfY2hhbmdlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIAorICAgICAgICByZXR1cm4gc2VsZi5GaXJzdAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNvbXB1dGVfZm9sbG93KCkKKyAgICAjCisgICAgIyBDb21wdXRlcyBhbGwgb2YgdGhlIGZvbGxvdyBzZXRzIGZvciBldmVyeSBub24tdGVybWluYWwgc3ltYm9sLiAgVGhlCisgICAgIyBmb2xsb3cgc2V0IGlzIHRoZSBzZXQgb2YgYWxsIHN5bWJvbHMgdGhhdCBtaWdodCBmb2xsb3cgYSBnaXZlbgorICAgICMgbm9uLXRlcm1pbmFsLiAgU2VlIHRoZSBEcmFnb24gYm9vaywgMm5kIEVkLiBwLiAxODkuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgY29tcHV0ZV9mb2xsb3coc2VsZixzdGFydD1Ob25lKToKKyAgICAgICAgIyBJZiBhbHJlYWR5IGNvbXB1dGVkLCByZXR1cm4gdGhlIHJlc3VsdAorICAgICAgICBpZiBzZWxmLkZvbGxvdzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLkZvbGxvdworCisgICAgICAgICMgSWYgZmlyc3Qgc2V0cyBub3QgY29tcHV0ZWQgeWV0LCBkbyB0aGF0IGZpcnN0LgorICAgICAgICBpZiBub3Qgc2VsZi5GaXJzdDoKKyAgICAgICAgICAgIHNlbGYuY29tcHV0ZV9maXJzdCgpCisKKyAgICAgICAgIyBBZGQgJyRlbmQnIHRvIHRoZSBmb2xsb3cgbGlzdCBvZiB0aGUgc3RhcnQgc3ltYm9sCisgICAgICAgIGZvciBrIGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5Gb2xsb3dba10gPSBbIF0KKworICAgICAgICBpZiBub3Qgc3RhcnQ6CisgICAgICAgICAgICBzdGFydCA9IHNlbGYuUHJvZHVjdGlvbnNbMV0ubmFtZQorCisgICAgICAgIHNlbGYuRm9sbG93W3N0YXJ0XSA9IFsgJyRlbmQnIF0KKworICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgZGlkYWRkID0gMAorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kdWN0aW9uc1sxOl06CisgICAgICAgICAgICAgICAgIyBIZXJlIGlzIHRoZSBwcm9kdWN0aW9uIHNldAorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwLnByb2QpKToKKyAgICAgICAgICAgICAgICAgICAgQiA9IHAucHJvZFtpXQorICAgICAgICAgICAgICAgICAgICBpZiBCIGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBPa2F5LiBXZSBnb3QgYSBub24tdGVybWluYWwgaW4gYSBwcm9kdWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmc3QgPSBzZWxmLl9maXJzdChwLnByb2RbaSsxOl0pCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNlbXB0eSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIGZzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmICE9ICc8ZW1wdHk+JyBhbmQgZiBub3QgaW4gc2VsZi5Gb2xsb3dbQl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRm9sbG93W0JdLmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRhZGQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZiA9PSAnPGVtcHR5Pic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2VtcHR5ID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzZW1wdHkgb3IgaSA9PSAobGVuKHAucHJvZCktMSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgZWxlbWVudHMgb2YgZm9sbG93KGEpIHRvIGZvbGxvdyhiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIHNlbGYuRm9sbG93W3AubmFtZV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgbm90IGluIHNlbGYuRm9sbG93W0JdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5Gb2xsb3dbQl0uYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRhZGQgPSAxCisgICAgICAgICAgICBpZiBub3QgZGlkYWRkOiBicmVhaworICAgICAgICByZXR1cm4gc2VsZi5Gb2xsb3cKKworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYnVpbGRfbHJpdGVtcygpCisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiB3YWxrcyB0aGUgbGlzdCBvZiBwcm9kdWN0aW9ucyBhbmQgYnVpbGRzIGEgY29tcGxldGUgc2V0IG9mIHRoZQorICAgICMgTFIgaXRlbXMuICBUaGUgTFIgaXRlbXMgYXJlIHN0b3JlZCBpbiB0d28gd2F5czogIEZpcnN0LCB0aGV5IGFyZSB1bmlxdWVseQorICAgICMgbnVtYmVyZWQgYW5kIHBsYWNlZCBpbiB0aGUgbGlzdCBfbHJpdGVtcy4gIFNlY29uZCwgYSBsaW5rZWQgbGlzdCBvZiBMUiBpdGVtcworICAgICMgaXMgYnVpbHQgZm9yIGVhY2ggcHJvZHVjdGlvbi4gIEZvciBleGFtcGxlOgorICAgICMKKyAgICAjICAgRSAtPiBFIFBMVVMgRQorICAgICMKKyAgICAjIENyZWF0ZXMgdGhlIGxpc3QKKyAgICAjCisgICAgIyAgW0UgLT4gLiBFIFBMVVMgRSwgRSAtPiBFIC4gUExVUyBFLCBFIC0+IEUgUExVUyAuIEUsIEUgLT4gRSBQTFVTIEUgLiBdCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGJ1aWxkX2xyaXRlbXMoc2VsZik6CisgICAgICAgIGZvciBwIGluIHNlbGYuUHJvZHVjdGlvbnM6CisgICAgICAgICAgICBsYXN0bHJpID0gcAorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIGxyX2l0ZW1zID0gW10KKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgaWYgaSA+IGxlbihwKToKKyAgICAgICAgICAgICAgICAgICAgbHJpID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxyaSA9IExSSXRlbShwLGkpCisgICAgICAgICAgICAgICAgICAgICMgUHJlY29tcHV0ZSB0aGUgbGlzdCBvZiBwcm9kdWN0aW9ucyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbHJpLmxyX2FmdGVyID0gc2VsZi5Qcm9kbmFtZXNbbHJpLnByb2RbaSsxXV0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChJbmRleEVycm9yLEtleUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxyaS5scl9hZnRlciA9IFtdCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxyaS5scl9iZWZvcmUgPSBscmkucHJvZFtpLTFdCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgbHJpLmxyX2JlZm9yZSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGxhc3RscmkubHJfbmV4dCA9IGxyaQorICAgICAgICAgICAgICAgIGlmIG5vdCBscmk6IGJyZWFrCisgICAgICAgICAgICAgICAgbHJfaXRlbXMuYXBwZW5kKGxyaSkKKyAgICAgICAgICAgICAgICBsYXN0bHJpID0gbHJpCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBwLmxyX2l0ZW1zID0gbHJfaXRlbXMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBDbGFzcyBMUlRhYmxlID09CisjCisjIFRoaXMgYmFzaWMgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2ljIHRhYmxlIG9mIExSIHBhcnNpbmcgaW5mb3JtYXRpb24uICAKKyMgTWV0aG9kcyBmb3IgZ2VuZXJhdGluZyB0aGUgdGFibGVzIGFyZSBub3QgZGVmaW5lZCBoZXJlLiAgVGhleSBhcmUgZGVmaW5lZAorIyBpbiB0aGUgZGVyaXZlZCBjbGFzcyBMUkdlbmVyYXRlZFRhYmxlLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBWZXJzaW9uRXJyb3IoWWFjY0Vycm9yKTogcGFzcworCitjbGFzcyBMUlRhYmxlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmxyX2FjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5scl9nb3RvID0gTm9uZQorICAgICAgICBzZWxmLmxyX3Byb2R1Y3Rpb25zID0gTm9uZQorICAgICAgICBzZWxmLmxyX21ldGhvZCA9IE5vbmUKKworICAgIGRlZiByZWFkX3RhYmxlKHNlbGYsbW9kdWxlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBwYXJzZXRhYiA9IG1vZHVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgICAgICAgICAgZXhlYygiaW1wb3J0ICVzIGFzIHBhcnNldGFiIiAlIG1vZHVsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW52ID0geyB9CisgICAgICAgICAgICAgICAgZXhlYygiaW1wb3J0ICVzIGFzIHBhcnNldGFiIiAlIG1vZHVsZSwgZW52LCBlbnYpCisgICAgICAgICAgICAgICAgcGFyc2V0YWIgPSBlbnZbJ3BhcnNldGFiJ10KKworICAgICAgICBpZiBwYXJzZXRhYi5fdGFidmVyc2lvbiAhPSBfX3RhYnZlcnNpb25fXzoKKyAgICAgICAgICAgIHJhaXNlIFZlcnNpb25FcnJvcigieWFjYyB0YWJsZSBmaWxlIHZlcnNpb24gaXMgb3V0IG9mIGRhdGUiKQorCisgICAgICAgIHNlbGYubHJfYWN0aW9uID0gcGFyc2V0YWIuX2xyX2FjdGlvbgorICAgICAgICBzZWxmLmxyX2dvdG8gPSBwYXJzZXRhYi5fbHJfZ290bworCisgICAgICAgIHNlbGYubHJfcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBmb3IgcCBpbiBwYXJzZXRhYi5fbHJfcHJvZHVjdGlvbnM6CisgICAgICAgICAgICBzZWxmLmxyX3Byb2R1Y3Rpb25zLmFwcGVuZChNaW5pUHJvZHVjdGlvbigqcCkpCisKKyAgICAgICAgc2VsZi5scl9tZXRob2QgPSBwYXJzZXRhYi5fbHJfbWV0aG9kCisgICAgICAgIHJldHVybiBwYXJzZXRhYi5fbHJfc2lnbmF0dXJlCisKKyAgICBkZWYgcmVhZF9waWNrbGUoc2VsZixmaWxlbmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgcGlja2xlCisKKyAgICAgICAgaW5fZiA9IG9wZW4oZmlsZW5hbWUsInJiIikKKworICAgICAgICB0YWJ2ZXJzaW9uID0gcGlja2xlLmxvYWQoaW5fZikKKyAgICAgICAgaWYgdGFidmVyc2lvbiAhPSBfX3RhYnZlcnNpb25fXzoKKyAgICAgICAgICAgIHJhaXNlIFZlcnNpb25FcnJvcigieWFjYyB0YWJsZSBmaWxlIHZlcnNpb24gaXMgb3V0IG9mIGRhdGUiKQorICAgICAgICBzZWxmLmxyX21ldGhvZCA9IHBpY2tsZS5sb2FkKGluX2YpCisgICAgICAgIHNpZ25hdHVyZSAgICAgID0gcGlja2xlLmxvYWQoaW5fZikKKyAgICAgICAgc2VsZi5scl9hY3Rpb24gPSBwaWNrbGUubG9hZChpbl9mKQorICAgICAgICBzZWxmLmxyX2dvdG8gICA9IHBpY2tsZS5sb2FkKGluX2YpCisgICAgICAgIHByb2R1Y3Rpb25zICAgID0gcGlja2xlLmxvYWQoaW5fZikKKworICAgICAgICBzZWxmLmxyX3Byb2R1Y3Rpb25zID0gW10KKyAgICAgICAgZm9yIHAgaW4gcHJvZHVjdGlvbnM6CisgICAgICAgICAgICBzZWxmLmxyX3Byb2R1Y3Rpb25zLmFwcGVuZChNaW5pUHJvZHVjdGlvbigqcCkpCisKKyAgICAgICAgaW5fZi5jbG9zZSgpCisgICAgICAgIHJldHVybiBzaWduYXR1cmUKKworICAgICMgQmluZCBhbGwgcHJvZHVjdGlvbiBmdW5jdGlvbiBuYW1lcyB0byBjYWxsYWJsZSBvYmplY3RzIGluIHBkaWN0CisgICAgZGVmIGJpbmRfY2FsbGFibGVzKHNlbGYscGRpY3QpOgorICAgICAgICBmb3IgcCBpbiBzZWxmLmxyX3Byb2R1Y3Rpb25zOgorICAgICAgICAgICAgcC5iaW5kKHBkaWN0KQorICAgIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBMUiBHZW5lcmF0b3IgPT09CisjCisjIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdlbmVyYXRlIExSIHBhcnNpbmcgdGFibGVzIG9uIAorIyBhIGdyYW1tYXIuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZGlncmFwaCgpCisjIHRyYXZlcnNlKCkKKyMKKyMgVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNvbXB1dGUgc2V0IHZhbHVlZCBmdW5jdGlvbnMKKyMgb2YgdGhlIGZvcm06CisjCisjICAgICBGKHgpID0gRicoeCkgVSBVe0YoeSkgfCB4IFIgeX0KKyMKKyMgVGhpcyBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIHZhbHVlcyBvZiBSZWFkKCkgc2V0cyBhcyB3ZWxsIGFzIEZPTExPVyBzZXRzCisjIGluIExBTFIoMSkgZ2VuZXJhdGlvbi4KKyMKKyMgSW5wdXRzOiAgWCAgICAtIEFuIGlucHV0IHNldAorIyAgICAgICAgICBSICAgIC0gQSByZWxhdGlvbgorIyAgICAgICAgICBGUCAgIC0gU2V0LXZhbHVlZCBmdW5jdGlvbgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGRpZ3JhcGgoWCxSLEZQKToKKyAgICBOID0geyB9CisgICAgZm9yIHggaW4gWDoKKyAgICAgICBOW3hdID0gMAorICAgIHN0YWNrID0gW10KKyAgICBGID0geyB9CisgICAgZm9yIHggaW4gWDoKKyAgICAgICAgaWYgTlt4XSA9PSAwOiB0cmF2ZXJzZSh4LE4sc3RhY2ssRixYLFIsRlApCisgICAgcmV0dXJuIEYKKworZGVmIHRyYXZlcnNlKHgsTixzdGFjayxGLFgsUixGUCk6CisgICAgc3RhY2suYXBwZW5kKHgpCisgICAgZCA9IGxlbihzdGFjaykKKyAgICBOW3hdID0gZAorICAgIEZbeF0gPSBGUCh4KSAgICAgICAgICAgICAjIEYoWCkgPC0gRicoeCkKKworICAgIHJlbCA9IFIoeCkgICAgICAgICAgICAgICAjIEdldCB5J3MgcmVsYXRlZCB0byB4CisgICAgZm9yIHkgaW4gcmVsOgorICAgICAgICBpZiBOW3ldID09IDA6CisgICAgICAgICAgICAgdHJhdmVyc2UoeSxOLHN0YWNrLEYsWCxSLEZQKQorICAgICAgICBOW3hdID0gbWluKE5beF0sTlt5XSkKKyAgICAgICAgZm9yIGEgaW4gRi5nZXQoeSxbXSk6CisgICAgICAgICAgICBpZiBhIG5vdCBpbiBGW3hdOiBGW3hdLmFwcGVuZChhKQorICAgIGlmIE5beF0gPT0gZDoKKyAgICAgICBOW3N0YWNrWy0xXV0gPSBNQVhJTlQKKyAgICAgICBGW3N0YWNrWy0xXV0gPSBGW3hdCisgICAgICAgZWxlbWVudCA9IHN0YWNrLnBvcCgpCisgICAgICAgd2hpbGUgZWxlbWVudCAhPSB4OgorICAgICAgICAgICBOW3N0YWNrWy0xXV0gPSBNQVhJTlQKKyAgICAgICAgICAgRltzdGFja1stMV1dID0gRlt4XQorICAgICAgICAgICBlbGVtZW50ID0gc3RhY2sucG9wKCkKKworY2xhc3MgTEFMUkVycm9yKFlhY2NFcnJvcik6IHBhc3MKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTFJHZW5lcmF0ZWRUYWJsZSA9PQorIworIyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIExSIHRhYmxlIGdlbmVyYXRpb24gYWxnb3JpdGhtLiAgVGhlcmUgYXJlIG5vCisjIHB1YmxpYyBtZXRob2RzIGV4Y2VwdCBmb3Igd3JpdGUoKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBMUkdlbmVyYXRlZFRhYmxlKExSVGFibGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGdyYW1tYXIsbWV0aG9kPSdMQUxSJyxsb2c9Tm9uZSk6CisgICAgICAgIGlmIG1ldGhvZCBub3QgaW4gWydTTFInLCdMQUxSJ106CisgICAgICAgICAgICByYWlzZSBMQUxSRXJyb3IoIlVuc3VwcG9ydGVkIG1ldGhvZCAlcyIgJSBtZXRob2QpCisKKyAgICAgICAgc2VsZi5ncmFtbWFyID0gZ3JhbW1hcgorICAgICAgICBzZWxmLmxyX21ldGhvZCA9IG1ldGhvZAorCisgICAgICAgICMgU2V0IHVwIHRoZSBsb2dnZXIKKyAgICAgICAgaWYgbm90IGxvZzoKKyAgICAgICAgICAgIGxvZyA9IE51bGxMb2dnZXIoKQorICAgICAgICBzZWxmLmxvZyA9IGxvZworCisgICAgICAgICMgSW50ZXJuYWwgYXR0cmlidXRlcworICAgICAgICBzZWxmLmxyX2FjdGlvbiAgICAgPSB7fSAgICAgICAgIyBBY3Rpb24gdGFibGUKKyAgICAgICAgc2VsZi5scl9nb3RvICAgICAgID0ge30gICAgICAgICMgR290byB0YWJsZQorICAgICAgICBzZWxmLmxyX3Byb2R1Y3Rpb25zICA9IGdyYW1tYXIuUHJvZHVjdGlvbnMgICAgIyBDb3B5IG9mIGdyYW1tYXIgUHJvZHVjdGlvbiBhcnJheQorICAgICAgICBzZWxmLmxyX2dvdG9fY2FjaGUgPSB7fSAgICAgICAgIyBDYWNoZSBvZiBjb21wdXRlZCBnb3RvcworICAgICAgICBzZWxmLmxyMF9jaWRoYXNoICAgPSB7fSAgICAgICAgIyBDYWNoZSBvZiBjbG9zdXJlcworCisgICAgICAgIHNlbGYuX2FkZF9jb3VudCAgICA9IDAgICAgICAgICAjIEludGVybmFsIGNvdW50ZXIgdXNlZCB0byBkZXRlY3QgY3ljbGVzCisKKyAgICAgICAgIyBEaWFnb25pc3RpYyBpbmZvcm1hdGlvbiBmaWxsZWQgaW4gYnkgdGhlIHRhYmxlIGdlbmVyYXRvcgorICAgICAgICBzZWxmLnNyX2NvbmZsaWN0ICAgPSAwCisgICAgICAgIHNlbGYucnJfY29uZmxpY3QgICA9IDAKKyAgICAgICAgc2VsZi5jb25mbGljdHMgICAgID0gW10gICAgICAgICMgTGlzdCBvZiBjb25mbGljdHMKKworICAgICAgICBzZWxmLnNyX2NvbmZsaWN0cyAgPSBbXQorICAgICAgICBzZWxmLnJyX2NvbmZsaWN0cyAgPSBbXQorCisgICAgICAgICMgQnVpbGQgdGhlIHRhYmxlcworICAgICAgICBzZWxmLmdyYW1tYXIuYnVpbGRfbHJpdGVtcygpCisgICAgICAgIHNlbGYuZ3JhbW1hci5jb21wdXRlX2ZpcnN0KCkKKyAgICAgICAgc2VsZi5ncmFtbWFyLmNvbXB1dGVfZm9sbG93KCkKKyAgICAgICAgc2VsZi5scl9wYXJzZV90YWJsZSgpCisKKyAgICAjIENvbXB1dGUgdGhlIExSKDApIGNsb3N1cmUgb3BlcmF0aW9uIG9uIEksIHdoZXJlIEkgaXMgYSBzZXQgb2YgTFIoMCkgaXRlbXMuCisKKyAgICBkZWYgbHIwX2Nsb3N1cmUoc2VsZixJKToKKyAgICAgICAgc2VsZi5fYWRkX2NvdW50ICs9IDEKKworICAgICAgICAjIEFkZCBldmVyeXRoaW5nIGluIEkgdG8gSgorICAgICAgICBKID0gSVs6XQorICAgICAgICBkaWRhZGQgPSAxCisgICAgICAgIHdoaWxlIGRpZGFkZDoKKyAgICAgICAgICAgIGRpZGFkZCA9IDAKKyAgICAgICAgICAgIGZvciBqIGluIEo6CisgICAgICAgICAgICAgICAgZm9yIHggaW4gai5scl9hZnRlcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cih4LCJscjBfYWRkZWQiLDApID09IHNlbGYuX2FkZF9jb3VudDogY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBBZGQgQiAtLT4gLkcgdG8gSgorICAgICAgICAgICAgICAgICAgICBKLmFwcGVuZCh4LmxyX25leHQpCisgICAgICAgICAgICAgICAgICAgIHgubHIwX2FkZGVkID0gc2VsZi5fYWRkX2NvdW50CisgICAgICAgICAgICAgICAgICAgIGRpZGFkZCA9IDEKKworICAgICAgICByZXR1cm4gSgorCisgICAgIyBDb21wdXRlIHRoZSBMUigwKSBnb3RvIGZ1bmN0aW9uIGdvdG8oSSxYKSB3aGVyZSBJIGlzIGEgc2V0CisgICAgIyBvZiBMUigwKSBpdGVtcyBhbmQgWCBpcyBhIGdyYW1tYXIgc3ltYm9sLiAgIFRoaXMgZnVuY3Rpb24gaXMgd3JpdHRlbgorICAgICMgaW4gYSB3YXkgdGhhdCBndWFyYW50ZWVzIHVuaXF1ZW5lc3Mgb2YgdGhlIGdlbmVyYXRlZCBnb3RvIHNldHMKKyAgICAjIChpLmUuIHRoZSBzYW1lIGdvdG8gc2V0IHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgYXMgdHdvIGRpZmZlcmVudCBQeXRob24KKyAgICAjIG9iamVjdHMpLiAgV2l0aCB1bmlxdWVuZXNzLCB3ZSBjYW4gbGF0ZXIgZG8gZmFzdCBzZXQgY29tcGFyaXNvbnMgdXNpbmcKKyAgICAjIGlkKG9iaikgaW5zdGVhZCBvZiBlbGVtZW50LXdpc2UgY29tcGFyaXNvbi4KKworICAgIGRlZiBscjBfZ290byhzZWxmLEkseCk6CisgICAgICAgICMgRmlyc3Qgd2UgbG9vayBmb3IgYSBwcmV2aW91c2x5IGNhY2hlZCBlbnRyeQorICAgICAgICBnID0gc2VsZi5scl9nb3RvX2NhY2hlLmdldCgoaWQoSSkseCksTm9uZSkKKyAgICAgICAgaWYgZzogcmV0dXJuIGcKKworICAgICAgICAjIE5vdyB3ZSBnZW5lcmF0ZSB0aGUgZ290byBzZXQgaW4gYSB3YXkgdGhhdCBndWFyYW50ZWVzIHVuaXF1ZW5lc3MKKyAgICAgICAgIyBvZiB0aGUgcmVzdWx0CisKKyAgICAgICAgcyA9IHNlbGYubHJfZ290b19jYWNoZS5nZXQoeCxOb25lKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHMgPSB7IH0KKyAgICAgICAgICAgIHNlbGYubHJfZ290b19jYWNoZVt4XSA9IHMKKworICAgICAgICBncyA9IFsgXQorICAgICAgICBmb3IgcCBpbiBJOgorICAgICAgICAgICAgbiA9IHAubHJfbmV4dAorICAgICAgICAgICAgaWYgbiBhbmQgbi5scl9iZWZvcmUgPT0geDoKKyAgICAgICAgICAgICAgICBzMSA9IHMuZ2V0KGlkKG4pLE5vbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IHMxOgorICAgICAgICAgICAgICAgICAgICBzMSA9IHsgfQorICAgICAgICAgICAgICAgICAgICBzW2lkKG4pXSA9IHMxCisgICAgICAgICAgICAgICAgZ3MuYXBwZW5kKG4pCisgICAgICAgICAgICAgICAgcyA9IHMxCisgICAgICAgIGcgPSBzLmdldCgnJGVuZCcsTm9uZSkKKyAgICAgICAgaWYgbm90IGc6CisgICAgICAgICAgICBpZiBnczoKKyAgICAgICAgICAgICAgICBnID0gc2VsZi5scjBfY2xvc3VyZShncykKKyAgICAgICAgICAgICAgICBzWyckZW5kJ10gPSBnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNbJyRlbmQnXSA9IGdzCisgICAgICAgIHNlbGYubHJfZ290b19jYWNoZVsoaWQoSSkseCldID0gZworICAgICAgICByZXR1cm4gZworCisgICAgIyBDb21wdXRlIHRoZSBMUigwKSBzZXRzIG9mIGl0ZW0gZnVuY3Rpb24KKyAgICBkZWYgbHIwX2l0ZW1zKHNlbGYpOgorCisgICAgICAgIEMgPSBbIHNlbGYubHIwX2Nsb3N1cmUoW3NlbGYuZ3JhbW1hci5Qcm9kdWN0aW9uc1swXS5scl9uZXh0XSkgXQorICAgICAgICBpID0gMAorICAgICAgICBmb3IgSSBpbiBDOgorICAgICAgICAgICAgc2VsZi5scjBfY2lkaGFzaFtpZChJKV0gPSBpCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAjIExvb3Agb3ZlciB0aGUgaXRlbXMgaW4gQyBhbmQgZWFjaCBncmFtbWFyIHN5bWJvbHMKKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgaSA8IGxlbihDKToKKyAgICAgICAgICAgIEkgPSBDW2ldCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAgICAgIyBDb2xsZWN0IGFsbCBvZiB0aGUgc3ltYm9scyB0aGF0IGNvdWxkIHBvc3NpYmx5IGJlIGluIHRoZSBnb3RvKEksWCkgc2V0cworICAgICAgICAgICAgYXN5bXMgPSB7IH0KKyAgICAgICAgICAgIGZvciBpaSBpbiBJOgorICAgICAgICAgICAgICAgIGZvciBzIGluIGlpLnVzeW1zOgorICAgICAgICAgICAgICAgICAgICBhc3ltc1tzXSA9IE5vbmUKKworICAgICAgICAgICAgZm9yIHggaW4gYXN5bXM6CisgICAgICAgICAgICAgICAgZyA9IHNlbGYubHIwX2dvdG8oSSx4KQorICAgICAgICAgICAgICAgIGlmIG5vdCBnOiAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBpZChnKSBpbiBzZWxmLmxyMF9jaWRoYXNoOiBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYubHIwX2NpZGhhc2hbaWQoZyldID0gbGVuKEMpCisgICAgICAgICAgICAgICAgQy5hcHBlbmQoZykKKworICAgICAgICByZXR1cm4gQworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgICAgICAgICAgICAgICAgICAgICAgID09PT0gTEFMUigxKSBQYXJzaW5nID09PT0KKyAgICAjCisgICAgIyBMQUxSKDEpIHBhcnNpbmcgaXMgYWxtb3N0IGV4YWN0bHkgdGhlIHNhbWUgYXMgU0xSIGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YKKyAgICAjIHJlbHlpbmcgdXBvbiBGb2xsb3coKSBzZXRzIHdoZW4gcGVyZm9ybWluZyByZWR1Y3Rpb25zLCBhIG1vcmUgc2VsZWN0aXZlCisgICAgIyBsb29rYWhlYWQgc2V0IHRoYXQgaW5jb3Jwb3JhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgTFIoMCkgbWFjaGluZSBpcyB1dGlsaXplZC4KKyAgICAjIFRodXMsIHdlIG1haW5seSBqdXN0IGhhdmUgdG8gZm9jdXMgb24gY2FsY3VsYXRpbmcgdGhlIGxvb2thaGVhZCBzZXRzLgorICAgICMKKyAgICAjIFRoZSBtZXRob2QgdXNlZCBoZXJlIGlzIGR1ZSB0byBEZVJlbWVyIGFuZCBQZW5uZWxvICgxOTgyKS4KKyAgICAjCisgICAgIyBEZVJlbWVyLCBGLiBMLiwgYW5kIFQuIEouIFBlbm5lbG86ICJFZmZpY2llbnQgQ29tcHV0YXRpb24gb2YgTEFMUigxKQorICAgICMgICAgIExvb2thaGVhZCBTZXRzIiwgQUNNIFRyYW5zYWN0aW9ucyBvbiBQcm9ncmFtbWluZyBMYW5ndWFnZXMgYW5kIFN5c3RlbXMsCisgICAgIyAgICAgVm9sLiA0LCBOby4gNCwgT2N0LiAxOTgyLCBwcC4gNjE1LTY0OQorICAgICMKKyAgICAjIEZ1cnRoZXIgZGV0YWlscyBjYW4gYWxzbyBiZSBmb3VuZCBpbjoKKyAgICAjCisgICAgIyAgSi4gVHJlbWJsYXkgYW5kIFAuIFNvcmVuc29uLCAiVGhlIFRoZW9yeSBhbmQgUHJhY3RpY2Ugb2YgQ29tcGlsZXIgV3JpdGluZyIsCisgICAgIyAgICAgIE1jR3Jhdy1IaWxsIEJvb2sgQ29tcGFueSwgKDE5ODUpLgorICAgICMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX251bGxhYmxlX25vbnRlcm1pbmFscygpCisgICAgIworICAgICMgQ3JlYXRlcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgb2YgdGhlIG5vbi10ZXJtaW5hbHMgdGhhdCBtaWdodCBwcm9kdWNlCisgICAgIyBhbiBlbXB0eSBwcm9kdWN0aW9uLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBjb21wdXRlX251bGxhYmxlX25vbnRlcm1pbmFscyhzZWxmKToKKyAgICAgICAgbnVsbGFibGUgPSB7fQorICAgICAgICBudW1fbnVsbGFibGUgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgIGZvciBwIGluIHNlbGYuZ3JhbW1hci5Qcm9kdWN0aW9uc1sxOl06CisgICAgICAgICAgICAgICBpZiBwLmxlbiA9PSAwOgorICAgICAgICAgICAgICAgICAgICBudWxsYWJsZVtwLm5hbWVdID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgZm9yIHQgaW4gcC5wcm9kOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdCBpbiBudWxsYWJsZTogYnJlYWsKKyAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlW3AubmFtZV0gPSAxCisgICAgICAgICAgIGlmIGxlbihudWxsYWJsZSkgPT0gbnVtX251bGxhYmxlOiBicmVhaworICAgICAgICAgICBudW1fbnVsbGFibGUgPSBsZW4obnVsbGFibGUpCisgICAgICAgIHJldHVybiBudWxsYWJsZQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgZmluZF9ub250ZXJtaW5hbF90cmFucyhDKQorICAgICMKKyAgICAjIEdpdmVuIGEgc2V0IG9mIExSKDApIGl0ZW1zLCB0aGlzIGZ1bmN0aW9ucyBmaW5kcyBhbGwgb2YgdGhlIG5vbi10ZXJtaW5hbAorICAgICMgdHJhbnNpdGlvbnMuICAgIFRoZXNlIGFyZSB0cmFuc2l0aW9ucyBpbiB3aGljaCBhIGRvdCBhcHBlYXJzIGltbWVkaWF0ZWx5IGJlZm9yZQorICAgICMgYSBub24tdGVybWluYWwuICAgUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIG9mIHRoZSBmb3JtIChzdGF0ZSxOKSB3aGVyZSBzdGF0ZQorICAgICMgaXMgdGhlIHN0YXRlIG51bWJlciBhbmQgTiBpcyB0aGUgbm9udGVybWluYWwgc3ltYm9sLgorICAgICMKKyAgICAjIFRoZSBpbnB1dCBDIGlzIHRoZSBzZXQgb2YgTFIoMCkgaXRlbXMuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGZpbmRfbm9udGVybWluYWxfdHJhbnNpdGlvbnMoc2VsZixDKToKKyAgICAgICAgIHRyYW5zID0gW10KKyAgICAgICAgIGZvciBzdGF0ZSBpbiByYW5nZShsZW4oQykpOgorICAgICAgICAgICAgIGZvciBwIGluIENbc3RhdGVdOgorICAgICAgICAgICAgICAgICBpZiBwLmxyX2luZGV4IDwgcC5sZW4gLSAxOgorICAgICAgICAgICAgICAgICAgICAgIHQgPSAoc3RhdGUscC5wcm9kW3AubHJfaW5kZXgrMV0pCisgICAgICAgICAgICAgICAgICAgICAgaWYgdFsxXSBpbiBzZWxmLmdyYW1tYXIuTm9udGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHQgbm90IGluIHRyYW5zOiB0cmFucy5hcHBlbmQodCkKKyAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlICsgMQorICAgICAgICAgcmV0dXJuIHRyYW5zCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBkcl9yZWxhdGlvbigpCisgICAgIworICAgICMgQ29tcHV0ZXMgdGhlIERSKHAsQSkgcmVsYXRpb25zaGlwcyBmb3Igbm9uLXRlcm1pbmFsIHRyYW5zaXRpb25zLiAgVGhlIGlucHV0CisgICAgIyBpcyBhIHR1cGxlIChzdGF0ZSxOKSB3aGVyZSBzdGF0ZSBpcyBhIG51bWJlciBhbmQgTiBpcyBhIG5vbnRlcm1pbmFsIHN5bWJvbC4KKyAgICAjCisgICAgIyBSZXR1cm5zIGEgbGlzdCBvZiB0ZXJtaW5hbHMuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGRyX3JlbGF0aW9uKHNlbGYsQyx0cmFucyxudWxsYWJsZSk6CisgICAgICAgIGRyX3NldCA9IHsgfQorICAgICAgICBzdGF0ZSxOID0gdHJhbnMKKyAgICAgICAgdGVybXMgPSBbXQorCisgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKENbc3RhdGVdLE4pCisgICAgICAgIGZvciBwIGluIGc6CisgICAgICAgICAgIGlmIHAubHJfaW5kZXggPCBwLmxlbiAtIDE6CisgICAgICAgICAgICAgICBhID0gcC5wcm9kW3AubHJfaW5kZXgrMV0KKyAgICAgICAgICAgICAgIGlmIGEgaW4gc2VsZi5ncmFtbWFyLlRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICBpZiBhIG5vdCBpbiB0ZXJtczogdGVybXMuYXBwZW5kKGEpCisKKyAgICAgICAgIyBUaGlzIGV4dHJhIGJpdCBpcyB0byBoYW5kbGUgdGhlIHN0YXJ0IHN0YXRlCisgICAgICAgIGlmIHN0YXRlID09IDAgYW5kIE4gPT0gc2VsZi5ncmFtbWFyLlByb2R1Y3Rpb25zWzBdLnByb2RbMF06CisgICAgICAgICAgIHRlcm1zLmFwcGVuZCgnJGVuZCcpCisKKyAgICAgICAgcmV0dXJuIHRlcm1zCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyByZWFkc19yZWxhdGlvbigpCisgICAgIworICAgICMgQ29tcHV0ZXMgdGhlIFJFQURTKCkgcmVsYXRpb24gKHAsQSkgUkVBRFMgKHQsQykuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHJlYWRzX3JlbGF0aW9uKHNlbGYsQywgdHJhbnMsIGVtcHR5KToKKyAgICAgICAgIyBMb29rIGZvciBlbXB0eSB0cmFuc2l0aW9ucworICAgICAgICByZWwgPSBbXQorICAgICAgICBzdGF0ZSwgTiA9IHRyYW5zCisKKyAgICAgICAgZyA9IHNlbGYubHIwX2dvdG8oQ1tzdGF0ZV0sTikKKyAgICAgICAgaiA9IHNlbGYubHIwX2NpZGhhc2guZ2V0KGlkKGcpLC0xKQorICAgICAgICBmb3IgcCBpbiBnOgorICAgICAgICAgICAgaWYgcC5scl9pbmRleCA8IHAubGVuIC0gMToKKyAgICAgICAgICAgICAgICAgYSA9IHAucHJvZFtwLmxyX2luZGV4ICsgMV0KKyAgICAgICAgICAgICAgICAgaWYgYSBpbiBlbXB0eToKKyAgICAgICAgICAgICAgICAgICAgICByZWwuYXBwZW5kKChqLGEpKQorCisgICAgICAgIHJldHVybiByZWwKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNvbXB1dGVfbG9va2JhY2tfaW5jbHVkZXMoKQorICAgICMKKyAgICAjIERldGVybWluZXMgdGhlIGxvb2tiYWNrIGFuZCBpbmNsdWRlcyByZWxhdGlvbnMKKyAgICAjCisgICAgIyBMT09LQkFDSzoKKyAgICAjCisgICAgIyBUaGlzIHJlbGF0aW9uIGlzIGRldGVybWluZWQgYnkgcnVubmluZyB0aGUgTFIoMCkgc3RhdGUgbWFjaGluZSBmb3J3YXJkLgorICAgICMgRm9yIGV4YW1wbGUsIHN0YXJ0aW5nIHdpdGggYSBwcm9kdWN0aW9uICJOIDogLiBBIEIgQyIsIHdlIHJ1biBpdCBmb3J3YXJkCisgICAgIyB0byBvYnRhaW4gIk4gOiBBIEIgQyAuIiAgIFdlIHRoZW4gYnVpbGQgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZpbmFsCisgICAgIyBzdGF0ZSBhbmQgdGhlIHN0YXJ0aW5nIHN0YXRlLiAgIFRoZXNlIHJlbGF0aW9uc2hpcHMgYXJlIHN0b3JlZCBpbiBhIGRpY3Rpb25hcnkKKyAgICAjIGxvb2tkaWN0LgorICAgICMKKyAgICAjIElOQ0xVREVTOgorICAgICMKKyAgICAjIENvbXB1dGVzIHRoZSBJTkNMVURFKCkgcmVsYXRpb24gKHAsQSkgSU5DTFVERVMgKHAnLEIpLgorICAgICMKKyAgICAjIFRoaXMgcmVsYXRpb24gaXMgdXNlZCB0byBkZXRlcm1pbmUgbm9uLXRlcm1pbmFsIHRyYW5zaXRpb25zIHRoYXQgb2NjdXIKKyAgICAjIGluc2lkZSBvZiBvdGhlciBub24tdGVybWluYWwgdHJhbnNpdGlvbiBzdGF0ZXMuICAgKHAsQSkgSU5DTFVERVMgKHAnLCBCKQorICAgICMgaWYgdGhlIGZvbGxvd2luZyBob2xkczoKKyAgICAjCisgICAgIyAgICAgICBCIC0+IExBVCwgd2hlcmUgVCAtPiBlcHNpbG9uIGFuZCBwJyAtTC0+IHAKKyAgICAjCisgICAgIyBMIGlzIGVzc2VudGlhbGx5IGEgcHJlZml4ICh3aGljaCBtYXkgYmUgZW1wdHkpLCBUIGlzIGEgc3VmZml4IHRoYXQgbXVzdCBiZQorICAgICMgYWJsZSB0byBkZXJpdmUgYW4gZW1wdHkgc3RyaW5nLiAgU3RhdGUgcCcgbXVzdCBsZWFkIHRvIHN0YXRlIHAgd2l0aCB0aGUgc3RyaW5nIEwuCisgICAgIworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBjb21wdXRlX2xvb2tiYWNrX2luY2x1ZGVzKHNlbGYsQyx0cmFucyxudWxsYWJsZSk6CisKKyAgICAgICAgbG9va2RpY3QgPSB7fSAgICAgICAgICAjIERpY3Rpb25hcnkgb2YgbG9va2JhY2sgcmVsYXRpb25zCisgICAgICAgIGluY2x1ZGVkaWN0ID0ge30gICAgICAgIyBEaWN0aW9uYXJ5IG9mIGluY2x1ZGUgcmVsYXRpb25zCisKKyAgICAgICAgIyBNYWtlIGEgZGljdGlvbmFyeSBvZiBub24tdGVybWluYWwgdHJhbnNpdGlvbnMKKyAgICAgICAgZHRyYW5zID0ge30KKyAgICAgICAgZm9yIHQgaW4gdHJhbnM6CisgICAgICAgICAgICBkdHJhbnNbdF0gPSAxCisKKyAgICAgICAgIyBMb29wIG92ZXIgYWxsIHRyYW5zaXRpb25zIGFuZCBjb21wdXRlIGxvb2tiYWNrcyBhbmQgaW5jbHVkZXMKKyAgICAgICAgZm9yIHN0YXRlLE4gaW4gdHJhbnM6CisgICAgICAgICAgICBsb29rYiA9IFtdCisgICAgICAgICAgICBpbmNsdWRlcyA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBDW3N0YXRlXToKKyAgICAgICAgICAgICAgICBpZiBwLm5hbWUgIT0gTjogY29udGludWUKKworICAgICAgICAgICAgICAgICMgT2theSwgd2UgaGF2ZSBhIG5hbWUgbWF0Y2guICBXZSBub3cgZm9sbG93IHRoZSBwcm9kdWN0aW9uIGFsbCB0aGUgd2F5CisgICAgICAgICAgICAgICAgIyB0aHJvdWdoIHRoZSBzdGF0ZSBtYWNoaW5lIHVudGlsIHdlIGdldCB0aGUgLiBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlCisKKyAgICAgICAgICAgICAgICBscl9pbmRleCA9IHAubHJfaW5kZXgKKyAgICAgICAgICAgICAgICBqID0gc3RhdGUKKyAgICAgICAgICAgICAgICB3aGlsZSBscl9pbmRleCA8IHAubGVuIC0gMToKKyAgICAgICAgICAgICAgICAgICAgIGxyX2luZGV4ID0gbHJfaW5kZXggKyAxCisgICAgICAgICAgICAgICAgICAgICB0ID0gcC5wcm9kW2xyX2luZGV4XQorCisgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGlzIHN5bWJvbCBhbmQgc3RhdGUgYXJlIGEgbm9uLXRlcm1pbmFsIHRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgIGlmIChqLHQpIGluIGR0cmFuczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWWVzLiAgT2theSwgdGhlcmUgaXMgc29tZSBjaGFuY2UgdGhhdCB0aGlzIGlzIGFuIGluY2x1ZGVzIHJlbGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBvbmx5IHdheSB0byBrbm93IGZvciBjZXJ0YWluIGlzIHdoZXRoZXIgdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByb2R1Y3Rpb24gZGVyaXZlcyBlbXB0eQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaSA9IGxyX2luZGV4ICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGkgPCBwLmxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcC5wcm9kW2xpXSBpbiBzZWxmLmdyYW1tYXIuVGVybWluYWxzOiBicmVhayAgICAgICMgTm8gZm9yZ2V0IGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwLnByb2RbbGldIGluIG51bGxhYmxlOiBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaSA9IGxpICsgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBcHBlYXJzIHRvIGJlIGEgcmVsYXRpb24gYmV0d2VlbiAoaix0KSBhbmQgKHN0YXRlLE4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFwcGVuZCgoaix0KSkKKworICAgICAgICAgICAgICAgICAgICAgZyA9IHNlbGYubHIwX2dvdG8oQ1tqXSx0KSAgICAgICAgICAgICAgICMgR28gdG8gbmV4dCBzZXQKKyAgICAgICAgICAgICAgICAgICAgIGogPSBzZWxmLmxyMF9jaWRoYXNoLmdldChpZChnKSwtMSkgICAgICMgR28gdG8gbmV4dCBzdGF0ZQorCisgICAgICAgICAgICAgICAgIyBXaGVuIHdlIGdldCBoZXJlLCBqIGlzIHRoZSBmaW5hbCBzdGF0ZSwgbm93IHdlIGhhdmUgdG8gbG9jYXRlIHRoZSBwcm9kdWN0aW9uCisgICAgICAgICAgICAgICAgZm9yIHIgaW4gQ1tqXToKKyAgICAgICAgICAgICAgICAgICAgIGlmIHIubmFtZSAhPSBwLm5hbWU6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBpZiByLmxlbiAhPSBwLmxlbjogICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBsb29rIGlzIGNvbXBhcmluZyBhIHByb2R1Y3Rpb24gIi4gQSBCIEMiIHdpdGggIkEgQiBDIC4iCisgICAgICAgICAgICAgICAgICAgICB3aGlsZSBpIDwgci5scl9pbmRleDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgci5wcm9kW2ldICE9IHAucHJvZFtpKzFdOiBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tiLmFwcGVuZCgoaixyKSkKKyAgICAgICAgICAgIGZvciBpIGluIGluY2x1ZGVzOgorICAgICAgICAgICAgICAgICBpZiBub3QgaSBpbiBpbmNsdWRlZGljdDogaW5jbHVkZWRpY3RbaV0gPSBbXQorICAgICAgICAgICAgICAgICBpbmNsdWRlZGljdFtpXS5hcHBlbmQoKHN0YXRlLE4pKQorICAgICAgICAgICAgbG9va2RpY3RbKHN0YXRlLE4pXSA9IGxvb2tiCisKKyAgICAgICAgcmV0dXJuIGxvb2tkaWN0LGluY2x1ZGVkaWN0CisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX3JlYWRfc2V0cygpCisgICAgIworICAgICMgR2l2ZW4gYSBzZXQgb2YgTFIoMCkgaXRlbXMsIHRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIHJlYWQgc2V0cy4KKyAgICAjCisgICAgIyBJbnB1dHM6ICBDICAgICAgICA9ICBTZXQgb2YgTFIoMCkgaXRlbXMKKyAgICAjICAgICAgICAgIG50cmFucyAgID0gU2V0IG9mIG5vbnRlcm1pbmFsIHRyYW5zaXRpb25zCisgICAgIyAgICAgICAgICBudWxsYWJsZSA9IFNldCBvZiBlbXB0eSB0cmFuc2l0aW9ucworICAgICMKKyAgICAjIFJldHVybnMgYSBzZXQgY29udGFpbmluZyB0aGUgcmVhZCBzZXRzCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGNvbXB1dGVfcmVhZF9zZXRzKHNlbGYsQywgbnRyYW5zLCBudWxsYWJsZSk6CisgICAgICAgIEZQID0gbGFtYmRhIHg6IHNlbGYuZHJfcmVsYXRpb24oQyx4LG51bGxhYmxlKQorICAgICAgICBSID0gIGxhbWJkYSB4OiBzZWxmLnJlYWRzX3JlbGF0aW9uKEMseCxudWxsYWJsZSkKKyAgICAgICAgRiA9IGRpZ3JhcGgobnRyYW5zLFIsRlApCisgICAgICAgIHJldHVybiBGCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX2ZvbGxvd19zZXRzKCkKKyAgICAjCisgICAgIyBHaXZlbiBhIHNldCBvZiBMUigwKSBpdGVtcywgYSBzZXQgb2Ygbm9uLXRlcm1pbmFsIHRyYW5zaXRpb25zLCBhIHJlYWRzZXQsCisgICAgIyBhbmQgYW4gaW5jbHVkZSBzZXQsIHRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIGZvbGxvdyBzZXRzCisgICAgIworICAgICMgRm9sbG93KHAsQSkgPSBSZWFkKHAsQSkgVSBVIHtGb2xsb3cocCcsQikgfCAocCxBKSBJTkNMVURFUyAocCcsQil9CisgICAgIworICAgICMgSW5wdXRzOgorICAgICMgICAgICAgICAgICBudHJhbnMgICAgID0gU2V0IG9mIG5vbnRlcm1pbmFsIHRyYW5zaXRpb25zCisgICAgIyAgICAgICAgICAgIHJlYWRzZXRzICAgPSBSZWFkc2V0IChwcmV2aW91c2x5IGNvbXB1dGVkKQorICAgICMgICAgICAgICAgICBpbmNsc2V0cyAgID0gSW5jbHVkZSBzZXRzIChwcmV2aW91c2x5IGNvbXB1dGVkKQorICAgICMKKyAgICAjIFJldHVybnMgYSBzZXQgY29udGFpbmluZyB0aGUgZm9sbG93IHNldHMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgY29tcHV0ZV9mb2xsb3dfc2V0cyhzZWxmLG50cmFucyxyZWFkc2V0cyxpbmNsc2V0cyk6CisgICAgICAgICBGUCA9IGxhbWJkYSB4OiByZWFkc2V0c1t4XQorICAgICAgICAgUiAgPSBsYW1iZGEgeDogaW5jbHNldHMuZ2V0KHgsW10pCisgICAgICAgICBGID0gZGlncmFwaChudHJhbnMsUixGUCkKKyAgICAgICAgIHJldHVybiBGCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBhZGRfbG9va2FoZWFkcygpCisgICAgIworICAgICMgQXR0YWNoZXMgdGhlIGxvb2thaGVhZCBzeW1ib2xzIHRvIGdyYW1tYXIgcnVsZXMuCisgICAgIworICAgICMgSW5wdXRzOiAgICBsb29rYmFja3MgICAgICAgICAtICBTZXQgb2YgbG9va2JhY2sgcmVsYXRpb25zCisgICAgIyAgICAgICAgICAgIGZvbGxvd3NldCAgICAgICAgIC0gIENvbXB1dGVkIGZvbGxvdyBzZXQKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGF0dGFjaGVzIHRoZSBsb29rYWhlYWRzIHRvIHByb2R1Y3Rpb25zIGNvbnRhaW5lZAorICAgICMgaW4gdGhlIGxvb2tiYWNrcyBzZXQKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgYWRkX2xvb2thaGVhZHMoc2VsZixsb29rYmFja3MsZm9sbG93c2V0KToKKyAgICAgICAgZm9yIHRyYW5zLGxiIGluIGxvb2tiYWNrcy5pdGVtcygpOgorICAgICAgICAgICAgIyBMb29wIG92ZXIgcHJvZHVjdGlvbnMgaW4gbG9va2JhY2sKKyAgICAgICAgICAgIGZvciBzdGF0ZSxwIGluIGxiOgorICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdGUgaW4gcC5sb29rYWhlYWRzOgorICAgICAgICAgICAgICAgICAgICAgIHAubG9va2FoZWFkc1tzdGF0ZV0gPSBbXQorICAgICAgICAgICAgICAgICBmID0gZm9sbG93c2V0LmdldCh0cmFucyxbXSkKKyAgICAgICAgICAgICAgICAgZm9yIGEgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICBpZiBhIG5vdCBpbiBwLmxvb2thaGVhZHNbc3RhdGVdOiBwLmxvb2thaGVhZHNbc3RhdGVdLmFwcGVuZChhKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYWRkX2xhbHJfbG9va2FoZWFkcygpCisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBvZiB0aGUgd29yayBvZiBhZGRpbmcgbG9va2FoZWFkIGluZm9ybWF0aW9uIGZvciB1c2UKKyAgICAjIHdpdGggTEFMUiBwYXJzaW5nCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGFkZF9sYWxyX2xvb2thaGVhZHMoc2VsZixDKToKKyAgICAgICAgIyBEZXRlcm1pbmUgYWxsIG9mIHRoZSBudWxsYWJsZSBub250ZXJtaW5hbHMKKyAgICAgICAgbnVsbGFibGUgPSBzZWxmLmNvbXB1dGVfbnVsbGFibGVfbm9udGVybWluYWxzKCkKKworICAgICAgICAjIEZpbmQgYWxsIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucworICAgICAgICB0cmFucyA9IHNlbGYuZmluZF9ub250ZXJtaW5hbF90cmFuc2l0aW9ucyhDKQorCisgICAgICAgICMgQ29tcHV0ZSByZWFkIHNldHMKKyAgICAgICAgcmVhZHNldHMgPSBzZWxmLmNvbXB1dGVfcmVhZF9zZXRzKEMsdHJhbnMsbnVsbGFibGUpCisKKyAgICAgICAgIyBDb21wdXRlIGxvb2tiYWNrL2luY2x1ZGVzIHJlbGF0aW9ucworICAgICAgICBsb29rZCwgaW5jbHVkZWQgPSBzZWxmLmNvbXB1dGVfbG9va2JhY2tfaW5jbHVkZXMoQyx0cmFucyxudWxsYWJsZSkKKworICAgICAgICAjIENvbXB1dGUgTEFMUiBGT0xMT1cgc2V0cworICAgICAgICBmb2xsb3dzZXRzID0gc2VsZi5jb21wdXRlX2ZvbGxvd19zZXRzKHRyYW5zLHJlYWRzZXRzLGluY2x1ZGVkKQorCisgICAgICAgICMgQWRkIGFsbCBvZiB0aGUgbG9va2FoZWFkcworICAgICAgICBzZWxmLmFkZF9sb29rYWhlYWRzKGxvb2tkLGZvbGxvd3NldHMpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBscl9wYXJzZV90YWJsZSgpCisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIHRoZSBwYXJzZSB0YWJsZXMgZm9yIFNMUiBvciBMQUxSCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBscl9wYXJzZV90YWJsZShzZWxmKToKKyAgICAgICAgUHJvZHVjdGlvbnMgPSBzZWxmLmdyYW1tYXIuUHJvZHVjdGlvbnMKKyAgICAgICAgUHJlY2VkZW5jZSAgPSBzZWxmLmdyYW1tYXIuUHJlY2VkZW5jZQorICAgICAgICBnb3RvICAgPSBzZWxmLmxyX2dvdG8gICAgICAgICAjIEdvdG8gYXJyYXkKKyAgICAgICAgYWN0aW9uID0gc2VsZi5scl9hY3Rpb24gICAgICAgIyBBY3Rpb24gYXJyYXkKKyAgICAgICAgbG9nICAgID0gc2VsZi5sb2cgICAgICAgICAgICAgIyBMb2dnZXIgZm9yIG91dHB1dAorCisgICAgICAgIGFjdGlvbnAgPSB7IH0gICAgICAgICAgICAgICAgICMgQWN0aW9uIHByb2R1Y3Rpb24gYXJyYXkgKHRlbXBvcmFyeSkKKyAgICAgICAgCisgICAgICAgIGxvZy5pbmZvKCJQYXJzaW5nIG1ldGhvZDogJXMiLCBzZWxmLmxyX21ldGhvZCkKKworICAgICAgICAjIFN0ZXAgMTogQ29uc3RydWN0IEMgPSB7IEkwLCBJMSwgLi4uIElOfSwgY29sbGVjdGlvbiBvZiBMUigwKSBpdGVtcworICAgICAgICAjIFRoaXMgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHN0YXRlcworCisgICAgICAgIEMgPSBzZWxmLmxyMF9pdGVtcygpCisKKyAgICAgICAgaWYgc2VsZi5scl9tZXRob2QgPT0gJ0xBTFInOgorICAgICAgICAgICAgc2VsZi5hZGRfbGFscl9sb29rYWhlYWRzKEMpCisKKyAgICAgICAgIyBCdWlsZCB0aGUgcGFyc2VyIHRhYmxlLCBzdGF0ZSBieSBzdGF0ZQorICAgICAgICBzdCA9IDAKKyAgICAgICAgZm9yIEkgaW4gQzoKKyAgICAgICAgICAgICMgTG9vcCBvdmVyIGVhY2ggcHJvZHVjdGlvbiBpbiBJCisgICAgICAgICAgICBhY3RsaXN0ID0gWyBdICAgICAgICAgICAgICAjIExpc3Qgb2YgYWN0aW9ucworICAgICAgICAgICAgc3RfYWN0aW9uICA9IHsgfQorICAgICAgICAgICAgc3RfYWN0aW9ucCA9IHsgfQorICAgICAgICAgICAgc3RfZ290byAgICA9IHsgfQorICAgICAgICAgICAgbG9nLmluZm8oIiIpCisgICAgICAgICAgICBsb2cuaW5mbygic3RhdGUgJWQiLCBzdCkKKyAgICAgICAgICAgIGxvZy5pbmZvKCIiKQorICAgICAgICAgICAgZm9yIHAgaW4gSToKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAgICglZCkgJXMiLCBwLm51bWJlciwgc3RyKHApKQorICAgICAgICAgICAgbG9nLmluZm8oIiIpCisKKyAgICAgICAgICAgIGZvciBwIGluIEk6CisgICAgICAgICAgICAgICAgICAgIGlmIHAubGVuID09IHAubHJfaW5kZXggKyAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcC5uYW1lID09ICJTJyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTdGFydCBzeW1ib2wuIEFjY2VwdCEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bIiRlbmQiXSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wWyIkZW5kIl0gPSBwCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYXJlIGF0IHRoZSBlbmQgb2YgYSBwcm9kdWN0aW9uLiAgUmVkdWNlIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubHJfbWV0aG9kID09ICdMQUxSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFoZWFkcyA9IHAubG9va2FoZWFkc1tzdF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWhlYWRzID0gc2VsZi5ncmFtbWFyLkZvbGxvd1twLm5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgaW4gbGFoZWFkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0bGlzdC5hcHBlbmQoKGEscCwicmVkdWNlIHVzaW5nIHJ1bGUgJWQgKCVzKSIgJSAocC5udW1iZXIscCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3RfYWN0aW9uLmdldChhLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdob2EuIEhhdmUgYSBzaGlmdC9yZWR1Y2Ugb3IgcmVkdWNlL3JlZHVjZSBjb25mbGljdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgciA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIGRlY2lkZSBvbiBzaGlmdCBvciByZWR1Y2UgaGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnkgZGVmYXVsdCB3ZSBmYXZvciBzaGlmdGluZy4gTmVlZCB0byBhZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNvbWUgcHJlY2VkZW5jZSBydWxlcyBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmVjLHNsZXZlbCA9IFByb2R1Y3Rpb25zW3N0X2FjdGlvbnBbYV0ubnVtYmVyXS5wcmVjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnByZWMscmxldmVsID0gUHJlY2VkZW5jZS5nZXQoYSwoJ3JpZ2h0JywwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xldmVsIDwgcmxldmVsKSBvciAoKHNsZXZlbCA9PSBybGV2ZWwpIGFuZCAocnByZWMgPT0gJ2xlZnQnKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgcmVhbGx5IG5lZWQgdG8gcmVkdWNlIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IC1wLm51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wW2FdID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2xldmVsIGFuZCBub3QgcmxldmVsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgISBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgZm9yICVzIHJlc29sdmVkIGFzIHJlZHVjZSIsYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JfY29uZmxpY3RzLmFwcGVuZCgoc3QsYSwncmVkdWNlJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3Rpb25zW3AubnVtYmVyXS5yZWR1Y2VkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIChzbGV2ZWwgPT0gcmxldmVsKSBhbmQgKHJwcmVjID09ICdub25hc3NvYycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIbW1tLiBHdWVzcyB3ZSdsbCBrZWVwIHRoZSBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmxldmVsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgISBzaGlmdC9yZWR1Y2UgY29uZmxpY3QgZm9yICVzIHJlc29sdmVkIGFzIHNoaWZ0IixhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcl9jb25mbGljdHMuYXBwZW5kKChzdCxhLCdzaGlmdCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiByIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlZHVjZS9yZWR1Y2UgY29uZmxpY3QuICAgSW4gdGhpcyBjYXNlLCB3ZSBmYXZvciB0aGUgcnVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhhdCB3YXMgZGVmaW5lZCBmaXJzdCBpbiB0aGUgZ3JhbW1hciBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkcCA9IFByb2R1Y3Rpb25zWy1yXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwID0gUHJvZHVjdGlvbnNbcC5udW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2xkcC5saW5lID4gcHAubGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gLXAubnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbYV0gPSBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlbnAscmVqZWN0cCA9IHBwLG9sZHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdGlvbnNbcC5udW1iZXJdLnJlZHVjZWQgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0aW9uc1tvbGRwLm51bWJlcl0ucmVkdWNlZCAtPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VucCxyZWplY3RwID0gb2xkcCxwcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnJfY29uZmxpY3RzLmFwcGVuZCgoc3QsY2hvc2VucCxyZWplY3RwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAhIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QgZm9yICVzIHJlc29sdmVkIHVzaW5nIHJ1bGUgJWQgKCVzKSIsIGEsc3RfYWN0aW9ucFthXS5udW1iZXIsIHN0X2FjdGlvbnBbYV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIExBTFJFcnJvcigiVW5rbm93biBjb25mbGljdCBpbiBzdGF0ZSAlZCIgJSBzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IC1wLm51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFthXSA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3Rpb25zW3AubnVtYmVyXS5yZWR1Y2VkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBwLmxyX2luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICBhID0gcC5wcm9kW2krMV0gICAgICAgIyBHZXQgc3ltYm9sIHJpZ2h0IGFmdGVyIHRoZSAiLiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGEgaW4gc2VsZi5ncmFtbWFyLlRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gc2VsZi5scjBfZ290byhJLGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHNlbGYubHIwX2NpZGhhc2guZ2V0KGlkKGcpLC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGogPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBhcmUgaW4gYSBzaGlmdCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RsaXN0LmFwcGVuZCgoYSxwLCJzaGlmdCBhbmQgZ28gdG8gc3RhdGUgJWQiICUgaikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdF9hY3Rpb24uZ2V0KGEsTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2hvYSBoYXZlIGEgc2hpZnQvcmVkdWNlIG9yIHNoaWZ0L3NoaWZ0IGNvbmZsaWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByICE9IGo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIExBTFJFcnJvcigiU2hpZnQvc2hpZnQgY29uZmxpY3QgaW4gc3RhdGUgJWQiICUgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHIgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRG8gYSBwcmVjZWRlbmNlIGNoZWNrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAtICBpZiBwcmVjZWRlbmNlIG9mIHJlZHVjZSBydWxlIGlzIGhpZ2hlciwgd2UgcmVkdWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAtICBpZiBwcmVjZWRlbmNlIG9mIHJlZHVjZSBpcyBzYW1lIGFuZCBsZWZ0IGFzc29jLCB3ZSByZWR1Y2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIC0gIG90aGVyd2lzZSB3ZSBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwcmVjLHJsZXZlbCA9IFByb2R1Y3Rpb25zW3N0X2FjdGlvbnBbYV0ubnVtYmVyXS5wcmVjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByZWMsc2xldmVsID0gUHJlY2VkZW5jZS5nZXQoYSwoJ3JpZ2h0JywwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xldmVsID4gcmxldmVsKSBvciAoKHNsZXZlbCA9PSBybGV2ZWwpIGFuZCAocnByZWMgPT0gJ3JpZ2h0JykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGRlY2lkZSB0byBzaGlmdCBoZXJlLi4uIGhpZ2hlc3QgcHJlY2VkZW5jZSB0byBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0aW9uc1tzdF9hY3Rpb25wW2FdLm51bWJlcl0ucmVkdWNlZCAtPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IGoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFthXSA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJsZXZlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCBhcyBzaGlmdCIsYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JfY29uZmxpY3RzLmFwcGVuZCgoc3QsYSwnc2hpZnQnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIChzbGV2ZWwgPT0gcmxldmVsKSBhbmQgKHJwcmVjID09ICdub25hc3NvYycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIbW1tLiBHdWVzcyB3ZSdsbCBrZWVwIHRoZSByZWR1Y2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNsZXZlbCBhbmQgbm90IHJsZXZlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCBhcyByZWR1Y2UiLGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGEsJ3JlZHVjZScpKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIExBTFJFcnJvcigiVW5rbm93biBjb25mbGljdCBpbiBzdGF0ZSAlZCIgJSBzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IGoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbYV0gPSBwCisKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggdGVybWluYWwKKyAgICAgICAgICAgIF9hY3RwcmludCA9IHsgfQorICAgICAgICAgICAgZm9yIGEscCxtIGluIGFjdGxpc3Q6CisgICAgICAgICAgICAgICAgaWYgYSBpbiBzdF9hY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGlmIHAgaXMgc3RfYWN0aW9ucFthXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICAgJS0xNXMgJXMiLGEsbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9hY3RwcmludFsoYSxtKV0gPSAxCisgICAgICAgICAgICBsb2cuaW5mbygiIikKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGFjdGlvbnMgdGhhdCB3ZXJlIG5vdCB1c2VkLiAoZGVidWdnaW5nKQorICAgICAgICAgICAgbm90X3VzZWQgPSAwCisgICAgICAgICAgICBmb3IgYSxwLG0gaW4gYWN0bGlzdDoKKyAgICAgICAgICAgICAgICBpZiBhIGluIHN0X2FjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcCBpcyBub3Qgc3RfYWN0aW9ucFthXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAoYSxtKSBpbiBfYWN0cHJpbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCIgICEgJS0xNXMgWyAlcyBdIixhLG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90X3VzZWQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FjdHByaW50WyhhLG0pXSA9IDEKKyAgICAgICAgICAgIGlmIG5vdF91c2VkOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiIikKKworICAgICAgICAgICAgIyBDb25zdHJ1Y3QgdGhlIGdvdG8gdGFibGUgZm9yIHRoaXMgc3RhdGUKKworICAgICAgICAgICAgbmtleXMgPSB7IH0KKyAgICAgICAgICAgIGZvciBpaSBpbiBJOgorICAgICAgICAgICAgICAgIGZvciBzIGluIGlpLnVzeW1zOgorICAgICAgICAgICAgICAgICAgICBpZiBzIGluIHNlbGYuZ3JhbW1hci5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgICAgICBua2V5c1tzXSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBuIGluIG5rZXlzOgorICAgICAgICAgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKEksbikKKyAgICAgICAgICAgICAgICBqID0gc2VsZi5scjBfY2lkaGFzaC5nZXQoaWQoZyksLTEpCisgICAgICAgICAgICAgICAgaWYgaiA+PSAwOgorICAgICAgICAgICAgICAgICAgICBzdF9nb3RvW25dID0gagorICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAgICUtMzBzIHNoaWZ0IGFuZCBnbyB0byBzdGF0ZSAlZCIsbixqKQorCisgICAgICAgICAgICBhY3Rpb25bc3RdID0gc3RfYWN0aW9uCisgICAgICAgICAgICBhY3Rpb25wW3N0XSA9IHN0X2FjdGlvbnAKKyAgICAgICAgICAgIGdvdG9bc3RdID0gc3RfZ290bworICAgICAgICAgICAgc3QgKz0gMQorCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB3cml0ZSgpCisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIExSIHBhcnNpbmcgdGFibGVzIHRvIGEgZmlsZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB3cml0ZV90YWJsZShzZWxmLG1vZHVsZW5hbWUsb3V0cHV0ZGlyPScnLHNpZ25hdHVyZT0iIik6CisgICAgICAgIGJhc2Vtb2R1bGVuYW1lID0gbW9kdWxlbmFtZS5zcGxpdCgiLiIpWy0xXQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRkaXIsYmFzZW1vZHVsZW5hbWUpICsgIi5weSIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsInciKQorCisgICAgICAgICAgICBmLndyaXRlKCIiIgorIyAlcworIyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuIERvIG5vdCBlZGl0LgorX3RhYnZlcnNpb24gPSAlcgorCitfbHJfbWV0aG9kID0gJXIKKworX2xyX3NpZ25hdHVyZSA9ICVyCisgICAgIiIiICUgKGZpbGVuYW1lLCBfX3RhYnZlcnNpb25fXywgc2VsZi5scl9tZXRob2QsIHNpZ25hdHVyZSkpCisKKyAgICAgICAgICAgICMgQ2hhbmdlIHNtYWxsZXIgdG8gMCB0byBnbyBiYWNrIHRvIG9yaWdpbmFsIHRhYmxlcworICAgICAgICAgICAgc21hbGxlciA9IDEKKworICAgICAgICAgICAgIyBGYWN0b3Igb3V0IG5hbWVzIHRvIHRyeSBhbmQgbWFrZSBzbWFsbGVyCisgICAgICAgICAgICBpZiBzbWFsbGVyOgorICAgICAgICAgICAgICAgIGl0ZW1zID0geyB9CisKKyAgICAgICAgICAgICAgICBmb3IgcyxuZCBpbiBzZWxmLmxyX2FjdGlvbi5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgIGZvciBuYW1lLHYgaW4gbmQuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICBpID0gaXRlbXMuZ2V0KG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGk6CisgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChbXSxbXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1tuYW1lXSA9IGkKKyAgICAgICAgICAgICAgICAgICAgICBpWzBdLmFwcGVuZChzKQorICAgICAgICAgICAgICAgICAgICAgIGlbMV0uYXBwZW5kKHYpCisKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJcbl9scl9hY3Rpb25faXRlbXMgPSB7IikKKyAgICAgICAgICAgICAgICBmb3Igayx2IGluIGl0ZW1zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVyOihbIiAlIGspCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHZbMF06CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlciwiICUgaSkKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiXSxbIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gdlsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVyLCIgJSBpKQorCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIl0pLCIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgifVxuIikKKworICAgICAgICAgICAgICAgIGYud3JpdGUoIiIiCitfbHJfYWN0aW9uID0geyB9Citmb3IgX2ssIF92IGluIF9scl9hY3Rpb25faXRlbXMuaXRlbXMoKToKKyAgIGZvciBfeCxfeSBpbiB6aXAoX3ZbMF0sX3ZbMV0pOgorICAgICAgaWYgbm90IF94IGluIF9scl9hY3Rpb246ICBfbHJfYWN0aW9uW194XSA9IHsgfQorICAgICAgX2xyX2FjdGlvbltfeF1bX2tdID0gX3kKK2RlbCBfbHJfYWN0aW9uX2l0ZW1zCisiIiIpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiXG5fbHJfYWN0aW9uID0geyAiKTsKKyAgICAgICAgICAgICAgICBmb3Igayx2IGluIHNlbGYubHJfYWN0aW9uLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiglciwlcik6JXIsIiAlIChrWzBdLGtbMV0sdikpCisgICAgICAgICAgICAgICAgZi53cml0ZSgifVxuIik7CisKKyAgICAgICAgICAgIGlmIHNtYWxsZXI6CisgICAgICAgICAgICAgICAgIyBGYWN0b3Igb3V0IG5hbWVzIHRvIHRyeSBhbmQgbWFrZSBzbWFsbGVyCisgICAgICAgICAgICAgICAgaXRlbXMgPSB7IH0KKworICAgICAgICAgICAgICAgIGZvciBzLG5kIGluIHNlbGYubHJfZ290by5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgIGZvciBuYW1lLHYgaW4gbmQuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICBpID0gaXRlbXMuZ2V0KG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGk6CisgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IChbXSxbXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1tuYW1lXSA9IGkKKyAgICAgICAgICAgICAgICAgICAgICBpWzBdLmFwcGVuZChzKQorICAgICAgICAgICAgICAgICAgICAgIGlbMV0uYXBwZW5kKHYpCisKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJcbl9scl9nb3RvX2l0ZW1zID0geyIpCisgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBpdGVtcy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlcjooWyIgJSBrKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB2WzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXIsIiAlIGkpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIl0sWyIpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHZbMV06CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlciwiICUgaSkKKworICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJdKSwiKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIn1cbiIpCisKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIiIgorX2xyX2dvdG8gPSB7IH0KK2ZvciBfaywgX3YgaW4gX2xyX2dvdG9faXRlbXMuaXRlbXMoKToKKyAgIGZvciBfeCxfeSBpbiB6aXAoX3ZbMF0sX3ZbMV0pOgorICAgICAgIGlmIG5vdCBfeCBpbiBfbHJfZ290bzogX2xyX2dvdG9bX3hdID0geyB9CisgICAgICAgX2xyX2dvdG9bX3hdW19rXSA9IF95CitkZWwgX2xyX2dvdG9faXRlbXMKKyIiIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiXG5fbHJfZ290byA9IHsgIik7CisgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBzZWxmLmxyX2dvdG8uaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiKCVyLCVyKTolciwiICUgKGtbMF0sa1sxXSx2KSkKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ9XG4iKTsKKworICAgICAgICAgICAgIyBXcml0ZSBwcm9kdWN0aW9uIHRhYmxlCisgICAgICAgICAgICBmLndyaXRlKCJfbHJfcHJvZHVjdGlvbnMgPSBbXG4iKQorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5scl9wcm9kdWN0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBwLmZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiAgKCVyLCVyLCVkLCVyLCVyLCVkKSxcbiIgJSAocC5zdHIscC5uYW1lLCBwLmxlbiwgcC5mdW5jLHAuZmlsZSxwLmxpbmUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiAgKCVyLCVyLCVkLE5vbmUsTm9uZSxOb25lKSxcbiIgJSAoc3RyKHApLHAubmFtZSwgcC5sZW4pKQorICAgICAgICAgICAgZi53cml0ZSgiXVxuIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gY3JlYXRlICclcydcbiIgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGUpKyJcbiIpCisgICAgICAgICAgICByZXR1cm4KKworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgcGlja2xlX3RhYmxlKCkKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIHBpY2tsZXMgdGhlIExSIHBhcnNpbmcgdGFibGVzIHRvIGEgc3VwcGxpZWQgZmlsZSBvYmplY3QKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgcGlja2xlX3RhYmxlKHNlbGYsZmlsZW5hbWUsc2lnbmF0dXJlPSIiKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgb3V0ZiA9IG9wZW4oZmlsZW5hbWUsIndiIikKKyAgICAgICAgcGlja2xlLmR1bXAoX190YWJ2ZXJzaW9uX18sb3V0ZixwaWNrbGVfcHJvdG9jb2wpCisgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYubHJfbWV0aG9kLG91dGYscGlja2xlX3Byb3RvY29sKQorICAgICAgICBwaWNrbGUuZHVtcChzaWduYXR1cmUsb3V0ZixwaWNrbGVfcHJvdG9jb2wpCisgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYubHJfYWN0aW9uLG91dGYscGlja2xlX3Byb3RvY29sKQorICAgICAgICBwaWNrbGUuZHVtcChzZWxmLmxyX2dvdG8sb3V0ZixwaWNrbGVfcHJvdG9jb2wpCisKKyAgICAgICAgb3V0cCA9IFtdCisgICAgICAgIGZvciBwIGluIHNlbGYubHJfcHJvZHVjdGlvbnM6CisgICAgICAgICAgICBpZiBwLmZ1bmM6CisgICAgICAgICAgICAgICAgb3V0cC5hcHBlbmQoKHAuc3RyLHAubmFtZSwgcC5sZW4sIHAuZnVuYyxwLmZpbGUscC5saW5lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cC5hcHBlbmQoKHN0cihwKSxwLm5hbWUscC5sZW4sTm9uZSxOb25lLE5vbmUpKQorICAgICAgICBwaWNrbGUuZHVtcChvdXRwLG91dGYscGlja2xlX3Byb3RvY29sKQorICAgICAgICBvdXRmLmNsb3NlKCkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gSU5UUk9TUEVDVElPTiA9PT0KKyMKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYXJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBQTFkKKyMgaW50cm9zcGVjdGlvbiBmZWF0dXJlcyBmb2xsb3dlZCBieSB0aGUgeWFjYygpIGZ1bmN0aW9uIGl0c2VsZi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KCkKKyMKKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGFsbCBvZiB0aGUgc3ltYm9scyBkZWZpbmVkIHdpdGhpbgorIyBhIGNhbGxlciBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2suICBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBlbnZpcm9ubWVudAorIyBhc3NvY2lhdGVkIHdpdGggdGhlIHlhY2MoKSBjYWxsIGlmIG5vbmUgd2FzIHByb3ZpZGVkLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgZ2V0X2NhbGxlcl9tb2R1bGVfZGljdChsZXZlbHMpOgorICAgIHRyeToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgZSxiLHQgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBmID0gdC50Yl9mcmFtZQorICAgICAgICB3aGlsZSBsZXZlbHMgPiAwOgorICAgICAgICAgICAgZiA9IGYuZl9iYWNrICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbGV2ZWxzIC09IDEKKyAgICAgICAgbGRpY3QgPSBmLmZfZ2xvYmFscy5jb3B5KCkKKyAgICAgICAgaWYgZi5mX2dsb2JhbHMgIT0gZi5mX2xvY2FsczoKKyAgICAgICAgICAgIGxkaWN0LnVwZGF0ZShmLmZfbG9jYWxzKQorCisgICAgICAgIHJldHVybiBsZGljdAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHBhcnNlX2dyYW1tYXIoKQorIworIyBUaGlzIHRha2VzIGEgcmF3IGdyYW1tYXIgcnVsZSBzdHJpbmcgYW5kIHBhcnNlcyBpdCBpbnRvIHByb2R1Y3Rpb24gZGF0YQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHBhcnNlX2dyYW1tYXIoZG9jLGZpbGUsbGluZSk6CisgICAgZ3JhbW1hciA9IFtdCisgICAgIyBTcGxpdCB0aGUgZG9jIHN0cmluZyBpbnRvIGxpbmVzCisgICAgcHN0cmluZ3MgPSBkb2Muc3BsaXRsaW5lcygpCisgICAgbGFzdHAgPSBOb25lCisgICAgZGxpbmUgPSBsaW5lCisgICAgZm9yIHBzIGluIHBzdHJpbmdzOgorICAgICAgICBkbGluZSArPSAxCisgICAgICAgIHAgPSBwcy5zcGxpdCgpCisgICAgICAgIGlmIG5vdCBwOiBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBwWzBdID09ICd8JzoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBjb250aW51YXRpb24gb2YgYSBwcmV2aW91cyBydWxlCisgICAgICAgICAgICAgICAgaWYgbm90IGxhc3RwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiJXM6JWQ6IE1pc3BsYWNlZCAnfCciICUgKGZpbGUsZGxpbmUpKQorICAgICAgICAgICAgICAgIHByb2RuYW1lID0gbGFzdHAKKyAgICAgICAgICAgICAgICBzeW1zID0gcFsxOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvZG5hbWUgPSBwWzBdCisgICAgICAgICAgICAgICAgbGFzdHAgPSBwcm9kbmFtZQorICAgICAgICAgICAgICAgIHN5bXMgICA9IHBbMjpdCisgICAgICAgICAgICAgICAgYXNzaWduID0gcFsxXQorICAgICAgICAgICAgICAgIGlmIGFzc2lnbiAhPSAnOicgYW5kIGFzc2lnbiAhPSAnOjo9JzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIiVzOiVkOiBTeW50YXggZXJyb3IuIEV4cGVjdGVkICc6JyIgJSAoZmlsZSxkbGluZSkpCisKKyAgICAgICAgICAgIGdyYW1tYXIuYXBwZW5kKChmaWxlLGRsaW5lLHByb2RuYW1lLHN5bXMpKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIiVzOiVkOiBTeW50YXggZXJyb3IgaW4gcnVsZSAnJXMnIiAlIChmaWxlLGRsaW5lLHBzLnN0cmlwKCkpKQorCisgICAgcmV0dXJuIGdyYW1tYXIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZXJSZWZsZWN0KCkKKyMKKyMgVGhpcyBjbGFzcyByZXByZXNlbnRzIGluZm9ybWF0aW9uIGV4dHJhY3RlZCBmb3IgYnVpbGRpbmcgYSBwYXJzZXIgaW5jbHVkaW5nCisjIHN0YXJ0IHN5bWJvbCwgZXJyb3IgZnVuY3Rpb24sIHRva2VucywgcHJlY2VkZW5jZSBsaXN0LCBhY3Rpb24gZnVuY3Rpb25zLAorIyBldGMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjbGFzcyBQYXJzZXJSZWZsZWN0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYscGRpY3QsbG9nPU5vbmUpOgorICAgICAgICBzZWxmLnBkaWN0ICAgICAgPSBwZGljdAorICAgICAgICBzZWxmLnN0YXJ0ICAgICAgPSBOb25lCisgICAgICAgIHNlbGYuZXJyb3JfZnVuYyA9IE5vbmUKKyAgICAgICAgc2VsZi50b2tlbnMgICAgID0gTm9uZQorICAgICAgICBzZWxmLmZpbGVzICAgICAgPSB7fQorICAgICAgICBzZWxmLmdyYW1tYXIgICAgPSBbXQorICAgICAgICBzZWxmLmVycm9yICAgICAgPSAwCisKKyAgICAgICAgaWYgbG9nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmxvZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sb2cgPSBsb2cKKworICAgICMgR2V0IGFsbCBvZiB0aGUgYmFzaWMgaW5mb3JtYXRpb24KKyAgICBkZWYgZ2V0X2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfc3RhcnQoKQorICAgICAgICBzZWxmLmdldF9lcnJvcl9mdW5jKCkKKyAgICAgICAgc2VsZi5nZXRfdG9rZW5zKCkKKyAgICAgICAgc2VsZi5nZXRfcHJlY2VkZW5jZSgpCisgICAgICAgIHNlbGYuZ2V0X3BmdW5jdGlvbnMoKQorICAgICAgICAKKyAgICAjIFZhbGlkYXRlIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24KKyAgICBkZWYgdmFsaWRhdGVfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnZhbGlkYXRlX3N0YXJ0KCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9lcnJvcl9mdW5jKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV90b2tlbnMoKQorICAgICAgICBzZWxmLnZhbGlkYXRlX3ByZWNlZGVuY2UoKQorICAgICAgICBzZWxmLnZhbGlkYXRlX3BmdW5jdGlvbnMoKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2ZpbGVzKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3IKKworICAgICMgQ29tcHV0ZSBhIHNpZ25hdHVyZSBvdmVyIHRoZSBncmFtbWFyCisgICAgZGVmIHNpZ25hdHVyZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBoYXNobGliIGltcG9ydCBtZDUKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgZnJvbSBtZDUgaW1wb3J0IG1kNQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaWcgPSBtZDUoKQorICAgICAgICAgICAgaWYgc2VsZi5zdGFydDoKKyAgICAgICAgICAgICAgICBzaWcudXBkYXRlKHNlbGYuc3RhcnQuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgICAgICBpZiBzZWxmLnByZWM6CisgICAgICAgICAgICAgICAgc2lnLnVwZGF0ZSgiIi5qb2luKFsiIi5qb2luKHApIGZvciBwIGluIHNlbGYucHJlY10pLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICAgICAgaWYgc2VsZi50b2tlbnM6CisgICAgICAgICAgICAgICAgc2lnLnVwZGF0ZSgiICIuam9pbihzZWxmLnRva2VucykuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLnBmdW5jczoKKyAgICAgICAgICAgICAgICBpZiBmWzNdOgorICAgICAgICAgICAgICAgICAgICBzaWcudXBkYXRlKGZbM10uZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gc2lnLmRpZ2VzdCgpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB2YWxpZGF0ZV9maWxlKCkKKyAgICAjCisgICAgIyBUaGlzIG1ldGhvZCBjaGVja3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGVkIHBfcnVsZW5hbWUoKSBmdW5jdGlvbnMKKyAgICAjIGluIHRoZSBwYXJzZXIgbW9kdWxlIGZpbGUuICBXaXRob3V0IHRoaXMgZnVuY3Rpb24sIGl0IGlzIHJlYWxseSBlYXN5IGZvcgorICAgICMgdXNlcnMgdG8gbWFrZSBtaXN0YWtlcyBieSBjdXR0aW5nIGFuZCBwYXN0aW5nIGNvZGUgZnJhZ21lbnRzIChhbmQgaXQncyBhIHJlYWwKKyAgICAjIGJ1Z2dlciB0byB0cnkgYW5kIGZpZ3VyZSBvdXQgd2h5IHRoZSByZXN1bHRpbmcgcGFyc2VyIGRvZXNuJ3Qgd29yaykuICBUaGVyZWZvcmUsCisgICAgIyB3ZSBqdXN0IGRvIGEgbGl0dGxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nIG9mIGRlZiBzdGF0ZW1lbnRzCisgICAgIyB0byB0cnkgYW5kIGRldGVjdCBkdXBsaWNhdGVzLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB2YWxpZGF0ZV9maWxlcyhzZWxmKToKKyAgICAgICAgIyBNYXRjaCBkZWYgcF9mdW5jbmFtZSgKKyAgICAgICAgZnJlID0gcmUuY29tcGlsZShyJ1xzKmRlZlxzKyhwX1thLXpBLVpfMC05XSopXCgnKQorCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLmZpbGVzLmtleXMoKToKKyAgICAgICAgICAgIGJhc2UsZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIGV4dCAhPSAnLnB5JzogcmV0dXJuIDEgICAgICAgICAgIyBObyBpZGVhLiBBc3N1bWUgaXQncyBva2F5LgorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjb3VudGhhc2ggPSB7IH0KKyAgICAgICAgICAgIGZvciBsaW5lbixsIGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAgICAgICAgICAgbGluZW4gKz0gMQorICAgICAgICAgICAgICAgIG0gPSBmcmUubWF0Y2gobCkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBwcmV2ID0gY291bnRoYXNoLmdldChuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcHJldjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50aGFzaFtuYW1lXSA9IGxpbmVuCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCIlczolZDogRnVuY3Rpb24gJXMgcmVkZWZpbmVkLiBQcmV2aW91c2x5IGRlZmluZWQgb24gbGluZSAlZCIsIGZpbGVuYW1lLGxpbmVuLG5hbWUscHJldikKKworICAgICMgR2V0IHRoZSBzdGFydCBzeW1ib2wKKyAgICBkZWYgZ2V0X3N0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnN0YXJ0ID0gc2VsZi5wZGljdC5nZXQoJ3N0YXJ0JykKKworICAgICMgVmFsaWRhdGUgdGhlIHN0YXJ0IHN5bWJvbAorICAgIGRlZiB2YWxpZGF0ZV9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGFydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhcnQsc3RyKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJ3N0YXJ0JyBtdXN0IGJlIGEgc3RyaW5nIikKKworICAgICMgTG9vayBmb3IgZXJyb3IgaGFuZGxlcgorICAgIGRlZiBnZXRfZXJyb3JfZnVuYyhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcl9mdW5jID0gc2VsZi5wZGljdC5nZXQoJ3BfZXJyb3InKQorCisgICAgIyBWYWxpZGF0ZSB0aGUgZXJyb3IgZnVuY3Rpb24KKyAgICBkZWYgdmFsaWRhdGVfZXJyb3JfZnVuYyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5lcnJvcl9mdW5jOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmVycm9yX2Z1bmMsdHlwZXMuRnVuY3Rpb25UeXBlKToKKyAgICAgICAgICAgICAgICBpc21ldGhvZCA9IDAKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLmVycm9yX2Z1bmMsIHR5cGVzLk1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgIGlzbWV0aG9kID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJ3BfZXJyb3InIGRlZmluZWQsIGJ1dCBpcyBub3QgYSBmdW5jdGlvbiBvciBtZXRob2QiKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGVsaW5lID0gZnVuY19jb2RlKHNlbGYuZXJyb3JfZnVuYykuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGVmaWxlID0gZnVuY19jb2RlKHNlbGYuZXJyb3JfZnVuYykuY29fZmlsZW5hbWUKKyAgICAgICAgICAgIHNlbGYuZmlsZXNbZWZpbGVdID0gMQorCisgICAgICAgICAgICBpZiAoZnVuY19jb2RlKHNlbGYuZXJyb3JfZnVuYykuY29fYXJnY291bnQgIT0gMStpc21ldGhvZCk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBwX2Vycm9yKCkgcmVxdWlyZXMgMSBhcmd1bWVudCIsZWZpbGUsZWxpbmUpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKworICAgICMgR2V0IHRoZSB0b2tlbnMgbWFwCisgICAgZGVmIGdldF90b2tlbnMoc2VsZik6CisgICAgICAgIHRva2VucyA9IHNlbGYucGRpY3QuZ2V0KCJ0b2tlbnMiLE5vbmUpCisgICAgICAgIGlmIG5vdCB0b2tlbnM6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiTm8gdG9rZW4gbGlzdCBpcyBkZWZpbmVkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0b2tlbnMsKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigidG9rZW5zIG11c3QgYmUgYSBsaXN0IG9yIHR1cGxlIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgCisgICAgICAgIGlmIG5vdCB0b2tlbnM6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigidG9rZW5zIGlzIGVtcHR5IikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLnRva2VucyA9IHRva2VucworCisgICAgIyBWYWxpZGF0ZSB0aGUgdG9rZW5zCisgICAgZGVmIHZhbGlkYXRlX3Rva2VucyhzZWxmKToKKyAgICAgICAgIyBWYWxpZGF0ZSB0aGUgdG9rZW5zLgorICAgICAgICBpZiAnZXJyb3InIGluIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIklsbGVnYWwgdG9rZW4gbmFtZSAnZXJyb3InLiBJcyBhIHJlc2VydmVkIHdvcmQiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRlcm1pbmFscyA9IHt9CisgICAgICAgIGZvciBuIGluIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgaWYgbiBpbiB0ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiVG9rZW4gJyVzJyBtdWx0aXBseSBkZWZpbmVkIiwgbikKKyAgICAgICAgICAgIHRlcm1pbmFsc1tuXSA9IDEKKworICAgICMgR2V0IHRoZSBwcmVjZWRlbmNlIG1hcCAoaWYgYW55KQorICAgIGRlZiBnZXRfcHJlY2VkZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5wcmVjID0gc2VsZi5wZGljdC5nZXQoInByZWNlZGVuY2UiLE5vbmUpCisKKyAgICAjIFZhbGlkYXRlIGFuZCBwYXJzZSB0aGUgcHJlY2VkZW5jZSBtYXAKKyAgICBkZWYgdmFsaWRhdGVfcHJlY2VkZW5jZShzZWxmKToKKyAgICAgICAgcHJlY2xpc3QgPSBbXQorICAgICAgICBpZiBzZWxmLnByZWM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnByZWMsKGxpc3QsdHVwbGUpKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigicHJlY2VkZW5jZSBtdXN0IGJlIGEgbGlzdCBvciB0dXBsZSIpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGZvciBsZXZlbCxwIGluIGVudW1lcmF0ZShzZWxmLnByZWMpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHAsKGxpc3QsdHVwbGUpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkJhZCBwcmVjZWRlbmNlIHRhYmxlIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocCkgPCAyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiTWFsZm9ybWVkIHByZWNlZGVuY2UgZW50cnkgJXMuIE11c3QgYmUgKGFzc29jLCB0ZXJtLCAuLi4sIHRlcm0pIixwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBhc3NvYyA9IHBbMF0KKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhc3NvYyxzdHIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigicHJlY2VkZW5jZSBhc3NvY2lhdGl2aXR5IG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmb3IgdGVybSBpbiBwWzE6XToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGVybSxzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInByZWNlZGVuY2UgaXRlbXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgcHJlY2xpc3QuYXBwZW5kKCh0ZXJtLGFzc29jLGxldmVsKzEpKQorICAgICAgICBzZWxmLnByZWNsaXN0ID0gcHJlY2xpc3QKKworICAgICMgR2V0IGFsbCBwX2Z1bmN0aW9ucyBmcm9tIHRoZSBncmFtbWFyCisgICAgZGVmIGdldF9wZnVuY3Rpb25zKHNlbGYpOgorICAgICAgICBwX2Z1bmN0aW9ucyA9IFtdCisgICAgICAgIGZvciBuYW1lLCBpdGVtIGluIHNlbGYucGRpY3QuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5hbWVbOjJdICE9ICdwXyc6IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBuYW1lID09ICdwX2Vycm9yJzogY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwodHlwZXMuRnVuY3Rpb25UeXBlLHR5cGVzLk1ldGhvZFR5cGUpKToKKyAgICAgICAgICAgICAgICBsaW5lID0gZnVuY19jb2RlKGl0ZW0pLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICAgICAgZmlsZSA9IGZ1bmNfY29kZShpdGVtKS5jb19maWxlbmFtZQorICAgICAgICAgICAgICAgIHBfZnVuY3Rpb25zLmFwcGVuZCgobGluZSxmaWxlLG5hbWUsaXRlbS5fX2RvY19fKSkKKworICAgICAgICAjIFNvcnQgYWxsIG9mIHRoZSBhY3Rpb25zIGJ5IGxpbmUgbnVtYmVyCisgICAgICAgIHBfZnVuY3Rpb25zLnNvcnQoKQorICAgICAgICBzZWxmLnBmdW5jcyA9IHBfZnVuY3Rpb25zCisKKworICAgICMgVmFsaWRhdGUgYWxsIG9mIHRoZSBwX2Z1bmN0aW9ucworICAgIGRlZiB2YWxpZGF0ZV9wZnVuY3Rpb25zKHNlbGYpOgorICAgICAgICBncmFtbWFyID0gW10KKyAgICAgICAgIyBDaGVjayBmb3Igbm9uLWVtcHR5IHN5bWJvbHMKKyAgICAgICAgaWYgbGVuKHNlbGYucGZ1bmNzKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIm5vIHJ1bGVzIG9mIHRoZSBmb3JtIHBfcnVsZW5hbWUgYXJlIGRlZmluZWQiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybiAKKyAgICAgICAgCisgICAgICAgIGZvciBsaW5lLCBmaWxlLCBuYW1lLCBkb2MgaW4gc2VsZi5wZnVuY3M6CisgICAgICAgICAgICBmdW5jID0gc2VsZi5wZGljdFtuYW1lXQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmdW5jLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICByZXFhcmdzID0gMgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXFhcmdzID0gMQorICAgICAgICAgICAgaWYgZnVuY19jb2RlKGZ1bmMpLmNvX2FyZ2NvdW50ID4gcmVxYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyBoYXMgdG9vIG1hbnkgYXJndW1lbnRzIixmaWxlLGxpbmUsZnVuYy5fX25hbWVfXykKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgZWxpZiBmdW5jX2NvZGUoZnVuYykuY29fYXJnY291bnQgPCByZXFhcmdzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IixmaWxlLGxpbmUsZnVuYy5fX25hbWVfXykKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgZWxpZiBub3QgZnVuYy5fX2RvY19fOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIiVzOiVkOiBObyBkb2N1bWVudGF0aW9uIHN0cmluZyBzcGVjaWZpZWQgaW4gZnVuY3Rpb24gJyVzJyAoaWdub3JlZCkiLGZpbGUsbGluZSxmdW5jLl9fbmFtZV9fKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZF9nID0gcGFyc2VfZ3JhbW1hcihkb2MsZmlsZSxsaW5lKQorICAgICAgICAgICAgICAgICAgICBmb3IgZyBpbiBwYXJzZWRfZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIuYXBwZW5kKChuYW1lLCBnKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcihzdHIoZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgICAgICAjIExvb2tzIGxpa2UgYSB2YWxpZCBncmFtbWFyIHJ1bGUKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhlIGZpbGUgaW4gd2hpY2ggZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVzW2ZpbGVdID0gMQorCisgICAgICAgICMgU2Vjb25kYXJ5IHZhbGlkYXRpb24gc3RlcCB0aGF0IGxvb2tzIGZvciBwXyBkZWZpbml0aW9ucyB0aGF0IGFyZSBub3QgZnVuY3Rpb25zCisgICAgICAgICMgb3IgZnVuY3Rpb25zIHRoYXQgbG9vayBsaWtlIHRoZXkgbWlnaHQgYmUgZ3JhbW1hciBydWxlcy4KKworICAgICAgICBmb3Igbix2IGluIHNlbGYucGRpY3QuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5bMDoyXSA9PSAncF8nIGFuZCBpc2luc3RhbmNlKHYsICh0eXBlcy5GdW5jdGlvblR5cGUsIHR5cGVzLk1ldGhvZFR5cGUpKTogY29udGludWUKKyAgICAgICAgICAgIGlmIG5bMDoyXSA9PSAndF8nOiBjb250aW51ZQorICAgICAgICAgICAgaWYgblswOjJdID09ICdwXycgYW5kIG4gIT0gJ3BfZXJyb3InOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIiclcycgbm90IGRlZmluZWQgYXMgYSBmdW5jdGlvbiIsIG4pCisgICAgICAgICAgICBpZiAoKGlzaW5zdGFuY2Uodix0eXBlcy5GdW5jdGlvblR5cGUpIGFuZCBmdW5jX2NvZGUodikuY29fYXJnY291bnQgPT0gMSkgb3IKKyAgICAgICAgICAgICAgICAoaXNpbnN0YW5jZSh2LHR5cGVzLk1ldGhvZFR5cGUpIGFuZCBmdW5jX2NvZGUodikuY29fYXJnY291bnQgPT0gMikpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZG9jID0gdi5fX2RvY19fLnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgaWYgZG9jWzFdID09ICc6JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIiVzOiVkOiBQb3NzaWJsZSBncmFtbWFyIHJ1bGUgJyVzJyBkZWZpbmVkIHdpdGhvdXQgcF8gcHJlZml4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19jb2RlKHYpLmNvX2ZpbGVuYW1lLCBmdW5jX2NvZGUodikuY29fZmlyc3RsaW5lbm8sbikKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5ncmFtbWFyID0gZ3JhbW1hcgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHlhY2MobW9kdWxlKQorIworIyBCdWlsZCBhIHBhcnNlcgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgeWFjYyhtZXRob2Q9J0xBTFInLCBkZWJ1Zz15YWNjZGVidWcsIG1vZHVsZT1Ob25lLCB0YWJtb2R1bGU9dGFiX21vZHVsZSwgc3RhcnQ9Tm9uZSwgCisgICAgICAgICBjaGVja19yZWN1cnNpb249MSwgb3B0aW1pemU9MCwgd3JpdGVfdGFibGVzPTEsIGRlYnVnZmlsZT1kZWJ1Z19maWxlLG91dHB1dGRpcj0nJywKKyAgICAgICAgIGRlYnVnbG9nPU5vbmUsIGVycm9ybG9nID0gTm9uZSwgcGlja2xlZmlsZT1Ob25lKToKKworICAgIGdsb2JhbCBwYXJzZSAgICAgICAgICAgICAgICAgIyBSZWZlcmVuY2UgdG8gdGhlIHBhcnNpbmcgbWV0aG9kIG9mIHRoZSBsYXN0IGJ1aWx0IHBhcnNlcgorCisgICAgIyBJZiBwaWNrbGluZyBpcyBlbmFibGVkLCB0YWJsZSBmaWxlcyBhcmUgbm90IGNyZWF0ZWQKKworICAgIGlmIHBpY2tsZWZpbGU6CisgICAgICAgIHdyaXRlX3RhYmxlcyA9IDAKKworICAgIGlmIGVycm9ybG9nIGlzIE5vbmU6CisgICAgICAgIGVycm9ybG9nID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisKKyAgICAjIEdldCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgdXNlZCBmb3IgdGhlIHBhcnNlcgorICAgIGlmIG1vZHVsZToKKyAgICAgICAgX2l0ZW1zID0gWyhrLGdldGF0dHIobW9kdWxlLGspKSBmb3IgayBpbiBkaXIobW9kdWxlKV0KKyAgICAgICAgcGRpY3QgPSBkaWN0KF9pdGVtcykKKyAgICBlbHNlOgorICAgICAgICBwZGljdCA9IGdldF9jYWxsZXJfbW9kdWxlX2RpY3QoMikKKworICAgICMgQ29sbGVjdCBwYXJzZXIgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGljdGlvbmFyeQorICAgIHBpbmZvID0gUGFyc2VyUmVmbGVjdChwZGljdCxsb2c9ZXJyb3Jsb2cpCisgICAgcGluZm8uZ2V0X2FsbCgpCisKKyAgICBpZiBwaW5mby5lcnJvcjoKKyAgICAgICAgcmFpc2UgWWFjY0Vycm9yKCJVbmFibGUgdG8gYnVpbGQgcGFyc2VyIikKKworICAgICMgQ2hlY2sgc2lnbmF0dXJlIGFnYWluc3QgdGFibGUgZmlsZXMgKGlmIGFueSkKKyAgICBzaWduYXR1cmUgPSBwaW5mby5zaWduYXR1cmUoKQorCisgICAgIyBSZWFkIHRoZSB0YWJsZXMKKyAgICB0cnk6CisgICAgICAgIGxyID0gTFJUYWJsZSgpCisgICAgICAgIGlmIHBpY2tsZWZpbGU6CisgICAgICAgICAgICByZWFkX3NpZ25hdHVyZSA9IGxyLnJlYWRfcGlja2xlKHBpY2tsZWZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkX3NpZ25hdHVyZSA9IGxyLnJlYWRfdGFibGUodGFibW9kdWxlKQorICAgICAgICBpZiBvcHRpbWl6ZSBvciAocmVhZF9zaWduYXR1cmUgPT0gc2lnbmF0dXJlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsci5iaW5kX2NhbGxhYmxlcyhwaW5mby5wZGljdCkKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBMUlBhcnNlcihscixwaW5mby5lcnJvcl9mdW5jKQorICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VyLnBhcnNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlcgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUaGVyZSB3YXMgYSBwcm9ibGVtIGxvYWRpbmcgdGhlIHRhYmxlIGZpbGU6ICVzIiwgcmVwcihlKSkKKyAgICBleGNlcHQgVmVyc2lvbkVycm9yOgorICAgICAgICBlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZyhzdHIoZSkpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcGFzcworCisgICAgaWYgZGVidWdsb2cgaXMgTm9uZToKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBkZWJ1Z2xvZyA9IFBseUxvZ2dlcihvcGVuKGRlYnVnZmlsZSwidyIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVidWdsb2cgPSBOdWxsTG9nZ2VyKCkKKworICAgIGRlYnVnbG9nLmluZm8oIkNyZWF0ZWQgYnkgUExZIHZlcnNpb24gJXMgKGh0dHA6Ly93d3cuZGFiZWF6LmNvbS9wbHkpIiwgX192ZXJzaW9uX18pCisKKworICAgIGVycm9ycyA9IDAKKworICAgICMgVmFsaWRhdGUgdGhlIHBhcnNlciBpbmZvcm1hdGlvbgorICAgIGlmIHBpbmZvLnZhbGlkYXRlX2FsbCgpOgorICAgICAgICByYWlzZSBZYWNjRXJyb3IoIlVuYWJsZSB0byBidWlsZCBwYXJzZXIiKQorICAgIAorICAgIGlmIG5vdCBwaW5mby5lcnJvcl9mdW5jOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJubyBwX2Vycm9yKCkgZnVuY3Rpb24gaXMgZGVmaW5lZCIpCisKKyAgICAjIENyZWF0ZSBhIGdyYW1tYXIgb2JqZWN0CisgICAgZ3JhbW1hciA9IEdyYW1tYXIocGluZm8udG9rZW5zKQorCisgICAgIyBTZXQgcHJlY2VkZW5jZSBsZXZlbCBmb3IgdGVybWluYWxzCisgICAgZm9yIHRlcm0sIGFzc29jLCBsZXZlbCBpbiBwaW5mby5wcmVjbGlzdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ3JhbW1hci5zZXRfcHJlY2VkZW5jZSh0ZXJtLGFzc29jLGxldmVsKQorICAgICAgICBleGNlcHQgR3JhbW1hckVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIlcyIsc3RyKGUpKQorCisgICAgIyBBZGQgcHJvZHVjdGlvbnMgdG8gdGhlIGdyYW1tYXIKKyAgICBmb3IgZnVuY25hbWUsIGdyYW0gaW4gcGluZm8uZ3JhbW1hcjoKKyAgICAgICAgZmlsZSwgbGluZSwgcHJvZG5hbWUsIHN5bXMgPSBncmFtCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdyYW1tYXIuYWRkX3Byb2R1Y3Rpb24ocHJvZG5hbWUsc3ltcyxmdW5jbmFtZSxmaWxlLGxpbmUpCisgICAgICAgIGV4Y2VwdCBHcmFtbWFyRXJyb3I6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGVycm9ybG9nLmVycm9yKCIlcyIsc3RyKGUpKQorICAgICAgICAgICAgZXJyb3JzID0gMQorCisgICAgIyBTZXQgdGhlIGdyYW1tYXIgc3RhcnQgc3ltYm9scworICAgIHRyeToKKyAgICAgICAgaWYgc3RhcnQgaXMgTm9uZToKKyAgICAgICAgICAgIGdyYW1tYXIuc2V0X3N0YXJ0KHBpbmZvLnN0YXJ0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JhbW1hci5zZXRfc3RhcnQoc3RhcnQpCisgICAgZXhjZXB0IEdyYW1tYXJFcnJvcjoKKyAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgIGVycm9ybG9nLmVycm9yKHN0cihlKSkKKyAgICAgICAgZXJyb3JzID0gMQorCisgICAgaWYgZXJyb3JzOgorICAgICAgICByYWlzZSBZYWNjRXJyb3IoIlVuYWJsZSB0byBidWlsZCBwYXJzZXIiKQorCisgICAgIyBWZXJpZnkgdGhlIGdyYW1tYXIgc3RydWN0dXJlCisgICAgdW5kZWZpbmVkX3N5bWJvbHMgPSBncmFtbWFyLnVuZGVmaW5lZF9zeW1ib2xzKCkKKyAgICBmb3Igc3ltLCBwcm9kIGluIHVuZGVmaW5lZF9zeW1ib2xzOgorICAgICAgICBlcnJvcmxvZy5lcnJvcigiJXM6JWQ6IFN5bWJvbCAnJXMnIHVzZWQsIGJ1dCBub3QgZGVmaW5lZCBhcyBhIHRva2VuIG9yIGEgcnVsZSIscHJvZC5maWxlLHByb2QubGluZSxzeW0pCisgICAgICAgIGVycm9ycyA9IDEKKworICAgIHVudXNlZF90ZXJtaW5hbHMgPSBncmFtbWFyLnVudXNlZF90ZXJtaW5hbHMoKQorICAgIGlmIHVudXNlZF90ZXJtaW5hbHM6CisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIlVudXNlZCB0ZXJtaW5hbHM6IikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgZm9yIHRlcm0gaW4gdW51c2VkX3Rlcm1pbmFsczoKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlRva2VuICclcycgZGVmaW5lZCwgYnV0IG5vdCB1c2VkIiwgdGVybSkKKyAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oIiAgICAlcyIsIHRlcm0pCisKKyAgICAjIFByaW50IG91dCBhbGwgcHJvZHVjdGlvbnMgdG8gdGhlIGRlYnVnIGxvZworICAgIGlmIGRlYnVnOgorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJHcmFtbWFyIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgZm9yIG4scCBpbiBlbnVtZXJhdGUoZ3JhbW1hci5Qcm9kdWN0aW9ucyk6CisgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJSdWxlICUtNWQgJXMiLCBuLCBwKQorCisgICAgIyBGaW5kIHVudXNlZCBub24tdGVybWluYWxzCisgICAgdW51c2VkX3J1bGVzID0gZ3JhbW1hci51bnVzZWRfcnVsZXMoKQorICAgIGZvciBwcm9kIGluIHVudXNlZF9ydWxlczoKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygiJXM6JWQ6IFJ1bGUgJyVzJyBkZWZpbmVkLCBidXQgbm90IHVzZWQiLCBwcm9kLmZpbGUsIHByb2QubGluZSwgcHJvZC5uYW1lKQorCisgICAgaWYgbGVuKHVudXNlZF90ZXJtaW5hbHMpID09IDE6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlRoZXJlIGlzIDEgdW51c2VkIHRva2VuIikKKyAgICBpZiBsZW4odW51c2VkX3Rlcm1pbmFscykgPiAxOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUaGVyZSBhcmUgJWQgdW51c2VkIHRva2VucyIsIGxlbih1bnVzZWRfdGVybWluYWxzKSkKKworICAgIGlmIGxlbih1bnVzZWRfcnVsZXMpID09IDE6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlRoZXJlIGlzIDEgdW51c2VkIHJ1bGUiKQorICAgIGlmIGxlbih1bnVzZWRfcnVsZXMpID4gMToKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVGhlcmUgYXJlICVkIHVudXNlZCBydWxlcyIsIGxlbih1bnVzZWRfcnVsZXMpKQorCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIlRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIHRlcm1zID0gbGlzdChncmFtbWFyLlRlcm1pbmFscykKKyAgICAgICAgdGVybXMuc29ydCgpCisgICAgICAgIGZvciB0ZXJtIGluIHRlcm1zOgorICAgICAgICAgICAgZGVidWdsb2cuaW5mbygiJS0yMHMgOiAlcyIsIHRlcm0sICIgIi5qb2luKFtzdHIocykgZm9yIHMgaW4gZ3JhbW1hci5UZXJtaW5hbHNbdGVybV1dKSkKKyAgICAgICAgCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIk5vbnRlcm1pbmFscywgd2l0aCBydWxlcyB3aGVyZSB0aGV5IGFwcGVhciIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIG5vbnRlcm1zID0gbGlzdChncmFtbWFyLk5vbnRlcm1pbmFscykKKyAgICAgICAgbm9udGVybXMuc29ydCgpCisgICAgICAgIGZvciBub250ZXJtIGluIG5vbnRlcm1zOgorICAgICAgICAgICAgZGVidWdsb2cuaW5mbygiJS0yMHMgOiAlcyIsIG5vbnRlcm0sICIgIi5qb2luKFtzdHIocykgZm9yIHMgaW4gZ3JhbW1hci5Ob250ZXJtaW5hbHNbbm9udGVybV1dKSkKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKworICAgIGlmIGNoZWNrX3JlY3Vyc2lvbjoKKyAgICAgICAgdW5yZWFjaGFibGUgPSBncmFtbWFyLmZpbmRfdW5yZWFjaGFibGUoKQorICAgICAgICBmb3IgdSBpbiB1bnJlYWNoYWJsZToKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlN5bWJvbCAnJXMnIGlzIHVucmVhY2hhYmxlIix1KQorCisgICAgICAgIGluZmluaXRlID0gZ3JhbW1hci5pbmZpbml0ZV9jeWNsZXMoKQorICAgICAgICBmb3IgaW5mIGluIGluZmluaXRlOgorICAgICAgICAgICAgZXJyb3Jsb2cuZXJyb3IoIkluZmluaXRlIHJlY3Vyc2lvbiBkZXRlY3RlZCBmb3Igc3ltYm9sICclcyciLCBpbmYpCisgICAgICAgICAgICBlcnJvcnMgPSAxCisgICAgICAgIAorICAgIHVudXNlZF9wcmVjID0gZ3JhbW1hci51bnVzZWRfcHJlY2VkZW5jZSgpCisgICAgZm9yIHRlcm0sIGFzc29jIGluIHVudXNlZF9wcmVjOgorICAgICAgICBlcnJvcmxvZy5lcnJvcigiUHJlY2VkZW5jZSBydWxlICclcycgZGVmaW5lZCBmb3IgdW5rbm93biBzeW1ib2wgJyVzJyIsIGFzc29jLCB0ZXJtKQorICAgICAgICBlcnJvcnMgPSAxCisKKyAgICBpZiBlcnJvcnM6CisgICAgICAgIHJhaXNlIFlhY2NFcnJvcigiVW5hYmxlIHRvIGJ1aWxkIHBhcnNlciIpCisgICAgCisgICAgIyBSdW4gdGhlIExSR2VuZXJhdGVkVGFibGUgb24gdGhlIGdyYW1tYXIKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZXJyb3Jsb2cuZGVidWcoIkdlbmVyYXRpbmcgJXMgdGFibGVzIiwgbWV0aG9kKQorICAgICAgICAgICAgCisgICAgbHIgPSBMUkdlbmVyYXRlZFRhYmxlKGdyYW1tYXIsbWV0aG9kLGRlYnVnbG9nKQorCisgICAgaWYgZGVidWc6CisgICAgICAgIG51bV9zciA9IGxlbihsci5zcl9jb25mbGljdHMpCisKKyAgICAgICAgIyBSZXBvcnQgc2hpZnQvcmVkdWNlIGFuZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cworICAgICAgICBpZiBudW1fc3IgPT0gMToKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIjEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IikKKyAgICAgICAgZWxpZiBudW1fc3IgPiAxOgorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiJWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyIsIG51bV9zcikKKworICAgICAgICBudW1fcnIgPSBsZW4obHIucnJfY29uZmxpY3RzKQorICAgICAgICBpZiBudW1fcnIgPT0gMToKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIjEgcmVkdWNlL3JlZHVjZSBjb25mbGljdCIpCisgICAgICAgIGVsaWYgbnVtX3JyID4gMToKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIiVkIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3RzIiwgbnVtX3JyKQorCisgICAgIyBXcml0ZSBvdXQgY29uZmxpY3RzIHRvIHRoZSBvdXRwdXQgZmlsZQorICAgIGlmIGRlYnVnIGFuZCAobHIuc3JfY29uZmxpY3RzIG9yIGxyLnJyX2NvbmZsaWN0cyk6CisgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoIiIpCisgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoIkNvbmZsaWN0czoiKQorICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCIiKQorCisgICAgICAgIGZvciBzdGF0ZSwgdG9rLCByZXNvbHV0aW9uIGluIGxyLnNyX2NvbmZsaWN0czoKKyAgICAgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoInNoaWZ0L3JlZHVjZSBjb25mbGljdCBmb3IgJXMgaW4gc3RhdGUgJWQgcmVzb2x2ZWQgYXMgJXMiLCAgdG9rLCBzdGF0ZSwgcmVzb2x1dGlvbikKKyAgICAgICAgCisgICAgICAgIGFscmVhZHlfcmVwb3J0ZWQgPSB7fQorICAgICAgICBmb3Igc3RhdGUsIHJ1bGUsIHJlamVjdGVkIGluIGxyLnJyX2NvbmZsaWN0czoKKyAgICAgICAgICAgIGlmIChzdGF0ZSxpZChydWxlKSxpZChyZWplY3RlZCkpIGluIGFscmVhZHlfcmVwb3J0ZWQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoInJlZHVjZS9yZWR1Y2UgY29uZmxpY3QgaW4gc3RhdGUgJWQgcmVzb2x2ZWQgdXNpbmcgcnVsZSAoJXMpIiwgc3RhdGUsIHJ1bGUpCisgICAgICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJyZWplY3RlZCBydWxlICglcykgaW4gc3RhdGUgJWQiLCByZWplY3RlZCxzdGF0ZSkKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoInJlZHVjZS9yZWR1Y2UgY29uZmxpY3QgaW4gc3RhdGUgJWQgcmVzb2x2ZWQgdXNpbmcgcnVsZSAoJXMpIiwgc3RhdGUsIHJ1bGUpCisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJyZWplY3RlZCBydWxlICglcykgaW4gc3RhdGUgJWQiLCByZWplY3RlZCwgc3RhdGUpCisgICAgICAgICAgICBhbHJlYWR5X3JlcG9ydGVkW3N0YXRlLGlkKHJ1bGUpLGlkKHJlamVjdGVkKV0gPSAxCisgICAgICAgIAorICAgICAgICB3YXJuZWRfbmV2ZXIgPSBbXQorICAgICAgICBmb3Igc3RhdGUsIHJ1bGUsIHJlamVjdGVkIGluIGxyLnJyX2NvbmZsaWN0czoKKyAgICAgICAgICAgIGlmIG5vdCByZWplY3RlZC5yZWR1Y2VkIGFuZCAocmVqZWN0ZWQgbm90IGluIHdhcm5lZF9uZXZlcik6CisgICAgICAgICAgICAgICAgZGVidWdsb2cud2FybmluZygiUnVsZSAoJXMpIGlzIG5ldmVyIHJlZHVjZWQiLCByZWplY3RlZCkKKyAgICAgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJSdWxlICglcykgaXMgbmV2ZXIgcmVkdWNlZCIsIHJlamVjdGVkKQorICAgICAgICAgICAgICAgIHdhcm5lZF9uZXZlci5hcHBlbmQocmVqZWN0ZWQpCisKKyAgICAjIFdyaXRlIHRoZSB0YWJsZSBmaWxlIGlmIHJlcXVlc3RlZAorICAgIGlmIHdyaXRlX3RhYmxlczoKKyAgICAgICAgbHIud3JpdGVfdGFibGUodGFibW9kdWxlLG91dHB1dGRpcixzaWduYXR1cmUpCisKKyAgICAjIFdyaXRlIGEgcGlja2xlZCB2ZXJzaW9uIG9mIHRoZSB0YWJsZXMKKyAgICBpZiBwaWNrbGVmaWxlOgorICAgICAgICBsci5waWNrbGVfdGFibGUocGlja2xlZmlsZSxzaWduYXR1cmUpCisKKyAgICAjIEJ1aWxkIHRoZSBwYXJzZXIKKyAgICBsci5iaW5kX2NhbGxhYmxlcyhwaW5mby5wZGljdCkKKyAgICBwYXJzZXIgPSBMUlBhcnNlcihscixwaW5mby5lcnJvcl9mdW5jKQorCisgICAgcGFyc2UgPSBwYXJzZXIucGFyc2UKKyAgICByZXR1cm4gcGFyc2VyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byb2dyZXNzYmFyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRjZGMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci5weQpAQCAtMCwwICsxLDM4NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCisjCisjIHByb2dyZXNzYmFyICAtIFRleHQgcHJvZ3Jlc3NiYXIgbGlicmFyeSBmb3IgcHl0aG9uLgorIyBDb3B5cmlnaHQgKGMpIDIwMDUgTmlsdG9uIFZvbHBhdG8KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisKKyIiIlRleHQgcHJvZ3Jlc3NiYXIgbGlicmFyeSBmb3IgcHl0aG9uLgorCitUaGlzIGxpYnJhcnkgcHJvdmlkZXMgYSB0ZXh0IG1vZGUgcHJvZ3Jlc3NiYXIuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQKK3RvIGRpc3BsYXkgdGhlIHByb2dyZXNzIG9mIGEgbG9uZyBydW5uaW5nIG9wZXJhdGlvbiwgcHJvdmlkaW5nIGEKK3Zpc3VhbCBjbHVlIHRoYXQgcHJvY2Vzc2luZyBpcyB1bmRlcndheS4KKworVGhlIFByb2dyZXNzQmFyIGNsYXNzIG1hbmFnZXMgdGhlIHByb2dyZXNzLCBhbmQgdGhlIGZvcm1hdCBvZiB0aGUgbGluZQoraXMgZ2l2ZW4gYnkgYSBudW1iZXIgb2Ygd2lkZ2V0cy4gQSB3aWRnZXQgaXMgYW4gb2JqZWN0IHRoYXQgbWF5CitkaXNwbGF5IGRpZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcHJvZ3Jlc3MuIFRoZXJlIGFyZQordGhyZWUgdHlwZXMgb2Ygd2lkZ2V0OgorLSBhIHN0cmluZywgd2hpY2ggYWx3YXlzIHNob3dzIGl0c2VsZjsKKy0gYSBQcm9ncmVzc0JhcldpZGdldCwgd2hpY2ggbWF5IHJldHVybiBhIGRpZmVyZW50IHZhbHVlIGV2ZXJ5IHRpbWUKK2l0J3MgdXBkYXRlIG1ldGhvZCBpcyBjYWxsZWQ7IGFuZAorLSBhIFByb2dyZXNzQmFyV2lkZ2V0SEZpbGwsIHdoaWNoIGlzIGxpa2UgUHJvZ3Jlc3NCYXJXaWRnZXQsIGV4Y2VwdCBpdAorZXhwYW5kcyB0byBmaWxsIHRoZSByZW1haW5pbmcgd2lkdGggb2YgdGhlIGxpbmUuCisKK1RoZSBwcm9ncmVzc2JhciBtb2R1bGUgaXMgdmVyeSBlYXN5IHRvIHVzZSwgeWV0IHZlcnkgcG93ZXJmdWwuIEFuZAorYXV0b21hdGljYWxseSBzdXBwb3J0cyBmZWF0dXJlcyBsaWtlIGF1dG8tcmVzaXppbmcgd2hlbiBhdmFpbGFibGUuCisiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorCitfX2F1dGhvcl9fID0gIk5pbHRvbiBWb2xwYXRvIgorX19hdXRob3JfZW1haWxfXyA9ICJmaXJzdC1uYW1lIGRvdCBsYXN0LW5hbWUgQCBnbWFpbC5jb20iCitfX2RhdGVfXyA9ICIyMDA2LTA1LTA3IgorX192ZXJzaW9uX18gPSAiMi4zLWRldiIKKworaW1wb3J0IHN5cywgdGltZSwgb3MKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5Cit0cnk6CisgICAgZnJvbSBmY250bCBpbXBvcnQgaW9jdGwKKyAgICBpbXBvcnQgdGVybWlvcworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2ltcG9ydCBzaWduYWwKK3RyeToKKyAgICBiYXNlc3RyaW5nCitleGNlcHQgTmFtZUVycm9yOgorICAgIGJhc2VzdHJpbmcgPSAoc3RyLCkKKworY2xhc3MgUHJvZ3Jlc3NCYXJXaWRnZXQob2JqZWN0KToKKyAgICAiIiJUaGlzIGlzIGFuIGVsZW1lbnQgb2YgUHJvZ3Jlc3NCYXIgZm9ybWF0dGluZy4KKworICAgIFRoZSBQcm9ncmVzc0JhciBvYmplY3Qgd2lsbCBjYWxsIGl0J3MgdXBkYXRlIHZhbHVlIHdoZW4gYW4gdXBkYXRlCisgICAgaXMgbmVlZGVkLiBJdCdzIHNpemUgbWF5IGNoYW5nZSBiZXR3ZWVuIGNhbGwsIGJ1dCB0aGUgcmVzdWx0cyB3aWxsCisgICAgbm90IGJlIGdvb2QgaWYgdGhlIHNpemUgY2hhbmdlcyBkcmFzdGljYWxseSBhbmQgcmVwZWF0ZWRseS4KKyAgICAiIiIKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB3aWRnZXQuCisKKyAgICAgICAgVGhlIHBhcmFtZXRlciBwYmFyIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIFByb2dyZXNzQmFyLAorICAgICAgICB3aGVyZSBvbmUgY2FuIGFjY2VzcyBhdHRyaWJ1dGVzIG9mIHRoZSBjbGFzcyBmb3Iga25vd2luZyBob3cKKyAgICAgICAgdGhlIHVwZGF0ZSBtdXN0IGJlIG1hZGUuCisKKyAgICAgICAgQXQgbGVhc3QgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG92ZXJyaWRlbi4iIiIKKyAgICAgICAgcGFzcworCitjbGFzcyBQcm9ncmVzc0JhcldpZGdldEhGaWxsKG9iamVjdCk6CisgICAgIiIiVGhpcyBpcyBhIHZhcmlhYmxlIHdpZHRoIGVsZW1lbnQgb2YgUHJvZ3Jlc3NCYXIgZm9ybWF0dGluZy4KKworICAgIFRoZSBQcm9ncmVzc0JhciBvYmplY3Qgd2lsbCBjYWxsIGl0J3MgdXBkYXRlIHZhbHVlLCBpbmZvcm1pbmcgdGhlCisgICAgd2lkdGggdGhpcyBvYmplY3QgbXVzdCB0aGUgbWFkZS4gVGhpcyBpcyBsaWtlIFRlWCBcXGhmaWxsLCBpdCB3aWxsCisgICAgZXhwYW5kIHRvIGZpbGwgdGhlIGxpbmUuIFlvdSBjYW4gdXNlIG1vcmUgdGhhbiBvbmUgaW4gdGhlIHNhbWUKKyAgICBsaW5lLCBhbmQgdGhleSB3aWxsIGFsbCBoYXZlIHRoZSBzYW1lIHdpZHRoLCBhbmQgdG9nZXRoZXIgd2lsbAorICAgIGZpbGwgdGhlIGxpbmUuCisgICAgIiIiCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyLCB3aWR0aCk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHdpZGdldC4KKworICAgICAgICBUaGUgcGFyYW1ldGVyIHBiYXIgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGNhbGxpbmcgUHJvZ3Jlc3NCYXIsCisgICAgICAgIHdoZXJlIG9uZSBjYW4gYWNjZXNzIGF0dHJpYnV0ZXMgb2YgdGhlIGNsYXNzIGZvciBrbm93aW5nIGhvdworICAgICAgICB0aGUgdXBkYXRlIG11c3QgYmUgbWFkZS4gVGhlIHBhcmFtZXRlciB3aWR0aCBpcyB0aGUgdG90YWwKKyAgICAgICAgaG9yaXpvbnRhbCB3aWR0aCB0aGUgd2lkZ2V0IG11c3QgaGF2ZS4KKworICAgICAgICBBdCBsZWFzdCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3ZlcnJpZGVuLiIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgRVRBKFByb2dyZXNzQmFyV2lkZ2V0KToKKyAgICAiV2lkZ2V0IGZvciB0aGUgRXN0aW1hdGVkIFRpbWUgb2YgQXJyaXZhbCIKKyAgICBkZWYgZm9ybWF0X3RpbWUoc2VsZiwgc2Vjb25kcyk6CisgICAgICAgIHJldHVybiB0aW1lLnN0cmZ0aW1lKCclSDolTTolUycsIHRpbWUuZ210aW1lKHNlY29uZHMpKQorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgIGlmIHBiYXIuY3VycnZhbCA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICdFVEE6ICAtLTotLTotLScKKyAgICAgICAgZWxpZiBwYmFyLmZpbmlzaGVkOgorICAgICAgICAgICAgcmV0dXJuICdUaW1lOiAlcycgJSBzZWxmLmZvcm1hdF90aW1lKHBiYXIuc2Vjb25kc19lbGFwc2VkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWxhcHNlZCA9IHBiYXIuc2Vjb25kc19lbGFwc2VkCisgICAgICAgICAgICBldGEgPSBlbGFwc2VkICogcGJhci5tYXh2YWwgLyBwYmFyLmN1cnJ2YWwgLSBlbGFwc2VkCisgICAgICAgICAgICByZXR1cm4gJ0VUQTogICVzJyAlIHNlbGYuZm9ybWF0X3RpbWUoZXRhKQorCitjbGFzcyBGaWxlVHJhbnNmZXJTcGVlZChQcm9ncmVzc0JhcldpZGdldCk6CisgICAgIldpZGdldCBmb3Igc2hvd2luZyB0aGUgdHJhbnNmZXIgc3BlZWQgKHVzZWZ1bCBmb3IgZmlsZSB0cmFuc2ZlcnMpLiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdW5pdD0nQicpOgorICAgICAgICBzZWxmLnVuaXQgPSB1bml0CisgICAgICAgIHNlbGYuZm10ID0gJyU2LjJmICVzJworICAgICAgICBzZWxmLnByZWZpeGVzID0gWycnLCAnSycsICdNJywgJ0cnLCAnVCcsICdQJ10KKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICBpZiBwYmFyLnNlY29uZHNfZWxhcHNlZCA8IDJlLTY6Iz09IDA6CisgICAgICAgICAgICBicHMgPSAwLjAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJwcyA9IHBiYXIuY3VycnZhbCAvIHBiYXIuc2Vjb25kc19lbGFwc2VkCisgICAgICAgIHNwZCA9IGJwcworICAgICAgICBmb3IgdSBpbiBzZWxmLnByZWZpeGVzOgorICAgICAgICAgICAgaWYgc3BkIDwgMTAwMDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc3BkIC89IDEwMDAKKyAgICAgICAgcmV0dXJuIHNlbGYuZm10ICUgKHNwZCwgdSArIHNlbGYudW5pdCArICcvcycpCisKK2NsYXNzIFJvdGF0aW5nTWFya2VyKFByb2dyZXNzQmFyV2lkZ2V0KToKKyAgICAiQSByb3RhdGluZyBtYXJrZXIgZm9yIGZpbGxpbmcgdGhlIGJhciBvZiBwcm9ncmVzcy4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmtlcnM9J3wvLVxcJyk6CisgICAgICAgIHNlbGYubWFya2VycyA9IG1hcmtlcnMKKyAgICAgICAgc2VsZi5jdXJtYXJrID0gLTEKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICBpZiBwYmFyLmZpbmlzaGVkOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFya2Vyc1swXQorICAgICAgICBzZWxmLmN1cm1hcmsgPSAoc2VsZi5jdXJtYXJrICsgMSkgJSBsZW4oc2VsZi5tYXJrZXJzKQorICAgICAgICByZXR1cm4gc2VsZi5tYXJrZXJzW3NlbGYuY3VybWFya10KKworY2xhc3MgUGVyY2VudGFnZShQcm9ncmVzc0JhcldpZGdldCk6CisgICAgIkp1c3QgdGhlIHBlcmNlbnRhZ2UgZG9uZS4iCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgcmV0dXJuICclM2QlJScgJSBwYmFyLnBlcmNlbnRhZ2UoKQorCitjbGFzcyBTaW1wbGVQcm9ncmVzcyhQcm9ncmVzc0JhcldpZGdldCk6CisgICAgIlJldHVybnMgd2hhdCBpcyBhbHJlYWR5IGRvbmUgYW5kIHRoZSB0b3RhbCwgZS5nLjogJzUgb2YgNDcnIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXA9JyBvZiAnKToKKyAgICAgICAgc2VsZi5zZXAgPSBzZXAKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICByZXR1cm4gJyVkJXMlZCcgJSAocGJhci5jdXJydmFsLCBzZWxmLnNlcCwgcGJhci5tYXh2YWwpCisKK2NsYXNzIEJhcihQcm9ncmVzc0JhcldpZGdldEhGaWxsKToKKyAgICAiVGhlIGJhciBvZiBwcm9ncmVzcy4gSXQgd2lsbCBzdHJldGNoIHRvIGZpbGwgdGhlIGxpbmUuIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrZXI9JyMnLCBsZWZ0PSd8JywgcmlnaHQ9J3wnKToKKyAgICAgICAgc2VsZi5tYXJrZXIgPSBtYXJrZXIKKyAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdAorICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKKyAgICBkZWYgX2Zvcm1hdF9tYXJrZXIoc2VsZiwgcGJhcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5tYXJrZXIsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFya2VyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tYXJrZXIudXBkYXRlKHBiYXIpCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyLCB3aWR0aCk6CisgICAgICAgIHBlcmNlbnQgPSBwYmFyLnBlcmNlbnRhZ2UoKQorICAgICAgICBjd2lkdGggPSB3aWR0aCAtIGxlbihzZWxmLmxlZnQpIC0gbGVuKHNlbGYucmlnaHQpCisgICAgICAgIG1hcmtlZF93aWR0aCA9IGludChwZXJjZW50ICogY3dpZHRoIC8vIDEwMCkKKyAgICAgICAgbSA9IHNlbGYuX2Zvcm1hdF9tYXJrZXIocGJhcikKKyAgICAgICAgYmFyID0gKHNlbGYubGVmdCArIChtICogbWFya2VkX3dpZHRoKS5sanVzdChjd2lkdGgpICsgc2VsZi5yaWdodCkKKyAgICAgICAgcmV0dXJuIGJhcgorCitjbGFzcyBSZXZlcnNlQmFyKEJhcik6CisgICAgIlRoZSByZXZlcnNlIGJhciBvZiBwcm9ncmVzcywgb3IgYmFyIG9mIHJlZ3Jlc3MuIDopIgorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgorICAgICAgICBwZXJjZW50ID0gcGJhci5wZXJjZW50YWdlKCkKKyAgICAgICAgY3dpZHRoID0gd2lkdGggLSBsZW4oc2VsZi5sZWZ0KSAtIGxlbihzZWxmLnJpZ2h0KQorICAgICAgICBtYXJrZWRfd2lkdGggPSBpbnQocGVyY2VudCAqIGN3aWR0aCAvLyAxMDApCisgICAgICAgIG0gPSBzZWxmLl9mb3JtYXRfbWFya2VyKHBiYXIpCisgICAgICAgIGJhciA9IChzZWxmLmxlZnQgKyAobSptYXJrZWRfd2lkdGgpLnJqdXN0KGN3aWR0aCkgKyBzZWxmLnJpZ2h0KQorICAgICAgICByZXR1cm4gYmFyCisKK2RlZmF1bHRfd2lkZ2V0cyA9IFtQZXJjZW50YWdlKCksICcgJywgQmFyKCldCitjbGFzcyBQcm9ncmVzc0JhcihvYmplY3QpOgorICAgICIiIlRoaXMgaXMgdGhlIFByb2dyZXNzQmFyIGNsYXNzLCBpdCB1cGRhdGVzIGFuZCBwcmludHMgdGhlIGJhci4KKworICAgIEEgY29tbW9uIHdheSBvZiB1c2luZyBpdCBpcyBsaWtlOgorICAgID4+PiBwYmFyID0gUHJvZ3Jlc3NCYXIoKS5zdGFydCgpCisgICAgPj4+IGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgIC4uLiAgICAjIGRvIHNvbWV0aGluZworICAgIC4uLiAgICBwYmFyLnVwZGF0ZShpKzEpCisgICAgLi4uCisgICAgPj4+IHBiYXIuZmluaXNoKCkKKworICAgIFlvdSBjYW4gYWxzbyB1c2UgYSBwcm9ncmVzc2JhciBhcyBhbiBpdGVyYXRvcjoKKyAgICA+Pj4gcHJvZ3Jlc3MgPSBQcm9ncmVzc0JhcigpCisgICAgPj4+IGZvciBpIGluIHByb2dyZXNzKHNvbWVfaXRlcmFibGUpOgorICAgIC4uLiAgICAjIGRvIHNvbWV0aGluZworICAgIC4uLgorCisgICAgQnV0IGFueXRoaW5nIHlvdSB3YW50IHRvIGRvIGlzIHBvc3NpYmxlICh3ZWxsLCBhbG1vc3QgYW55dGhpbmcpLgorICAgIFlvdSBjYW4gc3VwcGx5IGRpZmZlcmVudCB3aWRnZXRzIG9mIGFueSB0eXBlIGluIGFueSBvcmRlci4gQW5kIHlvdQorICAgIGNhbiBldmVuIHdyaXRlIHlvdXIgb3duIHdpZGdldHMhIFRoZXJlIGFyZSBtYW55IHdpZGdldHMgYWxyZWFkeQorICAgIHNoaXBwZWQgYW5kIHlvdSBzaG91bGQgZXhwZXJpbWVudCB3aXRoIHRoZW0uCisKKyAgICBUaGUgdGVybV93aWR0aCBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUuIEluIHRoZSBsYXR0ZXIgY2FzZQorICAgIGl0IHdpbGwgdHJ5IHRvIGd1ZXNzIGl0LCBpZiBpdCBmYWlscyBpdCB3aWxsIGRlZmF1bHQgdG8gODAgY29sdW1ucy4KKworICAgIFdoZW4gaW1wbGVtZW50aW5nIGEgd2lkZ2V0IHVwZGF0ZSBtZXRob2QgeW91IG1heSBhY2Nlc3MgYW55CisgICAgYXR0cmlidXRlIG9yIGZ1bmN0aW9uIG9mIHRoZSBQcm9ncmVzc0JhciBvYmplY3QgY2FsbGluZyB0aGUKKyAgICB3aWRnZXQncyB1cGRhdGUgbWV0aG9kLiBUaGUgbW9zdCBpbXBvcnRhbnQgYXR0cmlidXRlcyB5b3Ugd291bGQKKyAgICBsaWtlIHRvIGFjY2VzcyBhcmU6CisgICAgLSBjdXJydmFsOiBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9ncmVzcywgMCA8PSBjdXJydmFsIDw9IG1heHZhbAorICAgIC0gbWF4dmFsOiBtYXhpbXVtIChhbmQgZmluYWwpIHZhbHVlIG9mIHRoZSBwcm9ncmVzcworICAgIC0gZmluaXNoZWQ6IFRydWUgaWYgdGhlIGJhciBoYXMgZmluaXNoZWQgKHJlYWNoZWQgMTAwJSksIEZhbHNlIG8vdworICAgIC0gc3RhcnRfdGltZTogdGhlIHRpbWUgd2hlbiBzdGFydCgpIG1ldGhvZCBvZiBQcm9ncmVzc0JhciB3YXMgY2FsbGVkCisgICAgLSBzZWNvbmRzX2VsYXBzZWQ6IHNlY29uZHMgZWxhcHNlZCBzaW5jZSBzdGFydF90aW1lCisgICAgLSBwZXJjZW50YWdlKCk6IHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzIFswLi4xMDBdLiBUaGlzIGlzIGEgbWV0aG9kLgorCisgICAgVGhlIGF0dHJpYnV0ZXMgYWJvdmUgYXJlIHVubGlrZWx5IHRvIGNoYW5nZSBiZXR3ZWVuIGRpZmZlcmVudCB2ZXJzaW9ucywKKyAgICB0aGUgb3RoZXIgb25lcyBtYXkgY2hhbmdlIG9yIGNlYXNlIHRvIGV4aXN0IHdpdGhvdXQgbm90aWNlLCBzbyB0cnkgdG8gcmVseQorICAgIG9ubHkgb24gdGhlIG9uZXMgZG9jdW1lbnRlZCBhYm92ZSBpZiB5b3UgYXJlIGV4dGVuZGluZyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCdjdXJydmFsJywgJ2ZkJywgJ2ZpbmlzaGVkJywgJ2xhc3RfdXBkYXRlX3RpbWUnLCAnbWF4dmFsJywKKyAgICAgICAgICAgICAgICAgJ25leHRfdXBkYXRlJywgJ251bV9pbnRlcnZhbHMnLCAnc2Vjb25kc19lbGFwc2VkJywKKyAgICAgICAgICAgICAgICAgJ3NpZ25hbF9zZXQnLCAnc3RhcnRfdGltZScsICd0ZXJtX3dpZHRoJywgJ3VwZGF0ZV9pbnRlcnZhbCcsCisgICAgICAgICAgICAgICAgICd3aWRnZXRzJywgJ19pdGVyYWJsZScpCisKKyAgICBfREVGQVVMVF9NQVhWQUwgPSAxMDAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXh2YWw9Tm9uZSwgd2lkZ2V0cz1kZWZhdWx0X3dpZGdldHMsIHRlcm1fd2lkdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZmQ9c3lzLnN0ZGVycik6CisgICAgICAgIHNlbGYubWF4dmFsID0gbWF4dmFsCisgICAgICAgIHNlbGYud2lkZ2V0cyA9IHdpZGdldHMKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgICAgIHNlbGYuc2lnbmFsX3NldCA9IEZhbHNlCisgICAgICAgIGlmIHRlcm1fd2lkdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnRlcm1fd2lkdGggPSB0ZXJtX3dpZHRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3Jlc2l6ZShOb25lLCBOb25lKQorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzZWxmLl9oYW5kbGVfcmVzaXplKQorICAgICAgICAgICAgICAgIHNlbGYuc2lnbmFsX3NldCA9IFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCAoU3lzdGVtRXhpdCwgS2V5Ym9hcmRJbnRlcnJ1cHQpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi50ZXJtX3dpZHRoID0gaW50KG9zLmVudmlyb24uZ2V0KCdDT0xVTU5TJywgODApKSAtIDEKKworICAgICAgICBzZWxmLmN1cnJ2YWwgPSAwCisgICAgICAgIHNlbGYuZmluaXNoZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF91cGRhdGVfdGltZSA9IE5vbmUKKyAgICAgICAgc2VsZi5zZWNvbmRzX2VsYXBzZWQgPSAwCisgICAgICAgIHNlbGYuX2l0ZXJhYmxlID0gTm9uZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5tYXh2YWwgPSBsZW4oaXRlcmFibGUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAjIElmIHRoZSBpdGVyYWJsZSBoYXMgbm8gbGVuZ3RoLCB0aGVuIHJlbHkgb24gdGhlIHZhbHVlIHByb3ZpZGVkCisgICAgICAgICAgICAjIGJ5IHRoZSB1c2VyLCBvdGhlcndpc2UgZmFpbC4KKyAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShzZWxmLm1heHZhbCwgKGludCwgbG9uZykpIGFuZCBzZWxmLm1heHZhbCA+IDApOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ291bGQgbm90IGRldGVybWluZSBtYXh2YWwgZnJvbSBpdGVyYWJsZS4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91IG11c3QgZXhwbGljaXRseSBwcm92aWRlIGEgbWF4dmFsLicpCisgICAgICAgIHNlbGYuX2l0ZXJhYmxlID0gaXRlcihpdGVyYWJsZSkKKyAgICAgICAgc2VsZi5zdGFydCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV4dCA9IHNlbGYuX2l0ZXJhYmxlLm5leHQoKQorICAgICAgICAgICAgc2VsZi51cGRhdGUoc2VsZi5jdXJydmFsICsgMSkKKyAgICAgICAgICAgIHJldHVybiBuZXh0CisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgc2VsZi5maW5pc2goKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfaGFuZGxlX3Jlc2l6ZShzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaCwgdyA9IGFycmF5KCdoJywgaW9jdGwoc2VsZi5mZCwgdGVybWlvcy5USU9DR1dJTlNaLCAnXDAnICogOCkpWzoyXQorICAgICAgICBzZWxmLnRlcm1fd2lkdGggPSB3CisKKyAgICBkZWYgcGVyY2VudGFnZShzZWxmKToKKyAgICAgICAgIlJldHVybnMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHByb2dyZXNzLiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY3VycnZhbCAqIDEwMC4wIC8gc2VsZi5tYXh2YWwKKworICAgIGRlZiBfZm9ybWF0X3dpZGdldHMoc2VsZik6CisgICAgICAgIHIgPSBbXQorICAgICAgICBoZmlsbF9pbmRzID0gW10KKyAgICAgICAgbnVtX2hmaWxsID0gMAorICAgICAgICBjdXJyd2lkdGggPSAwCisgICAgICAgIGZvciBpLCB3IGluIGVudW1lcmF0ZShzZWxmLndpZGdldHMpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh3LCBQcm9ncmVzc0JhcldpZGdldEhGaWxsKToKKyAgICAgICAgICAgICAgICByLmFwcGVuZCh3KQorICAgICAgICAgICAgICAgIGhmaWxsX2luZHMuYXBwZW5kKGkpCisgICAgICAgICAgICAgICAgbnVtX2hmaWxsICs9IDEKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh3LCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICByLmFwcGVuZCh3KQorICAgICAgICAgICAgICAgIGN1cnJ3aWR0aCArPSBsZW4odykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2V2YWwgPSB3LnVwZGF0ZShzZWxmKQorICAgICAgICAgICAgICAgIGN1cnJ3aWR0aCArPSBsZW4od2V2YWwpCisgICAgICAgICAgICAgICAgci5hcHBlbmQod2V2YWwpCisgICAgICAgIGZvciBpdyBpbiBoZmlsbF9pbmRzOgorICAgICAgICAgICAgd2lkZ2V0X3dpZHRoID0gaW50KChzZWxmLnRlcm1fd2lkdGggLSBjdXJyd2lkdGgpIC8vIG51bV9oZmlsbCkKKyAgICAgICAgICAgIHJbaXddID0gcltpd10udXBkYXRlKHNlbGYsIHdpZGdldF93aWR0aCkKKyAgICAgICAgcmV0dXJuIHIKKworICAgIGRlZiBfZm9ybWF0X2xpbmUoc2VsZik6CisgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuX2Zvcm1hdF93aWRnZXRzKCkpLmxqdXN0KHNlbGYudGVybV93aWR0aCkKKworICAgIGRlZiBfbmV4dF91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBpbnQoKGludChzZWxmLm51bV9pbnRlcnZhbHMgKgorICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycnZhbCAvIHNlbGYubWF4dmFsKSkgKyAxKSAqCisgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfaW50ZXJ2YWwpCisKKyAgICBkZWYgX25lZWRfdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgd2hlbiB0aGUgcHJvZ3Jlc3NiYXIgc2hvdWxkIHByaW50IGFuIHVwZGF0ZWQgbGluZS4KKworICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHlvdSB3YW50IGZpbmVyIGdyYWluZWQgY29udHJvbCBvdmVyCisgICAgICAgIHVwZGF0ZXMuCisKKyAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgb3B0aW1pemVkIHRvIGJlIGFzIGZhc3QgYXMgcG9zc2libGUgYW5kCisgICAgICAgIGFzIGVjb25vbWljYWwgYXMgcG9zc2libGUgaW4gdGhlIG51bWJlciBvZiB1cGRhdGVzLiBIb3dldmVyLCBkZXBlbmRpbmcKKyAgICAgICAgb24geW91ciB1c2FnZSB5b3UgbWF5IHdhbnQgdG8gZG8gbW9yZSB1cGRhdGVzLiBGb3IgaW5zdGFuY2UsIGlmIHlvdXIKKyAgICAgICAgcHJvZ3Jlc3NiYXIgc3RheXMgaW4gdGhlIHNhbWUgcGVyY2VudGFnZSBmb3IgYSBsb25nIHRpbWUsIGFuZCB5b3Ugd2FudAorICAgICAgICB0byB1cGRhdGUgb3RoZXIgd2lkZ2V0cywgbGlrZSBFVEEsIHRoZW4geW91IGNvdWxkIHJldHVybiBUcnVlIGFmdGVyCisgICAgICAgIHNvbWUgdGltZSBoYXMgcGFzc2VkIHdpdGggbm8gdXBkYXRlcy4KKworICAgICAgICBJZGVhbGx5IHlvdSBjb3VsZCBjYWxsIHNlbGYuX2Zvcm1hdF9saW5lKCkgYW5kIHNlZSBpZiBpdCdzIGRpZmZlcmVudAorICAgICAgICBmcm9tIHRoZSBwcmV2aW91cyBfZm9ybWF0X2xpbmUoKSBjYWxsLCBidXQgY2FsbGluZyBfZm9ybWF0X2xpbmUoKSB0YWtlcworICAgICAgICBhcm91bmQgMjAgdGltZXMgbW9yZSB0aW1lIHRoYW4gY2FsbGluZyB0aGlzIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIF9uZWVkX3VwZGF0ZSgpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY3VycnZhbCA+PSBzZWxmLm5leHRfdXBkYXRlCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIlVwZGF0ZXMgdGhlIHByb2dyZXNzIGJhciB0byBhIG5ldyB2YWx1ZS4iCisgICAgICAgIGFzc2VydCAwIDw9IHZhbHVlIDw9IHNlbGYubWF4dmFsLCAnMCA8PSAlZCA8PSAlZCcgJSAodmFsdWUsIHNlbGYubWF4dmFsKQorICAgICAgICBzZWxmLmN1cnJ2YWwgPSB2YWx1ZQorICAgICAgICBpZiBub3Qgc2VsZi5fbmVlZF91cGRhdGUoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLnN0YXJ0X3RpbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignWW91IG11c3QgY2FsbCBzdGFydCgpIGJlZm9yZSBjYWxsaW5nIHVwZGF0ZSgpJykKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5zZWNvbmRzX2VsYXBzZWQgPSBub3cgLSBzZWxmLnN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5uZXh0X3VwZGF0ZSA9IHNlbGYuX25leHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5mZC53cml0ZShzZWxmLl9mb3JtYXRfbGluZSgpICsgJ1xyJykKKyAgICAgICAgc2VsZi5sYXN0X3VwZGF0ZV90aW1lID0gbm93CisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgICIiIlN0YXJ0cyBtZWFzdXJpbmcgdGltZSwgYW5kIHByaW50cyB0aGUgYmFyIGF0IDAlLgorCisgICAgICAgIEl0IHJldHVybnMgc2VsZiBzbyB5b3UgY2FuIHVzZSBpdCBsaWtlIHRoaXM6CisgICAgICAgID4+PiBwYmFyID0gUHJvZ3Jlc3NCYXIoKS5zdGFydCgpCisgICAgICAgID4+PiBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgLi4uICAgICMgZG8gc29tZXRoaW5nCisgICAgICAgIC4uLiAgICBwYmFyLnVwZGF0ZShpKzEpCisgICAgICAgIC4uLgorICAgICAgICA+Pj4gcGJhci5maW5pc2goKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5tYXh2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubWF4dmFsID0gc2VsZi5fREVGQVVMVF9NQVhWQUwKKyAgICAgICAgYXNzZXJ0IHNlbGYubWF4dmFsID4gMAorCisgICAgICAgIHNlbGYubnVtX2ludGVydmFscyA9IG1heCgxMDAsIHNlbGYudGVybV93aWR0aCkKKyAgICAgICAgc2VsZi51cGRhdGVfaW50ZXJ2YWwgPSBzZWxmLm1heHZhbCAvIHNlbGYubnVtX2ludGVydmFscworICAgICAgICBzZWxmLm5leHRfdXBkYXRlID0gMAorCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHNlbGYubGFzdF91cGRhdGVfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYudXBkYXRlKDApCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICAiIiJVc2VkIHRvIHRlbGwgdGhlIHByb2dyZXNzIGlzIGZpbmlzaGVkLiIiIgorICAgICAgICBzZWxmLmZpbmlzaGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnVwZGF0ZShzZWxmLm1heHZhbCkKKyAgICAgICAgc2VsZi5mZC53cml0ZSgnXG4nKQorICAgICAgICBpZiBzZWxmLnNpZ25hbF9zZXQ6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdXSU5DSCwgc2lnbmFsLlNJR19ERkwpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzY2I3M2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE0IEBACitfX3ZlcnNpb25fXyA9ICIxLjAuMCIKKworaW1wb3J0IG9zLCB0aW1lCitpbXBvcnQgc3lzLGxvZ2dpbmcKKworZGVmIGluaXRfbG9nZ2VyKGxvZ2ZpbGUsIGxvZ2xldmVsKToKKyAgICBudW1lcmljX2xldmVsID0gZ2V0YXR0cihsb2dnaW5nLCBsb2dsZXZlbC51cHBlcigpLCBOb25lKQorICAgIGlmIG5vdCBpc2luc3RhbmNlKG51bWVyaWNfbGV2ZWwsIGludCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgbG9nIGxldmVsOiAlcycgJSBsb2dsZXZlbCkKKyAgICBGT1JNQVQgPSAnJShhc2N0aW1lKS0xNXMgJShtZXNzYWdlKXMnCisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1udW1lcmljX2xldmVsLCBmaWxlbmFtZT1sb2dmaWxlLCBmb3JtYXQ9Rk9STUFUKQorCitjbGFzcyBOb3RGb3VuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvZGIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9kYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzc5NTgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9wcnNlcnYvZGIucHkKQEAgLTAsMCArMSwyNjggQEAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IGVycm5vCitpbXBvcnQgcHJzZXJ2CitpbXBvcnQgdGltZQorCit0cnk6CisgICAgaW1wb3J0IHNxbGl0ZTMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIHB5c3FsaXRlMiBpbXBvcnQgZGJhcGkyIGFzIHNxbGl0ZTMKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUFJzZXJ2IikKKworc3FsdmVyc2lvbiA9IHNxbGl0ZTMuc3FsaXRlX3ZlcnNpb25faW5mbworaWYgc3FsdmVyc2lvblswXSA8IDMgb3IgKHNxbHZlcnNpb25bMF0gPT0gMyBhbmQgc3FsdmVyc2lvblsxXSA8IDMpOgorICAgIHJhaXNlIEV4Y2VwdGlvbigic3FsaXRlMyB2ZXJzaW9uIDMuMy4wIG9yIGxhdGVyIGlzIHJlcXVpcmVkLiIpCisKKyMKKyMgIk5vIEhpc3RvcnkiIG1vZGUgLSBmb3IgYSBnaXZlbiBxdWVyeSB0dXBsZSAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pLAorIyB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSB0aGUgbGFyZ2VzdCBhbW9uZyBhbGwgdGhlIHZhbHVlcyBvZiB0aGUgc2FtZQorIyAodmVyc2lvbiwgcGtnYXJjaCkuIFRoaXMgbWVhbnMgdGhlIFBSIHZhbHVlIHJldHVybmVkIGNhbiBOT1QgYmUgZGVjcmVtZW50ZWQuCisjCisjICJIaXN0b3J5IiBtb2RlIC0gUmV0dXJuIGEgbmV3IGhpZ2hlciB2YWx1ZSBmb3IgcHJldmlvdXNseSB1bnNlZW4gcXVlcnkKKyMgdHVwbGUgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSwgb3RoZXJ3aXNlIHJldHVybiBoaXN0b3JpY2FsIHZhbHVlLgorIyBWYWx1ZSBjYW4gZGVjcmVtZW50IGlmIHJldHVybmluZyB0byBhIHByZXZpb3VzIGJ1aWxkLgorIworCitjbGFzcyBQUlRhYmxlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4sIHRhYmxlLCBub2hpc3QpOgorICAgICAgICBzZWxmLmNvbm4gPSBjb25uCisgICAgICAgIHNlbGYubm9oaXN0ID0gbm9oaXN0CisgICAgICAgIHNlbGYuZGlydHkgPSBGYWxzZQorICAgICAgICBpZiBub2hpc3Q6CisgICAgICAgICAgICBzZWxmLnRhYmxlID0gIiVzX25vaGlzdCIgJSB0YWJsZSAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGFibGUgPSAiJXNfaGlzdCIgJSB0YWJsZSAKKworICAgICAgICBzZWxmLl9leGVjdXRlKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAlcyBcCisgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uIFRFWFQgTk9UIE5VTEwsIFwKKyAgICAgICAgICAgICAgICAgICAgcGtnYXJjaCBURVhUIE5PVCBOVUxMLCAgXAorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSBURVhUIE5PVCBOVUxMLCBcCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIElOVEVHRVIsIFwKKyAgICAgICAgICAgICAgICAgICAgUFJJTUFSWSBLRVkgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSk7IiAlIHNlbGYudGFibGUpCisKKyAgICBkZWYgX2V4ZWN1dGUoc2VsZiwgKnF1ZXJ5KToKKyAgICAgICAgIiIiRXhlY3V0ZSBhIHF1ZXJ5LCB3YWl0aW5nIHRvIGFjcXVpcmUgYSBsb2NrIGlmIG5lY2Vzc2FyeSIiIgorICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIGVuZCA9IHN0YXJ0ICsgMjAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25uLmV4ZWN1dGUoKnF1ZXJ5KQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZTMuT3BlcmF0aW9uYWxFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgJ2lzIGxvY2tlZCcgaW4gc3RyKGV4YykgYW5kIGVuZCA+IHRpbWUudGltZSgpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJhaXNlIGV4YworCisgICAgZGVmIHN5bmMoc2VsZik6CisgICAgICAgIHNlbGYuY29ubi5jb21taXQoKQorICAgICAgICBzZWxmLl9leGVjdXRlKCJCRUdJTiBFWENMVVNJVkUgVFJBTlNBQ1RJT04iKQorCisgICAgZGVmIHN5bmNfaWZfZGlydHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGlydHk6CisgICAgICAgICAgICBzZWxmLnN5bmMoKQorICAgICAgICAgICAgc2VsZi5kaXJ0eSA9IEZhbHNlCisKKyAgICBkZWYgX2dldFZhbHVlSGlzdChzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSk6CisgICAgICAgIGRhdGE9c2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXMgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT87IiAlIHNlbGYudGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pKQorICAgICAgICByb3c9ZGF0YS5mZXRjaG9uZSgpCisgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI25vIHZhbHVlIGZvdW5kLCB0cnkgdG8gaW5zZXJ0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIElOVE8gJXMgVkFMVUVTICg/LCA/LCA/LCAoc2VsZWN0IGlmbnVsbChtYXgodmFsdWUpKzEsMCkgZnJvbSAlcyB3aGVyZSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PykpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYudGFibGUsc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbixwa2dhcmNoLCBjaGVja3N1bSx2ZXJzaW9uLCBwa2dhcmNoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgICAgIHNlbGYuZGlydHkgPSBUcnVlCisKKyAgICAgICAgICAgIGRhdGE9c2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXMgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT87IiAlIHNlbGYudGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSkKKyAgICAgICAgICAgIHJvdz1kYXRhLmZldGNob25lKCkKKyAgICAgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiByb3dbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgcHJzZXJ2Lk5vdEZvdW5kRXJyb3IKKworICAgIGRlZiBfZ2V0VmFsdWVOb2hpc3Qoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pOgorICAgICAgICBkYXRhPXNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PyBBTkQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID49IChzZWxlY3QgbWF4KHZhbHVlKSBmcm9tICVzIHdoZXJlIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/KTsiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYudGFibGUsIHNlbGYudGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmVyc2lvbiwgcGtnYXJjaCkpCisgICAgICAgIHJvdz1kYXRhLmZldGNob25lKCkKKyAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gcm93WzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjbm8gdmFsdWUgZm91bmQsIHRyeSB0byBpbnNlcnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlKCJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPICVzIFZBTFVFUyAoPywgPywgPywgKHNlbGVjdCBpZm51bGwobWF4KHZhbHVlKSsxLDApIGZyb20gJXMgd2hlcmUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8pKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi50YWJsZSxzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZlcnNpb24sIHBrZ2FyY2gpKQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZTMuSW50ZWdyaXR5RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm4ucm9sbGJhY2soKQorCisgICAgICAgICAgICBzZWxmLmRpcnR5ID0gVHJ1ZQorCisgICAgICAgICAgICBkYXRhPXNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgICAgICByb3c9ZGF0YS5mZXRjaG9uZSgpCisgICAgICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcm93WzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIHByc2Vydi5Ob3RGb3VuZEVycm9yCisKKyAgICBkZWYgZ2V0VmFsdWUoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pOgorICAgICAgICBpZiBzZWxmLm5vaGlzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRWYWx1ZU5vaGlzdCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRWYWx1ZUhpc3QodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisKKyAgICBkZWYgX2ltcG9ydEhpc3Qoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKToKKyAgICAgICAgdmFsID0gTm9uZSAKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSkKKyAgICAgICAgcm93ID0gZGF0YS5mZXRjaG9uZSgpCisgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgdmFsPXJvd1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI25vIHZhbHVlIGZvdW5kLCB0cnkgdG8gaW5zZXJ0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIElOVE8gJXMgVkFMVUVTICg/LCA/LCA/LCA/KTsiICAlIChzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpKQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZTMuSW50ZWdyaXR5RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKworICAgICAgICAgICAgc2VsZi5kaXJ0eSA9IFRydWUKKworICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSkKKyAgICAgICAgICAgIHJvdyA9IGRhdGEuZmV0Y2hvbmUoKQorICAgICAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgdmFsID0gcm93WzBdCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBfaW1wb3J0Tm9oaXN0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICN0cnkgdG8gaW5zZXJ0CisgICAgICAgICAgICBzZWxmLl9leGVjdXRlKCJJTlNFUlQgSU5UTyAlcyBWQUxVRVMgKD8sID8sID8sID8pOyIgICUgKHNlbGYudGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLHZhbHVlKSkKKyAgICAgICAgZXhjZXB0IHNxbGl0ZTMuSW50ZWdyaXR5RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgI2FscmVhZHkgaGF2ZSB0aGUgcmVjb3JkLCB0cnkgdG8gdXBkYXRlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiVVBEQVRFICVzIFNFVCB2YWx1ZT0/IFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/IEFORCB2YWx1ZTw/IiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsdmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgc2VsZi5kaXJ0eSA9IFRydWUKKworICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXMgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT8gQU5EIHZhbHVlPj0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUpKQorICAgICAgICByb3c9ZGF0YS5mZXRjaG9uZSgpCisgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpbXBvcnRvbmUoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKToKKyAgICAgICAgaWYgc2VsZi5ub2hpc3Q6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faW1wb3J0Tm9oaXN0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbXBvcnRIaXN0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkKKworICAgIGRlZiBleHBvcnQoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIGNvbGluZm8pOgorICAgICAgICBtZXRhaW5mbyA9IHt9CisgICAgICAgICNjb2x1bW4gaW5mbyAKKyAgICAgICAgaWYgY29saW5mbzoKKyAgICAgICAgICAgIG1ldGFpbmZvWyd0YmxfbmFtZSddID0gc2VsZi50YWJsZQorICAgICAgICAgICAgbWV0YWluZm9bJ2NvcmVfdmVyJ10gPSBwcnNlcnYuX192ZXJzaW9uX18KKyAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddID0gW10KKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJQUkFHTUEgdGFibGVfaW5mbyglcyk7IiAlIHNlbGYudGFibGUpCisgICAgICAgICAgICBmb3Igcm93IGluIGRhdGE6CisgICAgICAgICAgICAgICAgY29sID0ge30KKyAgICAgICAgICAgICAgICBjb2xbJ25hbWUnXSA9IHJvd1snbmFtZSddCisgICAgICAgICAgICAgICAgY29sWyd0eXBlJ10gPSByb3dbJ3R5cGUnXQorICAgICAgICAgICAgICAgIGNvbFsnbm90bnVsbCddID0gcm93Wydub3RudWxsJ10KKyAgICAgICAgICAgICAgICBjb2xbJ2RmbHRfdmFsdWUnXSA9IHJvd1snZGZsdF92YWx1ZSddCisgICAgICAgICAgICAgICAgY29sWydwayddID0gcm93WydwayddCisgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ10uYXBwZW5kKGNvbCkKKworICAgICAgICAjZGF0YSBpbmZvCisgICAgICAgIGRhdGFpbmZvID0gW10KKworICAgICAgICBpZiBzZWxmLm5vaGlzdDoKKyAgICAgICAgICAgIHNxbHN0bXQgPSAiU0VMRUNUIFQxLnZlcnNpb24sIFQxLnBrZ2FyY2gsIFQxLmNoZWNrc3VtLCBUMS52YWx1ZSBGUk9NICVzIGFzIFQxLCBcCisgICAgICAgICAgICAgICAgICAgIChTRUxFQ1QgdmVyc2lvbixwa2dhcmNoLG1heCh2YWx1ZSkgYXMgbWF4dmFsdWUgRlJPTSAlcyBHUk9VUCBCWSB2ZXJzaW9uLHBrZ2FyY2gpIGFzIFQyIFwKKyAgICAgICAgICAgICAgICAgICAgV0hFUkUgVDEudmVyc2lvbj1UMi52ZXJzaW9uIEFORCBUMS5wa2dhcmNoPVQyLnBrZ2FyY2ggQU5EIFQxLnZhbHVlPVQyLm1heHZhbHVlICIgJSAoc2VsZi50YWJsZSwgc2VsZi50YWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNxbHN0bXQgPSAiU0VMRUNUICogRlJPTSAlcyBhcyBUMSBXSEVSRSAxPTEgIiAlIHNlbGYudGFibGUKKyAgICAgICAgc3FsYXJnID0gW10KKyAgICAgICAgd2hlcmUgPSAiIgorICAgICAgICBpZiB2ZXJzaW9uOgorICAgICAgICAgICAgd2hlcmUgKz0gIkFORCBUMS52ZXJzaW9uPT8gIgorICAgICAgICAgICAgc3FsYXJnLmFwcGVuZChzdHIodmVyc2lvbikpCisgICAgICAgIGlmIHBrZ2FyY2g6CisgICAgICAgICAgICB3aGVyZSArPSAiQU5EIFQxLnBrZ2FyY2g9PyAiCisgICAgICAgICAgICBzcWxhcmcuYXBwZW5kKHN0cihwa2dhcmNoKSkKKyAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICB3aGVyZSArPSAiQU5EIFQxLmNoZWNrc3VtPT8gIgorICAgICAgICAgICAgc3FsYXJnLmFwcGVuZChzdHIoY2hlY2tzdW0pKQorCisgICAgICAgIHNxbHN0bXQgKz0gd2hlcmUgKyAiOyIKKworICAgICAgICBpZiBsZW4oc3FsYXJnKToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKHNxbHN0bXQsIHR1cGxlKHNxbGFyZykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZShzcWxzdG10KQorICAgICAgICBmb3Igcm93IGluIGRhdGE6CisgICAgICAgICAgICBpZiByb3dbJ3ZlcnNpb24nXToKKyAgICAgICAgICAgICAgICBjb2wgPSB7fQorICAgICAgICAgICAgICAgIGNvbFsndmVyc2lvbiddID0gcm93Wyd2ZXJzaW9uJ10KKyAgICAgICAgICAgICAgICBjb2xbJ3BrZ2FyY2gnXSA9IHJvd1sncGtnYXJjaCddCisgICAgICAgICAgICAgICAgY29sWydjaGVja3N1bSddID0gcm93WydjaGVja3N1bSddCisgICAgICAgICAgICAgICAgY29sWyd2YWx1ZSddID0gcm93Wyd2YWx1ZSddCisgICAgICAgICAgICAgICAgZGF0YWluZm8uYXBwZW5kKGNvbCkKKyAgICAgICAgcmV0dXJuIChtZXRhaW5mbywgZGF0YWluZm8pCisKK2NsYXNzIFBSRGF0YShvYmplY3QpOgorICAgICIiIk9iamVjdCByZXByZXNlbnRpbmcgdGhlIFBSIGRhdGFiYXNlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBub2hpc3Q9VHJ1ZSk6CisgICAgICAgIHNlbGYuZmlsZW5hbWU9b3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKQorICAgICAgICBzZWxmLm5vaGlzdD1ub2hpc3QKKyAgICAgICAgI2J1aWxkIGRpcmVjdG9yeSBoaWVyYXJjaHkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKHNlbGYuZmlsZW5hbWUpKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorICAgICAgICBzZWxmLmNvbm5lY3Rpb249c3FsaXRlMy5jb25uZWN0KHNlbGYuZmlsZW5hbWUsIGlzb2xhdGlvbl9sZXZlbD0iRVhDTFVTSVZFIiwgY2hlY2tfc2FtZV90aHJlYWQgPSBGYWxzZSkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJvd19mYWN0b3J5PXNxbGl0ZTMuUm93CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5leGVjdXRlKCJwcmFnbWEgc3luY2hyb25vdXMgPSBvZmY7IikKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLmV4ZWN1dGUoIlBSQUdNQSBqb3VybmFsX21vZGUgPSBXQUw7IikKKyAgICAgICAgc2VsZi5fdGFibGVzPXt9CisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLmNsb3NlKCkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLHRibG5hbWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YmxuYW1lLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGJsbmFtZSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBub3QgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUodGJsbmFtZSkpCisgICAgICAgIGlmIHRibG5hbWUgaW4gc2VsZi5fdGFibGVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3RhYmxlc1t0YmxuYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFibGVvYmogPSBzZWxmLl90YWJsZXNbdGJsbmFtZV0gPSBQUlRhYmxlKHNlbGYuY29ubmVjdGlvbiwgdGJsbmFtZSwgc2VsZi5ub2hpc3QpCisgICAgICAgICAgICByZXR1cm4gdGFibGVvYmoKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCB0YmxuYW1lKToKKyAgICAgICAgaWYgdGJsbmFtZSBpbiBzZWxmLl90YWJsZXM6CisgICAgICAgICAgICBkZWwgc2VsZi5fdGFibGVzW3RibG5hbWVdCisgICAgICAgIGxvZ2dlci5pbmZvKCJkcm9wIHRhYmxlICVzIiAlICh0YmxuYW1lKSkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLmV4ZWN1dGUoIkRST1AgVEFCTEUgSUYgRVhJU1RTICVzOyIgJSB0YmxuYW1lKSAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvcHJzZXJ2L3NlcnYucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9zZXJ2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMGZmYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3Byc2Vydi9zZXJ2LnB5CkBAIC0wLDAgKzEsNDE4IEBACitpbXBvcnQgb3Msc3lzLGxvZ2dpbmcKK2ltcG9ydCBzaWduYWwsIHRpbWUKK2Zyb20gU2ltcGxlWE1MUlBDU2VydmVyIGltcG9ydCBTaW1wbGVYTUxSUENTZXJ2ZXIsIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgUXVldWUKKwordHJ5OgorICAgIGltcG9ydCBzcWxpdGUzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBweXNxbGl0ZTIgaW1wb3J0IGRiYXBpMiBhcyBzcWxpdGUzCisKK2ltcG9ydCBiYi5zZXJ2ZXIueG1scnBjCitpbXBvcnQgcHJzZXJ2CitpbXBvcnQgcHJzZXJ2LmRiCitpbXBvcnQgZXJybm8KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUFJzZXJ2IikKKworaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDYwMEYwOgorICAgIHByaW50KCJTb3JyeSwgcHl0aG9uIDIuNiBvciBsYXRlciBpcyByZXF1aXJlZC4iKQorICAgIHN5cy5leGl0KDEpCisKK2NsYXNzIEhhbmRsZXIoU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBfZGlzcGF0Y2goc2VsZixtZXRob2QscGFyYW1zKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWU9c2VsZi5zZXJ2ZXIuZnVuY3NbbWV0aG9kXSgqcGFyYW1zKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiB2YWx1ZQorCitQSURQUkVGSVggPSAiL3RtcC9QUlNlcnZlcl8lc18lcy5waWQiCitzaW5nbGV0b24gPSBOb25lCisKKworY2xhc3MgUFJTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGJmaWxlLCBsb2dmaWxlLCBpbnRlcmZhY2UsIGRhZW1vbj1UcnVlKToKKyAgICAgICAgJycnIGNvbnN0cnVjdG9yICcnJworICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5fX2luaXRfXyhzZWxmLCBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9RmFsc2UsIGFsbG93X25vbmU9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGlwPXNvY2tldC5nZXRob3N0YnluYW1lKGludGVyZmFjZVswXSkKKyAgICAgICAgICAgIHBvcnQ9aW50ZXJmYWNlWzFdCisgICAgICAgICAgICBtc2c9IlBSIFNlcnZlciB1bmFibGUgdG8gYmluZCB0byAlczolc1xuIiAlIChpcCwgcG9ydCkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUobXNnKQorICAgICAgICAgICAgcmFpc2UgUFJTZXJ2aWNlQ29uZmlnRXJyb3IKKworICAgICAgICBzZWxmLmRiZmlsZT1kYmZpbGUKKyAgICAgICAgc2VsZi5kYWVtb249ZGFlbW9uCisgICAgICAgIHNlbGYubG9nZmlsZT1sb2dmaWxlCisgICAgICAgIHNlbGYud29ya2luZ190aHJlYWQ9Tm9uZQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5waWRmaWxlPVBJRFBSRUZJWCAlIChzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYuZ2V0UFIsICJnZXRQUiIpCisgICAgICAgIHNlbGYucmVnaXN0ZXJfZnVuY3Rpb24oc2VsZi5xdWl0LCAicXVpdCIpCisgICAgICAgIHNlbGYucmVnaXN0ZXJfZnVuY3Rpb24oc2VsZi5waW5nLCAicGluZyIpCisgICAgICAgIHNlbGYucmVnaXN0ZXJfZnVuY3Rpb24oc2VsZi5leHBvcnQsICJleHBvcnQiKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYuaW1wb3J0b25lLCAiaW1wb3J0b25lIikKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCisKKyAgICAgICAgc2VsZi5kYiA9IHByc2Vydi5kYi5QUkRhdGEoc2VsZi5kYmZpbGUpCisgICAgICAgIHNlbGYudGFibGUgPSBzZWxmLmRiWyJQUk1BSU4iXQorCisgICAgICAgIHNlbGYucmVxdWVzdHF1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLmhhbmRsZXJ0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldCA9IHNlbGYucHJvY2Vzc19yZXF1ZXN0X3RocmVhZCkKKyAgICAgICAgc2VsZi5oYW5kbGVydGhyZWFkLmRhZW1vbiA9IEZhbHNlCisKKyAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0X3RocmVhZChzZWxmKToKKyAgICAgICAgIiIiU2FtZSBhcyBpbiBCYXNlU2VydmVyIGJ1dCBhcyBhIHRocmVhZC4KKworICAgICAgICBJbiBhZGRpdGlvbiwgZXhjZXB0aW9uIGhhbmRsaW5nIGlzIGRvbmUgaGVyZS4KKworICAgICAgICAiIiIKKyAgICAgICAgaXRlcl9jb3VudCA9IDEKKyAgICAgICAgIyA2MCBpdGVyYXRpb25zIGJldHdlZW4gc3luY3Mgb3Igc3luYyBpZiBkaXJ0eSBldmVyeSB+MzAgc2Vjb25kcworICAgICAgICBpdGVyYXRpb25zX2JldHdlZW5fc3luYyA9IDYwCisKKyAgICAgICAgd2hpbGUgbm90IHNlbGYucXVpdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpID0gc2VsZi5yZXF1ZXN0cXVldWUuZ2V0KFRydWUsIDMwKQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc3luY19pZl9kaXJ0eSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgICAgIGl0ZXJfY291bnQgPSAoaXRlcl9jb3VudCArIDEpICUgaXRlcmF0aW9uc19iZXR3ZWVuX3N5bmMKKyAgICAgICAgICAgICAgICBpZiBpdGVyX2NvdW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc3luY19pZl9kaXJ0eSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zeW5jKCkKKyAgICAgICAgICAgIHNlbGYudGFibGUuc3luY19pZl9kaXJ0eSgpCisKKyAgICBkZWYgc2lnaW50X2hhbmRsZXIoc2VsZiwgc2lnbnVtLCBzdGFjayk6CisgICAgICAgIHNlbGYudGFibGUuc3luYygpCisKKyAgICBkZWYgc2lndGVybV9oYW5kbGVyKHNlbGYsIHNpZ251bSwgc3RhY2spOgorICAgICAgICBzZWxmLnRhYmxlLnN5bmMoKQorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICBkZWYgcHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgc2VsZi5yZXF1ZXN0cXVldWUucHV0KChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykpCisKKyAgICBkZWYgZXhwb3J0KHNlbGYsIHZlcnNpb249Tm9uZSwgcGtnYXJjaD1Ob25lLCBjaGVja3N1bT1Ob25lLCBjb2xpbmZvPVRydWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50YWJsZS5leHBvcnQodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIGNvbGluZm8pCisgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaW1wb3J0b25lKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLnRhYmxlLmltcG9ydG9uZSh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpCisKKyAgICBkZWYgcGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnF1aXQKKworICAgIGRlZiBnZXRpbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCisgICAgZGVmIGdldFBSKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFibGUuZ2V0VmFsdWUodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisgICAgICAgIGV4Y2VwdCBwcnNlcnYuTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiY2FuIG5vdCBmaW5kIHZhbHVlIGZvciAoJXMsICVzKSIsdmVyc2lvbiwgY2hlY2tzdW0pCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgc3FsaXRlMy5FcnJvciBhcyBleGM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHF1aXQoc2VsZik6CisgICAgICAgIHNlbGYucXVpdD1UcnVlCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHdvcmtfZm9yZXZlcihzZWxmLCk6CisgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCisgICAgICAgIHNlbGYudGltZW91dCA9IDAuNQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGVkIFBSU2VydmVyIHdpdGggREJmaWxlOiAlcywgSVA6ICVzLCBQT1JUOiAlcywgUElEOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGJmaWxlLCBzZWxmLmhvc3QsIHNlbGYucG9ydCwgc3RyKG9zLmdldHBpZCgpKSkpCisKKyAgICAgICAgc2VsZi5oYW5kbGVydGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgd2hpbGUgbm90IHNlbGYucXVpdDoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICBzZWxmLmhhbmRsZXJ0aHJlYWQuam9pbigpCisgICAgICAgIHNlbGYudGFibGUuc3luYygpCisgICAgICAgIGxvZ2dlci5pbmZvKCJQUlNlcnZlcjogc3RvcHBpbmcuLi4iKQorICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRhZW1vbjoKKyAgICAgICAgICAgIHBpZCA9IHNlbGYuZGFlbW9uaXplKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBpZCA9IHNlbGYuZm9yaygpCisKKyAgICAgICAgIyBFbnN1cmUgYm90aCB0aGUgcGFyZW50IHNlZXMgdGhpcyBhbmQgdGhlIGNoaWxkIGZyb20gdGhlIHdvcmtfZm9yZXZlciBsb2cgZW50cnkgYWJvdmUKKyAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0ZWQgUFJTZXJ2ZXIgd2l0aCBEQmZpbGU6ICVzLCBJUDogJXMsIFBPUlQ6ICVzLCBQSUQ6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoc2VsZi5kYmZpbGUsIHNlbGYuaG9zdCwgc2VsZi5wb3J0LCBzdHIocGlkKSkpCisKKyAgICBkZWYgZGVscGlkKHNlbGYpOgorICAgICAgICBvcy5yZW1vdmUoc2VsZi5waWRmaWxlKQorCisgICAgZGVmIGRhZW1vbml6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlZSBBZHZhbmNlZCBQcm9ncmFtbWluZyBpbiB0aGUgVU5JWCwgU2VjIDEzLjMKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgcGlkID4gMDoKKyAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgICAgICAjcGFyZW50IHJldHVybiBpbnN0ZWFkIG9mIGV4aXQgdG8gZ2l2ZSBjb250cm9sIAorICAgICAgICAgICAgICAgIHJldHVybiBwaWQKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCisKKyAgICAgICAgb3Muc2V0c2lkKCkKKyAgICAgICAgIiIiCisgICAgICAgIGZvcmsgYWdhaW4gdG8gbWFrZSBzdXJlIHRoZSBkYWVtb24gaXMgbm90IHNlc3Npb24gbGVhZGVyLCAKKyAgICAgICAgd2hpY2ggcHJldmVudHMgaXQgZnJvbSBhY3F1aXJpbmcgY29udHJvbGxpbmcgdGVybWluYWwKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgcGlkID4gMDogI3BhcmVudAorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgICAgIHNlbGYuY2xlYW51cF9oYW5kbGVzKCkKKyAgICAgICAgb3MuX2V4aXQoMCkKKworICAgIGRlZiBmb3JrKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIHBpZCA+IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBpZAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyBbJWRdIiAlIChlLnN0cmVycm9yLCBlLmVycm5vKSkKKworICAgICAgICBiYi51dGlscy5zaWduYWxfb25fcGFyZW50X2V4aXQoIlNJR1RFUk0iKQorICAgICAgICBzZWxmLmNsZWFudXBfaGFuZGxlcygpCisgICAgICAgIG9zLl9leGl0KDApCisKKyAgICBkZWYgY2xlYW51cF9oYW5kbGVzKHNlbGYpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNlbGYuc2lnaW50X2hhbmRsZXIpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9oYW5kbGVyKQorICAgICAgICBvcy51bWFzaygwKQorICAgICAgICBvcy5jaGRpcigiLyIpCisKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBzaSA9IGZpbGUoJy9kZXYvbnVsbCcsICdyJykKKyAgICAgICAgc28gPSBmaWxlKHNlbGYubG9nZmlsZSwgJ2ErJykKKyAgICAgICAgc2UgPSBzbworICAgICAgICBvcy5kdXAyKHNpLmZpbGVubygpLHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAgICAgb3MuZHVwMihzby5maWxlbm8oKSxzeXMuc3Rkb3V0LmZpbGVubygpKQorICAgICAgICBvcy5kdXAyKHNlLmZpbGVubygpLHN5cy5zdGRlcnIuZmlsZW5vKCkpCisKKyAgICAgICAgIyBDbGVhciBvdXQgYWxsIGxvZyBoYW5kbGVycyBwcmlvciB0byB0aGUgZm9yaygpIHRvIGF2b2lkIGNhbGxpbmcKKyAgICAgICAgIyBldmVudCBoYW5kbGVycyBub3QgcGFydCBvZiB0aGUgUFJzZXJ2ZXIKKyAgICAgICAgZm9yIGxvZ2dlcl9pdGVyIGluIGxvZ2dpbmcuTG9nZ2VyLm1hbmFnZXIubG9nZ2VyRGljdC5rZXlzKCk6CisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcihsb2dnZXJfaXRlcikuaGFuZGxlcnMgPSBbXQorCisgICAgICAgICMgRW5zdXJlIGxvZ2dpbmcgbWFrZXMgaXQgdG8gdGhlIGxvZ2ZpbGUKKyAgICAgICAgc3RyZWFtaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgICAgIHN0cmVhbWhhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgZm9ybWF0dGVyID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgICAgIHN0cmVhbWhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoc3RyZWFtaGFuZGxlcikKKworICAgICAgICAjIHdyaXRlIHBpZGZpbGUKKyAgICAgICAgcGlkID0gc3RyKG9zLmdldHBpZCgpKSAKKyAgICAgICAgcGYgPSBmaWxlKHNlbGYucGlkZmlsZSwgJ3cnKQorICAgICAgICBwZi53cml0ZSgiJXNcbiIgJSBwaWQpCisgICAgICAgIHBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLndvcmtfZm9yZXZlcigpCisgICAgICAgIHNlbGYuZGVscGlkKCkKKworY2xhc3MgUFJTZXJ2U2luZ2xldG9uKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiZmlsZSwgbG9nZmlsZSwgaW50ZXJmYWNlKToKKyAgICAgICAgc2VsZi5kYmZpbGUgPSBkYmZpbGUKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLmludGVyZmFjZSA9IGludGVyZmFjZQorICAgICAgICBzZWxmLmhvc3QgPSBOb25lCisgICAgICAgIHNlbGYucG9ydCA9IE5vbmUKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5wcnNlcnYgPSBQUlNlcnZlcihzZWxmLmRiZmlsZSwgc2VsZi5sb2dmaWxlLCBzZWxmLmludGVyZmFjZSwgZGFlbW9uPUZhbHNlKQorICAgICAgICBzZWxmLnByc2Vydi5zdGFydCgpCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5wcnNlcnYuZ2V0aW5mbygpCisKKyAgICBkZWYgZ2V0aW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworY2xhc3MgUFJTZXJ2ZXJDb25uZWN0aW9uKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQpOgorICAgICAgICBpZiBpc19sb2NhbF9zcGVjaWFsKGhvc3QsIHBvcnQpOgorICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHNpbmdsZXRvbi5nZXRpbmZvKCkKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiwgc2VsZi50cmFuc3BvcnQgPSBiYi5zZXJ2ZXIueG1scnBjLl9jcmVhdGVfc2VydmVyKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRlcm1pbmF0aW5nIFBSU2VydmVyLi4uIikKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5xdWl0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIHN0cihleGMpKQorCisgICAgZGVmIGdldFBSKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5nZXRQUih2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkKKworICAgIGRlZiBwaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnBpbmcoKQorCisgICAgZGVmIGV4cG9ydChzZWxmLHZlcnNpb249Tm9uZSwgcGtnYXJjaD1Ob25lLCBjaGVja3N1bT1Ob25lLCBjb2xpbmZvPVRydWUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmV4cG9ydCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgY29saW5mbykKKworICAgIGRlZiBpbXBvcnRvbmUoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5pbXBvcnRvbmUodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKQorCisgICAgZGVmIGdldGluZm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmhvc3QsIHNlbGYucG9ydAorCitkZWYgc3RhcnRfZGFlbW9uKGRiZmlsZSwgaG9zdCwgcG9ydCwgbG9nZmlsZSk6CisgICAgcGlkZmlsZSA9IFBJRFBSRUZJWCAlIChob3N0LCBwb3J0KQorICAgIHRyeToKKyAgICAgICAgcGYgPSBmaWxlKHBpZGZpbGUsJ3InKQorICAgICAgICBwaWQgPSBpbnQocGYucmVhZGxpbmUoKS5zdHJpcCgpKQorICAgICAgICBwZi5jbG9zZSgpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBpZCA9IE5vbmUKKworICAgIGlmIHBpZDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicGlkZmlsZSAlcyBhbHJlYWR5IGV4aXN0LiBEYWVtb24gYWxyZWFkeSBydW5uaW5nP1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgcGlkZmlsZSkKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHNlcnZlciA9IFBSU2VydmVyKG9zLnBhdGguYWJzcGF0aChkYmZpbGUpLCBvcy5wYXRoLmFic3BhdGgobG9nZmlsZSksIChob3N0LHBvcnQpKQorICAgIHNlcnZlci5zdGFydCgpCisgICAgcmV0dXJuIDAKKworZGVmIHN0b3BfZGFlbW9uKGhvc3QsIHBvcnQpOgorICAgIHBpZGZpbGUgPSBQSURQUkVGSVggJSAoaG9zdCwgcG9ydCkKKyAgICB0cnk6CisgICAgICAgIHBmID0gZmlsZShwaWRmaWxlLCdyJykKKyAgICAgICAgcGlkID0gaW50KHBmLnJlYWRsaW5lKCkuc3RyaXAoKSkKKyAgICAgICAgcGYuY2xvc2UoKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwaWQgPSBOb25lCisKKyAgICBpZiBub3QgcGlkOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJwaWRmaWxlICVzIGRvZXMgbm90IGV4aXN0LiBEYWVtb24gbm90IHJ1bm5pbmc/XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAlIHBpZGZpbGUpCisKKyAgICB0cnk6CisgICAgICAgIFBSU2VydmVyQ29ubmVjdGlvbihob3N0LCBwb3J0KS50ZXJtaW5hdGUoKQorICAgIGV4Y2VwdDoKKyAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJTdG9wIFBSU2VydmljZSAlczolZCBmYWlsZWQiICUgKGhvc3QscG9ydCkpCisKKyAgICB0cnk6CisgICAgICAgIGlmIHBpZDoKKyAgICAgICAgICAgIHdhaXRfdGltZW91dCA9IDAKKyAgICAgICAgICAgIHByaW50KCJXYWl0aW5nIGZvciBwci1zZXJ2ZXIgdG8gZXhpdC4iKQorICAgICAgICAgICAgd2hpbGUgaXNfcnVubmluZyhwaWQpIGFuZCB3YWl0X3RpbWVvdXQgPCA1MDoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgICAgICB3YWl0X3RpbWVvdXQgKz0gMQorCisgICAgICAgICAgICBpZiBpc19ydW5uaW5nKHBpZCk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlNlbmRpbmcgU0lHVEVSTSB0byBwci1zZXJ2ZXIuIikKKyAgICAgICAgICAgICAgICBvcy5raWxsKHBpZCxzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGlkZmlsZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHBpZGZpbGUpCisKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBlcnIgPSBzdHIoZSkKKyAgICAgICAgaWYgZXJyLmZpbmQoIk5vIHN1Y2ggcHJvY2VzcyIpIDw9IDA6CisgICAgICAgICAgICByYWlzZSBlCisKKyAgICByZXR1cm4gMAorCitkZWYgaXNfcnVubmluZyhwaWQpOgorICAgIHRyeToKKyAgICAgICAgb3Mua2lsbChwaWQsIDApCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICBpZiBlcnIuZXJybm8gPT0gZXJybm8uRVNSQ0g6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgaXNfbG9jYWxfc3BlY2lhbChob3N0LCBwb3J0KToKKyAgICBpZiBob3N0LnN0cmlwKCkudXBwZXIoKSA9PSAnbG9jYWxob3N0Jy51cHBlcigpIGFuZCAobm90IHBvcnQpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBQUlNlcnZpY2VDb25maWdFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIGF1dG9fc3RhcnQoZCk6CisgICAgZ2xvYmFsIHNpbmdsZXRvbgorCisgICAgaG9zdF9wYXJhbXMgPSBmaWx0ZXIoTm9uZSwgKGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpKQorICAgIGlmIG5vdCBob3N0X3BhcmFtczoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGlmIGxlbihob3N0X3BhcmFtcykgIT0gMjoKKyAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCdcbicuam9pbihbJ1BSU0VSVl9IT1NUOiBpbmNvcnJlY3QgZm9ybWF0JywKKyAgICAgICAgICAgICAgICAnVXNhZ2U6IFBSU0VSVl9IT1NUID0gIjxob3N0bmFtZT46PHBvcnQ+IiddKSkKKyAgICAgICAgcmFpc2UgUFJTZXJ2aWNlQ29uZmlnRXJyb3IKKworICAgIGlmIGlzX2xvY2FsX3NwZWNpYWwoaG9zdF9wYXJhbXNbMF0sIGludChob3N0X3BhcmFtc1sxXSkpIGFuZCBub3Qgc2luZ2xldG9uOgorICAgICAgICBpbXBvcnQgYmIudXRpbHMKKyAgICAgICAgY2FjaGVkaXIgPSAoZC5nZXRWYXIoIlBFUlNJU1RFTlRfRElSIiwgVHJ1ZSkgb3IgZC5nZXRWYXIoIkNBQ0hFIiwgVHJ1ZSkpCisgICAgICAgIGlmIG5vdCBjYWNoZWRpcjoKKyAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiUGxlYXNlIHNldCB0aGUgJ1BFUlNJU1RFTlRfRElSJyBvciAnQ0FDSEUnIHZhcmlhYmxlIikKKyAgICAgICAgICAgIHJhaXNlIFBSU2VydmljZUNvbmZpZ0Vycm9yCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjYWNoZWRpcikKKyAgICAgICAgZGJmaWxlID0gb3MucGF0aC5qb2luKGNhY2hlZGlyLCAicHJzZXJ2LnNxbGl0ZTMiKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGNhY2hlZGlyLCAicHJzZXJ2LmxvZyIpCisgICAgICAgIHNpbmdsZXRvbiA9IFBSU2VydlNpbmdsZXRvbihvcy5wYXRoLmFic3BhdGgoZGJmaWxlKSwgb3MucGF0aC5hYnNwYXRoKGxvZ2ZpbGUpLCAoImxvY2FsaG9zdCIsMCkpCisgICAgICAgIHNpbmdsZXRvbi5zdGFydCgpCisgICAgaWYgc2luZ2xldG9uOgorICAgICAgICBob3N0LCBwb3J0ID0gc2luZ2xldG9uLmdldGluZm8oKQorICAgIGVsc2U6CisgICAgICAgIGhvc3QgPSBob3N0X3BhcmFtc1swXQorICAgICAgICBwb3J0ID0gaW50KGhvc3RfcGFyYW1zWzFdKQorCisgICAgdHJ5OgorICAgICAgICBjb25uZWN0aW9uID0gUFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3QscG9ydCkKKyAgICAgICAgY29ubmVjdGlvbi5waW5nKCkKKyAgICAgICAgcmVhbGhvc3QsIHJlYWxwb3J0ID0gY29ubmVjdGlvbi5nZXRpbmZvKCkKKyAgICAgICAgcmV0dXJuIHN0cihyZWFsaG9zdCkgKyAiOiIgKyBzdHIocmVhbHBvcnQpCisgICAgICAgIAorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiUFJzZXJ2aWNlICVzOiVkIG5vdCBhdmFpbGFibGUiICUgKGhvc3QsIHBvcnQpKQorICAgICAgICByYWlzZSBQUlNlcnZpY2VDb25maWdFcnJvcgorCitkZWYgYXV0b19zaHV0ZG93bihkPU5vbmUpOgorICAgIGdsb2JhbCBzaW5nbGV0b24KKyAgICBpZiBzaW5nbGV0b246CisgICAgICAgIGhvc3QsIHBvcnQgPSBzaW5nbGV0b24uZ2V0aW5mbygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFBSU2VydmVyQ29ubmVjdGlvbihob3N0LCBwb3J0KS50ZXJtaW5hdGUoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlN0b3AgUFJTZXJ2aWNlICVzOiVkIGZhaWxlZCIgJSAoaG9zdCxwb3J0KSkKKyAgICAgICAgc2luZ2xldG9uID0gTm9uZQorCitkZWYgcGluZyhob3N0LCBwb3J0KToKKyAgICBjb25uPVBSU2VydmVyQ29ubmVjdGlvbihob3N0LCBwb3J0KQorICAgIHJldHVybiBjb25uLnBpbmcoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9weWlub3RpZnkucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3B5aW5vdGlmeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGFlMDAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi9weWlub3RpZnkucHkKQEAgLTAsMCArMSwyNDE2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBweWlub3RpZnkucHkgLSBweXRob24gaW50ZXJmYWNlIHRvIGlub3RpZnkKKyMgQ29weXJpZ2h0IChjKSAyMDA1LTIwMTUgU2ViYXN0aWVuIE1hcnRpbmkgPHNlYkBkYnp0ZWFtLm9yZz4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIyBUSEUgU09GVFdBUkUuCisiIiIKK3B5aW5vdGlmeQorCitAYXV0aG9yOiBTZWJhc3RpZW4gTWFydGluaQorQGxpY2Vuc2U6IE1JVCBMaWNlbnNlCitAY29udGFjdDogc2ViQGRienRlYW0ub3JnCisiIiIKKworY2xhc3MgUHlpbm90aWZ5RXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJJbmRpY2F0ZXMgZXhjZXB0aW9ucyByYWlzZWQgYnkgYSBQeWlub3RpZnkgY2xhc3MuIiIiCisgICAgcGFzcworCisKK2NsYXNzIFVuc3VwcG9ydGVkUHl0aG9uVmVyc2lvbkVycm9yKFB5aW5vdGlmeUVycm9yKToKKyAgICAiIiIKKyAgICBSYWlzZWQgb24gdW5zdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb25zLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSB2ZXJzaW9uOiBDdXJyZW50IFB5dGhvbiB2ZXJzaW9uCisgICAgICAgIEB0eXBlIHZlcnNpb246IHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgZXJyID0gJ1B5dGhvbiAlcyBpcyB1bnN1cHBvcnRlZCwgcmVxdWlyZXMgYXQgbGVhc3QgUHl0aG9uIDIuNCcKKyAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwgZXJyICUgdmVyc2lvbikKKworCisjIENoZWNrIFB5dGhvbiB2ZXJzaW9uCitpbXBvcnQgc3lzCitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDQpOgorICAgIHJhaXNlIFVuc3VwcG9ydGVkUHl0aG9uVmVyc2lvbkVycm9yKHN5cy52ZXJzaW9uKQorCisKKyMgSW1wb3J0IGRpcmVjdGl2ZXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IGZjbnRsCitpbXBvcnQgZXJybm8KK2ltcG9ydCB0ZXJtaW9zCitpbXBvcnQgYXJyYXkKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXRleGl0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQoraW1wb3J0IHRpbWUKK2ltcG9ydCByZQoraW1wb3J0IGFzeW5jb3JlCitpbXBvcnQgc3VicHJvY2VzcworCit0cnk6CisgICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MgICMgV2lsbCBmYWlsIG9uIFB5dGhvbiAyLjQgd2hpY2ggaGFzIHJlZHVjZSgpIGJ1aWx0aW4gYW55d2F5LgorCit0cnk6CisgICAgZnJvbSBnbG9iIGltcG9ydCBpZ2xvYiBhcyBnbG9iCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBQeXRob24gMi40IGRvZXMgbm90IGhhdmUgZ2xvYi5pZ2xvYigpLgorICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYiBhcyBnbG9iCisKK3RyeToKKyAgICBpbXBvcnQgY3R5cGVzCisgICAgaW1wb3J0IGN0eXBlcy51dGlsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgY3R5cGVzID0gTm9uZQorCit0cnk6CisgICAgaW1wb3J0IGlub3RpZnlfc3lzY2FsbHMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbm90aWZ5X3N5c2NhbGxzID0gTm9uZQorCisKK19fYXV0aG9yX18gPSAic2ViQGRienRlYW0ub3JnIChTZWJhc3RpZW4gTWFydGluaSkiCisKK19fdmVyc2lvbl9fID0gIjAuOS41IgorCitfX21ldGFjbGFzc19fID0gdHlwZSAgIyBVc2UgbmV3LXN0eWxlIGNsYXNzZXMgYnkgZGVmYXVsdAorCisKKyMgQ29tcGF0aWJpdHkgbW9kZTogc2V0IHRvIFRydWUgdG8gaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGgKKyMgUHlpbm90aWZ5IDAuNy4xLiBEbyBub3Qgc2V0IHRoaXMgdmFyaWFibGUgeW91cnNlbGYsIGNhbGwgdGhlCisjIGZ1bmN0aW9uIGNvbXBhdGliaWxpdHlfbW9kZSgpIGluc3RlYWQuCitDT01QQVRJQklMSVRZX01PREUgPSBGYWxzZQorCisKK2NsYXNzIElub3RpZnlCaW5kaW5nTm90Rm91bmRFcnJvcihQeWlub3RpZnlFcnJvcik6CisgICAgIiIiCisgICAgUmFpc2VkIHdoZW4gbm8gaW5vdGlmeSBzdXBwb3J0IGNvdWxkbid0IGJlIGZvdW5kLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZXJyID0gIkNvdWxkbid0IGZpbmQgYW55IGlub3RpZnkgYmluZGluZyIKKyAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwgZXJyKQorCisKK2NsYXNzIElOb3RpZnlXcmFwcGVyOgorICAgICIiIgorICAgIEFic3RyYWN0IGNsYXNzIHdyYXBwaW5nIGFjY2VzcyB0byBpbm90aWZ5J3MgZnVuY3Rpb25zLiBUaGlzIGlzIGFuCisgICAgaW50ZXJuYWwgY2xhc3MuCisgICAgIiIiCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGUoKToKKyAgICAgICAgIyBGaXJzdCwgdHJ5IHRvIHVzZSBjdHlwZXMuCisgICAgICAgIGlmIGN0eXBlczoKKyAgICAgICAgICAgIGlub3RpZnkgPSBfQ3R5cGVzTGliY0lOb3RpZnlXcmFwcGVyKCkKKyAgICAgICAgICAgIGlmIGlub3RpZnkuaW5pdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbm90aWZ5CisgICAgICAgICMgU2Vjb25kLCBzZWUgaWYgQyBleHRlbnNpb24gaXMgY29tcGlsZWQuCisgICAgICAgIGlmIGlub3RpZnlfc3lzY2FsbHM6CisgICAgICAgICAgICBpbm90aWZ5ID0gX0lOb3RpZnlTeXNjYWxsc1dyYXBwZXIoKQorICAgICAgICAgICAgaWYgaW5vdGlmeS5pbml0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlub3RpZnkKKworICAgIGRlZiBnZXRfZXJybm8oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gTm9uZSBpcyBubyBlcnJubyBjb2RlIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZXJybm8oKQorCisgICAgZGVmIHN0cl9lcnJubyhzZWxmKToKKyAgICAgICAgY29kZSA9IHNlbGYuZ2V0X2Vycm5vKCkKKyAgICAgICAgaWYgY29kZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICdFcnJubzogbm8gZXJybm8gc3VwcG9ydCcKKyAgICAgICAgcmV0dXJuICdFcnJubz0lcyAoJXMpJyAlIChvcy5zdHJlcnJvcihjb2RlKSwgZXJybm8uZXJyb3Jjb2RlW2NvZGVdKQorCisgICAgZGVmIGlub3RpZnlfaW5pdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lub3RpZnlfaW5pdCgpCisKKyAgICBkZWYgaW5vdGlmeV9hZGRfd2F0Y2goc2VsZiwgZmQsIHBhdGhuYW1lLCBtYXNrKToKKyAgICAgICAgIyBVbmljb2RlIHN0cmluZ3MgbXVzdCBiZSBlbmNvZGVkIHRvIHN0cmluZyBwcmlvciB0byBjYWxsaW5nIHRoaXMKKyAgICAgICAgIyBtZXRob2QuCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhdGhuYW1lLCBzdHIpCisgICAgICAgIHJldHVybiBzZWxmLl9pbm90aWZ5X2FkZF93YXRjaChmZCwgcGF0aG5hbWUsIG1hc2spCisKKyAgICBkZWYgaW5vdGlmeV9ybV93YXRjaChzZWxmLCBmZCwgd2QpOgorICAgICAgICByZXR1cm4gc2VsZi5faW5vdGlmeV9ybV93YXRjaChmZCwgd2QpCisKKworY2xhc3MgX0lOb3RpZnlTeXNjYWxsc1dyYXBwZXIoSU5vdGlmeVdyYXBwZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBTdG9yZXMgdGhlIGxhc3QgZXJybm8gdmFsdWUuCisgICAgICAgIHNlbGYuX2xhc3RfZXJybm8gPSBOb25lCisKKyAgICBkZWYgaW5pdChzZWxmKToKKyAgICAgICAgYXNzZXJ0IGlub3RpZnlfc3lzY2FsbHMKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfZ2V0X2Vycm5vKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGFzdF9lcnJubworCisgICAgZGVmIF9pbm90aWZ5X2luaXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkID0gaW5vdGlmeV9zeXNjYWxscy5pbm90aWZ5X2luaXQoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5fbGFzdF9lcnJubyA9IGVyci5lcnJubworICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIHJldHVybiBmZAorCisgICAgZGVmIF9pbm90aWZ5X2FkZF93YXRjaChzZWxmLCBmZCwgcGF0aG5hbWUsIG1hc2spOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3ZCA9IGlub3RpZnlfc3lzY2FsbHMuaW5vdGlmeV9hZGRfd2F0Y2goZmQsIHBhdGhuYW1lLCBtYXNrKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5fbGFzdF9lcnJubyA9IGVyci5lcnJubworICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIHJldHVybiB3ZAorCisgICAgZGVmIF9pbm90aWZ5X3JtX3dhdGNoKHNlbGYsIGZkLCB3ZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldCA9IGlub3RpZnlfc3lzY2FsbHMuaW5vdGlmeV9ybV93YXRjaChmZCwgd2QpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLl9sYXN0X2Vycm5vID0gZXJyLmVycm5vCisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgcmV0dXJuIHJldAorCisKK2NsYXNzIF9DdHlwZXNMaWJjSU5vdGlmeVdyYXBwZXIoSU5vdGlmeVdyYXBwZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbGliYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZ2V0X2Vycm5vX2Z1bmMgPSBOb25lCisKKyAgICBkZWYgaW5pdChzZWxmKToKKyAgICAgICAgYXNzZXJ0IGN0eXBlcworCisgICAgICAgIHRyeV9saWJjX25hbWUgPSAnYycKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2ZyZWVic2QnKToKKyAgICAgICAgICAgIHRyeV9saWJjX25hbWUgPSAnaW5vdGlmeScKKworICAgICAgICBsaWJjX25hbWUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpYmNfbmFtZSA9IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSh0cnlfbGliY19uYW1lKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgcGFzcyAgIyBXaWxsIGF0dGVtcCB0byBsb2FkIGl0IHdpdGggTm9uZSBhbnl3YXkuCisKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMiwgNik6CisgICAgICAgICAgICBzZWxmLl9saWJjID0gY3R5cGVzLkNETEwobGliY19uYW1lLCB1c2VfZXJybm89VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2dldF9lcnJub19mdW5jID0gY3R5cGVzLmdldF9lcnJubworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbGliYyA9IGN0eXBlcy5DRExMKGxpYmNfbmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHNlbGYuX2xpYmMuX19lcnJub19sb2NhdGlvbgorICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlc3R5cGUgPSBjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19pbnQpCisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2Vycm5vX2Z1bmMgPSBsYW1iZGE6IGxvY2F0aW9uKCkuY29udGVudHMudmFsdWUKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBFdmVudHVhbGx5IGNoZWNrIHRoYXQgbGliYyBoYXMgbmVlZGVkIGlub3RpZnkgYmluZGluZ3MuCisgICAgICAgIGlmIChub3QgaGFzYXR0cihzZWxmLl9saWJjLCAnaW5vdGlmeV9pbml0Jykgb3IKKyAgICAgICAgICAgIG5vdCBoYXNhdHRyKHNlbGYuX2xpYmMsICdpbm90aWZ5X2FkZF93YXRjaCcpIG9yCisgICAgICAgICAgICBub3QgaGFzYXR0cihzZWxmLl9saWJjLCAnaW5vdGlmeV9ybV93YXRjaCcpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9pbml0LmFyZ3R5cGVzID0gW10KKyAgICAgICAgc2VsZi5fbGliYy5pbm90aWZ5X2luaXQucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfYWRkX3dhdGNoLmFyZ3R5cGVzID0gW2N0eXBlcy5jX2ludCwgY3R5cGVzLmNfY2hhcl9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3VpbnQzMl0KKyAgICAgICAgc2VsZi5fbGliYy5pbm90aWZ5X2FkZF93YXRjaC5yZXN0eXBlID0gY3R5cGVzLmNfaW50CisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9ybV93YXRjaC5hcmd0eXBlcyA9IFtjdHlwZXMuY19pbnQsIGN0eXBlcy5jX2ludF0KKyAgICAgICAgc2VsZi5fbGliYy5pbm90aWZ5X3JtX3dhdGNoLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfZ2V0X2Vycm5vKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9nZXRfZXJybm9fZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZXJybm9fZnVuYygpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2lub3RpZnlfaW5pdChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpYmMuaW5vdGlmeV9pbml0KCkKKworICAgIGRlZiBfaW5vdGlmeV9hZGRfd2F0Y2goc2VsZiwgZmQsIHBhdGhuYW1lLCBtYXNrKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKKyAgICAgICAgcGF0aG5hbWUgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIocGF0aG5hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9saWJjLmlub3RpZnlfYWRkX3dhdGNoKGZkLCBwYXRobmFtZSwgbWFzaykKKworICAgIGRlZiBfaW5vdGlmeV9ybV93YXRjaChzZWxmLCBmZCwgd2QpOgorICAgICAgICBhc3NlcnQgc2VsZi5fbGliYyBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fbGliYy5pbm90aWZ5X3JtX3dhdGNoKGZkLCB3ZCkKKworICAgIGRlZiBfc3lzY3RsKHNlbGYsICphcmdzKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpYmMuc3lzY3RsKCphcmdzKQorCisKKyMgTG9nZ2luZworZGVmIGxvZ2dlcl9pbml0KCk6CisgICAgIiIiSW5pdGlhbGl6ZSBsb2dnZXIgaW5zdGFuY2UuIiIiCisgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInB5aW5vdGlmeSIpCisgICAgY29uc29sZV9oYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBjb25zb2xlX2hhbmRsZXIuc2V0Rm9ybWF0dGVyKAorICAgICAgICBsb2dnaW5nLkZvcm1hdHRlcigiWyUoYXNjdGltZSlzICUobmFtZSlzICUobGV2ZWxuYW1lKXNdICUobWVzc2FnZSlzIikpCisgICAgbG9nLmFkZEhhbmRsZXIoY29uc29sZV9oYW5kbGVyKQorICAgIGxvZy5zZXRMZXZlbCgyMCkKKyAgICByZXR1cm4gbG9nCisKK2xvZyA9IGxvZ2dlcl9pbml0KCkKKworCisjIGlub3RpZnkncyB2YXJpYWJsZXMKK2NsYXNzIFN5c0N0bElOb3RpZnk6CisgICAgIiIiCisgICAgQWNjZXNzIChyZWFkLCB3cml0ZSkgaW5vdGlmeSdzIHZhcmlhYmxlcyB0aHJvdWdoIHN5c2N0bC4gVXN1YWxseSBpdAorICAgIHJlcXVpcmVzIGFkbWluaXN0cmF0b3IgcmlnaHRzIHRvIHVwZGF0ZSB0aGVtLgorCisgICAgRXhhbXBsZXM6CisgICAgICAtIFJlYWQgbWF4X3F1ZXVlZF9ldmVudHMgYXR0cmlidXRlOiBteXZhciA9IG1heF9xdWV1ZWRfZXZlbnRzLnZhbHVlCisgICAgICAtIFVwZGF0ZSBtYXhfcXVldWVkX2V2ZW50cyBhdHRyaWJ1dGU6IG1heF9xdWV1ZWRfZXZlbnRzLnZhbHVlID0gNDIKKyAgICAiIiIKKworICAgIGlub3RpZnlfYXR0cnMgPSB7J21heF91c2VyX2luc3RhbmNlcyc6IDEsCisgICAgICAgICAgICAgICAgICAgICAnbWF4X3VzZXJfd2F0Y2hlcyc6IDIsCisgICAgICAgICAgICAgICAgICAgICAnbWF4X3F1ZXVlZF9ldmVudHMnOiAzfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHJuYW1lLCBpbm90aWZ5X3dyYXBwZXIpOgorICAgICAgICAjIEZJWE1FOiByaWdodCBub3cgb25seSBzdXBwb3J0aW5nIGN0eXBlcworICAgICAgICBhc3NlcnQgY3R5cGVzCisgICAgICAgIHNlbGYuX2F0dHJuYW1lID0gYXR0cm5hbWUKKyAgICAgICAgc2VsZi5faW5vdGlmeV93cmFwcGVyID0gaW5vdGlmeV93cmFwcGVyCisgICAgICAgIHNpbm8gPSBjdHlwZXMuY19pbnQgKiAzCisgICAgICAgIHNlbGYuX2F0dHIgPSBzaW5vKDUsIDIwLCBTeXNDdGxJTm90aWZ5Lmlub3RpZnlfYXR0cnNbYXR0cm5hbWVdKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGUoYXR0cm5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmFjdG9yeSBtZXRob2QgaW5zdGFuY2lhdGluZyBhbmQgcmV0dXJuaW5nIHRoZSByaWdodCB3cmFwcGVyLgorICAgICAgICAiIiIKKyAgICAgICAgIyBGSVhNRTogcmlnaHQgbm93IG9ubHkgc3VwcG9ydGluZyBjdHlwZXMKKyAgICAgICAgaWYgY3R5cGVzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpbm90aWZ5X3dyYXBwZXIgPSBfQ3R5cGVzTGliY0lOb3RpZnlXcmFwcGVyKCkKKyAgICAgICAgaWYgbm90IGlub3RpZnlfd3JhcHBlci5pbml0KCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gU3lzQ3RsSU5vdGlmeShhdHRybmFtZSwgaW5vdGlmeV93cmFwcGVyKQorCisgICAgZGVmIGdldF92YWwoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBHZXRzIGF0dHJpYnV0ZSdzIHZhbHVlLiBSYWlzZXMgT1NFcnJvciBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KKworICAgICAgICBAcmV0dXJuOiBzdG9yZWQgdmFsdWUuCisgICAgICAgIEBydHlwZTogaW50CisgICAgICAgICIiIgorICAgICAgICBvbGR2ID0gY3R5cGVzLmNfaW50KDApCisgICAgICAgIHNpemUgPSBjdHlwZXMuY19pbnQoY3R5cGVzLnNpemVvZihvbGR2KSkKKyAgICAgICAgc3lzY3RsID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLl9zeXNjdGwKKyAgICAgICAgcmVzID0gc3lzY3RsKHNlbGYuX2F0dHIsIDMsCisgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY192b2lkcChjdHlwZXMuYWRkcmVzc29mKG9sZHYpKSwKKyAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5hZGRyZXNzb2Yoc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICBOb25lLCAwKQorICAgICAgICBpZiByZXMgPT0gLTE6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKHNlbGYuX2lub3RpZnlfd3JhcHBlci5nZXRfZXJybm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKQorICAgICAgICByZXR1cm4gb2xkdi52YWx1ZQorCisgICAgZGVmIHNldF92YWwoc2VsZiwgbnZhbCk6CisgICAgICAgICIiIgorICAgICAgICBTZXRzIG5ldyBhdHRyaWJ1dGUncyB2YWx1ZS4gUmFpc2VzIE9TRXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQuCisKKyAgICAgICAgQHBhcmFtIG52YWw6IHJlcGxhY2VzIGN1cnJlbnQgdmFsdWUgYnkgbnZhbC4KKyAgICAgICAgQHR5cGUgbnZhbDogaW50CisgICAgICAgICIiIgorICAgICAgICBvbGR2ID0gY3R5cGVzLmNfaW50KDApCisgICAgICAgIHNpemVvID0gY3R5cGVzLmNfaW50KGN0eXBlcy5zaXplb2Yob2xkdikpCisgICAgICAgIG5ld3YgPSBjdHlwZXMuY19pbnQobnZhbCkKKyAgICAgICAgc2l6ZW4gPSBjdHlwZXMuY19pbnQoY3R5cGVzLnNpemVvZihuZXd2KSkKKyAgICAgICAgc3lzY3RsID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLl9zeXNjdGwKKyAgICAgICAgcmVzID0gc3lzY3RsKHNlbGYuX2F0dHIsIDMsCisgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY192b2lkcChjdHlwZXMuYWRkcmVzc29mKG9sZHYpKSwKKyAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5hZGRyZXNzb2Yoc2l6ZW8pLAorICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdm9pZHAoY3R5cGVzLmFkZHJlc3NvZihuZXd2KSksCisgICAgICAgICAgICAgICAgICAgICBzaXplbikKKyAgICAgICAgaWYgcmVzID09IC0xOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihzZWxmLl9pbm90aWZ5X3dyYXBwZXIuZ2V0X2Vycm5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkKKworICAgIHZhbHVlID0gcHJvcGVydHkoZ2V0X3ZhbCwgc2V0X3ZhbCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8JXM9JWQ+JyAlIChzZWxmLl9hdHRybmFtZSwgc2VsZi5nZXRfdmFsKCkpCisKKworIyBJbm90aWZ5J3MgdmFyaWFibGVzCisjCisjIEZJWE1FOiBjdXJyZW50bHkgdGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2hlbiBjdHlwZXMgaXMgdXNlZCwKKyMgICAgICAgIG90aGVyd2lzZSB0aGVyZSBhcmUgc2V0IHRvIE5vbmUuCisjCisjIHJlYWQ6IG15dmFyID0gbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUKKyMgdXBkYXRlOiBtYXhfcXVldWVkX2V2ZW50cy52YWx1ZSA9IDQyCisjCitmb3IgYXR0cm5hbWUgaW4gKCdtYXhfcXVldWVkX2V2ZW50cycsICdtYXhfdXNlcl9pbnN0YW5jZXMnLCAnbWF4X3VzZXJfd2F0Y2hlcycpOgorICAgIGdsb2JhbHMoKVthdHRybmFtZV0gPSBTeXNDdGxJTm90aWZ5LmNyZWF0ZShhdHRybmFtZSkKKworCitjbGFzcyBFdmVudHNDb2RlczoKKyAgICAiIiIKKyAgICBTZXQgb2YgY29kZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtpbmQgb2YgZXZlbnRzLgorICAgIFNvbWUgb2YgdGhlc2UgZmxhZ3MgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBpbm90aWZ5LCB3aGVyZWFzCisgICAgdGhlIG90aGVycyBhcmUgc2VudCB0byB1c2Vyc3BhY2UgYnkgaW5vdGlmeSBub3RpZnlpbmcgc29tZSBldmVudHMuCisKKyAgICBAY3ZhciBJTl9BQ0NFU1M6IEZpbGUgd2FzIGFjY2Vzc2VkLgorICAgIEB0eXBlIElOX0FDQ0VTUzogaW50CisgICAgQGN2YXIgSU5fTU9ESUZZOiBGaWxlIHdhcyBtb2RpZmllZC4KKyAgICBAdHlwZSBJTl9NT0RJRlk6IGludAorICAgIEBjdmFyIElOX0FUVFJJQjogTWV0YWRhdGEgY2hhbmdlZC4KKyAgICBAdHlwZSBJTl9BVFRSSUI6IGludAorICAgIEBjdmFyIElOX0NMT1NFX1dSSVRFOiBXcml0dGFibGUgZmlsZSB3YXMgY2xvc2VkLgorICAgIEB0eXBlIElOX0NMT1NFX1dSSVRFOiBpbnQKKyAgICBAY3ZhciBJTl9DTE9TRV9OT1dSSVRFOiBVbndyaXR0YWJsZSBmaWxlIGNsb3NlZC4KKyAgICBAdHlwZSBJTl9DTE9TRV9OT1dSSVRFOiBpbnQKKyAgICBAY3ZhciBJTl9PUEVOOiBGaWxlIHdhcyBvcGVuZWQuCisgICAgQHR5cGUgSU5fT1BFTjogaW50CisgICAgQGN2YXIgSU5fTU9WRURfRlJPTTogRmlsZSB3YXMgbW92ZWQgZnJvbSBYLgorICAgIEB0eXBlIElOX01PVkVEX0ZST006IGludAorICAgIEBjdmFyIElOX01PVkVEX1RPOiBGaWxlIHdhcyBtb3ZlZCB0byBZLgorICAgIEB0eXBlIElOX01PVkVEX1RPOiBpbnQKKyAgICBAY3ZhciBJTl9DUkVBVEU6IFN1YmZpbGUgd2FzIGNyZWF0ZWQuCisgICAgQHR5cGUgSU5fQ1JFQVRFOiBpbnQKKyAgICBAY3ZhciBJTl9ERUxFVEU6IFN1YmZpbGUgd2FzIGRlbGV0ZWQuCisgICAgQHR5cGUgSU5fREVMRVRFOiBpbnQKKyAgICBAY3ZhciBJTl9ERUxFVEVfU0VMRjogU2VsZiAod2F0Y2hlZCBpdGVtIGl0c2VsZikgd2FzIGRlbGV0ZWQuCisgICAgQHR5cGUgSU5fREVMRVRFX1NFTEY6IGludAorICAgIEBjdmFyIElOX01PVkVfU0VMRjogU2VsZiAod2F0Y2hlZCBpdGVtIGl0c2VsZikgd2FzIG1vdmVkLgorICAgIEB0eXBlIElOX01PVkVfU0VMRjogaW50CisgICAgQGN2YXIgSU5fVU5NT1VOVDogQmFja2luZyBmcyB3YXMgdW5tb3VudGVkLgorICAgIEB0eXBlIElOX1VOTU9VTlQ6IGludAorICAgIEBjdmFyIElOX1FfT1ZFUkZMT1c6IEV2ZW50IHF1ZXVlZCBvdmVyZmxvd2VkLgorICAgIEB0eXBlIElOX1FfT1ZFUkZMT1c6IGludAorICAgIEBjdmFyIElOX0lHTk9SRUQ6IEZpbGUgd2FzIGlnbm9yZWQuCisgICAgQHR5cGUgSU5fSUdOT1JFRDogaW50CisgICAgQGN2YXIgSU5fT05MWURJUjogb25seSB3YXRjaCB0aGUgcGF0aCBpZiBpdCBpcyBhIGRpcmVjdG9yeSAobmV3CisgICAgICAgICAgICAgICAgICAgICAgaW4ga2VybmVsIDIuNi4xNSkuCisgICAgQHR5cGUgSU5fT05MWURJUjogaW50CisgICAgQGN2YXIgSU5fRE9OVF9GT0xMT1c6IGRvbid0IGZvbGxvdyBhIHN5bWxpbmsgKG5ldyBpbiBrZXJuZWwgMi42LjE1KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU5fT05MWURJUiB3ZSBjYW4gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qgd2F0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBvZiBzeW1saW5rcy4KKyAgICBAdHlwZSBJTl9ET05UX0ZPTExPVzogaW50CisgICAgQGN2YXIgSU5fRVhDTF9VTkxJTks6IEV2ZW50cyBhcmUgbm90IGdlbmVyYXRlZCBmb3IgY2hpbGRyZW4gYWZ0ZXIgdGhleQorICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gdW5saW5rZWQgZnJvbSB0aGUgd2F0Y2hlZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXcgaW4ga2VybmVsIDIuNi4zNikuCisgICAgQHR5cGUgSU5fRVhDTF9VTkxJTks6IGludAorICAgIEBjdmFyIElOX01BU0tfQUREOiBhZGQgdG8gdGhlIG1hc2sgb2YgYW4gYWxyZWFkeSBleGlzdGluZyB3YXRjaCAobmV3CisgICAgICAgICAgICAgICAgICAgICAgIGluIGtlcm5lbCAyLjYuMTQpLgorICAgIEB0eXBlIElOX01BU0tfQUREOiBpbnQKKyAgICBAY3ZhciBJTl9JU0RJUjogRXZlbnQgb2NjdXJyZWQgYWdhaW5zdCBkaXIuCisgICAgQHR5cGUgSU5fSVNESVI6IGludAorICAgIEBjdmFyIElOX09ORVNIT1Q6IE9ubHkgc2VuZCBldmVudCBvbmNlLgorICAgIEB0eXBlIElOX09ORVNIT1Q6IGludAorICAgIEBjdmFyIEFMTF9FVkVOVFM6IEFsaWFzIGZvciBjb25zaWRlcmluZyBhbGwgb2YgdGhlIGV2ZW50cy4KKyAgICBAdHlwZSBBTExfRVZFTlRTOiBpbnQKKyAgICAiIiIKKworICAgICMgVGhlIGlkZWEgaGVyZSBpcyAnY29uZmlndXJhdGlvbi1hcy1jb2RlJyAtIHRoaXMgd2F5LCB3ZSBnZXQgb3VyIG5pY2UgY2xhc3MKKyAgICAjIGNvbnN0YW50cywgYnV0IHdlIGFsc28gZ2V0IG5pY2UgaHVtYW4tZnJpZW5kbHkgdGV4dCBtYXBwaW5ncyB0byBkbyBsb29rdXBzCisgICAgIyBhZ2FpbnN0IGFzIHdlbGwsIGZvciBmcmVlOgorICAgIEZMQUdfQ09MTEVDVElPTlMgPSB7J09QX0ZMQUdTJzogeworICAgICAgICAnSU5fQUNDRVNTJyAgICAgICAgOiAweDAwMDAwMDAxLCAgIyBGaWxlIHdhcyBhY2Nlc3NlZAorICAgICAgICAnSU5fTU9ESUZZJyAgICAgICAgOiAweDAwMDAwMDAyLCAgIyBGaWxlIHdhcyBtb2RpZmllZAorICAgICAgICAnSU5fQVRUUklCJyAgICAgICAgOiAweDAwMDAwMDA0LCAgIyBNZXRhZGF0YSBjaGFuZ2VkCisgICAgICAgICdJTl9DTE9TRV9XUklURScgICA6IDB4MDAwMDAwMDgsICAjIFdyaXRhYmxlIGZpbGUgd2FzIGNsb3NlZAorICAgICAgICAnSU5fQ0xPU0VfTk9XUklURScgOiAweDAwMDAwMDEwLCAgIyBVbndyaXRhYmxlIGZpbGUgY2xvc2VkCisgICAgICAgICdJTl9PUEVOJyAgICAgICAgICA6IDB4MDAwMDAwMjAsICAjIEZpbGUgd2FzIG9wZW5lZAorICAgICAgICAnSU5fTU9WRURfRlJPTScgICAgOiAweDAwMDAwMDQwLCAgIyBGaWxlIHdhcyBtb3ZlZCBmcm9tIFgKKyAgICAgICAgJ0lOX01PVkVEX1RPJyAgICAgIDogMHgwMDAwMDA4MCwgICMgRmlsZSB3YXMgbW92ZWQgdG8gWQorICAgICAgICAnSU5fQ1JFQVRFJyAgICAgICAgOiAweDAwMDAwMTAwLCAgIyBTdWJmaWxlIHdhcyBjcmVhdGVkCisgICAgICAgICdJTl9ERUxFVEUnICAgICAgICA6IDB4MDAwMDAyMDAsICAjIFN1YmZpbGUgd2FzIGRlbGV0ZWQKKyAgICAgICAgJ0lOX0RFTEVURV9TRUxGJyAgIDogMHgwMDAwMDQwMCwgICMgU2VsZiAod2F0Y2hlZCBpdGVtIGl0c2VsZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2FzIGRlbGV0ZWQKKyAgICAgICAgJ0lOX01PVkVfU0VMRicgICAgIDogMHgwMDAwMDgwMCwgICMgU2VsZiAod2F0Y2hlZCBpdGVtIGl0c2VsZikgd2FzIG1vdmVkCisgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAnRVZFTlRfRkxBR1MnOiB7CisgICAgICAgICdJTl9VTk1PVU5UJyAgICAgICA6IDB4MDAwMDIwMDAsICAjIEJhY2tpbmcgZnMgd2FzIHVubW91bnRlZAorICAgICAgICAnSU5fUV9PVkVSRkxPVycgICAgOiAweDAwMDA0MDAwLCAgIyBFdmVudCBxdWV1ZWQgb3ZlcmZsb3dlZAorICAgICAgICAnSU5fSUdOT1JFRCcgICAgICAgOiAweDAwMDA4MDAwLCAgIyBGaWxlIHdhcyBpZ25vcmVkCisgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAnU1BFQ0lBTF9GTEFHUyc6IHsKKyAgICAgICAgJ0lOX09OTFlESVInICAgICAgIDogMHgwMTAwMDAwMCwgICMgb25seSB3YXRjaCB0aGUgcGF0aCBpZiBpdCBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpcmVjdG9yeQorICAgICAgICAnSU5fRE9OVF9GT0xMT1cnICAgOiAweDAyMDAwMDAwLCAgIyBkb24ndCBmb2xsb3cgYSBzeW1saW5rCisgICAgICAgICdJTl9FWENMX1VOTElOSycgICA6IDB4MDQwMDAwMDAsICAjIGV4Y2x1ZGUgZXZlbnRzIG9uIHVubGlua2VkIG9iamVjdHMKKyAgICAgICAgJ0lOX01BU0tfQUREJyAgICAgIDogMHgyMDAwMDAwMCwgICMgYWRkIHRvIHRoZSBtYXNrIG9mIGFuIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhpc3Rpbmcgd2F0Y2gKKyAgICAgICAgJ0lOX0lTRElSJyAgICAgICAgIDogMHg0MDAwMDAwMCwgICMgZXZlbnQgb2NjdXJyZWQgYWdhaW5zdCBkaXIKKyAgICAgICAgJ0lOX09ORVNIT1QnICAgICAgIDogMHg4MDAwMDAwMCwgICMgb25seSBzZW5kIGV2ZW50IG9uY2UKKyAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgIGRlZiBtYXNrbmFtZShtYXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGV2ZW50IG5hbWUgYXNzb2NpYXRlZCB0byBtYXNrLiBJTl9JU0RJUiBpcyBhcHBlbmRlZCB0bworICAgICAgICB0aGUgcmVzdWx0IHdoZW4gYXBwcm9wcmlhdGUuIE5vdGU6IG9ubHkgb25lIGV2ZW50IGlzIHJldHVybmVkLCBiZWNhdXNlCisgICAgICAgIG9ubHkgb25lIGV2ZW50IGNhbiBiZSByYWlzZWQgYXQgYSBnaXZlbiB0aW1lLgorCisgICAgICAgIEBwYXJhbSBtYXNrOiBtYXNrLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHJldHVybjogZXZlbnQgbmFtZS4KKyAgICAgICAgQHJ0eXBlOiBzdHIKKyAgICAgICAgIiIiCisgICAgICAgIG1zID0gbWFzaworICAgICAgICBuYW1lID0gJyVzJworICAgICAgICBpZiBtYXNrICYgSU5fSVNESVI6CisgICAgICAgICAgICBtcyA9IG1hc2sgLSBJTl9JU0RJUgorICAgICAgICAgICAgbmFtZSA9ICclc3xJTl9JU0RJUicKKyAgICAgICAgcmV0dXJuIG5hbWUgJSBFdmVudHNDb2Rlcy5BTExfVkFMVUVTW21zXQorCisgICAgbWFza25hbWUgPSBzdGF0aWNtZXRob2QobWFza25hbWUpCisKKworIyBTbyBsZXQncyBub3cgdHVybiB0aGUgY29uZmlndXJhdGlvbiBpbnRvIGNvZGUKK0V2ZW50c0NvZGVzLkFMTF9GTEFHUyA9IHt9CitFdmVudHNDb2Rlcy5BTExfVkFMVUVTID0ge30KK2ZvciBmbGFnYywgdmFsYyBpbiBFdmVudHNDb2Rlcy5GTEFHX0NPTExFQ1RJT05TLml0ZW1zKCk6CisgICAgIyBNYWtlIHRoZSBjb2xsZWN0aW9ucycgbWVtYmVycyBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlCisgICAgIyBjbGFzcyBkaWN0aW9uYXJ5CisgICAgc2V0YXR0cihFdmVudHNDb2RlcywgZmxhZ2MsIHZhbGMpCisKKyAgICAjIENvbGxlY3QgYWxsIHRoZSBmbGFncyB1bmRlciBhIGNvbW1vbiB1bWJyZWxsYQorICAgIEV2ZW50c0NvZGVzLkFMTF9GTEFHUy51cGRhdGUodmFsYykKKworICAgICMgTWFrZSB0aGUgaW5kaXZpZHVhbCBtYXNrcyBhY2Nlc3NpYmxlIGFzICdjb25zdGFudHMnIGF0IGdsb2JhbHMoKSBzY29wZQorICAgICMgYW5kIG1hc2tuYW1lcyBhY2Nlc3NpYmxlIGJ5IHZhbHVlcy4KKyAgICBmb3IgbmFtZSwgdmFsIGluIHZhbGMuaXRlbXMoKToKKyAgICAgICAgZ2xvYmFscygpW25hbWVdID0gdmFsCisgICAgICAgIEV2ZW50c0NvZGVzLkFMTF9WQUxVRVNbdmFsXSA9IG5hbWUKKworCisjIGFsbCAnbm9ybWFsJyBldmVudHMKK0FMTF9FVkVOVFMgPSByZWR1Y2UobGFtYmRhIHgsIHk6IHggfCB5LCBFdmVudHNDb2Rlcy5PUF9GTEFHUy52YWx1ZXMoKSkKK0V2ZW50c0NvZGVzLkFMTF9GTEFHU1snQUxMX0VWRU5UUyddID0gQUxMX0VWRU5UUworRXZlbnRzQ29kZXMuQUxMX1ZBTFVFU1tBTExfRVZFTlRTXSA9ICdBTExfRVZFTlRTJworCisKK2NsYXNzIF9FdmVudDoKKyAgICAiIiIKKyAgICBFdmVudCBzdHJ1Y3R1cmUsIHJlcHJlc2VudCBldmVudHMgcmFpc2VkIGJ5IHRoZSBzeXN0ZW0uIFRoaXMKKyAgICBpcyB0aGUgYmFzZSBjbGFzcyBhbmQgc2hvdWxkIGJlIHN1YmNsYXNzZWQuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGljdF8pOgorICAgICAgICAiIiIKKyAgICAgICAgQXR0YWNoIGF0dHJpYnV0ZXMgKGNvbnRhaW5lZCBpbiBkaWN0XykgdG8gc2VsZi4KKworICAgICAgICBAcGFyYW0gZGljdF86IFNldCBvZiBhdHRyaWJ1dGVzLgorICAgICAgICBAdHlwZSBkaWN0XzogZGljdGlvbmFyeQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIHRwbCBpbiBkaWN0Xy5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCAqdHBsKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQHJldHVybjogR2VuZXJpYyBldmVudCBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisgICAgICAgIEBydHlwZTogc3RyCisgICAgICAgICIiIgorICAgICAgICBzID0gJycKKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIHNvcnRlZChzZWxmLl9fZGljdF9fLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFswXSk6CisgICAgICAgICAgICBpZiBhdHRyLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgYXR0ciA9PSAnbWFzayc6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBoZXgoZ2V0YXR0cihzZWxmLCBhdHRyKSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZykgYW5kIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICInJyIKKyAgICAgICAgICAgIHMgKz0gJyAlcyVzJXMnICUgKG91dHB1dF9mb3JtYXQuZmllbGRfbmFtZShhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQucHVuY3R1YXRpb24oJz0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUodmFsdWUpKQorCisgICAgICAgIHMgPSAnJXMlcyVzICVzJyAlIChvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc8JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LmNsYXNzX25hbWUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQucHVuY3R1YXRpb24oJz4nKSkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVwcihzZWxmKQorCisKK2NsYXNzIF9SYXdFdmVudChfRXZlbnQpOgorICAgICIiIgorICAgIFJhdyBldmVudCwgaXQgY29udGFpbnMgb25seSB0aGUgaW5mb3JtYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgSXQgZG9lc24ndCBpbmZlciBhbnl0aGluZy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2QsIG1hc2ssIGNvb2tpZSwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIERlc2NyaXB0b3IuCisgICAgICAgIEB0eXBlIHdkOiBpbnQKKyAgICAgICAgQHBhcmFtIG1hc2s6IEJpdG1hc2sgb2YgZXZlbnRzLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHBhcmFtIGNvb2tpZTogQ29va2llLgorICAgICAgICBAdHlwZSBjb29raWU6IGludAorICAgICAgICBAcGFyYW0gbmFtZTogQmFzZW5hbWUgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGFnYWluc3Qgd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgICAgICBldmVudCB3YXMgcmFpc2VkIGluIGNhc2Ugd2hlcmUgdGhlIHdhdGNoZWQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgcGFyZW50IGRpcmVjdG9yeS4gTm9uZSBpZiB0aGUgZXZlbnQgd2FzIHJhaXNlZAorICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHdhdGNoZWQgaXRlbSBpdHNlbGYuCisgICAgICAgIEB0eXBlIG5hbWU6IHN0cmluZyBvciBOb25lCisgICAgICAgICIiIgorICAgICAgICAjIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGNhY2hlIHRoZSByZXN1bHQgb2Ygc3RyKHNlbGYpLCB0aGlzIG9iamVjdAorICAgICAgICAjIGlzIGltbXV0YWJsZS4KKyAgICAgICAgc2VsZi5fc3RyID0gTm9uZQorICAgICAgICAjIG5hbWU6IHJlbW92ZSB0cmFpbGluZyAnXDAnCisgICAgICAgIGQgPSB7J3dkJzogd2QsCisgICAgICAgICAgICAgJ21hc2snOiBtYXNrLAorICAgICAgICAgICAgICdjb29raWUnOiBjb29raWUsCisgICAgICAgICAgICAgJ25hbWUnOiBuYW1lLnJzdHJpcCgnXDAnKX0KKyAgICAgICAgX0V2ZW50Ll9faW5pdF9fKHNlbGYsIGQpCisgICAgICAgIGxvZy5kZWJ1ZyhzdHIoc2VsZikpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc3RyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHIgPSBfRXZlbnQuX19zdHJfXyhzZWxmKQorICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisKKworY2xhc3MgRXZlbnQoX0V2ZW50KToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGNvbnRhaW5zIGFsbCB0aGUgdXNlZnVsIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgb2JzZXJ2ZWQKKyAgICBldmVudC4gSG93ZXZlciwgdGhlIHByZXNlbmNlIG9mIGVhY2ggZmllbGQgaXMgbm90IGd1YXJhbnRlZWQgYW5kCisgICAgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBldmVudC4gSW4gZWZmZWN0LCBzb21lIGZpZWxkcyBhcmUgaXJyZWxldmFudAorICAgIGZvciBzb21lIGtpbmQgb2YgZXZlbnQgKGZvciBleGFtcGxlICdjb29raWUnIGlzIG1lYW5pbmdsZXNzIGZvcgorICAgIElOX0NSRUFURSB3aGVyZWFzIGl0IGlzIG1hbmRhdG9yeSBmb3IgSU5fTU9WRV9UTykuCisKKyAgICBUaGUgcG9zc2libGUgZmllbGRzIGFyZToKKyAgICAgIC0gd2QgKGludCk6IFdhdGNoIERlc2NyaXB0b3IuCisgICAgICAtIG1hc2sgKGludCk6IE1hc2suCisgICAgICAtIG1hc2tuYW1lIChzdHIpOiBSZWFkYWJsZSBldmVudCBuYW1lLgorICAgICAgLSBwYXRoIChzdHIpOiBwYXRoIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBiZWluZyB3YXRjaGVkLgorICAgICAgLSBuYW1lIChzdHIpOiBCYXNlbmFtZSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYWdhaW5zdCB3aGljaCB0aGUKKyAgICAgICAgICAgICAgZXZlbnQgd2FzIHJhaXNlZCBpbiBjYXNlIHdoZXJlIHRoZSB3YXRjaGVkIGRpcmVjdG9yeQorICAgICAgICAgICAgICBpcyB0aGUgcGFyZW50IGRpcmVjdG9yeS4gTm9uZSBpZiB0aGUgZXZlbnQgd2FzIHJhaXNlZAorICAgICAgICAgICAgICBvbiB0aGUgd2F0Y2hlZCBpdGVtIGl0c2VsZi4gVGhpcyBmaWVsZCBpcyBhbHdheXMgcHJvdmlkZWQKKyAgICAgICAgICAgICAgZXZlbiBpZiB0aGUgc3RyaW5nIGlzICcnLgorICAgICAgLSBwYXRobmFtZSAoc3RyKTogQ29uY2F0ZW5hdGlvbiBvZiAncGF0aCcgYW5kICduYW1lJy4KKyAgICAgIC0gc3JjX3BhdGhuYW1lIChzdHIpOiBPbmx5IHByZXNlbnQgZm9yIElOX01PVkVEX1RPIGV2ZW50cyBhbmQgb25seSBpbgorICAgICAgICAgICAgICB0aGUgY2FzZSB3aGVyZSBJTl9NT1ZFRF9GUk9NIGV2ZW50cyBhcmUgd2F0Y2hlZCB0b28uIEhvbGRzIHRoZQorICAgICAgICAgICAgICBzb3VyY2UgcGF0aG5hbWUgZnJvbSB3aGVyZSBwYXRobmFtZSB3YXMgbW92ZWQgZnJvbS4KKyAgICAgIC0gY29va2llIChpbnQpOiBDb29raWUuCisgICAgICAtIGRpciAoYm9vbCk6IFRydWUgaWYgdGhlIGV2ZW50IHdhcyByYWlzZWQgYWdhaW5zdCBhIGRpcmVjdG9yeS4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29uY3JldGVseSwgdGhpcyBpcyB0aGUgcmF3IGV2ZW50IHBsdXMgaW5mZXJyZWQgaW5mb3MuCisgICAgICAgICIiIgorICAgICAgICBfRXZlbnQuX19pbml0X18oc2VsZiwgcmF3KQorICAgICAgICBzZWxmLm1hc2tuYW1lID0gRXZlbnRzQ29kZXMubWFza25hbWUoc2VsZi5tYXNrKQorICAgICAgICBpZiBDT01QQVRJQklMSVRZX01PREU6CisgICAgICAgICAgICBzZWxmLmV2ZW50X25hbWUgPSBzZWxmLm1hc2tuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYubmFtZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRobmFtZSA9IG9zLnBhdGguYWJzcGF0aChzZWxmLnBhdGgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZXJyOgorICAgICAgICAgICAgIyBVc3VhbGx5IGl0IGlzIG5vdCBhbiBlcnJvciBzb21lIGV2ZW50cyBhcmUgcGVyZmVjdGx5IHZhbGlkcworICAgICAgICAgICAgIyBkZXNwaXRlIHRoZSBsYWNrIG9mIHRoZXNlIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICBsb2cuZGVidWcoZXJyKQorCisKK2NsYXNzIFByb2Nlc3NFdmVudEVycm9yKFB5aW5vdGlmeUVycm9yKToKKyAgICAiIiIKKyAgICBQcm9jZXNzRXZlbnRFcnJvciBFeGNlcHRpb24uIFJhaXNlZCBvbiBQcm9jZXNzRXZlbnQgZXJyb3IuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycik6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gZXJyOiBFeGNlcHRpb24gZXJyb3IgZGVzY3JpcHRpb24uCisgICAgICAgIEB0eXBlIGVycjogc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBQeWlub3RpZnlFcnJvci5fX2luaXRfXyhzZWxmLCBlcnIpCisKKworY2xhc3MgX1Byb2Nlc3NFdmVudDoKKyAgICAiIiIKKyAgICBBYnN0cmFjdCBwcm9jZXNzaW5nIGV2ZW50IGNsYXNzLgorICAgICIiIgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBUbyBiZWhhdmUgbGlrZSBhIGZ1bmN0b3IgdGhlIG9iamVjdCBtdXN0IGJlIGNhbGxhYmxlLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGRpc3BhdGNoIG1ldGhvZC4gSXRzIGxvb2t1cCBvcmRlciBpczoKKyAgICAgICAgICAxLiBwcm9jZXNzX01BU0tOQU1FIG1ldGhvZAorICAgICAgICAgIDIuIHByb2Nlc3NfRkFNSUxZX05BTUUgbWV0aG9kCisgICAgICAgICAgMy4gb3RoZXJ3aXNlIGNhbGxzIHByb2Nlc3NfZGVmYXVsdAorCisgICAgICAgIEBwYXJhbSBldmVudDogRXZlbnQgdG8gYmUgcHJvY2Vzc2VkLgorICAgICAgICBAdHlwZSBldmVudDogRXZlbnQgb2JqZWN0CisgICAgICAgIEByZXR1cm46IEJ5IGNvbnZlbnRpb24gd2hlbiB1c2VkIGZyb20gdGhlIFByb2Nlc3NFdmVudCBjbGFzczoKKyAgICAgICAgICAgICAgICAgLSBSZXR1cm5pbmcgRmFsc2Ugb3IgTm9uZSAoZGVmYXVsdCB2YWx1ZSkgbWVhbnMga2VlcCBvbgorICAgICAgICAgICAgICAgICBleGVjdXRpbmcgbmV4dCBjaGFpbmVkIGZ1bmN0b3JzIChzZWUgY2hhaW4ucHkgZXhhbXBsZSkuCisgICAgICAgICAgICAgICAgIC0gUmV0dXJuaW5nIFRydWUgaW5zdGVhZCBtZWFucyBkbyBub3QgZXhlY3V0ZSBuZXh0CisgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBmdW5jdGlvbnMuCisgICAgICAgIEBydHlwZTogYm9vbAorICAgICAgICBAcmFpc2UgUHJvY2Vzc0V2ZW50RXJyb3I6IEV2ZW50IG9iamVjdCB1bmRpc3BhdGNoYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGV2ZW50LgorICAgICAgICAiIiIKKyAgICAgICAgc3RyaXBwZWRfbWFzayA9IGV2ZW50Lm1hc2sgLSAoZXZlbnQubWFzayAmIElOX0lTRElSKQorICAgICAgICBtYXNrbmFtZSA9IEV2ZW50c0NvZGVzLkFMTF9WQUxVRVMuZ2V0KHN0cmlwcGVkX21hc2spCisgICAgICAgIGlmIG1hc2tuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBQcm9jZXNzRXZlbnRFcnJvcigiVW5rbm93biBtYXNrIDB4JTA4eCIgJSBzdHJpcHBlZF9tYXNrKQorCisgICAgICAgICMgMS0gbG9vayBmb3IgcHJvY2Vzc19NQVNLTkFNRQorICAgICAgICBtZXRoID0gZ2V0YXR0cihzZWxmLCAncHJvY2Vzc18nICsgbWFza25hbWUsIE5vbmUpCisgICAgICAgIGlmIG1ldGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gbWV0aChldmVudCkKKyAgICAgICAgIyAyLSBsb29rIGZvciBwcm9jZXNzX0ZBTUlMWV9OQU1FCisgICAgICAgIG1ldGggPSBnZXRhdHRyKHNlbGYsICdwcm9jZXNzX0lOXycgKyBtYXNrbmFtZS5zcGxpdCgnXycpWzFdLCBOb25lKQorICAgICAgICBpZiBtZXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIG1ldGgoZXZlbnQpCisgICAgICAgICMgMy0gZGVmYXVsdCBjYWxsIG1ldGhvZCBwcm9jZXNzX2RlZmF1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KGV2ZW50KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwlcz4nICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworCitjbGFzcyBfU3lzUHJvY2Vzc0V2ZW50KF9Qcm9jZXNzRXZlbnQpOgorICAgICIiIgorICAgIFRoZXJlIGlzIHRocmVlIGtpbmQgb2YgcHJvY2Vzc2luZyBhY2NvcmRpbmcgdG8gZWFjaCBldmVudDoKKworICAgICAgMS4gc3BlY2lhbCBoYW5kbGluZyAoZGVsZXRpb24gZnJvbSBpbnRlcm5hbCBjb250YWluZXIsIGJ1ZywgLi4uKS4KKyAgICAgIDIuIGRlZmF1bHQgdHJlYXRtZW50OiB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBtYWpvcml0eSBvZiBldmVudHMuCisgICAgICAzLiBJTl9JU0RJUiBpcyBuZXZlciBzZW50IGFsb25lLCBoZSBpcyBwaWdneWJhY2tlZCB3aXRoIGEgc3RhbmRhcmQKKyAgICAgICAgIGV2ZW50LCBoZSBpcyBub3QgcHJvY2Vzc2VkIGFzIHRoZSBvdGhlcnMgZXZlbnRzLCBpbnN0ZWFkLCBpdHMKKyAgICAgICAgIHZhbHVlIGlzIGNhcHR1cmVkIGFuZCBhcHByb3ByaWF0ZWx5IGFnZ3JlZ2F0ZWQgdG8gZHN0IGV2ZW50LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3bSwgbm90aWZpZXIpOgorICAgICAgICAiIiIKKworICAgICAgICBAcGFyYW0gd206IFdhdGNoIE1hbmFnZXIuCisgICAgICAgIEB0eXBlIHdtOiBXYXRjaE1hbmFnZXIgaW5zdGFuY2UKKyAgICAgICAgQHBhcmFtIG5vdGlmaWVyOiBOb3RpZmllci4KKyAgICAgICAgQHR5cGUgbm90aWZpZXI6IE5vdGlmaWVyIGluc3RhbmNlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl93YXRjaF9tYW5hZ2VyID0gd20gICMgd2F0Y2ggbWFuYWdlcgorICAgICAgICBzZWxmLl9ub3RpZmllciA9IG5vdGlmaWVyICAjIG5vdGlmaWVyCisgICAgICAgIHNlbGYuX212X2Nvb2tpZSA9IHt9ICAjIHtjb29raWUoaW50KTogKHNyY19wYXRoKHN0ciksIGRhdGUpLCAuLi59CisgICAgICAgIHNlbGYuX212ID0ge30gICMge3NyY19wYXRoKHN0cik6IChkc3RfcGF0aChzdHIpLCBkYXRlKSwgLi4ufQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbnVwIChkZWxldGUpIG9sZCAoPjFtbikgcmVjb3JkcyBjb250YWluZWQgaW4gc2VsZi5fbXZfY29va2llCisgICAgICAgIGFuZCBzZWxmLl9tdi4KKyAgICAgICAgIiIiCisgICAgICAgIGRhdGVfY3VyXyA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIGZvciBzZXEgaW4gW3NlbGYuX212X2Nvb2tpZSwgc2VsZi5fbXZdOgorICAgICAgICAgICAgZm9yIGsgaW4gc2VxLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiAoZGF0ZV9jdXJfIC0gc2VxW2tdWzFdKSA+IHRpbWVkZWx0YShtaW51dGVzPTEpOgorICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ0NsZWFudXA6IGRlbGV0aW5nIGVudHJ5ICVzJywgc2VxW2tdWzBdKQorICAgICAgICAgICAgICAgICAgICBkZWwgc2VxW2tdCisKKyAgICBkZWYgcHJvY2Vzc19JTl9DUkVBVEUoc2VsZiwgcmF3X2V2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIElmIHRoZSBldmVudCBhZmZlY3RzIGEgZGlyZWN0b3J5IGFuZCB0aGUgYXV0b19hZGQgZmxhZyBvZiB0aGUKKyAgICAgICAgdGFyZ2V0dGVkIHdhdGNoIGlzIHNldCB0byBUcnVlLCBhIG5ldyB3YXRjaCBpcyBhZGRlZCBvbiB0aGlzCisgICAgICAgIG5ldyBkaXJlY3RvcnksIHdpdGggdGhlIHNhbWUgYXR0cmlidXRlIHZhbHVlcyB0aGFuIHRob3NlIG9mCisgICAgICAgIHRoaXMgd2F0Y2guCisgICAgICAgICIiIgorICAgICAgICBpZiByYXdfZXZlbnQubWFzayAmIElOX0lTRElSOgorICAgICAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICAgICAgY3JlYXRlZF9kaXIgPSBvcy5wYXRoLmpvaW4od2F0Y2hfLnBhdGgsIHJhd19ldmVudC5uYW1lKQorICAgICAgICAgICAgaWYgd2F0Y2hfLmF1dG9fYWRkIGFuZCBub3Qgd2F0Y2hfLmV4Y2x1ZGVfZmlsdGVyKGNyZWF0ZWRfZGlyKToKKyAgICAgICAgICAgICAgICBhZGR3ID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5hZGRfd2F0Y2gKKyAgICAgICAgICAgICAgICAjIFRoZSBuZXdseSBtb25pdG9yZWQgZGlyZWN0b3J5IGluaGVyaXRzIGF0dHJpYnV0ZXMgZnJvbSBpdHMKKyAgICAgICAgICAgICAgICAjIHBhcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgYWRkd19yZXQgPSBhZGR3KGNyZWF0ZWRfZGlyLCB3YXRjaF8ubWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19mdW49d2F0Y2hfLnByb2NfZnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWM9RmFsc2UsIGF1dG9fYWRkPXdhdGNoXy5hdXRvX2FkZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXI9d2F0Y2hfLmV4Y2x1ZGVfZmlsdGVyKQorCisgICAgICAgICAgICAgICAgIyBUcmljayB0byBoYW5kbGUgbWtkaXIgLXAgL2QxL2QyL3QzIHdoZXJlIGQxIGlzIHdhdGNoZWQgYW5kCisgICAgICAgICAgICAgICAgIyBkMiBhbmQgdDMgKGRpcmVjdG9yeSBvciBmaWxlKSBhcmUgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAjIFNpbmNlIHRoZSBkaXJlY3RvcnkgZDIgaXMgbmV3LCB0aGVuIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IG11c3QKKyAgICAgICAgICAgICAgICAjIGFsc28gYmUgbmV3LgorICAgICAgICAgICAgICAgIGNyZWF0ZWRfZGlyX3dkID0gYWRkd19yZXQuZ2V0KGNyZWF0ZWRfZGlyKQorICAgICAgICAgICAgICAgIGlmICgoY3JlYXRlZF9kaXJfd2QgaXMgbm90IE5vbmUpIGFuZCAoY3JlYXRlZF9kaXJfd2QgPiAwKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5pc2RpcihjcmVhdGVkX2RpcikpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKGNyZWF0ZWRfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lciA9IG9zLnBhdGguam9pbihjcmVhdGVkX2RpciwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF93ZChpbm5lcikgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSAoc2ltdWxhdGUpIGNyZWF0aW9uIGV2ZW50cyBmb3Igc3ViLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGlubmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW1saW5rcyBhcmUgaGFuZGxlZCBhcyBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBJTl9DUkVBVEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoaW5uZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IElOX0NSRUFURSB8IElOX0lTRElSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHBhdGggc2hvdWxkIG5vdCBiZSB0YWtlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdldmVudCA9IF9SYXdFdmVudChjcmVhdGVkX2Rpcl93ZCwgZmxhZ3MsIDAsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbm90aWZpZXIuYXBwZW5kX2V2ZW50KHJhd2V2ZW50KQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInByb2Nlc3NfSU5fQ1JFQVRFLCBpbnZhbGlkIGRpcmVjdG9yeSAlczogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcobXNnICUgKGNyZWF0ZWRfZGlyLCBzdHIoZXJyKSkpCisgICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3NfZGVmYXVsdChyYXdfZXZlbnQpCisKKyAgICBkZWYgcHJvY2Vzc19JTl9NT1ZFRF9GUk9NKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBNYXAgdGhlIGNvb2tpZSB3aXRoIHRoZSBzb3VyY2UgcGF0aCAoKyBkYXRlIGZvciBjbGVhbmluZykuCisgICAgICAgICIiIgorICAgICAgICB3YXRjaF8gPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF93YXRjaChyYXdfZXZlbnQud2QpCisgICAgICAgIHBhdGhfID0gd2F0Y2hfLnBhdGgKKyAgICAgICAgc3JjX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihwYXRoXywgcmF3X2V2ZW50Lm5hbWUpKQorICAgICAgICBzZWxmLl9tdl9jb29raWVbcmF3X2V2ZW50LmNvb2tpZV0gPSAoc3JjX3BhdGgsIGRhdGV0aW1lLm5vdygpKQorICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2RlZmF1bHQocmF3X2V2ZW50LCB7J2Nvb2tpZSc6IHJhd19ldmVudC5jb29raWV9KQorCisgICAgZGVmIHByb2Nlc3NfSU5fTU9WRURfVE8oc2VsZiwgcmF3X2V2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcCB0aGUgc291cmNlIHBhdGggd2l0aCB0aGUgZGVzdGluYXRpb24gcGF0aCAoKyBkYXRlIGZvcgorICAgICAgICBjbGVhbmluZykuCisgICAgICAgICIiIgorICAgICAgICB3YXRjaF8gPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF93YXRjaChyYXdfZXZlbnQud2QpCisgICAgICAgIHBhdGhfID0gd2F0Y2hfLnBhdGgKKyAgICAgICAgZHN0X3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihwYXRoXywgcmF3X2V2ZW50Lm5hbWUpKQorICAgICAgICBtdl8gPSBzZWxmLl9tdl9jb29raWUuZ2V0KHJhd19ldmVudC5jb29raWUpCisgICAgICAgIHRvX2FwcGVuZCA9IHsnY29va2llJzogcmF3X2V2ZW50LmNvb2tpZX0KKyAgICAgICAgaWYgbXZfIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbXZbbXZfWzBdXSA9IChkc3RfcGF0aCwgZGF0ZXRpbWUubm93KCkpCisgICAgICAgICAgICAjIExldCdzIGFzc3VtZSB0aGF0IElOX01PVkVEX0ZST00gZXZlbnQgaXMgYWx3YXlzIHF1ZXVlZCBiZWZvcmUKKyAgICAgICAgICAgICMgdGhhdCBpdHMgYXNzb2NpYXRlZCAodGhleSBzaGFyZSBhIGNvbW1vbiBjb29raWUpIElOX01PVkVEX1RPCisgICAgICAgICAgICAjIGV2ZW50IGlzIHF1ZXVlZCBpdHNlbGYuIEl0IGlzIHRoZW4gcG9zc2libGUgaW4gdGhhdCBzY2VuYXJpbworICAgICAgICAgICAgIyB0byBwcm92aWRlIGFzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gdGhlIElOX01PVkVEX1RPIGV2ZW50CisgICAgICAgICAgICAjIHRoZSBvcmlnaW5hbCBwYXRobmFtZSBvZiB0aGUgbW92ZWQgZmlsZS9kaXJlY3RvcnkuCisgICAgICAgICAgICB0b19hcHBlbmRbJ3NyY19wYXRobmFtZSddID0gbXZfWzBdCisgICAgICAgIGVsaWYgKHJhd19ldmVudC5tYXNrICYgSU5fSVNESVIgYW5kIHdhdGNoXy5hdXRvX2FkZCBhbmQKKyAgICAgICAgICAgICAgbm90IHdhdGNoXy5leGNsdWRlX2ZpbHRlcihkc3RfcGF0aCkpOgorICAgICAgICAgICAgIyBXZSBnb3QgYSBkaXJldG9yeSB0aGF0J3MgIm1vdmVkIGluIiBmcm9tIGFuIHVua25vd24gc291cmNlIGFuZAorICAgICAgICAgICAgIyBhdXRvX2FkZCBpcyBlbmFibGVkLiBNYW51YWxseSBhZGQgd2F0Y2hlcyB0byB0aGUgaW5uZXIgc3VidHJlZXMuCisgICAgICAgICAgICAjIFRoZSBuZXdseSBtb25pdG9yZWQgZGlyZWN0b3J5IGluaGVyaXRzIGF0dHJpYnV0ZXMgZnJvbSBpdHMKKyAgICAgICAgICAgICMgcGFyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIHNlbGYuX3dhdGNoX21hbmFnZXIuYWRkX3dhdGNoKGRzdF9wYXRoLCB3YXRjaF8ubWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfZnVuPXdhdGNoXy5wcm9jX2Z1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYz1UcnVlLCBhdXRvX2FkZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXI9d2F0Y2hfLmV4Y2x1ZGVfZmlsdGVyKQorICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2RlZmF1bHQocmF3X2V2ZW50LCB0b19hcHBlbmQpCisKKyAgICBkZWYgcHJvY2Vzc19JTl9NT1ZFX1NFTEYoc2VsZiwgcmF3X2V2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIFNUQVRVUzogdGhlIGZvbGxvd2luZyBidWcgaGFzIGJlZW4gZml4ZWQgaW4gcmVjZW50IGtlcm5lbHMgKEZJWE1FOgorICAgICAgICB3aGljaCB2ZXJzaW9uID8pLiBOb3cgaXQgcmFpc2VzIElOX0RFTEVURV9TRUxGIGluc3RlYWQuCisKKyAgICAgICAgT2xkIGtlcm5lbHMgd2VyZSBidWdnZWQsIHRoaXMgZXZlbnQgcmFpc2VkIHdoZW4gdGhlIHdhdGNoZWQgaXRlbQorICAgICAgICB3ZXJlIG1vdmVkLCBzbyB3ZSBoYWQgdG8gdXBkYXRlIGl0cyBwYXRoLCBidXQgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzCisgICAgICAgIGl0IHdhcyBpbXBvc3NpYmxlOiBpZiBpdHMgcGFyZW50IGRpcmVjdG9yeSBhbmQgaXRzIGRlc3RpbmF0aW9uCisgICAgICAgIGRpcmVjdG9yeSB3YXNuJ3Qgd2F0Y2hlZC4gVGhlIGtlcm5lbCAoc2VlIGluY2x1ZGUvbGludXgvZnNub3RpZnkuaCkKKyAgICAgICAgZG9lc24ndCBicmluZyB1cyBlbm91Z2ggaW5mb3JtYXRpb25zIGxpa2UgdGhlIGRlc3RpbmF0aW9uIHBhdGggb2YKKyAgICAgICAgbW92ZWQgaXRlbXMuCisgICAgICAgICIiIgorICAgICAgICB3YXRjaF8gPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF93YXRjaChyYXdfZXZlbnQud2QpCisgICAgICAgIHNyY19wYXRoID0gd2F0Y2hfLnBhdGgKKyAgICAgICAgbXZfID0gc2VsZi5fbXYuZ2V0KHNyY19wYXRoKQorICAgICAgICBpZiBtdl86CisgICAgICAgICAgICBkZXN0X3BhdGggPSBtdl9bMF0KKyAgICAgICAgICAgIHdhdGNoXy5wYXRoID0gZGVzdF9wYXRoCisgICAgICAgICAgICAjIGFkZCB0aGUgc2VwYXJhdG9yIHRvIHRoZSBzb3VyY2UgcGF0aCB0byBhdm9pZCBvdmVybGFwcGluZworICAgICAgICAgICAgIyBwYXRoIGlzc3VlIHdoZW4gdGVzdGluZyB3aXRoIHN0YXJ0c3dpdGgoKQorICAgICAgICAgICAgc3JjX3BhdGggKz0gb3MucGF0aC5zZXAKKyAgICAgICAgICAgIHNyY19wYXRoX2xlbiA9IGxlbihzcmNfcGF0aCkKKyAgICAgICAgICAgICMgVGhlIG5leHQgbG9vcCByZW5hbWVzIGFsbCB3YXRjaGVzIHdpdGggc3JjX3BhdGggYXMgYmFzZSBwYXRoLgorICAgICAgICAgICAgIyBJdCBzZWVtcyB0aGF0IElOX01PVkVfU0VMRiBkb2VzIG5vdCBwcm92aWRlIElOX0lTRElSIGluZm9ybWF0aW9uCisgICAgICAgICAgICAjIHRoZXJlZm9yZSB0aGUgbmV4dCBsb29wIGlzIGl0ZXJhdGVkIGV2ZW4gaWYgcmF3X2V2ZW50IGlzIGEgZmlsZS4KKyAgICAgICAgICAgIGZvciB3IGluIHNlbGYuX3dhdGNoX21hbmFnZXIud2F0Y2hlcy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBpZiB3LnBhdGguc3RhcnRzd2l0aChzcmNfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IGRlc3RfcGF0aCBpcyBhIG5vcm1hbGl6ZWQgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgdy5wYXRoID0gb3MucGF0aC5qb2luKGRlc3RfcGF0aCwgdy5wYXRoW3NyY19wYXRoX2xlbjpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCJUaGUgcGF0aG5hbWUgJyVzJyBvZiB0aGlzIHdhdGNoICVzIGhhcyBwcm9iYWJseSBjaGFuZ2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAiYW5kIGNvdWxkbid0IGJlIHVwZGF0ZWQsIHNvIGl0IGNhbm5vdCBiZSB0cnVzdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAiYW55bW9yZS4gVG8gZml4IHRoaXMgZXJyb3IgbW92ZSBkaXJlY3Rvcmllcy9maWxlcyBvbmx5ICIKKyAgICAgICAgICAgICAgICAgICAgICAiYmV0d2VlbiB3YXRjaGVkIHBhcmVudHMgZGlyZWN0b3JpZXMsIGluIHRoaXMgY2FzZSBlLmcuICIKKyAgICAgICAgICAgICAgICAgICAgICAicHV0IGEgd2F0Y2ggb24gJyVzJy4iLAorICAgICAgICAgICAgICAgICAgICAgIHdhdGNoXy5wYXRoLCB3YXRjaF8sCisgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4od2F0Y2hfLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5wYXJkaXIpKSkKKyAgICAgICAgICAgIGlmIG5vdCB3YXRjaF8ucGF0aC5lbmRzd2l0aCgnLXVua25vd24tcGF0aCcpOgorICAgICAgICAgICAgICAgIHdhdGNoXy5wYXRoICs9ICctdW5rbm93bi1wYXRoJworICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2RlZmF1bHQocmF3X2V2ZW50KQorCisgICAgZGVmIHByb2Nlc3NfSU5fUV9PVkVSRkxPVyhzZWxmLCByYXdfZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgT25seSBzaWduYWwgYW4gb3ZlcmZsb3csIG1vc3Qgb2YgdGhlIGNvbW1vbiBmbGFncyBhcmUgaXJyZWxldmFudAorICAgICAgICBmb3IgdGhpcyBldmVudCAocGF0aCwgd2QsIG5hbWUpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEV2ZW50KHsnbWFzayc6IHJhd19ldmVudC5tYXNrfSkKKworICAgIGRlZiBwcm9jZXNzX0lOX0lHTk9SRUQoc2VsZiwgcmF3X2V2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSB3YXRjaCBkZXNjcmlwdG9yIHJhaXNlZCBieSB0aGlzIGV2ZW50IGlzIG5vdyBpZ25vcmVkIChmb3JldmVyKSwKKyAgICAgICAgaXQgY2FuIGJlIHNhZmVseSBkZWxldGVkIGZyb20gdGhlIHdhdGNoIG1hbmFnZXIgZGljdGlvbmFyeS4KKyAgICAgICAgQWZ0ZXIgdGhpcyBldmVudCB3ZSBjYW4gYmUgc3VyZSB0aGF0IG5laXRoZXIgdGhlIGV2ZW50IHF1ZXVlIG5vcgorICAgICAgICB0aGUgc3lzdGVtIHdpbGwgcmFpc2UgYW4gZXZlbnQgYXNzb2NpYXRlZCB0byB0aGlzIHdkIGFnYWluLgorICAgICAgICAiIiIKKyAgICAgICAgZXZlbnRfID0gc2VsZi5wcm9jZXNzX2RlZmF1bHQocmF3X2V2ZW50KQorICAgICAgICBzZWxmLl93YXRjaF9tYW5hZ2VyLmRlbF93YXRjaChyYXdfZXZlbnQud2QpCisgICAgICAgIHJldHVybiBldmVudF8KKworICAgIGRlZiBwcm9jZXNzX2RlZmF1bHQoc2VsZiwgcmF3X2V2ZW50LCB0b19hcHBlbmQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21tb25zIGhhbmRsaW5nIGZvciB0aGUgZm9sbG93aW5ncyBldmVudHM6CisKKyAgICAgICAgSU5fQUNDRVNTLCBJTl9NT0RJRlksIElOX0FUVFJJQiwgSU5fQ0xPU0VfV1JJVEUsIElOX0NMT1NFX05PV1JJVEUsCisgICAgICAgIElOX09QRU4sIElOX0RFTEVURSwgSU5fREVMRVRFX1NFTEYsIElOX1VOTU9VTlQuCisgICAgICAgICIiIgorICAgICAgICB3YXRjaF8gPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF93YXRjaChyYXdfZXZlbnQud2QpCisgICAgICAgIGlmIHJhd19ldmVudC5tYXNrICYgKElOX0RFTEVURV9TRUxGIHwgSU5fTU9WRV9TRUxGKToKKyAgICAgICAgICAgICMgVW5mb3JudWxhdGVseSB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBwcm92aWRlZCBieSB0aGUga2VybmVsCisgICAgICAgICAgICBkaXJfID0gd2F0Y2hfLmRpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlyXyA9IGJvb2wocmF3X2V2ZW50Lm1hc2sgJiBJTl9JU0RJUikKKyAgICAgICAgZGljdF8gPSB7J3dkJzogcmF3X2V2ZW50LndkLAorICAgICAgICAgICAgICAgICAnbWFzayc6IHJhd19ldmVudC5tYXNrLAorICAgICAgICAgICAgICAgICAncGF0aCc6IHdhdGNoXy5wYXRoLAorICAgICAgICAgICAgICAgICAnbmFtZSc6IHJhd19ldmVudC5uYW1lLAorICAgICAgICAgICAgICAgICAnZGlyJzogZGlyX30KKyAgICAgICAgaWYgQ09NUEFUSUJJTElUWV9NT0RFOgorICAgICAgICAgICAgZGljdF9bJ2lzX2RpciddID0gZGlyXworICAgICAgICBpZiB0b19hcHBlbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkaWN0Xy51cGRhdGUodG9fYXBwZW5kKQorICAgICAgICByZXR1cm4gRXZlbnQoZGljdF8pCisKKworY2xhc3MgUHJvY2Vzc0V2ZW50KF9Qcm9jZXNzRXZlbnQpOgorICAgICIiIgorICAgIFByb2Nlc3MgZXZlbnRzIG9iamVjdHMsIGNhbiBiZSBzcGVjaWFsaXplZCB2aWEgc3ViY2xhc3NpbmcsIHRodXMgaXRzCisgICAgYmVoYXZpb3IgY2FuIGJlIG92ZXJyaWRlbjoKKworICAgIE5vdGU6IHlvdSBzaG91bGQgbm90IG92ZXJyaWRlIF9faW5pdF9fIGluIHlvdXIgc3ViY2xhc3MgaW5zdGVhZCBkZWZpbmUKKyAgICBhIG15X2luaXQoKSBtZXRob2QsIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUKKyAgICBjb25zdHJ1Y3RvciBvZiB0aGlzIGNsYXNzIHdpdGggaXRzIG9wdGlvbmFscyBwYXJhbWV0ZXJzLgorCisgICAgICAxLiBQcm92aWRlIHNwZWNpYWxpemVkIGluZGl2aWR1YWwgbWV0aG9kcywgZS5nLiBwcm9jZXNzX0lOX0RFTEVURSBmb3IKKyAgICAgICAgIHByb2Nlc3NpbmcgYSBwcmVjaXNlIHR5cGUgb2YgZXZlbnQgKGUuZy4gSU5fREVMRVRFIGluIHRoaXMgY2FzZSkuCisgICAgICAyLiBPci9hbmQgcHJvdmlkZSBtZXRob2RzIGZvciBwcm9jZXNzaW5nIGV2ZW50cyBieSAnZmFtaWx5JywgZS5nLgorICAgICAgICAgcHJvY2Vzc19JTl9DTE9TRSBtZXRob2Qgd2lsbCBwcm9jZXNzIGJvdGggSU5fQ0xPU0VfV1JJVEUgYW5kCisgICAgICAgICBJTl9DTE9TRV9OT1dSSVRFIGV2ZW50cyAoaWYgcHJvY2Vzc19JTl9DTE9TRV9XUklURSBhbmQKKyAgICAgICAgIHByb2Nlc3NfSU5fQ0xPU0VfTk9XUklURSBhcmVuJ3QgZGVmaW5lZCB0aG91Z2gpLgorICAgICAgMy4gT3IvYW5kIG92ZXJyaWRlIHByb2Nlc3NfZGVmYXVsdCBmb3IgY2F0Y2hpbmcgYW5kIHByb2Nlc3NpbmcgYWxsCisgICAgICAgICB0aGUgcmVtYWluaW5nIHR5cGVzIG9mIGV2ZW50cy4KKyAgICAiIiIKKyAgICBwZXZlbnQgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGV2ZW50PU5vbmUsICoqa2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgRW5hYmxlIGNoYWluaW5nIG9mIFByb2Nlc3NFdmVudCBpbnN0YW5jZXMuCisKKyAgICAgICAgQHBhcmFtIHBldmVudDogT3B0aW9uYWwgY2FsbGFibGUgb2JqZWN0LCB3aWxsIGJlIGNhbGxlZCBvbiBldmVudAorICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIChiZWZvcmUgc2VsZikuCisgICAgICAgIEB0eXBlIHBldmVudDogY2FsbGFibGUKKyAgICAgICAgQHBhcmFtIGthcmdzOiBUaGlzIGNvbnN0cnVjdG9yIGlzIGltcGxlbWVudGVkIGFzIGEgdGVtcGxhdGUgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGluZyBpdHMgb3B0aW9uYWxzIGtleXdvcmRlZCBhcmd1bWVudHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIG15X2luaXQoKS4KKyAgICAgICAgQHR5cGUga2FyZ3M6IGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucGV2ZW50ID0gcGV2ZW50CisgICAgICAgIHNlbGYubXlfaW5pdCgqKmthcmdzKQorCisgICAgZGVmIG15X2luaXQoc2VsZiwgKiprYXJncyk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBQcm9jZXNzRXZlbnQuX19pbml0X18oKS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgZW1wdHkgaGVyZSBhbmQgbXVzdCBiZSByZWRlZmluZWQgdG8gYmUgdXNlZnVsLiBJbiBlZmZlY3QsIGlmIHlvdQorICAgICAgICBuZWVkIHRvIHNwZWNpZmljYWxseSBpbml0aWFsaXplIHlvdXIgc3ViY2xhc3MnIGluc3RhbmNlIHRoZW4geW91CisgICAgICAgIGp1c3QgaGF2ZSB0byBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIHN1YmNsYXNzLiBUaGVuIGFsbCB0aGUKKyAgICAgICAga2V5d29yZGVkIGFyZ3VtZW50cyBwYXNzZWQgdG8gUHJvY2Vzc0V2ZW50Ll9faW5pdF9fKCkgd2lsbCBiZQorICAgICAgICB0cmFuc21pdHRlZCBhcyBwYXJhbWV0ZXJzIHRvIHRoaXMgbWV0aG9kLiBCZXdhcmUgeW91IE1VU1QgcGFzcworICAgICAgICBrZXl3b3JkIGFyZ3VtZW50cyB0aG91Z2guCisKKyAgICAgICAgQHBhcmFtIGthcmdzOiBvcHRpb25hbCBkZWxlZ2F0ZWQgYXJndW1lbnRzIGZyb20gX19pbml0X18oKS4KKyAgICAgICAgQHR5cGUga2FyZ3M6IGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBldmVudCk6CisgICAgICAgIHN0b3BfY2hhaW5pbmcgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLnBldmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgQnkgZGVmYXVsdCBtZXRob2RzIHJldHVybiBOb25lIHNvIHdlIHNldCBhcyBndWlkZWxpbmUKKyAgICAgICAgICAgICMgdGhhdCBtZXRob2RzIGFza2luZyBmb3Igc3RvcCBjaGFpbmluZyBtdXN0IGV4cGxpY2l0ZWx5CisgICAgICAgICAgICAjIHJldHVybiBub24gTm9uZSBvciBub24gRmFsc2UgdmFsdWVzLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICMgYmVoYXZpb3Igd2lsbCBiZSB0byBhY2NlcHQgY2hhaW4gY2FsbCB0byB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgIyBsb2NhbCBtZXRob2QuCisgICAgICAgICAgICBzdG9wX2NoYWluaW5nID0gc2VsZi5wZXZlbnQoZXZlbnQpCisgICAgICAgIGlmIG5vdCBzdG9wX2NoYWluaW5nOgorICAgICAgICAgICAgcmV0dXJuIF9Qcm9jZXNzRXZlbnQuX19jYWxsX18oc2VsZiwgZXZlbnQpCisKKyAgICBkZWYgbmVzdGVkX3BldmVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGV2ZW50CisKKyAgICBkZWYgcHJvY2Vzc19JTl9RX09WRVJGTE9XKHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIEJ5IGRlZmF1bHQgdGhpcyBtZXRob2Qgb25seSByZXBvcnRzIHdhcm5pbmcgbWVzc2FnZXMsIHlvdSBjYW4gb3ZlcnJlZGlkZQorICAgICAgICBpdCBieSBzdWJjbGFzc2luZyBQcm9jZXNzRXZlbnQgYW5kIGltcGxlbWVudCB5b3VyIG93bgorICAgICAgICBwcm9jZXNzX0lOX1FfT1ZFUkZMT1cgbWV0aG9kLiBUaGUgYWN0aW9ucyB5b3UgY2FuIHRha2Ugb24gcmVjZWl2aW5nIHRoaXMKKyAgICAgICAgZXZlbnQgaXMgZWl0aGVyIHRvIHVwZGF0ZSB0aGUgdmFyaWFibGUgbWF4X3F1ZXVlZF9ldmVudHMgaW4gb3JkZXIgdG8KKyAgICAgICAgaGFuZGxlIG1vcmUgc2ltdWx0YW5lb3VzIGV2ZW50cyBvciB0byBtb2RpZnkgeW91ciBjb2RlIGluIG9yZGVyIHRvCisgICAgICAgIGFjY29tcGxpc2ggYSBiZXR0ZXIgZmlsdGVyaW5nIGRpbWluaXNoaW5nIHRoZSBudW1iZXIgb2YgcmFpc2VkIGV2ZW50cy4KKyAgICAgICAgQmVjYXVzZSB0aGlzIG1ldGhvZCBpcyBkZWZpbmVkLCBJTl9RX09WRVJGTE9XIHdpbGwgbmV2ZXIgZ2V0CisgICAgICAgIHRyYW5zbWl0dGVkIGFzIGFyZ3VtZW50cyB0byBwcm9jZXNzX2RlZmF1bHQgY2FsbHMuCisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBJTl9RX09WRVJGTE9XIGV2ZW50LgorICAgICAgICBAdHlwZSBldmVudDogZGljdAorICAgICAgICAiIiIKKyAgICAgICAgbG9nLndhcm5pbmcoJ0V2ZW50IHF1ZXVlIG92ZXJmbG93ZWQuJykKKworICAgIGRlZiBwcm9jZXNzX2RlZmF1bHQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVmYXVsdCBwcm9jZXNzaW5nIGV2ZW50IG1ldGhvZC4gQnkgZGVmYXVsdCBkb2VzIG5vdGhpbmcuIFN1YmNsYXNzCisgICAgICAgIFByb2Nlc3NFdmVudCBhbmQgcmVkZWZpbmUgdGhpcyBtZXRob2QgaW4gb3JkZXIgdG8gbW9kaWZ5IGl0cyBiZWhhdmlvci4KKworICAgICAgICBAcGFyYW0gZXZlbnQ6IEV2ZW50IHRvIGJlIHByb2Nlc3NlZC4gQ2FuIGJlIG9mIGFueSB0eXBlIG9mIGV2ZW50cyBidXQKKyAgICAgICAgICAgICAgICAgICAgICBJTl9RX09WRVJGTE9XIGV2ZW50cyAoc2VlIG1ldGhvZCBwcm9jZXNzX0lOX1FfT1ZFUkZMT1cpLgorICAgICAgICBAdHlwZSBldmVudDogRXZlbnQgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworCitjbGFzcyBQcmludEFsbEV2ZW50cyhQcm9jZXNzRXZlbnQpOgorICAgICIiIgorICAgIER1bW15IGNsYXNzIHVzZWQgdG8gcHJpbnQgZXZlbnRzIHN0cmluZ3MgcmVwcmVzZW50YXRpb25zLiBGb3IgaW5zdGFuY2UgdGhpcworICAgIGNsYXNzIGlzIHVzZWQgZnJvbSBjb21tYW5kIGxpbmUgdG8gcHJpbnQgYWxsIHJlY2VpdmVkIGV2ZW50cyB0byBzdGRvdXQuCisgICAgIiIiCisgICAgZGVmIG15X2luaXQoc2VsZiwgb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIG91dDogV2hlcmUgZXZlbnRzIHdpbGwgYmUgd3JpdHRlbi4KKyAgICAgICAgQHR5cGUgb3V0OiBPYmplY3QgcHJvdmlkaW5nIGEgdmFsaWQgZmlsZSBvYmplY3QgaW50ZXJmYWNlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX291dCA9IG91dAorCisgICAgZGVmIHByb2Nlc3NfZGVmYXVsdChzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZXMgZXZlbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIGZpbGUgb2JqZWN0IHByb3ZpZGVkIHRvCisgICAgICAgIG15X2luaXQoKS4KKworICAgICAgICBAcGFyYW0gZXZlbnQ6IEV2ZW50IHRvIGJlIHByb2Nlc3NlZC4gQ2FuIGJlIG9mIGFueSB0eXBlIG9mIGV2ZW50cyBidXQKKyAgICAgICAgICAgICAgICAgICAgICBJTl9RX09WRVJGTE9XIGV2ZW50cyAoc2VlIG1ldGhvZCBwcm9jZXNzX0lOX1FfT1ZFUkZMT1cpLgorICAgICAgICBAdHlwZSBldmVudDogRXZlbnQgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX291dC53cml0ZShzdHIoZXZlbnQpKQorICAgICAgICBzZWxmLl9vdXQud3JpdGUoJ1xuJykKKyAgICAgICAgc2VsZi5fb3V0LmZsdXNoKCkKKworCitjbGFzcyBDaGFpbklmVHJ1ZShQcm9jZXNzRXZlbnQpOgorICAgICIiIgorICAgIE1ha2VzIGNvbmRpdGlvbmFsIGNoYWluaW5nIGRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBuZXN0ZWQKKyAgICBwcm9jZXNzaW5nIGluc3RhbmNlLgorICAgICIiIgorICAgIGRlZiBteV9pbml0KHNlbGYsIGZ1bmMpOgorICAgICAgICAiIiIKKyAgICAgICAgTWV0aG9kIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGZyb20gYmFzZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Z1bmMgPSBmdW5jCisKKyAgICBkZWYgcHJvY2Vzc19kZWZhdWx0KHNlbGYsIGV2ZW50KToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9mdW5jKGV2ZW50KQorCisKK2NsYXNzIFN0YXRzKFByb2Nlc3NFdmVudCk6CisgICAgIiIiCisgICAgQ29tcHV0ZSBhbmQgZGlzcGxheSB0cml2aWFsIHN0YXRpc3RpY3MgYWJvdXQgcHJvY2Vzc2VkIGV2ZW50cy4KKyAgICAiIiIKKyAgICBkZWYgbXlfaW5pdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ldGhvZCBhdXRvbWF0aWNhbGx5IGNhbGxlZCBmcm9tIGJhc2UgY2xhc3MgY29uc3RydWN0b3IuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5fc3RhdHMgPSB7fQorICAgICAgICBzZWxmLl9zdGF0c19sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgZGVmIHByb2Nlc3NfZGVmYXVsdChzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBQcm9jZXNzZXMgfGV2ZW50fC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3N0YXRzX2xvY2suYWNxdWlyZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cyA9IGV2ZW50Lm1hc2tuYW1lLnNwbGl0KCd8JykKKyAgICAgICAgICAgIGZvciBldmVudF9uYW1lIGluIGV2ZW50czoKKyAgICAgICAgICAgICAgICBjb3VudCA9IHNlbGYuX3N0YXRzLmdldChldmVudF9uYW1lLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRzW2V2ZW50X25hbWVdID0gY291bnQgKyAxCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zdGF0c19sb2NrLnJlbGVhc2UoKQorCisgICAgZGVmIF9zdGF0c19jb3B5KHNlbGYpOgorICAgICAgICBzZWxmLl9zdGF0c19sb2NrLmFjcXVpcmUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RhdHMuY29weSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zdGF0c19sb2NrLnJlbGVhc2UoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzdGF0cyA9IHNlbGYuX3N0YXRzX2NvcHkoKQorCisgICAgICAgIGVsYXBzZWQgPSBpbnQodGltZS50aW1lKCkgLSBzZWxmLl9zdGFydF90aW1lKQorICAgICAgICBlbGFwc2VkX3N0ciA9ICcnCisgICAgICAgIGlmIGVsYXBzZWQgPCA2MDoKKyAgICAgICAgICAgIGVsYXBzZWRfc3RyID0gc3RyKGVsYXBzZWQpICsgJ3NlYycKKyAgICAgICAgZWxpZiA2MCA8PSBlbGFwc2VkIDwgMzYwMDoKKyAgICAgICAgICAgIGVsYXBzZWRfc3RyID0gJyVkbW4lZHNlYycgJSAoZWxhcHNlZCAvIDYwLCBlbGFwc2VkICUgNjApCisgICAgICAgIGVsaWYgMzYwMCA8PSBlbGFwc2VkIDwgODY0MDA6CisgICAgICAgICAgICBlbGFwc2VkX3N0ciA9ICclZGglZG1uJyAlIChlbGFwc2VkIC8gMzYwMCwgKGVsYXBzZWQgJSAzNjAwKSAvIDYwKQorICAgICAgICBlbGlmIGVsYXBzZWQgPj0gODY0MDA6CisgICAgICAgICAgICBlbGFwc2VkX3N0ciA9ICclZGQlZGgnICUgKGVsYXBzZWQgLyA4NjQwMCwgKGVsYXBzZWQgJSA4NjQwMCkgLyAzNjAwKQorICAgICAgICBzdGF0c1snRWxhcHNlZFRpbWUnXSA9IGVsYXBzZWRfc3RyCisKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZvciBldiwgdmFsdWUgaW4gc29ydGVkKHN0YXRzLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFswXSk6CisgICAgICAgICAgICBsLmFwcGVuZCgnICVzPSVzJyAlIChvdXRwdXRfZm9ybWF0LmZpZWxkX25hbWUoZXYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5maWVsZF92YWx1ZSh2YWx1ZSkpKQorICAgICAgICBzID0gJzwlcyVzID4nICUgKG91dHB1dF9mb3JtYXQuY2xhc3NfbmFtZShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJycuam9pbihsKSkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBkdW1wKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIER1bXBzIHN0YXRpc3RpY3MuCisKKyAgICAgICAgQHBhcmFtIGZpbGVuYW1lOiBmaWxlbmFtZSB3aGVyZSBzdGF0cyB3aWxsIGJlIGR1bXBlZCwgZmlsZW5hbWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGFuZCBtdXN0IG5vdCBleGlzdCBwcmlvciB0byB0aGlzIGNhbGwuCisgICAgICAgIEB0eXBlIGZpbGVuYW1lOiBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGZsYWdzID0gb3MuT19XUk9OTFl8b3MuT19DUkVBVHxvcy5PX05PRk9MTE9XfG9zLk9fRVhDTAorICAgICAgICBmZCA9IG9zLm9wZW4oZmlsZW5hbWUsIGZsYWdzLCAwNjAwKQorICAgICAgICBvcy53cml0ZShmZCwgc3RyKHNlbGYpKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYsIHNjYWxlPTQ1KToKKyAgICAgICAgc3RhdHMgPSBzZWxmLl9zdGF0c19jb3B5KCkKKyAgICAgICAgaWYgbm90IHN0YXRzOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgbSA9IG1heChzdGF0cy52YWx1ZXMoKSkKKyAgICAgICAgdW5pdHkgPSBmbG9hdChzY2FsZSkgLyBtCisgICAgICAgIGZtdCA9ICclJS0yNnMlJS0lZHMlJXMnICUgKGxlbihvdXRwdXRfZm9ybWF0LmZpZWxkX3ZhbHVlKCdAJyAqIHNjYWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAxKQorICAgICAgICBkZWYgZnVuYyh4KToKKyAgICAgICAgICAgIHJldHVybiBmbXQgJSAob3V0cHV0X2Zvcm1hdC5maWVsZF9uYW1lKHhbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LmZpZWxkX3ZhbHVlKCdAJyAqIGludCh4WzFdICogdW5pdHkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5zaW1wbGUoJyVkJyAlIHhbMV0sICd5ZWxsb3cnKSkKKyAgICAgICAgcyA9ICdcbicuam9pbihtYXAoZnVuYywgc29ydGVkKHN0YXRzLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFswXSkpKQorICAgICAgICByZXR1cm4gcworCisKK2NsYXNzIE5vdGlmaWVyRXJyb3IoUHlpbm90aWZ5RXJyb3IpOgorICAgICIiIgorICAgIE5vdGlmaWVyIEV4Y2VwdGlvbi4gUmFpc2VkIG9uIE5vdGlmaWVyIGVycm9yLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycik6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gZXJyOiBFeGNlcHRpb24gc3RyaW5nJ3MgZGVzY3JpcHRpb24uCisgICAgICAgIEB0eXBlIGVycjogc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBQeWlub3RpZnlFcnJvci5fX2luaXRfXyhzZWxmLCBlcnIpCisKKworY2xhc3MgTm90aWZpZXI6CisgICAgIiIiCisgICAgUmVhZCBub3RpZmljYXRpb25zLCBwcm9jZXNzIGV2ZW50cy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLAorICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemF0aW9uLiByZWFkX2ZyZXEsIHRocmVzaG9sZCBhbmQgdGltZW91dCBwYXJhbWV0ZXJzIGFyZSB1c2VkCisgICAgICAgIHdoZW4gbG9vcGluZy4KKworICAgICAgICBAcGFyYW0gd2F0Y2hfbWFuYWdlcjogV2F0Y2ggTWFuYWdlci4KKyAgICAgICAgQHR5cGUgd2F0Y2hfbWFuYWdlcjogV2F0Y2hNYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIEBwYXJhbSBkZWZhdWx0X3Byb2NfZnVuOiBEZWZhdWx0IHByb2Nlc3NpbmcgbWV0aG9kLiBJZiBOb25lLCBhIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ugb2YgUHJpbnRBbGxFdmVudHMgd2lsbCBiZSBhc3NpZ25lZC4KKyAgICAgICAgQHR5cGUgZGVmYXVsdF9wcm9jX2Z1bjogaW5zdGFuY2Ugb2YgUHJvY2Vzc0V2ZW50CisgICAgICAgIEBwYXJhbSByZWFkX2ZyZXE6IGlmIHJlYWRfZnJlcSA9PSAwLCBldmVudHMgYXJlIHJlYWQgYXNhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVhZF9mcmVxIGlzID4gMCwgdGhpcyB0aHJlYWQgc2xlZXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCByZWFkX2ZyZXEgLSB0aW1lb3V0KSBzZWNvbmRzLiBCdXQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCBpcyBOb25lIGl0IG1heSBiZSBkaWZmZXJlbnQgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xsIGlzIGJsb2NraW5nIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byByZWFkLgorICAgICAgICBAdHlwZSByZWFkX2ZyZXE6IGludAorICAgICAgICBAcGFyYW0gdGhyZXNob2xkOiBGaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSByZWFkIG9ubHkgaWYgdGhlIGFjY3VtdWxhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgdG8gcmVhZCBiZWNvbWVzID49IHRocmVzaG9sZC4gSWYgIT0gMCwgeW91IGxpa2VseQorICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHVzZSBpdCBpbiBjb21iaW5hdGlvbiB3aXRoIGFuIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGZvciByZWFkX2ZyZXEgYmVjYXVzZSB3aXRob3V0IHRoYXQgeW91IHdvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgbG9vcGluZyB3aXRob3V0IHJlYWxseSByZWFkaW5nIGFueXRoaW5nIGFuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVudGlsIHRoZSBhbW91bnQgb2YgZXZlbnRzIHRvIHJlYWQgaXMgPj0gdGhyZXNob2xkLgorICAgICAgICAgICAgICAgICAgICAgICAgICBBdCBsZWFzdCB3aXRoIHJlYWRfZnJlcSBzZXQgeW91IG1pZ2h0IHNsZWVwLgorICAgICAgICBAdHlwZSB0aHJlc2hvbGQ6IGludAorICAgICAgICBAcGFyYW0gdGltZW91dDoKKyAgICAgICAgICAgIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNwb2xsaW5nLW9iamVjdHMKKyAgICAgICAgQHR5cGUgdGltZW91dDogaW50CisgICAgICAgICIiIgorICAgICAgICAjIFdhdGNoIE1hbmFnZXIgaW5zdGFuY2UKKyAgICAgICAgc2VsZi5fd2F0Y2hfbWFuYWdlciA9IHdhdGNoX21hbmFnZXIKKyAgICAgICAgIyBGaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgc2VsZi5fZmQgPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF9mZCgpCisgICAgICAgICMgUG9sbCBvYmplY3QgYW5kIHJlZ2lzdHJhdGlvbgorICAgICAgICBzZWxmLl9wb2xsb2JqID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBzZWxmLl9wb2xsb2JqLnJlZ2lzdGVyKHNlbGYuX2ZkLCBzZWxlY3QuUE9MTElOKQorICAgICAgICAjIFRoaXMgcGlwZSBpcyBjb3JyZWN0ZWx5IGluaXRpYWxpemVkIGFuZCB1c2VkIGJ5IFRocmVhZGVkTm90aWZpZXIKKyAgICAgICAgc2VsZi5fcGlwZSA9ICgtMSwgLTEpCisgICAgICAgICMgRXZlbnQgcXVldWUKKyAgICAgICAgc2VsZi5fZXZlbnRxID0gZGVxdWUoKQorICAgICAgICAjIFN5c3RlbSBwcm9jZXNzaW5nIGZ1bmN0b3IsIGNvbW1vbiB0byBhbGwgZXZlbnRzCisgICAgICAgIHNlbGYuX3N5c19wcm9jX2Z1biA9IF9TeXNQcm9jZXNzRXZlbnQoc2VsZi5fd2F0Y2hfbWFuYWdlciwgc2VsZikKKyAgICAgICAgIyBEZWZhdWx0IHByb2Nlc3NpbmcgbWV0aG9kCisgICAgICAgIHNlbGYuX2RlZmF1bHRfcHJvY19mdW4gPSBkZWZhdWx0X3Byb2NfZnVuCisgICAgICAgIGlmIGRlZmF1bHRfcHJvY19mdW4gaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfcHJvY19mdW4gPSBQcmludEFsbEV2ZW50cygpCisgICAgICAgICMgTG9vcCBwYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuX3JlYWRfZnJlcSA9IHJlYWRfZnJlcQorICAgICAgICBzZWxmLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQKKyAgICAgICAgc2VsZi5fdGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgIyBDb2FsZXNjZSBldmVudHMgb3B0aW9uCisgICAgICAgIHNlbGYuX2NvYWxlc2NlID0gRmFsc2UKKyAgICAgICAgIyBzZXQgb2Ygc3RyKHJhd19ldmVudCksIG9ubHkgdXNlZCB3aGVuIGNvYWxlc2NlIG9wdGlvbiBpcyBUcnVlCisgICAgICAgIHNlbGYuX2V2ZW50c2V0ID0gc2V0KCkKKworICAgIGRlZiBhcHBlbmRfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgQXBwZW5kIGEgcmF3IGV2ZW50IHRvIHRoZSBldmVudCBxdWV1ZS4KKworICAgICAgICBAcGFyYW0gZXZlbnQ6IEFuIGV2ZW50LgorICAgICAgICBAdHlwZSBldmVudDogX1Jhd0V2ZW50IGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZXZlbnRxLmFwcGVuZChldmVudCkKKworICAgIGRlZiBwcm9jX2Z1bihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RlZmF1bHRfcHJvY19mdW4KKworICAgIGRlZiBjb2FsZXNjZV9ldmVudHMoc2VsZiwgY29hbGVzY2U9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBDb2FsZXNjaW5nIGV2ZW50cy4gRXZlbnRzIGFyZSB1c3VhbGx5IHByb2Nlc3NlZCBieSBiYXRjaHMsIHRoZWlyIHNpemUKKyAgICAgICAgZGVwZW5kIG9uIHZhcmlvdXMgZmFjdG9ycy4gVGh1cywgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbSwgZXZlbnRzIHJlY2VpdmVkCisgICAgICAgIGZyb20gaW5vdGlmeSBhcmUgYWdncmVnYXRlZCBpbiBhIGZpZm8gcXVldWUuIElmIHRoaXMgY29hbGVzY2luZworICAgICAgICBvcHRpb24gaXMgZW5hYmxlZCBldmVudHMgYXJlIGZpbHRlcmVkIGJhc2VkIG9uIHRoZWlyIHVuaWNpdHksIG9ubHkKKyAgICAgICAgdW5pcXVlIGV2ZW50cyBhcmUgZW5xdWV1ZWQsIGRvdWJsb25zIGFyZSBkaXNjYXJkZWQuIEFuIGV2ZW50IGlzIHVuaXF1ZQorICAgICAgICB3aGVuIHRoZSBjb21iaW5hdGlvbiBvZiBpdHMgZmllbGRzICh3ZCwgbWFzaywgY29va2llLCBuYW1lKSBpcyB1bmlxdWUKKyAgICAgICAgYW1vbmcgZXZlbnRzIG9mIGEgc2FtZSBiYXRjaC4gQWZ0ZXIgYSBiYXRjaCBvZiBldmVudHMgaXMgcHJvY2Vzc2VkIGFueQorICAgICAgICBldmVudHMgaXMgYWNjZXB0ZWQgYWdhaW4uIEJ5IGRlZmF1bHQgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIHlvdSBoYXZlCisgICAgICAgIHRvIGV4cGxpY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdHVybiBpdCBvbi4KKworICAgICAgICBAcGFyYW0gY29hbGVzY2U6IE9wdGlvbmFsIG5ldyBjb2FsZXNjaW5nIHZhbHVlLiBUcnVlIGJ5IGRlZmF1bHQuCisgICAgICAgIEB0eXBlIGNvYWxlc2NlOiBCb29sCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb2FsZXNjZSA9IGNvYWxlc2NlCisgICAgICAgIGlmIG5vdCBjb2FsZXNjZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50c2V0LmNsZWFyKCkKKworICAgIGRlZiBjaGVja19ldmVudHMoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIGZvciBuZXcgZXZlbnRzIGF2YWlsYWJsZSB0byByZWFkLCBibG9ja3MgdXAgdG8gdGltZW91dAorICAgICAgICBtaWxsaXNlY29uZHMuCisKKyAgICAgICAgQHBhcmFtIHRpbWVvdXQ6IElmIHNwZWNpZmllZCBpdCBvdmVycmlkZXMgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBfdGltZW91dC4KKyAgICAgICAgQHR5cGUgdGltZW91dDogaW50CisKKyAgICAgICAgQHJldHVybjogTmV3IGV2ZW50cyB0byByZWFkLgorICAgICAgICBAcnR5cGU6IGJvb2wKKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBibG9ja3MgdXAgdG8gJ3RpbWVvdXQnIG1pbGxpc2Vjb25kcworICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3RpbWVvdXQKKyAgICAgICAgICAgICAgICByZXQgPSBzZWxmLl9wb2xsb2JqLnBvbGwodGltZW91dCkKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnJbMF0gPT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgaW50ZXJydXB0ZWQsIHJldHJ5CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBub3QgcmV0IG9yIChzZWxmLl9waXBlWzBdID09IHJldFswXVswXSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBvbmx5IG9uZSBmZCBpcyBwb2xsZWQKKyAgICAgICAgcmV0dXJuIHJldFswXVsxXSAmIHNlbGVjdC5QT0xMSU4KKworICAgIGRlZiByZWFkX2V2ZW50cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlYWQgZXZlbnRzIGZyb20gZGV2aWNlLCBidWlsZCBfUmF3RXZlbnRzLCBhbmQgZW5xdWV1ZSB0aGVtLgorICAgICAgICAiIiIKKyAgICAgICAgYnVmXyA9IGFycmF5LmFycmF5KCdpJywgWzBdKQorICAgICAgICAjIGdldCBldmVudCBxdWV1ZSBzaXplCisgICAgICAgIGlmIGZjbnRsLmlvY3RsKHNlbGYuX2ZkLCB0ZXJtaW9zLkZJT05SRUFELCBidWZfLCAxKSA9PSAtMToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBxdWV1ZV9zaXplID0gYnVmX1swXQorICAgICAgICBpZiBxdWV1ZV9zaXplIDwgc2VsZi5fdGhyZXNob2xkOgorICAgICAgICAgICAgbG9nLmRlYnVnKCcoZmQ6ICVkKSAlZCBieXRlcyBhdmFpbGFibGUgdG8gcmVhZCBidXQgdGhyZXNob2xkIGlzICcKKyAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQgdG8gJWQgYnl0ZXMnLCBzZWxmLl9mZCwgcXVldWVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90aHJlc2hvbGQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFJlYWQgY29udGVudCBmcm9tIGZpbGUKKyAgICAgICAgICAgIHIgPSBvcy5yZWFkKHNlbGYuX2ZkLCBxdWV1ZV9zaXplKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBtc2c6CisgICAgICAgICAgICByYWlzZSBOb3RpZmllckVycm9yKG1zZykKKyAgICAgICAgbG9nLmRlYnVnKCdFdmVudCBxdWV1ZSBzaXplOiAlZCcsIHF1ZXVlX3NpemUpCisgICAgICAgIHJzdW0gPSAwICAjIGNvdW50ZXIKKyAgICAgICAgd2hpbGUgcnN1bSA8IHF1ZXVlX3NpemU6CisgICAgICAgICAgICBzX3NpemUgPSAxNgorICAgICAgICAgICAgIyBSZXRyaWV2ZSB3ZCwgbWFzaywgY29va2llIGFuZCBmbmFtZV9sZW4KKyAgICAgICAgICAgIHdkLCBtYXNrLCBjb29raWUsIGZuYW1lX2xlbiA9IHN0cnVjdC51bnBhY2soJ2lJSUknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW3JzdW06cnN1bStzX3NpemVdKQorICAgICAgICAgICAgIyBSZXRyaWV2ZSBuYW1lCisgICAgICAgICAgICBmbmFtZSwgPSBzdHJ1Y3QudW5wYWNrKCclZHMnICUgZm5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByW3JzdW0gKyBzX3NpemU6cnN1bSArIHNfc2l6ZSArIGZuYW1lX2xlbl0pCisgICAgICAgICAgICByYXdldmVudCA9IF9SYXdFdmVudCh3ZCwgbWFzaywgY29va2llLCBmbmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2NvYWxlc2NlOgorICAgICAgICAgICAgICAgICMgT25seSBlbnF1ZXVlIG5ldyAodW5pcXVlKSBldmVudHMuCisgICAgICAgICAgICAgICAgcmF3ZXZlbnRzdHIgPSBzdHIocmF3ZXZlbnQpCisgICAgICAgICAgICAgICAgaWYgcmF3ZXZlbnRzdHIgbm90IGluIHNlbGYuX2V2ZW50c2V0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHNldC5hZGQocmF3ZXZlbnRzdHIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50cS5hcHBlbmQocmF3ZXZlbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50cS5hcHBlbmQocmF3ZXZlbnQpCisgICAgICAgICAgICByc3VtICs9IHNfc2l6ZSArIGZuYW1lX2xlbgorCisgICAgZGVmIHByb2Nlc3NfZXZlbnRzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUm91dGluZSBmb3IgcHJvY2Vzc2luZyBldmVudHMgZnJvbSBxdWV1ZSBieSBjYWxsaW5nIHRoZWlyCisgICAgICAgIGFzc29jaWF0ZWQgcHJvY2Nlc3NpbmcgbWV0aG9kIChhbiBpbnN0YW5jZSBvZiBQcm9jZXNzRXZlbnQpLgorICAgICAgICBJdCBhbHNvIGRvZXMgaW50ZXJuYWwgcHJvY2Vzc2luZ3MsIHRvIGtlZXAgdGhlIHN5c3RlbSB1cGRhdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgc2VsZi5fZXZlbnRxOgorICAgICAgICAgICAgcmF3X2V2ZW50ID0gc2VsZi5fZXZlbnRxLnBvcGxlZnQoKSAgIyBwb3AgbmV4dCBldmVudAorICAgICAgICAgICAgaWYgc2VsZi5fd2F0Y2hfbWFuYWdlci5pZ25vcmVfZXZlbnRzOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiRXZlbnQgaWdub3JlZDogJXMiICUgcmVwcihyYXdfZXZlbnQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3YXRjaF8gPSBzZWxmLl93YXRjaF9tYW5hZ2VyLmdldF93YXRjaChyYXdfZXZlbnQud2QpCisgICAgICAgICAgICBpZiAod2F0Y2hfIGlzIE5vbmUpIGFuZCBub3QgKHJhd19ldmVudC5tYXNrICYgSU5fUV9PVkVSRkxPVyk6CisgICAgICAgICAgICAgICAgaWYgbm90IChyYXdfZXZlbnQubWFzayAmIElOX0lHTk9SRUQpOgorICAgICAgICAgICAgICAgICAgICAjIE5vdCByZWFsbHkgc3VyZSBob3cgd2UgZW5kZWQgdXAgaGVyZSwgbm9yIGhvdyB3ZSBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgIyBoYW5kbGUgdGhlc2UgdHlwZXMgb2YgZXZlbnRzIGFuZCBpZiBpdCBpcyBhcHByb3ByaWF0ZSB0bworICAgICAgICAgICAgICAgICAgICAjIGNvbXBsZXRseSBza2lwIHRoZW0gKGxpa2Ugd2UgYXJlIGRvaW5nIGhlcmUpLgorICAgICAgICAgICAgICAgICAgICBsb2cud2FybmluZygiVW5hYmxlIHRvIHJldHJpZXZlIFdhdGNoIG9iamVjdCBhc3NvY2lhdGVkIHRvICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihyYXdfZXZlbnQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXZlbnQgPSBzZWxmLl9zeXNfcHJvY19mdW4ocmF3X2V2ZW50KSAgIyBzeXN0ZW0gcHJvY2Vzc2luZ3MKKyAgICAgICAgICAgIGlmIHdhdGNoXyBhbmQgd2F0Y2hfLnByb2NfZnVuOgorICAgICAgICAgICAgICAgIHdhdGNoXy5wcm9jX2Z1bihyZXZlbnQpICAjIHVzZXIgcHJvY2Vzc2luZ3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9wcm9jX2Z1bihyZXZlbnQpCisgICAgICAgIHNlbGYuX3N5c19wcm9jX2Z1bi5jbGVhbnVwKCkgICMgcmVtb3ZlIG9sZHMgTU9WRURfKiBldmVudHMgcmVjb3JkcworICAgICAgICBpZiBzZWxmLl9jb2FsZXNjZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50c2V0LmNsZWFyKCkKKworICAgIGRlZiBfX2RhZW1vbml6ZShzZWxmLCBwaWRfZmlsZT1Ob25lLCBzdGRpbj1vcy5kZXZudWxsLCBzdGRvdXQ9b3MuZGV2bnVsbCwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPW9zLmRldm51bGwpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHBpZF9maWxlOiBmaWxlIHdoZXJlIHRoZSBwaWQgd2lsbCBiZSB3cml0dGVuLiBJZiBwaWRfZmlsZT1Ob25lCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBpZCBpcyB3cml0dGVuIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgL3Zhci9ydW4vPHN5cy5hcmd2WzBdfHB5aW5vdGlmeT4ucGlkLCBpZiBwaWRfZmlsZT1GYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIG5vIHBpZF9maWxlIGlzIHdyaXR0ZW4uCisgICAgICAgIEBwYXJhbSBzdGRpbjoKKyAgICAgICAgQHBhcmFtIHN0ZG91dDoKKyAgICAgICAgQHBhcmFtIHN0ZGVycjogZmlsZXMgYXNzb2NpYXRlZCB0byBjb21tb24gc3RyZWFtcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHBpZF9maWxlIGlzIE5vbmU6CisgICAgICAgICAgICBkaXJuYW1lID0gJy92YXIvcnVuLycKKyAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkgb3IgJ3B5aW5vdGlmeScKKyAgICAgICAgICAgIHBpZF9maWxlID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIGJhc2VuYW1lICsgJy5waWQnKQorCisgICAgICAgIGlmIHBpZF9maWxlICE9IEZhbHNlIGFuZCBvcy5wYXRoLmxleGlzdHMocGlkX2ZpbGUpOgorICAgICAgICAgICAgZXJyID0gJ0Nhbm5vdCBkYWVtb25pemU6IHBpZCBmaWxlICVzIGFscmVhZHkgZXhpc3RzLicgJSBwaWRfZmlsZQorICAgICAgICAgICAgcmFpc2UgTm90aWZpZXJFcnJvcihlcnIpCisKKyAgICAgICAgZGVmIGZvcmtfZGFlbW9uKCk6CisgICAgICAgICAgICAjIEFkYXB0ZWQgZnJvbSBDaGFkIEouIFNjaHJvZWRlcidzIHJlY2lwZQorICAgICAgICAgICAgIyBAc2VlIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzI3ODczMS8KKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgKHBpZCA9PSAwKToKKyAgICAgICAgICAgICAgICAjIHBhcmVudCAyCisgICAgICAgICAgICAgICAgb3Muc2V0c2lkKCkKKyAgICAgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICBpZiAocGlkID09IDApOgorICAgICAgICAgICAgICAgICAgICAjIGNoaWxkCisgICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKCcvJykKKyAgICAgICAgICAgICAgICAgICAgb3MudW1hc2soMDIyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgcGFyZW50IDIKKyAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBwYXJlbnQgMQorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisKKyAgICAgICAgICAgIGZkX2lucCA9IG9zLm9wZW4oc3RkaW4sIG9zLk9fUkRPTkxZKQorICAgICAgICAgICAgb3MuZHVwMihmZF9pbnAsIDApCisgICAgICAgICAgICBmZF9vdXQgPSBvcy5vcGVuKHN0ZG91dCwgb3MuT19XUk9OTFl8b3MuT19DUkVBVCwgMDYwMCkKKyAgICAgICAgICAgIG9zLmR1cDIoZmRfb3V0LCAxKQorICAgICAgICAgICAgZmRfZXJyID0gb3Mub3BlbihzdGRlcnIsIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQsIDA2MDApCisgICAgICAgICAgICBvcy5kdXAyKGZkX2VyciwgMikKKworICAgICAgICAjIERldGFjaCB0YXNrCisgICAgICAgIGZvcmtfZGFlbW9uKCkKKworICAgICAgICAjIFdyaXRlIHBpZAorICAgICAgICBpZiBwaWRfZmlsZSAhPSBGYWxzZToKKyAgICAgICAgICAgIGZsYWdzID0gb3MuT19XUk9OTFl8b3MuT19DUkVBVHxvcy5PX05PRk9MTE9XfG9zLk9fRVhDTAorICAgICAgICAgICAgZmRfcGlkID0gb3Mub3BlbihwaWRfZmlsZSwgZmxhZ3MsIDA2MDApCisgICAgICAgICAgICBvcy53cml0ZShmZF9waWQsIHN0cihvcy5nZXRwaWQoKSkgKyAnXG4nKQorICAgICAgICAgICAgb3MuY2xvc2UoZmRfcGlkKQorICAgICAgICAgICAgIyBSZWdpc3RlciB1bmxpbmsgZnVuY3Rpb24KKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihsYW1iZGEgOiBvcy51bmxpbmsocGlkX2ZpbGUpKQorCisgICAgZGVmIF9zbGVlcChzZWxmLCByZWZfdGltZSk6CisgICAgICAgICMgT25seSBjb25zaWRlciBzbGVlcGluZyBpZiByZWFkX2ZyZXEgaXMgPiAwCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnJlcSA+IDA6CisgICAgICAgICAgICBjdXJfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzbGVlcF9hbW91bnQgPSBzZWxmLl9yZWFkX2ZyZXEgLSAoY3VyX3RpbWUgLSByZWZfdGltZSkKKyAgICAgICAgICAgIGlmIHNsZWVwX2Ftb3VudCA+IDA6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdOb3cgc2xlZXBpbmcgJWQgc2Vjb25kcycsIHNsZWVwX2Ftb3VudCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHNsZWVwX2Ftb3VudCkKKworICAgIGRlZiBsb29wKHNlbGYsIGNhbGxiYWNrPU5vbmUsIGRhZW1vbml6ZT1GYWxzZSwgKiphcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIEV2ZW50cyBhcmUgcmVhZCBvbmx5IG9uZSB0aW1lIGV2ZXJ5IG1pbihyZWFkX2ZyZXEsIHRpbWVvdXQpCisgICAgICAgIHNlY29uZHMgYXQgYmVzdCBhbmQgb25seSBpZiB0aGUgc2l6ZSB0byByZWFkIGlzID49IHRocmVzaG9sZC4KKyAgICAgICAgQWZ0ZXIgdGhpcyBtZXRob2QgcmV0dXJucyBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgYWdhaW4gZm9yIHRoZSBzYW1lCisgICAgICAgIGluc3RhbmNlLgorCisgICAgICAgIEBwYXJhbSBjYWxsYmFjazogRnVuY3RvciBjYWxsZWQgYWZ0ZXIgZWFjaCBldmVudCBwcm9jZXNzaW5nIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICBFeHBlY3RzIHRvIHJlY2VpdmUgdGhlIG5vdGlmaWVyIG9iamVjdCAoc2VsZikgYXMgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBUcnVlIHRoZSBsb29wIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkgdGVybWluYXRlZCBvdGhlcndpc2UgdGhlIGxvb3AgbWV0aG9kIGtlZXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcGluZy4KKyAgICAgICAgQHR5cGUgY2FsbGJhY2s6IGNhbGxhYmxlIG9iamVjdCBvciBmdW5jdGlvbgorICAgICAgICBAcGFyYW0gZGFlbW9uaXplOiBUaGlzIHRocmVhZCBpcyBkYWVtb25pemVkIGlmIHNldCB0byBUcnVlLgorICAgICAgICBAdHlwZSBkYWVtb25pemU6IGJvb2xlYW4KKyAgICAgICAgQHBhcmFtIGFyZ3M6IE9wdGlvbmFsIGFuZCByZWxldmFudCBvbmx5IGlmIGRhZW1vbml6ZSBpcyBUcnVlLiBSZW1haW5pbmcKKyAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRlZCBhcmd1bWVudHMgYXJlIGRpcmVjdGx5IHBhc3NlZCB0byBkYWVtb25pemUgc2VlCisgICAgICAgICAgICAgICAgICAgICBfX2RhZW1vbml6ZSgpIG1ldGhvZC4gSWYgcGlkX2ZpbGU9Tm9uZSBvciBpcyBzZXQgdG8gYQorICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUgdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdAorICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvdGhlcndpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICBweWlub3RpZnkuTm90aWZpZXJFcnJvciB3aWxsIGJlIHJhaXNlZC4gSWYgcGlkX2ZpbGU9RmFsc2UKKyAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHN0aWxsIGRhZW1vbml6ZWQgYnV0IHRoZSBwaWQgaXMgbm90IHdyaXR0ZW4gaW4gYW55CisgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICBAdHlwZSBhcmdzOiB2YXJpb3VzCisgICAgICAgICIiIgorICAgICAgICBpZiBkYWVtb25pemU6CisgICAgICAgICAgICBzZWxmLl9fZGFlbW9uaXplKCoqYXJncykKKworICAgICAgICAjIFJlYWQgYW5kIHByb2Nlc3MgZXZlbnRzIGZvcmV2ZXIKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgaXMgbm90IE5vbmUpIGFuZCAoY2FsbGJhY2soc2VsZikgaXMgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcmVmX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICMgY2hlY2tfZXZlbnRzIGlzIGJsb2NraW5nCisgICAgICAgICAgICAgICAgaWYgc2VsZi5jaGVja19ldmVudHMoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2xlZXAocmVmX3RpbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZF9ldmVudHMoKQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICMgU3RvcCBtb25pdG9yaW5nIGlmIHNpZ2ludCBpcyBjYXVnaHQgKENvbnRyb2wtQykuCisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdQeWlub3RpZnkgc3RvcHMgbW9uaXRvcmluZy4nKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgQ2xvc2UgaW50ZXJuYWxzCisgICAgICAgIHNlbGYuc3RvcCgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENsb3NlIGlub3RpZnkncyBpbnN0YW5jZSAoY2xvc2UgaXRzIGZpbGUgZGVzY3JpcHRvcikuCisgICAgICAgIEl0IGRlc3Ryb3lzIGFsbCBleGlzdGluZyB3YXRjaGVzLCBwZW5kaW5nIGV2ZW50cywuLi4KKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBsb29wKCkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9wb2xsb2JqLnVucmVnaXN0ZXIoc2VsZi5fZmQpCisgICAgICAgIG9zLmNsb3NlKHNlbGYuX2ZkKQorICAgICAgICBzZWxmLl9zeXNfcHJvY19mdW4gPSBOb25lCisKKworY2xhc3MgVGhyZWFkZWROb3RpZmllcih0aHJlYWRpbmcuVGhyZWFkLCBOb3RpZmllcik6CisgICAgIiIiCisgICAgVGhpcyBub3RpZmllciBpbmhlcml0cyBmcm9tIHRocmVhZGluZy5UaHJlYWQgZm9yIGluc3RhbmNpYXRpbmcgYSBzZXBhcmF0ZQorICAgIHRocmVhZCwgYW5kIGFsc28gaW5oZXJpdHMgZnJvbSBOb3RpZmllciwgYmVjYXVzZSBpdCBpcyBhIHRocmVhZGVkIG5vdGlmaWVyLgorCisgICAgTm90ZSB0aGF0IGV2ZXJ5IGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBjbGFzcyBpcyBhbHNvIHByb3ZpZGVkCisgICAgdGhyb3VnaCBOb3RpZmllciBjbGFzcy4gTW9yZW92ZXIgTm90aWZpZXIgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZmlyc3QgYmVjYXVzZQorICAgIGl0IGlzIG5vdCB0aHJlYWRlZCBhbmQgY291bGQgYmUgZWFzaWx5IGRhZW1vbml6ZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW49Tm9uZSwgcmVhZF9mcmVxPTAsCisgICAgICAgICAgICAgICAgIHRocmVzaG9sZD0wLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6YXRpb24sIGluaXRpYWxpemUgYmFzZSBjbGFzc2VzLiByZWFkX2ZyZXEsIHRocmVzaG9sZCBhbmQKKyAgICAgICAgdGltZW91dCBwYXJhbWV0ZXJzIGFyZSB1c2VkIHdoZW4gbG9vcGluZy4KKworICAgICAgICBAcGFyYW0gd2F0Y2hfbWFuYWdlcjogV2F0Y2ggTWFuYWdlci4KKyAgICAgICAgQHR5cGUgd2F0Y2hfbWFuYWdlcjogV2F0Y2hNYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIEBwYXJhbSBkZWZhdWx0X3Byb2NfZnVuOiBEZWZhdWx0IHByb2Nlc3NpbmcgbWV0aG9kLiBTZWUgYmFzZSBjbGFzcy4KKyAgICAgICAgQHR5cGUgZGVmYXVsdF9wcm9jX2Z1bjogaW5zdGFuY2Ugb2YgUHJvY2Vzc0V2ZW50CisgICAgICAgIEBwYXJhbSByZWFkX2ZyZXE6IGlmIHJlYWRfZnJlcSA9PSAwLCBldmVudHMgYXJlIHJlYWQgYXNhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVhZF9mcmVxIGlzID4gMCwgdGhpcyB0aHJlYWQgc2xlZXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCgwLCByZWFkX2ZyZXEgLSB0aW1lb3V0KSBzZWNvbmRzLgorICAgICAgICBAdHlwZSByZWFkX2ZyZXE6IGludAorICAgICAgICBAcGFyYW0gdGhyZXNob2xkOiBGaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSByZWFkIG9ubHkgaWYgdGhlIGFjY3VtdWxhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgdG8gcmVhZCBiZWNvbWVzID49IHRocmVzaG9sZC4gSWYgIT0gMCwgeW91IGxpa2VseQorICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHVzZSBpdCBpbiBjb21iaW5hdGlvbiB3aXRoIGFuIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHNldCBmb3IgcmVhZF9mcmVxIGJlY2F1c2Ugd2l0aG91dCB0aGF0IHlvdSB3b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwIGxvb3Bpbmcgd2l0aG91dCByZWFsbHkgcmVhZGluZyBhbnl0aGluZyBhbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgYW1vdW50IG9mIGV2ZW50cyB0byByZWFkIGlzID49IHRocmVzaG9sZC4gQXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhc3Qgd2l0aCByZWFkX2ZyZXEgeW91IG1pZ2h0IHNsZWVwLgorICAgICAgICBAdHlwZSB0aHJlc2hvbGQ6IGludAorICAgICAgICBAcGFyYW0gdGltZW91dDoKKyAgICAgICAgICAgIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNwb2xsaW5nLW9iamVjdHMKKyAgICAgICAgQHR5cGUgdGltZW91dDogaW50CisgICAgICAgICIiIgorICAgICAgICAjIEluaXQgdGhyZWFkaW5nIGJhc2UgY2xhc3MKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAjIFN0b3AgY29uZGl0aW9uCisgICAgICAgIHNlbGYuX3N0b3BfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAjIEluaXQgTm90aWZpZXIgYmFzZSBjbGFzcworICAgICAgICBOb3RpZmllci5fX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuLCByZWFkX2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCwgdGltZW91dCkKKyAgICAgICAgIyBDcmVhdGUgYSBuZXcgcGlwZSB1c2VkIGZvciB0aHJlYWQgdGVybWluYXRpb24KKyAgICAgICAgc2VsZi5fcGlwZSA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLl9wb2xsb2JqLnJlZ2lzdGVyKHNlbGYuX3BpcGVbMF0sIHNlbGVjdC5QT0xMSU4pCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0b3Agbm90aWZpZXIncyBsb29wLiBTdG9wIG5vdGlmaWNhdGlvbi4gSm9pbiB0aGUgdGhyZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3RvcF9ldmVudC5zZXQoKQorICAgICAgICBvcy53cml0ZShzZWxmLl9waXBlWzFdLCAnc3RvcCcpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuam9pbihzZWxmKQorICAgICAgICBOb3RpZmllci5zdG9wKHNlbGYpCisgICAgICAgIHNlbGYuX3BvbGxvYmoudW5yZWdpc3RlcihzZWxmLl9waXBlWzBdKQorICAgICAgICBvcy5jbG9zZShzZWxmLl9waXBlWzBdKQorICAgICAgICBvcy5jbG9zZShzZWxmLl9waXBlWzFdKQorCisgICAgZGVmIGxvb3Aoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaHJlYWQncyBtYWluIGxvb3AuIERvbid0IG1lYW50IHRvIGJlIGNhbGxlZCBieSB1c2VyIGRpcmVjdGx5LgorICAgICAgICBDYWxsIGluaGVyaXRlZCBzdGFydCgpIG1ldGhvZCBpbnN0ZWFkLgorCisgICAgICAgIEV2ZW50cyBhcmUgcmVhZCBvbmx5IG9uY2UgdGltZSBldmVyeSBtaW4ocmVhZF9mcmVxLCB0aW1lb3V0KQorICAgICAgICBzZWNvbmRzIGF0IGJlc3QgYW5kIG9ubHkgaWYgdGhlIHNpemUgb2YgZXZlbnRzIHRvIHJlYWQgaXMgPj0gdGhyZXNob2xkLgorICAgICAgICAiIiIKKyAgICAgICAgIyBXaGVuIHRoZSBsb29wIG11c3QgYmUgdGVybWluYXRlZCAuc3RvcCgpIGlzIGNhbGxlZCwgJ3N0b3AnCisgICAgICAgICMgaXMgd3JpdHRlbiB0byBwaXBlIGZkIHNvIHBvbGwoKSByZXR1cm5zIGFuZCAuY2hlY2tfZXZlbnRzKCkKKyAgICAgICAgIyByZXR1cm5zIEZhbHNlIHdoaWNoIG1ha2UgZXZhbHVhdGUgdGhlIFdoaWxlJ3Mgc3RvcCBjb25kaXRpb24KKyAgICAgICAgIyAuX3N0b3BfZXZlbnQuaXNTZXQoKSB3aWNoIHB1dCBhbiBlbmQgdG8gdGhlIHRocmVhZCdzIGV4ZWN1dGlvbi4KKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BfZXZlbnQuaXNTZXQoKToKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc19ldmVudHMoKQorICAgICAgICAgICAgcmVmX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgc2VsZi5jaGVja19ldmVudHMoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zbGVlcChyZWZfdGltZSkKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWRfZXZlbnRzKCkKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdGFydCB0aHJlYWQncyBsb29wOiByZWFkIGFuZCBwcm9jZXNzIGV2ZW50cyB1bnRpbCB0aGUgbWV0aG9kCisgICAgICAgIHN0b3AoKSBpcyBjYWxsZWQuCisgICAgICAgIE5ldmVyIGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksIGluc3RlYWQgY2FsbCB0aGUgc3RhcnQoKSBtZXRob2QKKyAgICAgICAgaW5oZXJpdGVkIGZyb20gdGhyZWFkaW5nLlRocmVhZCwgd2hpY2ggdGhlbiB3aWxsIGNhbGwgcnVuKCkgaW4KKyAgICAgICAgaXRzIHR1cm4uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmxvb3AoKQorCisKK2NsYXNzIEFzeW5jTm90aWZpZXIoYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyLCBOb3RpZmllcik6CisgICAgIiIiCisgICAgVGhpcyBub3RpZmllciBpbmhlcml0cyBmcm9tIGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlciBpbiBvcmRlciB0byBiZSBhYmxlIHRvCisgICAgdXNlIHB5aW5vdGlmeSBhbG9uZyB3aXRoIHRoZSBhc3luY29yZSBmcmFtZXdvcmsuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1bj1Ob25lLCByZWFkX2ZyZXE9MCwKKyAgICAgICAgICAgICAgICAgdGhyZXNob2xkPTAsIHRpbWVvdXQ9Tm9uZSwgY2hhbm5lbF9tYXA9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXplcyB0aGUgYXN5bmMgbm90aWZpZXIuIFRoZSBvbmx5IGFkZGl0aW9uYWwgcGFyYW1ldGVyIGlzCisgICAgICAgICdjaGFubmVsX21hcCcgd2hpY2ggaXMgdGhlIG9wdGlvbmFsIGFzeW5jb3JlIHByaXZhdGUgbWFwLiBTZWUKKyAgICAgICAgTm90aWZpZXIgY2xhc3MgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZSBvdGhlcnMgcGFyYW1ldGVycy4KKworICAgICAgICAiIiIKKyAgICAgICAgTm90aWZpZXIuX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1biwgcmVhZF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQsIHRpbWVvdXQpCisgICAgICAgIGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBzZWxmLl9mZCwgY2hhbm5lbF9tYXApCisKKyAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGVuIGFzeW5jb3JlIHRlbGxzIHVzIHdlIGNhbiByZWFkIGZyb20gdGhlIGZkLCB3ZSBwcm9jZWVkIHByb2Nlc3NpbmcKKyAgICAgICAgZXZlbnRzLiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgaGFuZGxpbmcgYSBub3RpZmljYXRpb24KKyAgICAgICAgZGlmZmVyZW50bHkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLnByb2Nlc3NfZXZlbnRzKCkKKworCitjbGFzcyBUb3JuYWRvQXN5bmNOb3RpZmllcihOb3RpZmllcik6CisgICAgIiIiCisgICAgVG9ybmFkbyBpb2xvb3AgYWRhcHRlci4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBpb2xvb3AsIGNhbGxiYWNrPU5vbmUsCisgICAgICAgICAgICAgICAgIGRlZmF1bHRfcHJvY19mdW49Tm9uZSwgcmVhZF9mcmVxPTAsIHRocmVzaG9sZD0wLCB0aW1lb3V0PU5vbmUsCisgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFwPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgTm90ZSB0aGF0IGlmIGxhdGVyIHlvdSBtdXN0IGNhbGwgaW9sb29wLmNsb3NlKCkgYmUgc3VyZSB0byBsZXQgdGhlCisgICAgICAgIGRlZmF1bHQgcGFyYW1ldGVyIHRvIGFsbF9mZHM9RmFsc2UuCisKKyAgICAgICAgU2VlIGV4YW1wbGUgdG9ybmFkb19ub3RpZmllci5weSBmb3IgYW4gZXhhbXBsZSB1c2luZyB0aGlzIG5vdGlmaWVyLgorCisgICAgICAgIEBwYXJhbSBpb2xvb3A6IFRvcm5hZG8ncyBJTyBsb29wLgorICAgICAgICBAdHlwZSBpb2xvb3A6IHRvcm5hZG8uaW9sb29wLklPTG9vcCBpbnN0YW5jZS4KKyAgICAgICAgQHBhcmFtIGNhbGxiYWNrOiBGdW5jdG9yIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggY2FsbCB0byBoYW5kbGVfcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgIChJT0xvb3AncyByZWFkIGhhbmRsZXIpLiBFeHBlY3RzIHRvIHJlY2VpdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIgb2JqZWN0IChzZWxmKSBhcyBzaW5nbGUgcGFyYW1ldGVyLgorICAgICAgICBAdHlwZSBjYWxsYmFjazogY2FsbGFibGUgb2JqZWN0IG9yIGZ1bmN0aW9uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmlvX2xvb3AgPSBpb2xvb3AKKyAgICAgICAgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayA9IGNhbGxiYWNrCisgICAgICAgIE5vdGlmaWVyLl9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW4sIHJlYWRfZnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkLCB0aW1lb3V0KQorICAgICAgICBpb2xvb3AuYWRkX2hhbmRsZXIoc2VsZi5fZmQsIHNlbGYuaGFuZGxlX3JlYWQsIGlvbG9vcC5SRUFEKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuaW9fbG9vcC5yZW1vdmVfaGFuZGxlcihzZWxmLl9mZCkKKyAgICAgICAgTm90aWZpZXIuc3RvcChzZWxmKQorCisgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIgorICAgICAgICBTZWUgY29tbWVudCBpbiBBc3luY05vdGlmaWVyLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5wcm9jZXNzX2V2ZW50cygpCisgICAgICAgIGlmIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrKHNlbGYpCisKKworY2xhc3MgQXN5bmNpb05vdGlmaWVyKE5vdGlmaWVyKToKKyAgICAiIiIKKworICAgIGFzeW5jaW8vdHJvbGxpdXMgZXZlbnQgbG9vcCBhZGFwdGVyLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGxvb3AsIGNhbGxiYWNrPU5vbmUsCisgICAgICAgICAgICAgICAgIGRlZmF1bHRfcHJvY19mdW49Tm9uZSwgcmVhZF9mcmVxPTAsIHRocmVzaG9sZD0wLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKworICAgICAgICBTZWUgZXhhbXBsZXMvYXN5bmNpb19ub3RpZmllci5weSBmb3IgYW4gZXhhbXBsZSB1c2FnZS4KKworICAgICAgICBAcGFyYW0gbG9vcDogYXN5bmNpbyBvciB0cm9sbGl1cyBldmVudCBsb29wIGluc3RhbmNlLgorICAgICAgICBAdHlwZSBsb29wOiBhc3luY2lvLkJhc2VFdmVudExvb3Agb3IgdHJvbGxpdXMuQmFzZUV2ZW50TG9vcCBpbnN0YW5jZS4KKyAgICAgICAgQHBhcmFtIGNhbGxiYWNrOiBGdW5jdG9yIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggY2FsbCB0byBoYW5kbGVfcmVhZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICBFeHBlY3RzIHRvIHJlY2VpdmUgdGhlIG5vdGlmaWVyIG9iamVjdCAoc2VsZikgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGUgcGFyYW1ldGVyLgorICAgICAgICBAdHlwZSBjYWxsYmFjazogY2FsbGFibGUgb2JqZWN0IG9yIGZ1bmN0aW9uCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayA9IGNhbGxiYWNrCisgICAgICAgIE5vdGlmaWVyLl9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW4sIHJlYWRfZnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkLCB0aW1lb3V0KQorICAgICAgICBsb29wLmFkZF9yZWFkZXIoc2VsZi5fZmQsIHNlbGYuaGFuZGxlX3JlYWQpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmQpCisgICAgICAgIE5vdGlmaWVyLnN0b3Aoc2VsZikKKworICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5wcm9jZXNzX2V2ZW50cygpCisgICAgICAgIGlmIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrKHNlbGYpCisKKworY2xhc3MgV2F0Y2g6CisgICAgIiIiCisgICAgUmVwcmVzZW50IGEgd2F0Y2gsIGkuZS4gYSBmaWxlIG9yIGRpcmVjdG9yeSBiZWluZyB3YXRjaGVkLgorCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCd3ZCcsICdwYXRoJywgJ21hc2snLCAncHJvY19mdW4nLCAnYXV0b19hZGQnLAorICAgICAgICAgICAgICAgICAnZXhjbHVkZV9maWx0ZXInLCAnZGlyJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3ZCwgcGF0aCwgbWFzaywgcHJvY19mdW4sIGF1dG9fYWRkLCBleGNsdWRlX2ZpbHRlcik6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXphdGlvbnMuCisKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBkZXNjcmlwdG9yLgorICAgICAgICBAdHlwZSB3ZDogaW50CisgICAgICAgIEBwYXJhbSBwYXRoOiBQYXRoIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBiZWluZyB3YXRjaGVkLgorICAgICAgICBAdHlwZSBwYXRoOiBzdHIKKyAgICAgICAgQHBhcmFtIG1hc2s6IE1hc2suCisgICAgICAgIEB0eXBlIG1hc2s6IGludAorICAgICAgICBAcGFyYW0gcHJvY19mdW46IFByb2Nlc3NpbmcgY2FsbGFibGUgb2JqZWN0LgorICAgICAgICBAdHlwZSBwcm9jX2Z1bjoKKyAgICAgICAgQHBhcmFtIGF1dG9fYWRkOiBBdXRvbWF0aWNhbGx5IGFkZCB3YXRjaGVzIG9uIG5ldyBkaXJlY3Rvcmllcy4KKyAgICAgICAgQHR5cGUgYXV0b19hZGQ6IGJvb2wKKyAgICAgICAgQHBhcmFtIGV4Y2x1ZGVfZmlsdGVyOiBCb29sZWFuIGZ1bmN0aW9uLCB1c2VkIHRvIGV4Y2x1ZGUgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgZnJvbSBiZWluZyBhdXRvbWF0aWNhbGx5IHdhdGNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIFdhdGNoTWFuYWdlci5fX2luaXRfXworICAgICAgICBAdHlwZSBleGNsdWRlX2ZpbHRlcjogY2FsbGFibGUgb2JqZWN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLndkID0gd2QKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLm1hc2sgPSBtYXNrCisgICAgICAgIHNlbGYucHJvY19mdW4gPSBwcm9jX2Z1bgorICAgICAgICBzZWxmLmF1dG9fYWRkID0gYXV0b19hZGQKKyAgICAgICAgc2VsZi5leGNsdWRlX2ZpbHRlciA9IGV4Y2x1ZGVfZmlsdGVyCisgICAgICAgIHNlbGYuZGlyID0gb3MucGF0aC5pc2RpcihzZWxmLnBhdGgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBAcmV0dXJuOiBTdHJpbmcgcmVwcmVzZW50YXRpb24uCisgICAgICAgIEBydHlwZTogc3RyCisgICAgICAgICIiIgorICAgICAgICBzID0gJyAnLmpvaW4oWyclcyVzJXMnICUgKG91dHB1dF9mb3JtYXQuZmllbGRfbmFtZShhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc9JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5maWVsZF92YWx1ZShnZXRhdHRyKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIpKSkgXAorICAgICAgICAgICAgICAgICAgICAgIGZvciBhdHRyIGluIHNlbGYuX19zbG90c19fIGlmIG5vdCBhdHRyLnN0YXJ0c3dpdGgoJ18nKV0pCisKKyAgICAgICAgcyA9ICclcyVzICVzICVzJyAlIChvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc8JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5jbGFzc19uYW1lKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQucHVuY3R1YXRpb24oJz4nKSkKKyAgICAgICAgcmV0dXJuIHMKKworCitjbGFzcyBFeGNsdWRlRmlsdGVyOgorICAgICIiIgorICAgIEV4Y2x1ZGVGaWx0ZXIgaXMgYW4gZXhjbHVzaW9uIGZpbHRlci4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdfbHN0KToKKyAgICAgICAgIiIiCisgICAgICAgIEV4YW1wbGVzOgorICAgICAgICAgIGVmMSA9IEV4Y2x1ZGVGaWx0ZXIoWyIvZXRjL3JjLioiLCAiL2V0Yy9ob3N0bmFtZSJdKQorICAgICAgICAgIGVmMiA9IEV4Y2x1ZGVGaWx0ZXIoIi9teS9wYXRoL2V4Y2x1ZGUubHN0IikKKyAgICAgICAgICBXaGVyZSBleGNsdWRlLmxzdCBjb250YWluczoKKyAgICAgICAgICAvZXRjL3JjLioKKyAgICAgICAgICAvZXRjL2hvc3RuYW1lCisKKyAgICAgICAgTm90ZTogaXQgaXMgbm90IHBvc3NpYmxlIHRvIGV4Y2x1ZGUgYSBmaWxlIGlmIGl0cyBlbmNhcHN1bGF0aW5nCisgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBpdHNlbGYgd2F0Y2hlZC4gU2VlIHRoaXMgaXNzdWUgZm9yIG1vcmUgZGV0YWlscworICAgICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vc2ViLW0vcHlpbm90aWZ5L2lzc3Vlcy8zMQorCisgICAgICAgIEBwYXJhbSBhcmdfbHN0OiBpcyBlaXRoZXIgYSBsaXN0IG9mIHBhdHRlcm5zIG9yIGEgZmlsZW5hbWUgZnJvbSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybnMgd2lsbCBiZSBsb2FkZWQuCisgICAgICAgIEB0eXBlIGFyZ19sc3Q6IGxpc3Qgb2Ygc3RyIG9yIHN0cgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmdfbHN0LCBzdHIpOgorICAgICAgICAgICAgbHN0ID0gc2VsZi5fbG9hZF9wYXR0ZXJuc19mcm9tX2ZpbGUoYXJnX2xzdCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZ19sc3QsIGxpc3QpOgorICAgICAgICAgICAgbHN0ID0gYXJnX2xzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKKyAgICAgICAgc2VsZi5fbHJlZ2V4ID0gW10KKyAgICAgICAgZm9yIHJlZ2V4IGluIGxzdDoKKyAgICAgICAgICAgIHNlbGYuX2xyZWdleC5hcHBlbmQocmUuY29tcGlsZShyZWdleCwgcmUuVU5JQ09ERSkpCisKKyAgICBkZWYgX2xvYWRfcGF0dGVybnNfZnJvbV9maWxlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgbHN0ID0gW10KKyAgICAgICAgZmlsZV9vYmogPSBmaWxlKGZpbGVuYW1lLCAncicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGVfb2JqLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICMgVHJpbSBsZWFkaW5nIGFuIHRyYWlsaW5nIHdoaXRlc3BhY2VzCisgICAgICAgICAgICAgICAgcGF0dGVybiA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXR0ZXJuIG9yIHBhdHRlcm4uc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQocGF0dGVybikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVfb2JqLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGxzdAorCisgICAgZGVmIF9tYXRjaChzZWxmLCByZWdleCwgcGF0aCk6CisgICAgICAgIHJldHVybiByZWdleC5tYXRjaChwYXRoKSBpcyBub3QgTm9uZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHBhdGg6IFBhdGggdG8gbWF0Y2ggYWdhaW5zdCBwcm92aWRlZCByZWdleHBzLgorICAgICAgICBAdHlwZSBwYXRoOiBzdHIKKyAgICAgICAgQHJldHVybjogUmV0dXJuIFRydWUgaWYgcGF0aCBoYXMgYmVlbiBtYXRjaGVkIGFuZCBzaG91bGQKKyAgICAgICAgICAgICAgICAgYmUgZXhjbHVkZWQsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgQHJ0eXBlOiBib29sCisgICAgICAgICIiIgorICAgICAgICBmb3IgcmVnZXggaW4gc2VsZi5fbHJlZ2V4OgorICAgICAgICAgICAgaWYgc2VsZi5fbWF0Y2gocmVnZXgsIHBhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIFdhdGNoTWFuYWdlckVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgV2F0Y2hNYW5hZ2VyIEV4Y2VwdGlvbi4gUmFpc2VkIG9uIGVycm9yIGVuY291bnRlcmVkIG9uIHdhdGNoZXMKKyAgICBvcGVyYXRpb25zLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgd21kKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBtc2c6IEV4Y2VwdGlvbiBzdHJpbmcncyBkZXNjcmlwdGlvbi4KKyAgICAgICAgQHR5cGUgbXNnOiBzdHJpbmcKKyAgICAgICAgQHBhcmFtIHdtZDogVGhpcyBkaWN0aW9uYXJ5IGNvbnRhaW5zIHRoZSB3ZCBhc3NpZ25lZCB0byBwYXRocyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBjYWxsIGZvciB3aGljaCB3YXRjaGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICAgICAgICBAdHlwZSB3bWQ6IGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYud21kID0gd21kCisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisKKworY2xhc3MgV2F0Y2hNYW5hZ2VyOgorICAgICIiIgorICAgIFByb3ZpZGUgb3BlcmF0aW9ucyBmb3Igd2F0Y2hpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiBJdHMgaW50ZXJuYWwKKyAgICBkaWN0aW9uYXJ5IGlzIHVzZWQgdG8gcmVmZXJlbmNlIHdhdGNoZWQgaXRlbXMuIFdoZW4gdXNlZCBpbnNpZGUKKyAgICB0aHJlYWRlZCBjb2RlLCBvbmUgbXVzdCBpbnN0YW5jaWF0ZSBhcyBtYW55IFdhdGNoTWFuYWdlciBpbnN0YW5jZXMgYXMKKyAgICB0aGVyZSBhcmUgVGhyZWFkZWROb3RpZmllciBpbnN0YW5jZXMuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjbHVkZV9maWx0ZXI9bGFtYmRhIHBhdGg6IEZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemF0aW9uOiBpbml0IGlub3RpZnksIGluaXQgd2F0Y2ggbWFuYWdlciBkaWN0aW9uYXJ5LgorICAgICAgICBSYWlzZSBPU0Vycm9yIGlmIGluaXRpYWxpemF0aW9uIGZhaWxzLCByYWlzZSBJbm90aWZ5QmluZGluZ05vdEZvdW5kRXJyb3IKKyAgICAgICAgaWYgbm8gaW5vdGlmeSBiaW5kaW5nIHdhcyBmb3VuZCAodGhyb3VnaCBjdHlwZXMgb3IgZnJvbSBkaXJlY3QgYWNjZXNzIHRvCisgICAgICAgIHN5c2NhbGxzKS4KKworICAgICAgICBAcGFyYW0gZXhjbHVkZV9maWx0ZXI6IGJvb2xlYW4gZnVuY3Rpb24sIHJldHVybnMgVHJ1ZSBpZiBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCBtdXN0IGJlIGV4Y2x1ZGVkIGZyb20gYmVpbmcgd2F0Y2hlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZW5pZW50IGZvciBwcm92aWRpbmcgYSBjb21tb24gZXhjbHVzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyIGZvciBldmVyeSBjYWxsIHRvIGFkZF93YXRjaC4KKyAgICAgICAgQHR5cGUgZXhjbHVkZV9maWx0ZXI6IGNhbGxhYmxlIG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faWdub3JlX2V2ZW50cyA9IEZhbHNlCisgICAgICAgIHNlbGYuX2V4Y2x1ZGVfZmlsdGVyID0gZXhjbHVkZV9maWx0ZXIKKyAgICAgICAgc2VsZi5fd21kID0ge30gICMgd2F0Y2ggZGljdCBrZXk6IHdhdGNoIGRlc2NyaXB0b3IsIHZhbHVlOiB3YXRjaAorCisgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlciA9IElOb3RpZnlXcmFwcGVyLmNyZWF0ZSgpCisgICAgICAgIGlmIHNlbGYuX2lub3RpZnlfd3JhcHBlciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgSW5vdGlmeUJpbmRpbmdOb3RGb3VuZEVycm9yKCkKKworICAgICAgICBzZWxmLl9mZCA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5pbm90aWZ5X2luaXQoKSAjIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBpZiBzZWxmLl9mZCA8IDA6CisgICAgICAgICAgICBlcnIgPSAnQ2Fubm90IGluaXRpYWxpemUgbmV3IGluc3RhbmNlIG9mIGlub3RpZnksICVzJworICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIgJSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDbG9zZSBpbm90aWZ5J3MgZmlsZSBkZXNjcmlwdG9yLCB0aGlzIGFjdGlvbiB3aWxsIGFsc28gYXV0b21hdGljYWxseQorICAgICAgICByZW1vdmUgKGkuZS4gc3RvcCB3YXRjaGluZykgYWxsIGl0cyBhc3NvY2lhdGVkIHdhdGNoIGRlc2NyaXB0b3JzLgorICAgICAgICBBZnRlciBhIGNhbGwgdG8gdGhpcyBtZXRob2QgdGhlIFdhdGNoTWFuYWdlcidzIGluc3RhbmNlIGJlY29tZSB1c2VsZXNzCisgICAgICAgIGFuZCBjYW5ub3QgYmUgcmV1c2VkLCBhIG5ldyBpbnN0YW5jZSBtdXN0IHRoZW4gYmUgaW5zdGFuY2lhdGVkLiBJdAorICAgICAgICBtYWtlcyBzZW5zZSB0byBjYWxsIHRoaXMgbWV0aG9kIGluIGZldyBzaXR1YXRpb25zIGZvciBpbnN0YW5jZSBpZgorICAgICAgICBzZXZlcmFsIGluZGVwZW5kYW50IFdhdGNoTWFuYWdlciBtdXN0IGJlIGluc3RhbmNpYXRlZCBvciBpZiBhbGwgd2F0Y2hlcworICAgICAgICBtdXN0IGJlIHJlbW92ZWQgYW5kIG5vIG90aGVyIHdhdGNoZXMgbmVlZCB0byBiZSBhZGRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIG9zLmNsb3NlKHNlbGYuX2ZkKQorCisgICAgZGVmIGdldF9mZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhc3NpZ25lZCBpbm90aWZ5J3MgZmlsZSBkZXNjcmlwdG9yLgorCisgICAgICAgIEByZXR1cm46IEZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgQHJ0eXBlOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mZAorCisgICAgZGVmIGdldF93YXRjaChzZWxmLCB3ZCk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgd2F0Y2ggZnJvbSBwcm92aWRlZCB3YXRjaCBkZXNjcmlwdG9yIHdkLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggZGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dtZC5nZXQod2QpCisKKyAgICBkZWYgZGVsX3dhdGNoKHNlbGYsIHdkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB3YXRjaCBlbnRyeSBhc3NvY2lhdGVkIHRvIHdhdGNoIGRlc2NyaXB0b3Igd2QuCisKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBkZXNjcmlwdG9yLgorICAgICAgICBAdHlwZSB3ZDogaW50CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5fd21kW3dkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGVycjoKKyAgICAgICAgICAgIGxvZy5lcnJvcignQ2Fubm90IGRlbGV0ZSB1bmtub3duIHdhdGNoIGRlc2NyaXB0b3IgJXMnICUgc3RyKGVycikpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2F0Y2hlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBhIHJlZmVyZW5jZSBvbiB0aGUgaW50ZXJuYWwgd2F0Y2ggbWFuYWdlciBkaWN0aW9uYXJ5LgorCisgICAgICAgIEByZXR1cm46IEludGVybmFsIHdhdGNoIG1hbmFnZXIgZGljdGlvbmFyeS4KKyAgICAgICAgQHJ0eXBlOiBkaWN0CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fd21kCisKKyAgICBkZWYgX19mb3JtYXRfcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIEZvcm1hdCBwYXRoIHRvIGl0cyBpbnRlcm5hbCAoc3RvcmVkIGluIHdhdGNoIG1hbmFnZXIpIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgIyBVbmljb2RlIHN0cmluZ3MgYXJlIGNvbnZlcnRlZCBiYWNrIHRvIHN0cmluZ3MsIGJlY2F1c2UgaXQgc2VlbXMKKyAgICAgICAgIyB0aGF0IGlub3RpZnlfYWRkX3dhdGNoIGZyb20gY3R5cGVzIGRvZXMgbm90IHdvcmsgd2VsbCB3aGVuCisgICAgICAgICMgaXQgcmVjZWl2ZXMgYW4gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlciBpbnN0YW5jZSBhcyBhcmd1bWVudC4KKyAgICAgICAgIyBUaGVyZWZvcmUgZXZlbiB3ZCBhcmUgaW5kZXhlZCB3aXRoIGJ5dGVzIHN0cmluZyBhbmQgbm90IHdpdGgKKyAgICAgICAgIyB1bmljb2RlIHBhdGhzLgorICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGgsIHVuaWNvZGUpOgorICAgICAgICAgICAgcGF0aCA9IHBhdGguZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgocGF0aCkKKworICAgIGRlZiBfX2FkZF93YXRjaChzZWxmLCBwYXRoLCBtYXNrLCBwcm9jX2Z1biwgYXV0b19hZGQsIGV4Y2x1ZGVfZmlsdGVyKToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCBhIHdhdGNoIG9uIHBhdGgsIGJ1aWxkIGEgV2F0Y2ggb2JqZWN0IGFuZCBpbnNlcnQgaXQgaW4gdGhlCisgICAgICAgIHdhdGNoIG1hbmFnZXIgZGljdGlvbmFyeS4gUmV0dXJuIHRoZSB3ZCB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSBzZWxmLl9fZm9ybWF0X3BhdGgocGF0aCkKKyAgICAgICAgaWYgYXV0b19hZGQgYW5kIG5vdCBtYXNrICYgSU5fQ1JFQVRFOgorICAgICAgICAgICAgbWFzayB8PSBJTl9DUkVBVEUKKyAgICAgICAgd2QgPSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuaW5vdGlmeV9hZGRfd2F0Y2goc2VsZi5fZmQsIHBhdGgsIG1hc2spCisgICAgICAgIGlmIHdkIDwgMDoKKyAgICAgICAgICAgIHJldHVybiB3ZAorICAgICAgICB3YXRjaCA9IFdhdGNoKHdkPXdkLCBwYXRoPXBhdGgsIG1hc2s9bWFzaywgcHJvY19mdW49cHJvY19mdW4sCisgICAgICAgICAgICAgICAgICAgICAgYXV0b19hZGQ9YXV0b19hZGQsIGV4Y2x1ZGVfZmlsdGVyPWV4Y2x1ZGVfZmlsdGVyKQorICAgICAgICBzZWxmLl93bWRbd2RdID0gd2F0Y2gKKyAgICAgICAgbG9nLmRlYnVnKCdOZXcgJXMnLCB3YXRjaCkKKyAgICAgICAgcmV0dXJuIHdkCisKKyAgICBkZWYgX19nbG9iKHNlbGYsIHBhdGgsIGRvX2dsb2IpOgorICAgICAgICBpZiBkb19nbG9iOgorICAgICAgICAgICAgcmV0dXJuIGdsb2IocGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbcGF0aF0KKworICAgIGRlZiBhZGRfd2F0Y2goc2VsZiwgcGF0aCwgbWFzaywgcHJvY19mdW49Tm9uZSwgcmVjPUZhbHNlLAorICAgICAgICAgICAgICAgICAgYXV0b19hZGQ9RmFsc2UsIGRvX2dsb2I9RmFsc2UsIHF1aWV0PVRydWUsCisgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcj1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCB3YXRjaChzKSBvbiB0aGUgcHJvdmlkZWQgfHBhdGh8KHMpIHdpdGggYXNzb2NpYXRlZCB8bWFza3wgZmxhZworICAgICAgICB2YWx1ZSBhbmQgb3B0aW9uYWxseSB3aXRoIGEgcHJvY2Vzc2luZyB8cHJvY19mdW58IGZ1bmN0aW9uIGFuZAorICAgICAgICByZWN1cnNpdmUgZmxhZyB8cmVjfCBzZXQgdG8gVHJ1ZS4KKyAgICAgICAgSWRlYWxseSB8cGF0aHwgY29tcG9uZW50cyBzaG91bGQgbm90IGJlIHVuaWNvZGUgb2JqZWN0cy4gTm90ZSB0aGF0CisgICAgICAgIGFsdGhvdWdoIHVuaWNvZGUgcGF0aHMgYXJlIGFjY2VwdGVkIHRoZXJlIGFyZSBjb252ZXJ0ZWQgdG8gYnl0ZQorICAgICAgICBzdHJpbmdzIGJlZm9yZSBhIHdhdGNoIGlzIHB1dCBvbiB0aGF0IHBhdGguIFRoZSBlbmNvZGluZyB1c2VkIGZvcgorICAgICAgICBjb252ZXJ0aW5nIHRoZSB1bmljb2RlIG9iamVjdCBpcyBnaXZlbiBieSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkuCisgICAgICAgIElmIHxwYXRofCBzaSBhbHJlYWR5IHdhdGNoZWQgaXQgaXMgaWdub3JlZCwgYnV0IGlmIGl0IGlzIGNhbGxlZCB3aXRoCisgICAgICAgIG9wdGlvbiByZWM9VHJ1ZSBhIHdhdGNoIGlzIHB1dCBvbiBlYWNoIG9uZSBvZiBpdHMgbm90LXdhdGNoZWQKKyAgICAgICAgc3ViZGlyZWN0b3J5LgorCisgICAgICAgIEBwYXJhbSBwYXRoOiBQYXRoIHRvIHdhdGNoLCB0aGUgcGF0aCBjYW4gZWl0aGVyIGJlIGEgZmlsZSBvciBhCisgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuIEFsc28gYWNjZXB0cyBhIHNlcXVlbmNlIChsaXN0KSBvZiBwYXRocy4KKyAgICAgICAgQHR5cGUgcGF0aDogc3RyaW5nIG9yIGxpc3Qgb2Ygc3RyaW5ncworICAgICAgICBAcGFyYW0gbWFzazogQml0bWFzayBvZiBldmVudHMuCisgICAgICAgIEB0eXBlIG1hc2s6IGludAorICAgICAgICBAcGFyYW0gcHJvY19mdW46IFByb2Nlc3Npbmcgb2JqZWN0LgorICAgICAgICBAdHlwZSBwcm9jX2Z1bjogZnVuY3Rpb24gb3IgUHJvY2Vzc0V2ZW50IGluc3RhbmNlIG9yIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBvbmUgb2YgaXRzIHN1YmNsYXNzZXMgb3IgY2FsbGFibGUgb2JqZWN0LgorICAgICAgICBAcGFyYW0gcmVjOiBSZWN1cnNpdmVseSBhZGQgd2F0Y2hlcyBmcm9tIHBhdGggb24gYWxsIGl0cworICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcmllcywgc2V0IHRvIEZhbHNlIGJ5IGRlZmF1bHQgKGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93cyBzeW1saW5rcyBpbiBhbnkgY2FzZSkuCisgICAgICAgIEB0eXBlIHJlYzogYm9vbAorICAgICAgICBAcGFyYW0gYXV0b19hZGQ6IEF1dG9tYXRpY2FsbHkgYWRkIHdhdGNoZXMgb24gbmV3bHkgY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGluIHdhdGNoZWQgcGFyZW50IHxwYXRofCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYgfGF1dG9fYWRkfCBpcyBUcnVlLCBJTl9DUkVBVEUgaXMgb3JlZCB3aXRoIHxtYXNrfAorICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHdhdGNoIGlzIGFkZGVkLgorICAgICAgICBAdHlwZSBhdXRvX2FkZDogYm9vbAorICAgICAgICBAcGFyYW0gZG9fZ2xvYjogRG8gZ2xvYmJpbmcgb24gcGF0aG5hbWUgKHNlZSBzdGFuZGFyZCBnbG9iYmluZworICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9ucykuCisgICAgICAgIEB0eXBlIGRvX2dsb2I6IGJvb2wKKyAgICAgICAgQHBhcmFtIHF1aWV0OiBpZiBGYWxzZSByYWlzZXMgYSBXYXRjaE1hbmFnZXJFcnJvciBleGNlcHRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICBlcnJvci4gU2VlIGV4YW1wbGUgbm90X3F1aWV0LnB5LgorICAgICAgICBAdHlwZSBxdWlldDogYm9vbAorICAgICAgICBAcGFyYW0gZXhjbHVkZV9maWx0ZXI6IHByZWRpY2F0ZSAoYm9vbGVhbiBmdW5jdGlvbiksIHdoaWNoIHJldHVybnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIHRoZSBjdXJyZW50IHBhdGggbXVzdCBiZSBleGNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYmVpbmcgd2F0Y2hlZC4gVGhpcyBhcmd1bWVudCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlIG92ZXIgZXhjbHVkZV9maWx0ZXIgcGFzc2VkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsYXNzJyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgQHR5cGUgZXhjbHVkZV9maWx0ZXI6IGNhbGxhYmxlIG9iamVjdAorICAgICAgICBAcmV0dXJuOiBkaWN0IG9mIHBhdGhzIGFzc29jaWF0ZWQgdG8gd2F0Y2ggZGVzY3JpcHRvcnMuIEEgd2QgdmFsdWUKKyAgICAgICAgICAgICAgICAgaXMgcG9zaXRpdmUgaWYgdGhlIHdhdGNoIHdhcyBhZGRlZCBzdWNlc3NmdWxseSwKKyAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZS4gSWYgdGhlIHBhdGggd2FzIGludmFsaWQKKyAgICAgICAgICAgICAgICAgb3Igd2FzIGFscmVhZHkgd2F0Y2hlZCBpdCBpcyBub3QgaW5jbHVkZWQgaW50byB0aGlzIHJldHVybmVkCisgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkuCisgICAgICAgIEBydHlwZTogZGljdCBvZiB7c3RyOiBpbnR9CisgICAgICAgICIiIgorICAgICAgICByZXRfID0ge30gIyByZXR1cm4ge3BhdGg6IHdkLCAuLi59CisKKyAgICAgICAgaWYgZXhjbHVkZV9maWx0ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyID0gc2VsZi5fZXhjbHVkZV9maWx0ZXIKKworICAgICAgICAjIG5vcm1hbGl6ZSBhcmdzIGFzIGxpc3QgZWxlbWVudHMKKyAgICAgICAgZm9yIG5wYXRoIGluIHNlbGYuX19mb3JtYXRfcGFyYW0ocGF0aCk6CisgICAgICAgICAgICAjIHVuaXggcGF0aG5hbWUgcGF0dGVybiBleHBhbnNpb24KKyAgICAgICAgICAgIGZvciBhcGF0aCBpbiBzZWxmLl9fZ2xvYihucGF0aCwgZG9fZ2xvYik6CisgICAgICAgICAgICAgICAgIyByZWN1cnNpdmVseSBsaXN0IHN1YmRpcnMgYWNjb3JkaW5nIHRvIHJlYyBwYXJhbQorICAgICAgICAgICAgICAgIGZvciBycGF0aCBpbiBzZWxmLl9fd2Fsa19yZWMoYXBhdGgsIHJlYyk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBleGNsdWRlX2ZpbHRlcihycGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3ZCA9IHJldF9bcnBhdGhdID0gc2VsZi5fX2FkZF93YXRjaChycGF0aCwgbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfZnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b19hZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHdkIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAoJ2FkZF93YXRjaDogY2Fubm90IHdhdGNoICVzIFdEPSVkLCAlcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnBhdGgsIHdkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgV2F0Y2hNYW5hZ2VyRXJyb3IoZXJyLCByZXRfKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBMZXQncyBzYXkgLTIgbWVhbnMgJ2V4cGxpY2l0ZWx5IGV4Y2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAjIGZyb20gd2F0Y2hpbmcnLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0X1tycGF0aF0gPSAtMgorICAgICAgICByZXR1cm4gcmV0XworCisgICAgZGVmIF9fZ2V0X3N1Yl9yZWMoc2VsZiwgbHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGV2ZXJ5IHdkIGZyb20gc2VsZi5fd21kIGlmIGl0cyBwYXRoIGlzIHVuZGVyIHRoZSBwYXRoIG9mCisgICAgICAgIG9uZSAoYXQgbGVhc3QpIG9mIHRob3NlIGluIGxwYXRoLiBEb2Vzbid0IGZvbGxvdyBzeW1saW5rcy4KKworICAgICAgICBAcGFyYW0gbHBhdGg6IGxpc3Qgb2Ygd2F0Y2ggZGVzY3JpcHRvcgorICAgICAgICBAdHlwZSBscGF0aDogbGlzdCBvZiBpbnQKKyAgICAgICAgQHJldHVybjogbGlzdCBvZiB3YXRjaCBkZXNjcmlwdG9yCisgICAgICAgIEBydHlwZTogbGlzdCBvZiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBkIGluIGxwYXRoOgorICAgICAgICAgICAgcm9vdCA9IHNlbGYuZ2V0X3BhdGgoZCkKKyAgICAgICAgICAgIGlmIHJvb3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBhbHdheXMga2VlcCByb290CisgICAgICAgICAgICAgICAgeWllbGQgZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGlmIGludmFsaWQKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIG5vdGhpbmcgZWxzZSB0byBleHBlY3QKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3QpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgbm9ybWFsaXphdGlvbgorICAgICAgICAgICAgcm9vdCA9IG9zLnBhdGgubm9ybXBhdGgocm9vdCkKKyAgICAgICAgICAgICMgcmVjdXJzaW9uCisgICAgICAgICAgICBsZW5kID0gbGVuKHJvb3QpCisgICAgICAgICAgICBmb3IgaXdkIGluIHNlbGYuX3dtZC5pdGVtcygpOgorICAgICAgICAgICAgICAgIGN1ciA9IGl3ZFsxXS5wYXRoCisgICAgICAgICAgICAgICAgcHJlZiA9IG9zLnBhdGguY29tbW9ucHJlZml4KFtyb290LCBjdXJdKQorICAgICAgICAgICAgICAgIGlmIHJvb3QgPT0gb3Muc2VwIG9yIChsZW4ocHJlZikgPT0gbGVuZCBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oY3VyKSA+IGxlbmQgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyW2xlbmRdID09IG9zLnNlcCk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGl3ZFsxXS53ZAorCisgICAgZGVmIHVwZGF0ZV93YXRjaChzZWxmLCB3ZCwgbWFzaz1Ob25lLCBwcm9jX2Z1bj1Ob25lLCByZWM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBhdXRvX2FkZD1GYWxzZSwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBVcGRhdGUgZXhpc3Rpbmcgd2F0Y2ggZGVzY3JpcHRvcnMgfHdkfC4gVGhlIHxtYXNrfCB2YWx1ZSwgdGhlCisgICAgICAgIHByb2Nlc3Npbmcgb2JqZWN0IHxwcm9jX2Z1bnwsIHRoZSByZWN1cnNpdmUgcGFyYW0gfHJlY3wgYW5kIHRoZQorICAgICAgICB8YXV0b19hZGR8IGFuZCB8cXVpZXR8IGZsYWdzIGNhbiBhbGwgYmUgdXBkYXRlZC4KKworICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIERlc2NyaXB0b3IgdG8gdXBkYXRlLiBBbHNvIGFjY2VwdHMgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgd2F0Y2ggZGVzY3JpcHRvcnMuCisgICAgICAgIEB0eXBlIHdkOiBpbnQgb3IgbGlzdCBvZiBpbnQKKyAgICAgICAgQHBhcmFtIG1hc2s6IE9wdGlvbmFsIG5ldyBiaXRtYXNrIG9mIGV2ZW50cy4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEBwYXJhbSBwcm9jX2Z1bjogT3B0aW9uYWwgbmV3IHByb2Nlc3NpbmcgZnVuY3Rpb24uCisgICAgICAgIEB0eXBlIHByb2NfZnVuOiBmdW5jdGlvbiBvciBQcm9jZXNzRXZlbnQgaW5zdGFuY2Ugb3IgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBvZiBpdHMgc3ViY2xhc3NlcyBvciBjYWxsYWJsZSBvYmplY3QuCisgICAgICAgIEBwYXJhbSByZWM6IE9wdGlvbmFsbHkgYWRkcyB3YXRjaGVzIHJlY3Vyc2l2ZWx5IG9uIGFsbAorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcmllcyBjb250YWluZWQgaW50byB8d2R8IGRpcmVjdG9yeS4KKyAgICAgICAgQHR5cGUgcmVjOiBib29sCisgICAgICAgIEBwYXJhbSBhdXRvX2FkZDogQXV0b21hdGljYWxseSBhZGRzIHdhdGNoZXMgb24gbmV3bHkgY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGluIHRoZSB3YXRjaCdzIHBhdGggY29ycmVzcG9uZGluZyB0byB8d2R8LgorICAgICAgICAgICAgICAgICAgICAgICAgIElmIHxhdXRvX2FkZHwgaXMgVHJ1ZSwgSU5fQ1JFQVRFIGlzIG9yZWQgd2l0aCB8bWFza3wKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB3YXRjaCBpcyB1cGRhdGVkLgorICAgICAgICBAdHlwZSBhdXRvX2FkZDogYm9vbAorICAgICAgICBAcGFyYW0gcXVpZXQ6IElmIEZhbHNlIHJhaXNlcyBhIFdhdGNoTWFuYWdlckVycm9yIGV4Y2VwdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgIGVycm9yLiBTZWUgZXhhbXBsZSBub3RfcXVpZXQucHkKKyAgICAgICAgQHR5cGUgcXVpZXQ6IGJvb2wKKyAgICAgICAgQHJldHVybjogZGljdCBvZiB3YXRjaCBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHRvIGJvb2xlYW5zIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyB3ZCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICAgdXBkYXRlZCwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICBAcnR5cGU6IGRpY3Qgb2Yge2ludDogYm9vbH0KKyAgICAgICAgIiIiCisgICAgICAgIGx3ZCA9IHNlbGYuX19mb3JtYXRfcGFyYW0od2QpCisgICAgICAgIGlmIHJlYzoKKyAgICAgICAgICAgIGx3ZCA9IHNlbGYuX19nZXRfc3ViX3JlYyhsd2QpCisKKyAgICAgICAgcmV0XyA9IHt9ICAjIHJldHVybiB7d2Q6IGJvb2wsIC4uLn0KKyAgICAgICAgZm9yIGF3ZCBpbiBsd2Q6CisgICAgICAgICAgICBhcGF0aCA9IHNlbGYuZ2V0X3BhdGgoYXdkKQorICAgICAgICAgICAgaWYgbm90IGFwYXRoIG9yIGF3ZCA8IDA6CisgICAgICAgICAgICAgICAgZXJyID0gJ3VwZGF0ZV93YXRjaDogaW52YWxpZCBXRD0lZCcgJSBhd2QKKyAgICAgICAgICAgICAgICBpZiBxdWlldDoKKyAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGVycikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByYWlzZSBXYXRjaE1hbmFnZXJFcnJvcihlcnIsIHJldF8pCisKKyAgICAgICAgICAgIGlmIG1hc2s6CisgICAgICAgICAgICAgICAgd2RfID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLmlub3RpZnlfYWRkX3dhdGNoKHNlbGYuX2ZkLCBhcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaykKKyAgICAgICAgICAgICAgICBpZiB3ZF8gPCAwOgorICAgICAgICAgICAgICAgICAgICByZXRfW2F3ZF0gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlcnIgPSAoJ3VwZGF0ZV93YXRjaDogY2Fubm90IHVwZGF0ZSAlcyBXRD0lZCwgJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcGF0aCwgd2RfLCBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpKQorICAgICAgICAgICAgICAgICAgICBpZiBxdWlldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBXYXRjaE1hbmFnZXJFcnJvcihlcnIsIHJldF8pCisKKyAgICAgICAgICAgICAgICBhc3NlcnQoYXdkID09IHdkXykKKworICAgICAgICAgICAgaWYgcHJvY19mdW4gb3IgYXV0b19hZGQ6CisgICAgICAgICAgICAgICAgd2F0Y2hfID0gc2VsZi5fd21kW2F3ZF0KKworICAgICAgICAgICAgaWYgcHJvY19mdW46CisgICAgICAgICAgICAgICAgd2F0Y2hfLnByb2NfZnVuID0gcHJvY19mdW4KKworICAgICAgICAgICAgaWYgYXV0b19hZGQ6CisgICAgICAgICAgICAgICAgd2F0Y2hfLmF1dG9fYWRkID0gYXV0b19hZGQKKworICAgICAgICAgICAgcmV0X1thd2RdID0gVHJ1ZQorICAgICAgICAgICAgbG9nLmRlYnVnKCdVcGRhdGVkIHdhdGNoIC0gJXMnLCBzZWxmLl93bWRbYXdkXSkKKyAgICAgICAgcmV0dXJuIHJldF8KKworICAgIGRlZiBfX2Zvcm1hdF9wYXJhbShzZWxmLCBwYXJhbSk6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gcGFyYW06IFBhcmFtZXRlci4KKyAgICAgICAgQHR5cGUgcGFyYW06IHN0cmluZyBvciBpbnQKKyAgICAgICAgQHJldHVybjogd3JhcCBwYXJhbS4KKyAgICAgICAgQHJ0eXBlOiBsaXN0IG9mIHR5cGUocGFyYW0pCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtLCBsaXN0KToKKyAgICAgICAgICAgIGZvciBwXyBpbiBwYXJhbToKKyAgICAgICAgICAgICAgICB5aWVsZCBwXworICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgcGFyYW0KKworICAgIGRlZiBnZXRfd2Qoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSB3YXRjaCBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgdG8gcGF0aC4gVGhpcyBtZXRob2QKKyAgICAgICAgcHJlc2VudHMgYSBwcm9oaWJpdGl2ZSBjb3N0LCBhbHdheXMgcHJlZmVyIHRvIGtlZXAgdGhlIFdECisgICAgICAgIHJldHVybmVkIGJ5IGFkZF93YXRjaCgpLiBJZiB0aGUgcGF0aCBpcyB1bmtub3duIGl0IHJldHVybnMgTm9uZS4KKworICAgICAgICBAcGFyYW0gcGF0aDogUGF0aC4KKyAgICAgICAgQHR5cGUgcGF0aDogc3RyCisgICAgICAgIEByZXR1cm46IFdEIG9yIE5vbmUuCisgICAgICAgIEBydHlwZTogaW50IG9yIE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSBzZWxmLl9fZm9ybWF0X3BhdGgocGF0aCkKKyAgICAgICAgZm9yIGl3ZCBpbiBzZWxmLl93bWQuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGl3ZFsxXS5wYXRoID09IHBhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl3ZFswXQorCisgICAgZGVmIGdldF9wYXRoKHNlbGYsIHdkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIHBhdGggYXNzb2NpYXRlZCB0byBXRCwgaWYgV0QgaXMgdW5rbm93biBpdCByZXR1cm5zIE5vbmUuCisKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBkZXNjcmlwdG9yLgorICAgICAgICBAdHlwZSB3ZDogaW50CisgICAgICAgIEByZXR1cm46IFBhdGggb3IgTm9uZS4KKyAgICAgICAgQHJ0eXBlOiBzdHJpbmcgb3IgTm9uZQorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd21kLmdldCh3ZCkKKyAgICAgICAgaWYgd2F0Y2hfIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHdhdGNoXy5wYXRoCisKKyAgICBkZWYgX193YWxrX3JlYyhzZWxmLCB0b3AsIHJlYyk6CisgICAgICAgICIiIgorICAgICAgICBZaWVsZHMgZWFjaCBzdWJkaXJlY3RvcmllcyBvZiB0b3AsIGRvZXNuJ3QgZm9sbG93IHN5bWxpbmtzLgorICAgICAgICBJZiByZWMgaXMgZmFsc2UsIG9ubHkgeWllbGQgdG9wLgorCisgICAgICAgIEBwYXJhbSB0b3A6IHJvb3QgZGlyZWN0b3J5LgorICAgICAgICBAdHlwZSB0b3A6IHN0cmluZworICAgICAgICBAcGFyYW0gcmVjOiByZWN1cnNpdmUgZmxhZy4KKyAgICAgICAgQHR5cGUgcmVjOiBib29sCisgICAgICAgIEByZXR1cm46IHBhdGggb2Ygb25lIHN1YmRpcmVjdG9yeS4KKyAgICAgICAgQHJ0eXBlOiBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCByZWMgb3Igb3MucGF0aC5pc2xpbmsodG9wKSBvciBub3Qgb3MucGF0aC5pc2Rpcih0b3ApOgorICAgICAgICAgICAgeWllbGQgdG9wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3ApOgorICAgICAgICAgICAgICAgIHlpZWxkIHJvb3QKKworICAgIGRlZiBybV93YXRjaChzZWxmLCB3ZCwgcmVjPUZhbHNlLCBxdWlldD1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZXMgd2F0Y2gocykuCisKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBEZXNjcmlwdG9yIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0byB1bndhdGNoLgorICAgICAgICAgICAgICAgICAgIEFsc28gYWNjZXB0cyBhIGxpc3Qgb2YgV0RzLgorICAgICAgICBAdHlwZSB3ZDogaW50IG9yIGxpc3Qgb2YgaW50LgorICAgICAgICBAcGFyYW0gcmVjOiBSZWN1cnNpdmVseSByZW1vdmVzIHdhdGNoZXMgb24gZXZlcnkgYWxyZWFkeSB3YXRjaGVkCisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIGFuZCBzdWJmaWxlcy4KKyAgICAgICAgQHR5cGUgcmVjOiBib29sCisgICAgICAgIEBwYXJhbSBxdWlldDogSWYgRmFsc2UgcmFpc2VzIGEgV2F0Y2hNYW5hZ2VyRXJyb3IgZXhjZXB0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuIFNlZSBleGFtcGxlIG5vdF9xdWlldC5weQorICAgICAgICBAdHlwZSBxdWlldDogYm9vbAorICAgICAgICBAcmV0dXJuOiBkaWN0IG9mIHdhdGNoIGRlc2NyaXB0b3JzIGFzc29jaWF0ZWQgdG8gYm9vbGVhbnMgdmFsdWVzLgorICAgICAgICAgICAgICAgICBUcnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHdkIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgICByZW1vdmVkLCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgIEBydHlwZTogZGljdCBvZiB7aW50OiBib29sfQorICAgICAgICAiIiIKKyAgICAgICAgbHdkID0gc2VsZi5fX2Zvcm1hdF9wYXJhbSh3ZCkKKyAgICAgICAgaWYgcmVjOgorICAgICAgICAgICAgbHdkID0gc2VsZi5fX2dldF9zdWJfcmVjKGx3ZCkKKworICAgICAgICByZXRfID0ge30gICMgcmV0dXJuIHt3ZDogYm9vbCwgLi4ufQorICAgICAgICBmb3IgYXdkIGluIGx3ZDoKKyAgICAgICAgICAgICMgcmVtb3ZlIHdhdGNoCisgICAgICAgICAgICB3ZF8gPSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuaW5vdGlmeV9ybV93YXRjaChzZWxmLl9mZCwgYXdkKQorICAgICAgICAgICAgaWYgd2RfIDwgMDoKKyAgICAgICAgICAgICAgICByZXRfW2F3ZF0gPSBGYWxzZQorICAgICAgICAgICAgICAgIGVyciA9ICgncm1fd2F0Y2g6IGNhbm5vdCByZW1vdmUgV0Q9JWQsICVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhd2QsIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkpCisgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlcnIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmFpc2UgV2F0Y2hNYW5hZ2VyRXJyb3IoZXJyLCByZXRfKQorCisgICAgICAgICAgICAjIFJlbW92ZSB3YXRjaCBmcm9tIG91ciBkaWN0aW9uYXJ5CisgICAgICAgICAgICBpZiBhd2QgaW4gc2VsZi5fd21kOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl93bWRbYXdkXQorICAgICAgICAgICAgcmV0X1thd2RdID0gVHJ1ZQorICAgICAgICAgICAgbG9nLmRlYnVnKCdXYXRjaCBXRD0lZCAoJXMpIHJlbW92ZWQnLCBhd2QsIHNlbGYuZ2V0X3BhdGgoYXdkKSkKKyAgICAgICAgcmV0dXJuIHJldF8KKworCisgICAgZGVmIHdhdGNoX3RyYW5zaWVudF9maWxlKHNlbGYsIGZpbGVuYW1lLCBtYXNrLCBwcm9jX2NsYXNzKToKKyAgICAgICAgIiIiCisgICAgICAgIFdhdGNoIGEgdHJhbnNpZW50IGZpbGUsIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBhbmQgZGVsZXRlZCBmcmVxdWVudGx5CisgICAgICAgIG92ZXIgdGltZSAoZS5nLiBwaWQgZmlsZSkuCisKKyAgICAgICAgQGF0dGVudGlvbjogQ3VycmVudGx5IHVuZGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gaXQgaXMgbm90CisgICAgICAgIHBvc3NpYmxlIHRvIGNvcnJlY3RseSB3YXRjaCB0aGUgZXZlbnRzIHRyaWdnZXJlZCBpbnRvIHRoZSBzYW1lCisgICAgICAgIGJhc2UgZGlyZWN0b3J5IHRoYW4gdGhlIGRpcmVjdG9yeSB3aGVyZSBpcyBsb2NhdGVkIHRoaXMgd2F0Y2hlZAorICAgICAgICB0cmFuc2llbnQgZmlsZS4gRm9yIGluc3RhbmNlIGl0IHdvdWxkIGJlIHdyb25nIHRvIG1ha2UgdGhlc2UKKyAgICAgICAgdHdvIHN1Y2Nlc3NpdmUgY2FsbHM6IHdtLndhdGNoX3RyYW5zaWVudF9maWxlKCcvdmFyL3J1bi9mb28ucGlkJywgLi4uKQorICAgICAgICBhbmQgd20uYWRkX3dhdGNoKCcvdmFyL3J1bi8nLCAuLi4pCisKKyAgICAgICAgQHBhcmFtIGZpbGVuYW1lOiBGaWxlbmFtZS4KKyAgICAgICAgQHR5cGUgZmlsZW5hbWU6IHN0cmluZworICAgICAgICBAcGFyYW0gbWFzazogQml0bWFzayBvZiBldmVudHMsIHNob3VsZCBjb250YWluIElOX0NSRUFURSBhbmQgSU5fREVMRVRFLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHBhcmFtIHByb2NfY2xhc3M6IFByb2Nlc3NFdmVudCAob3Igb2Ygb25lIG9mIGl0cyBzdWJjbGFzcyksIGJld2FyZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0aW5nIGEgUHJvY2Vzc0V2ZW50J3MgaW5zdGFuY2UgYXMgYXJndW1lbnQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbml0X18sIHNlZSB0cmFuc2llbnRfZmlsZS5weSBleGFtcGxlIGZvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLgorICAgICAgICBAdHlwZSBwcm9jX2NsYXNzOiBQcm9jZXNzRXZlbnQncyBpbnN0YW5jZSBvciBvZiBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCisgICAgICAgIEByZXR1cm46IFNhbWUgYXMgYWRkX3dhdGNoKCkuCisgICAgICAgIEBydHlwZTogU2FtZSBhcyBhZGRfd2F0Y2goKS4KKyAgICAgICAgIiIiCisgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCisgICAgICAgIGlmIGRpcm5hbWUgPT0gJyc6CisgICAgICAgICAgICByZXR1cm4ge30gICMgTWFpbnRhaW5zIGNvaGVyZW5jZSB3aXRoIGFkZF93YXRjaCgpCisgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgIyBBc3N1bWluZyB3ZSBhcmUgd2F0Y2hpbmcgYXQgbGVhc3QgZm9yIElOX0NSRUFURSBhbmQgSU5fREVMRVRFCisgICAgICAgIG1hc2sgfD0gSU5fQ1JFQVRFIHwgSU5fREVMRVRFCisKKyAgICAgICAgZGVmIGNtcF9uYW1lKGV2ZW50KToKKyAgICAgICAgICAgIGlmIGdldGF0dHIoZXZlbnQsICduYW1lJykgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZSA9PSBldmVudC5uYW1lCisgICAgICAgIHJldHVybiBzZWxmLmFkZF93YXRjaChkaXJuYW1lLCBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19mdW49cHJvY19jbGFzcyhDaGFpbklmVHJ1ZShmdW5jPWNtcF9uYW1lKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvX2FkZD1GYWxzZSwgZG9fZ2xvYj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyPWxhbWJkYSBwYXRoOiBGYWxzZSkKKworICAgIGRlZiBnZXRfaWdub3JlX2V2ZW50cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lnbm9yZV9ldmVudHMKKworICAgIGRlZiBzZXRfaWdub3JlX2V2ZW50cyhzZWxmLCBudmFsKToKKyAgICAgICAgc2VsZi5faWdub3JlX2V2ZW50cyA9IG52YWwKKworICAgIGlnbm9yZV9ldmVudHMgPSBwcm9wZXJ0eShnZXRfaWdub3JlX2V2ZW50cywgc2V0X2lnbm9yZV9ldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWtlIHdhdGNoIG1hbmFnZXIgaWdub3JpbmcgbmV3IGV2ZW50cy4iKQorCisKKworY2xhc3MgUmF3T3V0cHV0Rm9ybWF0OgorICAgICIiIgorICAgIEZvcm1hdCBzdHJpbmcgcmVwcmVzZW50YXRpb25zLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHNlbGYuZm9ybWF0ID0gZm9ybWF0IG9yIHt9CisKKyAgICBkZWYgc2ltcGxlKHNlbGYsIHMsIGF0dHJpYnV0ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIHN0cik6CisgICAgICAgICAgICBzID0gc3RyKHMpCisgICAgICAgIHJldHVybiAoc2VsZi5mb3JtYXQuZ2V0KGF0dHJpYnV0ZSwgJycpICsgcyArCisgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQuZ2V0KCdub3JtYWwnLCAnJykpCisKKyAgICBkZWYgcHVuY3R1YXRpb24oc2VsZiwgcyk6CisgICAgICAgICIiIlB1bmN0dWF0aW9uIGNvbG9yLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5zaW1wbGUocywgJ25vcm1hbCcpCisKKyAgICBkZWYgZmllbGRfdmFsdWUoc2VsZiwgcyk6CisgICAgICAgICIiIkZpZWxkIHZhbHVlIGNvbG9yLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5zaW1wbGUocywgJ3B1cnBsZScpCisKKyAgICBkZWYgZmllbGRfbmFtZShzZWxmLCBzKToKKyAgICAgICAgIiIiRmllbGQgbmFtZSBjb2xvci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2ltcGxlKHMsICdibHVlJykKKworICAgIGRlZiBjbGFzc19uYW1lKHNlbGYsIHMpOgorICAgICAgICAiIiJDbGFzcyBuYW1lIGNvbG9yLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5mb3JtYXQuZ2V0KCdyZWQnLCAnJykgKyBzZWxmLnNpbXBsZShzLCAnYm9sZCcpCisKK291dHB1dF9mb3JtYXQgPSBSYXdPdXRwdXRGb3JtYXQoKQorCitjbGFzcyBDb2xvcmVkT3V0cHV0Rm9ybWF0KFJhd091dHB1dEZvcm1hdCk6CisgICAgIiIiCisgICAgRm9ybWF0IGNvbG9yZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGYgPSB7J25vcm1hbCc6ICdcMDMzWzBtJywKKyAgICAgICAgICAgICAnYmxhY2snOiAnXDAzM1szMG0nLAorICAgICAgICAgICAgICdyZWQnOiAnXDAzM1szMW0nLAorICAgICAgICAgICAgICdncmVlbic6ICdcMDMzWzMybScsCisgICAgICAgICAgICAgJ3llbGxvdyc6ICdcMDMzWzMzbScsCisgICAgICAgICAgICAgJ2JsdWUnOiAnXDAzM1szNG0nLAorICAgICAgICAgICAgICdwdXJwbGUnOiAnXDAzM1szNW0nLAorICAgICAgICAgICAgICdjeWFuJzogJ1wwMzNbMzZtJywKKyAgICAgICAgICAgICAnYm9sZCc6ICdcMDMzWzFtJywKKyAgICAgICAgICAgICAndWxpbmUnOiAnXDAzM1s0bScsCisgICAgICAgICAgICAgJ2JsaW5rJzogJ1wwMzNbNW0nLAorICAgICAgICAgICAgICdpbnZlcnQnOiAnXDAzM1s3bSd9CisgICAgICAgIFJhd091dHB1dEZvcm1hdC5fX2luaXRfXyhzZWxmLCBmKQorCisKK2RlZiBjb21wYXRpYmlsaXR5X21vZGUoKToKKyAgICAiIiIKKyAgICBVc2UgdGhpcyBmdW5jdGlvbiB0byB0dXJuIG9uIHRoZSBjb21wYXRpYmlsaXR5IG1vZGUuIFRoZSBjb21wYXRpYmlsaXR5CisgICAgbW9kZSBpcyB1c2VkIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIFB5aW5vdGlmeSAwLjcuMSAob3Igb2xkZXIpCisgICAgcHJvZ3JhbXMuIFRoZSBjb21wYXRpYmlsaXR5IG1vZGUgcHJvdmlkZXMgYWRkaXRpb25hbCB2YXJpYWJsZXMgJ2lzX2RpcicsCisgICAgJ2V2ZW50X25hbWUnLCAnRXZlbnRzQ29kZXMuSU5fKicgYW5kICdFdmVudHNDb2Rlcy5BTExfRVZFTlRTJyBhcworICAgIFB5aW5vdGlmeSAwLjcuMSBwcm92aWRlZC4gRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIG5ldyBwcm9ncmFtcyEhCisgICAgRXNwZWNpYWxseSBpZiB0aGVyZSBhcmUgZGV2ZWxvcHBlZCBmb3IgUHlpbm90aWZ5ID49IDAuOC54LgorICAgICIiIgorICAgIHNldGF0dHIoRXZlbnRzQ29kZXMsICdBTExfRVZFTlRTJywgQUxMX0VWRU5UUykKKyAgICBmb3IgZXZuYW1lIGluIGdsb2JhbHMoKToKKyAgICAgICAgaWYgZXZuYW1lLnN0YXJ0c3dpdGgoJ0lOXycpOgorICAgICAgICAgICAgc2V0YXR0cihFdmVudHNDb2RlcywgZXZuYW1lLCBnbG9iYWxzKClbZXZuYW1lXSkKKyAgICBnbG9iYWwgQ09NUEFUSUJJTElUWV9NT0RFCisgICAgQ09NUEFUSUJJTElUWV9NT0RFID0gVHJ1ZQorCisKK2RlZiBjb21tYW5kX2xpbmUoKToKKyAgICAiIiIKKyAgICBCeSBkZWZhdWx0IHRoZSB3YXRjaGVkIHBhdGggaXMgJy90bXAnIGFuZCBhbGwgdHlwZXMgb2YgZXZlbnRzIGFyZQorICAgIG1vbml0b3JlZC4gRXZlbnRzIG1vbml0b3Jpbmcgc2VydmVzIGZvcmV2ZXIsIHR5cGUgY15jIHRvIHN0b3AgaXQuCisgICAgIiIiCisgICAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisKKyAgICB1c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIFtwYXRoMV0gW3BhdGgyXSBbcGF0aG5dIgorCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InZlcmJvc2UiLCBoZWxwPSJWZXJib3NlIG1vZGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItciIsICItLXJlY3Vyc2l2ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icmVjdXJzaXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJBZGQgd2F0Y2hlcyByZWN1cnNpdmVseSBvbiBwYXRocyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tYXV0b19hZGQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImF1dG9fYWRkIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJBdXRvbWF0aWNhbGx5IGFkZCB3YXRjaGVzIG9uIG5ldyBkaXJlY3RvcmllcyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1nIiwgIi0tZ2xvYiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iZ2xvYiIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iVHJlYXQgcGF0aHMgYXMgZ2xvYnMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZSIsICItLWV2ZW50cy1saXN0IiwgbWV0YXZhcj0iRVZFTlRbLC4uLl0iLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImV2ZW50c19saXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgiQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBldmVudHMgdG8gd2F0Y2ggZm9yIC0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdmFsaWQgb3B0aW9ucyAoZGVmYXVsdHMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvIGV2ZXJ5dGhpbmcpIikpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc3RhdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXNwbGF5IGR1bW15IHN0YXRpc3RpY3MiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItViIsICItLXZlcnNpb24iLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InZlcnNpb24iLCAgaGVscD0iUHlpbm90aWZ5IHZlcnNpb24iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLXJhdy1mb3JtYXQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InJhd19mb3JtYXQiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpc2FibGUgZW5oYW5jZWQgb3V0cHV0IGZvcm1hdC4iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvbW1hbmQiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJjb21tYW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJTaGVsbCBjb21tYW5kIHRvIHJ1biB1cG9uIGV2ZW50IikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICAgICAgbG9nLnNldExldmVsKDEwKQorCisgICAgaWYgb3B0aW9ucy52ZXJzaW9uOgorICAgICAgICBwcmludChfX3ZlcnNpb25fXykKKworICAgIGlmIG5vdCBvcHRpb25zLnJhd19mb3JtYXQ6CisgICAgICAgIGdsb2JhbCBvdXRwdXRfZm9ybWF0CisgICAgICAgIG91dHB1dF9mb3JtYXQgPSBDb2xvcmVkT3V0cHV0Rm9ybWF0KCkKKworICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgIHBhdGggPSAnL3RtcCcgICMgZGVmYXVsdCB3YXRjaGVkIHBhdGgKKyAgICBlbHNlOgorICAgICAgICBwYXRoID0gYXJncworCisgICAgIyB3YXRjaCBtYW5hZ2VyIGluc3RhbmNlCisgICAgd20gPSBXYXRjaE1hbmFnZXIoKQorICAgICMgbm90aWZpZXIgaW5zdGFuY2UgYW5kIGluaXQKKyAgICBpZiBvcHRpb25zLnN0YXRzOgorICAgICAgICBub3RpZmllciA9IE5vdGlmaWVyKHdtLCBkZWZhdWx0X3Byb2NfZnVuPVN0YXRzKCksIHJlYWRfZnJlcT01KQorICAgIGVsc2U6CisgICAgICAgIG5vdGlmaWVyID0gTm90aWZpZXIod20sIGRlZmF1bHRfcHJvY19mdW49UHJpbnRBbGxFdmVudHMoKSkKKworICAgICMgV2hhdCBtYXNrIHRvIGFwcGx5CisgICAgbWFzayA9IDAKKyAgICBpZiBvcHRpb25zLmV2ZW50c19saXN0OgorICAgICAgICBldmVudHNfbGlzdCA9IG9wdGlvbnMuZXZlbnRzX2xpc3Quc3BsaXQoJywnKQorICAgICAgICBmb3IgZXYgaW4gZXZlbnRzX2xpc3Q6CisgICAgICAgICAgICBldmNvZGUgPSBFdmVudHNDb2Rlcy5BTExfRkxBR1MuZ2V0KGV2LCAwKQorICAgICAgICAgICAgaWYgZXZjb2RlOgorICAgICAgICAgICAgICAgIG1hc2sgfD0gZXZjb2RlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlci5lcnJvcigiVGhlIGV2ZW50ICclcycgc3BlY2lmaWVkIHdpdGggb3B0aW9uIC1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlzIG5vdCB2YWxpZCIgJSBldikKKyAgICBlbHNlOgorICAgICAgICBtYXNrID0gQUxMX0VWRU5UUworCisgICAgIyBzdGF0cworICAgIGNiX2Z1biA9IE5vbmUKKyAgICBpZiBvcHRpb25zLnN0YXRzOgorICAgICAgICBkZWYgY2Iocyk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHJlcHIocy5wcm9jX2Z1bigpKSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKHMucHJvY19mdW4oKSkpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgY2JfZnVuID0gY2IKKworICAgICMgRXh0ZXJuYWwgY29tbWFuZAorICAgIGlmIG9wdGlvbnMuY29tbWFuZDoKKyAgICAgICAgZGVmIGNiKHMpOgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihvcHRpb25zLmNvbW1hbmQsIHNoZWxsPVRydWUpCisgICAgICAgIGNiX2Z1biA9IGNiCisKKyAgICBsb2cuZGVidWcoJ1N0YXJ0IG1vbml0b3JpbmcgJXMsIChwcmVzcyBjXmMgdG8gaGFsdCBweWlub3RpZnkpJyAlIHBhdGgpCisKKyAgICB3bS5hZGRfd2F0Y2gocGF0aCwgbWFzaywgcmVjPW9wdGlvbnMucmVjdXJzaXZlLCBhdXRvX2FkZD1vcHRpb25zLmF1dG9fYWRkLCBkb19nbG9iPW9wdGlvbnMuZ2xvYikKKyAgICAjIExvb3AgZm9yZXZlciAodW50aWwgc2lnaW50IHNpZ25hbCBnZXQgY2F1Z2h0KQorICAgIG5vdGlmaWVyLmxvb3AoY2FsbGJhY2s9Y2JfZnVuKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgY29tbWFuZF9saW5lKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9hZG1pbi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvYWRtaW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmODVkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvYWRtaW4ucHkKQEAgLTAsMCArMSwzMyBAQAorZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KK2Zyb20gZGphbmdvLmNvbnRyaWIuYWRtaW4uZmlsdGVycyBpbXBvcnQgUmVsYXRlZEZpZWxkTGlzdEZpbHRlcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCaXRiYWtlVmVyc2lvbiwgUmVsZWFzZSwgTGF5ZXJTb3VyY2UsIFRvYXN0ZXJTZXR0aW5nCitmcm9tIGRqYW5nby5mb3Jtcy53aWRnZXRzIGltcG9ydCBUZXh0YXJlYQorZnJvbSBkamFuZ28gaW1wb3J0IGZvcm1zCitpbXBvcnQgZGphbmdvLmRiLm1vZGVscyBhcyBtb2RlbHMKKworZnJvbSBkamFuZ28uY29udHJpYi5hZG1pbiBpbXBvcnQgd2lkZ2V0cywgaGVscGVycworCitjbGFzcyBMYXllclNvdXJjZUFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgorICAgIHBhc3MKKworY2xhc3MgQml0YmFrZVZlcnNpb25BZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKKworICAgICMgd2Ugb3ZlcnJpZGUgdGhlIGZvcm1maWVsZCBmb3IgZGIgVVJMRmllbGQgYmVjYXVzZSBvZiBicm9rZW4gVVJMIHZhbGlkYXRpb24KKworICAgIGRlZiBmb3JtZmllbGRfZm9yX2RiZmllbGQoc2VsZiwgZGJfZmllbGQsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYl9maWVsZCwgbW9kZWxzLmZpZWxkcy5VUkxGaWVsZCk6CisgICAgICAgICAgICByZXR1cm4gZm9ybXMuZmllbGRzLkNoYXJGaWVsZCgpCisgICAgICAgIHJldHVybiBzdXBlcihCaXRiYWtlVmVyc2lvbkFkbWluLCBzZWxmKS5mb3JtZmllbGRfZm9yX2RiZmllbGQoZGJfZmllbGQsICoqa3dhcmdzKQorCisKKworY2xhc3MgUmVsZWFzZUFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgorICAgIHBhc3MKKworY2xhc3MgVG9hc3RlclNldHRpbmdBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKKyAgICBwYXNzCisKK2FkbWluLnNpdGUucmVnaXN0ZXIoTGF5ZXJTb3VyY2UsIExheWVyU291cmNlQWRtaW4pCithZG1pbi5zaXRlLnJlZ2lzdGVyKEJpdGJha2VWZXJzaW9uLCBCaXRiYWtlVmVyc2lvbkFkbWluKQorYWRtaW4uc2l0ZS5yZWdpc3RlcihSZWxlYXNlLCBSZWxlYXNlQWRtaW4pCithZG1pbi5zaXRlLnJlZ2lzdGVyKFRvYXN0ZXJTZXR0aW5nLCBUb2FzdGVyU2V0dGluZ0FkbWluKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci91cmxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci91cmxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDM4N2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3VybHMucHkKQEAgLTAsMCArMSwyNiBAQAorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCitmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHBhdHRlcm5zLCBpbmNsdWRlLCB1cmwKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldworCit1cmxwYXR0ZXJucyA9IHBhdHRlcm5zKCdibGRjb2xsZWN0b3Iudmlld3MnLAorICAgICAgICAjIGxhbmRpbmcgcG9pbnQgZm9yIHB1c2hpbmcgYSBiaXRiYWtlX2V2ZW50bG9nLmpzb24gZmlsZSB0byB0aGlzIHRvYXN0ZXIgaW5zdGFjZQorICAgICAgICB1cmwocideZXZlbnRmaWxlJCcsICdldmVudGZpbGUnLCBuYW1lPSdldmVudGZpbGUnKSwKKyAgICAgICAgKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci92aWV3cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3Ivdmlld3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyZmE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3Ivdmlld3MucHkKQEAgLTAsMCArMSw2MiBAQAorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jYWNoZSBpbXBvcnQgY2FjaGVfY29udHJvbAorZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gZGphbmdvLmNvcmUucGFnaW5hdG9yIGltcG9ydCBQYWdpbmF0b3IsIEVtcHR5UGFnZSwgUGFnZU5vdEFuSW50ZWdlcgorZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlQmFkUmVxdWVzdCwgSHR0cFJlc3BvbnNlCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gZGphbmdvLnV0aWxzLmh0bWwgaW1wb3J0IGVzY2FwZQorZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgZm9ybWF0cworZnJvbSB0b2FzdGVyZ3VpLnRlbXBsYXRldGFncy5wcm9qZWN0dGFncyBpbXBvcnQganNvbiBhcyBqc29uZmlsdGVyCitpbXBvcnQganNvbgoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdG9hc3Rlcm1haW4KK2Zyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY3NyZiBpbXBvcnQgY3NyZl9leGVtcHQKKworCitAY3NyZl9leGVtcHQKK2RlZiBldmVudGZpbGUocmVxdWVzdCk6CisgICAgIiIiIFJlY2VpdmVzIGEgZmlsZSBieSBQT1NULCBhbmQgcnVucyB0b2FzdGVyLWV2ZW50cmVwbHkgb24gdGhpcyBmaWxlICIiIgorICAgIGlmIHJlcXVlc3QubWV0aG9kICE9ICJQT1NUIjoKKyAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZUJhZFJlcXVlc3QoIlRoaXMgQVBJIG9ubHkgYWNjZXB0cyBQT1NUIHJlcXVlc3RzLiBQb3N0IGEgZmlsZSB3aXRoOlxuXG5jdXJsIC1GIGV2ZW50bG9nPUBiaXRiYWtlX2V2ZW50bG9nLmpzb24gJXNcbiIgJSByZXF1ZXN0LmJ1aWxkX2Fic29sdXRlX3VyaShyZXZlcnNlKCdldmVudGZpbGUnKSksIGNvbnRlbnRfdHlwZT0idGV4dC9wbGFpbjt1dGY4IikKKworICAgICMgd3JpdGUgdGVtcG9yYXJ5IGZpbGUKKyAgICAoaGFuZGxlLCBhYnN0ZW1wcGF0aCkgPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj0iL3RtcC8iKQorICAgIHdpdGggb3MuZmRvcGVuKGhhbmRsZSwgInciKSBhcyB0bXBmaWxlOgorICAgICAgICBmb3IgY2h1bmsgaW4gcmVxdWVzdC5GSUxFU1snZXZlbnRsb2cnXS5jaHVua3MoKToKKyAgICAgICAgICAgIHRtcGZpbGUud3JpdGUoY2h1bmspCisgICAgdG1wZmlsZS5jbG9zZSgpCisKKyAgICAjIGNvbXB1dGUgdGhlIHBhdGggdG8gImJpdGJha2UvYmluL3RvYXN0ZXItZXZlbnRyZXBsYXkiCisgICAgZnJvbSBvcy5wYXRoIGltcG9ydCBkaXJuYW1lIGFzIEROCisgICAgaW1wb3J0X3NjcmlwdCA9IG9zLnBhdGguam9pbihETihETihETihETihvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKSwgImJpbi90b2FzdGVyLWV2ZW50cmVwbGF5IikKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1wb3J0X3NjcmlwdCk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2NyaXB0IG1pc3NpbmcgJXMiICUgaW1wb3J0X3NjcmlwdCkKKyAgICBzY3JpcHRlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgIHNjcmlwdGVudlsiREFUQUJBU0VfVVJMIl0gPSB0b2FzdGVybWFpbi5zZXR0aW5ncy5nZXREQVRBQkFTRV9VUkwoKQorCisgICAgIyBydW4gdGhlIGRhdGEgbG9hZGluZyBwcm9jZXNzIGFuZCByZXR1cm4gdGhlIHJlc3VsdHMKKyAgICBpbXBvcnRlciA9IHN1YnByb2Nlc3MuUG9wZW4oW2ltcG9ydF9zY3JpcHQsIGFic3RlbXBwYXRoXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgZW52PXNjcmlwdGVudikKKyAgICAob3V0LCBlcnIpID0gaW1wb3J0ZXIuY29tbXVuaWNhdGUoKQorICAgIGlmIGltcG9ydGVyLnJldHVybmNvZGUgPT0gMDoKKyAgICAgICAgb3MucmVtb3ZlKGFic3RlbXBwYXRoKQorICAgIHJldHVybiBIdHRwUmVzcG9uc2UoIj09IFJldHZhbCAlZFxuPT0gU1RET1VUXG4lc1xuXG49PSBTVERFUlJcbiVzIiAlIChpbXBvcnRlci5yZXR1cm5jb2RlLCBvdXQsIGVyciksIGNvbnRlbnRfdHlwZT0idGV4dC9wbGFpbjt1dGY4IikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9hZG1pbi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2FkbWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYmU1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9hZG1pbi5weQpAQCAtMCwwICsxLDggQEAKK2Zyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCitmcm9tIGRqYW5nby5jb250cmliLmFkbWluLmZpbHRlcnMgaW1wb3J0IFJlbGF0ZWRGaWVsZExpc3RGaWx0ZXIKK2Zyb20gLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudAorCitjbGFzcyBCdWlsZEVudmlyb25tZW50QWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisgICAgcGFzcworCithZG1pbi5zaXRlLnJlZ2lzdGVyKEJ1aWxkRW52aXJvbm1lbnQsIEJ1aWxkRW52aXJvbm1lbnRBZG1pbikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2JiY29udHJvbGxlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2JiY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDcwYWM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5CkBAIC0wLDAgKzEsMjAyIEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQorZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnQsIEJSTGF5ZXIsIEJSVmFyaWFibGUsIEJSVGFyZ2V0LCBCUkJpdGJha2UKKworIyBsb2FkIEJpdGJha2UgY29tcG9uZW50cworcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkpKQorc3lzLnBhdGguaW5zZXJ0KDAsIHBhdGgpCitpbXBvcnQgYmIuc2VydmVyLnhtbHJwYworCitjbGFzcyBCaXRiYWtlQ29udHJvbGxlcihvYmplY3QpOgorICAgICIiIiBUaGlzIGlzIHRoZSBiYXNpYyBjbGFzcyB0aGF0IGNvbnRyb2xscyBhIGJpdGJha2Ugc2VydmVyLgorICAgICAgICBJdCBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGNsYXNzIG9uIGhvdyB0aGUgc2VydmVyIGlzIHN0YXJ0ZWQgYW5kIGFxdWlyZWQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uZWN0aW9uKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gY29ubmVjdGlvbgorCisgICAgZGVmIF9ydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICByZXN1bHQsIGVycm9yID0gc2VsZi5jb25uZWN0aW9uLmNvbm5lY3Rpb24ucnVuQ29tbWFuZChjb21tYW5kKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihlcnJvcikKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGRpc2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKKworICAgIGRlZiBzZXRWYXJpYWJsZShzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCBuYW1lLCB2YWx1ZV0pCisKKyAgICBkZWYgYnVpbGQoc2VsZiwgdGFyZ2V0cywgdGFzayA9IE5vbmUpOgorICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgICAgICB0YXNrID0gImJ1aWxkIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuQ29tbWFuZChbImJ1aWxkVGFyZ2V0cyIsIHRhcmdldHMsIHRhc2tdKQorCisKKworZGVmIGdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKCoqa3dhcmdzKToKKyAgICAiIiIgR2V0cyB5b3UgYSBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciB0aGF0IGVuY2Fwc3VsYXRlcyBhIGJ1aWxkIGVudmlyb25tZW50LAorICAgICAgICBiYXNlZCBvbiB0aGUgcXVlcnkgZGljdGlvbmFyeSBzZW50IGluLgorCisgICAgICAgIFRoaXMgaXMgdXNlZCB0byByZXRyaWV2ZSwgZm9yIGV4YW1wbGUsIHRoZSBjdXJyZW50bHkgcnVubmluZyBCRSBmcm9tIGluc2lkZQorICAgICAgICB0aGUgdG9hc3RlciBVSSwgb3IgZmluZCBhIG5ldyBCRSB0byBzdGFydCBhIG5ldyBidWlsZCBpbiBpdC4KKworICAgICAgICBUaGUgcmV0dXJuIG9iamVjdCBNVVNUIGFsd2F5cyBiZSBhIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLgorICAgICIiIgorCisgICAgZnJvbSBsb2NhbGhvc3RiZWNvbnRyb2xsZXIgaW1wb3J0IExvY2FsaG9zdEJFQ29udHJvbGxlcgorICAgIGZyb20gc3NoYmVjb250cm9sbGVyICAgIGltcG9ydCBTU0hCRUNvbnRyb2xsZXIKKworICAgIGJlID0gQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmZpbHRlcihRKCoqa3dhcmdzKSlbMF0KKyAgICBpZiBiZS5iZXR5cGUgPT0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX0xPQ0FMOgorICAgICAgICByZXR1cm4gTG9jYWxob3N0QkVDb250cm9sbGVyKGJlKQorICAgIGVsaWYgYmUuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9TU0g6CisgICAgICAgIHJldHVybiBTU0hCRUNvbnRyb2xsZXIoYmUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogSW1wbGVtZW50IEJFQyBmb3IgdHlwZSAlcyIgJSBzdHIoYmUuYmV0eXBlKSkKKworCitjbGFzcyBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcihvYmplY3QpOgorICAgICIiIiBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciAoQkVDKSBpcyB0aGUgYWJzdHJhY3QgY2xhc3MgdGhhdCBkZWZpbmVzIHRoZSBvcGVyYXRpb25zIHRoYXQgTVVTVAorICAgICAgICBvciBTSE9VTEQgYmUgc3VwcG9ydGVkIGJ5IGEgQnVpbGQgRW52aXJvbm1lbnQuIEl0IGlzIHVzZWQgdG8gZXN0YWJsaXNoIHRoZSBmcmFtZXdvcmssIGFuZCBtdXN0CisgICAgICAgIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkgYnkgdGhlIHVzZXIuCisKKyAgICAgICAgVXNlIHRoZSAiZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIoKSIgZnVuY3Rpb24gdG8gZ2V0IGEgd29ya2luZyBCRUMgZm9yIHlvdXIgcmVtb3RlLgorCisgICAgICAgIEhvdyB0aGUgQnVpbGRFbnZpcm9ubWVudHMgYXJlIGRpc2NvdmVyZWQgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjbGFzcy4KKworICAgICAgICBZb3UgbXVzdCBkZXJpdmUgdGhpcyBjbGFzcyB0byB0ZWFjaCBUb2FzdGVyIGhvdyB0byBvcGVyYXRlIGluIHlvdXIgb3duIGluZnJhc3RydWN0dXJlLgorICAgICAgICBXZSBwcm92aWRlIHNvbWUgc3BlY2lmaWMgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIGVpdGhlciB0bworICAgICAgICBkaXJlY3RseSBzZXQtdXAgVG9hc3RlciBpbmZyYXN0cnVjdHVyZSwgb3IgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gaW5mcmFzdHJ1Y3R1cmUgc2V0OgorCisgICAgICAgICAgICAqIExvY2FsaG9zdCBjb250cm9sbGVyIHdpbGwgcnVuIHRoZSBUb2FzdGVyIEJFIG9uIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHdlYiBzZXJ2ZXIKKyAgICAgICAgKGN1cnJlbnQgdXNlciBpZiB5b3UgYXJlIHVzaW5nIHRoZSB0aGUgRGphbmdvIGRldmVsb3BtZW50IHdlYiBzZXJ2ZXIpCisgICAgICAgIG9uIHRoZSBsb2NhbCBtYWNoaW5lLCB3aXRoIHRoZSAiYnVpbGQvIiBkaXJlY3RvcnkgdW5kZXIgdGhlICJwb2t5LyIgc291cmNlIGNoZWNrb3V0IGRpcmVjdG9yeS4KKyAgICAgICAgQmFzaCBpcyBleHBlY3RlZCB0byBiZSBhdmFpbGFibGUuCisKKyAgICAgICAgICAgICogU1NIIGNvbnRyb2xsZXIgd2lsbCBydW4gdGhlIFRvYXN0ZXIgQkUgb24gYSByZW1vdGUgbWFjaGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgdXNlcgorICAgICAgICBjYW4gY29ubmVjdCB3aXRob3V0IHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IGltcGxlbWVudCIpd29yZCAoc2V0IHVwIHdpdGggZWl0aGVyIHNzaC1hZ2VudCBvciByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBpbXBsZW1lbnQiKXBocmFzZS1sZXNzIGtleSBhdXRoZW50aWNhdGlvbikKKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiZSk6CisgICAgICAgICIiIiBUYWtlcyBhIEJ1aWxkRW52aXJvbm1lbnQgb2JqZWN0IGFzIHBhcmFtZXRlciB0aGF0IHBvaW50cyB0byB0aGUgc2V0dGluZ3Mgb2YgdGhlIEJFLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5iZSA9IGJlCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3VwZGF0ZUJCTGF5ZXJzKGJibGF5ZXJjb25mLCBsYXllcmxpc3QpOgorICAgICAgICBjb25mbGluZXMgPSBvcGVuKGJibGF5ZXJjb25mLCAiciIpLnJlYWRsaW5lcygpCisKKyAgICAgICAgYmJsYXllcmNvbmZmaWxlID0gb3BlbihiYmxheWVyY29uZiwgInciKQorICAgICAgICBza2lwID0gMAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvbmZsaW5lcykpOgorICAgICAgICAgICAgaWYgc2tpcCA+IDA6CisgICAgICAgICAgICAgICAgc2tpcCA9LSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGNvbmZsaW5lc1tpXS5zdGFydHN3aXRoKCIjIGxpbmUgYWRkZWQgYnkgdG9hc3RlciIpOgorICAgICAgICAgICAgICAgIHNraXAgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJibGF5ZXJjb25mZmlsZS53cml0ZShjb25mbGluZXNbaV0pCisKKyAgICAgICAgYmJsYXllcmNvbmZmaWxlLndyaXRlKCIjIGxpbmUgYWRkZWQgYnkgdG9hc3RlciBidWlsZCBjb250cm9sXG5CQkxBWUVSUyA9IFwiIiArICIgIi5qb2luKGxheWVybGlzdCkgKyAiXCIiKQorICAgICAgICBiYmxheWVyY29uZmZpbGUuY2xvc2UoKQorCisKKyAgICBkZWYgd3JpdGVDb25mRmlsZShzZWxmLCB2YXJpYWJsZV9saXN0ID0gTm9uZSwgcmF3ID0gTm9uZSk6CisgICAgICAgICIiIiBXcml0ZXMgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gT3ZlcnJpZGUgd2l0aCBidWlsZGVudi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IE11c3Qgb3ZlcnJpZGUgdG8gYWN0dWFsbHkgd3JpdGUgYSBjb25maWd1cmF0aW9uIGZpbGUiKQorCisKKyAgICBkZWYgc3RhcnRCQlNlcnZlcihzZWxmKToKKyAgICAgICAgIiIiIFN0YXJ0cyBhICBCQiBzZXJ2ZXIgd2l0aCBUb2FzdGVyIHRvYXN0ZXJ1aSBzZXQgdXAgdG8gcmVjb3JkIHRoZSBidWlsZHMsIGFuIG5vIGNvbnRyb2xsaW5nIFVJLgorICAgICAgICAgICAgQWZ0ZXIgdGhpcyBtZXRob2QgZXhlY3V0ZXMsIHNlbGYuYmUgYmJhZGRyZXNzL2JicG9ydCBNVVNUIHBvaW50IHRvIGEgcnVubmluZyBhbmQgZnJlZSBzZXJ2ZXIsCisgICAgICAgICAgICBhbmQgdGhlIGJic3RhdGUgTVVTVCBiZSAgdXBkYXRlZCB0byAic3RhcnRlZCIuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBNdXN0IG92ZXJyaWRlIGluIG9yZGVyIHRvIGFjdHVhbGx5IHN0YXJ0IHRoZSBCQiBzZXJ2ZXIiKQorCisgICAgZGVmIHN0b3BCQlNlcnZlcihzZWxmKToKKyAgICAgICAgIiIiIFN0b3BzIHRoZSBjdXJyZW50bHkgcnVubmluZyBCQiBzZXJ2ZXIuCisgICAgICAgICAgICBUaGUgYmJzdGF0ZSBNVVNUIGJlIHVwZGF0ZWQgdG8gInN0b3BwZWQiLgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uIG11c3QgYmUgbm9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IE11c3Qgb3ZlcnJpZGUgc3RvQkJTZXJ2ZXIiKQorCisgICAgZGVmIHNldExheWVycyhzZWxmLCBiYnMsIGxzKToKKyAgICAgICAgIiIiIENoZWNrcy1vdXQgYml0YmFrZSBleGVjdXRvciBhbmQgbGF5ZXJzIGZyb20gZ2l0IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFNldHMgdGhlIGxheWVyIHZhcmlhYmxlcyBpbiB0aGUgY29uZmlnIGZpbGUsIGFmdGVyIHZhbGlkYXRpbmcgbG9jYWwgbGF5ZXIgcGF0aHMuCisgICAgICAgICAgICBUaGUgYml0YmFrZXMgbXVzdCBiZSBhIDEtbGVuZ3RoIGxpc3Qgb2YgQlJCaXRiYWtlCisgICAgICAgICAgICBUaGUgbGF5ZXIgcGF0aHMgbXVzdCBiZSBpbiBhIGxpc3Qgb2YgQlJMYXllciBvYmplY3QKKworICAgICAgICAgICAgYSB3b3JkIG9mIGF0dGVudGlvbjogYnkgY29udmVudGlvbiwgdGhlIGZpcnN0IGxheWVyIGZvciBhbnkgYnVpbGQgd2lsbCBiZSBwb2t5IQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogTXVzdCBvdmVycmlkZSBzZXRMYXllcnMiKQorCisKKyAgICBkZWYgZ2V0QkJDb250cm9sbGVyKHNlbGYpOgorICAgICAgICAiIiIgcmV0dXJucyBhIEJpdGJha2VDb250cm9sbGVyIHRvIGFuIGFscmVhZHkgc3RhcnRlZCBzZXJ2ZXI7IHRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIHRoZSBzZXJ2ZXIKKyAgICAgICAgICAgIHN0YXJ0cyBpZiBuZWVkZWQ7IG9yIHJlY29ubmVjdHMgdG8gdGhlIHNlcnZlciBpZiB3ZSBjYW4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmNvbm5lY3Rpb246CisgICAgICAgICAgICBzZWxmLnN0YXJ0QkJTZXJ2ZXIoKQorICAgICAgICAgICAgc2VsZi5iZS5sb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX1JVTk5JTkcKKyAgICAgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisKKyAgICAgICAgc2VydmVyID0gYmIuc2VydmVyLnhtbHJwYy5CaXRCYWtlWE1MUlBDQ2xpZW50KCkKKyAgICAgICAgc2VydmVyLmluaXRTZXJ2ZXIoKQorICAgICAgICBzZXJ2ZXIuc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKCIlczolcyIgJSAoc2VsZi5iZS5iYmFkZHJlc3MsIHNlbGYuYmUuYmJwb3J0KSkKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc2VydmVyLmVzdGFibGlzaENvbm5lY3Rpb24oW10pCisKKyAgICAgICAgc2VsZi5iZS5iYnRva2VuID0gc2VsZi5jb25uZWN0aW9uLnRyYW5zcG9ydC5jb25uZWN0aW9uX3Rva2VuCisgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisKKyAgICAgICAgcmV0dXJuIEJpdGJha2VDb250cm9sbGVyKHNlbGYuY29ubmVjdGlvbikKKworICAgIGRlZiBnZXRBcnRpZmFjdChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiIFRoaXMgY2FsbCByZXR1cm5zIGFuIGFydGlmYWN0IGlkZW50aWZpZWQgYnkgdGhlICdwYXRoJy4gSG93ICdwYXRoJyBpcyBpbnRlcnByZXRlZCBhcworICAgICAgICAgICAgdXAgdG8gdGhlIGltcGxlbWVudGluZyBCRUMuIFRoZSByZXR1cm4gTVVTVCBiZSBhIFJFU1QgVVJMIHdoZXJlIGEgR0VUIHdpbGwgYWN0dWFsbHkgcmV0dXJuCisgICAgICAgICAgICB0aGUgY29udGVudCBvZiB0aGUgYXJ0aWZhY3QsIGUuZy4gZm9yIHVzZSBhcyBhICJkb3dubG9hZCBsaW5rIiBpbiBhIHdlYiBVSS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVzdCByZXR1cm4gdGhlIFJFU1QgVVJMIG9mIHRoZSBhcnRpZmFjdCIpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiIFRoaXMgc3RvcHMgdGhlIHNlcnZlciBhbmQgcmVsZWFzZXMgYW55IHJlc291cmNlcy4gQWZ0ZXIgdGhpcyBwb2ludCwgYWxsIHJlc291cmNlcworICAgICAgICAgICAgYXJlIHVuLWF2YWlsYWJsZSBmb3IgZnVydGhlciByZWZlcmVuY2UKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVzdCBvdmVycmlkZSBCRSByZWxlYXNlIikKKworICAgIGRlZiB0cmlnZ2VyQnVpbGQoc2VsZiwgYml0YmFrZSwgbGF5ZXJzLCB2YXJpYWJsZXMsIHRhcmdldHMpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk11c3Qgb3ZlcnJpZGUgQkUgcmVsZWFzZSIpCisKK2NsYXNzIFNoZWxsQ21kRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIEJ1aWxkU2V0dXBFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2xvY2FsaG9zdGJlY29udHJvbGxlci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2xvY2FsaG9zdGJlY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkwOWI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5CkBAIC0wLDAgKzEsMzM2IEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQorZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnQsIEJSTGF5ZXIsIEJSVmFyaWFibGUsIEJSVGFyZ2V0LCBCUkJpdGJha2UKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gdG9hc3Rlcm1haW4gaW1wb3J0IHNldHRpbmdzCisKK2Zyb20gYmJjb250cm9sbGVyIGltcG9ydCBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciwgU2hlbGxDbWRFeGNlcHRpb24sIEJ1aWxkU2V0dXBFeGNlcHRpb24KKworaW1wb3J0IGxvZ2dpbmcKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVyIikKKworZnJvbSBwcHJpbnQgaW1wb3J0IHBwcmludCwgcGZvcm1hdAorCitjbGFzcyBMb2NhbGhvc3RCRUNvbnRyb2xsZXIoQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIpOgorICAgICIiIiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIgZm9yIHRoZSBsb2NhbGhvc3Q7CisgICAgICAgIHRoaXMgY29udHJvbGxlciBtYW5hZ2VzIHRoZSBkZWZhdWx0IGJ1aWxkIGRpcmVjdG9yeSwKKyAgICAgICAgdGhlIHNlcnZlciBzZXR1cCBhbmQgc3lzdGVtIHN0YXJ0IGFuZCBzdG9wIGZvciB0aGUgbG9jYWxob3N0LXR5cGUgYnVpbGQgZW52aXJvbm1lbnQKKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJlKToKKyAgICAgICAgc3VwZXIoTG9jYWxob3N0QkVDb250cm9sbGVyLCBzZWxmKS5fX2luaXRfXyhiZSkKKyAgICAgICAgc2VsZi5kYnVybCA9IHNldHRpbmdzLmdldERBVEFCQVNFX1VSTCgpCisgICAgICAgIHNlbGYucG9reWRpcm5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuaXNsYXllcnNldCA9IEZhbHNlCisKKyAgICBkZWYgX3NoZWxsY21kKHNlbGYsIGNvbW1hbmQsIGN3ZCA9IE5vbmUpOgorICAgICAgICBpZiBjd2QgaXMgTm9uZToKKyAgICAgICAgICAgIGN3ZCA9IHNlbGYuYmUuc291cmNlZGlyCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsYmNfc2hlbGxjbW1kOiAoJXMpICVzIiAlIChjd2QsIGNvbW1hbmQpKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLCBjd2QgPSBjd2QsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIChvdXQsZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBpZiBwLnJldHVybmNvZGU6CisgICAgICAgICAgICBpZiBsZW4oZXJyKSA9PSAwOgorICAgICAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBvdXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBlcnIpCisgICAgICAgICAgICBsb2dnZXIud2FybigibG9jYWxob3N0YmVjb250cm9sbGVyOiBzaGVsbGNtZCBlcnJvciAlcyIgJSBlcnIpCisgICAgICAgICAgICByYWlzZSBTaGVsbENtZEV4Y2VwdGlvbihlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgc3VjY2VzcyIpCisgICAgICAgICAgICByZXR1cm4gb3V0CisKKyAgICBkZWYgX3NldHVwQkUoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnBva3lkaXJuYW1lIGFuZCBvcy5wYXRoLmV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBwYXRoID0gc2VsZi5iZS5idWlsZGRpcgorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBwYXRoIGNyZWF0aW9uIHNwZWNpZmllZC4iKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhwYXRoLCAwNzU1KQorICAgICAgICBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlc1wiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBwYXRoKSkKKyAgICAgICAgIyBkZWxldGUgdGhlIHRlbXBsYXRlY29uZi5jZmc7IGl0IG1heSBjb21lIGZyb20gYW4gdW5zdXBwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHBhdGgsICJjb25mL3RlbXBsYXRlY29uZi5jZmciKSkKKworCisgICAgZGVmIHdyaXRlQ29uZkZpbGUoc2VsZiwgZmlsZV9uYW1lLCB2YXJpYWJsZV9saXN0ID0gTm9uZSwgcmF3ID0gTm9uZSk6CisgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsIGZpbGVfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAidyIpIGFzIGNvbmZmaWxlOgorICAgICAgICAgICAgaWYgdmFyaWFibGVfbGlzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiB2YXJpYWJsZV9saXN0OgorICAgICAgICAgICAgICAgICAgICBjb25mZmlsZS53cml0ZSgiJXM9XCIlc1wiXG4iICUgKGkubmFtZSwgaS52YWx1ZSkpCisgICAgICAgICAgICBpZiByYXcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgY29uZmZpbGUud3JpdGUocmF3KQorCisKKyAgICBkZWYgc3RhcnRCQlNlcnZlcihzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIG9zLnBhdGguZXhpc3RzKHNlbGYucG9reWRpcm5hbWUpCisgICAgICAgIGFzc2VydCBzZWxmLmlzbGF5ZXJzZXQKKworICAgICAgICAjIGZpbmQgb3VyIG93biB0b2FzdGVydWkgbGlzdGVuZXIvYml0YmFrZQorICAgICAgICBmcm9tIHRvYXN0ZXIuYmxkY29udHJvbC5tYW5hZ2VtZW50LmNvbW1hbmRzLmxvYWRjb25mIGltcG9ydCBfcmVkdWNlX2Nhbm9uX3BhdGgKKworICAgICAgICBvd25fYml0YmFrZSA9IF9yZWR1Y2VfY2Fub25fcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpLCAiLi4vLi4vLi4vYmluL2JpdGJha2UiKSkKKworICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMob3duX2JpdGJha2UpIGFuZCBvcy5wYXRoLmlzZmlsZShvd25fYml0YmFrZSkKKworICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogcnVubmluZyB0aGUgbGlzdGVuZXIgYXQgJXMiICUgb3duX2JpdGJha2UpCisKKyAgICAgICAgdG9hc3Rlcl91aV9sb2dfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgInRvYXN0ZXJfdWkubG9nIikKKyAgICAgICAgIyBnZXQgdGhlIGZpbGUgbGVuZ3RoOyB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgX2xhc3RfIHN0YXJ0IG9mIHRoZSB0b2FzdGVyIFVJLCBub3QgdGhlIGZpcnN0CisgICAgICAgIHRvYXN0ZXJfdWlfbG9nX2ZpbGVsZW5ndGggPSAwCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoKToKKyAgICAgICAgICAgIHdpdGggb3Blbih0b2FzdGVyX3VpX2xvZ19maWxlcGF0aCwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2VlaygwLCAyKSAgICAjIGp1bXAgdG8gdGhlIGVuZAorICAgICAgICAgICAgICAgIHRvYXN0ZXJfdWlfbG9nX2ZpbGVsZW5ndGggPSBmLnRlbGwoKQorCisgICAgICAgIGNtZCA9ICJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzIDI+JjEgPnRvYXN0ZXJfc2VydmVyLmxvZyAmJiBiaXRiYWtlIC0tcmVhZCAlcy9jb25mL3RvYXN0ZXItcHJlLmNvbmYgLS1wb3N0cmVhZCAlcy9jb25mL3RvYXN0ZXIuY29uZiAtLXNlcnZlci1vbmx5IC10IHhtbHJwYyAtQiAwLjAuMC4wOjAgMj4mMSA+PnRvYXN0ZXJfc2VydmVyLmxvZyBcIiIgJSAoc2VsZi5wb2t5ZGlybmFtZSwgc2VsZi5iZS5idWlsZGRpciwgc2VsZi5iZS5idWlsZGRpciwgc2VsZi5iZS5idWlsZGRpcikKKworICAgICAgICBwb3J0ID0gIi0xIgorICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc3RhcnRpbmcgYnVpbGRlciBcbiVzXG4iICUgY21kKQorCisgICAgICAgIGNtZG91dHB1dCA9IHNlbGYuX3NoZWxsY21kKGNtZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmUuYnVpbGRkaXIgKyAiL3RvYXN0ZXJfc2VydmVyLmxvZyIsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZvciBpIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgaS5zdGFydHN3aXRoKCJCaXRiYWtlIHNlcnZlciBhZGRyZXNzIik6CisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBpLnNwbGl0KCIgIilbLTFdCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBGb3VuZCBiaXRiYWtlIHNlcnZlciBwb3J0ICVzIiAlIHBvcnQpCisKKyAgICAgICAgY21kID0gImJhc2ggLWMgXCJzb3VyY2UgJXMvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIC0xICVzICYmIERBVEFCQVNFX1VSTD0lcyAlcyAtLW9ic2VydmUtb25seSAtdSB0b2FzdGVydWkgLS1yZW1vdGUtc2VydmVyPTAuMC4wLjA6LTEgLXQgeG1scnBjXCIiICUgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuZGJ1cmwsIG93bl9iaXRiYWtlKQorICAgICAgICB3aXRoIG9wZW4odG9hc3Rlcl91aV9sb2dfZmlsZXBhdGgsICJhKyIpIGFzIGY6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIGN3ZCA9IHNlbGYuYmUuYnVpbGRkaXIsIHNoZWxsPVRydWUsIHN0ZG91dD1mLCBzdGRlcnI9ZikKKworICAgICAgICBkZWYgX3RvYXN0ZXJfdWlfc3RhcnRlZChmaWxlcGF0aCwgZmlsZXBvcyA9IDApOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2VlayhmaWxlcG9zKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiTk9URTogVG9hc3RlclVJIHdhaXRpbmcgZm9yIGV2ZW50cyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHJpZXMgPSAwCisgICAgICAgIHN0YXJ0ZWQgPSBGYWxzZQorICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZCBhbmQgcmV0cmllcyA8IDUwOgorICAgICAgICAgICAgc3RhcnRlZCA9IF90b2FzdGVyX3VpX3N0YXJ0ZWQodG9hc3Rlcl91aV9sb2dfZmlsZXBhdGgsIHRvYXN0ZXJfdWlfbG9nX2ZpbGVsZW5ndGgpCisgICAgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IFdhaXRpbmcgYml0YmFrZSBzZXJ2ZXIgdG8gc3RhcnQiKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgICAgICByZXRyaWVzICs9IDEKKworICAgICAgICBpZiBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgIHRvYXN0ZXJfdWlfbG9nID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgInRvYXN0ZXJfdWkubG9nIiksICJyIikucmVhZCgpCisgICAgICAgICAgICB0b2FzdGVyX3NlcnZlcl9sb2cgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAidG9hc3Rlcl9zZXJ2ZXIubG9nIiksICJyIikucmVhZCgpCisgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEJpdGJha2Ugc2VydmVyIGRpZCBub3Qgc3RhcnQgaW4gMjUgc2Vjb25kcywgYWJvcnRpbmcgKEVycm9yOiAnJXMnICclcycpIiAlICh0b2FzdGVyX3VpX2xvZywgdG9hc3Rlcl9zZXJ2ZXJfbG9nKSkKKworICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogU3RhcnRlZCBiaXRiYWtlIHNlcnZlciIpCisKKyAgICAgICAgd2hpbGUgcG9ydCA9PSAiLTEiOgorICAgICAgICAgICAgIyB0aGUgcG9ydCBzcGVjaWZpY2F0aW9uIGlzICJhdXRvZGV0ZWN0IjsgcmVhZCB0aGUgYml0YmFrZS5sb2NrIGZpbGUKKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvYml0YmFrZS5sb2NrIiAlIHNlbGYuYmUuYnVpbGRkaXIsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBpZiAiOiIgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBsaW5lLnNwbGl0KCI6IilbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEF1dG9kZXRlY3RlZCBiaXRiYWtlIHBvcnQgJXMiLCBwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBhc3NlcnQgc2VsZi5iZS5zb3VyY2VkaXIgYW5kIG9zLnBhdGguZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisgICAgICAgIHNlbGYuYmUuYmJhZGRyZXNzID0gImxvY2FsaG9zdCIKKyAgICAgICAgc2VsZi5iZS5iYnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuYmUuYmJzdGF0ZSA9IEJ1aWxkRW52aXJvbm1lbnQuU0VSVkVSX1NUQVJURUQKKyAgICAgICAgc2VsZi5iZS5zYXZlKCkKKworICAgIGRlZiBzdG9wQkJTZXJ2ZXIoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnBva3lkaXJuYW1lIGFuZCBvcy5wYXRoLmV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisgICAgICAgIHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICVzIHNvdXJjZSB0b2FzdGVyIHN0b3BcIiIgJQorICAgICAgICAgICAgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIChsYW1iZGE6ICIiIGlmIHNlbGYuYmUuYmJ0b2tlbiBpcyBOb25lIGVsc2UgIkJCVE9LRU49JXMiICUgc2VsZi5iZS5iYnRva2VuKSgpKSkKKyAgICAgICAgc2VsZi5iZS5iYnN0YXRlID0gQnVpbGRFbnZpcm9ubWVudC5TRVJWRVJfU1RPUFBFRAorICAgICAgICBzZWxmLmJlLnNhdmUoKQorICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogU3RvcHBlZCBiaXRiYWtlIHNlcnZlciIpCisKKyAgICBkZWYgZ2V0R2l0Q2xvbmVEaXJlY3Rvcnkoc2VsZiwgdXJsLCBicmFuY2gpOgorICAgICAgICAiIiIgVXRpbGl0eSB0aGF0IHJldHVybnMgdGhlIGxhc3QgY29tcG9uZW50IG9mIGEgZ2l0IHBhdGggYXMgZGlyZWN0b3J5CisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgY29tcG9uZW50cyA9IHJlLnNwbGl0KHInWzpcLlwvXScsIHVybCkKKyAgICAgICAgYmFzZSA9IGNvbXBvbmVudHNbLTJdIGlmIGNvbXBvbmVudHNbLTFdID09ICJnaXQiIGVsc2UgY29tcG9uZW50c1stMV0KKworICAgICAgICBpZiBicmFuY2ggIT0gIkhFQUQiOgorICAgICAgICAgICAgcmV0dXJuICJfJXNfJXMudG9hc3Rlcl9jbG9uZWQiICUgKGJhc2UsIGJyYW5jaCkKKworCisgICAgICAgICMgd29yZCBvZiBhdHRlbnRpb247IHRoaXMgaXMgYSBsb2NhbGhvc3Qtc3BlY2lmaWMgaXNzdWU7IG9ubHkgb24gdGhlIGxvY2FsaG9zdCB3ZSBleHBlY3QgdG8gaGF2ZSAiSEVBRCIgcmVsZWFzZXMKKyAgICAgICAgIyB3aGljaCBfQUxXQVlTXyBtZWFucyB0aGUgY3VycmVudCBwb2t5IGNoZWNrb3V0CisgICAgICAgIGZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSBhcyBETgorICAgICAgICBsb2NhbF9jaGVja291dF9wYXRoID0gRE4oRE4oRE4oRE4oRE4ob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSkpCisgICAgICAgICNsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogdXNpbmcgSEVBRCBjaGVja291dCBpbiAlcyIgJSBsb2NhbF9jaGVja291dF9wYXRoKQorICAgICAgICByZXR1cm4gbG9jYWxfY2hlY2tvdXRfcGF0aAorCisKKyAgICBkZWYgc2V0TGF5ZXJzKHNlbGYsIGJpdGJha2VzLCBsYXllcnMpOgorICAgICAgICAiIiIgYSB3b3JkIG9mIGF0dGVudGlvbjogYnkgY29udmVudGlvbiwgdGhlIGZpcnN0IGxheWVyIGZvciBhbnkgYnVpbGQgd2lsbCBiZSBwb2t5ISAiIiIKKworICAgICAgICBhc3NlcnQgc2VsZi5iZS5zb3VyY2VkaXIgaXMgbm90IE5vbmUKKyAgICAgICAgYXNzZXJ0IGxlbihiaXRiYWtlcykgPT0gMQorICAgICAgICAjIHNldCBsYXllcnMgaW4gdGhlIGxheWVyc291cmNlCisKKyAgICAgICAgIyAxLiBnZXQgYSBsaXN0IG9mIHJlcG9zIHdpdGggYnJhbmNoZXMsIGFuZCBtYXAgZGlycGF0aHMgZm9yIGVhY2ggbGF5ZXIKKyAgICAgICAgZ2l0cmVwb3MgPSB7fQorCisgICAgICAgIGdpdHJlcG9zWyhiaXRiYWtlc1swXS5naXR1cmwsIGJpdGJha2VzWzBdLmNvbW1pdCldID0gW10KKyAgICAgICAgZ2l0cmVwb3NbKGJpdGJha2VzWzBdLmdpdHVybCwgYml0YmFrZXNbMF0uY29tbWl0KV0uYXBwZW5kKCAoImJpdGJha2UiLCBiaXRiYWtlc1swXS5kaXJwYXRoKSApCisKKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgICMgd2UgZG9uJ3QgcHJvY2VzcyBsb2NhbCBVUkxzCisgICAgICAgICAgICBpZiBsYXllci5naXR1cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgKGxheWVyLmdpdHVybCwgbGF5ZXIuY29tbWl0KSBpbiBnaXRyZXBvczoKKyAgICAgICAgICAgICAgICBnaXRyZXBvc1sobGF5ZXIuZ2l0dXJsLCBsYXllci5jb21taXQpXSA9IFtdCisgICAgICAgICAgICBnaXRyZXBvc1sobGF5ZXIuZ2l0dXJsLCBsYXllci5jb21taXQpXS5hcHBlbmQoIChsYXllci5uYW1lLCBsYXllci5kaXJwYXRoKSApCisKKworICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlciwgb3VyIGdpdCByZXBvcyBhcmUgJXMiICUgcGZvcm1hdChnaXRyZXBvcykpCisKKworICAgICAgICAjIDIuIGZpbmQgY2hlY2tlZC1vdXQgZ2l0IHJlcG9zIGluIHRoZSBzb3VyY2VkaXIgZGlyZWN0b3J5IHRoYXQgbWF5IGhlbHAgZmFzdGVyIGNsb25pbmcKKworICAgICAgICBjYWNoZWRfbGF5ZXJzID0ge30KKyAgICAgICAgZm9yIGxkaXIgaW4gb3MubGlzdGRpcihzZWxmLmJlLnNvdXJjZWRpcik6CisgICAgICAgICAgICBmbGRpciA9IG9zLnBhdGguam9pbihzZWxmLmJlLnNvdXJjZWRpciwgbGRpcikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmxkaXIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgLXYiLCBmbGRpcikuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlID0gbGluZS5zcGxpdCgiXHQiKVsxXS5zcGxpdCgiICIpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3RlIG5vdCBpbiBjYWNoZWRfbGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRfbGF5ZXJzW3JlbW90ZV0gPSBmbGRpcgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgYW55IGVycm9ycyBpbiBjb2xsZWN0aW5nIGdpdCByZW1vdGVzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBsYXllcmxpc3QgPSBbXQorCisKKyAgICAgICAgIyAzLiBjaGVja291dCB0aGUgcmVwb3NpdG9yaWVzCisgICAgICAgIGZvciBnaXR1cmwsIGNvbW1pdCBpbiBnaXRyZXBvcy5rZXlzKCk6CisgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5zb3VyY2VkaXIsIHNlbGYuZ2V0R2l0Q2xvbmVEaXJlY3RvcnkoZ2l0dXJsLCBjb21taXQpKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGdpdHVybCAlczolcyBjaGVja2luZyBvdXQgaW4gY3VycmVudCBkaXJlY3RvcnkgJXMiICUgKGdpdHVybCwgY29tbWl0LCBsb2NhbGRpcm5hbWUpKQorCisgICAgICAgICAgICAjIG1ha2Ugc3VyZSBvdXIgZGlyZWN0b3J5IGlzIGEgZ2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvY2FsZGlybmFtZSk6CisgICAgICAgICAgICAgICAgbG9jYWxyZW1vdGVzID0gc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgLXYiLCBsb2NhbGRpcm5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGdpdHVybCBpbiBsb2NhbHJlbW90ZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkV4aXN0aW5nIGdpdCByZXBvc2l0b3J5IGF0ICVzLCBidXQgd2l0aCBkaWZmZXJlbnQgcmVtb3RlcyAoJyVzJywgZXhwZWN0ZWQgJyVzJykuIFRvYXN0ZXIgd2lsbCBub3QgY29udGludWUgb3V0IG9mIGZlYXIgb2YgZGFtYWdpbmcgc29tZXRoaW5nLiIgJSAobG9jYWxkaXJuYW1lLCAiLCAiLmpvaW4obG9jYWxyZW1vdGVzLnNwbGl0KCJcbiIpKSwgZ2l0dXJsKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZ2l0dXJsIGluIGNhY2hlZF9sYXllcnM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyIGdpdC1jb3B5aW5nICVzIHRvICVzIiAlIChjYWNoZWRfbGF5ZXJzW2dpdHVybF0sIGxvY2FsZGlybmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgY2xvbmUgXCIlc1wiIFwiJXNcIiIgJSAoY2FjaGVkX2xheWVyc1tnaXR1cmxdLCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luIiwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIFwiJXNcIiIgJSBnaXR1cmwsIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogY2xvbmluZyAlczolcyBpbiAlcyIgJSAoZ2l0dXJsLCBjb21taXQsIGxvY2FsZGlybmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgY2xvbmUgXCIlc1wiIC0tc2luZ2xlLWJyYW5jaCAtLWJyYW5jaCBcIiVzXCIgXCIlc1wiIiAlIChnaXR1cmwsIGNvbW1pdCwgbG9jYWxkaXJuYW1lKSkKKworICAgICAgICAgICAgIyBicmFuY2ggbWFnaWMgbmFtZSAiSEVBRCIgd2lsbCBpbmhpYml0IGNoZWNrb3V0CisgICAgICAgICAgICBpZiBjb21taXQgIT0gIkhFQUQiOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBjaGVja2luZyBvdXQgY29tbWl0ICVzIHRvICVzICIgJSAoY29tbWl0LCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgZmV0Y2ggLS1hbGwgJiYgZ2l0IGNoZWNrb3V0IFwiJXNcIiAmJiBnaXQgcmViYXNlIFwib3JpZ2luLyVzXCIiICUgKGNvbW1pdCwgY29tbWl0KSAsIGxvY2FsZGlybmFtZSkKKworICAgICAgICAgICAgIyB0YWtlIHRoZSBsb2NhbGRpcm5hbWUgYXMgcG9reSBkaXIgaWYgd2UgY2FuIGZpbmQgdGhlIG9lLWluaXQtYnVpbGQtZW52CisgICAgICAgICAgICBpZiBzZWxmLnBva3lkaXJuYW1lIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihsb2NhbGRpcm5hbWUsICJvZS1pbml0LWJ1aWxkLWVudiIpKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2VsZWN0ZWQgcG9reSBkaXIgbmFtZSAlcyIgJSBsb2NhbGRpcm5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5wb2t5ZGlybmFtZSA9IGxvY2FsZGlybmFtZQorCisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHdvcmtpbmcgYml0YmFrZQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5wb2t5ZGlybmFtZSwgJ2JpdGJha2UnKSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBjaGVja2luZyBiaXRiYWtlIGludG8gdGhlIHBva3kgZGlybmFtZSAlcyAiICUgc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCBjbG9uZSAtYiBcIiVzXCIgXCIlc1wiIFwiJXNcIiAiICUgKGJpdGJha2VzWzBdLmNvbW1pdCwgYml0YmFrZXNbMF0uZ2l0dXJsLCBvcy5wYXRoLmpvaW4oc2VsZi5wb2t5ZGlybmFtZSwgJ2JpdGJha2UnKSkpCisKKyAgICAgICAgICAgICMgdmVyaWZ5IG91ciByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGZvciBuYW1lLCBkaXJwYXRoIGluIGdpdHJlcG9zWyhnaXR1cmwsIGNvbW1pdCldOgorICAgICAgICAgICAgICAgIGxvY2FsZGlycGF0aCA9IG9zLnBhdGguam9pbihsb2NhbGRpcm5hbWUsIGRpcnBhdGgpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGxvY2FsZGlycGF0aCBleHBlY3RlZCAnJXMnIiAlIGxvY2FsZGlycGF0aCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9jYWxkaXJwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigiQ2Fubm90IGZpbmQgbGF5ZXIgZ2l0IHBhdGggJyVzJyBpbiBjaGVja2VkIG91dCByZXBvc2l0b3J5ICclczolcycuIEFib3J0aW5nLiIgJSAobG9jYWxkaXJwYXRoLCBnaXR1cmwsIGNvbW1pdCkpCisKKyAgICAgICAgICAgICAgICBpZiBuYW1lICE9ICJiaXRiYWtlIjoKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJsaXN0LmFwcGVuZChsb2NhbGRpcnBhdGgucnN0cmlwKCIvIikpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGN1cnJlbnQgbGF5ZXIgbGlzdCAlcyAiICUgcGZvcm1hdChsYXllcmxpc3QpKQorCisgICAgICAgICMgNC4gY29uZmlndXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgc28gd2UgaGF2ZSBhIGNvbmYvYmJsYXllcnMuY29uZgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLl9zZXR1cEJFKCkKKworICAgICAgICAjIDUuIHVwZGF0ZSB0aGUgYmJsYXllcnMuY29uZgorICAgICAgICBiYmxheWVyY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJibGF5ZXJjb25mKToKKyAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkJFIGlzIG5vdCBjb25zaXN0ZW50OiBiYmxheWVycy5jb25mIGZpbGUgbWlzc2luZyBhdCAlcyIgJSBiYmxheWVyY29uZikKKworICAgICAgICBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlci5fdXBkYXRlQkJMYXllcnMoYmJsYXllcmNvbmYsIGxheWVybGlzdCkKKworICAgICAgICBzZWxmLmlzbGF5ZXJzZXQgPSBUcnVlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVhZFNlcnZlckxvZ0ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBvcGVuKG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAidG9hc3Rlcl9zZXJ2ZXIubG9nIiksICJyIikucmVhZCgpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGFuZCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCAiYnVpbGQiKSkKKyAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorCisKKyAgICBkZWYgdHJpZ2dlckJ1aWxkKHNlbGYsIGJpdGJha2UsIGxheWVycywgdmFyaWFibGVzLCB0YXJnZXRzKToKKyAgICAgICAgIyBzZXQgdXAgdGhlIGJ1aWQgZW52aXJvbm1lbnQgd2l0aCB0aGUgbmVlZGVkIGxheWVycworICAgICAgICBzZWxmLnNldExheWVycyhiaXRiYWtlLCBsYXllcnMpCisgICAgICAgIHNlbGYud3JpdGVDb25mRmlsZSgiY29uZi90b2FzdGVyLXByZS5jb25mIiwgdmFyaWFibGVzKQorICAgICAgICBzZWxmLndyaXRlQ29uZkZpbGUoImNvbmYvdG9hc3Rlci5jb25mIiwgcmF3ID0gIklOSEVSSVQrPVwidG9hc3RlciBidWlsZGhpc3RvcnlcIiIpCisKKyAgICAgICAgIyBnZXQgdGhlIGJiIHNlcnZlciBydW5uaW5nIHdpdGggdGhlIGJ1aWxkIHJlcSBpZCBhbmQgYnVpbGQgZW52IGlkCisgICAgICAgIGJiY3RybCA9IHNlbGYuZ2V0QkJDb250cm9sbGVyKCkKKworICAgICAgICAjIHRyaWdnZXIgdGhlIGJ1aWxkIGNvbW1hbmQKKyAgICAgICAgdGFzayA9IHJlZHVjZShsYW1iZGEgeCwgeTogeCBpZiBsZW4oeSk9PSAwIGVsc2UgeSwgbWFwKGxhbWJkYSB5OiB5LnRhc2ssIHRhcmdldHMpKQorICAgICAgICBpZiBsZW4odGFzaykgPT0gMDoKKyAgICAgICAgICAgIHRhc2sgPSBOb25lCisKKyAgICAgICAgYmJjdHJsLmJ1aWxkKGxpc3QobWFwKGxhbWJkYSB4OngudGFyZ2V0LCB0YXJnZXRzKSksIHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEJ1aWxkIGxhdW5jaGVkLCBleGl0aW5nLiBGb2xsb3cgYnVpbGQgbG9ncyBhdCAlcy90b2FzdGVyX3VpLmxvZyIgJSBzZWxmLmJlLmJ1aWxkZGlyKQorCisgICAgICAgICMgZGlzY29ubmVjdCBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgICAgYmJjdHJsLmRpc2Nvbm5lY3QoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2NoZWNrc2V0dGluZ3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2NoZWNrc2V0dGluZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjNTczYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvY2hlY2tzZXR0aW5ncy5weQpAQCAtMCwwICsxLDIyNSBAQAorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IE5vQXJnc0NvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uCitmcm9tIGJsZGNvbnRyb2wuYmJjb250cm9sbGVyIGltcG9ydCBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciwgU2hlbGxDbWRFeGNlcHRpb24KK2Zyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdCwgQnVpbGRFbnZpcm9ubWVudCwgQlJFcnJvcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBUb2FzdGVyU2V0dGluZywgQnVpbGQKK2ltcG9ydCBvcworaW1wb3J0IHN5cywgdHJhY2ViYWNrCisKK2RlZiBETihwYXRoKToKKyAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgIHJldHVybiAiIgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKworCitjbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorICAgIGFyZ3MgPSAiIgorICAgIGhlbHAgPSAiVmVyaWZpZXMgdGhhdCB0aGUgY29uZmlndXJlZCBzZXR0aW5ncyBhcmUgdmFsaWQgYW5kIHVzYWJsZSwgb3IgcHJvbXB0cyB0aGUgdXNlciB0byBmaXggdGhlIHNldHRpbmdzLiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihDb21tYW5kLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZ3Vlc3NwYXRoID0gRE4oRE4oRE4oRE4oRE4oRE4oRE4oX19maWxlX18pKSkpKSkpCisKKyAgICBkZWYgX2ZpbmRfZmlyc3RfcGF0aF9mb3JfZmlsZShzZWxmLCBzdGFydGRpcmVjdG9yeSwgZmlsZW5hbWUsIGxldmVsID0gMCk6CisgICAgICAgIGlmIGxldmVsIDwgMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGRpcnMgPSBbXQorICAgICAgICBmb3IgaSBpbiBvcy5saXN0ZGlyKHN0YXJ0ZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGogPSBvcy5wYXRoLmpvaW4oc3RhcnRkaXJlY3RvcnksIGkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShqKToKKyAgICAgICAgICAgICAgICBpZiBpID09IGZpbGVuYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRkaXJlY3RvcnkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihqKToKKyAgICAgICAgICAgICAgICBkaXJzLmFwcGVuZChqKQorICAgICAgICBmb3IgaiBpbiBkaXJzOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5fZmluZF9maXJzdF9wYXRoX2Zvcl9maWxlKGosIGZpbGVuYW1lLCBsZXZlbCAtIDEpCisgICAgICAgICAgICBpZiByZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9yZWN1cnNpdmVfbGlzdF9kaXJlY3RvcmllcyhzZWxmLCBzdGFydGRpcmVjdG9yeSwgbGV2ZWwgPSAwKToKKyAgICAgICAgaWYgbGV2ZWwgPCAwOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGRpcnMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBvcy5saXN0ZGlyKHN0YXJ0ZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICBqID0gb3MucGF0aC5qb2luKHN0YXJ0ZGlyZWN0b3J5LCBpKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaik6CisgICAgICAgICAgICAgICAgICAgIGRpcnMuYXBwZW5kKGopCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgaiBpbiBkaXJzOgorICAgICAgICAgICAgICAgIGRpcnMgPSBkaXJzICsgc2VsZi5fcmVjdXJzaXZlX2xpc3RfZGlyZWN0b3JpZXMoaiwgbGV2ZWwgLSAxKQorICAgICAgICByZXR1cm4gZGlycworCisKKyAgICBkZWYgX2dldF9zdWdnZXN0ZWRfc291cmNlZGlyKHNlbGYsIGJlKToKKyAgICAgICAgaWYgYmUuYmV0eXBlICE9IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICByZXR1cm4gRE4oRE4oRE4oc2VsZi5fZmluZF9maXJzdF9wYXRoX2Zvcl9maWxlKHNlbGYuZ3Vlc3NwYXRoLCAidG9hc3RlcmNvbmYuanNvbiIsIDQpKSkpCisKKyAgICBkZWYgX2dldF9zdWdnZXN0ZWRfYnVpbGRkaXIoc2VsZiwgYmUpOgorICAgICAgICBpZiBiZS5iZXR5cGUgIT0gQnVpbGRFbnZpcm9ubWVudC5UWVBFX0xPQ0FMOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHJldHVybiBETihzZWxmLl9maW5kX2ZpcnN0X3BhdGhfZm9yX2ZpbGUoRE4oc2VsZi5ndWVzc3BhdGgpLCAiYmJsYXllcnMuY29uZiIsIDQpKQorCisgICAgZGVmIF92ZXJpZnlfYnVpbGRfZW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgICMgcmVmdXNlIHRvIHN0YXJ0IGlmIHdlIGhhdmUgbm8gYnVpbGQgZW52aXJvbm1lbnRzCisgICAgICAgIHdoaWxlIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jb3VudCgpID09IDA6CisgICAgICAgICAgICBwcmludCgiICEhIE5vIGJ1aWxkIGVudmlyb25tZW50cyBmb3VuZC4gVG9hc3RlciBuZWVkcyBhdCBsZWFzdCBvbmUgYnVpbGQgZW52aXJvbm1lbnQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBydW4gYnVpbGRzLlxuIiArCisgICAgICAgICAgICAgICAgIllvdSBjYW4gbWFudWFsbHkgZGVmaW5lIGJ1aWxkIGVudmlyb25tZW50cyBpbiB0aGUgZGF0YWJhc2UgdGFibGUgYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50LlxuIiArCisgICAgICAgICAgICAgICAgIk9yIFRvYXN0ZXIgY2FuIGRlZmluZSBhIHNpbXBsZSBsb2NhbGhvc3QtYmFzZWQgYnVpbGQgZW52aXJvbm1lbnQgZm9yIHlvdS4iKQorCisgICAgICAgICAgICBpID0gcmF3X2lucHV0KCIgLS0gIERvIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGJhc2ljIGxvY2FsaG9zdCBidWlsZCBlbnZpcm9ubWVudCA/IChZL24pICIpOworICAgICAgICAgICAgaWYgbm90IGxlbihpKSBvciBpLnN0YXJ0c3dpdGgoInkiKSBvciBpLnN0YXJ0c3dpdGgoIlkiKToKKyAgICAgICAgICAgICAgICBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKHBrID0gMSwgYmV0eXBlID0gMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUb2FzdGVyIGNhbm5vdCBzdGFydCB3aXRob3V0IGJ1aWxkIGVudmlyb25tZW50cy4gQWJvcnRpbmcuIikKKworCisgICAgICAgICMgd2UgbWFrZSBzdXJlIHdlIGhhdmUgYnVpbGRkaXIgYW5kIHNvdXJjZWRpciBmb3IgYWxsIGRlZmluZWQgYnVpbGQgZW52aW9ubWVudHMKKyAgICAgICAgZm9yIGJlIGluIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIGJlLm5lZWRzX2ltcG9ydCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX3ZlcmlmeV9iZSgpOgorICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHByaW50KCJcblZlcmlmeWluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIElmIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudCBpcyBub3QgcHJvcGVybHkgY29uZmlndXJlZCwgeW91IHdpbGwgYmUgYXNrZWQgdG8gY29uZmlndXJlIGl0LiIpCisKKyAgICAgICAgICAgICAgICBkZWYgX3VwZGF0ZV9zb3VyY2VkaXIoKToKKyAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkZGlyID0gc2VsZi5fZ2V0X3N1Z2dlc3RlZF9zb3VyY2VkaXIoYmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLnNvdXJjZWRpciA9IHJhd19pbnB1dCgiVGhpcyBpcyB0aGUgZGlyZWN0b3J5IFRvYXN0ZXIgdXNlcyB0byBjaGVjayBvdXQgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBsYXllcnMgeW91IHdpbGwgYnVpbGQuIFRvYXN0ZXIgd2lsbCBjcmVhdGUgbmV3IGNsb25lcyBvZiB0aGUgbGF5ZXJzLCBzbyBleGlzdGluZyBjb250ZW50IGluIHRoZSBjaG9zZW4gZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNoYW5nZWQuXG5Ub2FzdGVyIHN1Z2dlc3RzIHlvdSB1c2UgXCIlc1wiIGFzIHlvdXIgbGF5ZXJzIGNoZWNrb3V0IGRpcmVjdG9yeS4gSWYgeW91IHNlbGVjdCB0aGlzIGRpcmVjdG9yeSwgYSBsYXllciBsaWtlIFwibWV0YS1pbnRlbFwiIHdpbGwgZW5kIHVwIGluIFwiJXMvbWV0YS1pbnRlbFwiLlxuUHJlc3MgRW50ZXIgdG8gc2VsZWN0IFwiJXNcIiBvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LiBJZiB5b3UgcHJvdmlkZSB5b3VyIG93biBkaXJlY3RvcnksIGl0IG11c3QgYmUgYSBwYXJlbnQgb2YgdGhlIGNsb25lZCBkaXJlY3RvcnkgZm9yIHRoZSBzb3VyY2VzIHlvdSBhcmUgdXNpbmcgdG8gcnVuIFRvYXN0ZXI6ICIgJSAoc3VnZ2VzdGVkZGlyLCBzdWdnZXN0ZWRkaXIsIHN1Z2dlc3RlZGRpcikpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiZS5zb3VyY2VkaXIgPSByYXdfaW5wdXQoIlRvYXN0ZXIgbmVlZHMgdG8ga25vdyBpbiB3aGljaCBkaXJlY3RvcnkgaXQgc2hvdWxkIGNoZWNrIG91dCB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGxheWVycyB5b3Ugd2lsbCBidWlsZC4gVGhlIGRpcmVjdG9yeSBzaG91bGQgYmUgYSBwYXJlbnQgb2YgdGhlIGNsb25lZCBkaXJlY3RvcnkgZm9yIHRoZSBzb3VyY2VzIHlvdSBhcmUgdXNpbmcgdG8gcnVuIFRvYXN0ZXIuIFRvYXN0ZXIgd2lsbCBjcmVhdGUgbmV3IGNsb25lcyBvZiB0aGUgbGF5ZXJzLCBzbyBleGlzdGluZyBjb250ZW50IGluIHRoZSBjaG9zZW4gZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNoYW5nZWQuXG5UeXBlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeSAoZm9yIGV4YW1wbGU6IFwiJXNcIjogIiAlIG9zLmVudmlyb24uZ2V0KCdIT01FJywgJy90bXAvJykpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihiZS5zb3VyY2VkaXIpID09IDAgYW5kIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLnNvdXJjZWRpciA9IHN1Z2dlc3RlZGRpcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGJlLnNvdXJjZWRpcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgc2V0LiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfc291cmNlZGlyKCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBiZS5zb3VyY2VkaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4gLS0gVmFsaWRhdGlvbjogVGhlIGxheWVycyBjaGVja291dCBkaXJlY3RvcnkgbXVzdCBiZSBzZXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4iCisgICAgICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBfdXBkYXRlX3NvdXJjZWRpcigpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYmUuc291cmNlZGlyIGluIEROKF9fZmlsZV9fKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgYSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgY2hlY2tvdXQuIgorICAgICAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gX3VwZGF0ZV9zb3VyY2VkaXIoKQorCisgICAgICAgICAgICAgICAgaWYgaXNfY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgYmUuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLm5lZWRzX2ltcG9ydCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGRlZiBfdXBkYXRlX2J1aWxkZGlyKCk6CisgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZGRpciA9IHNlbGYuX2dldF9zdWdnZXN0ZWRfYnVpbGRkaXIoYmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLmJ1aWxkZGlyID0gcmF3X2lucHV0KCJUb2FzdGVyIG5lZWRzIHRvIGtub3cgd2hlcmUgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgbG9jYXRlZC5cblRoZSBidWlsZCBkaXJlY3RvcnkgaXMgd2hlcmUgYWxsIHRoZSBhcnRpZmFjdHMgY3JlYXRlZCBieSB5b3VyIGJ1aWxkcyB3aWxsIGJlIHN0b3JlZC4gVG9hc3RlciBzdWdnZXN0cyBcIiVzXCIuXG5QcmVzcyBFbnRlciB0byBzZWxlY3QgXCIlc1wiIG9yIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3Rvcnk6ICIgJSAoc3VnZ2VzdGVkZGlyLCBzdWdnZXN0ZWRkaXIpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmUuYnVpbGRkaXIgPSByYXdfaW5wdXQoIlRvYXN0ZXIgbmVlZHMgdG8ga25vdyB3aGVyZSBpcyB5b3VyIGJ1aWxkIGRpcmVjdG9yeS5cblRoZSBidWlsZCBkaXJlY3RvcnkgaXMgd2hlcmUgYWxsIHRoZSBhcnRpZmFjdHMgY3JlYXRlZCBieSB5b3VyIGJ1aWxkcyB3aWxsIGJlIHN0b3JlZC4gVHlwZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgKGZvciBleGFtcGxlOiBcIiAlcy9idWlsZFwiKSIgJSBvcy5lbnZpcm9uLmdldCgnSE9NRScsJy90bXAvJykpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihiZS5idWlsZGRpcikgPT0gMCBhbmQgbGVuKHN1Z2dlc3RlZGRpcikgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYmUuYnVpbGRkaXIgPSBzdWdnZXN0ZWRkaXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGlmIGxlbihiZS5idWlsZGRpcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBidWlsZCBkaXJlY3RvcnkgbXVzdCBiZSBzZXQuIgorICAgICAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gX3VwZGF0ZV9idWlsZGRpcigpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYmUuYnVpbGRkaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4gLS0gVmFsaWRhdGlvbjogVGhlIGJ1aWxkIGRpcmVjdG9yeSBtdXN0IHRvIGJlIHNldCB0byBhbiBhYnNvbHV0ZSBwYXRoLiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfYnVpbGRkaXIoKQorCisKKyAgICAgICAgICAgICAgICBpZiBpc19jaGFuZ2VkOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5CdWlsZCBjb25maWd1cmF0aW9uIHNhdmVkIgorICAgICAgICAgICAgICAgICAgICBiZS5zYXZlKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgICAgICAgICAgICAgaWYgYmUubmVlZHNfaW1wb3J0OgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5Ub2FzdGVyIGNhbiB1c2UgYSBTSU5HTEUgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIGZpbGUgdG8gc2V0IHVwIGRlZmF1bHQgcHJvamVjdCBzZXR0aW5ncyBhbmQgbGF5ZXIgaW5mb3JtYXRpb24gc291cmNlcy5cbiIKKworICAgICAgICAgICAgICAgICAgICAjIGZpbmQgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgZGlybmFtZSBpbiBzZWxmLl9yZWN1cnNpdmVfbGlzdF9kaXJlY3RvcmllcyhiZS5zb3VyY2VkaXIsMik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGlybmFtZSwgIi50ZW1wbGF0ZWNvbmYiKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbignYmFzaCAtYyAiLiAnK29zLnBhdGguam9pbihkaXJuYW1lLCAiLnRlbXBsYXRlY29uZiIpKyc7IGVjaG8gXCJcJFRFTVBMQVRFQ09ORlwiIicsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVwYXRoLCBzdGRlcnJvcm91dHB1dCA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Mud2FpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvYy5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHNvdXJjZSBURU1QTEFURUNPTkY6ICVzIiAlIHN0ZGVycm9yb3V0cHV0KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVwYXRoID0gb3MucGF0aC5qb2luKGNvbmZmaWxlcGF0aC5zdHJpcCgpLCAidG9hc3RlcmNvbmYuanNvbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgY29uZmZpbGVwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJ0b2FzdGVyX2Nsb25lZCIgaW4gY2FuZGlkYXRlZmlsZXBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY2FuZGlkYXRlZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZXMuYXBwZW5kKGNhbmRpZGF0ZWZpbGVwYXRoKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihjb25maWdfZmlsZXMpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJUb2FzdGVyIHdpbGwgbGlzdCBub3cgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBpdCBmb3VuZC4gU2VsZWN0IHRoZSBudW1iZXIgdG8gdXNlIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2YgaW4gY29uZmlnX2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgIFslZF0gLSAlcyIgJSAoY29uZmlnX2ZpbGVzLmluZGV4KGNmKSArIDEsIGNmKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuICBbMF0gLSBFeGl0IHdpdGhvdXQgaW1wb3J0aW5nIGFueSBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gcmF3X2lucHV0KCJcbkVudGVyIHlvdXIgb3B0aW9uOiAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaSkgYW5kIChpbnQoaSkgLSAxID49IDAgYW5kIGludChpKSAtIDEgPCBsZW4oY29uZmlnX2ZpbGVzKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5JbXBvcnRpbmcgZmlsZTogJXMiICUgY29uZmlnX2ZpbGVzW2ludChpKS0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBsb2FkY29uZiBpbXBvcnQgQ29tbWFuZCBhcyBMb2FkQ29uZmlnQ29tbWFuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkQ29uZmlnQ29tbWFuZCgpLl9pbXBvcnRfbGF5ZXJfY29uZmlnKGNvbmZpZ19maWxlc1tpbnQoaSktMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHJ1biBsc3VwZGF0ZXMgYWZ0ZXIgY29uZmlnIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuTGF5ZXIgY29uZmlndXJhdGlvbiBpbXBvcnRlZC4gVXBkYXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgbGF5ZXIgc291cmNlcywgcGxlYXNlIHdhaXQuXG5Zb3UgY2FuIHJlLXVwZGF0ZSBhbnkgdGltZSBsYXRlciBieSBydW5uaW5nIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxzdXBkYXRlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudCBpbXBvcnQgY2FsbF9jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2NvbW1hbmQoImxzdXBkYXRlcyIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2NoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbHVyZSB3aGlsZSB0cnlpbmcgdG8gaW1wb3J0IHRoZSB0b2FzdGVyIGNvbmZpZyBmaWxlOiAlcyIgJSBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuVG9hc3RlciBjb3VsZCBub3QgZmluZCBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gWW91IG5lZWQgdG8gY29uZmlndXJlIFRvYXN0ZXIgbWFudWFsbHkgdXNpbmcgdGhlIHdlYiBpbnRlcmZhY2UsIG9yIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgdXNlXG4gIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlcHkucHkgbG9hZGNvbmYgW2ZpbGVuYW1lXVxuIGNvbW1hbmQgdG8gbG9hZCBpdC4gWW91IGNhbiB1c2UgaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoIGFzIGEgc3RhcnRpbmcgcG9pbnQuIgorCisKKworCisgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2NoYW5nZWQKKworICAgICAgICAgICAgd2hpbGUgKF92ZXJpZnlfYmUoKSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIF92ZXJpZnlfZGVmYXVsdF9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBkZWZhdWx0IHNldHRpbmdzIGFyZSB0aGVyZQorICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gJ0RFRkFVTFRfUkVMRUFTRScpLmNvdW50KCkgIT0gMToKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAnREVGQVVMVF9SRUxFQVNFJykuZGVsZXRlKCkKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lID0gJ0RFRkFVTFRfUkVMRUFTRScsIHZhbHVlID0gJycpCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgX3ZlcmlmeV9idWlsZHNfaW5fcHJvZ3Jlc3Moc2VsZik6CisgICAgICAgICMgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdXAuIHdlIG11c3Qgbm90IGhhdmUgYW55IGJ1aWxkcyBpbiBwcm9ncmVzcywgb3IgYnVpbGQgZW52aXJvbm1lbnRzIHRha2VuCisgICAgICAgIGZvciBiIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUyk6CisgICAgICAgICAgICBCUkVycm9yLm9iamVjdHMuY3JlYXRlKHJlcSA9IGIsIGVycnR5cGUgPSAidG9hc3RlciIsIGVycm1zZyA9ICJUb2FzdGVyIGZvdW5kIHRoaXMgYnVpbGQgSU4gUFJPR1JFU1Mgd2hpbGUgVG9hc3RlciBzdGFydGVkIHVwLiBUaGlzIGlzIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgYW5kIHRoZSBidWlsZCB3YXMgbWFya2VkIGFzIGZhaWxlZCIpCisKKyAgICAgICAgQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTKS51cGRhdGUoc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRCkKKworICAgICAgICBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMudXBkYXRlKGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSkKKworICAgICAgICAjIGFsc28gbWFyayAiSW4gUHJvZ3Jlc3MgYnVpbGRzIGFzIGZhaWx1cmVzIgorICAgICAgICBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKyAgICAgICAgQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKS51cGRhdGUob3V0Y29tZSA9IEJ1aWxkLkZBSUxFRCwgY29tcGxldGVkX29uID0gdGltZXpvbmUubm93KCkpCisKKyAgICAgICAgcmV0dXJuIDAKKworCisKKyAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgICAgICByZXR2YWwgPSAwCisgICAgICAgIHJldHZhbCArPSBzZWxmLl92ZXJpZnlfYnVpbGRfZW52aXJvbm1lbnQoKQorICAgICAgICByZXR2YWwgKz0gc2VsZi5fdmVyaWZ5X2RlZmF1bHRfc2V0dGluZ3MoKQorICAgICAgICByZXR2YWwgKz0gc2VsZi5fdmVyaWZ5X2J1aWxkc19pbl9wcm9ncmVzcygpCisKKyAgICAgICAgcmV0dXJuIHJldHZhbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9sb2FkY29uZi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvbG9hZGNvbmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyMmI1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvbG9hZGNvbmYucHkKQEAgLTAsMCArMSwxODMgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBCYXNlQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExheWVyU291cmNlLCBUb2FzdGVyU2V0dGluZywgQnJhbmNoLCBMYXllciwgTGF5ZXJfVmVyc2lvbgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCaXRiYWtlVmVyc2lvbiwgUmVsZWFzZSwgUmVsZWFzZURlZmF1bHRMYXllciwgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBJbnRlZ3JpdHlFcnJvcgoraW1wb3J0IG9zCisKK2Zyb20gY2hlY2tzZXR0aW5ncyBpbXBvcnQgRE4KKworaW1wb3J0IGxvZ2dpbmcKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVyIikKKworZGVmIF9yZWR1Y2VfY2Fub25fcGF0aChwYXRoKToKKyAgICBjb21wb25lbnRzID0gW10KKyAgICBmb3IgYyBpbiBwYXRoLnNwbGl0KCIvIik6CisgICAgICAgIGlmIGMgPT0gIi4uIjoKKyAgICAgICAgICAgIGRlbCBjb21wb25lbnRzWy0xXQorICAgICAgICBlbGlmIGMgPT0gIi4iOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tcG9uZW50cy5hcHBlbmQoYykKKyAgICBpZiBsZW4oY29tcG9uZW50cykgPCAyOgorICAgICAgICBjb21wb25lbnRzLmFwcGVuZCgnJykKKyAgICByZXR1cm4gIi8iLmpvaW4oY29tcG9uZW50cykKKworZGVmIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUocyk6CisgICAgZm9yIGkgaW4gTGF5ZXJTb3VyY2UuU09VUkNFX1RZUEU6CisgICAgICAgIGlmIHMgPT0gaVsxXToKKyAgICAgICAgICAgIHJldHVybiBpWzBdCisgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCBkZWZpbml0aW9uIGZvciBzb3VyY2V0eXBlICclcycuIFZhbGlkIHNvdXJjZSB0eXBlcyBhcmUgJXMiICUgKHN0cihzKSwgJywgJy5qb2luKG1hcChsYW1iZGEgeDogIiclcyciICUgeFsxXSwgTGF5ZXJTb3VyY2UuU09VUkNFX1RZUEUgKSkpKQorCitjbGFzcyBDb21tYW5kKEJhc2VDb21tYW5kKToKKyAgICBoZWxwID0gIkxvYWRzIGEgdG9hc3RlcmNvbmYuanNvbiBmaWxlIGluIHRoZSBkYXRhYmFzZSIKKyAgICBhcmdzID0gImZpbGVwYXRoIgorCisKKworICAgIGRlZiBfaW1wb3J0X2xheWVyX2NvbmZpZyhzZWxmLCBmaWxlcGF0aCk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCkgb3Igbm90IG9zLnBhdGguaXNmaWxlKGZpbGVwYXRoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGZpbmQgdG9hc3RlciBjb25maWcgZmlsZSAlcyAuIiAlIGZpbGVwYXRoKQorCisgICAgICAgIGltcG9ydCBqc29uCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKG9wZW4oZmlsZXBhdGgsICJyIikucmVhZCgpKQorCisgICAgICAgICMgdmVyaWZ5IGNvbmZpZyBmaWxlIHZhbGlkaXR5IGJlZm9yZSB1cGRhdGluZyBzZXR0aW5ncworICAgICAgICBmb3IgaSBpbiBbJ2JpdGJha2UnLCAncmVsZWFzZXMnLCAnZGVmYXVsdHJlbGVhc2UnLCAnY29uZmlnJywgJ2xheWVyc291cmNlcyddOgorICAgICAgICAgICAgYXNzZXJ0IGkgaW4gZGF0YQorCisgICAgICAgIGRlZiBfcmVhZF9naXRfdXJsX2Zyb21fbG9jYWxfcmVwb3NpdG9yeShhZGRyZXNzKToKKyAgICAgICAgICAgIHVybCA9IE5vbmUKKyAgICAgICAgICAgICMgd2UgZGV0ZWN0IHRoZSByZW1vdGUgbmFtZSBhdCBydW50aW1lCisgICAgICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICAgICAgKHJlbW90ZSwgcmVtb3RlX25hbWUpID0gYWRkcmVzcy5zcGxpdCgiOiIsIDEpCisgICAgICAgICAgICBjbWQgPSBzdWJwcm9jZXNzLlBvcGVuKCJnaXQgcmVtb3RlIC12Iiwgc2hlbGw9VHJ1ZSwgY3dkID0gb3MucGF0aC5kaXJuYW1lKGZpbGVwYXRoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyID0gc3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgKG91dCxlcnIpID0gY21kLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIGlmIGNtZC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJFcnJvciB3aGlsZSBpbXBvcnRpbmcgbGF5ZXIgdmNzX3VybDogZ2l0IGVycm9yOiAlcyIgJSBlcnIpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAobmFtZSwgcGF0aCkgPSBsaW5lLnNwbGl0KCJcdCIsIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gcmVtb3RlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBwYXRoLnNwbGl0KCIgIilbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIHVybCA9PSBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiRXJyb3Igd2hpbGUgbG9va2luZyBmb3IgcmVtb3RlIFwiJXNcIiBpbiBcIiVzXCIiICUgKHJlbW90ZV9uYW1lLCBvdXQpKQorICAgICAgICAgICAgcmV0dXJuIHVybAorCisKKyAgICAgICAgIyBpbXBvcnQgYml0YmFrZSBkYXRhCisgICAgICAgIGZvciBidmkgaW4gZGF0YVsnYml0YmFrZSddOgorICAgICAgICAgICAgYnZvLCBjcmVhdGVkID0gQml0YmFrZVZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWU9YnZpWyduYW1lJ10pCisgICAgICAgICAgICBpZiBidmlbJ2dpdHVybCddLnN0YXJ0c3dpdGgoInJlbW90ZToiKToKKyAgICAgICAgICAgICAgICBidm8uZ2l0dXJsID0gX3JlYWRfZ2l0X3VybF9mcm9tX2xvY2FsX3JlcG9zaXRvcnkoYnZpWydnaXR1cmwnXSkKKyAgICAgICAgICAgICAgICBpZiBidm8uZ2l0dXJsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIHRvYXN0ZXIgY29uZmlnIGZpbGUgcmVmZXJlbmNlcyB0aGUgbG9jYWwgZ2l0IHJlcG8sIGJ1dCBUb2FzdGVyIGNhbm5vdCBkZXRlY3QgaXQuXG5Zb3VyIGxvY2FsIGNvbmZpZ3VyYXRpb24gZm9yIGJpdGJha2UgdmVyc2lvbiAlcyBpcyBpbnZhbGlkLiBNYWtlIHN1cmUgdGhhdCB0aGUgdG9hc3RlcmNvbmYuanNvbiBmaWxlIGlzIGNvcnJlY3QuIiAlIGJ2aVsnbmFtZSddKQorCisgICAgICAgICAgICBpZiBidm8uZ2l0dXJsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYnZvLmdpdHVybCA9IGJ2aVsnZ2l0dXJsJ10KKyAgICAgICAgICAgIGJ2by5icmFuY2ggPSBidmlbJ2JyYW5jaCddCisgICAgICAgICAgICBidm8uZGlycGF0aCA9IGJ2aVsnZGlycGF0aCddCisgICAgICAgICAgICBidm8uc2F2ZSgpCisKKyAgICAgICAgIyBzZXQgdGhlIGxheWVyIHNvdXJjZXMKKyAgICAgICAgZm9yIGxzaSBpbiBkYXRhWydsYXllcnNvdXJjZXMnXToKKyAgICAgICAgICAgIGFzc2VydCAnc291cmNldHlwZScgaW4gbHNpCisgICAgICAgICAgICBhc3NlcnQgJ2FwaXVybCcgaW4gbHNpCisgICAgICAgICAgICBhc3NlcnQgJ25hbWUnIGluIGxzaQorICAgICAgICAgICAgYXNzZXJ0ICdicmFuY2hlcycgaW4gbHNpCisKKworICAgICAgICAgICAgaWYgX2dldF9pZF9mb3Jfc291cmNldHlwZShsc2lbJ3NvdXJjZXR5cGUnXSkgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYIG9yIGxzaVsnYXBpdXJsJ10uc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIGFwaXVybCA9IGxzaVsnYXBpdXJsJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXBpdXJsID0gX3JlZHVjZV9jYW5vbl9wYXRoKG9zLnBhdGguam9pbihETihvcy5wYXRoLmFic3BhdGgoZmlsZXBhdGgpKSwgbHNpWydhcGl1cmwnXSkpCisKKyAgICAgICAgICAgIGFzc2VydCAoKF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUobHNpWydzb3VyY2V0eXBlJ10pID09IExheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWCkgb3IgYXBpdXJsLnN0YXJ0c3dpdGgoIi8iKSksIChsc2lbJ3NvdXJjZXR5cGUnXSxhcGl1cmwpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBscywgY3JlYXRlZCA9IExheWVyU291cmNlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShzb3VyY2V0eXBlID0gX2dldF9pZF9mb3Jfc291cmNldHlwZShsc2lbJ3NvdXJjZXR5cGUnXSksIGFwaXVybCA9IGFwaXVybCkKKyAgICAgICAgICAgICAgICBscy5uYW1lID0gbHNpWyduYW1lJ10KKyAgICAgICAgICAgICAgICBscy5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlZ3JpdHlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJJbnRlZ3JpdHlFcnJvciAlcyBcbldoaWxlIHNldHRpbmcgbmFtZSAlcyBmb3IgbGF5ZXIgc291cmNlICVzICIgJSAoZSwgbHNpWyduYW1lJ10sIGxzKSkKKworCisgICAgICAgICAgICBsYXllcmJyYW5jaGVzID0gW10KKyAgICAgICAgICAgIGZvciBicmFuY2huYW1lIGluIGxzaVsnYnJhbmNoZXMnXToKKyAgICAgICAgICAgICAgICBibywgY3JlYXRlZCA9IEJyYW5jaC5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gbHMsIG5hbWUgPSBicmFuY2huYW1lKQorICAgICAgICAgICAgICAgIGxheWVyYnJhbmNoZXMuYXBwZW5kKGJvKQorCisgICAgICAgICAgICBpZiAnbGF5ZXJzJyBpbiBsc2k6CisgICAgICAgICAgICAgICAgZm9yIGxheWVyaW5mbyBpbiBsc2lbJ2xheWVycyddOgorICAgICAgICAgICAgICAgICAgICBsbywgY3JlYXRlZCA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBscywgbmFtZSA9IGxheWVyaW5mb1snbmFtZSddKQorICAgICAgICAgICAgICAgICAgICBpZiBsYXllcmluZm9bJ2xvY2FsX3BhdGgnXS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgICAgICAgICBsby5sb2NhbF9wYXRoID0gbGF5ZXJpbmZvWydsb2NhbF9wYXRoJ10KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvLmxvY2FsX3BhdGggPSBfcmVkdWNlX2Nhbm9uX3BhdGgob3MucGF0aC5qb2luKGxzLmFwaXVybCwgbGF5ZXJpbmZvWydsb2NhbF9wYXRoJ10pKQorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsby5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTG9jYWwgbGF5ZXIgcGF0aCAlcyBtdXN0IGV4aXN0cy4gQXJlIHlvdSB0cnlpbmcgdG8gaW1wb3J0IGEgbGF5ZXIgdGhhdCBkb2VzIG5vdCBleGlzdCA/IENoZWNrIHlvdXIgbG9jYWwgdG9hc3RlcmNvbmYuanNvbiIgJSBsby5sb2NhbF9wYXRoKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxheWVyaW5mb1sndmNzX3VybCddLnN0YXJ0c3dpdGgoInJlbW90ZToiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvLnZjc191cmwgPSBfcmVhZF9naXRfdXJsX2Zyb21fbG9jYWxfcmVwb3NpdG9yeShsYXllcmluZm9bJ3Zjc191cmwnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvLnZjc191cmwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSB0b2FzdGVyIGNvbmZpZyBmaWxlIHJlZmVyZW5jZXMgdGhlIGxvY2FsIGdpdCByZXBvLCBidXQgVG9hc3RlciBjYW5ub3QgZGV0ZWN0IGl0LlxuWW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZvciBsYXllciAlcyBpcyBpbnZhbGlkLiBNYWtlIHN1cmUgdGhhdCB0aGUgdG9hc3RlcmNvbmYuanNvbiBmaWxlIGlzIGNvcnJlY3QuIiAlIGxheWVyaW5mb1snbmFtZSddKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxvLnZjc191cmwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvLnZjc191cmwgPSBsYXllcmluZm9bJ3Zjc191cmwnXQorCisgICAgICAgICAgICAgICAgICAgIGlmICdsYXllcl9pbmRleF91cmwnIGluIGxheWVyaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvLmxheWVyX2luZGV4X3VybCA9IGxheWVyaW5mb1snbGF5ZXJfaW5kZXhfdXJsJ10KKyAgICAgICAgICAgICAgICAgICAgbG8uc2F2ZSgpCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBsYXllcmJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbHZvLCBjcmVhdGVkID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwX2JyYW5jaCA9IGJyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0ID0gYnJhbmNoLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyID0gbG8pCisgICAgICAgICAgICAgICAgICAgICAgICBsdm8uZGlycGF0aCA9IGxheWVyaW5mb1snZGlycGF0aCddCisgICAgICAgICAgICAgICAgICAgICAgICBsdm8uc2F2ZSgpCisgICAgICAgICMgc2V0IHJlbGVhc2VzCisgICAgICAgIGZvciByaSBpbiBkYXRhWydyZWxlYXNlcyddOgorICAgICAgICAgICAgYnZvID0gQml0YmFrZVZlcnNpb24ub2JqZWN0cy5nZXQobmFtZSA9IHJpWydiaXRiYWtlJ10pCisgICAgICAgICAgICBhc3NlcnQgYnZvIGlzIG5vdCBOb25lCisKKyAgICAgICAgICAgIHJvLCBjcmVhdGVkID0gUmVsZWFzZS5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZSA9IHJpWyduYW1lJ10sIGJpdGJha2VfdmVyc2lvbiA9IGJ2bywgYnJhbmNoX25hbWUgPSByaVsnYnJhbmNoJ10pCisgICAgICAgICAgICByby5kZXNjcmlwdGlvbiA9IHJpWydkZXNjcmlwdGlvbiddCisgICAgICAgICAgICByby5oZWxwdGV4dCA9IHJpWydoZWxwdGV4dCddCisgICAgICAgICAgICByby5zYXZlKCkKKworICAgICAgICAgICAgIyBzYXZlIGxheWVyIHNvdXJjZSBwcmlvcml0eSBmb3IgcmVsZWFzZQorICAgICAgICAgICAgZm9yIGxzX25hbWUgaW4gcmlbJ2xheWVyc291cmNlcHJpb3JpdHknXS5rZXlzKCk6CisgICAgICAgICAgICAgICAgcmxzcG8sIGNyZWF0ZWQgPSBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eS5vYmplY3RzLmdldF9vcl9jcmVhdGUocmVsZWFzZSA9IHJvLCBsYXllcl9zb3VyY2UgPSBMYXllclNvdXJjZS5vYmplY3RzLmdldChuYW1lPWxzX25hbWUpKQorICAgICAgICAgICAgICAgIHJsc3BvLnByaW9yaXR5ID0gcmlbJ2xheWVyc291cmNlcHJpb3JpdHknXVtsc19uYW1lXQorICAgICAgICAgICAgICAgIHJsc3BvLnNhdmUoKQorCisgICAgICAgICAgICBmb3IgZGxpIGluIHJpWydkZWZhdWx0bGF5ZXJzJ106CisgICAgICAgICAgICAgICAgIyBmaW5kIGxheWVycyB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgICAgICAgICBSZWxlYXNlRGVmYXVsdExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZSggcmVsZWFzZSA9IHJvLCBsYXllcl9uYW1lID0gZGxpKQorCisgICAgICAgICMgc2V0IGRlZmF1bHQgcmVsZWFzZQorICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gIkRFRkFVTFRfUkVMRUFTRSIpLmNvdW50KCkgPiAwOgorICAgICAgICAgICAgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZSA9ICJERUZBVUxUX1JFTEVBU0UiKS51cGRhdGUodmFsdWUgPSBkYXRhWydkZWZhdWx0cmVsZWFzZSddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgVG9hc3RlclNldHRpbmcub2JqZWN0cy5jcmVhdGUobmFtZSA9ICJERUZBVUxUX1JFTEVBU0UiLCB2YWx1ZSA9IGRhdGFbJ2RlZmF1bHRyZWxlYXNlJ10pCisKKyAgICAgICAgIyBzZXQgZGVmYXVsdCBjb25maWcgdmFyaWFibGVzCisgICAgICAgIGZvciBjb25maWduYW1lIGluIGRhdGFbJ2NvbmZpZyddOgorICAgICAgICAgICAgaWYgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZSA9ICJERUZDT05GXyIgKyBjb25maWduYW1lKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gIkRFRkNPTkZfIiArIGNvbmZpZ25hbWUpLnVwZGF0ZSh2YWx1ZSA9IGRhdGFbJ2NvbmZpZyddW2NvbmZpZ25hbWVdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmNyZWF0ZShuYW1lID0gIkRFRkNPTkZfIiArIGNvbmZpZ25hbWUsIHZhbHVlID0gZGF0YVsnY29uZmlnJ11bY29uZmlnbmFtZV0pCisKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgKmFyZ3MsICoqb3B0aW9ucyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgQ29tbWFuZEVycm9yKCJOZWVkIGEgcGF0aCB0byB0aGUgdG9hc3RlcmNvbmYuanNvbiBmaWxlIikKKyAgICAgICAgZmlsZXBhdGggPSBhcmdzWzBdCisgICAgICAgIHNlbGYuX2ltcG9ydF9sYXllcl9jb25maWcoZmlsZXBhdGgpCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL3J1bmJ1aWxkcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvcnVuYnVpbGRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGUxNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL3J1bmJ1aWxkcy5weQpAQCAtMCwwICsxLDEzMyBAQAorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IE5vQXJnc0NvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IHRyYW5zYWN0aW9uCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkLCBUb2FzdGVyU2V0dGluZywgTG9nTWVzc2FnZSwgVGFyZ2V0Citmcm9tIGJsZGNvbnRyb2wuYmJjb250cm9sbGVyIGltcG9ydCBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciwgU2hlbGxDbWRFeGNlcHRpb24sIEJ1aWxkU2V0dXBFeGNlcHRpb24KK2Zyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdCwgQnVpbGRFbnZpcm9ubWVudCwgQlJFcnJvciwgQlJWYXJpYWJsZQoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiVG9hc3RlclNjaGVkdWxlciIpCisKK2NsYXNzIENvbW1hbmQoTm9BcmdzQ29tbWFuZCk6CisgICAgYXJncyAgICA9ICIiCisgICAgaGVscCAgICA9ICJTY2hlZHVsZXMgYW5kIGV4ZWN1dGVzIGJ1aWxkIHJlcXVlc3RzIGFzIHBvc3NpYmxlLiBEb2VzIG5vdCByZXR1cm4gKGludGVycnVwdCB3aXRoIEN0cmwtQykiCisKKworICAgIEB0cmFuc2FjdGlvbi5jb21taXRfb25fc3VjY2VzcworICAgIGRlZiBfc2VsZWN0QnVpbGRFbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgYmVjID0gZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIobG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFKQorICAgICAgICBiZWMuYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19MT0NLCisgICAgICAgIGJlYy5iZS5zYXZlKCkKKyAgICAgICAgcmV0dXJuIGJlYworCisgICAgQHRyYW5zYWN0aW9uLmNvbW1pdF9vbl9zdWNjZXNzCisgICAgZGVmIF9zZWxlY3RCdWlsZFJlcXVlc3Qoc2VsZik6CisgICAgICAgIGJyID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9RVUVVRUQpLm9yZGVyX2J5KCdwaycpWzBdCisgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTCisgICAgICAgIGJyLnNhdmUoKQorICAgICAgICByZXR1cm4gYnIKKworICAgIGRlZiBzY2hlZHVsZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cnk6CisgICAgICAgICAgICBiciA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHNlbGVjdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIHRoZSByZXF1ZXN0IHRvIGJ1aWxkCisgICAgICAgICAgICAgICAgYnIgPSBzZWxmLl9zZWxlY3RCdWlsZFJlcXVlc3QoKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAjbG9nZ2VyLmRlYnVnKCJydW5idWlsZHM6IE5vIGJ1aWxkIHJlcXVlc3QiKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJlYyA9IHNlbGYuX3NlbGVjdEJ1aWxkRW52aXJvbm1lbnQoKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAjIHdlIGNvdWxkIG5vdCBmaW5kIGEgQkVDOyBwb3N0cG9uZSB0aGUgQlIKKyAgICAgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVECisgICAgICAgICAgICAgICAgYnIuc2F2ZSgpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJydW5idWlsZHM6IE5vIGJ1aWxkIGVudiIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygicnVuYnVpbGRzOiBzdGFydGluZyBidWlsZCAlcywgZW52aXJvbm1lbnQgJXMiICUgKGJyLCBiZWMuYmUpKQorCisgICAgICAgICAgICAjIHdyaXRlIHRoZSBidWlsZCBpZGVudGlmaWNhdGlvbiB2YXJpYWJsZQorICAgICAgICAgICAgQlJWYXJpYWJsZS5vYmplY3RzLmNyZWF0ZShyZXEgPSBiciwgbmFtZT0iVE9BU1RFUl9CUkJFIiwgdmFsdWU9IiVkOiVkIiAlIChici5waywgYmVjLmJlLnBrKSkKKworICAgICAgICAgICAgIyBsZXQgdGhlIGJ1aWxkIHJlcXVlc3Qga25vdyB3aGVyZSBpdCBpcyBiZWluZyBleGVjdXRlZAorICAgICAgICAgICAgYnIuZW52aXJvbm1lbnQgPSBiZWMuYmUKKyAgICAgICAgICAgIGJyLnNhdmUoKQorCisgICAgICAgICAgICAjIHRoaXMgdHJpZ2dlcnMgYW4gYXN5bmMgYnVpbGQKKyAgICAgICAgICAgIGJlYy50cmlnZ2VyQnVpbGQoYnIuYnJiaXRiYWtlX3NldC5hbGwoKSwgYnIuYnJsYXllcl9zZXQuYWxsKCksIGJyLmJydmFyaWFibGVfc2V0LmFsbCgpLCBici5icnRhcmdldF9zZXQuYWxsKCkpCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJydW5idWlsZHM6IEVycm9yIGxhdW5jaGluZyBidWlsZCAlcyIgJSBlKQorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhlKQorICAgICAgICAgICAgaWYgIltFcnJubyAxMTFdIENvbm5lY3Rpb24gcmVmdXNlZCIgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICMgQ29ubmVjdGlvbiByZWZ1c2VkLCByZWFkIHRvYXN0ZXJfc2VydmVyLm91dAorICAgICAgICAgICAgICAgIGVycm1zZyA9IGJlYy5yZWFkU2VydmVyTG9nRmlsZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVycm1zZyA9IHN0cihlKQorCisgICAgICAgICAgICBCUkVycm9yLm9iamVjdHMuY3JlYXRlKHJlcSA9IGJyLAorICAgICAgICAgICAgICAgICAgICBlcnJ0eXBlID0gc3RyKHR5cGUoZSkpLAorICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSBlcnJtc2csCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRAorICAgICAgICAgICAgYnIuc2F2ZSgpCisgICAgICAgICAgICBiZWMuYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFCisgICAgICAgICAgICBiZWMuYmUuc2F2ZSgpCisKKyAgICBkZWYgYXJjaGl2ZShzZWxmKToKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfQVJDSElWRSk6CisgICAgICAgICAgICBpZiBici5idWlsZCA9PSBOb25lOgorICAgICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0NPTVBMRVRFRAorICAgICAgICAgICAgYnIuc2F2ZSgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisgICAgICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQorICAgICAgICAjIGVudmlyb25tZW50cyBsb2NrZWQgZm9yIG1vcmUgdGhhbiAzMCBzZWNvbmRzIC0gdGhleSBzaG91bGQgYmUgdW5sb2NrZWQKKyAgICAgICAgQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmZpbHRlcihidWlsZHJlcXVlc3RfX3N0YXRlX19pbj1bQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQsIEJ1aWxkUmVxdWVzdC5SRVFfQ09NUExFVEVEXSkuZmlsdGVyKGxvY2s9QnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0spLmZpbHRlcih1cGRhdGVkX19sdCA9IHRpbWV6b25lLm5vdygpIC0gdGltZWRlbHRhKHNlY29uZHMgPSAzMCkpLnVwZGF0ZShsb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUpCisKKworICAgICAgICAjIHVwZGF0ZSBhbGwgQnVpbGRzIHRoYXQgZmFpbGVkIHRvIHN0YXJ0CisKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVELCBidWlsZF9fb3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKToKKyAgICAgICAgICAgICMgdHJhbnNwb3NlIHRoZSBsYXVuY2ggZXJyb3JzIGluIFRvYXN0ZXJFeGNlcHRpb25zCisgICAgICAgICAgICBici5idWlsZC5vdXRjb21lID0gQnVpbGQuRkFJTEVECisgICAgICAgICAgICBmb3IgYnJlcnJvciBpbiBici5icmVycm9yX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlNhdmluZyBlcnJvciAlcyIgJSBicmVycm9yKQorICAgICAgICAgICAgICAgIExvZ01lc3NhZ2Uub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgbGV2ZWwgPSBMb2dNZXNzYWdlLkVYQ0VQVElPTiwgbWVzc2FnZSA9IGJyZXJyb3IuZXJybXNnKQorICAgICAgICAgICAgYnIuYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSBhIHRydWUgYnVpbGQgb2JqZWN0IGhlcmU7IGhlbmNlLCB0b2FzdGVydWkgZGlkbid0IGhhdmUgYSBjaGFuZ2UgdG8gcmVsZWFzZSB0aGUgQkUgbG9jaworICAgICAgICAgICAgYnIuZW52aXJvbm1lbnQubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFCisgICAgICAgICAgICBici5lbnZpcm9ubWVudC5zYXZlKCkKKworCisKKyAgICAgICAgIyB1cGRhdGUgYWxsIEJ1aWxkUmVxdWVzdHMgd2l0aG91dCBhIGJ1aWxkIGNyZWF0ZWQKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihidWlsZCA9IE5vbmUpOgorICAgICAgICAgICAgYnIuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0ID0gYnIucHJvamVjdCwgY29tcGxldGVkX29uID0gYnIudXBkYXRlZCwgc3RhcnRlZF9vbiA9IGJyLmNyZWF0ZWQpCisgICAgICAgICAgICBici5idWlsZC5vdXRjb21lID0gQnVpbGQuRkFJTEVECisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnIuYnVpbGQubWFjaGluZSA9IGJyLmJydmFyaWFibGVfc2V0LmdldChuYW1lPSdNQUNISU5FJykudmFsdWUKKyAgICAgICAgICAgIGV4Y2VwdCBCUlZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgICMgdHJhbnNwb3NlIHRhcmdldCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgZm9yIGJydGFyZ2V0IGluIGJyLmJydGFyZ2V0X3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBUYXJnZXQub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgdGFyZ2V0PSBicnRhcmdldC50YXJnZXQpCisgICAgICAgICAgICAjIHRyYW5zcG9zZSB0aGUgbGF1bmNoIGVycm9ycyBpbiBUb2FzdGVyRXhjZXB0aW9ucworICAgICAgICAgICAgZm9yIGJyZXJyb3IgaW4gYnIuYnJlcnJvcl9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgTG9nTWVzc2FnZS5vYmplY3RzLmNyZWF0ZShidWlsZCA9IGJyLmJ1aWxkLCBsZXZlbCA9IExvZ01lc3NhZ2UuRVhDRVBUSU9OLCBtZXNzYWdlID0gYnJlcnJvci5lcnJtc2cpCisKKyAgICAgICAgICAgIGJyLmJ1aWxkLnNhdmUoKQorICAgICAgICBwYXNzCisKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsICoqb3B0aW9ucyk6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisgICAgICAgIHNlbGYuYXJjaGl2ZSgpCisgICAgICAgIHNlbGYuc2NoZWR1bGUoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDFfaW5pdGlhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2U2MzUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkKQEAgLTAsMCArMSwxNTQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCdWlsZEVudmlyb25tZW50JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2J1aWxkZW52aXJvbm1lbnQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYWRkcmVzcycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2JldHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdiYmFkZHJlc3MnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdiYnBvcnQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PS0xKSksCisgICAgICAgICAgICAoJ2JidG9rZW4nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEyNiwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdiYnN0YXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2xvY2snLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQnVpbGRFbnZpcm9ubWVudCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCdWlsZFJlcXVlc3QnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3Byb2plY3QnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10pKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnc3RhdGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQnVpbGRSZXF1ZXN0J10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JSTGF5ZXInCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2dpdHVybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2NvbW1pdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSTGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJWYXJpYWJsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9icnZhcmlhYmxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlcScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSVmFyaWFibGUnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJUYXJnZXQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ0YXJnZXQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVxJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3Rhc2snLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSVGFyZ2V0J10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQnVpbGRFbnZpcm9ubWVudCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCdWlsZFJlcXVlc3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCUkxheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdibGRjb250cm9sX2JybGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0JSVmFyaWFibGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ2YXJpYWJsZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJUYXJnZXQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ0YXJnZXQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudF9zb3VyY2VkaXJfX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAyX2F1dG9fX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50X3NvdXJjZWRpcl9fYWRkX2ZpZWxkX2J1aWxkZW52aXJvbm1lbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyMmE1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudF9zb3VyY2VkaXJfX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50LnB5CkBAIC0wLDAgKzEsMTA2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGRFbnZpcm9ubWVudC5zb3VyY2VkaXInCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdibGRjb250cm9sX2J1aWxkZW52aXJvbm1lbnQnLCAnc291cmNlZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUxMiwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZEVudmlyb25tZW50LmJ1aWxkZGlyJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgJ2J1aWxkZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUxMiwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkRW52aXJvbm1lbnQuc291cmNlZGlyJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgJ3NvdXJjZWRpcicpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGRFbnZpcm9ubWVudC5idWlsZGRpcicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRlbnZpcm9ubWVudCcsICdidWlsZGRpcicpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAzX2F1dG9fX2FkZF9maWVsZF9icmxheWVyX2RpcnBhdGgucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDNfYXV0b19fYWRkX2ZpZWxkX2JybGF5ZXJfZGlycGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJhODM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAzX2F1dG9fX2FkZF9maWVsZF9icmxheWVyX2RpcnBhdGgucHkKQEAgLTAsMCArMSw5OSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0JSTGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J2JsZGNvbnRyb2xfYnJsYXllcicsICdkaXJwYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTI1NCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0JSTGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnJsYXllcicsICdkaXJwYXRoJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDRfbG9hZGluaXRpYWxkYXRhLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA0X2xvYWRpbml0aWFsZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTA4NTc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA0X2xvYWRpbml0aWFsZGF0YS5weQpAQCAtMCwwICsxLDEwNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgRGF0YU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCitjbGFzcyBNaWdyYXRpb24oRGF0YU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIldyaXRlIHlvdXIgZm9yd2FyZHMgbWV0aG9kcyBoZXJlLiIKKyAgICAgICAgIyBOb3RlOiBEb24ndCB1c2UgImZyb20gYXBwbmFtZS5tb2RlbHMgaW1wb3J0IE1vZGVsTmFtZSIuCisgICAgICAgICMgVXNlIG9ybS5Nb2RlbE5hbWUgdG8gcmVmZXIgdG8gbW9kZWxzIGluIHRoaXMgYXBwbGljYXRpb24sCisgICAgICAgICMgYW5kIG9ybVsnYXBwbmFtZS5Nb2RlbE5hbWUnXSBmb3IgbW9kZWxzIGluIG90aGVyIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3JtLkJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5nZXQocGsgPSAxKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKyAgICAgICAgICAgIG9ybS5CdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKHBrID0gMSwKKyAgICAgICAgICAgICAgICBjcmVhdGVkID0gdGltZXpvbmUubm93KCksCisgICAgICAgICAgICAgICAgdXBkYXRlZCA9IHRpbWV6b25lLm5vdygpLAorICAgICAgICAgICAgICAgIGJldHlwZSA9IDApCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNV9hdXRvX19hZGRfYnJlcnJvci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNV9hdXRvX19hZGRfYnJlcnJvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGFlYjQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF9icmVycm9yLnB5CkBAIC0wLDAgKzEsMTEyIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJFcnJvcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmVycm9yJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlcScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSkpLAorICAgICAgICAgICAgKCdlcnJ0eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZXJybXNnJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSksCisgICAgICAgICAgICAoJ3RyYWNlYmFjaycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUkVycm9yJ10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJFcnJvcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmVycm9yJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ2JsZGNvbnRyb2wnXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfYnJiaXRiYWtlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA2X2F1dG9fX2FkZF9icmJpdGJha2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzODhmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfYnJiaXRiYWtlLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJCaXRiYWtlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2JyYml0YmFrZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10sIHVuaXF1ZT1UcnVlKSksCisgICAgICAgICAgICAoJ2dpdHVybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2NvbW1pdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2RpcnBhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUkJpdGJha2UnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCUkJpdGJha2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJiaXRiYWtlJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJiaXRiYWtlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSQml0YmFrZSd9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIiwgJ3VuaXF1ZSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmVycm9yJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSRXJyb3InfSwKKyAgICAgICAgICAgICdlcnJtc2cnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZXJydHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0cmFjZWJhY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2ZpZWxkX2J1aWxkcmVxdWVzdF9lbnZpcm9ubWVudF9fY2hnX2ZpZWxkX2J1aWxkcmVxdWVzdF9idWlsZC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwN19hdXRvX19hZGRfZmllbGRfYnVpbGRyZXF1ZXN0X2Vudmlyb25tZW50X19jaGdfZmllbGRfYnVpbGRyZXF1ZXN0X2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjc3YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2ZpZWxkX2J1aWxkcmVxdWVzdF9lbnZpcm9ubWVudF9fY2hnX2ZpZWxkX2J1aWxkcmVxdWVzdF9idWlsZC5weQpAQCAtMCwwICsxLDE0NSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5lbnZpcm9ubWVudCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2Vudmlyb25tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRFbnZpcm9ubWVudCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5idWlsZCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZHJlcXVlc3QnLCAnYnVpbGRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLk9uZVRvT25lRmllbGQnKSh0bz1vcm1bJ29ybS5CdWlsZCddLCB1bmlxdWU9VHJ1ZSwgbnVsbD1UcnVlKSkKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0J1aWxkUmVxdWVzdCcsIGZpZWxkcyBbJ2J1aWxkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgWydidWlsZF9pZCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0J1aWxkUmVxdWVzdCcsIGZpZWxkcyBbJ2J1aWxkJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgWydidWlsZF9pZCddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5lbnZpcm9ubWVudCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2Vudmlyb25tZW50X2lkJykKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5idWlsZCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZHJlcXVlc3QnLCAnYnVpbGRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddLCBudWxsPVRydWUpKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJiaXRiYWtlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSQml0YmFrZSd9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIiwgJ3VuaXF1ZSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmVycm9yJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSRXJyb3InfSwKKyAgICAgICAgICAgICdlcnJtc2cnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZXJydHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0cmFjZWJhY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5PbmVUb09uZUZpZWxkJywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAndW5pcXVlJzogJ1RydWUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Vudmlyb25tZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkRW52aXJvbm1lbnQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ2JsZGNvbnRyb2wnXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwOF9icmFyY2hpdmUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDhfYnJhcmNoaXZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDY5NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDhfYnJhcmNoaXZlLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBEYXRhTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKK2NsYXNzIE1pZ3JhdGlvbihEYXRhTWlncmF0aW9uKToKKyAgICAjIGlkcyB0aGF0IGNhbm5vdCBiZSBpbXBvcnRlZCBmcm9tIEJ1aWxkUmVxdWVzdAorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgIFJFUV9DT01QTEVURUQgPSAzCisgICAgICAgIFJFUV9BUkNISVZFID0gNgorICAgICAgICAiV3JpdGUgeW91ciBmb3J3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICAjIE5vdGU6IERvbid0IHVzZSAiZnJvbSBhcHBuYW1lLm1vZGVscyBpbXBvcnQgTW9kZWxOYW1lIi4KKyAgICAgICAgIyBVc2Ugb3JtLk1vZGVsTmFtZSB0byByZWZlciB0byBtb2RlbHMgaW4gdGhpcyBhcHBsaWNhdGlvbiwKKyAgICAgICAgIyBhbmQgb3JtWydhcHBuYW1lLk1vZGVsTmFtZSddIGZvciBtb2RlbHMgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorICAgICAgICBvcm0uQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlPVJFUV9DT01QTEVURUQpLnVwZGF0ZShzdGF0ZT1SRVFfQVJDSElWRSkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgUkVRX0NPTVBMRVRFRCA9IDMKKyAgICAgICAgUkVRX0FSQ0hJVkUgPSA2CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICBvcm0uQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlPVJFUV9BUkNISVZFKS51cGRhdGUoc3RhdGU9UkVRX0NPTVBMRVRFRCkKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJyYml0YmFrZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkJpdGJha2UnfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSIsICd1bmlxdWUnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuT25lVG9PbmVGaWVsZCcsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ3VuaXF1ZSc6ICdUcnVlJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbnZpcm9ubWVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZEVudmlyb25tZW50J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tb2RlbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxZGU1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21vZGVscy5weQpAQCAtMCwwICsxLDE2NCBAQAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworZnJvbSBkamFuZ28uY29yZS52YWxpZGF0b3JzIGltcG9ydCBNYXhWYWx1ZVZhbGlkYXRvciwgTWluVmFsdWVWYWxpZGF0b3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdExheWVyLCBQcm9qZWN0VmFyaWFibGUsIFByb2plY3RUYXJnZXQsIEJ1aWxkCisKKyMgYSBCdWlsZEVudmlyb25tZW50IGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSAiYnVpbGQvIiBkaXJlY3Rvcnkgb24gdGhlIGxvY2FsaG9zdAorY2xhc3MgQnVpbGRFbnZpcm9ubWVudChtb2RlbHMuTW9kZWwpOgorICAgIFNFUlZFUl9TVE9QUEVEID0gMAorICAgIFNFUlZFUl9TVEFSVEVEID0gMQorICAgIFNFUlZFUl9TVEFURSA9ICgKKyAgICAgICAgKFNFUlZFUl9TVE9QUEVELCAic3RvcHBlZCIpLAorICAgICAgICAoU0VSVkVSX1NUQVJURUQsICJzdGFydGVkIiksCisgICAgKQorCisgICAgVFlQRV9MT0NBTCA9IDAKKyAgICBUWVBFX1NTSCAgID0gMQorICAgIFRZUEUgPSAoCisgICAgICAgIChUWVBFX0xPQ0FMLCAibG9jYWwiKSwKKyAgICAgICAgKFRZUEVfU1NILCAic3NoIiksCisgICAgKQorCisgICAgTE9DS19GUkVFID0gMAorICAgIExPQ0tfTE9DSyA9IDEKKyAgICBMT0NLX1JVTk5JTkcgPSAyCisgICAgTE9DS19TVEFURSA9ICgKKyAgICAgICAgKExPQ0tfRlJFRSwgImZyZWUiKSwKKyAgICAgICAgKExPQ0tfTE9DSywgImxvY2siKSwKKyAgICAgICAgKExPQ0tfUlVOTklORywgInJ1bm5pbmciKSwKKyAgICApCisKKyAgICBhZGRyZXNzICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBiZXR5cGUgICAgICA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcyA9IFRZUEUpCisgICAgYmJhZGRyZXNzICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQsIGJsYW5rID0gVHJ1ZSkKKyAgICBiYnBvcnQgICAgICA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdCA9IC0xKQorICAgIGJidG9rZW4gICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0gMTI2LCBibGFuayA9IFRydWUpCisgICAgYmJzdGF0ZSAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBTRVJWRVJfU1RBVEUsIGRlZmF1bHQgPSBTRVJWRVJfU1RPUFBFRCkKKyAgICBzb3VyY2VkaXIgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDUxMiwgYmxhbmsgPSBUcnVlKQorICAgIGJ1aWxkZGlyICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0gNTEyLCBibGFuayA9IFRydWUpCisgICAgbG9jayAgICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBMT0NLX1NUQVRFLCBkZWZhdWx0ID0gTE9DS19GUkVFKQorICAgIGNyZWF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkID0gVHJ1ZSkKKyAgICB1cGRhdGVkICAgICA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93ID0gVHJ1ZSkKKworCisgICAgZGVmIGdldF9hcnRpZmFjdF90eXBlKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IG1hZ2ljCisKKyAgICAgICAgICAgICAgICAjIGZhaXIgd2FybmluZzogdGhpcyBpcyBhIG1lc3M7IHRoZXJlIGFyZSBtdWx0aXBsZSBjb21wZXRlaW5nIGFuZCBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAjIG1hZ2ljIG1vZHVsZXMgZmxvYXRpbmcgYXJvdW5kLCBzbyB3ZSB0cnkgc29tZSBvZiB0aGUgbW9zdCBjb21tb24gY29tYmluYXRpb25zCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHVidW50dSdzIHB5dGhvbi1tYWdpYyA1LjQKKyAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLm9wZW4obWFnaWMuTUFHSUNfTUlNRV9UWVBFKQorICAgICAgICAgICAgICAgICAgICBtLmxvYWQoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHB5dGhvbi1tYWdpYyAwLjQuNgorICAgICAgICAgICAgICAgICAgICBtID0gbWFnaWMuTWFnaWMobWFnaWMuTUFHSUNfTUlNRSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uZnJvbV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHBpcCBmaWxlbWFnaWMgMS42CisgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5NYWdpYyhmbGFncz1tYWdpYy5NQUdJQ19NSU1FX1RZUEUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmlkX2ZpbGVuYW1lKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICByZXR1cm4gImJpbmFyeS9vY3RldC1zdHJlYW0iCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBhcnRpZmFjdCB0eXBlIG5vdCBpbXBsZW1lbnRlZCBmb3IgYnVpbGQgZW52aXJvbm1lbnQgdHlwZSAlcyIgJSBzZWxmLmdldF9iZXR5cGVfZGlzcGxheSgpKQorCisKKyAgICBkZWYgZ2V0X2FydGlmYWN0KHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICByZXR1cm4gb3BlbihwYXRoLCAiciIpCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IGFydGlmYWN0IGRvd25sb2FkIG5vdCBpbXBsZW1lbnRlZCBmb3IgYnVpbGQgZW52aXJvbm1lbnQgdHlwZSAlcyIgJSBzZWxmLmdldF9iZXR5cGVfZGlzcGxheSgpKQorCisgICAgZGVmIGhhc19hcnRpZmFjdChzZWxmLCBwYXRoKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGlmIHNlbGYuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0cyhwYXRoKQorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBoYXMgYXJ0aWZhY3Qgbm90IGltcGxlbWVudGVkIGZvciBidWlsZCBlbnZpcm9ubWVudCB0eXBlICVzIiAlIHNlbGYuZ2V0X2JldHlwZV9kaXNwbGF5KCkpCisKKyMgYSBCdWlsZFJlcXVlc3QgaXMgYSByZXF1ZXN0IHRoYXQgdGhlIHNjaGVkdWxlciB3aWxsIGJ1aWxkIHVzaW5nIGEgQnVpbGRFbnZpcm9ubWVudAorIyB0aGUgYnVpbGQgcmVxdWVzdCBxdWV1ZSBpcyB0aGUgdGFibGUgaXRzZWxmLCBvcmRlcmVkIGJ5IHN0YXRlCisKK2NsYXNzIEJ1aWxkUmVxdWVzdChtb2RlbHMuTW9kZWwpOgorICAgIFJFUV9DUkVBVEVEID0gMAorICAgIFJFUV9RVUVVRUQgPSAxCisgICAgUkVRX0lOUFJPR1JFU1MgPSAyCisgICAgUkVRX0NPTVBMRVRFRCA9IDMKKyAgICBSRVFfRkFJTEVEID0gNAorICAgIFJFUV9ERUxFVEVEID0gNQorICAgIFJFUV9BUkNISVZFID0gNgorCisgICAgUkVRVUVTVF9TVEFURSA9ICgKKyAgICAgICAgKFJFUV9DUkVBVEVELCAiY3JlYXRlZCIpLAorICAgICAgICAoUkVRX1FVRVVFRCwgInF1ZXVlZCIpLAorICAgICAgICAoUkVRX0lOUFJPR1JFU1MsICJpbiBwcm9ncmVzcyIpLAorICAgICAgICAoUkVRX0NPTVBMRVRFRCwgImNvbXBsZXRlZCIpLAorICAgICAgICAoUkVRX0ZBSUxFRCwgImZhaWxlZCIpLAorICAgICAgICAoUkVRX0RFTEVURUQsICJkZWxldGVkIiksCisgICAgICAgIChSRVFfQVJDSElWRSwgImFyY2hpdmUiKSwKKyAgICApCisKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSAoImJydGFyZ2V0X190YXJnZXQiLCAiYnVpbGRfX3Byb2plY3RfX25hbWUiKQorCisgICAgcHJvamVjdCAgICAgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIGJ1aWxkICAgICAgID0gbW9kZWxzLk9uZVRvT25lRmllbGQoQnVpbGQsIG51bGwgPSBUcnVlKSAgICAgIyBUT0RPOiB0b2FzdGVydWkgc2hvdWxkIHNldCB0aGlzIHdoZW4gQnVpbGQgaXMgY3JlYXRlZAorICAgIGVudmlyb25tZW50ID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRFbnZpcm9ubWVudCwgbnVsbCA9IFRydWUpCisgICAgc3RhdGUgICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBSRVFVRVNUX1NUQVRFLCBkZWZhdWx0ID0gUkVRX0NSRUFURUQpCisgICAgY3JlYXRlZCAgICAgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQgPSBUcnVlKQorICAgIHVwZGF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3cgPSBUcnVlKQorCisgICAgZGVmIGdldF9kdXJhdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnVwZGF0ZWQgLSBzZWxmLmNyZWF0ZWQpLnRvdGFsX3NlY29uZHMoKQorCisgICAgZGVmIGdldF9zb3J0ZWRfdGFyZ2V0X2xpc3Qoc2VsZik6CisgICAgICAgIHRndHMgPSBzZWxmLmJydGFyZ2V0X3NldC5vcmRlcl9ieSggJ3RhcmdldCcgKTsKKyAgICAgICAgcmV0dXJuKCB0Z3RzICk7CisKKyAgICBkZWYgZ2V0X21hY2hpbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJydmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICVzIiAlIChzZWxmLnByb2plY3QsIHNlbGYuZ2V0X3N0YXRlX2Rpc3BsYXkoKSkKKworIyBUaGVzZSB0YWJsZXMgc3BlY2lmeSB0aGUgc2V0dGluZ3MgZm9yIHJ1bm5pbmcgYW4gYWN0dWFsIGJ1aWxkLgorIyBUaGV5IE1VU1QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRhYmxlcyBpbiBvcm0ubW9kZWxzLlByb2plY3QqCisKK2NsYXNzIEJSTGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICByZXEgICAgICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkUmVxdWVzdCkKKyAgICBuYW1lICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDEwMCkKKyAgICBnaXR1cmwgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBjb21taXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBkaXJwYXRoICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKworY2xhc3MgQlJCaXRiYWtlKG1vZGVscy5Nb2RlbCk6CisgICAgcmVxICAgICAgICAgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZFJlcXVlc3QsIHVuaXF1ZSA9IFRydWUpICAgICMgb25seSBvbmUgYml0YmFrZSBmb3IgYSByZXF1ZXN0CisgICAgZ2l0dXJsICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPTI1NCkKKyAgICBjb21taXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBkaXJwYXRoICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKworY2xhc3MgQlJWYXJpYWJsZShtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIG5hbWUgICAgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB2YWx1ZSAgICAgICA9IG1vZGVscy5UZXh0RmllbGQoYmxhbmsgPSBUcnVlKQorCitjbGFzcyBCUlRhcmdldChtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIHRhcmdldCAgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB0YXNrICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKworY2xhc3MgQlJFcnJvcihtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIGVycnR5cGUgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBlcnJtc2cgICAgICA9IG1vZGVscy5UZXh0RmllbGQoKQorICAgIHRyYWNlYmFjayAgID0gbW9kZWxzLlRleHRGaWVsZCgpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLmVycm1zZywgc2VsZi5yZXEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9zc2hiZWNvbnRyb2xsZXIucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9zc2hiZWNvbnRyb2xsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmNDM0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3NzaGJlY29udHJvbGxlci5weQpAQCAtMCwwICsxLDE3OSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworaW1wb3J0IHN5cworaW1wb3J0IHJlCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJUYXJnZXQsIEJSQml0YmFrZQoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB0b2FzdGVybWFpbiBpbXBvcnQgc2V0dGluZ3MKKworZnJvbSBiYmNvbnRyb2xsZXIgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLCBTaGVsbENtZEV4Y2VwdGlvbiwgQnVpbGRTZXR1cEV4Y2VwdGlvbgorCitjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIEROKHBhdGgpOgorICAgIHJldHVybiAiLyIuam9pbihwYXRoLnNwbGl0KCIvIilbMDotMV0pCisKK2NsYXNzIFNTSEJFQ29udHJvbGxlcihCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcik6CisgICAgIiIiIEltcGxlbWVudGF0aW9uIG9mIHRoZSBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciBmb3IgdGhlIGxvY2FsaG9zdDsKKyAgICAgICAgdGhpcyBjb250cm9sbGVyIG1hbmFnZXMgdGhlIGRlZmF1bHQgYnVpbGQgZGlyZWN0b3J5LAorICAgICAgICB0aGUgc2VydmVyIHNldHVwIGFuZCBzeXN0ZW0gc3RhcnQgYW5kIHN0b3AgZm9yIHRoZSBsb2NhbGhvc3QtdHlwZSBidWlsZCBlbnZpcm9ubWVudAorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmUpOgorICAgICAgICBzdXBlcihTU0hCRUNvbnRyb2xsZXIsIHNlbGYpLl9faW5pdF9fKGJlKQorICAgICAgICBzZWxmLmRidXJsID0gc2V0dGluZ3MuZ2V0REFUQUJBU0VfVVJMKCkKKyAgICAgICAgc2VsZi5wb2t5ZGlybmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gRmFsc2UKKworICAgIGRlZiBfc2hlbGxjbWQoc2VsZiwgY29tbWFuZCwgY3dkID0gTm9uZSk6CisgICAgICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICAgICAgY3dkID0gc2VsZi5iZS5zb3VyY2VkaXIKKworICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic3NoICVzICdjZCAlcyAmJiAlcyciICUgKHNlbGYuYmUuYWRkcmVzcywgY3dkLCBjb21tYW5kKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgKG91dCxlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZToKKyAgICAgICAgICAgIGlmIGxlbihlcnIpID09IDA6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIG91dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIGVycikKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsQ21kRXhjZXB0aW9uKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvdXQuc3RyaXAoKQorCisgICAgZGVmIF9wYXRoZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgidGVzdCAtZSBcIiVzXCIiICUgcGF0aCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3BhdGhjcmVhdGUoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3NoZWxsY21kKCJta2RpciAtcCBcIiVzXCIiICUgcGF0aCkKKworICAgIGRlZiBfc2V0dXBCRShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIHNlbGYuX3BhdGhleGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgc2VsZi5fcGF0aGNyZWF0ZShzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlc1wiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyKSkKKworICAgIGRlZiBzdGFydEJCU2VydmVyKHNlbGYsIGJyYmUpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisgICAgICAgIGNtZCA9IHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmIERBVEFCQVNFX1VSTD0lcyBzb3VyY2UgdG9hc3RlciBzdGFydCBub3dlYiBicmJlPSVzXCIiICUgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuZGJ1cmwsIGJyYmUpKQorCisgICAgICAgIHBvcnQgPSAiLTEiCisgICAgICAgIGZvciBpIGluIGNtZC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzcyIpOgorICAgICAgICAgICAgICAgIHBvcnQgPSBpLnNwbGl0KCIgIilbLTFdCisgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kIGJpdGJha2Ugc2VydmVyIHBvcnQgIiwgcG9ydAorCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGFuZCBzZWxmLl9wYXRoZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisgICAgICAgIHNlbGYuYmUuYmJhZGRyZXNzID0gc2VsZi5iZS5hZGRyZXNzLnNwbGl0KCJAIilbLTFdCisgICAgICAgIHNlbGYuYmUuYmJwb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmJlLmJic3RhdGUgPSBCdWlsZEVudmlyb25tZW50LlNFUlZFUl9TVEFSVEVECisgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisKKyAgICBkZWYgc3RvcEJCU2VydmVyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisgICAgICAgIHByaW50IHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICVzIHNvdXJjZSB0b2FzdGVyIHN0b3BcIiIgJQorICAgICAgICAgICAgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIChsYW1iZGE6ICIiIGlmIHNlbGYuYmUuYmJ0b2tlbiBpcyBOb25lIGVsc2UgIkJCVE9LRU49JXMiICUgc2VsZi5iZS5iYnRva2VuKSgpKSkKKyAgICAgICAgc2VsZi5iZS5iYnN0YXRlID0gQnVpbGRFbnZpcm9ubWVudC5TRVJWRVJfU1RPUFBFRAorICAgICAgICBzZWxmLmJlLnNhdmUoKQorICAgICAgICBwcmludCAiU3RvcHBlZCBzZXJ2ZXIiCisKKworICAgIGRlZiBfY29weUZpbGUoc2VsZiwgZmlsZXBhdGgxLCBmaWxlcGF0aDIpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic2NwICclcycgJyVzJyIgJSAoZmlsZXBhdGgxLCBmaWxlcGF0aDIpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCisgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxDbWRFeGNlcHRpb24oZXJyKQorCisgICAgZGVmIHB1bGxGaWxlKHNlbGYsIGxvY2FsX2ZpbGVuYW1lLCByZW1vdGVfZmlsZW5hbWUpOgorICAgICAgICBfY29weUZpbGUobG9jYWxfZmlsZW5hbWUsICIlczolcyIgJSAoc2VsZi5iZS5hZGRyZXNzLCByZW1vdGVfZmlsZW5hbWUpKQorCisgICAgZGVmIHB1c2hGaWxlKHNlbGYsIGxvY2FsX2ZpbGVuYW1lLCByZW1vdGVfZmlsZW5hbWUpOgorICAgICAgICBfY29weUZpbGUoIiVzOiVzIiAlIChzZWxmLmJlLmFkZHJlc3MsIHJlbW90ZV9maWxlbmFtZSksIGxvY2FsX2ZpbGVuYW1lKQorCisgICAgZGVmIHNldExheWVycyhzZWxmLCBiaXRiYWtlcywgbGF5ZXJzKToKKyAgICAgICAgIiIiIGEgd29yZCBvZiBhdHRlbnRpb246IGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBsYXllciBmb3IgYW55IGJ1aWxkIHdpbGwgYmUgcG9reSEgIiIiCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGlzIG5vdCBOb25lCisgICAgICAgIGFzc2VydCBsZW4oYml0YmFrZXMpID09IDEKKyAgICAgICAgIyBzZXQgbGF5ZXJzIGluIHRoZSBsYXllcnNvdXJjZQorCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZDogU1NIIHNldExheWVycyIpCisgICAgICAgICMgMy4gY29uZmlndXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgc28gd2UgaGF2ZSBhIGNvbmYvYmJsYXllcnMuY29uZgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLl9zZXR1cEJFKCkKKworICAgICAgICAjIDQuIHVwZGF0ZSB0aGUgYmJsYXllcnMuY29uZgorICAgICAgICBiYmxheWVyY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdGhleGlzdHMoYmJsYXllcmNvbmYpOgorICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigiQkUgaXMgbm90IGNvbnNpc3RlbnQ6IGJibGF5ZXJzLmNvbmYgZmlsZSBtaXNzaW5nIGF0ICVzIiAlIGJibGF5ZXJjb25mKQorCisgICAgICAgIGltcG9ydCB1dWlkCisgICAgICAgIGxvY2FsX2JibGF5ZXJjb25mID0gIi90bXAvIiArIHV1aWQudXVpZDQoKSArICItYmJsYXllci5jb25mIgorCisgICAgICAgIHNlbGYucHVsbEZpbGUoYmJsYXllcmNvbmYsIGxvY2FsX2JibGF5ZXJjb25mKQorCisgICAgICAgIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLl91cGRhdGVCQkxheWVycyhsb2NhbF9iYmxheWVyY29uZiwgbGF5ZXJsaXN0KQorICAgICAgICBzZWxmLnB1c2hGaWxlKGxvY2FsX2JibGF5ZXJjb25mLCBiYmxheWVyY29uZikKKworICAgICAgICBvcy51bmxpbmsobG9jYWxfYmJsYXllcmNvbmYpCisKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCAiYnVpbGQiKSkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXRoZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisKKyAgICBkZWYgdHJpZ2dlckJ1aWxkKHNlbGYsIGJpdGJha2UsIGxheWVycywgdmFyaWFibGVzLCB0YXJnZXRzKToKKyAgICAgICAgIyBzZXQgdXAgdGhlIGJ1aWQgZW52aXJvbm1lbnQgd2l0aCB0aGUgbmVlZGVkIGxheWVycworICAgICAgICBzZWxmLnNldExheWVycyhiaXRiYWtlLCBsYXllcnMpCisgICAgICAgIHNlbGYud3JpdGVDb25mRmlsZSgiY29uZi90b2FzdGVyLXByZS5jb25mIiwgKQorICAgICAgICBzZWxmLndyaXRlQ29uZkZpbGUoImNvbmYvdG9hc3Rlci5jb25mIiwgcmF3ID0gIklOSEVSSVQrPVwidG9hc3RlciBidWlsZGhpc3RvcnlcIiIpCisKKyAgICAgICAgIyBnZXQgdGhlIGJiIHNlcnZlciBydW5uaW5nIHdpdGggdGhlIGJ1aWxkIHJlcSBpZCBhbmQgYnVpbGQgZW52IGlkCisgICAgICAgIGJiY3RybCA9IHNlbGYuZ2V0QkJDb250cm9sbGVyKCkKKworICAgICAgICAjIHRyaWdnZXIgdGhlIGJ1aWxkIGNvbW1hbmQKKyAgICAgICAgdGFzayA9IHJlZHVjZShsYW1iZGEgeCwgeTogeCBpZiBsZW4oeSk9PSAwIGVsc2UgeSwgbWFwKGxhbWJkYSB5OiB5LnRhc2ssIHRhcmdldHMpKQorICAgICAgICBpZiBsZW4odGFzaykgPT0gMDoKKyAgICAgICAgICAgIHRhc2sgPSBOb25lCisKKyAgICAgICAgYmJjdHJsLmJ1aWxkKGxpc3QobWFwKGxhbWJkYSB4OngudGFyZ2V0LCB0YXJnZXRzKSksIHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEJ1aWxkIGxhdW5jaGVkLCBleGl0aW5nLiBGb2xsb3cgYnVpbGQgbG9ncyBhdCAlcy90b2FzdGVyX3VpLmxvZyIgJSBzZWxmLmJlLmJ1aWxkZGlyKQorCisgICAgICAgICMgZGlzY29ubmVjdCBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgICAgYmJjdHJsLmRpc2Nvbm5lY3QoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdGVzdHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGJjNzdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdGVzdHMucHkKQEAgLTAsMCArMSwxOTAgQEAKKyIiIgorVGhpcyBmaWxlIGRlbW9uc3RyYXRlcyB3cml0aW5nIHRlc3RzIHVzaW5nIHRoZSB1bml0dGVzdCBtb2R1bGUuIFRoZXNlIHdpbGwgcGFzcword2hlbiB5b3UgcnVuICJtYW5hZ2UucHkgdGVzdCIuCisKK1JlcGxhY2UgdGhpcyB3aXRoIG1vcmUgYXBwcm9wcmlhdGUgdGVzdHMgZm9yIHlvdXIgYXBwbGljYXRpb24uCisiIiIKKworZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKKworZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgQml0YmFrZUNvbnRyb2xsZXIsIEJ1aWxkU2V0dXBFeGNlcHRpb24KK2Zyb20gYmxkY29udHJvbC5sb2NhbGhvc3RiZWNvbnRyb2xsZXIgaW1wb3J0IExvY2FsaG9zdEJFQ29udHJvbGxlcgorZnJvbSBibGRjb250cm9sLnNzaGJlY29udHJvbGxlciBpbXBvcnQgU1NIQkVDb250cm9sbGVyCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCdWlsZFJlcXVlc3QKK2Zyb20gYmxkY29udHJvbC5tYW5hZ2VtZW50LmNvbW1hbmRzLnJ1bmJ1aWxkcyBpbXBvcnQgQ29tbWFuZAorCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCisKKyMgc3RhbmRhcmQgcG9reSBkYXRhIGhhcmRjb2RlZCBmb3IgdGVzdGluZworQklUQkFLRV9MQVlFUlMgPSBbdHlwZSgnYml0YmFrZV9pbmZvJywgKG9iamVjdCwpLCB7ICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICIiLCAiY29tbWl0IjogIkhFQUQifSldCitQT0tZX0xBWUVSUyA9IFsKKyAgICB0eXBlKCdwb2t5X2luZm8nLCAob2JqZWN0LCksIHsgIm5hbWUiOiAibWV0YSIsICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICJtZXRhIiwgImNvbW1pdCI6ICJIRUFEIn0pLAorICAgIHR5cGUoJ3Bva3lfaW5mbycsIChvYmplY3QsKSwgeyAibmFtZSI6ICJtZXRhLXlvY3RvIiwgImdpdHVybCI6ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5LmdpdCIsICJkaXJwYXRoIjogIm1ldGEteW9jdG8iLCAiY29tbWl0IjogIkhFQUQifSksCisgICAgdHlwZSgncG9reV9pbmZvJywgKG9iamVjdCwpLCB7ICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwgImdpdHVybCI6ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5LmdpdCIsICJkaXJwYXRoIjogIm1ldGEteW9jdG8tYnNwIiwgImNvbW1pdCI6ICJIRUFEIn0pLAorICAgIF0KKworCisKKyMgd2UgaGF2ZSBhbiBhYnN0cmFjdCB0ZXN0IGNsYXNzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250cm9sbGVycyB1c2UgYSBzaW5nbGUgaW50ZXJmYWNlCisjIHNwZWNpZmljIGNvbnRyb2xsZXIgdGVzdHMgb25seSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBfZ2V0QnVpbGRFbnZpcm9ubWVudCgpIG1ldGhvZAorCit0ZXN0X3NvdXJjZWRpciA9IG9zLmdldGVudigiVFRTX1NPVVJDRV9ESVIiKQordGVzdF9idWlsZGRpciA9IG9zLmdldGVudigiVFRTX0JVSUxEX0RJUiIpCit0ZXN0X2FkZHJlc3MgPSBvcy5nZXRlbnYoIlRUU19URVNUX0FERFJFU1MiLCAibG9jYWxob3N0IikKKworaWYgdGVzdF9zb3VyY2VkaXIgPT0gTm9uZSBvciB0ZXN0X2J1aWxkZGlyID09IE5vbmUgb3IgdGVzdF9hZGRyZXNzID09IE5vbmU6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJQbGVhc2Ugc2V0IFRUVFNfU09VUkNFX0RJUiwgVFRTX0JVSUxEX0RJUiBhbmQgVFRTX1RFU1RfQUREUkVTUyIpCisKKyMgVGhlIGJiIHNlcnZlciB3aWxsIGV4cGVjdCBhIHRvYXN0ZXItcHJlLmNvbmYgZmlsZSB0byBleGlzdC4gSWYgaXQgZG9lc24ndCBleGl0IHRoZW4gd2UgbWFrZQorIyBhbiBlbXB0eSBvbmUgaGVyZS4KK29wZW4odGVzdF9idWlsZGRpciArICdjb25mL3RvYXN0ZXItcHJlLmNvbmYnLCAnYScpLmNsb3NlKCkKKworY2xhc3MgQkVDb250cm9sbGVyVGVzdHMob2JqZWN0KToKKworICAgIGRlZiBfc2VydmVyRm9yY2VTdG9wKHNlbGYsIGJjKToKKyAgICAgICAgZXJyID0gYmMuX3NoZWxsY21kKCJuZXRzdGF0ICAtdGFwbiAyPi9kZXYvbnVsbCB8IGdyZXAgODIwMCB8IGF3ayAne3ByaW50ICQ3fScgfCBzb3J0IC1mdSB8IGN1dCAtZCBcIi9cIiAtZiAxIHwgZ3JlcCAtdiAtLSAtIHwgdGVlIC9kZXYvZmQvMiB8IHhhcmdzIC1yIGtpbGwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyID09ICcnLCAiYml0YmFrZSBzZXJ2ZXIgcGlkICVzIG5vdCBzdG9wcGVkIiAlIGVycikKKworICAgIGRlZiB0ZXN0X3NlcnZlclN0YXJ0QW5kU3RvcChzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLnNzaGJlY29udHJvbGxlciBpbXBvcnQgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24KKyAgICAgICAgb2JlID0gIHNlbGYuX2dldEJ1aWxkRW52aXJvbm1lbnQoKQorICAgICAgICBiYyA9IHNlbGYuX2dldEJFQ29udHJvbGxlcihvYmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0dGluZyBsYXllcnMsIHNraXAgYW55IGxheWVyIGluZm8KKyAgICAgICAgICAgIGJjLnNldExheWVycyhCSVRCQUtFX0xBWUVSUywgUE9LWV9MQVlFUlMpCisgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiwgIGU6CisgICAgICAgICAgICBwcmludCAiVGVzdCBza2lwcGVkIGR1ZSB0byBjb21tYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIFdlIGFyZSBvayB3aXRoIHRoZSBleGNlcHRpb24gYXMgd2UncmUgaGFuZGxpbmcgdGhlIGdpdCBhbHJlYWR5IGV4aXN0cworICAgICAgICBleGNlcHQgQnVpbGRTZXR1cEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBiYy5wb2t5ZGlybmFtZSA9IHRlc3Rfc291cmNlZGlyCisgICAgICAgIGJjLmlzbGF5ZXJzZXQgPSBUcnVlCisKKyAgICAgICAgaG9zdG5hbWUgPSB0ZXN0X2FkZHJlc3Muc3BsaXQoIkAiKVstMV0KKworICAgICAgICAjIHRlc3Qgc3RhcnQgc2VydmVyIGFuZCBzdG9wCisgICAgICAgIGJjLnN0YXJ0QkJTZXJ2ZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKS5jb25uZWN0X2V4KChob3N0bmFtZSwgaW50KGJjLmJlLmJicG9ydCkpKSwgIlNlcnZlciBub3QgYW5zd2VyaW5nIikKKworICAgICAgICBiYy5zdG9wQkJTZXJ2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKS5jb25uZWN0X2V4KChob3N0bmFtZSwgaW50KGJjLmJlLmJicG9ydCkpKSwgIlNlcnZlciBub3Qgc3RvcHBlZCIpCisKKyAgICAgICAgc2VsZi5fc2VydmVyRm9yY2VTdG9wKGJjKQorCisgICAgZGVmIHRlc3RfZ2V0QkJDb250cm9sbGVyKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wuc3NoYmVjb250cm9sbGVyIGltcG9ydCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbgorICAgICAgICBvYmUgPSBzZWxmLl9nZXRCdWlsZEVudmlyb25tZW50KCkKKyAgICAgICAgYmMgPSBzZWxmLl9nZXRCRUNvbnRyb2xsZXIob2JlKQorICAgICAgICBsYXllclNldCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0dGluZyBsYXllcnMsIHNraXAgYW55IGxheWVyIGluZm8KKyAgICAgICAgICAgIGxheWVyU2V0ID0gYmMuc2V0TGF5ZXJzKEJJVEJBS0VfTEFZRVJTLCBQT0tZX0xBWUVSUykKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uOgorICAgICAgICAgICAgcHJpbnQgIlRlc3Qgc2tpcHBlZCBkdWUgdG8gY29tbWFuZCBub3QgaW1wbGVtZW50ZWQgeWV0IgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBXZSBhcmUgb2sgd2l0aCB0aGUgZXhjZXB0aW9uIGFzIHdlJ3JlIGhhbmRsaW5nIHRoZSBnaXQgYWxyZWFkeSBleGlzdHMKKyAgICAgICAgZXhjZXB0IEJ1aWxkU2V0dXBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYmMucG9reWRpcm5hbWUgPSB0ZXN0X3NvdXJjZWRpcgorICAgICAgICBiYy5pc2xheWVyc2V0ID0gVHJ1ZQorCisgICAgICAgIGJiYyA9IGJjLmdldEJCQ29udHJvbGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJiYywgQml0YmFrZUNvbnRyb2xsZXIpKQorICAgICAgICBiYy5zdG9wQkJTZXJ2ZXIoKQorCisgICAgICAgIHNlbGYuX3NlcnZlckZvcmNlU3RvcChiYykKKworY2xhc3MgTG9jYWxob3N0QkVDb250cm9sbGVyVGVzdHMoVGVzdENhc2UsIEJFQ29udHJvbGxlclRlc3RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcihMb2NhbGhvc3RCRUNvbnRyb2xsZXJUZXN0cywgc2VsZikuX19pbml0X18oKmFyZ3MpCisKKworICAgIGRlZiBfZ2V0QnVpbGRFbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgbG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFLAorICAgICAgICAgICAgICAgIGJldHlwZSA9IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTCwKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gdGVzdF9hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNvdXJjZWRpciA9IHRlc3Rfc291cmNlZGlyLAorICAgICAgICAgICAgICAgIGJ1aWxkZGlyID0gdGVzdF9idWlsZGRpciApCisKKyAgICBkZWYgX2dldEJFQ29udHJvbGxlcihzZWxmLCBvYmUpOgorICAgICAgICByZXR1cm4gTG9jYWxob3N0QkVDb250cm9sbGVyKG9iZSkKKworY2xhc3MgU1NIQkVDb250cm9sbGVyVGVzdHMoVGVzdENhc2UsIEJFQ29udHJvbGxlclRlc3RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcihTU0hCRUNvbnRyb2xsZXJUZXN0cywgc2VsZikuX19pbml0X18oKmFyZ3MpCisKKyAgICBkZWYgX2dldEJ1aWxkRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgICAgIGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSwKKyAgICAgICAgICAgICAgICBiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NILAorICAgICAgICAgICAgICAgIGFkZHJlc3MgPSB0ZXN0X2FkZHJlc3MsCisgICAgICAgICAgICAgICAgc291cmNlZGlyID0gdGVzdF9zb3VyY2VkaXIsCisgICAgICAgICAgICAgICAgYnVpbGRkaXIgPSB0ZXN0X2J1aWxkZGlyICkKKworICAgIGRlZiBfZ2V0QkVDb250cm9sbGVyKHNlbGYsIG9iZSk6CisgICAgICAgIHJldHVybiBTU0hCRUNvbnRyb2xsZXIob2JlKQorCisgICAgZGVmIHRlc3RfcGF0aEV4aXN0cyhzZWxmKToKKyAgICAgICAgb2JlID0gQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmNyZWF0ZShiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NILCBhZGRyZXNzPSB0ZXN0X2FkZHJlc3MpCisgICAgICAgIHNiYyA9IFNTSEJFQ29udHJvbGxlcihvYmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzYmMuX3BhdGhleGlzdHMoIi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzYmMuX3BhdGhleGlzdHMoIi8uZGVhZGJlZWYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNiYy5fcGF0aGV4aXN0cyhzYmMuX3NoZWxsY21kKCJwd2QiKSkpCisKKworY2xhc3MgUnVuQnVpbGRzQ29tbWFuZFRlc3RzKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iZWNfc2VsZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdHMgdGhhdCB3ZSBjYW4gZmluZCBhbmQgbG9jayBhIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICIiIgorCisgICAgICAgIG9iZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jcmVhdGUobG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFLCBiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUwpCisgICAgICAgIGNvbW1hbmQgPSBDb21tYW5kKCkKKyAgICAgICAgYmVjID0gY29tbWFuZC5fc2VsZWN0QnVpbGRFbnZpcm9ubWVudCgpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBvYmplY3Qgd2UndmUganVzdCBidWlsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmVjLmJlLmlkID09IG9iZS5pZCwgIkVudmlyb25tZW50IGlzIG5vdCBwcm9wZXJseSBzZWxlY3RlZCIpCisgICAgICAgICMgd2UgaGF2ZSBhIGxvY2tlZCBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmVjLmJlLmxvY2sgPT0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0ssICJFbnZpcm9ubWVudCBpcyBub3QgbG9ja2VkIikKKyAgICAgICAgIyBubyBtb3JlIHNlbGVjdGlvbnMgcG9zc2libGUgaGVyZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBjb21tYW5kLl9zZWxlY3RCdWlsZEVudmlyb25tZW50KQorCisgICAgZGVmIHRlc3RfYnJfc2VsZWN0KHNlbGYpOgorICAgICAgICBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFJlbGVhc2UsIEJpdGJha2VWZXJzaW9uLCBCcmFuY2gKKyAgICAgICAgcCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgidGVzdCIsIFJlbGVhc2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWUgPSAiSEVBRCIsIGJpdGJha2VfdmVyc2lvbiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPSJIRUFEIiwgYnJhbmNoPUJyYW5jaC5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT0iSEVBRCIpKVswXSlbMF0pCisgICAgICAgIG9iciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmNyZWF0ZShzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVELCBwcm9qZWN0ID0gcCkKKyAgICAgICAgY29tbWFuZCA9IENvbW1hbmQoKQorICAgICAgICBiciA9IGNvbW1hbmQuX3NlbGVjdEJ1aWxkUmVxdWVzdCgpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBvYmplY3Qgd2UndmUganVzdCBidWlsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUob2JyLmlkID09IGJyLmlkLCAiUmVxdWVzdCBpcyBub3QgcHJvcGVybHkgc2VsZWN0ZWQiKQorICAgICAgICAjIHdlIGhhdmUgYSBsb2NrZWQgZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJyLnN0YXRlID09IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUywgIlJlcXVlc3QgaXMgbm90IHVwZGF0ZWQiKQorICAgICAgICAjIG5vIG1vcmUgc2VsZWN0aW9ucyBwb3NzaWJsZSBoZXJlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGNvbW1hbmQuX3NlbGVjdEJ1aWxkUmVxdWVzdCkKKworCitjbGFzcyBVdGlsaXR5VGVzdHMoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlZHVjZV9wYXRoKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoLCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi8iKSA9PSAiLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS8uLiIpID09ICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lLy4uL2FuYSIpID09ICIvYW5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lLy4uL2FuYS8uLiIpID09ICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lL2FuYS9taWhhaS8uLi9tYXJpYSIpID09ICIvaG9tZS9hbmEvbWFyaWEiKQorCisgICAgZGVmIHRlc3RfZ2V0X2lkX2Zvcl9zb3J1Y2V0eXBlKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoLCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX2dldF9pZF9mb3Jfc291cmNldHlwZSgibGF5ZXJpbmRleCIpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX2dldF9pZF9mb3Jfc291cmNldHlwZSgibG9jYWwiKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoImltcG9ydGVkIikgPT0gMikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pOgorICAgICAgICAgICAgX2dldF9pZF9mb3Jfc291cmNldHlwZSgidW5rbm93biIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC92aWV3cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3ZpZXdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjAwZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC92aWV3cy5weQpAQCAtMCwwICsxIEBACisjIENyZWF0ZSB5b3VyIHZpZXdzIGhlcmUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkMGZmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL1JFQURNRQpAQCAtMCwwICsxLDYgQEAKK2NvbnRyaWIgZGlyZWN0b3J5IGZvciB0b2FzdGVyCisKK1RoaXMgZGlyZWN0b3J5IGhvbGRzIGNvZGUgdGhhdCB3b3JrcyB3aXRoIFRvYXN0ZXIsIHdpdGhvdXQgYmVpbmcgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgVG9hc3RlciBwcm9qZWN0LgorSXQgaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgY29kZSwgdGVzdGluZyBmaXh0dXJlcywgdG9vbHMgZm9yIFRvYXN0ZXIsIGV0Yy4KKworTk9URTogVGhpcyBkaXJlY3RvcnkgaXMgTk9UIGEgUHl0aG9uIG1vZHVsZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy5naXRpZ25vcmUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTY1MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTAgQEAKKyoucHljCisqLnN3cAorKi5zd28KKyoua3BmCisqLmVnZy1pbmZvLworLmlkZWEKKy50b3gKK3RtcC8KK2Rpc3QvCisuRFNfU3RvcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy50cmF2aXMueW1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvLnRyYXZpcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMGYzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy50cmF2aXMueW1sCkBAIC0wLDAgKzEsNTAgQEAKK2xhbmd1YWdlOiBweXRob24KK3B5dGhvbjoKKyAgLSAiMi43IgorICAtICIzLjQiCitzZXJ2aWNlczoKKyAgLSBteXNxbAorICAtIHBvc3RncmVzcWwKK2VudjoKKyAgLSBESkFOR089MS40IERCPXNxbGl0ZQorICAtIERKQU5HTz0xLjQgREI9bXlzcWwKKyAgLSBESkFOR089MS40IERCPXBvc3RncmVzCisgIC0gREpBTkdPPTEuNSBEQj1zcWxpdGUKKyAgLSBESkFOR089MS41IERCPW15c3FsCisgIC0gREpBTkdPPTEuNSBEQj1wb3N0Z3JlcworICAtIERKQU5HTz0xLjYgREI9c3FsaXRlCisgIC0gREpBTkdPPTEuNiBEQj1teXNxbAorICAtIERKQU5HTz0xLjYgREI9cG9zdGdyZXMKKyAgLSBESkFOR089MS43IERCPXNxbGl0ZQorICAtIERKQU5HTz0xLjcgREI9bXlzcWwKKyAgLSBESkFOR089MS43IERCPXBvc3RncmVzCisKK21hdHJpeDoKKyAgZXhjbHVkZToKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNCBEQj1zcWxpdGUKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNCBEQj1teXNxbAorICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS40IERCPXBvc3RncmVzCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjUgREI9c3FsaXRlCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjUgREI9bXlzcWwKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNSBEQj1wb3N0Z3JlcworICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS42IERCPW15c3FsCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjcgREI9bXlzcWwKKworYmVmb3JlX3NjcmlwdDoKKyAgLSBteXNxbCAtZSAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKyAgLSBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyAtVSBwb3N0Z3JlcworaW5zdGFsbDoKKyAgLSBwaXAgaW5zdGFsbCBzaXgKKyAgLSBpZiBbICIkREIiID09ICJteXNxbCIgXTsgdGhlbiBwaXAgaW5zdGFsbCBteXNxbC1weXRob247IGZpCisgIC0gaWYgWyAiJERCIiA9PSAicG9zdGdyZXMiIF07IHRoZW4gcGlwIGluc3RhbGwgcHN5Y29wZzI7IGZpCisgIC0gcGlwIGluc3RhbGwgLXEgRGphbmdvPT0kREpBTkdPIC0tdXNlLW1pcnJvcnMKK3NjcmlwdDoKKyAgLSAuL3J1bnRlc3RzLnB5IC0tc2V0dGluZ3M9dGVzdHMudGVzdF8kREIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL0xJQ0VOU0UgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiN2MzYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9MSUNFTlNFCkBAIC0wLDAgKzEsMjEgQEAKK1RoZSBNSVQgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMTIgSGVucmlxdWUgQmFzdG9zCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvUkVBRE1FLnJzdCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL1JFQURNRS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZDRkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL1JFQURNRS5yc3QKQEAgLTAsMCArMSwxNTYgQEAKK0RqYW5nbyBBZ2dyZWdhdGUgSWY6IENvbmRpdGlvbiBhZ2dyZWdhdGVzIGZvciBEamFuZ28KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gaW1hZ2U6OiBodHRwczovL3RyYXZpcy1jaS5vcmcvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi5wbmc/YnJhbmNoPW1hc3RlcgorICAgIDp0YXJnZXQ6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmCisgICAgOmFsdDogVGVzdCBTdGF0dXMKKworLi4gaW1hZ2U6OiBodHRwczovL2xhbmRzY2FwZS5pby9naXRodWIvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9tYXN0ZXIvbGFuZHNjYXBlLnBuZworICAgIDp0YXJnZXQ6IGh0dHBzOi8vbGFuZHNjYXBlLmlvL2dpdGh1Yi9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmL21hc3RlcgorICAgIDphbHQ6IENvZGUgSGVsdGgKKworLi4gaW1hZ2U6OiBodHRwczovL3B5cGlwLmluL3YvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9iYWRnZS5wbmcKKyAgICA6dGFyZ2V0OiBodHRwczovL2NyYXRlLmlvL3BhY2thZ2VzL2RqYW5nby1hZ2dyZWdhdGUtaWYvCisgICAgOmFsdDogTGF0ZXN0IFB5UEkgdmVyc2lvbgorCisuLiBpbWFnZTo6IGh0dHBzOi8vcHlwaXAuaW4vZC9kamFuZ28tYWdncmVnYXRlLWlmL2JhZGdlLnBuZworICAgIDp0YXJnZXQ6IGh0dHBzOi8vY3JhdGUuaW8vcGFja2FnZXMvZGphbmdvLWFnZ3JlZ2F0ZS1pZi8KKyAgICA6YWx0OiBOdW1iZXIgb2YgUHlQSSBkb3dubG9hZHMKKworKkFnZ3JlZ2F0ZS1pZiogYWRkcyBjb25kaXRpb25hbCBhZ2dyZWdhdGVzIHRvIERqYW5nby4KKworQ29uZGl0aW9uYWwgYWdncmVnYXRlcyBjYW4gaGVscCB5b3UgcmVkdWNlIHRoZSBhbW1vdW50IG9mIHF1ZXJpZXMgdG8gb2J0YWluCithZ2dyZWdhdGVkIGluZm9ybWF0aW9uLCBsaWtlIHN0YXRpc3RpY3MgZm9yIGV4YW1wbGUuCisKK0ltYWdpbmUgeW91IGhhdmUgYSBtb2RlbCBgYE9mZmVyYGAgbGlrZSB0aGlzIG9uZToKKworLi4gY29kZS1ibG9jazo6IHB5dGhvbgorCisgICAgY2xhc3MgT2ZmZXIobW9kZWxzLk1vZGVsKToKKyAgICAgICAgc3BvbnNvciA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIpCisgICAgICAgIHByaWNlID0gbW9kZWxzLkRlY2ltYWxGaWVsZChtYXhfZGlnaXRzPTksIGRlY2ltYWxfcGxhY2VzPTIpCisgICAgICAgIHN0YXR1cyA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMCkKKyAgICAgICAgZXhwaXJlX2F0ID0gbW9kZWxzLkRhdGVGaWVsZChudWxsPVRydWUsIGJsYW5rPVRydWUpCisgICAgICAgIGNyZWF0ZWRfYXQgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQ9VHJ1ZSkKKyAgICAgICAgdXBkYXRlZF9hdCA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93PVRydWUpCisKKyAgICAgICAgT1BFTiA9ICJPUEVOIgorICAgICAgICBSRVZPS0VEID0gIlJFVk9LRUQiCisgICAgICAgIFBBSUQgPSAiUEFJRCIKKworTGV0J3Mgc2F5IHlvdSB3YW50IHRvIGtub3c6CisKKyMuIEhvdyBtYW55IG9mZmVycyBleGlzdHMgaW4gdG90YWw7CisjLiBIb3cgbWFueSBvZiB0aGVtIGFyZSBPUEVOLCBSRVZPS0VEIG9yIFBBSUQ7CisjLiBIb3cgbXVjaCBtb25leSB3YXMgb2ZmZXJlZCBpbiB0b3RhbDsKKyMuIEhvdyBtdWNoIG1vbmV5IGlzIGluIE9QRU4sIFJFVk9LRUQgYW5kIFBBSUQgb2ZmZXJzOworCitUbyBnZXQgdGhlc2UgaW5mb3JtYXRpb25zLCB5b3UgY291bGQgcXVlcnk6CisKKy4uIGNvZGUtYmxvY2s6OiBweXRob24KKworICAgIGZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgQ291bnQsIFN1bQorCisgICAgT2ZmZXIub2JqZWN0cy5jb3VudCgpCisgICAgT2ZmZXIub2JqZWN0cy5maWx0ZXIoc3RhdHVzPU9mZmVyLk9QRU4pLmFnZ3JlZ2F0ZShDb3VudCgncGsnKSkKKyAgICBPZmZlci5vYmplY3RzLmZpbHRlcihzdGF0dXM9T2ZmZXIuUkVWT0tFRCkuYWdncmVnYXRlKENvdW50KCdwaycpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5QQUlEKS5hZ2dyZWdhdGUoQ291bnQoJ3BrJykpCisgICAgT2ZmZXIub2JqZWN0cy5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5PUEVOKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5SRVZPS0VEKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5QQUlEKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorCitJbiB0aGlzIGNhc2UsICoqOCBxdWVyaWVzKiogd2VyZSBuZWVkZWQgdG8gcmV0cmlldmUgdGhlIGRlc2lyZWQgaW5mb3JtYXRpb24uCisKK1dpdGggY29uZGl0aW9uYWwgYWdncmVnYXRlcyB5b3UgY2FuIGdldCBpdCBhbGwgd2l0aCBvbmx5ICoqMSBxdWVyeSoqOgorCisuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICBmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKKyAgICBmcm9tIGFnZ3JlZ2F0ZV9pZiBpbXBvcnQgQ291bnQsIFN1bQorCisgICAgT2ZmZXIub2JqZWN0cy5hZ2dyZWdhdGUoCisgICAgICAgIHBrX19jb3VudD1Db3VudCgncGsnKSwKKyAgICAgICAgcGtfX29wZW5fX2NvdW50PUNvdW50KCdwaycsIG9ubHk9UShzdGF0dXM9T2ZmZXIuT1BFTikpLAorICAgICAgICBwa19fcmV2b2tlZF9fY291bnQ9Q291bnQoJ3BrJywgb25seT1RKHN0YXR1cz1PZmZlci5SRVZPS0VEKSksCisgICAgICAgIHBrX19wYWlkX19jb3VudD1Db3VudCgncGsnLCBvbmx5PVEoc3RhdHVzPU9mZmVyLlBBSUQpKSwKKyAgICAgICAgcGtfX3N1bT1TdW0oJ3ByaWNlJyksCisgICAgICAgIHBrX19vcGVuX19zdW09U3VtKCdwcmljZScsIG9ubHk9UShzdGF0dXM9T2ZmZXIuT1BFTikpLAorICAgICAgICBwa19fcmV2b2tlZF9fc3VtPVN1bSgncHJpY2UnKSwgb25seT1RKHN0YXR1cz1PZmZlci5SRVZPS0VEKSksCisgICAgICAgIHBrX19wYWlkX19zdW09U3VtKCdwcmljZScpLCBvbmx5PVEoc3RhdHVzPU9mZmVyLlBBSUQpKQorICAgICkKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworKkFnZ3JlZ2F0ZS1pZiogd29ya3Mgd2l0aCBEamFuZ28gMS40LCAxLjUsIDEuNiBhbmQgMS43LgorCitUbyBpbnN0YWxsIGl0LCBzaW1wbHk6CisKKy4uIGNvZGUtYmxvY2s6OiBiYXNoCisKKyAgICAkIHBpcCBpbnN0YWxsIGRqYW5nby1hZ2dyZWdhdGUtaWYKKworSW5zcGlyYXRpb24KKy0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIGEgNSB5ZWFycyBvbGQgYHRpY2tldCAxMTMwNWBfIHRoYXQgd2lsbCAoKmhvcGVmdWxseSopIGltcGxlbWVudCB0aGlzIGZlYXR1cmUgaW50bworRGphbmdvIDEuOC4KKworVXNpbmcgRGphbmdvIDEuNiwgSSBzdGlsbCB3YW50ZWQgdG8gYXZvaWQgY3JlYXRpbmcgY3VzdG9tIHF1ZXJpZXMgZm9yIHZlcnkgc2ltcGxlCitjb25kaXRpb25hbCBhZ2dyZWdhdGlvbnMuIFNvIEkndmUgY2hlcnJ5IHBpY2tlZCB0aG9zZSBpZGVhcyBhbmQgb3RoZXJzIGZyb20gdGhlCitpbnRlcm5ldCBhbmQgYnVpbHQgdGhpcyBsaWJyYXJ5LgorCitUaGlzIGxpYnJhcnkgdXNlcyB0aGUgc2FtZSBBUEkgYW5kIHRlc3RzIHByb3Bvc2VkIG9uIGB0aWNrZXQgMTEzMDVgXywgc28gd2hlbiB0aGUKK25ldyBmZWF0dXJlIGlzIGF2YWlsYWJsZSB5b3UgY2FuIGVhc2lseSByZXBsYWNlIGBgZGphbmdvLWFnZ3JlZ2F0ZS1pZmBgLgorCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KKworQ29uZGl0aW9ucyBpbnZvbHZpbmcgam9pbnMgd2l0aCBhbGlhc2VzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gSWYgeW91IHdhbnQgdG8KK2hlbHAgYWRkaW5nIHRoaXMgZmVhdHVyZSwgeW91J3JlIHdlbGNvbWUgdG8gY2hlY2sgdGhlIGBmaXJzdCBpc3N1ZWBfLgorCitDb250cmlidXRvcnMKKy0tLS0tLS0tLS0tLQorCisqIGBIZW5yaXF1ZSBCYXN0b3MgPGh0dHA6Ly9naXRodWIuY29tL2hlbnJpcXVlYmFzdG9zPmBfCisqIGBJdXJpIGRlIFNpbHZpbyA8aHR0cHM6Ly9naXRodWIuY29tL2l1cmlzaWx2aW8+YF8KKyogYEhhbXB1cyBTdGplcm5oYXYgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFtcD5gXworKiBgQnJhZGxleSBNYXJ0c2JlcmdlciA8aHR0cHM6Ly9naXRodWIuY29tL21hcnRzYmVyZ2VyPmBfCisqIGBNYXJrdXMgQmVydGhlYXUgPGh0dHBzOi8vZ2l0aHViLmNvbS9tYmVydGhlYXU+YF8KKyogYGVuZDAgPGh0dHBzOi8vZ2l0aHViLmNvbS9lbmQwPmBfCisqIGBTY290dCBTZXh0b24gPGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHNleHRvbj5gXworKiBgTWF1bGVyIDxodHRwczovL2dpdGh1Yi5jb20vbWF1bGVyPmBfCisqIGB0cmJzIDxodHRwczovL2dpdGh1Yi5jb20vdHJicz5gXworCitDaGFuZ2Vsb2cKKy0tLS0tLS0tLQorCiswLjUKKyAgICAtIFN1cHBvcnQgZm9yIERqYW5nbyAxLjcKKworMC40CisgICAgLSBVc2UgdG94IHRvIHJ1biB0ZXN0cy4KKyAgICAtIEFkZCBzdXBwb3J0IGZvciBEamFuZ28gMS42LgorICAgIC0gQWRkIHN1cHBvcnQgZm9yIFB5dGhvbjMuCisgICAgLSBUaGUgYGBvbmx5YGAgcGFyYW1ldGVyIG5vdyBmcmVlbHkgc3VwcG9ydHMgam9pbnMgaW5kZXBlbmRlbnQgb2YgdGhlIG1haW4gcXVlcnkuCisgICAgLSBBZGRzIHN1cHBvcnQgZm9yIGFsaWFzIHJlbGFiZWxpbmcgcGVybWl0dGluZyBleGNsdWRlcyBhbmQgdXBkYXRlcyB3aXRoIGFnZ3JlZ2F0ZXMgZmlsdGVyZWQgb24gcmVtb3RlIGZvcmVpZ24ga2V5IHJlbGF0aW9ucy4KKworMC4zLjEKKyAgICAtIEZpeCBxdW90YXRpb24gZXNjYXBpbmcuCisgICAgLSBGaXggYm9vbGVhbiBjYXN0cyBvbiBQb3N0Z3Jlcy4KKworMC4yCisgICAgLSBGaXggcG9zdGdyZXMgaXNzdWUgd2l0aCBMSUtFIGNvbmRpdGlvbnMuCisKKzAuMQorICAgIC0gSW5pdGlhbCByZWxlYXNlLgorCisKK0xpY2Vuc2UKKz09PT09PT0KKworVGhlIE1JVCBMaWNlbnNlLgorCisuLiBfdGlja2V0IDExMzA1OiBodHRwczovL2NvZGUuZGphbmdvcHJvamVjdC5jb20vdGlja2V0LzExMzA1CisuLiBfZmlyc3QgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmL2lzc3Vlcy8xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9hZ2dyZWdhdGVfaWYucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9hZ2dyZWdhdGVfaWYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmMzQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL2FnZ3JlZ2F0ZV9pZi5weQpAQCAtMCwwICsxLDE2NCBAQAorIyBjb2Rpbmc6IHV0Zi04CisnJycKK0ltcGxlbWVudHMgY29uZGl0aW9uYWwgYWdncmVnYXRlcy4KKworVGhpcyBjb2RlIHdhcyBiYXNlZCBvbiB0aGUgd29yayBvZiBvdGhlcnMgZm91bmQgb24gdGhlIGludGVybmV0OgorCisxLiBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMTExNTE3MDgwNC9odHRwOi8vd3d3LnZvdGVydW5pdmVyc2UuY29tL01lbWJlcnMvamxhbnR6L2Jsb2cvY29uZGl0aW9uYWwtYWdncmVnYXRlcy1pbi1kamFuZ28KKzIuIGh0dHBzOi8vY29kZS5kamFuZ29wcm9qZWN0LmNvbS90aWNrZXQvMTEzMDUKKzMuIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHM9IyF0b3BpYy9kamFuZ28tdXNlcnMvY2p6bG9UVXdtUzAKKzQuIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHM9IyF0b3BpYy9kamFuZ28tdXNlcnMvdlZwck1wc0FuUG8KKycnJworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgc2l4CitpbXBvcnQgZGphbmdvCitmcm9tIGRqYW5nby5kYi5tb2RlbHMuYWdncmVnYXRlcyBpbXBvcnQgQWdncmVnYXRlIGFzIERqYW5nb0FnZ3JlZ2F0ZQorZnJvbSBkamFuZ28uZGIubW9kZWxzLnNxbC5hZ2dyZWdhdGVzIGltcG9ydCBBZ2dyZWdhdGUgYXMgRGphbmdvU3FsQWdncmVnYXRlCisKKworVkVSU0lPTiA9IGRqYW5nby5WRVJTSU9OWzoyXQorCisKK2NsYXNzIFNxbEFnZ3JlZ2F0ZShEamFuZ29TcWxBZ2dyZWdhdGUpOgorICAgIGNvbmRpdGlvbmFsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyhDQVNFIFdIRU4gJShjb25kaXRpb24pcyBUSEVOICUoZmllbGQpcyBFTFNFIG51bGwgRU5EKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2wsIHNvdXJjZT1Ob25lLCBpc19zdW1tYXJ5PUZhbHNlLCBjb25kaXRpb249Tm9uZSwgKipleHRyYSk6CisgICAgICAgIHN1cGVyKFNxbEFnZ3JlZ2F0ZSwgc2VsZikuX19pbml0X18oY29sLCBzb3VyY2UsIGlzX3N1bW1hcnksICoqZXh0cmEpCisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCisKKyAgICBkZWYgcmVsYWJlbF9hbGlhc2VzKHNlbGYsIGNoYW5nZV9tYXApOgorICAgICAgICBpZiBWRVJTSU9OIDwgKDEsIDcpOgorICAgICAgICAgICAgc3VwZXIoU3FsQWdncmVnYXRlLCBzZWxmKS5yZWxhYmVsX2FsaWFzZXMoY2hhbmdlX21hcCkKKyAgICAgICAgaWYgc2VsZi5oYXNfY29uZGl0aW9uOgorICAgICAgICAgICAgY29uZGl0aW9uX2NoYW5nZV9tYXAgPSBkaWN0KChrLCB2KSBmb3IgaywgdiBpbiBcCisgICAgICAgICAgICAgICAgY2hhbmdlX21hcC5pdGVtcygpIGlmIGsgaW4gc2VsZi5jb25kaXRpb24ucXVlcnkuYWxpYXNfbWFwCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmNvbmRpdGlvbi5xdWVyeS5jaGFuZ2VfYWxpYXNlcyhjb25kaXRpb25fY2hhbmdlX21hcCkKKworICAgIGRlZiByZWxhYmVsZWRfY2xvbmUoc2VsZiwgY2hhbmdlX21hcCk6CisgICAgICAgIHNlbGYucmVsYWJlbF9hbGlhc2VzKGNoYW5nZV9tYXApCisgICAgICAgIHJldHVybiBzdXBlcihTcWxBZ2dyZWdhdGUsIHNlbGYpLnJlbGFiZWxlZF9jbG9uZShjaGFuZ2VfbWFwKQorCisgICAgZGVmIGFzX3NxbChzZWxmLCBxbiwgY29ubmVjdGlvbik6CisgICAgICAgIGlmIHNlbGYuaGFzX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIHNlbGYuc3FsX3RlbXBsYXRlID0gc2VsZi5jb25kaXRpb25hbF90ZW1wbGF0ZQorICAgICAgICAgICAgc2VsZi5leHRyYVsnY29uZGl0aW9uJ10gPSBzZWxmLl9jb25kaXRpb25fYXNfc3FsKHFuLCBjb25uZWN0aW9uKQorCisgICAgICAgIHJldHVybiBzdXBlcihTcWxBZ2dyZWdhdGUsIHNlbGYpLmFzX3NxbChxbiwgY29ubmVjdGlvbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfY29uZGl0aW9uKHNlbGYpOgorICAgICAgICAjIFdhcm5pbmc6IGJvb2woUXVlcnlTZXQpIHdpbGwgaGl0IHRoZSBkYXRhYmFzZQorICAgICAgICByZXR1cm4gc2VsZi5jb25kaXRpb24gaXMgbm90IE5vbmUKKworICAgIGRlZiBfY29uZGl0aW9uX2FzX3NxbChzZWxmLCBxbiwgY29ubmVjdGlvbik6CisgICAgICAgICcnJworICAgICAgICBSZXR1cm4gc3FsIGZvciBjb25kaXRpb24uCisgICAgICAgICcnJworICAgICAgICBkZWYgZXNjYXBlKHZhbHVlKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc3RyKGludCh2YWx1ZSkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgICAgICAjIEVzY2FwZSBwYXJhbXMgdXNlZCB3aXRoIExJS0UKKyAgICAgICAgICAgICAgICBpZiAnJScgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnJScsICclJScpCisgICAgICAgICAgICAgICAgIyBFc2NhcGUgc2luZ2xlIHF1b3RlcworICAgICAgICAgICAgICAgIGlmICInIiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCInIiwgIicnIikKKyAgICAgICAgICAgICAgICAjIEFkZCBzaW5nbGUgcXVvdGUgdG8gdGV4dCB2YWx1ZXMKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICInIiArIHZhbHVlICsgIiciCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICBzcWwsIHBhcmFtID0gc2VsZi5jb25kaXRpb24ucXVlcnkud2hlcmUuYXNfc3FsKHFuLCBjb25uZWN0aW9uKQorICAgICAgICBwYXJhbSA9IG1hcChlc2NhcGUsIHBhcmFtKQorCisgICAgICAgIHJldHVybiBzcWwgJSB0dXBsZShwYXJhbSkKKworCitjbGFzcyBTcWxTdW0oU3FsQWdncmVnYXRlKToKKyAgICBzcWxfZnVuY3Rpb24gPSAnU1VNJworCisKK2NsYXNzIFNxbENvdW50KFNxbEFnZ3JlZ2F0ZSk6CisgICAgaXNfb3JkaW5hbCA9IFRydWUKKyAgICBzcWxfZnVuY3Rpb24gPSAnQ09VTlQnCisgICAgc3FsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyglKGRpc3RpbmN0KXMlKGZpZWxkKXMpJworICAgIGNvbmRpdGlvbmFsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyglKGRpc3RpbmN0KXNDQVNFIFdIRU4gJShjb25kaXRpb24pcyBUSEVOICUoZmllbGQpcyBFTFNFIG51bGwgRU5EKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2wsIGRpc3RpbmN0PUZhbHNlLCAqKmV4dHJhKToKKyAgICAgICAgc3VwZXIoU3FsQ291bnQsIHNlbGYpLl9faW5pdF9fKGNvbCwgZGlzdGluY3Q9ZGlzdGluY3QgYW5kICdESVNUSU5DVCAnIG9yICcnLCAqKmV4dHJhKQorCisKK2NsYXNzIFNxbEF2ZyhTcWxBZ2dyZWdhdGUpOgorICAgIGlzX2NvbXB1dGVkID0gVHJ1ZQorICAgIHNxbF9mdW5jdGlvbiA9ICdBVkcnCisKKworY2xhc3MgU3FsTWF4KFNxbEFnZ3JlZ2F0ZSk6CisgICAgc3FsX2Z1bmN0aW9uID0gJ01BWCcKKworCitjbGFzcyBTcWxNaW4oU3FsQWdncmVnYXRlKToKKyAgICBzcWxfZnVuY3Rpb24gPSAnTUlOJworCisKK2NsYXNzIEFnZ3JlZ2F0ZShEamFuZ29BZ2dyZWdhdGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29rdXAsIG9ubHk9Tm9uZSwgKipleHRyYSk6CisgICAgICAgIHN1cGVyKEFnZ3JlZ2F0ZSwgc2VsZikuX19pbml0X18obG9va3VwLCAqKmV4dHJhKQorICAgICAgICBzZWxmLm9ubHkgPSBvbmx5CisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gTm9uZQorCisgICAgZGVmIF9nZXRfZmllbGRzX2Zyb21fUShzZWxmLCBxKToKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgZm9yIGNoaWxkIGluIHEuY2hpbGRyZW46CisgICAgICAgICAgICBpZiBoYXNhdHRyKGNoaWxkLCAnY2hpbGRyZW4nKToKKyAgICAgICAgICAgICAgICBmaWVsZHMuZXh0ZW5kKHNlbGYuX2dldF9maWVsZHNfZnJvbV9RKGNoaWxkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmllbGRzLmFwcGVuZChjaGlsZCkKKyAgICAgICAgcmV0dXJuIGZpZWxkcworCisgICAgZGVmIGFkZF90b19xdWVyeShzZWxmLCBxdWVyeSwgYWxpYXMsIGNvbCwgc291cmNlLCBpc19zdW1tYXJ5KToKKyAgICAgICAgaWYgc2VsZi5vbmx5OgorICAgICAgICAgICAgc2VsZi5jb25kaXRpb24gPSBxdWVyeS5tb2RlbC5fZGVmYXVsdF9tYW5hZ2VyLmZpbHRlcihzZWxmLm9ubHkpCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5fZ2V0X2ZpZWxkc19mcm9tX1Eoc2VsZi5vbmx5KToKKyAgICAgICAgICAgICAgICBmaWVsZF9saXN0ID0gY2hpbGRbMF0uc3BsaXQoJ19fJykKKyAgICAgICAgICAgICAgICAjIFBvcCBvZmYgdGhlIGxhc3QgZmllbGQgaWYgaXQncyBhIHF1ZXJ5IHRlcm0gKCdndGUnLCAnY29udGFpbnMnLCAnaXNudWxsJywgZXRjLikKKyAgICAgICAgICAgICAgICBpZiBmaWVsZF9saXN0Wy0xXSBpbiBxdWVyeS5xdWVyeV90ZXJtczoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wb3AoKQorICAgICAgICAgICAgICAgICMgc2V0dXBfam9pbnMgaGF2ZSBkaWZmZXJlbnQgcmV0dXJucyBpbiBEamFuZ28gMS41IGFuZCAxLjYsIGJ1dCB0aGUgb3JkZXIgb2Ygd2hhdCB3ZSBuZWVkIHJlbWFpbnMuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcXVlcnkuc2V0dXBfam9pbnMoZmllbGRfbGlzdCwgcXVlcnkubW9kZWwuX21ldGEsIHF1ZXJ5LmdldF9pbml0aWFsX2FsaWFzKCksIE5vbmUpCisgICAgICAgICAgICAgICAgam9pbl9saXN0ID0gcmVzdWx0WzNdCisKKyAgICAgICAgICAgICAgICBmbmFtZSA9ICdwcm9tb3RlX2FsaWFzX2NoYWluJyBpZiBWRVJTSU9OIDwgKDEsIDUpIGVsc2UgJ3Byb21vdGVfam9pbnMnCisgICAgICAgICAgICAgICAgYXJncyA9IChqb2luX2xpc3QsIFRydWUpIGlmIFZFUlNJT04gPCAoMSwgNykgZWxzZSAoam9pbl9saXN0LCkKKworICAgICAgICAgICAgICAgIHByb21vdGUgPSBnZXRhdHRyKHF1ZXJ5LCBmbmFtZSkKKyAgICAgICAgICAgICAgICBwcm9tb3RlKCphcmdzKQorCisgICAgICAgIGFnZ3JlZ2F0ZSA9IHNlbGYuc3FsX2tsYXNzKGNvbCwgc291cmNlPXNvdXJjZSwgaXNfc3VtbWFyeT1pc19zdW1tYXJ5LCBjb25kaXRpb249c2VsZi5jb25kaXRpb24sICoqc2VsZi5leHRyYSkKKyAgICAgICAgcXVlcnkuYWdncmVnYXRlc1thbGlhc10gPSBhZ2dyZWdhdGUKKworCitjbGFzcyBTdW0oQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ1N1bScKKyAgICBzcWxfa2xhc3MgPSBTcWxTdW0KKworCitjbGFzcyBDb3VudChBZ2dyZWdhdGUpOgorICAgIG5hbWUgPSAnQ291bnQnCisgICAgc3FsX2tsYXNzID0gU3FsQ291bnQKKworCitjbGFzcyBBdmcoQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ0F2ZycKKyAgICBzcWxfa2xhc3MgPSBTcWxBdmcKKworCitjbGFzcyBNYXgoQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ01heCcKKyAgICBzcWxfa2xhc3MgPSBTcWxNYXgKKworCitjbGFzcyBNaW4oQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ01pbicKKyAgICBzcWxfa2xhc3MgPSBTcWxNaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3J1bnRlc3RzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvcnVudGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmU1NTg2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3J1bnRlc3RzLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCisKK2RlZiBwYXJzZV9hcmdzKCk6CisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZXR0aW5ncycsIGhlbHA9J0RlZmluZSBzZXR0aW5ncy4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXVuaXR0ZXN0JywgaGVscD0nRGVmaW5lIHdoaWNoIHRlc3QgdG8gcnVuLiBEZWZhdWx0IGFsbC4nKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5zZXR0aW5nczoKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IG9wdGlvbnMudW5pdHRlc3Q6CisgICAgICAgIG9wdGlvbnMudW5pdHRlc3QgPSBbJ2FnZ3JlZ2F0aW9uJ10KKworICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIGdldF9ydW5uZXIoc2V0dGluZ3NfbW9kdWxlKToKKyAgICAnJycKKyAgICBBc2tzIERqYW5nbyBmb3IgdGhlIFRlc3RSdW5uZXIgZGVmaW5lZCBpbiBzZXR0aW5ncyBvciB0aGUgZGVmYXVsdCBvbmUuCisgICAgJycnCisgICAgb3MuZW52aXJvblsnREpBTkdPX1NFVFRJTkdTX01PRFVMRSddID0gc2V0dGluZ3NfbW9kdWxlCisKKyAgICBpbXBvcnQgZGphbmdvCisgICAgZnJvbSBkamFuZ28udGVzdC51dGlscyBpbXBvcnQgZ2V0X3J1bm5lcgorICAgIGZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCisKKyAgICBpZiBoYXNhdHRyKGRqYW5nbywgJ3NldHVwJyk6CisgICAgICAgIGRqYW5nby5zZXR1cCgpCisKKyAgICByZXR1cm4gZ2V0X3J1bm5lcihzZXR0aW5ncykKKworCitkZWYgcnVudGVzdHMoKToKKyAgICBvcHRpb25zID0gcGFyc2VfYXJncygpCisgICAgVGVzdFJ1bm5lciA9IGdldF9ydW5uZXIob3B0aW9ucy5zZXR0aW5ncykKKyAgICBydW5uZXIgPSBUZXN0UnVubmVyKHZlcmJvc2l0eT0xLCBpbnRlcmFjdGl2ZT1UcnVlLCBmYWlsZmFzdD1GYWxzZSkKKyAgICBzeXMuZXhpdChydW5uZXIucnVuX3Rlc3RzKFtdKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bnRlc3RzKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3NldHVwLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkM2RiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3NldHVwLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMgY29kaW5nOiB1dGYtOAorZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoraW1wb3J0IG9zCisKKworc2V0dXAobmFtZT0nZGphbmdvLWFnZ3JlZ2F0ZS1pZicsCisgICAgICB2ZXJzaW9uPScwLjUnLAorICAgICAgZGVzY3JpcHRpb249J0NvbmRpdGlvbmFsIGFnZ3JlZ2F0ZXMgZm9yIERqYW5nbywganVzdCBsaWtlIHRoZSBmYW1vdXMgU3VtSWYgaW4gRXhjZWwuJywKKyAgICAgIGxvbmdfZGVzY3JpcHRpb249b3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIlJFQURNRS5yc3QiKSkucmVhZCgpLAorICAgICAgYXV0aG9yPSJIZW5yaXF1ZSBCYXN0b3MiLCBhdXRob3JfZW1haWw9ImhlbnJpcXVlQGJhc3Rvcy5uZXQiLAorICAgICAgbGljZW5zZT0iTUlUIiwKKyAgICAgIHB5X21vZHVsZXM9WydhZ2dyZWdhdGVfaWYnXSwKKyAgICAgIGluc3RhbGxfcmVxdWlyZXM9WworICAgICAgICAgICdzaXg+PTEuNi4xJywKKyAgICAgIF0sCisgICAgICB6aXBfc2FmZT1GYWxzZSwKKyAgICAgIHBsYXRmb3Jtcz0nYW55JywKKyAgICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUsCisgICAgICBjbGFzc2lmaWVycz1bCisgICAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA1IC0gUHJvZHVjdGlvbi9TdGFibGUnLAorICAgICAgICAgICdGcmFtZXdvcmsgOjogRGphbmdvJywKKyAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsCisgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKKyAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywKKyAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCisgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCisgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAorICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMycsCisgICAgICAgICAgJ1RvcGljIDo6IERhdGFiYXNlJywKKyAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKKyAgICAgIF0sCisgICAgICB1cmw9J2h0dHA6Ly9naXRodWIuY29tL2hlbnJpcXVlYmFzdG9zL2RqYW5nby1hZ2dyZWdhdGUtaWYvJywKKykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3RveC5pbmkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci90b3guaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YmViMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci90b3guaW5pCkBAIC0wLDAgKzEsMTk4IEBACitbdG94XQorZW52bGlzdCA9CisgICAgcHkyNy1kamFuZ28xLjQtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS40LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS40LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjUtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS41LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS41LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjYtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS42LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS42LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjctc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS43LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS43LW15c3FsLAorCisgICAgcHkzNC1kamFuZ28xLjYtc3FsaXRlLAorICAgIHB5MzQtZGphbmdvMS42LXBvc3RncmVzLAorICAgICNweTM0LWRqYW5nbzEuNi1teXNxbAorCisgICAgcHkzNC1kamFuZ28xLjctc3FsaXRlLAorICAgIHB5MzQtZGphbmdvMS43LXBvc3RncmVzLAorICAgICNweTM0LWRqYW5nbzEuNy1teXNxbAorCitbdGVzdGVudl0KK3doaXRlbGlzdF9leHRlcm5hbHM9CisgICAgbXlzcWwKKyAgICBwc3FsCisKKyMgUHl0aG9uIDIuNworIyBEamFuZ28gMS40CitbdGVzdGVudjpweTI3LWRqYW5nbzEuNC1zcWxpdGVdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNAorY29tbWFuZHMgPSBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3NxbGl0ZQorCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNC1wb3N0Z3Jlc10KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS40CisgICAgcHN5Y29wZzIKK2NvbW1hbmRzID0KKyAgICBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfcG9zdGdyZXMKKyAgICBwc3FsIC1jICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjQtbXlzcWxdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNAorICAgIG15c3FsLXB5dGhvbgorY29tbWFuZHMgPQorICAgIG15c3FsIC1lICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfbXlzcWwKKyAgICBteXNxbCAtZSAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisKKyMgRGphbmdvIDEuNQorW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjUtc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjUKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjUtcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNQorICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS41LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjUKKyAgICBteXNxbC1weXRob24KK2NvbW1hbmRzID0KKyAgICBteXNxbCAtZSAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X215c3FsCisgICAgbXlzcWwgLWUgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JworCisjIERqYW5nbyAxLjYKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS42LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS42Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS42LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjYKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNi1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS42CisgICAgbXlzcWwtcHl0aG9uCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAyLjcgYW5kIERqYW5nbyAxLjcKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS43LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS43Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS43LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjcKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNy1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS43CisgICAgbXlzcWwtcHl0aG9uCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAzLjQKKyMgRGphbmdvIDEuNgorW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjYtc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjYKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjYtcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMy40CitkZXBzID0KKyAgICBkamFuZ289PTEuNgorICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS42LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjYKKyAgICBteXNxbC1weXRob24zCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAzLjQKKyMgRGphbmdvIDEuNworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjctc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjcKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjctcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMy40CitkZXBzID0KKyAgICBkamFuZ289PTEuNworICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS43LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjcKKyAgICBteXNxbC1weXRob24zCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9SRUFETUUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmE1NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvUkVBRE1FCkBAIC0wLDAgKzEsNDEgQEAKKworVG9hc3RlciBUZXN0aW5nIEZyYW1ld29yaworWW9jdG8gUHJvamVjdAorCisKK1JhdGlvbmFsZQorLS0tLS0tLS0tLS0tCitBcyBUb2FzdGVyIGNvbnRyaWJ1dGlvbnMgZ3JvdyB3aXRoIHRoZSBudW1iZXIgb2YgcGVvcGxlIHRoYXQgY29udHJpYnV0ZSBjb2RlLCB2ZXJpZnlpbmcgZWFjaCBwYXRjaCBwcmlvciB0byBzdWJtaXR0aW5nIHVwc3RyZWFtIGJlY29tZXMgYSBoYXJkLXRvLXNjYWxlIHByb2JsZW0gZm9yIGh1bWFucy4gV2UgZGV2aXNlZCB0aGlzIHN5c3RlbSBpbiBvcmRlciB0byBydW4gcGF0Y2gtbGV2ZWwgdmFsaWRhdGlvbiwgdHJ5aW5nIHRvIGVsaW1pbmF0ZSBjb21tb24gcHJvYmxlbXMgZnJvbSBzdWJtaXR0ZWQgcGF0Y2hlcywgaW4gYW4gYXV0b21hdGVkIGZhc2hpb24uCisKK1RoZSBUb2FzdGVyIFRlc3RpbmcgRnJhbWV3b3JrIGlzIGEgc2V0IG9mIFB5dGhvbiBzY3JpcHRzIHRoYXQgcHJvdmlkZXMgYW4gZXh0ZW5zaWJsZSB3YXkgdG8gd3JpdGUgc21va2UgYW5kIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCB3aWxsIGJlIHJ1biBvbiBlYWNoIHBhdGNoIHNldCBzZW50IGZvciByZXZpZXcgb24gdGhlIHRvYXN0ZXIgbWFpbGluZyBsaXN0LgorCisKK1VzYWdlCistLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0aHJlZSBtYWluIGV4ZWN1dGFibGUgc2NyaXB0cyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAqICAgIHJ1bm5lci5weSAgaXMgZGVzaWduZWQgdG8gYmUgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gSXQgcmVxdWlyZXMsIGFzIG1hbmRhdG9yeSBwYXJhbWV0ZXIsIGEgYnJhbmNoIG5hbWUgb24gcG9reS1jb250cmliLCBicmFuY2ggd2hpY2ggY29udGFpbnMgdGhlIHBhdGNoZXMgdG8gYmUgdGVzdGVkLiBUaGUgcHJvZ3JhbSB3aWxsIGF1dG8tZGlzY292ZXIgdGhlIGF2YWlsYWJsZSB0ZXN0cyByZXNpZGluZyBpbiB0aGlzIGRpcmVjdG9yeSBieSBsb29raW5nIGZvciB1bml0dGVzdCBjbGFzc2VzLCBhbmQgd2lsbCBydW4gdGhlIHRlc3RzIG9uIHRoZSBicmFuY2ggZHVtcGluZyB0aGUgb3V0cHV0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuIE9wdGlvbmFsbHksIGl0IGNhbiB0YWtlIHBhcmFtZXRlcnMgaW5oaWJpdGluZyB0aGUgYnJhbmNoIGNoZWNrb3V0LCBvciBzcGVjaWZ5aW5nIGEgc2luZ2xlIHRlc3QgdG8gYmUgcnVuLCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICogICAgbGF1bmNoZXIucHkgIGlzIGEgZGVzaWduZWQgdG8gYmUgcnVuIGZyb20gYSBjcm9udGFiIG9yIHNpbWlsYXIgc2NoZWR1bGluZyBtZWNoYW5pc20uIEl0IGxvb2tzIHVwIGEgYmFja2xvZyBmaWxlIGNvbnRhaW5pbmcgYnJhbmNoZXMtdG8tdGVzdCAobmFtZWQgdGFza3MgaW4gdGhlIHNvdXJjZSBjb2RlKSwgc2VsZWN0IHRoZSBmaXJzdCBvbmUgaW4gRklGTyBtYW5uZXIsIGFuZCBsYXVuY2ggcnVubmVyLnB5IG9uIGl0LiBJdCB3aWxsIGF3YWl0IGZvciBjb21wbGV0aW9uLCBhbmQgZW1haWwgdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IgZHVtcHMgZnJvbSB0aGUgcnVubmVyLnB5IGV4ZWN1dGlvbgorICAgICogICAgcmVjdi5weSAgaXMgYW4gZW1haWwgcmVjZWl2ZXIsIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBhcyBhIHBpcGUgZnJvbSBhIC5mb3J3YXJkIGZpbGUuIEl0IGlzIHVzZWQgdG8gbW9uaXRvciBhIG1haWxpbmcgbGlzdCwgZm9yIGV4YW1wbGUsIGFuZCBhZGQgdGFza3MgdG8gdGhlIGJhY2tsb2cgYmFzZWQgb24gcmV2aWV3IHJlcXVlc3RzIGNvbWluZyBvbiB0aGUgbWFpbGluZyBsaXN0LgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCitBcyBwcmVyZXF1aXNpdGUsIHdlIGV4cGVjdCBhIGZ1bmN0aW9uaW5nIGVtYWlsIHN5c3RlbSBvbiBhIG1hY2hpbmUgd2l0aCBQeXRob24yLgorCitUaGUgYnJvYWQgc3RlcHMgdG8gaW5zdGFsbGF0aW9uCisqIHNldCB1cCB0aGUgLmZvcndhcmQgb24gdGhlIHJlY2VpdmluZyBlbWFpbCBhY2NvdW50IHRvIHBpcGUgdG8gdGhlIHJlY3YucHkgZmlsZQorKiBlZGl0IGNvbmZpZy5weSBhbmQgc2V0dGluZ3MuanNvbiB0byBhbHRlciBmb3IgbG9jYWwgaW5zdGFsbGF0aW9uIHNldHRpbmdzCisqIG9uIGVtYWlsIHJlY2VpdmUsIHZlcmlmeSBiYWNrbG9nLnR4dCB0byBzZWUgdGhhdCB0aGUgdGFza3MgYXJlIHJlY2VpdmVkIGFuZCBtYXJrZWQgZm9yIHByb2Nlc3NpbmcKKyogZXhlY3V0ZSBsYXVuY2hlci5weSBpbiBjb21tYW5kIGxpbmUgdG8gdmVyaWZ5IHRoYXQgYSB0ZXN0IG9jY3VycyB3aXRoIG5vIHByb2JsZW1zLCBhbmQgdGhhdCB0aGUgb3V0Z29pbmcgZW1haWwgaXMgZGVsaXZlcmVkCisqIGFkZCBsYXVuY2hlci5weQorCisKKworQ29udHJpYnV0ZQorLS0tLS0tLS0tLS0tCitXaGF0IHdlIG5lZWQgYXJlIHRlc3RzLiBBZGQgeW91ciBvd24gdGVzdHMgdG8gZWl0aGVyIHRlc3RzLnB5IGZpbGUsIG9yIHRvIGEgbmV3IGZpbGUuCitVc2UgImNvbmZpZy5sb2dnZXIiIHRvIHdyaXRlIGxvZ3MgdGhhdCB3aWxsIG1ha2UgaXQgdG8gZW1haWwuCisKK0NvbW1vbmx5IHVzZWQgY29kZSBzaG91bGQgYmUgZ29pbmcgdG8gc2hlbGx1dGlscywgYW5kIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlnLnB5LgorCitDb250cmlidXRlIGNvZGUgYnkgZW1haWxpbmcgcGF0Y2hlcyB0byB0aGUgbGlzdDogdG9hc3RlckB5b2N0b3Byb2plY3Qub3JnIChtZW1iZXJzaGlwIHJlcXVpcmVkKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1RPRE8gYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTcxOTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1RPRE8KQEAgLTAsMCArMSw5IEBACitXZSBuZWVkIHRvIGltcGxlbWVudCB0ZXN0czoKKworYXV0b21hdGVkIGxpbmsgY2hlY2tlcjsgY3VycmVudGx5CiskIGxpbmtjaGVja2VyIC10IDEwMDAgLUYgY3N2IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8KKworaW50ZWdyYXRlIHRoZSB3M2MtdmFsaWRhdGlvbiBzZXJ2aWNlOyBjdXJyZW50bHkKKyQgcHl0aG9uIHVybGNoZWNrLnB5CisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2NvbmZpZy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkNDVmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkKQEAgLTAsMCArMSw5OCBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24vc2luZ2xlIG1vZHVsZSBmb3IgdHRzCisjIGV2ZXJ5dGhpbmcgdGhhdCB3b3VsZCBiZSBhIGdsb2JhbCB2YXJpYWJsZSBnb2VzIGhlcmUKKworaW1wb3J0IG9zLCBzeXMsIGxvZ2dpbmcKK2ltcG9ydCBzb2NrZXQKKworTE9HRElSID0gImxvZyIKK1NFVFRJTkdTX0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInNldHRpbmdzLmpzb24iKQorVEVTVF9ESVJfTkFNRSA9ICJ0dHNfdGVzdGRpciIKKworREVCVUcgPSBUcnVlCisKK09XTl9QSUQgPSBvcy5nZXRwaWQoKQorCitXM0NfVkFMSURBVE9SID0gImh0dHA6Ly9pY2FydXMubG9jYWwvdzNjLXZhbGlkYXRvci9jaGVjaz9kb2N0eXBlPUhUTUw1JnVyaT0iCisKK1RPQVNURVJfUE9SVCA9IDU2Nzg5CisKK1RFU1RESVIgPSBOb25lCisKKyN3ZSBwYXJzZSB0aGUgdzNjIFVSTCB0byBrbm93IHdoZXJlIHRvIGNvbm5lY3QKKworaW1wb3J0IHVybHBhcnNlCisKK2RlZiBnZXRfcHVibGljX2lwKCk6CisgICAgdGVtcF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICBwYXJzZWRfdXJsID0gdXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly9pY2FydXMubG9jYWwvdzNjLXZhbGlkYXRvci9jaGVjaz9kb2N0eXBlPUhUTUw1JnVyaT0iKQorICAgIHRlbXBfc29ja2V0LmNvbm5lY3QoKHBhcnNlZF91cmwubmV0bG9jLCA4MCBpZiBwYXJzZWRfdXJsLnBvcnQgaXMgTm9uZSBlbHNlIHBhcnNlZF91cmwucG9ydCkpCisgICAgcHVibGljX2lwID0gdGVtcF9zb2NrZXQuZ2V0c29ja25hbWUoKVswXQorICAgIHRlbXBfc29ja2V0LmNsb3NlKCkKKyAgICByZXR1cm4gcHVibGljX2lwCisKK1RPQVNURVJfQkFTRVVSTCA9ICJodHRwOi8vJXM6JWQvIiAlIChnZXRfcHVibGljX2lwKCksIFRPQVNURVJfUE9SVCkKKworCitPV05fRU1BSUxfQUREUkVTUyA9ICJUb2FzdGVyIFRlc3RpbmcgRnJhbWV3b3JrIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4iCitSRVBPUlRfRU1BSUxfQUREUkVTUyA9ICJhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbSIKKworIyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgYmFzaWMgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZQorCisjcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQorIyB3ZSBkaXNhYmxlIHRoZSBpbnZhbGlkIG5hbWUgYmVjYXVzZSB0aGUgbW9kdWxlLWxldmVsICJsb2dnZXIiIGlzIHVzZWQgdGhyb3Vnb3V0IGJpdGJha2UKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVydGVzdCIpCitfX2NvbnNvbGVfXyA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorX19jb25zb2xlX18uc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorbG9nZ2VyLmFkZEhhbmRsZXIoX19jb25zb2xlX18pCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworCisjIHNpbmdsZXRvbiBmaWxlIG5hbWVzCitMT0NLRklMRSA9ICIvdG1wL3R0Zi5sb2NrIgorQkFDS0xPR0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImJhY2tsb2cudHh0IikKKworIyB0YXNrIHN0YXRlcworZGVmIGVudW0oKnNlcXVlbnRpYWwsICoqbmFtZWQpOgorICAgIGVudW1zID0gZGljdCh6aXAoc2VxdWVudGlhbCwgcmFuZ2UobGVuKHNlcXVlbnRpYWwpKSksICoqbmFtZWQpCisgICAgcmV2ZXJzZSA9IGRpY3QoKHZhbHVlLCBrZXkpIGZvciBrZXksIHZhbHVlIGluIGVudW1zLml0ZXJpdGVtcygpKQorICAgIGVudW1zWydyZXZlcnNlX21hcHBpbmcnXSA9IHJldmVyc2UKKyAgICByZXR1cm4gdHlwZSgnRW51bScsICgpLCBlbnVtcykKKworCitjbGFzcyBUQVNLUyhvYmplY3QpOgorICAgICNweWxpbnQ6IGRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcworICAgIFBFTkRJTkcgPSAiUEVORElORyIKKyAgICBJTlBST0dSRVNTID0gIklOUFJPR1JFU1MiCisgICAgRE9ORSA9ICJET05FIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBuZXh0X3Rhc2sodGFzayk6CisgICAgICAgIGlmIHRhc2sgPT0gVEFTS1MuUEVORElORzoKKyAgICAgICAgICAgIHJldHVybiBUQVNLUy5JTlBST0dSRVNTCisgICAgICAgIGlmIHRhc2sgPT0gVEFTS1MuSU5QUk9HUkVTUzoKKyAgICAgICAgICAgIHJldHVybiBUQVNLUy5ET05FCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBuZXh0IHRhc2sgc3RhdGUgZm9yICVzIiAlIHRhc2spCisKKyMgVFRTIHNwZWNpZmljCitDT05UUklCX1JFUE8gPSAiZ2l0QGdpdC55b2N0b3Byb2plY3Qub3JnOnBva3ktY29udHJpYiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xhdW5jaGVyLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xhdW5jaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1Nzk0YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbGF1bmNoZXIucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBQcm9ncmFtIHRvIHJ1biB0aGUgbmV4dCB0YXNrIGxpc3RlZCBmcm9tIHRoZSBiYWNrbG9nLnR4dDsgZGVzaWduZWQgdG8gYmUKKyMgcnVuIGZyb20gY3JvbnRhYi4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MsIGNvbmZpZywgc2hlbGx1dGlscworZnJvbSBzaGVsbHV0aWxzIGltcG9ydCBTaGVsbENtZEV4Y2VwdGlvbgorCisjIEltcG9ydCBzbXRwbGliIGZvciB0aGUgYWN0dWFsIHNlbmRpbmcgZnVuY3Rpb24KK2ltcG9ydCBzbXRwbGliCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBtb2R1bGVzIHdlJ2xsIG5lZWQKK2Zyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAorCitkZWYgX3Rha2VfbG9ja2ZpbGUoKToKKyAgICByZXR1cm4gc2hlbGx1dGlscy5sb2NrZmlsZShzaGVsbHV0aWxzLm1rX2xvY2tfZmlsZW5hbWUoKSkKKworCitkZWYgcmVhZF9uZXh0X3Rhc2tfYnlfc3RhdGUodGFza19zdGF0ZSwgdGFza19uYW1lPU5vbmUpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgY29uZmlnLkJBQ0tMT0dGSUxFKSk6CisgICAgICAgIHJldHVybiBOb25lCisgICAgb3MucmVuYW1lKGNvbmZpZy5CQUNLTE9HRklMRSwgY29uZmlnLkJBQ0tMT0dGSUxFICsgIi50bXAiKQorICAgIHRhc2sgPSBOb25lCisgICAgd2l0aCBvcGVuKGNvbmZpZy5CQUNLTE9HRklMRSArICIudG1wIiwgInIiKSBhcyBmX2luOgorICAgICAgICB3aXRoIG9wZW4oY29uZmlnLkJBQ0tMT0dGSUxFLCAidyIpIGFzIGZfb3V0OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZl9pbi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgifCIsIDIpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkc1sxXSA9PSB0YXNrX3N0YXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFza19uYW1lIGlzIE5vbmUgb3IgdGFza19uYW1lID09IGZpZWxkc1swXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gZmllbGRzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlVwZGF0aW5nICVzICVzIHRvICVzIiAlICh0YXNrLCB0YXNrX3N0YXRlLCBjb25maWcuVEFTS1MubmV4dF90YXNrKHRhc2tfc3RhdGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gIiVzfCVzXG4iICUgKHRhc2ssIGNvbmZpZy5UQVNLUy5uZXh0X3Rhc2sodGFza19zdGF0ZSkpCisgICAgICAgICAgICAgICAgZl9vdXQud3JpdGUobGluZSkKKyAgICBvcy5yZW1vdmUoY29uZmlnLkJBQ0tMT0dGSUxFICsgIi50bXAiKQorICAgIHJldHVybiB0YXNrCisKK2RlZiBzZW5kX3JlcG9ydCh0YXNrX25hbWUsIHBsYWludGV4dCwgZXJydGV4dD1Ob25lKToKKyAgICBpZiBlcnJ0ZXh0IGlzIE5vbmU6CisgICAgICAgIG1zZyA9IE1JTUVUZXh0KHBsYWludGV4dCkKKyAgICBlbHNlOgorICAgICAgICBpZiBwbGFpbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIHBsYWludGV4dCA9ICIiCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCItLVNURE9VVCBkdW1wLS1cblxuJXNcblxuLS1TVERFUlIgZHVtcC0tXG5cbiVzIiAlIChwbGFpbnRleHQsIGVycnRleHQpKQorCisgICAgbXNnWydTdWJqZWN0J10gPSAiW3Jldmlldy1yZXF1ZXN0XSAlcyAtIHNtb2tlIHRlc3QgcmVzdWx0cyIgJSB0YXNrX25hbWUKKyAgICBtc2dbJ0Zyb20nXSA9IGNvbmZpZy5PV05fRU1BSUxfQUREUkVTUworICAgIG1zZ1snVG8nXSA9IGNvbmZpZy5SRVBPUlRfRU1BSUxfQUREUkVTUworCisgICAgc210cF9jb25uZWN0aW9uID0gc210cGxpYi5TTVRQKCJsb2NhbGhvc3QiKQorICAgIHNtdHBfY29ubmVjdGlvbi5zZW5kbWFpbChjb25maWcuT1dOX0VNQUlMX0FERFJFU1MsIFtjb25maWcuUkVQT1JUX0VNQUlMX0FERFJFU1NdLCBtc2cuYXNfc3RyaW5nKCkpCisgICAgc210cF9jb25uZWN0aW9uLnF1aXQoKQorCitkZWYgbWFpbigpOgorICAgICMgd2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBhbm90aGVyIGluc3RhbmNlIG9mIHVzIHJ1bm5pbmcKKyAgICBsb2NrX2ZpbGUgPSBfdGFrZV9sb2NrZmlsZSgpCisKKyAgICBpZiBsb2NrX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgY29uZmlnLkRFQlVHOgorICAgICAgICAgICAgcHJpbnQoIkNvbmN1cnJlbnQgc2NyaXB0IGluIHByb2dyZXNzLCBleGl0aW5nIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG5leHRfdGFzayA9IHJlYWRfbmV4dF90YXNrX2J5X3N0YXRlKGNvbmZpZy5UQVNLUy5QRU5ESU5HKQorICAgIGlmIG5leHRfdGFzayBpcyBub3QgTm9uZToKKyAgICAgICAgcHJpbnQoIk5leHQgdGFzayBpcyIsIG5leHRfdGFzaykKKyAgICAgICAgZXJydGV4dCA9IE5vbmUKKyAgICAgICAgb3V0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXQgPSBzaGVsbHV0aWxzLnJ1bl9zaGVsbF9jbWQoIiVzICVzIiAlIChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInJ1bm5lci5weSIpLCBuZXh0X3Rhc2spKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCB3aGlsZSBydW5uaW5nIHRoZSB0ZXN0IHJ1bm5lcjogJXMiLCBleGMpCisgICAgICAgICAgICBlcnJ0ZXh0ID0gZXhjLl9fc3RyX18oKQorICAgICAgICBzZW5kX3JlcG9ydChuZXh0X3Rhc2ssIG91dCwgZXJydGV4dCkKKyAgICAgICAgcmVhZF9uZXh0X3Rhc2tfYnlfc3RhdGUoY29uZmlnLlRBU0tTLklOUFJPR1JFU1MsIG5leHRfdGFzaykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiTm8gdGFzayIpCisKKyAgICBzaGVsbHV0aWxzLnVubG9ja2ZpbGUobG9ja19maWxlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLy5jcmVhdGUgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLy5jcmVhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9sb2cvLmNyZWF0ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3JlY3YucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvcmVjdi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wN2VmZGFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3JlY3YucHkKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFByb2dyYW0gdG8gcmVjZWl2ZSByZXZpZXcgcmVxdWVzdHMgYnkgZW1haWwgYW5kIGxvZyB0YXNrcyB0byBiYWNrbG9nLnR4dAorIyBEZXNpZ25lZCB0byBiZSBydW4gYnkgdGhlIGVtYWlsIHN5c3RlbSBmcm9tIGEgLmZvcndhcmQgZmlsZToKKyMKKyMgY2F0IC5mb3J3YXJkCisjIHxbZnVsbC9wYXRoXS9yZWN2LnB5CisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMsIGNvbmZpZywgc2hlbGx1dGlscworCitmcm9tIGVtYWlsLnBhcnNlciBpbXBvcnQgUGFyc2VyCisKK2RlZiByZWN2X21haWwoZGF0YXN0cmluZyk6CisgICAgaGVhZGVycyA9IFBhcnNlcigpLnBhcnNlc3RyKGRhdGFzdHJpbmcpCisgICAgcmV0dXJuIGhlYWRlcnNbJ3N1YmplY3QnXQorCitkZWYgbWFpbigpOgorICAgIGxvY2tfZmlsZSA9IHNoZWxsdXRpbHMubG9ja2ZpbGUoc2hlbGx1dGlscy5ta19sb2NrX2ZpbGVuYW1lKCksIHJldHJ5PVRydWUpCisKKyAgICBpZiBsb2NrX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgY29uZmlnLkRFQlVHOgorICAgICAgICAgICAgcHJpbnQoIkNvbmN1cnJlbnQgc2NyaXB0IGluIHByb2dyZXNzLCBleGl0aW5nIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHN1YmplY3QgPSByZWN2X21haWwoc3lzLnN0ZGluLnJlYWQoKSkKKworICAgIHN1YmplY3RfcGFydHMgPSBzdWJqZWN0LnNwbGl0KCkKKyAgICBpZiAiW3Jldmlldy1yZXF1ZXN0XSIgaW4gc3ViamVjdF9wYXJ0czoKKyAgICAgICAgdGFza19uYW1lID0gc3ViamVjdF9wYXJ0c1tzdWJqZWN0X3BhcnRzLmluZGV4KCJbcmV2aWV3LXJlcXVlc3RdIikgKyAxXQorICAgICAgICB3aXRoIG9wZW4oY29uZmlnLkJBQ0tMT0dGSUxFLCAiYSIpIGFzIGZvdXQ6CisgICAgICAgICAgICBsaW5lID0gIiVzfCVzXG4iICUgKHRhc2tfbmFtZSwgY29uZmlnLlRBU0tTLlBFTkRJTkcpCisgICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCisKKyAgICBzaGVsbHV0aWxzLnVubG9ja2ZpbGUobG9ja19maWxlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3J1bm5lci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmVkNjY1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkKQEAgLTAsMCArMSwyMjIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCisjIFRoaXMgaXMgdGhlIG1haW4gdGVzdCBleGVjdXRpb24gY29udHJvbGxlci4gSXQgaXMgZGVzaWduZWQgdG8gYmUgcnVuCisjIG1hbnVhbGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgdG8gYmUgY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQgcHJvZ3JhbQorIyB0aGF0IHNjaGVkdWxlcyB0ZXN0IGV4ZWN1dGlvbi4KKyMKKyMgRXhlY3V0ZSAgIHJ1bm5lci5weSAtaCAgIGZvciBoZWxwLgorCisKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MKK2ltcG9ydCB1bml0dGVzdCwgaW1wb3J0bGliCitpbXBvcnQgbG9nZ2luZywgcHByaW50LCBqc29uCitpbXBvcnQgcmUKK2Zyb20gc2hlbGx1dGlscyBpbXBvcnQgU2hlbGxDbWRFeGNlcHRpb24sIG1rZGlyaGllciwgcnVuX3NoZWxsX2NtZAorCitpbXBvcnQgY29uZmlnCisKKyMgd2UgYWxzbyBsb2cgdG8gYSBmaWxlLCBpbiBhZGRpdGlvbiB0byBjb25zb2xlLCBiZWNhdXNlIG91ciBvdXRwdXQgaXMgaW1wb3J0YW50CitfX2xvZ19maWxlX25hbWVfXyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAibG9nL3R0c18lZC5sb2ciICUgY29uZmlnLk9XTl9QSUQpCitta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKF9fbG9nX2ZpbGVfbmFtZV9fKSkKK19fbG9nX2ZpbGVfXyA9IG9wZW4oX19sb2dfZmlsZV9uYW1lX18sICJ3IikKK19fZmlsZV9oYW5kbGVyX18gPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoX19sb2dfZmlsZV9fKQorX19maWxlX2hhbmRsZXJfXy5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisKK2NvbmZpZy5sb2dnZXIuYWRkSGFuZGxlcihfX2ZpbGVfaGFuZGxlcl9fKQorCisjIHNldCB1cCBsb2cgZGlyZWN0b3J5Cit0cnk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNvbmZpZy5MT0dESVIpOgorICAgICAgICBvcy5ta2Rpcihjb25maWcuTE9HRElSKQorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGNvbmZpZy5MT0dESVIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFeHBlY3RlZCBsb2cgZGlyICclcycgaXMgbm90IGFjdHVhbGx5IGEgZGlyZWN0b3J5LiIgJSBjb25maWcuTE9HRElSKQorZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgIHJhaXNlIGV4YworCisjIGNyZWF0ZXMgdGhlIHVuZGVyLXRlc3QtYnJhbmNoIGFzIGEgc2VwYXJhdGUgZGlyZWN0b3J5CitkZWYgc2V0X3VwX3Rlc3RfYnJhbmNoKHNldHRpbmdzLCBicmFuY2hfbmFtZSk6CisgICAgdGVzdGRpciA9ICIlcy8lcy4lZCIgJSAoc2V0dGluZ3NbJ3dvcmtkaXInXSwgY29uZmlnLlRFU1RfRElSX05BTUUsIGNvbmZpZy5PV05fUElEKQorCisgICAgIyBjcmVhdGVzIHRoZSBob3N0IGRpcgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3RkaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRlc3QgZGlyICclcydpcyBhbHJlYWR5IHRoZXJlLCBhYm9ydGluZyIgJSB0ZXN0ZGlyKQorCisgICAgIyBtYXkgcmFpc2UgT1NFcnJvciwgaXMgdG8gYmUgaGFuZGxlZCBieSB0aGUgY2FsbGVyCisgICAgb3MubWFrZWRpcnModGVzdGRpcikKKworCisgICAgIyBjb3BpZXMgb3ZlciB0aGUgLmdpdCBmcm9tIHRoZSBsb2NhbGNsb25lCisgICAgcnVuX3NoZWxsX2NtZCgiY3AgLWEgJyVzJy8uZ2l0ICclcyciICUgKHNldHRpbmdzWydsb2NhbGNsb25lJ10sIHRlc3RkaXIpKQorCisgICAgIyBhZGQgdGhlIHJlbW90ZSBpZiBpdCBkb2Vzbid0IGV4aXN0CisgICAgY3J0X3JlbW90ZXMgPSBydW5fc2hlbGxfY21kKCJnaXQgcmVtb3RlIC12IiwgY3dkPXRlc3RkaXIpCisgICAgcmVtb3RlcyA9IFt3b3JkIGZvciBsaW5lIGluIGNydF9yZW1vdGVzLnNwbGl0KCJcbiIpIGZvciB3b3JkIGluIGxpbmUuc3BsaXQoKV0KKyAgICBpZiBub3QgY29uZmlnLkNPTlRSSUJfUkVQTyBpbiByZW1vdGVzOgorICAgICAgICByZW1vdGVfbmFtZSA9ICJ0dHNfY29udHJpYiIKKyAgICAgICAgcnVuX3NoZWxsX2NtZCgiZ2l0IHJlbW90ZSBhZGQgJXMgJXMiICUgKHJlbW90ZV9uYW1lLCBjb25maWcuQ09OVFJJQl9SRVBPKSwgY3dkPXRlc3RkaXIpCisgICAgZWxzZToKKyAgICAgICAgcmVtb3RlX25hbWUgPSByZW1vdGVzW3JlbW90ZXMuaW5kZXgoY29uZmlnLkNPTlRSSUJfUkVQTykgLSAxXQorCisgICAgIyBkbyB0aGUgZmV0Y2gKKyAgICBydW5fc2hlbGxfY21kKCJnaXQgZmV0Y2ggJXMgLXAiICUgcmVtb3RlX25hbWUsIGN3ZD10ZXN0ZGlyKQorCisgICAgIyBkbyB0aGUgY2hlY2tvdXQKKyAgICBydW5fc2hlbGxfY21kKCJnaXQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJiBnaXQgYnJhbmNoIC1EICVzOyBnaXQgY2hlY2tvdXQgJXMvJXMgLWIgJXMgJiYgZ2l0IHJlc2V0IC0taGFyZCIgJSAoYnJhbmNoX25hbWUsIHJlbW90ZV9uYW1lLCBicmFuY2hfbmFtZSwgYnJhbmNoX25hbWUpLCBjd2Q9dGVzdGRpcikKKworICAgIHJldHVybiB0ZXN0ZGlyCisKKworZGVmIF9fc2VhcmNoX2Zvcl90ZXN0cygpOgorICAgICMgd2UgZmluZCBhbGwgY2xhc3NlcyB0aGF0IGNhbiBydW4sIGFuZCBydW4gdGhlbQorICAgIHRlc3RzID0gW10KKyAgICBmb3IgXywgXywgZmlsZXNfbGlzdCBpbiBvcy53YWxrKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSk6CisgICAgICAgIGZvciBtb2R1bGVfZmlsZSBpbiBbZls6LTNdIGZvciBmIGluIGZpbGVzX2xpc3QgaWYgZi5lbmRzd2l0aCgiLnB5IikgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoIl9faW5pdF9fIildOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiSW5zcGVjdGluZyBtb2R1bGUgJXMiLCBtb2R1bGVfZmlsZSkKKyAgICAgICAgICAgIGN1cnJlbnRfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobW9kdWxlX2ZpbGUpCisgICAgICAgICAgICBjcnRjbGFzc19uYW1lcyA9IHZhcnMoY3VycmVudF9tb2R1bGUpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBjcnRjbGFzc19uYW1lczoKKyAgICAgICAgICAgICAgICB0ZXN0ZWRfdmFsdWUgPSBjcnRjbGFzc19uYW1lc1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdGVkX3ZhbHVlLCB0eXBlKHVuaXR0ZXN0LlRlc3RDYXNlKSkgYW5kIGlzc3ViY2xhc3ModGVzdGVkX3ZhbHVlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZCgobW9kdWxlX2ZpbGUsIG5hbWUpKQorICAgICAgICBicmVhaworICAgIHJldHVybiB0ZXN0cworCisKKyMgYm9pbGVycGxhdGUgdG8gc2VsZiBkaXNjb3ZlciB0ZXN0cyBhbmQgcnVuIHRoZW0KK2RlZiBleGVjdXRlX3Rlc3RzKGRpcl91bmRlcl90ZXN0LCB0ZXN0bmFtZSk6CisKKyAgICBpZiB0ZXN0bmFtZSBpcyBub3QgTm9uZSBhbmQgIi4iIGluIHRlc3RuYW1lOgorICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgIHRlc3RzLmFwcGVuZCh0dXBsZSh0ZXN0bmFtZS5zcGxpdCgiLiIsIDIpKSkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cyA9IF9fc2VhcmNoX2Zvcl90ZXN0cygpCisKKyAgICAjIGxldCdzIG1vdmUgdG8gdGhlIGRpcmVjdG9yeSB1bmRlciB0ZXN0CisgICAgY3J0X2RpciA9IG9zLmdldGN3ZCgpCisgICAgb3MuY2hkaXIoZGlyX3VuZGVyX3Rlc3QpCisKKyAgICAjIGV4ZWN1dGUgZWFjaCBtb2R1bGUKKyAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKKyAgICAjIHdlIGRpc2FibGUgdGhlIGJyb2FkLWV4Y2VwdCBiZWNhdXNlIHdlIHdhbnQgdG8gYWN0dWFsbHkgY2F0Y2ggYWxsIHBvc3NpYmxlIGV4Y2VwdGlvbnMKKyAgICB0cnk6CisgICAgICAgICMgc29ydGluZyB0aGUgdGVzdHMgYnkgdGhlIG51bWVyaWMgb3JkZXIgaW4gdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgdGVzdHMgPSBzb3J0ZWQodGVzdHMsIGtleT1sYW1iZGEgeDogaW50KHJlLnNlYXJjaChyIlswLTldKyIsIHhbMV0pLmdyb3VwKDApKSkKKyAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiRGlzY292ZXJlZCB0ZXN0IGNsYXNlczogJXMiLCBwcHJpbnQucGZvcm1hdCh0ZXN0cykpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgZm9yIG1vZHVsZV9maWxlLCB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgiJXMuJXMiICUgKG1vZHVsZV9maWxlLCB0ZXN0X25hbWUpKSkKKyAgICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCJSdW5uaW5nICVkIHRlc3QocykiLCBzdWl0ZS5jb3VudFRlc3RDYXNlcygpKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCisgICAgICAgIGZvciBlcnJvciBpbiByZXN1bHQuZXJyb3JzOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIG9uIHRlc3Q6ICVzXG4lcyIsIGVycm9yWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLmpvaW4oWyItLSAlcyIgJSB4IGZvciB4IGluIGVycm9yWzFdLnNwbGl0KCJcbiIpXSkpCisKKyAgICAgICAgZm9yIGZhaWx1cmUgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRmFpbGVkIHRlc3Q6ICVzOlxuJXNcbiIsIGZhaWx1cmVbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIuam9pbihbIi0tICAlcyIgJSB4IGZvciB4IGluIGZhaWx1cmVbMV0uc3BsaXQoIlxuIildKSkKKworICAgICAgICBjb25maWcubG9nZ2VyLmluZm8oIlRlc3QgcmVzdWx0czogJWQgcmFuLCAlZCBlcnJvcnMsICVkIGZhaWx1cmVzIiwgcmVzdWx0LnRlc3RzUnVuLCBsZW4ocmVzdWx0LmVycm9ycyksIGxlbihyZXN1bHQuZmFpbHVyZXMpKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgdGVzdC4gVHJhY2VkdW1wOiBcbiVzIiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZXhjKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihjcnRfZGlyKQorICAgIHJldHVybiBsZW4ocmVzdWx0LmZhaWx1cmVzKQorCisjIHZlcmlmeSB0aGF0IHdlIGhhZCBhIGJyYW5jaC11bmRlci10ZXN0IG5hbWUgYXMgcGFyYW1ldGVyCitkZWYgdmFsaWRhdGVfYXJncygpOgorICAgIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBicmFuY2hfdW5kZXJfdGVzdCIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXN0LWRpciIsIGRlc3Q9InRlc3RkaXIiLCBkZWZhdWx0PU5vbmUsIGhlbHA9IlVzZSBzcGVjaWZpZWQgZGlyZWN0b3J5IHRvIHJ1biB0ZXN0cywgaW5oaWJpdHMgdGhlIGNoZWNrb3V0LiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2luZ2xlIiwgZGVzdD0ic2luZ2xldGVzdCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iUnVuIG9ubHkgdGhlIHNwZWNpZmllZCB0ZXN0IikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBzcGVjaWZ5IHRoZSBicmFuY2ggdG8gcnVuIG9uLiBVc2Ugb3B0aW9uICctaCcgd2hlbiBpbiBkb3VidC4iKQorICAgIHJldHVybiAob3B0aW9ucywgYXJncykKKworCisKKworIyBsb2FkIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKK2RlZiByZWFkX3NldHRpbmdzKCk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNvbmZpZy5TRVRUSU5HU19GSUxFKSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoY29uZmlnLlNFVFRJTkdTX0ZJTEUpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvbmZpZyBmaWxlICclcycgY2Fubm90IGJlIG9wZW5lbmQiICUgY29uZmlnLlNFVFRJTkdTX0ZJTEUpCisgICAgcmV0dXJuIGpzb24ubG9hZHMob3Blbihjb25maWcuU0VUVElOR1NfRklMRSwgInIiKS5yZWFkKCkpCisKKworIyBjbGVhbnVwICEKK2RlZiBjbGVhbl91cCh0ZXN0ZGlyKToKKyAgICBydW5fc2hlbGxfY21kKCJybSAtcmYgLS0gJyVzJyIgJSB0ZXN0ZGlyKQorCitkZWYgZHVtcF9pbmZvKHNldHRpbmdzLCBvcHRpb25zLCBhcmdzKToKKyAgICAiIiIgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBydW4gY29uZmlndXJhdGlvbiwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAiIiIKKyAgICBjb25maWcubG9nZ2VyLmRlYnVnKCJTZXR0aW5nczpcbiVzXG5PcHRpb25zOlxuJXNcbkFyZ3VtZW50czpcbiVzXG4iLCBzZXR0aW5ncywgb3B0aW9ucywgYXJncykKKworZGVmIG1haW4oKToKKyAgICAob3B0aW9ucywgYXJncykgPSB2YWxpZGF0ZV9hcmdzKCkKKworICAgIHNldHRpbmdzID0gcmVhZF9zZXR0aW5ncygpCisgICAgbmVlZF9jbGVhbnVwID0gRmFsc2UKKworICAgICMgZHVtcCBkZWJ1ZyBpbmZvCisgICAgZHVtcF9pbmZvKHNldHRpbmdzLCBvcHRpb25zLCBhcmdzKQorCisgICAgdGVzdGRpciA9IE5vbmUKKyAgICBub19mYWlsdXJlcyA9IDEKKyAgICB0cnk6CisgICAgICAgIGlmIG9wdGlvbnMudGVzdGRpciBpcyBub3QgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMob3B0aW9ucy50ZXN0ZGlyKToKKyAgICAgICAgICAgIHRlc3RkaXIgPSBvcy5wYXRoLmFic3BhdGgob3B0aW9ucy50ZXN0ZGlyKQorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCJObyBjaGVja291dCwgdXNpbmcgJXMiLCB0ZXN0ZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmVlZF9jbGVhbnVwID0gVHJ1ZQorICAgICAgICAgICAgdGVzdGRpciA9IHNldF91cF90ZXN0X2JyYW5jaChzZXR0aW5ncywgYXJnc1swXSkgIyB3ZSBleHBlY3QgYSBicmFuY2ggbmFtZSBhcyBmaXJzdCBhcmd1bWVudAorCisgICAgICAgIGNvbmZpZy5URVNURElSID0gdGVzdGRpciAgICAjIHdlIGxldCB0ZXN0cyBrbm93IHdoZXJlIHRvIHJ1bgorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIHRlc3QgZGlyIG9ubHkgY29udGFpbnMgbm8gKi5weWMgbGVmdG92ZXJzCisgICAgICAgIHJ1bl9zaGVsbF9jbWQoImZpbmQgJyVzJyAtdHlwZSBmIC1uYW1lICoucHljIC1leGVjIHJtIHt9IFxcOyIgJSB0ZXN0ZGlyKQorCisgICAgICAgIG5vX2ZhaWx1cmVzID0gZXhlY3V0ZV90ZXN0cyh0ZXN0ZGlyLCBvcHRpb25zLnNpbmdsZXRlc3QpCisKKyAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgdGVzdGluZy4gVHJhY2ViYWNrOiBcbiVzIiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZXhjKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBuZWVkX2NsZWFudXAgYW5kIHRlc3RkaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGVhbl91cCh0ZXN0ZGlyKQorCisgICAgc3lzLmV4aXQobm9fZmFpbHVyZXMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2V0dGluZ3MuanNvbiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9zZXR0aW5ncy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjcxZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2V0dGluZ3MuanNvbgpAQCAtMCwwICsxLDUgQEAKK3sKKwkicmVwbyI6ICJnaXRAZ2l0LnlvY3RvcHJvamVjdC5vcmc6cG9reS1jb250cmliIiwKKwkibG9jYWxjbG9uZSI6ICIvaG9tZS9kZGFsZXgvc3NkL3lvY3RvL3Bva3kiLAorCSJ3b3JrZGlyIjogIi9ob21lL2RkYWxleC9zc2QveW9jdG8iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2hlbGx1dGlscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9zaGVsbHV0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDEyZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2hlbGx1dGlscy5weQpAQCAtMCwwICsxLDE0MSBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMgYW5kIG90aGVyIGNvbW1vbiBiaXRzIG9mIGNvZGUuCisKK2ltcG9ydCBzeXMsIG9zLCBzdWJwcm9jZXNzLCBmY250bCwgZXJybm8KK2ltcG9ydCBjb25maWcKK2Zyb20gY29uZmlnIGltcG9ydCBsb2dnZXIKKworCisjIExpY2Vuc2Ugd2FybmluZzsgdGhpcyBjb2RlIGlzIGNvcGllZCBmcm9tIHRoZSBCaXRCYWtlIHByb2plY3QsIGZpbGUgYml0YmFrZS9saWIvYmIvdXRpbHMucHkKKyMgVGhlIGNvZGUgaXMgb3JpZ2luYWxseSBsaWNlbnNlZCBHUEwtMi4wLCBhbmQgd2UgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHN0aWxsIEdQTC0yLjAKKworIyBFbmQgb2YgY29weSBpcyBtYXJrZWQgd2l0aCAjRU5ET0ZDT1BZIG1hcmtlcgorCitkZWYgbWtkaXJoaWVyKGRpcmVjdG9yeSk6CisgICAgIiIiQ3JlYXRlIGEgZGlyZWN0b3J5IGxpa2UgJ21rZGlyIC1wJywgYnV0IGRvZXMgbm90IGNvbXBsYWluIGlmCisgICAgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGxpa2Ugb3MubWFrZWRpcnMKKyAgICAiIiIKKworICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlyZWN0b3J5KQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGV4YworCitkZWYgbG9ja2ZpbGUobmFtZSwgc2hhcmVkPUZhbHNlLCByZXRyeT1UcnVlKToKKyAgICAiIiIKKyAgICBVc2UgdGhlIGZpbGUgZm4gYXMgYSBsb2NrIGZpbGUsIHJldHVybiB3aGVuIHRoZSBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICAgIFJldHVybnMgYSB2YXJpYWJsZSB0byBwYXNzIHRvIHVubG9ja2ZpbGUoKS4KKyAgICAiIiIKKyAgICBjb25maWcubG9nZ2VyLmRlYnVnKCJ0YWtlIGxvY2tmaWxlICVzIiwgbmFtZSkKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKG5hbWUpCisgICAgbWtkaXJoaWVyKGRpcm5hbWUpCisKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGRpcm5hbWUsIG9zLldfT0spOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBhY3F1aXJlIGxvY2sgJyVzJywgZGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgb3BlcmF0aW9uID0gZmNudGwuTE9DS19FWAorICAgIGlmIHNoYXJlZDoKKyAgICAgICAgb3BlcmF0aW9uID0gZmNudGwuTE9DS19TSAorICAgIGlmIG5vdCByZXRyeToKKyAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uIHwgZmNudGwuTE9DS19OQgorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyBJZiB3ZSBsZWF2ZSB0aGUgbG9ja2ZpbGVzIGx5aW5nIGFyb3VuZCB0aGVyZSBpcyBubyBwcm9ibGVtCisgICAgICAgICMgYnV0IHdlIHNob3VsZCBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuIFRoaXMgZ2l2ZXMgcG90ZW50aWFsCisgICAgICAgICMgZm9yIHJhY2VzIHRob3VnaC4gVG8gd29yayBhcm91bmQgdGhpcywgd2hlbiB3ZSBhY3F1aXJlIHRoZSBsb2NrCisgICAgICAgICMgd2UgY2hlY2sgdGhlIGZpbGUgd2UgbG9ja2VkIHdhcyBzdGlsbCB0aGUgbG9jayBmaWxlIG9uIGRpc2suCisgICAgICAgICMgYnkgY29tcGFyaW5nIGlub2RlIG51bWJlcnMuIElmIHRoZXkgZG9uJ3QgbWF0Y2ggb3IgdGhlIGxvY2tmaWxlCisgICAgICAgICMgbm8gbG9uZ2VyIGV4aXN0cywgd2Ugc3RhcnQgYWdhaW4uCisKKyAgICAgICAgIyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHVuZmFpciBzaW5jZSB0aGUgbGFzdCBwZXJzb24gdG8gcmVxdWVzdCB0aGUKKyAgICAgICAgIyBsb2NrIGlzIHRoZSBtb3N0IGxpa2VseSB0byB3aW4gaXQuCisKKyAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CisgICAgICAgICMgd2UgZGlzYWJsZSB0aGUgYnJvYWQtZXhjZXB0IGJlY2F1c2Ugd2Ugd2FudCB0byBhY3R1YWxseSBjYXRjaCBhbGwgcG9zc2libGUgZXhjZXB0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NrX2ZpbGUgPSBvcGVuKG5hbWUsICdhKycpCisgICAgICAgICAgICBmaWxlbm8gPSBsb2NrX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgb3BlcmF0aW9uKQorICAgICAgICAgICAgc3RhdGluZm8gPSBvcy5mc3RhdChmaWxlbm8pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2NrX2ZpbGUubmFtZSk6CisgICAgICAgICAgICAgICAgc3RhdGluZm8yID0gb3Muc3RhdChsb2NrX2ZpbGUubmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0aW5mby5zdF9pbm8gPT0gc3RhdGluZm8yLnN0X2lubzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2tfZmlsZQorICAgICAgICAgICAgbG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjMjoKKyAgICAgICAgICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gY2xvc2UgdGhlIGxvY2tmaWxlOiAlcyIsIGV4YzIpCisgICAgICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gYWNxdWlyZSB0aGUgbG9ja2ZpbGU6ICVzIiwgZXhjKQorICAgICAgICBpZiBub3QgcmV0cnk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgdW5sb2NrZmlsZShsb2NrX2ZpbGUpOgorICAgICIiIgorICAgIFVubG9jayBhIGZpbGUgbG9ja2VkIHVzaW5nIGxvY2tmaWxlKCkKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgICMgSWYgd2UgaGFkIGEgc2hhcmVkIGxvY2ssIHdlIG5lZWQgdG8gcHJvbW90ZSB0byBleGNsdXNpdmUgYmVmb3JlCisgICAgICAgICMgcmVtb3ZpbmcgdGhlIGxvY2tmaWxlLiBBdHRlbXB0IHRoaXMsIGlnbm9yZSBmYWlsdXJlcy4KKyAgICAgICAgZmNudGwuZmxvY2sobG9ja19maWxlLmZpbGVubygpLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIG9zLnVubGluayhsb2NrX2ZpbGUubmFtZSkKKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgZmNudGwuZmxvY2sobG9ja19maWxlLmZpbGVubygpLCBmY250bC5MT0NLX1VOKQorICAgIGxvY2tfZmlsZS5jbG9zZSgpCisKKyNFTkRPRkNPUFkKKworCitkZWYgbWtfbG9ja19maWxlbmFtZSgpOgorICAgIG91cl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykKKyAgICBvdXJfbmFtZSA9ICIuJXMiICUgIi4iLmpvaW4ocmV2ZXJzZWQob3VyX25hbWUuc3BsaXQoIi4iKSkpCisgICAgcmV0dXJuIGNvbmZpZy5MT0NLRklMRSArIG91cl9uYW1lCisKKworCitjbGFzcyBTaGVsbENtZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHJ1bl9zaGVsbF9jbWQoY29tbWFuZCwgY3dkPU5vbmUpOgorICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorCisgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiX3NoZWxsY21kOiAoJXMpICVzIiwgY3dkLCBjb21tYW5kKQorICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIGN3ZD1jd2QsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgKG91dCwgZXJyKSA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIHByb2Nlc3Mud2FpdCgpCisgICAgaWYgcHJvY2Vzcy5yZXR1cm5jb2RlOgorICAgICAgICBpZiBsZW4oZXJyKSA9PSAwOgorICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIG91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBlcnIpCisgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybigiX3NoZWxsY21kOiBlcnJvciBcbiVzXG4lcyIsIG91dCwgZXJyKQorICAgICAgICByYWlzZSBTaGVsbENtZEV4Y2VwdGlvbihlcnIpCisgICAgZWxzZToKKyAgICAgICAgI2NvbmZpZy5sb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgc3VjY2Vzc1xuJXMiICUgb3V0KQorICAgICAgICByZXR1cm4gb3V0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90ZXN0cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTEwZWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTE1IEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQWxleGFuZHJ1IERhbWlhbiBmb3IgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIyBUZXN0IGRlZmluaXRpb25zLiBUaGUgcnVubmVyIHdpbGwgbG9vayBmb3IgYW5kIGF1dG8tZGlzY292ZXIgdGhlIHRlc3RzCisjIG5vIG1hdHRlciB3aGF0IHRoZXkgZmlsZSBhcmUgdGhleSBpbiwgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyMgYXMgdGhpcyBmaWxlLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gc2hlbGx1dGlscyBpbXBvcnQgcnVuX3NoZWxsX2NtZCwgU2hlbGxDbWRFeGNlcHRpb24KK2ltcG9ydCBjb25maWcKKworaW1wb3J0IHBleHBlY3QKK2ltcG9ydCBzeXMsIG9zLCBzaWduYWwsIHRpbWUKKworY2xhc3MgVGVzdDAwUHlDb21waWxhYmxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJycgVmVyaWZpZXMgdGhhdCBhbGwgUHl0aG9uIGZpbGVzIGFyZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QgJycnCisgICAgZGVmIHRlc3RfY29tcGlsZV9maWxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCJmaW5kIC4gLW5hbWUgKnB5IC10eXBlIGYgLXByaW50MCB8IHhhcmdzIC0wIC1uMSAtUDIwIHB5dGhvbiAtbSBweV9jb21waWxlIiwgY29uZmlnLlRFU1RESVIpCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIGNvbXBpbGluZyBweXRob24gZmlsZXM6ICVzIiAlIChleGMpKQorCisgICAgZGVmIHRlc3RfcHlsaW50X2ZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQociJmaW5kIC4gLWluYW1lIFwiKlwucHlcIiAtdHlwZSBmIC1wcmludDAgfCBQWVRIT05QQVRIPSR7UFlUSE9OUEFUSH06LiB4YXJncyAtciAtMCAtbjEgcHlsaW50IC0tbG9hZC1wbHVnaW5zIHB5bGludF9kamFuZ28gLUUgLS1yZXBvcnRzPW4gMj4mMSIsIGN3ZD1jb25maWcuVEVTVERJUiArICIvYml0YmFrZS9saWIvdG9hc3RlciIpCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlB5bGludCBmYWlsczogJXNcbiIgJSBleGMpCisKK2NsYXNzIFRlc3QwMVB5U3lzdGVtU3RhcnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJyBBdHRlbXB0cyB0byBzdGFydCBUb2FzdGVyLCB2ZXJpZnkgdGhhdCBpdCBpcyBzdWNjZXNmdWxsLCBhbmQgc3RvcCBpdCAnJycKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJ1bl9zaGVsbF9jbWQoImJhc2ggLWMgJ3JtIC1mIGJ1aWxkLypsb2cnIikKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2ludGVyYWN0aXZlX21vZGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoImJhc2ggLWMgJ3NvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAmJiBzb3VyY2UgdG9hc3RlciBzdGFydCB3ZWJwb3J0PSVkICYmIHNvdXJjZSB0b2FzdGVyIHN0b3AnIiAlIChjb25maWcuVEVTVERJUiwgY29uZmlnLlRPQVNURVJfUE9SVCksIGNvbmZpZy5URVNURElSKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgc3RhcnRpbmcgaW50ZXJhY3RpdmUgbW9kZTogJXMiICUgKGV4YykpCisKKyAgICBkZWYgdGVzdF9zdGFydF9tYW5hZ2VkX21vZGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvYmluL3RvYXN0ZXIgd2VicG9ydD0lZCBub2Jyb3dzZXIgJiBzbGVlcCAxMCAmJiBjdXJsIGh0dHA6Ly9sb2NhbGhvc3Q6JWQvICYmIGtpbGwgLTIgJSUxIiAlIChjb25maWcuVEVTVERJUiwgY29uZmlnLlRPQVNURVJfUE9SVCwgY29uZmlnLlRPQVNURVJfUE9SVCksIGNvbmZpZy5URVNURElSKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgc3RhcnRpbmcgbWFuYWdlZCBtb2RlOiAlcyIgJSAoZXhjKSkKKworY2xhc3MgVGVzdDAySFRNTDVDb21wbGlhbmNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub3JpZ2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYuY3J0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGNvbmZpZy5URVNURElSKQorICAgICAgICBzZWxmLmNsZWFudXBfZGF0YWJhc2UgPSBGYWxzZQorICAgICAgICBvcy5jaGRpcihzZWxmLmNydGRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmNydGRpciwgInRvYXN0ZXIuc3FsaXRlIikpOgorICAgICAgICAgICAgc2VsZi5jbGVhbnVwX2RhdGFiYXNlID0gVHJ1ZQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiIC0tbm9pbnB1dCIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIiAlIGNvbmZpZy5URVNURElSKQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sIiAlIGNvbmZpZy5URVNURElSKQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbG9hZGNvbmYgJXMvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24iICUgKGNvbmZpZy5URVNURElSLCBjb25maWcuVEVTVERJUikpCisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCIlcy9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMiICUgY29uZmlnLlRFU1RESVIpCisKKyAgICAgICAgICAgIHNldHVwID0gcGV4cGVjdC5zcGF3bigiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY2hlY2tzZXR0aW5ncyIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHNldHVwLmxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzZXR1cC5leHBlY3QociIuKm9yIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3Rvcnk6ICIpCisgICAgICAgICAgICBzZXR1cC5zZW5kbGluZSgnJykKKyAgICAgICAgICAgIHNldHVwLnNlbmRsaW5lKCcnKQorICAgICAgICAgICAgc2V0dXAuZXhwZWN0KHIiLipvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5OiAiKQorICAgICAgICAgICAgc2V0dXAuc2VuZGxpbmUoJycpCisgICAgICAgICAgICBzZXR1cC5leHBlY3QociJFbnRlciB5b3VyIG9wdGlvbjogIikKKyAgICAgICAgICAgIHNldHVwLnNlbmRsaW5lKCcwJykKKworICAgICAgICBzZWxmLmNoaWxkID0gcGV4cGVjdC5zcGF3bigiYmFzaCIsIFsiJXMvYml0YmFrZS9iaW4vdG9hc3RlciIgJSBjb25maWcuVEVTVERJUiwgIndlYnBvcnQ9JWQiICUgY29uZmlnLlRPQVNURVJfUE9SVCwgIm5vYnJvd3NlciJdLCBjd2Q9c2VsZi5jcnRkaXIpCisgICAgICAgIHNlbGYuY2hpbGQubG9nZmlsZSA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5jaGlsZC5leHBlY3QoIlRvYXN0ZXIgaXMgbm93IHJ1bm5pbmcuIFlvdSBjYW4gc3RvcCBpdCB3aXRoIEN0cmwtQyIpCisKKyAgICBkZWYgdGVzdF9odG1sNV9jb21wbGlhbmNlKHNlbGYpOgorICAgICAgICBpbXBvcnQgdXJsbGlzdCwgdXJsY2hlY2sKKyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIGZvciB1cmwgaW4gdXJsbGlzdC5VUkxTOgorICAgICAgICAgICAgcmVzdWx0c1t1cmxdID0gdXJsY2hlY2sudmFsaWRhdGVfaHRtbDUoY29uZmlnLlRPQVNURVJfQkFTRVVSTCArIHVybCkKKworICAgICAgICBmYWlsZWQgPSBbXQorICAgICAgICBmb3IgdXJsIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiByZXN1bHRzW3VybF1bMV0gIT0gMDoKKyAgICAgICAgICAgICAgICBmYWlsZWQuYXBwZW5kKCh1cmwsIHJlc3VsdHNbdXJsXSkpCisKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZhaWxlZCkgPT0gMCwgIk5vdCBhbGwgVVJMcyB2YWxpZGF0ZTogXG4lcyAiICUgIlxuIi5qb2luKFsiIi5qb2luKHN0cih4KSkgZm9yIHggaW4gZmFpbGVkXSkpCisKKyAgICAgICAgIyhjb25maWcuVE9BU1RFUl9CQVNFVVJMICsgdXJsLCBzdGF0dXMsIGVycm9ycywgd2FybmluZ3MpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLmNoaWxkLmlzYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuY2hpbGQua2lsbChzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBvcy5jaGRpcihzZWxmLm9yaWdkaXIpCisgICAgICAgIHRvYXN0ZXJfc3FsaXRlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5jcnRkaXIsICJ0b2FzdGVyLnNxbGl0ZSIpCisgICAgICAgIGlmIHNlbGYuY2xlYW51cF9kYXRhYmFzZSBhbmQgb3MucGF0aC5leGlzdHModG9hc3Rlcl9zcWxpdGVfcGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUodG9hc3Rlcl9zcWxpdGVfcGF0aCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3J1bl90b2FzdGVydGVzdHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4MDQ4N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5CkBAIC0wLDAgKzEsODcgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgQ29weXJpZ2h0CisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpcyBzY3JpcHQgZm9yIHJ1bm5pbmcgYWxsIHNlbGVjdGVkIHRvYXN0ZXIgY2FzZXMgb24KKyMgc2VsZWN0ZWQgd2ViIGJyb3dzZXJzIG1hbmlmZXN0ZWQgaW4gdG9hc3Rlcl90ZXN0LmNmZy4KKworIyAxLiBIb3cgdG8gc3RhcnQgdG9hc3RlciBpbiB5b2N0bzoKKyMgJCBzb3VyY2UgcG9reS9vZS1pbml0LWJ1aWxkLWVudgorIyAkIHNvdXJjZSB0b2FzdGVyIHN0YXJ0CisjICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKworIyAyLiBIb3cgdG8gaW5zdGFsbCBzZWxlbml1bSBvbiBVYnVudHU6CisjICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgc2Nyb3QgcHl0aG9uLXBpcAorIyAkIHN1ZG8gcGlwIGluc3RhbGwgc2VsZW5pdW0KKworIyAzLiBIb3cgdG8gaW5zdGFsbCBzZWxlbml1bSBhZGRvbiBpbiBmaXJlZm94OgorIyBEb3dubG9hZCB0aGUgbGFzdGVzdCBmaXJlZm94IGFkZG9uIGZyb20gaHR0cDovL3JlbGVhc2Uuc2VsZW5pdW1ocS5vcmcvc2VsZW5pdW0taWRlLworIyBUaGVuIGluc3RhbGwgaXQuIFlvdSBjYW4gYWxzbyBpbnN0YWxsIGZpcmVidWcgYW5kIGZpcmVwYXRoIGFkZG9uCisKKyMgNC4gSG93IHRvIHN0YXJ0IHdyaXRpbmcgYSBuZXcgY2FzZToKKyMgQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHRvIGltcGxlbWVudCB0aGUgZnVuY3Rpb24gdGVzdF94eHgoKSBhbmQgIHBpbGUgaXQgb24uCisKKyMgNS4gSG93IHRvIHRlc3Qgd2l0aCBDaHJvbWUgYnJvd3NlcgorIyBEb3dubG9hZC9pbnN0YWxsIGNocm9tZSBvbiBob3N0CisjIERvd25sb2FkIGNocm9tZWRyaXZlciBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21lZHJpdmVyL2Rvd25sb2Fkcy9saXN0ICBhY2NvcmRpbmcgdG8geW91ciBob3N0IHR5cGUKKyMgcHV0IGNocm9tZWRyaXZlciBpbiBQQVRILCAoZS5nLiAvdXNyL2Jpbi8sIGJlYXIgaW4gbWluZCB0byBjaG1vZCkKKyMgRm9yIHdpbmRvd3MgaG9zdCwgeW91IG1heSBwdXQgY2hyb21lZHJpdmVyLmV4ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgY2hyb21lLmV4ZQorCisKK2ltcG9ydCB1bml0dGVzdCwgdGltZSwgcmUsIHN5cywgZ2V0b3B0LCBvcywgbG9nZ2luZywgcGxhdGZvcm0KK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBzdWJwcm9jZXNzCisKKworY2xhc3MgdG9hc3Rlcl9ydW5fYWxsKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIGluIGNhc2UgdGhpcyBzY3JpcHQgaXMgY2FsbGVkIGZyb20gb3RoZXIgZGlyZWN0b3J5CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkpCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gdGltZS5zdHJwdGltZSh0aW1lLmN0aW1lKCkpCisgICAgICAgIHNlbGYucGFyc2VyID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorICAgICAgICBmb3VuZCA9IHNlbGYucGFyc2VyLnJlYWQoJ3RvYXN0ZXJfdGVzdC5jZmcnKQorICAgICAgICBzZWxmLmhvc3Rfb3MgPSBwbGF0Zm9ybS5zeXN0ZW0oKS5sb3dlcigpCisgICAgICAgIHNlbGYucnVuX2FsbF9jYXNlcygpCisgICAgICAgIHNlbGYuY29sbGVjdF9sb2coKQorCisgICAgZGVmIGdldF90ZXN0X2Nhc2VzKHNlbGYpOgorICAgICAgICAjIHdlIGhhdmUgY29uZmlnIGdyb3VwcyBmb3IgZGlmZmVyZW50IG9zIHR5cGUgaW4gdG9hc3Rlcl90ZXN0LmNmZworICAgICAgICBjYXNlc190b19ydW4gPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICd0ZXN0X2Nhc2VzJykpCisgICAgICAgIHJldHVybiBjYXNlc190b19ydW4KKworCisgICAgZGVmIHJ1bl9hbGxfY2FzZXMoc2VsZik6CisgICAgICAgIGNhc2VzX3RlbXAgPSBzZWxmLmdldF90ZXN0X2Nhc2VzKCkKKyAgICAgICAgZm9yIGNhc2UgaW4gY2FzZXNfdGVtcDoKKyAgICAgICAgICAgIHNpbmdsZV9jYXNlX2NtZCA9ICJweXRob24gLW0gdW5pdHRlc3QgdG9hc3Rlcl9hdXRvbWF0aW9uX3Rlc3QudG9hc3Rlcl9jYXNlcy50ZXN0XyIgKyBzdHIoY2FzZSkKKyAgICAgICAgICAgIHByaW50IHNpbmdsZV9jYXNlX2NtZAorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNpbmdsZV9jYXNlX2NtZCwgc2hlbGw9VHJ1ZSkKKworICAgIGRlZiBjb2xsZWN0X2xvZyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHRoZSBsb2cgZmlsZXMgYXJlIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiAuL2xvZy90bXAvLi4KKyAgICAgICAgQWZ0ZXIgYWxsIGNhc2VzIGFyZSBkb25lLCB0aGV5IHNob3VsZCBiZSB0cmFuc2ZlcmVkIHRvIC4vbG9nLyRUSU1FU1RBTVAvCisgICAgICAgICIiIgorICAgICAgICBkZWYgY29tcGxlKG51bWJlcik6CisgICAgICAgICAgICBpZiBudW1iZXIgPCAxMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKDApICsgc3RyKG51bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihudW1iZXIpCisgICAgICAgIG5vdyA9IHNlbGYuc3RhcnR0aW1lCisgICAgICAgIG5vd19zdHIgPSBjb21wbGUobm93LnRtX3llYXIpICsgY29tcGxlKG5vdy50bV9tb24pICsgY29tcGxlKG5vdy50bV9tZGF5KSArIFwKKyAgICAgICAgICAgICAgICAgIGNvbXBsZShub3cudG1faG91cikgKyBjb21wbGUobm93LnRtX21pbikgKyBjb21wbGUobm93LnRtX3NlYykKKyAgICAgICAgbG9nX2RpciA9IG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkgKyBvcy5zZXAgKyAnbG9nJyArIG9zLnNlcCArIG5vd19zdHIKKyAgICAgICAgbG9nX3RtcF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pICsgb3Muc2VwICsgJ2xvZycgKyBvcy5zZXAgKyAndG1wJworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW5hbWVzKGxvZ190bXBfZGlyLCBsb2dfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciA6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCIgQ2Fubm90IGNyZWF0ZSBsb2cgZGlyKHRpbWVzdGFtcCkgIHVuZGVyIGxvZywgcGxlYXNlIGNoZWNrIHlvdXIgcHJpdmlsZWdlIikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRvYXN0ZXJfcnVuX2FsbCgpCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvdG9hc3Rlcl9hdXRvbWF0aW9uX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmEyMDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnB5CkBAIC0wLDAgKzEsMTg4MyBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0CisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpcyB0b2FzdGVyIGF1dG9tYXRpb24gYmFzZSBjbGFzcyBhbmQgdGVzdCBjYXNlcyBmaWxlCisKKyMgSGlzdG9yeToKKyMgMjAxNS4wMy4wOSAgaW5pdGFsIHZlcnNpb24KKyMgMjAxNS4wMy4yMyAgYWRkaW5nIHRvYXN0ZXJfdGVzdC5jZmcsIHJ1bl90b2FzdGVydGVzdC5weSBzbyB3ZSBjYW4gcnVuIGNhc2UgYnkgY2FzZSBmcm9tIG91dHNpZGUKKworIyBCcmllZnM6CisjIFRoaXMgZmlsZSBpcyBjb21wcmlzZWQgb2YgMyBwYXJ0czoKKyMgSTogICBjb21tb24gdXRpbHMgbGlrZSBzb3J0aW5nLCBnZXR0aW5nIGF0dHJpYnV0ZS4uIGV0YworIyBJSTogIGJhc2UgY2xhc3MgcGFydCwgd2hpY2ggY29tcGxpZXMgd2l0aCB1bml0dGVzdCBmcmFtZSB3b3JrIGFuZAorIyAgICAgIGNvbnRhaW5zIGNsYXNzIHNlbGVuaXVtLWJhc2VkIGZ1bmN0aW9ucworIyBJSUk6IHRlc3QgY2FzZXMKKyMgICAgICB0byBhZGQgbmV3IGNhc2U6IGp1c3QgaW1wbGVtZW50IG5ldyB0ZXN0X3h4eCgpIGZ1bmN0aW9uIGluIGNsYXNzIHRvYXN0ZXJfY2FzZXMKKworIyBOT1RFUyBmb3IgY2FzZXM6CisjIGNhc2UgOTQ2OgorIyBzdGVwIDYgLSA4IG5lZWRzIHRvIGJlIG9ic2VydmVkIHVzaW5nIHNjcmVlbnNob3RzCisjIGNhc2UgOTU2OgorIyBzdGVwIDIgLSAzIG5lZWRzIHRvIGJlIHJ1biBtYW51YWxseQorCitpbXBvcnQgdW5pdHRlc3QsIHRpbWUsIHJlLCBzeXMsIGdldG9wdCwgb3MsIGxvZ2dpbmcsIHN0cmluZywgZXJybm8sIGV4Y2VwdGlvbnMKK2ltcG9ydCBzaHV0aWwsIGFyZ3BhcnNlLCBDb25maWdQYXJzZXIsIHBsYXRmb3JtCitmcm9tIHNlbGVuaXVtIGltcG9ydCB3ZWJkcml2ZXIKK2Zyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24KK2Zyb20gc2VsZW5pdW0gaW1wb3J0IHNlbGVuaXVtCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24uYnkgaW1wb3J0IEJ5Citmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24ua2V5cyBpbXBvcnQgS2V5cworZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC51aSBpbXBvcnQgU2VsZWN0CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQQVJUIEk6IHV0aWxzIHN0dWZmICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBMaXN0YXR0cihvYmplY3QpOgorICAgICIiIgorICAgIFNldCBvZiBsaXN0IGF0dHJpYnV0ZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHRoZSBsaXN0IGNvbnRlbnQgaXMuCisgICAgTGF0ZXIgb24gd2UgbWF5IGFkZCBtb3JlIGF0dHJpYnV0ZXMgaGVyZS4KKyAgICAiIiIKKyAgICBOVUxMID0gIm51bGwiCisgICAgTlVNQkVSUyA9ICJudW1iZXJzIgorICAgIFNUUklOR1MgPSAic3RyaW5ncyIKKyAgICBQRVJDRU5UID0gInBlcmNlbnRhZ2UiCisgICAgU0laRSA9ICJzaXplIgorICAgIFVOS05PV04gPSAidW5rbm93biIKKworCitkZWYgZ2V0X2xvZ19yb290X2RpcigpOgorICAgIG1heF9kZXB0aCA9IDUKKyAgICBwYXJlbnRfZGlyID0gJy4uLycKKyAgICBmb3IgbnVtYmVyIGluIHJhbmdlKDAsIG1heF9kZXB0aCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzLnBhdGhbMF0gKyBvcy5zZXAgKyAob3MucGFyZGlyICsgb3Muc2VwKSpudW1iZXIgKyAnbG9nJyk6CisgICAgICAgICAgICBsb2dfcm9vdF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0gKyBvcy5zZXAgKyAob3MucGFyZGlyICsgb3Muc2VwKSpudW1iZXIgKyAnbG9nJykKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBudW1iZXIgPT0gKG1heF9kZXB0aCAtIDEpOgorICAgICAgICBwcmludCAnTm8gbG9nIGRpciBmb3VuZC4gUGxlYXNlIGNoZWNrJworICAgICAgICByYWlzZSBFeGNlcHRpb24KKworICAgIHJldHVybiBsb2dfcm9vdF9kaXIKKworCitkZWYgbWtkaXJfcChkaXIpOgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlyKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVFWElTVCBhbmQgb3MucGF0aC5pc2RpcihkaXIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgVG8gZGV0ZXJtaW5lIHRoZSBsaXN0IGNvbnRlbnQKKyAgICAiIiIKKyAgICBpZiBub3QgdGVzdGxpc3Q6CisgICAgICAgIHJldHVybiBMaXN0YXR0ci5OVUxMCisgICAgbGlzdHRlc3QgPSB0ZXN0bGlzdFs6XQorICAgIHRyeToKKyAgICAgICAgbGlzdHRlc3QucmVtb3ZlKCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgcGF0dGVybl9wZXJjZW50ID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSolJCIpCisgICAgcGF0dGVybl9zaXplID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSooICkqKEspKihNKSooRykqQiQiKQorICAgIHBhdHRlcm5fbnVtYmVyID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSokIikKKyAgICBkZWYgZ2V0X3BhdHRlcm5lZF9udW1iZXIocGF0dGVybiwgdGxpc3QpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGl0ZW0gaW4gdGxpc3Q6CisgICAgICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgaXRlbSk6CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICByZXR1cm4gY291bnQKKyAgICBpZiBnZXRfcGF0dGVybmVkX251bWJlcihwYXR0ZXJuX3BlcmNlbnQsIGxpc3R0ZXN0KSA9PSBsZW4obGlzdHRlc3QpOgorICAgICAgICByZXR1cm4gTGlzdGF0dHIuUEVSQ0VOVAorICAgIGVsaWYgZ2V0X3BhdHRlcm5lZF9udW1iZXIocGF0dGVybl9zaXplLCBsaXN0dGVzdCkgPT0gbGVuKGxpc3R0ZXN0KToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLlNJWkUKKyAgICBlbGlmIGdldF9wYXR0ZXJuZWRfbnVtYmVyKHBhdHRlcm5fbnVtYmVyLCBsaXN0dGVzdCkgPT0gbGVuKGxpc3R0ZXN0KToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLk5VTUJFUlMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTGlzdGF0dHIuU1RSSU5HUworCisKK2RlZiBpc19saXN0X3NlcXVlbmNlZCh0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgRnVuY3Rpb24gdG8gdGVsbCBpZiBsaXN0IGlzIHNlcXVlbmNlZAorICAgIEN1cnJlbnRseSB3ZSBtYXkgaGF2ZSBsaXN0IG1hZGUgdXAgb2Y6IFN0cmluZ3MgOyBudW1iZXJzIDsgcGVyY2VudGFnZSA7IHRpbWU7IHNpemUKKyAgICBFYWNoIGhhcyByZXNwZWN0aXZlIHdheSB0byBkZXRlcm1pbmUgaWYgaXQncyBzZXF1ZW5jZWQuCisgICAgIiIiCisgICAgdGVzdF9saXN0ID0gdGVzdGxpc3RbOl0KKyAgICB0cnk6CisgICAgICAgIHRlc3RfbGlzdC5yZW1vdmUoJycpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLk5VTEwgOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZWxpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5TVFJJTkdTIDoKKyAgICAgICAgcmV0dXJuIChzb3J0ZWQodGVzdF9saXN0KSA9PSB0ZXN0X2xpc3QpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLk5VTUJFUlMgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlBFUkNFTlQgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3RyaXAoJyUnKSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyKSA9PSBsaXN0X251bWJlcikKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuU0laRSA6CisgICAgICAgIGxpc3RfbnVtYmVyID0gW10KKyAgICAgICAgIyBjdXJyZW50bHkgU0laRSBpcyBzcGxpdHRlZCBieSBzcGFjZQorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiS0IiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiTUIiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogMTAyNCAqIGV2YWwoaXRlbS5zcGxpdCgpWzBdKSkKKyAgICAgICAgICAgIGVsaWYgaXRlbS5zcGxpdCgpWzFdLnVwcGVyKCkgPT0gIkdCIjoKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoMTAyNCAqIDEwMjQgKiAxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgaXNfbGlzdF9pbnZlcnRlZCh0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgRnVuY3Rpb24gdG8gdGVsbCBpZiBsaXN0IGlzIGludmVydGVkCisgICAgQ3VycmVudGx5IHdlIG1heSBoYXZlIGxpc3QgbWFkZSB1cCBvZjogU3RyaW5ncyA7IG51bWJlcnMgOyBwZXJjZW50YWdlIDsgdGltZTsgc2l6ZQorICAgIEVhY2ggaGFzIHJlc3BlY3RpdmUgd2F5IHRvIGRldGVybWluZSBpZiBpdCdzIGludmVydGVkLgorICAgICIiIgorICAgIHRlc3RfbGlzdCA9IHRlc3RsaXN0WzpdCisgICAgdHJ5OgorICAgICAgICB0ZXN0X2xpc3QucmVtb3ZlKCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICBpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5OVUxMIDoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuU1RSSU5HUyA6CisgICAgICAgIHJldHVybiAoc29ydGVkKHRlc3RfbGlzdCwgcmV2ZXJzZSA9IFRydWUpID09IHRlc3RfbGlzdCkKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuTlVNQkVSUyA6CisgICAgICAgIGxpc3RfbnVtYmVyID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKGV2YWwoaXRlbSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlBFUkNFTlQgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3RyaXAoJyUnKSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlNJWkUgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgICMgY3VycmVudGx5IFNJWkUgaXMgc3BsaXR0ZWQgYnkgc3BhY2UuIHN1Y2ggYXMgMCBCOyAxIEtCOyAyIE1CCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGlmIGl0ZW0uc3BsaXQoKVsxXS51cHBlcigpID09ICJLQiI6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKDEwMjQgKiBldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgICAgICBlbGlmIGl0ZW0uc3BsaXQoKVsxXS51cHBlcigpID09ICJNQiI6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKDEwMjQgKiAxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiR0IiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogMTAyNCAqIDEwMjQgKiBldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIHJlcGxhY2VfZmlsZV9jb250ZW50KGZpbGVuYW1lLCBpdGVtLCBvcHRpb24pOgorICAgIGYgPSBvcGVuKGZpbGVuYW1lKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGYuY2xvc2UoKQorICAgIG91dHB1dCA9IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKGl0ZW0pOgorICAgICAgICAgICAgb3V0cHV0LndyaXRlKGl0ZW0gKyAiID0gJyIgKyBvcHRpb24gKyAiJ1xuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dC53cml0ZShsaW5lKQorICAgIG91dHB1dC5jbG9zZSgpCisKK2RlZiBleHRyYWN0X251bWJlcl9mcm9tX3N0cmluZyhzKToKKyAgICAiIiIKKyAgICBleHRyYWN0IHRoZSBudW1iZXJzIGluIGEgc3RyaW5nLiByZXR1cm4gdHlwZSBpcyAnbGlzdCcKKyAgICAiIiIKKyAgICByZXR1cm4gcmUuZmluZGFsbChyJyhbMC05XSspJywgcykKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUEFSVCBJSTogYmFzZSBjbGFzcyAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgdG9hc3Rlcl9jYXNlc19iYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zY3JlZW5zaG90X3NlcXVlbmNlID0gMQorICAgICAgICBzZWxmLnZlcmlmaWNhdGlvbkVycm9ycyA9IFtdCisgICAgICAgIHNlbGYuYWNjZXB0X25leHRfYWxlcnQgPSBUcnVlCisgICAgICAgIHNlbGYuaG9zdF9vcyA9IHBsYXRmb3JtLnN5c3RlbSgpLmxvd2VyKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCisgICAgICAgIGNvbmZpZ3MgPSBzZWxmLnBhcnNlci5yZWFkKCd0b2FzdGVyX3Rlc3QuY2ZnJykKKyAgICAgICAgc2VsZi5iYXNlX3VybCA9IGV2YWwoc2VsZi5wYXJzZXIuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHNlbGYuaG9zdF9vcywgJ3RvYXN0ZXJfdXJsJykpCisKKyAgICAgICAgIyBjcmVhdGUgbG9nIGRpciAuIEN1cnJlbnRseSAsIHdlIHB1dCBsb2cgZmlsZXMgaW4gbG9nL3RtcC4gQWZ0ZXIgYWxsCisgICAgICAgICMgdGVzdCBjYXNlcyBhcmUgZG9uZSwgbW92ZSB0aGVtIHRvIGxvZy8kZGF0ZXRpbWUgZGlyCisgICAgICAgIHNlbGYubG9nX3RtcF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pICsgb3Muc2VwICsgJ2xvZycgKyBvcy5zZXAgKyAndG1wJworICAgICAgICB0cnk6CisgICAgICAgICAgICBta2Rpcl9wKHNlbGYubG9nX3RtcF9kaXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIiUoYXNjdGltZSlzIENhbm5vdCBjcmVhdGUgdG1wIGRpciB1bmRlciBsb2csIHBsZWFzZSBjaGVjayB5b3VyIHByaXZpbGVnZSIpCisgICAgICAgIHNlbGYubG9nID0gc2VsZi5sb2dnZXJfY3JlYXRlKCkKKyAgICAgICAgIyBkcml2ZXIgc2V0dXAKKyAgICAgICAgc2VsZi5zZXR1cF9icm93c2VyKCkKKworICAgIGRlZiBsb2dnZXJfY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgd2UgdXNlIHJvb3QgbG9nZ2VyIGZvciBldmVyeSB0ZXN0Y2FzZS4KKyAgICAgICAgVGhlIHJlYXNvbiB3aHkgd2UgZG9uJ3QgdXNlIFRPQVNURVJYWFhfbG9nZ2VyIGlzIHRvIGF2b2lkIHNldHRpbmcgcmVzcGVjdGl2ZSBsZXZlbCBmb3IKKyAgICAgICAgcm9vdCBsb2dnZXIgYW5kIFRPQVNURVJYWFhfbG9nZ2VyCisgICAgICAgIFRvIEJlIERpc2N1c3NlZAorICAgICAgICAiIiIKKyAgICAgICAgbG9nX2xldmVsX2RpY3QgPSB7J0NSSVRJQ0FMJzpsb2dnaW5nLkNSSVRJQ0FMLCAnRVJST1InOmxvZ2dpbmcuRVJST1IsICdXQVJOSU5HJzpsb2dnaW5nLldBUk5JTkcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lORk8nOmxvZ2dpbmcuSU5GTywgJ0RFQlVHJzpsb2dnaW5nLkRFQlVHLCAnTk9UU0VUJzpsb2dnaW5nLk5PVFNFVH0KKyAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorIyAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1RPQVNURVJfJyArIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmxvZ2dpbmdfbGV2ZWwgPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICdsb2dnaW5nX2xldmVsJykpCisgICAgICAgIGtleSA9IHNlbGYubG9nZ2luZ19sZXZlbC51cHBlcigpCisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dfbGV2ZWxfZGljdFtrZXldKQorICAgICAgICBmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZmlsZW5hbWU9c2VsZi5sb2dfdG1wX2RpciArIG9zLnNlcCArICdjYXNlX2FsbCcgKyAnLmxvZycsIG1vZGU9J2EnKQorICAgICAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShwYXRobmFtZSlzIC0gJShsaW5lbm8pZCAtICUoYXNjdGltZSlzIFxuICBcCisgICAgICAgICAgICAgJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgICAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBsb2cuYWRkSGFuZGxlcihmaCkKKyAgICAgICAgbG9nLmFkZEhhbmRsZXIoY2gpCisgICAgICAgIHJldHVybiBsb2cKKworCisgICAgZGVmIHNldHVwX2Jyb3dzZXIoc2VsZiwgKmJyb3dzZXJfcGF0aCk6CisgICAgICAgIHNlbGYuYnJvd3NlciA9IGV2YWwoc2VsZi5wYXJzZXIuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHNlbGYuaG9zdF9vcywgJ3Rlc3RfYnJvd3NlcicpKQorICAgICAgICBwcmludCBzZWxmLmJyb3dzZXIKKyAgICAgICAgaWYgc2VsZi5icm93c2VyID09ICJmaXJlZm94IjoKKyAgICAgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5GaXJlZm94KCkKKyAgICAgICAgZWxpZiBzZWxmLmJyb3dzZXIgPT0gImNocm9tZSI6CisgICAgICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKCkKKyAgICAgICAgZWxpZiBzZWxmLmJyb3dzZXIgPT0gImllIjoKKyAgICAgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5JZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkcml2ZXIgPSBOb25lCisgICAgICAgICAgICBwcmludCAidW5yZWNvZ25pemVkIGJyb3dzZXIgdHlwZSwgcGxlYXNlIGNoZWNrIgorICAgICAgICBzZWxmLmRyaXZlciA9IGRyaXZlcgorICAgICAgICBzZWxmLmRyaXZlci5pbXBsaWNpdGx5X3dhaXQoMzApCisgICAgICAgIHJldHVybiBzZWxmLmRyaXZlcgorCisKKyAgICBkZWYgc2F2ZV9zY3JlZW5zaG90KHNlbGYsICAqKmxvZ19hcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzYXZlIHNjcmVlbiBlaXRoZXIgYnkgb3MgaW50ZXJmYWNlIG9yIHNlbGVuaXVtIGludGVyZmFjZS4KKyAgICAgICAgSG93IHRvIHVzZToKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlID0gJ25hdGl2ZScvJ3NlbGVuaXVtJywgbG9nX3N1Yl9kaXIgPSAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25hbWUgPSAnc3RlcHgnKQorICAgICAgICB3aGVyZSBuYXRpdmUgbWVhbnMgc2NyZWVuc2hvdCBmdW5jIHByb3ZpZGVkIGJ5IE9TLAorICAgICAgICBzZWxlbml1bSBtZWFucyBzY3JlZW5zaG90IGZ1bmMgcHJvdmlkZWQgYnkgc2VsZW5pdW0gd2ViZHJpdmVyCisgICAgICAgICIiIgorICAgICAgICB0eXBlcyA9IFtsb2dfYXJncy5nZXQoJ3NjcmVlbnNob3RfdHlwZScpXQorICAgICAgICAjIHdoZW4gbm8gc2NyZWVuc2hvdF90eXBlIGlzIHNwZWNpZmllZAorICAgICAgICBpZiB0eXBlcyA9PSBbTm9uZV06CisgICAgICAgICAgICB0eXBlcyA9IFsnbmF0aXZlJywgJ3NlbGVuaXVtJ10KKyAgICAgICAgIyBub3JtYWxseSBhcHBlbmRfbmFtZSBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggc3RlcC4uCisgICAgICAgIGFkZF9uYW1lID0gbG9nX2FyZ3MuZ2V0KCdhcHBlbmRfbmFtZScpCisgICAgICAgIGlmIG5vdCBhZGRfbmFtZToKKyAgICAgICAgICAgIGFkZF9uYW1lID0gJy0nCisgICAgICAgICMgbm9ybWFsbHkgdGhlcmUncyBubyBuZWVkIHRvIHNwZWNpZnkgc3ViX2RpcgorICAgICAgICBzdWJfZGlyID0gbG9nX2FyZ3MuZ2V0KCdsb2dfc3ViX2RpcicpCisgICAgICAgIGlmIG5vdCBzdWJfZGlyOgorICAgICAgICAgICAgIyB1c2UgY2FzZXh4eCBhcyBzdWJfZGlyIG5hbWUKKyAgICAgICAgICAgIHN1Yl9kaXIgPSAnY2FzZScgKyBzdHIoc2VsZi5jYXNlX25vKQorICAgICAgICBmb3IgaXRlbSBpbiB0eXBlczoKKyAgICAgICAgICAgIGxvZ19kaXIgPSBzZWxmLmxvZ190bXBfZGlyICsgb3Muc2VwICsgc3ViX2RpcgorICAgICAgICAgICAgbWtkaXJfcChsb2dfZGlyKQorICAgICAgICAgICAgbG9nX3BhdGggPSBsb2dfZGlyICsgb3Muc2VwICsgIHNlbGYuYnJvd3NlciArICctJyArXAorICAgICAgICAgICAgICAgICAgICBpdGVtICsgJy0nICsgYWRkX25hbWUgKyAnLScgKyBzdHIoc2VsZi5zY3JlZW5zaG90X3NlcXVlbmNlKSArICcucG5nJworICAgICAgICAgICAgaWYgaXRlbSA9PSAnbmF0aXZlJzoKKyAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oInNjcm90ICIgKyBsb2dfcGF0aCkKKyAgICAgICAgICAgIGVsaWYgaXRlbSA9PSAnc2VsZW5pdW0nOgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmdldF9zY3JlZW5zaG90X2FzX2ZpbGUobG9nX3BhdGgpCisgICAgICAgICAgICBzZWxmLnNjcmVlbnNob3Rfc2VxdWVuY2UgKz0gMQorCisgICAgZGVmIGJyb3dzZXJfZGVsYXkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBjdXJyZW50bHkgdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHNvbWUgY2hyb21lIHRlc3QuCisgICAgICAgIFNvbWV0aW1lcyB3ZSBuZWVkIGEgZGVsYXkgdG8gYWNjb21wbGlzaCBzb21lIG9wZXJhdGlvbi4KKyAgICAgICAgQnV0IGZvciBmaXJlZm94LCBtb3N0bHkgd2UgZG9uJ3QgbmVlZCB0aGlzLgorICAgICAgICBUbyBiZSBkaXNjdXNzZWQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuYnJvd3NlciA9PSAiY2hyb21lIjoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgcmV0dXJuCisKKworIyB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBjb250YWluZWQgaW4gV2ViRHJpdmVyIGNsYXNzLi4KKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3RleHQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW3RleHQoKT0nIiArIHN0cmluZyArICInXSIpCisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRzX2J5X3RleHQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKlt0ZXh0KCk9JyIgKyBzdHJpbmcgKyAiJ10iKQorCisKKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3RleHRfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIHRleHRfc3RyaW5nKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaXMgdXNlZCB0byBzZWFyY2ggc29tZSBjZXJ0YWluICd0ZXh0JyBpbiBjZXJ0YWluIHRhYmxlCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW3RleHQoKT0nIiArIHRleHRfc3RyaW5nICsgIiddIikKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCBsaW5rX3RleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzdW1lIHRoZXJlJ3JlIG11bHRpcGxlIHN1aXRhYmxlICJmaW5kX2VsZW1lbnRfYnlfbGlua190ZXh0Ii4KKyAgICAgICAgSW4gdGhpcyBjaXJjdW1zdGFuY2Ugd2UgbmVlZCB0byBzcGVjaWZ5ICJ0YWJsZSIuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQobGlua190ZXh0KQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCBsaW5rX3RleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VhcmNoIGxpbmstdGV4dCBpbiBjZXJ0YWluIHRhYmxlLiBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHNlYXJjaCBhcmVhLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfbGlua190ZXh0KGxpbmtfdGV4dCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50X2xpc3QKKworCisgICAgZGVmIGZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLCB0YWJsZV9pZCwgbGlua190ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaCBlbGVtZW50IGJ5IHBhcnRpYWwgbGluayB0ZXh0IGluIGNlcnRhaW4gdGFibGUuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dChsaW5rX3RleHQpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudAorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfcGFydGlhbF9saW5rX3RleHRfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIGxpbmtfdGV4dCk6CisgICAgICAgICIiIgorICAgICAgICBBc3N1bWUgdGhlcmUncmUgbXVsdGlwbGUgc3VpdGFibGUgImZpbmRfcGFydGlhbF9lbGVtZW50X2J5X2xpbmtfdGV4dCIuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnRfbGlzdCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50c19ieV9wYXJ0aWFsX2xpbmtfdGV4dChsaW5rX3RleHQpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudF9saXN0CisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnQgZm91bmQnCisgICAgICAgICAgICByYWlzZQorCisKKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3hwYXRoX2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCB4cGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHNlYXJjaCBhcmVhLiBFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBwb3AtdXAgZm9ybS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQorICAgICAgICAgICAgZWxlbWVudCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoKQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfeHBhdGhfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIHhwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaGVscHMgdG8gbmFycm93IGRvd24gc2VhcmNoIGFyZWEuIEVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gZGVhbGluZyB3aXRoIHBvcC11cCBmb3JtLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoeHBhdGgpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnRzIGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnRfbGlzdAorCisKKyAgICBkZWYgc2hvcnRlc3RfeHBhdGgoc2VsZiwgcG5hbWUsIHB2YWx1ZSk6CisgICAgICAgIHJldHVybiAiLy8qW0AiICsgcG5hbWUgKyAiPSciICsgcHZhbHVlICsgIiddIgorCisKKyN1c3VhbGx5IGVsZW1lbnRzIGluIHRoZSBzYW1lIGNvbHVtbiBhcmUgd2l0aCBzYW1lIGNsYXNzIG5hbWUuIGZvciBpbnN0YW5jZTogY2xhc3M9Im91dGNvbWUiIC5UQkQKKyAgICBkZWYgZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KHNlbGYsIGF0dHJfbmFtZSwgYXR0cl92YWx1ZSk6CisgICAgICAgIGNfeHBhdGggPSBzZWxmLnNob3J0ZXN0X3hwYXRoKGF0dHJfbmFtZSwgYXR0cl92YWx1ZSkKKyAgICAgICAgZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKGNfeHBhdGgpCisgICAgICAgIGNfbGlzdCA9IFtdCisgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgY19saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIHJldHVybiBjX2xpc3QKKworCisgICAgZGVmIGdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYsIHRhYmxlX2lkLCBjb2x1bW5fbnVtYmVyKToKKyAgICAgICAgY194cGF0aCA9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10vL3RkWyIgKyBzdHIoY29sdW1uX251bWJlcikgKyAiXSIKKyAgICAgICAgZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKGNfeHBhdGgpCisgICAgICAgIGNfbGlzdCA9IFtdCisgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgY19saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIHJldHVybiBjX2xpc3QKKworCisgICAgZGVmIGdldF90YWJsZV9oZWFkX3RleHQoc2VsZiwgKnRhYmxlX2lkKToKKyNub3cgdGFibGVfaWQgaXMgYSB0dXBsZS4uLgorICAgICAgICBpZiB0YWJsZV9pZDoKKyAgICAgICAgICAgIHRoZWFkX3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZFswXSArICInXS8vdGhlYWQvL3RoW3RleHQoKV0iCisgICAgICAgICAgICBlbGVtZW50cyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgodGhlYWRfeHBhdGgpCisgICAgICAgICAgICBjX2xpc3QgPSBbXQorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudC50ZXh0OgorICAgICAgICAgICAgICAgICAgICBjX2xpc3QuYXBwZW5kKGVsZW1lbnQudGV4dCkKKyAgICAgICAgICAgIHJldHVybiBjX2xpc3QKKyNkZWZhdWx0IHRhYmxlIG9uIHBhZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKi90YWJsZS90aGVhZCIpLnRleHQKKworCisKKyAgICBkZWYgZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZiwgdGFibGVfaWQsICpjb29yZGluYXRlKToKKyAgICAgICAgaWYgbGVuKGNvb3JkaW5hdGUpID09IDA6CisjcmV0dXJuIHdob2xlLXRhYmxlIGVsZW1lbnQKKyAgICAgICAgICAgIGVsZW1lbnRfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoZWxlbWVudF94cGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudAorICAgICAgICByb3cgPSBjb29yZGluYXRlWzBdCisKKyAgICAgICAgaWYgbGVuKGNvb3JkaW5hdGUpID09IDE6CisjcmV0dXJuIHdob2xlLXJvdyBlbGVtZW50CisgICAgICAgICAgICBlbGVtZW50X3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZCArICInXS90Ym9keS90clsiICsgc3RyKHJvdykgKyAiXSIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKGVsZW1lbnRfeHBhdGgpCisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50Cisjbm93IHdlIGFyZSBsb29raW5nIGZvciBhbiBlbGVtZW50IHdpdGggc3BlY2lmaWVkIFggYW5kIFkKKyAgICAgICAgY29sdW1uID0gY29vcmRpbmF0ZVsxXQorCisgICAgICAgIGVsZW1lbnRfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddL3Rib2R5L3RyWyIgKyBzdHIocm93KSArICJdL3RkWyIgKyBzdHIoY29sdW1uKSArICJdIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKGVsZW1lbnRfeHBhdGgpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBnZXRfdGFibGVfZGF0YShzZWxmLCB0YWJsZV9pZCwgcm93X2NvdW50LCBjb2x1bW5fY291bnQpOgorICAgICAgICByb3cgPSAxCisgICAgICAgIExpc3RzID0gW10KKyAgICAgICAgd2hpbGUgcm93IDw9IHJvd19jb3VudDoKKyAgICAgICAgICAgIGNvbHVtbiA9IDEKKyAgICAgICAgICAgIHJvd19jb250ZW50PVtdCisgICAgICAgICAgICB3aGlsZSBjb2x1bW4gPD0gY29sdW1uX2NvdW50OgorICAgICAgICAgICAgICAgIHM9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10vdGJvZHkvdHJbIiArIHN0cihyb3cpICsiXS90ZFsiICsgc3RyKGNvbHVtbikgKyAiXSIKKyAgICAgICAgICAgICAgICB2ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHMpLnRleHQKKyAgICAgICAgICAgICAgICByb3dfY29udGVudC5hcHBlbmQodikKKyAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gKyAxCisgICAgICAgICAgICAgICAgcHJpbnQoInJvd19jb250ZW50PSIscm93X2NvbnRlbnQpCisgICAgICAgICAgICBMaXN0cy5leHRlbmQocm93X2NvbnRlbnQpCisgICAgICAgICAgICBwcmludCBMaXN0c1tyb3ctMV1bMF0KKyAgICAgICAgICAgIHJvdyA9IHJvdyArIDEKKyAgICAgICAgcmV0dXJuIExpc3RzCisKKyAgICAjIFRoZSBpc194eHhfcHJlc2VudCBmdW5jdGlvbnMgb25seSByZXR1cm5zIFRydWUvRmFsc2UKKyAgICAjIEFsbCB0aGUgbG9nIHdvcmsgaXMgZG9uZSBpbiB0ZXN0IHByb2NlZHVyZSwgc28gd2UgY2FuIGVhc2lseSB0cmFjZSBiYWNrCisgICAgIyB1c2luZyBsb2dnaW5nCisgICAgZGVmIGlzX3RleHRfcHJlc2VudCAoc2VsZiwgcGF0dGVybnMpOgorICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKKyAgICAgICAgICAgIGlmIHN0cihwYXR0ZXJuKSBub3QgaW4gc2VsZi5kcml2ZXIucGFnZV9zb3VyY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworICAgIGRlZiBpc19lbGVtZW50X3ByZXNlbnQoc2VsZiwgaG93LCB3aGF0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50KGhvdywgd2hhdCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIGlzX2FsZXJ0X3ByZXNlbnQoc2VsZik6CisgICAgICAgIHRyeTogc2VsZi5kcml2ZXIuc3dpdGNoX3RvX2FsZXJ0KCkKKyAgICAgICAgZXhjZXB0IE5vQWxlcnRQcmVzZW50RXhjZXB0aW9uLCBlOiByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIGNsb3NlX2FsZXJ0X2FuZF9nZXRfaXRzX3RleHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFsZXJ0ID0gc2VsZi5kcml2ZXIuc3dpdGNoX3RvX2FsZXJ0KCkKKyAgICAgICAgICAgIGFsZXJ0X3RleHQgPSBhbGVydC50ZXh0CisgICAgICAgICAgICBpZiBzZWxmLmFjY2VwdF9uZXh0X2FsZXJ0OgorICAgICAgICAgICAgICAgIGFsZXJ0LmFjY2VwdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsZXJ0LmRpc21pc3MoKQorICAgICAgICAgICAgcmV0dXJuIGFsZXJ0X3RleHQKKyAgICAgICAgZmluYWxseTogc2VsZi5hY2NlcHRfbmV4dF9hbGVydCA9IFRydWUKKworCisgICAgZGVmIGdldF9jYXNlX251bWJlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHdoYXQgY2FzZSBhcmUgd2UgcnVubmluZyBub3cKKyAgICAgICAgIiIiCisgICAgICAgIGZ1bmNuYW1lID0gc3lzLl9nZXRmcmFtZSgxKS5mX2NvZGUuY29fbmFtZQorICAgICAgICBjYXNlbm9fc3RyID0gZnVuY25hbWUuc3RyaXAoJ3Rlc3RfJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FzZW5vID0gaW50KGNhc2Vub19zdHIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgImdldCBjYXNlIG51bWJlciBlcnJvciEgcGxlYXNlIGNoZWNrIGlmIGZ1bmMgbmFtZSBpcyB0ZXN0X3h4eCIKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gY2FzZW5vCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIEVORDogQ0FTRSAlcyBsb2cgXG5cbicgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIucXVpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNlbGYudmVyaWZpY2F0aW9uRXJyb3JzKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUEFSVCBJSUk6IHRlc3QgY2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgcGxlYXNlIHJlZmVyIHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD14eHggICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBOb3RlOiB0byBjb21wbHkgd2l0aCB0aGUgdW5pdHRlc3QgZnJhbWV3b3JrLCB3ZSBjYWxsIHRoZXNlIHRlc3RfeHh4IGZ1bmN0aW9ucworIyBmcm9tIHJ1bl90b2FzdGVyY2FzZXMucHkgdG8gYXZvaWQgY2FsbGluZyBzZXRVcCgpIGFuZCB0ZWFyRG93bigpIG11bHRpcGxlIHRpbWVzCisKKworY2xhc3MgdG9hc3Rlcl9jYXNlcyh0b2FzdGVyX2Nhc2VzX2Jhc2UpOgorICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMSAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMShzZWxmKToKKyAgICAgICAgIyB0aGUgcmVhc29uIHdoeSBnZXRfY2FzZV9udW1iZXIgaXMgbm90IGluIHNldFVwIGZ1bmN0aW9uIGlzIHRoYXQKKyAgICAgICAgIyBvdGhlcndpc2UgaXQgcmV0dXJucyAic2V0VXAiIGluc3RlYWQgb2YgInRlc3RfeHh4IgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgIyBvcGVuIGFsbCBjb2x1bW5zCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBhZGRpbmcgZXhwbGljaXRseSB3YWl0IGZvciBjaHJvbWVkcml2ZXIuLi1fLQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInN0YXJ0ZWRfb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgidGltZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIGRpY3Q6IHtsaW50IHRleHQgbmFtZSA6IGFjdHVhbCBjbGFzcyBuYW1lfQorICAgICAgICB0YWJsZV9oZWFkX2RpY3QgPSB7J091dGNvbWUnOidvdXRjb21lJywgJ1JlY2lwZSc6J3RhcmdldCcsICdNYWNoaW5lJzonbWFjaGluZScsICdTdGFydGVkIG9uJzonc3RhcnRlZF9vbicsICdDb21wbGV0ZWQgb24nOidjb21wbGV0ZWRfb24nLCBcCisgICAgICAgICAgICAgICAgJ0Vycm9ycyc6J2Vycm9yc19ubycsICdXYXJuaW5ncyc6J3dhcm5pbmdzX25vJywgJ1RpbWUnOid0aW1lJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzIGNhbm5vdCBiZSBmb3VuZCBvbiBwYWdlIiAlIGtleSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICMgYWZ0ZXIgMXN0IGNsaWNrLCB0aGUgbGlzdCBzaG91bGQgYmUgZWl0aGVyIHNlcXVlbmNlZCBvciBpbnZlcnRlZCwgYnV0IHdlIGRvbid0IGhhdmUgYSAiZGVmYXVsdCBvcmRlciIgaGVyZQorICAgICAgICAgICAgIyB0aGUgcG9pbnQgaXMsIGFmdGVyIGFub3RoZXIgY2xpY2ssIGl0IHNob3VsZCBiZSBhbm90aGVyIG9yZGVyCisgICAgICAgICAgICBpZiBpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCJjYXNlIHBhc3NlZCIpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgQ291bGQgYWRkIG1vcmUgdGVzdCBwYXR0ZXJucyBoZXJlIGluIHRoZSBmdXR1cmUuIEFsc28sIGNvdWxkIHNlYXJjaCBzb21lIGl0ZW1zIG90aGVyIHRoYW4gdGFyZ2V0IGNvbHVtbiBpbiBmdXR1cmUuLgorICAgICAgICBwYXR0ZXJucyA9IFsibWluaW1hbCIsICJzYXRvIl0KKyAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CisgICAgICAgICAgICBvcmlfdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQorICAgICAgICAgICAgcHJpbnQgb3JpX3RhcmdldF9jb2x1bW5fdGV4dHMKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMocGF0dGVybikKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIG5ld190YXJnZXRfY29sdW1uX3RleHRzID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgInRhcmdldCIpCisgICAgICAgICAgICAjIGlmIG5vdGhpbmcgZm91bmQsIHdlIHN0aWxsIGNvdW50IGl0IGFzICJwYXNzIgorICAgICAgICAgICAgaWYgbmV3X3RhcmdldF9jb2x1bW5fdGV4dHM6CisgICAgICAgICAgICAgICAgZm9yIHRleHQgaW4gbmV3X3RhcmdldF9jb2x1bW5fdGV4dHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0ZXh0LmZpbmQocGF0dGVybikpCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICAgICAgdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9yaV90YXJnZXRfY29sdW1uX3RleHRzID09IHRhcmdldF9jb2x1bW5fdGV4dHMpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgd2hlbiBvcGVuaW5nIGEgbmV3IHBhZ2UsICJzdGFydGVkX29uIiBpcyBub3QgZGlzcGxheWVkIGJ5IGRlZmF1bHQKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIGN1cnJlbnRseSBhbGwgdGhlIGRlbGF5IGFyZSBmb3IgY2hyb21lIGRyaXZlciAtXy0KKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzdGFydGVkX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIGl0ZW1zID0gWyJPdXRjb21lIiwgIkNvbXBsZXRlZCBvbiIsICJTdGFydGVkIG9uIiwgIkZhaWxlZCB0YXNrcyIsICJFcnJvcnMiLCAiV2FybmluZ3MiXQorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV90ZXh0X2luX3RhYmxlKCdvdGFibGUnLCBpdGVtKQorICAgICAgICAgICAgICAgICMgdGhpcyBpcyBob3cgd2UgZmluZCAiZmlsdGVyIGljb24iIGluIHRoZSBzYW1lIGxldmVsIGFzIHRlbXBfZWxlbWVudCh3aGVyZSAiYSIgbWVhbnMgY2xpY2thYmxlLCAiaSIgbWVhbnMgaWNvbikKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGVtcF9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi4vLyovYS9pW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgY2Fubm90IGJlIGZvdW5kISAlcyIgJSAoaXRlbSwgZSkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHN0ZXAgNS02CisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ091dGNvbWUnKQorICAgICAgICB0ZW1wX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIuLi8vKi9hL2lbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAjIHRoZSAybmQgb3B0aW9uLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIigvL2lucHV0W0BuYW1lPSdmaWx0ZXInXSlbMl0iKS5jbGljaygpCisgICAgICAgICMgY2xpY2sgIkFwcGx5IiBidXR0b24KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdmaWx0ZXJfb3V0Y29tZSddLy8qW3RleHQoKT0nQXBwbHknXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNScpCisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ0NvbXBsZXRlZCBvbicpCisgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nZmlsdGVyX2NvbXBsZXRlZF9vbiddLy8qW3RleHQoKT0nQXBwbHknXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIHRvIGNvbXBhcmUgdG8gcHJldmlvdXMgb25lCisgICAgICAgICMgcGxlYXNlIG5vdGUgdGhhdCBmb3IgY2hyb21lIGRyaXZlciwgbmVlZCBhIGxpdHRsZSBicmVhayBiZWZvcmUgc2F2aW5nCisgICAgICAgICMgc2NyZWVuIGhlcmUgLV8tCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDYnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImNvcmUtaW1hZ2UiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwNCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwNChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiY29yZS1pbWFnZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiVGFza3MiKS5jbGljaygpCisjICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJBbGwgYnVpbGRzIikuY2xpY2soKQorIyAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgIHNlbGYudGFibGVfbmFtZSA9ICdvdGFibGUnCisgICAgICAgICMgVGhpcyBpcyBob3cgd2UgZmluZCB0aGUgImRlZmF1bHQiIHJvd3MtbnVtYmVyIQorICAgICAgICByb3dzX2Rpc3BsYXllZCA9IGludChTZWxlY3Qoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3Rvcigic2VsZWN0LnBhZ2VzaXplIikpLmZpcnN0X3NlbGVjdGVkX29wdGlvbi50ZXh0KQorICAgICAgICBwcmludCByb3dzX2Rpc3BsYXllZAorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5nZXRfdGFibGVfZWxlbWVudChzZWxmLnRhYmxlX25hbWUsIHJvd3NfZGlzcGxheWVkKSkKKyAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5nZXRfdGFibGVfZWxlbWVudChzZWxmLnRhYmxlX25hbWUsIHJvd3NfZGlzcGxheWVkICsgMSkpCisgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHRhc2tzIgorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCB0YXNrcyddIikpCisKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJidXN5Ym94IikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA1JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgIyBTYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDVfMicpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJjcHVfdXNlZCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkaXNrX2lvIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInRhc2tfbG9nIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV92ZXJzaW9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInRpbWVfdGFrZW4iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgVGhlIG9wZXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBjYXNlOTAxCisgICAgICAgICMgZGljdDoge2xpbnQgdGV4dCBuYW1lIDogYWN0dWFsIGNsYXNzIG5hbWV9CisgICAgICAgIHRhYmxlX2hlYWRfZGljdCA9IHsnT3JkZXInOidvcmRlcicsICdSZWNpcGUnOidyZWNpcGVfbmFtZScsICdUYXNrJzondGFza19uYW1lJywgJ0V4ZWN1dGVkJzonZXhlY3V0ZWQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnT3V0Y29tZSc6J291dGNvbWUnLCAnQ2FjaGUgYXR0ZW1wdCc6J2NhY2hlX2F0dGVtcHQnLCAnVGltZSAoc2VjcyknOid0aW1lX3Rha2VuJywgJ0NQVSB1c2FnZSc6J2NwdV91c2VkJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rpc2sgSS9PIChtcyknOidkaXNrX2lvJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisjIFRoaXMgaXMgdHJpY2t5IGhlcmU6IHdlIGFyZSBkb2luZyBzbyBiZWNhdXNlIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gMQorIyBzYW1lLW5hbWUgbGlua190ZXh0IGluIG9uZSBwYWdlLiBTbyB3ZSBvbmx5IGZpbmQgZWxlbWVudCBpbnNpZGUgdGhlIHRhYmxlCisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisjIGFmdGVyIDFzdCBjbGljaywgdGhlIGxpc3Qgc2hvdWxkIGJlIGVpdGhlciBzZXF1ZW5jZWQgb3IgaW52ZXJ0ZWQsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgImRlZmF1bHQgb3JkZXIiIGhlcmUKKyMgdGhlIHBvaW50IGlzLCBhZnRlciBhbm90aGVyIGNsaWNrLCBpdCBzaG91bGQgYmUgYW5vdGhlciBvcmRlcgorIyB0aGUgZmlzdCBjYXNlIGlzIHNwZWNpYWw6dGhpcyBtZWFucyBldmVyeSBpdGVtIGluIGNvbHVtbl9saXN0IGlzIHRoZSBzYW1lLCBzbworIyBhZnRlciBvbmUgY2xpY2ssIGVpdGhlciBzZXF1ZW5jZWQgb3IgaW52ZXJ0ZWQgd2lsbCBiZSBmaW5lCisgICAgICAgICAgICBpZiAoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkgYW5kIGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkgXAorICAgICAgICAgICAgICAgIG9yIChub3QgY29sdW1uX2xpc3QpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkgb3IgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICBlbGlmIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKyMgc3RlcCA4LTEwCisgICAgICAgICMgZmlsdGVyIGRpY3Q6IHtsaW5rIHRleHQgbmFtZSA6IGZpbHRlciB0YWJsZSBuYW1lIGluIHhwYXRofQorICAgICAgICBmaWx0ZXJfZGljdCA9IHsnRXhlY3V0ZWQnOidmaWx0ZXJfZXhlY3V0ZWQnLCAnT3V0Y29tZSc6J2ZpbHRlcl9vdXRjb21lJywgJ0NhY2hlIGF0dGVtcHQnOidmaWx0ZXJfY2FjaGVfYXR0ZW1wdCd9CisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyX2RpY3Q6CisgICAgICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpCisgICAgICAgICAgICAjIGZpbmQgdGhlIGZpbHRlciBpY29uIGJlc2lkZXMgaXQuCisgICAgICAgICAgICAjIEFuZCBoZXJlIHdlIG11c3QgaGF2ZSBicmVhayAoMSBzZWMpIHRvIGdldCB0aGUgcG9wdXAgc3R1ZmYKKyAgICAgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICBhdmFpbF9vcHRpb25zID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy8qW0BpZD0nIiArIGZpbHRlcl9kaWN0W2tleV0gKyAiJ10vLypbQG5hbWU9J2ZpbHRlciddW25vdChAZGlzYWJsZWQpXSIpCisgICAgICAgICAgICBmb3IgbnVtYmVyIGluIHJhbmdlKDAsIGxlbihhdmFpbF9vcHRpb25zKSk6CisgICAgICAgICAgICAgICAgYXZhaWxfb3B0aW9uc1tudW1iZXJdLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAgICAgICAgICMgY2xpY2sgIkFwcGx5IgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nIiArIGZpbHRlcl9kaWN0W2tleV0gICsgIiddLy8qW0B0eXBlPSdzdWJtaXQnXSIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICAjIGluc2VydCBzY3JlZW4gY2FwdHVyZSBoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA4JykKKyAgICAgICAgICAgICAgICAjIGFmdGVyIHRoZSBsYXN0IG9wdGlvbiB3YXMgY2xpY2tlZCwgd2UgZG9uJ3QgbmVlZCBvcGVyYXRpb24gYmVsb3cgYW55bW9yZQorICAgICAgICAgICAgICAgIGlmIG51bWJlciA8IGxlbihhdmFpbF9vcHRpb25zKS0xOgorICAgICAgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50ID0gc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KQorICAgICAgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi4vLypbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICAgICAgICAgICAgICAgYXZhaWxfb3B0aW9ucyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9JyIgKyBmaWx0ZXJfZGljdFtrZXldICsgIiddLy8qW0BuYW1lPSdmaWx0ZXInXVtub3QoQGRpc2FibGVkKV0iKQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyMgc3RlcCAxMQorICAgICAgICBmb3IgaXRlbSBpbiBbJ29yZGVyJywgJ3Rhc2tfbmFtZScsICdleGVjdXRlZCcsICdvdXRjb21lJywgJ3JlY2lwZV9uYW1lJywgJ3JlY2lwZV92ZXJzaW9uJ106CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfeHBhdGhfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAiLi90Ym9keS90clsxXS8qW0BjbGFzcz0nIiArIGl0ZW0gKyAiJ10vYSIpLmNsaWNrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgIyBsZXQgaXQgZ28uLi4KKyAgICAgICAgICAgICAgICBwcmludCAnbm8gaXRlbSBpbiB0aGUgY29sdW0nICsgaXRlbQorICAgICAgICAgICAgIyBpbnNlcnQgc2NyZWVuIHNob3QgaGVyZQorICAgICAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwMTEnKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisjIHN0ZXAgMTItMTQKKyAgICAgICAgIyBhYm91dCB0ZXN0X2RpY3Q6IHBsZWFzZSByZWZlciB0byB0ZXN0Y2FzZSA5MDQgcmVxdWlyZW1lbnQgc3RlcCAxMi0xNAorICAgICAgICB0ZXN0X2RpY3QgPSB7CisgICAgICAgICAgICAnVGltZSc6eworICAgICAgICAgICAgICAgICdjbGFzcyc6J3RpbWVfdGFrZW4nLAorICAgICAgICAgICAgICAgICdjaGVja19oZWFkX2xpc3QnOlsnUmVjaXBlJywgJ1Rhc2snLCAnRXhlY3V0ZWQnLCAnT3V0Y29tZScsICdUaW1lIChzZWNzKSddLAorICAgICAgICAgICAgICAgICdjaGVja19jb2x1bW5fbGlzdCc6WydjcHVfdXNlZCcsICdjYWNoZV9hdHRlbXB0JywgJ2Rpc2tfaW8nLCAnb3JkZXInLCAncmVjaXBlX3ZlcnNpb24nXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdDUFUgdXNhZ2UnOnsKKyAgICAgICAgICAgICAgICAnY2xhc3MnOidjcHVfdXNlZCcsCisgICAgICAgICAgICAgICAgJ2NoZWNrX2hlYWRfbGlzdCc6WydSZWNpcGUnLCAnVGFzaycsICdFeGVjdXRlZCcsICdPdXRjb21lJywgJ0NQVSB1c2FnZSddLAorICAgICAgICAgICAgICAgICdjaGVja19jb2x1bW5fbGlzdCc6WydjYWNoZV9hdHRlbXB0JywgJ2Rpc2tfaW8nLCAnb3JkZXInLCAncmVjaXBlX3ZlcnNpb24nLCAndGltZV90YWtlbiddCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ0Rpc2sgSS9PJzp7CisgICAgICAgICAgICAgICAgJ2NsYXNzJzonZGlza19pbycsCisgICAgICAgICAgICAgICAgJ2NoZWNrX2hlYWRfbGlzdCc6WydSZWNpcGUnLCAnVGFzaycsICdFeGVjdXRlZCcsICdPdXRjb21lJywgJ0Rpc2sgSS9PIChtcyknXSwKKyAgICAgICAgICAgICAgICAnY2hlY2tfY29sdW1uX2xpc3QnOlsnY3B1X3VzZWQnLCAnY2FjaGVfYXR0ZW1wdCcsICdvcmRlcicsICdyZWNpcGVfdmVyc2lvbicsICd0aW1lX3Rha2VuJ10KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3Iga2V5IGluIHRlc3RfZGljdDoKKyAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnY29yZS1pbWFnZScpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2Jywga2V5KS5jbGljaygpCisgICAgICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2RpY3Rba2V5XVsnY2hlY2tfaGVhZF9saXN0J106CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgnY2xhc3MnLCB0ZXN0X2RpY3Rba2V5XVsnY2xhc3MnXSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKworICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgZm9yIGl0ZW0yIGluIHRlc3RfZGljdFtrZXldWydjaGVja19jb2x1bW5fbGlzdCddOgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZChpdGVtMikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgIyBUQkQ6IHNhdmUgc2NyZWVuIGhlcmUKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTA2ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTA2KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdQYWNrYWdlcycpLmNsaWNrKCkKKyAgICAgICAgIyBmaW5kICJiYXNoIiBpbiBmaXJzdCBjb2x1bW4gKFBhY2thZ2VzKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J290YWJsZSddLy90ZFsxXS8vKlt0ZXh0KCk9J2Jhc2gnXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjZWVuIGhlcmUgdG8gb2JzZXJ2ZS4uLgorIyBzdGVwIDYKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJHZW5lcmF0ZWQgZmlsZXMiKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydGaWxlJywgJ1NpemUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3BhdGgnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY19saXN0KSkKKyMgc3RlcCA3CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUnVudGltZSBkZXBlbmRlbmNpZXMiKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY2VlbiBoZXJlIHRvIG9ic2VydmUuLi4KKyAgICAgICAgIyBub3RlIHRoYXQgaGVyZSB0YWJsZSBuYW1lIGlzIG5vdCAnb3RhYmxlJworICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ2RlcGVuZGVuY2llcycpCisgICAgICAgIGZvciBpdGVtIGluIFsnUGFja2FnZScsICdWZXJzaW9uJywgJ1NpemUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcignZGVwZW5kZW5jaWVzJywgMSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNfbGlzdCkpCisgICAgICAgIHRleHRzID0gWydTaXplJywgJ0xpY2Vuc2UnLCAnUmVjaXBlJywgJ1JlY2lwZSB2ZXJzaW9uJywgJ0xheWVyJywgXAorICAgICAgICAgICAgICAgICAgICAgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnLCAnTGF5ZXIgZGlyZWN0b3J5J10KKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KHRleHRzKSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTEwICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTEwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBpbWFnZV90eXBlPSJjb3JlLWltYWdlLW1pbmltYWwiCisgICAgICAgIHRlc3RfcGFja2FnZTE9ImJ1c3lib3giCisgICAgICAgIHRlc3RfcGFja2FnZTI9ImxpYiIKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaW1hZ2VfdHlwZSkuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAzJykKKworICAgICAgICBzZWxmLnRhYmxlX25hbWUgPSAnb3RhYmxlJworICAgICAgICAjIFRoaXMgaXMgaG93IHdlIGZpbmQgdGhlICJkZWZhdWx0IiByb3dzLW51bWJlciEKKyAgICAgICAgcm93c19kaXNwbGF5ZWQgPSBpbnQoU2VsZWN0KHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoInNlbGVjdC5wYWdlc2l6ZSIpKS5maXJzdF9zZWxlY3RlZF9vcHRpb24udGV4dCkKKyAgICAgICAgcHJpbnQgcm93c19kaXNwbGF5ZWQKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCkpCisgICAgICAgIHNlbGYuZmFpbElmKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCArIDEpKQorCisgICAgICAgICMgQ2hlY2sgdGhlIGRlZmF1bHQgdGFibGUgaXMgc29ydGVkIGJ5IFJlY2lwZQorICAgICAgICB0YXNrc19jb2x1bW5fY291bnQgPSBsZW4oc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlsyXS9kaXZbMl0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgdGFza3NfY29sdW1uX2NvdW50CisgICAgICAgIGRlZmF1bHRfY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMSkKKyAgICAgICAgI3ByaW50IGRlZmF1bHRfY29sdW1uX2xpc3QKKworICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoZGVmYXVsdF9jb2x1bW5fbGlzdCkpCisKKyAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKHRlc3RfcGFja2FnZTEpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBTYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDQnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0XzInKQorCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfYnkiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAnUmVjaXBlJykuY2xpY2soKQorICAgICAgICAjIENoZWNrIHRoZSBpbnZlcnRlZCB0YWJsZSBieSBSZWNpcGUKKyAgICAgICAgIyBSZWNpcGUgZG9lc24ndCBoYXZlIGNsYXNzIG5hbWUKKyAgICAgICAgI2ludmVydGVkX3Rhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQorICAgICAgICAjcHJpbnQgaW52ZXJ0ZWRfdGFza3NfY29sdW1uX2NvdW50CisgICAgICAgICNpbnZlcnRlZF9jb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAxKQorICAgICAgICAjcHJpbnQgaW52ZXJ0ZWRfY29sdW1uX2xpc3QKKworICAgICAgICAjc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJ6bGliIikuY2xpY2soKQorICAgICAgICAjc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICNzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChpbnZlcnRlZF9jb2x1bW5fbGlzdCkpCisgICAgICAgICNzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAnUmVjaXBlJykuY2xpY2soKQorCisgICAgICAgIHRhYmxlX2hlYWRfZGljdCA9IHsnUmVjaXBlJzoncmVjaXBlX19uYW1lJywgJ1JlY2lwZSBmaWxlJzoncmVjaXBlX2ZpbGUnLCAnU2VjdGlvbic6J3JlY2lwZV9zZWN0aW9uJywgXAorICAgICAgICAgICAgICAgICdMaWNlbnNlJzoncmVjaXBlX2xpY2Vuc2UnLCAnTGF5ZXInOidsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsIFwKKyAgICAgICAgICAgICAgICAnTGF5ZXIgYnJhbmNoJzonbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICBpZiAoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkgYW5kIGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkgXAorICAgICAgICAgICAgICAgICAgICBvciAobm90IGNvbHVtbl9saXN0KSA6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpIG9yIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiYWNsIikuY2xpY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkgb3IgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCByZWNpcGVzJ10iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyh0ZXN0X3BhY2thZ2UyKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fc2VhcmNoX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX3NlYXJjaF9saXN0KSBvciBpc19saXN0X2ludmVydGVkKGNvbHVtbl9zZWFyY2hfbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgICAgIGVsaWYgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiYWNsIikuY2xpY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCByZWNpcGVzJ10iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyh0ZXN0X3BhY2thZ2UyKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fc2VhcmNoX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX3NlYXJjaF9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJhY2wiKS5jbGljaygpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoInpsaWIiKS5jbGljaygpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHJlY2lwZXMiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXModGVzdF9wYWNrYWdlMikKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX3NlYXJjaF9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgI3ByaW50IGNvbHVtbl9zZWFyY2hfbGlzdAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9zZWFyY2hfbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKworICAgICAgICAjIEJ1ZyA1OTE5CisgICAgICAgIGZvciBrZXkgaW4gdGFibGVfaGVhZF9kaWN0OgorICAgICAgICAgICAgcHJpbnQga2V5CisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCh0YWJsZV9oZWFkX2RpY3Rba2V5XSkuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgICMgQWZ0ZXIgaGlkZSB0aGUgY29sdW1uLCB0aGUgZGVmYXVsdCB0YWJsZSBzaG91bGQgYmUgc29ydGVkIGJ5IFJlY2lwZQorICAgICAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfcGFydGlhbF9saW5rX3RleHQoImFjbCIpKQorICAgICAgICAgICAgI3ByaW50IHRhc2tzX2NvbHVtbl9jb3VudAorICAgICAgICAgICAgZGVmYXVsdF9jb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAxKQorICAgICAgICAgICAgI3ByaW50IGRlZmF1bHRfY29sdW1uX2xpc3QKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChkZWZhdWx0X2NvbHVtbl9saXN0KSkKKworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX2ZpbGUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX3NlY3Rpb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX2xpY2Vuc2UiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTExICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTExKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdSZWNpcGVzJykuY2xpY2soKQorIyBzdGVwIDMtNQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImxpYiIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIGZvciBvYnNlcnZhdGlvbgorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA1JykKKyMgc3RlcCA2CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImkuaWNvbi1yZW1vdmUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICAjIHdlIGRlbGliZXJhdGVseSB3YW50ICJubyByZXN1bHQiIGhlcmUKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoIm5vIHN1Y2ggaW5wdXQiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3RleHQoIlNob3cgYWxsIHJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLnF1aXQoKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTIgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTIoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyID0gc2VsZi5zZXR1cF9icm93c2VyKHNlbGYpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1JlY2lwZXMnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmVjaXBlIGZpbGUnLCAnU2VjdGlvbicsICdMaWNlbnNlJywgJ0xheWVyJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImJ1dHRvbi5idG4uZHJvcGRvd24tdG9nZ2xlIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZGVwZW5kc19ieSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiYnV0dG9uLmJ0bi5kcm9wZG93bi10b2dnbGUiKS5jbGljaygpCisgICAgICAgICMgY2hlY2sgaWYgY29sdW1ucyBzZWxlY3RlZCBhYm92ZSBpcyBzaG93bgorICAgICAgICBjaGVja19saXN0ID0gWydEZXBlbmRlbmNpZXMnLCAnTGF5ZXIgYnJhbmNoJywgJ0xheWVyIGNvbW1pdCcsICdMYXllciBkaXJlY3RvcnknLCAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnXQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgcHJpbnQgaGVhZF9saXN0CisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgdW4tY2hlY2sgJ2VtIGFsbAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmRyb3Bkb3duLXRvZ2dsZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfYnkiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImJ1dHRvbi5idG4uZHJvcGRvd24tdG9nZ2xlIikuY2xpY2soKQorICAgICAgICAjIGRvbid0IGV4aXN0IGFueSBtb3JlCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTMgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTMoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1JlY2lwZXMnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmVjaXBlIGZpbGUnLCAnU2VjdGlvbicsICdMaWNlbnNlJywgJ0xheWVyJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbgorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTQgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTQoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIGltYWdlX3R5cGU9ImNvcmUtaW1hZ2UtbWluaW1hbCIKKyAgICAgICAgdGVzdF9wYWNrYWdlMT0iYnVzeWJveCIKKyAgICAgICAgdGVzdF9wYWNrYWdlMj0iZ2RibSIKKyAgICAgICAgdGVzdF9wYWNrYWdlMz0iZ2V0dGV4dC1uYXRpdmUiCisgICAgICAgIGRyaXZlciA9IHNlbGYuZHJpdmVyCisgICAgICAgIGRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBkcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGltYWdlX3R5cGUpLmNsaWNrKCkKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KHRlc3RfcGFja2FnZTEpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnRhYmxlX25hbWUgPSAnaW5mb3JtYXRpb24nCisKKyAgICAgICAgdGFza3Nfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHJbMV0vdGQiKSkKKyAgICAgICAgcHJpbnQgdGFza3Nfcm93X2NvdW50CisgICAgICAgIHByaW50IHRhc2tzX2NvbHVtbl9jb3VudAorCisgICAgICAgIFRhc2tzX2NvbHVtbiA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAyKQorICAgICAgICBwcmludCAoIlRhc2tzX2NvbHVtbj0iLCBUYXNrc19jb2x1bW4pCisKKyAgICAgICAga2V5X3Rhc2tzPVsiZG9fZmV0Y2giLCAiZG9fdW5wYWNrIiwgICJkb19wYXRjaCIsICJkb19jb25maWd1cmUiLCAiZG9fY29tcGlsZSIsICJkb19pbnN0YWxsIiwgImRvX3BhY2thZ2UiLCAiZG9fYnVpbGQiXQorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBpIDwgbGVuKGtleV90YXNrcyk6CisgICAgICAgICAgICBpZiBrZXlfdGFza3NbaV0gbm90IGluIFRhc2tzX2NvbHVtbjoKKyAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBNaXNzaW5nIGtleSB0YXNrOiAlcyIgJSBrZXlfdGFza3NbaV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gdGFza3MiICUga2V5X3Rhc2tzW2ldKQorICAgICAgICAgICAgaSA9IGkgKyAxCisKKyAgICAgICAgaWYgVGFza3NfY29sdW1uLmluZGV4KGtleV90YXNrc1swXSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUga2V5X3Rhc2tzWzBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBpbiByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbMF0pCisKKyAgICAgICAgaWYgVGFza3NfY29sdW1uWy0xXSAhPSBrZXlfdGFza3NbLTFdOgorICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgJXMgaXMgbm90IGluIHRoZSByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbLTFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBpbiByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbLTFdKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIHBhY2thZ2VzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikudGV4dAorICAgICAgICBwcmludCBwYWNrYWdlc19uYW1lCisgICAgICAgIHBhY2thZ2VzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihwYWNrYWdlc19uYW1lKSkpCisgICAgICAgIHByaW50IHBhY2thZ2VzX251bQorCisgICAgICAgIHBhY2thZ2VzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzJdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIHByaW50IHBhY2thZ2VzX3Jvd19jb3VudAorCisgICAgICAgIGlmIHBhY2thZ2VzX251bSAhPSBwYWNrYWdlc19yb3dfY291bnQ6CisgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIHBha2NhZ2VzIG51bWJlciBpcyBjb3JyZWN0IikKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJCdWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS50ZXh0CisgICAgICAgIHByaW50IGRlcGVuZHNfbmFtZQorICAgICAgICBkZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihkZXBlbmRzX25hbWUpKSkKKyAgICAgICAgcHJpbnQgZGVwZW5kc19udW0KKworICAgICAgICBpZiBkZXBlbmRzX251bSA9PSAwOgorICAgICAgICAgICAgZGVwZW5kc19tZXNzYWdlID0gcmVwcihkcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgZGVwZW5kc19tZXNzYWdlCisgICAgICAgICAgICBpZiBkZXBlbmRzX21lc3NhZ2UuZmluZCgiaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcy4iKSA8IDA6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIG1lc3NhZ2UgaXNuJ3QgZXhwZWN0ZWQuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJUaGUgbWVzc2FnZSBpcyBleHBlY3RlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXBlbmRzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzNdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgICAgICBwcmludCBkZXBlbmRzX3Jvd19jb3VudAorICAgICAgICAgICAgaWYgZGVwZW5kc19udW0gIT0gZGVwZW5kc19yb3dfY291bnQ6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgbm90IGNvcnJlY3QiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIlRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICgiKS5jbGljaygpCisgICAgICAgIHJkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCByZGVwZW5kc19uYW1lCisgICAgICAgIHJkZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihyZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IHJkZXBlbmRzX251bQorCisgICAgICAgIGlmIHJkZXBlbmRzX251bSA9PSAwOgorICAgICAgICAgICAgcmRlcGVuZHNfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoIiNicm91Z2h0LWluLWJ5ID4gZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgcmRlcGVuZHNfbWVzc2FnZQorICAgICAgICAgICAgaWYgcmRlcGVuZHNfbWVzc2FnZS5maW5kKCJoYXMgbm8gcmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMuIikgPCAwOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGlzbid0IGV4cGVjdGVkLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiVGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgcmV2ZXJzZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCh0ZXN0X3BhY2thZ2UyKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorCisKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KHRlc3RfcGFja2FnZTMpLmNsaWNrKCkKKworICAgICAgICBuYXRpdmVfdGFza3Nfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgbmF0aXZlX3Rhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzFdL3RhYmxlL3Rib2R5L3RyWzFdL3RkIikpCisgICAgICAgIHByaW50IG5hdGl2ZV90YXNrc19yb3dfY291bnQKKyAgICAgICAgcHJpbnQgbmF0aXZlX3Rhc2tzX2NvbHVtbl9jb3VudAorCisgICAgICAgIE5hdGl2ZV9UYXNrc19jb2x1bW4gPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMikKKyAgICAgICAgcHJpbnQgKCJOYXRpdmVfVGFza3NfY29sdW1uPSIsIE5hdGl2ZV9UYXNrc19jb2x1bW4pCisKKyAgICAgICAgbmF0aXZlX2tleV90YXNrcz1bImRvX2ZldGNoIiwgImRvX3VucGFjayIsICAiZG9fcGF0Y2giLCAiZG9fY29uZmlndXJlIiwgImRvX2NvbXBpbGUiLCAiZG9faW5zdGFsbCIsICJkb19idWlsZCJdCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsZW4obmF0aXZlX2tleV90YXNrcyk6CisgICAgICAgICAgICBpZiBuYXRpdmVfa2V5X3Rhc2tzW2ldIG5vdCBpbiBOYXRpdmVfVGFza3NfY29sdW1uOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIE1pc3Npbmcga2V5IHRhc2s6ICVzIiAlIG5hdGl2ZV9rZXlfdGFza3NbaV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gdGFza3MiICUgbmF0aXZlX2tleV90YXNrc1tpXSkKKyAgICAgICAgICAgIGkgPSBpICsgMQorCisgICAgICAgIGlmIE5hdGl2ZV9UYXNrc19jb2x1bW4uaW5kZXgobmF0aXZlX2tleV90YXNrc1swXSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1swXSkKKworICAgICAgICBpZiBOYXRpdmVfVGFza3NfY29sdW1uWy0xXSAhPSBuYXRpdmVfa2V5X3Rhc2tzWy0xXToKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1stMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAoIiVzIGlzIGluIHJpZ2h0IHBvc2l0aW9uIiAlIG5hdGl2ZV9rZXlfdGFza3NbLTFdKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIG5hdGl2ZV9wYWNrYWdlc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgKCIpLnRleHQKKyAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VzX25hbWUKKyAgICAgICAgbmF0aXZlX3BhY2thZ2VzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihuYXRpdmVfcGFja2FnZXNfbmFtZSkpKQorICAgICAgICBwcmludCBuYXRpdmVfcGFja2FnZXNfbnVtCisKKyAgICAgICAgaWYgbmF0aXZlX3BhY2thZ2VzX251bSAhPSAwOgorICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgTmF0aXZlIHRhc2sgc2hvdWxkbid0IGhhdmUgYW55IHBhY2thZ2VzLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYXRpdmVfcGFja2FnZV9tZXNzYWdlID0gcmVwcihkcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZQorICAgICAgICAgICAgaWYgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZS5maW5kKCJkb2VzIG5vdCBidWlsZCBhbnkgcGFja2FnZXMuIikgPCAwOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGZvciBuYXRpdmUgdGFzayBpc24ndCBleHBlY3RlZC4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIlRoZSBtZXNzYWdlIGZvciBuYXRpdmUgdGFzayBpcyBleHBlY3RlZC4iKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorICAgICAgICBuYXRpdmVfZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS50ZXh0CisgICAgICAgIHByaW50IG5hdGl2ZV9kZXBlbmRzX25hbWUKKyAgICAgICAgbmF0aXZlX2RlcGVuZHNfbnVtID0gc3RyaW5nLmF0b2koZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKG5hdGl2ZV9kZXBlbmRzX25hbWUpKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX2RlcGVuZHNfbnVtCisKKyAgICAgICAgbmF0aXZlX2RlcGVuZHNfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbM10vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX2RlcGVuZHNfcm93X2NvdW50CisKKyAgICAgICAgaWYgbmF0aXZlX2RlcGVuZHNfbnVtICE9IG5hdGl2ZV9kZXBlbmRzX3Jvd19jb3VudDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgY29ycmVjdCIpCisKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgbmF0aXZlX3JkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCBuYXRpdmVfcmRlcGVuZHNfbmFtZQorICAgICAgICBuYXRpdmVfcmRlcGVuZHNfbnVtID0gc3RyaW5nLmF0b2koZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKG5hdGl2ZV9yZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IG5hdGl2ZV9yZGVwZW5kc19udW0KKworICAgICAgICBuYXRpdmVfcmRlcGVuZHNfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbNF0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX3JkZXBlbmRzX3Jvd19jb3VudAorCisgICAgICAgIGlmIG5hdGl2ZV9yZGVwZW5kc19udW0gIT0gbmF0aXZlX3JkZXBlbmRzX3Jvd19jb3VudDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSByZXZlcnNlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgbm90IGNvcnJlY3QiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgcmV2ZXJzZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTUgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTUoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIHN0ZXAgMworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdDb25maWd1cmF0aW9uJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJCaXRCYWtlIHZhcmlhYmxlcyIpLmNsaWNrKCkKKyMgc3RlcCA0CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygibGliIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIHRvIHNlZSByZXN1bHQKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNCcpCisjIHN0ZXAgNQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHByaW50IGhlYWRfbGlzdAorICAgICAgICBwcmludCBsZW4oaGVhZF9saXN0KQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGVhZF9saXN0ID09IFsnVmFyaWFibGUnLCAnVmFsdWUnLCAnU2V0IGluIGZpbGUnLCAnRGVzY3JpcHRpb24nXSkKKyMgc3RlcCA4CisgICAgICAgICMgc2VhcmNoIG90aGVyIHN0cmluZy4gYW5kIGNsaWNrICJWYXJpYWJsZSIgdG8gcmUtc29ydCwgY2hlY2sgaWYgdGFibGUKKyAgICAgICAgIyBoZWFkIGlzIHN0aWxsIHRoZSBzYW1lCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygicG9reSIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnVmFyaWFibGUnKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA9PSBbJ1ZhcmlhYmxlJywgJ1ZhbHVlJywgJ1NldCBpbiBmaWxlJywgJ0Rlc2NyaXB0aW9uJ10pCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1ZhcmlhYmxlJykuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoZWFkX2xpc3QgPT0gWydWYXJpYWJsZScsICdWYWx1ZScsICdTZXQgaW4gZmlsZScsICdEZXNjcmlwdGlvbiddKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTYgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTYoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIHN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ0NvbmZpZ3VyYXRpb24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICB2YXJpYWJsZV9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQodmFyaWFibGVfbGlzdCkpCisjIHN0ZXAgNAorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ290YWJsZScsICdWYXJpYWJsZScpLmNsaWNrKCkKKyAgICAgICAgdmFyaWFibGVfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICd2YXJpYWJsZV9uYW1lJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQodmFyaWFibGVfbGlzdCkpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1ZhcmlhYmxlJykuY2xpY2soKQorIyBzdGVwIDUKKyAgICAgICAgIyBzZWFyY2hpbmcgd29uJ3QgY2hhbmdlIHRoZSBzZXF1ZW50aWFsaXR5CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygibGliIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICB2YXJpYWJsZV9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQodmFyaWFibGVfbGlzdCkpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkyMyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkyMyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgU3RlcCAyCisgICAgICAgICMgZGVmYXVsdCBzZXF1ZW5jZSBpbiAiQ29tcGxldGVkIG9uIiBjb2x1bW4gaXMgaW52ZXJ0ZWQKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ2NvbXBsZXRlZF9vbicpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNfbGlzdCkpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzdGFydGVkX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxvZyIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJ0aW1lIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydPdXRjb21lJywgJ1RhcmdldCcsICdNYWNoaW5lJywgJ1N0YXJ0ZWQgb24nLCAnQ29tcGxldGVkIG9uJywgJ0ZhaWxlZCB0YXNrcycsICdFcnJvcnMnLCAnV2FybmluZ3MnLCAnV2FybmluZ3MnLCAnVGltZSddOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MjQgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MjQoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIFBsZWFzZSByZWZlciB0byBjYXNlIDkyNCByZXF1aXJlbWVudAorICAgICAgICAjIGRlZmF1bHQgc2VxdWVuY2UgaW4gIkNvbXBsZXRlZCBvbiIgY29sdW1uIGlzIGludmVydGVkCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdjb21wbGV0ZWRfb24nKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjX2xpc3QpKQorICAgICAgICAjIFN0ZXAgNAorICAgICAgICAjIGNsaWNrIEVycm9ycyAsIG9yZGVyIGluICJDb21wbGV0ZWQgb24iIHNob3VsZCBiZSBkaXN0dXJiZWQuIFRoZW4gaGlkZQorICAgICAgICAjIGVycm9yIGNvbHVtbiB0byBjaGVjayBpZiBvcmRlciBpbiAiQ29tcGxldGVkIG9uIiBjYW4gYmUgcmVzdG9yZWQKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnRXJyb3JzJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZXJyb3JzX25vIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgTm90ZTogd2l0aG91dCB0aW1lLnNsZWVwIGhlcmUsIHRoZXJlJ2xsIGJlIHVucHJlZGljdGFibGUgZXJyb3IuLlRCRAorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdjb21wbGV0ZWRfb24nKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjX2xpc3QpKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDAgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIFN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1BhY2thZ2VzJykuY2xpY2soKQorICAgICAgICBjaGVja19oZWFkX2xpc3QgPSBbJ1BhY2thZ2UnLCAnUGFja2FnZSB2ZXJzaW9uJywgJ1NpemUnLCAnUmVjaXBlJ10KKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGVhZF9saXN0ID09IGNoZWNrX2hlYWRfbGlzdCkKKyMgU3RlcCA0CisgICAgICAgICMgcHVsbGRvd24gbWVudQorICAgICAgICBvcHRpb25faWRzID0gWydyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgXAorICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQnLCAnbGljZW5zZScsICdyZWNpcGVfX3ZlcnNpb24nXQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIGZvciBpdGVtIGluIG9wdGlvbl9pZHM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKGl0ZW0pLmlzX3NlbGVjdGVkKCk6CisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKGl0ZW0pLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gb2JzZXJ2ZSB0aGF0ICdQYWNrYWdlJyBhbmQgJ1BhY2thZ2UgdmVyc2lvbicgaXMKKyAgICAgICAgIyBub3Qgc2VsZWN0YWJsZQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQxICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQxKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAjIFN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1BhY2thZ2VzJykuY2xpY2soKQorICAgICAgICAjIGNvbHVtbiAtLSBQYWNrYWdlCisgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcignb3RhYmxlJywgMSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnU2l6ZScpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQyICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQyKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJQYWNrYWdlcyIpLmNsaWNrKCkKKyAgICAgICAgI2dldCBpbml0aWFsIHRhYmxlIGhlYWRlcgorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgICNyZW1vdmUgdGhlIFJlY2lwZSBjb2x1bW4gZnJvbSB0YWJsZSBoZWFkZXIKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbmFtZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjZ2V0IG1vZGlmaWVkIHRhYmxlIGhlYWRlcgorICAgICAgICBuZXdfaGVhZCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA+IG5ld19oZWFkKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQzICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQzKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJQYWNrYWdlcyIpLmNsaWNrKCkKKyAgICAgICAgI3NlYXJjaCBmb3IgdGhlICJiYXNoIiBwYWNrYWdlIC0+IHRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgcHJlc2VudAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImJhc2giKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICNjaGVjayBmb3IgdGhlIHNlYXJjaCByZXN1bHQgbWVzc2FnZSAiWFggcGFja2FnZXMgZm91bmQiCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudCgicGFja2FnZXMgZm91bmQiKSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ0ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ0KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMTogdGVzdCBSZWNpcGVzIHBhZ2Ugc3R1ZmYKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUmVjaXBlcyIpLmNsaWNrKCkKKyAgICAgICAgIyBmb3IgdGhlc2UgMyBpdGVtcywgZGVmYXVsdCBzdGF0dXMgaXMgbm90LWNoZWNrZWQKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgb3RhYmxlIGlzIHRoZSByZWNpcGVzIHRhYmxlIGhlcmUKKyAgICAgICAgb3RhYmxlX2hlYWRfdGV4dCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0IiwgIkxheWVyIGRpcmVjdG9yeSJdOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBub3QgaW4gb3RhYmxlX2hlYWRfdGV4dCkKKyAgICAgICAgIyBjbGljayB0aGUgZmlzdCByZWNpcGUsIHdoYXRldmVyIGl0IGlzCisgICAgICAgIHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoIm90YWJsZSIsIDEsIDEpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCIsICJSZWNpcGUgZmlsZSJdKSkKKworICAgICAgICAjIHN0ZXAgMjogdGVzdCBQYWNrYWdlcyBwYWdlIHN0dWZmLiBhbG1vc3Qgc2FtZSBhcyBhYm92ZQorICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUGFja2FnZXMiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBvdGFibGVfaGVhZF90ZXh0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCJvdGFibGUiKQorICAgICAgICBmb3IgaXRlbSBpbiBbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gbm90IGluIG90YWJsZV9oZWFkX3RleHQpCisgICAgICAgICMgY2xpY2sgdGhlIGZpc3QgcmVjaXBlLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmdldF90YWJsZV9lbGVtZW50KCJvdGFibGUiLCAxLCAxKS5jbGljaygpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudChbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXSkpCisKKyAgICAgICAgIyBzdGVwIDM6IHRlc3QgUGFja2FnZXMgY29yZS1pbWFnZS1taW5pbWFsKGltYWdlcykgc3R1ZmYuIGFsbW9zdCBzYW1lIGFzIGFib3ZlLiBOb3RlIHdoZW4gZnV0dXJlIGVsZW1lbnQtaWQgY2hhbmdlcy4uLgorICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfbmFtZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl9icmFuY2giKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIG90YWJsZV9oZWFkX3RleHQgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoIm90YWJsZSIpCisgICAgICAgIGZvciBpdGVtIGluIFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCJdOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBub3QgaW4gb3RhYmxlX2hlYWRfdGV4dCkKKyAgICAgICAgIyBjbGljayB0aGUgZmlzdCByZWNpcGUsIHdoYXRldmVyIGl0IGlzCisgICAgICAgIHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoIm90YWJsZSIsIDEsIDEpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCJdKSkKKworICAgICAgICAjIHN0ZXAgNDogY2hlY2sgQ29uZmlndXJhdGlvbiBwYWdlCisgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJDb25maWd1cmF0aW9uIikuY2xpY2soKQorICAgICAgICBvdGFibGVfaGVhZF90ZXh0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0Il06CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIG5vdCBpbiBvdGFibGVfaGVhZF90ZXh0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDUgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDUoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIGZvciBpdGVtcyBpbiBbIlBhY2thZ2VzIiwgIlJlY2lwZXMiLCAiVGFza3MiXToKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChpdGVtcykuY2xpY2soKQorCisgICAgICAgICAgICAjIHRoaXMgbWF5IGJlIHBhZ2Ugc3BlY2lmaWMuIElmIGZ1dHVyZSBwYWdlIGNvbnRlbnQgY2hhbmdlcywgdHJ5IHRvIHJlcGxhY2UgaXQgd2l0aCBuZXcgeHBhdGgKKyAgICAgICAgICAgIHhwYXRoX3Nob3dyb3dzID0gIi9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbMl0vZGl2WzJdL2RpdlsyXS9kaXYvZGl2L2RpdlsyXS9zZWxlY3QiCisgICAgICAgICAgICB4cGF0aF90YWJsZSA9ICIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS90YWJsZS90Ym9keSIKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9zaG93cm93cykuY2xpY2soKQorICAgICAgICAgICAgcm93c19kaXNwbGF5ZWQgPSBpbnQoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX3Nob3dyb3dzICsgIi9vcHRpb25bMl0iKS50ZXh0KQorCisgICAgICAgICAgICAjIG5vdCBzdXJlIGlmIHRoaXMgaXMgYSBTZWxlbml1bSBTZWxlY3QgYnVnOiBJZiBwYWdlIGlzIG5vdCByZWZyZXNoZWQgaGVyZSwgInNlbGVjdChieSB2aXNpYmxlIHRleHQpIiBvcGVyYXRpb24gd2lsbCBnbyBiYWNrIHRvIDEwMC1yb3cgcGFnZQorICAgICAgICAgICAgIyBTdXJlIHdlIGNhbiB1c2UgZHJpdmVyLmdldCh1cmwpIHRvIHJlZnJlc2ggcGFnZSwgYnV0IHNpbmNlIHBhZ2Ugd2lsbCB2YXJ5LCB3ZSB1c2UgY2xpY2sgbGluayB0ZXh0IGhlcmUKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaXRlbXMpLmNsaWNrKCkKKyAgICAgICAgICAgIFNlbGVjdChzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJzZWxlY3QucGFnZXNpemUiKSkuc2VsZWN0X2J5X3Zpc2libGVfdGV4dChzdHIocm93c19kaXNwbGF5ZWQpKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfZWxlbWVudF9wcmVzZW50KEJ5LlhQQVRILCB4cGF0aF90YWJsZSArICIvdHJbIiArIHN0cihyb3dzX2Rpc3BsYXllZCkgKyJdIikpCisgICAgICAgICAgICBzZWxmLmZhaWxJZihzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQrMSkgKyJdIikpCisKKyAgICAgICAgICAgICMgY2xpY2sgMXN0IHBhY2thZ2UsIHRoZW4gZ28gYmFjayB0byBjaGVjayBpZiBpdCdzIHN0aWxsIHRob3NlIHJvd3Mgc2hvd24uCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoeHBhdGhfdGFibGUgKyAiL3RyWzFdL3RkWzFdIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChpdGVtcykuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfZWxlbWVudF9wcmVzZW50KEJ5LlhQQVRILCB4cGF0aF90YWJsZSArICIvdHJbIiArIHN0cihyb3dzX2Rpc3BsYXllZCkgKyJdIikpCisgICAgICAgICAgICBzZWxmLmZhaWxJZihzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQrMSkgKyJdIikpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0NiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0NihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQ29uZmlndXJhdGlvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDMtNAorICAgICAgICBjaGVja19saXN0ID0gWyJTdW1tYXJ5IiwgIkJpdEJha2UgdmFyaWFibGVzIl0KKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChob3c9QnkuTElOS19URVhULCB3aGF0PWl0ZW0pOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBub3QgZm91bmQiICVpdGVtKQorICAgICAgICBpZiBub3Qgc2VsZi5pc190ZXh0X3ByZXNlbnQoWydMYXllcnMnLCAnTGF5ZXInLCAnTGF5ZXIgYnJhbmNoJywgJ0xheWVyIGNvbW1pdCddKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0ZXh0IG5vdCBmb3VuZCIpCisgICAgICAgICMgc3RlcCA1CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICBpZiBub3Qgc2VsZi5pc190ZXh0X3ByZXNlbnQoWydWYXJpYWJsZScsICdWYWx1ZScsICdTZXQgaW4gZmlsZScsICdEZXNjcmlwdGlvbiddKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0ZXh0IG5vdCBmb3VuZCIpCisgICAgICAgICMgVGhpcyBtYXkgYmUgdW5zdGFibGUgYmVjYXVzZSBpdCdzIHBhZ2Utc3BlY2lmaWMKKyAgICAgICAgIyBzdGVwIDY6IHRoaXMgaXMgaG93IHdlIGZpbmQgZmlsdGVyIGJlc2lkZSAiU2V0IGluIGZpbGUiCisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X3RleHRfaW5fdGFibGUoJ290YWJsZScsICJTZXQgaW4gZmlsZSIpCisgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiKC8vaW5wdXRbQG5hbWU9J2ZpbHRlciddKVszXSIpLmNsaWNrKCkKKyAgICAgICAgYnRucyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmJ0bi1wcmltYXJ5IikKKyAgICAgICAgZm9yIGJ0biBpbiBidG5zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJ0bi5jbGljaygpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA2JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUKKyAgICAgICAgIyBzdGVwIDcKKyAgICAgICAgIyB3ZSBzaG91bGQgbWFudWFsbHkgY2hlY2sgdGhlIHN0ZXAgNi04IHJlc3VsdCB1c2luZyBzY3JlZW5zaG90CisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDcnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCA5CisgICAgICAgICMgY2xpY2sgdGhlIDFzdCBpdGVtLCBubyBtYXR0ZXIgd2hhdCBpdCBpcworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J290YWJsZSddL3Rib2R5L3RyWzFdL3RkWzFdL2EiKS5jbGljaygpCisgICAgICAgICMgZ2l2ZSBpdCAxIHNlYyBzbyB0aGUgcG9wLXVwIGJlY29tZXMgdGhlICJhY3RpdmVfZWxlbWVudCIKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuc3dpdGNoX3RvLmFjdGl2ZV9lbGVtZW50CisgICAgICAgIGNoZWNrX2xpc3QgPSBbJ09yZGVyJywgJ0NvbmZpZ3VyYXRpb24gZmlsZScsICdPcGVyYXRpb24nLCAnTGluZSBudW1iZXInXQorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gZWxlbWVudC50ZXh0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBub3QgZm91bmQiICVpdGVtKQorICAgICAgICAjIGFueSBiZXR0ZXIgd2F5IHRvIGNsb3NlIHRoaXMgcG9wLXVwPyAuLi4gVEJECisgICAgICAgIGVsZW1lbnQuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoImNsb3NlIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMTAgOiBuZWVkIHRvIG1hbnVhbGx5IGNoZWNrICJZb2N0byBNYW51YWwiIGluIHNhdmVkIHNjcmVlbgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tc2hhcmUuZ2V0LWluZm8iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nbmF0aXZlJywgYXBwZW5kX25hbWU9J3N0ZXAxMCcpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0NyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0NyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnQ29uZmlndXJhdGlvbicpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDIKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQml0QmFrZSB2YXJpYWJsZXMiKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGRlZiB4cGF0aF9vcHRpb24oY29sdW1uX25hbWUpOgorICAgICAgICAgICAgIyByZXR1cm4geHBhdGggb2Ygb3B0aW9ucyB1bmRlciAiRWRpdCBjb2x1bW5zIiBidXR0b24KKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNob3J0ZXN0X3hwYXRoKCdpZCcsICduYXZUYWInKSArIHNlbGYuc2hvcnRlc3RfeHBhdGgoJ2lkJywgJ2VkaXRjb2wnKSBcCisgICAgICAgICAgICAgICAgKyBzZWxmLnNob3J0ZXN0X3hwYXRoKCdpZCcsIGNvbHVtbl9uYW1lKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgICMgYnkgZGVmYXVsdCwgb3B0aW9uICJEZXNjcmlwdGlvbiIgYW5kICJTZXQgaW4gZmlsZSIgd2VyZSBjaGVja2VkCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2Rlc2NyaXB0aW9uJykpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX29wdGlvbignZmlsZScpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnZWRpdC1jb2x1bW5zLWJ1dHRvbicpLmNsaWNrKCkKKyAgICAgICAgY2hlY2tfbGlzdCA9IFsnRGVzY3JpcHRpb24nLCAnU2V0IGluIGZpbGUnXQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgIyBjaGVjayB0aGVzZSAyIG9wdGlvbnMgYW5kIHZlcmlmeSBhZ2FpbgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2Rlc2NyaXB0aW9uJykpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX29wdGlvbignZmlsZScpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnZWRpdC1jb2x1bW5zLWJ1dHRvbicpLmNsaWNrKCkKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDggICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDgoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ0NvbmZpZ3VyYXRpb24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICAjZ2V0IG51bWJlciBvZiB2YXJpYWJsZXMgdmlzaWJsZSBieSBkZWZhdWx0CisgICAgICAgIG51bWJlcl9iZWZvcmVfc2VhcmNoID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ3BhZ2UtaGVhZGVyJykudGV4dAorICAgICAgICAjIHNlYXJjaCBmb3IgYSB3aGlsZS4uLgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoIkJCIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjZ2V0IG51bWJlciBvZiB2YXJpYWJsZXMgdmlzaWJsZSBhZnRlciBzZWFyY2gKKyAgICAgICAgbnVtYmVyX2FmdGVyX3NlYXJjaCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdwYWdlLWhlYWRlcicpLnRleHQKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG51bWJlcl9iZWZvcmVfc2VhcmNoID4gbnVtYmVyX2FmdGVyX3NlYXJjaCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ5ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ5KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdjb3JlLWltYWdlLW1pbmltYWwnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgaW5jbHVkZWQiKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJEaXJlY3Rvcnkgc3RydWN0dXJlIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoZSkKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydQYWNrYWdlJywgJ1BhY2thZ2UgdmVyc2lvbicsICdTaXplJywgJ0RlcGVuZGVuY2llcycsICdSZXZlcnNlIGRlcGVuZGVuY2llcycsICdSZWNpcGUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgIyBzdGVwIDUtNgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGVjdGFibGVfY2xhc3MgPSAnY2hlY2tib3gnCisgICAgICAgICMgbWluaW11bS10YWJsZSA6IG1lYW5zIHVuc2VsZWN0YWJsZSBpdGVtcworICAgICAgICB1bnNlbGVjdGFibGVfY2xhc3MgPSAnY2hlY2tib3ggbXV0ZWQnCisgICAgICAgIHNlbGVjdGFibGVfY2hlY2tfbGlzdCA9IFsnRGVwZW5kZW5jaWVzJywgJ0xheWVyJywgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZScsICdSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2l6ZScsICdTaXplIG92ZXIgdG90YWwgKCUpJ10KKyAgICAgICAgdW5zZWxlY3RhYmxlX2NoZWNrX2xpc3QgPSBbJ1BhY2thZ2UnLCAnUGFja2FnZSB2ZXJzaW9uJ10KKyAgICAgICAgc2VsZWN0YWJsZV9saXN0ID0gbGlzdCgpCisgICAgICAgIHVuc2VsZWN0YWJsZV9saXN0ID0gbGlzdCgpCisgICAgICAgIHNlbGVjdGFibGVfZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSdlZGl0Y29sJ10vLypbQGNsYXNzPSciICsgc2VsZWN0YWJsZV9jbGFzcyArICInXSIpCisgICAgICAgIHVuc2VsZWN0YWJsZV9lbGVtZW50cyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9J2VkaXRjb2wnXS8vKltAY2xhc3M9JyIgKyB1bnNlbGVjdGFibGVfY2xhc3MgKyAiJ10iKQorICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxlY3RhYmxlX2VsZW1lbnRzOgorICAgICAgICAgICAgc2VsZWN0YWJsZV9saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIGZvciBlbGVtZW50IGluIHVuc2VsZWN0YWJsZV9lbGVtZW50czoKKyAgICAgICAgICAgIHVuc2VsZWN0YWJsZV9saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgICMgY2hlY2sgdGhlbQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxlY3RhYmxlX2NoZWNrX2xpc3Q6CisgICAgICAgICAgICBpZiBpdGVtIG5vdCBpbiBzZWxlY3RhYmxlX2xpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiAlcyBub3QgZm91bmQgaW4gZHJvcGRvd24gbWVudSBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgIGZvciBpdGVtIGluIHVuc2VsZWN0YWJsZV9jaGVja19saXN0OgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gdW5zZWxlY3RhYmxlX2xpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiAlcyBub3QgZm91bmQgaW4gZHJvcGRvd24gbWVudSBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDcKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJEaXJlY3Rvcnkgc3RydWN0dXJlIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ2RpcnRhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydEaXJlY3RvcnkgLyBGaWxlJywgJ1N5bWJvbGljIGxpbmsgdG8nLCAnU291cmNlIHBhY2thZ2UnLCAnU2l6ZScsICdQZXJtaXNzaW9ucycsICdPd25lcicsICdHcm91cCddOgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gaGVhZF9saXN0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgbm90IGZvdW5kIGluIERpcmVjdG9yeSBzdHJ1Y3R1cmUgdGFibGUgaGVhZCBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk1MCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk1MChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgc3RlcDMmNDogc28gZmFyIHdlJ3JlIG5vdCBzdXJlIGlmIHRoZXJlJ3MgInN1Y2Nlc3NmdWwgYnVpbGQiIG9yICJmYWlsZWQKKyAgICAgICAgIyBidWlsZCIuSWYgZWl0aGVyIG9mIHRoZW0gZG9lc24ndCBleGlzdCwgd2UgY2FuIHN0aWxsIGdvIG9uIG90aGVyIHN0ZXBzCisgICAgICAgIGNoZWNrX2xpc3QgPSBbJ0NvbmZpZ3VyYXRpb24nLCAnVGFza3MnLCAnUmVjaXBlcycsICdQYWNrYWdlcycsICdUaW1lJywgJ0NQVSB1c2FnZScsICdEaXNrIEkvTyddCisgICAgICAgIGhhc19zdWNjZXNzZnVsX2J1aWxkID0gMQorICAgICAgICBoYXNfZmFpbGVkX2J1aWxkID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXNzX2ljb24gPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAY2xhc3M9J2ljb24tb2stc2lnbiBzdWNjZXNzJ10iKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygibm8gc3VjY2Vzc2Z1bCBidWlsZCBleGlzdHMiKQorICAgICAgICAgICAgaGFzX3N1Y2Nlc3NmdWxfYnVpbGQgPSAwCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGhhc19zdWNjZXNzZnVsX2J1aWxkOgorICAgICAgICAgICAgcGFzc19pY29uLmNsaWNrKCkKKyAgICAgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSB0byBjaGVjayBpZiBpdCBtYXRjaGVzIHJlcXVpcmVtZW50LgorICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDNfMScpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCBpdGVtKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJsaW5rICAlcyBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIHBhZ2UiICUgaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKyAgICAgICAgICAgICMgc3RlcCA2CisgICAgICAgICAgICBjaGVja19saXN0XzIgPSBbJ1BhY2thZ2VzIGluY2x1ZGVkJywgJ1RvdGFsIHBhY2thZ2Ugc2l6ZScsIFwKKyAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZSBtYW5pZmVzdCcsICdJbWFnZSBmaWxlcyddCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoY2hlY2tfbGlzdF8yKSkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmYWlsX2ljb24gPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAY2xhc3M9J2ljb24tbWludXMtc2lnbiBlcnJvciddIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGhhc19mYWlsZWRfYnVpbGQgPSAwCisgICAgICAgICAgICBzZWxmLmxvZy5pbmZvKCJubyBmYWlsZWQgYnVpbGQgZXhpc3RzIikKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgaGFzX2ZhaWxlZF9idWlsZDoKKyAgICAgICAgICAgIGZhaWxfaWNvbi5jbGljaygpCisgICAgICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gY2hlY2sgaWYgaXQgbWF0Y2hlcyByZXF1aXJlbWVudC4KKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAzXzInKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgaXRlbSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigibGluayAgJXMgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBwYWdlIiAlIGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICAgICAjIHN0ZXAgNyBpbnZvbHZlZAorICAgICAgICAgICAgY2hlY2tfbGlzdF8zID0gWydNYWNoaW5lJywgJ0Rpc3RybycsICdMYXllcnMnLCAnVG90YWwgbnVtYmVyIG9mIHRhc2tzJywgJ1Rhc2tzIGV4ZWN1dGVkJywgXAorICAgICAgICAgICAgICAgICAgICAgICdUYXNrcyBub3QgZXhlY3V0ZWQnLCAnUmV1c2UnLCAnUmVjaXBlcyBidWlsdCcsICdQYWNrYWdlcyBidWlsdCddCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoY2hlY2tfbGlzdF8zKSkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NTEgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NTEoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIGN1cnJlbnRseSB0ZXN0IGNhc2UgaXRzZWxmIGlzbid0IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyAiMSBzdWNjZXNzZnVsIGFuZAorICAgICAgICAjIDEgZmFpbGVkIGJ1aWxkIgorICAgICAgICBoYXNfc3VjY2Vzc2Z1bF9idWlsZCA9IDEKKyAgICAgICAgaGFzX2ZhaWxlZF9idWlsZCA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmFpbF9pY29uID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGNsYXNzPSdpY29uLW1pbnVzLXNpZ24gZXJyb3InXSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBoYXNfZmFpbGVkX2J1aWxkID0gMAorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygibm8gZmFpbGVkIGJ1aWxkIGV4aXN0cyIpCisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgaWYgdGhlcmUncyBmYWlsZWQgYnVpbGQsIHdlIGNhbiBwcm9jZWVkCisgICAgICAgIGlmIGhhc19mYWlsZWRfYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoImVycm9yIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICMgbm90IHN1cmUgaWYgdGhlcmUgIm11c3QgYmUiIHNvbWUgd2FybmluZ3MsIHNvIGhlcmUgc2F2ZSBhIHNjcmVlbgorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTU1ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTU1KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygiIFlvdSBzaG91bGQgbWFudWFsbHkgY3JlYXRlIGFsbCBpbWFnZXMgYmVmb3JlIHRlc3Qgc3RhcnRzISIpCisgICAgICAgICMgU28gZmFyIHRoZSBjYXNlIGl0c2VsZiBpcyBub3QgcmVzcG9uc2FibGUgZm9yIGNyZWF0aW5nIGFsbCBzb3J0cyBvZiBpbWFnZXMuCisgICAgICAgICMgU28gYXNzdW1pbmcgdGhleSBhcmUgYWxyZWFkeSB0aGVyZQorICAgICAgICAjIHN0ZXAgMgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSB0byBzZWUgdGhlIHBhZ2UgY29tcG9uZW50CisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk1NiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk1NihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgc3RlcCAyLTMgbmVlZCB0byBydW4gbWFudWFsbHkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygic3RlcCAyLTM6IGNoZWNraW5nIHRoZSBoZWxwIG1lc3NhZ2Ugd2hlbiB5b3UgaG92ZXIgb24gaGVscCBpY29uIG9mIHRhcmdldCxcCisgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzLCByZWNpcGVzLCBwYWNrYWdlcyBuZWVkIHRvIHJ1biBtYW51YWxseSIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiVG9hc3RlciBtYW51YWwiKS5jbGljaygpCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3RleHRfcHJlc2VudCgiVG9hc3RlciBNYW51YWwiKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJwbGVhc2UgY2hlY2sgW1RvYXN0ZXIgbWFudWFsXSBsaW5rIG9uIHBhZ2UiKQorICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvdG9hc3Rlcl90ZXN0LmNmZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfdGVzdC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwNWY5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfdGVzdC5jZmcKQEAgLTAsMCArMSwyMSBAQAorIyBDb25maWd1cmF0aW9uIGZpbGUgZm9yIHRvYXN0ZXJfdGVzdAorIyBTb3J0ZWQgYnkgZGlmZmVyZW50IGhvc3QgdHlwZQorCisjIHRlc3QgYnJvd3NlciBjb3VsZCBiZTogZmlyZWZveDsgY2hyb21lOyBpZShzdGlsbCB1bmRlciBkZXZlbG9wbWVudCkKKyMgbG9nZ2luZ19sZXZlbCBjb3VsZCBiZTogQ1JJVElDQUw7IEVSUk9SOyBXQVJOSU5HOyBJTkZPOyBERUJVRzsgTk9UU0VUCisKKworW3RvYXN0ZXJfdGVzdF9saW51eF0KK3RvYXN0ZXJfdXJsID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMCcKK3Rlc3RfYnJvd3NlciA9ICdmaXJlZm94JwordGVzdF9jYXNlcyA9IFs5NDZdCitsb2dnaW5nX2xldmVsID0gJ0lORk8nCisKKworW3RvYXN0ZXJfdGVzdF93aW5kb3dzXQordG9hc3Rlcl91cmwgPSAnaHR0cDovLzEyNy4wLjAuMTo4MDAwJwordGVzdF9icm93c2VyID0gWydpZScsICdmaXJlZm94JywgJ2Nocm9tZSddCit0ZXN0X2Nhc2VzID0gWzkwMSwgOTAyLCA5MDNdCitsb2dnaW5nX2xldmVsID0gJ0RFQlVHJworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxjaGVjay5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxjaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODIwZjgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGNoZWNrLnB5CkBAIC0wLDAgKzEsNTMgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMKKworaW1wb3J0IGh0dHBsaWIyCitpbXBvcnQgY29uZmlnCitpbXBvcnQgdXJsbGlzdAorCisKK2NvbmZpZy5sb2dnZXIuaW5mbygiVGVzdGluZyAlcyB3aXRoICVzIiwgY29uZmlnLlRPQVNURVJfQkFTRVVSTCwgY29uZmlnLlczQ19WQUxJREFUT1IpCisKK2RlZiB2YWxpZGF0ZV9odG1sNSh1cmwpOgorICAgIGh0dHBfY2xpZW50ID0gaHR0cGxpYjIuSHR0cChOb25lKQorICAgIHN0YXR1cyA9ICJGYWlsZWQiCisgICAgZXJyb3JzID0gLTEKKyAgICB3YXJuaW5ncyA9IC0xCisKKyAgICB1cmxyZXF1ZXN0ID0gY29uZmlnLlczQ19WQUxJREFUT1IrdXJsCisKKyAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKKyAgICAjIHdlIGRpc2FibGUgdGhlIGJyb2FkLWV4Y2VwdCBiZWNhdXNlIHdlIHdhbnQgdG8gYWN0dWFsbHkgY2F0Y2ggYWxsIHBvc3NpYmxlIGV4Y2VwdGlvbnMKKyAgICB0cnk6CisgICAgICAgIHJlc3AsIF8gPSBodHRwX2NsaWVudC5yZXF1ZXN0KHVybHJlcXVlc3QsICJIRUFEIikKKyAgICAgICAgaWYgcmVzcFsneC13M2MtdmFsaWRhdG9yLXN0YXR1cyddICE9ICJBYm9ydCI6CisgICAgICAgICAgICBzdGF0dXMgPSByZXNwWyd4LXczYy12YWxpZGF0b3Itc3RhdHVzJ10KKyAgICAgICAgICAgIGVycm9ycyA9IGludChyZXNwWyd4LXczYy12YWxpZGF0b3ItZXJyb3JzJ10pCisgICAgICAgICAgICB3YXJuaW5ncyA9IGludChyZXNwWyd4LXczYy12YWxpZGF0b3Itd2FybmluZ3MnXSkKKworICAgICAgICAgICAgaWYgc3RhdHVzID09ICdJbnZhbGlkJzoKKyAgICAgICAgICAgICAgICBjb25maWcubG9nZ2VyLndhcm4oIkZhaWxlZCAlcyBpcyAlc1x0ZXJyb3JzICVzIHdhcm5pbmdzICVzIChjaGVjayBhdCAlcykiLCB1cmwsIHN0YXR1cywgZXJyb3JzLCB3YXJuaW5ncywgdXJscmVxdWVzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiT0shICVzIiwgdXJsKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybigiRmFpbGVkIHZhbGlkYXRpb24gY2FsbDogJXMiLCBleGMpCisgICAgcmV0dXJuIChzdGF0dXMsIGVycm9ycywgd2FybmluZ3MpCisKKworZGVmIHByaW50X3ZhbGlkYXRpb24odXJsKToKKyAgICBzdGF0dXMsIGVycm9ycywgd2FybmluZ3MgPSB2YWxpZGF0ZV9odG1sNSh1cmwpCisgICAgY29uZmlnLmxvZ2dlci5lcnJvcigidXJsICVzIGlzICVzXHRlcnJvcnMgJXMgd2FybmluZ3MgJXMgKGNoZWNrIGF0ICVzKSIsIHVybCwgc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzLCBjb25maWcuVzNDX1ZBTElEQVRPUit1cmwpCisKKworZGVmIG1haW4oKToKKyAgICBwcmludCgiVGVzdGluZyAlcyB3aXRoICVzIiAlIChjb25maWcuVE9BU1RFUl9CQVNFVVJMLCBjb25maWcuVzNDX1ZBTElEQVRPUikpCisKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKKyAgICAgICAgcHJpbnRfdmFsaWRhdGlvbihzeXMuYXJndlsxXSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgdXJsIGluIHVybGxpc3QuVVJMUzoKKyAgICAgICAgICAgIHByaW50X3ZhbGlkYXRpb24oY29uZmlnLlRPQVNURVJfQkFTRVVSTCt1cmwpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsbGlzdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy91cmxsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYjlmZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsbGlzdC5weQpAQCAtMCwwICsxLDM5IEBACitVUkxTID0gWworICAgICd0b2FzdGVyZ3VpL2xhbmRpbmcvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZHMvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3Rhc2tzLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXNrcy8xLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXNrLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcmVjaXBlcy8nLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcmVjaXBlLzEvYWN0aXZlX3RhYi8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZV9wYWNrYWdlcy8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VzLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC8xLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMvMS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMvMS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xL3RhcmdldHBrZycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS9kaXJpbmZvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xL2RpcmluZm9fZmlsZXBhdGgvXy9iaW4vYmFzaCcsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9jb25maWd1cmF0aW9uJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2NvbmZpZ3ZhcnMnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvYnVpbGR0aW1lJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2NwdXVzYWdlJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2Rpc2tpbycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS9wYWNrYWdlZmlsZS8xJywKKyAgICAndG9hc3Rlcmd1aS9uZXdwcm9qZWN0LycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdHMvJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEnLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9jb25maWd1cmF0aW9uJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvYnVpbGRzLycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVycy8nLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci8xJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvaW1wb3J0bGF5ZXInLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS90YXJnZXRzLycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL21hY2hpbmVzLycsCisgICAgJ3RvYXN0ZXJndWkvJywKK10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlYWExMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworICAgIGZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudCBpbXBvcnQgZXhlY3V0ZV9mcm9tX2NvbW1hbmRfbGluZQorCisgICAgZXhlY3V0ZV9mcm9tX2NvbW1hbmRfbGluZShzeXMuYXJndikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9sc3VwZGF0ZXMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTk1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UKK2ltcG9ydCBvcworCitjbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorICAgIGFyZ3MgICAgPSAiIgorICAgIGhlbHAgICAgPSAiVXBkYXRlcyBsb2NhbGx5IGNhY2hlZCBpbmZvcm1hdGlvbiBmcm9tIGFsbCBMYXllclNvdXJjZXMiCisKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsICoqb3B0aW9ucyk6CisgICAgICAgIGZvciBscyBpbiBMYXllclNvdXJjZS5vYmplY3RzLmFsbCgpOgorICAgICAgICAgICAgbHMudXBkYXRlKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZGVlZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5CkBAIC0wLDAgKzEsNDAwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQnVpbGQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9idWlsZCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdtYWNoaW5lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnaW1hZ2VfZnN0eXBlcycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2Rpc3RybycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2Rpc3Ryb192ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnc3RhcnRlZF9vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnY29tcGxldGVkX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdvdXRjb21lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0yKSksCisgICAgICAgICAgICAoJ2Vycm9yc19ubycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCd3YXJuaW5nc19ubycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdjb29rZXJfbG9nX3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwMCkpLAorICAgICAgICAgICAgKCdidWlsZF9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnYml0YmFrZV92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0J1aWxkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RhcmdldCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnaXNfaW1hZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2ZpbGVfc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RhcmdldCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXNrJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdGFzaycsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ndGFza19idWlsZCcsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnb3JkZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndGFza19leGVjdXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9RmFsc2UpKSwKKyAgICAgICAgICAgICgnb3V0Y29tZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9NSkpLAorICAgICAgICAgICAgKCdzc3RhdGVfY2hlY2tzdW0nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwYXRoX3RvX3NzdGF0ZV9vYmonLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD01MDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgncmVjaXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdidWlsZF9yZWNpcGUnLCB0bz1vcm1bJ29ybS5SZWNpcGUnXSkpLAorICAgICAgICAgICAgKCd0YXNrX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdzb3VyY2VfdXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3dvcmtfZGlyZWN0b3J5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3NjcmlwdF90eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2xpbmVfbnVtYmVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2Rpc2tfaW8nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKSwKKyAgICAgICAgICAgICgnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0wLCBtYXhfbGVuZ3RoPTUwKSksCisgICAgICAgICAgICAoJ3NzdGF0ZV9yZXN1bHQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnbWVzc2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjQwKSksCisgICAgICAgICAgICAoJ2xvZ2ZpbGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXNrJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1Rhc2tfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Rhc2tfZGVwZW5kZW5jeScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCd0YXNrJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc190YXNrJywgdG89b3JtWydvcm0uVGFzayddKSksCisgICAgICAgICAgICAoJ2RlcGVuZHNfb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnLCB0bz1vcm1bJ29ybS5UYXNrJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXNrX0RlcGVuZGVuY3knXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUGFja2FnZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3BhY2thZ2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ3JlY2lwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlY2lwZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXZpc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdpbnN0YWxsZWRfc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdzZWN0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD04MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsaWNlbnNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD04MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2UnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUGFja2FnZV9EZXBlbmRlbmN5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcGFja2FnZV9kZXBlbmRlbmN5JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3BhY2thZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZScsIHRvPW9ybVsnb3JtLlBhY2thZ2UnXSkpLAorICAgICAgICAgICAgKCdkZXBlbmRzX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnLCB0bz1vcm1bJ29ybS5QYWNrYWdlJ10pKSwKKyAgICAgICAgICAgICgnZGVwX3R5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0J10sIG51bGw9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2VfRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0J10pKSwKKyAgICAgICAgICAgICgncGFja2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlBhY2thZ2UnXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQYWNrYWdlX0ZpbGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wYWNrYWdlX2ZpbGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncGFja2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nYnVpbGRmaWxlbGlzdF9wYWNrYWdlJywgdG89b3JtWydvcm0uUGFja2FnZSddKSksCisgICAgICAgICAgICAoJ3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2VfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWNpcGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWNpcGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyZWNpcGVfbGF5ZXJfdmVyc2lvbicsIHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICAgICAgKCdzdW1tYXJ5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnZGVzY3JpcHRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdzZWN0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGljZW5zZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2xpY2Vuc2luZ19pbmZvJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdob21lcGFnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnYnVndHJhY2tlcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnZmlsZV9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUmVjaXBlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1JlY2lwZV9EZXBlbmRlbmN5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVjaXBlX2RlcGVuZGVuY3knLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVjaXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyX2RlcGVuZGVuY2llc19yZWNpcGUnLCB0bz1vcm1bJ29ybS5SZWNpcGUnXSkpLAorICAgICAgICAgICAgKCdkZXBlbmRzX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyX2RlcGVuZGVuY2llc19kZXBlbmRzJywgdG89b3JtWydvcm0uUmVjaXBlJ10pKSwKKyAgICAgICAgICAgICgnZGVwX3R5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWNpcGVfRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVyJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2xheWVyX2luZGV4X3VybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDApKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllciddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMYXllcl9WZXJzaW9uJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fbGF5ZXJfdmVyc2lvbicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9idWlsZCcsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnbGF5ZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J2xheWVyX3ZlcnNpb25fbGF5ZXInLCB0bz1vcm1bJ29ybS5MYXllciddKSksCisgICAgICAgICAgICAoJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKSwKKyAgICAgICAgICAgICgnY29tbWl0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgncHJpb3JpdHknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllcl9WZXJzaW9uJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1ZhcmlhYmxlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdmFyaWFibGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3ZhcmlhYmxlX2J1aWxkJywgdG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCd2YXJpYWJsZV9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFyaWFibGVfdmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2NoYW5nZWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSksCisgICAgICAgICAgICAoJ2h1bWFuX3JlYWRhYmxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTIwMCkpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydWYXJpYWJsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdWYXJpYWJsZUhpc3RvcnknCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV92YXJpYWJsZWhpc3RvcnknLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgndmFyaWFibGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5WYXJpYWJsZSddKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICAgICAgKCdsaW5lX251bWJlcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCdvcGVyYXRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTE2KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVmFyaWFibGVIaXN0b3J5J10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0xvZ01lc3NhZ2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9sb2dtZXNzYWdlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdsZXZlbCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdtZXNzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNDApKSwKKyAgICAgICAgICAgICgncGF0aG5hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGluZW5vJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykobnVsbD1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTG9nTWVzc2FnZSddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0J1aWxkJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fYnVpbGQnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RhcmdldCcpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVGFzaycKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Rhc2snKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Rhc2tfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Rhc2tfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUGFja2FnZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3BhY2thZ2UnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1BhY2thZ2VfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3BhY2thZ2VfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQYWNrYWdlX0ZpbGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wYWNrYWdlX2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlY2lwZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3JlY2lwZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUmVjaXBlX0RlcGVuZGVuY3knCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWNpcGVfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9sYXllcicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTGF5ZXJfVmVyc2lvbicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xheWVyX3ZlcnNpb24nKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1ZhcmlhYmxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdmFyaWFibGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1ZhcmlhYmxlSGlzdG9yeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3ZhcmlhYmxlaGlzdG9yeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTG9nTWVzc2FnZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xvZ21lc3NhZ2UnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAyX2F1dG9fX2FkZF9maWVsZF9idWlsZF90aW1lc3BlbnQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRfdGltZXNwZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDIxY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRfdGltZXNwZW50LnB5CkBAIC0wLDAgKzEsMTgwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9mc3R5cGVzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAzX3RpbWVzcGVudC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAzX3RpbWVzcGVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjAwZjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDNfdGltZXNwZW50LnB5CkBAIC0wLDAgKzEsMTgyIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBEYXRhTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKK2NsYXNzIE1pZ3JhdGlvbihEYXRhTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAiV3JpdGUgeW91ciBmb3J3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICAjIE5vdGU6IERvbid0IHVzZSAiZnJvbSBhcHBuYW1lLm1vZGVscyBpbXBvcnQgTW9kZWxOYW1lIi4KKyAgICAgICAgIyBVc2Ugb3JtLk1vZGVsTmFtZSB0byByZWZlciB0byBtb2RlbHMgaW4gdGhpcyBhcHBsaWNhdGlvbiwKKyAgICAgICAgIyBhbmQgb3JtWydhcHBuYW1lLk1vZGVsTmFtZSddIGZvciBtb2RlbHMgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorCisgICAgICAgIGZvciBidWlsZCBpbiBvcm0uQnVpbGQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIGJ1aWxkLnRpbWVzcGVudCA9IGludCgoYnVpbGQuY29tcGxldGVkX29uIC0gYnVpbGQuc3RhcnRlZF9vbikudG90YWxfc2Vjb25kcygpKQorICAgICAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiIpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA0X2F1dG9fX2FkZF9maWVsZF9wYWNrYWdlX2luc3RhbGxlZF9uYW1lLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDRfYXV0b19fYWRkX2ZpZWxkX3BhY2thZ2VfaW5zdGFsbGVkX25hbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NDQ1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA0X2F1dG9fX2FkZF9maWVsZF9wYWNrYWdlX2luc3RhbGxlZF9uYW1lLnB5CkBAIC0wLDAgKzEsMTgxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUGFja2FnZS5pbnN0YWxsZWRfbmFtZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2luc3RhbGxlZF9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTEwMCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1BhY2thZ2UuaW5zdGFsbGVkX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcGFja2FnZScsICdpbnN0YWxsZWRfbmFtZScpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9mc3R5cGVzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2luZ19pbmZvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJywgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzUnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDVfYXV0b19fYWRkX3RhcmdldF9pbWFnZV9maWxlX19hZGRfdGFyZ2V0X2ZpbGVfX2FkZF9maWVsZF92YXJpYWJsZWhpc3Rvci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF90YXJnZXRfaW1hZ2VfZmlsZV9fYWRkX3RhcmdldF9maWxlX19hZGRfZmllbGRfdmFyaWFibGVoaXN0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlN2FjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF90YXJnZXRfaW1hZ2VfZmlsZV9fYWRkX3RhcmdldF9maWxlX19hZGRfZmllbGRfdmFyaWFibGVoaXN0b3IucHkKQEAgLTAsMCArMSwyODEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfRmlsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldF9maWxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddKSksCisgICAgICAgICAgICAoJ3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdpbm9kZXR5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgncGVybWlzc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdvd25lcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTI4KSksCisgICAgICAgICAgICAoJ2dyb3VwJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMjgpKSwKKyAgICAgICAgICAgICgnZGlyZWN0b3J5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdkaXJlY3Rvcnlfc2V0JywgdG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpLAorICAgICAgICAgICAgKCdzeW1fdGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdzeW1saW5rX3NldCcsIGJsYW5rPVRydWUsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXRfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfSW1hZ2VfRmlsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldF9pbWFnZV9maWxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdmaWxlX3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXRfSW1hZ2VfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdWYXJpYWJsZUhpc3RvcnkudmFsdWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShkZWZhdWx0PScnLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVjaXBlLmxpY2Vuc2luZ19pbmZvJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsaWNlbnNpbmdfaW5mbycpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnVGFyZ2V0LmZpbGVfbmFtZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAnZmlsZV9uYW1lJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQuZmlsZV9zaXplJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdmaWxlX3NpemUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkLmltYWdlX2ZzdHlwZXMnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAnaW1hZ2VfZnN0eXBlcycpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xvZ01lc3NhZ2UudGFzaycKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sb2dtZXNzYWdlJywgJ3Rhc2snLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhc2snXSwgbnVsbD1UcnVlLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmVsYXBzZWRfdGltZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnVGFzaycsIGZpZWxkcyBbJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX3Rhc2snLCBbJ2J1aWxkX2lkJywgJ3JlY2lwZV9pZCcsICd0YXNrX25hbWUnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdUYXNrJywgZmllbGRzIFsnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fdGFzaycsIFsnYnVpbGRfaWQnLCAncmVjaXBlX2lkJywgJ3Rhc2tfbmFtZSddKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldF9GaWxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldF9JbWFnZV9GaWxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2ltYWdlX2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1ZhcmlhYmxlSGlzdG9yeS52YWx1ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV92YXJpYWJsZWhpc3RvcnknLCAndmFsdWUnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUubGljZW5zaW5nX2luZm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2xpY2Vuc2luZ19pbmZvJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShkZWZhdWx0PScnLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1RhcmdldC5maWxlX25hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ZpbGVfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LmZpbGVfc2l6ZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV90YXJnZXQnLCAnZmlsZV9zaXplJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQuaW1hZ2VfZnN0eXBlcycKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9idWlsZCcsICdpbWFnZV9mc3R5cGVzJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTEwMCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xvZ01lc3NhZ2UudGFzaycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sb2dtZXNzYWdlJywgJ3Rhc2tfaWQnKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFzay5lbGFwc2VkX3RpbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXNrJywgJ2VsYXBzZWRfdGltZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ2JsYW5rJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA2X2F1dG9fX2FkZF9maWVsZF90YXJnZXRfaW1hZ2Vfc2l6ZV9fYWRkX2ZpZWxkX3RhcmdldF9saWNlbnNlX21hbmlmZXN0X3AucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X2ltYWdlX3NpemVfX2FkZF9maWVsZF90YXJnZXRfbGljZW5zZV9tYW5pZmVzdF9wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYmUzMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X2ltYWdlX3NpemVfX2FkZF9maWVsZF90YXJnZXRfbGljZW5zZV9tYW5pZmVzdF9wLnB5CkBAIC0wLDAgKzEsMjM1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LmltYWdlX3NpemUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ltYWdlX3NpemUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdUYXJnZXQubGljZW5zZV9tYW5pZmVzdF9wYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3RhcmdldCcsICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLnBlcm1pc3Npb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfZmlsZScsICdwZXJtaXNzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xNikpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUuc3ltX3RhcmdldCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ3N5bV90YXJnZXRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShudWxsPVRydWUsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ2RpcmVjdG9yeV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKG51bGw9VHJ1ZSwgdG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1RhcmdldC5pbWFnZV9zaXplJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdpbWFnZV9zaXplJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQubGljZW5zZV9tYW5pZmVzdF9wYXRoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUucGVybWlzc2lvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ3Blcm1pc3Npb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1RhcmdldF9GaWxlLnN5bV90YXJnZXQnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdUYXJnZXRfRmlsZS5zeW1fdGFyZ2V0JyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbgorICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfRmlsZS5zeW1fdGFyZ2V0JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ZpbGUnLCAnc3ltX3RhcmdldF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUuZGlyZWN0b3J5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ZpbGUnLCAnZGlyZWN0b3J5X2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9oZWxwdGV4dC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9oZWxwdGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTRjNTM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2hlbHB0ZXh0LnB5CkBAIC0wLDAgKzEsMjE0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnSGVscFRleHQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9oZWxwdGV4dCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0naGVscHRleHRfYnVpbGQnLCB0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ2FyZWEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgna2V5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndGV4dCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0hlbHBUZXh0J10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnSGVscFRleHQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9oZWxwdGV4dCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA4X2F1dG9fX2NoZ19maWVsZF92YXJpYWJsZWhpc3Rvcnlfb3BlcmF0aW9uX19jaGdfZmllbGRfcmVjaXBlX2Rlc2NyaXB0aW8ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOF9hdXRvX19jaGdfZmllbGRfdmFyaWFibGVoaXN0b3J5X29wZXJhdGlvbl9fY2hnX2ZpZWxkX3JlY2lwZV9kZXNjcmlwdGlvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZTQwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOF9hdXRvX19jaGdfZmllbGRfdmFyaWFibGVoaXN0b3J5X29wZXJhdGlvbl9fY2hnX2ZpZWxkX3JlY2lwZV9kZXNjcmlwdGlvLnB5CkBAIC0wLDAgKzEsMjI1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1ZhcmlhYmxlSGlzdG9yeS5vcGVyYXRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV92YXJpYWJsZWhpc3RvcnknLCAnb3BlcmF0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD02NCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUmVjaXBlLmRlc2NyaXB0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfSW1hZ2VfRmlsZS5maWxlX25hbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfaW1hZ2VfZmlsZScsICdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTQpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2UuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdWYXJpYWJsZUhpc3Rvcnkub3BlcmF0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ29wZXJhdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTYpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3JlY2lwZScsICdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfSW1hZ2VfRmlsZS5maWxlX25hbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfaW1hZ2VfZmlsZScsICdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2UuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yMDApKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDlfYXV0b19fYWRkX3Byb2plY3R2YXJpYWJsZV9fYWRkX3Byb2plY3RsYXllcl9fYWRkX3Byb2plY3R0YXJnZXRfX2FkZF9wci5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X2F1dG9fX2FkZF9wcm9qZWN0dmFyaWFibGVfX2FkZF9wcm9qZWN0bGF5ZXJfX2FkZF9wcm9qZWN0dGFyZ2V0X19hZGRfcHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1OGRjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X2F1dG9fX2FkZF9wcm9qZWN0dmFyaWFibGVfX2FkZF9wcm9qZWN0bGF5ZXJfX2FkZF9wcm9qZWN0dGFyZ2V0X19hZGRfcHIucHkKQEAgLTAsMCArMSwyODYgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0VmFyaWFibGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wcm9qZWN0dmFyaWFibGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncHJvamVjdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlByb2plY3QnXSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUHJvamVjdFZhcmlhYmxlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1Byb2plY3RMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Byb2plY3RsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwcm9qZWN0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdnaXR1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICAgICAgKCdjb21taXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1Byb2plY3RMYXllciddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0VGFyZ2V0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcHJvamVjdHRhcmdldCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwcm9qZWN0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUHJvamVjdFRhcmdldCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcHJvamVjdCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydQcm9qZWN0J10pCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkLnByb2plY3QnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAncHJvamVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQcm9qZWN0VmFyaWFibGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0dmFyaWFibGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Byb2plY3RMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Byb2plY3RsYXllcicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUHJvamVjdFRhcmdldCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Byb2plY3R0YXJnZXQnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Byb2plY3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0JykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC5wcm9qZWN0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEwX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0X2JyYW5jaF9fYWRkX2ZpZWxkX3Byb2plY3Rfc2hvcnRfZGVzY3JpcHRpb25fX2EucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9icmFuY2hfX2FkZF9maWVsZF9wcm9qZWN0X3Nob3J0X2Rlc2NyaXB0aW9uX19hLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWNlMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9icmFuY2hfX2FkZF9maWVsZF9wcm9qZWN0X3Nob3J0X2Rlc2NyaXB0aW9uX19hLnB5CkBAIC0wLDAgKzEsMjU3IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5icmFuY2gnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdicmFuY2gnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9J21hc3RlcicsIG1heF9sZW5ndGg9NTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5zaG9ydF9kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3Nob3J0X2Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3QudXNlcl9pZCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3VzZXJfaWQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LnNob3J0X2Rlc2NyaXB0aW9uJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnc2hvcnRfZGVzY3JpcHRpb24nKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QudXNlcl9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3VzZXJfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTFfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9kaXJwYXRoLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTFfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9kaXJwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjUyMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMV9hdXRvX19hZGRfZmllbGRfcHJvamVjdGxheWVyX2RpcnBhdGgucHkKQEAgLTAsMCArMSwyNDIgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZGlycGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0yNTQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZGlycGF0aCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMl9hdXRvX19hZGRfZmllbGRfcHJvamVjdGxheWVyX29wdGlvbmFsX19hZGRfZmllbGRfcHJvamVjdHRhcmdldF90YXNrLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9vcHRpb25hbF9fYWRkX2ZpZWxkX3Byb2plY3R0YXJnZXRfdGFzay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ4M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9vcHRpb25hbF9fYWRkX2ZpZWxkX3Byb2plY3R0YXJnZXRfdGFzay5weQpAQCAtMCwwICsxLDI1MiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5vcHRpb25hbCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnb3B0aW9uYWwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0VGFyZ2V0LnRhc2snCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdHRhcmdldCcsICd0YXNrJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLm9wdGlvbmFsJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdvcHRpb25hbCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdFRhcmdldC50YXNrJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3R0YXJnZXQnLCAndGFzaycpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxM19hdXRvX19hZGRfcmVsZWFzZV9fYWRkX2xheWVydmVyc2lvbmRlcGVuZGVuY3lfX2FkZF91bmlxdWVfbGF5ZXJ2ZXJzaW9uLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfYXV0b19fYWRkX3JlbGVhc2VfX2FkZF9sYXllcnZlcnNpb25kZXBlbmRlbmN5X19hZGRfdW5pcXVlX2xheWVydmVyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk1NGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfYXV0b19fYWRkX3JlbGVhc2VfX2FkZF9sYXllcnZlcnNpb25kZXBlbmRlbmN5X19hZGRfdW5pcXVlX2xheWVydmVyc2lvbi5weQpAQCAtMCwwICsxLDcxMCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1JlbGVhc2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWxlYXNlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKSh1bmlxdWU9VHJ1ZSwgbWF4X2xlbmd0aD0zMikpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2JpdGJha2VfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0zMikpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1JlbGVhc2UnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVydmVyc2lvbmRlcGVuZGVuY3knLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfc291cmNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdkZXBlbmRlbmNpZXMnLCB0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnZGVwZW5kc19vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nZGVwZW5kZWVzJywgdG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclZlcnNpb25EZXBlbmRlbmN5JywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcnZlcnNpb25kZXBlbmRlbmN5JywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnVG9hc3RlclNldHRpbmcnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90b2FzdGVyc2V0dGluZycsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD02MykpLAorICAgICAgICAgICAgKCdoZWxwdGV4dCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCd2YWx1ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVG9hc3RlclNldHRpbmcnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTWFjaGluZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX21hY2hpbmUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfc291cmNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cF9kYXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ2xheWVyX3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydNYWNoaW5lJ10pCisKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ01hY2hpbmUnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX21hY2hpbmUnLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWxlYXNlRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZWxlYXNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSksCisgICAgICAgICAgICAoJ2xheWVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uTGF5ZXInXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1JlbGVhc2VEZWZhdWx0TGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQml0YmFrZVZlcnNpb24nCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9iaXRiYWtldmVyc2lvbicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykodW5pcXVlPVRydWUsIG1heF9sZW5ndGg9MzIpKSwKKyAgICAgICAgICAgICgnZ2l0dXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnKShtYXhfbGVuZ3RoPTIwMCkpLAorICAgICAgICAgICAgKCdicmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTMyKSksCisgICAgICAgICAgICAoJ2RpcnBhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0JpdGJha2VWZXJzaW9uJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JyYW5jaCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2JyYW5jaCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl9zb3VyY2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PVRydWUsIHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10sIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ3VwX2RhdGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKSwKKyAgICAgICAgICAgICgnYml0YmFrZV9icmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3Nob3J0X2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0JyYW5jaCddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAnbmFtZSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2JyYW5jaCcsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0xheWVyU291cmNlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fbGF5ZXJzb3VyY2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NjMpKSwKKyAgICAgICAgICAgICgnc291cmNldHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdhcGl1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PU5vbmUsIG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllclNvdXJjZSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcnNvdXJjZScsIFsnc291cmNldHlwZScsICdhcGl1cmwnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIubmFtZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbmFtZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5jb21taXQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2NvbW1pdCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmdpdHVybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZ2l0dXJsJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmxheWVyY29tbWl0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdsYXllcmNvbW1pdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsYXllcl9zb3VyY2UnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKGRlZmF1bHQ9Tm9uZSwgdG89b3JtWydvcm0uTGF5ZXJTb3VyY2UnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfaWQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9kYXRlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfZGF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLkJyYW5jaCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5kaXJwYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAnZGlycGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmJ1aWxkJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdidWlsZF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKG51bGw9VHJ1ZSwgdG89b3JtWydvcm0uQnVpbGQnXSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9ODApKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXJfVmVyc2lvbicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXJfdmVyc2lvbicsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2xheWVyX3NvdXJjZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLnVwX2lkJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLnVwX2RhdGUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3VwX2RhdGUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbGF5ZXJfc291cmNlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10sIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci51cF9pZCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudXBfZGF0ZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9kYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudmNzX3VybCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3NfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5zdW1tYXJ5JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICdkZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUpKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXInLCBbJ2xheWVyX3NvdXJjZV9pZCcsICduYW1lJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdicmFuY2gnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LmJpdGJha2VfdmVyc2lvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JpdGJha2VfdmVyc2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD0tMSwgdG89b3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LnJlbGVhc2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdyZWxlYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PS0xLCB0bz1vcm1bJ29ybS5SZWxlYXNlJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllcicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICduYW1lJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9sYXllcicsIFsnbGF5ZXJfc291cmNlX2lkJywgJ25hbWUnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllcicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fbGF5ZXInLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyX1ZlcnNpb24nLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyX3ZlcnNpb24nLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyU291cmNlJywgZmllbGRzIFsnc291cmNldHlwZScsICdhcGl1cmwnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWydzb3VyY2V0eXBlJywgJ2FwaXVybCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0JyYW5jaCcsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAnbmFtZSddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ01hY2hpbmUnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX21hY2hpbmUnLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVydmVyc2lvbmRlcGVuZGVuY3knLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlbGVhc2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdMYXllclZlcnNpb25EZXBlbmRlbmN5JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fbGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVG9hc3RlclNldHRpbmcnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV90b2FzdGVyc2V0dGluZycpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTWFjaGluZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX21hY2hpbmUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlbGVhc2VEZWZhdWx0TGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCaXRiYWtlVmVyc2lvbicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2JpdGJha2V2ZXJzaW9uJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCcmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9icmFuY2gnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0xheWVyU291cmNlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fbGF5ZXJzb3VyY2UnKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdExheWVyLm5hbWUnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0TGF5ZXIubmFtZScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIubmFtZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3RMYXllci5kaXJwYXRoJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmRpcnBhdGgnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0TGF5ZXIuY29tbWl0JworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmNvbW1pdCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuY29tbWl0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdjb21taXQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0TGF5ZXIuZ2l0dXJsJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmdpdHVybCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZ2l0dXJsJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdnaXR1cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmxheWVyY29tbWl0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdsYXllcmNvbW1pdF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsYXllcl9zb3VyY2VfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfaWQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9kYXRlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfZGF0ZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9icmFuY2hfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2RpcnBhdGgnKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnTGF5ZXJfVmVyc2lvbi5idWlsZCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ0xheWVyX1ZlcnNpb24uYnVpbGQnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uYnVpbGQnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2J1aWxkX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKQorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUubGF5ZXJfc291cmNlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsYXllcl9zb3VyY2VfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlY2lwZS51cF9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWNpcGUnLCAndXBfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlY2lwZS51cF9kYXRlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICd1cF9kYXRlJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbGF5ZXJfc291cmNlX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci51cF9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudXBfZGF0ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9kYXRlJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci52Y3NfdXJsJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyJywgJ3Zjc191cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnN1bW1hcnknCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnc3VtbWFyeScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnZGVzY3JpcHRpb24nKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnTGF5ZXIubG9jYWxfcGF0aCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ0xheWVyLmxvY2FsX3BhdGgnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSkKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0LmJyYW5jaCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3QuYnJhbmNoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbiAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb25faWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3JlbGVhc2VfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE0X2F1dG9fX2NoZ19maWVsZF9wYWNrYWdlX3N1bW1hcnlfX2NoZ19maWVsZF9sYXllcl9zdW1tYXJ5X19jaGdfZmllbGRfcmUucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hdXRvX19jaGdfZmllbGRfcGFja2FnZV9zdW1tYXJ5X19jaGdfZmllbGRfbGF5ZXJfc3VtbWFyeV9fY2hnX2ZpZWxkX3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDVmMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hdXRvX19jaGdfZmllbGRfcGFja2FnZV9zdW1tYXJ5X19jaGdfZmllbGRfbGF5ZXJfc3VtbWFyeV9fY2hnX2ZpZWxkX3JlLnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2Uuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3BhY2thZ2UnLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXIuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKSgpKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2Uuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3BhY2thZ2UnLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllci5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXInLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE1X2F1dG9fX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3VybF9fYWRkX2ZpZWxkX2xheWVyX3Zjc193ZWJfdHJlZV9iYXNlX3UucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNV9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl91cmxfX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3RyZWVfYmFzZV91LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjY0YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNV9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl91cmxfX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3RyZWVfYmFzZV91LnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudmNzX3dlYl91cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl91cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTIwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdHJlZV9iYXNlX3VybCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTIwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudmNzX3dlYl91cmwnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl91cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdHJlZV9iYXNlX3VybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTZfYXV0b19fYWRkX2ZpZWxkX3JlbGVhc2VfaGVscHRleHRfX2NoZ19maWVsZF9yZWxlYXNlX2JyYW5jaF9fYWRkX2luZGV4Xy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE2X2F1dG9fX2FkZF9maWVsZF9yZWxlYXNlX2hlbHB0ZXh0X19jaGdfZmllbGRfcmVsZWFzZV9icmFuY2hfX2FkZF9pbmRleF8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1YzBiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE2X2F1dG9fX2FkZF9maWVsZF9yZWxlYXNlX2hlbHB0ZXh0X19jaGdfZmllbGRfcmVsZWFzZV9icmFuY2hfX2FkZF9pbmRleF8ucHkKQEAgLTAsMCArMSwzNTkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlLmhlbHB0ZXh0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnaGVscHRleHQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICAgICAgIyBSZW5hbWluZyBjb2x1bW4gZm9yICdSZWxlYXNlLmJyYW5jaCcgdG8gbWF0Y2ggbmV3IGZpZWxkIHR5cGUuCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2gnKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnJhbmNoJ10sIGRlZmF1bHQ9LTEpKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0JyYW5jaC5iaXRiYWtlX2JyYW5jaCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9icmFuY2gnLCAnYml0YmFrZV9icmFuY2gnKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdQcm9qZWN0TGF5ZXInLCBmaWVsZHMgWydwcm9qZWN0JywgJ2xheWVyY29tbWl0J10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9wcm9qZWN0bGF5ZXInLCBbJ3Byb2plY3RfaWQnLCAnbGF5ZXJjb21taXRfaWQnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdQcm9qZWN0TGF5ZXInLCBmaWVsZHMgWydwcm9qZWN0JywgJ2xheWVyY29tbWl0J10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9wcm9qZWN0bGF5ZXInLCBbJ3Byb2plY3RfaWQnLCAnbGF5ZXJjb21taXRfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlbGVhc2UuaGVscHRleHQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdoZWxwdGV4dCcpCisKKyAgICAgICAgIyBSZW5hbWluZyBjb2x1bW4gZm9yICdSZWxlYXNlLmJyYW5jaCcgdG8gbWF0Y2ggbmV3IGZpZWxkIHR5cGUuCisgICAgICAgIGRiLnJlbmFtZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfaWQnLCAnYnJhbmNoJykKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUmVsZWFzZS5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MzIpKQorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnJhbmNoLmJpdGJha2VfYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2JyYW5jaCcsICdiaXRiYWtlX2JyYW5jaCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmdEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE3X2F1dG9fX2RlbF90b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcl9fYWRkX3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19hdXRvX19kZWxfdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXJfX2FkZF9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ODViNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19hdXRvX19kZWxfdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXJfX2FkZF9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fLnB5CkBAIC0wLDAgKzEsMzk2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJykKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZWxlYXNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSksCisgICAgICAgICAgICAoJ2xheWVyX3NvdXJjZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10pKSwKKyAgICAgICAgICAgICgncHJpb3JpdHknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eScsIGZpZWxkcyBbJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScsIFsncmVsZWFzZV9pZCcsICdsYXllcl9zb3VyY2VfaWQnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaF9pZCcpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoX25hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWyduYW1lJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJywgJ2xheWVyX2lkJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcl9uYW1lJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAnbGF5ZXJfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ25hbWUnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWyduYW1lJ10pCisKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknLCBmaWVsZHMgWydyZWxlYXNlJywgJ2xheWVyX3NvdXJjZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknLCBbJ3JlbGVhc2VfaWQnLCAnbGF5ZXJfc291cmNlX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1JlbGVhc2UuYnJhbmNoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbiAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CcmFuY2gnXSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfbmFtZScpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAnbGF5ZXInLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicsICdsYXllcl9uYW1lJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMThfYXV0b19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fcHJvamVjdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE4X2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX3Byb2plY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4NGJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE4X2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX3Byb2plY3QucHkKQEAgLTAsMCArMSwzMzEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLnByb2plY3QnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdwcm9qZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLlByb2plY3QnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5wcm9qZWN0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAncHJvamVjdF9pZCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOV9hdXRvX19hZGRfYnVpbGRhcnRpZmFjdC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE5X2F1dG9fX2FkZF9idWlsZGFydGlmYWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkY2U5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOV9hdXRvX19hZGRfYnVpbGRhcnRpZmFjdC5weQpAQCAtMCwwICsxLDM0MiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0J1aWxkQXJ0aWZhY3QnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9idWlsZGFydGlmYWN0JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZmlsZV9zaXplJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnQnVpbGRBcnRpZmFjdCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0J1aWxkQXJ0aWZhY3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9idWlsZGFydGlmYWN0JykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIwX2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2FkZF9maWVsZF9yZWNpcGVfcGF0aGZsYWdzX18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19hZGRfZmllbGRfcmVjaXBlX3BhdGhmbGFnc19fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzU3OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19hZGRfZmllbGRfcmVjaXBlX3BhdGhmbGFnc19fLnB5CkBAIC0wLDAgKzEsMzYxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsb2NhbF9wYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykoZGVmYXVsdD0iLyIsIG1heF9sZW5ndGg9MTAyNCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUucGF0aGZsYWdzJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICdwYXRoZmxhZ3MnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1JlY2lwZScsIGZpZWxkcyBbJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncyddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnXSkKKworICAgICAgICAjIE1pZ3JhdGUgZGF0YSBmcm9tIExheWVyLmxvY2FsX3BhdGggdG8gTGF5ZXJfVmVyc2lvbi5sb2NhbF9wYXRoCisgICAgICAgIGlmIG5vdCBkYi5kcnlfcnVuOgorICAgICAgICAgICAgZm9yIGx2IGluIG9ybS5MYXllcl9WZXJzaW9uLm9iamVjdHMuYWxsKCk6CisgICAgICAgICAgICAgICAgaWYgbHYubGF5ZXIubG9jYWxfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbHYubG9jYWxfcGF0aCA9IGx2LmxheWVyLmxvY2FsX3BhdGgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsdi5sb2NhbF9wYXRoID0gIi8iCisgICAgICAgICAgICAgICAgbHYuc2F2ZSgpCisKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJykKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uIikKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGRhcnRpZmFjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEFydGlmYWN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCAoJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza3MnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMV9hdXRvX19jaGdfZmllbGRfYnVpbGRfcHJvamVjdF9fY2hnX2ZpZWxkX3Byb2plY3RfYml0YmFrZV92ZXJzaW9uX19jaGdfLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjFfYXV0b19fY2hnX2ZpZWxkX2J1aWxkX3Byb2plY3RfX2NoZ19maWVsZF9wcm9qZWN0X2JpdGJha2VfdmVyc2lvbl9fY2hnXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJkZGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjFfYXV0b19fY2hnX2ZpZWxkX2J1aWxkX3Byb2plY3RfX2NoZ19maWVsZF9wcm9qZWN0X2JpdGJha2VfdmVyc2lvbl9fY2hnXy5weQpAQCAtMCwwICsxLDM3MSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBub19kcnlfcnVuID0gVHJ1ZQorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnQnVpbGQucHJvamVjdCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QuYml0YmFrZV92ZXJzaW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb25faWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddLCBudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAncmVsZWFzZV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlbGVhc2UnXSwgbnVsbD1UcnVlKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmNwdV91c2FnZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Rhc2suZWxhcHNlZF90aW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFzaycsICdlbGFwc2VkX3RpbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnKShudWxsPVRydWUsIG1heF9kaWdpdHM9OCwgZGVjaW1hbF9wbGFjZXM9MikpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnQnVpbGQucHJvamVjdCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10sIG51bGw9VHJ1ZSkpCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0LmJpdGJha2VfdmVyc2lvbicgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JpdGJha2VfdmVyc2lvbl9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10pKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3QucmVsZWFzZScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUHJvamVjdC5yZWxlYXNlJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdyZWxlYXNlX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmNwdV91c2FnZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Rhc2suZWxhcHNlZF90aW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFzaycsICdlbGFwc2VkX3RpbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnKShudWxsPVRydWUsIG1heF9kaWdpdHM9NiwgZGVjaW1hbF9wbGFjZXM9MikpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIyX2F1dG9fX2FkZF9maWVsZF90YXJnZXRfdGFza19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fbG9jYWxfcGF0aF9fZGVsX2YucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X3Rhc2tfX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2RlbF9mLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZWMzOTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X3Rhc2tfX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2RlbF9mLnB5CkBAIC0wLDAgKzEsMzQzIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LnRhc2snCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ3Rhc2snLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQudGFzaycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAndGFzaycpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjNfYXV0b19fZGVsX2ZpZWxkX2J1aWxkX3dhcm5pbmdzX25vX19kZWxfZmllbGRfYnVpbGRfZXJyb3JzX25vX19kZWxfZmllbC5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIzX2F1dG9fX2RlbF9maWVsZF9idWlsZF93YXJuaW5nc19ub19fZGVsX2ZpZWxkX2J1aWxkX2Vycm9yc19ub19fZGVsX2ZpZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViMjAwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIzX2F1dG9fX2RlbF9maWVsZF9idWlsZF93YXJuaW5nc19ub19fZGVsX2ZpZWxkX2J1aWxkX2Vycm9yc19ub19fZGVsX2ZpZWwucHkKQEAgLTAsMCArMSwzNTMgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkLndhcm5pbmdzX25vJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3dhcm5pbmdzX25vJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC5lcnJvcnNfbm8nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAnZXJyb3JzX25vJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC50aW1lc3BlbnQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAndGltZXNwZW50JykKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQud2FybmluZ3Nfbm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAnd2FybmluZ3Nfbm8nLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZC5lcnJvcnNfbm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAnZXJyb3JzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNF9hdXRvX19hZGRfZmllbGRfcmVjaXBlX2lzX2ltYWdlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjRfYXV0b19fYWRkX2ZpZWxkX3JlY2lwZV9pc19pbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY2MGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjRfYXV0b19fYWRkX2ZpZWxkX3JlY2lwZV9pc19pbWFnZS5weQpAQCAtMCwwICsxLDMzOCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS5pc19pbWFnZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWNpcGUnLCAnaXNfaW1hZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUuaXNfaW1hZ2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2lzX2ltYWdlJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDI1X2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0X2lzX2RlZmF1bHQucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNV9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9pc19kZWZhdWx0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3Njk5MGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNV9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9pc19kZWZhdWx0LnB5CkBAIC0wLDAgKzEsMzQ2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIHdvcmstYXJvdW5kIGZvciBodHRwOi8vc291dGguYWVyYWNvZGUub3JnL3RpY2tldC81Nzg6CisgICAgICAgICMgU1FMaXRlIGJvb2xlYW4gZmllbGRzIGFyZW4ndCBzZXQgdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZQorICAgICAgICAjIChuZWVkcyB0byBiZSAwIG9yIDEsIHJhdGhlciB0aGFuIFRydWUgb3IgRmFsc2UpCisgICAgICAgIGRlZmF1bHQgPSBGYWxzZQorICAgICAgICBpZiBkYi5iYWNrZW5kX25hbWUgPT0gJ3NxbGl0ZTMnOgorICAgICAgICAgICBkZWZhdWx0ID0gMAorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LmlzX2RlZmF1bHQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdpc19kZWZhdWx0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PWRlZmF1bHQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LmlzX2RlZmF1bHQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdpc19kZWZhdWx0JykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfZGVmYXVsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnLCAncGF0aGZsYWdzJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhdGhmbGFncyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza3MnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNl9zZXRfZGVmYXVsdF9wcm9qZWN0LnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjZfc2V0X2RlZmF1bHRfcHJvamVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQwYWJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjZfc2V0X2RlZmF1bHRfcHJvamVjdC5weQpAQCAtMCwwICsxLDM3NCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKyMgZGF0YS1vbmx5IG1pZ3JhdGlvbiB0byBzZXQgdGhlIGlzX2RlZmF1bHQgZmllbGQgY29ycmVjdGx5CisjIGFjcm9zcyBhbGwgcHJvamVjdHMsIHNvIGl0IGhhcyB0aGUgY29ycmVjdCB2YWx1ZSBvbiBhIHNpbmdsZQorIyByZWNvcmQgb25seTsgdGhpcyB3aWxsIGFkZCBvciBhbWVuZCBkZWZhdWx0IHByb2plY3QgKG1hcmtlZCB3aXRoCisjIGlzX2RlZmF1bHQgPSBUcnVlKQorY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBub19kcnlfcnVuID0gVHJ1ZQorCisgICAgIyB3b3JrLWFyb3VuZCBmb3IgaHR0cDovL3NvdXRoLmFlcmFjb2RlLm9yZy90aWNrZXQvNTc4OgorICAgICMgU1FMaXRlIGJvb2xlYW4gZmllbGRzIGFyZW4ndCBzZXQgdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZQorICAgICMgd2hlbiBhZGRlZCB0byBleGlzdGluZyByZWNvcmRzICh2YWx1ZSBuZWVkcyB0byBiZSAwIG9yIDEsIHJhdGhlcgorICAgICMgdGhhbiBUcnVlIG9yIEZhbHNlKSwgc28gbWFudWFsbHkgdXBkYXRlIHRoYXQgZmllbGQgZm9yIGFsbAorICAgICMgZXhpc3RpbmcgcmVjb3JkcworICAgIGRlZiBfc3FsaXRlX3VwZGF0ZV9hbGxfcHJvamVjdHNfaXNfZGVmYXVsdChzZWxmLCBvcm0pOgorICAgICAgICBpZiBkYi5iYWNrZW5kX25hbWUgPT0gJ3NxbGl0ZTMnOgorICAgICAgICAgICAgZm9yIHByb2plY3QgaW4gb3JtLlByb2plY3Qub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgICAgICBwcm9qZWN0LmlzX2RlZmF1bHQgPSAwCisgICAgICAgICAgICAgICAgcHJvamVjdC5zYXZlKCkKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIGZpeCBpc19kZWZhdWx0IGZpZWxkCisgICAgICAgIHNlbGYuX3NxbGl0ZV91cGRhdGVfYWxsX3Byb2plY3RzX2lzX2RlZmF1bHQob3JtKQorCisgICAgICAgICMgbm93IGNyZWF0ZSBvciBtb2RpZnkgdGhlIGRlZmF1bHQgcHJvamVjdAorICAgICAgICBwcm9qZWN0ID0gTm9uZQorCisgICAgICAgICMgY2hlY2sgZm9yIGV4aXN0aW5nIGRlZmF1bHQgcHJvamVjdCB3aXRoIElEIDAgd2hpY2ggaGFzCisgICAgICAgICMgYWxyZWFkeSBiZWVuIGFkZGVkIGluIGNvZGUKKyAgICAgICAgcHJvamVjdHMgPSBvcm0uUHJvamVjdC5vYmplY3RzLmZpbHRlcihwayA9IDApCisKKyAgICAgICAgaWYgbGVuKHByb2plY3RzKSA9PSAxOgorICAgICAgICAgICAgcHJvamVjdCA9IHByb2plY3RzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGNyZWF0ZSBkZWZhdWx0IHByb2plY3QKKyAgICAgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ29tbWFuZCBsaW5lIGJ1aWxkcyIsCisgICAgICAgICAgICAgICAgInNob3J0X2Rlc2NyaXB0aW9uIjogIlByb2plY3QgZm9yIGJ1aWxkcyBzdGFydGVkIG91dHNpZGUgVG9hc3RlciIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByb2plY3QgPSBvcm0uUHJvamVjdC5vYmplY3RzLmNyZWF0ZSgqKm9wdGlvbnMpCisKKyAgICAgICAgcHJvamVjdC5pc19kZWZhdWx0ID0gVHJ1ZQorICAgICAgICBwcm9qZWN0LnNhdmUoKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIGRvbid0IGRvIGFueXRoaW5nIHdoZW4gcmV2ZXJzaW5nIHRoaXMgbWlncmF0aW9uLCBhcyB3ZSBjYW4gc2FmZWx5CisgICAgICAgICMga2VlcCBhbnkgZ2VuZXJhdGVkIGRlZmF1bHQgcHJvamVjdCB3aGljaCBoYXMgYnVpbGRzIGF0dGFjaGVkOworICAgICAgICAjIGl0J3MganVzdCB0aGF0IHRoZSBvbGQgY29kZSB3b24ndCB1c2UgdGhhdCBwcm9qZWN0IGFzIHRoZQorICAgICAgICAjIGNvbnRhaW5lciBmb3IgYW55IG5ldyBidWlsZHMsIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbiBJRCBvZiAwCisgICAgICAgIHBhc3MKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2RlZmF1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tb2RlbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkMmU4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5CkBAIC0wLDAgKzEsMTIzMyBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMsIEludGVncml0eUVycm9yCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IEYsIFEsIEF2ZywgTWF4Citmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKworZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKKworZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgdmFsaWRhdG9ycworZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKK2ltcG9ydCBkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMKKworCitpbXBvcnQgbG9nZ2luZworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCisKK2NsYXNzIEdpdFVSTFZhbGlkYXRvcih2YWxpZGF0b3JzLlVSTFZhbGlkYXRvcik6CisgICAgaW1wb3J0IHJlCisgICAgcmVnZXggPSByZS5jb21waWxlKAorICAgICAgICByJ14oPzpzc2h8Z2l0fGh0dHB8ZnRwKXM/Oi8vJyAgIyBodHRwOi8vIG9yIGh0dHBzOi8vCisgICAgICAgIHInKD86KD86W0EtWjAtOV0oPzpbQS1aMC05LV17MCw2MX1bQS1aMC05XSk/XC4pKyg/OltBLVpdezIsNn1cLj98W0EtWjAtOS1dezIsfVwuPyl8JyAgIyBkb21haW4uLi4KKyAgICAgICAgcidsb2NhbGhvc3R8JyAgIyBsb2NhbGhvc3QuLi4KKyAgICAgICAgcidcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9fCcgICMgLi4ub3IgaXB2NAorICAgICAgICByJ1xbP1tBLUYwLTldKjpbQS1GMC05Ol0rXF0/KScgICMgLi4ub3IgaXB2NgorICAgICAgICByJyg/OjpcZCspPycgICMgb3B0aW9uYWwgcG9ydAorICAgICAgICByJyg/Oi8/fFsvP11cUyspJCcsIHJlLklHTk9SRUNBU0UpCisKK2RlZiBHaXRVUkxGaWVsZCgqKmt3YXJncyk6CisgICAgciA9IG1vZGVscy5VUkxGaWVsZCgqKmt3YXJncykKKyAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHIudmFsaWRhdG9ycykpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHIudmFsaWRhdG9yc1tpXSwgdmFsaWRhdG9ycy5VUkxWYWxpZGF0b3IpOgorICAgICAgICAgICAgci52YWxpZGF0b3JzW2ldID0gR2l0VVJMVmFsaWRhdG9yKCkKKyAgICByZXR1cm4gcgorCisKK2NsYXNzIFRvYXN0ZXJTZXR0aW5nKG1vZGVscy5Nb2RlbCk6CisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD02MykKKyAgICBoZWxwdGV4dCA9IG1vZGVscy5UZXh0RmllbGQoKQorICAgIHZhbHVlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJTZXR0aW5nICVzID0gJXMiICUgKHNlbGYubmFtZSwgc2VsZi52YWx1ZSkKKworY2xhc3MgUHJvamVjdE1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIGRlZiBjcmVhdGVfcHJvamVjdChzZWxmLCBuYW1lLCByZWxlYXNlKToKKyAgICAgICAgaWYgcmVsZWFzZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IHJlbGVhc2UuYml0YmFrZV92ZXJzaW9uLCByZWxlYXNlID0gcmVsZWFzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IE5vbmUsIHJlbGVhc2UgPSBOb25lKQorCisgICAgICAgIHByai5zYXZlKCkKKworICAgICAgICBmb3IgZGVmYXVsdGNvbmYgaW4gVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZV9fc3RhcnRzd2l0aD0iREVGQ09ORl8iKToKKyAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0Y29uZi5uYW1lWzg6XQorICAgICAgICAgICAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKCBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLAorICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdGNvbmYudmFsdWUpCisKKyAgICAgICAgaWYgcmVsZWFzZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHByagorCisgICAgICAgIGZvciByZGwgaW4gcmVsZWFzZS5yZWxlYXNlZGVmYXVsdGxheWVyX3NldC5hbGwoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIobGF5ZXJfX25hbWUgPSByZGwubGF5ZXJfbmFtZSwgdXBfYnJhbmNoX19uYW1lID0gcmVsZWFzZS5icmFuY2hfbmFtZSlbMF0uZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShwcmopWzBdCisgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKCBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb21taXQgPSBsdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gRmFsc2UgKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgIyB3ZSBtYXkgaGF2ZSBubyB2YWxpZCBsYXllciB2ZXJzaW9uIG9iamVjdHMsIGFuZCB0aGF0J3Mgb2sKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIHByagorCisgICAgZGVmIGNyZWF0ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgY2FsbCB0byBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlLiBVc2UgUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCkgdG8gY3JlYXRlIGEgcHJvamVjdCIpCisKKyAgICAjIHJldHVybiBzaW5nbGUgb2JqZWN0IHdpdGggaXNfZGVmYXVsdCA9IFRydWUKKyAgICBkZWYgZ2V0X2RlZmF1bHRfcHJvamVjdChzZWxmKToKKyAgICAgICAgcHJvamVjdHMgPSBzdXBlcihQcm9qZWN0TWFuYWdlciwgc2VsZikuZmlsdGVyKGlzX2RlZmF1bHQgPSBUcnVlKQorICAgICAgICBpZiBsZW4ocHJvamVjdHMpID4gMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IHByb2plY3QgZGF0YTogbXVsdGlwbGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgcHJvamVjdHMgKGkuZS4gd2l0aCBpc19kZWZhdWx0PVRydWUpIikKKyAgICAgICAgZWxpZiBsZW4ocHJvamVjdHMpIDwgMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IHByb2plY3QgZGF0YTogbm8gZGVmYXVsdCBwcm9qZWN0IGZvdW5kIikKKyAgICAgICAgcmV0dXJuIHByb2plY3RzWzBdCisKK2NsYXNzIFByb2plY3QobW9kZWxzLk1vZGVsKToKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAnc2hvcnRfZGVzY3JpcHRpb24nLCAncmVsZWFzZV9fbmFtZScsICdyZWxlYXNlX19icmFuY2hfbmFtZSddCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgc2hvcnRfZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAsIGJsYW5rPVRydWUpCisgICAgYml0YmFrZV92ZXJzaW9uID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0JpdGJha2VWZXJzaW9uJywgbnVsbD1UcnVlKQorICAgIHJlbGVhc2UgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoIlJlbGVhc2UiLCBudWxsPVRydWUpCisgICAgY3JlYXRlZCAgICAgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQgPSBUcnVlKQorICAgIHVwZGF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3cgPSBUcnVlKQorICAgICMgVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2s7IHNpbmNlIFRvYXN0ZXIgaGFzIG5vICJVc2VyIiBtb2RlbCBhdmFpbGFibGUgd2hlbgorICAgICMgcnVubmluZyBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBjYW4ndCByZWZlcmVuY2UgdGhlIGZpZWxkIGhlcmUgZGlyZWN0bHkKKyAgICAjIEluc3RlYWQsIHdlIGtlZXAgYSBwb3NzaWJsZSBudWxsIHJlZmVyZW5jZSB0byB0aGUgVXNlciBpZCwgYXMgbm90IHRvIGZvcmNlCisgICAgIyBoYXJkIGxpbmtzIHRvIHBvc3NpYmx5IG1pc3NpbmcgbW9kZWxzCisgICAgdXNlcl9pZCAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlKQorICAgIG9iamVjdHMgICAgID0gUHJvamVjdE1hbmFnZXIoKQorCisgICAgIyBzZXQgdG8gVHJ1ZSBmb3IgdGhlIHByb2plY3Qgd2hpY2ggaXMgdGhlIGRlZmF1bHQgY29udGFpbmVyCisgICAgIyBmb3IgYnVpbGRzIGluaXRpYXRlZCBieSB0aGUgY29tbWFuZCBsaW5lIGV0Yy4KKyAgICBpc19kZWZhdWx0ICA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IEZhbHNlKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzIChSZWxlYXNlICVzLCBCQlYgJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYucmVsZWFzZSwgc2VsZi5iaXRiYWtlX3ZlcnNpb24pCisKKyAgICBkZWYgZ2V0X2N1cnJlbnRfbWFjaGluZV9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWUKKyAgICAgICAgZXhjZXB0IChQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAiTm9uZSIgKTsKKworICAgIGRlZiBnZXRfbnVtYmVyX29mX2J1aWxkcyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxlbihCdWlsZC5vYmplY3RzLmZpbHRlciggcHJvamVjdCA9IHNlbGYuaWQgKSkKKyAgICAgICAgZXhjZXB0IChCdWlsZC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oIDAgKQorCisgICAgZGVmIGdldF9sYXN0X2J1aWxkX2lkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gQnVpbGQub2JqZWN0cy5maWx0ZXIoIHByb2plY3QgPSBzZWxmLmlkICkub3JkZXJfYnkoJy1jb21wbGV0ZWRfb24nKVswXS5pZAorICAgICAgICBleGNlcHQgKEJ1aWxkLkRvZXNOb3RFeGlzdCxJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiggLTEgKQorCisgICAgZGVmIGdldF9sYXN0X291dGNvbWUoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAiIiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBCdWlsZC5vYmplY3RzLmZpbHRlciggaWQgPSBzZWxmLmdldF9sYXN0X2J1aWxkX2lkIClbIDAgXS5vdXRjb21lCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3RfdGFyZ2V0KHNlbGYpOgorICAgICAgICBidWlsZF9pZCA9IHNlbGYuZ2V0X2xhc3RfYnVpbGRfaWQKKyAgICAgICAgaWYgKC0xID09IGJ1aWxkX2lkKToKKyAgICAgICAgICAgIHJldHVybiggIiIgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRfaWQpWzBdLnRhcmdldAorICAgICAgICBleGNlcHQgKFRhcmdldC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oICJub3RfZm91bmQiICkKKworICAgIGRlZiBnZXRfbGFzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAwICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gYnVpbGRfaWQpWyAwIF0uZXJyb3JzLmNvdW50KCkKKyAgICAgICAgZXhjZXB0IChCdWlsZC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oICJub3RfZm91bmQiICkKKworICAgIGRlZiBnZXRfbGFzdF93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgYnVpbGRfaWQgPSBzZWxmLmdldF9sYXN0X2J1aWxkX2lkCisgICAgICAgIGlmICgtMSA9PSBidWlsZF9pZCk6CisgICAgICAgICAgICByZXR1cm4oIDAgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gQnVpbGQub2JqZWN0cy5maWx0ZXIoaWQgPSBidWlsZF9pZClbIDAgXS53YXJuaW5ncy5jb3VudCgpCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3RfaW1nZmlsZXMoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAiIiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkX2lkLCB2YXJpYWJsZV9uYW1lID0gIklNQUdFX0ZTVFlQRVMiKVsgMCBdLnZhcmlhYmxlX3ZhbHVlCisgICAgICAgIGV4Y2VwdCAoVmFyaWFibGUuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICAjIHJldHVybnMgYSBxdWVyeXNldCBvZiBjb21wYXRpYmxlIGxheWVycyBmb3IgYSBwcm9qZWN0CisgICAgZGVmIGNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhzZWxmLCByZWxlYXNlID0gTm9uZSwgbGF5ZXJfbmFtZSA9IE5vbmUpOgorICAgICAgICBpZiByZWxlYXNlID09IE5vbmU6CisgICAgICAgICAgICByZWxlYXNlID0gc2VsZi5yZWxlYXNlCisgICAgICAgICMgbGF5ZXJzIG9uIHRoZSBzYW1lIGJyYW5jaCBvciBsYXllcnMgc3BlY2lmaWNhbGx5IHNldCBmb3IgdGhpcyBwcm9qZWN0CisgICAgICAgIHF1ZXJ5c2V0ID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcigoUSh1cF9icmFuY2hfX25hbWUgPSByZWxlYXNlLmJyYW5jaF9uYW1lKSAmIFEocHJvamVjdCA9IE5vbmUpKSB8IFEocHJvamVjdCA9IHNlbGYpIHwgUShidWlsZF9fcHJvamVjdCA9IHNlbGYpKQorCisgICAgICAgIGlmIGxheWVyX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIHdlIHNlbGVjdCBvbmx5IGEgbGF5ZXIgbmFtZQorICAgICAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIobGF5ZXJfX25hbWUgPSBsYXllcl9uYW1lKQorCisgICAgICAgICMgb3JkZXIgYnkgbGF5ZXIgdmVyc2lvbiBwcmlvcml0eQorICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmZpbHRlcihRKGxheWVyX3NvdXJjZT1Ob25lKSB8IFEobGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcmVsZWFzZSA9IHJlbGVhc2UpKS5zZWxlY3RfcmVsYXRlZCgnbGF5ZXJfc291cmNlJywgJ2xheWVyJywgJ3VwX2JyYW5jaCcsICJsYXllcl9zb3VyY2VfX3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5X19wcmlvcml0eSIpLm9yZGVyX2J5KCItbGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcHJpb3JpdHkiKQorCisgICAgICAgIHJldHVybiBxdWVyeXNldAorCisgICAgZGVmIHByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkuZmlsdGVyKGxheWVyX19uYW1lX19pbiA9IFt4LmxheWVyY29tbWl0LmxheWVyLm5hbWUgZm9yIHggaW4gc2VsZi5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpXSkuc2VsZWN0X3JlbGF0ZWQoInVwX2JyYW5jaCIpCisKKyAgICBkZWYgZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcyhzZWxmKToKKyAgICAgICAgIiIiIFJldHVybnMgUXVlcnlTZXQgb2YgYWxsIE1hY2hpbmVzIHdoaWNoIGFyZSBwcm92aWRlZCBieSB0aGUKKyAgICAgICAgTGF5ZXJzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgUHJvamVjdCAiIiIKKyAgICAgICAgcXVlcnlzZXQgPSBNYWNoaW5lLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luPXNlbGYucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KQorICAgICAgICByZXR1cm4gcXVlcnlzZXQKKworICAgIGRlZiBnZXRfYWxsX2NvbXBhdGlibGVfbWFjaGluZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgY29tcGF0aWJsZSBtYWNoaW5lcyBhdmFpbGFibGUgdG8gdGhlCisgICAgICAgIHByb2plY3QgaW5jbHVkaW5nIG9uZXMgZnJvbSBMYXllcnMgbm90IGN1cnJlbnRseSBhZGRlZCAiIiIKKyAgICAgICAgY29tcGF0aWJsZV9sYXllcnMgPSBzZWxmLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisKKyAgICAgICAgcXVlcnlzZXQgPSBNYWNoaW5lLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luPWNvbXBhdGlibGVfbGF5ZXJzKQorICAgICAgICByZXR1cm4gcXVlcnlzZXQKKworICAgIGRlZiBnZXRfYXZhaWxhYmxlX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCBSZWNpcGVzIHdoaWNoIGFyZSBwcm92aWRlZCBieSB0aGUgTGF5ZXJzCisgICAgICAgIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgUHJvamVjdCAiIiIKKyAgICAgICAgcHJvamVjdF9sYXllcnMgPSBzZWxmLnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCgpCisgICAgICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luID0gcHJvamVjdF9sYXllcnMpCisKKyAgICAgICAgIyBDb3BpZWQgZnJvbSBnZXRfYWxsX2NvbXBhdGlibGVfcmVjaXBlcworICAgICAgICBzZWFyY2hfbWF4aWRzID0gbWFwKGxhbWJkYSBpOiBpWzBdLCBsaXN0KHF1ZXJ5c2V0LnZhbHVlcygnbmFtZScpLmRpc3RpbmN0KCkuYW5ub3RhdGUobWF4X2lkPU1heCgnaWQnKSkudmFsdWVzX2xpc3QoJ21heF9pZCcpKSkKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoaWRfX2luPXNlYXJjaF9tYXhpZHMpLnNlbGVjdF9yZWxhdGVkKCdsYXllcl92ZXJzaW9uJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyJywgJ2xheWVyX3ZlcnNpb25fX3VwX2JyYW5jaCcsICdsYXllcl9zb3VyY2UnKQorICAgICAgICAjIEVuZCBjb3B5CisKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKyAgICBkZWYgZ2V0X2FsbF9jb21wYXRpYmxlX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgY29tcGF0aWJsZSBSZWNpcGVzIGF2YWlsYWJsZSB0byB0aGUKKyAgICAgICAgcHJvamVjdCBpbmNsdWRpbmcgb25lcyBmcm9tIExheWVycyBub3QgY3VycmVudGx5IGFkZGVkICIiIgorICAgICAgICBjb21wYXRpYmxlX2xheWVydmVyc2lvbnMgPSBzZWxmLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luID0gY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKQorCisgICAgICAgIHNlYXJjaF9tYXhpZHMgPSBtYXAobGFtYmRhIGk6IGlbMF0sIGxpc3QocXVlcnlzZXQudmFsdWVzKCduYW1lJykuZGlzdGluY3QoKS5hbm5vdGF0ZShtYXhfaWQ9TWF4KCdpZCcpKS52YWx1ZXNfbGlzdCgnbWF4X2lkJykpKQorCisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKGlkX19pbj1zZWFyY2hfbWF4aWRzKS5zZWxlY3RfcmVsYXRlZCgnbGF5ZXJfdmVyc2lvbicsICdsYXllcl92ZXJzaW9uX19sYXllcicsICdsYXllcl92ZXJzaW9uX191cF9icmFuY2gnLCAnbGF5ZXJfc291cmNlJykKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKworICAgIGRlZiBzY2hlZHVsZV9idWlsZChzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCUlRhcmdldCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJCaXRiYWtlCisgICAgICAgIGJyID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuY3JlYXRlKHByb2plY3QgPSBzZWxmKQorICAgICAgICB0cnk6CisKKyAgICAgICAgICAgIEJSQml0YmFrZS5vYmplY3RzLmNyZWF0ZShyZXEgPSBiciwKKyAgICAgICAgICAgICAgICBnaXR1cmwgPSBzZWxmLmJpdGJha2VfdmVyc2lvbi5naXR1cmwsCisgICAgICAgICAgICAgICAgY29tbWl0ID0gc2VsZi5iaXRiYWtlX3ZlcnNpb24uYnJhbmNoLAorICAgICAgICAgICAgICAgIGRpcnBhdGggPSBzZWxmLmJpdGJha2VfdmVyc2lvbi5kaXJwYXRoKQorCisgICAgICAgICAgICBmb3IgbCBpbiBzZWxmLnByb2plY3RsYXllcl9zZXQuYWxsKCkub3JkZXJfYnkoInBrIik6CisgICAgICAgICAgICAgICAgY29tbWl0ID0gbC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpCisgICAgICAgICAgICAgICAgcHJpbnQoImlpIEJ1aWxkaW5nIGxheWVyICIsIGwubGF5ZXJjb21taXQubGF5ZXIubmFtZSwgIiBhdCB2Y3MgcG9pbnQgIiwgY29tbWl0KQorICAgICAgICAgICAgICAgIEJSTGF5ZXIub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWUgPSBsLmxheWVyY29tbWl0LmxheWVyLm5hbWUsIGdpdHVybCA9IGwubGF5ZXJjb21taXQubGF5ZXIudmNzX3VybCwgY29tbWl0ID0gY29tbWl0LCBkaXJwYXRoID0gbC5sYXllcmNvbW1pdC5kaXJwYXRoKQorCisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVECisgICAgICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICAgICAgYnIuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGZvciB0IGluIHNlbGYucHJvamVjdHRhcmdldF9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgQlJUYXJnZXQub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIHRhcmdldCA9IHQudGFyZ2V0LCB0YXNrID0gdC50YXNrKQorICAgICAgICAgICAgICAgIFRhcmdldC5vYmplY3RzLmNyZWF0ZShidWlsZCA9IGJyLmJ1aWxkLCB0YXJnZXQgPSB0LnRhcmdldCkKKworICAgICAgICAgICAgZm9yIHYgaW4gc2VsZi5wcm9qZWN0dmFyaWFibGVfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIEJSVmFyaWFibGUub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWUgPSB2Lm5hbWUsIHZhbHVlID0gdi52YWx1ZSkKKworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnIuYnVpbGQubWFjaGluZSA9IHNlbGYucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZSA9ICdNQUNISU5FJykudmFsdWUKKyAgICAgICAgICAgICAgICBici5idWlsZC5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgIyByZXZlcnQgdGhlIGJ1aWxkIHJlcXVlc3QgY3JlYXRpb24gc2luY2Ugd2UncmUgbm90IGRvbmUgY2xlYW5seQorICAgICAgICAgICAgYnIuZGVsZXRlKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBicgorCitjbGFzcyBCdWlsZChtb2RlbHMuTW9kZWwpOgorICAgIFNVQ0NFRURFRCA9IDAKKyAgICBGQUlMRUQgPSAxCisgICAgSU5fUFJPR1JFU1MgPSAyCisKKyAgICBCVUlMRF9PVVRDT01FID0gKAorICAgICAgICAoU1VDQ0VFREVELCAnU3VjY2VlZGVkJyksCisgICAgICAgIChGQUlMRUQsICdGYWlsZWQnKSwKKyAgICAgICAgKElOX1BST0dSRVNTLCAnSW4gUHJvZ3Jlc3MnKSwKKyAgICApCisKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ21hY2hpbmUnLCAnY29va2VyX2xvZ19wYXRoJywgInRhcmdldF9fdGFyZ2V0IiwgInRhcmdldF9fdGFyZ2V0X2ltYWdlX2ZpbGVfX2ZpbGVfbmFtZSJdCisKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkgICAgICAgICAgICAjIG11c3QgaGF2ZSBhIHByb2plY3QKKyAgICBtYWNoaW5lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBkaXN0cm8gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIGRpc3Ryb192ZXJzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBzdGFydGVkX29uID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQorICAgIGNvbXBsZXRlZF9vbiA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKKyAgICBvdXRjb21lID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPUJVSUxEX09VVENPTUUsIGRlZmF1bHQ9SU5fUFJPR1JFU1MpCisgICAgY29va2VyX2xvZ19wYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwMCkKKyAgICBidWlsZF9uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBiaXRiYWtlX3ZlcnNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApCisKKyAgICBkZWYgY29tcGxldGVwZXIoc2VsZik6CisgICAgICAgIHRmID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IHNlbGYpCisgICAgICAgIHRmYyA9IHRmLmNvdW50KCkKKyAgICAgICAgaWYgdGZjID4gMDoKKyAgICAgICAgICAgIGNvbXBsZXRlcGVyID0gdGYuZXhjbHVkZShvcmRlcl9faXNudWxsPVRydWUpLmNvdW50KCkqMTAwL3RmLmNvdW50KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBsZXRlcGVyID0gMAorICAgICAgICByZXR1cm4gY29tcGxldGVwZXIKKworICAgIGRlZiBldGEoc2VsZik6CisgICAgICAgIGV0YSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGNvbXBsZXRlcGVyID0gc2VsZi5jb21wbGV0ZXBlcigpCisgICAgICAgIGlmIHNlbGYuY29tcGxldGVwZXIoKSA+IDA6CisgICAgICAgICAgICBldGEgKz0gKChldGEgLSBzZWxmLnN0YXJ0ZWRfb24pKigxMDAtY29tcGxldGVwZXIpKS9jb21wbGV0ZXBlcgorICAgICAgICByZXR1cm4gZXRhCisKKworICAgIGRlZiBnZXRfc29ydGVkX3RhcmdldF9saXN0KHNlbGYpOgorICAgICAgICB0Z3RzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkX2lkID0gc2VsZi5pZCkub3JkZXJfYnkoICd0YXJnZXQnICk7CisgICAgICAgIHJldHVybiggdGd0cyApOworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRvYXN0ZXJfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9nbWVzc2FnZV9zZXQuZmlsdGVyKGxldmVsPUxvZ01lc3NhZ2UuRVhDRVBUSU9OKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVycm9ycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVSUk9SKXxzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVYQ0VQVElPTikpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2FybmluZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGltZXNwZW50X3NlY29uZHMoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5jb21wbGV0ZWRfb24gLSBzZWxmLnN0YXJ0ZWRfb24pLnRvdGFsX3NlY29uZHMoKQorCisgICAgZGVmIGdldF9jdXJyZW50X3N0YXR1cyhzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0CisgICAgICAgIGlmIHNlbGYub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUyBhbmQgc2VsZi5idWlsZHJlcXVlc3Quc3RhdGUgIT0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRyZXF1ZXN0LmdldF9zdGF0ZV9kaXNwbGF5KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X291dGNvbWVfZGlzcGxheSgpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlZCAlcyAlcyIgJSAoc2VsZi5pZCwgc2VsZi5wcm9qZWN0LCAiLCIuam9pbihbdC50YXJnZXQgZm9yIHQgaW4gc2VsZi50YXJnZXRfc2V0LmFsbCgpXSkpCisKKworIyBhbiBBcnRpZmFjdCBpcyBhbnl0aGluZyB0aGF0IHJlc3VsdHMgZnJvbSBhIEJ1aWxkLCBhbmQgbWF5IGJlIG9mIGludGVyZXN0IHRvIHRoZSB1c2VyLCBhbmQgaXMgbm90IHN0b3JlZCBlbHNld2hlcmUKK2NsYXNzIEJ1aWxkQXJ0aWZhY3QobW9kZWxzLk1vZGVsKToKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIGZpbGVfbmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKCkKKyAgICBmaWxlX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKCkKKworICAgIGRlZiBnZXRfbG9jYWxfZmlsZV9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBsb3lkaXIgPSBWYXJpYWJsZS5vYmplY3RzLmdldChidWlsZCA9IHNlbGYuYnVpbGQsIHZhcmlhYmxlX25hbWU9IkRFUExPWV9ESVIiKS52YXJpYWJsZV92YWx1ZQorICAgICAgICAgICAgcmV0dXJuICBzZWxmLmZpbGVfbmFtZVtsZW4oZGVwbG95ZGlyKSsxOl0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5maWxlX25hbWUKKworCisgICAgZGVmIGlzX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGQuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50Lmhhc19hcnRpZmFjdChzZWxmLmZpbGVfbmFtZSkKKworY2xhc3MgUHJvamVjdFRhcmdldChtb2RlbHMuTW9kZWwpOgorICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIHRhcmdldCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGFzayA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKworY2xhc3MgVGFyZ2V0KG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyd0YXJnZXQnLCAnZmlsZV9uYW1lJ10KKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIHRhcmdldCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGFzayA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKyAgICBpc19pbWFnZSA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IEZhbHNlKQorICAgIGltYWdlX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBsaWNlbnNlX21hbmlmZXN0X3BhdGggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAwLCBudWxsPVRydWUpCisKKyAgICBkZWYgcGFja2FnZV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0PXNlbGYuaWQpLmNvdW50KCkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0CisKK2NsYXNzIFRhcmdldF9JbWFnZV9GaWxlKG1vZGVscy5Nb2RlbCk6CisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIGZpbGVfbmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU0KQorICAgIGZpbGVfc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorCitjbGFzcyBUYXJnZXRfRmlsZShtb2RlbHMuTW9kZWwpOgorICAgIElUWVBFX1JFR1VMQVIgPSAxCisgICAgSVRZUEVfRElSRUNUT1JZID0gMgorICAgIElUWVBFX1NZTUxJTksgPSAzCisgICAgSVRZUEVfU09DS0VUID0gNAorICAgIElUWVBFX0ZJRk8gPSA1CisgICAgSVRZUEVfQ0hBUkFDVEVSID0gNgorICAgIElUWVBFX0JMT0NLID0gNworICAgIElUWVBFUyA9ICggKElUWVBFX1JFR1VMQVIgLCdyZWd1bGFyJyksCisgICAgICAgICggSVRZUEVfRElSRUNUT1JZICwnZGlyZWN0b3J5JyksCisgICAgICAgICggSVRZUEVfU1lNTElOSyAsJ3N5bWxpbmsnKSwKKyAgICAgICAgKCBJVFlQRV9TT0NLRVQgLCdzb2NrZXQnKSwKKyAgICAgICAgKCBJVFlQRV9GSUZPICwnZmlmbycpLAorICAgICAgICAoIElUWVBFX0NIQVJBQ1RFUiAsJ2NoYXJhY3RlcicpLAorICAgICAgICAoIElUWVBFX0JMT0NLICwnYmxvY2snKSwKKyAgICAgICAgKQorCisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIHBhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZCgpCisgICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorICAgIGlub2RldHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcyA9IElUWVBFUykKKyAgICBwZXJtaXNzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTE2KQorICAgIG93bmVyID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCkKKyAgICBncm91cCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgpCisgICAgZGlyZWN0b3J5ID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1RhcmdldF9GaWxlJywgcmVsYXRlZF9uYW1lPSJkaXJlY3Rvcnlfc2V0IiwgbnVsbD1UcnVlKQorICAgIHN5bV90YXJnZXQgPSBtb2RlbHMuRm9yZWlnbktleSgnVGFyZ2V0X0ZpbGUnLCByZWxhdGVkX25hbWU9InN5bWxpbmtfc2V0IiwgbnVsbD1UcnVlKQorCisKK2NsYXNzIFRhc2sobW9kZWxzLk1vZGVsKToKKworICAgIFNTVEFURV9OQSA9IDAKKyAgICBTU1RBVEVfTUlTUyA9IDEKKyAgICBTU1RBVEVfRkFJTEVEID0gMgorICAgIFNTVEFURV9SRVNUT1JFRCA9IDMKKworICAgIFNTVEFURV9SRVNVTFQgPSAoCisgICAgICAgIChTU1RBVEVfTkEsICdOb3QgQXBwbGljYWJsZScpLCAjIEZvciByZXN0IG9mIHRhc2tzLCBidXQgdGhleSBzdGlsbCBuZWVkIGNoZWNraW5nLgorICAgICAgICAoU1NUQVRFX01JU1MsICdGaWxlIG5vdCBpbiBjYWNoZScpLCAjIHRoZSBzc3RhdGUgb2JqZWN0IHdhcyBub3QgZm91bmQKKyAgICAgICAgKFNTVEFURV9GQUlMRUQsICdGYWlsZWQnKSwgIyB0aGVyZSB3YXMgYSBwa2csIGJ1dCB0aGUgc2NyaXB0IGZhaWxlZAorICAgICAgICAoU1NUQVRFX1JFU1RPUkVELCAnU3VjY2VlZGVkJyksICMgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkCisgICAgKQorCisgICAgQ09ESU5HX05BID0gMAorICAgIENPRElOR19QWVRIT04gPSAyCisgICAgQ09ESU5HX1NIRUxMID0gMworCisgICAgVEFTS19DT0RJTkcgPSAoCisgICAgICAgIChDT0RJTkdfTkEsICdOL0EnKSwKKyAgICAgICAgKENPRElOR19QWVRIT04sICdQeXRob24nKSwKKyAgICAgICAgKENPRElOR19TSEVMTCwgJ1NoZWxsJyksCisgICAgKQorCisgICAgT1VUQ09NRV9OQSA9IC0xCisgICAgT1VUQ09NRV9TVUNDRVNTID0gMAorICAgIE9VVENPTUVfQ09WRVJFRCA9IDEKKyAgICBPVVRDT01FX0NBQ0hFRCA9IDIKKyAgICBPVVRDT01FX1BSRUJVSUxUID0gMworICAgIE9VVENPTUVfRkFJTEVEID0gNAorICAgIE9VVENPTUVfRU1QVFkgPSA1CisKKyAgICBUQVNLX09VVENPTUUgPSAoCisgICAgICAgIChPVVRDT01FX05BLCAnTm90IEF2YWlsYWJsZScpLAorICAgICAgICAoT1VUQ09NRV9TVUNDRVNTLCAnU3VjY2VlZGVkJyksCisgICAgICAgIChPVVRDT01FX0NPVkVSRUQsICdDb3ZlcmVkJyksCisgICAgICAgIChPVVRDT01FX0NBQ0hFRCwgJ0NhY2hlZCcpLAorICAgICAgICAoT1VUQ09NRV9QUkVCVUlMVCwgJ1ByZWJ1aWx0JyksCisgICAgICAgIChPVVRDT01FX0ZBSUxFRCwgJ0ZhaWxlZCcpLAorICAgICAgICAoT1VUQ09NRV9FTVBUWSwgJ0VtcHR5JyksCisgICAgKQorCisgICAgVEFTS19PVVRDT01FX0hFTFAgPSAoCisgICAgICAgIChPVVRDT01FX1NVQ0NFU1MsICdUaGlzIHRhc2sgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCcpLAorICAgICAgICAoT1VUQ09NRV9DT1ZFUkVELCAnVGhpcyB0YXNrIGRpZCBub3QgcnVuIGJlY2F1c2UgaXRzIG91dHB1dCBpcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2snKSwKKyAgICAgICAgKE9VVENPTUVfQ0FDSEVELCAnVGhpcyB0YXNrIHJlc3RvcmVkIG91dHB1dCBmcm9tIHRoZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgKE9VVENPTUVfUFJFQlVJTFQsICdUaGlzIHRhc2sgZGlkIG5vdCBydW4gYmVjYXVzZSBpdHMgb3V0Y29tZSB3YXMgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBidWlsZCcpLAorICAgICAgICAoT1VUQ09NRV9GQUlMRUQsICdUaGlzIHRhc2sgZGlkIG5vdCBjb21wbGV0ZScpLAorICAgICAgICAoT1VUQ09NRV9FTVBUWSwgJ1RoaXMgdGFzayBoYXMgbm8gZXhlY3V0YWJsZSBjb250ZW50JyksCisgICAgICAgIChPVVRDT01FX05BLCAnJyksCisgICAgKQorCisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyAicmVjaXBlX19uYW1lIiwgInJlY2lwZV9fdmVyc2lvbiIsICJ0YXNrX25hbWUiLCAibG9nZmlsZSIgXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFRhc2ssIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5faGVscHRleHQgPSBIZWxwVGV4dC5vYmplY3RzLmdldChrZXk9c2VsZi50YXNrX25hbWUsIGFyZWE9SGVscFRleHQuVkFSSUFCTEUsIGJ1aWxkPXNlbGYuYnVpbGQpLnRleHQKKyAgICAgICAgZXhjZXB0IEhlbHBUZXh0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHNlbGYuX2hlbHB0ZXh0ID0gTm9uZQorCisgICAgZGVmIGdldF9yZWxhdGVkX3NldHNjZW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkPVRydWUsIGJ1aWxkID0gc2VsZi5idWlsZCwgcmVjaXBlID0gc2VsZi5yZWNpcGUsIHRhc2tfbmFtZT1zZWxmLnRhc2tfbmFtZSsiX3NldHNjZW5lIikKKworICAgIGRlZiBnZXRfb3V0Y29tZV90ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gVGFzay5UQVNLX09VVENPTUVbaW50KHNlbGYub3V0Y29tZSkgKyAxXVsxXQorCisgICAgZGVmIGdldF9vdXRjb21lX2hlbHAoc2VsZik6CisgICAgICAgIHJldHVybiBUYXNrLlRBU0tfT1VUQ09NRV9IRUxQW2ludChzZWxmLm91dGNvbWUpXVsxXQorCisgICAgZGVmIGdldF9zc3RhdGVfdGV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zc3RhdGVfcmVzdWx0PT1UYXNrLlNTVEFURV9OQToKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRhc2suU1NUQVRFX1JFU1VMVFtpbnQoc2VsZi5zc3RhdGVfcmVzdWx0KV1bMV0KKworICAgIGRlZiBnZXRfZXhlY3V0ZWRfZGlzcGxheShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50YXNrX2V4ZWN1dGVkOgorICAgICAgICAgICAgcmV0dXJuICJFeGVjdXRlZCIKKyAgICAgICAgcmV0dXJuICJOb3QgRXhlY3V0ZWQiCisKKyAgICBkZWYgZ2V0X2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGVscHRleHQKKworICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0ndGFza19idWlsZCcpCisgICAgb3JkZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGw9VHJ1ZSkKKyAgICB0YXNrX2V4ZWN1dGVkID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKSAjIFRydWUgbWVhbnMgRXhlY3V0ZWQsIEZhbHNlIG1lYW5zIE5vdC9FeGVjdXRlZAorICAgIG91dGNvbWUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9VEFTS19PVVRDT01FLCBkZWZhdWx0PU9VVENPTUVfTkEpCisgICAgc3N0YXRlX2NoZWNrc3VtID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICBwYXRoX3RvX3NzdGF0ZV9vYmogPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTUwMCwgYmxhbms9VHJ1ZSkKKyAgICByZWNpcGUgPSBtb2RlbHMuRm9yZWlnbktleSgnUmVjaXBlJywgcmVsYXRlZF9uYW1lPSd0YXNrcycpCisgICAgdGFza19uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBzb3VyY2VfdXJsID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgd29ya19kaXJlY3RvcnkgPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NSwgYmxhbms9VHJ1ZSkKKyAgICBzY3JpcHRfdHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1UQVNLX0NPRElORywgZGVmYXVsdD1DT0RJTkdfTkEpCisgICAgbGluZV9udW1iZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBkaXNrX2lvID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisgICAgY3B1X3VzYWdlID0gbW9kZWxzLkRlY2ltYWxGaWVsZChtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIsIG51bGw9VHJ1ZSkKKyAgICBlbGFwc2VkX3RpbWUgPSBtb2RlbHMuRGVjaW1hbEZpZWxkKG1heF9kaWdpdHM9OCwgZGVjaW1hbF9wbGFjZXM9MiwgbnVsbD1UcnVlKQorICAgIHNzdGF0ZV9yZXN1bHQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9U1NUQVRFX1JFU1VMVCwgZGVmYXVsdD1TU1RBVEVfTkEpCisgICAgbWVzc2FnZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNDApCisgICAgbG9nZmlsZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKQorCisgICAgb3V0Y29tZV90ZXh0ID0gcHJvcGVydHkoZ2V0X291dGNvbWVfdGV4dCkKKyAgICBzc3RhdGVfdGV4dCAgPSBwcm9wZXJ0eShnZXRfc3N0YXRlX3RleHQpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJWQoJWQpICVzOiVzIiAlIChzZWxmLnBrLCBzZWxmLmJ1aWxkLnBrLCBzZWxmLnJlY2lwZS5uYW1lLCBzZWxmLnRhc2tfbmFtZSkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIG9yZGVyaW5nID0gKCdvcmRlcicsICdyZWNpcGUnICwpCisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScsICkKKworCitjbGFzcyBUYXNrX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICB0YXNrID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgcmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc190YXNrJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgcmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJykKKworY2xhc3MgUGFja2FnZShtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsnbmFtZScsICd2ZXJzaW9uJywgJ3JldmlzaW9uJywgJ3JlY2lwZV9fbmFtZScsICdyZWNpcGVfX3ZlcnNpb24nLCAncmVjaXBlX19saWNlbnNlJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2gnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19jb21taXQnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoJywgJ2luc3RhbGxlZF9uYW1lJ10KKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KCdCdWlsZCcpCisgICAgcmVjaXBlID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1JlY2lwZScsIG51bGw9VHJ1ZSkKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBpbnN0YWxsZWRfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGRlZmF1bHQ9JycpCisgICAgdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpCisgICAgcmV2aXNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUpCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBzaXplID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApCisgICAgaW5zdGFsbGVkX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBzZWN0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTgwLCBibGFuaz1UcnVlKQorICAgIGxpY2Vuc2UgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9ODAsIGJsYW5rPVRydWUpCisKK2NsYXNzIFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIHVzZV9mb3JfcmVsYXRlZF9maWVsZHMgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3F1ZXJ5X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIsIHNlbGYpLmdldF9xdWVyeV9zZXQoKS5leGNsdWRlKHBhY2thZ2VfaWQgPSBGKCdkZXBlbmRzX29uX19pZCcpKQorCitjbGFzcyBQYWNrYWdlX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICBUWVBFX1JERVBFTkRTID0gMAorICAgIFRZUEVfVFJERVBFTkRTID0gMQorICAgIFRZUEVfUlJFQ09NTUVORFMgPSAyCisgICAgVFlQRV9UUkVDT01NRU5EUyA9IDMKKyAgICBUWVBFX1JTVUdHRVNUUyA9IDQKKyAgICBUWVBFX1JQUk9WSURFUyA9IDUKKyAgICBUWVBFX1JSRVBMQUNFUyA9IDYKKyAgICBUWVBFX1JDT05GTElDVFMgPSA3CisgICAgJyBUT0RPOiBicGFja2FnZSBzaG91bGQgYmUgY2hhbmdlZCB0byByZW1vdmUgdGhlIERFUEVORFNfVFlQRSBhY2Nlc3MgJworICAgIERFUEVORFNfVFlQRSA9ICgKKyAgICAgICAgKFRZUEVfUkRFUEVORFMsICJkZXBlbmRzIiksCisgICAgICAgIChUWVBFX1RSREVQRU5EUywgImRlcGVuZHMiKSwKKyAgICAgICAgKFRZUEVfVFJFQ09NTUVORFMsICJyZWNvbW1lbmRzIiksCisgICAgICAgIChUWVBFX1JSRUNPTU1FTkRTLCAicmVjb21tZW5kcyIpLAorICAgICAgICAoVFlQRV9SU1VHR0VTVFMsICJzdWdnZXN0cyIpLAorICAgICAgICAoVFlQRV9SUFJPVklERVMsICJwcm92aWRlcyIpLAorICAgICAgICAoVFlQRV9SUkVQTEFDRVMsICJyZXBsYWNlcyIpLAorICAgICAgICAoVFlQRV9SQ09ORkxJQ1RTLCAiY29uZmxpY3RzIiksCisgICAgKQorICAgICIiIiBJbmRleGVkIGJ5IGRlcF90eXBlLCBpbiB2aWV3IG9yZGVyLCBrZXkgZm9yIHNob3J0IG5hbWUgYW5kIGhlbHAKKyAgICAgICAgZGVzY3JpcHRpb24gd2hpY2ggd2hlbiB2aWV3ZWQgd2lsbCBiZSBwcmludGYnZCB3aXRoIHRoZQorICAgICAgICBwYWNrYWdlIG5hbWUuCisgICAgIiIiCisgICAgREVQRU5EU19ESUNUID0geworICAgICAgICBUWVBFX1JERVBFTkRTIDogICAgICgiZGVwZW5kcyIsICIlcyBpcyByZXF1aXJlZCB0byBydW4gJXMiKSwKKyAgICAgICAgVFlQRV9UUkRFUEVORFMgOiAgICAoImRlcGVuZHMiLCAiJXMgaXMgcmVxdWlyZWQgdG8gcnVuICVzIiksCisgICAgICAgIFRZUEVfVFJFQ09NTUVORFMgOiAgKCJyZWNvbW1lbmRzIiwgIiVzIGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiAlcyIpLAorICAgICAgICBUWVBFX1JSRUNPTU1FTkRTIDogICgicmVjb21tZW5kcyIsICIlcyBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgJXMiKSwKKyAgICAgICAgVFlQRV9SU1VHR0VTVFMgOiAgICAoInN1Z2dlc3RzIiwgIiVzIGlzIHN1Z2dlc3RlZCBmb3IgaW5zdGFsbGF0aW9uIHdpdGggJXMiKSwKKyAgICAgICAgVFlQRV9SUFJPVklERVMgOiAgICAoInByb3ZpZGVzIiwgIiVzIGlzIHByb3ZpZGVkIGJ5ICVzIiksCisgICAgICAgIFRZUEVfUlJFUExBQ0VTIDogICAgKCJyZXBsYWNlcyIsICIlcyBpcyByZXBsYWNlZCBieSAlcyIpLAorICAgICAgICBUWVBFX1JDT05GTElDVFMgOiAgICgiY29uZmxpY3RzIiwgIiVzIGNvbmZsaWN0cyB3aXRoICVzLCB3aGljaCB3aWxsIG5vdCBiZSBpbnN0YWxsZWQgaWYgdGhpcyBwYWNrYWdlIGlzIG5vdCBmaXJzdCByZW1vdmVkIiksCisgICAgfQorCisgICAgcGFja2FnZSA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0ncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoUGFja2FnZSwgcmVsYXRlZF9uYW1lPSdwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnKSAgICMgc29mdCBkZXBlbmRlbmN5CisgICAgZGVwX3R5cGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9REVQRU5EU19UWVBFKQorICAgIHRhcmdldCA9IG1vZGVscy5Gb3JlaWduS2V5KFRhcmdldCwgbnVsbD1UcnVlKQorICAgIG9iamVjdHMgPSBQYWNrYWdlX0RlcGVuZGVuY3lNYW5hZ2VyKCkKKworY2xhc3MgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlKG1vZGVscy5Nb2RlbCk6CisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIHBhY2thZ2UgPSBtb2RlbHMuRm9yZWlnbktleShQYWNrYWdlLCByZWxhdGVkX25hbWU9J2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJykKKworY2xhc3MgUGFja2FnZV9GaWxlKG1vZGVscy5Nb2RlbCk6CisgICAgcGFja2FnZSA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0nYnVpbGRmaWxlbGlzdF9wYWNrYWdlJykKKyAgICBwYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorCitjbGFzcyBSZWNpcGUobW9kZWxzLk1vZGVsKToKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAndmVyc2lvbicsICdmaWxlX3BhdGgnLCAnc2VjdGlvbicsICdzdW1tYXJ5JywgJ2Rlc2NyaXB0aW9uJywgJ2xpY2Vuc2UnLCAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ2xheWVyX3ZlcnNpb25fX2NvbW1pdCcsICdsYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyX3NvdXJjZV9fbmFtZSddCisKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBkZWZhdWx0ID0gTm9uZSwgbnVsbCA9IFRydWUpICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIHJlY2lwZQorICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGVudHJ5IGluIHRoZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpICAgICAgICAgICAgICAgICAjIHBuCisgICAgdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpICAgICAgICAgICAgICAjIHB2CisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllcl9WZXJzaW9uJywgcmVsYXRlZF9uYW1lPSdyZWNpcGVfbGF5ZXJfdmVyc2lvbicpCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBzZWN0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICBsaWNlbnNlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCwgYmxhbms9VHJ1ZSkKKyAgICBob21lcGFnZSA9IG1vZGVscy5VUkxGaWVsZChibGFuaz1UcnVlKQorICAgIGJ1Z3RyYWNrZXIgPSBtb2RlbHMuVVJMRmllbGQoYmxhbms9VHJ1ZSkKKyAgICBmaWxlX3BhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBwYXRoZmxhZ3MgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKQorICAgIGlzX2ltYWdlID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKQorCisgICAgZGVmIGdldF9sYXllcnNvdXJjZV92aWV3X3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5sYXllcl9zb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHVybCA9IHNlbGYubGF5ZXJfc291cmNlLmdldF9vYmplY3RfdmlldyhzZWxmLmxheWVyX3ZlcnNpb24udXBfYnJhbmNoLCAicmVjaXBlcyIsIHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuIHVybAorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlJlY2lwZSAiICsgc2VsZi5uYW1lICsgIjoiICsgc2VsZi52ZXJzaW9uCisKKyAgICBkZWYgZ2V0X3Zjc19yZWNpcGVfZmlsZV9saW5rX3VybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGF5ZXJfdmVyc2lvbi5nZXRfdmNzX2ZpbGVfbGlua191cmwoc2VsZi5maWxlX3BhdGgpCisKKyAgICBkZWYgZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVzY3JpcHRpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZXNjcmlwdGlvbgorICAgICAgICBlbGlmIHNlbGYuc3VtbWFyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1bW1hcnkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgibGF5ZXJfdmVyc2lvbiIsICJmaWxlX3BhdGgiLCAicGF0aGZsYWdzIiksICkKKworCitjbGFzcyBSZWNpcGVfRGVwZW5kZW5jeU1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIHVzZV9mb3JfcmVsYXRlZF9maWVsZHMgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3F1ZXJ5X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFJlY2lwZV9EZXBlbmRlbmN5TWFuYWdlciwgc2VsZikuZ2V0X3F1ZXJ5X3NldCgpLmV4Y2x1ZGUocmVjaXBlX2lkID0gRignZGVwZW5kc19vbl9faWQnKSkKKworY2xhc3MgUmVjaXBlX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICBUWVBFX0RFUEVORFMgPSAwCisgICAgVFlQRV9SREVQRU5EUyA9IDEKKworICAgIERFUEVORFNfVFlQRSA9ICgKKyAgICAgICAgKFRZUEVfREVQRU5EUywgImRlcGVuZHMiKSwKKyAgICAgICAgKFRZUEVfUkRFUEVORFMsICJyZGVwZW5kcyIpLAorICAgICkKKyAgICByZWNpcGUgPSBtb2RlbHMuRm9yZWlnbktleShSZWNpcGUsIHJlbGF0ZWRfbmFtZT0ncl9kZXBlbmRlbmNpZXNfcmVjaXBlJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoUmVjaXBlLCByZWxhdGVkX25hbWU9J3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnKQorICAgIGRlcF90eXBlID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPURFUEVORFNfVFlQRSkKKyAgICBvYmplY3RzID0gUmVjaXBlX0RlcGVuZGVuY3lNYW5hZ2VyKCkKKworCitjbGFzcyBNYWNoaW5lKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyJuYW1lIiwgImRlc2NyaXB0aW9uIiwgImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIl0KKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBkZWZhdWx0ID0gTm9uZSwgbnVsbCA9IFRydWUpICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIG1hY2hpbmUKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGVudHJ5IGluIHRoZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllcl9WZXJzaW9uJykKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisKKyAgICBkZWYgZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmwoc2VsZik6CisgICAgICAgIHBhdGggPSAnY29uZi9tYWNoaW5lLycrc2VsZi5uYW1lKycuY29uZicKKworICAgICAgICByZXR1cm4gc2VsZi5sYXllcl92ZXJzaW9uLmdldF92Y3NfZmlsZV9saW5rX3VybChwYXRoKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1hY2hpbmUgIiArIHNlbGYubmFtZSArICIoIiArIHNlbGYuZGVzY3JpcHRpb24gKyAiKSIKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgibGF5ZXJfc291cmNlIiwgInVwX2lkIikKKworCitmcm9tIGRqYW5nby5kYi5tb2RlbHMuYmFzZSBpbXBvcnQgTW9kZWxCYXNlCisKK2NsYXNzIEluaGVyaXRhbmNlTWV0YWNsYXNzKE1vZGVsQmFzZSk6CisgICAgZGVmIF9fY2FsbF9fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgb2JqID0gc3VwZXIoSW5oZXJpdGFuY2VNZXRhY2xhc3MsIGNscykuX19jYWxsX18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gb2JqLmdldF9vYmplY3QoKQorCisKK2NsYXNzIExheWVyU291cmNlKG1vZGVscy5Nb2RlbCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEluaGVyaXRhbmNlTWV0YWNsYXNzCisKKyAgICBjbGFzcyBNZXRhOgorICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCApCisKKyAgICBUWVBFX0xPQ0FMID0gMAorICAgIFRZUEVfTEFZRVJJTkRFWCA9IDEKKyAgICBUWVBFX0lNUE9SVEVEID0gMgorICAgIFNPVVJDRV9UWVBFID0gKAorICAgICAgICAoVFlQRV9MT0NBTCwgImxvY2FsIiksCisgICAgICAgIChUWVBFX0xBWUVSSU5ERVgsICJsYXllcmluZGV4IiksCisgICAgICAgIChUWVBFX0lNUE9SVEVELCAiaW1wb3J0ZWQiKSwKKyAgICAgICkKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NjMsIHVuaXF1ZSA9IFRydWUpCisgICAgc291cmNldHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1TT1VSQ0VfVFlQRSkKKyAgICBhcGl1cmwgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUsIGRlZmF1bHQ9Tm9uZSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gTG9jYWxMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVg6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExheWVySW5kZXhMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBJbXBvcnRlZExheWVyU291cmNlCisgICAgICAgIGVsaWYgc2VsZi5zb3VyY2V0eXBlID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gTGF5ZXJTb3VyY2UtZGVyaXZlZCBjbGFzcy4gSWYgeW91IGFkZGVkIGEgbmV3IGxheWVyIHNvdXJjZSB0eXBlLCBmaWxsIG91dCBhbGwgY29kZSBzdHVicy4iKQorCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIFVwZGF0ZXMgdGhlIGxvY2FsIGRhdGFiYXNlIGluZm9ybWF0aW9uIGZyb20gdGhlIHVwc3RyZWFtIGxheWVyIHNvdXJjZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBYnN0cmFjdCwgdXBkYXRlKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbGwgTGF5ZXJTb3VyY2UtZGVyaXZlZCBjbGFzc2VzIChvYmplY3QgaXMgJXMpIiAlIHN0cih2YXJzKHNlbGYpKSkKKworICAgIGRlZiBzYXZlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzdXBlcihMYXllclNvdXJjZSwgc2VsZikuc2F2ZSgqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X29iamVjdChzZWxmKToKKyAgICAgICAgIyBwcmVzZXQgYW4gdW4taW5pdGlsaXplZCBvYmplY3QKKyAgICAgICAgaWYgTm9uZSA9PSBzZWxmLm5hbWU6CisgICAgICAgICAgICBzZWxmLm5hbWU9IiIKKyAgICAgICAgaWYgTm9uZSA9PSBzZWxmLmFwaXVybDoKKyAgICAgICAgICAgIHNlbGYuYXBpdXJsPSIiCisgICAgICAgIGlmIE5vbmUgPT0gc2VsZi5zb3VyY2V0eXBlOgorICAgICAgICAgICAgc2VsZi5zb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfTE9DQUwKKworICAgICAgICBpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gTG9jYWxMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVg6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExheWVySW5kZXhMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBJbXBvcnRlZExheWVyU291cmNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gTGF5ZXJTb3VyY2UgdHlwZS4gSWYgeW91IGFkZGVkIGEgbmV3IGxheWVyIHNvdXJjZSB0eXBlLCBmaWxsIG91dCBhbGwgY29kZSBzdHVicy4iKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHNlbGYubmFtZSwgc2VsZi5zb3VyY2V0eXBlKQorCisKK2NsYXNzIExvY2FsTGF5ZXJTb3VyY2UoTGF5ZXJTb3VyY2UpOgorICAgIGNsYXNzIE1ldGEoTGF5ZXJTb3VyY2UuX21ldGEuX19jbGFzc19fKToKKyAgICAgICAgcHJveHkgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTG9jYWxMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oYXJncywga3dhcmdzKQorICAgICAgICBzZWxmLnNvdXJjZXR5cGUgPSBMYXllclNvdXJjZS5UWVBFX0xPQ0FMCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEZldGNoZXMgbGF5ZXIsIHJlY2lwZSBhbmQgbWFjaGluZSBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHJlcG9zaXRvcnkKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworY2xhc3MgSW1wb3J0ZWRMYXllclNvdXJjZShMYXllclNvdXJjZSk6CisgICAgY2xhc3MgTWV0YShMYXllclNvdXJjZS5fbWV0YS5fX2NsYXNzX18pOgorICAgICAgICBwcm94eSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihJbXBvcnRlZExheWVyU291cmNlLCBzZWxmKS5fX2luaXRfXyhhcmdzLCBrd2FyZ3MpCisgICAgICAgIHNlbGYuc291cmNldHlwZSA9IExheWVyU291cmNlLlRZUEVfSU1QT1JURUQKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgICAgRmV0Y2hlcyBsYXllciwgcmVjaXBlIGFuZCBtYWNoaW5lIGluZm9ybWF0aW9uIGZyb20gbG9jYWwgcmVwb3NpdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisKK2NsYXNzIExheWVySW5kZXhMYXllclNvdXJjZShMYXllclNvdXJjZSk6CisgICAgY2xhc3MgTWV0YShMYXllclNvdXJjZS5fbWV0YS5fX2NsYXNzX18pOgorICAgICAgICBwcm94eSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllckluZGV4TGF5ZXJTb3VyY2UsIHNlbGYpLl9faW5pdF9fKGFyZ3MsIGt3YXJncykKKyAgICAgICAgc2VsZi5zb3VyY2V0eXBlID0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYCisKKyAgICBkZWYgZ2V0X29iamVjdF92aWV3KHNlbGYsIGJyYW5jaCwgb2JqZWN0eXBlLCB1cGlkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXBpdXJsICsgIi4uL2JyYW5jaC8iICsgYnJhbmNoLm5hbWUgKyAiLyIgKyBvYmplY3R5cGUgKyAiLz9xPSIgKyBzdHIodXBpZCkKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgICAgRmV0Y2hlcyBsYXllciwgcmVjaXBlIGFuZCBtYWNoaW5lIGluZm9ybWF0aW9uIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkKKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBzZWxmLmFwaXVybCBpcyBub3QgTm9uZQorICAgICAgICBmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24KKworICAgICAgICBpbXBvcnQgdXJsbGliMiwgdXJscGFyc2UsIGpzb24KKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHByb3h5X3NldHRpbmdzID0gb3MuZW52aXJvbi5nZXQoImh0dHBfcHJveHkiLCBOb25lKQorCisgICAgICAgIGRlZiBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpdXJsID0gc2VsZi5hcGl1cmwpOgorICAgICAgICAgICAgX3BhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKGFwaXVybCkKKyAgICAgICAgICAgIHBhdGggPSBfcGFyc2VkdXJsLnBhdGgKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlcyA9IHVybGxpYjIudXJsb3BlbihhcGl1cmwpCisgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgJXM6ICVzIiAlIChwYXRoLCBlLnJlYXNvbikpCisKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlcy5yZWFkKCkpCisKKyAgICAgICAgIyB2ZXJpZnkgd2UgY2FuIGdldCB0aGUgYmFzaWMgYXBpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFwaWxpbmtzID0gX2dldF9qc29uX3Jlc3BvbnNlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgaWYgcHJveHlfc2V0dGluZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkVFOiBVc2luZyBwcm94eSAlcyIgJSBwcm94eV9zZXR0aW5ncykKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJFRTogY291bGQgbm90IGNvbm5lY3QgdG8gJXMsIHNraXBwaW5nIHVwZGF0ZTogJXNcbiVzIiAlIChzZWxmLmFwaXVybCwgZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyB1cGRhdGUgYnJhbmNoZXM7IG9ubHkgdGhvc2UgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgbmFtZXMgbGlzdGVkIGluIHRoZQorICAgICAgICAjIFJlbGVhc2VzIHRhYmxlCisgICAgICAgIHdoaXRlbGlzdF9icmFuY2hfbmFtZXMgPSBtYXAobGFtYmRhIHg6IHguYnJhbmNoX25hbWUsIFJlbGVhc2Uub2JqZWN0cy5hbGwoKSkKKyAgICAgICAgaWYgbGVuKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBtYWtlIGxpc3Qgb2YgYnJhbmNoZXMgdG8gZmV0Y2giKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmV0Y2hpbmcgYnJhbmNoZXMiKQorICAgICAgICBicmFuY2hlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydicmFuY2hlcyddCisgICAgICAgICAgICArICI/ZmlsdGVyPW5hbWU6JXMiICUgIk9SIi5qb2luKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpKQorICAgICAgICBmb3IgYmkgaW4gYnJhbmNoZXNfaW5mbzoKKyAgICAgICAgICAgIGIsIGNyZWF0ZWQgPSBCcmFuY2gub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsIG5hbWUgPSBiaVsnbmFtZSddKQorICAgICAgICAgICAgYi51cF9pZCA9IGJpWydpZCddCisgICAgICAgICAgICBiLnVwX2RhdGUgPSBiaVsndXBkYXRlZCddCisgICAgICAgICAgICBiLm5hbWUgPSBiaVsnbmFtZSddCisgICAgICAgICAgICBiLnNob3J0X2Rlc2NyaXB0aW9uID0gYmlbJ3Nob3J0X2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIGIuc2F2ZSgpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXJzCisgICAgICAgIGxheWVyc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckl0ZW1zJ10pCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIGxpIGluIGxheWVyc19pbmZvOgorICAgICAgICAgICAgbCwgY3JlYXRlZCA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCBuYW1lID0gbGlbJ25hbWUnXSkKKyAgICAgICAgICAgIGwudXBfaWQgPSBsaVsnaWQnXQorICAgICAgICAgICAgbC51cF9kYXRlID0gbGlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbC52Y3NfdXJsID0gbGlbJ3Zjc191cmwnXQorICAgICAgICAgICAgbC52Y3Nfd2ViX3VybCA9IGxpWyd2Y3Nfd2ViX3VybCddCisgICAgICAgICAgICBsLnZjc193ZWJfdHJlZV9iYXNlX3VybCA9IGxpWyd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnXQorICAgICAgICAgICAgbC52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBsaVsndmNzX3dlYl9maWxlX2Jhc2VfdXJsJ10KKyAgICAgICAgICAgIGwuc3VtbWFyeSA9IGxpWydzdW1tYXJ5J10KKyAgICAgICAgICAgIGwuZGVzY3JpcHRpb24gPSBsaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgbC5zYXZlKCkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXJicmFuY2hlcy9sYXllcl92ZXJzaW9ucworICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIGxheWVyIGluZm9ybWF0aW9uIikKKyAgICAgICAgbGF5ZXJicmFuY2hlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckJyYW5jaGVzJ10KKyAgICAgICAgICAgICAgICArICI/ZmlsdGVyPWJyYW5jaDolcyIgJSAiT1IiLmpvaW4obWFwKGxhbWJkYSB4OiBzdHIoeC51cF9pZCksIFtpIGZvciBpIGluIEJyYW5jaC5vYmplY3RzLmZpbHRlcihsYXllcl9zb3VyY2UgPSBzZWxmKSBpZiBpLnVwX2lkIGlzIG5vdCBOb25lXSApKQorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIGxiaSBpbiBsYXllcmJyYW5jaGVzX2luZm86CisgICAgICAgICAgICBsdiwgY3JlYXRlZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgIHVwX2lkID0gbGJpWydpZCddLAorICAgICAgICAgICAgICAgICAgICBsYXllcj1MYXllci5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IGxiaVsnbGF5ZXInXSkKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIGx2LnVwX2RhdGUgPSBsYmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbHYudXBfYnJhbmNoID0gQnJhbmNoLm9iamVjdHMuZ2V0KGxheWVyX3NvdXJjZSA9IHNlbGYsIHVwX2lkID0gbGJpWydicmFuY2gnXSkKKyAgICAgICAgICAgIGx2LmJyYW5jaCA9IGxiaVsnYWN0dWFsX2JyYW5jaCddCisgICAgICAgICAgICBsdi5jb21taXQgPSBsYmlbJ2FjdHVhbF9icmFuY2gnXQorICAgICAgICAgICAgbHYuZGlycGF0aCA9IGxiaVsndmNzX3N1YmRpciddCisgICAgICAgICAgICBsdi5zYXZlKCkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXIgZGVwZW5kZW5jaWVzCisgICAgICAgIGxheWVyZGVwZW5kZW5jaWVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ2xheWVyRGVwZW5kZW5jaWVzJ10pCisgICAgICAgIGRlcGVuZGxpc3QgPSB7fQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIGZvciBsZGkgaW4gbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBsZGlbJ2xheWVyYnJhbmNoJ10pCisgICAgICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3QgYXMgZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBsdiBub3QgaW4gZGVwZW5kbGlzdDoKKyAgICAgICAgICAgICAgICBkZXBlbmRsaXN0W2x2XSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVwZW5kbGlzdFtsdl0uYXBwZW5kKExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgbGF5ZXJfX3VwX2lkID0gbGRpWydkZXBlbmRlbmN5J10sIHVwX2JyYW5jaCA9IGx2LnVwX2JyYW5jaCkpCisgICAgICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNhbm5vdCBmaW5kIGxheWVyIHZlcnNpb24gKGxzOiVzKSwgdXBfaWQ6JXMgbHY6JXMiICUgKHNlbGYsIGxkaVsnZGVwZW5kZW5jeSddLCBsdikpCisKKyAgICAgICAgZm9yIGx2IGluIGRlcGVuZGxpc3Q6CisgICAgICAgICAgICBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb24gPSBsdikuZGVsZXRlKCkKKyAgICAgICAgICAgIGZvciBsdmQgaW4gZGVwZW5kbGlzdFtsdl06CisgICAgICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfdmVyc2lvbiA9IGx2LCBkZXBlbmRzX29uID0gbHZkKQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKKworCisgICAgICAgICMgdXBkYXRlIG1hY2hpbmVzCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmV0Y2hpbmcgbWFjaGluZSBpbmZvcm1hdGlvbiIpCisgICAgICAgIG1hY2hpbmVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ21hY2hpbmVzJ10KKyAgICAgICAgICAgICAgICArICI/ZmlsdGVyPWxheWVyYnJhbmNoOiVzIiAlICJPUiIuam9pbihtYXAobGFtYmRhIHg6IHN0cih4LnVwX2lkKSwgTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihsYXllcl9zb3VyY2UgPSBzZWxmKSkpCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBmb3IgbWkgaW4gbWFjaGluZXNfaW5mbzoKKyAgICAgICAgICAgIG1vLCBjcmVhdGVkID0gTWFjaGluZS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBtaVsnaWQnXSwgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBtaVsnbGF5ZXJicmFuY2gnXSkpCisgICAgICAgICAgICBtby51cF9kYXRlID0gbWlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbW8ubmFtZSA9IG1pWyduYW1lJ10KKyAgICAgICAgICAgIG1vLmRlc2NyaXB0aW9uID0gbWlbJ2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIG1vLnNhdmUoKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQorCisgICAgICAgICMgdXBkYXRlIHJlY2lwZXM7IHBhZ2luYXRlIGJ5IGxheWVyIHZlcnNpb24gLyBsYXllciBicmFuY2gKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJGZXRjaGluZyB0YXJnZXQgaW5mb3JtYXRpb24iKQorICAgICAgICByZWNpcGVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ3JlY2lwZXMnXQorICAgICAgICAgICAgICAgICsgIj9maWx0ZXI9bGF5ZXJicmFuY2g6JXMiICUgIk9SIi5qb2luKG1hcChsYW1iZGEgeDogc3RyKHgudXBfaWQpLCBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGxheWVyX3NvdXJjZSA9IHNlbGYpKSkKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBmb3IgcmkgaW4gcmVjaXBlc19pbmZvOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJvLCBjcmVhdGVkID0gUmVjaXBlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydpZCddLCBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydsYXllcmJyYW5jaCddKSkKKyAgICAgICAgICAgICAgICByby51cF9kYXRlID0gcmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgICAgIHJvLm5hbWUgPSByaVsncG4nXQorICAgICAgICAgICAgICAgIHJvLnZlcnNpb24gPSByaVsncHYnXQorICAgICAgICAgICAgICAgIHJvLnN1bW1hcnkgPSByaVsnc3VtbWFyeSddCisgICAgICAgICAgICAgICAgcm8uZGVzY3JpcHRpb24gPSByaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgICAgIHJvLnNlY3Rpb24gPSByaVsnc2VjdGlvbiddCisgICAgICAgICAgICAgICAgcm8ubGljZW5zZSA9IHJpWydsaWNlbnNlJ10KKyAgICAgICAgICAgICAgICByby5ob21lcGFnZSA9IHJpWydob21lcGFnZSddCisgICAgICAgICAgICAgICAgcm8uYnVndHJhY2tlciA9IHJpWydidWd0cmFja2VyJ10KKyAgICAgICAgICAgICAgICByby5maWxlX3BhdGggPSByaVsnZmlsZXBhdGgnXSArICIvIiArIHJpWydmaWxlbmFtZSddCisgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiByaToKKyAgICAgICAgICAgICAgICAgICAgcm8uaXNfaW1hZ2UgPSAnaW1hZ2UnIGluIHJpWydpbmhlcml0cyddLnNwbGl0KCkKKyAgICAgICAgICAgICAgICByby5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlZ3JpdHlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmFpbGVkIHNhdmluZyByZWNpcGUsIGlnbm9yaW5nOiAlcyAoJXM6JXMpIiAlIChlLCByby5sYXllcl92ZXJzaW9uLCByaVsnZmlsZXBhdGgnXSsiLyIrcmlbJ2ZpbGVuYW1lJ10pKQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKKworY2xhc3MgQml0YmFrZVZlcnNpb24obW9kZWxzLk1vZGVsKToKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIHVuaXF1ZSA9IFRydWUpCisgICAgZ2l0dXJsID0gR2l0VVJMRmllbGQoKQorICAgIGJyYW5jaCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMikKKyAgICBkaXJwYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoQnJhbmNoOiAlcykiICUgKHNlbGYubmFtZSwgc2VsZi5icmFuY2gpCisKKworY2xhc3MgUmVsZWFzZShtb2RlbHMuTW9kZWwpOgorICAgICIiIiBBIHJlbGVhc2UgaXMgYSBwcm9qZWN0IHRlbXBsYXRlLCB1c2VkIHRvIHByZS1wb3B1bGF0ZSBQcm9qZWN0IHNldHRpbmdzIHdpdGggYSBjb25maWd1cmF0aW9uIHNldCAiIiIKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMyLCB1bmlxdWUgPSBUcnVlKQorICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBiaXRiYWtlX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleShCaXRiYWtlVmVyc2lvbikKKyAgICBicmFuY2hfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCwgZGVmYXVsdCA9ICIiKQorICAgIGhlbHB0ZXh0ID0gbW9kZWxzLlRleHRGaWVsZChudWxsPVRydWUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc2VsZi5uYW1lLCBzZWxmLmJyYW5jaF9uYW1lKQorCitjbGFzcyBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eShtb2RlbHMuTW9kZWwpOgorICAgICIiIiBFYWNoIHJlbGVhc2Ugc2VsZWN0cyBsYXllcnMgZnJvbSB0aGUgc2V0IHVwIGxheWVyIHNvdXJjZXMsIG9yZGVyZWQgYnkgcHJpb3JpdHkgIiIiCisgICAgcmVsZWFzZSA9IG1vZGVscy5Gb3JlaWduS2V5KCJSZWxlYXNlIikKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgiTGF5ZXJTb3VyY2UiKQorICAgIHByaW9yaXR5ID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0ID0gMCkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy0lczolZCIgJSAoc2VsZi5yZWxlYXNlLm5hbWUsIHNlbGYubGF5ZXJfc291cmNlLm5hbWUsIHNlbGYucHJpb3JpdHkpCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpCisKKworY2xhc3MgUmVsZWFzZURlZmF1bHRMYXllcihtb2RlbHMuTW9kZWwpOgorICAgIHJlbGVhc2UgPSBtb2RlbHMuRm9yZWlnbktleShSZWxlYXNlKQorICAgIGxheWVyX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBkZWZhdWx0PSIiKQorCisKKyMgQnJhbmNoIGNsYXNzIGlzIHN5bmNlZCB3aXRoIGxheWVyaW5kZXguQnJhbmNoLCBicmFuY2hlcyBjYW4gb25seSBjb21lIGZyb20gcmVtb3RlIGxheWVyIGluZGV4ZXMKK2NsYXNzIEJyYW5jaChtb2RlbHMuTW9kZWwpOgorICAgIGxheWVyX3NvdXJjZSA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllclNvdXJjZScsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gVHJ1ZSkKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBicmFuY2ggaW4gdGhlIHNvdXJjZQorICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQorICAgIHNob3J0X2Rlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9ICJCcmFuY2hlcyIKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKworIyBMYXllciBjbGFzcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVySXRlbQorY2xhc3MgTGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleShMYXllclNvdXJjZSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnb3QgdGhpcyBsYXllcgorICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGxheWVyIGluIHRoZSByZW1vdGUgc291cmNlCisgICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIGxheWVyX2luZGV4X3VybCA9IG1vZGVscy5VUkxGaWVsZCgpCisgICAgdmNzX3VybCA9IEdpdFVSTEZpZWxkKGRlZmF1bHQgPSBOb25lLCBudWxsID0gVHJ1ZSkKKyAgICB2Y3Nfd2ViX3VybCA9IG1vZGVscy5VUkxGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdmNzX3dlYl90cmVlX2Jhc2VfdXJsID0gbW9kZWxzLlVSTEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKyAgICB2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBtb2RlbHMuVVJMRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoaGVscF90ZXh0PSdPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGF5ZXInLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAvICVzICIgJSAoc2VsZi5uYW1lLCBzZWxmLmxheWVyX3NvdXJjZSkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoImxheWVyX3NvdXJjZSIsICJ1cF9pZCIpLCAoImxheWVyX3NvdXJjZSIsICJuYW1lIikpCisKKworIyBMYXllckNvbW1pdCBjbGFzcyBpcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVyQnJhbmNoCitjbGFzcyBMYXllcl9WZXJzaW9uKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyJsYXllcl9fbmFtZSIsICJsYXllcl9fc3VtbWFyeSIsICJsYXllcl9fZGVzY3JpcHRpb24iLCAibGF5ZXJfX3Zjc191cmwiLCAiZGlycGF0aCIsICJ1cF9icmFuY2hfX25hbWUiLCAiY29tbWl0IiwgImJyYW5jaCJdCisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZCwgcmVsYXRlZF9uYW1lPSdsYXllcl92ZXJzaW9uX2J1aWxkJywgZGVmYXVsdCA9IE5vbmUsIG51bGwgPSBUcnVlKQorICAgIGxheWVyID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXIsIHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9sYXllcicpCisKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleShMYXllclNvdXJjZSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIExheWVyIFZlcnNpb24KKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgIyBpZCBvZiBsYXllcmJyYW5jaCBpbiB0aGUgcmVtb3RlIHNvdXJjZQorICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdXBfYnJhbmNoID0gbW9kZWxzLkZvcmVpZ25LZXkoQnJhbmNoLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBicmFuY2ggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9ODApICAgICAgICAgICAgIyBMYXllckJyYW5jaC5hY3R1YWxfYnJhbmNoCisgICAgY29tbWl0ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkgICAgICAgICAgICMgTGF5ZXJCcmFuY2gudmNzX2xhc3RfcmV2CisgICAgZGlycGF0aCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgIyBMYXllckJyYW5jaC52Y3Nfc3ViZGlyCisgICAgcHJpb3JpdHkgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQgPSAwKSAgICAgICAgICMgaWYgLTEsIHRoaXMgaXMgYSBkZWZhdWx0IGxheWVyCisKKyAgICBsb2NhbF9wYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0xMDI0LCBkZWZhdWx0ID0gIi8iKSAgIyB3aGVyZSB0aGlzIGxheWVyIHdhcyBjaGVja2VkLW91dAorCisgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KCdQcm9qZWN0JywgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICMgU2V0IGlmIHRoaXMgbGF5ZXIgaXMgcHJvamVjdC1zcGVjaWZpYzsgYWx3YXlzIHNldCBmb3IgaW1wb3J0ZWQgbGF5ZXJzLCBhbmQgcHJvamVjdC1zZXQgYnJhbmNoZXMKKworICAgICMgY29kZSBsaWZ0ZWQsIHdpdGggYWRhcHRhdGlvbnMsIGZyb20gdGhlIGxheWVyaW5kZXgtd2ViIGFwcGxpY2F0aW9uIGh0dHBzOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9sYXllcmluZGV4LXdlYi8KKyAgICBkZWYgX2hhbmRsZV91cmxfcGF0aChzZWxmLCBiYXNlX3VybCwgcGF0aCk6CisgICAgICAgIGltcG9ydCByZSwgcG9zaXhwYXRoCisgICAgICAgIGlmIGJhc2VfdXJsOgorICAgICAgICAgICAgaWYgc2VsZi5kaXJwYXRoOgorICAgICAgICAgICAgICAgIGlmIHBhdGg6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBzZWxmLmRpcnBhdGggKyAnLycgKyBwYXRoCisgICAgICAgICAgICAgICAgICAgICMgTm9ybWFsaXNlIG91dCAuLi8gaW4gcGF0aCBmb3IgdXNhZ2UgVVJMCisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgoZXh0cmFfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgIyBNaW5vciB3b3JrYXJvdW5kIHRvIGhhbmRsZSBjYXNlIHdoZXJlIHN1YmRpcmVjdG9yeSBoYXMgYmVlbiBhZGRlZCBiZXR3ZWVuIGJyYW5jaGVzCisgICAgICAgICAgICAgICAgICAgICMgKHNob3VsZCBwcm9iYWJseSBzdXBwb3J0IHVzYWdlIFVSTCBwZXIgYnJhbmNoIHRvIGhhbmRsZSB0aGlzLi4uIHNpZ2guLi4pCisgICAgICAgICAgICAgICAgICAgIGlmIGV4dHJhX3BhdGguc3RhcnRzd2l0aCgnLi4vJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gZXh0cmFfcGF0aFszOl0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gc2VsZi5kaXJwYXRoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBwYXRoCisgICAgICAgICAgICBicmFuY2huYW1lID0gc2VsZi51cF9icmFuY2gubmFtZQorICAgICAgICAgICAgdXJsID0gYmFzZV91cmwucmVwbGFjZSgnJWJyYW5jaCUnLCBicmFuY2huYW1lKQorCisgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYSAlIGluIHRoZSBwYXRoIChlLmcuIGEgd2lsZGNhcmQgYmJhcHBlbmQpIHdlIG5lZWQgdG8gZW5jb2RlIGl0CisgICAgICAgICAgICBpZiBleHRyYV9wYXRoOgorICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBleHRyYV9wYXRoLnJlcGxhY2UoJyUnLCAnJTI1JykKKworICAgICAgICAgICAgaWYgJyVwYXRoJScgaW4gYmFzZV91cmw6CisgICAgICAgICAgICAgICAgaWYgZXh0cmFfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gcmUuc3ViKHInXFsoW15cXV0qJXBhdGglW15cXV0qKVxdJywgJ1xcMScsIHVybCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB1cmwgPSByZS5zdWIocidcWyhbXlxdXSolcGF0aCVbXlxdXSopXF0nLCAnJywgdXJsKQorICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnJXBhdGglJywgZXh0cmFfcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGV4dHJhX3BhdGgKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfdmNzX2xpbmtfdXJsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmxheWVyLnZjc193ZWJfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5sYXllci52Y3Nfd2ViX3VybAorCisgICAgZGVmIGdldF92Y3NfZmlsZV9saW5rX3VybChzZWxmLCBmaWxlX3BhdGg9IiIpOgorICAgICAgICBpZiBzZWxmLmxheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV91cmxfcGF0aChzZWxmLmxheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCwgZmlsZV9wYXRoKQorCisgICAgZGVmIGdldF92Y3NfZGlycGF0aF9saW5rX3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdXJsX3BhdGgoc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwsICcnKQorCisgICAgZGVmIGdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZiwgcHJvamVjdCk6CisgICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhsYXllcl9uYW1lID0gc2VsZi5sYXllci5uYW1lKQorCisgICAgZGVmIGdldF92Y3NfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbW1pdCBpcyBub3QgTm9uZSBhbmQgbGVuKHNlbGYuY29tbWl0KSA+IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQKKyAgICAgICAgaWYgc2VsZi5icmFuY2ggaXMgbm90IE5vbmUgYW5kIGxlbihzZWxmLmJyYW5jaCkgPiAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnJhbmNoCisgICAgICAgIGlmIHNlbGYudXBfYnJhbmNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudXBfYnJhbmNoLm5hbWUKKyAgICAgICAgcmV0dXJuICgiQ2Fubm90IGRldGVybWluZSB0aGUgdmNzX3JlZmVyZW5jZSBmb3IgbGF5ZXIgdmVyc2lvbiAlcyIgJSB2YXJzKHNlbGYpKQorCisgICAgZGVmIGdldF9kZXRhaWxzcGFnZV91cmwoc2VsZiwgcHJvamVjdF9pZCk6CisgICAgICAgIHJldHVybiByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcm9qZWN0X2lkLCBzZWxmLnBrKSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlZCAlcyAoVkNTICVzLCBQcm9qZWN0ICVzKSIgJSAoc2VsZi5waywgc3RyKHNlbGYubGF5ZXIpLCBzZWxmLmdldF92Y3NfcmVmZXJlbmNlKCksIHNlbGYuYnVpbGQucHJvamVjdCBpZiBzZWxmLmJ1aWxkIGlzIG5vdCBOb25lIGVsc2UgIk5vIHByb2plY3QiKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKQorCitjbGFzcyBMYXllclZlcnNpb25EZXBlbmRlbmN5KG1vZGVscy5Nb2RlbCk6CisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJTb3VyY2UsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICMgZnJvbSB3aGVyZSBkaWQgd2UgZ290IHRoaXMgbGF5ZXIKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBsYXllcmJyYW5jaCBpbiB0aGUgcmVtb3RlIHNvdXJjZQorCisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIHJlbGF0ZWRfbmFtZT0iZGVwZW5kZW5jaWVzIikKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJfVmVyc2lvbiwgcmVsYXRlZF9uYW1lPSJkZXBlbmRlZXMiKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKQorCitjbGFzcyBQcm9qZWN0TGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkKKyAgICBsYXllcmNvbW1pdCA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIG51bGw9VHJ1ZSkKKyAgICBvcHRpb25hbCA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IFRydWUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMsICVzIiAlIChzZWxmLnByb2plY3QubmFtZSwgc2VsZi5sYXllcmNvbW1pdCkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoInByb2plY3QiLCAibGF5ZXJjb21taXQiKSwpCisKK2NsYXNzIFByb2plY3RWYXJpYWJsZShtb2RlbHMuTW9kZWwpOgorICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHZhbHVlID0gbW9kZWxzLlRleHRGaWVsZChibGFuayA9IFRydWUpCisKK2NsYXNzIFZhcmlhYmxlKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyd2YXJpYWJsZV9uYW1lJywgJ3ZhcmlhYmxlX3ZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZoaXN0b3J5X19maWxlX25hbWUnLCAiZGVzY3JpcHRpb24iXQorICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0ndmFyaWFibGVfYnVpbGQnKQorICAgIHZhcmlhYmxlX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHZhcmlhYmxlX3ZhbHVlID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQorICAgIGNoYW5nZWQgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UpCisgICAgaHVtYW5fcmVhZGFibGVfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisKK2NsYXNzIFZhcmlhYmxlSGlzdG9yeShtb2RlbHMuTW9kZWwpOgorICAgIHZhcmlhYmxlID0gbW9kZWxzLkZvcmVpZ25LZXkoVmFyaWFibGUsIHJlbGF0ZWRfbmFtZT0ndmhpc3RvcnknKQorICAgIHZhbHVlICAgPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisgICAgZmlsZV9uYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUpCisgICAgbGluZV9udW1iZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGw9VHJ1ZSkKKyAgICBvcGVyYXRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NjQpCisKK2NsYXNzIEhlbHBUZXh0KG1vZGVscy5Nb2RlbCk6CisgICAgVkFSSUFCTEUgPSAwCisgICAgSEVMUFRFWFRfQVJFQSA9ICgoVkFSSUFCTEUsICd2YXJpYWJsZScpLCApCisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkLCByZWxhdGVkX25hbWU9J2hlbHB0ZXh0X2J1aWxkJykKKyAgICBhcmVhID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPUhFTFBURVhUX0FSRUEpCisgICAga2V5ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB0ZXh0ID0gbW9kZWxzLlRleHRGaWVsZCgpCisKK2NsYXNzIExvZ01lc3NhZ2UobW9kZWxzLk1vZGVsKToKKyAgICBFWENFUFRJT04gPSAtMSAgICAgICMgdXNlZCB0byBzaWduYWwgc2VsZi10b2FzdGVyLWV4Y2VwdGlvbnMKKyAgICBJTkZPID0gMAorICAgIFdBUk5JTkcgPSAxCisgICAgRVJST1IgPSAyCisKKyAgICBMT0dfTEVWRUwgPSAoIChJTkZPLCAiaW5mbyIpLAorICAgICAgICAgICAgKFdBUk5JTkcsICJ3YXJuIiksCisgICAgICAgICAgICAoRVJST1IsICJlcnJvciIpLAorICAgICAgICAgICAgKEVYQ0VQVElPTiwgInRvYXN0ZXIgZXhjZXB0aW9uIikpCisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIHRhc2sgID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgYmxhbmsgPSBUcnVlLCBudWxsPVRydWUpCisgICAgbGV2ZWwgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9TE9HX0xFVkVMLCBkZWZhdWx0PUlORk8pCisgICAgbWVzc2FnZT1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjQwKQorICAgIHBhdGhuYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgbGluZW5vID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAlcyAlcyIgJSAoc2VsZi5nZXRfbGV2ZWxfZGlzcGxheSgpLCBzZWxmLm1lc3NhZ2UsIHNlbGYuYnVpbGQpCisKK2RlZiBpbnZhbGlkYXRlX2NhY2hlKCoqa3dhcmdzKToKKyAgICBmcm9tIGRqYW5nby5jb3JlLmNhY2hlIGltcG9ydCBjYWNoZQorICAgIHRyeToKKyAgICAgIGNhY2hlLmNsZWFyKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICBsb2dnZXIud2FybmluZygiUHJvYmxlbSB3aXRoIGNhY2hlIGJhY2tlbmQ6IEZhaWxlZCB0byBjbGVhciBjYWNoZTogJXMiICUgZSkKKworZGphbmdvLmRiLm1vZGVscy5zaWduYWxzLnBvc3Rfc2F2ZS5jb25uZWN0KGludmFsaWRhdGVfY2FjaGUpCitkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMucG9zdF9kZWxldGUuY29ubmVjdChpbnZhbGlkYXRlX2NhY2hlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS90ZXN0cy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzYWVhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkKQEAgLTAsMCArMSwxODcgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiVGVzdCBjYXNlcyBmb3IgVG9hc3RlciBPUk0uIiIiCisKK2Zyb20gZGphbmdvLnRlc3QgaW1wb3J0IFRlc3RDYXNlLCBUcmFuc2FjdGlvblRlc3RDYXNlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExvY2FsTGF5ZXJTb3VyY2UsIExheWVySW5kZXhMYXllclNvdXJjZSwgSW1wb3J0ZWRMYXllclNvdXJjZSwgTGF5ZXJTb3VyY2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnJhbmNoCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgQnVpbGQsIExheWVyLCBMYXllcl9WZXJzaW9uLCBCcmFuY2gsIFByb2plY3RMYXllcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWxlYXNlLCBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSwgQml0YmFrZVZlcnNpb24KKworZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IKKworaW1wb3J0IG9zCisKKyMgc2V0IFRUU19MQVlFUl9JTkRFWCB0byB0aGUgYmFzZSB1cmwgdG8gdXNlIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIHRoZSBsYXllciBpbmRleAorCitjbGFzcyBMYXllclNvdXJjZVZlcmlmeUluaGVyaXRhbmNlU2F2ZUxvYWQoVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIHRvIHZlcmlmeSBpbmhlcml0YW5jZSBmb3IgdGhlIExheWVyU291cmNlIHByb3h5LWluaGVyaXRhbmNlIGNsYXNzZXMuCisgICAgIiIiCisgICAgZGVmIHRlc3Rfb2JqZWN0X2NyZWF0aW9uKHNlbGYpOgorICAgICAgICAiIiJUZXN0IExheWVyU291cmNlIG9iamVjdCBjcmVhdGlvbi4iIiIKKyAgICAgICAgZm9yIG5hbWUsIHNvdXJjZXR5cGUgaW4gWygiYTEiLCBMYXllclNvdXJjZS5UWVBFX0xPQ0FMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYTIiLCBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJhMyIsIExheWVyU291cmNlLlRZUEVfSU1QT1JURUQpXToKKyAgICAgICAgICAgIExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9bmFtZSwgc291cmNldHlwZT1zb3VyY2V0eXBlKQorCisgICAgICAgIG9iamVjdHMgPSBMYXllclNvdXJjZS5vYmplY3RzLmFsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iamVjdHNbMF0sIExvY2FsTGF5ZXJTb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmplY3RzWzFdLCBMYXllckluZGV4TGF5ZXJTb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmplY3RzWzJdLCBJbXBvcnRlZExheWVyU291cmNlKSkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBkdXBsaWNhdGUgTGF5ZXJTb3VyY2Ugb2JqZWN0cy4iIiIKKyAgICAgICAgc3R5cGUgPSBMYXllclNvdXJjZS5UWVBFX0xPQ0FMCisgICAgICAgIExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImExIiwgc291cmNldHlwZT1zdHlwZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbnRlZ3JpdHlFcnJvcik6CisgICAgICAgICAgICBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJhMSIsIHNvdXJjZXR5cGU9c3R5cGUpCisKKworY2xhc3MgTElMU1VwZGF0ZVRlc3RDYXNlKFRyYW5zYWN0aW9uVGVzdENhc2UpOgorICAgICIiIlRlc3QgTGF5ZXIgU291cmNlIHVwZGF0ZS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlbGVhc2UuIiIiCisgICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgICAgICAgIG5hbWU9Im1hc3RlciIsIGdpdHVybD0iZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIpCisgICAgICAgIFJlbGVhc2Uub2JqZWN0cy5jcmVhdGUobmFtZT0iZGVmYXVsdC1yZWxlYXNlIiwgYml0YmFrZV92ZXJzaW9uPWJidiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfbmFtZT0ibWFzdGVyIikKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgTGF5ZXJTb3VyY2UudXBkYXRlIGNhbiBmZXRjaCBicmFuY2hlcy4iIiIKKyAgICAgICAgdXJsID0gb3MuZ2V0ZW52KCJUVFNfTEFZRVJfSU5ERVgiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnLyIpCisKKyAgICAgICAgbHNvYmogPSBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICAgIG5hbWU9ImIxIiwgc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgsCisgICAgICAgICAgICAgICAgICAgIGFwaXVybD11cmwgKyAibGF5ZXJpbmRleC9hcGkvIikKKyAgICAgICAgbHNvYmoudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzb2JqLmJyYW5jaF9zZXQuYWxsKCkuY291bnQoKSA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAibm8gYnJhbmNoZXMgZmV0Y2hlZCIpCisKK2NsYXNzIExheWVyVmVyc2lvbkVxdWl2YWxlbmNlVGVzdENhc2UoVGVzdENhc2UpOgorICAgICIiIlZlcmlmeSBMYXllcl9WZXJzaW9uIHByaW9yaXR5IHNlbGVjdGlvbi4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlcXVpcmVkIG9iamVjdHMuIiIiCisgICAgICAgICMgY3JlYXRlIGxheWVyIHNvdXJjZQorICAgICAgICBzZWxmLmxzcmMgPSBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJkdW1teS1sYXllcnNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9MT0NBTCkKKyAgICAgICAgIyBjcmVhdGUgcmVsZWFzZQorICAgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICBuYW1lPSJtYXN0ZXIiLCBnaXR1cmw9ImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiKQorICAgICAgICBzZWxmLnJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImRlZmF1bHQtcmVsZWFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0YmFrZV92ZXJzaW9uPWJidiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfbmFtZT0ibWFzdGVyIikKKyAgICAgICAgIyBhdHRhY2ggbGF5ZXIgc291cmNlIHRvIHJlbGVhc2UKKyAgICAgICAgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgcmVsZWFzZT1zZWxmLnJlbGVhc2UsIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMsIHByaW9yaXR5PTEpCisKKyAgICAgICAgIyBjcmVhdGUgYSBsYXllciB2ZXJzaW9uIGZvciB0aGUgbGF5ZXIgb24gdGhlIHNwZWNpZmllZCBicmFuY2gKKyAgICAgICAgc2VsZi5sYXllciA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1ldGEtdGVzdGxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMpCisgICAgICAgIHNlbGYuYnJhbmNoID0gQnJhbmNoLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1hc3RlciIsIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMpCisgICAgICAgIHNlbGYubHZlciA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgbGF5ZXI9c2VsZi5sYXllciwgbGF5ZXJfc291cmNlPXNlbGYubHNyYywgdXBfYnJhbmNoPXNlbGYuYnJhbmNoKQorCisgICAgICAgICMgY3JlYXRlIHByb2plY3QgYW5kIHByb2plY3QgbGF5ZXIKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWU9InRlc3QtcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlPXNlbGYucmVsZWFzZSkKKyAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb21taXQ9c2VsZi5sdmVyKQorCisgICAgICAgICMgY3JlYXRlIHNwb29mIGxheWVyIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIHNlYXJjaCByZXN1bHRzCisgICAgICAgIGxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT0ibWV0YS1ub3R2YWxpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPXNlbGYubHNyYykKKyAgICAgICAgc2VsZi5sdmVyMiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9bGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwX2JyYW5jaD1zZWxmLmJyYW5jaCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9sYXllcnNvdXJjZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZW4gd2UgaGF2ZSBhIHNpbmdsZSBsYXllciB2ZXJzaW9uLAorICAgICAgICBnZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KCkgc2hvdWxkIHJldHVybiBhIGxpc3Qgd2l0aAorICAgICAgICBqdXN0IHRoaXMgbGF5ZXJfdmVyc2lvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGVxdWl2cXMgPSBzZWxmLmx2ZXIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChlcXVpdnFzKSwgW3NlbGYubHZlcl0pCisKKyAgICBkZWYgdGVzdF9kdWFsX2xheWVyc291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgd2UgaGF2ZSB0d28gbGF5ZXJzIHdpdGggdGhlIHNhbWUgbmFtZSwgZnJvbSBkaWZmZXJlbnQgbGF5ZXIgc291cmNlcywKKyAgICAgICAgd2UgZXhwZWN0IGJvdGggbGF5ZXJzIGluLCBpbiBpbmNyZWFzaW5nIHByaW9yaXR5IG9mIHRoZSBsYXllciBzb3VyY2UuCisgICAgICAgICIiIgorICAgICAgICBsc3JjMiA9IExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0iZHVtbXktbGF5ZXJzb3VyY2UyIiwKKyAgICAgICAgICAgICAgICAgICAgc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xPQ0FMLAorICAgICAgICAgICAgICAgICAgICBhcGl1cmw9InRlc3QiKQorCisgICAgICAgICMgYXNzaWduIGEgbG93ZXIgcHJpb3JpdHkgZm9yIHRoZSBzZWNvbmQgbGF5ZXIgc291cmNlCisgICAgICAgIHNlbGYucmVsZWFzZS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9zZXQuY3JlYXRlKGxheWVyX3NvdXJjZT1sc3JjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk9MikKKworICAgICAgICAjIGNyZWF0ZSBhIG5ldyBsYXllcl92ZXJzaW9uIGZvciBhIGxheWVyIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAjIGNvbWluZyBmcm9tIHRoZSBzZWNvbmQgbGF5ZXIgc291cmNlCisgICAgICAgIGxheWVyMiA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1ldGEtdGVzdGxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPWxzcmMyKQorICAgICAgICBsdmVyMiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9bGF5ZXIyLCBsYXllcl9zb3VyY2U9bHNyYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cF9icmFuY2g9c2VsZi5icmFuY2gpCisKKyAgICAgICAgIyBleHBlY3QgdHdvIGxheWVyIHZlcnNpb25zLCBpbiB0aGUgcHJpb3JpdHkgb3JkZXIKKyAgICAgICAgZXF1aXZxcyA9IHNlbGYubHZlci5nZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHNlbGYucHJvamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGVxdWl2cXMpLCBbbHZlcjIsIHNlbGYubHZlcl0pCisKKyAgICBkZWYgdGVzdF9idWlsZF9sYXllcnZlcnNpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBbnkgbGF5ZXIgdmVyc2lvbiBjb21pbmcgZnJvbSB0aGUgYnVpbGQgc2hvdWxkIHNob3cgdXAKKyAgICAgICAgYmVmb3JlIGFueSBsYXllciB2ZXJzaW9uIGNvbWluZyBmcm9tIHVwc3RyZWFtCisgICAgICAgICIiIgorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249dGltZXpvbmUubm93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPXRpbWV6b25lLm5vdygpKQorICAgICAgICBsdmIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPXNlbGYubGF5ZXIsIGJ1aWxkPWJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdD0iZGVhZGJlZWYiKQorCisgICAgICAgICMgYSBidWlsZCBsYXllcnZlcnNpb24gbXVzdCBiZSBpbiB0aGUgZXF1aXZhbGVuY2UKKyAgICAgICAgIyBsaXN0IGZvciB0aGUgb3JpZ2luYWwgbGF5ZXJ2ZXJzaW9uCisgICAgICAgIGVxdWl2cXMgPSBzZWxmLmx2ZXIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXF1aXZxcykgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVxdWl2cXNbMF0gPT0gc2VsZi5sdmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXF1aXZxc1sxXSA9PSBsdmIpCisKKyAgICAgICAgIyBnZXR0aW5nIHRoZSBidWlsZCBsYXllcnZlcnNpb24gZXF1aXZhbGVudCBsaXN0IG11c3QKKyAgICAgICAgIyByZXR1cm4gdGhlIHNhbWUgbGlzdCBhcyB0aGUgb3JpZ2luYWwgbGF5ZXIKKyAgICAgICAgYmVxdWl2cXMgPSBsdmIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGVxdWl2cXMpLCBsaXN0KGJlcXVpdnFzKSkKKworICAgIGRlZiB0ZXN0X2NvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZW4gd2UgaGF2ZSBhIDIgbGF5ZXIgdmVyc2lvbnMsIGNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIHNob3VsZCByZXR1cm4gYSBxdWVyeXNldCB3aXRoIGJvdGguCisgICAgICAgICIiIgorICAgICAgICBjb21wYXRfbHYgPSBzZWxmLnByb2plY3QuY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXBhdF9sdiksIFtzZWxmLmx2ZXIsIHNlbGYubHZlcjJdKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1OTc4NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MKQEAgLTAsMCArMSw5IEBACisvKiEKKyAqIEJvb3RzdHJhcCBSZXNwb25zaXZlIHYyLjMuMAorICoKKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KKyAqLy5jbGVhcmZpeHsqem9vbToxfS5jbGVhcmZpeDpiZWZvcmUsLmNsZWFyZml4OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS5oaWRlLXRleHR7Zm9udDowLzAgYTtjb2xvcjp0cmFuc3BhcmVudDt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LmlucHV0LWJsb2NrLWxldmVse2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fUAtbXMtdmlld3BvcnR7d2lkdGg6ZGV2aWNlLXdpZHRofS5oaWRkZW57ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxlLXBob25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk3OXB4KXsuaGlkZGVuLWRlc2t0b3B7ZGlzcGxheTppbmhlcml0IWltcG9ydGFudH0udmlzaWJsZS1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi10YWJsZXR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXBob25le2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0udmlzaWJsZS1wcmludHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsudmlzaWJsZS1wcmludHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5yb3d7bWFyZ2luLWxlZnQ6LTMwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDozMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjExNzBweH0uc3BhbjEye3dpZHRoOjExNzBweH0uc3BhbjExe3dpZHRoOjEwNzBweH0uc3BhbjEwe3dpZHRoOjk3MHB4fS5zcGFuOXt3aWR0aDo4NzBweH0uc3Bhbjh7d2lkdGg6NzcwcHh9LnNwYW43e3dpZHRoOjY3MHB4fS5zcGFuNnt3aWR0aDo1NzBweH0uc3BhbjV7d2lkdGg6NDcwcHh9LnNwYW40e3dpZHRoOjM3MHB4fS5zcGFuM3t3aWR0aDoyNzBweH0uc3BhbjJ7d2lkdGg6MTcwcHh9LnNwYW4xe3dpZHRoOjcwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0OjEyMzBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6MTEzMHB4fS5vZmZzZXQxMHttYXJnaW4tbGVmdDoxMDMwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6OTMwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6ODMwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NzMwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NjMwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NTMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6NDMwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MjMwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTMwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuNTY0MTAyNTY0MTAyNTY0JTsqbWFyZ2luLWxlZnQ6Mi41MTA5MTEwNzQ3NDA4NjE2JTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjU2NDEwMjU2NDEwMjU2NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDUyOTkxNDUyOTkxNDUlOyp3aWR0aDo5MS4zOTk3OTk5NjM2Mjk3NSV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjkwNTk4MjkwNTk4MjkxJTsqd2lkdGg6ODIuODUyNzkxNDE2NjIxMiV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuMzU4OTc0MzU4OTc0MzYlOyp3aWR0aDo3NC4zMDU3ODI4Njk2MTI2NiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuODExOTY1ODExOTY1ODIlOyp3aWR0aDo2NS43NTg3NzQzMjI2MDQxMSV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuMjY0OTU3MjY0OTU3MjYlOyp3aWR0aDo1Ny4yMTE3NjU3NzU1OTU1NiV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguNzE3OTQ4NzE3OTQ4NzE1JTsqd2lkdGg6NDguNjY0NzU3MjI4NTg3MDE0JX0ucm93LWZsdWlkIC5zcGFuNXt3aWR0aDo0MC4xNzA5NDAxNzA5NDAxNyU7KndpZHRoOjQwLjExNzc0ODY4MTU3ODQ3JX0ucm93LWZsdWlkIC5zcGFuNHt3aWR0aDozMS42MjM5MzE2MjM5MzE2MjUlOyp3aWR0aDozMS41NzA3NDAxMzQ1Njk5MjQlfS5yb3ctZmx1aWQgLnNwYW4ze3dpZHRoOjIzLjA3NjkyMzA3NjkyMzA3NyU7KndpZHRoOjIzLjAyMzczMTU4NzU2MTM3NSV9LnJvdy1mbHVpZCAuc3BhbjJ7d2lkdGg6MTQuNTI5OTE0NTI5OTE0NTMlOyp3aWR0aDoxNC40NzY3MjMwNDA1NTI4MjglfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjUuOTgyOTA1OTgyOTA1OTgzJTsqd2lkdGg6NS45Mjk3MTQ0OTM1NDQyODElfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNS4xMjgyMDUxMjgyMDUxMiU7Km1hcmdpbi1sZWZ0OjEwNS4wMjE4MjIxNDk0ODE3MSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjU2NDEwMjU2NDEwMjU3JTsqbWFyZ2luLWxlZnQ6MTAyLjQ1NzcxOTU4NTM3OTE1JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni41ODExOTY1ODExOTY1OCU7Km1hcmdpbi1sZWZ0Ojk2LjQ3NDgxMzYwMjQ3MzE2JX0ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo5NC4wMTcwOTQwMTcwOTQwMiU7Km1hcmdpbi1sZWZ0OjkzLjkxMDcxMTAzODM3MDYxJX0ucm93LWZsdWlkIC5vZmZzZXQxMHttYXJnaW4tbGVmdDo4OC4wMzQxODgwMzQxODgwMyU7Km1hcmdpbi1sZWZ0Ojg3LjkyNzgwNTA1NTQ2NDYyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS40NzAwODU0NzAwODU0OCU7Km1hcmdpbi1sZWZ0Ojg1LjM2MzcwMjQ5MTM2MjA2JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc5LjQ4NzE3OTQ4NzE3OTQ5JTsqbWFyZ2luLWxlZnQ6NzkuMzgwNzk2NTA4NDU2MDclfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuOTIzMDc2OTIzMDc2OTMlOyptYXJnaW4tbGVmdDo3Ni44MTY2OTM5NDQzNTM1MiV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC45NDAxNzA5NDAxNzA5NCU7Km1hcmdpbi1sZWZ0OjcwLjgzMzc4Nzk2MTQ0NzUzJX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjM3NjA2ODM3NjA2ODM5JTsqbWFyZ2luLWxlZnQ6NjguMjY5Njg1Mzk3MzQ0OTclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuMzkzMTYyMzkzMTYyMzg1JTsqbWFyZ2luLWxlZnQ6NjIuMjg2Nzc5NDE0NDM4OTklfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuODI5MDU5ODI5MDU5ODIlOyptYXJnaW4tbGVmdDo1OS43MjI2NzY4NTAzMzY0MiV9LnJvdy1mbHVpZCAub2Zmc2V0NnttYXJnaW4tbGVmdDo1My44NDYxNTM4NDYxNTM4NCU7Km1hcmdpbi1sZWZ0OjUzLjczOTc3MDg2NzQzMDQ0NCV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4yODIwNTEyODIwNTEyOCU7Km1hcmdpbi1sZWZ0OjUxLjE3NTY2ODMwMzMyNzg3NSV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS4yOTkxNDUyOTkxNDUyOTUlOyptYXJnaW4tbGVmdDo0NS4xOTI3NjIzMjA0MjE5JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjczNTA0MjczNTA0MjczJTsqbWFyZ2luLWxlZnQ6NDIuNjI4NjU5NzU2MzE5MzMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuNzUyMTM2NzUyMTM2NzUlOyptYXJnaW4tbGVmdDozNi42NDU3NTM3NzM0MTMzNTQlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMTg4MDM0MTg4MDM0MTklOyptYXJnaW4tbGVmdDozNC4wODE2NTEyMDkzMTA3ODUlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjguMjA1MTI4MjA1MTI4MjA0JTsqbWFyZ2luLWxlZnQ6MjguMDk4NzQ1MjI2NDA0OCV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS42NDEwMjU2NDEwMjU2NDIlOyptYXJnaW4tbGVmdDoyNS41MzQ2NDI2NjIzMDIyNCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS42NTgxMTk2NTgxMTk2NiU7Km1hcmdpbi1sZWZ0OjE5LjU1MTczNjY3OTM5NjI1NyV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wOTQwMTcwOTQwMTcwOTQlOyptYXJnaW4tbGVmdDoxNi45ODc2MzQxMTUyOTM2OSV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMS4xMTExMTExMTExMTExMSU7Km1hcmdpbi1sZWZ0OjExLjAwNDcyODEzMjM4NzcwOCV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjU0NzAwODU0NzAwODU0NyU7Km1hcmdpbi1sZWZ0OjguNDQwNjI1NTY4Mjg1MTQyJX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDozMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjExNTZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDoxMDU2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNwYW4xMCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6OTU2cHh9aW5wdXQuc3BhbjksdGV4dGFyZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6ODU2cHh9aW5wdXQuc3BhbjgsdGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NzU2cHh9aW5wdXQuc3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NjU2cHh9aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lkdGg6NTU2cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjV7d2lkdGg6NDU2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjR7d2lkdGg6MzU2cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjN7d2lkdGg6MjU2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6MTU2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6NTZweH0udGh1bWJuYWlsc3ttYXJnaW4tbGVmdDotMzBweH0udGh1bWJuYWlscz5saXttYXJnaW4tbGVmdDozMHB4fS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTc5cHgpey5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjcyNHB4fS5zcGFuMTJ7d2lkdGg6NzI0cHh9LnNwYW4xMXt3aWR0aDo2NjJweH0uc3BhbjEwe3dpZHRoOjYwMHB4fS5zcGFuOXt3aWR0aDo1MzhweH0uc3Bhbjh7d2lkdGg6NDc2cHh9LnNwYW43e3dpZHRoOjQxNHB4fS5zcGFuNnt3aWR0aDozNTJweH0uc3BhbjV7d2lkdGg6MjkwcHh9LnNwYW40e3dpZHRoOjIyOHB4fS5zcGFuM3t3aWR0aDoxNjZweH0uc3BhbjJ7d2lkdGg6MTA0cHh9LnNwYW4xe3dpZHRoOjQycHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojc2NHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo3MDJweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6NjQwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NTc4cHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NTE2cHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NDU0cHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6MzkycHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MjY4cHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjA2cHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTQ0cHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6ODJweH0ucm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93LWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ctZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6Mi43NjI0MzA5MzkyMjY1MTk0JTsqbWFyZ2luLWxlZnQ6Mi43MDkyMzk0NDk4NjQ4MTclOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuNzYyNDMwOTM5MjI2NTE5NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDM2NDY0MDg4Mzk3NzglOyp3aWR0aDo5MS4zODMyNzI1OTkwMzYwOCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjg3MjkyODE3Njc5NTU4JTsqd2lkdGg6ODIuODE5NzM2Njg3NDMzODclfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjMwOTM5MjI2NTE5MzM3JTsqd2lkdGg6NzQuMjU2MjAwNzc1ODMxNjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljc0NTg1NjM1MzU5MTE3JTsqd2lkdGg6NjUuNjkyNjY0ODY0MjI5NDYlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjE4MjMyMDQ0MTk4ODk1JTsqd2lkdGg6NTcuMTI5MTI4OTUyNjI3MjUlfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjYxODc4NDUzMDM4Njc0JTsqd2lkdGg6NDguNTY1NTkzMDQxMDI1MDQlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjA1NTI0ODYxODc4NDUzJTsqd2lkdGg6NDAuMDAyMDU3MTI5NDIyODMlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjQ5MTcxMjcwNzE4MjMyMyU7KndpZHRoOjMxLjQzODUyMTIxNzgyMDYyJX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMi45MjgxNzY3OTU1ODAxMSU7KndpZHRoOjIyLjg3NDk4NTMwNjIxODQxJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC4zNjQ2NDA4ODM5Nzc5JTsqd2lkdGg6MTQuMzExNDQ5Mzk0NjE2MTk5JX0ucm93LWZsdWlkIC5zcGFuMXt3aWR0aDo1LjgwMTEwNDk3MjM3NTY5MSU7KndpZHRoOjUuNzQ3OTEzNDgzMDEzOTg4JX0ucm93LWZsdWlkIC5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMDUuNTI0ODYxODc4NDUzMDQlOyptYXJnaW4tbGVmdDoxMDUuNDE4NDc4ODk5NzI5NjIlfS5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjEwMi43NjI0MzA5MzkyMjY1MiU7Km1hcmdpbi1sZWZ0OjEwMi42NTYwNDc5NjA1MDMxJX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni45NjEzMjU5NjY4NTA4MiU7Km1hcmdpbi1sZWZ0Ojk2Ljg1NDk0Mjk4ODEyNzQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojk0LjE5ODg5NTAyNzYyNDMlOyptYXJnaW4tbGVmdDo5NC4wOTI1MTIwNDg5MDA4OSV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODguMzk3NzkwMDU1MjQ4NjIlOyptYXJnaW4tbGVmdDo4OC4yOTE0MDcwNzY1MjUyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS42MzUzNTkxMTYwMjIxJTsqbWFyZ2luLWxlZnQ6ODUuNTI4OTc2MTM3Mjk4NjglfS5yb3ctZmx1aWQgLm9mZnNldDl7bWFyZ2luLWxlZnQ6NzkuODM0MjU0MTQzNjQ2NCU7Km1hcmdpbi1sZWZ0Ojc5LjcyNzg3MTE2NDkyMjk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc3LjA3MTgyMzIwNDQxOTg5JTsqbWFyZ2luLWxlZnQ6NzYuOTY1NDQwMjI1Njk2NDclfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzEuMjcwNzE4MjMyMDQ0MiU7Km1hcmdpbi1sZWZ0OjcxLjE2NDMzNTI1MzMyMDc5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjUwODI4NzI5MjgxNzY4JTsqbWFyZ2luLWxlZnQ6NjguNDAxOTA0MzE0MDk0MjclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuNzA3MTgyMzIwNDQxOTklOyptYXJnaW4tbGVmdDo2Mi42MDA3OTkzNDE3MTg1ODQlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuOTQ0NzUxMzgxMjE1NDclOyptYXJnaW4tbGVmdDo1OS44MzgzNjg0MDI0OTIwNjUlfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTQuMTQzNjQ2NDA4ODM5NzglOyptYXJnaW4tbGVmdDo1NC4wMzcyNjM0MzAxMTYzNzYlfS5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTEuMzgxMjE1NDY5NjEzMjYlOyptYXJnaW4tbGVmdDo1MS4yNzQ4MzI0OTA4ODk4NiV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS41ODAxMTA0OTcyMzc1NyU7Km1hcmdpbi1sZWZ0OjQ1LjQ3MzcyNzUxODUxNDE3JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjgxNzY3OTU1ODAxMTA1JTsqbWFyZ2luLWxlZnQ6NDIuNzExMjk2NTc5Mjg3NjUlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzcuMDE2NTc0NTg1NjM1MzYlOyptYXJnaW4tbGVmdDozNi45MTAxOTE2MDY5MTE5NiV9LnJvdy1mbHVpZCAub2Zmc2V0NDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDozNC4yNTQxNDM2NDY0MDg4NCU7Km1hcmdpbi1sZWZ0OjM0LjE0Nzc2MDY2NzY4NTQ0JX0ucm93LWZsdWlkIC5vZmZzZXQze21hcmdpbi1sZWZ0OjI4LjQ1MzAzODY3NDAzMzE1JTsqbWFyZ2luLWxlZnQ6MjguMzQ2NjU1Njk1MzA5NzQ2JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjY5MDYwNzczNDgwNjYzJTsqbWFyZ2luLWxlZnQ6MjUuNTg0MjI0NzU2MDgzMjI3JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5Ljg4OTUwMjc2MjQzMDk0JTsqbWFyZ2luLWxlZnQ6MTkuNzgzMTE5NzgzNzA3NTM3JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjEyNzA3MTgyMzIwNDQyJTsqbWFyZ2luLWxlZnQ6MTcuMDIwNjg4ODQ0NDgxMDIlfS5yb3ctZmx1aWQgLm9mZnNldDF7bWFyZ2luLWxlZnQ6MTEuMzI1OTY2ODUwODI4NzMlOyptYXJnaW4tbGVmdDoxMS4yMTk1ODM4NzIxMDUzMjUlfS5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OC41NjM1MzU5MTE2MDIyMSU7Km1hcmdpbi1sZWZ0OjguNDU3MTUyOTMyODc4ODA2JX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjcxMHB4fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjY0OHB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjU4NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjUyNHB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjQ2MnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjQwMHB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjMzOHB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjI3NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjIxNHB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjE1MnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjkwcHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6MjhweH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7Ym9keXtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b20sLm5hdmJhci1zdGF0aWMtdG9we21hcmdpbi1yaWdodDotMjBweDttYXJnaW4tbGVmdDotMjBweH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmc6MH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpub25lO3dpZHRoOmF1dG87Y2xlYXI6bm9uZTt0ZXh0LWFsaWduOmxlZnR9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MH0uY29udGFpbmVye3dpZHRoOmF1dG99LnJvdy1mbHVpZHt3aWR0aDoxMDAlfS5yb3csLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9W2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5zcGFuMTIsLnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQgW2NsYXNzKj0ib2Zmc2V0Il06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtbGFyZ2UsLmlucHV0LXhsYXJnZSwuaW5wdXQteHhsYXJnZSxpbnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3RbY2xhc3MqPSJzcGFuIl0sdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG99LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjB9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDoyMHB4O3JpZ2h0OjIwcHg7bGVmdDoyMHB4O3dpZHRoOmF1dG87bWFyZ2luOjB9Lm1vZGFsLmZhZGV7dG9wOi0xMDBweH0ubW9kYWwuZmFkZS5pbnt0b3A6MjBweH19QG1lZGlhKG1heC13aWR0aDo0ODBweCl7Lm5hdi1jb2xsYXBzZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9LnBhZ2UtaGVhZGVyIGgxIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweH1pbnB1dFt0eXBlPSJjaGVja2JveCJdLGlucHV0W3R5cGU9InJhZGlvIl17Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWx7ZmxvYXQ6bm9uZTt3aWR0aDphdXRvO3BhZGRpbmctdG9wOjA7dGV4dC1hbGlnbjpsZWZ0fS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xze21hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0e3BhZGRpbmctdG9wOjB9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH0ubWVkaWEgLnB1bGwtbGVmdCwubWVkaWEgLnB1bGwtcmlnaHR7ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21hcmdpbi1ib3R0b206MTBweH0ubWVkaWEtb2JqZWN0e21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1vZGFse3RvcDoxMHB4O3JpZ2h0OjEwcHg7bGVmdDoxMHB4fS5tb2RhbC1oZWFkZXIgLmNsb3Nle3BhZGRpbmc6MTBweDttYXJnaW46LTEwcHh9LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246c3RhdGljfX1AbWVkaWEobWF4LXdpZHRoOjk3OXB4KXtib2R5e3BhZGRpbmctdG9wOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217cG9zaXRpb246c3RhdGljfS5uYXZiYXItZml4ZWQtdG9we21hcmdpbi1ib3R0b206MjBweH0ubmF2YmFyLWZpeGVkLWJvdHRvbXttYXJnaW4tdG9wOjIwcHh9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmc6NXB4fS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvO3BhZGRpbmc6MH0ubmF2YmFyIC5icmFuZHtwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luOjAgMCAwIC01cHh9Lm5hdi1jb2xsYXBzZXtjbGVhcjpib3RofS5uYXYtY29sbGFwc2UgLm5hdntmbG9hdDpub25lO21hcmdpbjowIDAgMTBweH0ubmF2LWNvbGxhcHNlIC5uYXY+bGl7ZmxvYXQ6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+YXttYXJnaW4tYm90dG9tOjJweH0ubmF2LWNvbGxhcHNlIC5uYXY+LmRpdmlkZXItdmVydGljYWx7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdiAubmF2LWhlYWRlcntjb2xvcjojNzc3O3RleHQtc2hhZG93Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhe3BhZGRpbmc6OXB4IDE1cHg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNzc3Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0ubmF2LWNvbGxhcHNlIC5idG57cGFkZGluZzo0cHggMTBweCA0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGxpK2xpIGF7bWFyZ2luLWJvdHRvbToycHh9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6Zm9jdXMsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVyLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmMmYyZjJ9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGF7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdi1jb2xsYXBzZS5pbiAuYnRuLWdyb3Vwe3BhZGRpbmc6MDttYXJnaW4tdG9wOjVweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOnN0YXRpYzt0b3A6YXV0bztsZWZ0OmF1dG87ZGlzcGxheTpub25lO2Zsb2F0Om5vbmU7bWF4LXdpZHRoOm5vbmU7cGFkZGluZzowO21hcmdpbjowIDE1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXYtY29sbGFwc2UgLm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmFmdGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IC5kaXZpZGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3JlLC5uYXYtY29sbGFwc2UgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdi1jb2xsYXBzZSAubmF2YmFyLXNlYXJjaHtmbG9hdDpub25lO3BhZGRpbmc6MTBweCAxNXB4O21hcmdpbjoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2YyZjJmMjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjJmMmYyOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdmJhci1zZWFyY2h7Ym9yZGVyLXRvcC1jb2xvcjojMTExO2JvcmRlci1ib3R0b20tY29sb3I6IzExMX0ubmF2YmFyIC5uYXYtY29sbGFwc2UgLm5hdi5wdWxsLXJpZ2h0e2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0ubmF2LWNvbGxhcHNlLC5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVufS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpibG9ja30ubmF2YmFyLXN0YXRpYyAubmF2YmFyLWlubmVye3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH19QG1lZGlhKG1pbi13aWR0aDo5ODBweCl7Lm5hdi1jb2xsYXBzZS5jb2xsYXBzZXtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAubWluLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmI5MjdmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKQEAgLTAsMCArMSw5IEBACisvKiEKKyAqIEJvb3RzdHJhcCB2Mi4zLjAKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwgdGhlIGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi8uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6YmVmb3JlLC5jbGVhcmZpeDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5pbnB1dC1ibG9jay1sZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6bm9uZX1odG1se2ZvbnQtc2l6ZToxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCV9YTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH1hOmhvdmVyLGE6YWN0aXZle291dGxpbmU6MH1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0wLjVlbX1zdWJ7Ym90dG9tOi0wLjI1ZW19aW1ne3dpZHRoOmF1dG9cOTtoZWlnaHQ6YXV0bzttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjA7LW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljfSNtYXBfY2FudmFzIGltZywuZ29vZ2xlLW1hcHMgaW1ne21heC13aWR0aDpub25lfWJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWF7bWFyZ2luOjA7Zm9udC1zaXplOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfWJ1dHRvbixpbnB1dHsqb3ZlcmZsb3c6dmlzaWJsZTtsaW5lLWhlaWdodDpub3JtYWx9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1idXR0b24saHRtbCBpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJde2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259bGFiZWwsc2VsZWN0LGJ1dHRvbixpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXtjdXJzb3I6cG9pbnRlcn1pbnB1dFt0eXBlPSJzZWFyY2giXXstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZH1pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX10ZXh0YXJlYXtvdmVyZmxvdzphdXRvO3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgcHJpbnR7Kntjb2xvcjojMDAwIWltcG9ydGFudDt0ZXh0LXNoYWRvdzpub25lIWltcG9ydGFudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWEsYTp2aXNpdGVke3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YVtocmVmXTphZnRlcntjb250ZW50OiIgKCIgYXR0cihocmVmKSAiKSJ9YWJiclt0aXRsZV06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIodGl0bGUpICIpIn0uaXIgYTphZnRlcixhW2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyLGFbaHJlZl49IiMiXTphZnRlcntjb250ZW50OiIifXByZSxibG9ja3F1b3Rle2JvcmRlcjoxcHggc29saWQgIzk5OTtwYWdlLWJyZWFrLWluc2lkZTphdm9pZH10aGVhZHtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH10cixpbWd7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9aW1ne21heC13aWR0aDoxMDAlIWltcG9ydGFudH1AcGFnZXttYXJnaW46LjVjbX1wLGgyLGgze29ycGhhbnM6Mzt3aWRvd3M6M31oMixoM3twYWdlLWJyZWFrLWFmdGVyOmF2b2lkfX1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZn1he2NvbG9yOiMwOGM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YTpob3ZlcixhOmZvY3Vze2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaW1nLXJvdW5kZWR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5pbWctcG9sYXJvaWR7cGFkZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSl9LmltZy1jaXJjbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwMHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MDBweDtib3JkZXItcmFkaXVzOjUwMHB4fS5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjk0MHB4fS5zcGFuMTJ7d2lkdGg6OTQwcHh9LnNwYW4xMXt3aWR0aDo4NjBweH0uc3BhbjEwe3dpZHRoOjc4MHB4fS5zcGFuOXt3aWR0aDo3MDBweH0uc3Bhbjh7d2lkdGg6NjIwcHh9LnNwYW43e3dpZHRoOjU0MHB4fS5zcGFuNnt3aWR0aDo0NjBweH0uc3BhbjV7d2lkdGg6MzgwcHh9LnNwYW40e3dpZHRoOjMwMHB4fS5zcGFuM3t3aWR0aDoyMjBweH0uc3BhbjJ7d2lkdGg6MTQwcHh9LnNwYW4xe3dpZHRoOjYwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojk4MHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo5MDBweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODIwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NzQwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NjYwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NTgwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTAwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NDIwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MzQwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjYwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTgwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTAwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JTsqbWFyZ2luLWxlZnQ6Mi4wNzQ0NjgwODUxMDYzODMlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JX0ucm93LWZsdWlkIC5zcGFuMTJ7d2lkdGg6MTAwJTsqd2lkdGg6OTkuOTQ2ODA4NTEwNjM4MjklfS5yb3ctZmx1aWQgLnNwYW4xMXt3aWR0aDo5MS40ODkzNjE3MDIxMjc2NSU7KndpZHRoOjkxLjQzNjE3MDIxMjc2NTk0JX0ucm93LWZsdWlkIC5zcGFuMTB7d2lkdGg6ODIuOTc4NzIzNDA0MjU1MzIlOyp3aWR0aDo4Mi45MjU1MzE5MTQ4OTM2MSV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuNDY4MDg1MTA2MzgyOTclOyp3aWR0aDo3NC40MTQ4OTM2MTcwMjEyNiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuOTU3NDQ2ODA4NTEwNjQlOyp3aWR0aDo2NS45MDQyNTUzMTkxNDg5MyV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuNDQ2ODA4NTEwNjM4MjklOyp3aWR0aDo1Ny4zOTM2MTcwMjEyNzY1OSV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguOTM2MTcwMjEyNzY1OTUlOyp3aWR0aDo0OC44ODI5Nzg3MjM0MDQyNSV9LnJvdy1mbHVpZCAuc3BhbjV7d2lkdGg6NDAuNDI1NTMxOTE0ODkzNjIlOyp3aWR0aDo0MC4zNzIzNDA0MjU1MzE5MiV9LnJvdy1mbHVpZCAuc3BhbjR7d2lkdGg6MzEuOTE0ODkzNjE3MDIxMjc4JTsqd2lkdGg6MzEuODYxNzAyMTI3NjU5NTc2JX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMy40MDQyNTUzMTkxNDg5MzQlOyp3aWR0aDoyMy4zNTEwNjM4Mjk3ODcyMzMlfS5yb3ctZmx1aWQgLnNwYW4ye3dpZHRoOjE0Ljg5MzYxNzAyMTI3NjU5NSU7KndpZHRoOjE0Ljg0MDQyNTUzMTkxNDg5NCV9LnJvdy1mbHVpZCAuc3BhbjF7d2lkdGg6Ni4zODI5Nzg3MjM0MDQyNTUlOyp3aWR0aDo2LjMyOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTA0LjI1NTMxOTE0ODkzNjE3JTsqbWFyZ2luLWxlZnQ6MTA0LjE0ODkzNjE3MDIxMjc1JX0ucm93LWZsdWlkIC5vZmZzZXQxMjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuMTI3NjU5NTc0NDY4MDglOyptYXJnaW4tbGVmdDoxMDIuMDIxMjc2NTk1NzQ0NjclfS5yb3ctZmx1aWQgLm9mZnNldDExe21hcmdpbi1sZWZ0Ojk1Ljc0NDY4MDg1MTA2MzgyJTsqbWFyZ2luLWxlZnQ6OTUuNjM4Mjk3ODcyMzQwNCV9LnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OTMuNjE3MDIxMjc2NTk1NzQlOyptYXJnaW4tbGVmdDo5My41MTA2MzgyOTc4NzIzMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODcuMjM0MDQyNTUzMTkxNDklOyptYXJnaW4tbGVmdDo4Ny4xMjc2NTk1NzQ0NjgwNyV9LnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6ODUuMTA2MzgyOTc4NzIzNCU7Km1hcmdpbi1sZWZ0Ojg0Ljk5OTk5OTk5OTk5OTk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc4LjcyMzQwNDI1NTMxOTE0JTsqbWFyZ2luLWxlZnQ6NzguNjE3MDIxMjc2NTk1NzIlfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuNTk1NzQ0NjgwODUxMDYlOyptYXJnaW4tbGVmdDo3Ni40ODkzNjE3MDIxMjc2NCV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC4yMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6NzAuMTA2MzgyOTc4NzIzMzklfS5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NjguMDg1MTA2MzgyOTc4NzIlOyptYXJnaW4tbGVmdDo2Ny45Nzg3MjM0MDQyNTUzJX0ucm93LWZsdWlkIC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYxLjcwMjEyNzY1OTU3NDQ2JTsqbWFyZ2luLWxlZnQ6NjEuNTk1NzQ0NjgwODUxMDYlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuNTc0NDY4MDg1MTA2Mzc1JTsqbWFyZ2luLWxlZnQ6NTkuNDY4MDg1MTA2MzgyOTclfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTMuMTkxNDg5MzYxNzAyMTI1JTsqbWFyZ2luLWxlZnQ6NTMuMDg1MTA2MzgyOTc4NzE1JX0ucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjUxLjA2MzgyOTc4NzIzNDAzNSU7Km1hcmdpbi1sZWZ0OjUwLjk1NzQ0NjgwODUxMDYzJX0ucm93LWZsdWlkIC5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQ0LjY4MDg1MTA2MzgyOTc5JTsqbWFyZ2luLWxlZnQ6NDQuNTc0NDY4MDg1MTA2MzglfS5yb3ctZmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjQyLjQ0NjgwODUxMDYzODMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuMTcwMjEyNzY1OTU3NDQ0JTsqbWFyZ2luLWxlZnQ6MzYuMDYzODI5Nzg3MjM0MDUlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMDQyNTUzMTkxNDg5MzYlOyptYXJnaW4tbGVmdDozMy45MzYxNzAyMTI3NjU5NiV9LnJvdy1mbHVpZCAub2Zmc2V0M3ttYXJnaW4tbGVmdDoyNy42NTk1NzQ0NjgwODUxMDQlOyptYXJnaW4tbGVmdDoyNy41NTMxOTE0ODkzNjE3JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjUzMTkxNDg5MzYxNzAyJTsqbWFyZ2luLWxlZnQ6MjUuNDI1NTMxOTE0ODkzNjE4JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5LjE0ODkzNjE3MDIxMjc2NCU7Km1hcmdpbi1sZWZ0OjE5LjA0MjU1MzE5MTQ4OTM2JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjAyMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6MTYuOTE0ODkzNjE3MDIxMjc4JX0ucm93LWZsdWlkIC5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwLjYzODI5Nzg3MjM0MDQyNSU7Km1hcmdpbi1sZWZ0OjEwLjUzMTkxNDg5MzYxNzAyJX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjguNTEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4LjQwNDI1NTMxOTE0ODkzOCV9W2NsYXNzKj0ic3BhbiJdLmhpZGUsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0uaGlkZXtkaXNwbGF5Om5vbmV9W2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0uY29udGFpbmVye21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG87Knpvb206MX0uY29udGFpbmVyOmJlZm9yZSwuY29udGFpbmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweDsqem9vbToxfS5jb250YWluZXItZmx1aWQ6YmVmb3JlLC5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRhaW5lci1mbHVpZDphZnRlcntjbGVhcjpib3RofXB7bWFyZ2luOjAgMCAxMHB4fS5sZWFke21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtmb250LXdlaWdodDoyMDA7bGluZS1oZWlnaHQ6MzBweH1zbWFsbHtmb250LXNpemU6ODUlfXN0cm9uZ3tmb250LXdlaWdodDpib2xkfWVte2ZvbnQtc3R5bGU6aXRhbGljfWNpdGV7Zm9udC1zdHlsZTpub3JtYWx9Lm11dGVke2NvbG9yOiM5OTl9YS5tdXRlZDpob3ZlcixhLm11dGVkOmZvY3Vze2NvbG9yOiM4MDgwODB9LnRleHQtd2FybmluZ3tjb2xvcjojYzA5ODUzfWEudGV4dC13YXJuaW5nOmhvdmVyLGEudGV4dC13YXJuaW5nOmZvY3Vze2NvbG9yOiNhNDdlM2N9LnRleHQtZXJyb3J7Y29sb3I6I2I5NGE0OH1hLnRleHQtZXJyb3I6aG92ZXIsYS50ZXh0LWVycm9yOmZvY3Vze2NvbG9yOiM5NTNiMzl9LnRleHQtaW5mb3tjb2xvcjojM2E4N2FkfWEudGV4dC1pbmZvOmhvdmVyLGEudGV4dC1pbmZvOmZvY3Vze2NvbG9yOiMyZDY5ODd9LnRleHQtc3VjY2Vzc3tjb2xvcjojNDY4ODQ3fWEudGV4dC1zdWNjZXNzOmhvdmVyLGEudGV4dC1zdWNjZXNzOmZvY3Vze2NvbG9yOiMzNTY2MzV9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9aDEsaDIsaDMsaDQsaDUsaDZ7bWFyZ2luOjEwcHggMDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjppbmhlcml0O3RleHQtcmVuZGVyaW5nOm9wdGltaXplbGVnaWJpbGl0eX1oMSBzbWFsbCxoMiBzbWFsbCxoMyBzbWFsbCxoNCBzbWFsbCxoNSBzbWFsbCxoNiBzbWFsbHtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTtjb2xvcjojOTk5fWgxLGgyLGgze2xpbmUtaGVpZ2h0OjQwcHh9aDF7Zm9udC1zaXplOjM4LjVweH1oMntmb250LXNpemU6MzEuNXB4fWgze2ZvbnQtc2l6ZToyNC41cHh9aDR7Zm9udC1zaXplOjE3LjVweH1oNXtmb250LXNpemU6MTRweH1oNntmb250LXNpemU6MTEuOXB4fWgxIHNtYWxse2ZvbnQtc2l6ZToyNC41cHh9aDIgc21hbGx7Zm9udC1zaXplOjE3LjVweH1oMyBzbWFsbHtmb250LXNpemU6MTRweH1oNCBzbWFsbHtmb250LXNpemU6MTRweH0ucGFnZS1oZWFkZXJ7cGFkZGluZy1ib3R0b206OXB4O21hcmdpbjoyMHB4IDAgMzBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfXVsLG9se3BhZGRpbmc6MDttYXJnaW46MCAwIDEwcHggMjVweH11bCB1bCx1bCBvbCxvbCBvbCxvbCB1bHttYXJnaW4tYm90dG9tOjB9bGl7bGluZS1oZWlnaHQ6MjBweH11bC51bnN0eWxlZCxvbC51bnN0eWxlZHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX11bC5pbmxpbmUsb2wuaW5saW5le21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfXVsLmlubGluZT5saSxvbC5pbmxpbmU+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmctcmlnaHQ6NXB4O3BhZGRpbmctbGVmdDo1cHg7Knpvb206MX1kbHttYXJnaW4tYm90dG9tOjIwcHh9ZHQsZGR7bGluZS1oZWlnaHQ6MjBweH1kdHtmb250LXdlaWdodDpib2xkfWRke21hcmdpbi1sZWZ0OjEwcHh9LmRsLWhvcml6b250YWx7Knpvb206MX0uZGwtaG9yaXpvbnRhbDpiZWZvcmUsLmRsLWhvcml6b250YWw6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmRsLWhvcml6b250YWw6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpsZWZ0O3dpZHRoOjIwMHB4O292ZXJmbG93OmhpZGRlbjtjbGVhcjpsZWZ0O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MjIwcHh9aHJ7bWFyZ2luOjIwcHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWVlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9YWJiclt0aXRsZV0sYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXXtjdXJzb3I6aGVscDtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzk5OX1hYmJyLmluaXRpYWxpc217Zm9udC1zaXplOjkwJTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9YmxvY2txdW90ZXtwYWRkaW5nOjAgMCAwIDE1cHg7bWFyZ2luOjAgMCAyMHB4O2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjZWVlfWJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE3LjVweDtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6MS4yNX1ibG9ja3F1b3RlIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojOTk5fWJsb2NrcXVvdGUgc21hbGw6YmVmb3Jle2NvbnRlbnQ6J1wyMDE0IFwwMEEwJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDowO2JvcmRlci1yaWdodDo1cHggc29saWQgI2VlZTtib3JkZXItbGVmdDowfWJsb2NrcXVvdGUucHVsbC1yaWdodCBwLGJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbHt0ZXh0LWFsaWduOnJpZ2h0fWJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmV7Y29udGVudDonJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXJ7Y29udGVudDonXDAwQTAgXDIwMTQnfXE6YmVmb3JlLHE6YWZ0ZXIsYmxvY2txdW90ZTpiZWZvcmUsYmxvY2txdW90ZTphZnRlcntjb250ZW50OiIifWFkZHJlc3N7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zdHlsZTpub3JtYWw7bGluZS1oZWlnaHQ6MjBweH1jb2RlLHByZXtwYWRkaW5nOjAgM3B4IDJweDtmb250LWZhbWlseTpNb25hY28sTWVubG8sQ29uc29sYXMsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2U7Zm9udC1zaXplOjEycHg7Y29sb3I6IzMzMzstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9Y29kZXtwYWRkaW5nOjJweCA0cHg7Y29sb3I6I2QxNDt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y5O2JvcmRlcjoxcHggc29saWQgI2UxZTFlOH1wcmV7ZGlzcGxheTpibG9jaztwYWRkaW5nOjkuNXB4O21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoyMHB4O3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtd3JhcDpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjE1KTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9cHJlLnByZXR0eXByaW50e21hcmdpbi1ib3R0b206MjBweH1wcmUgY29kZXtwYWRkaW5nOjA7Y29sb3I6aW5oZXJpdDt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0ucHJlLXNjcm9sbGFibGV7bWF4LWhlaWdodDozNDBweDtvdmVyZmxvdy15OnNjcm9sbH1mb3Jte21hcmdpbjowIDAgMjBweH1maWVsZHNldHtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToyMXB4O2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzMzMztib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fWxlZ2VuZCBzbWFsbHtmb250LXNpemU6MTVweDtjb2xvcjojOTk5fWxhYmVsLGlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9aW5wdXQsYnV0dG9uLHNlbGVjdCx0ZXh0YXJlYXtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmfWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHh9c2VsZWN0LHRleHRhcmVhLGlucHV0W3R5cGU9InRleHQiXSxpbnB1dFt0eXBlPSJwYXNzd29yZCJdLGlucHV0W3R5cGU9ImRhdGV0aW1lIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSxpbnB1dFt0eXBlPSJkYXRlIl0saW5wdXRbdHlwZT0ibW9udGgiXSxpbnB1dFt0eXBlPSJ0aW1lIl0saW5wdXRbdHlwZT0id2VlayJdLGlucHV0W3R5cGU9Im51bWJlciJdLGlucHV0W3R5cGU9ImVtYWlsIl0saW5wdXRbdHlwZT0idXJsIl0saW5wdXRbdHlwZT0ic2VhcmNoIl0saW5wdXRbdHlwZT0idGVsIl0saW5wdXRbdHlwZT0iY29sb3IiXSwudW5lZGl0YWJsZS1pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtwYWRkaW5nOjRweCA2cHg7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzU1NTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fWlucHV0LHRleHRhcmVhLC51bmVkaXRhYmxlLWlucHV0e3dpZHRoOjIwNnB4fXRleHRhcmVhe2hlaWdodDphdXRvfXRleHRhcmVhLGlucHV0W3R5cGU9InRleHQiXSxpbnB1dFt0eXBlPSJwYXNzd29yZCJdLGlucHV0W3R5cGU9ImRhdGV0aW1lIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSxpbnB1dFt0eXBlPSJkYXRlIl0saW5wdXRbdHlwZT0ibW9udGgiXSxpbnB1dFt0eXBlPSJ0aW1lIl0saW5wdXRbdHlwZT0id2VlayJdLGlucHV0W3R5cGU9Im51bWJlciJdLGlucHV0W3R5cGU9ImVtYWlsIl0saW5wdXRbdHlwZT0idXJsIl0saW5wdXRbdHlwZT0ic2VhcmNoIl0saW5wdXRbdHlwZT0idGVsIl0saW5wdXRbdHlwZT0iY29sb3IiXSwudW5lZGl0YWJsZS1pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzOy1tb3otdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnM7LW8tdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnM7dHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnN9dGV4dGFyZWE6Zm9jdXMsaW5wdXRbdHlwZT0idGV4dCJdOmZvY3VzLGlucHV0W3R5cGU9InBhc3N3b3JkIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGUiXTpmb2N1cyxpbnB1dFt0eXBlPSJtb250aCJdOmZvY3VzLGlucHV0W3R5cGU9InRpbWUiXTpmb2N1cyxpbnB1dFt0eXBlPSJ3ZWVrIl06Zm9jdXMsaW5wdXRbdHlwZT0ibnVtYmVyIl06Zm9jdXMsaW5wdXRbdHlwZT0iZW1haWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJ1cmwiXTpmb2N1cyxpbnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1cyxpbnB1dFt0eXBlPSJ0ZWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJjb2xvciJdOmZvY3VzLC51bmVkaXRhYmxlLWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjpyZ2JhKDgyLDE2OCwyMzYsMC44KTtvdXRsaW5lOjA7b3V0bGluZTp0aGluIGRvdHRlZCBcOTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuNik7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuNil9aW5wdXRbdHlwZT0icmFkaW8iXSxpbnB1dFt0eXBlPSJjaGVja2JveCJde21hcmdpbjo0cHggMCAwO21hcmdpbi10b3A6MXB4IFw5OyptYXJnaW4tdG9wOjA7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9ImZpbGUiXSxpbnB1dFt0eXBlPSJpbWFnZSJdLGlucHV0W3R5cGU9InN1Ym1pdCJdLGlucHV0W3R5cGU9InJlc2V0Il0saW5wdXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmFkaW8iXSxpbnB1dFt0eXBlPSJjaGVja2JveCJde3dpZHRoOmF1dG99c2VsZWN0LGlucHV0W3R5cGU9ImZpbGUiXXtoZWlnaHQ6MzBweDsqbWFyZ2luLXRvcDo0cHg7bGluZS1oZWlnaHQ6MzBweH1zZWxlY3R7d2lkdGg6MjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjY31zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtoZWlnaHQ6YXV0b31zZWxlY3Q6Zm9jdXMsaW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLGlucHV0W3R5cGU9InJhZGlvIl06Zm9jdXMsaW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0udW5lZGl0YWJsZS1pbnB1dCwudW5lZGl0YWJsZS10ZXh0YXJlYXtjb2xvcjojOTk5O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmY2ZjZmM7Ym9yZGVyLWNvbG9yOiNjY2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wMjUpfS51bmVkaXRhYmxlLWlucHV0e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnVuZWRpdGFibGUtdGV4dGFyZWF7d2lkdGg6YXV0bztoZWlnaHQ6YXV0b31pbnB1dDotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0ucmFkaW8sLmNoZWNrYm94e21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0ucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1sZWZ0Oi0yMHB4fS5jb250cm9scz4ucmFkaW86Zmlyc3QtY2hpbGQsLmNvbnRyb2xzPi5jaGVja2JveDpmaXJzdC1jaGlsZHtwYWRkaW5nLXRvcDo1cHh9LnJhZGlvLmlubGluZSwuY2hlY2tib3guaW5saW5le2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctdG9wOjVweDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5yYWRpby5pbmxpbmUrLnJhZGlvLmlubGluZSwuY2hlY2tib3guaW5saW5lKy5jaGVja2JveC5pbmxpbmV7bWFyZ2luLWxlZnQ6MTBweH0uaW5wdXQtbWluaXt3aWR0aDo2MHB4fS5pbnB1dC1zbWFsbHt3aWR0aDo5MHB4fS5pbnB1dC1tZWRpdW17d2lkdGg6MTUwcHh9LmlucHV0LWxhcmdle3dpZHRoOjIxMHB4fS5pbnB1dC14bGFyZ2V7d2lkdGg6MjcwcHh9LmlucHV0LXh4bGFyZ2V7d2lkdGg6NTMwcHh9aW5wdXRbY2xhc3MqPSJzcGFuIl0sc2VsZWN0W2NsYXNzKj0ic3BhbiJdLHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJde2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LXByZXBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHNlbGVjdFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAuaW5wdXQtcHJlcGVuZCBbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAuaW5wdXQtYXBwZW5kIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmlubGluZS1ibG9ja31pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjkyNnB4fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjg0NnB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjc2NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjY4NnB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjYwNnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjUyNnB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjQ0NnB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjM2NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjI4NnB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjIwNnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjEyNnB4fWlucHV0LnNwYW4xLHRleHRhcmVhLnNwYW4xLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xe3dpZHRoOjQ2cHh9LmNvbnRyb2xzLXJvd3sqem9vbToxfS5jb250cm9scy1yb3c6YmVmb3JlLC5jb250cm9scy1yb3c6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRyb2xzLXJvdzphZnRlcntjbGVhcjpib3RofS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdH0uY29udHJvbHMtcm93IC5jaGVja2JveFtjbGFzcyo9InNwYW4iXSwuY29udHJvbHMtcm93IC5yYWRpb1tjbGFzcyo9InNwYW4iXXtwYWRkaW5nLXRvcDo1cHh9aW5wdXRbZGlzYWJsZWRdLHNlbGVjdFtkaXNhYmxlZF0sdGV4dGFyZWFbZGlzYWJsZWRdLGlucHV0W3JlYWRvbmx5XSxzZWxlY3RbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZWVlfWlucHV0W3R5cGU9InJhZGlvIl1bZGlzYWJsZWRdLGlucHV0W3R5cGU9ImNoZWNrYm94Il1bZGlzYWJsZWRdLGlucHV0W3R5cGU9InJhZGlvIl1bcmVhZG9ubHldLGlucHV0W3R5cGU9ImNoZWNrYm94Il1bcmVhZG9ubHlde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLndhcm5pbmcgLmhlbHAtaW5saW5le2NvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCwuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhe2NvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCwuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhe2JvcmRlci1jb2xvcjojYzA5ODUzOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNhNDdlM2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojYzA5ODUzO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXItY29sb3I6I2MwOTg1M30uY29udHJvbC1ncm91cC5lcnJvciAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1pbmxpbmV7Y29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnJhZGlvLC5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYXtjb2xvcjojYjk0YTQ4fS5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYXtib3JkZXItY29sb3I6I2I5NGE0ODstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojOTUzYjM5Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5Mn0uY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLmVycm9yIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojYjk0YTQ4O2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5zdWNjZXNzIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaGVscC1pbmxpbmV7Y29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5zdWNjZXNzIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5yYWRpbywuY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWF7Y29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiM0Njg4NDc7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6IzM1NjYzNTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3YjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3Yjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2J9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiM0Njg4NDc7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojNDY4ODQ3fS5jb250cm9sLWdyb3VwLmluZm8gLmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5pbmZvIC5oZWxwLWlubGluZXtjb2xvcjojM2E4N2FkfS5jb250cm9sLWdyb3VwLmluZm8gLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLmluZm8gLnJhZGlvLC5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYXtjb2xvcjojM2E4N2FkfS5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYXtib3JkZXItY29sb3I6IzNhODdhZDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAuaW5mbyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC5pbmZvIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5pbmZvIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojMmQ2OTg3Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiNWQzOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiNWQzO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkM30uY29udHJvbC1ncm91cC5pbmZvIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6IzNhODdhZDtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjc7Ym9yZGVyLWNvbG9yOiMzYTg3YWR9aW5wdXQ6Zm9jdXM6aW52YWxpZCx0ZXh0YXJlYTpmb2N1czppbnZhbGlkLHNlbGVjdDpmb2N1czppbnZhbGlke2NvbG9yOiNiOTRhNDg7Ym9yZGVyLWNvbG9yOiNlZTVmNWJ9aW5wdXQ6Zm9jdXM6aW52YWxpZDpmb2N1cyx0ZXh0YXJlYTpmb2N1czppbnZhbGlkOmZvY3VzLHNlbGVjdDpmb2N1czppbnZhbGlkOmZvY3Vze2JvcmRlci1jb2xvcjojZTkzMjJkOy13ZWJraXQtYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjc7LW1vei1ib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliNztib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliN30uZm9ybS1hY3Rpb25ze3BhZGRpbmc6MTlweCAyMHB4IDIwcHg7bWFyZ2luLXRvcDoyMHB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTsqem9vbToxfS5mb3JtLWFjdGlvbnM6YmVmb3JlLC5mb3JtLWFjdGlvbnM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmZvcm0tYWN0aW9uczphZnRlcntjbGVhcjpib3RofS5oZWxwLWJsb2NrLC5oZWxwLWlubGluZXtjb2xvcjojNTk1OTU5fS5oZWxwLWJsb2Nre2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxMHB4fS5oZWxwLWlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7cGFkZGluZy1sZWZ0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uaW5wdXQtYXBwZW5kLC5pbnB1dC1wcmVwZW5ke2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LWFwcGVuZCAuZHJvcGRvd24tbWVudSwuaW5wdXQtcHJlcGVuZCAuZHJvcGRvd24tbWVudSwuaW5wdXQtYXBwZW5kIC5wb3BvdmVyLC5pbnB1dC1wcmVwZW5kIC5wb3BvdmVye2ZvbnQtc2l6ZToxNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDowO3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LWFwcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtYXBwZW5kIHNlbGVjdDpmb2N1cywuaW5wdXQtcHJlcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3t6LWluZGV4OjJ9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bztoZWlnaHQ6MjBweDttaW4td2lkdGg6MTZweDtwYWRkaW5nOjRweCA1cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICNjY2N9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1wcmVwZW5kIC5idG4sLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGUsLmlucHV0LXByZXBlbmQgLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xle3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LWFwcGVuZCAuYWN0aXZlLC5pbnB1dC1wcmVwZW5kIC5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYTlkYmE5O2JvcmRlci1jb2xvcjojNDZhNTQ2fS5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LXByZXBlbmQgLmJ0bnttYXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uOmZpcnN0LWNoaWxkLC5pbnB1dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIHNlbGVjdCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtYXBwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cHttYXJnaW4tbGVmdDotMXB4fS5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cDpsYXN0LWNoaWxkPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIGlucHV0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQrLmJ0bi1ncm91cCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpmaXJzdC1jaGlsZHttYXJnaW4tcmlnaHQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxke21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9aW5wdXQuc2VhcmNoLXF1ZXJ5e3BhZGRpbmctcmlnaHQ6MTRweDtwYWRkaW5nLXJpZ2h0OjRweCBcOTtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLWxlZnQ6NHB4IFw5O21hcmdpbi1ib3R0b206MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1yYWRpdXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDtib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDB9LmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4O2JvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweH0uZm9ybS1zZWFyY2ggaW5wdXQsLmZvcm0taW5saW5lIGlucHV0LC5mb3JtLWhvcml6b250YWwgaW5wdXQsLmZvcm0tc2VhcmNoIHRleHRhcmVhLC5mb3JtLWlubGluZSB0ZXh0YXJlYSwuZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhLC5mb3JtLXNlYXJjaCBzZWxlY3QsLmZvcm0taW5saW5lIHNlbGVjdCwuZm9ybS1ob3Jpem9udGFsIHNlbGVjdCwuZm9ybS1zZWFyY2ggLmhlbHAtaW5saW5lLC5mb3JtLWlubGluZSAuaGVscC1pbmxpbmUsLmZvcm0taG9yaXpvbnRhbCAuaGVscC1pbmxpbmUsLmZvcm0tc2VhcmNoIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLWlubGluZSAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmQsLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LWFwcGVuZCwuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1hcHBlbmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uZm9ybS1zZWFyY2ggLmhpZGUsLmZvcm0taW5saW5lIC5oaWRlLC5mb3JtLWhvcml6b250YWwgLmhpZGV7ZGlzcGxheTpub25lfS5mb3JtLXNlYXJjaCBsYWJlbCwuZm9ybS1pbmxpbmUgbGFiZWwsLmZvcm0tc2VhcmNoIC5idG4tZ3JvdXAsLmZvcm0taW5saW5lIC5idG4tZ3JvdXB7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjB9LmZvcm0tc2VhcmNoIC5yYWRpbywuZm9ybS1zZWFyY2ggLmNoZWNrYm94LC5mb3JtLWlubGluZSAucmFkaW8sLmZvcm0taW5saW5lIC5jaGVja2JveHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLXNlYXJjaCAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuZm9ybS1zZWFyY2ggLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDozcHg7bWFyZ2luLWxlZnQ6MH0uY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjEwcHh9bGVnZW5kKy5jb250cm9sLWdyb3Vwe21hcmdpbi10b3A6MjBweDstd2Via2l0LW1hcmdpbi10b3AtY29sbGFwc2U6c2VwYXJhdGV9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjIwcHg7Knpvb206MX0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmJlZm9yZSwuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVse2Zsb2F0OmxlZnQ7d2lkdGg6MTYwcHg7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHN7KmRpc3BsYXk6aW5saW5lLWJsb2NrOypwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tbGVmdDoxODBweDsqbWFyZ2luLWxlZnQ6MH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sczpmaXJzdC1jaGlsZHsqcGFkZGluZy1sZWZ0OjE4MHB4fS5mb3JtLWhvcml6b250YWwgLmhlbHAtYmxvY2t7bWFyZ2luLWJvdHRvbTowfS5mb3JtLWhvcml6b250YWwgaW5wdXQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCBzZWxlY3QrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCB0ZXh0YXJlYSsuaGVscC1ibG9jaywuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgLmlucHV0LXByZXBlbmQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtYXBwZW5kKy5oZWxwLWJsb2Nre21hcmdpbi10b3A6MTBweH0uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWFjdGlvbnN7cGFkZGluZy1sZWZ0OjE4MHB4fXRhYmxle21heC13aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9LnRhYmxle3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToyMHB4fS50YWJsZSB0aCwudGFibGUgdGR7cGFkZGluZzo4cHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246dG9wO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYmxlIHRoe2ZvbnQtd2VpZ2h0OmJvbGR9LnRhYmxlIHRoZWFkIHRoe3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0udGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZSB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowfS50YWJsZSB0Ym9keSt0Ym9keXtib3JkZXItdG9wOjJweCBzb2xpZCAjZGRkfS50YWJsZSAudGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmfS50YWJsZS1jb25kZW5zZWQgdGgsLnRhYmxlLWNvbmRlbnNlZCB0ZHtwYWRkaW5nOjRweCA1cHh9LnRhYmxlLWJvcmRlcmVke2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7KmJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udGFibGUtYm9yZGVyZWQgdGgsLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50aDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGZvb3QrdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS50YWJsZS1ib3JkZXJlZCB0Zm9vdCt0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweH0udGFibGUtc3RyaXBlZCB0Ym9keT50cjpudGgtY2hpbGQob2RkKT50ZCwudGFibGUtc3RyaXBlZCB0Ym9keT50cjpudGgtY2hpbGQob2RkKT50aHtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjl9LnRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyPnRkLC50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3Zlcj50aHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9dGFibGUgdGRbY2xhc3MqPSJzcGFuIl0sdGFibGUgdGhbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0YWJsZSB0ZFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRhYmxlIHRoW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6dGFibGUtY2VsbDtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xLC50YWJsZSB0aC5zcGFuMXtmbG9hdDpub25lO3dpZHRoOjQ0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjIsLnRhYmxlIHRoLnNwYW4ye2Zsb2F0Om5vbmU7d2lkdGg6MTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjMsLnRhYmxlIHRoLnNwYW4ze2Zsb2F0Om5vbmU7d2lkdGg6MjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjQsLnRhYmxlIHRoLnNwYW40e2Zsb2F0Om5vbmU7d2lkdGg6Mjg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjUsLnRhYmxlIHRoLnNwYW41e2Zsb2F0Om5vbmU7d2lkdGg6MzY0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjYsLnRhYmxlIHRoLnNwYW42e2Zsb2F0Om5vbmU7d2lkdGg6NDQ0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjcsLnRhYmxlIHRoLnNwYW43e2Zsb2F0Om5vbmU7d2lkdGg6NTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjgsLnRhYmxlIHRoLnNwYW44e2Zsb2F0Om5vbmU7d2lkdGg6NjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjksLnRhYmxlIHRoLnNwYW45e2Zsb2F0Om5vbmU7d2lkdGg6Njg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjEwLC50YWJsZSB0aC5zcGFuMTB7ZmxvYXQ6bm9uZTt3aWR0aDo3NjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTEsLnRhYmxlIHRoLnNwYW4xMXtmbG9hdDpub25lO3dpZHRoOjg0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xMiwudGFibGUgdGguc3BhbjEye2Zsb2F0Om5vbmU7d2lkdGg6OTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGJvZHkgdHIuc3VjY2Vzcz50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDh9LnRhYmxlIHRib2R5IHRyLmVycm9yPnRke2JhY2tncm91bmQtY29sb3I6I2YyZGVkZX0udGFibGUgdGJvZHkgdHIud2FybmluZz50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTN9LnRhYmxlIHRib2R5IHRyLmluZm8+dGR7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3fS50YWJsZS1ob3ZlciB0Ym9keSB0ci5zdWNjZXNzOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2QwZTljNn0udGFibGUtaG92ZXIgdGJvZHkgdHIuZXJyb3I6aG92ZXI+dGR7YmFja2dyb3VuZC1jb2xvcjojZWJjY2NjfS50YWJsZS1ob3ZlciB0Ym9keSB0ci53YXJuaW5nOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2ZhZjJjY30udGFibGUtaG92ZXIgdGJvZHkgdHIuaW5mbzpob3Zlcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNjNGUzZjN9W2NsYXNzXj0iaWNvbi0iXSxbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6MXB4OyptYXJnaW4tcmlnaHQ6LjNlbTtsaW5lLWhlaWdodDoxNHB4O3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wO2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxNHB4IDE0cHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcj5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6Zm9jdXM+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmhvdmVyPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6Zm9jdXM+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLi4vaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyIpfS5pY29uLWdsYXNze2JhY2tncm91bmQtcG9zaXRpb246MCAwfS5pY29uLW11c2lje2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggMH0uaWNvbi1zZWFyY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS5pY29uLWVudmVsb3Ble2JhY2tncm91bmQtcG9zaXRpb246LTcycHggMH0uaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9Lmljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAwfS5pY29uLXN0YXItZW1wdHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0uaWNvbi11c2Vye2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IDB9Lmljb24tZmlsbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAwfS5pY29uLXRoLWxhcmdle2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IDB9Lmljb24tdGh7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggMH0uaWNvbi10aC1saXN0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IDB9Lmljb24tb2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggMH0uaWNvbi1yZW1vdmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggMH0uaWNvbi16b29tLWlue2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IDB9Lmljb24tem9vbS1vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggMH0uaWNvbi1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggMH0uaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggMH0uaWNvbi1jb2d7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggMH0uaWNvbi10cmFzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAwfS5pY29uLWhvbWV7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yNHB4fS5pY29uLWZpbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMjRweH0uaWNvbi10aW1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTI0cHh9Lmljb24tcm9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0yNHB4fS5pY29uLWRvd25sb2FkLWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0yNHB4fS5pY29uLWRvd25sb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0yNHB4fS5pY29uLXVwbG9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMjRweH0uaWNvbi1pbmJveHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMjRweH0uaWNvbi1wbGF5LWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMjRweH0uaWNvbi1yZXBlYXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTI0cHh9Lmljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMjRweH0uaWNvbi1saXN0LWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMjRweH0uaWNvbi1sb2Nre2JhY2tncm91bmQtcG9zaXRpb246LTI4N3B4IC0yNHB4fS5pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTI0cHh9Lmljb24taGVhZHBob25lc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMjRweH0uaWNvbi12b2x1bWUtb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0yNHB4fS5pY29uLXZvbHVtZS1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0yNHB4fS5pY29uLXZvbHVtZS11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMjRweH0uaWNvbi1xcmNvZGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTI0cHh9Lmljb24tYmFyY29kZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMjRweH0uaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS5pY29uLXRhZ3N7YmFja2dyb3VuZC1wb3NpdGlvbjotMjVweCAtNDhweH0uaWNvbi1ib29re2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9Lmljb24tYm9va21hcmt7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtNDhweH0uaWNvbi1wcmludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS5pY29uLWNhbWVyYXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtNDhweH0uaWNvbi1mb250e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC00OHB4fS5pY29uLWJvbGR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY3cHggLTQ4cHh9Lmljb24taXRhbGlje2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS5pY29uLXRleHQtaGVpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC00OHB4fS5pY29uLXRleHQtd2lkdGh7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9Lmljb24tYWxpZ24tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNDhweH0uaWNvbi1hbGlnbi1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTQ4cHh9Lmljb24tYWxpZ24tcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTQ4cHh9Lmljb24tYWxpZ24tanVzdGlmeXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtNDhweH0uaWNvbi1saXN0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC00OHB4fS5pY29uLWluZGVudC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC00OHB4fS5pY29uLWluZGVudC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtNDhweH0uaWNvbi1mYWNldGltZS12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtNDhweH0uaWNvbi1waWN0dXJle2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC00OHB4fS5pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTcycHh9Lmljb24tbWFwLW1hcmtlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC03MnB4fS5pY29uLWFkanVzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC03MnB4fS5pY29uLXRpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtNzJweH0uaWNvbi1lZGl0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTcycHh9Lmljb24tc2hhcmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTcycHh9Lmljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTcycHh9Lmljb24tbW92ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtNzJweH0uaWNvbi1zdGVwLWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC03MnB4fS5pY29uLWZhc3QtYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTcycHh9Lmljb24tYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTcycHh9Lmljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNzJweH0uaWNvbi1wYXVzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtNzJweH0uaWNvbi1zdG9we2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC03MnB4fS5pY29uLWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTcycHh9Lmljb24tZmFzdC1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC03MnB4fS5pY29uLXN0ZXAtZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtNzJweH0uaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtNzJweH0uaWNvbi1jaGV2cm9uLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTcycHh9Lmljb24tY2hldnJvbi1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtNzJweH0uaWNvbi1wbHVzLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS5pY29uLW1pbnVzLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtOTZweH0uaWNvbi1yZW1vdmUtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS5pY29uLW9rLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtOTZweH0uaWNvbi1xdWVzdGlvbi1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9Lmljb24taW5mby1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC05NnB4fS5pY29uLXNjcmVlbnNob3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9Lmljb24tcmVtb3ZlLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtOTZweH0uaWNvbi1vay1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTk2cHh9Lmljb24tYmFuLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtOTZweH0uaWNvbi1hcnJvdy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC05NnB4fS5pY29uLWFycm93LXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC05NnB4fS5pY29uLWFycm93LXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OXB4IC05NnB4fS5pY29uLWFycm93LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTk2cHh9Lmljb24tc2hhcmUtYWx0e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC05NnB4fS5pY29uLXJlc2l6ZS1mdWxse2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC05NnB4fS5pY29uLXJlc2l6ZS1zbWFsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtOTZweH0uaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC05NnB4fS5pY29uLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTQzM3B4IC05NnB4fS5pY29uLWFzdGVyaXNre2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC05NnB4fS5pY29uLWV4Y2xhbWF0aW9uLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjBweH0uaWNvbi1naWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTEyMHB4fS5pY29uLWxlYWZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTIwcHh9Lmljb24tZmlyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0xMjBweH0uaWNvbi1leWUtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMjBweH0uaWNvbi1leWUtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTEyMHB4fS5pY29uLXdhcm5pbmctc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTIwcHh9Lmljb24tcGxhbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTEyMHB4fS5pY29uLWNhbGVuZGFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjBweH0uaWNvbi1yYW5kb217d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtMTIwcHh9Lmljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTIwcHh9Lmljb24tbWFnbmV0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0xMjBweH0uaWNvbi1jaGV2cm9uLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC0xMjBweH0uaWNvbi1jaGV2cm9uLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEzcHggLTExOXB4fS5pY29uLXJldHdlZXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTEyMHB4fS5pY29uLXNob3BwaW5nLWNhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTEyMHB4fS5pY29uLWZvbGRlci1jbG9zZXt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xMjBweH0uaWNvbi1mb2xkZXItb3Blbnt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0xMjBweH0uaWNvbi1yZXNpemUtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTExOXB4fS5pY29uLXJlc2l6ZS1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0xMThweH0uaWNvbi1oZGR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0uaWNvbi1idWxsaG9ybntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xNDRweH0uaWNvbi1iZWxse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS5pY29uLWNlcnRpZmljYXRle2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTE0NHB4fS5pY29uLXRodW1icy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0uaWNvbi10aHVtYnMtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTQ0cHh9Lmljb24taGFuZC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9Lmljb24taGFuZC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xNDRweH0uaWNvbi1oYW5kLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xNDRweH0uaWNvbi1oYW5kLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTE0NHB4fS5pY29uLWdsb2Jle2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0xNDRweH0uaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTE0NHB4fS5pY29uLXRhc2tze2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xNDRweH0uaWNvbi1maWx0ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTE0NHB4fS5pY29uLWJyaWVmY2FzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMTQ0cHh9Lmljb24tZnVsbHNjcmVlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTQ0cHh9LmRyb3B1cCwuZHJvcGRvd257cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXRvZ2dsZXsqbWFyZ2luLWJvdHRvbTotM3B4fS5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTowfS5jYXJldHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDowO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjRweCBzb2xpZCAjMDAwO2JvcmRlci1yaWdodDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6IiJ9LmRyb3Bkb3duIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDoycHh9LmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO3otaW5kZXg6MTAwMDtkaXNwbGF5Om5vbmU7ZmxvYXQ6bGVmdDttaW4td2lkdGg6MTYwcHg7cGFkZGluZzo1cHggMDttYXJnaW46MnB4IDAgMDtsaXN0LXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTsqYm9yZGVyLXJpZ2h0LXdpZHRoOjJweDsqYm9yZGVyLWJvdHRvbS13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5kaXZpZGVyeyp3aWR0aDoxMDAlO2hlaWdodDoxcHg7bWFyZ2luOjlweCAxcHg7Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZn0uZHJvcGRvd24tbWVudT5saT5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtjbGVhcjpib3RoO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cywuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hLC5kcm9wZG93bi1zdWJtZW51OmZvY3VzPmF7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDgxYzI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMDhjKSx0bygjMDA3N2IzKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsR3JhZGllbnRUeXBlPTApfS5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7b3V0bGluZTowO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA3N2IzJyxHcmFkaWVudFR5cGU9MCl9LmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXN7Y29sb3I6Izk5OX0uZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5vcGVueyp6LWluZGV4OjEwMDB9Lm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ucHVsbC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uZHJvcHVwIC5jYXJldCwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0e2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjRweCBzb2xpZCAjMDAwO2NvbnRlbnQ6IiJ9LmRyb3B1cCAuZHJvcGRvd24tbWVudSwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjEwMCU7bWFyZ2luLWJvdHRvbToxcHh9LmRyb3Bkb3duLXN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOjA7bGVmdDoxMDAlO21hcmdpbi10b3A6LTZweDttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweH0uZHJvcGRvd24tc3VibWVudTpob3Zlcj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5kcm9wdXAgLmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206LTJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDtib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDB9LmRyb3Bkb3duLXN1Ym1lbnU+YTphZnRlcntkaXNwbGF5OmJsb2NrO2Zsb2F0OnJpZ2h0O3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDo1cHg7bWFyZ2luLXJpZ2h0Oi0xMHB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweDtjb250ZW50OiIgIn0uZHJvcGRvd24tc3VibWVudTpob3Zlcj5hOmFmdGVye2JvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0e2Zsb2F0Om5vbmV9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0Pi5kcm9wZG93bi1tZW51e2xlZnQ6LTEwMCU7bWFyZ2luLWxlZnQ6MTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHh9LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5uYXYtaGVhZGVye3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0udHlwZWFoZWFke3otaW5kZXg6MTA1MTttYXJnaW4tdG9wOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LndlbGx7bWluLWhlaWdodDoyMHB4O3BhZGRpbmc6MTlweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2UzZTNlMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpfS53ZWxsIGJsb2NrcXVvdGV7Ym9yZGVyLWNvbG9yOiNkZGQ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xNSl9LndlbGwtbGFyZ2V7cGFkZGluZzoyNHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ud2VsbC1zbWFsbHtwYWRkaW5nOjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmZhZGV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1vLXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LmZhZGUuaW57b3BhY2l0eToxfS5jb2xsYXBzZXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW1vei10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW8tdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlO3RyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZX0uY29sbGFwc2UuaW57aGVpZ2h0OmF1dG99LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMDAwO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtvcGFjaXR5Oi4yO2ZpbHRlcjphbHBoYShvcGFjaXR5PTIwKX0uY2xvc2U6aG92ZXIsLmNsb3NlOmZvY3Vze2NvbG9yOiMwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNDtmaWx0ZXI6YWxwaGEob3BhY2l0eT00MCl9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmc6NHB4IDEycHg7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDouM2VtO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMzt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1OypiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmZmKSx0bygjZTZlNmU2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXI6MXB4IHNvbGlkICNjY2M7KmJvcmRlcjowO2JvcmRlci1jb2xvcjojZTZlNmU2ICNlNmU2ZTYgI2JmYmZiZjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1ib3R0b20tY29sb3I6I2IzYjNiMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZlNmU2ZTYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG46aG92ZXIsLmJ0bjpmb2N1cywuYnRuOmFjdGl2ZSwuYnRuLmFjdGl2ZSwuYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2OypiYWNrZ3JvdW5kLWNvbG9yOiNkOWQ5ZDl9LmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojY2NjIFw5fS5idG46Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bjpob3ZlciwuYnRuOmZvY3Vze2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNXB4Oy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjstby10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcn0uYnRuOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fS5idG4uYWN0aXZlLC5idG46YWN0aXZle2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4uZGlzYWJsZWQsLmJ0bltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1pbWFnZTpub25lO29wYWNpdHk6LjY1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTY1KTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1sYXJnZXtwYWRkaW5nOjExcHggMTlweDtmb250LXNpemU6MTcuNXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0sLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOjRweH0uYnRuLXNtYWxse3BhZGRpbmc6MnB4IDEwcHg7Zm9udC1zaXplOjExLjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJdLC5idG4tc21hbGwgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDowfS5idG4tbWluaSBbY2xhc3NePSJpY29uLSJdLC5idG4tbWluaSBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOi0xcHh9LmJ0bi1taW5pe3BhZGRpbmc6MCA2cHg7Zm9udC1zaXplOjEwLjVweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJ0bi1ibG9ja3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLXRvcDo1cHh9aW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLWJsb2NrLGlucHV0W3R5cGU9InJlc2V0Il0uYnRuLWJsb2NrLGlucHV0W3R5cGU9ImJ1dHRvbiJdLmJ0bi1ibG9ja3t3aWR0aDoxMDAlfS5idG4tcHJpbWFyeS5hY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW52ZXJzZS5hY3RpdmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjc1KX0uYnRuLXByaW1hcnl7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzAwNmRjYzsqYmFja2dyb3VuZC1jb2xvcjojMDRjO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzA0YykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMwNGMgIzA0YyAjMDAyYTgwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDQ0Y2MnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnk6Zm9jdXMsLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZlLC5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLXByaW1hcnlbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDRjOypiYWNrZ3JvdW5kLWNvbG9yOiMwMDNiYjN9LmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzAzOSBcOX0uYnRuLXdhcm5pbmd7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjsqYmFja2dyb3VuZC1jb2xvcjojZjg5NDA2O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZiYjQ1MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNmODk0MDYgI2Y4OTQwNiAjYWQ2NzA0O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLGVuZENvbG9yc3RyPScjZmZmODk0MDYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4td2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmc6Zm9jdXMsLmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLXdhcm5pbmdbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2OypiYWNrZ3JvdW5kLWNvbG9yOiNkZjg1MDV9LmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2M2NzYwNSBcOX0uYnRuLWRhbmdlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZGE0ZjQ5OypiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZWU1ZjViKSx0bygjYmQzNjJmKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2JkMzYyZiAjYmQzNjJmICM4MDI0MjA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsZW5kQ29sb3JzdHI9JyNmZmJkMzYyZicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXI6Zm9jdXMsLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZSwuYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLWRhbmdlcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7KmJhY2tncm91bmQtY29sb3I6I2E5MzAyYX0uYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6Izk0MmEyNSBcOX0uYnRuLXN1Y2Nlc3N7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzViYjc1YjsqYmFja2dyb3VuZC1jb2xvcjojNTFhMzUxO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzYyYzQ2MiksdG8oIzUxYTM1MSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiM1MWEzNTEgIzUxYTM1MSAjMzg3MDM4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2MmM0NjInLGVuZENvbG9yc3RyPScjZmY1MWEzNTEnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3M6Zm9jdXMsLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5idG4tc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTFhMzUxOypiYWNrZ3JvdW5kLWNvbG9yOiM0OTkyNDl9LmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwODE0MCBcOX0uYnRuLWluZm97Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzQ5YWZjZDsqYmFja2dyb3VuZC1jb2xvcjojMmY5NmI0O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzViYzBkZSksdG8oIzJmOTZiNCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyZjk2YjQgIzJmOTZiNCAjMWY2Mzc3O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLGVuZENvbG9yc3RyPScjZmYyZjk2YjQnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW5mbzpob3ZlciwuYnRuLWluZm86Zm9jdXMsLmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW5mby5kaXNhYmxlZCwuYnRuLWluZm9bZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0OypiYWNrZ3JvdW5kLWNvbG9yOiMyYTg1YTB9LmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzI0NzQ4YyBcOX0uYnRuLWludmVyc2V7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzM2MzYzNjsqYmFja2dyb3VuZC1jb2xvcjojMjIyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzQ0NCksdG8oIzIyMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM0NDQsIzIyMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyMjIgIzIyMiAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY0NDQ0NDQnLGVuZENvbG9yc3RyPScjZmYyMjIyMjInLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW52ZXJzZTpob3ZlciwuYnRuLWludmVyc2U6Zm9jdXMsLmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZlLC5idG4taW52ZXJzZS5kaXNhYmxlZCwuYnRuLWludmVyc2VbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjIyOypiYWNrZ3JvdW5kLWNvbG9yOiMxNTE1MTV9LmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzA4MDgwOCBcOX1idXR0b24uYnRuLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bnsqcGFkZGluZy10b3A6M3B4OypwYWRkaW5nLWJvdHRvbTozcHh9YnV0dG9uLmJ0bjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG46Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2JvcmRlcjowfWJ1dHRvbi5idG4uYnRuLWxhcmdlLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbGFyZ2V7KnBhZGRpbmctdG9wOjdweDsqcGFkZGluZy1ib3R0b206N3B4fWJ1dHRvbi5idG4uYnRuLXNtYWxsLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tc21hbGx7KnBhZGRpbmctdG9wOjNweDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG4uYnRuLW1pbmksaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLmJ0bi1taW5peypwYWRkaW5nLXRvcDoxcHg7KnBhZGRpbmctYm90dG9tOjFweH0uYnRuLWxpbmssLmJ0bi1saW5rOmFjdGl2ZSwuYnRuLWxpbmtbZGlzYWJsZWRde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lOy13ZWJraXQtYm94LXNoYWRvdzpub25lOy1tb3otYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uYnRuLWxpbmt7Y29sb3I6IzA4YztjdXJzb3I6cG9pbnRlcjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4tbGluazpob3ZlciwuYnRuLWxpbms6Zm9jdXN7Y29sb3I6IzAwNTU4MDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3Vze2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0bi1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsqem9vbToxfS5idG4tZ3JvdXA6Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cCsuYnRuLWdyb3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLXRvb2xiYXJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MH0uYnRuLXRvb2xiYXI+LmJ0bisuYnRuLC5idG4tdG9vbGJhcj4uYnRuLWdyb3VwKy5idG4sLmJ0bi10b29sYmFyPi5idG4rLmJ0bi1ncm91cHttYXJnaW4tbGVmdDo1cHh9LmJ0bi1ncm91cD4uYnRue3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5idG4tZ3JvdXA+LmJ0biwuYnRuLWdyb3VwPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXA+LnBvcG92ZXJ7Zm9udC1zaXplOjE0cHh9LmJ0bi1ncm91cD4uYnRuLW1pbml7Zm9udC1zaXplOjEwLjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGx7Zm9udC1zaXplOjExLjlweH0uYnRuLWdyb3VwPi5idG4tbGFyZ2V7Zm9udC1zaXplOjE3LjVweH0uYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0uYnRuLWdyb3VwPi5idG46bGFzdC1jaGlsZCwuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo2cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4ubGFyZ2UuZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NnB4fS5idG4tZ3JvdXA+LmJ0bjpob3ZlciwuYnRuLWdyb3VwPi5idG46Zm9jdXMsLmJ0bi1ncm91cD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwPi5idG4uYWN0aXZle3otaW5kZXg6Mn0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4O3BhZGRpbmctcmlnaHQ6OHB4OypwYWRkaW5nLWJvdHRvbTo1cHg7cGFkZGluZy1sZWZ0OjhweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi1ncm91cD4uYnRuLW1pbmkrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6MnB4O3BhZGRpbmctcmlnaHQ6NXB4OypwYWRkaW5nLWJvdHRvbToycHg7cGFkZGluZy1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGwrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4OypwYWRkaW5nLWJvdHRvbTo0cHh9LmJ0bi1ncm91cD4uYnRuLWxhcmdlKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjdweDtwYWRkaW5nLXJpZ2h0OjEycHg7KnBhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLWxlZnQ6MTJweH0uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXAub3BlbiAuYnRuLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMDRjfS5idG4tZ3JvdXAub3BlbiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2JkMzYyZn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTF9LmJ0bi1ncm91cC5vcGVuIC5idG4taW5mby5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0fS5idG4tZ3JvdXAub3BlbiAuYnRuLWludmVyc2UuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzIyMn0uYnRuIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDowfS5idG4tbGFyZ2UgLmNhcmV0e21hcmdpbi10b3A6NnB4fS5idG4tbGFyZ2UgLmNhcmV0e2JvcmRlci10b3Atd2lkdGg6NXB4O2JvcmRlci1yaWdodC13aWR0aDo1cHg7Ym9yZGVyLWxlZnQtd2lkdGg6NXB4fS5idG4tbWluaSAuY2FyZXQsLmJ0bi1zbWFsbCAuY2FyZXR7bWFyZ2luLXRvcDo4cHh9LmRyb3B1cCAuYnRuLWxhcmdlIC5jYXJldHtib3JkZXItYm90dG9tLXdpZHRoOjVweH0uYnRuLXByaW1hcnkgLmNhcmV0LC5idG4td2FybmluZyAuY2FyZXQsLmJ0bi1kYW5nZXIgLmNhcmV0LC5idG4taW5mbyAuY2FyZXQsLmJ0bi1zdWNjZXNzIC5jYXJldCwuYnRuLWludmVyc2UgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9LmJ0bi1ncm91cC12ZXJ0aWNhbHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG57ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21heC13aWR0aDoxMDAlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4rLmJ0bnttYXJnaW4tdG9wOi0xcHg7bWFyZ2luLWxlZnQ6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tbGFyZ2U6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCA2cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1sYXJnZTpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0uYWxlcnR7cGFkZGluZzo4cHggMzVweCA4cHggMTRweDttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzO2JvcmRlcjoxcHggc29saWQgI2ZiZWVkNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmFsZXJ0LC5hbGVydCBoNHtjb2xvcjojYzA5ODUzfS5hbGVydCBoNHttYXJnaW46MH0uYWxlcnQgLmNsb3Nle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4O3JpZ2h0Oi0yMXB4O2xpbmUtaGVpZ2h0OjIwcHh9LmFsZXJ0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0NztiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDg7Ym9yZGVyLWNvbG9yOiNkNmU5YzZ9LmFsZXJ0LXN1Y2Nlc3MgaDR7Y29sb3I6IzQ2ODg0N30uYWxlcnQtZGFuZ2VyLC5hbGVydC1lcnJvcntjb2xvcjojYjk0YTQ4O2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2VlZDNkN30uYWxlcnQtZGFuZ2VyIGg0LC5hbGVydC1lcnJvciBoNHtjb2xvcjojYjk0YTQ4fS5hbGVydC1pbmZve2NvbG9yOiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojYmNlOGYxfS5hbGVydC1pbmZvIGg0e2NvbG9yOiMzYTg3YWR9LmFsZXJ0LWJsb2Nre3BhZGRpbmctdG9wOjE0cHg7cGFkZGluZy1ib3R0b206MTRweH0uYWxlcnQtYmxvY2s+cCwuYWxlcnQtYmxvY2s+dWx7bWFyZ2luLWJvdHRvbTowfS5hbGVydC1ibG9jayBwK3B7bWFyZ2luLXRvcDo1cHh9Lm5hdnttYXJnaW4tYm90dG9tOjIwcHg7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9Lm5hdj5saT5he2Rpc3BsYXk6YmxvY2t9Lm5hdj5saT5hOmhvdmVyLC5uYXY+bGk+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm5hdj5saT5hPmltZ3ttYXgtd2lkdGg6bm9uZX0ubmF2Pi5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5uYXYtaGVhZGVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMTVweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6Izk5OTt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lm5hdiBsaSsubmF2LWhlYWRlcnttYXJnaW4tdG9wOjlweH0ubmF2LWxpc3R7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4O21hcmdpbi1ib3R0b206MH0ubmF2LWxpc3Q+bGk+YSwubmF2LWxpc3QgLm5hdi1oZWFkZXJ7bWFyZ2luLXJpZ2h0Oi0xNXB4O21hcmdpbi1sZWZ0Oi0xNXB4O3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpfS5uYXYtbGlzdD5saT5he3BhZGRpbmc6M3B4IDE1cHh9Lm5hdi1saXN0Pi5hY3RpdmU+YSwubmF2LWxpc3Q+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtbGlzdD4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMik7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtbGlzdCBbY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdCBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tcmlnaHQ6MnB4fS5uYXYtbGlzdCAuZGl2aWRlcnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46LTVweCAwIDVweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9Lm5hdi10YWJzLC5uYXYtcGlsbHN7Knpvb206MX0ubmF2LXRhYnM6YmVmb3JlLC5uYXYtcGlsbHM6YmVmb3JlLC5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2NsZWFyOmJvdGh9Lm5hdi10YWJzPmxpLC5uYXYtcGlsbHM+bGl7ZmxvYXQ6bGVmdH0ubmF2LXRhYnM+bGk+YSwubmF2LXBpbGxzPmxpPmF7cGFkZGluZy1yaWdodDoxMnB4O3BhZGRpbmctbGVmdDoxMnB4O21hcmdpbi1yaWdodDoycHg7bGluZS1oZWlnaHQ6MTRweH0ubmF2LXRhYnN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0ubmF2LXRhYnM+bGl7bWFyZ2luLWJvdHRvbTotMXB4fS5uYXYtdGFicz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0ubmF2LXRhYnM+bGk+YTpob3ZlciwubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZWVlICNkZGR9Lm5hdi10YWJzPi5hY3RpdmU+YSwubmF2LXRhYnM+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtdGFicz4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9Lm5hdi1waWxscz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWJvdHRvbToycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDstbW96LWJvcmRlci1yYWRpdXM6NXB4O2JvcmRlci1yYWRpdXM6NXB4fS5uYXYtcGlsbHM+LmFjdGl2ZT5hLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtc3RhY2tlZD5saXtmbG9hdDpub25lfS5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1yaWdodDowfS5uYXYtdGFicy5uYXYtc3RhY2tlZHtib3JkZXItYm90dG9tOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpPmF7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6Zmlyc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5hey13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5hOmhvdmVyLC5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5hOmZvY3Vze3otaW5kZXg6Mjtib3JkZXItY29sb3I6I2RkZH0ubmF2LXBpbGxzLm5hdi1zdGFja2VkPmxpPmF7bWFyZ2luLWJvdHRvbTozcHh9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saTpsYXN0LWNoaWxkPmF7bWFyZ2luLWJvdHRvbToxcHh9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0ubmF2LXBpbGxzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6NnB4O2JvcmRlci10b3AtY29sb3I6IzA4Yztib3JkZXItYm90dG9tLWNvbG9yOiMwOGN9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyIC5jYXJldCwubmF2IC5kcm9wZG93bi10b2dnbGU6Zm9jdXMgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzAwNTU4MDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDU1ODB9Lm5hdi10YWJzIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5uYXYgLmFjdGl2ZSAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXYtdGFicyAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdj4uZHJvcGRvd24uYWN0aXZlPmE6aG92ZXIsLm5hdj4uZHJvcGRvd24uYWN0aXZlPmE6Zm9jdXN7Y3Vyc29yOnBvaW50ZXJ9Lm5hdi10YWJzIC5vcGVuIC5kcm9wZG93bi10b2dnbGUsLm5hdi1waWxscyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLC5uYXY+bGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+YTpob3ZlciwubmF2PmxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Ym9yZGVyLWNvbG9yOiM5OTl9Lm5hdiBsaS5kcm9wZG93bi5vcGVuIC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlIC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4gYTpob3ZlciAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6Zm9jdXMgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7b3BhY2l0eToxO2ZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCl9LnRhYnMtc3RhY2tlZCAub3Blbj5hOmhvdmVyLC50YWJzLXN0YWNrZWQgLm9wZW4+YTpmb2N1c3tib3JkZXItY29sb3I6Izk5OX0udGFiYmFibGV7Knpvb206MX0udGFiYmFibGU6YmVmb3JlLC50YWJiYWJsZTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGFiYmFibGU6YWZ0ZXJ7Y2xlYXI6Ym90aH0udGFiLWNvbnRlbnR7b3ZlcmZsb3c6YXV0b30udGFicy1iZWxvdz4ubmF2LXRhYnMsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzLC50YWJzLWxlZnQ+Lm5hdi10YWJze2JvcmRlci1ib3R0b206MH0udGFiLWNvbnRlbnQ+LnRhYi1wYW5lLC5waWxsLWNvbnRlbnQ+LnBpbGwtcGFuZXtkaXNwbGF5Om5vbmV9LnRhYi1jb250ZW50Pi5hY3RpdmUsLnBpbGwtY29udGVudD4uYWN0aXZle2Rpc3BsYXk6YmxvY2t9LnRhYnMtYmVsb3c+Lm5hdi10YWJze2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpe21hcmdpbi10b3A6LTFweDttYXJnaW4tYm90dG9tOjB9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpPmF7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDtib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4fS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hOmZvY3Vze2JvcmRlci10b3AtY29sb3I6I2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS50YWJzLWJlbG93Pi5uYXYtdGFicz4uYWN0aXZlPmEsLnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+YTpob3ZlciwudGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hOmZvY3Vze2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjZGRkICNkZGQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saSwudGFicy1yaWdodD4ubmF2LXRhYnM+bGl7ZmxvYXQ6bm9uZX0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21pbi13aWR0aDo3NHB4O21hcmdpbi1yaWdodDowO21hcmdpbi1ib3R0b206M3B4fS50YWJzLWxlZnQ+Lm5hdi10YWJze2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjE5cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkfS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmF7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmE6aG92ZXIsLnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZGRkICNlZWUgI2VlZX0udGFicy1sZWZ0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmhvdmVyLC50YWJzLWxlZnQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpmb2N1c3tib3JkZXItY29sb3I6I2RkZCB0cmFuc3BhcmVudCAjZGRkICNkZGQ7KmJvcmRlci1yaWdodC1jb2xvcjojZmZmfS50YWJzLXJpZ2h0Pi5uYXYtdGFic3tmbG9hdDpyaWdodDttYXJnaW4tbGVmdDoxOXB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmZvY3Vze2JvcmRlci1jb2xvcjojZWVlICNlZWUgI2VlZSAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3ZlciwudGFicy1yaWdodD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmZvY3Vze2JvcmRlci1jb2xvcjojZGRkICNkZGQgI2RkZCB0cmFuc3BhcmVudDsqYm9yZGVyLWxlZnQtY29sb3I6I2ZmZn0ubmF2Pi5kaXNhYmxlZD5he2NvbG9yOiM5OTl9Lm5hdj4uZGlzYWJsZWQ+YTpob3ZlciwubmF2Pi5kaXNhYmxlZD5hOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhcnsqcG9zaXRpb246cmVsYXRpdmU7KnotaW5kZXg6MjttYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyLWlubmVye21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZmZiksdG8oI2YyZjJmMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyOjFweCBzb2xpZCAjZDRkNGQ0Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmZmZicsZW5kQ29sb3JzdHI9JyNmZmYyZjJmMicsR3JhZGllbnRUeXBlPTApOyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpfS5uYXZiYXItaW5uZXI6YmVmb3JlLC5uYXZiYXItaW5uZXI6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm5hdmJhci1pbm5lcjphZnRlcntjbGVhcjpib3RofS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvfS5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyIC5icmFuZHtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7cGFkZGluZzoxMHB4IDIwcHggMTBweDttYXJnaW4tbGVmdDotMjBweDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDoyMDA7Y29sb3I6Izc3Nzt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9Lm5hdmJhciAuYnJhbmQ6aG92ZXIsLm5hdmJhciAuYnJhbmQ6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdmJhci10ZXh0e21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDo0MHB4O2NvbG9yOiM3Nzd9Lm5hdmJhci1saW5re2NvbG9yOiM3Nzd9Lm5hdmJhci1saW5rOmhvdmVyLC5uYXZiYXItbGluazpmb2N1c3tjb2xvcjojMzMzfS5uYXZiYXIgLmRpdmlkZXItdmVydGljYWx7aGVpZ2h0OjQwcHg7bWFyZ2luOjAgOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2ZmZjtib3JkZXItbGVmdDoxcHggc29saWQgI2YyZjJmMn0ubmF2YmFyIC5idG4sLm5hdmJhciAuYnRuLWdyb3Vwe21hcmdpbi10b3A6NXB4fS5uYXZiYXIgLmJ0bi1ncm91cCAuYnRuLC5uYXZiYXIgLmlucHV0LXByZXBlbmQgLmJ0biwubmF2YmFyIC5pbnB1dC1hcHBlbmQgLmJ0biwubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXAsLm5hdmJhciAuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXB7bWFyZ2luLXRvcDowfS5uYXZiYXItZm9ybXttYXJnaW4tYm90dG9tOjA7Knpvb206MX0ubmF2YmFyLWZvcm06YmVmb3JlLC5uYXZiYXItZm9ybTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2YmFyLWZvcm06YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2YmFyLWZvcm0gaW5wdXQsLm5hdmJhci1mb3JtIHNlbGVjdCwubmF2YmFyLWZvcm0gLnJhZGlvLC5uYXZiYXItZm9ybSAuY2hlY2tib3h7bWFyZ2luLXRvcDo1cHh9Lm5hdmJhci1mb3JtIGlucHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJpbWFnZSJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJjaGVja2JveCJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJyYWRpbyJde21hcmdpbi10b3A6M3B4fS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kLC5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tdG9wOjVweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5hdmJhci1mb3JtIC5pbnB1dC1hcHBlbmQgaW5wdXQsLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVwZW5kIGlucHV0e21hcmdpbi10b3A6MH0ubmF2YmFyLXNlYXJjaHtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O21hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MH0ubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5e3BhZGRpbmc6NHB4IDE0cHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5uYXZiYXItc3RhdGljLXRvcHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVyey13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLWZpeGVkLXRvcCwubmF2YmFyLWZpeGVkLWJvdHRvbXtwb3NpdGlvbjpmaXhlZDtyaWdodDowO2xlZnQ6MDt6LWluZGV4OjEwMzA7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7Ym9yZGVyLXdpZHRoOjAgMCAxcHh9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcntib3JkZXItd2lkdGg6MXB4IDAgMH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7d2lkdGg6OTQwcHh9Lm5hdmJhci1maXhlZC10b3B7dG9wOjB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhci1maXhlZC1ib3R0b217Ym90dG9tOjB9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhciAubmF2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MDtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgMTBweCAwIDB9Lm5hdmJhciAubmF2LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXJpZ2h0OjB9Lm5hdmJhciAubmF2Pmxpe2Zsb2F0OmxlZnR9Lm5hdmJhciAubmF2PmxpPmF7ZmxvYXQ6bm9uZTtwYWRkaW5nOjEwcHggMTVweCAxMHB4O2NvbG9yOiM3Nzc7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhweH0ubmF2YmFyIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhciAubmF2Pi5hY3RpdmU+YSwubmF2YmFyIC5uYXY+LmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXIgLm5hdj4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpfS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpub25lO2Zsb2F0OnJpZ2h0O3BhZGRpbmc6N3B4IDEwcHg7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDo1cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2VkZWRlZDsqYmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2YyZjJmMiksdG8oI2U1ZTVlNSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNlNWU1ZTUgI2U1ZTVlNSAjYmZiZmJmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmMmYyZjInLGVuZENvbG9yc3RyPScjZmZlNWU1ZTUnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KX0ubmF2YmFyIC5idG4tbmF2YmFyOmhvdmVyLC5uYXZiYXIgLmJ0bi1uYXZiYXI6Zm9jdXMsLm5hdmJhciAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5kaXNhYmxlZCwubmF2YmFyIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0ubmF2YmFyIC5idG4tbmF2YmFyIC5pY29uLWJhcntkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjFweDstbW96LWJvcmRlci1yYWRpdXM6MXB4O2JvcmRlci1yYWRpdXM6MXB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0uYnRuLW5hdmJhciAuaWNvbi1iYXIrLmljb24tYmFye21hcmdpbi10b3A6M3B4fS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03cHg7bGVmdDo5cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjdweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yKTtjb250ZW50OicnfS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTZweDtsZWZ0OjEwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjZweCBzb2xpZCAjZmZmO2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OicnfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3RvcDphdXRvO2JvdHRvbTotN3B4O2JvcmRlci10b3A6N3B4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjIpfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7dG9wOmF1dG87Ym90dG9tOi02cHg7Ym9yZGVyLXRvcDo2cHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjB9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duPmE6aG92ZXIgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj5hOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiMzMzM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzMzfS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM3Nzc7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNzc3fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDpiZWZvcmV7cmlnaHQ6MTJweDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudTphZnRlciwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDphZnRlcntyaWdodDoxM3B4O2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1tZW51LC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IC5kcm9wZG93bi1tZW51e3JpZ2h0OjEwMCU7bGVmdDphdXRvO21hcmdpbi1yaWdodDotMXB4O21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWlubmVye2JhY2tncm91bmQtY29sb3I6IzFiMWIxYjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMyMjIpLHRvKCMxMTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMjIyLCMxMTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjUyNTI1O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxlbmRDb2xvcnN0cj0nI2ZmMTExMTExJyxHcmFkaWVudFR5cGU9MCl9Lm5hdmJhci1pbnZlcnNlIC5icmFuZCwubmF2YmFyLWludmVyc2UgLm5hdj5saT5he2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0ubmF2YmFyLWludmVyc2UgLmJyYW5kOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5icmFuZDpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmZvY3Vze2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5icmFuZHtjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRleHR7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YSwubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmt7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6Zm9jdXN7Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMyMjI7Ym9yZGVyLWxlZnQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj5hOmhvdmVyIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj5hOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzUxNTE1MTtib3JkZXItY29sb3I6IzExMTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7LW1vei10cmFuc2l0aW9uOm5vbmU7LW8tdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeS5mb2N1c2Vke3BhZGRpbmc6NXB4IDE1cHg7Y29sb3I6IzMzMzt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjowO291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSl9Lm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTBlMGU7KmJhY2tncm91bmQtY29sb3I6IzA0MDQwNDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMxNTE1MTUpLHRvKCMwNDA0MDQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMDQwNDA0ICMwNDA0MDQgIzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMTUxNTE1JyxlbmRDb2xvcnN0cj0nI2ZmMDQwNDA0JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZSwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0MDQwNDsqYmFja2dyb3VuZC1jb2xvcjojMDAwfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAgXDl9LmJyZWFkY3J1bWJ7cGFkZGluZzo4cHggMTVweDttYXJnaW46MCAwIDIwcHg7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmJyZWFkY3J1bWI+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjsqem9vbToxfS5icmVhZGNydW1iPmxpPi5kaXZpZGVye3BhZGRpbmc6MCA1cHg7Y29sb3I6I2NjY30uYnJlYWRjcnVtYj4uYWN0aXZle2NvbG9yOiM5OTl9LnBhZ2luYXRpb257bWFyZ2luOjIwcHggMH0ucGFnaW5hdGlvbiB1bHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5wYWdpbmF0aW9uIHVsPmxpe2Rpc3BsYXk6aW5saW5lfS5wYWdpbmF0aW9uIHVsPmxpPmEsLnBhZ2luYXRpb24gdWw+bGk+c3BhbntmbG9hdDpsZWZ0O3BhZGRpbmc6NHB4IDEycHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBhZ2luYXRpb24gdWw+bGk+YTpob3ZlciwucGFnaW5hdGlvbiB1bD5saT5hOmZvY3VzLC5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlvbiB1bD4uYWN0aXZlPnNwYW57YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlvbiB1bD4uYWN0aXZlPnNwYW57Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0ucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+c3BhbiwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YSwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YTpob3ZlciwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YTpmb2N1c3tjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnBhZ2luYXRpb24gdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbiB1bD5saTpmaXJzdC1jaGlsZD5zcGFue2JvcmRlci1sZWZ0LXdpZHRoOjFweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0ucGFnaW5hdGlvbiB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24gdWw+bGk6bGFzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS5wYWdpbmF0aW9uLWNlbnRlcmVke3RleHQtYWxpZ246Y2VudGVyfS5wYWdpbmF0aW9uLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saT5zcGFue3BhZGRpbmc6MTFweCAxOXB4O2ZvbnQtc2l6ZToxNy41cHh9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpmaXJzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NnB4fS5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpsYXN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo2cHh9LnBhZ2luYXRpb24tbWluaSB1bD5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbWluaSB1bD5saTpmaXJzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZpcnN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDozcHh9LnBhZ2luYXRpb24tbWluaSB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tc21hbGwgdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6bGFzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweH0ucGFnaW5hdGlvbi1zbWFsbCB1bD5saT5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpPnNwYW57cGFkZGluZzoycHggMTBweDtmb250LXNpemU6MTEuOXB4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk+YSwucGFnaW5hdGlvbi1taW5pIHVsPmxpPnNwYW57cGFkZGluZzowIDZweDtmb250LXNpemU6MTAuNXB4fS5wYWdlcnttYXJnaW46MjBweCAwO3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS5wYWdlcjpiZWZvcmUsLnBhZ2VyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5wYWdlcjphZnRlcntjbGVhcjpib3RofS5wYWdlciBsaXtkaXNwbGF5OmlubGluZX0ucGFnZXIgbGk+YSwucGFnZXIgbGk+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweCAxNHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5wYWdlciBsaT5hOmhvdmVyLC5wYWdlciBsaT5hOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0ucGFnZXIgLm5leHQ+YSwucGFnZXIgLm5leHQ+c3BhbntmbG9hdDpyaWdodH0ucGFnZXIgLnByZXZpb3VzPmEsLnBhZ2VyIC5wcmV2aW91cz5zcGFue2Zsb2F0OmxlZnR9LnBhZ2VyIC5kaXNhYmxlZD5hLC5wYWdlciAuZGlzYWJsZWQ+YTpob3ZlciwucGFnZXIgLmRpc2FibGVkPmE6Zm9jdXMsLnBhZ2VyIC5kaXNhYmxlZD5zcGFue2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwNDA7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tb2RhbC1iYWNrZHJvcC5mYWRle29wYWNpdHk6MH0ubW9kYWwtYmFja2Ryb3AsLm1vZGFsLWJhY2tkcm9wLmZhZGUuaW57b3BhY2l0eTouODtmaWx0ZXI6YWxwaGEob3BhY2l0eT04MCl9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDoxMCU7bGVmdDo1MCU7ei1pbmRleDoxMDUwO3dpZHRoOjU2MHB4O21hcmdpbi1sZWZ0Oi0yODBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjMpOypib3JkZXI6MXB4IHNvbGlkICM5OTk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4O291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTstbW96LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTtib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5tb2RhbC5mYWRle3RvcDotMjUlOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0fS5tb2RhbC5mYWRlLmlue3RvcDoxMCV9Lm1vZGFsLWhlYWRlcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWV9Lm1vZGFsLWhlYWRlciAuY2xvc2V7bWFyZ2luLXRvcDoycHh9Lm1vZGFsLWhlYWRlciBoM3ttYXJnaW46MDtsaW5lLWhlaWdodDozMHB4fS5tb2RhbC1ib2R5e3Bvc2l0aW9uOnJlbGF0aXZlO21heC1oZWlnaHQ6NDAwcHg7cGFkZGluZzoxNXB4O292ZXJmbG93LXk6YXV0b30ubW9kYWwtZm9ybXttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjE0cHggMTVweCAxNXB4O21hcmdpbi1ib3R0b206MDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmY7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZn0ubW9kYWwtZm9vdGVyOmJlZm9yZSwubW9kYWwtZm9vdGVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5tb2RhbC1mb290ZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubW9kYWwtZm9vdGVyIC5idG4rLmJ0bnttYXJnaW4tYm90dG9tOjA7bWFyZ2luLWxlZnQ6NXB4fS5tb2RhbC1mb290ZXIgLmJ0bi1ncm91cCAuYnRuKy5idG57bWFyZ2luLWxlZnQ6LTFweH0ubW9kYWwtZm9vdGVyIC5idG4tYmxvY2srLmJ0bi1ibG9ja3ttYXJnaW4tbGVmdDowfS50b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAzMDtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjEuNDtvcGFjaXR5OjA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7dmlzaWJpbGl0eTp2aXNpYmxlfS50b29sdGlwLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS50b29sdGlwLnRvcHtwYWRkaW5nOjVweCAwO21hcmdpbi10b3A6LTNweH0udG9vbHRpcC5yaWdodHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjNweH0udG9vbHRpcC5ib3R0b217cGFkZGluZzo1cHggMDttYXJnaW4tdG9wOjNweH0udG9vbHRpcC5sZWZ0e3BhZGRpbmc6MCA1cHg7bWFyZ2luLWxlZnQ6LTNweH0udG9vbHRpcC1pbm5lcnttYXgtd2lkdGg6MjAwcHg7cGFkZGluZzo4cHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS50b29sdGlwLWFycm93e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggMH0udG9vbHRpcC5yaWdodCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO2xlZnQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggNXB4IDB9LnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotNXB4O2JvcmRlci1sZWZ0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHh9LnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93e3RvcDowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwO2JvcmRlci13aWR0aDowIDVweCA1cHh9LnBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTAxMDtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjQwMHB4O3BhZGRpbmc6MXB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy1tb3otYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTtib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmc7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5wb3BvdmVyLnRvcHttYXJnaW4tdG9wOi0xMHB4fS5wb3BvdmVyLnJpZ2h0e21hcmdpbi1sZWZ0OjEwcHh9LnBvcG92ZXIuYm90dG9te21hcmdpbi10b3A6MTBweH0ucG9wb3Zlci5sZWZ0e21hcmdpbi1sZWZ0Oi0xMHB4fS5wb3BvdmVyLXRpdGxle3BhZGRpbmc6OHB4IDE0cHg7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE4cHg7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y3O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCA1cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo1cHggNXB4IDAgMDtib3JkZXItcmFkaXVzOjVweCA1cHggMCAwfS5wb3BvdmVyLXRpdGxlOmVtcHR5e2Rpc3BsYXk6bm9uZX0ucG9wb3Zlci1jb250ZW50e3BhZGRpbmc6OXB4IDE0cHh9LnBvcG92ZXIgLmFycm93LC5wb3BvdmVyIC5hcnJvdzphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0ucG9wb3ZlciAuYXJyb3d7Ym9yZGVyLXdpZHRoOjExcHh9LnBvcG92ZXIgLmFycm93OmFmdGVye2JvcmRlci13aWR0aDoxMHB4O2NvbnRlbnQ6IiJ9LnBvcG92ZXIudG9wIC5hcnJvd3tib3R0b206LTExcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTExcHg7Ym9yZGVyLXRvcC1jb2xvcjojOTk5O2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIudG9wIC5hcnJvdzphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi0xMHB4O2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93e3RvcDo1MCU7bGVmdDotMTFweDttYXJnaW4tdG9wOi0xMXB4O2JvcmRlci1yaWdodC1jb2xvcjojOTk5O2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93OmFmdGVye2JvdHRvbTotMTBweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3JkZXItbGVmdC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3d7dG9wOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci1ib3R0b20tY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3c6YWZ0ZXJ7dG9wOjFweDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93e3RvcDo1MCU7cmlnaHQ6LTExcHg7bWFyZ2luLXRvcDotMTFweDtib3JkZXItbGVmdC1jb2xvcjojOTk5O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9LnBvcG92ZXIubGVmdCAuYXJyb3c6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotMTBweDtib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci1yaWdodC13aWR0aDowfS50aHVtYm5haWxze21hcmdpbi1sZWZ0Oi0yMHB4O2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS50aHVtYm5haWxzOmJlZm9yZSwudGh1bWJuYWlsczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGh1bWJuYWlsczphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDoyMHB4fS50aHVtYm5haWx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoyMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1vLXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9YS50aHVtYm5haWw6aG92ZXIsYS50aHVtYm5haWw6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwOGM7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpfS50aHVtYm5haWw+aW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30udGh1bWJuYWlsIC5jYXB0aW9ue3BhZGRpbmc6OXB4O2NvbG9yOiM1NTV9Lm1lZGlhLC5tZWRpYS1ib2R5e292ZXJmbG93OmhpZGRlbjsqb3ZlcmZsb3c6dmlzaWJsZTt6b29tOjF9Lm1lZGlhLC5tZWRpYSAubWVkaWF7bWFyZ2luLXRvcDoxNXB4fS5tZWRpYTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1lZGlhLW9iamVjdHtkaXNwbGF5OmJsb2NrfS5tZWRpYS1oZWFkaW5ne21hcmdpbjowIDAgNXB4fS5tZWRpYT4ucHVsbC1sZWZ0e21hcmdpbi1yaWdodDoxMHB4fS5tZWRpYT4ucHVsbC1yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5tZWRpYS1saXN0e21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5sYWJlbCwuYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZToxMS44NDRweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjE0cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiM5OTl9LmxhYmVsey13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uYmFkZ2V7cGFkZGluZy1yaWdodDo5cHg7cGFkZGluZy1sZWZ0OjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6OXB4Oy1tb3otYm9yZGVyLXJhZGl1czo5cHg7Ym9yZGVyLXJhZGl1czo5cHh9LmxhYmVsOmVtcHR5LC5iYWRnZTplbXB0eXtkaXNwbGF5Om5vbmV9YS5sYWJlbDpob3ZlcixhLmxhYmVsOmZvY3VzLGEuYmFkZ2U6aG92ZXIsYS5iYWRnZTpmb2N1c3tjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5sYWJlbC1pbXBvcnRhbnQsLmJhZGdlLWltcG9ydGFudHtiYWNrZ3JvdW5kLWNvbG9yOiNiOTRhNDh9LmxhYmVsLWltcG9ydGFudFtocmVmXSwuYmFkZ2UtaW1wb3J0YW50W2hyZWZde2JhY2tncm91bmQtY29sb3I6Izk1M2IzOX0ubGFiZWwtd2FybmluZywuYmFkZ2Utd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDZ9LmxhYmVsLXdhcm5pbmdbaHJlZl0sLmJhZGdlLXdhcm5pbmdbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojYzY3NjA1fS5sYWJlbC1zdWNjZXNzLC5iYWRnZS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzQ2ODg0N30ubGFiZWwtc3VjY2Vzc1tocmVmXSwuYmFkZ2Utc3VjY2Vzc1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMzNTY2MzV9LmxhYmVsLWluZm8sLmJhZGdlLWluZm97YmFja2dyb3VuZC1jb2xvcjojM2E4N2FkfS5sYWJlbC1pbmZvW2hyZWZdLC5iYWRnZS1pbmZvW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzJkNjk4N30ubGFiZWwtaW52ZXJzZSwuYmFkZ2UtaW52ZXJzZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9LmxhYmVsLWludmVyc2VbaHJlZl0sLmJhZGdlLWludmVyc2VbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojMWExYTFhfS5idG4gLmxhYmVsLC5idG4gLmJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMXB4fS5idG4tbWluaSAubGFiZWwsLmJ0bi1taW5pIC5iYWRnZXt0b3A6MH1ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1tb3ota2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtbXMta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtby1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH19QGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX0ucHJvZ3Jlc3N7aGVpZ2h0OjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjc7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZjVmNWY1KSx0bygjZjlmOWY5KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmNWY1ZjUnLGVuZENvbG9yc3RyPScjZmZmOWY5ZjknLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSl9LnByb2dyZXNzIC5iYXJ7ZmxvYXQ6bGVmdDt3aWR0aDowO2hlaWdodDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTkwZDI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMTQ5YmRmKSx0bygjMDQ4MGJlKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE0OWJkZicsZW5kQ29sb3JzdHI9JyNmZjA0ODBiZScsR3JhZGllbnRUeXBlPTApOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlOy1tb3otdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstby10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnByb2dyZXNzIC5iYXIrLmJhcnstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSl9LnByb2dyZXNzLXN0cmlwZWQgLmJhcntiYWNrZ3JvdW5kLWNvbG9yOiMxNDliZGY7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7LXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4Oy1tb3otYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDstby1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4O2JhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHh9LnByb2dyZXNzLmFjdGl2ZSAuYmFyey13ZWJraXQtYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstbW96LWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW1zLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW8tYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlfS5wcm9ncmVzcy1kYW5nZXIgLmJhciwucHJvZ3Jlc3MgLmJhci1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZGQ1MTRjO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2VlNWY1YiksdG8oI2M0M2MzNSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlZTVmNWInLGVuZENvbG9yc3RyPScjZmZjNDNjMzUnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtZGFuZ2VyLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZTVmNWI7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLXN1Y2Nlc3MgLmJhciwucHJvZ3Jlc3MgLmJhci1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzVlYjk1ZTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM2MmM0NjIpLHRvKCM1N2E5NTcpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJyxlbmRDb2xvcnN0cj0nI2ZmNTdhOTU3JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLXN1Y2Nlc3MucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MmM0NjI7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLWluZm8gLmJhciwucHJvZ3Jlc3MgLmJhci1pbmZve2JhY2tncm91bmQtY29sb3I6IzRiYjFjZjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUpLHRvKCMzMzliYjkpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJyxlbmRDb2xvcnN0cj0nI2ZmMzM5YmI5JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLWluZm8ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM1YmMwZGU7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLXdhcm5pbmcgLmJhciwucHJvZ3Jlc3MgLmJhci13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmYmI0NTApLHRvKCNmODk0MDYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLXdhcm5pbmcucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYmI0NTA7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LmFjY29yZGlvbnttYXJnaW4tYm90dG9tOjIwcHh9LmFjY29yZGlvbi1ncm91cHttYXJnaW4tYm90dG9tOjJweDtib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5hY2NvcmRpb24taGVhZGluZ3tib3JkZXItYm90dG9tOjB9LmFjY29yZGlvbi1oZWFkaW5nIC5hY2NvcmRpb24tdG9nZ2xle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo4cHggMTVweH0uYWNjb3JkaW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uYWNjb3JkaW9uLWlubmVye3BhZGRpbmc6OXB4IDE1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0uY2Fyb3VzZWx7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToyMHB4O2xpbmUtaGVpZ2h0OjF9LmNhcm91c2VsLWlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5jYXJvdXNlbC1pbm5lcj4uaXRlbXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7LXdlYmtpdC10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0Oy1tb3otdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDstby10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0O3RyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnR9LmNhcm91c2VsLWlubmVyPi5pdGVtPmltZywuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+YT5pbWd7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLC5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7ZGlzcGxheTpibG9ja30uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZXtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5uZXh0LC5jYXJvdXNlbC1pbm5lcj4ucHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dHtsZWZ0OjEwMCV9LmNhcm91c2VsLWlubmVyPi5wcmV2e2xlZnQ6LTEwMCV9LmNhcm91c2VsLWlubmVyPi5uZXh0LmxlZnQsLmNhcm91c2VsLWlubmVyPi5wcmV2LnJpZ2h0e2xlZnQ6MH0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5sZWZ0e2xlZnQ6LTEwMCV9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUucmlnaHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1jb250cm9se3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0MCU7bGVmdDoxNXB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDotMjBweDtmb250LXNpemU6NjBweDtmb250LXdlaWdodDoxMDA7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6IzIyMjtib3JkZXI6M3B4IHNvbGlkICNmZmY7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjIzcHg7LW1vei1ib3JkZXItcmFkaXVzOjIzcHg7Ym9yZGVyLXJhZGl1czoyM3B4O29wYWNpdHk6LjU7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NTApfS5jYXJvdXNlbC1jb250cm9sLnJpZ2h0e3JpZ2h0OjE1cHg7bGVmdDphdXRvfS5jYXJvdXNlbC1jb250cm9sOmhvdmVyLC5jYXJvdXNlbC1jb250cm9sOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3BhY2l0eTouOTtmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCl9LmNhcm91c2VsLWluZGljYXRvcnN7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MTVweDt6LWluZGV4OjU7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lfS5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpe2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O21hcmdpbi1sZWZ0OjVweDt0ZXh0LWluZGVudDotOTk5cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjI1KTtib3JkZXItcmFkaXVzOjVweH0uY2Fyb3VzZWwtaW5kaWNhdG9ycyAuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojMzMzO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjc1KX0uY2Fyb3VzZWwtY2FwdGlvbiBoNCwuY2Fyb3VzZWwtY2FwdGlvbiBwe2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbiBoNHttYXJnaW46MCAwIDVweH0uY2Fyb3VzZWwtY2FwdGlvbiBwe21hcmdpbi1ib3R0b206MH0uaGVyby11bml0e3BhZGRpbmc6NjBweDttYXJnaW4tYm90dG9tOjMwcHg7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5oZXJvLXVuaXQgaDF7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZTo2MHB4O2xpbmUtaGVpZ2h0OjE7bGV0dGVyLXNwYWNpbmc6LTFweDtjb2xvcjppbmhlcml0fS5oZXJvLXVuaXQgbGl7bGluZS1oZWlnaHQ6MzBweH0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmhpZGV7ZGlzcGxheTpub25lfS5zaG93e2Rpc3BsYXk6YmxvY2t9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0uYWZmaXh7cG9zaXRpb246Zml4ZWR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2RlZmF1bHQuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2UzZTMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcwpAQCAtMCwwICsxLDMzMCBAQAorLyogU3R5bGUgdGhlIFlvY3RvIFByb2plY3QgbG9nbyAqLworLmxvZ28gaW1nIHsgaGVpZ2h0OiAzMHB4OyB3aWR0aDogYXV0byAhaW1wb3J0YW50OyB9CisubG9nbyB7IHBhZGRpbmctdG9wOiA0cHggIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206MHB4ICFpbXBvcnRhbnQ7IH0KKworLyogc3R5bGUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKy5icmFuZCA+IGEgeyBjb2xvcjogIzc3NzsgfQorLmJyYW5kID4gYTpob3ZlciB7IGNvbG9yOiAjOTk5OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKy5pY29uLWluZm8tc2lnbiB7IGNvbG9yOiAjNzc3OyBmb250LXNpemU6IDE2cHg7IG1hcmdpbi1sZWZ0OiA1cHg7fQorLmljb24taW5mby1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQorCisvKiBTdHlsZSB0aGUgYnJlYWRjcnVtYiAqLworLmJyZWFkY3J1bWIgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CisuYnJlYWRjcnVtYiBsaTpmaXJzdC1jaGlsZCB7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IH0KKworLyogU3R5bGVzIGZvciB0aGUgaGVscCBpbmZvcm1hdGlvbiAqLworLmdldC1oZWxwIHsgY29sb3I6ICNDQ0NDQ0M7IH0KKy5nZXQtaGVscDpob3ZlciwgLmljb24tcGx1cy1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQorLmdldC1oZWxwLWJsdWUgeyBjb2xvcjogIzNBODdBRDsgfQorLmdldC1oZWxwLWJsdWU6aG92ZXIgeyBjb2xvcjogIzAwNTU4MDsgY3Vyc29yOiBwb2ludGVyOyB9CisuZ2V0LWhlbHAteWVsbG93IHsgY29sb3I6ICNDMDk4NTM7IH0KKy5nZXQtaGVscC15ZWxsb3c6aG92ZXIgeyBjb2xvcjogI0IzODk0MjsgY3Vyc29yOiBwb2ludGVyOyB9CisuZ2V0LWhlbHAtcmVkIHsgY29sb3I6ICNCOTRBNDg7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZy1sZWZ0OiAycHg7IH0KKy5nZXQtaGVscC1yZWQ6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgY3Vyc29yOiBwb2ludGVyOyB9CisuYnVpbGQtZm9ybT5pOmZpcnN0LW9mLXR5cGUgeyBtYXJnaW4tbGVmdDogNXB4OyB9CisubWFudWFsIHsgbWFyZ2luOiAxMXB4IDE1cHggMCAxMXB4O30KKy5oZWFkaW5nLWhlbHAgeyBmb250LXNpemU6IDE0cHg7IH0KKworLyogU3R5bGVzIGZvciB0aGUgZXh0ZXJuYWwgbGluayAqLworLmdldC1pbmZvIHsgY29sb3I6ICMwMDg4Q0M7IH0KKy5nZXQtaW5mbzpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorCisvKiBTdHlsZXMgZm9yIGNvZGUgYW5kIHByZSB0YWdzICovCitjb2RlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICMzMzMzMzM7IH0KK2RkIGNvZGUsIC5hbGVydCBjb2RlIHsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgfQorLmFsZXJ0LXdhcm5pbmcgY29kZSwgLmFsZXJ0LXdhcm5pbmcgcHJlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICNDMDk4NTM7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmFsZXJ0LWVycm9yIGNvZGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgbWFyZ2luLWJvdHRvbTowcHg7IH0KKy5hbGVydC1lcnJvciBwcmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgd29yZC1icmVhazogbm9ybWFsOyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5hbGVydC13YXJuaW5nIHByZSB7IHdvcmQtYnJlYWs6IG5vcm1hbDsgfQorLmFsZXJ0LWluZm8gYSB7IGZvbnQtd2VpZ2h0OiAzMDA7IH0KKy5hbGVydC1pbmZvIGNvZGUgeyBjb2xvcjogIzNBODdBRDsgfQorLnRvb2x0aXAgY29kZSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgYm9yZGVyOiBub25lOyBmb250LXNpemU6IDFlbTsgfQorCisvKiBTdHlsZSBmb3IgZGVmaW5pdGlvbiBsaXN0cyAqLworZGQgdWwgeyBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IG1hcmdpbjogMHB4OyB9CitkdCwgZGQgIHtsaW5lLWhlaWdodDogMjVweDsgfQorZGQgbGkgeyBsaW5lLWhlaWdodDogMjVweDsgfQorLml0ZW0taW5mbyBkZCB7IGxpbmUtaGVpZ2h0OiAyMHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9CisKKy8qIFN0eWxlIHRoZSBmaWx0ZXIgbW9kYWwgZGlhbG9ncyAqLworLm1vZGFsIHsgd2lkdGg6IDgwMHB4OyBtYXJnaW4tbGVmdDogLTQwMHB4OyB9CisubW9kYWwtZm9vdGVyIC5idG4geyBmbG9hdDogbGVmdDsgfQorCisvKiBIb3ZlciBzdHlsZSBmb3IgdGhlIGNsZWFyIHNlYXJjaCBpY29uICovCisuaWNvbi1yZW1vdmUtc2lnbjpob3ZlciB7IGNvbG9yOiAjOTk5OTk5OyBjdXJzb3I6IHBvaW50ZXI7IH0KKworLyogU29tZSBleHRyYSBzcGFjZSBiZWZvcmUgaGVhZGluZ3Mgd2hlbiBuZWVkZWQgKi8KKy5kZXRhaWxzIHsgbWFyZ2luLXRvcDogMzBweDsgfQorLmFpciB7IG1hcmdpbi10b3A6IDMwcHg7IH0KKworLyogUmVxdWlyZWQgY2xhc3NlcyBmb3IgdGhlIGhpZ2hsaWdodCBiZWhhdmlvdXIgaW4gdGFibGVzICovCisuaGlnaGxpZ2h0IHsgLXdlYmtpdC1hbmltYXRpb246IHRhcmdldC1mYWRlIDEwcyAxOyAtbW96LWFuaW1hdGlvbjogdGFyZ2V0LWZhZGUgMTBzIDE7IGFuaW1hdGlvbjogdGFyZ2V0LWZhZGUgMTBzIDE7IH0KK0Atd2Via2l0LWtleWZyYW1lcyB0YXJnZXQtZmFkZSB7IDAlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAyNSUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfSB9CitALW1vei1rZXlmcmFtZXMgdGFyZ2V0LWZhZGUgeyAwJSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMjUlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAxMDAlIHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0gfQorQGtleWZyYW1lcyB0YXJnZXQtZmFkZSB7IDAlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAyNSUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfSB9CisKKy8qIFRoaXMgbWFrZXMgdG9vbHRpcHMgd29yayBpbnNpZGUgbW9kYWwgZGlhbG9ncyAqLworLnRvb2x0aXAgeyB6LWluZGV4OiAyMDAwICFpbXBvcnRhbnQ7IH0KKworLyogT3ZlcnJpZGUgZGVmYXVsdCBUd2l0dGVyIEJvb3N0cmFwIHN0eWxlcyBmb3IgYW5jaG9yIHRhZ3MgaW5zaWRlIHRhYmxlcyAqLwordGQgYSwgdGQgYSA+IGNvZGUgeyBjb2xvcjogIzMzMzMzMzsgfQordGQgY29kZSB7IHdoaXRlLXNwYWNlOiBub3JtYWw7IH0KK3RkIGE6aG92ZXIsIHRkIGEgPiBjb2RlOmhvdmVyIHsgY29sb3I6ICMwMDAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CisKKy8qIE92ZXJyaWRlIGRlZmF1bHQgVHdpdHRlciBCb290c3RyYXAgc3R5bGVzIGZvciB0ci5lcnJvciAqLworLnRhYmxlIHRib2R5IHRyLmVycm9yID4gdGQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfSAvKiBvdmVycmlkZSBkZWZhdWx0IEJvb3RzdHJhcCBiZWhhdmlvdXIgKi8KKy50YWJsZS1ob3ZlciB0Ym9keSB0ci5lcnJvcjpob3ZlciA+IHRkIHsgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTt9IC8qIG92ZXJyaWRlIGRlZmF1bHQgQm9vdHN0cmFwIGJlaGF2aW91ciAqLworCisvKiBSaWdodCBqdXN0aWZ5IEJvb3RzdHJhcCB0YWJsZSBjb2x1bW5zIGZvciBzaXplIGZpZWxkcyAqLworLnRhYmxlIC5zaXplY29sIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKworLyogU2V0IGVycm9yLCB3YXJuaW5nLCBzdWNjZXNzIGFuZCBtdXRlZCBzdHlsZXMgKi8KKy5lcnJvciwgLnJlZCwgdGQuZXJyb3IgYSwgdHIuZXJyb3IgYSB7IGNvbG9yOiAjYjk0YTQ4OyB9CithLmVycm9yOmhvdmVyLCBhLmVycm9yOmZvY3VzLCB0ci5lcnJvciBhOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cisud2FybmluZywgLnllbGxvdyB7IGNvbG9yOiAjYzA5ODUzO30KK2Eud2FybmluZyB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CithLndhcm5pbmc6aG92ZXIsIGEud2FybmluZzpmb2N1cyB7IGNvbG9yOiAjQjM4OTQyOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLnN1Y2Nlc3MsIC5ncmVlbiB7IGNvbG9yOiAjNDY4ODQ3O30KKy5zdWNjZXNzOmhvdmVyIHsgY29sb3I6ICMzNDcxMzI7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cit0ZCA+IC5zdWNjZXNzOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKy5tdXRlZCBhIHsgY29sb3I6Izk5OTk5OTsgfQorLm11dGVkIGE6aG92ZXIgeyBjb2xvcjojOTk5OTk5OyB9CisKKy8qIFNvcnRpbmcgZnVuY3Rpb25hbGl0eSBzdHlsZXMgZm9yIHRhYmxlIGhlYWRpbmdzICovCisuc29ydGVkIHsgY29sb3I6ICMzMzMzMzM7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Cisuc29ydGVkOmhvdmVyIHsgY29sb3I6ICMwMDAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cit0aCA+IGEsIHRoID4gc3BhbiB7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0KKworLyogRm9yY2UgbG9uZyBzdHJpbmdzIGxpa2UgY29tbWl0IGhhc2hlcyB0byB3cmFwICovCisuaXNjb21taXQgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd29yZC13cmFwOiBicmVhay13b3JkO30KKworLyogTWFrZSB0aGUgcG9wb3ZlcnMgc2Nyb2xsYWJsZSBpZiB0aGV5IGFyZSB0b28gbG9uZyAqLworLnBvcG92ZXItY29udGVudCB7IG1heC1oZWlnaHQ6IDMwZW07IG92ZXJmbG93LXk6IHNjcm9sbDsgfQorCisvKiBTdHlsZXMgZm9yIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRhYmxlLiBXZSdsbCBwcm9iYWJseSB3b24ndCB1c2UgdGhvc2UgaW4gcHJvZHVjdGlvbiAqLworLm9uZSB7IHBhZGRpbmctbGVmdDogMThweCAhaW1wb3J0YW50OyB9CisudHdvIHsgcGFkZGluZy1sZWZ0OiAzNnB4ICFpbXBvcnRhbnQ7IH0KKy50aHJlZSB7IHBhZGRpbmctbGVmdDogNTRweCAhaW1wb3J0YW50OyB9CisuY29udGVudC1kaXJlY3RvcnkgYSB7IGNvbG9yOiAjMDA4OENDOyB9CisuY29udGVudC1kaXJlY3RvcnkgYTpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLnN5bWxpbmsgeyBjb2xvcjogI0NDQ0NDQzsgfQorCisvKiBTdHlsZXMgZm9yIHRoZSBuYXZiYXIgYWN0aW9ucyAqLworLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAgeyBtYXJnaW4tcmlnaHQ6IDEwcHg7IH0KKy5uYXZiYXItaW5uZXIgPiAuYnRuLWdyb3VwIHsgbWFyZ2luLXRvcDogNnB4OyB9CisKKy8qIFN0eWxlcyBmb3IgdGhlIHBhcmVudCBpdGVtIGluIHRoZSBsZWZ0IG5hdmlnYXRpb24gKi8KKworLm5hdiA+IGxpID4gYS5uYXYtcGFyZW50IHsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDogMjVweDsgIH0KKworLyogT3RoZXIgc3R5bGVzICovCisuZHJvcGRvd24tbWVudSB7IHBhZGRpbmc6IDEwcHg7IH0KK3NlbGVjdCB7IHdpZHRoOiBhdXRvOyB9CisucGFnZS1oZWFkZXIgeyBjb2xvcjogIzVBNUE1QTsgfQorLnRvcC1haXIgeyBtYXJnaW4tdG9wOiA0MHB4O30KKy5wcm9ncmVzcyB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmxlYWQgLmJhZGdlIHsgZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogbm9ybWFsOyBib3JkZXItcmFkaXVzOiAxNXB4OyBwYWRkaW5nOiA5cHg7IH0KKy5sZWFkIG9sLCAubGVhZCB1bCB7IHBhZGRpbmc6IDEwcHggMCAwIDIwcHg7IH0KKy5sZWFkIG9sID4gbGksIC5sZWFkIHVsID4gbGkgeworICAgIGxpbmUtaGVpZ2h0OiAzNXB4OworfQorLndlbGwgPiAubGVhZCwgLmFsZXJ0IC5sZWFkIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Cisud2VsbC10cmFuc3BhcmVudCB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9Cisubm8tcmVzdWx0cyB7IG1hcmdpbjogMTBweCAwOyB9CisudGFzay1uYW1lIHsgbWFyZ2luLWxlZnQ6IDdweDsgfQorLmljb24taGFuZC1yaWdodCB7Y29sb3I6ICNDQ0NDQ0M7IH0KKy5oZWxwLWlubGluZSB7IG1hcmdpbjogNXB4OyB9CisuZGFzaGJvYXJkLXNlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorCisvKiBzdHlsZXMgZm9yIGxhbmRpbmcgcGFnZSAtIGFuYWx5c2lzIG1vZGUgKi8KKy5oZXJvLXVuaXQgeyBtYXJnaW46IDIwcHggMCAzMHB4OyB9CisuaGVyby11bml0ID4gLmNsb3NlIHsgZm9udC1zaXplOjQwcHg7IH0KKy5oZXJvLWFjdGlvbnMgeyBtYXJnaW4tdG9wOiAzMHB4OyB9CisKKy8qIHN0eWxlcyBmb3IgbGFuZGluZyBwYWdlIC0gYnVpbGQgbW9kZSAqLworLmhlcm8tdW5pdCBwIHsgbGluZS1oZWlnaHQ6IDI1cHg7IH0KKy5oZXJvLXVuaXQgcCwgLmhlcm8tdW5pdCAuYnRuLWxhcmdlIHsgbWFyZ2luLXRvcDogMTVweDsgfQorLmhlcm8tdW5pdCB1bCB7IG1hcmdpbi10b3A6IDIwcHg7IH0KKy5oZXJvLXVuaXQgbGkgeyBsaW5lLWhlaWdodDogMzBweDsgfQorLmhlcm8tdW5pdCBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOyBtYXJnaW4tdG9wOiAxNXB4OyB9CisKKy8qIG1ha2UgdGFibGVzIENocm9tZS1oYXBweSAobWUsIG5vdCBzbyBtdWNoKSAqLwordGFibGUgeyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0KKworLyogc3R5bGVzIGZvciB0aGUgbmV3IGJ1aWxkIGJ1dHRvbiAqLworLm5ldy1idWlsZCAuYnRuLXByaW1hcnkgeyBwYWRkaW5nOiA0cHggMzBweDsgfQorLm5ldy1idWlsZCAuYWxlcnQgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisubmV3LWJ1aWxkIC5hbGVydCBwIHsgbWFyZ2luLXRvcDogMTBweDsgfQorCisvKiBzdHlsZXMgZm9yIHNob3dpbmcgdGhlIHByb2plY3QgbmFtZSBpbiBidWlsZCBtb2RlICovCisucHJvamVjdC1uYW1lIHsgcGFkZGluZy10b3A6IDA7IH0KKy5wcm9qZWN0LW5hbWUgLmxhYmVsIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogLTE1cHg7IHBhZGRpbmc6IDVweDsgfQorLnByb2plY3QtbmFtZSAubGFiZWwgPiBhIHsgY29sb3I6ICNmZmY7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0KKworLyogUmVtb3ZlIGJvdHRvbSBtYXJnaW4gZm9yIGZvcm1zIGluc2lkZSBtb2RhbCBkaWFsb2dzICovCisjZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0geyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKworLyogQ29uZmlndXJhdGlvbiBzdHlsZXMgKi8KKy5pY29uLXRyYXNoIHsgY29sb3I6ICNCOTRBNDg7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZy1sZWZ0OiA1cHg7IH0KKy5pY29uLXRyYXNoOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CisuaWNvbi1wZW5jaWwsIC5pY29uLWRvd25sb2FkLWFsdCwgLmljb24tcmVmcmVzaCwgLmljb24tc3Rhci1lbXB0eSwgLmljb24tc3RhciAgeyBmb250LXNpemU6IDE2cHg7IGNvbG9yOiAjMDA4OENDOyBwYWRkaW5nLWxlZnQ6IDJweDsgfQorLmljb24tcGVuY2lsOmhvdmVyLCAuaWNvbi1kb3dubG9hZC1hbHQ6aG92ZXIsIC5pY29uLXJlZnJlc2g6aG92ZXIsIC5pY29uLXN0YXItZW1wdHk6aG92ZXIsIC5pY29uLXN0YXI6aG92ZXIsIC5pY29uLXRhc2tzOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CisuaWNvbi1zaGFyZSB7IHBhZGRpbmctbGVmdDogMnB4OyB9CisuYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrcyB7IGNvbG9yOiAjNDY4ODQ3OyB9CisuYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrczpob3ZlciB7IGNvbG9yOiAjMzQ3MTMyOyB9CisuYWxlcnQtZXJyb3IgLmljb24tcmVmcmVzaCwgLmFsZXJ0LWVycm9yIC5pY29uLXRhc2tzIHsgY29sb3I6ICNiOTRhNDg7IH0KKy5hbGVydC1lcnJvciAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtZXJyb3IgLmljb24tdGFza3M6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgfQorLmNvbmZpZ3VyYXRpb24tbGlzdCBsaSwgLmNvbmZpZ3VyYXRpb24tbGlzdCBsYWJlbCB7IGxpbmUtaGVpZ2h0OiAzNXB4OyBmb250LXNpemU6IDIxcHg7IGZvbnQtd2VpZ2h0OiAyMDA7IG1hcmdpbi1ib3R0b206IDBweDt9CisuY29uZmlndXJhdGlvbi1saXN0IHsgZm9udC1zaXplOiAxNnB4OyBtYXJnaW4tYm90dG9tOiAxLjVlbTsgfQorLmNvbmZpZ3VyYXRpb24tbGlzdCBpIHsgZm9udC1zaXplOiAxNnB4OyB9CisvKi5jb25maWd1cmF0aW9uLWxheWVycyB7IGhlaWdodDogMTM1cHg7IG92ZXJmbG93OiBzY3JvbGw7IH0qLworLmNvdW50ZXIgeyBmb250LXdlaWdodDogbm9ybWFsOyB9Cisud2VsbC1hbGVydCB7IGJhY2tncm91bmQtY29sb3I6ICNGQ0Y4RTM7IGJvcmRlcjogMXB4IHNvbGlkICNGQkVFRDU7IGJvcmRlci1yYWRpdXM6IDRweDsgfQorLndlbGwtYWxlcnQgPiAubGVhZCB7IGNvbG9yOiAjQzA5ODUzOyBwYWRkaW5nLWJvdHRvbTogLjc1ZW07IH0KKy5jb25maWd1cmF0aW9uLWFsZXJ0IHsgbWFyZ2luLWJvdHRvbTogMHB4OyBwYWRkaW5nOiA4cHggMTRweDsgfQorLmNvbmZpZ3VyYXRpb24tYWxlcnQgcCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLnByb2plY3QtZm9ybSB7IG1hcmdpbi10b3A6IDEwcHg7IH0KKy5hZGQtbGF5ZXJzIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrLCAuYnVpbGQgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sgeyBtYXJnaW4tdG9wOiAwcHg7IH0KK2lucHV0Lmh1Z2UgeyBmb250LXNpemU6IDE3LjVweDsgcGFkZGluZzogMTFweCAxOXB4OyB9CisuYnVpbGQtZm9ybSB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ1aWxkLWZvcm0gLmlucHV0LWFwcGVuZCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ1aWxkLWZvcm0gLmJ0bi1sYXJnZSB7IHBhZGRpbmc6IDExcHggMzVweDsgfQorLmJ1aWxkLWZvcm0gcCB7IGZvbnQtc2l6ZToxNy41cHggO21hcmdpbjoxMnB4IDAgMCAxMHB4O30KKyNsYXllci1jb250YWluZXIgZm9ybSwgI3RhcmdldC1jb250YWluZXIgZm9ybSB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ0bi1wcmltYXJ5IC5pY29uLXF1ZXN0aW9uLXNpZ24sIC5idG4tZGFuZ2VyIC5pY29uLXF1ZXN0aW9uLXNpZ24geyBjb2xvcjogI2ZmZjsgfQorLmJ0bi1wcmltYXJ5IC5pY29uLXF1ZXN0aW9uLXNpZ246aG92ZXIsIC5idG4tZGFuZ2VyIC5pY29uLXF1ZXN0aW9uLXNpZ246aG92ZXIgeyBjb2xvcjogIzk5OTsgfQorYSBjb2RlIHsgY29sb3I6ICMwMDg4Q0M7IH0KK2EgY29kZTpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyB9CisubG9jYWxjb25mIHsgZm9udC1zaXplOiAxNy41cHg7IG1hcmdpbi10b3A6IDQwcHg7IH0KKy5sb2NhbGNvbmYgY29kZSB7IGZvbnQtc2l6ZTogMTcuNXB4OyB9CisjYWRkLWxheWVyLWRlcGVuZGVuY2llcyB7ICBtYXJnaW4tdG9wOiA1cHg7IH0KKy5saW5rLWFjdGlvbiB7IGZvbnQtc2l6ZTogMTcuNXB4OyBtYXJnaW4tdG9wOiA0MHB4OyB9CisubGluay1hY3Rpb24gY29kZSB7IGZvbnQtc2l6ZTogMTcuNXB4OyB9CisuYXJ0aWZhY3QgeyB3aWR0aDogOWVtOyB9CisuY29udHJvbC1ncm91cCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorI3Byb2plY3QtZGV0YWlscyBmb3JtIHsgbWFyZ2luOiAwcHg7IH0KK2RkIGZvcm0geyBtYXJnaW46IDEwcHggMCAwIDA7IH0KK2RsIHRleHRhcmVhIHsgcmVzaXplOiB2ZXJ0aWNhbDsgfQorLm5hdmJhci1maXhlZC10b3AgeyAgei1pbmRleDogMTsgfQorLnBvcG92ZXIgeyB6LWluZGV4OiAyOyB9CisuYnRuLWRhbmdlciAuaWNvbi10cmFzaCB7IGNvbG9yOiAjZmZmOyB9CisuYmJhcHBlbmRzIHsgbGlzdC1zdHlsZS10eXBlOiBub25lOyBtYXJnaW4tbGVmdDogMDsgfQorLmJiYXBwZW5kcyBsaSB7IGxpbmUtaGVpZ2h0OiAyNXB4OyB9CisuY29uZmlndXJhdGlvbi1saXN0IGlucHV0W3R5cGU9ImNoZWNrYm94Il0geyBtYXJnaW4tdG9wOjEzcHg7bWFyZ2luLXJpZ2h0OjEwcHg7IH0KKy5hbGVydCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgbWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tcmlnaHQ6IDNweDsgfQorLmFsZXJ0IG9sIHsgcGFkZGluZzogMTBweCAwcHggMHB4IDIwcHg7IH0KKy5hbGVydCBvbCA+IGxpIHsgbGluZS1oZWlnaHQ6IDM1cHg7IH0KKy5kbC12ZXJ0aWNhbCBmb3JtIHsgbWFyZ2luLXRvcDogMTBweDsgfQorLnNjcm9sbGluZyB7IGJvcmRlcjogMXB4IHNvbGlkICNkZGRkZGQ7IGhlaWdodDogMTU0cHg7IG92ZXJmbG93OiBhdXRvOyBwYWRkaW5nOiA4cHg7IHdpZHRoOiAyNy41JTsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQorLmxlYWQgLmhlbHAtYmxvY2sgeyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAyMHB4OyBmb250LXdlaWdodDogbm9ybWFsOyB9CisuYnV0dG9uLXBsYWNlICAuYnRuIHsgbWFyZ2luOiAwIDAgMjBweCAwOyB9CisudG9vbHRpcC1pbm5lciB7IG1heC13aWR0aDogMjUwcHg7IH0KKy5uZXctYnVpbGQgeyBwYWRkaW5nOiAyMHB4OyB9CisubmV3LWJ1aWxkIGxpIHsgbGluZS1oZWlnaHQ6IDMwcHg7IH0KKy5uZXctYnVpbGQgbGkgLmFsZXJ0IHsgbGluZS1oZWlnaHQ6IDIwcHg7IHdpZHRoOiAyMDBweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfQorLm5ldy1idWlsZCBoNiB7IG1hcmdpbjogMTBweCAwIDAgMDsgY29sb3I6ICM1YTVhNWE7IH0KKy5uZXctYnVpbGQgaDMgeyBtYXJnaW46IDA7IGNvbG9yOiAjNWE1YTVhOyB9CisubmV3LWJ1aWxkIGZvcm0geyBtYXJnaW46IDVweCAwIDA7IH0KKy5uZXctYnVpbGQgLmlucHV0LWFwcGVuZCB7IG1hcmdpbi1ib3R0b206IDA7IH0KKyNidWlsZC1zZWxlY3RlZCB7IG1hcmdpbi10b3A6IDE1cHg7IH0KK2Rpdi5hZGQtZGVwcyB7IG1hcmdpbi10b3A6IDE1cHg7IH0KKy5idG4ubG9nIHsgbWFyZ2luLWxlZnQ6IDIwcHg7IH0KKworCisuYW5pbWF0ZS1yZXBlYXQgeworICBsaXN0LXN0eWxlOm5vbmU7CisgIGJveC1zaXppbmc6Ym9yZGVyLWJveDsKK30KKworLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUsCisuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIsCisuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUgeworICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzOworICB0cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41czsKK30KKworLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSwKKy5hbmltYXRlLXJlcGVhdC5uZy1tb3ZlLAorLmFuaW1hdGUtcmVwZWF0Lm5nLWVudGVyIHsKKyAgb3BhY2l0eTowOworfQorCisuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUsCisuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHsKKyAgb3BhY2l0eToxOworfQorCisudGFiLXBhbmUgdGFibGUgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisKK3RoZWFkIC5kZXNjcmlwdGlvbiwgLmdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IHsgd2lkdGg6IDM2NHB4OyB9Cit0aGVhZCAuYWRkLWRlbC1sYXllcnMgeyB3aWR0aDogMTI0cHg7IH0KKworI2xvYWRpbmctbm90aWZpY2F0aW9uIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB6LWluZGV4OiAxMDE7CisgIHRvcDogMyU7CisgIGxlZnQ6IDQwJTsKKyAgcmlnaHQ6IDQwJTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjYzA5ODUzOworICAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7CisgIGJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7Cit9CisKKyNjaGFuZ2Utbm90aWZpY2F0aW9uIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB6LWluZGV4OiAxMDE7CisgIHRvcDogMyU7CisgIGxlZnQ6IDIwJTsKKyAgcmlnaHQ6IDIwJTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjM2E4N2FkOworICAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7CisgIGJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7Cit9CisKKy8qIENvcGllZCBpbiBmcm9tIG5ld2VyIHZlcnNpb24gb2YgRm9udC1Bd2Vzb21lIDQuMy4wICovCisuZmEtc3BpbiB7CisgIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjsKKyAgYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorLmZhLXB1bHNlIHsKKyAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7CisgIGFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCitALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbiB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICB9CisgIDEwMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICB9Cit9CisKK0BrZXlmcmFtZXMgZmEtc3BpbiB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CisgIH0KKyAgMTAwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICB9Cit9CisvKiBFbmQgY29waWVkIGluIGZyb20gbmV3ZXIgdmVyc2lvbiBvZiBGb250LUF3ZXNvbWUgNC4zLjAgKi8KKworLnRvcC1wYWRkZWQgeworICBwYWRkaW5nLXRvcDogNjBweDsKK30KKworaW5wdXQuaW5wdXQtbGcgeworICBmb250LXNpemU6IDE4cHg7CisgIGhlaWdodDogMjJweDsKKyAgbGluZS1oZWlnaHQ6IDEuMzMzMzM7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhMTVmZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzCkBAIC0wLDAgKzEsMzMgQEAKKy8qIQorICogIEZvbnQgQXdlc29tZSAzLjAuMgorICogIHRoZSBpY29uaWMgZm9udCBkZXNpZ25lZCBmb3IgdXNlIHdpdGggVHdpdHRlciBCb290c3RyYXAKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhlIGZ1bGwgc3VpdGUgb2YgcGljdG9ncmFwaGljIGljb25zLCBleGFtcGxlcywgYW5kIGRvY3VtZW50YXRpb24KKyAqICBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly9mb3J0YXdlc29tZS5naXRodWIuY29tL0ZvbnQtQXdlc29tZS8KKyAqCisgKiAgTGljZW5zZQorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAtIFRoZSBGb250IEF3ZXNvbWUgZm9udCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlIC0gaHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwKKyAqICAtIEZvbnQgQXdlc29tZSBDU1MsIExFU1MsIGFuZCBTQVNTIGZpbGVzIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgLQorICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLmh0bWwKKyAqICAtIFRoZSBGb250IEF3ZXNvbWUgcGljdG9ncmFtcyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZIDMuMCBMaWNlbnNlIC0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLworICogIC0gQXR0cmlidXRpb24gaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGluIEZvbnQgQXdlc29tZSAzLjAsIGJ1dCBtdWNoIGFwcHJlY2lhdGVkOgorICogICAgIkZvbnQgQXdlc29tZSBieSBEYXZlIEdhbmR5IC0gaHR0cDovL2ZvcnRhd2Vzb21lLmdpdGh1Yi5jb20vRm9udC1Bd2Vzb21lIgorCisgKiAgQ29udGFjdAorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBFbWFpbDogZGF2ZUBkYXZlZ2FuZHkuY29tCisgKiAgVHdpdHRlcjogaHR0cDovL3R3aXR0ZXIuY29tL2ZvcnRhd2Vzb19tZQorICogIFdvcms6IExlYWQgUHJvZHVjdCBEZXNpZ25lciBAIGh0dHA6Ly9reXJ1dXMuY29tCisgKi8KKworQGZvbnQtZmFjZXsKKyAgZm9udC1mYW1pbHk6J0ZvbnRBd2Vzb21lJzsKKyAgc3JjOnVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj0zLjAuMScpOworICBzcmM6dXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj0zLjAuMScpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwKKyAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj0zLjAuMScpIGZvcm1hdCgnd29mZicpLAorICB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmP3Y9My4wLjEnKSBmb3JtYXQoJ3RydWV0eXBlJyk7CisgIGZvbnQtd2VpZ2h0Om5vcm1hbDsKKyAgZm9udC1zdHlsZTpub3JtYWwgfQorCitbY2xhc3NePSJpY29uLSJdLFtjbGFzcyo9IiBpY29uLSJde2ZvbnQtZmFtaWx5OkZvbnRBd2Vzb21lO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2Rpc3BsYXk6aW5saW5lO3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7bWFyZ2luLXRvcDowfS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9W2NsYXNzXj0iaWNvbi0iXTpiZWZvcmUsW2NsYXNzKj0iIGljb24tIl06YmVmb3Jle3RleHQtZGVjb3JhdGlvbjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3NwZWFrOm5vbmV9YSBbY2xhc3NePSJpY29uLSJdLGEgW2NsYXNzKj0iIGljb24tIl17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lmljb24tbGFyZ2U6YmVmb3Jle3ZlcnRpY2FsLWFsaWduOi0xMCU7Zm9udC1zaXplOjEuMzMzMzMzMzMzMzMzMzMzM2VtfS5idG4gW2NsYXNzXj0iaWNvbi0iXSwubmF2IFtjbGFzc149Imljb24tIl0sLmJ0biBbY2xhc3MqPSIgaWNvbi0iXSwubmF2IFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6aW5saW5lfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5idG4gW2NsYXNzKj0iIGljb24tIl0uaWNvbi1sYXJnZSwubmF2IFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2V7bGluZS1oZWlnaHQ6LjllbX0uYnRuIFtjbGFzc149Imljb24tIl0uaWNvbi1zcGluLC5uYXYgW2NsYXNzXj0iaWNvbi0iXS5pY29uLXNwaW4sLmJ0biBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLXNwaW4sLm5hdiBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLXNwaW57ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm5hdi10YWJzIFtjbGFzc149Imljb24tIl0sLm5hdi1waWxscyBbY2xhc3NePSJpY29uLSJdLC5uYXYtdGFicyBbY2xhc3MqPSIgaWNvbi0iXSwubmF2LXBpbGxzIFtjbGFzcyo9IiBpY29uLSJdLC5uYXYtdGFicyBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLm5hdi1waWxscyBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLm5hdi10YWJzIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2UsLm5hdi1waWxscyBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdle2xpbmUtaGVpZ2h0Oi45ZW19bGkgW2NsYXNzXj0iaWNvbi0iXSwubmF2IGxpIFtjbGFzc149Imljb24tIl0sbGkgW2NsYXNzKj0iIGljb24tIl0sLm5hdiBsaSBbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxLjI1ZW07dGV4dC1hbGlnbjpjZW50ZXJ9bGkgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgbGkgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLGxpIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2UsLm5hdiBsaSBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdle3dpZHRoOjEuNTYyNWVtfXVsLmljb25ze2xpc3Qtc3R5bGUtdHlwZTpub25lO3RleHQtaW5kZW50Oi0wLjc1ZW19dWwuaWNvbnMgbGkgW2NsYXNzXj0iaWNvbi0iXSx1bC5pY29ucyBsaSBbY2xhc3MqPSIgaWNvbi0iXXt3aWR0aDouNzVlbX0uaWNvbi1tdXRlZHtjb2xvcjojZWVlfS5pY29uLWJvcmRlcntib3JkZXI6c29saWQgMXB4ICNlZWU7cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtOy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uaWNvbi0yeHtmb250LXNpemU6MmVtfS5pY29uLTJ4Lmljb24tYm9yZGVye2JvcmRlci13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5pY29uLTN4e2ZvbnQtc2l6ZTozZW19Lmljb24tM3guaWNvbi1ib3JkZXJ7Ym9yZGVyLXdpZHRoOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHh9Lmljb24tNHh7Zm9udC1zaXplOjRlbX0uaWNvbi00eC5pY29uLWJvcmRlcntib3JkZXItd2lkdGg6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnR9W2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQsW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfVtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodCxbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0e21hcmdpbi1sZWZ0Oi4zZW19LmJ0biBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4gW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0biBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tdG9wOi4xOGVtfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5pY29uLXNwaW4uaWNvbi1sYXJnZSwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLmljb24tc3Bpbi5pY29uLWxhcmdle2xpbmUtaGVpZ2h0Oi44ZW19LmJ0bi5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMnh7bWFyZ2luLXRvcDouMjVlbX0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10b3A6MH0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tdG9wOi4wNWVtfS5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMnh7bWFyZ2luLXJpZ2h0Oi4yZW19LmJ0bi5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4e21hcmdpbi1sZWZ0Oi4yZW19Lmljb24tc3BpbntkaXNwbGF5OmlubGluZS1ibG9jazstbW96LWFuaW1hdGlvbjpzcGluIDJzIGluZmluaXRlIGxpbmVhcjstby1hbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7LXdlYmtpdC1hbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOnNwaW4gMnMgaW5maW5pdGUgbGluZWFyfUAtbW96LWtleWZyYW1lcyBzcGluezAley1tb3otdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAley1tb3otdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1ALXdlYmtpdC1rZXlmcmFtZXMgc3BpbnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC1vLWtleWZyYW1lcyBzcGluezAley1vLXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstby10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fUAtbXMta2V5ZnJhbWVzIHNwaW57MCV7LW1zLXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstbXMtdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1Aa2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpey5pY29uLXNwaW57aGVpZ2h0Oi45ZW19LmJ0biAuaWNvbi1zcGlue2hlaWdodDphdXRvfS5pY29uLXNwaW4uaWNvbi1sYXJnZXtoZWlnaHQ6MS4yNWVtfS5idG4gLmljb24tc3Bpbi5pY29uLWxhcmdle2hlaWdodDouNzVlbX19Lmljb24tZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDAwIn0uaWNvbi1tdXNpYzpiZWZvcmV7Y29udGVudDoiXGYwMDEifS5pY29uLXNlYXJjaDpiZWZvcmV7Y29udGVudDoiXGYwMDIifS5pY29uLWVudmVsb3BlOmJlZm9yZXtjb250ZW50OiJcZjAwMyJ9Lmljb24taGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDA0In0uaWNvbi1zdGFyOmJlZm9yZXtjb250ZW50OiJcZjAwNSJ9Lmljb24tc3Rhci1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwMDYifS5pY29uLXVzZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDA3In0uaWNvbi1maWxtOmJlZm9yZXtjb250ZW50OiJcZjAwOCJ9Lmljb24tdGgtbGFyZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDA5In0uaWNvbi10aDpiZWZvcmV7Y29udGVudDoiXGYwMGEifS5pY29uLXRoLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDBiIn0uaWNvbi1vazpiZWZvcmV7Y29udGVudDoiXGYwMGMifS5pY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDoiXGYwMGQifS5pY29uLXpvb20taW46YmVmb3Jle2NvbnRlbnQ6IlxmMDBlIn0uaWNvbi16b29tLW91dDpiZWZvcmV7Y29udGVudDoiXGYwMTAifS5pY29uLW9mZjpiZWZvcmV7Y29udGVudDoiXGYwMTEifS5pY29uLXNpZ25hbDpiZWZvcmV7Y29udGVudDoiXGYwMTIifS5pY29uLWNvZzpiZWZvcmV7Y29udGVudDoiXGYwMTMifS5pY29uLXRyYXNoOmJlZm9yZXtjb250ZW50OiJcZjAxNCJ9Lmljb24taG9tZTpiZWZvcmV7Y29udGVudDoiXGYwMTUifS5pY29uLWZpbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDE2In0uaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OiJcZjAxNyJ9Lmljb24tcm9hZDpiZWZvcmV7Y29udGVudDoiXGYwMTgifS5pY29uLWRvd25sb2FkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMTkifS5pY29uLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYSJ9Lmljb24tdXBsb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYiJ9Lmljb24taW5ib3g6YmVmb3Jle2NvbnRlbnQ6IlxmMDFjIn0uaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwMWQifS5pY29uLXJlcGVhdDpiZWZvcmV7Y29udGVudDoiXGYwMWUifS5pY29uLXJlZnJlc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMDIxIn0uaWNvbi1saXN0LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMjIifS5pY29uLWxvY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDIzIn0uaWNvbi1mbGFnOmJlZm9yZXtjb250ZW50OiJcZjAyNCJ9Lmljb24taGVhZHBob25lczpiZWZvcmV7Y29udGVudDoiXGYwMjUifS5pY29uLXZvbHVtZS1vZmY6YmVmb3Jle2NvbnRlbnQ6IlxmMDI2In0uaWNvbi12b2x1bWUtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwMjcifS5pY29uLXZvbHVtZS11cDpiZWZvcmV7Y29udGVudDoiXGYwMjgifS5pY29uLXFyY29kZTpiZWZvcmV7Y29udGVudDoiXGYwMjkifS5pY29uLWJhcmNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDJhIn0uaWNvbi10YWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDJiIn0uaWNvbi10YWdzOmJlZm9yZXtjb250ZW50OiJcZjAyYyJ9Lmljb24tYm9vazpiZWZvcmV7Y29udGVudDoiXGYwMmQifS5pY29uLWJvb2ttYXJrOmJlZm9yZXtjb250ZW50OiJcZjAyZSJ9Lmljb24tcHJpbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDJmIn0uaWNvbi1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6IlxmMDMwIn0uaWNvbi1mb250OmJlZm9yZXtjb250ZW50OiJcZjAzMSJ9Lmljb24tYm9sZDpiZWZvcmV7Y29udGVudDoiXGYwMzIifS5pY29uLWl0YWxpYzpiZWZvcmV7Y29udGVudDoiXGYwMzMifS5pY29uLXRleHQtaGVpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzNCJ9Lmljb24tdGV4dC13aWR0aDpiZWZvcmV7Y29udGVudDoiXGYwMzUifS5pY29uLWFsaWduLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM2In0uaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDM3In0uaWNvbi1hbGlnbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwMzgifS5pY29uLWFsaWduLWp1c3RpZnk6YmVmb3Jle2NvbnRlbnQ6IlxmMDM5In0uaWNvbi1saXN0OmJlZm9yZXtjb250ZW50OiJcZjAzYSJ9Lmljb24taW5kZW50LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNiIn0uaWNvbi1pbmRlbnQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNjIn0uaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmV7Y29udGVudDoiXGYwM2QifS5pY29uLXBpY3R1cmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDNlIn0uaWNvbi1wZW5jaWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDQwIn0uaWNvbi1tYXAtbWFya2VyOmJlZm9yZXtjb250ZW50OiJcZjA0MSJ9Lmljb24tYWRqdXN0OmJlZm9yZXtjb250ZW50OiJcZjA0MiJ9Lmljb24tdGludDpiZWZvcmV7Y29udGVudDoiXGYwNDMifS5pY29uLWVkaXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ0In0uaWNvbi1zaGFyZTpiZWZvcmV7Y29udGVudDoiXGYwNDUifS5pY29uLWNoZWNrOmJlZm9yZXtjb250ZW50OiJcZjA0NiJ9Lmljb24tbW92ZTpiZWZvcmV7Y29udGVudDoiXGYwNDcifS5pY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ4In0uaWNvbi1mYXN0LWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA0OSJ9Lmljb24tYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDRhIn0uaWNvbi1wbGF5OmJlZm9yZXtjb250ZW50OiJcZjA0YiJ9Lmljb24tcGF1c2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDRjIn0uaWNvbi1zdG9wOmJlZm9yZXtjb250ZW50OiJcZjA0ZCJ9Lmljb24tZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGUifS5pY29uLWZhc3QtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTAifS5pY29uLXN0ZXAtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTEifS5pY29uLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZjA1MiJ9Lmljb24tY2hldnJvbi1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjA1MyJ9Lmljb24tY2hldnJvbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwNTQifS5pY29uLXBsdXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTUifS5pY29uLW1pbnVzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU2In0uaWNvbi1yZW1vdmUtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTcifS5pY29uLW9rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU4In0uaWNvbi1xdWVzdGlvbi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1OSJ9Lmljb24taW5mby1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1YSJ9Lmljb24tc2NyZWVuc2hvdDpiZWZvcmV7Y29udGVudDoiXGYwNWIifS5pY29uLXJlbW92ZS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVjIn0uaWNvbi1vay1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVkIn0uaWNvbi1iYW4tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1ZSJ9Lmljb24tYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwNjAifS5pY29uLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA2MSJ9Lmljb24tYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDYyIn0uaWNvbi1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjA2MyJ9Lmljb24tc2hhcmUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjA2NCJ9Lmljb24tcmVzaXplLWZ1bGw6YmVmb3Jle2NvbnRlbnQ6IlxmMDY1In0uaWNvbi1yZXNpemUtc21hbGw6YmVmb3Jle2NvbnRlbnQ6IlxmMDY2In0uaWNvbi1wbHVzOmJlZm9yZXtjb250ZW50OiJcZjA2NyJ9Lmljb24tbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY4In0uaWNvbi1hc3RlcmlzazpiZWZvcmV7Y29udGVudDoiXGYwNjkifS5pY29uLWV4Y2xhbWF0aW9uLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDZhIn0uaWNvbi1naWZ0OmJlZm9yZXtjb250ZW50OiJcZjA2YiJ9Lmljb24tbGVhZjpiZWZvcmV7Y29udGVudDoiXGYwNmMifS5pY29uLWZpcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDZkIn0uaWNvbi1leWUtb3BlbjpiZWZvcmV7Y29udGVudDoiXGYwNmUifS5pY29uLWV5ZS1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGYwNzAifS5pY29uLXdhcm5pbmctc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNzEifS5pY29uLXBsYW5lOmJlZm9yZXtjb250ZW50OiJcZjA3MiJ9Lmljb24tY2FsZW5kYXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDczIn0uaWNvbi1yYW5kb206YmVmb3Jle2NvbnRlbnQ6IlxmMDc0In0uaWNvbi1jb21tZW50OmJlZm9yZXtjb250ZW50OiJcZjA3NSJ9Lmljb24tbWFnbmV0OmJlZm9yZXtjb250ZW50OiJcZjA3NiJ9Lmljb24tY2hldnJvbi11cDpiZWZvcmV7Y29udGVudDoiXGYwNzcifS5pY29uLWNoZXZyb24tZG93bjpiZWZvcmV7Y29udGVudDoiXGYwNzgifS5pY29uLXJldHdlZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDc5In0uaWNvbi1zaG9wcGluZy1jYXJ0OmJlZm9yZXtjb250ZW50OiJcZjA3YSJ9Lmljb24tZm9sZGVyLWNsb3NlOmJlZm9yZXtjb250ZW50OiJcZjA3YiJ9Lmljb24tZm9sZGVyLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxmMDdjIn0uaWNvbi1yZXNpemUtdmVydGljYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDdkIn0uaWNvbi1yZXNpemUtaG9yaXpvbnRhbDpiZWZvcmV7Y29udGVudDoiXGYwN2UifS5pY29uLWJhci1jaGFydDpiZWZvcmV7Y29udGVudDoiXGYwODAifS5pY29uLXR3aXR0ZXItc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwODEifS5pY29uLWZhY2Vib29rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDgyIn0uaWNvbi1jYW1lcmEtcmV0cm86YmVmb3Jle2NvbnRlbnQ6IlxmMDgzIn0uaWNvbi1rZXk6YmVmb3Jle2NvbnRlbnQ6IlxmMDg0In0uaWNvbi1jb2dzOmJlZm9yZXtjb250ZW50OiJcZjA4NSJ9Lmljb24tY29tbWVudHM6YmVmb3Jle2NvbnRlbnQ6IlxmMDg2In0uaWNvbi10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDg3In0uaWNvbi10aHVtYnMtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwODgifS5pY29uLXN0YXItaGFsZjpiZWZvcmV7Y29udGVudDoiXGYwODkifS5pY29uLWhlYXJ0LWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjA4YSJ9Lmljb24tc2lnbm91dDpiZWZvcmV7Y29udGVudDoiXGYwOGIifS5pY29uLWxpbmtlZGluLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDhjIn0uaWNvbi1wdXNocGluOmJlZm9yZXtjb250ZW50OiJcZjA4ZCJ9Lmljb24tZXh0ZXJuYWwtbGluazpiZWZvcmV7Y29udGVudDoiXGYwOGUifS5pY29uLXNpZ25pbjpiZWZvcmV7Y29udGVudDoiXGYwOTAifS5pY29uLXRyb3BoeTpiZWZvcmV7Y29udGVudDoiXGYwOTEifS5pY29uLWdpdGh1Yi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA5MiJ9Lmljb24tdXBsb2FkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwOTMifS5pY29uLWxlbW9uOmJlZm9yZXtjb250ZW50OiJcZjA5NCJ9Lmljb24tcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDk1In0uaWNvbi1jaGVjay1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwOTYifS5pY29uLWJvb2ttYXJrLWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjA5NyJ9Lmljb24tcGhvbmUtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwOTgifS5pY29uLXR3aXR0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDk5In0uaWNvbi1mYWNlYm9vazpiZWZvcmV7Y29udGVudDoiXGYwOWEifS5pY29uLWdpdGh1YjpiZWZvcmV7Y29udGVudDoiXGYwOWIifS5pY29uLXVubG9jazpiZWZvcmV7Y29udGVudDoiXGYwOWMifS5pY29uLWNyZWRpdC1jYXJkOmJlZm9yZXtjb250ZW50OiJcZjA5ZCJ9Lmljb24tcnNzOmJlZm9yZXtjb250ZW50OiJcZjA5ZSJ9Lmljb24taGRkOmJlZm9yZXtjb250ZW50OiJcZjBhMCJ9Lmljb24tYnVsbGhvcm46YmVmb3Jle2NvbnRlbnQ6IlxmMGExIn0uaWNvbi1iZWxsOmJlZm9yZXtjb250ZW50OiJcZjBhMiJ9Lmljb24tY2VydGlmaWNhdGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGEzIn0uaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhNCJ9Lmljb24taGFuZC1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhNSJ9Lmljb24taGFuZC11cDpiZWZvcmV7Y29udGVudDoiXGYwYTYifS5pY29uLWhhbmQtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwYTcifS5pY29uLWNpcmNsZS1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhOCJ9Lmljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhOSJ9Lmljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZjBhYSJ9Lmljb24tY2lyY2xlLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGFiIn0uaWNvbi1nbG9iZTpiZWZvcmV7Y29udGVudDoiXGYwYWMifS5pY29uLXdyZW5jaDpiZWZvcmV7Y29udGVudDoiXGYwYWQifS5pY29uLXRhc2tzOmJlZm9yZXtjb250ZW50OiJcZjBhZSJ9Lmljb24tZmlsdGVyOmJlZm9yZXtjb250ZW50OiJcZjBiMCJ9Lmljb24tYnJpZWZjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBiMSJ9Lmljb24tZnVsbHNjcmVlbjpiZWZvcmV7Y29udGVudDoiXGYwYjIifS5pY29uLWdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjBjMCJ9Lmljb24tbGluazpiZWZvcmV7Y29udGVudDoiXGYwYzEifS5pY29uLWNsb3VkOmJlZm9yZXtjb250ZW50OiJcZjBjMiJ9Lmljb24tYmVha2VyOmJlZm9yZXtjb250ZW50OiJcZjBjMyJ9Lmljb24tY3V0OmJlZm9yZXtjb250ZW50OiJcZjBjNCJ9Lmljb24tY29weTpiZWZvcmV7Y29udGVudDoiXGYwYzUifS5pY29uLXBhcGVyLWNsaXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGM2In0uaWNvbi1zYXZlOmJlZm9yZXtjb250ZW50OiJcZjBjNyJ9Lmljb24tc2lnbi1ibGFuazpiZWZvcmV7Y29udGVudDoiXGYwYzgifS5pY29uLXJlb3JkZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMGM5In0uaWNvbi1saXN0LXVsOmJlZm9yZXtjb250ZW50OiJcZjBjYSJ9Lmljb24tbGlzdC1vbDpiZWZvcmV7Y29udGVudDoiXGYwY2IifS5pY29uLXN0cmlrZXRocm91Z2g6YmVmb3Jle2NvbnRlbnQ6IlxmMGNjIn0uaWNvbi11bmRlcmxpbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGNkIn0uaWNvbi10YWJsZTpiZWZvcmV7Y29udGVudDoiXGYwY2UifS5pY29uLW1hZ2ljOmJlZm9yZXtjb250ZW50OiJcZjBkMCJ9Lmljb24tdHJ1Y2s6YmVmb3Jle2NvbnRlbnQ6IlxmMGQxIn0uaWNvbi1waW50ZXJlc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMGQyIn0uaWNvbi1waW50ZXJlc3Qtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwZDMifS5pY29uLWdvb2dsZS1wbHVzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMGQ0In0uaWNvbi1nb29nbGUtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwZDUifS5pY29uLW1vbmV5OmJlZm9yZXtjb250ZW50OiJcZjBkNiJ9Lmljb24tY2FyZXQtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwZDcifS5pY29uLWNhcmV0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkOCJ9Lmljb24tY2FyZXQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwZDkifS5pY29uLWNhcmV0LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBkYSJ9Lmljb24tY29sdW1uczpiZWZvcmV7Y29udGVudDoiXGYwZGIifS5pY29uLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRjIn0uaWNvbi1zb3J0LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGRkIn0uaWNvbi1zb3J0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkZSJ9Lmljb24tZW52ZWxvcGUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBlMCJ9Lmljb24tbGlua2VkaW46YmVmb3Jle2NvbnRlbnQ6IlxmMGUxIn0uaWNvbi11bmRvOmJlZm9yZXtjb250ZW50OiJcZjBlMiJ9Lmljb24tbGVnYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMGUzIn0uaWNvbi1kYXNoYm9hcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU0In0uaWNvbi1jb21tZW50LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTUifS5pY29uLWNvbW1lbnRzLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTYifS5pY29uLWJvbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU3In0uaWNvbi1zaXRlbWFwOmJlZm9yZXtjb250ZW50OiJcZjBlOCJ9Lmljb24tdW1icmVsbGE6YmVmb3Jle2NvbnRlbnQ6IlxmMGU5In0uaWNvbi1wYXN0ZTpiZWZvcmV7Y29udGVudDoiXGYwZWEifS5pY29uLWxpZ2h0YnVsYjpiZWZvcmV7Y29udGVudDoiXGYwZWIifS5pY29uLWV4Y2hhbmdlOmJlZm9yZXtjb250ZW50OiJcZjBlYyJ9Lmljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGVkIn0uaWNvbi1jbG91ZC11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGVlIn0uaWNvbi11c2VyLW1kOmJlZm9yZXtjb250ZW50OiJcZjBmMCJ9Lmljb24tc3RldGhvc2NvcGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGYxIn0uaWNvbi1zdWl0Y2FzZTpiZWZvcmV7Y29udGVudDoiXGYwZjIifS5pY29uLWJlbGwtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBmMyJ9Lmljb24tY29mZmVlOmJlZm9yZXtjb250ZW50OiJcZjBmNCJ9Lmljb24tZm9vZDpiZWZvcmV7Y29udGVudDoiXGYwZjUifS5pY29uLWZpbGUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBmNiJ9Lmljb24tYnVpbGRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMGY3In0uaWNvbi1ob3NwaXRhbDpiZWZvcmV7Y29udGVudDoiXGYwZjgifS5pY29uLWFtYnVsYW5jZTpiZWZvcmV7Y29udGVudDoiXGYwZjkifS5pY29uLW1lZGtpdDpiZWZvcmV7Y29udGVudDoiXGYwZmEifS5pY29uLWZpZ2h0ZXItamV0OmJlZm9yZXtjb250ZW50OiJcZjBmYiJ9Lmljb24tYmVlcjpiZWZvcmV7Y29udGVudDoiXGYwZmMifS5pY29uLWgtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwZmQifS5pY29uLXBsdXMtc2lnbi1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGZlIn0uaWNvbi1kb3VibGUtYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDAifS5pY29uLWRvdWJsZS1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDEifS5pY29uLWRvdWJsZS1hbmdsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxMDIifS5pY29uLWRvdWJsZS1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwMyJ9Lmljb24tYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDQifS5pY29uLWFuZ2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEwNSJ9Lmljb24tYW5nbGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTA2In0uaWNvbi1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwNyJ9Lmljb24tZGVza3RvcDpiZWZvcmV7Y29udGVudDoiXGYxMDgifS5pY29uLWxhcHRvcDpiZWZvcmV7Y29udGVudDoiXGYxMDkifS5pY29uLXRhYmxldDpiZWZvcmV7Y29udGVudDoiXGYxMGEifS5pY29uLW1vYmlsZS1waG9uZTpiZWZvcmV7Y29udGVudDoiXGYxMGIifS5pY29uLWNpcmNsZS1ibGFuazpiZWZvcmV7Y29udGVudDoiXGYxMGMifS5pY29uLXF1b3RlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTBkIn0uaWNvbi1xdW90ZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMGUifS5pY29uLXNwaW5uZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTEwIn0uaWNvbi1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTExIn0uaWNvbi1yZXBseTpiZWZvcmV7Y29udGVudDoiXGYxMTIifS5pY29uLWdpdGh1Yi1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTEzIn0uaWNvbi1mb2xkZXItY2xvc2UtYWx0OmJlZm9yZXtjb250ZW50OiJcZjExNCJ9Lmljb24tZm9sZGVyLW9wZW4tYWx0OmJlZm9yZXtjb250ZW50OiJcZjExNSJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18xOF9iODE5MDBfNDB4NDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ZDc4YTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMjBfNjY2NjY2XzQweDQwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18yMF82NjY2NjZfNDB4NDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiMGEwNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMjBfNjY2NjY2XzQweDQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19mbGF0XzEwXzAwMDAwMF80MHgxMDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNTVmOGVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsYXNzXzEwMF9mNmY2ZjZfMXg0MDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhNGZhMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsYXNzXzEwMF9mZGY1Y2VfMXg0MDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmNTllMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTcyYjMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2dsb3NzLXdhdmVfMzVfZjZhODI4XzUwMHgxMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMzlkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0XzEwMF9lZWVlZWVfMXgxMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwODliNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF83NV9mZmU0NWNfMXgxMDAucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjFiN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjIyMjJfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljOGUxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2OGM1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyOGVmMV8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiYmZlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzNWI0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZDI3YV8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2NmY1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDg2ZWMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcwpAQCAtMCwwICsxLDcgQEAKKy8qISBqUXVlcnkgVUkgLSB2MS4xMS40IC0gMjAxNS0wMy0xNworKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIEluY2x1ZGVzOiBjb3JlLmNzcywgZGF0ZXBpY2tlci5jc3MsIHRoZW1lLmNzcworKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/ZmZEZWZhdWx0PVRyZWJ1Y2hldCUyME1TJTJDVGFob21hJTJDVmVyZGFuYSUyQ0FyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9Ym9sZCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPWY2YTgyOCZiZ1RleHR1cmVIZWFkZXI9Z2xvc3Nfd2F2ZSZiZ0ltZ09wYWNpdHlIZWFkZXI9MzUmYm9yZGVyQ29sb3JIZWFkZXI9ZTc4ZjA4JmZjSGVhZGVyPWZmZmZmZiZpY29uQ29sb3JIZWFkZXI9ZmZmZmZmJmJnQ29sb3JDb250ZW50PWVlZWVlZSZiZ1RleHR1cmVDb250ZW50PWhpZ2hsaWdodF9zb2Z0JmJnSW1nT3BhY2l0eUNvbnRlbnQ9MTAwJmJvcmRlckNvbG9yQ29udGVudD1kZGRkZGQmZmNDb250ZW50PTMzMzMzMyZpY29uQ29sb3JDb250ZW50PTIyMjIyMiZiZ0NvbG9yRGVmYXVsdD1mNmY2ZjYmYmdUZXh0dXJlRGVmYXVsdD1nbGFzcyZiZ0ltZ09wYWNpdHlEZWZhdWx0PTEwMCZib3JkZXJDb2xvckRlZmF1bHQ9Y2NjY2NjJmZjRGVmYXVsdD0xYzk0YzQmaWNvbkNvbG9yRGVmYXVsdD1lZjhjMDgmYmdDb2xvckhvdmVyPWZkZjVjZSZiZ1RleHR1cmVIb3Zlcj1nbGFzcyZiZ0ltZ09wYWNpdHlIb3Zlcj0xMDAmYm9yZGVyQ29sb3JIb3Zlcj1mYmNiMDkmZmNIb3Zlcj1jNzc0MDUmaWNvbkNvbG9ySG92ZXI9ZWY4YzA4JmJnQ29sb3JBY3RpdmU9ZmZmZmZmJmJnVGV4dHVyZUFjdGl2ZT1nbGFzcyZiZ0ltZ09wYWNpdHlBY3RpdmU9NjUmYm9yZGVyQ29sb3JBY3RpdmU9ZmJkODUwJmZjQWN0aXZlPWViOGYwMCZpY29uQ29sb3JBY3RpdmU9ZWY4YzA4JmJnQ29sb3JIaWdobGlnaHQ9ZmZlNDVjJmJnVGV4dHVyZUhpZ2hsaWdodD1oaWdobGlnaHRfc29mdCZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NzUmYm9yZGVyQ29sb3JIaWdobGlnaHQ9ZmVkMjJmJmZjSGlnaGxpZ2h0PTM2MzYzNiZpY29uQ29sb3JIaWdobGlnaHQ9MjI4ZWYxJmJnQ29sb3JFcnJvcj1iODE5MDAmYmdUZXh0dXJlRXJyb3I9ZGlhZ29uYWxzX3RoaWNrJmJnSW1nT3BhY2l0eUVycm9yPTE4JmJvcmRlckNvbG9yRXJyb3I9Y2QwYTBhJmZjRXJyb3I9ZmZmZmZmJmljb25Db2xvckVycm9yPWZmZDI3YSZiZ0NvbG9yT3ZlcmxheT02NjY2NjYmYmdUZXh0dXJlT3ZlcmxheT1kaWFnb25hbHNfdGhpY2smYmdJbWdPcGFjaXR5T3ZlcmxheT0yMCZvcGFjaXR5T3ZlcmxheT01MCZiZ0NvbG9yU2hhZG93PTAwMDAwMCZiZ1RleHR1cmVTaGFkb3c9ZmxhdCZiZ0ltZ09wYWNpdHlTaGFkb3c9MTAmb3BhY2l0eVNoYWRvdz0yMCZ0aGlja25lc3NTaGFkb3c9NXB4Jm9mZnNldFRvcFNoYWRvdz0tNXB4Jm9mZnNldExlZnRTaGFkb3c9LTVweCZjb3JuZXJSYWRpdXNTaGFkb3c9NXB4CisqIENvcHlyaWdodCAyMDE1IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLworCisudWktaGVscGVyLWhpZGRlbntkaXNwbGF5Om5vbmV9LnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0udWktaGVscGVyLXJlc2V0e21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtvdXRsaW5lOjA7bGluZS1oZWlnaHQ6MS4zO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMDAlO2xpc3Qtc3R5bGU6bm9uZX0udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSwudWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9LnVpLWhlbHBlci1jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS51aS1oZWxwZXItY2xlYXJmaXh7bWluLWhlaWdodDowfS51aS1oZWxwZXItemZpeHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCl9LnVpLWZyb250e3otaW5kZXg6MTAwfS51aS1zdGF0ZS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LnVpLWljb257ZGlzcGxheTpibG9jazt0ZXh0LWluZGVudDotOTk5OTlweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS51aS13aWRnZXQtb3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFye3dpZHRoOjQ1JX0udWktZGF0ZXBpY2tlciB0YWJsZXt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW46MCAwIC40ZW19LnVpLWRhdGVwaWNrZXIgdGh7cGFkZGluZzouN2VtIC4zZW07dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtib3JkZXI6MH0udWktZGF0ZXBpY2tlciB0ZHtib3JkZXI6MDtwYWRkaW5nOjFweH0udWktZGF0ZXBpY2tlciB0ZCBzcGFuLC51aS1kYXRlcGlja2VyIHRkIGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOi4yZW07dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW46LjdlbSAwIDAgMDtwYWRkaW5nOjAgLjJlbTtib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbntmbG9hdDpyaWdodDttYXJnaW46LjVlbSAuMmVtIC40ZW07Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMmVtIC42ZW0gLjNlbSAuNmVtO3dpZHRoOmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnR7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci51aS1kYXRlcGlja2VyLW11bHRpe3dpZHRoOmF1dG99LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZXt3aWR0aDo5NSU7bWFyZ2luOjAgYXV0byAuNGVtfS51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6NTAlfS51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6MzMuMyV9LnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDoyNSV9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlcntib3JkZXItbGVmdC13aWR0aDowfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6bGVmdH0udWktZGF0ZXBpY2tlci1yb3ctYnJlYWt7Y2xlYXI6Ym90aDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTowfS51aS1kYXRlcGlja2VyLXJ0bHtkaXJlY3Rpb246cnRsfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2e3JpZ2h0OjJweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHR7bGVmdDoycHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlcntyaWdodDoxcHg7bGVmdDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVye2xlZnQ6MXB4O3JpZ2h0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCwudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjFweH0udWktd2lkZ2V0e2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUyxUYWhvbWEsVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxLjFlbX0udWktd2lkZ2V0IC51aS13aWRnZXR7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0IGlucHV0LC51aS13aWRnZXQgc2VsZWN0LC51aS13aWRnZXQgdGV4dGFyZWEsLnVpLXdpZGdldCBidXR0b257Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TLFRhaG9tYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0LWNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2VlZSB1cmwoImltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZyIpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6IzMzM30udWktd2lkZ2V0LWNvbnRlbnQgYXtjb2xvcjojMzMzfS51aS13aWRnZXQtaGVhZGVye2JvcmRlcjoxcHggc29saWQgI2U3OGYwODtiYWNrZ3JvdW5kOiNmNmE4MjggdXJsKCJpbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0udWktd2lkZ2V0LWhlYWRlciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0e2JvcmRlcjoxcHggc29saWQgI2NjYztiYWNrZ3JvdW5kOiNmNmY2ZjYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzFjOTRjNH0udWktc3RhdGUtZGVmYXVsdCBhLC51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWR7Y29sb3I6IzFjOTRjNDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaG92ZXIsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsLnVpLXN0YXRlLWZvY3VzLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3Vze2JvcmRlcjoxcHggc29saWQgI2ZiY2IwOTtiYWNrZ3JvdW5kOiNmZGY1Y2UgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2M3NzQwNX0udWktc3RhdGUtaG92ZXIgYSwudWktc3RhdGUtaG92ZXIgYTpob3ZlciwudWktc3RhdGUtaG92ZXIgYTpsaW5rLC51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsLnVpLXN0YXRlLWZvY3VzIGEsLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsLnVpLXN0YXRlLWZvY3VzIGE6bGluaywudWktc3RhdGUtZm9jdXMgYTp2aXNpdGVke2NvbG9yOiNjNzc0MDU7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZle2JvcmRlcjoxcHggc29saWQgI2ZiZDg1MDtiYWNrZ3JvdW5kOiNmZmYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojZWI4ZjAwfS51aS1zdGF0ZS1hY3RpdmUgYSwudWktc3RhdGUtYWN0aXZlIGE6bGluaywudWktc3RhdGUtYWN0aXZlIGE6dmlzaXRlZHtjb2xvcjojZWI4ZjAwO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodHtib3JkZXI6MXB4IHNvbGlkICNmZWQyMmY7YmFja2dyb3VuZDojZmZlNDVjIHVybCgiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2ZmZTQ1Y18xeDEwMC5wbmciKSA1MCUgdG9wIHJlcGVhdC14O2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhe2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9ye2JvcmRlcjoxcHggc29saWQgI2NkMGEwYTtiYWNrZ3JvdW5kOiNiODE5MDAgdXJsKCJpbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmciKSA1MCUgNTAlIHJlcGVhdDtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYXtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dHtjb2xvcjojZmZmfS51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeXtmb250LXdlaWdodDpib2xkfS51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeXtvcGFjaXR5Oi43O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTtmb250LXdlaWdodDpub3JtYWx9LnVpLXN0YXRlLWRpc2FibGVkLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVke29wYWNpdHk6LjM1O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29ue2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KX0udWktaWNvbnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS51aS1pY29uLC51aS13aWRnZXQtY29udGVudCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyIpfS51aS13aWRnZXQtaGVhZGVyIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtaG92ZXIgLnVpLWljb24sLnVpLXN0YXRlLWZvY3VzIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZXJyb3IgLnVpLWljb24sLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmciKX0udWktaWNvbi1ibGFua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjE2cHggMTZweH0udWktaWNvbi1jYXJhdC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9LnVpLWljb24tY2FyYXQtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IDB9LnVpLWljb24tY2FyYXQtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggMH0udWktaWNvbi1jYXJhdC0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0udWktaWNvbi1jYXJhdC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAwfS51aS1pY29uLWNhcmF0LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS51aS1pY29uLWNhcmF0LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9LnVpLWljb24tY2FyYXQtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAwfS51aS1pY29uLWNhcmF0LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IDB9LnVpLWljb24tY2FyYXQtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0udWktaWNvbi10cmlhbmdsZS0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE2cHh9LnVpLWljb24tYXJyb3ctMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0zMnB4fS51aS1pY29uLWFycm93dGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItc2Utbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13e2JhY2tncm91bmQtcG9zaXRpb246MCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNjRweH0udWktaWNvbi1hcnJvdy00e2JhY2tncm91bmQtcG9zaXRpb246MCAtODBweH0udWktaWNvbi1hcnJvdy00LWRpYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtODBweH0udWktaWNvbi1leHRsaW5re2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTgwcHh9LnVpLWljb24tbmV3d2lue2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTgwcHh9LnVpLWljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC04MHB4fS51aS1pY29uLXNodWZmbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtODBweH0udWktaWNvbi10cmFuc2Zlci1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtODBweH0udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtODBweH0udWktaWNvbi1mb2xkZXItY29sbGFwc2Vke2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0udWktaWNvbi1mb2xkZXItb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC05NnB4fS51aS1pY29uLWRvY3VtZW50e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnQtYntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS51aS1pY29uLW5vdGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtOTZweH0udWktaWNvbi1tYWlsLWNsb3NlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC05NnB4fS51aS1pY29uLW1haWwtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS51aS1pY29uLXN1aXRjYXNle2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05NnB4fS51aS1pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTk2cHh9LnVpLWljb24tcGVyc29ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS51aS1pY29uLXByaW50e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC05NnB4fS51aS1pY29uLXRyYXNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC05NnB4fS51aS1pY29uLWxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0udWktaWNvbi11bmxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtOTZweH0udWktaWNvbi1ib29rbWFya3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtOTZweH0udWktaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTk2cHh9LnVpLWljb24taG9tZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTExMnB4fS51aS1pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTEycHh9LnVpLWljb24tY2FsZW5kYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTEycHh9LnVpLWljb24tY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMTJweH0udWktaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTEycHh9LnVpLWljb24tY2xvY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTEycHh9LnVpLWljb24tZGlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMTJweH0udWktaWNvbi1jYWxjdWxhdG9ye2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMTJweH0udWktaWNvbi16b29taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTExMnB4fS51aS1pY29uLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTExMnB4fS51aS1pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTEycHh9LnVpLWljb24td3JlbmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMTJweH0udWktaWNvbi1nZWFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMTJweH0udWktaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTEycHh9LnVpLWljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTEycHh9LnVpLWljb24tbGlua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTEycHh9LnVpLWljb24tY2FuY2Vse2JhY2tncm91bmQtcG9zaXRpb246MCAtMTI4cHh9LnVpLWljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMjhweH0udWktaWNvbi1wbHVzdGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTI4cHh9LnVpLWljb24tbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTI4cHh9LnVpLWljb24tbWludXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXRoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTEyOHB4fS51aS1pY29uLWtleXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTI4cHh9LnVpLWljb24tbGlnaHRidWxie2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xMjhweH0udWktaWNvbi1zY2lzc29yc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTI4cHh9LnVpLWljb24tY2xpcGJvYXJke2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMjhweH0udWktaWNvbi1jb3B5e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMjhweH0udWktaWNvbi1jb250YWN0e2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjhweH0udWktaWNvbi1pbWFnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTI4cHh9LnVpLWljb24tdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTEyOHB4fS51aS1pY29uLXNjcmlwdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTI4cHh9LnVpLWljb24tYWxlcnR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0udWktaWNvbi1pbmZve2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE0NHB4fS51aS1pY29uLW5vdGljZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNDRweH0udWktaWNvbi1oZWxwe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS51aS1pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE0NHB4fS51aS1pY29uLWJ1bGxldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE0NHB4fS51aS1pY29uLXBpbi13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNDRweH0udWktaWNvbi1waW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9LnVpLWljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2MHB4fS51aS1pY29uLXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE2MHB4fS51aS1pY29uLXNlZWstbmV4dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNjBweH0udWktaWNvbi1zZWVrLXByZXZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTYwcHh9LnVpLWljb24tc2Vlay1lbmR7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTYwcHh9LnVpLWljb24tc2Vlay1zdGFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWZpcnN0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXN0b3B7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTYwcHh9LnVpLWljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTYwcHh9LnVpLWljb24tcG93ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNzZweH0udWktaWNvbi1zaWduYWwtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNzZweH0udWktaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0we2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTJ7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0ze2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE3NnB4fS51aS1pY29uLWNpcmNsZS1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMTkycHh9LnVpLWljb24tY2lyY2xlLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjA4cHh9LnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yMjRweH0udWktaWNvbi1ncmlwLWRvdHRlZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIyNHB4fS51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTIyNHB4fS51aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMjRweH0udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTIyNHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItbGVmdCwudWktY29ybmVyLXRse2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItcmlnaHQsLnVpLWNvcm5lci10cntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItYmx7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLWJye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweH0udWktd2lkZ2V0LW92ZXJsYXl7YmFja2dyb3VuZDojNjY2IHVybCgiaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18yMF82NjY2NjZfNDB4NDAucG5nIikgNTAlIDUwJSByZXBlYXQ7b3BhY2l0eTouNTtmaWx0ZXI6QWxwaGEoT3BhY2l0eT01MCl9LnVpLXdpZGdldC1zaGFkb3d7bWFyZ2luOi01cHggMCAwIC01cHg7cGFkZGluZzo1cHg7YmFja2dyb3VuZDojMDAwIHVybCgiaW1hZ2VzL3VpLWJnX2ZsYXRfMTBfMDAwMDAwXzQweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O29wYWNpdHk6LjI7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MjApO2JvcmRlci1yYWRpdXM6NXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkuc3RydWN0dXJlLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDE1NzhhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzCkBAIC0wLDAgKzEsNSBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE1CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKy51aS1oZWxwZXItaGlkZGVue2Rpc3BsYXk6bm9uZX0udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxle2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS51aS1oZWxwZXItcmVzZXR7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO291dGxpbmU6MDtsaW5lLWhlaWdodDoxLjM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEwMCU7bGlzdC1zdHlsZTpub25lfS51aS1oZWxwZXItY2xlYXJmaXg6YmVmb3JlLC51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0udWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LnVpLWhlbHBlci1jbGVhcmZpeHttaW4taGVpZ2h0OjB9LnVpLWhlbHBlci16Zml4e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKX0udWktZnJvbnR7ei1pbmRleDoxMDB9LnVpLXN0YXRlLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0udWktaWNvbntkaXNwbGF5OmJsb2NrO3RleHQtaW5kZW50Oi05OTk5OXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVpLXdpZGdldC1vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS51aS1kYXRlcGlja2Vye3dpZHRoOjE3ZW07cGFkZGluZzouMmVtIC4yZW0gMDtkaXNwbGF5Om5vbmV9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItaGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6LjJlbSAwfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3dpZHRoOjEuOGVtO2hlaWdodDoxLjhlbX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7dG9wOjFweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2e2xlZnQ6MnB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cmlnaHQ6MnB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXJ7bGVmdDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlcntyaWdodDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi04cHg7dG9wOjUwJTttYXJnaW4tdG9wOi04cHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGV7bWFyZ2luOjAgMi4zZW07bGluZS1oZWlnaHQ6MS44ZW07dGV4dC1hbGlnbjpjZW50ZXJ9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0e2ZvbnQtc2l6ZToxZW07bWFyZ2luOjFweCAwfS51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLC51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJ7d2lkdGg6NDUlfS51aS1kYXRlcGlja2VyIHRhYmxle3dpZHRoOjEwMCU7Zm9udC1zaXplOi45ZW07Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21hcmdpbjowIDAgLjRlbX0udWktZGF0ZXBpY2tlciB0aHtwYWRkaW5nOi43ZW0gLjNlbTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkO2JvcmRlcjowfS51aS1kYXRlcGlja2VyIHRke2JvcmRlcjowO3BhZGRpbmc6MXB4fS51aS1kYXRlcGlja2VyIHRkIHNwYW4sLnVpLWRhdGVwaWNrZXIgdGQgYXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6LjJlbTt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7YmFja2dyb3VuZC1pbWFnZTpub25lO21hcmdpbjouN2VtIDAgMCAwO3BhZGRpbmc6MCAuMmVtO2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJpZ2h0OjA7Ym9yZGVyLWJvdHRvbTowfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OnJpZ2h0O21hcmdpbjouNWVtIC4yZW0gLjRlbTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOi4yZW0gLjZlbSAuM2VtIC42ZW07d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGl7d2lkdGg6YXV0b30udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxle3dpZHRoOjk1JTttYXJnaW46MCBhdXRvIC40ZW19LnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDo1MCV9LnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDozMy4zJX0udWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjI1JX0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciwudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1sZWZ0LXdpZHRoOjB9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpsZWZ0fS51aS1kYXRlcGlja2VyLXJvdy1icmVha3tjbGVhcjpib3RoO3dpZHRoOjEwMCU7Zm9udC1zaXplOjB9LnVpLWRhdGVwaWNrZXItcnRse2RpcmVjdGlvbjpydGx9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXZ7cmlnaHQ6MnB4O2xlZnQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dHtsZWZ0OjJweDtyaWdodDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVye3JpZ2h0OjFweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXJ7bGVmdDoxcHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnRoZW1lLm1pbi5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0NTQzMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzCkBAIC0wLDAgKzEsNSBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE3CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKy51aS13aWRnZXR7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TLFRhaG9tYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEuMWVtfS51aS13aWRnZXQgLnVpLXdpZGdldHtmb250LXNpemU6MWVtfS51aS13aWRnZXQgaW5wdXQsLnVpLXdpZGdldCBzZWxlY3QsLnVpLXdpZGdldCB0ZXh0YXJlYSwudWktd2lkZ2V0IGJ1dHRvbntmb250LWZhbWlseTpUcmVidWNoZXQgTVMsVGFob21hLFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MWVtfS51aS13aWRnZXQtY29udGVudHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZWVlIHVybCgiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0XzEwMF9lZWVlZWVfMXgxMDAucG5nIikgNTAlIHRvcCByZXBlYXQteDtjb2xvcjojMzMzfS51aS13aWRnZXQtY29udGVudCBhe2NvbG9yOiMzMzN9LnVpLXdpZGdldC1oZWFkZXJ7Ym9yZGVyOjFweCBzb2xpZCAjZTc4ZjA4O2JhY2tncm91bmQ6I2Y2YTgyOCB1cmwoImltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfS51aS13aWRnZXQtaGVhZGVyIGF7Y29sb3I6I2ZmZn0udWktc3RhdGUtZGVmYXVsdCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JhY2tncm91bmQ6I2Y2ZjZmNiB1cmwoImltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMWM5NGM0fS51aS1zdGF0ZS1kZWZhdWx0IGEsLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLC51aS1zdGF0ZS1kZWZhdWx0IGE6dmlzaXRlZHtjb2xvcjojMWM5NGM0O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlciwudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZm9jdXN7Ym9yZGVyOjFweCBzb2xpZCAjZmJjYjA5O2JhY2tncm91bmQ6I2ZkZjVjZSB1cmwoImltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojYzc3NDA1fS51aS1zdGF0ZS1ob3ZlciBhLC51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLC51aS1zdGF0ZS1ob3ZlciBhOmxpbmssLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZCwudWktc3RhdGUtZm9jdXMgYSwudWktc3RhdGUtZm9jdXMgYTpob3ZlciwudWktc3RhdGUtZm9jdXMgYTpsaW5rLC51aS1zdGF0ZS1mb2N1cyBhOnZpc2l0ZWR7Y29sb3I6I2M3NzQwNTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtYWN0aXZlLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjZmJkODUwO2JhY2tncm91bmQ6I2ZmZiB1cmwoImltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDpib2xkO2NvbG9yOiNlYjhmMDB9LnVpLXN0YXRlLWFjdGl2ZSBhLC51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLC51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVke2NvbG9yOiNlYjhmMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0e2JvcmRlcjoxcHggc29saWQgI2ZlZDIyZjtiYWNrZ3JvdW5kOiNmZmU0NWMgdXJsKCJpbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZyIpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGF7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3J7Ym9yZGVyOjFweCBzb2xpZCAjY2QwYTBhO2JhY2tncm91bmQ6I2I4MTkwMCB1cmwoImltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZyIpIDUwJSA1MCUgcmVwZWF0O2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0e2NvbG9yOiNmZmZ9LnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5e2ZvbnQtd2VpZ2h0OmJvbGR9LnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5e29wYWNpdHk6Ljc7ZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApO2ZvbnQtd2VpZ2h0Om5vcm1hbH0udWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWR7b3BhY2l0eTouMzU7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpO2JhY2tncm91bmQtaW1hZ2U6bm9uZX0udWktc3RhdGUtZGlzYWJsZWQgLnVpLWljb257ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpfS51aS1pY29ue3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHh9LnVpLWljb24sLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nIil9LnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZGVmYXVsdCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1ob3ZlciAudWktaWNvbiwudWktc3RhdGUtZm9jdXMgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtYWN0aXZlIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzIyOGVmMV8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1lcnJvciAudWktaWNvbiwudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2ZmZDI3YV8yNTZ4MjQwLnBuZyIpfS51aS1pY29uLWJsYW5re2JhY2tncm91bmQtcG9zaXRpb246MTZweCAxNnB4fS51aS1pY29uLWNhcmF0LTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0udWktaWNvbi1jYXJhdC0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggMH0udWktaWNvbi1jYXJhdC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAwfS51aS1pY29uLWNhcmF0LTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS51aS1pY29uLWNhcmF0LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IDB9LnVpLWljb24tY2FyYXQtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IDB9LnVpLWljb24tY2FyYXQtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggMH0udWktaWNvbi1jYXJhdC0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IDB9LnVpLWljb24tY2FyYXQtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggMH0udWktaWNvbi1jYXJhdC0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAwfS51aS1pY29uLXRyaWFuZ2xlLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTZweH0udWktaWNvbi1hcnJvdy0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0zMnB4fS51aS1pY29uLWFycm93LTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLXNlLW53e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTMycHh9LnVpLWljb24tYXJyb3d0aGljay0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC02NHB4fS51aS1pY29uLWFycm93LTR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC04MHB4fS51aS1pY29uLWFycm93LTQtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC04MHB4fS51aS1pY29uLWV4dGxpbmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtODBweH0udWktaWNvbi1uZXd3aW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtODBweH0udWktaWNvbi1yZWZyZXNoe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTgwcHh9LnVpLWljb24tc2h1ZmZsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVyLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVydGhpY2stZS13e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC04MHB4fS51aS1pY29uLWZvbGRlci1jb2xsYXBzZWR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS51aS1pY29uLWZvbGRlci1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtOTZweH0udWktaWNvbi1kb2N1bWVudC1ie2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTk2cHh9LnVpLWljb24tbm90ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC05NnB4fS51aS1pY29uLW1haWwtY2xvc2Vke2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTk2cHh9LnVpLWljb24tbWFpbC1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9LnVpLWljb24tc3VpdGNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTk2cHh9LnVpLWljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtOTZweH0udWktaWNvbi1wZXJzb257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9LnVpLWljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTk2cHh9LnVpLWljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTk2cHh9LnVpLWljb24tbG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS51aS1pY29uLXVubG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC05NnB4fS51aS1pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC05NnB4fS51aS1pY29uLXRhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0udWktaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMTEycHh9LnVpLWljb24tZmxhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMTJweH0udWktaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMTJweH0udWktaWNvbi1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTExMnB4fS51aS1pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMTJweH0udWktaWNvbi1jbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMTJweH0udWktaWNvbi1kaXNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTExMnB4fS51aS1pY29uLWNhbGN1bGF0b3J7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTExMnB4fS51aS1pY29uLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTEycHh9LnVpLWljb24tem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTEycHh9LnVpLWljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMTJweH0udWktaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTExMnB4fS51aS1pY29uLWdlYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExMnB4fS51aS1pY29uLWhlYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMTJweH0udWktaWNvbi1zdGFye2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0xMTJweH0udWktaWNvbi1saW5re2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMTJweH0udWktaWNvbi1jYW5jZWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjhweH0udWktaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTEyOHB4fS51aS1pY29uLXBsdXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMjhweH0udWktaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMjhweH0udWktaWNvbi1taW51c3RoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTEyOHB4fS51aS1pY29uLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTEyOHB4fS51aS1pY29uLWNsb3NldGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTI4cHh9LnVpLWljb24ta2V5e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMjhweH0udWktaWNvbi1saWdodGJ1bGJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTEyOHB4fS51aS1pY29uLXNjaXNzb3Jze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMjhweH0udWktaWNvbi1jbGlwYm9hcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTEyOHB4fS51aS1pY29uLWNvcHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTEyOHB4fS51aS1pY29uLWNvbnRhY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTEyOHB4fS51aS1pY29uLWltYWdle2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMjhweH0udWktaWNvbi12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTI4cHh9LnVpLWljb24tc2NyaXB0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMjhweH0udWktaWNvbi1hbGVydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE0NHB4fS51aS1pY29uLWluZm97YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTQ0cHh9LnVpLWljb24tbm90aWNle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE0NHB4fS51aS1pY29uLWhlbHB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTQ0cHh9LnVpLWljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTQ0cHh9LnVpLWljb24tYnVsbGV0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTQ0cHh9LnVpLWljb24tcGluLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE0NHB4fS51aS1pY29uLXBpbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNDRweH0udWktaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTYwcHh9LnVpLWljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTYwcHh9LnVpLWljb24tc2Vlay1uZXh0e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE2MHB4fS51aS1pY29uLXNlZWstcHJldntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWVuZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNjBweH0udWktaWNvbi1zZWVrLXN0YXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXNlZWstZmlyc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTYwcHh9LnVpLWljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNjBweH0udWktaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNjBweH0udWktaWNvbi1wb3dlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE3NnB4fS51aS1pY29uLXNpZ25hbC1kaWFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE3NnB4fS51aS1pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0xe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTN7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTc2cHh9LnVpLWljb24tY2lyY2xlLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xOTJweH0udWktaWNvbi1jaXJjbGUtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1le2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbWlue2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMDhweH0udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIyNHB4fS51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0yMjRweH0udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjI0cHh9LnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTIyNHB4fS51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjI0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItdGx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLXRye2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLWxlZnQsLnVpLWNvcm5lci1ibHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLXJpZ2h0LC51aS1jb3JuZXItYnJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS51aS13aWRnZXQtb3ZlcmxheXtiYWNrZ3JvdW5kOiM2NjYgdXJsKCJpbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzIwXzY2NjY2Nl80MHg0MC5wbmciKSA1MCUgNTAlIHJlcGVhdDtvcGFjaXR5Oi41O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTUwKX0udWktd2lkZ2V0LXNoYWRvd3ttYXJnaW46LTVweCAwIDAgLTVweDtwYWRkaW5nOjVweDtiYWNrZ3JvdW5kOiMwMDAgdXJsKCJpbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7b3BhY2l0eTouMjtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0yMCk7Ym9yZGVyLXJhZGl1czo1cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLmNzcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5NWJmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MKQEAgLTAsMCArMSwyOCBAQAordGFibGUudHJlZXRhYmxlIHNwYW4uaW5kZW50ZXIgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisKKyAgLyogRGlzYWJsZSB0ZXh0IHNlbGVjdGlvbiBvZiBub2RlcyAoZm9yIGJldHRlciBEJkQgVVgpICovCisgIHVzZXItc2VsZWN0OiBub25lOworICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CisgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CisgIC1vLXVzZXItc2VsZWN0OiBub25lOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworCisgIC8qIEZvcmNlIGNvbnRlbnQtYm94IGJveCBtb2RlbCBmb3IgaW5kZW50ZXIgKEJvb3RzdHJhcCBjb21wYXRpYmlsaXR5KSAqLworICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKworICB3aWR0aDogMTlweDsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgd2lkdGg6IDE5cHg7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUuZGVmYXVsdC5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUuZGVmYXVsdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyODliYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS5kZWZhdWx0LmNzcwpAQCAtMCwwICsxLDY0IEBACit0YWJsZS50cmVldGFibGUgeworICBib3JkZXI6IDFweCBzb2xpZCAjODg4OworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBmb250LXNpemU6IC44ZW07CisgIGxpbmUtaGVpZ2h0OiAxOworICBtYXJnaW46IC42ZW0gMCAxLjhlbSAwOworICB3aWR0aDogMTAwJTsKK30KKwordGFibGUudHJlZXRhYmxlIGNhcHRpb24geworICBmb250LXNpemU6IC45ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW4tYm90dG9tOiAuMmVtOworfQorCit0YWJsZS50cmVldGFibGUgdGJvZHkgdHIgdGQgeworICBjdXJzb3I6IGRlZmF1bHQ7CisgIHBhZGRpbmc6IC4zZW0gMWVtOworfQorCit0YWJsZS50cmVldGFibGUgc3BhbiB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nOiAuMmVtIDAgLjJlbSAxLjVlbTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZmlsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVFBQUFDMStqZnFBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQURvU1VSQlZCZ1pCY0V4YmxOQkdBYkEyY2VlZ1RSQnVJS09naWloU1pOVGNDNUxVSEFpaE5KUjBrR0tDRGNZSlk2RDMvNzdNZE9pblR2ekFnQ3c4eXNUaEl2bi9Wb2pJeU1qSXlQUCtiUzFzVVFJVjJzOTVwQkREdm1iUC9tZGtmdDgzdHBZZ3VacTVKaC9PZWFZaCt5enk4aFRIdk5sYXhOTmN6bStsYTlPVGxhcjFVZEEvK0MyQTR0clJDbkQzalM4QkIxb2JxMkdrNkdVNlFiUUFTNEJVYVlTUUFmNGJoaEtLVEZkQXpyQU93QXhFVUFIK0tFTTAxU1kzZ002d0JzRUFRQjBnSittYVpvQzNnSTZpUFlhQUlCSnNpUm1IVTBBQUxPZUZDM2FLMmNXQUFDVVhlNytBd08wbGM5ZVRIWVRBQUFBQUVsRlRrU3VRbUNDKTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZm9sZGVyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhKWlR3QUFBR3JTVVJCVkRqTHhaTzdpaFJCRklhLzZ1MFpXN0dIQlVWMFVRUVRaemQzUWRoTVF4T2Z3TVJYRUFOQk1OUVgwTXpBekZBd0V6SHdBUmJORkRkd0VkMzFNajNYN2E2dU9yOUJ0ek5qWWpLQko2bmljUDd2M0txY0pGYXhoQlZ0WlVBSzhPSGxsZDJzdDdYbDNESlBWT05QK3pFVVY0SHFMNVVEWUhyNXh2dVFBamdsL1FzN1R6dk9PVkFqeGpsQytlUFN3ZTZEZmJWZWdMVnVUNHIxNGVUcjZ6dkE4eFNBb0JMeng2cHZqNGwrRFpJZXp1VmtHOWZZMkg3WVJRSU1aSUJ3eWNtekgxL3MzRjhBYXBmSVBORjNrUWs3K2t3OVBXQnkrSVpPZGc1VWczbWtBQVR5L3QwdXNvdnpHZUNVV1RqQ3owQitTajBla2ZkdmtaM2FiQnYrVTRHYUN0SjFpRW02QU5RSjZmRXpyRy9lbmdjS3cvd1hRdkVLeFNFS1F4UkdLRTdJenQrRFNpd0JKTVVTbTcxcmd1TVloUUtyQnlnT0lSU3RmNFRpRkZSQnZiUkdLaVFMV1AyOXlSU0hLQlR0ZmRCbUhzMEJVcGd2dGdGNHlSRlIrTlVLaTBYWmNZakNlQ0cyc21rekxBSGtiUkJtUDAvVWsyNk81WW5VQWN0QnAxR3NBSStTNW5SSkpKYWw1SzFhQU1ycTBkNlRtOXVJNnpqeWY3NWRBZTZ0eC9Tc1dlRC8vbzIvQWI2SUgzL2gyNXBPQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIbEpSRUZVZU5yY1Uxc05nREFRNndnbWNBTTJNSUNHR2xnMWdKbk56V1FjdndRR3kxajRvVWwvN3RIMG1wd3pNN1NnUXlPK0VaQVVXaDJNa2t6U1doSnd1UkFsSFlzSndFd3l2czFnQUJEdXpxb0pjVHc1cXhhSUpOMGJnUVJnSWpubG1uMWhlU081UEU2WTJZWGUrNUNyNStoKytnczEyQWNBUzZGUys3WU9zajRBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUhGSlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmd2aGZhMjl2M016QXdPT0RSYzZDeXN0SVJieGkwdDdmakRKakt5a3BHWXJ3d2kxaHhuTEhRM3Q3K2pJR0JRUkpKNkhsbFphVVVLWUVZUllCUE9CMGdCU2hLd0tHQS8vLy80OFZ0YlczLzhjbFRuQklIM2dDS2t6SmdBR3ZCWDBkRG0wc0NBQUFBQUVsRlRrU3VRbUNDKTsKK30KKworCisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQuc2VsZWN0ZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGcEpSRUZVZU5waS9QLy9Qd01sZ0hIQURXRDQvLzgvTnR5QVF4d0Q0NUtBQVFkS0Rmai8vLy8vL2ZnTUlzWUFaSU13MURLUkVGd09EQXdNLzRrTlJLcTY0QUFEQTRNakZET1E2Z0t5WTRIb2RNQTQ5UE1DeFFZQUJnQVZZSHNqeVoxeDdRQUFBQUJKUlU1RXJrSmdnZz09KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnRKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z2lRRU5EQXdNLy9IZ0JtTENBRi9BTUJMakJVZWl4Zi8vLzQ4TDcvK1BDdlpqVTRmUEFBYzBBeHl3cWNNWEN3ZWdHSjFOY2tMNmp4NXdwS1lEeHFHWEVra0NnQUVBbXJxQkllamRnbmdBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5hY2NlcHQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTNiY2U0OworICBjb2xvcjogI2ZmZgorfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLmFjY2VwdCB0ZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS94LXBuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTUyZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKQEAgLTAsMCArMSwzOCBAQAordGFibGUudHJlZXRhYmxlIHNwYW4uZmlsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVFBQUFDMStqZnFBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQURvU1VSQlZCZ1pCY0V4YmxOQkdBYkEyY2VlZ1RSQnVJS09naWloU1pOVGNDNUxVSEFpaE5KUjBrR0tDRGNZSlk2RDMvNzdNZE9pblR2ekFnQ3c4eXNUaEl2bi9Wb2pJeU1qSXlQUCtiUzFzVVFJVjJzOTVwQkREdm1iUC9tZGtmdDgzdHBZZ3VacTVKaC9PZWFZaCt5enk4aFRIdk5sYXhOTmN6bStsYTlPVGxhcjFVZEEvK0MyQTR0clJDbkQzalM4QkIxb2JxMkdrNkdVNlFiUUFTNEJVYVlTUUFmNGJoaEtLVEZkQXpyQU93QXhFVUFIK0tFTTAxU1kzZ002d0JzRUFRQjBnSittYVpvQzNnSTZpUFlhQUlCSnNpUm1IVTBBQUxPZUZDM2FLMmNXQUFDVVhlNytBd08wbGM5ZVRIWVRBQUFBQUVsRlRrU3VRbUNDKTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZm9sZGVyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhKWlR3QUFBR3JTVVJCVkRqTHhaTzdpaFJCRklhLzZ1MFpXN0dIQlVWMFVRUVRaemQzUWRoTVF4T2Z3TVJYRUFOQk1OUVgwTXpBekZBd0V6SHdBUmJORkRkd0VkMzFNajNYN2E2dU9yOUJ0ek5qWWpLQko2bmljUDd2M0txY0pGYXhoQlZ0WlVBSzhPSGxsZDJzdDdYbDNESlBWT05QK3pFVVY0SHFMNVVEWUhyNXh2dVFBamdsL1FzN1R6dk9PVkFqeGpsQytlUFN3ZTZEZmJWZWdMVnVUNHIxNGVUcjZ6dkE4eFNBb0JMeng2cHZqNGwrRFpJZXp1VmtHOWZZMkg3WVJRSU1aSUJ3eWNtekgxL3MzRjhBYXBmSVBORjNrUWs3K2t3OVBXQnkrSVpPZGc1VWczbWtBQVR5L3QwdXNvdnpHZUNVV1RqQ3owQitTajBla2ZkdmtaM2FiQnYrVTRHYUN0SjFpRW02QU5RSjZmRXpyRy9lbmdjS3cvd1hRdkVLeFNFS1F4UkdLRTdJenQrRFNpd0JKTVVTbTcxcmd1TVloUUtyQnlnT0lSU3RmNFRpRkZSQnZiUkdLaVFMV1AyOXlSU0hLQlR0ZmRCbUhzMEJVcGd2dGdGNHlSRlIrTlVLaTBYWmNZakNlQ0cyc21rekxBSGtiUkJtUDAvVWsyNk81WW5VQWN0QnAxR3NBSStTNW5SSkpKYWw1SzFhQU1ycTBkNlRtOXVJNnpqeWY3NWRBZTZ0eC9Tc1dlRC8vbzIvQWI2SUgzL2gyNXBPQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIbEpSRUZVZU5yY1Uxc05nREFRNndnbWNBTTJNSUNHR2xnMWdKbk56V1FjdndRR3kxajRvVWwvN3RIMG1wd3pNN1NnUXlPK0VaQVVXaDJNa2t6U1doSnd1UkFsSFlzSndFd3l2czFnQUJEdXpxb0pjVHc1cXhhSUpOMGJnUVJnSWpubG1uMWhlU081UEU2WTJZWGUrNUNyNStoKytnczEyQWNBUzZGUys3WU9zajRBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUhGSlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmd2aGZhMjl2M016QXdPT0RSYzZDeXN0SVJieGkwdDdmakRKakt5a3BHWXJ3d2kxaHhuTEhRM3Q3K2pJR0JRUkpKNkhsbFphVVVLWUVZUllCUE9CMGdCU2hLd0tHQS8vLy80OFZ0YlczLzhjbFRuQklIM2dDS2t6SmdBR3ZCWDBkRG0wc0NBQUFBQUVsRlRrU3VRbUNDKTsKK30KKworCisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQuc2VsZWN0ZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGcEpSRUZVZU5waS9QLy9Qd01sZ0hIQURXRDQvLzgvTnR5QVF4d0Q0NUtBQVFkS0Rmai8vLy8vL2ZnTUlzWUFaSU13MURLUkVGd09EQXdNLzRrTlJLcTY0QUFEQTRNakZET1E2Z0t5WTRIb2RNQTQ5UE1DeFFZQUJnQVZZSHNqeVoxeDdRQUFBQUJKUlU1RXJrSmdnZz09KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnRKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z2lRRU5EQXdNLy9IZ0JtTENBRi9BTUJMakJVZWl4Zi8vLzQ4TDcvK1BDdlpqVTRmUEFBYzBBeHl3cWNNWEN3ZWdHSjFOY2tMNmp4NXdwS1lEeHFHWEVra0NnQUVBbXJxQkllamRnbmdBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5hY2NlcHQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTNiY2U0OworICBjb2xvcjogI2ZmZgorfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLmFjY2VwdCB0ZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS94LXBuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9wcmV0dGlmeS5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL3ByZXR0aWZ5LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzE3YTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9wcmV0dGlmeS5jc3MKQEAgLTAsMCArMSBAQAorLnBsbntjb2xvcjojMDAwfUBtZWRpYSBzY3JlZW57LnN0cntjb2xvcjojMDgwfS5rd2R7Y29sb3I6IzAwOH0uY29te2NvbG9yOiM4MDB9LnR5cHtjb2xvcjojNjA2fS5saXR7Y29sb3I6IzA2Nn0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNjYwfS50YWd7Y29sb3I6IzAwOH0uYXRue2NvbG9yOiM2MDZ9LmF0dntjb2xvcjojMDgwfS5kZWMsLnZhcntjb2xvcjojNjA2fS5mdW57Y29sb3I6cmVkfX1AbWVkaWEgcHJpbnQscHJvamVjdGlvbnsuc3Rye2NvbG9yOiMwNjB9Lmt3ZHtjb2xvcjojMDA2O2ZvbnQtd2VpZ2h0OmJvbGR9LmNvbXtjb2xvcjojNjAwO2ZvbnQtc3R5bGU6aXRhbGljfS50eXB7Y29sb3I6IzQwNDtmb250LXdlaWdodDpib2xkfS5saXR7Y29sb3I6IzA0NH0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNDQwfS50YWd7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5hdG57Y29sb3I6IzQwNH0uYXR2e2NvbG9yOiMwNjB9fXByZS5wcmV0dHlwcmludHtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICM4ODh9b2wubGluZW51bXN7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MH1saS5MMCxsaS5MMSxsaS5MMixsaS5MMyxsaS5MNSxsaS5MNixsaS5MNyxsaS5MOHtsaXN0LXN0eWxlLXR5cGU6bm9uZX1saS5MMSxsaS5MMyxsaS5MNSxsaS5MNyxsaS5MOXtiYWNrZ3JvdW5kOiNlZWV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL3NjcmVlbi5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL3NjcmVlbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzM2VmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3Mvc2NyZWVuLmNzcwpAQCAtMCwwICsxLDI4IEBACitib2R5IHsKKyAgYmFja2dyb3VuZDogI2RkZDsKKyAgY29sb3I6ICMwMDA7CisgIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBsaW5lLWhlaWdodDogMS41OworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7Cit9CisKKyNtYWluIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgYm9yZGVyLWxlZnQ6IDIwcHggc29saWQgI2VlZTsKKyAgYm9yZGVyLXJpZ2h0OiAyMHB4IHNvbGlkICNlZWU7CisgIG1hcmdpbjogMCBhdXRvOworICBtYXgtd2lkdGg6IDgwMHB4OworICBwYWRkaW5nOiAyMHB4OworfQorCitwcmUubGlzdGluZyB7CisgIGJhY2tncm91bmQ6ICNlZWU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIG1hcmdpbjogLjZlbSAwIC4zZW0gMDsKKyAgcGFkZGluZzogLjFlbSAuM2VtOworfQorCitwcmUubGlzdGluZyBiIHsKKyAgY29sb3I6ICNmMDA7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvRm9udEF3ZXNvbWUub3RmIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL0ZvbnRBd2Vzb21lLm90ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDA0OWJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL0ZvbnRBd2Vzb21lLm90ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3QgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4MTAxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5zdmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwYWZlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2ZwpAQCAtMCwwICsxLDI4NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PgorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cis8bWV0YWRhdGE+PC9tZXRhZGF0YT4KKzxkZWZzPgorPGZvbnQgaWQ9ImZvbnRhd2Vzb21lcmVndWxhciIgaG9yaXotYWR2LXg9IjE1MzYiID4KKzxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxNzkyIiBhc2NlbnQ9IjE1MzYiIGRlc2NlbnQ9Ii0yNTYiIC8+Cis8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iNDQ4IiAvPgorPGdseXBoIHVuaWNvZGU9IiAiICBob3Jpei1hZHYteD0iNDQ4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDA5OyIgaG9yaXotYWR2LXg9IjQ0OCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhMDsiIGhvcml6LWFkdi14PSI0NDgiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YTg7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhOTsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YjQ7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hjNjsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNzY4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDE7IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDI7IiBob3Jpei1hZHYteD0iNzY4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDM7IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDQ7IiBob3Jpei1hZHYteD0iNTEyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzg0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDY7IiBob3Jpei1hZHYteD0iMjU2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDc7IiBob3Jpei1hZHYteD0iMjU2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDk7IiBob3Jpei1hZHYteD0iMzA3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMGE7IiBob3Jpei1hZHYteD0iODUiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIzMDciIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjA1ZjsiIGhvcml6LWFkdi14PSIzODQiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjEyMjsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIyMWU7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjYwOyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMDsiIGhvcml6LWFkdi14PSI1MDAiIGQ9Ik0wIDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDA7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2OTkgMTM1MHEwIC0zNSAtNDMgLTc4bC02MzIgLTYzMnYtNzY4aDMyMHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgzMjB2NzY4bC02MzIgNjMycS00MyA0MyAtNDMgNzhxMCAyMyAxOCAzNi41dDM4IDE3LjV0NDMgNGgxNDA4cTIzIDAgNDMgLTR0MzggLTE3LjV0MTggLTM2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDE7IiBkPSJNMTUzNiAxMzEydi0xMTIwcTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5dDM0IDg5dDg2IDYwLjV0MTAzLjUgMzJ0OTYuNSAxMC41cTEwNSAwIDE5MiAtMzl2NTM3bC03NjggLTIzN3YtNzA5cTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5IHQzNCA4OXQ4NiA2MC41dDEwMy41IDMydDk2LjUgMTAuNXExMDUgMCAxOTIgLTM5djk2N3EwIDMxIDE5IDU2LjV0NDkgMzUuNWw4MzIgMjU2cTEyIDQgMjggNHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDI7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41IHQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41dDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTIyMCAtMTI0IC0zOTlsMzQzIC0zNDNxMzcgLTM3IDM3IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwMzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY2NCAzMnY3NjhxLTMyIC0zNiAtNjkgLTY2cS0yNjggLTIwNiAtNDI2IC0zMzhxLTUxIC00MyAtODMgLTY3dC04Ni41IC00OC41dC0xMDIuNSAtMjQuNWgtMWgtMXEtNDggMCAtMTAyLjUgMjQuNXQtODYuNSA0OC41dC04MyA2N3EtMTU4IDEzMiAtNDI2IDMzOHEtMzcgMzAgLTY5IDY2di03NjhxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNDcycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgMTA4M3YxMXYxMy41dC0wLjUgMTMgdC0zIDEyLjV0LTUuNSA5dC05IDcuNXQtMTQgMi41aC0xNDcycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXEwIC0xNjggMTQ3IC0yODRxMTkzIC0xNTIgNDAxIC0zMTdxNiAtNSAzNSAtMjkuNXQ0NiAtMzcuNXQ0NC41IC0zMS41dDUwLjUgLTI3LjV0NDMgLTloMWgxcTIwIDAgNDMgOXQ1MC41IDI3LjV0NDQuNSAzMS41dDQ2IDM3LjV0MzUgMjkuNXEyMDggMTY1IDQwMSAzMTdxNTQgNDMgMTAwLjUgMTE1LjV0NDYuNSAxMzEuNXogTTE3OTIgMTEyMHYtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IC0xMjhxLTI2IDAgLTQ0IDE4bC02MjQgNjAycS0xMCA4IC0yNy41IDI2dC01NS41IDY1LjV0LTY4IDk3LjV0LTUzLjUgMTIxdC0yMy41IDEzOHEwIDIyMCAxMjcgMzQ0dDM1MSAxMjRxNjIgMCAxMjYuNSAtMjEuNXQxMjAgLTU4dDk1LjUgLTY4LjV0NzYgLTY4cTM2IDM2IDc2IDY4dDk1LjUgNjguNXQxMjAgNTh0MTI2LjUgMjEuNXEyMjQgMCAzNTEgLTEyNHQxMjcgLTM0NHEwIC0yMjEgLTIyOSAtNDUwbC02MjMgLTYwMCBxLTE4IC0xOCAtNDQgLTE4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA1OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtMjEgLTEwLjUgLTM1LjV0LTMwLjUgLTE0LjVxLTE5IDAgLTQwIDEybC00NDkgMjM2bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1IGw1MDIgLTczcTU2IC05IDU2IC00NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTEzNyA1MzJsMzA2IDI5N2wtNDIyIDYybC0xODkgMzgybC0xODkgLTM4MmwtNDIyIC02MmwzMDYgLTI5N2wtNzMgLTQyMWwzNzggMTk5bDM3NyAtMTk5ek0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtNTAgLTQxIC01MHEtMTkgMCAtNDAgMTJsLTQ0OSAyMzZsLTQ0OSAtMjM2cS0yMiAtMTIgLTQwIC0xMnEtMjEgMCAtMzEuNSAxNC41dC0xMC41IDM1LjVxMCA2IDIgMjBsODYgNTAwIGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1bDUwMiAtNzNxNTYgLTkgNTYgLTQ2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA3OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA4IDEzMXEwIC0xMjAgLTczIC0xODkuNXQtMTk0IC02OS41aC04NzRxLTEyMSAwIC0xOTQgNjkuNXQtNzMgMTg5LjVxMCA1MyAzLjUgMTAzLjV0MTQgMTA5dDI2LjUgMTA4LjV0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxOSAwIDQyIC0yMS41dDc0LjUgLTQ4dDEwOCAtNDh0MTMzLjUgLTIxLjV0MTMzLjUgMjEuNXQxMDggNDh0NzQuNSA0OHQ0MiAyMS41cTYxIDAgMTExLjUgLTIwdDg1LjUgLTUzLjV0NjIgLTgxIHQ0MyAtOTcuNXQyNi41IC0xMDguNXQxNCAtMTA5dDMuNSAtMTAzLjV6TTEwODggMTAyNHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41dC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwODsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMzg0IC02NHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDMyMHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDcwNHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjggcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE0MDggLTY0djUxMnEwIDI2IC0xOSA0NXQtNDUgMTloLTc2OHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUxMnEwIC0yNiAxOSAtNDV0NDUgLTE5aDc2OHEyNiAwIDQ1IDE5dDE5IDQ1ek0zODQgMTA4OHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1IHQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgLTY0djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNDA4IDcwNHY1MTJxMCAyNiAtMTkgNDV0LTQ1IDE5aC03NjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di01MTJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAzMjB2MTI4IHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIDcwNHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAxMDg4djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5IHQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTkyMCAxMjQ4di0xMzQ0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMzQ0cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA5OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03NjggNTEydi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek03NjggMTI4MHYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHpNMTY2NCA1MTJ2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzggaC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek0xNjY0IDEyODB2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTUxMnEtNTIgMCAtOTAgMzh0LTM4IDkwdjM4NHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjAgcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOCBoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgMTMxMnYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiA4MDB2LTE5MiBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGI7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjAgcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOCBoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg5NjBxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDBjOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjcxIDk3MHEwIC00MCAtMjggLTY4bC03MjQgLTcyNGwtMTM2IC0xMzZxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMTM2IDEzNmwtMzYyIDM2MnEtMjggMjggLTI4IDY4dDI4IDY4bDEzNiAxMzZxMjggMjggNjggMjh0NjggLTI4bDI5NCAtMjk1bDY1NiA2NTdxMjggMjggNjggMjh0NjggLTI4bDEzNiAtMTM2cTI4IC0yOCAyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGQ7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTEyOTggMjE0cTAgLTQwIC0yOCAtNjhsLTEzNiAtMTM2cS0yOCAtMjggLTY4IC0yOHQtNjggMjhsLTI5NCAyOTRsLTI5NCAtMjk0cS0yOCAtMjggLTY4IC0yOHQtNjggMjhsLTEzNiAxMzZxLTI4IDI4IC0yOCA2OHQyOCA2OGwyOTQgMjk0bC0yOTQgMjk0cS0yOCAyOCAtMjggNjh0MjggNjhsMTM2IDEzNnEyOCAyOCA2OCAyOHQ2OCAtMjhsMjk0IC0yOTRsMjk0IDI5NHEyOCAyOCA2OCAyOHQ2OCAtMjhsMTM2IC0xMzZxMjggLTI4IDI4IC02OCB0LTI4IC02OGwtMjk0IC0yOTRsMjk0IC0yOTRxMjggLTI4IDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwZTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTAyNCA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMjI0di0yMjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djIyNGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgyMjR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjRoMjI0IHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtNTQgMCAtOTAgMzhsLTM0MyAzNDJxLTE3OSAtMTI0IC0zOTkgLTEyNHEtMTQzIDAgLTI3My41IDU1LjUgdC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjV0MjczLjUgLTU1LjV0MjI1IC0xNTB0MTUwIC0yMjV0NTUuNSAtMjczLjVxMCAtMjIwIC0xMjQgLTM5OWwzNDMgLTM0M3EzNyAtMzcgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDEwOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMDI0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC01NzZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDU3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6IE0xNjY0IC0xMjhxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjV0MjczLjUgLTU1LjV0MjI1IC0xNTB0MTUwIC0yMjV0NTUuNSAtMjczLjVxMCAtMjIwIC0xMjQgLTM5OWwzNDMgLTM0M3EzNyAtMzcgMzcgLTkweiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxMTsiIGQ9Ik0xNTM2IDY0MHEwIC0xNTYgLTYxIC0yOTh0LTE2NCAtMjQ1dC0yNDUgLTE2NHQtMjk4IC02MXQtMjk4IDYxdC0yNDUgMTY0dC0xNjQgMjQ1dC02MSAyOThxMCAxODIgODAuNSAzNDN0MjI2LjUgMjcwcTQzIDMyIDk1LjUgMjV0ODMuNSAtNTBxMzIgLTQyIDI0LjUgLTk0LjV0LTQ5LjUgLTg0LjVxLTk4IC03NCAtMTUxLjUgLTE4MXQtNTMuNSAtMjI4cTAgLTEwNCA0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41IHQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjVxMCAxMjEgLTUzLjUgMjI4dC0xNTEuNSAxODFxLTQyIDMyIC00OS41IDg0LjV0MjQuNSA5NC41cTMxIDQzIDg0IDUwdDk1IC0yNXExNDYgLTEwOSAyMjYuNSAtMjcwdDgwLjUgLTM0M3pNODk2IDE0MDh2LTY0MHEwIC01MiAtMzggLTkwdC05MCAtMzh0LTkwIDM4dC0zOCA5MHY2NDBxMCA1MiAzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDEyOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgOTZ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek02NDAgMjI0di0zMjBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjMyMHEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTAyNCA0ODB2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjMgdjU3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTQwOCA4NjR2LTk2MHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2OTYwcTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNzkyIDEzNzZ2LTE0NzJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE0NzJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTM7IiBkPSJNMTAyNCA2NDBxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdDc1IC0xODF0MTgxIC03NXQxODEgNzV0NzUgMTgxek0xNTM2IDc0OXYtMjIycTAgLTEyIC04IC0yM3QtMjAgLTEzbC0xODUgLTI4cS0xOSAtNTQgLTM5IC05MXEzNSAtNTAgMTA3IC0xMzhxMTAgLTEyIDEwIC0yNXQtOSAtMjNxLTI3IC0zNyAtOTkgLTEwOHQtOTQgLTcxcS0xMiAwIC0yNiA5bC0xMzggMTA4cS00NCAtMjMgLTkxIC0zOCBxLTE2IC0xMzYgLTI5IC0xODZxLTcgLTI4IC0zNiAtMjhoLTIyMnEtMTQgMCAtMjQuNSA4LjV0LTExLjUgMjEuNWwtMjggMTg0cS00OSAxNiAtOTAgMzdsLTE0MSAtMTA3cS0xMCAtOSAtMjUgLTlxLTE0IDAgLTI1IDExcS0xMjYgMTE0IC0xNjUgMTY4cS03IDEwIC03IDIzcTAgMTIgOCAyM3ExNSAyMSA1MSA2Ni41dDU0IDcwLjVxLTI3IDUwIC00MSA5OWwtMTgzIDI3cS0xMyAyIC0yMSAxMi41dC04IDIzLjV2MjIycTAgMTIgOCAyM3QxOSAxMyBsMTg2IDI4cTE0IDQ2IDM5IDkycS00MCA1NyAtMTA3IDEzOHEtMTAgMTIgLTEwIDI0cTAgMTAgOSAyM3EyNiAzNiA5OC41IDEwNy41dDk0LjUgNzEuNXExMyAwIDI2IC0xMGwxMzggLTEwN3E0NCAyMyA5MSAzOHExNiAxMzYgMjkgMTg2cTcgMjggMzYgMjhoMjIycTE0IDAgMjQuNSAtOC41dDExLjUgLTIxLjVsMjggLTE4NHE0OSAtMTYgOTAgLTM3bDE0MiAxMDdxOSA5IDI0IDlxMTMgMCAyNSAtMTBxMTI5IC0xMTkgMTY1IC0xNzBxNyAtOCA3IC0yMiBxMCAtMTIgLTggLTIzcS0xNSAtMjEgLTUxIC02Ni41dC01NCAtNzAuNXEyNiAtNTAgNDEgLTk4bDE4MyAtMjhxMTMgLTIgMjEgLTEyLjV0OCAtMjMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxNDsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNTEyIDgwMHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek03NjggODAwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgODAwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2IHEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xMTUyIDc2djk0OGgtODk2di05NDhxMCAtMjIgNyAtNDAuNXQxNC41IC0yN3QxMC41IC04LjVoODMycTMgMCAxMC41IDguNXQxNC41IDI3dDcgNDAuNXpNNDgwIDExNTJoNDQ4bC00OCAxMTdxLTcgOSAtMTcgMTFoLTMxN3EtMTAgLTIgLTE3IC0xMXpNMTQwOCAxMTIwdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTQ4cTAgLTgzIC00NyAtMTQzLjV0LTExMyAtNjAuNWgtODMyIHEtNjYgMCAtMTEzIDU4LjV0LTQ3IDE0MS41djk1MmgtOTZxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMzA5bDcwIDE2N3ExNSAzNyA1NCA2M3Q3OSAyNmgzMjBxNDAgMCA3OSAtMjZ0NTQgLTYzbDcwIC0xNjdoMzA5cTE0IDAgMjMgLTl0OSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0MDggNTQ0di00ODBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0zODR2Mzg0aC0yNTZ2LTM4NGgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDV2NDgwcTAgMSAwLjUgM3QwLjUgM2w1NzUgNDc0bDU3NSAtNDc0cTEgLTIgMSAtNnpNMTYzMSA2MTNsLTYyIC03NHEtOCAtOSAtMjEgLTExaC0zcS0xMyAwIC0yMSA3bC02OTIgNTc3bC02OTIgLTU3N3EtMTIgLTggLTI0IC03cS0xMyAyIC0yMSAxMWwtNjIgNzRxLTggMTAgLTcgMjMuNXQxMSAyMS41IGw3MTkgNTk5cTMyIDI2IDc2IDI2dDc2IC0yNmwyNDQgLTIwNHYxOTVxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTQwOGwyMTkgLTE4MnExMCAtOCAxMSAtMjEuNXQtNyAtMjMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxNjsiIGhvcml6LWFkdi14PSIxMjgwIiBkPSJNMTI4IDBoMTAyNHY3NjhoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNTEydi0xMjgwek03NjggODk2aDI5OWwtMjk5IDI5OXYtMjk5ek0xMjgwIDc2OHYtODAwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTA4OHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGg1NDRxNDAgMCA4OCAtMjB0NzYgLTQ4bDQwOCAtNDA4cTI4IC0yOCA0OCAtNzZ0MjAgLTg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE3OyIgZD0iTTEwODggNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTM4NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djQ0OHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMzUyaDI4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjV0LTE5OC41IC00MC41IHQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNSB0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTg7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTExMTEgNTQwdjRsLTI0IDMyMHEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aC0xODZxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0yNCAtMzIwdi00cS0xIC0xMiA4IC0yMHQyMSAtOGgyNDRxMTIgMCAyMSA4dDggMjB6TTE4NzAgNzNxMCAtNzMgLTQ2IC03M2gtNzA0cTEzIDAgMjIgOS41dDggMjIuNWwtMjAgMjU2cS0xIDEzIC0xMSAyMi41dC0yMyA5LjVoLTI3MnEtMTMgMCAtMjMgLTkuNXQtMTEgLTIyLjVsLTIwIC0yNTYgcS0xIC0xMyA4IC0yMi41dDIyIC05LjVoLTcwNHEtNDYgMCAtNDYgNzNxMCA1NCAyNiAxMTZsNDE3IDEwNDRxOCAxOSAyNiAzM3QzOCAxNGgzMzlxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0xNSAtMTkycS0xIC0xNCA4IC0yM3QyMiAtOWgxNjZxMTMgMCAyMiA5dDggMjNsLTE1IDE5MnEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aDMzOXEyMCAwIDM4IC0xNHQyNiAtMzNsNDE3IC0xMDQ0cTI2IC02MiAyNiAtMTE2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE5OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMzM5IDcyOXExNyAtNDEgLTE0IC03MGwtNDQ4IC00NDhxLTE4IC0xOSAtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMzEgMjkgLTE0IDcwcTE3IDM5IDU5IDM5aDI1NnY0NDhxMCAyNiAxOSA0NXQ0NSAxOWgyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1di00NDhoMjU2cTQyIDAgNTkgLTM5ek0xNjMyIDUxMnExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTYwMHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzIHQyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzdi0zNTJoMTE1MnYzNTJxMCAxNCA5IDIzdDIzIDloMTkyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFhOyIgZD0iTTExMjAgNjA4cTAgLTEyIC0xMCAtMjRsLTMxOSAtMzE5cS05IC05IC0yMyAtOXQtMjMgOWwtMzIwIDMyMHEtOSA5IC05IDIzcTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkydjM1MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTM1MmgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNSB0LTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41IHQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxYjsiIGQ9Ik0xMTIwIDY3MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnYtMzUycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MzUyaC0xOTJxLTE0IDAgLTIzIDl0LTkgMjNxMCAxMiAxMCAyNGwzMTkgMzE5cTkgOSAyMyA5dDIzIC05bDMyMCAtMzIwcTkgLTkgOSAtMjN6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjUgdC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41IHQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMWM7IiBkPSJNMTAyMyA1NzZoMzE2cS0xIDMgLTIuNSA4dC0yLjUgOGwtMjEyIDQ5NmgtNzA4bC0yMTIgLTQ5NnEtMSAtMiAtMi41IC04dC0yLjUgLThoMzE2bDk1IC0xOTJoMzIwek0xNTM2IDU0NnYtNDgycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ4MnEwIDYyIDI1IDEyM2wyMzggNTUycTEwIDI1IDM2LjUgNDJ0NTIuNSAxN2g4MzJxMjYgMCA1Mi41IC0xN3QzNi41IC00MmwyMzggLTU1MiBxMjUgLTYxIDI1IC0xMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMWQ7IiBkPSJNMTE1MiA2NDBxMCAtMzcgLTMzIC01NmwtNTEyIC0yODhxLTE0IC04IC0zMSAtOHQtMzIgOXEtMzIgMTggLTMyIDU1djU3NnEwIDM3IDMyIDU1cTMxIDIwIDYzIDFsNTEyIC0yODhxMzMgLTE5IDMzIC01NnpNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNSB0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFlOyIgZD0iTTE1MzYgMTI4MHYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDQ4cS00MiAwIC01OSA0MHEtMTcgMzkgMTQgNjlsMTM4IDEzOHEtMTQ4IDEzNyAtMzQ5IDEzN3EtMTA0IDAgLTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXExNjkgMCAzMDQgOTkuNXQxODUgMjYxLjVxNyAyMyAzMCAyM2gxOTkgcTE2IDAgMjUgLTEycTEwIC0xMyA3IC0yN3EtMzkgLTE3NSAtMTQ3LjUgLTMxMnQtMjY2IC0yMTN0LTMzNi41IC03NnEtMTU2IDAgLTI5OCA2MXQtMjQ1IDE2NHQtMTY0IDI0NXQtNjEgMjk4dDYxIDI5OHQxNjQgMjQ1dDI0NSAxNjR0Mjk4IDYxcTE0NyAwIDI4NC41IC01NS41dDI0NC41IC0xNTYuNWwxMzAgMTI5cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjE7IiBkPSJNMTUxMSA0ODBxMCAtNSAtMSAtN3EtNjQgLTI2OCAtMjY4IC00MzQuNXQtNDc4IC0xNjYuNXEtMTQ2IDAgLTI4Mi41IDU1dC0yNDMuNSAxNTdsLTEyOSAtMTI5cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMTM3IC0xMzdxNzEgLTY2IDE2MSAtMTAydDE4NyAtMzZxMTM0IDAgMjUwIDY1dDE4NiAxNzlxMTEgMTcgNTMgMTE3IHE4IDIzIDMwIDIzaDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgMTI4MHYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsMTM4IDEzOHEtMTQ4IDEzNyAtMzQ5IDEzN3EtMTM0IDAgLTI1MCAtNjV0LTE4NiAtMTc5cS0xMSAtMTcgLTUzIC0xMTdxLTggLTIzIC0zMCAtMjNoLTE5OXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djdxNjUgMjY4IDI3MCA0MzQuNXQ0ODAgMTY2LjUgcTE0NiAwIDI4NCAtNTUuNXQyNDUgLTE1Ni41bDEzMCAxMjlxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzg0IDM1MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0zODQgODY0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgMzUydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTE1MzYgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTUzNiA4NjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTYwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxMTMgMCAyMi41IC05LjUgdDkuNSAtMjIuNXpNMTY2NCAxNjB2ODMycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTQ3MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTgzMnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE0NzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTc5MiAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzIC00NyB0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyMzsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNzA0IDUxMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXEwIC0zNyAxOSAtNjd0NTEgLTQ3bC02OSAtMjI5cS01IC0xNSA1IC0yOHQyNiAtMTNoMTkycTE2IDAgMjYgMTN0NSAyOGwtNjkgMjI5cTMyIDE3IDUxIDQ3dDE5IDY3ek0zMjAgNzY4aDUxMnYxOTJxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdi0xOTJ6TTExNTIgNjcydi01NzZxMCAtNDAgLTI4IC02OCB0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2NTc2cTAgNDAgMjggNjh0NjggMjhoMzJ2MTkycTAgMTg0IDEzMiAzMTZ0MzE2IDEzMnQzMTYgLTEzMnQxMzIgLTMxNnYtMTkyaDMycTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzIwIDEyODBxMCAtNzIgLTY0IC0xMTB2LTEyNjZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djEyNjZxLTY0IDM4IC02NCAxMTBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTc5MiAxMjE2di03NjNxMCAtMjUgLTEyLjUgLTM4LjV0LTM5LjUgLTI3LjVxLTIxNSAtMTE2IC0zNjkgLTExNnEtNjEgMCAtMTIzLjUgMjJ0LTEwOC41IDQ4IHQtMTE1LjUgNDh0LTE0Mi41IDIycS0xOTIgMCAtNDY0IC0xNDZxLTE3IC05IC0zMyAtOXEtMjYgMCAtNDUgMTl0LTE5IDQ1djc0MnEwIDMyIDMxIDU1cTIxIDE0IDc5IDQzcTIzNiAxMjAgNDIxIDEyMHExMDcgMCAyMDAgLTI5dDIxOSAtODhxMzggLTE5IDg4IC0xOXE1NCAwIDExNy41IDIxdDExMCA0N3Q4OCA0N3Q1NC41IDIxcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA2NTBxMCAtMTY2IC02MCAtMzE0bC0yMCAtNDlsLTE4NSAtMzNxLTIyIC04MyAtOTAuNSAtMTM2LjV0LTE1Ni41IC01My41di0zMnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3YtMzJxNzEgMCAxMzAgLTM1LjV0OTMgLTk1LjVsNjggMTJxMjkgOTUgMjkgMTkzcTAgMTQ4IC04OCAyNzl0LTIzNi41IDIwOXQtMzE1LjUgNzggdC0zMTUuNSAtNzh0LTIzNi41IC0yMDl0LTg4IC0yNzlxMCAtOTggMjkgLTE5M2w2OCAtMTJxMzQgNjAgOTMgOTUuNXQxMzAgMzUuNXYzMnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MzJxLTg4IDAgLTE1Ni41IDUzLjV0LTkwLjUgMTM2LjVsLTE4NSAzM2wtMjAgNDlxLTYwIDE0OCAtNjAgMzE0cTAgMTUxIDY3IDI5MXQxNzkgMjQyLjUgdDI2NiAxNjMuNXQzMjAgNjF0MzIwIC02MXQyNjYgLTE2My41dDE3OSAtMjQyLjV0NjcgLTI5MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNjsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDI3OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xMTUyIDY0MHEwIC03NiAtNDIuNSAtMTQxLjV0LTExMi41IC05My41cS0xMCAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE4LjV0LTE5IDQ1LjVxMCAyMSAxMiAzNS41dDI5IDI1dDM0IDIzdDI5IDM1LjUgdDEyIDU3dC0xMiA1N3QtMjkgMzUuNXQtMzQgMjN0LTI5IDI1dC0xMiAzNS41cTAgMjcgMTkgNDUuNXQ0NSAxOC41cTE1IDAgMjUgLTVxNzAgLTI3IDExMi41IC05M3Q0Mi41IC0xNDJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjg7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCAxMTg0di0xMDg4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTMzMyAzMzNoLTI2MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDI2MmwzMzMgMzMzcTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTExNTIgNjQwcTAgLTc2IC00Mi41IC0xNDEuNXQtMTEyLjUgLTkzLjVxLTEwIC01IC0yNSAtNXEtMjYgMCAtNDUgMTguNXQtMTkgNDUuNXEwIDIxIDEyIDM1LjV0MjkgMjV0MzQgMjN0MjkgMzUuNSB0MTIgNTd0LTEyIDU3dC0yOSAzNS41dC0zNCAyM3QtMjkgMjV0LTEyIDM1LjVxMCAyNyAxOSA0NS41dDQ1IDE4LjVxMTUgMCAyNSAtNXE3MCAtMjcgMTEyLjUgLTkzdDQyLjUgLTE0MnpNMTQwOCA2NDBxMCAtMTUzIC04NSAtMjgyLjV0LTIyNSAtMTg4LjVxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDYgMTl0LTE5IDQ1cTAgMzkgMzkgNTlxNTYgMjkgNzYgNDRxNzQgNTQgMTE1LjUgMTM1LjV0NDEuNSAxNzMuNXQtNDEuNSAxNzMuNSB0LTExNS41IDEzNS41cS0yMCAxNSAtNzYgNDRxLTM5IDIwIC0zOSA1OXEwIDI2IDE5IDQ1dDQ1IDE5cTEzIDAgMjYgLTVxMTQwIC01OSAyMjUgLTE4OC41dDg1IC0yODIuNXpNMTY2NCA2NDBxMCAtMjMwIC0xMjcgLTQyMi41dC0zMzggLTI4My41cS0xMyAtNSAtMjYgLTVxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDM2IDM5IDU5cTcgNCAyMi41IDEwLjV0MjIuNSAxMC41cTQ2IDI1IDgyIDUxcTEyMyA5MSAxOTIgMjI3dDY5IDI4OXQtNjkgMjg5IHQtMTkyIDIyN3EtMzYgMjYgLTgyIDUxcS03IDQgLTIyLjUgMTAuNXQtMjIuNSAxMC41cS0zOSAyMyAtMzkgNTlxMCAyNiAxOSA0NXQ0NSAxOXExMyAwIDI2IC01cTIxMSAtOTEgMzM4IC0yODMuNXQxMjcgLTQyMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDI5OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMzg0di0xMjhoLTEyOHYxMjhoMTI4ek0zODQgMTE1MnYtMTI4aC0xMjh2MTI4aDEyOHpNMTE1MiAxMTUydi0xMjhoLTEyOHYxMjhoMTI4ek0xMjggMTI5aDM4NHYzODNoLTM4NHYtMzgzek0xMjggODk2aDM4NHYzODRoLTM4NHYtMzg0ek04OTYgODk2aDM4NHYzODRoLTM4NHYtMzg0ek02NDAgNjQwdi02NDBoLTY0MHY2NDBoNjQwek0xMTUyIDEyOHYtMTI4aC0xMjh2MTI4aDEyOHpNMTQwOCAxMjh2LTEyOGgtMTI4djEyOGgxMjh6IE0xNDA4IDY0MHYtMzg0aC0zODR2MTI4aC0xMjh2LTM4NGgtMTI4djY0MGgzODR2LTEyOGgxMjh2MTI4aDEyOHpNNjQwIDE0MDh2LTY0MGgtNjQwdjY0MGg2NDB6TTE0MDggMTQwOHYtNjQwaC02NDB2NjQwaDY0MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyYTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjcyIDE0MDh2LTE1MzZoLTY0djE1MzZoNjR6TTE0MDggMTQwOHYtMTUzNmgtNjR2MTUzNmg2NHpNMTU2OCAxNDA4di0xNTM2aC02NHYxNTM2aDY0ek01NzYgMTQwOHYtMTUzNmgtNjR2MTUzNmg2NHpNMTI4MCAxNDA4di0xNTM2aC0yNTZ2MTUzNmgyNTZ6TTg5NiAxNDA4di0xNTM2aC0xMjh2MTUzNmgxMjh6TTQ0OCAxNDA4di0xNTM2aC0xMjh2MTUzNmgxMjh6TTE3OTIgMTQwOHYtMTUzNmgtMTI4djE1MzZoMTI4ek0yNTYgMTQwOHYtMTUzNiBoLTI1NnYxNTM2aDI1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyYjsiIGQ9Ik00NDggMTA4OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUxNSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtNzE1IDcxNnEtMzggMzcgLTY0LjUgMTAxdC0yNi41IDExN3Y0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41IGw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDJjOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik00NDggMTA4OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUxNSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtNzE1IDcxNnEtMzggMzcgLTY0LjUgMTAxdC0yNi41IDExN3Y0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41IGw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxek0xODk5IDUxMnEwIC01MyAtMzcgLTkwbC00OTEgLTQ5MnEtMzkgLTM3IC05MSAtMzdxLTM2IDAgLTU5IDE0dC01MyA0NWw0NzAgNDcwcTM3IDM3IDM3IDkwcTAgNTIgLTM3IDkxbC03MTUgNzE0cS0zOCAzOCAtMTAyIDY0LjV0LTExNyAyNi41aDIyNHE1MyAwIDExNyAtMjYuNXQxMDIgLTY0LjVsNzE1IC03MTRxMzcgLTM5IDM3IC05MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyZDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYzOSAxMDU4cTQwIC01NyAxOCAtMTI5bC0yNzUgLTkwNnEtMTkgLTY0IC03Ni41IC0xMDcuNXQtMTIyLjUgLTQzLjVoLTkyM3EtNzcgMCAtMTQ4LjUgNTMuNXQtOTkuNSAxMzEuNXEtMjQgNjcgLTIgMTI3cTAgNCAzIDI3dDQgMzdxMSA4IC0zIDIxLjV0LTMgMTkuNXEyIDExIDggMjF0MTYuNSAyMy41dDE2LjUgMjMuNXEyMyAzOCA0NSA5MS41dDMwIDkxLjVxMyAxMCAwLjUgMzB0LTAuNSAyOHEzIDExIDE3IDI4dDE3IDIzIHEyMSAzNiA0MiA5MnQyNSA5MHExIDkgLTIuNSAzMnQwLjUgMjhxNCAxMyAyMiAzMC41dDIyIDIyLjVxMTkgMjYgNDIuNSA4NC41dDI3LjUgOTYuNXExIDggLTMgMjUuNXQtMiAyNi41cTIgOCA5IDE4dDE4IDIzdDE3IDIxcTggMTIgMTYuNSAzMC41dDE1IDM1dDE2IDM2dDE5LjUgMzJ0MjYuNSAyMy41dDM2IDExLjV0NDcuNSAtNS41bC0xIC0zcTM4IDkgNTEgOWg3NjFxNzQgMCAxMTQgLTU2dDE4IC0xMzBsLTI3NCAtOTA2IHEtMzYgLTExOSAtNzEuNSAtMTUzLjV0LTEyOC41IC0zNC41aC04NjlxLTI3IDAgLTM4IC0xNXEtMTEgLTE2IC0xIC00M3EyNCAtNzAgMTQ0IC03MGg5MjNxMjkgMCA1NiAxNS41dDM1IDQxLjVsMzAwIDk4N3E3IDIyIDUgNTdxMzggLTE1IDU5IC00M3pNNTc1IDEwNTZxLTQgLTEzIDIgLTIyLjV0MjAgLTkuNWg2MDhxMTMgMCAyNS41IDkuNXQxNi41IDIyLjVsMjEgNjRxNCAxMyAtMiAyMi41dC0yMCA5LjVoLTYwOHEtMTMgMCAtMjUuNSAtOS41IHQtMTYuNSAtMjIuNXpNNDkyIDgwMHEtNCAtMTMgMiAtMjIuNXQyMCAtOS41aDYwOHExMyAwIDI1LjUgOS41dDE2LjUgMjIuNWwyMSA2NHE0IDEzIC0yIDIyLjV0LTIwIDkuNWgtNjA4cS0xMyAwIC0yNS41IC05LjV0LTE2LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmU7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExNjQgMTQwOHEyMyAwIDQ0IC05cTMzIC0xMyA1Mi41IC00MXQxOS41IC02MnYtMTI4OXEwIC0zNCAtMTkuNSAtNjJ0LTUyLjUgLTQxcS0xOSAtOCAtNDQgLThxLTQ4IDAgLTgzIDMybC00NDEgNDI0bC00NDEgLTQyNHEtMzYgLTMzIC04MyAtMzNxLTIzIDAgLTQ0IDlxLTMzIDEzIC01Mi41IDQxdC0xOS41IDYydjEyODlxMCAzNCAxOS41IDYydDUyLjUgNDFxMjEgOSA0NCA5aDEwNDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTM4NCAwaDg5NnYyNTZoLTg5NnYtMjU2ek0zODQgNjQwaDg5NnYzODRoLTE2MHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MGgtNjQwdi02NDB6TTE1MzYgNTc2cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCA1NzZ2LTQxNnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTIyNHYtMTYwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjggdjE2MGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NDE2cTAgNzkgNTYuNSAxMzUuNXQxMzUuNSA1Ni41aDY0djU0NHEwIDQwIDI4IDY4dDY4IDI4aDY3MnE0MCAwIDg4IC0yMHQ3NiAtNDhsMTUyIC0xNTJxMjggLTI4IDQ4IC03NnQyMCAtODh2LTI1Nmg2NHE3OSAwIDEzNS41IC01Ni41dDU2LjUgLTEzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMwOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik05NjAgODY0cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41dC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjV0LTIwMy41IDg0LjV0LTg0LjUgMjAzLjV0ODQuNSAyMDMuNXQyMDMuNSA4NC41ek0xNjY0IDEyODBxMTA2IDAgMTgxIC03NXQ3NSAtMTgxdi04OTZxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1aC0xNDA4cS0xMDYgMCAtMTgxIDc1dC03NSAxODF2ODk2cTAgMTA2IDc1IDE4MXQxODEgNzVoMjI0bDUxIDEzNiBxMTkgNDkgNjkuNSA4NC41dDEwMy41IDM1LjVoNTEycTUzIDAgMTAzLjUgLTM1LjV0NjkuNSAtODQuNWw1MSAtMTM2aDIyNHpNOTYwIDEyOHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMxOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03MjUgOTc3bC0xNzAgLTQ1MHE3MyAtMSAxNTMuNSAtMnQxMTkgLTEuNXQ1Mi41IC0wLjVsMjkgMnEtMzIgOTUgLTkyIDI0MXEtNTMgMTMyIC05MiAyMTF6TTIxIC0xMjhoLTIxbDIgNzlxMjIgNyA4MCAxOHE4OSAxNiAxMTAgMzFxMjAgMTYgNDggNjhsMjM3IDYxNmwyODAgNzI0aDc1aDUzbDExIC0yMWwyMDUgLTQ4MHExMDMgLTI0MiAxMjQgLTI5N3EzOSAtMTAyIDk2IC0yMzVxMjYgLTU4IDY1IC0xNjRxMjQgLTY3IDY1IC0xNDkgcTIyIC00OSAzNSAtNTdxMjIgLTE5IDY5IC0yM3E0NyAtNiAxMDMgLTI3cTYgLTM5IDYgLTU3cTAgLTE0IC0xIC0yNnEtODAgMCAtMTkyIDhxLTkzIDggLTE4OSA4cS03OSAwIC0xMzUgLTJsLTIwMCAtMTFsLTU4IC0ycTAgNDUgNCA3OGwxMzEgMjhxNTYgMTMgNjggMjNxMTIgMTIgMTIgMjd0LTYgMzJsLTQ3IDExNGwtOTIgMjI4bC00NTAgMnEtMjkgLTY1IC0xMDQgLTI3NHEtMjMgLTY0IC0yMyAtODRxMCAtMzEgMTcgLTQzIHEyNiAtMjEgMTAzIC0zMnEzIDAgMTMuNSAtMnQzMCAtNXQ0MC41IC02cTEgLTI4IDEgLTU4cTAgLTE3IC0yIC0yN3EtNjYgMCAtMzQ5IDIwbC00OCAtOHEtODEgLTE0IC0xNjcgLTE0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMyOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik01NTUgMTVxNzYgLTMyIDE0MCAtMzJxMTMxIDAgMjE2IDQxdDEyMiAxMTNxMzggNzAgMzggMTgxcTAgMTE0IC00MSAxODBxLTU4IDk0IC0xNDEgMTI2cS04MCAzMiAtMjQ3IDMycS03NCAwIC0xMDEgLTEwdi0xNDRsLTEgLTE3M2wzIC0yNzBxMCAtMTUgMTIgLTQ0ek01NDEgNzYxcTQzIC03IDEwOSAtN3ExNzUgMCAyNjQgNjV0ODkgMjI0cTAgMTEyIC04NSAxODdxLTg0IDc1IC0yNTUgNzVxLTUyIDAgLTEzMCAtMTNxMCAtNDQgMiAtNzcgcTcgLTEyMiA2IC0yNzlsLTEgLTk4cTAgLTQzIDEgLTc3ek0wIC0xMjhsMiA5NHE0NSA5IDY4IDEycTc3IDEyIDEyMyAzMXExNyAyNyAyMSA1MXE5IDY2IDkgMTk0bC0yIDQ5N3EtNSAyNTYgLTkgNDA0cS0xIDg3IC0xMSAxMDlxLTEgNCAtMTIgMTJxLTE4IDEyIC02OSAxNXEtMzAgMiAtMTE0IDEzbC00IDgzbDI2MCA2bDM4MCAxM2w0NSAxcTUgMCAxNCAwLjV0MTQgMC41cTEgMCAyMS41IC0wLjV0NDAuNSAtMC41aDc0cTg4IDAgMTkxIC0yNyBxNDMgLTEzIDk2IC0zOXE1NyAtMjkgMTAyIC03NnE0NCAtNDcgNjUgLTEwNHQyMSAtMTIycTAgLTcwIC0zMiAtMTI4dC05NSAtMTA1cS0yNiAtMjAgLTE1MCAtNzdxMTc3IC00MSAyNjcgLTE0NnE5MiAtMTA2IDkyIC0yMzZxMCAtNzYgLTI5IC0xNjFxLTIxIC02MiAtNzEgLTExN3EtNjYgLTcyIC0xNDAgLTEwOHEtNzMgLTM2IC0yMDMgLTYwcS04MiAtMTUgLTE5OCAtMTFsLTE5NyA0cS04NCAyIC0yOTggLTExcS0zMyAtMyAtMjcyIC0xMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzMzsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMCAtMTI2bDE3IDg1cTQgMSA3NyAyMHE3NiAxOSAxMTYgMzlxMjkgMzcgNDEgMTAxbDI3IDEzOWw1NiAyNjhsMTIgNjRxOCA0NCAxNyA4NC41dDE2IDY3dDEyLjUgNDYuNXQ5IDMwLjV0My41IDExLjVsMjkgMTU3bDE2IDYzbDIyIDEzNWw4IDUwdjM4cS00MSAyMiAtMTQ0IDI4cS0yOCAyIC0zOCA0bDE5IDEwM2wzMTcgLTE0cTM5IC0yIDczIC0ycTY2IDAgMjE0IDlxMzMgMiA2OCA0LjV0MzYgMi41cS0yIC0xOSAtNiAtMzggcS03IC0yOSAtMTMgLTUxcS01NSAtMTkgLTEwOSAtMzFxLTY0IC0xNiAtMTAxIC0zMXEtMTIgLTMxIC0yNCAtODhxLTkgLTQ0IC0xMyAtODJxLTQ0IC0xOTkgLTY2IC0zMDZsLTYxIC0zMTFsLTM4IC0xNThsLTQzIC0yMzVsLTEyIC00NXEtMiAtNyAxIC0yN3E2NCAtMTUgMTE5IC0yMXEzNiAtNSA2NiAtMTBxLTEgLTI5IC03IC01OHEtNyAtMzEgLTkgLTQxcS0xOCAwIC0yMyAtMXEtMjQgLTIgLTQyIC0ycS05IDAgLTI4IDNxLTE5IDQgLTE0NSAxNyBsLTE5OCAycS00MSAxIC0xNzQgLTExcS03NCAtNyAtOTggLTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTgxIDE0MDdsNTQgLTI3cTIwIC01IDIxMSAtNWgxMzBsMTkgM2wxMTUgMWwyMTUgLTFoMjkzbDM0IC0ycTE0IC0xIDI4IDd0MjEgMTZsNyA4bDQyIDFxMTUgMCAyOCAtMXYtMTA0LjV0MSAtMTMxLjVsMSAtMTAwbC0xIC01OHEwIC0zMiAtNCAtNTFxLTM5IC0xNSAtNjggLTE4cS0yNSA0MyAtNTQgMTI4cS04IDI0IC0xNS41IDYyLjV0LTExLjUgNjUuNXQtNiAyOXEtMTMgMTUgLTI3IDE5cS03IDIgLTQyLjUgMnQtMTAzLjUgLTF0LTExMSAtMSBxLTM0IDAgLTY3IC01cS0xMCAtOTcgLTggLTEzNmwxIC0xNTJ2LTMzMmwzIC0zNTlsLTEgLTE0N3EtMSAtNDYgMTEgLTg1cTQ5IC0yNSA4OSAtMzJxMiAwIDE4IC01dDQ0IC0xM3Q0MyAtMTJxMzAgLTggNTAgLTE4cTUgLTQ1IDUgLTUwcTAgLTEwIC0zIC0yOXEtMTQgLTEgLTM0IC0xcS0xMTAgMCAtMTg3IDEwcS03MiA4IC0yMzggOHEtODggMCAtMjMzIC0xNHEtNDggLTQgLTcwIC00cS0yIDIyIC0yIDI2bC0xIDI2djlxMjEgMzMgNzkgNDkgcTEzOSAzOCAxNTkgNTBxOSAyMSAxMiA1NnE4IDE5MiA2IDQzM2wtNSA0MjhxLTEgNjIgLTAuNSAxMTguNXQwLjUgMTAyLjV0LTIgNTd0LTYgMTVxLTYgNSAtMTQgNnEtMzggNiAtMTQ4IDZxLTQzIDAgLTEwMCAtMTMuNXQtNzMgLTI0LjVxLTEzIC05IC0yMiAtMzN0LTIyIC03NXQtMjQgLTg0cS02IC0xOSAtMTkuNSAtMzJ0LTIwLjUgLTEzcS00NCAyNyAtNTYgNDR2Mjk3djg2ek0xNzQ0IDEyOHEzMyAwIDQyIC0xOC41dC0xMSAtNDQuNSBsLTEyNiAtMTYycS0yMCAtMjYgLTQ5IC0yNnQtNDkgMjZsLTEyNiAxNjJxLTIwIDI2IC0xMSA0NC41dDQyIDE4LjVoODB2MTAyNGgtODBxLTMzIDAgLTQyIDE4LjV0MTEgNDQuNWwxMjYgMTYycTIwIDI2IDQ5IDI2dDQ5IC0yNmwxMjYgLTE2MnEyMCAtMjYgMTEgLTQ0LjV0LTQyIC0xOC41aC04MHYtMTAyNGg4MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzNTsiIGQ9Ik04MSAxNDA3bDU0IC0yN3EyMCAtNSAyMTEgLTVoMTMwbDE5IDNsMTE1IDFsNDQ2IC0xaDMxOGwzNCAtMnExNCAtMSAyOCA3dDIxIDE2bDcgOGw0MiAxcTE1IDAgMjggLTF2LTEwNC41dDEgLTEzMS41bDEgLTEwMGwtMSAtNThxMCAtMzIgLTQgLTUxcS0zOSAtMTUgLTY4IC0xOHEtMjUgNDMgLTU0IDEyOHEtOCAyNCAtMTUuNSA2Mi41dC0xMS41IDY1LjV0LTYgMjlxLTEzIDE1IC0yNyAxOXEtNyAyIC01OC41IDJ0LTEzOC41IC0xdC0xMjggLTEgcS05NCAwIC0xMjcgLTVxLTEwIC05NyAtOCAtMTM2bDEgLTE1MnY1MmwzIC0zNTlsLTEgLTE0N3EtMSAtNDYgMTEgLTg1cTQ5IC0yNSA4OSAtMzJxMiAwIDE4IC01dDQ0IC0xM3Q0MyAtMTJxMzAgLTggNTAgLTE4cTUgLTQ1IDUgLTUwcTAgLTEwIC0zIC0yOXEtMTQgLTEgLTM0IC0xcS0xMTAgMCAtMTg3IDEwcS03MiA4IC0yMzggOHEtODIgMCAtMjMzIC0xM3EtNDUgLTUgLTcwIC01cS0yIDIyIC0yIDI2bC0xIDI2djlxMjEgMzMgNzkgNDkgcTEzOSAzOCAxNTkgNTBxOSAyMSAxMiA1NnE2IDEzNyA2IDQzM2wtNSA0NHEwIDI2NSAtMiAyNzhxLTIgMTEgLTYgMTVxLTYgNSAtMTQgNnEtMzggNiAtMTQ4IDZxLTUwIDAgLTE2OC41IC0xNHQtMTMyLjUgLTI0cS0xMyAtOSAtMjIgLTMzdC0yMiAtNzV0LTI0IC04NHEtNiAtMTkgLTE5LjUgLTMydC0yMC41IC0xM3EtNDQgMjcgLTU2IDQ0djI5N3Y4NnpNMTUwNSAxMTNxMjYgLTIwIDI2IC00OXQtMjYgLTQ5bC0xNjIgLTEyNiBxLTI2IC0yMCAtNDQuNSAtMTF0LTE4LjUgNDJ2ODBoLTEwMjR2LTgwcTAgLTMzIC0xOC41IC00MnQtNDQuNSAxMWwtMTYyIDEyNnEtMjYgMjAgLTI2IDQ5dDI2IDQ5bDE2MiAxMjZxMjYgMjAgNDQuNSAxMXQxOC41IC00MnYtODBoMTAyNHY4MHEwIDMzIDE4LjUgNDJ0NDQuNSAtMTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzY7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE0MDggNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE2NjQgOTYwdi0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzNzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTQwOCA1NzZ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE2NjQgOTYwdi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5IGgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzg7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgOTYwdi0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzOTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiA1NzZ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiA5NjB2LTEyOHEwIC0yNiAtMTkgLTQ1IHQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgMTM0NHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNhOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0yNTYgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjUgdDkuNSAtMjIuNXpNMjU2IDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0IHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTI1NiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTM0NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41IHQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiA5OTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkyIHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgOTkydi01NzZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41cS0xNCAwIC0yMyA5bC0yODggMjg4cS05IDkgLTkgMjN0OSAyM2wyODggMjg4cTkgOSAyMyA5cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzUyIDcwNHEwIC0xNCAtOSAtMjNsLTI4OCAtMjg4cS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djU3NnEwIDEzIDkuNSAyMi41dDIyLjUgOS41cTE0IDAgMjMgLTlsMjg4IC0yODhxOSAtOSA5IC0yM3pNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzZDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTkwMCAxMjc4cTIwIC04IDIwIC0zMHYtMTIxNnEwIC0yMiAtMjAgLTMwcS04IC0yIC0xMiAtMnEtMTIgMCAtMjMgOWwtNTg1IDU4NnYtMzA3cTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC03MDRxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djcwNHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoNzA0cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di0zMDdsNTg1IDU4NnExNiAxNSAzNSA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNlOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgOTYwcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTY2NCA1NzZ2LTQ0OGgtMTQwOHYxOTJsMzIwIDMyMGwxNjAgLTE2MGw1MTIgNTEyek0xNzYwIDEyODBoLTE2MDBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xMjE2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41djEyMTYgcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXpNMTkyMCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQwOyIgZD0iTTM2MyAwbDkxIDkxbC0yMzUgMjM1bC05MSAtOTF2LTEwN2gxMjh2LTEyOGgxMDd6TTg4NiA5MjhxMCAyMiAtMjIgMjJxLTEwIDAgLTE3IC03bC01NDIgLTU0MnEtNyAtNyAtNyAtMTdxMCAtMjIgMjIgLTIycTEwIDAgMTcgN2w1NDIgNTQycTcgNyA3IDE3ek04MzIgMTEyMGw0MTYgLTQxNmwtODMyIC04MzJoLTQxNnY0MTZ6TTE1MTUgMTAyNHEwIC01MyAtMzcgLTkwbC0xNjYgLTE2NmwtNDE2IDQxNmwxNjYgMTY1cTM2IDM4IDkwIDM4IHE1MyAwIDkxIC0zOGwyMzUgLTIzNHEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik03NjggODk2cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTAyNCA4OTZxMCAtMTA5IC0zMyAtMTc5bC0zNjQgLTc3NHEtMTYgLTMzIC00Ny41IC01MnQtNjcuNSAtMTl0LTY3LjUgMTl0LTQ2LjUgNTJsLTM2NSA3NzRxLTMzIDcwIC0zMyAxNzlxMCAyMTIgMTUwIDM2MnQzNjIgMTUwdDM2MiAtMTUwdDE1MCAtMzYyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQyOyIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTI1NiA2NDBxMCAtMTA0IDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV2MTAyNHEtMTA0IDAgLTE5OC41IC00MC41IHQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQzOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01MTIgMzg0cTAgMzYgLTIwIDY5cS0xIDEgLTE1LjUgMjIuNXQtMjUuNSAzOHQtMjUgNDR0LTIxIDUwLjVxLTQgMTYgLTIxIDE2dC0yMSAtMTZxLTcgLTIzIC0yMSAtNTAuNXQtMjUgLTQ0dC0yNS41IC0zOHQtMTUuNSAtMjIuNXEtMjAgLTMzIC0yMCAtNjlxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgNTEycTAgLTIxMiAtMTUwIC0zNjJ0LTM2MiAtMTUwdC0zNjIgMTUwdC0xNTAgMzYyIHEwIDE0NSA4MSAyNzVxNiA5IDYyLjUgOTAuNXQxMDEgMTUxdDk5LjUgMTc4dDgzIDIwMS41cTkgMzAgMzQgNDd0NTEgMTd0NTEuNSAtMTd0MzMuNSAtNDdxMjggLTkzIDgzIC0yMDEuNXQ5OS41IC0xNzh0MTAxIC0xNTF0NjIuNSAtOTAuNXE4MSAtMTI3IDgxIC0yNzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg4OCAzNTJsMTE2IDExNmwtMTUyIDE1MmwtMTE2IC0xMTZ2LTU2aDk2di05Nmg1NnpNMTMyOCAxMDcycS0xNiAxNiAtMzMgLTFsLTM1MCAtMzUwcS0xNyAtMTcgLTEgLTMzdDMzIDFsMzUwIDM1MHExNyAxNyAxIDMzek0xNDA4IDQ3OHYtMTkwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoODMyIHE2MyAwIDExNyAtMjVxMTUgLTcgMTggLTIzcTMgLTE3IC05IC0yOWwtNDkgLTQ5cS0xNCAtMTQgLTMyIC04cS0yMyA2IC00NSA2aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YxMjZxMCAxMyA5IDIybDY0IDY0cTE1IDE1IDM1IDd0MjAgLTI5ek0xMzEyIDEyMTZsMjg4IC0yODhsLTY3MiAtNjcyaC0yODh2Mjg4ek0xNzU2IDEwODRsLTkyIC05MiBsLTI4OCAyODhsOTIgOTJxMjggMjggNjggMjh0NjggLTI4bDE1MiAtMTUycTI4IC0yOCAyOCAtNjh0LTI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0NTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQwOCA1NDd2LTI1OXEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDI1NXYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXEwIC0yNyAtMjYgLTMycS03NyAtMjYgLTEzMyAtNjBxLTEwIC00IC0xNiAtNGgtMTEycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMiBxNjYgMCAxMTMgNDd0NDcgMTEzdjIxNHEwIDE5IDE4IDI5cTI4IDEzIDU0IDM3cTE2IDE2IDM1IDhxMjEgLTkgMjEgLTI5ek0xNjQ1IDEwNDNsLTM4NCAtMzg0cS0xOCAtMTkgLTQ1IC0xOXEtMTIgMCAtMjUgNXEtMzkgMTcgLTM5IDU5djE5MmgtMTYwcS0zMjMgMCAtNDM4IC0xMzFxLTExOSAtMTM3IC03NCAtNDczcTMgLTIzIC0yMCAtMzRxLTggLTIgLTEyIC0ycS0xNiAwIC0yNiAxM3EtMTAgMTQgLTIxIDMxdC0zOS41IDY4LjV0LTQ5LjUgOTkuNSB0LTM4LjUgMTE0dC0xNy41IDEyMnEwIDQ5IDMuNSA5MXQxNCA5MHQyOCA4OHQ0NyA4MS41dDY4LjUgNzR0OTQuNSA2MS41dDEyNC41IDQ4LjV0MTU5LjUgMzAuNXQxOTYuNSAxMWgxNjB2MTkycTAgNDIgMzkgNTlxMTMgNSAyNSA1cTI2IDAgNDUgLTE5bDM4NCAtMzg0cTE5IC0xOSAxOSAtNDV0LTE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0NjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQwOCA2MDZ2LTMxOHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMnE2MyAwIDExNyAtMjVxMTUgLTcgMTggLTIzcTMgLTE3IC05IC0yOWwtNDkgLTQ5cS0xMCAtMTAgLTIzIC0xMHEtMyAwIC05IDJxLTIzIDYgLTQ1IDZoLTgzMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMyIHEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YyNTRxMCAxMyA5IDIybDY0IDY0cTEwIDEwIDIzIDEwcTYgMCAxMiAtM3EyMCAtOCAyMCAtMjl6TTE2MzkgMTA5NWwtODE0IC04MTRxLTI0IC0yNCAtNTcgLTI0dC01NyAyNGwtNDMwIDQzMHEtMjQgMjQgLTI0IDU3dDI0IDU3bDExMCAxMTBxMjQgMjQgNTcgMjR0NTcgLTI0bDI2MyAtMjYzbDY0NyA2NDdxMjQgMjQgNTcgMjR0NTcgLTI0bDExMCAtMTEwIHEyNCAtMjQgMjQgLTU3dC0yNCAtNTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDc7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNjQwcTAgLTI2IC0xOSAtNDVsLTI1NiAtMjU2cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djEyOGgtMzg0di0zODRoMTI4cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloMTI4djM4NGgtMzg0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1IHQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTEyOGgzODR2Mzg0aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtMTI4di0zODRoMzg0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQ4OyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik05NzkgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTkgOSAtMTMgMTl2LTY3OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di02NzhxNCAxMSAxMyAxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0OTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc0NyAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS05IDkgLTEzIDE5di02NzhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtNjc4cTQgMTEgMTMgMTlsNzEwIDcxMCBxMTkgMTkgMzIgMTN0MTMgLTMydi03MTBxNCAxMSAxMyAxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0YTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxOSAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOCA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS0xOSAxOSAtMTkgNDV0MTkgNDVsNzEwIDcxMHExOSAxOSAzMiAxM3QxMyAtMzJ2LTcxMHE1IDExIDEzIDE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRiOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzg0IDYwOWwtMTMyOCAtNzM4cS0yMyAtMTMgLTM5LjUgLTN0LTE2LjUgMzZ2MTQ3MnEwIDI2IDE2LjUgMzZ0MzkuNSAtM2wxMzI4IC03MzhxMjMgLTEzIDIzIC0zMXQtMjMgLTMxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRjOyIgZD0iTTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1ek02NDAgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRkOyIgZD0iTTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNGU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTQ1IC0xMTVxLTE5IC0xOSAtMzIgLTEzdC0xMyAzMnYxNDcycTAgMjYgMTMgMzJ0MzIgLTEzbDcxMCAtNzEwcTggLTggMTMgLTE5djcxMHEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHExOSAtMTkgMTkgLTQ1dC0xOSAtNDVsLTcxMCAtNzEwcS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2NzEwcS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUwOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE4IC04IDEzIC0xOXY3MTBxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxOCAtOCAxMyAtMTl2Njc4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djY3OHEtNSAtMTAgLTEzIC0xOWwtNzEwIC03MTAgcS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2NzEwcS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE4IC04IDEzIC0xOXY2NzhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDA4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2Njc4cS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUyOyIgaG9yaXotYWR2LXg9IjE1MzgiIGQ9Ik0xNCA1NTdsNzEwIDcxMHExOSAxOSA0NSAxOXQ0NSAtMTlsNzEwIC03MTBxMTkgLTE5IDEzIC0zMnQtMzIgLTEzaC0xNDcycS0yNiAwIC0zMiAxM3QxMyAzMnpNMTQ3MyAwaC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTM7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTc0MiAtMzdsLTY1MiA2NTFxLTM3IDM3IC0zNyA5MC41dDM3IDkwLjVsNjUyIDY1MXEzNyAzNyA5MC41IDM3dDkwLjUgLTM3bDc1IC03NXEzNyAtMzcgMzcgLTkwLjV0LTM3IC05MC41bC00ODYgLTQ4Nmw0ODYgLTQ4NXEzNyAtMzggMzcgLTkxdC0zNyAtOTBsLTc1IC03NXEtMzcgLTM3IC05MC41IC0zN3QtOTAuNSAzN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1NDsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA5OSA3MDRxMCAtNTIgLTM3IC05MWwtNjUyIC02NTFxLTM3IC0zNyAtOTAgLTM3dC05MCAzN2wtNzYgNzVxLTM3IDM5IC0zNyA5MXEwIDUzIDM3IDkwbDQ4NiA0ODZsLTQ4NiA0ODVxLTM3IDM5IC0zNyA5MXEwIDUzIDM3IDkwbDc2IDc1cTM2IDM4IDkwIDM4dDkwIC0zOGw2NTIgLTY1MXEzNyAtMzcgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDU1OyIgZD0iTTEyMTYgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTI1NnYyNTZxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0yNTZoLTI1NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDI1NnYtMjU2cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MjU2aDI1NnEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTY7IiBkPSJNMTIxNiA1NzZ2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtNzY4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloNzY4cTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNSB0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1NzsiIGQ9Ik0xMTQ5IDQxNHEwIDI2IC0xOSA0NWwtMTgxIDE4MWwxODEgMTgxcTE5IDE5IDE5IDQ1cTAgMjcgLTE5IDQ2bC05MCA5MHEtMTkgMTkgLTQ2IDE5cS0yNiAwIC00NSAtMTlsLTE4MSAtMTgxbC0xODEgMTgxcS0xOSAxOSAtNDUgMTlxLTI3IDAgLTQ2IC0xOWwtOTAgLTkwcS0xOSAtMTkgLTE5IC00NnEwIC0yNiAxOSAtNDVsMTgxIC0xODFsLTE4MSAtMTgxcS0xOSAtMTkgLTE5IC00NXEwIC0yNyAxOSAtNDZsOTAgLTkwcTE5IC0xOSA0NiAtMTkgcTI2IDAgNDUgMTlsMTgxIDE4MWwxODEgLTE4MXExOSAtMTkgNDUgLTE5cTI3IDAgNDYgMTlsOTAgOTBxMTkgMTkgMTkgNDZ6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDU4OyIgZD0iTTEyODQgODAycTAgMjggLTE4IDQ2bC05MSA5MHEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTQwOCAtNDA3bC0yMjYgMjI2cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtOTEgLTkwcS0xOCAtMTggLTE4IC00NnEwIC0yNyAxOCAtNDVsMzYyIC0zNjJxMTkgLTE5IDQ1IC0xOXEyNyAwIDQ2IDE5bDU0MyA1NDNxMTggMTggMTggNDV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDMgdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1OTsiIGQ9Ik04OTYgMTYwdjE5MnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE5MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTE5MnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMTUyIDgzMnEwIDk3IC01OC41IDE3MnQtMTQ0LjUgMTExLjV0LTE4MSAzNi41dC0xODEgLTM2LjV0LTE0NC41IC0xMTEuNXQtNTguNSAtMTcydi0xMXYtMTN0MSAtMTEuNXQzIC0xMS41dDUuNSAtOHQ5IC03IHQxMy41IC0yaDE5MnExNCAwIDIzIDl0OSAyM3EwIDEyIDExIDI3cTE5IDMxIDUwLjUgNTB0NjYuNSAxOXEzOSAwIDgzIC0yMS41dDQ0IC01Ny41cTAgLTMzIC0yNi41IC01OHQtNjMuNSAtNDR0LTc0LjUgLTQxLjV0LTY0IC02My41dC0yNi41IC05OHYtMTF2LTEzdDEgLTExLjV0MyAtMTEuNXQ1LjUgLTh0OSAtN3QxMy41IC0yaDE5MnExNyAwIDI0IDEwLjV0OCAyNC41dDEzLjUgMzN0MzcuNSAzMnE2MCAzMyA3MCAzOXE2MiA0NCA5OC41IDEwOCB0MzYuNSAxMzd6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVhOyIgZD0iTTEwMjQgMTYwdjY0cTAgMTQgLTkgMjN0LTIzIDloLTk2djQ4MHEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloOTZ2LTM4NGgtOTZxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNDQ4cTE0IDAgMjMgOXQ5IDIzek04OTYgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzIHQyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDViOyIgZD0iTTExOTcgNTEyaC0xMDlxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMDlxLTMyIDEwOCAtMTEyLjUgMTg4LjV0LTE4OC41IDExMi41di0xMDlxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMDlxLTEwOCAtMzIgLTE4OC41IC0xMTIuNXQtMTEyLjUgLTE4OC41aDEwOXEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEwOSBxMzIgLTEwOCAxMTIuNSAtMTg4LjV0MTg4LjUgLTExMi41djEwOXEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEwOXExMDggMzIgMTg4LjUgMTEyLjV0MTEyLjUgMTg4LjV6TTE1MzYgNzA0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDNxLTM3IC0xNjEgLTE1NC41IC0yNzguNXQtMjc4LjUgLTE1NC41di0xNDNxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDMgcS0xNjEgMzcgLTI3OC41IDE1NC41dC0xNTQuNSAyNzguNWgtMTQzcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQzcTM3IDE2MSAxNTQuNSAyNzguNXQyNzguNSAxNTQuNXYxNDNxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDNxMTYxIC0zNyAyNzguNSAtMTU0LjV0MTU0LjUgLTI3OC41aDE0M3EyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNWM7IiBkPSJNMTEyNSA0NDhxMCAtMjcgLTE4IC00NWwtMTAyIC0xMDJxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTQ3IDE0N2wtMTQ3IC0xNDdxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTAyIDEwMnEtMTggMTggLTE4IDQ1dDE4IDQ1bDE0NyAxNDdsLTE0NyAxNDdxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMDIgMTAycTE4IDE4IDQ1IDE4dDQ1IC0xOGwxNDcgLTE0N2wxNDcgMTQ3cTE4IDE4IDQ1IDE4dDQ1IC0xOGwxMDIgLTEwMnExOCAtMTggMTggLTQ1IHQtMTggLTQ1bC0xNDcgLTE0N2wxNDcgLTE0N3ExOCAtMTggMTggLTQ1ek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNSB0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNWQ7IiBkPSJNMTE4OSA3NjhxMCAtMjcgLTE4IC00NWwtMzIwIC0zMjBsLTEwMiAtMTAycS0xOCAtMTggLTQ1IC0xOHQtNDUgMThsLTEwMiAxMDJsLTE5MiAxOTJxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMDIgMTAycTE4IDE4IDQ1IDE4dDQ1IC0xOGwxNDcgLTE0N2wyNzUgMjc1cTE4IDE4IDQ1IDE4dDQ1IC0xOGwxMDIgLTEwMnExOCAtMTggMTggLTQ1ek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41IHQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNSB0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVlOyIgZD0iTTEyODAgNjQwcTAgMTM5IC03MSAyNjBsLTcwMSAtNzAxcTEyMSAtNzEgMjYwIC03MXExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTMyNyAzODBsNzAxIDcwMXEtMTIxIDcxIC0yNjAgNzFxLTEwNCAwIC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41cTAgLTEzOSA3MSAtMjYwek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjA7IiBkPSJNMTUzNiA2NDB2LTEyOHEwIC01MyAtMzIuNSAtOTAuNXQtODQuNSAtMzcuNWgtNzA0bDI5MyAtMjk0cTM4IC0zNiAzOCAtOTB0LTM4IC05MGwtNzUgLTc2cS0zNyAtMzcgLTkwIC0zN3EtNTIgMCAtOTEgMzdsLTY1MSA2NTJxLTM3IDM3IC0zNyA5MHEwIDUyIDM3IDkxbDY1MSA2NTBxMzggMzggOTEgMzhxNTIgMCA5MCAtMzhsNzUgLTc0cTM4IC0zOCAzOCAtOTF0LTM4IC05MWwtMjkzIC0yOTNoNzA0cTUyIDAgODQuNSAtMzcuNSB0MzIuNSAtOTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2MTsiIGQ9Ik0xNDcyIDU3NnEwIC01NCAtMzcgLTkxbC02NTEgLTY1MXEtMzkgLTM3IC05MSAtMzdxLTUxIDAgLTkwIDM3bC03NSA3NXEtMzggMzggLTM4IDkxdDM4IDkxbDI5MyAyOTNoLTcwNHEtNTIgMCAtODQuNSAzNy41dC0zMi41IDkwLjV2MTI4cTAgNTMgMzIuNSA5MC41dDg0LjUgMzcuNWg3MDRsLTI5MyAyOTRxLTM4IDM2IC0zOCA5MHQzOCA5MGw3NSA3NXEzOCAzOCA5MCAzOHE1MyAwIDkxIC0zOGw2NTEgLTY1MXEzNyAtMzUgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDYyOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjExIDU2NXEwIC01MSAtMzcgLTkwbC03NSAtNzVxLTM4IC0zOCAtOTEgLTM4cS01NCAwIC05MCAzOGwtMjk0IDI5M3YtNzA0cTAgLTUyIC0zNy41IC04NC41dC05MC41IC0zMi41aC0xMjhxLTUzIDAgLTkwLjUgMzIuNXQtMzcuNSA4NC41djcwNGwtMjk0IC0yOTNxLTM2IC0zOCAtOTAgLTM4dC05MCAzOGwtNzUgNzVxLTM4IDM4IC0zOCA5MHEwIDUzIDM4IDkxbDY1MSA2NTFxMzUgMzcgOTAgMzdxNTQgMCA5MSAtMzdsNjUxIC02NTEgcTM3IC0zOSAzNyAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjM7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgNzA0cTAgLTUzIC0zNyAtOTBsLTY1MSAtNjUycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTY1MSA2NTJxLTM4IDM2IC0zOCA5MHEwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3cTUzIDAgOTAgLTM3bDI5NCAtMjk0djcwNHEwIDUyIDM4IDkwdDkwIDM4aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB2LTcwNGwyOTQgMjk0cTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDc1IC03NXEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDg5NnEwIC0yNiAtMTkgLTQ1bC01MTIgLTUxMnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyNTZoLTIyNHEtOTggMCAtMTc1LjUgLTZ0LTE1NCAtMjEuNXQtMTMzIC00Mi41dC0xMDUuNSAtNjkuNXQtODAgLTEwMXQtNDguNSAtMTM4LjV0LTE3LjUgLTE4MXEwIC01NSA1IC0xMjNxMCAtNiAyLjUgLTIzLjV0Mi41IC0yNi41cTAgLTE1IC04LjUgLTI1dC0yMy41IC0xMHEtMTYgMCAtMjggMTdxLTcgOSAtMTMgMjIgdC0xMy41IDMwdC0xMC41IDI0cS0xMjcgMjg1IC0xMjcgNDUxcTAgMTk5IDUzIDMzM3ExNjIgNDAzIDg3NSA0MDNoMjI0djI1NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw1MTIgLTUxMnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY1OyIgZD0iTTc1NSA0ODBxMCAtMTMgLTEwIC0yM2wtMzMyIC0zMzJsMTQ0IC0xNDRxMTkgLTE5IDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzek0xNTM2IDEzNDR2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMiBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTE0IDExNHEtMTAgMTAgLTEwIDIzdDEwIDIzbDMzMiAzMzJsLTE0NCAxNDRxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY2OyIgZD0iTTc2OCA1NzZ2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMTQgMTE0cS0xMCAxMCAtMTAgMjN0MTAgMjNsMzMyIDMzMmwtMTQ0IDE0NHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MjMgMTI0OHEwIC0xMyAtMTAgLTIzbC0zMzIgLTMzMmwxNDQgLTE0NHExOSAtMTkgMTkgLTQ1dC0xOSAtNDUgdC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY3OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA4IDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDE2di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xOTJxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDQxNnY0MTZxMCA0MCAyOCA2OHQ2OCAyOGgxOTJxNDAgMCA2OCAtMjh0MjggLTY4di00MTZoNDE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ODsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEyMTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxMjE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2OTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQ4MiA0ODZxNDYgLTI2IDU5LjUgLTc3LjV0LTEyLjUgLTk3LjVsLTY0IC0xMTBxLTI2IC00NiAtNzcuNSAtNTkuNXQtOTcuNSAxMi41bC0yNjYgMTUzdi0zMDdxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHYzMDdsLTI2NiAtMTUzcS00NiAtMjYgLTk3LjUgLTEyLjV0LTc3LjUgNTkuNWwtNjQgMTEwcS0yNiA0NiAtMTIuNSA5Ny41dDU5LjUgNzcuNWwyNjYgMTU0bC0yNjYgMTU0IHEtNDYgMjYgLTU5LjUgNzcuNXQxMi41IDk3LjVsNjQgMTEwcTI2IDQ2IDc3LjUgNTkuNXQ5Ny41IC0xMi41bDI2NiAtMTUzdjMwN3EwIDUyIDM4IDkwdDkwIDM4aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB2LTMwN2wyNjYgMTUzcTQ2IDI2IDk3LjUgMTIuNXQ3Ny41IC01OS41bDY0IC0xMTBxMjYgLTQ2IDEyLjUgLTk3LjV0LTU5LjUgLTc3LjVsLTI2NiAtMTU0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDZhOyIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTg5NiAxNjF2MTkwcTAgMTQgLTkgMjMuNXQtMjIgOS41aC0xOTJxLTEzIDAgLTIzIC0xMHQtMTAgLTIzdi0xOTBxMCAtMTMgMTAgLTIzdDIzIC0xMGgxOTIgcTEzIDAgMjIgOS41dDkgMjMuNXpNODk0IDUwNWwxOCA2MjFxMCAxMiAtMTAgMThxLTEwIDggLTI0IDhoLTIyMHEtMTQgMCAtMjQgLThxLTEwIC02IC0xMCAtMThsMTcgLTYyMXEwIC0xMCAxMCAtMTcuNXQyNCAtNy41aDE4NXExNCAwIDIzLjUgNy41dDEwLjUgMTcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2YjsiIGQ9Ik05MjggMTgwdjcxNmgtMzIwdi03MTZxMCAtMjUgMTguNSAtMzguNXQ0NS41IC0xMy41aDE5MnEyNyAwIDQ1LjUgMTMuNXQxOC41IDM4LjV6TTQ3MiAxMDI0aDE5NWwtMTI2IDE2MXEtMjQgMzEgLTY5IDMxcS00MCAwIC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4ek0xMTYwIDExMjBxMCA0MCAtMjggNjh0LTY4IDI4cS00NSAwIC02OSAtMzFsLTEyNSAtMTYxaDE5NHE0MCAwIDY4IDI4dDI4IDY4ek0xNTM2IDg2NHYtMzIwIHEwIC0xNCAtMTAgLTIydC0yNyAtMTAuNXQtMzIgLTIuNXQtMzQuNSAxLjV0LTI0LjUgMS41di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMDg4cS00MCAwIC02OCAyOHQtMjggNjh2NDE2cS01IDAgLTI0LjUgLTEuNXQtMzQuNSAtMS41dC0zMiAyLjV0LTI3IDEwLjV0LTEwIDIydjMyMHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDQ0MHEtOTMgMCAtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjUgcTEwOCAwIDE2OCAtNzdsMTI4IC0xNjVsMTI4IDE2NXE2MCA3NyAxNjggNzdxOTMgMCAxNTguNSAtNjUuNXQ2NS41IC0xNTguNXQtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41aDQ0MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNmM7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEyODAgODMycTAgMjYgLTE5IDQ1dC00NSAxOXEtMTcyIDAgLTMxOCAtNDkuNXQtMjU5LjUgLTEzNHQtMjM1LjUgLTIxOS41cS0xOSAtMjEgLTE5IC00NXEwIC0yNiAxOSAtNDV0NDUgLTE5cTI0IDAgNDUgMTlxMjcgMjQgNzQgNzF0NjcgNjZxMTM3IDEyNCAyNjguNSAxNzZ0MzEzLjUgNTJxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAxMDMwcTAgLTk1IC0yMCAtMTkzcS00NiAtMjI0IC0xODQuNSAtMzgzdC0zNTcuNSAtMjY4IHEtMjE0IC0xMDggLTQzOCAtMTA4cS0xNDggMCAtMjg2IDQ3cS0xNSA1IC04OCA0MnQtOTYgMzdxLTE2IDAgLTM5LjUgLTMydC00NSAtNzB0LTUyLjUgLTcwdC02MCAtMzJxLTMwIDAgLTUxIDExdC0zMSAyNHQtMjcgNDJxLTIgNCAtNiAxMXQtNS41IDEwdC0zIDkuNXQtMS41IDEzLjVxMCAzNSAzMSA3My41dDY4IDY1LjV0NjggNTZ0MzEgNDhxMCA0IC0xNCAzOHQtMTYgNDRxLTkgNTEgLTkgMTA0cTAgMTE1IDQzLjUgMjIwdDExOSAxODQuNSB0MTcwLjUgMTM5dDIwNCA5NS41cTU1IDE4IDE0NSAyNS41dDE3OS41IDl0MTc4LjUgNnQxNjMuNSAyNHQxMTMuNSA1Ni41bDI5LjUgMjkuNXQyOS41IDI4dDI3IDIwdDM2LjUgMTZ0NDMuNSA0LjVxMzkgMCA3MC41IC00NnQ0Ny41IC0xMTJ0MjQgLTEyNHQ4IC05NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ZDsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCAtMTYwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDg5NnEwIC03OCAtMjQuNSAtMTQ0dC02NCAtMTEyLjV0LTg3LjUgLTg4dC05NiAtNzcuNXQtODcuNSAtNzJ0LTY0IC04MS41dC0yNC41IC05Ni41cTAgLTk2IDY3IC0yMjRsLTQgMWwxIC0xIHEtOTAgNDEgLTE2MCA4M3QtMTM4LjUgMTAwdC0xMTMuNSAxMjIuNXQtNzIuNSAxNTAuNXQtMjcuNSAxODRxMCA3OCAyNC41IDE0NHQ2NCAxMTIuNXQ4Ny41IDg4dDk2IDc3LjV0ODcuNSA3MnQ2NCA4MS41dDI0LjUgOTYuNXEwIDk0IC02NiAyMjRsMyAtMWwtMSAxcTkwIC00MSAxNjAgLTgzdDEzOC41IC0xMDB0MTEzLjUgLTEyMi41dDcyLjUgLTE1MC41dDI3LjUgLTE4NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY2NCA1NzZxLTE1MiAyMzYgLTM4MSAzNTNxNjEgLTEwNCA2MSAtMjI1cTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDEyMSA2MSAyMjVxLTIyOSAtMTE3IC0zODEgLTM1M3ExMzMgLTIwNSAzMzMuNSAtMzI2LjV0NDM0LjUgLTEyMS41dDQzNC41IDEyMS41dDMzMy41IDMyNi41ek05NDQgOTYwcTAgMjAgLTE0IDM0dC0zNCAxNHEtMTI1IDAgLTIxNC41IC04OS41IHQtODkuNSAtMjE0LjVxMCAtMjAgMTQgLTM0dDM0IC0xNHQzNCAxNHQxNCAzNHEwIDg2IDYxIDE0N3QxNDcgNjFxMjAgMCAzNCAxNHQxNCAzNHpNMTc5MiA1NzZxMCAtMzQgLTIwIC02OXEtMTQwIC0yMzAgLTM3Ni41IC0zNjguNXQtNDk5LjUgLTEzOC41dC00OTkuNSAxMzl0LTM3Ni41IDM2OHEtMjAgMzUgLTIwIDY5dDIwIDY5cTE0MCAyMjkgMzc2LjUgMzY4dDQ5OS41IDEzOXQ0OTkuNSAtMTM5dDM3Ni41IC0zNjhxMjAgLTM1IDIwIC02OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNTU1IDIwMWw3OCAxNDFxLTg3IDYzIC0xMzYgMTU5dC00OSAyMDNxMCAxMjEgNjEgMjI1cS0yMjkgLTExNyAtMzgxIC0zNTNxMTY3IC0yNTggNDI3IC0zNzV6TTk0NCA5NjBxMCAyMCAtMTQgMzR0LTM0IDE0cS0xMjUgMCAtMjE0LjUgLTg5LjV0LTg5LjUgLTIxNC41cTAgLTIwIDE0IC0zNHQzNCAtMTR0MzQgMTR0MTQgMzRxMCA4NiA2MSAxNDd0MTQ3IDYxcTIwIDAgMzQgMTR0MTQgMzR6TTEzMDcgMTE1MXEwIC03IC0xIC05IHEtMTA1IC0xODggLTMxNSAtNTY2dC0zMTYgLTU2N2wtNDkgLTg5cS0xMCAtMTYgLTI4IC0xNnEtMTIgMCAtMTM0IDcwcS0xNiAxMCAtMTYgMjhxMCAxMiA0NCA4N3EtMTQzIDY1IC0yNjMuNSAxNzN0LTIwOC41IDI0NXEtMjAgMzEgLTIwIDY5dDIwIDY5cTE1MyAyMzUgMzgwIDM3MXQ0OTYgMTM2cTg5IDAgMTgwIC0xN2w1NCA5N3ExMCAxNiAyOCAxNnE1IDAgMTggLTZ0MzEgLTE1LjV0MzMgLTE4LjV0MzEuNSAtMTguNXQxOS41IC0xMS41IHExNiAtMTAgMTYgLTI3ek0xMzQ0IDcwNHEwIC0xMzkgLTc5IC0yNTMuNXQtMjA5IC0xNjQuNWwyODAgNTAycTggLTQ1IDggLTg0ek0xNzkyIDU3NnEwIC0zNSAtMjAgLTY5cS0zOSAtNjQgLTEwOSAtMTQ1cS0xNTAgLTE3MiAtMzQ3LjUgLTI2N3QtNDE5LjUgLTk1bDc0IDEzMnEyMTIgMTggMzkyLjUgMTM3dDMwMS41IDMwN3EtMTE1IDE3OSAtMjgyIDI5NGw2MyAxMTJxOTUgLTY0IDE4Mi41IC0xNTN0MTQ0LjUgLTE4NHEyMCAtMzQgMjAgLTY5eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTAyNCAxNjF2MTkwcTAgMTQgLTkuNSAyMy41dC0yMi41IDkuNWgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjMuNXYtMTkwcTAgLTE0IDkuNSAtMjMuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIzLjV6TTEwMjIgNTM1bDE4IDQ1OXEwIDEyIC0xMCAxOXEtMTMgMTEgLTI0IDExaC0yMjBxLTExIDAgLTI0IC0xMXEtMTAgLTcgLTEwIC0yMWwxNyAtNDU3cTAgLTEwIDEwIC0xNi41dDI0IC02LjVoMTg1IHExNCAwIDIzLjUgNi41dDEwLjUgMTYuNXpNMTAwOCAxNDY5bDc2OCAtMTQwOHEzNSAtNjMgLTIgLTEyNnEtMTcgLTI5IC00Ni41IC00NnQtNjMuNSAtMTdoLTE1MzZxLTM0IDAgLTYzLjUgMTd0LTQ2LjUgNDZxLTM3IDYzIC0yIDEyNmw3NjggMTQwOHExNyAzMSA0NyA0OXQ2NSAxOHQ2NSAtMTh0NDcgLTQ5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDcyOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzk3IDEzMjRxMCAtODcgLTE0OSAtMjM2bC0yNDAgLTI0MGwxNDMgLTc0NmwxIC02cTAgLTE0IC05IC0yM2wtNjQgLTY0cS05IC05IC0yMyAtOXEtMjEgMCAtMjkgMThsLTI3NCA1NzVsLTI0NSAtMjQ1cTY4IC0yMzggNjggLTI1MnQtOSAtMjNsLTY0IC02NHEtOSAtOSAtMjMgLTlxLTE4IDAgLTI4IDE2bC0xNTUgMjgwbC0yODAgMTU1cS0xNyA5IC0xNyAyOHEwIDE0IDkgMjNsNjQgNjVxOSA5IDIzIDl0MjUyIC02OGwyNDUgMjQ1IGwtNTc1IDI3NHEtMTggOCAtMTggMjlxMCAxNCA5IDIzbDY0IDY0cTkgOSAyMyA5cTQgMCA2IC0xbDc0NiAtMTQzbDI0MCAyNDBxMTQ5IDE0OSAyMzYgMTQ5cTMyIDAgNTIuNSAtMjAuNXQyMC41IC01Mi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDczOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMjggLTEyOGgyODh2Mjg4aC0yODh2LTI4OHpNNDgwIC0xMjhoMzIwdjI4OGgtMzIwdi0yODh6TTEyOCAyMjRoMjg4djMyMGgtMjg4di0zMjB6TTQ4MCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6TTEyOCA2MDhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAtMTI4aDMyMHYyODhoLTMyMHYtMjg4ek00ODAgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IC0xMjhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6IE01MTIgMTA4OHYyODhxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTEyNDggMjI0aDI4OHYzMjBoLTI4OHYtMzIwek04NjQgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IDYwOGgyODh2Mjg4aC0yODh2LTI4OHpNMTI4MCAxMDg4djI4OHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTY0IHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgMTE1MnYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0NyBoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY2NiAxMDU1cS02MCAtOTIgLTEzNyAtMjczcS0yMiA0NSAtMzcgNzIuNXQtNDAuNSA2My41dC01MSA1Ni41dC02MyAzNXQtODEuNSAxNC41aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHEyNTAgMCA0MTAgLTIyNXpNMTc5MiAyNTZxMCAtMTQgLTkgLTIzbC0zMjAgLTMyMHEtOSAtOSAtMjMgLTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxLTMyIDAgLTg1IC0wLjV0LTgxIC0xdC03MyAxIHQtNzEgNXQtNjQgMTAuNXQtNjMgMTguNXQtNTggMjguNXQtNTkgNDB0LTU1IDUzLjV0LTU2IDY5LjVxNTkgOTMgMTM2IDI3M3EyMiAtNDUgMzcgLTcyLjV0NDAuNSAtNjMuNXQ1MSAtNTYuNXQ2MyAtMzV0ODEuNSAtMTQuNWgyNTZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6TTE3OTIgMTE1MnEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41IHYxOTJoLTI1NnEtNDggMCAtODcgLTE1dC02OSAtNDV0LTUxIC02MS41dC00NSAtNzcuNXEtMzIgLTYyIC03OCAtMTcxcS0yOSAtNjYgLTQ5LjUgLTExMXQtNTQgLTEwNXQtNjQgLTEwMHQtNzQgLTgzdC05MCAtNjguNXQtMTA2LjUgLTQydC0xMjggLTE2LjVoLTIyNHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0cTQ4IDAgODcgMTV0NjkgNDV0NTEgNjEuNXQ0NSA3Ny41cTMyIDYyIDc4IDE3MXEyOSA2NiA0OS41IDExMSB0NTQgMTA1dDY0IDEwMHQ3NCA4M3Q5MCA2OC41dDEwNi41IDQydDEyOCAxNi41aDI1NnYxOTJxMCAxNCA5IDIzdDIzIDlxMTIgMCAyNCAtMTBsMzE5IC0zMTlxOSAtOSA5IC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA2NDBxMCAtMTc0IC0xMjAgLTMyMS41dC0zMjYgLTIzM3QtNDUwIC04NS41cS03MCAwIC0xNDUgOHEtMTk4IC0xNzUgLTQ2MCAtMjQycS00OSAtMTQgLTExNCAtMjJxLTE3IC0yIC0zMC41IDl0LTE3LjUgMjl2MXEtMyA0IC0wLjUgMTJ0MiAxMHQ0LjUgOS41bDYgOXQ3IDguNXQ4IDlxNyA4IDMxIDM0LjV0MzQuNSAzOHQzMSAzOS41dDMyLjUgNTF0MjcgNTl0MjYgNzZxLTE1NyA4OSAtMjQ3LjUgMjIwdC05MC41IDI4MSBxMCAxMzAgNzEgMjQ4LjV0MTkxIDIwNC41dDI4NiAxMzYuNXQzNDggNTAuNXEyNDQgMCA0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NjsiIGQ9Ik0xNTM2IDcwNHYtMTI4cTAgLTIwMSAtOTguNSAtMzYydC0yNzQgLTI1MS41dC0zOTUuNSAtOTAuNXQtMzk1LjUgOTAuNXQtMjc0IDI1MS41dC05OC41IDM2MnYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMjhxMCAtNTIgMjMuNSAtOTB0NTMuNSAtNTd0NzEgLTMwdDY0IC0xM3Q0NCAtMnQ0NCAydDY0IDEzdDcxIDMwdDUzLjUgNTd0MjMuNSA5MHYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODQgcTI2IDAgNDUgLTE5dDE5IC00NXpNNTEyIDEzNDR2LTM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MzYgMTM0NHYtMzg0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxMSAzMjBxMCAtNTMgLTM3IC05MGwtNzUgLTc1cS0zOCAtMzggLTkxIC0zOHEtNTQgMCAtOTAgMzhsLTQ4NiA0ODVsLTQ4NiAtNDg1cS0zNiAtMzggLTkwIC0zOHQtOTAgMzhsLTc1IDc1cS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw2NTEgNjUxcTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDY1MCAtNjUxcTM4IC0zOCAzOCAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzg7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgODMycTAgLTUzIC0zNyAtOTBsLTY1MSAtNjUxcS0zOCAtMzggLTkxIC0zOHEtNTQgMCAtOTAgMzhsLTY1MSA2NTFxLTM4IDM2IC0zOCA5MHEwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3cTUzIDAgOTAgLTM3bDQ4NiAtNDg2bDQ4NiA0ODZxMzcgMzcgOTAgMzdxNTIgMCA5MSAtMzdsNzUgLTc1cTM3IC0zOSAzNyAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzk7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgMzJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NjBxLTggMCAtMTMuNSAydC05IDd0LTUuNSA4dC0zIDExLjV0LTEgMTEuNXYxM3YxMXYxNjB2NDE2aC0xOTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDI0IDE1IDQxbDMyMCAzODRxMTkgMjIgNDkgMjJ0NDkgLTIybDMyMCAtMzg0cTE1IC0xNyAxNSAtNDFxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xOTJ2LTM4NGg1NzZxMTYgMCAyNSAtMTFsMTYwIC0xOTJxNyAtMTEgNyAtMjEgek0xOTIwIDQ0OHEwIC0yNCAtMTUgLTQxbC0zMjAgLTM4NHEtMjAgLTIzIC00OSAtMjN0LTQ5IDIzbC0zMjAgMzg0cS0xNSAxNyAtMTUgNDFxMCAyNiAxOSA0NXQ0NSAxOWgxOTJ2Mzg0aC01NzZxLTE2IDAgLTI1IDEybC0xNjAgMTkycS03IDkgLTcgMjBxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxOCAwIDEzLjUgLTJ0OSAtN3Q1LjUgLTh0MyAtMTEuNXQxIC0xMS41di0xM3YtMTF2LTE2MHYtNDE2aDE5MnEyNiAwIDQ1IC0xOXQxOSAtNDV6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdhOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE1MzYgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE2NjQgMTA4OHYtNTEycTAgLTI0IC0xNiAtNDIuNXQtNDEgLTIxLjUgbC0xMDQ0IC0xMjJxMSAtNyA0LjUgLTIxLjV0NiAtMjYuNXQyLjUgLTIycTAgLTE2IC0yNCAtNjRoOTIwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTEwMjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDE0IDExIDM5LjV0MjkuNSA1OS41dDIwLjUgMzhsLTE3NyA4MjNoLTIwNHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDI1NnExNiAwIDI4LjUgLTYuNXQyMCAtMTUuNXQxMyAtMjQuNXQ3LjUgLTI2LjUgdDUuNSAtMjkuNXQ0LjUgLTI1LjVoMTIwMXEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwN2I7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwcTkyIDAgMTU4IC02NnQ2NiAtMTU4di0zMmg2NzJxOTIgMCAxNTggLTY2dDY2IC0xNTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwN2M7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE4NzkgNTg0cTAgLTMxIC0zMSAtNjZsLTMzNiAtMzk2cS00MyAtNTEgLTEyMC41IC04Ni41dC0xNDMuNSAtMzUuNWgtMTA4OHEtMzQgMCAtNjAuNSAxM3QtMjYuNSA0M3EwIDMxIDMxIDY2bDMzNiAzOTZxNDMgNTEgMTIwLjUgODYuNXQxNDMuNSAzNS41aDEwODhxMzQgMCA2MC41IC0xM3QyNi41IC00M3pNMTUzNiA5Mjh2LTE2MGgtODMycS05NCAwIC0xOTcgLTQ3LjV0LTE2NCAtMTE5LjVsLTMzNyAtMzk2bC01IC02cTAgNCAtMC41IDEyLjUgdC0wLjUgMTIuNXY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNTQ0cTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdkOyIgaG9yaXotYWR2LXg9Ijc2OCIgZD0iTTcwNCAxMjE2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4di0xMDI0aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMjU2IC0yNTZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDEyOHYxMDI0aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdlOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDY0MHEwIC0yNiAtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYxMjhoLTEwMjR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhoMTAyNHYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4MDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNTEyIDUxMnYtMzg0aC0yNTZ2Mzg0aDI1NnpNODk2IDEwMjR2LTg5NmgtMjU2djg5NmgyNTZ6TTEyODAgNzY4di02NDBoLTI1NnY2NDBoMjU2ek0xNjY0IDExNTJ2LTEwMjRoLTI1NnYxMDI0aDI1NnpNMTc5MiAzMnYxMjE2cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTEyMTZxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6IE0xOTIwIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE2MDBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDBxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODE7IiBkPSJNMTI4MCA5NThxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41cS01IDAgLTE1IC00cTIwIDM0IDIwIDU1cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXEtNyAwIC0xNyAtNXEtNjAgLTM0IC05NyAtNDNxLTY1IDYzIC0xNTQgNjNxLTk4IDAgLTE2NC41IC03Mi41dC02NC41IC0xNjkuNXYtMTJxLTEwNyAxNCAtMTg3LjUgNjR0LTE1Ni41IDEzOXEtMTAgMTIgLTI4IDEycS0yNiAwIC00MSAtNTAuNXQtMTUgLTg2LjVxMCAtNjIgMjkgLTExNyBxLTEzIC0yIC0yMS41IC0xMS41dC04LjUgLTIyLjVxMCAtMTEyIDgxIC0xODVxLTEyIC04IC0xMiAtMjVxMCAtNiAxIC05cTE1IC01MSA1MC41IC05MS41dDg0LjUgLTYwLjVxLTc3IC00MyAtMTY1IC00M3EtOCAwIC0yNCAxLjV0LTIzIDEuNXEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjVxMCAtMTcgMTQgLTI2cTYzIC00NyAxNTAgLTczLjV0MTcwIC0yNi41cTEzMCAwIDI0OCA1OHExNjYgNzkgMjU2IDIzMi41dDg4IDMzOS41djEyIHEyNyAyMiA2Mi41IDYzdDM1LjUgNjF6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDgyOyIgZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC0zNTBxLTIgMCAtMiAxdjY3MWgxNzdxMzEgMCAzMiAyM2wxMiAxNjRxMiAxNSAtOCAyNXEtMTAgMTIgLTI0IDEyaC0xODl2NzJxMCA0NCAxMS41IDU3dDU0LjUgMTNxNTcgMCAxMTcgLTEzcTEzIC0zIDI2IDVxMTEgOCAxMyAyMmwyMyAxNjZxMiAxMiAtNS41IDIyLjV0LTE5LjUgMTMuNSBxLTkzIDI2IC0xOTcgMjZxLTMxMSAwIC0zMTEgLTI5OXYtODVoLTk1cS0xMyAwIC0yMyAtMTAuNXQtMTAgLTI0LjV2LTE3MnEwIC04IDUuNSAtMTJ0MTAgLTQuNXQxNy41IC0wLjVoOTV2LTY3MWwxMCAtMWgtMzMwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4MzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNOTI4IDcwNHEwIDE0IC05IDIzdC0yMyA5cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzcTAgLTE0IDkgLTIzdDIzIC05dDIzIDl0OSAyM3EwIDQwIDI4IDY4dDY4IDI4cTE0IDAgMjMgOXQ5IDIzek0xMTUyIDU3NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NXQ3NSAtMTgxek0xMjggMGgxNTM2djEyOGgtMTUzNnYtMTI4ek0xMjgwIDU3NHEwIDE1OSAtMTEyLjUgMjcxLjUgdC0yNzEuNSAxMTIuNXQtMjcxLjUgLTExMi41dC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41dDI3MS41IC0xMTIuNXQyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXpNMjU2IDEyMTZoMzg0djEyOGgtMzg0di0xMjh6TTEyOCAxMDI0aDE1MzZ2MTE4djEzOGgtODI4bC02NCAtMTI4aC02NDR2LTEyOHpNMTc5MiAxMjgwdi0xMjgwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0xNTM2cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXYxMjgwIHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjVoMTUzNnE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODMyIDEwMjRxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZxMCAtNDIgMTkgLTgzcS00MSAxOSAtODMgMTlxLTgwIDAgLTEzNiAtNTZ0LTU2IC0xMzZ0NTYgLTEzNnQxMzYgLTU2dDEzNiA1NnQ1NiAxMzZxMCA0MiAtMTkgODNxNDEgLTE5IDgzIC0xOXE4MCAwIDEzNiA1NnQ1NiAxMzZ6TTE2ODMgMzIwcTAgLTE3IC00OSAtNjZ0LTY2IC00OXEtOSAwIC0yOC41IDE2dC0zNi41IDMzdC0zOC41IDQwdC0yNC41IDI2IGwtOTYgLTk2bDIyMCAtMjIwcTI4IC0yOCAyOCAtNjhxMCAtNDIgLTM5IC04MXQtODEgLTM5cS00MCAwIC02OCAyOGwtNjcxIDY3MXEtMTc2IC0xMzEgLTM2NSAtMTMxcS0xNjMgMCAtMjY1LjUgMTAyLjV0LTEwMi41IDI2NS41cTAgMTYwIDk1IDMxM3QyNDggMjQ4dDMxMyA5NXExNjMgMCAyNjUuNSAtMTAyLjV0MTAyLjUgLTI2NS41cTAgLTE4OSAtMTMxIC0zNjVsMzU1IC0zNTVsOTYgOTZxLTMgMyAtMjYgMjQuNXQtNDAgMzguNXQtMzMgMzYuNSB0LTE2IDI4LjVxMCAxNyA0OSA2NnQ2NiA0OXExMyAwIDIzIC0xMHE2IC02IDQ2IC00NC41dDgyIC03OS41dDg2LjUgLTg2dDczIC03OHQyOC41IC00MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNODk2IDY0MHEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF0NzUgLTE4MXQxODEgLTc1dDE4MSA3NXQ3NSAxODF6TTE2NjQgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTBxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE2NjQgMTE1MnEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwcTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNSB0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTI4MCA3MzF2LTE4NXEwIC0xMCAtNyAtMTkuNXQtMTYgLTEwLjVsLTE1NSAtMjRxLTExIC0zNSAtMzIgLTc2cTM0IC00OCA5MCAtMTE1cTcgLTEwIDcgLTIwcTAgLTEyIC03IC0xOXEtMjMgLTMwIC04Mi41IC04OS41dC03OC41IC01OS41cS0xMSAwIC0yMSA3bC0xMTUgOTBxLTM3IC0xOSAtNzcgLTMxcS0xMSAtMTA4IC0yMyAtMTU1cS03IC0yNCAtMzAgLTI0aC0xODZxLTExIDAgLTIwIDcuNXQtMTAgMTcuNSBsLTIzIDE1M3EtMzQgMTAgLTc1IDMxbC0xMTggLTg5cS03IC03IC0yMCAtN3EtMTEgMCAtMjEgOHEtMTQ0IDEzMyAtMTQ0IDE2MHEwIDkgNyAxOXExMCAxNCA0MSA1M3Q0NyA2MXEtMjMgNDQgLTM1IDgybC0xNTIgMjRxLTEwIDEgLTE3IDkuNXQtNyAxOS41djE4NXEwIDEwIDcgMTkuNXQxNiAxMC41bDE1NSAyNHExMSAzNSAzMiA3NnEtMzQgNDggLTkwIDExNXEtNyAxMSAtNyAyMHEwIDEyIDcgMjBxMjIgMzAgODIgODl0NzkgNTlxMTEgMCAyMSAtNyBsMTE1IC05MHEzNCAxOCA3NyAzMnExMSAxMDggMjMgMTU0cTcgMjQgMzAgMjRoMTg2cTExIDAgMjAgLTcuNXQxMCAtMTcuNWwyMyAtMTUzcTM0IC0xMCA3NSAtMzFsMTE4IDg5cTggNyAyMCA3cTExIDAgMjEgLThxMTQ0IC0xMzMgMTQ0IC0xNjBxMCAtOSAtNyAtMTlxLTEyIC0xNiAtNDIgLTU0dC00NSAtNjBxMjMgLTQ4IDM0IC04MmwxNTIgLTIzcTEwIC0yIDE3IC0xMC41dDcgLTE5LjV6TTE5MjAgMTk4di0xNDBxMCAtMTYgLTE0OSAtMzEgcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjhxLTIwIC0yIC0zMCAtMnQtMzAgMnEtMTQgLTIxIC01MiAtNjh0LTQ2IC00N3EtMiAwIC0xMjQgNzFxLTQgMyAtNCA3cTAgMjUgNTEgMTM4cS0xOCAyNSAtMzAgNTJxLTE0OSAxNSAtMTQ5IDMxdjE0MHEwIDE2IDE0OSAzMXExMyAyOSAzMCA1MnEtNTEgMTEzIC01MSAxMzhxMCA0IDQgN3E0IDIgMzUgMjAgdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MHE0IC0zIDQgLTdxMCAtMjUgLTUxIC0xMzhxMTcgLTIzIDMwIC01MnExNDkgLTE1IDE0OSAtMzF6TTE5MjAgMTIyMnYtMTQwcTAgLTE2IC0xNDkgLTMxcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjggcS0yMCAtMiAtMzAgLTJ0LTMwIDJxLTE0IC0yMSAtNTIgLTY4dC00NiAtNDdxLTIgMCAtMTI0IDcxcS00IDMgLTQgN3EwIDI1IDUxIDEzOHEtMTggMjUgLTMwIDUycS0xNDkgMTUgLTE0OSAzMXYxNDBxMCAxNiAxNDkgMzFxMTMgMjkgMzAgNTJxLTUxIDExMyAtNTEgMTM4cTAgNCA0IDdxNCAyIDM1IDIwdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MCBxNCAtMyA0IC03cTAgLTI1IC01MSAtMTM4cTE3IC0yMyAzMCAtNTJxMTQ5IC0xNSAxNDkgLTMxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDg2OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNDA4IDc2OHEwIC0xMzkgLTk0IC0yNTd0LTI1Ni41IC0xODYuNXQtMzUzLjUgLTY4LjVxLTg2IDAgLTE3NiAxNnEtMTI0IC04OCAtMjc4IC0xMjhxLTM2IC05IC04NiAtMTZoLTNxLTExIDAgLTIwLjUgOHQtMTEuNSAyMXEtMSAzIC0xIDYuNXQwLjUgNi41dDIgNmwyLjUgNXQzLjUgNS41dDQgNXQ0LjUgNXQ0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNXQyMi41IDI5dDI1IDM4LjV0MjAuNSA0NHEtMTI0IDcyIC0xOTUgMTc3dC03MSAyMjQgcTAgMTM5IDk0IDI1N3QyNTYuNSAxODYuNXQzNTMuNSA2OC41dDM1My41IC02OC41dDI1Ni41IC0xODYuNXQ5NCAtMjU3ek0xNzkyIDUxMnEwIC0xMjAgLTcxIC0yMjQuNXQtMTk1IC0xNzYuNXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03IHEtNTAgNyAtODYgMTZxLTE1NCA0MCAtMjc4IDEyOHEtOTAgLTE2IC0xNzYgLTE2cS0yNzEgMCAtNDcyIDEzMnE1OCAtNCA4OCAtNHExNjEgMCAzMDkgNDV0MjY0IDEyOXExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NzsiIGQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3NjhxMCA1MSAtMzkgODkuNXQtODkgMzguNWgtMzUycTAgNTggNDggMTU5LjV0NDggMTYwLjVxMCA5OCAtMzIgMTQ1dC0xMjggNDdxLTI2IC0yNiAtMzggLTg1dC0zMC41IC0xMjUuNXQtNTkuNSAtMTA5LjVxLTIyIC0yMyAtNzcgLTkxcS00IC01IC0yMyAtMzB0LTMxLjUgLTQxdC0zNC41IC00Mi41IHQtNDAgLTQ0dC0zOC41IC0zNS41dC00MCAtMjd0LTM1LjUgLTloLTMydi02NDBoMzJxMTMgMCAzMS41IC0zdDMzIC02LjV0MzggLTExdDM1IC0xMS41dDM1LjUgLTEyLjV0MjkgLTEwLjVxMjExIC03MyAzNDIgLTczaDEyMXExOTIgMCAxOTIgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVxMzIgMSA1My41IDQ3dDIxLjUgODF6TTE1MzYgNzY5IHEwIC04OSAtNDkgLTE2M3E5IC0zMyA5IC02OXEwIC03NyAtMzggLTE0NHEzIC0yMSAzIC00M3EwIC0xMDEgLTYwIC0xNzhxMSAtMTM5IC04NSAtMjE5LjV0LTIyNyAtODAuNWgtMzZoLTkzcS05NiAwIC0xODkuNSAyMi41dC0yMTYuNSA2NS41cS0xMTYgNDAgLTEzOCA0MGgtMjg4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDI3NHEzNiAyNCAxMzcgMTU1cTU4IDc1IDEwNyAxMjggcTI0IDI1IDM1LjUgODUuNXQzMC41IDEyNi41dDYyIDEwOHEzOSAzNyA5MCAzN3E4NCAwIDE1MSAtMzIuNXQxMDIgLTEwMS41dDM1IC0xODZxMCAtOTMgLTQ4IC0xOTJoMTc2cTEwNCAwIDE4MCAtNzZ0NzYgLTE3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4ODsiIGQ9Ik0yNTYgMTA4OHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggNTEycTAgMzUgLTIxLjUgODF0LTUzLjUgNDdxMTUgMTcgMjUgNDcuNXQxMCA1NS41cTAgNjkgLTUzIDExOXExOCAzMiAxOCA2OXQtMTcuNSA3My41dC00Ny41IDUyLjVxNSAzMCA1IDU2cTAgODUgLTQ5IDEyNnQtMTM2IDQxaC0xMjhxLTEzMSAwIC0zNDIgLTczcS01IC0yIC0yOSAtMTAuNSB0LTM1LjUgLTEyLjV0LTM1IC0xMS41dC0zOCAtMTF0LTMzIC02LjV0LTMxLjUgLTNoLTMydi02NDBoMzJxMTYgMCAzNS41IC05dDQwIC0yN3QzOC41IC0zNS41dDQwIC00NHQzNC41IC00Mi41dDMxLjUgLTQxdDIzIC0zMHE1NSAtNjggNzcgLTkxcTQxIC00MyA1OS41IC0xMDkuNXQzMC41IC0xMjUuNXQzOCAtODVxOTYgMCAxMjggNDd0MzIgMTQ1cTAgNTkgLTQ4IDE2MC41dC00OCAxNTkuNWgzNTJxNTAgMCA4OSAzOC41dDM5IDg5LjV6IE0xNTM2IDUxMXEwIC0xMDMgLTc2IC0xNzl0LTE4MCAtNzZoLTE3NnE0OCAtOTkgNDggLTE5MnEwIC0xMTggLTM1IC0xODZxLTM1IC02OSAtMTAyIC0xMDEuNXQtMTUxIC0zMi41cS01MSAwIC05MCAzN3EtMzQgMzMgLTU0IDgydC0yNS41IDkwLjV0LTE3LjUgODQuNXQtMzEgNjRxLTQ4IDUwIC0xMDcgMTI3cS0xMDEgMTMxIC0xMzcgMTU1aC0yNzRxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djY0MHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjUgaDI4OHEyMiAwIDEzOCA0MHExMjggNDQgMjIzIDY2dDIwMCAyMmgxMTJxMTQwIDAgMjI2LjUgLTc5dDg1LjUgLTIxNnYtNXE2MCAtNzcgNjAgLTE3OHEwIC0yMiAtMyAtNDNxMzggLTY3IDM4IC0xNDRxMCAtMzYgLTkgLTY5cTQ5IC03NCA0OSAtMTYzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDg5OyIgaG9yaXotYWR2LXg9Ijg5NiIgZD0iTTgzMiAxNTA0di0xMzM5bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOGE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgOTQwcTAgODEgLTIxLjUgMTQzdC01NSA5OC41dC04MS41IDU5LjV0LTk0IDMxdC05OCA4dC0xMTIgLTI1LjV0LTExMC41IC02NHQtODYuNSAtNzJ0LTYwIC02MS41cS0xOCAtMjIgLTQ5IC0yMnQtNDkgMjJxLTI0IDI4IC02MCA2MS41dC04Ni41IDcydC0xMTAuNSA2NHQtMTEyIDI1LjV0LTk4IC04dC05NCAtMzF0LTgxLjUgLTU5LjV0LTU1IC05OC41dC0yMS41IC0xNDNxMCAtMTY4IDE4NyAtMzU1bDU4MSAtNTYwbDU4MCA1NTkgcTE4OCAxODggMTg4IDM1NnpNMTc5MiA5NDBxMCAtMjIxIC0yMjkgLTQ1MGwtNjIzIC02MDBxLTE4IC0xOCAtNDQgLTE4dC00NCAxOGwtNjI0IDYwMnEtMTAgOCAtMjcuNSAyNnQtNTUuNSA2NS41dC02OCA5Ny41dC01My41IDEyMXQtMjMuNSAxMzhxMCAyMjAgMTI3IDM0NHQzNTEgMTI0cTYyIDAgMTI2LjUgLTIxLjV0MTIwIC01OHQ5NS41IC02OC41dDc2IC02OHEzNiAzNiA3NiA2OHQ5NS41IDY4LjV0MTIwIDU4dDEyNi41IDIxLjUgcTIyNCAwIDM1MSAtMTI0dDEyNyAtMzQ0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhiOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgOTZxMCAtNCAxIC0yMHQwLjUgLTI2LjV0LTMgLTIzLjV0LTEwIC0xOS41dC0yMC41IC02LjVoLTMyMHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2NzA0cTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41cTAgLTQgMSAtMjB0MC41IC0yNi41dC0zIC0yMy41dC0xMCAtMTkuNXQtMjAuNSAtNi41aC0zMjBxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTcwNCBxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDI4OGgxMWgxM3QxMS41IC0xdDExLjUgLTN0OCAtNS41dDcgLTl0MiAtMTMuNXpNMTU2OCA2NDBxMCAtMjYgLTE5IC00NWwtNTQ0IC01NDRxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2Mjg4aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWg0NDh2Mjg4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDU0NCAtNTQ0cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOGM7IiBkPSJNNTEyIDE2MHY2NDBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di02NDBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNNTAzIDEwMjhxMCA1MSAtMzYgODcuNXQtODggMzYuNXEtNTEgMCAtODcgLTM2LjV0LTM2IC04Ny41dDM2IC04Ny41dDg3IC0zNi41cTUyIDAgODggMzYuNXQzNiA4Ny41ek0xMjgwIDE2MHY0MzUgcTAgMTI3IC03My41IDE5Mi41dC0yMDIuNSA2NS41cS05MCAwIC0xNTggLTQ1cS0xMiAtOCAtMTQgLTEycTAgMzYgLTM1IDM2aC0xNzZxLTE0IDAgLTI5LjUgLTcuNXQtMTUuNSAtMjAuNXYtNjQ0cTAgLTEzIDE1LjUgLTIyLjV0MjkuNSAtOS41aDE4MnExMiAwIDIwLjUgOS41dDguNSAyMi41djM0OXEwIDE0MCAxMTQgMTQwcTQ5IDAgNjMuNSAtMjIuNXQxNC41IC03My41di0zOTNxMCAtMTMgMTIgLTIyLjV0MjYgLTkuNWgxODYgcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhkOyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik00ODAgNjcydjQ0OHEwIDE0IC05IDIzdC0yMyA5dC0yMyAtOXQtOSAtMjN2LTQ0OHEwIC0xNCA5IC0yM3QyMyAtOXQyMyA5dDkgMjN6TTExNTIgMzIwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDI5bC01MSAtNDgzcS0yIC0xMiAtMTAuNSAtMjAuNXQtMjAuNSAtOC41aC0xcS0yNyAwIC0zMiAyN2wtNzYgNDg1aC00MDRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDEyMyA3OC41IDIyMS41dDE3Ny41IDk4LjV2NTEycS01MiAwIC05MCAzOCB0LTM4IDkwdDM4IDkwdDkwIDM4aDY0MHE1MiAwIDkwIC0zOHQzOCAtOTB0LTM4IC05MHQtOTAgLTM4di01MTJxOTkgMCAxNzcuNSAtOTguNXQ3OC41IC0yMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4ZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTQwOCA2MDh2LTMyMHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDcwNHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YzMjAgcTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgMTQ3MnYtNTEycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTE3NiAxNzZsLTY1MiAtNjUycS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTExNCAxMTRxLTEwIDEwIC0xMCAyM3QxMCAyM2w2NTIgNjUybC0xNzYgMTc2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MDsiIGQ9Ik0xMTg0IDY0MHEwIC0yNiAtMTkgLTQ1bC01NDQgLTU0NHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyODhoLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHYyODhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNTQ0IC01NDRxMTkgLTE5IDE5IC00NXpNMTUzNiA5OTJ2LTcwNHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtMzIwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjUgcTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTY2IDAgMTEzIDQ3dDQ3IDExM3Y3MDRxMCA2NiAtNDcgMTEzdC0xMTMgNDdoLTI4OGgtMTFoLTEzdC0xMS41IDF0LTExLjUgM3QtOCA1LjV0LTcgOXQtMiAxMy41cTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDkxOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik00NTggNjUzcS03NCAxNjIgLTc0IDM3MWgtMjU2di05NnEwIC03OCA5NC41IC0xNjJ0MjM1LjUgLTExM3pNMTUzNiA5Mjh2OTZoLTI1NnEwIC0yMDkgLTc0IC0zNzFxMTQxIDI5IDIzNS41IDExM3Q5NC41IDE2MnpNMTY2NCAxMDU2di0xMjhxMCAtNzEgLTQxLjUgLTE0M3QtMTEyIC0xMzB0LTE3MyAtOTcuNXQtMjE1LjUgLTQ0LjVxLTQyIC01NCAtOTUgLTk1cS0zOCAtMzQgLTUyLjUgLTcyLjV0LTE0LjUgLTg5LjVxMCAtNTQgMzAuNSAtOTEgdDk3LjUgLTM3cTc1IDAgMTMzLjUgLTQ1LjV0NTguNSAtMTE0LjV2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTgzMnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDY5IDU4LjUgMTE0LjV0MTMzLjUgNDUuNXE2NyAwIDk3LjUgMzd0MzAuNSA5MXEwIDUxIC0xNC41IDg5LjV0LTUyLjUgNzIuNXEtNTMgNDEgLTk1IDk1cS0xMTMgNSAtMjE1LjUgNDQuNXQtMTczIDk3LjV0LTExMiAxMzB0LTQxLjUgMTQzdjEyOHEwIDQwIDI4IDY4dDY4IDI4aDI4OHY5NiBxMCA2NiA0NyAxMTN0MTEzIDQ3aDU3NnE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMjg4cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MjsiIGQ9Ik01ODIgMjI4cTAgLTY2IC05MyAtNjZxLTEwNyAwIC0xMDcgNjNxMCA2NCA5OCA2NHExMDIgMCAxMDIgLTYxek01NDYgNjk0cTAgLTg1IC03NCAtODVxLTc3IDAgLTc3IDg0cTAgOTAgNzcgOTBxMzYgMCA1NSAtMjZ0MTkgLTYzek03MTIgNzY5djEyNXEtNzggLTI5IC0xMzUgLTI5cS01MCAyOSAtMTEwIDI5cS04NiAwIC0xNDUgLTU3dC01OSAtMTQzcTAgLTUwIDI5LjUgLTEwMnQ3My41IC02N3YtM3EtMzggLTE3IC0zOCAtODUgcTAgLTUyIDQxIC03N3YtM3EtMTEzIC0zNyAtMTEzIC0xMzlxMCAtNjAgMzYgLTk4dDg0IC01MXQxMDcgLTEzcTIyNCAwIDIyNCAxODdxMCA0OCAtMjUuNSA3OHQtNjIuNSA0Mi41dC03NCAyMS41dC02Mi41IDIzLjV0LTI1LjUgMzkuNXEwIDQ0IDQ5IDUycTc3IDE1IDEyMiA3MHQ0NSAxMzRxMCAyNCAtMTAgNTJxMzAgNyA0OSAxM3pNNzcxIDM1MGgxMzdxLTIgMjAgLTIgOTB2MzcycTAgNTkgMiA3NmgtMTM3cTMgLTI2IDMgLTc5di0zNzcgcTAgLTU1IC0zIC04MnpNMTI4MCAzNjZ2MTIxcS0zMCAtMjEgLTY4IC0yMXEtNTMgMCAtNTMgODJ2MjI1aDUycTkgMCAyNi41IC0xdDI2LjUgLTF2MTE3aC0xMDVxMCA4MiAzIDEwMmgtMTQwcTQgLTI0IDQgLTU1di00N2gtNjB2LTExN3EzNiAzIDM3IDNxNCAwIDExLjUgLTAuNXQxMS41IC0wLjV2LTJoLTJ2LTIxN3EwIC0zNyAyLjUgLTY0dDExLjUgLTU2LjV0MjQuNSAtNDguNXQ0My41IC0zMXQ2NiAtMTJxNjQgMCAxMDggMjR6TTkyNCAxMDcyIHEwIDM2IC0yNCA2My41dC02MCAyNy41dC02MC41IC0yN3QtMjQuNSAtNjRxMCAtMzYgMjUgLTYyLjV0NjAgLTI2LjV0NTkuNSAyN3QyNC41IDYyek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA0ODB2LTU3NnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE2MDBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY1NzZxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0zNTJoMTE1MnYzNTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMzQ0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnYtNDQ4IHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OGgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsNDQ4IDQ0OHExOSAxOSA0NSAxOXQ0NSAtMTlsNDQ4IC00NDhxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5NDsiIGQ9Ik0xNDA3IDcxMHEwIDQ0IC03IDExMy41dC0xOCA5Ni41cS0xMiAzMCAtMTcgNDR0LTkgMzYuNXQtNCA0OC41cTAgMjMgNSA2OC41dDUgNjcuNXEwIDM3IC0xMCA1NXEtNCAxIC0xMyAxcS0xOSAwIC01OCAtNC41dC01OSAtNC41cS02MCAwIC0xNzYgMjR0LTE3NSAyNHEtNDMgMCAtOTQuNSAtMTEuNXQtODUgLTIzLjV0LTg5LjUgLTM0cS0xMzcgLTU0IC0yMDIgLTEwM3EtOTYgLTczIC0xNTkuNSAtMTg5LjV0LTg4IC0yMzZ0LTI0LjUgLTI0OC41IHEwIC00MCAxMi41IC0xMjB0MTIuNSAtMTIxcTAgLTIzIC0xMSAtNjYuNXQtMTEgLTY1LjV0MTIgLTM2LjV0MzQgLTE0LjVxMjQgMCA3Mi41IDExdDczLjUgMTFxNTcgMCAxNjkuNSAtMTUuNXQxNjkuNSAtMTUuNXExODEgMCAyODQgMzZxMTI5IDQ1IDIzNS41IDE1Mi41dDE2NiAyNDUuNXQ1OS41IDI3NXpNMTUzNSA3MTJxMCAtMTY1IC03MCAtMzI3LjV0LTE5NiAtMjg4dC0yODEgLTE4MC41cS0xMjQgLTQ0IC0zMjYgLTQ0IHEtNTcgMCAtMTcwIDE0LjV0LTE2OSAxNC41cS0yNCAwIC03Mi41IC0xNC41dC03My41IC0xNC41cS03MyAwIC0xMjMuNSA1NS41dC01MC41IDEyOC41cTAgMjQgMTEgNjh0MTEgNjdxMCA0MCAtMTIuNSAxMjAuNXQtMTIuNSAxMjEuNXEwIDExMSAxOCAyMTcuNXQ1NC41IDIwOS41dDEwMC41IDE5NHQxNTAgMTU2cTc4IDU5IDIzMiAxMjBxMTk0IDc4IDMxNiA3OHE2MCAwIDE3NS41IC0yNHQxNzMuNSAtMjRxMTkgMCA1NyA1dDU4IDUgcTgxIDAgMTE4IC01MC41dDM3IC0xMzQuNXEwIC0yMyAtNSAtNjh0LTUgLTY4cTAgLTEwIDEgLTE4LjV0MyAtMTd0NCAtMTMuNXQ2LjUgLTE2dDYuNSAtMTdxMTYgLTQwIDI1IC0xMTguNXQ5IC0xMzYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5NTsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCAyOTZxMCAtMjcgLTEwIC03MC41dC0yMSAtNjguNXEtMjEgLTUwIC0xMjIgLTEwNnEtOTQgLTUxIC0xODYgLTUxcS0yNyAwIC01Mi41IDMuNXQtNTcuNSAxMi41dC00Ny41IDE0LjV0LTU1LjUgMjAuNXQtNDkgMThxLTk4IDM1IC0xNzUgODNxLTEyOCA3OSAtMjY0LjUgMjE1LjV0LTIxNS41IDI2NC41cS00OCA3NyAtODMgMTc1cS0zIDkgLTE4IDQ5dC0yMC41IDU1LjV0LTE0LjUgNDcuNXQtMTIuNSA1Ny41dC0zLjUgNTIuNSBxMCA5MiA1MSAxODZxNTYgMTAxIDEwNiAxMjJxMjUgMTEgNjguNSAyMXQ3MC41IDEwcTE0IDAgMjEgLTNxMTggLTYgNTMgLTc2cTExIC0xOSAzMCAtNTR0MzUgLTYzLjV0MzEgLTUzLjVxMyAtNCAxNy41IC0yNXQyMS41IC0zNS41dDcgLTI4LjVxMCAtMjAgLTI4LjUgLTUwdC02MiAtNTV0LTYyIC01M3QtMjguNSAtNDZxMCAtOSA1IC0yMi41dDguNSAtMjAuNXQxNCAtMjR0MTEuNSAtMTlxNzYgLTEzNyAxNzQgLTIzNXQyMzUgLTE3NCBxMiAtMSAxOSAtMTEuNXQyNCAtMTR0MjAuNSAtOC41dDIyLjUgLTVxMTggMCA0NiAyOC41dDUzIDYydDU1IDYydDUwIDI4LjVxMTQgMCAyOC41IC03dDM1LjUgLTIxLjV0MjUgLTE3LjVxMjUgLTE1IDUzLjUgLTMxdDYzLjUgLTM1dDU0IC0zMHE3MCAtMzUgNzYgLTUzcTMgLTcgMyAtMjF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExMjAgMTI4MGgtODMycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2ODMycTAgNjYgLTQ3IDExM3QtMTEzIDQ3ek0xNDA4IDExMjB2LTgzMnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMiBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTc7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExNTIgMTI4MGgtMTAyNHYtMTI0Mmw0MjMgNDA2bDg5IDg1bDg5IC04NWw0MjMgLTQwNnYxMjQyek0xMTY0IDE0MDhxMjMgMCA0NCAtOXEzMyAtMTMgNTIuNSAtNDF0MTkuNSAtNjJ2LTEyODlxMCAtMzQgLTE5LjUgLTYydC01Mi41IC00MXEtMTkgLTggLTQ0IC04cS00OCAwIC04MyAzMmwtNDQxIDQyNGwtNDQxIC00MjRxLTM2IC0zMyAtODMgLTMzcS0yMyAwIC00NCA5cS0zMyAxMyAtNTIuNSA0MXQtMTkuNSA2MnYxMjg5IHEwIDM0IDE5LjUgNjJ0NTIuNSA0MXEyMSA5IDQ0IDloMTA0OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5ODsiIGQ9Ik0xMjgwIDM0M3EwIDExIC0yIDE2cS0zIDggLTM4LjUgMjkuNXQtODguNSA0OS41bC01MyAyOXEtNSAzIC0xOSAxM3QtMjUgMTV0LTIxIDVxLTE4IDAgLTQ3IC0zMi41dC01NyAtNjUuNXQtNDQgLTMzcS03IDAgLTE2LjUgMy41dC0xNS41IDYuNXQtMTcgOS41dC0xNCA4LjVxLTk5IDU1IC0xNzAuNSAxMjYuNXQtMTI2LjUgMTcwLjVxLTIgMyAtOC41IDE0dC05LjUgMTd0LTYuNSAxNS41dC0zLjUgMTYuNXEwIDEzIDIwLjUgMzMuNXQ0NSAzOC41IHQ0NSAzOS41dDIwLjUgMzYuNXEwIDEwIC01IDIxdC0xNSAyNXQtMTMgMTlxLTMgNiAtMTUgMjguNXQtMjUgNDUuNXQtMjYuNSA0Ny41dC0yNSA0MC41dC0xNi41IDE4dC0xNiAycS00OCAwIC0xMDEgLTIycS00NiAtMjEgLTgwIC05NC41dC0zNCAtMTMwLjVxMCAtMTYgMi41IC0zNHQ1IC0zMC41dDkgLTMzdDEwIC0yOS41dDEyLjUgLTMzdDExIC0zMHE2MCAtMTY0IDIxNi41IC0zMjAuNXQzMjAuNSAtMjE2LjVxNiAtMiAzMCAtMTF0MzMgLTEyLjUgdDI5LjUgLTEwdDMzIC05dDMwLjUgLTV0MzQgLTIuNXE1NyAwIDEzMC41IDM0dDk0LjUgODBxMjIgNTMgMjIgMTAxek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5OTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTg3NSAxMjAycTAgLTEwIC01IC0xOHEtNjQgLTEwNCAtMTc5IC0xOTB2LTMzcTQgLTIyNyAtMTAwIC00NTdxLTEzNCAtMjk3IC0zOTcuNSAtNDY0LjV0LTU5MS41IC0xNjcuNXEtMjY1IDAgLTUwMCAxMjJxLTY0IDMzIC04NyA1MHEtMTUgMTIgLTE1IDI3cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVxMTQgMCA0NCAtMi41dDQ1IC0yLjVxMjA0IDAgMzc1IDEwNnEtMTAzIDI0IC0xODEgOTZ0LTExMSAxNzNxLTIgOCAtMiAxMXEwIDEyIDkgMjEuNSB0MjIgOS41cTUgMCAxNCAtMnQxMiAtMnEtODkgNTUgLTE0MiAxNDd0LTUzIDE5NnEwIDE1IDExLjUgMjUuNXQyNy41IDEwLjVxMTAgMCAzNSAtMTEuNXQzMCAtMTMuNXEtOTIgMTEwIC05MiAyNTZxMCA1MSAxNC41IDEwOHQ0MC41IDk1cTEwIDE2IDI1IDE2cTE2IDAgMjcgLTEycTc2IC04NCAxMTAgLTExNXExMjMgLTExMSAyNzYgLTE3Ny41dDMxNyAtODAuNXEtNCAyMSAtNCA0OXEwIDE2NyAxMTguNSAyODUuNXQyODUuNSAxMTguNSBxMTYzIDAgMjgyIC0xMTRxOTUgMjAgMjA5IDgycTggNSAxNiA1cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXEwIC0yNCAtMjggLTczdC01MSAtNzZxNyAyIDMwIDEwLjV0NDMgMTZ0MjQgNy41cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5YTsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik01NjAgMTEyNXEtNDkgMCAtNjIgLTE1LjV0LTEzIC02Ni41di04OGgyMTdxMTYgMCAyNyAtMTJxMTEgLTEzIDEwIC0yOWwtMTQgLTIwMHEtMiAtMTUgLTEyLjUgLTI1LjV0LTI1LjUgLTEwLjVoLTIwMnYtNzY4cTAgLTE2IC0xMSAtMjd0LTI2IC0xMWgtMjUwcS0xNiAwIC0yNyAxMXQtMTEgMjd2NzY4aC0xMjJxLTE2IDAgLTI3IDExLjV0LTExIDI3LjV2MjAwcTAgMTYgMTEgMjd0MjcgMTFoMTIydjEwM3EwIDE3NyA4OCAyNjMuNSB0MjY3IDg2LjVxMTIwIDAgMjI1IC0zMHExNCAtNCAyMiAtMTZ0NiAtMjZsLTI3IC0xOTVxLTIgLTE2IC0xNiAtMjZxLTE0IC05IC0zMCAtNnEtNzYgMTYgLTEzNSAxNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5YjsiIGQ9Ik0xNDA4IDY0MHEwIDEzMCAtNTEgMjQ4LjV0LTEzNi41IDIwNHQtMjA0IDEzNi41dC0yNDguNSA1MXQtMjQ4LjUgLTUxdC0yMDQgLTEzNi41dC0xMzYuNSAtMjA0dC01MSAtMjQ4LjVxMCAtMjA5IDEyNC41IC0zNzguNXQzMjMuNSAtMjMxLjV2MTY5cS01NCAtNyAtNjkgLTdxLTExMCAwIC0xNTMgMTAwcS0xNSAzOCAtMzYgNjNxLTUgNiAtMjEgMTl0LTI4LjUgMjR0LTEyLjUgMTZxMCAxMiAyOCAxMnEyOSAwIDUxLjUgLTE0LjV0MzggLTM1IHQzMS41IC00MS41dDQwLjUgLTM1LjV0NTYuNSAtMTQuNXE0MiAwIDgxIDE0cTE2IDU3IDYzIDg5cS0xNjYgMTYgLTI0NiA4My41dC04MCAyMjQuNXEwIDExOCA3MyAxOThxLTE0IDQyIC0xNCA4NHEwIDU4IDI3IDEwOXE1NyAwIDEwMSAtMTkuNXQxMDEgLTYwLjVxNzYgMTggMTY5IDE4cTgwIDAgMTUzIC0xNnE1NyA0MCAxMDAuNSA1OXQ5OS41IDE5cTI3IC01MSAyNyAtMTA5cTAgLTQzIC0xNCAtODNxNzMgLTgyIDczIC0xOTkgcTAgLTE1NyAtODAgLTIyNS41dC0yNDUgLTgzLjVxNjkgLTQ3IDY5IC0xMzF2LTIyNnExOTkgNjIgMzIzLjUgMjMxLjV0MTI0LjUgMzc4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDljOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03MDQgMTYwcTAgNiAtMTUgNTd0LTM1IDExNS41dC0yMCA2NS41cTMyIDE2IDUxIDQ3dDE5IDY3cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41cTAgLTM2IDE5IC02Ni41dDUxIC00Ny41cTAgLTIgLTIwIC02NnQtMzUgLTExNXQtMTUgLTU3cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgOTYwdi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5IGgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyNTZxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4di01NzZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHY1NzZxMCA0MCAyOCA2OHQ2OCAyOGg2NzJ2MTkycTAgMTg1IDEzMS41IDMxNi41dDMxNi41IDEzMS41dDMxNi41IC0xMzEuNXQxMzEuNSAtMzE2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE3NjAgMTQwOHE2NiAwIDExMyAtNDd0NDcgLTExM3YtMTIxNnEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTYwMHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHpNMTYwIDEyODBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0yMjRoMTY2NHYyMjRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwek0xNzYwIDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY2MDhoLTE2NjR2LTYwOCBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwek0yNTYgMTI4djEyOGgyNTZ2LTEyOGgtMjU2ek02NDAgMTI4djEyOGgzODR2LTEyOGgtMzg0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDllOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMTkycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNODk2IDY5cTIgLTI4IC0xNyAtNDhxLTE4IC0yMSAtNDcgLTIxaC0xMzVxLTI1IDAgLTQzIDE2LjV0LTIwIDQxLjVxLTIyIDIyOSAtMTg0LjUgMzkxLjV0LTM5MS41IDE4NC41cS0yNSAyIC00MS41IDIwdC0xNi41IDQzdjEzNXEwIDI5IDIxIDQ3cTE3IDE3IDQzIDE3aDVxMTYwIC0xMyAzMDYgLTgwLjUgdDI1OSAtMTgxLjVxMTE0IC0xMTMgMTgxLjUgLTI1OXQ4MC41IC0zMDZ6TTE0MDggNjdxMiAtMjcgLTE4IC00N3EtMTggLTIwIC00NiAtMjBoLTE0M3EtMjYgMCAtNDQuNSAxNy41dC0xOS41IDQyLjVxLTEyIDIxNSAtMTAxIDQwOC41dC0yMzEuNSAzMzZ0LTMzNiAyMzEuNXQtNDA4LjUgMTAycS0yNSAxIC00Mi41IDE5LjV0LTE3LjUgNDMuNXYxNDNxMCAyOCAyMCA0NnExOCAxOCA0NCAxOGgzcTI2MiAtMTMgNTAxLjUgLTEyMHQ0MjUuNSAtMjk0IHExODcgLTE4NiAyOTQgLTQyNS41dDEyMCAtNTAxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTA7IiBkPSJNMTA0MCAzMjBxMCAtMzMgLTIzLjUgLTU2LjV0LTU2LjUgLTIzLjV0LTU2LjUgMjMuNXQtMjMuNSA1Ni41dDIzLjUgNTYuNXQ1Ni41IDIzLjV0NTYuNSAtMjMuNXQyMy41IC01Ni41ek0xMjk2IDMyMHEwIC0zMyAtMjMuNSAtNTYuNXQtNTYuNSAtMjMuNXQtNTYuNSAyMy41dC0yMy41IDU2LjV0MjMuNSA1Ni41dDU2LjUgMjMuNXQ1Ni41IC0yMy41dDIzLjUgLTU2LjV6TTE0MDggMTYwdjMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUgaC0xMjE2cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTIxNnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNzggNjQwaDExODBsLTE1NyA0ODJxLTQgMTMgLTE2IDIxLjV0LTI2IDguNWgtNzgycS0xNCAwIC0yNiAtOC41dC0xNiAtMjEuNXpNMTUzNiA0ODB2LTMyMHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTIxNnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MzIwcTAgMjUgMTYgNzUgbDE5NyA2MDZxMTcgNTMgNjMgODZ0MTAxIDMzaDc4MnE1NSAwIDEwMSAtMzN0NjMgLTg2bDE5NyAtNjA2cTE2IC01MCAxNiAtNzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgODk2cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41dC0zNy41IC05MC41dC05MC41IC0zNy41di0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4cS00MTcgMzQ3IC04MTIgMzgwcS01OCAtMTkgLTkxIC02NnQtMzEgLTEwMC41dDQwIC05Mi41cS0yMCAtMzMgLTIzIC02NS41dDYgLTU4dDMzLjUgLTU1dDQ4IC01MHQ2MS41IC01MC41cS0yOSAtNTggLTExMS41IC04M3QtMTY4LjUgLTExLjV0LTEzMiA1NS41cS03IDIzIC0yOS41IDg3LjUgdC0zMiA5NC41dC0yMyA4OXQtMTUgMTAxdDMuNSA5OC41dDIyIDExMC41aC0xMjJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjE5MnEwIDY2IDQ3IDExM3QxMTMgNDdoNDgwcTQzNSAwIDg5NiAzODRxNTIgMCA5MCAtMzh0MzggLTkwdi0zODR6TTE1MzYgMjkydjk1NHEtMzk0IC0zMDIgLTc2OCAtMzQzdi0yNzBxMzc3IC00MiA3NjggLTM0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhMjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODQ4IC0xNjBxMCAxNiAtMTYgMTZxLTU5IDAgLTEwMS41IDQyLjV0LTQyLjUgMTAxLjVxMCAxNiAtMTYgMTZ0LTE2IC0xNnEwIC03MyA1MS41IC0xMjQuNXQxMjQuNSAtNTEuNXExNiAwIDE2IDE2ek0xODMgMTI4aDEyOThxLTE2NCAxODEgLTI0Ni41IDQxMS41dC04Mi41IDQ4NC41cTAgMjU2IC0zMjAgMjU2dC0zMjAgLTI1NnEwIC0yNTQgLTgyLjUgLTQ4NC41dC0yNDYuNSAtNDExLjV6TTE2NjQgMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOCBoLTQ0OHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC00NDhxLTUyIDAgLTkwIDM4dC0zOCA5MHExOTAgMTYxIDI4NyAzOTcuNXQ5NyA0OTguNXEwIDE2NSA5NiAyNjJ0MjY0IDExN3EtOCAxOCAtOCAzN3EwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMTkgLTggLTM3cTE2OCAtMjAgMjY0IC0xMTd0OTYgLTI2MnEwIC0yNjIgOTcgLTQ5OC41dDI4NyAtMzk3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTM7IiBkPSJNMTM3NiA2NDBsMTM4IC0xMzVxMzAgLTI4IDIwIC03MHEtMTIgLTQxIC01MiAtNTFsLTE4OCAtNDhsNTMgLTE4NnExMiAtNDEgLTE5IC03MHEtMjkgLTMxIC03MCAtMTlsLTE4NiA1M2wtNDggLTE4OHEtMTAgLTQwIC01MSAtNTJxLTEyIC0yIC0xOSAtMnEtMzEgMCAtNTEgMjJsLTEzNSAxMzhsLTEzNSAtMTM4cS0yOCAtMzAgLTcwIC0yMHEtNDEgMTEgLTUxIDUybC00OCAxODhsLTE4NiAtNTNxLTQxIC0xMiAtNzAgMTlxLTMxIDI5IC0xOSA3MCBsNTMgMTg2bC0xODggNDhxLTQwIDEwIC01MiA1MXEtMTAgNDIgMjAgNzBsMTM4IDEzNWwtMTM4IDEzNXEtMzAgMjggLTIwIDcwcTEyIDQxIDUyIDUxbDE4OCA0OGwtNTMgMTg2cS0xMiA0MSAxOSA3MHEyOSAzMSA3MCAxOWwxODYgLTUzbDQ4IDE4OHExMCA0MSA1MSA1MXE0MSAxMiA3MCAtMTlsMTM1IC0xMzlsMTM1IDEzOXEyOSAzMCA3MCAxOXE0MSAtMTAgNTEgLTUxbDQ4IC0xODhsMTg2IDUzcTQxIDEyIDcwIC0xOXEzMSAtMjkgMTkgLTcwIGwtNTMgLTE4NmwxODggLTQ4cTQwIC0xMCA1MiAtNTFxMTAgLTQyIC0yMCAtNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTI1NiAxOTJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNjY0IDc2OHEwIDUxIC0zOSA4OS41dC04OSAzOC41aC01NzZxMCAyMCAxNSA0OC41dDMzIDU1dDMzIDY4dDE1IDg0LjVxMCA2NyAtNDQuNSA5Ny41dC0xMTUuNSAzMC41cS0yNCAwIC05MCAtMTM5cS0yNCAtNDQgLTM3IC02NXEtNDAgLTY0IC0xMTIgLTE0NXEtNzEgLTgxIC0xMDEgLTEwNiBxLTY5IC01NyAtMTQwIC01N2gtMzJ2LTY0MGgzMnE3MiAwIDE2NyAtMzJ0MTkzLjUgLTY0dDE3OS41IC0zMnExODkgMCAxODkgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVoMzMxcTUyIDAgOTAgMzh0MzggOTB6TTE3OTIgNzY5cTAgLTEwNSAtNzUuNSAtMTgxdC0xODAuNSAtNzZoLTE2OXEtNCAtNjIgLTM3IC0xMTlxMyAtMjEgMyAtNDMgcTAgLTEwMSAtNjAgLTE3OHExIC0xMzkgLTg1IC0yMTkuNXQtMjI3IC04MC41cS0xMzMgMCAtMzIyIDY5cS0xNjQgNTkgLTIyMyA1OWgtMjg4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDI4OHExMCAwIDIxLjUgNC41dDIzLjUgMTR0MjIuNSAxOHQyNCAyMi41dDIwLjUgMjEuNXQxOSAyMS41dDE0IDE3cTY1IDc0IDEwMCAxMjlxMTMgMjEgMzMgNjJ0MzcgNzJ0NDAuNSA2M3Q1NSA0OS41IHQ2OS41IDE3LjVxMTI1IDAgMjA2LjUgLTY3dDgxLjUgLTE4OXEwIC02OCAtMjIgLTEyOGgzNzRxMTA0IDAgMTgwIC03NnQ3NiAtMTc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE1OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMzc2IDEyOGgzMnY2NDBoLTMycS0zNSAwIC02NyAxMS41dC02NCAzOC41dC00OCA0NHQtNTAgNTVxLTIgMyAtMy41IDQuNXQtNCA0LjV0LTQuNSA1cS03MiA4MSAtMTEyIDE0NXEtMTQgMjIgLTM4IDY4cS0xIDMgLTEwLjUgMjIuNXQtMTguNSAzNnQtMjAgMzUuNXQtMjEuNSAzMC41dC0xOC41IDExLjVxLTcxIDAgLTExNS41IC0zMC41dC00NC41IC05Ny41cTAgLTQzIDE1IC04NC41dDMzIC02OHQzMyAtNTV0MTUgLTQ4LjVoLTU3NiBxLTUwIDAgLTg5IC0zOC41dC0zOSAtODkuNXEwIC01MiAzOCAtOTB0OTAgLTM4aDMzMXEtMTUgLTE3IC0yNSAtNDcuNXQtMTAgLTU1LjVxMCAtNjkgNTMgLTExOXEtMTggLTMyIC0xOCAtNjl0MTcuNSAtNzMuNXQ0Ny41IC01Mi41cS00IC0yNCAtNCAtNTZxMCAtODUgNDguNSAtMTI2dDEzNS41IC00MXE4NCAwIDE4MyAzMnQxOTQgNjR0MTY3IDMyek0xNjY0IDE5MnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NSB0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNzkyIDc2OHYtNjQwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0yODhxLTU5IDAgLTIyMyAtNTlxLTE5MCAtNjkgLTMxNyAtNjlxLTE0MiAwIC0yMzAgNzcuNXQtODcgMjE3LjVsMSA1cS02MSA3NiAtNjEgMTc4cTAgMjIgMyA0M3EtMzMgNTcgLTM3IDExOWgtMTY5cS0xMDUgMCAtMTgwLjUgNzZ0LTc1LjUgMTgxcTAgMTAzIDc2IDE3OXQxODAgNzZoMzc0cS0yMiA2MCAtMjIgMTI4IHEwIDEyMiA4MS41IDE4OXQyMDYuNSA2N3EzOCAwIDY5LjUgLTE3LjV0NTUgLTQ5LjV0NDAuNSAtNjN0MzcgLTcydDMzIC02MnEzNSAtNTUgMTAwIC0xMjlxMiAtMyAxNCAtMTd0MTkgLTIxLjV0MjAuNSAtMjEuNXQyNCAtMjIuNXQyMi41IC0xOHQyMy41IC0xNHQyMS41IC00LjVoMjg4cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE2OyIgZD0iTTEyODAgLTY0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3MDBxMCAxODkgLTE2NyAxODlxLTI2IDAgLTU2IC01cS0xNiAzMCAtNTIuNSA0Ny41dC03My41IDE3LjV0LTY5IC0xOHEtNTAgNTMgLTExOSA1M3EtMjUgMCAtNTUuNSAtMTB0LTQ3LjUgLTI1djMzMXEwIDUyIC0zOCA5MHQtOTAgMzhxLTUxIDAgLTg5LjUgLTM5dC0zOC41IC04OXYtNTc2IHEtMjAgMCAtNDguNSAxNXQtNTUgMzN0LTY4IDMzdC04NC41IDE1cS02NyAwIC05Ny41IC00NC41dC0zMC41IC0xMTUuNXEwIC0yNCAxMzkgLTkwcTQ0IC0yNCA2NSAtMzdxNjQgLTQwIDE0NSAtMTEycTgxIC03MSAxMDYgLTEwMXE1NyAtNjkgNTcgLTE0MHYtMzJoNjQwdjMycTAgNzIgMzIgMTY3dDY0IDE5My41dDMyIDE3OS41ek0xNTM2IDcwNXEwIC0xMzMgLTY5IC0zMjJxLTU5IC0xNjQgLTU5IC0yMjN2LTI4OHEwIC01MyAtMzcuNSAtOTAuNSB0LTkwLjUgLTM3LjVoLTY0MHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2Mjg4cTAgMTAgLTQuNSAyMS41dC0xNCAyMy41dC0xOCAyMi41dC0yMi41IDI0dC0yMS41IDIwLjV0LTIxLjUgMTl0LTE3IDE0cS03NCA2NSAtMTI5IDEwMHEtMjEgMTMgLTYyIDMzdC03MiAzN3QtNjMgNDAuNXQtNDkuNSA1NXQtMTcuNSA2OS41cTAgMTI1IDY3IDIwNi41dDE4OSA4MS41cTY4IDAgMTI4IC0yMnYzNzRxMCAxMDQgNzYgMTgwdDE3OSA3NiBxMTA1IDAgMTgxIC03NS41dDc2IC0xODAuNXYtMTY5cTYyIC00IDExOSAtMzdxMjEgMyA0MyAzcTEwMSAwIDE3OCAtNjBxMTM5IDEgMjE5LjUgLTg1dDgwLjUgLTIyN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhNzsiIGQ9Ik0xNDA4IDU3NnEwIDg0IC0zMiAxODN0LTY0IDE5NHQtMzIgMTY3djMyaC02NDB2LTMycTAgLTQ2IC0yNSAtOTF0LTUyIC03MnQtNzIgLTY2cS05IC04IC0xNCAtMTJxLTgxIC03MiAtMTQ1IC0xMTJxLTIyIC0xNCAtNjggLTM4cS0zIC0xIC0yMi41IC0xMC41dC0zNiAtMTguNXQtMzUuNSAtMjB0LTMwLjUgLTIxLjV0LTExLjUgLTE4LjVxMCAtNzEgMzAuNSAtMTE1LjV0OTcuNSAtNDQuNXE0MyAwIDg0LjUgMTV0NjggMzN0NTUgMzMgdDQ4LjUgMTV2LTU3NnEwIC01MCAzOC41IC04OXQ4OS41IC0zOXE1MiAwIDkwIDM4dDM4IDkwdjMzMXE0NiAtMzUgMTAzIC0zNXE2OSAwIDExOSA1M3EzMiAtMTggNjkgLTE4dDczLjUgMTcuNXQ1Mi41IDQ3LjVxMjQgLTQgNTYgLTRxODUgMCAxMjYgNDguNXQ0MSAxMzUuNXpNMTI4MCAxMzQ0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTUzNiA1ODBxMCAtMTQyIC03Ny41IC0yMzAgdC0yMTcuNSAtODdsLTUgMXEtNzYgLTYxIC0xNzggLTYxcS0yMiAwIC00MyAzcS01NCAtMzAgLTExOSAtMzd2LTE2OXEwIC0xMDUgLTc2IC0xODAuNXQtMTgxIC03NS41cS0xMDMgMCAtMTc5IDc2dC03NiAxODB2Mzc0cS01NCAtMjIgLTEyOCAtMjJxLTEyMSAwIC0xODguNSA4MS41dC02Ny41IDIwNi41cTAgMzggMTcuNSA2OS41dDQ5LjUgNTV0NjMgNDAuNXQ3MiAzN3Q2MiAzM3E1NSAzNSAxMjkgMTAwcTMgMiAxNyAxNHQyMS41IDE5IHQyMS41IDIwLjV0MjIuNSAyNHQxOCAyMi41dDE0IDIzLjV0NC41IDIxLjV2Mjg4cTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWg2NDBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTI4OHEwIC01OSA1OSAtMjIzcTY5IC0xOTAgNjkgLTMxN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhODsiIGQ9Ik0xMjgwIDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC01MDJsMTg5IDE4OXExOSAxOSAxOSA0NXQtMTkgNDVsLTkxIDkxcS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtMzYyIC0zNjJsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDkxIC05MWwzNjIgLTM2MnExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxcTE4IDE4IDE4IDQ1dC0xOCA0NWwtMTg5IDE4OWg1MDJxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE5OyIgZD0iTTEyODUgNjQwcTAgMjcgLTE4IDQ1bC05MSA5MWwtMzYyIDM2MnEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDE4OSAtMTg5aC01MDJxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg1MDJsLTE4OSAtMTg5cS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsMzYyIDM2Mmw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGFhOyIgZD0iTTEyODQgNjQxcTAgMjcgLTE4IDQ1bC0zNjIgMzYybC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MWwtMzYyIC0zNjJxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWw5MSAtOTFxMTggLTE4IDQ1IC0xOHQ0NSAxOGwxODkgMTg5di01MDJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXY1MDJsMTg5IC0xODlxMTkgLTE5IDQ1IC0xOXQ0NSAxOWw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGFiOyIgZD0iTTEyODQgNjM5cTAgMjcgLTE4IDQ1bC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTE4OSAtMTg5djUwMnEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUwMmwtMTg5IDE4OXEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDM2MiAtMzYybDkxIC05MXExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxbDM2MiAzNjJxMTggMTggMTggNDV6TTE1MzYgNjQwIHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhYzsiIGQ9Ik0xMTkzIDk5M3ExMSA3IDI1IDIydi0xcTAgLTIgLTkuNSAtMTB0LTExLjUgLTEycS0xIDEgLTQgMXpNMTE4NyA5OTJxLTEgMSAtMi41IDN0LTEuNSAzcTMgLTIgMTAgLTVxLTYgLTQgLTYgLTF6TTcyOCAxMTc1cS0xNiAyIC0yNiA1cTEgMCA2LjUgLTF0MTAuNSAtMnQ5IC0yek03NzMgMTIxMnE3IDQgMTMuNSAyLjV0Ny41IC03LjVxLTUgMyAtMjEgNXpNNzY1IDEyMDZsLTMgMnEtMiAzIC01LjUgNXQtNC41IDJxMiAtMSAyMSAtMyBxLTYgLTQgLTggLTZ6TTY2MyAxMjkwdjJxMSAtMiAzIC01LjV0MyAtNS41ek01NTggMTI1MHEwIC0yIC0xIC0ybC0xIDJoMnpNOTMzIDIwNnYtMXYxek03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek0xMjQwIDE2MiBsNSA1cS03IDEwIC0yOSAxMnExIDEyIC0xNCAyNi41dC0yNyAxNS41cTAgNCAtMTAuNSAxMXQtMTcuNSA4cS05IDIgLTI3IC05cS03IC0zIC00IC01cS0zIDMgLTEyIDExdC0xNiAxMXEtMiAxIC03LjUgMXQtOC41IDJxLTEgMSAtNiA0LjV0LTcgNC41dC02LjUgM3QtNy41IDEuNXQtNy41IC0yLjV0LTguNSAtNnQtNC41IC0xNS41dC0yLjUgLTE0LjVxLTggNiAtMC41IDIwdDEuNSAyMHEtNyA3IC0yMSAwLjV0LTIxIC0xNS41IHEtMSAtMSAtOS41IC01LjV0LTExLjUgLTcuNXEtNCAtNiAtOSAtMTcuNXQtNiAtMTMuNXEwIDIgLTIuNSA2LjV0LTIuNSA2LjVxLTEyIC0yIC0xNiAzcTUgLTE2IDggLTE3bC00IDJxLTEgLTYgMyAtMTV0NCAtMTFxMSAtNSAtMS41IC0xM3QtMi41IC0xMXEwIC0yIDUgLTExcTQgLTE5IC0yIC0zMnEwIC0xIC0zLjUgLTd0LTYuNSAtMTFsLTIgLTVsLTIgMXEtMSAxIC0yIDBxLTEgLTYgLTkgLTEzdC0xMCAtMTFxLTE1IC0yMyAtOSAtMzggcTMgLTggMTAgLTEwcTMgLTEgMyAycTEgLTkgLTExIC0yN3ExIC0xIDQgLTNxLTE3IDAgLTEwIC0xNHEyMDIgMzYgMzUyIDE4MWgtM3pNNjgwIDM0N3ExNiAzIDMwLjUgLTE2dDIyLjUgLTIzcTQxIC0yMCA1OSAtMTFxMCAtOSAxNCAtMjhxMyAtNCA2LjUgLTExLjV0NS41IC0xMC41cTUgLTcgMTkgLTE2dDE5IC0xNnE2IDMgOSA5cTEzIC0zNSAyNCAtMzRxNSAwIDggOHEwIC0xIC0wLjUgLTN0LTEuNSAtM3E3IDE1IDUgMjZsNiA0cTUgNCA1IDUgcS02IDYgLTkgLTNxLTMwIC0xNCAtNDggMjJxLTIgMyAtNC41IDh0LTUgMTJ0LTEuNSAxMS41dDYgNC41cTExIDAgMTIuNSAxLjV0LTIuNSA2dC00IDcuNXEtMSA0IC0xLjUgMTIuNXQtMS41IDEyLjVsLTUgNnEtNSA2IC0xMS41IDEzLjV0LTcuNSA5LjVxLTQgLTEwIC0xNi41IC04LjV0LTE4LjUgOS41cTEgLTIgLTAuNSAtNi41dC0xLjUgLTYuNXEtMTQgMCAtMTcgMXExIDYgMyAyMXQ0IDIycTEgNSA1LjUgMTMuNXQ4IDE1LjV0NC41IDE0IHQtNC41IDEwLjV0LTE4LjUgMi41cS0yMCAtMSAtMjkgLTIycS0xIC0zIC0zIC0xMS41dC01IC0xMi41dC05IC03cS04IC0zIC0yNyAtMnQtMjYgNXEtMTQgOCAtMjQgMzAuNXQtMTEgNDEuNXEwIDEwIDMgMjcuNXQzIDI3dC02IDI2LjVxMyAyIDEwIDEwLjV0MTEgMTEuNXEyIDIgNSAyaDV0NCAydDMgNnEtMSAxIC00IDNxLTMgMyAtNCAzcTQgLTMgMTkgLTF0MTkgMnEwIDEgMjIgMHExNyAtMTMgMjQgMnEwIDEgLTIuNSAxMC41dC0wLjUgMTQuNSBxNSAtMjkgMzIgLTEwcTMgLTQgMTYuNSAtNnQxOC41IC01cTMgLTIgNyAtNS41dDYgLTV0NiAtMC41dDkgN3ExMSAtMTcgMTMgLTI1cTExIC00MyAyMCAtNDhxOCAtMiAxMi41IC0ydDUgMTAuNXQwIDE1LjV0LTEuNSAxM2wtMiAzN3EtMTYgMyAtMjAgMTIuNXQxLjUgMjB0MTYuNSAxOS41cTEgMSAxNi41IDh0MjEuNSAxMnEyNCAxOSAxNyAzOXE5IC0yIDExIDlsLTUgM3EtNCAzIC04IDUuNXQtNSAxLjVxMTEgNyAyIDE4cTUgMyA4IDExLjUgdDkgMTEuNXE5IC0xNCAyMiAtM3E4IDkgMiAxOHE1IDggMjIgMTEuNXQyMCA5LjVxNSAtMSA3IDB0MiA0LjV2Ny41dDEgOC41dDMgNy41cTQgNiAxNiAxMC41dDE0IDUuNWwxOSAxMnE0IDQgMCA0cTE4IC0yIDMyIDExcTEzIDEyIC01IDIzcTIgNyAtNCAxMC41dC0xNiA1LjVxMyAxIDEyIDAuNXQxMiAxLjVxMTUgMTEgLTcgMTdxLTIwIDUgLTQ3IC0xM3EtMyAtMiAtMTMgLTEydC0xNyAtMTFxMTUgMTggNSAyMnE4IC0xIDIyLjUgOXQxNS41IDExIHE0IDIgMTAuNSAyLjV0OC41IDEuNXE3MSAyNSA5MiAtMXE4IDExIDExIDE1dDkuNSA5dDE1LjUgOHEyMSA3IDIzIDlsMSAyM3EtMTIgLTEgLTE4IDh0LTcgMjJsLTYgLThxMCA2IC0zLjUgNy41dC03LjUgMC41dC05LjUgLTJ0LTcuNSAwcS05IDIgLTE5LjUgMTUuNXQtMTQuNSAxNi41cTkgMCA5IDVxLTIgNSAtMTAgOHExIDYgLTIgOHQtOSAwcS0yIDEyIC0xIDEzcS02IDEgLTExIDExdC04IDEwcS0yIDAgLTQuNSAtMnQtNSAtNS41bC01IC03IHQtMy41IC01LjVsLTIgLTJxLTEyIDYgLTI0IC0xMHEtOSAxIC0xNyAtMnExNSA2IDIgMTNxLTExIDUgLTIxIDJxMTIgNSAxMCAxNHQtMTIgMTZxMSAwIDQgLTF0NCAtMXEtMSA1IC05LjUgOS41dC0xOS41IDl0LTE0IDYuNXEtNyA1IC0zNiAxMC41dC0zNiAxLjVxLTUgLTMgLTYgLTZ0MS41IC04LjV0My41IC04LjVxNiAtMjMgNSAtMjdxLTEgLTMgLTguNSAtOHQtNS41IC0xMnExIC00IDExLjUgLTEwdDEyLjUgLTEycTUgLTEzIC00IC0yNSBxLTQgLTUgLTE1IC0xMXQtMTQgLTEwcS01IC01IC0zLjUgLTExLjV0MC41IC05LjVxMSAxIDEgMi41dDEgMi41cTAgLTEzIDExIC0yMnE4IC02IC0xNiAtMThxLTIwIC0xMSAtMjAgLTRxMSA4IC03LjUgMTZ0LTEwLjUgMTJ0LTMuNSAxOXQtOS41IDIxcS02IDQgLTE5IDR0LTE4IC01cTAgMTAgLTQ5IDMwcS0xNyA4IC01OCA0cTcgMSAwIDE3cS04IDE2IC0yMSAxMnEtOCAyNSAtNCAzNXEyIDUgOSAxNHQ5IDE1cTEgMyAxNS41IDZ0MTYuNSA4IHExIDQgLTIuNSA2LjV0LTkuNSA0LjVxNTMgLTYgNjMgMThxNSA5IDMgMTRxMCAtMSAyIC0xdDIgLTFxMTIgMyA3IDE3cTE5IDggMjYgOHE1IC0xIDExIC02dDEwIC01cTE3IC0zIDIxLjUgMTB0LTkuNSAyM3E3IC00IDcgNnEtMSAxMyAtNyAxOXEtMyAyIC02LjUgMi41dC02LjUgMHQtNyAwLjVxLTEgMCAtOCAycS0xIC0xIC0yIC0xaC04cS00IC0yIC00IC01di0xcS0xIC0zIDQgLTZsNSAtMWwzIC0ycS0xIDAgLTIuNSAtMi41dC0yLjUgLTIuNSBxMCAtMyAzIC01cS0yIC0xIC0xNCAtNy41dC0xNyAtMTAuNXEtMSAtMSAtNCAtMi41dC00IC0yLjVxLTIgLTEgLTQgMnQtNCA5dC00IDExLjV0LTQuNSAxMHQtNS41IDQuNXEtMTIgMCAtMTggLTE3cTMgMTAgLTEzIDE3LjV0LTI1IDcuNXEyMCAxNSAtOSAzMGwtMSAxcS0zMCAtNCAtNDUgLTdxLTIgLTYgMyAtMTJxLTEgLTcgNiAtOXEwIC0xIDAuNSAtMXQwLjUgLTFxMCAxIC0wLjUgMXQtMC41IDFxMyAtMSAxMC41IC0xLjV0OS41IC0xLjUgcTMgLTEgNC41IC0ybDcuNSAtNXQ1LjUgLTZ0LTIuNSAtNXEtMiAtMSAtOSAtNHQtMTIuNSAtNS41dC02LjUgLTMuNXEtMyAtNSAwIC0xNnQtMiAtMTVxLTUgNSAtMTAgMTguNXQtOCAxNy41cTggLTkgLTMwIC02bC04IDFxLTQgMCAtMTUgLTJ0LTE2IC0xcS03IDAgLTI5IDZxNyAxNyA1IDI1cTUgMCA3IDJsLTYgM3EtMyAtMSAtMjUgLTlxMiAtMyA4IC05LjV0OSAtMTEuNXEtMjIgNiAtMjcgLTJxMCAtMSAtOSAwcS0yNSAxIC0yNCAtNyBxMSAtNCA5IC0xMnEwIC05IC0xIC05cS0yNyAyMiAtMzAgMjNxLTE3MiAtODMgLTI3NiAtMjQ4cTEgLTIgMi41IC0xMXQzLjUgLTguNXQxMSA0LjVxOSAtOSAzIC0yMXEyIDIgMzYgLTIxcTU2IC00MCAyMiAtNTN2NS41dDEgNi41cS05IC0xIC0xOSA1cS0zIC02IDAuNSAtMjB0MTEuNSAtMTRxLTggMCAtMTAuNSAtMTd0LTIuNSAtMzguNXQtMSAtMjUuNWwyIC0xcS0zIC0xMyA2IC0zNy41dDI0IC0yMC41cS00IC0xOCA1IC0yMXEtMSAtNCAwIC04IHQ0LjUgLTguNXQ2IC03bDcuNSAtNy41bDYgLTZxMjggLTExIDQxIC0yOXE0IC02IDEwLjUgLTI0LjV0MTUuNSAtMjUuNXEtMiAtNiAxMCAtMjEuNXQxMSAtMjUuNXEtMSAwIC0yLjUgLTAuNXQtMi41IC0wLjVxMyAtOCAxNi41IC0xNnQxNi41IC0xNHEyIC0zIDIuNSAtMTAuNXQzIC0xMnQ4LjUgLTIuNXEzIDI0IC0yNiA2OHEtMTYgMjcgLTE4IDMxcS0zIDUgLTUuNSAxNi41dC00LjUgMTUuNXEyNyAtOSAyNiAtMTNxLTUgLTEwIDI2IC01MiBxMiAtMyAxMCAtMTB0MTEgLTEycTMgLTQgOS41IC0xNC41dDEwLjUgLTE1LjVxLTEgMCAtMyAtMmwtMyAtM3E0IC0yIDkgLTV0OCAtNC41dDcuNSAtNXQ3LjUgLTcuNXExNiAtMTggMjAgLTMzcTEgLTQgMC41IC0xNS41dDEuNSAtMTYuNXEyIC02IDYgLTExdDExLjUgLTEwdDExLjUgLTd0MTQuNSAtNi41dDExLjUgLTUuNXEyIC0xIDE4IC0xMXQyNSAtMTRxMTAgLTQgMTYuNSAtNC41dDE2IDIuNXQxNS41IDR6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYWQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTM4NCA2NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjggNDg0bC02ODIgLTY4MnEtMzcgLTM3IC05MCAtMzdxLTUyIDAgLTkxIDM3bC0xMDYgMTA4cS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw2ODEgNjgxcTM5IC05OCAxMTQuNSAtMTczLjV0MTczLjUgLTExNC41ek0xNjYyIDkxOXEwIC0zOSAtMjMgLTEwNnEtNDcgLTEzNCAtMTY0LjUgLTIxNy41IHQtMjU4LjUgLTgzLjVxLTE4NSAwIC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjV0MTMxLjUgMzE2LjV0MzE2LjUgMTMxLjVxNTggMCAxMjEuNSAtMTYuNXQxMDcuNSAtNDYuNXExNiAtMTEgMTYgLTI4dC0xNiAtMjhsLTI5MyAtMTY5di0yMjRsMTkzIC0xMDdxNSAzIDc5IDQ4LjV0MTM1LjUgODF0NzAuNSAzNS41cTE1IDAgMjMuNSAtMTB0OC41IC0yNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTAyNCAxMjhoNjQwdjEyOGgtNjQwdi0xMjh6TTY0MCA2NDBoMTAyNHYxMjhoLTEwMjR2LTEyOHpNMTI4MCAxMTUyaDM4NHYxMjhoLTM4NHYtMTI4ek0xNzkyIDMyMHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDgzMnYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTkgdC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiAxMzQ0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYjA7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDMgMTI0MXExNyAtNDEgLTE0IC03MGwtNDkzIC00OTN2LTc0MnEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV2NDg2bC00OTMgNDkzcS0zMSAyOSAtMTQgNzBxMTcgMzkgNTkgMzloMTI4MHE0MiAwIDU5IC0zOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBiMTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTE3OTIgNTEydi00ODBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjQ4MGg2NzJ2LTE2MHEwIC0yNiAxOSAtNDV0NDUgLTE5aDMyMHEyNiAwIDQ1IDE5dDE5IDQ1djE2MGg2NzJ6TTEwMjQgNTEydi0xMjhoLTI1NnYxMjhoMjU2ek0xNzkyIDk5MnYtMzg0aC0xNzkydjM4NHEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydjE2MHEwIDQwIDI4IDY4IHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMzUycTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGIyOyIgZD0iTTEyODMgOTk1bC0zNTUgLTM1NWwzNTUgLTM1NWwxNDQgMTQ0cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtNDIgMCAtNTkgNDBxLTE3IDM5IDE0IDY5bDE0NCAxNDRsLTM1NSAzNTVsLTM1NSAtMzU1bDE0NCAtMTQ0cTMxIC0zMCAxNCAtNjlxLTE3IC00MCAtNTkgLTQwaC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCA0MiA0MCA1OXEzOSAxNyA2OSAtMTRsMTQ0IC0xNDQgbDM1NSAzNTVsLTM1NSAzNTVsLTE0NCAtMTQ0cS0xOSAtMTkgLTQ1IC0xOXEtMTIgMCAtMjQgNXEtNDAgMTcgLTQwIDU5djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHE0MiAwIDU5IC00MHExNyAtMzkgLTE0IC02OWwtMTQ0IC0xNDRsMzU1IC0zNTVsMzU1IDM1NWwtMTQ0IDE0NHEtMzEgMzAgLTE0IDY5cTE3IDQwIDU5IDQwaDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTQ0OHEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE5eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjMDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNTkzIDY0MHEtMTYyIC01IC0yNjUgLTEyOGgtMTM0cS04MiAwIC0xMzggNDAuNXQtNTYgMTE4LjVxMCAzNTMgMTI0IDM1M3E2IDAgNDMuNSAtMjF0OTcuNSAtNDIuNXQxMTkgLTIxLjVxNjcgMCAxMzMgMjNxLTUgLTM3IC01IC02NnEwIC0xMzkgODEgLTI1NnpNMTY2NCAzcTAgLTEyMCAtNzMgLTE4OS41dC0xOTQgLTY5LjVoLTg3NHEtMTIxIDAgLTE5NCA2OS41dC03MyAxODkuNXEwIDUzIDMuNSAxMDMuNXQxNCAxMDl0MjYuNSAxMDguNSB0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxMTAgMCA0MyAtMjEuNXQ3MyAtNDh0MTA3IC00OHQxMzUgLTIxLjV0MTM1IDIxLjV0MTA3IDQ4dDczIDQ4dDQzIDIxLjVxNjEgMCAxMTEuNSAtMjB0ODUuNSAtNTMuNXQ2MiAtODF0NDMgLTk3LjV0MjYuNSAtMTA4LjV0MTQgLTEwOXQzLjUgLTEwMy41ek02NDAgMTI4MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NSB0NzUgLTE4MXpNMTM0NCA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41dDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6TTE5MjAgNjcxcTAgLTc4IC01NiAtMTE4LjV0LTEzOCAtNDAuNWgtMTM0cS0xMDMgMTIzIC0yNjUgMTI4cTgxIDExNyA4MSAyNTZxMCAyOSAtNSA2NnE2NiAtMjMgMTMzIC0yM3E1OSAwIDExOSAyMS41dDk3LjUgNDIuNSB0NDMuNSAyMXExMjQgMCAxMjQgLTM1M3pNMTc5MiAxMjgwcTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NXQxODEgLTc1dDc1IC0xODF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYzE7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0NTYgMzIwcTAgNDAgLTI4IDY4bC0yMDggMjA4cS0yOCAyOCAtNjggMjhxLTQyIDAgLTcyIC0zMnEzIC0zIDE5IC0xOC41dDIxLjUgLTIxLjV0MTUgLTE5dDEzIC0yNS41dDMuNSAtMjcuNXEwIC00MCAtMjggLTY4dC02OCAtMjhxLTE1IDAgLTI3LjUgMy41dC0yNS41IDEzdC0xOSAxNXQtMjEuNSAyMS41dC0xOC41IDE5cS0zMyAtMzEgLTMzIC03M3EwIC00MCAyOCAtNjhsMjA2IC0yMDdxMjcgLTI3IDY4IC0yN3E0MCAwIDY4IDI2IGwxNDcgMTQ2cTI4IDI4IDI4IDY3ek03NTMgMTAyNXEwIDQwIC0yOCA2OGwtMjA2IDIwN3EtMjggMjggLTY4IDI4cS0zOSAwIC02OCAtMjdsLTE0NyAtMTQ2cS0yOCAtMjggLTI4IC02N3EwIC00MCAyOCAtNjhsMjA4IC0yMDhxMjcgLTI3IDY4IC0yN3E0MiAwIDcyIDMxcS0zIDMgLTE5IDE4LjV0LTIxLjUgMjEuNXQtMTUgMTl0LTEzIDI1LjV0LTMuNSAyNy41cTAgNDAgMjggNjh0NjggMjhxMTUgMCAyNy41IC0zLjV0MjUuNSAtMTN0MTkgLTE1IHQyMS41IC0yMS41dDE4LjUgLTE5cTMzIDMxIDMzIDczek0xNjQ4IDMyMHEwIC0xMjAgLTg1IC0yMDNsLTE0NyAtMTQ2cS04MyAtODMgLTIwMyAtODNxLTEyMSAwIC0yMDQgODVsLTIwNiAyMDdxLTgzIDgzIC04MyAyMDNxMCAxMjMgODggMjA5bC04OCA4OHEtODYgLTg4IC0yMDggLTg4cS0xMjAgMCAtMjA0IDg0bC0yMDggMjA4cS04NCA4NCAtODQgMjA0dDg1IDIwM2wxNDcgMTQ2cTgzIDgzIDIwMyA4M3ExMjEgMCAyMDQgLTg1bDIwNiAtMjA3IHE4MyAtODMgODMgLTIwM3EwIC0xMjMgLTg4IC0yMDlsODggLTg4cTg2IDg4IDIwOCA4OHExMjAgMCAyMDQgLTg0bDIwOCAtMjA4cTg0IC04NCA4NCAtMjA0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGMyOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xOTIwIDM4NHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41aC0xMDg4cS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMyIDcxIDI0MS41dDE4NyAxNjMuNXEtMiAyOCAtMiA0M3EwIDIxMiAxNTAgMzYydDM2MiAxNTBxMTU4IDAgMjg2LjUgLTg4dDE4Ny41IC0yMzBxNzAgNjIgMTY2IDYycTEwNiAwIDE4MSAtNzV0NzUgLTE4MXEwIC03NSAtNDEgLTEzOHExMjkgLTMwIDIxMyAtMTM0LjV0ODQgLTIzOS41eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjMzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTUyNyA4OHE1NiAtODkgMjEuNSAtMTUyLjV0LTE0MC41IC02My41aC0xMTUycS0xMDYgMCAtMTQwLjUgNjMuNXQyMS41IDE1Mi41bDUwMyA3OTN2Mzk5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC02NHYtMzk5ek03NDggODEzbC0yNzIgLTQyOWg3MTJsLTI3MiA0MjlsLTIwIDMxdjM3djM5OWgtMTI4di0zOTl2LTM3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik05NjAgNjQwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTI2MCA1NzZsNTA3IC0zOThxMjggLTIwIDI1IC01NnEtNSAtMzUgLTM1IC01MWwtMTI4IC02NHEtMTMgLTcgLTI5IC03cS0xNyAwIC0zMSA4bC02OTAgMzg3bC0xMTAgLTY2cS04IC00IC0xMiAtNXExNCAtNDkgMTAgLTk3cS03IC03NyAtNTYgLTE0Ny41dC0xMzIgLTEyMy41cS0xMzIgLTg0IC0yNzcgLTg0IHEtMTM2IDAgLTIyMiA3OHEtOTAgODQgLTc5IDIwN3E3IDc2IDU2IDE0N3QxMzEgMTI0cTEzMiA4NCAyNzggODRxODMgMCAxNTEgLTMxcTkgMTMgMjIgMjJsMTIyIDczbC0xMjIgNzNxLTEzIDkgLTIyIDIycS02OCAtMzEgLTE1MSAtMzFxLTE0NiAwIC0yNzggODRxLTgyIDUzIC0xMzEgMTI0dC01NiAxNDdxLTUgNTkgMTUuNSAxMTN0NjMuNSA5M3E4NSA3OSAyMjIgNzlxMTQ1IDAgMjc3IC04NHE4MyAtNTIgMTMyIC0xMjN0NTYgLTE0OCBxNCAtNDggLTEwIC05N3E0IC0xIDEyIC01bDExMCAtNjZsNjkwIDM4N3ExNCA4IDMxIDhxMTYgMCAyOSAtN2wxMjggLTY0cTMwIC0xNiAzNSAtNTFxMyAtMzYgLTI1IC01NnpNNTc5IDgzNnE0NiA0MiAyMSAxMDh0LTEwNiAxMTdxLTkyIDU5IC0xOTIgNTlxLTc0IDAgLTExMyAtMzZxLTQ2IC00MiAtMjEgLTEwOHQxMDYgLTExN3E5MiAtNTkgMTkyIC01OXE3NCAwIDExMyAzNnpNNDk0IDkxcTgxIDUxIDEwNiAxMTd0LTIxIDEwOCBxLTM5IDM2IC0xMTMgMzZxLTEwMCAwIC0xOTIgLTU5cS04MSAtNTEgLTEwNiAtMTE3dDIxIC0xMDhxMzkgLTM2IDExMyAtMzZxMTAwIDAgMTkyIDU5ek02NzIgNzA0bDk2IC01OHYxMXEwIDM2IDMzIDU2bDE0IDhsLTc5IDQ3bC0yNiAtMjZxLTMgLTMgLTEwIC0xMXQtMTIgLTEycS0yIC0yIC00IC0zLjV0LTMgLTIuNXpNODk2IDQ4MGw5NiAtMzJsNzM2IDU3NmwtMTI4IDY0bC03NjggLTQzMXYtMTEzbC0xNjAgLTk2bDkgLThxMiAtMiA3IC02IHE0IC00IDExIC0xMnQxMSAtMTJsMjYgLTI2ek0xNjAwIDY0bDEyOCA2NGwtNTIwIDQwOGwtMTc3IC0xMzhxLTIgLTMgLTEzIC03eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM1OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjk2IDExNTJxNDAgMCA2OCAtMjh0MjggLTY4di0xMjE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2Mjg4aC01NDRxLTQwIDAgLTY4IDI4dC0yOCA2OHY2NzJxMCA0MCAyMCA4OHQ0OCA3Nmw0MDggNDA4cTI4IDI4IDc2IDQ4dDg4IDIwaDQxNnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyOHE2OCA0MCAxMjggNDBoNDE2ek0xMTUyIDkzOWwtMjk5IC0yOTloMjk5djI5OXpNNTEyIDEzMjNsLTI5OSAtMjk5IGgyOTl2Mjk5ek03MDggNjc2bDMxNiAzMTZ2NDE2aC0zODR2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNjQwaDUxMnYyNTZxMCA0MCAyMCA4OHQ0OCA3NnpNMTY2NCAtMTI4djExNTJoLTM4NHYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDE2di02NDBoODk2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM2OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA0IDE1MXEwIC0xMTcgLTc5IC0xOTZ0LTE5NiAtNzlxLTEzNSAwIC0yMzUgMTAwbC03NzcgNzc2cS0xMTMgMTE1IC0xMTMgMjcxcTAgMTU5IDExMCAyNzB0MjY5IDExMXExNTggMCAyNzMgLTExM2w2MDUgLTYwNnExMCAtMTAgMTAgLTIycTAgLTE2IC0zMC41IC00Ni41dC00Ni41IC0zMC41cS0xMyAwIC0yMyAxMGwtNjA2IDYwN3EtNzkgNzcgLTE4MSA3N3EtMTA2IDAgLTE3OSAtNzV0LTczIC0xODFxMCAtMTA1IDc2IC0xODEgbDc3NiAtNzc3cTYzIC02MyAxNDUgLTYzcTY0IDAgMTA2IDQydDQyIDEwNnEwIDgyIC02MyAxNDVsLTU4MSA1ODFxLTI2IDI0IC02MCAyNHEtMjkgMCAtNDggLTE5dC0xOSAtNDhxMCAtMzIgMjUgLTU5bDQxMCAtNDEwcTEwIC0xMCAxMCAtMjJxMCAtMTYgLTMxIC00N3QtNDcgLTMxcS0xMiAwIC0yMiAxMGwtNDEwIDQxMHEtNjMgNjEgLTYzIDE0OXEwIDgyIDU3IDEzOXQxMzkgNTdxODggMCAxNDkgLTYzbDU4MSAtNTgxcTEwMCAtOTggMTAwIC0yMzUgeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM3OyIgZD0iTTM4NCAwaDc2OHYzODRoLTc2OHYtMzg0ek0xMjgwIDBoMTI4djg5NnEwIDE0IC0xMCAzOC41dC0yMCAzNC41bC0yODEgMjgxcS0xMCAxMCAtMzQgMjB0LTM5IDEwdi00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC01NzZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTEyOHYtMTI4MGgxMjh2NDE2cTAgNDAgMjggNjh0NjggMjhoODMycTQwIDAgNjggLTI4dDI4IC02OHYtNDE2ek04OTYgOTI4djMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUgaC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zMjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTUzNiA4OTZ2LTkyOHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoOTI4cTQwIDAgODggLTIwdDc2IC00OGwyODAgLTI4MHEyOCAtMjggNDggLTc2dDIwIC04OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjODsiIGQ9Ik0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjOTsiIGQ9Ik0xNTM2IDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDcwNHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDEyMTZ2LTEyOHEwIC0yNiAtMTkgLTQ1IHQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwY2E7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTM4NCAxMjhxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0zODQgNjQwcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNSB0MjIuNSA5LjVoMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCAxMTUycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTc5MiA3MzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTE3OTIgMTI0OHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODEgLTg0cTAgLTgwIC01NC41IC0xMjZ0LTEzNS41IC00NnEtMTA2IDAgLTE3MiA2Nmw1NyA4OHE0OSAtNDUgMTA2IC00NXEyOSAwIDUwLjUgMTQuNXQyMS41IDQyLjVxMCA2NCAtMTA1IDU2bC0yNiA1NnE4IDEwIDMyLjUgNDMuNXQ0Mi41IDU0dDM3IDM4LjV2MXEtMTYgMCAtNDguNSAtMXQtNDguNSAtMXYtNTNoLTEwNnYxNTJoMzMzdi04OGwtOTUgLTExNXE1MSAtMTIgODEgLTQ5dDMwIC04OHpNMzgzIDU0M3YtMTU5aC0zNjIgcS02IDM2IC02IDU0cTAgNTEgMjMuNSA5M3Q1Ni41IDY4dDY2IDQ3LjV0NTYuNSA0My41dDIzLjUgNDVxMCAyNSAtMTQuNSAzOC41dC0zOS41IDEzLjVxLTQ2IDAgLTgxIC01OGwtODUgNTlxMjQgNTEgNzEuNSA3OS41dDEwNS41IDI4LjVxNzMgMCAxMjMgLTQxLjV0NTAgLTExMi41cTAgLTUwIC0zNCAtOTEuNXQtNzUgLTY0LjV0LTc1LjUgLTUwLjV0LTM1LjUgLTUyLjVoMTI3djYwaDEwNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41IHQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTQgOSAyM3QyMyA5aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgMTEyM3YtOTloLTMzNXY5OWgxMDdxMCA0MSAwLjUgMTIydDAuNSAxMjF2MTJoLTJxLTggLTE3IC01MCAtNTRsLTcxIDc2bDEzNiAxMjdoMTA2di00MDRoMTA4ek0xNzkyIDczNnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjUgdC05LjUgMjIuNXYxOTJxMCAxNCA5IDIzdDIzIDloMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMTI0OHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNjOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzYwIDY0MHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNzI4cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE3Mjh6TTQ4MyA3MDRxLTI4IDM1IC01MSA4MHEtNDggOTcgLTQ4IDE4OHEwIDE4MSAxMzQgMzA5cTEzMyAxMjcgMzkzIDEyN3E1MCAwIDE2NyAtMTlxNjYgLTEyIDE3NyAtNDhxMTAgLTM4IDIxIC0xMThxMTQgLTEyMyAxNCAtMTgzcTAgLTE4IC01IC00NWwtMTIgLTNsLTg0IDYgbC0xNCAycS01MCAxNDkgLTEwMyAyMDVxLTg4IDkxIC0yMTAgOTFxLTExNCAwIC0xODIgLTU5cS02NyAtNTggLTY3IC0xNDZxMCAtNzMgNjYgLTE0MHQyNzkgLTEyOXE2OSAtMjAgMTczIC02NnE1OCAtMjggOTUgLTUyaC03NDN6TTk5MCA0NDhoNDExcTcgLTM5IDcgLTkycTAgLTExMSAtNDEgLTIxMnEtMjMgLTU1IC03MSAtMTA0cS0zNyAtMzUgLTEwOSAtODFxLTgwIC00OCAtMTUzIC02NnEtODAgLTIxIC0yMDMgLTIxcS0xMTQgMCAtMTk1IDIzIGwtMTQwIDQwcS01NyAxNiAtNzIgMjhxLTggOCAtOCAyMnYxM3EwIDEwOCAtMiAxNTZxLTEgMzAgMCA2OGwyIDM3djQ0bDEwMiAycTE1IC0zNCAzMCAtNzF0MjIuNSAtNTZ0MTIuNSAtMjdxMzUgLTU3IDgwIC05NHE0MyAtMzYgMTA1IC01N3E1OSAtMjIgMTMyIC0yMnE2NCAwIDEzOSAyN3E3NyAyNiAxMjIgODZxNDcgNjEgNDcgMTI5cTAgODQgLTgxIDE1N3EtMzQgMjkgLTEzNyA3MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjZDsiIGQ9Ik00OCAxMzEzcS0zNyAyIC00NSA0bC0zIDg4cTEzIDEgNDAgMXE2MCAwIDExMiAtNHExMzIgLTcgMTY2IC03cTg2IDAgMTY4IDNxMTE2IDQgMTQ2IDVxNTYgMCA4NiAybC0xIC0xNGwyIC02NHYtOXEtNjAgLTkgLTEyNCAtOXEtNjAgMCAtNzkgLTI1cS0xMyAtMTQgLTEzIC0xMzJxMCAtMTMgMC41IC0zMi41dDAuNSAtMjUuNWwxIC0yMjlsMTQgLTI4MHE2IC0xMjQgNTEgLTIwMnEzNSAtNTkgOTYgLTkycTg4IC00NyAxNzcgLTQ3IHExMDQgMCAxOTEgMjhxNTYgMTggOTkgNTFxNDggMzYgNjUgNjRxMzYgNTYgNTMgMTE0cTIxIDczIDIxIDIyOXEwIDc5IC0zLjUgMTI4dC0xMSAxMjIuNXQtMTMuNSAxNTkuNWwtNCA1OXEtNSA2NyAtMjQgODhxLTM0IDM1IC03NyAzNGwtMTAwIC0ybC0xNCAzbDIgODZoODRsMjA1IC0xMHE3NiAtMyAxOTYgMTBsMTggLTJxNiAtMzggNiAtNTFxMCAtNyAtNCAtMzFxLTQ1IC0xMiAtODQgLTEzcS03MyAtMTEgLTc5IC0xN3EtMTUgLTE1IC0xNSAtNDEgcTAgLTcgMS41IC0yN3QxLjUgLTMxcTggLTE5IDIyIC0zOTZxNiAtMTk1IC0xNSAtMzA0cS0xNSAtNzYgLTQxIC0xMjJxLTM4IC02NSAtMTEyIC0xMjNxLTc1IC01NyAtMTgyIC04OXEtMTA5IC0zMyAtMjU1IC0zM3EtMTY3IDAgLTI4NCA0NnEtMTE5IDQ3IC0xNzkgMTIycS02MSA3NiAtODMgMTk1cS0xNiA4MCAtMTYgMjM3djMzM3EwIDE4OCAtMTcgMjEzcS0yNSAzNiAtMTQ3IDM5ek0xNTM2IC05NnY2NHEwIDE0IC05IDIzdC0yMyA5aC0xNDcyIHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWgxNDcycTE0IDAgMjMgOXQ5IDIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNlOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik01MTIgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNNTEyIDU0NHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTEwMjQgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yMyB2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTUxMiA5Mjh2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDU0NHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgMTYwdjE5MiBxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTEwMjQgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTUzNiA1NDR2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTIgcTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTUzNiA5Mjh2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xNjY0IDEyNDh2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEzNDRxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDEzNDRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTMgeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQwOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMTkwIDk1NWwyOTMgMjkzbC0xMDcgMTA3bC0yOTMgLTI5M3pNMTYzNyAxMjQ4cTAgLTI3IC0xOCAtNDVsLTEyODYgLTEyODZxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTk4IDE5OHEtMTggMTggLTE4IDQ1dDE4IDQ1bDEyODYgMTI4NnExOCAxOCA0NSAxOHQ0NSAtMThsMTk4IC0xOThxMTggLTE4IDE4IC00NXpNMjg2IDE0MzhsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek02MzYgMTI3NiBsMTk2IC02MGwtMTk2IC02MGwtNjAgLTE5NmwtNjAgMTk2bC0xOTYgNjBsMTk2IDYwbDYwIDE5NnpNMTU2NiA3OThsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek05MjYgMTQzOGw5OCAtMzBsLTk4IC0zMGwtMzAgLTk4bC0zMCA5OGwtOTggMzBsOTggMzBsMzAgOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY0MCAxMjhxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHQzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTMgMCAtMjIgLTlsLTE5NSAtMTk1cS05IC05IC05IC0yMnYtMzB6TTE1MzYgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB0MzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNMTc5MiAxMjE2di0xMDI0cTAgLTE1IC00IC0yNi41dC0xMy41IC0xOC41IHQtMTYuNSAtMTEuNXQtMjMuNSAtNnQtMjIuNSAtMnQtMjUuNSAwdC0yMi41IDAuNXEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0zODRxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtNjRxLTMgMCAtMjIuNSAtMC41dC0yNS41IDB0LTIyLjUgMnQtMjMuNSA2dC0xNi41IDExLjV0LTEzLjUgMTguNXQtNCAyNi41cTAgMjYgMTkgNDV0NDUgMTl2MzIwcTAgOCAtMC41IDM1dDAgMzggdDIuNSAzNC41dDYuNSAzN3QxNCAzMC41dDIyLjUgMzBsMTk4IDE5OHExOSAxOSA1MC41IDMydDU4LjUgMTNoMTYwdjE5MnEwIDI2IDE5IDQ1dDQ1IDE5aDEwMjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQyOyIgZD0iTTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzcS0xMTEgMCAtMjE4IDMycTU5IDkzIDc4IDE2NHE5IDM0IDU0IDIxMXEyMCAtMzkgNzMgLTY3LjV0MTE0IC0yOC41cTEyMSAwIDIxNiA2OC41dDE0NyAxODguNXQ1MiAyNzBxMCAxMTQgLTU5LjUgMjE0dC0xNzIuNSAxNjN0LTI1NSA2M3EtMTA1IDAgLTE5NiAtMjl0LTE1NC41IC03N3QtMTA5IC0xMTAuNXQtNjcgLTEyOS41dC0yMS41IC0xMzQgcTAgLTEwNCA0MCAtMTgzdDExNyAtMTExcTMwIC0xMiAzOCAyMHEyIDcgOCAzMXQ4IDMwcTYgMjMgLTExIDQzcS01MSA2MSAtNTEgMTUxcTAgMTUxIDEwNC41IDI1OS41dDI3My41IDEwOC41cTE1MSAwIDIzNS41IC04MnQ4NC41IC0yMTNxMCAtMTcwIC02OC41IC0yODl0LTE3NS41IC0xMTlxLTYxIDAgLTk4IDQzLjV0LTIzIDEwNC41cTggMzUgMjYuNSA5My41dDMwIDEwM3QxMS41IDc1LjVxMCA1MCAtMjcgODN0LTc3IDMzIHEtNjIgMCAtMTA1IC01N3QtNDMgLTE0MnEwIC03MyAyNSAtMTIybC05OSAtNDE4cS0xNyAtNzAgLTEzIC0xNzdxLTIwNiA5MSAtMzMzIDI4MXQtMTI3IDQyM3EwIDIwOSAxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDM7IiBkPSJNMTI0OCAxNDA4cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTcyNXE4NSAxMjIgMTA4IDIxMHE5IDM0IDUzIDIwOXEyMSAtMzkgNzMuNSAtNjd0MTEyLjUgLTI4cTE4MSAwIDI5NS41IDE0Ny41dDExNC41IDM3My41cTAgODQgLTM1IDE2Mi41dC05Ni41IDEzOXQtMTUyLjUgOTd0LTE5NyAzNi41cS0xMDQgMCAtMTk0LjUgLTI4LjV0LTE1MyAtNzYuNSB0LTEwNy41IC0xMDkuNXQtNjYuNSAtMTI4dC0yMS41IC0xMzIuNXEwIC0xMDIgMzkuNSAtMTgwdDExNi41IC0xMTBxMTMgLTUgMjMuNSAwdDE0LjUgMTlxMTAgNDQgMTUgNjFxNiAyMyAtMTEgNDJxLTUwIDYyIC01MCAxNTBxMCAxNTAgMTAzLjUgMjU2LjV0MjcwLjUgMTA2LjVxMTQ5IDAgMjMyLjUgLTgxdDgzLjUgLTIxMHEwIC0xNjggLTY3LjUgLTI4NnQtMTczLjUgLTExOHEtNjAgMCAtOTcgNDMuNXQtMjMgMTAzLjVxOCAzNCAyNi41IDkyLjUgdDI5LjUgMTAydDExIDc0LjVxMCA0OSAtMjYuNSA4MS41dC03NS41IDMyLjVxLTYxIDAgLTEwMy41IC01Ni41dC00Mi41IC0xMzkuNXEwIC03MiAyNCAtMTIxbC05OCAtNDE0cS0yNCAtMTAwIC03IC0yNTRoLTE4M3EtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDQ7IiBkPSJNNjc4IC01N3EwIC0zOCAtMTAgLTcxaC0zODBxLTk1IDAgLTE3MS41IDU2LjV0LTEwMy41IDE0Ny41cTI0IDQ1IDY5IDc3LjV0MTAwIDQ5LjV0MTA3IDI0dDEwNyA3cTMyIDAgNDkgLTJxNiAtNCAzMC41IC0yMXQzMyAtMjN0MzEgLTIzdDMyIC0yNS41dDI3LjUgLTI1LjV0MjYuNSAtMjkuNXQyMSAtMzAuNXQxNy41IC0zNC41dDkuNSAtMzZ0NC41IC00MC41ek0zODUgMjk0cS0yMzQgLTcgLTM4NSAtODV2NDMzcTEwMyAtMTE4IDI3MyAtMTE4IHEzMiAwIDcwIDVxLTIxIC02MSAtMjEgLTg2cTAgLTY3IDYzIC0xNDl6TTU1OCA4MDVxMCAtMTAwIC00My41IC0xNjAuNXQtMTQwLjUgLTYwLjVxLTUxIDAgLTk3IDI2dC03OCA2Ny41dC01NiA5My41dC0zNS41IDEwNHQtMTEuNSA5OXEwIDk2IDUxLjUgMTY1dDE0NC41IDY5cTY2IDAgMTE5IC00MXQ4NCAtMTA0dDQ3IC0xMzB0MTYgLTEyOHpNMTUzNiA4OTZ2LTczNnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtNDY4IHEzOSA3MyAzOSAxNTdxMCA2NiAtMjIgMTIyLjV0LTU1LjUgOTN0LTcyIDcxdC03MiA1OS41dC01NS41IDU0LjV0LTIyIDU5LjVxMCAzNiAyMyA2OHQ1NiA2MS41dDY1LjUgNjQuNXQ1NS41IDkzdDIzIDEzMXQtMjYuNSAxNDUuNXQtNzUuNSAxMTguNXEtNiA2IC0xNCAxMXQtMTIuNSA3LjV0LTEwIDkuNXQtMTAuNSAxN2gxMzVsMTM1IDY0aC00MzdxLTEzOCAwIC0yNDQuNSAtMzguNXQtMTgyLjUgLTEzMy41cTAgMTI2IDgxIDIxM3QyMDcgODdoOTYwIHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTZoLTI1NnYyNTZoLTEyOHYtMjU2aC0yNTZ2LTEyOGgyNTZ2LTI1NmgxMjh2MjU2aDI1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkNTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODc2IDcxcTAgMjEgLTQuNSA0MC41dC05LjUgMzZ0LTE3LjUgMzQuNXQtMjEgMzAuNXQtMjYuNSAyOS41dC0yNy41IDI1LjV0LTMyIDI1LjV0LTMxIDIzdC0zMyAyM3QtMzAuNSAyMXEtMTcgMiAtNTAgMnEtNTQgMCAtMTA2IC03dC0xMDggLTI1dC05OCAtNDZ0LTY5IC03NXQtMjcgLTEwN3EwIC02OCAzNS41IC0xMjEuNXQ5MyAtODR0MTIwLjUgLTQ1LjV0MTI3IC0xNXE1OSAwIDExMi41IDEyLjV0MTAwLjUgMzl0NzQuNSA3My41IHQyNy41IDExMHpNNzU2IDkzM3EwIDYwIC0xNi41IDEyNy41dC00NyAxMzAuNXQtODQgMTA0dC0xMTkuNSA0MXEtOTMgMCAtMTQ0IC02OXQtNTEgLTE2NXEwIC00NyAxMS41IC05OXQzNS41IC0xMDR0NTYgLTkzLjV0NzggLTY3LjV0OTcgLTI2cTk3IDAgMTQwLjUgNjAuNXQ0My41IDE2MC41ek02MjUgMTQwOGg0MzdsLTEzNSAtNzloLTEzNXE3MSAtNDUgMTEwIC0xMjZ0MzkgLTE2OXEwIC03NCAtMjMgLTEzMS41dC01NiAtOTIuNXQtNjYgLTY0LjUgdC01NiAtNjF0LTIzIC02Ny41cTAgLTI2IDE2LjUgLTUxdDQzIC00OHQ1OC41IC00OHQ2NCAtNTUuNXQ1OC41IC02NnQ0MyAtODV0MTYuNSAtMTA2LjVxMCAtMTYwIC0xNDAgLTI4MnEtMTUyIC0xMzEgLTQyMCAtMTMxcS01OSAwIC0xMTkuNSAxMHQtMTIyIDMzLjV0LTEwOC41IDU4dC03NyA4OXQtMzAgMTIxLjVxMCA2MSAzNyAxMzVxMzIgNjQgOTYgMTEwLjV0MTQ1IDcxdDE1NSAzNnQxNTAgMTMuNXEtNjQgODMgLTY0IDE0OXEwIDEyIDIgMjMuNSB0NSAxOS41dDggMjEuNXQ3IDIxLjVxLTQwIC01IC03MCAtNXEtMTQ5IDAgLTI1NS41IDk4dC0xMDYuNSAyNDZxMCAxNDAgOTUgMjUwLjV0MjM0IDE0MS41cTk0IDIwIDE4NyAyMHpNMTY2NCAxMTUydi0xMjhoLTI1NnYtMjU2aC0xMjh2MjU2aC0yNTZ2MTI4aDI1NnYyNTZoMTI4di0yNTZoMjU2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ2OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik03NjggMzg0aDM4NHY5NmgtMTI4djQ0OGgtMTE0bC0xNDggLTEzN2w3NyAtODBxNDIgMzcgNTUgNTdoMnYtMjg4aC0xMjh2LTk2ek0xMjgwIDY0MHEwIC03MCAtMjEgLTE0MnQtNTkuNSAtMTM0dC0xMDEuNSAtMTAxdC0xMzggLTM5dC0xMzggMzl0LTEwMS41IDEwMXQtNTkuNSAxMzR0LTIxIDE0MnQyMSAxNDJ0NTkuNSAxMzR0MTAxLjUgMTAxdDEzOCAzOXQxMzggLTM5dDEwMS41IC0xMDF0NTkuNSAtMTM0dDIxIC0xNDJ6TTE3OTIgMzg0IHY1MTJxLTEwNiAwIC0xODEgNzV0LTc1IDE4MWgtMTE1MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV2LTUxMnExMDYgMCAxODEgLTc1dDc1IC0xODFoMTE1MnEwIDEwNiA3NSAxODF0MTgxIDc1ek0xOTIwIDEyMTZ2LTExNTJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNzkycS0yNiAwIC00NSAxOXQtMTkgNDV2MTE1MnEwIDI2IDE5IDQ1dDQ1IDE5aDE3OTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ3OyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloODk2cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkODsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMTAyNCAzMjBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ5OyIgaG9yaXotYWR2LXg9IjY0MCIgZD0iTTY0MCAxMDg4di04OTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkYTsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik01NzYgNjQwcTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djg5NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRiOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjAgMGg2MDh2MTE1MmgtNjQwdi0xMTIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjV6TTE1MzYgMzJ2MTEyMGgtNjQwdi0xMTUyaDYwOHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNjY0IDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEzNDRxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDEzNDRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZGM7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgNDQ4cTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZGQ7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgNDQ4cTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRlOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTA7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgODI2di03OTRxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjc5NHE0NCAtNDkgMTAxIC04N3EzNjIgLTI0NiA0OTcgLTM0NXE1NyAtNDIgOTIuNSAtNjUuNXQ5NC41IC00OHQxMTAgLTI0LjVoMWgxcTUxIDAgMTEwIDI0LjV0OTQuNSA0OHQ5Mi41IDY1LjVxMTcwIDEyMyA0OTggMzQ1cTU3IDM5IDEwMCA4N3pNMTc5MiAxMTIwcTAgLTc5IC00OSAtMTUxdC0xMjIgLTEyMyBxLTM3NiAtMjYxIC00NjggLTMyNXEtMTAgLTcgLTQyLjUgLTMwLjV0LTU0IC0zOHQtNTIgLTMyLjV0LTU3LjUgLTI3dC01MCAtOWgtMWgtMXEtMjMgMCAtNTAgOXQtNTcuNSAyN3QtNTIgMzIuNXQtNTQgMzh0LTQyLjUgMzAuNXEtOTEgNjQgLTI2MiAxODIuNXQtMjA1IDE0Mi41cS02MiA0MiAtMTE3IDExNS41dC01NSAxMzYuNXEwIDc4IDQxLjUgMTMwdDExOC41IDUyaDE0NzJxNjUgMCAxMTIuNSAtNDd0NDcuNSAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUxOyIgaG9yaXotYWR2LXg9IjEzNzkiIGQ9Ik0xMDE0IDk2MXExNzEgMCAyNjggLTg1LjV0OTcgLTI1NC41di01ODZxMCAtMTQgLTEwLjUgLTI0LjV0LTI0LjUgLTEwLjVoLTI1MnEtMTQgMCAtMjQuNSAxMC41dC0xMC41IDI0LjV2NTI5cTAgNzEgLTI2LjUgMTA0dC05NS41IDMzcS04OCAwIC0xMjMuNSAtNTEuNXQtMzUuNSAtMTQzLjV2LTQ3MXEwIC0xNCAtMTAuNSAtMjQuNXQtMjUuNSAtMTAuNWgtMjQ2cS0xNCAwIC0yNC41IDEwLjV0LTEwLjUgMjQuNXY4NjhxMCAxNCAxMC41IDI0LjUgdDI0LjUgMTAuNWgyMzlxMTMgMCAyMSAtNXQxMC41IC0xOC41dDMgLTE4dDAuNSAtMjIuNXE5MyA4NyAyNDYgODd6TTI5MCA5MzhxMTQgMCAyNC41IC0xMC41dDEwLjUgLTI0LjV2LTg2OHEwIC0xNCAtMTAuNSAtMjQuNXQtMjQuNSAtMTAuNWgtMjQ2cS0xNCAwIC0yNC41IDEwLjV0LTEwLjUgMjQuNXY4NjhxMCAxNCAxMC41IDI0LjV0MjQuNSAxMC41aDI0NnpNMTY3IDEzNzFxNjkgMCAxMTggLTQ5dDQ5IC0xMTh0LTQ5IC0xMTh0LTExOCAtNDkgdC0xMTggNDl0LTQ5IDExOHQ0OSAxMTh0MTE4IDQ5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUyOyIgZD0iTTE1MzYgNjQwcTAgLTE1NiAtNjEgLTI5OHQtMTY0IC0yNDV0LTI0NSAtMTY0dC0yOTggLTYxcS0xNzkgMCAtMzM2LjUgNzZ0LTI2NiAyMTN0LTE0Ny41IDMxMnEtMyAxNCA3IDI3cTkgMTIgMjUgMTJoMTk5cTIzIDAgMzAgLTIzcTUwIC0xNjIgMTg1IC0yNjEuNXQzMDQgLTk5LjVxMTA0IDAgMTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41dC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjUgdC0xOTguNSA0MC41cS05OCAwIC0xODggLTM1LjV0LTE2MCAtMTAxLjVsMTM3IC0xMzhxMzEgLTMwIDE0IC02OXEtMTcgLTQwIC01OSAtNDBoLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDQyIDQwIDU5cTM5IDE3IDY5IC0xNGwxMzAgLTEyOXExMDcgMTAxIDI0NC41IDE1Ni41dDI4NC41IDU1LjVxMTU2IDAgMjk4IC02MXQyNDUgLTE2NHQxNjQgLTI0NXQ2MSAtMjk4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUzOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzcxIDBxMCAtNTMgLTM3IC05MGwtMTA3IC0xMDhxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtMzYzIDM2NHEtMzggMzYgLTM4IDkwcTAgNTMgNDMgOTZsLTI1NiAyNTZsLTEyNiAtMTI2cS0xNCAtMTQgLTM0IC0xNHQtMzQgMTRxMiAtMiAxMi41IC0xMnQxMi41IC0xM3QxMCAtMTEuNXQxMCAtMTMuNXQ2IC0xMy41dDUuNSAtMTYuNXQxLjUgLTE4cTAgLTM4IC0yOCAtNjhxLTMgLTMgLTE2LjUgLTE4dC0xOSAtMjAuNSB0LTE4LjUgLTE2LjV0LTIyIC0xNS41dC0yMiAtOXQtMjYgLTQuNXEtNDAgMCAtNjggMjhsLTQwOCA0MDhxLTI4IDI4IC0yOCA2OHEwIDEzIDQuNSAyNnQ5IDIydDE1LjUgMjJ0MTYuNSAxOC41dDIwLjUgMTl0MTggMTYuNXEzMCAyOCA2OCAyOHExMCAwIDE4IC0xLjV0MTYuNSAtNS41dDEzLjUgLTZ0MTMuNSAtMTB0MTEuNSAtMTB0MTMgLTEyLjV0MTIgLTEyLjVxLTE0IDE0IC0xNCAzNHQxNCAzNGwzNDggMzQ4cTE0IDE0IDM0IDE0dDM0IC0xNCBxLTIgMiAtMTIuNSAxMnQtMTIuNSAxM3QtMTAgMTEuNXQtMTAgMTMuNXQtNiAxMy41dC01LjUgMTYuNXQtMS41IDE4cTAgMzggMjggNjhxMyAzIDE2LjUgMTh0MTkgMjAuNXQxOC41IDE2LjV0MjIgMTUuNXQyMiA5dDI2IDQuNXE0MCAwIDY4IC0yOGw0MDggLTQwOHEyOCAtMjggMjggLTY4cTAgLTEzIC00LjUgLTI2dC05IC0yMnQtMTUuNSAtMjJ0LTE2LjUgLTE4LjV0LTIwLjUgLTE5dC0xOCAtMTYuNXEtMzAgLTI4IC02OCAtMjggcS0xMCAwIC0xOCAxLjV0LTE2LjUgNS41dC0xMy41IDZ0LTEzLjUgMTB0LTExLjUgMTB0LTEzIDEyLjV0LTEyIDEyLjVxMTQgLTE0IDE0IC0zNHQtMTQgLTM0bC0xMjYgLTEyNmwyNTYgLTI1NnE0MyA0MyA5NiA0M3E1MiAwIDkxIC0zN2wzNjMgLTM2M3EzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGU0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek01NzYgODMycTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMDA0IDM1MWwxMDEgMzgycTYgMjYgLTcuNSA0OC41dC0zOC41IDI5LjUgdC00OCAtNi41dC0zMCAtMzkuNWwtMTAxIC0zODJxLTYwIC01IC0xMDcgLTQzLjV0LTYzIC05OC41cS0yMCAtNzcgMjAgLTE0NnQxMTcgLTg5dDE0NiAyMHQ4OSAxMTdxMTYgNjAgLTYgMTE3dC03MiA5MXpNMTY2NCAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgMTAyNHEwIDUzIC0zNy41IDkwLjUgdC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE0NzIgODMycTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNzkyIDM4NHEwIC0yNjEgLTE0MSAtNDgzcS0xOSAtMjkgLTU0IC0yOWgtMTQwMnEtMzUgMCAtNTQgMjkgcS0xNDEgMjIxIC0xNDEgNDgzcTAgMTgyIDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IDExNTJxLTIwNCAwIC0zODEuNSAtNjkuNXQtMjgyIC0xODcuNXQtMTA0LjUgLTI1NXEwIC0xMTIgNzEuNSAtMjEzLjV0MjAxLjUgLTE3NS41bDg3IC01MGwtMjcgLTk2cS0yNCAtOTEgLTcwIC0xNzJxMTUyIDYzIDI3NSAxNzFsNDMgMzhsNTcgLTZxNjkgLTggMTMwIC04cTIwNCAwIDM4MS41IDY5LjV0MjgyIDE4Ny41dDEwNC41IDI1NXQtMTA0LjUgMjU1dC0yODIgMTg3LjV0LTM4MS41IDY5LjV6TTE3OTIgNjQwIHEwIC0xNzQgLTEyMCAtMzIxLjV0LTMyNiAtMjMzdC00NTAgLTg1LjVxLTcwIDAgLTE0NSA4cS0xOTggLTE3NSAtNDYwIC0yNDJxLTQ5IC0xNCAtMTE0IC0yMmgtNXEtMTUgMCAtMjcgMTAuNXQtMTYgMjcuNXYxcS0zIDQgLTAuNSAxMnQyIDEwdDQuNSA5LjVsNiA5dDcgOC41dDggOXE3IDggMzEgMzQuNXQzNC41IDM4dDMxIDM5LjV0MzIuNSA1MXQyNyA1OXQyNiA3NnEtMTU3IDg5IC0yNDcuNSAyMjB0LTkwLjUgMjgxcTAgMTc0IDEyMCAzMjEuNSB0MzI2IDIzM3Q0NTAgODUuNXQ0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNzA0IDExNTJxLTE1MyAwIC0yODYgLTUydC0yMTEuNSAtMTQxdC03OC41IC0xOTFxMCAtODIgNTMgLTE1OHQxNDkgLTEzMmw5NyAtNTZsLTM1IC04NHEzNCAyMCA2MiAzOWw0NCAzMWw1MyAtMTBxNzggLTE0IDE1MyAtMTRxMTUzIDAgMjg2IDUydDIxMS41IDE0MXQ3OC41IDE5MXQtNzguNSAxOTF0LTIxMS41IDE0MXQtMjg2IDUyek03MDQgMTI4MHExOTEgMCAzNTMuNSAtNjguNXQyNTYuNSAtMTg2LjV0OTQgLTI1N3QtOTQgLTI1NyB0LTI1Ni41IC0xODYuNXQtMzUzLjUgLTY4LjVxLTg2IDAgLTE3NiAxNnEtMTI0IC04OCAtMjc4IC0xMjhxLTM2IC05IC04NiAtMTZoLTNxLTExIDAgLTIwLjUgOHQtMTEuNSAyMXEtMSAzIC0xIDYuNXQwLjUgNi41dDIgNmwyLjUgNXQzLjUgNS41dDQgNXQ0LjUgNXQ0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNXQyMi41IDI5dDI1IDM4LjV0MjAuNSA0NHEtMTI0IDcyIC0xOTUgMTc3dC03MSAyMjRxMCAxMzkgOTQgMjU3dDI1Ni41IDE4Ni41IHQzNTMuNSA2OC41ek0xNTI2IDExMXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03cS01MCA3IC04NiAxNnEtMTU0IDQwIC0yNzggMTI4cS05MCAtMTYgLTE3NiAtMTZxLTI3MSAwIC00NzIgMTMycTU4IC00IDg4IC00cTE2MSAwIDMwOSA0NXQyNjQgMTI5IHExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHEwIC0xMjAgLTcxIC0yMjQuNXQtMTk1IC0xNzYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNzsiIGhvcml6LWFkdi14PSI4OTYiIGQ9Ik04ODUgOTcwcTE4IC0yMCA3IC00NGwtNTQwIC0xMTU3cS0xMyAtMjUgLTQyIC0yNXEtNCAwIC0xNCAycS0xNyA1IC0yNS41IDE5dC00LjUgMzBsMTk3IDgwOGwtNDA2IC0xMDFxLTQgLTEgLTEyIC0xcS0xOCAwIC0zMSAxMXEtMTggMTUgLTEzIDM5bDIwMSA4MjVxNCAxNCAxNiAyM3QyOCA5aDMyOHExOSAwIDMyIC0xMi41dDEzIC0yOS41cTAgLTggLTUgLTE4bC0xNzEgLTQ2M2wzOTYgOThxOCAyIDEyIDJxMTkgMCAzNCAtMTV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTg7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMjg4di0zMjBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJoLTUxMnYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoOTZ2MTkyaC01MTJ2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMCBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJxMCA1MiAzOCA5MHQ5MCAzOGg1MTJ2MTkyaC05NnEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2di0xOTJoNTEycTUyIDAgOTAgLTM4dDM4IC05MHYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OCB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTk7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTg5NiA3MDh2LTU4MHEwIC0xMDQgLTc2IC0xODB0LTE4MCAtNzZ0LTE4MCA3NnQtNzYgMTgwcTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXEwIC01MCAzOSAtODl0ODkgLTM5dDg5IDM5dDM5IDg5djU4MHEzMyAxMSA2NCAxMXQ2NCAtMTF6TTE2NjQgNjgxcTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNXEtMTEgMCAtMjMgMTBxLTQ5IDQ2IC05MyA2OXQtMTAyIDIzcS02OCAwIC0xMjggLTM3dC0xMDMgLTk3IHEtNyAtMTAgLTE3LjUgLTI4dC0xNC41IC0yNHEtMTEgLTE3IC0yOCAtMTdxLTE4IDAgLTI5IDE3cS00IDYgLTE0LjUgMjR0LTE3LjUgMjhxLTQzIDYwIC0xMDIuNSA5N3QtMTI3LjUgMzd0LTEyNy41IC0zN3QtMTAyLjUgLTk3cS03IC0xMCAtMTcuNSAtMjh0LTE0LjUgLTI0cS0xMSAtMTcgLTI5IC0xN3EtMTcgMCAtMjggMTdxLTQgNiAtMTQuNSAyNHQtMTcuNSAyOHEtNDMgNjAgLTEwMyA5N3QtMTI4IDM3cS01OCAwIC0xMDIgLTIzdC05MyAtNjkgcS0xMiAtMTAgLTIzIC0xMHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41cTAgNSAxIDdxNDUgMTgzIDE3Mi41IDMxOS41dDI5OCAyMDQuNXQzNjAuNSA2OHExNDAgMCAyNzQuNSAtNDB0MjQ2LjUgLTExMy41dDE5NC41IC0xODd0MTE1LjUgLTI1MS41cTEgLTIgMSAtN3pNODk2IDE0MDh2LTk4cS00MiAyIC02NCAydC02NCAtMnY5OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTc2OCAtMTI4aDg5NnY2NDBoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtMzg0di0xMTUyek0xMDI0IDEzMTJ2NjRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC03MDRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di02NHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDcwNHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjgwIDY0MGgyOTlsLTI5OSAyOTl2LTI5OXpNMTc5MiA1MTJ2LTY3MnEwIC00MCAtMjggLTY4dC02OCAtMjggaC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjBoLTU0NHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGgxMDg4cTQwIDAgNjggLTI4dDI4IC02OHYtMzI4cTIxIC0xMyAzNiAtMjhsNDA4IC00MDhxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWI7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTczNiA5NjBxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41dC0yMi41IDkuNXQtOS41IDIyLjVxMCA0NiAtNTQgNzF0LTEwNiAyNXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41dDkuNSAyMi41dDIyLjUgOS41cTUwIDAgOTkuNSAtMTZ0ODcgLTU0dDM3LjUgLTkwek04OTYgOTYwcTAgNzIgLTM0LjUgMTM0dC05MCAxMDEuNXQtMTIzIDYydC0xMzYuNSAyMi41dC0xMzYuNSAtMjIuNXQtMTIzIC02MnQtOTAgLTEwMS41dC0zNC41IC0xMzQgcTAgLTEwMSA2OCAtMTgwcTEwIC0xMSAzMC41IC0zM3QzMC41IC0zM3ExMjggLTE1MyAxNDEgLTI5OGgyMjhxMTMgMTQ1IDE0MSAyOThxMTAgMTEgMzAuNSAzM3QzMC41IDMzcTY4IDc5IDY4IDE4MHpNMTAyNCA5NjBxMCAtMTU1IC0xMDMgLTI2OHEtNDUgLTQ5IC03NC41IC04N3QtNTkuNSAtOTUuNXQtMzQgLTEwNy41cTQ3IC0yOCA0NyAtODJxMCAtMzcgLTI1IC02NHEyNSAtMjcgMjUgLTY0cTAgLTUyIC00NSAtODFxMTMgLTIzIDEzIC00NyBxMCAtNDYgLTMxLjUgLTcxdC03Ny41IC0yNXEtMjAgLTQ0IC02MCAtNzB0LTg3IC0yNnQtODcgMjZ0LTYwIDcwcS00NiAwIC03Ny41IDI1dC0zMS41IDcxcTAgMjQgMTMgNDdxLTQ1IDI5IC00NSA4MXEwIDM3IDI1IDY0cS0yNSAyNyAtMjUgNjRxMCA1NCA0NyA4MnEtNCA1MCAtMzQgMTA3LjV0LTU5LjUgOTUuNXQtNzQuNSA4N3EtMTAzIDExMyAtMTAzIDI2OHEwIDk5IDQ0LjUgMTg0LjV0MTE3IDE0MnQxNjQgODl0MTg2LjUgMzIuNSB0MTg2LjUgLTMyLjV0MTY0IC04OXQxMTcgLTE0MnQ0NC41IC0xODQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAzNTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTEyIDAgLTI0IDEwbC0zMTkgMzIwcS05IDkgLTkgMjJxMCAxNCA5IDIzbDMyMCAzMjBxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJoMTM3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgODk2cTAgLTE0IC05IC0yM2wtMzIwIC0zMjBxLTkgLTkgLTIzIC05IHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MmgtMTM3NnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNzZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgNjA4cTAgMTQgLTkgMjN0LTIzIDloLTIyNHYzNTJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zNTJoLTIyNHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjVxMCAtMTQgOSAtMjNsMzUyIC0zNTJxOSAtOSAyMyAtOXQyMyA5bDM1MSAzNTFxMTAgMTIgMTAgMjR6TTE5MjAgMzg0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTEwODggcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGVlOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMjgwIDY3MnEwIDE0IC05IDIzbC0zNTIgMzUycS05IDkgLTIzIDl0LTIzIC05bC0zNTEgLTM1MXEtMTAgLTEyIC0xMCAtMjRxMCAtMTQgOSAtMjN0MjMgLTloMjI0di0zNTJxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXYzNTJoMjI0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE5MjAgMzg0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTEwODggcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYwOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMTkycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTE0MDggMTMxcTAgLTEyMSAtNzMgLTE5MHQtMTk0IC02OWgtODc0cS0xMjEgMCAtMTk0IDY5dC03MyAxOTBxMCA2OCA1LjUgMTMxdDI0IDEzOHQ0Ny41IDEzMi41dDgxIDEwM3QxMjAgNjAuNXEtMjIgLTUyIC0yMiAtMTIwdi0yMDNxLTU4IC0yMCAtOTMgLTcwdC0zNSAtMTExcTAgLTgwIDU2IC0xMzZ0MTM2IC01NiB0MTM2IDU2dDU2IDEzNnEwIDYxIC0zNS41IDExMXQtOTIuNSA3MHYyMDNxMCA2MiAyNSA5M3ExMzIgLTEwNCAyOTUgLTEwNHQyOTUgMTA0cTI1IC0zMSAyNSAtOTN2LTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtODlxLTMyIC0yOSAtMzIgLTcxcTAgLTQwIDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA1MiAzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkwdi04OXEtMzIgLTI5IC0zMiAtNzFxMCAtNDAgMjggLTY4IHQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA2OCAtMzQuNSAxMjcuNXQtOTMuNSA5My41cTAgMTAgMC41IDQyLjV0MCA0OHQtMi41IDQxLjV0LTcgNDd0LTEzIDQwcTY4IC0xNSAxMjAgLTYwLjV0ODEgLTEwM3Q0Ny41IC0xMzIuNXQyNCAtMTM4dDUuNSAtMTMxek0xMDg4IDEwMjRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41IHQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYxOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMjgwIDgzMnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggODMycTAgLTYyIC0zNS41IC0xMTF0LTkyLjUgLTcwdi0zOTVxMCAtMTU5IC0xMzEuNSAtMjcxLjV0LTMxNi41IC0xMTIuNXQtMzE2LjUgMTEyLjV0LTEzMS41IDI3MS41djEzMnEtMTY0IDIwIC0yNzQgMTI4dC0xMTAgMjUydjUxMnEwIDI2IDE5IDQ1dDQ1IDE5cTYgMCAxNiAtMnExNyAzMCA0NyA0OCB0NjUgMThxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV0LTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTMzIDAgLTY0IDE4di00MDJxMCAtMTA2IDk0IC0xODF0MjI2IC03NXQyMjYgNzV0OTQgMTgxdjQwMnEtMzEgLTE4IC02NCAtMThxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjVxMzUgMCA2NSAtMTh0NDcgLTQ4cTEwIDIgMTYgMnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTUxMnEwIC0xNDQgLTExMCAtMjUyIHQtMjc0IC0xMjh2LTEzMnEwIC0xMDYgOTQgLTE4MXQyMjYgLTc1dDIyNiA3NXQ5NCAxODF2Mzk1cS01NyAyMSAtOTIuNSA3MHQtMzUuNSAxMTFxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTI4OCAxMTUydi0xMjgwaC02NHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2ODMycTAgOTIgNjYgMTU4dDE1OCA2Nmg2NHpNMTQwOCAxMTUydi0xMjgwaC0xMDI0djEyODBoMTI4djE2MHEwIDQwIDI4IDY4dDY4IDI4aDU3NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTE2MGgxMjh6TTE3OTIgOTI4di04MzJxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTY0djEyODBoNjRxOTIgMCAxNTggLTY2IHQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYzOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik04NDggLTE2MHEwIDE2IC0xNiAxNnEtNTkgMCAtMTAxLjUgNDIuNXQtNDIuNSAxMDEuNXEwIDE2IC0xNiAxNnQtMTYgLTE2cTAgLTczIDUxLjUgLTEyNC41dDEyNC41IC01MS41cTE2IDAgMTYgMTZ6TTE2NjQgMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNDQ4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTQ0OHEtNTIgMCAtOTAgMzh0LTM4IDkwcTE5MCAxNjEgMjg3IDM5Ny41dDk3IDQ5OC41IHEwIDE2NSA5NiAyNjJ0MjY0IDExN3EtOCAxOCAtOCAzN3EwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMTkgLTggLTM3cTE2OCAtMjAgMjY0IC0xMTd0OTYgLTI2MnEwIC0yNjIgOTcgLTQ5OC41dDI4NyAtMzk3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE2NjQgODk2cTAgODAgLTU2IDEzNnQtMTM2IDU2aC02NHYtMzg0aDY0cTgwIDAgMTM2IDU2dDU2IDEzNnpNMCAxMjhoMTc5MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzVoLTEyODBxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXpNMTg1NiA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtNjR2LTMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC03MDRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djczNnEwIDI2IDE5IDQ1IHQ0NSAxOWgxMTUycTE1OSAwIDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjU7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTY0MCAxNDcydi02NDBxMCAtNjEgLTM1LjUgLTExMXQtOTIuNSAtNzB2LTc3OXEwIC01MiAtMzggLTkwdC05MCAtMzhoLTEyOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjc3OXEtNTcgMjAgLTkyLjUgNzB0LTM1LjUgMTExdjY0MHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1djQxNnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDUgdDQ1IC0xOXQ0NSAxOXQxOSA0NXY0MTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xNDA4IDE0NzJ2LTE2MDBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHY1MTJoLTIyNHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djgwMHEwIDEzMiA5NCAyMjZ0MjI2IDk0aDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjY7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEwMjQgMzUydi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTEyOCAwaDEwMjR2NzY4aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTUxMnYtMTI4MHogTTc2OCA4OTZoMjk5bC0yOTkgMjk5di0yOTl6TTEyODAgNzY4di04MDBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMDg4cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDU0NHE0MCAwIDg4IC0yMHQ3NiAtNDhsNDA4IC00MDhxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjc7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTExNTIgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgMTI0OHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTg5NiAtMTI4aDM4NHYxNTM2aC0xMTUydi0xNTM2aDM4NHYyMjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjR6TTE0MDggMTQ3MnYtMTY2NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyODBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNjY0cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjg7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgLTEyOGgzODR2MTE1MmgtMjU2di0zMnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQ0OHEtNDAgMCAtNjggMjh0LTI4IDY4djMyaC0yNTZ2LTExNTJoMzg0djIyNHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDMyMHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTIyNHpNODk2IDEwNTZ2MzIwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NmgtMTI4djk2cTAgMTMgLTkuNSAyMi41IHQtMjIuNSA5LjVoLTY0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY5NmgxMjh2LTk2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTQwOCAxMDg4di0xMjgwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyODBxMCAyNiAxOSA0NXQ0NSAxOWgzMjAgdjI4OHEwIDQwIDI4IDY4dDY4IDI4aDQ0OHE0MCAwIDY4IC0yOHQyOCAtNjh2LTI4OGgzMjBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY5OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgMTI4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTQgLTIgLTIyIC05bC0xOTUgLTE5NXEtNyAtMTIgLTkgLTIydi0zMHpNMTUzNiAxMjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41IHQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNjY0IDgwMHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMjI0djIyNHEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMjI0aC0yMjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDIyNHYtMjI0cTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3YyMjRoMjI0cTE0IDAgMjMgOXQ5IDIzek0xOTIwIDEzNDR2LTExNTIgcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkycTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTM4NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXY0MTZxMCAyNiAxMyA1OHQzMiA1MWwxOTggMTk4cTE5IDE5IDUxIDMydDU4IDEzaDE2MHYzMjBxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmYTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI4MCA0MTZ2MTkycTAgMTQgLTkgMjN0LTIzIDloLTIyNHYyMjRxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTIyNGgtMjI0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTIyNHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2MjI0aDIyNHExNCAwIDIzIDl0OSAyM3pNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTI1NiAxMTUydi0xMjgwaC0zMiBxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoMzJ6TTE0NDAgMTE1MnYtMTI4MGgtMTA4OHYxMjgwaDE2MHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMTYwek0xNzkyIDkyOHYtODMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0zMnYxMjgwaDMycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGZiOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNjMyIDgwMHEyNjEgLTU4IDI4NyAtOTNsMSAtM3EtMSAtMzIgLTI4OCAtOTZsLTM1MiAtMzJsLTIyNCAtNjRoLTY0bC0yOTMgLTM1Mmg2OXEyNiAwIDQ1IC00LjV0MTkgLTExLjV0LTE5IC0xMS41dC00NSAtNC41aC05NmgtMTYwaC02NHYzMmg2NHY0MTZoLTE2MGwtMTkyIC0yMjRoLTk2bC0zMiAzMnYxOTJoMzJ2MzJoMTI4djhsLTE5MiAyNHYxMjhsMTkyIDI0djhoLTEyOHYzMmgtMzJ2MTkybDMyIDMyaDk2bDE5MiAtMjI0aDE2MHY0MTYgaC02NHYzMmg2NGgxNjBoOTZxMjYgMCA0NSAtNC41dDE5IC0xMS41dC0xOSAtMTEuNXQtNDUgLTQuNWgtNjlsMjkzIC0zNTJoNjRsMjI0IC02NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmYzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDY0MHYzODRoLTI1NnYtMTYwcTAgLTQ1IDIgLTc2dDcuNSAtNTYuNXQxNC41IC00MHQyMyAtMjYuNXQzMy41IC0xNS41dDQ1IC03LjV0NTggLTIuNXQ3Mi41IDAuNXpNMTY2NCAxOTJ2LTE5MmgtMTE1MnYxOTJsMTI4IDE5MmgtOTdxLTIxMSAwIC0zMTMgMTAyLjV0LTEwMiAzMTQuNXYyODdsLTY0IDY0bDMyIDEyOGg0ODBsMzIgMTI4aDk2MGwzMiAtMTkybC02NCAtMzJ2LTgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmZDsiIGQ9Ik0xMjgwIDE5MnY4OTZxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zMjBoLTUxMnYzMjBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di04OTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXYzMjBoNTEydi0zMjBxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiAxMTIwdi05NjAgcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGZlOyIgZD0iTTEyODAgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTMyMHYzMjBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zMjBoLTMyMHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDMyMHYtMzIwcTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDMyMHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDExMjB2LTk2MCBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDA7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTYyNyAxNjBxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3QtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzek0xMDExIDE2MHEwIC0xMyAtMTAgLTIzbC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNDY2IDQ2NnEtMTAgMTAgLTEwIDIzIHQxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3QtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTAxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01OTUgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzek05NzkgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjMgbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwMjsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA3NSAyMjRxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTM5MyAzOTNsLTM5MyAtMzkzcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3pNMTA3NSA2MDhxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTM5MyAzOTNsLTM5MyAtMzkzIHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDM7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTEwNzUgNjcycTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsMzkzIC0zOTNsMzkzIDM5M3ExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6TTEwNzUgMTA1NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjMgdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGwzOTMgLTM5M2wzOTMgMzkzcTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNDsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik02MjcgOTkycTAgLTEzIC0xMCAtMjNsLTM5MyAtMzkzbDM5MyAtMzkzcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNTsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik01OTUgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA2OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDM1MnEwIC0xMyAtMTAgLTIzbC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMzkzIDM5M2wtMzkzIC0zOTNxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA3OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDgwMHEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDM5MyAtMzkzbDM5MyAzOTNxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA4OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzkyIDU0NHY4MzJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtODMycTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xOTIwIDEzNzZ2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTU0NHEwIC0zNyAxNiAtNzcuNXQzMiAtNzF0MTYgLTQzLjVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5IHQtMTkgNDVxMCAxNCAxNiA0NHQzMiA3MHQxNiA3OGgtNTQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA5OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik00MTYgMjU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y3MDRxMCA2NiA0NyAxMTN0MTEzIDQ3aDEwODhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTcwNHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTA4OHpNMzg0IDExMjB2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDEwODhxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY3MDRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xMDg4cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXogTTE3NjAgMTkyaDE2MHYtOTZxMCAtNDAgLTQ3IC02OHQtMTEzIC0yOGgtMTYwMHEtNjYgMCAtMTEzIDI4dC00NyA2OHY5NmgxNjBoMTYwMHpNMTA0MCA5NnExNiAwIDE2IDE2dC0xNiAxNmgtMTYwcS0xNiAwIC0xNiAtMTZ0MTYgLTE2aDE2MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYTsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNjQwIDEyOHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjQgMjg4djk2MHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTgzMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2MHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDgzMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMTUyIDEyNDh2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTgzMiBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDgzMnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYjsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik00NjQgMTI4cTAgMzMgLTIzLjUgNTYuNXQtNTYuNSAyMy41dC01Ni41IC0yMy41dC0yMy41IC01Ni41dDIzLjUgLTU2LjV0NTYuNSAtMjMuNXQ1Ni41IDIzLjV0MjMuNSA1Ni41ek02NzIgMjg4djcwNHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTUxMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDUxMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek00ODAgMTEzNiBxMCAxNiAtMTYgMTZoLTE2MHEtMTYgMCAtMTYgLTE2dDE2IC0xNmgxNjBxMTYgMCAxNiAxNnpNNzY4IDExNTJ2LTEwMjRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMDI0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYzsiIGQ9Ik0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCA1NzZ2LTM4NHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NmgtMzg0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnY3MDRxMCAxMDQgNDAuNSAxOTguNXQxMDkuNSAxNjMuNXQxNjMuNSAxMDkuNXQxOTguNSA0MC41aDY0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNjRxLTEwNiAwIC0xODEgLTc1dC03NSAtMTgxdi0zMnEwIC00MCAyOCAtNjh0NjggLTI4aDIyNHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnogTTE2NjQgNTc2di0zODRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZoLTM4NHEtODAgMCAtMTM2IDU2dC01NiAxMzZ2NzA0cTAgMTA0IDQwLjUgMTk4LjV0MTA5LjUgMTYzLjV0MTYzLjUgMTA5LjV0MTk4LjUgNDAuNWg2NHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtMzJxMCAtNDAgMjggLTY4dDY4IC0yOGgyMjRxODAgMCAxMzYgLTU2dDU2IC0xMzZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCAxMjE2di03MDRxMCAtMTA0IC00MC41IC0xOTguNXQtMTA5LjUgLTE2My41dC0xNjMuNSAtMTA5LjV0LTE5OC41IC00MC41aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0cTEwNiAwIDE4MSA3NXQ3NSAxODF2MzJxMCA0MCAtMjggNjh0LTY4IDI4aC0yMjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2IC01NnQ1NiAtMTM2ek0xNjY0IDEyMTYgdi03MDRxMCAtMTA0IC00MC41IC0xOTguNXQtMTA5LjUgLTE2My41dC0xNjMuNSAtMTA5LjV0LTE5OC41IC00MC41aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0cTEwNiAwIDE4MSA3NXQ3NSAxODF2MzJxMCA0MCAtMjggNjh0LTY4IDI4aC0yMjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2IC01NnQ1NiAtMTM2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTEwOyIgaG9yaXotYWR2LXg9IjE1NjgiIGQ9Ik00OTYgMTkycTAgLTYwIC00Mi41IC0xMDJ0LTEwMS41IC00MnEtNjAgMCAtMTAyIDQydC00MiAxMDJ0NDIgMTAydDEwMiA0MnE1OSAwIDEwMS41IC00MnQ0Mi41IC0xMDJ6TTkyOCAwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMzIwIDY0MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N3QtMTEzIDQ3dC00NyAxMTMgdDQ3IDExM3QxMTMgNDd0MTEzIC00N3Q0NyAtMTEzek0xMzYwIDE5MnEwIC00NiAtMzMgLTc5dC03OSAtMzN0LTc5IDMzdC0zMyA3OXQzMyA3OXQ3OSAzM3Q3OSAtMzN0MzMgLTc5ek01MjggMTA4OHEwIC03MyAtNTEuNSAtMTI0LjV0LTEyNC41IC01MS41dC0xMjQuNSA1MS41dC01MS41IDEyNC41dDUxLjUgMTI0LjV0MTI0LjUgNTEuNXQxMjQuNSAtNTEuNXQ1MS41IC0xMjQuNXpNOTkyIDEyODBxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTYgdC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTUzNiA2NDBxMCAtNDAgLTI4IC02OHQtNjggLTI4dC02OCAyOHQtMjggNjh0MjggNjh0NjggMjh0NjggLTI4dDI4IC02OHpNMTMyOCAxMDg4cTAgLTMzIC0yMy41IC01Ni41dC01Ni41IC0yMy41dC01Ni41IDIzLjV0LTIzLjUgNTYuNXQyMy41IDU2LjV0NTYuNSAyMy41dDU2LjUgLTIzLjV0MjMuNSAtNTYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMTsiIGQ9Ik0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA0MTZxMCAtMTY2IC0xMjcgLTQ1MXEtMyAtNyAtMTAuNSAtMjR0LTEzLjUgLTMwdC0xMyAtMjJxLTEyIC0xNyAtMjggLTE3cS0xNSAwIC0yMy41IDEwdC04LjUgMjVxMCA5IDIuNSAyNi41dDIuNSAyMy41cTUgNjggNSAxMjNxMCAxMDEgLTE3LjUgMTgxdC00OC41IDEzOC41dC04MCAxMDF0LTEwNS41IDY5LjV0LTEzMyA0Mi41dC0xNTQgMjEuNXQtMTc1LjUgNmgtMjI0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOSBsLTUxMiA1MTJxLTE5IDE5IC0xOSA0NXQxOSA0NWw1MTIgNTEycTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTI1NmgyMjRxNzEzIDAgODc1IC00MDNxNTMgLTEzNCA1MyAtMzMzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTEzOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgMzIwcTAgLTQwIC0xMi41IC04MnQtNDMgLTc2dC03Mi41IC0zNHQtNzIuNSAzNHQtNDMgNzZ0LTEyLjUgODJ0MTIuNSA4MnQ0MyA3NnQ3Mi41IDM0dDcyLjUgLTM0dDQzIC03NnQxMi41IC04MnpNMTI4MCAzMjBxMCAtNDAgLTEyLjUgLTgydC00MyAtNzZ0LTcyLjUgLTM0dC03Mi41IDM0dC00MyA3NnQtMTIuNSA4MnQxMi41IDgydDQzIDc2dDcyLjUgMzR0NzIuNSAtMzR0NDMgLTc2dDEyLjUgLTgyek0xNDQwIDMyMCBxMCAxMjAgLTY5IDIwNHQtMTg3IDg0cS00MSAwIC0xOTUgLTIxcS03MSAtMTEgLTE1NyAtMTF0LTE1NyAxMXEtMTUyIDIxIC0xOTUgMjFxLTExOCAwIC0xODcgLTg0dC02OSAtMjA0cTAgLTg4IDMyIC0xNTMuNXQ4MSAtMTAzdDEyMiAtNjB0MTQwIC0yOS41dDE0OSAtN2gxNjhxODIgMCAxNDkgN3QxNDAgMjkuNXQxMjIgNjB0ODEgMTAzdDMyIDE1My41ek0xNjY0IDQ5NnEwIC0yMDcgLTYxIC0zMzFxLTM4IC03NyAtMTA1LjUgLTEzM3QtMTQxIC04NiB0LTE3MCAtNDcuNXQtMTcxLjUgLTIydC0xNjcgLTQuNXEtNzggMCAtMTQyIDN0LTE0Ny41IDEyLjV0LTE1Mi41IDMwdC0xMzcgNTEuNXQtMTIxIDgxdC04NiAxMTVxLTYyIDEyMyAtNjIgMzMxcTAgMjM3IDEzNiAzOTZxLTI3IDgyIC0yNyAxNzBxMCAxMTYgNTEgMjE4cTEwOCAwIDE5MCAtMzkuNXQxODkgLTEyMy41cTE0NyAzNSAzMDkgMzVxMTQ4IDAgMjgwIC0zMnExMDUgODIgMTg3IDEyMXQxODkgMzlxNTEgLTEwMiA1MSAtMjE4IHEwIC04NyAtMjcgLTE2OHExMzYgLTE2MCAxMzYgLTM5OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExNDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTUzNiAyMjR2NzA0cTAgNDAgLTI4IDY4dC02OCAyOGgtNzA0cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4di05NjBxMCAtNDAgMjggLTY4dDY4IC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6TTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwIHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTE1OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzgxIDYwNXEwIDM1IC01MyAzNWgtMTA4OHEtNDAgMCAtODUuNSAtMjEuNXQtNzEuNSAtNTIuNWwtMjk0IC0zNjNxLTE4IC0yNCAtMTggLTQwcTAgLTM1IDUzIC0zNWgxMDg4cTQwIDAgODYgMjJ0NzEgNTNsMjk0IDM2M3ExOCAyMiAxOCAzOXpNNjQwIDc2OGg3Njh2MTYwcTAgNDAgLTI4IDY4dC02OCAyOGgtNTc2cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4IHYtODUzbDI1NiAzMTVxNDQgNTMgMTE2IDg3LjV0MTQwIDM0LjV6TTE5MDkgNjA1cTAgLTYyIC00NiAtMTIwbC0yOTUgLTM2M3EtNDMgLTUzIC0xMTYgLTg3LjV0LTE0MCAtMzQuNWgtMTA4OHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjBxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTMyaDU0NHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMTYwaDE5MnE1NCAwIDk5IC0yNC41dDY3IC03MC41cTE1IC0zMiAxNSAtNjh6ICIgLz4KKzwvZm9udD4KKzwvZGVmcz48L3N2Zz4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjE3MjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQud29mZiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4OWFlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuZW90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyM2JkNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0Njk0ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcKQEAgLTAsMCArMSwyMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgPgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorPG1ldGFkYXRhPjwvbWV0YWRhdGE+Cis8ZGVmcz4KKzxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA+Cis8Zm9udC1mYWNlIHVuaXRzLXBlci1lbT0iMTIwMCIgYXNjZW50PSI5NjAiIGRlc2NlbnQ9Ii0yNDAiIC8+Cis8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iNTAwIiAvPgorPGdseXBoIC8+Cis8Z2x5cGggLz4KKzxnbHlwaCB1bmljb2RlPSImI3hkOyIgLz4KKzxnbHlwaCB1bmljb2RlPSIgIiAvPgorPGdseXBoIHVuaWNvZGU9IioiIGQ9Ik0xMDAgNTAwdjIwMGgyNTlsLTE4MyAxODNsMTQxIDE0MWwxODMgLTE4M3YyNTloMjAwdi0yNTlsMTgzIDE4M2wxNDEgLTE0MWwtMTgzIC0xODNoMjU5di0yMDBoLTI1OWwxODMgLTE4M2wtMTQxIC0xNDFsLTE4MyAxODN2LTI1OWgtMjAwdjI1OWwtMTgzIC0xODNsLTE0MSAxNDFsMTgzIDE4M2gtMjU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSIrIiBkPSJNMCA0MDB2MzAwaDQwMHY0MDBoMzAwdi00MDBoNDAwdi0zMDBoLTQwMHYtNDAwaC0zMDB2NDAwaC00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGEwOyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAwOyIgaG9yaXotYWR2LXg9IjY1MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAxOyIgaG9yaXotYWR2LXg9IjEzMDQiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMzsiIGhvcml6LWFkdi14PSIxMzA0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDQ7IiBob3Jpei1hZHYteD0iNDM0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDY7IiBob3Jpei1hZHYteD0iMjE3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDc7IiBob3Jpei1hZHYteD0iMjE3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYzIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDk7IiBob3Jpei1hZHYteD0iMjYwIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMGE7IiBob3Jpei1hZHYteD0iNzIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjA1ZjsiIGhvcml6LWFkdi14PSIzMjYiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjBhYzsiIGQ9Ik0xMDAgNTAwbDEwMCAxMDBoMTEzcTAgNDcgNSAxMDBoLTIxOGwxMDAgMTAwaDEzNXEzNyAxNjcgMTEyIDI1N3ExMTcgMTQxIDI5NyAxNDFxMjQyIDAgMzU0IC0xODlxNjAgLTEwMyA2NiAtMjA5aC0xODFxMCA1NSAtMjUuNSA5OXQtNjMuNSA2OHQtNzUgMzYuNXQtNjcgMTIuNXEtMjQgMCAtNTIuNSAtMTB0LTYyLjUgLTMydC02NS41IC02N3QtNTAuNSAtMTA3aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNDYgLTYgLTEwMGg0MDZsLTEwMCAtMTAwIGgtMzAwcTkgLTc0IDMzIC0xMzJ0NTIuNSAtOTF0NjIgLTU0LjV0NTkgLTI5dDQ2LjUgLTcuNXEyOSAwIDY2IDEzdDc1IDM3dDYzLjUgNjcuNXQyNS41IDk2LjVoMTc0cS0zMSAtMTcyIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDUgMCAtMzI0IDE1OHEtMzYgNDYgLTY5IDEzMS41dC00NSAyMDUuNWgtMjE3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjEyOyIgZD0iTTIwMCA0MDBoOTAwdjMwMGgtOTAwdi0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNLTE0IDQ5NHEwIC04MCA1Ni41IC0xMzd0MTM1LjUgLTU3aDc1MHExMjAgMCAyMDUgODZ0ODUgMjA4cTAgMTIwIC04NSAyMDYuNXQtMjA1IDg2LjVxLTQ2IDAgLTkwIC0xNHEtNDQgOTcgLTEzNC41IDE1Ni41dC0yMDAuNSA1OS41cS0xNTIgMCAtMjYwIC0xMDcuNXQtMTA4IC0yNjAuNXEwIC0yNSAyIC0zN3EtNjYgLTE0IC0xMDguNSAtNjcuNXQtNDIuNSAtMTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDI3MDk7IiBkPSJNMCAxMDBsNDAwIDQwMGwyMDAgLTIwMGwyMDAgMjAwbDQwMCAtNDAwaC0xMjAwek0wIDMwMHY2MDBsMzAwIC0zMDB6TTAgMTEwMGw2MDAgLTYwM2w2MDAgNjAzaC0xMjAwek05MDAgNjAwbDMwMCAzMDB2LTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0tMTMgLTEzbDMzMyAxMTJsLTIyMyAyMjN6TTE4NyA0MDNsMjE0IC0yMTRsNjE0IDYxNGwtMjE0IDIxNHpNODg3IDExMDNsMjE0IC0yMTRsOTkgOTJxMTMgMTMgMTMgMzIuNXQtMTMgMzMuNWwtMTUzIDE1M3EtMTUgMTMgLTMzIDEzdC0zMyAtMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDA7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDAxOyIgZD0iTTAgMTIwMGgxMjAwbC01MDAgLTU1MHYtNTUwaDMwMHYtMTAwaC04MDB2MTAwaDMwMHY1NTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDI7IiBkPSJNMTQgODRxMTggLTU1IDg2IC03NS41dDE0NyA1LjVxNjUgMjEgMTA5IDY5dDQ0IDkwdjYwNmw2MDAgMTU1di01MjFxLTY0IDE2IC0xMzggLTdxLTc5IC0yNiAtMTIyLjUgLTgzdC0yNS41IC0xMTFxMTcgLTU1IDg1LjUgLTc1LjV0MTQ3LjUgNC41cTcwIDIzIDExMS41IDYzLjV0NDEuNSA5NS41djg4MXEwIDEwIC03IDE1LjV0LTE3IDIuNWwtNzUyIC0xOTNxLTEwIC0zIC0xNyAtMTIuNXQtNyAtMTkuNXYtNjg5cS02NCAxNyAtMTM4IC03IHEtNzkgLTI1IC0xMjIuNSAtODJ0LTI1LjUgLTExMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMzsiIGQ9Ik0yMyA2OTNxMCAyMDAgMTQyIDM0MnQzNDIgMTQydDM0MiAtMTQydDE0MiAtMzQycTAgLTE0MiAtNzggLTI2MWwzMDAgLTMwMHE3IC04IDcgLTE4dC03IC0xOGwtMTA5IC0xMDlxLTggLTcgLTE4IC03dC0xOCA3bC0zMDAgMzAwcS0xMTkgLTc4IC0yNjEgLTc4cS0yMDAgMCAtMzQyIDE0MnQtMTQyIDM0MnpNMTc2IDY5M3EwIC0xMzYgOTcgLTIzM3QyMzQgLTk3dDIzMy41IDk2LjV0OTYuNSAyMzMuNXQtOTYuNSAyMzMuNXQtMjMzLjUgOTYuNSB0LTIzNCAtOTd0LTk3IC0yMzN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNMTAwIDc4NHEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQuNSA2NHQxMTkgMjAuNXQxMjAgLTM4LjV0MTA0LjUgLTEwNC41cTQ4IDY5IDEwOS41IDEwNXQxMjEuNSAzOHQxMTguNSAtMjAuNXQxMDIuNSAtNjR0NzEgLTEwMC41dDI3IC0xMjNxMCAtNTcgLTMzLjUgLTExNy41dC05NCAtMTI0LjV0LTEyNi41IC0xMjcuNXQtMTUwIC0xNTIuNXQtMTQ2IC0xNzRxLTYyIDg1IC0xNDUuNSAxNzR0LTE0OS41IDE1Mi41dC0xMjYuNSAxMjcuNSB0LTk0IDEyNC41dC0zMy41IDExNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA2OyIgZD0iTS03MiA4MDBoNDc5bDE0NiA0MDBoMmwxNDYgLTQwMGg0NzJsLTM4MiAtMjc4bDE0NSAtNDQ5bC0zODQgMjc1bC0zODIgLTI3NWwxNDYgNDQ3ek0xNjggNzFsMiAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA3OyIgZD0iTS03MiA4MDBoNDc5bDE0NiA0MDBoMmwxNDYgLTQwMGg0NzJsLTM4MiAtMjc4bDE0NSAtNDQ5bC0zODQgMjc1bC0zODIgLTI3NWwxNDYgNDQ3ek0xNjggNzFsMiAxek0yMzcgNzAwbDE5NiAtMTQybC03MyAtMjI2bDE5MiAxNDBsMTk1IC0xNDFsLTc0IDIyOWwxOTMgMTQwaC0yMzVsLTc3IDIxMWwtNzggLTIxMWgtMjM5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA4OyIgZD0iTTAgMHYxNDNsNDAwIDI1N3YxMDBxLTM3IDAgLTY4LjUgNzQuNXQtMzEuNSAxMjUuNXYyMDBxMCAxMjQgODggMjEydDIxMiA4OHQyMTIgLTg4dDg4IC0yMTJ2LTIwMHEwIC01MSAtMzEuNSAtMTI1LjV0LTY4LjUgLTc0LjV2LTEwMGw0MDAgLTI1N3YtMTQzaC0xMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA5OyIgZD0iTTAgMHYxMTAwaDEyMDB2LTExMDBoLTEyMDB6TTEwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA1MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA3MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTMwMCAxMDBoNjAwdjQwMGgtNjAwdi00MDB6TTMwMCA2MDBoNjAwdjQwMGgtNjAwdi00MDB6TTEwMDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAweiBNMTAwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMDAgNTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAwIDcwMGgxMDB2MTAwaC0xMDB2LTEwMHpNMTAwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNMCA1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDY1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDUwdjQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCA2NTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTE7IiBkPSJNMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTgwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTI7IiBkPSJNMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDQ1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYyMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTIwMHpNMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTM7IiBkPSJNMjkgNDU0bDQxOSAtNDIwbDgxOCA4MjBsLTIxMiAyMTJsLTYwNyAtNjA3bC0yMDYgMjA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE0OyIgZD0iTTEwNiAzMThsMjgyIDI4MmwtMjgyIDI4MmwyMTIgMjEybDI4MiAtMjgybDI4MiAyODJsMjEyIC0yMTJsLTI4MiAtMjgybDI4MiAtMjgybC0yMTIgLTIxMmwtMjgyIDI4MmwtMjgyIC0yODJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNMjMgNjkzcTAgMjAwIDE0MiAzNDJ0MzQyIDE0MnQzNDIgLTE0MnQxNDIgLTM0MnEwIC0xNDIgLTc4IC0yNjFsMzAwIC0zMDBxNyAtOCA3IC0xOHQtNyAtMThsLTEwOSAtMTA5cS04IC03IC0xOCAtN3QtMTggN2wtMzAwIDMwMHEtMTE5IC03OCAtMjYxIC03OHEtMjAwIDAgLTM0MiAxNDJ0LTE0MiAzNDJ6TTE3NiA2OTNxMCAtMTM2IDk3IC0yMzN0MjM0IC05N3QyMzMuNSA5Ni41dDk2LjUgMjMzLjV0LTk2LjUgMjMzLjV0LTIzMy41IDk2LjUgdC0yMzQgLTk3dC05NyAtMjMzek0zMDAgNjAwdjIwMGgxMDB2MTAwaDIwMHYtMTAwaDEwMHYtMjAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE2OyIgZD0iTTIzIDY5NHEwIDIwMCAxNDIgMzQydDM0MiAxNDJ0MzQyIC0xNDJ0MTQyIC0zNDJxMCAtMTQxIC03OCAtMjYybDMwMCAtMjk5cTcgLTcgNyAtMTh0LTcgLTE4bC0xMDkgLTEwOXEtOCAtOCAtMTggLTh0LTE4IDhsLTMwMCAyOTlxLTEyMCAtNzcgLTI2MSAtNzdxLTIwMCAwIC0zNDIgMTQydC0xNDIgMzQyek0xNzYgNjk0cTAgLTEzNiA5NyAtMjMzdDIzNCAtOTd0MjMzLjUgOTd0OTYuNSAyMzN0LTk2LjUgMjMzdC0yMzMuNSA5N3QtMjM0IC05NyB0LTk3IC0yMzN6TTMwMCA2MDFoNDAwdjIwMGgtNDAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTc7IiBkPSJNMjMgNjAwcTAgMTgzIDEwNSAzMzF0MjcyIDIxMHYtMTY2cS0xMDMgLTU1IC0xNjUgLTE1NXQtNjIgLTIyMHEwIC0xNzcgMTI1IC0zMDJ0MzAyIC0xMjV0MzAyIDEyNXQxMjUgMzAycTAgMTIwIC02MiAyMjB0LTE2NSAxNTV2MTY2cTE2NyAtNjIgMjcyIC0yMTB0MTA1IC0zMzFxMCAtMTE4IC00NS41IC0yMjQuNXQtMTIzIC0xODR0LTE4NCAtMTIzdC0yMjQuNSAtNDUuNXQtMjI0LjUgNDUuNXQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjQuNSB6TTUwMCA3NTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDEwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2NDAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxODsiIGQ9Ik0xMDAgMWgyMDB2MzAwaC0yMDB2LTMwMHpNNDAwIDF2NTAwaDIwMHYtNTAwaC0yMDB6TTcwMCAxdjgwMGgyMDB2LTgwMGgtMjAwek0xMDAwIDF2MTIwMGgyMDB2LTEyMDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxOTsiIGQ9Ik0yNiA2MDFxMCAtMzMgNiAtNzRsMTUxIC0zOGwyIC02cTE0IC00OSAzOCAtOTNsMyAtNWwtODAgLTEzNHE0NSAtNTkgMTA1IC0xMDVsMTMzIDgxbDUgLTNxNDUgLTI2IDk0IC0zOWw1IC0ybDM4IC0xNTFxNDAgLTUgNzQgLTVxMjcgMCA3NCA1bDM4IDE1MWw2IDJxNDYgMTMgOTMgMzlsNSAzbDEzNCAtODFxNTYgNDQgMTA0IDEwNWwtODAgMTM0bDMgNXEyNCA0NCAzOSA5M2wxIDZsMTUyIDM4cTUgNDAgNSA3NHEwIDI4IC01IDczbC0xNTIgMzggbC0xIDZxLTE2IDUxIC0zOSA5M2wtMyA1bDgwIDEzNHEtNDQgNTggLTEwNCAxMDVsLTEzNCAtODFsLTUgM3EtNDUgMjUgLTkzIDM5bC02IDFsLTM4IDE1MnEtNDAgNSAtNzQgNXEtMjcgMCAtNzQgLTVsLTM4IC0xNTJsLTUgLTFxLTUwIC0xNCAtOTQgLTM5bC01IC0zbC0xMzMgODFxLTU5IC00NyAtMTA1IC0xMDVsODAgLTEzNGwtMyAtNXEtMjUgLTQ3IC0zOCAtOTNsLTIgLTZsLTE1MSAtMzhxLTYgLTQ4IC02IC03M3pNMzg1IDYwMSBxMCA4OCA2MyAxNTF0MTUyIDYzdDE1MiAtNjN0NjMgLTE1MXEwIC04OSAtNjMgLTE1MnQtMTUyIC02M3QtMTUyIDYzdC02MyAxNTJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNMTAwIDEwMjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgyNzVxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMSAtNyAtMTh0LTE4IC03aC0xMDUwcS0xMSAwIC0xOCA3dC03IDE4ek0yMDAgMTAwdjgwMGg5MDB2LTgwMHEwIC00MSAtMjkuNSAtNzF0LTcwLjUgLTMwaC03MDBxLTQxIDAgLTcwLjUgMzAgdC0yOS41IDcxek0zMDAgMTAwaDEwMHY3MDBoLTEwMHYtNzAwek01MDAgMTAwaDEwMHY3MDBoLTEwMHYtNzAwek01MDAgMTEwMGgzMDB2MTAwaC0zMDB2LTEwMHpNNzAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNOTAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xIDYwMWw2NTYgNjQ0bDY0NCAtNjQ0aC0yMDB2LTYwMGgtMzAwdjQwMGgtMzAwdi00MDBoLTMwMHY2MDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMjsiIGQ9Ik0xMDAgMjV2MTE1MHEwIDExIDcgMTh0MTggN2g0NzV2LTUwMGg0MDB2LTY3NXEwIC0xMSAtNyAtMTh0LTE4IC03aC04NTBxLTExIDAgLTE4IDd0LTcgMTh6TTcwMCA4MDB2MzAwbDMwMCAtMzAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek01MDAgNTAwdjQwMGgxMDAgdi0zMDBoMjAwdi0xMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNDsiIGQ9Ik0tMTAwIDBsNDMxIDEyMDBoMjA5bC0yMSAtMzAwaDE2MmwtMjAgMzAwaDIwOGw0MzEgLTEyMDBoLTUzOGwtNDEgNDAwaC0yNDJsLTQwIC00MDBoLTUzOXpNNDg4IDUwMGgyMjRsLTI3IDMwMGgtMTcweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTAgMHY0MDBoNDkwbC0yOTAgMzAwaDIwMHY1MDBoMzAwdi01MDBoMjAwbC0yOTAgLTMwMGg0OTB2LTQwMGgtMTEwMHpNODEzIDIwMGgxNzV2MTAwaC0xNzV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNjsiIGQ9Ik0xIDYwMHEwIDEyMiA0Ny41IDIzM3QxMjcuNSAxOTF0MTkxIDEyNy41dDIzMyA0Ny41dDIzMyAtNDcuNXQxOTEgLTEyNy41dDEyNy41IC0xOTF0NDcuNSAtMjMzdC00Ny41IC0yMzN0LTEyNy41IC0xOTF0LTE5MSAtMTI3LjV0LTIzMyAtNDcuNXQtMjMzIDQ3LjV0LTE5MSAxMjcuNXQtMTI3LjUgMTkxdC00Ny41IDIzM3pNMTg4IDYwMHEwIC0xNzAgMTIxIC0yOTF0MjkxIC0xMjF0MjkxIDEyMXQxMjEgMjkxdC0xMjEgMjkxdC0yOTEgMTIxIHQtMjkxIC0xMjF0LTEyMSAtMjkxek0zNTAgNjAwaDE1MHYzMDBoMjAwdi0zMDBoMTUwbC0yNTAgLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTM1MCA2MDBsMjUwIDMwMCBsMjUwIC0zMDBoLTE1MHYtMzAwaC0yMDB2MzAwaC0xNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjg7IiBkPSJNMCAyNXY0NzVsMjAwIDcwMGg4MDBxMTk5IC03MDAgMjAwIC03MDB2LTQ3NXEwIC0xMSAtNyAtMTh0LTE4IC03aC0xMTUwcS0xMSAwIC0xOCA3dC03IDE4ek0yMDAgNTAwaDIwMGw1MCAtMjAwaDMwMGw1MCAyMDBoMjAwbC05NyA1MDBoLTYwNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyOTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcyIDEyMS41IC0yOTN0MjkyLjUgLTEyMXQyOTIuNSAxMjF0MTIxLjUgMjkzcTAgMTcxIC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek01MDAgMzk3djQwMSBsMjk3IC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzA7IiBkPSJNMjMgNjAwcTAgLTExOCA0NS41IC0yMjQuNXQxMjMgLTE4NHQxODQgLTEyM3QyMjQuNSAtNDUuNXQyMjQuNSA0NS41dDE4NCAxMjN0MTIzIDE4NHQ0NS41IDIyNC41aC0xNTBxMCAtMTc3IC0xMjUgLTMwMnQtMzAyIC0xMjV0LTMwMiAxMjV0LTEyNSAzMDJ0MTI1IDMwMnQzMDIgMTI1cTEzNiAwIDI0NiAtODFsLTE0NiAtMTQ2aDQwMHY0MDBsLTE0NSAtMTQ1cS0xNTcgMTIyIC0zNTUgMTIycS0xMTggMCAtMjI0LjUgLTQ1LjV0LTE4NCAtMTIzIHQtMTIzIC0xODR0LTQ1LjUgLTIyNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTIzIDYwMHEwIDExOCA0NS41IDIyNC41dDEyMyAxODR0MTg0IDEyM3QyMjQuNSA0NS41cTE5OCAwIDM1NSAtMTIybDE0NSAxNDV2LTQwMGgtNDAwbDE0NyAxNDdxLTExMiA4MCAtMjQ3IDgwcS0xNzcgMCAtMzAyIC0xMjV0LTEyNSAtMzAyaC0xNTB6TTEwMCAwdjQwMGg0MDBsLTE0NyAtMTQ3cTExMiAtODAgMjQ3IC04MHExNzcgMCAzMDIgMTI1dDEyNSAzMDJoMTUwcTAgLTExOCAtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyMyB0LTIyNC41IC00NS41cS0xOTggMCAtMzU1IDEyMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMjsiIGQ9Ik0xMDAgMGgxMTAwdjEyMDBoLTExMDB2LTEyMDB6TTIwMCAxMDB2OTAwaDkwMHYtOTAwaC05MDB6TTMwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA0MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA2MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA4MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAyMDBoNTAwdjEwMGgtNTAwdi0xMDB6TTUwMCA0MDB2MTAwaDUwMHYtMTAwaC01MDB6TTUwMCA2MDB2MTAwaDUwMHYtMTAwaC01MDB6IE01MDAgODAwdjEwMGg1MDB2LTEwMGgtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMzOyIgZD0iTTAgMTAwdjYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwdjIwMHEwIDgyIDU5IDE0MXQxNDEgNTloMzAwcTgyIDAgMTQxIC01OXQ1OSAtMTQxdi0yMDBoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTkwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTQwMCA4MDBoMzAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMjAwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM0OyIgZD0iTTEwMCAwdjExMDBoMTAwdi0xMTAwaC0xMDB6TTMwMCA0MDBxNjAgNjAgMTI3LjUgODR0MTI3LjUgMTcuNXQxMjIgLTIzdDExOSAtMzB0MTEwIC0xMXQxMDMgNDJ0OTEgMTIwLjV2NTAwcS00MCAtODEgLTEwMS41IC0xMTUuNXQtMTI3LjUgLTI5LjV0LTEzOCAyNXQtMTM5LjUgNDB0LTEyNS41IDI1dC0xMDMgLTI5LjV0LTY1IC0xMTUuNXYtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTAgMjc1cTAgLTExIDcgLTE4dDE4IC03aDUwcTExIDAgMTggN3Q3IDE4djMwMHEwIDEyNyA3MC41IDIzMS41dDE4NC41IDE2MS41dDI0NSA1N3QyNDUgLTU3dDE4NC41IC0xNjEuNXQ3MC41IC0yMzEuNXYtMzAwcTAgLTExIDcgLTE4dDE4IC03aDUwcTExIDAgMTggN3Q3IDE4djMwMHEwIDExNiAtNDkuNSAyMjd0LTEzMSAxOTIuNXQtMTkyLjUgMTMxdC0yMjcgNDkuNXQtMjI3IC00OS41dC0xOTIuNSAtMTMxdC0xMzEgLTE5Mi41IHQtNDkuNSAtMjI3di0zMDB6TTIwMCAyMHY0NjBxMCA4IDYgMTR0MTQgNmgxNjBxOCAwIDE0IC02dDYgLTE0di00NjBxMCAtOCAtNiAtMTR0LTE0IC02aC0xNjBxLTggMCAtMTQgNnQtNiAxNHpNODAwIDIwdjQ2MHEwIDggNiAxNHQxNCA2aDE2MHE4IDAgMTQgLTZ0NiAtMTR2LTQ2MHEwIC04IC02IC0xNHQtMTQgLTZoLTE2MHEtOCAwIC0xNCA2dC02IDE0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM2OyIgZD0iTTAgNDAwaDMwMGwzMDAgLTIwMHY4MDBsLTMwMCAtMjAwaC0zMDB2LTQwMHpNNjg4IDQ1OWwxNDEgMTQxbC0xNDEgMTQxbDcxIDcxbDE0MSAtMTQxbDE0MSAxNDFsNzEgLTcxbC0xNDEgLTE0MWwxNDEgLTE0MWwtNzEgLTcxbC0xNDEgMTQxbC0xNDEgLTE0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0wIDQwMGgzMDBsMzAwIC0yMDB2ODAwbC0zMDAgLTIwMGgtMzAwdi00MDB6TTcwMCA4NTdsNjkgNTNxMTExIC0xMzUgMTExIC0zMTBxMCAtMTY5IC0xMDYgLTMwMmwtNjcgNTRxODYgMTEwIDg2IDI0OHEwIDE0NiAtOTMgMjU3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM4OyIgZD0iTTAgNDAxdjQwMGgzMDBsMzAwIDIwMHYtODAwbC0zMDAgMjAwaC0zMDB6TTcwMiA4NThsNjkgNTNxMTExIC0xMzUgMTExIC0zMTBxMCAtMTcwIC0xMDYgLTMwM2wtNjcgNTVxODYgMTEwIDg2IDI0OHEwIDE0NSAtOTMgMjU3ek04ODkgOTUxbDcgLThxMTIzIC0xNTEgMTIzIC0zNDRxMCAtMTg5IC0xMTkgLTMzOWwtNyAtOGw4MSAtNjZsNiA4cTE0MiAxNzggMTQyIDQwNXEwIDIzMCAtMTQ0IDQwOGwtNiA4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTAgMGg1MDB2NTAwaC0yMDB2MTAwaC0xMDB2LTEwMGgtMjAwdi01MDB6TTAgNjAwaDEwMHYxMDBoNDAwdjEwMGgxMDB2MTAwaC0xMDB2MzAwaC01MDB2LTYwMHpNMTAwIDEwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMTAwIDgwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMjAwIDIwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMjAwIDkwMGgxMDB2MTAwaC0xMDB2LTEwMHpNNTAwIDUwMHYxMDBoMzAwdi0zMDBoMjAwdi0xMDBoLTEwMHYtMTAwaC0yMDB2MTAwIGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB6TTYwMCAwdjEwMGgxMDB2LTEwMGgtMTAwek02MDAgMTAwMGgxMDB2LTMwMGgyMDB2LTMwMGgzMDB2MjAwaC0yMDB2MTAwaDIwMHY1MDBoLTYwMHYtMjAwek04MDAgODAwdjMwMGgzMDB2LTMwMGgtMzAwek05MDAgMHYxMDBoMzAwdi0xMDBoLTMwMHpNOTAwIDkwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTEwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDA7IiBkPSJNMCAyMDBoMTAwdjEwMDBoLTEwMHYtMTAwMHpNMTAwIDB2MTAwaDMwMHYtMTAwaC0zMDB6TTIwMCAyMDB2MTAwMGgxMDB2LTEwMDBoLTEwMHpNNTAwIDB2OTFoMTAwdi05MWgtMTAwek01MDAgMjAwdjEwMDBoMjAwdi0xMDAwaC0yMDB6TTcwMCAwdjkxaDEwMHYtOTFoLTEwMHpNODAwIDIwMHYxMDAwaDEwMHYtMTAwMGgtMTAwek05MDAgMHY5MWgyMDB2LTkxaC0yMDB6TTEwMDAgMjAwdjEwMDBoMjAwdi0xMDAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNMSA3MDB2NDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNDc0bDcwMCAtNzAwbC01MDAgLTUwMHpNMTQ4IDk1M3EwIC00MiAyOSAtNzFxMzAgLTMwIDcxLjUgLTMwdDcxLjUgMzBxMjkgMjkgMjkgNzF0LTI5IDcxcS0zMCAzMCAtNzEuNSAzMHQtNzEuNSAtMzBxLTI5IC0yOSAtMjkgLTcxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTIgNzAwdjQ3NXEwIDExIDcgMTh0MTggN2g0NzRsNzAwIC03MDBsLTUwMCAtNTAwek0xNDggOTUzcTAgLTQyIDMwIC03MXEyOSAtMzAgNzEgLTMwdDcxIDMwcTMwIDI5IDMwIDcxdC0zMCA3MXEtMjkgMzAgLTcxIDMwdC03MSAtMzBxLTMwIC0yOSAtMzAgLTcxek03MDEgMTIwMGgxMDBsNzAwIC03MDBsLTUwMCAtNTAwbC01MCA1MGw0NTAgNDUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTEwMCAwdjEwMjVsMTc1IDE3NWg5MjV2LTEwMDBsLTEwMCAtMTAwdjEwMDBoLTc1MGwtMTAwIC0xMDBoNzUwdi0xMDAwaC05MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDQ7IiBkPSJNMjAwIDBsNDUwIDQ0NGw0NTAgLTQ0M3YxMTUwcTAgMjAgLTE0LjUgMzV0LTM1LjUgMTVoLTgwMHEtMjEgMCAtMzUuNSAtMTV0LTE0LjUgLTM1di0xMTUxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ1OyIgZD0iTTAgMTAwdjcwMGgyMDBsMTAwIC0yMDBoNjAwbDEwMCAyMDBoMjAwdi03MDBoLTIwMHYyMDBoLTgwMHYtMjAwaC0yMDB6TTI1MyA4MjlsNDAgLTEyNGg1OTJsNjIgMTI0bC05NCAzNDZxLTIgMTEgLTEwIDE4dC0xOCA3aC00NTBxLTEwIDAgLTE4IC03dC0xMCAtMTh6TTI4MSAyNGwzOCAxNTJxMiAxMCAxMS41IDE3dDE5LjUgN2g1MDBxMTAgMCAxOS41IC03dDExLjUgLTE3bDM4IC0xNTJxMiAtMTAgLTMuNSAtMTd0LTE1LjUgLTdoLTYwMCBxLTEwIDAgLTE1LjUgN3QtMy41IDE3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ2OyIgZD0iTTAgMjAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWgxMDAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTE1MHEtNCA4IC0xMS41IDIxLjV0LTMzIDQ4dC01MyA2MXQtNjkgNDh0LTgzLjUgMjEuNWgtMjAwcS00MSAwIC04MiAtMjAuNXQtNzAgLTUwdC01MiAtNTl0LTM0IC01MC41bC0xMiAtMjBoLTE1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNjAweiBNMzU2IDUwMHEwIDEwMCA3MiAxNzJ0MTcyIDcydDE3MiAtNzJ0NzIgLTE3MnQtNzIgLTE3MnQtMTcyIC03MnQtMTcyIDcydC03MiAxNzJ6TTQ5NCA1MDBxMCAtNDQgMzEgLTc1dDc1IC0zMXQ3NSAzMXQzMSA3NXQtMzEgNzV0LTc1IDMxdC03NSAtMzF0LTMxIC03NXpNOTAwIDcwMHYxMDBoMTAwdi0xMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik01MyAwaDM2NXY2NnEtNDEgMCAtNzIgMTF0LTQ5IDM4dDEgNzFsOTIgMjM0aDM5MWw4MiAtMjIycTE2IC00NSAtNS41IC04OC41dC03NC41IC00My41di02Nmg0MTd2NjZxLTM0IDEgLTc0IDQzcS0xOCAxOSAtMzMgNDJ0LTIxIDM3bC02IDEzbC0zODUgOTk4aC05M2wtMzk5IC0xMDA2cS0yNCAtNDggLTUyIC03NXEtMTIgLTEyIC0zMyAtMjV0LTM2IC0yMGwtMTUgLTd2LTY2ek00MTYgNTIxbDE3OCA0NTdsNDYgLTE0MGwxMTYgLTMxN2gtMzQwIHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0ODsiIGQ9Ik0xMDAgMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjggLTEgMzkuNXQtNS41IDI2dC0xNS41IDIxdC0yOSAxNHQtNDkgMTQuNXY3MGg0NzFxMTIwIDAgMjEzIC04OHQ5MyAtMjI4cTAgLTU1IC0xMS41IC0xMDEuNXQtMjggLTc0dC0zMy41IC00Ny41dC0yOCAtMjhsLTEyIC03cTggLTMgMjEuNSAtOXQ0OCAtMzEuNXQ2MC41IC01OHQ0Ny41IC05MS41dDIxLjUgLTEyOXEwIC04NCAtNTkgLTE1Ni41dC0xNDIgLTExMSB0LTE2MiAtMzguNWgtNTAwek00MDAgMjAwaDE2MXE4OSAwIDE1MyA0OC41dDY0IDEzMi41cTAgOTAgLTYyLjUgMTU0LjV0LTE1Ni41IDY0LjVoLTE1OXYtNDAwek00MDAgNzAwaDEzOXE3NiAwIDEzMCA2MS41dDU0IDEzOC41cTAgODIgLTg0IDEzMC41dC0yMzkgNDguNXYtMzc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTIwMCAwdjU3cTc3IDcgMTM0LjUgNDAuNXQ2NS41IDgwLjVsMTczIDg0OXExMCA1NiAtMTAgNzR0LTkxIDM3cS02IDEgLTEwLjUgMi41dC05LjUgMi41djU3aDQyNWwyIC01N3EtMzMgLTggLTYyIC0yNS41dC00NiAtMzd0LTI5LjUgLTM4dC0xNy41IC0zMC41bC01IC0xMmwtMTI4IC04MjVxLTEwIC01MiAxNCAtODJ0OTUgLTM2di01N2gtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTS03NSAyMDBoNzV2ODAwaC03NWwxMjUgMTY3bDEyNSAtMTY3aC03NXYtODAwaDc1bC0xMjUgLTE2N3pNMzAwIDkwMHYzMDBoMTUwaDcwMGgxNTB2LTMwMGgtNTBxMCAyOSAtOCA0OC41dC0xOC41IDMwdC0zMy41IDE1dC0zOS41IDUuNXQtNTAuNSAxaC0yMDB2LTg1MGwxMDAgLTUwdi0xMDBoLTQwMHYxMDBsMTAwIDUwdjg1MGgtMjAwcS0zNCAwIC01MC41IC0xdC00MCAtNS41dC0zMy41IC0xNXQtMTguNSAtMzB0LTguNSAtNDguNWgtNDl6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUxOyIgZD0iTTMzIDUxbDE2NyAxMjV2LTc1aDgwMHY3NWwxNjcgLTEyNWwtMTY3IC0xMjV2NzVoLTgwMHYtNzV6TTEwMCA5MDF2MzAwaDE1MGg3MDBoMTUwdi0zMDBoLTUwcTAgMjkgLTggNDguNXQtMTggMzB0LTMzLjUgMTV0LTQwIDUuNXQtNTAuNSAxaC0yMDB2LTY1MGwxMDAgLTUwdi0xMDBoLTQwMHYxMDBsMTAwIDUwdjY1MGgtMjAwcS0zNCAwIC01MC41IC0xdC0zOS41IC01LjV0LTMzLjUgLTE1dC0xOC41IC0zMHQtOCAtNDguNWgtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTI7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg4MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC04MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjUgdi0xMDB6TTAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDEwMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMDAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTAgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTYwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0wIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDExMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDExMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41IHYtMTAwek0yMDAgMzUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDcwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTcwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0yMDAgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDcwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTcwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NDsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTEwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTMwMCAzNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC02MDAgcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMCAzNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDAgcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU2OyIgZD0iTTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1IHQtMTQuNSAzNXpNMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1IHQtMTQuNSAzNXpNMzAwIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwIHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTUgaC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNLTEwMSA1MDB2MTAwaDIwMXY3NWwxNjYgLTEyNWwtMTY2IC0xMjV2NzVoLTIwMXpNMzAwIDBoMTAwdjExMDBoLTEwMHYtMTEwMHpNNTAwIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgzMDBxMjAgMCAzNSAxNXQxNSAzNSB2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek01MDAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDUwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC01MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDAgcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU4OyIgZD0iTTEgNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoNjAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTYwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0xIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgzMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtMzAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTEgNjUwIHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg1MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTEgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDEwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNODAxIDB2MTEwMGgxMDB2LTExMDAgaC0xMDB6TTkzNCA1NTBsMTY3IC0xMjV2NzVoMjAwdjEwMGgtMjAwdjc1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU5OyIgZD0iTTAgMjc1djY1MHEwIDMxIDIyIDUzdDUzIDIyaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzek05MDAgNjAwbDMwMCAzMDB2LTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik0wIDQ0djEwMTJxMCAxOCAxMyAzMXQzMSAxM2gxMTEycTE5IDAgMzEuNSAtMTN0MTIuNSAtMzF2LTEwMTJxMCAtMTggLTEyLjUgLTMxdC0zMS41IC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxek0xMDAgMjYzbDI0NyAxODJsMjk4IC0xMzFsLTc0IDE1NmwyOTMgMzE4bDIzNiAtMjg4djUwMGgtMTAwMHYtNzM3ek0yMDggNzUwcTAgNTYgMzkgOTV0OTUgMzl0OTUgLTM5dDM5IC05NXQtMzkgLTk1dC05NSAtMzl0LTk1IDM5dC0zOSA5NXogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNMTQ4IDc0NXEwIDEyNCA2MC41IDIzMS41dDE2NSAxNzJ0MjI2LjUgNjQuNXExMjMgMCAyMjcgLTYzdDE2NC41IC0xNjkuNXQ2MC41IC0yMjkuNXQtNzMgLTI3MnEtNzMgLTExNCAtMTY2LjUgLTIzN3QtMTUwLjUgLTE4OWwtNTcgLTY2cS0xMCA5IC0yNyAyNnQtNjYuNSA3MC41dC05NiAxMDl0LTEwNCAxMzUuNXQtMTAwLjUgMTU1cS02MyAxMzkgLTYzIDI2MnpNMzQyIDc3MnEwIC0xMDcgNzUuNSAtMTgyLjV0MTgxLjUgLTc1LjUgcTEwNyAwIDE4Mi41IDc1LjV0NzUuNSAxODIuNXQtNzUuNSAxODJ0LTE4Mi41IDc1dC0xODIgLTc1LjV0LTc1IC0xODEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MzsiIGQ9Ik0xIDYwMHEwIDEyMiA0Ny41IDIzM3QxMjcuNSAxOTF0MTkxIDEyNy41dDIzMyA0Ny41dDIzMyAtNDcuNXQxOTEgLTEyNy41dDEyNy41IC0xOTF0NDcuNSAtMjMzdC00Ny41IC0yMzN0LTEyNy41IC0xOTF0LTE5MSAtMTI3LjV0LTIzMyAtNDcuNXQtMjMzIDQ3LjV0LTE5MSAxMjcuNXQtMTI3LjUgMTkxdC00Ny41IDIzM3pNMTczIDYwMHEwIC0xNzcgMTI1LjUgLTMwMnQzMDEuNSAtMTI1djg1NHEtMTc2IDAgLTMwMS41IC0xMjUgdC0xMjUuNSAtMzAyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY0OyIgZD0iTTExNyA0MDZxMCA5NCAzNCAxODZ0ODguNSAxNzIuNXQxMTIgMTU5dDExNSAxNzd0ODcuNSAxOTQuNXEyMSAtNzEgNTcuNSAtMTQyLjV0NzYgLTEzMC41dDgzIC0xMTguNXQ4MiAtMTE3dDcwIC0xMTZ0NTAgLTEyNS41dDE4LjUgLTEzNnEwIC04OSAtMzkgLTE2NS41dC0xMDIgLTEyNi41dC0xNDAgLTc5LjV0LTE1NiAtMzMuNXEtMTE0IDYgLTIxMS41IDUzdC0xNjEuNSAxMzguNXQtNjQgMjEwLjV6TTI0MyA0MTRxMTQgLTgyIDU5LjUgLTEzNiB0MTM2LjUgLTgwbDE2IDk4cS03IDYgLTE4IDE3dC0zNCA0OHQtMzMgNzdxLTE1IDczIC0xNCAxNDMuNXQxMCAxMjIuNWw5IDUxcS05MiAtMTEwIC0xMTkuNSAtMTg1dC0xMi41IC0xNTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41cTM2NiAtNiAzOTcgLTE0bC0xODYgLTE4NmgtMzExcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTI1bDIwMCAyMDB2LTIyNXEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNSB0LTExNy41IDI4Mi41ek00MzYgMzQxbDE2MSA1MGw0MTIgNDEybC0xMTQgMTEzbC00MDUgLTQwNXpNOTk1IDEwMTVsMTEzIC0xMTNsMTEzIDExM2wtMjEgODVsLTkyIDI4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgyNjFsMiAtODBxLTEzMyAtMzIgLTIxOCAtMTIwaC0xNDVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi01M3EwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjUgek00MjMgNTI0cTMwIDM4IDgxLjUgNjR0MTAzIDM1LjV0OTkgMTR0NzcuNSAzLjVsMjkgLTF2LTIwOWwzNjAgMzI0bC0zNTkgMzE4di0yMTZxLTcgMCAtMTkgLTF0LTQ4IC04dC02OS41IC0xOC41dC03Ni41IC0zN3QtNzYuNSAtNTl0LTYyIC04OHQtMzkuNSAtMTIxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjc7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41aDMwMHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0xNjlxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjUgdC0xMTcuNSAyODIuNXpNMzQyIDYzMmwyODMgLTI4NGw1NjYgNTY3bC0xMzYgMTM3bC00MzAgLTQzMWwtMTQ3IDE0N3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2ODsiIGQ9Ik0wIDYwM2wzMDAgMjk2di0xOThoMjAwdjIwMGgtMjAwbDMwMCAzMDBsMjk1IC0zMDBoLTE5NXYtMjAwaDIwMHYxOThsMzAwIC0yOTZsLTMwMCAtMzAwdjE5OGgtMjAwdi0yMDBoMTk1bC0yOTUgLTMwMGwtMzAwIDMwMGgyMDB2MjAwaC0yMDB2LTE5OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2OTsiIGQ9Ik0yMDAgNTB2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzdsNTAwIDQ4N3YtMTEwMGwtNTAwIDQ4OHYtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTAgNTB2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzdsNTAwIDQ4N3YtNDg3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQ4OGwtNTAwIDQ4OHYtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEzNiA1NTBsNTY0IDU1MHYtNDg3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQ4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yMDAgMGw5MDAgNTUwbC05MDAgNTUwdi0xMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTIwMCAxNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHpNNjAwIDE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXY4MDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NDsiIGQ9Ik0yMDAgMTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDgwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXY4MDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTgwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtODAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTAgMHYxMTAwbDUwMCAtNDg3djQ4N2w1NjQgLTU1MGwtNTY0IC01NTB2NDg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc2OyIgZD0iTTAgMHYxMTAwbDUwMCAtNDg3djQ4N2w1MDAgLTQ4N3Y0MzdxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MzhsLTUwMCAtNDg4djQ4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik0zMDAgMHYxMTAwbDUwMCAtNDg3djQzN3EwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQzOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3ODsiIGQ9Ik0xMDAgMjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDUwMGgxMTAwbC01NTAgNTY0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTE4NSA1OTlsNTkyIC01OTJsMjQwIDI0MGwtMzUzIDM1M2wzNTMgMzUzbC0yNDAgMjQweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgwOyIgZD0iTTI3MiAxOTRsMzUzIDM1M2wtMzUzIDM1M2wyNDEgMjQwbDU3MiAtNTcxbDIxIC0yMmwtMSAtMXYtMWwtNTkyIC01OTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODE7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek0zMDAgNTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdjIwMGgtMjAwdjIwMGgtMjAwdi0yMDBoLTIwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgyOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMzAwIDUwMGg2MDB2MjAwaC02MDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MzsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTI0NiA0NTlsMjEzIC0yMTNsMTQxIDE0MmwxNDEgLTE0MmwyMTMgMjEzbC0xNDIgMTQxbDE0MiAxNDFsLTIxMyAyMTJsLTE0MSAtMTQxbC0xNDEgMTQybC0yMTIgLTIxM2wxNDEgLTE0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxNy41dC04MCAyOTkuNXpNMjcwIDU1MWwyNzYgLTI3N2w0MTEgNDExbC0xNzUgMTc0bC0yMzYgLTIzNmwtMTAyIDEwMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NTsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTM2MyA3MDBoMTQ0cTQgMCAxMS41IC0xdDExIC0xdDYuNSAzdDMgOXQxIDExdDMuNSA4LjV0My41IDZ0NS41IDR0Ni41IDIuNXQ5IDEuNXQ5IDAuNWgxMS41aDEyLjVxMTkgMCAzMCAtMTB0MTEgLTI2IHEwIC0yMiAtNCAtMjh0LTI3IC0yMnEtNSAtMSAtMTIuNSAtM3QtMjcgLTEzLjV0LTM0IC0yN3QtMjYuNSAtNDZ0LTExIC02OC41aDIwMHE1IDMgMTQgOHQzMS41IDI1LjV0MzkuNSA0NS41dDMxIDY5dDE0IDk0cTAgNTEgLTE3LjUgODl0LTQyIDU4dC01OC41IDMydC01OC41IDE1dC01MS41IDNxLTEwNSAwIC0xNzIgLTU2dC02NyAtMTgzek01MDAgMzAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNNDAwIDMwMGg0MDB2MTAwaC0xMDB2MzAwaC0zMDB2LTEwMGgxMDB2LTIwMGgtMTAwdi0xMDB6TTUwMCA4MDBoMjAwdjEwMGgtMjAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODc7IiBkPSJNMCA1MDB2MjAwaDE5NHExNSA2MCAzNiAxMDQuNXQ1NS41IDg2dDg4IDY5dDEyNi41IDQwLjV2MjAwaDIwMHYtMjAwcTU0IC0yMCAxMTMgLTYwdDExMi41IC0xMDUuNXQ3MS41IC0xMzQuNWgyMDN2LTIwMGgtMjAzcS0yNSAtMTAyIC0xMTYuNSAtMTg2dC0xODAuNSAtMTE3di0xOTdoLTIwMHYxOTdxLTE0MCAyNyAtMjA4IDEwMi41dC05OCAyMDAuNWgtMTk0ek0yOTAgNTAwcTI0IC03MyA3OS41IC0xMjcuNXQxMzAuNSAtNzguNXYyMDZoMjAwIHYtMjA2cTE0OSA0OCAyMDEgMjA2aC0yMDF2MjAwaDIwMHEtMjUgNzQgLTc2IDEyNy41dC0xMjQgNzYuNXYtMjA0aC0yMDB2MjAzcS03NSAtMjQgLTEzMCAtNzcuNXQtNzkgLTEyNS41aDIwOXYtMjAwaC0yMTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODg7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zNTYgNDY1bDEzNSAxMzUgbC0xMzUgMTM1bDEwOSAxMDlsMTM1IC0xMzVsMTM1IDEzNWwxMDkgLTEwOWwtMTM1IC0xMzVsMTM1IC0xMzVsLTEwOSAtMTA5bC0xMzUgMTM1bC0xMzUgLTEzNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTMyMiA1MzdsMTQxIDE0MSBsODcgLTg3bDIwNCAyMDVsMTQyIC0xNDJsLTM0NiAtMzQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xMTUgNjIgLTIxNWw1NjggNTY3cS0xMDAgNjIgLTIxNiA2MnEtMTcxIDAgLTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zOTEgMjQ1cTk3IC01OSAyMDkgLTU5cTE3MSAwIDI5Mi41IDEyMS41dDEyMS41IDI5Mi41IHEwIDExMiAtNTkgMjA5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTAgNTQ3bDYwMCA0NTN2LTMwMGg2MDB2LTMwMGgtNjAwdi0zMDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNMCA0MDB2MzAwaDYwMHYzMDBsNjAwIC00NTNsLTYwMCAtNDQ4djMwMWgtNjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkzOyIgZD0iTTIwNCA2MDBsNDUwIDYwMGw0NDQgLTYwMGgtMjk4di02MDBoLTMwMHY2MDBoLTI5NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NDsiIGQ9Ik0xMDQgNjAwaDI5NnY2MDBoMzAwdi02MDBoMjk4bC00NDkgLTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik0wIDIwMHE2IDEzMiA0MSAyMzguNXQxMDMuNSAxOTN0MTg0IDEzOHQyNzEuNSA1OS41djI3MWw2MDAgLTQ1M2wtNjAwIC00NDh2MzAxcS05NSAtMiAtMTgzIC0yMHQtMTcwIC01MnQtMTQ3IC05Mi41dC0xMDAgLTEzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTAgMHY0MDBsMTI5IC0xMjlsMjk0IDI5NGwxNDIgLTE0MmwtMjk0IC0yOTRsMTI5IC0xMjloLTQwMHpNNjM1IDc3N2wxNDIgLTE0MmwyOTQgMjk0bDEyOSAtMTI5djQwMGgtNDAwbDEyOSAtMTI5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTM0IDE3NmwyOTUgMjk1bC0xMjkgMTI5aDQwMHYtNDAwbC0xMjkgMTMwbC0yOTUgLTI5NXpNNjAwIDYwMHY0MDBsMTI5IC0xMjlsMjk1IDI5NWwxNDIgLTE0MWwtMjk1IC0yOTVsMTI5IC0xMzBoLTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwMTsiIGQ9Ik0yMyA2MDBxMCAxMTggNDUuNSAyMjQuNXQxMjMgMTg0dDE4NCAxMjN0MjI0LjUgNDUuNXQyMjQuNSAtNDUuNXQxODQgLTEyM3QxMjMgLTE4NHQ0NS41IC0yMjQuNXQtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjI0LjUgLTQ1LjV0LTIyNC41IDQ1LjV0LTE4NCAxMjN0LTEyMyAxODR0LTQ1LjUgMjI0LjV6TTQ1NiA4NTFsNTggLTMwMnE0IC0yMCAyMS41IC0zNC41dDM3LjUgLTE0LjVoNTRxMjAgMCAzNy41IDE0LjUgdDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMyAxNC41aC0yMDdxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41ek01MDAgMzAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTAgODAwaDEwMHYtMjAwaDQwMHYzMDBoMjAwdi0zMDBoNDAwdjIwMGgxMDB2MTAwaC0xMTF2NnQtMSAxNXQtMyAxOGwtMzQgMTcycS0xMSAzOSAtNDEuNSA2M3QtNjkuNSAyNHEtMzIgMCAtNjEgLTE3bC0yMzkgLTE0NHEtMjIgLTEzIC00MCAtMzVxLTE5IDI0IC00MCAzNmwtMjM4IDE0NHEtMzMgMTggLTYyIDE4cS0zOSAwIC02OS41IC0yM3QtNDAuNSAtNjFsLTM1IC0xNzdxLTIgLTggLTMgLTE4dC0xIC0xNXYtNmgtMTExdi0xMDB6IE0xMDAgMGg0MDB2NDAwaC00MDB2LTQwMHpNMjAwIDkwMHEtMyAwIDE0IDQ4dDM1IDk2bDE4IDQ3bDIxNCAtMTkxaC0yODF6TTcwMCAwdjQwMGg0MDB2LTQwMGgtNDAwek03MzEgOTAwbDIwMiAxOTdxNSAtMTIgMTIgLTMyLjV0MjMgLTY0dDI1IC03MnQ3IC0yOC41aC0yNjl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDM7IiBkPSJNMCAtMjJ2MTQzbDIxNiAxOTNxLTkgNTMgLTEzIDgzdC01LjUgOTR0OSAxMTN0MzguNSAxMTR0NzQgMTI0cTQ3IDYwIDk5LjUgMTAyLjV0MTAzIDY4dDEyNy41IDQ4dDE0NS41IDM3LjV0MTg0LjUgNDMuNXQyMjAgNTguNXEwIC0xODkgLTIyIC0zNDN0LTU5IC0yNTh0LTg5IC0xODEuNXQtMTA4LjUgLTEyMHQtMTIyIC02OHQtMTI1LjUgLTMwdC0xMjEuNSAtMS41dC0xMDcuNSAxMi41dC04Ny41IDE3dC01Ni41IDcuNWwtOTkgLTU1eiBNMjM4LjUgMzAwLjVxMTkuNSAtNi41IDg2LjUgNzYuNXE1NSA2NiAzNjcgMjM0cTcwIDM4IDExOC41IDY5LjV0MTAyIDc5dDk5IDExMS41dDg2LjUgMTQ4cTIyIDUwIDI0IDYwdC02IDE5cS03IDUgLTE3IDV0LTI2LjUgLTE0LjV0LTMzLjUgLTM5LjVxLTM1IC01MSAtMTEzLjUgLTEwOC41dC0xMzkuNSAtODkuNWwtNjEgLTMycS0zNjkgLTE5NyAtNDU4IC00MDFxLTQ4IC0xMTEgLTI4LjUgLTExNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA0OyIgZD0iTTExMSA0MDhxMCAtMzMgNSAtNjNxOSAtNTYgNDQgLTExOS41dDEwNSAtMTA4LjVxMzEgLTIxIDY0IC0xNnQ2MiAyMy41dDU3IDQ5LjV0NDggNjEuNXQzNSA2MC41cTMyIDY2IDM5IDE4NC41dC0xMyAxNTcuNXE3OSAtODAgMTIyIC0xNjR0MjYgLTE4NHEtNSAtMzMgLTIwLjUgLTY5LjV0LTM3LjUgLTgwLjVxLTEwIC0xOSAtMTQuNSAtMjl0LTEyIC0yNnQtOSAtMjMuNXQtMyAtMTl0Mi41IC0xNS41dDExIC05LjV0MTkuNSAtNXQzMC41IDIuNSB0NDIgOHE1NyAyMCA5MSAzNHQ4Ny41IDQ0LjV0ODcgNjR0NjUuNSA4OC41dDQ3IDEyMnEzOCAxNzIgLTQ0LjUgMzQxLjV0LTI0Ni41IDI3OC41cTIyIC00NCA0MyAtMTI5cTM5IC0xNTkgLTMyIC0xNTRxLTE1IDIgLTMzIDlxLTc5IDMzIC0xMjAuNSAxMDB0LTQ0IDE3NS41dDQ4LjUgMjU3LjVxLTEzIC04IC0zNCAtMjMuNXQtNzIuNSAtNjYuNXQtODguNSAtMTA1LjV0LTYwIC0xMzh0LTggLTE2Ni41cTIgLTEyIDggLTQxLjV0OCAtNDN0NiAtMzkuNSB0My41IC0zOS41dC0xIC0zMy41dC02IC0zMS41dC0xMy41IC0yNHQtMjEgLTIwLjV0LTMxIC0xMnEtMzggLTEwIC02NyAxM3QtNDAuNSA2MS41dC0xNSA4MS41dDEwLjUgNzVxLTUyIC00NiAtODMuNSAtMTAxdC0zOSAtMTA3dC03LjUgLTg1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA1OyIgZD0iTS02MSA2MDBsMjYgNDBxNiAxMCAyMCAzMHQ0OSA2My41dDc0LjUgODUuNXQ5NyA5MHQxMTYuNSA4My41dDEzMi41IDU5dDE0NS41IDIzLjV0MTQ1LjUgLTIzLjV0MTMyLjUgLTU5dDExNi41IC04My41dDk3IC05MHQ3NC41IC04NS41dDQ5IC02My41dDIwIC0zMGwyNiAtNDBsLTI2IC00MHEtNiAtMTAgLTIwIC0zMHQtNDkgLTYzLjV0LTc0LjUgLTg1LjV0LTk3IC05MHQtMTE2LjUgLTgzLjV0LTEzMi41IC01OXQtMTQ1LjUgLTIzLjUgdC0xNDUuNSAyMy41dC0xMzIuNSA1OXQtMTE2LjUgODMuNXQtOTcgOTB0LTc0LjUgODUuNXQtNDkgNjMuNXQtMjAgMzB6TTEyMCA2MDBxNyAtMTAgNDAuNSAtNTh0NTYgLTc4LjV0NjggLTc3LjV0ODcuNSAtNzV0MTAzIC00OS41dDEyNSAtMjEuNXQxMjMuNSAyMHQxMDAuNSA0NS41dDg1LjUgNzEuNXQ2Ni41IDc1LjV0NTggODEuNXQ0NyA2NnEtMSAxIC0yOC41IDM3LjV0LTQyIDU1dC00My41IDUzdC01Ny41IDYzLjV0LTU4LjUgNTQgcTQ5IC03NCA0OSAtMTYzcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHQtMjEyIDg4dC04OCAyMTJxMCA4NSA0NiAxNThxLTEwMiAtODcgLTIyNiAtMjU4ek0zNzcgNjU2cTQ5IC0xMjQgMTU0IC0xOTFsMTA1IDEwNXEtMzcgMjQgLTc1IDcydC01NyA4NGwtMjAgMzZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDY7IiBkPSJNLTYxIDYwMGwyNiA0MHE2IDEwIDIwIDMwdDQ5IDYzLjV0NzQuNSA4NS41dDk3IDkwdDExNi41IDgzLjV0MTMyLjUgNTl0MTQ1LjUgMjMuNXE2MSAwIDEyMSAtMTdsMzcgMTQyaDE0OGwtMzE0IC0xMjAwaC0xNDhsMzcgMTQzcS04MiAyMSAtMTY1IDcxLjV0LTE0MCAxMDJ0LTEwOS41IDExMnQtNzIgODguNXQtMjkuNSA0M3pNMTIwIDYwMHEyMTAgLTI4MiAzOTMgLTMzNmwzNyAxNDFxLTEwNyAxOCAtMTc4LjUgMTAxLjV0LTcxLjUgMTkzLjUgcTAgODUgNDYgMTU4cS0xMDIgLTg3IC0yMjYgLTI1OHpNMzc3IDY1NnE0OSAtMTI0IDE1NCAtMTkxbDQ3IDQ3bDIzIDg3cS0zMCAyOCAtNTkgNjl0LTQ0IDY4bC0xNCAyNnpNNzgwIDE2MWwzOCAxNDVxMjIgMTUgNDQuNSAzNHQ0NiA0NHQ0MC41IDQ0dDQxIDUwLjV0MzMuNSA0My41dDMzIDQ0dDI0LjUgMzRxLTk3IDEyNyAtMTQwIDE3NWwzOSAxNDZxNjcgLTU0IDEzMS41IC0xMjUuNXQ4Ny41IC0xMDMuNXQzNiAtNTJsMjYgLTQwbC0yNiAtNDAgcS03IC0xMiAtMjUuNSAtMzh0LTYzLjUgLTc5LjV0LTk1LjUgLTEwMi41dC0xMjQgLTEwMHQtMTQ2LjUgLTc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05Ny41IDM0cTEzLjUgLTM0IDUwLjUgLTM0aDEyOTRxMzcgMCA1MC41IDM1LjV0LTcuNSA2Ny41bC02NDIgMTA1NnEtMjAgMzMgLTQ4IDM2dC00OCAtMjlsLTY0MiAtMTA2NnEtMjEgLTMyIC03LjUgLTY2ek0xNTUgMjAwbDQ0NSA3MjNsNDQ1IC03MjNoLTM0NXYxMDBoLTIwMHYtMTAwaC0zNDV6TTUwMCA2MDBsMTAwIC0zMDBsMTAwIDMwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA4OyIgZD0iTTEwMCAyNjJ2NDFxMCAyMCAxMSA0NC41dDI2IDM4LjVsMzYzIDMyNXYzMzlxMCA2MiA0NCAxMDZ0MTA2IDQ0dDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkxIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC05NCA3OGgtMjIybC05NCAtNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjQgcTAgMjIgMTAwIDExM3YyNjNsLTM1OSAtMjQ5cS0xNyAtMTIgLTI5IC01LjV0LTEyIDI2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDk7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djc1MGgtMTEwMHYtNzUwek0wIDkwMGgxMTAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTUwdjEwMGgtMTAwdi0xMDBoLTUwMHYxMDBoLTEwMHYtMTAwaC0xNTBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHpNMTAwIDEwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTAwIDMwMHYxMDBoMTAwdi0xMDBoLTEwMHogTTEwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCA1MDAgdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTEwOyIgZD0iTTAgMjAwdjIwMGgyNTlsNjAwIDYwMGgyNDF2MTk4bDMwMCAtMjk1bC0zMDAgLTMwMHYxOTdoLTE1OWwtNjAwIC02MDBoLTM0MXpNMCA4MDBoMjU5bDEyMiAtMTIybDE0MSAxNDJsLTE4MSAxODBoLTM0MXYtMjAwek02NzggMzgxbDE0MSAxNDJsMTIyIC0xMjNoMTU5djE5OGwzMDAgLTI5NWwtMzAwIC0zMDB2MTk3aC0yNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMCA0MDB2NjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTU5NmwtMzA0IC0zMDB2MzAwaC0xMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTEyOyIgZD0iTTEwMCA2MDB2MjAwaDMwMHYtMjUwcTAgLTExMyA2IC0xNDVxMTcgLTkyIDEwMiAtMTE3cTM5IC0xMSA5MiAtMTFxMzcgMCA2Ni41IDUuNXQ1MCAxNS41dDM2IDI0dDI0IDMxLjV0MTQgMzcuNXQ3IDQydDIuNSA0NXQwIDQ3djI1djI1MGgzMDB2LTIwMHEwIC00MiAtMyAtODN0LTE1IC0xMDR0LTMxLjUgLTExNnQtNTggLTEwOS41dC04OSAtOTYuNXQtMTI5IC02NS41dC0xNzQuNSAtMjUuNXQtMTc0LjUgMjUuNXQtMTI5IDY1LjV0LTg5IDk2LjUgdC01OCAxMDkuNXQtMzEuNSAxMTZ0LTE1IDEwNHQtMyA4M3pNMTAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHpNODAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExMzsiIGQ9Ik0tMzAgNDExbDIyNyAtMjI3bDM1MiAzNTNsMzUzIC0zNTNsMjI2IDIyN2wtNTc4IDU3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExNDsiIGQ9Ik03MCA3OTdsNTgwIC01NzlsNTc4IDU3OWwtMjI2IDIyN2wtMzUzIC0zNTNsLTM1MiAzNTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTU7IiBkPSJNLTE5OCA3MDBsMjk5IDI4M2wzMDAgLTI4M2gtMjAzdi00MDBoMzg1bDIxNSAtMjAwaC04MDB2NjAwaC0xOTZ6TTQwMiAxMDAwbDIxNSAtMjAwaDM4MXYtNDAwaC0xOThsMjk5IC0yODNsMjk5IDI4M2gtMjAwdjYwMGgtNzk2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE2OyIgZD0iTTE4IDkzOXEtNSAyNCAxMCA0MnExNCAxOSAzOSAxOWg4OTZsMzggMTYycTUgMTcgMTguNSAyNy41dDMwLjUgMTAuNWg5NHEyMCAwIDM1IC0xNC41dDE1IC0zNS41dC0xNSAtMzUuNXQtMzUgLTE0LjVoLTU0bC0yMDEgLTk2MXEtMiAtNCAtNiAtMTAuNXQtMTkgLTE3LjV0LTMzIC0xMWgtMzF2LTUwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTV0LTM1LjUgMTV0LTE0LjUgMzV2NTBoLTMwMHYtNTBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNSB0LTM1LjUgMTV0LTE0LjUgMzV2NTBoLTUwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1cTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MzVsNDggMjAwaC02MzNxLTMyIDAgLTU0LjUgMjF0LTI3LjUgNDN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMCAwdjgwMGgxMjAwdi04MDBoLTEyMDB6TTAgOTAwdjEwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNWg1MDB2LTEwMGgtMTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExODsiIGQ9Ik0xIDBsMzAwIDcwMGgxMjAwbC0zMDAgLTcwMGgtMTIwMHpNMSA0MDB2NjAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHYtMjAwaC0xMDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE5OyIgZD0iTTMwMiAzMDBoMTk4djYwMGgtMTk4bDI5OCAzMDBsMjk4IC0zMDBoLTE5OHYtNjAwaDE5OGwtMjk4IC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNMCA2MDBsMzAwIDI5OHYtMTk4aDYwMHYxOThsMzAwIC0yOThsLTMwMCAtMjk3djE5N2gtNjAwdi0xOTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjE7IiBkPSJNMCAxMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMSA0MDBsMTcyIDczOXE1IDIyIDIzIDQxLjV0MzggMTkuNWg2NzJxMTkgMCAzNy41IC0yMi41dDIzLjUgLTQ1LjVsMTcyIC03MzJoLTExMzh6TTgwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6IE0xMDAwIDEwMGgxMDB2MTAwaC0xMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0tMTAxIDYwMHY1MHEwIDI0IDI1IDQ5dDUwIDM4bDI1IDEzdi0yNTBsLTExIDUuNXQtMjQgMTR0LTMwIDIxLjV0LTI0IDI3LjV0LTExIDMxLjV6TTk5IDUwMHYyNTB2NXEwIDEzIDAuNSAxOC41dDIuNSAxM3Q4IDEwLjV0MTUgM2gyMDBsNjc1IDI1MHYtODUwbC02NzUgMjAwaC0zOGw0NyAtMjc2cTIgLTEyIC0zIC0xNy41dC0xMSAtNnQtMjEgLTAuNWgtOGgtODNxLTIwIDAgLTM0LjUgMTR0LTE4LjUgMzVxLTU2IDMzNyAtNTYgMzUxeiBNMTEwMCAyMDB2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXEyMCAwIDM1IC0xNC41dDE1IC0zNS41di04NTBxMCAtMjAgLTE1IC0zNXQtMzUgLTE1cS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTc0IDM1MHEwIDIxIDEzLjUgMzUuNXQzMy41IDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMyAzMnQyOSAxM2g5NHEyMCAwIDI5IC0xMC41dDMgLTI5LjVsLTE4IC0zN3E4MyAtMTkgMTQ0IC04Mi41dDc2IC0xNDAuNWw2MyAtMzI3bDExOCAtMTczaDE3cTIwIDAgMzMuNSAtMTQuNXQxMy41IC0zNS41cTAgLTIwIC0xMyAtNDB0LTMxIC0yN3EtMjIgLTkgLTYzIC0yM3QtMTY3LjUgLTM3IHQtMjUxLjUgLTIzdC0yNDUuNSAyMC41dC0xNzguNSA0MS41bC01OCAyMHEtMTggNyAtMzEgMjcuNXQtMTMgNDAuNXpNNDk3IDExMHExMiAtNDkgNDAgLTc5LjV0NjMgLTMwLjV0NjMgMzAuNXQzOSA3OS41cS00OCAtNiAtMTAyIC02dC0xMDMgNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNDsiIGQ9Ik0yMSA0NDVsMjMzIC00NWwtNzggLTIyNGwyMjQgNzhsNDUgLTIzM2wxNTUgMTc5bDE1NSAtMTc5bDQ1IDIzM2wyMjQgLTc4bC03OCAyMjRsMjM0IDQ1bC0xODAgMTU1bDE4MCAxNTZsLTIzNCA0NGw3OCAyMjVsLTIyNCAtNzhsLTQ1IDIzM2wtMTU1IC0xODBsLTE1NSAxODBsLTQ1IC0yMzNsLTIyNCA3OGw3OCAtMjI1bC0yMzMgLTQ0bDE3OSAtMTU2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI1OyIgZD0iTTAgMjAwaDIwMHY2MDBoLTIwMHYtNjAwek0zMDAgMjc1cTAgLTc1IDEwMCAtNzVoNjFxMTIzIC0xMDAgMTM5IC0xMDBoMjUwcTQ2IDAgODMgNTdsMjM4IDM0NHEyOSAzMSAyOSA3NHYxMDBxMCA0NCAtMzAuNSA4NC41dC02OS41IDQwLjVoLTMyOHEyOCAxMTggMjggMTI1djE1MHEwIDQ0IC0zMC41IDg0LjV0LTY5LjUgNDAuNWgtNTBxLTI3IDAgLTUxIC0yMHQtMzggLTQ4bC05NiAtMTk4bC0xNDUgLTE5NnEtMjAgLTI2IC0yMCAtNjN2LTQwMHogTTQwMCAzMDB2Mzc1bDE1MCAyMTJsMTAwIDIxM2g1MHYtMTc1bC01MCAtMjI1aDQ1MHYtMTI1bC0yNTAgLTM3NWgtMjE0bC0xMzYgMTAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjY7IiBkPSJNMCA0MDB2NjAwaDIwMHYtNjAwaC0yMDB6TTMwMCA1MjV2NDAwcTAgNzUgMTAwIDc1aDYxcTEyMyAxMDAgMTM5IDEwMGgyNTBxNDYgMCA4MyAtNTdsMjM4IC0zNDRxMjkgLTMxIDI5IC03NHYtMTAwcTAgLTQ0IC0zMC41IC04NC41dC02OS41IC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwLjUgLTg0LjV0LTY5LjUgLTQwLjVoLTUwcS0yNyAwIC01MSAyMHQtMzggNDhsLTk2IDE5OGwtMTQ1IDE5NiBxLTIwIDI2IC0yMCA2M3pNNDAwIDUyNWwxNTAgLTIxMmwxMDAgLTIxM2g1MHYxNzVsLTUwIDIyNWg0NTB2MTI1bC0yNTAgMzc1aC0yMTRsLTEzNiAtMTAwaC0xMDB2LTM3NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNzsiIGQ9Ik04IDIwMHY2MDBoMjAwdi02MDBoLTIwMHpNMzA4IDI3NXY1MjVxMCAxNyAxNCAzNS41dDI4IDI4LjVsMTQgOWwzNjIgMjMwcTE0IDYgMjUgNnExNyAwIDI5IC0xMmwxMDkgLTExMnExNCAtMTQgMTQgLTM0cTAgLTE4IC0xMSAtMzJsLTg1IC0xMjFoMzAycTg1IDAgMTM4LjUgLTM4dDUzLjUgLTExMHQtNTQuNSAtMTExdC0xMzguNSAtMzloLTEwN2wtMTMwIC0zMzlxLTcgLTIyIC0yMC41IC00MS41dC0yOC41IC0xOS41aC0zNDEgcS03IDAgLTkwIDgxdC04MyA5NHpNNDA4IDI4OWwxMDAgLTg5aDI5M2wxMzEgMzM5cTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3ExNiAwIDI1IDE1dDkgMzZxMCAyMCAtOSAzNC41dC0yNSAxNC41aC00NTdoLTYuNWgtNy41dC02LjUgMC41dC02IDF0LTUgMS41dC01LjUgMi41dC00IDR0LTQgNS41cS01IDEyIC01IDIwcTAgMTQgMTAgMjdsMTQ3IDE4M2wtODYgODNsLTMzOSAtMjM2di01MDN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjg7IiBkPSJNLTEwMSA2NTFxMCA3MiA1NCAxMTB0MTM5IDM3aDMwMmwtODUgMTIxcS0xMSAxNiAtMTEgMzJxMCAyMSAxNCAzNGwxMDkgMTEzcTEzIDEyIDI5IDEycTExIDAgMjUgLTZsMzY1IC0yMzBxNyAtNCAxNi41IC0xMC41dDI2IC0yNnQxNi41IC0zNi41di01MjZxMCAtMTMgLTg1LjUgLTkzLjV0LTkzLjUgLTgwLjVoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NCAwIC0xMzkgMzl0LTU1IDExMXpNLTEgNjAxaDIyMiBxMTUgMCAyOC41IC0yMC41dDE5LjUgLTQwLjVsMTMxIC0zMzloMjkzbDEwNiA4OXY1MDJsLTM0MiAyMzdsLTg3IC04M2wxNDUgLTE4NHExMCAtMTEgMTAgLTI2cTAgLTExIC01IC0yMHEtMSAtMyAtMy41IC01LjVsLTQgLTR0LTUgLTIuNXQtNS41IC0xLjV0LTYuNSAtMXQtNi41IC0wLjVoLTcuNWgtNi41aC00NzZ2LTEwMHpNOTk5IDIwMXY2MDBoMjAwdi02MDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik05NyA3MTlsMjMwIC0zNjNxNCAtNiAxMC41IC0xNS41dDI2IC0yNXQzNi41IC0xNS41aDUyNXExMyAwIDk0IDgzdDgxIDkwdjM0MnEwIDE1IC0yMCAyOC41dC00MSAxOS41bC0zMzkgMTMxdjEwNnEwIDg0IC0zOSAxMzl0LTExMSA1NXQtMTEwIC01My41dC0zOCAtMTM4LjV2LTMwMmwtMTIxIDg0cS0xNSAxMiAtMzMuNSAxMS41dC0zMi41IC0xMy41bC0xMTIgLTExMHEtMjIgLTIyIC02IC01M3pNMTcyIDczOWw4MyA4NmwxODMgLTE0NiBxMjIgLTE4IDQ3IC01cTMgMSA1LjUgMy41bDQgNHQyLjUgNXQxLjUgNS41dDEgNi41dDAuNSA2djcuNXY3djQ1NnEwIDIyIDI1IDMxdDUwIC0wLjV0MjUgLTMwLjV2LTIwMnEwIC0xNiAyMCAtMjkuNXQ0MSAtMTkuNWwzMzkgLTEzMHYtMjk0bC04OSAtMTAwaC01MDN6TTQwMCAwdjIwMGg2MDB2LTIwMGgtNjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMwOyIgZD0iTTEgNTg1cS0xNSAtMzEgNyAtNTNsMTEyIC0xMTBxMTMgLTEzIDMyIC0xMy41dDM0IDEwLjVsMTIxIDg1bC0xIC0zMDJxMCAtODQgMzguNSAtMTM4dDExMC41IC01NHQxMTEgNTV0MzkgMTM5djEwNmwzMzkgMTMxcTIwIDYgNDAuNSAxOS41dDIwLjUgMjguNXYzNDJxMCA3IC04MSA5MHQtOTQgODNoLTUyNXEtMTcgMCAtMzUuNSAtMTR0LTI4LjUgLTI4bC0xMCAtMTV6TTc2IDU2NWwyMzcgMzM5aDUwM2w4OSAtMTAwdi0yOTRsLTM0MCAtMTMwIHEtMjAgLTYgLTQwIC0yMHQtMjAgLTI5di0yMDJxMCAtMjIgLTI1IC0zMXQtNTAgMHQtMjUgMzF2NDU2djE0LjV0LTEuNSAxMS41dC01IDEydC05LjUgN3EtMjQgMTMgLTQ2IC01bC0xODQgLTE0NnpNMzA1IDExMDR2MjAwaDYwMHYtMjAwaC02MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzE7IiBkPSJNNSA1OTdxMCAxMjIgNDcuNSAyMzIuNXQxMjcuNSAxOTAuNXQxOTAuNSAxMjcuNXQyMzIuNSA0Ny41cTE2MiAwIDI5OS41IC04MHQyMTcuNSAtMjE4dDgwIC0zMDB0LTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTMwMCA4MHQtMjE4IDIxNy41dC04MCAyOTkuNXpNMzAwIDUwMGgzMDBsLTIgLTE5NGw0MDIgMjk0bC00MDIgMjk4di0xOTdoLTI5OHYtMjAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTAgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMxLjUgNDcuNXExMjIgMCAyMzIuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTggLTIxNy41dC0zMDAgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE3LjV0LTgwIDI5OS41ek0yMDAgNjAwbDQwMCAtMjk0djE5NGgzMDJ2MjAxaC0zMDB2MTk3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMzOyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNjAwaDIwMHYtMzAwaDIwMHYzMDBoMjAwbC0zMDAgNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNjAwbDMwMCAtNDAwbDMwMCA0MDBoLTIwMHYzMDBoLTIwMHYtMzAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzU7IiBkPSJNNSA1OTdxMCAxMjIgNDcuNSAyMzIuNXQxMjcuNSAxOTAuNXQxOTAuNSAxMjcuNXQyMzIuNSA0Ny41cTEyMSAwIDIzMS41IC00Ny41dDE5MC41IC0xMjcuNXQxMjcuNSAtMTkwLjV0NDcuNSAtMjMyLjVxMCAtMTYyIC04MCAtMjk5LjV0LTIxNy41IC0yMTcuNXQtMjk5LjUgLTgwdC0zMDAgODB0LTIxOCAyMTcuNXQtODAgMjk5LjV6TTI1NCA3ODBxLTggLTM0IDUuNSAtOTN0Ny41IC04N3EwIC05IDE3IC00NHQxNiAtNjBxMTIgMCAyMyAtNS41IHQyMyAtMTV0MjAgLTEzLjVxMjAgLTEwIDEwOCAtNDJxMjIgLTggNTMgLTMxLjV0NTkuNSAtMzguNXQ1Ny41IC0xMXE4IC0xOCAtMTUgLTU1LjV0LTIwIC01Ny41cTEyIC0yMSAyMi41IC0zNC41dDI4IC0yN3QzNi41IC0xNy41cTAgLTYgLTMgLTE1LjV0LTMuNSAtMTQuNXQ0LjUgLTE3cTEwMSAtMiAyMjEgMTExcTMxIDMwIDQ3IDQ4dDM0IDQ5dDIxIDYycS0xNCA5IC0zNy41IDkuNXQtMzUuNSA3LjVxLTE0IDcgLTQ5IDE1dC01MiAxOSBxLTkgMCAtMzkuNSAtMC41dC00Ni41IC0xLjV0LTM5IC02LjV0LTM5IC0xNi41cS01MCAtMzUgLTY2IC0xMnEtNCAyIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxN3QtMjQuNSA3cTIgMjIgLTIgNDF0LTE2LjUgMjh0LTM4LjUgLTIwcS0yMyAtMjUgLTQyIDRxLTE5IDI4IC04IDU4cTggMTYgMjIgMjJxNiAtMSAyNiAtMS41dDMzLjUgLTQuNXQxOS41IC0xM3ExMiAtMTkgMzIgLTM3LjV0MzQgLTI3LjVsMTQgLThxMCAzIDkuNSAzOS41IHQ1LjUgNTcuNXEtNCAyMyAxNC41IDQ0LjV0MjIuNSAzMS41cTUgMTQgMTAgMzV0OC41IDMxdDE1LjUgMjIuNXQzNCAyMS41cS02IDE4IDEwIDM3cTggMCAyMy41IC0xLjV0MjQuNSAtMS41dDIwLjUgNC41dDIwLjUgMTUuNXEtMTAgMjMgLTMwLjUgNDIuNXQtMzggMzB0LTQ5IDI2LjV0LTQzLjUgMjNxMTEgNDEgMSA0NHEzMSAtMTMgNTguNSAtMTQuNXQzOS41IDMuNWwxMSA0cTYgMzYgLTE3IDUzLjV0LTY0IDI4LjV0LTU2IDIzIHEtMTkgLTMgLTM3IDBxLTE1IC0xMiAtMzYuNSAtMjF0LTM0LjUgLTEydC00NCAtOHQtMzkgLTZxLTE1IC0zIC00NiAwdC00NSAtM3EtMjAgLTYgLTUxLjUgLTI1LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzl6TTUxOCA5MTVxMyAxMiAxNiAzMC41dDE2IDI1LjVxMTAgLTEwIDE4LjUgLTEwdDE0IDZ0MTQuNSAxNC41dDE2IDEyLjVxMCAtMTggOCAtNDIuNXQxNi41IC00NCB0OS41IC0yMy41cS02IDEgLTM5IDV0LTUzLjUgMTB0LTM2LjUgMTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzY7IiBkPSJNMCAxNjQuNXEwIDIxLjUgMTUgMzcuNWw2MDAgNTk5cS0zMyAxMDEgNiAyMDEuNXQxMzUgMTU0LjVxMTY0IDkyIDMwNiAtOWwtMjU5IC0xMzhsMTQ1IC0yMzJsMjUxIDEyNnExMyAtMTc1IC0xNTEgLTI2N3EtMTIzIC03MCAtMjUzIC0yM2wtNTk2IC01OTZxLTE1IC0xNiAtMzYuNSAtMTZ0LTM2LjUgMTZsLTExMSAxMTBxLTE1IDE1IC0xNSAzNi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM3OyIgaG9yaXotYWR2LXg9IjEyMjAiIGQ9Ik0wIDE5NnYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgNTk2djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgOTk2djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNNjAwIDU5Nmg1MDB2MTAwaC01MDB2LTEwMHpNODAwIDE5NmgzMDB2MTAwaC0zMDB2LTEwMHpNOTAwIDk5NmgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzODsiIGQ9Ik0xMDAgMTEwMHYxMDBoMTAwMHYtMTAwaC0xMDAwek0xNTAgMTAwMGg5MDBsLTM1MCAtNTAwdi0zMDBsLTIwMCAtMjAwdjUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzOTsiIGQ9Ik0wIDIwMHYyMDBoMTIwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMCA1MDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgyMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMGgtNTAwdjEwMGgtMjAwdi0xMDBoLTUwMHogTTUwMCAxMDAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQwOyIgZD0iTTAgMHY0MDBsMTI5IC0xMjlsMjAwIDIwMGwxNDIgLTE0MmwtMjAwIC0yMDBsMTI5IC0xMjloLTQwMHpNMCA4MDBsMTI5IDEyOWwyMDAgLTIwMGwxNDIgMTQybC0yMDAgMjAwbDEyOSAxMjloLTQwMHYtNDAwek03MjkgMzI5bDE0MiAxNDJsMjAwIC0yMDBsMTI5IDEyOXYtNDAwaC00MDBsMTI5IDEyOXpNNzI5IDg3MWwyMDAgMjAwbC0xMjkgMTI5aDQwMHYtNDAwbC0xMjkgMTI5bC0yMDAgLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik0wIDU5NnEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4MiA1OTZxMCAtMTcyIDEyMS41IC0yOTN0MjkyLjUgLTEyMXQyOTIuNSAxMjF0MTIxLjUgMjkzcTAgMTcxIC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0yOTEgNjU1IHEwIDIzIDE1LjUgMzguNXQzOC41IDE1LjV0MzkgLTE2dDE2IC0zOHEwIC0yMyAtMTYgLTM5dC0zOSAtMTZxLTIyIDAgLTM4IDE2dC0xNiAzOXpNNDAwIDg1MHEwIDIyIDE2IDM4LjV0MzkgMTYuNXEyMiAwIDM4IC0xNnQxNiAtMzl0LTE2IC0zOXQtMzggLTE2cS0yMyAwIC0zOSAxNi41dC0xNiAzOC41ek01MTMgNjA5cTAgMzIgMjEgNTYuNXQ1MiAyOS41bDEyMiAxMjZsMSAxcS05IDE0IC05IDI4cTAgMjIgMTYgMzguNXQzOSAxNi41IHEyMiAwIDM4IC0xNnQxNiAtMzl0LTE2IC0zOXQtMzggLTE2cS0xNiAwIC0yOSAxMGwtNTUgLTE0NXExNyAtMjIgMTcgLTUxcTAgLTM2IC0yNS41IC02MS41dC02MS41IC0yNS41cS0zNyAwIC02Mi41IDI1LjV0LTI1LjUgNjEuNXpNODAwIDY1NXEwIDIyIDE2IDM4dDM5IDE2dDM4LjUgLTE1LjV0MTUuNSAtMzguNXQtMTYgLTM5dC0zOCAtMTZxLTIzIDAgLTM5IDE2dC0xNiAzOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MjsiIGQ9Ik0tNDAgMzc1cS0xMyAtOTUgMzUgLTE3M3EzNSAtNTcgOTQgLTg5dDEyOSAtMzJxNjMgMCAxMTkgMjhxMzMgMTYgNjUgNDAuNXQ1Mi41IDQ1LjV0NTkuNSA2NHE0MCA0NCA1NyA2MWwzOTQgMzk0cTM1IDM1IDQ3IDg0dC0zIDk2cS0yNyA4NyAtMTE3IDEwNHEtMjAgMiAtMjkgMnEtNDYgMCAtNzkuNSAtMTd0LTY3LjUgLTUxbC0zODggLTM5NmwtNyAtN2w2OSAtNjdsMzc3IDM3M3EyMCAyMiAzOSAzOHEyMyAyMyA1MCAyM3EzOCAwIDUzIC0zNiBxMTYgLTM5IC0yMCAtNzVsLTU0NyAtNTQ3cS01MiAtNTIgLTEyNSAtNTJxLTU1IDAgLTEwMCAzM3QtNTQgOTZxLTUgMzUgMi41IDY2dDMxLjUgNjN0NDIgNTB0NTYgNTRxMjQgMjEgNDQgNDFsMzQ4IDM0OHE1MiA1MiA4Mi41IDc5LjV0ODQgNTR0MTA3LjUgMjYuNXEyNSAwIDQ4IC00cTk1IC0xNyAxNTQgLTk0LjV0NTEgLTE3NS41cS03IC0xMDEgLTk4IC0xOTJsLTI1MiAtMjQ5bC0yNTMgLTI1Nmw3IC03bDY5IC02MGw1MTcgNTExIHE2NyA2NyA5NSAxNTd0MTEgMTgzcS0xNiA4NyAtNjcgMTU0dC0xMzAgMTAzcS02OSAzMyAtMTUyIDMzcS0xMDcgMCAtMTk3IC01NXEtNDAgLTI0IC0xMTEgLTk1bC01MTIgLTUxMnEtNjggLTY4IC04MSAtMTYzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTc5IDc4NHEwIDEzMSA5OSAyMjkuNXQyMzAgOTguNXExNDQgMCAyNDIgLTEyOXExMDMgMTI5IDI0NSAxMjlxMTMwIDAgMjI3IC05OC41dDk3IC0yMjkuNXEwIC00NiAtMTcuNSAtOTF0LTYxIC05OXQtNzcgLTg5LjV0LTEwNC41IC0xMDUuNXEtMTk3IC0xOTEgLTI5MyAtMzIybC0xNyAtMjNsLTE2IDIzcS00MyA1OCAtMTAwIDEyMi41dC05MiA5OS41dC0xMDEgMTAwbC04NC41IDg0LjV0LTY4IDc0dC02MCA3OHQtMzMuNSA3MC41dC0xNSA3OHogTTI1MCA3ODRxMCAtMjcgMzAuNSAtNzB0NjEuNSAtNzUuNXQ5NSAtOTQuNWwyMiAtMjJxOTMgLTkwIDE5MCAtMjAxcTgyIDkyIDE5NSAyMDNsMTIgMTJxNjQgNjIgOTcuNSA5N3Q2NC41IDc5dDMxIDcycTAgNzEgLTQ4IDExOS41dC0xMDYgNDguNXEtNzMgMCAtMTMxIC04M2wtMTE4IC0xNzFsLTExNCAxNzRxLTUxIDgwIC0xMjQgODBxLTU5IDAgLTEwOC41IC00OS41dC00OS41IC0xMTguNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0NDsiIGQ9Ik01NyAzNTNxMCAtOTQgNjYgLTE2MGwxNDEgLTE0MXE2NiAtNjYgMTU5IC02NnE5NSAwIDE1OSA2NmwyODMgMjgzcTY2IDY2IDY2IDE1OXQtNjYgMTU5bC0xNDEgMTQxcS0xMiAxMiAtMTkgMTdsLTEwNSAtMTA1bDIxMiAtMjEybC0zODkgLTM4OWwtMjQ3IDI0OGw5NSA5NWwtMTggMThxLTQ2IDQ1IC03NSAxMDFsLTU1IC01NXEtNjYgLTY2IC02NiAtMTU5ek0yNjkgNzA2cTAgLTkzIDY2IC0xNTlsMTQxIC0xNDFsMTkgLTE3bDEwNSAxMDUgbC0yMTIgMjEybDM4OSAzODlsMjQ3IC0yNDdsLTk1IC05NmwxOCAtMThxNDYgLTQ2IDc3IC05OWwyOSAyOXEzNSAzNSA2Mi41IDg4dDI3LjUgOTZxMCA5MyAtNjYgMTU5bC0xNDEgMTQxcS02NiA2NiAtMTU5IDY2cS05NSAwIC0xNTkgLTY2bC0yODMgLTI4M3EtNjYgLTY0IC02NiAtMTU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ1OyIgZD0iTTIwMCAxMDB2OTUzcTAgMjEgMzAgNDZ0ODEgNDh0MTI5IDM4dDE2MyAxNXQxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMDAgMzAwaDYwMHY3MDBoLTYwMHYtNzAwek00OTYgMTUwcTAgLTQzIDMwLjUgLTczLjV0NzMuNSAtMzAuNXQ3My41IDMwLjV0MzAuNSA3My41dC0zMC41IDczLjV0LTczLjUgMzAuNSB0LTczLjUgLTMwLjV0LTMwLjUgLTczLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNMCAwbDMwMyAzODBsMjA3IDIwOGwtMjEwIDIxMmgzMDBsMjY3IDI3OWwtMzUgMzZxLTE1IDE0IC0xNSAzNXQxNSAzNXExNCAxNSAzNSAxNXQzNSAtMTVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTUgLTM1cS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0yMDggLTIwN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0ODsiIGQ9Ik0yOTUgNDMzaDEzOXE1IC03NyA0OC41IC0xMjYuNXQxMTcuNSAtNjQuNXYzMzVsLTI3IDdxLTQ2IDE0IC03OSAyNi41dC03MiAzNnQtNjIuNSA1MnQtNDAgNzIuNXQtMTYuNSA5OXEwIDkyIDQ0IDE1OS41dDEwOSAxMDF0MTQ0IDQwLjV2NzhoMTAwdi03OXEzOCAtNCA3Mi41IC0xMy41dDc1LjUgLTMxLjV0NzEgLTUzLjV0NTEuNSAtODR0MjQuNSAtMTE4LjVoLTE1OXEtOCA3MiAtMzUgMTA5LjV0LTEwMSA1MC41di0zMDdsNjQgLTE0IHEzNCAtNyA2NCAtMTYuNXQ3MCAtMzEuNXQ2Ny41IC01MnQ0Ny41IC04MC41dDIwIC0xMTIuNXEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTZ2LTc3aC0xMDB2NzhxLTE1MiAxNyAtMjM3IDEwNHEtNDAgNDAgLTUyLjUgOTMuNXQtMTUuNSAxMzkuNXpNNDY2IDg4OXEwIC0yOSA4IC01MXQxNi41IC0zNHQyOS41IC0yMi41dDMxIC0xMy41dDM4IC0xMHE3IC0yIDExIC0zdjI3NHEtNjEgLTggLTk3LjUgLTM3LjV0LTM2LjUgLTEwMi41ek03MDAgMjM3IHExNzAgMTggMTcwIDE1MXEwIDY0IC00NCA5OS41dC0xMjYgNjAuNXYtMzExeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ5OyIgZD0iTTEwMCA2MDB2MTAwaDE2NnEtMjQgNDkgLTQ0IDEwNHEtMTAgMjYgLTE0LjUgNTUuNXQtMyA3Mi41dDI1IDkwdDY4LjUgODdxOTcgODggMjYzIDg4cTEyOSAwIDIzMCAtODl0MTAxIC0yMDhoLTE1M3EwIDUyIC0zNCA4OS41dC03NCA1MS41dC03NiAxNHEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMTEgMi41IC0yNC41dDUuNSAtMjR0OS41IC0yNi41dDEwLjUgLTI1dDE0IC0yNy41dDE0IC0yNS41IHQxNS41IC0yN3QxMy41IC0yNGgyNDJ2LTEwMGgtMTk3cTggLTUwIC0yLjUgLTExNXQtMzEuNSAtOTRxLTQxIC01OSAtOTkgLTExM3EzNSAxMSA4NCAxOHQ3MCA3cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTc2IDAgMTM2IDMwbDUwIC0xNDdxLTQxIC0yNSAtODAuNSAtMzYuNXQtNTkgLTEzdC02MS41IC0xLjVxLTIzIDAgLTEyOCAzM3QtMTU1IDI5cS0zOSAtNCAtODIgLTE3dC02NiAtMjVsLTI0IC0xMWwtNTUgMTQ1bDE2LjUgMTF0MTUuNSAxMCB0MTMuNSA5LjV0MTQuNSAxMnQxNC41IDE0dDE3LjUgMTguNXE0OCA1NSA1NCAxMjYuNXQtMzAgMTQyLjVoLTIyMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MDsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek02MDIgOTAwbDI5OCAzMDBsMjk4IC0zMDBoLTE5OHYtOTAwaC0yMDB2OTAwaC0xOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTE7IiBkPSJNMiAzMDBoMTk4djkwMGgyMDB2LTkwMGgxOThsLTI5OCAtMzAwek03MDAgMHYyMDBoMTAwdi0xMDBoMjAwdi0xMDBoLTMwMHpNNzAwIDQwMHYxMDBoMzAwdi0yMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MTAwaC0yMDB6TTcwMCA3MDB2NTAwaDMwMHYtNTAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwek04MDEgOTAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTUyOyIgZD0iTTIgMzAwaDE5OHY5MDBoMjAwdi05MDBoMTk4bC0yOTggLTMwMHpNNzAwIDB2NTAwaDMwMHYtNTAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwek03MDAgNzAwdjIwMGgxMDB2LTEwMGgyMDB2LTEwMGgtMzAwek03MDAgMTEwMHYxMDBoMzAwdi0yMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MTAwaC0yMDB6TTgwMSAyMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTM7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNODAwIDEwMHY0MDBoMzAwdi01MDBoLTEwMHYxMDBoLTIwMHpNODAwIDExMDB2MTAwaDIwMHYtNTAwaC0xMDB2NDAwaC0xMDB6TTkwMSAyMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNODAwIDQwMHYxMDBoMjAwdi01MDBoLTEwMHY0MDBoLTEwMHpNODAwIDgwMHY0MDBoMzAwdi01MDBoLTEwMHYxMDBoLTIwMHpNOTAxIDkwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NTsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek03MDAgMTAwdjIwMGg1MDB2LTIwMGgtNTAwek03MDAgNDAwdjIwMGg0MDB2LTIwMGgtNDAwek03MDAgNzAwdjIwMGgzMDB2LTIwMGgtMzAwek03MDAgMTAwMHYyMDBoMjAwdi0yMDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NjsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek03MDAgMTAwdjIwMGgyMDB2LTIwMGgtMjAwek03MDAgNDAwdjIwMGgzMDB2LTIwMGgtMzAwek03MDAgNzAwdjIwMGg0MDB2LTIwMGgtNDAwek03MDAgMTAwMHYyMDBoNTAwdi0yMDBoLTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NzsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMzAwcTE2MiAwIDI4MSAtMTE4LjV0MTE5IC0yODEuNXYtMzAwcTAgLTE2NSAtMTE4LjUgLTI4Mi41dC0yODEuNSAtMTE3LjVoLTMwMHEtMTY1IDAgLTI4Mi41IDExNy41dC0xMTcuNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1ODsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjMgMTE5IDI4MS41dDI4MSAxMTguNWgzMDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTYzIDAgLTI4MS41IDExNy41dC0xMTguNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNNDAwIDMwMGwzMzMgMjUwbC0zMzMgMjUwdi01MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTk7IiBkPSJNMCA0MDB2MzAwcTAgMTYzIDExNy41IDI4MS41dDI4Mi41IDExOC41aDMwMHExNjMgMCAyODEuNSAtMTE5dDExOC41IC0yODF2LTMwMHEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6TTMwMCA3MDBsMjUwIC0zMzNsMjUwIDMzM2gtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgzMDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2MiAtMTE4LjUgLTI4MXQtMjgxLjUgLTExOWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE4LjV0LTExNy41IDI4MS41ek0yMDAgMzAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNSBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0zMDAgNDAwaDUwMGwtMjUwIDMzM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik0wIDQwMHYzMDBoMzAwdjIwMGw0MDAgLTM1MGwtNDAwIC0zNTB2MjAwaC0zMDB6TTUwMCAwdjIwMGg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtNTAwdjIwMGg0MDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MjsiIGQ9Ik0yMTYgNTE5cTEwIC0xOSAzMiAtMTloMzAycS0xNTUgLTQzOCAtMTYwIC00NThxLTUgLTIxIDQgLTMybDkgLThsOSAtMXExMyAwIDI2IDE2bDUzOCA2MzBxMTUgMTkgNiAzNnEtOCAxOCAtMzIgMTZoLTMwMHExIDQgNzggMjE5LjV0NzkgMjI3LjVxMiAxNyAtNiAyN2wtOCA4aC05cS0xNiAwIC0yNSAtMTVxLTQgLTUgLTk4LjUgLTExMS41dC0yMjggLTI1N3QtMjA5LjUgLTIzOC41cS0xNyAtMTkgLTcgLTQweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTAgNDAwcTAgLTE2NSAxMTcuNSAtMjgyLjV0MjgyLjUgLTExNy41aDMwMHE0NyAwIDEwMCAxNXYxODVoLTUwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWg1MDB2MTg1cS0xNCA0IC0xMTQgNy41dC0xOTMgNS41bC05MyAycS0xNjUgMCAtMjgyLjUgLTExNy41dC0xMTcuNSAtMjgyLjV2LTMwMHpNNjAwIDQwMHYzMDBoMzAwdjIwMGw0MDAgLTM1MGwtNDAwIC0zNTB2MjAwaC0zMDB6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY0OyIgZD0iTTAgNDAwcTAgLTE2NSAxMTcuNSAtMjgyLjV0MjgyLjUgLTExNy41aDMwMHExNjMgMCAyODEuNSAxMTcuNXQxMTguNSAyODIuNXY5OGwtNzggNzNsLTEyMiAtMTIzdi0xNDhxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTUwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxNTZsMTE4IDEyMmwtNzQgNzhoLTEwMHEtMTY1IDAgLTI4Mi41IC0xMTcuNXQtMTE3LjUgLTI4Mi41IHYtMzAwek00OTYgNzA5bDM1MyAzNDJsLTE0OSAxNDloNTAwdi01MDBsLTE0OSAxNDlsLTM0MiAtMzUzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDA2IDYwMCBxMCA4MCA1NyAxMzd0MTM3IDU3dDEzNyAtNTd0NTcgLTEzN3QtNTcgLTEzN3QtMTM3IC01N3QtMTM3IDU3dC01NyAxMzd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA4MDBsNDQ1IC01MDBsNDUwIDUwMGgtMjk1djQwMGgtMzAwdi00MDBoLTMwMHpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjc7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA3MDBoMzAwdi0zMDBoMzAwdjMwMGgyOTVsLTQ0NSA1MDB6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY4OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgNzA1bDMwNSAtMzA1bDU5NiA1OTZsLTE1NCAxNTVsLTQ0MiAtNDQybC0xNTAgMTUxek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2OTsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMTAwIDk4OGw5NyAtOThsMjEyIDIxM2wtOTcgOTd6TTIwMCA0MDFoNzAwdjY5OWwtMjUwIC0yMzlsLTE0OSAxNDlsLTIxMiAtMjEybDE0OSAtMTQ5ek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMjAwIDYxMmwyMTIgLTIxMmw5OCA5N2wtMjEzIDIxMnpNMzAwIDEyMDBsMjM5IC0yNTBsLTE0OSAtMTQ5bDIxMiAtMjEybDE0OSAxNDhsMjQ4IC0yMzd2NzAwaC02OTl6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTcxOyIgZD0iTTIzIDQxNWwxMTc3IDc4NHYtMTA3OWwtNDc1IDI3MmwtMzEwIC0zOTN2NDE2aC0zOTJ6TTQ5NCAyMTBsNjcyIDkzOGwtNjcyIC03MTJ2LTIyNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MjsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi04NTBxMCAtMjEgLTE1IC0zNS41dC0zNSAtMTQuNWgtMTUwdjQwMGgtNzAwdi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAxMDAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTczOyIgZD0iTTAgMTUwdjEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDBsMjAwIC0yMDB2LTIxOGwtMjc2IC0yNzVsLTEyMCAxMjBsLTEyNiAtMTI3aC0zNzh2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNTgxIDMwNmwxMjMgMTIzbDEyMCAtMTIwbDM1MyAzNTJsMTIzIC0xMjNsLTQ3NSAtNDc2ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NDsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0yNjlsLTEwMyAtMTAzbC0xNzAgMTcwbC0yOTggLTI5OGgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAxMDAwaDEwMHYyMDBoLTEwMHYtMjAwek03MDAgMTMzbDE3MCAxNzBsLTE3MCAxNzBsMTI3IDEyN2wxNzAgLTE3MGwxNzAgMTcwbDEyNyAtMTI4bC0xNzAgLTE2OWwxNzAgLTE3MCBsLTEyNyAtMTI3bC0xNzAgMTcwbC0xNzAgLTE3MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0zMDBoLTQwMHYtMjAwaC01MDB2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDMwMGwzMDAgLTMwMGwzMDAgMzAwaC0yMDB2MzAwaC0yMDB2LTMwMGgtMjAwek02MDAgMTAwMHYyMDBoMTAwdi0yMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi00MDJsLTIwMCAyMDBsLTI5OCAtMjk4aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDMwMGgyMDB2LTMwMGgyMDB2MzAwaDIwMGwtMzAwIDMwMHpNNjAwIDEwMDB2MjAwaDEwMHYtMjAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzc7IiBkPSJNMCAyNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDExMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djU1MGgtMTIwMHYtNTUwek0wIDkwMGgxMjAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTUwek0xMDAgMzAwdjIwMGg0MDB2LTIwMGgtNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTAgNDAwbDMwMCAyOTh2LTE5OGg0MDB2LTIwMGgtNDAwdi0xOTh6TTEwMCA4MDB2MjAwaDEwMHYtMjAwaC0xMDB6TTMwMCA4MDB2MjAwaDEwMHYtMjAwaC0xMDB6TTUwMCA4MDB2MjAwaDQwMHYxOThsMzAwIC0yOThsLTMwMCAtMjk4djE5OGgtNDAwek04MDAgMzAwdjIwMGgxMDB2LTIwMGgtMTAwek0xMDAwIDMwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3OTsiIGQ9Ik0xMDAgNzAwdjQwMGw1MCAxMDBsNTAgLTEwMHYtMzAwaDEwMHYzMDBsNTAgMTAwbDUwIC0xMDB2LTMwMGgxMDB2MzAwbDUwIDEwMGw1MCAtMTAwdi00MDBsLTEwMCAtMjAzdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3ek04MDAgNTk3cTAgLTI5IDEwLjUgLTU1LjV0MjUgLTQzdDI5IC0yOC41dDI1LjUgLTE4bDEwIC01di0zOTdxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWgyMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djExMDZxMCAzMSAtMTggNDAuNXQtNDQgLTcuNWwtMjc2IC0xMTdxLTI1IC0xNiAtNDMuNSAtNTAuNXQtMTguNSAtNjUuNXYtMzU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEwMCAwaDQwMHY1NnEtNzUgMCAtODcuNSA2dC0xMi41IDQ0djM5NGg1MDB2LTM5NHEwIC0zOCAtMTIuNSAtNDR0LTg3LjUgLTZ2LTU2aDQwMHY1NnEtNCAwIC0xMSAwLjV0LTI0IDN0LTMwIDd0LTI0IDE1dC0xMSAyNC41djg4OHEwIDIyIDI1IDM0LjV0NTAgMTMuNWwyNSAydjU2aC00MDB2LTU2cTc1IDAgODcuNSAtNnQxMi41IC00NHYtMzk0aC01MDB2Mzk0cTAgMzggMTIuNSA0NHQ4Ny41IDZ2NTZoLTQwMHYtNTZxNCAwIDExIC0wLjUgdDI0IC0zdDMwIC03dDI0IC0xNXQxMSAtMjQuNXYtODg4cTAgLTIyIC0yNSAtMzQuNXQtNTAgLTEzLjVsLTI1IC0ydi01NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MTsiIGQ9Ik0wIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMzAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTMwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNWwyOTUgOTh2LTI5OGgtNDI1bC0xMDAgLTEwMGgtMzc1ek0xMDAgMzAwdjIwMGgzMDB2LTIwMGgtMzAwek0xMDAgNjAwdjIwMGgzMDB2LTIwMGgtMzAweiBNMTAwIDEwMDBoNDAwbDIwMCAtMjAwdi05OGwyOTUgOThoMTA1djIwMGgtNDI1bC0xMDAgMTAwaC0zNzV6TTcwMCA0MDJ2MTYzbDQwMCAxMzN2LTE2M3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MjsiIGQ9Ik0xNi41IDk3NC41cTAuNSAtMjEuNSAxNiAtOTB0NDYuNSAtMTQwdDEwNCAtMTc3LjV0MTc1IC0yMDhxMTAzIC0xMDMgMjA3LjUgLTE3NnQxODAgLTEwMy41dDEzNyAtNDd0OTIuNSAtMTYuNWwzMSAxbDE2MyAxNjJxMTYgMTcgMTMgNDAuNXQtMjIgMzcuNWwtMTkyIDEzNnEtMTkgMTQgLTQ1IDEydC00MiAtMTlsLTExOSAtMTE4cS0xNDMgMTAzIC0yNjcgMjI3cS0xMjYgMTI2IC0yMjcgMjY4bDExOCAxMThxMTcgMTcgMjAgNDEuNSB0LTExIDQ0LjVsLTEzOSAxOTRxLTE0IDE5IC0zNi41IDIydC00MC41IC0xNGwtMTYyIC0xNjJxLTEgLTExIC0wLjUgLTMyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODM7IiBkPSJNMCA1MHYyMTJxMCAyMCAxMC41IDQ1LjV0MjQuNSAzOS41bDM2NSAzMDN2NTBxMCA0IDEgMTAuNXQxMiAyMi41dDMwIDI4LjV0NjAgMjN0OTcgMTAuNXQ5NyAtMTB0NjAgLTIzLjV0MzAgLTI3LjV0MTIgLTI0bDEgLTEwdi01MGwzNjUgLTMwM3ExNCAtMTQgMjQuNSAtMzkuNXQxMC41IC00NS41di0yMTJxMCAtMjEgLTE1IC0zNS41dC0zNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNzEyIHEwIC0yMSAxNC41IC0zMy41dDM0LjUgLTguNWwyMDIgMzNxMjAgNCAzNC41IDIxdDE0LjUgMzh2MTQ2cTE0MSAyNCAzMDAgMjR0MzAwIC0yNHYtMTQ2cTAgLTIxIDE0LjUgLTM4dDM0LjUgLTIxbDIwMiAtMzNxMjAgLTQgMzQuNSA4LjV0MTQuNSAzMy41djIwMHEtNiA4IC0xOSAyMC41dC02MyA0NXQtMTEyIDU3dC0xNzEgNDV0LTIzNSAyMC41cS05MiAwIC0xNzUgLTEwLjV0LTE0MS41IC0yN3QtMTA4LjUgLTM2LjV0LTgxLjUgLTQwIHQtNTMuNSAtMzYuNXQtMzEgLTI3LjVsLTkgLTEwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTAwIDB2MTAwaDExMDB2LTEwMGgtMTEwMHpNMTc1IDIwMGg5NTBsLTEyNSAxNTB2MjUwbDEwMCAxMDB2NDAwaC0xMDB2LTIwMGgtMTAwdjIwMGgtMjAwdi0yMDBoLTEwMHYyMDBoLTIwMHYtMjAwaC0xMDB2MjAwaC0xMDB2LTQwMGwxMDAgLTEwMHYtMjUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg1OyIgZD0iTTEwMCAwaDMwMHY0MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNDAwek01MDAgMHYxMDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMDBoLTMwMHpNOTAwIDB2NzAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTcwMGgtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg2OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYzMDBoLTIwMHYxMDBoMjAwdjEwMGgtMzAwdi0zMDBoMjAwdi0xMDBoLTIwMHYtMTAwek02MDAgMzAwaDIwMHYxMDBoMTAwdjMwMGgtMTAwdjEwMGgtMjAwdi01MDAgek03MDAgNDAwdjMwMGgxMDB2LTMwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg3OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDEwMHYyMDBoMTAwdi0yMDBoMTAwdjUwMGgtMTAwdi0yMDBoLTEwMHYyMDBoLTEwMHYtNTAwek02MDAgMzAwaDIwMHYxMDBoMTAwdjMwMGgtMTAwdjEwMGgtMjAwdi01MDAgek03MDAgNDAwdjMwMGgxMDB2LTMwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYxMDBoLTIwMHYzMDBoMjAwdjEwMGgtMzAwdi01MDB6TTYwMCAzMDBoMzAwdjEwMGgtMjAwdjMwMGgyMDB2MTAwaC0zMDB2LTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDU1MGwzMDAgLTE1MHYzMDB6TTYwMCA0MDBsMzAwIDE1MGwtMzAwIDE1MHYtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwdjUwMGg3MDB2LTUwMGgtNzAwek0zMDAgNDAwaDEzMHE0MSAwIDY4IDQydDI3IDEwN3QtMjguNSAxMDh0LTY2LjUgNDNoLTEzMHYtMzAwek01NzUgNTQ5IHEwIC02NSAyNyAtMTA3dDY4IC00MmgxMzB2MzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTE7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCAzMDBoMzAwdjMwMGgtMjAwdjEwMGgyMDB2MTAwaC0zMDB2LTMwMGgyMDB2LTEwMGgtMjAwdi0xMDB6TTYwMSAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTcwMCA3MDBoMTAwIHYtNDAwaDEwMHY1MDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkyOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHY0MDBoLTIwMHYxMDBoLTEwMHYtNTAwek0zMDEgNDAwdjIwMGgxMDB2LTIwMGgtMTAwek02MDEgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek03MDAgNzAwaDEwMCB2LTQwMGgxMDB2NTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDcwMHYxMDBoMzAwdi0zMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MjAwaC0yMDB6TTIwMSAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTYwMSAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6IE03MDAgNzAwdjEwMGgyMDB2LTUwMGgtMTAwdjQwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk0OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDAwIDUwMHYyMDAgbDEwMCAxMDBoMzAwdi0xMDBoLTMwMHYtMjAwaDMwMHYtMTAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTU7IiBkPSJNMCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODIgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek00MDAgNDAwdjQwMGgzMDAgbDEwMCAtMTAwdi0xMDBoLTEwMHYxMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgtMTAwek03MDAgNDAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk3OyIgZD0iTS0xNCA0OTRxMCAtODAgNTYuNSAtMTM3dDEzNS41IC01N2gyMjJ2MzAwaDQwMHYtMzAwaDEyOHExMjAgMCAyMDUgODZ0ODUgMjA4cTAgMTIwIC04NSAyMDYuNXQtMjA1IDg2LjVxLTQ2IDAgLTkwIC0xNHEtNDQgOTcgLTEzNC41IDE1Ni41dC0yMDAuNSA1OS41cS0xNTIgMCAtMjYwIC0xMDcuNXQtMTA4IC0yNjAuNXEwIC0yNSAyIC0zN3EtNjYgLTE0IC0xMDguNSAtNjcuNXQtNDIuNSAtMTIyLjV6TTMwMCAyMDBoMjAwdjMwMGgyMDB2LTMwMCBoMjAwbC0zMDAgLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5ODsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoOGw0MTQgNDE0bDQwMyAtNDAzcTk0IDI2IDE1NC41IDEwNHQ2MC41IDE3OHEwIDEyMSAtODUgMjA3LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41ek0zMDAgMjAwbDMwMCAzMDAgbDMwMCAtMzAwaC0yMDB2LTMwMGgtMjAwdjMwMGgtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTEwMCAyMDBoNDAwdi0xNTVsLTc1IC00NWgzNTBsLTc1IDQ1djE1NWg0MDBsLTI3MCAzMDBoMTcwbC0yNzAgMzAwaDE3MGwtMzAwIDMzM2wtMzAwIC0zMzNoMTcwbC0yNzAgLTMwMGgxNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNMTIxIDcwMHEwIC01MyAyOC41IC05N3Q3NS41IC02NXEtNCAtMTYgLTQgLTM4cTAgLTc0IDUyLjUgLTEyNi41dDEyNi41IC01Mi41cTU2IDAgMTAwIDMwdi0zMDZsLTc1IC00NWgzNTBsLTc1IDQ1djMwNnE0NiAtMzAgMTAwIC0zMHE3NCAwIDEyNi41IDUyLjV0NTIuNSAxMjYuNXEwIDI0IC05IDU1cTUwIDMyIDc5LjUgODN0MjkuNSAxMTJxMCA5MCAtNjEuNSAxNTUuNXQtMTUwLjUgNzEuNXEtMjYgODkgLTk5LjUgMTQ1LjUgdC0xNjcuNSA1Ni41cS0xMTYgMCAtMTk3LjUgLTgxLjV0LTgxLjUgLTE5Ny41cTAgLTQgMSAtMTJ0MSAtMTFxLTE0IDIgLTIzIDJxLTc0IDAgLTEyNi41IC01Mi41dC01Mi41IC0xMjYuNXoiIC8+Cis8L2ZvbnQ+Cis8L2RlZnM+PC9zdmc+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZiBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk4ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2M1MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9odG1sL2xheWVyX2RlcHNfbW9kYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRiYTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2h0bWwvbGF5ZXJfZGVwc19tb2RhbC5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzxkaXYgaWQ9ImRlcGVuZGVuY2llcy1tb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxmb3JtIGlkPSJkZXBlbmRlbmNpZXMtbW9kYWwtZm9ybSI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICA8aDM+PHNwYW4gaWQ9InRpdGxlIj48L3NwYW4+IGRlcGVuZGVuY2llczwvaDM+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICA8cCBpZD0iYm9keS10ZXh0Ij4gPHN0cm9uZyBpZD0ibGF5ZXItbmFtZSI+PC9zdHJvbmc+IGRlcGVuZHMgb24gc29tZSBsYXllcnMgdGhhdCBhcmUgbm90IGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gU2VsZWN0IHRoZSBvbmVzIHlvdSB3YW50IHRvIGFkZDo8L3A+CisgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIiBpZD0iZGVwZW5kZW5jaWVzLWxpc3QiPgorICAgICAgPC91bD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiPkFkZCBsYXllcnM8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0icmVzZXQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JmNjQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5Njk5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvbG9nby5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2xvZ28ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YWQ3MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2xvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvdG9hc3Rlcl9idy5wbmcgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL3RvYXN0ZXJfYncucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjU5MDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL3RvYXN0ZXJfYncucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvR1BMLUxJQ0VOU0UudHh0IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9HUEwtTElDRU5TRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MjdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvR1BMLUxJQ0VOU0UudHh0CkBAIC0wLDAgKzEsMjc4IEBACisgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL01JVC1MSUNFTlNFLnR4dCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvTUlULUxJQ0VOU0UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTgyNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL01JVC1MSUNFTlNFLnR4dApAQCAtMCwwICsxLDIwIEBACitDb3B5cmlnaHQgKGMpIDIwMTMgTHVkbyB2YW4gZGVuIEJvb20sIGh0dHA6Ly9sdWRvdmFuZGVuYm9vbS5jb20KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCitPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9SRUFETUUubWQgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2U3YWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9SRUFETUUubWQKQEAgLTAsMCArMSwyMCBAQAorIyBqUXVlcnkgdHJlZXRhYmxlCisKK2pRdWVyeSB0cmVldGFibGUgaXMgYSBwbHVnaW4gZm9yIGpRdWVyeSwgdGhlICdXcml0ZSBMZXNzLCBEbyBNb3JlLCBKYXZhU2NyaXB0CitMaWJyYXJ5Jy4gV2l0aCB0aGlzIHBsdWdpbiB5b3UgY2FuIGRpc3BsYXkgYSB0cmVlIGluIGFuIEhUTUwgdGFibGUsIGUuZy4gYQorZGlyZWN0b3J5IHN0cnVjdHVyZSBvciBhIG5lc3RlZCBsaXN0LiBXaHkgbm90IHVzZSBhIGxpc3QsIHlvdSBzYXk/IEJlY2F1c2UgbGlzdHMKK2FyZSBncmVhdCBmb3IgZGlzcGxheWluZyBhIHRyZWUsIGFuZCB0YWJsZXMgYXJlIG5vdC4gT2ggd2FpdCwgYnV0IHRoaXMgcGx1Z2luCit1c2VzIHRhYmxlcywgZG9lc24ndCBpdD8gWWVzLiBXaHkgZG8gSSB1c2UgYSB0YWJsZSB0byBkaXNwbGF5IGEgbGlzdD8gQmVjYXVzZSBJCituZWVkIG11bHRpcGxlIGNvbHVtbnMgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGRhdGEgYmVzaWRlcyB0aGUgdHJlZS4KKworRG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gdGhlIGpRdWVyeSBQbHVnaW4gUmVnaXN0cnkgb3IgZ3JhYiB0aGUgc291cmNlCitjb2RlIGZyb20gR2l0aHViLiBQbGVhc2UgcmVwb3J0IGlzc3VlcyB0aHJvdWdoIEdpdGh1YiBpc3N1ZXMuIFRoaXMgcGx1Z2luIGlzCityZWxlYXNlZCB1bmRlciBib3RoIHRoZSBNSVQgYW5kIHRoZSBHUEx2MiBsaWNlbnNlIGJ5IEx1ZG8gdmFuIGRlbiBCb29tLgorCisjIyBEb2N1bWVudGF0aW9uIGFuZCBFeGFtcGxlcworCitTZWUgaW5kZXguaHRtbCBmb3IgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLiBUaGUgbW9zdCByZWNlbnQgdmVyc2lvbgorb2YgdGhpcyBkb2N1bWVudCBpcyBhbHNvIGF2YWlsYWJsZSBvbmxpbmUgYXQKK2h0dHA6Ly9sdWRvLmN1YmljcGh1c2UubmwvanF1ZXJ5LXRyZWV0YWJsZS4gQW4gQUpBWCBlbmFibGVkIGV4YW1wbGUgYnVpbHQgd2l0aAorUnVieSBvbiBSYWlscyBjYW4gYmUgZm91bmQgYXQKK2h0dHBzOi8vZ2l0aHViLmNvbS9sdWRvL2pxdWVyeS10cmVldGFibGUtYWpheC1leGFtcGxlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS50b2FzdGVyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk0YjIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKQEAgLTAsMCArMSw2NiBAQAorLyoKK3RhYmxlLnRyZWV0YWJsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7IAorICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBmb250LXNpemU6IC44ZW07CisgIGxpbmUtaGVpZ2h0OiAxOworICBtYXJnaW46IC42ZW0gMCAxLjhlbSAwOworICB3aWR0aDogMTAwJTsKK30KKwordGFibGUudHJlZXRhYmxlIGNhcHRpb24geworICBmb250LXNpemU6IC45ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW4tYm90dG9tOiAuMmVtOworfQorCit0YWJsZS50cmVldGFibGUgdGJvZHkgdHIgdGQgeworICBjdXJzb3I6IGRlZmF1bHQ7CisgIHBhZGRpbmc6IC4zZW0gMWVtOworfQorCit0YWJsZS50cmVldGFibGUgc3BhbiB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nOiAuMmVtIDAgLjJlbSAxLjVlbTsKK30KKyovCisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZpbGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FRQUFBQzEramZxQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFEb1NVUkJWQmdaQmNFeGJsTkJHQWJBMmNlZWdUUkJ1SUtPZ2lpaFNaTlRjQzVMVUhBaWhOSlIwa0dLQ0RjWUpZNkQzLzc3TWRPaW5UdnpBZ0N3OHlzVGhJdm4vVm9qSXlNakl5UFArYlMxc1VRSVYyczk1cEJERHZtYlAvbWRrZnQ4M3RwWWd1WnE1SmgvT2VhWWgreXp5OGhUSHZObGF4Tk5jem0rbGE5T1RsYXIxVWRBLytDMkE0dHJSQ25EM2pTOEJCMW9icTJHazZHVTZRYlFBUzRCVWFZU1FBZjRiaGhLS1RGZEF6ckFPd0F4RVVBSCtLRU0wMVNZM2dNNndCc0VBUUIwZ0orbWFab0MzZ0k2aVBZYUFJQkpzaVJtSFUwQUFMT2VGQzNhSzJjV0FBQ1VYZTcrQXdPMGxjOWVUSFlUQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZvbGRlciB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQUdyU1VSQlZEakx4Wk83aWhSQkZJYS82dTBaVzdHSEJVVjBVUVFUWnpkM1FkaE1ReE9md01SWEVBTkJNTlFYME16QXpGQXdFekh3QVJiTkZEZHdFZDMxTWozWDdhNnVPcjlCdHpOallqS0JKNm5pY1A3djNLcWNKRmF4aEJWdFpVQUs4T0hsbGQyc3Q3WGwzREpQVk9OUCt6RVVWNEhxTDVVRFlIcjV4dnVRQWpnbC9RczdUenZPT1ZBanhqbEMrZVBTd2U2RGZiVmVnTFZ1VDRyMTRlVHI2enZBOHhTQW9CTHp4NnB2ajRsK0RaSWV6dVZrRzlmWTJIN1lSUUlNWklCd3ljbXpIMS9zM0Y4QWFwZklQTkYza1FrNytrdzlQV0J5K0laT2RnNVVnM21rQUFUeS90MHVzb3Z6R2VDVVdUakN6MEIrU2owZWtmZHZrWjNhYkJ2K1U0R2FDdEoxaUVtNkFOUUo2ZkV6ckcvZW5nY0t3L3dYUXZFS3hTRUtReFJHS0U3SXp0K0RTaXdCSk1VU203MXJndU1ZaFFLckJ5Z09JUlN0ZjRUaUZGUkJ2YlJHS2lRTFdQMjl5UlNIS0JUdGZkQm1IczBCVXBndnRnRjR5UkZSK05VS2kwWFpjWWpDZUNHMnNta3pMQUhrYlJCbVAwL1VrMjZPNVluVUFjdEJwMUdzQUkrUzVuUkpKSmFsNUsxYUFNcnEwZDZUbTl1STZ6anlmNzVkQWU2dHgvU3NXZUQvL28yL0FiNklIMy9oMjVwT0FBQUFBRWxGVGtTdVFtQ0MpOworfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBSGxKUkVGVWVOcmNVMXNOZ0RBUTZ3Z21jQU0yTUlDR0dsZzFnSm5OeldRY3Z3UUd5MWo0b1VsLzd0SDBtcHd6TTdTZ1F5TytFWkFVV2gyTWtrelNXaEp3dVJBbEhZc0p3RXd5dnMxZ0FCRHV6cW9KY1R3NXF4YUlKTjBiZ1FSZ0lqbmxtbjFoZVNPNVBFNlkyWVhlKzVDcjUraCsrZ3MxMkFjQVM2RlMrN1lPc2o0QUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIRkpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZndmhmYTI5djNNekF3T09EUmM2Q3lzdElSYnhpMHQ3ZmpESmpLeWtwR1lyd3dpMWh4bkxIUTN0NytqSUdCUVJKSjZIbGxaYVVVS1lFWVJZQlBPQjBnQlNoS3dLR0EvLy8vNDhWdGJXMy84Y2xUbkJJSDNnQ0trekpnQUd2QlgwZERtMHNDQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKKworCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5zZWxlY3RlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuYWNjZXB0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2EzYmNlNDsKKyAgY29sb3I6ICNmZmYKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmNvbGxhcHNlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZwSlJFRlVlTnBpL1AvL1B3TWxnSEhBRFdENC8vOC9OdHlBUXh3RDQ1S0FBUWRLRGZqLy8vLy8vZmdNSXNZQVpJTXcxREtSRUZ3T0RBd00vNGtOUktxNjRBQURBNE1qRkRPUTZnS3lZNEhvZE1BNDlQTUN4UVlBQmdBVllIc2p5WjF4N1FBQUFBQkpSVTVFcmtKZ2dnPT0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQuYWNjZXB0IHRkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3gtcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGdEpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZnaVFFTkRBd00vL0hnQm1MQ0FGL0FNQkxqQlVlaXhmLy8vNDhMNy8rUEN2WmpVNGZQQUFjMEF4eXdxY01YQ3dlZ0dKMU5ja0w2ang1d3BLWUR4cUdYRWtrQ2dBRUFtcnFCSWVqZGduZ0FBQUFBU1VWT1JLNUNZSUk9KTsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy8uanNoaW50cmMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvLmpzaGludHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMmYzZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvLmpzaGludHJjCkBAIC0wLDAgKzEsMTEgQEAKK3sKKyAgImN1cmx5IiA6IGZhbHNlLAorICAicHJlZGVmIiA6IFsgIiQiLCJsaWJ0b2FzdGVyIiwgInByZXR0eVByaW50IiBdLAorICAiZXFudWxsIjogdHJ1ZSwKKyAgInBsdXNwbHVzIiA6IGZhbHNlLAorICAiYnJvd3NlciIgOiB0cnVlLAorICAianF1ZXJ5IiA6IHRydWUsCisgICJkZXZlbCIgOiB0cnVlLAorICAidW51c2VkIiA6IHRydWUsCisgICJtYXhlcnIiIDogNjAKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9iYXNlLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1ZTYxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9iYXNlLmpzCkBAIC0wLDAgKzEsMjMxIEBACisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIGJhc2VQYWdlSW5pdChjdHgpIHsKKworICB2YXIgbmV3QnVpbGRCdXR0b24gPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiIpOworICB2YXIgbmV3QnVpbGRUYXJnZXRJbnB1dDsKKyAgdmFyIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG47CisgIHZhciBwcm9qZWN0TmFtZUZvcm0gPSAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIik7CisgIHZhciBwcm9qZWN0TmFtZSA9ICQoIiNwcm9qZWN0LW5hbWUiKTsKKyAgdmFyIHByb2plY3ROYW1lRm9ybVRvZ2dsZSA9ICQoIiNwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSIpOworICB2YXIgcHJvamVjdE5hbWVDaGFuZ2VDYW5jZWwgPSAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1jYW5jZWwiKTsKKworICAvKiBpbml0aWFsbHkgdGhlIGN1cnJlbnQgcHJvamVjdCBpcyB1c2VkIHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZSBuZXcgYnVpbGQKKyAgICogYnV0dG9uIGluIHRvcCByaWdodCBuYXYKKyAgICovCisgIHZhciBzZWxlY3RlZFByb2plY3QgPSBsaWJ0b2FzdGVyLmN0eDsKKworICB2YXIgc2VsZWN0ZWRUYXJnZXQ7CisKKyAgdmFyIG5ld0J1aWxkUHJvamVjdElucHV0ID0gJCgiI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QtbmFtZS1pbnB1dCIpOworICB2YXIgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0biA9ICQoIiNuZXctYnVpbGQtYnV0dG9uICNzYXZlLXByb2plY3QtYnV0dG9uIik7CisKKyAgLyogUHJvamVjdCBuYW1lIGNoYW5nZSBmdW5jdGlvbmFsaXR5ICovCisgIHByb2plY3ROYW1lRm9ybVRvZ2dsZS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICAkKHRoaXMpLmFkZChwcm9qZWN0TmFtZSkuaGlkZSgpOworICAgIHByb2plY3ROYW1lRm9ybS5mYWRlSW4oKTsKKyAgfSk7CisKKyAgcHJvamVjdE5hbWVDaGFuZ2VDYW5jZWwuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgcHJvamVjdE5hbWVGb3JtLmhpZGUoKTsKKyAgICBwcm9qZWN0TmFtZS5hZGQocHJvamVjdE5hbWVGb3JtVG9nZ2xlKS5mYWRlSW4oKTsKKyAgfSk7CisKKyAgJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgdmFyIG5ld1Byb2plY3ROYW1lID0gJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtaW5wdXQiKS52YWwoKTsKKworICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgcHJvamVjdE5hbWU6IG5ld1Byb2plY3ROYW1lIH0sZnVuY3Rpb24gKCl7CisKKyAgICAgIHByb2plY3ROYW1lLnRleHQobmV3UHJvamVjdE5hbWUpOworICAgICAgbGlidG9hc3Rlci5jdHgucHJvamVjdE5hbWUgPSBuZXdQcm9qZWN0TmFtZTsKKyAgICAgIHByb2plY3ROYW1lQ2hhbmdlQ2FuY2VsLmNsaWNrKCk7CisgICAgfSk7CisgIH0pOworCisgIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKTsKKworICAkKCIjcHJvamVjdC10b3BiYXIgLm5hdiBsaSBhIikuZWFjaChmdW5jdGlvbigpeworICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPT09ICQodGhpcykuYXR0cignaHJlZicpKQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnYWN0aXZlJyk7CisgICAgZWxzZQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CisgIH0pOworCisgIGlmICgkKCIudG90YWwtYnVpbGRzIikubGVuZ3RoICE9PSAwKXsKKyAgICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICAgIGlmIChwcmpJbmZvLmNvbXBsZXRlZGJ1aWxkcykKKyAgICAgICAgJCgiLnRvdGFsLWJ1aWxkcyIpLnRleHQocHJqSW5mby5jb21wbGV0ZWRidWlsZHMubGVuZ3RoKTsKKyAgICB9KTsKKyAgfQorCisgIC8qIEhpZGUgdGhlIGJ1dHRvbiBpZiB3ZSdyZSBvbiB0aGUgcHJvamVjdCxuZXdwcm9qZWN0IG9yIGltcG9ydGx5YWVyIHBhZ2UKKyAgICogb3IgaWYgdGhlcmUgYXJlIG5vIHByb2plY3RzIHlldCBkZWZpbmVkCisgICAqIG9ubHkgc2hvdyBpZiB0aGVyZSBpc24ndCBhbHJlYWR5IGEgYnVpbGQtdGFyZ2V0LWlucHV0IGFscmVhZHkKKyAgICovCisgIGlmIChjdHgubnVtUHJvamVjdHMgPiAwICYmCisgICAgICBjdHguY3VycmVudFVybC5zZWFyY2goJ25ld3Byb2plY3QnKSA8IDAgJiYKKyAgICAgICQoIi5idWlsZC10YXJnZXQtaW5wdXQiKS5sZW5ndGggPT09IDEpIHsKKworICAgIG5ld0J1aWxkVGFyZ2V0SW5wdXQgPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYnVpbGQtdGFyZ2V0LWlucHV0Iik7CisgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0biA9ICQoIiNuZXctYnVpbGQtYnV0dG9uIikuZmluZCgiLmJ1aWxkLWJ1dHRvbiIpOworCisgICAgX3NldHVwTmV3QnVpbGRCdXR0b24oKTsKKyAgICBuZXdCdWlsZEJ1dHRvbi5zaG93KCk7CisgIH0gZWxzZSBpZiAoJCgiLmJ1aWxkLXRhcmdldC1pbnB1dCIpLmxlbmd0aCA+IDApIHsKKyAgICBuZXdCdWlsZFRhcmdldElucHV0ID0gJCgiI3Byb2plY3QtdG9wYmFyIC5idWlsZC10YXJnZXQtaW5wdXQiKTsKKyAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuID0gJCgiI3Byb2plY3QtdG9wYmFyIC5idWlsZC1idXR0b24iKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBIaWRlIHRoZSBjaGFuZ2UgcHJvamVjdCBpY29uIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgcHJvamVjdCAqLworICBpZiAoY3R4Lm51bVByb2plY3RzID09PSAxKSB7CisgICAgJCgnI3Byb2plY3QgLmljb24tcGVuY2lsJykuaGlkZSgpOworICB9CisKKyAgLyogSWYgd2UgaGF2ZSBhIHByb2plY3Qgc2V0dXAgdGhlIHR5cGVhaGVhZCAqLworICBpZiAoc2VsZWN0ZWRQcm9qZWN0LnJlY2lwZXNUeXBlQWhlYWRVcmwpeworICAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChuZXdCdWlsZFRhcmdldElucHV0LCBzZWxlY3RlZFByb2plY3QucmVjaXBlc1R5cGVBaGVhZFVybCwgeyBmb3JtYXQ6ICJqc29uIiB9LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgc2VsZWN0ZWRUYXJnZXQgPSBpdGVtOworICAgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0pOworICB9CisKKyAgbmV3QnVpbGRUYXJnZXRJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09PSAwKSB7CisgICAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgfSBlbHNlIHsKKyAgICAgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICB9CisgIH0pOworCisgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4uY2xpY2soZnVuY3Rpb24gKGUpIHsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICBpZiAoIW5ld0J1aWxkVGFyZ2V0SW5wdXQudmFsKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBXZSB1c2UgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBmaWVsZCBzbyBhcyB0byBtYWludGFpbiBhbnkgY29tbWFuZCBhbHNvCisgICAgICogYWRkZWQgZS5nLiBjb3JlLWltYWdlLW1pbmltYWw6Y2xlYW4KKyAgICAgKi8KKyAgICBzZWxlY3RlZFRhcmdldCA9IHsgbmFtZTogbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoKSB9OworCisgICAgLyogRmlyZSBvZmYgdGhlIGJ1aWxkICovCisgICAgbGlidG9hc3Rlci5zdGFydEFCdWlsZChzZWxlY3RlZFByb2plY3QucHJvamVjdEJ1aWxkc1VybCwKKyAgICAgIHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQsIHNlbGVjdGVkVGFyZ2V0Lm5hbWUsIGZ1bmN0aW9uKCl7CisgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShzZWxlY3RlZFByb2plY3QucHJvamVjdEJ1aWxkc1VybCk7CisgICAgfSwgbnVsbCk7CisgIH0pOworCisgIGZ1bmN0aW9uIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKSB7CisgICAgaWYgKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8oc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RQYWdlVXJsLAorICAgICAgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEubWFjaGluZSA9PT0gbnVsbCB8fCBkYXRhLm1hY2hpbmUubmFtZSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEubGF5ZXJzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgIC8qIHdlIGNhbid0IGJ1aWxkIGFueXRoaW5nIHdpdGggb3V0IGEgbWFjaGluZSBhbmQgc29tZSBsYXllcnMgKi8KKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjdGFyZ2V0cy1mb3JtIikuaGlkZSgpOworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uIC5hbGVydCIpLnNob3coKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjdGFyZ2V0cy1mb3JtIikuc2hvdygpOworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uIC5hbGVydCIpLmhpZGUoKTsKKworICAgICAgICAgIC8qIHdlIGNhbiBidWlsZCB0aGlzIHByb2plY3Q7IGVuYWJsZSBpbnB1dCBmaWVsZHMgKi8KKyAgICAgICAgICBuZXdCdWlsZFRhcmdldElucHV0LnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgfQorICAgICAgfSwgbnVsbCk7CisgIH0KKworICAvKiBTZXR1cCBOZXcgYnVpbGQgYnV0dG9uIGluIHRoZSB0b3AgbmF2IGJhciAqLworICBmdW5jdGlvbiBfc2V0dXBOZXdCdWlsZEJ1dHRvbigpIHsKKworICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50IHByb2plY3QgdGhlbiBwcmVzZW50IHRoZSBzZXQgcHJvamVjdAorICAgICAqIGZvcm0uCisgICAgICovCisgICAgaWYgKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgJCgnI2NoYW5nZS1wcm9qZWN0LWZvcm0nKS5zaG93KCk7CisgICAgICAkKCcjcHJvamVjdCAuaWNvbi1wZW5jaWwnKS5oaWRlKCk7CisgICAgfQorCisgICAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKG5ld0J1aWxkUHJvamVjdElucHV0LCBzZWxlY3RlZFByb2plY3QucHJvamVjdHNUeXBlQWhlYWRVcmwsIHsgZm9ybWF0IDogImpzb24iIH0sIGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAvKiBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQgYSBwcm9qZWN0ICovCisgICAgICBuZXdCdWlsZFByb2plY3RTYXZlQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICBzZWxlY3RlZFByb2plY3QgPSBpdGVtOworICAgIH0pOworCisgICAgLyogQW55IHR5cGluZyBpbiB0aGUgaW5wdXQgYXBhcnQgZnJvbSBlbnRlciBrZXkgaXMgZ29pbmcgdG8gaW52YWxpZGF0ZQorICAgICAqIHRoZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIHNldCBieSBzZWxlY3RpbmcgYSBzdWdnZXN0aW9uIGZyb20gdGhlIHR5cGVhaGVhZAorICAgICAqLworICAgIG5ld0J1aWxkUHJvamVjdElucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIG5ld0J1aWxkUHJvamVjdFNhdmVCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICB9KTsKKworCisgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICBzZWxlY3RlZFByb2plY3QucHJvamVjdElkID0gc2VsZWN0ZWRQcm9qZWN0LmlkOworICAgICAgLyogVXBkYXRlIHRoZSB0eXBlYWhlYWQgcHJvamVjdF9pZCBwYXJhbWF0ZXIgKi8KKyAgICAgIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKTsKKworICAgICAgbmV3QnVpbGRUYXJnZXRJbnB1dC5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworCisgICAgICAvKiBXZSd2ZSBnb3QgYSBuZXcgcHJvamVjdCBzbyBub3cgd2UgbmVlZCB0byB1cGRhdGUgdGhlCisgICAgICAgKiB0YXJnZXQgdXJscy4gV2UgY2FuIGdldCB0aGlzIGZyb20gdGhlIG5ldyBwcm9qZWN0J3MgaW5mbworICAgICAgICovCisgICAgICAkLmdldEpTT04oc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RQYWdlVXJsLCB7IGZvcm1hdDogImpzb24iIH0sCisgICAgICAgIGZ1bmN0aW9uKHByb2plY3RJbmZvKXsKKyAgICAgICAgICAvKiBVcGRhdGUgdGhlIHR5cGVhaGVhZCB0byB1c2UgdGhlIG5ldyBzZWxlY3RlZFByb2plY3QgKi8KKyAgICAgICAgICBzZWxlY3RlZFByb2plY3QgPSBwcm9qZWN0SW5mbzsKKworICAgICAgICAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChuZXdCdWlsZFRhcmdldElucHV0LCBzZWxlY3RlZFByb2plY3QucmVjaXBlc1R5cGVBaGVhZFVybCwgeyBmb3JtYXQ6ICJqc29uIiB9LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgICAgICAvKiBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQgYSB0YXJnZXQgKi8KKyAgICAgICAgICAgICAgc2VsZWN0ZWRUYXJnZXQgPSBpdGVtOworICAgICAgICAgICAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgfSk7CisKKyAgICAgIH0pOworICAgICAgbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoIiIpOworCisgICAgICAvKiBzZXQgdXAgbmV3IGZvcm0gYXNwZWN0ICovCisgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCBhIikudGV4dChzZWxlY3RlZFByb2plY3QubmFtZSkuYXR0cignaHJlZicsIHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0UGFnZVVybCk7CisgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYWxlcnQgYSIpLmF0dHIoJ2hyZWYnLCBzZWxlY3RlZFByb2plY3QucHJvamVjdFBhZ2VVcmwpOworICAgICAgJCgiI3Byb2plY3QgLmljb24tcGVuY2lsIikuc2hvdygpOworCisgICAgICAkKCIjY2hhbmdlLXByb2plY3QtZm9ybSIpLnNsaWRlVXAoeyAnY29tcGxldGUnIDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0Iikuc2hvdygpOworICAgICAgfX0pOworICAgIH0pOworCisgICAgJCgnI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QgLmljb24tcGVuY2lsJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgbmV3QnVpbGRQcm9qZWN0SW5wdXQudmFsKCQoIiNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0IGEiKS50ZXh0KCkpOworICAgICAgJCgiI2NhbmNlbC1jaGFuZ2UtcHJvamVjdCIpLnNob3coKTsKKyAgICAgICQodGhpcykucGFyZW50KCkuaGlkZSgpOworICAgICAgJCgiI2NoYW5nZS1wcm9qZWN0LWZvcm0iKS5zbGlkZURvd24oKTsKKyAgICB9KTsKKworICAgICQoIiNuZXctYnVpbGQtYnV0dG9uICNjYW5jZWwtY2hhbmdlLXByb2plY3QiKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAkKCIjY2hhbmdlLXByb2plY3QtZm9ybSIpLmhpZGUoZnVuY3Rpb24gKCkgeworICAgICAgICAkKCcjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCcpLnNob3coKTsKKyAgICAgIH0pOworCisgICAgICBuZXdCdWlsZFByb2plY3RJbnB1dC52YWwoIiIpOworICAgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgIH0pOworCisgICAgLyogS2VlcCB0aGUgZHJvcGRvd24gb3BlbiBldmVuIHVubGVzcyB3ZSBjbGljayBvdXRzaWRlIHRoZSBkcm9wZG93biBhcmVhICovCisgICAgJCgiLm5ldy1idWlsZCIpLmNsaWNrIChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworICB9OworCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYm9vdHN0cmFwLm1pbi5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9ib290c3RyYXAubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODI1OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYm9vdHN0cmFwLm1pbi5qcwpAQCAtMCwwICsxLDYgQEAKKy8qIQorKiBCb290c3RyYXAuanMgYnkgQGZhdCAmIEBtZG8KKyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLgorKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CisqLworIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtlKGZ1bmN0aW9uKCl7ZS5zdXBwb3J0LnRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLHQ9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LG47Zm9yKG4gaW4gdClpZihlLnN0eWxlW25dIT09dW5kZWZpbmVkKXJldHVybiB0W25dfSgpO3JldHVybiBlJiZ7ZW5kOmV9fSgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLG49ZnVuY3Rpb24obil7ZShuKS5vbigiY2xpY2siLHQsdGhpcy5jbG9zZSl9O24ucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHMoKXtpLnRyaWdnZXIoImNsb3NlZCIpLnJlbW92ZSgpfXZhciBuPWUodGhpcykscj1uLmF0dHIoImRhdGEtdGFyZ2V0IiksaTtyfHwocj1uLmF0dHIoImhyZWYiKSxyPXImJnIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSksaT1lKHIpLHQmJnQucHJldmVudERlZmF1bHQoKSxpLmxlbmd0aHx8KGk9bi5oYXNDbGFzcygiYWxlcnQiKT9uOm4ucGFyZW50KCkpLGkudHJpZ2dlcih0PWUuRXZlbnQoImNsb3NlIikpO2lmKHQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2kucmVtb3ZlQ2xhc3MoImluIiksZS5zdXBwb3J0LnRyYW5zaXRpb24mJmkuaGFzQ2xhc3MoImZhZGUiKT9pLm9uKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxzKTpzKCl9O3ZhciByPWUuZm4uYWxlcnQ7ZS5mbi5hbGVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiYWxlcnQiKTtpfHxyLmRhdGEoImFsZXJ0IixpPW5ldyBuKHRoaXMpKSx0eXBlb2YgdD09InN0cmluZyImJmlbdF0uY2FsbChyKX0pfSxlLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPW4sZS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYWxlcnQ9cix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suYWxlcnQuZGF0YS1hcGkiLHQsbi5wcm90b3R5cGUuY2xvc2UpfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLmJ1dHRvbi5kZWZhdWx0cyxuKX07dC5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ImRpc2FibGVkIixuPXRoaXMuJGVsZW1lbnQscj1uLmRhdGEoKSxpPW4uaXMoImlucHV0Iik/InZhbCI6Imh0bWwiO2UrPSJUZXh0IixyLnJlc2V0VGV4dHx8bi5kYXRhKCJyZXNldFRleHQiLG5baV0oKSksbltpXShyW2VdfHx0aGlzLm9wdGlvbnNbZV0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPT0ibG9hZGluZ1RleHQiP24uYWRkQ2xhc3ModCkuYXR0cih0LHQpOm4ucmVtb3ZlQ2xhc3ModCkucmVtb3ZlQXR0cih0KX0sMCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zLXJhZGlvIl0nKTtlJiZlLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBuPWUuZm4uYnV0dG9uO2UuZm4uYnV0dG9uPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJidXR0b24iKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoImJ1dHRvbiIsaT1uZXcgdCh0aGlzLHMpKSxuPT0idG9nZ2xlIj9pLnRvZ2dsZSgpOm4mJmkuc2V0U3RhdGUobil9KX0sZS5mbi5idXR0b24uZGVmYXVsdHM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sZS5mbi5idXR0b24uQ29uc3RydWN0b3I9dCxlLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYnV0dG9uPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmJ1dHRvbi5kYXRhLWFwaSIsIltkYXRhLXRvZ2dsZV49YnV0dG9uXSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0LnRhcmdldCk7bi5oYXNDbGFzcygiYnRuIil8fChuPW4uY2xvc2VzdCgiLmJ0biIpKSxuLmJ1dHRvbigidG9nZ2xlIil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9bix0aGlzLm9wdGlvbnMucGF1c2U9PSJob3ZlciImJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIiLGUucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUiLGUucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O3QucHJvdG90eXBlPXtjeWNsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChlLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxnZXRBY3RpdmVJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSx0aGlzLiRpdGVtcz10aGlzLiRhY3RpdmUucGFyZW50KCkuY2hpbGRyZW4oKSx0aGlzLiRpdGVtcy5pbmRleCh0aGlzLiRhY3RpdmUpfSx0bzpmdW5jdGlvbih0KXt2YXIgbj10aGlzLmdldEFjdGl2ZUluZGV4KCkscj10aGlzO2lmKHQ+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fHQ8MClyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZCIsZnVuY3Rpb24oKXtyLnRvKHQpfSk6bj09dD90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKHQ+bj8ibmV4dCI6InByZXYiLGUodGhpcy4kaXRlbXNbdF0pKX0scGF1c2U6ZnVuY3Rpb24odCl7cmV0dXJuIHR8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCYmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXJldHVybjtyZXR1cm4gdGhpcy5zbGlkZSgibmV4dCIpfSxwcmV2OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXJldHVybjtyZXR1cm4gdGhpcy5zbGlkZSgicHJldiIpfSxzbGlkZTpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksaT1ufHxyW3RdKCkscz10aGlzLmludGVydmFsLG89dD09Im5leHQiPyJsZWZ0IjoicmlnaHQiLHU9dD09Im5leHQiPyJmaXJzdCI6Imxhc3QiLGE9dGhpcyxmO3RoaXMuc2xpZGluZz0hMCxzJiZ0aGlzLnBhdXNlKCksaT1pLmxlbmd0aD9pOnRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0iKVt1XSgpLGY9ZS5FdmVudCgic2xpZGUiLHtyZWxhdGVkVGFyZ2V0OmlbMF0sZGlyZWN0aW9uOm99KTtpZihpLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm47dGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgmJih0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7dmFyIHQ9ZShhLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbYS5nZXRBY3RpdmVJbmRleCgpXSk7dCYmdC5hZGRDbGFzcygiYWN0aXZlIil9KSk7aWYoZS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIikpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihmKTtpZihmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtpLmFkZENsYXNzKHQpLGlbMF0ub2Zmc2V0V2lkdGgsci5hZGRDbGFzcyhvKSxpLmFkZENsYXNzKG8pLHRoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2kucmVtb3ZlQ2xhc3MoW3Qsb10uam9pbigiICIpKS5hZGRDbGFzcygiYWN0aXZlIiksci5yZW1vdmVDbGFzcyhbImFjdGl2ZSIsb10uam9pbigiICIpKSxhLnNsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe2EuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfSwwKX0pfWVsc2V7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpO2lmKGYuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3IucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuc2xpZGluZz0hMSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNsaWQiKX1yZXR1cm4gcyYmdGhpcy5jeWNsZSgpLHRoaXN9fTt2YXIgbj1lLmZuLmNhcm91c2VsO2UuZm4uY2Fyb3VzZWw9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoImNhcm91c2VsIikscz1lLmV4dGVuZCh7fSxlLmZuLmNhcm91c2VsLmRlZmF1bHRzLHR5cGVvZiBuPT0ib2JqZWN0IiYmbiksbz10eXBlb2Ygbj09InN0cmluZyI/bjpzLnNsaWRlO2l8fHIuZGF0YSgiY2Fyb3VzZWwiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJudW1iZXIiP2kudG8obik6bz9pW29dKCk6cy5pbnRlcnZhbCYmaS5wYXVzZSgpLmN5Y2xlKCl9KX0sZS5mbi5jYXJvdXNlbC5kZWZhdWx0cz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciJ9LGUuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9dCxlLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5jYXJvdXNlbD1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dIixmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHIsaT1lKG4uYXR0cigiZGF0YS10YXJnZXQiKXx8KHI9bi5hdHRyKCJocmVmIikpJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLHM9ZS5leHRlbmQoe30saS5kYXRhKCksbi5kYXRhKCkpLG87aS5jYXJvdXNlbChzKSwobz1uLmF0dHIoImRhdGEtc2xpZGUtdG8iKSkmJmkuZGF0YSgiY2Fyb3VzZWwiKS5wYXVzZSgpLnRvKG8pLmN5Y2xlKCksdC5wcmV2ZW50RGVmYXVsdCgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCxuKXt0aGlzLiRlbGVtZW50PWUodCksdGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uY29sbGFwc2UuZGVmYXVsdHMsbiksdGhpcy5vcHRpb25zLnBhcmVudCYmKHRoaXMuJHBhcmVudD1lKHRoaXMub3B0aW9ucy5wYXJlbnQpKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxkaW1lbnNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJ3aWR0aCIpO3JldHVybiBlPyJ3aWR0aCI6ImhlaWdodCJ9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdCxuLHIsaTtpZih0aGlzLnRyYW5zaXRpb25pbmd8fHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpcmV0dXJuO3Q9dGhpcy5kaW1lbnNpb24oKSxuPWUuY2FtZWxDYXNlKFsic2Nyb2xsIix0XS5qb2luKCItIikpLHI9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuZmluZCgiPiAuYWNjb3JkaW9uLWdyb3VwID4gLmluIik7aWYociYmci5sZW5ndGgpe2k9ci5kYXRhKCJjb2xsYXBzZSIpO2lmKGkmJmkudHJhbnNpdGlvbmluZylyZXR1cm47ci5jb2xsYXBzZSgiaGlkZSIpLGl8fHIuZGF0YSgiY29sbGFwc2UiLG51bGwpfXRoaXMuJGVsZW1lbnRbdF0oMCksdGhpcy50cmFuc2l0aW9uKCJhZGRDbGFzcyIsZS5FdmVudCgic2hvdyIpLCJzaG93biIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50W3RdKHRoaXMuJGVsZW1lbnRbMF1bbl0pfSxoaWRlOmZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy50cmFuc2l0aW9uaW5nfHwhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKSlyZXR1cm47dD10aGlzLmRpbWVuc2lvbigpLHRoaXMucmVzZXQodGhpcy4kZWxlbWVudFt0XSgpKSx0aGlzLnRyYW5zaXRpb24oInJlbW92ZUNsYXNzIixlLkV2ZW50KCJoaWRlIiksImhpZGRlbiIpLHRoaXMuJGVsZW1lbnRbdF0oMCl9LHJlc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGltZW5zaW9uKCk7cmV0dXJuIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIilbdF0oZXx8ImF1dG8iKVswXS5vZmZzZXRXaWR0aCx0aGlzLiRlbGVtZW50W2UhPT1udWxsPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlIiksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcyxzPWZ1bmN0aW9uKCl7bi50eXBlPT0ic2hvdyImJmkucmVzZXQoKSxpLnRyYW5zaXRpb25pbmc9MCxpLiRlbGVtZW50LnRyaWdnZXIocil9O3RoaXMuJGVsZW1lbnQudHJpZ2dlcihuKTtpZihuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLnRyYW5zaXRpb25pbmc9MSx0aGlzLiRlbGVtZW50W3RdKCJpbiIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJjb2xsYXBzZSIpP3RoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxzKTpzKCl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfX07dmFyIG49ZS5mbi5jb2xsYXBzZTtlLmZuLmNvbGxhcHNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJjb2xsYXBzZSIpLHM9ZS5leHRlbmQoe30sZS5mbi5jb2xsYXBzZS5kZWZhdWx0cyxyLmRhdGEoKSx0eXBlb2Ygbj09Im9iamVjdCImJm4pO2l8fHIuZGF0YSgiY29sbGFwc2UiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5jb2xsYXBzZS5kZWZhdWx0cz17dG9nZ2xlOiEwfSxlLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yPXQsZS5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uY29sbGFwc2U9bix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suY29sbGFwc2UuZGF0YS1hcGkiLCJbZGF0YS10b2dnbGU9Y29sbGFwc2VdIixmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHIsaT1uLmF0dHIoImRhdGEtdGFyZ2V0Iil8fHQucHJldmVudERlZmF1bHQoKXx8KHI9bi5hdHRyKCJocmVmIikpJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikscz1lKGkpLmRhdGEoImNvbGxhcHNlIik/InRvZ2dsZSI6bi5kYXRhKCk7bltlKGkpLmhhc0NsYXNzKCJpbiIpPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlZCIpLGUoaSkuY29sbGFwc2Uocyl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7ZSgiLmRyb3Bkb3duLWJhY2tkcm9wIikucmVtb3ZlKCksZSh0KS5lYWNoKGZ1bmN0aW9uKCl7aShlKHRoaXMpKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9ZnVuY3Rpb24gaSh0KXt2YXIgbj10LmF0dHIoImRhdGEtdGFyZ2V0IikscjtufHwobj10LmF0dHIoImhyZWYiKSxuPW4mJi8jLy50ZXN0KG4pJiZuLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpLHI9biYmZShuKTtpZighcnx8IXIubGVuZ3RoKXI9dC5wYXJlbnQoKTtyZXR1cm4gcn12YXIgdD0iW2RhdGEtdG9nZ2xlPWRyb3Bkb3duXSIsbj1mdW5jdGlvbih0KXt2YXIgbj1lKHQpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdGhpcy50b2dnbGUpO2UoImh0bWwiKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLGZ1bmN0aW9uKCl7bi5wYXJlbnQoKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9O24ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLHRvZ2dsZTpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHMsbztpZihuLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXJldHVybjtyZXR1cm4gcz1pKG4pLG89cy5oYXNDbGFzcygib3BlbiIpLHIoKSxvfHwoIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmUoJzxkaXYgY2xhc3M9ImRyb3Bkb3duLWJhY2tkcm9wIi8+JykuaW5zZXJ0QmVmb3JlKGUodGhpcykpLm9uKCJjbGljayIscikscy50b2dnbGVDbGFzcygib3BlbiIpKSxuLmZvY3VzKCksITF9LGtleWRvd246ZnVuY3Rpb24obil7dmFyIHIscyxvLHUsYSxmO2lmKCEvKDM4fDQwfDI3KS8udGVzdChuLmtleUNvZGUpKXJldHVybjtyPWUodGhpcyksbi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCk7aWYoci5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSlyZXR1cm47dT1pKHIpLGE9dS5oYXNDbGFzcygib3BlbiIpO2lmKCFhfHxhJiZuLmtleUNvZGU9PTI3KXJldHVybiBuLndoaWNoPT0yNyYmdS5maW5kKHQpLmZvY3VzKCksci5jbGljaygpO3M9ZSgiW3JvbGU9bWVudV0gbGk6bm90KC5kaXZpZGVyKTp2aXNpYmxlIGEiLHUpO2lmKCFzLmxlbmd0aClyZXR1cm47Zj1zLmluZGV4KHMuZmlsdGVyKCI6Zm9jdXMiKSksbi5rZXlDb2RlPT0zOCYmZj4wJiZmLS0sbi5rZXlDb2RlPT00MCYmZjxzLmxlbmd0aC0xJiZmKyssfmZ8fChmPTApLHMuZXEoZikuZm9jdXMoKX19O3ZhciBzPWUuZm4uZHJvcGRvd247ZS5mbi5kcm9wZG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiZHJvcGRvd24iKTtpfHxyLmRhdGEoImRyb3Bkb3duIixpPW5ldyBuKHRoaXMpKSx0eXBlb2YgdD09InN0cmluZyImJmlbdF0uY2FsbChyKX0pfSxlLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPW4sZS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uZHJvcGRvd249cyx0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLHIpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biBmb3JtIixmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfSkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIix0LG4ucHJvdG90eXBlLnRvZ2dsZSkub24oImtleWRvd24uZHJvcGRvd24uZGF0YS1hcGkiLHQrIiwgW3JvbGU9bWVudV0iLG4ucHJvdG90eXBlLmtleWRvd24pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy5vcHRpb25zPW4sdGhpcy4kZWxlbWVudD1lKHQpLmRlbGVnYXRlKCdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJywiY2xpY2suZGlzbWlzcy5tb2RhbCIsZS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMub3B0aW9ucy5yZW1vdGUmJnRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWJvZHkiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCx0b2dnbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmlzU2hvd24/ImhpZGUiOiJzaG93Il0oKX0sc2hvdzpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1lLkV2ZW50KCJzaG93Iik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKG4pO2lmKHRoaXMuaXNTaG93bnx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5pc1Nob3duPSEwLHRoaXMuZXNjYXBlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBuPWUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0LiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7dC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fHQuJGVsZW1lbnQuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksdC4kZWxlbWVudC5zaG93KCksbiYmdC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCx0LiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIiwhMSksdC5lbmZvcmNlRm9jdXMoKSxuP3QuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe3QuJGVsZW1lbnQuZm9jdXMoKS50cmlnZ2VyKCJzaG93biIpfSk6dC4kZWxlbWVudC5mb2N1cygpLnRyaWdnZXIoInNob3duIil9KX0saGlkZTpmdW5jdGlvbih0KXt0JiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dGhpczt0PWUuRXZlbnQoImhpZGUiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIodCk7aWYoIXRoaXMuaXNTaG93bnx8dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksZShkb2N1bWVudCkub2ZmKCJmb2N1c2luLm1vZGFsIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiaW4iKS5hdHRyKCJhcmlhLWhpZGRlbiIsITApLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy5oaWRlV2l0aFRyYW5zaXRpb24oKTp0aGlzLmhpZGVNb2RhbCgpfSxlbmZvcmNlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UoZG9jdW1lbnQpLm9uKCJmb2N1c2luLm1vZGFsIixmdW5jdGlvbihlKXt0LiRlbGVtZW50WzBdIT09ZS50YXJnZXQmJiF0LiRlbGVtZW50LmhhcyhlLnRhcmdldCkubGVuZ3RoJiZ0LiRlbGVtZW50LmZvY3VzKCl9KX0sZXNjYXBlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKCJrZXl1cC5kaXNtaXNzLm1vZGFsIixmdW5jdGlvbih0KXt0LndoaWNoPT0yNyYmZS5oaWRlKCl9KTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXl1cC5kaXNtaXNzLm1vZGFsIil9LGhpZGVXaXRoVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC4kZWxlbWVudC5vZmYoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0LmhpZGVNb2RhbCgpfSw1MDApO3RoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKSx0LmhpZGVNb2RhbCgpfSl9LGhpZGVNb2RhbDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe2UucmVtb3ZlQmFja2Ryb3AoKSxlLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbiIpfSl9LHJlbW92ZUJhY2tkcm9wOmZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGJhY2tkcm9wOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscj10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgaT1lLnN1cHBvcnQudHJhbnNpdGlvbiYmcjt0aGlzLiRiYWNrZHJvcD1lKCc8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCAnK3IrJyIgLz4nKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSx0aGlzLiRiYWNrZHJvcC5jbGljayh0aGlzLm9wdGlvbnMuYmFja2Ryb3A9PSJzdGF0aWMiP2UucHJveHkodGhpcy4kZWxlbWVudFswXS5mb2N1cyx0aGlzLiRlbGVtZW50WzBdKTplLnByb3h5KHRoaXMuaGlkZSx0aGlzKSksaSYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIik7aWYoIXQpcmV0dXJuO2k/dGhpcy4kYmFja2Ryb3Aub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCx0KTp0KCl9ZWxzZSF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wPyh0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGJhY2tkcm9wLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsdCk6dCgpKTp0JiZ0KCl9fTt2YXIgbj1lLmZuLm1vZGFsO2UuZm4ubW9kYWw9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoIm1vZGFsIikscz1lLmV4dGVuZCh7fSxlLmZuLm1vZGFsLmRlZmF1bHRzLHIuZGF0YSgpLHR5cGVvZiBuPT0ib2JqZWN0IiYmbik7aXx8ci5kYXRhKCJtb2RhbCIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyI/aVtuXSgpOnMuc2hvdyYmaS5zaG93KCl9KX0sZS5mbi5tb2RhbC5kZWZhdWx0cz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sZS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj10LGUuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLm1vZGFsPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHI9bi5hdHRyKCJocmVmIiksaT1lKG4uYXR0cigiZGF0YS10YXJnZXQiKXx8ciYmci5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxzPWkuZGF0YSgibW9kYWwiKT8idG9nZ2xlIjplLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChyKSYmcn0saS5kYXRhKCksbi5kYXRhKCkpO3QucHJldmVudERlZmF1bHQoKSxpLm1vZGFsKHMpLm9uZSgiaGlkZSIsZnVuY3Rpb24oKXtuLmZvY3VzKCl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUsdCl7dGhpcy5pbml0KCJ0b29sdGlwIixlLHQpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxpbml0OmZ1bmN0aW9uKHQsbixyKXt2YXIgaSxzLG8sdSxhO3RoaXMudHlwZT10LHRoaXMuJGVsZW1lbnQ9ZShuKSx0aGlzLm9wdGlvbnM9dGhpcy5nZXRPcHRpb25zKHIpLHRoaXMuZW5hYmxlZD0hMCxvPXRoaXMub3B0aW9ucy50cmlnZ2VyLnNwbGl0KCIgIik7Zm9yKGE9by5sZW5ndGg7YS0tOyl1PW9bYV0sdT09ImNsaWNrIj90aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsZS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk6dSE9Im1hbnVhbCImJihpPXU9PSJob3ZlciI/Im1vdXNlZW50ZXIiOiJmb2N1cyIscz11PT0iaG92ZXIiPyJtb3VzZWxlYXZlIjoiYmx1ciIsdGhpcy4kZWxlbWVudC5vbihpKyIuIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihzKyIuIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy5sZWF2ZSx0aGlzKSkpO3RoaXMub3B0aW9ucy5zZWxlY3Rvcj90aGlzLl9vcHRpb25zPWUuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx7dHJpZ2dlcjoibWFudWFsIixzZWxlY3RvcjoiIn0pOnRoaXMuZml4VGl0bGUoKX0sZ2V0T3B0aW9uczpmdW5jdGlvbih0KXtyZXR1cm4gdD1lLmV4dGVuZCh7fSxlLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsdGhpcy4kZWxlbWVudC5kYXRhKCksdCksdC5kZWxheSYmdHlwZW9mIHQuZGVsYXk9PSJudW1iZXIiJiYodC5kZWxheT17c2hvdzp0LmRlbGF5LGhpZGU6dC5kZWxheX0pLHR9LGVudGVyOmZ1bmN0aW9uKHQpe3ZhciBuPWUuZm5bdGhpcy50eXBlXS5kZWZhdWx0cyxyPXt9LGk7dGhpcy5fb3B0aW9ucyYmZS5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24oZSx0KXtuW2VdIT10JiYocltlXT10KX0sdGhpcyksaT1lKHQuY3VycmVudFRhcmdldClbdGhpcy50eXBlXShyKS5kYXRhKHRoaXMudHlwZSk7aWYoIWkub3B0aW9ucy5kZWxheXx8IWkub3B0aW9ucy5kZWxheS5zaG93KXJldHVybiBpLnNob3coKTtjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSxpLmhvdmVyU3RhdGU9ImluIix0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2kuaG92ZXJTdGF0ZT09ImluIiYmaS5zaG93KCl9LGkub3B0aW9ucy5kZWxheS5zaG93KX0sbGVhdmU6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpO3RoaXMudGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7aWYoIW4ub3B0aW9ucy5kZWxheXx8IW4ub3B0aW9ucy5kZWxheS5oaWRlKXJldHVybiBuLmhpZGUoKTtuLmhvdmVyU3RhdGU9Im91dCIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmhvdmVyU3RhdGU9PSJvdXQiJiZuLmhpZGUoKX0sbi5vcHRpb25zLmRlbGF5LmhpZGUpfSxzaG93OmZ1bmN0aW9uKCl7dmFyIHQsbixyLGkscyxvLHU9ZS5FdmVudCgic2hvdyIpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcih1KTtpZih1LmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0PXRoaXMudGlwKCksdGhpcy5zZXRDb250ZW50KCksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmdC5hZGRDbGFzcygiZmFkZSIpLHM9dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ9PSJmdW5jdGlvbiI/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsdFswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LHQuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj90LmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOnQuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksbj10aGlzLmdldFBvc2l0aW9uKCkscj10WzBdLm9mZnNldFdpZHRoLGk9dFswXS5vZmZzZXRIZWlnaHQ7c3dpdGNoKHMpe2Nhc2UiYm90dG9tIjpvPXt0b3A6bi50b3Arbi5oZWlnaHQsbGVmdDpuLmxlZnQrbi53aWR0aC8yLXIvMn07YnJlYWs7Y2FzZSJ0b3AiOm89e3RvcDpuLnRvcC1pLGxlZnQ6bi5sZWZ0K24ud2lkdGgvMi1yLzJ9O2JyZWFrO2Nhc2UibGVmdCI6bz17dG9wOm4udG9wK24uaGVpZ2h0LzItaS8yLGxlZnQ6bi5sZWZ0LXJ9O2JyZWFrO2Nhc2UicmlnaHQiOm89e3RvcDpuLnRvcCtuLmhlaWdodC8yLWkvMixsZWZ0Om4ubGVmdCtuLndpZHRofX10aGlzLmFwcGx5UGxhY2VtZW50KG8scyksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzaG93biIpfX0sYXBwbHlQbGFjZW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnRpcCgpLHI9blswXS5vZmZzZXRXaWR0aCxpPW5bMF0ub2Zmc2V0SGVpZ2h0LHMsbyx1LGE7bi5vZmZzZXQoZSkuYWRkQ2xhc3ModCkuYWRkQ2xhc3MoImluIikscz1uWzBdLm9mZnNldFdpZHRoLG89blswXS5vZmZzZXRIZWlnaHQsdD09InRvcCImJm8hPWkmJihlLnRvcD1lLnRvcCtpLW8sYT0hMCksdD09ImJvdHRvbSJ8fHQ9PSJ0b3AiPyh1PTAsZS5sZWZ0PDAmJih1PWUubGVmdCotMixlLmxlZnQ9MCxuLm9mZnNldChlKSxzPW5bMF0ub2Zmc2V0V2lkdGgsbz1uWzBdLm9mZnNldEhlaWdodCksdGhpcy5yZXBsYWNlQXJyb3codS1yK3MscywibGVmdCIpKTp0aGlzLnJlcGxhY2VBcnJvdyhvLWksbywidG9wIiksYSYmbi5vZmZzZXQoZSl9LHJlcGxhY2VBcnJvdzpmdW5jdGlvbihlLHQsbil7dGhpcy5hcnJvdygpLmNzcyhuLGU/NTAqKDEtZS90KSsiJSI6IiIpfSxzZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50aXAoKSx0PXRoaXMuZ2V0VGl0bGUoKTtlLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0odCksZS5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0saGlkZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt2YXIgdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vZmYoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5kZXRhY2goKX0sNTAwKTtuLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodCksbi5kZXRhY2goKX0pfXZhciB0PXRoaXMsbj10aGlzLnRpcCgpLHI9ZS5FdmVudCgiaGlkZSIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihyKTtpZihyLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtyZXR1cm4gbi5yZW1vdmVDbGFzcygiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/aSgpOm4uZGV0YWNoKCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJoaWRkZW4iKSx0aGlzfSxmaXhUaXRsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsZW1lbnQ7KGUuYXR0cigidGl0bGUiKXx8dHlwZW9mIGUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpIT0ic3RyaW5nIikmJmUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsZS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudFswXTtyZXR1cm4gZS5leHRlbmQoe30sdHlwZW9mIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PT0iZnVuY3Rpb24iP3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e3dpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fSx0aGlzLiRlbGVtZW50Lm9mZnNldCgpKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuJGVsZW1lbnQsbj10aGlzLm9wdGlvbnM7cmV0dXJuIGU9dC5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIil8fCh0eXBlb2Ygbi50aXRsZT09ImZ1bmN0aW9uIj9uLnRpdGxlLmNhbGwodFswXSk6bi50aXRsZSksZX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcD10aGlzLiR0aXB8fGUodGhpcy5vcHRpb25zLnRlbXBsYXRlKX0sYXJyb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50WzBdLnBhcmVudE5vZGV8fCh0aGlzLmhpZGUoKSx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5vcHRpb25zPW51bGwpfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LHRvZ2dsZUVuYWJsZWQ6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBuPXQ/ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpOnRoaXM7bi50aXAoKS5oYXNDbGFzcygiaW4iKT9uLmhpZGUoKTpuLnNob3coKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fTt2YXIgbj1lLmZuLnRvb2x0aXA7ZS5mbi50b29sdGlwPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJ0b29sdGlwIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJ0b29sdGlwIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj10LGUuZm4udG9vbHRpcC5kZWZhdWx0cz17YW5pbWF0aW9uOiEwLHBsYWNlbWVudDoidG9wIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOiJob3ZlciBmb2N1cyIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMX0sZS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi50b29sdGlwPW4sdGhpc319KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmluaXQoInBvcG92ZXIiLGUsdCl9O3QucHJvdG90eXBlPWUuZXh0ZW5kKHt9LGUuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnQsc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGlwKCksdD10aGlzLmdldFRpdGxlKCksbj10aGlzLmdldENvbnRlbnQoKTtlLmZpbmQoIi5wb3BvdmVyLXRpdGxlIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0odCksZS5maW5kKCIucG9wb3Zlci1jb250ZW50IilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0obiksZS5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuZ2V0Q29udGVudCgpfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLiRlbGVtZW50LG49dGhpcy5vcHRpb25zO3JldHVybiBlPSh0eXBlb2Ygbi5jb250ZW50PT0iZnVuY3Rpb24iP24uY29udGVudC5jYWxsKHRbMF0pOm4uY29udGVudCl8fHQuYXR0cigiZGF0YS1jb250ZW50IiksZX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcHx8KHRoaXMuJHRpcD1lKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkpLHRoaXMuJHRpcH0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fSk7dmFyIG49ZS5mbi5wb3BvdmVyO2UuZm4ucG9wb3Zlcj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgicG9wb3ZlciIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgicG9wb3ZlciIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnBvcG92ZXIuQ29uc3RydWN0b3I9dCxlLmZuLnBvcG92ZXIuZGVmYXVsdHM9ZS5leHRlbmQoe30sZS5mbi50b29sdGlwLmRlZmF1bHRzLHtwbGFjZW1lbnQ6InJpZ2h0Iix0cmlnZ2VyOiJjbGljayIsY29udGVudDoiIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2Pid9KSxlLmZuLnBvcG92ZXIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnBvcG92ZXI9bix0aGlzfX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcyksaT1lKHQpLmlzKCJib2R5Iik/ZSh3aW5kb3cpOmUodCksczt0aGlzLm9wdGlvbnM9ZS5leHRlbmQoe30sZS5mbi5zY3JvbGxzcHkuZGVmYXVsdHMsbiksdGhpcy4kc2Nyb2xsRWxlbWVudD1pLm9uKCJzY3JvbGwuc2Nyb2xsLXNweS5kYXRhLWFwaSIsciksdGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8KHM9ZSh0KS5hdHRyKCJocmVmIikpJiZzLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIil8fCIiKSsiIC5uYXYgbGkgPiBhIix0aGlzLiRib2R5PWUoImJvZHkiKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX10LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuO3RoaXMub2Zmc2V0cz1lKFtdKSx0aGlzLnRhcmdldHM9ZShbXSksbj10aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPW4uZGF0YSgidGFyZ2V0Iil8fG4uYXR0cigiaHJlZiIpLGk9L14jXHcvLnRlc3QocikmJmUocik7cmV0dXJuIGkmJmkubGVuZ3RoJiZbW2kucG9zaXRpb24oKS50b3ArKCFlLmlzV2luZG93KHQuJHNjcm9sbEVsZW1lbnQuZ2V0KDApKSYmdC4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSkscl1dfHxudWxsfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdLXRbMF19KS5lYWNoKGZ1bmN0aW9uKCl7dC5vZmZzZXRzLnB1c2godGhpc1swXSksdC50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0scHJvY2VzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCx0PXRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHx0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxuPXQtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxyPXRoaXMub2Zmc2V0cyxpPXRoaXMudGFyZ2V0cyxzPXRoaXMuYWN0aXZlVGFyZ2V0LG87aWYoZT49bilyZXR1cm4gcyE9KG89aS5sYXN0KClbMF0pJiZ0aGlzLmFjdGl2YXRlKG8pO2ZvcihvPXIubGVuZ3RoO28tLTspcyE9aVtvXSYmZT49cltvXSYmKCFyW28rMV18fGU8PXJbbysxXSkmJnRoaXMuYWN0aXZhdGUoaVtvXSl9LGFjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuLHI7dGhpcy5hY3RpdmVUYXJnZXQ9dCxlKHRoaXMuc2VsZWN0b3IpLnBhcmVudCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxyPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJyt0KyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK3QrJyJdJyxuPWUocikucGFyZW50KCJsaSIpLmFkZENsYXNzKCJhY3RpdmUiKSxuLnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKS5sZW5ndGgmJihuPW4uY2xvc2VzdCgibGkuZHJvcGRvd24iKS5hZGRDbGFzcygiYWN0aXZlIikpLG4udHJpZ2dlcigiYWN0aXZhdGUiKX19O3ZhciBuPWUuZm4uc2Nyb2xsc3B5O2UuZm4uc2Nyb2xsc3B5PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJzY3JvbGxzcHkiKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoInNjcm9sbHNweSIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj10LGUuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzPXtvZmZzZXQ6MTB9LGUuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5zY3JvbGxzcHk9bix0aGlzfSxlKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7ZSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3Quc2Nyb2xsc3B5KHQuZGF0YSgpKX0pfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCl7dGhpcy5lbGVtZW50PWUodCl9O3QucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQsbj10LmNsb3Nlc3QoInVsOm5vdCguZHJvcGRvd24tbWVudSkiKSxyPXQuYXR0cigiZGF0YS10YXJnZXQiKSxpLHMsbztyfHwocj10LmF0dHIoImhyZWYiKSxyPXImJnIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7aWYodC5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybjtpPW4uZmluZCgiLmFjdGl2ZTpsYXN0IGEiKVswXSxvPWUuRXZlbnQoInNob3ciLHtyZWxhdGVkVGFyZ2V0Oml9KSx0LnRyaWdnZXIobyk7aWYoby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47cz1lKHIpLHRoaXMuYWN0aXZhdGUodC5wYXJlbnQoImxpIiksbiksdGhpcy5hY3RpdmF0ZShzLHMucGFyZW50KCksZnVuY3Rpb24oKXt0LnRyaWdnZXIoe3R5cGU6InNob3duIixyZWxhdGVkVGFyZ2V0Oml9KX0pfSxhY3RpdmF0ZTpmdW5jdGlvbih0LG4scil7ZnVuY3Rpb24gbygpe2kucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHQuYWRkQ2xhc3MoImFjdGl2ZSIpLHM/KHRbMF0ub2Zmc2V0V2lkdGgsdC5hZGRDbGFzcygiaW4iKSk6dC5yZW1vdmVDbGFzcygiZmFkZSIpLHQucGFyZW50KCIuZHJvcGRvd24tbWVudSIpJiZ0LmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLHImJnIoKX12YXIgaT1uLmZpbmQoIj4gLmFjdGl2ZSIpLHM9ciYmZS5zdXBwb3J0LnRyYW5zaXRpb24mJmkuaGFzQ2xhc3MoImZhZGUiKTtzP2kub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxvKTpvKCksaS5yZW1vdmVDbGFzcygiaW4iKX19O3ZhciBuPWUuZm4udGFiO2UuZm4udGFiPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJ0YWIiKTtpfHxyLmRhdGEoInRhYiIsaT1uZXcgdCh0aGlzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi50YWIuQ29uc3RydWN0b3I9dCxlLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udGFiPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0idGFiIl0sIFtkYXRhLXRvZ2dsZT0icGlsbCJdJyxmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZSh0aGlzKS50YWIoInNob3ciKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLnR5cGVhaGVhZC5kZWZhdWx0cyxuKSx0aGlzLm1hdGNoZXI9dGhpcy5vcHRpb25zLm1hdGNoZXJ8fHRoaXMubWF0Y2hlcix0aGlzLnNvcnRlcj10aGlzLm9wdGlvbnMuc29ydGVyfHx0aGlzLnNvcnRlcix0aGlzLmhpZ2hsaWdodGVyPXRoaXMub3B0aW9ucy5oaWdobGlnaHRlcnx8dGhpcy5oaWdobGlnaHRlcix0aGlzLnVwZGF0ZXI9dGhpcy5vcHRpb25zLnVwZGF0ZXJ8fHRoaXMudXBkYXRlcix0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuJG1lbnU9ZSh0aGlzLm9wdGlvbnMubWVudSksdGhpcy5zaG93bj0hMSx0aGlzLmxpc3RlbigpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxzZWxlY3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5hdHRyKCJkYXRhLXZhbHVlIik7cmV0dXJuIHRoaXMuJGVsZW1lbnQudmFsKHRoaXMudXBkYXRlcihlKSkuY2hhbmdlKCksdGhpcy5oaWRlKCl9LHVwZGF0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD1lLmV4dGVuZCh7fSx0aGlzLiRlbGVtZW50LnBvc2l0aW9uKCkse2hlaWdodDp0aGlzLiRlbGVtZW50WzBdLm9mZnNldEhlaWdodH0pO3JldHVybiB0aGlzLiRtZW51Lmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLmNzcyh7dG9wOnQudG9wK3QuaGVpZ2h0LGxlZnQ6dC5sZWZ0fSkuc2hvdygpLHRoaXMuc2hvd249ITAsdGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRtZW51LmhpZGUoKSx0aGlzLnNob3duPSExLHRoaXN9LGxvb2t1cDpmdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5xdWVyeT10aGlzLiRlbGVtZW50LnZhbCgpLCF0aGlzLnF1ZXJ5fHx0aGlzLnF1ZXJ5Lmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoP3RoaXMuc2hvd24/dGhpcy5oaWRlKCk6dGhpczoobj1lLmlzRnVuY3Rpb24odGhpcy5zb3VyY2UpP3RoaXMuc291cmNlKHRoaXMucXVlcnksZS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpOnRoaXMuc291cmNlLG4/dGhpcy5wcm9jZXNzKG4pOnRoaXMpfSxwcm9jZXNzOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIHQ9ZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWF0Y2hlcihlKX0pLHQ9dGhpcy5zb3J0ZXIodCksdC5sZW5ndGg/dGhpcy5yZW5kZXIodC5zbGljZSgwLHRoaXMub3B0aW9ucy5pdGVtcykpLnNob3coKTp0aGlzLnNob3duP3RoaXMuaGlkZSgpOnRoaXN9LG1hdGNoZXI6ZnVuY3Rpb24oZSl7cmV0dXJufmUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSl9LHNvcnRlcjpmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9W10saTt3aGlsZShpPWUuc2hpZnQoKSlpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpP35pLmluZGV4T2YodGhpcy5xdWVyeSk/bi5wdXNoKGkpOnIucHVzaChpKTp0LnB1c2goaSk7cmV0dXJuIHQuY29uY2F0KG4scil9LGhpZ2hsaWdodGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpO3JldHVybiBlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKCIrdCsiKSIsImlnIiksZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9KX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIHQ9ZSh0KS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1lKG4ub3B0aW9ucy5pdGVtKS5hdHRyKCJkYXRhLXZhbHVlIixyKSx0LmZpbmQoImEiKS5odG1sKG4uaGlnaGxpZ2h0ZXIocikpLHRbMF19KSx0LmZpcnN0KCkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJG1lbnUuaHRtbCh0KSx0aGlzfSxuZXh0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxyPW4ubmV4dCgpO3IubGVuZ3RofHwocj1lKHRoaXMuJG1lbnUuZmluZCgibGkiKVswXSkpLHIuYWRkQ2xhc3MoImFjdGl2ZSIpfSxwcmV2OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxuPXQucHJldigpO24ubGVuZ3RofHwobj10aGlzLiRtZW51LmZpbmQoImxpIikubGFzdCgpKSxuLmFkZENsYXNzKCJhY3RpdmUiKX0sbGlzdGVuOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5vbigiZm9jdXMiLGUucHJveHkodGhpcy5mb2N1cyx0aGlzKSkub24oImJsdXIiLGUucHJveHkodGhpcy5ibHVyLHRoaXMpKS5vbigia2V5cHJlc3MiLGUucHJveHkodGhpcy5rZXlwcmVzcyx0aGlzKSkub24oImtleXVwIixlLnByb3h5KHRoaXMua2V5dXAsdGhpcykpLHRoaXMuZXZlbnRTdXBwb3J0ZWQoImtleWRvd24iKSYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93biIsZS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLHRoaXMuJG1lbnUub24oImNsaWNrIixlLnByb3h5KHRoaXMuY2xpY2ssdGhpcykpLm9uKCJtb3VzZWVudGVyIiwibGkiLGUucHJveHkodGhpcy5tb3VzZWVudGVyLHRoaXMpKS5vbigibW91c2VsZWF2ZSIsImxpIixlLnByb3h5KHRoaXMubW91c2VsZWF2ZSx0aGlzKSl9LGV2ZW50U3VwcG9ydGVkOmZ1bmN0aW9uKGUpe3ZhciB0PWUgaW4gdGhpcy4kZWxlbWVudDtyZXR1cm4gdHx8KHRoaXMuJGVsZW1lbnQuc2V0QXR0cmlidXRlKGUsInJldHVybjsiKSx0PXR5cGVvZiB0aGlzLiRlbGVtZW50W2VdPT0iZnVuY3Rpb24iKSx0fSxtb3ZlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNob3duKXJldHVybjtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6Y2FzZSAxMzpjYXNlIDI3OmUucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIDM4OmUucHJldmVudERlZmF1bHQoKSx0aGlzLnByZXYoKTticmVhaztjYXNlIDQwOmUucHJldmVudERlZmF1bHQoKSx0aGlzLm5leHQoKX1lLnN0b3BQcm9wYWdhdGlvbigpfSxrZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdD1+ZS5pbkFycmF5KHQua2V5Q29kZSxbNDAsMzgsOSwxMywyN10pLHRoaXMubW92ZSh0KX0sa2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYodGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0KXJldHVybjt0aGlzLm1vdmUoZSl9LGtleXVwOmZ1bmN0aW9uKGUpe3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgNDA6Y2FzZSAzODpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztjYXNlIDk6Y2FzZSAxMzppZighdGhpcy5zaG93bilyZXR1cm47dGhpcy5zZWxlY3QoKTticmVhaztjYXNlIDI3OmlmKCF0aGlzLnNob3duKXJldHVybjt0aGlzLmhpZGUoKTticmVhaztkZWZhdWx0OnRoaXMubG9va3VwKCl9ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9LGZvY3VzOmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZD0hMH0sYmx1cjpmdW5jdGlvbihlKXt0aGlzLmZvY3VzZWQ9ITEsIXRoaXMubW91c2Vkb3ZlciYmdGhpcy5zaG93biYmdGhpcy5oaWRlKCl9LGNsaWNrOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0KCksdGhpcy4kZWxlbWVudC5mb2N1cygpfSxtb3VzZWVudGVyOmZ1bmN0aW9uKHQpe3RoaXMubW91c2Vkb3Zlcj0hMCx0aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJhY3RpdmUiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXt0aGlzLm1vdXNlZG92ZXI9ITEsIXRoaXMuZm9jdXNlZCYmdGhpcy5zaG93biYmdGhpcy5oaWRlKCl9fTt2YXIgbj1lLmZuLnR5cGVhaGVhZDtlLmZuLnR5cGVhaGVhZD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgidHlwZWFoZWFkIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJ0eXBlYWhlYWQiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi50eXBlYWhlYWQuZGVmYXVsdHM9e3NvdXJjZTpbXSxpdGVtczo4LG1lbnU6Jzx1bCBjbGFzcz0idHlwZWFoZWFkIGRyb3Bkb3duLW1lbnUiPjwvdWw+JyxpdGVtOic8bGk+PGEgaHJlZj0iIyI+PC9hPjwvbGk+JyxtaW5MZW5ndGg6MX0sZS5mbi50eXBlYWhlYWQuQ29uc3RydWN0b3I9dCxlLmZuLnR5cGVhaGVhZC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udHlwZWFoZWFkPW4sdGhpc30sZShkb2N1bWVudCkub24oImZvY3VzLnR5cGVhaGVhZC5kYXRhLWFwaSIsJ1tkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCJdJyxmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpO2lmKG4uZGF0YSgidHlwZWFoZWFkIikpcmV0dXJuO24udHlwZWFoZWFkKG4uZGF0YSgpKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uYWZmaXguZGVmYXVsdHMsbiksdGhpcy4kd2luZG93PWUod2luZG93KS5vbigic2Nyb2xsLmFmZml4LmRhdGEtYXBpIixlLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSkub24oImNsaWNrLmFmZml4LmRhdGEtYXBpIixlLnByb3h5KGZ1bmN0aW9uKCl7c2V0VGltZW91dChlLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0sdGhpcykpLHRoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLmNoZWNrUG9zaXRpb24oKX07dC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLiRlbGVtZW50LmlzKCI6dmlzaWJsZSIpKXJldHVybjt2YXIgdD1lKGRvY3VtZW50KS5oZWlnaHQoKSxuPXRoaXMuJHdpbmRvdy5zY3JvbGxUb3AoKSxyPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksaT10aGlzLm9wdGlvbnMub2Zmc2V0LHM9aS5ib3R0b20sbz1pLnRvcCx1PSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIixhO3R5cGVvZiBpIT0ib2JqZWN0IiYmKHM9bz1pKSx0eXBlb2Ygbz09ImZ1bmN0aW9uIiYmKG89aS50b3AoKSksdHlwZW9mIHM9PSJmdW5jdGlvbiImJihzPWkuYm90dG9tKCkpLGE9dGhpcy51bnBpbiE9bnVsbCYmbit0aGlzLnVucGluPD1yLnRvcD8hMTpzIT1udWxsJiZyLnRvcCt0aGlzLiRlbGVtZW50LmhlaWdodCgpPj10LXM/ImJvdHRvbSI6byE9bnVsbCYmbjw9bz8idG9wIjohMTtpZih0aGlzLmFmZml4ZWQ9PT1hKXJldHVybjt0aGlzLmFmZml4ZWQ9YSx0aGlzLnVucGluPWE9PSJib3R0b20iP3IudG9wLW46bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHUpLmFkZENsYXNzKCJhZmZpeCIrKGE/Ii0iK2E6IiIpKX07dmFyIG49ZS5mbi5hZmZpeDtlLmZuLmFmZml4PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJhZmZpeCIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgiYWZmaXgiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj10LGUuZm4uYWZmaXguZGVmYXVsdHM9e29mZnNldDowfSxlLmZuLmFmZml4Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5hZmZpeD1uLHRoaXN9LGUod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXtlKCdbZGF0YS1zcHk9ImFmZml4Il0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxuPXQuZGF0YSgpO24ub2Zmc2V0PW4ub2Zmc2V0fHx7fSxuLm9mZnNldEJvdHRvbSYmKG4ub2Zmc2V0LmJvdHRvbT1uLm9mZnNldEJvdHRvbSksbi5vZmZzZXRUb3AmJihuLm9mZnNldC50b3A9bi5vZmZzZXRUb3ApLHQuYWZmaXgobil9KX0pfSh3aW5kb3cualF1ZXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9maWx0ZXJzbmlwcGV0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiODRjNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcwpAQCAtMCwwICsxLDk0IEBACisidXNlIHN0cmljdCIKKworLy8gVGhlIGRpc2FibGUgcmVtb3ZlcyB0aGUgJ2RhdGVwaWNrZXInIGF0dHJpYnV0ZSBhbmQKKy8vIHNldHRpbmdzLCBzbyB5b3UgaGF2ZSB0byByZS1pbml0aWFsaXplIGl0IGVhY2ggdGltZQorLy8gdGhlIGRhdGUgcmFuZ2UgaXMgc2VsZWN0ZWQgYW5kIGVuYWJsZWQKKy8vIERPTSBpcyB1c2VkIGluc3RlYWQgb2YgalF1ZXJ5IHRvIGZpbmQgdGhlIGVsZW1lbnRzCisvLyBpbiBhbGwgY29udGV4dHMKK2Z1bmN0aW9uIGRhdGVfZW5hYmxlIChrZXksIGFjdGlvbikgeworCisgICAgdmFyIGVsZW1Gcm9tPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlX2Zyb21fIitrZXkpOworICAgIHZhciBlbGVtVG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGVfdG9fIitrZXkpOworCisgICAgaWYgKCdlbmFibGUnID09IGFjdGlvbikgeworICAgICAgICBlbGVtRnJvbS5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CisgICAgICAgIGVsZW1Uby5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CisKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlcigpOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlcigpOworCisgICAgICAgICQoZWxlbUZyb20pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAiZGF0ZUZvcm1hdCIsICJkZC9tbS95eSIgKTsKKyAgICAgICAgJChlbGVtVG8pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAiZGF0ZUZvcm1hdCIsICJkZC9tbS95eSIgKTsKKworICAgICAgICAkKGVsZW1Gcm9tKS5kYXRlcGlja2VyKCAic2V0RGF0ZSIsIGVsZW1Gcm9tLmdldEF0dHJpYnV0ZSggImRhdGEtc2V0RGF0ZSIpICk7CisgICAgICAgICQoZWxlbVRvKS5kYXRlcGlja2VyKCAic2V0RGF0ZSIsIGVsZW1Uby5nZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiKSApOworICAgICAgICAkKGVsZW1Gcm9tKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgIm1pbkRhdGUiLCBlbGVtRnJvbS5nZXRBdHRyaWJ1dGUoICJkYXRhLW1pbkRhdGUiKSk7CisgICAgICAgICQoZWxlbVRvKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgIm1pbkRhdGUiLCAgZWxlbVRvLmdldEF0dHJpYnV0ZSggImRhdGEtbWluRGF0ZSIpKTsKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtYXhEYXRlIiwgZWxlbUZyb20uZ2V0QXR0cmlidXRlKCAiZGF0YS1tYXhEYXRlIikpOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtYXhEYXRlIiwgZWxlbVRvLmdldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbGVtRnJvbS5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgZWxlbVRvLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIH0KK30KKworLy8gSW5pdGlhbGl6ZSB0aGUgZGF0ZSBwaWNrZXIgZWxlbWVudHMgd2l0aCB0aGVpciBkZWZhdWx0IHN0YXRlIHZhcmlhYmxlcywgYW5kCisvLyByZWdpc3RlciB0aGUgcmFkaW8gYnV0dG9uIGFuZCBmb3JtIGFjdGlvbnMKK2Z1bmN0aW9uIGRhdGVfaW5pdCAoa2V5LCBmcm9tX2RhdGUsIHRvX2RhdGUsIG1pbl9kYXRlLCBtYXhfZGF0ZSwgaW5pdGlhbF9lbmFibGUpIHsKKworICAgIHZhciBlbGVtRnJvbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZV9mcm9tXyIra2V5KTsKKyAgICB2YXIgZWxlbVRvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlX3RvXyIra2V5KTsKKworICAgIC8vIFdlcmUgdGhlcmUgYW55IGRhdGVyYW5nZSBmaWx0ZXJzIGluc3RhbnRpYXRlZD8gKGUuZy4gbm8gYnVpbGRzIGZvdW5kKQorICAgIGlmIChudWxsID09IGVsZW1Gcm9tKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBpbml0IHRoZSBkYXRlcGlja2VyIGNvbnRleHQgZGF0YQorICAgIGVsZW1Gcm9tLnNldEF0dHJpYnV0ZSggImRhdGEtc2V0RGF0ZSIsIGZyb21fZGF0ZSApOworICAgIGVsZW1Uby5zZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiLCB0b19kYXRlICk7CisgICAgZWxlbUZyb20uc2V0QXR0cmlidXRlKCAiZGF0YS1taW5EYXRlIiwgbWluX2RhdGUpOworICAgIGVsZW1Uby5zZXRBdHRyaWJ1dGUoICJkYXRhLW1pbkRhdGUiLCAgbWluX2RhdGUpOworICAgIGVsZW1Gcm9tLnNldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIsIG1heF9kYXRlKTsKKyAgICBlbGVtVG8uc2V0QXR0cmlidXRlKCAiZGF0YS1tYXhEYXRlIiwgbWF4X2RhdGUpOworCisgICAgLy8gZG9lcyB0aGUgZGF0ZSBzZXQgc3RhcnQgZW5hYmxlZD8KKyAgICBpZiAoa2V5ID09IGluaXRpYWxfZW5hYmxlKSB7CisgICAgICAgIGRhdGVfZW5hYmxlIChrZXksICJlbmFibGUiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAiZGlzYWJsZSIpOworICAgIH0KKworICAgIC8vIGNhdGNoIHRoZSByYWRpbyBidXR0b24gc2VsZWN0cyBmb3IgZW5hYmxlL2Rpc2FibGUKKyAgICAkKCdpbnB1dDpyYWRpb1tuYW1lPSJmaWx0ZXIiXScpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICBpZiAoJCh0aGlzKS52YWwoKSA9PSAnZGF0ZXJhbmdlJykgeworICAgICAgICAgICAga2V5PSQodGhpcykuYXR0cigiZGF0YS1rZXkiKTsKKyAgICAgICAgICAgIGRhdGVfZW5hYmxlIChrZXksICdlbmFibGUnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleT0kKHRoaXMpLmF0dHIoImRhdGEta2V5Iik7CisgICAgICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAnZGlzYWJsZScpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBjYXRjaCBhbnkgbmV3ICdmcm9tJyBkYXRlIGFzIG1pbkRhdGUgZm9yICd0bycgZGF0ZQorICAgICQoIiNkYXRlX2Zyb21fIitrZXkpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICBmcm9tX2RhdGUgPSAkKCIjZGF0ZV9mcm9tXyIra2V5KS52YWwoKTsKKyAgICAgICAgJCgiI2RhdGVfdG9fIitrZXkpLmRhdGVwaWNrZXIoICJvcHRpb24iLCAibWluRGF0ZSIsIGZyb21fZGF0ZSApOworICAgIH0pOworCisgICAgLy8gY2F0Y2ggdGhlIHN1Ym1pdCAoanVzdCBvbmNlKQorICAgICQoImZvcm0iKS51bmJpbmQoJ3N1Ym1pdCcpOworICAgICQoImZvcm0iKS5zdWJtaXQoZnVuY3Rpb24oZSkgeworICAgICAgICAvLyBmb3JtYXQgYSBjb21wb3NpdGUgZGF0ZXJhbmdlIGZpbHRlciB2YWx1ZSBzbyB0aGF0IGl0IGNhbiBiZSBwYXJzZWQgYW5kIHBvc3QtcHJvY2Vzc2VkIGluIHRoZSB2aWV3CisgICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYgKCQoIiNkYXRlX2Zyb21fIitrZXkpLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciBmaWx0ZXI9a2V5KyJfX2d0ZSEiK2tleSsiX19sdDoiKyQoIiNkYXRlX2Zyb21fIitrZXkpLnZhbCgpKyIhIiskKCIjZGF0ZV90b18iK2tleSkudmFsKCkrIl9kYXRlcmFuZ2UiOworICAgICAgICAgICAgICAgICQoIiNsYXN0X2RhdGVfZnJvbV8iK2tleSkudmFsKCQoIiNkYXRlX2Zyb21fIitrZXkpLnZhbCgpKTsKKyAgICAgICAgICAgICAgICAkKCIjbGFzdF9kYXRlX3RvXyIra2V5KS52YWwoJCgiI2RhdGVfdG9fIitrZXkpLnZhbCgpKTsKKyAgICAgICAgICAgICAgICAkKCIjZmlsdGVyX3ZhbHVlXyIra2V5KS52YWwoZmlsdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKworfTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9pbXBvcnRsYXllci5qcyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9pbXBvcnRsYXllci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFkYmMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ltcG9ydGxheWVyLmpzCkBAIC0wLDAgKzEsMjc2IEBACisidXNlIHN0cmljdCIKKworZnVuY3Rpb24gaW1wb3J0TGF5ZXJQYWdlSW5pdCAoY3R4KSB7CisKKyAgdmFyIGxheWVyRGVwQnRuID0gJCgiI2FkZC1sYXllci1kZXBlbmRlbmN5LWJ0biIpOworICB2YXIgaW1wb3J0QW5kQWRkQnRuID0gJCgiI2ltcG9ydC1hbmQtYWRkLWJ0biIpOworICB2YXIgbGF5ZXJOYW1lSW5wdXQgPSAkKCIjaW1wb3J0LWxheWVyLW5hbWUiKTsKKyAgdmFyIHZjc1VSTElucHV0ID0gJCgiI2xheWVyLWdpdC1yZXBvLXVybCIpOworICB2YXIgZ2l0UmVmSW5wdXQgPSAkKCIjbGF5ZXItZ2l0LXJlZiIpOworICB2YXIgbGF5ZXJEZXBJbnB1dCA9ICQoIiNsYXllci1kZXBlbmRlbmN5Iik7CisgIHZhciBsYXllck5hbWVDdHJsID0gJCgiI2xheWVyLW5hbWUtY3RybCIpOworICB2YXIgZHVwbGljYXRlZExheWVyTmFtZSA9ICQoIiNkdXBsaWNhdGVkLWxheWVyLW5hbWUtaGludCIpOworCisgIHZhciBsYXllckRlcHMgPSB7fTsKKyAgdmFyIGxheWVyRGVwc0RlcHMgPSB7fTsKKyAgdmFyIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKyAgdmFyIHZhbGlkTGF5ZXJOYW1lID0gL14oXHd8LSkrJC87CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyRGVwSW5wdXQsIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CisgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gaXRlbTsKKworICAgIGxheWVyRGVwQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisKKyAgLyogV2UgYXV0b21hdGljYWxseSBhZGQgIm9wZW5lbWJlZGRlZC1jb3JlIiBsYXllciBmb3IgY29udmVuaWVuY2UgYXMgYQorICAgKiBkZXBlbmRlbmN5IGFzIHByZXR0eSBtdWNoIGFsbCBsYXllcnMgZGVwZW5kIG9uIHRoaXMgb25lCisgICAqLworICAkLmdldEpTT04obGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLAorICAgIHsgaW5jbHVkZV9hZGRlZDogInRydWUiICwgc2VhcmNoOiAib3BlbmVtYmVkZGVkLWNvcmUiIH0sCisgICAgZnVuY3Rpb24obGF5ZXIpIHsKKyAgICBpZiAobGF5ZXIucmVzdWx0cy5sZW5ndGggPiAwKSB7CisgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSBsYXllci5yZXN1bHRzWzBdOworICAgICAgbGF5ZXJEZXBCdG4uY2xpY2soKTsKKyAgICB9CisgIH0pOworCisgIGxheWVyRGVwQnRuLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgaWYgKGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9PSB1bmRlZmluZWQpCisgICAgICByZXR1cm47CisKKyAgICBsYXllckRlcHNbY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkXSA9IGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKworICAgIC8qIE1ha2UgYSBsaXN0IGl0ZW0gZm9yIHRoZSBuZXcgbGF5ZXIgZGVwZW5kZW5jeSAqLworICAgIHZhciBuZXdMYXllckRlcCA9ICQoIjxsaT48YT48L2E+PHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJEZWxldGVcIj48L3NwYW4+PC9saT4iKTsKKworICAgIG5ld0xheWVyRGVwLmRhdGEoJ2xheWVyLWlkJywgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkKTsKKyAgICBuZXdMYXllckRlcC5jaGlsZHJlbigic3BhbiIpLnRvb2x0aXAoKTsKKworICAgIHZhciBsaW5rID0gbmV3TGF5ZXJEZXAuY2hpbGRyZW4oImEiKTsKKyAgICBsaW5rLmF0dHIoImhyZWYiLCBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwpOworICAgIGxpbmsudGV4dChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubmFtZSk7CisgICAgbGluay50b29sdGlwKHt0aXRsZTogY3VycmVudExheWVyRGVwU2VsZWN0aW9uLnRvb2x0aXAsIHBsYWNlbWVudDogInJpZ2h0In0pOworCisgICAgdmFyIHRyYXNoSXRlbSA9IG5ld0xheWVyRGVwLmNoaWxkcmVuKCJzcGFuIik7CisgICAgdHJhc2hJdGVtLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciB0b1JlbW92ZSA9ICQodGhpcykucGFyZW50KCkuZGF0YSgnbGF5ZXItaWQnKTsKKyAgICAgIGRlbGV0ZSBsYXllckRlcHNbdG9SZW1vdmVdOworICAgICAgJCh0aGlzKS5wYXJlbnQoKS5mYWRlT3V0KGZ1bmN0aW9uICgpeworICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICAkKCIjbGF5ZXItZGVwcy1saXN0IikuYXBwZW5kKG5ld0xheWVyRGVwKTsKKworICAgIGxpYnRvYXN0ZXIuZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwsIGZ1bmN0aW9uIChkYXRhKXsKKyAgICAgICAgLyogVGhlc2UgYXJlIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGxheWVyIGFkZGVkIGFzIGEgZGVwZW5kZW5jeSAqLworICAgICAgICBpZiAoZGF0YS5saXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24udXJsID0gY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmxheWVyZGV0YWlsdXJsOworICAgICAgICAgIGxheWVyRGVwc1tjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24uaWRdLmRlcHMgPSBkYXRhLmxpc3Q7CisgICAgICAgIH0KKworICAgICAgICAvKiBDbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb24gKi8KKyAgICAgICAgbGF5ZXJEZXBJbnB1dC52YWwoIiIpOworICAgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgICAgIGxheWVyRGVwQnRuLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgIH0sIG51bGwpOworICB9KTsKKworICBpbXBvcnRBbmRBZGRCdG4uY2xpY2soZnVuY3Rpb24oKXsKKyAgICAvKiBUaGlzIGlzIGEgbGlzdCBvZiB0aGUgbmFtZXMgZnJvbSBsYXllckRlcHMgZm9yIHRoZSBsYXllciBkZXBzCisgICAgICogbW9kYWwgZGlhbG9nIGJvZHkKKyAgICAgKi8KKyAgICB2YXIgZGVwTmFtZXMgPSBbXTsKKworICAgIC8qIGFycnJheSBvZiBhbGwgbGF5ZXIgZGVwIGlkcyBpbmNsdWRlcyBwYXJlbnQgYW5kIGNoaWxkIGRlcHMgKi8KKyAgICB2YXIgYWxsRGVwcyA9IFtdOworCisgICAgLyogdGVtcG9yYXJ5IG9iamVjdCB0byB1c2UgdG8gZG8gYSByZWR1Y2Ugb24gdGhlIGRlcGVuZGVuY2llcyBmb3IgZWFjaAorICAgICAqIGxheWVyIGRlcGVuZGVuY3kgYWRkZWQKKyAgICAgKi8KKyAgICB2YXIgZGVwRGVwcyA9IHt9OworCisgICAgLyogdGhlIGxheWVycyB0aGF0IGhhdmUgZGVwZW5kZW5jaWVzIGhhdmUgYW4gZXh0cmEgcHJvcGVydHkgImRlcHMiCisgICAgICogbG9vayBpbiB0aGlzIGZvciBlYWNoIGxheWVyIGFuZCByZWR1Y2UgdGhpcyB0byBhIHVucXVpZSBvYmplY3QKKyAgICAgKiBvZiBkZXBzLgorICAgICAqLworICAgIGZvciAodmFyIGtleSBpbiBsYXllckRlcHMpeworICAgICAgaWYgKGxheWVyRGVwc1trZXldLmhhc093blByb3BlcnR5KCdkZXBzJykpeworICAgICAgICBmb3IgKHZhciBkZXAgaW4gbGF5ZXJEZXBzW2tleV0uZGVwcyl7CisgICAgICAgICAgdmFyIGxheWVyID0gbGF5ZXJEZXBzW2tleV0uZGVwc1tkZXBdOworICAgICAgICAgIGRlcERlcHNbbGF5ZXIuaWRdID0gbGF5ZXI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGRlcE5hbWVzLnB1c2gobGF5ZXJEZXBzW2tleV0ubmFtZSk7CisgICAgICBhbGxEZXBzLnB1c2gobGF5ZXJEZXBzW2tleV0uaWQpOworICAgIH0KKworICAgIC8qIHdlIGFjdHVhbGx5IHdhbnQgaXQgYXMgYW4gYXJyYXkgc28gY29udmVydCBpdCBub3cgKi8KKyAgICB2YXIgZGVwRGVwc0FycmF5ID0gW107CisgICAgZm9yICh2YXIga2V5IGluIGRlcERlcHMpCisgICAgICBkZXBEZXBzQXJyYXkucHVzaCAoZGVwRGVwc1trZXldKTsKKworICAgIGlmIChkZXBEZXBzQXJyYXkubGVuZ3RoID4gMCkgeworICAgICAgdmFyIGxheWVyID0geyBuYW1lOiBsYXllck5hbWVJbnB1dC52YWwoKSwgdXJsOiAiIyIsIGlkOiAtMSB9OworICAgICAgdmFyIHRpdGxlID0gIkxheWVyIjsKKyAgICAgIHZhciBib2R5ID0gIjxzdHJvbmc+IitsYXllci5uYW1lKyI8L3N0cm9uZz4ncyBkZXBlbmRlbmNpZXMgKCIrCisgICAgICAgIGRlcE5hbWVzLmpvaW4oIiwgIikrIjwvc3Bhbj4pIHJlcXVpcmUgc29tZSBsYXllcnMgdGhhdCBhcmUgbm90IGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gU2VsZWN0IHRoZSBvbmVzIHlvdSB3YW50IHRvIGFkZDo8L3A+IjsKKworICAgICAgc2hvd0xheWVyRGVwc01vZGFsKGxheWVyLCBkZXBEZXBzQXJyYXksIHRpdGxlLCBib2R5LCBmYWxzZSwgZnVuY3Rpb24obGF5ZXJPYnNMaXN0KXsKKyAgICAgICAgLyogQWRkIHRoZSBhY2NlcHRlZCBsYXllciBkZXBlbmRlbmNpZXMnIGlkcyB0byB0aGUgYWxsRGVwcyBhcnJheSAqLworICAgICAgICBmb3IgKHZhciBrZXkgaW4gbGF5ZXJPYnNMaXN0KXsKKyAgICAgICAgICBhbGxEZXBzLnB1c2gobGF5ZXJPYnNMaXN0W2tleV0uaWQpOworICAgICAgICB9CisgICAgICAgIGltcG9ydF9hbmRfYWRkICgpOworICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGltcG9ydF9hbmRfYWRkICgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGltcG9ydF9hbmRfYWRkICgpIHsKKyAgICAgIC8qIGNvbnZlcnQgdG8gYSBjc3Ygb2YgYWxsIHRoZSBkZXBzIHRvIGJlIGFkZGVkICovCisgICAgICB2YXIgbGF5ZXJEZXBzQ3N2ID0gYWxsRGVwcy5qb2luKCIsIik7CisKKyAgICAgIHZhciBsYXllckRhdGEgPSB7CisgICAgICAgIG5hbWU6IGxheWVyTmFtZUlucHV0LnZhbCgpLAorICAgICAgICB2Y3NfdXJsOiB2Y3NVUkxJbnB1dC52YWwoKSwKKyAgICAgICAgZ2l0X3JlZjogZ2l0UmVmSW5wdXQudmFsKCksCisgICAgICAgIGRpcl9wYXRoOiAkKCIjbGF5ZXItc3ViZGlyIikudmFsKCksCisgICAgICAgIHByb2plY3RfaWQ6IGxpYnRvYXN0ZXIuY3R4LnByb2plY3RJZCwKKyAgICAgICAgbGF5ZXJfZGVwczogbGF5ZXJEZXBzQ3N2LAorICAgICAgfTsKKworICAgICAgJC5hamF4KHsKKyAgICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgICAgdXJsOiBjdHgueGhySW1wb3J0TGF5ZXJVcmwsCisgICAgICAgICAgZGF0YTogbGF5ZXJEYXRhLAorICAgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5lcnJvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBTdWNjZXNzIGxheWVyIGltcG9ydCBub3cgZ28gdG8gdGhlIHByb2plY3QgcGFnZSAqLworICAgICAgICAgICAgICAkLmNvb2tpZSgnbGF5ZXItaW1wb3J0ZWQtYWxlcnQnLCBKU09OLnN0cmluZ2lmeShkYXRhKSwgeyBwYXRoOiAnLyd9KTsKKyAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwrJz9ub3RpZnk9bGF5ZXItaW1wb3J0ZWQnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgY29uc29sZS5sb2coIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0pOworCisgIGZ1bmN0aW9uIGVuYWJsZV9pbXBvcnRfYnRuKGVuYWJsZWQpIHsKKyAgICB2YXIgaW1wb3J0QW5kQWRkSGludCA9ICQoIiNpbXBvcnQtYW5kLWFkZC1oaW50Iik7CisKKyAgICBpZiAoZW5hYmxlZCkgeworICAgICAgaW1wb3J0QW5kQWRkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICBpbXBvcnRBbmRBZGRIaW50LmhpZGUoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbXBvcnRBbmRBZGRCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICBpbXBvcnRBbmRBZGRIaW50LnNob3coKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrX2Zvcm0oKSB7CisgICAgdmFyIHZhbGlkID0gZmFsc2U7CisgICAgdmFyIGlucHV0cyA9ICQoImlucHV0OnJlcXVpcmVkIik7CisKKyAgICBmb3IgKHZhciBpPTA7IGk8aW5wdXRzLmxlbmd0aDsgaSsrKXsKKyAgICAgIGlmICghKHZhbGlkID0gaW5wdXRzW2ldLnZhbHVlKSl7CisgICAgICAgIGVuYWJsZV9pbXBvcnRfYnRuKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHZhbGlkKQorICAgICAgZW5hYmxlX2ltcG9ydF9idG4odHJ1ZSk7CisgIH0KKworICBmdW5jdGlvbiBsYXllckV4aXN0c0Vycm9yKGxheWVyKXsKKyAgICB2YXIgZHVwTGF5ZXJJbmZvID0gJCgiI2R1cGxpY2F0ZS1sYXllci1pbmZvIik7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIi5kdXAtbGF5ZXItbmFtZSIpLnRleHQobGF5ZXIubmFtZSk7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIi5kdXAtbGF5ZXItbGluayIpLmF0dHIoImhyZWYiLCBsYXllci5sYXllcmRldGFpbHVybCk7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIiNkdXAtbGF5ZXItdmNzLXVybCIpLnRleHQobGF5ZXIubGF5ZXJfX3Zjc191cmwpOworICAgIGR1cExheWVySW5mby5maW5kKCIjZHVwLWxheWVyLXJldmlzaW9uIikudGV4dChsYXllci5yZXZpc2lvbi5jb21taXQpOworCisgICAgJCgiLmZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisKKyAgICAgIGR1cExheWVySW5mby5mYWRlSW4oKTsKKyAgICB9KTsKKyAgfQorCisgIGxheWVyTmFtZUlucHV0Lm9uKCdibHVyJywgZnVuY3Rpb24oKSB7CisgICAgICBpZiAoISQodGhpcykudmFsKCkpeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB2YXIgbmFtZSA9ICQodGhpcykudmFsKCk7CisKKyAgICAgIC8qIENoZWNrIGlmIHRoZSBsYXllciBuYW1lIGV4aXN0cyAqLworICAgICAgJC5nZXRKU09OKGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwKKyAgICAgICAgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgLCBzZWFyY2g6IG5hbWUsIGZvcm1hdDogImpzb24iIH0sCisgICAgICAgIGZ1bmN0aW9uKGxheWVyKSB7CisgICAgICAgICAgaWYgKGxheWVyLnJvd3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBsYXllci5yb3dzKXsKKyAgICAgICAgICAgICAgaWYgKGxheWVyLnJvd3NbaV0ubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGF5ZXIucm93c1tpXSkKKyAgICAgICAgICAgICAgICBsYXllckV4aXN0c0Vycm9yKGxheWVyLnJvd3NbaV0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgfSk7CisgIH0pOworCisgIHZjc1VSTElucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeworICAgIGNoZWNrX2Zvcm0oKTsKKyAgfSk7CisKKyAgZ2l0UmVmSW5wdXQub24oJ2lucHV0JywgZnVuY3Rpb24oKSB7CisgICAgY2hlY2tfZm9ybSgpOworICB9KTsKKworICBsYXllck5hbWVJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoJCh0aGlzKS52YWwoKSAmJiAhdmFsaWRMYXllck5hbWUudGVzdCgkKHRoaXMpLnZhbCgpKSl7CisgICAgICBsYXllck5hbWVDdHJsLmFkZENsYXNzKCJlcnJvciIpCisgICAgICAkKCIjaW52YWxpZC1sYXllci1uYW1lLWhpbnQiKS5zaG93KCk7CisgICAgICBlbmFibGVfaW1wb3J0X2J0bihmYWxzZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCQoIiNkdXBsaWNhdGUtbGF5ZXItaW5mbyIpLmNzcygiZGlzcGxheSIpICE9ICJOb25lIil7CisgICAgICAkKCIjZHVwbGljYXRlLWxheWVyLWluZm8iKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICQoIi5maWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIikuc2hvdygpOworICAgICAgfSk7CisKKyAgICB9CisKKyAgICAvKiBEb24ndCByZW1vdmUgdGhlIGVycm9yIGNsYXNzIGlmIHdlJ3JlIGRpc3BsYXlpbmcgdGhlIGVycm9yIGZvciBhbm90aGVyCisgICAgICogcmVhc29uLgorICAgICAqLworICAgIGlmICghZHVwbGljYXRlZExheWVyTmFtZS5pcygiOnZpc2libGUiKSkKKyAgICAgIGxheWVyTmFtZUN0cmwucmVtb3ZlQ2xhc3MoImVycm9yIikKKworICAgICQoIiNpbnZhbGlkLWxheWVyLW5hbWUtaGludCIpLmhpZGUoKTsKKyAgICBjaGVja19mb3JtKCk7CisgIH0pOworCisgIC8qIEhhdmUgYSBndWVzcyBhdCB0aGUgbGF5ZXIgbmFtZSAqLworICB2Y3NVUkxJbnB1dC5mb2N1c291dChmdW5jdGlvbiAoKXsKKyAgICAvKiBJZiB3ZSBhIGxheWVyIG5hbWUgc3BlY2lmaWVkIGRvbid0IG92ZXJ3cml0ZSBpdCBvciBpZiB0aGVyZSBpc24ndCBhCisgICAgICogdXJsIHR5cGVkIGluIHlldCByZXR1cm4KKyAgICAgKi8KKyAgICBpZiAobGF5ZXJOYW1lSW5wdXQudmFsKCkgfHwgISQodGhpcykudmFsKCkpCisgICAgICByZXR1cm47CisKKyAgICBpZiAoJCh0aGlzKS52YWwoKS5zZWFyY2goIi8iKSl7CisgICAgICB2YXIgdXJsUHRzID0gJCh0aGlzKS52YWwoKS5zcGxpdCgiLyIpOworICAgICAgdmFyIHN1Z2dlc3Rpb24gPSB1cmxQdHNbdXJsUHRzLmxlbmd0aC0xXS5yZXBsYWNlKCIuZ2l0IiwiIik7CisgICAgICBsYXllck5hbWVJbnB1dC52YWwoc3VnZ2VzdGlvbik7CisgICAgfQorICB9KTsKKworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4uanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LTIuMC4zLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmUyMDlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4uanMKQEAgLTAsMCArMSw2IEBACisvKiEgalF1ZXJ5IHYyLjAuMyB8IChjKSAyMDA1LCAyMDEzIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwganF1ZXJ5Lm9yZy9saWNlbnNlCisvL0Agc291cmNlTWFwcGluZ1VSTD1qcXVlcnktMi4wLjMubWluLm1hcAorKi8KKyhmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyPXR5cGVvZiB1bmRlZmluZWQsaT1lLmxvY2F0aW9uLG89ZS5kb2N1bWVudCxzPW8uZG9jdW1lbnRFbGVtZW50LGE9ZS5qUXVlcnksdT1lLiQsbD17fSxjPVtdLHA9IjIuMC4zIixmPWMuY29uY2F0LGg9Yy5wdXNoLGQ9Yy5zbGljZSxnPWMuaW5kZXhPZixtPWwudG9TdHJpbmcseT1sLmhhc093blByb3BlcnR5LHY9cC50cmltLHg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLG4sdCl9LGI9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2Usdz0vXFMrL2csVD0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEM9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxrPS9eLW1zLS8sTj0vLShbXGRhLXpdKS9naSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0sUz1mdW5jdGlvbigpe28ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSx4LnJlYWR5KCl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpwLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKHI9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOlQuZXhlYyhlKSwhcnx8IXJbMV0mJnQpcmV0dXJuIXR8fHQuanF1ZXJ5Pyh0fHxuKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTtpZihyWzFdKXtpZih0PXQgaW5zdGFuY2VvZiB4P3RbMF06dCx4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoclsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDpvLCEwKSksQy50ZXN0KHJbMV0pJiZ4LmlzUGxhaW5PYmplY3QodCkpZm9yKHIgaW4gdCl4LmlzRnVuY3Rpb24odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gaT1vLmdldEVsZW1lbnRCeUlkKHJbMl0pLGkmJmkucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1pKSx0aGlzLmNvbnRleHQ9byx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9uLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dW5kZWZpbmVkJiYodGhpcy5zZWxlY3Rvcj1lLnNlbGVjdG9yLHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHgubWFrZUFycmF5KGUsdGhpcykpfSxzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3RoaXMudG9BcnJheSgpOjA+ZT90aGlzW3RoaXMubGVuZ3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD14Lm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdC5jb250ZXh0PXRoaXMuY29udGV4dCx0fSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZWFjaCh0aGlzLGUsdCl9LHJlYWR5OmZ1bmN0aW9uKGUpe3JldHVybiB4LnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoMD5lP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJnQ+bj9bdGhpc1tuXV06W10pfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpoLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx4LmZuLmluaXQucHJvdG90eXBlPXguZm4seC5leHRlbmQ9eC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8scz1hcmd1bWVudHNbMF18fHt9LGE9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgcyYmKGw9cyxzPWFyZ3VtZW50c1sxXXx8e30sYT0yKSwib2JqZWN0Ij09dHlwZW9mIHN8fHguaXNGdW5jdGlvbihzKXx8KHM9e30pLHU9PT1hJiYocz10aGlzLC0tYSk7dT5hO2ErKylpZihudWxsIT0oZT1hcmd1bWVudHNbYV0pKWZvcih0IGluIGUpbj1zW3RdLHI9ZVt0XSxzIT09ciYmKGwmJnImJih4LmlzUGxhaW5PYmplY3Qocil8fChpPXguaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmeC5pc0FycmF5KG4pP246W10pOm89biYmeC5pc1BsYWluT2JqZWN0KG4pP246e30sc1t0XT14LmV4dGVuZChsLG8scikpOnIhPT11bmRlZmluZWQmJihzW3RdPXIpKTtyZXR1cm4gc30seC5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHArTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9Db25mbGljdDpmdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09eCYmKGUuJD11KSx0JiZlLmpRdWVyeT09PXgmJihlLmpRdWVyeT1hKSx4fSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtlP3gucmVhZHlXYWl0Kys6eC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpeyhlPT09ITA/LS14LnJlYWR5V2FpdDp4LmlzUmVhZHkpfHwoeC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChvLFt4XSkseC5mbi50cmlnZ2VyJiZ4KG8pLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKSl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9sW20uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09eC50eXBlKGUpfHxlLm5vZGVUeXBlfHx4LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYheS5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuITB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihlLHQsbil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHQ9dHx8bzt2YXIgcj1DLmV4ZWMoZSksaT0hbiYmW107cmV0dXJuIHI/W3QuY3JlYXRlRWxlbWVudChyWzFdKV06KHI9eC5idWlsZEZyYWdtZW50KFtlXSx0LGkpLGkmJngoaSkucmVtb3ZlKCkseC5tZXJnZShbXSxyLmNoaWxkTm9kZXMpKX0scGFyc2VKU09OOkpTT04ucGFyc2UscGFyc2VYTUw6ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXtuPW5ldyBET01QYXJzZXIsdD1uLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKHIpe3Q9dW5kZWZpbmVkfXJldHVybighdHx8dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ4LmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZXZhbDtlPXgudHJpbShlKSxlJiYoMT09PWUuaW5kZXhPZigidXNlIHN0cmljdCIpPyh0PW8uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksdC50ZXh0PWUsby5oZWFkLmFwcGVuZENoaWxkKHQpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpOm4oZSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShrLCJtcy0iKS5yZXBsYWNlKE4sRSl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpO2lmKG4pe2lmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5hcHBseShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGlmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOnYuY2FsbChlKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihqKE9iamVjdChlKSk/eC5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6aC5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmcuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGgscj1lLmxlbmd0aCxpPTA7aWYoIm51bWJlciI9PXR5cGVvZiBuKWZvcig7bj5pO2krKyllW3IrK109dFtpXTtlbHNlIHdoaWxlKHRbaV0hPT11bmRlZmluZWQpZVtyKytdPXRbaSsrXTtyZXR1cm4gZS5sZW5ndGg9cixlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLG89MCxzPWUubGVuZ3RoO2ZvcihuPSEhbjtzPm87bysrKXI9ISF0KGVbb10sbyksbiE9PXImJmkucHVzaChlW29dKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPTAsbz1lLmxlbmd0aCxzPWooZSksYT1bXTtpZihzKWZvcig7bz5pO2krKylyPXQoZVtpXSxpLG4pLG51bGwhPXImJihhW2EubGVuZ3RoXT1yKTtlbHNlIGZvcihpIGluIGUpcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7cmV0dXJuIGYuYXBwbHkoW10sYSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9bikseC5pc0Z1bmN0aW9uKGUpPyhyPWQuY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHguZ3VpZCsrLGkpOnVuZGVmaW5lZH0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpe3ZhciBhPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT14LnR5cGUobikpe2k9ITA7Zm9yKGEgaW4gbil4LmFjY2VzcyhlLHQsYSxuW2FdLCEwLG8scyl9ZWxzZSBpZihyIT09dW5kZWZpbmVkJiYoaT0hMCx4LmlzRnVuY3Rpb24ocil8fChzPSEwKSxsJiYocz8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoeChlKSxuKX0pKSx0KSlmb3IoO3U+YTthKyspdChlW2FdLG4scz9yOnIuY2FsbChlW2FdLGEsdChlW2FdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxub3c6RGF0ZS5ub3csc3dhcDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHM9e307Zm9yKG8gaW4gdClzW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2k9bi5hcHBseShlLHJ8fFtdKTtmb3IobyBpbiB0KWUuc3R5bGVbb109c1tvXTtyZXR1cm4gaX19KSx4LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG58fChuPXguRGVmZXJyZWQoKSwiY29tcGxldGUiPT09by5yZWFkeVN0YXRlP3NldFRpbWVvdXQoeC5yZWFkeSk6KG8uYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSkpLG4ucHJvbWlzZSh0KX0seC5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBqKGUpe3ZhciB0PWUubGVuZ3RoLG49eC50eXBlKGUpO3JldHVybiB4LmlzV2luZG93KGUpPyExOjE9PT1lLm5vZGVUeXBlJiZ0PyEwOiJhcnJheSI9PT1ufHwiZnVuY3Rpb24iIT09biYmKDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXQ9eChvKSxmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxnLG0seSx2PSJzaXp6bGUiKy1uZXcgRGF0ZSxiPWUuZG9jdW1lbnQsdz0wLFQ9MCxDPXN0KCksaz1zdCgpLE49c3QoKSxFPSExLFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KEU9ITAsMCk6MH0saj10eXBlb2YgdW5kZWZpbmVkLEQ9MTw8MzEsQT17fS5oYXNPd25Qcm9wZXJ0eSxMPVtdLHE9TC5wb3AsSD1MLnB1c2gsTz1MLnB1c2gsRj1MLnNsaWNlLFA9TC5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDtuPnQ7dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsVz0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLCQ9Vy5yZXBsYWNlKCJ3IiwidyMiKSxCPSJcXFsiK00rIiooIitXKyIpIitNKyIqKD86KFsqXiR8IX5dPz0pIitNKyIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIiskKyIpfCl8KSIrTSsiKlxcXSIsST0iOigiK1crIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiK0IucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLHo9UmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89UmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFg9UmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9UmVnRXhwKE0rIipbK35dIiksWT1SZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKikiK00rIipcXF0iLCJnIiksVj1SZWdFeHAoSSksRz1SZWdFeHAoIl4iKyQrIiQiKSxKPXtJRDpSZWdFeHAoIl4jKCIrVysiKSIpLENMQVNTOlJlZ0V4cCgiXlxcLigiK1crIikiKSxUQUc6UmVnRXhwKCJeKCIrVy5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6UmVnRXhwKCJeIitCKSxQU0VVRE86UmVnRXhwKCJeIitJKSxDSElMRDpSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOlJlZ0V4cCgiXig/OiIrUisiKSQiLCJpIiksbmVlZHNDb250ZXh0OlJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxRPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxLPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGV0PS9eaFxkJC9pLHR0PS8nfFxcL2csbnQ9UmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIikscnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9PXJ8fG4/dDowPnI/U3RyaW5nLmZyb21DaGFyQ29kZShyKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHI+PjEwLDU2MzIwfDEwMjMmcil9O3RyeXtPLmFwcGx5KEw9Ri5jYWxsKGIuY2hpbGROb2RlcyksYi5jaGlsZE5vZGVzKSxMW2IuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGl0KXtPPXthcHBseTpMLmxlbmd0aD9mdW5jdGlvbihlLHQpe0guYXBwbHkoZSxGLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBvdChlLHQscixpKXt2YXIgbyxzLGEsdSxsLGYsZyxtLHgsdztpZigodD90Lm93bmVyRG9jdW1lbnR8fHQ6YikhPT1wJiZjKHQpLHQ9dHx8cCxyPXJ8fFtdLCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHI7aWYoMSE9PSh1PXQubm9kZVR5cGUpJiY5IT09dSlyZXR1cm5bXTtpZihoJiYhaSl7aWYobz1LLmV4ZWMoZSkpaWYoYT1vWzFdKXtpZig5PT09dSl7aWYocz10LmdldEVsZW1lbnRCeUlkKGEpLCFzfHwhcy5wYXJlbnROb2RlKXJldHVybiByO2lmKHMuaWQ9PT1hKXJldHVybiByLnB1c2gocykscn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKHM9dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKSYmeSh0LHMpJiZzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZXtpZihvWzJdKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigoYT1vWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIE8uYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSkpLHJ9aWYobi5xc2EmJighZHx8IWQudGVzdChlKSkpe2lmKG09Zz12LHg9dCx3PTk9PT11JiZlLDE9PT11JiYib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zj1ndChlKSwoZz10LmdldEF0dHJpYnV0ZSgiaWQiKSk/bT1nLnJlcGxhY2UodHQsIlxcJCYiKTp0LnNldEF0dHJpYnV0ZSgiaWQiLG0pLG09IltpZD0nIittKyInXSAiLGw9Zi5sZW5ndGg7d2hpbGUobC0tKWZbbF09bSttdChmW2xdKTt4PVUudGVzdChlKSYmdC5wYXJlbnROb2RlfHx0LHc9Zi5qb2luKCIsIil9aWYodyl0cnl7cmV0dXJuIE8uYXBwbHkocix4LnF1ZXJ5U2VsZWN0b3JBbGwodykpLHJ9Y2F0Y2goVCl7fWZpbmFsbHl7Z3x8dC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4ga3QoZS5yZXBsYWNlKHosIiQxIiksdCxyLGkpfWZ1bmN0aW9uIHN0KCl7dmFyIGU9W107ZnVuY3Rpb24gdChuLHIpe3JldHVybiBlLnB1c2gobis9IiAiKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbl09cn1yZXR1cm4gdH1mdW5jdGlvbiBhdChlKXtyZXR1cm4gZVt2XT0hMCxlfWZ1bmN0aW9uIHV0KGUpe3ZhciB0PXAuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1lLmxlbmd0aDt3aGlsZShyLS0paS5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiYofnQuc291cmNlSW5kZXh8fEQpLSh+ZS5zb3VyY2VJbmRleHx8RCk7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIHB0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PW4mJnQudHlwZT09PWV9fWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBodChlKXtyZXR1cm4gYXQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QsYXQoZnVuY3Rpb24obixyKXt2YXIgaSxvPWUoW10sbi5sZW5ndGgsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0pbltpPW9bc11dJiYobltpXT0hKHJbaV09bltpXSkpfSl9KX1zPW90LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD8iSFRNTCIhPT10Lm5vZGVOYW1lOiExfSxuPW90LnN1cHBvcnQ9e30sYz1vdC5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudHx8ZTpiLHI9dC5kZWZhdWx0VmlldztyZXR1cm4gdCE9PXAmJjk9PT10Lm5vZGVUeXBlJiZ0LmRvY3VtZW50RWxlbWVudD8ocD10LGY9dC5kb2N1bWVudEVsZW1lbnQsaD0hcyh0KSxyJiZyLmF0dGFjaEV2ZW50JiZyIT09ci50b3AmJnIuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIixmdW5jdGlvbigpe2MoKX0pLG4uYXR0cmlidXRlcz11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKHQuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj4iLGUuZmlyc3RDaGlsZC5jbGFzc05hbWU9ImkiLDI9PT1lLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImkiKS5sZW5ndGh9KSxuLmdldEJ5SWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGYuYXBwZW5kQ2hpbGQoZSkuaWQ9diwhdC5nZXRFbGVtZW50c0J5TmFtZXx8IXQuZ2V0RWxlbWVudHNCeU5hbWUodikubGVuZ3RofSksbi5nZXRCeUlkPyhpLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCE9PWomJmgpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4mJm4ucGFyZW50Tm9kZT9bbl06W119fSxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0pOihkZWxldGUgaS5maW5kLklELGkuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPT1qJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIG4mJm4udmFsdWU9PT10fX0pLGkuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWo/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTp1bmRlZmluZWR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGkuZmluZC5DTEFTUz1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp1bmRlZmluZWR9LGc9W10sZD1bXSwobi5xc2E9US50ZXN0KHQucXVlcnlTZWxlY3RvckFsbCkpJiYodXQoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZC5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxkLnB1c2goIjpjaGVja2VkIil9KSx1dChmdW5jdGlvbihlKXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7bi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxlLmFwcGVuZENoaWxkKG4pLnNldEF0dHJpYnV0ZSgidCIsIiIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3RePScnXSIpLmxlbmd0aCYmZC5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGQucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxkLnB1c2goIiwuKjoiKX0pKSwobi5tYXRjaGVzU2VsZWN0b3I9US50ZXN0KG09Zi53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGYubW96TWF0Y2hlc1NlbGVjdG9yfHxmLm9NYXRjaGVzU2VsZWN0b3J8fGYubXNNYXRjaGVzU2VsZWN0b3IpKSYmdXQoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiZGl2IiksbS5jYWxsKGUsIltzIT0nJ106eCIpLGcucHVzaCgiIT0iLEkpfSksZD1kLmxlbmd0aCYmUmVnRXhwKGQuam9pbigifCIpKSxnPWcubGVuZ3RoJiZSZWdFeHAoZy5qb2luKCJ8IikpLHk9US50ZXN0KGYuY29udGFpbnMpfHxmLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sUz1mLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUscil7aWYoZT09PXIpcmV0dXJuIEU9ITAsMDt2YXIgaT1yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpO3JldHVybiBpPzEmaXx8IW4uc29ydERldGFjaGVkJiZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09aT9lPT09dHx8eShiLGUpPy0xOnI9PT10fHx5KGIscik/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLHIpOjA6NCZpPy0xOjE6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MCxvPWUucGFyZW50Tm9kZSxzPW4ucGFyZW50Tm9kZSxhPVtlXSx1PVtuXTtpZihlPT09bilyZXR1cm4gRT0hMCwwO2lmKCFvfHwhcylyZXR1cm4gZT09PXQ/LTE6bj09PXQ/MTpvPy0xOnM/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLG4pOjA7aWYobz09PXMpcmV0dXJuIGN0KGUsbik7cj1lO3doaWxlKHI9ci5wYXJlbnROb2RlKWEudW5zaGlmdChyKTtyPW47d2hpbGUocj1yLnBhcmVudE5vZGUpdS51bnNoaWZ0KHIpO3doaWxlKGFbaV09PT11W2ldKWkrKztyZXR1cm4gaT9jdChhW2ldLHVbaV0pOmFbaV09PT1iPy0xOnVbaV09PT1iPzE6MH0sdCk6cH0sb3QubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBvdChlLG51bGwsbnVsbCx0KX0sb3QubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpLHQ9dC5yZXBsYWNlKFksIj0nJDEnXSIpLCEoIW4ubWF0Y2hlc1NlbGVjdG9yfHwhaHx8ZyYmZy50ZXN0KHQpfHxkJiZkLnRlc3QodCkpKXRyeXt2YXIgcj1tLmNhbGwoZSx0KTtpZihyfHxuLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goaSl7fXJldHVybiBvdCh0LHAsbnVsbCxbZV0pLmxlbmd0aD4wfSxvdC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx5KGUsdCl9LG90LmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSk7dmFyIHI9aS5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0sbz1yJiZBLmNhbGwoaS5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/cihlLHQsIWgpOnVuZGVmaW5lZDtyZXR1cm4gbz09PXVuZGVmaW5lZD9uLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKHQpOihvPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJm8uc3BlY2lmaWVkP28udmFsdWU6bnVsbDpvfSxvdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb3QudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdLGk9MCxvPTA7aWYoRT0hbi5kZXRlY3REdXBsaWNhdGVzLGw9IW4uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoUyksRSl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPXIucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKHJbaV0sMSl9cmV0dXJuIGV9LG89b3QuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9byhlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9byh0KTtyZXR1cm4gbn0saT1vdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzphdCxtYXRjaDpKLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UobnQscnQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKG50LHJ0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b3QuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmb3QuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNV0mJmVbMl07cmV0dXJuIEouQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dW5kZWZpbmVkP2VbMl09ZVs0XTpuJiZWLnRlc3QobikmJih0PWd0KG4sITApKSYmKHQ9bi5pbmRleE9mKCIpIixuLmxlbmd0aC10KS1uLmxlbmd0aCkmJihlWzBdPWVbMF0uc2xpY2UoMCx0KSxlWzJdPW4uc2xpY2UoMCx0KSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9Q1tlKyIgIl07cmV0dXJuIHR8fCh0PVJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJkMoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1qJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vdC5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/IiE9Ij09PXQ6dD8oaSs9IiIsIj0iPT09dD9pPT09bjoiIT0iPT09dD9pIT09bjoiXj0iPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOiIqPSI9PT10P24mJmkuaW5kZXhPZihuKT4tMToiJD0iPT09dD9uJiZpLnNsaWNlKC1uLmxlbmd0aCk9PT1uOiJ+PSI9PT10PygiICIraSsiICIpLmluZGV4T2Yobik+LTE6Inw9Ij09PXQ/aT09PW58fGkuc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Im50aCIhPT1lLnNsaWNlKDAsMykscz0ibGFzdCIhPT1lLnNsaWNlKC00KSxhPSJvZi10eXBlIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMscCxmLGgsZCxnPW8hPT1zPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsbT10LnBhcmVudE5vZGUseT1hJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkseD0hdSYmIWE7aWYobSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9cFtnXSlpZihhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7ZD1nPSJvbmx5Ij09PWUmJiFkJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGQ9W3M/bS5maXJzdENoaWxkOm0ubGFzdENoaWxkXSxzJiZ4KXtjPW1bdl18fChtW3ZdPXt9KSxsPWNbZV18fFtdLGg9bFswXT09PXcmJmxbMV0sZj1sWzBdPT09dyYmbFsyXSxwPWgmJm0uY2hpbGROb2Rlc1toXTt3aGlsZShwPSsraCYmcCYmcFtnXXx8KGY9aD0wKXx8ZC5wb3AoKSlpZigxPT09cC5ub2RlVHlwZSYmKytmJiZwPT09dCl7Y1tlXT1bdyxoLGZdO2JyZWFrfX1lbHNlIGlmKHgmJihsPSh0W3ZdfHwodFt2XT17fSkpW2VdKSYmbFswXT09PXcpZj1sWzFdO2Vsc2Ugd2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoKGE/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSkmJisrZiYmKHgmJigocFt2XXx8KHBbdl09e30pKVtlXT1bdyxmXSkscD09PXQpKWJyZWFrO3JldHVybiBmLT1pLGY9PT1yfHwwPT09ZiVyJiZmL3I+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnBzZXVkb3NbZV18fGkuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiByW3ZdP3IodCk6ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLGkuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2F0KGZ1bmN0aW9uKGUsbil7dmFyIGksbz1yKGUsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0paT1QLmNhbGwoZSxvW3NdKSxlW2ldPSEobltpXT1vW3NdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6YXQoZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPWEoZS5yZXBsYWNlKHosIiQxIikpO3JldHVybiByW3ZdP2F0KGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLHM9cihlLG51bGwsaSxbXSksYT1lLmxlbmd0aDt3aGlsZShhLS0pKG89c1thXSkmJihlW2FdPSEodFthXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLCFuLnBvcCgpfX0pLGhhczphdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG90KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8byh0KSkuaW5kZXhPZihlKT4tMX19KSxsYW5nOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZXx8IiIpfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIitlKSxlPWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbjtkbyBpZihuPWg/dC5sYW5nOnQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHx0LmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBuPW4udG9Mb3dlckNhc2UoKSxuPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIik7d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zn0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wLmFjdGl2ZUVsZW1lbnQmJighcC5oYXNGb2N1c3x8cC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVOYW1lPiJAInx8Mz09PWUubm9kZVR5cGV8fDQ9PT1lLm5vZGVUeXBlKXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWkucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBldC50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gWi50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9uIj09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHx0LnRvTG93ZXJDYXNlKCk9PT1lLnR5cGUpfSxmaXJzdDpodChmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aHQoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmh0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bMD5uP24rdDpuXX0pLGV2ZW46aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0wO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MTtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDt0PisrcjspZS5wdXNoKHIpO3JldHVybiBlfSl9fSxpLnBzZXVkb3MubnRoPWkucHNldWRvcy5lcTtmb3IodCBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlpLnBzZXVkb3NbdF09cHQodCk7Zm9yKHQgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlpLnBzZXVkb3NbdF09ZnQodCk7ZnVuY3Rpb24gZHQoKXt9ZHQucHJvdG90eXBlPWkuZmlsdGVycz1pLnBzZXVkb3MsaS5zZXRGaWx0ZXJzPW5ldyBkdDtmdW5jdGlvbiBndChlLHQpe3ZhciBuLHIsbyxzLGEsdSxsLGM9a1tlKyIgIl07aWYoYylyZXR1cm4gdD8wOmMuc2xpY2UoMCk7YT1lLHU9W10sbD1pLnByZUZpbHRlcjt3aGlsZShhKXsoIW58fChyPV8uZXhlYyhhKSkpJiYociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHUucHVzaChvPVtdKSksbj0hMSwocj1YLmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKHosIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2ZvcihzIGluIGkuZmlsdGVyKSEocj1KW3NdLmV4ZWMoYSkpfHxsW3NdJiYhKHI9bFtzXShyKSl8fChuPXIuc2hpZnQoKSxvLnB1c2goe3ZhbHVlOm4sdHlwZTpzLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/b3QuZXJyb3IoZSk6ayhlLHUpLnNsaWNlKDApfWZ1bmN0aW9uIG10KGUpe3ZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO2Zvcig7bj50O3QrKylyKz1lW3RdLnZhbHVlO3JldHVybiByfWZ1bmN0aW9uIHl0KGUsdCxuKXt2YXIgaT10LmRpcixvPW4mJiJwYXJlbnROb2RlIj09PWkscz1UKys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQsbixhKXt2YXIgdSxsLGMscD13KyIgIitzO2lmKGEpe3doaWxlKHQ9dFtpXSlpZigoMT09PXQubm9kZVR5cGV8fG8pJiZlKHQsbixhKSlyZXR1cm4hMH1lbHNlIHdoaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylpZihjPXRbdl18fCh0W3ZdPXt9KSwobD1jW2ldKSYmbFswXT09PXApe2lmKCh1PWxbMV0pPT09ITB8fHU9PT1yKXJldHVybiB1PT09ITB9ZWxzZSBpZihsPWNbaV09W3BdLGxbMV09ZSh0LG4sYSl8fHIsbFsxXT09PSEwKXJldHVybiEwfX1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiB4dChlLHQsbixyLGkpe3ZhciBvLHM9W10sYT0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O2Zvcig7dT5hO2ErKykobz1lW2FdKSYmKCFufHxuKG8scixpKSkmJihzLnB1c2gobyksbCYmdC5wdXNoKGEpKTtyZXR1cm4gc31mdW5jdGlvbiBidChlLHQsbixyLGksbyl7cmV0dXJuIHImJiFyW3ZdJiYocj1idChyKSksaSYmIWlbdl0mJihpPWJ0KGksbykpLGF0KGZ1bmN0aW9uKG8scyxhLHUpe3ZhciBsLGMscCxmPVtdLGg9W10sZD1zLmxlbmd0aCxnPW98fEN0KHR8fCIqIixhLm5vZGVUeXBlP1thXTphLFtdKSxtPSFlfHwhbyYmdD9nOnh0KGcsZixlLGEsdSkseT1uP2l8fChvP2U6ZHx8cik/W106czptO2lmKG4mJm4obSx5LGEsdSkscil7bD14dCh5LGgpLHIobCxbXSxhLHUpLGM9bC5sZW5ndGg7d2hpbGUoYy0tKShwPWxbY10pJiYoeVtoW2NdXT0hKG1baFtjXV09cCkpfWlmKG8pe2lmKGl8fGUpe2lmKGkpe2w9W10sYz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJmwucHVzaChtW2NdPXApO2kobnVsbCx5PVtdLGwsdSl9Yz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJihsPWk/UC5jYWxsKG8scCk6ZltjXSk+LTEmJihvW2xdPSEoc1tsXT1wKSl9fWVsc2UgeT14dCh5PT09cz95LnNwbGljZShkLHkubGVuZ3RoKTp5KSxpP2kobnVsbCxzLHksdSk6Ty5hcHBseShzLHkpfSl9ZnVuY3Rpb24gd3QoZSl7dmFyIHQsbixyLG89ZS5sZW5ndGgscz1pLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1zfHxpLnJlbGF0aXZlWyIgIl0sbD1zPzE6MCxjPXl0KGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sYSwhMCkscD15dChmdW5jdGlvbihlKXtyZXR1cm4gUC5jYWxsKHQsZSk+LTF9LGEsITApLGY9W2Z1bmN0aW9uKGUsbixyKXtyZXR1cm4hcyYmKHJ8fG4hPT11KXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOnAoZSxuLHIpKX1dO2Zvcig7bz5sO2wrKylpZihuPWkucmVsYXRpdmVbZVtsXS50eXBlXSlmPVt5dCh2dChmKSxuKV07ZWxzZXtpZihuPWkuZmlsdGVyW2VbbF0udHlwZV0uYXBwbHkobnVsbCxlW2xdLm1hdGNoZXMpLG5bdl0pe2ZvcihyPSsrbDtvPnI7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gYnQobD4xJiZ2dChmKSxsPjEmJm10KGUuc2xpY2UoMCxsLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtsLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoeiwiJDEiKSxuLHI+bCYmd3QoZS5zbGljZShsLHIpKSxvPnImJnd0KGU9ZS5zbGljZShyKSksbz5yJiZtdChlKSl9Zi5wdXNoKG4pfXJldHVybiB2dChmKX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPTAsbz10Lmxlbmd0aD4wLHM9ZS5sZW5ndGg+MCxhPWZ1bmN0aW9uKGEsbCxjLGYsaCl7dmFyIGQsZyxtLHk9W10sdj0wLHg9IjAiLGI9YSYmW10sVD1udWxsIT1oLEM9dSxrPWF8fHMmJmkuZmluZC5UQUcoIioiLGgmJmwucGFyZW50Tm9kZXx8bCksTj13Kz1udWxsPT1DPzE6TWF0aC5yYW5kb20oKXx8LjE7Zm9yKFQmJih1PWwhPT1wJiZsLHI9bik7bnVsbCE9KGQ9a1t4XSk7eCsrKXtpZihzJiZkKXtnPTA7d2hpbGUobT1lW2crK10paWYobShkLGwsYykpe2YucHVzaChkKTticmVha31UJiYodz1OLHI9KytuKX1vJiYoKGQ9IW0mJmQpJiZ2LS0sYSYmYi5wdXNoKGQpKX1pZih2Kz14LG8mJnghPT12KXtnPTA7d2hpbGUobT10W2crK10pbShiLHksbCxjKTtpZihhKXtpZih2PjApd2hpbGUoeC0tKWJbeF18fHlbeF18fCh5W3hdPXEuY2FsbChmKSk7eT14dCh5KX1PLmFwcGx5KGYseSksVCYmIWEmJnkubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb3QudW5pcXVlU29ydChmKX1yZXR1cm4gVCYmKHc9Tix1PUMpLGJ9O3JldHVybiBvP2F0KGEpOmF9YT1vdC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLG89TltlKyIgIl07aWYoIW8pe3R8fCh0PWd0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlvPXd0KHRbbl0pLG9bdl0/ci5wdXNoKG8pOmkucHVzaChvKTtvPU4oZSxUdChpLHIpKX1yZXR1cm4gb307ZnVuY3Rpb24gQ3QoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtmb3IoO2k+cjtyKyspb3QoZSx0W3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIGt0KGUsdCxyLG8pe3ZhciBzLHUsbCxjLHAsZj1ndChlKTtpZighbyYmMT09PWYubGVuZ3RoKXtpZih1PWZbMF09ZlswXS5zbGljZSgwKSx1Lmxlbmd0aD4yJiYiSUQiPT09KGw9dVswXSkudHlwZSYmbi5nZXRCeUlkJiY5PT09dC5ub2RlVHlwZSYmaCYmaS5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZih0PShpLmZpbmQuSUQobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLHQpfHxbXSlbMF0sIXQpcmV0dXJuIHI7ZT1lLnNsaWNlKHUuc2hpZnQoKS52YWx1ZS5sZW5ndGgpfXM9Si5uZWVkc0NvbnRleHQudGVzdChlKT8wOnUubGVuZ3RoO3doaWxlKHMtLSl7aWYobD11W3NdLGkucmVsYXRpdmVbYz1sLnR5cGVdKWJyZWFrO2lmKChwPWkuZmluZFtjXSkmJihvPXAobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLFUudGVzdCh1WzBdLnR5cGUpJiZ0LnBhcmVudE5vZGV8fHQpKSl7aWYodS5zcGxpY2UocywxKSxlPW8ubGVuZ3RoJiZtdCh1KSwhZSlyZXR1cm4gTy5hcHBseShyLG8pLHI7YnJlYWt9fX1yZXR1cm4gYShlLGYpKG8sdCwhaCxyLFUudGVzdChlKSkscn1uLnNvcnRTdGFibGU9di5zcGxpdCgiIikuc29ydChTKS5qb2luKCIiKT09PXYsbi5kZXRlY3REdXBsaWNhdGVzPUUsYygpLG4uc29ydERldGFjaGVkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJkaXYiKSl9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxsdCgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP3VuZGVmaW5lZDplLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxsdCgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT91bmRlZmluZWQ6ZS5kZWZhdWx0VmFsdWV9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8bHQoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIG4/dW5kZWZpbmVkOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6ZVt0XT09PSEwP3QudG9Mb3dlckNhc2UoKTpudWxsfSkseC5maW5kPW90LHguZXhwcj1vdC5zZWxlY3RvcnMseC5leHByWyI6Il09eC5leHByLnBzZXVkb3MseC51bmlxdWU9b3QudW5pcXVlU29ydCx4LnRleHQ9b3QuZ2V0VGV4dCx4LmlzWE1MRG9jPW90LmlzWE1MLHguY29udGFpbnM9b3QuY29udGFpbnN9KGUpO3ZhciBEPXt9O2Z1bmN0aW9uIEEoZSl7dmFyIHQ9RFtlXT17fTtyZXR1cm4geC5lYWNoKGUubWF0Y2godyl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9eC5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/RFtlXXx8QShlKTp4LmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxvLHMsYT1bXSx1PSFlLm9uY2UmJltdLGw9ZnVuY3Rpb24ocCl7Zm9yKHQ9ZS5tZW1vcnkmJnAsbj0hMCxzPWl8fDAsaT0wLG89YS5sZW5ndGgscj0hMDthJiZvPnM7cysrKWlmKGFbc10uYXBwbHkocFswXSxwWzFdKT09PSExJiZlLnN0b3BPbkZhbHNlKXt0PSExO2JyZWFrfXI9ITEsYSYmKHU/dS5sZW5ndGgmJmwodS5zaGlmdCgpKTp0P2E9W106Yy5kaXNhYmxlKCkpfSxjPXthZGQ6ZnVuY3Rpb24oKXtpZihhKXt2YXIgbj1hLmxlbmd0aDsoZnVuY3Rpb24gcyh0KXt4LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPXgudHlwZShuKTsiZnVuY3Rpb24iPT09cj9lLnVuaXF1ZSYmYy5oYXMobil8fGEucHVzaChuKTpuJiZuLmxlbmd0aCYmInN0cmluZyIhPT1yJiZzKG4pfSl9KShhcmd1bWVudHMpLHI/bz1hLmxlbmd0aDp0JiYoaT1uLGwodCkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmeC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXguaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksciYmKG8+PW4mJm8tLSxzPj1uJiZzLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3guaW5BcnJheShlLGEpPi0xOiEoIWF8fCFhLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGE9W10sbz0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PXQ9dW5kZWZpbmVkLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT11bmRlZmluZWQsdHx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIXV9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWF8fG4mJiF1fHwodD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLHI/dS5wdXNoKHQpOmwodCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW59fTtyZXR1cm4gY30seC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbInJlc29sdmUiLCJkb25lIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLHguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLHguQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRpbmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4geC5EZWZlcnJlZChmdW5jdGlvbihuKXt4LmVhY2godCxmdW5jdGlvbih0LG8pe3ZhciBzPW9bMF0sYT14LmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVtvWzFdXShmdW5jdGlvbigpe3ZhciBlPWEmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6bltzKyJXaXRoIl0odGhpcz09PXI/bi5wcm9taXNlKCk6dGhpcyxhP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/eC5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIudGhlbix4LmVhY2godCxmdW5jdGlvbihlLG8pe3ZhciBzPW9bMl0sYT1vWzNdO3Jbb1sxXV09cy5hZGQsYSYmcy5hZGQoZnVuY3Rpb24oKXtuPWF9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVtvWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW29bMF0rIldpdGgiXSh0aGlzPT09aT9yOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW29bMF0rIldpdGgiXT1zLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWQuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT0xIT09cnx8ZSYmeC5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLG89MT09PWk/ZTp4LkRlZmVycmVkKCkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTpyLG49PT1hP28ubm90aWZ5V2l0aCh0LG4pOi0taXx8by5yZXNvbHZlV2l0aCh0LG4pfX0sYSx1LGw7aWYocj4xKWZvcihhPUFycmF5KHIpLHU9QXJyYXkociksbD1BcnJheShyKTtyPnQ7dCsrKW5bdF0mJnguaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUocyh0LGwsbikpLmZhaWwoby5yZWplY3QpLnByb2dyZXNzKHModCx1LGEpKTotLWk7cmV0dXJuIGl8fG8ucmVzb2x2ZVdpdGgobCxuKSxvLnByb21pc2UoKX19KSx4LnN1cHBvcnQ9ZnVuY3Rpb24odCl7dmFyIG49by5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHI9by5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHM9by5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxhPXMuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7cmV0dXJuIG4udHlwZT8obi50eXBlPSJjaGVja2JveCIsdC5jaGVja09uPSIiIT09bi52YWx1ZSx0Lm9wdFNlbGVjdGVkPWEuc2VsZWN0ZWQsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSEwLHQuYm94U2l6aW5nUmVsaWFibGU9ITAsdC5waXhlbFBvc2l0aW9uPSExLG4uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW4uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hYS5kaXNhYmxlZCxuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxuLnZhbHVlPSJ0IixuLnR5cGU9InJhZGlvIix0LnJhZGlvVmFsdWU9InQiPT09bi52YWx1ZSxuLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxuLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxyLmFwcGVuZENoaWxkKG4pLHQuY2hlY2tDbG9uZT1yLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmZvY3VzaW5CdWJibGVzPSJvbmZvY3VzaW4iaW4gZSxpLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsaS5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1pLnN0eWxlLmJhY2tncm91bmRDbGlwLHgoZnVuY3Rpb24oKXt2YXIgbixyLHM9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveCIsYT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07YSYmKG49by5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixhLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGkpLGkuaW5uZXJIVE1MPSIiLGkuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSUiLHguc3dhcChhLG51bGwhPWEuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1pLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1pLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1pLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGkuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksYS5yZW1vdmVDaGlsZChuKSl9KSx0KTp0fSh7fSk7dmFyIEwscSxIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gRigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz14LmV4cGFuZG8rTWF0aC5yYW5kb20oKX1GLnVpZD0xLEYuYWNjZXB0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZT8xPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGU6ITB9LEYucHJvdG90eXBlPXtrZXk6ZnVuY3Rpb24oZSl7aWYoIUYuYWNjZXB0cyhlKSlyZXR1cm4gMDt2YXIgdD17fSxuPWVbdGhpcy5leHBhbmRvXTtpZighbil7bj1GLnVpZCsrO3RyeXt0W3RoaXMuZXhwYW5kb109e3ZhbHVlOm59LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCl9Y2F0Y2gocil7dFt0aGlzLmV4cGFuZG9dPW4seC5leHRlbmQoZSx0KX19cmV0dXJuIHRoaXMuY2FjaGVbbl18fCh0aGlzLmNhY2hlW25dPXt9KSxufSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5rZXkoZSksbz10aGlzLmNhY2hlW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgdClvW3RdPW47ZWxzZSBpZih4LmlzRW1wdHlPYmplY3QobykpeC5leHRlbmQodGhpcy5jYWNoZVtpXSx0KTtlbHNlIGZvcihyIGluIHQpb1tyXT10W3JdO3JldHVybiBvfSxnZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNhY2hlW3RoaXMua2V5KGUpXTtyZXR1cm4gdD09PXVuZGVmaW5lZD9uOm5bdF19LGFjY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmbj09PXVuZGVmaW5lZD8ocj10aGlzLmdldChlLHQpLHIhPT11bmRlZmluZWQ/cjp0aGlzLmdldChlLHguY2FtZWxDYXNlKHQpKSk6KHRoaXMuc2V0KGUsdCxuKSxuIT09dW5kZWZpbmVkP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXMua2V5KGUpLHM9dGhpcy5jYWNoZVtvXTtpZih0PT09dW5kZWZpbmVkKXRoaXMuY2FjaGVbb109e307ZWxzZXt4LmlzQXJyYXkodCk/cj10LmNvbmNhdCh0Lm1hcCh4LmNhbWVsQ2FzZSkpOihpPXguY2FtZWxDYXNlKHQpLHQgaW4gcz9yPVt0LGldOihyPWkscj1yIGluIHM/W3JdOnIubWF0Y2godyl8fFtdKSksbj1yLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHNbcltuXV19fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiF4LmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oZSl7ZVt0aGlzLmV4cGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfX0sTD1uZXcgRixxPW5ldyBGLHguZXh0ZW5kKHthY2NlcHREYXRhOkYuYWNjZXB0cyxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBMLmhhc0RhdGEoZSl8fHEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEwuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0wucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3EucmVtb3ZlKGUsdCl9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpc1swXSxvPTAscz1udWxsO2lmKGU9PT11bmRlZmluZWQpe2lmKHRoaXMubGVuZ3RoJiYocz1MLmdldChpKSwxPT09aS5ub2RlVHlwZSYmIXEuZ2V0KGksImhhc0RhdGFBdHRycyIpKSl7Zm9yKG49aS5hdHRyaWJ1dGVzO24ubGVuZ3RoPm87bysrKXI9bltvXS5uYW1lLDA9PT1yLmluZGV4T2YoImRhdGEtIikmJihyPXguY2FtZWxDYXNlKHIuc2xpY2UoNSkpLFAoaSxyLHNbcl0pKTtxLnNldChpLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gc31yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5zZXQodGhpcyxlKX0pOnguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCl7dmFyIG4scj14LmNhbWVsQ2FzZShlKTtpZihpJiZ0PT09dW5kZWZpbmVkKXtpZihuPUwuZ2V0KGksZSksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPUwuZ2V0KGksciksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPVAoaSxyLHVuZGVmaW5lZCksbiE9PXVuZGVmaW5lZClyZXR1cm4gbn1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPUwuZ2V0KHRoaXMscik7TC5zZXQodGhpcyxyLHQpLC0xIT09ZS5pbmRleE9mKCItIikmJm4hPT11bmRlZmluZWQmJkwuc2V0KHRoaXMsZSx0KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtMLnJlbW92ZSh0aGlzLGUpfSl9fSk7ZnVuY3Rpb24gUChlLHQsbil7dmFyIHI7aWYobj09PXVuZGVmaW5lZCYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShPLCItJDEiKS50b0xvd2VyQ2FzZSgpLG49ZS5nZXRBdHRyaWJ1dGUociksInN0cmluZyI9PXR5cGVvZiBuKXt0cnl7bj0idHJ1ZSI9PT1uPyEwOiJmYWxzZSI9PT1uPyExOiJudWxsIj09PW4/bnVsbDorbisiIj09PW4/K246SC50ZXN0KG4pP0pTT04ucGFyc2Uobik6bn1jYXRjaChpKXt9TC5zZXQoZSx0LG4pfWVsc2Ugbj11bmRlZmluZWQ7cmV0dXJuIG59eC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZT8odD0odHx8ImZ4IikrInF1ZXVlIixyPXEuZ2V0KGUsdCksbiYmKCFyfHx4LmlzQXJyYXkobik/cj1xLmFjY2VzcyhlLHQseC5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W10pOnVuZGVmaW5lZH0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj14LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXguX3F1ZXVlSG9va3MoZSx0KSxzPWZ1bmN0aW9uKCl7eC5kZXF1ZXVlKGUsdCkKK307ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLHMsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gcS5nZXQoZSxuKXx8cS5hY2Nlc3MoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtxLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSx4LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPSJmeCIsbi0tKSxuPmFyZ3VtZW50cy5sZW5ndGg/eC5xdWV1ZSh0aGlzWzBdLGUpOnQ9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj14LnF1ZXVlKHRoaXMsZSx0KTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PW5bMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9eC5EZWZlcnJlZCgpLG89dGhpcyxzPXRoaXMubGVuZ3RoLGE9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLGU9ZXx8ImZ4Ijt3aGlsZShzLS0pbj1xLmdldChvW3NdLGUrInF1ZXVlSG9va3MiKSxuJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKGEpKTtyZXR1cm4gYSgpLGkucHJvbWlzZSh0KX19KTt2YXIgUixNLFc9L1tcdFxyXG5cZl0vZywkPS9cci9nLEI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbeC5wcm9wRml4W2VdfHxlXX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9MCxhPXRoaXMubGVuZ3RoLHU9InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIgIikpe289MDt3aGlsZShpPXRbbysrXSkwPnIuaW5kZXhPZigiICIraSsiICIpJiYocis9aSsiICIpO24uY2xhc3NOYW1lPXgudHJpbShyKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwiIikubWF0Y2godyl8fFtdO2E+cztzKyspaWYobj10aGlzW3NdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIik6IiIpKXtvPTA7d2hpbGUoaT10W28rK10pd2hpbGUoci5pbmRleE9mKCIgIitpKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK2krIiAiLCIgIik7bi5jbGFzc05hbWU9ZT94LnRyaW0ocik6IiJ9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmInN0cmluZyI9PT1uP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOnguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1uKXt2YXIgdCxpPTAsbz14KHRoaXMpLHM9ZS5tYXRjaCh3KXx8W107d2hpbGUodD1zW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZShuPT09cnx8ImJvb2xlYW4iPT09bikmJih0aGlzLmNsYXNzTmFtZSYmcS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6cS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIGk7MT09PXRoaXMubm9kZVR5cGUmJihpPXI/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PWk/aT0iIjoibnVtYmVyIj09dHlwZW9mIGk/aSs9IiI6eC5pc0FycmF5KGkpJiYoaT14Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksdD14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYic2V0ImluIHQmJnQuc2V0KHRoaXMsaSwidmFsdWUiKSE9PXVuZGVmaW5lZHx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4gdD14LnZhbEhvb2tzW2kudHlwZV18fHgudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYiZ2V0ImluIHQmJihuPXQuZ2V0KGksInZhbHVlIikpIT09dW5kZWZpbmVkP246KG49aS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIG4/bi5yZXBsYWNlKCQsIiIpOm51bGw9PW4/IiI6bil9fX0pLHguZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgsbz0ic2VsZWN0LW9uZSI9PT1lLnR5cGV8fDA+aSxzPW8/bnVsbDpbXSxhPW8/aSsxOnIubGVuZ3RoLHU9MD5pP2E6bz9pOjA7Zm9yKDthPnU7dSsrKWlmKG49clt1XSwhKCFuLnNlbGVjdGVkJiZ1IT09aXx8KHguc3VwcG9ydC5vcHREaXNhYmxlZD9uLmRpc2FibGVkOm51bGwhPT1uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSl8fG4ucGFyZW50Tm9kZS5kaXNhYmxlZCYmeC5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PXgobikudmFsKCksbylyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz14Lm1ha2VBcnJheSh0KSxzPWkubGVuZ3RoO3doaWxlKHMtLSlyPWlbc10sKHIuc2VsZWN0ZWQ9eC5pbkFycmF5KHgocikudmFsKCksbyk+PTApJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX0sYXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gdHlwZW9mIGUuZ2V0QXR0cmlidXRlPT09cj94LnByb3AoZSx0LG4pOigxPT09cyYmeC5pc1hNTERvYyhlKXx8KHQ9dC50b0xvd2VyQ2FzZSgpLGk9eC5hdHRySG9va3NbdF18fCh4LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP006UikpLG49PT11bmRlZmluZWQ/aSYmImdldCJpbiBpJiZudWxsIT09KG89aS5nZXQoZSx0KSk/bzoobz14LmZpbmQuYXR0cihlLHQpLG51bGw9PW8/dW5kZWZpbmVkOm8pOm51bGwhPT1uP2kmJiJzZXQiaW4gaSYmKG89aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9vOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOih4LnJlbW92ZUF0dHIoZSx0KSx1bmRlZmluZWQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaCh3KTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pJiYoZVtyXT0hMSksZS5yZW1vdmVBdHRyaWJ1dGUobil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXguc3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmeC5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gbz0xIT09c3x8IXguaXNYTUxEb2MoZSksbyYmKHQ9eC5wcm9wRml4W3RdfHx0LGk9eC5wcm9wSG9va3NbdF0pLG4hPT11bmRlZmluZWQ/aSYmInNldCJpbiBpJiYocj1pLnNldChlLG4sdCkpIT09dW5kZWZpbmVkP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8Qi50ZXN0KGUubm9kZU5hbWUpfHxlLmhyZWY/ZS50YWJJbmRleDotMX19fX0pLE09e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9PT0hMT94LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx4LmVhY2goeC5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj14LmV4cHIuYXR0ckhhbmRsZVt0XXx8eC5maW5kLmF0dHI7eC5leHByLmF0dHJIYW5kbGVbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXguZXhwci5hdHRySGFuZGxlW3RdLG89cj91bmRlZmluZWQ6KHguZXhwci5hdHRySGFuZGxlW3RdPXVuZGVmaW5lZCkhPW4oZSx0LHIpP3QudG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVt0XT1pLG99fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt4LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5pc0FycmF5KHQpP2UuY2hlY2tlZD14LmluQXJyYXkoeChlKS52YWwoKSx0KT49MDp1bmRlZmluZWR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgST0vXmtleS8sej0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sXz0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFUoKXtyZXR1cm4hMH1mdW5jdGlvbiBZKCl7cmV0dXJuITF9ZnVuY3Rpb24gVigpe3RyeXtyZXR1cm4gby5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319eC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzLGEsdSxsLGMscCxmLGgsZCxnLG0seT1xLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihzPW4sbj1zLmhhbmRsZXIsbz1zLnNlbGVjdG9yKSxuLmd1aWR8fChuLmd1aWQ9eC5ndWlkKyspLChsPXkuZXZlbnRzKXx8KGw9eS5ldmVudHM9e30pLChhPXkuaGFuZGxlKXx8KGE9eS5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09cnx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dW5kZWZpbmVkOnguZXZlbnQuZGlzcGF0Y2guYXBwbHkoYS5lbGVtLGFyZ3VtZW50cyl9LGEuZWxlbT1lKSx0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sYz10Lmxlbmd0aDt3aGlsZShjLS0pdT1YLmV4ZWModFtjXSl8fFtdLGQ9bT11WzFdLGc9KHVbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KG8/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9eC5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTptLGRhdGE6aSxoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6byxuZWVkc0NvbnRleHQ6byYmeC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KG8pLG5hbWVzcGFjZTpnLmpvaW4oIi4iKX0scyksKGg9bFtkXSl8fChoPWxbZF09W10saC5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmZi5zZXR1cC5jYWxsKGUsaSxnLGEpIT09ITF8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSwhMSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLHApLHAuaGFuZGxlci5ndWlkfHwocC5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksbz9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLHApOmgucHVzaChwKSx4LmV2ZW50Lmdsb2JhbFtkXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scyxhLHUsbCxjLHAsZixoLGQsZyxtPXEuaGFzRGF0YShlKSYmcS5nZXQoZSk7aWYobSYmKHU9bS5ldmVudHMpKXt0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sbD10Lmxlbmd0aDt3aGlsZShsLS0paWYoYT1YLmV4ZWModFtsXSl8fFtdLGg9Zz1hWzFdLGQ9KGFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoKXtwPXguZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxmPXVbaF18fFtdLGE9YVsyXSYmUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLHM9bz1mLmxlbmd0aDt3aGlsZShvLS0pYz1mW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxhJiYhYS50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGMpKTtzJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxkLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsaCxtLmhhbmRsZSksZGVsZXRlIHVbaF0pfWVsc2UgZm9yKGggaW4gdSl4LmV2ZW50LnJlbW92ZShlLGgrdFtsXSxuLHIsITApO3guaXNFbXB0eU9iamVjdCh1KSYmKGRlbGV0ZSBtLmhhbmRsZSxxLnJlbW92ZShlLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzLGEsdSxsLGMscCxmLGg9W3J8fG9dLGQ9eS5jYWxsKHQsInR5cGUiKT90LnR5cGU6dCxnPXkuY2FsbCh0LCJuYW1lc3BhY2UiKT90Lm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGE9dT1yPXJ8fG8sMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhXy50ZXN0KGQreC5ldmVudC50cmlnZ2VyZWQpJiYoZC5pbmRleE9mKCIuIik+PTAmJihnPWQuc3BsaXQoIi4iKSxkPWcuc2hpZnQoKSxnLnNvcnQoKSksYz0wPmQuaW5kZXhPZigiOiIpJiYib24iK2QsdD10W3guZXhwYW5kb10/dDpuZXcgeC5FdmVudChkLCJvYmplY3QiPT10eXBlb2YgdCYmdCksdC5pc1RyaWdnZXI9aT8yOjMsdC5uYW1lc3BhY2U9Zy5qb2luKCIuIiksdC5uYW1lc3BhY2VfcmU9dC5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitnLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dW5kZWZpbmVkLHQudGFyZ2V0fHwodC50YXJnZXQ9ciksbj1udWxsPT1uP1t0XTp4Lm1ha2VBcnJheShuLFt0XSksZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGl8fCFmLnRyaWdnZXJ8fGYudHJpZ2dlci5hcHBseShyLG4pIT09ITEpKXtpZighaSYmIWYubm9CdWJibGUmJiF4LmlzV2luZG93KHIpKXtmb3IobD1mLmRlbGVnYXRlVHlwZXx8ZCxfLnRlc3QobCtkKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKWgucHVzaChhKSx1PWE7dT09PShyLm93bmVyRG9jdW1lbnR8fG8pJiZoLnB1c2godS5kZWZhdWx0Vmlld3x8dS5wYXJlbnRXaW5kb3d8fGUpfXM9MDt3aGlsZSgoYT1oW3MrK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXQudHlwZT1zPjE/bDpmLmJpbmRUeXBlfHxkLHA9KHEuZ2V0KGEsImV2ZW50cyIpfHx7fSlbdC50eXBlXSYmcS5nZXQoYSwiaGFuZGxlIikscCYmcC5hcHBseShhLG4pLHA9YyYmYVtjXSxwJiZ4LmFjY2VwdERhdGEoYSkmJnAuYXBwbHkmJnAuYXBwbHkoYSxuKT09PSExJiZ0LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHQudHlwZT1kLGl8fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYuX2RlZmF1bHQmJmYuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxuKSE9PSExfHwheC5hY2NlcHREYXRhKHIpfHxjJiZ4LmlzRnVuY3Rpb24ocltkXSkmJiF4LmlzV2luZG93KHIpJiYodT1yW2NdLHUmJihyW2NdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWQscltkXSgpLHguZXZlbnQudHJpZ2dlcmVkPXVuZGVmaW5lZCx1JiYocltjXT11KSksdC5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciB0LG4scixpLG8scz1bXSxhPWQuY2FsbChhcmd1bWVudHMpLHU9KHEuZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbZS50eXBlXXx8W10sbD14LmV2ZW50LnNwZWNpYWxbZS50eXBlXXx8e307aWYoYVswXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhbC5wcmVEaXNwYXRjaHx8bC5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7cz14LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxlLHUpLHQ9MDt3aGlsZSgoaT1zW3QrK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtlLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDt3aGlsZSgobz1pLmhhbmRsZXJzW24rK10pJiYhZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmV8fGUubmFtZXNwYWNlX3JlLnRlc3Qoby5uYW1lc3BhY2UpKSYmKGUuaGFuZGxlT2JqPW8sZS5kYXRhPW8uZGF0YSxyPSgoeC5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxhKSxyIT09dW5kZWZpbmVkJiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGwucG9zdERpc3BhdGNoJiZsLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHM9W10sYT10LmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihhJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPT10aGlzO3U9dS5wYXJlbnROb2RlfHx0aGlzKWlmKHUuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWUudHlwZSl7Zm9yKHI9W10sbj0wO2E+bjtuKyspbz10W25dLGk9by5zZWxlY3RvcisiICIscltpXT09PXVuZGVmaW5lZCYmKHJbaV09by5uZWVkc0NvbnRleHQ/eChpLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChpLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCkscltpXSYmci5wdXNoKG8pO3IubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpyfSl9cmV0dXJuIHQubGVuZ3RoPmEmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOnQuc2xpY2UoYSl9KSxzfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHM9dC5idXR0b247cmV0dXJuIG51bGw9PWUucGFnZVgmJm51bGwhPXQuY2xpZW50WCYmKG49ZS50YXJnZXQub3duZXJEb2N1bWVudHx8byxyPW4uZG9jdW1lbnRFbGVtZW50LGk9bi5ib2R5LGUucGFnZVg9dC5jbGllbnRYKyhyJiZyLnNjcm9sbExlZnR8fGkmJmkuc2Nyb2xsTGVmdHx8MCktKHImJnIuY2xpZW50TGVmdHx8aSYmaS5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPXQuY2xpZW50WSsociYmci5zY3JvbGxUb3B8fGkmJmkuc2Nyb2xsVG9wfHwwKS0ociYmci5jbGllbnRUb3B8fGkmJmkuY2xpZW50VG9wfHwwKSksZS53aGljaHx8cz09PXVuZGVmaW5lZHx8KGUud2hpY2g9MSZzPzE6MiZzPzM6NCZzPzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3guZXhwYW5kb10pcmV0dXJuIGU7dmFyIHQsbixyLGk9ZS50eXBlLHM9ZSxhPXRoaXMuZml4SG9va3NbaV07YXx8KHRoaXMuZml4SG9va3NbaV09YT16LnRlc3QoaSk/dGhpcy5tb3VzZUhvb2tzOkkudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPWEucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoYS5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KHMpLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPXNbbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9byksMz09PWUudGFyZ2V0Lm5vZGVUeXBlJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksYS5maWx0ZXI/YS5maWx0ZXIoZSxzKTplfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PVYoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp1bmRlZmluZWR9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PVYoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZ4Lm5vZGVOYW1lKHRoaXMsImlucHV0Iik/KHRoaXMuY2xpY2soKSwhMSk6dW5kZWZpbmVkfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT11bmRlZmluZWQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguZXh0ZW5kKG5ldyB4LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj94LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnguZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHgucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9LHguRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHguRXZlbnQ/KGUmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9VOlkpOnRoaXMudHlwZT1lLHQmJnguZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHgubm93KCksdGhpc1t4LmV4cGFuZG9dPSEwLHVuZGVmaW5lZCk6bmV3IHguRXZlbnQoZSx0KX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6WSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1VLGUmJmUucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9VSxlJiZlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1VLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSx4LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3guZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuKCFpfHxpIT09ciYmIXguY29udGFpbnMocixpKSkmJihlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmby5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmby5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPW58fHQsdD11bmRlZmluZWQpO2ZvcihzIGluIGUpdGhpcy5vbihzLHQsbixlW3NdLGkpO3JldHVybiB0aGlzfWlmKG51bGw9PW4mJm51bGw9PXI/KHI9dCxuPXQ9dW5kZWZpbmVkKTpudWxsPT1yJiYoInN0cmluZyI9PXR5cGVvZiB0PyhyPW4sbj11bmRlZmluZWQpOihyPW4sbj10LHQ9dW5kZWZpbmVkKSkscj09PSExKXI9WTtlbHNlIGlmKCFyKXJldHVybiB0aGlzO3JldHVybiAxPT09aSYmKG89cixyPWZ1bmN0aW9uKGUpe3JldHVybiB4KCkub2ZmKGUpLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmd1aWQ9by5ndWlkfHwoby5ndWlkPXguZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5hZGQodGhpcyxlLHIsbix0KX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLHgoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4odD09PSExfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkmJihuPXQsdD11bmRlZmluZWQpLG49PT0hMSYmKG49WSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtyZXR1cm4gbj94LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApOnVuZGVmaW5lZH19KTt2YXIgRz0vXi5bXjojXFtcLixdKiQvLEo9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sUT14LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LEs9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9eChlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IoO24+ZTtlKyspaWYoeC5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZXQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFldCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmUS50ZXN0KGUpP3goZSk6ZXx8W10sITEpLmxlbmd0aH0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10scz1RLnRlc3QoZSl8fCJzdHJpbmciIT10eXBlb2YgZT94KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7aT5yO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKDExPm4ubm9kZVR5cGUmJihzP3MuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJnguZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSkpe249by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP3gudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/Zy5jYWxsKHgoZSksdGhpc1swXSk6Zy5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgZT94KGUsdCk6eC5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj14Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gWihlLHQpe3doaWxlKChlPWVbdF0pJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFooZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29udGVudERvY3VtZW50fHx4Lm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT14Lm1hcCh0aGlzLHQsbik7cmV0dXJuIlVudGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09dHlwZW9mIHImJihpPXguZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihLW2VdfHx4LnVuaXF1ZShpKSxKLnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT1uIT09dW5kZWZpbmVkO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmeChlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGV0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKEcudGVzdCh0KSlyZXR1cm4geC5maWx0ZXIodCxlLG4pO3Q9eC5maWx0ZXIodCxlKX1yZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGcuY2FsbCh0LGUpPj0wIT09bn0pfXZhciB0dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLG50PS88KFtcdzpdKykvLHJ0PS88fCYjP1x3KzsvLGl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksb3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksc3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYXQ9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHV0PS9edHJ1ZVwvKC4qKS8sbHQ9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLGN0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Y3Qub3B0Z3JvdXA9Y3Qub3B0aW9uLGN0LnRib2R5PWN0LnRmb290PWN0LmNvbGdyb3VwPWN0LmNhcHRpb249Y3QudGhlYWQsY3QudGg9Y3QudGQseC5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT11bmRlZmluZWQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8bykuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1wdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShtdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJmR0KG10KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1lPyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKGU9PT11bmRlZmluZWQmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFpdC50ZXN0KGUpJiYhY3RbKG50LmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWUucmVwbGFjZSh0dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7cj5uO24rKyl0PXRoaXNbbl18fHt9LDE9PT10Lm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEobXQodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChpKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1mLmFwcGx5KFtdLGUpO3ZhciByLGksbyxzLGEsdSxsPTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsaD1jLTEsZD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGQpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBkfHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJnN0LnRlc3QoZCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWQuY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihyPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcyksaT1yLmZpcnN0Q2hpbGQsMT09PXIuY2hpbGROb2Rlcy5sZW5ndGgmJihyPWkpLGkpKXtmb3Iobz14Lm1hcChtdChyLCJzY3JpcHQiKSxmdCkscz1vLmxlbmd0aDtjPmw7bCsrKWE9cixsIT09aCYmKGE9eC5jbG9uZShhLCEwLCEwKSxzJiZ4Lm1lcmdlKG8sbXQoYSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1tsXSxhLGwpO2lmKHMpZm9yKHU9b1tvLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKG8saHQpLGw9MDtzPmw7bCsrKWE9b1tsXSxhdC50ZXN0KGEudHlwZXx8IiIpJiYhcS5hY2Nlc3MoYSwiZ2xvYmFsRXZhbCIpJiZ4LmNvbnRhaW5zKHUsYSkmJihhLnNyYz94Ll9ldmFsVXJsKGEuc3JjKTp4Lmdsb2JhbEV2YWwoYS50ZXh0Q29udGVudC5yZXBsYWNlKGx0LCIiKSkpfXJldHVybiB0aGlzfX0pLHguZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlKXt2YXIgbixyPVtdLGk9eChlKSxvPWkubGVuZ3RoLTEscz0wO2Zvcig7bz49cztzKyspbj1zPT09bz90aGlzOnRoaXMuY2xvbmUoITApLHgoaVtzXSlbdF0obiksaC5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KSx4LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jbG9uZU5vZGUoITApLHU9eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoISh4LnN1cHBvcnQubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHguaXNYTUxEb2MoZSkpKWZvcihzPW10KGEpLG89bXQoZSkscj0wLGk9by5sZW5ndGg7aT5yO3IrKyl5dChvW3JdLHNbcl0pO2lmKHQpaWYobilmb3Iobz1vfHxtdChlKSxzPXN8fG10KGEpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspZ3Qob1tyXSxzW3JdKTtlbHNlIGd0KGUsYSk7cmV0dXJuIHM9bXQoYSwic2NyaXB0Iikscy5sZW5ndGg+MCYmZHQocywhdSYmbXQoZSwic2NyaXB0IikpLGF9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsLGM9MCxwPWUubGVuZ3RoLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1bXTtmb3IoO3A+YztjKyspaWYoaT1lW2NdLGl8fDA9PT1pKWlmKCJvYmplY3QiPT09eC50eXBlKGkpKXgubWVyZ2UoaCxpLm5vZGVUeXBlP1tpXTppKTtlbHNlIGlmKHJ0LnRlc3QoaSkpe289b3x8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShudC5leGVjKGkpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGE9Y3Rbc118fGN0Ll9kZWZhdWx0LG8uaW5uZXJIVE1MPWFbMV0raS5yZXBsYWNlKHR0LCI8JDE+PC8kMj4iKSthWzJdLGw9YVswXTt3aGlsZShsLS0pbz1vLmxhc3RDaGlsZDt4Lm1lcmdlKGgsby5jaGlsZE5vZGVzKSxvPWYuZmlyc3RDaGlsZCxvLnRleHRDb250ZW50PSIifWVsc2UgaC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUoaSkpO2YudGV4dENvbnRlbnQ9IiIsYz0wO3doaWxlKGk9aFtjKytdKWlmKCghcnx8LTE9PT14LmluQXJyYXkoaSxyKSkmJih1PXguY29udGFpbnMoaS5vd25lckRvY3VtZW50LGkpLG89bXQoZi5hcHBlbmRDaGlsZChpKSwic2NyaXB0IiksdSYmZHQobyksbikpe2w9MDt3aGlsZShpPW9bbCsrXSlhdC50ZXN0KGkudHlwZXx8IiIpJiZuLnB1c2goaSl9cmV0dXJuIGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT14LmV2ZW50LnNwZWNpYWwsdT0wO2Zvcig7KG49ZVt1XSkhPT11bmRlZmluZWQ7dSsrKXtpZihGLmFjY2VwdHMobikmJihvPW5bcS5leHBhbmRvXSxvJiYodD1xLmNhY2hlW29dKSkpe2lmKHI9T2JqZWN0LmtleXModC5ldmVudHN8fHt9KSxyLmxlbmd0aClmb3Iocz0wOyhpPXJbc10pIT09dW5kZWZpbmVkO3MrKylhW2ldP3guZXZlbnQucmVtb3ZlKG4saSk6eC5yZW1vdmVFdmVudChuLGksdC5oYW5kbGUpO3EuY2FjaGVbb10mJmRlbGV0ZSBxLmNhY2hlW29dfWRlbGV0ZSBMLmNhY2hlW25bTC5leHBhbmRvXV19fSxfZXZhbFVybDpmdW5jdGlvbihlKXtyZXR1cm4geC5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfX0pO2Z1bmN0aW9uIHB0KGUsdCl7cmV0dXJuIHgubm9kZU5hbWUoZSwidGFibGUiKSYmeC5ub2RlTmFtZSgxPT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTplfWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gaHQoZSl7dmFyIHQ9dXQuZXhlYyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBkdChlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDtmb3IoO24+cjtyKyspcS5zZXQoZVtyXSwiZ2xvYmFsRXZhbCIsIXR8fHEuZ2V0KHRbcl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLGksbyxzLGEsdSxsO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihxLmhhc0RhdGEoZSkmJihvPXEuYWNjZXNzKGUpLHM9cS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIHMuaGFuZGxlLHMuZXZlbnRzPXt9O2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO3I+bjtuKyspeC5ldmVudC5hZGQodCxpLGxbaV1bbl0pfUwuaGFzRGF0YShlKSYmKGE9TC5hY2Nlc3MoZSksdT14LmV4dGVuZCh7fSxhKSxMLnNldCh0LHUpKX19ZnVuY3Rpb24gbXQoZSx0KXt2YXIgbj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTplLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W107cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJngubm9kZU5hbWUoZSx0KT94Lm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIHl0KGUsdCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1uJiZvdC50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX14LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk6KHRoaXNbMF0mJih0PXgoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVuZ3RoP24ud3JhcEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXguaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXt4Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8eCh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSk7dmFyIHZ0LHh0LGJ0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx3dD0vXm1hcmdpbi8sVHQ9UmVnRXhwKCJeKCIrYisiKSguKikkIiwiaSIpLEN0PVJlZ0V4cCgiXigiK2IrIikoPyFweClbYS16JV0rJCIsImkiKSxrdD1SZWdFeHAoIl4oWystXSk9KCIrYisiKSIsImkiKSxOdD17Qk9EWToiYmxvY2sifSxFdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sanQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxEdD1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEF0KGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1EdC5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9RHRbaV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBlLmdldENvbXB1dGVkU3R5bGUodCxudWxsKX1mdW5jdGlvbiBIdChlLHQpe3ZhciBuLHIsaSxvPVtdLHM9MCxhPWUubGVuZ3RoO2Zvcig7YT5zO3MrKylyPWVbc10sci5zdHlsZSYmKG9bc109cS5nZXQociwib2xkZGlzcGxheSIpLG49ci5zdHlsZS5kaXNwbGF5LHQ/KG9bc118fCJub25lIiE9PW58fChyLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZMdChyKSYmKG9bc109cS5hY2Nlc3Mociwib2xkZGlzcGxheSIsUnQoci5ub2RlTmFtZSkpKSk6b1tzXXx8KGk9THQociksKG4mJiJub25lIiE9PW58fCFpKSYmcS5zZXQociwib2xkZGlzcGxheSIsaT9uOnguY3NzKHIsImRpc3BsYXkiKSkpKTtmb3Iocz0wO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJih0JiYibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIiIT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNwbGF5PXQ/b1tzXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGV9eC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30scz0wO2lmKHguaXNBcnJheSh0KSl7Zm9yKHI9cXQoZSksaT10Lmxlbmd0aDtpPnM7cysrKW9bdFtzXV09eC5jc3MoZSx0W3NdLCExLHIpO3JldHVybiBvfXJldHVybiBuIT09dW5kZWZpbmVkP3guc3R5bGUoZSx0LG4pOnguY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe0x0KHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj12dChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjoiY3NzRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpLHU9ZS5zdHlsZTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdCh1LGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0sbj09PXVuZGVmaW5lZD9zJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITEscikpIT09dW5kZWZpbmVkP2k6dVt0XToobz10eXBlb2Ygbiwic3RyaW5nIj09PW8mJihpPWt0LmV4ZWMobikpJiYobj0oaVsxXSsxKSppWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSx0KSksbz0ibnVtYmVyIiksbnVsbD09bnx8Im51bWJlciI9PT1vJiZpc05hTihuKXx8KCJudW1iZXIiIT09b3x8eC5jc3NOdW1iZXJbYV18fChuKz0icHgiKSx4LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KHVbdF09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJihuPXMuc2V0KGUsbixyKSk9PT11bmRlZmluZWR8fCh1W3RdPW4pKSx1bmRlZmluZWQpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpO3JldHVybiB0PXguY3NzUHJvcHNbYV18fCh4LmNzc1Byb3BzW2FdPUF0KGUuc3R5bGUsYSkpLHM9eC5jc3NIb29rc1t0XXx8eC5jc3NIb29rc1thXSxzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITAsbikpLGk9PT11bmRlZmluZWQmJihpPXZ0KGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFN0JiYoaT1TdFt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksbj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmkpOml9fSksdnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPW58fHF0KGUpLGE9cz9zLmdldFByb3BlcnR5VmFsdWUodCl8fHNbdF06dW5kZWZpbmVkLHU9ZS5zdHlsZTtyZXR1cm4gcyYmKCIiIT09YXx8eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXguc3R5bGUoZSx0KSksQ3QudGVzdChhKSYmd3QudGVzdCh0KSYmKHI9dS53aWR0aCxpPXUubWluV2lkdGgsbz11Lm1heFdpZHRoLHUubWluV2lkdGg9dS5tYXhXaWR0aD11LndpZHRoPWEsYT1zLndpZHRoLHUud2lkdGg9cix1Lm1pbldpZHRoPWksdS5tYXhXaWR0aD1vKSksYX07ZnVuY3Rpb24gT3QoZSx0LG4pe3ZhciByPVR0LmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gRnQoZSx0LG4scixpKXt2YXIgbz1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10PzE6MCxzPTA7Zm9yKDs0Pm87bys9MikibWFyZ2luIj09PW4mJihzKz14LmNzcyhlLG4ranRbb10sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJihzLT14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYocy09eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk6KHMrPXguY3NzKGUsInBhZGRpbmciK2p0W29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihzKz14LmNzcyhlLCJib3JkZXIiK2p0W29dKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gc31mdW5jdGlvbiBQdChlLHQsbil7dmFyIHI9ITAsaT0id2lkdGgiPT09dD9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0LG89cXQoZSkscz14LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLG8pO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9dnQoZSx0LG8pLCgwPml8fG51bGw9PWkpJiYoaT1lLnN0eWxlW3RdKSxDdC50ZXN0KGkpKXJldHVybiBpO3I9cyYmKHguc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8aT09PWUuc3R5bGVbdF0pLGk9cGFyc2VGbG9hdChpKXx8MH1yZXR1cm4gaStGdChlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxyLG8pKyJweCJ9ZnVuY3Rpb24gUnQoZSl7dmFyIHQ9byxuPU50W2VdO3JldHVybiBufHwobj1NdChlLHQpLCJub25lIiE9PW4mJm58fCh4dD0oeHR8fHgoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKS5jc3MoImNzc1RleHQiLCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBwZW5kVG8odC5kb2N1bWVudEVsZW1lbnQpLHQ9KHh0WzBdLmNvbnRlbnRXaW5kb3d8fHh0WzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksdC5jbG9zZSgpLG49TXQoZSx0KSx4dC5kZXRhY2goKSksTnRbZV09biksbn1mdW5jdGlvbiBNdChlLHQpe3ZhciBuPXgodC5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyh0LmJvZHkpLHI9eC5jc3MoblswXSwiZGlzcGxheSIpO3JldHVybiBuLnJlbW92ZSgpLHJ9eC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIG4/MD09PWUub2Zmc2V0V2lkdGgmJmJ0LnRlc3QoeC5jc3MoZSwiZGlzcGxheSIpKT94LnN3YXAoZSxFdCxmdW5jdGlvbigpe3JldHVybiBQdChlLHQscil9KTpQdChlLHQscik6dW5kZWZpbmVkfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPXImJnF0KGUpO3JldHVybiBPdChlLG4scj9GdChlLHQscix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sdnQsW2UsIm1hcmdpblJpZ2h0Il0pOnVuZGVmaW5lZH19KSwheC5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJnguZm4ucG9zaXRpb24mJnguZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4pe3JldHVybiBuPyhuPXZ0KGUsdCksQ3QudGVzdChuKT94KGUpLnBvc2l0aW9uKClbdF0rInB4IjpuKTp1bmRlZmluZWR9fX0pfSkseC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gMD49ZS5vZmZzZXRXaWR0aCYmMD49ZS5vZmZzZXRIZWlnaHR9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStqdFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSx3dC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1PdCl9KTt2YXIgV3Q9LyUyMC9nLCR0PS9cW1xdJC8sQnQ9L1xyP1xuL2csSXQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLHp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmenQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUl0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFvdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKEJ0LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShCdCwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LHJbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZih0PT09dW5kZWZpbmVkJiYodD14LmFqYXhTZXR0aW5ncyYmeC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLHguaXNBcnJheShlKXx8ZS5qcXVlcnkmJiF4LmlzUGxhaW5PYmplY3QoZSkpeC5lYWNoKGUsZnVuY3Rpb24oKXtpKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlfdChuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKCImIikucmVwbGFjZShXdCwiKyIpfTtmdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaTtpZih4LmlzQXJyYXkodCkpeC5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHwkdC50ZXN0KGUpP3IoZSxpKTpfdChlKyJbIisoIm9iamVjdCI9PXR5cGVvZiBpP3Q6IiIpKyJdIixpLG4scil9KTtlbHNlIGlmKG58fCJvYmplY3QiIT09eC50eXBlKHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpX3QoZSsiWyIraSsiXSIsdFtpXSxuLHIpfXguZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLHguZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCkKK30sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KTt2YXIgWHQsVXQsWXQ9eC5ub3coKSxWdD0vXD8vLEd0PS8jLiokLyxKdD0vKFs/Jl0pXz1bXiZdKi8sUXQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxLdD0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxadD0vXig/OkdFVHxIRUFEKSQvLGVuPS9eXC9cLy8sdG49L14oW1x3ListXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLG5uPXguZm4ubG9hZCxybj17fSxvbj17fSxzbj0iKi8iLmNvbmNhdCgiKiIpO3RyeXtVdD1pLmhyZWZ9Y2F0Y2goYW4pe1V0PW8uY3JlYXRlRWxlbWVudCgiYSIpLFV0LmhyZWY9IiIsVXQ9VXQuaHJlZn1YdD10bi5leGVjKFV0LnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiB1bihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iKiIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaCh3KXx8W107aWYoeC5pc0Z1bmN0aW9uKG4pKXdoaWxlKHI9b1tpKytdKSIrIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8IioiLChlW3JdPWVbcl18fFtdKS51bnNoaWZ0KG4pKTooZVtyXT1lW3JdfHxbXSkucHVzaChuKX19ZnVuY3Rpb24gbG4oZSx0LG4scil7dmFyIGk9e30sbz1lPT09b247ZnVuY3Rpb24gcyhhKXt2YXIgdTtyZXR1cm4gaVthXT0hMCx4LmVhY2goZVthXXx8W10sZnVuY3Rpb24oZSxhKXt2YXIgbD1hKHQsbixyKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGx8fG98fGlbbF0/bz8hKHU9bCk6dW5kZWZpbmVkOih0LmRhdGFUeXBlcy51bnNoaWZ0KGwpLHMobCksITEpfSksdX1yZXR1cm4gcyh0LmRhdGFUeXBlc1swXSl8fCFpWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuLHIsaT14LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl0W25dIT09dW5kZWZpbmVkJiYoKGlbbl0/ZTpyfHwocj17fSkpW25dPXRbbl0pO3JldHVybiByJiZ4LmV4dGVuZCghMCxlLHIpLGV9eC5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJm5uKXJldHVybiBubi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHIsaSxvLHM9dGhpcyxhPWUuaW5kZXhPZigiICIpO3JldHVybiBhPj0wJiYocj1lLnNsaWNlKGEpLGU9ZS5zbGljZSgwLGEpKSx4LmlzRnVuY3Rpb24odCk/KG49dCx0PXVuZGVmaW5lZCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLHMubGVuZ3RoPjAmJnguYWpheCh7dXJsOmUsdHlwZTppLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHMuaHRtbChyP3goIjxkaXY+IikuYXBwZW5kKHgucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuY29tcGxldGUobiYmZnVuY3Rpb24oZSx0KXtzLmVhY2gobixvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KSx0aGlzfSx4LmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx4LmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VXQsdHlwZToiR0VUIixpc0xvY2FsOkt0LnRlc3QoWHRbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6c24sdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjp4LnBhcnNlSlNPTiwidGV4dCB4bWwiOngucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P2NuKGNuKGUseC5hamF4U2V0dGluZ3MpLHQpOmNuKHguYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOnVuKHJuKSxhamF4VHJhbnNwb3J0OnVuKG9uKSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dW5kZWZpbmVkKSx0PXR8fHt9O3ZhciBuLHIsaSxvLHMsYSx1LGwsYz14LmFqYXhTZXR1cCh7fSx0KSxwPWMuY29udGV4dHx8YyxmPWMuY29udGV4dCYmKHAubm9kZVR5cGV8fHAuanF1ZXJ5KT94KHApOnguZXZlbnQsaD14LkRlZmVycmVkKCksZD14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPWMuc3RhdHVzQ29kZXx8e30sbT17fSx5PXt9LHY9MCxiPSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT12KXtpZighbyl7bz17fTt3aGlsZSh0PVF0LmV4ZWMoaSkpb1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1vW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXY/aTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB2fHwoZT15W25dPXlbbl18fGUsbVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiB2fHwoYy5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj52KWZvcih0IGluIGUpZ1t0XT1bZ1t0XSxlW3RdXTtlbHNlIFQuYWx3YXlzKGVbVC5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8YjtyZXR1cm4gbiYmbi5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKGgucHJvbWlzZShUKS5jb21wbGV0ZT1kLmFkZCxULnN1Y2Nlc3M9VC5kb25lLFQuZXJyb3I9VC5mYWlsLGMudXJsPSgoZXx8Yy51cmx8fFV0KSsiIikucmVwbGFjZShHdCwiIikucmVwbGFjZShlbixYdFsxXSsiLy8iKSxjLnR5cGU9dC5tZXRob2R8fHQudHlwZXx8Yy5tZXRob2R8fGMudHlwZSxjLmRhdGFUeXBlcz14LnRyaW0oYy5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbIiJdLG51bGw9PWMuY3Jvc3NEb21haW4mJihhPXRuLmV4ZWMoYy51cmwudG9Mb3dlckNhc2UoKSksYy5jcm9zc0RvbWFpbj0hKCFhfHxhWzFdPT09WHRbMV0mJmFbMl09PT1YdFsyXSYmKGFbM118fCgiaHR0cDoiPT09YVsxXT8iODAiOiI0NDMiKSk9PT0oWHRbM118fCgiaHR0cDoiPT09WHRbMV0/IjgwIjoiNDQzIikpKSksYy5kYXRhJiZjLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGMuZGF0YSYmKGMuZGF0YT14LnBhcmFtKGMuZGF0YSxjLnRyYWRpdGlvbmFsKSksbG4ocm4sYyx0LFQpLDI9PT12KXJldHVybiBUO3U9Yy5nbG9iYWwsdSYmMD09PXguYWN0aXZlKysmJnguZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IiksYy50eXBlPWMudHlwZS50b1VwcGVyQ2FzZSgpLGMuaGFzQ29udGVudD0hWnQudGVzdChjLnR5cGUpLHI9Yy51cmwsYy5oYXNDb250ZW50fHwoYy5kYXRhJiYocj1jLnVybCs9KFZ0LnRlc3Qocik/IiYiOiI/IikrYy5kYXRhLGRlbGV0ZSBjLmRhdGEpLGMuY2FjaGU9PT0hMSYmKGMudXJsPUp0LnRlc3Qocik/ci5yZXBsYWNlKEp0LCIkMV89IitZdCsrKTpyKyhWdC50ZXN0KHIpPyImIjoiPyIpKyJfPSIrWXQrKykpLGMuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlmaWVkW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2RpZmllZFtyXSkseC5ldGFnW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHguZXRhZ1tyXSkpLChjLmRhdGEmJmMuaGFzQ29udGVudCYmYy5jb250ZW50VHlwZSE9PSExfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGMuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixjLmRhdGFUeXBlc1swXSYmYy5hY2NlcHRzW2MuZGF0YVR5cGVzWzBdXT9jLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dKygiKiIhPT1jLmRhdGFUeXBlc1swXT8iLCAiK3NuKyI7IHE9MC4wMSI6IiIpOmMuYWNjZXB0c1siKiJdKTtmb3IobCBpbiBjLmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGwsYy5oZWFkZXJzW2xdKTtpZihjLmJlZm9yZVNlbmQmJihjLmJlZm9yZVNlbmQuY2FsbChwLFQsYyk9PT0hMXx8Mj09PXYpKXJldHVybiBULmFib3J0KCk7Yj0iYWJvcnQiO2ZvcihsIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KVRbbF0oY1tsXSk7aWYobj1sbihvbixjLHQsVCkpe1QucmVhZHlTdGF0ZT0xLHUmJmYudHJpZ2dlcigiYWpheFNlbmQiLFtULGNdKSxjLmFzeW5jJiZjLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe1QuYWJvcnQoInRpbWVvdXQiKX0sYy50aW1lb3V0KSk7dHJ5e3Y9MSxuLnNlbmQobSxrKX1jYXRjaChDKXtpZighKDI+dikpdGhyb3cgQztrKC0xLEMpfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsoZSx0LG8sYSl7dmFyIGwsbSx5LGIsdyxDPXQ7MiE9PXYmJih2PTIscyYmY2xlYXJUaW1lb3V0KHMpLG49dW5kZWZpbmVkLGk9YXx8IiIsVC5yZWFkeVN0YXRlPWU+MD80OjAsbD1lPj0yMDAmJjMwMD5lfHwzMDQ9PT1lLG8mJihiPXBuKGMsVCxvKSksYj1mbihjLGIsVCxsKSxsPyhjLmlmTW9kaWZpZWQmJih3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYoeC5sYXN0TW9kaWZpZWRbcl09dyksdz1ULmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKHguZXRhZ1tyXT13KSksMjA0PT09ZXx8IkhFQUQiPT09Yy50eXBlP0M9Im5vY29udGVudCI6MzA0PT09ZT9DPSJub3Rtb2RpZmllZCI6KEM9Yi5zdGF0ZSxtPWIuZGF0YSx5PWIuZXJyb3IsbD0heSkpOih5PUMsKGV8fCFDKSYmKEM9ImVycm9yIiwwPmUmJihlPTApKSksVC5zdGF0dXM9ZSxULnN0YXR1c1RleHQ9KHR8fEMpKyIiLGw/aC5yZXNvbHZlV2l0aChwLFttLEMsVF0pOmgucmVqZWN0V2l0aChwLFtULEMseV0pLFQuc3RhdHVzQ29kZShnKSxnPXVuZGVmaW5lZCx1JiZmLnRyaWdnZXIobD8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtULGMsbD9tOnldKSxkLmZpcmVXaXRoKHAsW1QsQ10pLHUmJihmLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW1QsY10pLC0teC5hY3RpdmV8fHguZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiBUfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZ2V0KGUsdW5kZWZpbmVkLHQsInNjcmlwdCIpfX0pLHguZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLHQpe3hbdF09ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIHguaXNGdW5jdGlvbihuKSYmKGk9aXx8cixyPW4sbj11bmRlZmluZWQpLHguYWpheCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0pfX0pO2Z1bmN0aW9uIHBuKGUsdCxuKXt2YXIgcixpLG8scyxhPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSxyPT09dW5kZWZpbmVkJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBhKWlmKGFbaV0mJmFbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31zfHwocz1pKX1vPW98fHN9cmV0dXJuIG8/KG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXSk6dW5kZWZpbmVkfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsbD17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IocyBpbiBlLmNvbnZlcnRlcnMpbFtzLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1tzXTtvPWMuc2hpZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11dPXQpLCF1JiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSx1PW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPXU7ZWxzZSBpZigiKiIhPT11JiZ1IT09byl7aWYocz1sW3UrIiAiK29dfHxsWyIqICIrb10sIXMpZm9yKGkgaW4gbClpZihhPWkuc3BsaXQoIiAiKSxhWzFdPT09byYmKHM9bFt1KyIgIithWzBdXXx8bFsiKiAiK2FbMF1dKSl7cz09PSEwP3M9bFtpXTpsW2ldIT09ITAmJihvPWFbMF0sYy51bnNoaWZ0KGFbMV0pKTticmVha31pZihzIT09ITApaWYocyYmZVsidGhyb3dzIl0pdD1zKHQpO2Vsc2UgdHJ5e3Q9cyh0KX1jYXRjaChwKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjpzP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK3UrIiB0byAiK299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dW5kZWZpbmVkJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSx4LmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jcm9zc0RvbWFpbil7dmFyIHQsbjtyZXR1cm57c2VuZDpmdW5jdGlvbihyLGkpe3Q9eCgiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxjaGFyc2V0OmUuc2NyaXB0Q2hhcnNldCxzcmM6ZS51cmx9KS5vbigibG9hZCBlcnJvciIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVsbCxlJiZpKCJlcnJvciI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksby5oZWFkLmFwcGVuZENoaWxkKHRbMF0pfSxhYm9ydDpmdW5jdGlvbigpe24mJm4oKX19fX0pO3ZhciBobj1bXSxkbj0vKD0pXD8oPz0mfCQpfFw/XD8vO3guYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1obi5wb3AoKXx8eC5leHBhbmRvKyJfIitZdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSkseC5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbih0LG4scil7dmFyIGksbyxzLGE9dC5qc29ucCE9PSExJiYoZG4udGVzdCh0LnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiB0LmRhdGEmJiEodC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZkbi50ZXN0KHQuZGF0YSkmJiJkYXRhIik7cmV0dXJuIGF8fCJqc29ucCI9PT10LmRhdGFUeXBlc1swXT8oaT10Lmpzb25wQ2FsbGJhY2s9eC5pc0Z1bmN0aW9uKHQuanNvbnBDYWxsYmFjayk/dC5qc29ucENhbGxiYWNrKCk6dC5qc29ucENhbGxiYWNrLGE/dFthXT10W2FdLnJlcGxhY2UoZG4sIiQxIitpKTp0Lmpzb25wIT09ITEmJih0LnVybCs9KFZ0LnRlc3QodC51cmwpPyImIjoiPyIpK3QuanNvbnArIj0iK2kpLHQuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBzfHx4LmVycm9yKGkrIiB3YXMgbm90IGNhbGxlZCIpLHNbMF19LHQuZGF0YVR5cGVzWzBdPSJqc29uIixvPWVbaV0sZVtpXT1mdW5jdGlvbigpe3M9YXJndW1lbnRzfSxyLmFsd2F5cyhmdW5jdGlvbigpe2VbaV09byx0W2ldJiYodC5qc29ucENhbGxiYWNrPW4uanNvbnBDYWxsYmFjayxobi5wdXNoKGkpKSxzJiZ4LmlzRnVuY3Rpb24obykmJm8oc1swXSkscz1vPXVuZGVmaW5lZH0pLCJzY3JpcHQiKTp1bmRlZmluZWR9KSx4LmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgZ249eC5hamF4U2V0dGluZ3MueGhyKCksbW49ezA6MjAwLDEyMjM6MjA0fSx5bj0wLHZuPXt9O2UuQWN0aXZlWE9iamVjdCYmeChlKS5vbigidW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB2bil2bltlXSgpO3ZuPXVuZGVmaW5lZH0pLHguc3VwcG9ydC5jb3JzPSEhZ24mJiJ3aXRoQ3JlZGVudGlhbHMiaW4gZ24seC5zdXBwb3J0LmFqYXg9Z249ISFnbix4LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHguc3VwcG9ydC5jb3JzfHxnbiYmIWUuY3Jvc3NEb21haW4/e3NlbmQ6ZnVuY3Rpb24obixyKXt2YXIgaSxvLHM9ZS54aHIoKTtpZihzLm9wZW4oZS50eXBlLGUudXJsLGUuYXN5bmMsZS51c2VybmFtZSxlLnBhc3N3b3JkKSxlLnhockZpZWxkcylmb3IoaSBpbiBlLnhockZpZWxkcylzW2ldPWUueGhyRmllbGRzW2ldO2UubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKGUubWltZVR5cGUpLGUuY3Jvc3NEb21haW58fG5bIlgtUmVxdWVzdGVkLVdpdGgiXXx8KG5bIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoaSBpbiBuKXMuc2V0UmVxdWVzdEhlYWRlcihpLG5baV0pO3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dCYmKGRlbGV0ZSB2bltvXSx0PXMub25sb2FkPXMub25lcnJvcj1udWxsLCJhYm9ydCI9PT1lP3MuYWJvcnQoKToiZXJyb3IiPT09ZT9yKHMuc3RhdHVzfHw0MDQscy5zdGF0dXNUZXh0KTpyKG1uW3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2Ygcy5yZXNwb25zZVRleHQ/e3RleHQ6cy5yZXNwb25zZVRleHR9OnVuZGVmaW5lZCxzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD10KCkscy5vbmVycm9yPXQoImVycm9yIiksdD12bltvPXluKytdPXQoImFib3J0Iikscy5zZW5kKGUuaGFzQ29udGVudCYmZS5kYXRhfHxudWxsKX0sYWJvcnQ6ZnVuY3Rpb24oKXt0JiZ0KCl9fTp1bmRlZmluZWR9KTt2YXIgeG4sYm4sd249L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFRuPVJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2IrIikoW2EteiVdKikkIiwiaSIpLENuPS9xdWV1ZUhvb2tzJC8sa249W0FuXSxObj17IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KSxyPW4uY3VyKCksaT1Ubi5leGVjKHQpLG89aSYmaVszXXx8KHguY3NzTnVtYmVyW2VdPyIiOiJweCIpLHM9KHguY3NzTnVtYmVyW2VdfHwicHgiIT09byYmK3IpJiZUbi5leGVjKHguY3NzKG4uZWxlbSxlKSksYT0xLHU9MjA7aWYocyYmc1szXSE9PW8pe289b3x8c1szXSxpPWl8fFtdLHM9K3J8fDE7ZG8gYT1hfHwiLjUiLHMvPWEseC5zdHlsZShuLmVsZW0sZSxzK28pO3doaWxlKGEhPT0oYT1uLmN1cigpL3IpJiYxIT09YSYmLS11KX1yZXR1cm4gaSYmKHM9bi5zdGFydD0rc3x8K3J8fDAsbi51bml0PW8sbi5lbmQ9aVsxXT9zKyhpWzFdKzEpKmlbMl06K2lbMl0pLG59XX07ZnVuY3Rpb24gRW4oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3huPXVuZGVmaW5lZH0pLHhuPXgubm93KCl9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByLGk9KE5uW3RdfHxbXSkuY29uY2F0KE5uWyIqIl0pLG89MCxzPWkubGVuZ3RoO2Zvcig7cz5vO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gam4oZSx0LG4pe3ZhciByLGksbz0wLHM9a24ubGVuZ3RoLGE9eC5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMTt2YXIgdD14bnx8RW4oKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPW4vbC5kdXJhdGlvbnx8MCxvPTEtcixzPTAsdT1sLnR3ZWVucy5sZW5ndGg7Zm9yKDt1PnM7cysrKWwudHdlZW5zW3NdLnJ1bihvKTtyZXR1cm4gYS5ub3RpZnlXaXRoKGUsW2wsbyxuXSksMT5vJiZ1P246KGEucmVzb2x2ZVdpdGgoZSxbbF0pLCExKX0sbD1hLnByb21pc2Uoe2VsZW06ZSxwcm9wczp4LmV4dGVuZCh7fSx0KSxvcHRzOnguZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6eG58fEVuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj14LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO3I+bjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0P2EucmVzb2x2ZVdpdGgoZSxbbCx0XSk6YS5yZWplY3RXaXRoKGUsW2wsdF0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcihEbihjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtzPm87bysrKWlmKHI9a25bb10uY2FsbChsLGUsYyxsLm9wdHMpKXJldHVybiByO3JldHVybiB4Lm1hcChjLFNuLGwpLHguaXNGdW5jdGlvbihsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChlLGwpLHguZngudGltZXIoeC5leHRlbmQodSx7ZWxlbTplLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gRG4oZSx0KXt2YXIgbixyLGksbyxzO2ZvcihuIGluIGUpaWYocj14LmNhbWVsQ2FzZShuKSxpPXRbcl0sbz1lW25dLHguaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLHM9eC5jc3NIb29rc1tyXSxzJiYiZXhwYW5kImluIHMpe289cy5leHBhbmQobyksZGVsZXRlIGVbcl07Zm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKX1lbHNlIHRbcl09aX14LkFuaW1hdGlvbj14LmV4dGVuZChqbix7dHdlZW5lcjpmdW5jdGlvbihlLHQpe3guaXNGdW5jdGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgiICIpO3ZhciBuLHI9MCxpPWUubGVuZ3RoO2Zvcig7aT5yO3IrKyluPWVbcl0sTm5bbl09Tm5bbl18fFtdLE5uW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/a24udW5zaGlmdChlKTprbi5wdXNoKGUpfX0pO2Z1bmN0aW9uIEFuKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbD10aGlzLGM9e30scD1lLnN0eWxlLGY9ZS5ub2RlVHlwZSYmTHQoZSksaD1xLmdldChlLCJmeHNob3ciKTtuLnF1ZXVlfHwoYT14Ll9xdWV1ZUhvb2tzKGUsImZ4IiksbnVsbD09YS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCx1PWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHx1KCl9KSxhLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx4LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1lLm5vZGVUeXBlJiYoImhlaWdodCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSwiaW5saW5lIj09PXguY3NzKGUsImRpc3BsYXkiKSYmIm5vbmUiPT09eC5jc3MoZSwiZmxvYXQiKSYmKHAuZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihwLm92ZXJmbG93PSJoaWRkZW4iLGwuYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KWlmKGk9dFtyXSx3bi5leGVjKGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGY/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCFofHxoW3JdPT09dW5kZWZpbmVkKWNvbnRpbnVlO2Y9ITB9Y1tyXT1oJiZoW3JdfHx4LnN0eWxlKGUscil9aWYoIXguaXNFbXB0eU9iamVjdChjKSl7aD8iaGlkZGVuImluIGgmJihmPWguaGlkZGVuKTpoPXEuYWNjZXNzKGUsImZ4c2hvdyIse30pLG8mJihoLmhpZGRlbj0hZiksZj94KGUpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXt4KGUpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciB0O3EucmVtb3ZlKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3IociBpbiBjKXM9U24oZj9oW3JdOjAscixsKSxyIGluIGh8fChoW3JdPXMuc3RhcnQsZiYmKHMuZW5kPXMuc3RhcnQscy5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBMbihlLHQsbixyLGkpe3JldHVybiBuZXcgTG4ucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14LlR3ZWVuPUxuLExuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TG4saW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1Mbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6TG4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49TG4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0aW9uP3guZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6TG4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sTG4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUxuLnByb3RvdHlwZSxMbi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHlsZVtlLnByb3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3RlcFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3BzW2UucHJvcF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LExuLnByb3BIb29rcy5zY3JvbGxUb3A9TG4ucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKHFuKHQsITApLGUscixpKX19KSx4LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihMdCkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVlZCh0LG4scikscz1mdW5jdGlvbigpe3ZhciB0PWpuKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8fHEuZ2V0KHRoaXMsImZpbmlzaCIpKSYmdC5zdG9wKCEwKX07cmV0dXJuIHMuZmluaXNoPXMsaXx8by5xdWV1ZT09PSExP3RoaXMuZWFjaChzKTp0aGlzLnF1ZXVlKG8ucXVldWUscyl9LHN0b3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RvcDtkZWxldGUgZS5zdG9wLHQobil9O3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKG49dCx0PWUsZT11bmRlZmluZWQpLHQmJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxpPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMscz1xLmdldCh0aGlzKTtpZihpKXNbaV0mJnNbaV0uc3RvcCYmcihzW2ldKTtlbHNlIGZvcihpIGluIHMpc1tpXSYmc1tpXS5zdG9wJiZDbi50ZXN0KGkpJiZyKHNbaV0pO2ZvcihpPW8ubGVuZ3RoO2ktLTspb1tpXS5lbGVtIT09dGhpc3x8bnVsbCE9ZSYmb1tpXS5xdWV1ZSE9PWV8fChvW2ldLmFuaW0uc3RvcChuKSx0PSExLG8uc3BsaWNlKGksMSkpOyh0fHwhbikmJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4gZSE9PSExJiYoZT1lfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPXEuZ2V0KHRoaXMpLHI9bltlKyJxdWV1ZSJdLGk9bltlKyJxdWV1ZUhvb2tzIl0sbz14LnRpbWVycyxzPXI/ci5sZW5ndGg6MDtmb3Iobi5maW5pc2g9ITAseC5xdWV1ZSh0aGlzLGUsW10pLGkmJmkuc3RvcCYmaS5zdG9wLmNhbGwodGhpcywhMCksdD1vLmxlbmd0aDt0LS07KW9bdF0uZWxlbT09PXRoaXMmJm9bdF0ucXVldWU9PT1lJiYob1t0XS5hbmltLnN0b3AoITApLG8uc3BsaWNlKHQsMSkpO2Zvcih0PTA7cz50O3QrKylyW3RdJiZyW3RdLmZpbmlzaCYmclt0XS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgbi5maW5pc2h9KX19KTtmdW5jdGlvbiBxbihlLHQpe3ZhciBuLHI9e2hlaWdodDplfSxpPTA7Zm9yKHQ9dD8xOjA7ND5pO2krPTItdCluPWp0W2ldLHJbIm1hcmdpbiIrbl09clsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKHIub3BhY2l0eT1yLndpZHRoPWUpLHJ9eC5lYWNoKHtzbGlkZURvd246cW4oInNob3ciKSxzbGlkZVVwOnFuKCJoaWRlIiksc2xpZGVUb2dnbGU6cW4oInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHguc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT94LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fHguaXNGdW5jdGlvbihlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYheC5pc0Z1bmN0aW9uKHQpJiZ0fTtyZXR1cm4gci5kdXJhdGlvbj14LmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2Ygci5kdXJhdGlvbj9yLmR1cmF0aW9uOnIuZHVyYXRpb24gaW4geC5meC5zcGVlZHM/eC5meC5zcGVlZHNbci5kdXJhdGlvbl06eC5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PXIucXVldWV8fHIucXVldWU9PT0hMCkmJihyLnF1ZXVlPSJmeCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe3guaXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmeC5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHguZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19LHgudGltZXJzPVtdLHguZng9TG4ucHJvdG90eXBlLmluaXQseC5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD14LnRpbWVycyxuPTA7Zm9yKHhuPXgubm93KCk7dC5sZW5ndGg+bjtuKyspZT10W25dLGUoKXx8dFtuXSE9PWV8fHQuc3BsaWNlKG4tLSwxKTt0Lmxlbmd0aHx8eC5meC5zdG9wKCkseG49dW5kZWZpbmVkfSx4LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmeC50aW1lcnMucHVzaChlKSYmeC5meC5zdGFydCgpfSx4LmZ4LmludGVydmFsPTEzLHguZnguc3RhcnQ9ZnVuY3Rpb24oKXtibnx8KGJuPXNldEludGVydmFsKHguZngudGljayx4LmZ4LmludGVydmFsKSl9LHguZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoYm4pLGJuPW51bGx9LHguZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHguZnguc3RlcD17fSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ3JlcCh4LnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0pLHguZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciB0LG4saT10aGlzWzBdLG89e3RvcDowLGxlZnQ6MH0scz1pJiZpLm93bmVyRG9jdW1lbnQ7aWYocylyZXR1cm4gdD1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKHQsaSk/KHR5cGVvZiBpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PXImJihvPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLG49SG4ocykse3RvcDpvLnRvcCtuLnBhZ2VZT2Zmc2V0LXQuY2xpZW50VG9wLGxlZnQ6by5sZWZ0K24ucGFnZVhPZmZzZXQtdC5jbGllbnRMZWZ0fSk6b30seC5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGwsYz14LmNzcyhlLCJwb3NpdGlvbiIpLHA9eChlKSxmPXt9OyJzdGF0aWMiPT09YyYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksYT1wLm9mZnNldCgpLG89eC5jc3MoZSwidG9wIiksdT14LmNzcyhlLCJsZWZ0IiksbD0oImFic29sdXRlIj09PWN8fCJmaXhlZCI9PT1jKSYmKG8rdSkuaW5kZXhPZigiYXV0byIpPi0xLGw/KHI9cC5wb3NpdGlvbigpLHM9ci50b3AsaT1yLmxlZnQpOihzPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4sYSkpLG51bGwhPXQudG9wJiYoZi50b3A9dC50b3AtYS50b3ArcyksbnVsbCE9dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1hLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6cC5jc3MoZil9fSx4LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49dGhpc1swXSxyPXt0b3A6MCxsZWZ0OjB9O3JldHVybiJmaXhlZCI9PT14LmNzcyhuLCJwb3NpdGlvbiIpP3Q9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9mZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KHI9ZS5vZmZzZXQoKSksci50b3ArPXguY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksci5sZWZ0Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDp0LnRvcC1yLnRvcC14LmNzcyhuLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1yLmxlZnQteC5jc3MobiwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxzO3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxuKXt2YXIgcj0icGFnZVlPZmZzZXQiPT09bjt4LmZuW3RdPWZ1bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQsaSxvKXt2YXIgcz1Ibih0KTtyZXR1cm4gbz09PXVuZGVmaW5lZD9zP3Nbbl06dFtpXToocz9zLnNjcm9sbFRvKHI/ZS5wYWdlWE9mZnNldDpvLHI/bzplLnBhZ2VZT2Zmc2V0KTp0W2ldPW8sdW5kZWZpbmVkKX0sdCxpLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSk7ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHguaXNXaW5kb3coZSk/ZTo5PT09ZS5ub2RlVHlwZSYmZS5kZWZhdWx0Vmlld314LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe3guZWFjaCh7cGFkZGluZzoiaW5uZXIiK2UsY29udGVudDp0LCIiOiJvdXRlciIrZX0sZnVuY3Rpb24obixyKXt4LmZuW3JdPWZ1bmN0aW9uKHIsaSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aCYmKG58fCJib29sZWFuIiE9dHlwZW9mIHIpLHM9bnx8KHI9PT0hMHx8aT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbih0LG4scil7dmFyIGk7cmV0dXJuIHguaXNXaW5kb3codCk/dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV06OT09PXQubm9kZVR5cGU/KGk9dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5WyJzY3JvbGwiK2VdLGlbInNjcm9sbCIrZV0sdC5ib2R5WyJvZmZzZXQiK2VdLGlbIm9mZnNldCIrZV0saVsiY2xpZW50IitlXSkpOnI9PT11bmRlZmluZWQ/eC5jc3ModCxuLHMpOnguc3R5bGUodCxuLHIscyl9LHQsbz9yOnVuZGVmaW5lZCxvLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9eDoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4geH0pLCJvYmplY3QiPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiBlLmRvY3VtZW50JiYoZS5qUXVlcnk9ZS4kPXgpfSkod2luZG93KTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLm1hcCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWRlY2QxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4ubWFwCkBAIC0wLDAgKzEgQEAKK3sidmVyc2lvbiI6MywiZmlsZSI6ImpxdWVyeS0yLjAuMy5taW4uanMiLCJzb3VyY2VzIjpbImpxdWVyeS0yLjAuMy5qcyJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJ1bmRlZmluZWQiLCJyb290alF1ZXJ5IiwicmVhZHlMaXN0IiwiY29yZV9zdHJ1bmRlZmluZWQiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiZG9jRWxlbSIsImRvY3VtZW50RWxlbWVudCIsIl9qUXVlcnkiLCJqUXVlcnkiLCJfJCIsIiQiLCJjbGFzczJ0eXBlIiwiY29yZV9kZWxldGVkSWRzIiwiY29yZV92ZXJzaW9uIiwiY29yZV9jb25jYXQiLCJjb25jYXQiLCJjb3JlX3B1c2giLCJwdXNoIiwiY29yZV9zbGljZSIsInNsaWNlIiwiY29yZV9pbmRleE9mIiwiaW5kZXhPZiIsImNvcmVfdG9TdHJpbmciLCJ0b1N0cmluZyIsImNvcmVfaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjb3JlX3RyaW0iLCJ0cmltIiwic2VsZWN0b3IiLCJjb250ZXh0IiwiZm4iLCJpbml0IiwiY29yZV9wbnVtIiwic291cmNlIiwiY29yZV9ybm90d2hpdGUiLCJycXVpY2tFeHByIiwicnNpbmdsZVRhZyIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiYWxsIiwibGV0dGVyIiwidG9VcHBlckNhc2UiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVhZHkiLCJwcm90b3R5cGUiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsIm1hdGNoIiwiZWxlbSIsInRoaXMiLCJjaGFyQXQiLCJsZW5ndGgiLCJleGVjIiwiZmluZCIsIm1lcmdlIiwicGFyc2VIVE1MIiwibm9kZVR5cGUiLCJvd25lckRvY3VtZW50IiwidGVzdCIsImlzUGxhaW5PYmplY3QiLCJpc0Z1bmN0aW9uIiwiYXR0ciIsImdldEVsZW1lbnRCeUlkIiwicGFyZW50Tm9kZSIsIm1ha2VBcnJheSIsInRvQXJyYXkiLCJjYWxsIiwiZ2V0IiwibnVtIiwicHVzaFN0YWNrIiwiZWxlbXMiLCJyZXQiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwiYXJncyIsInByb21pc2UiLCJkb25lIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJmaXJzdCIsImVxIiwibGFzdCIsImkiLCJsZW4iLCJqIiwibWFwIiwiZW5kIiwic29ydCIsInNwbGljZSIsImV4dGVuZCIsIm9wdGlvbnMiLCJuYW1lIiwic3JjIiwiY29weSIsImNvcHlJc0FycmF5IiwiY2xvbmUiLCJ0YXJnZXQiLCJkZWVwIiwiaXNBcnJheSIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwicmVwbGFjZSIsIm5vQ29uZmxpY3QiLCJpc1JlYWR5IiwicmVhZHlXYWl0IiwiaG9sZFJlYWR5IiwiaG9sZCIsIndhaXQiLCJyZXNvbHZlV2l0aCIsInRyaWdnZXIiLCJvZmYiLCJvYmoiLCJ0eXBlIiwiQXJyYXkiLCJpc1dpbmRvdyIsImlzTnVtZXJpYyIsImlzTmFOIiwicGFyc2VGbG9hdCIsImlzRmluaXRlIiwiU3RyaW5nIiwiZSIsImlzRW1wdHlPYmplY3QiLCJlcnJvciIsIm1zZyIsIkVycm9yIiwiZGF0YSIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwic2NyaXB0cyIsImNyZWF0ZUVsZW1lbnQiLCJidWlsZEZyYWdtZW50IiwicmVtb3ZlIiwiY2hpbGROb2RlcyIsInBhcnNlSlNPTiIsIkpTT04iLCJwYXJzZSIsInBhcnNlWE1MIiwieG1sIiwidG1wIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJub29wIiwiZ2xvYmFsRXZhbCIsImNvZGUiLCJzY3JpcHQiLCJpbmRpcmVjdCIsImV2YWwiLCJ0ZXh0IiwiaGVhZCIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjYW1lbENhc2UiLCJzdHJpbmciLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwidmFsdWUiLCJpc0FycmF5bGlrZSIsImFyciIsInJlc3VsdHMiLCJPYmplY3QiLCJpbkFycmF5Iiwic2Vjb25kIiwibCIsImdyZXAiLCJpbnYiLCJyZXRWYWwiLCJhcmciLCJndWlkIiwicHJveHkiLCJhY2Nlc3MiLCJrZXkiLCJjaGFpbmFibGUiLCJlbXB0eUdldCIsInJhdyIsImJ1bGsiLCJub3ciLCJEYXRlIiwic3dhcCIsIm9sZCIsInN0eWxlIiwiRGVmZXJyZWQiLCJyZWFkeVN0YXRlIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzcGxpdCIsInN1cHBvcnQiLCJjYWNoZWRydW5zIiwiRXhwciIsImdldFRleHQiLCJpc1hNTCIsImNvbXBpbGUiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0Iiwic2V0RG9jdW1lbnQiLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJtYXRjaGVzIiwiY29udGFpbnMiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiY2xhc3NDYWNoZSIsImNyZWF0ZUNhY2hlIiwidG9rZW5DYWNoZSIsImNvbXBpbGVyQ2FjaGUiLCJoYXNEdXBsaWNhdGUiLCJzb3J0T3JkZXIiLCJhIiwiYiIsInN0cnVuZGVmaW5lZCIsIk1BWF9ORUdBVElWRSIsImhhc093biIsInBvcCIsInB1c2hfbmF0aXZlIiwiYm9vbGVhbnMiLCJ3aGl0ZXNwYWNlIiwiY2hhcmFjdGVyRW5jb2RpbmciLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJydHJpbSIsIlJlZ0V4cCIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJzaWJsaW5nIiwicmF0dHJpYnV0ZVF1b3RlcyIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsIklEIiwiQ0xBU1MiLCJUQUciLCJBVFRSIiwiUFNFVURPIiwiQ0hJTEQiLCJib29sIiwibmVlZHNDb250ZXh0Iiwicm5hdGl2ZSIsInJpbnB1dHMiLCJyaGVhZGVyIiwicmVzY2FwZSIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsIl8iLCJlc2NhcGVkIiwiZXNjYXBlZFdoaXRlc3BhY2UiLCJoaWdoIiwiZnJvbUNoYXJDb2RlIiwiZWxzIiwiU2l6emxlIiwic2VlZCIsIm0iLCJncm91cHMiLCJuaWQiLCJuZXdDb250ZXh0IiwibmV3U2VsZWN0b3IiLCJpZCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJxc2EiLCJ0b2tlbml6ZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInRvU2VsZWN0b3IiLCJqb2luIiwicXVlcnlTZWxlY3RvckFsbCIsInFzYUVycm9yIiwicmVtb3ZlQXR0cmlidXRlIiwic2VsZWN0Iiwia2V5cyIsImNhY2hlIiwiY2FjaGVMZW5ndGgiLCJzaGlmdCIsIm1hcmtGdW5jdGlvbiIsImFzc2VydCIsImRpdiIsImFkZEhhbmRsZSIsImF0dHJzIiwiaGFuZGxlciIsImF0dHJIYW5kbGUiLCJzaWJsaW5nQ2hlY2siLCJjdXIiLCJkaWZmIiwic291cmNlSW5kZXgiLCJuZXh0U2libGluZyIsImNyZWF0ZUlucHV0UHNldWRvIiwiY3JlYXRlQnV0dG9uUHNldWRvIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwibm9kZSIsImRvYyIsInBhcmVudCIsImRlZmF1bHRWaWV3IiwiYXR0YWNoRXZlbnQiLCJ0b3AiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiaW5uZXJIVE1MIiwiZmlyc3RDaGlsZCIsImdldEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImZpbHRlciIsImF0dHJJZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJpbnB1dCIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJlbGVtZW50cyIsInZhbCIsInNwZWNpZmllZCIsInVuaXF1ZVNvcnQiLCJkdXBsaWNhdGVzIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJ0ZXh0Q29udGVudCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwiPiIsImRpciIsIiAiLCIrIiwifiIsInByZUZpbHRlciIsImV4Y2VzcyIsInVucXVvdGVkIiwibm9kZU5hbWVTZWxlY3RvciIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsInNpbXBsZSIsImZvcndhcmQiLCJvZlR5cGUiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJ1c2VDYWNoZSIsImxhc3RDaGlsZCIsInBzZXVkbyIsInNldEZpbHRlcnMiLCJpZHgiLCJtYXRjaGVkIiwibm90IiwibWF0Y2hlciIsInVubWF0Y2hlZCIsImhhcyIsImlubmVyVGV4dCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJyb290IiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiZW1wdHkiLCJoZWFkZXIiLCJidXR0b24iLCJldmVuIiwib2RkIiwibHQiLCJndCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInRva2VucyIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiYmFzZSIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsImRpcmtleSIsImVsZW1lbnRNYXRjaGVyIiwibWF0Y2hlcnMiLCJjb25kZW5zZSIsIm5ld1VubWF0Y2hlZCIsIm1hcHBlZCIsInNldE1hdGNoZXIiLCJwb3N0RmlsdGVyIiwicG9zdEZpbmRlciIsInBvc3RTZWxlY3RvciIsInRlbXAiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJtdWx0aXBsZUNvbnRleHRzIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsIm1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsInNldE1hdGNoZXJzIiwibWF0Y2hlckNhY2hlZFJ1bnMiLCJieVNldCIsImJ5RWxlbWVudCIsInN1cGVyTWF0Y2hlciIsImV4cGFuZENvbnRleHQiLCJzZXRNYXRjaGVkIiwibWF0Y2hlZENvdW50Iiwib3V0ZXJtb3N0IiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJncm91cCIsImNvbnRleHRzIiwidG9rZW4iLCJkaXYxIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJvcHRpb25zQ2FjaGUiLCJjcmVhdGVPcHRpb25zIiwib2JqZWN0IiwiZmxhZyIsIkNhbGxiYWNrcyIsIm1lbW9yeSIsImZpcmVkIiwiZmlyaW5nIiwiZmlyaW5nU3RhcnQiLCJmaXJpbmdMZW5ndGgiLCJmaXJpbmdJbmRleCIsImxpc3QiLCJzdGFjayIsIm9uY2UiLCJmaXJlIiwic3RvcE9uRmFsc2UiLCJzZWxmIiwiZGlzYWJsZSIsImFkZCIsImluZGV4IiwibG9jayIsImxvY2tlZCIsImZpcmVXaXRoIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJmYWlsIiwidGhlbiIsImZucyIsIm5ld0RlZmVyIiwidHVwbGUiLCJhY3Rpb24iLCJyZXR1cm5lZCIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9ncmVzcyIsIm5vdGlmeSIsInBpcGUiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzdWJvcmRpbmF0ZSIsInJlc29sdmVWYWx1ZXMiLCJyZW1haW5pbmciLCJ1cGRhdGVGdW5jIiwidmFsdWVzIiwicHJvZ3Jlc3NWYWx1ZXMiLCJub3RpZnlXaXRoIiwicHJvZ3Jlc3NDb250ZXh0cyIsInJlc29sdmVDb250ZXh0cyIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm9wdCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsInJlbGlhYmxlTWFyZ2luUmlnaHQiLCJib3hTaXppbmdSZWxpYWJsZSIsInBpeGVsUG9zaXRpb24iLCJub0Nsb25lQ2hlY2tlZCIsImNsb25lTm9kZSIsIm9wdERpc2FibGVkIiwicmFkaW9WYWx1ZSIsImNoZWNrQ2xvbmUiLCJmb2N1c2luQnViYmxlcyIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiY29udGFpbmVyIiwibWFyZ2luRGl2IiwiZGl2UmVzZXQiLCJib2R5IiwiY3NzVGV4dCIsInpvb20iLCJib3hTaXppbmciLCJvZmZzZXRXaWR0aCIsImdldENvbXB1dGVkU3R5bGUiLCJ3aWR0aCIsIm1hcmdpblJpZ2h0IiwiZGF0YV91c2VyIiwiZGF0YV9wcml2IiwicmJyYWNlIiwicm11bHRpRGFzaCIsIkRhdGEiLCJkZWZpbmVQcm9wZXJ0eSIsInVpZCIsImFjY2VwdHMiLCJvd25lciIsImRlc2NyaXB0b3IiLCJ1bmxvY2siLCJkZWZpbmVQcm9wZXJ0aWVzIiwic2V0IiwicHJvcCIsInN0b3JlZCIsImNhbWVsIiwiaGFzRGF0YSIsImRpc2NhcmQiLCJhY2NlcHREYXRhIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJkYXRhQXR0ciIsImNhbWVsS2V5IiwicXVldWUiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJob29rcyIsIl9xdWV1ZUhvb2tzIiwibmV4dCIsInN0b3AiLCJzZXR0ZXIiLCJkZWxheSIsInRpbWUiLCJmeCIsInNwZWVkcyIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjbGVhclF1ZXVlIiwiY291bnQiLCJkZWZlciIsIm5vZGVIb29rIiwiYm9vbEhvb2siLCJyY2xhc3MiLCJycmV0dXJuIiwicmZvY3VzYWJsZSIsInJlbW92ZUF0dHIiLCJyZW1vdmVQcm9wIiwicHJvcEZpeCIsImFkZENsYXNzIiwiY2xhc3NlcyIsImNsYXp6IiwicHJvY2VlZCIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJzdGF0ZVZhbCIsImNsYXNzTmFtZXMiLCJoYXNDbGFzcyIsInZhbEhvb2tzIiwib3B0aW9uIiwib25lIiwibWF4Iiwib3B0aW9uU2V0IiwiblR5cGUiLCJhdHRySG9va3MiLCJwcm9wTmFtZSIsImF0dHJOYW1lcyIsImZvciIsImNsYXNzIiwibm90eG1sIiwicHJvcEhvb2tzIiwiaGFzQXR0cmlidXRlIiwiZ2V0dGVyIiwicmtleUV2ZW50Iiwicm1vdXNlRXZlbnQiLCJyZm9jdXNNb3JwaCIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJlcnIiLCJldmVudCIsImdsb2JhbCIsInR5cGVzIiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmoiLCJzcGVjaWFsIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJuYW1lc3BhY2UiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJvbmx5SGFuZGxlcnMiLCJidWJibGVUeXBlIiwib250eXBlIiwiZXZlbnRQYXRoIiwiRXZlbnQiLCJpc1RyaWdnZXIiLCJuYW1lc3BhY2VfcmUiLCJub0J1YmJsZSIsInBhcmVudFdpbmRvdyIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwicHJldmVudERlZmF1bHQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJfZGVmYXVsdCIsImZpeCIsImhhbmRsZXJRdWV1ZSIsImRlbGVnYXRlVGFyZ2V0IiwicHJlRGlzcGF0Y2giLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJzZWwiLCJwcm9wcyIsImZpeEhvb2tzIiwia2V5SG9va3MiLCJvcmlnaW5hbCIsIndoaWNoIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwibW91c2VIb29rcyIsImV2ZW50RG9jIiwicGFnZVgiLCJjbGllbnRYIiwic2Nyb2xsTGVmdCIsImNsaWVudExlZnQiLCJwYWdlWSIsImNsaWVudFkiLCJzY3JvbGxUb3AiLCJjbGllbnRUb3AiLCJvcmlnaW5hbEV2ZW50IiwiZml4SG9vayIsImxvYWQiLCJibHVyIiwiY2xpY2siLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsInNpbXVsYXRlIiwiYnViYmxlIiwiaXNTaW11bGF0ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwiZ2V0UHJldmVudERlZmF1bHQiLCJ0aW1lU3RhbXAiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsImF0dGFjaGVzIiwib24iLCJvcmlnRm4iLCJ0cmlnZ2VySGFuZGxlciIsImlzU2ltcGxlIiwicnBhcmVudHNwcmV2Iiwicm5lZWRzQ29udGV4dCIsImd1YXJhbnRlZWRVbmlxdWUiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwicHJldiIsInRhcmdldHMiLCJ3aW5ub3ciLCJpcyIsImNsb3Nlc3QiLCJwb3MiLCJwcmV2QWxsIiwiYWRkQmFjayIsInNpYmxpbmciLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwidW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwic2libGluZ3MiLCJjb250ZW50RG9jdW1lbnQiLCJyZXZlcnNlIiwidHJ1bmNhdGUiLCJuIiwicXVhbGlmaWVyIiwicnhodG1sVGFnIiwicnRhZ05hbWUiLCJyaHRtbCIsInJub0lubmVyaHRtbCIsIm1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZSIsInJjaGVja2VkIiwicnNjcmlwdFR5cGUiLCJyc2NyaXB0VHlwZU1hc2tlZCIsInJjbGVhblNjcmlwdCIsIndyYXBNYXAiLCJ0aGVhZCIsImNvbCIsInRyIiwidGQiLCJvcHRncm91cCIsInRib2R5IiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsImFwcGVuZCIsImNyZWF0ZVRleHROb2RlIiwiZG9tTWFuaXAiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJwcmVwZW5kIiwiaW5zZXJ0QmVmb3JlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJodG1sIiwicmVwbGFjZVdpdGgiLCJkZXRhY2giLCJhbGxvd0ludGVyc2VjdGlvbiIsImhhc1NjcmlwdHMiLCJpTm9DbG9uZSIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiX2V2YWxVcmwiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsImluc2VydCIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZml4SW5wdXQiLCJjbG9uZUNvcHlFdmVudCIsInNlbGVjdGlvbiIsIndyYXAiLCJub2RlcyIsInVybCIsImFqYXgiLCJkYXRhVHlwZSIsImFzeW5jIiwidGhyb3dzIiwiY29udGVudCIsInJlZkVsZW1lbnRzIiwiZGVzdCIsInBkYXRhT2xkIiwicGRhdGFDdXIiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwid3JhcEFsbCIsImZpcnN0RWxlbWVudENoaWxkIiwid3JhcElubmVyIiwidW53cmFwIiwiY3VyQ1NTIiwiaWZyYW1lIiwicmRpc3BsYXlzd2FwIiwicm1hcmdpbiIsInJudW1zcGxpdCIsInJudW1ub25weCIsInJyZWxOdW0iLCJlbGVtZGlzcGxheSIsIkJPRFkiLCJjc3NTaG93IiwicG9zaXRpb24iLCJ2aXNpYmlsaXR5IiwiZGlzcGxheSIsImNzc05vcm1hbFRyYW5zZm9ybSIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0IiwiY3NzRXhwYW5kIiwiY3NzUHJlZml4ZXMiLCJ2ZW5kb3JQcm9wTmFtZSIsImNhcE5hbWUiLCJvcmlnTmFtZSIsImlzSGlkZGVuIiwiZWwiLCJjc3MiLCJnZXRTdHlsZXMiLCJzaG93SGlkZSIsInNob3ciLCJoaWRkZW4iLCJjc3NfZGVmYXVsdERpc3BsYXkiLCJzdHlsZXMiLCJoaWRlIiwidG9nZ2xlIiwiY3NzSG9va3MiLCJvcGFjaXR5IiwiY29tcHV0ZWQiLCJjc3NOdW1iZXIiLCJjb2x1bW5Db3VudCIsImZpbGxPcGFjaXR5IiwibGluZUhlaWdodCIsIm9yZGVyIiwib3JwaGFucyIsIndpZG93cyIsInpJbmRleCIsImNzc1Byb3BzIiwiZmxvYXQiLCJleHRyYSIsIl9jb21wdXRlZCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJnZXRQcm9wZXJ0eVZhbHVlIiwic2V0UG9zaXRpdmVOdW1iZXIiLCJzdWJ0cmFjdCIsImF1Z21lbnRXaWR0aE9ySGVpZ2h0IiwiaXNCb3JkZXJCb3giLCJnZXRXaWR0aE9ySGVpZ2h0IiwidmFsdWVJc0JvcmRlckJveCIsIm9mZnNldEhlaWdodCIsImFjdHVhbERpc3BsYXkiLCJjb250ZW50V2luZG93Iiwid3JpdGUiLCJjbG9zZSIsInZpc2libGUiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kIiwiZXhwYW5kZWQiLCJwYXJ0cyIsInIyMCIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJzZXJpYWxpemUiLCJwYXJhbSIsInNlcmlhbGl6ZUFycmF5IiwidHJhZGl0aW9uYWwiLCJzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYWpheFNldHRpbmdzIiwiYnVpbGRQYXJhbXMiLCJ2IiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsImJpbmQiLCJ1bmJpbmQiLCJkZWxlZ2F0ZSIsInVuZGVsZWdhdGUiLCJhamF4TG9jUGFydHMiLCJhamF4TG9jYXRpb24iLCJhamF4X25vbmNlIiwiYWpheF9ycXVlcnkiLCJyaGFzaCIsInJ0cyIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwicnVybCIsIl9sb2FkIiwicHJlZmlsdGVycyIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwib3JpZ2luYWxPcHRpb25zIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJwYXJhbXMiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsImNvbXBsZXRlIiwic3RhdHVzIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsImlzTG9jYWwiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiKiIsImpzb24iLCJyZXNwb25zZUZpZWxkcyIsImNvbnZlcnRlcnMiLCIqIHRleHQiLCJ0ZXh0IGh0bWwiLCJ0ZXh0IGpzb24iLCJ0ZXh0IHhtbCIsImFqYXhTZXR1cCIsInNldHRpbmdzIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJ0cmFuc3BvcnQiLCJjYWNoZVVSTCIsInJlc3BvbnNlSGVhZGVyc1N0cmluZyIsInJlc3BvbnNlSGVhZGVycyIsInRpbWVvdXRUaW1lciIsImZpcmVHbG9iYWxzIiwiY2FsbGJhY2tDb250ZXh0IiwiZ2xvYmFsRXZlbnRDb250ZXh0IiwiY29tcGxldGVEZWZlcnJlZCIsInN0YXR1c0NvZGUiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3RIZWFkZXJzTmFtZXMiLCJzdHJBYm9ydCIsImdldFJlc3BvbnNlSGVhZGVyIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImxuYW1lIiwib3ZlcnJpZGVNaW1lVHlwZSIsIm1pbWVUeXBlIiwiYWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0Iiwic3VjY2VzcyIsIm1ldGhvZCIsImNyb3NzRG9tYWluIiwiaGFzQ29udGVudCIsImlmTW9kaWZpZWQiLCJoZWFkZXJzIiwiYmVmb3JlU2VuZCIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwicmVzcG9uc2VzIiwiaXNTdWNjZXNzIiwibW9kaWZpZWQiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwiYWpheENvbnZlcnQiLCJyZWplY3RXaXRoIiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwiZGF0YUZpbHRlciIsInRleHQgc2NyaXB0IiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHJTdXBwb3J0ZWQiLCJ4aHJTdWNjZXNzU3RhdHVzIiwxMjIzLCJ4aHJJZCIsInhockNhbGxiYWNrcyIsIkFjdGl2ZVhPYmplY3QiLCJjb3JzIiwib3BlbiIsInVzZXJuYW1lIiwieGhyRmllbGRzIiwib25sb2FkIiwib25lcnJvciIsImZ4Tm93IiwidGltZXJJZCIsInJmeHR5cGVzIiwicmZ4bnVtIiwicnJ1biIsImFuaW1hdGlvblByZWZpbHRlcnMiLCJkZWZhdWx0UHJlZmlsdGVyIiwidHdlZW5lcnMiLCJ0d2VlbiIsImNyZWF0ZVR3ZWVuIiwidW5pdCIsInNjYWxlIiwibWF4SXRlcmF0aW9ucyIsImNyZWF0ZUZ4Tm93IiwiYW5pbWF0aW9uIiwiY29sbGVjdGlvbiIsIkFuaW1hdGlvbiIsInByb3BlcnRpZXMiLCJzdG9wcGVkIiwidGljayIsImN1cnJlbnRUaW1lIiwic3RhcnRUaW1lIiwiZHVyYXRpb24iLCJwZXJjZW50IiwidHdlZW5zIiwicnVuIiwib3B0cyIsInNwZWNpYWxFYXNpbmciLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJUd2VlbiIsImVhc2luZyIsImdvdG9FbmQiLCJwcm9wRmlsdGVyIiwidGltZXIiLCJhbmltIiwidHdlZW5lciIsInByZWZpbHRlciIsIm9sZGZpcmUiLCJkYXRhU2hvdyIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJlYXNlZCIsInN0ZXAiLCJjc3NGbiIsInNwZWVkIiwiYW5pbWF0ZSIsImdlbkZ4IiwiZmFkZVRvIiwidG8iLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImZpbmlzaCIsInN0b3BRdWV1ZSIsInRpbWVycyIsImluY2x1ZGVXaWR0aCIsImhlaWdodCIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwibGluZWFyIiwicCIsInN3aW5nIiwiY29zIiwiUEkiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiYW5pbWF0ZWQiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJ3aW4iLCJib3giLCJsZWZ0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0V2luZG93IiwicGFnZVlPZmZzZXQiLCJwYWdlWE9mZnNldCIsImN1clBvc2l0aW9uIiwiY3VyTGVmdCIsImN1ckNTU1RvcCIsImN1clRvcCIsImN1ck9mZnNldCIsImN1ckNTU0xlZnQiLCJjYWxjdWxhdGVQb3NpdGlvbiIsImN1ckVsZW0iLCJ1c2luZyIsIm9mZnNldFBhcmVudCIsInBhcmVudE9mZnNldCIsInNjcm9sbFRvIiwiSGVpZ2h0IiwiV2lkdGgiLCJkZWZhdWx0RXh0cmEiLCJmdW5jTmFtZSIsInNpemUiLCJhbmRTZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmluZSIsImFtZCJdLCJtYXBwaW5ncyI6Ijs7O0NBYUEsU0FBV0EsRUFBUUMsV0FPbkIsR0FFQ0MsR0FHQUMsRUFJQUMsUUFBMkJILFdBRzNCSSxFQUFXTCxFQUFPSyxTQUNsQkMsRUFBV04sRUFBT00sU0FDbEJDLEVBQVVELEVBQVNFLGdCQUduQkMsRUFBVVQsRUFBT1UsT0FHakJDLEVBQUtYLEVBQU9ZLEVBR1pDLEtBR0FDLEtBRUFDLEVBQWUsUUFHZkMsRUFBY0YsRUFBZ0JHLE9BQzlCQyxFQUFZSixFQUFnQkssS0FDNUJDLEVBQWFOLEVBQWdCTyxNQUM3QkMsRUFBZVIsRUFBZ0JTLFFBQy9CQyxFQUFnQlgsRUFBV1ksU0FDM0JDLEVBQWNiLEVBQVdjLGVBQ3pCQyxFQUFZYixFQUFhYyxLQUd6Qm5CLEVBQVMsU0FBVW9CLEVBQVVDLEdBRTVCLE1BQU8sSUFBSXJCLEdBQU9zQixHQUFHQyxLQUFNSCxFQUFVQyxFQUFTN0IsSUFJL0NnQyxFQUFZLHNDQUFzQ0MsT0FHbERDLEVBQWlCLE9BS2pCQyxFQUFhLHNDQUdiQyxFQUFhLDZCQUdiQyxFQUFZLFFBQ1pDLEVBQWEsZUFHYkMsRUFBYSxTQUFVQyxFQUFLQyxHQUMzQixNQUFPQSxHQUFPQyxlQUlmQyxFQUFZLFdBQ1h2QyxFQUFTd0Msb0JBQXFCLG1CQUFvQkQsR0FBVyxHQUM3RDdDLEVBQU84QyxvQkFBcUIsT0FBUUQsR0FBVyxHQUMvQ25DLEVBQU9xQyxRQUdUckMsR0FBT3NCLEdBQUt0QixFQUFPc0MsV0FFbEJDLE9BQVFsQyxFQUVSbUMsWUFBYXhDLEVBQ2J1QixLQUFNLFNBQVVILEVBQVVDLEVBQVM3QixHQUNsQyxHQUFJaUQsR0FBT0MsQ0FHWCxLQUFNdEIsRUFDTCxNQUFPdUIsS0FJUixJQUF5QixnQkFBYnZCLEdBQXdCLENBVW5DLEdBUENxQixFQUYyQixNQUF2QnJCLEVBQVN3QixPQUFPLElBQXlELE1BQTNDeEIsRUFBU3dCLE9BQVF4QixFQUFTeUIsT0FBUyxJQUFlekIsRUFBU3lCLFFBQVUsR0FFN0YsS0FBTXpCLEVBQVUsTUFHbEJPLEVBQVdtQixLQUFNMUIsSUFJckJxQixJQUFVQSxFQUFNLElBQU9wQixFQStDckIsT0FBTUEsR0FBV0EsRUFBUWtCLFFBQ3RCbEIsR0FBVzdCLEdBQWF1RCxLQUFNM0IsR0FLaEN1QixLQUFLSCxZQUFhbkIsR0FBVTBCLEtBQU0zQixFQWxEekMsSUFBS3FCLEVBQU0sR0FBSyxDQVdmLEdBVkFwQixFQUFVQSxZQUFtQnJCLEdBQVNxQixFQUFRLEdBQUtBLEVBR25EckIsRUFBT2dELE1BQU9MLEtBQU0zQyxFQUFPaUQsVUFDMUJSLEVBQU0sR0FDTnBCLEdBQVdBLEVBQVE2QixTQUFXN0IsRUFBUThCLGVBQWlCOUIsRUFBVXpCLEdBQ2pFLElBSUlnQyxFQUFXd0IsS0FBTVgsRUFBTSxLQUFRekMsRUFBT3FELGNBQWVoQyxHQUN6RCxJQUFNb0IsSUFBU3BCLEdBRVRyQixFQUFPc0QsV0FBWVgsS0FBTUYsSUFDN0JFLEtBQU1GLEdBQVNwQixFQUFTb0IsSUFJeEJFLEtBQUtZLEtBQU1kLEVBQU9wQixFQUFTb0IsR0FLOUIsT0FBT0UsTUFnQlAsTUFaQUQsR0FBTzlDLEVBQVM0RCxlQUFnQmYsRUFBTSxJQUlqQ0MsR0FBUUEsRUFBS2UsYUFFakJkLEtBQUtFLE9BQVMsRUFDZEYsS0FBSyxHQUFLRCxHQUdYQyxLQUFLdEIsUUFBVXpCLEVBQ2YrQyxLQUFLdkIsU0FBV0EsRUFDVHVCLEtBY0gsTUFBS3ZCLEdBQVM4QixVQUNwQlAsS0FBS3RCLFFBQVVzQixLQUFLLEdBQUt2QixFQUN6QnVCLEtBQUtFLE9BQVMsRUFDUEYsTUFJSTNDLEVBQU9zRCxXQUFZbEMsR0FDdkI1QixFQUFXNkMsTUFBT2pCLElBR3JCQSxFQUFTQSxXQUFhN0IsWUFDMUJvRCxLQUFLdkIsU0FBV0EsRUFBU0EsU0FDekJ1QixLQUFLdEIsUUFBVUQsRUFBU0MsU0FHbEJyQixFQUFPMEQsVUFBV3RDLEVBQVV1QixRQUlwQ3ZCLFNBQVUsR0FHVnlCLE9BQVEsRUFFUmMsUUFBUyxXQUNSLE1BQU9qRCxHQUFXa0QsS0FBTWpCLE9BS3pCa0IsSUFBSyxTQUFVQyxHQUNkLE1BQWMsT0FBUEEsRUFHTm5CLEtBQUtnQixVQUdHLEVBQU5HLEVBQVVuQixLQUFNQSxLQUFLRSxPQUFTaUIsR0FBUW5CLEtBQU1tQixJQUtoREMsVUFBVyxTQUFVQyxHQUdwQixHQUFJQyxHQUFNakUsRUFBT2dELE1BQU9MLEtBQUtILGNBQWV3QixFQU81QyxPQUpBQyxHQUFJQyxXQUFhdkIsS0FDakJzQixFQUFJNUMsUUFBVXNCLEtBQUt0QixRQUdaNEMsR0FNUkUsS0FBTSxTQUFVQyxFQUFVQyxHQUN6QixNQUFPckUsR0FBT21FLEtBQU14QixLQUFNeUIsRUFBVUMsSUFHckNoQyxNQUFPLFNBQVVmLEdBSWhCLE1BRkF0QixHQUFPcUMsTUFBTWlDLFVBQVVDLEtBQU1qRCxHQUV0QnFCLE1BR1JoQyxNQUFPLFdBQ04sTUFBT2dDLE1BQUtvQixVQUFXckQsRUFBVzhELE1BQU83QixLQUFNOEIsYUFHaERDLE1BQU8sV0FDTixNQUFPL0IsTUFBS2dDLEdBQUksSUFHakJDLEtBQU0sV0FDTCxNQUFPakMsTUFBS2dDLEdBQUksS0FHakJBLEdBQUksU0FBVUUsR0FDYixHQUFJQyxHQUFNbkMsS0FBS0UsT0FDZGtDLEdBQUtGLEdBQVUsRUFBSkEsRUFBUUMsRUFBTSxFQUMxQixPQUFPbkMsTUFBS29CLFVBQVdnQixHQUFLLEdBQVNELEVBQUpDLEdBQVlwQyxLQUFLb0MsU0FHbkRDLElBQUssU0FBVVosR0FDZCxNQUFPekIsTUFBS29CLFVBQVcvRCxFQUFPZ0YsSUFBSXJDLEtBQU0sU0FBVUQsRUFBTW1DLEdBQ3ZELE1BQU9ULEdBQVNSLEtBQU1sQixFQUFNbUMsRUFBR25DLE9BSWpDdUMsSUFBSyxXQUNKLE1BQU90QyxNQUFLdUIsWUFBY3ZCLEtBQUtILFlBQVksT0FLNUMvQixLQUFNRCxFQUNOMEUsUUFBU0EsS0FDVEMsVUFBV0EsUUFJWm5GLEVBQU9zQixHQUFHQyxLQUFLZSxVQUFZdEMsRUFBT3NCLEdBRWxDdEIsRUFBT29GLE9BQVNwRixFQUFPc0IsR0FBRzhELE9BQVMsV0FDbEMsR0FBSUMsR0FBU0MsRUFBTUMsRUFBS0MsRUFBTUMsRUFBYUMsRUFDMUNDLEVBQVNsQixVQUFVLE9BQ25CSSxFQUFJLEVBQ0poQyxFQUFTNEIsVUFBVTVCLE9BQ25CK0MsR0FBTyxDQXFCUixLQWxCdUIsaUJBQVhELEtBQ1hDLEVBQU9ELEVBQ1BBLEVBQVNsQixVQUFVLE9BRW5CSSxFQUFJLEdBSWtCLGdCQUFYYyxJQUF3QjNGLEVBQU9zRCxXQUFXcUMsS0FDckRBLE1BSUk5QyxJQUFXZ0MsSUFDZmMsRUFBU2hELE9BQ1BrQyxHQUdTaEMsRUFBSmdDLEVBQVlBLElBRW5CLEdBQW1DLE9BQTdCUSxFQUFVWixVQUFXSSxJQUUxQixJQUFNUyxJQUFRRCxHQUNiRSxFQUFNSSxFQUFRTCxHQUNkRSxFQUFPSCxFQUFTQyxHQUdYSyxJQUFXSCxJQUtYSSxHQUFRSixJQUFVeEYsRUFBT3FELGNBQWNtQyxLQUFVQyxFQUFjekYsRUFBTzZGLFFBQVFMLE1BQzdFQyxHQUNKQSxHQUFjLEVBQ2RDLEVBQVFILEdBQU92RixFQUFPNkYsUUFBUU4sR0FBT0EsTUFHckNHLEVBQVFILEdBQU92RixFQUFPcUQsY0FBY2tDLEdBQU9BLEtBSTVDSSxFQUFRTCxHQUFTdEYsRUFBT29GLE9BQVFRLEVBQU1GLEVBQU9GLElBR2xDQSxJQUFTakcsWUFDcEJvRyxFQUFRTCxHQUFTRSxHQU9yQixPQUFPRyxJQUdSM0YsRUFBT29GLFFBRU5VLFFBQVMsVUFBYXpGLEVBQWUwRixLQUFLQyxVQUFXQyxRQUFTLE1BQU8sSUFFckVDLFdBQVksU0FBVU4sR0FTckIsTUFSS3RHLEdBQU9ZLElBQU1GLElBQ2pCVixFQUFPWSxFQUFJRCxHQUdQMkYsR0FBUXRHLEVBQU9VLFNBQVdBLElBQzlCVixFQUFPVSxPQUFTRCxHQUdWQyxHQUlSbUcsU0FBUyxFQUlUQyxVQUFXLEVBR1hDLFVBQVcsU0FBVUMsR0FDZkEsRUFDSnRHLEVBQU9vRyxZQUVQcEcsRUFBT3FDLE9BQU8sSUFLaEJBLE1BQU8sU0FBVWtFLElBR1hBLEtBQVMsSUFBU3ZHLEVBQU9vRyxVQUFZcEcsRUFBT21HLFdBS2pEbkcsRUFBT21HLFNBQVUsRUFHWkksS0FBUyxLQUFVdkcsRUFBT29HLFVBQVksSUFLM0MzRyxFQUFVK0csWUFBYTVHLEdBQVlJLElBRzlCQSxFQUFPc0IsR0FBR21GLFNBQ2R6RyxFQUFRSixHQUFXNkcsUUFBUSxTQUFTQyxJQUFJLFlBTzFDcEQsV0FBWSxTQUFVcUQsR0FDckIsTUFBNEIsYUFBckIzRyxFQUFPNEcsS0FBS0QsSUFHcEJkLFFBQVNnQixNQUFNaEIsUUFFZmlCLFNBQVUsU0FBVUgsR0FDbkIsTUFBYyxPQUFQQSxHQUFlQSxJQUFRQSxFQUFJckgsUUFHbkN5SCxVQUFXLFNBQVVKLEdBQ3BCLE9BQVFLLE1BQU9DLFdBQVdOLEtBQVVPLFNBQVVQLElBRy9DQyxLQUFNLFNBQVVELEdBQ2YsTUFBWSxPQUFQQSxFQUNXQSxFQUFSUSxHQUdjLGdCQUFSUixJQUFtQyxrQkFBUkEsR0FDeEN4RyxFQUFZVyxFQUFjOEMsS0FBSytDLEtBQVUsZUFDbENBLElBR1R0RCxjQUFlLFNBQVVzRCxHQUt4QixHQUE0QixXQUF2QjNHLEVBQU80RyxLQUFNRCxJQUFzQkEsRUFBSXpELFVBQVlsRCxFQUFPOEcsU0FBVUgsR0FDeEUsT0FBTyxDQU9SLEtBQ0MsR0FBS0EsRUFBSW5FLGNBQ054QixFQUFZNEMsS0FBTStDLEVBQUluRSxZQUFZRixVQUFXLGlCQUMvQyxPQUFPLEVBRVAsTUFBUThFLEdBQ1QsT0FBTyxFQUtSLE9BQU8sR0FHUkMsY0FBZSxTQUFVVixHQUN4QixHQUFJckIsRUFDSixLQUFNQSxJQUFRcUIsR0FDYixPQUFPLENBRVIsUUFBTyxHQUdSVyxNQUFPLFNBQVVDLEdBQ2hCLEtBQVVDLE9BQU9ELElBTWxCdEUsVUFBVyxTQUFVd0UsRUFBTXBHLEVBQVNxRyxHQUNuQyxJQUFNRCxHQUF3QixnQkFBVEEsR0FDcEIsTUFBTyxLQUVnQixrQkFBWnBHLEtBQ1hxRyxFQUFjckcsRUFDZEEsR0FBVSxHQUVYQSxFQUFVQSxHQUFXekIsQ0FFckIsSUFBSStILEdBQVMvRixFQUFXa0IsS0FBTTJFLEdBQzdCRyxHQUFXRixLQUdaLE9BQUtDLElBQ0t0RyxFQUFRd0csY0FBZUYsRUFBTyxNQUd4Q0EsRUFBUzNILEVBQU84SCxlQUFpQkwsR0FBUXBHLEVBQVN1RyxHQUU3Q0EsR0FDSjVILEVBQVE0SCxHQUFVRyxTQUdaL0gsRUFBT2dELFNBQVcyRSxFQUFPSyxjQUdqQ0MsVUFBV0MsS0FBS0MsTUFHaEJDLFNBQVUsU0FBVVgsR0FDbkIsR0FBSVksR0FBS0MsQ0FDVCxLQUFNYixHQUF3QixnQkFBVEEsR0FDcEIsTUFBTyxLQUlSLEtBQ0NhLEVBQU0sR0FBSUMsV0FDVkYsRUFBTUMsRUFBSUUsZ0JBQWlCZixFQUFPLFlBQ2pDLE1BQVFMLEdBQ1RpQixFQUFNOUksVUFNUCxRQUhNOEksR0FBT0EsRUFBSUkscUJBQXNCLGVBQWdCNUYsU0FDdEQ3QyxFQUFPc0gsTUFBTyxnQkFBa0JHLEdBRTFCWSxHQUdSSyxLQUFNLGFBR05DLFdBQVksU0FBVUMsR0FDckIsR0FBSUMsR0FDRkMsRUFBV0MsSUFFYkgsR0FBTzVJLEVBQU9tQixLQUFNeUgsR0FFZkEsSUFJZ0MsSUFBL0JBLEVBQUsvSCxRQUFRLGVBQ2pCZ0ksRUFBU2pKLEVBQVNpSSxjQUFjLFVBQ2hDZ0IsRUFBT0csS0FBT0osRUFDZGhKLEVBQVNxSixLQUFLQyxZQUFhTCxHQUFTcEYsV0FBVzBGLFlBQWFOLElBSTVEQyxFQUFVRixLQU9iUSxVQUFXLFNBQVVDLEdBQ3BCLE1BQU9BLEdBQU9wRCxRQUFTcEUsRUFBVyxPQUFRb0UsUUFBU25FLEVBQVlDLElBR2hFdUgsU0FBVSxTQUFVNUcsRUFBTTRDLEdBQ3pCLE1BQU81QyxHQUFLNEcsVUFBWTVHLEVBQUs0RyxTQUFTQyxnQkFBa0JqRSxFQUFLaUUsZUFJOURwRixLQUFNLFNBQVV3QyxFQUFLdkMsRUFBVUMsR0FDOUIsR0FBSW1GLEdBQ0gzRSxFQUFJLEVBQ0poQyxFQUFTOEQsRUFBSTlELE9BQ2JnRCxFQUFVNEQsRUFBYTlDLEVBRXhCLElBQUt0QyxHQUNKLEdBQUt3QixHQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFHbkIsR0FGQTJFLEVBQVFwRixFQUFTSSxNQUFPbUMsRUFBSzlCLEdBQUtSLEdBRTdCbUYsS0FBVSxFQUNkLFVBSUYsS0FBTTNFLElBQUs4QixHQUdWLEdBRkE2QyxFQUFRcEYsRUFBU0ksTUFBT21DLEVBQUs5QixHQUFLUixHQUU3Qm1GLEtBQVUsRUFDZCxVQU9ILElBQUszRCxHQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFHbkIsR0FGQTJFLEVBQVFwRixFQUFTUixLQUFNK0MsRUFBSzlCLEdBQUtBLEVBQUc4QixFQUFLOUIsSUFFcEMyRSxLQUFVLEVBQ2QsVUFJRixLQUFNM0UsSUFBSzhCLEdBR1YsR0FGQTZDLEVBQVFwRixFQUFTUixLQUFNK0MsRUFBSzlCLEdBQUtBLEVBQUc4QixFQUFLOUIsSUFFcEMyRSxLQUFVLEVBQ2QsS0FNSixPQUFPN0MsSUFHUnhGLEtBQU0sU0FBVTZILEdBQ2YsTUFBZSxPQUFSQSxFQUFlLEdBQUs5SCxFQUFVMEMsS0FBTW9GLElBSTVDdEYsVUFBVyxTQUFVZ0csRUFBS0MsR0FDekIsR0FBSTFGLEdBQU0wRixLQWFWLE9BWFksT0FBUEQsSUFDQ0QsRUFBYUcsT0FBT0YsSUFDeEIxSixFQUFPZ0QsTUFBT2lCLEVBQ0UsZ0JBQVJ5RixJQUNMQSxHQUFRQSxHQUdYbEosRUFBVW9ELEtBQU1LLEVBQUt5RixJQUloQnpGLEdBR1I0RixRQUFTLFNBQVVuSCxFQUFNZ0gsRUFBSzdFLEdBQzdCLE1BQWMsT0FBUDZFLEVBQWMsR0FBSzlJLEVBQWFnRCxLQUFNOEYsRUFBS2hILEVBQU1tQyxJQUd6RDdCLE1BQU8sU0FBVTBCLEVBQU9vRixHQUN2QixHQUFJQyxHQUFJRCxFQUFPakgsT0FDZGdDLEVBQUlILEVBQU03QixPQUNWa0MsRUFBSSxDQUVMLElBQWtCLGdCQUFOZ0YsR0FDWCxLQUFZQSxFQUFKaEYsRUFBT0EsSUFDZEwsRUFBT0csS0FBUWlGLEVBQVEvRSxPQUd4QixPQUFRK0UsRUFBTy9FLEtBQU94RixVQUNyQm1GLEVBQU9HLEtBQVFpRixFQUFRL0UsSUFNekIsT0FGQUwsR0FBTTdCLE9BQVNnQyxFQUVSSCxHQUdSc0YsS0FBTSxTQUFVaEcsRUFBT0ksRUFBVTZGLEdBQ2hDLEdBQUlDLEdBQ0hqRyxLQUNBWSxFQUFJLEVBQ0poQyxFQUFTbUIsRUFBTW5CLE1BS2hCLEtBSkFvSCxJQUFRQSxFQUlJcEgsRUFBSmdDLEVBQVlBLElBQ25CcUYsSUFBVzlGLEVBQVVKLEVBQU9hLEdBQUtBLEdBQzVCb0YsSUFBUUMsR0FDWmpHLEVBQUl4RCxLQUFNdUQsRUFBT2EsR0FJbkIsT0FBT1osSUFJUmUsSUFBSyxTQUFVaEIsRUFBT0ksRUFBVStGLEdBQy9CLEdBQUlYLEdBQ0gzRSxFQUFJLEVBQ0poQyxFQUFTbUIsRUFBTW5CLE9BQ2ZnRCxFQUFVNEQsRUFBYXpGLEdBQ3ZCQyxJQUdELElBQUs0QixFQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFDbkIyRSxFQUFRcEYsRUFBVUosRUFBT2EsR0FBS0EsRUFBR3NGLEdBRW5CLE1BQVRYLElBQ0p2RixFQUFLQSxFQUFJcEIsUUFBVzJHLE9BTXRCLEtBQU0zRSxJQUFLYixHQUNWd0YsRUFBUXBGLEVBQVVKLEVBQU9hLEdBQUtBLEVBQUdzRixHQUVuQixNQUFUWCxJQUNKdkYsRUFBS0EsRUFBSXBCLFFBQVcyRyxFQU12QixPQUFPbEosR0FBWWtFLFNBQVdQLElBSS9CbUcsS0FBTSxFQUlOQyxNQUFPLFNBQVUvSSxFQUFJRCxHQUNwQixHQUFJaUgsR0FBS2pFLEVBQU1nRyxDQVVmLE9BUndCLGdCQUFaaEosS0FDWGlILEVBQU1oSCxFQUFJRCxHQUNWQSxFQUFVQyxFQUNWQSxFQUFLZ0gsR0FLQXRJLEVBQU9zRCxXQUFZaEMsSUFLekIrQyxFQUFPM0QsRUFBV2tELEtBQU1hLFVBQVcsR0FDbkM0RixFQUFRLFdBQ1AsTUFBTy9JLEdBQUdrRCxNQUFPbkQsR0FBV3NCLEtBQU0wQixFQUFLOUQsT0FBUUcsRUFBV2tELEtBQU1hLGNBSWpFNEYsRUFBTUQsS0FBTzlJLEVBQUc4SSxLQUFPOUksRUFBRzhJLE1BQVFwSyxFQUFPb0ssT0FFbENDLEdBWkM5SyxXQWlCVCtLLE9BQVEsU0FBVXRHLEVBQU8xQyxFQUFJaUosRUFBS2YsRUFBT2dCLEVBQVdDLEVBQVVDLEdBQzdELEdBQUk3RixHQUFJLEVBQ1BoQyxFQUFTbUIsRUFBTW5CLE9BQ2Y4SCxFQUFjLE1BQVBKLENBR1IsSUFBNEIsV0FBdkJ2SyxFQUFPNEcsS0FBTTJELEdBQXFCLENBQ3RDQyxHQUFZLENBQ1osS0FBTTNGLElBQUswRixHQUNWdkssRUFBT3NLLE9BQVF0RyxFQUFPMUMsRUFBSXVELEVBQUcwRixFQUFJMUYsSUFBSSxFQUFNNEYsRUFBVUMsT0FJaEQsSUFBS2xCLElBQVVqSyxZQUNyQmlMLEdBQVksRUFFTnhLLEVBQU9zRCxXQUFZa0csS0FDeEJrQixHQUFNLEdBR0ZDLElBRUNELEdBQ0pwSixFQUFHc0MsS0FBTUksRUFBT3dGLEdBQ2hCbEksRUFBSyxPQUlMcUosRUFBT3JKLEVBQ1BBLEVBQUssU0FBVW9CLEVBQU02SCxFQUFLZixHQUN6QixNQUFPbUIsR0FBSy9HLEtBQU01RCxFQUFRMEMsR0FBUThHLE1BS2hDbEksR0FDSixLQUFZdUIsRUFBSmdDLEVBQVlBLElBQ25CdkQsRUFBSTBDLEVBQU1hLEdBQUkwRixFQUFLRyxFQUFNbEIsRUFBUUEsRUFBTTVGLEtBQU1JLEVBQU1hLEdBQUlBLEVBQUd2RCxFQUFJMEMsRUFBTWEsR0FBSTBGLElBSzNFLE9BQU9DLEdBQ054RyxFQUdBMkcsRUFDQ3JKLEVBQUdzQyxLQUFNSSxHQUNUbkIsRUFBU3ZCLEVBQUkwQyxFQUFNLEdBQUl1RyxHQUFRRSxHQUdsQ0csSUFBS0MsS0FBS0QsSUFLVkUsS0FBTSxTQUFVcEksRUFBTTJDLEVBQVNqQixFQUFVQyxHQUN4QyxHQUFJSixHQUFLcUIsRUFDUnlGLElBR0QsS0FBTXpGLElBQVFELEdBQ2IwRixFQUFLekYsR0FBUzVDLEVBQUtzSSxNQUFPMUYsR0FDMUI1QyxFQUFLc0ksTUFBTzFGLEdBQVNELEVBQVNDLEVBRy9CckIsR0FBTUcsRUFBU0ksTUFBTzlCLEVBQU0yQixNQUc1QixLQUFNaUIsSUFBUUQsR0FDYjNDLEVBQUtzSSxNQUFPMUYsR0FBU3lGLEVBQUt6RixFQUczQixPQUFPckIsTUFJVGpFLEVBQU9xQyxNQUFNaUMsUUFBVSxTQUFVcUMsR0FxQmhDLE1BcEJNbEgsS0FFTEEsRUFBWU8sRUFBT2lMLFdBS1UsYUFBeEJyTCxFQUFTc0wsV0FFYkMsV0FBWW5MLEVBQU9xQyxRQUtuQnpDLEVBQVN3TCxpQkFBa0IsbUJBQW9CakosR0FBVyxHQUcxRDdDLEVBQU84TCxpQkFBa0IsT0FBUWpKLEdBQVcsS0FHdkMxQyxFQUFVNkUsUUFBU3FDLElBSTNCM0csRUFBT21FLEtBQUssZ0VBQWdFa0gsTUFBTSxLQUFNLFNBQVN4RyxFQUFHUyxHQUNuR25GLEVBQVksV0FBYW1GLEVBQU8sS0FBUUEsRUFBS2lFLGVBRzlDLFNBQVNFLEdBQWE5QyxHQUNyQixHQUFJOUQsR0FBUzhELEVBQUk5RCxPQUNoQitELEVBQU81RyxFQUFPNEcsS0FBTUQsRUFFckIsT0FBSzNHLEdBQU84RyxTQUFVSCxJQUNkLEVBR2MsSUFBakJBLEVBQUl6RCxVQUFrQkwsR0FDbkIsRUFHUSxVQUFUK0QsR0FBNkIsYUFBVEEsSUFDYixJQUFYL0QsR0FDZ0IsZ0JBQVhBLElBQXVCQSxFQUFTLEdBQU9BLEVBQVMsSUFBTzhELElBSWhFbkgsRUFBYVEsRUFBT0osR0FXcEIsU0FBV04sRUFBUUMsV0FFbkIsR0FBSXNGLEdBQ0h5RyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUdBQyxFQUNBbE0sRUFDQUMsRUFDQWtNLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBR0FyRyxFQUFVLFVBQVksR0FBSytFLE1BQzNCdUIsRUFBZTlNLEVBQU9NLFNBQ3RCeU0sRUFBVSxFQUNWOUgsRUFBTyxFQUNQK0gsRUFBYUMsS0FDYkMsRUFBYUQsS0FDYkUsRUFBZ0JGLEtBQ2hCRyxHQUFlLEVBQ2ZDLEVBQVksU0FBVUMsRUFBR0MsR0FDeEIsTUFBS0QsS0FBTUMsR0FDVkgsR0FBZSxFQUNSLEdBRUQsR0FJUkksUUFBc0J2TixXQUN0QndOLEVBQWUsR0FBSyxHQUdwQkMsS0FBYy9MLGVBQ2R5SSxLQUNBdUQsRUFBTXZELEVBQUl1RCxJQUNWQyxFQUFjeEQsRUFBSWpKLEtBQ2xCQSxFQUFPaUosRUFBSWpKLEtBQ1hFLEVBQVErSSxFQUFJL0ksTUFFWkUsRUFBVTZJLEVBQUk3SSxTQUFXLFNBQVU2QixHQUNsQyxHQUFJbUMsR0FBSSxFQUNQQyxFQUFNbkMsS0FBS0UsTUFDWixNQUFZaUMsRUFBSkQsRUFBU0EsSUFDaEIsR0FBS2xDLEtBQUtrQyxLQUFPbkMsRUFDaEIsTUFBT21DLEVBR1QsT0FBTyxJQUdSc0ksRUFBVyw2SEFLWEMsRUFBYSxzQkFFYkMsRUFBb0IsbUNBS3BCQyxFQUFhRCxFQUFrQnBILFFBQVMsSUFBSyxNQUc3Q3NILEVBQWEsTUFBUUgsRUFBYSxLQUFPQyxFQUFvQixJQUFNRCxFQUNsRSxtQkFBcUJBLEVBQWEsd0NBQTBDRSxFQUFhLFFBQVVGLEVBQWEsT0FRakhJLEVBQVUsS0FBT0gsRUFBb0IsbUVBQXFFRSxFQUFXdEgsUUFBUyxFQUFHLEdBQU0sZUFHdkl3SCxFQUFZQyxPQUFRLElBQU1OLEVBQWEsOEJBQWdDQSxFQUFhLEtBQU0sS0FFMUZPLEVBQWFELE9BQVEsSUFBTU4sRUFBYSxLQUFPQSxFQUFhLEtBQzVEUSxFQUFtQkYsT0FBUSxJQUFNTixFQUFhLFdBQWFBLEVBQWEsSUFBTUEsRUFBYSxLQUUzRlMsRUFBZUgsT0FBUU4sRUFBYSxTQUNwQ1UsRUFBdUJKLE9BQVEsSUFBTU4sRUFBYSxnQkFBa0JBLEVBQWEsT0FBUSxLQUV6RlcsRUFBY0wsT0FBUUYsR0FDdEJRLEVBQWtCTixPQUFRLElBQU1KLEVBQWEsS0FFN0NXLEdBQ0NDLEdBQVVSLE9BQVEsTUFBUUwsRUFBb0IsS0FDOUNjLE1BQWFULE9BQVEsUUFBVUwsRUFBb0IsS0FDbkRlLElBQVdWLE9BQVEsS0FBT0wsRUFBa0JwSCxRQUFTLElBQUssTUFBUyxLQUNuRW9JLEtBQVlYLE9BQVEsSUFBTUgsR0FDMUJlLE9BQWNaLE9BQVEsSUFBTUYsR0FDNUJlLE1BQWFiLE9BQVEseURBQTJETixFQUMvRSwrQkFBaUNBLEVBQWEsY0FBZ0JBLEVBQzlELGFBQWVBLEVBQWEsU0FBVSxLQUN2Q29CLEtBQVlkLE9BQVEsT0FBU1AsRUFBVyxLQUFNLEtBRzlDc0IsYUFBb0JmLE9BQVEsSUFBTU4sRUFBYSxtREFDOUNBLEVBQWEsbUJBQXFCQSxFQUFhLG1CQUFvQixNQUdyRXNCLEVBQVUseUJBR1YvTSxFQUFhLG1DQUViZ04sRUFBVSxzQ0FDVkMsR0FBVSxTQUVWQyxHQUFVLFFBR1ZDLEdBQWdCcEIsT0FBUSxxQkFBdUJOLEVBQWEsTUFBUUEsRUFBYSxPQUFRLE1BQ3pGMkIsR0FBWSxTQUFVQyxFQUFHQyxFQUFTQyxHQUNqQyxHQUFJQyxHQUFPLEtBQU9GLEVBQVUsS0FJNUIsT0FBT0UsS0FBU0EsR0FBUUQsRUFDdkJELEVBRU8sRUFBUEUsRUFDQ2hJLE9BQU9pSSxhQUFjRCxFQUFPLE9BRTVCaEksT0FBT2lJLGFBQTJCLE1BQWJELEdBQVEsR0FBNEIsTUFBUixLQUFQQSxHQUk5QyxLQUNDMU8sRUFBSytELE1BQ0hrRixFQUFNL0ksRUFBTWlELEtBQU13SSxFQUFhcEUsWUFDaENvRSxFQUFhcEUsWUFJZDBCLEVBQUswQyxFQUFhcEUsV0FBV25GLFFBQVNLLFNBQ3JDLE1BQVFrRSxJQUNUM0csR0FBUytELE1BQU9rRixFQUFJN0csT0FHbkIsU0FBVThDLEVBQVEwSixHQUNqQm5DLEVBQVkxSSxNQUFPbUIsRUFBUWhGLEVBQU1pRCxLQUFLeUwsS0FLdkMsU0FBVTFKLEVBQVEwSixHQUNqQixHQUFJdEssR0FBSVksRUFBTzlDLE9BQ2RnQyxFQUFJLENBRUwsT0FBU2MsRUFBT1osS0FBT3NLLEVBQUl4SyxNQUMzQmMsRUFBTzlDLE9BQVNrQyxFQUFJLElBS3ZCLFFBQVN1SyxJQUFRbE8sRUFBVUMsRUFBU3NJLEVBQVM0RixHQUM1QyxHQUFJOU0sR0FBT0MsRUFBTThNLEVBQUd0TSxFQUVuQjJCLEVBQUc0SyxFQUFRMUUsRUFBSzJFLEVBQUtDLEVBQVlDLENBU2xDLEtBUE92TyxFQUFVQSxFQUFROEIsZUFBaUI5QixFQUFVK0ssS0FBbUJ4TSxHQUN0RWtNLEVBQWF6SyxHQUdkQSxFQUFVQSxHQUFXekIsRUFDckIrSixFQUFVQSxPQUVKdkksR0FBZ0MsZ0JBQWJBLEdBQ3hCLE1BQU91SSxFQUdSLElBQXVDLEtBQWpDekcsRUFBVzdCLEVBQVE2QixXQUFnQyxJQUFiQSxFQUMzQyxRQUdELElBQUs2SSxJQUFtQndELEVBQU8sQ0FHOUIsR0FBTTlNLEVBQVFkLEVBQVdtQixLQUFNMUIsR0FFOUIsR0FBTW9PLEVBQUkvTSxFQUFNLElBQ2YsR0FBa0IsSUFBYlMsRUFBaUIsQ0FJckIsR0FIQVIsRUFBT3JCLEVBQVFtQyxlQUFnQmdNLElBRzFCOU0sSUFBUUEsRUFBS2UsV0FRakIsTUFBT2tHLEVBTFAsSUFBS2pILEVBQUttTixLQUFPTCxFQUVoQixNQURBN0YsR0FBUWxKLEtBQU1pQyxHQUNQaUgsTUFPVCxJQUFLdEksRUFBUThCLGdCQUFrQlQsRUFBT3JCLEVBQVE4QixjQUFjSyxlQUFnQmdNLEtBQzNFckQsRUFBVTlLLEVBQVNxQixJQUFVQSxFQUFLbU4sS0FBT0wsRUFFekMsTUFEQTdGLEdBQVFsSixLQUFNaUMsR0FDUGlILE1BS0gsQ0FBQSxHQUFLbEgsRUFBTSxHQUVqQixNQURBaEMsR0FBSytELE1BQU9tRixFQUFTdEksRUFBUW9ILHFCQUFzQnJILElBQzVDdUksQ0FHRCxLQUFNNkYsRUFBSS9NLEVBQU0sS0FBTzZJLEVBQVF3RSx3QkFBMEJ6TyxFQUFReU8sdUJBRXZFLE1BREFyUCxHQUFLK0QsTUFBT21GLEVBQVN0SSxFQUFReU8sdUJBQXdCTixJQUM5QzdGLEVBS1QsR0FBSzJCLEVBQVF5RSxPQUFTL0QsSUFBY0EsRUFBVTVJLEtBQU1oQyxJQUFjLENBU2pFLEdBUkFzTyxFQUFNM0UsRUFBTWpGLEVBQ1o2SixFQUFhdE8sRUFDYnVPLEVBQTJCLElBQWIxTSxHQUFrQjlCLEVBTWQsSUFBYjhCLEdBQXFELFdBQW5DN0IsRUFBUWlJLFNBQVNDLGNBQTZCLENBQ3BFa0csRUFBU08sR0FBVTVPLElBRWIySixFQUFNMUosRUFBUTRPLGFBQWEsT0FDaENQLEVBQU0zRSxFQUFJOUUsUUFBUzRJLEdBQVMsUUFFNUJ4TixFQUFRNk8sYUFBYyxLQUFNUixHQUU3QkEsRUFBTSxRQUFVQSxFQUFNLE1BRXRCN0ssRUFBSTRLLEVBQU81TSxNQUNYLE9BQVFnQyxJQUNQNEssRUFBTzVLLEdBQUs2SyxFQUFNUyxHQUFZVixFQUFPNUssR0FFdEM4SyxHQUFhOUIsRUFBU3pLLEtBQU1oQyxJQUFjQyxFQUFRb0MsWUFBY3BDLEVBQ2hFdU8sRUFBY0gsRUFBT1csS0FBSyxLQUczQixHQUFLUixFQUNKLElBSUMsTUFIQW5QLEdBQUsrRCxNQUFPbUYsRUFDWGdHLEVBQVdVLGlCQUFrQlQsSUFFdkJqRyxFQUNOLE1BQU0yRyxJQUNOLFFBQ0t2RixHQUNMMUosRUFBUWtQLGdCQUFnQixRQVE3QixNQUFPQyxJQUFRcFAsRUFBUzZFLFFBQVN3SCxFQUFPLE1BQVFwTSxFQUFTc0ksRUFBUzRGLEdBU25FLFFBQVNoRCxNQUNSLEdBQUlrRSxLQUVKLFNBQVNDLEdBQU9uRyxFQUFLZixHQU1wQixNQUpLaUgsR0FBS2hRLEtBQU04SixHQUFPLEtBQVFpQixFQUFLbUYsbUJBRTVCRCxHQUFPRCxFQUFLRyxTQUVaRixFQUFPbkcsR0FBUWYsRUFFeEIsTUFBT2tILEdBT1IsUUFBU0csSUFBY3ZQLEdBRXRCLE1BREFBLEdBQUl3RSxJQUFZLEVBQ1R4RSxFQU9SLFFBQVN3UCxJQUFReFAsR0FDaEIsR0FBSXlQLEdBQU1uUixFQUFTaUksY0FBYyxNQUVqQyxLQUNDLFFBQVN2RyxFQUFJeVAsR0FDWixNQUFPM0osR0FDUixPQUFPLEVBQ04sUUFFSTJKLEVBQUl0TixZQUNSc04sRUFBSXROLFdBQVcwRixZQUFhNEgsR0FHN0JBLEVBQU0sTUFTUixRQUFTQyxJQUFXQyxFQUFPQyxHQUMxQixHQUFJeEgsR0FBTXVILEVBQU01RixNQUFNLEtBQ3JCeEcsRUFBSW9NLEVBQU1wTyxNQUVYLE9BQVFnQyxJQUNQMkcsRUFBSzJGLFdBQVl6SCxFQUFJN0UsSUFBT3FNLEVBVTlCLFFBQVNFLElBQWN4RSxFQUFHQyxHQUN6QixHQUFJd0UsR0FBTXhFLEdBQUtELEVBQ2QwRSxFQUFPRCxHQUFzQixJQUFmekUsRUFBRTFKLFVBQWlDLElBQWYySixFQUFFM0osWUFDaEMySixFQUFFMEUsYUFBZXhFLEtBQ2pCSCxFQUFFMkUsYUFBZXhFLEVBR3RCLElBQUt1RSxFQUNKLE1BQU9BLEVBSVIsSUFBS0QsRUFDSixNQUFTQSxFQUFNQSxFQUFJRyxZQUNsQixHQUFLSCxJQUFReEUsRUFDWixNQUFPLEVBS1YsT0FBT0QsR0FBSSxFQUFJLEdBT2hCLFFBQVM2RSxJQUFtQjdLLEdBQzNCLE1BQU8sVUFBVWxFLEdBQ2hCLEdBQUk0QyxHQUFPNUMsRUFBSzRHLFNBQVNDLGFBQ3pCLE9BQWdCLFVBQVRqRSxHQUFvQjVDLEVBQUtrRSxPQUFTQSxHQVEzQyxRQUFTOEssSUFBb0I5SyxHQUM1QixNQUFPLFVBQVVsRSxHQUNoQixHQUFJNEMsR0FBTzVDLEVBQUs0RyxTQUFTQyxhQUN6QixRQUFpQixVQUFUakUsR0FBNkIsV0FBVEEsSUFBc0I1QyxFQUFLa0UsT0FBU0EsR0FRbEUsUUFBUytLLElBQXdCclEsR0FDaEMsTUFBT3VQLElBQWEsU0FBVWUsR0FFN0IsTUFEQUEsSUFBWUEsRUFDTGYsR0FBYSxTQUFVdEIsRUFBTXJELEdBQ25DLEdBQUluSCxHQUNIOE0sRUFBZXZRLEtBQVFpTyxFQUFLMU0sT0FBUStPLEdBQ3BDL00sRUFBSWdOLEVBQWFoUCxNQUdsQixPQUFRZ0MsSUFDRjBLLEVBQU94SyxFQUFJOE0sRUFBYWhOLE1BQzVCMEssRUFBS3hLLEtBQU9tSCxFQUFRbkgsR0FBS3dLLEVBQUt4SyxTQVduQzJHLEVBQVE0RCxHQUFPNUQsTUFBUSxTQUFVaEosR0FHaEMsR0FBSTVDLEdBQWtCNEMsSUFBU0EsRUFBS1MsZUFBaUJULEdBQU01QyxlQUMzRCxPQUFPQSxHQUErQyxTQUE3QkEsRUFBZ0J3SixVQUFzQixHQUloRWdDLEVBQVVnRSxHQUFPaEUsV0FPakJRLEVBQWN3RCxHQUFPeEQsWUFBYyxTQUFVZ0csR0FDNUMsR0FBSUMsR0FBTUQsRUFBT0EsRUFBSzNPLGVBQWlCMk8sRUFBTzFGLEVBQzdDNEYsRUFBU0QsRUFBSUUsV0FHZCxPQUFLRixLQUFRblMsR0FBNkIsSUFBakJtUyxFQUFJN08sVUFBbUI2TyxFQUFJalMsaUJBS3BERixFQUFXbVMsRUFDWGxTLEVBQVVrUyxFQUFJalMsZ0JBR2RpTSxHQUFrQkwsRUFBT3FHLEdBTXBCQyxHQUFVQSxFQUFPRSxhQUFlRixJQUFXQSxFQUFPRyxLQUN0REgsRUFBT0UsWUFBYSxpQkFBa0IsV0FDckNwRyxNQVNGUixFQUFRaUMsV0FBYXVELEdBQU8sU0FBVUMsR0FFckMsTUFEQUEsR0FBSXFCLFVBQVksS0FDUnJCLEVBQUlkLGFBQWEsZUFPMUIzRSxFQUFRN0MscUJBQXVCcUksR0FBTyxTQUFVQyxHQUUvQyxNQURBQSxHQUFJN0gsWUFBYTZJLEVBQUlNLGNBQWMsTUFDM0J0QixFQUFJdEkscUJBQXFCLEtBQUs1RixTQUl2Q3lJLEVBQVF3RSx1QkFBeUJnQixHQUFPLFNBQVVDLEdBUWpELE1BUEFBLEdBQUl1QixVQUFZLCtDQUloQnZCLEVBQUl3QixXQUFXSCxVQUFZLElBR3VCLElBQTNDckIsRUFBSWpCLHVCQUF1QixLQUFLak4sU0FPeEN5SSxFQUFRa0gsUUFBVTFCLEdBQU8sU0FBVUMsR0FFbEMsTUFEQWxSLEdBQVFxSixZQUFhNkgsR0FBTWxCLEdBQUsvSixHQUN4QmlNLEVBQUlVLG9CQUFzQlYsRUFBSVUsa0JBQW1CM00sR0FBVWpELFNBSS9EeUksRUFBUWtILFNBQ1poSCxFQUFLekksS0FBUyxHQUFJLFNBQVU4TSxFQUFJeE8sR0FDL0IsU0FBWUEsR0FBUW1DLGlCQUFtQnNKLEdBQWdCZixFQUFpQixDQUN2RSxHQUFJeUQsR0FBSW5PLEVBQVFtQyxlQUFnQnFNLEVBR2hDLE9BQU9MLElBQUtBLEVBQUUvTCxZQUFjK0wsUUFHOUJoRSxFQUFLa0gsT0FBVyxHQUFJLFNBQVU3QyxHQUM3QixHQUFJOEMsR0FBUzlDLEVBQUc1SixRQUFTNkksR0FBV0MsR0FDcEMsT0FBTyxVQUFVck0sR0FDaEIsTUFBT0EsR0FBS3VOLGFBQWEsUUFBVTBDLFlBTTlCbkgsR0FBS3pJLEtBQVMsR0FFckJ5SSxFQUFLa0gsT0FBVyxHQUFLLFNBQVU3QyxHQUM5QixHQUFJOEMsR0FBUzlDLEVBQUc1SixRQUFTNkksR0FBV0MsR0FDcEMsT0FBTyxVQUFVck0sR0FDaEIsR0FBSW9QLFNBQWNwUCxHQUFLa1EsbUJBQXFCOUYsR0FBZ0JwSyxFQUFLa1EsaUJBQWlCLEtBQ2xGLE9BQU9kLElBQVFBLEVBQUt0SSxRQUFVbUosS0FNakNuSCxFQUFLekksS0FBVSxJQUFJdUksRUFBUTdDLHFCQUMxQixTQUFVb0ssRUFBS3hSLEdBQ2QsYUFBWUEsR0FBUW9ILHVCQUF5QnFFLEVBQ3JDekwsRUFBUW9ILHFCQUFzQm9LLEdBRHRDLFdBSUQsU0FBVUEsRUFBS3hSLEdBQ2QsR0FBSXFCLEdBQ0g0RixLQUNBekQsRUFBSSxFQUNKOEUsRUFBVXRJLEVBQVFvSCxxQkFBc0JvSyxFQUd6QyxJQUFhLE1BQVJBLEVBQWMsQ0FDbEIsTUFBU25RLEVBQU9pSCxFQUFROUUsS0FDQSxJQUFsQm5DLEVBQUtRLFVBQ1RvRixFQUFJN0gsS0FBTWlDLEVBSVosT0FBTzRGLEdBRVIsTUFBT3FCLElBSVQ2QixFQUFLekksS0FBWSxNQUFJdUksRUFBUXdFLHdCQUEwQixTQUFVc0MsRUFBVy9RLEdBQzNFLGFBQVlBLEdBQVF5Tyx5QkFBMkJoRCxHQUFnQmYsRUFDdkQxSyxFQUFReU8sdUJBQXdCc0MsR0FEeEMsV0FXRG5HLEtBT0FELE1BRU1WLEVBQVF5RSxJQUFNckIsRUFBUXRMLEtBQU0yTyxFQUFJMUIscUJBR3JDUyxHQUFPLFNBQVVDLEdBTWhCQSxFQUFJdUIsVUFBWSxpREFJVnZCLEVBQUlWLGlCQUFpQixjQUFjeE4sUUFDeENtSixFQUFVdkwsS0FBTSxNQUFRMk0sRUFBYSxhQUFlRCxFQUFXLEtBTTFENEQsRUFBSVYsaUJBQWlCLFlBQVl4TixRQUN0Q21KLEVBQVV2TCxLQUFLLGNBSWpCcVEsR0FBTyxTQUFVQyxHQU9oQixHQUFJK0IsR0FBUWYsRUFBSWxLLGNBQWMsUUFDOUJpTCxHQUFNNUMsYUFBYyxPQUFRLFVBQzVCYSxFQUFJN0gsWUFBYTRKLEdBQVE1QyxhQUFjLElBQUssSUFFdkNhLEVBQUlWLGlCQUFpQixXQUFXeE4sUUFDcENtSixFQUFVdkwsS0FBTSxTQUFXMk0sRUFBYSxnQkFLbkMyRCxFQUFJVixpQkFBaUIsWUFBWXhOLFFBQ3RDbUosRUFBVXZMLEtBQU0sV0FBWSxhQUk3QnNRLEVBQUlWLGlCQUFpQixRQUNyQnJFLEVBQVV2TCxLQUFLLFlBSVg2SyxFQUFReUgsZ0JBQWtCckUsRUFBUXRMLEtBQU84SSxFQUFVck0sRUFBUW1ULHVCQUNoRW5ULEVBQVFvVCxvQkFDUnBULEVBQVFxVCxrQkFDUnJULEVBQVFzVCxxQkFFUnJDLEdBQU8sU0FBVUMsR0FHaEJ6RixFQUFROEgsa0JBQW9CbEgsRUFBUXRJLEtBQU1tTixFQUFLLE9BSS9DN0UsRUFBUXRJLEtBQU1tTixFQUFLLGFBQ25COUUsRUFBY3hMLEtBQU0sS0FBTStNLEtBSTVCeEIsRUFBWUEsRUFBVW5KLFFBQWM2SyxPQUFRMUIsRUFBVW9FLEtBQUssTUFDM0RuRSxFQUFnQkEsRUFBY3BKLFFBQWM2SyxPQUFRekIsRUFBY21FLEtBQUssTUFRdkVqRSxFQUFXdUMsRUFBUXRMLEtBQU12RCxFQUFRc00sV0FBY3RNLEVBQVF3VCx3QkFDdEQsU0FBVXpHLEVBQUdDLEdBQ1osR0FBSXlHLEdBQXVCLElBQWYxRyxFQUFFMUosU0FBaUIwSixFQUFFOU0sZ0JBQWtCOE0sRUFDbEQyRyxFQUFNMUcsR0FBS0EsRUFBRXBKLFVBQ2QsT0FBT21KLEtBQU0yRyxNQUFXQSxHQUF3QixJQUFqQkEsRUFBSXJRLFlBQ2xDb1EsRUFBTW5ILFNBQ0xtSCxFQUFNbkgsU0FBVW9ILEdBQ2hCM0csRUFBRXlHLHlCQUE4RCxHQUFuQ3pHLEVBQUV5Ryx3QkFBeUJFLE1BRzNELFNBQVUzRyxFQUFHQyxHQUNaLEdBQUtBLEVBQ0osTUFBU0EsRUFBSUEsRUFBRXBKLFdBQ2QsR0FBS29KLElBQU1ELEVBQ1YsT0FBTyxDQUlWLFFBQU8sR0FPVEQsRUFBWTlNLEVBQVF3VCx3QkFDcEIsU0FBVXpHLEVBQUdDLEdBR1osR0FBS0QsSUFBTUMsRUFFVixNQURBSCxJQUFlLEVBQ1IsQ0FHUixJQUFJOEcsR0FBVTNHLEVBQUV3Ryx5QkFBMkJ6RyxFQUFFeUcseUJBQTJCekcsRUFBRXlHLHdCQUF5QnhHLEVBRW5HLE9BQUsyRyxHQUVXLEVBQVZBLElBQ0ZsSSxFQUFRbUksY0FBZ0I1RyxFQUFFd0csd0JBQXlCekcsS0FBUTRHLEVBR3hENUcsSUFBTW1GLEdBQU81RixFQUFTQyxFQUFjUSxHQUNqQyxHQUVIQyxJQUFNa0YsR0FBTzVGLEVBQVNDLEVBQWNTLEdBQ2pDLEVBSURoQixFQUNKaEwsRUFBUStDLEtBQU1pSSxFQUFXZSxHQUFNL0wsRUFBUStDLEtBQU1pSSxFQUFXZ0IsR0FDMUQsRUFHZSxFQUFWMkcsRUFBYyxHQUFLLEVBSXBCNUcsRUFBRXlHLHdCQUEwQixHQUFLLEdBRXpDLFNBQVV6RyxFQUFHQyxHQUNaLEdBQUl3RSxHQUNIeE0sRUFBSSxFQUNKNk8sRUFBTTlHLEVBQUVuSixXQUNSOFAsRUFBTTFHLEVBQUVwSixXQUNSa1EsR0FBTy9HLEdBQ1BnSCxHQUFPL0csRUFHUixJQUFLRCxJQUFNQyxFQUVWLE1BREFILElBQWUsRUFDUixDQUdELEtBQU1nSCxJQUFRSCxFQUNwQixNQUFPM0csS0FBTW1GLEVBQU0sR0FDbEJsRixJQUFNa0YsRUFBTSxFQUNaMkIsRUFBTSxHQUNOSCxFQUFNLEVBQ04xSCxFQUNFaEwsRUFBUStDLEtBQU1pSSxFQUFXZSxHQUFNL0wsRUFBUStDLEtBQU1pSSxFQUFXZ0IsR0FDMUQsQ0FHSyxJQUFLNkcsSUFBUUgsRUFDbkIsTUFBT25DLElBQWN4RSxFQUFHQyxFQUl6QndFLEdBQU16RSxDQUNOLE9BQVN5RSxFQUFNQSxFQUFJNU4sV0FDbEJrUSxFQUFHRSxRQUFTeEMsRUFFYkEsR0FBTXhFLENBQ04sT0FBU3dFLEVBQU1BLEVBQUk1TixXQUNsQm1RLEVBQUdDLFFBQVN4QyxFQUliLE9BQVFzQyxFQUFHOU8sS0FBTytPLEVBQUcvTyxHQUNwQkEsR0FHRCxPQUFPQSxHQUVOdU0sR0FBY3VDLEVBQUc5TyxHQUFJK08sRUFBRy9PLElBR3hCOE8sRUFBRzlPLEtBQU91SCxFQUFlLEdBQ3pCd0gsRUFBRy9PLEtBQU91SCxFQUFlLEVBQ3pCLEdBR0syRixHQTFVQ25TLEdBNlVUMFAsR0FBT3BELFFBQVUsU0FBVTRILEVBQU1DLEdBQ2hDLE1BQU96RSxJQUFRd0UsRUFBTSxLQUFNLEtBQU1DLElBR2xDekUsR0FBT3lELGdCQUFrQixTQUFVclEsRUFBTW9SLEdBU3hDLElBUE9wUixFQUFLUyxlQUFpQlQsS0FBVzlDLEdBQ3ZDa00sRUFBYXBKLEdBSWRvUixFQUFPQSxFQUFLN04sUUFBUzZILEVBQWtCLGFBRWxDeEMsRUFBUXlILGtCQUFtQmhILEdBQzVCRSxHQUFrQkEsRUFBYzdJLEtBQU0wUSxJQUN0QzlILEdBQWtCQSxFQUFVNUksS0FBTTBRLElBRXJDLElBQ0MsR0FBSTdQLEdBQU1pSSxFQUFRdEksS0FBTWxCLEVBQU1vUixFQUc5QixJQUFLN1AsR0FBT3FILEVBQVE4SCxtQkFHbEIxUSxFQUFLOUMsVUFBdUMsS0FBM0I4QyxFQUFLOUMsU0FBU3NELFNBQ2hDLE1BQU9lLEdBRVAsTUFBTW1ELElBR1QsTUFBT2tJLElBQVF3RSxFQUFNbFUsRUFBVSxNQUFPOEMsSUFBUUcsT0FBUyxHQUd4RHlNLEdBQU9uRCxTQUFXLFNBQVU5SyxFQUFTcUIsR0FLcEMsT0FIT3JCLEVBQVE4QixlQUFpQjlCLEtBQWN6QixHQUM3Q2tNLEVBQWF6SyxHQUVQOEssRUFBVTlLLEVBQVNxQixJQUczQjRNLEdBQU8vTCxLQUFPLFNBQVViLEVBQU00QyxJQUV0QjVDLEVBQUtTLGVBQWlCVCxLQUFXOUMsR0FDdkNrTSxFQUFhcEosRUFHZCxJQUFJcEIsR0FBS2tLLEVBQUsyRixXQUFZN0wsRUFBS2lFLGVBRTlCeUssRUFBTTFTLEdBQU0wTCxFQUFPcEosS0FBTTRILEVBQUsyRixXQUFZN0wsRUFBS2lFLGVBQzlDakksRUFBSW9CLEVBQU00QyxHQUFPeUcsR0FDakJ4TSxTQUVGLE9BQU95VSxLQUFRelUsVUFDZCtMLEVBQVFpQyxhQUFleEIsRUFDdEJySixFQUFLdU4sYUFBYzNLLElBQ2xCME8sRUFBTXRSLEVBQUtrUSxpQkFBaUJ0TixLQUFVME8sRUFBSUMsVUFDMUNELEVBQUl4SyxNQUNKLEtBQ0Z3SyxHQUdGMUUsR0FBT2hJLE1BQVEsU0FBVUMsR0FDeEIsS0FBVUMsT0FBTywwQ0FBNENELElBTzlEK0gsR0FBTzRFLFdBQWEsU0FBVXZLLEdBQzdCLEdBQUlqSCxHQUNIeVIsS0FDQXBQLEVBQUksRUFDSkYsRUFBSSxDQU9MLElBSkE2SCxHQUFnQnBCLEVBQVE4SSxpQkFDeEJ2SSxHQUFhUCxFQUFRK0ksWUFBYzFLLEVBQVFoSixNQUFPLEdBQ2xEZ0osRUFBUXpFLEtBQU15SCxHQUVURCxFQUFlLENBQ25CLE1BQVNoSyxFQUFPaUgsRUFBUTlFLEtBQ2xCbkMsSUFBU2lILEVBQVM5RSxLQUN0QkUsRUFBSW9QLEVBQVcxVCxLQUFNb0UsR0FHdkIsT0FBUUUsSUFDUDRFLEVBQVF4RSxPQUFRZ1AsRUFBWXBQLEdBQUssR0FJbkMsTUFBTzRFLElBT1I4QixFQUFVNkQsR0FBTzdELFFBQVUsU0FBVS9JLEdBQ3BDLEdBQUlvUCxHQUNIN04sRUFBTSxHQUNOWSxFQUFJLEVBQ0ozQixFQUFXUixFQUFLUSxRQUVqQixJQUFNQSxHQU1DLEdBQWtCLElBQWJBLEdBQStCLElBQWJBLEdBQStCLEtBQWJBLEVBQWtCLENBR2pFLEdBQWlDLGdCQUFyQlIsR0FBSzRSLFlBQ2hCLE1BQU81UixHQUFLNFIsV0FHWixLQUFNNVIsRUFBT0EsRUFBSzZQLFdBQVk3UCxFQUFNQSxFQUFPQSxFQUFLOE8sWUFDL0N2TixHQUFPd0gsRUFBUy9JLE9BR1osSUFBa0IsSUFBYlEsR0FBK0IsSUFBYkEsRUFDN0IsTUFBT1IsR0FBSzZSLGNBaEJaLE1BQVN6QyxFQUFPcFAsRUFBS21DLEdBQUtBLElBRXpCWixHQUFPd0gsRUFBU3FHLEVBa0JsQixPQUFPN04sSUFHUnVILEVBQU84RCxHQUFPa0YsV0FHYjdELFlBQWEsR0FFYjhELGFBQWM1RCxHQUVkcE8sTUFBT3dMLEVBRVBrRCxjQUVBcE8sUUFFQTJSLFVBQ0NDLEtBQU9DLElBQUssYUFBY2xRLE9BQU8sR0FDakNtUSxLQUFPRCxJQUFLLGNBQ1pFLEtBQU9GLElBQUssa0JBQW1CbFEsT0FBTyxHQUN0Q3FRLEtBQU9ILElBQUssb0JBR2JJLFdBQ0MzRyxLQUFRLFNBQVU1TCxHQVVqQixNQVRBQSxHQUFNLEdBQUtBLEVBQU0sR0FBR3dELFFBQVM2SSxHQUFXQyxJQUd4Q3RNLEVBQU0sSUFBT0EsRUFBTSxJQUFNQSxFQUFNLElBQU0sSUFBS3dELFFBQVM2SSxHQUFXQyxJQUU1QyxPQUFidE0sRUFBTSxLQUNWQSxFQUFNLEdBQUssSUFBTUEsRUFBTSxHQUFLLEtBR3RCQSxFQUFNOUIsTUFBTyxFQUFHLElBR3hCNE4sTUFBUyxTQUFVOUwsR0E2QmxCLE1BbEJBQSxHQUFNLEdBQUtBLEVBQU0sR0FBRzhHLGNBRVksUUFBM0I5RyxFQUFNLEdBQUc5QixNQUFPLEVBQUcsSUFFakI4QixFQUFNLElBQ1g2TSxHQUFPaEksTUFBTzdFLEVBQU0sSUFLckJBLEVBQU0sS0FBUUEsRUFBTSxHQUFLQSxFQUFNLElBQU1BLEVBQU0sSUFBTSxHQUFLLEdBQW1CLFNBQWJBLEVBQU0sSUFBOEIsUUFBYkEsRUFBTSxLQUN6RkEsRUFBTSxLQUFVQSxFQUFNLEdBQUtBLEVBQU0sSUFBcUIsUUFBYkEsRUFBTSxLQUdwQ0EsRUFBTSxJQUNqQjZNLEdBQU9oSSxNQUFPN0UsRUFBTSxJQUdkQSxHQUdSNkwsT0FBVSxTQUFVN0wsR0FDbkIsR0FBSXdTLEdBQ0hDLEdBQVl6UyxFQUFNLElBQU1BLEVBQU0sRUFFL0IsT0FBS3dMLEdBQWlCLE1BQUU3SyxLQUFNWCxFQUFNLElBQzVCLE1BSUhBLEVBQU0sSUFBTUEsRUFBTSxLQUFPbEQsVUFDN0JrRCxFQUFNLEdBQUtBLEVBQU0sR0FHTnlTLEdBQVluSCxFQUFRM0ssS0FBTThSLEtBRXBDRCxFQUFTakYsR0FBVWtGLEdBQVUsTUFFN0JELEVBQVNDLEVBQVNyVSxRQUFTLElBQUtxVSxFQUFTclMsT0FBU29TLEdBQVdDLEVBQVNyUyxVQUd2RUosRUFBTSxHQUFLQSxFQUFNLEdBQUc5QixNQUFPLEVBQUdzVSxHQUM5QnhTLEVBQU0sR0FBS3lTLEVBQVN2VSxNQUFPLEVBQUdzVSxJQUl4QnhTLEVBQU05QixNQUFPLEVBQUcsTUFJekIrUixRQUVDdEUsSUFBTyxTQUFVK0csR0FDaEIsR0FBSTdMLEdBQVc2TCxFQUFpQmxQLFFBQVM2SSxHQUFXQyxJQUFZeEYsYUFDaEUsT0FBNEIsTUFBckI0TCxFQUNOLFdBQWEsT0FBTyxHQUNwQixTQUFVelMsR0FDVCxNQUFPQSxHQUFLNEcsVUFBWTVHLEVBQUs0RyxTQUFTQyxnQkFBa0JELElBSTNENkUsTUFBUyxTQUFVaUUsR0FDbEIsR0FBSWdELEdBQVU5SSxFQUFZOEYsRUFBWSxJQUV0QyxPQUFPZ0QsS0FDTEEsRUFBYzFILE9BQVEsTUFBUU4sRUFBYSxJQUFNZ0YsRUFBWSxJQUFNaEYsRUFBYSxTQUNqRmQsRUFBWThGLEVBQVcsU0FBVTFQLEdBQ2hDLE1BQU8wUyxHQUFRaFMsS0FBZ0MsZ0JBQW5CVixHQUFLMFAsV0FBMEIxUCxFQUFLMFAsaUJBQW9CMVAsR0FBS3VOLGVBQWlCbkQsR0FBZ0JwSyxFQUFLdU4sYUFBYSxVQUFZLE9BSTNKNUIsS0FBUSxTQUFVL0ksRUFBTStQLEVBQVVDLEdBQ2pDLE1BQU8sVUFBVTVTLEdBQ2hCLEdBQUk2UyxHQUFTakcsR0FBTy9MLEtBQU1iLEVBQU00QyxFQUVoQyxPQUFlLE9BQVZpUSxFQUNnQixPQUFiRixFQUVGQSxHQUlORSxHQUFVLEdBRVUsTUFBYkYsRUFBbUJFLElBQVdELEVBQ3ZCLE9BQWJELEVBQW9CRSxJQUFXRCxFQUNsQixPQUFiRCxFQUFvQkMsR0FBcUMsSUFBNUJDLEVBQU8xVSxRQUFTeVUsR0FDaEMsT0FBYkQsRUFBb0JDLEdBQVNDLEVBQU8xVSxRQUFTeVUsR0FBVSxHQUMxQyxPQUFiRCxFQUFvQkMsR0FBU0MsRUFBTzVVLE9BQVEyVSxFQUFNelMsVUFBYXlTLEVBQ2xELE9BQWJELEdBQXNCLElBQU1FLEVBQVMsS0FBTTFVLFFBQVN5VSxHQUFVLEdBQ2pELE9BQWJELEVBQW9CRSxJQUFXRCxHQUFTQyxFQUFPNVUsTUFBTyxFQUFHMlUsRUFBTXpTLE9BQVMsS0FBUXlTLEVBQVEsS0FDeEYsSUFaTyxJQWdCVi9HLE1BQVMsU0FBVTNILEVBQU00TyxFQUFNNUQsRUFBVWxOLEVBQU9FLEdBQy9DLEdBQUk2USxHQUFnQyxRQUF2QjdPLEVBQUtqRyxNQUFPLEVBQUcsR0FDM0IrVSxFQUErQixTQUFyQjlPLEVBQUtqRyxNQUFPLElBQ3RCZ1YsRUFBa0IsWUFBVEgsQ0FFVixPQUFpQixLQUFWOVEsR0FBd0IsSUFBVEUsRUFHckIsU0FBVWxDLEdBQ1QsUUFBU0EsRUFBS2UsWUFHZixTQUFVZixFQUFNckIsRUFBU2dILEdBQ3hCLEdBQUlxSSxHQUFPa0YsRUFBWTlELEVBQU1SLEVBQU11RSxFQUFXQyxFQUM3Q2xCLEVBQU1hLElBQVdDLEVBQVUsY0FBZ0Isa0JBQzNDMUQsRUFBU3RQLEVBQUtlLFdBQ2Q2QixFQUFPcVEsR0FBVWpULEVBQUs0RyxTQUFTQyxjQUMvQndNLEdBQVkxTixJQUFRc04sQ0FFckIsSUFBSzNELEVBQVMsQ0FHYixHQUFLeUQsRUFBUyxDQUNiLE1BQVFiLEVBQU0sQ0FDYjlDLEVBQU9wUCxDQUNQLE9BQVNvUCxFQUFPQSxFQUFNOEMsR0FDckIsR0FBS2UsRUFBUzdELEVBQUt4SSxTQUFTQyxnQkFBa0JqRSxFQUF5QixJQUFsQndNLEVBQUs1TyxTQUN6RCxPQUFPLENBSVQ0UyxHQUFRbEIsRUFBZSxTQUFUaE8sSUFBb0JrUCxHQUFTLGNBRTVDLE9BQU8sRUFNUixHQUhBQSxHQUFVSixFQUFVMUQsRUFBT08sV0FBYVAsRUFBT2dFLFdBRzFDTixHQUFXSyxFQUFXLENBRTFCSCxFQUFhNUQsRUFBUWxNLEtBQWNrTSxFQUFRbE0sT0FDM0M0SyxFQUFRa0YsRUFBWWhQLE9BQ3BCaVAsRUFBWW5GLEVBQU0sS0FBT3JFLEdBQVdxRSxFQUFNLEdBQzFDWSxFQUFPWixFQUFNLEtBQU9yRSxHQUFXcUUsRUFBTSxHQUNyQ29CLEVBQU8rRCxHQUFhN0QsRUFBT2hLLFdBQVk2TixFQUV2QyxPQUFTL0QsSUFBUytELEdBQWEvRCxHQUFRQSxFQUFNOEMsS0FHM0N0RCxFQUFPdUUsRUFBWSxJQUFNQyxFQUFNN0ksTUFHaEMsR0FBdUIsSUFBbEI2RSxFQUFLNU8sWUFBb0JvTyxHQUFRUSxJQUFTcFAsRUFBTyxDQUNyRGtULEVBQVloUCxJQUFXeUYsRUFBU3dKLEVBQVd2RSxFQUMzQyxZQUtJLElBQUt5RSxJQUFhckYsR0FBU2hPLEVBQU1vRCxLQUFjcEQsRUFBTW9ELFFBQWtCYyxLQUFXOEosRUFBTSxLQUFPckUsRUFDckdpRixFQUFPWixFQUFNLE9BS2IsT0FBU29CLElBQVMrRCxHQUFhL0QsR0FBUUEsRUFBTThDLEtBQzNDdEQsRUFBT3VFLEVBQVksSUFBTUMsRUFBTTdJLE1BRWhDLElBQU8wSSxFQUFTN0QsRUFBS3hJLFNBQVNDLGdCQUFrQmpFLEVBQXlCLElBQWxCd00sRUFBSzVPLGFBQXNCb08sSUFFNUV5RSxLQUNIakUsRUFBTWhNLEtBQWNnTSxFQUFNaE0sUUFBa0JjLElBQVd5RixFQUFTaUYsSUFHN0RRLElBQVNwUCxHQUNiLEtBUUosT0FEQTRPLElBQVExTSxFQUNEME0sSUFBUzVNLEdBQTRCLElBQWpCNE0sRUFBTzVNLEdBQWU0TSxFQUFPNU0sR0FBUyxLQUtyRTRKLE9BQVUsU0FBVTJILEVBQVFyRSxHQUszQixHQUFJdk4sR0FDSC9DLEVBQUtrSyxFQUFLZ0MsUUFBU3lJLElBQVl6SyxFQUFLMEssV0FBWUQsRUFBTzFNLGdCQUN0RCtGLEdBQU9oSSxNQUFPLHVCQUF5QjJPLEVBS3pDLE9BQUszVSxHQUFJd0UsR0FDRHhFLEVBQUlzUSxHQUlQdFEsRUFBR3VCLE9BQVMsR0FDaEJ3QixHQUFTNFIsRUFBUUEsRUFBUSxHQUFJckUsR0FDdEJwRyxFQUFLMEssV0FBV2pWLGVBQWdCZ1YsRUFBTzFNLGVBQzdDc0gsR0FBYSxTQUFVdEIsRUFBTXJELEdBQzVCLEdBQUlpSyxHQUNIQyxFQUFVOVUsRUFBSWlPLEVBQU1xQyxHQUNwQi9NLEVBQUl1UixFQUFRdlQsTUFDYixPQUFRZ0MsSUFDUHNSLEVBQU10VixFQUFRK0MsS0FBTTJMLEVBQU02RyxFQUFRdlIsSUFDbEMwSyxFQUFNNEcsS0FBV2pLLEVBQVNpSyxHQUFRQyxFQUFRdlIsTUFHNUMsU0FBVW5DLEdBQ1QsTUFBT3BCLEdBQUlvQixFQUFNLEVBQUcyQixLQUloQi9DLElBSVRrTSxTQUVDNkksSUFBT3hGLEdBQWEsU0FBVXpQLEdBSTdCLEdBQUkwUixNQUNIbkosS0FDQTJNLEVBQVUzSyxFQUFTdkssRUFBUzZFLFFBQVN3SCxFQUFPLE1BRTdDLE9BQU82SSxHQUFTeFEsR0FDZitLLEdBQWEsU0FBVXRCLEVBQU1yRCxFQUFTN0ssRUFBU2dILEdBQzlDLEdBQUkzRixHQUNINlQsRUFBWUQsRUFBUy9HLEVBQU0sS0FBTWxILE1BQ2pDeEQsRUFBSTBLLEVBQUsxTSxNQUdWLE9BQVFnQyxLQUNEbkMsRUFBTzZULEVBQVUxUixNQUN0QjBLLEVBQUsxSyxLQUFPcUgsRUFBUXJILEdBQUtuQyxNQUk1QixTQUFVQSxFQUFNckIsRUFBU2dILEdBR3hCLE1BRkF5SyxHQUFNLEdBQUtwUSxFQUNYNFQsRUFBU3hELEVBQU8sS0FBTXpLLEVBQUtzQixJQUNuQkEsRUFBUXNELFNBSW5CdUosSUFBTzNGLEdBQWEsU0FBVXpQLEdBQzdCLE1BQU8sVUFBVXNCLEdBQ2hCLE1BQU80TSxJQUFRbE8sRUFBVXNCLEdBQU9HLE9BQVMsS0FJM0NzSixTQUFZMEUsR0FBYSxTQUFVN0gsR0FDbEMsTUFBTyxVQUFVdEcsR0FDaEIsT0FBU0EsRUFBSzRSLGFBQWU1UixFQUFLK1QsV0FBYWhMLEVBQVMvSSxJQUFTN0IsUUFBU21JLEdBQVMsTUFXckYwTixLQUFRN0YsR0FBYyxTQUFVNkYsR0FNL0IsTUFKTTFJLEdBQVk1SyxLQUFLc1QsR0FBUSxLQUM5QnBILEdBQU9oSSxNQUFPLHFCQUF1Qm9QLEdBRXRDQSxFQUFPQSxFQUFLelEsUUFBUzZJLEdBQVdDLElBQVl4RixjQUNyQyxTQUFVN0csR0FDaEIsR0FBSWlVLEVBQ0osR0FDQyxJQUFNQSxFQUFXNUssRUFDaEJySixFQUFLZ1UsS0FDTGhVLEVBQUt1TixhQUFhLGFBQWV2TixFQUFLdU4sYUFBYSxRQUduRCxNQURBMEcsR0FBV0EsRUFBU3BOLGNBQ2JvTixJQUFhRCxHQUEyQyxJQUFuQ0MsRUFBUzlWLFFBQVM2VixFQUFPLFlBRTVDaFUsRUFBT0EsRUFBS2UsYUFBaUMsSUFBbEJmLEVBQUtRLFNBQzNDLFFBQU8sS0FLVHlDLE9BQVUsU0FBVWpELEdBQ25CLEdBQUlrVSxHQUFPdFgsRUFBT0ssVUFBWUwsRUFBT0ssU0FBU2lYLElBQzlDLE9BQU9BLElBQVFBLEVBQUtqVyxNQUFPLEtBQVErQixFQUFLbU4sSUFHekNnSCxLQUFRLFNBQVVuVSxHQUNqQixNQUFPQSxLQUFTN0MsR0FHakJpWCxNQUFTLFNBQVVwVSxHQUNsQixNQUFPQSxLQUFTOUMsRUFBU21YLGlCQUFtQm5YLEVBQVNvWCxVQUFZcFgsRUFBU29YLGdCQUFrQnRVLEVBQUtrRSxNQUFRbEUsRUFBS3VVLE9BQVN2VSxFQUFLd1UsV0FJN0hDLFFBQVcsU0FBVXpVLEdBQ3BCLE1BQU9BLEdBQUswVSxZQUFhLEdBRzFCQSxTQUFZLFNBQVUxVSxHQUNyQixNQUFPQSxHQUFLMFUsWUFBYSxHQUcxQkMsUUFBVyxTQUFVM1UsR0FHcEIsR0FBSTRHLEdBQVc1RyxFQUFLNEcsU0FBU0MsYUFDN0IsT0FBcUIsVUFBYkQsS0FBMEI1RyxFQUFLMlUsU0FBMEIsV0FBYi9OLEtBQTJCNUcsRUFBSzRVLFVBR3JGQSxTQUFZLFNBQVU1VSxHQU9yQixNQUpLQSxHQUFLZSxZQUNUZixFQUFLZSxXQUFXOFQsY0FHVjdVLEVBQUs0VSxZQUFhLEdBSTFCRSxNQUFTLFNBQVU5VSxHQU1sQixJQUFNQSxFQUFPQSxFQUFLNlAsV0FBWTdQLEVBQU1BLEVBQU9BLEVBQUs4TyxZQUMvQyxHQUFLOU8sRUFBSzRHLFNBQVcsS0FBeUIsSUFBbEI1RyxFQUFLUSxVQUFvQyxJQUFsQlIsRUFBS1EsU0FDdkQsT0FBTyxDQUdULFFBQU8sR0FHUjhPLE9BQVUsU0FBVXRQLEdBQ25CLE9BQVE4SSxFQUFLZ0MsUUFBZSxNQUFHOUssSUFJaEMrVSxPQUFVLFNBQVUvVSxHQUNuQixNQUFPa00sSUFBUXhMLEtBQU1WLEVBQUs0RyxXQUczQndKLE1BQVMsU0FBVXBRLEdBQ2xCLE1BQU9pTSxHQUFRdkwsS0FBTVYsRUFBSzRHLFdBRzNCb08sT0FBVSxTQUFVaFYsR0FDbkIsR0FBSTRDLEdBQU81QyxFQUFLNEcsU0FBU0MsYUFDekIsT0FBZ0IsVUFBVGpFLEdBQWtDLFdBQWQ1QyxFQUFLa0UsTUFBOEIsV0FBVHRCLEdBR3REMEQsS0FBUSxTQUFVdEcsR0FDakIsR0FBSWEsRUFHSixPQUF1QyxVQUFoQ2IsRUFBSzRHLFNBQVNDLGVBQ04sU0FBZDdHLEVBQUtrRSxPQUNtQyxPQUFyQ3JELEVBQU9iLEVBQUt1TixhQUFhLFVBQW9CMU0sRUFBS2dHLGdCQUFrQjdHLEVBQUtrRSxPQUk5RWxDLE1BQVNpTixHQUF1QixXQUMvQixPQUFTLEtBR1YvTSxLQUFRK00sR0FBdUIsU0FBVUUsRUFBY2hQLEdBQ3RELE9BQVNBLEVBQVMsS0FHbkI4QixHQUFNZ04sR0FBdUIsU0FBVUUsRUFBY2hQLEVBQVErTyxHQUM1RCxPQUFvQixFQUFYQSxFQUFlQSxFQUFXL08sRUFBUytPLEtBRzdDK0YsS0FBUWhHLEdBQXVCLFNBQVVFLEVBQWNoUCxHQUN0RCxHQUFJZ0MsR0FBSSxDQUNSLE1BQVloQyxFQUFKZ0MsRUFBWUEsR0FBSyxFQUN4QmdOLEVBQWFwUixLQUFNb0UsRUFFcEIsT0FBT2dOLEtBR1IrRixJQUFPakcsR0FBdUIsU0FBVUUsRUFBY2hQLEdBQ3JELEdBQUlnQyxHQUFJLENBQ1IsTUFBWWhDLEVBQUpnQyxFQUFZQSxHQUFLLEVBQ3hCZ04sRUFBYXBSLEtBQU1vRSxFQUVwQixPQUFPZ04sS0FHUmdHLEdBQU1sRyxHQUF1QixTQUFVRSxFQUFjaFAsRUFBUStPLEdBQzVELEdBQUkvTSxHQUFlLEVBQVgrTSxFQUFlQSxFQUFXL08sRUFBUytPLENBQzNDLFFBQVUvTSxHQUFLLEdBQ2RnTixFQUFhcFIsS0FBTW9FLEVBRXBCLE9BQU9nTixLQUdSaUcsR0FBTW5HLEdBQXVCLFNBQVVFLEVBQWNoUCxFQUFRK08sR0FDNUQsR0FBSS9NLEdBQWUsRUFBWCtNLEVBQWVBLEVBQVcvTyxFQUFTK08sQ0FDM0MsTUFBYy9PLElBQUpnQyxHQUNUZ04sRUFBYXBSLEtBQU1vRSxFQUVwQixPQUFPZ04sT0FLVnJHLEVBQUtnQyxRQUFhLElBQUloQyxFQUFLZ0MsUUFBWSxFQUd2QyxLQUFNM0ksS0FBT2tULE9BQU8sRUFBTUMsVUFBVSxFQUFNQyxNQUFNLEVBQU1DLFVBQVUsRUFBTUMsT0FBTyxHQUM1RTNNLEVBQUtnQyxRQUFTM0ksR0FBTTRNLEdBQW1CNU0sRUFFeEMsS0FBTUEsS0FBT3VULFFBQVEsRUFBTUMsT0FBTyxHQUNqQzdNLEVBQUtnQyxRQUFTM0ksR0FBTTZNLEdBQW9CN00sRUFJekMsU0FBU3FSLE9BQ1RBLEdBQVc1VCxVQUFZa0osRUFBSzhNLFFBQVU5TSxFQUFLZ0MsUUFDM0NoQyxFQUFLMEssV0FBYSxHQUFJQSxHQUV0QixTQUFTbEcsSUFBVTVPLEVBQVVtWCxHQUM1QixHQUFJbkMsR0FBUzNULEVBQU8rVixFQUFRNVIsRUFDM0I2UixFQUFPaEosRUFBUWlKLEVBQ2ZDLEVBQVNuTSxFQUFZcEwsRUFBVyxJQUVqQyxJQUFLdVgsRUFDSixNQUFPSixHQUFZLEVBQUlJLEVBQU9oWSxNQUFPLEVBR3RDOFgsR0FBUXJYLEVBQ1JxTyxLQUNBaUosRUFBYWxOLEVBQUt3SixTQUVsQixPQUFReUQsRUFBUSxHQUdUckMsSUFBWTNULEVBQVFrTCxFQUFPN0ssS0FBTTJWLE9BQ2pDaFcsSUFFSmdXLEVBQVFBLEVBQU05WCxNQUFPOEIsRUFBTSxHQUFHSSxTQUFZNFYsR0FFM0NoSixFQUFPaFAsS0FBTStYLE9BR2RwQyxHQUFVLEdBR0ozVCxFQUFRbUwsRUFBYTlLLEtBQU0yVixNQUNoQ3JDLEVBQVUzVCxFQUFNbU8sUUFDaEI0SCxFQUFPL1gsTUFDTitJLE1BQU80TSxFQUVQeFAsS0FBTW5FLEVBQU0sR0FBR3dELFFBQVN3SCxFQUFPLE9BRWhDZ0wsRUFBUUEsRUFBTTlYLE1BQU95VixFQUFRdlQsUUFJOUIsS0FBTStELElBQVE0RSxHQUFLa0gsU0FDWmpRLEVBQVF3TCxFQUFXckgsR0FBTzlELEtBQU0yVixLQUFjQyxFQUFZOVIsTUFDOURuRSxFQUFRaVcsRUFBWTlSLEdBQVFuRSxNQUM3QjJULEVBQVUzVCxFQUFNbU8sUUFDaEI0SCxFQUFPL1gsTUFDTitJLE1BQU80TSxFQUNQeFAsS0FBTUEsRUFDTnNGLFFBQVN6SixJQUVWZ1csRUFBUUEsRUFBTTlYLE1BQU95VixFQUFRdlQsUUFJL0IsS0FBTXVULEVBQ0wsTUFPRixNQUFPbUMsR0FDTkUsRUFBTTVWLE9BQ040VixFQUNDbkosR0FBT2hJLE1BQU9sRyxHQUVkb0wsRUFBWXBMLEVBQVVxTyxHQUFTOU8sTUFBTyxHQUd6QyxRQUFTd1AsSUFBWXFJLEdBQ3BCLEdBQUkzVCxHQUFJLEVBQ1BDLEVBQU0wVCxFQUFPM1YsT0FDYnpCLEVBQVcsRUFDWixNQUFZMEQsRUFBSkQsRUFBU0EsSUFDaEJ6RCxHQUFZb1gsRUFBTzNULEdBQUcyRSxLQUV2QixPQUFPcEksR0FHUixRQUFTd1gsSUFBZXRDLEVBQVN1QyxFQUFZQyxHQUM1QyxHQUFJbEUsR0FBTWlFLEVBQVdqRSxJQUNwQm1FLEVBQW1CRCxHQUFnQixlQUFSbEUsRUFDM0JvRSxFQUFXelUsR0FFWixPQUFPc1UsR0FBV25VLE1BRWpCLFNBQVVoQyxFQUFNckIsRUFBU2dILEdBQ3hCLE1BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsR0FBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLEVBQzNCLE1BQU96QyxHQUFTNVQsRUFBTXJCLEVBQVNnSCxJQU1sQyxTQUFVM0YsRUFBTXJCLEVBQVNnSCxHQUN4QixHQUFJWixHQUFNaUosRUFBT2tGLEVBQ2hCcUQsRUFBUzVNLEVBQVUsSUFBTTJNLENBRzFCLElBQUszUSxHQUNKLE1BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsSUFBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLElBQ3RCekMsRUFBUzVULEVBQU1yQixFQUFTZ0gsR0FDNUIsT0FBTyxNQUtWLE9BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsR0FBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLEVBRTNCLEdBREFuRCxFQUFhbFQsRUFBTW9ELEtBQWNwRCxFQUFNb0QsUUFDakM0SyxFQUFRa0YsRUFBWWhCLEtBQVVsRSxFQUFNLEtBQU91SSxHQUNoRCxJQUFNeFIsRUFBT2lKLEVBQU0sT0FBUSxHQUFRakosSUFBUzhELEVBQzNDLE1BQU85RCxNQUFTLE1BS2pCLElBRkFpSixFQUFRa0YsRUFBWWhCLElBQVVxRSxHQUM5QnZJLEVBQU0sR0FBSzRGLEVBQVM1VCxFQUFNckIsRUFBU2dILElBQVNrRCxFQUN2Q21GLEVBQU0sTUFBTyxFQUNqQixPQUFPLEdBU2YsUUFBU3dJLElBQWdCQyxHQUN4QixNQUFPQSxHQUFTdFcsT0FBUyxFQUN4QixTQUFVSCxFQUFNckIsRUFBU2dILEdBQ3hCLEdBQUl4RCxHQUFJc1UsRUFBU3RXLE1BQ2pCLE9BQVFnQyxJQUNQLElBQU1zVSxFQUFTdFUsR0FBSW5DLEVBQU1yQixFQUFTZ0gsR0FDakMsT0FBTyxDQUdULFFBQU8sR0FFUjhRLEVBQVMsR0FHWCxRQUFTQyxJQUFVN0MsRUFBV3ZSLEVBQUswTixFQUFRclIsRUFBU2dILEdBQ25ELEdBQUkzRixHQUNIMlcsS0FDQXhVLEVBQUksRUFDSkMsRUFBTXlSLEVBQVUxVCxPQUNoQnlXLEVBQWdCLE1BQVB0VSxDQUVWLE1BQVlGLEVBQUpELEVBQVNBLEtBQ1ZuQyxFQUFPNlQsRUFBVTFSLE9BQ2hCNk4sR0FBVUEsRUFBUWhRLEVBQU1yQixFQUFTZ0gsTUFDdENnUixFQUFhNVksS0FBTWlDLEdBQ2Q0VyxHQUNKdFUsRUFBSXZFLEtBQU1vRSxHQU1kLE9BQU93VSxHQUdSLFFBQVNFLElBQVl2RSxFQUFXNVQsRUFBVWtWLEVBQVNrRCxFQUFZQyxFQUFZQyxHQU8xRSxNQU5LRixLQUFlQSxFQUFZMVQsS0FDL0IwVCxFQUFhRCxHQUFZQyxJQUVyQkMsSUFBZUEsRUFBWTNULEtBQy9CMlQsRUFBYUYsR0FBWUUsRUFBWUMsSUFFL0I3SSxHQUFhLFNBQVV0QixFQUFNNUYsRUFBU3RJLEVBQVNnSCxHQUNyRCxHQUFJc1IsR0FBTTlVLEVBQUduQyxFQUNaa1gsS0FDQUMsS0FDQUMsRUFBY25RLEVBQVE5RyxPQUd0Qm1CLEVBQVF1TCxHQUFRd0ssR0FBa0IzWSxHQUFZLElBQUtDLEVBQVE2QixVQUFhN0IsR0FBWUEsTUFHcEYyWSxHQUFZaEYsSUFBZXpGLEdBQVNuTyxFQUVuQzRDLEVBREFvVixHQUFVcFYsRUFBTzRWLEVBQVE1RSxFQUFXM1QsRUFBU2dILEdBRzlDNFIsRUFBYTNELEVBRVptRCxJQUFnQmxLLEVBQU95RixFQUFZOEUsR0FBZU4sTUFNakQ3UCxFQUNEcVEsQ0FRRixJQUxLMUQsR0FDSkEsRUFBUzBELEVBQVdDLEVBQVk1WSxFQUFTZ0gsR0FJckNtUixFQUFhLENBQ2pCRyxFQUFPUCxHQUFVYSxFQUFZSixHQUM3QkwsRUFBWUcsS0FBVXRZLEVBQVNnSCxHQUcvQnhELEVBQUk4VSxFQUFLOVcsTUFDVCxPQUFRZ0MsS0FDRG5DLEVBQU9pWCxFQUFLOVUsTUFDakJvVixFQUFZSixFQUFRaFYsTUFBU21WLEVBQVdILEVBQVFoVixJQUFPbkMsSUFLMUQsR0FBSzZNLEdBQ0osR0FBS2tLLEdBQWN6RSxFQUFZLENBQzlCLEdBQUt5RSxFQUFhLENBRWpCRSxLQUNBOVUsRUFBSW9WLEVBQVdwWCxNQUNmLE9BQVFnQyxLQUNEbkMsRUFBT3VYLEVBQVdwVixLQUV2QjhVLEVBQUtsWixLQUFPdVosRUFBVW5WLEdBQUtuQyxFQUc3QitXLEdBQVksS0FBT1EsS0FBa0JOLEVBQU10UixHQUk1Q3hELEVBQUlvVixFQUFXcFgsTUFDZixPQUFRZ0MsS0FDRG5DLEVBQU91WCxFQUFXcFYsTUFDdEI4VSxFQUFPRixFQUFhNVksRUFBUStDLEtBQU0yTCxFQUFNN00sR0FBU2tYLEVBQU8vVSxJQUFNLEtBRS9EMEssRUFBS29LLEtBQVVoUSxFQUFRZ1EsR0FBUWpYLFNBT2xDdVgsR0FBYWIsR0FDWmEsSUFBZXRRLEVBQ2RzUSxFQUFXOVUsT0FBUTJVLEVBQWFHLEVBQVdwWCxRQUMzQ29YLEdBRUdSLEVBQ0pBLEVBQVksS0FBTTlQLEVBQVNzUSxFQUFZNVIsR0FFdkM1SCxFQUFLK0QsTUFBT21GLEVBQVNzUSxLQU16QixRQUFTQyxJQUFtQjFCLEdBQzNCLEdBQUkyQixHQUFjN0QsRUFBU3ZSLEVBQzFCRCxFQUFNMFQsRUFBTzNWLE9BQ2J1WCxFQUFrQjVPLEVBQUtrSixTQUFVOEQsRUFBTyxHQUFHNVIsTUFDM0N5VCxFQUFtQkQsR0FBbUI1TyxFQUFLa0osU0FBUyxLQUNwRDdQLEVBQUl1VixFQUFrQixFQUFJLEVBRzFCRSxFQUFlMUIsR0FBZSxTQUFVbFcsR0FDdkMsTUFBT0EsS0FBU3lYLEdBQ2RFLEdBQWtCLEdBQ3JCRSxFQUFrQjNCLEdBQWUsU0FBVWxXLEdBQzFDLE1BQU83QixHQUFRK0MsS0FBTXVXLEVBQWN6WCxHQUFTLElBQzFDMlgsR0FBa0IsR0FDckJsQixHQUFhLFNBQVV6VyxFQUFNckIsRUFBU2dILEdBQ3JDLE9BQVUrUixJQUFxQi9SLEdBQU9oSCxJQUFZdUssTUFDaER1TyxFQUFlOVksR0FBUzZCLFNBQ3hCb1gsRUFBYzVYLEVBQU1yQixFQUFTZ0gsR0FDN0JrUyxFQUFpQjdYLEVBQU1yQixFQUFTZ0gsS0FHcEMsTUFBWXZELEVBQUpELEVBQVNBLElBQ2hCLEdBQU15UixFQUFVOUssRUFBS2tKLFNBQVU4RCxFQUFPM1QsR0FBRytCLE1BQ3hDdVMsR0FBYVAsR0FBY00sR0FBZ0JDLEdBQVk3QyxRQUNqRCxDQUlOLEdBSEFBLEVBQVU5SyxFQUFLa0gsT0FBUThGLEVBQU8zVCxHQUFHK0IsTUFBT3BDLE1BQU8sS0FBTWdVLEVBQU8zVCxHQUFHcUgsU0FHMURvSyxFQUFTeFEsR0FBWSxDQUd6QixJQURBZixJQUFNRixFQUNNQyxFQUFKQyxFQUFTQSxJQUNoQixHQUFLeUcsRUFBS2tKLFNBQVU4RCxFQUFPelQsR0FBRzZCLE1BQzdCLEtBR0YsT0FBTzJTLElBQ04xVSxFQUFJLEdBQUtxVSxHQUFnQkMsR0FDekJ0VSxFQUFJLEdBQUtzTCxHQUVScUksRUFBTzdYLE1BQU8sRUFBR2tFLEVBQUksR0FBSXRFLFFBQVNpSixNQUFnQyxNQUF6QmdQLEVBQVEzVCxFQUFJLEdBQUkrQixLQUFlLElBQU0sTUFDN0VYLFFBQVN3SCxFQUFPLE1BQ2xCNkksRUFDSXZSLEVBQUpGLEdBQVNxVixHQUFtQjFCLEVBQU83WCxNQUFPa0UsRUFBR0UsSUFDekNELEVBQUpDLEdBQVdtVixHQUFvQjFCLEVBQVNBLEVBQU83WCxNQUFPb0UsSUFDbERELEVBQUpDLEdBQVdvTCxHQUFZcUksSUFHekJXLEVBQVMxWSxLQUFNNlYsR0FJakIsTUFBTzRDLElBQWdCQyxHQUd4QixRQUFTcUIsSUFBMEJDLEVBQWlCQyxHQUVuRCxHQUFJQyxHQUFvQixFQUN2QkMsRUFBUUYsRUFBWTdYLE9BQVMsRUFDN0JnWSxFQUFZSixFQUFnQjVYLE9BQVMsRUFDckNpWSxFQUFlLFNBQVV2TCxFQUFNbE8sRUFBU2dILEVBQUtzQixFQUFTb1IsR0FDckQsR0FBSXJZLEdBQU1xQyxFQUFHdVIsRUFDWjBFLEtBQ0FDLEVBQWUsRUFDZnBXLEVBQUksSUFDSjBSLEVBQVloSCxNQUNaMkwsRUFBNkIsTUFBakJILEVBQ1pJLEVBQWdCdlAsRUFFaEI1SCxFQUFRdUwsR0FBUXNMLEdBQWFyUCxFQUFLekksS0FBVSxJQUFHLElBQUtnWSxHQUFpQjFaLEVBQVFvQyxZQUFjcEMsR0FFM0YrWixFQUFpQi9PLEdBQTRCLE1BQWpCOE8sRUFBd0IsRUFBSXBWLEtBQUtDLFVBQVksRUFTMUUsS0FQS2tWLElBQ0p0UCxFQUFtQnZLLElBQVl6QixHQUFZeUIsRUFDM0NrSyxFQUFhb1AsR0FLZSxPQUFwQmpZLEVBQU9zQixFQUFNYSxJQUFhQSxJQUFNLENBQ3hDLEdBQUtnVyxHQUFhblksRUFBTyxDQUN4QnFDLEVBQUksQ0FDSixPQUFTdVIsRUFBVW1FLEVBQWdCMVYsS0FDbEMsR0FBS3VSLEVBQVM1VCxFQUFNckIsRUFBU2dILEdBQVEsQ0FDcENzQixFQUFRbEosS0FBTWlDLEVBQ2QsT0FHR3dZLElBQ0o3TyxFQUFVK08sRUFDVjdQLElBQWVvUCxHQUtaQyxLQUVFbFksR0FBUTRULEdBQVc1VCxJQUN4QnVZLElBSUkxTCxHQUNKZ0gsRUFBVTlWLEtBQU1pQyxJQU9uQixHQURBdVksR0FBZ0JwVyxFQUNYK1YsR0FBUy9WLElBQU1vVyxFQUFlLENBQ2xDbFcsRUFBSSxDQUNKLE9BQVN1UixFQUFVb0UsRUFBWTNWLEtBQzlCdVIsRUFBU0MsRUFBV3lFLEVBQVkzWixFQUFTZ0gsRUFHMUMsSUFBS2tILEVBQU8sQ0FFWCxHQUFLMEwsRUFBZSxFQUNuQixNQUFRcFcsSUFDQTBSLEVBQVUxUixJQUFNbVcsRUFBV25XLEtBQ2pDbVcsRUFBV25XLEdBQUtvSSxFQUFJckosS0FBTStGLEdBTTdCcVIsR0FBYTVCLEdBQVU0QixHQUl4QnZhLEVBQUsrRCxNQUFPbUYsRUFBU3FSLEdBR2hCRSxJQUFjM0wsR0FBUXlMLEVBQVduWSxPQUFTLEdBQzVDb1ksRUFBZVAsRUFBWTdYLE9BQVcsR0FFeEN5TSxHQUFPNEUsV0FBWXZLLEdBVXJCLE1BTEt1UixLQUNKN08sRUFBVStPLEVBQ1Z4UCxFQUFtQnVQLEdBR2I1RSxFQUdULE9BQU9xRSxHQUNOL0osR0FBY2lLLEdBQ2RBLEVBR0ZuUCxFQUFVMkQsR0FBTzNELFFBQVUsU0FBVXZLLEVBQVVpYSxHQUM5QyxHQUFJeFcsR0FDSDZWLEtBQ0FELEtBQ0E5QixFQUFTbE0sRUFBZXJMLEVBQVcsSUFFcEMsS0FBTXVYLEVBQVMsQ0FFUjBDLElBQ0xBLEVBQVFyTCxHQUFVNU8sSUFFbkJ5RCxFQUFJd1csRUFBTXhZLE1BQ1YsT0FBUWdDLElBQ1A4VCxFQUFTdUIsR0FBbUJtQixFQUFNeFcsSUFDN0I4VCxFQUFRN1MsR0FDWjRVLEVBQVlqYSxLQUFNa1ksR0FFbEI4QixFQUFnQmhhLEtBQU1rWSxFQUt4QkEsR0FBU2xNLEVBQWVyTCxFQUFVb1osR0FBMEJDLEVBQWlCQyxJQUU5RSxNQUFPL0IsR0FHUixTQUFTb0IsSUFBa0IzWSxFQUFVa2EsRUFBVTNSLEdBQzlDLEdBQUk5RSxHQUFJLEVBQ1BDLEVBQU13VyxFQUFTelksTUFDaEIsTUFBWWlDLEVBQUpELEVBQVNBLElBQ2hCeUssR0FBUWxPLEVBQVVrYSxFQUFTelcsR0FBSThFLEVBRWhDLE9BQU9BLEdBR1IsUUFBUzZHLElBQVFwUCxFQUFVQyxFQUFTc0ksRUFBUzRGLEdBQzVDLEdBQUkxSyxHQUFHMlQsRUFBUStDLEVBQU8zVSxFQUFNN0QsRUFDM0JOLEVBQVF1TixHQUFVNU8sRUFFbkIsS0FBTW1PLEdBRWlCLElBQWpCOU0sRUFBTUksT0FBZSxDQUl6QixHQURBMlYsRUFBUy9WLEVBQU0sR0FBS0EsRUFBTSxHQUFHOUIsTUFBTyxHQUMvQjZYLEVBQU8zVixPQUFTLEdBQWtDLFFBQTVCMFksRUFBUS9DLEVBQU8sSUFBSTVSLE1BQzVDMEUsRUFBUWtILFNBQWdDLElBQXJCblIsRUFBUTZCLFVBQWtCNkksR0FDN0NQLEVBQUtrSixTQUFVOEQsRUFBTyxHQUFHNVIsTUFBUyxDQUduQyxHQURBdkYsR0FBWW1LLEVBQUt6SSxLQUFTLEdBQUd3WSxFQUFNclAsUUFBUSxHQUFHakcsUUFBUTZJLEdBQVdDLElBQVkxTixRQUFrQixJQUN6RkEsRUFDTCxNQUFPc0ksRUFFUnZJLEdBQVdBLEVBQVNULE1BQU82WCxFQUFPNUgsUUFBUXBILE1BQU0zRyxRQUlqRGdDLEVBQUlvSixFQUF3QixhQUFFN0ssS0FBTWhDLEdBQWEsRUFBSW9YLEVBQU8zVixNQUM1RCxPQUFRZ0MsSUFBTSxDQUliLEdBSEEwVyxFQUFRL0MsRUFBTzNULEdBR1YyRyxFQUFLa0osU0FBVzlOLEVBQU8yVSxFQUFNM1UsTUFDakMsS0FFRCxLQUFNN0QsRUFBT3lJLEVBQUt6SSxLQUFNNkQsTUFFakIySSxFQUFPeE0sRUFDWndZLEVBQU1yUCxRQUFRLEdBQUdqRyxRQUFTNkksR0FBV0MsSUFDckNsQixFQUFTekssS0FBTW9WLEVBQU8sR0FBRzVSLE9BQVV2RixFQUFRb0MsWUFBY3BDLElBQ3JELENBS0osR0FGQW1YLEVBQU9yVCxPQUFRTixFQUFHLEdBQ2xCekQsRUFBV21PLEVBQUsxTSxRQUFVc04sR0FBWXFJLElBQ2hDcFgsRUFFTCxNQURBWCxHQUFLK0QsTUFBT21GLEVBQVM0RixHQUNkNUYsQ0FHUixTQWdCTCxNQVBBZ0MsR0FBU3ZLLEVBQVVxQixHQUNsQjhNLEVBQ0FsTyxHQUNDMEssRUFDRHBDLEVBQ0FrRSxFQUFTekssS0FBTWhDLElBRVR1SSxFQU1SMkIsRUFBUStJLFdBQWF2TyxFQUFRdUYsTUFBTSxJQUFJbkcsS0FBTXlILEdBQVl5RCxLQUFLLE1BQVF0SyxFQUl0RXdGLEVBQVE4SSxpQkFBbUIxSCxFQUczQlosSUFJQVIsRUFBUW1JLGFBQWUzQyxHQUFPLFNBQVUwSyxHQUV2QyxNQUF1RSxHQUFoRUEsRUFBS25JLHdCQUF5QnpULEVBQVNpSSxjQUFjLFVBTXZEaUosR0FBTyxTQUFVQyxHQUV0QixNQURBQSxHQUFJdUIsVUFBWSxtQkFDK0IsTUFBeEN2QixFQUFJd0IsV0FBV3RDLGFBQWEsV0FFbkNlLEdBQVcseUJBQTBCLFNBQVV0TyxFQUFNNEMsRUFBTW9HLEdBQzFELE1BQU1BLEdBQU4sVUFDUWhKLEVBQUt1TixhQUFjM0ssRUFBNkIsU0FBdkJBLEVBQUtpRSxjQUEyQixFQUFJLEtBT2pFK0IsRUFBUWlDLFlBQWV1RCxHQUFPLFNBQVVDLEdBRzdDLE1BRkFBLEdBQUl1QixVQUFZLFdBQ2hCdkIsRUFBSXdCLFdBQVdyQyxhQUFjLFFBQVMsSUFDWSxLQUEzQ2EsRUFBSXdCLFdBQVd0QyxhQUFjLFlBRXBDZSxHQUFXLFFBQVMsU0FBVXRPLEVBQU00QyxFQUFNb0csR0FDekMsTUFBTUEsSUFBeUMsVUFBaENoSixFQUFLNEcsU0FBU0MsY0FBN0IsVUFDUTdHLEVBQUsrWSxlQU9UM0ssR0FBTyxTQUFVQyxHQUN0QixNQUF1QyxPQUFoQ0EsRUFBSWQsYUFBYSxlQUV4QmUsR0FBVzdELEVBQVUsU0FBVXpLLEVBQU00QyxFQUFNb0csR0FDMUMsR0FBSXNJLEVBQ0osT0FBTXRJLEdBQU4sV0FDU3NJLEVBQU10UixFQUFLa1EsaUJBQWtCdE4sS0FBVzBPLEVBQUlDLFVBQ25ERCxFQUFJeEssTUFDSjlHLEVBQU00QyxNQUFXLEVBQU9BLEVBQUtpRSxjQUFnQixPQUtqRHZKLEVBQU8rQyxLQUFPdU0sR0FDZHRQLEVBQU84VCxLQUFPeEUsR0FBT2tGLFVBQ3JCeFUsRUFBTzhULEtBQUssS0FBTzlULEVBQU84VCxLQUFLdEcsUUFDL0J4TixFQUFPMGIsT0FBU3BNLEdBQU80RSxXQUN2QmxVLEVBQU9nSixLQUFPc0csR0FBTzdELFFBQ3JCekwsRUFBTzJiLFNBQVdyTSxHQUFPNUQsTUFDekIxTCxFQUFPbU0sU0FBV21ELEdBQU9uRCxVQUdyQjdNLEVBRUosSUFBSXNjLEtBR0osU0FBU0MsR0FBZXhXLEdBQ3ZCLEdBQUl5VyxHQUFTRixFQUFjdlcsS0FJM0IsT0FIQXJGLEdBQU9tRSxLQUFNa0IsRUFBUTVDLE1BQU9mLE9BQXdCLFNBQVVzTixFQUFHK00sR0FDaEVELEVBQVFDLElBQVMsSUFFWEQsRUF5QlI5YixFQUFPZ2MsVUFBWSxTQUFVM1csR0FJNUJBLEVBQTZCLGdCQUFaQSxHQUNkdVcsRUFBY3ZXLElBQWF3VyxFQUFleFcsR0FDNUNyRixFQUFPb0YsVUFBWUMsRUFFcEIsSUFDQzRXLEdBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEtBRUFDLEdBQVNuWCxFQUFRb1gsU0FFakJDLEVBQU8sU0FBVWpWLEdBT2hCLElBTkF3VSxFQUFTNVcsRUFBUTRXLFFBQVV4VSxFQUMzQnlVLEdBQVEsRUFDUkksRUFBY0YsR0FBZSxFQUM3QkEsRUFBYyxFQUNkQyxFQUFlRSxFQUFLMVosT0FDcEJzWixHQUFTLEVBQ0RJLEdBQXNCRixFQUFkQyxFQUE0QkEsSUFDM0MsR0FBS0MsRUFBTUQsR0FBYzlYLE1BQU9pRCxFQUFNLEdBQUtBLEVBQU0sT0FBVSxHQUFTcEMsRUFBUXNYLFlBQWMsQ0FDekZWLEdBQVMsQ0FDVCxPQUdGRSxHQUFTLEVBQ0pJLElBQ0NDLEVBQ0NBLEVBQU0zWixRQUNWNlosRUFBTUYsRUFBTTVMLFNBRUZxTCxFQUNYTSxLQUVBSyxFQUFLQyxZQUtSRCxHQUVDRSxJQUFLLFdBQ0osR0FBS1AsRUFBTyxDQUVYLEdBQUl6RyxHQUFReUcsRUFBSzFaLFFBQ2pCLFFBQVVpYSxHQUFLelksR0FDZHJFLEVBQU9tRSxLQUFNRSxFQUFNLFNBQVUySyxFQUFHN0UsR0FDL0IsR0FBSXZELEdBQU81RyxFQUFPNEcsS0FBTXVELEVBQ1YsY0FBVHZELEVBQ0V2QixFQUFRcVcsUUFBV2tCLEVBQUtwRyxJQUFLck0sSUFDbENvUyxFQUFLOWIsS0FBTTBKLEdBRURBLEdBQU9BLEVBQUl0SCxRQUFtQixXQUFUK0QsR0FFaENrVyxFQUFLM1MsT0FHSjFGLFdBR0MwWCxFQUNKRSxFQUFlRSxFQUFLMVosT0FHVG9aLElBQ1hHLEVBQWN0RyxFQUNkNEcsRUFBTVQsSUFHUixNQUFPdFosT0FHUm9GLE9BQVEsV0FrQlAsTUFqQkt3VSxJQUNKdmMsRUFBT21FLEtBQU1NLFVBQVcsU0FBVXVLLEVBQUc3RSxHQUNwQyxHQUFJNFMsRUFDSixRQUFTQSxFQUFRL2MsRUFBTzZKLFFBQVNNLEVBQUtvUyxFQUFNUSxJQUFZLEdBQ3ZEUixFQUFLcFgsT0FBUTRYLEVBQU8sR0FFZlosSUFDVUUsR0FBVFUsR0FDSlYsSUFFYUMsR0FBVFMsR0FDSlQsT0FNRTNaLE1BSVI2VCxJQUFLLFNBQVVsVixHQUNkLE1BQU9BLEdBQUt0QixFQUFPNkosUUFBU3ZJLEVBQUlpYixHQUFTLE1BQVNBLElBQVFBLEVBQUsxWixTQUdoRTJVLE1BQU8sV0FHTixNQUZBK0UsTUFDQUYsRUFBZSxFQUNSMVosTUFHUmthLFFBQVMsV0FFUixNQURBTixHQUFPQyxFQUFRUCxFQUFTMWMsVUFDakJvRCxNQUdSeVUsU0FBVSxXQUNULE9BQVFtRixHQUdUUyxLQUFNLFdBS0wsTUFKQVIsR0FBUWpkLFVBQ0YwYyxHQUNMVyxFQUFLQyxVQUVDbGEsTUFHUnNhLE9BQVEsV0FDUCxPQUFRVCxHQUdUVSxTQUFVLFNBQVU3YixFQUFTZ0QsR0FVNUIsT0FUS2tZLEdBQVdMLElBQVNNLElBQ3hCblksRUFBT0EsTUFDUEEsR0FBU2hELEVBQVNnRCxFQUFLMUQsTUFBUTBELEVBQUsxRCxRQUFVMEQsR0FDekM4WCxFQUNKSyxFQUFNL2IsS0FBTTRELEdBRVpxWSxFQUFNclksSUFHRDFCLE1BR1IrWixLQUFNLFdBRUwsTUFEQUUsR0FBS00sU0FBVXZhLEtBQU04QixXQUNkOUIsTUFHUnVaLE1BQU8sV0FDTixRQUFTQSxHQUlaLE9BQU9VLElBRVI1YyxFQUFPb0YsUUFFTjZGLFNBQVUsU0FBVWtTLEdBQ25CLEdBQUlDLEtBRUEsVUFBVyxPQUFRcGQsRUFBT2djLFVBQVUsZUFBZ0IsYUFDcEQsU0FBVSxPQUFRaGMsRUFBT2djLFVBQVUsZUFBZ0IsYUFDbkQsU0FBVSxXQUFZaGMsRUFBT2djLFVBQVUsWUFFMUNxQixFQUFRLFVBQ1IvWSxHQUNDK1ksTUFBTyxXQUNOLE1BQU9BLElBRVJDLE9BQVEsV0FFUCxNQURBQyxHQUFTaFosS0FBTUUsV0FBWStZLEtBQU0vWSxXQUMxQjlCLE1BRVI4YSxLQUFNLFdBQ0wsR0FBSUMsR0FBTWpaLFNBQ1YsT0FBT3pFLEdBQU9pTCxTQUFTLFNBQVUwUyxHQUNoQzNkLEVBQU9tRSxLQUFNaVosRUFBUSxTQUFVdlksRUFBRytZLEdBQ2pDLEdBQUlDLEdBQVNELEVBQU8sR0FDbkJ0YyxFQUFLdEIsRUFBT3NELFdBQVlvYSxFQUFLN1ksS0FBUzZZLEVBQUs3WSxFQUU1QzBZLEdBQVVLLEVBQU0sSUFBSyxXQUNwQixHQUFJRSxHQUFXeGMsR0FBTUEsRUFBR2tELE1BQU83QixLQUFNOEIsVUFDaENxWixJQUFZOWQsRUFBT3NELFdBQVl3YSxFQUFTeFosU0FDNUN3WixFQUFTeFosVUFDUEMsS0FBTW9aLEVBQVNJLFNBQ2ZQLEtBQU1HLEVBQVNLLFFBQ2ZDLFNBQVVOLEVBQVNPLFFBRXJCUCxFQUFVRSxFQUFTLFFBQVVsYixPQUFTMkIsRUFBVXFaLEVBQVNyWixVQUFZM0IsS0FBTXJCLEdBQU93YyxHQUFhclosZUFJbEdpWixFQUFNLE9BQ0pwWixXQUlKQSxRQUFTLFNBQVVxQyxHQUNsQixNQUFjLE9BQVBBLEVBQWMzRyxFQUFPb0YsT0FBUXVCLEVBQUtyQyxHQUFZQSxJQUd2RGlaLElBd0NELE9BckNBalosR0FBUTZaLEtBQU83WixFQUFRbVosS0FHdkJ6ZCxFQUFPbUUsS0FBTWlaLEVBQVEsU0FBVXZZLEVBQUcrWSxHQUNqQyxHQUFJckIsR0FBT3FCLEVBQU8sR0FDakJRLEVBQWNSLEVBQU8sRUFHdEJ0WixHQUFTc1osRUFBTSxJQUFPckIsRUFBS08sSUFHdEJzQixHQUNKN0IsRUFBS08sSUFBSSxXQUVSTyxFQUFRZSxHQUdOaEIsRUFBWSxFQUFKdlksR0FBUyxHQUFJZ1ksUUFBU08sRUFBUSxHQUFLLEdBQUlKLE1BSW5ETyxFQUFVSyxFQUFNLElBQU8sV0FFdEIsTUFEQUwsR0FBVUssRUFBTSxHQUFLLFFBQVVqYixPQUFTNGEsRUFBV2paLEVBQVUzQixLQUFNOEIsV0FDNUQ5QixNQUVSNGEsRUFBVUssRUFBTSxHQUFLLFFBQVdyQixFQUFLVyxXQUl0QzVZLEVBQVFBLFFBQVNpWixHQUdaSixHQUNKQSxFQUFLdlosS0FBTTJaLEVBQVVBLEdBSWZBLEdBSVJjLEtBQU0sU0FBVUMsR0FDZixHQUFJelosR0FBSSxFQUNQMFosRUFBZ0I3ZCxFQUFXa0QsS0FBTWEsV0FDakM1QixFQUFTMGIsRUFBYzFiLE9BR3ZCMmIsRUFBdUIsSUFBWDNiLEdBQWtCeWIsR0FBZXRlLEVBQU9zRCxXQUFZZ2IsRUFBWWhhLFNBQWN6QixFQUFTLEVBR25HMGEsRUFBeUIsSUFBZGlCLEVBQWtCRixFQUFjdGUsRUFBT2lMLFdBR2xEd1QsRUFBYSxTQUFVNVosRUFBR3lXLEVBQVVvRCxHQUNuQyxNQUFPLFVBQVVsVixHQUNoQjhSLEVBQVV6VyxHQUFNbEMsS0FDaEIrYixFQUFRN1osR0FBTUosVUFBVTVCLE9BQVMsRUFBSW5DLEVBQVdrRCxLQUFNYSxXQUFjK0UsRUFDaEVrVixJQUFXQyxFQUNkcEIsRUFBU3FCLFdBQVl0RCxFQUFVb0QsS0FDZkYsR0FDaEJqQixFQUFTL1csWUFBYThVLEVBQVVvRCxLQUtuQ0MsRUFBZ0JFLEVBQWtCQyxDQUduQyxJQUFLamMsRUFBUyxFQUliLElBSEE4YixFQUFxQjlYLE1BQU9oRSxHQUM1QmdjLEVBQXVCaFksTUFBT2hFLEdBQzlCaWMsRUFBc0JqWSxNQUFPaEUsR0FDakJBLEVBQUpnQyxFQUFZQSxJQUNkMFosRUFBZTFaLElBQU83RSxFQUFPc0QsV0FBWWliLEVBQWUxWixHQUFJUCxTQUNoRWlhLEVBQWUxWixHQUFJUCxVQUNqQkMsS0FBTWthLEVBQVk1WixFQUFHaWEsRUFBaUJQLElBQ3RDZixLQUFNRCxFQUFTUyxRQUNmQyxTQUFVUSxFQUFZNVosRUFBR2dhLEVBQWtCRixNQUUzQ0gsQ0FVTCxPQUpNQSxJQUNMakIsRUFBUy9XLFlBQWFzWSxFQUFpQlAsR0FHakNoQixFQUFTalosYUFHbEJ0RSxFQUFPc0wsUUFBVSxTQUFXQSxHQUMzQixHQUFJd0gsR0FBUWxULEVBQVNpSSxjQUFjLFNBQ2xDa1gsRUFBV25mLEVBQVNvZix5QkFDcEJqTyxFQUFNblIsRUFBU2lJLGNBQWMsT0FDN0IySSxFQUFTNVEsRUFBU2lJLGNBQWMsVUFDaENvWCxFQUFNek8sRUFBT3RILFlBQWF0SixFQUFTaUksY0FBYyxVQUdsRCxPQUFNaUwsR0FBTWxNLE1BSVprTSxFQUFNbE0sS0FBTyxXQUliMEUsRUFBUTRULFFBQTBCLEtBQWhCcE0sRUFBTXRKLE1BSXhCOEIsRUFBUTZULFlBQWNGLEVBQUkzSCxTQUcxQmhNLEVBQVE4VCxxQkFBc0IsRUFDOUI5VCxFQUFRK1QsbUJBQW9CLEVBQzVCL1QsRUFBUWdVLGVBQWdCLEVBSXhCeE0sRUFBTXVFLFNBQVUsRUFDaEIvTCxFQUFRaVUsZUFBaUJ6TSxFQUFNME0sV0FBVyxHQUFPbkksUUFJakQ3RyxFQUFPNEcsVUFBVyxFQUNsQjlMLEVBQVFtVSxhQUFlUixFQUFJN0gsU0FJM0J0RSxFQUFRbFQsRUFBU2lJLGNBQWMsU0FDL0JpTCxFQUFNdEosTUFBUSxJQUNkc0osRUFBTWxNLEtBQU8sUUFDYjBFLEVBQVFvVSxXQUE2QixNQUFoQjVNLEVBQU10SixNQUczQnNKLEVBQU01QyxhQUFjLFVBQVcsS0FDL0I0QyxFQUFNNUMsYUFBYyxPQUFRLEtBRTVCNk8sRUFBUzdWLFlBQWE0SixHQUl0QnhILEVBQVFxVSxXQUFhWixFQUFTUyxXQUFXLEdBQU9BLFdBQVcsR0FBT3hKLFVBQVVxQixRQUk1RS9MLEVBQVFzVSxlQUFpQixhQUFldGdCLEdBRXhDeVIsRUFBSS9GLE1BQU02VSxlQUFpQixjQUMzQjlPLEVBQUl5TyxXQUFXLEdBQU94VSxNQUFNNlUsZUFBaUIsR0FDN0N2VSxFQUFRd1UsZ0JBQStDLGdCQUE3Qi9PLEVBQUkvRixNQUFNNlUsZUFHcEM3ZixFQUFPLFdBQ04sR0FBSStmLEdBQVdDLEVBRWRDLEVBQVcsOEhBQ1hDLEVBQU90Z0IsRUFBUzZJLHFCQUFxQixRQUFTLEVBRXpDeVgsS0FLTkgsRUFBWW5nQixFQUFTaUksY0FBYyxPQUNuQ2tZLEVBQVUvVSxNQUFNbVYsUUFBVSxnRkFHMUJELEVBQUtoWCxZQUFhNlcsR0FBWTdXLFlBQWE2SCxHQUMzQ0EsRUFBSXVCLFVBQVksR0FFaEJ2QixFQUFJL0YsTUFBTW1WLFFBQVUsdUtBSXBCbmdCLEVBQU84SyxLQUFNb1YsRUFBeUIsTUFBbkJBLEVBQUtsVixNQUFNb1YsTUFBaUJBLEtBQU0sTUFBVSxXQUM5RDlVLEVBQVErVSxVQUFnQyxJQUFwQnRQLEVBQUl1UCxjQUlwQmhoQixFQUFPaWhCLG1CQUNYalYsRUFBUWdVLGNBQXVFLFFBQXJEaGdCLEVBQU9paEIsaUJBQWtCeFAsRUFBSyxXQUFlb0IsSUFDdkU3RyxFQUFRK1Qsa0JBQTJGLFNBQXJFL2YsRUFBT2loQixpQkFBa0J4UCxFQUFLLFFBQVl5UCxNQUFPLFFBQVVBLE1BTXpGUixFQUFZalAsRUFBSTdILFlBQWF0SixFQUFTaUksY0FBYyxRQUNwRG1ZLEVBQVVoVixNQUFNbVYsUUFBVXBQLEVBQUkvRixNQUFNbVYsUUFBVUYsRUFDOUNELEVBQVVoVixNQUFNeVYsWUFBY1QsRUFBVWhWLE1BQU13VixNQUFRLElBQ3REelAsRUFBSS9GLE1BQU13VixNQUFRLE1BRWxCbFYsRUFBUThULHFCQUNOblksWUFBYzNILEVBQU9paEIsaUJBQWtCUCxFQUFXLFdBQWVTLGNBR3BFUCxFQUFLL1csWUFBYTRXLE1BR1p6VSxHQXJHQ0EsTUFtSFQsSUFBSW9WLEdBQVdDLEVBQ2RDLEVBQVMsK0JBQ1RDLEVBQWEsVUFFZCxTQUFTQyxLQUlSbFgsT0FBT21YLGVBQWdCcGUsS0FBSytOLFNBQVksR0FDdkM3TSxJQUFLLFdBQ0osWUFJRmxCLEtBQUttRCxRQUFVOUYsRUFBTzhGLFFBQVVDLEtBQUtDLFNBR3RDOGEsRUFBS0UsSUFBTSxFQUVYRixFQUFLRyxRQUFVLFNBQVVDLEdBT3hCLE1BQU9BLEdBQU1oZSxTQUNPLElBQW5CZ2UsRUFBTWhlLFVBQXFDLElBQW5CZ2UsRUFBTWhlLFVBQWlCLEdBR2pENGQsRUFBS3hlLFdBQ0ppSSxJQUFLLFNBQVUyVyxHQUlkLElBQU1KLEVBQUtHLFFBQVNDLEdBQ25CLE1BQU8sRUFHUixJQUFJQyxNQUVIQyxFQUFTRixFQUFPdmUsS0FBS21ELFFBR3RCLEtBQU1zYixFQUFTLENBQ2RBLEVBQVNOLEVBQUtFLEtBR2QsS0FDQ0csRUFBWXhlLEtBQUttRCxVQUFjMEQsTUFBTzRYLEdBQ3RDeFgsT0FBT3lYLGlCQUFrQkgsRUFBT0MsR0FJL0IsTUFBUS9aLEdBQ1QrWixFQUFZeGUsS0FBS21ELFNBQVlzYixFQUM3QnBoQixFQUFPb0YsT0FBUThiLEVBQU9DLElBU3hCLE1BSk14ZSxNQUFLK04sTUFBTzBRLEtBQ2pCemUsS0FBSytOLE1BQU8wUSxPQUdOQSxHQUVSRSxJQUFLLFNBQVVKLEVBQU96WixFQUFNK0IsR0FDM0IsR0FBSStYLEdBSUhILEVBQVN6ZSxLQUFLNEgsSUFBSzJXLEdBQ25CeFEsRUFBUS9OLEtBQUsrTixNQUFPMFEsRUFHckIsSUFBcUIsZ0JBQVQzWixHQUNYaUosRUFBT2pKLEdBQVMrQixNQUtoQixJQUFLeEosRUFBT3FILGNBQWVxSixHQUMxQjFRLEVBQU9vRixPQUFRekMsS0FBSytOLE1BQU8wUSxHQUFVM1osT0FHckMsS0FBTThaLElBQVE5WixHQUNiaUosRUFBTzZRLEdBQVM5WixFQUFNOFosRUFJekIsT0FBTzdRLElBRVI3TSxJQUFLLFNBQVVxZCxFQUFPM1csR0FLckIsR0FBSW1HLEdBQVEvTixLQUFLK04sTUFBTy9OLEtBQUs0SCxJQUFLMlcsR0FFbEMsT0FBTzNXLEtBQVFoTCxVQUNkbVIsRUFBUUEsRUFBT25HLElBRWpCRCxPQUFRLFNBQVU0VyxFQUFPM1csRUFBS2YsR0FDN0IsR0FBSWdZLEVBWUosT0FBS2pYLEtBQVFoTCxXQUNUZ0wsR0FBc0IsZ0JBQVJBLElBQXFCZixJQUFVakssV0FFaERpaUIsRUFBUzdlLEtBQUtrQixJQUFLcWQsRUFBTzNXLEdBRW5CaVgsSUFBV2ppQixVQUNqQmlpQixFQUFTN2UsS0FBS2tCLElBQUtxZCxFQUFPbGhCLEVBQU9vSixVQUFVbUIsTUFTN0M1SCxLQUFLMmUsSUFBS0osRUFBTzNXLEVBQUtmLEdBSWZBLElBQVVqSyxVQUFZaUssRUFBUWUsSUFFdEN4QyxPQUFRLFNBQVVtWixFQUFPM1csR0FDeEIsR0FBSTFGLEdBQUdTLEVBQU1tYyxFQUNaTCxFQUFTemUsS0FBSzRILElBQUsyVyxHQUNuQnhRLEVBQVEvTixLQUFLK04sTUFBTzBRLEVBRXJCLElBQUs3VyxJQUFRaEwsVUFDWm9ELEtBQUsrTixNQUFPMFEsVUFFTixDQUVEcGhCLEVBQU82RixRQUFTMEUsR0FPcEJqRixFQUFPaUYsRUFBSWhLLE9BQVFnSyxFQUFJdkYsSUFBS2hGLEVBQU9vSixhQUVuQ3FZLEVBQVF6aEIsRUFBT29KLFVBQVdtQixHQUVyQkEsSUFBT21HLEdBQ1hwTCxHQUFTaUYsRUFBS2tYLElBSWRuYyxFQUFPbWMsRUFDUG5jLEVBQU9BLElBQVFvTCxJQUNacEwsR0FBV0EsRUFBSzdDLE1BQU9mLFNBSTVCbUQsRUFBSVMsRUFBS3pDLE1BQ1QsT0FBUWdDLFVBQ0E2TCxHQUFPcEwsRUFBTVQsTUFJdkI2YyxRQUFTLFNBQVVSLEdBQ2xCLE9BQVFsaEIsRUFBT3FILGNBQ2QxRSxLQUFLK04sTUFBT3dRLEVBQU92ZSxLQUFLbUQsZ0JBRzFCNmIsUUFBUyxTQUFVVCxHQUNiQSxFQUFPdmUsS0FBS21ELGdCQUNUbkQsTUFBSytOLE1BQU93USxFQUFPdmUsS0FBS21ELFlBTWxDNGEsRUFBWSxHQUFJSSxHQUNoQkgsRUFBWSxHQUFJRyxHQUdoQjlnQixFQUFPb0YsUUFDTndjLFdBQVlkLEVBQUtHLFFBRWpCUyxRQUFTLFNBQVVoZixHQUNsQixNQUFPZ2UsR0FBVWdCLFFBQVNoZixJQUFVaWUsRUFBVWUsUUFBU2hmLElBR3hEK0UsS0FBTSxTQUFVL0UsRUFBTTRDLEVBQU1tQyxHQUMzQixNQUFPaVosR0FBVXBXLE9BQVE1SCxFQUFNNEMsRUFBTW1DLElBR3RDb2EsV0FBWSxTQUFVbmYsRUFBTTRDLEdBQzNCb2IsRUFBVTNZLE9BQVFyRixFQUFNNEMsSUFLekJ3YyxNQUFPLFNBQVVwZixFQUFNNEMsRUFBTW1DLEdBQzVCLE1BQU9rWixHQUFVclcsT0FBUTVILEVBQU00QyxFQUFNbUMsSUFHdENzYSxZQUFhLFNBQVVyZixFQUFNNEMsR0FDNUJxYixFQUFVNVksT0FBUXJGLEVBQU00QyxNQUkxQnRGLEVBQU9zQixHQUFHOEQsUUFDVHFDLEtBQU0sU0FBVThDLEVBQUtmLEdBQ3BCLEdBQUl5SCxHQUFPM0wsRUFDVjVDLEVBQU9DLEtBQU0sR0FDYmtDLEVBQUksRUFDSjRDLEVBQU8sSUFHUixJQUFLOEMsSUFBUWhMLFVBQVksQ0FDeEIsR0FBS29ELEtBQUtFLFNBQ1Q0RSxFQUFPaVosRUFBVTdjLElBQUtuQixHQUVDLElBQWxCQSxFQUFLUSxXQUFtQnlkLEVBQVU5YyxJQUFLbkIsRUFBTSxpQkFBbUIsQ0FFcEUsSUFEQXVPLEVBQVF2TyxFQUFLNkssV0FDRDBELEVBQU1wTyxPQUFWZ0MsRUFBa0JBLElBQ3pCUyxFQUFPMkwsRUFBT3BNLEdBQUlTLEtBRWUsSUFBNUJBLEVBQUt6RSxRQUFTLFdBQ2xCeUUsRUFBT3RGLEVBQU9vSixVQUFXOUQsRUFBSzNFLE1BQU0sSUFDcENxaEIsRUFBVXRmLEVBQU00QyxFQUFNbUMsRUFBTW5DLElBRzlCcWIsR0FBVVcsSUFBSzVlLEVBQU0sZ0JBQWdCLEdBSXZDLE1BQU8rRSxHQUlSLE1BQW9CLGdCQUFSOEMsR0FDSjVILEtBQUt3QixLQUFLLFdBQ2hCdWMsRUFBVVksSUFBSzNlLEtBQU00SCxLQUloQnZLLEVBQU9zSyxPQUFRM0gsS0FBTSxTQUFVNkcsR0FDckMsR0FBSS9CLEdBQ0h3YSxFQUFXamlCLEVBQU9vSixVQUFXbUIsRUFPOUIsSUFBSzdILEdBQVE4RyxJQUFVakssVUFBdkIsQ0FJQyxHQURBa0ksRUFBT2laLEVBQVU3YyxJQUFLbkIsRUFBTTZILEdBQ3ZCOUMsSUFBU2xJLFVBQ2IsTUFBT2tJLEVBTVIsSUFEQUEsRUFBT2laLEVBQVU3YyxJQUFLbkIsRUFBTXVmLEdBQ3ZCeGEsSUFBU2xJLFVBQ2IsTUFBT2tJLEVBTVIsSUFEQUEsRUFBT3VhLEVBQVV0ZixFQUFNdWYsRUFBVTFpQixXQUM1QmtJLElBQVNsSSxVQUNiLE1BQU9rSSxPQVFUOUUsTUFBS3dCLEtBQUssV0FHVCxHQUFJc0QsR0FBT2laLEVBQVU3YyxJQUFLbEIsS0FBTXNmLEVBS2hDdkIsR0FBVVksSUFBSzNlLEtBQU1zZixFQUFVelksR0FLTCxLQUFyQmUsRUFBSTFKLFFBQVEsTUFBZTRHLElBQVNsSSxXQUN4Q21oQixFQUFVWSxJQUFLM2UsS0FBTTRILEVBQUtmLE1BRzFCLEtBQU1BLEVBQU8vRSxVQUFVNUIsT0FBUyxFQUFHLE1BQU0sSUFHN0NnZixXQUFZLFNBQVV0WCxHQUNyQixNQUFPNUgsTUFBS3dCLEtBQUssV0FDaEJ1YyxFQUFVM1ksT0FBUXBGLEtBQU00SCxPQUszQixTQUFTeVgsR0FBVXRmLEVBQU02SCxFQUFLOUMsR0FDN0IsR0FBSW5DLEVBSUosSUFBS21DLElBQVNsSSxXQUErQixJQUFsQm1ELEVBQUtRLFNBSS9CLEdBSEFvQyxFQUFPLFFBQVVpRixFQUFJdEUsUUFBUzRhLEVBQVksT0FBUXRYLGNBQ2xEOUIsRUFBTy9FLEVBQUt1TixhQUFjM0ssR0FFTCxnQkFBVG1DLEdBQW9CLENBQy9CLElBQ0NBLEVBQWdCLFNBQVRBLEdBQWtCLEVBQ2YsVUFBVEEsR0FBbUIsRUFDVixTQUFUQSxFQUFrQixNQUVqQkEsRUFBTyxLQUFPQSxHQUFRQSxFQUN2Qm1aLEVBQU94ZCxLQUFNcUUsR0FBU1MsS0FBS0MsTUFBT1YsR0FDbENBLEVBQ0EsTUFBT0wsSUFHVHNaLEVBQVVZLElBQUs1ZSxFQUFNNkgsRUFBSzlDLE9BRTFCQSxHQUFPbEksU0FHVCxPQUFPa0ksR0FFUnpILEVBQU9vRixRQUNOOGMsTUFBTyxTQUFVeGYsRUFBTWtFLEVBQU1hLEdBQzVCLEdBQUl5YSxFQUVKLE9BQUt4ZixJQUNKa0UsR0FBU0EsR0FBUSxNQUFTLFFBQzFCc2IsRUFBUXZCLEVBQVU5YyxJQUFLbkIsRUFBTWtFLEdBR3hCYSxLQUNFeWEsR0FBU2xpQixFQUFPNkYsUUFBUzRCLEdBQzlCeWEsRUFBUXZCLEVBQVVyVyxPQUFRNUgsRUFBTWtFLEVBQU01RyxFQUFPMEQsVUFBVStELElBRXZEeWEsRUFBTXpoQixLQUFNZ0gsSUFHUHlhLE9BWlIsV0FnQkRDLFFBQVMsU0FBVXpmLEVBQU1rRSxHQUN4QkEsRUFBT0EsR0FBUSxJQUVmLElBQUlzYixHQUFRbGlCLEVBQU9raUIsTUFBT3hmLEVBQU1rRSxHQUMvQndiLEVBQWNGLEVBQU1yZixPQUNwQnZCLEVBQUs0Z0IsRUFBTXRSLFFBQ1h5UixFQUFRcmlCLEVBQU9zaUIsWUFBYTVmLEVBQU1rRSxHQUNsQzJiLEVBQU8sV0FDTnZpQixFQUFPbWlCLFFBQVN6ZixFQUFNa0U7Q0FJWixnQkFBUHRGLElBQ0pBLEVBQUs0Z0IsRUFBTXRSLFFBQ1h3UixLQUdJOWdCLElBSVUsT0FBVHNGLEdBQ0pzYixFQUFNck8sUUFBUyxvQkFJVHdPLEdBQU1HLEtBQ2JsaEIsRUFBR3NDLEtBQU1sQixFQUFNNmYsRUFBTUYsS0FHaEJELEdBQWVDLEdBQ3BCQSxFQUFNN0ssTUFBTWtGLFFBS2Q0RixZQUFhLFNBQVU1ZixFQUFNa0UsR0FDNUIsR0FBSTJELEdBQU0zRCxFQUFPLFlBQ2pCLE9BQU8rWixHQUFVOWMsSUFBS25CLEVBQU02SCxJQUFTb1csRUFBVXJXLE9BQVE1SCxFQUFNNkgsR0FDNURpTixNQUFPeFgsRUFBT2djLFVBQVUsZUFBZWMsSUFBSSxXQUMxQzZELEVBQVU1WSxPQUFRckYsR0FBUWtFLEVBQU8sUUFBUzJELFdBTTlDdkssRUFBT3NCLEdBQUc4RCxRQUNUOGMsTUFBTyxTQUFVdGIsRUFBTWEsR0FDdEIsR0FBSWdiLEdBQVMsQ0FRYixPQU5xQixnQkFBVDdiLEtBQ1hhLEVBQU9iLEVBQ1BBLEVBQU8sS0FDUDZiLEtBR3VCQSxFQUFuQmhlLFVBQVU1QixPQUNQN0MsRUFBT2tpQixNQUFPdmYsS0FBSyxHQUFJaUUsR0FHeEJhLElBQVNsSSxVQUNmb0QsS0FDQUEsS0FBS3dCLEtBQUssV0FDVCxHQUFJK2QsR0FBUWxpQixFQUFPa2lCLE1BQU92ZixLQUFNaUUsRUFBTWEsRUFHdEN6SCxHQUFPc2lCLFlBQWEzZixLQUFNaUUsR0FFWixPQUFUQSxHQUE4QixlQUFic2IsRUFBTSxJQUMzQmxpQixFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFJMUJ1YixRQUFTLFNBQVV2YixHQUNsQixNQUFPakUsTUFBS3dCLEtBQUssV0FDaEJuRSxFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFLeEI4YixNQUFPLFNBQVVDLEVBQU0vYixHQUl0QixNQUhBK2IsR0FBTzNpQixFQUFPNGlCLEdBQUs1aUIsRUFBTzRpQixHQUFHQyxPQUFRRixJQUFVQSxFQUFPQSxFQUN0RC9iLEVBQU9BLEdBQVEsS0FFUmpFLEtBQUt1ZixNQUFPdGIsRUFBTSxTQUFVMmIsRUFBTUYsR0FDeEMsR0FBSVMsR0FBVTNYLFdBQVlvWCxFQUFNSSxFQUNoQ04sR0FBTUcsS0FBTyxXQUNaTyxhQUFjRCxPQUlqQkUsV0FBWSxTQUFVcGMsR0FDckIsTUFBT2pFLE1BQUt1ZixNQUFPdGIsR0FBUSxVQUk1QnRDLFFBQVMsU0FBVXNDLEVBQU1ELEdBQ3hCLEdBQUkyQixHQUNIMmEsRUFBUSxFQUNSQyxFQUFRbGpCLEVBQU9pTCxXQUNmOEksRUFBV3BSLEtBQ1hrQyxFQUFJbEMsS0FBS0UsT0FDVGtiLEVBQVUsYUFDQ2tGLEdBQ1RDLEVBQU0xYyxZQUFhdU4sR0FBWUEsSUFJYixpQkFBVG5OLEtBQ1hELEVBQU1DLEVBQ05BLEVBQU9ySCxXQUVScUgsRUFBT0EsR0FBUSxJQUVmLE9BQU8vQixJQUNOeUQsRUFBTXFZLEVBQVU5YyxJQUFLa1EsRUFBVWxQLEdBQUsrQixFQUFPLGNBQ3RDMEIsR0FBT0EsRUFBSWtQLFFBQ2Z5TCxJQUNBM2EsRUFBSWtQLE1BQU1zRixJQUFLaUIsR0FJakIsT0FEQUEsS0FDT21GLEVBQU01ZSxRQUFTcUMsS0FHeEIsSUFBSXdjLEdBQVVDLEVBQ2JDLEVBQVMsY0FDVEMsRUFBVSxNQUNWQyxFQUFhLHFDQUVkdmpCLEdBQU9zQixHQUFHOEQsUUFDVDdCLEtBQU0sU0FBVStCLEVBQU1rRSxHQUNyQixNQUFPeEosR0FBT3NLLE9BQVEzSCxLQUFNM0MsRUFBT3VELEtBQU0rQixFQUFNa0UsRUFBTy9FLFVBQVU1QixPQUFTLElBRzFFMmdCLFdBQVksU0FBVWxlLEdBQ3JCLE1BQU8zQyxNQUFLd0IsS0FBSyxXQUNoQm5FLEVBQU93akIsV0FBWTdnQixLQUFNMkMsTUFJM0JpYyxLQUFNLFNBQVVqYyxFQUFNa0UsR0FDckIsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTTNDLEVBQU91aEIsS0FBTWpjLEVBQU1rRSxFQUFPL0UsVUFBVTVCLE9BQVMsSUFHMUU0Z0IsV0FBWSxTQUFVbmUsR0FDckIsTUFBTzNDLE1BQUt3QixLQUFLLGlCQUNUeEIsTUFBTTNDLEVBQU8wakIsUUFBU3BlLElBQVVBLE1BSXpDcWUsU0FBVSxTQUFVbmEsR0FDbkIsR0FBSW9hLEdBQVNsaEIsRUFBTTJPLEVBQUt3UyxFQUFPOWUsRUFDOUJGLEVBQUksRUFDSkMsRUFBTW5DLEtBQUtFLE9BQ1hpaEIsRUFBMkIsZ0JBQVZ0YSxJQUFzQkEsQ0FFeEMsSUFBS3hKLEVBQU9zRCxXQUFZa0csR0FDdkIsTUFBTzdHLE1BQUt3QixLQUFLLFNBQVVZLEdBQzFCL0UsRUFBUTJDLE1BQU9naEIsU0FBVW5hLEVBQU01RixLQUFNakIsS0FBTW9DLEVBQUdwQyxLQUFLeVAsYUFJckQsSUFBSzBSLEVBSUosSUFGQUYsR0FBWXBhLEdBQVMsSUFBSy9HLE1BQU9mLE9BRXJCb0QsRUFBSkQsRUFBU0EsSUFPaEIsR0FOQW5DLEVBQU9DLEtBQU1rQyxHQUNid00sRUFBd0IsSUFBbEIzTyxFQUFLUSxXQUFvQlIsRUFBSzBQLFdBQ2pDLElBQU0xUCxFQUFLMFAsVUFBWSxLQUFNbk0sUUFBU29kLEVBQVEsS0FDaEQsS0FHVSxDQUNWdGUsRUFBSSxDQUNKLE9BQVM4ZSxFQUFRRCxFQUFRN2UsS0FDZ0IsRUFBbkNzTSxFQUFJeFEsUUFBUyxJQUFNZ2pCLEVBQVEsT0FDL0J4UyxHQUFPd1MsRUFBUSxJQUdqQm5oQixHQUFLMFAsVUFBWXBTLEVBQU9tQixLQUFNa1EsR0FNakMsTUFBTzFPLE9BR1JvaEIsWUFBYSxTQUFVdmEsR0FDdEIsR0FBSW9hLEdBQVNsaEIsRUFBTTJPLEVBQUt3UyxFQUFPOWUsRUFDOUJGLEVBQUksRUFDSkMsRUFBTW5DLEtBQUtFLE9BQ1hpaEIsRUFBK0IsSUFBckJyZixVQUFVNUIsUUFBaUMsZ0JBQVYyRyxJQUFzQkEsQ0FFbEUsSUFBS3hKLEVBQU9zRCxXQUFZa0csR0FDdkIsTUFBTzdHLE1BQUt3QixLQUFLLFNBQVVZLEdBQzFCL0UsRUFBUTJDLE1BQU9vaEIsWUFBYXZhLEVBQU01RixLQUFNakIsS0FBTW9DLEVBQUdwQyxLQUFLeVAsYUFHeEQsSUFBSzBSLEVBR0osSUFGQUYsR0FBWXBhLEdBQVMsSUFBSy9HLE1BQU9mLE9BRXJCb0QsRUFBSkQsRUFBU0EsSUFRaEIsR0FQQW5DLEVBQU9DLEtBQU1rQyxHQUVid00sRUFBd0IsSUFBbEIzTyxFQUFLUSxXQUFvQlIsRUFBSzBQLFdBQ2pDLElBQU0xUCxFQUFLMFAsVUFBWSxLQUFNbk0sUUFBU29kLEVBQVEsS0FDaEQsSUFHVSxDQUNWdGUsRUFBSSxDQUNKLE9BQVM4ZSxFQUFRRCxFQUFRN2UsS0FFeEIsTUFBUXNNLEVBQUl4USxRQUFTLElBQU1nakIsRUFBUSxNQUFTLEVBQzNDeFMsRUFBTUEsRUFBSXBMLFFBQVMsSUFBTTRkLEVBQVEsSUFBSyxJQUd4Q25oQixHQUFLMFAsVUFBWTVJLEVBQVF4SixFQUFPbUIsS0FBTWtRLEdBQVEsR0FLakQsTUFBTzFPLE9BR1JxaEIsWUFBYSxTQUFVeGEsRUFBT3lhLEdBQzdCLEdBQUlyZCxTQUFjNEMsRUFFbEIsT0FBeUIsaUJBQWJ5YSxJQUFtQyxXQUFUcmQsRUFDOUJxZCxFQUFXdGhCLEtBQUtnaEIsU0FBVW5hLEdBQVU3RyxLQUFLb2hCLFlBQWF2YSxHQUd6RHhKLEVBQU9zRCxXQUFZa0csR0FDaEI3RyxLQUFLd0IsS0FBSyxTQUFVVSxHQUMxQjdFLEVBQVEyQyxNQUFPcWhCLFlBQWF4YSxFQUFNNUYsS0FBS2pCLEtBQU1rQyxFQUFHbEMsS0FBS3lQLFVBQVc2UixHQUFXQSxLQUl0RXRoQixLQUFLd0IsS0FBSyxXQUNoQixHQUFjLFdBQVR5QyxFQUFvQixDQUV4QixHQUFJd0wsR0FDSHZOLEVBQUksRUFDSitYLEVBQU81YyxFQUFRMkMsTUFDZnVoQixFQUFhMWEsRUFBTS9HLE1BQU9mLE1BRTNCLE9BQVMwUSxFQUFZOFIsRUFBWXJmLEtBRTNCK1gsRUFBS3VILFNBQVUvUixHQUNuQndLLEVBQUttSCxZQUFhM1IsR0FFbEJ3SyxFQUFLK0csU0FBVXZSLFFBS054TCxJQUFTbEgsR0FBOEIsWUFBVGtILEtBQ3BDakUsS0FBS3lQLFdBRVR1TyxFQUFVVyxJQUFLM2UsS0FBTSxnQkFBaUJBLEtBQUt5UCxXQU81Q3pQLEtBQUt5UCxVQUFZelAsS0FBS3lQLFdBQWE1SSxLQUFVLEVBQVEsR0FBS21YLEVBQVU5YyxJQUFLbEIsS0FBTSxrQkFBcUIsT0FLdkd3aEIsU0FBVSxTQUFVL2lCLEdBQ25CLEdBQUlnUixHQUFZLElBQU1oUixFQUFXLElBQ2hDeUQsRUFBSSxFQUNKa0YsRUFBSXBILEtBQUtFLE1BQ1YsTUFBWWtILEVBQUpsRixFQUFPQSxJQUNkLEdBQTBCLElBQXJCbEMsS0FBS2tDLEdBQUczQixXQUFtQixJQUFNUCxLQUFLa0MsR0FBR3VOLFVBQVksS0FBS25NLFFBQVFvZCxFQUFRLEtBQUt4aUIsUUFBU3VSLElBQWUsRUFDM0csT0FBTyxDQUlULFFBQU8sR0FHUjRCLElBQUssU0FBVXhLLEdBQ2QsR0FBSTZZLEdBQU9wZSxFQUFLWCxFQUNmWixFQUFPQyxLQUFLLEVBRWIsRUFBQSxHQUFNOEIsVUFBVTVCLE9Bc0JoQixNQUZBUyxHQUFhdEQsRUFBT3NELFdBQVlrRyxHQUV6QjdHLEtBQUt3QixLQUFLLFNBQVVVLEdBQzFCLEdBQUltUCxFQUVtQixLQUFsQnJSLEtBQUtPLFdBS1Q4USxFQURJMVEsRUFDRWtHLEVBQU01RixLQUFNakIsS0FBTWtDLEVBQUc3RSxFQUFRMkMsTUFBT3FSLE9BRXBDeEssRUFJSyxNQUFQd0ssRUFDSkEsRUFBTSxHQUNvQixnQkFBUkEsR0FDbEJBLEdBQU8sR0FDSWhVLEVBQU82RixRQUFTbU8sS0FDM0JBLEVBQU1oVSxFQUFPZ0YsSUFBSWdQLEVBQUssU0FBV3hLLEdBQ2hDLE1BQWdCLE9BQVRBLEVBQWdCLEdBQUtBLEVBQVEsTUFJdEM2WSxFQUFRcmlCLEVBQU9va0IsU0FBVXpoQixLQUFLaUUsT0FBVTVHLEVBQU9va0IsU0FBVXpoQixLQUFLMkcsU0FBU0MsZUFHakU4WSxHQUFXLE9BQVNBLElBQVVBLEVBQU1mLElBQUszZSxLQUFNcVIsRUFBSyxXQUFjelUsWUFDdkVvRCxLQUFLNkcsTUFBUXdLLEtBakRkLElBQUt0UixFQUdKLE1BRkEyZixHQUFRcmlCLEVBQU9va0IsU0FBVTFoQixFQUFLa0UsT0FBVTVHLEVBQU9va0IsU0FBVTFoQixFQUFLNEcsU0FBU0MsZUFFbEU4WSxHQUFTLE9BQVNBLEtBQVVwZSxFQUFNb2UsRUFBTXhlLElBQUtuQixFQUFNLFlBQWVuRCxVQUMvRDBFLEdBR1JBLEVBQU12QixFQUFLOEcsTUFFVyxnQkFBUnZGLEdBRWJBLEVBQUlnQyxRQUFRcWQsRUFBUyxJQUVkLE1BQVByZixFQUFjLEdBQUtBLE9BMEN4QmpFLEVBQU9vRixRQUNOZ2YsVUFDQ0MsUUFDQ3hnQixJQUFLLFNBQVVuQixHQUdkLEdBQUlzUixHQUFNdFIsRUFBSzZLLFdBQVcvRCxLQUMxQixRQUFRd0ssR0FBT0EsRUFBSUMsVUFBWXZSLEVBQUs4RyxNQUFROUcsRUFBS3NHLE9BR25Ed0gsUUFDQzNNLElBQUssU0FBVW5CLEdBQ2QsR0FBSThHLEdBQU82YSxFQUNWaGYsRUFBVTNDLEVBQUsyQyxRQUNmMFgsRUFBUXJhLEVBQUs2VSxjQUNiK00sRUFBb0IsZUFBZDVoQixFQUFLa0UsTUFBaUMsRUFBUm1XLEVBQ3BDMkIsRUFBUzRGLEVBQU0sUUFDZkMsRUFBTUQsRUFBTXZILEVBQVEsRUFBSTFYLEVBQVF4QyxPQUNoQ2dDLEVBQVksRUFBUmtZLEVBQ0h3SCxFQUNBRCxFQUFNdkgsRUFBUSxDQUdoQixNQUFZd0gsRUFBSjFmLEVBQVNBLElBSWhCLEdBSEF3ZixFQUFTaGYsRUFBU1IsTUFHWHdmLEVBQU8vTSxVQUFZelMsSUFBTWtZLElBRTVCL2MsRUFBT3NMLFFBQVFtVSxZQUFlNEUsRUFBT2pOLFNBQStDLE9BQXBDaU4sRUFBT3BVLGFBQWEsY0FDbkVvVSxFQUFPNWdCLFdBQVcyVCxVQUFhcFgsRUFBT3NKLFNBQVUrYSxFQUFPNWdCLFdBQVksYUFBaUIsQ0FNeEYsR0FIQStGLEVBQVF4SixFQUFRcWtCLEdBQVNyUSxNQUdwQnNRLEVBQ0osTUFBTzlhLEVBSVJrVixHQUFPamUsS0FBTStJLEdBSWYsTUFBT2tWLElBR1I0QyxJQUFLLFNBQVU1ZSxFQUFNOEcsR0FDcEIsR0FBSWdiLEdBQVdILEVBQ2RoZixFQUFVM0MsRUFBSzJDLFFBQ2ZxWixFQUFTMWUsRUFBTzBELFVBQVc4RixHQUMzQjNFLEVBQUlRLEVBQVF4QyxNQUViLE9BQVFnQyxJQUNQd2YsRUFBU2hmLEVBQVNSLElBQ1p3ZixFQUFPL00sU0FBV3RYLEVBQU82SixRQUFTN0osRUFBT3FrQixHQUFRclEsTUFBTzBLLElBQVksS0FDekU4RixHQUFZLEVBUWQsT0FITUEsS0FDTDloQixFQUFLNlUsY0FBZ0IsSUFFZm1ILEtBS1ZuYixLQUFNLFNBQVViLEVBQU00QyxFQUFNa0UsR0FDM0IsR0FBSTZZLEdBQU9wZSxFQUNWd2dCLEVBQVEvaEIsRUFBS1EsUUFHZCxJQUFNUixHQUFrQixJQUFWK2hCLEdBQXlCLElBQVZBLEdBQXlCLElBQVZBLEVBSzVDLGFBQVkvaEIsR0FBS3VOLGVBQWlCdlEsRUFDMUJNLEVBQU91aEIsS0FBTTdlLEVBQU00QyxFQUFNa0UsSUFLbEIsSUFBVmliLEdBQWdCemtCLEVBQU8yYixTQUFValosS0FDckM0QyxFQUFPQSxFQUFLaUUsY0FDWjhZLEVBQVFyaUIsRUFBTzBrQixVQUFXcGYsS0FDdkJ0RixFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLcEwsS0FBTWtDLEdBQVM4ZCxFQUFXRCxJQUdoRDNaLElBQVVqSyxVQWFIOGlCLEdBQVMsT0FBU0EsSUFBNkMsUUFBbkNwZSxFQUFNb2UsRUFBTXhlLElBQUtuQixFQUFNNEMsSUFDdkRyQixHQUdQQSxFQUFNakUsRUFBTytDLEtBQUtRLEtBQU1iLEVBQU00QyxHQUdoQixNQUFQckIsRUFDTjFFLFVBQ0EwRSxHQXBCYyxPQUFWdUYsRUFHTzZZLEdBQVMsT0FBU0EsS0FBVXBlLEVBQU1vZSxFQUFNZixJQUFLNWUsRUFBTThHLEVBQU9sRSxNQUFZL0YsVUFDMUUwRSxHQUdQdkIsRUFBS3dOLGFBQWM1SyxFQUFNa0UsRUFBUSxJQUMxQkEsSUFQUHhKLEVBQU93akIsV0FBWTlnQixFQUFNNEMsR0FBekJ0RixhQXVCSHdqQixXQUFZLFNBQVU5Z0IsRUFBTThHLEdBQzNCLEdBQUlsRSxHQUFNcWYsRUFDVDlmLEVBQUksRUFDSitmLEVBQVlwYixHQUFTQSxFQUFNL0csTUFBT2YsRUFFbkMsSUFBS2tqQixHQUErQixJQUFsQmxpQixFQUFLUSxTQUN0QixNQUFTb0MsRUFBT3NmLEVBQVUvZixLQUN6QjhmLEVBQVcza0IsRUFBTzBqQixRQUFTcGUsSUFBVUEsRUFHaEN0RixFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLcEwsS0FBTWtDLEtBRWpDNUMsRUFBTWlpQixJQUFhLEdBR3BCamlCLEVBQUs2TixnQkFBaUJqTCxJQUt6Qm9mLFdBQ0M5ZCxNQUNDMGEsSUFBSyxTQUFVNWUsRUFBTThHLEdBQ3BCLElBQU14SixFQUFPc0wsUUFBUW9VLFlBQXdCLFVBQVZsVyxHQUFxQnhKLEVBQU9zSixTQUFTNUcsRUFBTSxTQUFXLENBR3hGLEdBQUlzUixHQUFNdFIsRUFBSzhHLEtBS2YsT0FKQTlHLEdBQUt3TixhQUFjLE9BQVExRyxHQUN0QndLLElBQ0p0UixFQUFLOEcsTUFBUXdLLEdBRVB4SyxNQU1Ya2EsU0FDQ21CLE1BQU8sVUFDUEMsUUFBUyxhQUdWdkQsS0FBTSxTQUFVN2UsRUFBTTRDLEVBQU1rRSxHQUMzQixHQUFJdkYsR0FBS29lLEVBQU8wQyxFQUNmTixFQUFRL2hCLEVBQUtRLFFBR2QsSUFBTVIsR0FBa0IsSUFBVitoQixHQUF5QixJQUFWQSxHQUF5QixJQUFWQSxFQVk1QyxNQVJBTSxHQUFtQixJQUFWTixJQUFnQnprQixFQUFPMmIsU0FBVWpaLEdBRXJDcWlCLElBRUp6ZixFQUFPdEYsRUFBTzBqQixRQUFTcGUsSUFBVUEsRUFDakMrYyxFQUFRcmlCLEVBQU9nbEIsVUFBVzFmLElBR3RCa0UsSUFBVWpLLFVBQ1A4aUIsR0FBUyxPQUFTQSxLQUFVcGUsRUFBTW9lLEVBQU1mLElBQUs1ZSxFQUFNOEcsRUFBT2xFLE1BQVkvRixVQUM1RTBFLEVBQ0V2QixFQUFNNEMsR0FBU2tFLEVBR1g2WSxHQUFTLE9BQVNBLElBQTZDLFFBQW5DcGUsRUFBTW9lLEVBQU14ZSxJQUFLbkIsRUFBTTRDLElBQ3pEckIsRUFDQXZCLEVBQU00QyxJQUlUMGYsV0FDQzlOLFVBQ0NyVCxJQUFLLFNBQVVuQixHQUNkLE1BQU9BLEdBQUt1aUIsYUFBYyxhQUFnQjFCLEVBQVduZ0IsS0FBTVYsRUFBSzRHLFdBQWM1RyxFQUFLdVUsS0FDbEZ2VSxFQUFLd1UsU0FDTCxRQU9Ma00sR0FDQzlCLElBQUssU0FBVTVlLEVBQU04RyxFQUFPbEUsR0FPM0IsTUFOS2tFLE1BQVUsRUFFZHhKLEVBQU93akIsV0FBWTlnQixFQUFNNEMsR0FFekI1QyxFQUFLd04sYUFBYzVLLEVBQU1BLEdBRW5CQSxJQUdUdEYsRUFBT21FLEtBQU1uRSxFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLL00sT0FBT2dCLE1BQU8sUUFBVSxTQUFVb0MsRUFBR1MsR0FDeEUsR0FBSTRmLEdBQVNsbEIsRUFBTzhULEtBQUszQyxXQUFZN0wsSUFBVXRGLEVBQU8rQyxLQUFLUSxJQUUzRHZELEdBQU84VCxLQUFLM0MsV0FBWTdMLEdBQVMsU0FBVTVDLEVBQU00QyxFQUFNb0csR0FDdEQsR0FBSXBLLEdBQUt0QixFQUFPOFQsS0FBSzNDLFdBQVk3TCxHQUNoQ3JCLEVBQU15SCxFQUNMbk0sV0FHQ1MsRUFBTzhULEtBQUszQyxXQUFZN0wsR0FBUy9GLFlBQ2pDMmxCLEVBQVF4aUIsRUFBTTRDLEVBQU1vRyxHQUVwQnBHLEVBQUtpRSxjQUNMLElBS0gsT0FGQXZKLEdBQU84VCxLQUFLM0MsV0FBWTdMLEdBQVNoRSxFQUUxQjJDLEtBTUhqRSxFQUFPc0wsUUFBUTZULGNBQ3BCbmYsRUFBT2dsQixVQUFVMU4sVUFDaEJ6VCxJQUFLLFNBQVVuQixHQUNkLEdBQUlzUCxHQUFTdFAsRUFBS2UsVUFJbEIsT0FIS3VPLElBQVVBLEVBQU92TyxZQUNyQnVPLEVBQU92TyxXQUFXOFQsY0FFWixRQUtWdlgsRUFBT21FLE1BQ04sV0FDQSxXQUNBLFlBQ0EsY0FDQSxjQUNBLFVBQ0EsVUFDQSxTQUNBLGNBQ0EsbUJBQ0UsV0FDRm5FLEVBQU8wakIsUUFBUy9nQixLQUFLNEcsZUFBa0I1RyxPQUl4QzNDLEVBQU9tRSxNQUFPLFFBQVMsWUFBYyxXQUNwQ25FLEVBQU9va0IsU0FBVXpoQixPQUNoQjJlLElBQUssU0FBVTVlLEVBQU04RyxHQUNwQixNQUFLeEosR0FBTzZGLFFBQVMyRCxHQUNYOUcsRUFBSzJVLFFBQVVyWCxFQUFPNkosUUFBUzdKLEVBQU8wQyxHQUFNc1IsTUFBT3hLLElBQVcsRUFEeEUsWUFLSXhKLEVBQU9zTCxRQUFRNFQsVUFDcEJsZixFQUFPb2tCLFNBQVV6aEIsTUFBT2tCLElBQU0sU0FBVW5CLEdBR3ZDLE1BQXNDLFFBQS9CQSxFQUFLdU4sYUFBYSxTQUFvQixLQUFPdk4sRUFBSzhHLFNBSTVELElBQUkyYixHQUFZLE9BQ2ZDLEVBQWMsK0JBQ2RDLEVBQWMsa0NBQ2RDLEVBQWlCLHNCQUVsQixTQUFTQyxLQUNSLE9BQU8sRUFHUixRQUFTQyxLQUNSLE9BQU8sRUFHUixRQUFTQyxLQUNSLElBQ0MsTUFBTzdsQixHQUFTbVgsY0FDZixNQUFRMk8sS0FPWDFsQixFQUFPMmxCLE9BRU5DLFVBRUE5SSxJQUFLLFNBQVVwYSxFQUFNbWpCLEVBQU8zVSxFQUFTekosRUFBTXJHLEdBRTFDLEdBQUkwa0IsR0FBYUMsRUFBYXpkLEVBQzdCMGQsRUFBUUMsRUFBR0MsRUFDWEMsRUFBU0MsRUFBVXhmLEVBQU15ZixFQUFZQyxFQUNyQ0MsRUFBVzVGLEVBQVU5YyxJQUFLbkIsRUFHM0IsSUFBTTZqQixFQUFOLENBS0tyVixFQUFRQSxVQUNaNFUsRUFBYzVVLEVBQ2RBLEVBQVU0VSxFQUFZNVUsUUFDdEI5UCxFQUFXMGtCLEVBQVkxa0IsVUFJbEI4UCxFQUFROUcsT0FDYjhHLEVBQVE5RyxLQUFPcEssRUFBT29LLFNBSWhCNGIsRUFBU08sRUFBU1AsVUFDeEJBLEVBQVNPLEVBQVNQLFlBRVpELEVBQWNRLEVBQVNDLFVBQzdCVCxFQUFjUSxFQUFTQyxPQUFTLFNBQVVwZixHQUd6QyxhQUFjcEgsS0FBV04sR0FBdUIwSCxHQUFLcEgsRUFBTzJsQixNQUFNYyxZQUFjcmYsRUFBRVIsS0FFakZySCxVQURBUyxFQUFPMmxCLE1BQU1lLFNBQVNsaUIsTUFBT3VoQixFQUFZcmpCLEtBQU0rQixZQUlqRHNoQixFQUFZcmpCLEtBQU9BLEdBSXBCbWpCLEdBQVVBLEdBQVMsSUFBS3BqQixNQUFPZixLQUFxQixJQUNwRHVrQixFQUFJSixFQUFNaGpCLE1BQ1YsT0FBUW9qQixJQUNQM2QsRUFBTWdkLEVBQWV4aUIsS0FBTStpQixFQUFNSSxRQUNqQ3JmLEVBQU8wZixFQUFXaGUsRUFBSSxHQUN0QitkLEdBQWUvZCxFQUFJLElBQU0sSUFBSytDLE1BQU8sS0FBTW5HLE9BR3JDMEIsSUFLTnVmLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUFTdmYsT0FHaENBLEdBQVN4RixFQUFXK2tCLEVBQVFRLGFBQWVSLEVBQVFTLFdBQWNoZ0IsRUFHakV1ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU3ZmLE9BR2hDc2YsRUFBWWxtQixFQUFPb0YsUUFDbEJ3QixLQUFNQSxFQUNOMGYsU0FBVUEsRUFDVjdlLEtBQU1BLEVBQ055SixRQUFTQSxFQUNUOUcsS0FBTThHLEVBQVE5RyxLQUNkaEosU0FBVUEsRUFDVnFOLGFBQWNyTixHQUFZcEIsRUFBTzhULEtBQUtyUixNQUFNZ00sYUFBYXJMLEtBQU1oQyxHQUMvRHlsQixVQUFXUixFQUFXalcsS0FBSyxNQUN6QjBWLElBR0lNLEVBQVdKLEVBQVFwZixNQUN6QndmLEVBQVdKLEVBQVFwZixNQUNuQndmLEVBQVNVLGNBQWdCLEVBR25CWCxFQUFRWSxPQUFTWixFQUFRWSxNQUFNbmpCLEtBQU1sQixFQUFNK0UsRUFBTTRlLEVBQVlOLE1BQWtCLEdBQy9FcmpCLEVBQUswSSxrQkFDVDFJLEVBQUswSSxpQkFBa0J4RSxFQUFNbWYsR0FBYSxJQUt4Q0ksRUFBUXJKLE1BQ1pxSixFQUFRckosSUFBSWxaLEtBQU1sQixFQUFNd2pCLEdBRWxCQSxFQUFVaFYsUUFBUTlHLE9BQ3ZCOGIsRUFBVWhWLFFBQVE5RyxLQUFPOEcsRUFBUTlHLE9BSzlCaEosRUFDSmdsQixFQUFTamhCLE9BQVFpaEIsRUFBU1UsZ0JBQWlCLEVBQUdaLEdBRTlDRSxFQUFTM2xCLEtBQU15bEIsR0FJaEJsbUIsRUFBTzJsQixNQUFNQyxPQUFRaGYsSUFBUyxFQUkvQmxFLEdBQU8sT0FJUnFGLE9BQVEsU0FBVXJGLEVBQU1takIsRUFBTzNVLEVBQVM5UCxFQUFVNGxCLEdBRWpELEdBQUlqaUIsR0FBR2tpQixFQUFXM2UsRUFDakIwZCxFQUFRQyxFQUFHQyxFQUNYQyxFQUFTQyxFQUFVeGYsRUFBTXlmLEVBQVlDLEVBQ3JDQyxFQUFXNUYsRUFBVWUsUUFBU2hmLElBQVVpZSxFQUFVOWMsSUFBS25CLEVBRXhELElBQU02akIsSUFBY1AsRUFBU08sRUFBU1AsUUFBdEMsQ0FLQUgsR0FBVUEsR0FBUyxJQUFLcGpCLE1BQU9mLEtBQXFCLElBQ3BEdWtCLEVBQUlKLEVBQU1oakIsTUFDVixPQUFRb2pCLElBTVAsR0FMQTNkLEVBQU1nZCxFQUFleGlCLEtBQU0raUIsRUFBTUksUUFDakNyZixFQUFPMGYsRUFBV2hlLEVBQUksR0FDdEIrZCxHQUFlL2QsRUFBSSxJQUFNLElBQUsrQyxNQUFPLEtBQU1uRyxPQUdyQzBCLEVBQU4sQ0FPQXVmLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUFTdmYsT0FDaENBLEdBQVN4RixFQUFXK2tCLEVBQVFRLGFBQWVSLEVBQVFTLFdBQWNoZ0IsRUFDakV3ZixFQUFXSixFQUFRcGYsT0FDbkIwQixFQUFNQSxFQUFJLElBQVVvRixPQUFRLFVBQVkyWSxFQUFXalcsS0FBSyxpQkFBbUIsV0FHM0U2VyxFQUFZbGlCLEVBQUlxaEIsRUFBU3ZqQixNQUN6QixPQUFRa0MsSUFDUG1oQixFQUFZRSxFQUFVcmhCLElBRWZpaUIsR0FBZVYsSUFBYUosRUFBVUksVUFDekNwVixHQUFXQSxFQUFROUcsT0FBUzhiLEVBQVU5YixNQUN0QzlCLElBQU9BLEVBQUlsRixLQUFNOGlCLEVBQVVXLFlBQzNCemxCLEdBQVlBLElBQWE4a0IsRUFBVTlrQixXQUF5QixPQUFiQSxJQUFxQjhrQixFQUFVOWtCLFlBQ2pGZ2xCLEVBQVNqaEIsT0FBUUosRUFBRyxHQUVmbWhCLEVBQVU5a0IsVUFDZGdsQixFQUFTVSxnQkFFTFgsRUFBUXBlLFFBQ1pvZSxFQUFRcGUsT0FBT25FLEtBQU1sQixFQUFNd2pCLEdBT3pCZSxLQUFjYixFQUFTdmpCLFNBQ3JCc2pCLEVBQVFlLFVBQVlmLEVBQVFlLFNBQVN0akIsS0FBTWxCLEVBQU0yakIsRUFBWUUsRUFBU0MsV0FBYSxHQUN4RnhtQixFQUFPbW5CLFlBQWF6a0IsRUFBTWtFLEVBQU0yZixFQUFTQyxjQUduQ1IsR0FBUXBmLFFBdENmLEtBQU1BLElBQVFvZixHQUNiaG1CLEVBQU8ybEIsTUFBTTVkLE9BQVFyRixFQUFNa0UsRUFBT2lmLEVBQU9JLEdBQUsvVSxFQUFTOVAsR0FBVSxFQTBDL0RwQixHQUFPcUgsY0FBZTJlLFdBQ25CTyxHQUFTQyxPQUNoQjdGLEVBQVU1WSxPQUFRckYsRUFBTSxhQUkxQitELFFBQVMsU0FBVWtmLEVBQU9sZSxFQUFNL0UsRUFBTTBrQixHQUVyQyxHQUFJdmlCLEdBQUd3TSxFQUFLL0ksRUFBSytlLEVBQVlDLEVBQVFkLEVBQVFMLEVBQzVDb0IsR0FBYzdrQixHQUFROUMsR0FDdEJnSCxFQUFPNUYsRUFBWTRDLEtBQU0raEIsRUFBTyxRQUFXQSxFQUFNL2UsS0FBTytlLEVBQ3hEVSxFQUFhcmxCLEVBQVk0QyxLQUFNK2hCLEVBQU8sYUFBZ0JBLEVBQU1rQixVQUFVeGIsTUFBTSxPQUs3RSxJQUhBZ0csRUFBTS9JLEVBQU01RixFQUFPQSxHQUFROUMsRUFHSixJQUFsQjhDLEVBQUtRLFVBQW9DLElBQWxCUixFQUFLUSxXQUs1Qm1pQixFQUFZamlCLEtBQU13RCxFQUFPNUcsRUFBTzJsQixNQUFNYyxhQUl0QzdmLEVBQUsvRixRQUFRLE1BQVEsSUFFekJ3bEIsRUFBYXpmLEVBQUt5RSxNQUFNLEtBQ3hCekUsRUFBT3lmLEVBQVd6VixRQUNsQnlWLEVBQVduaEIsUUFFWm9pQixFQUE2QixFQUFwQjFnQixFQUFLL0YsUUFBUSxNQUFZLEtBQU8rRixFQUd6QytlLEVBQVFBLEVBQU8zbEIsRUFBTzhGLFNBQ3JCNmYsRUFDQSxHQUFJM2xCLEdBQU93bkIsTUFBTzVnQixFQUF1QixnQkFBVitlLElBQXNCQSxHQUd0REEsRUFBTThCLFVBQVlMLEVBQWUsRUFBSSxFQUNyQ3pCLEVBQU1rQixVQUFZUixFQUFXalcsS0FBSyxLQUNsQ3VWLEVBQU0rQixhQUFlL0IsRUFBTWtCLFVBQ3RCblosT0FBUSxVQUFZMlksRUFBV2pXLEtBQUssaUJBQW1CLFdBQzNELEtBR0R1VixFQUFNcFEsT0FBU2hXLFVBQ1RvbUIsRUFBTWhnQixTQUNYZ2dCLEVBQU1oZ0IsT0FBU2pELEdBSWhCK0UsRUFBZSxNQUFSQSxHQUNKa2UsR0FDRjNsQixFQUFPMEQsVUFBVytELEdBQVFrZSxJQUczQlEsRUFBVW5tQixFQUFPMmxCLE1BQU1RLFFBQVN2ZixPQUMxQndnQixJQUFnQmpCLEVBQVExZixTQUFXMGYsRUFBUTFmLFFBQVFqQyxNQUFPOUIsRUFBTStFLE1BQVcsR0FBakYsQ0FNQSxJQUFNMmYsSUFBaUJqQixFQUFRd0IsV0FBYTNuQixFQUFPOEcsU0FBVXBFLEdBQVMsQ0FNckUsSUFKQTJrQixFQUFhbEIsRUFBUVEsY0FBZ0IvZixFQUMvQnllLEVBQVlqaUIsS0FBTWlrQixFQUFhemdCLEtBQ3BDeUssRUFBTUEsRUFBSTVOLFlBRUg0TixFQUFLQSxFQUFNQSxFQUFJNU4sV0FDdEI4akIsRUFBVTltQixLQUFNNFEsR0FDaEIvSSxFQUFNK0ksQ0FJRi9JLE1BQVM1RixFQUFLUyxlQUFpQnZELElBQ25DMm5CLEVBQVU5bUIsS0FBTTZILEVBQUkySixhQUFlM0osRUFBSXNmLGNBQWdCdG9CLEdBS3pEdUYsRUFBSSxDQUNKLFFBQVN3TSxFQUFNa1csRUFBVTFpQixRQUFVOGdCLEVBQU1rQyx1QkFFeENsQyxFQUFNL2UsS0FBTy9CLEVBQUksRUFDaEJ3aUIsRUFDQWxCLEVBQVFTLFVBQVloZ0IsRUFHckI0ZixHQUFXN0YsRUFBVTljLElBQUt3TixFQUFLLGVBQW9Cc1UsRUFBTS9lLE9BQVUrWixFQUFVOWMsSUFBS3dOLEVBQUssVUFDbEZtVixHQUNKQSxFQUFPaGlCLE1BQU82TSxFQUFLNUosR0FJcEIrZSxFQUFTYyxHQUFValcsRUFBS2lXLEdBQ25CZCxHQUFVeG1CLEVBQU80aEIsV0FBWXZRLElBQVNtVixFQUFPaGlCLE9BQVNnaUIsRUFBT2hpQixNQUFPNk0sRUFBSzVKLE1BQVcsR0FDeEZrZSxFQUFNbUMsZ0JBa0NSLE9BL0JBbkMsR0FBTS9lLEtBQU9BLEVBR1B3Z0IsR0FBaUJ6QixFQUFNb0Msc0JBRXJCNUIsRUFBUTZCLFVBQVk3QixFQUFRNkIsU0FBU3hqQixNQUFPK2lCLEVBQVV0YSxNQUFPeEYsTUFBVyxJQUM5RXpILEVBQU80aEIsV0FBWWxmLElBSWQ0a0IsR0FBVXRuQixFQUFPc0QsV0FBWVosRUFBTWtFLE1BQWE1RyxFQUFPOEcsU0FBVXBFLEtBR3JFNEYsRUFBTTVGLEVBQU00a0IsR0FFUGhmLElBQ0o1RixFQUFNNGtCLEdBQVcsTUFJbEJ0bkIsRUFBTzJsQixNQUFNYyxVQUFZN2YsRUFDekJsRSxFQUFNa0UsS0FDTjVHLEVBQU8ybEIsTUFBTWMsVUFBWWxuQixVQUVwQitJLElBQ0o1RixFQUFNNGtCLEdBQVdoZixJQU1kcWQsRUFBTXBRLFNBR2RtUixTQUFVLFNBQVVmLEdBR25CQSxFQUFRM2xCLEVBQU8ybEIsTUFBTXNDLElBQUt0QyxFQUUxQixJQUFJOWdCLEdBQUdFLEVBQUdkLEVBQUttUyxFQUFTOFAsRUFDdkJnQyxLQUNBN2pCLEVBQU8zRCxFQUFXa0QsS0FBTWEsV0FDeEIyaEIsR0FBYXpGLEVBQVU5YyxJQUFLbEIsS0FBTSxlQUFvQmdqQixFQUFNL2UsVUFDNUR1ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU1IsRUFBTS9lLFNBT3ZDLElBSkF2QyxFQUFLLEdBQUtzaEIsRUFDVkEsRUFBTXdDLGVBQWlCeGxCLE1BR2xCd2pCLEVBQVFpQyxhQUFlakMsRUFBUWlDLFlBQVl4a0IsS0FBTWpCLEtBQU1nakIsTUFBWSxFQUF4RSxDQUtBdUMsRUFBZWxvQixFQUFPMmxCLE1BQU1TLFNBQVN4aUIsS0FBTWpCLEtBQU1nakIsRUFBT1MsR0FHeER2aEIsRUFBSSxDQUNKLFFBQVN1UixFQUFVOFIsRUFBY3JqQixRQUFXOGdCLEVBQU1rQyx1QkFBeUIsQ0FDMUVsQyxFQUFNMEMsY0FBZ0JqUyxFQUFRMVQsS0FFOUJxQyxFQUFJLENBQ0osUUFBU21oQixFQUFZOVAsRUFBUWdRLFNBQVVyaEIsUUFBVzRnQixFQUFNMkMsa0NBSWpEM0MsRUFBTStCLGNBQWdCL0IsRUFBTStCLGFBQWF0a0IsS0FBTThpQixFQUFVVyxjQUU5RGxCLEVBQU1PLFVBQVlBLEVBQ2xCUCxFQUFNbGUsS0FBT3llLEVBQVV6ZSxLQUV2QnhELElBQVNqRSxFQUFPMmxCLE1BQU1RLFFBQVNELEVBQVVJLGVBQWtCRSxRQUFVTixFQUFVaFYsU0FDNUUxTSxNQUFPNFIsRUFBUTFULEtBQU0yQixHQUVuQkosSUFBUTFFLFlBQ05vbUIsRUFBTXBRLE9BQVN0UixNQUFTLElBQzdCMGhCLEVBQU1tQyxpQkFDTm5DLEVBQU00QyxvQkFZWCxNQUpLcEMsR0FBUXFDLGNBQ1pyQyxFQUFRcUMsYUFBYTVrQixLQUFNakIsS0FBTWdqQixHQUczQkEsRUFBTXBRLFNBR2Q2USxTQUFVLFNBQVVULEVBQU9TLEdBQzFCLEdBQUl2aEIsR0FBR3FILEVBQVN1YyxFQUFLdkMsRUFDcEJnQyxLQUNBcEIsRUFBZ0JWLEVBQVNVLGNBQ3pCelYsRUFBTXNVLEVBQU1oZ0IsTUFLYixJQUFLbWhCLEdBQWlCelYsRUFBSW5PLFlBQWN5aUIsRUFBTWpPLFFBQXlCLFVBQWZpTyxFQUFNL2UsTUFFN0QsS0FBUXlLLElBQVExTyxLQUFNME8sRUFBTUEsRUFBSTVOLFlBQWNkLEtBRzdDLEdBQUswTyxFQUFJK0YsWUFBYSxHQUF1QixVQUFmdU8sRUFBTS9lLEtBQW1CLENBRXRELElBREFzRixLQUNNckgsRUFBSSxFQUFPaWlCLEVBQUpqaUIsRUFBbUJBLElBQy9CcWhCLEVBQVlFLEVBQVV2aEIsR0FHdEI0akIsRUFBTXZDLEVBQVU5a0IsU0FBVyxJQUV0QjhLLEVBQVN1YyxLQUFVbHBCLFlBQ3ZCMk0sRUFBU3VjLEdBQVF2QyxFQUFVelgsYUFDMUJ6TyxFQUFReW9CLEVBQUs5bEIsTUFBT29hLE1BQU8xTCxJQUFTLEVBQ3BDclIsRUFBTytDLEtBQU0wbEIsRUFBSzlsQixLQUFNLE1BQVEwTyxJQUFReE8sUUFFckNxSixFQUFTdWMsSUFDYnZjLEVBQVF6TCxLQUFNeWxCLEVBR1hoYSxHQUFRckosUUFDWnFsQixFQUFhem5CLE1BQU9pQyxLQUFNMk8sRUFBSytVLFNBQVVsYSxJQVc3QyxNQUpxQmthLEdBQVN2akIsT0FBekJpa0IsR0FDSm9CLEVBQWF6bkIsTUFBT2lDLEtBQU1DLEtBQU15akIsU0FBVUEsRUFBU3psQixNQUFPbW1CLEtBR3BEb0IsR0FJUlEsTUFBTyx3SEFBd0hyZCxNQUFNLEtBRXJJc2QsWUFFQUMsVUFDQ0YsTUFBTyw0QkFBNEJyZCxNQUFNLEtBQ3pDcUgsT0FBUSxTQUFVaVQsRUFBT2tELEdBT3hCLE1BSm9CLE9BQWZsRCxFQUFNbUQsUUFDVm5ELEVBQU1tRCxNQUE2QixNQUFyQkQsRUFBU0UsU0FBbUJGLEVBQVNFLFNBQVdGLEVBQVNHLFNBR2pFckQsSUFJVHNELFlBQ0NQLE1BQU8sdUZBQXVGcmQsTUFBTSxLQUNwR3FILE9BQVEsU0FBVWlULEVBQU9rRCxHQUN4QixHQUFJSyxHQUFVblgsRUFBS21PLEVBQ2xCeEksRUFBU21SLEVBQVNuUixNQWtCbkIsT0Fmb0IsT0FBZmlPLEVBQU13RCxPQUFxQyxNQUFwQk4sRUFBU08sVUFDcENGLEVBQVd2RCxFQUFNaGdCLE9BQU94QyxlQUFpQnZELEVBQ3pDbVMsRUFBTW1YLEVBQVNwcEIsZ0JBQ2ZvZ0IsRUFBT2dKLEVBQVNoSixLQUVoQnlGLEVBQU13RCxNQUFRTixFQUFTTyxTQUFZclgsR0FBT0EsRUFBSXNYLFlBQWNuSixHQUFRQSxFQUFLbUosWUFBYyxJQUFRdFgsR0FBT0EsRUFBSXVYLFlBQWNwSixHQUFRQSxFQUFLb0osWUFBYyxHQUNuSjNELEVBQU00RCxNQUFRVixFQUFTVyxTQUFZelgsR0FBT0EsRUFBSTBYLFdBQWN2SixHQUFRQSxFQUFLdUosV0FBYyxJQUFRMVgsR0FBT0EsRUFBSTJYLFdBQWN4SixHQUFRQSxFQUFLd0osV0FBYyxJQUs5SS9ELEVBQU1tRCxPQUFTcFIsSUFBV25ZLFlBQy9Cb21CLEVBQU1tRCxNQUFtQixFQUFUcFIsRUFBYSxFQUFlLEVBQVRBLEVBQWEsRUFBZSxFQUFUQSxFQUFhLEVBQUksR0FHakVpTyxJQUlUc0MsSUFBSyxTQUFVdEMsR0FDZCxHQUFLQSxFQUFPM2xCLEVBQU84RixTQUNsQixNQUFPNmYsRUFJUixJQUFJOWdCLEdBQUcwYyxFQUFNL2IsRUFDWm9CLEVBQU8rZSxFQUFNL2UsS0FDYitpQixFQUFnQmhFLEVBQ2hCaUUsRUFBVWpuQixLQUFLZ21CLFNBQVUvaEIsRUFFcEJnakIsS0FDTGpuQixLQUFLZ21CLFNBQVUvaEIsR0FBU2dqQixFQUN2QnhFLEVBQVloaUIsS0FBTXdELEdBQVNqRSxLQUFLc21CLFdBQ2hDOUQsRUFBVS9oQixLQUFNd0QsR0FBU2pFLEtBQUtpbUIsYUFHaENwakIsRUFBT29rQixFQUFRbEIsTUFBUS9sQixLQUFLK2xCLE1BQU1ub0IsT0FBUXFwQixFQUFRbEIsT0FBVS9sQixLQUFLK2xCLE1BRWpFL0MsRUFBUSxHQUFJM2xCLEdBQU93bkIsTUFBT21DLEdBRTFCOWtCLEVBQUlXLEVBQUszQyxNQUNULE9BQVFnQyxJQUNQMGMsRUFBTy9iLEVBQU1YLEdBQ2I4Z0IsRUFBT3BFLEdBQVNvSSxFQUFlcEksRUFlaEMsT0FWTW9FLEdBQU1oZ0IsU0FDWGdnQixFQUFNaGdCLE9BQVMvRixHQUtlLElBQTFCK2xCLEVBQU1oZ0IsT0FBT3pDLFdBQ2pCeWlCLEVBQU1oZ0IsT0FBU2dnQixFQUFNaGdCLE9BQU9sQyxZQUd0Qm1tQixFQUFRbFgsT0FBUWtYLEVBQVFsWCxPQUFRaVQsRUFBT2dFLEdBQWtCaEUsR0FHakVRLFNBQ0MwRCxNQUVDbEMsVUFBVSxHQUVYN1EsT0FFQ3JRLFFBQVMsV0FDUixNQUFLOUQsUUFBUzhpQixLQUF1QjlpQixLQUFLbVUsT0FDekNuVSxLQUFLbVUsU0FDRSxHQUZSLFdBS0Q2UCxhQUFjLFdBRWZtRCxNQUNDcmpCLFFBQVMsV0FDUixNQUFLOUQsUUFBUzhpQixLQUF1QjlpQixLQUFLbW5CLE1BQ3pDbm5CLEtBQUttbkIsUUFDRSxHQUZSLFdBS0RuRCxhQUFjLFlBRWZvRCxPQUVDdGpCLFFBQVMsV0FDUixNQUFtQixhQUFkOUQsS0FBS2lFLE1BQXVCakUsS0FBS29uQixPQUFTL3BCLEVBQU9zSixTQUFVM0csS0FBTSxVQUNyRUEsS0FBS29uQixTQUNFLEdBRlIsV0FPRC9CLFNBQVUsU0FBVXJDLEdBQ25CLE1BQU8zbEIsR0FBT3NKLFNBQVVxYyxFQUFNaGdCLE9BQVEsT0FJeENxa0IsY0FDQ3hCLGFBQWMsU0FBVTdDLEdBSWxCQSxFQUFNcFEsU0FBV2hXLFlBQ3JCb21CLEVBQU1nRSxjQUFjTSxZQUFjdEUsRUFBTXBRLFdBTTVDMlUsU0FBVSxTQUFVdGpCLEVBQU1sRSxFQUFNaWpCLEVBQU93RSxHQUl0QyxHQUFJL2lCLEdBQUlwSCxFQUFPb0YsT0FDZCxHQUFJcEYsR0FBT3duQixNQUNYN0IsR0FFQy9lLEtBQU1BLEVBQ053akIsYUFBYSxFQUNiVCxrQkFHR1EsR0FDSm5xQixFQUFPMmxCLE1BQU1sZixRQUFTVyxFQUFHLEtBQU0xRSxHQUUvQjFDLEVBQU8ybEIsTUFBTWUsU0FBUzlpQixLQUFNbEIsRUFBTTBFLEdBRTlCQSxFQUFFMmdCLHNCQUNOcEMsRUFBTW1DLG1CQUtUOW5CLEVBQU9tbkIsWUFBYyxTQUFVemtCLEVBQU1rRSxFQUFNNGYsR0FDckM5akIsRUFBS04scUJBQ1RNLEVBQUtOLG9CQUFxQndFLEVBQU00ZixHQUFRLElBSTFDeG1CLEVBQU93bkIsTUFBUSxTQUFVamlCLEVBQUttakIsR0FFN0IsTUFBTy9sQixnQkFBZ0IzQyxHQUFPd25CLE9BS3pCamlCLEdBQU9BLEVBQUlxQixNQUNmakUsS0FBS2duQixjQUFnQnBrQixFQUNyQjVDLEtBQUtpRSxLQUFPckIsRUFBSXFCLEtBSWhCakUsS0FBS29sQixtQkFBdUJ4aUIsRUFBSThrQixrQkFDL0I5a0IsRUFBSStrQixtQkFBcUIva0IsRUFBSStrQixvQkFBd0IvRSxFQUFhQyxHQUluRTdpQixLQUFLaUUsS0FBT3JCLEVBSVJtakIsR0FDSjFvQixFQUFPb0YsT0FBUXpDLEtBQU0rbEIsR0FJdEIvbEIsS0FBSzRuQixVQUFZaGxCLEdBQU9BLEVBQUlnbEIsV0FBYXZxQixFQUFPNEssTUFHaERqSSxLQUFNM0MsRUFBTzhGLFVBQVksRUF2QnpCLFdBSlEsR0FBSTlGLEdBQU93bkIsTUFBT2ppQixFQUFLbWpCLElBZ0NoQzFvQixFQUFPd25CLE1BQU1sbEIsV0FDWnlsQixtQkFBb0J2QyxFQUNwQnFDLHFCQUFzQnJDLEVBQ3RCOEMsOEJBQStCOUMsRUFFL0JzQyxlQUFnQixXQUNmLEdBQUkxZ0IsR0FBSXpFLEtBQUtnbkIsYUFFYmhuQixNQUFLb2xCLG1CQUFxQnhDLEVBRXJCbmUsR0FBS0EsRUFBRTBnQixnQkFDWDFnQixFQUFFMGdCLGtCQUdKUyxnQkFBaUIsV0FDaEIsR0FBSW5oQixHQUFJekUsS0FBS2duQixhQUViaG5CLE1BQUtrbEIscUJBQXVCdEMsRUFFdkJuZSxHQUFLQSxFQUFFbWhCLGlCQUNYbmhCLEVBQUVtaEIsbUJBR0ppQyx5QkFBMEIsV0FDekI3bkIsS0FBSzJsQiw4QkFBZ0MvQyxFQUNyQzVpQixLQUFLNGxCLG9CQU1Qdm9CLEVBQU9tRSxNQUNOc21CLFdBQVksWUFDWkMsV0FBWSxZQUNWLFNBQVVDLEVBQU0xQyxHQUNsQmpvQixFQUFPMmxCLE1BQU1RLFFBQVN3RSxJQUNyQmhFLGFBQWNzQixFQUNkckIsU0FBVXFCLEVBRVZ6QixPQUFRLFNBQVViLEdBQ2pCLEdBQUkxaEIsR0FDSDBCLEVBQVNoRCxLQUNUaW9CLEVBQVVqRixFQUFNa0YsY0FDaEIzRSxFQUFZUCxFQUFNTyxTQVNuQixTQUxNMEUsR0FBWUEsSUFBWWpsQixJQUFXM0YsRUFBT21NLFNBQVV4RyxFQUFRaWxCLE1BQ2pFakYsRUFBTS9lLEtBQU9zZixFQUFVSSxTQUN2QnJpQixFQUFNaWlCLEVBQVVoVixRQUFRMU0sTUFBTzdCLEtBQU04QixXQUNyQ2toQixFQUFNL2UsS0FBT3FoQixHQUVQaGtCLE1BT0pqRSxFQUFPc0wsUUFBUXNVLGdCQUNwQjVmLEVBQU9tRSxNQUFPMlMsTUFBTyxVQUFXZ1QsS0FBTSxZQUFjLFNBQVVhLEVBQU0xQyxHQUduRSxHQUFJNkMsR0FBVyxFQUNkNVosRUFBVSxTQUFVeVUsR0FDbkIzbEIsRUFBTzJsQixNQUFNdUUsU0FBVWpDLEVBQUt0QyxFQUFNaGdCLE9BQVEzRixFQUFPMmxCLE1BQU1zQyxJQUFLdEMsSUFBUyxHQUd2RTNsQixHQUFPMmxCLE1BQU1RLFFBQVM4QixJQUNyQmxCLE1BQU8sV0FDYyxJQUFmK0QsS0FDSmxyQixFQUFTd0wsaUJBQWtCdWYsRUFBTXpaLEdBQVMsSUFHNUNnVyxTQUFVLFdBQ1csTUFBYjRELEdBQ05sckIsRUFBU3dDLG9CQUFxQnVvQixFQUFNelosR0FBUyxPQU9sRGxSLEVBQU9zQixHQUFHOEQsUUFFVDJsQixHQUFJLFNBQVVsRixFQUFPemtCLEVBQVVxRyxFQUFNbkcsRUFBaUJnakIsR0FDckQsR0FBSTBHLEdBQVFwa0IsQ0FHWixJQUFzQixnQkFBVmlmLEdBQXFCLENBRVAsZ0JBQWJ6a0IsS0FFWHFHLEVBQU9BLEdBQVFyRyxFQUNmQSxFQUFXN0IsVUFFWixLQUFNcUgsSUFBUWlmLEdBQ2JsakIsS0FBS29vQixHQUFJbmtCLEVBQU14RixFQUFVcUcsRUFBTW9lLEVBQU9qZixHQUFRMGQsRUFFL0MsT0FBTzNoQixNQW1CUixHQWhCYSxNQUFSOEUsR0FBc0IsTUFBTm5HLEdBRXBCQSxFQUFLRixFQUNMcUcsRUFBT3JHLEVBQVc3QixXQUNELE1BQU4rQixJQUNjLGdCQUFiRixJQUVYRSxFQUFLbUcsRUFDTEEsRUFBT2xJLFlBR1ArQixFQUFLbUcsRUFDTEEsRUFBT3JHLEVBQ1BBLEVBQVc3QixZQUdSK0IsS0FBTyxFQUNYQSxFQUFLa2tCLE1BQ0MsS0FBTWxrQixFQUNaLE1BQU9xQixLQWFSLE9BVmEsS0FBUjJoQixJQUNKMEcsRUFBUzFwQixFQUNUQSxFQUFLLFNBQVVxa0IsR0FHZCxNQURBM2xCLEtBQVMwRyxJQUFLaWYsR0FDUHFGLEVBQU94bUIsTUFBTzdCLEtBQU04QixZQUc1Qm5ELEVBQUc4SSxLQUFPNGdCLEVBQU81Z0IsT0FBVTRnQixFQUFPNWdCLEtBQU9wSyxFQUFPb0ssU0FFMUN6SCxLQUFLd0IsS0FBTSxXQUNqQm5FLEVBQU8ybEIsTUFBTTdJLElBQUtuYSxLQUFNa2pCLEVBQU92a0IsRUFBSW1HLEVBQU1yRyxNQUczQ2tqQixJQUFLLFNBQVV1QixFQUFPemtCLEVBQVVxRyxFQUFNbkcsR0FDckMsTUFBT3FCLE1BQUtvb0IsR0FBSWxGLEVBQU96a0IsRUFBVXFHLEVBQU1uRyxFQUFJLElBRTVDb0YsSUFBSyxTQUFVbWYsRUFBT3prQixFQUFVRSxHQUMvQixHQUFJNGtCLEdBQVd0ZixDQUNmLElBQUtpZixHQUFTQSxFQUFNaUMsZ0JBQWtCakMsRUFBTUssVUFRM0MsTUFOQUEsR0FBWUwsRUFBTUssVUFDbEJsbUIsRUFBUTZsQixFQUFNc0MsZ0JBQWlCemhCLElBQzlCd2YsRUFBVVcsVUFBWVgsRUFBVUksU0FBVyxJQUFNSixFQUFVVyxVQUFZWCxFQUFVSSxTQUNqRkosRUFBVTlrQixTQUNWOGtCLEVBQVVoVixTQUVKdk8sSUFFUixJQUFzQixnQkFBVmtqQixHQUFxQixDQUVoQyxJQUFNamYsSUFBUWlmLEdBQ2JsakIsS0FBSytELElBQUtFLEVBQU14RixFQUFVeWtCLEVBQU9qZixHQUVsQyxPQUFPakUsTUFVUixPQVJLdkIsS0FBYSxHQUE2QixrQkFBYkEsTUFFakNFLEVBQUtGLEVBQ0xBLEVBQVc3QixXQUVQK0IsS0FBTyxJQUNYQSxFQUFLa2tCLEdBRUM3aUIsS0FBS3dCLEtBQUssV0FDaEJuRSxFQUFPMmxCLE1BQU01ZCxPQUFRcEYsS0FBTWtqQixFQUFPdmtCLEVBQUlGLE1BSXhDcUYsUUFBUyxTQUFVRyxFQUFNYSxHQUN4QixNQUFPOUUsTUFBS3dCLEtBQUssV0FDaEJuRSxFQUFPMmxCLE1BQU1sZixRQUFTRyxFQUFNYSxFQUFNOUUsU0FHcENzb0IsZUFBZ0IsU0FBVXJrQixFQUFNYSxHQUMvQixHQUFJL0UsR0FBT0MsS0FBSyxFQUNoQixPQUFLRCxHQUNHMUMsRUFBTzJsQixNQUFNbGYsUUFBU0csRUFBTWEsRUFBTS9FLEdBQU0sR0FEaEQsWUFLRixJQUFJd29CLEdBQVcsaUJBQ2RDLEVBQWUsaUNBQ2ZDLEVBQWdCcHJCLEVBQU84VCxLQUFLclIsTUFBTWdNLGFBRWxDNGMsR0FDQ0MsVUFBVSxFQUNWQyxVQUFVLEVBQ1ZoSixNQUFNLEVBQ05pSixNQUFNLEVBR1J4ckIsR0FBT3NCLEdBQUc4RCxRQUNUckMsS0FBTSxTQUFVM0IsR0FDZixHQUFJeUQsR0FDSFosS0FDQTJZLEVBQU9qYSxLQUNQbUMsRUFBTThYLEVBQUsvWixNQUVaLElBQXlCLGdCQUFiekIsR0FDWCxNQUFPdUIsTUFBS29CLFVBQVcvRCxFQUFRb0IsR0FBV3NSLE9BQU8sV0FDaEQsSUFBTTdOLEVBQUksRUFBT0MsRUFBSkQsRUFBU0EsSUFDckIsR0FBSzdFLEVBQU9tTSxTQUFVeVEsRUFBTS9YLEdBQUtsQyxNQUNoQyxPQUFPLElBTVgsS0FBTWtDLEVBQUksRUFBT0MsRUFBSkQsRUFBU0EsSUFDckI3RSxFQUFPK0MsS0FBTTNCLEVBQVV3YixFQUFNL1gsR0FBS1osRUFNbkMsT0FGQUEsR0FBTXRCLEtBQUtvQixVQUFXZSxFQUFNLEVBQUk5RSxFQUFPMGIsT0FBUXpYLEdBQVFBLEdBQ3ZEQSxFQUFJN0MsU0FBV3VCLEtBQUt2QixTQUFXdUIsS0FBS3ZCLFNBQVcsSUFBTUEsRUFBV0EsRUFDekQ2QyxHQUdSdVMsSUFBSyxTQUFVN1EsR0FDZCxHQUFJOGxCLEdBQVV6ckIsRUFBUTJGLEVBQVFoRCxNQUM3Qm9ILEVBQUkwaEIsRUFBUTVvQixNQUViLE9BQU9GLE1BQUsrUCxPQUFPLFdBQ2xCLEdBQUk3TixHQUFJLENBQ1IsTUFBWWtGLEVBQUpsRixFQUFPQSxJQUNkLEdBQUs3RSxFQUFPbU0sU0FBVXhKLEtBQU04b0IsRUFBUTVtQixJQUNuQyxPQUFPLEtBTVh3UixJQUFLLFNBQVVqVixHQUNkLE1BQU91QixNQUFLb0IsVUFBVzJuQixHQUFPL29CLEtBQU12QixPQUFnQixLQUdyRHNSLE9BQVEsU0FBVXRSLEdBQ2pCLE1BQU91QixNQUFLb0IsVUFBVzJuQixHQUFPL29CLEtBQU12QixPQUFnQixLQUdyRHVxQixHQUFJLFNBQVV2cUIsR0FDYixRQUFTc3FCLEdBQ1Ivb0IsS0FJb0IsZ0JBQWJ2QixJQUF5QmdxQixFQUFjaG9CLEtBQU1oQyxHQUNuRHBCLEVBQVFvQixHQUNSQSxPQUNELEdBQ0N5QixRQUdIK29CLFFBQVMsU0FBVXBYLEVBQVduVCxHQUM3QixHQUFJZ1EsR0FDSHhNLEVBQUksRUFDSmtGLEVBQUlwSCxLQUFLRSxPQUNUdVQsS0FDQXlWLEVBQVFULEVBQWNob0IsS0FBTW9SLElBQW9DLGdCQUFkQSxHQUNqRHhVLEVBQVF3VSxFQUFXblQsR0FBV3NCLEtBQUt0QixTQUNuQyxDQUVGLE1BQVkwSSxFQUFKbEYsRUFBT0EsSUFDZCxJQUFNd00sRUFBTTFPLEtBQUtrQyxHQUFJd00sR0FBT0EsSUFBUWhRLEVBQVNnUSxFQUFNQSxFQUFJNU4sV0FFdEQsR0FBb0IsR0FBZjROLEVBQUluTyxXQUFrQjJvQixFQUMxQkEsRUFBSTlPLE1BQU0xTCxHQUFPLEdBR0EsSUFBakJBLEVBQUluTyxVQUNIbEQsRUFBTytDLEtBQUtnUSxnQkFBZ0IxQixFQUFLbUQsSUFBYyxDQUVoRG5ELEVBQU0rRSxFQUFRM1YsS0FBTTRRLEVBQ3BCLE9BS0gsTUFBTzFPLE1BQUtvQixVQUFXcVMsRUFBUXZULE9BQVMsRUFBSTdDLEVBQU8wYixPQUFRdEYsR0FBWUEsSUFLeEUyRyxNQUFPLFNBQVVyYSxHQUdoQixNQUFNQSxHQUtlLGdCQUFUQSxHQUNKOUIsRUFBYWdELEtBQU01RCxFQUFRMEMsR0FBUUMsS0FBTSxJQUkxQy9CLEVBQWFnRCxLQUFNakIsS0FHekJELEVBQUtILE9BQVNHLEVBQU0sR0FBTUEsR0FaakJDLEtBQU0sSUFBT0EsS0FBTSxHQUFJYyxXQUFlZCxLQUFLK0IsUUFBUW9uQixVQUFVanBCLE9BQVMsSUFnQmpGaWEsSUFBSyxTQUFVMWIsRUFBVUMsR0FDeEIsR0FBSWlnQixHQUEwQixnQkFBYmxnQixHQUNmcEIsRUFBUW9CLEVBQVVDLEdBQ2xCckIsRUFBTzBELFVBQVd0QyxHQUFZQSxFQUFTOEIsVUFBYTlCLEdBQWFBLEdBQ2xFWSxFQUFNaEMsRUFBT2dELE1BQU9MLEtBQUtrQixNQUFPeWQsRUFFakMsT0FBTzNlLE1BQUtvQixVQUFXL0QsRUFBTzBiLE9BQU8xWixLQUd0QytwQixRQUFTLFNBQVUzcUIsR0FDbEIsTUFBT3VCLE1BQUttYSxJQUFpQixNQUFaMWIsRUFDaEJ1QixLQUFLdUIsV0FBYXZCLEtBQUt1QixXQUFXd08sT0FBT3RSLE1BSzVDLFNBQVM0cUIsR0FBUzNhLEVBQUt1RCxHQUN0QixPQUFTdkQsRUFBTUEsRUFBSXVELEtBQTBCLElBQWpCdkQsRUFBSW5PLFVBRWhDLE1BQU9tTyxHQUdSclIsRUFBT21FLE1BQ042TixPQUFRLFNBQVV0UCxHQUNqQixHQUFJc1AsR0FBU3RQLEVBQUtlLFVBQ2xCLE9BQU91TyxJQUE4QixLQUFwQkEsRUFBTzlPLFNBQWtCOE8sRUFBUyxNQUVwRGlhLFFBQVMsU0FBVXZwQixHQUNsQixNQUFPMUMsR0FBTzRVLElBQUtsUyxFQUFNLGVBRTFCd3BCLGFBQWMsU0FBVXhwQixFQUFNbUMsRUFBR3NuQixHQUNoQyxNQUFPbnNCLEdBQU80VSxJQUFLbFMsRUFBTSxhQUFjeXBCLElBRXhDNUosS0FBTSxTQUFVN2YsR0FDZixNQUFPc3BCLEdBQVN0cEIsRUFBTSxnQkFFdkI4b0IsS0FBTSxTQUFVOW9CLEdBQ2YsTUFBT3NwQixHQUFTdHBCLEVBQU0sb0JBRXZCMHBCLFFBQVMsU0FBVTFwQixHQUNsQixNQUFPMUMsR0FBTzRVLElBQUtsUyxFQUFNLGdCQUUxQm9wQixRQUFTLFNBQVVwcEIsR0FDbEIsTUFBTzFDLEdBQU80VSxJQUFLbFMsRUFBTSxvQkFFMUIycEIsVUFBVyxTQUFVM3BCLEVBQU1tQyxFQUFHc25CLEdBQzdCLE1BQU9uc0IsR0FBTzRVLElBQUtsUyxFQUFNLGNBQWV5cEIsSUFFekNHLFVBQVcsU0FBVTVwQixFQUFNbUMsRUFBR3NuQixHQUM3QixNQUFPbnNCLEdBQU80VSxJQUFLbFMsRUFBTSxrQkFBbUJ5cEIsSUFFN0NJLFNBQVUsU0FBVTdwQixHQUNuQixNQUFPMUMsR0FBT2dzQixTQUFXdHBCLEVBQUtlLGdCQUFtQjhPLFdBQVk3UCxJQUU5RDRvQixTQUFVLFNBQVU1b0IsR0FDbkIsTUFBTzFDLEdBQU9nc0IsUUFBU3RwQixFQUFLNlAsYUFFN0JnWixTQUFVLFNBQVU3b0IsR0FDbkIsTUFBT0EsR0FBSzhwQixpQkFBbUJ4c0IsRUFBT2dELFNBQVdOLEVBQUtzRixjQUVyRCxTQUFVMUMsRUFBTWhFLEdBQ2xCdEIsRUFBT3NCLEdBQUlnRSxHQUFTLFNBQVU2bUIsRUFBTy9xQixHQUNwQyxHQUFJZ1YsR0FBVXBXLEVBQU9nRixJQUFLckMsS0FBTXJCLEVBQUk2cUIsRUFzQnBDLE9BcEIwQixVQUFyQjdtQixFQUFLM0UsTUFBTyxNQUNoQlMsRUFBVytxQixHQUdQL3FCLEdBQWdDLGdCQUFiQSxLQUN2QmdWLEVBQVVwVyxFQUFPMFMsT0FBUXRSLEVBQVVnVixJQUcvQnpULEtBQUtFLE9BQVMsSUFFWndvQixFQUFrQi9sQixJQUN2QnRGLEVBQU8wYixPQUFRdEYsR0FJWCtVLEVBQWEvbkIsS0FBTWtDLElBQ3ZCOFEsRUFBUXFXLFdBSUg5cEIsS0FBS29CLFVBQVdxUyxNQUl6QnBXLEVBQU9vRixRQUNOc04sT0FBUSxTQUFVb0IsRUFBTTlQLEVBQU9xUyxHQUM5QixHQUFJM1QsR0FBT3NCLEVBQU8sRUFNbEIsT0FKS3FTLEtBQ0p2QyxFQUFPLFFBQVVBLEVBQU8sS0FHRCxJQUFqQjlQLEVBQU1uQixRQUFrQyxJQUFsQkgsRUFBS1EsU0FDakNsRCxFQUFPK0MsS0FBS2dRLGdCQUFpQnJRLEVBQU1vUixJQUFXcFIsTUFDOUMxQyxFQUFPK0MsS0FBS21KLFFBQVM0SCxFQUFNOVQsRUFBT2dLLEtBQU1oRyxFQUFPLFNBQVV0QixHQUN4RCxNQUF5QixLQUFsQkEsRUFBS1EsYUFJZjBSLElBQUssU0FBVWxTLEVBQU1rUyxFQUFLdVgsR0FDekIsR0FBSS9WLE1BQ0hzVyxFQUFXUCxJQUFVNXNCLFNBRXRCLFFBQVNtRCxFQUFPQSxFQUFNa1MsS0FBNEIsSUFBbEJsUyxFQUFLUSxTQUNwQyxHQUF1QixJQUFsQlIsRUFBS1EsU0FBaUIsQ0FDMUIsR0FBS3dwQixHQUFZMXNCLEVBQVEwQyxHQUFPaXBCLEdBQUlRLEdBQ25DLEtBRUQvVixHQUFRM1YsS0FBTWlDLEdBR2hCLE1BQU8wVCxJQUdSNFYsUUFBUyxTQUFVVyxFQUFHanFCLEdBQ3JCLEdBQUkwVCxLQUVKLE1BQVF1VyxFQUFHQSxFQUFJQSxFQUFFbmIsWUFDSSxJQUFmbWIsRUFBRXpwQixVQUFrQnlwQixJQUFNanFCLEdBQzlCMFQsRUFBUTNWLEtBQU1rc0IsRUFJaEIsT0FBT3ZXLEtBS1QsU0FBU3NWLElBQVEzWCxFQUFVNlksRUFBV3ZXLEdBQ3JDLEdBQUtyVyxFQUFPc0QsV0FBWXNwQixHQUN2QixNQUFPNXNCLEdBQU9nSyxLQUFNK0osRUFBVSxTQUFVclIsRUFBTW1DLEdBRTdDLFFBQVMrbkIsRUFBVWhwQixLQUFNbEIsRUFBTW1DLEVBQUduQyxLQUFXMlQsR0FLL0MsSUFBS3VXLEVBQVUxcEIsU0FDZCxNQUFPbEQsR0FBT2dLLEtBQU0rSixFQUFVLFNBQVVyUixHQUN2QyxNQUFTQSxLQUFTa3FCLElBQWdCdlcsR0FLcEMsSUFBMEIsZ0JBQWR1VyxHQUF5QixDQUNwQyxHQUFLMUIsRUFBUzluQixLQUFNd3BCLEdBQ25CLE1BQU81c0IsR0FBTzBTLE9BQVFrYSxFQUFXN1ksRUFBVXNDLEVBRzVDdVcsR0FBWTVzQixFQUFPMFMsT0FBUWthLEVBQVc3WSxHQUd2QyxNQUFPL1QsR0FBT2dLLEtBQU0rSixFQUFVLFNBQVVyUixHQUN2QyxNQUFTOUIsR0FBYWdELEtBQU1ncEIsRUFBV2xxQixJQUFVLElBQVEyVCxJQUczRCxHQUFJd1csSUFBWSwwRUFDZkMsR0FBVyxZQUNYQyxHQUFRLFlBQ1JDLEdBQWUsMEJBQ2ZDLEdBQThCLHdCQUU5QkMsR0FBVyxvQ0FDWEMsR0FBYyw0QkFDZEMsR0FBb0IsY0FDcEJDLEdBQWUsMkNBR2ZDLElBR0NqSixRQUFVLEVBQUcsK0JBQWdDLGFBRTdDa0osT0FBUyxFQUFHLFVBQVcsWUFDdkJDLEtBQU8sRUFBRyxvQkFBcUIsdUJBQy9CQyxJQUFNLEVBQUcsaUJBQWtCLG9CQUMzQkMsSUFBTSxFQUFHLHFCQUFzQix5QkFFL0IxRixVQUFZLEVBQUcsR0FBSSxJQUlyQnNGLElBQVFLLFNBQVdMLEdBQVFqSixPQUUzQmlKLEdBQVFNLE1BQVFOLEdBQVFPLE1BQVFQLEdBQVFRLFNBQVdSLEdBQVFTLFFBQVVULEdBQVFDLE1BQzdFRCxHQUFRVSxHQUFLVixHQUFRSSxHQUVyQjF0QixFQUFPc0IsR0FBRzhELFFBQ1Q0RCxLQUFNLFNBQVVRLEdBQ2YsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTSxTQUFVNkcsR0FDckMsTUFBT0EsS0FBVWpLLFVBQ2hCUyxFQUFPZ0osS0FBTXJHLE1BQ2JBLEtBQUs2VSxRQUFReVcsUUFBVXRyQixLQUFNLElBQU9BLEtBQU0sR0FBSVEsZUFBaUJ2RCxHQUFXc3VCLGVBQWdCMWtCLEtBQ3pGLEtBQU1BLEVBQU8vRSxVQUFVNUIsU0FHM0JvckIsT0FBUSxXQUNQLE1BQU90ckIsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQzFDLEdBQXVCLElBQWxCQyxLQUFLTyxVQUFvQyxLQUFsQlAsS0FBS08sVUFBcUMsSUFBbEJQLEtBQUtPLFNBQWlCLENBQ3pFLEdBQUl5QyxHQUFTeW9CLEdBQW9CenJCLEtBQU1ELEVBQ3ZDaUQsR0FBT3VELFlBQWF4RyxPQUt2QjJyQixRQUFTLFdBQ1IsTUFBTzFyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDMUMsR0FBdUIsSUFBbEJDLEtBQUtPLFVBQW9DLEtBQWxCUCxLQUFLTyxVQUFxQyxJQUFsQlAsS0FBS08sU0FBaUIsQ0FDekUsR0FBSXlDLEdBQVN5b0IsR0FBb0J6ckIsS0FBTUQsRUFDdkNpRCxHQUFPMm9CLGFBQWM1ckIsRUFBTWlELEVBQU80TSxnQkFLckNnYyxPQUFRLFdBQ1AsTUFBTzVyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDckNDLEtBQUtjLFlBQ1RkLEtBQUtjLFdBQVc2cUIsYUFBYzVyQixFQUFNQyxTQUt2QzZyQixNQUFPLFdBQ04sTUFBTzdyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDckNDLEtBQUtjLFlBQ1RkLEtBQUtjLFdBQVc2cUIsYUFBYzVyQixFQUFNQyxLQUFLNk8sZ0JBTTVDekosT0FBUSxTQUFVM0csRUFBVXF0QixHQUMzQixHQUFJL3JCLEdBQ0hzQixFQUFRNUMsRUFBV3BCLEVBQU8wUyxPQUFRdFIsRUFBVXVCLE1BQVNBLEtBQ3JEa0MsRUFBSSxDQUVMLE1BQTZCLE9BQXBCbkMsRUFBT3NCLEVBQU1hLElBQWFBLElBQzVCNHBCLEdBQThCLElBQWxCL3JCLEVBQUtRLFVBQ3RCbEQsRUFBTzB1QixVQUFXQyxHQUFRanNCLElBR3RCQSxFQUFLZSxhQUNKZ3JCLEdBQVl6dUIsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxJQUNyRGtzQixHQUFlRCxHQUFRanNCLEVBQU0sV0FFOUJBLEVBQUtlLFdBQVcwRixZQUFhekcsR0FJL0IsT0FBT0MsT0FHUjZVLE1BQU8sV0FDTixHQUFJOVUsR0FDSG1DLEVBQUksQ0FFTCxNQUE0QixPQUFuQm5DLEVBQU9DLEtBQUtrQyxJQUFhQSxJQUNWLElBQWxCbkMsRUFBS1EsV0FHVGxELEVBQU8wdUIsVUFBV0MsR0FBUWpzQixHQUFNLElBR2hDQSxFQUFLNFIsWUFBYyxHQUlyQixPQUFPM1IsT0FHUitDLE1BQU8sU0FBVW1wQixFQUFlQyxHQUkvQixNQUhBRCxHQUFpQyxNQUFqQkEsR0FBd0IsRUFBUUEsRUFDaERDLEVBQXlDLE1BQXJCQSxFQUE0QkQsRUFBZ0JDLEVBRXpEbnNCLEtBQUtxQyxJQUFLLFdBQ2hCLE1BQU9oRixHQUFPMEYsTUFBTy9DLEtBQU1rc0IsRUFBZUMsTUFJNUNDLEtBQU0sU0FBVXZsQixHQUNmLE1BQU94SixHQUFPc0ssT0FBUTNILEtBQU0sU0FBVTZHLEdBQ3JDLEdBQUk5RyxHQUFPQyxLQUFNLE9BQ2hCa0MsRUFBSSxFQUNKa0YsRUFBSXBILEtBQUtFLE1BRVYsSUFBSzJHLElBQVVqSyxXQUErQixJQUFsQm1ELEVBQUtRLFNBQ2hDLE1BQU9SLEdBQUs0UCxTQUliLElBQXNCLGdCQUFWOUksS0FBdUJ3akIsR0FBYTVwQixLQUFNb0csS0FDcEQ4akIsSUFBV1IsR0FBU2hxQixLQUFNMEcsS0FBYSxHQUFJLEtBQVEsR0FBSUQsZUFBa0IsQ0FFMUVDLEVBQVFBLEVBQU12RCxRQUFTNG1CLEdBQVcsWUFFbEMsS0FDQyxLQUFZOWlCLEVBQUpsRixFQUFPQSxJQUNkbkMsRUFBT0MsS0FBTWtDLE9BR1UsSUFBbEJuQyxFQUFLUSxXQUNUbEQsRUFBTzB1QixVQUFXQyxHQUFRanNCLEdBQU0sSUFDaENBLEVBQUs0UCxVQUFZOUksRUFJbkI5RyxHQUFPLEVBR04sTUFBTzBFLEtBR0wxRSxHQUNKQyxLQUFLNlUsUUFBUXlXLE9BQVF6a0IsSUFFcEIsS0FBTUEsRUFBTy9FLFVBQVU1QixTQUczQm1zQixZQUFhLFdBQ1osR0FFQzNxQixHQUFPckUsRUFBT2dGLElBQUtyQyxLQUFNLFNBQVVELEdBQ2xDLE9BQVNBLEVBQUs4TyxZQUFhOU8sRUFBS2UsY0FFakNvQixFQUFJLENBbUJMLE9BaEJBbEMsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQ25DLEdBQUk2ZixHQUFPbGUsRUFBTVEsS0FDaEJtTixFQUFTM04sRUFBTVEsSUFFWG1OLEtBRUN1USxHQUFRQSxFQUFLOWUsYUFBZXVPLElBQ2hDdVEsRUFBTzVmLEtBQUs2TyxhQUVieFIsRUFBUTJDLE1BQU9vRixTQUNmaUssRUFBT3NjLGFBQWM1ckIsRUFBTTZmLE1BRzFCLEdBR0kxZCxFQUFJbEMsS0FBT0EsS0FBS29GLFVBR3hCa25CLE9BQVEsU0FBVTd0QixHQUNqQixNQUFPdUIsTUFBS29GLE9BQVEzRyxHQUFVLElBRy9CK3NCLFNBQVUsU0FBVTlwQixFQUFNRCxFQUFVOHFCLEdBR25DN3FCLEVBQU8vRCxFQUFZa0UsU0FBV0gsRUFFOUIsSUFBSTBhLEdBQVVyYSxFQUFPa0QsRUFBU3VuQixFQUFZcmQsRUFBTUMsRUFDL0NsTixFQUFJLEVBQ0prRixFQUFJcEgsS0FBS0UsT0FDVHllLEVBQU0zZSxLQUNOeXNCLEVBQVdybEIsRUFBSSxFQUNmUCxFQUFRbkYsRUFBTSxHQUNkZixFQUFhdEQsRUFBT3NELFdBQVlrRyxFQUdqQyxJQUFLbEcsS0FBc0IsR0FBTHlHLEdBQTJCLGdCQUFWUCxJQUFzQnhKLEVBQU9zTCxRQUFRcVUsYUFBZXVOLEdBQVM5cEIsS0FBTW9HLEdBQ3pHLE1BQU83RyxNQUFLd0IsS0FBSyxTQUFVNFksR0FDMUIsR0FBSUgsR0FBTzBFLEVBQUkzYyxHQUFJb1ksRUFDZHpaLEtBQ0plLEVBQU0sR0FBTW1GLEVBQU01RixLQUFNakIsS0FBTW9hLEVBQU9ILEVBQUttUyxTQUUzQ25TLEVBQUt1UixTQUFVOXBCLEVBQU1ELEVBQVU4cUIsSUFJakMsSUFBS25sQixJQUNKZ1YsRUFBVy9lLEVBQU84SCxjQUFlekQsRUFBTTFCLEtBQU0sR0FBSVEsZUFBZSxHQUFRK3JCLEdBQXFCdnNCLE1BQzdGK0IsRUFBUXFhLEVBQVN4TSxXQUVtQixJQUEvQndNLEVBQVMvVyxXQUFXbkYsU0FDeEJrYyxFQUFXcmEsR0FHUEEsR0FBUSxDQU1aLElBTEFrRCxFQUFVNUgsRUFBT2dGLElBQUsycEIsR0FBUTVQLEVBQVUsVUFBWXNRLElBQ3BERixFQUFhdm5CLEVBQVEvRSxPQUlUa0gsRUFBSmxGLEVBQU9BLElBQ2RpTixFQUFPaU4sRUFFRmxhLElBQU11cUIsSUFDVnRkLEVBQU85UixFQUFPMEYsTUFBT29NLEdBQU0sR0FBTSxHQUc1QnFkLEdBR0pudkIsRUFBT2dELE1BQU80RSxFQUFTK21CLEdBQVE3YyxFQUFNLFlBSXZDMU4sRUFBU1IsS0FBTWpCLEtBQU1rQyxHQUFLaU4sRUFBTWpOLEVBR2pDLElBQUtzcUIsRUFPSixJQU5BcGQsRUFBTW5LLEVBQVNBLEVBQVEvRSxPQUFTLEdBQUlNLGNBR3BDbkQsRUFBT2dGLElBQUs0QyxFQUFTMG5CLElBR2Z6cUIsRUFBSSxFQUFPc3FCLEVBQUp0cUIsRUFBZ0JBLElBQzVCaU4sRUFBT2xLLEVBQVMvQyxHQUNYc29CLEdBQVkvcEIsS0FBTTBPLEVBQUtsTCxNQUFRLE1BQ2xDK1osRUFBVXJXLE9BQVF3SCxFQUFNLGVBQWtCOVIsRUFBT21NLFNBQVU0RixFQUFLRCxLQUU1REEsRUFBS3ZNLElBRVR2RixFQUFPdXZCLFNBQVV6ZCxFQUFLdk0sS0FFdEJ2RixFQUFPMkksV0FBWW1KLEVBQUt3QyxZQUFZck8sUUFBU29uQixHQUFjLE1BUWpFLE1BQU8xcUIsU0FJVDNDLEVBQU9tRSxNQUNOcXJCLFNBQVUsU0FDVkMsVUFBVyxVQUNYbkIsYUFBYyxTQUNkb0IsWUFBYSxRQUNiQyxXQUFZLGVBQ1YsU0FBVXJxQixFQUFNdWpCLEdBQ2xCN29CLEVBQU9zQixHQUFJZ0UsR0FBUyxTQUFVbEUsR0FDN0IsR0FBSTRDLEdBQ0hDLEtBQ0EyckIsRUFBUzV2QixFQUFRb0IsR0FDakJ3RCxFQUFPZ3JCLEVBQU8vc0IsT0FBUyxFQUN2QmdDLEVBQUksQ0FFTCxNQUFhRCxHQUFMQyxFQUFXQSxJQUNsQmIsRUFBUWEsSUFBTUQsRUFBT2pDLEtBQU9BLEtBQUsrQyxPQUFPLEdBQ3hDMUYsRUFBUTR2QixFQUFRL3FCLElBQU9na0IsR0FBWTdrQixHQUluQ3hELEVBQVVnRSxNQUFPUCxFQUFLRCxFQUFNSCxNQUc3QixPQUFPbEIsTUFBS29CLFVBQVdFLE1BSXpCakUsRUFBT29GLFFBQ05NLE1BQU8sU0FBVWhELEVBQU1tc0IsRUFBZUMsR0FDckMsR0FBSWpxQixHQUFHa0YsRUFBRzhsQixFQUFhQyxFQUN0QnBxQixFQUFRaEQsRUFBSzhjLFdBQVcsR0FDeEJ1USxFQUFTL3ZCLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsRUFJL0MsTUFBTTFDLEVBQU9zTCxRQUFRaVUsZ0JBQXNDLElBQWxCN2MsRUFBS1EsVUFBb0MsS0FBbEJSLEVBQUtRLFVBQXNCbEQsRUFBTzJiLFNBQVVqWixJQU0zRyxJQUhBb3RCLEVBQWVuQixHQUFRanBCLEdBQ3ZCbXFCLEVBQWNsQixHQUFRanNCLEdBRWhCbUMsRUFBSSxFQUFHa0YsRUFBSThsQixFQUFZaHRCLE9BQVlrSCxFQUFKbEYsRUFBT0EsSUFDM0NtckIsR0FBVUgsRUFBYWhyQixHQUFLaXJCLEVBQWNqckIsR0FLNUMsSUFBS2dxQixFQUNKLEdBQUtDLEVBSUosSUFIQWUsRUFBY0EsR0FBZWxCLEdBQVFqc0IsR0FDckNvdEIsRUFBZUEsR0FBZ0JuQixHQUFRanBCLEdBRWpDYixFQUFJLEVBQUdrRixFQUFJOGxCLEVBQVlodEIsT0FBWWtILEVBQUpsRixFQUFPQSxJQUMzQ29yQixHQUFnQkosRUFBYWhyQixHQUFLaXJCLEVBQWNqckIsUUFHakRvckIsSUFBZ0J2dEIsRUFBTWdELEVBV3hCLE9BTkFvcUIsR0FBZW5CLEdBQVFqcEIsRUFBTyxVQUN6Qm9xQixFQUFhanRCLE9BQVMsR0FDMUIrckIsR0FBZWtCLEdBQWVDLEdBQVVwQixHQUFRanNCLEVBQU0sV0FJaERnRCxHQUdSb0MsY0FBZSxTQUFVOUQsRUFBTzNDLEVBQVN1RyxFQUFTc29CLEdBQ2pELEdBQUl4dEIsR0FBTTRGLEVBQUt1SyxFQUFLc2QsRUFBTWhrQixFQUFVcEgsRUFDbkNGLEVBQUksRUFDSmtGLEVBQUkvRixFQUFNbkIsT0FDVmtjLEVBQVcxZCxFQUFRMmQseUJBQ25Cb1IsSUFFRCxNQUFZcm1CLEVBQUpsRixFQUFPQSxJQUdkLEdBRkFuQyxFQUFPc0IsRUFBT2EsR0FFVG5DLEdBQWlCLElBQVRBLEVBR1osR0FBNkIsV0FBeEIxQyxFQUFPNEcsS0FBTWxFLEdBR2pCMUMsRUFBT2dELE1BQU9vdEIsRUFBTzF0QixFQUFLUSxVQUFhUixHQUFTQSxPQUcxQyxJQUFNcXFCLEdBQU0zcEIsS0FBTVYsR0FJbEIsQ0FDTjRGLEVBQU1BLEdBQU95VyxFQUFTN1YsWUFBYTdILEVBQVF3RyxjQUFjLFFBR3pEZ0wsR0FBUWlhLEdBQVNocUIsS0FBTUosS0FBVyxHQUFJLEtBQU8sR0FBSTZHLGNBQ2pENG1CLEVBQU83QyxHQUFTemEsSUFBU3lhLEdBQVF0RixTQUNqQzFmLEVBQUlnSyxVQUFZNmQsRUFBTSxHQUFNenRCLEVBQUt1RCxRQUFTNG1CLEdBQVcsYUFBZ0JzRCxFQUFNLEdBRzNFcHJCLEVBQUlvckIsRUFBTSxFQUNWLE9BQVFwckIsSUFDUHVELEVBQU1BLEVBQUkwTixTQUtYaFcsR0FBT2dELE1BQU9vdEIsRUFBTzluQixFQUFJTixZQUd6Qk0sRUFBTXlXLEVBQVN4TSxXQUlmakssRUFBSWdNLFlBQWMsT0ExQmxCOGIsR0FBTTN2QixLQUFNWSxFQUFRNnNCLGVBQWdCeHJCLEdBZ0N2Q3FjLEdBQVN6SyxZQUFjLEdBRXZCelAsRUFBSSxDQUNKLE9BQVNuQyxFQUFPMHRCLEVBQU92ckIsS0FJdEIsS0FBS3FyQixHQUFtRCxLQUF0Q2x3QixFQUFPNkosUUFBU25ILEVBQU13dEIsTUFJeEMvakIsRUFBV25NLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsR0FHaEQ0RixFQUFNcW1CLEdBQVE1UCxFQUFTN1YsWUFBYXhHLEdBQVEsVUFHdkN5SixHQUNKeWlCLEdBQWV0bUIsR0FJWFYsR0FBVSxDQUNkN0MsRUFBSSxDQUNKLE9BQVNyQyxFQUFPNEYsRUFBS3ZELEtBQ2Zvb0IsR0FBWS9wQixLQUFNVixFQUFLa0UsTUFBUSxLQUNuQ2dCLEVBQVFuSCxLQUFNaUMsR0FNbEIsTUFBT3FjLElBR1IyUCxVQUFXLFNBQVUxcUIsR0FDcEIsR0FBSXlELEdBQU0vRSxFQUFNc2pCLEVBQVFwZixFQUFNMkQsRUFBS3hGLEVBQ2xDb2hCLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUN2QnRoQixFQUFJLENBRUwsT0FBU25DLEVBQU9zQixFQUFPYSxNQUFTdEYsVUFBV3NGLElBQU0sQ0FDaEQsR0FBS2ljLEVBQUtHLFFBQVN2ZSxLQUNsQjZILEVBQU03SCxFQUFNaWUsRUFBVTdhLFNBRWpCeUUsSUFBUTlDLEVBQU9rWixFQUFValEsTUFBT25HLEtBQVMsQ0FFN0MsR0FEQXliLEVBQVNwYyxPQUFPNkcsS0FBTWhKLEVBQUt1ZSxZQUN0QkEsRUFBT25qQixPQUNYLElBQU1rQyxFQUFJLEdBQUk2QixFQUFPb2YsRUFBT2poQixNQUFReEYsVUFBV3dGLElBQ3pDb2hCLEVBQVN2ZixHQUNiNUcsRUFBTzJsQixNQUFNNWQsT0FBUXJGLEVBQU1rRSxHQUkzQjVHLEVBQU9tbkIsWUFBYXprQixFQUFNa0UsRUFBTWEsRUFBSytlLE9BSW5DN0YsR0FBVWpRLE1BQU9uRyxVQUVkb1csR0FBVWpRLE1BQU9uRyxTQUtwQm1XLEdBQVVoUSxNQUFPaE8sRUFBTWdlLEVBQVU1YSxZQUkxQ3lwQixTQUFVLFNBQVVjLEdBQ25CLE1BQU9yd0IsR0FBT3N3QixNQUNiRCxJQUFLQSxFQUNMenBCLEtBQU0sTUFDTjJwQixTQUFVLFNBQ1ZDLE9BQU8sRUFDUDVLLFFBQVEsRUFDUjZLLFVBQVUsTUFPYixTQUFTckMsSUFBb0IxckIsRUFBTWd1QixHQUNsQyxNQUFPMXdCLEdBQU9zSixTQUFVNUcsRUFBTSxVQUM3QjFDLEVBQU9zSixTQUErQixJQUFyQm9uQixFQUFReHRCLFNBQWlCd3RCLEVBQVVBLEVBQVFuZSxXQUFZLE1BRXhFN1AsRUFBSytGLHFCQUFxQixTQUFTLElBQ2xDL0YsRUFBS3dHLFlBQWF4RyxFQUFLUyxjQUFjMEUsY0FBYyxVQUNwRG5GLEVBSUYsUUFBUzJzQixJQUFlM3NCLEdBRXZCLE1BREFBLEdBQUtrRSxNQUFzQyxPQUE5QmxFLEVBQUt1TixhQUFhLFNBQW9CLElBQU12TixFQUFLa0UsS0FDdkRsRSxFQUVSLFFBQVM0c0IsSUFBZTVzQixHQUN2QixHQUFJRCxHQUFRMnFCLEdBQWtCdHFCLEtBQU1KLEVBQUtrRSxLQVF6QyxPQU5LbkUsR0FDSkMsRUFBS2tFLEtBQU9uRSxFQUFPLEdBRW5CQyxFQUFLNk4sZ0JBQWdCLFFBR2Y3TixFQUlSLFFBQVNrc0IsSUFBZTVxQixFQUFPMnNCLEdBQzlCLEdBQUk1bUIsR0FBSS9GLEVBQU1uQixPQUNiZ0MsRUFBSSxDQUVMLE1BQVlrRixFQUFKbEYsRUFBT0EsSUFDZDhiLEVBQVVXLElBQ1R0ZCxFQUFPYSxHQUFLLGNBQWU4ckIsR0FBZWhRLEVBQVU5YyxJQUFLOHNCLEVBQWE5ckIsR0FBSyxlQUs5RSxRQUFTb3JCLElBQWdCMXFCLEVBQUtxckIsR0FDN0IsR0FBSS9yQixHQUFHa0YsRUFBR25ELEVBQU1pcUIsRUFBVUMsRUFBVUMsRUFBVUMsRUFBVWhMLENBRXhELElBQXVCLElBQWxCNEssRUFBSzF0QixTQUFWLENBS0EsR0FBS3lkLEVBQVVlLFFBQVNuYyxLQUN2QnNyQixFQUFXbFEsRUFBVXJXLE9BQVEvRSxHQUM3QnVyQixFQUFXblEsRUFBVVcsSUFBS3NQLEVBQU1DLEdBQ2hDN0ssRUFBUzZLLEVBQVM3SyxRQUVKLE9BQ044SyxHQUFTdEssT0FDaEJzSyxFQUFTOUssU0FFVCxLQUFNcGYsSUFBUW9mLEdBQ2IsSUFBTW5oQixFQUFJLEVBQUdrRixFQUFJaWMsRUFBUXBmLEdBQU8vRCxPQUFZa0gsRUFBSmxGLEVBQU9BLElBQzlDN0UsRUFBTzJsQixNQUFNN0ksSUFBSzhULEVBQU1ocUIsRUFBTW9mLEVBQVFwZixHQUFRL0IsSUFPN0M2YixFQUFVZ0IsUUFBU25jLEtBQ3ZCd3JCLEVBQVdyUSxFQUFVcFcsT0FBUS9FLEdBQzdCeXJCLEVBQVdoeEIsRUFBT29GLFVBQVkyckIsR0FFOUJyUSxFQUFVWSxJQUFLc1AsRUFBTUksS0FLdkIsUUFBU3JDLElBQVF0dEIsRUFBU3dSLEdBQ3pCLEdBQUk1TyxHQUFNNUMsRUFBUW9ILHFCQUF1QnBILEVBQVFvSCxxQkFBc0JvSyxHQUFPLEtBQzVFeFIsRUFBUWdQLGlCQUFtQmhQLEVBQVFnUCxpQkFBa0J3QyxHQUFPLE9BRzlELE9BQU9BLEtBQVF0VCxXQUFhc1QsR0FBTzdTLEVBQU9zSixTQUFVakksRUFBU3dSLEdBQzVEN1MsRUFBT2dELE9BQVMzQixHQUFXNEMsR0FDM0JBLEVBSUYsUUFBUytyQixJQUFVenFCLEVBQUtxckIsR0FDdkIsR0FBSXRuQixHQUFXc25CLEVBQUt0bkIsU0FBU0MsYUFHWCxXQUFiRCxHQUF3QjJqQixHQUE0QjdwQixLQUFNbUMsRUFBSXFCLE1BQ2xFZ3FCLEVBQUt2WixRQUFVOVIsRUFBSThSLFNBR0ssVUFBYi9OLEdBQXFDLGFBQWJBLEtBQ25Dc25CLEVBQUtuVixhQUFlbFcsRUFBSWtXLGNBRzFCemIsRUFBT3NCLEdBQUc4RCxRQUNUNnJCLFFBQVMsU0FBVWxDLEdBQ2xCLEdBQUlvQixFQUVKLE9BQUtud0IsR0FBT3NELFdBQVl5ckIsR0FDaEJwc0IsS0FBS3dCLEtBQUssU0FBVVUsR0FDMUI3RSxFQUFRMkMsTUFBT3N1QixRQUFTbEMsRUFBS25yQixLQUFLakIsS0FBTWtDLE9BSXJDbEMsS0FBTSxLQUdWd3RCLEVBQU9ud0IsRUFBUSt1QixFQUFNcHNCLEtBQU0sR0FBSVEsZUFBZ0J3QixHQUFJLEdBQUllLE9BQU8sR0FFekQvQyxLQUFNLEdBQUljLFlBQ2Qwc0IsRUFBSzdCLGFBQWMzckIsS0FBTSxJQUcxQnd0QixFQUFLbnJCLElBQUksV0FDUixHQUFJdEMsR0FBT0MsSUFFWCxPQUFRRCxFQUFLd3VCLGtCQUNaeHVCLEVBQU9BLEVBQUt3dUIsaUJBR2IsT0FBT3h1QixLQUNMdXJCLE9BQVF0ckIsT0FHTEEsT0FHUnd1QixVQUFXLFNBQVVwQyxHQUNwQixNQUFLL3VCLEdBQU9zRCxXQUFZeXJCLEdBQ2hCcHNCLEtBQUt3QixLQUFLLFNBQVVVLEdBQzFCN0UsRUFBUTJDLE1BQU93dUIsVUFBV3BDLEVBQUtuckIsS0FBS2pCLEtBQU1rQyxNQUlyQ2xDLEtBQUt3QixLQUFLLFdBQ2hCLEdBQUl5WSxHQUFPNWMsRUFBUTJDLE1BQ2xCNG9CLEVBQVczTyxFQUFLMk8sVUFFWkEsR0FBUzFvQixPQUNiMG9CLEVBQVMwRixRQUFTbEMsR0FHbEJuUyxFQUFLcVIsT0FBUWMsTUFLaEJvQixLQUFNLFNBQVVwQixHQUNmLEdBQUl6ckIsR0FBYXRELEVBQU9zRCxXQUFZeXJCLEVBRXBDLE9BQU9wc0IsTUFBS3dCLEtBQUssU0FBVVUsR0FDMUI3RSxFQUFRMkMsTUFBT3N1QixRQUFTM3RCLEVBQWF5ckIsRUFBS25yQixLQUFLakIsS0FBTWtDLEdBQUtrcUIsTUFJNURxQyxPQUFRLFdBQ1AsTUFBT3p1QixNQUFLcVAsU0FBUzdOLEtBQUssV0FDbkJuRSxFQUFPc0osU0FBVTNHLEtBQU0sU0FDNUIzQyxFQUFRMkMsTUFBT3FzQixZQUFhcnNCLEtBQUtxRixjQUVoQy9DLFFBR0wsSUFBSW9zQixJQUFRQyxHQUdYQyxHQUFlLDRCQUNmQyxHQUFVLFVBQ1ZDLEdBQWdCL2pCLE9BQVEsS0FBT2xNLEVBQVksU0FBVSxLQUNyRGt3QixHQUFnQmhrQixPQUFRLEtBQU9sTSxFQUFZLGtCQUFtQixLQUM5RG13QixHQUFjamtCLE9BQVEsWUFBY2xNLEVBQVksSUFBSyxLQUNyRG93QixJQUFnQkMsS0FBTSxTQUV0QkMsSUFBWUMsU0FBVSxXQUFZQyxXQUFZLFNBQVVDLFFBQVMsU0FDakVDLElBQ0NDLGNBQWUsRUFDZkMsV0FBWSxLQUdiQyxJQUFjLE1BQU8sUUFBUyxTQUFVLFFBQ3hDQyxJQUFnQixTQUFVLElBQUssTUFBTyxLQUd2QyxTQUFTQyxJQUFnQnZuQixFQUFPMUYsR0FHL0IsR0FBS0EsSUFBUTBGLEdBQ1osTUFBTzFGLEVBSVIsSUFBSWt0QixHQUFVbHRCLEVBQUsxQyxPQUFPLEdBQUdWLGNBQWdCb0QsRUFBSzNFLE1BQU0sR0FDdkQ4eEIsRUFBV250QixFQUNYVCxFQUFJeXRCLEdBQVl6dkIsTUFFakIsT0FBUWdDLElBRVAsR0FEQVMsRUFBT2d0QixHQUFhenRCLEdBQU0ydEIsRUFDckJsdEIsSUFBUTBGLEdBQ1osTUFBTzFGLEVBSVQsT0FBT210QixHQUdSLFFBQVNDLElBQVVod0IsRUFBTWl3QixHQUl4QixNQURBandCLEdBQU9pd0IsR0FBTWp3QixFQUM0QixTQUFsQzFDLEVBQU80eUIsSUFBS2x3QixFQUFNLGFBQTJCMUMsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxHQUsxRixRQUFTbXdCLElBQVdud0IsR0FDbkIsTUFBT3BELEdBQU9paEIsaUJBQWtCN2QsRUFBTSxNQUd2QyxRQUFTb3dCLElBQVUvZSxFQUFVZ2YsR0FDNUIsR0FBSWQsR0FBU3Z2QixFQUFNc3dCLEVBQ2xCdFUsS0FDQTNCLEVBQVEsRUFDUmxhLEVBQVNrUixFQUFTbFIsTUFFbkIsTUFBZ0JBLEVBQVJrYSxFQUFnQkEsSUFDdkJyYSxFQUFPcVIsRUFBVWdKLEdBQ1hyYSxFQUFLc0ksUUFJWDBULEVBQVEzQixHQUFVNEQsRUFBVTljLElBQUtuQixFQUFNLGNBQ3ZDdXZCLEVBQVV2dkIsRUFBS3NJLE1BQU1pbkIsUUFDaEJjLEdBR0VyVSxFQUFRM0IsSUFBdUIsU0FBWmtWLElBQ3hCdnZCLEVBQUtzSSxNQUFNaW5CLFFBQVUsSUFNTSxLQUF2QnZ2QixFQUFLc0ksTUFBTWluQixTQUFrQlMsR0FBVWh3QixLQUMzQ2djLEVBQVEzQixHQUFVNEQsRUFBVXJXLE9BQVE1SCxFQUFNLGFBQWN1d0IsR0FBbUJ2d0IsRUFBSzRHLGFBSTNFb1YsRUFBUTNCLEtBQ2JpVyxFQUFTTixHQUFVaHdCLElBRWR1dkIsR0FBdUIsU0FBWkEsSUFBdUJlLElBQ3RDclMsRUFBVVcsSUFBSzVlLEVBQU0sYUFBY3N3QixFQUFTZixFQUFVanlCLEVBQU80eUIsSUFBSWx3QixFQUFNLGFBUTNFLEtBQU1xYSxFQUFRLEVBQVdsYSxFQUFSa2EsRUFBZ0JBLElBQ2hDcmEsRUFBT3FSLEVBQVVnSixHQUNYcmEsRUFBS3NJLFFBR0wrbkIsR0FBK0IsU0FBdkJyd0IsRUFBS3NJLE1BQU1pbkIsU0FBNkMsS0FBdkJ2dkIsRUFBS3NJLE1BQU1pbkIsVUFDekR2dkIsRUFBS3NJLE1BQU1pbkIsUUFBVWMsRUFBT3JVLEVBQVEzQixJQUFXLEdBQUssUUFJdEQsT0FBT2hKLEdBR1IvVCxFQUFPc0IsR0FBRzhELFFBQ1R3dEIsSUFBSyxTQUFVdHRCLEVBQU1rRSxHQUNwQixNQUFPeEosR0FBT3NLLE9BQVEzSCxLQUFNLFNBQVVELEVBQU00QyxFQUFNa0UsR0FDakQsR0FBSTBwQixHQUFRcHVCLEVBQ1hFLEtBQ0FILEVBQUksQ0FFTCxJQUFLN0UsRUFBTzZGLFFBQVNQLEdBQVMsQ0FJN0IsSUFIQTR0QixFQUFTTCxHQUFXbndCLEdBQ3BCb0MsRUFBTVEsRUFBS3pDLE9BRUNpQyxFQUFKRCxFQUFTQSxJQUNoQkcsRUFBS00sRUFBTVQsSUFBUTdFLEVBQU80eUIsSUFBS2x3QixFQUFNNEMsRUFBTVQsSUFBSyxFQUFPcXVCLEVBR3hELE9BQU9sdUIsR0FHUixNQUFPd0UsS0FBVWpLLFVBQ2hCUyxFQUFPZ0wsTUFBT3RJLEVBQU00QyxFQUFNa0UsR0FDMUJ4SixFQUFPNHlCLElBQUtsd0IsRUFBTTRDLElBQ2pCQSxFQUFNa0UsRUFBTy9FLFVBQVU1QixPQUFTLElBRXBDa3dCLEtBQU0sV0FDTCxNQUFPRCxJQUFVbndCLE1BQU0sSUFFeEJ3d0IsS0FBTSxXQUNMLE1BQU9MLElBQVVud0IsT0FFbEJ5d0IsT0FBUSxTQUFVL1YsR0FDakIsTUFBc0IsaUJBQVZBLEdBQ0pBLEVBQVExYSxLQUFLb3dCLE9BQVNwd0IsS0FBS3d3QixPQUc1Qnh3QixLQUFLd0IsS0FBSyxXQUNYdXVCLEdBQVUvdkIsTUFDZDNDLEVBQVEyQyxNQUFPb3dCLE9BRWYveUIsRUFBUTJDLE1BQU93d0IsWUFNbkJuekIsRUFBT29GLFFBR05pdUIsVUFDQ0MsU0FDQ3p2QixJQUFLLFNBQVVuQixFQUFNNndCLEdBQ3BCLEdBQUtBLEVBQVcsQ0FFZixHQUFJdHZCLEdBQU1vdEIsR0FBUTN1QixFQUFNLFVBQ3hCLE9BQWUsS0FBUnVCLEVBQWEsSUFBTUEsTUFPOUJ1dkIsV0FDQ0MsYUFBZSxFQUNmQyxhQUFlLEVBQ2Z0QixZQUFjLEVBQ2R1QixZQUFjLEVBQ2RMLFNBQVcsRUFDWE0sT0FBUyxFQUNUQyxTQUFXLEVBQ1hDLFFBQVUsRUFDVkMsUUFBVSxFQUNWM1QsTUFBUSxHQUtUNFQsVUFFQ0MsUUFBUyxZQUlWanBCLE1BQU8sU0FBVXRJLEVBQU00QyxFQUFNa0UsRUFBTzBxQixHQUVuQyxHQUFNeHhCLEdBQTBCLElBQWxCQSxFQUFLUSxVQUFvQyxJQUFsQlIsRUFBS1EsVUFBbUJSLEVBQUtzSSxNQUFsRSxDQUtBLEdBQUkvRyxHQUFLMkMsRUFBTXliLEVBQ2RvUSxFQUFXenlCLEVBQU9vSixVQUFXOUQsR0FDN0IwRixFQUFRdEksRUFBS3NJLEtBU2QsT0FQQTFGLEdBQU90RixFQUFPZzBCLFNBQVV2QixLQUFnQnp5QixFQUFPZzBCLFNBQVV2QixHQUFhRixHQUFnQnZuQixFQUFPeW5CLElBSTdGcFEsRUFBUXJpQixFQUFPcXpCLFNBQVUvdEIsSUFBVXRGLEVBQU9xekIsU0FBVVosR0FHL0NqcEIsSUFBVWpLLFVBaUNUOGlCLEdBQVMsT0FBU0EsS0FBVXBlLEVBQU1vZSxFQUFNeGUsSUFBS25CLEdBQU0sRUFBT3d4QixNQUFhMzBCLFVBQ3BFMEUsRUFJRCtHLEVBQU8xRixJQXJDZHNCLFFBQWM0QyxHQUdBLFdBQVQ1QyxJQUFzQjNDLEVBQU0wdEIsR0FBUTd1QixLQUFNMEcsTUFDOUNBLEdBQVV2RixFQUFJLEdBQUssR0FBTUEsRUFBSSxHQUFLZ0QsV0FBWWpILEVBQU80eUIsSUFBS2x3QixFQUFNNEMsSUFFaEVzQixFQUFPLFVBSU0sTUFBVDRDLEdBQTBCLFdBQVQ1QyxHQUFxQkksTUFBT3dDLEtBS3BDLFdBQVQ1QyxHQUFzQjVHLEVBQU93ekIsVUFBV2YsS0FDNUNqcEIsR0FBUyxNQUtKeEosRUFBT3NMLFFBQVF3VSxpQkFBNkIsS0FBVnRXLEdBQStDLElBQS9CbEUsRUFBS3pFLFFBQVEsZ0JBQ3BFbUssRUFBTzFGLEdBQVMsV0FJWCtjLEdBQVcsT0FBU0EsS0FBVzdZLEVBQVE2WSxFQUFNZixJQUFLNWUsRUFBTThHLEVBQU8wcUIsTUFBYTMwQixZQUNqRnlMLEVBQU8xRixHQUFTa0UsSUFqQmpCLGFBK0JGb3BCLElBQUssU0FBVWx3QixFQUFNNEMsRUFBTTR1QixFQUFPaEIsR0FDakMsR0FBSWxmLEdBQUtsUSxFQUFLdWUsRUFDYm9RLEVBQVd6eUIsRUFBT29KLFVBQVc5RCxFQXlCOUIsT0F0QkFBLEdBQU90RixFQUFPZzBCLFNBQVV2QixLQUFnQnp5QixFQUFPZzBCLFNBQVV2QixHQUFhRixHQUFnQjd2QixFQUFLc0ksTUFBT3luQixJQUlsR3BRLEVBQVFyaUIsRUFBT3F6QixTQUFVL3RCLElBQVV0RixFQUFPcXpCLFNBQVVaLEdBRy9DcFEsR0FBUyxPQUFTQSxLQUN0QnJPLEVBQU1xTyxFQUFNeGUsSUFBS25CLEdBQU0sRUFBTXd4QixJQUl6QmxnQixJQUFRelUsWUFDWnlVLEVBQU1xZCxHQUFRM3VCLEVBQU00QyxFQUFNNHRCLElBSWQsV0FBUmxmLEdBQW9CMU8sSUFBUTRzQixNQUNoQ2xlLEVBQU1rZSxHQUFvQjVzQixJQUlaLEtBQVY0dUIsR0FBZ0JBLEdBQ3BCcHdCLEVBQU1tRCxXQUFZK00sR0FDWGtnQixLQUFVLEdBQVFsMEIsRUFBTytHLFVBQVdqRCxHQUFRQSxHQUFPLEVBQUlrUSxHQUV4REEsS0FJVHFkLEdBQVMsU0FBVTN1QixFQUFNNEMsRUFBTTZ1QixHQUM5QixHQUFJM1QsR0FBTzRULEVBQVVDLEVBQ3BCZCxFQUFXWSxHQUFhdEIsR0FBV253QixHQUluQ3VCLEVBQU1zdkIsRUFBV0EsRUFBU2UsaUJBQWtCaHZCLElBQVVpdUIsRUFBVWp1QixHQUFTL0YsVUFDekV5TCxFQUFRdEksRUFBS3NJLEtBOEJkLE9BNUJLdW9CLEtBRVMsS0FBUnR2QixHQUFlakUsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxLQUN4RHVCLEVBQU1qRSxFQUFPZ0wsTUFBT3RJLEVBQU00QyxJQU90Qm9zQixHQUFVdHVCLEtBQU1hLElBQVN1dEIsR0FBUXB1QixLQUFNa0MsS0FHM0NrYixFQUFReFYsRUFBTXdWLE1BQ2Q0VCxFQUFXcHBCLEVBQU1vcEIsU0FDakJDLEVBQVdycEIsRUFBTXFwQixTQUdqQnJwQixFQUFNb3BCLFNBQVdwcEIsRUFBTXFwQixTQUFXcnBCLEVBQU13VixNQUFRdmMsRUFDaERBLEVBQU1zdkIsRUFBUy9TLE1BR2Z4VixFQUFNd1YsTUFBUUEsRUFDZHhWLEVBQU1vcEIsU0FBV0EsRUFDakJwcEIsRUFBTXFwQixTQUFXQSxJQUlacHdCLEVBSVIsU0FBU3N3QixJQUFtQjd4QixFQUFNOEcsRUFBT2dyQixHQUN4QyxHQUFJdG9CLEdBQVV1bEIsR0FBVTN1QixLQUFNMEcsRUFDOUIsT0FBTzBDLEdBRU5uRyxLQUFLd2UsSUFBSyxFQUFHclksRUFBUyxJQUFRc29CLEdBQVksS0FBVXRvQixFQUFTLElBQU8sTUFDcEUxQyxFQUdGLFFBQVNpckIsSUFBc0IveEIsRUFBTTRDLEVBQU00dUIsRUFBT1EsRUFBYXhCLEdBQzlELEdBQUlydUIsR0FBSXF2QixLQUFZUSxFQUFjLFNBQVcsV0FFNUMsRUFFUyxVQUFUcHZCLEVBQW1CLEVBQUksRUFFdkIwTyxFQUFNLENBRVAsTUFBWSxFQUFKblAsRUFBT0EsR0FBSyxFQUVKLFdBQVZxdkIsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU13eEIsRUFBUTdCLEdBQVd4dEIsSUFBSyxFQUFNcXVCLElBR25Ed0IsR0FFVyxZQUFWUixJQUNKbGdCLEdBQU9oVSxFQUFPNHlCLElBQUtsd0IsRUFBTSxVQUFZMnZCLEdBQVd4dEIsSUFBSyxFQUFNcXVCLElBSTdDLFdBQVZnQixJQUNKbGdCLEdBQU9oVSxFQUFPNHlCLElBQUtsd0IsRUFBTSxTQUFXMnZCLEdBQVd4dEIsR0FBTSxTQUFTLEVBQU1xdUIsTUFJckVsZixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sVUFBWTJ2QixHQUFXeHRCLElBQUssRUFBTXF1QixHQUc1QyxZQUFWZ0IsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sU0FBVzJ2QixHQUFXeHRCLEdBQU0sU0FBUyxFQUFNcXVCLElBS3ZFLE9BQU9sZixHQUdSLFFBQVMyZ0IsSUFBa0JqeUIsRUFBTTRDLEVBQU00dUIsR0FHdEMsR0FBSVUsSUFBbUIsRUFDdEI1Z0IsRUFBZSxVQUFUMU8sRUFBbUI1QyxFQUFLNGQsWUFBYzVkLEVBQUtteUIsYUFDakQzQixFQUFTTCxHQUFXbndCLEdBQ3BCZ3lCLEVBQWMxMEIsRUFBT3NMLFFBQVErVSxXQUFnRSxlQUFuRHJnQixFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUFhLEVBQU93d0IsRUFLakYsSUFBWSxHQUFQbGYsR0FBbUIsTUFBUEEsRUFBYyxDQVE5QixHQU5BQSxFQUFNcWQsR0FBUTN1QixFQUFNNEMsRUFBTTR0QixJQUNmLEVBQU5sZixHQUFrQixNQUFQQSxLQUNmQSxFQUFNdFIsRUFBS3NJLE1BQU8xRixJQUlkb3NCLEdBQVV0dUIsS0FBSzRRLEdBQ25CLE1BQU9BLEVBS1I0Z0IsR0FBbUJGLElBQWlCMTBCLEVBQU9zTCxRQUFRK1QsbUJBQXFCckwsSUFBUXRSLEVBQUtzSSxNQUFPMUYsSUFHNUYwTyxFQUFNL00sV0FBWStNLElBQVMsRUFJNUIsTUFBU0EsR0FDUnlnQixHQUNDL3hCLEVBQ0E0QyxFQUNBNHVCLElBQVdRLEVBQWMsU0FBVyxXQUNwQ0UsRUFDQTFCLEdBRUUsS0FJTCxRQUFTRCxJQUFvQjNwQixHQUM1QixHQUFJeUksR0FBTW5TLEVBQ1RxeUIsRUFBVUwsR0FBYXRvQixFQTBCeEIsT0F4Qk0yb0IsS0FDTEEsRUFBVTZDLEdBQWV4ckIsRUFBVXlJLEdBR2xCLFNBQVprZ0IsR0FBdUJBLElBRTNCWCxJQUFXQSxJQUNWdHhCLEVBQU8sa0RBQ040eUIsSUFBSyxVQUFXLDZCQUNoQnBELFNBQVV6ZCxFQUFJalMsaUJBR2hCaVMsR0FBUXVmLEdBQU8sR0FBR3lELGVBQWlCekQsR0FBTyxHQUFHOUUsaUJBQWtCNXNCLFNBQy9EbVMsRUFBSWlqQixNQUFNLCtCQUNWampCLEVBQUlrakIsUUFFSmhELEVBQVU2QyxHQUFleHJCLEVBQVV5SSxHQUNuQ3VmLEdBQU9yQyxVQUlSMkMsR0FBYXRvQixHQUFhMm9CLEdBR3BCQSxFQUlSLFFBQVM2QyxJQUFleHZCLEVBQU15TSxHQUM3QixHQUFJclAsR0FBTzFDLEVBQVErUixFQUFJbEssY0FBZXZDLElBQVNrcUIsU0FBVXpkLEVBQUltTyxNQUM1RCtSLEVBQVVqeUIsRUFBTzR5QixJQUFLbHdCLEVBQUssR0FBSSxVQUVoQyxPQURBQSxHQUFLcUYsU0FDRWtxQixFQUdSanlCLEVBQU9tRSxNQUFPLFNBQVUsU0FBVyxTQUFVVSxFQUFHUyxHQUMvQ3RGLEVBQU9xekIsU0FBVS90QixJQUNoQnpCLElBQUssU0FBVW5CLEVBQU02d0IsRUFBVVcsR0FDOUIsTUFBS1gsR0FHd0IsSUFBckI3d0IsRUFBSzRkLGFBQXFCaVIsR0FBYW51QixLQUFNcEQsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDckUxQyxFQUFPOEssS0FBTXBJLEVBQU1vdkIsR0FBUyxXQUMzQixNQUFPNkMsSUFBa0JqeUIsRUFBTTRDLEVBQU00dUIsS0FFdENTLEdBQWtCanlCLEVBQU00QyxFQUFNNHVCLEdBUGhDLFdBV0Q1UyxJQUFLLFNBQVU1ZSxFQUFNOEcsRUFBTzBxQixHQUMzQixHQUFJaEIsR0FBU2dCLEdBQVNyQixHQUFXbndCLEVBQ2pDLE9BQU82eEIsSUFBbUI3eEIsRUFBTThHLEVBQU8wcUIsRUFDdENPLEdBQ0MveEIsRUFDQTRDLEVBQ0E0dUIsRUFDQWwwQixFQUFPc0wsUUFBUStVLFdBQWdFLGVBQW5EcmdCLEVBQU80eUIsSUFBS2x3QixFQUFNLGFBQWEsRUFBT3d3QixHQUNsRUEsR0FDRyxPQVFSbHpCLEVBQU8sV0FFQUEsRUFBT3NMLFFBQVE4VCxzQkFDcEJwZixFQUFPcXpCLFNBQVM1UyxhQUNmNWMsSUFBSyxTQUFVbkIsRUFBTTZ3QixHQUNwQixNQUFLQSxHQUlHdnpCLEVBQU84SyxLQUFNcEksR0FBUXV2QixRQUFXLGdCQUN0Q1osSUFBVTN1QixFQUFNLGdCQUxsQixjQWNHMUMsRUFBT3NMLFFBQVFnVSxlQUFpQnRmLEVBQU9zQixHQUFHeXdCLFVBQy9DL3hCLEVBQU9tRSxNQUFRLE1BQU8sUUFBVSxTQUFVVSxFQUFHMGMsR0FDNUN2aEIsRUFBT3F6QixTQUFVOVIsSUFDaEIxZCxJQUFLLFNBQVVuQixFQUFNNndCLEdBQ3BCLE1BQUtBLElBQ0pBLEVBQVdsQyxHQUFRM3VCLEVBQU02ZSxHQUVsQm1RLEdBQVV0dUIsS0FBTW13QixHQUN0QnZ6QixFQUFRMEMsR0FBT3F2QixXQUFZeFEsR0FBUyxLQUNwQ2dTLEdBTEYsZ0JBY0F2ekIsRUFBTzhULE1BQVE5VCxFQUFPOFQsS0FBS3dFLFVBQy9CdFksRUFBTzhULEtBQUt3RSxRQUFRMGEsT0FBUyxTQUFVdHdCLEdBR3RDLE1BQTJCLElBQXBCQSxFQUFLNGQsYUFBeUMsR0FBckI1ZCxFQUFLbXlCLGNBR3RDNzBCLEVBQU84VCxLQUFLd0UsUUFBUTRjLFFBQVUsU0FBVXh5QixHQUN2QyxPQUFRMUMsRUFBTzhULEtBQUt3RSxRQUFRMGEsT0FBUXR3QixLQUt0QzFDLEVBQU9tRSxNQUNOZ3hCLE9BQVEsR0FDUkMsUUFBUyxHQUNUQyxPQUFRLFNBQ04sU0FBVUMsRUFBUUMsR0FDcEJ2MUIsRUFBT3F6QixTQUFVaUMsRUFBU0MsSUFDekJDLE9BQVEsU0FBVWhzQixHQUNqQixHQUFJM0UsR0FBSSxFQUNQNHdCLEtBR0FDLEVBQXlCLGdCQUFWbHNCLEdBQXFCQSxFQUFNNkIsTUFBTSxNQUFTN0IsRUFFMUQsTUFBWSxFQUFKM0UsRUFBT0EsSUFDZDR3QixFQUFVSCxFQUFTakQsR0FBV3h0QixHQUFNMHdCLEdBQ25DRyxFQUFPN3dCLElBQU82d0IsRUFBTzd3QixFQUFJLElBQU82d0IsRUFBTyxFQUd6QyxPQUFPRCxLQUlIakUsR0FBUXB1QixLQUFNa3lCLEtBQ25CdDFCLEVBQU9xekIsU0FBVWlDLEVBQVNDLEdBQVNqVSxJQUFNaVQsS0FHM0MsSUFBSW9CLElBQU0sT0FDVEMsR0FBVyxRQUNYQyxHQUFRLFNBQ1JDLEdBQWtCLHdDQUNsQkMsR0FBZSxvQ0FFaEIvMUIsR0FBT3NCLEdBQUc4RCxRQUNUNHdCLFVBQVcsV0FDVixNQUFPaDJCLEdBQU9pMkIsTUFBT3R6QixLQUFLdXpCLG1CQUUzQkEsZUFBZ0IsV0FDZixNQUFPdnpCLE1BQUtxQyxJQUFJLFdBRWYsR0FBSStPLEdBQVcvVCxFQUFPdWhCLEtBQU01ZSxLQUFNLFdBQ2xDLE9BQU9vUixHQUFXL1QsRUFBTzBELFVBQVdxUSxHQUFhcFIsT0FFakQrUCxPQUFPLFdBQ1AsR0FBSTlMLEdBQU9qRSxLQUFLaUUsSUFFaEIsT0FBT2pFLE1BQUsyQyxPQUFTdEYsRUFBUTJDLE1BQU9ncEIsR0FBSSxjQUN2Q29LLEdBQWEzeUIsS0FBTVQsS0FBSzJHLFlBQWV3c0IsR0FBZ0IxeUIsS0FBTXdELEtBQzNEakUsS0FBSzBVLFVBQVk0VixHQUE0QjdwQixLQUFNd0QsTUFFdEQ1QixJQUFJLFNBQVVILEVBQUduQyxHQUNqQixHQUFJc1IsR0FBTWhVLEVBQVEyQyxNQUFPcVIsS0FFekIsT0FBYyxPQUFQQSxFQUNOLEtBQ0FoVSxFQUFPNkYsUUFBU21PLEdBQ2ZoVSxFQUFPZ0YsSUFBS2dQLEVBQUssU0FBVUEsR0FDMUIsT0FBUzFPLEtBQU01QyxFQUFLNEMsS0FBTWtFLE1BQU93SyxFQUFJL04sUUFBUzR2QixHQUFPLFlBRXBEdndCLEtBQU01QyxFQUFLNEMsS0FBTWtFLE1BQU93SyxFQUFJL04sUUFBUzR2QixHQUFPLFdBQzlDaHlCLFNBTUw3RCxFQUFPaTJCLE1BQVEsU0FBVXJwQixFQUFHdXBCLEdBQzNCLEdBQUliLEdBQ0hjLEtBQ0F0WixFQUFNLFNBQVV2UyxFQUFLZixHQUVwQkEsRUFBUXhKLEVBQU9zRCxXQUFZa0csR0FBVUEsSUFBcUIsTUFBVEEsRUFBZ0IsR0FBS0EsRUFDdEU0c0IsRUFBR0EsRUFBRXZ6QixRQUFXd3pCLG1CQUFvQjlyQixHQUFRLElBQU04ckIsbUJBQW9CN3NCLEdBU3hFLElBTEsyc0IsSUFBZ0I1MkIsWUFDcEI0MkIsRUFBY24yQixFQUFPczJCLGNBQWdCdDJCLEVBQU9zMkIsYUFBYUgsYUFJckRuMkIsRUFBTzZGLFFBQVMrRyxJQUFTQSxFQUFFckssU0FBV3ZDLEVBQU9xRCxjQUFldUosR0FFaEU1TSxFQUFPbUUsS0FBTXlJLEVBQUcsV0FDZmtRLEVBQUtuYSxLQUFLMkMsS0FBTTNDLEtBQUs2RyxhQU10QixLQUFNOHJCLElBQVUxb0IsR0FDZjJwQixHQUFhakIsRUFBUTFvQixFQUFHMG9CLEdBQVVhLEVBQWFyWixFQUtqRCxPQUFPc1osR0FBRWhtQixLQUFNLEtBQU1uSyxRQUFTMHZCLEdBQUssS0FHcEMsU0FBU1ksSUFBYWpCLEVBQVEzdUIsRUFBS3d2QixFQUFhclosR0FDL0MsR0FBSXhYLEVBRUosSUFBS3RGLEVBQU82RixRQUFTYyxHQUVwQjNHLEVBQU9tRSxLQUFNd0MsRUFBSyxTQUFVOUIsRUFBRzJ4QixHQUN6QkwsR0FBZVAsR0FBU3h5QixLQUFNa3lCLEdBRWxDeFksRUFBS3dZLEVBQVFrQixHQUliRCxHQUFhakIsRUFBUyxLQUFxQixnQkFBTmtCLEdBQWlCM3hCLEVBQUksSUFBTyxJQUFLMnhCLEVBQUdMLEVBQWFyWixTQUlsRixJQUFNcVosR0FBc0MsV0FBdkJuMkIsRUFBTzRHLEtBQU1ELEdBUXhDbVcsRUFBS3dZLEVBQVEzdUIsT0FOYixLQUFNckIsSUFBUXFCLEdBQ2I0dkIsR0FBYWpCLEVBQVMsSUFBTWh3QixFQUFPLElBQUtxQixFQUFLckIsR0FBUTZ3QixFQUFhclosR0FRckU5YyxFQUFPbUUsS0FBTSwwTUFFcURrSCxNQUFNLEtBQU0sU0FBVXhHLEVBQUdTLEdBRzFGdEYsRUFBT3NCLEdBQUlnRSxHQUFTLFNBQVVtQyxFQUFNbkcsR0FDbkMsTUFBT21ELFdBQVU1QixPQUFTLEVBQ3pCRixLQUFLb29CLEdBQUl6bEIsRUFBTSxLQUFNbUMsRUFBTW5HLEdBQzNCcUIsS0FBSzhELFFBQVNuQixNQUlqQnRGLEVBQU9zQixHQUFHOEQsUUFDVHF4QixNQUFPLFNBQVVDLEVBQVFDLEdBQ3hCLE1BQU9oMEIsTUFBSzhuQixXQUFZaU0sR0FBU2hNLFdBQVlpTSxHQUFTRCxJQUd2REUsS0FBTSxTQUFVL1EsRUFBT3BlLEVBQU1uRyxHQUM1QixNQUFPcUIsTUFBS29vQixHQUFJbEYsRUFBTyxLQUFNcGUsRUFBTW5HLElBRXBDdTFCLE9BQVEsU0FBVWhSLEVBQU92a0IsR0FDeEIsTUFBT3FCLE1BQUsrRCxJQUFLbWYsRUFBTyxLQUFNdmtCO0VBRy9CdzFCLFNBQVUsU0FBVTExQixFQUFVeWtCLEVBQU9wZSxFQUFNbkcsR0FDMUMsTUFBT3FCLE1BQUtvb0IsR0FBSWxGLEVBQU96a0IsRUFBVXFHLEVBQU1uRyxJQUV4Q3kxQixXQUFZLFNBQVUzMUIsRUFBVXlrQixFQUFPdmtCLEdBRXRDLE1BQTRCLEtBQXJCbUQsVUFBVTVCLE9BQWVGLEtBQUsrRCxJQUFLdEYsRUFBVSxNQUFTdUIsS0FBSytELElBQUttZixFQUFPemtCLEdBQVksS0FBTUUsS0FHbEcsSUFFQzAxQixJQUNBQyxHQUVBQyxHQUFhbDNCLEVBQU80SyxNQUVwQnVzQixHQUFjLEtBQ2RDLEdBQVEsT0FDUkMsR0FBTSxnQkFDTkMsR0FBVyw2QkFFWEMsR0FBaUIsNERBQ2pCQyxHQUFhLGlCQUNiQyxHQUFZLFFBQ1pDLEdBQU8sOENBR1BDLEdBQVEzM0IsRUFBT3NCLEdBQUd1b0IsS0FXbEIrTixNQU9BQyxNQUdBQyxHQUFXLEtBQUt2M0IsT0FBTyxJQUl4QixLQUNDMDJCLEdBQWV0M0IsRUFBU3NYLEtBQ3ZCLE1BQU83UCxJQUdSNnZCLEdBQWVyM0IsRUFBU2lJLGNBQWUsS0FDdkNvdkIsR0FBYWhnQixLQUFPLEdBQ3BCZ2dCLEdBQWVBLEdBQWFoZ0IsS0FJN0IrZixHQUFlVSxHQUFLNTBCLEtBQU1tMEIsR0FBYTF0QixrQkFHdkMsU0FBU3d1QixJQUE2QkMsR0FHckMsTUFBTyxVQUFVQyxFQUFvQjlhLEdBRUQsZ0JBQXZCOGEsS0FDWDlhLEVBQU84YSxFQUNQQSxFQUFxQixJQUd0QixJQUFJMUgsR0FDSDFyQixFQUFJLEVBQ0pxekIsRUFBWUQsRUFBbUIxdUIsY0FBYzlHLE1BQU9mLE1BRXJELElBQUsxQixFQUFPc0QsV0FBWTZaLEdBRXZCLE1BQVNvVCxFQUFXMkgsRUFBVXJ6QixLQUVSLE1BQWhCMHJCLEVBQVMsSUFDYkEsRUFBV0EsRUFBUzV2QixNQUFPLElBQU8sS0FDakNxM0IsRUFBV3pILEdBQWF5SCxFQUFXekgsUUFBa0IxYyxRQUFTc0osS0FJOUQ2YSxFQUFXekgsR0FBYXlILEVBQVd6SCxRQUFrQjl2QixLQUFNMGMsSUFRakUsUUFBU2diLElBQStCSCxFQUFXM3lCLEVBQVMreUIsRUFBaUJDLEdBRTVFLEdBQUlDLE1BQ0hDLEVBQXFCUCxJQUFjSCxFQUVwQyxTQUFTVyxHQUFTakksR0FDakIsR0FBSWpaLEVBWUosT0FYQWdoQixHQUFXL0gsSUFBYSxFQUN4QnZ3QixFQUFPbUUsS0FBTTZ6QixFQUFXekgsT0FBa0IsU0FBVXZoQixFQUFHeXBCLEdBQ3RELEdBQUlDLEdBQXNCRCxFQUFvQnB6QixFQUFTK3lCLEVBQWlCQyxFQUN4RSxPQUFtQyxnQkFBeEJLLElBQXFDSCxHQUFxQkQsRUFBV0ksR0FJcEVILElBQ0RqaEIsRUFBV29oQixHQURmLFdBSE5yekIsRUFBUTZ5QixVQUFVcmtCLFFBQVM2a0IsR0FDM0JGLEVBQVNFLElBQ0YsS0FLRnBoQixFQUdSLE1BQU9raEIsR0FBU256QixFQUFRNnlCLFVBQVcsTUFBVUksRUFBVyxNQUFTRSxFQUFTLEtBTTNFLFFBQVNHLElBQVloekIsRUFBUUosR0FDNUIsR0FBSWdGLEdBQUszRSxFQUNSZ3pCLEVBQWM1NEIsRUFBT3MyQixhQUFhc0MsZUFFbkMsS0FBTXJ1QixJQUFPaEYsR0FDUEEsRUFBS2dGLEtBQVVoTCxhQUNqQnE1QixFQUFhcnVCLEdBQVE1RSxFQUFXQyxJQUFTQSxPQUFnQjJFLEdBQVFoRixFQUFLZ0YsR0FPMUUsT0FKSzNFLElBQ0o1RixFQUFPb0YsUUFBUSxFQUFNTyxFQUFRQyxHQUd2QkQsRUFHUjNGLEVBQU9zQixHQUFHdW9CLEtBQU8sU0FBVXdHLEVBQUt3SSxFQUFRejBCLEdBQ3ZDLEdBQW9CLGdCQUFSaXNCLElBQW9Cc0gsR0FDL0IsTUFBT0EsSUFBTW56QixNQUFPN0IsS0FBTThCLFVBRzNCLElBQUlyRCxHQUFVd0YsRUFBTWt5QixFQUNuQmxjLEVBQU9qYSxLQUNQK0QsRUFBTTJwQixFQUFJeHZCLFFBQVEsSUErQ25CLE9BN0NLNkYsSUFBTyxJQUNYdEYsRUFBV2l2QixFQUFJMXZCLE1BQU8rRixHQUN0QjJwQixFQUFNQSxFQUFJMXZCLE1BQU8sRUFBRytGLElBSWhCMUcsRUFBT3NELFdBQVl1MUIsSUFHdkJ6MEIsRUFBV3kwQixFQUNYQSxFQUFTdDVCLFdBR0VzNUIsR0FBNEIsZ0JBQVhBLEtBQzVCanlCLEVBQU8sUUFJSGdXLEVBQUsvWixPQUFTLEdBQ2xCN0MsRUFBT3N3QixNQUNORCxJQUFLQSxFQUdMenBCLEtBQU1BLEVBQ04ycEIsU0FBVSxPQUNWOW9CLEtBQU1veEIsSUFDSnQwQixLQUFLLFNBQVV3MEIsR0FHakJELEVBQVdyMEIsVUFFWG1ZLEVBQUttUyxLQUFNM3RCLEVBSVZwQixFQUFPLFNBQVNpdUIsT0FBUWp1QixFQUFPaUQsVUFBVzgxQixJQUFpQmgyQixLQUFNM0IsR0FHakUyM0IsS0FFQ0MsU0FBVTUwQixHQUFZLFNBQVVpMEIsRUFBT1ksR0FDekNyYyxFQUFLelksS0FBTUMsRUFBVTAwQixJQUFjVCxFQUFNVSxhQUFjRSxFQUFRWixNQUkxRDExQixNQUlSM0MsRUFBT21FLE1BQVEsWUFBYSxXQUFZLGVBQWdCLFlBQWEsY0FBZSxZQUFjLFNBQVVVLEVBQUcrQixHQUM5RzVHLEVBQU9zQixHQUFJc0YsR0FBUyxTQUFVdEYsR0FDN0IsTUFBT3FCLE1BQUtvb0IsR0FBSW5rQixFQUFNdEYsTUFJeEJ0QixFQUFPb0YsUUFHTjh6QixPQUFRLEVBR1JDLGdCQUNBQyxRQUVBOUMsY0FDQ2pHLElBQUs0RyxHQUNMcndCLEtBQU0sTUFDTnl5QixRQUFTOUIsR0FBZW4wQixLQUFNNHpCLEdBQWMsSUFDNUNwUixRQUFRLEVBQ1IwVCxhQUFhLEVBQ2I5SSxPQUFPLEVBQ1ArSSxZQUFhLG1EQWFidFksU0FDQ3VZLElBQUsxQixHQUNMOXVCLEtBQU0sYUFDTitsQixLQUFNLFlBQ04xbUIsSUFBSyw0QkFDTG94QixLQUFNLHFDQUdQbE8sVUFDQ2xqQixJQUFLLE1BQ0wwbUIsS0FBTSxPQUNOMEssS0FBTSxRQUdQQyxnQkFDQ3J4QixJQUFLLGNBQ0xXLEtBQU0sZUFDTnl3QixLQUFNLGdCQUtQRSxZQUdDQyxTQUFVenlCLE9BR1YweUIsYUFBYSxFQUdiQyxZQUFhOTVCLEVBQU9pSSxVQUdwQjh4QixXQUFZLzVCLEVBQU9vSSxVQU9wQnd3QixhQUNDdkksS0FBSyxFQUNMaHZCLFNBQVMsSUFPWDI0QixVQUFXLFNBQVVyMEIsRUFBUXMwQixHQUM1QixNQUFPQSxHQUdOdEIsR0FBWUEsR0FBWWh6QixFQUFRM0YsRUFBT3MyQixjQUFnQjJELEdBR3ZEdEIsR0FBWTM0QixFQUFPczJCLGFBQWMzd0IsSUFHbkN1MEIsY0FBZW5DLEdBQTZCSCxJQUM1Q3VDLGNBQWVwQyxHQUE2QkYsSUFHNUN2SCxLQUFNLFNBQVVELEVBQUtockIsR0FHQSxnQkFBUmdyQixLQUNYaHJCLEVBQVVnckIsRUFDVkEsRUFBTTl3QixXQUlQOEYsRUFBVUEsS0FFVixJQUFJKzBCLEdBRUhDLEVBRUFDLEVBQ0FDLEVBRUFDLEVBRUE5RSxFQUVBK0UsRUFFQTUxQixFQUVBdXhCLEVBQUlwMkIsRUFBT2c2QixhQUFlMzBCLEdBRTFCcTFCLEVBQWtCdEUsRUFBRS8wQixTQUFXKzBCLEVBRS9CdUUsRUFBcUJ2RSxFQUFFLzBCLFVBQWFxNUIsRUFBZ0J4M0IsVUFBWXczQixFQUFnQm40QixRQUMvRXZDLEVBQVEwNkIsR0FDUjE2QixFQUFPMmxCLE1BRVJwSSxFQUFXdmQsRUFBT2lMLFdBQ2xCMnZCLEVBQW1CNTZCLEVBQU9nYyxVQUFVLGVBRXBDNmUsRUFBYXpFLEVBQUV5RSxlQUVmQyxLQUNBQyxLQUVBMWQsRUFBUSxFQUVSMmQsRUFBVyxXQUVYM0MsR0FDQ250QixXQUFZLEVBR1ordkIsa0JBQW1CLFNBQVUxd0IsR0FDNUIsR0FBSTlILEVBQ0osSUFBZSxJQUFWNGEsRUFBYyxDQUNsQixJQUFNa2QsRUFBa0IsQ0FDdkJBLElBQ0EsT0FBUzkzQixFQUFRNjBCLEdBQVN4MEIsS0FBTXczQixHQUMvQkMsRUFBaUI5M0IsRUFBTSxHQUFHOEcsZUFBa0I5RyxFQUFPLEdBR3JEQSxFQUFRODNCLEVBQWlCaHdCLEVBQUloQixlQUU5QixNQUFnQixPQUFUOUcsRUFBZ0IsS0FBT0EsR0FJL0J5NEIsc0JBQXVCLFdBQ3RCLE1BQWlCLEtBQVY3ZCxFQUFjaWQsRUFBd0IsTUFJOUNhLGlCQUFrQixTQUFVNzFCLEVBQU1rRSxHQUNqQyxHQUFJNHhCLEdBQVE5MUIsRUFBS2lFLGFBS2pCLE9BSk04VCxLQUNML1gsRUFBT3kxQixFQUFxQkssR0FBVUwsRUFBcUJLLElBQVc5MUIsRUFDdEV3MUIsRUFBZ0J4MUIsR0FBU2tFLEdBRW5CN0csTUFJUjA0QixpQkFBa0IsU0FBVXowQixHQUkzQixNQUhNeVcsS0FDTCtZLEVBQUVrRixTQUFXMTBCLEdBRVBqRSxNQUlSazRCLFdBQVksU0FBVTcxQixHQUNyQixHQUFJNEQsRUFDSixJQUFLNUQsRUFDSixHQUFhLEVBQVJxWSxFQUNKLElBQU16VSxJQUFRNUQsR0FFYjYxQixFQUFZanlCLElBQVdpeUIsRUFBWWp5QixHQUFRNUQsRUFBSzRELFFBSWpEeXZCLEdBQU0vYSxPQUFRdFksRUFBS3F6QixFQUFNWSxRQUczQixPQUFPdDJCLE9BSVI0NEIsTUFBTyxTQUFVQyxHQUNoQixHQUFJQyxHQUFZRCxHQUFjUixDQUs5QixPQUpLWixJQUNKQSxFQUFVbUIsTUFBT0UsR0FFbEJsM0IsRUFBTSxFQUFHazNCLEdBQ0Y5NEIsTUF5Q1YsSUFwQ0E0YSxFQUFTalosUUFBUyt6QixHQUFRVyxTQUFXNEIsRUFBaUI5ZCxJQUN0RHViLEVBQU1xRCxRQUFVckQsRUFBTTl6QixLQUN0Qjh6QixFQUFNL3dCLE1BQVErd0IsRUFBTTdhLEtBTXBCNFksRUFBRS9GLE1BQVVBLEdBQU8rRixFQUFFL0YsS0FBTzRHLElBQWlCLElBQUtoeEIsUUFBU214QixHQUFPLElBQ2hFbnhCLFFBQVN3eEIsR0FBV1QsR0FBYyxHQUFNLE1BRzFDWixFQUFFeHZCLEtBQU92QixFQUFRczJCLFFBQVV0MkIsRUFBUXVCLE1BQVF3dkIsRUFBRXVGLFFBQVV2RixFQUFFeHZCLEtBR3pEd3ZCLEVBQUU4QixVQUFZbDRCLEVBQU9tQixLQUFNaTFCLEVBQUU3RixVQUFZLEtBQU1obkIsY0FBYzlHLE1BQU9mLEtBQXFCLElBR25FLE1BQWpCMDBCLEVBQUV3RixjQUNObEcsRUFBUWdDLEdBQUs1MEIsS0FBTXN6QixFQUFFL0YsSUFBSTltQixlQUN6QjZzQixFQUFFd0YsZUFBa0JsRyxHQUNqQkEsRUFBTyxLQUFRc0IsR0FBYyxJQUFPdEIsRUFBTyxLQUFRc0IsR0FBYyxLQUNoRXRCLEVBQU8sS0FBd0IsVUFBZkEsRUFBTyxHQUFrQixLQUFPLFdBQy9Dc0IsR0FBYyxLQUErQixVQUF0QkEsR0FBYyxHQUFrQixLQUFPLFVBSy9EWixFQUFFM3VCLE1BQVEydUIsRUFBRWtELGFBQWlDLGdCQUFYbEQsR0FBRTN1QixPQUN4QzJ1QixFQUFFM3VCLEtBQU96SCxFQUFPaTJCLE1BQU9HLEVBQUUzdUIsS0FBTTJ1QixFQUFFRCxjQUlsQ2dDLEdBQStCUCxHQUFZeEIsRUFBRy93QixFQUFTZ3pCLEdBR3hDLElBQVZoYixFQUNKLE1BQU9nYixFQUlSb0MsR0FBY3JFLEVBQUV4USxPQUdYNlUsR0FBbUMsSUFBcEJ6NkIsRUFBT2s1QixVQUMxQmw1QixFQUFPMmxCLE1BQU1sZixRQUFRLGFBSXRCMnZCLEVBQUV4dkIsS0FBT3d2QixFQUFFeHZCLEtBQUsxRSxjQUdoQmswQixFQUFFeUYsWUFBY3JFLEdBQVdwMEIsS0FBTWd6QixFQUFFeHZCLE1BSW5DeXpCLEVBQVdqRSxFQUFFL0YsSUFHUCtGLEVBQUV5RixhQUdGekYsRUFBRTN1QixPQUNONHlCLEVBQWFqRSxFQUFFL0YsTUFBUzhHLEdBQVkvekIsS0FBTWkzQixHQUFhLElBQU0sS0FBUWpFLEVBQUUzdUIsV0FFaEUydUIsR0FBRTN1QixNQUlMMnVCLEVBQUUxbEIsU0FBVSxJQUNoQjBsQixFQUFFL0YsSUFBTWdILEdBQUlqMEIsS0FBTWkzQixHQUdqQkEsRUFBU3AwQixRQUFTb3hCLEdBQUssT0FBU0gsTUFHaENtRCxHQUFhbEQsR0FBWS96QixLQUFNaTNCLEdBQWEsSUFBTSxLQUFRLEtBQU9uRCxPQUsvRGQsRUFBRTBGLGFBQ0Q5N0IsRUFBT201QixhQUFja0IsSUFDekJoQyxFQUFNOEMsaUJBQWtCLG9CQUFxQm43QixFQUFPbTVCLGFBQWNrQixJQUU5RHI2QixFQUFPbzVCLEtBQU1pQixJQUNqQmhDLEVBQU04QyxpQkFBa0IsZ0JBQWlCbjdCLEVBQU9vNUIsS0FBTWlCLE1BS25EakUsRUFBRTN1QixNQUFRMnVCLEVBQUV5RixZQUFjekYsRUFBRW1ELGVBQWdCLEdBQVNsMEIsRUFBUWswQixjQUNqRWxCLEVBQU04QyxpQkFBa0IsZUFBZ0IvRSxFQUFFbUQsYUFJM0NsQixFQUFNOEMsaUJBQ0wsU0FDQS9FLEVBQUU4QixVQUFXLElBQU85QixFQUFFblYsUUFBU21WLEVBQUU4QixVQUFVLElBQzFDOUIsRUFBRW5WLFFBQVNtVixFQUFFOEIsVUFBVSxLQUE4QixNQUFyQjlCLEVBQUU4QixVQUFXLEdBQWMsS0FBT0osR0FBVyxXQUFhLElBQzFGMUIsRUFBRW5WLFFBQVMsS0FJYixLQUFNcGMsSUFBS3V4QixHQUFFMkYsUUFDWjFELEVBQU04QyxpQkFBa0J0MkIsRUFBR3V4QixFQUFFMkYsUUFBU2wzQixHQUl2QyxJQUFLdXhCLEVBQUU0RixhQUFnQjVGLEVBQUU0RixXQUFXcDRCLEtBQU04MkIsRUFBaUJyQyxFQUFPakMsTUFBUSxHQUFtQixJQUFWL1ksR0FFbEYsTUFBT2diLEdBQU1rRCxPQUlkUCxHQUFXLE9BR1gsS0FBTW4yQixLQUFPNjJCLFFBQVMsRUFBR3AwQixNQUFPLEVBQUcweEIsU0FBVSxHQUM1Q1gsRUFBT3h6QixHQUFLdXhCLEVBQUd2eEIsR0FPaEIsSUFIQXUxQixFQUFZakMsR0FBK0JOLEdBQVl6QixFQUFHL3dCLEVBQVNnekIsR0FLNUQsQ0FDTkEsRUFBTW50QixXQUFhLEVBR2R1dkIsR0FDSkUsRUFBbUJsMEIsUUFBUyxZQUFjNHhCLEVBQU9qQyxJQUc3Q0EsRUFBRTVGLE9BQVM0RixFQUFFdFQsUUFBVSxJQUMzQjBYLEVBQWVydkIsV0FBVyxXQUN6Qmt0QixFQUFNa0QsTUFBTSxZQUNWbkYsRUFBRXRULFNBR04sS0FDQ3pGLEVBQVEsRUFDUitjLEVBQVU2QixLQUFNbkIsRUFBZ0J2MkIsR0FDL0IsTUFBUTZDLEdBRVQsS0FBYSxFQUFSaVcsR0FJSixLQUFNalcsRUFITjdDLEdBQU0sR0FBSTZDLFFBckJaN0MsR0FBTSxHQUFJLGVBOEJYLFNBQVNBLEdBQU0wMEIsRUFBUWlELEVBQWtCQyxFQUFXSixHQUNuRCxHQUFJSyxHQUFXVixFQUFTcDBCLEVBQU93eEIsRUFBVXVELEVBQ3hDYixFQUFhVSxDQUdDLEtBQVY3ZSxJQUtMQSxFQUFRLEVBR0htZCxHQUNKelgsYUFBY3lYLEdBS2ZKLEVBQVk3NkIsVUFHWis2QixFQUF3QnlCLEdBQVcsR0FHbkMxRCxFQUFNbnRCLFdBQWErdEIsRUFBUyxFQUFJLEVBQUksRUFHcENtRCxFQUFZbkQsR0FBVSxLQUFnQixJQUFUQSxHQUEyQixNQUFYQSxFQUd4Q2tELElBQ0pyRCxFQUFXd0QsR0FBcUJsRyxFQUFHaUMsRUFBTzhELElBSTNDckQsRUFBV3lELEdBQWFuRyxFQUFHMEMsRUFBVVQsRUFBTytELEdBR3ZDQSxHQUdDaEcsRUFBRTBGLGFBQ05PLEVBQVdoRSxFQUFNNEMsa0JBQWtCLGlCQUM5Qm9CLElBQ0pyOEIsRUFBT201QixhQUFja0IsR0FBYWdDLEdBRW5DQSxFQUFXaEUsRUFBTTRDLGtCQUFrQixRQUM5Qm9CLElBQ0pyOEIsRUFBT281QixLQUFNaUIsR0FBYWdDLElBS1osTUFBWHBELEdBQTZCLFNBQVg3QyxFQUFFeHZCLEtBQ3hCNDBCLEVBQWEsWUFHUyxNQUFYdkMsRUFDWHVDLEVBQWEsZUFJYkEsRUFBYTFDLEVBQVN6YixNQUN0QnFlLEVBQVU1QyxFQUFTcnhCLEtBQ25CSCxFQUFRd3hCLEVBQVN4eEIsTUFDakI4MEIsR0FBYTkwQixLQUtkQSxFQUFRazBCLEdBQ0h2QyxJQUFXdUMsS0FDZkEsRUFBYSxRQUNDLEVBQVR2QyxJQUNKQSxFQUFTLEtBTVpaLEVBQU1ZLE9BQVNBLEVBQ2ZaLEVBQU1tRCxZQUFlVSxHQUFvQlYsR0FBZSxHQUduRFksRUFDSjdlLEVBQVMvVyxZQUFhazBCLEdBQW1CZ0IsRUFBU0YsRUFBWW5ELElBRTlEOWEsRUFBU2lmLFdBQVk5QixHQUFtQnJDLEVBQU9tRCxFQUFZbDBCLElBSTVEK3dCLEVBQU13QyxXQUFZQSxHQUNsQkEsRUFBYXQ3QixVQUVSazdCLEdBQ0pFLEVBQW1CbDBCLFFBQVMyMUIsRUFBWSxjQUFnQixhQUNyRC9ELEVBQU9qQyxFQUFHZ0csRUFBWVYsRUFBVXAwQixJQUlwQ3N6QixFQUFpQjFkLFNBQVV3ZCxHQUFtQnJDLEVBQU9tRCxJQUVoRGYsSUFDSkUsRUFBbUJsMEIsUUFBUyxnQkFBa0I0eEIsRUFBT2pDLE1BRTNDcDJCLEVBQU9rNUIsUUFDaEJsNUIsRUFBTzJsQixNQUFNbGYsUUFBUSxjQUt4QixNQUFPNHhCLElBR1JvRSxRQUFTLFNBQVVwTSxFQUFLNW9CLEVBQU1yRCxHQUM3QixNQUFPcEUsR0FBTzZELElBQUt3c0IsRUFBSzVvQixFQUFNckQsRUFBVSxTQUd6Q3M0QixVQUFXLFNBQVVyTSxFQUFLanNCLEdBQ3pCLE1BQU9wRSxHQUFPNkQsSUFBS3dzQixFQUFLOXdCLFVBQVc2RSxFQUFVLGFBSS9DcEUsRUFBT21FLE1BQVEsTUFBTyxRQUFVLFNBQVVVLEVBQUc4MkIsR0FDNUMzN0IsRUFBUTI3QixHQUFXLFNBQVV0TCxFQUFLNW9CLEVBQU1yRCxFQUFVd0MsR0FRakQsTUFOSzVHLEdBQU9zRCxXQUFZbUUsS0FDdkJiLEVBQU9BLEdBQVF4QyxFQUNmQSxFQUFXcUQsRUFDWEEsRUFBT2xJLFdBR0RTLEVBQU9zd0IsTUFDYkQsSUFBS0EsRUFDTHpwQixLQUFNKzBCLEVBQ05wTCxTQUFVM3BCLEVBQ1ZhLEtBQU1BLEVBQ05pMEIsUUFBU3QzQixNQVNaLFNBQVNrNEIsSUFBcUJsRyxFQUFHaUMsRUFBTzhELEdBRXZDLEdBQUlRLEdBQUkvMUIsRUFBTWcyQixFQUFlQyxFQUM1QnRSLEVBQVc2SyxFQUFFN0ssU0FDYjJNLEVBQVk5QixFQUFFOEIsU0FHZixPQUEwQixNQUFuQkEsRUFBVyxHQUNqQkEsRUFBVXRuQixRQUNMK3JCLElBQU9wOUIsWUFDWG85QixFQUFLdkcsRUFBRWtGLFVBQVlqRCxFQUFNNEMsa0JBQWtCLGdCQUs3QyxJQUFLMEIsRUFDSixJQUFNLzFCLElBQVEya0IsR0FDYixHQUFLQSxFQUFVM2tCLElBQVUya0IsRUFBVTNrQixHQUFPeEQsS0FBTXU1QixHQUFPLENBQ3REekUsRUFBVXJrQixRQUFTak4sRUFDbkIsT0FNSCxHQUFLc3hCLEVBQVcsSUFBT2lFLEdBQ3RCUyxFQUFnQjFFLEVBQVcsT0FDckIsQ0FFTixJQUFNdHhCLElBQVF1MUIsR0FBWSxDQUN6QixJQUFNakUsRUFBVyxJQUFPOUIsRUFBRXVELFdBQVkveUIsRUFBTyxJQUFNc3hCLEVBQVUsSUFBTyxDQUNuRTBFLEVBQWdCaDJCLENBQ2hCLE9BRUtpMkIsSUFDTEEsRUFBZ0JqMkIsR0FJbEJnMkIsRUFBZ0JBLEdBQWlCQyxFQU1sQyxNQUFLRCxJQUNDQSxJQUFrQjFFLEVBQVcsSUFDakNBLEVBQVVya0IsUUFBUytvQixHQUViVCxFQUFXUyxJQUpuQixVQVdELFFBQVNMLElBQWFuRyxFQUFHMEMsRUFBVVQsRUFBTytELEdBQ3pDLEdBQUlVLEdBQU9DLEVBQVNDLEVBQU0xMEIsRUFBS2tqQixFQUM5Qm1PLEtBRUF6QixFQUFZOUIsRUFBRThCLFVBQVV2M0IsT0FHekIsSUFBS3UzQixFQUFXLEdBQ2YsSUFBTThFLElBQVE1RyxHQUFFdUQsV0FDZkEsRUFBWXFELEVBQUt6ekIsZUFBa0I2c0IsRUFBRXVELFdBQVlxRCxFQUluREQsR0FBVTdFLEVBQVV0bkIsT0FHcEIsT0FBUW1zQixFQWNQLEdBWkszRyxFQUFFc0QsZUFBZ0JxRCxLQUN0QjFFLEVBQU9qQyxFQUFFc0QsZUFBZ0JxRCxJQUFjakUsSUFJbEN0TixHQUFRNFEsR0FBYWhHLEVBQUU2RyxhQUM1Qm5FLEVBQVcxQyxFQUFFNkcsV0FBWW5FLEVBQVUxQyxFQUFFN0YsV0FHdEMvRSxFQUFPdVIsRUFDUEEsRUFBVTdFLEVBQVV0bkIsUUFLbkIsR0FBaUIsTUFBWm1zQixFQUVKQSxFQUFVdlIsTUFHSixJQUFjLE1BQVRBLEdBQWdCQSxJQUFTdVIsRUFBVSxDQU05QyxHQUhBQyxFQUFPckQsRUFBWW5PLEVBQU8sSUFBTXVSLElBQWFwRCxFQUFZLEtBQU9vRCxJQUcxREMsRUFDTCxJQUFNRixJQUFTbkQsR0FJZCxHQURBcnhCLEVBQU13MEIsRUFBTXp4QixNQUFPLEtBQ2QvQyxFQUFLLEtBQVF5MEIsSUFHakJDLEVBQU9yRCxFQUFZbk8sRUFBTyxJQUFNbGpCLEVBQUssS0FDcENxeEIsRUFBWSxLQUFPcnhCLEVBQUssS0FDYixDQUVOMDBCLEtBQVMsRUFDYkEsRUFBT3JELEVBQVltRCxHQUdSbkQsRUFBWW1ELE1BQVksSUFDbkNDLEVBQVV6MEIsRUFBSyxHQUNmNHZCLEVBQVVya0IsUUFBU3ZMLEVBQUssSUFFekIsT0FPSixHQUFLMDBCLEtBQVMsRUFHYixHQUFLQSxHQUFRNUcsRUFBRyxVQUNmMEMsRUFBV2tFLEVBQU1sRSxPQUVqQixLQUNDQSxFQUFXa0UsRUFBTWxFLEdBQ2hCLE1BQVExeEIsR0FDVCxPQUFTaVcsTUFBTyxjQUFlL1YsTUFBTzAxQixFQUFPNTFCLEVBQUksc0JBQXdCb2tCLEVBQU8sT0FBU3VSLElBUS9GLE9BQVMxZixNQUFPLFVBQVc1VixLQUFNcXhCLEdBR2xDOTRCLEVBQU9nNkIsV0FDTi9ZLFNBQ0NwWSxPQUFRLDZGQUVUMGlCLFVBQ0MxaUIsT0FBUSx1QkFFVDh3QixZQUNDdUQsY0FBZSxTQUFVbDBCLEdBRXhCLE1BREFoSixHQUFPMkksV0FBWUssR0FDWkEsTUFNVmhKLEVBQU9rNkIsY0FBZSxTQUFVLFNBQVU5RCxHQUNwQ0EsRUFBRTFsQixRQUFVblIsWUFDaEI2MkIsRUFBRTFsQixPQUFRLEdBRU4wbEIsRUFBRXdGLGNBQ054RixFQUFFeHZCLEtBQU8sU0FLWDVHLEVBQU9tNkIsY0FBZSxTQUFVLFNBQVUvRCxHQUV6QyxHQUFLQSxFQUFFd0YsWUFBYyxDQUNwQixHQUFJL3lCLEdBQVF6RSxDQUNaLFFBQ0M2M0IsS0FBTSxTQUFVanRCLEVBQUdncUIsR0FDbEJud0IsRUFBUzdJLEVBQU8sWUFBWXVoQixNQUMzQmlQLE9BQU8sRUFDUDJNLFFBQVMvRyxFQUFFZ0gsY0FDWDczQixJQUFLNndCLEVBQUUvRixNQUNMdEYsR0FDRixhQUNBM21CLEVBQVcsU0FBVWk1QixHQUNwQngwQixFQUFPZCxTQUNQM0QsRUFBVyxLQUNOaTVCLEdBQ0pyRSxFQUF1QixVQUFicUUsRUFBSXoyQixLQUFtQixJQUFNLElBQUt5MkIsRUFBSXoyQixRQUluRGhILEVBQVNxSixLQUFLQyxZQUFhTCxFQUFRLEtBRXBDMHlCLE1BQU8sV0FDRG4zQixHQUNKQSxRQU1MLElBQUlrNUIsT0FDSEMsR0FBUyxtQkFHVnY5QixHQUFPZzZCLFdBQ053RCxNQUFPLFdBQ1BDLGNBQWUsV0FDZCxHQUFJcjVCLEdBQVdrNUIsR0FBYXJ3QixPQUFXak4sRUFBTzhGLFFBQVUsSUFBUW94QixJQUVoRSxPQURBdjBCLE1BQU15QixJQUFhLEVBQ1pBLEtBS1RwRSxFQUFPazZCLGNBQWUsYUFBYyxTQUFVOUQsRUFBR3NILEVBQWtCckYsR0FFbEUsR0FBSXNGLEdBQWNDLEVBQWFDLEVBQzlCQyxFQUFXMUgsRUFBRW9ILFNBQVUsSUFBV0QsR0FBT242QixLQUFNZ3pCLEVBQUUvRixLQUNoRCxNQUNrQixnQkFBWCtGLEdBQUUzdUIsUUFBd0IydUIsRUFBRW1ELGFBQWUsSUFBSzE0QixRQUFRLHNDQUF3QzA4QixHQUFPbjZCLEtBQU1nekIsRUFBRTN1QixPQUFVLE9BSWxJLE9BQUtxMkIsSUFBaUMsVUFBckIxSCxFQUFFOEIsVUFBVyxJQUc3QnlGLEVBQWV2SCxFQUFFcUgsY0FBZ0J6OUIsRUFBT3NELFdBQVk4eUIsRUFBRXFILGVBQ3JEckgsRUFBRXFILGdCQUNGckgsRUFBRXFILGNBR0VLLEVBQ0oxSCxFQUFHMEgsR0FBYTFILEVBQUcwSCxHQUFXNzNCLFFBQVNzM0IsR0FBUSxLQUFPSSxHQUMzQ3ZILEVBQUVvSCxTQUFVLElBQ3ZCcEgsRUFBRS9GLE1BQVM4RyxHQUFZL3pCLEtBQU1nekIsRUFBRS9GLEtBQVEsSUFBTSxLQUFRK0YsRUFBRW9ILE1BQVEsSUFBTUcsR0FJdEV2SCxFQUFFdUQsV0FBVyxlQUFpQixXQUk3QixNQUhNa0UsSUFDTDc5QixFQUFPc0gsTUFBT3EyQixFQUFlLG1CQUV2QkUsRUFBbUIsSUFJM0J6SCxFQUFFOEIsVUFBVyxHQUFNLE9BR25CMEYsRUFBY3QrQixFQUFRcStCLEdBQ3RCcitCLEVBQVFxK0IsR0FBaUIsV0FDeEJFLEVBQW9CcDVCLFdBSXJCNHpCLEVBQU0vYSxPQUFPLFdBRVpoZSxFQUFRcStCLEdBQWlCQyxFQUdwQnhILEVBQUd1SCxLQUVQdkgsRUFBRXFILGNBQWdCQyxFQUFpQkQsY0FHbkNILEdBQWE3OEIsS0FBTWs5QixJQUlmRSxHQUFxQjc5QixFQUFPc0QsV0FBWXM2QixJQUM1Q0EsRUFBYUMsRUFBbUIsSUFHakNBLEVBQW9CRCxFQUFjcitCLFlBSTVCLFVBdERSLFlBeUREUyxFQUFPczJCLGFBQWF5SCxJQUFNLFdBQ3pCLElBQ0MsTUFBTyxJQUFJQyxnQkFDVixNQUFPNTJCLEtBR1YsSUFBSTYyQixJQUFlaitCLEVBQU9zMkIsYUFBYXlILE1BQ3RDRyxJQUVDLEVBQUcsSUFHSEMsS0FBTSxLQUtQQyxHQUFRLEVBQ1JDLEtBRUkvK0IsR0FBT2cvQixlQUNYdCtCLEVBQVFWLEdBQVN5ckIsR0FBSSxTQUFVLFdBQzlCLElBQUssR0FBSXhnQixLQUFPOHpCLElBQ2ZBLEdBQWM5ekIsSUFFZjh6QixJQUFlOStCLFlBSWpCUyxFQUFPc0wsUUFBUWl6QixPQUFTTixJQUFrQixtQkFBcUJBLElBQy9EaitCLEVBQU9zTCxRQUFRZ2xCLEtBQU8yTixLQUFpQkEsR0FFdkNqK0IsRUFBT202QixjQUFjLFNBQVU5MEIsR0FDOUIsR0FBSWpCLEVBRUosT0FBS3BFLEdBQU9zTCxRQUFRaXpCLE1BQVFOLEtBQWlCNTRCLEVBQVF1MkIsYUFFbkRLLEtBQU0sU0FBVUYsRUFBUy9DLEdBQ3hCLEdBQUluMEIsR0FBR2dMLEVBQ05rdUIsRUFBTTE0QixFQUFRMDRCLEtBR2YsSUFGQUEsRUFBSVMsS0FBTW41QixFQUFRdUIsS0FBTXZCLEVBQVFnckIsSUFBS2hyQixFQUFRbXJCLE1BQU9uckIsRUFBUW81QixTQUFVcDVCLEVBQVE2UyxVQUV6RTdTLEVBQVFxNUIsVUFDWixJQUFNNzVCLElBQUtRLEdBQVFxNUIsVUFDbEJYLEVBQUtsNUIsR0FBTVEsRUFBUXE1QixVQUFXNzVCLEVBSTNCUSxHQUFRaTJCLFVBQVl5QyxFQUFJMUMsa0JBQzVCMEMsRUFBSTFDLGlCQUFrQmgyQixFQUFRaTJCLFVBT3pCajJCLEVBQVF1MkIsYUFBZ0JHLEVBQVEsc0JBQ3JDQSxFQUFRLG9CQUFzQixpQkFHL0IsS0FBTWwzQixJQUFLazNCLEdBQ1ZnQyxFQUFJNUMsaUJBQWtCdDJCLEVBQUdrM0IsRUFBU2wzQixHQUduQ1QsR0FBVyxTQUFVd0MsR0FDcEIsTUFBTyxZQUNEeEMsVUFDR2k2QixJQUFjeHVCLEdBQ3JCekwsRUFBVzI1QixFQUFJWSxPQUFTWixFQUFJYSxRQUFVLEtBQ3hCLFVBQVRoNEIsRUFDSm0zQixFQUFJeEMsUUFDZ0IsVUFBVDMwQixFQUNYb3lCLEVBRUMrRSxFQUFJOUUsUUFBVSxJQUNkOEUsRUFBSXZDLFlBR0x4QyxFQUNDa0YsR0FBa0JILEVBQUk5RSxTQUFZOEUsRUFBSTlFLE9BQ3RDOEUsRUFBSXZDLFdBSXdCLGdCQUFyQnVDLEdBQUloRixjQUNWL3ZCLEtBQU0rMEIsRUFBSWhGLGNBQ1B4NUIsVUFDSncrQixFQUFJN0MsNEJBT1Q2QyxFQUFJWSxPQUFTdjZCLElBQ2IyNUIsRUFBSWEsUUFBVXg2QixFQUFTLFNBRXZCQSxFQUFXaTZCLEdBQWV4dUIsRUFBS3V1QixNQUFhaDZCLEVBQVMsU0FJckQyNUIsRUFBSTlCLEtBQU01MkIsRUFBUXcyQixZQUFjeDJCLEVBQVFvQyxNQUFRLE9BRWpEOHpCLE1BQU8sV0FDRG4zQixHQUNKQSxNQXRFSixXQTRFRCxJQUFJeTZCLElBQU9DLEdBQ1ZDLEdBQVcseUJBQ1hDLEdBQWF0eEIsT0FBUSxpQkFBbUJsTSxFQUFZLGNBQWUsS0FDbkV5OUIsR0FBTyxjQUNQQyxJQUF3QkMsSUFDeEJDLElBQ0M1RixLQUFNLFNBQVVqWSxFQUFNL1gsR0FDckIsR0FBSTYxQixHQUFRMThCLEtBQUsyOEIsWUFBYS9kLEVBQU0vWCxHQUNuQzdELEVBQVMwNUIsRUFBTWh1QixNQUNmcWtCLEVBQVFzSixHQUFPbDhCLEtBQU0wRyxHQUNyQisxQixFQUFPN0osR0FBU0EsRUFBTyxLQUFTMTFCLEVBQU93ekIsVUFBV2pTLEdBQVMsR0FBSyxNQUdoRXpMLEdBQVU5VixFQUFPd3pCLFVBQVdqUyxJQUFtQixPQUFUZ2UsSUFBa0I1NUIsSUFDdkRxNUIsR0FBT2w4QixLQUFNOUMsRUFBTzR5QixJQUFLeU0sRUFBTTM4QixLQUFNNmUsSUFDdENpZSxFQUFRLEVBQ1JDLEVBQWdCLEVBRWpCLElBQUszcEIsR0FBU0EsRUFBTyxLQUFReXBCLEVBQU8sQ0FFbkNBLEVBQU9BLEdBQVF6cEIsRUFBTyxHQUd0QjRmLEVBQVFBLE1BR1I1ZixHQUFTblEsR0FBVSxDQUVuQixHQUdDNjVCLEdBQVFBLEdBQVMsS0FHakIxcEIsR0FBZ0IwcEIsRUFDaEJ4L0IsRUFBT2dMLE1BQU9xMEIsRUFBTTM4QixLQUFNNmUsRUFBTXpMLEVBQVF5cEIsU0FJL0JDLEtBQVdBLEVBQVFILEVBQU1odUIsTUFBUTFMLElBQXFCLElBQVY2NUIsS0FBaUJDLEdBYXhFLE1BVEsvSixLQUNKNWYsRUFBUXVwQixFQUFNdnBCLE9BQVNBLElBQVVuUSxHQUFVLEVBQzNDMDVCLEVBQU1FLEtBQU9BLEVBRWJGLEVBQU1wNkIsSUFBTXl3QixFQUFPLEdBQ2xCNWYsR0FBVTRmLEVBQU8sR0FBTSxHQUFNQSxFQUFPLElBQ25DQSxFQUFPLElBR0gySixJQUtWLFNBQVNLLE1BSVIsTUFIQXYwQixZQUFXLFdBQ1YwekIsR0FBUXQvQixZQUVBcy9CLEdBQVE3K0IsRUFBTzRLLE1BR3pCLFFBQVMwMEIsSUFBYTkxQixFQUFPK1gsRUFBTW9lLEdBQ2xDLEdBQUlOLEdBQ0hPLEdBQWVSLEdBQVU3ZCxRQUFlaGhCLE9BQVE2K0IsR0FBVSxNQUMxRHJpQixFQUFRLEVBQ1JsYSxFQUFTKzhCLEVBQVcvOEIsTUFDckIsTUFBZ0JBLEVBQVJrYSxFQUFnQkEsSUFDdkIsR0FBTXNpQixFQUFRTyxFQUFZN2lCLEdBQVFuWixLQUFNKzdCLEVBQVdwZSxFQUFNL1gsR0FHeEQsTUFBTzYxQixHQUtWLFFBQVNRLElBQVduOUIsRUFBTW85QixFQUFZejZCLEdBQ3JDLEdBQUlrUSxHQUNId3FCLEVBQ0FoakIsRUFBUSxFQUNSbGEsRUFBU3E4QixHQUFvQnI4QixPQUM3QjBhLEVBQVd2ZCxFQUFPaUwsV0FBV3FTLE9BQVEsaUJBRTdCMGlCLEdBQUt0OUIsT0FFYnM5QixFQUFPLFdBQ04sR0FBS0QsRUFDSixPQUFPLENBRVIsSUFBSUUsR0FBY3BCLElBQVNhLEtBQzFCbGhCLEVBQVl6WSxLQUFLd2UsSUFBSyxFQUFHb2IsRUFBVU8sVUFBWVAsRUFBVVEsU0FBV0YsR0FFcEV0bUIsRUFBTzZFLEVBQVltaEIsRUFBVVEsVUFBWSxFQUN6Q0MsRUFBVSxFQUFJem1CLEVBQ2RvRCxFQUFRLEVBQ1JsYSxFQUFTODhCLEVBQVVVLE9BQU94OUIsTUFFM0IsTUFBZ0JBLEVBQVJrYSxFQUFpQkEsSUFDeEI0aUIsRUFBVVUsT0FBUXRqQixHQUFRdWpCLElBQUtGLEVBS2hDLE9BRkE3aUIsR0FBU3FCLFdBQVlsYyxHQUFRaTlCLEVBQVdTLEVBQVM1aEIsSUFFbEMsRUFBVjRoQixHQUFldjlCLEVBQ1oyYixHQUVQakIsRUFBUy9XLFlBQWE5RCxHQUFRaTlCLEtBQ3ZCLElBR1RBLEVBQVlwaUIsRUFBU2paLFNBQ3BCNUIsS0FBTUEsRUFDTmdtQixNQUFPMW9CLEVBQU9vRixVQUFZMDZCLEdBQzFCUyxLQUFNdmdDLEVBQU9vRixRQUFRLEdBQVFvN0Isa0JBQXFCbjdCLEdBQ2xEbzdCLG1CQUFvQlgsRUFDcEIxSCxnQkFBaUIveUIsRUFDakI2NkIsVUFBV3JCLElBQVNhLEtBQ3BCUyxTQUFVOTZCLEVBQVE4NkIsU0FDbEJFLFVBQ0FmLFlBQWEsU0FBVS9kLEVBQU10YyxHQUM1QixHQUFJbzZCLEdBQVFyL0IsRUFBTzBnQyxNQUFPaCtCLEVBQU1pOUIsRUFBVVksS0FBTWhmLEVBQU10YyxFQUNwRDA2QixFQUFVWSxLQUFLQyxjQUFlamYsSUFBVW9lLEVBQVVZLEtBQUtJLE9BRXpELE9BREFoQixHQUFVVSxPQUFPNS9CLEtBQU00K0IsR0FDaEJBLEdBRVI3YyxLQUFNLFNBQVVvZSxHQUNmLEdBQUk3akIsR0FBUSxFQUdYbGEsRUFBUys5QixFQUFVakIsRUFBVVUsT0FBT3g5QixPQUFTLENBQzlDLElBQUtrOUIsRUFDSixNQUFPcDlCLEtBR1IsS0FEQW85QixHQUFVLEVBQ01sOUIsRUFBUmthLEVBQWlCQSxJQUN4QjRpQixFQUFVVSxPQUFRdGpCLEdBQVF1akIsSUFBSyxFQVVoQyxPQUxLTSxHQUNKcmpCLEVBQVMvVyxZQUFhOUQsR0FBUWk5QixFQUFXaUIsSUFFekNyakIsRUFBU2lmLFdBQVk5NUIsR0FBUWk5QixFQUFXaUIsSUFFbENqK0IsUUFHVCtsQixFQUFRaVgsRUFBVWpYLEtBSW5CLEtBRkFtWSxHQUFZblksRUFBT2lYLEVBQVVZLEtBQUtDLGVBRWxCMzlCLEVBQVJrYSxFQUFpQkEsSUFFeEIsR0FEQXhILEVBQVMycEIsR0FBcUJuaUIsR0FBUW5aLEtBQU0rN0IsRUFBV2o5QixFQUFNZ21CLEVBQU9pWCxFQUFVWSxNQUU3RSxNQUFPaHJCLEVBbUJULE9BZkF2VixHQUFPZ0YsSUFBSzBqQixFQUFPNFcsR0FBYUssR0FFM0IzL0IsRUFBT3NELFdBQVlxOEIsRUFBVVksS0FBS3pxQixRQUN0QzZwQixFQUFVWSxLQUFLenFCLE1BQU1sUyxLQUFNbEIsRUFBTWk5QixHQUdsQzMvQixFQUFPNGlCLEdBQUdrZSxNQUNUOWdDLEVBQU9vRixPQUFRNDZCLEdBQ2R0OUIsS0FBTUEsRUFDTnErQixLQUFNcEIsRUFDTnpkLE1BQU95ZCxFQUFVWSxLQUFLcmUsU0FLakJ5ZCxFQUFVMWhCLFNBQVUwaEIsRUFBVVksS0FBS3RpQixVQUN4QzFaLEtBQU1vN0IsRUFBVVksS0FBS2g4QixLQUFNbzdCLEVBQVVZLEtBQUt2SCxVQUMxQ3hiLEtBQU1taUIsRUFBVVksS0FBSy9pQixNQUNyQkYsT0FBUXFpQixFQUFVWSxLQUFLampCLFFBRzFCLFFBQVN1akIsSUFBWW5ZLEVBQU84WCxHQUMzQixHQUFJempCLEdBQU96WCxFQUFNcTdCLEVBQVFuM0IsRUFBTzZZLENBR2hDLEtBQU10RixJQUFTMkwsR0FlZCxHQWRBcGpCLEVBQU90RixFQUFPb0osVUFBVzJULEdBQ3pCNGpCLEVBQVNILEVBQWVsN0IsR0FDeEJrRSxFQUFRa2YsRUFBTzNMLEdBQ1YvYyxFQUFPNkYsUUFBUzJELEtBQ3BCbTNCLEVBQVNuM0IsRUFBTyxHQUNoQkEsRUFBUWtmLEVBQU8zTCxHQUFVdlQsRUFBTyxJQUc1QnVULElBQVV6WCxJQUNkb2pCLEVBQU9wakIsR0FBU2tFLFFBQ1RrZixHQUFPM0wsSUFHZnNGLEVBQVFyaUIsRUFBT3F6QixTQUFVL3RCLEdBQ3BCK2MsR0FBUyxVQUFZQSxHQUFRLENBQ2pDN1ksRUFBUTZZLEVBQU1tVCxPQUFRaHNCLFNBQ2ZrZixHQUFPcGpCLEVBSWQsS0FBTXlYLElBQVN2VCxHQUNOdVQsSUFBUzJMLEtBQ2hCQSxFQUFPM0wsR0FBVXZULEVBQU91VCxHQUN4QnlqQixFQUFlempCLEdBQVU0akIsT0FJM0JILEdBQWVsN0IsR0FBU3E3QixFQUszQjNnQyxFQUFPNi9CLFVBQVk3L0IsRUFBT29GLE9BQVF5NkIsSUFFakNtQixRQUFTLFNBQVV0WSxFQUFPdGtCLEdBQ3BCcEUsRUFBT3NELFdBQVlvbEIsSUFDdkJ0a0IsRUFBV3NrQixFQUNYQSxHQUFVLE1BRVZBLEVBQVFBLEVBQU1yZCxNQUFNLElBR3JCLElBQUlrVyxHQUNIeEUsRUFBUSxFQUNSbGEsRUFBUzZsQixFQUFNN2xCLE1BRWhCLE1BQWdCQSxFQUFSa2EsRUFBaUJBLElBQ3hCd0UsRUFBT21ILEVBQU8zTCxHQUNkcWlCLEdBQVU3ZCxHQUFTNmQsR0FBVTdkLE9BQzdCNmQsR0FBVTdkLEdBQU8xTixRQUFTelAsSUFJNUI2OEIsVUFBVyxTQUFVNzhCLEVBQVVpcUIsR0FDekJBLEVBQ0o2USxHQUFvQnJyQixRQUFTelAsR0FFN0I4NkIsR0FBb0J6K0IsS0FBTTJELEtBSzdCLFNBQVMrNkIsSUFBa0J6OEIsRUFBTWdtQixFQUFPNlgsR0FFdkMsR0FBSWhmLEdBQU0vWCxFQUFPNHBCLEVBQVFpTSxFQUFPaGQsRUFBTzZlLEVBQ3RDSCxFQUFPcCtCLEtBQ1Bnb0IsS0FDQTNmLEVBQVF0SSxFQUFLc0ksTUFDYmdvQixFQUFTdHdCLEVBQUtRLFVBQVl3dkIsR0FBVWh3QixHQUNwQ3krQixFQUFXeGdCLEVBQVU5YyxJQUFLbkIsRUFBTSxTQUczQjY5QixHQUFLcmUsUUFDVkcsRUFBUXJpQixFQUFPc2lCLFlBQWE1ZixFQUFNLE1BQ1gsTUFBbEIyZixFQUFNK2UsV0FDVi9lLEVBQU0rZSxTQUFXLEVBQ2pCRixFQUFVN2UsRUFBTTdLLE1BQU1rRixLQUN0QjJGLEVBQU03SyxNQUFNa0YsS0FBTyxXQUNaMkYsRUFBTStlLFVBQ1hGLE1BSUg3ZSxFQUFNK2UsV0FFTkwsRUFBS3pqQixPQUFPLFdBR1h5akIsRUFBS3pqQixPQUFPLFdBQ1grRSxFQUFNK2UsV0FDQXBoQyxFQUFPa2lCLE1BQU94ZixFQUFNLE1BQU9HLFFBQ2hDd2YsRUFBTTdLLE1BQU1rRixZQU9PLElBQWxCaGEsRUFBS1EsV0FBb0IsVUFBWXdsQixJQUFTLFNBQVdBLE1BSzdENlgsRUFBS2MsVUFBYXIyQixFQUFNcTJCLFNBQVVyMkIsRUFBTXMyQixVQUFXdDJCLEVBQU11MkIsV0FJbEIsV0FBbEN2aEMsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDVyxTQUFoQzFDLEVBQU80eUIsSUFBS2x3QixFQUFNLFdBRW5Cc0ksRUFBTWluQixRQUFVLGlCQUlic08sRUFBS2MsV0FDVHIyQixFQUFNcTJCLFNBQVcsU0FDakJOLEVBQUt6akIsT0FBTyxXQUNYdFMsRUFBTXEyQixTQUFXZCxFQUFLYyxTQUFVLEdBQ2hDcjJCLEVBQU1zMkIsVUFBWWYsRUFBS2MsU0FBVSxHQUNqQ3IyQixFQUFNdTJCLFVBQVloQixFQUFLYyxTQUFVLEtBTW5DLEtBQU05ZixJQUFRbUgsR0FFYixHQURBbGYsRUFBUWtmLEVBQU9uSCxHQUNWd2QsR0FBU2o4QixLQUFNMEcsR0FBVSxDQUc3QixTQUZPa2YsR0FBT25ILEdBQ2Q2UixFQUFTQSxHQUFvQixXQUFWNXBCLEVBQ2RBLEtBQVl3cEIsRUFBUyxPQUFTLFFBQVcsQ0FHN0MsR0FBZSxTQUFWeHBCLElBQW9CMjNCLEdBQVlBLEVBQVU1ZixLQUFXaGlCLFVBR3pELFFBRkF5ekIsSUFBUyxFQUtYckksRUFBTXBKLEdBQVM0ZixHQUFZQSxFQUFVNWYsSUFBVXZoQixFQUFPZ0wsTUFBT3RJLEVBQU02ZSxHQUlyRSxJQUFNdmhCLEVBQU9xSCxjQUFlc2pCLEdBQVMsQ0FDL0J3VyxFQUNDLFVBQVlBLEtBQ2hCbk8sRUFBU21PLEVBQVNuTyxRQUduQm1PLEVBQVd4Z0IsRUFBVXJXLE9BQVE1SCxFQUFNLGFBSS9CMHdCLElBQ0orTixFQUFTbk8sUUFBVUEsR0FFZkEsRUFDSmh6QixFQUFRMEMsR0FBT3F3QixPQUVmZ08sRUFBS3g4QixLQUFLLFdBQ1R2RSxFQUFRMEMsR0FBT3l3QixTQUdqQjROLEVBQUt4OEIsS0FBSyxXQUNULEdBQUlnZCxFQUVKWixHQUFVNVksT0FBUXJGLEVBQU0sU0FDeEIsS0FBTTZlLElBQVFvSixHQUNiM3FCLEVBQU9nTCxNQUFPdEksRUFBTTZlLEVBQU1vSixFQUFNcEosS0FHbEMsS0FBTUEsSUFBUW9KLEdBQ2IwVSxFQUFRQyxHQUFhdE0sRUFBU21PLEVBQVU1ZixHQUFTLEVBQUdBLEVBQU13ZixHQUVsRHhmLElBQVE0ZixLQUNmQSxFQUFVNWYsR0FBUzhkLEVBQU12cEIsTUFDcEJrZCxJQUNKcU0sRUFBTXA2QixJQUFNbzZCLEVBQU12cEIsTUFDbEJ1cEIsRUFBTXZwQixNQUFpQixVQUFUeUwsR0FBNkIsV0FBVEEsRUFBb0IsRUFBSSxLQU8vRCxRQUFTbWYsSUFBT2grQixFQUFNMkMsRUFBU2tjLEVBQU10YyxFQUFLMDdCLEdBQ3pDLE1BQU8sSUFBSUQsSUFBTXArQixVQUFVZixLQUFNbUIsRUFBTTJDLEVBQVNrYyxFQUFNdGMsRUFBSzA3QixHQUU1RDNnQyxFQUFPMGdDLE1BQVFBLEdBRWZBLEdBQU1wK0IsV0FDTEUsWUFBYWsrQixHQUNibi9CLEtBQU0sU0FBVW1CLEVBQU0yQyxFQUFTa2MsRUFBTXRjLEVBQUswN0IsRUFBUXBCLEdBQ2pENThCLEtBQUtELEtBQU9BLEVBQ1pDLEtBQUs0ZSxLQUFPQSxFQUNaNWUsS0FBS2crQixPQUFTQSxHQUFVLFFBQ3hCaCtCLEtBQUswQyxRQUFVQSxFQUNmMUMsS0FBS21ULE1BQVFuVCxLQUFLaUksSUFBTWpJLEtBQUswTyxNQUM3QjFPLEtBQUtzQyxJQUFNQSxFQUNYdEMsS0FBSzQ4QixLQUFPQSxJQUFVdi9CLEVBQU93ekIsVUFBV2pTLEdBQVMsR0FBSyxPQUV2RGxRLElBQUssV0FDSixHQUFJZ1IsR0FBUXFlLEdBQU0xYixVQUFXcmlCLEtBQUs0ZSxLQUVsQyxPQUFPYyxJQUFTQSxFQUFNeGUsSUFDckJ3ZSxFQUFNeGUsSUFBS2xCLE1BQ1grOUIsR0FBTTFiLFVBQVVnRCxTQUFTbmtCLElBQUtsQixPQUVoQzI5QixJQUFLLFNBQVVGLEdBQ2QsR0FBSW9CLEdBQ0huZixFQUFRcWUsR0FBTTFiLFVBQVdyaUIsS0FBSzRlLEtBb0IvQixPQWpCQzVlLE1BQUtrcEIsSUFBTTJWLEVBRFA3K0IsS0FBSzBDLFFBQVE4NkIsU0FDRW5nQyxFQUFPMmdDLE9BQVFoK0IsS0FBS2crQixRQUN0Q1AsRUFBU3o5QixLQUFLMEMsUUFBUTg2QixTQUFXQyxFQUFTLEVBQUcsRUFBR3o5QixLQUFLMEMsUUFBUTg2QixVQUczQ0MsRUFFcEJ6OUIsS0FBS2lJLEtBQVFqSSxLQUFLc0MsSUFBTXRDLEtBQUttVCxPQUFVMHJCLEVBQVE3K0IsS0FBS21ULE1BRS9DblQsS0FBSzBDLFFBQVFvOEIsTUFDakI5K0IsS0FBSzBDLFFBQVFvOEIsS0FBSzc5QixLQUFNakIsS0FBS0QsS0FBTUMsS0FBS2lJLElBQUtqSSxNQUd6QzBmLEdBQVNBLEVBQU1mLElBQ25CZSxFQUFNZixJQUFLM2UsTUFFWCs5QixHQUFNMWIsVUFBVWdELFNBQVMxRyxJQUFLM2UsTUFFeEJBLE9BSVQrOUIsR0FBTXArQixVQUFVZixLQUFLZSxVQUFZbytCLEdBQU1wK0IsVUFFdkNvK0IsR0FBTTFiLFdBQ0xnRCxVQUNDbmtCLElBQUssU0FBVXc3QixHQUNkLEdBQUk5cEIsRUFFSixPQUFpQyxPQUE1QjhwQixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLE9BQ3BCOGQsRUFBTTM4QixLQUFLc0ksT0FBMkMsTUFBbENxMEIsRUFBTTM4QixLQUFLc0ksTUFBT3EwQixFQUFNOWQsT0FRL0NoTSxFQUFTdlYsRUFBTzR5QixJQUFLeU0sRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxLQUFNLElBRXJDaE0sR0FBcUIsU0FBWEEsRUFBd0JBLEVBQUosR0FUOUI4cEIsRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxPQVczQkQsSUFBSyxTQUFVK2QsR0FHVHIvQixFQUFPNGlCLEdBQUc2ZSxLQUFNcEMsRUFBTTlkLE1BQzFCdmhCLEVBQU80aUIsR0FBRzZlLEtBQU1wQyxFQUFNOWQsTUFBUThkLEdBQ25CQSxFQUFNMzhCLEtBQUtzSSxRQUFnRSxNQUFyRHEwQixFQUFNMzhCLEtBQUtzSSxNQUFPaEwsRUFBT2cwQixTQUFVcUwsRUFBTTlkLFFBQW9CdmhCLEVBQU9xekIsU0FBVWdNLEVBQU05ZCxPQUNySHZoQixFQUFPZ0wsTUFBT3EwQixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLEtBQU04ZCxFQUFNejBCLElBQU15MEIsRUFBTUUsTUFFeERGLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsTUFBUzhkLEVBQU16MEIsT0FTckM4MUIsR0FBTTFiLFVBQVV5RSxVQUFZaVgsR0FBTTFiLFVBQVVxRSxZQUMzQy9ILElBQUssU0FBVStkLEdBQ1RBLEVBQU0zOEIsS0FBS1EsVUFBWW04QixFQUFNMzhCLEtBQUtlLGFBQ3RDNDdCLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsTUFBUzhkLEVBQU16MEIsT0FLcEM1SyxFQUFPbUUsTUFBTyxTQUFVLE9BQVEsUUFBVSxTQUFVVSxFQUFHUyxHQUN0RCxHQUFJbzhCLEdBQVExaEMsRUFBT3NCLEdBQUlnRSxFQUN2QnRGLEdBQU9zQixHQUFJZ0UsR0FBUyxTQUFVcThCLEVBQU9oQixFQUFRdjhCLEdBQzVDLE1BQWdCLE9BQVR1OUIsR0FBa0MsaUJBQVZBLEdBQzlCRCxFQUFNbDlCLE1BQU83QixLQUFNOEIsV0FDbkI5QixLQUFLaS9CLFFBQVNDLEdBQU92OEIsR0FBTSxHQUFRcThCLEVBQU9oQixFQUFRdjhCLE1BSXJEcEUsRUFBT3NCLEdBQUc4RCxRQUNUMDhCLE9BQVEsU0FBVUgsRUFBT0ksRUFBSXBCLEVBQVF2OEIsR0FHcEMsTUFBT3pCLE1BQUsrUCxPQUFRZ2dCLElBQVdFLElBQUssVUFBVyxHQUFJRyxPQUdqRDl0QixNQUFNMjhCLFNBQVV0TyxRQUFTeU8sR0FBTUosRUFBT2hCLEVBQVF2OEIsSUFFakR3OUIsUUFBUyxTQUFVcmdCLEVBQU1vZ0IsRUFBT2hCLEVBQVF2OEIsR0FDdkMsR0FBSW9ULEdBQVF4WCxFQUFPcUgsY0FBZWthLEdBQ2pDeWdCLEVBQVNoaUMsRUFBTzJoQyxNQUFPQSxFQUFPaEIsRUFBUXY4QixHQUN0QzY5QixFQUFjLFdBRWIsR0FBSWxCLEdBQU9sQixHQUFXbDlCLEtBQU0zQyxFQUFPb0YsVUFBWW1jLEdBQVF5Z0IsSUFHbER4cUIsR0FBU21KLEVBQVU5YyxJQUFLbEIsS0FBTSxZQUNsQ28rQixFQUFLdmUsTUFBTSxHQUtkLE9BRkN5ZixHQUFZQyxPQUFTRCxFQUVmenFCLEdBQVN3cUIsRUFBTzlmLFNBQVUsRUFDaEN2ZixLQUFLd0IsS0FBTTg5QixHQUNYdC9CLEtBQUt1ZixNQUFPOGYsRUFBTzlmLE1BQU8rZixJQUU1QnpmLEtBQU0sU0FBVTViLEVBQU1vYyxFQUFZNGQsR0FDakMsR0FBSXVCLEdBQVksU0FBVTlmLEdBQ3pCLEdBQUlHLEdBQU9ILEVBQU1HLFdBQ1ZILEdBQU1HLEtBQ2JBLEVBQU1vZSxHQVlQLE9BVHFCLGdCQUFUaDZCLEtBQ1hnNkIsRUFBVTVkLEVBQ1ZBLEVBQWFwYyxFQUNiQSxFQUFPckgsV0FFSHlqQixHQUFjcGMsS0FBUyxHQUMzQmpFLEtBQUt1ZixNQUFPdGIsR0FBUSxTQUdkakUsS0FBS3dCLEtBQUssV0FDaEIsR0FBSWdlLElBQVUsRUFDYnBGLEVBQWdCLE1BQVJuVyxHQUFnQkEsRUFBTyxhQUMvQnc3QixFQUFTcGlDLEVBQU9vaUMsT0FDaEIzNkIsRUFBT2taLEVBQVU5YyxJQUFLbEIsS0FFdkIsSUFBS29hLEVBQ0N0VixFQUFNc1YsSUFBV3RWLEVBQU1zVixHQUFReUYsTUFDbkMyZixFQUFXMTZCLEVBQU1zVixRQUdsQixLQUFNQSxJQUFTdFYsR0FDVEEsRUFBTXNWLElBQVd0VixFQUFNc1YsR0FBUXlGLE1BQVF5YyxHQUFLNzdCLEtBQU0yWixJQUN0RG9sQixFQUFXMTZCLEVBQU1zVixHQUtwQixLQUFNQSxFQUFRcWxCLEVBQU92L0IsT0FBUWthLEtBQ3ZCcWxCLEVBQVFybEIsR0FBUXJhLE9BQVNDLE1BQWlCLE1BQVJpRSxHQUFnQnc3QixFQUFRcmxCLEdBQVFtRixRQUFVdGIsSUFDaEZ3N0IsRUFBUXJsQixHQUFRZ2tCLEtBQUt2ZSxLQUFNb2UsR0FDM0J6ZSxHQUFVLEVBQ1ZpZ0IsRUFBT2o5QixPQUFRNFgsRUFBTyxLQU9uQm9GLElBQVl5ZSxJQUNoQjVnQyxFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFJekJzN0IsT0FBUSxTQUFVdDdCLEdBSWpCLE1BSEtBLE1BQVMsSUFDYkEsRUFBT0EsR0FBUSxNQUVUakUsS0FBS3dCLEtBQUssV0FDaEIsR0FBSTRZLEdBQ0h0VixFQUFPa1osRUFBVTljLElBQUtsQixNQUN0QnVmLEVBQVF6YSxFQUFNYixFQUFPLFNBQ3JCeWIsRUFBUTVhLEVBQU1iLEVBQU8sY0FDckJ3N0IsRUFBU3BpQyxFQUFPb2lDLE9BQ2hCdi9CLEVBQVNxZixFQUFRQSxFQUFNcmYsT0FBUyxDQWFqQyxLQVZBNEUsRUFBS3k2QixRQUFTLEVBR2RsaUMsRUFBT2tpQixNQUFPdmYsS0FBTWlFLE1BRWZ5YixHQUFTQSxFQUFNRyxNQUNuQkgsRUFBTUcsS0FBSzVlLEtBQU1qQixNQUFNLEdBSWxCb2EsRUFBUXFsQixFQUFPdi9CLE9BQVFrYSxLQUN2QnFsQixFQUFRcmxCLEdBQVFyYSxPQUFTQyxNQUFReS9CLEVBQVFybEIsR0FBUW1GLFFBQVV0YixJQUMvRHc3QixFQUFRcmxCLEdBQVFna0IsS0FBS3ZlLE1BQU0sR0FDM0I0ZixFQUFPajlCLE9BQVE0WCxFQUFPLEdBS3hCLEtBQU1BLEVBQVEsRUFBV2xhLEVBQVJrYSxFQUFnQkEsSUFDM0JtRixFQUFPbkYsSUFBV21GLEVBQU9uRixHQUFRbWxCLFFBQ3JDaGdCLEVBQU9uRixHQUFRbWxCLE9BQU90K0IsS0FBTWpCLFlBS3ZCOEUsR0FBS3k2QixXQU1mLFNBQVNMLElBQU9qN0IsRUFBTXk3QixHQUNyQixHQUFJdlosR0FDSDdYLEdBQVVxeEIsT0FBUTE3QixHQUNsQi9CLEVBQUksQ0FLTCxLQURBdzlCLEVBQWVBLEVBQWMsRUFBSSxFQUN0QixFQUFKeDlCLEVBQVFBLEdBQUssRUFBSXc5QixFQUN2QnZaLEVBQVF1SixHQUFXeHRCLEdBQ25Cb00sRUFBTyxTQUFXNlgsR0FBVTdYLEVBQU8sVUFBWTZYLEdBQVVsaUIsQ0FPMUQsT0FKS3k3QixLQUNKcHhCLEVBQU1xaUIsUUFBVXJpQixFQUFNdVAsTUFBUTVaLEdBR3hCcUssRUFJUmpSLEVBQU9tRSxNQUNObytCLFVBQVdWLEdBQU0sUUFDakJXLFFBQVNYLEdBQU0sUUFDZlksWUFBYVosR0FBTSxVQUNuQmEsUUFBVXBQLFFBQVMsUUFDbkJxUCxTQUFXclAsUUFBUyxRQUNwQnNQLFlBQWN0UCxRQUFTLFdBQ3JCLFNBQVVodUIsRUFBTW9qQixHQUNsQjFvQixFQUFPc0IsR0FBSWdFLEdBQVMsU0FBVXE4QixFQUFPaEIsRUFBUXY4QixHQUM1QyxNQUFPekIsTUFBS2kvQixRQUFTbFosRUFBT2laLEVBQU9oQixFQUFRdjhCLE1BSTdDcEUsRUFBTzJoQyxNQUFRLFNBQVVBLEVBQU9oQixFQUFRci9CLEdBQ3ZDLEdBQUkyZCxHQUFNMGlCLEdBQTBCLGdCQUFWQSxHQUFxQjNoQyxFQUFPb0YsVUFBWXU4QixJQUNqRTNJLFNBQVUxM0IsSUFBT0EsR0FBTXEvQixHQUN0QjNnQyxFQUFPc0QsV0FBWXErQixJQUFXQSxFQUMvQnhCLFNBQVV3QixFQUNWaEIsT0FBUXIvQixHQUFNcS9CLEdBQVVBLElBQVczZ0MsRUFBT3NELFdBQVlxOUIsSUFBWUEsRUF3Qm5FLE9BckJBMWhCLEdBQUlraEIsU0FBV25nQyxFQUFPNGlCLEdBQUdsYyxJQUFNLEVBQTRCLGdCQUFqQnVZLEdBQUlraEIsU0FBd0JsaEIsRUFBSWtoQixTQUN6RWxoQixFQUFJa2hCLFdBQVluZ0MsR0FBTzRpQixHQUFHQyxPQUFTN2lCLEVBQU80aUIsR0FBR0MsT0FBUTVELEVBQUlraEIsVUFBYW5nQyxFQUFPNGlCLEdBQUdDLE9BQU9tRixVQUd0RSxNQUFiL0ksRUFBSWlELE9BQWlCakQsRUFBSWlELFNBQVUsS0FDdkNqRCxFQUFJaUQsTUFBUSxNQUliakQsRUFBSWxVLElBQU1rVSxFQUFJK1osU0FFZC9aLEVBQUkrWixTQUFXLFdBQ1RoNUIsRUFBT3NELFdBQVkyYixFQUFJbFUsTUFDM0JrVSxFQUFJbFUsSUFBSW5ILEtBQU1qQixNQUdWc2MsRUFBSWlELE9BQ1JsaUIsRUFBT21pQixRQUFTeGYsS0FBTXNjLEVBQUlpRCxRQUlyQmpELEdBR1JqZixFQUFPMmdDLFFBQ05rQyxPQUFRLFNBQVVDLEdBQ2pCLE1BQU9BLElBRVJDLE1BQU8sU0FBVUQsR0FDaEIsTUFBTyxHQUFNLzhCLEtBQUtpOUIsSUFBS0YsRUFBRS84QixLQUFLazlCLElBQU8sSUFJdkNqakMsRUFBT29pQyxVQUNQcGlDLEVBQU80aUIsR0FBSzhkLEdBQU1wK0IsVUFBVWYsS0FDNUJ2QixFQUFPNGlCLEdBQUdvZCxLQUFPLFdBQ2hCLEdBQUljLEdBQ0hzQixFQUFTcGlDLEVBQU9vaUMsT0FDaEJ2OUIsRUFBSSxDQUlMLEtBRkFnNkIsR0FBUTcrQixFQUFPNEssTUFFSHczQixFQUFPdi9CLE9BQVhnQyxFQUFtQkEsSUFDMUJpOEIsRUFBUXNCLEVBQVF2OUIsR0FFVmk4QixLQUFXc0IsRUFBUXY5QixLQUFRaThCLEdBQ2hDc0IsRUFBT2o5QixPQUFRTixJQUFLLEVBSWhCdTlCLEdBQU92L0IsUUFDWjdDLEVBQU80aUIsR0FBR0osT0FFWHFjLEdBQVF0L0IsV0FHVFMsRUFBTzRpQixHQUFHa2UsTUFBUSxTQUFVQSxHQUN0QkEsS0FBVzlnQyxFQUFPb2lDLE9BQU8zaEMsS0FBTXFnQyxJQUNuQzlnQyxFQUFPNGlCLEdBQUc5TSxTQUlaOVYsRUFBTzRpQixHQUFHc2dCLFNBQVcsR0FFckJsakMsRUFBTzRpQixHQUFHOU0sTUFBUSxXQUNYZ3BCLEtBQ0xBLEdBQVVxRSxZQUFhbmpDLEVBQU80aUIsR0FBR29kLEtBQU1oZ0MsRUFBTzRpQixHQUFHc2dCLFlBSW5EbGpDLEVBQU80aUIsR0FBR0osS0FBTyxXQUNoQjRnQixjQUFldEUsSUFDZkEsR0FBVSxNQUdYOStCLEVBQU80aUIsR0FBR0MsUUFDVHdnQixLQUFNLElBQ05DLEtBQU0sSUFFTnRiLFNBQVUsS0FJWGhvQixFQUFPNGlCLEdBQUc2ZSxRQUVMemhDLEVBQU84VCxNQUFROVQsRUFBTzhULEtBQUt3RSxVQUMvQnRZLEVBQU84VCxLQUFLd0UsUUFBUWlyQixTQUFXLFNBQVU3Z0MsR0FDeEMsTUFBTzFDLEdBQU9nSyxLQUFLaEssRUFBT29pQyxPQUFRLFNBQVU5Z0MsR0FDM0MsTUFBT29CLEtBQVNwQixFQUFHb0IsT0FDakJHLFNBR0w3QyxFQUFPc0IsR0FBR2tpQyxPQUFTLFNBQVVuK0IsR0FDNUIsR0FBS1osVUFBVTVCLE9BQ2QsTUFBT3dDLEtBQVk5RixVQUNsQm9ELEtBQ0FBLEtBQUt3QixLQUFLLFNBQVVVLEdBQ25CN0UsRUFBT3dqQyxPQUFPQyxVQUFXOWdDLEtBQU0wQyxFQUFTUixJQUkzQyxJQUFJaEYsR0FBUzZqQyxFQUNaaGhDLEVBQU9DLEtBQU0sR0FDYmdoQyxHQUFReHhCLElBQUssRUFBR3l4QixLQUFNLEdBQ3RCN3hCLEVBQU1yUCxHQUFRQSxFQUFLUyxhQUVwQixJQUFNNE8sRUFPTixNQUhBbFMsR0FBVWtTLEVBQUlqUyxnQkFHUkUsRUFBT21NLFNBQVV0TSxFQUFTNkMsVUFNcEJBLEdBQUttaEMsd0JBQTBCbmtDLElBQzFDaWtDLEVBQU1qaEMsRUFBS21oQyx5QkFFWkgsRUFBTUksR0FBVy94QixJQUVoQkksSUFBS3d4QixFQUFJeHhCLElBQU11eEIsRUFBSUssWUFBY2xrQyxFQUFRNnBCLFVBQ3pDa2EsS0FBTUQsRUFBSUMsS0FBT0YsRUFBSU0sWUFBY25rQyxFQUFReXBCLGFBWHBDcWEsR0FlVDNqQyxFQUFPd2pDLFFBRU5DLFVBQVcsU0FBVS9nQyxFQUFNMkMsRUFBU1IsR0FDbkMsR0FBSW8vQixHQUFhQyxFQUFTQyxFQUFXQyxFQUFRQyxFQUFXQyxFQUFZQyxFQUNuRXhTLEVBQVcveEIsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDN0I4aEMsRUFBVXhrQyxFQUFRMEMsR0FDbEJnbUIsSUFHaUIsWUFBYnFKLElBQ0pydkIsRUFBS3NJLE1BQU0rbUIsU0FBVyxZQUd2QnNTLEVBQVlHLEVBQVFoQixTQUNwQlcsRUFBWW5rQyxFQUFPNHlCLElBQUtsd0IsRUFBTSxPQUM5QjRoQyxFQUFhdGtDLEVBQU80eUIsSUFBS2x3QixFQUFNLFFBQy9CNmhDLEdBQW1DLGFBQWJ4UyxHQUF3QyxVQUFiQSxLQUE0Qm9TLEVBQVlHLEdBQWF6akMsUUFBUSxRQUFVLEdBR25IMGpDLEdBQ0pOLEVBQWNPLEVBQVF6UyxXQUN0QnFTLEVBQVNILEVBQVk5eEIsSUFDckIreEIsRUFBVUQsRUFBWUwsT0FHdEJRLEVBQVNuOUIsV0FBWWs5QixJQUFlLEVBQ3BDRCxFQUFVajlCLFdBQVlxOUIsSUFBZ0IsR0FHbEN0a0MsRUFBT3NELFdBQVkrQixLQUN2QkEsRUFBVUEsRUFBUXpCLEtBQU1sQixFQUFNbUMsRUFBR3cvQixJQUdkLE1BQWZoL0IsRUFBUThNLE1BQ1p1VyxFQUFNdlcsSUFBUTlNLEVBQVE4TSxJQUFNa3lCLEVBQVVseUIsSUFBUWl5QixHQUUxQixNQUFoQi8rQixFQUFRdStCLE9BQ1psYixFQUFNa2IsS0FBU3YrQixFQUFRdStCLEtBQU9TLEVBQVVULEtBQVNNLEdBRzdDLFNBQVc3K0IsR0FDZkEsRUFBUW8vQixNQUFNN2dDLEtBQU1sQixFQUFNZ21CLEdBRzFCOGIsRUFBUTVSLElBQUtsSyxLQU1oQjFvQixFQUFPc0IsR0FBRzhELFFBRVQyc0IsU0FBVSxXQUNULEdBQU1wdkIsS0FBTSxHQUFaLENBSUEsR0FBSStoQyxHQUFjbEIsRUFDakI5Z0MsRUFBT0MsS0FBTSxHQUNiZ2lDLEdBQWlCeHlCLElBQUssRUFBR3l4QixLQUFNLEVBdUJoQyxPQXBCd0MsVUFBbkM1akMsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFFdEI4Z0MsRUFBUzlnQyxFQUFLbWhDLHlCQUlkYSxFQUFlL2hDLEtBQUsraEMsZUFHcEJsQixFQUFTN2dDLEtBQUs2Z0MsU0FDUnhqQyxFQUFPc0osU0FBVW83QixFQUFjLEdBQUssVUFDekNDLEVBQWVELEVBQWFsQixVQUk3Qm1CLEVBQWF4eUIsS0FBT25TLEVBQU80eUIsSUFBSzhSLEVBQWMsR0FBSyxrQkFBa0IsR0FDckVDLEVBQWFmLE1BQVE1akMsRUFBTzR5QixJQUFLOFIsRUFBYyxHQUFLLG1CQUFtQixLQUt2RXZ5QixJQUFLcXhCLEVBQU9yeEIsSUFBTXd5QixFQUFheHlCLElBQU1uUyxFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUFhLEdBQ3BFa2hDLEtBQU1KLEVBQU9JLEtBQU9lLEVBQWFmLEtBQU81akMsRUFBTzR5QixJQUFLbHdCLEVBQU0sY0FBYyxNQUkxRWdpQyxhQUFjLFdBQ2IsTUFBTy9oQyxNQUFLcUMsSUFBSSxXQUNmLEdBQUkwL0IsR0FBZS9oQyxLQUFLK2hDLGNBQWdCN2tDLENBRXhDLE9BQVE2a0MsSUFBbUIxa0MsRUFBT3NKLFNBQVVvN0IsRUFBYyxTQUFzRCxXQUExQzFrQyxFQUFPNHlCLElBQUs4UixFQUFjLFlBQy9GQSxFQUFlQSxFQUFhQSxZQUc3QixPQUFPQSxJQUFnQjdrQyxPQU8xQkcsRUFBT21FLE1BQU9rbEIsV0FBWSxjQUFlSSxVQUFXLGVBQWdCLFNBQVVrUyxFQUFRcGEsR0FDckYsR0FBSXBQLEdBQU0sZ0JBQWtCb1AsQ0FFNUJ2aEIsR0FBT3NCLEdBQUlxNkIsR0FBVyxTQUFVM25CLEdBQy9CLE1BQU9oVSxHQUFPc0ssT0FBUTNILEtBQU0sU0FBVUQsRUFBTWk1QixFQUFRM25CLEdBQ25ELEdBQUkwdkIsR0FBTUksR0FBV3BoQyxFQUVyQixPQUFLc1IsS0FBUXpVLFVBQ0xta0MsRUFBTUEsRUFBS25pQixHQUFTN2UsRUFBTWk1QixJQUc3QitILEVBQ0pBLEVBQUlrQixTQUNGenlCLEVBQVk3UyxFQUFPMGtDLFlBQWJod0IsRUFDUDdCLEVBQU02QixFQUFNMVUsRUFBT3lrQyxhQUlwQnJoQyxFQUFNaTVCLEdBQVczbkIsRUFQbEIsWUFTRTJuQixFQUFRM25CLEVBQUt2UCxVQUFVNUIsT0FBUSxRQUlwQyxTQUFTaWhDLElBQVdwaEMsR0FDbkIsTUFBTzFDLEdBQU84RyxTQUFVcEUsR0FBU0EsRUFBeUIsSUFBbEJBLEVBQUtRLFVBQWtCUixFQUFLdVAsWUFHckVqUyxFQUFPbUUsTUFBUTBnQyxPQUFRLFNBQVVDLE1BQU8sU0FBVyxTQUFVeC9CLEVBQU1zQixHQUNsRTVHLEVBQU9tRSxNQUFRaXhCLFFBQVMsUUFBVTl2QixFQUFNb3JCLFFBQVM5cEIsRUFBTSxHQUFJLFFBQVV0QixHQUFRLFNBQVV5L0IsRUFBY0MsR0FFcEdobEMsRUFBT3NCLEdBQUkwakMsR0FBYSxTQUFVN1AsRUFBUTNyQixHQUN6QyxHQUFJZ0IsR0FBWS9GLFVBQVU1QixTQUFZa2lDLEdBQWtDLGlCQUFYNVAsSUFDNURqQixFQUFRNlEsSUFBa0I1UCxLQUFXLEdBQVEzckIsS0FBVSxFQUFPLFNBQVcsU0FFMUUsT0FBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTSxTQUFVRCxFQUFNa0UsRUFBTTRDLEdBQ2pELEdBQUl1SSxFQUVKLE9BQUsvUixHQUFPOEcsU0FBVXBFLEdBSWRBLEVBQUs5QyxTQUFTRSxnQkFBaUIsU0FBV3dGLEdBSTNCLElBQWxCNUMsRUFBS1EsVUFDVDZPLEVBQU1yUCxFQUFLNUMsZ0JBSUppRyxLQUFLd2UsSUFDWDdoQixFQUFLd2QsS0FBTSxTQUFXNWEsR0FBUXlNLEVBQUssU0FBV3pNLEdBQzlDNUMsRUFBS3dkLEtBQU0sU0FBVzVhLEdBQVF5TSxFQUFLLFNBQVd6TSxHQUM5Q3lNLEVBQUssU0FBV3pNLEtBSVhrRSxJQUFVakssVUFFaEJTLEVBQU80eUIsSUFBS2x3QixFQUFNa0UsRUFBTXN0QixHQUd4QmwwQixFQUFPZ0wsTUFBT3RJLEVBQU1rRSxFQUFNNEMsRUFBTzBxQixJQUNoQ3R0QixFQUFNNEQsRUFBWTJxQixFQUFTNTFCLFVBQVdpTCxFQUFXLFdBUXZEeEssRUFBT3NCLEdBQUcyakMsS0FBTyxXQUNoQixNQUFPdGlDLE1BQUtFLFFBR2I3QyxFQUFPc0IsR0FBRzRqQyxRQUFVbGxDLEVBQU9zQixHQUFHeXFCLFFBR1AsZ0JBQVhvWixTQUF1QkEsUUFBb0MsZ0JBQW5CQSxRQUFPQyxRQUsxREQsT0FBT0MsUUFBVXBsQyxFQVNNLGtCQUFYcWxDLFNBQXlCQSxPQUFPQyxLQUMzQ0QsT0FBUSxZQUFjLFdBQWMsTUFBT3JsQyxLQU10QixnQkFBWFYsSUFBa0QsZ0JBQXBCQSxHQUFPTSxXQUNoRE4sRUFBT1UsT0FBU1YsRUFBT1ksRUFBSUYsS0FHeEJWIn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS11aS5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGU2Mzk2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzCkBAIC0wLDAgKzEsNyBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE1CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogSW5jbHVkZXM6IGNvcmUuanMsIGRhdGVwaWNrZXIuanMKKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKyhmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSJdLGUpOmUoalF1ZXJ5KX0pKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxzKXt2YXIgYSxuLHIsbz10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImFyZWEiPT09bz8oYT10LnBhcmVudE5vZGUsbj1hLm5hbWUsdC5ocmVmJiZuJiYibWFwIj09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8ocj1lKCJpbWdbdXNlbWFwPScjIituKyInXSIpWzBdLCEhciYmaShyKSk6ITEpOigvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KG8pPyF0LmRpc2FibGVkOiJhIj09PW8/dC5ocmVmfHxzOnMpJiZpKHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuZXhwci5maWx0ZXJzLnZpc2libGUodCkmJiFlKHQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImhpZGRlbiI9PT1lLmNzcyh0aGlzLCJ2aXNpYmlsaXR5Iil9KS5sZW5ndGh9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsaTtlLmxlbmd0aCYmZVswXSE9PWRvY3VtZW50Oyl7aWYodD1lLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PXR8fCJyZWxhdGl2ZSI9PT10fHwiZml4ZWQiPT09dCkmJihpPXBhcnNlSW50KGUuY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKGkpJiYwIT09aSkpcmV0dXJuIGk7ZT1lLnBhcmVudCgpfXJldHVybiAwfWZ1bmN0aW9uIGEoKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sZS5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWwuZW49ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWxbImVuLVVTIl09ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1uKGUoIjxkaXYgaWQ9JyIrdGhpcy5fbWFpbkRpdklkKyInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpfWZ1bmN0aW9uIG4odCl7dmFyIGk9ImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7cmV0dXJuIHQuZGVsZWdhdGUoaSwibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmRlbGVnYXRlKGksIm1vdXNlb3ZlciIscil9ZnVuY3Rpb24gcigpe2UuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoaC5pbmxpbmU/aC5kcERpdi5wYXJlbnQoKVswXTpoLmlucHV0WzBdKXx8KGUodGhpcykucGFyZW50cygiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKS5maW5kKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKSl9ZnVuY3Rpb24gbyh0LGkpe2UuZXh0ZW5kKHQsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKHRbc109aVtzXSk7cmV0dXJuIHR9ZS51aT1lLnVpfHx7fSxlLmV4dGVuZChlLnVpLHt2ZXJzaW9uOiIxLjExLjQiLGtleUNvZGU6e0JBQ0tTUEFDRTo4LENPTU1BOjE4OCxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsTEVGVDozNyxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtzY3JvbGxQYXJlbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5jc3MoInBvc2l0aW9uIikscz0iYWJzb2x1dGUiPT09aSxhPXQ/LyhhdXRvfHNjcm9sbHxoaWRkZW4pLzovKGF1dG98c2Nyb2xsKS8sbj10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3JldHVybiBzJiYic3RhdGljIj09PXQuY3NzKCJwb3NpdGlvbiIpPyExOmEudGVzdCh0LmNzcygib3ZlcmZsb3ciKSt0LmNzcygib3ZlcmZsb3cteSIpK3QuY3NzKCJvdmVyZmxvdy14IikpfSkuZXEoMCk7cmV0dXJuImZpeGVkIiE9PWkmJm4ubGVuZ3RoP246ZSh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KX0sdW5pcXVlSWQ6ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlkfHwodGhpcy5pZD0idWktaWQtIisgKytlKX0pfX0oKSxyZW1vdmVVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsvXnVpLWlkLVxkKyQvLnRlc3QodGhpcy5pZCkmJmUodGhpcykucmVtb3ZlQXR0cigiaWQiKX0pfX0pLGUuZXh0ZW5kKGUuZXhwclsiOiJdLHtkYXRhOmUuZXhwci5jcmVhdGVQc2V1ZG8/ZS5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuISFlLmRhdGEoaSx0KX19KTpmdW5jdGlvbih0LGkscyl7cmV0dXJuISFlLmRhdGEodCxzWzNdKX0sZm9jdXNhYmxlOmZ1bmN0aW9uKGkpe3JldHVybiB0KGksIWlzTmFOKGUuYXR0cihpLCJ0YWJpbmRleCIpKSl9LHRhYmJhYmxlOmZ1bmN0aW9uKGkpe3ZhciBzPWUuYXR0cihpLCJ0YWJpbmRleCIpLGE9aXNOYU4ocyk7cmV0dXJuKGF8fHM+PTApJiZ0KGksIWEpfX0pLGUoIjxhPiIpLm91dGVyV2lkdGgoMSkuanF1ZXJ5fHxlLmVhY2goWyJXaWR0aCIsIkhlaWdodCJdLGZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gcyh0LGkscyxuKXtyZXR1cm4gZS5lYWNoKGEsZnVuY3Rpb24oKXtpLT1wYXJzZUZsb2F0KGUuY3NzKHQsInBhZGRpbmciK3RoaXMpKXx8MCxzJiYoaS09cGFyc2VGbG9hdChlLmNzcyh0LCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwKSxuJiYoaS09cGFyc2VGbG9hdChlLmNzcyh0LCJtYXJnaW4iK3RoaXMpKXx8MCl9KSxpfXZhciBhPSJXaWR0aCI9PT1pP1siTGVmdCIsIlJpZ2h0Il06WyJUb3AiLCJCb3R0b20iXSxuPWkudG9Mb3dlckNhc2UoKSxyPXtpbm5lcldpZHRoOmUuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDplLmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6ZS5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OmUuZm4ub3V0ZXJIZWlnaHR9O2UuZm5bImlubmVyIitpXT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9yWyJpbm5lciIraV0uY2FsbCh0aGlzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhuLHModGhpcyx0KSsicHgiKX0pfSxlLmZuWyJvdXRlciIraV09ZnVuY3Rpb24odCxhKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQ/clsib3V0ZXIiK2ldLmNhbGwodGhpcyx0KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhuLHModGhpcyx0LCEwLGEpKyJweCIpfSl9fSksZS5mbi5hZGRCYWNrfHwoZS5mbi5hZGRCYWNrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX0pLGUoIjxhPiIpLmRhdGEoImEtYiIsImEiKS5yZW1vdmVEYXRhKCJhLWIiKS5kYXRhKCJhLWIiKSYmKGUuZm4ucmVtb3ZlRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jYWxsKHRoaXMsZS5jYW1lbENhc2UoaSkpOnQuY2FsbCh0aGlzKX19KGUuZm4ucmVtb3ZlRGF0YSkpLGUudWkuaWU9ISEvbXNpZSBbXHcuXSsvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSxlLmZuLmV4dGVuZCh7Zm9jdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2UodCkuZm9jdXMoKSxzJiZzLmNhbGwodCl9LGkpfSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fShlLmZuLmZvY3VzKSxkaXNhYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9Im9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik/InNlbGVjdHN0YXJ0IjoibW91c2Vkb3duIjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaW5kKGUrIi51aS1kaXNhYmxlU2VsZWN0aW9uIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KX19KCksZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCIudWktZGlzYWJsZVNlbGVjdGlvbiIpfSx6SW5kZXg6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dClyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsdCk7aWYodGhpcy5sZW5ndGgpZm9yKHZhciBpLHMsYT1lKHRoaXNbMF0pO2EubGVuZ3RoJiZhWzBdIT09ZG9jdW1lbnQ7KXtpZihpPWEuY3NzKCJwb3NpdGlvbiIpLCgiYWJzb2x1dGUiPT09aXx8InJlbGF0aXZlIj09PWl8fCJmaXhlZCI9PT1pKSYmKHM9cGFyc2VJbnQoYS5jc3MoInpJbmRleCIpLDEwKSwhaXNOYU4ocykmJjAhPT1zKSlyZXR1cm4gczthPWEucGFyZW50KCl9cmV0dXJuIDB9fSksZS51aS5wbHVnaW49e2FkZDpmdW5jdGlvbih0LGkscyl7dmFyIGEsbj1lLnVpW3RdLnByb3RvdHlwZTtmb3IoYSBpbiBzKW4ucGx1Z2luc1thXT1uLnBsdWdpbnNbYV18fFtdLG4ucGx1Z2luc1thXS5wdXNoKFtpLHNbYV1dKX0sY2FsbDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYSxuPWUucGx1Z2luc1t0XTtpZihuJiYoc3x8ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUmJjExIT09ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUubm9kZVR5cGUpKWZvcihhPTA7bi5sZW5ndGg+YTthKyspZS5vcHRpb25zW25bYV1bMF1dJiZuW2FdWzFdLmFwcGx5KGUuZWxlbWVudCxpKX19LGUuZXh0ZW5kKGUudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246IjEuMTEuNCJ9fSk7dmFyIGg7ZS5leHRlbmQoYS5wcm90b3R5cGUse21hcmtlckNsYXNzTmFtZToiaGFzRGF0ZXBpY2tlciIsbWF4Um93czo0LF93aWRnZXREYXRlcGlja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHBEaXZ9LHNldERlZmF1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMuX2RlZmF1bHRzLGV8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkpe3ZhciBzLGEsbjtzPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJkaXYiPT09c3x8InNwYW4iPT09cyx0LmlkfHwodGhpcy51dWlkKz0xLHQuaWQ9ImRwIit0aGlzLnV1aWQpLG49dGhpcy5fbmV3SW5zdChlKHQpLGEpLG4uc2V0dGluZ3M9ZS5leHRlbmQoe30saXx8e30pLCJpbnB1dCI9PT1zP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHQsbik6YSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0LG4pfSxfbmV3SW5zdDpmdW5jdGlvbih0LGkpe3ZhciBzPXRbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05X1wtXSkvZywiXFxcXCQxIik7cmV0dXJue2lkOnMsaW5wdXQ6dCxzZWxlY3RlZERheTowLHNlbGVjdGVkTW9udGg6MCxzZWxlY3RlZFllYXI6MCxkcmF3TW9udGg6MCxkcmF3WWVhcjowLGlubGluZTppLGRwRGl2Omk/bihlKCI8ZGl2IGNsYXNzPSciK3RoaXMuX2lubGluZUNsYXNzKyIgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0KTtpLmFwcGVuZD1lKFtdKSxpLnRyaWdnZXI9ZShbXSkscy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fCh0aGlzLl9hdHRhY2htZW50cyhzLGkpLHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmtleWRvd24odGhpcy5fZG9LZXlEb3duKS5rZXlwcmVzcyh0aGlzLl9kb0tleVByZXNzKS5rZXl1cCh0aGlzLl9kb0tleVVwKSx0aGlzLl9hdXRvU2l6ZShpKSxlLmRhdGEodCwiZGF0ZXBpY2tlciIsaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCkpfSxfYXR0YWNobWVudHM6ZnVuY3Rpb24odCxpKXt2YXIgcyxhLG4scj10aGlzLl9nZXQoaSwiYXBwZW5kVGV4dCIpLG89dGhpcy5fZ2V0KGksImlzUlRMIik7aS5hcHBlbmQmJmkuYXBwZW5kLnJlbW92ZSgpLHImJihpLmFwcGVuZD1lKCI8c3BhbiBjbGFzcz0nIit0aGlzLl9hcHBlbmRDbGFzcysiJz4iK3IrIjwvc3Bhbj4iKSx0W28/ImJlZm9yZSI6ImFmdGVyIl0oaS5hcHBlbmQpKSx0LnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxpLnRyaWdnZXImJmkudHJpZ2dlci5yZW1vdmUoKSxzPXRoaXMuX2dldChpLCJzaG93T24iKSwoImZvY3VzIj09PXN8fCJib3RoIj09PXMpJiZ0LmZvY3VzKHRoaXMuX3Nob3dEYXRlcGlja2VyKSwoImJ1dHRvbiI9PT1zfHwiYm90aCI9PT1zKSYmKGE9dGhpcy5fZ2V0KGksImJ1dHRvblRleHQiKSxuPXRoaXMuX2dldChpLCJidXR0b25JbWFnZSIpLGkudHJpZ2dlcj1lKHRoaXMuX2dldChpLCJidXR0b25JbWFnZU9ubHkiKT9lKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpuLGFsdDphLHRpdGxlOmF9KTplKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKG4/ZSgiPGltZy8+IikuYXR0cih7c3JjOm4sYWx0OmEsdGl0bGU6YX0pOmEpKSx0W28/ImJlZm9yZSI6ImFmdGVyIl0oaS50cmlnZ2VyKSxpLnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT10WzBdP2UuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTplLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXRbMF0/KGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxlLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pKTplLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pLCExfSkpfSxfYXV0b1NpemU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fZ2V0KGUsImF1dG9TaXplIikmJiFlLmlubGluZSl7dmFyIHQsaSxzLGEsbj1uZXcgRGF0ZSgyMDA5LDExLDIwKSxyPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iik7ci5tYXRjaCgvW0RNXS8pJiYodD1mdW5jdGlvbihlKXtmb3IoaT0wLHM9MCxhPTA7ZS5sZW5ndGg+YTthKyspZVthXS5sZW5ndGg+aSYmKGk9ZVthXS5sZW5ndGgscz1hKTtyZXR1cm4gc30sbi5zZXRNb250aCh0KHRoaXMuX2dldChlLHIubWF0Y2goL01NLyk/Im1vbnRoTmFtZXMiOiJtb250aE5hbWVzU2hvcnQiKSkpLG4uc2V0RGF0ZSh0KHRoaXMuX2dldChlLHIubWF0Y2goL0RELyk/ImRheU5hbWVzIjoiZGF5TmFtZXNTaG9ydCIpKSsyMC1uLmdldERheSgpKSksZS5pbnB1dC5hdHRyKCJzaXplIix0aGlzLl9mb3JtYXREYXRlKGUsbikubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0KTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSxlLmRhdGEodCwiZGF0ZXBpY2tlciIsaSksdGhpcy5fc2V0RGF0ZShpLHRoaXMuX2dldERlZmF1bHREYXRlKGkpLCEwKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KSxpLmRwRGl2LmNzcygiZGlzcGxheSIsImJsb2NrIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkscyxhLG4pe3ZhciByLGgsbCx1LGQsYz10aGlzLl9kaWFsb2dJbnN0O3JldHVybiBjfHwodGhpcy51dWlkKz0xLHI9ImRwIit0aGlzLnV1aWQsdGhpcy5fZGlhbG9nSW5wdXQ9ZSgiPGlucHV0IHR5cGU9J3RleHQnIGlkPSciK3IrIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+IiksdGhpcy5fZGlhbG9nSW5wdXQua2V5ZG93bih0aGlzLl9kb0tleURvd24pLGUoImJvZHkiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpLGM9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxvZ0lucHV0LCExKSxjLnNldHRpbmdzPXt9LGUuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwiZGF0ZXBpY2tlciIsYykpLG8oYy5zZXR0aW5ncyxhfHx7fSksaT1pJiZpLmNvbnN0cnVjdG9yPT09RGF0ZT90aGlzLl9mb3JtYXREYXRlKGMsaSk6aSx0aGlzLl9kaWFsb2dJbnB1dC52YWwoaSksdGhpcy5fcG9zPW4/bi5sZW5ndGg/bjpbbi5wYWdlWCxuLnBhZ2VZXTpudWxsLHRoaXMuX3Bvc3x8KGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsZD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCx0aGlzLl9wb3M9W2gvMi0xMDArdSxsLzItMTUwK2RdKSx0aGlzLl9kaWFsb2dJbnB1dC5jc3MoImxlZnQiLHRoaXMuX3Bvc1swXSsyMCsicHgiKS5jc3MoInRvcCIsdGhpcy5fcG9zWzFdKyJweCIpLGMuc2V0dGluZ3Mub25TZWxlY3Q9cyx0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksZS5ibG9ja1VJJiZlLmJsb2NrVUkodGhpcy5kcERpdiksZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLCJkYXRlcGlja2VyIixjKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscz1lKHQpLGE9ZS5kYXRhKHQsImRhdGVwaWNrZXIiKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGUucmVtb3ZlRGF0YSh0LCJkYXRlcGlja2VyIiksImlucHV0Ij09PWk/KGEuYXBwZW5kLnJlbW92ZSgpLGEudHJpZ2dlci5yZW1vdmUoKSxzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlcikudW5iaW5kKCJrZXlkb3duIix0aGlzLl9kb0tleURvd24pLnVuYmluZCgia2V5cHJlc3MiLHRoaXMuX2RvS2V5UHJlc3MpLnVuYmluZCgia2V5dXAiLHRoaXMuX2RvS2V5VXApKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmcy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuZW1wdHkoKSxoPT09YSYmKGg9bnVsbCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzLGE9ZSh0KSxuPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7YS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwiaW5wdXQiPT09aT8odC5kaXNhYmxlZD0hMSxuLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIxLjAiLGN1cnNvcjoiIn0pKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmKHM9YS5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxzLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCExKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9ZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P251bGw6ZX0pKX0sX2Rpc2FibGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHMsYT1lKHQpLG49ZS5kYXRhKHQsImRhdGVwaWNrZXIiKTthLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCJpbnB1dCI9PT1pPyh0LmRpc2FibGVkPSEwLG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6IjAuNSIsY3Vyc29yOiJkZWZhdWx0In0pKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmKHM9YS5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxzLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCEwKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9ZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P251bGw6ZX0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09dCl9LF9pc0Rpc2FibGVkRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMTtmb3IodmFyIHQ9MDt0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg+dDt0KyspaWYodGhpcy5fZGlzYWJsZWRJbnB1dHNbdF09PT1lKXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGUuZGF0YSh0LCJkYXRlcGlja2VyIil9Y2F0Y2goaSl7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBhLG4scixoLGw9dGhpcy5fZ2V0SW5zdCh0KTtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgaT8iZGVmYXVsdHMiPT09aT9lLmV4dGVuZCh7fSxlLmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpsPyJhbGwiPT09aT9lLmV4dGVuZCh7fSxsLnNldHRpbmdzKTp0aGlzLl9nZXQobCxpKTpudWxsOihhPWl8fHt9LCJzdHJpbmciPT10eXBlb2YgaSYmKGE9e30sYVtpXT1zKSxsJiYodGhpcy5fY3VySW5zdD09PWwmJnRoaXMuX2hpZGVEYXRlcGlja2VyKCksbj10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcih0LCEwKSxyPXRoaXMuX2dldE1pbk1heERhdGUobCwibWluIiksaD10aGlzLl9nZXRNaW5NYXhEYXRlKGwsIm1heCIpLG8obC5zZXR0aW5ncyxhKSxudWxsIT09ciYmdm9pZCAwIT09YS5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1hLm1pbkRhdGUmJihsLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLHIpKSxudWxsIT09aCYmdm9pZCAwIT09YS5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1hLm1heERhdGUmJihsLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLGgpKSwiZGlzYWJsZWQiaW4gYSYmKGEuZGlzYWJsZWQ/dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCk6dGhpcy5fZW5hYmxlRGF0ZXBpY2tlcih0KSksdGhpcy5fYXR0YWNobWVudHMoZSh0KSxsKSx0aGlzLl9hdXRvU2l6ZShsKSx0aGlzLl9zZXREYXRlKGwsbiksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGwpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobCkpLHZvaWQgMCl9LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKGUsdCxpKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldEluc3QoZSk7dCYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtpJiYodGhpcy5fc2V0RGF0ZShpLHQpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtyZXR1cm4gaSYmIWkuaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksdCksaT90aGlzLl9nZXREYXRlKGkpOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24odCl7dmFyIGkscyxhLG49ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQudGFyZ2V0KSxyPSEwLG89bi5kcERpdi5pcygiLnVpLWRhdGVwaWNrZXItcnRsIik7aWYobi5fa2V5RXZlbnQ9ITAsZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDk6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLHI9ITE7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gYT1lKCJ0ZC4iK2UuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzKyI6bm90KC4iK2UuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzKyIpIixuLmRwRGl2KSxhWzBdJiZlLmRhdGVwaWNrZXIuX3NlbGVjdERheSh0LnRhcmdldCxuLnNlbGVjdGVkTW9udGgsbi5zZWxlY3RlZFllYXIsYVswXSksaT1lLmRhdGVwaWNrZXIuX2dldChuLCJvblNlbGVjdCIpLGk/KHM9ZS5kYXRlcGlja2VyLl9mb3JtYXREYXRlKG4pLGkuYXBwbHkobi5pbnB1dD9uLmlucHV0WzBdOm51bGwsW3Msbl0pKTplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksITE7Y2FzZSAyNzplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzplLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8rZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcEJpZ01vbnRocyIpOitlLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHQudGFyZ2V0KSxyPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkodC50YXJnZXQpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsbz8xOi0xLCJEIikscj10LmN0cmxLZXl8fHQubWV0YUtleSx0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LC03LCJEIikscj10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztjYXNlIDM5Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCxvPy0xOjEsIkQiKSxyPXQuY3RybEtleXx8dC5tZXRhS2V5LHQub3JpZ2luYWxFdmVudC5hbHRLZXkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBCaWdNb250aHMiKTorZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsNywiRCIpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDpyPSExfWVsc2UgMzY9PT10LmtleUNvZGUmJnQuY3RybEtleT9lLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOnI9ITE7ciYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24odCl7dmFyIGkscyxhPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7cmV0dXJuIGUuZGF0ZXBpY2tlci5fZ2V0KGEsImNvbnN0cmFpbklucHV0Iik/KGk9ZS5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKGUuZGF0ZXBpY2tlci5fZ2V0KGEsImRhdGVGb3JtYXQiKSkscz1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PXQuY2hhckNvZGU/dC5rZXlDb2RlOnQuY2hhckNvZGUpLHQuY3RybEtleXx8dC5tZXRhS2V5fHwiICI+c3x8IWl8fGkuaW5kZXhPZihzKT4tMSk6dm9pZCAwfSxfZG9LZXlVcDpmdW5jdGlvbih0KXt2YXIgaSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7aWYocy5pbnB1dC52YWwoKSE9PXMubGFzdFZhbCl0cnl7aT1lLmRhdGVwaWNrZXIucGFyc2VEYXRlKGUuZGF0ZXBpY2tlci5fZ2V0KHMsImRhdGVGb3JtYXQiKSxzLmlucHV0P3MuaW5wdXQudmFsKCk6bnVsbCxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhzKSksaSYmKGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocykpfWNhdGNoKGEpe31yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKHQ9dC50YXJnZXR8fHQsImlucHV0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHQ9ZSgiaW5wdXQiLHQucGFyZW50Tm9kZSlbMF0pLCFlLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKHQpJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXQpe3ZhciBpLGEsbixyLGgsbCx1O2k9ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQpLGUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09aSYmKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxpJiZlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLGE9ZS5kYXRlcGlja2VyLl9nZXQoaSwiYmVmb3JlU2hvdyIpLG49YT9hLmFwcGx5KHQsW3QsaV0pOnt9LG4hPT0hMSYmKG8oaS5zZXR0aW5ncyxuKSxpLmxhc3RWYWw9bnVsbCxlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD10LGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChpKSxlLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYodC52YWx1ZT0iIiksZS5kYXRlcGlja2VyLl9wb3N8fChlLmRhdGVwaWNrZXIuX3Bvcz1lLmRhdGVwaWNrZXIuX2ZpbmRQb3ModCksZS5kYXRlcGlja2VyLl9wb3NbMV0rPXQub2Zmc2V0SGVpZ2h0KSxyPSExLGUodCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gcnw9ImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpLCFyfSksaD17bGVmdDplLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6ZS5kYXRlcGlja2VyLl9wb3NbMV19LGUuZGF0ZXBpY2tlci5fcG9zPW51bGwsaS5kcERpdi5lbXB0eSgpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLGg9ZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLGgsciksaS5kcERpdi5jc3Moe3Bvc2l0aW9uOmUuZGF0ZXBpY2tlci5faW5EaWFsb2cmJmUuYmxvY2tVST8ic3RhdGljIjpyPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OmgubGVmdCsicHgiLHRvcDpoLnRvcCsicHgifSksaS5pbmxpbmV8fChsPWUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dBbmltIiksdT1lLmRhdGVwaWNrZXIuX2dldChpLCJkdXJhdGlvbiIpLGkuZHBEaXYuY3NzKCJ6LWluZGV4IixzKGUodCkpKzEpLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsZS5lZmZlY3RzJiZlLmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLGUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dPcHRpb25zIiksdSk6aS5kcERpdltsfHwic2hvdyJdKGw/dTpudWxsKSxlLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoaSkmJmkuaW5wdXQuZm9jdXMoKSxlLmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dGhpcy5tYXhSb3dzPTQsaD10LHQuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKHQpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyh0KTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLGE9c1sxXSxuPTE3LG89dC5kcERpdi5maW5kKCIuIit0aGlzLl9kYXlPdmVyQ2xhc3MrIiBhIik7by5sZW5ndGg+MCYmci5hcHBseShvLmdldCgwKSksdC5kcERpdi5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTQiKS53aWR0aCgiIiksYT4xJiZ0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIrYSkuY3NzKCJ3aWR0aCIsbiphKyJlbSIpLHQuZHBEaXZbKDEhPT1zWzBdfHwxIT09c1sxXT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSx0LmRwRGl2Wyh0aGlzLl9nZXQodCwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksdD09PWUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KHQpJiZ0LmlucHV0LmZvY3VzKCksdC55ZWFyc2h0bWwmJihpPXQueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09dC55ZWFyc2h0bWwmJnQueWVhcnNodG1sJiZ0LmRwRGl2LmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLXllYXI6Zmlyc3QiKS5yZXBsYWNlV2l0aCh0LnllYXJzaHRtbCksaT10LnllYXJzaHRtbD1udWxsfSwwKSl9LF9zaG91bGRGb2N1c0lucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmlucHV0JiZlLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhZS5pbnB1dC5pcygiOmRpc2FibGVkIikmJiFlLmlucHV0LmlzKCI6Zm9jdXMiKX0sX2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgYT10LmRwRGl2Lm91dGVyV2lkdGgoKSxuPXQuZHBEaXYub3V0ZXJIZWlnaHQoKSxyPXQuaW5wdXQ/dC5pbnB1dC5vdXRlcldpZHRoKCk6MCxvPXQuaW5wdXQ/dC5pbnB1dC5vdXRlckhlaWdodCgpOjAsaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgrKHM/MDplKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCsocz8wOmUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTtyZXR1cm4gaS5sZWZ0LT10aGlzLl9nZXQodCwiaXNSVEwiKT9hLXI6MCxpLmxlZnQtPXMmJmkubGVmdD09PXQuaW5wdXQub2Zmc2V0KCkubGVmdD9lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk6MCxpLnRvcC09cyYmaS50b3A9PT10LmlucHV0Lm9mZnNldCgpLnRvcCtvP2UoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOjAsaS5sZWZ0LT1NYXRoLm1pbihpLmxlZnQsaS5sZWZ0K2E+aCYmaD5hP01hdGguYWJzKGkubGVmdCthLWgpOjApLGkudG9wLT1NYXRoLm1pbihpLnRvcCxpLnRvcCtuPmwmJmw+bj9NYXRoLmFicyhuK28pOjApLGl9LF9maW5kUG9zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxzPXRoaXMuX2dldEluc3QodCksYT10aGlzLl9nZXQocywiaXNSVEwiKTt0JiYoImhpZGRlbiI9PT10LnR5cGV8fDEhPT10Lm5vZGVUeXBlfHxlLmV4cHIuZmlsdGVycy5oaWRkZW4odCkpOyl0PXRbYT8icHJldmlvdXNTaWJsaW5nIjoibmV4dFNpYmxpbmciXTtyZXR1cm4gaT1lKHQpLm9mZnNldCgpLFtpLmxlZnQsaS50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxhLG4scj10aGlzLl9jdXJJbnN0OyFyfHx0JiZyIT09ZS5kYXRhKHQsImRhdGVwaWNrZXIiKXx8dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcmJihpPXRoaXMuX2dldChyLCJzaG93QW5pbSIpLHM9dGhpcy5fZ2V0KHIsImR1cmF0aW9uIiksYT1mdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhyKX0sZS5lZmZlY3RzJiYoZS5lZmZlY3RzLmVmZmVjdFtpXXx8ZS5lZmZlY3RzW2ldKT9yLmRwRGl2LmhpZGUoaSxlLmRhdGVwaWNrZXIuX2dldChyLCJzaG93T3B0aW9ucyIpLHMsYSk6ci5kcERpdlsic2xpZGVEb3duIj09PWk/InNsaWRlVXAiOiJmYWRlSW4iPT09aT8iZmFkZU91dCI6ImhpZGUiXShpP3M6bnVsbCxhKSxpfHxhKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsbj10aGlzLl9nZXQociwib25DbG9zZSIpLG4mJm4uYXBwbHkoci5pbnB1dD9yLmlucHV0WzBdOm51bGwsW3IuaW5wdXQ/ci5pbnB1dC52YWwoKToiIixyXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksZS5ibG9ja1VJJiYoZS51bmJsb2NrVUkoKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITEpfSxfdGlkeURpYWxvZzpmdW5jdGlvbihlKXtlLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24odCl7aWYoZS5kYXRlcGlja2VyLl9jdXJJbnN0KXt2YXIgaT1lKHQudGFyZ2V0KSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsoaVswXS5pZCE9PWUuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiYwPT09aS5wYXJlbnRzKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiYhaS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmIWkuY2xvc2VzdCgiLiIrZS5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmKCFlLmRhdGVwaWNrZXIuX2luRGlhbG9nfHwhZS5ibG9ja1VJKXx8aS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09cykmJmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX19LF9hZGp1c3REYXRlOmZ1bmN0aW9uKHQsaSxzKXt2YXIgYT1lKHQpLG49dGhpcy5fZ2V0SW5zdChhWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihhWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKG4saSsoIk0iPT09cz90aGlzLl9nZXQobiwic2hvd0N1cnJlbnRBdFBvcyIpOjApLHMpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobikpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKHQpe3ZhciBpLHM9ZSh0KSxhPXRoaXMuX2dldEluc3Qoc1swXSk7dGhpcy5fZ2V0KGEsImdvdG9DdXJyZW50IikmJmEuY3VycmVudERheT8oYS5zZWxlY3RlZERheT1hLmN1cnJlbnREYXksYS5kcmF3TW9udGg9YS5zZWxlY3RlZE1vbnRoPWEuY3VycmVudE1vbnRoLGEuZHJhd1llYXI9YS5zZWxlY3RlZFllYXI9YS5jdXJyZW50WWVhcik6KGk9bmV3IERhdGUsYS5zZWxlY3RlZERheT1pLmdldERhdGUoKSxhLmRyYXdNb250aD1hLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLGEuZHJhd1llYXI9YS5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpKSx0aGlzLl9ub3RpZnlDaGFuZ2UoYSksdGhpcy5fYWRqdXN0RGF0ZShzKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbih0LGkscyl7dmFyIGE9ZSh0KSxuPXRoaXMuX2dldEluc3QoYVswXSk7blsic2VsZWN0ZWQiKygiTSI9PT1zPyJNb250aCI6IlllYXIiKV09blsiZHJhdyIrKCJNIj09PXM/Ik1vbnRoIjoiWWVhciIpXT1wYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCksdGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUoYSl9LF9zZWxlY3REYXk6ZnVuY3Rpb24odCxpLHMsYSl7dmFyIG4scj1lKHQpO2UoYSkuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihyWzBdKXx8KG49dGhpcy5fZ2V0SW5zdChyWzBdKSxuLnNlbGVjdGVkRGF5PW4uY3VycmVudERheT1lKCJhIixhKS5odG1sKCksbi5zZWxlY3RlZE1vbnRoPW4uY3VycmVudE1vbnRoPWksbi5zZWxlY3RlZFllYXI9bi5jdXJyZW50WWVhcj1zLHRoaXMuX3NlbGVjdERhdGUodCx0aGlzLl9mb3JtYXREYXRlKG4sbi5jdXJyZW50RGF5LG4uY3VycmVudE1vbnRoLG4uY3VycmVudFllYXIpKSl9LF9jbGVhckRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0KTt0aGlzLl9zZWxlY3REYXRlKGksIiIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbih0LGkpe3ZhciBzLGE9ZSh0KSxuPXRoaXMuX2dldEluc3QoYVswXSk7aT1udWxsIT1pP2k6dGhpcy5fZm9ybWF0RGF0ZShuKSxuLmlucHV0JiZuLmlucHV0LnZhbChpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobikscz10aGlzLl9nZXQobiwib25TZWxlY3QiKSxzP3MuYXBwbHkobi5pbnB1dD9uLmlucHV0WzBdOm51bGwsW2ksbl0pOm4uaW5wdXQmJm4uaW5wdXQudHJpZ2dlcigiY2hhbmdlIiksbi5pbmxpbmU/dGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihuKToodGhpcy5faGlkZURhdGVwaWNrZXIoKSx0aGlzLl9sYXN0SW5wdXQ9bi5pbnB1dFswXSwib2JqZWN0IiE9dHlwZW9mIG4uaW5wdXRbMF0mJm4uaW5wdXQuZm9jdXMoKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCl9LF91cGRhdGVBbHRlcm5hdGU6ZnVuY3Rpb24odCl7dmFyIGkscyxhLG49dGhpcy5fZ2V0KHQsImFsdEZpZWxkIik7biYmKGk9dGhpcy5fZ2V0KHQsImFsdEZvcm1hdCIpfHx0aGlzLl9nZXQodCwiZGF0ZUZvcm1hdCIpLHM9dGhpcy5fZ2V0RGF0ZSh0KSxhPXRoaXMuZm9ybWF0RGF0ZShpLHMsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKSxlKG4pLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLnZhbChhKX0pKX0sbm9XZWVrZW5kczpmdW5jdGlvbihlKXt2YXIgdD1lLmdldERheSgpO3JldHVyblt0PjAmJjY+dCwiIl19LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKGUpe3ZhciB0LGk9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCkrNC0oaS5nZXREYXkoKXx8NykpLHQ9aS5nZXRUaW1lKCksaS5zZXRNb250aCgwKSxpLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKCh0LWkpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24odCxpLHMpe2lmKG51bGw9PXR8fG51bGw9PWkpdGhyb3ciSW52YWxpZCBhcmd1bWVudHMiO2lmKGk9Im9iamVjdCI9PXR5cGVvZiBpPyIiK2k6aSsiIiwiIj09PWkpcmV0dXJuIG51bGw7dmFyIGEsbixyLG8saD0wLGw9KHM/cy5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZix1PSJzdHJpbmciIT10eXBlb2YgbD9sOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQobCwxMCksZD0ocz9zLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsYz0ocz9zLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxwPShzP3MubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsZj0ocz9zLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsbT0tMSxnPS0xLHY9LTEseT0tMSxiPSExLF89ZnVuY3Rpb24oZSl7dmFyIGk9dC5sZW5ndGg+YSsxJiZ0LmNoYXJBdChhKzEpPT09ZTtyZXR1cm4gaSYmYSsrLGl9LHg9ZnVuY3Rpb24oZSl7dmFyIHQ9XyhlKSxzPSJAIj09PWU/MTQ6IiEiPT09ZT8yMDoieSI9PT1lJiZ0PzQ6Im8iPT09ZT8zOjIsYT0ieSI9PT1lP3M6MSxuPVJlZ0V4cCgiXlxcZHsiK2ErIiwiK3MrIn0iKSxyPWkuc3Vic3RyaW5nKGgpLm1hdGNoKG4pO2lmKCFyKXRocm93Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uICIraDtyZXR1cm4gaCs9clswXS5sZW5ndGgscGFyc2VJbnQoclswXSwxMCl9LGs9ZnVuY3Rpb24odCxzLGEpe3ZhciBuPS0xLHI9ZS5tYXAoXyh0KT9hOnMsZnVuY3Rpb24oZSx0KXtyZXR1cm5bW3QsZV1dfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi0oZVsxXS5sZW5ndGgtdFsxXS5sZW5ndGgpfSk7aWYoZS5lYWNoKHIsZnVuY3Rpb24oZSx0KXt2YXIgcz10WzFdO3JldHVybiBpLnN1YnN0cihoLHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09cy50b0xvd2VyQ2FzZSgpPyhuPXRbMF0saCs9cy5sZW5ndGgsITEpOnZvaWQgMH0pLC0xIT09bilyZXR1cm4gbisxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2h9LHc9ZnVuY3Rpb24oKXtpZihpLmNoYXJBdChoKSE9PXQuY2hhckF0KGEpKXRocm93IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiK2g7aCsrfTtmb3IoYT0wO3QubGVuZ3RoPmE7YSsrKWlmKGIpIiciIT09dC5jaGFyQXQoYSl8fF8oIiciKT93KCk6Yj0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChhKSl7Y2FzZSJkIjp2PXgoImQiKTticmVhaztjYXNlIkQiOmsoIkQiLGQsYyk7YnJlYWs7Y2FzZSJvIjp5PXgoIm8iKTticmVhaztjYXNlIm0iOmc9eCgibSIpO2JyZWFrO2Nhc2UiTSI6Zz1rKCJNIixwLGYpO2JyZWFrO2Nhc2UieSI6bT14KCJ5Iik7YnJlYWs7Y2FzZSJAIjpvPW5ldyBEYXRlKHgoIkAiKSksbT1vLmdldEZ1bGxZZWFyKCksZz1vLmdldE1vbnRoKCkrMSx2PW8uZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6bz1uZXcgRGF0ZSgoeCgiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLG09by5nZXRGdWxsWWVhcigpLGc9by5nZXRNb250aCgpKzEsdj1vLmdldERhdGUoKTticmVhaztjYXNlIiciOl8oIiciKT93KCk6Yj0hMDticmVhaztkZWZhdWx0OncoKX1pZihpLmxlbmd0aD5oJiYocj1pLnN1YnN0cihoKSwhL15ccysvLnRlc3QocikpKXRocm93IkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIityO2lmKC0xPT09bT9tPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKToxMDA+bSYmKG0rPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyh1Pj1tPzA6LTEwMCkpLHk+LTEpZm9yKGc9MSx2PXk7Oyl7aWYobj10aGlzLl9nZXREYXlzSW5Nb250aChtLGctMSksbj49dilicmVhaztnKyssdi09bn1pZihvPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG0sZy0xLHYpKSxvLmdldEZ1bGxZZWFyKCkhPT1tfHxvLmdldE1vbnRoKCkrMSE9PWd8fG8uZ2V0RGF0ZSgpIT09dil0aHJvdyJJbnZhbGlkIGRhdGUiO3JldHVybiBvfSxBVE9NOiJ5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5IixJU09fODYwMToieXktbW0tZGQiLFJGQ184MjI6IkQsIGQgTSB5IixSRkNfODUwOiJERCwgZGQtTS15IixSRkNfMTAzNjoiRCwgZCBNIHkiLFJGQ18xMTIzOiJELCBkIE0geXkiLFJGQ18yODIyOiJELCBkIE0geXkiLFJTUzoiRCwgZCBNIHkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXktbW0tZGQiLF90aWNrc1RvMTk3MDoxZTcqNjAqNjAqMjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSxmb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxpKXtpZighdClyZXR1cm4iIjt2YXIgcyxhPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxuPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLHI9KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxvPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKHQpe3ZhciBpPWUubGVuZ3RoPnMrMSYmZS5jaGFyQXQocysxKT09PXQ7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcz0iIit0O2lmKGgoZSkpZm9yKDtpPnMubGVuZ3RoOylzPSIwIitzO3JldHVybiBzfSx1PWZ1bmN0aW9uKGUsdCxpLHMpe3JldHVybiBoKGUpP3NbdF06aVt0XX0sZD0iIixjPSExO2lmKHQpZm9yKHM9MDtlLmxlbmd0aD5zO3MrKylpZihjKSInIiE9PWUuY2hhckF0KHMpfHxoKCInIik/ZCs9ZS5jaGFyQXQocyk6Yz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdChzKSl7Y2FzZSJkIjpkKz1sKCJkIix0LmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmQrPXUoIkQiLHQuZ2V0RGF5KCksYSxuKTticmVhaztjYXNlIm8iOmQrPWwoIm8iLE1hdGgucm91bmQoKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOmQrPWwoIm0iLHQuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6ZCs9dSgiTSIsdC5nZXRNb250aCgpLHIsbyk7YnJlYWs7Y2FzZSJ5IjpkKz1oKCJ5Iik/dC5nZXRGdWxsWWVhcigpOigxMD50LmdldFllYXIoKSUxMDA/IjAiOiIiKSt0LmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjpkKz10LmdldFRpbWUoKTticmVhaztjYXNlIiEiOmQrPTFlNCp0LmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOmgoIiciKT9kKz0iJyI6Yz0hMDticmVhaztkZWZhdWx0OmQrPWUuY2hhckF0KHMpfXJldHVybiBkfSxfcG9zc2libGVDaGFyczpmdW5jdGlvbihlKXt2YXIgdCxpPSIiLHM9ITEsYT1mdW5jdGlvbihpKXt2YXIgcz1lLmxlbmd0aD50KzEmJmUuY2hhckF0KHQrMSk9PT1pO3JldHVybiBzJiZ0Kyssc307Zm9yKHQ9MDtlLmxlbmd0aD50O3QrKylpZihzKSInIiE9PWUuY2hhckF0KHQpfHxhKCInIik/aSs9ZS5jaGFyQXQodCk6cz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdCh0KSl7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJAIjppKz0iMDEyMzQ1Njc4OSI7YnJlYWs7Y2FzZSJEIjpjYXNlIk0iOnJldHVybiBudWxsO2Nhc2UiJyI6YSgiJyIpP2krPSInIjpzPSEwO2JyZWFrO2RlZmF1bHQ6aSs9ZS5jaGFyQXQodCl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09ZS5zZXR0aW5nc1t0XT9lLnNldHRpbmdzW3RdOnRoaXMuX2RlZmF1bHRzW3RdfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbihlLHQpe2lmKGUuaW5wdXQudmFsKCkhPT1lLmxhc3RWYWwpe3ZhciBpPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscz1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsYT10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxuPWEscj10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e249dGhpcy5wYXJzZURhdGUoaSxzLHIpfHxhfWNhdGNoKG8pe3M9dD8iIjpzfWUuc2VsZWN0ZWREYXk9bi5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPW4uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPW4uZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cz9uLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXM/bi5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1zP24uZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSwiZGVmYXVsdERhdGUiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGkscyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSx0fSxuPWZ1bmN0aW9uKGkpe3RyeXtyZXR1cm4gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IiksaSxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0KSl9Y2F0Y2gocyl7fWZvcih2YXIgYT0oaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pP2UuZGF0ZXBpY2tlci5fZ2V0RGF0ZSh0KTpudWxsKXx8bmV3IERhdGUsbj1hLmdldEZ1bGxZZWFyKCkscj1hLmdldE1vbnRoKCksbz1hLmdldERhdGUoKSxoPS8oWytcLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLGw9aC5leGVjKGkpO2w7KXtzd2l0Y2gobFsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6bys9cGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOm8rPTcqcGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOnIrPXBhcnNlSW50KGxbMV0sMTApLG89TWF0aC5taW4obyxlLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKG4scikpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjpuKz1wYXJzZUludChsWzFdLDEwKSxvPU1hdGgubWluKG8sZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLHIpKX1sPWguZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUobixyLG8pfSxyPW51bGw9PWl8fCIiPT09aT9zOiJzdHJpbmciPT10eXBlb2YgaT9uKGkpOiJudW1iZXIiPT10eXBlb2YgaT9pc05hTihpKT9zOmEoaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybiByPXImJiJJbnZhbGlkIERhdGUiPT0iIityP3M6cixyJiYoci5zZXRIb3VycygwKSxyLnNldE1pbnV0ZXMoMCksci5zZXRTZWNvbmRzKDApLHIuc2V0TWlsbGlzZWNvbmRzKDApKSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChyKX0sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlPyhlLnNldEhvdXJzKGUuZ2V0SG91cnMoKT4xMj9lLmdldEhvdXJzKCkrMjowKSxlKTpudWxsfSxfc2V0RGF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHM9IXQsYT1lLnNlbGVjdGVkTW9udGgsbj1lLnNlbGVjdGVkWWVhcixyPXRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHQsbmV3IERhdGUpKTtlLnNlbGVjdGVkRGF5PWUuY3VycmVudERheT1yLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9ZS5jdXJyZW50TW9udGg9ci5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9ZS5jdXJyZW50WWVhcj1yLmdldEZ1bGxZZWFyKCksYT09PWUuc2VsZWN0ZWRNb250aCYmbj09PWUuc2VsZWN0ZWRZZWFyfHxpfHx0aGlzLl9ub3RpZnlDaGFuZ2UoZSksdGhpcy5fYWRqdXN0SW5zdERhdGUoZSksZS5pbnB1dCYmZS5pbnB1dC52YWwocz8iIjp0aGlzLl9mb3JtYXREYXRlKGUpKX0sX2dldERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuY3VycmVudFllYXJ8fGUuaW5wdXQmJiIiPT09ZS5pbnB1dC52YWwoKT9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHR9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXQodCwic3RlcE1vbnRocyIpLHM9IiMiK3QuaWQucmVwbGFjZSgvXFxcXC9nLCJcXCIpO3QuZHBEaXYuZmluZCgiW2RhdGEtaGFuZGxlcl0iKS5tYXAoZnVuY3Rpb24oKXt2YXIgdD17cHJldjpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShzLC1pLCJNIil9LG5leHQ6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywraSwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHMpfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3REYXkocywrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIk0iKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIlkiKSwhMX19O2UodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLHRbdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtaGFuZGxlciIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbihlKXt2YXIgdCxpLHMsYSxuLHIsbyxoLGwsdSxkLGMscCxmLG0sZyx2LHksYixfLHgsayx3LFQsUyxELE4sTSxDLEEsUCxJLEgsRixqLHosRSxPLEwsVz1uZXcgRGF0ZSxSPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKFcuZ2V0RnVsbFllYXIoKSxXLmdldE1vbnRoKCksVy5nZXREYXRlKCkpKSxZPXRoaXMuX2dldChlLCJpc1JUTCIpLEo9dGhpcy5fZ2V0KGUsInNob3dCdXR0b25QYW5lbCIpLEI9dGhpcy5fZ2V0KGUsImhpZGVJZk5vUHJldk5leHQiKSxLPXRoaXMuX2dldChlLCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0IiksVj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxxPXRoaXMuX2dldChlLCJzaG93Q3VycmVudEF0UG9zIiksUT10aGlzLl9nZXQoZSwic3RlcE1vbnRocyIpLFU9MSE9PVZbMF18fDEhPT1WWzFdLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoZS5jdXJyZW50RGF5P25ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLFg9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSwkPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksWj1lLmRyYXdNb250aC1xLGV0PWUuZHJhd1llYXI7aWYoMD5aJiYoWis9MTIsZXQtLSksJClmb3IodD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSgkLmdldEZ1bGxZZWFyKCksJC5nZXRNb250aCgpLVZbMF0qVlsxXSsxLCQuZ2V0RGF0ZSgpKSksdD1YJiZYPnQ/WDp0O3RoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosMSkpPnQ7KVotLSwwPlomJihaPTExLGV0LS0pO2ZvcihlLmRyYXdNb250aD1aLGUuZHJhd1llYXI9ZXQsaT10aGlzLl9nZXQoZSwicHJldlRleHQiKSxpPUs/dGhpcy5mb3JtYXREYXRlKGksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWi1RLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmkscz10aGlzLl9jYW5BZGp1c3RNb250aChlLC0xLGV0LFopPyI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IjpCPyIiOiI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IixhPXRoaXMuX2dldChlLCJuZXh0VGV4dCIpLGE9Sz90aGlzLmZvcm1hdERhdGUoYSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaK1EsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6YSxuPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsMSxldCxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIithKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IithKyI8L3NwYW4+PC9hPiI6Qj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIithKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IithKyI8L3NwYW4+PC9hPiIscj10aGlzLl9nZXQoZSwiY3VycmVudFRleHQiKSxvPXRoaXMuX2dldChlLCJnb3RvQ3VycmVudCIpJiZlLmN1cnJlbnREYXk/RzpSLHI9Sz90aGlzLmZvcm1hdERhdGUocixvLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6cixoPWUuaW5saW5lPyIiOiI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0naGlkZScgZGF0YS1ldmVudD0nY2xpY2snPiIrdGhpcy5fZ2V0KGUsImNsb3NlVGV4dCIpKyI8L2J1dHRvbj4iLGw9Sj8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Jz4iKyhZP2g6IiIpKyh0aGlzLl9pc0luUmFuZ2UoZSxvKT8iPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSd0b2RheScgZGF0YS1ldmVudD0nY2xpY2snPiIrcisiPC9idXR0b24+IjoiIikrKFk/IiI6aCkrIjwvZGl2PiI6IiIsdT1wYXJzZUludCh0aGlzLl9nZXQoZSwiZmlyc3REYXkiKSwxMCksdT1pc05hTih1KT8wOnUsZD10aGlzLl9nZXQoZSwic2hvd1dlZWsiKSxjPXRoaXMuX2dldChlLCJkYXlOYW1lcyIpLHA9dGhpcy5fZ2V0KGUsImRheU5hbWVzTWluIiksZj10aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpLG09dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLGc9dGhpcy5fZ2V0KGUsImJlZm9yZVNob3dEYXkiKSx2PXRoaXMuX2dldChlLCJzaG93T3RoZXJNb250aHMiKSx5PXRoaXMuX2dldChlLCJzZWxlY3RPdGhlck1vbnRocyIpLGI9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksXz0iIixrPTA7VlswXT5rO2srKyl7Zm9yKHc9IiIsdGhpcy5tYXhSb3dzPTQsVD0wO1ZbMV0+VDtUKyspe2lmKFM9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWixlLnNlbGVjdGVkRGF5KSksRD0iIHVpLWNvcm5lci1hbGwiLE49IiIsVSl7aWYoTis9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXAiLFZbMV0+MSlzd2l0Y2goVCl7Y2FzZSAwOk4rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCIsRD0iIHVpLWNvcm5lci0iKyhZPyJyaWdodCI6ImxlZnQiKTsKK2JyZWFrO2Nhc2UgVlsxXS0xOk4rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IixEPSIgdWktY29ybmVyLSIrKFk/ImxlZnQiOiJyaWdodCIpO2JyZWFrO2RlZmF1bHQ6Tis9IiB1aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSIsRD0iIn1OKz0iJz4ifWZvcihOKz0iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXgiK0QrIic+IisoL2FsbHxsZWZ0Ly50ZXN0KEQpJiYwPT09az9ZP246czoiIikrKC9hbGx8cmlnaHQvLnRlc3QoRCkmJjA9PT1rP1k/czpuOiIiKSt0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihlLFosZXQsWCwkLGs+MHx8VD4wLGYsbSkrIjwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPiIrIjx0cj4iLE09ZD8iPHRoIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz4iK3RoaXMuX2dldChlLCJ3ZWVrSGVhZGVyIikrIjwvdGg+IjoiIix4PTA7Nz54O3grKylDPSh4K3UpJTcsTSs9Ijx0aCBzY29wZT0nY29sJyIrKCh4K3UrNiklNz49NT8iIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstZW5kJyI6IiIpKyI+IisiPHNwYW4gdGl0bGU9JyIrY1tDXSsiJz4iK3BbQ10rIjwvc3Bhbj48L3RoPiI7Zm9yKE4rPU0rIjwvdHI+PC90aGVhZD48dGJvZHk+IixBPXRoaXMuX2dldERheXNJbk1vbnRoKGV0LFopLGV0PT09ZS5zZWxlY3RlZFllYXImJlo9PT1lLnNlbGVjdGVkTW9udGgmJihlLnNlbGVjdGVkRGF5PU1hdGgubWluKGUuc2VsZWN0ZWREYXksQSkpLFA9KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChldCxaKS11KzcpJTcsST1NYXRoLmNlaWwoKFArQSkvNyksSD1VP3RoaXMubWF4Um93cz5JP3RoaXMubWF4Um93czpJOkksdGhpcy5tYXhSb3dzPUgsRj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaLDEtUCkpLGo9MDtIPmo7aisrKXtmb3IoTis9Ijx0cj4iLHo9ZD8iPHRkIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz4iK3RoaXMuX2dldChlLCJjYWxjdWxhdGVXZWVrIikoRikrIjwvdGQ+IjoiIix4PTA7Nz54O3grKylFPWc/Zy5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbRl0pOlshMCwiIl0sTz1GLmdldE1vbnRoKCkhPT1aLEw9TyYmIXl8fCFFWzBdfHxYJiZYPkZ8fCQmJkY+JCx6Kz0iPHRkIGNsYXNzPSciKygoeCt1KzYpJTc+PTU/IiB1aS1kYXRlcGlja2VyLXdlZWstZW5kIjoiIikrKE8/IiB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoIjoiIikrKEYuZ2V0VGltZSgpPT09Uy5nZXRUaW1lKCkmJlo9PT1lLnNlbGVjdGVkTW9udGgmJmUuX2tleUV2ZW50fHxiLmdldFRpbWUoKT09PUYuZ2V0VGltZSgpJiZiLmdldFRpbWUoKT09PVMuZ2V0VGltZSgpPyIgIit0aGlzLl9kYXlPdmVyQ2xhc3M6IiIpKyhMPyIgIit0aGlzLl91bnNlbGVjdGFibGVDbGFzcysiIHVpLXN0YXRlLWRpc2FibGVkIjoiIikrKE8mJiF2PyIiOiIgIitFWzFdKyhGLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpPyIgIit0aGlzLl9jdXJyZW50Q2xhc3M6IiIpKyhGLmdldFRpbWUoKT09PVIuZ2V0VGltZSgpPyIgdWktZGF0ZXBpY2tlci10b2RheSI6IiIpKSsiJyIrKE8mJiF2fHwhRVsyXT8iIjoiIHRpdGxlPSciK0VbMl0ucmVwbGFjZSgvJy9nLCImIzM5OyIpKyInIikrKEw/IiI6IiBkYXRhLWhhbmRsZXI9J3NlbGVjdERheScgZGF0YS1ldmVudD0nY2xpY2snIGRhdGEtbW9udGg9JyIrRi5nZXRNb250aCgpKyInIGRhdGEteWVhcj0nIitGLmdldEZ1bGxZZWFyKCkrIiciKSsiPiIrKE8mJiF2PyImI3hhMDsiOkw/IjxzcGFuIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Jz4iK0YuZ2V0RGF0ZSgpKyI8L3NwYW4+IjoiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQiKyhGLmdldFRpbWUoKT09PVIuZ2V0VGltZSgpPyIgdWktc3RhdGUtaGlnaGxpZ2h0IjoiIikrKEYuZ2V0VGltZSgpPT09Ry5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1hY3RpdmUiOiIiKSsoTz8iIHVpLXByaW9yaXR5LXNlY29uZGFyeSI6IiIpKyInIGhyZWY9JyMnPiIrRi5nZXREYXRlKCkrIjwvYT4iKSsiPC90ZD4iLEYuc2V0RGF0ZShGLmdldERhdGUoKSsxKSxGPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEYpO04rPXorIjwvdHI+In1aKyssWj4xMSYmKFo9MCxldCsrKSxOKz0iPC90Ym9keT48L3RhYmxlPiIrKFU/IjwvZGl2PiIrKFZbMF0+MCYmVD09PVZbMV0tMT8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1yb3ctYnJlYWsnPjwvZGl2PiI6IiIpOiIiKSx3Kz1OfV8rPXd9cmV0dXJuIF8rPWwsZS5fa2V5RXZlbnQ9ITEsX30sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxpLHMsYSxuLHIsbyl7dmFyIGgsbCx1LGQsYyxwLGYsbSxnPXRoaXMuX2dldChlLCJjaGFuZ2VNb250aCIpLHY9dGhpcy5fZ2V0KGUsImNoYW5nZVllYXIiKSx5PXRoaXMuX2dldChlLCJzaG93TW9udGhBZnRlclllYXIiKSxiPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXRpdGxlJz4iLF89IiI7aWYobnx8IWcpXys9IjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJz4iK3JbdF0rIjwvc3Bhbj4iO2Vsc2V7Zm9yKGg9cyYmcy5nZXRGdWxsWWVhcigpPT09aSxsPWEmJmEuZ2V0RnVsbFllYXIoKT09PWksXys9IjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+Iix1PTA7MTI+dTt1KyspKCFofHx1Pj1zLmdldE1vbnRoKCkpJiYoIWx8fGEuZ2V0TW9udGgoKT49dSkmJihfKz0iPG9wdGlvbiB2YWx1ZT0nIit1KyInIisodT09PXQ/IiBzZWxlY3RlZD0nc2VsZWN0ZWQnIjoiIikrIj4iK29bdV0rIjwvb3B0aW9uPiIpO18rPSI8L3NlbGVjdD4ifWlmKHl8fChiKz1fKyghbiYmZyYmdj8iIjoiJiN4YTA7IikpLCFlLnllYXJzaHRtbClpZihlLnllYXJzaHRtbD0iIixufHwhdiliKz0iPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcic+IitpKyI8L3NwYW4+IjtlbHNle2ZvcihkPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLGM9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvY1srXC1dLiovKT9pK3BhcnNlSW50KGUuc3Vic3RyaW5nKDEpLDEwKTplLm1hdGNoKC9bK1wtXS4qLyk/YytwYXJzZUludChlLDEwKTpwYXJzZUludChlLDEwKTtyZXR1cm4gaXNOYU4odCk/Yzp0fSxmPXAoZFswXSksbT1NYXRoLm1heChmLHAoZFsxXXx8IiIpKSxmPXM/TWF0aC5tYXgoZixzLmdldEZ1bGxZZWFyKCkpOmYsbT1hP01hdGgubWluKG0sYS5nZXRGdWxsWWVhcigpKTptLGUueWVhcnNodG1sKz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IjttPj1mO2YrKyllLnllYXJzaHRtbCs9IjxvcHRpb24gdmFsdWU9JyIrZisiJyIrKGY9PT1pPyIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyI6IiIpKyI+IitmKyI8L29wdGlvbj4iO2UueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixiKz1lLnllYXJzaHRtbCxlLnllYXJzaHRtbD1udWxsfXJldHVybiBiKz10aGlzLl9nZXQoZSwieWVhclN1ZmZpeCIpLHkmJihiKz0oIW4mJmcmJnY/IiI6IiYjeGEwOyIpK18pLGIrPSI8L2Rpdj4ifSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPWUuZHJhd1llYXIrKCJZIj09PWk/dDowKSxhPWUuZHJhd01vbnRoKygiTSI9PT1pP3Q6MCksbj1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LHRoaXMuX2dldERheXNJbk1vbnRoKHMsYSkpKygiRCI9PT1pP3Q6MCkscj10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsYSxuKSkpO2Uuc2VsZWN0ZWREYXk9ci5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPXIuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPXIuZ2V0RnVsbFllYXIoKSwoIk0iPT09aXx8IlkiPT09aSkmJnRoaXMuX25vdGlmeUNoYW5nZShlKX0sX3Jlc3RyaWN0TWluTWF4OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxzPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksYT1pJiZpPnQ/aTp0O3JldHVybiBzJiZhPnM/czphfSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJvbkNoYW5nZU1vbnRoWWVhciIpO3QmJnQuYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW2Uuc2VsZWN0ZWRZZWFyLGUuc2VsZWN0ZWRNb250aCsxLGVdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJudW1iZXJPZk1vbnRocyIpO3JldHVybiBudWxsPT10P1sxLDFdOiJudW1iZXIiPT10eXBlb2YgdD9bMSx0XTp0fSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdGhpcy5fZ2V0KGUsdCsiRGF0ZSIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZSx0LDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBEYXRlKGUsdCwxKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKGUsdCxpLHMpe3ZhciBhPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG49dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaSxzKygwPnQ/dDphWzBdKmFbMV0pLDEpKTtyZXR1cm4gMD50JiZuLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZShlLG4pfSxfaXNJblJhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxhPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIiksbj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLHI9bnVsbCxvPW51bGwsaD10aGlzLl9nZXQoZSwieWVhclJhbmdlIik7cmV0dXJuIGgmJihpPWguc3BsaXQoIjoiKSxzPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxyPXBhcnNlSW50KGlbMF0sMTApLG89cGFyc2VJbnQoaVsxXSwxMCksaVswXS5tYXRjaCgvWytcLV0uKi8pJiYocis9cyksaVsxXS5tYXRjaCgvWytcLV0uKi8pJiYobys9cykpLCghYXx8dC5nZXRUaW1lKCk+PWEuZ2V0VGltZSgpKSYmKCFufHx0LmdldFRpbWUoKTw9bi5nZXRUaW1lKCkpJiYoIXJ8fHQuZ2V0RnVsbFllYXIoKT49cikmJighb3x8bz49dC5nZXRGdWxsWWVhcigpKX0sX2dldEZvcm1hdENvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwic2hvcnRZZWFyQ3V0b2ZmIik7cmV0dXJuIHQ9InN0cmluZyIhPXR5cGVvZiB0P3Q6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludCh0LDEwKSx7c2hvcnRZZWFyQ3V0b2ZmOnQsZGF5TmFtZXNTaG9ydDp0aGlzLl9nZXQoZSwiZGF5TmFtZXNTaG9ydCIpLGRheU5hbWVzOnRoaXMuX2dldChlLCJkYXlOYW1lcyIpLG1vbnRoTmFtZXNTaG9ydDp0aGlzLl9nZXQoZSwibW9udGhOYW1lc1Nob3J0IiksbW9udGhOYW1lczp0aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpfX0sX2Zvcm1hdERhdGU6ZnVuY3Rpb24oZSx0LGkscyl7dHx8KGUuY3VycmVudERheT1lLnNlbGVjdGVkRGF5LGUuY3VycmVudE1vbnRoPWUuc2VsZWN0ZWRNb250aCxlLmN1cnJlbnRZZWFyPWUuc2VsZWN0ZWRZZWFyKTt2YXIgYT10PyJvYmplY3QiPT10eXBlb2YgdD90OnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsaSx0KSk6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpKTtyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldChlLCJkYXRlRm9ybWF0IiksYSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpfX0pLGUuZm4uZGF0ZXBpY2tlcj1mdW5jdGlvbih0KXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7ZS5kYXRlcGlja2VyLmluaXRpYWxpemVkfHwoZShkb2N1bWVudCkubW91c2Vkb3duKGUuZGF0ZXBpY2tlci5fY2hlY2tFeHRlcm5hbENsaWNrKSxlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApLDA9PT1lKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiZlKCJib2R5IikuYXBwZW5kKGUuZGF0ZXBpY2tlci5kcERpdik7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8ImlzRGlzYWJsZWQiIT09dCYmImdldERhdGUiIT09dCYmIndpZGdldCIhPT10PyJvcHRpb24iPT09dCYmMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYXJndW1lbnRzWzFdP2UuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXsic3RyaW5nIj09dHlwZW9mIHQ/ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoaSkpOmUuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLHQpfSk6ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpfSxlLmRhdGVwaWNrZXI9bmV3IGEsZS5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLGUuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGUuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjExLjQiLGUuZGF0ZXBpY2tlcn0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkuY29va2llLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS5jb29raWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3MTkwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkuY29va2llLmpzCkBAIC0wLDAgKzEsMTE3IEBACisvKiEKKyAqIGpRdWVyeSBDb29raWUgUGx1Z2luIHYxLjQuMAorICogaHR0cHM6Ly9naXRodWIuY29tL2NhcmhhcnRsL2pxdWVyeS1jb29raWUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMyBLbGF1cyBIYXJ0bAorICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKi8KKyhmdW5jdGlvbiAoZmFjdG9yeSkgeworCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKwkJLy8gQU1ELiBSZWdpc3RlciBhcyBhbm9ueW1vdXMgbW9kdWxlLgorCQlkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7CisJfSBlbHNlIHsKKwkJLy8gQnJvd3NlciBnbG9iYWxzLgorCQlmYWN0b3J5KGpRdWVyeSk7CisJfQorfShmdW5jdGlvbiAoJCkgeworCisJdmFyIHBsdXNlcyA9IC9cKy9nOworCisJZnVuY3Rpb24gZW5jb2RlKHMpIHsKKwkJcmV0dXJuIGNvbmZpZy5yYXcgPyBzIDogZW5jb2RlVVJJQ29tcG9uZW50KHMpOworCX0KKworCWZ1bmN0aW9uIGRlY29kZShzKSB7CisJCXJldHVybiBjb25maWcucmF3ID8gcyA6IGRlY29kZVVSSUNvbXBvbmVudChzKTsKKwl9CisKKwlmdW5jdGlvbiBzdHJpbmdpZnlDb29raWVWYWx1ZSh2YWx1ZSkgeworCQlyZXR1cm4gZW5jb2RlKGNvbmZpZy5qc29uID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKSk7CisJfQorCisJZnVuY3Rpb24gcGFyc2VDb29raWVWYWx1ZShzKSB7CisJCWlmIChzLmluZGV4T2YoJyInKSA9PT0gMCkgeworCQkJLy8gVGhpcyBpcyBhIHF1b3RlZCBjb29raWUgYXMgYWNjb3JkaW5nIHRvIFJGQzIwNjgsIHVuZXNjYXBlLi4uCisJCQlzID0gcy5zbGljZSgxLCAtMSkucmVwbGFjZSgvXFwiL2csICciJykucmVwbGFjZSgvXFxcXC9nLCAnXFwnKTsKKwkJfQorCisJCXRyeSB7CisJCQkvLyBSZXBsYWNlIHNlcnZlci1zaWRlIHdyaXR0ZW4gcGx1c2VzIHdpdGggc3BhY2VzLgorCQkJLy8gSWYgd2UgY2FuJ3QgZGVjb2RlIHRoZSBjb29raWUsIGlnbm9yZSBpdCwgaXQncyB1bnVzYWJsZS4KKwkJCXMgPSBkZWNvZGVVUklDb21wb25lbnQocy5yZXBsYWNlKHBsdXNlcywgJyAnKSk7CisJCX0gY2F0Y2goZSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJdHJ5IHsKKwkJCS8vIElmIHdlIGNhbid0IHBhcnNlIHRoZSBjb29raWUsIGlnbm9yZSBpdCwgaXQncyB1bnVzYWJsZS4KKwkJCXJldHVybiBjb25maWcuanNvbiA/IEpTT04ucGFyc2UocykgOiBzOworCQl9IGNhdGNoKGUpIHt9CisJfQorCisJZnVuY3Rpb24gcmVhZChzLCBjb252ZXJ0ZXIpIHsKKwkJdmFyIHZhbHVlID0gY29uZmlnLnJhdyA/IHMgOiBwYXJzZUNvb2tpZVZhbHVlKHMpOworCQlyZXR1cm4gJC5pc0Z1bmN0aW9uKGNvbnZlcnRlcikgPyBjb252ZXJ0ZXIodmFsdWUpIDogdmFsdWU7CisJfQorCisJdmFyIGNvbmZpZyA9ICQuY29va2llID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG9wdGlvbnMpIHsKKworCQkvLyBXcml0ZQorCQlpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhJC5pc0Z1bmN0aW9uKHZhbHVlKSkgeworCQkJb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBjb25maWcuZGVmYXVsdHMsIG9wdGlvbnMpOworCisJCQlpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHsKKwkJCQl2YXIgZGF5cyA9IG9wdGlvbnMuZXhwaXJlcywgdCA9IG9wdGlvbnMuZXhwaXJlcyA9IG5ldyBEYXRlKCk7CisJCQkJdC5zZXREYXRlKHQuZ2V0RGF0ZSgpICsgZGF5cyk7CisJCQl9CisKKwkJCXJldHVybiAoZG9jdW1lbnQuY29va2llID0gWworCQkJCWVuY29kZShrZXkpLCAnPScsIHN0cmluZ2lmeUNvb2tpZVZhbHVlKHZhbHVlKSwKKwkJCQlvcHRpb25zLmV4cGlyZXMgPyAnOyBleHBpcmVzPScgKyBvcHRpb25zLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnLCAvLyB1c2UgZXhwaXJlcyBhdHRyaWJ1dGUsIG1heC1hZ2UgaXMgbm90IHN1cHBvcnRlZCBieSBJRQorCQkJCW9wdGlvbnMucGF0aCAgICA/ICc7IHBhdGg9JyArIG9wdGlvbnMucGF0aCA6ICcnLAorCQkJCW9wdGlvbnMuZG9tYWluICA/ICc7IGRvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gOiAnJywKKwkJCQlvcHRpb25zLnNlY3VyZSAgPyAnOyBzZWN1cmUnIDogJycKKwkJCV0uam9pbignJykpOworCQl9CisKKwkJLy8gUmVhZAorCisJCXZhciByZXN1bHQgPSBrZXkgPyB1bmRlZmluZWQgOiB7fTsKKworCQkvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5CisJCS8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLiBBbHNvIHByZXZlbnRzIG9kZCByZXN1bHQgd2hlbgorCQkvLyBjYWxsaW5nICQuY29va2llKCkuCisJCXZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llID8gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpIDogW107CisKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBjb29raWVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworCQkJdmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpOworCQkJdmFyIG5hbWUgPSBkZWNvZGUocGFydHMuc2hpZnQoKSk7CisJCQl2YXIgY29va2llID0gcGFydHMuam9pbignPScpOworCisJCQlpZiAoa2V5ICYmIGtleSA9PT0gbmFtZSkgeworCQkJCS8vIElmIHNlY29uZCBhcmd1bWVudCAodmFsdWUpIGlzIGEgZnVuY3Rpb24gaXQncyBhIGNvbnZlcnRlci4uLgorCQkJCXJlc3VsdCA9IHJlYWQoY29va2llLCB2YWx1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIFByZXZlbnQgc3RvcmluZyBhIGNvb2tpZSB0aGF0IHdlIGNvdWxkbid0IGRlY29kZS4KKwkJCWlmICgha2V5ICYmIChjb29raWUgPSByZWFkKGNvb2tpZSkpICE9PSB1bmRlZmluZWQpIHsKKwkJCQlyZXN1bHRbbmFtZV0gPSBjb29raWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmVzdWx0OworCX07CisKKwljb25maWcuZGVmYXVsdHMgPSB7fTsKKworCSQucmVtb3ZlQ29va2llID0gZnVuY3Rpb24gKGtleSwgb3B0aW9ucykgeworCQlpZiAoJC5jb29raWUoa2V5KSAhPT0gdW5kZWZpbmVkKSB7CisJCQkvLyBNdXN0IG5vdCBhbHRlciBvcHRpb25zLCB0aHVzIGV4dGVuZGluZyBhIGZyZXNoIG9iamVjdC4uLgorCQkJJC5jb29raWUoa2V5LCAnJywgJC5leHRlbmQoe30sIG9wdGlvbnMsIHsgZXhwaXJlczogLTEgfSkpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX07CisKK30pKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkudHJlZXRhYmxlLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS50cmVldGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlNzQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkudHJlZXRhYmxlLmpzCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICogalF1ZXJ5IHRyZWV0YWJsZSBQbHVnaW4gMy4xLjAKKyAqIGh0dHA6Ly9sdWRvLmN1YmljcGh1c2UubmwvanF1ZXJ5LXRyZWV0YWJsZQorICoKKyAqIENvcHlyaWdodCAyMDEzLCBMdWRvIHZhbiBkZW4gQm9vbQorICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCisgKi8KKyhmdW5jdGlvbigpIHsKKyAgdmFyICQsIE5vZGUsIFRyZWUsIG1ldGhvZHM7CisKKyAgJCA9IGpRdWVyeTsKKworICBOb2RlID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIE5vZGUocm93LCB0cmVlLCBzZXR0aW5ncykgeworICAgICAgdmFyIHBhcmVudElkOworCisgICAgICB0aGlzLnJvdyA9IHJvdzsKKyAgICAgIHRoaXMudHJlZSA9IHRyZWU7CisgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7CisKKyAgICAgIC8vIFRPRE8gRW5zdXJlIGlkL3BhcmVudElkIGlzIGFsd2F5cyBhIHN0cmluZyAobm90IGludCkKKyAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdy5kYXRhKHRoaXMuc2V0dGluZ3Mubm9kZUlkQXR0cik7CisKKyAgICAgIC8vIFRPRE8gTW92ZSB0aGlzIHRvIGEgc2V0UGFyZW50SWQgZnVuY3Rpb24/CisgICAgICBwYXJlbnRJZCA9IHRoaXMucm93LmRhdGEodGhpcy5zZXR0aW5ncy5wYXJlbnRJZEF0dHIpOworICAgICAgaWYgKHBhcmVudElkICE9IG51bGwgJiYgcGFyZW50SWQgIT09ICIiKSB7CisgICAgICAgIHRoaXMucGFyZW50SWQgPSBwYXJlbnRJZDsKKyAgICAgIH0KKworICAgICAgdGhpcy50cmVlQ2VsbCA9ICQodGhpcy5yb3cuY2hpbGRyZW4odGhpcy5zZXR0aW5ncy5jb2x1bW5FbFR5cGUpW3RoaXMuc2V0dGluZ3MuY29sdW1uXSk7CisgICAgICB0aGlzLmV4cGFuZGVyID0gJCh0aGlzLnNldHRpbmdzLmV4cGFuZGVyVGVtcGxhdGUpOworICAgICAgdGhpcy5pbmRlbnRlciA9ICQodGhpcy5zZXR0aW5ncy5pbmRlbnRlclRlbXBsYXRlKTsKKyAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgIHRoaXMudHJlZUNlbGwucHJlcGVuZCh0aGlzLmluZGVudGVyKTsKKyAgICB9CisKKyAgICBOb2RlLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuYW5jZXN0b3JzID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgYW5jZXN0b3JzLCBub2RlOworICAgICAgbm9kZSA9IHRoaXM7CisgICAgICBhbmNlc3RvcnMgPSBbXTsKKyAgICAgIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgYW5jZXN0b3JzLnB1c2gobm9kZSk7CisgICAgICB9CisgICAgICByZXR1cm4gYW5jZXN0b3JzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5jb2xsYXBzZSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKCkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9CisKKyAgICAgIHRoaXMucm93LnJlbW92ZUNsYXNzKCJleHBhbmRlZCIpLmFkZENsYXNzKCJjb2xsYXBzZWQiKTsKKworICAgICAgdGhpcy5faGlkZUNoaWxkcmVuKCk7CisgICAgICB0aGlzLmV4cGFuZGVyLmF0dHIoInRpdGxlIiwgdGhpcy5zZXR0aW5ncy5zdHJpbmdFeHBhbmQpOworCisgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB0aGlzLnNldHRpbmdzLm9uTm9kZUNvbGxhcHNlICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk5vZGVDb2xsYXBzZS5hcHBseSh0aGlzKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmNvbGxhcHNlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMucm93Lmhhc0NsYXNzKCJjb2xsYXBzZWQiKTsKKyAgICB9OworCisgICAgLy8gVE9ETyBkZXN0cm95OiByZW1vdmUgZXZlbnQgaGFuZGxlcnMsIGV4cGFuZGVyLCBpbmRlbnRlciwgZXRjLgorCisgICAgTm9kZS5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5leHBhbmRlZCgpKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorCisgICAgICB0aGlzLnJvdy5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYWRkQ2xhc3MoImV4cGFuZGVkIik7CisKKyAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIHRoaXMuc2V0dGluZ3Mub25Ob2RlRXhwYW5kICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk5vZGVFeHBhbmQuYXBwbHkodGhpcyk7CisgICAgICB9CisKKyAgICAgIGlmICgkKHRoaXMucm93KS5pcygiOnZpc2libGUiKSkgeworICAgICAgICB0aGlzLl9zaG93Q2hpbGRyZW4oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5leHBhbmRlci5hdHRyKCJ0aXRsZSIsIHRoaXMuc2V0dGluZ3Muc3RyaW5nQ29sbGFwc2UpOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuZXhwYW5kZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLnJvdy5oYXNDbGFzcygiZXhwYW5kZWQiKTsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5faGlkZUNoaWxkcmVuKCk7CisgICAgICB0aGlzLnJvdy5oaWRlKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuaXNCcmFuY2hOb2RlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgdGhpcy5yb3cuZGF0YSh0aGlzLnNldHRpbmdzLmJyYW5jaEF0dHIpID09PSB0cnVlKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MgPSBmdW5jdGlvbigpeworICAgICAgdGhpcy5yb3cucmVtb3ZlQ2xhc3MoJ2JyYW5jaCcpOworICAgICAgdGhpcy5yb3cucmVtb3ZlQ2xhc3MoJ2xlYWYnKTsKKyAgICAgIHRoaXMucm93LmFkZENsYXNzKHRoaXMuaXNCcmFuY2hOb2RlKCkgPyAnYnJhbmNoJyA6ICdsZWFmJyk7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmxldmVsID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5hbmNlc3RvcnMoKS5sZW5ndGg7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnBhcmVudE5vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudHJlZVt0aGlzLnBhcmVudElkXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICB2YXIgaSA9ICQuaW5BcnJheShjaGlsZCwgdGhpcy5jaGlsZHJlbik7CisgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zcGxpY2UoaSwgMSkKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgaGFuZGxlciwKKyAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MsCisgICAgICAgICAgdGFyZ2V0OworCisgICAgICBpZiAoc2V0dGluZ3MuZXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiB0aGlzLmlzQnJhbmNoTm9kZSgpKSB7CisgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCJ0YWJsZSIpLnRyZWV0YWJsZSgibm9kZSIsICQodGhpcykucGFyZW50cygidHIiKS5kYXRhKHNldHRpbmdzLm5vZGVJZEF0dHIpKS50b2dnbGUoKTsKKyAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuaW5kZW50ZXIuaHRtbCh0aGlzLmV4cGFuZGVyKTsKKyAgICAgICAgdGFyZ2V0ID0gc2V0dGluZ3MuY2xpY2thYmxlTm9kZU5hbWVzID09PSB0cnVlID8gdGhpcy50cmVlQ2VsbCA6IHRoaXMuZXhwYW5kZXI7CisKKyAgICAgICAgdGFyZ2V0Lm9mZigiY2xpY2sudHJlZXRhYmxlIikub24oImNsaWNrLnRyZWV0YWJsZSIsIGhhbmRsZXIpOworICAgICAgICB0YXJnZXQub2ZmKCJrZXlkb3duLnRyZWV0YWJsZSIpLm9uKCJrZXlkb3duLnRyZWV0YWJsZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIFtlXSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5pbmRlbnRlclswXS5zdHlsZS5wYWRkaW5nTGVmdCA9ICIiICsgKHRoaXMubGV2ZWwoKSAqIHNldHRpbmdzLmluZGVudCkgKyAicHgiOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUucmV2ZWFsID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5wYXJlbnRJZCAhPSBudWxsKSB7CisgICAgICAgIHRoaXMucGFyZW50Tm9kZSgpLnJldmVhbCgpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKCk7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIGlmICh0aGlzLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy50cmVlW3RoaXMucGFyZW50SWRdLnJlbW92ZUNoaWxkKHRoaXMpOworICAgICAgfQorICAgICAgdGhpcy5wYXJlbnRJZCA9IG5vZGUuaWQ7CisgICAgICB0aGlzLnJvdy5kYXRhKHRoaXMuc2V0dGluZ3MucGFyZW50SWRBdHRyLCBub2RlLmlkKTsKKyAgICAgIHJldHVybiBub2RlLmFkZENoaWxkKHRoaXMpOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpOworICAgICAgfQorICAgICAgdGhpcy5yb3cuc2hvdygpOworICAgICAgaWYgKHRoaXMuZXhwYW5kZWQoKSkgeworICAgICAgICB0aGlzLl9zaG93Q2hpbGRyZW4oKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLmV4cGFuZGVkKCkpIHsKKyAgICAgICAgdGhpcy5jb2xsYXBzZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5leHBhbmQoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5faGlkZUNoaWxkcmVuID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgY2hpbGQsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmNoaWxkcmVuOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBjaGlsZCA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKGNoaWxkLmhpZGUoKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLl9pbml0aWFsaXplID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzOworCisgICAgICB0aGlzLnJlbmRlcigpOworCisgICAgICBpZiAoc2V0dGluZ3MuZXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiBzZXR0aW5ncy5pbml0aWFsU3RhdGUgPT09ICJjb2xsYXBzZWQiKSB7CisgICAgICAgIHRoaXMuY29sbGFwc2UoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuZXhwYW5kKCk7CisgICAgICB9CisKKyAgICAgIGlmIChzZXR0aW5ncy5vbk5vZGVJbml0aWFsaXplZCAhPSBudWxsKSB7CisgICAgICAgIHNldHRpbmdzLm9uTm9kZUluaXRpYWxpemVkLmFwcGx5KHRoaXMpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLl9zaG93Q2hpbGRyZW4gPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBjaGlsZCwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMuY2hpbGRyZW47CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGNoaWxkID0gX3JlZltfaV07CisgICAgICAgIF9yZXN1bHRzLnB1c2goY2hpbGQuc2hvdygpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAgcmV0dXJuIE5vZGU7CisgIH0pKCk7CisKKyAgVHJlZSA9IChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBUcmVlKHRhYmxlLCBzZXR0aW5ncykgeworICAgICAgdGhpcy50YWJsZSA9IHRhYmxlOworICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOworICAgICAgdGhpcy50cmVlID0ge307CisKKyAgICAgIC8vIENhY2hlIHRoZSBub2RlcyBhbmQgcm9vdHMgaW4gc2ltcGxlIGFycmF5cyBmb3IgcXVpY2sgYWNjZXNzL2l0ZXJhdGlvbgorICAgICAgdGhpcy5ub2RlcyA9IFtdOworICAgICAgdGhpcy5yb290cyA9IFtdOworICAgIH0KKworICAgIFRyZWUucHJvdG90eXBlLmNvbGxhcHNlQWxsID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMubm9kZXM7CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIG5vZGUgPSBfcmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaChub2RlLmNvbGxhcHNlKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5leHBhbmRBbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBub2RlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5ub2RlczsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgbm9kZSA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUuZXhwYW5kKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5maW5kTGFzdE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgeworICAgICAgICByZXR1cm4gdGhpcy5maW5kTGFzdE5vZGUobm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBub2RlOworICAgICAgfQorICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5sb2FkUm93cyA9IGZ1bmN0aW9uKHJvd3MpIHsKKyAgICAgIHZhciBub2RlLCByb3csIGk7CisKKyAgICAgIGlmIChyb3dzICE9IG51bGwpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICByb3cgPSAkKHJvd3NbaV0pOworCisgICAgICAgICAgaWYgKHJvdy5kYXRhKHRoaXMuc2V0dGluZ3Mubm9kZUlkQXR0cikgIT0gbnVsbCkgeworICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKHJvdywgdGhpcy50cmVlLCB0aGlzLnNldHRpbmdzKTsKKyAgICAgICAgICAgIHRoaXMubm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgIHRoaXMudHJlZVtub2RlLmlkXSA9IG5vZGU7CisKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgdGhpcy50cmVlW25vZGUucGFyZW50SWRdLmFkZENoaWxkKG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgdGhpcy5yb290cy5wdXNoKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBub2RlID0gdGhpcy5ub2Rlc1tpXS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbihub2RlLCBkZXN0aW5hdGlvbikgeworICAgICAgLy8gQ29uZGl0aW9uczoKKyAgICAgIC8vIDE6ICtub2RlKyBzaG91bGQgbm90IGJlIGluc2VydGVkIGFzIGEgY2hpbGQgb2YgK25vZGUrIGl0c2VsZi4KKyAgICAgIC8vIDI6ICtkZXN0aW5hdGlvbisgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyArbm9kZSsncyBjdXJyZW50IHBhcmVudCAodGhpcworICAgICAgLy8gICAgcHJldmVudHMgK25vZGUrIGZyb20gYmVpbmcgbW92ZWQgdG8gdGhlIHNhbWUgbG9jYXRpb24gd2hlcmUgaXQgYWxyZWFkeQorICAgICAgLy8gICAgaXMpLgorICAgICAgLy8gMzogK25vZGUrIHNob3VsZCBub3QgYmUgaW5zZXJ0ZWQgaW4gYSBsb2NhdGlvbiBpbiBhIGJyYW5jaCBpZiB0aGlzIHdvdWxkCisgICAgICAvLyAgICByZXN1bHQgaW4gK25vZGUrIGJlaW5nIGFuIGFuY2VzdG9yIG9mIGl0c2VsZi4KKyAgICAgIHZhciBub2RlUGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgICBpZiAobm9kZSAhPT0gZGVzdGluYXRpb24gJiYgZGVzdGluYXRpb24uaWQgIT09IG5vZGUucGFyZW50SWQgJiYgJC5pbkFycmF5KG5vZGUsIGRlc3RpbmF0aW9uLmFuY2VzdG9ycygpKSA9PT0gLTEpIHsKKyAgICAgICAgbm9kZS5zZXRQYXJlbnQoZGVzdGluYXRpb24pOworICAgICAgICB0aGlzLl9tb3ZlUm93cyhub2RlLCBkZXN0aW5hdGlvbik7CisKKyAgICAgICAgLy8gUmUtcmVuZGVyIHBhcmVudE5vZGUgaWYgdGhpcyBpcyBpdHMgZmlyc3QgY2hpbGQgbm9kZSwgYW5kIHRoZXJlZm9yZQorICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdGhlIGV4cGFuZGVyIHlldC4KKyAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSgpLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSgpLnJlbmRlcigpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKG5vZGVQYXJlbnQpeworICAgICAgICBub2RlUGFyZW50LnVwZGF0ZUJyYW5jaExlYWZDbGFzcygpOworICAgICAgfQorICAgICAgaWYobm9kZS5wYXJlbnROb2RlKCkpeworICAgICAgICBub2RlLnBhcmVudE5vZGUoKS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKyAgICAgIH0KKyAgICAgIG5vZGUudXBkYXRlQnJhbmNoTGVhZkNsYXNzKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUucmVtb3ZlTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIC8vIFJlY3Vyc2l2ZWx5IHJlbW92ZSBhbGwgZGVzY2VuZGFudHMgb2YgK25vZGUrCisgICAgICB0aGlzLnVubG9hZEJyYW5jaChub2RlKTsKKworICAgICAgLy8gUmVtb3ZlIG5vZGUgZnJvbSBET00gKDx0cj4pCisgICAgICBub2RlLnJvdy5yZW1vdmUoKTsKKworICAgICAgLy8gQ2xlYW4gdXAgVHJlZSBvYmplY3QgKHNvIE5vZGUgb2JqZWN0cyBhcmUgR0MtZWQpCisgICAgICBkZWxldGUgdGhpcy50cmVlW25vZGUuaWRdOworICAgICAgdGhpcy5ub2Rlcy5zcGxpY2UoJC5pbkFycmF5KG5vZGUsIHRoaXMubm9kZXMpLCAxKTsKKyAgICB9CisKKyAgICBUcmVlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciByb290LCBfaSwgX2xlbiwgX3JlZjsKKyAgICAgIF9yZWYgPSB0aGlzLnJvb3RzOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIHJvb3QgPSBfcmVmW19pXTsKKworICAgICAgICAvLyBOYW1pbmcgaXMgY29uZnVzaW5nIChzaG93L3JlbmRlcikuIEkgZG8gbm90IGNhbGwgcmVuZGVyIG9uIG5vZGUgZnJvbQorICAgICAgICAvLyBoZXJlLgorICAgICAgICByb290LnNob3coKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5zb3J0QnJhbmNoID0gZnVuY3Rpb24obm9kZSwgc29ydEZ1bikgeworICAgICAgLy8gRmlyc3Qgc29ydCBpbnRlcm5hbCBhcnJheSBvZiBjaGlsZHJlbgorICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KHNvcnRGdW4pOworCisgICAgICAvLyBOZXh0IHJlbmRlciByb3dzIGluIGNvcnJlY3Qgb3JkZXIgb24gcGFnZQorICAgICAgdGhpcy5fc29ydENoaWxkUm93cyhub2RlKTsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLnVubG9hZEJyYW5jaCA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIHZhciBjaGlsZHJlbiwgaTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdGhpcy5yZW1vdmVOb2RlKG5vZGUuY2hpbGRyZW5baV0pOworICAgICAgfQorCisgICAgICAvLyBSZXNldCBub2RlJ3MgY29sbGVjdGlvbiBvZiBjaGlsZHJlbgorICAgICAgbm9kZS5jaGlsZHJlbiA9IFtdOworCisgICAgICBub2RlLnVwZGF0ZUJyYW5jaExlYWZDbGFzcygpOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUuX21vdmVSb3dzID0gZnVuY3Rpb24obm9kZSwgZGVzdGluYXRpb24pIHsKKyAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sIGk7CisKKyAgICAgIG5vZGUucm93Lmluc2VydEFmdGVyKGRlc3RpbmF0aW9uLnJvdyk7CisgICAgICBub2RlLnJlbmRlcigpOworCisgICAgICAvLyBMb29wIGJhY2t3YXJkcyB0aHJvdWdoIGNoaWxkcmVuIHRvIGhhdmUgdGhlbSBlbmQgdXAgb24gVUkgaW4gY29ycmVjdAorICAgICAgLy8gb3JkZXIgKHNlZSAjMTEyKQorICAgICAgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdGhpcy5fbW92ZVJvd3MoY2hpbGRyZW5baV0sIG5vZGUpOworICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsIF9tb3ZlUm93cyBjYXNlLCBtb3ZlIGNoaWxkcmVuIHRvIGl0c2VsZiB0byBmb3JjZSBzb3J0aW5nCisgICAgVHJlZS5wcm90b3R5cGUuX3NvcnRDaGlsZFJvd3MgPSBmdW5jdGlvbihwYXJlbnROb2RlKSB7CisgICAgICByZXR1cm4gdGhpcy5fbW92ZVJvd3MocGFyZW50Tm9kZSwgcGFyZW50Tm9kZSk7CisgICAgfTsKKworICAgIHJldHVybiBUcmVlOworICB9KSgpOworCisgIC8vIGpRdWVyeSBQbHVnaW4KKyAgbWV0aG9kcyA9IHsKKyAgICBpbml0OiBmdW5jdGlvbihvcHRpb25zLCBmb3JjZSkgeworICAgICAgdmFyIHNldHRpbmdzOworCisgICAgICBzZXR0aW5ncyA9ICQuZXh0ZW5kKHsKKyAgICAgICAgYnJhbmNoQXR0cjogInR0QnJhbmNoIiwKKyAgICAgICAgY2xpY2thYmxlTm9kZU5hbWVzOiBmYWxzZSwKKyAgICAgICAgY29sdW1uOiAwLAorICAgICAgICBjb2x1bW5FbFR5cGU6ICJ0ZCIsIC8vIGkuZS4gJ3RkJywgJ3RoJyBvciAndGQsdGgnCisgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLAorICAgICAgICBleHBhbmRlclRlbXBsYXRlOiAiPGEgaHJlZj0nIyc+Jm5ic3A7PC9hPiIsCisgICAgICAgIGluZGVudDogMTksCisgICAgICAgIGluZGVudGVyVGVtcGxhdGU6ICI8c3BhbiBjbGFzcz0naW5kZW50ZXInPjwvc3Bhbj4iLAorICAgICAgICBpbml0aWFsU3RhdGU6ICJjb2xsYXBzZWQiLAorICAgICAgICBub2RlSWRBdHRyOiAidHRJZCIsIC8vIG1hcHMgdG8gZGF0YS10dC1pZAorICAgICAgICBwYXJlbnRJZEF0dHI6ICJ0dFBhcmVudElkIiwgLy8gbWFwcyB0byBkYXRhLXR0LXBhcmVudC1pZAorICAgICAgICBzdHJpbmdFeHBhbmQ6ICJFeHBhbmQiLAorICAgICAgICBzdHJpbmdDb2xsYXBzZTogIkNvbGxhcHNlIiwKKworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgb25Jbml0aWFsaXplZDogbnVsbCwKKyAgICAgICAgb25Ob2RlQ29sbGFwc2U6IG51bGwsCisgICAgICAgIG9uTm9kZUV4cGFuZDogbnVsbCwKKyAgICAgICAgb25Ob2RlSW5pdGlhbGl6ZWQ6IG51bGwKKyAgICAgIH0sIG9wdGlvbnMpOworCisgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZWwgPSAkKHRoaXMpLCB0cmVlOworCisgICAgICAgIGlmIChmb3JjZSB8fCBlbC5kYXRhKCJ0cmVldGFibGUiKSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgdHJlZSA9IG5ldyBUcmVlKHRoaXMsIHNldHRpbmdzKTsKKyAgICAgICAgICB0cmVlLmxvYWRSb3dzKHRoaXMucm93cykucmVuZGVyKCk7CisKKyAgICAgICAgICBlbC5hZGRDbGFzcygidHJlZXRhYmxlIikuZGF0YSgidHJlZXRhYmxlIiwgdHJlZSk7CisKKyAgICAgICAgICBpZiAoc2V0dGluZ3Mub25Jbml0aWFsaXplZCAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXR0aW5ncy5vbkluaXRpYWxpemVkLmFwcGx5KHRyZWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbDsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAkKHRoaXMpLnJlbW92ZURhdGEoInRyZWV0YWJsZSIpLnJlbW92ZUNsYXNzKCJ0cmVldGFibGUiKTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBjb2xsYXBzZUFsbDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmNvbGxhcHNlQWxsKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgY29sbGFwc2VOb2RlOiBmdW5jdGlvbihpZCkgeworICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworCisgICAgICBpZiAobm9kZSkgeworICAgICAgICBub2RlLmNvbGxhcHNlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGV4cGFuZEFsbDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmV4cGFuZEFsbCgpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGV4cGFuZE5vZGU6IGZ1bmN0aW9uKGlkKSB7CisgICAgICB2YXIgbm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZVtpZF07CisKKyAgICAgIGlmIChub2RlKSB7CisgICAgICAgIGlmICghbm9kZS5pbml0aWFsaXplZCkgeworICAgICAgICAgIG5vZGUuX2luaXRpYWxpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vZGUuZXhwYW5kKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGxvYWRCcmFuY2g6IGZ1bmN0aW9uKG5vZGUsIHJvd3MpIHsKKyAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikuc2V0dGluZ3MsCisgICAgICAgICAgdHJlZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZTsKKworICAgICAgLy8gVE9ETyBTd2l0Y2ggdG8gJC5wYXJzZUhUTUwKKyAgICAgIHJvd3MgPSAkKHJvd3MpOworCisgICAgICBpZiAobm9kZSA9PSBudWxsKSB7IC8vIEluc2VydGluZyBuZXcgcm9vdCBub2RlcworICAgICAgICB0aGlzLmFwcGVuZChyb3dzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBsYXN0Tm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikuZmluZExhc3ROb2RlKG5vZGUpOworICAgICAgICByb3dzLmluc2VydEFmdGVyKGxhc3ROb2RlLnJvdyk7CisgICAgICB9CisKKyAgICAgIHRoaXMuZGF0YSgidHJlZXRhYmxlIikubG9hZFJvd3Mocm93cyk7CisKKyAgICAgIC8vIE1ha2Ugc3VyZSBub2RlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQKKyAgICAgIHJvd3MuZmlsdGVyKCJ0ciIpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHRyZWVbJCh0aGlzKS5kYXRhKHNldHRpbmdzLm5vZGVJZEF0dHIpXS5zaG93KCk7CisgICAgICB9KTsKKworICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAvLyBSZS1yZW5kZXIgcGFyZW50IHRvIGVuc3VyZSBleHBhbmRlciBpY29uIGlzIHNob3duICgjNzkpCisgICAgICAgIG5vZGUucmVuZGVyKCkuZXhwYW5kKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBtb3ZlOiBmdW5jdGlvbihub2RlSWQsIGRlc3RpbmF0aW9uSWQpIHsKKyAgICAgIHZhciBkZXN0aW5hdGlvbiwgbm9kZTsKKworICAgICAgbm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZVtub2RlSWRdOworICAgICAgZGVzdGluYXRpb24gPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbZGVzdGluYXRpb25JZF07CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLm1vdmUobm9kZSwgZGVzdGluYXRpb24pOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgbm9kZTogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHJldHVybiB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworICAgIH0sCisKKyAgICByZW1vdmVOb2RlOiBmdW5jdGlvbihpZCkgeworICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworCisgICAgICBpZiAobm9kZSkgeworICAgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnJlbW92ZU5vZGUobm9kZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHJldmVhbDogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHZhciBub2RlID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS50cmVlW2lkXTsKKworICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgbm9kZS5yZXZlYWwoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBub2RlICciICsgaWQgKyAiJyIpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgc29ydEJyYW5jaDogZnVuY3Rpb24obm9kZSwgY29sdW1uT3JGdW5jdGlvbikgeworICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5zZXR0aW5ncywKKyAgICAgICAgICBwcmVwVmFsdWUsCisgICAgICAgICAgc29ydEZ1bjsKKworICAgICAgY29sdW1uT3JGdW5jdGlvbiA9IGNvbHVtbk9yRnVuY3Rpb24gfHwgc2V0dGluZ3MuY29sdW1uOworICAgICAgc29ydEZ1biA9IGNvbHVtbk9yRnVuY3Rpb247CisKKyAgICAgIGlmICgkLmlzTnVtZXJpYyhjb2x1bW5PckZ1bmN0aW9uKSkgeworICAgICAgICBzb3J0RnVuID0gZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgIHZhciBleHRyYWN0VmFsdWUsIHZhbEEsIHZhbEI7CisKKyAgICAgICAgICBleHRyYWN0VmFsdWUgPSBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdmFsID0gbm9kZS5yb3cuZmluZCgidGQ6ZXEoIiArIGNvbHVtbk9yRnVuY3Rpb24gKyAiKSIpLnRleHQoKTsKKyAgICAgICAgICAgIC8vIElnbm9yZSB0cmFpbGluZy9sZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHVzZSB1cHBlcmNhc2UgdmFsdWVzIGZvcgorICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBvcmRlcmluZworICAgICAgICAgICAgcmV0dXJuICQudHJpbSh2YWwpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgdmFsQSA9IGV4dHJhY3RWYWx1ZShhKTsKKyAgICAgICAgICB2YWxCID0gZXh0cmFjdFZhbHVlKGIpOworCisgICAgICAgICAgaWYgKHZhbEEgPCB2YWxCKSByZXR1cm4gLTE7CisgICAgICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gMTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5zb3J0QnJhbmNoKG5vZGUsIHNvcnRGdW4pOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHVubG9hZEJyYW5jaDogZnVuY3Rpb24obm9kZSkgeworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS51bmxvYWRCcmFuY2gobm9kZSk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgIH07CisKKyAgJC5mbi50cmVldGFibGUgPSBmdW5jdGlvbihtZXRob2QpIHsKKyAgICBpZiAobWV0aG9kc1ttZXRob2RdKSB7CisgICAgICByZXR1cm4gbWV0aG9kc1ttZXRob2RdLmFwcGx5KHRoaXMsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOworICAgIH0gZWxzZSBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ29iamVjdCcgfHwgIW1ldGhvZCkgeworICAgICAgcmV0dXJuIG1ldGhvZHMuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gJC5lcnJvcigiTWV0aG9kICIgKyBtZXRob2QgKyAiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS50cmVldGFibGUiKTsKKyAgICB9CisgIH07CisKKyAgLy8gRXhwb3NlIGNsYXNzZXMgdG8gd29ybGQKKyAgdGhpcy5UcmVlVGFibGUgfHwgKHRoaXMuVHJlZVRhYmxlID0ge30pOworICB0aGlzLlRyZWVUYWJsZS5Ob2RlID0gTm9kZTsKKyAgdGhpcy5UcmVlVGFibGUuVHJlZSA9IFRyZWU7Cit9KS5jYWxsKHRoaXMpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyQnRuLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyQnRuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTA5ZjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyQnRuLmpzCkBAIC0wLDAgKzEsNzcgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gbGF5ZXJCdG5zSW5pdChjdHgpIHsKKworICAvKiBSZW1vdmUgYW55IGN1cnJlbnQgYmluZGluZ3MgdG8gYXZvaWQgZHVwbGljYXRlZCBiaW5kcyAqLworICAkKCIubGF5ZXJidG4iKS51bmJpbmQoJ2NsaWNrJyk7CisKKyAgJCgiLmxheWVyYnRuIikuY2xpY2soZnVuY3Rpb24gKCl7CisgICAgdmFyIGxheWVyT2JqID0gJCh0aGlzKS5kYXRhKCJsYXllciIpOworICAgIHZhciBhZGQgPSAoJCh0aGlzKS5kYXRhKCdkaXJlY3RpdmUnKSA9PT0gImFkZCIpOworICAgIHZhciB0aGlzQnRuID0gJCh0aGlzKTsKKworICAgIGxpYnRvYXN0ZXIuYWRkUm1MYXllcihsYXllck9iaiwgYWRkLCBmdW5jdGlvbiAobGF5ZXJEZXBzTGlzdCl7CisgICAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obGlidG9hc3Rlci5tYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnKGxheWVyT2JqLCBsYXllckRlcHNMaXN0LCBhZGQpKTsKKworICAgICAgLyogSW4tY2VsbCBub3RpZmljYXRpb24gKi8KKyAgICAgIHZhciBub3RpZmljYXRpb24gPSAkKCc8ZGl2IGlkPSJ0ZW1wLWlubGluZS1ub3RpZnkiIHN0eWxlPSJkaXNwbGF5OiBub25lOyBmb250LXNpemU6IDExcHg7IGxpbmUtaGVpZ2h0OiAxLjM7IiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+Jyk7CisgICAgICB0aGlzQnRuLnBhcmVudCgpLmFwcGVuZChub3RpZmljYXRpb24pOworCisgICAgICBpZiAoYWRkKXsKKyAgICAgICAgaWYgKGxheWVyRGVwc0xpc3QubGVuZ3RoID4gMCkKKyAgICAgICAgICBub3RpZmljYXRpb24udGV4dChTdHJpbmcobGF5ZXJEZXBzTGlzdC5sZW5ndGggKyAxKSArICIgbGF5ZXJzIGFkZGVkIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBub3RpZmljYXRpb24udGV4dCgiMSBsYXllciBhZGRlZCIpOworCisgICAgICAgIHZhciBsYXllckJ0bnNGYWRlT3V0ID0gJCgpOworICAgICAgICB2YXIgbGF5ZXJFeGlzdHNCdG5GYWRlSW4gPSAkKCk7CisKKyAgICAgICAgbGF5ZXJCdG5zRmFkZU91dCA9IGxheWVyQnRuc0ZhZGVPdXQuYWRkKCIubGF5ZXItYWRkLSIgKyBsYXllck9iai5pZCk7CisgICAgICAgIGxheWVyRXhpc3RzQnRuRmFkZUluID0gbGF5ZXJFeGlzdHNCdG5GYWRlSW4uYWRkKCIubGF5ZXItZXhpc3RzLSIgKyBsYXllck9iai5pZCk7CisKKyAgICAgICAgZm9yICh2YXIgaSBpbiBsYXllckRlcHNMaXN0KXsKKyAgICAgICAgICBsYXllckJ0bnNGYWRlT3V0ID0gbGF5ZXJCdG5zRmFkZU91dC5hZGQoIi5sYXllci1hZGQtIiArIGxheWVyRGVwc0xpc3RbaV0uaWQpOworICAgICAgICAgIGxheWVyRXhpc3RzQnRuRmFkZUluID0gbGF5ZXJFeGlzdHNCdG5GYWRlSW4uYWRkKCIubGF5ZXItZXhpc3RzLSIgKyBsYXllckRlcHNMaXN0W2ldLmlkKTsKKyAgICAgICAgfQorCisgICAgICAgIGxheWVyQnRuc0ZhZGVPdXQuZmFkZU91dCgpLnByb21pc2UoKS5kb25lKGZ1bmN0aW9uKCl7CisgICAgICAgICAgbm90aWZpY2F0aW9uLmZhZGVJbigpLmRlbGF5KDUwMCkuZmFkZU91dChmdW5jdGlvbigpeworICAgICAgICAgICAgLyogRmFkZSBpbiB0aGUgYnV0dG9ucyAqLworICAgICAgICAgICAgbGF5ZXJFeGlzdHNCdG5GYWRlSW4uZmFkZUluKCk7CisgICAgICAgICAgICBub3RpZmljYXRpb24ucmVtb3ZlKCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbm90aWZpY2F0aW9uLnRleHQoIjEgbGF5ZXIgZGVsZXRlZCIpOworICAgICAgICAvKiBEZWxldGluZyBhIGxheWVyIHdlIG9ubHkgaGFubGRlIHRoZSBvbmUgYnV0dG9uICovCisgICAgICAgIHRoaXNCdG4uZmFkZU91dChmdW5jdGlvbigpeworICAgICAgICAgIG5vdGlmaWNhdGlvbi5mYWRlSW4oKS5kZWxheSg1MDApLmZhZGVPdXQoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICQoIi5sYXllci1hZGQtIiArIGxheWVyT2JqLmlkKS5mYWRlSW4oKTsKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5yZW1vdmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICB9KTsKKyAgfSk7CisKKyAgJCgiLmJ1aWxkLXJlY2lwZS1idG4iKS51bmJpbmQoJ2NsaWNrJyk7CisgICQoIi5idWlsZC1yZWNpcGUtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIHZhciByZWNpcGUgPSAkKHRoaXMpLmRhdGEoJ3JlY2lwZS1uYW1lJyk7CisKKyAgICBsaWJ0b2FzdGVyLnN0YXJ0QUJ1aWxkKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RCdWlsZHNVcmwsCisgICAgICBsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0SWQsIHJlY2lwZSwKKyAgICAgIGZ1bmN0aW9uKCl7CisgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCk7CisgICAgICB9KTsKKyAgfSk7CisKKyAgLyogU2V0dXAgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGJ1dHRvbnMgKi8KKworICBmb3IgKHZhciBpIGluIGN0eC5wcm9qZWN0TGF5ZXJzKXsKKyAgICAgICQoIi5sYXllci1leGlzdHMtIiArIGN0eC5wcm9qZWN0TGF5ZXJzW2ldKS5zaG93KCk7CisgICAgICAkKCIubGF5ZXItYWRkLSIgKyBjdHgucHJvamVjdExheWVyc1tpXSkuaGlkZSgpOworICB9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJEZXBzTW9kYWwuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJEZXBzTW9kYWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1ZjlkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckRlcHNNb2RhbC5qcwpAQCAtMCwwICsxLDkwIEBACisvKgorICogbGF5ZXI6IE9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBhcmVudCBsYXllciB7IGlkOiAuLiBuYW1lOiAuLi4gdXJsIH0KKyAqIGRlcGVuZGVuY2llczogYXJyYXkgb2YgZGVwZW5kZW5jeSBsYXllciBvYmplY3RzIHsgaWQ6IC4uIG5hbWU6IC4ufQorICogdGl0bGU6IG9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aXRsZQorICogYm9keTogb3B0aW9uYWwgb3ZlcnJpZGUgZm9yIGJvZHkKKyAqIGFkZFRvUHJvamVjdDogV2hldGhlciB0byBhZGQgbGF5ZXJzIHRvIHByb2plY3Qgb24gYWNjZXB0CisgKiBzdWNjZXNzQWRkOiBmdW5jdGlvbiB0byBydW4gb24gc3VjY2VzcworICovCitmdW5jdGlvbiBzaG93TGF5ZXJEZXBzTW9kYWwobGF5ZXIsIGRlcGVuZGVuY2llcywgdGl0bGUsIGJvZHksIGFkZFRvUHJvamVjdCwgc3VjY2Vzc0FkZCkgeworCisgIGlmICgkKCIjZGVwZW5kZW5jaWVzLW1vZGFsIikubGVuZ3RoID09PSAwKSB7CisgICAgJC5nZXQobGlidG9hc3Rlci5jdHguaHRtbFVybCArICIvbGF5ZXJfZGVwc19tb2RhbC5odG1sIiwgZnVuY3Rpb24oaHRtbCl7CisgICAgICAkKCJib2R5IikuYXBwZW5kKGh0bWwpOworICAgICAgc2V0dXBNb2RhbCgpOworICAgIH0pOworICB9IGVsc2UgeworICAgIHNldHVwTW9kYWwoKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNldHVwTW9kYWwoKXsKKworICAgIGlmICh0aXRsZSkgeworICAgICAgJCgnI2RlcGVuZGVuY2llcy1tb2RhbCAjdGl0bGUnKS50ZXh0KHRpdGxlKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgnI2RlcGVuZGVuY2llcy1tb2RhbCAjdGl0bGUnKS50ZXh0KGxheWVyLm5hbWUpOworICAgIH0KKworICAgIGlmIChib2R5KSB7CisgICAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsICNib2R5LXRleHQiKS5odG1sKGJvZHkpOworICAgIH0gZWxzZSB7CisgICAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsICNsYXllci1uYW1lIikudGV4dChsYXllci5uYW1lKTsKKyAgICB9CisKKyAgICB2YXIgZGVwbGlzdEh0bWwgPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykgeworICAgICAgZGVwbGlzdEh0bWwgKz0gIjxsaT48bGFiZWwgY2xhc3M9XCJjaGVja2JveFwiPjxpbnB1dCBuYW1lPVwiZGVwZW5kZW5jaWVzXCIgdmFsdWU9XCIiOworICAgICAgZGVwbGlzdEh0bWwgKz0gZGVwZW5kZW5jaWVzW2ldLmlkOworICAgICAgZGVwbGlzdEh0bWwgKz0iXCIgdHlwZT1cImNoZWNrYm94XCIgY2hlY2tlZD1cImNoZWNrZWRcIi8+IjsKKyAgICAgIGRlcGxpc3RIdG1sICs9IGRlcGVuZGVuY2llc1tpXS5uYW1lOworICAgICAgZGVwbGlzdEh0bWwgKz0gIjwvbGFiZWw+PC9saT4iOworICAgIH0KKyAgICAkKCcjZGVwZW5kZW5jaWVzLWxpc3QnKS5odG1sKGRlcGxpc3RIdG1sKTsKKworICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwiKS5kYXRhKCJkZXBzIiwgZGVwZW5kZW5jaWVzKTsKKworICAgICQoJyNkZXBlbmRlbmNpZXMtbW9kYWwnKS5tb2RhbCgnc2hvdycpOworCisgICAgLyogRGlzY2FyZCB0aGUgb2xkIHN1Ym1pc3Npb24gZnVuY3Rpb24gKi8KKyAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0iKS51bmJpbmQoJ3N1Ym1pdCcpOworCisgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbC1mb3JtIikuc3VibWl0KGZ1bmN0aW9uIChlKSB7CisgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICB2YXIgc2VsZWN0ZWRMYXllcklkcyA9IFtdOworICAgICAgdmFyIHNlbGVjdGVkTGF5ZXJzID0gW107CisKKyAgICAgICQoImlucHV0W25hbWU9J2RlcGVuZGVuY2llcyddOmNoZWNrZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2VsZWN0ZWRMYXllcklkcy5wdXNoKHBhcnNlSW50KCQodGhpcykudmFsKCkpKTsKKyAgICAgIH0pOworCisgICAgICAvKiAtMSBpcyBhIHNwZWNpYWwgZHVtbXkgSWQgd2hpY2ggd2UgdXNlIHdoZW4gdGhlIGxheWVyIGlzbid0IHlldCBpbiB0aGUKKyAgICAgICAqIHN5c3RlbSwgbm9ybWFsbHkgd2Ugd291bGQgYWRkIHRoZSBjdXJyZW50IGxheWVyIHRvIHRoZSBzZWxlY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGlmIChsYXllci5pZCAhPSAtMSkKKyAgICAgICAgc2VsZWN0ZWRMYXllcklkcy5wdXNoKGxheWVyLmlkKTsKKworICAgICAgLyogRmluZCB0aGUgc2VsZWN0ZWQgbGF5ZXIgb2JqZWN0cyBmcm9tIG91ciBvcmlnaW5hbCBsaXN0ICovCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkTGF5ZXJJZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzW2pdLmlkID09IHNlbGVjdGVkTGF5ZXJJZHNbaV0pIHsKKyAgICAgICAgICAgIHNlbGVjdGVkTGF5ZXJzLnB1c2goZGVwZW5kZW5jaWVzW2pdKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGFkZFRvUHJvamVjdCkgeworICAgICAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdCh7ICdsYXllckFkZCc6IHNlbGVjdGVkTGF5ZXJJZHMuam9pbigiLCIpIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBpZiAoc3VjY2Vzc0FkZCkgeworICAgICAgICAgICAgc3VjY2Vzc0FkZChzZWxlY3RlZExheWVycyk7CisgICAgICAgICAgfQorICAgICAgICB9LCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJBZGRpbmcgbGF5ZXJzIHRvIHByb2plY3QgZmFpbGVkIik7CisgICAgICAgIH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3VjY2Vzc0FkZChzZWxlY3RlZExheWVycyk7CisgICAgICB9CisKKyAgICAgICQoJyNkZXBlbmRlbmNpZXMtbW9kYWwnKS5tb2RhbCgnaGlkZScpOworICAgIH0pOworICB9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJkZXRhaWxzLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyZGV0YWlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDBlODAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyZGV0YWlscy5qcwpAQCAtMCwwICsxLDM5MiBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBsYXllckRldGFpbHNQYWdlSW5pdCAoY3R4KSB7CisKKyAgdmFyIGxheWVyRGVwSW5wdXQgPSAkKCIjbGF5ZXItZGVwLWlucHV0Iik7CisgIHZhciBsYXllckRlcEJ0biA9ICQoIiNhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iKTsKKyAgdmFyIGxheWVyRGVwc0xpc3QgPSAkKCIjbGF5ZXItZGVwcy1saXN0Iik7CisgIHZhciBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb247CisgIHZhciBhZGRSbUxheWVyQnRuID0gJCgiI2FkZC1yZW1vdmUtbGF5ZXItYnRuIik7CisKKyAgLyogc2V0dXAgdGhlIGRlcGVuZGVuY2llcyB0eXBlYWhlYWQgKi8KKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyRGVwSW5wdXQsIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CisgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gaXRlbTsKKworICAgIGxheWVyRGVwQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisgICQoIi5icmVhZGNydW1iIGxpOmZpcnN0IGEiKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgLyogQnkgZGVmYXVsdCB0aGlzIGxpbmsgZ29lcyB0byB0aGUgcHJvamVjdCBjb25maWd1cmF0aW9uIHBhZ2UuIEhvd2V2ZXIKKyAgICAgKiBpZiB3ZSBoYXZlIHNvbWUgYnVpbGRzIHdlIGdvIHRoZXJlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgaHJlZgorICAgICAqLworICAgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsIGZ1bmN0aW9uKHByakluZm8peworICAgICAgaWYgKHByakluZm8uYnVpbGRzICYmIHByakluZm8uYnVpbGRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCk7CisgICAgICB9CisgICAgfSk7CisgIH0pOworCisgIGZ1bmN0aW9uIGFkZFJlbW92ZURlcChkZXBMYXllcklkLCBhZGQsIGRvbmVDYikgeworICAgIHZhciBkYXRhID0geyBsYXllcl92ZXJzaW9uX2lkIDogY3R4LmxheWVyVmVyc2lvbi5pZCB9OworICAgIGlmIChhZGQpCisgICAgICBkYXRhLmFkZF9kZXAgPSBkZXBMYXllcklkOworICAgIGVsc2UKKyAgICAgIGRhdGEucm1fZGVwID0gZGVwTGF5ZXJJZDsKKworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgdXJsOiBjdHgueGhyVXBkYXRlTGF5ZXJVcmwsCisgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS53YXJuKGRhdGEuZXJyb3IpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkb25lQ2IoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUud2FybigiQ2FsbCBmYWlsZWQiKTsKKyAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIGxheWVyRGVwUmVtb3ZlQ2xpY2soKSB7CisgICAgdmFyIHRvUmVtb3ZlID0gJCh0aGlzKS5wYXJlbnQoKS5kYXRhKCdsYXllci1pZCcpOworICAgIHZhciBsYXllckRlcEl0ZW0gPSAkKHRoaXMpOworCisgICAgYWRkUmVtb3ZlRGVwKHRvUmVtb3ZlLCBmYWxzZSwgZnVuY3Rpb24oKXsKKyAgICAgIGxheWVyRGVwSXRlbS5wYXJlbnQoKS5mYWRlT3V0KGZ1bmN0aW9uICgpeworICAgICAgICBsYXllckRlcEl0ZW0ucmVtb3ZlKCk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfQorCisgIC8qIEFkZCBkZXBlbmRlbmN5IGxheWVyIGJ1dHRvbiBjbGljayBoYW5kbGVyICovCisgIGxheWVyRGVwQnRuLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgaWYgKGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9PT0gdW5kZWZpbmVkKQorICAgICAgcmV0dXJuOworCisgICAgYWRkUmVtb3ZlRGVwKGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5pZCwgdHJ1ZSwgZnVuY3Rpb24oKXsKKyAgICAgIC8qIE1ha2UgYSBsaXN0IGl0ZW0gZm9yIHRoZSBuZXcgbGF5ZXIgZGVwZW5kZW5jeSAqLworICAgICAgdmFyIG5ld0xheWVyRGVwID0gJCgiPGxpPjxhPjwvYT48c3BhbiBjbGFzcz1cImljb24tdHJhc2hcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiB0aXRsZT1cIkRlbGV0ZVwiPjwvc3Bhbj48L2xpPiIpOworCisgICAgICBuZXdMYXllckRlcC5kYXRhKCdsYXllci1pZCcsIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5pZCk7CisgICAgICBuZXdMYXllckRlcC5jaGlsZHJlbigic3BhbiIpLnRvb2x0aXAoKTsKKworICAgICAgdmFyIGxpbmsgPSBuZXdMYXllckRlcC5jaGlsZHJlbigiYSIpOworICAgICAgbGluay5hdHRyKCJocmVmIiwgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmxheWVyZGV0YWlsdXJsKTsKKyAgICAgIGxpbmsudGV4dChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubmFtZSk7CisgICAgICBsaW5rLnRvb2x0aXAoe3RpdGxlOiBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24udG9vbHRpcCwgcGxhY2VtZW50OiAicmlnaHQifSk7CisKKyAgICAgIC8qIENvbm5lY3QgdXAgdGhlIHRhc2ggaWNvbiAqLworICAgICAgdmFyIHRyYXNoSXRlbSA9IG5ld0xheWVyRGVwLmNoaWxkcmVuKCJzcGFuIik7CisgICAgICB0cmFzaEl0ZW0uY2xpY2sobGF5ZXJEZXBSZW1vdmVDbGljayk7CisKKyAgICAgIGxheWVyRGVwc0xpc3QuYXBwZW5kKG5ld0xheWVyRGVwKTsKKyAgICAgIC8qIENsZWFyIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAqLworICAgICAgbGF5ZXJEZXBJbnB1dC52YWwoIiIpOworICAgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gdW5kZWZpbmVkOworICAgICAgbGF5ZXJEZXBCdG4uYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIH0pOworICB9KTsKKworICAkKCIuaWNvbi1wZW5jaWwiKS5jbGljayhmdW5jdGlvbiAoKXsKKyAgICB2YXIgbVBhcmVudCA9ICQodGhpcykucGFyZW50KCJkZCIpOworICAgIG1QYXJlbnQucHJldigpLmNzcygibWFyZ2luLXRvcCIsICIxMHB4Iik7CisgICAgbVBhcmVudC5jaGlsZHJlbigiZm9ybSIpLnNsaWRlRG93bigpOworICAgIHZhciBjdXJyZW50VmFsID0gbVBhcmVudC5jaGlsZHJlbigiLmN1cnJlbnQtdmFsdWUiKTsKKyAgICBjdXJyZW50VmFsLmhpZGUoKTsKKyAgICAvKiBTZXQgdGhlIGN1cnJlbnQgdmFsdWUgdG8gdGhlIGlucHV0IGZpZWxkICovCisgICAgbVBhcmVudC5maW5kKCJ0ZXh0YXJlYSxpbnB1dCIpLnZhbChjdXJyZW50VmFsLnRleHQoKSk7CisgICAgLyogSGlkZXMgdGhlICJOb3Qgc2V0IiB0ZXh0ICovCisgICAgbVBhcmVudC5jaGlsZHJlbigiLm11dGVkIikuaGlkZSgpOworICAgIC8qIFdlJ3JlIGVkaXRpbmcgc28gaGlkZSB0aGUgZGVsZXRlIGljb24gKi8KKyAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CisgICAgbVBhcmVudC5maW5kKCIuY2FuY2VsIikuc2hvdygpOworICAgICQodGhpcykuaGlkZSgpOworICB9KTsKKworICAkKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5jbGljayhmdW5jdGlvbigpeworICAgIHZhciBtUGFyZW50ID0gJCh0aGlzKS5wYXJlbnQoImRkIik7CisgICAgbVBhcmVudC5maW5kKCJpbnB1dCIpLnZhbCgiIik7CisgICAgbVBhcmVudC5maW5kKCJ0ZXh0YXJlYSIpLnZhbCgiIik7CisgICAgbVBhcmVudC5maW5kKCIuY2hhbmdlLWJ0biIpLmNsaWNrKCk7CisgIH0pOworCisgICQoIi5jYW5jZWwiKS5jbGljayhmdW5jdGlvbigpeworICAgIHZhciBtUGFyZW50ID0gJCh0aGlzKS5wYXJlbnRzKCJkZCIpOworICAgICQodGhpcykuaGlkZSgpOworICAgIG1QYXJlbnQuY2hpbGRyZW4oImZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCl7CisgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuY3VycmVudC12YWx1ZSIpLnNob3coKTsKKyAgICAgIC8qIFNob3cgdGhlICJOb3Qgc2V0IiB0ZXh0IGlmIHdlIGVuZGVkIHVwIHdpdGggbm8gdmFsdWUgKi8KKyAgICAgIGlmICghbVBhcmVudC5jaGlsZHJlbigiLmN1cnJlbnQtdmFsdWUiKS5odG1sKCkpeworICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIubXV0ZWQiKS5mYWRlSW4oKTsKKyAgICAgICAgbVBhcmVudC5jaGlsZHJlbigiLmRlbGV0ZS1jdXJyZW50LXZhbHVlIikuaGlkZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbVBhcmVudC5jaGlsZHJlbigiLmRlbGV0ZS1jdXJyZW50LXZhbHVlIikuc2hvdygpOworICAgICAgfQorCisgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuaWNvbi1wZW5jaWwiKS5zaG93KCk7CisgICAgICBtUGFyZW50LnByZXYoKS5jc3MoIm1hcmdpbi10b3AiLCAiMHB4Iik7CisgICAgfSk7CisgIH0pOworCisgIGZ1bmN0aW9uIGRlZmF1bHRBZGRCdG5UZXh0KCl7CisgICAgICB2YXIgdGV4dCA9ICIgQWRkIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIHRvIHlvdXIgcHJvamVjdCI7CisgICAgICBhZGRSbUxheWVyQnRuLnRleHQodGV4dCk7CisgICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiaWNvbi1wbHVzXCI+PC9zcGFuPiIpOworICAgICAgYWRkUm1MYXllckJ0bi5yZW1vdmVDbGFzcygiYnRuLWRhbmdlciIpOworICB9CisKKyAgJCgiI2RldGFpbHMtdGFiIikub24oJ3Nob3cnLCBmdW5jdGlvbigpeworICAgIGlmICghY3R4LmxheWVyVmVyc2lvbi5pbkN1cnJlbnRQcmopCisgICAgICBkZWZhdWx0QWRkQnRuVGV4dCgpOworCisgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAiZGV0YWlscyI7CisgIH0pOworCisgIGZ1bmN0aW9uIHRhcmdldHNUYWJTaG93KCl7CisgICAgaWYgKCFjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByail7CisgICAgICBpZiAoY3R4Lm51bVRhcmdldHMgPiAwKSB7CisgICAgICAgIHZhciB0ZXh0ID0gIiBBZGQgdGhlICIrY3R4LmxheWVyVmVyc2lvbi5uYW1lKyIgbGF5ZXIgdG8geW91ciBwcm9qZWN0ICIrCisgICAgICAgICAgInRvIGVuYWJsZSB0aGVzZSByZWNpcGVzIjsKKyAgICAgICAgYWRkUm1MYXllckJ0bi50ZXh0KHRleHQpOworICAgICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiaWNvbi1wbHVzXCI+PC9zcGFuPiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmYXVsdEFkZEJ0blRleHQoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICJyZWNpcGVzIjsKKyAgfQorCisgICQoIiNyZWNpcGVzdGFibGUiKS5vbigndGFibGUtZG9uZScsIGZ1bmN0aW9uKGUsIHRvdGFsLCB0YWJsZVBhcmFtcyl7CisgICAgY3R4Lm51bVRhcmdldHMgPSB0b3RhbDsKKworICAgIGlmICh0b3RhbCA9PT0gMCAmJiAhdGFibGVQYXJhbXMuc2VhcmNoKSB7CisgICAgICAkKCIjbm8tcmVjaXBlcy15ZXQiKS5zaG93KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICQoIiNuby1yZWNpcGVzLXlldCIpLmhpZGUoKTsKKyAgICB9CisKKyAgICAkKCIjdGFyZ2V0cy10YWIiKS5yZW1vdmVDbGFzcygibXV0ZWQiKTsKKyAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICIjcmVjaXBlcyIpeworICAgICAgLyogcmUgcnVuIHRoZSBtYWNoaW5lc1RhYlNob3cgdG8gdXBkYXRlIHRoZSB0ZXh0ICovCisgICAgICB0YXJnZXRzVGFiU2hvdygpOworICAgIH0KKyAgfSk7CisKKyAgJCgiI21hY2hpbmVzdGFibGUiKS5vbigndGFibGUtZG9uZScsIGZ1bmN0aW9uKGUsIHRvdGFsLCB0YWJsZVBhcmFtcyl7CisgICAgY3R4Lm51bU1hY2hpbmVzID0gdG90YWw7CisKKyAgICBpZiAodG90YWwgPT09IDAgJiYgIXRhYmxlUGFyYW1zLnNlYXJjaCkKKyAgICAgICQoIiNuby1tYWNoaW5lcy15ZXQiKS5zaG93KCk7CisgICAgZWxzZQorICAgICAgJCgiI25vLW1hY2hpbmVzLXlldCIpLmhpZGUoKTsKKworICAgICQoIiNtYWNoaW5lcy10YWIiKS5yZW1vdmVDbGFzcygibXV0ZWQiKTsKKyAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2ggPT09ICIjbWFjaGluZXMiKXsKKyAgICAgIC8qIHJlIHJ1biB0aGUgbWFjaGluZXNUYWJTaG93IHRvIHVwZGF0ZSB0aGUgdGV4dCAqLworICAgICAgbWFjaGluZXNUYWJTaG93KCk7CisgICAgfQorCisgICAgJCgiLnNlbGVjdC1tYWNoaW5lLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgICAgaWYgKCQodGhpcykuYXR0cigiZGlzYWJsZWQiKSA9PT0gImRpc2FibGVkIikKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0pOworCisgIH0pOworCisgICQoIiN0YXJnZXRzLXRhYiIpLm9uKCdzaG93JywgdGFyZ2V0c1RhYlNob3cpOworCisgIGZ1bmN0aW9uIG1hY2hpbmVzVGFiU2hvdygpeworICAgIGlmICghY3R4LmxheWVyVmVyc2lvbi5pbkN1cnJlbnRQcmopIHsKKyAgICAgIGlmIChjdHgubnVtTWFjaGluZXMgPiAwKXsKKyAgICAgICAgdmFyIHRleHQgPSAiIEFkZCB0aGUgIitjdHgubGF5ZXJWZXJzaW9uLm5hbWUrIiBsYXllciB0byB5b3VyIHByb2plY3QgIiArCisgICAgICAgICAgInRvIGVuYWJsZSB0aGVzZSBtYWNoaW5lcyI7CisgICAgICAgIGFkZFJtTGF5ZXJCdG4udGV4dCh0ZXh0KTsKKyAgICAgICAgYWRkUm1MYXllckJ0bi5wcmVwZW5kKCI8c3BhbiBjbGFzcz1cImljb24tcGx1c1wiPjwvc3Bhbj4iKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmF1bHRBZGRCdG5UZXh0KCk7CisgICAgICB9CisgICAgfQorCisgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAibWFjaGluZXMiOworICB9CisKKyAgJCgiI21hY2hpbmVzLXRhYiIpLm9uKCdzaG93JywgbWFjaGluZXNUYWJTaG93KTsKKworICAkKCIucGFnZXNpemUiKS5jaGFuZ2UoZnVuY3Rpb24oKXsKKyAgICB2YXIgc2VhcmNoID0gbGlidG9hc3Rlci5wYXJzZVVybFBhcmFtcygpOworICAgIHNlYXJjaC5saW1pdCA9IHRoaXMudmFsdWU7CisKKyAgICB3aW5kb3cubG9jYXRpb24uc2VhcmNoID0gbGlidG9hc3Rlci5kdW1wc1VybFBhcmFtcyhzZWFyY2gpOworICB9KTsKKworICAvKiBFbmFibGVzIHRoZSBCdWlsZCB0YXJnZXQgYW5kIFNlbGVjdCBNYWNoaW5lIGJ1dHRvbnMgYW5kIHN3aXRjaGVzIHRoZQorICAgKiBhZGQvcmVtb3ZlIGJ1dHRvbgorICAgKi8KKyAgZnVuY3Rpb24gc2V0TGF5ZXJJbkN1cnJlbnRQcmooYWRkZWQpIHsKKyAgICBjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByaiA9IGFkZGVkOworCisgICAgaWYgKGFkZGVkKXsKKyAgICAgIC8qIGVuYWJsZSBhbmQgc3dpdGNoIGFsbCB0aGUgYnV0dG9uIHN0YXRlcyAqLworICAgICAgJCgiLmJ1aWxkLXRhcmdldC1idG4iKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgJCgiLnNlbGVjdC1tYWNoaW5lLWJ0biIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICBhZGRSbUxheWVyQnRuLmFkZENsYXNzKCJidG4tZGFuZ2VyIik7CisgICAgICBhZGRSbUxheWVyQnRuLmRhdGEoJ2RpcmVjdGl2ZScsICJyZW1vdmUiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4udGV4dCgiIERlbGV0ZSB0aGUgIitjdHgubGF5ZXJWZXJzaW9uLm5hbWUrIiBsYXllciBmcm9tIHlvdXIgcHJvamVjdCIpOworICAgICAgYWRkUm1MYXllckJ0bi5wcmVwZW5kKCI8c3BhbiBjbGFzcz1cImljb24tdHJhc2hcIj48L3NwYW4+Iik7CisKKyAgICB9IGVsc2UgeworICAgICAgLyogZGlzYWJsZSBhbmQgc3dpdGNoIGFsbCB0aGUgYnV0dG9uIHN0YXRlcyAqLworICAgICAgJCgiLmJ1aWxkLXRhcmdldC1idG4iKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAkKCIuc2VsZWN0LW1hY2hpbmUtYnRuIikuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4ucmVtb3ZlQ2xhc3MoImJ0bi1kYW5nZXIiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4uZGF0YSgnZGlyZWN0aXZlJywgImFkZCIpOworCisgICAgICAvKiAic3BlY2lhbCIgaGFuZGxlciBzbyB0aGF0IHdlIGdldCB0aGUgY29ycmVjdCBidXR0b24gdGV4dCB3aGljaCBkZXBlbmRzCisgICAgICAgKiBvbiB3aGljaCB0YWIgaXMgY3VycmVudGx5IHZpc2libGUuIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3QganVzdCBjYWxsCisgICAgICAgKiB0YWIoJ3Nob3cnKSBhcyBpZiBpdCdzIGFscmVhZHkgdmlzaWJsZSBpdCBkb2Vzbid0IHJ1biB0aGUgZXZlbnQuCisgICAgICAgKi8KKyAgICAgIHN3aXRjaCAoJCgiLm5hdi1waWxscyAuYWN0aXZlIGEiKS5wcm9wKCdpZCcpKXsKKyAgICAgICAgY2FzZSAnbWFjaGluZXMtdGFiJzoKKyAgICAgICAgICBtYWNoaW5lc1RhYlNob3coKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndGFyZ2V0cy10YWInOgorICAgICAgICAgIHRhcmdldHNUYWJTaG93KCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgZGVmYXVsdEFkZEJ0blRleHQoKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAkKCIjZGlzbWlzcy1hbGVydCIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgJCh0aGlzKS5wYXJlbnQoKS5mYWRlT3V0KCk7CisgIH0pOworCisgIC8qIEFkZCBvciByZW1vdmUgdGhpcyBsYXllciBmcm9tIHRoZSBwcm9qZWN0ICovCisgIGFkZFJtTGF5ZXJCdG4uY2xpY2soZnVuY3Rpb24oKSB7CisKKyAgICB2YXIgYWRkID0gKCQodGhpcykuZGF0YSgnZGlyZWN0aXZlJykgPT09ICJhZGQiKTsKKworICAgIGxpYnRvYXN0ZXIuYWRkUm1MYXllcihjdHgubGF5ZXJWZXJzaW9uLCBhZGQsIGZ1bmN0aW9uIChsYXllcnNMaXN0KXsKKyAgICAgIHZhciBhbGVydE1zZyA9ICQoIiNhbGVydC1tc2ciKTsKKyAgICAgIGFsZXJ0TXNnLmh0bWwobGlidG9hc3Rlci5tYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnKGN0eC5sYXllclZlcnNpb24sIGxheWVyc0xpc3QsIGFkZCkpOworCisgICAgICBzZXRMYXllckluQ3VycmVudFByaihhZGQpOworCisgICAgICAkKCIjYWxlcnQtYXJlYSIpLnNob3coKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgLyogSGFuZGxlciBmb3IgYWxsIG9mIHRoZSBDaGFuZ2UgYnV0dG9ucyAqLworICAkKCIuY2hhbmdlLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIG1QYXJlbnQgPSAkKHRoaXMpLnBhcmVudCgpOworICAgIHZhciBwcm9wID0gJCh0aGlzKS5kYXRhKCdsYXllci1wcm9wJyk7CisKKyAgICAvKiBXZSBoYXZlIGlucHV0cywgc2VsZWN0IGFuZCB0ZXh0YXJlYXMgdG8gcG90ZW50aWFsbHkgZ3JhYiB0aGUgdmFsdWUKKyAgICAgKiBmcm9tLgorICAgICAqLworICAgIHZhciBlbnRyeUVsZW1lbnQgPSBtUGFyZW50LmZpbmQoImlucHV0Iik7CisgICAgaWYgKGVudHJ5RWxlbWVudC5sZW5ndGggPT09IDApCisgICAgICBlbnRyeUVsZW1lbnQgPSBtUGFyZW50LmZpbmQoInRleHRhcmVhIik7CisgICAgaWYgKGVudHJ5RWxlbWVudC5sZW5ndGggPT09IDApIHsKKyAgICAgIGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgZWxlbWVudCB0byBnZXQgZGF0YSBmcm9tIGZvciB0aGlzIGNoYW5nZSIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBkYXRhID0geyBsYXllcl92ZXJzaW9uX2lkOiBjdHgubGF5ZXJWZXJzaW9uLmlkIH07CisgICAgZGF0YVtwcm9wXSA9IGVudHJ5RWxlbWVudC52YWwoKTsKKworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgdXJsOiBjdHgueGhyVXBkYXRlTGF5ZXJVcmwsCisgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS53YXJuKGRhdGEuZXJyb3IpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBzdWNjZXNzIGxheWVyIHByb3BlcnR5IGNoYW5nZWQgKi8KKyAgICAgICAgICAgIHZhciBpbnB1dEFyZWEgPSBtUGFyZW50LnBhcmVudHMoImRkIik7CisgICAgICAgICAgICB2YXIgdGV4dDsKKworICAgICAgICAgICAgdGV4dCA9IGVudHJ5RWxlbWVudC52YWwoKTsKKworICAgICAgICAgICAgLyogSGlkZSB0aGUgIk5vdCBzZXQiIHRleHQgaWYgaXQncyB2aXNpYmxlICovCisgICAgICAgICAgICBpbnB1dEFyZWEuZmluZCgiLm11dGVkIikuaGlkZSgpOworICAgICAgICAgICAgaW5wdXRBcmVhLmZpbmQoIi5jdXJyZW50LXZhbHVlIikudGV4dCh0ZXh0KTsKKyAgICAgICAgICAgIC8qIFNhbWUgYmVoYXZpb3VyIGFzIGNhbmNlbCBpbiB0aGF0IHdlIGhpZGUgdGhlIGZvcm0vc2hvdyBjdXJyZW50CisgICAgICAgICAgICAgKiB2YWx1ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaW5wdXRBcmVhLmZpbmQoIi5jYW5jZWwiKS5jbGljaygpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9KTsKKworICAvKiBEaXNhYmxlIHRoZSBjaGFuZ2UgYnV0dG9uIHdoZW4gd2UgaGF2ZSBubyBkYXRhIGluIHRoZSBpbnB1dCAqLworICAkKCJkbCBpbnB1dCwgZGwgdGV4dGFyZWEiKS5vbigiaW5wdXQiLGZ1bmN0aW9uKCkgeworICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA9PT0gMCkKKyAgICAgICQodGhpcykucGFyZW50KCkuY2hpbGRyZW4oIi5jaGFuZ2UtYnRuIikuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICBlbHNlCisgICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCIuY2hhbmdlLWJ0biIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisgIC8qIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgZHQncyBkZCBoYXMgZGF0YSBpbiBpdCBvciBpZiB0aGUgY2hhbmdlIGRhdGEKKyAgICogZm9ybSBpcyB2aXNpYmxlLCBvdGhlcndpc2UgaGlkZSBpdAorICAgKi8KKyAgJCgiZGwiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24gKCl7CisgICAgaWYgKCQodGhpcykuaXMoImR0IikpIHsKKyAgICAgIHZhciBkZCA9ICQodGhpcykubmV4dCgiZGQiKTsKKyAgICAgIGlmICghZGQuY2hpbGRyZW4oImZvcm06dmlzaWJsZSIpfHwgIWRkLmZpbmQoIi5jdXJyZW50LXZhbHVlIikuaHRtbCgpKXsKKyAgICAgICAgaWYgKGN0eC5sYXllclZlcnNpb24uc291cmNlSWQgPT0gMyl7CisgICAgICAgIC8qIFRoZXJlJ3Mgbm8gY3VycmVudCB2YWx1ZSBhbmQgdGhlIGxheWVyIGlzIGVkaXRhYmxlCisgICAgICAgICAqIHNvIHNob3cgdGhlICJOb3Qgc2V0IiBhbmQgaGlkZSB0aGUgZGVsZXRlIGljb24KKyAgICAgICAgICovCisgICAgICAgIGRkLmZpbmQoIi5tdXRlZCIpLnNob3coKTsKKyAgICAgICAgZGQuZmluZCgiLmRlbGV0ZS1jdXJyZW50LXZhbHVlIikuaGlkZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIFdlJ3JlIG5vdCB2aWV3aW5nIGFuIGVkaXRhYmxlIGxheWVyIHNvIGhpZGUgdGhlIGVtcHR5IGRkL2RsIHBhaXIgKi8KKyAgICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICAgICAgICBkZC5oaWRlKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0pOworCisgIC8qIEhpZGUgdGhlIHJpZ2h0IGNvbHVtbiBpZiBpdCBjb250YWlucyBubyBpbmZvcm1hdGlvbiAqLworICBpZiAoJCgiZGwuaXRlbS1pbmZvIikuY2hpbGRyZW4oJzp2aXNpYmxlJykubGVuZ3RoID09PSAwKSB7CisgICAgJCgiZGwuaXRlbS1pbmZvIikucGFyZW50KCkuaGlkZSgpOworICB9CisKKyAgLyogQ2xlYXIgdGhlIGN1cnJlbnQgc2VhcmNoIHNlbGVjdGlvbiBhbmQgcmVsb2FkIHRoZSByZXN1bHRzICovCisgICQoIi50YXJnZXQtc2VhcmNoLWNsZWFyIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjdGFyZ2V0LXNlYXJjaCIpLnZhbCgiIik7CisgICAgJCh0aGlzKS5wYXJlbnRzKCJmb3JtIikuc3VibWl0KCk7CisgIH0pOworCisgICQoIi5tYWNoaW5lLXNlYXJjaC1jbGVhciIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgJCgiI21hY2hpbmUtc2VhcmNoIikudmFsKCIiKTsKKyAgICAkKHRoaXMpLnBhcmVudHMoImZvcm0iKS5zdWJtaXQoKTsKKyAgfSk7CisKKworICBsYXllckRlcHNMaXN0LmZpbmQoIi5pY29uLXRyYXNoIikuY2xpY2sobGF5ZXJEZXBSZW1vdmVDbGljayk7CisgIGxheWVyRGVwc0xpc3QuZmluZCgiYSIpLnRvb2x0aXAoKTsKKyAgJCgiLmljb24tdHJhc2giKS50b29sdGlwKCk7CisgICQoIi5jb21taXQiKS50b29sdGlwKCk7CisKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9saWJ0b2FzdGVyLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xpYnRvYXN0ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0ZjdhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9saWJ0b2FzdGVyLmpzCkBAIC0wLDAgKzEsNTc0IEBACisidXNlIHN0cmljdCI7CisvKiBBbGwgc2hhcmVkIGZ1bmN0aW9uYWxpdHkgdG8gZ28gaW4gbGlidG9hc3RlciBvYmplY3QuCisgKiBUaGlzIG9iamVjdCByZWFsbHkganVzdCBoZWxwcyByZWFkYWJpbGl0eSBzaW5jZSB3ZSBjYW4gdGhlbiBoYXZlCisgKiBhIHRyYWNlYWJsZSBuYW1lc3BhY2UuCisgKi8KK3ZhciBsaWJ0b2FzdGVyID0gKGZ1bmN0aW9uICgpeworCisgIC8qIG1ha2VUeXBlYWhlYWQgcGFyYW1ldGVycworICAgKiBlbGVtZW50U2VsZWN0b3I6IEpRdWVyeSBlbGVtZW50U2VsZWN0b3Igc3RyaW5nCisgICAqIHhoclVybDogdGhlIHVybCB0byBnZXQgdGhlIEpTT04gZnJvbSBleHBlY3RzIEpTT04gaW4gdGhlIGZvcm06CisgICAqICB7ICJsaXN0IjogWyB7ICJuYW1lIjogInRlc3QiLCAiZGV0YWlsIiA6ICJhIHRlc3QgdGhpbmciICB9LCAuLi4uIF0gfQorICAgKiB4aHJQYXJhbXM6IHRoZSBkYXRhL3BhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgZ2V0SlNPTiB1cmwgZS5nLgorICAgKiAgeyAndHlwZScgOiAncHJvamVjdHMnIH0gdGhlIHRleHQgdHlwZWQgd2lsbCBiZSBwYXNzZWQgYXMgJ3NlYXJjaCcuCisgICAqICBzZWxlY3RlZENCOiBmdW5jdGlvbiB0byBjYWxsIG9uY2UgYW4gaXRlbSBoYXMgYmVlbiBzZWxlY3RlZCBvbmUKKyAgICogIGFyZyBvZiB0aGUgaXRlbS4KKyAgICovCisgIGZ1bmN0aW9uIF9tYWtlVHlwZWFoZWFkIChqUUVsZW1lbnQsIHhoclVybCwgeGhyUGFyYW1zLCBzZWxlY3RlZENCKSB7CisgICAgaWYgKCF4aHJVcmwgfHwgeGhyVXJsLmxlbmd0aCA9PT0gMCkKKyAgICAgIHRocm93KCJObyB1cmwgdG8gdHlwZWFoZWFkIHN1cHBsaWVkIik7CisKKyAgICB2YXIgeGhyUmVxOworCisgICAgalFFbGVtZW50LnR5cGVhaGVhZCh7CisgICAgICAgIHNvdXJjZTogZnVuY3Rpb24ocXVlcnksIHByb2Nlc3MpeworICAgICAgICAgIHhoclBhcmFtcy5zZWFyY2ggPSBxdWVyeTsKKworICAgICAgICAgIC8qIElmIHdlIGhhdmUgYSByZXF1ZXN0IGluIHByb2dyZXNzIGRvbid0IGZpcmUgb2ZmIGFub3RoZXIgb25lKi8KKyAgICAgICAgICBpZiAoeGhyUmVxKQorICAgICAgICAgICAgeGhyUmVxLmFib3J0KCk7CisKKyAgICAgICAgICB4aHJSZXEgPSAkLmdldEpTT04oeGhyVXJsLCB0aGlzLm9wdGlvbnMueGhyUGFyYW1zLCBmdW5jdGlvbihkYXRhKXsKKyAgICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9PSAib2siKSB7CisgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJFcnJvciBnZXR0aW5nIGRhdGEgZnJvbSBzZXJ2ZXIgIitkYXRhLmVycm9yKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB4aHJSZXEgPSBudWxsOworCisgICAgICAgICAgICByZXR1cm4gcHJvY2VzcyhkYXRhLnJlc3VsdHMpOworICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICB1cGRhdGVyOiBmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgdmFyIGl0ZW1PYmogPSB0aGlzLiRtZW51LmZpbmQoJy5hY3RpdmUnKS5kYXRhKCdpdGVtT2JqZWN0Jyk7CisgICAgICAgICAgc2VsZWN0ZWRDQihpdGVtT2JqKTsKKyAgICAgICAgICByZXR1cm4gaXRlbTsKKyAgICAgICAgfSwKKyAgICAgICAgbWF0Y2hlcjogZnVuY3Rpb24oaXRlbSkgeworICAgICAgICAgIGlmICghaXRlbS5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiTmFtZSBwcm9wZXJ0eSBtaXNzaW5nIGluIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh0aGlzLiRlbGVtZW50LnZhbCgpLmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0sCisgICAgICAgIGhpZ2hsaWdodGVyOiBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgIC8qIFVzZSBqcXVlcnkgdG8gZXNjYXBlIHRoZSBpdGVtIG5hbWUgYW5kIGRldGFpbCAqLworICAgICAgICAgIHZhciBjdXJyZW50ID0gJCgiPHNwYW4+PC9zcGFuPiIpLnRleHQoaXRlbS5uYW1lICsgJyAnK2l0ZW0uZGV0YWlsKTsKKyAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5odG1sKCk7CisKKyAgICAgICAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csICdcXCQmJykKKyAgICAgICAgICByZXR1cm4gY3VycmVudC5yZXBsYWNlKG5ldyBSZWdFeHAoJygnICsgcXVlcnkgKyAnKScsICdpZycpLCBmdW5jdGlvbiAoJDEsIG1hdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gJzxzdHJvbmc+JyArIG1hdGNoICsgJzwvc3Ryb25nPicKKyAgICAgICAgICB9KQorICAgICAgICB9LAorICAgICAgICBzb3J0ZXI6IGZ1bmN0aW9uIChpdGVtcykgeyByZXR1cm4gaXRlbXM7IH0sCisgICAgICAgIHhoclVybDogeGhyVXJsLAorICAgICAgICB4aHJQYXJhbXM6IHhoclBhcmFtcywKKyAgICAgICAgeGhyUmVxOiB4aHJSZXEsCisgICAgfSk7CisKKworICAgIC8qIENvcHkgb2YgYm9vdHN0cmFwJ3MgcmVuZGVyIGZ1bmMgYnV0IHNldHMgc2VsZWN0ZWRPYmplY3QgdmFsdWUgKi8KKyAgICBmdW5jdGlvbiBjdXN0b21SZW5kZXJGdW5jIChpdGVtcykgeworICAgICAgdmFyIHRoYXQgPSB0aGlzOworCisgICAgICBpdGVtcyA9ICQoaXRlbXMpLm1hcChmdW5jdGlvbiAoaSwgaXRlbSkgeworICAgICAgICBpID0gJCh0aGF0Lm9wdGlvbnMuaXRlbSkuYXR0cignZGF0YS12YWx1ZScsIGl0ZW0ubmFtZSkuZGF0YSgnaXRlbU9iamVjdCcsIGl0ZW0pOworICAgICAgICBpLmZpbmQoJ2EnKS5odG1sKHRoYXQuaGlnaGxpZ2h0ZXIoaXRlbSkpOworICAgICAgICByZXR1cm4gaVswXTsKKyAgICAgIH0pOworCisgICAgICBpdGVtcy5maXJzdCgpLmFkZENsYXNzKCdhY3RpdmUnKTsKKyAgICAgIHRoaXMuJG1lbnUuaHRtbChpdGVtcyk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBqUUVsZW1lbnQuZGF0YSgndHlwZWFoZWFkJykucmVuZGVyID0gY3VzdG9tUmVuZGVyRnVuYzsKKyAgfQorCisgIC8qCisgICAqIHVybCAtIHRoZSB1cmwgb2YgdGhlIHhociBidWlsZCAqLworICBmdW5jdGlvbiBfc3RhcnRBQnVpbGQgKHVybCwgcHJvamVjdF9pZCwgdGFyZ2V0cywgb25zdWNjZXNzLCBvbmZhaWwpIHsKKworICAgIHZhciBkYXRhID0geworICAgICAgcHJvamVjdF9pZCA6IHByb2plY3RfaWQsCisgICAgICB0YXJnZXRzIDogdGFyZ2V0cywKKyAgICB9CisKKyAgICAkLmFqYXgoIHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgLyogTm8gcHJvcGVyIHJlcG9uc2UgWU9DVE8gIzc5OTUKKyAgICAgICAgICBpZiAoX2RhdGEuZXJyb3IgIT09ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihfZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsgKi8KKyAgICAgICAgICAgIGlmIChvbnN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgb25zdWNjZXNzKF9kYXRhKTsKKyAgICAgICAgLy8gIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUud2FybigiQ2FsbCBmYWlsZWQiKTsKKyAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEpOworICAgICAgICAgIGlmIChvbmZhaWwpIG9uZmFpbChkYXRhKTsKKyAgICB9IH0pOworICB9CisKKyAgLyogY2FuY2VsQUJ1aWxkOgorICAgKiB1cmw6IHByb2plY3RidWlsZHMKKyAgICogYnVpbGRzX2lkczogc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnVpbGQgcmVxdWVzdCBpZHMKKyAgICogb25zdWNjZXNzOiBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBleGVjdXRpb24KKyAgICogb25mYWlsOiBjYWxsYmFjayBmb3IgZmFpbGVkIGV4ZWN1dGlvbgorICAgKi8KKyAgZnVuY3Rpb24gX2NhbmNlbEFCdWlsZCh1cmwsIGJ1aWxkX2lkcywgb25zdWNjZXNzLCBvbmZhaWwpeworICAgICQuYWpheCggeworICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgIHVybDogdXJsLAorICAgICAgICBkYXRhOiB7ICdidWlsZENhbmNlbCc6IGJ1aWxkX2lkcyB9LAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoX2RhdGEpIHsKKyAgICAgICAgICBpZiAoX2RhdGEuZXJyb3IgIT09ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybihfZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChvbnN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkgb25zdWNjZXNzKF9kYXRhKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoX2RhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhKTsKKyAgICAgICAgICBpZiAob25mYWlsKSBvbmZhaWwoX2RhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0KKworICAvKiBHZXQgYSBwcm9qZWN0J3MgY29uZmlndXJhdGlvbiBpbmZvICovCisgIGZ1bmN0aW9uIF9nZXRQcm9qZWN0SW5mbyh1cmwsIG9uc3VjY2Vzcywgb25mYWlsKXsKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgZGF0YSA6IHsgZm9ybWF0OiAianNvbiIgfSwKKyAgICAgICAgdXJsOiB1cmwsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIGlmIChfZGF0YS5lcnJvciAhPT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9uc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBvbnN1Y2Nlc3MoX2RhdGEpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUud2FybihfZGF0YSk7CisgICAgICAgICAgaWYgKG9uZmFpbCkgb25mYWlsKF9kYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKyAgLyogUHJvcGVydGllcyBmb3IgZGF0YSBjYW4gYmU6CisgICAqIGxheWVyRGVsIChjc3YpCisgICAqIGxheWVyQWRkIChjc3YpCisgICAqIHByb2plY3ROYW1lCisgICAqIHByb2plY3RWZXJzaW9uCisgICAqIG1hY2hpbmVOYW1lCisgICAqLworICBmdW5jdGlvbiBfZWRpdEN1cnJlbnRQcm9qZWN0KGRhdGEsIG9uU3VjY2Vzcywgb25GYWlsKXsKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgIHVybDogbGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwgKyAiP2Zvcm1hdD1qc29uIiwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLmVycm9yKTsKKyAgICAgICAgICAgIGlmIChvbkZhaWwgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgb25GYWlsKGRhdGEpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob25TdWNjZXNzICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgIG9uU3VjY2VzcyhkYXRhKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUubG9nKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiBfZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdCh1cmwsIG9uU3VjY2Vzcywgb25GYWlsKXsKKyAgICAvKiBDaGVjayBmb3IgZGVwZW5kZW5jaWVzIG5vdCBpbiB0aGUgY3VycmVudCBwcm9qZWN0ICovCisgICAgJC5nZXRKU09OKHVybCwKKyAgICAgIHsgZm9ybWF0OiAnanNvbicgfSwKKyAgICAgIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT0gIm9rIikgeworICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEuZXJyb3IpOworICAgICAgICAgIGlmIChvbkZhaWwgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIG9uRmFpbChkYXRhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIgZGVwcyA9IHt9OworICAgICAgICAgIC8qIEZpbHRlciBvdXQgbGF5ZXIgZGVwIGlkcyB3aGljaCBhcmUgaW4gdGhlCisgICAgICAgICAgICogcHJvamVjdCBhbHJlYWR5LgorICAgICAgICAgICAqLworICAgICAgICAgIGRlcHMubGlzdCA9IGRhdGEubGF5ZXJkZXBzLmxpc3QuZmlsdGVyKGZ1bmN0aW9uKGxheWVyT2JqKXsKKyAgICAgICAgICAgIHJldHVybiAoZGF0YS5wcm9qZWN0bGF5ZXJzLmxhc3RJbmRleE9mKGxheWVyT2JqLmlkKSA8IDApOworICAgICAgICAgIH0pOworCisgICAgICAgICAgb25TdWNjZXNzKGRlcHMpOworICAgICAgICB9CisgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgY29uc29sZS5sb2coIkU6IEZhaWxlZCB0byBtYWtlIHJlcXVlc3QiKTsKKyAgICB9KTsKKyAgfQorCisgIC8qIHBhcnNlcyB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBjdXJyZW50IHdpbmRvdy5sb2NhdGlvbiB0byBhbiBvYmplY3QgKi8KKyAgZnVuY3Rpb24gX3BhcnNlVXJsUGFyYW1zKCkgeworICAgIHZhciBzdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoMSk7CisgICAgdmFyIHN0cmluZ0FycmF5ID0gc3RyaW5nLnNwbGl0ICgiJiIpOworICAgIHZhciBvYmogPSB7fTsKKworICAgIGZvciAodmFyIGkgaW4gc3RyaW5nQXJyYXkpIHsKKyAgICAgIHZhciBrZXlWYWwgPSBzdHJpbmdBcnJheVtpXS5zcGxpdCAoIj0iKTsKKyAgICAgIG9ialtrZXlWYWxbMF1dID0ga2V5VmFsWzFdOworICAgIH0KKworICAgIHJldHVybiBvYmo7CisgIH0KKworICAvKiB0YWtlcyBhIGZsYXQgb2JqZWN0IGFuZCBvdXRwdXRzIGl0IGFzIGEgcXVlcnkgc3RyaW5nCisgICAqIGUuZy4gdGhlIG91dHB1dCBvZiBkdW1wc1VybFBhcmFtcworICAgKi8KKyAgZnVuY3Rpb24gX2R1bXBzVXJsUGFyYW1zKG9iaikgeworICAgIHZhciBzdHIgPSAiPyI7CisKKyAgICBmb3IgKHZhciBrZXkgaW4gb2JqKXsKKyAgICAgIGlmICghb2JqW2tleV0pCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBzdHIgKz0ga2V5KyAiPSIrb2JqW2tleV0udG9TdHJpbmcoKTsKKyAgICAgIHN0ciArPSAiJiI7CisgICAgfQorCisgICAgLyogTWFpbnRhaW4gdGhlIGN1cnJlbnQgaGFzaCAqLworICAgIHN0ciArPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKworICAgIHJldHVybiBzdHI7CisgIH0KKworICBmdW5jdGlvbiBfYWRkUm1MYXllcihsYXllck9iaiwgYWRkLCBkb25lQ2IpeworICAgIGlmIChhZGQgPT09IHRydWUpIHsKKyAgICAgIC8qIElmIGFkZGluZyBnZXQgdGhlIGRlcHMgZm9yIHRoaXMgbGF5ZXIgKi8KKyAgICAgIGxpYnRvYXN0ZXIuZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdChsYXllck9iai5sYXllcmRldGFpbHVybCwKKyAgICAgICAgZnVuY3Rpb24gKGxheWVycykgeworCisgICAgICAgIC8qIGdvdCByZXN1bHQgZm9yIGRlcGVuZGVuY2llcyAqLworICAgICAgICBpZiAobGF5ZXJzLmxpc3QubGVuZ3RoID09PSAwKXsKKyAgICAgICAgICB2YXIgZWRpdERhdGEgPSB7IGxheWVyQWRkIDogbGF5ZXJPYmouaWQgfTsKKyAgICAgICAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdChlZGl0RGF0YSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkb25lQ2IoW10pOworICAgICAgICAgIH0pOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc2hvd0xheWVyRGVwc01vZGFsKGxheWVyT2JqLCBsYXllcnMubGlzdCwgbnVsbCwgbnVsbCwgIHRydWUsIGRvbmVDYik7CisgICAgICAgICAgfSAgY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICQuZ2V0U2NyaXB0KGxpYnRvYXN0ZXIuY3R4LmpzVXJsICsgImxheWVyRGVwc01vZGFsLmpzIiwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgc2hvd0xheWVyRGVwc01vZGFsKGxheWVyT2JqLCBsYXllcnMubGlzdCwgbnVsbCwgbnVsbCwgIHRydWUsIGRvbmVDYik7CisgICAgICAgICAgICB9LCBmdW5jdGlvbigpeworICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBsb2FkIGxheWVyRGVwc01vZGFsIik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sIG51bGwpOworICAgIH0gZWxzZSBpZiAoYWRkID09PSBmYWxzZSkgeworICAgICAgdmFyIGVkaXREYXRhID0geyBsYXllckRlbCA6IGxheWVyT2JqLmlkIH07CisKKyAgICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KGVkaXREYXRhLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGRvbmVDYihbXSk7CisgICAgICB9LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnNvbGUud2FybiAoIlJlbW92aW5nIGxheWVyIGZyb20gcHJvamVjdCBmYWlsZWQiKTsKKyAgICAgICAgZG9uZUNiKG51bGwpOworICAgICAgfSk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gX21ha2VMYXllckFkZFJtQWxlcnRNc2cobGF5ZXIsIGxheWVyRGVwc0xpc3QsIGFkZCkgeworICAgIHZhciBhbGVydE1zZzsKKworICAgIGlmIChsYXllckRlcHNMaXN0Lmxlbmd0aCA+IDAgJiYgYWRkID09PSB0cnVlKSB7CisgICAgICBhbGVydE1zZyA9ICQoIjxzcGFuPllvdSBoYXZlIGFkZGVkIDxzdHJvbmc+IisobGF5ZXJEZXBzTGlzdC5sZW5ndGgrMSkrIjwvc3Ryb25nPiBsYXllcnMgdG8geW91ciBwcm9qZWN0OiA8YSBpZD1cImxheWVyLWFmZmVjdGVkLW5hbWVcIj48L2E+IGFuZCBpdHMgZGVwZW5kZW5jaWVzIDwvc3Bhbj4iKTsKKworICAgICAgLyogQnVpbGQgdGhlIGxheWVyIGRlcHMgbGlzdCAqLworICAgICAgbGF5ZXJEZXBzTGlzdC5tYXAoZnVuY3Rpb24obGF5ZXIsIGkpeworICAgICAgICB2YXIgbGluayA9ICQoIjxhPjwvYT4iKTsKKworICAgICAgICBsaW5rLmF0dHIoImhyZWYiLCBsYXllci5sYXllcmRldGFpbHVybCk7CisgICAgICAgIGxpbmsudGV4dChsYXllci5uYW1lKTsKKyAgICAgICAgbGluay50b29sdGlwKHt0aXRsZTogbGF5ZXIudG9vbHRpcH0pOworCisgICAgICAgIGlmIChpICE9PSAwKQorICAgICAgICAgIGFsZXJ0TXNnLmFwcGVuZCgiLCAiKTsKKworICAgICAgICBhbGVydE1zZy5hcHBlbmQobGluayk7CisgICAgICB9KTsKKyAgICB9IGVsc2UgaWYgKGxheWVyRGVwc0xpc3QubGVuZ3RoID09PSAwICYmIGFkZCA9PT0gdHJ1ZSkgeworICAgICAgYWxlcnRNc2cgPSAkKCI8c3Bhbj5Zb3UgaGF2ZSBhZGRlZCA8c3Ryb25nPjE8L3N0cm9uZz4gbGF5ZXIgdG8geW91ciBwcm9qZWN0OiA8YSBpZD1cImxheWVyLWFmZmVjdGVkLW5hbWVcIj48L2E+PC9zcGFuPjwvc3Bhbj4iKTsKKyAgICB9IGVsc2UgaWYgKGFkZCA9PT0gZmFsc2UpIHsKKyAgICAgIGFsZXJ0TXNnID0gJCgiPHNwYW4+WW91IGhhdmUgZGVsZXRlZCA8c3Ryb25nPjE8L3N0cm9uZz4gbGF5ZXIgZnJvbSB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT48L3NwYW4+Iik7CisgICAgfQorCisgICAgYWxlcnRNc2cuY2hpbGRyZW4oIiNsYXllci1hZmZlY3RlZC1uYW1lIikudGV4dChsYXllci5uYW1lKTsKKyAgICBhbGVydE1zZy5jaGlsZHJlbigiI2xheWVyLWFmZmVjdGVkLW5hbWUiKS5hdHRyKCJocmVmIiwgbGF5ZXIubGF5ZXJkZXRhaWx1cmwpOworCisgICAgcmV0dXJuIGFsZXJ0TXNnLmh0bWwoKTsKKyAgfQorCisgIGZ1bmN0aW9uIF9zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpeworICAgIHZhciBhbGVydE1zZyA9ICQoIiNjaGFuZ2Utbm90aWZpY2F0aW9uLW1zZyIpOworCisgICAgYWxlcnRNc2cuaHRtbChtZXNzYWdlKTsKKyAgICAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbiwgI2NoYW5nZS1ub3RpZmljYXRpb24gKiIpLmZhZGVJbigpOworICB9CisKKworICByZXR1cm4geworICAgIHJlbG9hZF9wYXJhbXMgOiByZWxvYWRfcGFyYW1zLAorICAgIHN0YXJ0QUJ1aWxkIDogX3N0YXJ0QUJ1aWxkLAorICAgIGNhbmNlbEFCdWlsZCA6IF9jYW5jZWxBQnVpbGQsCisgICAgbWFrZVR5cGVhaGVhZCA6IF9tYWtlVHlwZWFoZWFkLAorICAgIGdldFByb2plY3RJbmZvOiBfZ2V0UHJvamVjdEluZm8sCisgICAgZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdCA6IF9nZXRMYXllckRlcHNGb3JQcm9qZWN0LAorICAgIGVkaXRDdXJyZW50UHJvamVjdCA6IF9lZGl0Q3VycmVudFByb2plY3QsCisgICAgZGVidWc6IGZhbHNlLAorICAgIHBhcnNlVXJsUGFyYW1zIDogX3BhcnNlVXJsUGFyYW1zLAorICAgIGR1bXBzVXJsUGFyYW1zIDogX2R1bXBzVXJsUGFyYW1zLAorICAgIGFkZFJtTGF5ZXIgOiBfYWRkUm1MYXllciwKKyAgICBtYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnIDogX21ha2VMYXllckFkZFJtQWxlcnRNc2csCisgICAgc2hvd0NoYW5nZU5vdGlmaWNhdGlvbiA6IF9zaG93Q2hhbmdlTm90aWZpY2F0aW9uLAorICB9OworfSkoKTsKKworLyoga2VlcCB0aGlzIGluIHRoZSBnbG9iYWwgc2NvcGUgZm9yIGNvbXBhdGFiaWxpdHkgKi8KK2Z1bmN0aW9uIHJlbG9hZF9wYXJhbXMocGFyYW1zKSB7CisgICAgdmFyIHVyaSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOworICAgIHZhciBzcGxpdGxpc3QgPSB1cmkuc3BsaXQoIj8iKTsKKyAgICB2YXIgdXJsID0gc3BsaXRsaXN0WzBdOworICAgIHZhciBwYXJhbWV0ZXJzID0gc3BsaXRsaXN0WzFdOworICAgIC8vIGRlc2VyaWFsaXplIHRoZSBjYWxsIHBhcmFtZXRlcnMKKyAgICB2YXIgY3BhcmFtcyA9IFtdOworICAgIGlmKHBhcmFtZXRlcnMpCisgICAgICBjcGFyYW1zID0gcGFyYW1ldGVycy5zcGxpdCgiJiIpOworCisgICAgdmFyIG5wYXJhbXMgPSB7fTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNwYXJhbXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHRlbXAgPSBjcGFyYW1zW2ldLnNwbGl0KCI9Iik7CisgICAgICAgIG5wYXJhbXNbdGVtcFswXV0gPSB0ZW1wWzFdOworICAgIH0KKyAgICAvLyB1cGRhdGUgcGFyYW1ldGVyIHZhbHVlcworICAgIGZvciAoaSBpbiBwYXJhbXMpIHsKKyAgICAgICAgbnBhcmFtc1tlbmNvZGVVUklDb21wb25lbnQoaSldID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1tpXSk7CisgICAgfQorICAgIC8vIHNlcmlhbGl6ZSB0aGUgc3RydWN0dXJlCisgICAgdmFyIGNhbGxwYXJhbXMgPSBbXTsKKyAgICBmb3IgKGkgaW4gbnBhcmFtcykgeworICAgICAgICBjYWxscGFyYW1zLnB1c2goaSsiPSIrbnBhcmFtc1tpXSk7CisgICAgfQorICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsKyI/IitjYWxscGFyYW1zLmpvaW4oJyYnKTsKK30KKworCisvKiBUaGluZ3MgdGhhdCBoYXBwZW4gZm9yIGFsbCBwYWdlcyAqLworJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisKKyAgdmFyIGFqYXhMb2FkaW5nVGltZXI7CisKKyAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGNvbnNvbGUgb2JqZWN0IHdoaWNoIG1pZ2h0IGJlIHRoZSBjYXNlIGluIHNvbWUKKyAgICAgKiBicm93c2Vycywgbm8tb3AgaXQgdG8gYXZvaWQgdW5kZWZpbmVkIGVycm9ycy4KKyAgICAgKi8KKyAgICBpZiAoIXdpbmRvdy5jb25zb2xlKSB7CisgICAgICB3aW5kb3cuY29uc29sZSA9IHt9OworICAgICAgd2luZG93LmNvbnNvbGUud2FybiA9IGZ1bmN0aW9uKCkge307CisgICAgICB3aW5kb3cuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKCkge307CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQcmV0dHlQcmludCBwbHVnaW4uCisgICAgICoKKyAgICAgKi8KKyAgICAvLyBJbml0CisgICAgcHJldHR5UHJpbnQoKTsKKworICAgIC8vIFByZXZlbnQgaW52YWxpZCBsaW5rcyBmcm9tIGp1bXBpbmcgcGFnZSBzY3JvbGwKKyAgICAkKCdhW2hyZWY9I10nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworCisKKyAgICAvKiBTVEFSVCBUT0RPIERlbGV0ZSB0aGlzIHNlY3Rpb24gbm93IHJlZHVuZGFudCAqLworICAgIC8qIEJlbGVuJ3MgYWRkaXRpb25zICovCisKKyAgICAvLyB0dXJuIEVkaXQgY29sdW1ucyBkcm9wZG93biBpbnRvIGEgbXVsdGlzZWxlY3QgbWVudQorICAgICQoJy5kcm9wZG93bi1tZW51IGlucHV0LCAuZHJvcGRvd24tbWVudSBsYWJlbCcpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9KTsKKworICAgIC8vIGVuYWJsZSBwb3BvdmVycyBpbiBhbnkgdGFibGUgY2VsbHMgdGhhdCBjb250YWluIGFuIGFuY2hvciB3aXRoIHRoZQorICAgIC8vIC5idG4gY2xhc3MgYXBwbGllZCwgYW5kIG1ha2Ugc3VyZSBwb3BvdmVycyB3b3JrIG9uIGNsaWNrLCBhcmUgbXV0dWFsbHkKKyAgICAvLyBleGNsdXNpdmUgYW5kIHRoZXkgY2xvc2Ugd2hlbiB5b3VyIGNsaWNrIG91dHNpZGUgdGhlaXIgYXJlYQorCisgICAgJCgnaHRtbCcpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICQoJ3RkID4gYS5idG4nKS5wb3BvdmVyKCdoaWRlJyk7CisgICAgfSk7CisKKyAgICAkKCd0ZCA+IGEuYnRuJykucG9wb3Zlcih7CisgICAgICAgIGh0bWw6dHJ1ZSwKKyAgICAgICAgcGxhY2VtZW50OidsZWZ0JywKKyAgICAgICAgY29udGFpbmVyOidib2R5JywKKyAgICAgICAgdHJpZ2dlcjonbWFudWFsJworICAgIH0pLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgICAgICAkKCd0ZCA+IGEuYnRuJykubm90KHRoaXMpLnBvcG92ZXIoJ2hpZGUnKTsKKyAgICAgICAgLy8gaWRlYWxseSB3ZSB3b3VsZCB1c2UgJ3RvZ2dsZScgaGVyZQorICAgICAgICAvLyBidXQgaXQgc2VlbXMgYnVnZ3kgaW4gb3VyIEJvb3RzdHJhcCB2ZXJzaW9uCisgICAgICAgICQodGhpcykucG9wb3Zlcignc2hvdycpOworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworCisgICAgLy8gZW5hYmxlIHRvb2x0aXBzIGZvciBhcHBsaWVkIGZpbHRlcnMKKyAgICAkKCd0aCBhLmJ0bi1wcmltYXJ5JykudG9vbHRpcCh7Y29udGFpbmVyOidib2R5JywgaHRtbDp0cnVlLCBwbGFjZW1lbnQ6J2JvdHRvbScsIGRlbGF5OntoaWRlOjE1MDB9fSk7CisKKyAgICAvLyBoaWRlIGFwcGxpZWQgZmlsdGVyIHRvb2x0aXAgd2hlbiB5b3UgY2xpY2sgb24gdGhlIGZpbHRlciBidXR0b24KKyAgICAkKCd0aCBhLmJ0bi1wcmltYXJ5JykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAkKCcudG9vbHRpcCcpLmhpZGUoKTsKKyAgICB9KTsKKworICAgIC8vIGVuYWJsZSBoZWxwIGluZm9ybWF0aW9uIHRvb2x0aXAKKyAgICAkKCIuZ2V0LWhlbHAiKS50b29sdGlwKHtjb250YWluZXI6J2JvZHknLCBodG1sOnRydWUsIGRlbGF5OntzaG93OjMwMH19KTsKKworICAgIC8vIHNob3cgaGVscCBidWJibGUgb25seSBvbiBob3ZlciBpbnNpZGUgdGFibGVzCisgICAgJCgiLmhvdmVyLWhlbHAiKS5jc3MoInZpc2liaWxpdHkiLCJoaWRkZW4iKTsKKyAgICAkKCJ0aCwgdGQiKS5ob3ZlcihmdW5jdGlvbiAoKSB7CisgICAgICAgICQodGhpcykuZmluZCgiLmhvdmVyLWhlbHAiKS5jc3MoInZpc2liaWxpdHkiLCJ2aXNpYmxlIik7CisgICAgfSk7CisgICAgJCgidGgsIHRkIikubW91c2VsZWF2ZShmdW5jdGlvbiAoKSB7CisgICAgICAgICQodGhpcykuZmluZCgiLmhvdmVyLWhlbHAiKS5jc3MoInZpc2liaWxpdHkiLCJoaWRkZW4iKTsKKyAgICB9KTsKKworICAgIC8qIEVORCBUT0RPIERlbGV0ZSB0aGlzIHNlY3Rpb24gbm93IHJlZHVuZGFudCAqLworCisgICAgLy8gc2hvdyB0YXNrIHR5cGUgYW5kIG91dGNvbWUgaW4gdGFzayBkZXRhaWxzIHBhZ2VzCisgICAgJCgiLnRhc2staW5mbyIpLnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiAyMDB9LCBwbGFjZW1lbnQ6ICdyaWdodCcgfSk7CisKKyAgICAvLyBpbml0aWFsaXNlIHRoZSB0b29sdGlwcyBmb3IgdGhlIGljb24tcGVuY2lsIGljb25zCisgICAgJCgiLmljb24tcGVuY2lsIikudG9vbHRpcCh7IGNvbnRhaW5lcjogJ2JvZHknLCBodG1sOiB0cnVlLCBkZWxheToge3Nob3c6IDQwMH0sIHRpdGxlOiAiQ2hhbmdlIiB9KTsKKworICAgIC8vIGluaXRpYWxpc2UgdGhlIHRvb2x0aXBzIGZvciB0aGUgZG93bmxvYWQgaWNvbnMKKyAgICAkKCIuaWNvbi1kb3dubG9hZC1hbHQiKS50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7IHNob3c6IDIwMCB9IH0pOworCisgICAgLy8gaW5pdGlhbGlzZSBwb3BvdmVyIGZvciBkZWJ1ZyBpbmZvcm1hdGlvbgorICAgICQoIi5pY29uLWluZm8tc2lnbiIpLnBvcG92ZXIoIHsgcGxhY2VtZW50OiAnYm90dG9tJywgaHRtbDogdHJ1ZSwgY29udGFpbmVyOiAnYm9keScgfSk7CisKKyAgICAvLyBsaW5raW5nIGRpcmVjdGx5IHRvIHRhYnMKKyAgICAkKGZ1bmN0aW9uKCl7CisgICAgICAgICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAkKCd1bC5uYXYgYVtocmVmPSInICsgaGFzaCArICciXScpLnRhYignc2hvdycpOworCisgICAgICAgICAgJCgnLm5hdi10YWJzIGEnKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAkKHRoaXMpLnRhYignc2hvdycpOworICAgICAgICAgICAgJCgnYm9keScpLnNjcm9sbFRvcCgpOworICAgICAgICAgIH0pOworICAgIH0pOworCisgICAgLy8gdG9nZ2xlIGZvciBsb25nIGNvbnRlbnQgKHZhcmlhYmxlcywgcHl0aG9uIHN0YWNrIHRyYWNlLCBldGMpCisgICAgJCgnLmZ1bGwsIC5mdWxsLWhpZGUnKS5oaWRlKCk7CisgICAgJCgnLmZ1bGwtc2hvdycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICQoJy5mdWxsJykuc2xpZGVEb3duKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAkKCcuZnVsbC1oaWRlJykuc2hvdygpOworICAgICAgICB9KTsKKyAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgfSk7CisgICAgJCgnLmZ1bGwtaGlkZScpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICQodGhpcykuaGlkZSgpOworICAgICAgICAkKCcuZnVsbCcpLnNsaWRlVXAoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICQoJy5mdWxsLXNob3cnKS5zaG93KCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgLy90b2dnbGUgdGhlIGVycm9ycyBhbmQgd2FybmluZ3Mgc2VjdGlvbnMKKyAgICAkKCcuc2hvdy1lcnJvcnMnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLWVycm9ycycpLmFkZENsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy50b2dnbGUtZXJyb3JzJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS1lcnJvcnMnKS50b2dnbGVDbGFzcygnaW4nKTsKKyAgICB9KTsKKyAgICAkKCcuc2hvdy13YXJuaW5ncycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2Utd2FybmluZ3MnKS5hZGRDbGFzcygnaW4nKTsKKyAgICB9KTsKKyAgICAkKCcudG9nZ2xlLXdhcm5pbmdzJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS13YXJuaW5ncycpLnRvZ2dsZUNsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy5zaG93LWV4Y2VwdGlvbnMnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLWV4Y2VwdGlvbnMnKS5hZGRDbGFzcygnaW4nKTsKKyAgICB9KTsKKyAgICAkKCcudG9nZ2xlLWV4Y2VwdGlvbnMnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLWV4Y2VwdGlvbnMnKS50b2dnbGVDbGFzcygnaW4nKTsKKyAgICB9KTsKKworCisgICAgJCgiI2hpZGUtYWxlcnQiKS5jbGljayhmdW5jdGlvbigpeworICAgICAgJCh0aGlzKS5wYXJlbnQoKS5mYWRlT3V0KCk7CisgICAgfSk7CisKKyAgICAvL3Nob3cgd2FybmluZ3Mgc2VjdGlvbiB3aGVuIHJlcXVlc3RlZCBmcm9tIHRoZSBwcmV2aW91cyBwYWdlCisgICAgaWYgKGxvY2F0aW9uLmhyZWYuc2VhcmNoKCcjd2FybmluZ3MnKSA+IC0xKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS13YXJuaW5ncycpLmFkZENsYXNzKCdpbicpOworICAgIH0KKworICAgIC8qIFNob3cgdGhlIGxvYWRpbmcgbm90aWZpY2F0aW9uIGlmIG5vdGhpbmcgaGFzIGhhcHBlbmQgYWZ0ZXIgMS41CisgICAgICogc2Vjb25kcworICAgICAqLworICAgICQoZG9jdW1lbnQpLmJpbmQoImFqYXhTdGFydCIsIGZ1bmN0aW9uKCl7CisgICAgICBpZiAoYWpheExvYWRpbmdUaW1lcikKKyAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChhamF4TG9hZGluZ1RpbWVyKTsKKworICAgICAgYWpheExvYWRpbmdUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAkKCIjbG9hZGluZy1ub3RpZmljYXRpb24iKS5mYWRlSW4oKTsKKyAgICAgIH0sIDEyMDApOworICAgIH0pOworCisgICAgJChkb2N1bWVudCkuYmluZCgiYWpheFN0b3AiLCBmdW5jdGlvbigpeworICAgICAgaWYgKGFqYXhMb2FkaW5nVGltZXIpCisgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoYWpheExvYWRpbmdUaW1lcik7CisKKyAgICAgICQoIiNsb2FkaW5nLW5vdGlmaWNhdGlvbiIpLmZhZGVPdXQoKTsKKyAgICB9KTsKKworICAgICQoZG9jdW1lbnQpLmFqYXhFcnJvcihmdW5jdGlvbihldmVudCwganF4aHIsIHNldHRpbmdzLCBlcnJNc2cpeworICAgICAgaWYgKGVyck1zZyA9PT0gJ2Fib3J0JykKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjb25zb2xlLndhcm4oIlByb2JsZW0gd2l0aCB4aHIgY2FsbCIpOworICAgICAgY29uc29sZS53YXJuKGVyck1zZyk7CisgICAgICBjb25zb2xlLndhcm4oanF4aHIucmVzcG9uc2VUZXh0KTsKKyAgICB9KTsKKworICAgIGZ1bmN0aW9uIGNoZWNrX2Zvcl9kdXBsaWNhdGVfaWRzICgpIHsKKyAgICAgIC8qIHdhcm4gYWJvdXQgZHVwbGljYXRlIGVsZW1lbnQgaWRzICovCisgICAgICB2YXIgaWRzID0ge307CisgICAgICAkKCJbaWRdIikuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMuaWQgJiYgaWRzW3RoaXMuaWRdKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCdEdXBsaWNhdGUgZWxlbWVudCBpZCAjJyt0aGlzLmlkKTsKKyAgICAgICAgfQorICAgICAgICBpZHNbdGhpcy5pZF0gPSB0cnVlOworICAgICAgfSk7CisgICAgfQorCisgICAgaWYgKGxpYnRvYXN0ZXIuZGVidWcpIHsKKyAgICAgIGNoZWNrX2Zvcl9kdXBsaWNhdGVfaWRzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIERlYnVnIGlzIGZhbHNlIHNvIHN1cHJlc3Mgd2FybmluZ3MgYnkgb3ZlcnJpZGluZyB0aGUgZnVuY3Rpb25zICovCisgICAgICB3aW5kb3cuY29uc29sZS53YXJuID0gZnVuY3Rpb24gKCkge307CisgICAgICB3aW5kb3cuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uICgpIHt9OworICAgfQorfSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJldHRpZnkuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJldHRpZnkuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWVmNWFkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcmV0dGlmeS5qcwpAQCAtMCwwICsxLDI4IEBACit2YXIgcT1udWxsO3dpbmRvdy5QUl9TSE9VTERfVVNFX0NPTlRJTlVBVElPTj0hMDsKKyhmdW5jdGlvbigpe2Z1bmN0aW9uIEwoYSl7ZnVuY3Rpb24gbShhKXt2YXIgZj1hLmNoYXJDb2RlQXQoMCk7aWYoZiE9PTkyKXJldHVybiBmO3ZhciBiPWEuY2hhckF0KDEpO3JldHVybihmPXJbYl0pP2Y6IjAiPD1iJiZiPD0iNyI/cGFyc2VJbnQoYS5zdWJzdHJpbmcoMSksOCk6Yj09PSJ1Inx8Yj09PSJ4Ij9wYXJzZUludChhLnN1YnN0cmluZygyKSwxNik6YS5jaGFyQ29kZUF0KDEpfWZ1bmN0aW9uIGUoYSl7aWYoYTwzMilyZXR1cm4oYTwxNj8iXFx4MCI6IlxceCIpK2EudG9TdHJpbmcoMTYpO2E9U3RyaW5nLmZyb21DaGFyQ29kZShhKTtpZihhPT09IlxcInx8YT09PSItInx8YT09PSJbInx8YT09PSJdIilhPSJcXCIrYTtyZXR1cm4gYX1mdW5jdGlvbiBoKGEpe2Zvcih2YXIgZj1hLnN1YnN0cmluZygxLGEubGVuZ3RoLTEpLm1hdGNoKC9cXHVbXGRBLUZhLWZdezR9fFxceFtcZEEtRmEtZl17Mn18XFxbMC0zXVswLTddezAsMn18XFxbMC03XXsxLDJ9fFxcW1xTXHNdfFteXFxdL2cpLGE9CitbXSxiPVtdLG89ZlswXT09PSJeIixjPW8/MTowLGk9Zi5sZW5ndGg7YzxpOysrYyl7dmFyIGo9ZltjXTtpZigvXFxbYmRzd10vaS50ZXN0KGopKWEucHVzaChqKTtlbHNle3ZhciBqPW0oaiksZDtjKzI8aSYmIi0iPT09ZltjKzFdPyhkPW0oZltjKzJdKSxjKz0yKTpkPWo7Yi5wdXNoKFtqLGRdKTtkPDY1fHxqPjEyMnx8KGQ8NjV8fGo+OTB8fGIucHVzaChbTWF0aC5tYXgoNjUsail8MzIsTWF0aC5taW4oZCw5MCl8MzJdKSxkPDk3fHxqPjEyMnx8Yi5wdXNoKFtNYXRoLm1heCg5NyxqKSYtMzMsTWF0aC5taW4oZCwxMjIpJi0zM10pKX19Yi5zb3J0KGZ1bmN0aW9uKGEsZil7cmV0dXJuIGFbMF0tZlswXXx8ZlsxXS1hWzFdfSk7Zj1bXTtqPVtOYU4sTmFOXTtmb3IoYz0wO2M8Yi5sZW5ndGg7KytjKWk9YltjXSxpWzBdPD1qWzFdKzE/alsxXT1NYXRoLm1heChqWzFdLGlbMV0pOmYucHVzaChqPWkpO2I9WyJbIl07byYmYi5wdXNoKCJeIik7Yi5wdXNoLmFwcGx5KGIsYSk7Zm9yKGM9MDtjPAorZi5sZW5ndGg7KytjKWk9ZltjXSxiLnB1c2goZShpWzBdKSksaVsxXT5pWzBdJiYoaVsxXSsxPmlbMF0mJmIucHVzaCgiLSIpLGIucHVzaChlKGlbMV0pKSk7Yi5wdXNoKCJdIik7cmV0dXJuIGIuam9pbigiIil9ZnVuY3Rpb24geShhKXtmb3IodmFyIGY9YS5zb3VyY2UubWF0Y2goL1xbKD86W15cXFxdXXxcXFtcU1xzXSkqXXxcXHVbXGRBLUZhLWZdezR9fFxceFtcZEEtRmEtZl17Mn18XFxcZCt8XFxbXlxkdXhdfFwoXD9bITo9XXxbKCleXXxbXigpW1xcXl0rL2cpLGI9Zi5sZW5ndGgsZD1bXSxjPTAsaT0wO2M8YjsrK2Mpe3ZhciBqPWZbY107aj09PSIoIj8rK2k6IlxcIj09PWouY2hhckF0KDApJiYoaj0rai5zdWJzdHJpbmcoMSkpJiZqPD1pJiYoZFtqXT0tMSl9Zm9yKGM9MTtjPGQubGVuZ3RoOysrYyktMT09PWRbY10mJihkW2NdPSsrdCk7Zm9yKGk9Yz0wO2M8YjsrK2Mpaj1mW2NdLGo9PT0iKCI/KCsraSxkW2ldPT09dm9pZCAwJiYoZltjXT0iKD86IikpOiJcXCI9PT1qLmNoYXJBdCgwKSYmCisoaj0rai5zdWJzdHJpbmcoMSkpJiZqPD1pJiYoZltjXT0iXFwiK2RbaV0pO2ZvcihpPWM9MDtjPGI7KytjKSJeIj09PWZbY10mJiJeIiE9PWZbYysxXSYmKGZbY109IiIpO2lmKGEuaWdub3JlQ2FzZSYmcylmb3IoYz0wO2M8YjsrK2Mpaj1mW2NdLGE9ai5jaGFyQXQoMCksai5sZW5ndGg+PTImJmE9PT0iWyI/ZltjXT1oKGopOmEhPT0iXFwiJiYoZltjXT1qLnJlcGxhY2UoL1tBLVphLXpdL2csZnVuY3Rpb24oYSl7YT1hLmNoYXJDb2RlQXQoMCk7cmV0dXJuIlsiK1N0cmluZy5mcm9tQ2hhckNvZGUoYSYtMzMsYXwzMikrIl0ifSkpO3JldHVybiBmLmpvaW4oIiIpfWZvcih2YXIgdD0wLHM9ITEsbD0hMSxwPTAsZD1hLmxlbmd0aDtwPGQ7KytwKXt2YXIgZz1hW3BdO2lmKGcuaWdub3JlQ2FzZSlsPSEwO2Vsc2UgaWYoL1thLXpdL2kudGVzdChnLnNvdXJjZS5yZXBsYWNlKC9cXHVbXGRhLWZdezR9fFxceFtcZGEtZl17Mn18XFxbXlVYdXhdL2dpLCIiKSkpe3M9ITA7bD0hMTticmVha319Zm9yKHZhciByPQore2I6OCx0OjksbjoxMCx2OjExLGY6MTIscjoxM30sbj1bXSxwPTAsZD1hLmxlbmd0aDtwPGQ7KytwKXtnPWFbcF07aWYoZy5nbG9iYWx8fGcubXVsdGlsaW5lKXRocm93IEVycm9yKCIiK2cpO24ucHVzaCgiKD86Iit5KGcpKyIpIil9cmV0dXJuIFJlZ0V4cChuLmpvaW4oInwiKSxsPyJnaSI6ImciKX1mdW5jdGlvbiBNKGEpe2Z1bmN0aW9uIG0oYSl7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTppZihlLnRlc3QoYS5jbGFzc05hbWUpKWJyZWFrO2Zvcih2YXIgZz1hLmZpcnN0Q2hpbGQ7ZztnPWcubmV4dFNpYmxpbmcpbShnKTtnPWEubm9kZU5hbWU7aWYoIkJSIj09PWd8fCJMSSI9PT1nKWhbc109IlxuIix0W3M8PDFdPXkrKyx0W3MrKzw8MXwxXT1hO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Zz1hLm5vZGVWYWx1ZSxnLmxlbmd0aCYmKGc9cD9nLnJlcGxhY2UoL1xyXG4/L2csIlxuIik6Zy5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKSxoW3NdPWcsdFtzPDwxXT15LHkrPWcubGVuZ3RoLAordFtzKys8PDF8MV09YSl9fXZhciBlPS8oPzpefFxzKW5vY29kZSg/OlxzfCQpLyxoPVtdLHk9MCx0PVtdLHM9MCxsO2EuY3VycmVudFN0eWxlP2w9YS5jdXJyZW50U3R5bGUud2hpdGVTcGFjZTp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSYmKGw9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLHEpLmdldFByb3BlcnR5VmFsdWUoIndoaXRlLXNwYWNlIikpO3ZhciBwPWwmJiJwcmUiPT09bC5zdWJzdHJpbmcoMCwzKTttKGEpO3JldHVybnthOmguam9pbigiIikucmVwbGFjZSgvXG4kLywiIiksYzp0fX1mdW5jdGlvbiBCKGEsbSxlLGgpe20mJihhPXthOm0sZDphfSxlKGEpLGgucHVzaC5hcHBseShoLGEuZSkpfWZ1bmN0aW9uIHgoYSxtKXtmdW5jdGlvbiBlKGEpe2Zvcih2YXIgbD1hLmQscD1bbCwicGxuIl0sZD0wLGc9YS5hLm1hdGNoKHkpfHxbXSxyPXt9LG49MCx6PWcubGVuZ3RoO248ejsrK24pe3ZhciBmPWdbbl0sYj1yW2ZdLG89dm9pZCAwLGM7aWYodHlwZW9mIGI9PT0KKyJzdHJpbmciKWM9ITE7ZWxzZXt2YXIgaT1oW2YuY2hhckF0KDApXTtpZihpKW89Zi5tYXRjaChpWzFdKSxiPWlbMF07ZWxzZXtmb3IoYz0wO2M8dDsrK2MpaWYoaT1tW2NdLG89Zi5tYXRjaChpWzFdKSl7Yj1pWzBdO2JyZWFrfW98fChiPSJwbG4iKX1pZigoYz1iLmxlbmd0aD49NSYmImxhbmctIj09PWIuc3Vic3RyaW5nKDAsNSkpJiYhKG8mJnR5cGVvZiBvWzFdPT09InN0cmluZyIpKWM9ITEsYj0ic3JjIjtjfHwocltmXT1iKX1pPWQ7ZCs9Zi5sZW5ndGg7aWYoYyl7Yz1vWzFdO3ZhciBqPWYuaW5kZXhPZihjKSxrPWorYy5sZW5ndGg7b1syXSYmKGs9Zi5sZW5ndGgtb1syXS5sZW5ndGgsaj1rLWMubGVuZ3RoKTtiPWIuc3Vic3RyaW5nKDUpO0IobCtpLGYuc3Vic3RyaW5nKDAsaiksZSxwKTtCKGwraStqLGMsQyhiLGMpLHApO0IobCtpK2ssZi5zdWJzdHJpbmcoayksZSxwKX1lbHNlIHAucHVzaChsK2ksYil9YS5lPXB9dmFyIGg9e30seTsoZnVuY3Rpb24oKXtmb3IodmFyIGU9YS5jb25jYXQobSksCitsPVtdLHA9e30sZD0wLGc9ZS5sZW5ndGg7ZDxnOysrZCl7dmFyIHI9ZVtkXSxuPXJbM107aWYobilmb3IodmFyIGs9bi5sZW5ndGg7LS1rPj0wOyloW24uY2hhckF0KGspXT1yO3I9clsxXTtuPSIiK3I7cC5oYXNPd25Qcm9wZXJ0eShuKXx8KGwucHVzaChyKSxwW25dPXEpfWwucHVzaCgvW1xTXHNdLyk7eT1MKGwpfSkoKTt2YXIgdD1tLmxlbmd0aDtyZXR1cm4gZX1mdW5jdGlvbiB1KGEpe3ZhciBtPVtdLGU9W107YS50cmlwbGVRdW90ZWRTdHJpbmdzP20ucHVzaChbInN0ciIsL14oPzonJycoPzpbXidcXF18XFxbXFNcc118Jyc/KD89W14nXSkpKig/OicnJ3wkKXwiIiIoPzpbXiJcXF18XFxbXFNcc118IiI/KD89W14iXSkpKig/OiIiInwkKXwnKD86W14nXFxdfFxcW1xTXHNdKSooPzonfCQpfCIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCkpLyxxLCInXCIiXSk6YS5tdWx0aUxpbmVTdHJpbmdzP20ucHVzaChbInN0ciIsL14oPzonKD86W14nXFxdfFxcW1xTXHNdKSooPzonfCQpfCIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCl8YCg/OlteXFxgXXxcXFtcU1xzXSkqKD86YHwkKSkvLAorcSwiJ1wiYCJdKTptLnB1c2goWyJzdHIiLC9eKD86Jyg/OlteXG5ccidcXF18XFwuKSooPzonfCQpfCIoPzpbXlxuXHIiXFxdfFxcLikqKD86InwkKSkvLHEsIlwiJyJdKTthLnZlcmJhdGltU3RyaW5ncyYmZS5wdXNoKFsic3RyIiwvXkAiKD86W14iXXwiIikqKD86InwkKS8scV0pO3ZhciBoPWEuaGFzaENvbW1lbnRzO2gmJihhLmNTdHlsZUNvbW1lbnRzPyhoPjE/bS5wdXNoKFsiY29tIiwvXiMoPzojIyg/OlteI118Iyg/ISMjKSkqKD86IyMjfCQpfC4qKS8scSwiIyJdKTptLnB1c2goWyJjb20iLC9eIyg/Oig/OmRlZmluZXxlbGlmfGVsc2V8ZW5kaWZ8ZXJyb3J8aWZkZWZ8aW5jbHVkZXxpZm5kZWZ8bGluZXxwcmFnbWF8dW5kZWZ8d2FybmluZylcYnxbXlxuXHJdKikvLHEsIiMiXSksZS5wdXNoKFsic3RyIiwvXjwoPzooPzooPzpcLlwuXC8pKnxcLz8pKD86W1x3LV0rKD86XC9bXHctXSspKyk/W1x3LV0rXC5ofFthLXpdXHcqKT4vLHFdKSk6bS5wdXNoKFsiY29tIiwvXiNbXlxuXHJdKi8sCitxLCIjIl0pKTthLmNTdHlsZUNvbW1lbnRzJiYoZS5wdXNoKFsiY29tIiwvXlwvXC9bXlxuXHJdKi8scV0pLGUucHVzaChbImNvbSIsL15cL1wqW1xTXHNdKj8oPzpcKlwvfCQpLyxxXSkpO2EucmVnZXhMaXRlcmFscyYmZS5wdXNoKFsibGFuZy1yZWdleCIsL14oPzpeXlwuP3xbISstXXwhPXwhPT18I3wlfCU9fCZ8JiZ8JiY9fCY9fFwofFwqfFwqPXxcKz18LHwtPXwtPnxcL3xcLz18Onw6Onw7fDx8PDx8PDw9fDw9fD18PT18PT09fD58Pj18Pj58Pj49fD4+Pnw+Pj49fFs/QFteXXxcXj18XF5cXnxcXlxePXx7fFx8fFx8PXxcfFx8fFx8XHw9fH58YnJlYWt8Y2FzZXxjb250aW51ZXxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2YpXHMqKFwvKD89W14qL10pKD86W14vW1xcXXxcXFtcU1xzXXxcWyg/OlteXFxcXV18XFxbXFNcc10pKig/Ol18JCkpK1wvKS9dKTsoaD1hLnR5cGVzKSYmZS5wdXNoKFsidHlwIixoXSk7YT0oIiIrYS5rZXl3b3JkcykucmVwbGFjZSgvXiB8ICQvZywKKyIiKTthLmxlbmd0aCYmZS5wdXNoKFsia3dkIixSZWdFeHAoIl4oPzoiK2EucmVwbGFjZSgvW1xzLF0rL2csInwiKSsiKVxcYiIpLHFdKTttLnB1c2goWyJwbG4iLC9eXHMrLyxxLCIgXHJcblx0XHhhMCJdKTtlLnB1c2goWyJsaXQiLC9eQFskX2Etel1bXHckQF0qL2kscV0sWyJ0eXAiLC9eKD86W0BfXT9bQS1aXStbYS16XVtcdyRAXSp8XHcrX3RcYikvLHFdLFsicGxuIiwvXlskX2Etel1bXHckQF0qL2kscV0sWyJsaXQiLC9eKD86MHhbXGRhLWZdK3woPzpcZCg/Ol9cZCspKlxkKig/OlwuXGQqKT98XC5cZFwrKSg/OmVbKy1dP1xkKyk/KVthLXpdKi9pLHEsIjAxMjM0NTY3ODkiXSxbInBsbiIsL15cXFtcU1xzXT8vLHFdLFsicHVuIiwvXi5bXlxzXHciLSQnLi9AXFxgXSovLHFdKTtyZXR1cm4geChtLGUpfWZ1bmN0aW9uIEQoYSxtKXtmdW5jdGlvbiBlKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6aWYoay50ZXN0KGEuY2xhc3NOYW1lKSlicmVhaztpZigiQlIiPT09YS5ub2RlTmFtZSloKGEpLAorYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7ZWxzZSBmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZShhKTticmVhaztjYXNlIDM6Y2FzZSA0OmlmKHApe3ZhciBiPWEubm9kZVZhbHVlLGQ9Yi5tYXRjaCh0KTtpZihkKXt2YXIgYz1iLnN1YnN0cmluZygwLGQuaW5kZXgpO2Eubm9kZVZhbHVlPWM7KGI9Yi5zdWJzdHJpbmcoZC5pbmRleCtkWzBdLmxlbmd0aCkpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMuY3JlYXRlVGV4dE5vZGUoYiksYS5uZXh0U2libGluZyk7aChhKTtjfHxhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9fX19ZnVuY3Rpb24gaChhKXtmdW5jdGlvbiBiKGEsZCl7dmFyIGU9ZD9hLmNsb25lTm9kZSghMSk6YSxmPWEucGFyZW50Tm9kZTtpZihmKXt2YXIgZj1iKGYsMSksZz1hLm5leHRTaWJsaW5nO2YuYXBwZW5kQ2hpbGQoZSk7Zm9yKHZhciBoPWc7aDtoPWcpZz1oLm5leHRTaWJsaW5nLGYuYXBwZW5kQ2hpbGQoaCl9cmV0dXJuIGV9Citmb3IoOyFhLm5leHRTaWJsaW5nOylpZihhPWEucGFyZW50Tm9kZSwhYSlyZXR1cm47Zm9yKHZhciBhPWIoYS5uZXh0U2libGluZywwKSxlOyhlPWEucGFyZW50Tm9kZSkmJmUubm9kZVR5cGU9PT0xOylhPWU7ZC5wdXNoKGEpfXZhciBrPS8oPzpefFxzKW5vY29kZSg/OlxzfCQpLyx0PS9cclxuP3xcbi8scz1hLm93bmVyRG9jdW1lbnQsbDthLmN1cnJlbnRTdHlsZT9sPWEuY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJihsPXMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLHEpLmdldFByb3BlcnR5VmFsdWUoIndoaXRlLXNwYWNlIikpO3ZhciBwPWwmJiJwcmUiPT09bC5zdWJzdHJpbmcoMCwzKTtmb3IobD1zLmNyZWF0ZUVsZW1lbnQoIkxJIik7YS5maXJzdENoaWxkOylsLmFwcGVuZENoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKHZhciBkPVtsXSxnPTA7ZzxkLmxlbmd0aDsrK2cpZShkW2ddKTttPT09KG18MCkmJmRbMF0uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsCittKTt2YXIgcj1zLmNyZWF0ZUVsZW1lbnQoIk9MIik7ci5jbGFzc05hbWU9ImxpbmVudW1zIjtmb3IodmFyIG49TWF0aC5tYXgoMCxtLTF8MCl8fDAsZz0wLHo9ZC5sZW5ndGg7Zzx6OysrZylsPWRbZ10sbC5jbGFzc05hbWU9IkwiKyhnK24pJTEwLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKCJceGEwIikpLHIuYXBwZW5kQ2hpbGQobCk7YS5hcHBlbmRDaGlsZChyKX1mdW5jdGlvbiBrKGEsbSl7Zm9yKHZhciBlPW0ubGVuZ3RoOy0tZT49MDspe3ZhciBoPW1bZV07QS5oYXNPd25Qcm9wZXJ0eShoKT93aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuKCJjYW5ub3Qgb3ZlcnJpZGUgbGFuZ3VhZ2UgaGFuZGxlciAlcyIsaCk6QVtoXT1hfX1mdW5jdGlvbiBDKGEsbSl7aWYoIWF8fCFBLmhhc093blByb3BlcnR5KGEpKWE9L15ccyo8Ly50ZXN0KG0pPyJkZWZhdWx0LW1hcmt1cCI6ImRlZmF1bHQtY29kZSI7cmV0dXJuIEFbYV19ZnVuY3Rpb24gRShhKXt2YXIgbT0KK2EuZzt0cnl7dmFyIGU9TShhLmgpLGg9ZS5hO2EuYT1oO2EuYz1lLmM7YS5kPTA7QyhtLGgpKGEpO3ZhciBrPS9cYk1TSUVcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxtPS9cbi9nLHQ9YS5hLHM9dC5sZW5ndGgsZT0wLGw9YS5jLHA9bC5sZW5ndGgsaD0wLGQ9YS5lLGc9ZC5sZW5ndGgsYT0wO2RbZ109czt2YXIgcixuO2ZvcihuPXI9MDtuPGc7KWRbbl0hPT1kW24rMl0/KGRbcisrXT1kW24rK10sZFtyKytdPWRbbisrXSk6bis9MjtnPXI7Zm9yKG49cj0wO248Zzspe2Zvcih2YXIgej1kW25dLGY9ZFtuKzFdLGI9bisyO2IrMjw9ZyYmZFtiKzFdPT09ZjspYis9MjtkW3IrK109ejtkW3IrK109ZjtuPWJ9Zm9yKGQubGVuZ3RoPXI7aDxwOyl7dmFyIG89bFtoKzJdfHxzLGM9ZFthKzJdfHxzLGI9TWF0aC5taW4obyxjKSxpPWxbaCsxXSxqO2lmKGkubm9kZVR5cGUhPT0xJiYoaj10LnN1YnN0cmluZyhlLGIpKSl7ayYmKGo9ai5yZXBsYWNlKG0sIlxyIikpO2kubm9kZVZhbHVlPQorajt2YXIgdT1pLm93bmVyRG9jdW1lbnQsdj11LmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTt2LmNsYXNzTmFtZT1kW2ErMV07dmFyIHg9aS5wYXJlbnROb2RlO3gucmVwbGFjZUNoaWxkKHYsaSk7di5hcHBlbmRDaGlsZChpKTtlPG8mJihsW2grMV09aT11LmNyZWF0ZVRleHROb2RlKHQuc3Vic3RyaW5nKGIsbykpLHguaW5zZXJ0QmVmb3JlKGksdi5uZXh0U2libGluZykpfWU9YjtlPj1vJiYoaCs9Mik7ZT49YyYmKGErPTIpfX1jYXRjaCh3KXsiY29uc29sZSJpbiB3aW5kb3cmJmNvbnNvbGUubG9nKHcmJncuc3RhY2s/dy5zdGFjazp3KX19dmFyIHY9WyJicmVhayxjb250aW51ZSxkbyxlbHNlLGZvcixpZixyZXR1cm4sd2hpbGUiXSx3PVtbdiwiYXV0byxjYXNlLGNoYXIsY29uc3QsZGVmYXVsdCxkb3VibGUsZW51bSxleHRlcm4sZmxvYXQsZ290byxpbnQsbG9uZyxyZWdpc3RlcixzaG9ydCxzaWduZWQsc2l6ZW9mLHN0YXRpYyxzdHJ1Y3Qsc3dpdGNoLHR5cGVkZWYsdW5pb24sdW5zaWduZWQsdm9pZCx2b2xhdGlsZSJdLAorImNhdGNoLGNsYXNzLGRlbGV0ZSxmYWxzZSxpbXBvcnQsbmV3LG9wZXJhdG9yLHByaXZhdGUscHJvdGVjdGVkLHB1YmxpYyx0aGlzLHRocm93LHRydWUsdHJ5LHR5cGVvZiJdLEY9W3csImFsaWdub2YsYWxpZ25fdW5pb24sYXNtLGF4aW9tLGJvb2wsY29uY2VwdCxjb25jZXB0X21hcCxjb25zdF9jYXN0LGNvbnN0ZXhwcixkZWNsdHlwZSxkeW5hbWljX2Nhc3QsZXhwbGljaXQsZXhwb3J0LGZyaWVuZCxpbmxpbmUsbGF0ZV9jaGVjayxtdXRhYmxlLG5hbWVzcGFjZSxudWxscHRyLHJlaW50ZXJwcmV0X2Nhc3Qsc3RhdGljX2Fzc2VydCxzdGF0aWNfY2FzdCx0ZW1wbGF0ZSx0eXBlaWQsdHlwZW5hbWUsdXNpbmcsdmlydHVhbCx3aGVyZSJdLEc9W3csImFic3RyYWN0LGJvb2xlYW4sYnl0ZSxleHRlbmRzLGZpbmFsLGZpbmFsbHksaW1wbGVtZW50cyxpbXBvcnQsaW5zdGFuY2VvZixudWxsLG5hdGl2ZSxwYWNrYWdlLHN0cmljdGZwLHN1cGVyLHN5bmNocm9uaXplZCx0aHJvd3MsdHJhbnNpZW50Il0sCitIPVtHLCJhcyxiYXNlLGJ5LGNoZWNrZWQsZGVjaW1hbCxkZWxlZ2F0ZSxkZXNjZW5kaW5nLGR5bmFtaWMsZXZlbnQsZml4ZWQsZm9yZWFjaCxmcm9tLGdyb3VwLGltcGxpY2l0LGluLGludGVyZmFjZSxpbnRlcm5hbCxpbnRvLGlzLGxvY2ssb2JqZWN0LG91dCxvdmVycmlkZSxvcmRlcmJ5LHBhcmFtcyxwYXJ0aWFsLHJlYWRvbmx5LHJlZixzYnl0ZSxzZWFsZWQsc3RhY2thbGxvYyxzdHJpbmcsc2VsZWN0LHVpbnQsdWxvbmcsdW5jaGVja2VkLHVuc2FmZSx1c2hvcnQsdmFyIl0sdz1bdywiZGVidWdnZXIsZXZhbCxleHBvcnQsZnVuY3Rpb24sZ2V0LG51bGwsc2V0LHVuZGVmaW5lZCx2YXIsd2l0aCxJbmZpbml0eSxOYU4iXSxJPVt2LCJhbmQsYXMsYXNzZXJ0LGNsYXNzLGRlZixkZWwsZWxpZixleGNlcHQsZXhlYyxmaW5hbGx5LGZyb20sZ2xvYmFsLGltcG9ydCxpbixpcyxsYW1iZGEsbm9ubG9jYWwsbm90LG9yLHBhc3MscHJpbnQscmFpc2UsdHJ5LHdpdGgseWllbGQsRmFsc2UsVHJ1ZSxOb25lIl0sCitKPVt2LCJhbGlhcyxhbmQsYmVnaW4sY2FzZSxjbGFzcyxkZWYsZGVmaW5lZCxlbHNpZixlbmQsZW5zdXJlLGZhbHNlLGluLG1vZHVsZSxuZXh0LG5pbCxub3Qsb3IscmVkbyxyZXNjdWUscmV0cnksc2VsZixzdXBlcix0aGVuLHRydWUsdW5kZWYsdW5sZXNzLHVudGlsLHdoZW4seWllbGQsQkVHSU4sRU5EIl0sdj1bdiwiY2FzZSxkb25lLGVsaWYsZXNhYyxldmFsLGZpLGZ1bmN0aW9uLGluLGxvY2FsLHNldCx0aGVuLHVudGlsIl0sSz0vXihESVJ8RklMRXx2ZWN0b3J8KGRlfHByaW9yaXR5Xyk/cXVldWV8bGlzdHxzdGFja3woY29uc3RfKT9pdGVyYXRvcnwobXVsdGkpPyhzZXR8bWFwKXxiaXRzZXR8dT8oaW50fGZsb2F0KVxkKikvLE49L1xTLyxPPXUoe2tleXdvcmRzOltGLEgsdywiY2FsbGVyLGRlbGV0ZSxkaWUsZG8sZHVtcCxlbHNpZixldmFsLGV4aXQsZm9yZWFjaCxmb3IsZ290byxpZixpbXBvcnQsbGFzdCxsb2NhbCxteSxuZXh0LG5vLG91cixwcmludCxwYWNrYWdlLHJlZG8scmVxdWlyZSxzdWIsdW5kZWYsdW5sZXNzLHVudGlsLHVzZSx3YW50YXJyYXksd2hpbGUsQkVHSU4sRU5EIisKK0ksSix2XSxoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksQT17fTtrKE8sWyJkZWZhdWx0LWNvZGUiXSk7ayh4KFtdLFtbInBsbiIsL15bXjw/XSsvXSxbImRlYyIsL148IVx3W14+XSooPzo+fCQpL10sWyJjb20iLC9ePFwhLS1bXFNcc10qPyg/Oi0tXD58JCkvXSxbImxhbmctIiwvXjxcPyhbXFNcc10rPykoPzpcPz58JCkvXSxbImxhbmctIiwvXjwlKFtcU1xzXSs/KSg/OiU+fCQpL10sWyJwdW4iLC9eKD86PFslP118WyU/XT4pL10sWyJsYW5nLSIsL148eG1wXGJbXj5dKj4oW1xTXHNdKz8pPFwveG1wXGJbXj5dKj4vaV0sWyJsYW5nLWpzIiwvXjxzY3JpcHRcYltePl0qPihbXFNcc10qPykoPFwvc2NyaXB0XGJbXj5dKj4pL2ldLFsibGFuZy1jc3MiLC9ePHN0eWxlXGJbXj5dKj4oW1xTXHNdKj8pKDxcL3N0eWxlXGJbXj5dKj4pL2ldLFsibGFuZy1pbi50YWciLC9eKDxcLz9bYS16XVtePD5dKj4pL2ldXSksCitbImRlZmF1bHQtbWFya3VwIiwiaHRtIiwiaHRtbCIsIm14bWwiLCJ4aHRtbCIsInhtbCIsInhzbCJdKTtrKHgoW1sicGxuIiwvXlxzKy8scSwiIFx0XHJcbiJdLFsiYXR2IiwvXig/OiJbXiJdKiI/fCdbXiddKic/KS8scSwiXCInIl1dLFtbInRhZyIsL15ePFwvP1thLXpdKD86W1x3LS46XSpcdyk/fFwvPz4kL2ldLFsiYXRuIiwvXig/IXN0eWxlW1xzPV18b24pW2Etel0oPzpbXHc6LV0qXHcpPy9pXSxbImxhbmctdXEudmFsIiwvXj1ccyooW15ccyInPl0qKD86W15ccyInLz5dfFwvKD89XHMpKSkvXSxbInB1biIsL15bLzwtPl0rL10sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKiIoW14iXSspIi9pXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqJyhbXiddKyknL2ldLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyooW15ccyInPl0rKS9pXSxbImxhbmctY3NzIiwvXnN0eWxlXHMqPVxzKiIoW14iXSspIi9pXSxbImxhbmctY3NzIiwvXnN0eWxlXHMqPVxzKicoW14nXSspJy9pXSxbImxhbmctY3NzIiwKKy9ec3R5bGVccyo9XHMqKFteXHMiJz5dKykvaV1dKSxbImluLnRhZyJdKTtrKHgoW10sW1siYXR2IiwvXltcU1xzXSsvXV0pLFsidXEudmFsIl0pO2sodSh7a2V5d29yZHM6RixoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdHlwZXM6S30pLFsiYyIsImNjIiwiY3BwIiwiY3h4IiwiY3ljIiwibSJdKTtrKHUoe2tleXdvcmRzOiJudWxsLHRydWUsZmFsc2UifSksWyJqc29uIl0pO2sodSh7a2V5d29yZHM6SCxoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdmVyYmF0aW1TdHJpbmdzOiEwLHR5cGVzOkt9KSxbImNzIl0pO2sodSh7a2V5d29yZHM6RyxjU3R5bGVDb21tZW50czohMH0pLFsiamF2YSJdKTtrKHUoe2tleXdvcmRzOnYsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITB9KSxbImJzaCIsImNzaCIsInNoIl0pO2sodSh7a2V5d29yZHM6SSxoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCx0cmlwbGVRdW90ZWRTdHJpbmdzOiEwfSksCitbImN2IiwicHkiXSk7ayh1KHtrZXl3b3JkczoiY2FsbGVyLGRlbGV0ZSxkaWUsZG8sZHVtcCxlbHNpZixldmFsLGV4aXQsZm9yZWFjaCxmb3IsZ290byxpZixpbXBvcnQsbGFzdCxsb2NhbCxteSxuZXh0LG5vLG91cixwcmludCxwYWNrYWdlLHJlZG8scmVxdWlyZSxzdWIsdW5kZWYsdW5sZXNzLHVudGlsLHVzZSx3YW50YXJyYXksd2hpbGUsQkVHSU4sRU5EIixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJwZXJsIiwicGwiLCJwbSJdKTtrKHUoe2tleXdvcmRzOkosaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsicmIiXSk7ayh1KHtrZXl3b3Jkczp3LGNTdHlsZUNvbW1lbnRzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbImpzIl0pO2sodSh7a2V5d29yZHM6ImFsbCxhbmQsYnksY2F0Y2gsY2xhc3MsZWxzZSxleHRlbmRzLGZhbHNlLGZpbmFsbHksZm9yLGlmLGluLGlzLGlzbnQsbG9vcCxuZXcsbm8sbm90LG51bGwsb2Ysb2ZmLG9uLG9yLHJldHVybixzdXBlcix0aGVuLHRydWUsdHJ5LHVubGVzcyx1bnRpbCx3aGVuLHdoaWxlLHllcyIsCitoYXNoQ29tbWVudHM6MyxjU3R5bGVDb21tZW50czohMCxtdWx0aWxpbmVTdHJpbmdzOiEwLHRyaXBsZVF1b3RlZFN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsiY29mZmVlIl0pO2soeChbXSxbWyJzdHIiLC9eW1xTXHNdKy9dXSksWyJyZWdleCJdKTt3aW5kb3cucHJldHR5UHJpbnRPbmU9ZnVuY3Rpb24oYSxtLGUpe3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpO2guaW5uZXJIVE1MPWE7ZSYmRChoLGUpO0Uoe2c6bSxpOmUsaDpofSk7cmV0dXJuIGguaW5uZXJIVE1MfTt3aW5kb3cucHJldHR5UHJpbnQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZT13aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT04/bC5ub3coKSsyNTA6SW5maW5pdHk7cDxoLmxlbmd0aCYmbC5ub3coKTxlO3ArKyl7dmFyIG49aFtwXSxrPW4uY2xhc3NOYW1lO2lmKGsuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7dmFyIGs9ay5tYXRjaChnKSxmLGI7aWYoYj0KKyFrKXtiPW47Zm9yKHZhciBvPXZvaWQgMCxjPWIuZmlyc3RDaGlsZDtjO2M9Yy5uZXh0U2libGluZyl2YXIgaT1jLm5vZGVUeXBlLG89aT09PTE/bz9iOmM6aT09PTM/Ti50ZXN0KGMubm9kZVZhbHVlKT9iOm86bztiPShmPW89PT1iP3ZvaWQgMDpvKSYmIkNPREUiPT09Zi50YWdOYW1lfWImJihrPWYuY2xhc3NOYW1lLm1hdGNoKGcpKTtrJiYoaz1rWzFdKTtiPSExO2ZvcihvPW4ucGFyZW50Tm9kZTtvO289by5wYXJlbnROb2RlKWlmKChvLnRhZ05hbWU9PT0icHJlInx8by50YWdOYW1lPT09ImNvZGUifHxvLnRhZ05hbWU9PT0ieG1wIikmJm8uY2xhc3NOYW1lJiZvLmNsYXNzTmFtZS5pbmRleE9mKCJwcmV0dHlwcmludCIpPj0wKXtiPSEwO2JyZWFrfWJ8fCgoYj0oYj1uLmNsYXNzTmFtZS5tYXRjaCgvXGJsaW5lbnVtc1xiKD86OihcZCspKT8vKSk/YlsxXSYmYlsxXS5sZW5ndGg/K2JbMV06ITA6ITEpJiZEKG4sYiksZD17ZzprLGg6bixpOmJ9LEUoZCkpfX1wPGgubGVuZ3RoP3NldFRpbWVvdXQobSwKKzI1MCk6YSYmYSgpfWZvcih2YXIgZT1bZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjb2RlIiksZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInhtcCIpXSxoPVtdLGs9MDtrPGUubGVuZ3RoOysraylmb3IodmFyIHQ9MCxzPWVba10ubGVuZ3RoO3Q8czsrK3QpaC5wdXNoKGVba11bdF0pO3ZhciBlPXEsbD1EYXRlO2wubm93fHwobD17bm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfX0pO3ZhciBwPTAsZCxnPS9cYmxhbmcoPzp1YWdlKT8tKFtcdy5dKykoPyFcUykvO20oKX07d2luZG93LlBSPXtjcmVhdGVTaW1wbGVMZXhlcjp4LHJlZ2lzdGVyTGFuZ0hhbmRsZXI6ayxzb3VyY2VEZWNvcmF0b3I6dSxQUl9BVFRSSUJfTkFNRToiYXRuIixQUl9BVFRSSUJfVkFMVUU6ImF0diIsUFJfQ09NTUVOVDoiY29tIixQUl9ERUNMQVJBVElPTjoiZGVjIixQUl9LRVlXT1JEOiJrd2QiLFBSX0xJVEVSQUw6ImxpdCIsCitQUl9OT0NPREU6Im5vY29kZSIsUFJfUExBSU46InBsbiIsUFJfUFVOQ1RVQVRJT046InB1biIsUFJfU09VUkNFOiJzcmMiLFBSX1NUUklORzoic3RyIixQUl9UQUc6InRhZyIsUFJfVFlQRToidHlwIn19KSgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3RwYWdlLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3RwYWdlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjcwNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJvamVjdHBhZ2UuanMKQEAgLTAsMCArMSw0MjggQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gcHJvamVjdFBhZ2VJbml0KGN0eCkgeworCisgIHZhciBsYXllckFkZElucHV0ID0gJCgiI2xheWVyLWFkZC1pbnB1dCIpOworICB2YXIgbGF5ZXJzSW5QcmpMaXN0ID0gJCgiI2xheWVycy1pbi1wcm9qZWN0LWxpc3QiKTsKKyAgdmFyIGxheWVyQWRkQnRuID0gJCgiI2FkZC1sYXllci1idG4iKTsKKworICB2YXIgbWFjaGluZUNoYW5nZUlucHV0ID0gJCgiI21hY2hpbmUtY2hhbmdlLWlucHV0Iik7CisgIHZhciBtYWNoaW5lQ2hhbmdlQnRuID0gJCgiI21hY2hpbmUtY2hhbmdlLWJ0biIpOworICB2YXIgbWFjaGluZUZvcm0gPSAkKCIjc2VsZWN0LW1hY2hpbmUtZm9ybSIpOworICB2YXIgbWFjaGluZUNoYW5nZUZvcm1Ub2dnbGUgPSAkKCIjY2hhbmdlLW1hY2hpbmUtdG9nZ2xlIik7CisgIHZhciBtYWNoaW5lTmFtZVRpdGxlID0gJCgiI3Byb2plY3QtbWFjaGluZS1uYW1lIik7CisgIHZhciBtYWNoaW5lQ2hhbmdlQ2FuY2VsID0gJCgiI2NhbmNlbC1tYWNoaW5lLWNoYW5nZSIpOworCisgIHZhciBmcmVxQnVpbGRCdG4gPSAgJCgiI2ZyZXEtYnVpbGQtYnRuIik7CisgIHZhciBmcmVxQnVpbGRMaXN0ID0gJCgiI2ZyZXEtYnVpbGQtbGlzdCIpOworCisgIHZhciByZWxlYXNlQ2hhbmdlRm9ybVRvZ2dsZSA9ICQoIiNyZWxlYXNlLWNoYW5nZS10b2dnbGUiKTsKKyAgdmFyIHJlbGVhc2VUaXRsZSA9ICQoIiNwcm9qZWN0LXJlbGVhc2UtdGl0bGUiKTsKKyAgdmFyIHJlbGVhc2VGb3JtID0gJCgiI2NoYW5nZS1yZWxlYXNlLWZvcm0iKTsKKyAgdmFyIHJlbGVhc2VNb2RhbCA9ICQoIiNjaGFuZ2UtcmVsZWFzZS1tb2RhbCIpOworICB2YXIgY2FuY2VsUmVsZWFzZUNoYW5nZSA9ICQoIiNjYW5jZWwtcmVsZWFzZS1jaGFuZ2UiKTsKKworICB2YXIgY3VycmVudExheWVyQWRkU2VsZWN0aW9uOworICB2YXIgY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24gPSB7fTsKKworICB2YXIgdXJsUGFyYW1zID0gbGlidG9hc3Rlci5wYXJzZVVybFBhcmFtcygpOworCisgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsIGZ1bmN0aW9uKHByakluZm8peworICAgIHVwZGF0ZVByb2plY3RMYXllcnMocHJqSW5mby5sYXllcnMpOworICAgIHVwZGF0ZUZyZXFCdWlsZFJlY2lwZXMocHJqSW5mby5mcmVxdGFyZ2V0cyk7CisgICAgdXBkYXRlUHJvamVjdFJlbGVhc2UocHJqSW5mby5yZWxlYXNlKTsKKyAgICB1cGRhdGVQcm9qZWN0UmVsZWFzZXMocHJqSW5mby5yZWxlYXNlcywgcHJqSW5mby5yZWxlYXNlKTsKKworICAgIC8qIElmIHdlJ3JlIHJlY2VpdmluZyBhIG1hY2hpbmUgc2V0IGZyb20gdGhlIHVybCBhbmQgaXQncyBkaWZmZXJlbnQgZnJvbQorICAgICAqIG91ciBjdXJyZW50IG1hY2hpbmUgdGhlbiBhY3RpdmF0ZSBzZXQgbWFjaGluZSBzZXF1ZW5jZS4KKyAgICAgKi8KKyAgICBpZiAodXJsUGFyYW1zLmhhc093blByb3BlcnR5KCdzZXRNYWNoaW5lJykgJiYKKyAgICAgICAgdXJsUGFyYW1zLnNldE1hY2hpbmUgIT09IHByakluZm8ubWFjaGluZS5uYW1lKXsKKyAgICAgICAgY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24ubmFtZSA9IHVybFBhcmFtcy5zZXRNYWNoaW5lOworICAgICAgICBtYWNoaW5lQ2hhbmdlQnRuLmNsaWNrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHVwZGF0ZU1hY2hpbmVOYW1lKHByakluZm8ubWFjaGluZS5uYW1lKTsKKyAgICB9CisKKyAgIC8qIE5vdyB3ZSdyZSByZWFsbHkgcmVhZHkgc2hvdyB0aGUgcGFnZSAqLworICAgICQoIiNwcm9qZWN0LXBhZ2UiKS5zaG93KCk7CisgIH0pOworCisgIChmdW5jdGlvbiBub3RpZmljYXRpb25SZXF1ZXN0KCl7CisKKyAgICBpZiAodXJsUGFyYW1zLmhhc093blByb3BlcnR5KCdub3RpZnknKSl7CisgICAgICBzd2l0Y2ggKHVybFBhcmFtcy5ub3RpZnkpeworICAgICAgICBjYXNlICduZXctcHJvamVjdCc6CisgICAgICAgICAgJCgiI3Byb2plY3QtY3JlYXRlZC1ub3RpZmljYXRpb24iKS5zaG93KCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2xheWVyLWltcG9ydGVkJzoKKyAgICAgICAgICBsYXllckltcG9ydGVkTm90aWZpY2F0aW9uKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9KSgpOworCisgIC8qIExheWVyIGltcG9ydGVkIG5vdGlmaWNhdGlvbiAqLworICBmdW5jdGlvbiBsYXllckltcG9ydGVkTm90aWZpY2F0aW9uKCl7CisgICAgdmFyIGltcG9ydGVkID0gJC5jb29raWUoImxheWVyLWltcG9ydGVkLWFsZXJ0Iik7CisgICAgdmFyIG1lc3NhZ2UgPSAiTGF5ZXIgaW1wb3J0ZWQiOworCisgICAgaWYgKCFpbXBvcnRlZCkKKyAgICAgIHJldHVybjsKKyAgICBlbHNlCisgICAgICBpbXBvcnRlZCA9IEpTT04ucGFyc2UoaW1wb3J0ZWQpOworCisgICAgaWYgKGltcG9ydGVkLmRlcHNfYWRkZWQubGVuZ3RoID09PSAwKSB7CisgICAgICBtZXNzYWdlID0gIllvdSBoYXZlIGltcG9ydGVkIDxzdHJvbmc+PGEgaHJlZj1cIiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrIlwiPiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubmFtZSsiPC9hPjwvc3Ryb25nPiBhbmQgYWRkZWQgaXQgdG8geW91ciBwcm9qZWN0LiI7CisgICAgfSBlbHNlIHsKKworICAgICAgdmFyIGxpbmtzID0gIjxhIGhyZWY9XCIiK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLmxheWVyZGV0YWlsdXJsKyJcIj4iK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLm5hbWUrIjwvYT4sICI7CisKKyAgICAgIGltcG9ydGVkLmRlcHNfYWRkZWQubWFwIChmdW5jdGlvbihpdGVtLCBpbmRleCl7CisgICAgICAgIGxpbmtzICs9JzxhIGhyZWY9IicraXRlbS5sYXllcmRldGFpbHVybCsnIj4nK2l0ZW0ubmFtZSsnPC9hPic7CisgICAgICAgIC8qSWYgd2UncmUgYXQgdGhlIGxhc3QgZWxlbWVudCB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBjb21tYSAqLworICAgICAgICBpZiAoaW1wb3J0ZWQuZGVwc19hZGRlZFtpbmRleCsxXSAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgIGxpbmtzICs9ICcsICc7CisgICAgICB9KTsKKworICAgICAgLyogTGVuZ3RoICsgMSBoZXJlIHRvIGRvIGRlcHMgKyB0aGUgaW1wb3J0ZWQgbGF5ZXIgKi8KKyAgICAgIG1lc3NhZ2UgPSAnWW91IGhhdmUgaW1wb3J0ZWQgPHN0cm9uZz48YSBocmVmPSInK2ltcG9ydGVkLmltcG9ydGVkX2xheWVyLmxheWVyZGV0YWlsdXJsKyciPicraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubmFtZSsnPC9hPjwvc3Ryb25nPiBhbmQgYWRkZWQgPHN0cm9uZz4nKyhpbXBvcnRlZC5kZXBzX2FkZGVkLmxlbmd0aCsxKSsnPC9zdHJvbmc+IGxheWVycyB0byB5b3VyIHByb2plY3Q6IDxzdHJvbmc+JytsaW5rcysnPC9zdHJvbmc+JzsKKyAgICB9CisKKyAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSk7CisKKyAgICAkLnJlbW92ZUNvb2tpZSgibGF5ZXItaW1wb3J0ZWQtYWxlcnQiLCB7IHBhdGg6ICIvIn0pOworICB9CisKKyAgLyogQWRkL1JtIGxheWVyIGZ1bmN0aW9uYWxpdHkgKi8KKworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobGF5ZXJBZGRJbnB1dCwgbGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLCB7IGluY2x1ZGVfYWRkZWQ6ICJmYWxzZSIgfSwgZnVuY3Rpb24oaXRlbSl7CisgICAgY3VycmVudExheWVyQWRkU2VsZWN0aW9uID0gaXRlbTsKKyAgICBsYXllckFkZEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICB9KTsKKworICBsYXllckFkZEJ0bi5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgdmFyIGxheWVyT2JqID0gY3VycmVudExheWVyQWRkU2VsZWN0aW9uOworCisgICAgYWRkUm1MYXllcihsYXllck9iaiwgdHJ1ZSk7CisgICAgLyogUmVzZXQgdGhlIHRleHQgaW5wdXQgKi8KKyAgICBsYXllckFkZElucHV0LnZhbCgiIik7CisgIH0pOworCisgIGZ1bmN0aW9uIGFkZFJtTGF5ZXIobGF5ZXJPYmosIGFkZCl7CisKKyAgICBsaWJ0b2FzdGVyLmFkZFJtTGF5ZXIobGF5ZXJPYmosIGFkZCwgZnVuY3Rpb24obGF5ZXJEZXBzTGlzdCl7CisgICAgICBpZiAoYWRkKXsKKyAgICAgICAgdXBkYXRlUHJvamVjdExheWVycyhbbGF5ZXJPYmpdKTsKKyAgICAgICAgdXBkYXRlUHJvamVjdExheWVycyhsYXllckRlcHNMaXN0KTsKKyAgICAgIH0KKworICAgICAgLyogU2hvdyB0aGUgYWxlcnQgbWVzc2FnZSAqLworICAgICAgdmFyIG1lc3NhZ2UgPSBsaWJ0b2FzdGVyLm1ha2VMYXllckFkZFJtQWxlcnRNc2cobGF5ZXJPYmosIGxheWVyRGVwc0xpc3QsIGFkZCk7CisgICAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSk7CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0TGF5ZXJzKGxheWVycyl7CisKKyAgICAvKiBObyBsYXllcnMgdG8gYWRkICovCisgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDApeworICAgICAgdXBkYXRlTGF5ZXJzQ291bnQoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpIGluIGxheWVycyl7CisgICAgICB2YXIgbGF5ZXJPYmogPSBsYXllcnNbaV07CisKKyAgICAgIHZhciBwcm9qZWN0TGF5ZXIgPSAkKCI8bGk+PGE+PC9hPjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiRGVsZXRlXCI+PC9zcGFuPjwvbGk+Iik7CisKKyAgICAgIHByb2plY3RMYXllci5kYXRhKCdsYXllcicsIGxheWVyT2JqKTsKKyAgICAgIHByb2plY3RMYXllci5jaGlsZHJlbigic3BhbiIpLnRvb2x0aXAoKTsKKworICAgICAgdmFyIGxpbmsgPSBwcm9qZWN0TGF5ZXIuY2hpbGRyZW4oImEiKTsKKworICAgICAgbGluay5hdHRyKCJocmVmIiwgbGF5ZXJPYmoubGF5ZXJkZXRhaWx1cmwpOworICAgICAgbGluay50ZXh0KGxheWVyT2JqLm5hbWUpOworICAgICAgLyogWU9DVE8gIzgwMjQKKyAgICAgICAgbGluay50b29sdGlwKHt0aXRsZTogbGF5ZXJPYmouZ2l0dXJsICsgIiB8ICIrIGxheWVyT2JqLmJyYW5jaC5uYW1lLCBwbGFjZW1lbnQ6ICJyaWdodCJ9KTsKKyAgICAgICAgYnJhbmNoIG5hbWUgbm90IGFjY2Vzc2libGUgc29tZXRpbWVzIGl0IGlzIHJldmlzaW9uIGluc3RlYWQKKyAgICAgICovCisKKyAgICAgIHZhciB0cmFzaEl0ZW0gPSBwcm9qZWN0TGF5ZXIuY2hpbGRyZW4oInNwYW4iKTsKKyAgICAgIHRyYXNoSXRlbS5jbGljayhmdW5jdGlvbiAoZSkgeworICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIHZhciBsYXllck9ialRvUm0gPSAkKHRoaXMpLnBhcmVudCgpLmRhdGEoJ2xheWVyJyk7CisKKyAgICAgICAgYWRkUm1MYXllcihsYXllck9ialRvUm0sIGZhbHNlKTsKKworICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZhZGVPdXQoZnVuY3Rpb24gKCl7CisgICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKKyAgICAgICAgICB1cGRhdGVMYXllcnNDb3VudCgpOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBsYXllcnNJblByakxpc3QuYXBwZW5kKHByb2plY3RMYXllcik7CisKKyAgICAgIHVwZGF0ZUxheWVyc0NvdW50KCk7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlTGF5ZXJzQ291bnQoKXsKKyAgICB2YXIgY291bnQgPSAkKCIjbGF5ZXJzLWluLXByb2plY3QtbGlzdCIpLmNoaWxkcmVuKCkubGVuZ3RoOworCisgICAgaWYgKGNvdW50ID09PSAwKQorICAgICAgJCgiI25vLWxheWVycy1pbi1wcm9qZWN0IikuZmFkZUluKCk7CisgICAgZWxzZQorICAgICAgJCgiI25vLWxheWVycy1pbi1wcm9qZWN0IikuaGlkZSgpOworCisgICAgJCgiI3Byb2plY3QtbGF5ZXJzLWNvdW50IikudGV4dChjb3VudCk7CisKKyAgICByZXR1cm4gY291bnQ7CisgIH0KKworICAvKiBGcmVxdWVudCBidWlsZHMgZnVuY3Rpb25hbGl0eSAqLworICBmdW5jdGlvbiB1cGRhdGVGcmVxQnVpbGRSZWNpcGVzKHJlY2lwZXMpIHsKKyAgICB2YXIgbm9Nb3N0QnVpbHQgPSAkKCIjbm8tbW9zdC1idWlsdCIpOworCisgICAgaWYgKHJlY2lwZXMubGVuZ3RoID09PSAwKXsKKyAgICAgIG5vTW9zdEJ1aWx0LnNob3coKTsKKyAgICAgIGZyZXFCdWlsZEJ0bi5oaWRlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIG5vTW9zdEJ1aWx0LmhpZGUoKTsKKyAgICAgIGZyZXFCdWlsZEJ0bi5zaG93KCk7CisgICAgfQorCisgICAgZm9yICh2YXIgaSBpbiByZWNpcGVzKXsKKyAgICAgIHZhciBmcmVxVGFyZ2V0Q2hlY2sgPSAkKCc8bGk+PGxhYmVsIGNsYXNzPSJjaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiAvPjxzcGFuIGNsYXNzPSJmcmVxLXRhcmdldC1uYW1lIj48L3NwYW4+PC9sYWJlbD48L2xpPicpOworICAgICAgZnJlcVRhcmdldENoZWNrLmZpbmQoIi5mcmVxLXRhcmdldC1uYW1lIikudGV4dChyZWNpcGVzW2ldKTsKKyAgICAgIGZyZXFUYXJnZXRDaGVjay5maW5kKCJpbnB1dCIpLnZhbChyZWNpcGVzW2ldKTsKKyAgICAgIGZyZXFUYXJnZXRDaGVjay5jbGljayhmdW5jdGlvbigpeworICAgICAgICBpZiAoZnJlcUJ1aWxkTGlzdC5maW5kKCI6Y2hlY2tlZCIpLmxlbmd0aCA+IDApCisgICAgICAgICAgZnJlcUJ1aWxkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmcmVxQnVpbGRCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICAgIH0pOworCisgICAgICBmcmVxQnVpbGRMaXN0LmFwcGVuZChmcmVxVGFyZ2V0Q2hlY2spOworICAgIH0KKyAgfQorCisgIGZyZXFCdWlsZEJ0bi5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICB2YXIgdG9CdWlsZCA9ICIiOworICAgIGZyZXFCdWlsZExpc3QuZmluZCgiOmNoZWNrZWQiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICB0b0J1aWxkICs9ICQodGhpcykudmFsKCk7CisgICAgfSk7CisKKyAgICBsaWJ0b2FzdGVyLnN0YXJ0QUJ1aWxkKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RCdWlsZHNVcmwsIGxpYnRvYXN0ZXIuY3R4LnByb2plY3RJZCwgdG9CdWlsZCwgZnVuY3Rpb24oKXsKKyAgICAgIC8qIEJ1aWxkIHN0YXJ0ZWQgKi8KKyAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RCdWlsZHNVcmwpOworICAgIH0sCisgICAgZnVuY3Rpb24oKXsKKyAgICAgIC8qIEJ1aWxkIHN0YXJ0IGZhaWxlZCAqLworICAgICAgLyogW1lPQ1RPICM3OTk1XSAqLworICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCk7CisgICAgfSk7CisgIH0pOworCisKKyAgLyogQ2hhbmdlIG1hY2hpbmUgZnVuY3Rpb25hbGl0eSAqLworCisgIG1hY2hpbmVDaGFuZ2VGb3JtVG9nZ2xlLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgbWFjaGluZUZvcm0uc2xpZGVEb3duKCk7CisgICAgbWFjaGluZU5hbWVUaXRsZS5oaWRlKCk7CisgICAgJCh0aGlzKS5oaWRlKCk7CisgIH0pOworCisgIG1hY2hpbmVDaGFuZ2VDYW5jZWwuY2xpY2soZnVuY3Rpb24oKXsKKyAgICBtYWNoaW5lRm9ybS5zbGlkZVVwKGZ1bmN0aW9uKCl7CisgICAgICBtYWNoaW5lTmFtZVRpdGxlLnNob3coKTsKKyAgICAgIG1hY2hpbmVDaGFuZ2VGb3JtVG9nZ2xlLnNob3coKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gdXBkYXRlTWFjaGluZU5hbWUobWFjaGluZU5hbWUpeworICAgIG1hY2hpbmVDaGFuZ2VJbnB1dC52YWwobWFjaGluZU5hbWUpOworICAgIG1hY2hpbmVOYW1lVGl0bGUudGV4dChtYWNoaW5lTmFtZSk7CisgIH0KKworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobWFjaGluZUNoYW5nZUlucHV0LCBsaWJ0b2FzdGVyLmN0eC5tYWNoaW5lc1R5cGVBaGVhZFVybCwgeyB9LCBmdW5jdGlvbihpdGVtKXsKKyAgICBjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbiA9IGl0ZW07CisgICAgbWFjaGluZUNoYW5nZUJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICB9KTsKKworICBtYWNoaW5lQ2hhbmdlQnRuLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICBpZiAoY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24ubmFtZSA9PT0gdW5kZWZpbmVkKQorICAgICAgcmV0dXJuOworCisgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoeyBtYWNoaW5lTmFtZSA6IGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uLm5hbWUgfSwKKyAgICAgIGZ1bmN0aW9uKCl7CisgICAgICAgIC8qIFN1Y2Nlc3MgbWFjaGluZSBjaGFuZ2VkICovCisgICAgICAgIHVwZGF0ZU1hY2hpbmVOYW1lKGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uLm5hbWUpOworICAgICAgICBtYWNoaW5lQ2hhbmdlQ2FuY2VsLmNsaWNrKCk7CisKKyAgICAgICAgLyogU2hvdyB0aGUgYWxlcnQgbWVzc2FnZSAqLworICAgICAgICB2YXIgbWVzc2FnZSA9ICQoJzxzcGFuIGNsYXNzPSJsZWFkIj5Zb3UgaGF2ZSBjaGFuZ2VkIHRoZSBtYWNoaW5lIHRvOiA8c3Ryb25nPjxzcGFuIGlkPSJub3RpZnktbWFjaGluZS1uYW1lIj48L3NwYW4+PC9zdHJvbmc+PC9zcGFuPicpOworICAgICAgICBtZXNzYWdlLmZpbmQoIiNub3RpZnktbWFjaGluZS1uYW1lIikudGV4dChjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbi5uYW1lKTsKKyAgICAgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworICAgIH0sCisgICAgICBmdW5jdGlvbigpeworICAgICAgICAvKiBGYWlsZWQgbWFjaGluZSBjaGFuZ2VkICovCisgICAgICAgIGNvbnNvbGUubG9nKCJmYWlsZWQgdG8gY2hhbmdlIG1hY2hpbmUiKTsKKyAgICB9KTsKKyAgfSk7CisKKworICAvKiBDaGFuZ2UgcmVsZWFzZSBmdW5jdGlvbmFsaXR5ICovCisgIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RSZWxlYXNlKHJlbGVhc2UpeworICAgIHJlbGVhc2VUaXRsZS50ZXh0KHJlbGVhc2UuZGVzY3JpcHRpb24pOworICB9CisKKyAgZnVuY3Rpb24gdXBkYXRlUHJvamVjdFJlbGVhc2VzKHJlbGVhc2VzLCBjdXJyZW50KXsKKyAgICBmb3IgKHZhciBpIGluIHJlbGVhc2VzKXsKKyAgICAgIHZhciByZWxlYXNlT3B0aW9uID0gJCgiPG9wdGlvbj48L29wdGlvbj4iKTsKKworICAgICAgcmVsZWFzZU9wdGlvbi52YWwocmVsZWFzZXNbaV0uaWQpOworICAgICAgcmVsZWFzZU9wdGlvbi50ZXh0KHJlbGVhc2VzW2ldLmRlc2NyaXB0aW9uKTsKKyAgICAgIHJlbGVhc2VPcHRpb24uZGF0YSgncmVsZWFzZScsIHJlbGVhc2VzW2ldKTsKKworICAgICAgaWYgKHJlbGVhc2VzW2ldLmlkID09IGN1cnJlbnQuaWQpCisgICAgICAgIHJlbGVhc2VPcHRpb24uYXR0cigic2VsZWN0ZWQiLCAic2VsZWN0ZWQiKTsKKworICAgICAgcmVsZWFzZUZvcm0uY2hpbGRyZW4oInNlbGVjdCIpLmFwcGVuZChyZWxlYXNlT3B0aW9uKTsKKyAgICB9CisgIH0KKworICByZWxlYXNlQ2hhbmdlRm9ybVRvZ2dsZS5jbGljayhmdW5jdGlvbigpeworICAgIHJlbGVhc2VGb3JtLnNsaWRlRG93bigpOworICAgIHJlbGVhc2VUaXRsZS5oaWRlKCk7CisgICAgJCh0aGlzKS5oaWRlKCk7CisgIH0pOworCisgIGNhbmNlbFJlbGVhc2VDaGFuZ2UuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIHJlbGVhc2VGb3JtLnNsaWRlVXAoZnVuY3Rpb24oKXsKKyAgICAgIHJlbGVhc2VUaXRsZS5zaG93KCk7CisgICAgICByZWxlYXNlQ2hhbmdlRm9ybVRvZ2dsZS5zaG93KCk7CisgICAgfSk7CisgIH0pOworCisgIGZ1bmN0aW9uIGNoYW5nZVByb2plY3RSZWxlYXNlKHJlbGVhc2UsIGxheWVyc1RvUm0peworICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgcHJvamVjdFZlcnNpb24gOiByZWxlYXNlLmlkIH0sCisgICAgICBmdW5jdGlvbigpeworICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgIC8qIFVwZGF0ZSBsYXllcnMgbGlzdCB3aXRoIG5ldyBsYXllcnMgKi8KKyAgICAgICAgbGF5ZXJzSW5QcmpMaXN0LmFkZENsYXNzKCdtdXRlZCcpOworICAgICAgICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLAorICAgICAgICAgICAgZnVuY3Rpb24ocHJqSW5mbyl7CisgICAgICAgICAgICAgIGxheWVyc0luUHJqTGlzdC5jaGlsZHJlbigpLnJlbW92ZSgpOworICAgICAgICAgICAgICB1cGRhdGVQcm9qZWN0TGF5ZXJzKHByakluZm8ubGF5ZXJzKTsKKyAgICAgICAgICAgICAgbGF5ZXJzSW5QcmpMaXN0LnJlbW92ZUNsYXNzKCdtdXRlZCcpOworICAgICAgICAgICAgICByZWxlYXNlQ2hhbmdlZE5vdGlmaWNhdGlvbihyZWxlYXNlLCBwcmpJbmZvLmxheWVycywgbGF5ZXJzVG9SbSk7CisgICAgICAgIH0pOworICAgICAgICB1cGRhdGVQcm9qZWN0UmVsZWFzZShyZWxlYXNlKTsKKyAgICAgICAgY2FuY2VsUmVsZWFzZUNoYW5nZS5jbGljaygpOworICAgIH0pOworICB9CisKKyAgLyogQ3JlYXRlIGEgbm90aWZpY2F0aW9uIHRvIHNob3cgdGhlIGNoYW5nZXMgdG8gdGhlIGxheWVyIGNvbmZpZ3VyYXRpb24KKyAgICogY2F1c2VkIGJ5IGNoYW5naW5nIGEgcmVsZWFzZS4KKyAgICovCisKKyAgZnVuY3Rpb24gcmVsZWFzZUNoYW5nZWROb3RpZmljYXRpb24ocmVsZWFzZSwgbGF5ZXJzLCBsYXllcnNUb1JtKXsKKworICAgIHZhciBtZXNzYWdlOworCisgICAgaWYgKGxheWVycy5sZW5ndGggPT09IDAgJiYgbGF5ZXJzVG9SbS5sZW5ndGggPT09IDApeworICAgICAgbWVzc2FnZSA9ICQoJzxzcGFuPjxzcGFuIGNsYXNzPSJsZWFkIj5Zb3UgaGF2ZSBjaGFuZ2VkIHRoZSBwcm9qZWN0IHJlbGVhc2UgdG86IDxzdHJvbmc+PHNwYW4gaWQ9Im5vdGlmeS1yZWxlYXNlLW5hbWUiPjwvc3Bhbj48L3N0cm9uZz4uJyk7CisgICAgICBtZXNzYWdlLmZpbmQoIiNub3RpZnktcmVsZWFzZS1uYW1lIikudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKKyAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgdGhlIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgbGF5ZXJzIHJlbW92ZWQgKi8KKyAgICB2YXIgbGF5ZXJzRGVsTGlzdCA9ICIiOworCisgICAgbGF5ZXJzVG9SbS5tYXAoZnVuY3Rpb24obGF5ZXIsIGkpeworICAgICAgbGF5ZXJzRGVsTGlzdCArPSBsYXllci5uYW1lOworICAgICAgaWYgKGxheWVyc1RvUm1baSsxXSAhPT0gdW5kZWZpbmVkKQorICAgICAgICBsYXllcnNEZWxMaXN0ICs9ICcsICc7CisgICAgfSk7CisKKyAgICBtZXNzYWdlID0gJCgnPHNwYW4+PHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlIGNoYW5nZWQgdGhlIHByb2plY3QgcmVsZWFzZSB0bzogPHN0cm9uZz48c3BhbiBpZD0ibm90aWZ5LXJlbGVhc2UtbmFtZSI+PC9zcGFuPjwvc3Ryb25nPi4gVGhpcyBoYXMgY2F1c2VkIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBpbiB5b3VyIHByb2plY3QgbGF5ZXJzOjwvc3Bhbj48dWwgaWQ9Im5vdGlmeS1sYXllcnMtY2hhbmdlZC1saXN0Ij48L3VsPjwvc3Bhbj4nKTsKKworICAgIHZhciBjaGFuZ2VkTGlzdCA9IG1lc3NhZ2UuZmluZCgiI25vdGlmeS1sYXllcnMtY2hhbmdlZC1saXN0Iik7CisKKyAgICBtZXNzYWdlLmZpbmQoIiNub3RpZnktcmVsZWFzZS1uYW1lIikudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKKworICAgIC8qIE1hbnVhbGx5IGNvbnN0cnVjdCB0aGUgbGlzdCBpdGVtIGZvciBjaGFuZ2VkIGxheWVycyAqLworICAgIHZhciBsaSA9ICc8bGk+PHN0cm9uZz4nK2xheWVycy5sZW5ndGgrJzwvc3Ryb25nPiBsYXllcnMgY2hhbmdlZCB0byB0aGUgPHN0cm9uZz4nK3JlbGVhc2UubmFtZSsnPC9zdHJvbmc+IHJlbGVhc2U6ICc7CisgICAgZm9yICh2YXIgaSBpbiBsYXllcnMpeworICAgICAgbGkgKz0gJzxhIGhyZWY9JytsYXllcnNbaV0ubGF5ZXJkZXRhaWx1cmwrJz4nK2xheWVyc1tpXS5uYW1lKyc8L2E+JzsKKyAgICAgIGlmIChpICE9PSAwKQorICAgICAgICBsaSArPSAnLCAnOworICAgIH0KKworICAgIGNoYW5nZWRMaXN0LmFwcGVuZCgkKGxpKSk7CisKKyAgICAvKiBMYXllcnMgcmVtb3ZlZCAqLworICAgIGlmIChsYXllcnNUb1JtICYmIGxheWVyc1RvUm0ubGVuZ3RoID4gMCl7CisgICAgICBpZiAobGF5ZXJzVG9SbS5sZW5ndGggPT0gMSkKKyAgICAgICAgbGkgPSAnPGxpPjxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciBkZWxldGVkOiAnK2xheWVyc1RvUm1bMF0ubmFtZSsnPC9saT4nOworICAgICAgZWxzZQorICAgICAgICBsaSA9ICc8bGk+PHN0cm9uZz4nK2xheWVyc1RvUm0ubGVuZ3RoKyc8L3N0cm9uZz4gbGF5ZXJzIGRlbGV0ZWQ6ICcrbGF5ZXJzRGVsTGlzdCsnPC9saT4nOworCisgICAgICBjaGFuZ2VkTGlzdC5hcHBlbmQoJChsaSkpOworICAgIH0KKworICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKKyAgfQorCisgIC8qIFNob3cgdGhlIG1vZGFsIGRpYWxvZyB3aGljaCBnaXZlcyB0aGUgb3B0aW9uIHRvIHJlbW92ZSBsYXllcnMgd2hpY2gKKyAgICogYXJlbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvcG9zZWQgcmVsZWFzZQorICAgKi8KKyAgZnVuY3Rpb24gc2hvd1JlbGVhc2VMYXllckNoYW5nZU1vZGFsKHJlbGVhc2UsIGxheWVycyl7CisgICAgdmFyIGxheWVyc1RvUm1MaXN0ID0gcmVsZWFzZU1vZGFsLmZpbmQoIiNsYXllcnMtdG8tcmVtb3ZlLWxpc3QiKTsKKyAgICBsYXllcnNUb1JtTGlzdC50ZXh0KCIiKTsKKworICAgIHJlbGVhc2VNb2RhbC5maW5kKCIucHJvcG9zZWQtcmVsZWFzZS1jaGFuZ2UtbmFtZSIpLnRleHQocmVsZWFzZS5kZXNjcmlwdGlvbik7CisgICAgcmVsZWFzZU1vZGFsLmRhdGEoImxheWVycyIsIGxheWVycyk7CisgICAgcmVsZWFzZU1vZGFsLmRhdGEoInJlbGVhc2UiLCByZWxlYXNlKTsKKworICAgIGZvciAodmFyIGkgaW4gbGF5ZXJzKXsKKyAgICAgIGxheWVyc1RvUm1MaXN0LmFwcGVuZCgkKCI8bGk+PC9saT4iKS50ZXh0KGxheWVyc1tpXS5uYW1lKSk7CisgICAgfQorICAgIHJlbGVhc2VNb2RhbC5tb2RhbCgnc2hvdycpOworICB9CisKKyAgJCgiI2NoYW5nZS1yZWxlYXNlLWJ0biIpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKworICAgIHZhciBuZXdSZWxlYXNlID0gcmVsZWFzZUZvcm0uZmluZCgib3B0aW9uOnNlbGVjdGVkIikuZGF0YSgncmVsZWFzZScpOworCisgICAgJC5nZXRKU09OKGN0eC50ZXN0UmVsZWFzZUNoYW5nZVVybCwKKyAgICAgIHsgbmV3X3JlbGVhc2VfaWQ6IG5ld1JlbGVhc2UuaWQgfSwKKyAgICAgIGZ1bmN0aW9uKGxheWVycykgeworICAgICAgICBpZiAobGF5ZXJzLnJvd3MubGVuZ3RoID09PSAwKXsKKyAgICAgICAgICAvKiBObyBsYXllcnMgdG8gY2hhbmdlIGZvciB0aGlzIHJlbGVhc2UgKi8KKyAgICAgICAgICBjaGFuZ2VQcm9qZWN0UmVsZWFzZShuZXdSZWxlYXNlLCBbXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2hvd1JlbGVhc2VMYXllckNoYW5nZU1vZGFsKG5ld1JlbGVhc2UsIGxheWVycy5yb3dzKTsKKyAgICAgICAgfQorICAgIH0pOworICB9KTsKKworICAvKiBSZWxlYXNlIGNoYW5nZSBtb2RhbCBhY2NlcHQgKi8KKyAgJCgiI2NoYW5nZS1yZWxlYXNlLWFuZC1ybS1sYXllcnMiKS5jbGljayhmdW5jdGlvbigpeworICAgIHZhciBsYXllcnMgPSByZWxlYXNlTW9kYWwuZGF0YSgibGF5ZXJzIik7CisgICAgdmFyIHJlbGVhc2UgPSAgcmVsZWFzZU1vZGFsLmRhdGEoInJlbGVhc2UiKTsKKworICAgIGNoYW5nZVByb2plY3RSZWxlYXNlKHJlbGVhc2UsIGxheWVycyk7CisgIH0pOworCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGFibGUuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MDM0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy90YWJsZS5qcwpAQCAtMCwwICsxLDU1NCBAQAorJ3VzZSBzdHJpY3QnOworCitmdW5jdGlvbiB0YWJsZUluaXQoY3R4KXsKKworICBpZiAoY3R4LnVybC5sZW5ndGggPT09IDApIHsKKyAgICB0aHJvdyAiTm8gdXJsIHN1cHBsaWVkIGZvciByZXRyZWl2aW5nIGRhdGEiOworICB9CisKKyAgdmFyIHRhYmxlQ2hyb21lRG9uZSA9IGZhbHNlOworICB2YXIgdGFibGVUb3RhbCA9IDA7CisKKyAgdmFyIHRhYmxlUGFyYW1zID0geworICAgIGxpbWl0IDogMjUsCisgICAgcGFnZSA6IDEsCisgICAgb3JkZXJieSA6IG51bGwsCisgICAgZmlsdGVyIDogbnVsbCwKKyAgICBzZWFyY2ggOiBudWxsLAorICB9OworCisgIHZhciBkZWZhdWx0SGlkZGVuQ29scyA9IFtdOworCisgIHZhciB0YWJsZSA9ICAkKCIjIiArIGN0eC50YWJsZU5hbWUpOworCisgIC8qIGlmIHdlJ3JlIGxvYWRpbmcgY2xlYW4gZnJvbSBhIHVybCB1c2UgaXQncyBwYXJhbWV0ZXJzIGFzIHRoZSBkZWZhdWx0ICovCisgIHZhciB1cmxQYXJhbXMgPSBsaWJ0b2FzdGVyLnBhcnNlVXJsUGFyYW1zKCk7CisKKyAgLyogTWVyZ2UgdGhlIHRhYmxlUGFyYW1zIGFuZCB1cmxQYXJhbXMgb2JqZWN0IHByb3BlcnRpZXMgICovCisgIHRhYmxlUGFyYW1zID0gJC5leHRlbmQodGFibGVQYXJhbXMsIHVybFBhcmFtcyk7CisKKyAgLyogTm93IGZpeCB0aGUgdHlwZXMgdGhhdCAuZXh0ZW5kIGNoYW5nZWQgZm9yIHVzICovCisgIHRhYmxlUGFyYW1zLmxpbWl0ID0gTnVtYmVyKHRhYmxlUGFyYW1zLmxpbWl0KTsKKyAgdGFibGVQYXJhbXMucGFnZSA9IE51bWJlcih0YWJsZVBhcmFtcy5wYWdlKTsKKworICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisKKyAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbihldmVudCl7CisgICAgaWYgKGV2ZW50LnN0YXRlKXsKKyAgICAgIHRhYmxlUGFyYW1zID0gZXZlbnQuc3RhdGUudGFibGVQYXJhbXM7CisgICAgICAvKiBXZSBza2lwIGxvYWREYXRhIGFuZCBqdXN0IHVwZGF0ZSB0aGUgdGFibGUgKi8KKyAgICAgIHVwZGF0ZVRhYmxlKGV2ZW50LnN0YXRlLnRhYmxlRGF0YSk7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIGxvYWREYXRhKHRhYmxlUGFyYW1zKXsKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgdXJsOiBjdHgudXJsLAorICAgICAgICBkYXRhOiB0YWJsZVBhcmFtcywKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24odGFibGVEYXRhKSB7CisgICAgICAgICAgdXBkYXRlVGFibGUodGFibGVEYXRhKTsKKyAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoeworICAgICAgICAgICAgICB0YWJsZURhdGE6IHRhYmxlRGF0YSwKKyAgICAgICAgICAgICAgdGFibGVQYXJhbXM6IHRhYmxlUGFyYW1zCisgICAgICAgICAgfSwgbnVsbCwgbGlidG9hc3Rlci5kdW1wc1VybFBhcmFtcyh0YWJsZVBhcmFtcykpOworICAgICAgICB9CisgICAgfSk7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVUYWJsZSh0YWJsZURhdGEpIHsKKyAgICB2YXIgdGFibGVCb2R5ID0gdGFibGUuY2hpbGRyZW4oInRib2R5Iik7CisgICAgdmFyIHBhZ2luYXRpb24gPSAkKCcjcGFnaW5hdGlvbi0nK2N0eC50YWJsZU5hbWUpOworICAgIHZhciBwYWdpbmF0aW9uQnRucyA9IHBhZ2luYXRpb24uY2hpbGRyZW4oJ3VsJyk7CisgICAgdmFyIHRhYmxlQ29udGFpbmVyID0gJCgiI3RhYmxlLWNvbnRhaW5lci0iK2N0eC50YWJsZU5hbWUpOworCisgICAgdGFibGVDb250YWluZXIuY3NzKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpOworICAgIC8qIFRvIGF2b2lkIHBhZ2UgcmUtbGF5b3V0IGZsaWNrZXIgd2hlbiBwYWdpbmcgc2V0IGZpeGVkIGhlaWdodCAqLworICAgIHRhYmxlLmNzcygicGFkZGluZy1ib3R0b20iLCB0YWJsZS5oZWlnaHQoKSk7CisKKyAgICAvKiBSZXNldCB0YWJsZSBjb21wb25lbnRzICovCisgICAgdGFibGVCb2R5Lmh0bWwoIiIpOworICAgIHBhZ2luYXRpb25CdG5zLmh0bWwoIiIpOworCisgICAgaWYgKHRhYmxlUGFyYW1zLnNlYXJjaCkKKyAgICAgICQoJy5yZW1vdmUtc2VhcmNoLWJ0bi0nK2N0eC50YWJsZU5hbWUpLnNob3coKTsKKyAgICBlbHNlCisgICAgICAkKCcucmVtb3ZlLXNlYXJjaC1idG4tJytjdHgudGFibGVOYW1lKS5oaWRlKCk7CisKKyAgICAkKCcudGFibGUtY291bnQtJyArIGN0eC50YWJsZU5hbWUpLnRleHQodGFibGVEYXRhLnRvdGFsKTsKKyAgICB0YWJsZVRvdGFsID0gdGFibGVEYXRhLnRvdGFsOworCisgICAgaWYgKHRhYmxlRGF0YS50b3RhbCA9PT0gMCl7CisgICAgICB0YWJsZUNvbnRhaW5lci5oaWRlKCk7CisgICAgICAvKiBJZiB3ZSB3ZXJlIHNlYXJjaGluZyBzaG93IHRoZSBuZXcgc2VhcmNoIGJhciBhbmQgcmV0dXJuICovCisgICAgICBpZiAodGFibGVQYXJhbXMuc2VhcmNoKXsKKyAgICAgICAgJCgiI25ldy1zZWFyY2gtaW5wdXQtIitjdHgudGFibGVOYW1lKS52YWwodGFibGVQYXJhbXMuc2VhcmNoKTsKKyAgICAgICAgJCgiI25vLXJlc3VsdHMtIitjdHgudGFibGVOYW1lKS5zaG93KCk7CisgICAgICB9CisgICAgICB0YWJsZS50cmlnZ2VyKCJ0YWJsZS1kb25lIiwgW3RhYmxlRGF0YS50b3RhbCwgdGFibGVQYXJhbXNdKTsKKworICAgICAgcmV0dXJuOworCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBjbHV0dGVyIHRoZSBwbGFjZSB3aXRoIHRoZSB0YWJsZSBjaHJvbWUgaWYgdGhlcmUKKyAgICAgKiBhcmUgb25seSBhIGZldyByZXN1bHRzICovCisgICAgfSBlbHNlIGlmICh0YWJsZURhdGEudG90YWwgPD0gMTAgJiYKKyAgICAgICAgICAgICAgICF0YWJsZVBhcmFtcy5maWx0ZXIgJiYKKyAgICAgICAgICAgICAgICF0YWJsZVBhcmFtcy5zZWFyY2gpeworICAgICAgJCgiI3RhYmxlLWNocm9tZS0iK2N0eC50YWJsZU5hbWUpLmhpZGUoKTsKKyAgICAgIHBhZ2luYXRpb24uaGlkZSgpOworICAgIH0gZWxzZSB7CisgICAgICB0YWJsZUNvbnRhaW5lci5zaG93KCk7CisgICAgICAkKCIjbm8tcmVzdWx0cy0iK2N0eC50YWJsZU5hbWUpLmhpZGUoKTsKKyAgICB9CisKKyAgICBzZXR1cFRhYmxlQ2hyb21lKHRhYmxlRGF0YSk7CisKKyAgICAvKiBBZGQgdGFibGUgZGF0YSByb3dzICovCisgICAgdmFyIGNvbHVtbl9pbmRleDsKKyAgICBmb3IgKHZhciBpIGluIHRhYmxlRGF0YS5yb3dzKXsKKyAgICAgIC8qIG9ubHkgZGlzcGxheSBpZiB0aGUgY29sdW1uIGlzIGRpc3BsYXktYWJsZSAqLworICAgICAgdmFyIHJvdyA9ICQoIjx0cj48L3RyPiIpOworICAgICAgY29sdW1uX2luZGV4ID0gLTE7CisgICAgICBmb3IgKHZhciBrZXlfaiBpbiB0YWJsZURhdGEucm93c1tpXSl7CisKKyAgICAgICAgLyogaWYgd2UgaGF2ZSBhIHN0YXRpYzogdmVyc2lvbiBvZiBhIGtleSwgcHJlZmVyIHRoZSBzdGF0aWM6IHZlcnNpb24gZm9yIHJlbmRlcmluZyAqLworICAgICAgICB2YXIgb3JpZ19rZXlfaiA9IGtleV9qOworCisgICAgICAgIGlmIChrZXlfai5pbmRleE9mKCJzdGF0aWM6IikgPT09IDApIHsKKyAgICAgICAgICBpZiAoa2V5X2ouc3Vic3RyKCJzdGF0aWM6Ii5sZW5ndGgpIGluIHRhYmxlRGF0YS5yb3dzW2ldKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgb3JpZ19rZXlfaiA9IGtleV9qLnN1YnN0cigic3RhdGljOiIubGVuZ3RoKQorICAgICAgICB9IGVsc2UgaWYgKCgic3RhdGljOiIgKyBrZXlfaikgaW4gdGFibGVEYXRhLnJvd3NbaV0pIHsKKyAgICAgICAgICBrZXlfaiA9ICJzdGF0aWM6IiArIGtleV9qOworICAgICAgICB9CisKKyAgICAgICAgLyogd2Ugc2tpcCBvdmVyIHVuLWRpc3BsYXlhYmxlIGNvbHVtbiBlbnRyaWVzICovCisgICAgICAgIGNvbHVtbl9pbmRleCArPSAxOworICAgICAgICBpZiAoISB0YWJsZURhdGEuY29sdW1uc1tjb2x1bW5faW5kZXhdLmRpc3BsYXlhYmxlKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGQgPSAkKCI8dGQ+PC90ZD4iKTsKKyAgICAgICAgdGQucHJvcCgiY2xhc3MiLCBvcmlnX2tleV9qKTsKKyAgICAgICAgaWYgKHRhYmxlRGF0YS5yb3dzW2ldW2tleV9qXSl7CisgICAgICAgICAgdGQuaHRtbCh0YWJsZURhdGEucm93c1tpXVtrZXlfal0pOworICAgICAgICB9CisgICAgICAgIHJvdy5hcHBlbmQodGQpOworICAgICAgfQorICAgICAgdGFibGVCb2R5LmFwcGVuZChyb3cpOworCisgICAgICAvKiBJZiB3ZSBoYXZlIGxheWVyYnRucyB0aGVuIGluaXRpYWxpc2UgdGhlbSAqLworICAgICAgbGF5ZXJCdG5zSW5pdChjdHgpOworCisgICAgICAvKiBJZiB3ZSBoYXZlIHBvcG92ZXJzIGluaXRpYWxpc2UgdGhlbSBub3cgKi8KKyAgICAgICQoJ3RkID4gYS5idG4nKS5wb3BvdmVyKHsKKyAgICAgICAgaHRtbDp0cnVlLAorICAgICAgICBwbGFjZW1lbnQ6J2xlZnQnLAorICAgICAgICBjb250YWluZXI6J2JvZHknLAorICAgICAgICB0cmlnZ2VyOidtYW51YWwnCisgICAgICB9KS5jbGljayhmdW5jdGlvbihlKXsKKyAgICAgICAgJCgndGQgPiBhLmJ0bicpLm5vdCh0aGlzKS5wb3BvdmVyKCdoaWRlJyk7CisgICAgICAgIC8qIGlkZWFsbHkgd2Ugd291bGQgdXNlICd0b2dnbGUnIGhlcmUKKyAgICAgICAgICogYnV0IGl0IHNlZW1zIGJ1Z2d5IGluIG91ciBCb290c3RyYXAgdmVyc2lvbgorICAgICAgICAgKi8KKyAgICAgICAgJCh0aGlzKS5wb3BvdmVyKCdzaG93Jyk7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICB9KTsKKworICAgICAgLyogZW5hYmxlIGhlbHAgaW5mb3JtYXRpb24gdG9vbHRpcCAqLworICAgICAgJCgiLmdldC1oZWxwIikudG9vbHRpcCh7Y29udGFpbmVyOidib2R5JywgaHRtbDp0cnVlLCBkZWxheTp7c2hvdzozMDB9fSk7CisgICAgfQorCisgICAgLyogU2V0dXAgdGhlIHBhZ2luYXRpb24gY29udHJvbHMgKi8KKworICAgIHZhciBzdGFydCA9IHRhYmxlUGFyYW1zLnBhZ2UgLSAyOworICAgIHZhciBlbmQgPSB0YWJsZVBhcmFtcy5wYWdlICsgMjsKKyAgICB2YXIgbnVtUGFnZXMgPSBNYXRoLmNlaWwodGFibGVEYXRhLnRvdGFsL3RhYmxlUGFyYW1zLmxpbWl0KTsKKworICAgIGlmIChudW1QYWdlcyA+ICAxKXsKKyAgICAgIGlmICh0YWJsZVBhcmFtcy5wYWdlIDwgMykKKyAgICAgICAgZW5kID0gNTsKKworICAgICAgZm9yICh2YXIgcGFnZV9pPTE7IHBhZ2VfaSA8PSBudW1QYWdlczsgIHBhZ2VfaSsrKXsKKyAgICAgICAgaWYgKHBhZ2VfaSA+PSBzdGFydCAmJiBwYWdlX2kgPD0gZW5kKXsKKyAgICAgICAgICB2YXIgYnRuID0gJCgnPGxpPjxhIGhyZWY9IiMiIGNsYXNzPSJwYWdlIj4nK3BhZ2VfaSsnPC9hPjwvbGk+Jyk7CisKKyAgICAgICAgICBpZiAocGFnZV9pID09PSB0YWJsZVBhcmFtcy5wYWdlKXsKKyAgICAgICAgICAgIGJ0bi5hZGRDbGFzcygiYWN0aXZlIik7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogQWRkIHRoZSBjbGljayBoYW5kbGVyICovCisgICAgICAgICAgYnRuLmNsaWNrKHBhZ2VCdXR0b25DbGlja2VkKTsKKyAgICAgICAgICBwYWdpbmF0aW9uQnRucy5hcHBlbmQoYnRuKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGxvYWRDb2x1bW5zUHJlZmVyZW5jZSgpOworCisgICAgdGFibGUuY3NzKCJwYWRkaW5nLWJvdHRvbSIsIDApOworICAgIHRhYmxlQ29udGFpbmVyLmNzcygidmlzaWJpbGl0eSIsICJ2aXNpYmxlIik7CisKKyAgICB0YWJsZS50cmlnZ2VyKCJ0YWJsZS1kb25lIiwgW3RhYmxlRGF0YS50b3RhbCwgdGFibGVQYXJhbXNdKTsKKyAgfQorCisgIGZ1bmN0aW9uIHNldHVwVGFibGVDaHJvbWUodGFibGVEYXRhKXsKKyAgICBpZiAodGFibGVDaHJvbWVEb25lID09PSB0cnVlKQorICAgICAgcmV0dXJuOworCisgICAgdmFyIHRhYmxlSGVhZFJvdyA9IHRhYmxlLmZpbmQoInRoZWFkIik7CisgICAgdmFyIGVkaXRDb2xNZW51ID0gJCgiI3RhYmxlLWNocm9tZS0iK2N0eC50YWJsZU5hbWUpLmZpbmQoIi5lZGl0Y29sIik7CisKKyAgICB0YWJsZUhlYWRSb3cuaHRtbCgiIik7CisgICAgZWRpdENvbE1lbnUuaHRtbCgiIik7CisKKyAgICBpZiAoIXRhYmxlUGFyYW1zLm9yZGVyYnkgJiYgdGFibGVEYXRhLmRlZmF1bHRfb3JkZXJieSl7CisgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5ID0gdGFibGVEYXRhLmRlZmF1bHRfb3JkZXJieTsKKyAgICB9CisKKyAgICAvKiBBZGQgdGFibGUgaGVhZGVyIGFuZCBjb2x1bW4gdG9nZ2xlIG1lbnUgKi8KKyAgICBmb3IgKHZhciBpIGluIHRhYmxlRGF0YS5jb2x1bW5zKXsKKyAgICAgIHZhciBjb2wgPSB0YWJsZURhdGEuY29sdW1uc1tpXTsKKyAgICAgIGlmIChjb2wuZGlzcGxheWFibGUgPT09IGZhbHNlKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgdmFyIGhlYWRlciA9ICQoIjx0aD48L3RoPiIpOworICAgICAgaGVhZGVyLnByb3AoImNsYXNzIiwgY29sLmZpZWxkX25hbWUpOworCisgICAgICAvKiBTZXR1cCB0aGUgaGVscCB0ZXh0ICovCisgICAgICBpZiAoY29sLmhlbHBfdGV4dC5sZW5ndGggPiAwKSB7CisgICAgICAgIHZhciBoZWxwX3RleHQgPSAkKCc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIj4gPC9pPicpOworICAgICAgICBoZWxwX3RleHQudG9vbHRpcCh7dGl0bGU6IGNvbC5oZWxwX3RleHR9KTsKKyAgICAgICAgaGVhZGVyLmFwcGVuZChoZWxwX3RleHQpOworICAgICAgfQorCisgICAgICAvKiBTZXR1cCB0aGUgb3JkZXJhYmxlIHRpdGxlICovCisgICAgICBpZiAoY29sLm9yZGVyYWJsZSkgeworICAgICAgICB2YXIgdGl0bGUgPSAkKCc8YSBocmVmPVwiI1wiID48L2E+Jyk7CisKKyAgICAgICAgdGl0bGUuZGF0YSgnZmllbGQtbmFtZScsIGNvbC5maWVsZF9uYW1lKTsKKyAgICAgICAgdGl0bGUudGV4dChjb2wudGl0bGUpOworICAgICAgICB0aXRsZS5jbGljayhzb3J0Q29sdW1uQ2xpY2tlZCk7CisKKyAgICAgICAgaGVhZGVyLmFwcGVuZCh0aXRsZSk7CisKKyAgICAgICAgaGVhZGVyLmFwcGVuZCgnIDxpIGNsYXNzPSJpY29uLWNhcmV0LWRvd24iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvaT4nKTsKKyAgICAgICAgaGVhZGVyLmFwcGVuZCgnIDxpIGNsYXNzPSJpY29uLWNhcmV0LXVwIiBzdHlsZT0iZGlzcGxheTpub25lIj48L2k+Jyk7CisKKyAgICAgICAgLyogSWYgd2UncmUgY3VycmVudGx5IG9yZGVyZWQgc2V0dXAgdGhlIHZpc3VhbCBpbmRpY2F0b3IgKi8KKyAgICAgICAgaWYgKGNvbC5maWVsZF9uYW1lID09PSB0YWJsZVBhcmFtcy5vcmRlcmJ5IHx8CisgICAgICAgICAgJy0nICsgY29sLmZpZWxkX25hbWUgPT09IHRhYmxlUGFyYW1zLm9yZGVyYnkpeworICAgICAgICAgIGhlYWRlci5jaGlsZHJlbigiYSIpLmFkZENsYXNzKCJzb3J0ZWQiKTsKKworICAgICAgICAgIGlmICh0YWJsZVBhcmFtcy5vcmRlcmJ5LmluZGV4T2YoIi0iKSA9PT0gLTEpeworICAgICAgICAgICAgaGVhZGVyLmZpbmQoJy5pY29uLWNhcmV0LWRvd24nKS5zaG93KCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhlYWRlci5maW5kKCcuaWNvbi1jYXJldC11cCcpLnNob3coKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogTm90IG9yZGVyYWJsZSAqLworICAgICAgICBoZWFkZXIuYWRkQ2xhc3MoIm11dGVkIik7CisgICAgICAgIGhlYWRlci5jc3MoImZvbnQtd2VpZ2h0IiwgIm5vcm1hbCIpOworICAgICAgICBoZWFkZXIuYXBwZW5kKGNvbC50aXRsZSsnICcpOworICAgICAgfQorCisgICAgICAvKiBTZXR1cCB0aGUgZmlsdGVyIGJ1dHRvbiAqLworICAgICAgaWYgKGNvbC5maWx0ZXJfbmFtZSl7CisgICAgICAgIHZhciBmaWx0ZXJCdG4gPSAkKCc8YSBocmVmPSIjIiByb2xlPSJidXR0b24iIGNsYXNzPSJwdWxsLXJpZ2h0IGJ0biBidG4tbWluaSIgZGF0YS10b2dnbGU9Im1vZGFsIj48aSBjbGFzcz0iaWNvbi1maWx0ZXIgZmlsdGVyZWQiPjwvaT48L2E+Jyk7CisKKyAgICAgICAgZmlsdGVyQnRuLmRhdGEoJ2ZpbHRlci1uYW1lJywgY29sLmZpbHRlcl9uYW1lKTsKKyAgICAgICAgZmlsdGVyQnRuLnByb3AoJ2lkJywgY29sLmZpbHRlcl9uYW1lKTsKKyAgICAgICAgZmlsdGVyQnRuLmNsaWNrKGZpbHRlck9wZW5DbGlja2VkKTsKKworICAgICAgICAvKiBJZiB3ZSdyZSBjdXJyZW50bHkgYmVpbmcgZmlsdGVyZWQgc2V0dXAgdGhlIHZpc2lhbCBpbmRpY2F0b3IgKi8KKyAgICAgICAgaWYgKHRhYmxlUGFyYW1zLmZpbHRlciAmJgorICAgICAgICAgICAgdGFibGVQYXJhbXMuZmlsdGVyLm1hdGNoKCdeJytjb2wuZmlsdGVyX25hbWUpKSB7CisKKyAgICAgICAgICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIHRydWUpOworICAgICAgICB9CisgICAgICAgIGhlYWRlci5hcHBlbmQoZmlsdGVyQnRuKTsKKyAgICAgIH0KKworICAgICAgLyogRG9uZSBtYWtpbmcgdGhlIGhlYWRlciBub3cgYWRkIGl0ICovCisgICAgICB0YWJsZUhlYWRSb3cuYXBwZW5kKGhlYWRlcik7CisKKyAgICAgIC8qIE5vdyBzZXR1cCB0aGUgY2hlY2tib3ggc3RhdGUgYW5kIGNsaWNrIGhhbmRsZXIgKi8KKyAgICAgIHZhciB0b2dnbGVyID0gJCgnPGxpPjxsYWJlbCBjbGFzcz0iY2hlY2tib3giPicrY29sLnRpdGxlKyc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjaGVja2JveC0nKyBjb2wuZmllbGRfbmFtZSArJyIgY2xhc3M9ImNvbC10b2dnbGUiIHZhbHVlPSInK2NvbC5maWVsZF9uYW1lKyciIC8+PC9sYWJlbD48L2xpPicpOworCisgICAgICB2YXIgdG9nZ2xlcklucHV0ID0gdG9nZ2xlci5maW5kKCJpbnB1dCIpOworCisgICAgICB0b2dnbGVySW5wdXQuYXR0cigiY2hlY2tlZCIsImNoZWNrZWQiKTsKKworICAgICAgLyogSWYgd2UgY2FuIGhpZGUgdGhlIGNvbHVtbiBlbmFibGUgdGhlIGNoZWNrYm94IGFjdGlvbiAqLworICAgICAgaWYgKGNvbC5oaWRlYWJsZSl7CisgICAgICAgIHRvZ2dsZXJJbnB1dC5jbGljayhjb2xUb2dnbGVDbGlja2VkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRvZ2dsZXIuZmluZCgibGFiZWwiKS5hZGRDbGFzcygibXV0ZWQiKTsKKyAgICAgICAgdG9nZ2xlcklucHV0LmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICB9CisKKyAgICAgIGlmIChjb2wuaGlkZGVuKSB7CisgICAgICAgIGRlZmF1bHRIaWRkZW5Db2xzLnB1c2goY29sLmZpZWxkX25hbWUpOworICAgICAgfQorCisgICAgICBlZGl0Q29sTWVudS5hcHBlbmQodG9nZ2xlcik7CisgICAgfSAvKiBFbmQgZm9yIGVhY2ggY29sdW1uICovCisKKyAgICB0YWJsZUNocm9tZURvbmUgPSB0cnVlOworICB9CisKKyAgLyogVG9nZ2xlcyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBmaWx0ZXIgYnV0dG9uICovCisgIGZ1bmN0aW9uIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIGFjdGl2ZSl7CisgICAgaWYgKGFjdGl2ZSkgeworICAgICAgZmlsdGVyQnRuLmFkZENsYXNzKCJidG4tcHJpbWFyeSIpOworCisgICAgICBmaWx0ZXJCdG4udG9vbHRpcCh7CisgICAgICAgICAgaHRtbDogdHJ1ZSwKKyAgICAgICAgICB0aXRsZTogJzxidXR0b24gY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLXByaW1hcnkiIG9uQ2xpY2s9XCckKCIjY2xlYXItZmlsdGVyLWJ0bi0nKyBjdHgudGFibGVOYW1lICsnIikuY2xpY2soKTtcJz5DbGVhciBmaWx0ZXI8L2J1dHRvbj4nLAorICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsCisgICAgICAgICAgZGVsYXk6IHsKKyAgICAgICAgICAgIGhpZGU6IDE1MDAsCisgICAgICAgICAgICBzaG93OiA0MDAsCisgICAgICAgICAgfSwKKyAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICBmaWx0ZXJCdG4ucmVtb3ZlQ2xhc3MoImJ0bi1wcmltYXJ5Iik7CisgICAgICBmaWx0ZXJCdG4udG9vbHRpcCgnZGVzdHJveScpOworICAgIH0KKyAgfQorCisgIC8qIERpc3BsYXkgb3IgaGlkZSB0YWJsZSBjb2x1bW5zIGJhc2VkIG9uIHRoZSBjb29raWUgcHJlZmVyZW5jZSBvciBkZWZhdWx0cyAqLworICBmdW5jdGlvbiBsb2FkQ29sdW1uc1ByZWZlcmVuY2UoKXsKKyAgICB2YXIgY29va2llX2RhdGEgPSAkLmNvb2tpZSgiY29scyIpOworCisgICAgaWYgKGNvb2tpZV9kYXRhKSB7CisgICAgICB2YXIgY29sc19oaWRkZW4gPSBKU09OLnBhcnNlKCQuY29va2llKCJjb2xzIikpOworCisgICAgICAvKiBGb3IgZWFjaCBvZiB0aGUgY29sdW1ucyBjaGVjayBpZiB3ZSBzaG91bGQgaGlkZSB0aGVtCisgICAgICAgKiBhbHNvIHVwZGF0ZSB0aGUgY2hlY2tlZCBzdGF0dXMgaW4gdGhlIEVkaXQgY29sdW1ucyBtZW51CisgICAgICAgKi8KKyAgICAgICQoIiMiK2N0eC50YWJsZU5hbWUrIiB0aCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgZm9yICh2YXIgaSBpbiBjb2xzX2hpZGRlbil7CisgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoY29sc19oaWRkZW5baV0pKXsKKyAgICAgICAgICAgICQoIi4iK2NvbHNfaGlkZGVuW2ldKS5oaWRlKCk7CisgICAgICAgICAgICAkKCIjY2hlY2tib3gtIitjb2xzX2hpZGRlbltpXSkucmVtb3ZlQXR0cigiY2hlY2tlZCIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBEaXNhYmxlIHRoZXNlIGNvbHVtbnMgYnkgZGVmYXVsdCB3aGVuIHdlIGhhdmUgbm8gY29sdW1ucworICAgICAgICAgKiB1c2VyIHNldHRpbmcuCisgICAgICAgICAqLworICAgICAgICBmb3IgKHZhciBpIGluIGRlZmF1bHRIaWRkZW5Db2xzKSB7CisgICAgICAgICAgJCgiLiIrZGVmYXVsdEhpZGRlbkNvbHNbaV0pLmhpZGUoKTsKKyAgICAgICAgICAkKCIjY2hlY2tib3gtIitkZWZhdWx0SGlkZGVuQ29sc1tpXSkucmVtb3ZlQXR0cigiY2hlY2tlZCIpOworICAgICAgICB9CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gc29ydENvbHVtbkNsaWNrZWQoKXsKKworICAgIC8qIFdlIG9ubHkgaGF2ZSBvbmUgc29ydCBhdCBhIHRpbWUgc28gcmVtb3ZlIGFueSBleGlzdGluZyBzb3J0IGluZGljYXRvcnMgKi8KKyAgICAkKCIjIitjdHgudGFibGVOYW1lKyIgdGggLmljb24tY2FyZXQtZG93biIpLmhpZGUoKTsKKyAgICAkKCIjIitjdHgudGFibGVOYW1lKyIgdGggLmljb24tY2FyZXQtdXAiKS5oaWRlKCk7CisgICAgJCgiIyIrY3R4LnRhYmxlTmFtZSsiIHRoIGEiKS5yZW1vdmVDbGFzcygic29ydGVkIik7CisKKyAgICB2YXIgZmllbGROYW1lID0gJCh0aGlzKS5kYXRhKCdmaWVsZC1uYW1lJyk7CisKKyAgICAvKiBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBzb3J0IHRoZSBvdGhlciB3YXkgKi8KKyAgICBpZiAodGFibGVQYXJhbXMub3JkZXJieSA9PT0gZmllbGROYW1lICYmCisgICAgICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkuaW5kZXhPZignLScpID09PSAtMSkgeworICAgICAgdGFibGVQYXJhbXMub3JkZXJieSA9ICctJyArICQodGhpcykuZGF0YSgnZmllbGQtbmFtZScpOworICAgICAgJCh0aGlzKS5wYXJlbnQoKS5jaGlsZHJlbignLmljb24tY2FyZXQtdXAnKS5zaG93KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkgPSAkKHRoaXMpLmRhdGEoJ2ZpZWxkLW5hbWUnKTsKKyAgICAgICQodGhpcykucGFyZW50KCkuY2hpbGRyZW4oJy5pY29uLWNhcmV0LWRvd24nKS5zaG93KCk7CisgICAgfQorCisgICAgJCh0aGlzKS5hZGRDbGFzcygic29ydGVkIik7CisKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgIH0KKworICBmdW5jdGlvbiBwYWdlQnV0dG9uQ2xpY2tlZChlKSB7CisgICAgdGFibGVQYXJhbXMucGFnZSA9IE51bWJlcigkKHRoaXMpLnRleHQoKSk7CisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworICAgIC8qIFN0b3AgcGFnZSBqdW1wcyB3aGVuIGNsaWNraW5nIG9uICMgbGlua3MgKi8KKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgIH0KKworICAvKiBUb2dnbGUgYSB0YWJsZSBjb2x1bW4gKi8KKyAgZnVuY3Rpb24gY29sVG9nZ2xlQ2xpY2tlZCAoKXsKKyAgICB2YXIgY29sID0gJCh0aGlzKS52YWwoKTsKKyAgICB2YXIgZGlzYWJsZWRfY29scyA9IFtdOworCisgICAgaWYgKCQodGhpcykucHJvcCgiY2hlY2tlZCIpKSB7CisgICAgICAkKCIuIitjb2wpLnNob3coKTsKKyAgICB9ICBlbHNlIHsKKyAgICAgICQoIi4iK2NvbCkuaGlkZSgpOworICAgICAgLyogSWYgd2UncmUgb3JkZXJlZCBieSB0aGUgY29sdW1uIHdlJ3JlIGhpZGluZyByZW1vdmUgdGhlIG9yZGVyIGJ5ICovCisgICAgICBpZiAoY29sID09PSB0YWJsZVBhcmFtcy5vcmRlcmJ5IHx8CisgICAgICAgICAgJy0nICsgY29sID09PSB0YWJsZVBhcmFtcy5vcmRlcmJ5KXsKKyAgICAgICAgdGFibGVQYXJhbXMub3JkZXJieSA9IG51bGw7CisgICAgICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVcGRhdGUgdGhlIGNvb2tpZSB3aXRoIHRoZSB1bmNoZWNrZWQgY29sdW1ucyAqLworICAgICQoIi5jb2wtdG9nZ2xlIikubm90KCI6Y2hlY2tlZCIpLm1hcChmdW5jdGlvbigpeworICAgICAgZGlzYWJsZWRfY29scy5wdXNoKCQodGhpcykudmFsKCkpOworICAgIH0pOworCisgICAgJC5jb29raWUoImNvbHMiLCBKU09OLnN0cmluZ2lmeShkaXNhYmxlZF9jb2xzKSk7CisgIH0KKworICBmdW5jdGlvbiBmaWx0ZXJPcGVuQ2xpY2tlZCgpeworICAgIHZhciBmaWx0ZXJOYW1lID0gJCh0aGlzKS5kYXRhKCdmaWx0ZXItbmFtZScpOworCisgICAgLyogV2UgbmVlZCB0byBwYXNzIGluIHRoZSBjdXJyZW4gc2VhcmNoIHNvIHRoYXQgdGhlIGZpbHRlciBjb3VudHMgdGFrZQorICAgICAqIGludG8gYWNjb3VudCB0aGUgY3VycmVudCBzZWFyY2ggZmlsdGVyCisgICAgICovCisgICAgdmFyIHBhcmFtcyA9IHsKKyAgICAgICduYW1lJyA6IGZpbHRlck5hbWUsCisgICAgICAnc2VhcmNoJzogdGFibGVQYXJhbXMuc2VhcmNoLAorICAgICAgJ2NtZCc6ICdmaWx0ZXJpbmZvJywKKyAgICB9OworCisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgIHVybDogY3R4LnVybCwKKyAgICAgICAgZGF0YTogcGFyYW1zLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZmlsdGVyRGF0YSkgeworICAgICAgICAgIHZhciBmaWx0ZXJBY3Rpb25SYWRpb3MgPSAkKCcjZmlsdGVyLWFjdGlvbnMtJytjdHgudGFibGVOYW1lKTsKKworICAgICAgICAgICQoJyNmaWx0ZXItbW9kYWwtdGl0bGUtJytjdHgudGFibGVOYW1lKS50ZXh0KGZpbHRlckRhdGEudGl0bGUpOworCisgICAgICAgICAgZmlsdGVyQWN0aW9uUmFkaW9zLnRleHQoIiIpOworCisgICAgICAgICAgZm9yICh2YXIgaSBpbiBmaWx0ZXJEYXRhLmZpbHRlcl9hY3Rpb25zKXsKKyAgICAgICAgICAgIHZhciBmaWx0ZXJBY3Rpb24gPSBmaWx0ZXJEYXRhLmZpbHRlcl9hY3Rpb25zW2ldOworCisgICAgICAgICAgICB2YXIgYWN0aW9uID0gJCgnPGxhYmVsIGNsYXNzPSJyYWRpbyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIHZhbHVlPSIiPjxzcGFuIGNsYXNzPSJmaWx0ZXItdGl0bGUiPjwvc3Bhbj48L2xhYmVsPicpOworICAgICAgICAgICAgdmFyIGFjdGlvblRpdGxlID0gZmlsdGVyQWN0aW9uLnRpdGxlICsgJyAoJyArIGZpbHRlckFjdGlvbi5jb3VudCArICcpJzsKKworICAgICAgICAgICAgdmFyIHJhZGlvSW5wdXQgPSBhY3Rpb24uY2hpbGRyZW4oImlucHV0Iik7CisKKyAgICAgICAgICAgIGlmIChOdW1iZXIoZmlsdGVyQWN0aW9uLmNvdW50KSA9PSAwKXsKKyAgICAgICAgICAgICAgcmFkaW9JbnB1dC5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhY3Rpb24uY2hpbGRyZW4oIi5maWx0ZXItdGl0bGUiKS50ZXh0KGFjdGlvblRpdGxlKTsKKworICAgICAgICAgICAgcmFkaW9JbnB1dC52YWwoZmlsdGVyTmFtZSArICc6JyArIGZpbHRlckFjdGlvbi5uYW1lKTsKKworICAgICAgICAgICAgLyogU2V0dXAgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmlsdGVyLCBkZWZhdWx0IHRvICdhbGwnIGlmCisgICAgICAgICAgICAgKiBubyBjdXJyZW50IGZpbHRlciBzZWxlY3RlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCh0YWJsZVBhcmFtcy5maWx0ZXIgJiYKKyAgICAgICAgICAgICAgICB0YWJsZVBhcmFtcy5maWx0ZXIgPT09IHJhZGlvSW5wdXQudmFsKCkpIHx8CisgICAgICAgICAgICAgICAgZmlsdGVyQWN0aW9uLm5hbWUgPT0gJ2FsbCcpIHsKKyAgICAgICAgICAgICAgICByYWRpb0lucHV0LmF0dHIoImNoZWNrZWQiLCAiY2hlY2tlZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaWx0ZXJBY3Rpb25SYWRpb3MuYXBwZW5kKGFjdGlvbik7CisgICAgICAgICAgfQorCisgICAgICAgICAgJCgnI2ZpbHRlci1tb2RhbC0nK2N0eC50YWJsZU5hbWUpLm1vZGFsKCdzaG93Jyk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisKKyAgJCgiLmdldC1oZWxwIikudG9vbHRpcCh7Y29udGFpbmVyOidib2R5JywgaHRtbDp0cnVlLCBkZWxheTp7c2hvdzozMDB9fSk7CisKKyAgLyogS2VlcCB0aGUgRWRpdCBjb2x1bW5zIG1lbnUgb3BlbiBhZnRlciBjbGljayBieSBlYXRpbmcgdGhlIGV2ZW50ICovCisgICQoJy5kcm9wZG93bi1tZW51JykuY2xpY2soZnVuY3Rpb24oZSkgeworICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgIH0pOworCisgICQoIi5wYWdlc2l6ZS0iK2N0eC50YWJsZU5hbWUpLnZhbCh0YWJsZVBhcmFtcy5saW1pdCk7CisKKyAgLyogcGFnZSBzaXplIHNlbGVjdG9yICAqLworICAkKCIucGFnZXNpemUtIitjdHgudGFibGVOYW1lKS5jaGFuZ2UoZnVuY3Rpb24oZSl7CisgICAgdGFibGVQYXJhbXMubGltaXQgPSBOdW1iZXIodGhpcy52YWx1ZSk7CisgICAgaWYgKCh0YWJsZVBhcmFtcy5wYWdlICogdGFibGVQYXJhbXMubGltaXQpID4gdGFibGVUb3RhbCkKKyAgICAgIHRhYmxlUGFyYW1zLnBhZ2UgPSAxOworCisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworICAgIC8qIHN5bmMgdGhlIG90aGVyIHNlbGVjdG9ycyBvbiB0aGUgcGFnZSAqLworICAgICQoIi5wYWdlc2l6ZS0iK2N0eC50YWJsZU5hbWUpLnZhbCh0aGlzLnZhbHVlKTsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgIH0pOworCisgICQoIiNzZWFyY2gtc3VibWl0LSIrY3R4LnRhYmxlTmFtZSkuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgdmFyIHNlYXJjaFRlcm0gPSAkKCIjc2VhcmNoLWlucHV0LSIrY3R4LnRhYmxlTmFtZSkudmFsKCk7CisKKyAgICB0YWJsZVBhcmFtcy5wYWdlID0gMTsKKyAgICB0YWJsZVBhcmFtcy5zZWFyY2ggPSBzZWFyY2hUZXJtOworCisgICAgLyogSWYgYSBmaWx0ZXIgd2FzIGFjdGl2ZSB3ZSByZW1vdmUgaXQgKi8KKyAgICBpZiAodGFibGVQYXJhbXMuZmlsdGVyKSB7CisgICAgICB2YXIgZmlsdGVyQnRuID0gJCgiIyIgKyB0YWJsZVBhcmFtcy5maWx0ZXIuc3BsaXQoIjoiKVswXSk7CisgICAgICBmaWx0ZXJCdG5BY3RpdmUoZmlsdGVyQnRuLCBmYWxzZSk7CisgICAgICB0YWJsZVBhcmFtcy5maWx0ZXIgPSBudWxsOworICAgIH0KKworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgfSk7CisKKyAgJCgnLnJlbW92ZS1zZWFyY2gtYnRuLScrY3R4LnRhYmxlTmFtZSkuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgdGFibGVQYXJhbXMucGFnZSA9IDE7CisgICAgdGFibGVQYXJhbXMuc2VhcmNoID0gbnVsbDsKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisKKyAgICAkKCIjc2VhcmNoLWlucHV0LSIrY3R4LnRhYmxlTmFtZSkudmFsKCIiKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgfSk7CisKKyAgJCgiI3NlYXJjaC1pbnB1dC0iK2N0eC50YWJsZU5hbWUpLmtleXVwKGZ1bmN0aW9uKGUpeworICAgIGlmIChlLndoaWNoID09PSAxMykKKyAgICAgICQoJyNzZWFyY2gtc3VibWl0LScrY3R4LnRhYmxlTmFtZSkuY2xpY2soKTsKKyAgfSk7CisKKyAgLyogU3RvcCBwYWdlIGp1bXBzIHdoZW4gY2xpY2tpbmcgb24gIyBsaW5rcyAqLworICAkKCdhW2hyZWY9IiMiXScpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgfSk7CisKKyAgJCgiI2NsZWFyLWZpbHRlci1idG4tIitjdHgudGFibGVOYW1lKS5jbGljayhmdW5jdGlvbigpeworICAgIHZhciBmaWx0ZXJCdG4gPSAkKCIjIiArIHRhYmxlUGFyYW1zLmZpbHRlci5zcGxpdCgiOiIpWzBdKTsKKyAgICBmaWx0ZXJCdG5BY3RpdmUoZmlsdGVyQnRuLCBmYWxzZSk7CisKKyAgICB0YWJsZVBhcmFtcy5maWx0ZXIgPSBudWxsOworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKyAgfSk7CisKKyAgJCgiI2ZpbHRlci1tb2RhbC1mb3JtLSIrY3R4LnRhYmxlTmFtZSkuc3VibWl0KGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKworICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9ICQodGhpcykuZmluZCgiaW5wdXRbdHlwZT0ncmFkaW8nXTpjaGVja2VkIikudmFsKCk7CisKKyAgICB2YXIgZmlsdGVyQnRuID0gJCgiIyIgKyB0YWJsZVBhcmFtcy5maWx0ZXIuc3BsaXQoIjoiKVswXSk7CisKKyAgICAvKiBBbGwgPT09IHJlbW92ZSBmaWx0ZXIgKi8KKyAgICBpZiAodGFibGVQYXJhbXMuZmlsdGVyLm1hdGNoKCI6YWxsJCIpKSB7CisgICAgICB0YWJsZVBhcmFtcy5maWx0ZXIgPSBudWxsOworICAgICAgZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgZmFsc2UpOworICAgIH0gZWxzZSB7CisgICAgICBmaWx0ZXJCdG5BY3RpdmUoZmlsdGVyQnRuLCB0cnVlKTsKKyAgICB9CisKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisKKyAgICAkKHRoaXMpLnBhcmVudCgpLm1vZGFsKCdoaWRlJyk7CisgIH0pOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Rlc3RzL3Rlc3QuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGVzdHMvdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjEwMTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Rlc3RzL3Rlc3QuanMKQEAgLTAsMCArMSwxNzUgQEAKKyJ1c2Ugc3RyaWN0IjsKKy8qIFVuaXQgdGVzdHMgZm9yIFRvYXN0ZXIncyBKUyAqLworCisvKiBsaWJ0b2FzdGVyIHRlc3RzICovCisKK1FVbml0LnRlc3QoIkxheWVyIGFsZXJ0IG5vdGlmaWNhdGlvbiIsIGZ1bmN0aW9uKGFzc2VydCkgeworICB2YXIgbGF5ZXIgPSB7CisgICAgImxheWVyZGV0YWlsdXJsIjoiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzIyIiwKKyAgICAidmNzX3VybCI6ImdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IiwKKyAgICAiZGV0YWlsIjoiWyBnaXQ6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmdpdCB8IG1hc3RlciBdIiwKKyAgICAidmNzX3JlZmVyZW5jZSI6Im1hc3RlciIsCisgICAgImlkIjogMjIsCisgICAgIm5hbWUiOiJtZXRhLWV4YW1wbGUiCisgIH07CisKKyAgdmFyIGNvcnJlY3RSZXNwb25zZSA9ICJZb3UgaGF2ZSBhZGRlZCA8c3Ryb25nPjM8L3N0cm9uZz4gbGF5ZXJzIHRvIHlvdXIgcHJvamVjdDogPGEgaWQ9XCJsYXllci1hZmZlY3RlZC1uYW1lXCIgaHJlZj1cIi90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci8yMlwiPm1ldGEtZXhhbXBsZTwvYT4gYW5kIGl0cyBkZXBlbmRlbmNpZXMgPGEgaHJlZj1cIi90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci85XCIgZGF0YS1vcmlnaW5hbC10aXRsZT1cIlwiIHRpdGxlPVwiXCI+bWV0YS1leGFtcGxlLXR3bzwvYT4sIDxhIGhyZWY9XCIvdG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvOVwiIGRhdGEtb3JpZ2luYWwtdGl0bGU9XCJcIiB0aXRsZT1cIlwiPm1ldGEtZXhhbXBsZS10aHJlZTwvYT4iOworCisgIHZhciBsYXllckRlcHNMaXN0ID0gWworICAgIHsKKyAgICAibGF5ZXJkZXRhaWx1cmwiOiIvdG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvOSIsCisgICAgInZjc191cmwiOiJnaXQ6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmdpdCIsCisgICAgImRldGFpbCI6IlsgZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQgfCBtYXN0ZXIgXSIsCisgICAgInZjc19yZWZlcmVuY2UiOiJtYXN0ZXIiLAorICAgICJpZCI6IDksCisgICAgIm5hbWUiOiJtZXRhLWV4YW1wbGUtdHdvIgorICAgIH0sCisgICAgeworICAgICJsYXllcmRldGFpbHVybCI6Ii90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci85IiwKKyAgICAidmNzX3VybCI6ImdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IiwKKyAgICAiZGV0YWlsIjoiWyBnaXQ6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmdpdCB8IG1hc3RlciBdIiwKKyAgICAidmNzX3JlZmVyZW5jZSI6Im1hc3RlciIsCisgICAgImlkIjogMTAsCisgICAgIm5hbWUiOiJtZXRhLWV4YW1wbGUtdGhyZWUiCisgICAgfSwKKyAgXTsKKworICB2YXIgbXNnID0gbGlidG9hc3Rlci5tYWtlTGF5ZXJBZGRSbUFsZXJ0TXNnKGxheWVyLCBsYXllckRlcHNMaXN0LCB0cnVlKTsKKyAgdmFyIHRlc3QgPSAkKCI8ZGl2PjwvZGl2PiIpOworCisgIHRlc3QuaHRtbChtc2cpOworCisgIGFzc2VydC5lcXVhbCh0ZXN0LmNoaWxkcmVuKCJzdHJvbmciKS50ZXh0KCksICIzIik7CisgIGFzc2VydC5lcXVhbCh0ZXN0LmNoaWxkcmVuKCJhIikubGVuZ3RoLCAzKTsKK30pOworCitRVW5pdC50ZXN0KCJQcm9qZWN0IGluZm8iLCBmdW5jdGlvbihhc3NlcnQpeworICB2YXIgZG9uZSA9IGFzc2VydC5hc3luYygpOworICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICBhc3NlcnQub2socHJqSW5mby5tYWNoaW5lLm5hbWUpOworICAgIGFzc2VydC5vayhwcmpJbmZvLnJlbGVhc2VzLmxlbmd0aCA+IDApOworICAgIGFzc2VydC5vayhwcmpJbmZvLmxheWVycy5sZW5ndGggPiAwKTsKKyAgICBhc3NlcnQub2socHJqSW5mby5mcmVxdGFyZ2V0cyk7CisgICAgYXNzZXJ0Lm9rKHByakluZm8ucmVsZWFzZSk7CisgICAgZG9uZSgpOworICB9KTsKK30pOworCitRVW5pdC50ZXN0KCJTaG93IG5vdGlmaWNhdGlvbiIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBtc2cgPSAiVGVzdGluZyI7CisgIHZhciBlbGVtZW50ID0gJCgiI2NoYW5nZS1ub3RpZmljYXRpb24tbXNnIik7CisKKyAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1zZyk7CisKKyAgYXNzZXJ0LmVxdWFsKGVsZW1lbnQudGV4dCgpLCBtc2cpOworICBhc3NlcnQub2soZWxlbWVudC5pcygiOnZpc2libGUiKSk7CisKKyAgJCgiI2NoYW5nZS1ub3RpZmljYXRpb24iKS5oaWRlKCk7Cit9KTsKKwordmFyIGxheWVyID0geworICAiaWQiOiA5MSwKKyAgIm5hbWUiOiAgIm1ldGEtY3J5c3RhbGZvcmVzdCIsCisgICJsYXllcmRldGFpbHVybCI6ICIvdG9hc3Rlcmd1aS9wcm9qZWN0LzQvbGF5ZXIvOTEiCit9OworCitRVW5pdC50ZXN0KCJBZGQgbGF5ZXIiLCBmdW5jdGlvbihhc3NlcnQpeworICB2YXIgZG9uZSA9IGFzc2VydC5hc3luYygpOworCisgIC8qIFdhaXQgZm9yIHRoZSBtb2RhbCB0byBiZSBhZGRlZCB0byB0aGUgZG9tICovCisgIHZhciBjaGVja01vZGFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKKyAgICBpZiAoJCgiI2RlcGVuZGVuY2llcy1tb2RhbCIpLmxlbmd0aCA+IDApIHsKKyAgICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwgLmJ0bi1wcmltYXJ5IikuY2xpY2soKTsKKyAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tNb2RhbCk7CisgICAgfQorICB9LCAyMDApOworCisgIGxpYnRvYXN0ZXIuYWRkUm1MYXllcihsYXllciwgdHJ1ZSwgZnVuY3Rpb24oZGVwcyl7CisgICAgYXNzZXJ0LmVxdWFsKGRlcHMubGVuZ3RoLCAxKTsKKyAgICBkb25lKCk7CisgIH0pOworCit9KTsKKworUVVuaXQudGVzdCgiUm0gbGF5ZXIiLCBmdW5jdGlvbihhc3NlcnQpeworICB2YXIgZG9uZSA9IGFzc2VydC5hc3luYygpOworCisgIGxpYnRvYXN0ZXIuYWRkUm1MYXllcihsYXllciwgZmFsc2UsIGZ1bmN0aW9uKGRlcHMpeworICAgIGFzc2VydC5lcXVhbChkZXBzLmxlbmd0aCwgMCk7CisgICAgZG9uZSgpOworICB9KTsKKworfSk7CisKK1FVbml0LnRlc3QoIlBhcnNlIHVybCBwYXJhbXMiLCBmdW5jdGlvbihhc3NlcnQpeworICB2YXIgcGFyYW1zID0gbGlidG9hc3Rlci5wYXJzZVVybFBhcmFtcygpOworICBhc3NlcnQub2socGFyYW1zKTsKK30pOworCitRVW5pdC50ZXN0KCJEdW1wIHVybCBwYXJhbXMiLCBmdW5jdGlvbihhc3NlcnQpeworICB2YXIgcGFyYW1zID0gbGlidG9hc3Rlci5kdW1wc1VybFBhcmFtcygpOworICBhc3NlcnQub2socGFyYW1zKTsKK30pOworCitRVW5pdC50ZXN0KCJNYWtlIHR5cGVhaGVhZHMiLCBmdW5jdGlvbihhc3NlcnQpeworICB2YXIgbGF5ZXJzVCA9ICQoIiNsYXllcnMiKTsKKyAgdmFyIG1hY2hpbmVzVCA9ICQoIiNtYWNoaW5lcyIpOworICB2YXIgcHJvamVjdHNUID0gJCgiI3Byb2plY3RzIik7CisgIHZhciByZWNpcGVzVCA9ICQoIiNyZWNpcGVzIik7CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyc1QsCisgICAgbGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLCB7fSwgZnVuY3Rpb24oKXt9KTsKKworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobWFjaGluZXNULAorICAgIGxpYnRvYXN0ZXIuY3R4Lm1hY2hpbmVzVHlwZUFoZWFkVXJsLCB7fSwgZnVuY3Rpb24oKXt9KTsKKworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQocHJvamVjdHNULAorICAgIGxpYnRvYXN0ZXIuY3R4LnByb2plY3RzVHlwZUFoZWFkVXJsLCB7fSwgZnVuY3Rpb24oKXt9KTsKKworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQocmVjaXBlc1QsCisgICAgbGlidG9hc3Rlci5jdHgucmVjaXBlc1R5cGVBaGVhZFVybCwge30sIGZ1bmN0aW9uKCl7fSk7CisKKyAgYXNzZXJ0Lm9rKHJlY2lwZXNULmRhdGEoJ3R5cGVhaGVhZCcpKTsKKyAgYXNzZXJ0Lm9rKGxheWVyc1QuZGF0YSgndHlwZWFoZWFkJykpOworICBhc3NlcnQub2socHJvamVjdHNULmRhdGEoJ3R5cGVhaGVhZCcpKTsKKyAgYXNzZXJ0Lm9rKHJlY2lwZXNULmRhdGEoJ3R5cGVhaGVhZCcpKTsKK30pOworCisKKworLyogUGFnZSBpbml0IGZ1bmN0aW9ucyAqLworCitRVW5pdC50ZXN0KCJJbXBvcnQgbGF5ZXIgcGFnZSBpbml0IiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgYXNzZXJ0LnRocm93cyhpbXBvcnRMYXllclBhZ2VJbml0KCkpOworfSk7CisKK1FVbml0LnRlc3QoIlByb2plY3QgcGFnZSBpbml0IiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgYXNzZXJ0LnRocm93cyhwcm9qZWN0UGFnZUluaXQoKSk7Cit9KTsKKworUVVuaXQudGVzdCgiTGF5ZXIgZGV0YWlscyBwYWdlIGluaXQiLCBmdW5jdGlvbihhc3NlcnQpeworICBhc3NlcnQudGhyb3dzKGxheWVyRGV0YWlsc1BhZ2VJbml0KCkpOworfSk7CisKK1FVbml0LnRlc3QoIkxheWVyIGJ0bnMgaW5pdCIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIGFzc2VydC50aHJvd3MobGF5ZXJCdG5zSW5pdCh7IHByb2plY3RMYXllcnMgOiBbXSB9KSk7Cit9KTsKKworUVVuaXQudGVzdCgiVGFibGUgaW5pdCIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIGFzc2VydC50aHJvd3ModGFibGVJbml0KHsgdXJsIDogdGFibGVVcmwgfSkpOworfSk7CisKKyQoZG9jdW1lbnQpLmFqYXhFcnJvcihmdW5jdGlvbihldmVudCwganF4aHIsIHNldHRpbmdzLCBlcnJNc2cpeworICBpZiAoZXJyTXNnID09PSAnYWJvcnQnKQorICAgIHJldHVybjsKKworICBRVW5pdC50ZXN0KCJBamF4IGVycm9yIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgICBhc3NlcnQubm90T2soanF4aHIucmVzcG9uc2VUZXh0KTsKKyAgfSk7Cit9KTsKKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAuanMgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdWktYm9vdHN0cmFwLXRwbHMtMC4xMS4wLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNmE4NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdWktYm9vdHN0cmFwLXRwbHMtMC4xMS4wLmpzCkBAIC0wLDAgKzEsMTAgQEAKKy8qCisgKiBhbmd1bGFyLXVpLWJvb3RzdHJhcAorICogaHR0cDovL2FuZ3VsYXItdWkuZ2l0aHViLmlvL2Jvb3RzdHJhcC8KKworICogVmVyc2lvbjogMC4xMS4wIC0gMjAxNC0wNS0wMQorICogTGljZW5zZTogTUlUCisgKi8KK2FuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAiLFsidWkuYm9vdHN0cmFwLnRwbHMiLCJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiIsInVpLmJvb3RzdHJhcC5jb2xsYXBzZSIsInVpLmJvb3RzdHJhcC5hY2NvcmRpb24iLCJ1aS5ib290c3RyYXAuYWxlcnQiLCJ1aS5ib290c3RyYXAuYmluZEh0bWwiLCJ1aS5ib290c3RyYXAuYnV0dG9ucyIsInVpLmJvb3RzdHJhcC5jYXJvdXNlbCIsInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIiwidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmRhdGVwaWNrZXIiLCJ1aS5ib290c3RyYXAuZHJvcGRvd24iLCJ1aS5ib290c3RyYXAubW9kYWwiLCJ1aS5ib290c3RyYXAucGFnaW5hdGlvbiIsInVpLmJvb3RzdHJhcC50b29sdGlwIiwidWkuYm9vdHN0cmFwLnBvcG92ZXIiLCJ1aS5ib290c3RyYXAucHJvZ3Jlc3NiYXIiLCJ1aS5ib290c3RyYXAucmF0aW5nIiwidWkuYm9vdHN0cmFwLnRhYnMiLCJ1aS5ib290c3RyYXAudGltZXBpY2tlciIsInVpLmJvb3RzdHJhcC50eXBlYWhlYWQiXSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50cGxzIixbInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCIsInRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLCJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIiwidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIiwidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsInRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIiwidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIiwidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCIsInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIiwidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwiLCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIiwidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIiwidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsInRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCJdKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iLFtdKS5mYWN0b3J5KCIkdHJhbnNpdGlvbiIsWyIkcSIsIiR0aW1lb3V0IiwiJHJvb3RTY29wZSIsZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiIGluIGEpaWYodm9pZCAwIT09Zi5zdHlsZVtiXSlyZXR1cm4gYVtiXX12YXIgZT1mdW5jdGlvbihkLGYsZyl7Zz1nfHx7fTt2YXIgaD1hLmRlZmVyKCksaT1lW2cuYW5pbWF0aW9uPyJhbmltYXRpb25FbmRFdmVudE5hbWUiOiJ0cmFuc2l0aW9uRW5kRXZlbnROYW1lIl0saj1mdW5jdGlvbigpe2MuJGFwcGx5KGZ1bmN0aW9uKCl7ZC51bmJpbmQoaSxqKSxoLnJlc29sdmUoZCl9KX07cmV0dXJuIGkmJmQuYmluZChpLGopLGIoZnVuY3Rpb24oKXthbmd1bGFyLmlzU3RyaW5nKGYpP2QuYWRkQ2xhc3MoZik6YW5ndWxhci5pc0Z1bmN0aW9uKGYpP2YoZCk6YW5ndWxhci5pc09iamVjdChmKSYmZC5jc3MoZiksaXx8aC5yZXNvbHZlKGQpfSksaC5wcm9taXNlLmNhbmNlbD1mdW5jdGlvbigpe2kmJmQudW5iaW5kKGksaiksaC5yZWplY3QoIlRyYW5zaXRpb24gY2FuY2VsbGVkIil9LGgucHJvbWlzZX0sZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0cmFucyIpLGc9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LGg9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdEFuaW1hdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoiYW5pbWF0aW9uZW5kIixPVHJhbnNpdGlvbjoib0FuaW1hdGlvbkVuZCIsdHJhbnNpdGlvbjoiYW5pbWF0aW9uZW5kIn07cmV0dXJuIGUudHJhbnNpdGlvbkVuZEV2ZW50TmFtZT1kKGcpLGUuYW5pbWF0aW9uRW5kRXZlbnROYW1lPWQoaCksZX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmNvbGxhcHNlIixbInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIl0pLmRpcmVjdGl2ZSgiY29sbGFwc2UiLFsiJHRyYW5zaXRpb24iLGZ1bmN0aW9uKGEpe3JldHVybntsaW5rOmZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBlKGIpe2Z1bmN0aW9uIGQoKXtqPT09ZSYmKGo9dm9pZCAwKX12YXIgZT1hKGMsYik7cmV0dXJuIGomJmouY2FuY2VsKCksaj1lLGUudGhlbihkLGQpLGV9ZnVuY3Rpb24gZigpe2s/KGs9ITEsZygpKTooYy5yZW1vdmVDbGFzcygiY29sbGFwc2UiKS5hZGRDbGFzcygiY29sbGFwc2luZyIpLGUoe2hlaWdodDpjWzBdLnNjcm9sbEhlaWdodCsicHgifSkudGhlbihnKSl9ZnVuY3Rpb24gZygpe2MucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKSxjLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpLGMuY3NzKHtoZWlnaHQ6ImF1dG8ifSl9ZnVuY3Rpb24gaCgpe2lmKGspaz0hMSxpKCksYy5jc3Moe2hlaWdodDowfSk7ZWxzZXtjLmNzcyh7aGVpZ2h0OmNbMF0uc2Nyb2xsSGVpZ2h0KyJweCJ9KTt7Y1swXS5vZmZzZXRXaWR0aH1jLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSBpbiIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIiksZSh7aGVpZ2h0OjB9KS50aGVuKGkpfX1mdW5jdGlvbiBpKCl7Yy5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLGMuYWRkQ2xhc3MoImNvbGxhcHNlIil9dmFyIGosaz0hMDtiLiR3YXRjaChkLmNvbGxhcHNlLGZ1bmN0aW9uKGEpe2E/aCgpOmYoKX0pfX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5hY2NvcmRpb24iLFsidWkuYm9vdHN0cmFwLmNvbGxhcHNlIl0pLmNvbnN0YW50KCJhY2NvcmRpb25Db25maWciLHtjbG9zZU90aGVyczohMH0pLmNvbnRyb2xsZXIoIkFjY29yZGlvbkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiYWNjb3JkaW9uQ29uZmlnIixmdW5jdGlvbihhLGIsYyl7dGhpcy5ncm91cHM9W10sdGhpcy5jbG9zZU90aGVycz1mdW5jdGlvbihkKXt2YXIgZT1hbmd1bGFyLmlzRGVmaW5lZChiLmNsb3NlT3RoZXJzKT9hLiRldmFsKGIuY2xvc2VPdGhlcnMpOmMuY2xvc2VPdGhlcnM7ZSYmYW5ndWxhci5mb3JFYWNoKHRoaXMuZ3JvdXBzLGZ1bmN0aW9uKGEpe2EhPT1kJiYoYS5pc09wZW49ITEpfSl9LHRoaXMuYWRkR3JvdXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczt0aGlzLmdyb3Vwcy5wdXNoKGEpLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtiLnJlbW92ZUdyb3VwKGEpfSl9LHRoaXMucmVtb3ZlR3JvdXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ncm91cHMuaW5kZXhPZihhKTstMSE9PWImJnRoaXMuZ3JvdXBzLnNwbGljZShiLDEpfX1dKS5kaXJlY3RpdmUoImFjY29yZGlvbiIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixjb250cm9sbGVyOiJBY2NvcmRpb25Db250cm9sbGVyIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITEsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCJ9fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25Hcm91cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZToiXmFjY29yZGlvbiIscmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsc2NvcGU6e2hlYWRpbmc6IkAiLGlzT3BlbjoiPT8iLGlzRGlzYWJsZWQ6Ij0/In0sY29udHJvbGxlcjpmdW5jdGlvbigpe3RoaXMuc2V0SGVhZGluZz1mdW5jdGlvbihhKXt0aGlzLmhlYWRpbmc9YX19LGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRHcm91cChhKSxhLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihiKXtiJiZkLmNsb3NlT3RoZXJzKGEpfSksYS50b2dnbGVPcGVuPWZ1bmN0aW9uKCl7YS5pc0Rpc2FibGVkfHwoYS5pc09wZW49IWEuaXNPcGVuKX19fX0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uSGVhZGluZyIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHRlbXBsYXRlOiIiLHJlcGxhY2U6ITAscmVxdWlyZToiXmFjY29yZGlvbkdyb3VwIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQsZSl7ZC5zZXRIZWFkaW5nKGUoYSxmdW5jdGlvbigpe30pKX19fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25UcmFuc2NsdWRlIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeYWNjb3JkaW9uR3JvdXAiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7YS4kd2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZFtjLmFjY29yZGlvblRyYW5zY2x1ZGVdfSxmdW5jdGlvbihhKXthJiYoYi5odG1sKCIiKSxiLmFwcGVuZChhKSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5hbGVydCIsW10pLmNvbnRyb2xsZXIoIkFsZXJ0Q29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLGZ1bmN0aW9uKGEsYil7YS5jbG9zZWFibGU9ImNsb3NlImluIGJ9XSkuZGlyZWN0aXZlKCJhbGVydCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixjb250cm9sbGVyOiJBbGVydENvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsc2NvcGU6e3R5cGU6IkAiLGNsb3NlOiImIn19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5iaW5kSHRtbCIsW10pLmRpcmVjdGl2ZSgiYmluZEh0bWxVbnNhZmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjKXtiLmFkZENsYXNzKCJuZy1iaW5kaW5nIikuZGF0YSgiJGJpbmRpbmciLGMuYmluZEh0bWxVbnNhZmUpLGEuJHdhdGNoKGMuYmluZEh0bWxVbnNhZmUsZnVuY3Rpb24oYSl7Yi5odG1sKGF8fCIiKX0pfX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYnV0dG9ucyIsW10pLmNvbnN0YW50KCJidXR0b25Db25maWciLHthY3RpdmVDbGFzczoiYWN0aXZlIix0b2dnbGVFdmVudDoiY2xpY2sifSkuY29udHJvbGxlcigiQnV0dG9uc0NvbnRyb2xsZXIiLFsiYnV0dG9uQ29uZmlnIixmdW5jdGlvbihhKXt0aGlzLmFjdGl2ZUNsYXNzPWEuYWN0aXZlQ2xhc3N8fCJhY3RpdmUiLHRoaXMudG9nZ2xlRXZlbnQ9YS50b2dnbGVFdmVudHx8ImNsaWNrIn1dKS5kaXJlY3RpdmUoImJ0blJhZGlvIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOlsiYnRuUmFkaW8iLCJuZ01vZGVsIl0sY29udHJvbGxlcjoiQnV0dG9uc0NvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07Zi4kcmVuZGVyPWZ1bmN0aW9uKCl7Yi50b2dnbGVDbGFzcyhlLmFjdGl2ZUNsYXNzLGFuZ3VsYXIuZXF1YWxzKGYuJG1vZGVsVmFsdWUsYS4kZXZhbChjLmJ0blJhZGlvKSkpfSxiLmJpbmQoZS50b2dnbGVFdmVudCxmdW5jdGlvbigpe3ZhciBkPWIuaGFzQ2xhc3MoZS5hY3RpdmVDbGFzcyk7KCFkfHxhbmd1bGFyLmlzRGVmaW5lZChjLnVuY2hlY2thYmxlKSkmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7Zi4kc2V0Vmlld1ZhbHVlKGQ/bnVsbDphLiRldmFsKGMuYnRuUmFkaW8pKSxmLiRyZW5kZXIoKX0pfSl9fX0pLmRpcmVjdGl2ZSgiYnRuQ2hlY2tib3giLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6WyJidG5DaGVja2JveCIsIm5nTW9kZWwiXSxjb250cm9sbGVyOiJCdXR0b25zQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKCl7cmV0dXJuIGcoYy5idG5DaGVja2JveFRydWUsITApfWZ1bmN0aW9uIGYoKXtyZXR1cm4gZyhjLmJ0bkNoZWNrYm94RmFsc2UsITEpfWZ1bmN0aW9uIGcoYixjKXt2YXIgZD1hLiRldmFsKGIpO3JldHVybiBhbmd1bGFyLmlzRGVmaW5lZChkKT9kOmN9dmFyIGg9ZFswXSxpPWRbMV07aS4kcmVuZGVyPWZ1bmN0aW9uKCl7Yi50b2dnbGVDbGFzcyhoLmFjdGl2ZUNsYXNzLGFuZ3VsYXIuZXF1YWxzKGkuJG1vZGVsVmFsdWUsZSgpKSl9LGIuYmluZChoLnRvZ2dsZUV2ZW50LGZ1bmN0aW9uKCl7YS4kYXBwbHkoZnVuY3Rpb24oKXtpLiRzZXRWaWV3VmFsdWUoYi5oYXNDbGFzcyhoLmFjdGl2ZUNsYXNzKT9mKCk6ZSgpKSxpLiRyZW5kZXIoKX0pfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuY2Fyb3VzZWwiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuY29udHJvbGxlcigiQ2Fyb3VzZWxDb250cm9sbGVyIixbIiRzY29wZSIsIiR0aW1lb3V0IiwiJHRyYW5zaXRpb24iLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKCl7ZSgpO3ZhciBjPSthLmludGVydmFsOyFpc05hTihjKSYmYz49MCYmKGc9YihmLGMpKX1mdW5jdGlvbiBlKCl7ZyYmKGIuY2FuY2VsKGcpLGc9bnVsbCl9ZnVuY3Rpb24gZigpe2g/KGEubmV4dCgpLGQoKSk6YS5wYXVzZSgpfXZhciBnLGgsaT10aGlzLGo9aS5zbGlkZXM9YS5zbGlkZXM9W10saz0tMTtpLmN1cnJlbnRTbGlkZT1udWxsO3ZhciBsPSExO2kuc2VsZWN0PWEuc2VsZWN0PWZ1bmN0aW9uKGUsZil7ZnVuY3Rpb24gZygpe2lmKCFsKXtpZihpLmN1cnJlbnRTbGlkZSYmYW5ndWxhci5pc1N0cmluZyhmKSYmIWEubm9UcmFuc2l0aW9uJiZlLiRlbGVtZW50KXtlLiRlbGVtZW50LmFkZENsYXNzKGYpO3tlLiRlbGVtZW50WzBdLm9mZnNldFdpZHRofWFuZ3VsYXIuZm9yRWFjaChqLGZ1bmN0aW9uKGEpe2FuZ3VsYXIuZXh0ZW5kKGEse2RpcmVjdGlvbjoiIixlbnRlcmluZzohMSxsZWF2aW5nOiExLGFjdGl2ZTohMX0pfSksYW5ndWxhci5leHRlbmQoZSx7ZGlyZWN0aW9uOmYsYWN0aXZlOiEwLGVudGVyaW5nOiEwfSksYW5ndWxhci5leHRlbmQoaS5jdXJyZW50U2xpZGV8fHt9LHtkaXJlY3Rpb246ZixsZWF2aW5nOiEwfSksYS4kY3VycmVudFRyYW5zaXRpb249YyhlLiRlbGVtZW50LHt9KSxmdW5jdGlvbihiLGMpe2EuJGN1cnJlbnRUcmFuc2l0aW9uLnRoZW4oZnVuY3Rpb24oKXtoKGIsYyl9LGZ1bmN0aW9uKCl7aChiLGMpfSl9KGUsaS5jdXJyZW50U2xpZGUpfWVsc2UgaChlLGkuY3VycmVudFNsaWRlKTtpLmN1cnJlbnRTbGlkZT1lLGs9bSxkKCl9fWZ1bmN0aW9uIGgoYixjKXthbmd1bGFyLmV4dGVuZChiLHtkaXJlY3Rpb246IiIsYWN0aXZlOiEwLGxlYXZpbmc6ITEsZW50ZXJpbmc6ITF9KSxhbmd1bGFyLmV4dGVuZChjfHx7fSx7ZGlyZWN0aW9uOiIiLGFjdGl2ZTohMSxsZWF2aW5nOiExLGVudGVyaW5nOiExfSksYS4kY3VycmVudFRyYW5zaXRpb249bnVsbH12YXIgbT1qLmluZGV4T2YoZSk7dm9pZCAwPT09ZiYmKGY9bT5rPyJuZXh0IjoicHJldiIpLGUmJmUhPT1pLmN1cnJlbnRTbGlkZSYmKGEuJGN1cnJlbnRUcmFuc2l0aW9uPyhhLiRjdXJyZW50VHJhbnNpdGlvbi5jYW5jZWwoKSxiKGcpKTpnKCkpfSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7bD0hMH0pLGkuaW5kZXhPZlNsaWRlPWZ1bmN0aW9uKGEpe3JldHVybiBqLmluZGV4T2YoYSl9LGEubmV4dD1mdW5jdGlvbigpe3ZhciBiPShrKzEpJWoubGVuZ3RoO3JldHVybiBhLiRjdXJyZW50VHJhbnNpdGlvbj92b2lkIDA6aS5zZWxlY3QoaltiXSwibmV4dCIpfSxhLnByZXY9ZnVuY3Rpb24oKXt2YXIgYj0wPmstMT9qLmxlbmd0aC0xOmstMTtyZXR1cm4gYS4kY3VycmVudFRyYW5zaXRpb24/dm9pZCAwOmkuc2VsZWN0KGpbYl0sInByZXYiKX0sYS5pc0FjdGl2ZT1mdW5jdGlvbihhKXtyZXR1cm4gaS5jdXJyZW50U2xpZGU9PT1hfSxhLiR3YXRjaCgiaW50ZXJ2YWwiLGQpLGEuJG9uKCIkZGVzdHJveSIsZSksYS5wbGF5PWZ1bmN0aW9uKCl7aHx8KGg9ITAsZCgpKX0sYS5wYXVzZT1mdW5jdGlvbigpe2Eubm9QYXVzZXx8KGg9ITEsZSgpKX0saS5hZGRTbGlkZT1mdW5jdGlvbihiLGMpe2IuJGVsZW1lbnQ9YyxqLnB1c2goYiksMT09PWoubGVuZ3RofHxiLmFjdGl2ZT8oaS5zZWxlY3QoaltqLmxlbmd0aC0xXSksMT09ai5sZW5ndGgmJmEucGxheSgpKTpiLmFjdGl2ZT0hMX0saS5yZW1vdmVTbGlkZT1mdW5jdGlvbihhKXt2YXIgYj1qLmluZGV4T2YoYSk7ai5zcGxpY2UoYiwxKSxqLmxlbmd0aD4wJiZhLmFjdGl2ZT9pLnNlbGVjdChiPj1qLmxlbmd0aD9qW2ItMV06altiXSk6az5iJiZrLS19fV0pLmRpcmVjdGl2ZSgiY2Fyb3VzZWwiLFtmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxjb250cm9sbGVyOiJDYXJvdXNlbENvbnRyb2xsZXIiLHJlcXVpcmU6ImNhcm91c2VsIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsc2NvcGU6e2ludGVydmFsOiI9Iixub1RyYW5zaXRpb246Ij0iLG5vUGF1c2U6Ij0ifX19XSkuZGlyZWN0aXZlKCJzbGlkZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZToiXmNhcm91c2VsIixyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsc2NvcGU6e2FjdGl2ZToiPT8ifSxsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkU2xpZGUoYSxiKSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZC5yZW1vdmVTbGlkZShhKX0pLGEuJHdhdGNoKCJhY3RpdmUiLGZ1bmN0aW9uKGIpe2ImJmQuc2VsZWN0KGEpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZGF0ZXBhcnNlciIsW10pLnNlcnZpY2UoImRhdGVQYXJzZXIiLFsiJGxvY2FsZSIsIm9yZGVyQnlGaWx0ZXIiLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7cmV0dXJuIDE9PT1iJiZjPjI4PzI5PT09YyYmKGElND09PTAmJmElMTAwIT09MHx8YSU0MDA9PT0wKTozPT09Ynx8NT09PWJ8fDg9PT1ifHwxMD09PWI/MzE+YzohMH10aGlzLnBhcnNlcnM9e307dmFyIGQ9e3l5eXk6e3JlZ2V4OiJcXGR7NH0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYX19LHl5OntyZWdleDoiXFxkezJ9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLnllYXI9K2ErMmUzfX0seTp7cmVnZXg6IlxcZHsxLDR9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLnllYXI9K2F9fSxNTU1NOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuTU9OVEguam9pbigifCIpLGFwcGx5OmZ1bmN0aW9uKGIpe3RoaXMubW9udGg9YS5EQVRFVElNRV9GT1JNQVRTLk1PTlRILmluZGV4T2YoYil9fSxNTU06e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5TSE9SVE1PTlRILmpvaW4oInwiKSxhcHBseTpmdW5jdGlvbihiKXt0aGlzLm1vbnRoPWEuREFURVRJTUVfRk9STUFUUy5TSE9SVE1PTlRILmluZGV4T2YoYil9fSxNTTp7cmVnZXg6IjBbMS05XXwxWzAtMl0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMubW9udGg9YS0xfX0sTTp7cmVnZXg6IlsxLTldfDFbMC0yXSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5tb250aD1hLTF9fSxkZDp7cmVnZXg6IlswLTJdWzAtOV17MX18M1swLTFdezF9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLmRhdGU9K2F9fSxkOntyZWdleDoiWzEtMl0/WzAtOV17MX18M1swLTFdezF9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLmRhdGU9K2F9fSxFRUVFOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuREFZLmpvaW4oInwiKX0sRUVFOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlREQVkuam9pbigifCIpfX07dGhpcy5jcmVhdGVQYXJzZXI9ZnVuY3Rpb24oYSl7dmFyIGM9W10sZT1hLnNwbGl0KCIiKTtyZXR1cm4gYW5ndWxhci5mb3JFYWNoKGQsZnVuY3Rpb24oYixkKXt2YXIgZj1hLmluZGV4T2YoZCk7aWYoZj4tMSl7YT1hLnNwbGl0KCIiKSxlW2ZdPSIoIitiLnJlZ2V4KyIpIixhW2ZdPSIkIjtmb3IodmFyIGc9ZisxLGg9ZitkLmxlbmd0aDtoPmc7ZysrKWVbZ109IiIsYVtnXT0iJCI7YT1hLmpvaW4oIiIpLGMucHVzaCh7aW5kZXg6ZixhcHBseTpiLmFwcGx5fSl9fSkse3JlZ2V4Om5ldyBSZWdFeHAoIl4iK2Uuam9pbigiIikrIiQiKSxtYXA6YihjLCJpbmRleCIpfX0sdGhpcy5wYXJzZT1mdW5jdGlvbihiLGQpe2lmKCFhbmd1bGFyLmlzU3RyaW5nKGIpKXJldHVybiBiO2Q9YS5EQVRFVElNRV9GT1JNQVRTW2RdfHxkLHRoaXMucGFyc2Vyc1tkXXx8KHRoaXMucGFyc2Vyc1tkXT10aGlzLmNyZWF0ZVBhcnNlcihkKSk7dmFyIGU9dGhpcy5wYXJzZXJzW2RdLGY9ZS5yZWdleCxnPWUubWFwLGg9Yi5tYXRjaChmKTtpZihoJiZoLmxlbmd0aCl7Zm9yKHZhciBpLGo9e3llYXI6MTkwMCxtb250aDowLGRhdGU6MSxob3VyczowfSxrPTEsbD1oLmxlbmd0aDtsPms7aysrKXt2YXIgbT1nW2stMV07bS5hcHBseSYmbS5hcHBseS5jYWxsKGosaFtrXSl9cmV0dXJuIGMoai55ZWFyLGoubW9udGgsai5kYXRlKSYmKGk9bmV3IERhdGUoai55ZWFyLGoubW9udGgsai5kYXRlLGouaG91cnMpKSxpfX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsW10pLmZhY3RvcnkoIiRwb3NpdGlvbiIsWyIkZG9jdW1lbnQiLCIkd2luZG93IixmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxjKXtyZXR1cm4gYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGVbY106Yi5nZXRDb21wdXRlZFN0eWxlP2IuZ2V0Q29tcHV0ZWRTdHlsZShhKVtjXTphLnN0eWxlW2NdfWZ1bmN0aW9uIGQoYSl7cmV0dXJuInN0YXRpYyI9PT0oYyhhLCJwb3NpdGlvbiIpfHwic3RhdGljIil9dmFyIGU9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPWFbMF0sZT1iLm9mZnNldFBhcmVudHx8YztlJiZlIT09YyYmZChlKTspZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8Y307cmV0dXJue3Bvc2l0aW9uOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMub2Zmc2V0KGIpLGQ9e3RvcDowLGxlZnQ6MH0sZj1lKGJbMF0pO2YhPWFbMF0mJihkPXRoaXMub2Zmc2V0KGFuZ3VsYXIuZWxlbWVudChmKSksZC50b3ArPWYuY2xpZW50VG9wLWYuc2Nyb2xsVG9wLGQubGVmdCs9Zi5jbGllbnRMZWZ0LWYuc2Nyb2xsTGVmdCk7dmFyIGc9YlswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6Zy53aWR0aHx8Yi5wcm9wKCJvZmZzZXRXaWR0aCIpLGhlaWdodDpnLmhlaWdodHx8Yi5wcm9wKCJvZmZzZXRIZWlnaHQiKSx0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0OmZ1bmN0aW9uKGMpe3ZhciBkPWNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3dpZHRoOmQud2lkdGh8fGMucHJvcCgib2Zmc2V0V2lkdGgiKSxoZWlnaHQ6ZC5oZWlnaHR8fGMucHJvcCgib2Zmc2V0SGVpZ2h0IiksdG9wOmQudG9wKyhiLnBhZ2VZT2Zmc2V0fHxhWzBdLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApLGxlZnQ6ZC5sZWZ0KyhiLnBhZ2VYT2Zmc2V0fHxhWzBdLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0KX19LHBvc2l0aW9uRWxlbWVudHM6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaT1jLnNwbGl0KCItIiksaj1pWzBdLGs9aVsxXXx8ImNlbnRlciI7ZT1kP3RoaXMub2Zmc2V0KGEpOnRoaXMucG9zaXRpb24oYSksZj1iLnByb3AoIm9mZnNldFdpZHRoIiksZz1iLnByb3AoIm9mZnNldEhlaWdodCIpO3ZhciBsPXtjZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5sZWZ0K2Uud2lkdGgvMi1mLzJ9LGxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5sZWZ0fSxyaWdodDpmdW5jdGlvbigpe3JldHVybiBlLmxlZnQrZS53aWR0aH19LG09e2NlbnRlcjpmdW5jdGlvbigpe3JldHVybiBlLnRvcCtlLmhlaWdodC8yLWcvMn0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wfSxib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3ArZS5oZWlnaHR9fTtzd2l0Y2goail7Y2FzZSJyaWdodCI6aD17dG9wOm1ba10oKSxsZWZ0Omxbal0oKX07YnJlYWs7Y2FzZSJsZWZ0IjpoPXt0b3A6bVtrXSgpLGxlZnQ6ZS5sZWZ0LWZ9O2JyZWFrO2Nhc2UiYm90dG9tIjpoPXt0b3A6bVtqXSgpLGxlZnQ6bFtrXSgpfTticmVhaztkZWZhdWx0Omg9e3RvcDplLnRvcC1nLGxlZnQ6bFtrXSgpfX1yZXR1cm4gaH19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlciIsWyJ1aS5ib290c3RyYXAuZGF0ZXBhcnNlciIsInVpLmJvb3RzdHJhcC5wb3NpdGlvbiJdKS5jb25zdGFudCgiZGF0ZXBpY2tlckNvbmZpZyIse2Zvcm1hdERheToiZGQiLGZvcm1hdE1vbnRoOiJNTU1NIixmb3JtYXRZZWFyOiJ5eXl5Iixmb3JtYXREYXlIZWFkZXI6IkVFRSIsZm9ybWF0RGF5VGl0bGU6Ik1NTU0geXl5eSIsZm9ybWF0TW9udGhUaXRsZToieXl5eSIsZGF0ZXBpY2tlck1vZGU6ImRheSIsbWluTW9kZToiZGF5IixtYXhNb2RlOiJ5ZWFyIixzaG93V2Vla3M6ITAsc3RhcnRpbmdEYXk6MCx5ZWFyUmFuZ2U6MjAsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbH0pLmNvbnRyb2xsZXIoIkRhdGVwaWNrZXJDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsIiRpbnRlcnBvbGF0ZSIsIiR0aW1lb3V0IiwiJGxvZyIsImRhdGVGaWx0ZXIiLCJkYXRlcGlja2VyQ29uZmlnIixmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMsaj17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9O3RoaXMubW9kZXM9WyJkYXkiLCJtb250aCIsInllYXIiXSxhbmd1bGFyLmZvckVhY2goWyJmb3JtYXREYXkiLCJmb3JtYXRNb250aCIsImZvcm1hdFllYXIiLCJmb3JtYXREYXlIZWFkZXIiLCJmb3JtYXREYXlUaXRsZSIsImZvcm1hdE1vbnRoVGl0bGUiLCJtaW5Nb2RlIiwibWF4TW9kZSIsInNob3dXZWVrcyIsInN0YXJ0aW5nRGF5IiwieWVhclJhbmdlIl0sZnVuY3Rpb24oYyxlKXtpW2NdPWFuZ3VsYXIuaXNEZWZpbmVkKGJbY10pPzg+ZT9kKGJbY10pKGEuJHBhcmVudCk6YS4kcGFyZW50LiRldmFsKGJbY10pOmhbY119KSxhbmd1bGFyLmZvckVhY2goWyJtaW5EYXRlIiwibWF4RGF0ZSJdLGZ1bmN0aW9uKGQpe2JbZF0/YS4kcGFyZW50LiR3YXRjaChjKGJbZF0pLGZ1bmN0aW9uKGEpe2lbZF09YT9uZXcgRGF0ZShhKTpudWxsLGkucmVmcmVzaFZpZXcoKX0pOmlbZF09aFtkXT9uZXcgRGF0ZShoW2RdKTpudWxsfSksYS5kYXRlcGlja2VyTW9kZT1hLmRhdGVwaWNrZXJNb2RlfHxoLmRhdGVwaWNrZXJNb2RlLGEudW5pcXVlSWQ9ImRhdGVwaWNrZXItIithLiRpZCsiLSIrTWF0aC5mbG9vcigxZTQqTWF0aC5yYW5kb20oKSksdGhpcy5hY3RpdmVEYXRlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuaW5pdERhdGUpP2EuJHBhcmVudC4kZXZhbChiLmluaXREYXRlKTpuZXcgRGF0ZSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09aS5jb21wYXJlKGIuZGF0ZSxpLmFjdGl2ZURhdGUpPyhhLmFjdGl2ZURhdGVJZD1iLnVpZCwhMCk6ITF9LHRoaXMuaW5pdD1mdW5jdGlvbihhKXtqPWEsai4kcmVuZGVyPWZ1bmN0aW9uKCl7aS5yZW5kZXIoKX19LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7aWYoai4kbW9kZWxWYWx1ZSl7dmFyIGE9bmV3IERhdGUoai4kbW9kZWxWYWx1ZSksYj0haXNOYU4oYSk7Yj90aGlzLmFjdGl2ZURhdGU9YTpmLmVycm9yKCdEYXRlcGlja2VyIGRpcmVjdGl2ZTogIm5nLW1vZGVsIiB2YWx1ZSBtdXN0IGJlIGEgRGF0ZSBvYmplY3QsIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAwMS4wMS4xOTcwIG9yIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBSRkMyODIyIG9yIElTTyA4NjAxIGRhdGUuJyksai4kc2V0VmFsaWRpdHkoImRhdGUiLGIpfXRoaXMucmVmcmVzaFZpZXcoKX0sdGhpcy5yZWZyZXNoVmlldz1mdW5jdGlvbigpe2lmKHRoaXMuZWxlbWVudCl7dGhpcy5fcmVmcmVzaFZpZXcoKTt2YXIgYT1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm51bGw7ai4kc2V0VmFsaWRpdHkoImRhdGUtZGlzYWJsZWQiLCFhfHx0aGlzLmVsZW1lbnQmJiF0aGlzLmlzRGlzYWJsZWQoYSkpfX0sdGhpcy5jcmVhdGVEYXRlT2JqZWN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9ai4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKTpudWxsO3JldHVybntkYXRlOmEsbGFiZWw6ZyhhLGIpLHNlbGVjdGVkOmMmJjA9PT10aGlzLmNvbXBhcmUoYSxjKSxkaXNhYmxlZDp0aGlzLmlzRGlzYWJsZWQoYSksY3VycmVudDowPT09dGhpcy5jb21wYXJlKGEsbmV3IERhdGUpfX0sdGhpcy5pc0Rpc2FibGVkPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLm1pbkRhdGUmJnRoaXMuY29tcGFyZShjLHRoaXMubWluRGF0ZSk8MHx8dGhpcy5tYXhEYXRlJiZ0aGlzLmNvbXBhcmUoYyx0aGlzLm1heERhdGUpPjB8fGIuZGF0ZURpc2FibGVkJiZhLmRhdGVEaXNhYmxlZCh7ZGF0ZTpjLG1vZGU6YS5kYXRlcGlja2VyTW9kZX0pfSx0aGlzLnNwbGl0PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2EubGVuZ3RoPjA7KWMucHVzaChhLnNwbGljZSgwLGIpKTtyZXR1cm4gY30sYS5zZWxlY3Q9ZnVuY3Rpb24oYil7aWYoYS5kYXRlcGlja2VyTW9kZT09PWkubWluTW9kZSl7dmFyIGM9ai4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKTpuZXcgRGF0ZSgwLDAsMCwwLDAsMCwwKTtjLnNldEZ1bGxZZWFyKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCksYi5nZXREYXRlKCkpLGouJHNldFZpZXdWYWx1ZShjKSxqLiRyZW5kZXIoKX1lbHNlIGkuYWN0aXZlRGF0ZT1iLGEuZGF0ZXBpY2tlck1vZGU9aS5tb2Rlc1tpLm1vZGVzLmluZGV4T2YoYS5kYXRlcGlja2VyTW9kZSktMV19LGEubW92ZT1mdW5jdGlvbihhKXt2YXIgYj1pLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSthKihpLnN0ZXAueWVhcnN8fDApLGM9aS5hY3RpdmVEYXRlLmdldE1vbnRoKCkrYSooaS5zdGVwLm1vbnRoc3x8MCk7aS5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKGIsYywxKSxpLnJlZnJlc2hWaWV3KCl9LGEudG9nZ2xlTW9kZT1mdW5jdGlvbihiKXtiPWJ8fDEsYS5kYXRlcGlja2VyTW9kZT09PWkubWF4TW9kZSYmMT09PWJ8fGEuZGF0ZXBpY2tlck1vZGU9PT1pLm1pbk1vZGUmJi0xPT09Ynx8KGEuZGF0ZXBpY2tlck1vZGU9aS5tb2Rlc1tpLm1vZGVzLmluZGV4T2YoYS5kYXRlcGlja2VyTW9kZSkrYl0pfSxhLmtleXM9ezEzOiJlbnRlciIsMzI6InNwYWNlIiwzMzoicGFnZXVwIiwzNDoicGFnZWRvd24iLDM1OiJlbmQiLDM2OiJob21lIiwzNzoibGVmdCIsMzg6InVwIiwzOToicmlnaHQiLDQwOiJkb3duIn07dmFyIGs9ZnVuY3Rpb24oKXtlKGZ1bmN0aW9uKCl7aS5lbGVtZW50WzBdLmZvY3VzKCl9LDAsITEpfTthLiRvbigiZGF0ZXBpY2tlci5mb2N1cyIsayksYS5rZXlkb3duPWZ1bmN0aW9uKGIpe3ZhciBjPWEua2V5c1tiLndoaWNoXTtpZihjJiYhYi5zaGlmdEtleSYmIWIuYWx0S2V5KWlmKGIucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLCJlbnRlciI9PT1jfHwic3BhY2UiPT09Yyl7aWYoaS5pc0Rpc2FibGVkKGkuYWN0aXZlRGF0ZSkpcmV0dXJuO2Euc2VsZWN0KGkuYWN0aXZlRGF0ZSksaygpfWVsc2UhYi5jdHJsS2V5fHwidXAiIT09YyYmImRvd24iIT09Yz8oaS5oYW5kbGVLZXlEb3duKGMsYiksaS5yZWZyZXNoVmlldygpKTooYS50b2dnbGVNb2RlKCJ1cCI9PT1jPzE6LTEpLGsoKSl9fV0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsc2NvcGU6e2RhdGVwaWNrZXJNb2RlOiI9PyIsZGF0ZURpc2FibGVkOiImIn0scmVxdWlyZTpbImRhdGVwaWNrZXIiLCI/Xm5nTW9kZWwiXSxjb250cm9sbGVyOiJEYXRlcGlja2VyQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZil9fX0pLmRpcmVjdGl2ZSgiZGF5cGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe2Z1bmN0aW9uIGYoYSxiKXtyZXR1cm4gMSE9PWJ8fGElNCE9PTB8fGElMTAwPT09MCYmYSU0MDAhPT0wP2lbYl06Mjl9ZnVuY3Rpb24gZyhhLGIpe3ZhciBjPW5ldyBBcnJheShiKSxkPW5ldyBEYXRlKGEpLGU9MDtmb3IoZC5zZXRIb3VycygxMik7Yj5lOyljW2UrK109bmV3IERhdGUoZCksZC5zZXREYXRlKGQuZ2V0RGF0ZSgpKzEpO3JldHVybiBjfWZ1bmN0aW9uIGgoYSl7dmFyIGI9bmV3IERhdGUoYSk7Yi5zZXREYXRlKGIuZ2V0RGF0ZSgpKzQtKGIuZ2V0RGF5KCl8fDcpKTt2YXIgYz1iLmdldFRpbWUoKTtyZXR1cm4gYi5zZXRNb250aCgwKSxiLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChjLWIpLzg2NGU1KS83KSsxfWIuc2hvd1dlZWtzPWUuc2hvd1dlZWtzLGUuc3RlcD17bW9udGhzOjF9LGUuZWxlbWVudD1jO3ZhciBpPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07ZS5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXt2YXIgYz1lLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxkPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpLGY9bmV3IERhdGUoYyxkLDEpLGk9ZS5zdGFydGluZ0RheS1mLmdldERheSgpLGo9aT4wPzctaTotaSxrPW5ldyBEYXRlKGYpO2o+MCYmay5zZXREYXRlKC1qKzEpO2Zvcih2YXIgbD1nKGssNDIpLG09MDs0Mj5tO20rKylsW21dPWFuZ3VsYXIuZXh0ZW5kKGUuY3JlYXRlRGF0ZU9iamVjdChsW21dLGUuZm9ybWF0RGF5KSx7c2Vjb25kYXJ5OmxbbV0uZ2V0TW9udGgoKSE9PWQsdWlkOmIudW5pcXVlSWQrIi0iK219KTtiLmxhYmVscz1uZXcgQXJyYXkoNyk7Zm9yKHZhciBuPTA7Nz5uO24rKyliLmxhYmVsc1tuXT17YWJicjphKGxbbl0uZGF0ZSxlLmZvcm1hdERheUhlYWRlciksZnVsbDphKGxbbl0uZGF0ZSwiRUVFRSIpfTtpZihiLnRpdGxlPWEoZS5hY3RpdmVEYXRlLGUuZm9ybWF0RGF5VGl0bGUpLGIucm93cz1lLnNwbGl0KGwsNyksYi5zaG93V2Vla3Mpe2Iud2Vla051bWJlcnM9W107Zm9yKHZhciBvPWgoYi5yb3dzWzBdWzBdLmRhdGUpLHA9Yi5yb3dzLmxlbmd0aDtiLndlZWtOdW1iZXJzLnB1c2gobysrKTxwOyk7fX0sZS5jb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpLW5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCksYi5nZXREYXRlKCkpfSxlLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZS5hY3RpdmVEYXRlLmdldERhdGUoKTtpZigibGVmdCI9PT1hKWItPTE7ZWxzZSBpZigidXAiPT09YSliLT03O2Vsc2UgaWYoInJpZ2h0Ij09PWEpYis9MTtlbHNlIGlmKCJkb3duIj09PWEpYis9NztlbHNlIGlmKCJwYWdldXAiPT09YXx8InBhZ2Vkb3duIj09PWEpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpKygicGFnZXVwIj09PWE/LTE6MSk7ZS5hY3RpdmVEYXRlLnNldE1vbnRoKGMsMSksYj1NYXRoLm1pbihmKGUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGUuYWN0aXZlRGF0ZS5nZXRNb250aCgpKSxiKX1lbHNlImhvbWUiPT09YT9iPTE6ImVuZCI9PT1hJiYoYj1mKGUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGUuYWN0aXZlRGF0ZS5nZXRNb250aCgpKSk7ZS5hY3RpdmVEYXRlLnNldERhdGUoYil9LGUucmVmcmVzaFZpZXcoKX19fV0pLmRpcmVjdGl2ZSgibW9udGhwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIixyZXF1aXJlOiJeZGF0ZXBpY2tlciIsbGluazpmdW5jdGlvbihiLGMsZCxlKXtlLnN0ZXA9e3llYXJzOjF9LGUuZWxlbWVudD1jLGUuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7Zm9yKHZhciBjPW5ldyBBcnJheSgxMiksZD1lLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxmPTA7MTI+ZjtmKyspY1tmXT1hbmd1bGFyLmV4dGVuZChlLmNyZWF0ZURhdGVPYmplY3QobmV3IERhdGUoZCxmLDEpLGUuZm9ybWF0TW9udGgpLHt1aWQ6Yi51bmlxdWVJZCsiLSIrZn0pO2IudGl0bGU9YShlLmFjdGl2ZURhdGUsZS5mb3JtYXRNb250aFRpdGxlKSxiLnJvd3M9ZS5zcGxpdChjLDMpfSxlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSktbmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSl9LGUuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1lLmFjdGl2ZURhdGUuZ2V0TW9udGgoKTtpZigibGVmdCI9PT1hKWItPTE7ZWxzZSBpZigidXAiPT09YSliLT0zO2Vsc2UgaWYoInJpZ2h0Ij09PWEpYis9MTtlbHNlIGlmKCJkb3duIj09PWEpYis9MztlbHNlIGlmKCJwYWdldXAiPT09YXx8InBhZ2Vkb3duIj09PWEpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKygicGFnZXVwIj09PWE/LTE6MSk7ZS5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKGMpfWVsc2UiaG9tZSI9PT1hP2I9MDoiZW5kIj09PWEmJihiPTExKTtlLmFjdGl2ZURhdGUuc2V0TW9udGgoYil9LGUucmVmcmVzaFZpZXcoKX19fV0pLmRpcmVjdGl2ZSgieWVhcnBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIixyZXF1aXJlOiJeZGF0ZXBpY2tlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGEpe3JldHVybiBwYXJzZUludCgoYS0xKS9mLDEwKSpmKzF9dmFyIGY9ZC55ZWFyUmFuZ2U7ZC5zdGVwPXt5ZWFyczpmfSxkLmVsZW1lbnQ9YixkLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe2Zvcih2YXIgYj1uZXcgQXJyYXkoZiksYz0wLGc9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk7Zj5jO2MrKyliW2NdPWFuZ3VsYXIuZXh0ZW5kKGQuY3JlYXRlRGF0ZU9iamVjdChuZXcgRGF0ZShnK2MsMCwxKSxkLmZvcm1hdFllYXIpLHt1aWQ6YS51bmlxdWVJZCsiLSIrY30pO2EudGl0bGU9W2JbMF0ubGFiZWwsYltmLTFdLmxhYmVsXS5qb2luKCIgLSAiKSxhLnJvd3M9ZC5zcGxpdChiLDUpfSxkLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5nZXRGdWxsWWVhcigpLWIuZ2V0RnVsbFllYXIoKX0sZC5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpOyJsZWZ0Ij09PWE/Yi09MToidXAiPT09YT9iLT01OiJyaWdodCI9PT1hP2IrPTE6ImRvd24iPT09YT9iKz01OiJwYWdldXAiPT09YXx8InBhZ2Vkb3duIj09PWE/Yis9KCJwYWdldXAiPT09YT8tMToxKSpkLnN0ZXAueWVhcnM6ImhvbWUiPT09YT9iPWUoZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpOiJlbmQiPT09YSYmKGI9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSkrZi0xKSxkLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYil9LGQucmVmcmVzaFZpZXcoKX19fV0pLmNvbnN0YW50KCJkYXRlcGlja2VyUG9wdXBDb25maWciLHtkYXRlcGlja2VyUG9wdXA6Inl5eXktTU0tZGQiLGN1cnJlbnRUZXh0OiJUb2RheSIsY2xlYXJUZXh0OiJDbGVhciIsY2xvc2VUZXh0OiJEb25lIixjbG9zZU9uRGF0ZVNlbGVjdGlvbjohMCxhcHBlbmRUb0JvZHk6ITEsc2hvd0J1dHRvbkJhcjohMH0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlclBvcHVwIixbIiRjb21waWxlIiwiJHBhcnNlIiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwiZGF0ZUZpbHRlciIsImRhdGVQYXJzZXIiLCJkYXRlcGlja2VyUG9wdXBDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6Im5nTW9kZWwiLHNjb3BlOntpc09wZW46Ij0/IixjdXJyZW50VGV4dDoiQCIsY2xlYXJUZXh0OiJAIixjbG9zZVRleHQ6IkAiLGRhdGVEaXNhYmxlZDoiJiJ9LGxpbms6ZnVuY3Rpb24oaCxpLGosayl7ZnVuY3Rpb24gbChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oYSl7cmV0dXJuIi0iK2EudG9Mb3dlckNhc2UoKX0pfWZ1bmN0aW9uIG0oYSl7aWYoYSl7aWYoYW5ndWxhci5pc0RhdGUoYSkmJiFpc05hTihhKSlyZXR1cm4gay4kc2V0VmFsaWRpdHkoImRhdGUiLCEwKSxhO2lmKGFuZ3VsYXIuaXNTdHJpbmcoYSkpe3ZhciBiPWYucGFyc2UoYSxuKXx8bmV3IERhdGUoYSk7cmV0dXJuIGlzTmFOKGIpP3ZvaWQgay4kc2V0VmFsaWRpdHkoImRhdGUiLCExKTooay4kc2V0VmFsaWRpdHkoImRhdGUiLCEwKSxiKX1yZXR1cm4gdm9pZCBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITEpfXJldHVybiBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLG51bGx9dmFyIG4sbz1hbmd1bGFyLmlzRGVmaW5lZChqLmNsb3NlT25EYXRlU2VsZWN0aW9uKT9oLiRwYXJlbnQuJGV2YWwoai5jbG9zZU9uRGF0ZVNlbGVjdGlvbik6Zy5jbG9zZU9uRGF0ZVNlbGVjdGlvbixwPWFuZ3VsYXIuaXNEZWZpbmVkKGouZGF0ZXBpY2tlckFwcGVuZFRvQm9keSk/aC4kcGFyZW50LiRldmFsKGouZGF0ZXBpY2tlckFwcGVuZFRvQm9keSk6Zy5hcHBlbmRUb0JvZHk7aC5zaG93QnV0dG9uQmFyPWFuZ3VsYXIuaXNEZWZpbmVkKGouc2hvd0J1dHRvbkJhcik/aC4kcGFyZW50LiRldmFsKGouc2hvd0J1dHRvbkJhcik6Zy5zaG93QnV0dG9uQmFyLGguZ2V0VGV4dD1mdW5jdGlvbihhKXtyZXR1cm4gaFthKyJUZXh0Il18fGdbYSsiVGV4dCJdfSxqLiRvYnNlcnZlKCJkYXRlcGlja2VyUG9wdXAiLGZ1bmN0aW9uKGEpe249YXx8Zy5kYXRlcGlja2VyUG9wdXAsay4kcmVuZGVyKCl9KTt2YXIgcT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgZGF0ZXBpY2tlci1wb3B1cC13cmFwPjxkaXYgZGF0ZXBpY2tlcj48L2Rpdj48L2Rpdj4iKTtxLmF0dHIoeyJuZy1tb2RlbCI6ImRhdGUiLCJuZy1jaGFuZ2UiOiJkYXRlU2VsZWN0aW9uKCkifSk7dmFyIHI9YW5ndWxhci5lbGVtZW50KHEuY2hpbGRyZW4oKVswXSk7ai5kYXRlcGlja2VyT3B0aW9ucyYmYW5ndWxhci5mb3JFYWNoKGguJHBhcmVudC4kZXZhbChqLmRhdGVwaWNrZXJPcHRpb25zKSxmdW5jdGlvbihhLGIpe3IuYXR0cihsKGIpLGEpfSksYW5ndWxhci5mb3JFYWNoKFsibWluRGF0ZSIsIm1heERhdGUiXSxmdW5jdGlvbihhKXtqW2FdJiYoaC4kcGFyZW50LiR3YXRjaChiKGpbYV0pLGZ1bmN0aW9uKGIpe2hbYV09Yn0pLHIuYXR0cihsKGEpLGEpKX0pLGouZGF0ZURpc2FibGVkJiZyLmF0dHIoImRhdGUtZGlzYWJsZWQiLCJkYXRlRGlzYWJsZWQoeyBkYXRlOiBkYXRlLCBtb2RlOiBtb2RlIH0pIiksay4kcGFyc2Vycy51bnNoaWZ0KG0pLGguZGF0ZVNlbGVjdGlvbj1mdW5jdGlvbihhKXthbmd1bGFyLmlzRGVmaW5lZChhKSYmKGguZGF0ZT1hKSxrLiRzZXRWaWV3VmFsdWUoaC5kYXRlKSxrLiRyZW5kZXIoKSxvJiYoaC5pc09wZW49ITEsaVswXS5mb2N1cygpKX0saS5iaW5kKCJpbnB1dCBjaGFuZ2Uga2V5dXAiLGZ1bmN0aW9uKCl7aC4kYXBwbHkoZnVuY3Rpb24oKXtoLmRhdGU9ay4kbW9kZWxWYWx1ZX0pfSksay4kcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGE9ay4kdmlld1ZhbHVlP2Uoay4kdmlld1ZhbHVlLG4pOiIiO2kudmFsKGEpLGguZGF0ZT1tKGsuJG1vZGVsVmFsdWUpfTt2YXIgcz1mdW5jdGlvbihhKXtoLmlzT3BlbiYmYS50YXJnZXQhPT1pWzBdJiZoLiRhcHBseShmdW5jdGlvbigpe2guaXNPcGVuPSExfSl9LHQ9ZnVuY3Rpb24oYSl7aC5rZXlkb3duKGEpfTtpLmJpbmQoImtleWRvd24iLHQpLGgua2V5ZG93bj1mdW5jdGlvbihhKXsyNz09PWEud2hpY2g/KGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGguY2xvc2UoKSk6NDAhPT1hLndoaWNofHxoLmlzT3Blbnx8KGguaXNPcGVuPSEwKX0saC4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYSl7YT8oaC4kYnJvYWRjYXN0KCJkYXRlcGlja2VyLmZvY3VzIiksaC5wb3NpdGlvbj1wP2Qub2Zmc2V0KGkpOmQucG9zaXRpb24oaSksaC5wb3NpdGlvbi50b3A9aC5wb3NpdGlvbi50b3AraS5wcm9wKCJvZmZzZXRIZWlnaHQiKSxjLmJpbmQoImNsaWNrIixzKSk6Yy51bmJpbmQoImNsaWNrIixzKX0pLGguc2VsZWN0PWZ1bmN0aW9uKGEpe2lmKCJ0b2RheSI9PT1hKXt2YXIgYj1uZXcgRGF0ZTthbmd1bGFyLmlzRGF0ZShrLiRtb2RlbFZhbHVlKT8oYT1uZXcgRGF0ZShrLiRtb2RlbFZhbHVlKSxhLnNldEZ1bGxZZWFyKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCksYi5nZXREYXRlKCkpKTphPW5ldyBEYXRlKGIuc2V0SG91cnMoMCwwLDAsMCkpfWguZGF0ZVNlbGVjdGlvbihhKX0saC5jbG9zZT1mdW5jdGlvbigpe2guaXNPcGVuPSExLGlbMF0uZm9jdXMoKX07dmFyIHU9YShxKShoKTtwP2MuZmluZCgiYm9keSIpLmFwcGVuZCh1KTppLmFmdGVyKHUpLGguJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXt1LnJlbW92ZSgpLGkudW5iaW5kKCJrZXlkb3duIix0KSxjLnVuYmluZCgiY2xpY2siLHMpfSl9fX1dKS5kaXJlY3RpdmUoImRhdGVwaWNrZXJQb3B1cFdyYXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiKXtiLmJpbmQoImNsaWNrIixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmRyb3Bkb3duIixbXSkuY29uc3RhbnQoImRyb3Bkb3duQ29uZmlnIix7b3BlbkNsYXNzOiJvcGVuIn0pLnNlcnZpY2UoImRyb3Bkb3duU2VydmljZSIsWyIkZG9jdW1lbnQiLGZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dGhpcy5vcGVuPWZ1bmN0aW9uKGUpe2J8fChhLmJpbmQoImNsaWNrIixjKSxhLmJpbmQoImtleWRvd24iLGQpKSxiJiZiIT09ZSYmKGIuaXNPcGVuPSExKSxiPWV9LHRoaXMuY2xvc2U9ZnVuY3Rpb24oZSl7Yj09PWUmJihiPW51bGwsYS51bmJpbmQoImNsaWNrIixjKSxhLnVuYmluZCgia2V5ZG93biIsZCkpfTt2YXIgYz1mdW5jdGlvbihhKXthJiZhLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxiLiRhcHBseShmdW5jdGlvbigpe2IuaXNPcGVuPSExfSl9LGQ9ZnVuY3Rpb24oYSl7Mjc9PT1hLndoaWNoJiYoYi5mb2N1c1RvZ2dsZUVsZW1lbnQoKSxjKCkpfX1dKS5jb250cm9sbGVyKCJEcm9wZG93bkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiZHJvcGRvd25Db25maWciLCJkcm9wZG93blNlcnZpY2UiLCIkYW5pbWF0ZSIsZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGg9dGhpcyxpPWEuJG5ldygpLGo9ZC5vcGVuQ2xhc3Msaz1hbmd1bGFyLm5vb3AsbD1iLm9uVG9nZ2xlP2MoYi5vblRvZ2dsZSk6YW5ndWxhci5ub29wO3RoaXMuaW5pdD1mdW5jdGlvbihkKXtoLiRlbGVtZW50PWQsYi5pc09wZW4mJihnPWMoYi5pc09wZW4pLGs9Zy5hc3NpZ24sYS4kd2F0Y2goZyxmdW5jdGlvbihhKXtpLmlzT3Blbj0hIWF9KSl9LHRoaXMudG9nZ2xlPWZ1bmN0aW9uKGEpe3JldHVybiBpLmlzT3Blbj1hcmd1bWVudHMubGVuZ3RoPyEhYTohaS5pc09wZW59LHRoaXMuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNPcGVufSxpLmZvY3VzVG9nZ2xlRWxlbWVudD1mdW5jdGlvbigpe2gudG9nZ2xlRWxlbWVudCYmaC50b2dnbGVFbGVtZW50WzBdLmZvY3VzKCl9LGkuJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGIsYyl7ZltiPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oaC4kZWxlbWVudCxqKSxiPyhpLmZvY3VzVG9nZ2xlRWxlbWVudCgpLGUub3BlbihpKSk6ZS5jbG9zZShpKSxrKGEsYiksYW5ndWxhci5pc0RlZmluZWQoYikmJmIhPT1jJiZsKGEse29wZW46ISFifSl9KSxhLiRvbigiJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtpLmlzT3Blbj0hMX0pLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtpLiRkZXN0cm95KCl9KX1dKS5kaXJlY3RpdmUoImRyb3Bkb3duIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiQ0EiLGNvbnRyb2xsZXI6IkRyb3Bkb3duQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmluaXQoYil9fX0pLmRpcmVjdGl2ZSgiZHJvcGRvd25Ub2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJDQSIscmVxdWlyZToiP15kcm9wZG93biIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtpZihkKXtkLnRvZ2dsZUVsZW1lbnQ9Yjt2YXIgZT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksYi5oYXNDbGFzcygiZGlzYWJsZWQiKXx8Yy5kaXNhYmxlZHx8YS4kYXBwbHkoZnVuY3Rpb24oKXtkLnRvZ2dsZSgpfSl9O2IuYmluZCgiY2xpY2siLGUpLGIuYXR0cih7ImFyaWEtaGFzcG9wdXAiOiEwLCJhcmlhLWV4cGFuZGVkIjohMX0pLGEuJHdhdGNoKGQuaXNPcGVuLGZ1bmN0aW9uKGEpe2IuYXR0cigiYXJpYS1leHBhbmRlZCIsISFhKX0pLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtiLnVuYmluZCgiY2xpY2siLGUpfSl9fX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLm1vZGFsIixbInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIl0pLmZhY3RvcnkoIiQkc3RhY2tlZE1hcCIsZnVuY3Rpb24oKXtyZXR1cm57Y3JlYXRlTmV3OmZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJue2FkZDpmdW5jdGlvbihiLGMpe2EucHVzaCh7a2V5OmIsdmFsdWU6Y30pfSxnZXQ6ZnVuY3Rpb24oYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYj09YVtjXS5rZXkpcmV0dXJuIGFbY119LGtleXM6ZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaChhW2NdLmtleSk7cmV0dXJuIGJ9LHRvcDpmdW5jdGlvbigpe3JldHVybiBhW2EubGVuZ3RoLTFdfSxyZW1vdmU6ZnVuY3Rpb24oYil7Zm9yKHZhciBjPS0xLGQ9MDtkPGEubGVuZ3RoO2QrKylpZihiPT1hW2RdLmtleSl7Yz1kO2JyZWFrfXJldHVybiBhLnNwbGljZShjLDEpWzBdfSxyZW1vdmVUb3A6ZnVuY3Rpb24oKXtyZXR1cm4gYS5zcGxpY2UoYS5sZW5ndGgtMSwxKVswXX0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIGEubGVuZ3RofX19fX0pLmRpcmVjdGl2ZSgibW9kYWxCYWNrZHJvcCIsWyIkdGltZW91dCIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsbGluazpmdW5jdGlvbihiKXtiLmFuaW1hdGU9ITEsYShmdW5jdGlvbigpe2IuYW5pbWF0ZT0hMH0pfX19XSkuZGlyZWN0aXZlKCJtb2RhbFdpbmRvdyIsWyIkbW9kYWxTdGFjayIsIiR0aW1lb3V0IixmdW5jdGlvbihhLGIpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOntpbmRleDoiQCIsYW5pbWF0ZToiPSJ9LHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCx0ZW1wbGF0ZVVybDpmdW5jdGlvbihhLGIpe3JldHVybiBiLnRlbXBsYXRlVXJsfHwidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwifSxsaW5rOmZ1bmN0aW9uKGMsZCxlKXtkLmFkZENsYXNzKGUud2luZG93Q2xhc3N8fCIiKSxjLnNpemU9ZS5zaXplLGIoZnVuY3Rpb24oKXtjLmFuaW1hdGU9ITAsZFswXS5mb2N1cygpfSksYy5jbG9zZT1mdW5jdGlvbihiKXt2YXIgYz1hLmdldFRvcCgpO2MmJmMudmFsdWUuYmFja2Ryb3AmJiJzdGF0aWMiIT1jLnZhbHVlLmJhY2tkcm9wJiZiLnRhcmdldD09PWIuY3VycmVudFRhcmdldCYmKGIucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLGEuZGlzbWlzcyhjLmtleSwiYmFja2Ryb3AgY2xpY2siKSl9fX19XSkuZmFjdG9yeSgiJG1vZGFsU3RhY2siLFsiJHRyYW5zaXRpb24iLCIkdGltZW91dCIsIiRkb2N1bWVudCIsIiRjb21waWxlIiwiJHJvb3RTY29wZSIsIiQkc3RhY2tlZE1hcCIsZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2Z1bmN0aW9uIGcoKXtmb3IodmFyIGE9LTEsYj1uLmtleXMoKSxjPTA7YzxiLmxlbmd0aDtjKyspbi5nZXQoYltjXSkudmFsdWUuYmFja2Ryb3AmJihhPWMpO3JldHVybiBhfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Yy5maW5kKCJib2R5IikuZXEoMCksZD1uLmdldChhKS52YWx1ZTtuLnJlbW92ZShhKSxqKGQubW9kYWxEb21FbCxkLm1vZGFsU2NvcGUsMzAwLGZ1bmN0aW9uKCl7ZC5tb2RhbFNjb3BlLiRkZXN0cm95KCksYi50b2dnbGVDbGFzcyhtLG4ubGVuZ3RoKCk+MCksaSgpfSl9ZnVuY3Rpb24gaSgpe2lmKGsmJi0xPT1nKCkpe3ZhciBhPWw7aihrLGwsMTUwLGZ1bmN0aW9uKCl7YS4kZGVzdHJveSgpLGE9bnVsbH0pLGs9dm9pZCAwLGw9dm9pZCAwfX1mdW5jdGlvbiBqKGMsZCxlLGYpe2Z1bmN0aW9uIGcoKXtnLmRvbmV8fChnLmRvbmU9ITAsYy5yZW1vdmUoKSxmJiZmKCkpfWQuYW5pbWF0ZT0hMTt2YXIgaD1hLnRyYW5zaXRpb25FbmRFdmVudE5hbWU7aWYoaCl7dmFyIGk9YihnLGUpO2MuYmluZChoLGZ1bmN0aW9uKCl7Yi5jYW5jZWwoaSksZygpLGQuJGFwcGx5KCl9KX1lbHNlIGIoZywwKX12YXIgayxsLG09Im1vZGFsLW9wZW4iLG49Zi5jcmVhdGVOZXcoKSxvPXt9O3JldHVybiBlLiR3YXRjaChnLGZ1bmN0aW9uKGEpe2wmJihsLmluZGV4PWEpfSksYy5iaW5kKCJrZXlkb3duIixmdW5jdGlvbihhKXt2YXIgYjsyNz09PWEud2hpY2gmJihiPW4udG9wKCksYiYmYi52YWx1ZS5rZXlib2FyZCYmKGEucHJldmVudERlZmF1bHQoKSxlLiRhcHBseShmdW5jdGlvbigpe28uZGlzbWlzcyhiLmtleSwiZXNjYXBlIGtleSBwcmVzcyIpfSkpKX0pLG8ub3Blbj1mdW5jdGlvbihhLGIpe24uYWRkKGEse2RlZmVycmVkOmIuZGVmZXJyZWQsbW9kYWxTY29wZTpiLnNjb3BlLGJhY2tkcm9wOmIuYmFja2Ryb3Asa2V5Ym9hcmQ6Yi5rZXlib2FyZH0pO3ZhciBmPWMuZmluZCgiYm9keSIpLmVxKDApLGg9ZygpO2g+PTAmJiFrJiYobD1lLiRuZXcoITApLGwuaW5kZXg9aCxrPWQoIjxkaXYgbW9kYWwtYmFja2Ryb3A+PC9kaXY+IikobCksZi5hcHBlbmQoaykpO3ZhciBpPWFuZ3VsYXIuZWxlbWVudCgiPGRpdiBtb2RhbC13aW5kb3c+PC9kaXY+Iik7aS5hdHRyKHsidGVtcGxhdGUtdXJsIjpiLndpbmRvd1RlbXBsYXRlVXJsLCJ3aW5kb3ctY2xhc3MiOmIud2luZG93Q2xhc3Msc2l6ZTpiLnNpemUsaW5kZXg6bi5sZW5ndGgoKS0xLGFuaW1hdGU6ImFuaW1hdGUifSkuaHRtbChiLmNvbnRlbnQpO3ZhciBqPWQoaSkoYi5zY29wZSk7bi50b3AoKS52YWx1ZS5tb2RhbERvbUVsPWosZi5hcHBlbmQoaiksZi5hZGRDbGFzcyhtKX0sby5jbG9zZT1mdW5jdGlvbihhLGIpe3ZhciBjPW4uZ2V0KGEpLnZhbHVlO2MmJihjLmRlZmVycmVkLnJlc29sdmUoYiksaChhKSl9LG8uZGlzbWlzcz1mdW5jdGlvbihhLGIpe3ZhciBjPW4uZ2V0KGEpLnZhbHVlO2MmJihjLmRlZmVycmVkLnJlamVjdChiKSxoKGEpKX0sby5kaXNtaXNzQWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmdldFRvcCgpO2I7KXRoaXMuZGlzbWlzcyhiLmtleSxhKSxiPXRoaXMuZ2V0VG9wKCl9LG8uZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIG4udG9wKCl9LG99XSkucHJvdmlkZXIoIiRtb2RhbCIsZnVuY3Rpb24oKXt2YXIgYT17b3B0aW9uczp7YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITB9LCRnZXQ6WyIkaW5qZWN0b3IiLCIkcm9vdFNjb3BlIiwiJHEiLCIkaHR0cCIsIiR0ZW1wbGF0ZUNhY2hlIiwiJGNvbnRyb2xsZXIiLCIkbW9kYWxTdGFjayIsZnVuY3Rpb24oYixjLGQsZSxmLGcsaCl7ZnVuY3Rpb24gaShhKXtyZXR1cm4gYS50ZW1wbGF0ZT9kLndoZW4oYS50ZW1wbGF0ZSk6ZS5nZXQoYS50ZW1wbGF0ZVVybCx7Y2FjaGU6Zn0pLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGF0YX0pfWZ1bmN0aW9uIGooYSl7dmFyIGM9W107cmV0dXJuIGFuZ3VsYXIuZm9yRWFjaChhLGZ1bmN0aW9uKGEpeyhhbmd1bGFyLmlzRnVuY3Rpb24oYSl8fGFuZ3VsYXIuaXNBcnJheShhKSkmJmMucHVzaChkLndoZW4oYi5pbnZva2UoYSkpKX0pLGN9dmFyIGs9e307cmV0dXJuIGsub3Blbj1mdW5jdGlvbihiKXt2YXIgZT1kLmRlZmVyKCksZj1kLmRlZmVyKCksaz17cmVzdWx0OmUucHJvbWlzZSxvcGVuZWQ6Zi5wcm9taXNlLGNsb3NlOmZ1bmN0aW9uKGEpe2guY2xvc2UoayxhKX0sZGlzbWlzczpmdW5jdGlvbihhKXtoLmRpc21pc3MoayxhKX19O2lmKGI9YW5ndWxhci5leHRlbmQoe30sYS5vcHRpb25zLGIpLGIucmVzb2x2ZT1iLnJlc29sdmV8fHt9LCFiLnRlbXBsYXRlJiYhYi50ZW1wbGF0ZVVybCl0aHJvdyBuZXcgRXJyb3IoIk9uZSBvZiB0ZW1wbGF0ZSBvciB0ZW1wbGF0ZVVybCBvcHRpb25zIGlzIHJlcXVpcmVkLiIpO3ZhciBsPWQuYWxsKFtpKGIpXS5jb25jYXQoaihiLnJlc29sdmUpKSk7cmV0dXJuIGwudGhlbihmdW5jdGlvbihhKXt2YXIgZD0oYi5zY29wZXx8YykuJG5ldygpO2QuJGNsb3NlPWsuY2xvc2UsZC4kZGlzbWlzcz1rLmRpc21pc3M7dmFyIGYsaT17fSxqPTE7Yi5jb250cm9sbGVyJiYoaS4kc2NvcGU9ZCxpLiRtb2RhbEluc3RhbmNlPWssYW5ndWxhci5mb3JFYWNoKGIucmVzb2x2ZSxmdW5jdGlvbihiLGMpe2lbY109YVtqKytdfSksZj1nKGIuY29udHJvbGxlcixpKSksaC5vcGVuKGsse3Njb3BlOmQsZGVmZXJyZWQ6ZSxjb250ZW50OmFbMF0sYmFja2Ryb3A6Yi5iYWNrZHJvcCxrZXlib2FyZDpiLmtleWJvYXJkLHdpbmRvd0NsYXNzOmIud2luZG93Q2xhc3Msd2luZG93VGVtcGxhdGVVcmw6Yi53aW5kb3dUZW1wbGF0ZVVybCxzaXplOmIuc2l6ZX0pfSxmdW5jdGlvbihhKXtlLnJlamVjdChhKX0pLGwudGhlbihmdW5jdGlvbigpe2YucmVzb2x2ZSghMCl9LGZ1bmN0aW9uKCl7Zi5yZWplY3QoITEpfSksa30sa31dfTtyZXR1cm4gYX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucGFnaW5hdGlvbiIsW10pLmNvbnRyb2xsZXIoIlBhZ2luYXRpb25Db250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9LGY9Yi5udW1QYWdlcz9jKGIubnVtUGFnZXMpLmFzc2lnbjphbmd1bGFyLm5vb3A7dGhpcy5pbml0PWZ1bmN0aW9uKGYsZyl7ZT1mLHRoaXMuY29uZmlnPWcsZS4kcmVuZGVyPWZ1bmN0aW9uKCl7ZC5yZW5kZXIoKX0sYi5pdGVtc1BlclBhZ2U/YS4kcGFyZW50LiR3YXRjaChjKGIuaXRlbXNQZXJQYWdlKSxmdW5jdGlvbihiKXtkLml0ZW1zUGVyUGFnZT1wYXJzZUludChiLDEwKSxhLnRvdGFsUGFnZXM9ZC5jYWxjdWxhdGVUb3RhbFBhZ2VzKCl9KTp0aGlzLml0ZW1zUGVyUGFnZT1nLml0ZW1zUGVyUGFnZX0sdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2VzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5pdGVtc1BlclBhZ2U8MT8xOk1hdGguY2VpbChhLnRvdGFsSXRlbXMvdGhpcy5pdGVtc1BlclBhZ2UpO3JldHVybiBNYXRoLm1heChifHwwLDEpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe2EucGFnZT1wYXJzZUludChlLiR2aWV3VmFsdWUsMTApfHwxfSxhLnNlbGVjdFBhZ2U9ZnVuY3Rpb24oYil7YS5wYWdlIT09YiYmYj4wJiZiPD1hLnRvdGFsUGFnZXMmJihlLiRzZXRWaWV3VmFsdWUoYiksZS4kcmVuZGVyKCkpfSxhLmdldFRleHQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFbYisiVGV4dCJdfHxkLmNvbmZpZ1tiKyJUZXh0Il19LGEubm9QcmV2aW91cz1mdW5jdGlvbigpe3JldHVybiAxPT09YS5wYWdlfSxhLm5vTmV4dD1mdW5jdGlvbigpe3JldHVybiBhLnBhZ2U9PT1hLnRvdGFsUGFnZXN9LGEuJHdhdGNoKCJ0b3RhbEl0ZW1zIixmdW5jdGlvbigpe2EudG90YWxQYWdlcz1kLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKX0pLGEuJHdhdGNoKCJ0b3RhbFBhZ2VzIixmdW5jdGlvbihiKXtmKGEuJHBhcmVudCxiKSxhLnBhZ2U+Yj9hLnNlbGVjdFBhZ2UoYik6ZS4kcmVuZGVyKCl9KX1dKS5jb25zdGFudCgicGFnaW5hdGlvbkNvbmZpZyIse2l0ZW1zUGVyUGFnZToxMCxib3VuZGFyeUxpbmtzOiExLGRpcmVjdGlvbkxpbmtzOiEwLGZpcnN0VGV4dDoiRmlyc3QiLHByZXZpb3VzVGV4dDoiUHJldmlvdXMiLG5leHRUZXh0OiJOZXh0IixsYXN0VGV4dDoiTGFzdCIscm90YXRlOiEwfSkuZGlyZWN0aXZlKCJwYWdpbmF0aW9uIixbIiRwYXJzZSIsInBhZ2luYXRpb25Db25maWciLGZ1bmN0aW9uKGEsYil7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e3RvdGFsSXRlbXM6Ij0iLGZpcnN0VGV4dDoiQCIscHJldmlvdXNUZXh0OiJAIixuZXh0VGV4dDoiQCIsbGFzdFRleHQ6IkAifSxyZXF1aXJlOlsicGFnaW5hdGlvbiIsIj9uZ01vZGVsIl0sY29udHJvbGxlcjoiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIscmVwbGFjZTohMCxsaW5rOmZ1bmN0aW9uKGMsZCxlLGYpe2Z1bmN0aW9uIGcoYSxiLGMpe3JldHVybntudW1iZXI6YSx0ZXh0OmIsYWN0aXZlOmN9fWZ1bmN0aW9uIGgoYSxiKXt2YXIgYz1bXSxkPTEsZT1iLGY9YW5ndWxhci5pc0RlZmluZWQoaykmJmI+aztmJiYobD8oZD1NYXRoLm1heChhLU1hdGguZmxvb3Ioay8yKSwxKSxlPWQray0xLGU+YiYmKGU9YixkPWUtaysxKSk6KGQ9KE1hdGguY2VpbChhL2spLTEpKmsrMSxlPU1hdGgubWluKGQray0xLGIpKSk7Zm9yKHZhciBoPWQ7ZT49aDtoKyspe3ZhciBpPWcoaCxoLGg9PT1hKTtjLnB1c2goaSl9aWYoZiYmIWwpe2lmKGQ+MSl7dmFyIGo9ZyhkLTEsIi4uLiIsITEpO2MudW5zaGlmdChqKX1pZihiPmUpe3ZhciBtPWcoZSsxLCIuLi4iLCExKTtjLnB1c2gobSl9fXJldHVybiBjfXZhciBpPWZbMF0saj1mWzFdO2lmKGope3ZhciBrPWFuZ3VsYXIuaXNEZWZpbmVkKGUubWF4U2l6ZSk/Yy4kcGFyZW50LiRldmFsKGUubWF4U2l6ZSk6Yi5tYXhTaXplLGw9YW5ndWxhci5pc0RlZmluZWQoZS5yb3RhdGUpP2MuJHBhcmVudC4kZXZhbChlLnJvdGF0ZSk6Yi5yb3RhdGU7Yy5ib3VuZGFyeUxpbmtzPWFuZ3VsYXIuaXNEZWZpbmVkKGUuYm91bmRhcnlMaW5rcyk/Yy4kcGFyZW50LiRldmFsKGUuYm91bmRhcnlMaW5rcyk6Yi5ib3VuZGFyeUxpbmtzLGMuZGlyZWN0aW9uTGlua3M9YW5ndWxhci5pc0RlZmluZWQoZS5kaXJlY3Rpb25MaW5rcyk/Yy4kcGFyZW50LiRldmFsKGUuZGlyZWN0aW9uTGlua3MpOmIuZGlyZWN0aW9uTGlua3MsaS5pbml0KGosYiksZS5tYXhTaXplJiZjLiRwYXJlbnQuJHdhdGNoKGEoZS5tYXhTaXplKSxmdW5jdGlvbihhKXtrPXBhcnNlSW50KGEsMTApLGkucmVuZGVyKCl9KTt2YXIgbT1pLnJlbmRlcjtpLnJlbmRlcj1mdW5jdGlvbigpe20oKSxjLnBhZ2U+MCYmYy5wYWdlPD1jLnRvdGFsUGFnZXMmJihjLnBhZ2VzPWgoYy5wYWdlLGMudG90YWxQYWdlcykpfX19fX1dKS5jb25zdGFudCgicGFnZXJDb25maWciLHtpdGVtc1BlclBhZ2U6MTAscHJldmlvdXNUZXh0OiLCqyBQcmV2aW91cyIsbmV4dFRleHQ6Ik5leHQgwrsiLGFsaWduOiEwfSkuZGlyZWN0aXZlKCJwYWdlciIsWyJwYWdlckNvbmZpZyIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e3RvdGFsSXRlbXM6Ij0iLHByZXZpb3VzVGV4dDoiQCIsbmV4dFRleHQ6IkAifSxyZXF1aXJlOlsicGFnZXIiLCI/bmdNb2RlbCJdLGNvbnRyb2xsZXI6IlBhZ2luYXRpb25Db250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZVswXSxnPWVbMV07ZyYmKGIuYWxpZ249YW5ndWxhci5pc0RlZmluZWQoZC5hbGlnbik/Yi4kcGFyZW50LiRldmFsKGQuYWxpZ24pOmEuYWxpZ24sZi5pbml0KGcsYSkpfX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50b29sdGlwIixbInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCJdKS5wcm92aWRlcigiJHRvb2x0aXAiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXt2YXIgYj0vW0EtWl0vZyxjPSItIjsKK3JldHVybiBhLnJlcGxhY2UoYixmdW5jdGlvbihhLGIpe3JldHVybihiP2M6IiIpK2EudG9Mb3dlckNhc2UoKX0pfXZhciBiPXtwbGFjZW1lbnQ6InRvcCIsYW5pbWF0aW9uOiEwLHBvcHVwRGVsYXk6MH0sYz17bW91c2VlbnRlcjoibW91c2VsZWF2ZSIsY2xpY2s6ImNsaWNrIixmb2N1czoiYmx1ciJ9LGQ9e307dGhpcy5vcHRpb25zPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuZXh0ZW5kKGQsYSl9LHRoaXMuc2V0VHJpZ2dlcnM9ZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoYyxhKX0sdGhpcy4kZ2V0PVsiJHdpbmRvdyIsIiRjb21waWxlIiwiJHRpbWVvdXQiLCIkcGFyc2UiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCIkaW50ZXJwb2xhdGUiLGZ1bmN0aW9uKGUsZixnLGgsaSxqLGspe3JldHVybiBmdW5jdGlvbihlLGwsbSl7ZnVuY3Rpb24gbihhKXt2YXIgYj1hfHxvLnRyaWdnZXJ8fG0sZD1jW2JdfHxiO3JldHVybntzaG93OmIsaGlkZTpkfX12YXIgbz1hbmd1bGFyLmV4dGVuZCh7fSxiLGQpLHA9YShlKSxxPWsuc3RhcnRTeW1ib2woKSxyPWsuZW5kU3ltYm9sKCkscz0iPGRpdiAiK3ArJy1wb3B1cCB0aXRsZT0iJytxKyJ0dF90aXRsZSIrcisnIiBjb250ZW50PSInK3ErInR0X2NvbnRlbnQiK3IrJyIgcGxhY2VtZW50PSInK3ErInR0X3BsYWNlbWVudCIrcisnIiBhbmltYXRpb249InR0X2FuaW1hdGlvbiIgaXMtb3Blbj0idHRfaXNPcGVuIj48L2Rpdj4nO3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOiEwLGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgYT1mKHMpO3JldHVybiBmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZigpe2IudHRfaXNPcGVuP20oKTprKCl9ZnVuY3Rpb24gaygpeygheXx8Yi4kZXZhbChkW2wrIkVuYWJsZSJdKSkmJihiLnR0X3BvcHVwRGVsYXk/dnx8KHY9ZyhwLGIudHRfcG9wdXBEZWxheSwhMSksdi50aGVuKGZ1bmN0aW9uKGEpe2EoKX0pKTpwKCkoKSl9ZnVuY3Rpb24gbSgpe2IuJGFwcGx5KGZ1bmN0aW9uKCl7cSgpfSl9ZnVuY3Rpb24gcCgpe3JldHVybiB2PW51bGwsdSYmKGcuY2FuY2VsKHUpLHU9bnVsbCksYi50dF9jb250ZW50PyhyKCksdC5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KSx3P2kuZmluZCgiYm9keSIpLmFwcGVuZCh0KTpjLmFmdGVyKHQpLHooKSxiLnR0X2lzT3Blbj0hMCxiLiRkaWdlc3QoKSx6KTphbmd1bGFyLm5vb3B9ZnVuY3Rpb24gcSgpe2IudHRfaXNPcGVuPSExLGcuY2FuY2VsKHYpLHY9bnVsbCxiLnR0X2FuaW1hdGlvbj91fHwodT1nKHMsNTAwKSk6cygpfWZ1bmN0aW9uIHIoKXt0JiZzKCksdD1hKGIsZnVuY3Rpb24oKXt9KSxiLiRkaWdlc3QoKX1mdW5jdGlvbiBzKCl7dT1udWxsLHQmJih0LnJlbW92ZSgpLHQ9bnVsbCl9dmFyIHQsdSx2LHc9YW5ndWxhci5pc0RlZmluZWQoby5hcHBlbmRUb0JvZHkpP28uYXBwZW5kVG9Cb2R5OiExLHg9bih2b2lkIDApLHk9YW5ndWxhci5pc0RlZmluZWQoZFtsKyJFbmFibGUiXSksej1mdW5jdGlvbigpe3ZhciBhPWoucG9zaXRpb25FbGVtZW50cyhjLHQsYi50dF9wbGFjZW1lbnQsdyk7YS50b3ArPSJweCIsYS5sZWZ0Kz0icHgiLHQuY3NzKGEpfTtiLnR0X2lzT3Blbj0hMSxkLiRvYnNlcnZlKGUsZnVuY3Rpb24oYSl7Yi50dF9jb250ZW50PWEsIWEmJmIudHRfaXNPcGVuJiZxKCl9KSxkLiRvYnNlcnZlKGwrIlRpdGxlIixmdW5jdGlvbihhKXtiLnR0X3RpdGxlPWF9KSxkLiRvYnNlcnZlKGwrIlBsYWNlbWVudCIsZnVuY3Rpb24oYSl7Yi50dF9wbGFjZW1lbnQ9YW5ndWxhci5pc0RlZmluZWQoYSk/YTpvLnBsYWNlbWVudH0pLGQuJG9ic2VydmUobCsiUG9wdXBEZWxheSIsZnVuY3Rpb24oYSl7dmFyIGM9cGFyc2VJbnQoYSwxMCk7Yi50dF9wb3B1cERlbGF5PWlzTmFOKGMpP28ucG9wdXBEZWxheTpjfSk7dmFyIEE9ZnVuY3Rpb24oKXtjLnVuYmluZCh4LnNob3csayksYy51bmJpbmQoeC5oaWRlLG0pfTtkLiRvYnNlcnZlKGwrIlRyaWdnZXIiLGZ1bmN0aW9uKGEpe0EoKSx4PW4oYSkseC5zaG93PT09eC5oaWRlP2MuYmluZCh4LnNob3csZik6KGMuYmluZCh4LnNob3csayksYy5iaW5kKHguaGlkZSxtKSl9KTt2YXIgQj1iLiRldmFsKGRbbCsiQW5pbWF0aW9uIl0pO2IudHRfYW5pbWF0aW9uPWFuZ3VsYXIuaXNEZWZpbmVkKEIpPyEhQjpvLmFuaW1hdGlvbixkLiRvYnNlcnZlKGwrIkFwcGVuZFRvQm9keSIsZnVuY3Rpb24oYSl7dz1hbmd1bGFyLmlzRGVmaW5lZChhKT9oKGEpKGIpOnd9KSx3JiZiLiRvbigiJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtiLnR0X2lzT3BlbiYmcSgpfSksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2cuY2FuY2VsKHUpLGcuY2FuY2VsKHYpLEEoKSxzKCl9KX19fX19XX0pLmRpcmVjdGl2ZSgidG9vbHRpcFBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e2NvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwifX0pLmRpcmVjdGl2ZSgidG9vbHRpcCIsWyIkdG9vbHRpcCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEoInRvb2x0aXAiLCJ0b29sdGlwIiwibW91c2VlbnRlciIpfV0pLmRpcmVjdGl2ZSgidG9vbHRpcEh0bWxVbnNhZmVQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHNjb3BlOntjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIn19KS5kaXJlY3RpdmUoInRvb2x0aXBIdG1sVW5zYWZlIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgidG9vbHRpcEh0bWxVbnNhZmUiLCJ0b29sdGlwIiwibW91c2VlbnRlciIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucG9wb3ZlciIsWyJ1aS5ib290c3RyYXAudG9vbHRpcCJdKS5kaXJlY3RpdmUoInBvcG92ZXJQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHNjb3BlOnt0aXRsZToiQCIsY29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCJ9fSkuZGlyZWN0aXZlKCJwb3BvdmVyIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgicG9wb3ZlciIsInBvcG92ZXIiLCJjbGljayIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucHJvZ3Jlc3NiYXIiLFtdKS5jb25zdGFudCgicHJvZ3Jlc3NDb25maWciLHthbmltYXRlOiEwLG1heDoxMDB9KS5jb250cm9sbGVyKCJQcm9ncmVzc0NvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwicHJvZ3Jlc3NDb25maWciLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9YW5ndWxhci5pc0RlZmluZWQoYi5hbmltYXRlKT9hLiRwYXJlbnQuJGV2YWwoYi5hbmltYXRlKTpjLmFuaW1hdGU7dGhpcy5iYXJzPVtdLGEubWF4PWFuZ3VsYXIuaXNEZWZpbmVkKGIubWF4KT9hLiRwYXJlbnQuJGV2YWwoYi5tYXgpOmMubWF4LHRoaXMuYWRkQmFyPWZ1bmN0aW9uKGIsYyl7ZXx8Yy5jc3Moe3RyYW5zaXRpb246Im5vbmUifSksdGhpcy5iYXJzLnB1c2goYiksYi4kd2F0Y2goInZhbHVlIixmdW5jdGlvbihjKXtiLnBlcmNlbnQ9KygxMDAqYy9hLm1heCkudG9GaXhlZCgyKX0pLGIuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtjPW51bGwsZC5yZW1vdmVCYXIoYil9KX0sdGhpcy5yZW1vdmVCYXI9ZnVuY3Rpb24oYSl7dGhpcy5iYXJzLnNwbGljZSh0aGlzLmJhcnMuaW5kZXhPZihhKSwxKX19XSkuZGlyZWN0aXZlKCJwcm9ncmVzcyIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsY29udHJvbGxlcjoiUHJvZ3Jlc3NDb250cm9sbGVyIixyZXF1aXJlOiJwcm9ncmVzcyIsc2NvcGU6e30sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwifX0pLmRpcmVjdGl2ZSgiYmFyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxyZXF1aXJlOiJecHJvZ3Jlc3MiLHNjb3BlOnt2YWx1ZToiPSIsdHlwZToiQCJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEJhcihhLGIpfX19KS5kaXJlY3RpdmUoInByb2dyZXNzYmFyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxjb250cm9sbGVyOiJQcm9ncmVzc0NvbnRyb2xsZXIiLHNjb3BlOnt2YWx1ZToiPSIsdHlwZToiQCJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkQmFyKGEsYW5ndWxhci5lbGVtZW50KGIuY2hpbGRyZW4oKVswXSkpfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnJhdGluZyIsW10pLmNvbnN0YW50KCJyYXRpbmdDb25maWciLHttYXg6NSxzdGF0ZU9uOm51bGwsc3RhdGVPZmY6bnVsbH0pLmNvbnRyb2xsZXIoIlJhdGluZ0NvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwicmF0aW5nQ29uZmlnIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfTt0aGlzLmluaXQ9ZnVuY3Rpb24oZSl7ZD1lLGQuJHJlbmRlcj10aGlzLnJlbmRlcix0aGlzLnN0YXRlT249YW5ndWxhci5pc0RlZmluZWQoYi5zdGF0ZU9uKT9hLiRwYXJlbnQuJGV2YWwoYi5zdGF0ZU9uKTpjLnN0YXRlT24sdGhpcy5zdGF0ZU9mZj1hbmd1bGFyLmlzRGVmaW5lZChiLnN0YXRlT2ZmKT9hLiRwYXJlbnQuJGV2YWwoYi5zdGF0ZU9mZik6Yy5zdGF0ZU9mZjt2YXIgZj1hbmd1bGFyLmlzRGVmaW5lZChiLnJhdGluZ1N0YXRlcyk/YS4kcGFyZW50LiRldmFsKGIucmF0aW5nU3RhdGVzKTpuZXcgQXJyYXkoYW5ndWxhci5pc0RlZmluZWQoYi5tYXgpP2EuJHBhcmVudC4kZXZhbChiLm1heCk6Yy5tYXgpO2EucmFuZ2U9dGhpcy5idWlsZFRlbXBsYXRlT2JqZWN0cyhmKX0sdGhpcy5idWlsZFRlbXBsYXRlT2JqZWN0cz1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2M+YjtiKyspYVtiXT1hbmd1bGFyLmV4dGVuZCh7aW5kZXg6Yn0se3N0YXRlT246dGhpcy5zdGF0ZU9uLHN0YXRlT2ZmOnRoaXMuc3RhdGVPZmZ9LGFbYl0pO3JldHVybiBhfSxhLnJhdGU9ZnVuY3Rpb24oYil7IWEucmVhZG9ubHkmJmI+PTAmJmI8PWEucmFuZ2UubGVuZ3RoJiYoZC4kc2V0Vmlld1ZhbHVlKGIpLGQuJHJlbmRlcigpKX0sYS5lbnRlcj1mdW5jdGlvbihiKXthLnJlYWRvbmx5fHwoYS52YWx1ZT1iKSxhLm9uSG92ZXIoe3ZhbHVlOmJ9KX0sYS5yZXNldD1mdW5jdGlvbigpe2EudmFsdWU9ZC4kdmlld1ZhbHVlLGEub25MZWF2ZSgpfSxhLm9uS2V5ZG93bj1mdW5jdGlvbihiKXsvKDM3fDM4fDM5fDQwKS8udGVzdChiLndoaWNoKSYmKGIucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLGEucmF0ZShhLnZhbHVlKygzOD09PWIud2hpY2h8fDM5PT09Yi53aGljaD8xOi0xKSkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe2EudmFsdWU9ZC4kdmlld1ZhbHVlfX1dKS5kaXJlY3RpdmUoInJhdGluZyIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXF1aXJlOlsicmF0aW5nIiwibmdNb2RlbCJdLHNjb3BlOntyZWFkb25seToiPT8iLG9uSG92ZXI6IiYiLG9uTGVhdmU6IiYifSxjb250cm9sbGVyOiJSYXRpbmdDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYpfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRhYnMiLFtdKS5jb250cm9sbGVyKCJUYWJzZXRDb250cm9sbGVyIixbIiRzY29wZSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIudGFicz1hLnRhYnM9W107Yi5zZWxlY3Q9ZnVuY3Rpb24oYSl7YW5ndWxhci5mb3JFYWNoKGMsZnVuY3Rpb24oYil7Yi5hY3RpdmUmJmIhPT1hJiYoYi5hY3RpdmU9ITEsYi5vbkRlc2VsZWN0KCkpfSksYS5hY3RpdmU9ITAsYS5vblNlbGVjdCgpfSxiLmFkZFRhYj1mdW5jdGlvbihhKXtjLnB1c2goYSksMT09PWMubGVuZ3RoP2EuYWN0aXZlPSEwOmEuYWN0aXZlJiZiLnNlbGVjdChhKX0sYi5yZW1vdmVUYWI9ZnVuY3Rpb24oYSl7dmFyIGQ9Yy5pbmRleE9mKGEpO2lmKGEuYWN0aXZlJiZjLmxlbmd0aD4xKXt2YXIgZT1kPT1jLmxlbmd0aC0xP2QtMTpkKzE7Yi5zZWxlY3QoY1tlXSl9Yy5zcGxpY2UoZCwxKX19XSkuZGlyZWN0aXZlKCJ0YWJzZXQiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHNjb3BlOnt0eXBlOiJAIn0sY29udHJvbGxlcjoiVGFic2V0Q29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMpe2EudmVydGljYWw9YW5ndWxhci5pc0RlZmluZWQoYy52ZXJ0aWNhbCk/YS4kcGFyZW50LiRldmFsKGMudmVydGljYWwpOiExLGEuanVzdGlmaWVkPWFuZ3VsYXIuaXNEZWZpbmVkKGMuanVzdGlmaWVkKT9hLiRwYXJlbnQuJGV2YWwoYy5qdXN0aWZpZWQpOiExfX19KS5kaXJlY3RpdmUoInRhYiIsWyIkcGFyc2UiLGZ1bmN0aW9uKGEpe3JldHVybntyZXF1aXJlOiJedGFic2V0IixyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLHRyYW5zY2x1ZGU6ITAsc2NvcGU6e2FjdGl2ZToiPT8iLGhlYWRpbmc6IkAiLG9uU2VsZWN0OiImc2VsZWN0IixvbkRlc2VsZWN0OiImZGVzZWxlY3QifSxjb250cm9sbGVyOmZ1bmN0aW9uKCl7fSxjb21waWxlOmZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oYixjLGUsZil7Yi4kd2F0Y2goImFjdGl2ZSIsZnVuY3Rpb24oYSl7YSYmZi5zZWxlY3QoYil9KSxiLmRpc2FibGVkPSExLGUuZGlzYWJsZWQmJmIuJHBhcmVudC4kd2F0Y2goYShlLmRpc2FibGVkKSxmdW5jdGlvbihhKXtiLmRpc2FibGVkPSEhYX0pLGIuc2VsZWN0PWZ1bmN0aW9uKCl7Yi5kaXNhYmxlZHx8KGIuYWN0aXZlPSEwKX0sZi5hZGRUYWIoYiksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2YucmVtb3ZlVGFiKGIpfSksYi4kdHJhbnNjbHVkZUZuPWR9fX19XSkuZGlyZWN0aXZlKCJ0YWJIZWFkaW5nVHJhbnNjbHVkZSIsW2Z1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJBIixyZXF1aXJlOiJedGFiIixsaW5rOmZ1bmN0aW9uKGEsYil7YS4kd2F0Y2goImhlYWRpbmdFbGVtZW50IixmdW5jdGlvbihhKXthJiYoYi5odG1sKCIiKSxiLmFwcGVuZChhKSl9KX19fV0pLmRpcmVjdGl2ZSgidGFiQ29udGVudFRyYW5zY2x1ZGUiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYS50YWdOYW1lJiYoYS5oYXNBdHRyaWJ1dGUoInRhYi1oZWFkaW5nIil8fGEuaGFzQXR0cmlidXRlKCJkYXRhLXRhYi1oZWFkaW5nIil8fCJ0YWItaGVhZGluZyI9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKXx8ImRhdGEtdGFiLWhlYWRpbmciPT09YS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpfXJldHVybntyZXN0cmljdDoiQSIscmVxdWlyZToiXnRhYnNldCIsbGluazpmdW5jdGlvbihiLGMsZCl7dmFyIGU9Yi4kZXZhbChkLnRhYkNvbnRlbnRUcmFuc2NsdWRlKTtlLiR0cmFuc2NsdWRlRm4oZS4kcGFyZW50LGZ1bmN0aW9uKGIpe2FuZ3VsYXIuZm9yRWFjaChiLGZ1bmN0aW9uKGIpe2EoYik/ZS5oZWFkaW5nRWxlbWVudD1iOmMuYXBwZW5kKGIpfSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50aW1lcGlja2VyIixbXSkuY29uc3RhbnQoInRpbWVwaWNrZXJDb25maWciLHtob3VyU3RlcDoxLG1pbnV0ZVN0ZXA6MSxzaG93TWVyaWRpYW46ITAsbWVyaWRpYW5zOm51bGwscmVhZG9ubHlJbnB1dDohMSxtb3VzZXdoZWVsOiEwfSkuY29udHJvbGxlcigiVGltZXBpY2tlckNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiJGxvZyIsIiRsb2NhbGUiLCJ0aW1lcGlja2VyQ29uZmlnIixmdW5jdGlvbihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZygpe3ZhciBiPXBhcnNlSW50KGEuaG91cnMsMTApLGM9YS5zaG93TWVyaWRpYW4/Yj4wJiYxMz5iOmI+PTAmJjI0PmI7cmV0dXJuIGM/KGEuc2hvd01lcmlkaWFuJiYoMTI9PT1iJiYoYj0wKSxhLm1lcmlkaWFuPT09cFsxXSYmKGIrPTEyKSksYik6dm9pZCAwfWZ1bmN0aW9uIGgoKXt2YXIgYj1wYXJzZUludChhLm1pbnV0ZXMsMTApO3JldHVybiBiPj0wJiY2MD5iP2I6dm9pZCAwfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGFuZ3VsYXIuaXNEZWZpbmVkKGEpJiZhLnRvU3RyaW5nKCkubGVuZ3RoPDI/IjAiK2E6YX1mdW5jdGlvbiBqKGEpe2soKSxvLiRzZXRWaWV3VmFsdWUobmV3IERhdGUobikpLGwoYSl9ZnVuY3Rpb24gaygpe28uJHNldFZhbGlkaXR5KCJ0aW1lIiwhMCksYS5pbnZhbGlkSG91cnM9ITEsYS5pbnZhbGlkTWludXRlcz0hMX1mdW5jdGlvbiBsKGIpe3ZhciBjPW4uZ2V0SG91cnMoKSxkPW4uZ2V0TWludXRlcygpO2Euc2hvd01lcmlkaWFuJiYoYz0wPT09Y3x8MTI9PT1jPzEyOmMlMTIpLGEuaG91cnM9ImgiPT09Yj9jOmkoYyksYS5taW51dGVzPSJtIj09PWI/ZDppKGQpLGEubWVyaWRpYW49bi5nZXRIb3VycygpPDEyP3BbMF06cFsxXX1mdW5jdGlvbiBtKGEpe3ZhciBiPW5ldyBEYXRlKG4uZ2V0VGltZSgpKzZlNCphKTtuLnNldEhvdXJzKGIuZ2V0SG91cnMoKSxiLmdldE1pbnV0ZXMoKSksaigpfXZhciBuPW5ldyBEYXRlLG89eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfSxwPWFuZ3VsYXIuaXNEZWZpbmVkKGIubWVyaWRpYW5zKT9hLiRwYXJlbnQuJGV2YWwoYi5tZXJpZGlhbnMpOmYubWVyaWRpYW5zfHxlLkRBVEVUSU1FX0ZPUk1BVFMuQU1QTVM7dGhpcy5pbml0PWZ1bmN0aW9uKGMsZCl7bz1jLG8uJHJlbmRlcj10aGlzLnJlbmRlcjt2YXIgZT1kLmVxKDApLGc9ZC5lcSgxKSxoPWFuZ3VsYXIuaXNEZWZpbmVkKGIubW91c2V3aGVlbCk/YS4kcGFyZW50LiRldmFsKGIubW91c2V3aGVlbCk6Zi5tb3VzZXdoZWVsO2gmJnRoaXMuc2V0dXBNb3VzZXdoZWVsRXZlbnRzKGUsZyksYS5yZWFkb25seUlucHV0PWFuZ3VsYXIuaXNEZWZpbmVkKGIucmVhZG9ubHlJbnB1dCk/YS4kcGFyZW50LiRldmFsKGIucmVhZG9ubHlJbnB1dCk6Zi5yZWFkb25seUlucHV0LHRoaXMuc2V0dXBJbnB1dEV2ZW50cyhlLGcpfTt2YXIgcT1mLmhvdXJTdGVwO2IuaG91clN0ZXAmJmEuJHBhcmVudC4kd2F0Y2goYyhiLmhvdXJTdGVwKSxmdW5jdGlvbihhKXtxPXBhcnNlSW50KGEsMTApfSk7dmFyIHI9Zi5taW51dGVTdGVwO2IubWludXRlU3RlcCYmYS4kcGFyZW50LiR3YXRjaChjKGIubWludXRlU3RlcCksZnVuY3Rpb24oYSl7cj1wYXJzZUludChhLDEwKX0pLGEuc2hvd01lcmlkaWFuPWYuc2hvd01lcmlkaWFuLGIuc2hvd01lcmlkaWFuJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5zaG93TWVyaWRpYW4pLGZ1bmN0aW9uKGIpe2lmKGEuc2hvd01lcmlkaWFuPSEhYixvLiRlcnJvci50aW1lKXt2YXIgYz1nKCksZD1oKCk7YW5ndWxhci5pc0RlZmluZWQoYykmJmFuZ3VsYXIuaXNEZWZpbmVkKGQpJiYobi5zZXRIb3VycyhjKSxqKCkpfWVsc2UgbCgpfSksdGhpcy5zZXR1cE1vdXNld2hlZWxFdmVudHM9ZnVuY3Rpb24oYixjKXt2YXIgZD1mdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQmJihhPWEub3JpZ2luYWxFdmVudCk7dmFyIGI9YS53aGVlbERlbHRhP2Eud2hlZWxEZWx0YTotYS5kZWx0YVk7cmV0dXJuIGEuZGV0YWlsfHxiPjB9O2IuYmluZCgibW91c2V3aGVlbCB3aGVlbCIsZnVuY3Rpb24oYil7YS4kYXBwbHkoZChiKT9hLmluY3JlbWVudEhvdXJzKCk6YS5kZWNyZW1lbnRIb3VycygpKSxiLnByZXZlbnREZWZhdWx0KCl9KSxjLmJpbmQoIm1vdXNld2hlZWwgd2hlZWwiLGZ1bmN0aW9uKGIpe2EuJGFwcGx5KGQoYik/YS5pbmNyZW1lbnRNaW51dGVzKCk6YS5kZWNyZW1lbnRNaW51dGVzKCkpLGIucHJldmVudERlZmF1bHQoKX0pfSx0aGlzLnNldHVwSW5wdXRFdmVudHM9ZnVuY3Rpb24oYixjKXtpZihhLnJlYWRvbmx5SW5wdXQpcmV0dXJuIGEudXBkYXRlSG91cnM9YW5ndWxhci5ub29wLHZvaWQoYS51cGRhdGVNaW51dGVzPWFuZ3VsYXIubm9vcCk7dmFyIGQ9ZnVuY3Rpb24oYixjKXtvLiRzZXRWaWV3VmFsdWUobnVsbCksby4kc2V0VmFsaWRpdHkoInRpbWUiLCExKSxhbmd1bGFyLmlzRGVmaW5lZChiKSYmKGEuaW52YWxpZEhvdXJzPWIpLGFuZ3VsYXIuaXNEZWZpbmVkKGMpJiYoYS5pbnZhbGlkTWludXRlcz1jKX07YS51cGRhdGVIb3Vycz1mdW5jdGlvbigpe3ZhciBhPWcoKTthbmd1bGFyLmlzRGVmaW5lZChhKT8obi5zZXRIb3VycyhhKSxqKCJoIikpOmQoITApfSxiLmJpbmQoImJsdXIiLGZ1bmN0aW9uKCl7IWEuaW52YWxpZEhvdXJzJiZhLmhvdXJzPDEwJiZhLiRhcHBseShmdW5jdGlvbigpe2EuaG91cnM9aShhLmhvdXJzKX0pfSksYS51cGRhdGVNaW51dGVzPWZ1bmN0aW9uKCl7dmFyIGE9aCgpO2FuZ3VsYXIuaXNEZWZpbmVkKGEpPyhuLnNldE1pbnV0ZXMoYSksaigibSIpKTpkKHZvaWQgMCwhMCl9LGMuYmluZCgiYmx1ciIsZnVuY3Rpb24oKXshYS5pbnZhbGlkTWludXRlcyYmYS5taW51dGVzPDEwJiZhLiRhcHBseShmdW5jdGlvbigpe2EubWludXRlcz1pKGEubWludXRlcyl9KX0pfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPW8uJG1vZGVsVmFsdWU/bmV3IERhdGUoby4kbW9kZWxWYWx1ZSk6bnVsbDtpc05hTihhKT8oby4kc2V0VmFsaWRpdHkoInRpbWUiLCExKSxkLmVycm9yKCdUaW1lcGlja2VyIGRpcmVjdGl2ZTogIm5nLW1vZGVsIiB2YWx1ZSBtdXN0IGJlIGEgRGF0ZSBvYmplY3QsIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAwMS4wMS4xOTcwIG9yIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBSRkMyODIyIG9yIElTTyA4NjAxIGRhdGUuJykpOihhJiYobj1hKSxrKCksbCgpKX0sYS5pbmNyZW1lbnRIb3Vycz1mdW5jdGlvbigpe20oNjAqcSl9LGEuZGVjcmVtZW50SG91cnM9ZnVuY3Rpb24oKXttKDYwKi1xKX0sYS5pbmNyZW1lbnRNaW51dGVzPWZ1bmN0aW9uKCl7bShyKX0sYS5kZWNyZW1lbnRNaW51dGVzPWZ1bmN0aW9uKCl7bSgtcil9LGEudG9nZ2xlTWVyaWRpYW49ZnVuY3Rpb24oKXttKDcyMCoobi5nZXRIb3VycygpPDEyPzE6LTEpKX19XSkuZGlyZWN0aXZlKCJ0aW1lcGlja2VyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6WyJ0aW1lcGlja2VyIiwiP15uZ01vZGVsIl0sY29udHJvbGxlcjoiVGltZXBpY2tlckNvbnRyb2xsZXIiLHJlcGxhY2U6ITAsc2NvcGU6e30sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmLGIuZmluZCgiaW5wdXQiKSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHlwZWFoZWFkIixbInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCJdKS5mYWN0b3J5KCJ0eXBlYWhlYWRQYXJzZXIiLFsiJHBhcnNlIixmdW5jdGlvbihhKXt2YXIgYj0vXlxzKiguKj8pKD86XHMrYXNccysoLio/KSk/XHMrZm9yXHMrKD86KFtcJFx3XVtcJFx3XGRdKikpXHMraW5ccysoLiopJC87cmV0dXJue3BhcnNlOmZ1bmN0aW9uKGMpe3ZhciBkPWMubWF0Y2goYik7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0eXBlYWhlYWQgc3BlY2lmaWNhdGlvbiBpbiBmb3JtIG9mICJfbW9kZWxWYWx1ZV8gKGFzIF9sYWJlbF8pPyBmb3IgX2l0ZW1fIGluIF9jb2xsZWN0aW9uXyIgYnV0IGdvdCAiJytjKyciLicpO3JldHVybntpdGVtTmFtZTpkWzNdLHNvdXJjZTphKGRbNF0pLHZpZXdNYXBwZXI6YShkWzJdfHxkWzFdKSxtb2RlbE1hcHBlcjphKGRbMV0pfX19fV0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkIixbIiRjb21waWxlIiwiJHBhcnNlIiwiJHEiLCIkdGltZW91dCIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsInR5cGVhaGVhZFBhcnNlciIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9WzksMTMsMjcsMzgsNDBdO3JldHVybntyZXF1aXJlOiJuZ01vZGVsIixsaW5rOmZ1bmN0aW9uKGksaixrLGwpe3ZhciBtLG49aS4kZXZhbChrLnR5cGVhaGVhZE1pbkxlbmd0aCl8fDEsbz1pLiRldmFsKGsudHlwZWFoZWFkV2FpdE1zKXx8MCxwPWkuJGV2YWwoay50eXBlYWhlYWRFZGl0YWJsZSkhPT0hMSxxPWIoay50eXBlYWhlYWRMb2FkaW5nKS5hc3NpZ258fGFuZ3VsYXIubm9vcCxyPWIoay50eXBlYWhlYWRPblNlbGVjdCkscz1rLnR5cGVhaGVhZElucHV0Rm9ybWF0dGVyP2Ioay50eXBlYWhlYWRJbnB1dEZvcm1hdHRlcik6dm9pZCAwLHQ9ay50eXBlYWhlYWRBcHBlbmRUb0JvZHk/aS4kZXZhbChrLnR5cGVhaGVhZEFwcGVuZFRvQm9keSk6ITEsdT1iKGsubmdNb2RlbCkuYXNzaWduLHY9Zy5wYXJzZShrLnR5cGVhaGVhZCksdz1pLiRuZXcoKTtpLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7dy4kZGVzdHJveSgpfSk7dmFyIHg9InR5cGVhaGVhZC0iK3cuJGlkKyItIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKTtqLmF0dHIoeyJhcmlhLWF1dG9jb21wbGV0ZSI6Imxpc3QiLCJhcmlhLWV4cGFuZGVkIjohMSwiYXJpYS1vd25zIjp4fSk7dmFyIHk9YW5ndWxhci5lbGVtZW50KCI8ZGl2IHR5cGVhaGVhZC1wb3B1cD48L2Rpdj4iKTt5LmF0dHIoe2lkOngsbWF0Y2hlczoibWF0Y2hlcyIsYWN0aXZlOiJhY3RpdmVJZHgiLHNlbGVjdDoic2VsZWN0KGFjdGl2ZUlkeCkiLHF1ZXJ5OiJxdWVyeSIscG9zaXRpb246InBvc2l0aW9uIn0pLGFuZ3VsYXIuaXNEZWZpbmVkKGsudHlwZWFoZWFkVGVtcGxhdGVVcmwpJiZ5LmF0dHIoInRlbXBsYXRlLXVybCIsay50eXBlYWhlYWRUZW1wbGF0ZVVybCk7dmFyIHo9ZnVuY3Rpb24oKXt3Lm1hdGNoZXM9W10sdy5hY3RpdmVJZHg9LTEsai5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSl9LEE9ZnVuY3Rpb24oYSl7cmV0dXJuIHgrIi1vcHRpb24tIithfTt3LiR3YXRjaCgiYWN0aXZlSWR4IixmdW5jdGlvbihhKXswPmE/ai5yZW1vdmVBdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKTpqLmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsQShhKSl9KTt2YXIgQj1mdW5jdGlvbihhKXt2YXIgYj17JHZpZXdWYWx1ZTphfTtxKGksITApLGMud2hlbih2LnNvdXJjZShpLGIpKS50aGVuKGZ1bmN0aW9uKGMpe3ZhciBkPWE9PT1sLiR2aWV3VmFsdWU7aWYoZCYmbSlpZihjLmxlbmd0aD4wKXt3LmFjdGl2ZUlkeD0wLHcubWF0Y2hlcy5sZW5ndGg9MDtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyliW3YuaXRlbU5hbWVdPWNbZV0sdy5tYXRjaGVzLnB1c2goe2lkOkEoZSksbGFiZWw6di52aWV3TWFwcGVyKHcsYiksbW9kZWw6Y1tlXX0pO3cucXVlcnk9YSx3LnBvc2l0aW9uPXQ/Zi5vZmZzZXQoaik6Zi5wb3NpdGlvbihqKSx3LnBvc2l0aW9uLnRvcD13LnBvc2l0aW9uLnRvcCtqLnByb3AoIm9mZnNldEhlaWdodCIpLGouYXR0cigiYXJpYS1leHBhbmRlZCIsITApfWVsc2UgeigpO2QmJnEoaSwhMSl9LGZ1bmN0aW9uKCl7eigpLHEoaSwhMSl9KX07eigpLHcucXVlcnk9dm9pZCAwO3ZhciBDO2wuJHBhcnNlcnMudW5zaGlmdChmdW5jdGlvbihhKXtyZXR1cm4gbT0hMCxhJiZhLmxlbmd0aD49bj9vPjA/KEMmJmQuY2FuY2VsKEMpLEM9ZChmdW5jdGlvbigpe0IoYSl9LG8pKTpCKGEpOihxKGksITEpLHooKSkscD9hOmE/dm9pZCBsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCExKToobC4kc2V0VmFsaWRpdHkoImVkaXRhYmxlIiwhMCksYSl9KSxsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXt9O3JldHVybiBzPyhkLiRtb2RlbD1hLHMoaSxkKSk6KGRbdi5pdGVtTmFtZV09YSxiPXYudmlld01hcHBlcihpLGQpLGRbdi5pdGVtTmFtZV09dm9pZCAwLGM9di52aWV3TWFwcGVyKGksZCksYiE9PWM/YjphKX0pLHcuc2VsZWN0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT17fTtlW3YuaXRlbU5hbWVdPWM9dy5tYXRjaGVzW2FdLm1vZGVsLGI9di5tb2RlbE1hcHBlcihpLGUpLHUoaSxiKSxsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCEwKSxyKGkseyRpdGVtOmMsJG1vZGVsOmIsJGxhYmVsOnYudmlld01hcHBlcihpLGUpfSkseigpLGQoZnVuY3Rpb24oKXtqWzBdLmZvY3VzKCl9LDAsITEpfSxqLmJpbmQoImtleWRvd24iLGZ1bmN0aW9uKGEpezAhPT13Lm1hdGNoZXMubGVuZ3RoJiYtMSE9PWguaW5kZXhPZihhLndoaWNoKSYmKGEucHJldmVudERlZmF1bHQoKSw0MD09PWEud2hpY2g/KHcuYWN0aXZlSWR4PSh3LmFjdGl2ZUlkeCsxKSV3Lm1hdGNoZXMubGVuZ3RoLHcuJGRpZ2VzdCgpKTozOD09PWEud2hpY2g/KHcuYWN0aXZlSWR4PSh3LmFjdGl2ZUlkeD93LmFjdGl2ZUlkeDp3Lm1hdGNoZXMubGVuZ3RoKS0xLHcuJGRpZ2VzdCgpKToxMz09PWEud2hpY2h8fDk9PT1hLndoaWNoP3cuJGFwcGx5KGZ1bmN0aW9uKCl7dy5zZWxlY3Qody5hY3RpdmVJZHgpfSk6Mjc9PT1hLndoaWNoJiYoYS5zdG9wUHJvcGFnYXRpb24oKSx6KCksdy4kZGlnZXN0KCkpKX0pLGouYmluZCgiYmx1ciIsZnVuY3Rpb24oKXttPSExfSk7dmFyIEQ9ZnVuY3Rpb24oYSl7alswXSE9PWEudGFyZ2V0JiYoeigpLHcuJGRpZ2VzdCgpKX07ZS5iaW5kKCJjbGljayIsRCksaS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2UudW5iaW5kKCJjbGljayIsRCl9KTt2YXIgRT1hKHkpKHcpO3Q/ZS5maW5kKCJib2R5IikuYXBwZW5kKEUpOmouYWZ0ZXIoRSl9fX1dKS5kaXJlY3RpdmUoInR5cGVhaGVhZFBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOnttYXRjaGVzOiI9IixxdWVyeToiPSIsYWN0aXZlOiI9Iixwb3NpdGlvbjoiPSIsc2VsZWN0OiImIn0scmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjKXthLnRlbXBsYXRlVXJsPWMudGVtcGxhdGVVcmwsYS5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4gYS5tYXRjaGVzLmxlbmd0aD4wfSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGIpe3JldHVybiBhLmFjdGl2ZT09Yn0sYS5zZWxlY3RBY3RpdmU9ZnVuY3Rpb24oYil7YS5hY3RpdmU9Yn0sYS5zZWxlY3RNYXRjaD1mdW5jdGlvbihiKXthLnNlbGVjdCh7YWN0aXZlSWR4OmJ9KX19fX0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkTWF0Y2giLFsiJGh0dHAiLCIkdGVtcGxhdGVDYWNoZSIsIiRjb21waWxlIiwiJHBhcnNlIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7aW5kZXg6Ij0iLG1hdGNoOiI9IixxdWVyeToiPSJ9LGxpbms6ZnVuY3Rpb24oZSxmLGcpe3ZhciBoPWQoZy50ZW1wbGF0ZVVybCkoZS4kcGFyZW50KXx8InRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCI7YS5nZXQoaCx7Y2FjaGU6Yn0pLnN1Y2Nlc3MoZnVuY3Rpb24oYSl7Zi5yZXBsYWNlV2l0aChjKGEudHJpbSgpKShlKSl9KX19fV0pLmZpbHRlcigidHlwZWFoZWFkSGlnaGxpZ2h0IixmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKX1yZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gYz8oIiIrYikucmVwbGFjZShuZXcgUmVnRXhwKGEoYyksImdpIiksIjxzdHJvbmc+JCY8L3N0cm9uZz4iKTpifX0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsJzxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPlxuICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkaW5nIj5cbiAgICA8aDQgY2xhc3M9InBhbmVsLXRpdGxlIj5cbiAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIiBuZy1jbGljaz0idG9nZ2xlT3BlbigpIiBhY2NvcmRpb24tdHJhbnNjbHVkZT0iaGVhZGluZyI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtbXV0ZWRcJzogaXNEaXNhYmxlZH0iPnt7aGVhZGluZ319PC9zcGFuPjwvYT5cbiAgICA8L2g0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0icGFuZWwtY29sbGFwc2UiIGNvbGxhcHNlPSIhaXNPcGVuIj5cbgkgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIiwnPGRpdiBjbGFzcz0icGFuZWwtZ3JvdXAiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLCc8ZGl2IGNsYXNzPSJhbGVydCIgbmctY2xhc3M9IntcJ2FsZXJ0LXt7dHlwZSB8fCBcJ3dhcm5pbmdcJ319XCc6IHRydWUsIFwnYWxlcnQtZGlzbWlzc2FibGVcJzogY2xvc2VhYmxlfSIgcm9sZT0iYWxlcnQiPlxuICAgIDxidXR0b24gbmctc2hvdz0iY2xvc2VhYmxlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgbmctY2xpY2s9ImNsb3NlKCkiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPkNsb3NlPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgbmctdHJhbnNjbHVkZT48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLCc8ZGl2IG5nLW1vdXNlZW50ZXI9InBhdXNlKCkiIG5nLW1vdXNlbGVhdmU9InBsYXkoKSIgY2xhc3M9ImNhcm91c2VsIiBuZy1zd2lwZS1yaWdodD0icHJldigpIiBuZy1zd2lwZS1sZWZ0PSJuZXh0KCkiPlxuICAgIDxvbCBjbGFzcz0iY2Fyb3VzZWwtaW5kaWNhdG9ycyIgbmctc2hvdz0ic2xpZGVzLmxlbmd0aCA+IDEiPlxuICAgICAgICA8bGkgbmctcmVwZWF0PSJzbGlkZSBpbiBzbGlkZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogaXNBY3RpdmUoc2xpZGUpfSIgbmctY2xpY2s9InNlbGVjdChzbGlkZSkiPjwvbGk+XG4gICAgPC9vbD5cbiAgICA8ZGl2IGNsYXNzPSJjYXJvdXNlbC1pbm5lciIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiAgICA8YSBjbGFzcz0ibGVmdCBjYXJvdXNlbC1jb250cm9sIiBuZy1jbGljaz0icHJldigpIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L3NwYW4+PC9hPlxuICAgIDxhIGNsYXNzPSJyaWdodCBjYXJvdXNlbC1jb250cm9sIiBuZy1jbGljaz0ibmV4dCgpIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9zcGFuPjwvYT5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLCI8ZGl2IG5nLWNsYXNzPVwie1xuICAgICdhY3RpdmUnOiBsZWF2aW5nIHx8IChhY3RpdmUgJiYgIWVudGVyaW5nKSxcbiAgICAncHJldic6IChuZXh0IHx8IGFjdGl2ZSkgJiYgZGlyZWN0aW9uPT0ncHJldicsXG4gICAgJ25leHQnOiAobmV4dCB8fCBhY3RpdmUpICYmIGRpcmVjdGlvbj09J25leHQnLFxuICAgICdyaWdodCc6IGRpcmVjdGlvbj09J3ByZXYnLFxuICAgICdsZWZ0JzogZGlyZWN0aW9uPT0nbmV4dCdcbiAgfVwiIGNsYXNzPVwiaXRlbSB0ZXh0LWNlbnRlclwiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG4iKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIiwnPGRpdiBuZy1zd2l0Y2g9ImRhdGVwaWNrZXJNb2RlIiByb2xlPSJhcHBsaWNhdGlvbiIgbmcta2V5ZG93bj0ia2V5ZG93bigkZXZlbnQpIj5cbiAgPGRheXBpY2tlciBuZy1zd2l0Y2gtd2hlbj0iZGF5IiB0YWJpbmRleD0iMCI+PC9kYXlwaWNrZXI+XG4gIDxtb250aHBpY2tlciBuZy1zd2l0Y2gtd2hlbj0ibW9udGgiIHRhYmluZGV4PSIwIj48L21vbnRocGlja2VyPlxuICA8eWVhcnBpY2tlciBuZy1zd2l0Y2gtd2hlbj0ieWVhciIgdGFiaW5kZXg9IjAiPjwveWVhcnBpY2tlcj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIiwnPHRhYmxlIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0ie3t1bmlxdWVJZH19LXRpdGxlIiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9Int7YWN0aXZlRGF0ZUlkfX0iPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLWxlZnQiIG5nLWNsaWNrPSJtb3ZlKC0xKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoIGNvbHNwYW49Int7NSArIHNob3dXZWVrc319Ij48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgICA8dHI+XG4gICAgICA8dGggbmctc2hvdz0ic2hvd1dlZWtzIiBjbGFzcz0idGV4dC1jZW50ZXIiPjwvdGg+XG4gICAgICA8dGggbmctcmVwZWF0PSJsYWJlbCBpbiBsYWJlbHMgdHJhY2sgYnkgJGluZGV4IiBjbGFzcz0idGV4dC1jZW50ZXIiPjxzbWFsbCBhcmlhLWxhYmVsPSJ7e2xhYmVsLmZ1bGx9fSI+e3tsYWJlbC5hYmJyfX08L3NtYWxsPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctc2hvdz0ic2hvd1dlZWtzIiBjbGFzcz0idGV4dC1jZW50ZXIgaDYiPjxlbT57eyB3ZWVrTnVtYmVyc1skaW5kZXhdIH19PC9lbT48L3RkPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGFzcz0ie1wnYnRuLWluZm9cJzogZHQuc2VsZWN0ZWQsIGFjdGl2ZTogaXNBY3RpdmUoZHQpfSIgbmctY2xpY2s9InNlbGVjdChkdC5kYXRlKSIgbmctZGlzYWJsZWQ9ImR0LmRpc2FibGVkIiB0YWJpbmRleD0iLTEiPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LW11dGVkXCc6IGR0LnNlY29uZGFyeSwgXCd0ZXh0LWluZm9cJzogZHQuY3VycmVudH0iPnt7ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsJzx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSIgbmctc3R5bGU9IntkaXNwbGF5OiAoaXNPcGVuICYmIFwnYmxvY2tcJykgfHwgXCdub25lXCcsIHRvcDogcG9zaXRpb24udG9wK1wncHhcJywgbGVmdDogcG9zaXRpb24ubGVmdCtcJ3B4XCd9IiBuZy1rZXlkb3duPSJrZXlkb3duKCRldmVudCkiPlxuCTxsaSBuZy10cmFuc2NsdWRlPjwvbGk+XG4JPGxpIG5nLWlmPSJzaG93QnV0dG9uQmFyIiBzdHlsZT0icGFkZGluZzoxMHB4IDlweCAycHgiPlxuCQk8c3BhbiBjbGFzcz0iYnRuLWdyb3VwIj5cbgkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4taW5mbyIgbmctY2xpY2s9InNlbGVjdChcJ3RvZGF5XCcpIj57eyBnZXRUZXh0KFwnY3VycmVudFwnKSB9fTwvYnV0dG9uPlxuCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1kYW5nZXIiIG5nLWNsaWNrPSJzZWxlY3QobnVsbCkiPnt7IGdldFRleHQoXCdjbGVhclwnKSB9fTwvYnV0dG9uPlxuCQk8L3NwYW4+XG4JCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc3VjY2VzcyBwdWxsLXJpZ2h0IiBuZy1jbGljaz0iY2xvc2UoKSI+e3sgZ2V0VGV4dChcJ2Nsb3NlXCcpIH19PC9idXR0b24+XG4JPC9saT5cbjwvdWw+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIiwnPHRhYmxlIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0ie3t1bmlxdWVJZH19LXRpdGxlIiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9Int7YWN0aXZlRGF0ZUlkfX0iPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLWxlZnQiIG5nLWNsaWNrPSJtb3ZlKC0xKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoIGNvbHNwYW49IjMiPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1yZXBlYXQ9ImR0IGluIHJvdyB0cmFjayBieSBkdC5kYXRlIiBjbGFzcz0idGV4dC1jZW50ZXIiIHJvbGU9ImdyaWRjZWxsIiBpZD0ie3tkdC51aWR9fSIgYXJpYS1kaXNhYmxlZD0ie3shIWR0LmRpc2FibGVkfX0iPlxuICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgc3R5bGU9IndpZHRoOjEwMCU7IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBuZy1jbGFzcz0ie1wnYnRuLWluZm9cJzogZHQuc2VsZWN0ZWQsIGFjdGl2ZTogaXNBY3RpdmUoZHQpfSIgbmctY2xpY2s9InNlbGVjdChkdC5kYXRlKSIgbmctZGlzYWJsZWQ9ImR0LmRpc2FibGVkIiB0YWJpbmRleD0iLTEiPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LWluZm9cJzogZHQuY3VycmVudH0iPnt7ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsJzxkaXYgY2xhc3M9Im1vZGFsLWJhY2tkcm9wIGZhZGUiXG4gICAgIG5nLWNsYXNzPSJ7aW46IGFuaW1hdGV9IlxuICAgICBuZy1zdHlsZT0ie1wnei1pbmRleFwnOiAxMDQwICsgKGluZGV4ICYmIDEgfHwgMCkgKyBpbmRleCoxMH0iXG4+PC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIiwnPGRpdiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgY2xhc3M9Im1vZGFsIGZhZGUiIG5nLWNsYXNzPSJ7aW46IGFuaW1hdGV9IiBuZy1zdHlsZT0ie1wnei1pbmRleFwnOiAxMDUwICsgaW5kZXgqMTAsIGRpc3BsYXk6IFwnYmxvY2tcJ30iIG5nLWNsaWNrPSJjbG9zZSgkZXZlbnQpIj5cbiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIG5nLWNsYXNzPSJ7XCdtb2RhbC1zbVwnOiBzaXplID09IFwnc21cJywgXCdtb2RhbC1sZ1wnOiBzaXplID09IFwnbGdcJ30iPjxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+PC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLCc8dWwgY2xhc3M9InBhZ2VyIj5cbiAgPGxpIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKSwgcHJldmlvdXM6IGFsaWdufSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlIC0gMSkiPnt7Z2V0VGV4dChcJ3ByZXZpb3VzXCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vTmV4dCgpLCBuZXh0OiBhbGlnbn0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSArIDEpIj57e2dldFRleHQoXCduZXh0XCcpfX08L2E+PC9saT5cbjwvdWw+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsJzx1bCBjbGFzcz0icGFnaW5hdGlvbiI+XG4gIDxsaSBuZy1pZj0iYm91bmRhcnlMaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZSgxKSI+e3tnZXRUZXh0KFwnZmlyc3RcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImRpcmVjdGlvbkxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgLSAxKSI+e3tnZXRUZXh0KFwncHJldmlvdXNcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctcmVwZWF0PSJwYWdlIGluIHBhZ2VzIHRyYWNrIGJ5ICRpbmRleCIgbmctY2xhc3M9InthY3RpdmU6IHBhZ2UuYWN0aXZlfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlLm51bWJlcikiPnt7cGFnZS50ZXh0fX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJkaXJlY3Rpb25MaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgKyAxKSI+e3tnZXRUZXh0KFwnbmV4dFwnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iYm91bmRhcnlMaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHRvdGFsUGFnZXMpIj57e2dldFRleHQoXCdsYXN0XCcpfX08L2E+PC9saT5cbjwvdWw+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCIsJzxkaXYgY2xhc3M9InRvb2x0aXAge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiIGJpbmQtaHRtbC11bnNhZmU9ImNvbnRlbnQiPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIiwnPGRpdiBjbGFzcz0idG9vbHRpcCB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciIgbmctYmluZD0iY29udGVudCI+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwiLCc8ZGl2IGNsYXNzPSJwb3BvdmVyIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj5cblxuICA8ZGl2IGNsYXNzPSJwb3BvdmVyLWlubmVyIj5cbiAgICAgIDxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSIgbmctYmluZD0idGl0bGUiIG5nLXNob3c9InRpdGxlIj48L2gzPlxuICAgICAgPGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50IiBuZy1iaW5kPSJjb250ZW50Ij48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiIG5nLWNsYXNzPSJ0eXBlICYmIFwncHJvZ3Jlc3MtYmFyLVwnICsgdHlwZSIgcm9sZT0icHJvZ3Jlc3NiYXIiIGFyaWEtdmFsdWVub3c9Int7dmFsdWV9fSIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0ie3ttYXh9fSIgbmctc3R5bGU9Int3aWR0aDogcGVyY2VudCArIFwnJVwnfSIgYXJpYS12YWx1ZXRleHQ9Int7cGVyY2VudCB8IG51bWJlcjowfX0lIiBuZy10cmFuc2NsdWRlPjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIiwnPGRpdiBjbGFzcz0icHJvZ3Jlc3MiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+XG4gIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgbmctY2xhc3M9InR5cGUgJiYgXCdwcm9ncmVzcy1iYXItXCcgKyB0eXBlIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19IiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e21heH19IiBuZy1zdHlsZT0ie3dpZHRoOiBwZXJjZW50ICsgXCclXCd9IiBhcmlhLXZhbHVldGV4dD0ie3twZXJjZW50IHwgbnVtYmVyOjB9fSUiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLCc8c3BhbiBuZy1tb3VzZWxlYXZlPSJyZXNldCgpIiBuZy1rZXlkb3duPSJvbktleWRvd24oJGV2ZW50KSIgdGFiaW5kZXg9IjAiIHJvbGU9InNsaWRlciIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0ie3tyYW5nZS5sZW5ndGh9fSIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19Ij5cbiAgICA8aSBuZy1yZXBlYXQ9InIgaW4gcmFuZ2UgdHJhY2sgYnkgJGluZGV4IiBuZy1tb3VzZWVudGVyPSJlbnRlcigkaW5kZXggKyAxKSIgbmctY2xpY2s9InJhdGUoJGluZGV4ICsgMSkiIGNsYXNzPSJnbHlwaGljb24iIG5nLWNsYXNzPSIkaW5kZXggPCB2YWx1ZSAmJiAoci5zdGF0ZU9uIHx8IFwnZ2x5cGhpY29uLXN0YXJcJykgfHwgKHIuc3RhdGVPZmYgfHwgXCdnbHlwaGljb24tc3Rhci1lbXB0eVwnKSI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJzci1vbmx5Ij4oe3sgJGluZGV4IDwgdmFsdWUgPyBcJypcJyA6IFwnIFwnIH19KTwvc3Bhbj5cbiAgICA8L2k+XG48L3NwYW4+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLCc8bGkgbmctY2xhc3M9InthY3RpdmU6IGFjdGl2ZSwgZGlzYWJsZWQ6IGRpc2FibGVkfSI+XG4gIDxhIG5nLWNsaWNrPSJzZWxlY3QoKSIgdGFiLWhlYWRpbmctdHJhbnNjbHVkZT57e2hlYWRpbmd9fTwvYT5cbjwvbGk+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWJzZXQtdGl0bGVzLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RhYnMvdGFic2V0LXRpdGxlcy5odG1sIiwiPHVsIGNsYXNzPVwibmF2IHt7dHlwZSAmJiAnbmF2LScgKyB0eXBlfX1cIiBuZy1jbGFzcz1cInsnbmF2LXN0YWNrZWQnOiB2ZXJ0aWNhbH1cIj5cbjwvdWw+XG4iKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsJ1xuPGRpdj5cbiAgPHVsIGNsYXNzPSJuYXYgbmF2LXt7dHlwZSB8fCBcJ3RhYnNcJ319IiBuZy1jbGFzcz0ie1wnbmF2LXN0YWNrZWRcJzogdmVydGljYWwsIFwnbmF2LWp1c3RpZmllZFwnOiBqdXN0aWZpZWR9IiBuZy10cmFuc2NsdWRlPjwvdWw+XG4gIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSIgXG4gICAgICAgICBuZy1yZXBlYXQ9InRhYiBpbiB0YWJzIiBcbiAgICAgICAgIG5nLWNsYXNzPSJ7YWN0aXZlOiB0YWIuYWN0aXZlfSJcbiAgICAgICAgIHRhYi1jb250ZW50LXRyYW5zY2x1ZGU9InRhYiI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIiwnPHRhYmxlPlxuCTx0Ym9keT5cbgkJPHRyIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImluY3JlbWVudEhvdXJzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tdXAiPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZD4mbmJzcDs8L3RkPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJpbmNyZW1lbnRNaW51dGVzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tdXAiPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjwvdGQ+XG4JCTwvdHI+XG4JCTx0cj5cbgkJCTx0ZCBzdHlsZT0id2lkdGg6NTBweDsiIGNsYXNzPSJmb3JtLWdyb3VwIiBuZy1jbGFzcz0ie1wnaGFzLWVycm9yXCc6IGludmFsaWRIb3Vyc30iPlxuCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0iaG91cnMiIG5nLWNoYW5nZT0idXBkYXRlSG91cnMoKSIgY2xhc3M9ImZvcm0tY29udHJvbCB0ZXh0LWNlbnRlciIgbmctbW91c2V3aGVlbD0iaW5jcmVtZW50SG91cnMoKSIgbmctcmVhZG9ubHk9InJlYWRvbmx5SW5wdXQiIG1heGxlbmd0aD0iMiI+XG4JCQk8L3RkPlxuCQkJPHRkPjo8L3RkPlxuCQkJPHRkIHN0eWxlPSJ3aWR0aDo1MHB4OyIgY2xhc3M9ImZvcm0tZ3JvdXAiIG5nLWNsYXNzPSJ7XCdoYXMtZXJyb3JcJzogaW52YWxpZE1pbnV0ZXN9Ij5cbgkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9Im1pbnV0ZXMiIG5nLWNoYW5nZT0idXBkYXRlTWludXRlcygpIiBjbGFzcz0iZm9ybS1jb250cm9sIHRleHQtY2VudGVyIiBuZy1yZWFkb25seT0icmVhZG9ubHlJbnB1dCIgbWF4bGVuZ3RoPSIyIj5cbgkJCTwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCB0ZXh0LWNlbnRlciIgbmctY2xpY2s9InRvZ2dsZU1lcmlkaWFuKCkiPnt7bWVyaWRpYW59fTwvYnV0dG9uPjwvdGQ+XG4JCTwvdHI+XG4JCTx0ciBjbGFzcz0idGV4dC1jZW50ZXIiPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJkZWNyZW1lbnRIb3VycygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWRvd24iPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZD4mbmJzcDs8L3RkPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJkZWNyZW1lbnRNaW51dGVzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tZG93biI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PC90ZD5cbgkJPC90cj5cbgk8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsJzxhIHRhYmluZGV4PSItMSIgYmluZC1odG1sLXVuc2FmZT0ibWF0Y2gubGFiZWwgfCB0eXBlYWhlYWRIaWdobGlnaHQ6cXVlcnkiPjwvYT4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLCc8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiIG5nLWlmPSJpc09wZW4oKSIgbmctc3R5bGU9Int0b3A6IHBvc2l0aW9uLnRvcCtcJ3B4XCcsIGxlZnQ6IHBvc2l0aW9uLmxlZnQrXCdweFwnfSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgcm9sZT0ibGlzdGJveCIgYXJpYS1oaWRkZW49Int7IWlzT3BlbigpfX0iPlxuICAgIDxsaSBuZy1yZXBlYXQ9Im1hdGNoIGluIG1hdGNoZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogaXNBY3RpdmUoJGluZGV4KSB9IiBuZy1tb3VzZWVudGVyPSJzZWxlY3RBY3RpdmUoJGluZGV4KSIgbmctY2xpY2s9InNlbGVjdE1hdGNoKCRpbmRleCkiIHJvbGU9Im9wdGlvbiIgaWQ9Int7bWF0Y2guaWR9fSI+XG4gICAgICAgIDxkaXYgdHlwZWFoZWFkLW1hdGNoIGluZGV4PSIkaW5kZXgiIG1hdGNoPSJtYXRjaCIgcXVlcnk9InF1ZXJ5IiB0ZW1wbGF0ZS11cmw9InRlbXBsYXRlVXJsIj48L2Rpdj5cbiAgICA8L2xpPlxuPC91bD4nKQorfV0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAubWluLmpzIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2YTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAubWluLmpzCkBAIC0wLDAgKzEsMTAgQEAKKy8qCisgKiBhbmd1bGFyLXVpLWJvb3RzdHJhcAorICogaHR0cDovL2FuZ3VsYXItdWkuZ2l0aHViLmlvL2Jvb3RzdHJhcC8KKworICogVmVyc2lvbjogMC4xMS4wIC0gMjAxNC0wNS0wMQorICogTGljZW5zZTogTUlUCisgKi8KK2FuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAiLFsidWkuYm9vdHN0cmFwLnRwbHMiLCJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiIsInVpLmJvb3RzdHJhcC5jb2xsYXBzZSIsInVpLmJvb3RzdHJhcC5hY2NvcmRpb24iLCJ1aS5ib290c3RyYXAuYWxlcnQiLCJ1aS5ib290c3RyYXAuYmluZEh0bWwiLCJ1aS5ib290c3RyYXAuYnV0dG9ucyIsInVpLmJvb3RzdHJhcC5jYXJvdXNlbCIsInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIiwidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmRhdGVwaWNrZXIiLCJ1aS5ib290c3RyYXAuZHJvcGRvd24iLCJ1aS5ib290c3RyYXAubW9kYWwiLCJ1aS5ib290c3RyYXAucGFnaW5hdGlvbiIsInVpLmJvb3RzdHJhcC50b29sdGlwIiwidWkuYm9vdHN0cmFwLnBvcG92ZXIiLCJ1aS5ib290c3RyYXAucHJvZ3Jlc3NiYXIiLCJ1aS5ib290c3RyYXAucmF0aW5nIiwidWkuYm9vdHN0cmFwLnRhYnMiLCJ1aS5ib290c3RyYXAudGltZXBpY2tlciIsInVpLmJvb3RzdHJhcC50eXBlYWhlYWQiXSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50cGxzIixbInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCIsInRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLCJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIiwidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsInRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIiwidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsInRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIiwidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIiwidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCIsInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIiwidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwiLCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIiwidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIiwidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsInRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCJdKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iLFtdKS5mYWN0b3J5KCIkdHJhbnNpdGlvbiIsWyIkcSIsIiR0aW1lb3V0IiwiJHJvb3RTY29wZSIsZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiIGluIGEpaWYodm9pZCAwIT09Zi5zdHlsZVtiXSlyZXR1cm4gYVtiXX12YXIgZT1mdW5jdGlvbihkLGYsZyl7Zz1nfHx7fTt2YXIgaD1hLmRlZmVyKCksaT1lW2cuYW5pbWF0aW9uPyJhbmltYXRpb25FbmRFdmVudE5hbWUiOiJ0cmFuc2l0aW9uRW5kRXZlbnROYW1lIl0saj1mdW5jdGlvbigpe2MuJGFwcGx5KGZ1bmN0aW9uKCl7ZC51bmJpbmQoaSxqKSxoLnJlc29sdmUoZCl9KX07cmV0dXJuIGkmJmQuYmluZChpLGopLGIoZnVuY3Rpb24oKXthbmd1bGFyLmlzU3RyaW5nKGYpP2QuYWRkQ2xhc3MoZik6YW5ndWxhci5pc0Z1bmN0aW9uKGYpP2YoZCk6YW5ndWxhci5pc09iamVjdChmKSYmZC5jc3MoZiksaXx8aC5yZXNvbHZlKGQpfSksaC5wcm9taXNlLmNhbmNlbD1mdW5jdGlvbigpe2kmJmQudW5iaW5kKGksaiksaC5yZWplY3QoIlRyYW5zaXRpb24gY2FuY2VsbGVkIil9LGgucHJvbWlzZX0sZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0cmFucyIpLGc9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LGg9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdEFuaW1hdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoiYW5pbWF0aW9uZW5kIixPVHJhbnNpdGlvbjoib0FuaW1hdGlvbkVuZCIsdHJhbnNpdGlvbjoiYW5pbWF0aW9uZW5kIn07cmV0dXJuIGUudHJhbnNpdGlvbkVuZEV2ZW50TmFtZT1kKGcpLGUuYW5pbWF0aW9uRW5kRXZlbnROYW1lPWQoaCksZX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmNvbGxhcHNlIixbInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIl0pLmRpcmVjdGl2ZSgiY29sbGFwc2UiLFsiJHRyYW5zaXRpb24iLGZ1bmN0aW9uKGEpe3JldHVybntsaW5rOmZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBlKGIpe2Z1bmN0aW9uIGQoKXtqPT09ZSYmKGo9dm9pZCAwKX12YXIgZT1hKGMsYik7cmV0dXJuIGomJmouY2FuY2VsKCksaj1lLGUudGhlbihkLGQpLGV9ZnVuY3Rpb24gZigpe2s/KGs9ITEsZygpKTooYy5yZW1vdmVDbGFzcygiY29sbGFwc2UiKS5hZGRDbGFzcygiY29sbGFwc2luZyIpLGUoe2hlaWdodDpjWzBdLnNjcm9sbEhlaWdodCsicHgifSkudGhlbihnKSl9ZnVuY3Rpb24gZygpe2MucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKSxjLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpLGMuY3NzKHtoZWlnaHQ6ImF1dG8ifSl9ZnVuY3Rpb24gaCgpe2lmKGspaz0hMSxpKCksYy5jc3Moe2hlaWdodDowfSk7ZWxzZXtjLmNzcyh7aGVpZ2h0OmNbMF0uc2Nyb2xsSGVpZ2h0KyJweCJ9KTt7Y1swXS5vZmZzZXRXaWR0aH1jLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSBpbiIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIiksZSh7aGVpZ2h0OjB9KS50aGVuKGkpfX1mdW5jdGlvbiBpKCl7Yy5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLGMuYWRkQ2xhc3MoImNvbGxhcHNlIil9dmFyIGosaz0hMDtiLiR3YXRjaChkLmNvbGxhcHNlLGZ1bmN0aW9uKGEpe2E/aCgpOmYoKX0pfX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5hY2NvcmRpb24iLFsidWkuYm9vdHN0cmFwLmNvbGxhcHNlIl0pLmNvbnN0YW50KCJhY2NvcmRpb25Db25maWciLHtjbG9zZU90aGVyczohMH0pLmNvbnRyb2xsZXIoIkFjY29yZGlvbkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiYWNjb3JkaW9uQ29uZmlnIixmdW5jdGlvbihhLGIsYyl7dGhpcy5ncm91cHM9W10sdGhpcy5jbG9zZU90aGVycz1mdW5jdGlvbihkKXt2YXIgZT1hbmd1bGFyLmlzRGVmaW5lZChiLmNsb3NlT3RoZXJzKT9hLiRldmFsKGIuY2xvc2VPdGhlcnMpOmMuY2xvc2VPdGhlcnM7ZSYmYW5ndWxhci5mb3JFYWNoKHRoaXMuZ3JvdXBzLGZ1bmN0aW9uKGEpe2EhPT1kJiYoYS5pc09wZW49ITEpfSl9LHRoaXMuYWRkR3JvdXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczt0aGlzLmdyb3Vwcy5wdXNoKGEpLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtiLnJlbW92ZUdyb3VwKGEpfSl9LHRoaXMucmVtb3ZlR3JvdXA9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ncm91cHMuaW5kZXhPZihhKTstMSE9PWImJnRoaXMuZ3JvdXBzLnNwbGljZShiLDEpfX1dKS5kaXJlY3RpdmUoImFjY29yZGlvbiIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixjb250cm9sbGVyOiJBY2NvcmRpb25Db250cm9sbGVyIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITEsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCJ9fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25Hcm91cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZToiXmFjY29yZGlvbiIscmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsc2NvcGU6e2hlYWRpbmc6IkAiLGlzT3BlbjoiPT8iLGlzRGlzYWJsZWQ6Ij0/In0sY29udHJvbGxlcjpmdW5jdGlvbigpe3RoaXMuc2V0SGVhZGluZz1mdW5jdGlvbihhKXt0aGlzLmhlYWRpbmc9YX19LGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRHcm91cChhKSxhLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihiKXtiJiZkLmNsb3NlT3RoZXJzKGEpfSksYS50b2dnbGVPcGVuPWZ1bmN0aW9uKCl7YS5pc0Rpc2FibGVkfHwoYS5pc09wZW49IWEuaXNPcGVuKX19fX0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uSGVhZGluZyIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHRlbXBsYXRlOiIiLHJlcGxhY2U6ITAscmVxdWlyZToiXmFjY29yZGlvbkdyb3VwIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQsZSl7ZC5zZXRIZWFkaW5nKGUoYSxmdW5jdGlvbigpe30pKX19fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25UcmFuc2NsdWRlIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeYWNjb3JkaW9uR3JvdXAiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7YS4kd2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZFtjLmFjY29yZGlvblRyYW5zY2x1ZGVdfSxmdW5jdGlvbihhKXthJiYoYi5odG1sKCIiKSxiLmFwcGVuZChhKSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5hbGVydCIsW10pLmNvbnRyb2xsZXIoIkFsZXJ0Q29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLGZ1bmN0aW9uKGEsYil7YS5jbG9zZWFibGU9ImNsb3NlImluIGJ9XSkuZGlyZWN0aXZlKCJhbGVydCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixjb250cm9sbGVyOiJBbGVydENvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9hbGVydC9hbGVydC5odG1sIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsc2NvcGU6e3R5cGU6IkAiLGNsb3NlOiImIn19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5iaW5kSHRtbCIsW10pLmRpcmVjdGl2ZSgiYmluZEh0bWxVbnNhZmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjKXtiLmFkZENsYXNzKCJuZy1iaW5kaW5nIikuZGF0YSgiJGJpbmRpbmciLGMuYmluZEh0bWxVbnNhZmUpLGEuJHdhdGNoKGMuYmluZEh0bWxVbnNhZmUsZnVuY3Rpb24oYSl7Yi5odG1sKGF8fCIiKX0pfX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuYnV0dG9ucyIsW10pLmNvbnN0YW50KCJidXR0b25Db25maWciLHthY3RpdmVDbGFzczoiYWN0aXZlIix0b2dnbGVFdmVudDoiY2xpY2sifSkuY29udHJvbGxlcigiQnV0dG9uc0NvbnRyb2xsZXIiLFsiYnV0dG9uQ29uZmlnIixmdW5jdGlvbihhKXt0aGlzLmFjdGl2ZUNsYXNzPWEuYWN0aXZlQ2xhc3N8fCJhY3RpdmUiLHRoaXMudG9nZ2xlRXZlbnQ9YS50b2dnbGVFdmVudHx8ImNsaWNrIn1dKS5kaXJlY3RpdmUoImJ0blJhZGlvIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOlsiYnRuUmFkaW8iLCJuZ01vZGVsIl0sY29udHJvbGxlcjoiQnV0dG9uc0NvbnRyb2xsZXIiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07Zi4kcmVuZGVyPWZ1bmN0aW9uKCl7Yi50b2dnbGVDbGFzcyhlLmFjdGl2ZUNsYXNzLGFuZ3VsYXIuZXF1YWxzKGYuJG1vZGVsVmFsdWUsYS4kZXZhbChjLmJ0blJhZGlvKSkpfSxiLmJpbmQoZS50b2dnbGVFdmVudCxmdW5jdGlvbigpe3ZhciBkPWIuaGFzQ2xhc3MoZS5hY3RpdmVDbGFzcyk7KCFkfHxhbmd1bGFyLmlzRGVmaW5lZChjLnVuY2hlY2thYmxlKSkmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7Zi4kc2V0Vmlld1ZhbHVlKGQ/bnVsbDphLiRldmFsKGMuYnRuUmFkaW8pKSxmLiRyZW5kZXIoKX0pfSl9fX0pLmRpcmVjdGl2ZSgiYnRuQ2hlY2tib3giLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6WyJidG5DaGVja2JveCIsIm5nTW9kZWwiXSxjb250cm9sbGVyOiJCdXR0b25zQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKCl7cmV0dXJuIGcoYy5idG5DaGVja2JveFRydWUsITApfWZ1bmN0aW9uIGYoKXtyZXR1cm4gZyhjLmJ0bkNoZWNrYm94RmFsc2UsITEpfWZ1bmN0aW9uIGcoYixjKXt2YXIgZD1hLiRldmFsKGIpO3JldHVybiBhbmd1bGFyLmlzRGVmaW5lZChkKT9kOmN9dmFyIGg9ZFswXSxpPWRbMV07aS4kcmVuZGVyPWZ1bmN0aW9uKCl7Yi50b2dnbGVDbGFzcyhoLmFjdGl2ZUNsYXNzLGFuZ3VsYXIuZXF1YWxzKGkuJG1vZGVsVmFsdWUsZSgpKSl9LGIuYmluZChoLnRvZ2dsZUV2ZW50LGZ1bmN0aW9uKCl7YS4kYXBwbHkoZnVuY3Rpb24oKXtpLiRzZXRWaWV3VmFsdWUoYi5oYXNDbGFzcyhoLmFjdGl2ZUNsYXNzKT9mKCk6ZSgpKSxpLiRyZW5kZXIoKX0pfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuY2Fyb3VzZWwiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuY29udHJvbGxlcigiQ2Fyb3VzZWxDb250cm9sbGVyIixbIiRzY29wZSIsIiR0aW1lb3V0IiwiJHRyYW5zaXRpb24iLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKCl7ZSgpO3ZhciBjPSthLmludGVydmFsOyFpc05hTihjKSYmYz49MCYmKGc9YihmLGMpKX1mdW5jdGlvbiBlKCl7ZyYmKGIuY2FuY2VsKGcpLGc9bnVsbCl9ZnVuY3Rpb24gZigpe2g/KGEubmV4dCgpLGQoKSk6YS5wYXVzZSgpfXZhciBnLGgsaT10aGlzLGo9aS5zbGlkZXM9YS5zbGlkZXM9W10saz0tMTtpLmN1cnJlbnRTbGlkZT1udWxsO3ZhciBsPSExO2kuc2VsZWN0PWEuc2VsZWN0PWZ1bmN0aW9uKGUsZil7ZnVuY3Rpb24gZygpe2lmKCFsKXtpZihpLmN1cnJlbnRTbGlkZSYmYW5ndWxhci5pc1N0cmluZyhmKSYmIWEubm9UcmFuc2l0aW9uJiZlLiRlbGVtZW50KXtlLiRlbGVtZW50LmFkZENsYXNzKGYpO3tlLiRlbGVtZW50WzBdLm9mZnNldFdpZHRofWFuZ3VsYXIuZm9yRWFjaChqLGZ1bmN0aW9uKGEpe2FuZ3VsYXIuZXh0ZW5kKGEse2RpcmVjdGlvbjoiIixlbnRlcmluZzohMSxsZWF2aW5nOiExLGFjdGl2ZTohMX0pfSksYW5ndWxhci5leHRlbmQoZSx7ZGlyZWN0aW9uOmYsYWN0aXZlOiEwLGVudGVyaW5nOiEwfSksYW5ndWxhci5leHRlbmQoaS5jdXJyZW50U2xpZGV8fHt9LHtkaXJlY3Rpb246ZixsZWF2aW5nOiEwfSksYS4kY3VycmVudFRyYW5zaXRpb249YyhlLiRlbGVtZW50LHt9KSxmdW5jdGlvbihiLGMpe2EuJGN1cnJlbnRUcmFuc2l0aW9uLnRoZW4oZnVuY3Rpb24oKXtoKGIsYyl9LGZ1bmN0aW9uKCl7aChiLGMpfSl9KGUsaS5jdXJyZW50U2xpZGUpfWVsc2UgaChlLGkuY3VycmVudFNsaWRlKTtpLmN1cnJlbnRTbGlkZT1lLGs9bSxkKCl9fWZ1bmN0aW9uIGgoYixjKXthbmd1bGFyLmV4dGVuZChiLHtkaXJlY3Rpb246IiIsYWN0aXZlOiEwLGxlYXZpbmc6ITEsZW50ZXJpbmc6ITF9KSxhbmd1bGFyLmV4dGVuZChjfHx7fSx7ZGlyZWN0aW9uOiIiLGFjdGl2ZTohMSxsZWF2aW5nOiExLGVudGVyaW5nOiExfSksYS4kY3VycmVudFRyYW5zaXRpb249bnVsbH12YXIgbT1qLmluZGV4T2YoZSk7dm9pZCAwPT09ZiYmKGY9bT5rPyJuZXh0IjoicHJldiIpLGUmJmUhPT1pLmN1cnJlbnRTbGlkZSYmKGEuJGN1cnJlbnRUcmFuc2l0aW9uPyhhLiRjdXJyZW50VHJhbnNpdGlvbi5jYW5jZWwoKSxiKGcpKTpnKCkpfSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7bD0hMH0pLGkuaW5kZXhPZlNsaWRlPWZ1bmN0aW9uKGEpe3JldHVybiBqLmluZGV4T2YoYSl9LGEubmV4dD1mdW5jdGlvbigpe3ZhciBiPShrKzEpJWoubGVuZ3RoO3JldHVybiBhLiRjdXJyZW50VHJhbnNpdGlvbj92b2lkIDA6aS5zZWxlY3QoaltiXSwibmV4dCIpfSxhLnByZXY9ZnVuY3Rpb24oKXt2YXIgYj0wPmstMT9qLmxlbmd0aC0xOmstMTtyZXR1cm4gYS4kY3VycmVudFRyYW5zaXRpb24/dm9pZCAwOmkuc2VsZWN0KGpbYl0sInByZXYiKX0sYS5pc0FjdGl2ZT1mdW5jdGlvbihhKXtyZXR1cm4gaS5jdXJyZW50U2xpZGU9PT1hfSxhLiR3YXRjaCgiaW50ZXJ2YWwiLGQpLGEuJG9uKCIkZGVzdHJveSIsZSksYS5wbGF5PWZ1bmN0aW9uKCl7aHx8KGg9ITAsZCgpKX0sYS5wYXVzZT1mdW5jdGlvbigpe2Eubm9QYXVzZXx8KGg9ITEsZSgpKX0saS5hZGRTbGlkZT1mdW5jdGlvbihiLGMpe2IuJGVsZW1lbnQ9YyxqLnB1c2goYiksMT09PWoubGVuZ3RofHxiLmFjdGl2ZT8oaS5zZWxlY3QoaltqLmxlbmd0aC0xXSksMT09ai5sZW5ndGgmJmEucGxheSgpKTpiLmFjdGl2ZT0hMX0saS5yZW1vdmVTbGlkZT1mdW5jdGlvbihhKXt2YXIgYj1qLmluZGV4T2YoYSk7ai5zcGxpY2UoYiwxKSxqLmxlbmd0aD4wJiZhLmFjdGl2ZT9pLnNlbGVjdChiPj1qLmxlbmd0aD9qW2ItMV06altiXSk6az5iJiZrLS19fV0pLmRpcmVjdGl2ZSgiY2Fyb3VzZWwiLFtmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxjb250cm9sbGVyOiJDYXJvdXNlbENvbnRyb2xsZXIiLHJlcXVpcmU6ImNhcm91c2VsIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsc2NvcGU6e2ludGVydmFsOiI9Iixub1RyYW5zaXRpb246Ij0iLG5vUGF1c2U6Ij0ifX19XSkuZGlyZWN0aXZlKCJzbGlkZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZToiXmNhcm91c2VsIixyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsc2NvcGU6e2FjdGl2ZToiPT8ifSxsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkU2xpZGUoYSxiKSxhLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZC5yZW1vdmVTbGlkZShhKX0pLGEuJHdhdGNoKCJhY3RpdmUiLGZ1bmN0aW9uKGIpe2ImJmQuc2VsZWN0KGEpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZGF0ZXBhcnNlciIsW10pLnNlcnZpY2UoImRhdGVQYXJzZXIiLFsiJGxvY2FsZSIsIm9yZGVyQnlGaWx0ZXIiLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyl7cmV0dXJuIDE9PT1iJiZjPjI4PzI5PT09YyYmKGElND09PTAmJmElMTAwIT09MHx8YSU0MDA9PT0wKTozPT09Ynx8NT09PWJ8fDg9PT1ifHwxMD09PWI/MzE+YzohMH10aGlzLnBhcnNlcnM9e307dmFyIGQ9e3l5eXk6e3JlZ2V4OiJcXGR7NH0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYX19LHl5OntyZWdleDoiXFxkezJ9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLnllYXI9K2ErMmUzfX0seTp7cmVnZXg6IlxcZHsxLDR9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLnllYXI9K2F9fSxNTU1NOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuTU9OVEguam9pbigifCIpLGFwcGx5OmZ1bmN0aW9uKGIpe3RoaXMubW9udGg9YS5EQVRFVElNRV9GT1JNQVRTLk1PTlRILmluZGV4T2YoYil9fSxNTU06e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5TSE9SVE1PTlRILmpvaW4oInwiKSxhcHBseTpmdW5jdGlvbihiKXt0aGlzLm1vbnRoPWEuREFURVRJTUVfRk9STUFUUy5TSE9SVE1PTlRILmluZGV4T2YoYil9fSxNTTp7cmVnZXg6IjBbMS05XXwxWzAtMl0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMubW9udGg9YS0xfX0sTTp7cmVnZXg6IlsxLTldfDFbMC0yXSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5tb250aD1hLTF9fSxkZDp7cmVnZXg6IlswLTJdWzAtOV17MX18M1swLTFdezF9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLmRhdGU9K2F9fSxkOntyZWdleDoiWzEtMl0/WzAtOV17MX18M1swLTFdezF9IixhcHBseTpmdW5jdGlvbihhKXt0aGlzLmRhdGU9K2F9fSxFRUVFOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuREFZLmpvaW4oInwiKX0sRUVFOntyZWdleDphLkRBVEVUSU1FX0ZPUk1BVFMuU0hPUlREQVkuam9pbigifCIpfX07dGhpcy5jcmVhdGVQYXJzZXI9ZnVuY3Rpb24oYSl7dmFyIGM9W10sZT1hLnNwbGl0KCIiKTtyZXR1cm4gYW5ndWxhci5mb3JFYWNoKGQsZnVuY3Rpb24oYixkKXt2YXIgZj1hLmluZGV4T2YoZCk7aWYoZj4tMSl7YT1hLnNwbGl0KCIiKSxlW2ZdPSIoIitiLnJlZ2V4KyIpIixhW2ZdPSIkIjtmb3IodmFyIGc9ZisxLGg9ZitkLmxlbmd0aDtoPmc7ZysrKWVbZ109IiIsYVtnXT0iJCI7YT1hLmpvaW4oIiIpLGMucHVzaCh7aW5kZXg6ZixhcHBseTpiLmFwcGx5fSl9fSkse3JlZ2V4Om5ldyBSZWdFeHAoIl4iK2Uuam9pbigiIikrIiQiKSxtYXA6YihjLCJpbmRleCIpfX0sdGhpcy5wYXJzZT1mdW5jdGlvbihiLGQpe2lmKCFhbmd1bGFyLmlzU3RyaW5nKGIpKXJldHVybiBiO2Q9YS5EQVRFVElNRV9GT1JNQVRTW2RdfHxkLHRoaXMucGFyc2Vyc1tkXXx8KHRoaXMucGFyc2Vyc1tkXT10aGlzLmNyZWF0ZVBhcnNlcihkKSk7dmFyIGU9dGhpcy5wYXJzZXJzW2RdLGY9ZS5yZWdleCxnPWUubWFwLGg9Yi5tYXRjaChmKTtpZihoJiZoLmxlbmd0aCl7Zm9yKHZhciBpLGo9e3llYXI6MTkwMCxtb250aDowLGRhdGU6MSxob3VyczowfSxrPTEsbD1oLmxlbmd0aDtsPms7aysrKXt2YXIgbT1nW2stMV07bS5hcHBseSYmbS5hcHBseS5jYWxsKGosaFtrXSl9cmV0dXJuIGMoai55ZWFyLGoubW9udGgsai5kYXRlKSYmKGk9bmV3IERhdGUoai55ZWFyLGoubW9udGgsai5kYXRlLGouaG91cnMpKSxpfX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsW10pLmZhY3RvcnkoIiRwb3NpdGlvbiIsWyIkZG9jdW1lbnQiLCIkd2luZG93IixmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxjKXtyZXR1cm4gYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGVbY106Yi5nZXRDb21wdXRlZFN0eWxlP2IuZ2V0Q29tcHV0ZWRTdHlsZShhKVtjXTphLnN0eWxlW2NdfWZ1bmN0aW9uIGQoYSl7cmV0dXJuInN0YXRpYyI9PT0oYyhhLCJwb3NpdGlvbiIpfHwic3RhdGljIil9dmFyIGU9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPWFbMF0sZT1iLm9mZnNldFBhcmVudHx8YztlJiZlIT09YyYmZChlKTspZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8Y307cmV0dXJue3Bvc2l0aW9uOmZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMub2Zmc2V0KGIpLGQ9e3RvcDowLGxlZnQ6MH0sZj1lKGJbMF0pO2YhPWFbMF0mJihkPXRoaXMub2Zmc2V0KGFuZ3VsYXIuZWxlbWVudChmKSksZC50b3ArPWYuY2xpZW50VG9wLWYuc2Nyb2xsVG9wLGQubGVmdCs9Zi5jbGllbnRMZWZ0LWYuc2Nyb2xsTGVmdCk7dmFyIGc9YlswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6Zy53aWR0aHx8Yi5wcm9wKCJvZmZzZXRXaWR0aCIpLGhlaWdodDpnLmhlaWdodHx8Yi5wcm9wKCJvZmZzZXRIZWlnaHQiKSx0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0OmZ1bmN0aW9uKGMpe3ZhciBkPWNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3dpZHRoOmQud2lkdGh8fGMucHJvcCgib2Zmc2V0V2lkdGgiKSxoZWlnaHQ6ZC5oZWlnaHR8fGMucHJvcCgib2Zmc2V0SGVpZ2h0IiksdG9wOmQudG9wKyhiLnBhZ2VZT2Zmc2V0fHxhWzBdLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApLGxlZnQ6ZC5sZWZ0KyhiLnBhZ2VYT2Zmc2V0fHxhWzBdLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0KX19LHBvc2l0aW9uRWxlbWVudHM6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaT1jLnNwbGl0KCItIiksaj1pWzBdLGs9aVsxXXx8ImNlbnRlciI7ZT1kP3RoaXMub2Zmc2V0KGEpOnRoaXMucG9zaXRpb24oYSksZj1iLnByb3AoIm9mZnNldFdpZHRoIiksZz1iLnByb3AoIm9mZnNldEhlaWdodCIpO3ZhciBsPXtjZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5sZWZ0K2Uud2lkdGgvMi1mLzJ9LGxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5sZWZ0fSxyaWdodDpmdW5jdGlvbigpe3JldHVybiBlLmxlZnQrZS53aWR0aH19LG09e2NlbnRlcjpmdW5jdGlvbigpe3JldHVybiBlLnRvcCtlLmhlaWdodC8yLWcvMn0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wfSxib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3ArZS5oZWlnaHR9fTtzd2l0Y2goail7Y2FzZSJyaWdodCI6aD17dG9wOm1ba10oKSxsZWZ0Omxbal0oKX07YnJlYWs7Y2FzZSJsZWZ0IjpoPXt0b3A6bVtrXSgpLGxlZnQ6ZS5sZWZ0LWZ9O2JyZWFrO2Nhc2UiYm90dG9tIjpoPXt0b3A6bVtqXSgpLGxlZnQ6bFtrXSgpfTticmVhaztkZWZhdWx0Omg9e3RvcDplLnRvcC1nLGxlZnQ6bFtrXSgpfX1yZXR1cm4gaH19fV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlciIsWyJ1aS5ib290c3RyYXAuZGF0ZXBhcnNlciIsInVpLmJvb3RzdHJhcC5wb3NpdGlvbiJdKS5jb25zdGFudCgiZGF0ZXBpY2tlckNvbmZpZyIse2Zvcm1hdERheToiZGQiLGZvcm1hdE1vbnRoOiJNTU1NIixmb3JtYXRZZWFyOiJ5eXl5Iixmb3JtYXREYXlIZWFkZXI6IkVFRSIsZm9ybWF0RGF5VGl0bGU6Ik1NTU0geXl5eSIsZm9ybWF0TW9udGhUaXRsZToieXl5eSIsZGF0ZXBpY2tlck1vZGU6ImRheSIsbWluTW9kZToiZGF5IixtYXhNb2RlOiJ5ZWFyIixzaG93V2Vla3M6ITAsc3RhcnRpbmdEYXk6MCx5ZWFyUmFuZ2U6MjAsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbH0pLmNvbnRyb2xsZXIoIkRhdGVwaWNrZXJDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsIiRpbnRlcnBvbGF0ZSIsIiR0aW1lb3V0IiwiJGxvZyIsImRhdGVGaWx0ZXIiLCJkYXRlcGlja2VyQ29uZmlnIixmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe3ZhciBpPXRoaXMsaj17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9O3RoaXMubW9kZXM9WyJkYXkiLCJtb250aCIsInllYXIiXSxhbmd1bGFyLmZvckVhY2goWyJmb3JtYXREYXkiLCJmb3JtYXRNb250aCIsImZvcm1hdFllYXIiLCJmb3JtYXREYXlIZWFkZXIiLCJmb3JtYXREYXlUaXRsZSIsImZvcm1hdE1vbnRoVGl0bGUiLCJtaW5Nb2RlIiwibWF4TW9kZSIsInNob3dXZWVrcyIsInN0YXJ0aW5nRGF5IiwieWVhclJhbmdlIl0sZnVuY3Rpb24oYyxlKXtpW2NdPWFuZ3VsYXIuaXNEZWZpbmVkKGJbY10pPzg+ZT9kKGJbY10pKGEuJHBhcmVudCk6YS4kcGFyZW50LiRldmFsKGJbY10pOmhbY119KSxhbmd1bGFyLmZvckVhY2goWyJtaW5EYXRlIiwibWF4RGF0ZSJdLGZ1bmN0aW9uKGQpe2JbZF0/YS4kcGFyZW50LiR3YXRjaChjKGJbZF0pLGZ1bmN0aW9uKGEpe2lbZF09YT9uZXcgRGF0ZShhKTpudWxsLGkucmVmcmVzaFZpZXcoKX0pOmlbZF09aFtkXT9uZXcgRGF0ZShoW2RdKTpudWxsfSksYS5kYXRlcGlja2VyTW9kZT1hLmRhdGVwaWNrZXJNb2RlfHxoLmRhdGVwaWNrZXJNb2RlLGEudW5pcXVlSWQ9ImRhdGVwaWNrZXItIithLiRpZCsiLSIrTWF0aC5mbG9vcigxZTQqTWF0aC5yYW5kb20oKSksdGhpcy5hY3RpdmVEYXRlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuaW5pdERhdGUpP2EuJHBhcmVudC4kZXZhbChiLmluaXREYXRlKTpuZXcgRGF0ZSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09aS5jb21wYXJlKGIuZGF0ZSxpLmFjdGl2ZURhdGUpPyhhLmFjdGl2ZURhdGVJZD1iLnVpZCwhMCk6ITF9LHRoaXMuaW5pdD1mdW5jdGlvbihhKXtqPWEsai4kcmVuZGVyPWZ1bmN0aW9uKCl7aS5yZW5kZXIoKX19LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7aWYoai4kbW9kZWxWYWx1ZSl7dmFyIGE9bmV3IERhdGUoai4kbW9kZWxWYWx1ZSksYj0haXNOYU4oYSk7Yj90aGlzLmFjdGl2ZURhdGU9YTpmLmVycm9yKCdEYXRlcGlja2VyIGRpcmVjdGl2ZTogIm5nLW1vZGVsIiB2YWx1ZSBtdXN0IGJlIGEgRGF0ZSBvYmplY3QsIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAwMS4wMS4xOTcwIG9yIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBSRkMyODIyIG9yIElTTyA4NjAxIGRhdGUuJyksai4kc2V0VmFsaWRpdHkoImRhdGUiLGIpfXRoaXMucmVmcmVzaFZpZXcoKX0sdGhpcy5yZWZyZXNoVmlldz1mdW5jdGlvbigpe2lmKHRoaXMuZWxlbWVudCl7dGhpcy5fcmVmcmVzaFZpZXcoKTt2YXIgYT1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm51bGw7ai4kc2V0VmFsaWRpdHkoImRhdGUtZGlzYWJsZWQiLCFhfHx0aGlzLmVsZW1lbnQmJiF0aGlzLmlzRGlzYWJsZWQoYSkpfX0sdGhpcy5jcmVhdGVEYXRlT2JqZWN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9ai4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKTpudWxsO3JldHVybntkYXRlOmEsbGFiZWw6ZyhhLGIpLHNlbGVjdGVkOmMmJjA9PT10aGlzLmNvbXBhcmUoYSxjKSxkaXNhYmxlZDp0aGlzLmlzRGlzYWJsZWQoYSksY3VycmVudDowPT09dGhpcy5jb21wYXJlKGEsbmV3IERhdGUpfX0sdGhpcy5pc0Rpc2FibGVkPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLm1pbkRhdGUmJnRoaXMuY29tcGFyZShjLHRoaXMubWluRGF0ZSk8MHx8dGhpcy5tYXhEYXRlJiZ0aGlzLmNvbXBhcmUoYyx0aGlzLm1heERhdGUpPjB8fGIuZGF0ZURpc2FibGVkJiZhLmRhdGVEaXNhYmxlZCh7ZGF0ZTpjLG1vZGU6YS5kYXRlcGlja2VyTW9kZX0pfSx0aGlzLnNwbGl0PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2EubGVuZ3RoPjA7KWMucHVzaChhLnNwbGljZSgwLGIpKTtyZXR1cm4gY30sYS5zZWxlY3Q9ZnVuY3Rpb24oYil7aWYoYS5kYXRlcGlja2VyTW9kZT09PWkubWluTW9kZSl7dmFyIGM9ai4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKTpuZXcgRGF0ZSgwLDAsMCwwLDAsMCwwKTtjLnNldEZ1bGxZZWFyKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCksYi5nZXREYXRlKCkpLGouJHNldFZpZXdWYWx1ZShjKSxqLiRyZW5kZXIoKX1lbHNlIGkuYWN0aXZlRGF0ZT1iLGEuZGF0ZXBpY2tlck1vZGU9aS5tb2Rlc1tpLm1vZGVzLmluZGV4T2YoYS5kYXRlcGlja2VyTW9kZSktMV19LGEubW92ZT1mdW5jdGlvbihhKXt2YXIgYj1pLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSthKihpLnN0ZXAueWVhcnN8fDApLGM9aS5hY3RpdmVEYXRlLmdldE1vbnRoKCkrYSooaS5zdGVwLm1vbnRoc3x8MCk7aS5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKGIsYywxKSxpLnJlZnJlc2hWaWV3KCl9LGEudG9nZ2xlTW9kZT1mdW5jdGlvbihiKXtiPWJ8fDEsYS5kYXRlcGlja2VyTW9kZT09PWkubWF4TW9kZSYmMT09PWJ8fGEuZGF0ZXBpY2tlck1vZGU9PT1pLm1pbk1vZGUmJi0xPT09Ynx8KGEuZGF0ZXBpY2tlck1vZGU9aS5tb2Rlc1tpLm1vZGVzLmluZGV4T2YoYS5kYXRlcGlja2VyTW9kZSkrYl0pfSxhLmtleXM9ezEzOiJlbnRlciIsMzI6InNwYWNlIiwzMzoicGFnZXVwIiwzNDoicGFnZWRvd24iLDM1OiJlbmQiLDM2OiJob21lIiwzNzoibGVmdCIsMzg6InVwIiwzOToicmlnaHQiLDQwOiJkb3duIn07dmFyIGs9ZnVuY3Rpb24oKXtlKGZ1bmN0aW9uKCl7aS5lbGVtZW50WzBdLmZvY3VzKCl9LDAsITEpfTthLiRvbigiZGF0ZXBpY2tlci5mb2N1cyIsayksYS5rZXlkb3duPWZ1bmN0aW9uKGIpe3ZhciBjPWEua2V5c1tiLndoaWNoXTtpZihjJiYhYi5zaGlmdEtleSYmIWIuYWx0S2V5KWlmKGIucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLCJlbnRlciI9PT1jfHwic3BhY2UiPT09Yyl7aWYoaS5pc0Rpc2FibGVkKGkuYWN0aXZlRGF0ZSkpcmV0dXJuO2Euc2VsZWN0KGkuYWN0aXZlRGF0ZSksaygpfWVsc2UhYi5jdHJsS2V5fHwidXAiIT09YyYmImRvd24iIT09Yz8oaS5oYW5kbGVLZXlEb3duKGMsYiksaS5yZWZyZXNoVmlldygpKTooYS50b2dnbGVNb2RlKCJ1cCI9PT1jPzE6LTEpLGsoKSl9fV0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlciIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsc2NvcGU6e2RhdGVwaWNrZXJNb2RlOiI9PyIsZGF0ZURpc2FibGVkOiImIn0scmVxdWlyZTpbImRhdGVwaWNrZXIiLCI/Xm5nTW9kZWwiXSxjb250cm9sbGVyOiJEYXRlcGlja2VyQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZil9fX0pLmRpcmVjdGl2ZSgiZGF5cGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKGEpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe2Z1bmN0aW9uIGYoYSxiKXtyZXR1cm4gMSE9PWJ8fGElNCE9PTB8fGElMTAwPT09MCYmYSU0MDAhPT0wP2lbYl06Mjl9ZnVuY3Rpb24gZyhhLGIpe3ZhciBjPW5ldyBBcnJheShiKSxkPW5ldyBEYXRlKGEpLGU9MDtmb3IoZC5zZXRIb3VycygxMik7Yj5lOyljW2UrK109bmV3IERhdGUoZCksZC5zZXREYXRlKGQuZ2V0RGF0ZSgpKzEpO3JldHVybiBjfWZ1bmN0aW9uIGgoYSl7dmFyIGI9bmV3IERhdGUoYSk7Yi5zZXREYXRlKGIuZ2V0RGF0ZSgpKzQtKGIuZ2V0RGF5KCl8fDcpKTt2YXIgYz1iLmdldFRpbWUoKTtyZXR1cm4gYi5zZXRNb250aCgwKSxiLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChjLWIpLzg2NGU1KS83KSsxfWIuc2hvd1dlZWtzPWUuc2hvd1dlZWtzLGUuc3RlcD17bW9udGhzOjF9LGUuZWxlbWVudD1jO3ZhciBpPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07ZS5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXt2YXIgYz1lLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxkPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpLGY9bmV3IERhdGUoYyxkLDEpLGk9ZS5zdGFydGluZ0RheS1mLmdldERheSgpLGo9aT4wPzctaTotaSxrPW5ldyBEYXRlKGYpO2o+MCYmay5zZXREYXRlKC1qKzEpO2Zvcih2YXIgbD1nKGssNDIpLG09MDs0Mj5tO20rKylsW21dPWFuZ3VsYXIuZXh0ZW5kKGUuY3JlYXRlRGF0ZU9iamVjdChsW21dLGUuZm9ybWF0RGF5KSx7c2Vjb25kYXJ5OmxbbV0uZ2V0TW9udGgoKSE9PWQsdWlkOmIudW5pcXVlSWQrIi0iK219KTtiLmxhYmVscz1uZXcgQXJyYXkoNyk7Zm9yKHZhciBuPTA7Nz5uO24rKyliLmxhYmVsc1tuXT17YWJicjphKGxbbl0uZGF0ZSxlLmZvcm1hdERheUhlYWRlciksZnVsbDphKGxbbl0uZGF0ZSwiRUVFRSIpfTtpZihiLnRpdGxlPWEoZS5hY3RpdmVEYXRlLGUuZm9ybWF0RGF5VGl0bGUpLGIucm93cz1lLnNwbGl0KGwsNyksYi5zaG93V2Vla3Mpe2Iud2Vla051bWJlcnM9W107Zm9yKHZhciBvPWgoYi5yb3dzWzBdWzBdLmRhdGUpLHA9Yi5yb3dzLmxlbmd0aDtiLndlZWtOdW1iZXJzLnB1c2gobysrKTxwOyk7fX0sZS5jb21wYXJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBEYXRlKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpLW5ldyBEYXRlKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCksYi5nZXREYXRlKCkpfSxlLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZS5hY3RpdmVEYXRlLmdldERhdGUoKTtpZigibGVmdCI9PT1hKWItPTE7ZWxzZSBpZigidXAiPT09YSliLT03O2Vsc2UgaWYoInJpZ2h0Ij09PWEpYis9MTtlbHNlIGlmKCJkb3duIj09PWEpYis9NztlbHNlIGlmKCJwYWdldXAiPT09YXx8InBhZ2Vkb3duIj09PWEpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpKygicGFnZXVwIj09PWE/LTE6MSk7ZS5hY3RpdmVEYXRlLnNldE1vbnRoKGMsMSksYj1NYXRoLm1pbihmKGUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGUuYWN0aXZlRGF0ZS5nZXRNb250aCgpKSxiKX1lbHNlImhvbWUiPT09YT9iPTE6ImVuZCI9PT1hJiYoYj1mKGUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGUuYWN0aXZlRGF0ZS5nZXRNb250aCgpKSk7ZS5hY3RpdmVEYXRlLnNldERhdGUoYil9LGUucmVmcmVzaFZpZXcoKX19fV0pLmRpcmVjdGl2ZSgibW9udGhwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIixyZXF1aXJlOiJeZGF0ZXBpY2tlciIsbGluazpmdW5jdGlvbihiLGMsZCxlKXtlLnN0ZXA9e3llYXJzOjF9LGUuZWxlbWVudD1jLGUuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7Zm9yKHZhciBjPW5ldyBBcnJheSgxMiksZD1lLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSxmPTA7MTI+ZjtmKyspY1tmXT1hbmd1bGFyLmV4dGVuZChlLmNyZWF0ZURhdGVPYmplY3QobmV3IERhdGUoZCxmLDEpLGUuZm9ybWF0TW9udGgpLHt1aWQ6Yi51bmlxdWVJZCsiLSIrZn0pO2IudGl0bGU9YShlLmFjdGl2ZURhdGUsZS5mb3JtYXRNb250aFRpdGxlKSxiLnJvd3M9ZS5zcGxpdChjLDMpfSxlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSktbmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSl9LGUuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1lLmFjdGl2ZURhdGUuZ2V0TW9udGgoKTtpZigibGVmdCI9PT1hKWItPTE7ZWxzZSBpZigidXAiPT09YSliLT0zO2Vsc2UgaWYoInJpZ2h0Ij09PWEpYis9MTtlbHNlIGlmKCJkb3duIj09PWEpYis9MztlbHNlIGlmKCJwYWdldXAiPT09YXx8InBhZ2Vkb3duIj09PWEpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKygicGFnZXVwIj09PWE/LTE6MSk7ZS5hY3RpdmVEYXRlLnNldEZ1bGxZZWFyKGMpfWVsc2UiaG9tZSI9PT1hP2I9MDoiZW5kIj09PWEmJihiPTExKTtlLmFjdGl2ZURhdGUuc2V0TW9udGgoYil9LGUucmVmcmVzaFZpZXcoKX19fV0pLmRpcmVjdGl2ZSgieWVhcnBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIixyZXF1aXJlOiJeZGF0ZXBpY2tlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBlKGEpe3JldHVybiBwYXJzZUludCgoYS0xKS9mLDEwKSpmKzF9dmFyIGY9ZC55ZWFyUmFuZ2U7ZC5zdGVwPXt5ZWFyczpmfSxkLmVsZW1lbnQ9YixkLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe2Zvcih2YXIgYj1uZXcgQXJyYXkoZiksYz0wLGc9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk7Zj5jO2MrKyliW2NdPWFuZ3VsYXIuZXh0ZW5kKGQuY3JlYXRlRGF0ZU9iamVjdChuZXcgRGF0ZShnK2MsMCwxKSxkLmZvcm1hdFllYXIpLHt1aWQ6YS51bmlxdWVJZCsiLSIrY30pO2EudGl0bGU9W2JbMF0ubGFiZWwsYltmLTFdLmxhYmVsXS5qb2luKCIgLSAiKSxhLnJvd3M9ZC5zcGxpdChiLDUpfSxkLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5nZXRGdWxsWWVhcigpLWIuZ2V0RnVsbFllYXIoKX0sZC5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpOyJsZWZ0Ij09PWE/Yi09MToidXAiPT09YT9iLT01OiJyaWdodCI9PT1hP2IrPTE6ImRvd24iPT09YT9iKz01OiJwYWdldXAiPT09YXx8InBhZ2Vkb3duIj09PWE/Yis9KCJwYWdldXAiPT09YT8tMToxKSpkLnN0ZXAueWVhcnM6ImhvbWUiPT09YT9iPWUoZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpOiJlbmQiPT09YSYmKGI9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSkrZi0xKSxkLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYil9LGQucmVmcmVzaFZpZXcoKX19fV0pLmNvbnN0YW50KCJkYXRlcGlja2VyUG9wdXBDb25maWciLHtkYXRlcGlja2VyUG9wdXA6Inl5eXktTU0tZGQiLGN1cnJlbnRUZXh0OiJUb2RheSIsY2xlYXJUZXh0OiJDbGVhciIsY2xvc2VUZXh0OiJEb25lIixjbG9zZU9uRGF0ZVNlbGVjdGlvbjohMCxhcHBlbmRUb0JvZHk6ITEsc2hvd0J1dHRvbkJhcjohMH0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlclBvcHVwIixbIiRjb21waWxlIiwiJHBhcnNlIiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwiZGF0ZUZpbHRlciIsImRhdGVQYXJzZXIiLCJkYXRlcGlja2VyUG9wdXBDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6Im5nTW9kZWwiLHNjb3BlOntpc09wZW46Ij0/IixjdXJyZW50VGV4dDoiQCIsY2xlYXJUZXh0OiJAIixjbG9zZVRleHQ6IkAiLGRhdGVEaXNhYmxlZDoiJiJ9LGxpbms6ZnVuY3Rpb24oaCxpLGosayl7ZnVuY3Rpb24gbChhKXtyZXR1cm4gYS5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oYSl7cmV0dXJuIi0iK2EudG9Mb3dlckNhc2UoKX0pfWZ1bmN0aW9uIG0oYSl7aWYoYSl7aWYoYW5ndWxhci5pc0RhdGUoYSkmJiFpc05hTihhKSlyZXR1cm4gay4kc2V0VmFsaWRpdHkoImRhdGUiLCEwKSxhO2lmKGFuZ3VsYXIuaXNTdHJpbmcoYSkpe3ZhciBiPWYucGFyc2UoYSxuKXx8bmV3IERhdGUoYSk7cmV0dXJuIGlzTmFOKGIpP3ZvaWQgay4kc2V0VmFsaWRpdHkoImRhdGUiLCExKTooay4kc2V0VmFsaWRpdHkoImRhdGUiLCEwKSxiKX1yZXR1cm4gdm9pZCBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITEpfXJldHVybiBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLG51bGx9dmFyIG4sbz1hbmd1bGFyLmlzRGVmaW5lZChqLmNsb3NlT25EYXRlU2VsZWN0aW9uKT9oLiRwYXJlbnQuJGV2YWwoai5jbG9zZU9uRGF0ZVNlbGVjdGlvbik6Zy5jbG9zZU9uRGF0ZVNlbGVjdGlvbixwPWFuZ3VsYXIuaXNEZWZpbmVkKGouZGF0ZXBpY2tlckFwcGVuZFRvQm9keSk/aC4kcGFyZW50LiRldmFsKGouZGF0ZXBpY2tlckFwcGVuZFRvQm9keSk6Zy5hcHBlbmRUb0JvZHk7aC5zaG93QnV0dG9uQmFyPWFuZ3VsYXIuaXNEZWZpbmVkKGouc2hvd0J1dHRvbkJhcik/aC4kcGFyZW50LiRldmFsKGouc2hvd0J1dHRvbkJhcik6Zy5zaG93QnV0dG9uQmFyLGguZ2V0VGV4dD1mdW5jdGlvbihhKXtyZXR1cm4gaFthKyJUZXh0Il18fGdbYSsiVGV4dCJdfSxqLiRvYnNlcnZlKCJkYXRlcGlja2VyUG9wdXAiLGZ1bmN0aW9uKGEpe249YXx8Zy5kYXRlcGlja2VyUG9wdXAsay4kcmVuZGVyKCl9KTt2YXIgcT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgZGF0ZXBpY2tlci1wb3B1cC13cmFwPjxkaXYgZGF0ZXBpY2tlcj48L2Rpdj48L2Rpdj4iKTtxLmF0dHIoeyJuZy1tb2RlbCI6ImRhdGUiLCJuZy1jaGFuZ2UiOiJkYXRlU2VsZWN0aW9uKCkifSk7dmFyIHI9YW5ndWxhci5lbGVtZW50KHEuY2hpbGRyZW4oKVswXSk7ai5kYXRlcGlja2VyT3B0aW9ucyYmYW5ndWxhci5mb3JFYWNoKGguJHBhcmVudC4kZXZhbChqLmRhdGVwaWNrZXJPcHRpb25zKSxmdW5jdGlvbihhLGIpe3IuYXR0cihsKGIpLGEpfSksYW5ndWxhci5mb3JFYWNoKFsibWluRGF0ZSIsIm1heERhdGUiXSxmdW5jdGlvbihhKXtqW2FdJiYoaC4kcGFyZW50LiR3YXRjaChiKGpbYV0pLGZ1bmN0aW9uKGIpe2hbYV09Yn0pLHIuYXR0cihsKGEpLGEpKX0pLGouZGF0ZURpc2FibGVkJiZyLmF0dHIoImRhdGUtZGlzYWJsZWQiLCJkYXRlRGlzYWJsZWQoeyBkYXRlOiBkYXRlLCBtb2RlOiBtb2RlIH0pIiksay4kcGFyc2Vycy51bnNoaWZ0KG0pLGguZGF0ZVNlbGVjdGlvbj1mdW5jdGlvbihhKXthbmd1bGFyLmlzRGVmaW5lZChhKSYmKGguZGF0ZT1hKSxrLiRzZXRWaWV3VmFsdWUoaC5kYXRlKSxrLiRyZW5kZXIoKSxvJiYoaC5pc09wZW49ITEsaVswXS5mb2N1cygpKX0saS5iaW5kKCJpbnB1dCBjaGFuZ2Uga2V5dXAiLGZ1bmN0aW9uKCl7aC4kYXBwbHkoZnVuY3Rpb24oKXtoLmRhdGU9ay4kbW9kZWxWYWx1ZX0pfSksay4kcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGE9ay4kdmlld1ZhbHVlP2Uoay4kdmlld1ZhbHVlLG4pOiIiO2kudmFsKGEpLGguZGF0ZT1tKGsuJG1vZGVsVmFsdWUpfTt2YXIgcz1mdW5jdGlvbihhKXtoLmlzT3BlbiYmYS50YXJnZXQhPT1pWzBdJiZoLiRhcHBseShmdW5jdGlvbigpe2guaXNPcGVuPSExfSl9LHQ9ZnVuY3Rpb24oYSl7aC5rZXlkb3duKGEpfTtpLmJpbmQoImtleWRvd24iLHQpLGgua2V5ZG93bj1mdW5jdGlvbihhKXsyNz09PWEud2hpY2g/KGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGguY2xvc2UoKSk6NDAhPT1hLndoaWNofHxoLmlzT3Blbnx8KGguaXNPcGVuPSEwKX0saC4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYSl7YT8oaC4kYnJvYWRjYXN0KCJkYXRlcGlja2VyLmZvY3VzIiksaC5wb3NpdGlvbj1wP2Qub2Zmc2V0KGkpOmQucG9zaXRpb24oaSksaC5wb3NpdGlvbi50b3A9aC5wb3NpdGlvbi50b3AraS5wcm9wKCJvZmZzZXRIZWlnaHQiKSxjLmJpbmQoImNsaWNrIixzKSk6Yy51bmJpbmQoImNsaWNrIixzKX0pLGguc2VsZWN0PWZ1bmN0aW9uKGEpe2lmKCJ0b2RheSI9PT1hKXt2YXIgYj1uZXcgRGF0ZTthbmd1bGFyLmlzRGF0ZShrLiRtb2RlbFZhbHVlKT8oYT1uZXcgRGF0ZShrLiRtb2RlbFZhbHVlKSxhLnNldEZ1bGxZZWFyKGIuZ2V0RnVsbFllYXIoKSxiLmdldE1vbnRoKCksYi5nZXREYXRlKCkpKTphPW5ldyBEYXRlKGIuc2V0SG91cnMoMCwwLDAsMCkpfWguZGF0ZVNlbGVjdGlvbihhKX0saC5jbG9zZT1mdW5jdGlvbigpe2guaXNPcGVuPSExLGlbMF0uZm9jdXMoKX07dmFyIHU9YShxKShoKTtwP2MuZmluZCgiYm9keSIpLmFwcGVuZCh1KTppLmFmdGVyKHUpLGguJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXt1LnJlbW92ZSgpLGkudW5iaW5kKCJrZXlkb3duIix0KSxjLnVuYmluZCgiY2xpY2siLHMpfSl9fX1dKS5kaXJlY3RpdmUoImRhdGVwaWNrZXJQb3B1cFdyYXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiKXtiLmJpbmQoImNsaWNrIixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmRyb3Bkb3duIixbXSkuY29uc3RhbnQoImRyb3Bkb3duQ29uZmlnIix7b3BlbkNsYXNzOiJvcGVuIn0pLnNlcnZpY2UoImRyb3Bkb3duU2VydmljZSIsWyIkZG9jdW1lbnQiLGZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7dGhpcy5vcGVuPWZ1bmN0aW9uKGUpe2J8fChhLmJpbmQoImNsaWNrIixjKSxhLmJpbmQoImtleWRvd24iLGQpKSxiJiZiIT09ZSYmKGIuaXNPcGVuPSExKSxiPWV9LHRoaXMuY2xvc2U9ZnVuY3Rpb24oZSl7Yj09PWUmJihiPW51bGwsYS51bmJpbmQoImNsaWNrIixjKSxhLnVuYmluZCgia2V5ZG93biIsZCkpfTt2YXIgYz1mdW5jdGlvbihhKXthJiZhLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxiLiRhcHBseShmdW5jdGlvbigpe2IuaXNPcGVuPSExfSl9LGQ9ZnVuY3Rpb24oYSl7Mjc9PT1hLndoaWNoJiYoYi5mb2N1c1RvZ2dsZUVsZW1lbnQoKSxjKCkpfX1dKS5jb250cm9sbGVyKCJEcm9wZG93bkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiZHJvcGRvd25Db25maWciLCJkcm9wZG93blNlcnZpY2UiLCIkYW5pbWF0ZSIsZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGg9dGhpcyxpPWEuJG5ldygpLGo9ZC5vcGVuQ2xhc3Msaz1hbmd1bGFyLm5vb3AsbD1iLm9uVG9nZ2xlP2MoYi5vblRvZ2dsZSk6YW5ndWxhci5ub29wO3RoaXMuaW5pdD1mdW5jdGlvbihkKXtoLiRlbGVtZW50PWQsYi5pc09wZW4mJihnPWMoYi5pc09wZW4pLGs9Zy5hc3NpZ24sYS4kd2F0Y2goZyxmdW5jdGlvbihhKXtpLmlzT3Blbj0hIWF9KSl9LHRoaXMudG9nZ2xlPWZ1bmN0aW9uKGEpe3JldHVybiBpLmlzT3Blbj1hcmd1bWVudHMubGVuZ3RoPyEhYTohaS5pc09wZW59LHRoaXMuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIGkuaXNPcGVufSxpLmZvY3VzVG9nZ2xlRWxlbWVudD1mdW5jdGlvbigpe2gudG9nZ2xlRWxlbWVudCYmaC50b2dnbGVFbGVtZW50WzBdLmZvY3VzKCl9LGkuJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGIsYyl7ZltiPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oaC4kZWxlbWVudCxqKSxiPyhpLmZvY3VzVG9nZ2xlRWxlbWVudCgpLGUub3BlbihpKSk6ZS5jbG9zZShpKSxrKGEsYiksYW5ndWxhci5pc0RlZmluZWQoYikmJmIhPT1jJiZsKGEse29wZW46ISFifSl9KSxhLiRvbigiJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtpLmlzT3Blbj0hMX0pLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtpLiRkZXN0cm95KCl9KX1dKS5kaXJlY3RpdmUoImRyb3Bkb3duIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiQ0EiLGNvbnRyb2xsZXI6IkRyb3Bkb3duQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmluaXQoYil9fX0pLmRpcmVjdGl2ZSgiZHJvcGRvd25Ub2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJDQSIscmVxdWlyZToiP15kcm9wZG93biIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtpZihkKXtkLnRvZ2dsZUVsZW1lbnQ9Yjt2YXIgZT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksYi5oYXNDbGFzcygiZGlzYWJsZWQiKXx8Yy5kaXNhYmxlZHx8YS4kYXBwbHkoZnVuY3Rpb24oKXtkLnRvZ2dsZSgpfSl9O2IuYmluZCgiY2xpY2siLGUpLGIuYXR0cih7ImFyaWEtaGFzcG9wdXAiOiEwLCJhcmlhLWV4cGFuZGVkIjohMX0pLGEuJHdhdGNoKGQuaXNPcGVuLGZ1bmN0aW9uKGEpe2IuYXR0cigiYXJpYS1leHBhbmRlZCIsISFhKX0pLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtiLnVuYmluZCgiY2xpY2siLGUpfSl9fX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLm1vZGFsIixbInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIl0pLmZhY3RvcnkoIiQkc3RhY2tlZE1hcCIsZnVuY3Rpb24oKXtyZXR1cm57Y3JlYXRlTmV3OmZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJue2FkZDpmdW5jdGlvbihiLGMpe2EucHVzaCh7a2V5OmIsdmFsdWU6Y30pfSxnZXQ6ZnVuY3Rpb24oYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYj09YVtjXS5rZXkpcmV0dXJuIGFbY119LGtleXM6ZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaChhW2NdLmtleSk7cmV0dXJuIGJ9LHRvcDpmdW5jdGlvbigpe3JldHVybiBhW2EubGVuZ3RoLTFdfSxyZW1vdmU6ZnVuY3Rpb24oYil7Zm9yKHZhciBjPS0xLGQ9MDtkPGEubGVuZ3RoO2QrKylpZihiPT1hW2RdLmtleSl7Yz1kO2JyZWFrfXJldHVybiBhLnNwbGljZShjLDEpWzBdfSxyZW1vdmVUb3A6ZnVuY3Rpb24oKXtyZXR1cm4gYS5zcGxpY2UoYS5sZW5ndGgtMSwxKVswXX0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIGEubGVuZ3RofX19fX0pLmRpcmVjdGl2ZSgibW9kYWxCYWNrZHJvcCIsWyIkdGltZW91dCIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsbGluazpmdW5jdGlvbihiKXtiLmFuaW1hdGU9ITEsYShmdW5jdGlvbigpe2IuYW5pbWF0ZT0hMH0pfX19XSkuZGlyZWN0aXZlKCJtb2RhbFdpbmRvdyIsWyIkbW9kYWxTdGFjayIsIiR0aW1lb3V0IixmdW5jdGlvbihhLGIpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOntpbmRleDoiQCIsYW5pbWF0ZToiPSJ9LHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCx0ZW1wbGF0ZVVybDpmdW5jdGlvbihhLGIpe3JldHVybiBiLnRlbXBsYXRlVXJsfHwidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwifSxsaW5rOmZ1bmN0aW9uKGMsZCxlKXtkLmFkZENsYXNzKGUud2luZG93Q2xhc3N8fCIiKSxjLnNpemU9ZS5zaXplLGIoZnVuY3Rpb24oKXtjLmFuaW1hdGU9ITAsZFswXS5mb2N1cygpfSksYy5jbG9zZT1mdW5jdGlvbihiKXt2YXIgYz1hLmdldFRvcCgpO2MmJmMudmFsdWUuYmFja2Ryb3AmJiJzdGF0aWMiIT1jLnZhbHVlLmJhY2tkcm9wJiZiLnRhcmdldD09PWIuY3VycmVudFRhcmdldCYmKGIucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLGEuZGlzbWlzcyhjLmtleSwiYmFja2Ryb3AgY2xpY2siKSl9fX19XSkuZmFjdG9yeSgiJG1vZGFsU3RhY2siLFsiJHRyYW5zaXRpb24iLCIkdGltZW91dCIsIiRkb2N1bWVudCIsIiRjb21waWxlIiwiJHJvb3RTY29wZSIsIiQkc3RhY2tlZE1hcCIsZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2Z1bmN0aW9uIGcoKXtmb3IodmFyIGE9LTEsYj1uLmtleXMoKSxjPTA7YzxiLmxlbmd0aDtjKyspbi5nZXQoYltjXSkudmFsdWUuYmFja2Ryb3AmJihhPWMpO3JldHVybiBhfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Yy5maW5kKCJib2R5IikuZXEoMCksZD1uLmdldChhKS52YWx1ZTtuLnJlbW92ZShhKSxqKGQubW9kYWxEb21FbCxkLm1vZGFsU2NvcGUsMzAwLGZ1bmN0aW9uKCl7ZC5tb2RhbFNjb3BlLiRkZXN0cm95KCksYi50b2dnbGVDbGFzcyhtLG4ubGVuZ3RoKCk+MCksaSgpfSl9ZnVuY3Rpb24gaSgpe2lmKGsmJi0xPT1nKCkpe3ZhciBhPWw7aihrLGwsMTUwLGZ1bmN0aW9uKCl7YS4kZGVzdHJveSgpLGE9bnVsbH0pLGs9dm9pZCAwLGw9dm9pZCAwfX1mdW5jdGlvbiBqKGMsZCxlLGYpe2Z1bmN0aW9uIGcoKXtnLmRvbmV8fChnLmRvbmU9ITAsYy5yZW1vdmUoKSxmJiZmKCkpfWQuYW5pbWF0ZT0hMTt2YXIgaD1hLnRyYW5zaXRpb25FbmRFdmVudE5hbWU7aWYoaCl7dmFyIGk9YihnLGUpO2MuYmluZChoLGZ1bmN0aW9uKCl7Yi5jYW5jZWwoaSksZygpLGQuJGFwcGx5KCl9KX1lbHNlIGIoZywwKX12YXIgayxsLG09Im1vZGFsLW9wZW4iLG49Zi5jcmVhdGVOZXcoKSxvPXt9O3JldHVybiBlLiR3YXRjaChnLGZ1bmN0aW9uKGEpe2wmJihsLmluZGV4PWEpfSksYy5iaW5kKCJrZXlkb3duIixmdW5jdGlvbihhKXt2YXIgYjsyNz09PWEud2hpY2gmJihiPW4udG9wKCksYiYmYi52YWx1ZS5rZXlib2FyZCYmKGEucHJldmVudERlZmF1bHQoKSxlLiRhcHBseShmdW5jdGlvbigpe28uZGlzbWlzcyhiLmtleSwiZXNjYXBlIGtleSBwcmVzcyIpfSkpKX0pLG8ub3Blbj1mdW5jdGlvbihhLGIpe24uYWRkKGEse2RlZmVycmVkOmIuZGVmZXJyZWQsbW9kYWxTY29wZTpiLnNjb3BlLGJhY2tkcm9wOmIuYmFja2Ryb3Asa2V5Ym9hcmQ6Yi5rZXlib2FyZH0pO3ZhciBmPWMuZmluZCgiYm9keSIpLmVxKDApLGg9ZygpO2g+PTAmJiFrJiYobD1lLiRuZXcoITApLGwuaW5kZXg9aCxrPWQoIjxkaXYgbW9kYWwtYmFja2Ryb3A+PC9kaXY+IikobCksZi5hcHBlbmQoaykpO3ZhciBpPWFuZ3VsYXIuZWxlbWVudCgiPGRpdiBtb2RhbC13aW5kb3c+PC9kaXY+Iik7aS5hdHRyKHsidGVtcGxhdGUtdXJsIjpiLndpbmRvd1RlbXBsYXRlVXJsLCJ3aW5kb3ctY2xhc3MiOmIud2luZG93Q2xhc3Msc2l6ZTpiLnNpemUsaW5kZXg6bi5sZW5ndGgoKS0xLGFuaW1hdGU6ImFuaW1hdGUifSkuaHRtbChiLmNvbnRlbnQpO3ZhciBqPWQoaSkoYi5zY29wZSk7bi50b3AoKS52YWx1ZS5tb2RhbERvbUVsPWosZi5hcHBlbmQoaiksZi5hZGRDbGFzcyhtKX0sby5jbG9zZT1mdW5jdGlvbihhLGIpe3ZhciBjPW4uZ2V0KGEpLnZhbHVlO2MmJihjLmRlZmVycmVkLnJlc29sdmUoYiksaChhKSl9LG8uZGlzbWlzcz1mdW5jdGlvbihhLGIpe3ZhciBjPW4uZ2V0KGEpLnZhbHVlO2MmJihjLmRlZmVycmVkLnJlamVjdChiKSxoKGEpKX0sby5kaXNtaXNzQWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmdldFRvcCgpO2I7KXRoaXMuZGlzbWlzcyhiLmtleSxhKSxiPXRoaXMuZ2V0VG9wKCl9LG8uZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIG4udG9wKCl9LG99XSkucHJvdmlkZXIoIiRtb2RhbCIsZnVuY3Rpb24oKXt2YXIgYT17b3B0aW9uczp7YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITB9LCRnZXQ6WyIkaW5qZWN0b3IiLCIkcm9vdFNjb3BlIiwiJHEiLCIkaHR0cCIsIiR0ZW1wbGF0ZUNhY2hlIiwiJGNvbnRyb2xsZXIiLCIkbW9kYWxTdGFjayIsZnVuY3Rpb24oYixjLGQsZSxmLGcsaCl7ZnVuY3Rpb24gaShhKXtyZXR1cm4gYS50ZW1wbGF0ZT9kLndoZW4oYS50ZW1wbGF0ZSk6ZS5nZXQoYS50ZW1wbGF0ZVVybCx7Y2FjaGU6Zn0pLnRoZW4oZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGF0YX0pfWZ1bmN0aW9uIGooYSl7dmFyIGM9W107cmV0dXJuIGFuZ3VsYXIuZm9yRWFjaChhLGZ1bmN0aW9uKGEpeyhhbmd1bGFyLmlzRnVuY3Rpb24oYSl8fGFuZ3VsYXIuaXNBcnJheShhKSkmJmMucHVzaChkLndoZW4oYi5pbnZva2UoYSkpKX0pLGN9dmFyIGs9e307cmV0dXJuIGsub3Blbj1mdW5jdGlvbihiKXt2YXIgZT1kLmRlZmVyKCksZj1kLmRlZmVyKCksaz17cmVzdWx0OmUucHJvbWlzZSxvcGVuZWQ6Zi5wcm9taXNlLGNsb3NlOmZ1bmN0aW9uKGEpe2guY2xvc2UoayxhKX0sZGlzbWlzczpmdW5jdGlvbihhKXtoLmRpc21pc3MoayxhKX19O2lmKGI9YW5ndWxhci5leHRlbmQoe30sYS5vcHRpb25zLGIpLGIucmVzb2x2ZT1iLnJlc29sdmV8fHt9LCFiLnRlbXBsYXRlJiYhYi50ZW1wbGF0ZVVybCl0aHJvdyBuZXcgRXJyb3IoIk9uZSBvZiB0ZW1wbGF0ZSBvciB0ZW1wbGF0ZVVybCBvcHRpb25zIGlzIHJlcXVpcmVkLiIpO3ZhciBsPWQuYWxsKFtpKGIpXS5jb25jYXQoaihiLnJlc29sdmUpKSk7cmV0dXJuIGwudGhlbihmdW5jdGlvbihhKXt2YXIgZD0oYi5zY29wZXx8YykuJG5ldygpO2QuJGNsb3NlPWsuY2xvc2UsZC4kZGlzbWlzcz1rLmRpc21pc3M7dmFyIGYsaT17fSxqPTE7Yi5jb250cm9sbGVyJiYoaS4kc2NvcGU9ZCxpLiRtb2RhbEluc3RhbmNlPWssYW5ndWxhci5mb3JFYWNoKGIucmVzb2x2ZSxmdW5jdGlvbihiLGMpe2lbY109YVtqKytdfSksZj1nKGIuY29udHJvbGxlcixpKSksaC5vcGVuKGsse3Njb3BlOmQsZGVmZXJyZWQ6ZSxjb250ZW50OmFbMF0sYmFja2Ryb3A6Yi5iYWNrZHJvcCxrZXlib2FyZDpiLmtleWJvYXJkLHdpbmRvd0NsYXNzOmIud2luZG93Q2xhc3Msd2luZG93VGVtcGxhdGVVcmw6Yi53aW5kb3dUZW1wbGF0ZVVybCxzaXplOmIuc2l6ZX0pfSxmdW5jdGlvbihhKXtlLnJlamVjdChhKX0pLGwudGhlbihmdW5jdGlvbigpe2YucmVzb2x2ZSghMCl9LGZ1bmN0aW9uKCl7Zi5yZWplY3QoITEpfSksa30sa31dfTtyZXR1cm4gYX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucGFnaW5hdGlvbiIsW10pLmNvbnRyb2xsZXIoIlBhZ2luYXRpb25Db250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsIiRwYXJzZSIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9LGY9Yi5udW1QYWdlcz9jKGIubnVtUGFnZXMpLmFzc2lnbjphbmd1bGFyLm5vb3A7dGhpcy5pbml0PWZ1bmN0aW9uKGYsZyl7ZT1mLHRoaXMuY29uZmlnPWcsZS4kcmVuZGVyPWZ1bmN0aW9uKCl7ZC5yZW5kZXIoKX0sYi5pdGVtc1BlclBhZ2U/YS4kcGFyZW50LiR3YXRjaChjKGIuaXRlbXNQZXJQYWdlKSxmdW5jdGlvbihiKXtkLml0ZW1zUGVyUGFnZT1wYXJzZUludChiLDEwKSxhLnRvdGFsUGFnZXM9ZC5jYWxjdWxhdGVUb3RhbFBhZ2VzKCl9KTp0aGlzLml0ZW1zUGVyUGFnZT1nLml0ZW1zUGVyUGFnZX0sdGhpcy5jYWxjdWxhdGVUb3RhbFBhZ2VzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5pdGVtc1BlclBhZ2U8MT8xOk1hdGguY2VpbChhLnRvdGFsSXRlbXMvdGhpcy5pdGVtc1BlclBhZ2UpO3JldHVybiBNYXRoLm1heChifHwwLDEpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe2EucGFnZT1wYXJzZUludChlLiR2aWV3VmFsdWUsMTApfHwxfSxhLnNlbGVjdFBhZ2U9ZnVuY3Rpb24oYil7YS5wYWdlIT09YiYmYj4wJiZiPD1hLnRvdGFsUGFnZXMmJihlLiRzZXRWaWV3VmFsdWUoYiksZS4kcmVuZGVyKCkpfSxhLmdldFRleHQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFbYisiVGV4dCJdfHxkLmNvbmZpZ1tiKyJUZXh0Il19LGEubm9QcmV2aW91cz1mdW5jdGlvbigpe3JldHVybiAxPT09YS5wYWdlfSxhLm5vTmV4dD1mdW5jdGlvbigpe3JldHVybiBhLnBhZ2U9PT1hLnRvdGFsUGFnZXN9LGEuJHdhdGNoKCJ0b3RhbEl0ZW1zIixmdW5jdGlvbigpe2EudG90YWxQYWdlcz1kLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKX0pLGEuJHdhdGNoKCJ0b3RhbFBhZ2VzIixmdW5jdGlvbihiKXtmKGEuJHBhcmVudCxiKSxhLnBhZ2U+Yj9hLnNlbGVjdFBhZ2UoYik6ZS4kcmVuZGVyKCl9KX1dKS5jb25zdGFudCgicGFnaW5hdGlvbkNvbmZpZyIse2l0ZW1zUGVyUGFnZToxMCxib3VuZGFyeUxpbmtzOiExLGRpcmVjdGlvbkxpbmtzOiEwLGZpcnN0VGV4dDoiRmlyc3QiLHByZXZpb3VzVGV4dDoiUHJldmlvdXMiLG5leHRUZXh0OiJOZXh0IixsYXN0VGV4dDoiTGFzdCIscm90YXRlOiEwfSkuZGlyZWN0aXZlKCJwYWdpbmF0aW9uIixbIiRwYXJzZSIsInBhZ2luYXRpb25Db25maWciLGZ1bmN0aW9uKGEsYil7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e3RvdGFsSXRlbXM6Ij0iLGZpcnN0VGV4dDoiQCIscHJldmlvdXNUZXh0OiJAIixuZXh0VGV4dDoiQCIsbGFzdFRleHQ6IkAifSxyZXF1aXJlOlsicGFnaW5hdGlvbiIsIj9uZ01vZGVsIl0sY29udHJvbGxlcjoiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIscmVwbGFjZTohMCxsaW5rOmZ1bmN0aW9uKGMsZCxlLGYpe2Z1bmN0aW9uIGcoYSxiLGMpe3JldHVybntudW1iZXI6YSx0ZXh0OmIsYWN0aXZlOmN9fWZ1bmN0aW9uIGgoYSxiKXt2YXIgYz1bXSxkPTEsZT1iLGY9YW5ndWxhci5pc0RlZmluZWQoaykmJmI+aztmJiYobD8oZD1NYXRoLm1heChhLU1hdGguZmxvb3Ioay8yKSwxKSxlPWQray0xLGU+YiYmKGU9YixkPWUtaysxKSk6KGQ9KE1hdGguY2VpbChhL2spLTEpKmsrMSxlPU1hdGgubWluKGQray0xLGIpKSk7Zm9yKHZhciBoPWQ7ZT49aDtoKyspe3ZhciBpPWcoaCxoLGg9PT1hKTtjLnB1c2goaSl9aWYoZiYmIWwpe2lmKGQ+MSl7dmFyIGo9ZyhkLTEsIi4uLiIsITEpO2MudW5zaGlmdChqKX1pZihiPmUpe3ZhciBtPWcoZSsxLCIuLi4iLCExKTtjLnB1c2gobSl9fXJldHVybiBjfXZhciBpPWZbMF0saj1mWzFdO2lmKGope3ZhciBrPWFuZ3VsYXIuaXNEZWZpbmVkKGUubWF4U2l6ZSk/Yy4kcGFyZW50LiRldmFsKGUubWF4U2l6ZSk6Yi5tYXhTaXplLGw9YW5ndWxhci5pc0RlZmluZWQoZS5yb3RhdGUpP2MuJHBhcmVudC4kZXZhbChlLnJvdGF0ZSk6Yi5yb3RhdGU7Yy5ib3VuZGFyeUxpbmtzPWFuZ3VsYXIuaXNEZWZpbmVkKGUuYm91bmRhcnlMaW5rcyk/Yy4kcGFyZW50LiRldmFsKGUuYm91bmRhcnlMaW5rcyk6Yi5ib3VuZGFyeUxpbmtzLGMuZGlyZWN0aW9uTGlua3M9YW5ndWxhci5pc0RlZmluZWQoZS5kaXJlY3Rpb25MaW5rcyk/Yy4kcGFyZW50LiRldmFsKGUuZGlyZWN0aW9uTGlua3MpOmIuZGlyZWN0aW9uTGlua3MsaS5pbml0KGosYiksZS5tYXhTaXplJiZjLiRwYXJlbnQuJHdhdGNoKGEoZS5tYXhTaXplKSxmdW5jdGlvbihhKXtrPXBhcnNlSW50KGEsMTApLGkucmVuZGVyKCl9KTt2YXIgbT1pLnJlbmRlcjtpLnJlbmRlcj1mdW5jdGlvbigpe20oKSxjLnBhZ2U+MCYmYy5wYWdlPD1jLnRvdGFsUGFnZXMmJihjLnBhZ2VzPWgoYy5wYWdlLGMudG90YWxQYWdlcykpfX19fX1dKS5jb25zdGFudCgicGFnZXJDb25maWciLHtpdGVtc1BlclBhZ2U6MTAscHJldmlvdXNUZXh0OiLCqyBQcmV2aW91cyIsbmV4dFRleHQ6Ik5leHQgwrsiLGFsaWduOiEwfSkuZGlyZWN0aXZlKCJwYWdlciIsWyJwYWdlckNvbmZpZyIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e3RvdGFsSXRlbXM6Ij0iLHByZXZpb3VzVGV4dDoiQCIsbmV4dFRleHQ6IkAifSxyZXF1aXJlOlsicGFnZXIiLCI/bmdNb2RlbCJdLGNvbnRyb2xsZXI6IlBhZ2luYXRpb25Db250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZVswXSxnPWVbMV07ZyYmKGIuYWxpZ249YW5ndWxhci5pc0RlZmluZWQoZC5hbGlnbik/Yi4kcGFyZW50LiRldmFsKGQuYWxpZ24pOmEuYWxpZ24sZi5pbml0KGcsYSkpfX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50b29sdGlwIixbInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCJdKS5wcm92aWRlcigiJHRvb2x0aXAiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXt2YXIgYj0vW0EtWl0vZyxjPSItIjsKK3JldHVybiBhLnJlcGxhY2UoYixmdW5jdGlvbihhLGIpe3JldHVybihiP2M6IiIpK2EudG9Mb3dlckNhc2UoKX0pfXZhciBiPXtwbGFjZW1lbnQ6InRvcCIsYW5pbWF0aW9uOiEwLHBvcHVwRGVsYXk6MH0sYz17bW91c2VlbnRlcjoibW91c2VsZWF2ZSIsY2xpY2s6ImNsaWNrIixmb2N1czoiYmx1ciJ9LGQ9e307dGhpcy5vcHRpb25zPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuZXh0ZW5kKGQsYSl9LHRoaXMuc2V0VHJpZ2dlcnM9ZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoYyxhKX0sdGhpcy4kZ2V0PVsiJHdpbmRvdyIsIiRjb21waWxlIiwiJHRpbWVvdXQiLCIkcGFyc2UiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCIkaW50ZXJwb2xhdGUiLGZ1bmN0aW9uKGUsZixnLGgsaSxqLGspe3JldHVybiBmdW5jdGlvbihlLGwsbSl7ZnVuY3Rpb24gbihhKXt2YXIgYj1hfHxvLnRyaWdnZXJ8fG0sZD1jW2JdfHxiO3JldHVybntzaG93OmIsaGlkZTpkfX12YXIgbz1hbmd1bGFyLmV4dGVuZCh7fSxiLGQpLHA9YShlKSxxPWsuc3RhcnRTeW1ib2woKSxyPWsuZW5kU3ltYm9sKCkscz0iPGRpdiAiK3ArJy1wb3B1cCB0aXRsZT0iJytxKyJ0dF90aXRsZSIrcisnIiBjb250ZW50PSInK3ErInR0X2NvbnRlbnQiK3IrJyIgcGxhY2VtZW50PSInK3ErInR0X3BsYWNlbWVudCIrcisnIiBhbmltYXRpb249InR0X2FuaW1hdGlvbiIgaXMtb3Blbj0idHRfaXNPcGVuIj48L2Rpdj4nO3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOiEwLGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgYT1mKHMpO3JldHVybiBmdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZigpe2IudHRfaXNPcGVuP20oKTprKCl9ZnVuY3Rpb24gaygpeygheXx8Yi4kZXZhbChkW2wrIkVuYWJsZSJdKSkmJihiLnR0X3BvcHVwRGVsYXk/dnx8KHY9ZyhwLGIudHRfcG9wdXBEZWxheSwhMSksdi50aGVuKGZ1bmN0aW9uKGEpe2EoKX0pKTpwKCkoKSl9ZnVuY3Rpb24gbSgpe2IuJGFwcGx5KGZ1bmN0aW9uKCl7cSgpfSl9ZnVuY3Rpb24gcCgpe3JldHVybiB2PW51bGwsdSYmKGcuY2FuY2VsKHUpLHU9bnVsbCksYi50dF9jb250ZW50PyhyKCksdC5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KSx3P2kuZmluZCgiYm9keSIpLmFwcGVuZCh0KTpjLmFmdGVyKHQpLHooKSxiLnR0X2lzT3Blbj0hMCxiLiRkaWdlc3QoKSx6KTphbmd1bGFyLm5vb3B9ZnVuY3Rpb24gcSgpe2IudHRfaXNPcGVuPSExLGcuY2FuY2VsKHYpLHY9bnVsbCxiLnR0X2FuaW1hdGlvbj91fHwodT1nKHMsNTAwKSk6cygpfWZ1bmN0aW9uIHIoKXt0JiZzKCksdD1hKGIsZnVuY3Rpb24oKXt9KSxiLiRkaWdlc3QoKX1mdW5jdGlvbiBzKCl7dT1udWxsLHQmJih0LnJlbW92ZSgpLHQ9bnVsbCl9dmFyIHQsdSx2LHc9YW5ndWxhci5pc0RlZmluZWQoby5hcHBlbmRUb0JvZHkpP28uYXBwZW5kVG9Cb2R5OiExLHg9bih2b2lkIDApLHk9YW5ndWxhci5pc0RlZmluZWQoZFtsKyJFbmFibGUiXSksej1mdW5jdGlvbigpe3ZhciBhPWoucG9zaXRpb25FbGVtZW50cyhjLHQsYi50dF9wbGFjZW1lbnQsdyk7YS50b3ArPSJweCIsYS5sZWZ0Kz0icHgiLHQuY3NzKGEpfTtiLnR0X2lzT3Blbj0hMSxkLiRvYnNlcnZlKGUsZnVuY3Rpb24oYSl7Yi50dF9jb250ZW50PWEsIWEmJmIudHRfaXNPcGVuJiZxKCl9KSxkLiRvYnNlcnZlKGwrIlRpdGxlIixmdW5jdGlvbihhKXtiLnR0X3RpdGxlPWF9KSxkLiRvYnNlcnZlKGwrIlBsYWNlbWVudCIsZnVuY3Rpb24oYSl7Yi50dF9wbGFjZW1lbnQ9YW5ndWxhci5pc0RlZmluZWQoYSk/YTpvLnBsYWNlbWVudH0pLGQuJG9ic2VydmUobCsiUG9wdXBEZWxheSIsZnVuY3Rpb24oYSl7dmFyIGM9cGFyc2VJbnQoYSwxMCk7Yi50dF9wb3B1cERlbGF5PWlzTmFOKGMpP28ucG9wdXBEZWxheTpjfSk7dmFyIEE9ZnVuY3Rpb24oKXtjLnVuYmluZCh4LnNob3csayksYy51bmJpbmQoeC5oaWRlLG0pfTtkLiRvYnNlcnZlKGwrIlRyaWdnZXIiLGZ1bmN0aW9uKGEpe0EoKSx4PW4oYSkseC5zaG93PT09eC5oaWRlP2MuYmluZCh4LnNob3csZik6KGMuYmluZCh4LnNob3csayksYy5iaW5kKHguaGlkZSxtKSl9KTt2YXIgQj1iLiRldmFsKGRbbCsiQW5pbWF0aW9uIl0pO2IudHRfYW5pbWF0aW9uPWFuZ3VsYXIuaXNEZWZpbmVkKEIpPyEhQjpvLmFuaW1hdGlvbixkLiRvYnNlcnZlKGwrIkFwcGVuZFRvQm9keSIsZnVuY3Rpb24oYSl7dz1hbmd1bGFyLmlzRGVmaW5lZChhKT9oKGEpKGIpOnd9KSx3JiZiLiRvbigiJGxvY2F0aW9uQ2hhbmdlU3VjY2VzcyIsZnVuY3Rpb24oKXtiLnR0X2lzT3BlbiYmcSgpfSksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2cuY2FuY2VsKHUpLGcuY2FuY2VsKHYpLEEoKSxzKCl9KX19fX19XX0pLmRpcmVjdGl2ZSgidG9vbHRpcFBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e2NvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwifX0pLmRpcmVjdGl2ZSgidG9vbHRpcCIsWyIkdG9vbHRpcCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEoInRvb2x0aXAiLCJ0b29sdGlwIiwibW91c2VlbnRlciIpfV0pLmRpcmVjdGl2ZSgidG9vbHRpcEh0bWxVbnNhZmVQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHNjb3BlOntjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIn19KS5kaXJlY3RpdmUoInRvb2x0aXBIdG1sVW5zYWZlIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgidG9vbHRpcEh0bWxVbnNhZmUiLCJ0b29sdGlwIiwibW91c2VlbnRlciIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucG9wb3ZlciIsWyJ1aS5ib290c3RyYXAudG9vbHRpcCJdKS5kaXJlY3RpdmUoInBvcG92ZXJQb3B1cCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHNjb3BlOnt0aXRsZToiQCIsY29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCJ9fSkuZGlyZWN0aXZlKCJwb3BvdmVyIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgicG9wb3ZlciIsInBvcG92ZXIiLCJjbGljayIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucHJvZ3Jlc3NiYXIiLFtdKS5jb25zdGFudCgicHJvZ3Jlc3NDb25maWciLHthbmltYXRlOiEwLG1heDoxMDB9KS5jb250cm9sbGVyKCJQcm9ncmVzc0NvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwicHJvZ3Jlc3NDb25maWciLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9YW5ndWxhci5pc0RlZmluZWQoYi5hbmltYXRlKT9hLiRwYXJlbnQuJGV2YWwoYi5hbmltYXRlKTpjLmFuaW1hdGU7dGhpcy5iYXJzPVtdLGEubWF4PWFuZ3VsYXIuaXNEZWZpbmVkKGIubWF4KT9hLiRwYXJlbnQuJGV2YWwoYi5tYXgpOmMubWF4LHRoaXMuYWRkQmFyPWZ1bmN0aW9uKGIsYyl7ZXx8Yy5jc3Moe3RyYW5zaXRpb246Im5vbmUifSksdGhpcy5iYXJzLnB1c2goYiksYi4kd2F0Y2goInZhbHVlIixmdW5jdGlvbihjKXtiLnBlcmNlbnQ9KygxMDAqYy9hLm1heCkudG9GaXhlZCgyKX0pLGIuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtjPW51bGwsZC5yZW1vdmVCYXIoYil9KX0sdGhpcy5yZW1vdmVCYXI9ZnVuY3Rpb24oYSl7dGhpcy5iYXJzLnNwbGljZSh0aGlzLmJhcnMuaW5kZXhPZihhKSwxKX19XSkuZGlyZWN0aXZlKCJwcm9ncmVzcyIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsY29udHJvbGxlcjoiUHJvZ3Jlc3NDb250cm9sbGVyIixyZXF1aXJlOiJwcm9ncmVzcyIsc2NvcGU6e30sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwifX0pLmRpcmVjdGl2ZSgiYmFyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxyZXF1aXJlOiJecHJvZ3Jlc3MiLHNjb3BlOnt2YWx1ZToiPSIsdHlwZToiQCJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEJhcihhLGIpfX19KS5kaXJlY3RpdmUoInByb2dyZXNzYmFyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxjb250cm9sbGVyOiJQcm9ncmVzc0NvbnRyb2xsZXIiLHNjb3BlOnt2YWx1ZToiPSIsdHlwZToiQCJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkQmFyKGEsYW5ndWxhci5lbGVtZW50KGIuY2hpbGRyZW4oKVswXSkpfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnJhdGluZyIsW10pLmNvbnN0YW50KCJyYXRpbmdDb25maWciLHttYXg6NSxzdGF0ZU9uOm51bGwsc3RhdGVPZmY6bnVsbH0pLmNvbnRyb2xsZXIoIlJhdGluZ0NvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwicmF0aW5nQ29uZmlnIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfTt0aGlzLmluaXQ9ZnVuY3Rpb24oZSl7ZD1lLGQuJHJlbmRlcj10aGlzLnJlbmRlcix0aGlzLnN0YXRlT249YW5ndWxhci5pc0RlZmluZWQoYi5zdGF0ZU9uKT9hLiRwYXJlbnQuJGV2YWwoYi5zdGF0ZU9uKTpjLnN0YXRlT24sdGhpcy5zdGF0ZU9mZj1hbmd1bGFyLmlzRGVmaW5lZChiLnN0YXRlT2ZmKT9hLiRwYXJlbnQuJGV2YWwoYi5zdGF0ZU9mZik6Yy5zdGF0ZU9mZjt2YXIgZj1hbmd1bGFyLmlzRGVmaW5lZChiLnJhdGluZ1N0YXRlcyk/YS4kcGFyZW50LiRldmFsKGIucmF0aW5nU3RhdGVzKTpuZXcgQXJyYXkoYW5ndWxhci5pc0RlZmluZWQoYi5tYXgpP2EuJHBhcmVudC4kZXZhbChiLm1heCk6Yy5tYXgpO2EucmFuZ2U9dGhpcy5idWlsZFRlbXBsYXRlT2JqZWN0cyhmKX0sdGhpcy5idWlsZFRlbXBsYXRlT2JqZWN0cz1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2M+YjtiKyspYVtiXT1hbmd1bGFyLmV4dGVuZCh7aW5kZXg6Yn0se3N0YXRlT246dGhpcy5zdGF0ZU9uLHN0YXRlT2ZmOnRoaXMuc3RhdGVPZmZ9LGFbYl0pO3JldHVybiBhfSxhLnJhdGU9ZnVuY3Rpb24oYil7IWEucmVhZG9ubHkmJmI+PTAmJmI8PWEucmFuZ2UubGVuZ3RoJiYoZC4kc2V0Vmlld1ZhbHVlKGIpLGQuJHJlbmRlcigpKX0sYS5lbnRlcj1mdW5jdGlvbihiKXthLnJlYWRvbmx5fHwoYS52YWx1ZT1iKSxhLm9uSG92ZXIoe3ZhbHVlOmJ9KX0sYS5yZXNldD1mdW5jdGlvbigpe2EudmFsdWU9ZC4kdmlld1ZhbHVlLGEub25MZWF2ZSgpfSxhLm9uS2V5ZG93bj1mdW5jdGlvbihiKXsvKDM3fDM4fDM5fDQwKS8udGVzdChiLndoaWNoKSYmKGIucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLGEucmF0ZShhLnZhbHVlKygzOD09PWIud2hpY2h8fDM5PT09Yi53aGljaD8xOi0xKSkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe2EudmFsdWU9ZC4kdmlld1ZhbHVlfX1dKS5kaXJlY3RpdmUoInJhdGluZyIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXF1aXJlOlsicmF0aW5nIiwibmdNb2RlbCJdLHNjb3BlOntyZWFkb25seToiPT8iLG9uSG92ZXI6IiYiLG9uTGVhdmU6IiYifSxjb250cm9sbGVyOiJSYXRpbmdDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYpfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRhYnMiLFtdKS5jb250cm9sbGVyKCJUYWJzZXRDb250cm9sbGVyIixbIiRzY29wZSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIudGFicz1hLnRhYnM9W107Yi5zZWxlY3Q9ZnVuY3Rpb24oYSl7YW5ndWxhci5mb3JFYWNoKGMsZnVuY3Rpb24oYil7Yi5hY3RpdmUmJmIhPT1hJiYoYi5hY3RpdmU9ITEsYi5vbkRlc2VsZWN0KCkpfSksYS5hY3RpdmU9ITAsYS5vblNlbGVjdCgpfSxiLmFkZFRhYj1mdW5jdGlvbihhKXtjLnB1c2goYSksMT09PWMubGVuZ3RoP2EuYWN0aXZlPSEwOmEuYWN0aXZlJiZiLnNlbGVjdChhKX0sYi5yZW1vdmVUYWI9ZnVuY3Rpb24oYSl7dmFyIGQ9Yy5pbmRleE9mKGEpO2lmKGEuYWN0aXZlJiZjLmxlbmd0aD4xKXt2YXIgZT1kPT1jLmxlbmd0aC0xP2QtMTpkKzE7Yi5zZWxlY3QoY1tlXSl9Yy5zcGxpY2UoZCwxKX19XSkuZGlyZWN0aXZlKCJ0YWJzZXQiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHNjb3BlOnt0eXBlOiJAIn0sY29udHJvbGxlcjoiVGFic2V0Q29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3RhYnMvdGFic2V0Lmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMpe2EudmVydGljYWw9YW5ndWxhci5pc0RlZmluZWQoYy52ZXJ0aWNhbCk/YS4kcGFyZW50LiRldmFsKGMudmVydGljYWwpOiExLGEuanVzdGlmaWVkPWFuZ3VsYXIuaXNEZWZpbmVkKGMuanVzdGlmaWVkKT9hLiRwYXJlbnQuJGV2YWwoYy5qdXN0aWZpZWQpOiExfX19KS5kaXJlY3RpdmUoInRhYiIsWyIkcGFyc2UiLGZ1bmN0aW9uKGEpe3JldHVybntyZXF1aXJlOiJedGFic2V0IixyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLHRyYW5zY2x1ZGU6ITAsc2NvcGU6e2FjdGl2ZToiPT8iLGhlYWRpbmc6IkAiLG9uU2VsZWN0OiImc2VsZWN0IixvbkRlc2VsZWN0OiImZGVzZWxlY3QifSxjb250cm9sbGVyOmZ1bmN0aW9uKCl7fSxjb21waWxlOmZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oYixjLGUsZil7Yi4kd2F0Y2goImFjdGl2ZSIsZnVuY3Rpb24oYSl7YSYmZi5zZWxlY3QoYil9KSxiLmRpc2FibGVkPSExLGUuZGlzYWJsZWQmJmIuJHBhcmVudC4kd2F0Y2goYShlLmRpc2FibGVkKSxmdW5jdGlvbihhKXtiLmRpc2FibGVkPSEhYX0pLGIuc2VsZWN0PWZ1bmN0aW9uKCl7Yi5kaXNhYmxlZHx8KGIuYWN0aXZlPSEwKX0sZi5hZGRUYWIoYiksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2YucmVtb3ZlVGFiKGIpfSksYi4kdHJhbnNjbHVkZUZuPWR9fX19XSkuZGlyZWN0aXZlKCJ0YWJIZWFkaW5nVHJhbnNjbHVkZSIsW2Z1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJBIixyZXF1aXJlOiJedGFiIixsaW5rOmZ1bmN0aW9uKGEsYil7YS4kd2F0Y2goImhlYWRpbmdFbGVtZW50IixmdW5jdGlvbihhKXthJiYoYi5odG1sKCIiKSxiLmFwcGVuZChhKSl9KX19fV0pLmRpcmVjdGl2ZSgidGFiQ29udGVudFRyYW5zY2x1ZGUiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYS50YWdOYW1lJiYoYS5oYXNBdHRyaWJ1dGUoInRhYi1oZWFkaW5nIil8fGEuaGFzQXR0cmlidXRlKCJkYXRhLXRhYi1oZWFkaW5nIil8fCJ0YWItaGVhZGluZyI9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKXx8ImRhdGEtdGFiLWhlYWRpbmciPT09YS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpfXJldHVybntyZXN0cmljdDoiQSIscmVxdWlyZToiXnRhYnNldCIsbGluazpmdW5jdGlvbihiLGMsZCl7dmFyIGU9Yi4kZXZhbChkLnRhYkNvbnRlbnRUcmFuc2NsdWRlKTtlLiR0cmFuc2NsdWRlRm4oZS4kcGFyZW50LGZ1bmN0aW9uKGIpe2FuZ3VsYXIuZm9yRWFjaChiLGZ1bmN0aW9uKGIpe2EoYik/ZS5oZWFkaW5nRWxlbWVudD1iOmMuYXBwZW5kKGIpfSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50aW1lcGlja2VyIixbXSkuY29uc3RhbnQoInRpbWVwaWNrZXJDb25maWciLHtob3VyU3RlcDoxLG1pbnV0ZVN0ZXA6MSxzaG93TWVyaWRpYW46ITAsbWVyaWRpYW5zOm51bGwscmVhZG9ubHlJbnB1dDohMSxtb3VzZXdoZWVsOiEwfSkuY29udHJvbGxlcigiVGltZXBpY2tlckNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiJGxvZyIsIiRsb2NhbGUiLCJ0aW1lcGlja2VyQ29uZmlnIixmdW5jdGlvbihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZygpe3ZhciBiPXBhcnNlSW50KGEuaG91cnMsMTApLGM9YS5zaG93TWVyaWRpYW4/Yj4wJiYxMz5iOmI+PTAmJjI0PmI7cmV0dXJuIGM/KGEuc2hvd01lcmlkaWFuJiYoMTI9PT1iJiYoYj0wKSxhLm1lcmlkaWFuPT09cFsxXSYmKGIrPTEyKSksYik6dm9pZCAwfWZ1bmN0aW9uIGgoKXt2YXIgYj1wYXJzZUludChhLm1pbnV0ZXMsMTApO3JldHVybiBiPj0wJiY2MD5iP2I6dm9pZCAwfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGFuZ3VsYXIuaXNEZWZpbmVkKGEpJiZhLnRvU3RyaW5nKCkubGVuZ3RoPDI/IjAiK2E6YX1mdW5jdGlvbiBqKGEpe2soKSxvLiRzZXRWaWV3VmFsdWUobmV3IERhdGUobikpLGwoYSl9ZnVuY3Rpb24gaygpe28uJHNldFZhbGlkaXR5KCJ0aW1lIiwhMCksYS5pbnZhbGlkSG91cnM9ITEsYS5pbnZhbGlkTWludXRlcz0hMX1mdW5jdGlvbiBsKGIpe3ZhciBjPW4uZ2V0SG91cnMoKSxkPW4uZ2V0TWludXRlcygpO2Euc2hvd01lcmlkaWFuJiYoYz0wPT09Y3x8MTI9PT1jPzEyOmMlMTIpLGEuaG91cnM9ImgiPT09Yj9jOmkoYyksYS5taW51dGVzPSJtIj09PWI/ZDppKGQpLGEubWVyaWRpYW49bi5nZXRIb3VycygpPDEyP3BbMF06cFsxXX1mdW5jdGlvbiBtKGEpe3ZhciBiPW5ldyBEYXRlKG4uZ2V0VGltZSgpKzZlNCphKTtuLnNldEhvdXJzKGIuZ2V0SG91cnMoKSxiLmdldE1pbnV0ZXMoKSksaigpfXZhciBuPW5ldyBEYXRlLG89eyRzZXRWaWV3VmFsdWU6YW5ndWxhci5ub29wfSxwPWFuZ3VsYXIuaXNEZWZpbmVkKGIubWVyaWRpYW5zKT9hLiRwYXJlbnQuJGV2YWwoYi5tZXJpZGlhbnMpOmYubWVyaWRpYW5zfHxlLkRBVEVUSU1FX0ZPUk1BVFMuQU1QTVM7dGhpcy5pbml0PWZ1bmN0aW9uKGMsZCl7bz1jLG8uJHJlbmRlcj10aGlzLnJlbmRlcjt2YXIgZT1kLmVxKDApLGc9ZC5lcSgxKSxoPWFuZ3VsYXIuaXNEZWZpbmVkKGIubW91c2V3aGVlbCk/YS4kcGFyZW50LiRldmFsKGIubW91c2V3aGVlbCk6Zi5tb3VzZXdoZWVsO2gmJnRoaXMuc2V0dXBNb3VzZXdoZWVsRXZlbnRzKGUsZyksYS5yZWFkb25seUlucHV0PWFuZ3VsYXIuaXNEZWZpbmVkKGIucmVhZG9ubHlJbnB1dCk/YS4kcGFyZW50LiRldmFsKGIucmVhZG9ubHlJbnB1dCk6Zi5yZWFkb25seUlucHV0LHRoaXMuc2V0dXBJbnB1dEV2ZW50cyhlLGcpfTt2YXIgcT1mLmhvdXJTdGVwO2IuaG91clN0ZXAmJmEuJHBhcmVudC4kd2F0Y2goYyhiLmhvdXJTdGVwKSxmdW5jdGlvbihhKXtxPXBhcnNlSW50KGEsMTApfSk7dmFyIHI9Zi5taW51dGVTdGVwO2IubWludXRlU3RlcCYmYS4kcGFyZW50LiR3YXRjaChjKGIubWludXRlU3RlcCksZnVuY3Rpb24oYSl7cj1wYXJzZUludChhLDEwKX0pLGEuc2hvd01lcmlkaWFuPWYuc2hvd01lcmlkaWFuLGIuc2hvd01lcmlkaWFuJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5zaG93TWVyaWRpYW4pLGZ1bmN0aW9uKGIpe2lmKGEuc2hvd01lcmlkaWFuPSEhYixvLiRlcnJvci50aW1lKXt2YXIgYz1nKCksZD1oKCk7YW5ndWxhci5pc0RlZmluZWQoYykmJmFuZ3VsYXIuaXNEZWZpbmVkKGQpJiYobi5zZXRIb3VycyhjKSxqKCkpfWVsc2UgbCgpfSksdGhpcy5zZXR1cE1vdXNld2hlZWxFdmVudHM9ZnVuY3Rpb24oYixjKXt2YXIgZD1mdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQmJihhPWEub3JpZ2luYWxFdmVudCk7dmFyIGI9YS53aGVlbERlbHRhP2Eud2hlZWxEZWx0YTotYS5kZWx0YVk7cmV0dXJuIGEuZGV0YWlsfHxiPjB9O2IuYmluZCgibW91c2V3aGVlbCB3aGVlbCIsZnVuY3Rpb24oYil7YS4kYXBwbHkoZChiKT9hLmluY3JlbWVudEhvdXJzKCk6YS5kZWNyZW1lbnRIb3VycygpKSxiLnByZXZlbnREZWZhdWx0KCl9KSxjLmJpbmQoIm1vdXNld2hlZWwgd2hlZWwiLGZ1bmN0aW9uKGIpe2EuJGFwcGx5KGQoYik/YS5pbmNyZW1lbnRNaW51dGVzKCk6YS5kZWNyZW1lbnRNaW51dGVzKCkpLGIucHJldmVudERlZmF1bHQoKX0pfSx0aGlzLnNldHVwSW5wdXRFdmVudHM9ZnVuY3Rpb24oYixjKXtpZihhLnJlYWRvbmx5SW5wdXQpcmV0dXJuIGEudXBkYXRlSG91cnM9YW5ndWxhci5ub29wLHZvaWQoYS51cGRhdGVNaW51dGVzPWFuZ3VsYXIubm9vcCk7dmFyIGQ9ZnVuY3Rpb24oYixjKXtvLiRzZXRWaWV3VmFsdWUobnVsbCksby4kc2V0VmFsaWRpdHkoInRpbWUiLCExKSxhbmd1bGFyLmlzRGVmaW5lZChiKSYmKGEuaW52YWxpZEhvdXJzPWIpLGFuZ3VsYXIuaXNEZWZpbmVkKGMpJiYoYS5pbnZhbGlkTWludXRlcz1jKX07YS51cGRhdGVIb3Vycz1mdW5jdGlvbigpe3ZhciBhPWcoKTthbmd1bGFyLmlzRGVmaW5lZChhKT8obi5zZXRIb3VycyhhKSxqKCJoIikpOmQoITApfSxiLmJpbmQoImJsdXIiLGZ1bmN0aW9uKCl7IWEuaW52YWxpZEhvdXJzJiZhLmhvdXJzPDEwJiZhLiRhcHBseShmdW5jdGlvbigpe2EuaG91cnM9aShhLmhvdXJzKX0pfSksYS51cGRhdGVNaW51dGVzPWZ1bmN0aW9uKCl7dmFyIGE9aCgpO2FuZ3VsYXIuaXNEZWZpbmVkKGEpPyhuLnNldE1pbnV0ZXMoYSksaigibSIpKTpkKHZvaWQgMCwhMCl9LGMuYmluZCgiYmx1ciIsZnVuY3Rpb24oKXshYS5pbnZhbGlkTWludXRlcyYmYS5taW51dGVzPDEwJiZhLiRhcHBseShmdW5jdGlvbigpe2EubWludXRlcz1pKGEubWludXRlcyl9KX0pfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPW8uJG1vZGVsVmFsdWU/bmV3IERhdGUoby4kbW9kZWxWYWx1ZSk6bnVsbDtpc05hTihhKT8oby4kc2V0VmFsaWRpdHkoInRpbWUiLCExKSxkLmVycm9yKCdUaW1lcGlja2VyIGRpcmVjdGl2ZTogIm5nLW1vZGVsIiB2YWx1ZSBtdXN0IGJlIGEgRGF0ZSBvYmplY3QsIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAwMS4wMS4xOTcwIG9yIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBSRkMyODIyIG9yIElTTyA4NjAxIGRhdGUuJykpOihhJiYobj1hKSxrKCksbCgpKX0sYS5pbmNyZW1lbnRIb3Vycz1mdW5jdGlvbigpe20oNjAqcSl9LGEuZGVjcmVtZW50SG91cnM9ZnVuY3Rpb24oKXttKDYwKi1xKX0sYS5pbmNyZW1lbnRNaW51dGVzPWZ1bmN0aW9uKCl7bShyKX0sYS5kZWNyZW1lbnRNaW51dGVzPWZ1bmN0aW9uKCl7bSgtcil9LGEudG9nZ2xlTWVyaWRpYW49ZnVuY3Rpb24oKXttKDcyMCoobi5nZXRIb3VycygpPDEyPzE6LTEpKX19XSkuZGlyZWN0aXZlKCJ0aW1lcGlja2VyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6WyJ0aW1lcGlja2VyIiwiP15uZ01vZGVsIl0sY29udHJvbGxlcjoiVGltZXBpY2tlckNvbnRyb2xsZXIiLHJlcGxhY2U6ITAsc2NvcGU6e30sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmLGIuZmluZCgiaW5wdXQiKSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHlwZWFoZWFkIixbInVpLmJvb3RzdHJhcC5wb3NpdGlvbiIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCJdKS5mYWN0b3J5KCJ0eXBlYWhlYWRQYXJzZXIiLFsiJHBhcnNlIixmdW5jdGlvbihhKXt2YXIgYj0vXlxzKiguKj8pKD86XHMrYXNccysoLio/KSk/XHMrZm9yXHMrKD86KFtcJFx3XVtcJFx3XGRdKikpXHMraW5ccysoLiopJC87cmV0dXJue3BhcnNlOmZ1bmN0aW9uKGMpe3ZhciBkPWMubWF0Y2goYik7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0eXBlYWhlYWQgc3BlY2lmaWNhdGlvbiBpbiBmb3JtIG9mICJfbW9kZWxWYWx1ZV8gKGFzIF9sYWJlbF8pPyBmb3IgX2l0ZW1fIGluIF9jb2xsZWN0aW9uXyIgYnV0IGdvdCAiJytjKyciLicpO3JldHVybntpdGVtTmFtZTpkWzNdLHNvdXJjZTphKGRbNF0pLHZpZXdNYXBwZXI6YShkWzJdfHxkWzFdKSxtb2RlbE1hcHBlcjphKGRbMV0pfX19fV0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkIixbIiRjb21waWxlIiwiJHBhcnNlIiwiJHEiLCIkdGltZW91dCIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsInR5cGVhaGVhZFBhcnNlciIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9WzksMTMsMjcsMzgsNDBdO3JldHVybntyZXF1aXJlOiJuZ01vZGVsIixsaW5rOmZ1bmN0aW9uKGksaixrLGwpe3ZhciBtLG49aS4kZXZhbChrLnR5cGVhaGVhZE1pbkxlbmd0aCl8fDEsbz1pLiRldmFsKGsudHlwZWFoZWFkV2FpdE1zKXx8MCxwPWkuJGV2YWwoay50eXBlYWhlYWRFZGl0YWJsZSkhPT0hMSxxPWIoay50eXBlYWhlYWRMb2FkaW5nKS5hc3NpZ258fGFuZ3VsYXIubm9vcCxyPWIoay50eXBlYWhlYWRPblNlbGVjdCkscz1rLnR5cGVhaGVhZElucHV0Rm9ybWF0dGVyP2Ioay50eXBlYWhlYWRJbnB1dEZvcm1hdHRlcik6dm9pZCAwLHQ9ay50eXBlYWhlYWRBcHBlbmRUb0JvZHk/aS4kZXZhbChrLnR5cGVhaGVhZEFwcGVuZFRvQm9keSk6ITEsdT1iKGsubmdNb2RlbCkuYXNzaWduLHY9Zy5wYXJzZShrLnR5cGVhaGVhZCksdz1pLiRuZXcoKTtpLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7dy4kZGVzdHJveSgpfSk7dmFyIHg9InR5cGVhaGVhZC0iK3cuJGlkKyItIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKTtqLmF0dHIoeyJhcmlhLWF1dG9jb21wbGV0ZSI6Imxpc3QiLCJhcmlhLWV4cGFuZGVkIjohMSwiYXJpYS1vd25zIjp4fSk7dmFyIHk9YW5ndWxhci5lbGVtZW50KCI8ZGl2IHR5cGVhaGVhZC1wb3B1cD48L2Rpdj4iKTt5LmF0dHIoe2lkOngsbWF0Y2hlczoibWF0Y2hlcyIsYWN0aXZlOiJhY3RpdmVJZHgiLHNlbGVjdDoic2VsZWN0KGFjdGl2ZUlkeCkiLHF1ZXJ5OiJxdWVyeSIscG9zaXRpb246InBvc2l0aW9uIn0pLGFuZ3VsYXIuaXNEZWZpbmVkKGsudHlwZWFoZWFkVGVtcGxhdGVVcmwpJiZ5LmF0dHIoInRlbXBsYXRlLXVybCIsay50eXBlYWhlYWRUZW1wbGF0ZVVybCk7dmFyIHo9ZnVuY3Rpb24oKXt3Lm1hdGNoZXM9W10sdy5hY3RpdmVJZHg9LTEsai5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSl9LEE9ZnVuY3Rpb24oYSl7cmV0dXJuIHgrIi1vcHRpb24tIithfTt3LiR3YXRjaCgiYWN0aXZlSWR4IixmdW5jdGlvbihhKXswPmE/ai5yZW1vdmVBdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKTpqLmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsQShhKSl9KTt2YXIgQj1mdW5jdGlvbihhKXt2YXIgYj17JHZpZXdWYWx1ZTphfTtxKGksITApLGMud2hlbih2LnNvdXJjZShpLGIpKS50aGVuKGZ1bmN0aW9uKGMpe3ZhciBkPWE9PT1sLiR2aWV3VmFsdWU7aWYoZCYmbSlpZihjLmxlbmd0aD4wKXt3LmFjdGl2ZUlkeD0wLHcubWF0Y2hlcy5sZW5ndGg9MDtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyliW3YuaXRlbU5hbWVdPWNbZV0sdy5tYXRjaGVzLnB1c2goe2lkOkEoZSksbGFiZWw6di52aWV3TWFwcGVyKHcsYiksbW9kZWw6Y1tlXX0pO3cucXVlcnk9YSx3LnBvc2l0aW9uPXQ/Zi5vZmZzZXQoaik6Zi5wb3NpdGlvbihqKSx3LnBvc2l0aW9uLnRvcD13LnBvc2l0aW9uLnRvcCtqLnByb3AoIm9mZnNldEhlaWdodCIpLGouYXR0cigiYXJpYS1leHBhbmRlZCIsITApfWVsc2UgeigpO2QmJnEoaSwhMSl9LGZ1bmN0aW9uKCl7eigpLHEoaSwhMSl9KX07eigpLHcucXVlcnk9dm9pZCAwO3ZhciBDO2wuJHBhcnNlcnMudW5zaGlmdChmdW5jdGlvbihhKXtyZXR1cm4gbT0hMCxhJiZhLmxlbmd0aD49bj9vPjA/KEMmJmQuY2FuY2VsKEMpLEM9ZChmdW5jdGlvbigpe0IoYSl9LG8pKTpCKGEpOihxKGksITEpLHooKSkscD9hOmE/dm9pZCBsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCExKToobC4kc2V0VmFsaWRpdHkoImVkaXRhYmxlIiwhMCksYSl9KSxsLiRmb3JtYXR0ZXJzLnB1c2goZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXt9O3JldHVybiBzPyhkLiRtb2RlbD1hLHMoaSxkKSk6KGRbdi5pdGVtTmFtZV09YSxiPXYudmlld01hcHBlcihpLGQpLGRbdi5pdGVtTmFtZV09dm9pZCAwLGM9di52aWV3TWFwcGVyKGksZCksYiE9PWM/YjphKX0pLHcuc2VsZWN0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT17fTtlW3YuaXRlbU5hbWVdPWM9dy5tYXRjaGVzW2FdLm1vZGVsLGI9di5tb2RlbE1hcHBlcihpLGUpLHUoaSxiKSxsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCEwKSxyKGkseyRpdGVtOmMsJG1vZGVsOmIsJGxhYmVsOnYudmlld01hcHBlcihpLGUpfSkseigpLGQoZnVuY3Rpb24oKXtqWzBdLmZvY3VzKCl9LDAsITEpfSxqLmJpbmQoImtleWRvd24iLGZ1bmN0aW9uKGEpezAhPT13Lm1hdGNoZXMubGVuZ3RoJiYtMSE9PWguaW5kZXhPZihhLndoaWNoKSYmKGEucHJldmVudERlZmF1bHQoKSw0MD09PWEud2hpY2g/KHcuYWN0aXZlSWR4PSh3LmFjdGl2ZUlkeCsxKSV3Lm1hdGNoZXMubGVuZ3RoLHcuJGRpZ2VzdCgpKTozOD09PWEud2hpY2g/KHcuYWN0aXZlSWR4PSh3LmFjdGl2ZUlkeD93LmFjdGl2ZUlkeDp3Lm1hdGNoZXMubGVuZ3RoKS0xLHcuJGRpZ2VzdCgpKToxMz09PWEud2hpY2h8fDk9PT1hLndoaWNoP3cuJGFwcGx5KGZ1bmN0aW9uKCl7dy5zZWxlY3Qody5hY3RpdmVJZHgpfSk6Mjc9PT1hLndoaWNoJiYoYS5zdG9wUHJvcGFnYXRpb24oKSx6KCksdy4kZGlnZXN0KCkpKX0pLGouYmluZCgiYmx1ciIsZnVuY3Rpb24oKXttPSExfSk7dmFyIEQ9ZnVuY3Rpb24oYSl7alswXSE9PWEudGFyZ2V0JiYoeigpLHcuJGRpZ2VzdCgpKX07ZS5iaW5kKCJjbGljayIsRCksaS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2UudW5iaW5kKCJjbGljayIsRCl9KTt2YXIgRT1hKHkpKHcpO3Q/ZS5maW5kKCJib2R5IikuYXBwZW5kKEUpOmouYWZ0ZXIoRSl9fX1dKS5kaXJlY3RpdmUoInR5cGVhaGVhZFBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOnttYXRjaGVzOiI9IixxdWVyeToiPSIsYWN0aXZlOiI9Iixwb3NpdGlvbjoiPSIsc2VsZWN0OiImIn0scmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjKXthLnRlbXBsYXRlVXJsPWMudGVtcGxhdGVVcmwsYS5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4gYS5tYXRjaGVzLmxlbmd0aD4wfSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGIpe3JldHVybiBhLmFjdGl2ZT09Yn0sYS5zZWxlY3RBY3RpdmU9ZnVuY3Rpb24oYil7YS5hY3RpdmU9Yn0sYS5zZWxlY3RNYXRjaD1mdW5jdGlvbihiKXthLnNlbGVjdCh7YWN0aXZlSWR4OmJ9KX19fX0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkTWF0Y2giLFsiJGh0dHAiLCIkdGVtcGxhdGVDYWNoZSIsIiRjb21waWxlIiwiJHBhcnNlIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7aW5kZXg6Ij0iLG1hdGNoOiI9IixxdWVyeToiPSJ9LGxpbms6ZnVuY3Rpb24oZSxmLGcpe3ZhciBoPWQoZy50ZW1wbGF0ZVVybCkoZS4kcGFyZW50KXx8InRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCI7YS5nZXQoaCx7Y2FjaGU6Yn0pLnN1Y2Nlc3MoZnVuY3Rpb24oYSl7Zi5yZXBsYWNlV2l0aChjKGEudHJpbSgpKShlKSl9KX19fV0pLmZpbHRlcigidHlwZWFoZWFkSGlnaGxpZ2h0IixmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFsuPyorXiRbXF1cXCgpe318LV0pL2csIlxcJDEiKX1yZXR1cm4gZnVuY3Rpb24oYixjKXtyZXR1cm4gYz8oIiIrYikucmVwbGFjZShuZXcgUmVnRXhwKGEoYyksImdpIiksIjxzdHJvbmc+JCY8L3N0cm9uZz4iKTpifX0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLWdyb3VwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsJzxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPlxuICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkaW5nIj5cbiAgICA8aDQgY2xhc3M9InBhbmVsLXRpdGxlIj5cbiAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIiBuZy1jbGljaz0idG9nZ2xlT3BlbigpIiBhY2NvcmRpb24tdHJhbnNjbHVkZT0iaGVhZGluZyI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtbXV0ZWRcJzogaXNEaXNhYmxlZH0iPnt7aGVhZGluZ319PC9zcGFuPjwvYT5cbiAgICA8L2g0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0icGFuZWwtY29sbGFwc2UiIGNvbGxhcHNlPSIhaXNPcGVuIj5cbgkgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24uaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIiwnPGRpdiBjbGFzcz0icGFuZWwtZ3JvdXAiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLCc8ZGl2IGNsYXNzPSJhbGVydCIgbmctY2xhc3M9IntcJ2FsZXJ0LXt7dHlwZSB8fCBcJ3dhcm5pbmdcJ319XCc6IHRydWUsIFwnYWxlcnQtZGlzbWlzc2FibGVcJzogY2xvc2VhYmxlfSIgcm9sZT0iYWxlcnQiPlxuICAgIDxidXR0b24gbmctc2hvdz0iY2xvc2VhYmxlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgbmctY2xpY2s9ImNsb3NlKCkiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPkNsb3NlPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgbmctdHJhbnNjbHVkZT48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLCc8ZGl2IG5nLW1vdXNlZW50ZXI9InBhdXNlKCkiIG5nLW1vdXNlbGVhdmU9InBsYXkoKSIgY2xhc3M9ImNhcm91c2VsIiBuZy1zd2lwZS1yaWdodD0icHJldigpIiBuZy1zd2lwZS1sZWZ0PSJuZXh0KCkiPlxuICAgIDxvbCBjbGFzcz0iY2Fyb3VzZWwtaW5kaWNhdG9ycyIgbmctc2hvdz0ic2xpZGVzLmxlbmd0aCA+IDEiPlxuICAgICAgICA8bGkgbmctcmVwZWF0PSJzbGlkZSBpbiBzbGlkZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogaXNBY3RpdmUoc2xpZGUpfSIgbmctY2xpY2s9InNlbGVjdChzbGlkZSkiPjwvbGk+XG4gICAgPC9vbD5cbiAgICA8ZGl2IGNsYXNzPSJjYXJvdXNlbC1pbm5lciIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiAgICA8YSBjbGFzcz0ibGVmdCBjYXJvdXNlbC1jb250cm9sIiBuZy1jbGljaz0icHJldigpIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L3NwYW4+PC9hPlxuICAgIDxhIGNsYXNzPSJyaWdodCBjYXJvdXNlbC1jb250cm9sIiBuZy1jbGljaz0ibmV4dCgpIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9zcGFuPjwvYT5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2Nhcm91c2VsL3NsaWRlLmh0bWwiLCI8ZGl2IG5nLWNsYXNzPVwie1xuICAgICdhY3RpdmUnOiBsZWF2aW5nIHx8IChhY3RpdmUgJiYgIWVudGVyaW5nKSxcbiAgICAncHJldic6IChuZXh0IHx8IGFjdGl2ZSkgJiYgZGlyZWN0aW9uPT0ncHJldicsXG4gICAgJ25leHQnOiAobmV4dCB8fCBhY3RpdmUpICYmIGRpcmVjdGlvbj09J25leHQnLFxuICAgICdyaWdodCc6IGRpcmVjdGlvbj09J3ByZXYnLFxuICAgICdsZWZ0JzogZGlyZWN0aW9uPT0nbmV4dCdcbiAgfVwiIGNsYXNzPVwiaXRlbSB0ZXh0LWNlbnRlclwiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG4iKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIiwnPGRpdiBuZy1zd2l0Y2g9ImRhdGVwaWNrZXJNb2RlIiByb2xlPSJhcHBsaWNhdGlvbiIgbmcta2V5ZG93bj0ia2V5ZG93bigkZXZlbnQpIj5cbiAgPGRheXBpY2tlciBuZy1zd2l0Y2gtd2hlbj0iZGF5IiB0YWJpbmRleD0iMCI+PC9kYXlwaWNrZXI+XG4gIDxtb250aHBpY2tlciBuZy1zd2l0Y2gtd2hlbj0ibW9udGgiIHRhYmluZGV4PSIwIj48L21vbnRocGlja2VyPlxuICA8eWVhcnBpY2tlciBuZy1zd2l0Y2gtd2hlbj0ieWVhciIgdGFiaW5kZXg9IjAiPjwveWVhcnBpY2tlcj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIiwnPHRhYmxlIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0ie3t1bmlxdWVJZH19LXRpdGxlIiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9Int7YWN0aXZlRGF0ZUlkfX0iPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLWxlZnQiIG5nLWNsaWNrPSJtb3ZlKC0xKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoIGNvbHNwYW49Int7NSArIHNob3dXZWVrc319Ij48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgICA8dHI+XG4gICAgICA8dGggbmctc2hvdz0ic2hvd1dlZWtzIiBjbGFzcz0idGV4dC1jZW50ZXIiPjwvdGg+XG4gICAgICA8dGggbmctcmVwZWF0PSJsYWJlbCBpbiBsYWJlbHMgdHJhY2sgYnkgJGluZGV4IiBjbGFzcz0idGV4dC1jZW50ZXIiPjxzbWFsbCBhcmlhLWxhYmVsPSJ7e2xhYmVsLmZ1bGx9fSI+e3tsYWJlbC5hYmJyfX08L3NtYWxsPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctc2hvdz0ic2hvd1dlZWtzIiBjbGFzcz0idGV4dC1jZW50ZXIgaDYiPjxlbT57eyB3ZWVrTnVtYmVyc1skaW5kZXhdIH19PC9lbT48L3RkPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGFzcz0ie1wnYnRuLWluZm9cJzogZHQuc2VsZWN0ZWQsIGFjdGl2ZTogaXNBY3RpdmUoZHQpfSIgbmctY2xpY2s9InNlbGVjdChkdC5kYXRlKSIgbmctZGlzYWJsZWQ9ImR0LmRpc2FibGVkIiB0YWJpbmRleD0iLTEiPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LW11dGVkXCc6IGR0LnNlY29uZGFyeSwgXCd0ZXh0LWluZm9cJzogZHQuY3VycmVudH0iPnt7ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3BvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsJzx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSIgbmctc3R5bGU9IntkaXNwbGF5OiAoaXNPcGVuICYmIFwnYmxvY2tcJykgfHwgXCdub25lXCcsIHRvcDogcG9zaXRpb24udG9wK1wncHhcJywgbGVmdDogcG9zaXRpb24ubGVmdCtcJ3B4XCd9IiBuZy1rZXlkb3duPSJrZXlkb3duKCRldmVudCkiPlxuCTxsaSBuZy10cmFuc2NsdWRlPjwvbGk+XG4JPGxpIG5nLWlmPSJzaG93QnV0dG9uQmFyIiBzdHlsZT0icGFkZGluZzoxMHB4IDlweCAycHgiPlxuCQk8c3BhbiBjbGFzcz0iYnRuLWdyb3VwIj5cbgkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4taW5mbyIgbmctY2xpY2s9InNlbGVjdChcJ3RvZGF5XCcpIj57eyBnZXRUZXh0KFwnY3VycmVudFwnKSB9fTwvYnV0dG9uPlxuCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1kYW5nZXIiIG5nLWNsaWNrPSJzZWxlY3QobnVsbCkiPnt7IGdldFRleHQoXCdjbGVhclwnKSB9fTwvYnV0dG9uPlxuCQk8L3NwYW4+XG4JCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc3VjY2VzcyBwdWxsLXJpZ2h0IiBuZy1jbGljaz0iY2xvc2UoKSI+e3sgZ2V0VGV4dChcJ2Nsb3NlXCcpIH19PC9idXR0b24+XG4JPC9saT5cbjwvdWw+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIveWVhci5odG1sIiwnPHRhYmxlIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0ie3t1bmlxdWVJZH19LXRpdGxlIiBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9Int7YWN0aXZlRGF0ZUlkfX0iPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLWxlZnQiIG5nLWNsaWNrPSJtb3ZlKC0xKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoIGNvbHNwYW49IjMiPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1yZXBlYXQ9ImR0IGluIHJvdyB0cmFjayBieSBkdC5kYXRlIiBjbGFzcz0idGV4dC1jZW50ZXIiIHJvbGU9ImdyaWRjZWxsIiBpZD0ie3tkdC51aWR9fSIgYXJpYS1kaXNhYmxlZD0ie3shIWR0LmRpc2FibGVkfX0iPlxuICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgc3R5bGU9IndpZHRoOjEwMCU7IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBuZy1jbGFzcz0ie1wnYnRuLWluZm9cJzogZHQuc2VsZWN0ZWQsIGFjdGl2ZTogaXNBY3RpdmUoZHQpfSIgbmctY2xpY2s9InNlbGVjdChkdC5kYXRlKSIgbmctZGlzYWJsZWQ9ImR0LmRpc2FibGVkIiB0YWJpbmRleD0iLTEiPjxzcGFuIG5nLWNsYXNzPSJ7XCd0ZXh0LWluZm9cJzogZHQuY3VycmVudH0iPnt7ZHQubGFiZWx9fTwvc3Bhbj48L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvbW9kYWwvYmFja2Ryb3AuaHRtbCIsJzxkaXYgY2xhc3M9Im1vZGFsLWJhY2tkcm9wIGZhZGUiXG4gICAgIG5nLWNsYXNzPSJ7aW46IGFuaW1hdGV9IlxuICAgICBuZy1zdHlsZT0ie1wnei1pbmRleFwnOiAxMDQwICsgKGluZGV4ICYmIDEgfHwgMCkgKyBpbmRleCoxMH0iXG4+PC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL21vZGFsL3dpbmRvdy5odG1sIiwnPGRpdiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgY2xhc3M9Im1vZGFsIGZhZGUiIG5nLWNsYXNzPSJ7aW46IGFuaW1hdGV9IiBuZy1zdHlsZT0ie1wnei1pbmRleFwnOiAxMDUwICsgaW5kZXgqMTAsIGRpc3BsYXk6IFwnYmxvY2tcJ30iIG5nLWNsaWNrPSJjbG9zZSgkZXZlbnQpIj5cbiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIG5nLWNsYXNzPSJ7XCdtb2RhbC1zbVwnOiBzaXplID09IFwnc21cJywgXCdtb2RhbC1sZ1wnOiBzaXplID09IFwnbGdcJ30iPjxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+PC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLCc8dWwgY2xhc3M9InBhZ2VyIj5cbiAgPGxpIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKSwgcHJldmlvdXM6IGFsaWdufSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlIC0gMSkiPnt7Z2V0VGV4dChcJ3ByZXZpb3VzXCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vTmV4dCgpLCBuZXh0OiBhbGlnbn0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSArIDEpIj57e2dldFRleHQoXCduZXh0XCcpfX08L2E+PC9saT5cbjwvdWw+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsJzx1bCBjbGFzcz0icGFnaW5hdGlvbiI+XG4gIDxsaSBuZy1pZj0iYm91bmRhcnlMaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZSgxKSI+e3tnZXRUZXh0KFwnZmlyc3RcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImRpcmVjdGlvbkxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgLSAxKSI+e3tnZXRUZXh0KFwncHJldmlvdXNcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctcmVwZWF0PSJwYWdlIGluIHBhZ2VzIHRyYWNrIGJ5ICRpbmRleCIgbmctY2xhc3M9InthY3RpdmU6IHBhZ2UuYWN0aXZlfSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlLm51bWJlcikiPnt7cGFnZS50ZXh0fX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJkaXJlY3Rpb25MaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgKyAxKSI+e3tnZXRUZXh0KFwnbmV4dFwnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iYm91bmRhcnlMaW5rcyIgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHRvdGFsUGFnZXMpIj57e2dldFRleHQoXCdsYXN0XCcpfX08L2E+PC9saT5cbjwvdWw+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtaHRtbC11bnNhZmUtcG9wdXAuaHRtbCIsJzxkaXYgY2xhc3M9InRvb2x0aXAge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiIGJpbmQtaHRtbC11bnNhZmU9ImNvbnRlbnQiPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1wb3B1cC5odG1sIiwnPGRpdiBjbGFzcz0idG9vbHRpcCB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciIgbmctYmluZD0iY29udGVudCI+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcG9wb3Zlci9wb3BvdmVyLmh0bWwiLCc8ZGl2IGNsYXNzPSJwb3BvdmVyIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj5cblxuICA8ZGl2IGNsYXNzPSJwb3BvdmVyLWlubmVyIj5cbiAgICAgIDxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSIgbmctYmluZD0idGl0bGUiIG5nLXNob3c9InRpdGxlIj48L2gzPlxuICAgICAgPGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50IiBuZy1iaW5kPSJjb250ZW50Ij48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvYmFyLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiIG5nLWNsYXNzPSJ0eXBlICYmIFwncHJvZ3Jlc3MtYmFyLVwnICsgdHlwZSIgcm9sZT0icHJvZ3Jlc3NiYXIiIGFyaWEtdmFsdWVub3c9Int7dmFsdWV9fSIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0ie3ttYXh9fSIgbmctc3R5bGU9Int3aWR0aDogcGVyY2VudCArIFwnJVwnfSIgYXJpYS12YWx1ZXRleHQ9Int7cGVyY2VudCB8IG51bWJlcjowfX0lIiBuZy10cmFuc2NsdWRlPjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9wcm9ncmVzcy5odG1sIiwnPGRpdiBjbGFzcz0icHJvZ3Jlc3MiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+XG4gIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgbmctY2xhc3M9InR5cGUgJiYgXCdwcm9ncmVzcy1iYXItXCcgKyB0eXBlIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19IiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e21heH19IiBuZy1zdHlsZT0ie3dpZHRoOiBwZXJjZW50ICsgXCclXCd9IiBhcmlhLXZhbHVldGV4dD0ie3twZXJjZW50IHwgbnVtYmVyOjB9fSUiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcmF0aW5nL3JhdGluZy5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLCc8c3BhbiBuZy1tb3VzZWxlYXZlPSJyZXNldCgpIiBuZy1rZXlkb3duPSJvbktleWRvd24oJGV2ZW50KSIgdGFiaW5kZXg9IjAiIHJvbGU9InNsaWRlciIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0ie3tyYW5nZS5sZW5ndGh9fSIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19Ij5cbiAgICA8aSBuZy1yZXBlYXQ9InIgaW4gcmFuZ2UgdHJhY2sgYnkgJGluZGV4IiBuZy1tb3VzZWVudGVyPSJlbnRlcigkaW5kZXggKyAxKSIgbmctY2xpY2s9InJhdGUoJGluZGV4ICsgMSkiIGNsYXNzPSJnbHlwaGljb24iIG5nLWNsYXNzPSIkaW5kZXggPCB2YWx1ZSAmJiAoci5zdGF0ZU9uIHx8IFwnZ2x5cGhpY29uLXN0YXJcJykgfHwgKHIuc3RhdGVPZmYgfHwgXCdnbHlwaGljb24tc3Rhci1lbXB0eVwnKSI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSJzci1vbmx5Ij4oe3sgJGluZGV4IDwgdmFsdWUgPyBcJypcJyA6IFwnIFwnIH19KTwvc3Bhbj5cbiAgICA8L2k+XG48L3NwYW4+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RhYnMvdGFiLmh0bWwiLCc8bGkgbmctY2xhc3M9InthY3RpdmU6IGFjdGl2ZSwgZGlzYWJsZWQ6IGRpc2FibGVkfSI+XG4gIDxhIG5nLWNsaWNrPSJzZWxlY3QoKSIgdGFiLWhlYWRpbmctdHJhbnNjbHVkZT57e2hlYWRpbmd9fTwvYT5cbjwvbGk+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWJzZXQtdGl0bGVzLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RhYnMvdGFic2V0LXRpdGxlcy5odG1sIiwiPHVsIGNsYXNzPVwibmF2IHt7dHlwZSAmJiAnbmF2LScgKyB0eXBlfX1cIiBuZy1jbGFzcz1cInsnbmF2LXN0YWNrZWQnOiB2ZXJ0aWNhbH1cIj5cbjwvdWw+XG4iKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsJ1xuPGRpdj5cbiAgPHVsIGNsYXNzPSJuYXYgbmF2LXt7dHlwZSB8fCBcJ3RhYnNcJ319IiBuZy1jbGFzcz0ie1wnbmF2LXN0YWNrZWRcJzogdmVydGljYWwsIFwnbmF2LWp1c3RpZmllZFwnOiBqdXN0aWZpZWR9IiBuZy10cmFuc2NsdWRlPjwvdWw+XG4gIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSIgXG4gICAgICAgICBuZy1yZXBlYXQ9InRhYiBpbiB0YWJzIiBcbiAgICAgICAgIG5nLWNsYXNzPSJ7YWN0aXZlOiB0YWIuYWN0aXZlfSJcbiAgICAgICAgIHRhYi1jb250ZW50LXRyYW5zY2x1ZGU9InRhYiI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIiwnPHRhYmxlPlxuCTx0Ym9keT5cbgkJPHRyIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImluY3JlbWVudEhvdXJzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tdXAiPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZD4mbmJzcDs8L3RkPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJpbmNyZW1lbnRNaW51dGVzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tdXAiPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjwvdGQ+XG4JCTwvdHI+XG4JCTx0cj5cbgkJCTx0ZCBzdHlsZT0id2lkdGg6NTBweDsiIGNsYXNzPSJmb3JtLWdyb3VwIiBuZy1jbGFzcz0ie1wnaGFzLWVycm9yXCc6IGludmFsaWRIb3Vyc30iPlxuCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0iaG91cnMiIG5nLWNoYW5nZT0idXBkYXRlSG91cnMoKSIgY2xhc3M9ImZvcm0tY29udHJvbCB0ZXh0LWNlbnRlciIgbmctbW91c2V3aGVlbD0iaW5jcmVtZW50SG91cnMoKSIgbmctcmVhZG9ubHk9InJlYWRvbmx5SW5wdXQiIG1heGxlbmd0aD0iMiI+XG4JCQk8L3RkPlxuCQkJPHRkPjo8L3RkPlxuCQkJPHRkIHN0eWxlPSJ3aWR0aDo1MHB4OyIgY2xhc3M9ImZvcm0tZ3JvdXAiIG5nLWNsYXNzPSJ7XCdoYXMtZXJyb3JcJzogaW52YWxpZE1pbnV0ZXN9Ij5cbgkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmctbW9kZWw9Im1pbnV0ZXMiIG5nLWNoYW5nZT0idXBkYXRlTWludXRlcygpIiBjbGFzcz0iZm9ybS1jb250cm9sIHRleHQtY2VudGVyIiBuZy1yZWFkb25seT0icmVhZG9ubHlJbnB1dCIgbWF4bGVuZ3RoPSIyIj5cbgkJCTwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCB0ZXh0LWNlbnRlciIgbmctY2xpY2s9InRvZ2dsZU1lcmlkaWFuKCkiPnt7bWVyaWRpYW59fTwvYnV0dG9uPjwvdGQ+XG4JCTwvdHI+XG4JCTx0ciBjbGFzcz0idGV4dC1jZW50ZXIiPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJkZWNyZW1lbnRIb3VycygpIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWRvd24iPjwvc3Bhbj48L2E+PC90ZD5cbgkJCTx0ZD4mbmJzcDs8L3RkPlxuCQkJPHRkPjxhIG5nLWNsaWNrPSJkZWNyZW1lbnRNaW51dGVzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tZG93biI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PC90ZD5cbgkJPC90cj5cbgk8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLW1hdGNoLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsJzxhIHRhYmluZGV4PSItMSIgYmluZC1odG1sLXVuc2FmZT0ibWF0Y2gubGFiZWwgfCB0eXBlYWhlYWRIaWdobGlnaHQ6cXVlcnkiPjwvYT4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLCc8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiIG5nLWlmPSJpc09wZW4oKSIgbmctc3R5bGU9Int0b3A6IHBvc2l0aW9uLnRvcCtcJ3B4XCcsIGxlZnQ6IHBvc2l0aW9uLmxlZnQrXCdweFwnfSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgcm9sZT0ibGlzdGJveCIgYXJpYS1oaWRkZW49Int7IWlzT3BlbigpfX0iPlxuICAgIDxsaSBuZy1yZXBlYXQ9Im1hdGNoIGluIG1hdGNoZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogaXNBY3RpdmUoJGluZGV4KSB9IiBuZy1tb3VzZWVudGVyPSJzZWxlY3RBY3RpdmUoJGluZGV4KSIgbmctY2xpY2s9InNlbGVjdE1hdGNoKCRpbmRleCkiIHJvbGU9Im9wdGlvbiIgaWQ9Int7bWF0Y2guaWR9fSI+XG4gICAgICAgIDxkaXYgdHlwZWFoZWFkLW1hdGNoIGluZGV4PSIkaW5kZXgiIG1hdGNoPSJtYXRjaCIgcXVlcnk9InF1ZXJ5IiB0ZW1wbGF0ZS11cmw9InRlbXBsYXRlVXJsIj48L2Rpdj5cbiAgICA8L2xpPlxuPC91bD4nKQorfV0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmUzYjVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGFibGVzLnB5CkBAIC0wLDAgKzEsNDUzIEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSB0b2FzdGVyZ3VpLndpZGdldHMgaW1wb3J0IFRvYXN0ZXJUYWJsZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWNpcGUsIFByb2plY3RMYXllciwgTGF5ZXJfVmVyc2lvbiwgTWFjaGluZSwgUHJvamVjdAorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRLCBNYXgKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgdXJsCitmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgVGVtcGxhdGVWaWV3CisKKworY2xhc3MgUHJvamVjdEZpbHRlcnNNaXhpbihvYmplY3QpOgorICAgICIiIkNvbW1vbiBtaXhpbiBmb3IgcmVjaXBlLCBtYWNoaW5lIGluIHByb2plY3QgZmlsdGVycyIiIgorCisgICAgZGVmIGZpbHRlcl9pbl9wcm9qZWN0KHNlbGYsIGNvdW50X29ubHk9RmFsc2UpOgorICAgICAgICBxdWVyeSA9IHNlbGYucXVlcnlzZXQuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luPXNlbGYucHJvamVjdF9sYXllcnMpCisgICAgICAgIGlmIGNvdW50X29ubHk6CisgICAgICAgICAgICByZXR1cm4gcXVlcnkuY291bnQoKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBxdWVyeQorCisgICAgZGVmIGZpbHRlcl9ub3RfaW5fcHJvamVjdChzZWxmLCBjb3VudF9vbmx5PUZhbHNlKToKKyAgICAgICAgcXVlcnkgPSBzZWxmLnF1ZXJ5c2V0LmV4Y2x1ZGUobGF5ZXJfdmVyc2lvbl9faW49c2VsZi5wcm9qZWN0X2xheWVycykKKyAgICAgICAgaWYgY291bnRfb25seToKKyAgICAgICAgICAgIHJldHVybiBxdWVyeS5jb3VudCgpCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHF1ZXJ5CisKK2NsYXNzIExheWVyc1RhYmxlKFRvYXN0ZXJUYWJsZSk6CisgICAgIiIiVGFibGUgb2YgbGF5ZXJzIGluIFRvYXN0ZXIiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllcnNUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmRlZmF1bHRfb3JkZXJieSA9ICJsYXllcl9fbmFtZSIKKworICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgY29udGV4dCA9IHN1cGVyKExheWVyc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisKKyAgICAgICAgY29udGV4dFsncHJvamVjdCddID0gcHJvamVjdAorICAgICAgICBjb250ZXh0Wydwcm9qZWN0bGF5ZXJzJ10gPSBtYXAobGFtYmRhIHByamxheWVyOiBwcmpsYXllci5sYXllcmNvbW1pdC5pZCwgUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJvamVjdCkpCisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgZGVmIHNldHVwX2ZpbHRlcnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5wcm9qZWN0X2xheWVycyA9IFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PXByb2plY3QpCisKKworICAgICAgICBzZWxmLmFkZF9maWx0ZXIodGl0bGU9IkZpbHRlciBieSBwcm9qZWN0IGxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2FjdGlvbnM9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJpbl9wcm9qZWN0IiwgIkxheWVycyBhZGRlZCB0byB0aGlzIHByb2plY3QiLCBzZWxmLmZpbHRlcl9pbl9wcm9qZWN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1ha2VfZmlsdGVyX2FjdGlvbigibm90X2luX3Byb2plY3QiLCAiTGF5ZXJzIG5vdCBhZGRlZCB0byB0aGlzIHByb2plY3QiLCBzZWxmLmZpbHRlcl9ub3RfaW5fcHJvamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgZmlsdGVyX2luX3Byb2plY3Qoc2VsZiwgY291bnRfb25seT1GYWxzZSk6CisgICAgICAgIHF1ZXJ5ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIocHJvamVjdGxheWVyX19pbj1zZWxmLnByb2plY3RfbGF5ZXJzKQorICAgICAgICBpZiBjb3VudF9vbmx5OgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmNvdW50KCkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcXVlcnkKKworICAgIGRlZiBmaWx0ZXJfbm90X2luX3Byb2plY3Qoc2VsZiwgY291bnRfb25seT1GYWxzZSk6CisgICAgICAgIHF1ZXJ5ID0gc2VsZi5xdWVyeXNldC5leGNsdWRlKHByb2plY3RsYXllcl9faW49c2VsZi5wcm9qZWN0X2xheWVycykKKyAgICAgICAgaWYgY291bnRfb25seToKKyAgICAgICAgICAgIHJldHVybiBxdWVyeS5jb3VudCgpCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHF1ZXJ5CisKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0ga3dhcmdzWydwaWQnXSkKKyAgICAgICAgY29tcGF0aWJsZV9sYXllcnMgPSBwcmouY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gY29tcGF0aWJsZV9sYXllcnMub3JkZXJfYnkoc2VsZi5kZWZhdWx0X29yZGVyYnkpCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorCisgICAgICAgIGxheWVyX2xpbmtfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmlkICV9Ij4KKyAgICAgICAgICB7e2RhdGEubGF5ZXIubmFtZX19CisgICAgICAgIDwvYT4KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibGF5ZXJfX25hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9bGF5ZXJfbGlua190ZW1wbGF0ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlN1bW1hcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGF5ZXJfX3N1bW1hcnkiKQorCisgICAgICAgIGdpdF91cmxfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmlkICV9Ij4KKyAgICAgICAgICA8Y29kZT57e2RhdGEubGF5ZXIudmNzX3VybH19PC9jb2RlPgorICAgICAgICA8L2E+CisgICAgICAgIHslIGlmIGRhdGEuZ2V0X3Zjc19saW5rX3VybCAlfQorICAgICAgICA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0ie3sgZGF0YS5nZXRfdmNzX2xpbmtfdXJsIH19Ij4KKyAgICAgICAgICAgPGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT4KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkdpdCByZXBvc2l0b3J5IFVSTCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGxheWVyIHNvdXJjZSBjb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibGF5ZXJfX3Zjc191cmwiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9Z2l0X3VybF90ZW1wbGF0ZSkKKworICAgICAgICBnaXRfZGlyX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxhIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5pZCAlfSI+CisgICAgICAgICA8Y29kZT57e2RhdGEuZGlycGF0aH19PC9jb2RlPgorICAgICAgICA8L2E+CisgICAgICAgIHslIGlmIGRhdGEuZGlycGF0aCBhbmQgZGF0YS5nZXRfdmNzX2RpcnBhdGhfbGlua191cmwgJX0KKyAgICAgICAgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Int7IGRhdGEuZ2V0X3Zjc19kaXJwYXRoX2xpbmtfdXJsIH19Ij4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPgorICAgICAgICA8L2E+CisgICAgICAgIHslIGVuZGlmICV9JycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJTdWJkaXJlY3RvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgbGF5ZXIgZGlyZWN0b3J5IHdpdGhpbiB0aGUgR2l0IHJlcG9zaXRvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJnaXRfc3ViZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWdpdF9kaXJfdGVtcGxhdGUpCisKKyAgICAgICAgcmV2aXNpb25fdGVtcGxhdGUgPSAgJycnCisgICAgICAgIHslIGxvYWQgcHJvamVjdHRhZ3MgICV9CisgICAgICAgIHslIHdpdGggdmNzX3JlZj1kYXRhLmdldF92Y3NfcmVmZXJlbmNlICV9CisgICAgICAgIHslIGlmIHZjc19yZWZ8aXNfc2hhaWQgJX0KKyAgICAgICAgPGEgY2xhc3M9ImJ0biIgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4gPGxpPnt7dmNzX3JlZn19PC9saT4gPC91bD4iPgorICAgICAgICB7e3Zjc19yZWZ8dHJ1bmNhdGVjaGFyczoxMH19CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICB7e3Zjc19yZWZ9fQorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmV2aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgR2l0IGJyYW5jaCwgdGFnIG9yIGNvbW1pdC4gRm9yIHRoZSBsYXllcnMgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIGxheWVyIHNvdXJjZSwgdGhlIHJldmlzaW9uIGlzIGFsd2F5cyB0aGUgYnJhbmNoIGNvbXBhdGlibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIHlvdSBzZWxlY3RlZCBmb3IgdGhpcyBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9InJldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPXJldmlzaW9uX3RlbXBsYXRlKQorCisgICAgICAgIGRlcHNfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgeyUgd2l0aCBvZHM9ZGF0YS5kZXBlbmRlbmNpZXMuYWxsJX0KKyAgICAgICAgeyUgaWYgb2RzLmNvdW50ICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiB0aXRsZT0iPGEgaHJlZj0neyUgdXJsICJsYXllcmRldGFpbHMiIGV4dHJhLnBpZCBkYXRhLmlkICV9Jz57e2RhdGEubGF5ZXIubmFtZX19PC9hPiBkZXBlbmRlbmNpZXMiCisgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgIHslIGZvciBpIGluIG9kcyV9CisgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgImxheWVyZGV0YWlscyIgZXh0cmEucGlkIGkuZGVwZW5kc19vbi5wayAlfSc+e3tpLmRlcGVuZHNfb24ubGF5ZXIubmFtZX19PC9hPjwvbGk+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L3VsPiI+CisgICAgICAgIHt7b2RzLmNvdW50fX0KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVwZW5kZW5jaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iT3RoZXIgbGF5ZXJzIGEgbGF5ZXIgZGVwZW5kcyB1cG9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImRlcGVuZGVuY2llcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1kZXBzX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iQWRkIHwgRGVsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iQWRkIG9yIGRlbGV0ZSBsYXllcnMgdG8gLyBmcm9tIHlvdXIgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9J3slIGluY2x1ZGUgImxheWVyX2J0bi5odG1sIiAlfScpCisKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMYXllckRldGFpbHNVcmwiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWFibGUgPSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxheWVyZGV0YWlsdXJsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGF0aW9uID0gbGFtYmRhIHg6IHJldmVyc2UoJ2xheWVyZGV0YWlscycsIGFyZ3M9KHByb2plY3QuaWQsIHguaWQpKSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9Im5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWFibGUgPSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9Im5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0YXRpb24gPSBsYW1iZGEgeDogeC5sYXllci5uYW1lKQorCisKK2NsYXNzIE1hY2hpbmVzVGFibGUoVG9hc3RlclRhYmxlLCBQcm9qZWN0RmlsdGVyc01peGluKToKKyAgICAiIiJUYWJsZSBvZiBNYWNoaW5lcyBpbiBUb2FzdGVyIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTWFjaGluZXNUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmVtcHR5X3N0YXRlID0gIk5vIG1hY2hpbmVzIG1heWJlIHlvdSBuZWVkIHRvIGRvIGEgYnVpbGQ/IgorICAgICAgICBzZWxmLmRlZmF1bHRfb3JkZXJieSA9ICJuYW1lIgorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBjb250ZXh0ID0gc3VwZXIoTWFjaGluZXNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKyAgICAgICAgY29udGV4dFsncHJvamVjdCddID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBjb250ZXh0Wydwcm9qZWN0bGF5ZXJzJ10gPSBtYXAobGFtYmRhIHByamxheWVyOiBwcmpsYXllci5sYXllcmNvbW1pdC5pZCwgUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9Y29udGV4dFsncHJvamVjdCddKSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworICAgIGRlZiBzZXR1cF9maWx0ZXJzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYucHJvamVjdF9sYXllcnMgPSBwcm9qZWN0LnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCgpCisKKyAgICAgICAgc2VsZi5hZGRfZmlsdGVyKHRpdGxlPSJGaWx0ZXIgYnkgcHJvamVjdCBtYWNoaW5lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2FjdGlvbnM9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJpbl9wcm9qZWN0IiwgIk1hY2hpbmVzIHByb3ZpZGVkIGJ5IGxheWVycyBhZGRlZCB0byB0aGlzIHByb2plY3QiLCBzZWxmLmZpbHRlcl9pbl9wcm9qZWN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1ha2VfZmlsdGVyX2FjdGlvbigibm90X2luX3Byb2plY3QiLCAiTWFjaGluZXMgcHJvdmlkZWQgYnkgbGF5ZXJzIG5vdCBhZGRlZCB0byB0aGlzIHByb2plY3QiLCBzZWxmLmZpbHRlcl9ub3RfaW5fcHJvamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IGt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBwcmouZ2V0X2FsbF9jb21wYXRpYmxlX21hY2hpbmVzKCkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQub3JkZXJfYnkoc2VsZi5kZWZhdWx0X29yZGVyYnkpCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTWFjaGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJkZXNjcmlwdGlvbiIpCisKKyAgICAgICAgbGF5ZXJfbGlua190ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5pZCAlfSI+CisgICAgICAgIHt7ZGF0YS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fTwvYT4KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJMYXllciIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1sYXllcl9saW5rX3RlbXBsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZXZpc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBHaXQgYnJhbmNoLCB0YWcgb3IgY29tbWl0LiBGb3IgdGhlIGxheWVycyBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgbGF5ZXIgc291cmNlLCB0aGUgcmV2aXNpb24gaXMgYWx3YXlzIHRoZSBicmFuY2ggY29tcGF0aWJsZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24geW91IHNlbGVjdGVkIGZvciB0aGlzIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcl92ZXJzaW9uX19nZXRfdmNzX3JlZmVyZW5jZSIpCisKKyAgICAgICAgbWFjaGluZV9maWxlX3RlbXBsYXRlID0gJycnPGNvZGU+Y29uZi9tYWNoaW5lL3t7ZGF0YS5uYW1lfX0uY29uZjwvY29kZT4KKyAgICAgICAgPGEgaHJlZj0ie3tkYXRhLmdldF92Y3NfbWFjaGluZV9maWxlX2xpbmtfdXJsfX0iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPjwvYT4nJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9Ik1hY2hpbmUgZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9Im1hY2hpbmVmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPW1hY2hpbmVfZmlsZV90ZW1wbGF0ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlNlbGVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlNldHMgdGhlIHNlbGVjdGVkIG1hY2hpbmUgYXMgdGhlIHByb2plY3QgbWFjaGluZS4gWW91IGNhbiBvbmx5IGhhdmUgb25lIG1hY2hpbmUgcGVyIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfbmFtZT0iaW5fY3VycmVudF9wcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPSd7JSBpbmNsdWRlICJtYWNoaW5lX2J0bi5odG1sIiAlfScpCisKKworY2xhc3MgTGF5ZXJNYWNoaW5lc1RhYmxlKE1hY2hpbmVzVGFibGUpOgorICAgICIiIiBTbWFsbGVyIHZlcnNpb24gb2YgdGhlIE1hY2hpbmVzIHRhYmxlIGZvciB1c2UgaW4gbGF5ZXIgZGV0YWlscyAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllck1hY2hpbmVzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgY29udGV4dCA9IHN1cGVyKExheWVyTWFjaGluZXNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKyAgICAgICAgY29udGV4dFsnbGF5ZXJ2ZXJzaW9uJ10gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPWt3YXJnc1snbGF5ZXJpZCddKQorICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgTWFjaGluZXNUYWJsZS5zZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQuZmlsdGVyKGxheWVyX3ZlcnNpb25fX3BrPWludChrd2FyZ3NbJ2xheWVyaWQnXSkpCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ2luX3ByaiddID0gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKFEocHJvamVjdD1rd2FyZ3NbJ3BpZCddKSAmIFEobGF5ZXJjb21taXQ9a3dhcmdzWydsYXllcmlkJ10pKS5jb3VudCgpCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9Ik1hY2hpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9Im5hbWUiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iZGVzY3JpcHRpb24iKQorCisgICAgICAgIHNlbGVjdF9idG5fdGVtcGxhdGUgPSAnPGEgaHJlZj0ieyUgdXJsICJwcm9qZWN0IiBleHRyYS5waWQgJX0/c2V0TWFjaGluZT17e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBzZWxlY3QtbWFjaGluZS1idG4iIHslIGlmIGV4dHJhLmluX3ByaiA9PSAwJX1kaXNhYmxlZD0iZGlzYWJsZWQieyVlbmRpZiV9PlNlbGVjdCBtYWNoaW5lPC9hPicKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlNlbGVjdCBtYWNoaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPXNlbGVjdF9idG5fdGVtcGxhdGUpCisKKworY2xhc3MgUmVjaXBlc1RhYmxlKFRvYXN0ZXJUYWJsZSwgUHJvamVjdEZpbHRlcnNNaXhpbik6CisgICAgIiIiVGFibGUgb2YgUmVjaXBlcyBpbiBUb2FzdGVyIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoUmVjaXBlc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZW1wdHlfc3RhdGUgPSAiVG9hc3RlciBoYXMgbm8gcmVjaXBlIGluZm9ybWF0aW9uLiBUbyBnZW5lcmF0ZSByZWNpcGUgaW5mb3JtYXRpb24geW91IGNhbiBjb25maWd1cmUgYSBsYXllciBzb3VyY2UgdGhlbiBydW4gYSBidWlsZC4iCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIm5hbWUiCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIGNvbnRleHQgPSBzdXBlcihSZWNpcGVzVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisKKyAgICAgICAgY29udGV4dFsncHJvamVjdCddID0gcHJvamVjdAorCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3RsYXllcnMnXSA9IG1hcChsYW1iZGEgcHJqbGF5ZXI6IHByamxheWVyLmxheWVyY29tbWl0LmlkLCBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1jb250ZXh0Wydwcm9qZWN0J10pKQorCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKyAgICBkZWYgc2V0dXBfZmlsdGVycyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLnByb2plY3RfbGF5ZXJzID0gcHJvamVjdC5wcm9qZWN0bGF5ZXJfZXF1aXZhbGVudF9zZXQoKQorCisgICAgICAgIHNlbGYuYWRkX2ZpbHRlcih0aXRsZT0iRmlsdGVyIGJ5IHByb2plY3QgcmVjaXBlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2FjdGlvbnM9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJpbl9wcm9qZWN0IiwgIlJlY2lwZXMgcHJvdmlkZWQgYnkgbGF5ZXJzIGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX2luX3Byb2plY3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJub3RfaW5fcHJvamVjdCIsICJSZWNpcGVzIHByb3ZpZGVkIGJ5IGxheWVycyBub3QgYWRkZWQgdG8gdGhpcyBwcm9qZWN0Iiwgc2VsZi5maWx0ZXJfbm90X2luX3Byb2plY3QpCisgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IGt3YXJnc1sncGlkJ10pCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHByai5nZXRfYWxsX2NvbXBhdGlibGVfcmVjaXBlcygpCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KHNlbGYuZGVmYXVsdF9vcmRlcmJ5KQorCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iSW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgcGllY2Ugb2Ygc29mdHdhcmUsIGluY2x1ZGluZyB3aGVyZSB0byBkb3dubG9hZCB0aGUgc291cmNlLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGhvdyB0byBjb21waWxlIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGhvdyB0byBwYWNrYWdlIHRoZSBjb21waWxlZCBvdXRwdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZWFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9Im5hbWUiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmVjaXBlIFZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJ2ZXJzaW9uIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IikKKworICAgICAgICByZWNpcGVfZmlsZV90ZW1wbGF0ZSA9ICcnJworICAgICAgICA8Y29kZT57e2RhdGEuZmlsZV9wYXRofX08L2NvZGU+CisgICAgICAgIDxhIGhyZWY9Int7ZGF0YS5nZXRfdmNzX3JlY2lwZV9maWxlX2xpbmtfdXJsfX0iIHRhcmdldD0iX2JsYW5rIj4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPgorICAgICAgICA8L2E+CisgICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJlY2lwZSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iUGF0aCB0byB0aGUgcmVjaXBlIC5iYiBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0icmVjaXBlLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9cmVjaXBlX2ZpbGVfdGVtcGxhdGUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJTZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJzZWN0aW9uIikKKworICAgICAgICBsYXllcl9saW5rX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxhIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5sYXllcl92ZXJzaW9uLmlkICV9Ij4KKyAgICAgICAge3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC9hPgorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9bGF5ZXJfbGlua190ZW1wbGF0ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxpY2Vuc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBwaXBlIGNoYXJhY3RlciBpbmRpY2F0ZXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIGFtcGVyc2FuZCBjaGFyYWN0ZXIgaW5kaWNhdGVzIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0IHRoYXQgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsaWNlbnNlIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxheWVyX3ZlcnNpb25fX2dldF92Y3NfcmVmZXJlbmNlIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkJ1aWxkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iQWRkIG9yIGRlbGV0ZSByZWNpcGVzIHRvIGFuZCBmcm9tIHlvdXIgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9J3slIGluY2x1ZGUgInJlY2lwZV9idG4uaHRtbCIgJX0nKQorCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUHJvamVjdCBjb21wYXRpYmxlIExheWVyIElEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlID0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gInByb2plY3Rjb21wYXRpYmxlX2xheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGF0aW9uID0gbGFtYmRhIHg6ICh4LmxheWVyX3ZlcnNpb24uZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShwcm9qZWN0KVswXSkpCisKK2NsYXNzIExheWVyUmVjaXBlc1RhYmxlKFJlY2lwZXNUYWJsZSk6CisgICAgIiIiIFNtYWxsZXIgdmVyc2lvbiBvZiB0aGUgUmVjaXBlcyB0YWJsZSBmb3IgdXNlIGluIGxheWVyIGRldGFpbHMgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTGF5ZXJSZWNpcGVzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgY29udGV4dCA9IHN1cGVyKExheWVyUmVjaXBlc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorICAgICAgICBjb250ZXh0WydsYXllcnZlcnNpb24nXSA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9a3dhcmdzWydsYXllcmlkJ10pCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBSZWNpcGVzVGFibGUuc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fcGs9aW50KGt3YXJnc1snbGF5ZXJpZCddKSkKKworICAgICAgICBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhWydpbl9wcmonXSA9IFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihRKHByb2plY3Q9a3dhcmdzWydwaWQnXSkgJiBRKGxheWVyY29tbWl0PWt3YXJnc1snbGF5ZXJpZCddKSkuY291bnQoKQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwaWVjZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHdoZXJlIHRvIGRvd25sb2FkIHRoZSBzb3VyY2UsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaG93IHRvIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRvIHBhY2thZ2UgdGhlIGNvbXBpbGVkIG91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJnZXRfZGVzY3JpcHRpb25fb3Jfc3VtbWFyeSIpCisKKworICAgICAgICBidWlsZF9yZWNpcGVfdGVtcGxhdGUgPSc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGJ1aWxkLXJlY2lwZS1idG4iIGRhdGEtcmVjaXBlLW5hbWU9Int7ZGF0YS5uYW1lfX0iIHslaWYgZXh0cmEuaW5fcHJqID09IDAgJX1kaXNhYmxlZD0iZGlzYWJsZWQieyVlbmRpZiV9PkJ1aWxkIHJlY2lwZTwvYnV0dG9uPicKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkJ1aWxkIHJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJhZGQtZGVsLWxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1idWlsZF9yZWNpcGVfdGVtcGxhdGUpCisKK2NsYXNzIFByb2plY3RMYXllcnNSZWNpcGVzVGFibGUoUmVjaXBlc1RhYmxlKToKKyAgICAiIiIgVGFibGUgdGhhdCBsaXN0cyBvbmx5IHJlY2lwZXMgYXZhaWxhYmxlIGZvciBsYXllcnMgYWRkZWQgdG8gdGhlIHByb2plY3QgIiIiCisKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoUHJvamVjdExheWVyc1JlY2lwZXNUYWJsZSwgc2VsZikuc2V0dXBfcXVlcnlzZXQoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0ga3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luID0gcHJqLnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCgpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwYmM0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlLmh0bWwKQEAgLTAsMCArMSwxODIgQEAKKzwhRE9DVFlQRSBodG1sPgoreyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKzxodG1sIGxhbmc9ImVuIj4KKyAgICA8aGVhZD4KKyAgICAgICAgPHRpdGxlPnslIGlmIG9iamVjdG5hbWUgJX0ge3tvYmplY3RuYW1lfHRpdGxlfX0gLSB7JSBlbmRpZiAlfVRvYXN0ZXI8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9ib290c3RyYXAubWluLmNzcycgJX0iIHR5cGU9InRleHQvY3NzIi8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MnICV9IiB0eXBlPSd0ZXh0L2NzcycvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcycgJX0iIHR5cGU9J3RleHQvY3NzJy8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL3ByZXR0aWZ5LmNzcycgJX0iIHR5cGU9J3RleHQvY3NzJy8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2RlZmF1bHQuY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KKworICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiIC8+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvanF1ZXJ5LTIuMC4zLm1pbi5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2pxdWVyeS5jb29raWUuanMnICV9Ij4KKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9ib290c3RyYXAubWluLmpzJyAlfSI+CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvcHJldHRpZnkuanMnICV9Ij4KKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9saWJ0b2FzdGVyLmpzJyAlfSI+CisgICAgPC9zY3JpcHQ+CisgICAgeyUgaWYgREVCVUcgJX0KKyAgICA8c2NyaXB0PgorICAgICAgbGlidG9hc3Rlci5kZWJ1ZyA9IHRydWU7CisgICAgPC9zY3JpcHQ+CisgICAgeyUgZW5kaWYgJX0KKyAgICA8c2NyaXB0PgorICAgICAgbGlidG9hc3Rlci5jdHggPSB7CisgICAgICAgIGpzVXJsIDogInslIHN0YXRpYyAnanMvJyAlfSIsCisgICAgICAgIGh0bWxVcmwgOiAieyUgc3RhdGljICdodG1sLycgJX0iLAorICAgICAgICBwcm9qZWN0c1VybCA6ICJ7JSB1cmwgJ2FsbC1wcm9qZWN0cycgJX0iLAorICAgICAgICBwcm9qZWN0c1R5cGVBaGVhZFVybDogeyUgdXJsICd4aHJfcHJvamVjdHN0eXBlYWhlYWQnIGFzIHByanVybCV9e3twcmp1cmx8anNvbn19LAorICAgICAgICB7JSBpZiBwcm9qZWN0LmlkICV9CisgICAgICAgIHByb2plY3RJZCA6IHt7cHJvamVjdC5pZH19LAorICAgICAgICBwcm9qZWN0UGFnZVVybCA6IHslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCBhcyBwdXJsJX17e3B1cmx8anNvbn19LAorICAgICAgICBwcm9qZWN0TmFtZSA6IHt7cHJvamVjdC5uYW1lfGpzb259fSwKKyAgICAgICAgcmVjaXBlc1R5cGVBaGVhZFVybDogeyUgdXJsICd4aHJfcmVjaXBlc3R5cGVhaGVhZCcgcHJvamVjdC5pZCBhcyBwYXR1cmwlfXt7cGF0dXJsfGpzb259fSwKKyAgICAgICAgbGF5ZXJzVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9sYXllcnN0eXBlYWhlYWQnIHByb2plY3QuaWQgYXMgcGF0dXJsJX17e3BhdHVybHxqc29ufX0sCisgICAgICAgIG1hY2hpbmVzVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9tYWNoaW5lc3R5cGVhaGVhZCcgcHJvamVjdC5pZCBhcyBwYXR1cmwlfXt7cGF0dXJsfGpzb259fSwKKworICAgICAgICBwcm9qZWN0QnVpbGRzVXJsOiB7JSB1cmwgJ3Byb2plY3RidWlsZHMnIHByb2plY3QuaWQgYXMgcGJ1cmwgJX17e3BidXJsfGpzb259fSwKKyAgICAgICAgcHJvamVjdElkIDoge3twcm9qZWN0LmlkfX0sCisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgcHJvamVjdElkIDogdW5kZWZpbmVkLAorICAgICAgICBwcm9qZWN0UGFnZVVybCA6IHVuZGVmaW5lZCwKKyAgICAgICAgcHJvamVjdE5hbWUgOiB1bmRlZmluZWQsCisgICAgICAgIHByb2plY3RJZCA6IHVuZGVmaW5lZCwKKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgIH07CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvYmFzZS5qcycgJX0iPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgICAgIC8qIFZhcnMgbmVlZGVkIGZvciBiYXNlLmpzICovCisgICAgICAgIHZhciBjdHggPSB7fTsKKyAgICAgICAgY3R4Lm51bVByb2plY3RzID0ge3twcm9qZWN0c3xsZW5ndGh9fTsKKyAgICAgICAgY3R4LmN1cnJlbnRVcmwgPSAie3tyZXF1ZXN0LnBhdGh8ZXNjYXBlanN9fSI7CisKKyAgICAgICAgYmFzZVBhZ2VJbml0KGN0eCk7CisgICAgICB9KTsKKyAgICA8L3NjcmlwdD4KKworeyUgYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQoreyUgZW5kYmxvY2sgJX0KKyAgICA8L2hlYWQ+CisKKzxib2R5IHN0eWxlPSJoZWlnaHQ6IDEwMCUiPgorCisgIHslIGNzcmZfdG9rZW4gJX0KKyAgPGRpdiBpZD0ibG9hZGluZy1ub3RpZmljYXRpb24iIGNsYXNzPSJhbGVydCBsZWFkIHRleHQtY2VudGVyIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICBMb2FkaW5nIDxpIGNsYXNzPSJmYS1wdWxzZSBpY29uLXNwaW5uZXIiPjwvaT4KKyAgPC9kaXY+CisKKyAgPGRpdiBpZD0iY2hhbmdlLW5vdGlmaWNhdGlvbiIgY2xhc3M9ImFsZXJ0IGxlYWQgYWxlcnQtaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgaWQ9ImhpZGUtYWxlcnQiPiZ0aW1lczs8L2J1dHRvbj4KKyAgICA8c3BhbiBpZD0iY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciPjwvc3Bhbj4KKyAgPC9kaXY+CisKKyAgICA8ZGl2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgICAgICAgIDxhIGNsYXNzPSJicmFuZCBsb2dvIiBocmVmPSIjIj48aW1nIHNyYz0ieyUgc3RhdGljICdpbWcvbG9nby5wbmcnICV9IiBjbGFzcz0iIiBhbHQ9IllvY3RvIGxvZ28gcHJvamVjdCIvPjwvYT4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iYnJhbmQiPgorICAgICAgICAgICAgPGEgaHJlZj0iLyI+VG9hc3RlcjwvYT4KKyAgICAgICAgICAgIHslIGlmIERFQlVHICV9CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1pbmZvLXNpZ24iIHRpdGxlPSI8c3Ryb25nPlRvYXN0ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbjwvc3Ryb25nPiIgZGF0YS1jb250ZW50PSI8ZGw+PGR0PkJyYW5jaDwvZHQ+PGRkPnt7VE9BU1RFUl9CUkFOQ0h9fTwvZGQ+PGR0PlJldmlzaW9uPC9kdD48ZGQ+e3tUT0FTVEVSX1JFVklTSU9OfX08L2RkPjwvZGw+Ij48L2k+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lICE9ICdsYW5kaW5nJyBhbmQgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSAhPSAnbmV3cHJvamVjdCcgJX0KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICA8bGkgIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgPT0gJ2FsbC1idWlsZHMnICV9CisgICAgICAgICAgICAgICAgY2xhc3M9ImFjdGl2ZSIKKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdhbGwtYnVpbGRzJyAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tdGFza3MiPjwvaT4KKyAgICAgICAgICAgICAgICBBbGwgYnVpbGRzCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGkgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSA9PSAnYWxsLXByb2plY3RzJyAgJX0KKyAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9PgorICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2FsbC1wcm9qZWN0cycgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWZvbGRlci1vcGVuIj48L2k+CisgICAgICAgICAgICAgICAgQWxsIHByb2plY3RzCisgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvbGF0ZXN0L3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLmh0bWwiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWJvb2siPjwvaT4KKyAgICAgICAgICAgICAgICBNYW51YWwKKyAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0IGRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAgcHVsbC1yaWdodCI+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBpZD0ibmV3LXByb2plY3QtYnV0dG9uIiBocmVmPSJ7JSB1cmwgJ25ld3Byb2plY3QnICV9Ij5OZXcgcHJvamVjdDwvYT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8IS0tIE5ldyBidWlsZCBwb3BvdmVyIC0tPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCBwdWxsLXJpZ2h0IiBpZD0ibmV3LWJ1aWxkLWJ1dHRvbiIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPgorICAgICAgICAgICAgICBOZXcgYnVpbGQKKyAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tY2FyZXQtZG93biI+PC9pPgorICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgbmV3LWJ1aWxkIG11bHRpLXNlbGVjdCI+CisgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8aDM+TmV3IGJ1aWxkPC9oMz4KKyAgICAgICAgICAgICAgICA8aDY+UHJvamVjdDo8L2g2PgorICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJwcm9qZWN0Ij4KKyAgICAgICAgICAgICAgICAgIHslIGlmIHByb2plY3QuaWQgJX0KKyAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsZWFkIiBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPnt7cHJvamVjdC5uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGVhZCIgaHJlZj0iIyI+PC9hPgorICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLXByb2plY3QtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJpbnB1dC1tZWRpdW0iIGlkPSJwcm9qZWN0LW5hbWUtaW5wdXQiIHBsYWNlaG9sZGVyPSJUeXBlIGEgcHJvamVjdCBuYW1lIiBhdXRvY29tcGxldGU9Im9mZiIgZGF0YS1taW5MZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIi8+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9InNhdmUtcHJvamVjdC1idXR0b24iIGNsYXNzPSJidG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iY2FuY2VsLWNoYW5nZS1wcm9qZWN0IiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8cD48YSBpZD0idmlldy1hbGwtcHJvamVjdHMiIGhyZWY9InslIHVybCAnYWxsLXByb2plY3RzJyAlfSI+VmlldyBhbGwgcHJvamVjdHM8L2E+PC9wPgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICA8cD5UaGlzIHByb2plY3QgY29uZmlndXJhdGlvbiBpcyBpbmNvbXBsZXRlLCBzbyB5b3UgY2Fubm90IHJ1biBidWlsZHMuPC9wPgorICAgICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0ieyUgaWYgcHJvamVjdC5pZCAlfXslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfXslIGVuZGlmICV9Ij5WaWV3IHByb2plY3QgY29uZmlndXJhdGlvbjwvYT48L3A+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0idGFyZ2V0cy1mb3JtIj4KKyAgICAgICAgICAgICAgICA8aDY+UmVjaXBlKHMpOjwvaDY+CisgICAgICAgICAgICAgICAgPGZvcm0+CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBidWlsZC10YXJnZXQtaW5wdXQiIHBsYWNlaG9sZGVyPSJUeXBlIGEgcmVjaXBlIG5hbWUiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLW1pbkxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiIGRpc2FibGVkLz4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidWlsZC1idXR0b24iIGRpc2FibGVkPkJ1aWxkPC9idXR0b24+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIDwvZGl2PgorCisKKyAgICA8L2Rpdj4KKyA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgdG9wLXBhZGRlZCI+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KK3slIGVuZGJsb2NrICV9Cis8L2Rpdj4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZGRldGFpbHBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmNhNTBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZGRldGFpbHBhZ2UuaHRtbApAQCAtMCwwICsxLDI5IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorPCEtLSBCcmVhZGNydW1icyAtLT4KKyAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIiBpZD0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICA8bGkgY2xhc3M9Im11dGVkIj57e2J1aWxkLnByb2plY3QubmFtZX19OjwvbGk+CisgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBidWlsZC5wcm9qZWN0LmlkICV9Ij5CdWlsZHM8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iPnt7YnVpbGQudGFyZ2V0X3NldC5hbGwuMC50YXJnZXR9fSB7JWlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9KCsge3tidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KXslZW5kaWYlfSAoe3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19KTwvYT48L2xpPgorICAgICAgICAgICAgeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9eyUgZW5kYmxvY2sgJX0KKyAgICAgICAgPC91bD4KKyAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgJCggZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaScpLmFwcGVuZCgnPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4nKTsKKyAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGk6bGFzdCcpLmFkZENsYXNzKCJhY3RpdmUiKTsKKyAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGk6bGFzdCA+IHNwYW4sICNicmVhZGNydW1iID4gbGk6Zmlyc3QgPiBzcGFuJykucmVtb3ZlKCk7CisgICAgICAgIH0pOworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2Rpdj4gPCEtLXNlY3Rpb24tLT4KKworICAgICAgICA8IS0tIEJlZ2luIGNvbnRhaW5lciAtLT4KKyAgICAgICAgeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9eyUgZW5kYmxvY2sgJX0KKyAgICAgICAgPCEtLSBFbmQgY29udGFpbmVyIC0tPgorCis8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRwYWdlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDFkZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkcGFnZS5odG1sCkBAIC0wLDAgKzEsODggQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKworIDxkaXYgY2xhc3M9IiI+Cis8IS0tIEJyZWFkY3J1bWJzIC0tPgorICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiIGlkPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0ibXV0ZWQiPnt7YnVpbGQucHJvamVjdC5uYW1lfX06PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGJ1aWxkLnByb2plY3QuaWQgJX0iPkJ1aWxkczwvYT48L2xpPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgeyUgYmxvY2sgcGFyZW50YnJlYWRjcnVtYiAlfQorICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgJ2J1aWxkZGFzaGJvYXJkJyBidWlsZC5wayV9Ij4KKyAgICAgICAgICAgICAgICB7e2J1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QuMC50YXJnZXR9fSB7JWlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9KCsge3tidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KXslZW5kaWYlfSAoe3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICB7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX17JSBlbmRibG9jayAlfQorICAgICAgICA8L3VsPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAkKCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpJykuYXBwZW5kKCc8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPicpOworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0JykuYWRkQ2xhc3MoImFjdGl2ZSIpOworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0ID4gc3BhbiwgI2JyZWFkY3J1bWIgPiBsaTpmaXJzdCA+IHNwYW4nKS5yZW1vdmUoKTsKKwkgICAgY29uc29sZS5sb2coImRvbmUiKTsKKyAgICAgICAgfSk7CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvZGl2PgorCisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKworICAgICAgICA8IS0tIGJlZ2luIGxlZnQgc2lkZWJhciBjb250YWluZXIgLS0+CisgICAgICAgIDxkaXYgaWQ9Im5hdiIgY2xhc3M9InNwYW4yIj4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1saXN0IHdlbGwiPgorICAgICAgICAgICAgICA8bGkKKyAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdidWlsZGRhc2hib2FyZCcgICV9CisgICAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9ID4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibmF2LXBhcmVudCIgaHJlZj0ieyUgdXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGsgJX0iPkJ1aWxkIHN1bW1hcnk8L2E+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLjAuaXNfaW1hZ2UgYW5kIGJ1aWxkLm91dGNvbWUgPT0gMCAlfQorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+SW1hZ2VzPC9saT4KKyAgICAgICAgICAgICAgICB7JSBibG9jayBuYXYtdGFyZ2V0ICV9CisgICAgICAgICAgICAgICAgICB7JSBmb3IgdCBpbiBidWlsZC5nZXRfc29ydGVkX3RhcmdldF9saXN0ICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQucGsgdC5wayAlfSI+e3t0LnRhcmdldH19PC9hPjxsaT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+QnVpbGQ8L2xpPgorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtY29uZmlndXJhdGlvbiAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnY29uZmlndXJhdGlvbicgYnVpbGQucGsgJX0iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LXRhc2tzICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0iPlRhc2tzPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1yZWNpcGVzICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdyZWNpcGVzJyBidWlsZC5wayAlfSI+UmVjaXBlczwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtcGFja2FnZXMgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+UGFja2FnZXM8L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWhlYWRlciI+UGVyZm9ybWFuY2U8L2xpPgorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtYnVpbGR0aW1lICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdidWlsZHRpbWUnIGJ1aWxkLnBrICV9Ij5UaW1lPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1jcHV1c2FnZSAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnY3B1dXNhZ2UnIGJ1aWxkLnBrICV9Ij5DUFUgdXNhZ2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LWRpc2tpbyAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnZGlza2lvJyBidWlsZC5wayAlfSI+RGlzayBJL088L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8IS0tIGVuZCBsZWZ0IHNpZGViYXIgY29udGFpbmVyIC0tPgorCisgICAgICAgIDwhLS0gQmVnaW4gcmlnaHQgY29udGFpbmVyIC0tPgorICAgICAgICB7JSBibG9jayBidWlsZGluZm9tYWluICV9eyUgZW5kYmxvY2sgJX0KKyAgICAgICAgPCEtLSBFbmQgcmlnaHQgY29udGFpbmVyIC0tPgorCisKKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKworeyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0YnVpbGRzcGFnZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0YnVpbGRzcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWNkMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RidWlsZHNwYWdlLmh0bWwKQEAgLTAsMCArMSwxNSBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworeyUgaW5jbHVkZSAicHJvamVjdHRvcGJhci5odG1sIiAlfQorCis8IS0tIEJlZ2luIG1haW4gcGFnZSBjb250YWluZXIgLS0+Cis8ZGl2PgorICAgIHslIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfXslIGVuZGJsb2NrICV9Cis8L2Rpdj4KKzwhLS0gRW5kIG1haW4gY29udGFpbmVyIC0tPgorCit7JSBlbmRibG9jayAlfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4ZTBiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdHBhZ2UuaHRtbApAQCAtMCwwICsxLDQwIEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCit7JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CisgICAgICQoIiNjb25maWctbmF2IC5uYXYgbGkgYSIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09PSAkKHRoaXMpLmF0dHIoJ2hyZWYnKSkKKyAgICAgICAgICQodGhpcykucGFyZW50KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpOworICAgICAgIGVsc2UKKyAgICAgICAgICQodGhpcykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOworICAgICB9KTsKKworICAgICAkKCIjdG9wYmFyLWNvbmZpZ3VyYXRpb24tdGFiIikuYWRkQ2xhc3MoImFjdGl2ZSIpCisgIH0pOworPC9zY3JpcHQ+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgIDwhLS0gb25seSBvbiBjb25maWcgcGFnZXMgLS0+CisgIDxkaXYgaWQ9ImNvbmZpZy1uYXYiIGNsYXNzPSJzcGFuMiI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LWxpc3Qgd2VsbCI+CisgICAgICA8bGk+PGEgY2xhc3M9Im5hdi1wYXJlbnQiIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgorICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5Db21wYXRpYmxlIG1ldGFkYXRhPC9saT4KKzwhLS0gIDxsaT48YSBocmVmPSJhbGwtaW1hZ2UtcmVjaXBlcy5odG1sIj5JbWFnZSByZWNpcGVzPC9hPjwvbGk+IC0tPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdHRhcmdldHMnIHByb2plY3QuaWQgJX0iPlJlY2lwZXM8L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RtYWNoaW5lcycgcHJvamVjdC5pZCAlfSI+TWFjaGluZXM8L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iPkxheWVyczwvYT48L2xpPgorICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5FeHRyYSBjb25maWd1cmF0aW9uPC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3Rjb25mJyBwcm9qZWN0LmlkICV9Ij5CaXRCYWtlIHZhcmlhYmxlczwvYT48L2xpPgorICAgIDwvdWw+CisgIDwvZGl2PgorICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgIHslIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfXslIGVuZGJsb2NrICV9CisgIDwvZGl2PgorPC9kaXY+CisKK3slIGVuZGJsb2NrICV9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfYm90dG9tLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX2JvdHRvbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMDIzZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX2JvdHRvbS5odG1sCkBAIC0wLDAgKzEsOTQgQEAKKyAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+CisKKzwhLS0gU2hvdyBwYWdpbmF0aW9uIGNvbnRyb2xzIC0tPgorPGRpdiBjbGFzcz0icGFnaW5hdGlvbiBwYWdpbmF0aW9uLWNlbnRlcmVkIj4KKyAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICBTaG93aW5nIHt7b2JqZWN0cy5zdGFydF9pbmRleH19IHRvIHt7b2JqZWN0cy5lbmRfaW5kZXh9fSBvdXQgb2Yge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IGVudHJpZXMuCisgICA8L2Rpdj4KKworICAgPHVsIGNsYXNzPSJwYWdpbmF0aW9uIiBzdHlsZT0iZGlzcGxheTogYmxvY2staW5saW5lIj4KK3slaWYgb2JqZWN0cy5oYXNfcHJldmlvdXMgJX0KKyAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7b2JqZWN0cy5wcmV2aW91c19wYWdlX251bWJlcn19fSkiPiZsYXF1bzs8L2E+PC9saT4KK3slZWxzZSV9CisgIDxsaSBjbGFzcz0iZGlzYWJsZWQiPjxhIGhyZWY9IiMiPiZsYXF1bzs8L2E+PC9saT4KK3slZW5kaWYlfQoreyUgZm9yIGkgaW4gb2JqZWN0cy5wYWdlX3JhbmdlICV9CisgIDxsaXslaWYgaSA9PSBvYmplY3RzLm51bWJlciAlfSBjbGFzcz0iYWN0aXZlIiB7JWVuZGlmJX0+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tpfX19KSI+e3tpfX08L2E+PC9saT4KK3slIGVuZGZvciAlfQoreyVpZiBvYmplY3RzLmhhc19uZXh0JX0KKyAgPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOnt7b2JqZWN0cy5uZXh0X3BhZ2VfbnVtYmVyfX19KSI+JnJhcXVvOzwvYT48L2xpPgoreyVlbHNlJX0KKyAgPGxpIGNsYXNzPSJkaXNhYmxlZCI+PGEgaHJlZj0iIyI+JnJhcXVvOzwvYT48L2xpPgoreyVlbmRpZiV9CisgIDwvdWw+CisgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUiPgorICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgIHslIGVuZHdpdGggJX0KKyAgICA8L3NlbGVjdD4KKyAgIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gVXBkYXRlIHBhZ2UgZGlzcGxheSBzZXR0aW5ncyAtLT4KKworPHNjcmlwdD4KKyAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKworICAgIC8vIHdlIGxvYWQgY29va2llcyBmb3IgdGhlIGNvbHVtbiBkaXNwbGF5CisgICAgc2F2ZSA9ICQuY29va2llKCdfZGlzcGxheWNvbHNfe3tvYmplY3RuYW1lfX0nKTsKKyAgICBpZiAoc2F2ZSAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgc2V0dGluZyA9IHNhdmUuc3BsaXQoJzsnKTsKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBzZXR0aW5nLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc2V0dGluZ1tpXS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgc3BsaXRsaXN0ID0gc2V0dGluZ1tpXS5zcGxpdCgnOicpOworICAgICAgICAgICAgICAgIGlkID0gc3BsaXRsaXN0WzBdLCB2ID0gc3BsaXRsaXN0WzFdOworICAgICAgICAgICAgICAgIGlmICh2ID09ICd0cnVlJykgeworICAgICAgICAgICAgICAgICAgICAkKCcuY2hieHRvZ2dsZSMnK2lkKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkKCcuY2hieHRvZ2dsZSMnK2lkKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGxvYWQgZGF0YSBmb3IgbnVtYmVyIG9mIGVudHJpZXMgdG8gYmUgZGlzcGxheWVkIG9uIHBhZ2UKKyAgICBpZiAoe3tyZXF1ZXN0LkdFVC5jb3VudH19ICE9ICIiKSB7CisgICAgICBwYWdlc2l6ZSA9IHt7cmVxdWVzdC5HRVQuY291bnR9fTsKKyAgICB9CisKKyAgICAkKCcucGFnZXNpemUgb3B0aW9uJykucHJvcCgnc2VsZWN0ZWQnLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCdbdmFsdWU9IicgKyBwYWdlc2l6ZSArICciXScpCisgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NlbGVjdGVkJywgdHJ1ZSk7CisKKyAgICAkKCcuY2hieHRvZ2dsZScpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICBzaG93aGlkZVRhYmxlQ29sdW1uKCQodGhpcykuYXR0cignaWQnKSwgJCh0aGlzKS5pcygnOmNoZWNrZWQnKSkKKyAgICB9KTsKKworICAgIC8vdHVybiBlZGl0IGNvbHVtbnMgZHJvcGRvd24gaW50byBhIG11bHRpLXNlbGVjdCBtZW51CisgICAgICQoJy5kcm9wZG93bi1tZW51IGlucHV0LCAuZHJvcGRvd24tbWVudSBsYWJlbCcpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9KTsKKworICAgIC8vc2hvdyB0b29sdGlwIHdpdGggYXBwbGllZCBmaWx0ZXIKKyAgICAkKCcjZmlsdGVyZWQnKS50b29sdGlwKHtjb250YWluZXI6J3RhYmxlJywgcGxhY2VtZW50Oidib3R0b20nLCBkZWxheTp7aGlkZToxNTAwfSwgaHRtbDp0cnVlfSk7CisKKyAgICAvL3Byb2dyZXNzIGJhciB0b29sdGlwCisgICAgJCgnLnByb2dyZXNzLCAubGVhZCBzcGFuJykudG9vbHRpcCh7Y29udGFpbmVyOid0YWJsZScsIHBsYWNlbWVudDondG9wJ30pOworCisgICAgJCgiLnBhZ2VzaXplIikuY2hhbmdlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmVsb2FkX3BhcmFtcyh7ImNvdW50IjokKHRoaXMpLnZhbCgpfSk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0PgorCis8IS0tIG1vZGFsIGZpbHRlciBib3hlcyAtLT4KKyAgIHslIGZvciB0YyBpbiB0YWJsZWNvbHMgJX17JSBpZiB0Yy5maWx0ZXIgJX17JSB3aXRoIG9iamVjdG5hbWU9b2JqZWN0bmFtZSBmPXRjLmZpbHRlciAlfQorICAgICAgICB7JSBpbmNsdWRlICJmaWx0ZXJzbmlwcGV0Lmh0bWwiICV9CisgICB7JSBlbmR3aXRoICV9eyUgZW5kaWYgJX0geyUgZW5kZm9yICV9Cis8IS0tIGVuZCBtb2RhbHMgLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV90b3AuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VkZTY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV90b3AuaHRtbApAQCAtMCwwICsxLDIzOSBAQAoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorPCEtLSBjb21wb25lbnQgdG8gZGlzcGxheSBhIGdlbmVyaWMgdGFibGUgLS0+CisgICAgPHNjcmlwdD4KKworICAgIC8vCisgICAgLy8gbW9zdCBvZiB0aGUgZm9sbG93aW5nIGphdmFzY3JpcHQgaXMgZm9yIG1hbmFnaW5nIHRoZSAnRWRpdCBDb2x1bW5zJworICAgIC8vIHBvcC11cCBkaWFsb2cgYW5kIGFjdGlvbnMuIHRoZSBpZGVhIGlzIHRoYXQgdGhlcmUgYXJlIDIgdHlwZXMKKyAgICAvLyBvZiBhY3Rpb25zOiBpbW1lZGlhdGUgLSBwZXJmb3JtZWQgd2hpbGUgdGhlIGRpYWxvZyBpcyBzdGlsbAorICAgIC8vIHZpc2libGUgLSBoaWRlL3Nob3cgY29sdW1ucywgYW5kIGRlbGF5ZWQgLSBwZXJmb3JtZWQgd2hlbiB0aGUKKyAgICAvLyBkaWFsb2cgYmVjb21lcyBpbnZpc2libGUgLSBhbnkgcmVzb3J0aW5nIGlmIG5lY2Vzc2FyeS4KKyAgICAvLworICAgIC8vIFdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuLCBhbiBpbnRlcnZhbCB0aW1lciBpcyBzZXQgdXAgdG8KKyAgICAvLyBkZXRlcm1pbmUgaWYgdGhlIGRpYWxvZyBpcyBzdGlsbCB2aXNpYmxlLiB3aGVuIHRoZSBkaWFsb2cKKyAgICAvLyBjbG9zZXMgLSBnb2VzIGludmlzaWJsZSwgdGhlIGRlbGF5ZWQgYWN0aW9ucyBhcmUgcGVyZm9ybWVkLgorICAgIC8vCisgICAgLy8gdGhlIGludGVydmFsIHRpbWVyIGFuZCBpbnRlcnJ1cHQgaGFuZGxlciBpcyBhIHdheSBvZiBzaW11bGF0aW5nCisgICAgLy8gYW4gb25jbG9zZSBldmVudC4gdGhlcmUgaXMgcHJvYmFibHkgYSBzaW1wbGVyIHdheSB0byBkbyB0aGlzCisgICAgLy8gaG93ZXZlciB0aGUgcG9wLXVwIHdpbmRvdyBpZCB3YXMgZWx1c2l2ZS4KKyAgICAvLworCisgICAgdmFyIGVkaXRDb2xUaW1lcjsKKyAgICB2YXIgZWRpdENvbEFjdGlvbjsKKworICAgIC8vCisgICAgLy8gdGhpcyBpcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIG9mIHRoZSBpbnRlcnZhbCB0aW1lb3V0LgorICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGlhbG9nIGlzIHZpc2libGUuIGlmIHRoZSBkaWFsb2cKKyAgICAvLyBoYXMgZ29uZSBpbnZpc2libGUgc2luY2UgdGhlIGxhc3QgY2hlY2ssIHRha2UgYW55IGRlbGF5ZWQKKyAgICAvLyBhY3Rpb25zIGluZGljYXRlZCBpbiB0aGUgYWN0aW9uIGxpc3QgYW5kIGNsZWFyIHRoZSB0aW1lci4KKyAgICAvLworCisgICAgZnVuY3Rpb24gY2hlY2tWaXNpYmxlKCApIHsKKyAgICAgICAgZWRpdGNvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnZWRpdGNvbCcgKTsKKyAgICAgICAgaWYgKCBlZGl0Y29sLm9mZnNldFdpZHRoIDw9IDAgKSB7CisgICAgICAgICAgICBjbGVhckludGVydmFsKCBlZGl0Q29sVGltZXIgKTsKKyAgICAgICAgICAgIGVkaXRDb2xUaW1lciA9IGZhbHNlOworICAgICAgICAgICAgaGlkZXNob3dDb2x1bW5zKCApOworICAgICAgICAgICAgZWRpdENvbEFjdGlvbiA9IFsgXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbHRlclRhYmxlUm93cyh0ZXN0KSB7CisgICAgICAgIGlmICh0ZXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciByID0gdGVzdC5zcGxpdCgvWyAsXSsvKS5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG5ldyBSZWdFeHAoZSwgJ2knKSB9KTsKKyAgICAgICAgICAgICQoJ3RyLmRhdGEnKS5tYXAoIGZ1bmN0aW9uIChpLCBlbCkgeworICAgICAgICAgICAgICAgICghIHIubWFwKGZ1bmN0aW9uIChqKSB7IHJldHVybiBqLnRlc3QoJChlbCkuaHRtbCgpKX0pLnJlZHVjZShmdW5jdGlvbiAoYywgcCkgeyByZXR1cm4gYyAmJiBwO30gKSkgPyAkKGVsKS5oaWRlKCkgOiAkKGVsKS5zaG93KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICQoJ3RyLmRhdGEnKS5zaG93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGluZGljYXRlZCB1cmwgYXJnLgorICAgIC8vIHRoaXMgaXMgbmVlZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVzb3J0CisgICAgLy8gaXMgbmVjZXNzYXJ5LiBpdCBsb29rcyBsaWtlIGEgbG90IG9mIGdvcnAgc3R1ZmYKKyAgICAvLyBidXQgaXRzIGFjdHVhbGx5IHByZXR0eSBzaW1wbGUuCisgICAgLy8KKworICAgIGZ1bmN0aW9uIGdldFVSTFBhcmFtZXRlciggbmFtZSApIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgobmV3IFJlZ0V4cCgnWz98Jl0nICsgbmFtZSArICc9JyArCisgICAgICAgICAgJyhbXiY7XSs/KSgmfCN8O3wkKScpLmV4ZWMobG9jYXRpb24uc2VhcmNoKXx8WywiIl0pWzFdLnJlcGxhY2UoL1wrL2csCisgICAgICAgICAgJyUyMCcpKXx8bnVsbAorICAgIH0KKworICAgIC8vCisgICAgLy8gd2hlbiB0aGUgZGlhbG9nIGJveCBnb2VzIGludmlzaWJsZQorICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGludGVycHJldAorICAgIC8vIHRoZSBhY3Rpb24gbGlzdCBhbmQgdGFrZSBhbnkgZGVsYXllZCBhY3Rpb25zIG5lY2Vzc2FyeS4KKyAgICAvLyB0aGUgZWRpdENvbEFjdGlvbiBsaXN0IGlzIGEgaGFzaCB0YWJsZSB3aXRoCisgICAgLy8gdGhlIGNvbHVtbiBuYW1lIGFzIHRoZSBoYXNoIGtleSwgdGhlIGhhc2ggdmFsdWUKKyAgICAvLyBpcyBhIDIgZWxlbWVudCBsaXN0LiB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIGZsYWcKKyAgICAvLyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyBvbiBvciBvZmYuIHRoZQorICAgIC8vIDJuZCBlbGVtZW50IGlzIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgdGhlIGNvbHVtbi4KKyAgICAvLworCisgICAgZnVuY3Rpb24gaGlkZXNob3dDb2x1bW5zKCApIHsKKyAgICAgICAgZm9yKCB2YXIgayBpbiBlZGl0Q29sQWN0aW9uICkgeworICAgICAgICAgICAgc2hvd2hpZGVEZWxheWVkVGFibGVBY3Rpb24oIGssIGVkaXRDb2xBY3Rpb25bIGsgXVsgMCBdLCBlZGl0Q29sQWN0aW9uWyBrIF1bIDEgXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgcGVyZm9ybXMgdGhlIGRlbGF5ZWQgdGFibGUgYWN0aW9ucworICAgIC8vIG5hbWVseSBhbnkgcmVzb3J0aW5nIGlmIG5lY2Vzc2FyeQorICAgIC8vCisKKyAgICBmdW5jdGlvbiBzaG93aGlkZURlbGF5ZWRUYWJsZUFjdGlvbiggY2xuYW1lLCBzaCwgb3JkZXJrZXkgKSB7CisgICAgICAgIGlmICggIXNoICkgeworICAgICAgICAgICAgcCA9IGdldFVSTFBhcmFtZXRlciggIm9yZGVyYnkiICkuc3BsaXQoICI6IiApWyAwIF07CisgICAgICAgICAgICBpZiAoIHAgPT0gb3JkZXJrZXkgKSB7CisgICAgICAgICAgICAgICAgcmVsb2FkX3BhcmFtcyh7ICdvcmRlcmJ5JyA6ICd7e2RlZmF1bHRfb3JkZXJieX19J30pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHBlcmZvcm1zIHRoZSBpbW1lZGlhdGUgdGFibGUgYWN0aW9ucworICAgIC8vIG5hbWVseSBhbnkgY29sdW1zIHRoYXQgbmVlZCB0byBiZSBoaWRkZW4vc2hvd24KKyAgICAvLworCisgICAgZnVuY3Rpb24gc2hvd2hpZGVJbW1lZGlhdGVUYWJsZUFjdGlvbiggY2xuYW1lLCBzaCwgb3JkZXJrZXkgKSB7CisgICAgICAgIGlmICggc2ggKSB7CisgICAgICAgICAgICAkKCAnLicgKyBjbG5hbWUgKS5zaG93KCAxMDAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICQoICcuJyArIGNsbmFtZSApLmhpZGUoIDEwMCApOworICAgICAgICB9CisKKwkvLyBzYXZlIGNvb2tpZSBmb3IgYWxsIGNoZWNrYm94ZXMKKwlzYXZlID0gJyc7CisJJCggJy5jaGJ4dG9nZ2xlJyApLmVhY2goZnVuY3Rpb24oICkgeworICAgICAgICAgICAgaWYgKCAkKCB0aGlzICkuYXR0ciggJ2lkJyApICE9IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBzYXZlICs9ICc7JyArICQoIHRoaXMgKS5hdHRyKCAnaWQnICkgKyc6JysgJCggdGhpcyApLmlzKCAnOmNoZWNrZWQnICkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisJJC5jb29raWUoICdfZGlzcGxheWNvbHNfe3tvYmplY3RuYW1lfX0nLCBzYXZlICk7CisJc2F2ZSA9ICcnOworICAgIH0KKworICAgIC8vCisgICAgLy8gdGhpcyBpcyB0aGUgb25jbGljayBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIGNoZWNrIGJveAorICAgIC8vIGl0ZW1zIGluIGVkaXQgY29sdW1ucyBkaWFsb2cKKyAgICAvLworCisgICAgZnVuY3Rpb24gc2hvd2hpZGVUYWJsZUNvbHVtbiggY2xuYW1lLCBzaCwgb3JkZXJrZXkgKSB7CisgICAgICAgIGVkaXRjb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2VkaXRjb2wnICk7CisgICAgICAgIGlmICggZWRpdGNvbC5vZmZzZXRXaWR0aCA8PSAwICkgeworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gdGhpcyBwYXRoIGlzIHRha2VuIHdoZW4gdGhlIHBhZ2UgaXMgZmlyc3QKKyAgICAgICAgICAgIC8vIGdldHRpbmcgaW5pdGlhbGl6ZWQgLSBubyBkaWFsb2cgdmlzaWJsZSwKKyAgICAgICAgICAgIC8vIHBlcmZvcm0gYm90aCB0aGUgaW1tZWRpYXRlIGFuZCBkZWxheWVkIGFjdGlvbnMKKyAgICAgICAgICAgIC8vCisKKyAgICAgICAgICAgIHNob3doaWRlSW1tZWRpYXRlVGFibGVBY3Rpb24oIGNsbmFtZSwgc2gsIG9yZGVya2V5ICk7CisgICAgICAgICAgICBzaG93aGlkZURlbGF5ZWRUYWJsZUFjdGlvbiggY2xuYW1lLCBzaCwgb3JkZXJrZXkgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoICFlZGl0Q29sVGltZXIgKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIGEgdGltZXIgYWN0aXZlIHNvIHNldCBvbmUgdXAKKyAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGUgYWN0aW9uIGxpc3QKKyAgICAgICAgICAgIC8vCisKKyAgICAgICAgICAgIGVkaXRDb2xUaW1lciA9IHNldEludGVydmFsKCBjaGVja1Zpc2libGUsIDI1MCApOworICAgICAgICAgICAgZWRpdENvbEFjdGlvbiA9IFsgXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIHNhdmUgdGhlIGFjdGlvbiB0byBiZSB0YWtlbiB3aGVuIHRoZSBkaWFsb2cgY2xvc2VzCisgICAgICAgIC8vCisKKyAgICAgICAgZWRpdENvbEFjdGlvblsgY2xuYW1lIF0gPSBbIHNoLCBvcmRlcmtleSBdOworICAgICAgICBzaG93aGlkZUltbWVkaWF0ZVRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApOworICAgIH0KKworICAgIDwvc2NyaXB0PgorCis8IS0tIGNvbnRyb2wgaGVhZGVyIC0tPgorPGRpdiBjbGFzcz0ibmF2YmFyIj4KKyAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibmF2YmFyLXNlYXJjaCBpbnB1dC1hcHBlbmQgcHVsbC1sZWZ0IiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7JWlmIG9iamVjdF9zZWFyY2hfZGlzcGxheSAlfXt7b2JqZWN0X3NlYXJjaF9kaXNwbGF5fX17JWVsc2UlfXt7b2JqZWN0bmFtZX19eyVlbmRpZiV9IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JWVuZGlmJX0KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yZGVyYnkiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULm9yZGVyYnl9fSI+CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0iMSI+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGlkPSJzZWFyY2gtYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgoreyUgaWYgdGFibGVjb2xzICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImVkaXQtY29sdW1ucy1idXR0b24iIGNsYXNzPSJidG4gZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkVkaXQgY29sdW1ucworICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKzwhLS0KKwl7e3RhYmxlY29sc3xzb3J0Y29sc319CistLT4KKyAgICAgICAgICAgICAgICA8dWwgaWQ9J2VkaXRjb2wnIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgICAgICAgICAgIHslIGZvciBpIGluIHRhYmxlY29sc3xzb3J0Y29scyAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgeyUgaWYgbm90IGkuY2xjbGFzcyAlfSBjbGFzcz0iY2hlY2tib3ggbXV0ZWQiIHslZWxzZSV9IGNsYXNzPSJjaGVja2JveCIgeyVlbmRpZiV9PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImNoYnh0b2dnbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIGkuY2xjbGFzcyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Int7aS5jbGNsYXNzfX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iY3R7e2kubmFtZX19IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgbm90IGkuaGlkZGVuICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD0iY2hlY2tlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0ic2hvd2hpZGVUYWJsZUNvbHVtbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2lkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5pcygnOmNoZWNrZWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBpLm9yZGVyaWNvbiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7e2kub3JkZXJrZXl9fScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslZWxzZSV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkIGRpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Lz4gICB7e2kubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGl2PgoreyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlci12ZXJ0aWNhbCI+PC9zcGFuPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICAgICAgICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUiPgorICAgICAgICAgICAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgICAgICAgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PiA8IS0tIG5hdmJhci1pbm5lciAtLT4KKzwvZGl2PgorCis8IS0tIHRoZSBhY3R1YWwgcm93cyBvZiB0aGUgdGFibGUgLS0+CisgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Im90YWJsZSI+CisgICAgPHRoZWFkPgorICAgICAgICA8IS0tIFRhYmxlIGhlYWRlciByb3c7IGdlbmVyYXRlZCBmcm9tICJ0YWJsZWNvbHMiIGVudHJ5IGluIHRoZSBjb250ZXh0IGRpY3QgLS0+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIHslIGZvciB0YyBpbiB0YWJsZWNvbHMgJX08dGggY2xhc3M9InslaWYgdGMuZGNsYXNzJX17e3RjLmRjbGFzc319eyVlbmRpZiV9IHslIGlmIHRjLmNsY2xhc3MgJX17e3RjLmNsY2xhc3N9fXslIGVuZGlmICV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmZpZWxkJX08YSB7JWlmIHRjLm9yZGVyaWNvbiV9IGNsYXNzPSJzb3J0ZWQiIHslZW5kaWYlfWhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOiAxLCAnb3JkZXJieScgOiAne3t0Yy5vcmRlcmZpZWxkfX0nIH0pIj57e3RjLm5hbWV9fTwvYT57JWVsc2UlfTxzcGFuIGNsYXNzPSJtdXRlZCI+e3t0Yy5uYW1lfX08L3NwYW4+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmljb24lfSA8aSBjbGFzcz0iaWNvbi1jYXJldC17e3RjLm9yZGVyaWNvbn19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5maWx0ZXIlfTxkaXYgY2xhc3M9ImJ0bi1ncm91cCBwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpbHRlcl97e3RjLmZpbHRlci5jbGFzc319IiByb2xlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLW1pbmkgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIlfXt7dGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfaWNvbjpyZXF1ZXN0LkdFVC5maWx0ZXJ9fSB7JWVuZGlmJX0iIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCB0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF90b29sdGlwOnJlcXVlc3QuR0VULmZpbHRlciAlfSB0aXRsZT0iPHA+e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF90b29sdGlwOnJlcXVlc3QuR0VULmZpbHRlcn19PC9wPjxwPjxhIGNsYXNzPSdidG4gYnRuLXNtYWxsIGJ0bi1wcmltYXJ5JyBocmVmPWphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J2ZpbHRlcic6Jyd9KT5TaG93IGFsbCB7JSBpZiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXkgJX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheX19eyUgZWxzZSAlfXt7b2JqZWN0bmFtZX19eyUgZW5kaWYgJX08L2E+PC9wPiIgeyVlbmRpZiV9IGRhdGEtdG9nZ2xlPSJtb2RhbCI+IDxpIGNsYXNzPSJpY29uLWZpbHRlciBmaWx0ZXJlZCI+PC9pPiA8L2E+CisgICAgICAgICAgICAgICAgPC9kaXY+eyVlbmRpZiV9CisgICAgICAgICAgICA8L3RoPnslIGVuZGZvciAlfQorICAgICAgICA8L3RyPgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcF9sYXllcnMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wX2xheWVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjA5MWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcF9sYXllcnMuaHRtbApAQCAtMCwwICsxLDUgQEAKK3slIGV4dGVuZHMgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKworeyVibG9jayBjdXN0b21idXR0b25zICV9CisgICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0ieyUgdXJsICdpbXBvcnRsYXllcicgcHJvamVjdC5pZCAlfSIgc3R5bGU9Im1hcmdpbi1yaWdodDo1cHg7Ij5JbXBvcnQgbGF5ZXI8L2E+Cit7JWVuZGJsb2NrJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iZmlsZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JmaWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmNTk0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iZmlsZS5odG1sCkBAIC0wLDAgKzEsMjQgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KKworeyUgYmxvY2sgcGFnZXRpdGxlICV9RmlsZXMgZm9yIHBhY2thZ2Uge3tvYmplY3RzLjAuYnBhY2thZ2UubmFtZX19IHslIGVuZGJsb2NrICV9Cit7JSBibG9jayBwYWdldGFibGUgJX0KKyAgICB7JSBpZiBub3Qgb2JqZWN0cyAlfQorICAgICAgICA8cD5ObyBmaWxlcyB3ZXJlIHJlY29yZGVkIGZvciB0aGlzIHBhY2thZ2UhPC9wPgorICAgIHslIGVsc2UgJX0KKworICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRoPk5hbWU8L3RoPgorICAgICAgICAgICAgPHRoPlNpemUgKEJ5dGVzKTwvdGg+CisgICAgICAgICAgICA8L3RyPgorCisgICAgICAgICAgICB7JSBmb3IgZmlsZSBpbiBvYmplY3RzICV9CisKKyAgICAgICAgICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgICAgICA8dGQ+e3tmaWxlLnBhdGh9fTwvdGQ+CisgICAgICAgICAgICA8dGQ+e3tmaWxlLnNpemV9fTwvdGQ+CisKKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgeyUgZW5kaWYgJX0KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icGFja2FnZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JwYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3NWZlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+UGFja2FnZXM8L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgbmF2LXBhY2thZ2VzICV9CisgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+UGFja2FnZXM8L2E+PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKzxkaXYgY2xhc3M9InNwYW4xMCI+CisKK3slIGlmIG5vdCByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG5vdCByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG5vdCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAlfQorCis8IS0tIEVtcHR5IC0gbm8gZGF0YSBpbiBkYXRhYmFzZSAtLT4KKzxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICA8aDE+CisgICAgICAgIFBhY2thZ2VzCisgICAgPC9oMT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIj4KKyAgICA8c3Ryb25nPk5vIHBhY2thZ2VzIHdlcmUgYnVpbHQuPC9zdHJvbmc+IEhvdyBkaWQgdGhpcyBoYXBwZW4/IFdlbGwsIEJpdEJha2UgcmV1c2VzIGFzIG11Y2ggc3R1ZmYgYXMgcG9zc2libGUuCisgICAgSWYgYWxsIG9mIHRoZSBwYWNrYWdlcyBuZWVkZWQgd2VyZSBhbHJlYWR5IGJ1aWx0IGFuZCBhdmFpbGFibGUgaW4geW91ciBidWlsZCBpbmZyYXN0cnVjdHVyZSwgQml0QmFrZQorICAgIHdpbGwgbm90IHJlYnVpbGQgYW55IG9mIHRoZW0uIFRoaXMgbWlnaHQgYmUgc2xpZ2h0bHkgY29uZnVzaW5nLCBidXQgaXQgZG9lcyBtYWtlIGV2ZXJ5dGhpbmcgZmFzdGVyLgorPC9kaXY+CisKK3slIGVsc2UgJX0KKworPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICA8aDE+CisgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICAlfQorICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHBhY2thZ2V7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAlfQorICAgICAgTm8gcGFja2FnZXMgZm91bmQKKyAgeyVlbHNlJX0KKyAgICAgIFBhY2thZ2VzCisgIHslZW5kaWYlfQorICA8L2gxPgorPC9kaXY+CisKKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tyZXF1ZXN0LkdFVC5zZWFyY2h9fSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgcGFja2FnZXM8L2J1dHRvbj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgPC9kaXY+CisgIDwvZGl2PgorCisgIHslIGVsc2UgJX0KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCisgICAgeyUgZm9yIHBhY2thZ2UgaW4gb2JqZWN0cyAlfQorCisgICAgPHRyIGNsYXNzPSJkYXRhIj4KKworICAgICAgICA8IS0tIFBhY2thZ2UgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV9uYW1lIj48YSBocmVmPSJ7JSB1cmwgInBhY2thZ2VfYnVpbHRfZGV0YWlsIiBidWlsZC5wayBwYWNrYWdlLnBrICV9Ij57e3BhY2thZ2UubmFtZX19PC9hPjwvdGQ+CisgICAgICAgIDwhLS0gUGFja2FnZSBWZXJzaW9uIC0tPgorICAgICAgICA8dGQgY2xhc3M9InBhY2thZ2VfdmVyc2lvbiI+eyVpZiBwYWNrYWdlLnZlcnNpb24lfTxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS52ZXJzaW9ufX0te3twYWNrYWdlLnJldmlzaW9ufX08L2E+eyVlbmRpZiV9PC90ZD4KKyAgICAgICAgPCEtLSBQYWNrYWdlIFNpemUgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZSBzaXplY29sIj57e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KKyAgICAgICAgPCEtLSBMaWNlbnNlIC0tPgorICAgICAgICA8dGQgY2xhc3M9ImxpY2Vuc2UiPnt7cGFja2FnZS5saWNlbnNlfX08L3RkPgorCisgICAgICAgIHslaWYgcGFja2FnZS5yZWNpcGUlfQorICAgICAgICAgICAgPCEtLSBSZWNpcGUgLS0+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbmFtZSI+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHBhY2thZ2UucmVjaXBlLnBrICV9Ij57e3BhY2thZ2UucmVjaXBlLm5hbWV9fTwvYT48L3RkPgorICAgICAgICAgICAgPCEtLSBSZWNpcGUgVmVyc2lvbiAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX192ZXJzaW9uIj48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcGFja2FnZS5yZWNpcGUucGsgJX0iPnt7cGFja2FnZS5yZWNpcGUudmVyc2lvbn19PC9hPjwvdGQ+CisKKyAgICAgICAgICAgIDwhLS0gTGF5ZXIgLS0+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L3RkPgorICAgICAgICAgICAgPCEtLSBMYXllciBicmFuY2ggLS0+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIj57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNofX08L3RkPgorICAgICAgICAgICAgPCEtLSBMYXllciBjb21taXQgLS0+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCI+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgICAgICA8bGk+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdH19PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8IS0tIExheWVyIGRpcmVjdG9yeSAtLT4KKyAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19uYW1lIj48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX3ZlcnNpb24iPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIj48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQiPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbG9jYWxfcGF0aCI+PC90ZD4KKyAgICAgICAgeyVlbmRpZiV9CisKKyAgICA8L3RyPgorICAgIHslIGVuZGZvciAlfQorCisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KKyAgeyUgZW5kaWYgJX0geyMgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgI30KK3slIGVuZGlmICV9IHsjIEVtcHR5ICN9Cis8L2Rpdj4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnJ0YXJnZXRzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnJ0YXJnZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViZDA1OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icnRhcmdldHMuaHRtbApAQCAtMCwwICsxLDIwIEBACis8c3BhbiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIKKyAgICB7JSBpZiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudCA+IDEgJX0KKyAgICAgICAgdGl0bGU9IlRhcmdldHM6CisgICAgICAgIHslIGZvciB0YXJnZXQgaW4gYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwgJX0KKyAgICAgICAgICAgIHslIGlmIHRhcmdldC50YXNrICV9CisgICAgICAgICAgICAgICAge3t0YXJnZXQudGFyZ2V0fX06e3t0YXJnZXQudGFza319CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAge3t0YXJnZXQudGFyZ2V0fX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslZW5kZm9yJX0iCisgICAgeyVlbmRpZiV9PgorICAgIHslIGlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLjAudGFzayAlfQorICAgICAgICB7e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLjAudGFyZ2V0fX06e3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC4wLnRhc2t9fQorICAgIHslIGVsc2UgJX0KKyAgICAgICAgIHt7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXJnZXR9fQorICAgIHslIGVuZGlmICV9CisgICAgeyUgaWYgYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuY291bnQgPiAxICV9CisgICAgICAgICgrIHt7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSkKKyAgICB7JSBlbmRpZiAlfQorPC9zcGFuPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkZGFzaGJvYXJkLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRkYXNoYm9hcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWI4ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkZGFzaGJvYXJkLmh0bWwKQEAgLTAsMCArMSwzMDcgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgcGFyZW50YnJlYWRjcnVtYiAlfQore3tidWlsZC5nZXRfc29ydGVkX3RhcmdldF9saXN0LjAudGFyZ2V0fX0geyVpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfSgrIHt7YnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnR8YWRkOiItMSJ9fSl7JWVuZGlmJX0ge3tidWlsZC5tYWNoaW5lfX0gKHt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fSkKK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKzwhLS0gcGFnZSB0aXRsZSAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAiPgorIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgPGgxPnt7YnVpbGQudGFyZ2V0X3NldC5hbGx8ZGljdHNvcnQ6InRhcmdldCJ8am9pbjoiLCAifX0ge3tidWlsZC5tYWNoaW5lfX08L2gxPgorIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gYnVpbGQgcmVzdWx0IGJhciAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAgcHVsbC1yaWdodCI+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfWFsZXJ0LXN1Y2Nlc3N7JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfWFsZXJ0LWVycm9yeyVlbHNlJX1hbGVydC1pbmZveyVlbmRpZiV9Ij4KKyAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgbGVhZCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1sZWZ0Ij48c3Ryb25nPgorICAgICAgICAgICAgICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfUNvbXBsZXRlZHslZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9RmFpbGVkeyVlbHNlJX17JWVuZGlmJX0KKyAgICAgICAgICAgICAgPC9zdHJvbmc+IG9uCisgICAgICAgICAgICB7e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX0KKzwvc3Bhbj4KK3slIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCBvciBidWlsZC5lcnJvcnMuY291bnQgJX0KKyZuYnNwO3dpdGgKK3slIGVuZGlmICV9Cit7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEIG9yIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9Cit7JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9CisgICAgIDxzcGFuID4gPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiByZWQiPjwvaT48c3Ryb25nPjxhIGhyZWY9IiNlcnJvcnMiIGNsYXNzPSJlcnJvciBzaG93LWVycm9ycyI+IHt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT48L3N0cm9uZz48L3NwYW4+Cit7JSBlbmRpZiAlfQoreyUgaWYgIGJ1aWxkLndhcm5pbmdzLmNvdW50ICV9Cit7JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9CisgICAgYW5kCit7JSBlbmRpZiAlfQorICAgIDxzcGFuID4gPGkgY2xhc3M9Imljb24td2FybmluZy1zaWduIHllbGxvdyI+PC9pPjxzdHJvbmc+PGEgaHJlZj0iI3dhcm5pbmdzIiBjbGFzcz0id2FybmluZyBzaG93LXdhcm5pbmdzIj4ge3tidWlsZC53YXJuaW5ncy5jb3VudH19IHdhcm5pbmd7e2J1aWxkLndhcm5pbmdzLmNvdW50fHBsdXJhbGl6ZX19PC9hPjwvc3Ryb25nPjwvc3Bhbj4KK3slIGVuZGlmICV9CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1yaWdodCI+QnVpbGQgdGltZTogPGEgaHJlZj0ieyUgdXJsICdidWlsZHRpbWUnIGJ1aWxkLnBrICV9Ij57eyBidWlsZC50aW1lc3BlbnRfc2Vjb25kc3xzZWN0b2htcyB9fTwvYT4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4geyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9YnRuLXN1Y2Nlc3N7JWVsc2UlfWJ0bi1kYW5nZXJ7JWVuZGlmJX0gcHVsbC1yaWdodCBsb2ciIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJjb29rZXJsb2ciIGJ1aWxkLmlkICV9Ij5Eb3dubG9hZCBidWlsZCBsb2c8L2E+CisgICAgICAgICAgICA8L3NwYW4+CisKK3slZW5kaWYlfQorICAgIDwvZGl2PgorICAgIHslIGlmIGJ1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudCA+IDAgJX0KKyAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAgICA8c21hbGwgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGdldC1oZWxwLWJsdWUiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlRvYXN0ZXIgZXhjZXB0aW9ucyBkbyBub3QgYWZmZWN0IHlvdXIgYnVpbGQ6IG9ubHkgdGhlIG9wZXJhdGlvbiBvZiBUb2FzdGVyIj48L2k+CisgICAgICAgIDxhIGNsYXNzPSJzaG93LWV4Y2VwdGlvbnMiIGhyZWY9IiNleGNlcHRpb25zIj5Ub2FzdGVyIHRocmV3IHt7YnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50fX0gZXhjZXB0aW9ue3tidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgPC9zbWFsbD4KKyAgICA8L2Rpdj4KKyAgICB7JSBlbmRpZiAlfQorICA8L2Rpdj4KKzwvZGl2PgorCit7JSBpZiBidWlsZC5lcnJvcnMuY291bnQgJX0KKzxkaXYgY2xhc3M9ImFjY29yZGlvbiBzcGFuMTAgcHVsbC1yaWdodCIgaWQ9ImVycm9ycyI+CisgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ncm91cCI+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRpbmciPgorICAgICAgICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUgZXJyb3IgdG9nZ2xlLWVycm9ycyI+CisgICAgICAgICA8aDIgaWQ9ImVycm9yLXRvZ2dsZSI+CisgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24iPjwvaT4KKyAgICAgICAgICAge3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19CisgICAgICAgICA8L2gyPgorICAgICAgPC9hPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5IGNvbGxhcHNlIGluIiBpZD0iY29sbGFwc2UtZXJyb3JzIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1pbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InNwYW4xMCI+CisgICAgICAgICAgeyUgZm9yIGVycm9yIGluIGxvZ21lc3NhZ2VzICV9eyUgaWYgZXJyb3IubGV2ZWwgPT0gMiAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPgorICAgICAgICAgICAgICA8cHJlPnt7ZXJyb3IubWVzc2FnZX19PC9wcmU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kaWYgJX0KKworeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9Cis8IS0tIGJ1aWx0IGltYWdlcyAtLT4KK3slIGlmIGhhc0ltYWdlcyAlfQorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KKyAgICA8aDI+SW1hZ2VzPC9oMj4KKyAgICB7JSBmb3IgdGFyZ2V0IGluIHRhcmdldHMgJX0KKyAgICAgICAgeyUgaWYgdGFyZ2V0LnRhcmdldC5pc19pbWFnZSAlfQorICAgIDxkaXYgY2xhc3M9IndlbGwgZGFzaGJvYXJkLXNlY3Rpb24iPgorICAgICAgICA8aDM+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHRhcmdldC50YXJnZXQucGsgJX0iPnt7dGFyZ2V0LnRhcmdldH19PC9hPgorICAgICAgICAgICAgICAgIDwvaDM+CisgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgICAgICA8ZHQ+UGFja2FnZXMgaW5jbHVkZWQ8L2R0PgorICAgICAgICAgICAgPGRkPjxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0YXJnZXQudGFyZ2V0LnBrICV9Ij57e3RhcmdldC5ucGtnfX08L2E+PC9kZD4KKyAgICAgICAgICAgIDxkdD5Ub3RhbCBwYWNrYWdlIHNpemU8L2R0PgorICAgICAgICAgICAgPGRkPnt7dGFyZ2V0LnBrZ3N6fGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L2RkPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgdGFyZ2V0LnRhcmdldEhhc05vSW1hZ2VzICV9CisgICAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIHNwYW43Ij4KKyAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UaGlzIGJ1aWxkIGRpZCBub3QgY3JlYXRlIGFueSBpbWFnZSBmaWxlczwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgdmFsaWQgaW1hZ2UgYW5kIGxpY2Vuc2UgbWFuaWZlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGZyb20gYSBwcmV2aW91cyBidWlsZCBhbHJlYWR5IGV4aXN0IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi4uLi9wb2t5L2J1aWxkL3RtcC9kZXBsb3k8L2NvZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuIFlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gPGEgaHJlZj0ieyUgdXJsICd0YXJnZXRwa2cnIGJ1aWxkLnBrIHRhcmdldC50YXJnZXQucGsgJX0iPnZpZXcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgbWFuaWZlc3QgaW5mb3JtYXRpb248L2E+IGluIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGxvY2F0aW9uIGluIGRpc2sgb2YgdGhlIGxpY2Vuc2UgbWFuaWZlc3QsIGEgZG9jdW1lbnQgbGlzdGluZyBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIHlvdXIgaW1hZ2UgYW5kIHRoZWlyIGxpY2Vuc2VzIj48L2k+CisKKyAgICAgICAgICAgICAgICBMaWNlbnNlIG1hbmlmZXN0CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAndGFyZ2V0cGtnJyBidWlsZC5wayB0YXJnZXQudGFyZ2V0LnBrICV9Ij5WaWV3IGluIFRvYXN0ZXI8L2E+IHwKKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAnbGljZW5zZW1hbmlmZXN0JyB0YXJnZXQudGFyZ2V0LnBrICV9Ij5Eb3dubG9hZDwvYT48L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJJbWFnZSBmaWxlcyBhcmUgc3RvcmVkIGluIDxjb2RlPi9idWlsZC90bXAvZGVwbG95L2ltYWdlcy88L2NvZGU+Ij48L2k+CisgICAgICAgICAgICAgICAgSW1hZ2UgZmlsZXMKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGZvciBpIGluIHRhcmdldC5pbWFnZUZpbGVzICV9CisgICAgICAgICAgICB7JSBpZiBidWlsZC5wcm9qZWN0ICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAnaW1hZ2VmaWxlJyBpLmlkICV9Ij57e2kucGF0aH19PC9hPgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+e3tpLnBhdGh9fQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgKHt7aS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0pPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgPC9kbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgPC9kaXY+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgeyUgZW5kZm9yICV9Cis8L2Rpdj4KK3slIGVuZGlmICV9CisKK3slZWxzZSV9Cis8IS0tIGVycm9yIGR1bXAgLS0+Cit7JWVuZGlmJX0KKworPCEtLSBvdGhlciBhcnRpZmFjdHMgLS0+Cit7JSBpZiBidWlsZC5idWlsZGFydGlmYWN0X3NldC5hbGwuY291bnQgPiAwICV9Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIHB1bGwtcmlnaHQiPgorPGgyPk90aGVyIGFydGlmYWN0czwvaDI+CisKKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIGRhc2hib2FyZC1zZWN0aW9uIj4KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iQnVpbGQgYXJ0aWZhY3RzIGRpc2NvdmVyZWQgaW4gPGk+dG1wL2RlcGxveS9pbWFnZXM8L2k+LiBVc3VhbGx5IGtlcm5lbCBpbWFnZXMgYW5kIGtlcm5lbCBtb2R1bGVzLiI+PC9pPgorICAgICAgICAgICAgICAgIE90aGVyIGFydGlmYWN0czwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGRpdj4KKyAgICAgICAgICAgICAgeyUgZm9yIGJhIGluIGJ1aWxkLmJ1aWxkYXJ0aWZhY3Rfc2V0LmFsbHxkaWN0c29ydDoiZmlsZV9uYW1lIiAlfQorICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgJ2J1aWxkYXJ0aWZhY3QnIGJhLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAge3tiYS5nZXRfbG9jYWxfZmlsZV9uYW1lfX0KKyAgICAgICAgICAgICAgICA8L2E+CisKKyAgICAgICAgICAgICAgICAoe3tiYS5maWxlX3NpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkgPGJyLz4KKyAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2RkPgorCTwvZGw+CisgICAgPC9kaXY+CisKKzwvZGl2PgoreyUgZW5kaWYgJX0KKzwhLS0gYnVpbGQgc3VtbWFyeSAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAgcHVsbC1yaWdodCI+Cis8aDI+QnVpbGQgc3VtbWFyeTwvaDI+CisgICAgPGRpdiBjbGFzcz0id2VsbCBzcGFuNCBkYXNoYm9hcmQtc2VjdGlvbiIgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweDsiPgorICAgICAgICA8aDQ+PGEgaHJlZj0ieyV1cmwgJ2NvbmZpZ3VyYXRpb24nIGJ1aWxkLnBrJX0iPkNvbmZpZ3VyYXRpb248L2E+PC9oND4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgPGR0Pk1hY2hpbmU8L2R0PjxkZD57e2J1aWxkLm1hY2hpbmV9fTwvZGQ+CisgICAgICAgIDxkdD5EaXN0cm88L2R0PjxkZD57e2J1aWxkLmRpc3Ryb319PC9kZD4KKyAgICAgICAgPGR0PkxheWVyczwvZHQ+eyUgZm9yIGkgaW4gYnVpbGQubGF5ZXJfdmVyc2lvbl9idWlsZC5hbGx8ZGljdHNvcnQ6ImxheWVyLm5hbWUiICV9PGRkPnt7aS5sYXllci5uYW1lfX08L2RkPnslZW5kZm9yJX0KKyAgICAgICAgICAgIDwvZGw+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0id2VsbCBzcGFuNCBkYXNoYm9hcmQtc2VjdGlvbiI+CisgICAgICAgIDxoND48YSBocmVmPSJ7JXVybCAndGFza3MnIGJ1aWxkLnBrJX0iPlRhc2tzPC9hPjwvaDQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICB7JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIG91dGNvbWU9NCBvcmRlcl9fZ3Q9MCBhcyBleGVjdGFzayV9CisgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICA8ZHQ+RmFpbGVkIHRhc2tzPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgeyUgaWYgZXhlY3Rhc2suY291bnQgPT0gMSAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZXJyb3IiIGhyZWY9InslIHVybCAidGFzayIgYnVpbGQuaWQgZXhlY3Rhc2suMC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICB7e2V4ZWN0YXNrLjAucmVjaXBlLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhc2stbmFtZSI+e3tleGVjdGFzay4wLnRhc2tfbmFtZX19PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgZXhlY3Rhc2suMC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisKKyAgICAgICAgICAgICAgICB7JSBlbGlmIGV4ZWN0YXNrLmNvdW50ID4gMSV9CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJlcnJvciIgaHJlZj0ieyUgdXJsICJ0YXNrcyIgYnVpbGQuaWQgJX0/ZmlsdGVyPW91dGNvbWUlM0E0Ij57e2V4ZWN0YXNrLmNvdW50fX08L2E+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPGR0PlRvdGFsIG51bWJlciBvZiB0YXNrczwvZHQ+PGRkPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij57JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIG9yZGVyX19ndD0wIGFzIGFsbHRhc2tzICV9e3thbGx0YXNrcy5jb3VudH19PC9hPjwvZGQ+CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIFRhc2tzIGV4ZWN1dGVkCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iJ0V4ZWN1dGVkJyB0YXNrcyBhcmUgdGhvc2UgdGhhdCBuZWVkIHRvIGJlIHJ1biBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgdGFzayBvdXRwdXQiPjwvaT4KKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9P2ZpbHRlcj10YXNrX2V4ZWN1dGVkJTNBMSZhbXA7Y291bnQ9MjUmYW1wO3NlYXJjaD0mYW1wO3BhZ2U9MSZhbXA7b3JkZXJieT1vcmRlciUzQSUyQiI+eyUgcXVlcnkgYnVpbGQudGFza19idWlsZCB0YXNrX2V4ZWN1dGVkPTEgb3JkZXJfX2d0PTAgYXMgZXhlY3Rhc2slfXt7ZXhlY3Rhc2suY291bnR9fTwvYT48L2RkPgorICAgICAgICA8ZHQ+CisgICAgICAgICAgICBUYXNrcyBub3QgZXhlY3V0ZWQKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSInTm90IGV4ZWN1dGVkJyB0YXNrcyBkb24ndCBuZWVkIHRvIHJ1biBiZWNhdXNlIHRoZWlyIG91dGNvbWUgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIj48L2k+CisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfT9maWx0ZXI9dGFza19leGVjdXRlZCUzQTAmYW1wO2NvdW50PTI1JmFtcDtzZWFyY2g9JmFtcDtwYWdlPTEmYW1wO29yZGVyYnk9b3JkZXIlM0ElMkIiPnslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgdGFza19leGVjdXRlZD0wIG9yZGVyX19ndD0wIGFzIG5vZXhlY3Rhc2slfXt7bm9leGVjdGFzay5jb3VudH19PC9hPjwvZGQ+CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIFJldXNlCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHBlcmNlbnRhZ2Ugb2YgJ25vdCBleGVjdXRlZCcgdGFza3Mgb3ZlciB0aGUgdG90YWwgbnVtYmVyIG9mIHRhc2tzLCB3aGljaCBpcyBhIG1lYXN1cmUgb2YgdGhlIGVmZmljaWVuY3kgb2YgeW91ciBidWlsZCI+PC9pPgorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+Cit7JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIG9yZGVyX19ndD0wIGFzIHRleGVjICV9Cit7JSBpZiBub2V4ZWN0YXNrLmNvdW50fG11bHRpcGx5OjEwMHxkaXZpZGU6dGV4ZWMuY291bnQgPCAwICV9CiswCit7JSBlbHNlICV9Cit7e25vZXhlY3Rhc2suY291bnR8bXVsdGlwbHk6MTAwfGRpdmlkZTp0ZXhlYy5jb3VudH19Cit7JSBlbmRpZiAlfQorJQorICAgICAgICA8L2RkPgorICAgICAgICAgICAgPC9kbD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHNwYW40IGRhc2hib2FyZC1zZWN0aW9uIj4KKyAgICAgICAgPGg0PjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+ICYgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlcycgYnVpbGQucGsgJX0iPlBhY2thZ2VzPC9hPjwvaDQ+CisgICAgICAgICAgICA8ZGw+CisgICAgICAgIDxkdD5SZWNpcGVzIGJ1aWx0PC9kdD48ZGQ+PGEgaHJlZj0ieyUgdXJsICdyZWNpcGVzJyBidWlsZC5wayAlfSI+e3tyZWNpcGVjb3VudH19PC9hPjwvZGQ+CisgICAgICAgIDxkdD5QYWNrYWdlcyBidWlsdDwvZHQ+PGRkPjxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij57e3BhY2thZ2Vjb3VudH19PC9hPjwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgIDwvZGl2PgorPC9kaXY+CisKK3slIGlmIGJ1aWxkLndhcm5pbmdzLmNvdW50ICV9Cis8ZGl2IGNsYXNzPSJhY2NvcmRpb24gc3BhbjEwIHB1bGwtcmlnaHQiIGlkPSJ3YXJuaW5ncyI+CisgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ncm91cCI+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRpbmciPgorICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUgd2FybmluZyB0b2dnbGUtd2FybmluZ3MiPgorICAgICAgICA8aDIgaWQ9Indhcm5pbmctdG9nZ2xlIj4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24iPjwvaT4KKyAgICAgICAgICB7e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgPC9oMj4KKyAgICAgIDwvYT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSBjb2xsYXBzZSIgaWQ9ImNvbGxhcHNlLXdhcm5pbmdzIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1pbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InNwYW4xMCI+CisgICAgICAgICAgeyUgZm9yIHdhcm5pbmcgaW4gbG9nbWVzc2FnZXMgJX17JSBpZiB3YXJuaW5nLmxldmVsID09IDEgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPgorICAgICAgICAgICAgICA8cHJlPnt7d2FybmluZy5tZXNzYWdlfX08L3ByZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIHslIGVuZGlmICV9eyUgZW5kZm9yICV9CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+Cit7JSBlbmRpZiAlfQorCisKK3slIGlmIGJ1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudCA+IDAgJX0KKzxkaXYgY2xhc3M9ImFjY29yZGlvbiBzcGFuMTAgcHVsbC1yaWdodCIgaWQ9ImV4Y2VwdGlvbnMiPgorICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tZ3JvdXAiPgorICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1oZWFkaW5nIj4KKyAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIGV4Y2VwdGlvbiB0b2dnbGUtZXhjZXB0aW9ucyI+CisgICAgICAgIDxoMiBpZD0iZXhjZXB0aW9uLXRvZ2dsZSI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24td2FybmluZy1zaWduIj48L2k+CisgICAgICAgICAge3tidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnR9fSBUb2FzdGVyIGV4Y2VwdGlvbnt7YnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50fHBsdXJhbGl6ZX19CisgICAgICAgIDwvaDI+CisgICAgICA8L2E+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWJvZHkgY29sbGFwc2UiIGlkPSJjb2xsYXBzZS1leGNlcHRpb25zIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1pbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InNwYW4xMCI+CisgICAgICAgICAgeyUgZm9yIGV4Y2VwdGlvbiBpbiBidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWV4Y2VwdGlvbiI+CisgICAgICAgICAgICAgIDxwcmU+e3tleGNlcHRpb24ubWVzc2FnZX19PC9wcmU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KK3slIGVuZGlmICV9CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAgICAgLy9zaG93IHdhcm5pbmdzIHNlY3Rpb24gd2hlbiByZXF1ZXN0ZWQgZnJvbSB0aGUgcHJldmlvdXMgcGFnZQorICAgICAgICBpZiAobG9jYXRpb24uaHJlZi5zZWFyY2goJyN3YXJuaW5ncycpID4gLTEpIHsKKyAgICAgICAgICAgICQoJyNjb2xsYXBzZS13YXJuaW5ncycpLmFkZENsYXNzKCdpbicpOworICAgICAgICB9CisgICAgfSk7Cis8L3NjcmlwdD4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHJlcXVlc3RkZXRhaWxzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRyZXF1ZXN0ZGV0YWlscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZmExZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRyZXF1ZXN0ZGV0YWlscy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKK3slIGV4dGVuZHMgImJhc2Vwcm9qZWN0cGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQorCisKK3slIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQorICAgICAgPCEtLSBiZWdpbiBjb250ZW50IC0tPgorCisgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKworICAgICAgICAgICAgPCEtLSBlbmQgbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KKyAgICAgICAgICAgIDwhLS0gQmVnaW4gcmlnaHQgY29udGFpbmVyIC0tPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICAgICAgICAgIDxoMT4KKyA8c3BhbiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgeyVpZiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudCA+IDElfXRpdGxlPSJUYXJnZXRzOiB7JWZvciB0YXJnZXQgaW4gYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwlfXt7dGFyZ2V0LnRhcmdldH19IHslZW5kZm9yJX0ieyVlbmRpZiV9Pnt7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXJnZXR9fSB7JWlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9KCsge3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KXslZW5kaWYlfSB7e2J1aWxkcmVxdWVzdC5nZXRfbWFjaGluZX19IDwvc3Bhbj4KKworICAgICAgICA8L2gxPgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPgorICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmFpbGVkPC9zdHJvbmc+CisgICAgICAgICAgICAgICAgICAgIG9uIHt7IGJ1aWxkcmVxdWVzdC51cGRhdGVkfGRhdGU6J2QvbS95IEg6aScgfX0KKyAgICAgICAgICAgIHdpdGgKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiBlcnJvciIgc3R5bGU9Im1hcmdpbi1sZWZ0OjZweDsiPjwvaT4KKyAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PGEgY2xhc3M9ImVycm9yIGFjY29yZGlvbi10b2dnbGUgdG9nZ2xlLWVycm9ycyIgaHJlZj0iI2Vycm9ycyI+CisgICAgICAgICAgICAgICAgICAgICAgICB7e2J1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwuY291bnR9fSBlcnJvcnt7YnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbC5jb3VudHxwbHVyYWxpemV9fQorICAgICAgICAgICAgICA8L2E+PC9zdHJvbmc+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHVsbC1yaWdodCI+QnVpbGQgdGltZToge3tidWlsZHJlcXVlc3QuZ2V0X2R1cmF0aW9ufHNlY3RvaG1zfX08L3NwYW4+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24iIGlkPSJlcnJvcnMiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ncm91cCI+CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taGVhZGluZyI+CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJhY2NvcmRpb24tdG9nZ2xlIGVycm9yIHRvZ2dsZS1lcnJvcnMiPgorICAgICAgICAgICAgICAgICAgICAgIDxoMj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7YnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbC5jb3VudH19IGVycm9ye3tidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsLmNvdW50fHBsdXJhbGl6ZX19CisgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KKyAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSBjb2xsYXBzZSBpbiIgaWQ9ImNvbGxhcHNlLWVycm9ycyI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICAgICAgIHslIGZvciBlcnJvciBpbiBidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SOiA8ZGl2IGNsYXNzPSJhaXIgd2VsbCI+PHByZT57e2Vycm9yLmVycm1zZ319PC9wcmU+PC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PiA8IS0tIGVuZCBvZiByb3ctZmx1aWQgLS0+CisKKworeyVlbmRibG9jayV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkMGM2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHMuaHRtbApAQCAtMCwwICsxLDEwOSBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQorCit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS5zdHJ1Y3R1cmUubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9qcXVlcnktdWkudGhlbWUubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvanF1ZXJ5LXVpLm1pbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9maWx0ZXJzbmlwcGV0LmpzIj48L3NjcmlwdD4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKK3slIGlmIGxhc3RfZGF0ZV9mcm9tIGFuZCBsYXN0X2RhdGVfdG8gJX0KKzxzY3JpcHQ+CisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZGF0ZSByYW5nZSBjb250cm9scworICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZGF0ZV9pbml0KCdzdGFydGVkX29uJywne3tsYXN0X2RhdGVfZnJvbX19Jywne3tsYXN0X2RhdGVfdG99fScsJ3t7ZGF0ZU1pbl9zdGFydGVkX29ufX0nLCd7e2RhdGVNYXhfc3RhcnRlZF9vbn19Jywne3tkYXRlcmFuZ2Vfc2VsZWN0ZWR9fScpOworICAgICAgICBkYXRlX2luaXQoJ2NvbXBsZXRlZF9vbicsJ3t7bGFzdF9kYXRlX2Zyb219fScsJ3t7bGFzdF9kYXRlX3RvfX0nLCd7e2RhdGVNaW5fY29tcGxldGVkX29ufX0nLCd7e2RhdGVNYXhfY29tcGxldGVkX29ufX0nLCd7e2RhdGVyYW5nZV9zZWxlY3RlZH19Jyk7CisgICAgfSk7Cis8L3NjcmlwdD4KK3slZW5kaWYlfSB7IyBsYXN0X2RhdGVfZnJvbSBhbmQgbGFzdF9kYXRlX3RvICN9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisKKyAgeyUgaW5jbHVkZSAibXJiX3NlY3Rpb24uaHRtbCIgJX0KKworCisgIHslIGlmIDEgJX0KKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIgdG9wLWFpciI+CisgICAgIDxoMT4KKyAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IGJ1aWxke3tvYmplY3RzLnBhZ2luYXRvci5jb3VudHxwbHVyYWxpemV9fSBmb3VuZAorICAgICAgeyVlbGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICAgICAgICBObyBidWlsZHMgZm91bmQKKyAgICAgIHslZWxzZSV9CisgICAgICAgICAgQWxsIGJ1aWxkcworICAgICAgeyVlbmRpZiV9CisgICAgIDwvaDE+CisgIDwvZGl2PgorCisgIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iCisgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgICAgICAgICAgICAgICB7e3JlcXVlc3QuR0VULnNlYXJjaH19CisgICAgICAgIHslIGVuZGlmICV9Ii8+CisgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIGJ1aWxkczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworCisgIHslIGVsc2UgJX0KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorICAgICAgICA8IS0tIFRhYmxlIGRhdGEgcm93czsgdGhlIG9yZGVyIG5lZWRzIHRvIG1hdGNoIHRoZSBvcmRlciBvZiAidGFibGVjb2xzIiBkZWZpbml0aW9uczsgYW5kIHRoZSA8dGQgY2xhc3MgdmFsdWUgbmVlZHMgdG8gbWF0Y2ggdGhlIHRhYmxlY29scyBjbGNsYXNzIHZhbHVlIGZvciBzaG93L2hpZGUgYnV0dG9ucyB0byB3b3JrIC0tPgorICAgICAgICB7JSBmb3IgYnVpbGQgaW4gb2JqZWN0cyAlfQorICAgICAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvdXRjb21lIj4KKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfTxpIGNsYXNzPSJpY29uLW9rLXNpZ24gc3VjY2VzcyI+PC9pPnslZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9PGkgY2xhc3M9Imljb24tbWludXMtc2lnbiBlcnJvciI+PC9pPnslZWxzZSV9eyVlbmRpZiV9PC9hPiAmbmJzcDsKKyAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0idGFyZ2V0Ij57JSBmb3IgdCBpbiBidWlsZC50YXJnZXRfc2V0LmFsbCAlfSA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+IHt7dC50YXJnZXR9fSA8L2E+IDxiciAvPnslIGVuZGZvciAlfTwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im1hY2hpbmUiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57e2J1aWxkLm1hY2hpbmV9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJzdGFydGVkX29uIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5zdGFydGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJjb21wbGV0ZWRfb24iPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmFpbGVkX3Rhc2tzIGVycm9yIj4KKyAgICAgICAgICAgICAgICB7JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIG91dGNvbWU9NCBvcmRlcl9fZ3Q9MCBhcyBleGVjdGFzayV9CisgICAgICAgICAgICAgICAgICAgIHslIGlmIGV4ZWN0YXNrLmNvdW50ID09IDEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFzayIgYnVpbGQuaWQgZXhlY3Rhc2suMC5pZCAlfSI+e3tleGVjdGFzay4wLnJlY2lwZS5uYW1lfX0ue3tleGVjdGFzay4wLnRhc2tfbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiBleGVjdGFzay4wLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZWxpZiBleGVjdGFzay5jb3VudCA+IDElfQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJ0YXNrcyIgYnVpbGQuaWQgJX0/ZmlsdGVyPW91dGNvbWUlM0E0Ij57e2V4ZWN0YXNrLmNvdW50fX0gdGFza3t7ZXhlY3Rhc2suY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yc19ubyI+CisgICAgICAgICAgICAgICAgeyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSNlcnJvcnMiPnt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Indhcm5pbmdzLmNvdW50IHdhcm5pbmdzX25vIj57JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX08YSBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0jd2FybmluZ3MiPnt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aW1lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkdGltZSIgYnVpbGQuaWQgJX0iPnt7YnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXN9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvdXRwdXQiPgorICAgICAgICAgICAgICB7JSBpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCAlfQorICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkJX0jaW1hZ2VzIj57e2ZzdHlwZXN8Z2V0X2RpY3RfdmFsdWU6YnVpbGQuaWR9fTwvYT4KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIGJ1aWxkLnByb2plY3QuaWQgJX0iPnt7YnVpbGQucHJvamVjdC5uYW1lfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICA8L3RyPgorCisgICAgICAgIHslIGVuZGZvciAlfQorCisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQorICB7JSBlbmRpZiAlfSB7IyBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAjfQoreyUgZW5kaWYgJX0geyMgZW1wdHkgI30KKzwvZGl2PjwhLS0gZW5kIHJvdy1mbHVpZC0tPgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkdGltZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkdGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODRhZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGR0aW1lLmh0bWwKQEAgLTAsMCArMSw0IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5CdWlsZCBUaW1lPC9saT4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbi5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3VyYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQ4OTkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3VyYXRpb24uaHRtbApAQCAtMCwwICsxLDcxIEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPkNvbmZpZ3VyYXRpb248L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgbmF2LWNvbmZpZ3VyYXRpb24gJX0KKyAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnY29uZmlndXJhdGlvbicgYnVpbGQucGsgJX0iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKzwhLS0gcGFnZSB0aXRsZSAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAiPgorIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgPGgxPkNvbmZpZ3VyYXRpb248L2gxPgorIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gY29uZmlndXJhdGlvbiB0YWJsZSAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBwdWxsLXJpZ2h0IHNwYW4xMCIgaWQ9Im5hdlRhYiI+Cis8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIjIj5TdW1tYXJ5PC9hPjwvbGk+CisgICAgPGxpIGNsYXNzPSIiPjxhIGhyZWY9InslIHVybCAnY29uZmlndmFycycgYnVpbGQuaWQgJX0iPkJpdEJha2UgdmFyaWFibGVzPC9hPjwvbGk+Cis8L3VsPgorCisgIDwhLS0gc3VtbWFyeSAtLT4KKyAgPGRpdiBpZD0ic3VtbWFyeSIgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSI+CisgICAgPGgzPkJ1aWxkIGNvbmZpZ3VyYXRpb248L2gzPgorICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICB7JWlmIEJCX1ZFUlNJT04gJX08ZHQ+Qml0QmFrZSB2ZXJzaW9uPC9kdD48ZGQ+e3tCQl9WRVJTSU9OfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBCVUlMRF9TWVMgJX08ZHQ+QnVpbGQgc3lzdGVtPC9kdD48ZGQ+e3tCVUlMRF9TWVN9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIE5BVElWRUxTQlNUUklORyAlfTxkdD5Ib3N0IGRpc3RyaWJ1dGlvbjwvZHQ+PGRkPnt7TkFUSVZFTFNCU1RSSU5HfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBUQVJHRVRfU1lTICV9PGR0PlRhcmdldCBzeXN0ZW08L2R0PjxkZD57e1RBUkdFVF9TWVN9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIE1BQ0hJTkUgJX08ZHQ+TWFjaGluZTwvZHQ+PGRkPnt7TUFDSElORX19PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgRElTVFJPICV9PGR0PkRpc3RybzwvZHQ+PGRkPnt7RElTVFJPfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBESVNUUk9fVkVSU0lPTiAlfTxkdD5EaXN0cm8gdmVyc2lvbjwvZHQ+PGRkPnt7RElTVFJPX1ZFUlNJT059fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIFRVTkVfRkVBVFVSRVMgJX08ZHQ+VHVuZSBmZWF0dXJlczwvZHQ+PGRkPnt7VFVORV9GRUFUVVJFU319PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgVEFSR0VUX0ZQVSAlfTxkdD5UYXJnZXQgRlBVPC9kdD48ZGQ+e3tUQVJHRVRfRlBVfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiB0YXJnZXRzLmFsbCAlfTxkdD5UYXJnZXQocyk8L2R0PgorICAgICAgICAgIDxkZD4gPHVsPiB7JSBmb3IgdGFyZ2V0IGluIHRhcmdldHMuYWxsICV9CisgICAgICAgICAgICAgICA8bGk+e3t0YXJnZXQudGFyZ2V0fX17JWlmIGZvcmxvb3AuY291bnRlciA+IDEgJX08YnI+eyUgZW5kaWYgJX08L2xpPgorICAgICAgICAgIHslIGVuZGZvciAlfSA8L3VsPiA8L2RkPiB7JSBlbmRpZiAlfQorICAgIDwvZGw+CisgICAgPGgzPkxheWVyczwvaDM+CisgICAgPGRpdiBjbGFzcz0ic3BhbjkiIHN0eWxlPSJtYXJnaW4tbGVmdDowcHg7Ij4KKyAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgIDx0aGVhZD4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5MYXllcjwvdGg+CisgICAgICAgICAgPHRoPkxheWVyIGJyYW5jaDwvdGg+CisgICAgICAgICAgPHRoPkxheWVyIGNvbW1pdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5PnslIGZvciBsdiBpbiBidWlsZC5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbHxkaWN0c29ydDoibGF5ZXIubmFtZSIgJX0KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgPHRkPnt7bHYubGF5ZXIubmFtZX19PC90ZD4KKyAgICAgICAgICAgIDx0ZD57e2x2LmJyYW5jaH19PC90ZD4KKyAgICAgICAgICAgIDx0ZD4gPGEgY2xhc3M9ImJ0biIgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICA8bGk+e3tsdi5jb21taXR9fTwvbGk+IDwvdWw+Ij4KKyAgICAgICAgICAgICAgICAgICAge3tsdi5jb21taXR8dHJ1bmNhdGVjaGFyczoxM319CisgICAgICAgICAgICAgICAgPC9hPjwvdGQ+CisgICAgICAgIDwvdHI+eyUgZW5kZm9yICV9CisgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+CisgICAgPC9kaXY+CisgIDwvZGl2PgorCisKKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd2YXJzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndmFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNTcyYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndmFycy5odG1sCkBAIC0wLDAgKzEsMTMyIEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPkNvbmZpZ3VyYXRpb248L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgbmF2LWNvbmZpZ3VyYXRpb24gJX0KKyAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnY29uZmlndXJhdGlvbicgYnVpbGQucGsgJX0iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKzwhLS0gcGFnZSB0aXRsZSAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAiPgorIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyA8aDE+CisgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gdmFyaWFibGV7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICBObyB2YXJpYWJsZXMgZm91bmQKKyAgeyVlbHNlJX0KKyAgICAgIENvbmZpZ3VyYXRpb24KKyAgeyVlbmRpZiV9CisgPC9oMT4KKyA8L2Rpdj4KKzwvZGl2PgorCis8IS0tIGNvbmZpZ3VyYXRpb24gdGFibGUgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgcHVsbC1yaWdodCBzcGFuMTAiIGlkPSJuYXZUYWIiPgorICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgIDxsaSBjbGFzcz0iIj48YSBocmVmPSJ7JSB1cmwgJ2NvbmZpZ3VyYXRpb24nIGJ1aWxkLmlkICV9Ij5TdW1tYXJ5PC9hPjwvbGk+CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9IiMiID5CaXRCYWtlIHZhcmlhYmxlczwvYT48L2xpPgorICA8L3VsPgorCisgIDwhLS0gdmFyaWFibGVzIC0tPgorICA8ZGl2IGlkPSJ2YXJpYWJsZXMiIGNsYXNzPSJ0YWItcGFuZSI+CisKKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICA8Zm9ybSBjbGFzcz0ibm8tcmVzdWx0cyBpbnB1dC1hcHBlbmQiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCB2YXJpYWJsZXM8L2J1dHRvbj4KKyAgICAgICAgPC9mb3JtPgorICAgICAgPC9kaXY+CisgIDwvZGl2PgorCisgIHslIGVsc2UgJX0KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCisgIHslIGZvciB2YXJpYWJsZSBpbiBvYmplY3RzICV9CisgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgICAgPHRkIGNsYXNzPSJ2YXJpYWJsZV9uYW1lIj48YSBkYXRhLXRvZ2dsZT0ibW9kYWwiIGhyZWY9IiN2YXJpYWJsZS17e3ZhcmlhYmxlLnBrfX0iPnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19PC9hPjwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0idmFyaWFibGVfdmFsdWUiPjxhIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaHJlZj0iI3ZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSI+e3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXx0cnVuY2F0ZWNoYXJzOjE1M319PC9hPjwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0iZmlsZSI+PGEgZGF0YS10b2dnbGU9Im1vZGFsIiBocmVmPSIjdmFyaWFibGUte3t2YXJpYWJsZS5wa319Ij4KKyAgICAgICAgICAgIHslIGlmIHZhcmlhYmxlLnZoaXN0b3J5LmFsbCAlfQorICAgICAgICAgICAgICAgIHslIGZvciBwYXRoIGluIHZhcmlhYmxlLnZoaXN0b3J5LmFsbHxmaWx0ZXJfc2V0aW5fZmlsZXM6ZmlsZV9maWx0ZXIgJX0KKyAgICAgICAgICAgICAgICAgICAge3twYXRofX08YnIvPgorICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9hPjwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUuZGVzY3JpcHRpb24gJX0KKyAgICAgICAgICAgICAgICB7e3ZhcmlhYmxlLmRlc2NyaXB0aW9ufX0KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci17e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV8dmFyaWFibGVfcGFyZW50X25hbWV9fSIgdGFyZ2V0PSJfYmxhbmsiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+PC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICA8L3RyPgoreyUgZW5kZm9yICV9CisKK3slIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KK3slIGVuZGlmICV9Cis8L2Rpdj4gPCEtLSBlbmR2YXJpYWJsZXMgLS0+CisKKzwhLS0gZmlsZSBsaXN0IHBvcHVwcyAtLT4KK3slIGZvciB2YXJpYWJsZSBpbiBvYmplY3RzICV9CisgICAgeyUgaWYgdmFyaWFibGUudmhpc3RvcnkuY291bnQgJX0KKyAgICA8ZGl2IGlkPSJ2YXJpYWJsZS17e3ZhcmlhYmxlLnBrfX0iIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICAgICAgICA8aDM+SGlzdG9yeSBvZiB7e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fTwvaDM+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgICAgICAgIHslIGlmIHZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlICV9CisgICAgICAgICAgICAgIHslIGlmIHZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfGxlbmd0aCA8IDU3MCAlfQorICAgICAgICAgICAgICAgIDxoND57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fSB2YWx1ZSBpczo8L2g0PgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICB7e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfX0KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8aDQ+e3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX0gdmFsdWUgaXM6PC9oND4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXxzdHJpbmdfc2xpY2U6Jzo1NzAnfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmdWxsIj4ge3t2YXJpYWJsZS52YXJpYWJsZV92YWx1ZXxzdHJpbmdfc2xpY2U6JzU3MDonfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLW1pbmkgZnVsbC1zaG93Ij4uLi48L2E+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tbWluaSBmdWxsLWhpZGUiPkNvbGxhcHNlIHZhcmlhYmxlIHZhbHVlIDxpIGNsYXNzPSJpY29uLWNhcmV0LXVwIj48L2k+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPlRoZSB2YWx1ZSBvZiA8c3Ryb25nPnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19PC9zdHJvbmc+IGlzIGFuIGVtcHR5IHN0cmluZzwvZGl2PgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxoND5UaGUgdmFsdWUgd2FzIHNldCBpbiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXM6PC9oND4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk9yZGVyPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Db25maWd1cmF0aW9uIGZpbGU8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk9wZXJhdGlvbjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+TGluZSBudW1iZXI8L3RoPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgdmggaW4gdmFyaWFibGUudmhpc3RvcnkuYWxsICV9CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2Zvcmxvb3AuY291bnRlcn19PC90ZD48dGQ+e3t2aC5maWxlX25hbWV9fTwvdGQ+PHRkPnt7dmgub3BlcmF0aW9ufX08L3RkPjx0ZD57e3ZoLmxpbmVfbnVtYmVyfX08L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICB7JWVuZGZvciV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIHslIGVuZGlmICV9Cit7JSBlbmRmb3IgJX0KKworPC9kaXY+IDwhLS0gYnVpbGRpbmZvbWFpbiAtLT4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jcHV1c2FnZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NwdXVzYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmMDdiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jcHV1c2FnZS5odG1sCkBAIC0wLDAgKzEsNCBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+Q3B1IFVzYWdlPC9saT4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3BhZ2luYXRpb25fYm90dG9tLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3BhZ2luYXRpb25fYm90dG9tLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwYzIxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbApAQCAtMCwwICsxLDU1IEBACit7JSBjb21tZW50ICV9CisgICAgU2hvdyBwYWdpbmF0aW9uIGNvbnRyb2xzIGFzIHBlciBzZWFyY2gvcGFnaW5hdGlvbiB0YWJsZSBkZXRhaWwgc3BlYy4KKyAgICBJbnB1dDogb2JqZWN0cywgc2V0dXAgZm9yIHBhZ2luYXRpb24gdXNpbmcgdGhlIHN0YW5kYXJkIG1ldGhvZCBpbiB2aWV3cy4KKyAgICAgICAgICAgb2JqZWN0X2NvdW50LCBjb3VudCBmb3IgY29tcGxldGUgbGlzdCBvZiBvYmplY3RzLCAoYWxsIHBhZ2VzLCBubyBwYXR0ZXJuKQoreyUgZW5kY29tbWVudCAlfQorCit7IyBvbmx5IHBhZ2luYXRlIGlmIDEwIG9yIG1vcmUgcm93cyB1bmZpbHRlcmVkLCBhbGwgcGFnZXMgI30KK3slIGlmIG9iamVjdF9jb3VudCA+PSAxMCAlfQorPGRpdiBjbGFzcz0icGFnaW5hdGlvbiI+CisgIDx1bD4KK3slaWYgb2JqZWN0cy5oYXNfcHJldmlvdXMgJX0KKyAgICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tvYmplY3RzLnByZXZpb3VzX3BhZ2VfbnVtYmVyfX19KSI+JmxhcXVvOzwvYT48L2xpPgoreyVlbHNlJX0KKyAgICA8bGkgY2xhc3M9ImRpc2FibGVkIj48YSBocmVmPSIjIj4mbGFxdW87PC9hPjwvbGk+Cit7JWVuZGlmJX0KK3slIGZvciBpIGluIG9iamVjdHMucGFnZV9yYW5nZSAlfQorICAgIDxsaXslaWYgaSA9PSBvYmplY3RzLm51bWJlciAlfSBjbGFzcz0iYWN0aXZlIiB7JWVuZGlmJX0+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tpfX19KSI+e3tpfX08L2E+PC9saT4KK3slIGVuZGZvciAlfQoreyVpZiBvYmplY3RzLmhhc19uZXh0JX0KKyAgICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tvYmplY3RzLm5leHRfcGFnZV9udW1iZXJ9fX0pIj4mcmFxdW87PC9hPjwvbGk+Cit7JWVsc2UlfQorICAgIDxsaSBjbGFzcz0iZGlzYWJsZWQiPjxhIGhyZWY9IiMiPiZyYXF1bzs8L2E+PC9saT4KK3slZW5kaWYlfQorICA8L3VsPgorCisgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctYm90dG9tOjEwcHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgIDxzZWxlY3QgY2xhc3M9InBhZ2VzaXplIj4KKyAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgeyUgZW5kd2l0aCAlfQorICAgIDwvc2VsZWN0PgorICA8L2Rpdj4KKzwvZGl2PgorCis8IS0tIFVwZGF0ZSBwYWdlIGRpc3BsYXkgc2V0dGluZ3MgLS0+Cis8c2NyaXB0PgorICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIC8vIGxvYWQgZGF0YSBmb3IgbnVtYmVyIG9mIGVudHJpZXMgdG8gYmUgZGlzcGxheWVkIG9uIHBhZ2UKKyAgICBpZiAoe3tyZXF1ZXN0LkdFVC5jb3VudH19ICE9ICIiKSB7CisgICAgICBwYWdlc2l6ZSA9IHt7cmVxdWVzdC5HRVQuY291bnR9fTsKKyAgICB9CisgICAgJCgnLnBhZ2VzaXplIG9wdGlvbicpLnByb3AoJ3NlbGVjdGVkJywgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcignW3ZhbHVlPSInICsgcGFnZXNpemUgKyAnIl0nKQorICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdzZWxlY3RlZCcsIHRydWUpOworCisgICAgJCgiLnBhZ2VzaXplIikuY2hhbmdlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmVsb2FkX3BhcmFtcyh7ImNvdW50IjokKHRoaXMpLnZhbCgpfSk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0PgoreyUgZW5kaWYgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NlYXJjaF9oZWFkZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmVhM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwKQEAgLTAsMCArMSw2OCBAQAoreyUgY29tbWVudCAlfQorICBTaG93IGEgZGV0YWlsIHRhYmxlIFNlYXJjaCBmaWVsZCBhbmQgUm93cyBwZXIgcGFnZS4KKyAgSW5wdXQ6CisgICAgb2JqZWN0cywgb3VyIGJvaWxlcnBsYXRlZCBwYWdpbmF0ZWQgd2l0aCBzZWFyY2ggZmllbGRzIHNldC4KKyAgICBvYmplY3RfY291bnQsIGNvdW50IG9mIGZ1bGwsIHVuZmlsdGVyZWQsIG9iamVjdHMgbGlzdAorICAgIHNlYXJjaF93aGF0LCBmaWxscyBpbiAiU2VhcmNoIF9fXyIKKyAgT25seSBzaG93IHRoZSBzZWFyY2ggZm9ybSBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxMCByZXN1bHRzLAorICBvciBpZiByZXR1cm4gZnJvbSBhIHByZXZpb3VzIHNlYXJjaC4KK3slIGVuZGNvbW1lbnQgJX0KKworCis8c2NyaXB0PgorJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgIC8qIENsZWFyIHRoZSBjdXJyZW50IHNlYXJjaCBzZWxlY3Rpb24gYW5kIHJlbG9hZCB0aGUgcmVzdWx0cyAqLworICAkKCIuc2VhcmNoLWNsZWFyIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjc2VhcmNoIikudmFsKCIiKTsKKyAgICAkKHRoaXMpLnBhcmVudHMoImZvcm0iKS5zdWJtaXQoKTsKKyAgfSk7Cit9KTsKKzwvc2NyaXB0PgorPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KK3slIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMTAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgIDxoMz5ObyB7e3NlYXJjaF93aGF0fX0gZm91bmQ8L2gzPgorICAgIDxmb3JtIGlkPSJzZWFyY2hmb3JtIiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgeyUgZWxzZSAlfQorICAgIDxmb3JtIGlkPSJzZWFyY2hmb3JtIiBjbGFzcz0ibmF2YmFyLXNlYXJjaCBpbnB1dC1hcHBlbmQgcHVsbC1sZWZ0Ij4KKyAgeyUgZW5kaWYgJX0KKworICAgICAgPGlucHV0IGlkPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14bGFyZ2UiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3tzZWFyY2hfd2hhdH19IiBuYW1lPSJzZWFyY2giIHZhbHVlPSJ7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iPgorICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9Im5hbWU6KyIgbmFtZT0ib3JkZXJieSI+CisgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ibCIgbmFtZT0icGFnZSI+CisgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICAgICAgPGEgY2xhc3M9ImFkZC1vbiBidG4gc2VhcmNoLWNsZWFyIj4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+CisgICAgICA8L2E+CisgIHslIGVuZGlmICV9CisgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biI+U2VhcmNoPC9idXR0b24+CisgIHslIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1saW5rIHNlYXJjaC1jbGVhciI+CisgICAgICAgIFNob3cgYWxsIHt7c2VhcmNoX3doYXR9fQorICAgICAgPC9idXR0b24+CisgIHslIGVuZGlmICV9CisgICAgPC9mb3JtPgoreyUgZW5kaWYgJX0KKworeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICA8L2Rpdj4geyMgZW5kIGFsZXJ0ICN9Cit7JSBlbHNlICV9CisgIHslIGlmIG9iamVjdF9jb3VudCA+IDEwICV9CisgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUiPgorICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICB7JSBpZiByZXF1ZXN0LnNlc3Npb24ubGltaXQgPT0gaSAlfQorICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iIHNlbGVjdGVkPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgeyUgZW5kZm9yICV9CisgICAgeyUgZW5kd2l0aCAlfQorICAgIDwvc2VsZWN0PgorICA8L2Rpdj4KKyAgeyUgZW5kaWYgJX0KK3slIGVuZGlmICV9Cis8L2Rpdj4geyMgcm93LWZsdWlkICN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NvcnRlZF9oZWFkZXIuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc29ydGVkX2hlYWRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTI5MmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NvcnRlZF9oZWFkZXIuaHRtbApAQCAtMCwwICsxLDI1IEBACit7JSBjb21tZW50ICV9CisgICAgQWRkcyBzb3J0ZWQgY29sdW1ucyB0byBhIGRldGFpbCB0YWJsZS4KKyAgICBNdXN0IGJlIHByZWNlZGVkIGJ5IDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJvdGFibGUiPgorICAgIE11c3QgYmUgZm9sbG93ZWQgYnkgPHRib2R5Pi4uLjwvdGJvZHk+PC90YWJsZT4uCisgICAgUmVxdWlyZXMgdGFibGVjb2xzIHNldHVwIGNvbHVtbiBmaWVsZHMgZGNsYXNzLCBjbGNsYXNzLCBxaGVscCwgb3JkZXJmaWVsZC4KK3slIGVuZGNvbW1lbnQgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3sjICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJvdGFibGUiPiAjfQorICAgIDx0aGVhZD4KKyAgICAgICAgPCEtLSBUYWJsZSBoZWFkZXIgcm93OyBnZW5lcmF0ZWQgZnJvbSAidGFibGVjb2xzIiBlbnRyeSBpbiB0aGUgY29udGV4dCBkaWN0IC0tPgorICAgICAgICA8dHI+CisgICAgICAgICAgICB7JSBmb3IgdGMgaW4gdGFibGVjb2xzICV9PHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslIGVuZGlmICV9IHslaWYgdGMuY2xhc3MgJX17e3RjLmNsY2xhc3N9fXslIGVuZGlmICV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmZpZWxkJX08YSB7JWlmIHRjLm9yZGVyaWNvbiV9IGNsYXNzPSJzb3J0ZWQiIHslZW5kaWYlfWhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOiAxLCAnb3JkZXJieScgOiAne3t0Yy5vcmRlcmZpZWxkfX0nIH0pIj57e3RjLm5hbWV9fTwvYT57JWVsc2UlfTxzcGFuIGNsYXNzPSJtdXRlZCI+e3t0Yy5uYW1lfX08L3NwYW4+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmljb24lfSA8aSBjbGFzcz0iaWNvbi1jYXJldC17e3RjLm9yZGVyaWNvbn19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBmb3Jsb29wLmZpcnN0ICV9CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1pbmZvIj57e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX08L3NwYW4+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLmZpbHRlciV9PGRpdiBjbGFzcz0iYnRuLWdyb3VwIHB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmlsdGVyX3t7dGMuZmlsdGVyLmNsYXNzfX0iIHJvbGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbWluaSB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciV9e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF9pY29uOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZW5kaWYlfSIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIHRjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyICV9IHRpdGxlPSI8cD57e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyfX08L3A+PHA+PGEgY2xhc3M9J2J0biBidG4tc21hbGwgYnRuLXByaW1hcnknIGhyZWY9amF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsnZmlsdGVyJzonJ30pPlNob3cgYWxsIHslIGlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSAlfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fX17JSBlbHNlICV9e3tvYmplY3RuYW1lfX17JSBlbmRpZiAlfTwvYT48L3A+IiB7JWVuZGlmJX0gZGF0YS10b2dnbGU9Im1vZGFsIj4gPGkgY2xhc3M9Imljb24tZmlsdGVyIGZpbHRlcmVkIj48L2k+IDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj57JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGg+eyUgZW5kZm9yICV9CisgICAgICAgIDwvdHI+CisgICAgPC90aGVhZD4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RpcmluZm8uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXJpbmZvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViYzQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXJpbmZvLmh0bWwKQEAgLTAsMCArMSwyMzYgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KK3slIGxvYWQgc3RhdGljICV9Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2pxdWVyeS50cmVldGFibGUuY3NzJyAlfSIgdHlwZT0idGV4dC9jc3MiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7JSBzdGF0aWMgJ2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzJyAlfSIgdHlwZT0idGV4dC9jc3MiPgoreyUgZW5kYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT57e3RhcmdldC50YXJnZXR9fTwvbGk+Cit7JSBlbmRibG9jayBsb2NhbGJyZWFkY3J1bWIlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9CisKK3slIGxvYWQgc3RhdGljICV9Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9qcXVlcnkudHJlZXRhYmxlLmpzJyAlfSI+Cis8L3NjcmlwdD4KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgorICAgIGZ1bmN0aW9uIHNldHVwVHJlZXRhYmxlKCkgeworICAgICAgICAkKCIjZGlydGFibGUiKS50cmVldGFibGUoeworICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIGJyYW5jaEF0dHI6ICJ0dEJyYW5jaCIsCisgICAgICAgICAgICBjbGlja2FibGVOb2RlTmFtZXM6IHRydWUsCisgICAgICAgICAgICBvbk5vZGVDb2xsYXBzZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZywga2VlcCBjYWNoZWQgKi8KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBvbk5vZGVFeHBhbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaWQ7CisgICAgICAgICAgICAgICAgdmFyIG4gPSAkKCIjZGlydGFibGUiKS50cmVldGFibGUoIm5vZGUiLCBzdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvKiBhbHJlYWR5IHdhcyBleHBhbmRlZCBvbmNlICovCisgICAgICAgICAgICAgICAgICAgICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSgicmV2ZWFsIiwgc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9ICJ7JSB1cmwgImRpcmluZm9fYWpheCIgYnVpbGQuaWQgdGFyZ2V0LmlkICAlfSI7CisgICAgICAgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlICAgIDogIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAgICB1cmwgICAgIDogdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAgICA6ICJzdGFydD0iICsgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzIDogZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb3dzKG4sIHJlc3BvbnNlKQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yICAgOiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gKSB7YWxlcnQodGV4dFN0YXR1cyArICI6IiArIGVycm9yVGhyb3duKX0sCisgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfSwKKyAgICAgICB9KTsKKyAgICB9CisgICAgZnVuY3Rpb24gdGQoZGF0YSkgeworICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7CisgICAgICAgICAgICBkYXRhID0gJyc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICc8dGQ+JyArIGRhdGEgKyAnPC90ZD4nCisgICAgfQorCisgICAgZnVuY3Rpb24gZm9ybWF0Um93KG8pIHsKKyAgICAgICAgLyogc2V0dXAgdHItd2lkZSBmb3JtYXR0aW5nICovCisgICAgICAgIHZhciB0ciA9ICc8dHIgY2xhc3M9Iic7CisgICAgICAgIGlmIChvLmxpbmtfdG8gIT0gbnVsbCkgeworICAgICAgICAgICAgdHIgKz0gJ211dGVkICc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG8uaXNkaXIgJiYgby5jaGlsZGNvdW50KSB7CisgICAgICAgICAgICB0ciArPSAnYnJhbmNoIiBkYXRhLXR0LWJyYW5jaD0idHJ1ZSIgJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRyICs9ICdsZWFmIiBkYXRhLXR0LWJyYW5jaD0iZmFsc2UiICc7CisgICAgICAgIH0KKyAgICAgICAgdHIgKz0gICAgJyBkYXRhLXR0LWlkPSInICsgby5mdWxscGF0aCArJyIgJzsKKyAgICAgICAgaWYgKG8ucGFyZW50ICE9ICIvIikgeworICAgICAgICAgICAgdHIgKz0gICAgJyBkYXRhLXR0LXBhcmVudC1pZD0iJyArIG8ucGFyZW50ICsnIiAnOworICAgICAgICB9CisgICAgICAgIHRyICs9ICc+JzsKKworICAgICAgICAvKiBzZXR1cCB0ZCBzcGVjaWZpYyBmb3JtYXR0aW5nICovCisgICAgICAgIHZhciBsaW5rX3RvID0gdGQoby5saW5rX3RvKTsKKyAgICAgICAgdmFyIHNpemUgPSAnPHRkIGNsYXNzID0gInNpemVjb2wiPicgKyBvLnNpemUgKyAnPC90ZD4nCisgICAgICAgIHZhciBwZXJtaXNzaW9uID0gdGQoby5wZXJtaXNzaW9uKTsKKyAgICAgICAgdmFyIG93bmVyID0gdGQoby5vd25lcik7CisgICAgICAgIHZhciBncm91cCA9IHRkKG8uZ3JvdXApOworCisgICAgICAgIC8qIGhhbmRsZSB0aGUgbmFtZSBjb2x1bW4gKi8KKyAgICAgICAgdmFyIG5hbWUgPSBudWxsOzsKKyAgICAgICAgdmFyIG5hbWVzcGFuPTE7CisgICAgICAgIGlmIChvLmlzZGlyKSB7CisgICAgICAgICAgICBpZiAoby5saW5rX3RvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBuYW1lc3BhbiA9IDI7CisgICAgICAgICAgICAgICAgaWYgKG8ucGFja2FnZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFuID0gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgY29sc3BhbiA9ICdjb2xzcGFuPSInICsgbmFtZXNwYW4gKyAnIic7CisgICAgICAgICAgICBuYW1lID0gJzx0ZCBjbGFzcz0iY29udGVudC1kaXJlY3RvcnkiJyArIGNvbHNwYW4gKyAnPic7CisgICAgICAgICAgICBpZiAoby5jaGlsZGNvdW50KSB7CisgICAgICAgICAgICAgICAgbmFtZSArPSAnPGEgaHJlZj0iIj4nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmFtZSArPSAnPGkgY2xhc3M9Imljb24tZm9sZGVyLWNsb3NlIj48L2k+JzsKKyAgICAgICAgICAgIG5hbWUgKz0gJyZuYnNwOycgKyBvLm5hbWU7CisgICAgICAgICAgICBpZiAoby5jaGlsZGNvdW50KSB7CisgICAgICAgICAgICAgICAgbmFtZSArPSAnPC9hPic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuYW1lICs9ICc8L3RkPic7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBuYW1lID0gJzx0ZD4nOworICAgICAgICAgICAgaWYgKG8ubGlua190byA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbmFtZSArPSAnPGkgY2xhc3M9Imljb24tZmlsZSI+PC9pPic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICc8aSBjbGFzcz0iaWNvbi1oYW5kLXJpZ2h0Ij48L2k+JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWUgKz0gJyZuYnNwOycgKyBvLm5hbWU7CisgICAgICAgICAgICBuYW1lICs9ICc8L3RkPic7CisgICAgICAgIH0KKworICAgICAgICAvKiBoYW5kbGUgdGhlIHBhY2thZ2UgY29sdW1uICovCisgICAgICAgIHZhciBwYWNrYWdlID0gbnVsbDsKKyAgICAgICAgaWYgKG8ucGFja2FnZSAhPSBudWxsKSB7CisgICAgICAgICAgICAvKiBhZGQgbGluayB0byBpbmNsdWRlZCBwYWNrYWdlIHBhZ2UgKi8KKyAgICAgICAgICAgIGJ1aWxkX2lkID0ge3sgYnVpbGQuaWQgfX07CisgICAgICAgICAgICB0YXJnZXRfaWQgPSB7eyB0YXJnZXQuaWQgfX07CisgICAgICAgICAgICAvKiBDcmVhdGUgYSB1cmwgZm9yIGEgZHVtbXkgcGFja2FnZSBpZCBvZiAwICovCisgICAgICAgICAgICBkdW1teSA9ICJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCB0YXJnZXQuaWQgMCAlfSIKKyAgICAgICAgICAgIC8qIGZpbGwgaW4gdGhlIHBhY2thZ2UgaWQgKi8KKyAgICAgICAgICAgIHVybCA9IGR1bW15LnN1YnN0cigwLCBkdW1teS5sZW5ndGgtMSkgKyBvLnBhY2thZ2VfaWQ7CisgICAgICAgICAgICBwYWNrYWdlID0gJzxhIGhyZWY9JyArIHVybCArICc+JyA7CisgICAgICAgICAgICBwYWNrYWdlICs9IG8ucGFja2FnZTsKKyAgICAgICAgICAgIHBhY2thZ2UgKz0gJzwvYT4nOworICAgICAgICAgICAgaWYgKG8uaW5zdGFsbGVkX3BhY2thZ2UgIT0gby5wYWNrYWdlKSB7CisgICAgICAgICAgICAgICAgLyogbWFrZSBjbGFzcyBtdXRlZCBhbmQgYWRkIGhvdmVyIGhlbHAgKi8KKyAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICc8c3BhbiBjbGFzcz0ibXV0ZWQiPiBhcyAnICsgby5pbnN0YWxsZWRfcGFja2FnZSArICcgPC9zcGFuPic7CisgICAgICAgICAgICAgICAgcGFja2FnZSArPSAnPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiAnOworICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJ3RpdGxlPSInICsgby5wYWNrYWdlICsgJyB3YXMgcmVuYW1lZCBhdCBwYWNrYWdpbmcgdGltZSBhbmQgd2FzIGluc3RhbGxlZCBpbiB5b3VyIGltYWdlIGFzICcgKyBvLmluc3RhbGxlZF9wYWNrYWdlICsgJyI+JzsKKyAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICc8L2k+JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwYWNrYWdlID0gdGQocGFja2FnZSk7CisKKyAgICAgICAgdmFyIGNvbHMxdG8zOworICAgICAgICBzd2l0Y2ggKG5hbWVzcGFuKSB7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgY29sczF0bzMgPSBuYW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAgMjoKKyAgICAgICAgICAgICAgICBjb2xzMXRvMyA9IG5hbWUgKyBwYWNrYWdlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjb2xzMXRvMyA9IG5hbWUgKyBsaW5rX3RvICsgcGFja2FnZTsKKyAgICAgICAgfQorICAgICAgICByID0gdHIgKyBjb2xzMXRvMyArIHNpemUgKyBwZXJtaXNzaW9uICsgb3duZXIgKyBncm91cCArICI8L3RyPiIKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWRkUm93cyhuLCBvYmpzKSB7CisgICAgICAgIHJvd3MgPSAiIjsKKyAgICAgICAgZm9yIChpPTA7IGk8b2Jqcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgcm93cyArPSBmb3JtYXRSb3cob2Jqc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgJCgiI2RpcnRhYmxlIikudHJlZXRhYmxlKCJsb2FkQnJhbmNoIiwgbiwgcm93cyk7CisgICAgfQorCisgICAgJC5mbi5pc09mZlNjcmVlbiA9IGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciB3aW4gPSAkKHdpbmRvdyk7CisgICAgICAgIHZpZXdwb3J0Qm90dG9tID0gd2luLnNjcm9sbFRvcCgpICsgd2luLmhlaWdodCgpOworICAgICAgICAKKyAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMub2Zmc2V0KCk7CisgICAgICAgIGJvdW5kcy5ib3R0b20gPSBib3VuZHMudG9wICsgdGhpcy5vdXRlckhlaWdodCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIChib3VuZHMuYm90dG9tID4gdmlld3BvcnRCb3R0b20pOworICAgIH07CisKKyAgICBmdW5jdGlvbiBzZWxlY3RSb3cocGF0aCkgeworICAgICAgICB2YXIgcm93ICA9ICQoJ3RyW2RhdGEtdHQtaWQ9IicgKyBwYXRoICsgJyJdJyk7CisgICAgICAgIHJvdy5hZGRDbGFzcygiIGhpZ2hsaWdodCIpOworICAgICAgICBpZiAocm93LmlzT2ZmU2NyZWVuKCkpIHsKKyAgICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiByb3cub2Zmc2V0KCkudG9wIC0gMTUwfSwgMjAwMCk7CisgICAgICAgIH0KKyAgICB9Cis8L3NjcmlwdD4KKworPGRpdiBjbGFzcz0ic3BhbjEwIj4KKworICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPiB7e3RhcmdldC50YXJnZXR9fSA8L2gxPgorICAgIDwvZGl2PgorCisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLmlkIHRhcmdldC5pZCAlfSI+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT2YgYWxsIHRoZSBwYWNrYWdlcyBidWlsdCwgdGhlIHN1YnNldCBpbnN0YWxsZWQgaW4gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhpcyBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgIFBhY2thZ2VzIGluY2x1ZGVkICh7e3RhcmdldC5wYWNrYWdlX2NvdW50fX0gLSB7e3BhY2thZ2VzX3N1bXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2RpcmluZm8nIGJ1aWxkLmlkIHRhcmdldC5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhpcyBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgIERpcmVjdG9yeSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICA8L3VsPgorCisgICAgPGRpdiBpZD0iZGlyZWN0b3J5LXN0cnVjdHVyZSIgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSI+CisgICAgICAgIDx0YWJsZSBpZD0iZGlydGFibGUiIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0cmVldGFibGUiPgorICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRoPkRpcmVjdG9yeSAvIEZpbGU8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+U3ltYm9saWMgbGluayB0bzwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5Tb3VyY2UgcGFja2FnZTwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlBlcm1pc3Npb25zPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPk93bmVyPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPkdyb3VwPC90aD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KKyAgICAgICAgICAgICAgICBzZXR1cFRyZWV0YWJsZSgpOworICAgICAgICAgICAgICAgIGFkZFJvd3MobnVsbCwge3sgb2JqZWN0c3xzYWZlIH19ICk7CisgICAgICAgICAgICAgICAgeyUgaWYgZmlsZV9wYXRoICV9CisgICAgICAgICAgICAgICAgICAgIHslIGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsgZnJvbSBwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCBzcGVjaWZpZXMgZmlsZSBwYXRoCisgICAgICAgICAgICAgICAgICAgIHslIGVuZGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGRpcl9lbGVtIGluIGRpcl9saXN0ICV9CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjZGlydGFibGUiKS50cmVldGFibGUoImV4cGFuZE5vZGUiLCAie3tkaXJfZWxlbX19Iik7CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICBzZWxlY3RSb3coInt7ZmlsZV9wYXRofX0iKTsKKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICA8L3RhYmxlPgorICAgIDwvZGl2PiA8IS0tIGRpcmVjdG9yeS1zdHJ1Y3R1cmUgLS0+Cis8L2Rpdj4gPCEtLSBzcGFuMTAgLS0+CisKK3slIGVuZGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Rpc2tpby5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Rpc2tpby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Y2VmNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlza2lvLmh0bWwKQEAgLTAsMCArMSw0IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5EaXNrIEkvTzwvbGk+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ZpbHRlcnNuaXBwZXQuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9maWx0ZXJzbmlwcGV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwMWFhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9maWx0ZXJzbmlwcGV0Lmh0bWwKQEAgLTAsMCArMSw1NyBAQAoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorPCEtLSAne3tmLmNsYXNzfX0nIGZpbHRlciAtLT4KK3slIHdpdGggZi5jbGFzcyBhcyAga2V5ICV9Cis8Zm9ybSBpZD0iZmlsdGVyX3t7Zi5jbGFzc319IiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1oaWRkZW49InRydWUiPgorICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWFyY2giIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICAgICAgICB7JSBpZiBzZWFyY2hfdGVybSAlfQorICAgICAgICAgICAgICAgICA8aDM+RmlsdGVyIHt7dG90YWxfY291bnR9fSB7JWlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl8dGl0bGV9fXslZWxzZSV9e3tvYmplY3RuYW1lfHRpdGxlfX17JWVuZGlmJX0gbWF0Y2hpbmcgJ3t7c2VhcmNoX3Rlcm19fScgYnkgJ3t7dGMubmFtZX19JzwvaDM+CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgPGgzPkZpbHRlciB7JWlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl8dGl0bGV9fXslZWxzZSV9e3tvYmplY3RuYW1lfHRpdGxlfX17JWVuZGlmJX0gYnkgJ3t7dGMubmFtZX19JzwvaDM+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICA8cD57e2YubGFiZWx9fTwvcD4KKyAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icmFkaW8iPgorICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciV9e3tmLm9wdGlvbnN8Y2hlY2tfZmlsdGVyX3N0YXR1czpyZXF1ZXN0LkdFVC5maWx0ZXJ9fSB7JWVsc2UlfSBjaGVja2VkIHslZW5kaWYlfSB2YWx1ZT0iIiBkYXRhLWtleT0ie3trZXl9fSI+ICBBbGwgeyVpZiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXklfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fHRpdGxlfX17JWVsc2UlfXt7b2JqZWN0bmFtZXx0aXRsZX19eyVlbmRpZiV9CisgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgeyUgZm9yIG9wdGlvbiBpbiBmLm9wdGlvbnMgJX0KKyAgICAgICAgICAgICAgICB7JSBpZiBvcHRpb24uMSA9PSAnZGF0ZXJhbmdlJyAlfQorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pbmxpbmUiPgorICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icmFkaW8iPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgaWQ9ImZpbHRlcl92YWx1ZV97e2tleX19IiB7JWlmIGtleSA9PSBkYXRlcmFuZ2Vfc2VsZWN0ZWQgJX1jaGVja2VkeyVlbmRpZiV9IHZhbHVlPSJ7e29wdGlvbi4xfX0iIGRhdGEta2V5PSJ7e2tleX19Ij4ge3tvcHRpb24uMH19CisgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgeyUgaWYgMSAlfQorICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icmFkaW8iPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgPT0gb3B0aW9uLjEgJX1jaGVja2VkeyVlbmRpZiV9ICB2YWx1ZT0ie3tvcHRpb24uMX19IiBkYXRhLWtleT0ie3trZXl9fSI+IHt7b3B0aW9uLjB9fQorICAgICAgICAgICAgICAgICAgeyUgY29tbWVudCAiZG8gbm90IGRpc2FibGUgcmFkaW8gc2VsZWN0aW9ucyBieSBjb3VudCBmb3Igbm93IiAlfXslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InJhZGlvIG11dGVkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIGRpc2FibGVkIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyID09IG9wdGlvbi4xICV9Y2hlY2tlZHslZW5kaWYlfSAgdmFsdWU9Int7b3B0aW9uLjF9fSIgZGF0YS1rZXk9Int7a2V5fX0iPiB7e29wdGlvbi4wfX0KKyAgICAgICAgICAgICAgICAgIHslIGVuZGNvbW1lbnQgJX17JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgeyUgaWYgb3B0aW9uLjMgJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLXBsYWNlbWVudD0icmlnaHQiIHRpdGxlPSJ7e29wdGlvbi4zfX0iPjwvaT57JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICB7JSBpZiBvcHRpb24uMSA9PSAnZGF0ZXJhbmdlJyAlfQorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlX2Zyb21fe3trZXl9fSIgbmFtZT0iZGF0ZV9mcm9tX3t7a2V5fX0iIGRpc2FibGVkIGNsYXNzPSJpbnB1dC1zbWFsbCIgLz48bGFiZWwgY2xhc3M9ImhlbHAtaW5saW5lIj50bzwvbGFiZWw+CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImRhdGVfdG9fe3trZXl9fSIgbmFtZT0iZGF0ZV90b197e2tleX19IiBkaXNhYmxlZCBjbGFzcz0iaW5wdXQtc21hbGwiICAvPgorICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJoZWxwLWlubGluZSBnZXQtaGVscCIgPihkZC9tbS95eXl5KTwvbGFiZWw+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwhLS0gZGF0ZXJhbmdlIHBlcnNpc3RlbmNlIC0tPgorICAgICAgICB7JSBpZiBsYXN0X2RhdGVfZnJvbSBhbmQgbGFzdF9kYXRlX3RvICV9CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJsYXN0X2RhdGVfZnJvbV97e2tleX19IiBuYW1lPSJsYXN0X2RhdGVfZnJvbSIgdmFsdWU9Int7bGFzdF9kYXRlX2Zyb219fSIvPgorICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ibGFzdF9kYXRlX3RvX3t7a2V5fX0iIG5hbWU9Imxhc3RfZGF0ZV90byIgICB2YWx1ZT0ie3tsYXN0X2RhdGVfdG99fSIvPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWtleT0ie3trZXl9fSI+QXBwbHk8L2J1dHRvbj4KKyAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciAlfQorICAgICAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlcnxzdHJpbmdfcmVtb3ZlX3JlZ2V4Oic6LionICE9IGYub3B0aW9ucy4wLjF8c3RyaW5nX3JlbW92ZV9yZWdleDonOi4qJyAlfQorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSBwdWxsLWxlZnQiPllvdSBjYW4gb25seSBhcHBseSBvbmUgZmlsdGVyIHRvIHRoZSB0YWJsZS4gVGhpcyBmaWx0ZXIgd2lsbCBvdmVycmlkZSB0aGUgY3VycmVudCBmaWx0ZXIuPC9zcGFuPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2Rpdj4KKzwvZm9ybT4KK3slIGVuZHdpdGggJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9nZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZ2VuZXJpYy10b2FzdGVydGFibGUtcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYWE4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZ2VuZXJpYy10b2FzdGVydGFibGUtcGFnZS5odG1sCkBAIC0wLDAgKzEsMTcgQEAKK3slIGV4dGVuZHMgImJhc2Vwcm9qZWN0cGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBzdGF0aWMgJX0KKworeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9CisKKzxoMj57e3RpdGxlfX0gKDxzcGFuIGNsYXNzPSJ0YWJsZS1jb3VudC17e3RhYmxlX25hbWV9fSI+PC9zcGFuPikKKyAgeyUgaWYgcHJvamVjdC5yZWxlYXNlICV9CisgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iVGhpcyBwYWdlIGxpc3RzIHt7dGl0bGV9fSBjb21wYXRpYmxlIHdpdGggdGhlIHJlbGVhc2Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCwgd2hpY2ggaXMge3twcm9qZWN0LnJlbGVhc2UuZGVzY3JpcHRpb259fSI+PC9pPgorICB7JSBlbmRpZiAlfQorPC9oMj4KKworeyUgdXJsIHRhYmxlX25hbWUgcHJvamVjdC5pZCBhcyB4aHJfdGFibGVfdXJsICV9Cit7JSBpbmNsdWRlICJ0b2FzdGVydGFibGUuaHRtbCIgJX0KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9pbXBvcnRsYXllci5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ltcG9ydGxheWVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzZDcyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9pbXBvcnRsYXllci5odG1sCkBAIC0wLDAgKzEsMTM4IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHN0YXRpYyAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworeyUgaW5jbHVkZSAicHJvamVjdHRvcGJhci5odG1sIiAlfQorCisKKyAgICAgICAgeyUgaWYgcHJvamVjdCBhbmQgcHJvamVjdC5yZWxlYXNlICV9CisgICAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckRlcHNNb2RhbC5qcycgJX0iPjwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvaW1wb3J0bGF5ZXIuanMnICV9Ij48L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpeworICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4aHJJbXBvcnRMYXllclVybCA6ICJ7JSB1cmwgJ3hocl9pbXBvcnRsYXllcicgJX0iLAorICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0TGF5ZXJQYWdlSW5pdChjdHgpOworICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJTb3JyeSwgQW4gZXJyb3IgaGFzIG9jY3VycmVkIGxvYWRpbmcgdGhpcyBwYWdlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgIDwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9InNwYW4xMSI+CisgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PgorICAgICAgICAgICAgICAgICAgICAgIDxsZWdlbmQ+TGF5ZXIgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbjwvbGVnZW5kPgorICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIj5UaGUgbGF5ZXIgeW91IGFyZSBpbXBvcnRpbmcgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggPHN0cm9uZz57e3Byb2plY3QucmVsZWFzZS5kZXNjcmlwdGlvbn19PC9zdHJvbmc+LCB3aGljaCBpcyB0aGUgcmVsZWFzZSB5b3UgYXJlIHVzaW5nIGluIHRoaXMgcHJvamVjdC48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiIGlkPSJpbXBvcnQtZXJyb3IiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJhbGVydCI+JnRpbWVzOzwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGgzPiZuYnNwOzwvaDM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cD48L3A+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWw+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiIGlkPSJsYXllci1uYW1lLWN0cmwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIGFpciIgZm9yPSJpbXBvcnQtbGF5ZXItbmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXIgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTb21ldGhpbmcgbGlrZSAnbWV0YS1teWxheWVyJy4gWW91ciBsYXllciBuYW1lIG11c3QgYmUgdW5pcXVlIGFuZCBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMgYW5kIGRhc2hlcyI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJpbXBvcnQtbGF5ZXItbmFtZSIgdHlwZT0idGV4dCIgcmVxdWlyZWQgYXV0b2ZvY3VzIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIGlkPSJpbnZhbGlkLWxheWVyLW5hbWUtaGludCI+QSB2YWxpZCBsYXllciBuYW1lIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycyBhbmQgZGFzaGVzPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgaWQ9ImR1cGxpY2F0ZWQtbGF5ZXItbmFtZS1oaW50Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImR1cGxpY2F0ZS1sYXllci1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IHdhcm5pbmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+QSBsYXllciBjYWxsZWQgPGEgaHJlZj0iIiBjbGFzcz0iZHVwLWxheWVyLWxpbmsiPjxzcGFuIGNsYXNzPSJkdXAtbGF5ZXItbmFtZSI+PC9zcGFuPjwvYT4gYWxyZWFkeSBleGlzdHM8L2gzPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5MYXllciBuYW1lcyBtdXN0IGJlIHVucWl1ZS4gUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBsYXllciBuYW1lLjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgPGRsPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxzcGFuIGNsYXNzPSJkdXAtbGF5ZXItbmFtZSI+PC9zcGFuPiByZXBvc2l0b3J5IHVybCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImR1cC1sYXllci12Y3MtdXJsIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj4gcmV2aXNpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkdXAtbGF5ZXItcmV2aXNpb24iPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxhIGhyZWY9IiIgY2xhc3M9ImR1cC1sYXllci1saW5rIj5WaWV3IHRoZSA8c3BhbiBjbGFzcz0iZHVwLWxheWVyLW5hbWUiPjwvc3Bhbj4gbGF5ZXIgaW5mb3JtYXRpb248L2E+PC9wPgorCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImxheWVyLWdpdC1yZXBvLXVybCIgY2xhc3M9InByb2plY3QtZm9ybSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgVVJMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZldGNoL2Nsb25lIFVSTCBvZiB0aGUgcmVwb3NpdG9yeS4gQ3VycmVudGx5LCBUb2FzdGVyIG9ubHkgc3VwcG9ydHMgR2l0IHJlcG9zaXRvcmllcy4iID48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImxheWVyLWdpdC1yZXBvLXVybCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHJlcXVpcmVkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJwcm9qZWN0LWZvcm0iIGZvcj0ibGF5ZXItc3ViZGlyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBvc2l0b3J5IHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+KG9wdGlvbmFsKTwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZCwgaWYgbm90IGluIHRoZSByb290ICh1c3VhbGx5IG9ubHkgdXNlZCBpZiB0aGUgcmVwb3NpdG9yeSBjb250YWlucyBtb3JlIHRoYW4gb25lIGxheWVyKSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiAgaWQ9ImxheWVyLXN1YmRpciI+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCIgaWQ9ImxheWVyLXJldmlzaW9uLWN0cmwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCBwcm9qZWN0LWZvcm0iIGZvcj0ibGF5ZXItZ2l0LXJlZiI+UmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJZb3UgY2FuIHByb3ZpZGUgYSBHaXQgYnJhbmNoLCBhIHRhZyBvciBhIGNvbW1pdCBTSEEgYXMgdGhlIHJldmlzaW9uIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9InNwYW4zIiBpZD0ibGF5ZXItZ2l0LXJlZiIgcmVxdWlyZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9ImRpYXBseTpub25lOyIgaWQ9ImludmFsaWQtbGF5ZXItcmV2aXNpb24taGludCI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJhaXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiPihvcHRpb25hbCk8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJPdGhlciBsYXllcnMgdGhpcyBsYXllciBkZXBlbmRzIHVwb24iPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGVnZW5kPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCBjb25maWd1cmF0aW9uLWxpc3QiIGlkPSJsYXllci1kZXBzLWxpc3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLW1pbkxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiIHBsYWNlaG9sZGVyPSJUeXBlIGEgbGF5ZXIgbmFtZSIgaWQ9ImxheWVyLWRlcGVuZGVuY3kiIGNsYXNzPSJpbnB1dC14bGFyZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIGlkPSJhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSI+WW91IGNhbiBvbmx5IGFkZCBsYXllcnMgVG9hc3RlciBrbm93cyBhYm91dDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWlyIiBpZD0iZm9ybS1hY3Rpb25zIj4KKyAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIiBkYXRhLXRvZ2dsZT0ibW9kYWwiIGlkPSJpbXBvcnQtYW5kLWFkZC1idG4iIGRhdGEtdGFyZ2V0PSIjZGVwZW5kZW5jaWVzLW1lc3NhZ2UiIGRpc2FibGVkPkltcG9ydCBhbmQgYWRkIHRvIHByb2plY3Q8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgaWQ9ImltcG9ydC1hbmQtYWRkLWhpbnQiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+VG8gaW1wb3J0IGEgbGF5ZXIgeW91IG5lZWQgdG8gZW50ZXIgYSBsYXllciBuYW1lLCBhIEdpdCByZXBvc2l0b3J5IFVSTCBhbmQgYSByZXZpc2lvbiAoYnJhbmNoLCB0YWcgb3IgY29tbWl0KTwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZm9ybT4KKworICAgICAgICAgIHslIGVsc2UgJX0geyNwcm9qZWN0IGFuZCBwcm9qZWN0IHJlbGVhc2UjfQorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGgxPkltcG9ydCBsYXllcjwvaDE+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgaWQ9ImltcG9ydC1lcnJvciIgPgorICAgICAgICAgICAgICAgICAgICAgICAgPGgzPlVuc3VwcG9ydGVkIHByb2plY3QgdHlwZTwvaDM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cD5UaGlzIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydCBpbXBvcnRpbmcgbGF5ZXJzLjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bD48L3VsPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgeyUgZW5kaWYgJX0KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvanMtdW5pdC10ZXN0cy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2pzLXVuaXQtdGVzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjhmZDg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2pzLXVuaXQtdGVzdHMuaHRtbApAQCAtMCwwICsxLDM5IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHN0YXRpYyAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2NvZGUuanF1ZXJ5LmNvbS9xdW5pdC9xdW5pdC0xLjE4LjAuY3NzIiAvPgorCis8c2NyaXB0IHNyYz0iLy9jb2RlLmpxdWVyeS5jb20vcXVuaXQvcXVuaXQtMS4xOC4wLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJEZXBzTW9kYWwuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3Byb2plY3RwYWdlLmpzJyAlfSI+PC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2Jvb3RzdHJhcC5taW4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2ZpbHRlcnNuaXBwZXQuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2ltcG9ydGxheWVyLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9wcmV0dGlmeS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJCdG4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyRGVwc01vZGFsLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9wcm9qZWN0cGFnZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJkZXRhaWxzLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90YWJsZS5qcycgJX0iPjwvc2NyaXB0PgorCis8c2NyaXB0PgorICB2YXIgdGFibGVVcmwgPSAneyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LnBrICV9JzsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90ZXN0cy90ZXN0LmpzJyAlfSI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9InF1bml0Ij48L2Rpdj4KKworPGlucHV0IHR5cGU9InRleHQiIGlkPSJsYXllcnMiIHBsYWNlaG9sZGVyPSJsYXllcnMiID48L2lucHV0PgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJyZWNpcGVzIiBwbGFjZWhvbGRlcj0icmVjaXBlcyI+PC9pbnB1dD4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icHJvamVjdHMiIHBsYWNlaG9sZGVyPSJwcm9qZWN0cyI+PC9pbnB1dD4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibWFjaGluZXMiIHBsYWNlaG9sZGVyPSJtYWNoaW5lcyI+PC9pbnB1dD4KKworeyUgZW5kYmxvY2sgJX0KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWU5NTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmcuaHRtbApAQCAtMCwwICsxLDU4IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgPCEtLSBFbXB0eSAtIG5vIGRhdGEgaW4gZGF0YWJhc2UgLS0+CisgICAgPGRpdiBjbGFzcz0iaGVyby11bml0IHNwYW4xMiB3ZWxsLXRyYW5zcGFyZW50Ij4KKyAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9InNwYW42Ij4KKyAgICAgICA8aDE+CisgICAgICAgIFRoaXMgaXMgVG9hc3RlcgorICAgICAgIDwvaDE+CisgICAgICAgPHA+QSB3ZWIgaW50ZXJmYWNlIHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZyI+T3BlbkVtYmVkZGVkPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9iaXRiYWtlIj5CaXRCYWtlPC9hPiwgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyI+WW9jdG8gUHJvamVjdDwvYT4gYnVpbGQgc3lzdGVtLjwvcD4KKworCisJCXslIGlmIGx2c19ub3MgJX0KKwkJICAgIDxwIGNsYXNzPSJoZXJvLWFjdGlvbnMiPgorCQkJICAgIDxhIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIiBocmVmPSJ7JSB1cmwgJ25ld3Byb2plY3QnICV9Ij4KKwkJCQkgICAgVG8gc3RhcnQgYnVpbGRpbmcsIGNyZWF0ZSB5b3VyIGZpcnN0IFRvYXN0ZXIgcHJvamVjdAorCQkJICAgIDwvYT4KKwkJICAgIDwvcD4KKwkJeyUgZWxzZSAlfQorCQkgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIGFpciI+CisJCQkgICAgVG9hc3RlciBoYXMgbm8gbGF5ZXIgaW5mb3JtYXRpb24uIFdpdGhvdXQgbGF5ZXIgaW5mb3JtYXRpb24sIHlvdSBjYW5ub3QgcnVuIGJ1aWxkcy4gVG8gZ2VuZXJhdGUgbGF5ZXIgaW5mb3JtYXRpb24geW91IGNhbjoKKwkJCSAgICA8dWw+CisJCQkgICAgICAgIDxsaT4KKwkJCSAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2xhdGVzdC90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sI2xheWVyLXNvdXJjZSI+Q29uZmlndXJlIGEgbGF5ZXIgc291cmNlPC9hPgorCQkJICAgICAgICA8L2xpPgorCQkJICAgICAgICA8bGk+CisJCQkgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ25ld3Byb2plY3QnICV9Ij5DcmVhdGUgYSBwcm9qZWN0PC9hPiwgdGhlbiBpbXBvcnQgbGF5ZXJzCisJCQkgICAgICAgIDwvbGk+CisJCQkgICAgPC91bD4KKwkJICAgIDwvZGl2PgorCSAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCI+UmVhZCB0aGUgVG9hc3RlciBtYW51YWw8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvQ29udHJpYnV0ZV90b19Ub2FzdGVyIj5Db250cmlidXRlIHRvIFRvYXN0ZXI8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICA8L3VsPgorCisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InNwYW42Ij4KKyAgICAgICAgICA8aW1nIGFsdD0iWW9jdG8gUHJvamVjdCIgY2xhc3M9InRodW1ibmFpbCIgc3JjPSJ7JSBzdGF0aWMgJ2ltZy90b2FzdGVyX2J3LnBuZycgJX0iLz4KKyAgICAgIDwvZGl2PgorICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgIDwvZGl2PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmdfbm90X21hbmFnZWQuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nX25vdF9tYW5hZ2VkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjNDM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nX25vdF9tYW5hZ2VkLmh0bWwKQEAgLTAsMCArMSwzMiBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQorCit7JSBibG9jayBwYWdlY29udGVudCAlfQorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgIDwhLS0gRW1wdHkgLSBubyBidWlsZCBtb2R1bGUgLS0+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIgdG9wLWFpciI+CisgICAgIDxoMT4KKyAgICAgICBUaGlzIHBhZ2Ugb25seSB3b3JrcyB3aXRoIFRvYXN0ZXIgaW4gJ0J1aWxkJyBtb2RlCisgICAgIDwvaDE+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyBsZWFkIj4KKyAgICAgPHAiPgorICAgICBUaGUgJ0J1aWxkJyBtb2RlIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGFuZCBydW4geW91ciBZb2N0byBQcm9qZWN0IGJ1aWxkcyBmcm9tIFRvYXN0ZXIuCisgICAgIDx1bD4KKyAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvbGF0ZXN0L3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLmh0bWwjaW50cm8tbW9kZXMiPgorICAgICAgIFJlYWQgYWJvdXQgdGhlICdCdWlsZCcgbW9kZQorICAgICAgIDwvYT48L2xpPgorICAgICAgIDxsaT48YSBocmVmPSIvIj4KKyAgICAgICBWaWV3IHlvdXIgYnVpbGRzCisgICAgICAgPC9hPjwvbGk+CisgICAgIDwvdWw+CisgICAgIDwvcD4KKyAgICA8L2Rpdj4KKyAgIDwvZGl2PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyX2J0bi5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyX2J0bi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTkzOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJfYnRuLmh0bWwKQEAgLTAsMCArMSw5IEBACis8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRhbmdlciBidG4tYmxvY2sgbGF5ZXItZXhpc3RzLXt7ZGF0YS5wa319IGxheWVyYnRuIiBzdHlsZT0iZGlzcGxheTpub25lOyIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEucGt9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEucGslfSJ9JyBkYXRhLWRpcmVjdGl2ZT0icmVtb3ZlIiA+CisgIDxpIGNsYXNzPSJpY29uLXRyYXNoIj48L2k+CisgIERlbGV0ZSBsYXllcgorPC9idXR0b24+Cis8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyLWFkZC17e2RhdGEucGt9fSBsYXllcmJ0biIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEucGt9fSwgIm5hbWUiOiAgInt7ZGF0YS5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEucGslfSJ9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIj4KKyAgPGkgY2xhc3M9Imljb24tcGx1cyI+PC9pPgorICBBZGQgbGF5ZXIKKzwvYnV0dG9uPgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJkZXRhaWxzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJkZXRhaWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkM2RiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcmRldGFpbHMuaHRtbApAQCAtMCwwICsxLDI3NiBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBzdGF0aWMgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworPGRpdiBjbGFzcz0ic2VjdGlvbiI+CisgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgPGxpIGNsYXNzPSJtdXRlZCI+e3twcm9qZWN0Lm5hbWV9fTo8L2xpPgorICAgIDxsaT4KKyAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+Q29uZmlndXJhdGlvbjwvYT4KKyAgICAgIDxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mcmFycjs8L3NwYW4+CisgICAgPC9saT4KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LmlkICV9Ij5Db21wYXRpYmxlIGxheWVyczwvYT4KKyAgICAgIDxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mcmFycjs8L3NwYW4+CisgICAgPC9saT4KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgICB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gKHt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfHRydW5jYXRlY2hhcnM6MTN9fSkKKyAgICA8L2xpPgorICA8L3VsPgorPC9kaXY+CisKK3sjIElmIHRoaXMgaXMgbm90IGFuIGltcG9ydGVkIGxheWVyIHRoZW4gaGlkZSB0aGUgZWRpdCB1aSAjfQoreyUgaWYgbm90IGxheWVydmVyc2lvbi5sYXllcl9zb3VyY2VfaWQgb3IgbGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZS5zb3VyY2V0eXBlICE9IGxheWVydmVyc2lvbi5sYXllcl9zb3VyY2UuVFlQRV9JTVBPUlRFRCAlfQorPHN0eWxlIHNjb3BlZD4KKyAuaWNvbi1wZW5jaWwgeworICAgZGlzcGxheTpub25lOworIH0KKy5kZWxldGUtY3VycmVudC12YWx1ZXsKKyAgZGlzcGxheTogbm9uZTsKK30KKyBsaSAuaWNvbi10cmFzaCB7CisgICBkaXNwbGF5Om5vbmU7CisgfQorIC5hZGQtZGVwcyB7CisgICBkaXNwbGF5Om5vbmU7CisgfQorPC9zdHlsZT4KK3slIGVuZGlmICV9CisKKworPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJkZXRhaWxzLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpeworICAgIHZhciBjdHggPSB7CisgICAgICBwcm9qZWN0QnVpbGRzVXJsIDogInslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCAlfSIsCisgICAgICB4aHJVcGRhdGVMYXllclVybCA6ICJ7JSB1cmwgJ3hocl91cGRhdGVsYXllcicgJX0iLAorICAgICAgbGF5ZXJWZXJzaW9uIDogeworICAgICAgICBuYW1lIDogInt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSIsCisgICAgICAgIGlkIDoge3tsYXllcnZlcnNpb24uaWR9fSwKKyAgICAgICAgY29tbWl0OiAie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V9fSIsCisgICAgICB7JWlmIGxheWVydmVyc2lvbi5pZCBpbiBwcm9qZWN0bGF5ZXJzICV9CisgICAgICAgIGluQ3VycmVudFByaiA6IHRydWUsCisgICAgICB7JSBlbHNlICV9CisgICAgICAgIGluQ3VycmVudFByaiA6IGZhbHNlLAorICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgbGF5ZXJkZXRhaWx1cmwgOiAieyUgdXJsICdsYXllcmRldGFpbHMnIHByb2plY3QuaWQgbGF5ZXJ2ZXJzaW9uLmlkICAlfSIsCisgICAgICAgIHNvdXJjZUlkOiB7e2xheWVydmVyc2lvbi5sYXllcl9zb3VyY2VfaWR8anNvbn19LAorICAgICAgfQorICAgIH07CisKKyAgICB0cnkgeworICAgICAgbGF5ZXJEZXRhaWxzUGFnZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiU29ycnksIEFuIGVycm9yIGhhcyBvY2N1cnJlZCBsb2FkaW5nIHRoaXMgcGFnZSIpOworICAgICAgY29uc29sZS53YXJuKGUpOworICAgIH0KKyAgfSk7Cis8L3NjcmlwdD4KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMSI+CisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICA8aDE+e3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDxzbWFsbCBjbGFzcz0iY29tbWl0IgorICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZXxsZW5ndGggPiAxMyAlfQorICAgICAgICBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9Int7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX0iCisgICAgICAgIHslIGVuZGlmICV9PgorICAgICAgICAoe3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V8dHJ1bmNhdGVjaGFyczoxM319KTwvc21hbGw+PC9oMT4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBjb250YWluZXIgZm9yIHRhYnMgLS0+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjcgdGFiYmFibGUiPgorICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQiIGlkPSJhbGVydC1hcmVhIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBpZD0iZGlzbWlzcy1hbGVydCI+JnRpbWVzOzwvYnV0dG9uPgorICAgIDxzcGFuIGlkPSJhbGVydC1tc2ciPjwvc3Bhbj4KKyAgPC9kaXY+CisgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgICAgPGEgZGF0YS10b2dnbGU9InRhYiIgaHJlZj0iI2luZm9ybWF0aW9uIiBpZD0iZGV0YWlscy10YWIiPkxheWVyIGRldGFpbHM8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjcmVjaXBlcyIgY2xhc3M9Im11dGVkIiBpZD0idGFyZ2V0cy10YWIiPlJlY2lwZXMgKDxzcGFuIGNsYXNzPSJ0YWJsZS1jb3VudC1yZWNpcGVzdGFibGUiPjwvc3Bhbj4pPC9hPgorICAgIDwvbGk+CisgICAgPGxpPgorICAgICAgPGEgZGF0YS10b2dnbGU9InRhYiIgaHJlZj0iI21hY2hpbmVzIiBjbGFzcz0ibXV0ZWQiIGlkPSJtYWNoaW5lcy10YWIiPk1hY2hpbmVzICg8c3BhbiBjbGFzcz0idGFibGUtY291bnQtbWFjaGluZXN0YWJsZSI+PC9zcGFuPik8L2E+CisgICAgPC9saT4KKyAgPC91bD4KKyAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgIDxzcGFuIGNsYXNzPSJidXR0b24tcGxhY2UiPgorICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmlkIG5vdCBpbiBwcm9qZWN0bGF5ZXJzICV9CisgICAgICA8YnV0dG9uIGlkPSJhZGQtcmVtb3ZlLWxheWVyLWJ0biIgZGF0YS1kaXJlY3RpdmU9ImFkZCIgY2xhc3M9ImJ0biBidG4tbGFyZ2UgYnRuLWJsb2NrIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcGx1cyI+PC9zcGFuPgorICAgICAgICBBZGQgdGhlIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciB0byB5b3VyIHByb2plY3QKKyAgICAgIDwvYnV0dG9uPgorICAgICAgeyUgZWxzZSAlfQorICAgICAgPGJ1dHRvbiBpZD0iYWRkLXJlbW92ZS1sYXllci1idG4iIGRhdGEtZGlyZWN0aXZlPSJyZW1vdmUiIGNsYXNzPSJidG4gYnRuLWJsb2NrIGJ0bi1sYXJnZSBidG4tZGFuZ2VyIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tdHJhc2giPjwvc3Bhbj4KKyAgICAgICAgRGVsZXRlIHRoZSB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgZnJvbSB5b3VyIHByb2plY3QKKyAgICAgIDwvYnV0dG9uPgorICAgICAgeyUgZW5kaWYgJX0KKyAgICA8L3NwYW4+CisKKyAgICA8IS0tIGxheWVyIGRldGFpbHMgcGFuZSAtLT4KKyAgICA8ZGl2IGlkPSJpbmZvcm1hdGlvbiIgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSI+CisgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICA8ZHQgY2xhc3M9IiI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZldGNoL2Nsb25lIFVSTCBvZiB0aGUgcmVwb3NpdG9yeSI+PC9pPgorICAgICAgICAgIFJlcG9zaXRvcnkgVVJMCisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24ubGF5ZXIudmNzX3VybH19PC9zcGFuPgorICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5nZXRfdmNzX2xpbmtfdXJsICV9CisgICAgICAgICAgPGEgaHJlZj0ie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19saW5rX3VybH19LyIgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iIHRhcmdldD0iX2JsYW5rIj48L2E+CisgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLXJlcG8tZm9ybSIgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJpbnB1dC14bGFyZ2UiIHZhbHVlPSJ7e2xheWVydmVyc2lvbi5sYXllci52Y3NfdXJsfX0iPgorICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1sYXllci1wcm9wPSJ2Y3NfdXJsIiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiA+PC9pPgorICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQsIGlmIG5vdCBpbiB0aGUgcm9vdCAodXN1YWxseSBvbmx5IHVzZWQgaWYgdGhlIHJlcG9zaXRvcnkgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBsYXllcikiPjwvaT4KKyAgICAgICAgICAgIFJlcG9zaXRvcnkgc3ViZGlyZWN0b3J5CisgICAgICAgICAgPC9kdD4KKyAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPk5vdCBzZXQ8L3NwYW4+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24uZGlycGF0aH19PC9zcGFuPgorICAgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmdldF92Y3NfZGlycGF0aF9saW5rX3VybCAlfQorICAgICAgICAgICAgPGEgaHJlZj0ie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19kaXJwYXRoX2xpbmtfdXJsfX0iIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIiB0YXJnZXQ9Il9ibGFuayI+PC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2Utc3ViZGlyLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmRpcnBhdGh9fSI+CisgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtbGF5ZXItcHJvcD0iZGlycGF0aCIgY2xhc3M9ImJ0biBjaGFuZ2UtYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPGkgaWQ9ImNoYW5nZS1zdWJkaXIiIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCBkZWxldGUtY3VycmVudC12YWx1ZSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJEZWxldGUiPjwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgR2l0IGJyYW5jaCwgdGFnIG9yIGNvbW1pdCI+PC9pPgorICAgICAgICAgICAgICBSZXZpc2lvbgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImN1cnJlbnQtdmFsdWUiPnt7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX08L3NwYW4+CisgICAgICAgICAgICAgIDxmb3JtIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19Ij4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgZGF0YS1sYXllci1wcm9wPSJjb21taXQiIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT3RoZXIgbGF5ZXJzIHRoaXMgbGF5ZXIgZGVwZW5kcyB1cG9uIj48L2k+CisgICAgICAgICAgICAgICAgTGF5ZXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIGN1cnJlbnQtdmFsdWUiIGlkPSJsYXllci1kZXBzLWxpc3QiPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGxkIGluIGxheWVydmVyc2lvbi5kZXBlbmRlbmNpZXMuYWxsICV9CisgICAgICAgICAgICAgICAgICA8bGkgZGF0YS1sYXllci1pZD0ie3tsZC5kZXBlbmRzX29uLmlkfX0iPgorICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9Int7bGQuZGVwZW5kc19vbi5sYXllci52Y3NfdXJsfX0gfCB7e2xkLmRlcGVuZHNfb24uZ2V0X3Zjc19yZWZlcmVuY2V9fSIgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIHByb2plY3QuaWQgbGQuZGVwZW5kc19vbi5pZCAlfSI+e3tsZC5kZXBlbmRzX29uLmxheWVyLm5hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tdHJhc2ggIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIGFkZC1kZXBzIj4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgZGF0YS1taW5MZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiICBwbGFjZWhvbGRlcj0iVHlwZSBhIGxheWVyIG5hbWUiIGlkPSJsYXllci1kZXAtaW5wdXQiPgorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBpZD0iYWRkLWxheWVyLWRlcGVuZGVuY3ktYnRuIiA+CisgICAgICAgICAgICAgICAgICAgICAgQWRkIGxheWVyCisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgYWRkLWRlcHMiPllvdSBjYW4gb25seSBhZGQgbGF5ZXJzIFRvYXN0ZXIga25vd3MgYWJvdXQ8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPC9kbD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPCEtLSBlbmQgbGF5ZXJkZXRhaWxzIHRhYiAtLT4KKyAgICAgICAgICAgIDwhLS0gdGFyZ2V0cyB0YWIgLS0+CisgICAgICAgICAgICA8ZGl2IGlkPSJyZWNpcGVzIiBjbGFzcz0idGFiLXBhbmUiPgorICAgICAgICAgICAgICA8IS0tIFJlY2lwZSB0YWJsZSAtLT4KKyAgICAgICAgICAgICAgPGRpdiBpZD0ibm8tcmVjaXBlcy15ZXQiIGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGRvZXMgbm90IGhhdmUgcmVjaXBlIGluZm9ybWF0aW9uIGZvciB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgICAgPHA+VG9hc3RlciBsZWFybnMgYWJvdXQgbGF5ZXJzIHdoZW4geW91IGJ1aWxkIHRoZW0uIElmIHRoaXMgbGF5ZXIgcHJvdmlkZXMgYW55IHJlY2lwZXMsIHRoZXkgd2lsbCBiZSBsaXN0ZWQgaGVyZSBhZnRlciB5b3UgYnVpbGQgdGhlIDxzdHJvbmc+IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8L3N0cm9uZz4gbGF5ZXIuPC9wPgorICAgICAgICAgICAgICA8L2Rpdj4KKworCisKKyAgICAgICAgICAgICAgeyUgdXJsICdsYXllcnJlY2lwZXN0YWJsZScgcHJvamVjdC5pZCBsYXllcnZlcnNpb24uaWQgIGFzIHhocl90YWJsZV91cmwgJX0KKyAgICAgICAgICAgICAgeyUgd2l0aCAicmVjaXBlc3RhYmxlIiBhcyB0YWJsZV9uYW1lICV9CisgICAgICAgICAgICAgIHslIHdpdGggIlJlY2lwZXMiIGFzIHRpdGxlICV9CisgICAgICAgICAgICAgIHslIGluY2x1ZGUgJ3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbCcgJX0KKyAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGRpdiBpZD0ibWFjaGluZXMiIGNsYXNzPSJ0YWItcGFuZSI+CisKKyAgICAgICAgICAgICAgPGRpdiBpZD0ibm8tbWFjaGluZXMteWV0IiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgICAgPHA+VG9hc3RlciBkb2VzIG5vdCBoYXZlIG1hY2hpbmUgaW5mb3JtYXRpb24gZm9yIHRoZSA8c3Ryb25nPiB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPC9zdHJvbmc+IGxheWVyLjwvcD4KKyAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGxlYXJucyBhYm91dCBsYXllcnMgd2hlbiB5b3UgYnVpbGQgdGhlbS4gSWYgdGhpcyBsYXllciBwcm92aWRlcyBhbnkgbWFjaGluZXMsIHRoZXkgd2lsbCBiZSBsaXN0ZWQgaGVyZSBhZnRlciB5b3UgYnVpbGQgdGhlIDxzdHJvbmc+IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8L3N0cm9uZz4gbGF5ZXIuPC9wPgorICAgICAgICAgICAgICA8L2Rpdj4KKworCisgICAgICAgICAgICAgIDwhLS0gTWFjaGluZXMgdGFibGUgLS0+CisgICAgICAgICAgICAgIHslIHVybCAnbGF5ZXJtYWNoaW5lc3RhYmxlJyBwcm9qZWN0LmlkIGxheWVydmVyc2lvbi5pZCAgYXMgeGhyX3RhYmxlX3VybCAlfQorICAgICAgICAgICAgICB7JSB3aXRoICJtYWNoaW5lc3RhYmxlIiBhcyB0YWJsZV9uYW1lICAlfQorICAgICAgICAgICAgICB7JSB3aXRoICJNYWNoaW5lcyIgYXMgdGl0bGUgICV9CisgICAgICAgICAgICAgIHslIGluY2x1ZGUgJ3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbCcgJX0KKyAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiIGNvbnRlbnQgLS0+CisgICAgICAgIDwvZGl2PiA8IS0tIGVuZCB0YWJhYmxlIC0tPgorCisgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuNCB3ZWxsIj4gPCEtLSBpbmZvIHNpZGUgcGFuZWwgLS0+CisgICAgICAgICAgPGgyPkFib3V0IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fTwvaDI+CisgICAgICAgICAgPGRsIGNsYXNzPSJpdGVtLWluZm8iPgorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIFN1bW1hcnkKKyAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBsYXllciI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIiBzdHlsZT0iZGlzcGxheTpub25lIj5Ob3Qgc2V0PC9zcGFuPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24ubGF5ZXIuc3VtbWFyeXxkZWZhdWx0X2lmX25vbmU6Jyd9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsgbWFyZ2luLWJvdHRvbToyMHB4Ij4KKyAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9InNwYW4xMiIgcm93cz0iMiI+eyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLnN1bW1hcnkgJX17e2xheWVydmVyc2lvbi5sYXllci5zdW1tYXJ5fX17JSBlbmRpZiAlfTwvdGV4dGFyZWE+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIGRhdGEtbGF5ZXItcHJvcD0ic3VtbWFyeSIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tdHJhc2ggZGVsZXRlLWN1cnJlbnQtdmFsdWUiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICBEZXNjcmlwdGlvbgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIiBzdHlsZT0iZGlzcGxheTpub25lIj5Ob3Qgc2V0PC9zcGFuPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb258ZGVmYXVsdF9pZl9ub25lOicnfX08L3NwYW4+CisgICAgICAgICAgICAgIDxmb3JtIHN0eWxlPSJkaXNwbGF5Om5vbmU7IG1hcmdpbi1ib3R0b206MjBweCI+CisgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJzcGFuMTIiIHJvd3M9IjYiPnslIGlmIGxheWVydmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbiAlfXt7bGF5ZXJ2ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9ufX17JSBlbmRpZiAlfTwvdGV4dGFyZWE+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIGRhdGEtbGF5ZXItcHJvcD0iZGVzY3JpcHRpb24iIHR5cGU9ImJ1dHRvbiIgPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGNhbmNlbCI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCBkZWxldGUtY3VycmVudC12YWx1ZSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJEZWxldGUiPjwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24ubGF5ZXIudXBfaWQgJX0KKyAgICAgICAgICAgIDxkdD5MYXllciBpbmRleDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2JyYW5jaC97e2xheWVydmVyc2lvbi51cF9icmFuY2gubmFtZX19L2xheWVyL3t7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSI+bGF5ZXIgaW5kZXggbGluazwvYT4KKworICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICA8L2RsPgorICAgICAgPC9kaXY+CisKKyAgICAgIHslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbWFjaGluZV9idG4uaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tYWNoaW5lX2J0bi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyY2I1NWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbWFjaGluZV9idG4uaHRtbApAQCAtMCwwICsxLDggQEAKKzxhIGhyZWY9InslIHVybCAncHJvamVjdCcgZXh0cmEucGlkICV9P3NldE1hY2hpbmU9e3tkYXRhLm5hbWV9fSIgY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXItZXhpc3RzLXt7ZGF0YS5sYXllcl92ZXJzaW9uLmlkfX0iIHN0eWxlPSJtYXJnaW4tdG9wOiA1cHg7IGRpc3BsYXk6bm9uZSI+CisgIFNlbGVjdCBtYWNoaW5lPC9hPgorPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllcmJ0biBsYXllci1hZGQte3tkYXRhLmxheWVyX3ZlcnNpb24uaWR9fSIgZGF0YS1sYXllcj0neyAiaWQiOiB7e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19LCAibmFtZSI6ICAie3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IiwgImxheWVyZGV0YWlsdXJsIjogInsldXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24uaWQgJX0ifScgZGF0YS1kaXJlY3RpdmU9ImFkZCI+CisgIDxpIGNsYXNzPSJpY29uLXBsdXMiPjwvaT4KKyAgQWRkIGxheWVyCisgIDxpIHRpdGxlPSIiIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IlRvIGVuYWJsZSB0aGlzIG1hY2hpbmUsIHlvdSBtdXN0IGZpcnN0IGFkZCB0aGUge3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19IGxheWVyIHRvIHlvdXIgcHJvamVjdCI+PC9pPgorPC9idXR0b24+CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tcmJfc2VjdGlvbi5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21yYl9zZWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2ZmI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tcmJfc2VjdGlvbi5odG1sCkBAIC0wLDAgKzEsMTIxIEBACit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQorCisKK3slaWYgbXJ1LmNvdW50ID4gMCV9CisKKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgPGgxPgorICAgICAgICAgIExhdGVzdCBidWlsZHMKKyAgICAgICA8L2gxPgorICA8L2Rpdj4KKyAgPGRpdiBpZD0ibGF0ZXN0LWJ1aWxkcyI+CisgIHslIGZvciBidWlsZCBpbiBtcnUgJX0KKyAgICA8ZGl2IGNsYXNzPSJhbGVydCB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1hbGVydC1zdWNjZXNzeyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX1hbGVydC1lcnJvcnslZWxzZSV9YWxlcnQtaW5mb3slZW5kaWYlfSBwcm9qZWN0LW5hbWUgIj4KKyAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9bGFiZWwtc3VjY2Vzc3slZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9bGFiZWwtaW1wb3J0YW50eyVlbHNlJX1sYWJlbC1pbmZveyVlbmRpZiV9Ij4KKyAgICAgICAgIDxhIGhyZWY9eyUgdXJsICdwcm9qZWN0JyBidWlsZC5wcm9qZWN0LnBrICV9PgorICAgICAgICAgICB7e2J1aWxkLnByb2plY3QubmFtZX19CisgICAgICAgICA8L2E+CisgICAgICAgPC9zcGFuPgorCisgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMyBsZWFkIj4KKyAgICB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEIG9yIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgJ2J1aWxkZGFzaGJvYXJkJyBidWlsZC5wayV9IiBjbGFzcz0ieyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCAlfXN1Y2Nlc3N7JWVsc2UlfWVycm9yeyVlbmRpZiV9Ij4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAwICV9CisgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS10b2dnbGU9InRvb2x0aXAiCisgICAgICAgICAgICAgICAgICB7JWlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9CisgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJUYXJnZXRzOiB7JWZvciB0YXJnZXQgaW4gYnVpbGQudGFyZ2V0X3NldC5hbGwlfXt7dGFyZ2V0LnRhcmdldH19IHslZW5kZm9yJX0iCisgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICA+CisKKyAgICAgICAgICAgICAgICAgIHt7YnVpbGQudGFyZ2V0X3NldC5hbGwuMC50YXJnZXR9fSB7JWlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9KCsge3tidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KXslZW5kaWYlfQorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjIgbGVhZCI+CisgICAgICAgICAgICAgICAgeyUgaWYgYnVpbGQuY29tcGxldGVkX29ufGZvcm1hdF9idWlsZF9kYXRlICAlfQorICAgICAgICAgICAgICAgICAgICB7eyBidWlsZC5jb21wbGV0ZWRfb258ZGF0ZTonZC9tL3kgSDppJyB9fQorICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAge3sgYnVpbGQuY29tcGxldGVkX29ufGRhdGU6J0g6aScgfX0KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCBvciBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjIgbGVhZCI+CisgICAgICB7JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiByZWQiPjwvaT4gPGEgaHJlZj0ieyV1cmwgJ2J1aWxkZGFzaGJvYXJkJyBidWlsZC5wayV9I2Vycm9ycyIgY2xhc3M9ImVycm9yIj57e2J1aWxkLmVycm9ycy5jb3VudH19IGVycm9ye3tidWlsZC5lcnJvcnMuY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMiBsZWFkIj4KKyAgICAgIHslIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCAlfQorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXdhcm5pbmctc2lnbiB5ZWxsb3ciPjwvaT4gPGEgaHJlZj0ieyV1cmwgJ2J1aWxkZGFzaGJvYXJkJyBidWlsZC5wayV9I3dhcm5pbmdzIiBjbGFzcz0id2FybmluZyI+e3tidWlsZC53YXJuaW5ncy5jb3VudH19IHdhcm5pbmd7e2J1aWxkLndhcm5pbmdzLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVhZCAiPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgQnVpbGQgdGltZTogPGEgaHJlZj0ieyUgdXJsICdidWlsZHRpbWUnIGJ1aWxkLnBrICV9Ij57eyBidWlsZC50aW1lc3BlbnRfc2Vjb25kc3xzZWN0b2htcyB9fTwvYT4KKyAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4KKyAgICAgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9CisgICAgICAgICAgICAgICAgICAgICAgYnRuLXN1Y2Nlc3MKKyAgICAgICAgICAgICAgICAgIHslIGVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KKyAgICAgICAgICAgICAgICAgICAgICBidG4tZGFuZ2VyCisgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgYnRuLWluZm8KKyAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgICAgICAgcHVsbC1yaWdodCIKKyAgICAgICAgICAgICAgICAgIG9uY2xpY2s9J3NjaGVkdWxlQnVpbGQoeyUgdXJsICdwcm9qZWN0YnVpbGRzJyBidWlsZC5wcm9qZWN0LmlkIGFzIGJwaSAlfXt7YnBpfGpzb259fSwKKyAgICAgICAgICAgICAgICAgICAge3tidWlsZC5wcm9qZWN0Lm5hbWV8anNvbn19LAorICAgICAgICAgICAgICAgICAgICB7JSB1cmwgJ3Byb2plY3QnIGJ1aWxkLnByb2plY3QuaWQgYXMgYnB1cmwgJX17e2JwdXJsfGpzb259fSwKKyAgICAgICAgICAgICAgICAgICAge3tidWlsZC50YXJnZXRfc2V0LmFsbHxnZXRfdGFza3N8anNvbn19KSc+CisKKyAgICAgICAgICAgICAgICAgICAgUnVuIGFnYWluCisgICAgICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgICAgPC9kaXY+CisgICAgeyVlbmRpZiV9CisgICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLklOX1BST0dSRVNTICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuNCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MiIHN0eWxlPSJtYXJnaW4tdG9wOjVweDsiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tidWlsZC5jb21wbGV0ZXBlcn19JSBvZiB0YXNrcyBjb21wbGV0ZSI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiB7e2J1aWxkLmNvbXBsZXRlcGVyfX0lOyIgY2xhc3M9ImJhciI+PC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlYWQgcHVsbC1yaWdodCI+e3tidWlsZC5jb21wbGV0ZXBlcn19JSBvZiB0YXNrcyBjb21wbGV0ZTwvZGl2PgorICAgIHslZW5kaWYlfQorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICB7JSBlbmRmb3IgJX0KKyAgPC9kaXY+CisKKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHNjaGVkdWxlQnVpbGQodXJsLCBwcm9qZWN0TmFtZSwgcHJvamVjdFVybCwgYnVpbGRsaXN0KSB7CisgIGNvbnNvbGUubG9nKCJzY2hlZHVsZUJ1aWxkIik7CisgIGxpYnRvYXN0ZXIuc3RhcnRBQnVpbGQodXJsLCBudWxsLCBidWlsZGxpc3Quam9pbigiICIpLCBmdW5jdGlvbigpeworICAgIGNvbnNvbGUubG9nKCJyZWxvYWRpbmcgcGFnZSIpOworICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKKyAgfSwgbnVsbCk7Cit9CisKKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CisKKyAgJCgiLmNhbmNlbC1idWlsZC1idG4iKS5jbGljayhmdW5jdGlvbiAoKXsKKyAgICB2YXIgdXJsID0gJCh0aGlzKS5kYXRhKCdyZXF1ZXN0LXVybCcpOworICAgIHZhciBidWlsZElkcyA9ICQodGhpcykuZGF0YSgnYnVpbGQtaWQnKTsKKyAgICB2YXIgYnRuID0gJCh0aGlzKTsKKworICAgIGxpYnRvYXN0ZXIuY2FuY2VsQUJ1aWxkKHVybCwgYnVpbGRJZHMsIGZ1bmN0aW9uKCl7CisgICAgICBidG4ucGFyZW50cygiLmFsZXJ0IikuZmFkZU91dCgpOworICAgIH0sIG51bGwpOworICB9KTsKK30pOworCis8L3NjcmlwdD4KKworeyVlbmRpZiV9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdwcm9qZWN0Lmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbmV3cHJvamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NzM5MGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbmV3cHJvamVjdC5odG1sCkBAIC0wLDAgKzEsMTMwIEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgICAgPGgxPkNyZWF0ZSBhIG5ldyBwcm9qZWN0PC9oMT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICAgeyUgaWYgYWxlcnQgJX0KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIHJvdy1mbHVpZCIgcm9sZT0iYWxlcnQiPnt7YWxlcnR9fTwvZGl2PgorICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuNiI+CisgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCI+eyUgY3NyZl90b2tlbiAlfQorCisgICAgICAgICAgICA8ZmllbGRzZXQ+CisgICAgICAgICAgICAgIDxsYWJlbD5Qcm9qZWN0IG5hbWUgPHNwYW4gY2xhc3M9Im11dGVkIj4ocmVxdWlyZWQpPC9zcGFuPjwvbGFiZWw+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIiByZXF1aXJlZCBpZD0ibmV3LXByb2plY3QtbmFtZSIgbmFtZT0icHJvamVjdG5hbWUiPgorICAgICAgICAgICAgPC9maWVsZHNldD4KKzwhLS0KKyAgICAgICAgICAgIDxmaWVsZHNldD4KKyAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSI+UHJvamVjdCB0eXBlPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJwcm9qZWN0LWZvcm0gcmFkaW8iPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icHR5cGUiIHZhbHVlPSJhbmFseXNpcyIgY2hlY2tlZC8+IEFuYWx5c2lzIFByb2plY3Q8L2xhYmVsPgorCisgICAgICAgICAgICAgICAgeyUgaWYgcmVsZWFzZXMuY291bnQgPiAwICV9CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIHJhZGlvIj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InB0eXBlIiB2YWx1ZT0iYnVpbGQiIGNoZWNrZWQgLz4gQnVpbGQgUHJvamVjdDwvbGFiZWw+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgPC9maWVsZHNldD4gLS0+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InB0eXBlIiB2YWx1ZT0iYnVpbGQiIC8+CisKKyAgICAgICAgeyUgaWYgcmVsZWFzZXMuY291bnQgPiAwICV9CisgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9InJlbGVhc2UiPgorICAgICAgICAgICAgeyUgaWYgcmVsZWFzZXMuY291bnQgPiAxICV9CisgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIj4KKyAgICAgICAgICAgICAgICBSZWxlYXNlCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBzeXN0ZW0geW91IHdhbnQgdG8gdXNlIj48L2k+CisgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0icHJvamVjdHZlcnNpb24iIGlkPSJwcm9qZWN0dmVyc2lvbiI+CisgICAgICAgICAgICAgICAgeyUgZm9yIHJlbGVhc2UgaW4gcmVsZWFzZXMgJX0KKyAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tyZWxlYXNlLmlkfX0iCisgICAgICAgICAgICAgICAgICAgICAgICB7JWlmIGRlZmF1bHRicmFuY2ggPT0gcmVsZWFzZS5uYW1lICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgICAgICAgICAgPnt7cmVsZWFzZS5kZXNjcmlwdGlvbn19PC9vcHRpb24+CisgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgICAgICAgIHslIGZvciByZWxlYXNlIGluIHJlbGVhc2VzICV9CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCBoZWxwdGV4dCIgaWQ9ImRlc2NyaXB0aW9uLXt7cmVsZWFzZS5pZH19IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgc3BhbjUiPnt7cmVsZWFzZS5oZWxwdGV4dHxzYWZlfX08L3NwYW4+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwcm9qZWN0dmVyc2lvbiIgdmFsdWU9Int7cmVsZWFzZXMuMC5pZH19Ii8+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9maWVsZHNldD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1hY3Rpb25zIj4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgaWQ9ImNyZWF0ZS1wcm9qZWN0LWJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIHZhbHVlPSJDcmVhdGUgcHJvamVjdCIvPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ij5UbyBjcmVhdGUgYSBwcm9qZWN0LCB5b3UgbmVlZCB0byBlbnRlciBhIHByb2plY3QgbmFtZTwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8IS0tCisgICAgICAgIDxkaXYgY2xhc3M9InNwYW41IHdlbGwiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIj4KKyAgICAgICAgICAgICAgICAgPGg0PlRvYXN0ZXIgcHJvamVjdCB0eXBlczwvaDQ+CisgICAgICAgICAgICAgICAgIDxwPldpdGggYSA8c3Ryb25nPmJ1aWxkIHByb2plY3Q8L3N0cm9uZz4geW91IGNvbmZpZ3VyZSBhbmQgcnVuIHlvdXIgYnVpbGRzIGZyb20gVG9hc3Rlci48L3A+CisgICAgICAgICAgICAgICAgIDxwPldpdGggYW4gPHN0cm9uZz5hbmFseXNpcyBwcm9qZWN0PC9zdHJvbmc+LCB0aGUgYnVpbGRzIGFyZSBjb25maWd1cmVkIGFuZCBydW4gYnkgYW5vdGhlciB0b29sCisgICAgICAgICAgICAgICAgIChzb21ldGhpbmcgbGlrZSBCdWlsZGJvdCBvciBKZW5raW5zKSwgYW5kIHRoZSBwcm9qZWN0IG9ubHkgY29sbGVjdHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgICAgICAgICAgICBidWlsZHMgKHBhY2thZ2VzLCByZWNpcGVzLCBkZXBlbmRlbmNpZXMsIGxvZ3MsIGV0YykuIDwvcD4KKyAgICAgICAgICAgICAgICAgPHA+WW91IGNhbiByZWFkIG1vcmUgb24gPGEgaHJlZj0iIyI+aG93IHRvIHNldCB1cCBhbiBhbmFseXNpcyBwcm9qZWN0PC9hPgorICAgICAgICAgICAgICAgICBpbiB0aGUgVG9hc3RlciBtYW51YWwuPC9wPgorICAgICAgICAgICAgICAgICA8aDQ+UmVsZWFzZTwvaDQ+CisgICAgICAgICAgICAgICAgIDxwPklmIHlvdSBjcmVhdGUgYSA8c3Ryb25nPmJ1aWxkIHByb2plY3Q8L3N0cm9uZz4sIHlvdSB3aWxsIG5lZWQgdG8gc2VsZWN0IGEgPHN0cm9uZz5yZWxlYXNlPC9zdHJvbmc+LAorICAgICAgICAgICAgICAgICB3aGljaCBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgYnVpbGQgc3lzdGVtIHlvdSB3YW50IHRvIHVzZSB0byBydW4geW91ciBidWlsZHMuPC9wPgorICAgICAgICAgICAgIDwvZGl2PiAtLT4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIGhpZGUgdGhlIG5ldyBwcm9qZWN0IGJ1dHRvbgorICAgICAgICAgICAgJCgiI25ldy1wcm9qZWN0LWJ1dHRvbiIpLmhpZGUoKTsKKyAgICAgICAgICAgICQoJy5idG4tcHJpbWFyeScpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisKKyAgICAgICAgICAgIC8vIGVuYWJsZSBzdWJtaXQgYnV0dG9uIHdoZW4gYWxsIHJlcXVpcmVkIGZpZWxkcyBhcmUgcG9wdWxhdGVkCisgICAgICAgICAgICAkKCJpbnB1dCNuZXctcHJvamVjdC1uYW1lIikub24oJ2lucHV0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCQoImlucHV0I25ldy1wcm9qZWN0LW5hbWUiKS52YWwoKS5sZW5ndGggPiAwICl7CisgICAgICAgICAgICAgICAgICAgICQoJy5idG4tcHJpbWFyeScpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICAgICAgICAgICAgICAgICQoIi5oZWxwLWlubGluZSIpLmNzcygndmlzaWJpbGl0eScsJ2hpZGRlbicpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnLmJ0bi1wcmltYXJ5JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAgICAgICAgICAgICAgICAgICAgJCgiLmhlbHAtaW5saW5lIikuY3NzKCd2aXNpYmlsaXR5JywndmlzaWJsZScpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBzaG93IHJlbGV2YW50IGhlbHAgdGV4dCBmb3IgdGhlIHNlbGVjdGVkIHJlbGVhc2UKKyAgICAgICAgICAgIHZhciBzZWxlY3RlZF9yZWxlYXNlID0gJCgnc2VsZWN0JykudmFsKCk7CisgICAgICAgICAgICAkKCIjZGVzY3JpcHRpb24tIiArIHNlbGVjdGVkX3JlbGVhc2UpLnNob3coKTsKKworCisgICAgICAgICAgICAkKCdzZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB2YXIgbmV3X3JlbGVhc2UgPSAkKCdzZWxlY3QnKS52YWwoKTsKKyAgICAgICAgICAgICAgICAkKCIuaGVscHRleHQiKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgJCgnI2Rlc2NyaXB0aW9uLScgKyBuZXdfcmVsZWFzZSkuZmFkZUluKCk7CisgICAgICAgICAgICB9KTsKKworLyoJCQkvLyBIaWRlIHRoZSBwcm9qZWN0IHJlbGVhc2Ugd2hlbiB5b3Ugc2VsZWN0IGFuIGFuYWx5c2lzIHByb2plY3QKKwkJCWZ1bmN0aW9uIHByb2plY3RUeXBlKCkgeworCQkJCWlmICgkKCJpbnB1dFt0eXBlPSdyYWRpbyddOmNoZWNrZWQiKS52YWwoKSA9PSAnYnVpbGQnKSB7CisJCQkJCSQoJy5yZWxlYXNlJykuZmFkZUluKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkkKCcucmVsZWFzZScpLmZhZGVPdXQoKTsKKwkJCQl9CisJCQl9CisJCQlwcm9qZWN0VHlwZSgpOworCisJCQkkKCdpbnB1dDpyYWRpbycpLmNoYW5nZShmdW5jdGlvbigpeworCQkJCXByb2plY3RUeXBlKCk7CisJCQl9KTsgKi8KKyAgICAgICAgfSk7CisgICAgPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjIwYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbApAQCAtMCwwICsxLDk5IEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJyBidWlsZC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNob3dzIHRoZSBmaWxlcyBwcm9kdWNlZCBieSB0aGlzIHBhY2thZ2UuIj48L2k+CisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBmaWxlcyAoe3twYWNrYWdlLmJ1aWxkZmlsZWxpc3RfcGFja2FnZS5jb3VudH19KQorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcycgYnVpbGQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTaG93cyB0aGUgcnVudGltZSBwYWNrYWdlcyByZXF1aXJlZCBieSB0aGlzIHBhY2thZ2UuIj48L2k+CisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWUgZGVwZW5kZW5jaWVzICh7e2RlcGVuZGVuY3lfY291bnR9fSkKKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICA8L3VsPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJkZXBlbmRlbmNpZXMiPgorICAgICAgICAgICAgeyUgaWZlcXVhbCBydW50aW1lX2RlcHN8bGVuZ3RoIDAgJX0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaGFzIG5vIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpcyA8c3Ryb25nPm5vdCBpbmNsdWRlZDwvc3Ryb25nPiBpbiBhbnkgaW1hZ2UuIFRoaXMgcGFnZSBzaG93cyB5b3UgdGhlIHByb2plY3RlZCBydW50aW1lIGRlcGVuZGVuY2llcyBpZiB5b3UgaW5jbHVkZSA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpbiBmdXR1cmUgYnVpbGRzLgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5WZXJzaW9uPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9InNpemVjb2wgc3BhbjIiPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQkJeyUgZm9yIHJ1bnRpbWVfZGVwIGluIHJ1bnRpbWVfZGVwcyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHt7cnVudGltZV9kZXAuc2l6ZXxmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3N9fSA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgcnVudGltZV9kZXAuc2l6ZSAhPSAtMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2J1aWx0X2RldGFpbCcgYnVpbGQuaWQgcnVudGltZV9kZXAuZGVwZW5kc19vbl9pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3J1bnRpbWVfZGVwLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3J1bnRpbWVfZGVwLm5hbWV8Zm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cnVudGltZV9kZXAudmVyc2lvbn19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InNpemVjb2wiPnt7cnVudGltZV9kZXAuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisJCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgeyUgZW5kaWZlcXVhbCAlfQorICAgICAgICAgICAgeyUgaWZub3RlcXVhbCBvdGhlcl9kZXBzfGxlbmd0aCAwICV9CisgICAgICAgICAgICAgICAgPGgzPk90aGVyIHJ1bnRpbWUgcmVsYXRpb25zaGlwczwvaDM+CisgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGFja2FnZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2l6ZWNvbCBzcGFuMiI+U2l6ZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRml2ZSByZWxhdGlvbnNoaXAgdHlwZXMgZXhpc3Q6IHJlY29tbWVuZHMsIHN1Z2dlc3RzLCBwcm92aWRlcywgcmVwbGFjZXMgYW5kIGNvbmZsaWN0cyI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGlvbnNoaXAgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCQl7JSBmb3Igb3RoZXJfZGVwIGluIG90aGVyX2RlcHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7e290aGVyX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319ID4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIG90aGVyX2RlcC5zaXplICE9IC0xICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJyBidWlsZC5pZCBvdGhlcl9kZXAuZGVwZW5kc19vbl9pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b3RoZXJfZGVwLnZlcnNpb259fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzaXplY29sIj57e290aGVyX2RlcC5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAuZGVwX3R5cGVfZGlzcGxheX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgeyUgZW5kaWZub3RlcXVhbCAlfQorICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLXBhbmUgLS0+CisgICAgICAgIDwvZGl2PiA8IS0tIHRhYi1jb250ZW50IC0tPgoreyUgZW5kYmxvY2sgdGFiY29udGVudCAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGV0YWlsLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU4Y2NiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGV0YWlsLmh0bWwKQEAgLTAsMCArMSw2NSBAQAoreyUgZXh0ZW5kcyAicGFja2FnZV9kZXRhaWxfYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayB0YWJjb250ZW50ICV9CisgICAgeyUgd2l0aCBwYWNrYWdlRmlsZUNvdW50PXBhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50ICV9CisgICAgICAgIDwhLS0gR2VuZXJhdGVkIEZpbGVzIC0tPgorICAgICAgICB7JSBpZiBwYWNrYWdlLmJ1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlLmNvdW50ID09IDAgJX0KKyAgICAgICAgICAgIHsjIE5vdCBpbmNsdWRlZCBjYXNlICN9CisgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4gPGEgaHJlZj0iIyI+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGaWxlcyBhZGRlZCB0byBhIHJvb3QgZmlsZSBzeXN0ZW0gd2hlbiB5b3UgaW5jbHVkZSB7e3BhY2thZ2UubmFtZX19IGluIGFuIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBmaWxlcyAoe3twYWNrYWdlRmlsZUNvdW50fX0pCisgICAgICAgICAgICAgICAgPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPjxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUHJvamVjdGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHdoZW4geW91IGluY2x1ZGUge3twYWNrYWdlLm5hbWV9fSBpbiBhbiBpbWFnZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICBSdW50aW1lIGRlcGVuZGVuY2llcyAoe3tkZXBlbmRlbmN5X2NvdW50fX0pCisgICAgICAgICAgICAgICAgPC9hPjwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIiBpZD0iZmlsZXMiPgorICAgICAgICAgICAgPCEtLSBQYWNrYWdlIGZpbGUgbGlzdCBvciBpZiBlbXB0eSwgYWxlcnQgcGFuZSAtLT4KKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2VGaWxlQ291bnQgPiAwICV9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGlzIDxzdHJvbmc+bm90IGluY2x1ZGVkPC9zdHJvbmc+IGluIGFueSBpbWFnZS4gVGhpcyBwYWdlIHNob3dzIHlvdSB0aGUgZmlsZXMgYWRkZWQgdG8gYW4gaW1hZ2Ugcm9vdCBmaWxlIHN5c3RlbSBpZiB5b3UgaW5jbHVkZSA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBpbiBmdXR1cmUgYnVpbGRzLgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgInRhYmxlc29ydC5odG1sIiAlfQorICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCQl7JSBmb3IgZmlsZSBpbiBvYmplY3RzICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InBhdGgiPnt7ZmlsZS5wYXRofX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpbGVzaXplIHNpemVjb2wiPnt7ZmlsZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisJCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgICAgICA8L3RhYmxlPgorCisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGRvZXMgbm90IGdlbmVyYXRlIGFueSBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIDwvZGl2PiA8IS0tIHRhYi1wYW5lIGFjdGl2ZSAtLT4KKyAgICAgICAgICAgIDwvZGl2PiA8IS0tIHRhYi1jb250ZW50IC0tPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICB7IyBJbmNsdWRlZCBjYXNlICN9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVhZCB3ZWxsIj4KKyAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBpbmNsdWRlZCBpbjoKKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGl0YXJnZXQgaW4gcGFja2FnZS5idWlsZHRhcmdldGxpc3RfcGFja2FnZS5hbGx8ZGljdHNvcnQ6InRhcmdldC50YXJnZXQiICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCBpdGFyZ2V0LnRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIGZvcmxvb3AuY291bnRlcjAgPiAwICAlfQorICAgICAgICAgICAgICAgICAgICAgICAgLCZuYnNwOworICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRhcmdldC50YXJnZXQudGFyZ2V0fX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PiA8IS0tIHRhYi1wYW5lIGFjdGl2ZSAtLT4KKyAgICAgICAgICAgIDwvZGl2PiA8IS0tIHRhYi1jb250ZW50IC0tPgorICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgeyUgZW5kd2l0aCAlfQoreyUgZW5kYmxvY2sgdGFiY29udGVudCAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0YmM4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwKQEAgLTAsMCArMSwxNDIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZGRldGFpbHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQorICAgIDwhLS0gZnVuY3Rpb25zIHRvIGZvcm1hdCBwYWNrYWdlICdpbnN0YWxsZWRfcGFja2FnZScgYWxpYXMgLS0+CisgICAgPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBmbXRBbGlhc0hlbHAocGFja2FnZV9uYW1lLCBhbGlhcywgaG92ZXIpIHsKKyAgICAgICAgdmFyIHIgPSBudWxsOworICAgICAgICBpZiAoYWxpYXMgIT0gbnVsbCAmJiBhbGlhcyAhPSAnJykgeworICAgICAgICAgICAgciA9ICc8c3BhbiBjbGFzcz0ibXV0ZWQiPiBhcyAnICsgYWxpYXMgKyAnJm5ic3AnOworICAgICAgICAgICAgciArPSAnPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCc7CisgICAgICAgICAgICBpZiAoaG92ZXIpIHsKKyAgICAgICAgICAgICAgICByKz0gJyBob3Zlci1oZWxwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHIrPSAnIGhlYWRpbmctaGVscCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByICs9ICciJzsKKyAgICAgICAgICAgIHRpdGxlID0gcGFja2FnZV9uYW1lICsgJyB3YXMgcmVuYW1lZCBhdCBwYWNrYWdpbmcgdGltZSBhbmQgd2FzIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhcyAnICsgYWxpYXM7CisgICAgICAgICAgICByICs9ICcgdGl0bGU9IicgKyB0aXRsZSArICciPic7CisgICAgICAgICAgICByICs9ICc8L2k+JzsKKyAgICAgICAgICAgIHIgKz0gJzwvc3Bhbj4nOworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUocik7CisgICAgICAgIH0KKyAgICB9CisgICAgPC9zY3JpcHQ+Cit7JSBlbmRibG9jayBleHRyYWhlYWRjb250ZW50ICV9Cit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKyAgICB7JSBpZiB0YXJnZXQgJX0KKyAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAidGFyZ2V0IiBidWlsZC5pZCB0YXJnZXQuaWQgJX0iPnt7dGFyZ2V0LnRhcmdldH19PC9hPjwvbGk+CisgICAgICAgIDxsaT57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX0geyUgaWYgcGFja2FnZS5hbGlhcyAlfSBhcyB7e3BhY2thZ2UuYWxpYXN9fXslIGVuZGlmICV9PC9saT4KKyAgICB7JSBlbHNlICV9CisgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgInBhY2thZ2VzIiBidWlsZC5pZCAlfSI+IFBhY2thZ2VzIDwvYT48L2xpPgorICAgICAgICA8bGk+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9saT4KKyAgICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgbG9jYWxicmVhZGNydW1iICV9CisKK3slIGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQorICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTEiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgICAgICB7JSBibG9jayB0aXRsZSAlfQorICAgICAgICAgICAgPGgxPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvaDE+CisgICAgICAgICAgICB7JSBlbmRibG9jayB0aXRsZSAlfQorICAgICAgICA8L2Rpdj4gPCEtLSBwYWdlLWhlYWRlciAtLT4KKyAgICA8L2Rpdj4gPCEtLSByb3cgc3BhbjExIHBhZ2UtaGVhZGVyIC0tPgorCisgICAgeyUgYmxvY2sgdHdvY29sdW1ucyAlfQorICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuNyB0YWJiYWJsZSI+CisgICAgICAgIHslIGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICAgICAgeyUgZW5kYmxvY2sgdGFiY29udGVudCAlfQorICAgIDwvZGl2PiA8IS0tIHJvdyBzcGFuNyAtLT4KKworICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuNCB3ZWxsIj4KKyAgICAgICAgPGgyPlBhY2thZ2UgaW5mb3JtYXRpb248L2gyPgorCisgICAgICAgIDwhLS0gaW5mbyBwcmVzZW50ZWQgYXMgZGVmaW5pdGlvbiBsaXN0IC0tPgorICAgICAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgU2l6ZQorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgc2l6ZSBvZiB0aGUgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICB7JSBjb21tZW50ICV9CisgICAgICAgICAgICAgICAgICAgIGlmIHJlY2lwZSBpcyBhYnNlbnQsIGZpbGVzaXplIGlzIG5vdCAwCisgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQorICAgICAgICAgICAgICAgIHslIGlmIHBhY2thZ2UucmVjaXBlX2lkID4gMCAlfQorICAgICAgICAgICAgICAgICAgICB7e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19CisgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhcmdldC5maWxlX3NpemUgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICh7e3BhY2thZ2Uuc2l6ZXxtdWx0aXBseToxMDB8ZGl2aWRlOnRhcmdldC5maWxlX3NpemV9fSUgb2YgaW5jbHVkZWQgcGFja2FnZSBzaXplKQorICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvZGQ+CisKKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMaWNlbnNlCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoaXMgcGFja2FnZSBpcyBkaXN0cmlidXRlZCI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3BhY2thZ2UubGljZW5zZX19PC9kZD4KKworICAgICAgICAgICAgeyUgY29tbWVudCAlfQorICAgICAgICAgICAgIyBSZW1vdmVkIHBlciByZXZpZXcgb24gMS8xOC8yMDE0IHVudGlsIGxpY2Vuc2UgZGF0YSBwb3B1bGF0aW9uCisgICAgICAgICAgICAjIHByb2JsZW1zZSBhcmUgcmVzb2x2ZWQuCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgTGljZW5zZSBmaWxlcworICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJQYXRoIHRvIHRoZSBsaWNlbnNlIGZpbGVzIHRoYXQgYXBwbHkgdG8gdGhlIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+PC9kZD4KKyAgICAgICAgICAgIHslIGVuZGNvbW1lbnQgJX0KKworICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIFJlY2lwZQorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZV9pZCA+IDAgJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLmlkIHBhY2thZ2UucmVjaXBlX2lkICV9Ij4ge3twYWNrYWdlLnJlY2lwZS5uYW1lfX0gPC9hPgorICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAge3twYWNrYWdlLnJlY2lwZS5uYW1lfX0KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kZD4KKworICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIFJlY2lwZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPnt7cGFja2FnZS5yZWNpcGUudmVyc2lvbn19PC9kZD4KKworICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIExheWVyCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGlzIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAge3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fQorICAgICAgICAgICAgICAgIHslIGlmIHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZXxmb3JtYXRfbm9uZV9hbmRfemVybyAhPSAiIiAlfQorICAgICAgICAgICAgICAgICAgICB7JSBjb21tZW50ICV9CisgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlZCBwZXIgdGVhbSBtZWV0aW5nIG9mIDEvMjkvMjAxNCB1bnRpbAorICAgICAgICAgICAgICAgICAgICAjIGRlY2lzaW9uIG9uIGluZGV4IHNlYXJjaCBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnIiAgdGFyZ2V0PSJfYmxhbmsiPgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNoICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgTGF5ZXIgYnJhbmNoCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGlzIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19PC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgTGF5ZXIgY29tbWl0CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgY29tbWl0IG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGlzIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisKKyAgICAgICAgICAgIDxkZCBjbGFzcz0iaXNjb21taXQiPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR9fTwvZGQ+CisKKyAgICAgICAgPC9kbD4KKyAgICA8L2Rpdj4gPCEtLSByb3c0IHdlbGwgLS0+CisgICAgeyUgZW5kYmxvY2sgdHdvY29sdW1ucyAlfQoreyUgZW5kYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MmNhNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMuaHRtbApAQCAtMCwwICsxLDExMCBAQAoreyUgZXh0ZW5kcyAicGFja2FnZV9kZXRhaWxfYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayB0aXRsZSAlfQorICAgIDxoMT4KKyAgICAgICAge3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319CisgICAgICAgIDxzY3JpcHQ+IGZtdEFsaWFzSGVscCgie3twYWNrYWdlLm5hbWV9fSIsICJ7e3BhY2thZ2UuYWxpYXN9fSIsIGZhbHNlKSA8L3NjcmlwdD4KKyAgICAgICAgPHNtYWxsPih7e3RhcmdldC50YXJnZXR9fSk8L3NtYWxsPgorICAgIDwvaDE+Cit7JSBlbmRibG9jayB0aXRsZSAlfQorCit7JSBibG9jayB0YWJjb250ZW50ICV9CisgICAgeyUgd2l0aCBwYWNrYWdlRmlsZUNvdW50PXBhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50ICV9CisgICAgeyUgaW5jbHVkZSAicGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwiIHdpdGggYWN0aXZlX3RhYj0iZGVwZW5kZW5jaWVzIiAlfQorICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJkZXBlbmRlbmNpZXMiPgorICAgICAgIHslIGlmbm90ZXF1YWwgcnVudGltZV9kZXBzfGxlbmd0aCAwICV9CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5WZXJzaW9uPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0nc2l6ZWNvbCBzcGFuMic+U2l6ZTwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCXslIGZvciBydW50aW1lX2RlcCBpbiBydW50aW1lX2RlcHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7e3J1bnRpbWVfZGVwLnNpemV8Zm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzfX0gPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHJ1bnRpbWVfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHJ1bnRpbWVfZGVwLmRlcGVuZHNfb25faWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tydW50aW1lX2RlcC5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PmZtdEFsaWFzSGVscCgie3tydW50aW1lX2RlcC5uYW1lfX0iLCAie3tydW50aW1lX2RlcC5hbGlhc319IiwgdHJ1ZSk8L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cnVudGltZV9kZXAubmFtZXxmb3JtYXRfdnBhY2thZ2VfbmFtZWhlbHB9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tydW50aW1lX2RlcC52ZXJzaW9ufX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nc2l6ZWNvbCc+e3tydW50aW1lX2RlcC5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKwkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBoYXMgbm8gcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWZub3RlcXVhbCAlfQorCisgICAgICAgIHslIGlmbm90ZXF1YWwgb3RoZXJfZGVwc3xsZW5ndGggMCAlfQorICAgICAgICAgICAgPGgzPk90aGVyIHJ1bnRpbWUgcmVsYXRpb25zaGlwczwvaDM+CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5WZXJzaW9uPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0nc2l6ZWNvbCBzcGFuMic+U2l6ZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZpdmUgcmVsYXRpb25zaGlwIHR5cGVzIGV4aXN0OiByZWNvbW1lbmRzLCBzdWdnZXN0cywgcHJvdmlkZXMsIHJlcGxhY2VzIGFuZCBjb25mbGljdHMiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGlvbnNoaXAgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJeyUgZm9yIG90aGVyX2RlcCBpbiBvdGhlcl9kZXBzICV9CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBvdGhlcl9kZXAuaW5zdGFsbGVkICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHt7b3RoZXJfZGVwLnNpemV8Zm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzfX0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIG90aGVyX2RlcC5zaXplICE9IC0xICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBvdGhlcl9kZXAuZGVwZW5kc19vbl9pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRBbGlhc0hlbHAoInt7b3RoZXJfZGVwLm5hbWV9fSIsInt7b3RoZXJfZGVwLmFsaWFzfX0iLCB0cnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAubmFtZXxmb3JtYXRfdnBhY2thZ2VfbmFtZWhlbHB9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b3RoZXJfZGVwLnZlcnNpb259fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nc2l6ZWNvbCc+e3tvdGhlcl9kZXAuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAuZGVwX3R5cGVfZGlzcGxheX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e290aGVyX2RlcC5kZXBfdHlwZV9oZWxwfX0iID48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Im11dGVkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b3RoZXJfZGVwLm5hbWV9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e290aGVyX2RlcC52ZXJzaW9ufX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdGhlcl9kZXAuZGVwX3R5cGVfZGlzcGxheX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e290aGVyX2RlcC5kZXBfdHlwZV9oZWxwfX0iID48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisgICAgICAgIDwvZGl2PiA8IS0tIGVuZCB0YWItcGFuZSAtLT4KKyAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiIGNvbnRlbnQgLS0+CisgICAgeyUgZW5kd2l0aCAlfQoreyUgZW5kYmxvY2sgdGFiY29udGVudCAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmFhMjZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLmh0bWwKQEAgLTAsMCArMSw0NCBAQAoreyUgZXh0ZW5kcyAicGFja2FnZV9kZXRhaWxfYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayB0aXRsZSAlfQorICAgICAgICA8aDE+CisgICAgICAgICAgICB7e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX0KKyAgICAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICAgICAgZm10QWxpYXNIZWxwKCJ7e3BhY2thZ2UubmFtZX19IiwgInt7cGFja2FnZS5hbGlhc319IiwgZmFsc2UpCisgICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgIDxzbWFsbD4oe3t0YXJnZXQudGFyZ2V0fX0pPC9zbWFsbD4KKyAgICAgICAgPC9oMT4KK3slIGVuZGJsb2NrIHRpdGxlICV9CisKK3slIGJsb2NrIHRhYmNvbnRlbnQgJX0KK3slIHdpdGggcGFja2FnZUZpbGVDb3VudD1wYWNrYWdlLmJ1aWxkZmlsZWxpc3RfcGFja2FnZS5jb3VudCAlfQorICAgIHslIGluY2x1ZGUgInBhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sIiB3aXRoIGFjdGl2ZV90YWI9ImRldGFpbCIgJX0KKyAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImZpbGVzIj4KKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2VGaWxlQ291bnQgPiAwICV9CisgICAgICAgICAgICB7JSBpbmNsdWRlICJ0YWJsZXNvcnQuaHRtbCIgJX0KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCXslIGZvciBmaWxlIGluIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InBhdGgiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2RpcmluZm9fZmlsZXBhdGgnIGJ1aWxkLmlkIHRhcmdldC5pZCBmaWxlLnBhdGggJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmaWxlLnBhdGh9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWxlc2l6ZSBzaXplY29sIiA+e3tmaWxlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKworICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gZG9lcyBub3QgZ2VuZXJhdGUgYW55IGZpbGVzLgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiLXBhbmUgLS0+CisgICAgPC9kaXY+IDwhLS0gZW5kIHRhYiBjb250ZW50IC0tPgorCit7JSBlbmR3aXRoICV9Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M4YjQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMuaHRtbApAQCAtMCwwICsxLDUwIEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRpdGxlICV9CisgICAgICAgIDxoMT4KKyAgICAgICAgICAgIHt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fQorICAgICAgICAgICAgPHNjcmlwdD4gZm10QWxpYXNIZWxwKCJ7e3BhY2thZ2UubmFtZX19IiwgInt7cGFja2FnZS5hbGlhc319IiwgZmFsc2UpIDwvc2NyaXB0PgorICAgICAgICAgICAgPHNtYWxsPih7e3RhcmdldC50YXJnZXR9fSk8L3NtYWxsPgorICAgICAgICA8L2gxPgoreyUgZW5kYmxvY2sgdGl0bGUgJX0KKworeyUgYmxvY2sgdGFiY29udGVudCAlfQorICAgIHslIHdpdGggcGFja2FnZUZpbGVDb3VudD1wYWNrYWdlLmJ1aWxkZmlsZWxpc3RfcGFja2FnZS5jb3VudCAlfQorICAgIHslIGluY2x1ZGUgInBhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sIiB3aXRoIGFjdGl2ZV90YWI9InJldmVyc2UiICV9CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJicm91Z2h0LWluLWJ5Ij4KKworICAgICAgICB7JSBpZmVxdWFsIHJldmVyc2VfY291bnQgMCAlfQorICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBoYXMgbm8gcmV2ZXJzZSBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICB7JSBpbmNsdWRlICJ0YWJsZXNvcnQuaHRtbCIgJX0KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCXslIGZvciByZXZlcnNlX2RlcCBpbiBvYmplY3RzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIgeyUgaWYgcmV2ZXJzZV9kZXAuc2l6ZSAlfXt7cmV2ZXJzZV9kZXAuc2l6ZXxmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3N9fXslZW5kaWYlfSA+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiByZXZlcnNlX2RlcC5zaXplICE9IC0xICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCB0YXJnZXQuaWQgcmV2ZXJzZV9kZXAucGFja2FnZV9pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JldmVyc2VfZGVwLnBhY2thZ2UubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdD5mbXRBbGlhc0hlbHAoInt7cmV2ZXJzZV9kZXAucGFja2FnZS5uYW1lfX0iLCAie3tyZXZlcnNlX2RlcC5hbGlhc319IiwgdHJ1ZSk8L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmV2ZXJzZV9kZXAubmFtZXxmb3JtYXRfdnBhY2thZ2VfbmFtZWhlbHB9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3JldmVyc2VfZGVwLnBhY2thZ2UudmVyc2lvbn19Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J3NpemVjb2wnPnt7cmV2ZXJzZV9kZXAucGFja2FnZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKwkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVuZGlmZXF1YWwgJX0KKyAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYi1wYW5lIC0tPgorICAgIDwvZGl2PiA8IS0tIGVuZCB0YWIgY29udGVudCAtLT4KKyAgICB7JSBlbmR3aXRoICV9Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4YWE4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbApAQCAtMCwwICsxLDMzIEBACisKKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgIHslIGlmIGFjdGl2ZV90YWIgPT0gImRldGFpbCIgJX0KKyAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgIHslIGVsc2UgJX0KKyAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBmaWxlcyB0aGlzIHBhY2thZ2UgYWRkcyB0byB0aGUgaW1hZ2Ugcm9vdCBmaWxlIHN5c3RlbSI+PC9pPgorICAgICAgICAgICAgICAgIEZpbGVzIGluIHJvb3QgZmlsZSBzeXN0ZW0gKHt7cGFja2FnZUZpbGVDb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIHslIGlmIGFjdGl2ZV90YWIgPT0gImRlcGVuZGVuY2llcyIgJX0KKyAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgIHslIGVsc2UgJX0KKyAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzJyBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlBhY2thZ2UgcnVudGltZSBkZXBlbmRlbmNpZXMiPjwvaT4KKyAgICAgICAgICAgICAgICBSdW50aW1lIGRlcGVuZGVuY2llcyAoe3tkZXBlbmRlbmN5X2NvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgeyUgaWYgYWN0aXZlX3RhYiA9PSAicmV2ZXJzZSIgJX0KKyAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPgorICAgIHslIGVsc2UgJX0KKyAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHBhY2thZ2UgcnVudGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcGFja2FnZXMgaW4gdGhpcyBpbWFnZSB0aGF0IGRlcGVuZCBvbiB0aGlzIHBhY2thZ2UpLiBSZXZlcnNlIGRlcGVuZGVuY2llcyByZWZsZWN0IG9ubHkgdGhlICdkZXBlbmRzJyBkZXBlbmRlbmN5IHR5cGUiPjwvaT4KKyAgICAgICAgICAgICAgICBSZXZlcnNlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzICh7e3JldmVyc2VfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICA8L3VsPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3QuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzNTRmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Lmh0bWwKQEAgLTAsMCArMSwxMzAgQEAKK3slIGV4dGVuZHMgImJhc2Vwcm9qZWN0cGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHN0YXRpYyAlfQorCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKworPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJEZXBzTW9kYWwuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3Byb2plY3RwYWdlLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKXsKKyAgICB2YXIgY3R4ID0geworICAgICAgdGVzdFJlbGVhc2VDaGFuZ2VVcmw6ICJ7JSB1cmwgJ3hocl90ZXN0cmVsZWFzZWNoYW5nZScgcHJvamVjdC5pZCAlfSIsCisgICAgfTsKKworICAgIHRyeSB7CisgICAgICBwcm9qZWN0UGFnZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiU29ycnksIEFuIGVycm9yIGhhcyBvY2N1cnJlZCBsb2FkaW5nIHRoaXMgcGFnZSIpOworICAgICAgY29uc29sZS53YXJuKGUpOworICAgIH0KKyAgfSk7Cis8L3NjcmlwdD4KKworPGRpdiBpZD0iY2hhbmdlLXJlbGVhc2UtbW9kYWwiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUgaW4iIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9ImNoYW5nZS1yZWxlYXNlLW1vZGFsIiBhcmlhLWhpZGRlbj0iZmFsc2UiPgorICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgPGgzPkNoYW5naW5nIFlvY3RvIFByb2plY3QgcmVsZWFzZSB0byA8c3BhbiBjbGFzcz0icHJvcG9zZWQtcmVsZWFzZS1jaGFuZ2UtbmFtZSI+PC9zcGFuPjwvaDM+CisgIDwvZGl2PgorICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICA8cD5UaGUgZm9sbG93aW5nIGFkZGVkIGxheWVycyBkbyBub3QgZXhpc3QgZm9yIDxzcGFuIGNsYXNzPSJwcm9wb3NlZC1yZWxlYXNlLWNoYW5nZS1uYW1lIj48L3NwYW4+OiA8L3A+CisgICAgPHVsIGlkPSJsYXllcnMtdG8tcmVtb3ZlLWxpc3QiPgorICAgIDwvdWw+CisgICAgPHA+SWYgeW91IGNoYW5nZSB0aGUgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRvIDxzcGFuIGNsYXNzPSJwcm9wb3NlZC1yZWxlYXNlLWNoYW5nZS1uYW1lIj48L3NwYW4+LCB0aGUgYWJvdmUgbGF5ZXJzIHdpbGwgYmUgZGVsZXRlZCBmcm9tIHlvdXIgYWRkZWQgbGF5ZXJzLjwvcD4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CisgICAgPGJ1dHRvbiBpZD0iY2hhbmdlLXJlbGVhc2UtYW5kLXJtLWxheWVycyIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij5DaGFuZ2UgcmVsZWFzZSBhbmQgZGVsZXRlIGxheWVyczwvYnV0dG9uPgorICAgIDxidXR0b24gY2xhc3M9ImJ0biIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPkNhbmNlbDwvYnV0dG9uPgorICA8L2Rpdj4KKzwvZGl2PgorCisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9InByb2plY3QtcGFnZSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgIDxkaXYgY2xhc3M9InNwYW42Ij4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHdlbGwtdHJhbnNwYXJlbnQiIGlkPSJtYWNoaW5lLXNlY3Rpb24iPgorICAgICAgPGgzPk1hY2hpbmU8L2gzPgorCisgICAgICA8cCBjbGFzcz0ibGVhZCI+PHNwYW4gaWQ9InByb2plY3QtbWFjaGluZS1uYW1lIj48L3NwYW4+IDxpIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IiIgaWQ9ImNoYW5nZS1tYWNoaW5lLXRvZ2dsZSIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+PC9wPgorCisgICAgICA8Zm9ybSBpZD0ic2VsZWN0LW1hY2hpbmUtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICA8c3Ryb25nPk1hY2hpbmUgY2hhbmdlcyBoYXZlIGEgYmlnIGltcGFjdCBvbiBidWlsZCBvdXRjb21lLjwvc3Ryb25nPiBZb3UgY2Fubm90IHJlYWxseSBjb21wYXJlIHRoZSBidWlsZHMgZm9yIHRoZSBuZXcgbWFjaGluZSB3aXRoIHRoZSBwcmV2aW91cyBvbmVzLgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgIDxpbnB1dCBpZD0ibWFjaGluZS1jaGFuZ2UtaW5wdXQiIGF1dG9jb21wbGV0ZT0ib2ZmIiB2YWx1ZT0iIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgZGF0YS1taW5sZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGJ1dHRvbiBpZD0ibWFjaGluZS1jaGFuZ2UtYnRuIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4gPGEgaHJlZj0iIyIgaWQ9ImNhbmNlbC1tYWNoaW5lLWNoYW5nZSIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9hPgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8cD48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RtYWNoaW5lcycgcHJvamVjdC5pZCAlfSIgY2xhc3M9ImxpbmsiPlZpZXcgY29tcGF0aWJsZSBtYWNoaW5lczwvYT48L3A+CisgICAgICA8L2Zvcm0+CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHdlbGwtdHJhbnNwYXJlbnQiPgorICAgICAgPGgzPk1vc3QgYnVpbHQgcmVjaXBlczwvaDM+CisKKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGlkPSJuby1tb3N0LWJ1aWx0Ij4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlbid0IGJ1aWx0IGFueSByZWNpcGVzIHlldDwvc3Bhbj4KKyAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3R0YXJnZXRzJyBwcm9qZWN0LmlkICV9Ij5DaG9vc2UgYSByZWNpcGUgdG8gYnVpbGQ8L2E+PC9wPgorICAgICAgPC9kaXY+CisKKyAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0iZnJlcS1idWlsZC1saXN0Ij4KKyAgICAgIDwvdWw+CisgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGlkPSJmcmVxLWJ1aWxkLWJ0biIgZGlzYWJsZWQ9ImRpc2FibGVkIj5CdWlsZCBzZWxlY3RlZCByZWNpcGVzPC9idXR0b24+CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHdlbGwtdHJhbnNwYXJlbnQiPgorICAgICAgPGgzPlByb2plY3QgcmVsZWFzZTwvaDM+CisKKyAgICAgIDxwIGNsYXNzPSJsZWFkIj48c3BhbiBpZD0icHJvamVjdC1yZWxlYXNlLXRpdGxlIj48L3NwYW4+IDxpIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IiIgaWQ9InJlbGVhc2UtY2hhbmdlLXRvZ2dsZSIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+PC9wPgorCisgICAgICA8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUiIGlkPSJjaGFuZ2UtcmVsZWFzZS1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgIDxzZWxlY3Q+PC9zZWxlY3Q+CisgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9Im1hcmdpbi1sZWZ0OjVweDsiIGlkPSJjaGFuZ2UtcmVsZWFzZS1idG4iPkNoYW5nZTwvYnV0dG9uPiA8YSBocmVmPSIjIiBpZD0iY2FuY2VsLXJlbGVhc2UtY2hhbmdlIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2E+CisgICAgICA8L2Zvcm0+CisgICAgPC9kaXY+CisgIDwvZGl2PgorCisgIDxkaXYgY2xhc3M9InNwYW42Ij4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHdlbGwtdHJhbnNwYXJlbnQiIGlkPSJsYXllci1jb250YWluZXIiPgorICAgICAgPGgzPkxheWVycyA8c3BhbiBjbGFzcz0ibXV0ZWQgY291bnRlciI+KDxzcGFuIGlkPSJwcm9qZWN0LWxheWVycy1jb3VudCI+PC9zcGFuPik8L3NwYW4+CisgICAgICAgIDxpIGRhdGEtb3JpZ2luYWwtdGl0bGU9Ik9wZW5FbWJlZGRlZCBvcmdhbmlzZXMgbWV0YWRhdGEgaW50byBtb2R1bGVzIGNhbGxlZCAnbGF5ZXJzJy4gTGF5ZXJzIGFsbG93IHlvdSB0byBpc29sYXRlIGRpZmZlcmVudCB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyBmcm9tIGVhY2ggb3RoZXIuIDxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvZGV2LW1hbnVhbC9kZXYtbWFudWFsLmh0bWwjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJyB0YXJnZXQ9J19ibGFuayc+TW9yZSBvbiBsYXllcnM8L2E+IiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IiI+PC9pPgorICAgICAgPC9oMz4KKworICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgbGVhZCIgaWQ9Im5vLWxheWVycy1pbi1wcm9qZWN0IiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgWW91IG5lZWQgdG8gYWRkIHNvbWUgbGF5ZXJzLiBGb3IgdGhhdCB5b3UgY2FuOgorICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5pZCAlfSI+VmlldyBhbGwgbGF5ZXJzIGNvbXBhdGlibGUgd2l0aCB0aGlzIHByb2plY3Q8L2E+PC9saT4KKyAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdpbXBvcnRsYXllcicgcHJvamVjdC5pZCAlfSI+SW1wb3J0IGEgbGF5ZXI8L2E+PC9saT4KKyAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvY3VycmVudC9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMiIHRhcmdldD0iX2JsYW5rIj5SZWFkIGFib3V0IGxheWVycyBpbiB0aGUgZG9jdW1lbnRhdGlvbjwvYT48L2xpPgorICAgICAgICA8L3VsPgorICAgICAgICA8cD5PciB0eXBlIGEgbGF5ZXIgbmFtZSBiZWxvdy48L3A+CisgICAgICA8L2Rpdj4KKworICAgICAgPGZvcm0gc3R5bGU9Im1hcmdpbi10b3A6MjBweCI+CisgICAgICAgIDwhLS1kaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAgZXJyb3IiLS0+CisKKyAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICA8aW5wdXQgaWQ9ImxheWVyLWFkZC1pbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUeXBlIGEgbGF5ZXIgbmFtZSIgZGF0YS1taW5sZW5ndGg9IjEiIGRhdGEtYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIiBkYXRhLXNvdXJjZT0iIiB0eXBlPSJ0ZXh0Ij4KKyAgICAgICAgICAgIDxidXR0b24gaWQ9ImFkZC1sYXllci1idG4iIGNsYXNzPSJidG4iIGRpc2FibGVkPkFkZDwvYnV0dG9uPgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJpbXBvcnQtYWxlcnQiIGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgVG9hc3RlciBkb2VzIG5vdCBrbm93IGFib3V0IHRoaXMgbGF5ZXIuIFBsZWFzZSA8YSBocmVmPSIjIj5pbXBvcnQgaXQ8L2E+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxwPgorICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5pZCAlfSIgaWQ9InZpZXctY29tcGF0aWJsZS1sYXllcnMiPlZpZXcgY29tcGF0aWJsZSBsYXllcnM8L2E+CisgICAgICAgICAgPGkgZGF0YS1vcmlnaW5hbC10aXRsZT0iVmlldyBhbGwgdGhlIGxheWVycyB5b3UgY2FuIGJ1aWxkIHdpdGggdGhlIHJlbGVhc2Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCwgd2hpY2ggaXMgWW9jdG8gUHJvamVjdCBtYXN0ZXIiIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSIiPjwvaT4KKyAgICAgICAgICB8IDxhIGhyZWY9InslIHVybCAnaW1wb3J0bGF5ZXInIHByb2plY3QuaWQgJX0iPkltcG9ydCBsYXllcjwvYT4KKyAgICAgICAgPC9wPgorICAgICAgPC9mb3JtPgorCisgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIGNvbmZpZ3VyYXRpb24tbGlzdCIgaWQ9ImxheWVycy1pbi1wcm9qZWN0LWxpc3QiPgorICAgICAgPC91bD4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RidWlsZHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2NmY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RidWlsZHMuaHRtbApAQCAtMCwwICsxLDEwMyBAQAoreyUgZXh0ZW5kcyAiYmFzZXByb2plY3RidWlsZHNwYWdlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKKworeyUgYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9qcXVlcnktdWkuc3RydWN0dXJlLm1pbi5jc3MiIHR5cGU9J3RleHQvY3NzJz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnRoZW1lLm1pbi5jc3MiIHR5cGU9J3RleHQvY3NzJz4KKzxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2pxdWVyeS11aS5taW4uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcyI+PC9zY3JpcHQ+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKworPHNjcmlwdD4KKyAgICAvLyBpbml0aWFsaXplIHRoZSBkYXRlIHJhbmdlIGNvbnRyb2xzCisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICBkYXRlX2luaXQoJ3N0YXJ0ZWRfb24nLCd7e2xhc3RfZGF0ZV9mcm9tfX0nLCd7e2xhc3RfZGF0ZV90b319Jywne3tkYXRlTWluX3N0YXJ0ZWRfb259fScsJ3t7ZGF0ZU1heF9zdGFydGVkX29ufX0nLCd7e2RhdGVyYW5nZV9zZWxlY3RlZH19Jyk7CisgICAgICAgIGRhdGVfaW5pdCgnY29tcGxldGVkX29uJywne3tsYXN0X2RhdGVfZnJvbX19Jywne3tsYXN0X2RhdGVfdG99fScsJ3t7ZGF0ZU1pbl9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZU1heF9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICB9KTsKKzwvc2NyaXB0PgorCisgICAgICA8aDI+CisgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gYnVpbGR7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICAgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgICBObyBidWlsZHMgZm91bmQKKyAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgIFByb2plY3QgYnVpbGRzCisgICAgICAgIHslZW5kaWYlfQorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IlRoaXMgcGFnZSBsaXN0cyBhbGwgdGhlIGJ1aWxkcyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdCI+PC9pPgorICAgICAgPC9oMj4KKworCisgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgb3IgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7cmVxdWVzdC5HRVQuc2VhcmNofX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIGJ1aWxkczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgeyUgZWxzZSAlfQorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgPHAgY2xhc3M9ImxlYWQiPgorICAgICAgICBUaGlzIHByb2plY3QgaGFzIG5vIGJ1aWxkcy4KKyAgICAgIDwvcD4KKyAgICA8L2Rpdj4KKyAgeyUgZW5kaWYgJX0KKworIHslIGVsc2UgJX0KKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisgICAgICAgIDwhLS0gVGFibGUgZGF0YSByb3dzOyB0aGUgb3JkZXIgbmVlZHMgdG8gbWF0Y2ggdGhlIG9yZGVyIG9mICJ0YWJsZWNvbHMiIGRlZmluaXRpb25zOyBhbmQgdGhlIDx0ZCBjbGFzcyB2YWx1ZSBuZWVkcyB0byBtYXRjaCB0aGUgdGFibGVjb2xzIGNsY2xhc3MgdmFsdWUgZm9yIHNob3cvaGlkZSBidXR0b25zIHRvIHdvcmsgLS0+CisgICAgICAgIHslIGZvciBidWlsZCBpbiBvYmplY3RzICV9IHsjIGlmIHdlIGhhdmUgYSBidWlsZCwganVzdCBkaXNwbGF5IGl0ICN9CisgICAgICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dGNvbWUiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX08aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT57JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfTxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gZXJyb3IiPjwvaT57JWVsc2UlfXslZW5kaWYlfTwvYT4KKyAgICAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC5wcm9qZWN0ICV9CisgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgImNvb2tlcmxvZyIgYnVpbGQuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iRG93bmxvYWQgYnVpbGQgbG9nIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICA8dGQgY2xhc3M9InRhcmdldCI+eyUgZm9yIHQgaW4gYnVpbGQudGFyZ2V0X3NldC5hbGwgJX0gPGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPiB7e3QudGFyZ2V0fX0gPC9hPiA8YnIgLz57JSBlbmRmb3IgJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJtYWNoaW5lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5tYWNoaW5lfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RhcnRlZF9vbiI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQuc3RhcnRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29tcGxldGVkX29uIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImZhaWxlZF90YXNrcyBlcnJvciI+CisgICAgICAgICAgICAgICAgeyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvdXRjb21lPTQgb3JkZXJfX2d0PTAgYXMgZXhlY3Rhc2slfQorICAgICAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLmlkIGV4ZWN0YXNrLjAuaWQgJX0iPnt7ZXhlY3Rhc2suMC5yZWNpcGUubmFtZX19Lnt7ZXhlY3Rhc2suMC50YXNrX25hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgZXhlY3Rhc2suMC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVsaWYgZXhlY3Rhc2suY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFza3MiIGJ1aWxkLmlkICV9P2ZpbHRlcj1vdXRjb21lJTNBNCI+e3tleGVjdGFzay5jb3VudH19IHRhc2t7e2V4ZWN0YXNrLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImVycm9ycy5jb3VudCI+CisgICAgICAgICAgICAgICAgeyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSNlcnJvcnMiPnt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Indhcm5pbmdzLmNvdW50Ij57JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX08YSBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0jd2FybmluZ3MiPnt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aW1lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkdGltZSIgYnVpbGQuaWQgJX0iPnt7YnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXN9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvdXRwdXQiPgorICAgICAgICAgICAgICB7JSBpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCAlfQorICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkJX0jaW1hZ2VzIj57e2ZzdHlwZXN8Z2V0X2RpY3RfdmFsdWU6YnVpbGQuaWR9fTwvYT4KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIHslIGVuZGZvciAlfQorCisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Y29uZi5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3Rjb25mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1YTE4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Y29uZi5odG1sCkBAIC0wLDAgKzEsODQ5IEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKworPGgyPkJpdGJha2UgdmFyaWFibGVzPC9oMj4KKworICAgIDxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoxOXB4OyI+CisKKyAgICAgICAgPGRsIGNsYXNzPSJkbC12ZXJ0aWNhbCI+CisgICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPkRJU1RSTzwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZC4gPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURJU1RSTycgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImRpc3RybyI+e3tkaXN0cm99fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtZGlzdHJvLWljb24iPjwvaT4KKyAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLWRpc3Ryby1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgaWQ9ImVkaXQtZGlzdHJvLW5hbWUtZGl2IiBjbGFzcz0iY29udHJvbC1ncm91cCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJuZXctZGlzdHJvIiB2YWx1ZT0ie3tkaXN0cm99fSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWRpc3RybyIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1kaXN0cm8iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBlcnJvciIgaWQ9ImRpc3Ryby1lcnJvci1tZXNzYWdlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBmc3R5cGVzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5JTUFHRV9GU1RZUEVTPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGb3JtYXRzIG9mIHJvb3QgZmlsZSBzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkIDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9GU1RZUEVTJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0iaW1hZ2VfZnN0eXBlcyI+e3tmc3R5cGVzfX08L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBpZD0iY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbiI+PC9pPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iZmlsdGVyLWltYWdlX2ZzdHlwZXMiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2ggaW1hZ2UgdHlwZXMiIGNsYXNzPSJzcGFuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImFsbC1pbWFnZV9mc3R5cGVzIiBjbGFzcz0ic2Nyb2xsaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1pbWFnZV9mc3R5cGVzIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+SU1BR0VfSU5TVEFMTF9hcHBlbmQ8L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSWYgeW91ciBidWlsZCBjcmVhdGVzIG1vcmUgdGhhbiBvbmUgaW1hZ2UsIHRoZSBwYWNrYWdlcyB3aWxsIGJlIGluc3RhbGxlZCBpbiA8c3Ryb25nPmFsbCBvZiB0aGVtPC9zdHJvbmc+IDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9JTlNUQUxMJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0iaW1hZ2VfaW5zdGFsbCJ7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfXslZWxzZSV9IGNsYXNzPSJtdXRlZCJ7JWVuZGlmJX0+eyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmQgJX17e2ltYWdlX2luc3RhbGxfYXBwZW5kfX17JWVsc2UlfU5vdCBzZXR7JWVuZGlmJX08L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBpZD0iY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbiI+PC9pPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXRyYXNoIiBpZD0iZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbiIgeyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmQgJX17JWVsc2UlfXN0eWxlPSJkaXNwbGF5Om5vbmU7InslZW5kaWYlfT48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1pbWFnZV9pbnN0YWxsLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIHNwYW40Ij5UbyBzZXQgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdG8gbW9yZSB0aGFuIG9uZSBwYWNrYWdlLCB0eXBlIHRoZSBwYWNrYWdlIG5hbWVzIHNlcGFyYXRlZCBieSBhIHNwYWNlLjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgaWQ9Im5ldy1pbWFnZV9pbnN0YWxsIiBwbGFjZWhvbGRlcj0iVHlwZSBvbmUgb3IgbW9yZSBwYWNrYWdlIG5hbWVzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2VfY2xhc3Nlc19kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+UEFDS0FHRV9DTEFTU0VTPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YSA8YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItUEFDS0FHRV9DTEFTU0VTJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0icGFja2FnZV9jbGFzc2VzIj57e3BhY2thZ2VfY2xhc3Nlc319PC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGlkPSJjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24iIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgUm9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlIGZvcm1hdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSByb290IGZpbGUgc3lzdGVtLiBPcHRpb25zIGFyZSA8Y29kZT5kZXY8L2NvZGU+LCA8Y29kZT5pcGs8L2NvZGU+IGFuZCA8Y29kZT5ycG08L2NvZGU+Ij48L2k+CisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InBhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX2RlYjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX2lwazwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX3JwbTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBwYWNrYWdlIGZvcm1hdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJFeHRyYSBwYWNrYWdlIGZvcm1hdHMgdG8gYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYgorICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfaXBrCisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOjEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBzZGtfbWFjaGluZV9kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+U0RLTUFDSElORTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcyA8YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItU0RLTUFDSElORScgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InNka21hY2hpbmUiPnt7c2RrX21hY2hpbmV9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBpZD0iY2hhbmdlLXNka21hY2hpbmUtaWNvbiIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1zZGttYWNoaW5lLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNka21hY2hpbmUiIHZhbHVlPSJpNjg2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIGk2ODYKKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNka21hY2hpbmUiIHZhbHVlPSJ4ODZfNjQiPgorICAgICAgICAgICAgICAgICAgICAgICAgeDg2XzY0CisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOjEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1zZGttYWNoaW5lIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2Utc2RrbWFjaGluZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgPC9kbD4KKworICAgICAgICA8IS0tIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0iY29uZmlndmFyLWxpc3QiPiAtLT4KKyAgICAgICAgPGRsIGlkPSJjb25maWd2YXItbGlzdCI+CisgICAgICAgICAgICA8IS0tIHRoZSBhZGRlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgaW5zZXJ0ZWQgaGVyZSAtLT4KKyAgICAgICAgPC9kbD4KKworICAgICAgICA8IS0tIHBhc3MgdGhlIGZzdHlwZXMgbGlzdCwgYmxhY2sgbGlzdCwgYW5kIGV4dGVybmFsbHkgbWFuYWdlZCB2YXJpYWJsZXMgaGVyZSAtLT4KKyAgICAgICAgeyUgZm9yIGZzdHlwZSBpbiB2YXJzX2ZzdHlwZXMgJX0KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJqcy1jaGVja2JveC1mc3R5cGVzLWxpc3QiIHZhbHVlPSJ7e2ZzdHlwZX19Ij4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIHslIGZvciBiIGluIHZhcnNfYmxhY2tsaXN0ICV9CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0ianMtY29uZmlnLWJsYWNrbGlzdC1uYW1lIiB2YWx1ZT0ie3tifX0iPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgeyUgZm9yIGIgaW4gdmFyc19tYW5hZ2VkICV9CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0ianMtY29uZmlnLW1hbmFnZWQtbmFtZSIgdmFsdWU9Int7Yn19Ij4KKyAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICA8Zm9ybSBpZD0idmFyaWFibGUtZm9ybSI+CisgICAgICAgICAgICA8ZmllbGRzZXQgc3R5bGU9InBhZGRpbmctbGVmdDowcHg7Ij4KKyAgICAgICAgICAgICAgICA8bGVnZW5kPkFkZCB2YXJpYWJsZTwvbGVnZW5kPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4zIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4OyI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuICBpZD0iYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgorICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC10aXRsZT0iVmFyaWFibGUgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fubm90IGhhdmUgc3BhY2VzLCBhbmQgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRhc2hlcyI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJUeXBlIHZhcmlhYmxlIG5hbWUiIGlkPSJ2YXJpYWJsZSI+CisgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgZXJyb3IiIGlkPSJuZXctdmFyaWFibGUtZXJyb3ItbWVzc2FnZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5WYWx1ZTwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0idmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJUeXBlIHZhcmlhYmxlIHZhbHVlIj48cD4KKyAgICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFkZC1jb25maWd2YXItYnV0dG9uIiBjbGFzcz0iYnRuIHNhdmUiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+QWRkIHZhcmlhYmxlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW41IGhlbHAtYmxvY2siPgorICAgICAgICAgICAgICAgICAgICA8aDU+U29tZSB2YXJpYWJsZXMgYXJlIHJlc2VydmVkIGZyb20gVG9hc3RlcjwvaDU+CisgICAgICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgY2Fubm90IHNldCBhbnkgdmFyaWFibGVzIHRoYXQgaW1wYWN0IDEpIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBidWlsZCBzZXJ2ZXJzLAorICAgICAgICAgICAgICAgICAgICBvciAyKSB3aGVyZSBhcnRpZmFjdHMgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkIGFyZSBzdG9yZWQuIFN1Y2ggdmFyaWFibGVzIGluY2x1ZGU6IDwvcD4KKyAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1CQl9ESVNLTU9OX0RJUlMiIHRhcmdldD0iX2JsYW5rIj5CQl9ESVNLTU9OX0RJUlM8L2E+PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItQkJfTlVNQkVSX1RIUkVBRFMiIHRhcmdldD0iX2JsYW5rIj5CQl9OVU1CRVJfVEhSRUFEUzwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPkNWU19QUk9YWV9IT1NUPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT5DVlNfUFJPWFlfUE9SVDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURMX0RJUiIgdGFyZ2V0PSJfYmxhbmsiPkRMX0RJUjwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1QQVJBTExFTF9NQUtFIiB0YXJnZXQ9Il9ibGFuayI+UEFSQUxMRUxfTUFLRTwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1TU1RBVEVfRElSIiB0YXJnZXQ9Il9ibGFuayI+U1NUQVRFX0RJUjwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1TU1RBVEVfTUlSUk9SUyIgdGFyZ2V0PSJfYmxhbmsiPlNTVEFURV9NSVJST1JTPC9hPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLVRNUERJUiIgdGFyZ2V0PSJfYmxhbmsiPlRNUERJUjwvYT48L2NvZGU+PC9wPgorICAgICAgICAgICAgICAgICAgICA8cD5QbHVzIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgc2hlbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzOjwvcD4KKyAgICAgICAgICAgICAgICAgICAgPHA+PGNvZGU+aHR0cF9wcm94eTwvY29kZT4gPGNvZGU+ZnRwX3Byb3h5PC9jb2RlPiA8Y29kZT5odHRwc19wcm94eTwvY29kZT4gPGNvZGU+YWxsX3Byb3h5PC9jb2RlPjwvcD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZmllbGRzZXQ+CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2Rpdj4KKworICAgIDwvZGl2PgorCisgICAgPHNjcmlwdD4KKworICAgICAgICAvLyBnbG9iYWwgdmFyaWFibGVzCisgICAgICAgIHZhciBkb19yZWxvYWQ9ZmFsc2U7CisKKyAgICAgICAgLy8gdmFsaWRhdGUgbmV3IHZhcmlhYmxlIG5hbWUKKyAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVfbmV3X3ZhcmlhYmxlKCkgeworICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gJCgiaW5wdXQjdmFyaWFibGUiKS52YWwoKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I3ZhbHVlIikudmFsKCk7CisKKyAgICAgICAgICAgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAgICAgICAgICAgJCgnI25ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0gIiI7CisKKyAgICAgICAgICAgIHZhciBleGlzdGluZ19jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLXZhci1uYW1lJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZXhpc3RpbmdfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ19jb25maWd2YXJzW2ldLmlubmVySFRNTC50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIlRoaXMgdmFyaWFibGUgaXMgYWxyZWFkeSBzZXQgaW4gdGhpcyBwYWdlLCBlZGl0IGl0cyB2YWx1ZSBpbnN0ZWFkIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBibGFja2xpc3RfY29uZmlndmFycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWNvbmZpZy1ibGFja2xpc3QtbmFtZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGJsYWNrbGlzdF9jb25maWd2YXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsYWNrbGlzdF9jb25maWd2YXJzW2ldLnZhbHVlLnRvVXBwZXJDYXNlKCkgPT0gdmFyaWFibGUudG9VcHBlckNhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiWW91IGNhbm5vdCBlZGl0IHRoaXMgdmFyaWFibGUgaW4gVG9hc3RlciBiZWNhdXNlIGl0IGlzIHNldCBieSB0aGUgYnVpbGQgc2VydmVycyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgbWFuYWdlZF9jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLW1hbmFnZWQtbmFtZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG1hbmFnZWRfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VkX2NvbmZpZ3ZhcnNbaV0udmFsdWUudG9VcHBlckNhc2UoKSA9PSB2YXJpYWJsZS50b1VwcGVyQ2FzZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJZb3UgY2Fubm90IHNldCB0aGlzIHZhcmlhYmxlIGhlcmUuIFBsZWFzZSBzZXQgaXQgaW4gdGhlIDxhIGhyZWY9XCJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX1cIj5wcm9qZWN0IG1haW4gcGFnZTwvYT4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGJhZF9jaGFycyAgPSAvW15hLXpBLVowLTlcLV9dLy50ZXN0KHZhcmlhYmxlKTsKKyAgICAgICAgICAgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFyaWFibGUuaW5kZXhPZigiICIpKTsKKyAgICAgICAgICAgIHZhciBvbmx5X3NwYWNlcyA9ICgwIDwgdmFyaWFibGUubGVuZ3RoKSAmJiAoMCA9PSB2YXJpYWJsZS50cmltKCkubGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKG9ubHlfc3BhY2VzKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICAgICAgICAgICAgfSBlbHNlIGlmIChiYWRfY2hhcnMgJiYgaGFzX3NwYWNlcykgeworICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJBIHZhbGlkIHZhcmlhYmxlIG5hbWUgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgZGFzaGVzLCBhbmQgY2Fubm90IGluY2x1ZGUgc3BhY2VzIjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYmFkX2NoYXJzKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCIiICE9IGVycm9yX21zZykgeworICAgICAgICAgICAgICAgICQoJyNuZXctdmFyaWFibGUtZXJyb3ItbWVzc2FnZScpLmh0bWwoZXJyb3JfbXNnKTsKKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKworICAgICAgICAgICAgICAgIC8vIGFkZCBvbmUgKGFuZCBvbmx5IG9uZSkgZXJyb3IgY2xhc3MgYXBwZW5kCisgICAgICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIpOworICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZSArICIgZXJyb3IiOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHZhcmlhYmxlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIpOworICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKKworICAgICAgICAgICAgLy8gbm93IHNldCB0aGUgIlNhdmUiIGVuYWJsZW1lbnQgaWYgJ3ZhbHVlJyBhbHNvIHBhc3NlcworICAgICAgICAgICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSBkaXN0cm8gbmFtZQorICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZV9kaXN0cm9fbmFtZSgpIHsKKyAgICAgICAgICAgICB2YXIgdmFsdWUgICAgPSAkKCJpbnB1dCNuZXctZGlzdHJvIikudmFsKCk7CisKKyAgICAgICAgICAgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0gIiI7CisKKyAgICAgICAgICAgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFsdWUuaW5kZXhPZigiICIpKTsKKworICAgICAgICAgICAgaWYgKGhhc19zcGFjZXMpIHsKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCBkaXN0cm8gbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHZhbHVlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIgIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCIiICE9IGVycm9yX21zZykgeworICAgICAgICAgICAgICAgICQoJyNkaXN0cm8tZXJyb3ItbWVzc2FnZScpLnRleHQoZXJyb3JfbXNnKTsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRpc3RybyIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKworICAgICAgICAgICAgICAgIC8vIGFkZCBvbmUgKGFuZCBvbmx5IG9uZSkgZXJyb3IgY2xhc3MgYXBwZW5kCisgICAgICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdC1kaXN0cm8tbmFtZS1kaXYiKTsKKyAgICAgICAgICAgICAgICBkLmNsYXNzTmFtZSA9IGQuY2xhc3NOYW1lLnJlcGxhY2UoIiBlcnJvciIsIiIpOworICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUgKyAiIGVycm9yIjsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdC1kaXN0cm8tbmFtZS1kaXYiKTsKKyAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRpc3RybyIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdG8gaW5zdXJlIGF0IGxlYXN0IG9uZSBGUyBUeXBlIGlzIGNoZWNrZWQKKyAgICAgICAgZnVuY3Rpb24gZW5hYmxlRnNUeXBlc1NhdmUoKSB7CisgICAgICAgICAgICB2YXIgYW55X2NoZWNrZWQgPSAwOworICAgICAgICAgICAgJCgiLmZzLWNoZWNrYm94LWZzdHlwZXM6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBhbnlfY2hlY2tlZCA9IDE7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICggMCA9PSBhbnlfY2hlY2tlZCApIHsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUHJlc2V0IG9yIHJlc2V0IHRoZSBQYWNrYWdlIENsYXNzIGNoZWNrYm94IGxhYmVscworICAgICAgICBmdW5jdGlvbiB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCkgeworICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMSwgI3BhY2thZ2VfY2xhc3NfMicpLmhpZGUoKTsKKyAgICAgICAgICAgIGlmICgkKCdzZWxlY3QnKS52YWwoKSA9PSAncGFja2FnZV9kZWInKSB7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMScpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfaXBrJyk7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMicpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfcnBtJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJCgnc2VsZWN0JykudmFsKCkgPT0gJ3BhY2thZ2VfaXBrJykgeworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEnKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYicpOworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzInKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiPiBwYWNrYWdlX3JwbScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCQoJ3NlbGVjdCcpLnZhbCgpID09ICdwYWNrYWdlX3JwbScpIHsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18xJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xX2lucHV0Ij4gcGFja2FnZV9kZWInKTsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18yJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9pcGsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEsICNwYWNrYWdlX2NsYXNzXzInKS5mYWRlSW4oMTUwMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZS1hc3NlcnQgaGFuZGxlcnMgd2hlbiB0aGUgcGFnZSBpcyBzZXJ2ZWQgYW5kL29yIHJlZnJlc2hlZCB2aWEgQWpheAorICAgICAgICBmdW5jdGlvbiBzZXRFdmVudEhhbmRsZXJzRm9yRHluYW1pY0VsZW1lbnRzKCkgeworCisgICAgICAgICAgICAvLyBjaGFuZ2UgdmFyaWFibGUgdmFsdWUKKyAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciBwayA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWU7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsID0gJCgic3BhbiNjb25maWdfdmFyX3ZhbHVlXyIrcGspLnRleHQoKTsKKyAgICAgICAgICAgICAgICAkKCcuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciwgLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciwgI2NvbmZpZ192YXJfdmFsdWVfJytwaykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgICQoImlucHV0I25ldy1jb25maWdfdmFyXyIrcGspLnZhbChjdXJyZW50X3ZhbCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnLmpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhcicpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGsgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyLCAuanMtaWNvbi10cmFzaC1jb25maWdfdmFyLCAjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgiLmpzLW5ldy1jb25maWdfdmFyIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAkKCIuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkKCIuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXIiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXInKS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgdmFyIHhkYXRhICAgID0gZXZ0LnRhcmdldC5hdHRyaWJ1dGVzWyJ4LWRhdGEiXS52YWx1ZS5zcGxpdCgiOiIpOworICAgICAgICAgICAgICAgIHZhciBwayAgICAgICA9IHhkYXRhWzBdOworICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9IHhkYXRhWzFdOworICAgICAgICAgICAgICAgIHZhciB2YWwgICAgICA9ICQoJyNuZXctY29uZmlnX3Zhcl8nK3BrKS52YWwoKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6IHZhcmlhYmxlKyc6Jyt2YWx9KTsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWNvbmZpZ192YXItZm9ybV8iK3BrKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciwgLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciwgI2NvbmZpZ192YXJfdmFsdWVfJytwaykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIGRlbGV0ZSB2YXJpYWJsZQorICAgICAgICAgICAgJCgiLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciIpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgeGRhdGEgICAgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlLnNwbGl0KCI6Iik7CisgICAgICAgICAgICAgICAgdmFyIHBrICAgICAgID0geGRhdGFbMF07CisKKyAgICAgICAgICAgICAgICAvLyBoaWRlIHRoZSBkYW5nbGluZyB0cmFzaCB0b29sdGlwCisgICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfdHJhc2hfJytwaykuaGlkZSgpOworCisgICAgICAgICAgICAgICAgLy8gZmFkZSBvdXQgdGhlIHZhcmlhYmxlK3ZhbHVlIGRpdiwgdGhlbiByZWZyZXNoIHRoZSB2YXJpYWJsZSBsaXN0CisgICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfZW50cnlfJytwaykucGFyZW50KCkucGFyZW50KCkuZmFkZU91dCgxMDAwLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckRlbCI6IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWV9KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSkgeworICAgICAgICAgICAgLy8gdXBkYXRlIHRhcmdldHMKKyAgICAgICAgICAgIHZhciBpOyB2YXIgb3JpZ2h0bWwgPSAiIjsKKworICAgICAgICAgICAgdmFyIGNvbmZpZ3ZhcnNfc29ydGVkID0gZGF0YS5jb25maWd2YXJzLnNvcnQoZnVuY3Rpb24oYSwgYil7cmV0dXJuIGFbMF0gPiBiWzBdfSk7CisKKyAgICAgICAgICAgIHZhciBtYW5hZ2VkX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZScpOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGhhcyBhIHNwZWNpYWwgY29udGV4dCAobm90IHVzZXIgZGVmaW5lZCkKKyAgICAgICAgICAgICAgICB2YXIgdmFyX2NvbnRleHQ9dW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsZW5ndGggPSBtYW5hZ2VkX2NvbmZpZ3ZhcnMubGVuZ3RoOyBqIDwgbGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtYW5hZ2VkX2NvbmZpZ3ZhcnNbal0uaW5uZXJIVE1MID09IGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKG1hbmFnZWRfY29uZmlndmFyc1tqXS52YWx1ZSAgICAgPT0gY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2NvbnRleHQ9J20nOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YXJfY29udGV4dCA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJzxkaXY+IDxkdD48c3BhbiBpZD0iY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUiPjwvc3Bhbj48aSBjbGFzcz0iaWNvbi10cmFzaCBqcy1pY29uLXRyYXNoLWNvbmZpZ192YXIiIGlkPSJjb25maWdfdmFyX3RyYXNoXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvaT4gPC9kdD4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8ZGQgY2xhc3M9ImxlYWQiPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICA8c3BhbiBpZD0iY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvc3Bhbj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIGpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIj48L2k+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDxmb3JtIGlkPSJjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBqcy1uZXctY29uZmlnX3ZhciIgaWQ9Im5ldy1jb25maWdfdmFyXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgdmFsdWU9IiI+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyIiB0eXBlPSJidXR0b24iIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnOicrY29uZmlndmFyc19zb3J0ZWRbaV1bMF0rJyIgZGlzYWJsZWQ+U2F2ZTwvYnV0dG9uPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhciIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPkNhbmNlbDwvYnV0dG9uPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPC9kaXY+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDwvZm9ybT4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8L2RkPiA8L2Rpdj4nCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB1cGRhdGUgY29uZmlndmFycyBsaXN0IEhUTUwgZnJhbWV3b3JrCisgICAgICAgICAgICAkKCJkbCNjb25maWd2YXItbGlzdCIpLmh0bWwob3JpZ2h0bWwpOworCisgICAgICAgICAgICAvLyBpbnNlcnQgdGhlIG5hbWUvdmFsdWUgcGFpcnMgc2FmZWx5IGFzIG5vbi1IVE1MCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKTsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzFdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRoZSB0b29sdGlwcworICAgICAgICAgICAgJCgiLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciIpLmVhY2goIGZ1bmN0aW9uKCl7IHNldERlbGV0ZVRvb2x0aXAoJCh0aGlzKSk7IH0pOworICAgICAgICAgICAgJCgiLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiKS5lYWNoKGZ1bmN0aW9uKCl7IHNldENoYW5nZVRvb2x0aXAoJCh0aGlzKSk7IH0pOworCisgICAgICAgICAgICAvLyByZS1hc3NlcnQgdGhlc2UgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIHNldEV2ZW50SGFuZGxlcnNGb3JEeW5hbWljRWxlbWVudHMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uRWRpdEFqYXhTdWNjZXNzKGRhdGEsIHRleHRzdGF0dXMpIHsKKyAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCJYSFIgcmV0dXJuZWQ6IiwgZGF0YSwgIigiICsgdGV4dHN0YXR1cyArICIpIik7CisgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICAgICAgYWxlcnQoImVycm9yIG9uIHJlcXVlc3Q6XG4iICsgZGF0YS5lcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBkZWxheWVkIHBhZ2UgcmVsb2FkPworICAgICAgICAgICAgaWYgKGRvX3JlbG9hZCkgeworICAgICAgICAgICAgICAgIGRvX3JlbG9hZD1mYWxzZTsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQodHJ1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkVkaXRBamF4RXJyb3IoanFYSFIsIHRleHRzdGF0dXMsIGVycm9yKSB7CisgICAgICAgICAgICBhbGVydCgiWEhSIGVycm9yZWQ6XG4iICsgZXJyb3IgKyAiXG4oIiArIHRleHRzdGF0dXMgKyAiKSIpOworICAgICAgICAgICAgLy8gcmUtYXNzZXJ0IHRoZSBldmVudCBoYW5kbGVycworICAgICAgICB9CisKKyAgICAgICAgLyogZW5zdXJlIGNvb2tpZSBleGlzdHMgeyUgY3NyZl90b2tlbiAlfSAqLworICAgICAgICBmdW5jdGlvbiBwb3N0RWRpdEFqYXhSZXF1ZXN0KHJlcWRhdGEpIHsKKyAgICAgICAgICAgIHZhciBhamF4ID0gJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZToiUE9TVCIsCisgICAgICAgICAgICAgICAgICAgIGRhdGE6ICQucGFyYW0ocmVxZGF0YSksCisgICAgICAgICAgICAgICAgICAgIHVybDoieyUgdXJsICd4aHJfY29uZmlndmFyZWRpdCcgcHJvamVjdC5pZCV9IiwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nOiAkLmNvb2tpZSgiY3NyZnRva2VuIil9LAorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBvbkVkaXRBamF4U3VjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9uRWRpdEFqYXhFcnJvciwKKyAgICAgICAgICAgIH0pCisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZXREZWxldGVUb29sdGlwKG9iamVjdCkgeworICAgICAgICAgICAgb2JqZWN0LnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiA0MDB9LCB0aXRsZTogIkRlbGV0ZSIgfSk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gc2V0Q2hhbmdlVG9vbHRpcChvYmplY3QpIHsKKyAgICAgICAgICAgIG9iamVjdC50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogNDAwfSwgdGl0bGU6ICJDaGFuZ2UiIH0pOworICAgICAgICB9CisKKyAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBSZWdpc3RlciBoYW5kbGVycyBmb3Igc3RhdGljIGVsZW1lbnRzCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQorICAgICAgICAgICAgLy8gY2hhbmdlIGRpc3RybyB2YXJpYWJsZQorICAgICAgICAgICAgJCgnI2NoYW5nZS1kaXN0cm8taWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtZGlzdHJvLWljb24sICNkaXN0cm8nKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1kaXN0cm8tZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgICQoIiNuZXctZGlzdHJvIikudmFsKCAkKCcjZGlzdHJvJykudGV4dCgpICk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtZGlzdHJvJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3RybywgI2NoYW5nZS1kaXN0cm8taWNvbicpLnNob3coKTsKKworICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBhbnkgZGFuZ2xpbmcgZXJyb3Igc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQtZGlzdHJvLW5hbWUtZGl2Iik7CisgICAgICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gdmFsaWRhdGUgbmV3IGRpc3RybyBuYW1lCisgICAgICAgICAgICAkKCJpbnB1dCNuZXctZGlzdHJvIikub24oJ2lucHV0JywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhbGlkYXRlX2Rpc3Ryb19uYW1lKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1kaXN0cm8nKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vJCgnI3JlcG8nKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaGlnaGxpZ2h0LWdvJyk7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjbmV3LWRpc3RybycpLnZhbCgpOworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0RJU1RSTzonK25hbWV9KTsKKyAgICAgICAgICAgICAgICAkKCcjZGlzdHJvJykudGV4dChuYW1lKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNkaXN0cm8sICNjaGFuZ2UtZGlzdHJvLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgZnN0eXBlc19kZWZpbmVkICV9CisgICAgICAgICAgICAvLyBjaGFuZ2UgSU1BR0VfRlNUWVBFUyB2YXJpYWJsZQorCisgICAgICAgICAgICAkKCcjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uLCAjaW1hZ2VfZnN0eXBlcycpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgIC8vIGF2b2lkIGZhbHNlIHN1YnN0cmluZyBtYXRjaGVzIGJ5IGluY2x1ZGluZyBzcGFjZSBzZXBhcmF0b3JzCisgICAgICAgICAgICAgICAgdmFyIGh0bWwgICAgICAgICA9ICIiOworICAgICAgICAgICAgICAgIHZhciBmc3R5cGVzICAgICAgPSAiICIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1hZ2VfZnN0eXBlcyIpLmlubmVySFRNTCArICIgIjsKKyAgICAgICAgICAgICAgICB2YXIgZnN0eXBlc19saXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY2hlY2tib3gtZnN0eXBlcy1saXN0Jyk7CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjaGVja2VkIGJveGVzIGZpcnN0CisgICAgICAgICAgICAgICAgaWYgKCIgICIgIT0gZnN0eXBlcykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZnN0eXBlc19saXN0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSBmc3R5cGVzLmluZGV4T2YoIiAiK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsiICIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImZzLWNoZWNrYm94LWZzdHlwZXMiIHZhbHVlPSInK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnIiBjaGVja2VkPSJjaGVja2VkIj4nK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnPC9sYWJlbD5cbic7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSB1bi1jaGVja2VkIGJveGVzIHNlY29uZAorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmc3R5cGVzX2xpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgID4gZnN0eXBlcy5pbmRleE9mKCIgIitmc3R5cGVzX2xpc3RbaV0udmFsdWUrIiAiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImZzLWNoZWNrYm94LWZzdHlwZXMiIHZhbHVlPSInK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnIj4nK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnPC9sYWJlbD5cbic7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbC1pbWFnZV9mc3R5cGVzIikuaW5uZXJIVE1MID0gaHRtbDsKKworICAgICAgICAgICAgICAgIC8vIFdhdGNoIGVsZW1lbnRzIHRvIGRpc2FibGUgU2F2ZSB3aGVuIG5vbmUgYXJlIGNoZWNrZWQKKyAgICAgICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlcyIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUZzVHlwZXNTYXZlKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHByZXZpb3VzIGZpbHRlciB2YWx1ZXMKKyAgICAgICAgICAgICAgICAkKCJpbnB1dCNmaWx0ZXItaW1hZ2VfZnN0eXBlcyIpLnZhbCgiIik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfZnN0eXBlcywgI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2ZpbHRlci1pbWFnZV9mc3R5cGVzJykub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9ICQodGhpcykudmFsKCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAkKCcjYWxsLWltYWdlX2ZzdHlwZXMgbGFiZWwnKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gJCh0aGlzKS50ZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5pbmRleE9mKHZhbFRoaXMpOworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gZXh0cmFjdCB0aGUgc2VsZWN0ZWQgZnN0eXBlcyBhbmQgc29ydCB0aGVtCisgICAgICAgICAgICAgICAgdmFyIGZzdHlwZXNfYXJyYXkgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZzLWNoZWNrYm94LWZzdHlwZXMnKTsKKyAgICAgICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlczpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICBmc3R5cGVzX2FycmF5LnB1c2goJCh0aGlzKS52YWwoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZnN0eXBlc19hcnJheS5zb3J0KCk7CisKKyAgICAgICAgICAgICAgICAvLyBub3cgbWFrZSBhIHN0cmluZyBvZiB0aGVtCisgICAgICAgICAgICAgICAgdmFyIGZzdHlwZXMgPSAnJzsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZnN0eXBlc19hcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmc3R5cGVzICs9IGZzdHlwZXNfYXJyYXlbaV0gKyAnICc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZzdHlwZXMgPSBmc3R5cGVzLnRyaW0oKTsKKworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0lNQUdFX0ZTVFlQRVM6Jytmc3R5cGVzfSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2ZzdHlwZXMnKS50ZXh0KGZzdHlwZXMpOworICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzLCAjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworCisgICAgICAgICAgICB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkICV9CisKKyAgICAgICAgICAgIC8vIGluaXQgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdHJhc2ggaWNvbgorICAgICAgICAgICAgc2V0RGVsZXRlVG9vbHRpcCgkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpKTsKKworICAgICAgICAgICAgLy8gY2hhbmdlIElNQUdFX0lOU1RBTExfYXBwZW5kIHZhcmlhYmxlCisgICAgICAgICAgICAkKCcjY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIHByZXNldCB0aGUgZWRpdCB2YWx1ZQorICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X3ZhbCA9ICQoInNwYW4jaW1hZ2VfaW5zdGFsbCIpLnRleHQoKS50cmltKCk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfdmFsID09ICJOb3Qgc2V0IikgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZhbD0iIjsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGluc3VyZSB0aGVzZSBub24tZW1wdHkgdmFsdWVzIGhhdmUgc2luZ2xlIHNwYWNlIHByZWZpeAorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZhbD0iICIgKyBjdXJyZW50X3ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCgiaW5wdXQjbmV3LWltYWdlX2luc3RhbGwiKS52YWwoY3VycmVudF92YWwpOworCisgICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24sICNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uLCAjaW1hZ2VfaW5zdGFsbCcpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNjYW5jZWwtY2hhbmdlLWltYWdlX2luc3RhbGwnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwsICNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgICAgICBpZiAoJCgic3BhbiNpbWFnZV9pbnN0YWxsIikudGV4dCgpICE9ICJOb3Qgc2V0IikgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWxldGVUb29sdGlwKCQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgiI25ldy1pbWFnZV9pbnN0YWxsIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS50cmltKCkubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyBpbnN1cmUgdGhlc2Ugbm9uLWVtcHR5IHZhbHVlcyBoYXZlIHNpbmdsZSBzcGFjZSBwcmVmaXgKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAiICIgKyAkKCcjbmV3LWltYWdlX2luc3RhbGwnKS52YWwoKS50cmltKCk7CisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnSU1BR0VfSU5TVEFMTF9hcHBlbmQ6Jyt2YWx1ZX0pOworICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCwgI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWxldGVUb29sdGlwKCQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBkZWxldGUgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdmFyaWFibGUgdmFsdWUKKyAgICAgICAgICAgICQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKHRoaXMpLnRvb2x0aXAoJ2hpZGUnKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdJTUFHRV9JTlNUQUxMX2FwcGVuZDonKycnfSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5wYXJlbnQoKS5mYWRlT3V0KDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykuYWRkQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCgnTm90IHNldCcpOworICAgICAgICAgICAgICAgICAgICAkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5wYXJlbnQoKS5mYWRlSW4oMTAwMCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgcGFja2FnZV9jbGFzc2VzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIC8vIGNoYW5nZSBQQUNLQUdFX0NMQVNTRVMgdmFyaWFibGUKKyAgICAgICAgICAgICQoJyNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAkKCcjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uLCAjcGFja2FnZV9jbGFzc2VzJykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iKS5zbGlkZURvd24oKTsKKworICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIHB1bGxkb3duIGFuZCBjaGVja2JveGVzCisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJCgiI3BhY2thZ2VfY2xhc3NlcyIpLnRleHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoInBhY2thZ2VfZGViIikgPT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKS5wcm9wKCdzZWxlY3RlZEluZGV4JywgMCk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfaXBrIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX3JwbSIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigicGFja2FnZV9pcGsiKSA9PSAwICkgeworICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc2VzLXNlbGVjdCIpLnByb3AoJ3NlbGVjdGVkSW5kZXgnLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9kZWIiKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18xX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfcnBtIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMl9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJwYWNrYWdlX3JwbSIpID09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzZXMtc2VsZWN0IikucHJvcCgnc2VsZWN0ZWRJbmRleCcsIDIpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX2RlYiIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzFfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9pcGsiKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18yX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtcGFja2FnZV9jbGFzc2VzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NlcywgI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCdzZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2UtcGFja2FnZV9jbGFzc2VzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB2YXIgZSAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKTsKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gZS5vcHRpb25zW2Uuc2VsZWN0ZWRJbmRleF0udGV4dDsKKworICAgICAgICAgICAgICAgIHBjMV9jaGVja2VkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmNoZWNrZWQ7CisgICAgICAgICAgICAgICAgcGMyX2NoZWNrZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFja2FnZV9jbGFzc18yX2lucHV0IikuY2hlY2tlZDsKKyAgICAgICAgICAgICAgICBpZiAodmFsID09ICJwYWNrYWdlX2RlYiIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfaXBrIjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMl9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfcnBtIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAicGFja2FnZV9pcGsiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzFfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX2RlYiI7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX3JwbSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInBhY2thZ2VfcnBtIikgeworICAgICAgICAgICAgICAgICAgICBpZiAocGMxX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9kZWIiOworICAgICAgICAgICAgICAgICAgICBpZiAocGMyX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9pcGsiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzZXMnKS50ZXh0KHZhbCk7CisgICAgICAgICAgICAgICAgLy8kKCcjcGFja2FnZV9jbGFzc2VzJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnUEFDS0FHRV9DTEFTU0VTOicrdmFsfSk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzZXMsICNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgc2RrX21hY2hpbmVfZGVmaW5lZCAlfQorICAgICAgICAgICAgLy8gY2hhbmdlIFNES01BQ0hJTkUgdmFyaWFibGUKKyAgICAgICAgICAgICQoJyNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2RrbWFjaGluZSIpLmlubmVySFRNTDsKKyAgICAgICAgICAgICAgICB2YXIgcmFkaW9zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ3Nka21hY2hpbmUnKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmFkaW9zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJhZGlvc1tpXS5jaGVja2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYWRpb3NbaV0udmFsdWUgPT0gY3VycmVudF92YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9zW2ldLmNoZWNrZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICQoJyNjaGFuZ2Utc2RrbWFjaGluZS1pY29uLCAjc2RrbWFjaGluZScpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXNka21hY2hpbmUtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNjYW5jZWwtY2hhbmdlLXNka21hY2hpbmUnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2Utc2RrbWFjaGluZS1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3Nka21hY2hpbmUsICNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2Utc2RrbWFjaGluZScpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlPSIiOworICAgICAgICAgICAgICAgIHZhciByYWRpb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnc2RrbWFjaGluZScpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByYWRpb3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhZGlvc1tpXS5jaGVja2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoZSBjaGVja2VkIHJhZGlvCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1yYWRpb3NbaV0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdTREtNQUNISU5FOicrdmFsdWV9KTsKKyAgICAgICAgICAgICAgICAkKCcjc2RrbWFjaGluZScpLnRleHQodmFsdWUpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2Utc2RrbWFjaGluZS1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3Nka21hY2hpbmUsICNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgLy8gYWRkIG5ldyB2YXJpYWJsZQorICAgICAgICAgICAgJCgiYnV0dG9uI2FkZC1jb25maWd2YXItYnV0dG9uIikuY2xpY2soIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFyaWFibGUgPSAkKCJpbnB1dCN2YXJpYWJsZSIpLnZhbCgpOworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I3ZhbHVlIikudmFsKCk7CisKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQWRkIiA6IHZhcmlhYmxlKyc6Jyt2YWx1ZX0pOworCisgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHByZXZpb3VzIHZhbHVlcworICAgICAgICAgICAgICAgICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCIiKTsKKyAgICAgICAgICAgICAgICAkKCJpbnB1dCN2YWx1ZSIpLnZhbCgiIik7CisgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBhZGQgYnV0dG9uCisgICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisKKyAgICAgICAgICAgICAgICAvLyBSZWxvYWQgcGFnZSBpZiBhZG1pbi1yZW1vdmVkIGNvcmUgbWFuYWdlZCB2YWx1ZSBpcyBtYW51YWxseSBhZGRlZCBiYWNrIGluCisgICAgICAgICAgICAgICAgaWYgKDAgPD0gIiBESVNUUk8gSU1BR0VfRlNUWVBFUyBJTUFHRV9JTlNUQUxMX2FwcGVuZCBQQUNLQUdFX0NMQVNTRVMgU0RLTUFDSElORSAiLmluZGV4T2YoICIgIit2YXJpYWJsZSsiICIgKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBkZWxheWVkIHJlbG9hZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiB3aXRoIHBvc3RFZGl0QWpheFJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgZG9fcmVsb2FkPXRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHZhbGlkYXRlIG5ldyB2YXJpYWJsZSBuYW1lIGFuZCB2YWx1ZQorICAgICAgICAgICAgJCgiI3ZhcmlhYmxlLCAjdmFsdWUiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZV9uZXdfdmFyaWFibGUoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gZHJhdyBhbmQgcmVnaXN0ZXIgdGhlIGR5bmFtaWMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kIGhhbmRsZXJzCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAgICAgICAgICAgICBjb25maWd2YXJzIDogW10KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB7JSBmb3IgYyBpbiBjb25maWd2YXJzICV9CisgICAgICAgICAgICAgICAgZGF0YS5jb25maWd2YXJzLnB1c2goWyAie3tjLm5hbWV9fSIsInt7Yy52YWx1ZX19Iiwie3tjLnBrfX0iIF0pOworICAgICAgICAgICAgICAgIHslIGlmICcnICE9IHZhcnNfY29udGV4dHxnZXRfZGljdF92YWx1ZTpjLm5hbWUgJX0KKyAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJzX2NvbnRleHRbICJ7e2MubmFtZX19IiBdID0gInt7dmFyc19jb250ZXh0fGdldF9kaWN0X3ZhbHVlOmMubmFtZSB9fSI7CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAvLyBkcmF3IHRoZXNlIGVsZW1lbnRzIGFuZCBhc3NlcnQgdGhlaXIgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7CisgICAgICAgIH0pOworCisgICAgPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDc3YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHMuaHRtbApAQCAtMCwwICsxLDc3IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKworICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KKyAgICAgIDxoMT4KKyAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHByb2plY3R7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICB7JWVsaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgICAgIE5vIHByb2plY3RzIGZvdW5kCisgICAgICB7JWVsc2UlfQorICAgICAgICAgIEFsbCBwcm9qZWN0cworICAgICAgeyVlbmRpZiV9CisgICAgICAgPC9oMT4KKyAgPC9kaXY+CisKKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSIKKyAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgICAgICAgICAgICAgICAgICAge3tyZXF1ZXN0LkdFVC5zZWFyY2h9fQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCBwcm9qZWN0czwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICB7JSBlbHNlICV9IHsjIFdlIGhhdmUgYnVpbGRzIHRvIGRpc3BsYXkgI30KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorICB7JSBmb3IgbyBpbiBvYmplY3RzICV9CisgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIG8uaWQgJX0iPnt7by5uYW1lfX08L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0idXBkYXRlZCI+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBvLmlkICV9Ij57e28udXBkYXRlZHxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgIDx0ZD4KKyAgICAgICAgeyUgaWYgby5yZWxlYXNlICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIG8uaWQgJX0jcHJvamVjdC1kZXRhaWxzIj57e28ucmVsZWFzZS5uYW1lfX08L2E+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIE5vIHJlbGVhc2UgYXZhaWxhYmxlCisgICAgICAgIHslIGVuZGlmICV9CisgICAgICA8L3RkPgorICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAncHJvamVjdCcgby5pZCAlfSNtYWNoaW5lLWRpc3RybyI+e3tvLmdldF9jdXJyZW50X21hY2hpbmVfbmFtZX19PC9hPjwvdGQ+CisgICAgICB7JSBpZiBvLmdldF9udW1iZXJfb2ZfYnVpbGRzID09IDAgJX0KKyAgICAgIDx0ZCBjbGFzcz0ibXV0ZWQiPnt7by5nZXRfbnVtYmVyX29mX2J1aWxkc319PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibG91dGNvbWUiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx0YXJnZXQiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlcnJvcnMiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx3YXJuaW5ncyI+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGltYWdlZmlsZXMiPjwvdGQ+CisgICAgICB7JSBlbHNlICV9CisgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBvLmlkICV9Ij57e28uZ2V0X251bWJlcl9vZl9idWlsZHN9fTwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJsb3V0Y29tZSI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgby5nZXRfbGFzdF9idWlsZF9pZCAlfSI+eyVpZiBvLmdldF9sYXN0X291dGNvbWUgPT0gYnVpbGRfU1VDQ0VFREVEJX08aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT57JWVsaWYgby5nZXRfbGFzdF9vdXRjb21lID09IGJ1aWxkX0ZBSUxFRCV9PGkgY2xhc3M9Imljb24tbWludXMtc2lnbiBlcnJvciI+PC9pPnslZWxzZSV9eyVlbmRpZiV9PC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx0YXJnZXQiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIG8uZ2V0X2xhc3RfYnVpbGRfaWQgJX0iPnt7by5nZXRfbGFzdF90YXJnZXR9fSA8L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVycm9ycyI+eyUgaWYgby5nZXRfbGFzdF9lcnJvcnMgJX08YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9I2Vycm9ycyI+e3tvLmdldF9sYXN0X2Vycm9yc319IGVycm9ye3tvLmdldF9sYXN0X2Vycm9yc3xwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgPHRkIGNsYXNzPSJsd2FybmluZ3MiPnslIGlmIG8uZ2V0X2xhc3Rfd2FybmluZ3MgJX08YSBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgby5nZXRfbGFzdF9idWlsZF9pZCAlfSN3YXJuaW5ncyI+e3tvLmdldF9sYXN0X3dhcm5pbmdzfX0gd2FybmluZ3t7by5nZXRfbGFzdF93YXJuaW5nc3xwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgPHRkIGNsYXNzPSJsaW1hZ2VmaWxlcyI+CisgICAgICAgIHslIGlmIG8uZ2V0X2xhc3Rfb3V0Y29tZSA9PSBidWlsZF9TVUNDRUVERUQgJX0KKyAgICAgICAgPGEgaHJlZj0ieyV1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9I2ltYWdlcyI+e3tmc3R5cGVzfGdldF9kaWN0X3ZhbHVlOm8uaWR9fTwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgIDwvdGQ+CisKKyAgICAgIHslIGVuZGlmICV9CisgICAgPC90cj4KKyAgeyUgZW5kZm9yICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KKyAgeyUgZW5kaWYgJX0geyMgZW1wdHkgI30KKworeyUgZW5kYmxvY2sgJX0KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHRvcGJhci5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTI3NDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbApAQCAtMCwwICsxLDQ3IEBACis8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIGxlYWQiIGlkPSJwcm9qZWN0LWNyZWF0ZWQtbm90aWZpY2F0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDoxNXB4OyBkaXNwbGF5Om5vbmUiPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9ImFsZXJ0Ij7DlzwvYnV0dG9uPgorICBZb3VyIHByb2plY3QgPHN0cm9uZz57e3Byb2plY3QubmFtZX19PC9zdHJvbmc+IGhhcyBiZWVuIGNyZWF0ZWQuIFlvdSBjYW4gbm93IDxhIGhyZWY9InslIHVybCAncHJvamVjdG1hY2hpbmVzJyBwcm9qZWN0LmlkICV9Ij5zZWxlY3QgeW91ciB0YXJnZXQgbWFjaGluZTwvYT4gYW5kIDxhIGhyZWY9InslIHVybCAncHJvamVjdHRhcmdldHMnIHByb2plY3QuaWQgJX0iPmNob29zZSBpbWFnZSByZWNpcGVzPC9hPiB0byBidWlsZC4KKzwvZGl2PgorCis8IS0tIHByb2plY3QgbmFtZSAtLT4KKzxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPjxzcGFuIGlkPSJwcm9qZWN0LW5hbWUiPnt7cHJvamVjdC5uYW1lfX08L3NwYW4+CisgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIGlkPSJwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSIgdGl0bGU9IiI+PC9pPgorICA8L2gxPgorICA8Zm9ybSBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMHB4OyBkaXNwbGF5OiBub25lOyI+CisgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaHVnZSBpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1pbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSJ7e3Byb2plY3QubmFtZX19Ij4KKyAgICAgICAgPGJ1dHRvbiBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1idG4iIGNsYXNzPSJidG4gYnRuLWxhcmdlIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgPGEgaHJlZj0iIyIgaWQ9InByb2plY3QtbmFtZS1jaGFuZ2UtY2FuY2VsIiBjbGFzcz0iYnRuIGJ0bi1sYXJnZSBidG4tbGluayI+Q2FuY2VsPC9hPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KKworPGRpdiBpZD0icHJvamVjdC10b3BiYXIiPgorICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgIDxsaT4KKyAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCAlfSI+CisgICAgICAgIEJ1aWxkcyAoPHNwYW4gY2xhc3M9InRvdGFsLWJ1aWxkcyI+MDwvc3Bhbj4pCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGkgaWQ9InRvcGJhci1jb25maWd1cmF0aW9uLXRhYiI+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPgorICAgICAgICBDb25maWd1cmF0aW9uCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij4KKyAgICAgICAgSW1wb3J0IGxheWVyCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGkgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTowcHg7Ij4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIGRhdGEtcGxhY2VtZW50PSJsZWZ0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUeXBlIHRoZSBuYW1lIG9mIG9uZSBvciBtb3JlIHJlY2lwZXMgeW91IHdhbnQgdG8gYnVpbGQsIHNlcGFyYXRlZCBieSBhIHNwYWNlLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHRhc2sgYnkgYXBwZW5kaW5nIGEgc2VtaWNvbG9uIGFuZCBhIHRhc2sgbmFtZSB0byB0aGUgcmVjaXBlIG5hbWUsIGxpa2Ugc286IDxjb2RlPmJ1c3lib3g6Y2xlYW48L2NvZGU+Ij48L2k+CisgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgPGlucHV0IGlkPSJidWlsZC1pbnB1dCIgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBpbnB1dC1sZyBidWlsZC10YXJnZXQtaW5wdXQiIHBsYWNlaG9sZGVyPSJUeXBlIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkaXNhYmxlZD4KKyAgICAgICAgICA8YnV0dG9uIGlkPSJidWlsZC1idXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIGJ1aWxkLWJ1dHRvbiIgZGF0YS1wcm9qZWN0LWlkPSJ7e3Byb2plY3QuaWR9fSIgZGlzYWJsZWQ+QnVpbGQ8L2J1dHRvbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Zvcm0+CisgICAgPC9saT4KKyAgPC91bD4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZS5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTQxOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlLmh0bWwKQEAgLTAsMCArMSwyNDIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZGRldGFpbHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+Cis8bGk+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fSA8L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CisKKzwhLS0gQmVnaW4gY29udGFpbmVyIC0tPgorCis8ZGl2IGNsYXNzPSJyb3cgc3BhbjExIj4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgIDxoMT57e29iamVjdC5uYW1lfX1fe3tvYmplY3QudmVyc2lvbn19PC9oMT4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyb3cgc3BhbjcgdGFiYmFibGUiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDxsaSBjbGFzcz0ie3t0YWJfc3RhdGVzLjF9fSI+CisgICAgICAgICAgICA8YSBocmVmPSIjaW5mb3JtYXRpb24iIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBSZWNpcGUgZGV0YWlscworICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGVfcGFja2FnZXMiIGJ1aWxkLnBrIG9iamVjdC5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgIFBhY2thZ2VzICh7e3BhY2thZ2VfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSJ7e3RhYl9zdGF0ZXMuM319Ij4KKyAgICAgICAgICAgIDxhIGhyZWY9IiNkZXBlbmRlbmNpZXMiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpIj48L2k+CisgICAgICAgICAgICAgICAgQnVpbGQgZGVwZW5kZW5jaWVzICh7e29iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsLmNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0ie3t0YWJfc3RhdGVzLjR9fSI+CisgICAgICAgICAgICA8YSBocmVmPSIjYnJvdWdodC1pbi1ieSIgZGF0YS10b2dnbGU9InRhYiI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUgYnVpbGQtdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcmVjaXBlcyB0aGF0IGRlcGVuZCBvbiB0aGlzIHJlY2lwZSkiPjwvaT4KKyAgICAgICAgICAgICAgICBSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoe3tvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwuY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICA8L3VsPgorICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUge3t0YWJfc3RhdGVzLjF9fSIgaWQ9ImluZm9ybWF0aW9uIj4KKyAgICAgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIExheWVyCisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+e3tsYXllci5uYW1lfX08L2RkPgorCisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGF0aCB0byB0aGUgcmVjaXBlIC5iYiBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIFJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+PGNvZGU+e3tvYmplY3QuZmlsZV9wYXRofX0geyUgaWYgb2JqZWN0LnBhdGhmbGFncyAlfTxpPih7e29iamVjdC5wYXRoZmxhZ3N9fSk8L2k+eyUgZW5kaWYgJX08L2NvZGU+PC9kZD4KKyAgICAgICAgICAgICAgICB7JSBpZiBsYXllcl92ZXJzaW9uLmJyYW5jaCAlfQorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICBMYXllciBicmFuY2gKKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD57e2xheWVyX3ZlcnNpb24uYnJhbmNofX08L2RkPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIExheWVyIGNvbW1pdAorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkIGNsYXNzPSJpc2NvbW1pdCI+e3tsYXllcl92ZXJzaW9uLmNvbW1pdH19PC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisKKyAgICAgICAgICAgIDxoMiBjbGFzcz0iZGV0YWlscyI+VGFza3M8L2gyPgorICAgICAgICAgICAgeyUgaWYgbm90IHRhc2tzICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7b2JqZWN0Lm5hbWV9fV97e29iamVjdC52ZXJzaW9ufX08L3N0cm9uZz4gZG9lcyBub3QgaGF2ZSBhbnkgdGFza3MgaW4gdGhpcyBidWlsZC4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorCQkgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgdGFzayI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgVGFzaworICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyB2YWx1ZSB0ZWxscyB5b3UgaWYgYSB0YXNrIGhhZCB0byBydW4gKGV4ZWN1dGVkKSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgdGFzayBvdXRwdXQsIG9yIGlmIHRoZSBvdXRwdXQgd2FzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayBhbmQgdGhlcmVmb3JlIHRoZSB0YXNrIGRpZG4ndCBuZWVkIHRvIHJ1biAobm90IGV4ZWN1dGVkKSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZWQKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiAnZXhlY3V0ZWQnIHRhc2tzIHN1Y2NlZWRlZCBvciBmYWlsZWQuIFRoZSBjb2x1bW4gYWxzbyB0ZWxscyB5b3Ugd2h5ICdub3QgZXhlY3V0ZWQnIHRhc2tzIGRpZCBub3QgbmVlZCB0byBydW4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE91dGNvbWUKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiBhIHRhc2sgdHJpZWQgdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycywgYW5kIHJlcG9ydHMgdGhlIHJlc3VsdDogU3VjY2VlZGVkLCBGYWlsZWQgb3IgRmlsZSBub3QgaW4gY2FjaGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhY2hlIGF0dGVtcHQKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKwkJICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCisgICAgICAgICAgICAgICAgICAgIHslIGZvciB0YXNrIGluIHRhc2tzICV9CisKKyAgICAgICAgICAgICAgICAgICAgPHRyIHt7IHRhc2t8dGFza19jb2xvciB9fSA+CisKKyAgICAgICAgICAgICAgICAgICAgPHRkPjxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5vcmRlcn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay50YXNrX25hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJ7e3Rhc2suZ2V0X2Rlc2NyaXB0aW9ufX0iPjwvaT4geyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQ+PGEge3sgdGFza3x0YXNrX2NvbG9yIH19IGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+PC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSB7eyB0YXNrfHRhc2tfY29sb3IgfX0gaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrICV9Ij57e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2sub3V0Y29tZSA9IHRhc2suT1VUQ09NRV9GQUlMRUQgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAidGFza2xvZ2ZpbGUiIHRhc2sucGsgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWZub3RlcXVhbCB0YXNrLnNzdGF0ZV9yZXN1bHQgdGFzay5TU1RBVEVfTkEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5nZXRfc3N0YXRlX3Jlc3VsdF9kaXNwbGF5fX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKworICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB7e3RhYl9zdGF0ZXMuM319IiBpZD0iZGVwZW5kZW5jaWVzIj4KKworICAgICAgICAgICAgeyUgaWYgbm90IG9iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7b2JqZWN0Lm5hbWV9fV97e29iamVjdC52ZXJzaW9ufX08L3N0cm9uZz4gaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisKKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHJyIGluIG9iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsfGRpY3Rzb3J0OiJkZXBlbmRzX29uLm5hbWUiICV9CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcnIuZGVwZW5kc19vbi5wayAlfSI+e3tyci5kZXBlbmRzX29uLm5hbWV9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByci5kZXBlbmRzX29uLnBrICV9Ij57e3JyLmRlcGVuZHNfb24udmVyc2lvbn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB7e3RhYl9zdGF0ZXMuNH19IiBpZD0iYnJvdWdodC1pbi1ieSI+CisKKyAgICAgICAgICAgIHslIGlmIG5vdCBvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fTwvc3Ryb25nPiBoYXMgbm8gcmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCisgICAgICAgICAgICAgICAgICAgIHslIGZvciByciBpbiBvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGx8ZGljdHNvcnQ6InJlY2lwZS5uYW1lIiAlfQorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLnJlY2lwZS5wayAlfSI+e3tyci5yZWNpcGUubmFtZX19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLnJlY2lwZS5wayAlfSI+e3tyci5yZWNpcGUudmVyc2lvbn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuNCB3ZWxsIj4KKyAgICA8aDI+QWJvdXQge3tvYmplY3QubmFtZX19PC9oMj4KKyAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisgICAgICAgIHslIGlmIG9iamVjdC5zdW1tYXJ5ICV9CisgICAgICAgICAgICA8ZHQ+U3VtbWFyeTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tvYmplY3Quc3VtbWFyeX19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgb2JqZWN0LmRlc2NyaXB0aW9uICV9CisgICAgICAgICAgICA8ZHQ+RGVzY3JpcHRpb248L2R0PgorICAgICAgICAgICAgPGRkPnt7b2JqZWN0LmRlc2NyaXB0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QuaG9tZXBhZ2UgJX0KKyAgICAgICAgICAgIDxkdD5Ib21lcGFnZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tvYmplY3QuaG9tZXBhZ2V9fSI+e3tvYmplY3QuaG9tZXBhZ2V9fTwvYT48L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QuYnVndHJhY2tlciAlfQorICAgICAgICAgICAgPGR0PkJ1Z3RyYWNrZXI8L2R0PgorICAgICAgICAgICAgPGRkPjxhIGhyZWY9Int7b2JqZWN0LmJ1Z3RyYWNrZXJ9fSI+e3tvYmplY3QuYnVndHJhY2tlcn19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIG9iamVjdC5zZWN0aW9uICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICBTZWN0aW9uCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tvYmplY3Quc2VjdGlvbn19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgb2JqZWN0LmxpY2Vuc2UgJX0KKyAgICAgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KKyAgICAgICAgICAgIDxkZD57e29iamVjdC5saWNlbnNlfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+Cis8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfYnRuLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX2J0bi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzFiMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX2J0bi5odG1sCkBAIC0wLDAgKzEsOCBAQAorPGJ1dHRvbiBkYXRhLXJlY2lwZS1uYW1lPSJ7e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSBidWlsZC1yZWNpcGUtYnRuIiBzdHlsZT0iZGlzcGxheTpub25lOyBtYXJnaW4tdG9wOiA1cHg7IiA+CisgIEJ1aWxkIHJlY2lwZQorPC9idXR0b24+Cis8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyYnRuIGxheWVyLWFkZC17e2RhdGEubGF5ZXJfdmVyc2lvbi5wa319IiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5wayV9In0nIGRhdGEtZGlyZWN0aXZlPSJhZGQiPgorICA8aSBjbGFzcz0iaWNvbi1wbHVzIj48L2k+CisgIEFkZCBsYXllcgorICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUbyBidWlsZCB0aGlzIHRhcmdldCwgeW91IG11c3QgZmlyc3QgYWRkIHRoZSB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgdG8geW91ciBwcm9qZWN0Ij48L2k+Cis8L2J1dHRvbj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfcGFja2FnZXMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfcGFja2FnZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjU4NDdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9wYWNrYWdlcy5odG1sCkBAIC0wLDAgKzEsMTIzIEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KKzxsaT57e3JlY2lwZS5uYW1lfX1fe3tyZWNpcGUudmVyc2lvbn19IDwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKworPCEtLSBCZWdpbiBjb250YWluZXIgLS0+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTEiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPnt7cmVjaXBlLm5hbWV9fV97e3JlY2lwZS52ZXJzaW9ufX08L2gxPgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuNyB0YWJiYWJsZSI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiMSIgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBSZWNpcGUgZGV0YWlscworICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisJCQk8YSBocmVmPSIjcGFja2FnZXMtYnVpbHQiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlcyAoe3tvYmplY3RfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiMyIgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpIj48L2k+CisgICAgICAgICAgICAgICAgQnVpbGQgZGVwZW5kZW5jaWVzICh7e3JlY2lwZS5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsLmNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUuaWQgIjQiICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHJlY2lwZSBidWlsZC10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoaXMgcmVjaXBlKSI+PC9pPgorICAgICAgICAgICAgICAgIFJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICh7e3JlY2lwZS5yX2RlcGVuZGVuY2llc19kZXBlbmRzLmFsbC5jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgoreyMgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9InBhY2thZ2VzLWJ1aWx0IiBuYW1lPSJwYWNrYWdlcy1idWlsdCI+I30KKyAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJwYWNrYWdlcy1idWlsdCI+CisgICAgICAgICAgICB7JSBpZiBub3Qgb2JqZWN0cyBhbmQgbm90IHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz57e3JlY2lwZS5uYW1lfX1fe3tyZWNpcGUudmVyc2lvbn19PC9zdHJvbmc+IGRvZXMgbm90IGJ1aWxkIGFueSBwYWNrYWdlcy4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICB7JSBlbGlmIG5vdCBvYmplY3RzICV9CisgICAgICAgICAgICAgICAgeyMgaGF2ZSBlbXB0eSBzZWFyY2ggcmVzdWx0cywgbm8gdGFibGUgbm9yIHBhZ2luYXRpb24gI30KKyAgICAgICAgICAgICAgICB7JSB3aXRoICJwYWNrYWdlcyIgYXMgc2VhcmNoX3doYXQgJX0KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIiAlfQorICAgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKworICAgICAgICAgICAgeyUgZWxzZSAlfQorCisKKyAgICAgICAgICAgICAgICB7JSB3aXRoICJwYWNrYWdlcyIgYXMgc2VhcmNoX3doYXQgJX0KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIiAlfQorICAgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJvdGFibGUiPgorICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgImRldGFpbF9zb3J0ZWRfaGVhZGVyLmh0bWwiICV9CisKKyAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KKworICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLm5hbWV9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS52ZXJzaW9ufX1fe3twYWNrYWdlLnJldmlzaW9ufX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorCisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGlmIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbCIgJX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PiB7IyB0YWItcGFuZSAjfQorICAgIDwvZGl2PiB7IyB0YWItY29udGVudCAjfQorPC9kaXY+IHsjIHNwYW43ICN9CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuNCB3ZWxsIj4KKyAgICA8aDI+QWJvdXQge3tyZWNpcGUubmFtZX19PC9oMj4KKyAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisgICAgICAgIHslIGlmIHJlY2lwZS5zdW1tYXJ5ICV9CisgICAgICAgICAgICA8ZHQ+U3VtbWFyeTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tyZWNpcGUuc3VtbWFyeX19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgcmVjaXBlLmRlc2NyaXB0aW9uICV9CisgICAgICAgICAgICA8ZHQ+RGVzY3JpcHRpb248L2R0PgorICAgICAgICAgICAgPGRkPnt7cmVjaXBlLmRlc2NyaXB0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUuaG9tZXBhZ2UgJX0KKyAgICAgICAgICAgIDxkdD5Ib21lcGFnZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tyZWNpcGUuaG9tZXBhZ2V9fSI+e3tyZWNpcGUuaG9tZXBhZ2V9fTwvYT48L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUuYnVndHJhY2tlciAlfQorICAgICAgICAgICAgPGR0PkJ1Z3RyYWNrZXI8L2R0PgorICAgICAgICAgICAgPGRkPjxhIGhyZWY9Int7cmVjaXBlLmJ1Z3RyYWNrZXJ9fSI+e3tyZWNpcGUuYnVndHJhY2tlcn19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHJlY2lwZS5zZWN0aW9uICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICBTZWN0aW9uCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tyZWNpcGUuc2VjdGlvbn19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgcmVjaXBlLmxpY2Vuc2UgJX0KKyAgICAgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3JlY2lwZS5saWNlbnNlfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+Cis8L2Rpdj4KK3slIGVuZGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZXMuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkYWM0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVzLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5SZWNpcGVzPC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi1yZWNpcGVzICV9CisgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8ZGl2IGNsYXNzPSJzcGFuMTAiPgorPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorPGgxPgorICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCAgJX0KKyAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSByZWNpcGV7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAlfQorICAgICAgTm8gcmVjaXBlcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAgUmVjaXBlcworICB7JWVuZGlmJX0KKyA8L2gxPgorPC9kaXY+CisKK3slIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyVlbmRpZiV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCByZWNpcGVzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KKworeyUgZWxzZSAlfQoreyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCisgICAgeyUgZm9yIHJlY2lwZSBpbiBvYmplY3RzICV9CisKKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbmFtZSI+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLnBrICV9Ij57e3JlY2lwZS5uYW1lfX08L2E+CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX192ZXJzaW9uIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0iPnt7cmVjaXBlLnZlcnNpb259fTwvYT4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPCEtLSBEZXBlbmRzIC0tPgorICAgICAgICA8dGQgY2xhc3M9ImRlcGVuZHNfb24iPgorICAgICAgICAgICAgeyUgd2l0aCBkZXBzPXJlY2lwZV9kZXBzfGdldF9kaWN0X3ZhbHVlOnJlY2lwZS5wayAlfQorICAgICAgICAgICAgeyUgd2l0aCBjb3VudD1kZXBzfGxlbmd0aCAlfQorICAgICAgICAgICAgeyUgaWYgY291bnQgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0jZGVwZW5kZW5jaWVzJz57e3JlY2lwZS5uYW1lfX08L2E+IGRlcGVuZGVuY2llcyIKKyAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gZGVwc3xkaWN0c29ydDoiZGVwZW5kc19vbi5uYW1lIiV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2NvdW50fX0KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDwhLS0gIEJyb3VnaHQgaW4gYnkgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0iZGVwZW5kc19ieSI+CisgICAgICAgICAgICB7JSB3aXRoIHJldnM9cmVjaXBlX3JldnN8Z2V0X2RpY3RfdmFsdWU6cmVjaXBlLnBrICV9CisgICAgICAgICAgICB7JSB3aXRoIGNvdW50PXJldnN8bGVuZ3RoICV9CisgICAgICAgICAgICB7JSBpZiBjb3VudCAlfQorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgICAgICB0aXRsZT0iPGEgaHJlZj0neyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5wayAlfSNicm91Z2h0LWluLWJ5Jz57e3JlY2lwZS5uYW1lfX08L2E+IHJldmVyc2UgZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiByZXZzfGRpY3Rzb3J0OiJyZWNpcGUubmFtZSIgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayBpLnJlY2lwZS5wayAlfSc+e3tpLnJlY2lwZS5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2NvdW50fX0KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDwhLS0gUmVjaXBlIGZpbGUgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX2ZpbGUiPnt7cmVjaXBlLmZpbGVfcGF0aH19IHslIGlmIHJlY2lwZS5wYXRoZmxhZ3MgJX08aT4oe3tyZWNpcGUucGF0aGZsYWdzfX0pPC9pPnslIGVuZGlmICV9PC90ZD4KKyAgICAgICAgPCEtLSBTZWN0aW9uIC0tPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9zZWN0aW9uIj57e3JlY2lwZS5zZWN0aW9ufX08L3RkPgorICAgICAgICA8IS0tIExpY2Vuc2UgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX2xpY2Vuc2UiPnt7cmVjaXBlLmxpY2Vuc2V9fTwvdGQ+CisgICAgICAgIDwhLS0gTGF5ZXIgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiPnt7cmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC90ZD4KKyAgICAgICAgPCEtLSBMYXllciBicmFuY2ggLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIj57e3JlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19PC90ZD4KKyAgICAgICAgPCEtLSBMYXllciBjb21taXQgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCI+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICA8bGk+e3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR9fTwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7cmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+CisKKyAgICB7JSBlbmRmb3IgJX0KKworeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YWJsZXNvcnQuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YWJsZXNvcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjI0NzQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhYmxlc29ydC5odG1sCkBAIC0wLDAgKzEsMzggQEAKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKzwhLS0gY29tcG9uZW50IHRvIGRpc3BsYXkgYSBnZW5lcmljIHRhYmxlIC0tPgorICAgIHslIGlmIGRpc2FibGVfc29ydCAlfQorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiIGlkPSJkZXRhaWxfdGFibGUiPgorICAgIDx0aGVhZD4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfQorICAgICAgICAgICAgPHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslZW5kaWYlfSB7JWlmIHRjLmNsY2xhc3MlfXt7dGMuY2xjbGFzc319eyVlbmRpZiV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAge3t0Yy5uYW1lfX0KKyAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIHslIGVsc2UgJX0KKyAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ib3RhYmxlIj4KKyAgICA8dGhlYWQ+CisgICAgICAgIDwhLS0gVGFibGUgaGVhZGVyIHJvdzsgZ2VuZXJhdGVkIGZyb20gInRhYmxlY29scyIgZW50cnkgaW4gdGhlIGNvbnRleHQgZGljdCAtLT4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfQorICAgICAgICAgICAgPHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslZW5kaWYlfSB7JWlmIHRjLmNsY2xhc3MlfXt7dGMuY2xjbGFzc319eyVlbmRpZiV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmZpZWxkJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgeyVpZiB0Yy5vcmRlcmljb24lfSBjbGFzcz0ic29ydGVkIiB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOiAxLCAnb3JkZXJieScgOiAne3t0Yy5vcmRlcmZpZWxkfX0nIH0pIiA+CisgICAgICAgICAgICAgICAgICAgICAgICB7e3RjLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dGMubmFtZX19CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIHslIGVuZGlmICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFyZ2V0Lmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFyZ2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlNmM0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXJnZXQuaHRtbApAQCAtMCwwICsxLDE2MiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0YXJnZXQudGFyZ2V0fX08L2xpPgoreyUgZW5kYmxvY2sgbG9jYWxicmVhZGNydW1iJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBuYXYtdGFyZ2V0ICV9CisgIHslIGZvciB0IGluIGJ1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QgJX0KKyAgICB7JSBpZmVxdWFsIHRhcmdldC5wayB0LnBrICV9CisgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHQucGsgJX0iPnt7dC50YXJnZXR9fTwvYT48bGk+CisgICAgeyUgZWxzZSAlfQorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0LnBrICV9Ij57e3QudGFyZ2V0fX08L2E+PGxpPgorICAgIHslIGVuZGlmZXF1YWwgJX0KKyAgeyUgZW5kZm9yICV9Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gcGFja2FnZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgICAgICAgICAgIHslIGVsaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgICAgICAgTm8gcGFja2FnZXMgZm91bmQKKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICB7e3RhcmdldC50YXJnZXR9fQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9oMT4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgcHVsbC1yaWdodCBzcGFuMTAiIGlkPSJuYXZUYWIiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgICAgICAgIDxhIGhyZWY9IiN0YXJnZXQiPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9mIGFsbCB0aGUgcGFja2FnZXMgYnVpbHQsIHRoZSBzdWJzZXQgaW5zdGFsbGVkIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlcyBpbmNsdWRlZCAoe3t0YXJnZXQucGFja2FnZV9jb3VudH19IC0ge3twYWNrYWdlc19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdkaXJpbmZvJyBidWlsZC5pZCB0YXJnZXQuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBEaXJlY3Rvcnkgc3RydWN0dXJlCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgPC91bD4KKworICAgIDxkaXYgaWQ9ImltYWdlLXBhY2thZ2VzIiBjbGFzcz0idGFiLXBhbmUiPgorCisgICAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHBhY2thZ2VzPC9idXR0b24+CisgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisKKyAgICB7JSBlbHNlICV9CisgICAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KKyAgICA8dHI+CisgICAgICB7IyBvcmRlciBvZiB0aGUgdGFibGUgZGF0YSBtdXN0IG1hdGNoIHRoZSBjb2x1bW5zIGRlZmluZWQgaW4gdGVtcGxhdGUncyBjb250ZXh0IHRhYmxlY29scyAgI30KKyAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX25hbWUiPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAge3twYWNrYWdlLm5hbWV9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5pbnN0YWxsZWRfbmFtZSBhbmQgcGFja2FnZS5uYW1lICE9IHBhY2thZ2UuaW5zdGFsbGVkX25hbWUgJX0KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzIHt7cGFja2FnZS5pbnN0YWxsZWRfbmFtZX19PC9zcGFuPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ne3twYWNrYWdlLm5hbWV8YWRkOiIgd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kIHdhcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhcyAifGFkZDpwYWNrYWdlLmluc3RhbGxlZF9uYW1lfX0nPjwvaT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV92ZXJzaW9uIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgIHt7cGFja2FnZS52ZXJzaW9ufGZpbHRlcmVkX3BhY2thZ2V2ZXJzaW9uOnBhY2thZ2UucmV2aXNpb259fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImxpY2Vuc2UiPgorICAgICAgICAgICAge3twYWNrYWdlLmxpY2Vuc2V9fQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9InNpemUgc2l6ZWNvbCI+CisgICAgICAgICAgICB7e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9pbnN0YWxsZWRzaXplOnBhY2thZ2UuaW5zdGFsbGVkX3NpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fQorICAgICAgICA8L3RkPgorCisgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZV9vdmVyX3RvdGFsIHNpemVjb2wiPgorICAgICAgICAgICAge3twYWNrYWdlfGZpbHRlcl9zaXplb3ZlcnRvdGFsOnBhY2thZ2VzX3N1bX19CisgICAgICAgIDwvdGQ+CisgICAgICAgPHRkIGNsYXNzPSJkZXBlbmRzIj4KKyAgICAgICAgICAgIHslIHdpdGggZGVwcz1wYWNrYWdlLnJ1bnRpbWVfZGVwZW5kZW5jaWVzICV9CisgICAgICAgICAgICB7JSB3aXRoIGRlcHNfY291bnQ9ZGVwc3xsZW5ndGggJX0KKyAgICAgICAgICAgIHslIGlmIGRlcHNfY291bnQgPiAwICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzIiBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSc+e3twYWNrYWdlLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBkZXBzfGRpY3Rzb3J0OidkZXBlbmRzX29uLm5hbWUnICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsIiBidWlsZC5wayB0YXJnZXQuaWQgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2RlcHNfY291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJicm91Z2h0X2luX2J5Ij4KKyAgICAgICAgICAgIHslIHdpdGggcmRlcHM9cGFja2FnZS5yZXZlcnNlX3J1bnRpbWVfZGVwZW5kZW5jaWVzICV9CisgICAgICAgICAgICB7JSB3aXRoIHJkZXBzX2NvdW50PXJkZXBzfGxlbmd0aCAlfQorICAgICAgICAgICAgeyUgaWYgcmRlcHNfY291bnQgPiAwICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMiIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Jz57e3BhY2thZ2UubmFtZX19PC9hPiByZXZlcnNlIGRlcGVuZGVuY2llcyIKKyAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gcmRlcHN8ZGljdHNvcnQ6J3BhY2thZ2UubmFtZScgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicGFja2FnZV9pbmNsdWRlZF9kZXRhaWwiIGJ1aWxkLmlkIHRhcmdldC5pZCBpLnBhY2thZ2UuaWQgJX0nPnt7aS5wYWNrYWdlLm5hbWV9fTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7cmRlcHNfY291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbmFtZSI+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgorICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUubmFtZSB9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfdmVyc2lvbiI+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgorICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUudmVyc2lvbiB9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJsYXllcl9uYW1lIj4KKyAgICAgICAgICAgIHt7IHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSB9fQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImxheWVyX2JyYW5jaCI+CisgICAgICAgICAgICB7eyBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfY29tbWl0Ij4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgIDxsaT57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fX08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9CisgICAgeyUgZW5kaWYgJX0KKyAgICA8L2Rpdj4gPCEtLSB0YWJwYW5lIC0tPgorPC9kaXY+IDwhLS1zcGFuIDEwLS0+Cit7JSBlbmRibG9jayBidWlsZGluZm9tYWluICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFzay5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzUwOThhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbApAQCAtMCwwICsxLDI2OSBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorPGxpPnt7dGFzay5yZWNpcGUubmFtZX19X3t7dGFzay5yZWNpcGUudmVyc2lvbn19IHt7dGFzay50YXNrX25hbWV9fTwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKworPGRpdiBjbGFzcz0icm93IHNwYW4xMSI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICA8aDE+PGEgaHJlZj0ieyV1cmwgJ3JlY2lwZScgYnVpbGQucGsgdGFzay5yZWNpcGUucGsgJX0iPnt7dGFzay5yZWNpcGUubmFtZX19X3t7dGFzay5yZWNpcGUudmVyc2lvbn19PC9hPiB7e3Rhc2sudGFza19uYW1lfX08L2gxPgorICAgIDwvZGl2PgorCit7IyBPdXRjb21lIHNlY3Rpb24gI30KKzxoMiB7eyB0YXNrfHRhc2tfY29sb3I6VHJ1ZSB9fT4KKyAgICB7e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19CisgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X291dGNvbWVfaGVscH19Ij48L2k+Cis8L2gyPgoreyVpZiB0YXNrLnRhc2tfZXhlY3V0ZWQgJX0KKyAgICB7IyBleGVjdXRlZCB0YXNrcyBvdXRjb21lICN9CisgICAgeyUgaWYgdGFzay5sb2dmaWxlICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0YXNrLnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCB0YXNrIGxvZzwvYT4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICB7IyBzaG93IHN0YWNrIHRyYWNlIGZvciBmYWlsZWQgdGFzayAjfQorICAgICAgICB7JSBpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0ZBSUxFRCBhbmQgbG9nX2hlYWQgJX0KKyAgICAgICAgICAgIDxoMz5QeXRob24gc3RhY2sgdHJhY2U8L2gzPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJtaW4taGVpZ2h0OjE2MHB4OyI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7bG9nX2hlYWR9fTwvY29kZT48YSBpZD0iZnVsbC10cmFjZS1zaG93IiBkYXRhLXRhcmdldD0iI2Z1bGx0cmFjZSIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBjbGFzcz0iYnRuIGJ0bi1taW5pIj4uLi48L2E+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZ1bGx0cmFjZSIgY2xhc3M9ImNvbGxhcHNlIiBzdHlsZT0ibWFyZ2luLXRvcDogLTIwcHg7IGhlaWdodDogMHB4OyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57e2xvZ19ib2R5fX08L2NvZGU+PGJyPjxhIGlkPSJmdWxsLXRyYWNlLWhpZGUiIGNsYXNzPSJidG4gYnRuLW1pbmkgY29sbGFwc2VkIiBzdHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUiIGRhdGEtdGFyZ2V0PSIjZnVsbHRyYWNlIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiPkNvbGxhcHNlIHN0YWNrIHRyYWNlPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiPjwvaT48L2E+PC9kaXY+PC9wcmU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWYgJX0KK3slIGVsc2UgJX0KK3sjIG5vdCBleGVjdXRlZCB0YXNrcyBvdXRjb21lICN9CisgICAgeyUgaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9QUkVCVUlMVCAlfQorICAgICAgICB7JSBpZiBub3Qgc2hvd2luZ19tYXRjaGVzICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydzaG93X21hdGNoZXMnIDogJ3RydWUnIH0pIj5NYXRjaCB0byB0YXNrcyBpbiBwcmV2aW91cyBidWlsZHMgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsiIHRpdGxlPSJUaGlzIHNob3dzIHlvdSBhIGxpc3Qgb2YgdGFza3MgZnJvbSBwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQgaW4gdGhlIHByZWJ1aWx0IHRhc2suIEFueSBvZiB0aGVtIGNvdWxkIGJlIHRoZSB0YXNrIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdXRwdXQgdGhpcyBwcmVidWlsdCB0YXNrIGlzIHJldXNpbmciPjwvaT48L2E+CisgICAgICAgIHslIGVsaWYgbWF0Y2hpbmdfdGFza3MgJX0KKyAgICAgICAgICAgIDxoMyBjbGFzcz0iZGV0YWlscyI+UHJlYnVpbHQgdGFzayBjb3VsZCBiZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iVGhpcyB0YWJsZSBzaG93cyBhIGxpc3Qgb2YgdGFza3MgZnJvbSBwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQgaW4gdGhlIHByZWJ1aWx0IHRhc2suIEFueSBvZiB0aGVtIGNvdWxkIGJlIHRoZSB0YXNrIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdXRwdXQgdGhpcyBwcmVidWlsdCB0YXNrIGlzIHJldXNpbmciPjwvaT4KKyAgICAgICAgICAgIDwvaDM+CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSB0YXNrIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBUYXNrCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIHZhbHVlIHRlbGxzIHlvdSBpZiBhIHRhc2sgaGFkIHRvIHJ1biAoZXhlY3V0ZWQpIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCwgb3IgaWYgdGhlIG91dHB1dCB3YXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGFuZCB0aGVyZWZvcmUgdGhlIHRhc2sgZGlkbid0IG5lZWQgdG8gcnVuIChub3QgZXhlY3V0ZWQpIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlZAorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvIHJ1biI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgT3V0Y29tZQorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIGZpbmlzaGVkIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBjb21wbGV0ZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIG1hdGNoIGluIG1hdGNoaW5nX3Rhc2tzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3sgbWF0Y2h8dGFza19jb2xvciB9fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLnJlY2lwZS5uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLnRhc2tfbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXNrLmdldF9kZXNjcmlwdGlvbiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3t0YXNrLmdldF9kZXNjcmlwdGlvbn19Ij48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLmdldF9vdXRjb21lX2Rpc3BsYXl9fSA8L2E+PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3ttYXRjaC5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2guYnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxwIGNsYXNzPSJhbGVydCI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz4gV2UgaGF2ZSBmb3VuZCBubyB0YXNrcyBtYXRjaGluZyB0aGlzIHByZWJ1aWx0IHRhc2s8L3N0cm9uZz48YnIvPgorICAgICAgICAgICAgICAgIFRoZSB0YXNrIHlvdSBhcmUgbG9va2luZyBmb3IgY291bGQgYmVsb25nIHRvIGEgYnVpbGQgZm9yIHdoaWNoIFRvYXN0ZXIgaGFzIG5vIGRhdGEuCisgICAgICAgICAgICA8L3A+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgeyUgZWxpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0NPVkVSRUQgJX0KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHRhc2socykgcHJvdmlkaW5nIHRoZSBvdXRjb21lIG9mIHRoaXMgdGFzayI+PC9pPiBUYXNrIGNvdmVyZWQgYnkKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIHQgaW4gY292ZXJlZF9ieSAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgJ3Rhc2snIHQuYnVpbGQucGsgdC5wayV9IgorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YXNrLWluZm8iCisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0ie3t0LmdldF9leGVjdXRlZF9kaXNwbGF5fX0gfCB7e3QuZ2V0X291dGNvbWVfZGlzcGxheX19Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dC5yZWNpcGUubmFtZX19X3t7dC5yZWNpcGUudmVyc2lvbn19CisgICAgICAgICAgICAgICAgICAgICAgICB7e3QudGFza19uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgPC9kbD4KKyAgICB7JWVsaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9DQUNIRUQlfQorICAgICAgICAgICAgeyUgZm9yIHQgaW4gdGFzay5nZXRfcmVsYXRlZF9zZXRzY2VuZSAlfQorICAgICAgICAgICAgICAgIHslIGlmIGZvcmxvb3AubGFzdCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0LnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCB0YXNrIGxvZzwvYT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JWVsaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9FTVBUWSV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gZGV0YWlscyI+CisgICAgICAgICAgICBUaGlzIHRhc2sgaXMgZW1wdHkgYmVjYXVzZSBpdCBoYXMgdGhlIDxjb2RlPm5vZXhlYzwvY29kZT4gZmxhZyBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIG9yIHRoZSB0YXNrIGZ1bmN0aW9uIGlzIGVtcHR5CisgICAgICAgIDwvZGl2PgorICAgIHslIGVuZGlmICV9Cit7JSBlbmRpZiAlfQorCit7IyBFeGVjdXRpb24gc2VjdGlvbiAjfQorICAgIHslIGlmIHRhc2sudGFza19leGVjdXRlZCAlfQorICAgIDxoMj4KKyAgICAgICAgRXhlY3V0ZWQKKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSInRXhlY3V0ZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IG5lZWQgdG8gcnVuIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCI+PC9pPgorICAgIHslIGVsc2UgJX0KKyAgICA8aDIgY2xhc3M9Im11dGVkIj4KKyAgICAgICAgTm90IEV4ZWN1dGVkCisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iJ05vdCBleGVjdXRlZCcgdGFza3MgZG9uJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRjb21lIGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayI+PC9pPgorICAgIHslIGVuZGlmICV9CisgICAgPC9oMj4KKworPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICA8ZHQ+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUbyBtYWtlIGJ1aWxkcyBtb3JlIGVmZmljaWVudCwgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGNoYW5nZXMgaW4gdGhlICdpbnB1dHMnIHRvIGEgZ2l2ZW4gdGFzayBieSBjcmVhdGluZyBhICd0YXNrIHNpZ25hdHVyZScuIElmIHRoZSBzaWduYXR1cmUgY2hhbmdlcywgdGhlIGJ1aWxkIHN5c3RlbSBhc3N1bWVzIHRoZSBpbnB1dHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFzayBuZWVkcyB0byBiZSByZXJ1biI+PC9pPgorICAgICAgICBUYXNrIGlucHV0cyBzaWduYXR1cmUKKyAgICA8L2R0PgorICAgIDxkZD4KKyAgICAgICAge3t0YXNrLnNzdGF0ZV9jaGVja3N1bX19CisgICAgPC9kZD4KKzwvZGw+CisgICAgeyUgaWYgdGFzay5zc3RhdGVfcmVzdWx0ICE9IHRhc2suU1NUQVRFX05BICV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPkF0dGVtcHRpbmcgdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSBzc3RhdGUgY2FjaGUKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIgdGl0bGU9IlRoZSBidWlsZCBzeXN0ZW0gaXMgc2VhcmNoaW5nIGZvciB0aGUgdGFzayBvdXRwdXQgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQgbWlycm9ycy4gSWYgdGhlIGJ1aWxkIHN5c3RlbSBmaW5kcyB0aGUgdGFzayBvdXRwdXQsIGl0IHdpbGwgcmV1c2UgaXQgaW5zdGVhZCBvZiBidWlsZGluZyBpdCBmcm9tIHNjcmF0Y2ggYnkgcnVubmluZyB0aGUgcmVhbCB0YXNrLiBSZXVzaW5nIHRoZSB0YXNrIG91dHB1dCBtYWtlcyB0aGUgYnVpbGQgZmFzdGVyIj48L2k+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgZmlsZSBzZWFyY2hlZCBmb3IgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQgbWlycm9ycyI+PC9pPgorICAgICAgICAgICAgICAgIEZpbGUgc2VhcmNoZWQgZm9yCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPnt7dGFzay5wYXRoX3RvX3NzdGF0ZV9vYmp9fTwvY29kZT48L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbG9jYXRpb25zIHNlYXJjaGVkIGZvciB0aGUgYWJvdmUgZmlsZSAoaS5lLiB5b3VyIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IGFuZCBhbnkgbWlycm9ycyB5b3UgaGF2ZSBzZXQgdXApIj48L2k+CisgICAgICAgICAgICAgICAgVVJJKHMpIHNlYXJjaGVkCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPjx1bD57JSBmb3IgdXJpIGluIHVyaV9saXN0ICV9PGxpPjxjb2RlPnt7dXJpfX08L2NvZGU+PC9saT57JSBlbmRmb3IgJX08L3VsPjwvZGQ+CisgICAgICAgIDwvZGw+CisgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgPT0gdGFzay5TU1RBVEVfTUlTUyAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIDxzdHJvbmc+RmlsZSBub3QgaW4gc3N0YXRlIGNhY2hlLjwvc3Ryb25nPiBSdW5uaW5nIHRoZSByZWFsIHRhc2sgaW5zdGVhZC4KKyAgICAgICAgPC9kaXY+CisgICAgeyUgZWxpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgPT0gdGFzay5TU1RBVEVfRkFJTEVEJX0KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICAgICAgPHN0cm9uZz5GYWlsZWQ8L3N0cm9uZz4gdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSBzc3RhdGUgY2FjaGUuIFRoZSBmaWxlIHdhcyBmb3VuZCBidXQgY291bGQgbm90IGJlIHVucGFja2VkLgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgdGFzay5wayAlfSIgc3R5bGU9Im1hcmdpbjoxNXB4OyI+RG93bmxvYWQgbG9nPC9hPgorICAgICAgICA8L2RsPgorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhlIHJlYWwgdGFzayBpbnN0ZWFkLgorICAgICAgICA8L2Rpdj4KKyAgICB7JSBlbGlmIHRhc2suc3N0YXRlX3Jlc3VsdCA9PSB0YXNrLlNTVEFURV9SRVNUT1JFRCAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIE91dHB1dCA8c3Ryb25nPnN1Y2Nlc3NmdWxseSByZXN0b3JlZDwvc3Ryb25nPiBmcm9tIHNzdGF0ZSBjYWNoZS4KKyAgICAgICAgPC9kaXY+CisgICAgeyUgZW5kaWYgJX0KKyAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgVGFzayBvcmRlcgorICAgIDwvZHQ+CisgICAgPGRkPjxhIGhyZWY9InsldXJsICJ0YXNrc190YXNrIiBidWlsZC5wayB0YXNrLm9yZGVyICV9I3t7dGFzay5vcmRlcn19Ij57e3Rhc2sub3JkZXJ9fTwvYT48L2RkPgorICAgIHslIGlmIHRhc2sudGFza19leGVjdXRlZCAlfQorICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iSW5kaWNhdGVzIGlmIHRoaXMgdGFzayBleGVjdXRlcyBhIFB5dGhvbiBvciBTaGVsbCBmdW5jdGlvbihzKSI+PC9pPgorICAgICAgICAgICAgVGFzayBzY3JpcHQgdHlwZQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmdldF9zY3JpcHRfdHlwZV9kaXNwbGF5fX08L2RkPgorICAgIHslIGVuZGlmICV9Cis8IS0tCisgICAgPGR0PgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGNvZGUgZXhlY3V0ZWQgYnkgdGhlIHRhc2siPjwvaT4KKyAgICAgICAgVGFzayBleGVjdXRhYmxlIG91dHB1dAorICAgIDwvZHQ+CisgICAgPGRkPjxjb2RlPnt7dGFzay5zb3VyY2VfdXJsfX08L2NvZGU+PC9kZD4KKy0tPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2sgZGVwZW5kZW5jeSBjaGFpbiAoaS5lLiBvdGhlciB0YXNrcykiPjwvaT4KKyAgICAgICAgRGVwZW5kZW5jaWVzCisgICAgPC9kdD4KKyAgICA8ZGQ+CisgICAgICAgIDx1bD4KKyAgICAgICAgICAgIHslIGZvciBkZXAgaW4gZGVwcyAlfQorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JXVybCAndGFzaycgZGVwLmJ1aWxkLnBrIGRlcC5wayV9IiBjbGFzcz0idGFzay1pbmZvIiB0aXRsZT0ie3tkZXAuZ2V0X2V4ZWN1dGVkX2Rpc3BsYXl9fSB8IHt7ZGVwLmdldF9vdXRjb21lX2Rpc3BsYXl9fSI+e3tkZXAucmVjaXBlLm5hbWV9fV97e2RlcC5yZWNpcGUudmVyc2lvbn19IDxzcGFuIGNsYXNzPSJ0YXNrLW5hbWUiPnt7ZGVwLnRhc2tfbmFtZX19PC9zcGFuPjwvYT48L2xpPgorICAgICAgICAgICAgeyUgZW1wdHkgJX0KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im11dGVkIj5UaGlzIHRhc2sgaGFzIG5vIGRlcGVuZGVuY2llczwvbGk+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC91bD4KKyAgICA8L2RkPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2tzIHRoYXQgZGVwZW5kIG9uIHRoaXMgdGFzayI+PC9pPgorICAgICAgICBSZXZlcnNlIGRlcGVuZGVuY2llcworICAgIDwvZHQ+CisgICAgPGRkPgorICAgICAgICA8dWw+CisgICAgICAgICAgICB7JSBmb3IgZGVwIGluIHJkZXBzICV9CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InsldXJsICd0YXNrJyBkZXAuYnVpbGQucGsgZGVwLnBrJX0iIGNsYXNzPSJ0YXNrLWluZm8iIHRpdGxlPSJ7e2RlcC5nZXRfZXhlY3V0ZWRfZGlzcGxheX19IHwge3tkZXAuZ2V0X291dGNvbWVfZGlzcGxheX19Ij57e2RlcC5yZWNpcGUubmFtZX19X3t7ZGVwLnJlY2lwZS52ZXJzaW9ufX0gPHNwYW4gY2xhc3M9InRhc2stbmFtZSI+e3tkZXAudGFza19uYW1lfX08L3NwYW4+PC9hPjwvbGk+CisgICAgICAgICAgICB7JSBlbXB0eSAlfQorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibXV0ZWQiPlRoaXMgdGFzayBoYXMgbm8gcmV2ZXJzZSBkZXBlbmRlbmNpZXM8L2xpPgorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvdWw+Cis8L2RsPgorCit7IyBQZXJmb3JtYW5jZSBzZWN0aW9uIC0gc2hvd24gb25seSBmb3IgZXhlY3V0ZWQgdGFza3MgI30KK3slaWYgdGFzay5lbGFwc2VkX3RpbWUgb3IgdGFzay5jcHVfdXNhZ2Ugb3IgdGFzay5kaXNrX2lvICV9CisgICAgPGgyIGNsYXNzPSJkZXRhaWxzIj5QZXJmb3JtYW5jZTwvaDI+Cit7JSBlbmRpZiAlfQorICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgIHslIGlmIHRhc2suZWxhcHNlZF90aW1lICV9CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJIb3cgbG9uZyBpdCB0b29rIHRoZSB0YXNrIHRvIGZpbmlzaCBpbiBzZWNvbmRzIj48L2k+CisgICAgICAgICAgICBUaW1lIChzZWNzKQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmVsYXBzZWRfdGltZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiB0YXNrLmNwdV91c2FnZSA+IDAgJX0KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwZXJjZW50YWdlIG9mIHRhc2sgQ1BVIHV0aWxpemF0aW9uIj48L2k+CisgICAgICAgICAgICBDUFUgdXNhZ2UKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPnt7dGFzay5jcHVfdXNhZ2V8Zm9ybWF0X25vbmVfYW5kX3plcm98ZmxvYXRmb3JtYXQ6Mn19JTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHRhc2suZGlza19pbyA+IDAgJX0KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik51bWJlciBvZiBtaWxpc2Vjb25kcyB0aGUgdGFzayBzcGVudCBkb2luZyBkaXNrIGlucHV0IGFuZCBvdXRwdXQiPjwvaT4KKyAgICAgICAgICAgIERpc2sgSS9PIChtcykKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPnt7dGFzay5kaXNrX2lvfGZvcm1hdF9ub25lX2FuZF96ZXJvfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+CisKKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2tzLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFza3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThiNWM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2tzLmh0bWwKQEAgLTAsMCArMSwxMzYgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0aXRsZX19PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi10YXNrcyAlfQorICB7JSBpZiAnVGFza3MnID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICB7JSBlbHNlICV9CisgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1idWlsZHRpbWUgJX0KKyAgeyUgaWYgJ1RpbWUnID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICB7JSBlbHNlICV9CisgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1jcHV1c2FnZSAlfQorICB7JSBpZiAnQ1BVIHVzYWdlJyA9PSB0aXRsZSAlfQorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2NwdXVzYWdlJyBidWlsZC5wayAlfSI+Q1BVIHVzYWdlPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjcHV1c2FnZScgYnVpbGQucGsgJX0iPkNQVSB1c2FnZTwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1kaXNraW8gJX0KKyAgeyUgaWYgJ0Rpc2sgSS9PJyA9PSB0aXRsZSAlfQorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2Rpc2tpbycgYnVpbGQucGsgJX0iPkRpc2sgSS9PPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdkaXNraW8nIGJ1aWxkLnBrICV9Ij5EaXNrIEkvTzwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPGRpdiBjbGFzcz0ic3BhbjEwIj4KK3slIGlmIG5vdCByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG5vdCByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG5vdCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAlfQorICA8IS0tIEVtcHR5IC0gbm8gZGF0YSBpbiBkYXRhYmFzZSAtLT4KKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICA8aDE+e3t0aXRsZX19PC9oMT4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCI+CisgIE5vIGRhdGEgd2FzIHJlY29yZGVkIGZvciB0aGlzIGJ1aWxkLgorICA8L2Rpdj4KKworeyUgZWxzZSAlfQorCisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPgorICB7JSBpZiAgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+ICAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAgMCAlfQorICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHRhc2t7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICBObyB0YXNrcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAge3t0aXRsZX19CisgIHslZW5kaWYlfQorICA8L2gxPgorICA8L2Rpdj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULnNlYXJjaH19Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCB0YXNrczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKworICB7JSBlbHNlICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKworICAgIHslIGZvciB0YXNrIGluIG9iamVjdHMgJX0KKyAgICAgICAgPHRyIHt7IHRhc2t8dGFza19jb2xvciB9fSBpZD0ie3t0YXNrLm9yZGVyfX0iPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvcmRlciI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLm9yZGVyfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbmFtZSIgPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayB0YXNrLnJlY2lwZS5wayAlfSI+e3t0YXNrLnJlY2lwZS5uYW1lfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfdmVyc2lvbiI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHRhc2sucmVjaXBlLnBrICV9Ij57e3Rhc2sucmVjaXBlLnZlcnNpb259fTwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InRhc2tfbmFtZSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLnRhc2tfbmFtZX19PC9hPiB7JSBpZiB0YXNrLmdldF9kZXNjcmlwdGlvbiAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfZGVzY3JpcHRpb259fSI+PC9pPiB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iZXhlY3V0ZWQiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrJX0iPnt7dGFzay5nZXRfZXhlY3V0ZWRfZGlzcGxheX19PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ib3V0Y29tZSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLmdldF9vdXRjb21lX2Rpc3BsYXl9fSA8L2E+CisgICAgICAgICAgICAgICAgeyUgaWYgdGFzay5vdXRjb21lID0gdGFzay5PVVRDT01FX0ZBSUxFRCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAidGFza2xvZ2ZpbGUiIHRhc2sucGsgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X291dGNvbWVfaGVscH19Ij48L2k+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJjYWNoZV9hdHRlbXB0Ij4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2suZ2V0X3NzdGF0ZV9yZXN1bHRfZGlzcGxheXxmb3JtYXRfbm9uZV9hbmRfemVyb319PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0idGltZV90YWtlbiI+CisgICAgICAgICAgICAgICAge3t0YXNrLmVsYXBzZWRfdGltZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImNwdV91c2VkIj4KKyAgICAgICAgICAgICAgICB7e3Rhc2suY3B1X3VzYWdlfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fXslIGlmIHRhc2suY3B1X3VzYWdlICV9JXslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJkaXNrX2lvIj4KKyAgICAgICAgICAgICAgICB7e3Rhc2suZGlza19pb3xmb3JtYXRfbm9uZV9hbmRfemVyb319CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQorICB7JSBlbmRpZiAlfSB7IyBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAjfQoreyUgZW5kaWYgJX0geyMgZW1wdHkgI30KKzwvZGl2PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gZW5hYmxlIGJsdWUgaGlnaHRsaWdodCBhbmltYXRpb24gZm9yIHRoZSBvcmRlciBsaW5rCisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnIycpID4gLTEpIHsKKyAgICAgICAgICAgIHZhciB0YXNrX29yZGVyID0gbG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzFdOworICAgICAgICAgICAgJCgiIyIgKyB0YXNrX29yZGVyKS5hZGRDbGFzcygiaGlnaGxpZ2h0Iik7CisgICAgICAgIH0KKyAgICB9KTsKKworPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLWZpbHRlci5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzhkYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IS0tIGZpbHRlciBtb2RhbCAtLT4KKzxkaXYgaWQ9ImZpbHRlci1tb2RhbC17e3RhYmxlX25hbWV9fSIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxmb3JtIGlkPSJmaWx0ZXItbW9kYWwtZm9ybS17e3RhYmxlX25hbWV9fSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBweCI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICA8aDMgaWQ9ImZpbHRlci1tb2RhbC10aXRsZS17e3RhYmxlX25hbWV9fSI+Jm5ic3A7PC9oMz4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgIDxwPlNob3c6PC9wPgorICAgICAgPHNwYW4gaWQ9ImZpbHRlci1hY3Rpb25zLXt7dGFibGVfbmFtZX19Ij48L3NwYW4+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgdHlwZT0ic3VibWl0Ij5BcHBseTwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KKzxidXR0b24gaWQ9ImNsZWFyLWZpbHRlci1idG4te3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvYnV0dG9uPgorPCEtLSBlbmQgZmlsdGVyIG1vZGFsIC0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbCBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtc2ltcGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyMzE4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtc2ltcGxlLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90YWJsZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJCdG4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIChmdW5jdGlvbigpeworCisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHRhYmxlTmFtZSA6ICJ7e3RhYmxlX25hbWV9fSIsCisgICAgICB1cmwgOiAie3sgeGhyX3RhYmxlX3VybCB9fT9mb3JtYXQ9anNvbiIsCisgICAgICB0aXRsZSA6ICJ7e3RpdGxlfX0iLAorICAgICAgcHJvamVjdExheWVycyA6IHt7cHJvamVjdGxheWVyc3xqc29ufX0sCisgICAgfTsKKworICAgIHRyeSB7CisgICAgICB0YWJsZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiUHJvYmxlbSBsb2FkaW5nIHRhYmxlIHdpZGdldDogIiArIGUpOworICAgIH0KKyAgICB9KSgpOworICB9KTsKKzwvc2NyaXB0PgorCit7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ibmV3LXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPgorICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgPC9hPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayByZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSI+U2hvdyB7e3RpdGxlfGxvd2VyfX0KKyAgICAgIDwvYnV0dG9uPgorICAgIDwvZm9ybT4KKyAgPC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InRhYmxlLWNvbnRhaW5lci17e3RhYmxlX25hbWV9fSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+CisgIDwhLS0gY29udHJvbCBoZWFkZXIgLS0+CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9InRhYmxlLWNocm9tZS17e3RhYmxlX25hbWV9fSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQiPgorCisgICAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+CisgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgICA8L2E+CisgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKworICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgPCEtLSBUaGUgYWN0dWFsIHRhYmxlIC0tPgorICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ie3t0YWJsZV9uYW1lfX0iPgorICAgIDx0aGVhZD4KKyAgICAgIDx0cj48dGg+PC90aD48L3RyPgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PjwvdGJvZHk+CisgIDwvdGFibGU+CisKKyAgPCEtLSBQYWdpbmF0aW9uIGNvbnRyb2xzIC0tPgorICA8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIHBhZ2luYXRpb24tY2VudGVyZWQiIGlkPSJwYWdpbmF0aW9uLXt7dGFibGVfbmFtZX19Ij4KKyAgICA8dWwgY2xhc3M9InBhZ2luYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBibG9jay1pbmxpbmUiPgorICAgIDwvdWw+CisKKyAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZS17e3RhYmxlX25hbWV9fSI+CisgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgPC9zZWxlY3Q+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLmh0bWwgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmNGM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90YWJsZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJCdG4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIChmdW5jdGlvbigpeworCisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHRhYmxlTmFtZSA6ICJ7e3RhYmxlX25hbWV9fSIsCisgICAgICB1cmwgOiAie3sgeGhyX3RhYmxlX3VybCB9fT9mb3JtYXQ9anNvbiIsCisgICAgICB0aXRsZSA6ICJ7e3RpdGxlfX0iLAorICAgICAgcHJvamVjdExheWVycyA6IHt7cHJvamVjdGxheWVyc3xqc29ufX0sCisgICAgfTsKKworICAgIHRyeSB7CisgICAgICB0YWJsZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiUHJvYmxlbSBsb2FkaW5nIHRhYmxlIHdpZGdldDogIiArIGUpOworICAgIH0KKyAgICB9KSgpOworICB9KTsKKzwvc2NyaXB0PgorCit7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteHhsYXJnZSIgaWQ9Im5ldy1zZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KKyAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT4KKyAgICAgIDwvYT4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzZWFyY2gtc3VibWl0LXt7dGFibGVfbmFtZX19IiA+U2VhcmNoPC9idXR0b24+CisgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsgcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iPlNob3cge3t0aXRsZXxsb3dlcn19CisgICAgICA8L2J1dHRvbj4KKyAgICA8L2Zvcm0+CisgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgaWQ9InRhYmxlLWNvbnRhaW5lci17e3RhYmxlX25hbWV9fSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+CisgIDwhLS0gY29udHJvbCBoZWFkZXIgLS0+CisgIDxkaXYgY2xhc3M9Im5hdmJhciIgaWQ9InRhYmxlLWNocm9tZS17e3RhYmxlX25hbWV9fSI+CisgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCI+CisKKyAgICAgICAgPGlucHV0IGNsYXNzPSJpbnB1dC14eGxhcmdlIiBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2glfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KKyAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic2VhcmNoLXN1Ym1pdC17e3RhYmxlX25hbWV9fSIgPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RWRpdCBjb2x1bW5zCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4KKyAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZWRpdGNvbCI+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlci12ZXJ0aWNhbCI+PC9zcGFuPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUte3t0YWJsZV9uYW1lfX0iPgorICAgICAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKworICA8IS0tIFRoZSBhY3R1YWwgdGFibGUgLS0+CisgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJ7e3RhYmxlX25hbWV9fSI+CisgICAgPHRoZWFkPgorICAgICAgPHRyPjx0aD48L3RoPjwvdHI+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+PC90Ym9keT4KKyAgPC90YWJsZT4KKworICA8IS0tIFBhZ2luYXRpb24gY29udHJvbHMgLS0+CisgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24gcGFnaW5hdGlvbi1jZW50ZXJlZCIgaWQ9InBhZ2luYXRpb24te3t0YWJsZV9uYW1lfX0iPgorICAgIDx1bCBjbGFzcz0icGFnaW5hdGlvbiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrLWlubGluZSI+CisgICAgPC91bD4KKworICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICA8L3NlbGVjdD4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy91bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3VuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmOGZlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy91bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBhaXIiPgorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gc3BhbjggbGVhZCI+CisgICAgICAgIDxwIj4gVGhlIGJ1aWxkIGFydGlmYWN0IHlvdSBhcmUgdHJ5aW5nIHRvIGRvd25sb2FkIG5vIGxvbmdlciBleGlzdHMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5oaXN0b3J5LmJhY2soKSI+QmFjayB0byBwcmV2aW91cyBwYWdlPC9hPjwvcD4KKyAgICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9wcm9qZWN0dGFncy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9wcm9qZWN0dGFncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWYyMjYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL3Byb2plY3R0YWdzLnB5CkBAIC0wLDAgKzEsMjk5IEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQorZnJvbSBvcy5wYXRoIGltcG9ydCByZWxwYXRoCitpbXBvcnQgcmUKK2Zyb20gZGphbmdvIGltcG9ydCB0ZW1wbGF0ZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby50ZW1wbGF0ZS5kZWZhdWx0ZmlsdGVycyBpbXBvcnQgZmlsZXNpemVmb3JtYXQKK2ltcG9ydCBqc29uIGFzIEpzb25MaWIKK2Zyb20gZGphbmdvLnV0aWxzLnNhZmVzdHJpbmcgaW1wb3J0IG1hcmtfc2FmZQorCityZWdpc3RlciA9IHRlbXBsYXRlLkxpYnJhcnkoKQorCitAcmVnaXN0ZXIuc2ltcGxlX3RhZworZGVmIHRpbWVfZGlmZmVyZW5jZShzdGFydF90aW1lLCBlbmRfdGltZSk6CisgICAgcmV0dXJuIGVuZF90aW1lIC0gc3RhcnRfdGltZQorCitAcmVnaXN0ZXIuZmlsdGVyKG5hbWUgPSAnc2VjdG9obXMnKQorZGVmIHNlY3RvaG1zKHRpbWUpOgorICAgIHRyeToKKyAgICAgICAgdGRzZWMgPSBpbnQodGltZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgdGRzZWMgPSAwCisgICAgaG91cnMgPSBpbnQodGRzZWMgLyAzNjAwKQorICAgIHJldHVybiAiJTAyZDolMDJkOiUwMmQiICUgKGhvdXJzLCBpbnQoKHRkc2VjIC0gKGhvdXJzICogMzYwMCkpLyA2MCksIGludCh0ZHNlYykgJSA2MCkKKworCitAcmVnaXN0ZXIuZmlsdGVyKG5hbWUgPSAnZ2V0X3Rhc2tzJykKK2RlZiBnZXRfdGFza3MocXVlcnlzZXQpOgorICAgIHJldHVybiBsaXN0KHRhcmdldCArICc6JyArIHRhc2sgaWYgdGFzayBlbHNlIHRhcmdldCBcCisgICAgICAgICAgICAgICAgICAgIGZvciB0YXJnZXQsIHRhc2sgaW4gcXVlcnlzZXQudmFsdWVzX2xpc3QoJ3RhcmdldCcsICd0YXNrJykpCisKKworQHJlZ2lzdGVyLmZpbHRlcihuYW1lID0gImpzb24iKQorZGVmIGpzb24odmFsdWUsIGRlZmF1bHQgPSBOb25lKToKKyAgICAjIEpTT04gc3BlYyBzYXlzIHRoYXQgIlwvIiBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvICIvIiB0byBhbGxvdyBmb3IgSFRNTC10YWcgZW1iZWRkaW5nIGluIEpTT04gc3RyaW5ncworICAgICMgdW5mb3J0dW5hdGVseSwgSSBjYW4ndCBmaW5kIGFueSBvcHRpb24gaW4gdGhlIGpzb24gbW9kdWxlIHRvIHR1cm4gb24gZm9yd2FyZC1zbGFzaCBlc2NhcGluZywgc28gd2UgZG8KKyAgICAjIGl0IG1hbnVhbGx5IGhlcmUKKyAgICByZXR1cm4gbWFya19zYWZlKEpzb25MaWIuZHVtcHModmFsdWUsIGluZGVudD0yLCBkZWZhdWx0ID0gZGVmYXVsdCwgZW5zdXJlX2FzY2lpPUZhbHNlKS5yZXBsYWNlKCc8LycsICc8XFwvJykpCisKK0ByZWdpc3Rlci5hc3NpZ25tZW50X3RhZworZGVmIHF1ZXJ5KHFzLCAqKmt3YXJncyk6CisgICAgIiIiIHRlbXBsYXRlIHRhZyB3aGljaCBhbGxvd3MgcXVlcnlzZXQgZmlsdGVyaW5nLiBVc2FnZToKKyAgICAgICAgICB7JSBxdWVyeSBib29rcyBhdXRob3I9YXV0aG9yIGFzIG15Ym9va3MgJX0KKyAgICAgICAgICB7JSBmb3IgYm9vayBpbiBteWJvb2tzICV9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAiIiIKKyAgICByZXR1cm4gcXMuZmlsdGVyKCoqa3dhcmdzKQorCisKK0ByZWdpc3Rlci5maWx0ZXIoIndoaXRlc3BhY2Vfc2xpY2UiKQorZGVmIHdoaXRlc3BhY2Vfc3BhY2VfZmlsdGVyKHZhbHVlLCBhcmcpOgorICAgIHRyeToKKyAgICAgICAgYml0cyA9IFtdCisgICAgICAgIGZvciB4IGluIGFyZy5zcGxpdCgiOiIpOgorICAgICAgICAgICAgaWYgbGVuKHgpID09IDA6CisgICAgICAgICAgICAgICAgYml0cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBjb252ZXJ0IG51bWVyaWMgdmFsdWUgdG8gdGhlIGZpcnN0IHdoaXRlc3BhY2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICBmaXJzdF93aGl0ZXNwYWNlID0gdmFsdWUuZmluZCgiICIsIGludCh4KSkKKyAgICAgICAgICAgICAgICBpZiBmaXJzdF93aGl0ZXNwYWNlID09IC0xOgorICAgICAgICAgICAgICAgICAgICBiaXRzLmFwcGVuZChpbnQoeCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYml0cy5hcHBlbmQoZmlyc3Rfd2hpdGVzcGFjZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlW3NsaWNlKCpiaXRzKV0KKyAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgIHJhaXNlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBkaXZpZGUodmFsdWUsIGFyZyk6CisgICAgaWYgaW50KGFyZykgPT0gMDoKKyAgICAgICAgcmV0dXJuIC0xCisgICAgcmV0dXJuIGludCh2YWx1ZSkgLyBpbnQoYXJnKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgbXVsdGlwbHkodmFsdWUsIGFyZyk6CisgICAgcmV0dXJuIGludCh2YWx1ZSkgKiBpbnQoYXJnKQorCitAcmVnaXN0ZXIuYXNzaWdubWVudF90YWcKK2RlZiBkYXRlY29tcHV0ZShkZWx0YSwgc3RhcnQgPSB0aW1lem9uZS5ub3coKSk6CisgICAgcmV0dXJuIHN0YXJ0ICsgdGltZWRlbHRhKGRlbHRhKQorCisKK0ByZWdpc3Rlci5maWx0ZXIobmFtZSA9ICdzb3J0Y29scycpCitkZWYgc29ydGNvbHModGFibGVjb2xzKToKKyAgICByZXR1cm4gc29ydGVkKHRhYmxlY29scywga2V5ID0gbGFtYmRhIHQ6IHRbJ25hbWUnXSkKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIHRhc2tfY29sb3IodGFza19vYmplY3QsIHNob3dfZ3JlZW49RmFsc2UpOgorICAgICIiIiBSZXR1cm4gY3NzIGNsYXNzIGRlcGVuZGluZyBvbiBUYXNrIGV4ZWN1dGlvbiBzdGF0dXMgYW5kIGV4ZWN1dGlvbiBvdXRjb21lLgorICAgICAgICBCeSBkZWZhdWx0LCBncmVlbiBpcyBub3QgcmV0dXJuZWQgZm9yIGV4ZWN1dGVkIGFuZCBzdWNjZXNzZnVsIHRhc2tzOworICAgICAgICBzaG93X2dyZWVuIGFyZ3VtZW50IHNob3VsZCBiZSBUcnVlIHRvIGdldCBncmVlbiBjb2xvci4KKyAgICAiIiIKKyAgICBpZiBub3QgdGFza19vYmplY3QudGFza19leGVjdXRlZDoKKyAgICAgICAgcmV0dXJuICdjbGFzcz1tdXRlZCcKKyAgICBlbGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gdGFza19vYmplY3QuT1VUQ09NRV9GQUlMRUQ6CisgICAgICAgIHJldHVybiAnY2xhc3M9ZXJyb3InCisgICAgZWxpZiB0YXNrX29iamVjdC5vdXRjb21lID09IHRhc2tfb2JqZWN0Lk9VVENPTUVfU1VDQ0VTUyBhbmQgc2hvd19ncmVlbjoKKyAgICAgICAgcmV0dXJuICdjbGFzcz1ncmVlbicKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJycKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcmVkX2ljb24ob3B0aW9ucywgZmlsdGVyKToKKyAgICAiIiJSZXR1cm5zIGJ0bi1wcmltYXJ5IGlmIHRoZSBmaWx0ZXIgbWF0Y2hlcyBvbmUgb2YgdGhlIGZpbHRlciBvcHRpb25zCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICJidG4tcHJpbWFyeSIKKyAgICAgICAgaWYgKCdkYXRlcmFuZ2UnID09IG9wdGlvblsxXSkgYW5kIGZpbHRlci5zdGFydHN3aXRoKG9wdGlvbls0XSk6CisgICAgICAgICAgICByZXR1cm4gImJ0bi1wcmltYXJ5IgorICAgIHJldHVybiAiIgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfdG9vbHRpcChvcHRpb25zLCBmaWx0ZXIpOgorICAgICIiIlJldHVybnMgdG9vbHRpcCBmb3IgdGhlIGZpbHRlciBpY29uIGlmIHRoZSBmaWx0ZXIgbWF0Y2hlcyBvbmUgb2YgdGhlIGZpbHRlciBvcHRpb25zCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICJTaG93aW5nIG9ubHkgJXMiJW9wdGlvblswXQorICAgICAgICBpZiAoJ2RhdGVyYW5nZScgPT0gb3B0aW9uWzFdKSBhbmQgZmlsdGVyLnN0YXJ0c3dpdGgob3B0aW9uWzRdKToKKyAgICAgICAgICAgIHJldHVybiAiU2hvd2luZyBvbmx5ICVzIiVvcHRpb25bMF0KKyAgICByZXR1cm4gIiIKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZvcm1hdF9ub25lX2FuZF96ZXJvKHZhbHVlKToKKyAgICAiIiJSZXR1cm4gZW1wdHkgc3RyaW5nIGlmIHRoZSB2YWx1ZSBpcyBOb25lLCB6ZXJvIG9yIE5vdCBBcHBsaWNhYmxlCisgICAgIiIiCisgICAgcmV0dXJuICIiIGlmIChub3QgdmFsdWUpIG9yICh2YWx1ZSA9PSAwKSBvciAodmFsdWUgPT0gIjAiKSBvciAodmFsdWUgPT0gJ05vdCBBcHBsaWNhYmxlJykgZWxzZSB2YWx1ZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQodmFsdWUpOgorICAgICIiIgorICAgIElmIHRoZSB2YWx1ZSBpcyAtMSByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiBPdGhlcndpc2UsCisgICAgY2hhbmdlIG91dHB1dCBmcm9tIGZpbGVmb3JtYXRzaXplIHRvIHN1cHByZXNzIHRyYWlsaW5nICcuMCcKKyAgICBhbmQgY2hhbmdlICdieXRlcycgdG8gJ0InLgorICAgICIiIgorICAgIGlmIHZhbHVlID09IC0xOgorICAgICAgICByZXR1cm4gJycKKworICAgIHJldHVybiBmaWxlc2l6ZWZvcm1hdCh2YWx1ZSkucmVwbGFjZSgiYnl0ZXMiLCAiQiIpCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmaWx0ZXJlZF9wYWNrYWdlc3BlYyh2YWx1ZSk6CisgICAgIiIiU3RyaXAgb2ZmIGVtcHR5IHZlcnNpb24gYW5kIHJldmlzaW9uIiIiCisgICAgcmV0dXJuIHJlLnN1YihyJygtLSQpJywgJycsIHZhbHVlKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgY2hlY2tfZmlsdGVyX3N0YXR1cyhvcHRpb25zLCBmaWx0ZXIpOgorICAgICIiIkNoZWNrIGlmIHRoZSBhY3RpdmUgZmlsdGVyIGlzIGFtb25nIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgYW5kIHJldHVybiAnY2hlY2tlZCcKKyAgICAgICBpZiBmaWx0ZXIgaXMgbm90IGFjdGl2ZS4KKyAgICAgICBVc2VkIGluIEZpbHRlckRpYWxvZyB0byBzZWxlY3QgdGhlIGZpcnN0IHJhZGlvIGJ1dHRvbiBpZiB0aGUgZmlsdGVyIGlzIG5vdCBhY3RpdmUuCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgcmV0dXJuICJjaGVja2VkIgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgdmFyaWFibGVfcGFyZW50X25hbWUodmFsdWUpOgorICAgICIiIiBmaWx0ZXIgZXh0ZW5kZWQgdmFyaWFibGUgbmFtZXMgdG8gdGhlIHBhcmVudCBuYW1lCisgICAgIiIiCisgICAgdmFsdWU9cmUuc3ViKCdfXCQuKicsICcnLCB2YWx1ZSkKKyAgICByZXR1cm4gcmUuc3ViKCdfW2Etel0uKicsICcnLCB2YWx1ZSkKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcl9zZXRpbl9maWxlcyhmaWxlX2xpc3QsIG1hdGNoc3RyKToKKyAgICAiIiJGaWx0ZXIvc2VhcmNoIHRoZSAnc2V0IGluJyBmaWxlIGxpc3RzLiIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgc2VhcmNoLCBmaWx0ZXIgPSBtYXRjaHN0ci5zcGxpdCgnOicpCisgICAgZm9yIHBhdHRlcm4gaW4gKHNlYXJjaCwgZmlsdGVyKToKKyAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgIGZvciBmb2JqIGluIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICBmbmFtZSA9IGZvYmouZmlsZV9uYW1lCisgICAgICAgICAgICAgICAgaWYgZm5hbWUgbm90IGluIHJlc3VsdCBhbmQgcmUuc2VhcmNoKHBhdHRlcm4sIGZuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmbmFtZSkKKworICAgICMgbm8gZmlsdGVyLCBzaG93IGxhc3QgZmlsZSAoaWYgYW55KQorICAgIGxhc3QgPSBsaXN0KGZpbGVfbGlzdClbLTFdLmZpbGVfbmFtZQorICAgIGlmIG5vdCBmaWx0ZXIgYW5kIGxhc3Qgbm90IGluIHJlc3VsdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChsYXN0KQorCisgICAgcmV0dXJuIHJlc3VsdAorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgc3RyaW5nX3NsaWNlKHN0cnZhcixzbGljZXZhcik6CisgICAgIiIiIHNsaWNlIGEgc3RyaW5nIHdpdGggfHN0cmluZ19zbGljZTonW2ZpcnN0XTpbbGFzdF0nCisgICAgIiIiCisgICAgZmlyc3QsbGFzdD0gc2xpY2V2YXIucGFydGl0aW9uKCc6JylbOjoyXQorICAgIGlmIGZpcnN0PT0nJzoKKyAgICAgICAgcmV0dXJuIHN0cnZhcls6aW50KGxhc3QpXQorICAgIGVsaWYgbGFzdD09Jyc6CisgICAgICAgIHJldHVybiBzdHJ2YXJbaW50KGZpcnN0KTpdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHN0cnZhcltpbnQoZmlyc3QpOmludChsYXN0KV0KKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIHN0cmluZ19yZW1vdmVfcmVnZXgodmFsdWUsZXgpOgorICAgICIiIiByZW1vdmUgc3ViLXN0cmluZyBvZiBzdHJpbmcgdGhhdCBtYXRjaGVzIHJlZ2V4CisgICAgIiIiCisgICAgcmV0dXJuIHJlLnN1YihleCwgJycsIHZhbHVlKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfaW5zdGFsbGVkc2l6ZShzaXplLCBpbnN0YWxsZWRfc2l6ZSk6CisgICAgIiIiSWYgcGFja2FnZS5pbnN0YWxsZWRfc2l6ZSBub3QgbnVsbCBhbmQgbm90IGVtcHR5IHJldHVybiBpdCwKKyAgICAgICBlbHNlIHJldHVybiBwYWNrYWdlLnNpemUKKyAgICAiIiIKKyAgICByZXR1cm4gc2l6ZSBpZiAoaW5zdGFsbGVkX3NpemUgPT0gMCkgb3IgKGluc3RhbGxlZF9zaXplID09ICIiKSBvciAoaW5zdGFsbGVkX3NpemUgPT0gTm9uZSkgZWxzZSBpbnN0YWxsZWRfc2l6ZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfcGFja2FnZXZlcnNpb24odmVyc2lvbiwgcmV2aXNpb24pOgorICAgICIiIiBFbWl0ICJ2ZXJzaW9uLXJldmlzaW9uIiBpZiB2ZXJzaW9uIGFuZCByZXZpc2lvbiBhcmUgbm90IG51bGwKKyAgICAgICAgZWxzZSAidmVyc2lvbiIgaWYgdmVyc2lvbiBpcyBub3QgbnVsbAorICAgICAgICBlbHNlICIiCisgICAgIiIiCisgICAgcmV0dXJuICIiIGlmIChub3QgdmVyc2lvbiBvciB2ZXJzaW9uID09ICIiKSBlbHNlIHZlcnNpb24gaWYgKG5vdCByZXZpc2lvbiBvciByZXZpc2lvbiA9PSAiIikgZWxzZSB2ZXJzaW9uICsgIi0iICsgcmV2aXNpb24KKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcl9zaXplb3ZlcnRvdGFsKHBhY2thZ2Vfb2JqZWN0LCB0b3RhbF9zaXplKToKKyAgICAiIiIgUmV0dXJuIHRoZSAlIHNpemUgb2YgdGhlIHBhY2thZ2Ugb3ZlciB0aGUgdG90YWwgc2l6ZSBhcmd1bWVudAorICAgICAgICBmb3JtYXR0ZWQgbmljZWx5LgorICAgICIiIgorICAgIHNpemUgPSBwYWNrYWdlX29iamVjdC5pbnN0YWxsZWRfc2l6ZQorICAgIGlmIHNpemUgPT0gTm9uZSBvciBzaXplID09ICcnOgorICAgICAgICBzaXplID0gcGFja2FnZV9vYmplY3Quc2l6ZQorCisgICAgcmV0dXJuICd7Oi4xJX0nLmZvcm1hdChmbG9hdChzaXplKS9mbG9hdCh0b3RhbF9zaXplKSkKKworZnJvbSBkamFuZ28udXRpbHMuc2FmZXN0cmluZyBpbXBvcnQgbWFya19zYWZlCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzKHNpemUpOgorICAgIGlmIHNpemUgPT0gLTE6CisgICAgICAgIHJldHVybiBtYXJrX3NhZmUoJ2NsYXNzPSJtdXRlZCInKQorICAgIHJldHVybiAnJworCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwKG5hbWUpOgorICAgIHIgPSAgbmFtZSArICcmbmJzcDsnCisgICAgciArPSAnPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIicKKyAgICByICs9ICcgdGl0bGUgPSAiJyArIG5hbWUgKyAnIGhhcyBub3QgYmVlbiBidWlsdCI+JworICAgIHIgKz0gJzwvaT4nCisgICAgcmV0dXJuIG1hcmtfc2FmZShyKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZ2V0X2RpY3RfdmFsdWUoZGljdGlvbmFyeSwga2V5KToKKyAgICAiIiIgcmV0dXJuIHRoZSB2YWx1ZSBvZiBhIGRpY3Rpb25hcnkga2V5CisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZGljdGlvbmFyeVtrZXldCisgICAgZXhjZXB0IChLZXlFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgIHJldHVybiAnJworCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X2J1aWxkX2RhdGUoY29tcGxldGVkX29uKToKKyAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgIGRlbHRhID0gbm93IC0gY29tcGxldGVkX29uCisKKyAgICBpZiBkZWx0YS5kYXlzID49IDE6CisgICAgICAgIHJldHVybiBUcnVlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBpc19zaGFpZCh0ZXh0KToKKyAgICAiIiIgcmV0dXJuIFRydWUgaWYgdGV4dCBsZW5ndGggaXMgNDAgY2hhcmFjdGVycyBhbmQgYWxsIGhleC1kaWdpdHMKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGludCh0ZXh0LCAxNikKKyAgICAgICAgaWYgbGVuKHRleHQpID09IDQwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgY3V0X3BhdGhfcHJlZml4KGZ1bGxwYXRoLCBwcmVmaXhlcyk6CisgICAgIiIiQ3V0IHBhdGggcHJlZml4IGZyb20gZnVsbHBhdGguIiIiCisgICAgZm9yIHByZWZpeCBpbiBwcmVmaXhlczoKKyAgICAgICAgaWYgZnVsbHBhdGguc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgcmV0dXJuIHJlbHBhdGgoZnVsbHBhdGgsIHByZWZpeCkKKyAgICByZXR1cm4gZnVsbHBhdGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3Rlc3RzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxNTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMzc5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIlRlc3QgY2FzZXMgZm9yIFRvYXN0ZXIgR1VJIGFuZCBSZVNULiIiIgorCitmcm9tIGRqYW5nby50ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBSZWxlYXNlLCBCaXRiYWtlVmVyc2lvbiwgUHJvamVjdFRhcmdldAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSwgTGF5ZXJTb3VyY2UsIExheWVyLCBCdWlsZAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllcl9WZXJzaW9uLCBSZWNpcGUsIE1hY2hpbmUsIFByb2plY3RMYXllcgoraW1wb3J0IGpzb24KK2Zyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCisKK1BST0pFQ1RfTkFNRSA9ICJ0ZXN0IHByb2plY3QiCisKK2NsYXNzIFZpZXdUZXN0cyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdG8gdmVyaWZ5IHZpZXcgQVBJcy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgYmJ2ID0gQml0YmFrZVZlcnNpb24ub2JqZWN0cy5jcmVhdGUobmFtZT0idGVzdCBiYnYiLCBnaXR1cmw9Ii90bXAvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoPSJtYXN0ZXIiLCBkaXJwYXRoPSIiKQorICAgICAgICByZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJ0ZXN0IHJlbGVhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249YmJ2KQorICAgICAgICBzZWxmLnByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZT1QUk9KRUNUX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlPXJlbGVhc2UpCisgICAgICAgIGxheWVyc3JjID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5jcmVhdGUoc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEKQorICAgICAgICBzZWxmLnByaW9yaXR5ID0gUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkub2JqZWN0cy5jcmVhdGUocmVsZWFzZT1yZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPWxheWVyc3JjKQorICAgICAgICBsYXllciA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9ImJhc2UtbGF5ZXIiLCBsYXllcl9zb3VyY2U9bGF5ZXJzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNzX3VybD0iL3RtcC8iKQorCisgICAgICAgIGx2ZXIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPWxheWVyLCBwcm9qZWN0PXNlbGYucHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPWxheWVyc3JjLCBjb21taXQ9Im1hc3RlciIpCisKKyAgICAgICAgUmVjaXBlLm9iamVjdHMuY3JlYXRlKGxheWVyX3NvdXJjZT1sYXllcnNyYywgbmFtZT0iYmFzZS1yZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0iMS4yIiwgc3VtbWFyeT0ib25lIHJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0icmVjaXBlIiwgbGF5ZXJfdmVyc2lvbj1sdmVyKQorCisgICAgICAgIE1hY2hpbmUub2JqZWN0cy5jcmVhdGUobGF5ZXJfdmVyc2lvbj1sdmVyLCBuYW1lPSJ3aXNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0id2lza2luZyBtYWNoaW5lIikKKworICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QsIGxheWVyY29tbWl0PWx2ZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGx2ZXIgaW4gc2VsZi5wcm9qZWN0LmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpKQorCisgICAgZGVmIHRlc3RfZ2V0X2Jhc2VfY2FsbF9yZXR1cm5zX2h0bWwoc2VsZik6CisgICAgICAgICIiIkJhc2ljIHRlc3QgZm9yIGFsbC1wcm9qZWN0cyB2aWV3IiIiCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBmb2xsb3c9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2VbJ0NvbnRlbnQtVHlwZSddLnN0YXJ0c3dpdGgoJ3RleHQvaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFRlbXBsYXRlVXNlZChyZXNwb25zZSwgInByb2plY3RzLmh0bWwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUFJPSkVDVF9OQU1FIGluIHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9nZXRfanNvbl9jYWxsX3JldHVybnNfanNvbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBmb3IgYWxsIHByb2plY3RzIG91dHB1dCBpbiBqc29uIGZvcm1hdCIiIgorICAgICAgICB1cmwgPSByZXZlcnNlKCdhbGwtcHJvamVjdHMnKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldCh1cmwsIHsiZm9ybWF0IjogImpzb24ifSwgZm9sbG93PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlWydDb250ZW50LVR5cGUnXS5zdGFydHN3aXRoKCdhcHBsaWNhdGlvbi9qc29uJykpCisKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoImVycm9yIiBpbiBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicm93cyIgaW4gZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoUFJPSkVDVF9OQU1FIGluIFt4WyJuYW1lIl0gZm9yIHggaW4gZGF0YVsicm93cyJdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJpZCIgaW4gZGF0YVsicm93cyJdWzBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGRhdGFbInJvd3MiXVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydiaXRiYWtlX3ZlcnNpb25faWQnLCAnY3JlYXRlZCcsICdpZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19kZWZhdWx0JywgJ2xheWVyc1R5cGVBaGVhZFVybCcsICduYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bV9idWlsZHMnLCAncHJvamVjdEJ1aWxkc1VybCcsICdwcm9qZWN0UGFnZVVybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGVzVHlwZUFoZWFkVXJsJywgJ3JlbGVhc2VfaWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nLCAndXBkYXRlZCcsICd1c2VyX2lkJ10pCisKKyAgICBkZWYgdGVzdF90eXBlYWhlYWRzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHR5cGVhaGVhZCBSZVNUIEFQSSIiIgorICAgICAgICBsYXllcnNfdXJsID0gcmV2ZXJzZSgneGhyX2xheWVyc3R5cGVhaGVhZCcsIGFyZ3M9KHNlbGYucHJvamVjdC5pZCwpKQorICAgICAgICBwcmpfdXJsID0gcmV2ZXJzZSgneGhyX3Byb2plY3RzdHlwZWFoZWFkJykKKworICAgICAgICB1cmxzID0gW2xheWVyc191cmwsCisgICAgICAgICAgICAgICAgcHJqX3VybCwKKyAgICAgICAgICAgICAgICByZXZlcnNlKCd4aHJfcmVjaXBlc3R5cGVhaGVhZCcsIGFyZ3M9KHNlbGYucHJvamVjdC5pZCwpKSwKKyAgICAgICAgICAgICAgICByZXZlcnNlKCd4aHJfbWFjaGluZXN0eXBlYWhlYWQnLCBhcmdzPShzZWxmLnByb2plY3QuaWQsKSksCisgICAgICAgICAgICAgICBdCisKKyAgICAgICAgZGVmIGJhc2ljX3JlcG9uc2VfY2hlY2socmVzcG9uc2UsIHVybCk6CisgICAgICAgICAgICAiIiJDaGVjayBkYXRhIHN0cnVjdHVyZSBvZiBodHRwIHJlc3BvbnNlLiIiIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlWydDb250ZW50LVR5cGUnXS5zdGFydHN3aXRoKCdhcHBsaWNhdGlvbi9qc29uJykpCisKKyAgICAgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZXJyb3IiIGluIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoInJlc3VsdHMiIGluIGRhdGEpCisKKyAgICAgICAgICAgICMgV2UgZ290IGEgcmVzdWx0IHNvIG5vdyBjaGVjayB0aGUgZmllbGRzCisgICAgICAgICAgICBpZiBsZW4oZGF0YVsncmVzdWx0cyddKSA+IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGF0YVsncmVzdWx0cyddWzBdCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlc3VsdFsnbmFtZSddKSA+IDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJkZXRhaWwiIGluIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WydpZCddID4gMCkKKworICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjaGVjayBmb3IgdGhlIGxheWVycyB0eXBlYWhlYWQncyBleHRyYSBmaWVsZHMKKyAgICAgICAgICAgICAgICBpZiB1cmwgPT0gbGF5ZXJzX3VybDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ2xheWVyZGV0YWlsdXJsJ10pID4gMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ3Zjc191cmwnXSkgPiAwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlc3VsdFsndmNzX3JlZmVyZW5jZSddKSA+IDApCisgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGNoZWNrIGZvciBwcm9qZWN0IHR5cGVhaGVhZCBleHRyYSBmaWVsZHMKKyAgICAgICAgICAgICAgICBlbGlmIHVybCA9PSBwcmpfdXJsOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlc3VsdFsncHJvamVjdFBhZ2VVcmwnXSkgPiAwKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaW1wb3J0IHN0cmluZworCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHJlc3VsdHMgPSBGYWxzZQorCisgICAgICAgICAgICBmb3IgdHlwZWluZyBpbiBsaXN0KHN0cmluZy5hc2NpaV9sZXR0ZXJzKToKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldCh1cmwsIHsnc2VhcmNoJzogdHlwZWluZ30pCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGJhc2ljX3JlcG9uc2VfY2hlY2socmVzcG9uc2UsIHVybCkKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIEFmdGVyICJ0eXBlaW5nIiB0aGUgYWxwYWJldCB3ZSBzaG91bGQgaGF2ZSByZXN1bHQgdHJ1ZQorICAgICAgICAgICAgIyBmcm9tIGVhY2ggb2YgdGhlIHVybHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHRzKQorCisgICAgZGVmIHRlc3RfeGhyX2ltcG9ydF9sYXllcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB4aHJfaW1wb3J0bGF5ZXIgQVBJIiIiCisgICAgICAgICNUZXN0IGZvciBpbXBvcnRpbmcgYW4gYWxyZWFkeSBleGlzdGluZyBsYXllcgorICAgICAgICBhcmdzID0geyd2Y3NfdXJsJyA6ICJnaXQ6Ly9naXQuZXhhbXBsZS5jb20vdGVzdCIsCisgICAgICAgICAgICAgICAgJ25hbWUnIDogImJhc2UtbGF5ZXIiLAorICAgICAgICAgICAgICAgICdnaXRfcmVmJzogImMxMmI5NTk2YWZkMjM2MTE2YjI1Y2UyNmRiZTBkNzkzZGU5ZGM3Y2UiLAorICAgICAgICAgICAgICAgICdwcm9qZWN0X2lkJzogMSwgJ2Rpcl9wYXRoJyA6ICIvcGF0aC9pbi9yZXBvc2l0b3J5In0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YVsiZXJyb3IiXSwgIm9rIikKKworICAgICAgICAjVGVzdCB0byB2ZXJpZnkgaW1wb3J0IG9mIGEgbGF5ZXIgc3VjY2Vzc2Z1bAorICAgICAgICBhcmdzWyduYW1lJ10gPSAibWV0YS1vZSIKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVsiZXJyb3IiXSwgIm9rIikKKworICAgICAgICAjVGVzdCBmb3IgaHRtbCB0YWcgaW4gdGhlIGRhdGEKKyAgICAgICAgYXJnc1snPCddID0gInRlc3RpbmcgaHRtbCB0YWciCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorCisgICAgICAgICNFbXB0eSBkYXRhIHBhc3NlZAorICAgICAgICBhcmdzID0ge30KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5wb3N0KHJldmVyc2UoJ3hocl9pbXBvcnRsYXllcicpLCBhcmdzKQorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisKK2NsYXNzIExhbmRpbmdQYWdlVGVzdHMoVGVzdENhc2UpOgorICAgICIiIiBUZXN0cyBmb3IgcmVkaXJlY3RzIG9uIHRoZSBsYW5kaW5nIHBhZ2UgIiIiCisgICAgIyBkaXNhYmxlIGJvZ3VzIHB5bGludCBtZXNzYWdlIGVycm9yOgorICAgICMgIkluc3RhbmNlIG9mICdXU0dJUmVxdWVzdCcgaGFzIG5vICd1cmwnIG1lbWJlciAobm8tbWVtYmVyKSIKKyAgICAjIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xhbmRzY2FwZWlvL3B5bGludC1kamFuZ28vaXNzdWVzLzQyKQorICAgICMgcHlsaW50OiBkaXNhYmxlPUUxMTAzCisKKyAgICBMQU5ESU5HX1BBR0VfVElUTEUgPSAnVGhpcyBpcyBUb2FzdGVyJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiIgQWRkIGRlZmF1bHQgcHJvamVjdCBtYW51YWxseSAiIiIKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCdmb28nLCBOb25lKQorICAgICAgICBzZWxmLnByb2plY3QuaXNfZGVmYXVsdCA9IFRydWUKKyAgICAgICAgc2VsZi5wcm9qZWN0LnNhdmUoKQorCisgICAgZGVmIHRlc3Rfb25seV9kZWZhdWx0X3Byb2plY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBObyBwcm9qZWN0cyBleGNlcHQgZGVmYXVsdAorICAgICAgICA9PiBnZXQgdGhlIGxhbmRpbmcgcGFnZQorICAgICAgICAiIiIKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5MQU5ESU5HX1BBR0VfVElUTEUgaW4gcmVzcG9uc2UuY29udGVudCkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcHJvamVjdF9oYXNfYnVpbGQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBEZWZhdWx0IHByb2plY3QgaGFzIGEgYnVpbGQsIG5vIG90aGVyIHByb2plY3RzCisgICAgICAgID0+IGdldCB0aGUgYnVpbGRzIHBhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD1zZWxmLnByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAzMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlIHNob3VsZCBiZSBhIHJlZGlyZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvYnVpbGRzJyBpbiByZXNwb25zZS51cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHJlZGlyZWN0IHRvIGJ1aWxkcycpCisKKyAgICBkZWYgdGVzdF91c2VyX3Byb2plY3RfZXhpc3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVXNlciBoYXMgYWRkZWQgYSBwcm9qZWN0ICh3aXRob3V0IGJ1aWxkcykKKyAgICAgICAgPT4gZ2V0IHRoZSBwcm9qZWN0cyBwYWdlCisgICAgICAgICIiIgorICAgICAgICB1c2VyX3Byb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QoJ2ZvbycsIE5vbmUpCisgICAgICAgIHVzZXJfcHJvamVjdC5zYXZlKCkKKworICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdsYW5kaW5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDMwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2Ugc2hvdWxkIGJlIGEgcmVkaXJlY3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy9wcm9qZWN0cycgaW4gcmVzcG9uc2UudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCByZWRpcmVjdCB0byBwcm9qZWN0cycpCisKKyAgICBkZWYgdGVzdF91c2VyX3Byb2plY3RfaGFzX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVXNlciBoYXMgYWRkZWQgYSBwcm9qZWN0ICh3aXRoIGJ1aWxkcykKKyAgICAgICAgPT4gZ2V0IHRoZSBidWlsZHMgcGFnZQorICAgICAgICAiIiIKKyAgICAgICAgdXNlcl9wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCdmb28nLCBOb25lKQorICAgICAgICB1c2VyX3Byb2plY3Quc2F2ZSgpCisKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXVzZXJfcHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkX29uPW5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249bm93KQorICAgICAgICBidWlsZC5zYXZlKCkKKworICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdsYW5kaW5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDMwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2Ugc2hvdWxkIGJlIGEgcmVkaXJlY3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy9idWlsZHMnIGluIHJlc3BvbnNlLnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgcmVkaXJlY3QgdG8gYnVpbGRzJykKKworY2xhc3MgUHJvamVjdHNQYWdlVGVzdHMoVGVzdENhc2UpOgorICAgICIiIiBUZXN0cyBmb3IgcHJvamVjdHMgcGFnZSAiIiIKKworICAgIFBST0pFQ1RfTkFNRSA9ICdjbGkgYnVpbGRzJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiIgQWRkIGRlZmF1bHQgcHJvamVjdCBtYW51YWxseSAiIiIKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdChzZWxmLlBST0pFQ1RfTkFNRSwgTm9uZSkKKyAgICAgICAgc2VsZi5kZWZhdWx0X3Byb2plY3QgPSBwcm9qZWN0CisgICAgICAgIHNlbGYuZGVmYXVsdF9wcm9qZWN0LmlzX2RlZmF1bHQgPSBUcnVlCisgICAgICAgIHNlbGYuZGVmYXVsdF9wcm9qZWN0LnNhdmUoKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9wcm9qZWN0X2hpZGRlbihzZWxmKToKKyAgICAgICAgIiIiIFRoZSBkZWZhdWx0IHByb2plY3Qgc2hvdWxkIGJlIGhpZGRlbiBpZiBpdCBoYXMgbm8gYnVpbGRzICIiIgorICAgICAgICBwYXJhbXMgPSB7ImNvdW50IjogMTAsICJvcmRlcmJ5IjogInVwZGF0ZWQ6LSIsICJwYWdlIjogMX0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnYWxsLXByb2plY3RzJyksIHBhcmFtcykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90KCd0ciBjbGFzcz0iZGF0YSInIGluIHJlc3BvbnNlLmNvbnRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBubyBwcm9qZWN0IHJvd3MgaW4gdGhlIHBhZ2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90KHNlbGYuUFJPSkVDVF9OQU1FIGluIHJlc3BvbnNlLmNvbnRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQgcHJvamVjdCAiY2xpIGJ1aWxkcyIgc2hvdWxkIG5vdCBiZSBpbiBwYWdlJykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcHJvamVjdF9oYXNfYnVpbGQoc2VsZik6CisgICAgICAgICIiIiBUaGUgZGVmYXVsdCBwcm9qZWN0IHNob3VsZCBiZSBzaG93biBpZiBpdCBoYXMgYnVpbGRzICIiIgorICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5kZWZhdWx0X3Byb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgcGFyYW1zID0geyJjb3VudCI6IDEwLCAib3JkZXJieSI6ICJ1cGRhdGVkOi0iLCAicGFnZSI6IDF9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBwYXJhbXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0ciBjbGFzcz0iZGF0YSInIGluIHJlc3BvbnNlLmNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIGJlIGEgcHJvamVjdCByb3cgaW4gdGhlIHBhZ2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5QUk9KRUNUX05BTUUgaW4gcmVzcG9uc2UuY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0IHByb2plY3QgImNsaSBidWlsZHMiIHNob3VsZCBiZSBpbiBwYWdlJykKKworY2xhc3MgUHJvamVjdEJ1aWxkc0Rpc3BsYXlUZXN0KFRlc3RDYXNlKToKKyAgICAiIiIgVGVzdCBkYXRhIGF0IC9wcm9qZWN0L1gvYnVpbGRzIGlzIGRpc3BsYXllZCBjb3JyZWN0bHkgIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKG5hbWU9ImJidjEiLCBnaXR1cmw9Ii90bXAvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoPSJtYXN0ZXIiLCBkaXJwYXRoPSIiKQorICAgICAgICByZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJyZWxlYXNlMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyc2lvbj1iYnYpCisgICAgICAgIHNlbGYucHJvamVjdDEgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZT1QUk9KRUNUX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZT1yZWxlYXNlKQorICAgICAgICBzZWxmLnByb2plY3QyID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWU9UFJPSkVDVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2U9cmVsZWFzZSkKKworICAgICAgICAjIHBhcmFtZXRlcnMgZm9yIGJ1aWxkcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgcHJvamVjdHMKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKworICAgICAgICBzZWxmLnByb2plY3QxX2J1aWxkX3N1Y2Nlc3MgPSB7CisgICAgICAgICAgICAicHJvamVjdCI6IHNlbGYucHJvamVjdDEsCisgICAgICAgICAgICAic3RhcnRlZF9vbiI6IG5vdywKKyAgICAgICAgICAgICJjb21wbGV0ZWRfb24iOiBub3csCisgICAgICAgICAgICAib3V0Y29tZSI6IEJ1aWxkLlNVQ0NFRURFRAorICAgICAgICB9CisKKyAgICAgICAgc2VsZi5wcm9qZWN0MV9idWlsZF9pbl9wcm9ncmVzcyA9IHsKKyAgICAgICAgICAgICJwcm9qZWN0Ijogc2VsZi5wcm9qZWN0MSwKKyAgICAgICAgICAgICJzdGFydGVkX29uIjogbm93LAorICAgICAgICAgICAgImNvbXBsZXRlZF9vbiI6IG5vdywKKyAgICAgICAgICAgICJvdXRjb21lIjogQnVpbGQuSU5fUFJPR1JFU1MKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYucHJvamVjdDJfYnVpbGRfc3VjY2VzcyA9IHsKKyAgICAgICAgICAgICJwcm9qZWN0Ijogc2VsZi5wcm9qZWN0MiwKKyAgICAgICAgICAgICJzdGFydGVkX29uIjogbm93LAorICAgICAgICAgICAgImNvbXBsZXRlZF9vbiI6IG5vdywKKyAgICAgICAgICAgICJvdXRjb21lIjogQnVpbGQuU1VDQ0VFREVECisgICAgICAgIH0KKworICAgICAgICBzZWxmLnByb2plY3QyX2J1aWxkX2luX3Byb2dyZXNzID0geworICAgICAgICAgICAgInByb2plY3QiOiBzZWxmLnByb2plY3QyLAorICAgICAgICAgICAgInN0YXJ0ZWRfb24iOiBub3csCisgICAgICAgICAgICAiY29tcGxldGVkX29uIjogbm93LAorICAgICAgICAgICAgIm91dGNvbWUiOiBCdWlsZC5JTl9QUk9HUkVTUworICAgICAgICB9CisKKyAgICBkZWYgX2dldF9yb3dzX2Zvcl9wcm9qZWN0KHNlbGYsIHByb2plY3RfaWQpOgorICAgICAgICB1cmwgPSByZXZlcnNlKCJwcm9qZWN0YnVpbGRzIiwgYXJncz0ocHJvamVjdF9pZCwpKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldCh1cmwsIGZvbGxvdz1UcnVlKQorICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChyZXNwb25zZS5jb250ZW50KQorICAgICAgICByZXR1cm4gc291cC5zZWxlY3QoJ3RyW2NsYXNzPSJkYXRhIl0nKQorCisgICAgZGVmIHRlc3Rfc2hvd19idWlsZHNfZm9yX3Byb2plY3Qoc2VsZik6CisgICAgICAgICIiIiBCdWlsZHMgZm9yIGEgcHJvamVjdCBzaG91bGQgYmUgZGlzcGxheWVkICIiIgorICAgICAgICBidWlsZDFhID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoKipzZWxmLnByb2plY3QxX2J1aWxkX3N1Y2Nlc3MpCisgICAgICAgIGJ1aWxkMWIgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZSgqKnNlbGYucHJvamVjdDFfYnVpbGRfc3VjY2VzcykKKyAgICAgICAgYnVpbGRfcm93cyA9IHNlbGYuX2dldF9yb3dzX2Zvcl9wcm9qZWN0KHNlbGYucHJvamVjdDEuaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1aWxkX3Jvd3MpLCAyKQorCisgICAgZGVmIHRlc3Rfc2hvd19idWlsZHNfZm9yX3Byb2plY3Rfb25seShzZWxmKToKKyAgICAgICAgIiIiIEJ1aWxkcyBmb3Igb3RoZXIgcHJvamVjdHMgc2hvdWxkIGJlIGV4Y2x1ZGVkICIiIgorICAgICAgICBidWlsZDFhID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoKipzZWxmLnByb2plY3QxX2J1aWxkX3N1Y2Nlc3MpCisgICAgICAgIGJ1aWxkMWIgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZSgqKnNlbGYucHJvamVjdDFfYnVpbGRfc3VjY2VzcykKKyAgICAgICAgYnVpbGQxYyA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKCoqc2VsZi5wcm9qZWN0MV9idWlsZF9zdWNjZXNzKQorCisgICAgICAgICMgc2hvdWxkbid0IHNlZSB0aGVzZSB0d28KKyAgICAgICAgYnVpbGQyYSA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKCoqc2VsZi5wcm9qZWN0Ml9idWlsZF9zdWNjZXNzKQorICAgICAgICBidWlsZDJiID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoKipzZWxmLnByb2plY3QyX2J1aWxkX2luX3Byb2dyZXNzKQorCisgICAgICAgIGJ1aWxkX3Jvd3MgPSBzZWxmLl9nZXRfcm93c19mb3JfcHJvamVjdChzZWxmLnByb2plY3QxLmlkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWlsZF9yb3dzKSwgMykKKworICAgIGRlZiB0ZXN0X3Nob3dfYnVpbGRzX2V4Y2x1ZGVfaW5fcHJvZ3Jlc3Moc2VsZik6CisgICAgICAgICIiIiAiaW4gcHJvZ3Jlc3MiIGJ1aWxkcyBzaG91bGQgbm90IGJlIHNob3duICIiIgorICAgICAgICBidWlsZDFhID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoKipzZWxmLnByb2plY3QxX2J1aWxkX3N1Y2Nlc3MpCisgICAgICAgIGJ1aWxkMWIgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZSgqKnNlbGYucHJvamVjdDFfYnVpbGRfc3VjY2VzcykKKworICAgICAgICAjIHNob3VsZG4ndCBzZWUgdGhpcyBvbmUKKyAgICAgICAgYnVpbGQxYyA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKCoqc2VsZi5wcm9qZWN0MV9idWlsZF9pbl9wcm9ncmVzcykKKworICAgICAgICAjIHNob3VsZG4ndCBzZWUgdGhlc2UgdHdvIGVpdGhlciwgYXMgdGhleSBiZWxvbmcgdG8gYSBkaWZmZXJlbnQgcHJvamVjdAorICAgICAgICBidWlsZDJhID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoKipzZWxmLnByb2plY3QyX2J1aWxkX3N1Y2Nlc3MpCisgICAgICAgIGJ1aWxkMmIgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZSgqKnNlbGYucHJvamVjdDJfYnVpbGRfaW5fcHJvZ3Jlc3MpCisKKyAgICAgICAgYnVpbGRfcm93cyA9IHNlbGYuX2dldF9yb3dzX2Zvcl9wcm9qZWN0KHNlbGYucHJvamVjdDEuaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1aWxkX3Jvd3MpLCAyKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3R5cGVhaGVhZHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YmVjNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5CkBAIC0wLDAgKzEsMTQ1IEBACisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIHRvYXN0ZXJndWkud2lkZ2V0cyBpbXBvcnQgVG9hc3RlclR5cGVBaGVhZAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0Citmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorCitjbGFzcyBMYXllcnNUeXBlQWhlYWQoVG9hc3RlclR5cGVBaGVhZCk6CisgICAgIiIiIFR5cGVhaGVhZCBmb3IgbGF5ZXJzIGF2YWlsYWJsZSBhbmQgbm90IGFkZGVkIGluIHRoZSBjdXJyZW50IHByb2plY3QncworICAgIGNvbmZpZ3VyYXRpb24gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgc3VwZXIoTGF5ZXJzVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpOgorICAgICAgICBsYXllcnMgPSBwcmouY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkKKyAgICAgICAgbGF5ZXJzID0gbGF5ZXJzLm9yZGVyX2J5KCdsYXllcl9fbmFtZScpCisKKyAgICAgICAgIyBVbmxpa2UgdGhlIG90aGVyIHR5cGVhaGVhZHMgd2UgYWxzbyBkb24ndCB3YW50IHRvIHNob3cgc3VnZ2VzdGlvbnMKKyAgICAgICAgIyBmb3IgbGF5ZXJzIGFscmVhZHkgaW4gdGhlIHByb2plY3QgdW5sZXNzIHJlcXVpcmVkIHN1Y2ggYXMgd2hlbiBhZGRpbmcKKyAgICAgICAgIyBsYXllcmRlcHMgdG8gYSBuZXcgbGF5ZXIuCisgICAgICAgIGlmICgiaW5jbHVkZV9hZGRlZCIgaW4gcmVxdWVzdC5HRVQgYW5kCisgICAgICAgICAgICAgICAgcmVxdWVzdC5HRVRbJ2luY2x1ZGVfYWRkZWQnXSAhPSAidHJ1ZSIpOgorICAgICAgICAgICAgbGF5ZXJzID0gbGF5ZXJzLmV4Y2x1ZGUocGtfX2luPXByai5wcm9qZWN0bGF5ZXJfZXF1aXZhbGVudF9zZXQpCisKKyAgICAgICAgcHJpbWFyeV9yZXN1bHRzID0gbGF5ZXJzLmZpbHRlcihsYXllcl9fbmFtZV9faXN0YXJ0c3dpdGg9c2VhcmNoX3Rlcm0pCisgICAgICAgIHNlY29uZGFyeV9yZXN1bHRzID0gbGF5ZXJzLmZpbHRlcihsYXllcl9fbmFtZV9faWNvbnRhaW5zPXNlYXJjaF90ZXJtKS5leGNsdWRlKHBrX19pbj1wcmltYXJ5X3Jlc3VsdHMpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZm9yIGxheWVyX3ZlcnNpb24gaW4gbGlzdChwcmltYXJ5X3Jlc3VsdHMpICsgbGlzdChzZWNvbmRhcnlfcmVzdWx0cyk6CisgICAgICAgICAgICB2Y3NfcmVmZXJlbmNlID0gbGF5ZXJfdmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZSgpCisKKyAgICAgICAgICAgIGRldGFpbCA9ICJbICVzIHwgJXMgXSIgJSAobGF5ZXJfdmVyc2lvbi5sYXllci52Y3NfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3NfcmVmZXJlbmNlKQorICAgICAgICAgICAgbmVlZGVkX2ZpZWxkcyA9IHsKKyAgICAgICAgICAgICAgICAnaWQnIDogbGF5ZXJfdmVyc2lvbi5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBsYXllcl92ZXJzaW9uLmxheWVyLm5hbWUsCisgICAgICAgICAgICAgICAgJ2xheWVyZGV0YWlsdXJsJyA6IGxheWVyX3ZlcnNpb24uZ2V0X2RldGFpbHNwYWdlX3VybChwcmoucGspLAorICAgICAgICAgICAgICAgICd2Y3NfdXJsJyA6IGxheWVyX3ZlcnNpb24ubGF5ZXIudmNzX3VybCwKKyAgICAgICAgICAgICAgICAndmNzX3JlZmVyZW5jZScgOiB2Y3NfcmVmZXJlbmNlLAorICAgICAgICAgICAgICAgICdkZXRhaWwnIDogZGV0YWlsLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChuZWVkZWRfZmllbGRzKQorCisgICAgICAgIHJldHVybiByZXN1bHRzCisKK2NsYXNzIE1hY2hpbmVzVHlwZUFoZWFkKFRvYXN0ZXJUeXBlQWhlYWQpOgorICAgICIiIiBUeXBlYWhlYWQgZm9yIGFsbCB0aGUgbWFjaGluZXMgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IHByb2plY3QncworICAgIGNvbmZpZ3VyYXRpb24gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihNYWNoaW5lc1R5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KToKKyAgICAgICAgbWFjaGluZXMgPSBwcmouZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcygpCisgICAgICAgIG1hY2hpbmVzID0gbWFjaGluZXMub3JkZXJfYnkoIm5hbWUiKQorCisgICAgICAgIHByaW1hcnlfcmVzdWx0cyA9IG1hY2hpbmVzLmZpbHRlcihuYW1lX19pc3RhcnRzd2l0aD1zZWFyY2hfdGVybSkKKyAgICAgICAgc2Vjb25kYXJ5X3Jlc3VsdHMgPSBtYWNoaW5lcy5maWx0ZXIobmFtZV9faWNvbnRhaW5zPXNlYXJjaF90ZXJtKS5leGNsdWRlKHBrX19pbj1wcmltYXJ5X3Jlc3VsdHMpCisgICAgICAgIHRlcnRpYXJ5X3Jlc3VsdHMgPSBtYWNoaW5lcy5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKS5leGNsdWRlKHBrX19pbj1zZWNvbmRhcnlfcmVzdWx0cykKKworICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBmb3IgbWFjaGluZSBpbiBsaXN0KHByaW1hcnlfcmVzdWx0cykgKyBsaXN0KHNlY29uZGFyeV9yZXN1bHRzKSArIGxpc3QodGVydGlhcnlfcmVzdWx0cyk6CisKKyAgICAgICAgICAgIGRldGFpbCA9ICJbICVzIF0iICUgKG1hY2hpbmUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lKQorICAgICAgICAgICAgbmVlZGVkX2ZpZWxkcyA9IHsKKyAgICAgICAgICAgICAgICAnaWQnIDogbWFjaGluZS5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBtYWNoaW5lLm5hbWUsCisgICAgICAgICAgICAgICAgJ2RldGFpbCcgOiBkZXRhaWwsCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5lZWRlZF9maWVsZHMpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworY2xhc3MgUmVjaXBlc1R5cGVBaGVhZChUb2FzdGVyVHlwZUFoZWFkKToKKyAgICAiIiIgVHlwZWFoZWFkIGZvciBhbGwgdGhlIHJlY2lwZXMgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IHByb2plY3QncworICAgIGNvbmZpZ3VyYXRpb24gIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihSZWNpcGVzVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpOgorICAgICAgICByZWNpcGVzID0gcHJqLmdldF9hdmFpbGFibGVfcmVjaXBlcygpCisgICAgICAgIHJlY2lwZXMgPSByZWNpcGVzLm9yZGVyX2J5KCJuYW1lIikKKworCisgICAgICAgIHByaW1hcnlfcmVzdWx0cyA9IHJlY2lwZXMuZmlsdGVyKG5hbWVfX2lzdGFydHN3aXRoPXNlYXJjaF90ZXJtKQorICAgICAgICBzZWNvbmRhcnlfcmVzdWx0cyA9IHJlY2lwZXMuZmlsdGVyKG5hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorICAgICAgICB0ZXJ0aWFyeV9yZXN1bHRzID0gcmVjaXBlcy5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKS5leGNsdWRlKHBrX19pbj1zZWNvbmRhcnlfcmVzdWx0cykKKworICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBmb3IgcmVjaXBlIGluIGxpc3QocHJpbWFyeV9yZXN1bHRzKSArIGxpc3Qoc2Vjb25kYXJ5X3Jlc3VsdHMpICsgbGlzdCh0ZXJ0aWFyeV9yZXN1bHRzKToKKworICAgICAgICAgICAgZGV0YWlsID0gIlsgJXMgXSIgJSAocmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSkKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IHJlY2lwZS5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiByZWNpcGUubmFtZSwKKyAgICAgICAgICAgICAgICAnZGV0YWlsJyA6IGRldGFpbCwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmVlZGVkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gcmVzdWx0cworCitjbGFzcyBQcm9qZWN0c1R5cGVBaGVhZChUb2FzdGVyVHlwZUFoZWFkKToKKyAgICAiIiIgVHlwZWFoZWFkIGZvciBhbGwgdGhlIHByb2plY3RzICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoUHJvamVjdHNUeXBlQWhlYWQsIHNlbGYpLl9faW5pdF9fKCkKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaiwgcmVxdWVzdCk6CisgICAgICAgIHByb2plY3RzID0gUHJvamVjdC5vYmplY3RzLmFsbCgpLm9yZGVyX2J5KCJuYW1lIikKKworICAgICAgICBwcmltYXJ5X3Jlc3VsdHMgPSBwcm9qZWN0cy5maWx0ZXIobmFtZV9faXN0YXJ0c3dpdGg9c2VhcmNoX3Rlcm0pCisgICAgICAgIHNlY29uZGFyeV9yZXN1bHRzID0gcHJvamVjdHMuZmlsdGVyKG5hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorCisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGZvciBwcm9qZWN0IGluIGxpc3QocHJpbWFyeV9yZXN1bHRzKSArIGxpc3Qoc2Vjb25kYXJ5X3Jlc3VsdHMpOgorICAgICAgICAgICAgbmVlZGVkX2ZpZWxkcyA9IHsKKyAgICAgICAgICAgICAgICAnaWQnIDogcHJvamVjdC5waywKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBwcm9qZWN0Lm5hbWUsCisgICAgICAgICAgICAgICAgJ2RldGFpbCcgOiAiIiwKKyAgICAgICAgICAgICAgICAncHJvamVjdFBhZ2VVcmwnIDogcmV2ZXJzZSgncHJvamVjdCcsIGFyZ3M9KHByb2plY3QucGssKSkKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmVlZGVkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gcmVzdWx0cwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdXJscy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlNTc2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkKQEAgLTAsMCArMSwxNTMgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIGluY2x1ZGUsIHVybAorZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgUmVkaXJlY3RWaWV3LCBUZW1wbGF0ZVZpZXcKKworZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlQmFkUmVxdWVzdAorZnJvbSB0b2FzdGVyZ3VpIGltcG9ydCB0YWJsZXMKK2Zyb20gdG9hc3Rlcmd1aSBpbXBvcnQgdHlwZWFoZWFkcworCit1cmxwYXR0ZXJucyA9IHBhdHRlcm5zKCd0b2FzdGVyZ3VpLnZpZXdzJywKKyAgICAgICAgIyBsYW5kaW5nIHBhZ2UKKyAgICAgICAgdXJsKHInXmxhbmRpbmcvJCcsICdsYW5kaW5nJywgbmFtZT0nbGFuZGluZycpLAorCisgICAgICAgIHVybChyJ15idWlsZHMvJCcsICdidWlsZHMnLCBuYW1lPSdhbGwtYnVpbGRzJyksCisgICAgICAgICMgYnVpbGQgaW5mbyBuYXZpZ2F0aW9uCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKSQnLCAnYnVpbGRkYXNoYm9hcmQnLCBuYW1lPSJidWlsZGRhc2hib2FyZCIpLAorCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXNrcy8kJywgJ3Rhc2tzJywgbmFtZT0ndGFza3MnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3Rhc2tzLyg/UDx0YXNrX2lkPlxkKykvJCcsICd0YXNrc190YXNrJywgbmFtZT0ndGFza3NfdGFzaycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFzay8oP1A8dGFza19pZD5cZCspJCcsICd0YXNrJywgbmFtZT0ndGFzaycpLAorCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVzLyQnLCAncmVjaXBlcycsIG5hbWU9J3JlY2lwZXMnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3JlY2lwZS8oP1A8cmVjaXBlX2lkPlxkKykvYWN0aXZlX3RhYi8oP1A8YWN0aXZlX3RhYj5cZHsxfSkkJywgJ3JlY2lwZScsIG5hbWU9J3JlY2lwZScpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlLyg/UDxyZWNpcGVfaWQ+XGQrKSQnLCAncmVjaXBlJywgbmFtZT0ncmVjaXBlJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGVfcGFja2FnZXMvKD9QPHJlY2lwZV9pZD5cZCspJCcsICdyZWNpcGVfcGFja2FnZXMnLCBuYW1lPSdyZWNpcGVfcGFja2FnZXMnKSwKKworICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZXMvJCcsICdicGFja2FnZScsIG5hbWU9J3BhY2thZ2VzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlLyg/UDxwYWNrYWdlX2lkPlxkKykkJywgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJywKKyAgICAgICAgICAgICAgICBuYW1lPSdwYWNrYWdlX2J1aWx0X2RldGFpbCcpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJywgbmFtZT0ncGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCisgICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMvKD9QPHRhcmdldF9pZD5cZCspLyg/UDxwYWNrYWdlX2lkPlxkKykkJywKKyAgICAgICAgICAgICdwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcycsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCisgICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycsIG5hbWU9J3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnKSwKKworICAgICAgICAjIGltYWdlcyBhcmUga25vd24gYXMgdGFyZ2V0cyBpbiB0aGUgaW50ZXJuYWwgbW9kZWwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykkJywgJ3RhcmdldCcsIG5hbWU9J3RhcmdldCcpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKS90YXJnZXRwa2ckJywgJ3RhcmdldHBrZycsIG5hbWU9J3RhcmdldHBrZycpLAorICAgICAgICB1cmwocideZGVudHJpZXMvYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKSQnLCAneGhyX2RpcmluZm8nLCBuYW1lPSdkaXJpbmZvX2FqYXgnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvZGlyaW5mbyQnLCAnZGlyaW5mbycsIG5hbWU9J2RpcmluZm8nKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvZGlyaW5mb19maWxlcGF0aC9fKD9QPGZpbGVfcGF0aD4oPzovW14vXG5dKykqKSQnLCAnZGlyaW5mbycsIG5hbWU9J2RpcmluZm9fZmlsZXBhdGgnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NvbmZpZ3VyYXRpb24kJywgJ2NvbmZpZ3VyYXRpb24nLCBuYW1lPSdjb25maWd1cmF0aW9uJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jb25maWd2YXJzJCcsICdjb25maWd2YXJzJywgbmFtZT0nY29uZmlndmFycycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvYnVpbGR0aW1lJCcsICdidWlsZHRpbWUnLCBuYW1lPSdidWlsZHRpbWUnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2NwdXVzYWdlJCcsICdjcHV1c2FnZScsIG5hbWU9J2NwdXVzYWdlJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9kaXNraW8kJywgJ2Rpc2tpbycsIG5hbWU9J2Rpc2tpbycpLAorCisgICAgICAgICMgaW1hZ2UgaW5mb3JtYXRpb24gZGlyCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL3BhY2thZ2VmaWxlLyg/UDxwYWNrYWdlZmlsZV9pZD5cZCspJCcsCisgICAgICAgICAgICAgJ2ltYWdlX2luZm9ybWF0aW9uX2RpcicsIG5hbWU9J2ltYWdlX2luZm9ybWF0aW9uX2RpcicpLAorCisgICAgICAgICMgYnVpbGQgZG93bmxvYWQgYXJ0aWZhY3QKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2FydGlmYWN0Lyg/UDxhcnRpZmFjdF90eXBlPlx3KykvaWQvKD9QPGFydGlmYWN0X2lkPlx3KyknLCAnYnVpbGRfYXJ0aWZhY3QnLCBuYW1lPSJidWlsZF9hcnRpZmFjdCIpLAorCisgICAgICAgICMgcHJvamVjdCBVUkxzCisgICAgICAgIHVybChyJ15uZXdwcm9qZWN0LyQnLCAnbmV3cHJvamVjdCcsIG5hbWU9J25ld3Byb2plY3QnKSwKKworCisgICAgICAgIHVybChyJ15wcm9qZWN0cy8kJywgJ3Byb2plY3RzJywgbmFtZT0nYWxsLXByb2plY3RzJyksCisKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspLyQnLCAncHJvamVjdCcsIG5hbWU9J3Byb2plY3QnKSwKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2NvbmZpZ3VyYXRpb24kJywgJ3Byb2plY3Rjb25mJywgbmFtZT0ncHJvamVjdGNvbmYnKSwKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2J1aWxkcy8kJywgJ3Byb2plY3RidWlsZHMnLCBuYW1lPSdwcm9qZWN0YnVpbGRzJyksCisKKyAgICAgICAgIyB0aGUgaW1wb3J0IGxheWVyIGlzIGEgcHJvamVjdC1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5OworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvaW1wb3J0bGF5ZXIkJywgJ2ltcG9ydGxheWVyJywgbmFtZT0naW1wb3J0bGF5ZXInKSwKKworICAgICAgICAjIHRoZSB0YWJsZSBwYWdlcyB0aGF0IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gVG9hc3RlclRhYmxlIHdpZGdldAorICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvbWFjaGluZXMvJCcsCisgICAgICAgICAgICB0YWJsZXMuTWFjaGluZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5NYWNoaW5lc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCksCisgICAgICAgICAgICAgICd0aXRsZScgOiAnQ29tcGF0aWJsZSBtYWNoaW5lcycgfSwKKyAgICAgICAgICAgIG5hbWU9InByb2plY3RtYWNoaW5lcyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9yZWNpcGVzLyQnLAorICAgICAgICAgICAgdGFibGVzLlJlY2lwZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5SZWNpcGVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdDb21wYXRpYmxlIHJlY2lwZXMnIH0sCisgICAgICAgICAgICBuYW1lPSJwcm9qZWN0dGFyZ2V0cyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9hdmFpbGFibGVyZWNpcGVzLyQnLAorICAgICAgICAgICAgdGFibGVzLlByb2plY3RMYXllcnNSZWNpcGVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuUHJvamVjdExheWVyc1JlY2lwZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ1JlY2lwZXMgYXZhaWxhYmxlIGZvciBsYXllcnMgaW4gdGhlIGN1cnJlbnQgcHJvamVjdCcgfSwKKyAgICAgICAgICAgIG5hbWU9InByb2plY3RhdmFpbGFibGV0YXJnZXRzIiksCisKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2xheWVycy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5MYXllcnNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5MYXllcnNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ0NvbXBhdGlibGUgbGF5ZXJzJyB9LAorICAgICAgICAgICAgbmFtZT0icHJvamVjdGxheWVycyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspJCcsCisgICAgICAgICAgICAnbGF5ZXJkZXRhaWxzJywgbmFtZT0nbGF5ZXJkZXRhaWxzJyksCisKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2xheWVyLyg/UDxsYXllcmlkPlxkKykvcmVjaXBlcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5MYXllclJlY2lwZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5MYXllclJlY2lwZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ0FsbCByZWNpcGVzIGluIGxheWVyJyB9LAorICAgICAgICAgICAgIG5hbWU9dGFibGVzLkxheWVyUmVjaXBlc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCkpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspL21hY2hpbmVzLyQnLAorICAgICAgICAgICAgdGFibGVzLkxheWVyTWFjaGluZXNUYWJsZS5hc192aWV3KHRlbXBsYXRlX25hbWU9ImdlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbCIpLAorICAgICAgICAgICAgeyAndGFibGVfbmFtZSc6IHRhYmxlcy5MYXllck1hY2hpbmVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdBbGwgbWFjaGluZXMgaW4gbGF5ZXInIH0sCisgICAgICAgICAgICBuYW1lPXRhYmxlcy5MYXllck1hY2hpbmVzVGFibGUuX19uYW1lX18ubG93ZXIoKSksCisKKworICAgICAgICAjIHR5cGVhaGVhZCBhcGkgZW5kIHBvaW50cworICAgICAgICB1cmwocideeGhyX3R5cGVhaGVhZC8oP1A8cGlkPlxkKykvbGF5ZXJzJCcsCisgICAgICAgICAgICB0eXBlYWhlYWRzLkxheWVyc1R5cGVBaGVhZC5hc192aWV3KCksIG5hbWU9J3hocl9sYXllcnN0eXBlYWhlYWQnKSwKKyAgICAgICAgdXJsKHInXnhocl90eXBlYWhlYWQvKD9QPHBpZD5cZCspL21hY2hpbmVzJCcsCisgICAgICAgICAgICB0eXBlYWhlYWRzLk1hY2hpbmVzVHlwZUFoZWFkLmFzX3ZpZXcoKSwgbmFtZT0neGhyX21hY2hpbmVzdHlwZWFoZWFkJyksCisgICAgICAgIHVybChyJ154aHJfdHlwZWFoZWFkLyg/UDxwaWQ+XGQrKS9yZWNpcGVzJCcsCisgICAgICAgICAgICB0eXBlYWhlYWRzLlJlY2lwZXNUeXBlQWhlYWQuYXNfdmlldygpLCBuYW1lPSd4aHJfcmVjaXBlc3R5cGVhaGVhZCcpLAorICAgICAgICB1cmwocideeGhyX3R5cGVhaGVhZC9wcm9qZWN0cyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5Qcm9qZWN0c1R5cGVBaGVhZC5hc192aWV3KCksIG5hbWU9J3hocl9wcm9qZWN0c3R5cGVhaGVhZCcpLAorCisKKworICAgICAgICB1cmwocideeGhyX3Rlc3RyZWxlYXNlY2hhbmdlLyg/UDxwaWQ+XGQrKSQnLCAneGhyX3Rlc3RyZWxlYXNlY2hhbmdlJywKKyAgICAgICAgICAgIG5hbWU9J3hocl90ZXN0cmVsZWFzZWNoYW5nZScpLAorICAgICAgICB1cmwocideeGhyX2NvbmZpZ3ZhcmVkaXQvKD9QPHBpZD5cZCspJCcsICd4aHJfY29uZmlndmFyZWRpdCcsCisgICAgICAgICAgICBuYW1lPSd4aHJfY29uZmlndmFyZWRpdCcpLAorCisgICAgICAgIHVybChyJ154aHJfaW1wb3J0bGF5ZXIvJCcsICd4aHJfaW1wb3J0bGF5ZXInLCBuYW1lPSd4aHJfaW1wb3J0bGF5ZXInKSwKKyAgICAgICAgdXJsKHInXnhocl91cGRhdGVsYXllci8kJywgJ3hocl91cGRhdGVsYXllcicsIG5hbWU9J3hocl91cGRhdGVsYXllcicpLAorCisgICAgICAgICMgSlMgVW5pdCB0ZXN0cworICAgICAgICB1cmwocideanMtdW5pdC10ZXN0cy8kJywgJ2pzdW5pdHRlc3RzJywgbmFtZT0nanMtdW5pdC10ZXN0cycpLAorCisgICAgICAgICMgZGVmYXVsdCByZWRpcmVjdGlvbgorICAgICAgICB1cmwocideJCcsIFJlZGlyZWN0Vmlldy5hc192aWV3KCB1cmw9ICdsYW5kaW5nJykpLAorKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS92aWV3cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Njg5YTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdmlld3MucHkKQEAgLTAsMCArMSwyOTMzIEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBweWxpbnQ6IGRpc2FibGU9bWV0aG9kLWhpZGRlbgorIyBHaXZlcyBFOjg0OCwgNDogQW4gYXR0cmlidXRlIGRlZmluZWQgaW4ganNvbi5lbmNvZGVyIGxpbmUgMTYyIGhpZGVzIHRoaXMgbWV0aG9kIChtZXRob2QtaGlkZGVuKQorIyB3aGljaCBpcyBhbiBpbnZhbGlkIHdhcm5pbmcKKworaW1wb3J0IG9wZXJhdG9yLHJlCisKK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgRiwgUSwgU3VtLCBDb3VudCwgTWF4Citmcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IKK2Zyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgcmVuZGVyLCByZWRpcmVjdAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZCwgVGFyZ2V0LCBUYXNrLCBMYXllciwgTGF5ZXJfVmVyc2lvbiwgUmVjaXBlLCBMb2dNZXNzYWdlLCBWYXJpYWJsZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBUYXNrX0RlcGVuZGVuY3ksIFJlY2lwZV9EZXBlbmRlbmN5LCBQYWNrYWdlLCBQYWNrYWdlX0ZpbGUsIFBhY2thZ2VfRGVwZW5kZW5jeQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UsIFRhcmdldF9GaWxlLCBUYXJnZXRfSW1hZ2VfRmlsZSwgQnVpbGRBcnRpZmFjdAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCaXRiYWtlVmVyc2lvbgorZnJvbSBibGRjb250cm9sIGltcG9ydCBiYmNvbnRyb2xsZXIKK2Zyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY2FjaGUgaW1wb3J0IGNhY2hlX2NvbnRyb2wKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlLCByZXNvbHZlCitmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IE11bHRpcGxlT2JqZWN0c1JldHVybmVkCitmcm9tIGRqYW5nby5jb3JlLnBhZ2luYXRvciBpbXBvcnQgUGFnaW5hdG9yLCBFbXB0eVBhZ2UsIFBhZ2VOb3RBbkludGVnZXIKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QsIEh0dHBSZXNwb25zZU5vdEZvdW5kCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKK2Zyb20gZGphbmdvLnV0aWxzLmh0bWwgaW1wb3J0IGVzY2FwZQorZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhLCBkYXRldGltZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IGZvcm1hdHMKK2Zyb20gdG9hc3Rlcmd1aS50ZW1wbGF0ZXRhZ3MucHJvamVjdHRhZ3MgaW1wb3J0IGpzb24gYXMganNvbmZpbHRlcgoraW1wb3J0IGpzb24KK2Zyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZQoraW1wb3J0IGl0ZXJ0b29scworCitpbXBvcnQgbWFnaWMKK2ltcG9ydCBsb2dnaW5nCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVyIikKKworY2xhc3MgTWltZVR5cGVGaW5kZXIob2JqZWN0KToKKyAgICBfbWFnaWMgPSBtYWdpYy5NYWdpYyhmbGFncyA9IG1hZ2ljLk1BR0lDX01JTUVfVFlQRSkKKworICAgICMgcmV0dXJucyB0aGUgbWltZXR5cGUgZm9yIGEgZmlsZSBwYXRoCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9taW1ldHlwZShzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hZ2ljLmlkX2ZpbGVuYW1lKHBhdGgpCisKKyMgYWxsIG5ldyBzZXNzaW9ucyBzaG91bGQgY29tZSB0aHJvdWdoIHRoZSBsYW5kaW5nIHBhZ2U7CisjIGRldGVybWluZSBpbiB3aGljaCBtb2RlIHdlIGFyZSBydW5uaW5nIGluLCBhbmQgcmVkaXJlY3QgYXBwcm9wcmlhdGVseQorZGVmIGxhbmRpbmcocmVxdWVzdCk6CisgICAgIyB3ZSBvbmx5IHJlZGlyZWN0IHRvIHByb2plY3RzIHBhZ2UgaWYgdGhlcmUgaXMgYSB1c2VyLWdlbmVyYXRlZCBwcm9qZWN0CisgICAgdXNlcl9wcm9qZWN0cyA9IFByb2plY3Qub2JqZWN0cy5maWx0ZXIoaXNfZGVmYXVsdCA9IEZhbHNlKQorICAgIGhhc191c2VyX3Byb2plY3QgPSB1c2VyX3Byb2plY3RzLmNvdW50KCkgPiAwCisKKyAgICBpZiBCdWlsZC5vYmplY3RzLmNvdW50KCkgPT0gMCBhbmQgaGFzX3VzZXJfcHJvamVjdDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBwZXJtYW5lbnQgPSBGYWxzZSkKKworICAgIGlmIEJ1aWxkLm9iamVjdHMuYWxsKCkuY291bnQoKSA+IDA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCdhbGwtYnVpbGRzJyksIHBlcm1hbmVudCA9IEZhbHNlKQorCisgICAgY29udGV4dCA9IHsnbHZzX25vcycgOiBMYXllcl9WZXJzaW9uLm9iamVjdHMuYWxsKCkuY291bnQoKX0KKworICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgJ2xhbmRpbmcuaHRtbCcsIGNvbnRleHQpCisKKyMgcmV0dXJucyBhIGxpc3QgZm9yIG1vc3QgcmVjZW50IGJ1aWxkczsKK2RlZiBfZ2V0X2xhdGVzdF9idWlsZHMocHJqPU5vbmUpOgorICAgIHF1ZXJ5c2V0ID0gQnVpbGQub2JqZWN0cy5hbGwoKQorCisgICAgaWYgcHJqIGlzIG5vdCBOb25lOgorICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmZpbHRlcihwcm9qZWN0ID0gcHJqKQorCisgICAgcmV0dXJuIGxpc3QoaXRlcnRvb2xzLmNoYWluKAorICAgICAgICBxdWVyeXNldC5maWx0ZXIob3V0Y29tZT1CdWlsZC5JTl9QUk9HUkVTUykub3JkZXJfYnkoIi1wayIpLAorICAgICAgICBxdWVyeXNldC5maWx0ZXIob3V0Y29tZV9fbHQ9QnVpbGQuSU5fUFJPR1JFU1MpLm9yZGVyX2J5KCItcGsiKVs6M10gKSkKKworCisjIGEgSlNPTi1hYmxlIGRpY3Qgb2YgcmVjZW50IGJ1aWxkczsgZm9yIHVzZSBpbiB0aGUgUHJvamVjdCBwYWdlLCB4aHJfIHVwZGF0ZXMsICBhbmQgb3RoZXIgcGxhY2VzLCBhcyBuZWVkZWQKK2RlZiBfcHJvamVjdF9yZWNlbnRfYnVpbGRfbGlzdChwcmopOgorICAgIGRhdGEgPSBbXQorICAgICMgdGFrZSB0aGUgbW9zdCByZWNlbnQgMyBjb21wbGV0ZWQgYnVpbGRzLCBwbHVzIGFueSBidWlsZHMgaW4gcHJvZ3Jlc3MKKyAgICBmb3IgeCBpbiBfZ2V0X2xhdGVzdF9idWlsZHMocHJqKToKKyAgICAgICAgZCA9IHsKKyAgICAgICAgICAgICJpZCI6ICB4LnBrLAorICAgICAgICAgICAgInRhcmdldHMiIDogbWFwKGxhbWJkYSB5OiB7InRhcmdldCI6IHkudGFyZ2V0LCAidGFzayI6IHkudGFzayB9LCB4LnRhcmdldF9zZXQuYWxsKCkpLCAjIFRPRE86IGNyZWF0ZSB0aGUgdGFzayBlbnRyeSBpbiB0aGUgVGFyZ2V0IHRhYmxlCisgICAgICAgICAgICAic3RhdHVzIjogeC5nZXRfY3VycmVudF9zdGF0dXMoKSwKKyAgICAgICAgICAgICJlcnJvcnMiOiBtYXAobGFtYmRhIHk6IHsidHlwZSI6IHkubGluZW5vLCAibXNnIjogeS5tZXNzYWdlLCAidGIiOiB5LnBhdGhuYW1lfSwgKHgubG9nbWVzc2FnZV9zZXQuZmlsdGVyKGxldmVsX19ndGU9TG9nTWVzc2FnZS5XQVJOSU5HKXx4LmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVYQ0VQVElPTikpKSwKKyAgICAgICAgICAgICJ1cGRhdGVkIjogeC5jb21wbGV0ZWRfb24uc3RyZnRpbWUoJyVzJykrIjAwMCIsCisgICAgICAgICAgICAiY29tbWFuZF90aW1lIjogKHguY29tcGxldGVkX29uIC0geC5zdGFydGVkX29uKS50b3RhbF9zZWNvbmRzKCksCisgICAgICAgICAgICAiYnJfcGFnZV91cmwiOiByZXZlcnNlKCdidWlsZGRhc2hib2FyZCcsIGFyZ3M9KHgucGssKSApLAorICAgICAgICAgICAgImJ1aWxkIiA6IG1hcCggbGFtYmRhIHk6IHsiaWQiOiB5LnBrLAorICAgICAgICAgICAgICAgICAgICAgICAgInN0YXR1cyI6IHkuZ2V0X291dGNvbWVfZGlzcGxheSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXRlZF9vbiIgOiB5LmNvbXBsZXRlZF9vbi5zdHJmdGltZSgnJXMnKSsiMDAwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJidWlsZF90aW1lIiA6ICh5LmNvbXBsZXRlZF9vbiAtIHkuc3RhcnRlZF9vbikudG90YWxfc2Vjb25kcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWxkX3BhZ2VfdXJsIiA6IHJldmVyc2UoJ2J1aWxkZGFzaGJvYXJkJywgYXJncz0oeS5waywpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdidWlsZF90aW1lX3BhZ2VfdXJsJzogcmV2ZXJzZSgnYnVpbGR0aW1lJywgYXJncz0oeS5waywpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcnMiOiB5LmVycm9ycy5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdzIjogeS53YXJuaW5ncy5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXRlcGVyIjogeS5jb21wbGV0ZXBlcigpIGlmIHkub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUyBlbHNlICIwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJldGEiOiB5LmV0YSgpLnN0cmZ0aW1lKCclcycpKyIwMDAiIGlmIHkub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUyBlbHNlICIwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sIFt4XSksCisgICAgICAgICAgICB9CisgICAgICAgIGRhdGEuYXBwZW5kKGQpCisKKyAgICByZXR1cm4gZGF0YQorCisKKworZGVmIG9ianRvanNvbihvYmopOgorICAgIGZyb20gZGphbmdvLmRiLm1vZGVscy5xdWVyeSBpbXBvcnQgUXVlcnlTZXQKKyAgICBmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IE1vZGVsCisKKyAgICBpZiBpc2luc3RhbmNlKG9iaiwgZGF0ZXRpbWUpOgorICAgICAgICByZXR1cm4gb2JqLmlzb2Zvcm1hdCgpCisgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgdGltZWRlbHRhKToKKyAgICAgICAgcmV0dXJuIG9iai50b3RhbF9zZWNvbmRzKCkKKyAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBRdWVyeVNldCkgb3IgaXNpbnN0YW5jZShvYmosIHNldCk6CisgICAgICAgIHJldHVybiBsaXN0KG9iaikKKyAgICBlbGlmIHR5cGUob2JqKS5fX25hbWVfXyA9PSAiUmVsYXRlZE1hbmFnZXIiOgorICAgICAgICByZXR1cm4gW3gucGsgZm9yIHggaW4gb2JqLmFsbCgpXQorICAgIGVsaWYgaGFzYXR0ciggb2JqLCAnX19kaWN0X18nKSBhbmQgaXNpbnN0YW5jZShvYmosIE1vZGVsKToKKyAgICAgICAgZCA9IG9iai5fX2RpY3RfXworICAgICAgICBuZCA9IGRpY3QoZCkKKyAgICAgICAgZm9yIGRpIGluIGQua2V5cygpOgorICAgICAgICAgICAgaWYgZGkuc3RhcnRzd2l0aCgiXyIpOgorICAgICAgICAgICAgICAgIGRlbCBuZFtkaV0KKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkW2RpXSwgTW9kZWwpOgorICAgICAgICAgICAgICAgIG5kW2RpXSA9IGRbZGldLnBrCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZFtkaV0sIGludCkgYW5kIGhhc2F0dHIob2JqLCAiZ2V0XyVzX2Rpc3BsYXkiICUgZGkpOgorICAgICAgICAgICAgICAgIG5kW2RpXSA9IGdldGF0dHIob2JqLCAiZ2V0XyVzX2Rpc3BsYXkiICUgZGkpKCkKKyAgICAgICAgcmV0dXJuIG5kCisgICAgZWxpZiBpc2luc3RhbmNlKCBvYmosIHR5cGUobGFtYmRhIHg6eCkpOgorICAgICAgICBpbXBvcnQgaW5zcGVjdAorICAgICAgICByZXR1cm4gaW5zcGVjdC5nZXRzb3VyY2VsaW5lcyhvYmopWzBdCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSBvYmplY3QgJXMgKCVzKSBvZiB0eXBlICVzIiAlICggb2JqLCBkaXIob2JqKSwgdHlwZShvYmopKSkKKworCitkZWYgX3RlbXBsYXRlX3JlbmRlcmVyKHRlbXBsYXRlKToKKyAgICBkZWYgZnVuY193cmFwcGVyKHZpZXcpOgorICAgICAgICBkZWYgcmV0dXJuZWRfd3JhcHBlcihyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSB2aWV3KHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBSZWRpcmVjdEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHJldHVybiBlLmdldF9yZWRpcmVjdF9yZXNwb25zZSgpCisKKyAgICAgICAgICAgIGlmIHJlcXVlc3QuR0VULmdldCgnZm9ybWF0JywgTm9uZSkgPT0gJ2pzb24nOgorICAgICAgICAgICAgICAgICMgb2JqZWN0cyBpcyBhIHNwZWNpYWwga2V5d29yZCAtIGl0J3MgYSBQYWdlLCBidXQgd2UgbmVlZCB0aGUgYWN0dWFsIG9iamVjdHMgaGVyZQorICAgICAgICAgICAgICAgICMgaW4gWEhSLCB0aGUgb2JqZWN0cyBjb21lIGluIHRoZSAicm93cyIgcHJvcGVydHkKKyAgICAgICAgICAgICAgICBpZiAib2JqZWN0cyIgaW4gY29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsicm93cyJdID0gY29udGV4dFsib2JqZWN0cyJdLm9iamVjdF9saXN0CisgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0WyJvYmplY3RzIl0KKworICAgICAgICAgICAgICAgICMgd2UncmUgYWJvdXQgdG8gcmV0dXJuOyB0byBrZWVwIHVwIHdpdGggdGhlIFhIUiBBUEksIHdlIHNldCB0aGUgZXJyb3IgdG8gT0sKKyAgICAgICAgICAgICAgICBjb250ZXh0WyJlcnJvciJdID0gIm9rIgorCisgICAgICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKGNvbnRleHQsIGRlZmF1bHQ9b2JqdG9qc29uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgICAgICByZXR1cm4gcmV0dXJuZWRfd3JhcHBlcgorICAgIHJldHVybiBmdW5jX3dyYXBwZXIKKworCitkZWYgX2x2X3RvX2RpY3QocHJqLCB4ID0gTm9uZSk6CisgICAgaWYgeCBpcyBOb25lOgorICAgICAgICBkZWYgd3JhcHBlcih4KToKKyAgICAgICAgICAgIHJldHVybiBfbHZfdG9fZGljdChwcmosIHgpCisgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICByZXR1cm4geyJpZCI6IHgucGssCisgICAgICAgICAgICAibmFtZSI6IHgubGF5ZXIubmFtZSwKKyAgICAgICAgICAgICJ0b29sdGlwIjogIiVzIHwgJXMiICUgKHgubGF5ZXIudmNzX3VybCx4LmdldF92Y3NfcmVmZXJlbmNlKCkpLAorICAgICAgICAgICAgImRldGFpbCI6ICIoJXMiICUgeC5sYXllci52Y3NfdXJsICsgKCIpIiBpZiB4LnVwX2JyYW5jaCA9PSBOb25lIGVsc2UgIiB8ICIreC5nZXRfdmNzX3JlZmVyZW5jZSgpKyIpIiksCisgICAgICAgICAgICAiZ2l0dXJsIjogeC5sYXllci52Y3NfdXJsLAorICAgICAgICAgICAgImxheWVyZGV0YWlsdXJsIiA6IHJldmVyc2UoJ2xheWVyZGV0YWlscycsIGFyZ3M9KHByai5pZCx4LnBrKSksCisgICAgICAgICAgICAicmV2aXNpb24iIDogeC5nZXRfdmNzX3JlZmVyZW5jZSgpLAorICAgICAgICAgICB9CisKKworZGVmIF9idWlsZF9wYWdlX3JhbmdlKHBhZ2luYXRvciwgaW5kZXggPSAxKToKKyAgICB0cnk6CisgICAgICAgIHBhZ2UgPSBwYWdpbmF0b3IucGFnZShpbmRleCkKKyAgICBleGNlcHQgUGFnZU5vdEFuSW50ZWdlcjoKKyAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKDEpCisgICAgZXhjZXB0ICBFbXB0eVBhZ2U6CisgICAgICAgIHBhZ2UgPSBwYWdpbmF0b3IucGFnZShwYWdpbmF0b3IubnVtX3BhZ2VzKQorCisKKyAgICBwYWdlLnBhZ2VfcmFuZ2UgPSBbcGFnZS5udW1iZXJdCisgICAgY3J0X3JhbmdlID0gMAorICAgIGZvciBpIGluIHJhbmdlKDEsNSk6CisgICAgICAgIGlmIChwYWdlLm51bWJlciArIGkpIDw9IHBhZ2luYXRvci5udW1fcGFnZXM6CisgICAgICAgICAgICBwYWdlLnBhZ2VfcmFuZ2UgPSBwYWdlLnBhZ2VfcmFuZ2UgKyBbIHBhZ2UubnVtYmVyICsgaV0KKyAgICAgICAgICAgIGNydF9yYW5nZSArPTEKKyAgICAgICAgaWYgKHBhZ2UubnVtYmVyIC0gaSkgPiAwOgorICAgICAgICAgICAgcGFnZS5wYWdlX3JhbmdlID0gIFtwYWdlLm51bWJlciAtaV0gKyBwYWdlLnBhZ2VfcmFuZ2UKKyAgICAgICAgICAgIGNydF9yYW5nZSArPTEKKyAgICAgICAgaWYgY3J0X3JhbmdlID09IDQ6CisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBwYWdlCisKKworZGVmIF92ZXJpZnlfcGFyYW1ldGVycyhnLCBtYW5kYXRvcnlfcGFyYW1ldGVycyk6CisgICAgbWlzcyA9IFtdCisgICAgZm9yIG1wIGluIG1hbmRhdG9yeV9wYXJhbWV0ZXJzOgorICAgICAgICBpZiBub3QgbXAgaW4gZzoKKyAgICAgICAgICAgIG1pc3MuYXBwZW5kKG1wKQorICAgIGlmIGxlbihtaXNzKToKKyAgICAgICAgcmV0dXJuIG1pc3MKKyAgICByZXR1cm4gTm9uZQorCitkZWYgX3JlZGlyZWN0X3BhcmFtZXRlcnModmlldywgZywgbWFuZGF0b3J5X3BhcmFtZXRlcnMsICphcmdzLCAqKmt3YXJncyk6CisgICAgaW1wb3J0IHVybGxpYgorICAgIHVybCA9IHJldmVyc2Uodmlldywga3dhcmdzPWt3YXJncykKKyAgICBwYXJhbXMgPSB7fQorICAgIGZvciBpIGluIGc6CisgICAgICAgIHBhcmFtc1tpXSA9IGdbaV0KKyAgICBmb3IgaSBpbiBtYW5kYXRvcnlfcGFyYW1ldGVyczoKKyAgICAgICAgaWYgbm90IGkgaW4gcGFyYW1zOgorICAgICAgICAgICAgcGFyYW1zW2ldID0gdXJsbGliLnVucXVvdGUoc3RyKG1hbmRhdG9yeV9wYXJhbWV0ZXJzW2ldKSkKKworICAgIHJldHVybiByZWRpcmVjdCh1cmwgKyAiPyVzIiAlIHVybGxpYi51cmxlbmNvZGUocGFyYW1zKSwgcGVybWFuZW50ID0gRmFsc2UsICoqa3dhcmdzKQorCitjbGFzcyBSZWRpcmVjdEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2aWV3LCBnLCBtYW5kYXRvcnlfcGFyYW1ldGVycywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoUmVkaXJlY3RFeGNlcHRpb24sIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi52aWV3ID0gdmlldworICAgICAgICBzZWxmLmcgPSBnCisgICAgICAgIHNlbGYubWFuZGF0b3J5X3BhcmFtZXRlcnMgPSBtYW5kYXRvcnlfcGFyYW1ldGVycworICAgICAgICBzZWxmLm9hcmdzICA9IGFyZ3MKKyAgICAgICAgc2VsZi5va3dhcmdzID0ga3dhcmdzCisKKyAgICBkZWYgZ2V0X3JlZGlyZWN0X3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoc2VsZi52aWV3LCBzZWxmLmcsIHNlbGYubWFuZGF0b3J5X3BhcmFtZXRlcnMsIHNlbGYub2FyZ3MsICoqc2VsZi5va3dhcmdzKQorCitGSUVMRF9TRVBBUkFUT1IgPSAiOiIKK0FORF9WQUxVRV9TRVBBUkFUT1IgPSAiISIKK09SX1ZBTFVFX1NFUEFSQVRPUiA9ICJ8IgorREVTQ0VORElORyA9ICItIgorCitkZWYgX19nZXRfcV9mb3JfdmFsKG5hbWUsIHZhbHVlKToKKyAgICBpZiAiT1IiIGluIHZhbHVlOgorICAgICAgICByZXR1cm4gcmVkdWNlKG9wZXJhdG9yLm9yXywgbWFwKGxhbWJkYSB4OiBfX2dldF9xX2Zvcl92YWwobmFtZSwgeCksIFsgeCBmb3IgeCBpbiB2YWx1ZS5zcGxpdCgiT1IiKSBdKSkKKyAgICBpZiAiQU5EIiBpbiB2YWx1ZToKKyAgICAgICAgcmV0dXJuIHJlZHVjZShvcGVyYXRvci5hbmRfLCBtYXAobGFtYmRhIHg6IF9fZ2V0X3FfZm9yX3ZhbChuYW1lLCB4KSwgWyB4IGZvciB4IGluIHZhbHVlLnNwbGl0KCJBTkQiKSBdKSkKKyAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCJOT1QiKToKKyAgICAgICAgdmFsdWUgPSB2YWx1ZVszOl0KKyAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOgorICAgICAgICAgICAgdmFsdWUgPSBOb25lCisgICAgICAgIGt3YXJncyA9IHsgbmFtZSA6IHZhbHVlIH0KKyAgICAgICAgcmV0dXJuIH5RKCoqa3dhcmdzKQorICAgIGVsc2U6CisgICAgICAgIGlmIHZhbHVlID09ICdOb25lJzoKKyAgICAgICAgICAgIHZhbHVlID0gTm9uZQorICAgICAgICBrd2FyZ3MgPSB7IG5hbWUgOiB2YWx1ZSB9CisgICAgICAgIHJldHVybiBRKCoqa3dhcmdzKQorCitkZWYgX2dldF9maWx0ZXJpbmdfcXVlcnkoZmlsdGVyX3N0cmluZyk6CisKKyAgICBzZWFyY2hfdGVybXMgPSBmaWx0ZXJfc3RyaW5nLnNwbGl0KEZJRUxEX1NFUEFSQVRPUikKKyAgICBhbmRfa2V5cyA9IHNlYXJjaF90ZXJtc1swXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKQorICAgIGFuZF92YWx1ZXMgPSBzZWFyY2hfdGVybXNbMV0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUikKKworICAgIGFuZF9xdWVyeSA9IFtdCisgICAgZm9yIGt2IGluIHppcChhbmRfa2V5cywgYW5kX3ZhbHVlcyk6CisgICAgICAgIG9yX2tleXMgPSBrdlswXS5zcGxpdChPUl9WQUxVRV9TRVBBUkFUT1IpCisgICAgICAgIG9yX3ZhbHVlcyA9IGt2WzFdLnNwbGl0KE9SX1ZBTFVFX1NFUEFSQVRPUikKKyAgICAgICAgcXVlcnlkaWN0ID0gZGljdCh6aXAob3Jfa2V5cywgb3JfdmFsdWVzKSkKKyAgICAgICAgYW5kX3F1ZXJ5LmFwcGVuZChyZWR1Y2Uob3BlcmF0b3Iub3JfLCBtYXAobGFtYmRhIHg6IF9fZ2V0X3FfZm9yX3ZhbCh4LCBxdWVyeWRpY3RbeF0pLCBbayBmb3IgayBpbiBxdWVyeWRpY3RdKSkpCisKKyAgICByZXR1cm4gcmVkdWNlKG9wZXJhdG9yLmFuZF8sIFtrIGZvciBrIGluIGFuZF9xdWVyeV0pCisKK2RlZiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCBvcmRlcmtleSwgdG9nZ2xlX3JldmVyc2UgPSBGYWxzZSk6CisgICAgaWYgdG9nZ2xlX3JldmVyc2U6CisgICAgICAgIHJldHVybiAiJXM6KyIgJSBvcmRlcmtleSBpZiByZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAiIikgPT0gIiVzOi0iICUgb3JkZXJrZXkgZWxzZSAiJXM6LSIgJSBvcmRlcmtleQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAiJXM6LSIgJSBvcmRlcmtleSBpZiByZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAiIikgPT0gIiVzOisiICUgb3JkZXJrZXkgZWxzZSAiJXM6KyIgJSBvcmRlcmtleQorCitkZWYgX2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCBvcmRlcmtleSk6CisgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCdvcmRlcmJ5JywgIiIpID09ICIlczorIiVvcmRlcmtleToKKyAgICAgICAgcmV0dXJuICJkb3duIgorICAgIGVsaWYgcmVxdWVzdC5HRVQuZ2V0KCdvcmRlcmJ5JywgIiIpID09ICIlczotIiVvcmRlcmtleToKKyAgICAgICAgcmV0dXJuICJ1cCIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisjIHdlIGNoZWNrIHRoYXQgdGhlIGlucHV0IGNvbWVzIGluIGEgdmFsaWQgZm9ybSB0aGF0IHdlIGNhbiByZWNvZ25pemUKK2RlZiBfdmFsaWRhdGVfaW5wdXQoZmllbGRfaW5wdXQsIG1vZGVsKToKKworICAgIGludmFsaWQgPSBOb25lCisKKyAgICBpZiBmaWVsZF9pbnB1dDoKKyAgICAgICAgZmllbGRfaW5wdXRfbGlzdCA9IGZpZWxkX2lucHV0LnNwbGl0KEZJRUxEX1NFUEFSQVRPUikKKworICAgICAgICAjIENoZWNrIHdlIGhhdmUgb25seSBvbmUgY29sb24KKyAgICAgICAgaWYgbGVuKGZpZWxkX2lucHV0X2xpc3QpICE9IDI6CisgICAgICAgICAgICBpbnZhbGlkID0gIldlIGhhdmUgYW4gaW52YWxpZCBudW1iZXIgb2Ygc2VwYXJhdG9yczogIiArIGZpZWxkX2lucHV0ICsgIiAtPiAiICsgc3RyKGZpZWxkX2lucHV0X2xpc3QpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgaW52YWxpZAorCisgICAgICAgICMgQ2hlY2sgd2UgaGF2ZSBhbiBlcXVhbCBudW1iZXIgb2YgdGVybXMgYm90aCBzaWRlcyBvZiB0aGUgY29sb24KKyAgICAgICAgaWYgbGVuKGZpZWxkX2lucHV0X2xpc3RbMF0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUikpICE9IGxlbihmaWVsZF9pbnB1dF9saXN0WzFdLnNwbGl0KEFORF9WQUxVRV9TRVBBUkFUT1IpKToKKyAgICAgICAgICAgIGludmFsaWQgPSAiTm90IGFsbCBhcmcgbmFtZXMgZ290IHZhbHVlcyIKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBpbnZhbGlkICsgc3RyKGZpZWxkX2lucHV0X2xpc3QpCisKKyAgICAgICAgIyBDaGVjayB3ZSBhcmUgbG9va2luZyBmb3IgYSB2YWxpZCBmaWVsZAorICAgICAgICB2YWxpZF9maWVsZHMgPSBtb2RlbC5fbWV0YS5nZXRfYWxsX2ZpZWxkX25hbWVzKCkKKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkX2lucHV0X2xpc3RbMF0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUik6CisgICAgICAgICAgICBpZiBub3QgcmVkdWNlKGxhbWJkYSB4LCB5OiB4IG9yIHksIFsgZmllbGQuc3RhcnRzd2l0aCh4KSBmb3IgeCBpbiB2YWxpZF9maWVsZHMgXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIChmaWVsZCwgWyB4IGZvciB4IGluIHZhbGlkX2ZpZWxkcyBdKQorCisgICAgcmV0dXJuIGZpZWxkX2lucHV0LCBpbnZhbGlkCisKKyMgdXNlcyBzZWFyY2hfYWxsb3dlZF9maWVsZHMgaW4gb3JtL21vZGVscy5weSB0byBjcmVhdGUgYSBzZWFyY2ggcXVlcnkKKyMgZm9yIHRoZXNlIGZpZWxkcyB3aXRoIHRoZSBzdXBwbGllZCBpbnB1dCB0ZXh0CitkZWYgX2dldF9zZWFyY2hfcmVzdWx0cyhzZWFyY2hfdGVybSwgcXVlcnlzZXQsIG1vZGVsKToKKyAgICBzZWFyY2hfb2JqZWN0cyA9IFtdCisgICAgZm9yIHN0IGluIHNlYXJjaF90ZXJtLnNwbGl0KCIgIik6CisgICAgICAgIHFfbWFwID0gbWFwKGxhbWJkYSB4OiBRKCoqe3grJ19faWNvbnRhaW5zJzogc3R9KSwKKyAgICAgICAgICAgICAgICBtb2RlbC5zZWFyY2hfYWxsb3dlZF9maWVsZHMpCisKKyAgICAgICAgc2VhcmNoX29iamVjdHMuYXBwZW5kKHJlZHVjZShvcGVyYXRvci5vcl8sIHFfbWFwKSkKKyAgICBzZWFyY2hfb2JqZWN0ID0gcmVkdWNlKG9wZXJhdG9yLmFuZF8sIHNlYXJjaF9vYmplY3RzKQorICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKHNlYXJjaF9vYmplY3QpCisKKyAgICByZXR1cm4gcXVlcnlzZXQKKworCisjIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHNlYXJjaC9maWx0ZXIvb3JkZXJpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSByZXF1ZXN0CisjIGl0IHVzZXMgdGhlIHJlcXVlc3QgYW5kIHRoZSBtb2RlbCB0byB2YWxpZGF0ZSBpbnB1dCBmb3IgdGhlIGZpbHRlciBhbmQgb3JkZXJieSB2YWx1ZXMKK2RlZiBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIG1vZGVsKToKKyAgICBvcmRlcmluZ19zdHJpbmcsIGludmFsaWQgPSBfdmFsaWRhdGVfaW5wdXQocmVxdWVzdC5HRVQuZ2V0KCdvcmRlcmJ5JywgJycpLCBtb2RlbCkKKyAgICBpZiBpbnZhbGlkOgorICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKCJJbnZhbGlkIG9yZGVyaW5nIG1vZGVsOiIgKyBzdHIobW9kZWwpICsgc3RyKGludmFsaWQpKQorCisgICAgZmlsdGVyX3N0cmluZywgaW52YWxpZCA9IF92YWxpZGF0ZV9pbnB1dChyZXF1ZXN0LkdFVC5nZXQoJ2ZpbHRlcicsICcnKSwgbW9kZWwpCisgICAgaWYgaW52YWxpZDoKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbigiSW52YWxpZCBmaWx0ZXIgIiArIHN0cihpbnZhbGlkKSkKKworICAgIHNlYXJjaF90ZXJtID0gcmVxdWVzdC5HRVQuZ2V0KCdzZWFyY2gnLCAnJykKKyAgICByZXR1cm4gKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpCisKKworIyByZXR1cm5zIGEgbGF6eS1ldmFsdWF0ZWQgcXVlcnlzZXQgZm9yIGEgZmlsdGVyL3NlYXJjaC9vcmRlciBjb21iaW5hdGlvbgorZGVmIF9nZXRfcXVlcnlzZXQobW9kZWwsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCBvcmRlcmluZ19zZWNvbmRhcnk9JycpOgorICAgIGlmIGZpbHRlcl9zdHJpbmc6CisgICAgICAgIGZpbHRlcl9xdWVyeSA9IF9nZXRfZmlsdGVyaW5nX3F1ZXJ5KGZpbHRlcl9zdHJpbmcpCisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKGZpbHRlcl9xdWVyeSkKKyAgICBlbHNlOgorICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmFsbCgpCisKKyAgICBpZiBzZWFyY2hfdGVybToKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3NlYXJjaF9yZXN1bHRzKHNlYXJjaF90ZXJtLCBxdWVyeXNldCwgbW9kZWwpCisKKyAgICBpZiBvcmRlcmluZ19zdHJpbmc6CisgICAgICAgIGNvbHVtbiwgb3JkZXIgPSBvcmRlcmluZ19zdHJpbmcuc3BsaXQoJzonKQorICAgICAgICBpZiBjb2x1bW4gPT0gcmUuc3ViKCctJywnJyxvcmRlcmluZ19zZWNvbmRhcnkpOgorICAgICAgICAgICAgb3JkZXJpbmdfc2Vjb25kYXJ5PScnCisgICAgICAgIGlmIG9yZGVyLmxvd2VyKCkgPT0gREVTQ0VORElORzoKKyAgICAgICAgICAgIGNvbHVtbiA9ICctJyArIGNvbHVtbgorICAgICAgICBpZiBvcmRlcmluZ19zZWNvbmRhcnk6CisgICAgICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0Lm9yZGVyX2J5KGNvbHVtbiwgb3JkZXJpbmdfc2Vjb25kYXJ5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5vcmRlcl9ieShjb2x1bW4pCisKKyAgICAjIGluc3VyZSBvbmx5IGRpc3RpbmN0IHJlY29yZHMgKGUuZy4gZnJvbSBtdWx0aXBsZSBzZWFyY2ggaGl0cykgYXJlIHJldHVybmVkCisgICAgcmV0dXJuIHF1ZXJ5c2V0LmRpc3RpbmN0KCkKKworIyByZXR1cm5zIHRoZSB2YWx1ZSBvZiBlbnRyaWVzIHBlciBwYWdlIGFuZCB0aGUgbmFtZSBvZiB0aGUgYXBwbGllZCBzb3J0aW5nIGZpZWxkLgorIyBpZiB0aGUgdmFsdWUgaXMgZ2l2ZW4gZXhwbGljaXRseSBhcyBhIEdFVCBwYXJhbWV0ZXIgaXQgd2lsbCBiZSB0aGUgZmlyc3Qgc2VsZWN0ZWQsCisjIG90aGVyd2lzZSB0aGUgY29va2llIHZhbHVlIHdpbGwgYmUgdXNlZC4KK2RlZiBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIGRlZmF1bHRfY291bnQsIGRlZmF1bHRfb3JkZXIpOgorICAgIGN1cnJlbnRfdXJsID0gcmVzb2x2ZShyZXF1ZXN0LnBhdGhfaW5mbykudXJsX25hbWUKKyAgICBwYWdlc2l6ZSA9IHJlcXVlc3QuR0VULmdldCgnY291bnQnLCByZXF1ZXN0LnNlc3Npb24uZ2V0KCclc19jb3VudCcgJSBjdXJyZW50X3VybCwgZGVmYXVsdF9jb3VudCkpCisgICAgb3JkZXJieSA9IHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsIHJlcXVlc3Quc2Vzc2lvbi5nZXQoJyVzX29yZGVyYnknICUgY3VycmVudF91cmwsIGRlZmF1bHRfb3JkZXIpKQorICAgIHJldHVybiAocGFnZXNpemUsIG9yZGVyYnkpCisKKworIyBzZXQgY29va2llcyBmb3IgcGFyYW1ldGVycy4gdGhpcyBpcyB1c2VmdWxsIGluIGNhc2UgcGFyYW1ldGVycyBhcmUgc2V0CisjIG1hbnVhbGx5IGZyb20gdGhlIEdFVCB2YWx1ZXMgb2YgdGhlIGxpbmsKK2RlZiBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KToKKyAgICBmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmVzb2x2ZQorICAgIGN1cnJlbnRfdXJsID0gcmVzb2x2ZShyZXF1ZXN0LnBhdGhfaW5mbykudXJsX25hbWUKKyAgICByZXF1ZXN0LnNlc3Npb25bJyVzX2NvdW50JyAlIGN1cnJlbnRfdXJsXSA9IHBhZ2VzaXplCisgICAgcmVxdWVzdC5zZXNzaW9uWyclc19vcmRlcmJ5JyAlIGN1cnJlbnRfdXJsXSA9b3JkZXJieQorCisjIGRhdGUgcmFuZ2U6IG5vcm1hbGl6ZSBHVUkncyBkZC9tbS95eXl5IHRvIGRhdGUgb2JqZWN0CitkZWYgX25vcm1hbGl6ZV9pbnB1dF9kYXRlKGRhdGVfc3RyLGRlZmF1bHQpOgorICAgIGRhdGVfc3RyPXJlLnN1YignLycsICctJywgZGF0ZV9zdHIpCisgICAgIyBhY2NlcHQgZGQvbW0veXl5eSB0byBkL20veXkKKyAgICB0cnk6CisgICAgICAgIGRhdGVfaW4gPSBkYXRldGltZS5zdHJwdGltZShkYXRlX3N0ciwgIiVkLSVtLSVZIikKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgIyBjb3VydGVzeSB0cnkgd2l0aCB0d28gZGlnaXQgeWVhcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRlX2luID0gZGF0ZXRpbWUuc3RycHRpbWUoZGF0ZV9zdHIsICIlZC0lbS0leSIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBkYXRlX2luID0gZGF0ZV9pbi5yZXBsYWNlKHR6aW5mbz1kZWZhdWx0LnR6aW5mbykKKyAgICByZXR1cm4gZGF0ZV9pbgorCisjIGNvbnZlcnQgYW5kIG5vcm1hbGl6ZSBhbnkgcmVjZWl2ZWQgZGF0ZSByYW5nZSBmaWx0ZXIsIGZvciBleGFtcGxlOgorIyAiY29tcGxldGVkX29uX19ndGUhY29tcGxldGVkX29uX19sdDowMS8wMy8yMDE1ITAyLzAzLzIwMTVfZGF0ZXJhbmdlIiB0bworIyAiY29tcGxldGVkX29uX19ndGUhY29tcGxldGVkX29uX19sdDoyMDE1LTAzLTAxITIwMTUtMDMtMDIiCitkZWYgX21vZGlmeV9kYXRlX3JhbmdlX2ZpbHRlcihmaWx0ZXJfc3RyaW5nKToKKyAgICAjIHdhcyB0aGUgZGF0ZSByYW5nZSByYWRpbyBidXR0b24gc2VsZWN0ZWQ/CisgICAgaWYgMCA+ICBmaWx0ZXJfc3RyaW5nLmZpbmQoJ19kYXRlcmFuZ2UnKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcl9zdHJpbmcsJycKKyAgICAjIG5vcm1hbGl6ZSBHVUkgZGF0ZXMgdG8gZGF0YWJhc2UgZm9ybWF0CisgICAgZmlsdGVyX3N0cmluZyA9IGZpbHRlcl9zdHJpbmcucmVwbGFjZSgnX2RhdGVyYW5nZScsJycpLnJlcGxhY2UoJzonLCchJyk7CisgICAgZmlsdGVyX2xpc3QgPSBmaWx0ZXJfc3RyaW5nLnNwbGl0KCchJyk7CisgICAgaWYgNCAhPSBsZW4oZmlsdGVyX2xpc3QpOgorICAgICAgICByZXR1cm4gZmlsdGVyX3N0cmluZworICAgIHRvZGF5ID0gdGltZXpvbmUubG9jYWx0aW1lKHRpbWV6b25lLm5vdygpKQorICAgIGRhdGVfaWQgPSBmaWx0ZXJfbGlzdFsxXQorICAgIGRhdGVfZnJvbSA9IF9ub3JtYWxpemVfaW5wdXRfZGF0ZShmaWx0ZXJfbGlzdFsyXSx0b2RheSkKKyAgICBkYXRlX3RvID0gX25vcm1hbGl6ZV9pbnB1dF9kYXRlKGZpbHRlcl9saXN0WzNdLHRvZGF5KQorICAgICMgc3dhcCBkYXRlcyBpZiBtYW51YWxseSBzZXQgZGF0ZXMgYXJlIG91dCBvZiBvcmRlcgorICAgIGlmICBkYXRlX3RvIDwgZGF0ZV9mcm9tOgorICAgICAgICBkYXRlX3RvLGRhdGVfZnJvbSA9IGRhdGVfZnJvbSxkYXRlX3RvCisgICAgIyBjb252ZXJ0IHRvIHN0cmluZ3MsIG1ha2UgJ2RhdGVfdG8nIGluY2x1c2l2ZSBieSBtb3ZpbmcgdG8gYmVnaW5pbmcgb2YgbmV4dCBkYXkKKyAgICBkYXRlX2Zyb21fc3RyID0gZGF0ZV9mcm9tLnN0cmZ0aW1lKCIlWS0lbS0lZCIpCisgICAgZGF0ZV90b19zdHIgPSAoZGF0ZV90byt0aW1lZGVsdGEoZGF5cz0xKSkuc3RyZnRpbWUoIiVZLSVtLSVkIikKKyAgICBmaWx0ZXJfc3RyaW5nPWZpbHRlcl9saXN0WzBdKychJytmaWx0ZXJfbGlzdFsxXSsnOicrZGF0ZV9mcm9tX3N0cisnIScrZGF0ZV90b19zdHIKKyAgICBkYXRlcmFuZ2Vfc2VsZWN0ZWQgPSByZS5zdWIoJ19fLionLCcnLCBkYXRlX2lkKQorICAgIHJldHVybiBmaWx0ZXJfc3RyaW5nLGRhdGVyYW5nZV9zZWxlY3RlZAorCitkZWYgX2FkZF9kYXRlcmFuZ2VfY29udGV4dChxdWVyeXNldF9hbGwsIHJlcXVlc3QsIGRhdGVyYW5nZV9saXN0KToKKyAgICAjIGNhbGN1bGF0ZSB0aGUgZXhhY3QgYmVnaW5pbmcgb2YgbG9jYWwgdG9kYXkgYW5kIHllc3RlcmRheQorICAgIHRvZGF5X2JlZ2luID0gdGltZXpvbmUubG9jYWx0aW1lKHRpbWV6b25lLm5vdygpKQorICAgIHllc3RlcmRheV9iZWdpbiA9IHRvZGF5X2JlZ2luIC0gdGltZWRlbHRhKGRheXM9MSkKKyAgICAjIGFkZCBkYXRlcmFuZ2UgcGVyc2lzdGVudAorICAgIGNvbnRleHRfZGF0ZSA9IHt9CisgICAgY29udGV4dF9kYXRlWydsYXN0X2RhdGVfZnJvbSddID0gcmVxdWVzdC5HRVQuZ2V0KCdsYXN0X2RhdGVfZnJvbScsdGltZXpvbmUubG9jYWx0aW1lKHRpbWV6b25lLm5vdygpKS5zdHJmdGltZSgiJWQvJW0vJVkiKSkKKyAgICBjb250ZXh0X2RhdGVbJ2xhc3RfZGF0ZV90bycgIF0gPSByZXF1ZXN0LkdFVC5nZXQoJ2xhc3RfZGF0ZV90bycgICxjb250ZXh0X2RhdGVbJ2xhc3RfZGF0ZV9mcm9tJ10pCisgICAgIyBjYWxjdWxhdGUgdGhlIGRhdGUgcmFuZ2VzLCBhdm9pZCBzZWNvbmQgc29ydCBmb3IgJ2NyZWF0ZWQnCisgICAgIyBmZXRjaCB0aGUgcmVzcGVjdGl2ZSBtYXggcmFuZ2UgZnJvbSB0aGUgZGF0YWJhc2UKKyAgICBjb250ZXh0X2RhdGVbJ2RhdGVyYW5nZV9maWx0ZXInXT0nJworICAgIGZvciBrZXkgaW4gZGF0ZXJhbmdlX2xpc3Q6CisgICAgICAgIHF1ZXJ5c2V0X2tleSA9IHF1ZXJ5c2V0X2FsbC5vcmRlcl9ieShrZXkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRfZGF0ZVsnZGF0ZU1pbl8nK2tleV09dGltZXpvbmUubG9jYWx0aW1lKGdldGF0dHIocXVlcnlzZXRfa2V5LmZpcnN0KCksa2V5KSkuc3RyZnRpbWUoIiVkLyVtLyVZIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY29udGV4dF9kYXRlWydkYXRlTWluXycra2V5XT10aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRfZGF0ZVsnZGF0ZU1heF8nK2tleV09dGltZXpvbmUubG9jYWx0aW1lKGdldGF0dHIocXVlcnlzZXRfa2V5Lmxhc3QoKSxrZXkpKS5zdHJmdGltZSgiJWQvJW0vJVkiKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBjb250ZXh0X2RhdGVbJ2RhdGVNYXhfJytrZXldPXRpbWV6b25lLmxvY2FsdGltZSh0aW1lem9uZS5ub3coKSkKKyAgICByZXR1cm4gY29udGV4dF9kYXRlLHRvZGF5X2JlZ2luLHllc3RlcmRheV9iZWdpbgorCisKKyMjCisjIGJ1aWxkIGRhc2hib2FyZCBmb3IgYSBzaW5nbGUgYnVpbGQsIGNvbWluZyBpbiBhcyBhcmd1bWVudAorIyBFYWNoIGJ1aWxkIG1heSBjb250YWluIG11bHRpcGxlIHRhcmdldHMgYW5kIGVhY2ggdGFyZ2V0CisjIG1heSBnZW5lcmF0ZSBtdWx0aXBsZSBpbWFnZSBmaWxlcy4gZGlzcGxheSB0aGVtIGFsbC4KKyMKK2RlZiBidWlsZGRhc2hib2FyZCggcmVxdWVzdCwgYnVpbGRfaWQgKToKKyAgICB0ZW1wbGF0ZSA9ICJidWlsZGRhc2hib2FyZC5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKCBwaz1idWlsZF9pZCApLmNvdW50KCApID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoIGJ1aWxkcyApCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldCggcGsgPSBidWlsZF9pZCApOworICAgIGxheWVyVmVyc2lvbklkID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlciggYnVpbGQgPSBidWlsZF9pZCApOworICAgIHJlY2lwZUNvdW50ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKCBsYXllcl92ZXJzaW9uX19pZF9faW4gPSBsYXllclZlcnNpb25JZCApLmNvdW50KCApOworICAgIHRndHMgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoIGJ1aWxkX2lkID0gYnVpbGRfaWQgKS5vcmRlcl9ieSggJ3RhcmdldCcgKTsKKworICAgICMjCisgICAgIyBzZXQgdXAgY3VzdG9tIHRhcmdldCBsaXN0IHdpdGggY29tcHV0ZWQgcGFja2FnZSBhbmQgaW1hZ2UgZGF0YQorICAgICMKKworICAgIHRhcmdldHMgPSBbIF0KKyAgICBudGFyZ2V0cyA9IDAKKyAgICBoYXNJbWFnZXMgPSBGYWxzZQorICAgIHRhcmdldEhhc05vSW1hZ2VzID0gRmFsc2UKKyAgICBmb3IgdCBpbiB0Z3RzOgorICAgICAgICBlbGVtID0geyB9CisgICAgICAgIGVsZW1bICd0YXJnZXQnIF0gPSB0CisgICAgICAgIGlmICggdC5pc19pbWFnZSApOgorICAgICAgICAgICAgaGFzSW1hZ2VzID0gVHJ1ZQorICAgICAgICBucGtnID0gMAorICAgICAgICBwa2dzeiA9IDAKKyAgICAgICAgcGFja2FnZSA9IE5vbmUKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpZF9faW4gPSBbeC5wYWNrYWdlX2lkIGZvciB4IGluIHQudGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlX3NldC5hbGwoKV0pOgorICAgICAgICAgICAgcGtnc3ogPSBwa2dzeiArIHBhY2thZ2Uuc2l6ZQorICAgICAgICAgICAgaWYgKCBwYWNrYWdlLmluc3RhbGxlZF9uYW1lICk6CisgICAgICAgICAgICAgICAgbnBrZyA9IG5wa2cgKyAxCisgICAgICAgIGVsZW1bICducGtnJyBdID0gbnBrZworICAgICAgICBlbGVtWyAncGtnc3onIF0gPSBwa2dzegorICAgICAgICB0aSA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKCB0YXJnZXRfaWQgPSB0LmlkICkKKyAgICAgICAgaW1hZ2VGaWxlcyA9IFsgXQorICAgICAgICBmb3IgaSBpbiB0aToKKyAgICAgICAgICAgIG5keCA9IGkuZmlsZV9uYW1lLnJmaW5kKCAnLycgKQorICAgICAgICAgICAgaWYgKCBuZHggPCAwICk6CisgICAgICAgICAgICAgICAgbmR4ID0gMDsKKyAgICAgICAgICAgIGYgPSBpLmZpbGVfbmFtZVsgbmR4ICsgMTogXQorICAgICAgICAgICAgaW1hZ2VGaWxlcy5hcHBlbmQoeyAnaWQnOiBpLmlkLCAncGF0aCc6IGYsICdzaXplJyA6IGkuZmlsZV9zaXplIH0pCisgICAgICAgIGlmICggdC5pc19pbWFnZSBhbmQKKyAgICAgICAgICAgICAoKCBsZW4oIGltYWdlRmlsZXMgKSA8PSAwICkgb3IgKCBsZW4oIHQubGljZW5zZV9tYW5pZmVzdF9wYXRoICkgPD0gMCApKSk6CisgICAgICAgICAgICB0YXJnZXRIYXNOb0ltYWdlcyA9IFRydWUKKyAgICAgICAgZWxlbVsgJ2ltYWdlRmlsZXMnIF0gPSBpbWFnZUZpbGVzCisgICAgICAgIGVsZW1bICd0YXJnZXRIYXNOb0ltYWdlcycgXSA9IHRhcmdldEhhc05vSW1hZ2VzCisgICAgICAgIHRhcmdldHMuYXBwZW5kKCBlbGVtICkKKworICAgICMjCisgICAgIyBob3cgbWFueSBwYWNrYWdlcyBpbiB0aGlzIGJ1aWxkIC0gaWdub3JlIGFub255bW91cyBvbmVzCisgICAgIworCisgICAgcGFja2FnZUNvdW50ID0gMAorICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlciggYnVpbGRfaWQgPSBidWlsZF9pZCApCisgICAgZm9yIHAgaW4gcGFja2FnZXM6CisgICAgICAgIGlmICggcC5pbnN0YWxsZWRfbmFtZSApOgorICAgICAgICAgICAgcGFja2FnZUNvdW50ID0gcGFja2FnZUNvdW50ICsgMQorCisgICAgbG9nbWVzc2FnZXMgPSBsaXN0KExvZ01lc3NhZ2Uub2JqZWN0cy5maWx0ZXIoIGJ1aWxkID0gYnVpbGRfaWQgKSkKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgICAgICAgICA6IGJ1aWxkLAorICAgICAgICAgICAgJ2hhc0ltYWdlcycgICAgICAgOiBoYXNJbWFnZXMsCisgICAgICAgICAgICAnbnRhcmdldHMnICAgICAgICA6IG50YXJnZXRzLAorICAgICAgICAgICAgJ3RhcmdldHMnICAgICAgICAgOiB0YXJnZXRzLAorICAgICAgICAgICAgJ3JlY2lwZWNvdW50JyAgICAgOiByZWNpcGVDb3VudCwKKyAgICAgICAgICAgICdwYWNrYWdlY291bnQnICAgIDogcGFja2FnZUNvdW50LAorICAgICAgICAgICAgJ2xvZ21lc3NhZ2VzJyAgICAgOiBsb2dtZXNzYWdlcywKKyAgICB9CisgICAgcmV0dXJuIHJlbmRlciggcmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQgKQorCisKKworZGVmIGdlbmVyYXRlQ292ZXJlZExpc3QyKCByZXZsaXN0ID0gTm9uZSApOgorICAgIGlmIG5vdCByZXZsaXN0OgorICAgICAgICByZXZsaXN0ID0gW10KKyAgICBjb3ZlcmVkX2xpc3QgPSAgWyB4IGZvciB4IGluIHJldmxpc3QgaWYgeC5vdXRjb21lID09IFRhc2suT1VUQ09NRV9DT1ZFUkVEIF0KKyAgICB3aGlsZSBsZW4oY292ZXJlZF9saXN0KToKKyAgICAgICAgcmV2bGlzdCA9ICBbIHggZm9yIHggaW4gcmV2bGlzdCBpZiB4Lm91dGNvbWUgIT0gVGFzay5PVVRDT01FX0NPVkVSRUQgXQorICAgICAgICBpZiBsZW4ocmV2bGlzdCkgPiAwOgorICAgICAgICAgICAgcmV0dXJuIHJldmxpc3QKKworICAgICAgICBuZXdsaXN0ID0gX2ZpbmRfdGFza19yZXZkZXBfbGlzdChjb3ZlcmVkX2xpc3QpCisKKyAgICAgICAgcmV2bGlzdCA9IGxpc3Qoc2V0KHJldmxpc3QgKyBuZXdsaXN0KSkKKyAgICAgICAgY292ZXJlZF9saXN0ID0gIFsgeCBmb3IgeCBpbiByZXZsaXN0IGlmIHgub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCBdCisgICAgcmV0dXJuIHJldmxpc3QKKworZGVmIHRhc2soIHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXNrX2lkICk6CisgICAgdGVtcGxhdGUgPSAidGFzay5odG1sIgorICAgIHRhc2tzX2xpc3QgPSBUYXNrLm9iamVjdHMuZmlsdGVyKCBwaz10YXNrX2lkICkKKyAgICBpZiB0YXNrc19saXN0LmNvdW50KCApID09IDA6CisgICAgICAgIHJldHVybiByZWRpcmVjdCggYnVpbGRzICkKKyAgICB0YXNrX29iamVjdCA9IHRhc2tzX2xpc3RbIDAgXTsKKyAgICBkZXBlbmRlbmNpZXMgPSBzb3J0ZWQoCisgICAgICAgIF9maW5kX3Rhc2tfZGVwKCB0YXNrX29iamVjdCApLAorICAgICAgICBrZXk9bGFtYmRhIHQ6JyVzXyVzICVzJyUodC5yZWNpcGUubmFtZSwgdC5yZWNpcGUudmVyc2lvbiwgdC50YXNrX25hbWUpKQorICAgIHJldmVyc2VfZGVwZW5kZW5jaWVzID0gc29ydGVkKAorICAgICAgICBfZmluZF90YXNrX3JldmRlcCggdGFza19vYmplY3QgKSwKKyAgICAgICAga2V5PWxhbWJkYSB0Oiclc18lcyAlcyclKCB0LnJlY2lwZS5uYW1lLCB0LnJlY2lwZS52ZXJzaW9uLCB0LnRhc2tfbmFtZSApKQorICAgIGNvdmVyZWRCeSA9ICcnOworICAgIGlmICggdGFza19vYmplY3Qub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCApOgorIyAgICAgICAgX2xpc3QgPSBnZW5lcmF0ZUNvdmVyZWRMaXN0KCB0YXNrICkKKyAgICAgICAgY292ZXJlZEJ5ID0gc29ydGVkKGdlbmVyYXRlQ292ZXJlZExpc3QyKCBfZmluZF90YXNrX3JldmRlcCggdGFza19vYmplY3QgKSApLCBrZXkgPSBsYW1iZGEgeDogeC5yZWNpcGUubmFtZSkKKyAgICBsb2dfaGVhZCA9ICcnCisgICAgbG9nX2JvZHkgPSAnJworICAgIGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gdGFza19vYmplY3QuT1VUQ09NRV9GQUlMRUQ6CisgICAgICAgIHBhc3MKKworICAgIHVyaV9saXN0PSBbIF0KKyAgICB2YXJpYWJsZXMgPSBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCkKKyAgICB2PXZhcmlhYmxlcy5maWx0ZXIodmFyaWFibGVfbmFtZT0nU1NUQVRFX0RJUicpCisgICAgaWYgdi5jb3VudCgpID4gMDoKKyAgICAgICAgdXJpX2xpc3QuYXBwZW5kKHZbMF0udmFyaWFibGVfdmFsdWUpCisgICAgdj12YXJpYWJsZXMuZmlsdGVyKHZhcmlhYmxlX25hbWU9J1NTVEFURV9NSVJST1JTJykKKyAgICBpZiAodi5jb3VudCgpID4gMCk6CisgICAgICAgIGZvciBtaXJyb3IgaW4gdlswXS52YXJpYWJsZV92YWx1ZS5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICBzPXJlLnN1YignLiogJywnJyxtaXJyb3Iuc3RyaXAoJyBcdFxuXHInKSkKKyAgICAgICAgICAgIGlmIGxlbihzKToKKyAgICAgICAgICAgICAgICB1cmlfbGlzdC5hcHBlbmQocykKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgICAgICAgICA6IEJ1aWxkLm9iamVjdHMuZmlsdGVyKCBwayA9IGJ1aWxkX2lkIClbIDAgXSwKKyAgICAgICAgICAgICdvYmplY3QnICAgICAgICAgIDogdGFza19vYmplY3QsCisgICAgICAgICAgICAndGFzaycgICAgICAgICAgICA6IHRhc2tfb2JqZWN0LAorICAgICAgICAgICAgJ2NvdmVyZWRfYnknICAgICAgOiBjb3ZlcmVkQnksCisgICAgICAgICAgICAnZGVwcycgICAgICAgICAgICA6IGRlcGVuZGVuY2llcywKKyAgICAgICAgICAgICdyZGVwcycgICAgICAgICAgIDogcmV2ZXJzZV9kZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAnbG9nX2hlYWQnICAgICAgICA6IGxvZ19oZWFkLAorICAgICAgICAgICAgJ2xvZ19ib2R5JyAgICAgICAgOiBsb2dfYm9keSwKKyAgICAgICAgICAgICdzaG93aW5nX21hdGNoZXMnIDogRmFsc2UsCisgICAgICAgICAgICAndXJpX2xpc3QnICAgICAgICA6IHVyaV9saXN0LAorICAgIH0KKyAgICBpZiByZXF1ZXN0LkdFVC5nZXQoICdzaG93X21hdGNoZXMnLCAiIiApOgorICAgICAgICBjb250ZXh0WyAnc2hvd2luZ19tYXRjaGVzJyBdID0gVHJ1ZQorICAgICAgICBjb250ZXh0WyAnbWF0Y2hpbmdfdGFza3MnIF0gPSBUYXNrLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgc3N0YXRlX2NoZWNrc3VtPXRhc2tfb2JqZWN0LnNzdGF0ZV9jaGVja3N1bSApLmZpbHRlcigKKyAgICAgICAgICAgIGJ1aWxkX19jb21wbGV0ZWRfb25fX2x0PXRhc2tfb2JqZWN0LmJ1aWxkLmNvbXBsZXRlZF9vbikuZXhjbHVkZSgKKyAgICAgICAgICAgIG9yZGVyX19pc251bGw9VHJ1ZSkuZXhjbHVkZShvdXRjb21lPVRhc2suT1VUQ09NRV9OQSkub3JkZXJfYnkoJy1idWlsZF9fY29tcGxldGVkX29uJykKKworICAgIHJldHVybiByZW5kZXIoIHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0ICkKKworZGVmIHJlY2lwZShyZXF1ZXN0LCBidWlsZF9pZCwgcmVjaXBlX2lkLCBhY3RpdmVfdGFiPSIxIik6CisgICAgdGVtcGxhdGUgPSAicmVjaXBlLmh0bWwiCisgICAgaWYgUmVjaXBlLm9iamVjdHMuZmlsdGVyKHBrPXJlY2lwZV9pZCkuY291bnQoKSA9PSAwIDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KGJ1aWxkcykKKworICAgIHJlY2lwZV9vYmplY3QgPSBSZWNpcGUub2JqZWN0cy5nZXQocGs9cmVjaXBlX2lkKQorICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPXJlY2lwZV9vYmplY3QubGF5ZXJfdmVyc2lvbl9pZCkKKyAgICBsYXllciAgPSBMYXllci5vYmplY3RzLmdldChwaz1sYXllcl92ZXJzaW9uLmxheWVyX2lkKQorICAgIHRhc2tzX2xpc3QgID0gVGFzay5vYmplY3RzLmZpbHRlcihyZWNpcGVfaWQgPSByZWNpcGVfaWQsIGJ1aWxkX2lkID0gYnVpbGRfaWQpLmV4Y2x1ZGUob3JkZXJfX2lzbnVsbD1UcnVlKS5leGNsdWRlKHRhc2tfbmFtZV9fZW5kc3dpdGg9J19zZXRzY2VuZScpLmV4Y2x1ZGUob3V0Y29tZT1UYXNrLk9VVENPTUVfTkEpCisgICAgcGFja2FnZV9jb3VudCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIocmVjaXBlX2lkID0gcmVjaXBlX2lkKS5maWx0ZXIoYnVpbGRfaWQgPSBidWlsZF9pZCkuZmlsdGVyKHNpemVfX2d0ZT0wKS5jb3VudCgpCisKKyAgICBpZiBhY3RpdmVfdGFiICE9ICcxJyBhbmQgYWN0aXZlX3RhYiAhPSAnMycgYW5kIGFjdGl2ZV90YWIgIT0gJzQnIDoKKyAgICAgICAgYWN0aXZlX3RhYiA9ICcxJworICAgIHRhYl9zdGF0ZXMgPSB7JzEnOiAnJywgJzMnOiAnJywgJzQnOiAnJ30KKyAgICB0YWJfc3RhdGVzW2FjdGl2ZV90YWJdID0gJ2FjdGl2ZScKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAnb2JqZWN0JyAgOiByZWNpcGVfb2JqZWN0LAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nIDogbGF5ZXJfdmVyc2lvbiwKKyAgICAgICAgICAgICdsYXllcicgICA6IGxheWVyLAorICAgICAgICAgICAgJ3Rhc2tzJyAgIDogdGFza3NfbGlzdCwKKyAgICAgICAgICAgICdwYWNrYWdlX2NvdW50JyA6IHBhY2thZ2VfY291bnQsCisgICAgICAgICAgICAndGFiX3N0YXRlcycgOiB0YWJfc3RhdGVzLAorICAgIH0KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCitkZWYgcmVjaXBlX3BhY2thZ2VzKHJlcXVlc3QsIGJ1aWxkX2lkLCByZWNpcGVfaWQpOgorICAgIHRlbXBsYXRlID0gInJlY2lwZV9wYWNrYWdlcy5odG1sIgorICAgIGlmIFJlY2lwZS5vYmplY3RzLmZpbHRlcihwaz1yZWNpcGVfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAxMCwgJ25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdyZWNpcGVfcGFja2FnZXMnLCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQsIHJlY2lwZV9pZCA9IHJlY2lwZV9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2UpCisKKyAgICByZWNpcGVfb2JqZWN0ID0gUmVjaXBlLm9iamVjdHMuZ2V0KHBrPXJlY2lwZV9pZCkKKyAgICBxdWVyeXNldCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIocmVjaXBlX2lkID0gcmVjaXBlX2lkKS5maWx0ZXIoYnVpbGRfaWQgPSBidWlsZF9pZCkuZmlsdGVyKHNpemVfX2d0ZT0wKQorICAgIHBhY2thZ2VfY291bnQgPSBxdWVyeXNldC5jb3VudCgpCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScpCisKKyAgICBwYWNrYWdlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgICA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdyZWNpcGUnICA6IHJlY2lwZV9vYmplY3QsCisgICAgICAgICAgICAnb2JqZWN0cycgIDogcGFja2FnZXMsCisgICAgICAgICAgICAnb2JqZWN0X2NvdW50JyA6IHBhY2thZ2VfY291bnQsCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsIm5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwibmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknOiAibmFtZSIsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonVmVyc2lvbicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzogX2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCJzaXplIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleSc6ICdzaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzaXplY29sIHNwYW4yJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICBdCisgICAgICAgfQorICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCB2YXJpYW50ICk6CisgICAgdGVtcGxhdGUgPSAidGFyZ2V0Lmh0bWwiCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICduYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2lkID0gYnVpbGRfaWQsIHRhcmdldF9pZCA9IHRhcmdldF9pZCApCisgICAgKCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nICkgPSBfc2VhcmNoX3R1cGxlKCByZXF1ZXN0LCBQYWNrYWdlICkKKworICAgICMgRlVUVVJFOiAgZ2V0IHJpZCBvZiBuZXN0ZWQgc3ViLXF1ZXJpZXMgcmVwbGFjaW5nIHdpdGggTWFueVRvTWFueSBmaWVsZAorICAgIHF1ZXJ5c2V0ID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV9fZ3RlID0gMCwKKyAgICAgICAgICAgICAgICAgICAgaWRfX2luID0gVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLm9iamVjdHMuZmlsdGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkPXRhcmdldF9pZCApLnZhbHVlcyggJ3BhY2thZ2VfaWQnICkpCisgICAgcGFja2FnZXNfc3VtID0gIHF1ZXJ5c2V0LmFnZ3JlZ2F0ZSggU3VtKCAnaW5zdGFsbGVkX3NpemUnICkpCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KAorICAgICAgICAgICAgUGFja2FnZSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICduYW1lJyApCisgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5zZWxlY3RfcmVsYXRlZCgicmVjaXBlIiwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbiIsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyIikKKyAgICBwYWNrYWdlcyA9IF9idWlsZF9wYWdlX3JhbmdlKCBQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCAncGFnZScsIDEgKSkKKworCisKKyAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KCBwayA9IGJ1aWxkX2lkICkKKworICAgICMgYnJpbmcgaW4gcGFja2FnZSBkZXBlbmRlbmNpZXMKKyAgICBmb3IgcCBpbiBwYWNrYWdlcy5vYmplY3RfbGlzdDoKKyAgICAgICAgcC5ydW50aW1lX2RlcGVuZGVuY2llcyA9IHAucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmZpbHRlcigKKyAgICAgICAgICAgIHRhcmdldF9pZCA9IHRhcmdldF9pZCwgZGVwX3R5cGU9UGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTICkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iKQorICAgICAgICBwLnJldmVyc2VfcnVudGltZV9kZXBlbmRlbmNpZXMgPSBwLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldC5maWx0ZXIoCisgICAgICAgICAgICB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUyApLnNlbGVjdF9yZWxhdGVkKCJwYWNrYWdlIikKKyAgICB0Y19wYWNrYWdlID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnUGFja2FnZScsCisgICAgICAgICdxaGVscCcgICAgICA6ICdQYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgYSByZWNpcGUgaW5jbHVkZWQgaW4gdGhpcyBpbWFnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAibmFtZSIgKSwKKyAgICAgICAgJ29yZGVyaWNvbicgIDogX2dldF90b2dnbGVfb3JkZXJfaWNvbiggcmVxdWVzdCwgIm5hbWUiICksCisgICAgICAgIH0KKyAgICB0Y19wYWNrYWdlVmVyc2lvbiA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1BhY2thZ2UgdmVyc2lvbicsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgcGFja2FnZSB2ZXJzaW9uIGFuZCByZXZpc2lvbicsCisgICAgICAgIH0KKyAgICB0Y19zaXplID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnU2l6ZScsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgc2l6ZSBvZiB0aGUgcGFja2FnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAic2l6ZSIsIFRydWUgKSwKKyAgICAgICAgJ29yZGVyaWNvbicgIDogX2dldF90b2dnbGVfb3JkZXJfaWNvbiggcmVxdWVzdCwgInNpemUiICksCisgICAgICAgICdvcmRlcmtleScgICA6ICdzaXplJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ3NpemUnLAorICAgICAgICAnZGNsYXNzJyAgICAgOiAnc3BhbjInLAorICAgICAgICB9CisgICAgaWYgKCB2YXJpYW50ID09ICd0YXJnZXQnICk6CisgICAgICAgIHRjX3NpemVbICJoaWRkZW4iIF0gPSAwCisgICAgZWxzZToKKyAgICAgICAgdGNfc2l6ZVsgImhpZGRlbiIgXSA9IDEKKyAgICB0Y19zaXplUGVyY2VudGFnZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1NpemUgb3ZlciB0b3RhbCAoJSknLAorICAgICAgICAncWhlbHAnICAgICAgOiAnUHJvcG9ydGlvbiBvZiB0aGUgb3ZlcmFsbCBzaXplIHJlcHJlc2VudGVkIGJ5IHRoaXMgcGFja2FnZScsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdzaXplX292ZXJfdG90YWwnLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAorICAgICAgICB9CisgICAgdGNfbGljZW5zZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0xpY2Vuc2UnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIHBhY2thZ2UgaXMgZGlzdHJpYnV0ZWQuIFNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdVwKK3NpbmcgfCAocGlwZSkgbWVhbnMgdGhlcmUgaXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4gU2VwYXJhdGUgbGljZW5zZSBuYW1lcyB1c2luZyAmIChhbXBlcnNhbmQpIG1cCitlYW5zIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0IHRoYXQgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgImxpY2Vuc2UiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJsaWNlbnNlIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAnbGljZW5zZScsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdsaWNlbnNlJywKKyAgICAgICAgfQorICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgorICAgICAgICB0Y19saWNlbnNlWyAiaGlkZGVuIiBdID0gMQorICAgIGVsc2U6CisgICAgICAgIHRjX2xpY2Vuc2VbICJoaWRkZW4iIF0gPSAwCisgICAgdGNfZGVwZW5kZW5jaWVzID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnRGVwZW5kZW5jaWVzJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogIlBhY2thZ2UgcnVudGltZSBkZXBlbmRlbmNpZXMgKG90aGVyIHBhY2thZ2VzKSIsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdkZXBlbmRzJywKKyAgICAgICAgfQorICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgorICAgICAgICB0Y19kZXBlbmRlbmNpZXNbICJoaWRkZW4iIF0gPSAwCisgICAgZWxzZToKKyAgICAgICAgdGNfZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMQorICAgIHRjX3JkZXBlbmRlbmNpZXMgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdSZXZlcnNlIGRlcGVuZGVuY2llcycsCisgICAgICAgICdxaGVscCcgICAgICA6ICdQYWNrYWdlIHJ1bi10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHdoaWNoIG90aGVyIHBhY2thZ2VzIGRlcGVuZCBvbiB0aGlzIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnYnJvdWdodF9pbl9ieScsCisgICAgICAgIH0KKyAgICBpZiAoIHZhcmlhbnQgPT0gJ3RhcmdldCcgKToKKyAgICAgICAgdGNfcmRlcGVuZGVuY2llc1sgImhpZGRlbiIgXSA9IDAKKyAgICBlbHNlOgorICAgICAgICB0Y19yZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMQorICAgIHRjX3JlY2lwZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1JlY2lwZScsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ29yZGVyZmllbGQnIDogX2dldF90b2dnbGVfb3JkZXIoIHJlcXVlc3QsICJyZWNpcGVfX25hbWUiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX25hbWUiICksCisgICAgICAgICdvcmRlcmtleScgICA6ICJyZWNpcGVfX25hbWUiLAorICAgICAgICAnY2xjbGFzcycgICAgOiAncmVjaXBlX25hbWUnLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAwLAorICAgICAgICB9CisgICAgdGNfcmVjaXBlVmVyc2lvbiA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1JlY2lwZSB2ZXJzaW9uJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1ZlcnNpb24gYW5kIHJldmlzaW9uIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhlIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAncmVjaXBlX3ZlcnNpb24nLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAorICAgICAgICB9CisgICAgdGNfbGF5ZXIgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdMYXllcicsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdsYXllcl9uYW1lJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorICAgIHRjX2xheWVyQnJhbmNoID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnTGF5ZXIgYnJhbmNoJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1RoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIgKSwKKyAgICAgICAgJ29yZGVya2V5JyAgIDogInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiwKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ2xheWVyX2JyYW5jaCcsCisgICAgICAgICdoaWRkZW4nICAgICA6IDEsCisgICAgICAgIH0KKyAgICB0Y19sYXllckNvbW1pdCA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0xheWVyIGNvbW1pdCcsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnbGF5ZXJfY29tbWl0JywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgJ29iamVjdG5hbWUnOiB2YXJpYW50LAorICAgICAgICAnYnVpbGQnICAgICAgICAgICAgICAgIDogYnVpbGQsCisgICAgICAgICd0YXJnZXQnICAgICAgICAgICAgICAgOiBUYXJnZXQub2JqZWN0cy5maWx0ZXIoIHBrID0gdGFyZ2V0X2lkIClbIDAgXSwKKyAgICAgICAgJ29iamVjdHMnICAgICAgICAgICAgICA6IHBhY2thZ2VzLAorICAgICAgICAncGFja2FnZXNfc3VtJyAgICAgICAgIDogcGFja2FnZXNfc3VtWyAnaW5zdGFsbGVkX3NpemVfX3N1bScgXSwKKyAgICAgICAgJ29iamVjdF9zZWFyY2hfZGlzcGxheSc6ICJwYWNrYWdlcyBpbmNsdWRlZCIsCisgICAgICAgICdkZWZhdWx0X29yZGVyYnknICAgICAgOiBvcmRlcmJ5LAorICAgICAgICAndGFibGVjb2xzJyAgICAgICAgICAgIDogWworICAgICAgICAgICAgICAgICAgICB0Y19wYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICB0Y19wYWNrYWdlVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgdGNfbGljZW5zZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfc2l6ZVBlcmNlbnRhZ2UsCisgICAgICAgICAgICAgICAgICAgIHRjX2RlcGVuZGVuY2llcywKKyAgICAgICAgICAgICAgICAgICAgdGNfcmRlcGVuZGVuY2llcywKKyAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICB0Y19yZWNpcGVWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICB0Y19sYXllciwKKyAgICAgICAgICAgICAgICAgICAgdGNfbGF5ZXJCcmFuY2gsCisgICAgICAgICAgICAgICAgICAgIHRjX2xheWVyQ29tbWl0LAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgfQorCisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgdGFyZ2V0KCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkICk6CisgICAgcmV0dXJuKCB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCAidGFyZ2V0IiApKQorCitkZWYgdGFyZ2V0cGtnKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkICk6CisgICAgcmV0dXJuKCB0YXJnZXRfY29tbW9uKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCAidGFyZ2V0cGtnIiApKQorCitmcm9tIGRqYW5nby5jb3JlLnNlcmlhbGl6ZXJzLmpzb24gaW1wb3J0IERqYW5nb0pTT05FbmNvZGVyCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2UKK2RlZiB4aHJfZGlyaW5mbyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkKToKKyAgICB0b3AgPSByZXF1ZXN0LkdFVC5nZXQoJ3N0YXJ0JywgJy8nKQorICAgIHJldHVybiBIdHRwUmVzcG9uc2UoX2dldF9kaXJfZW50cmllcyhidWlsZF9pZCwgdGFyZ2V0X2lkLCB0b3ApLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKK2Zyb20gZGphbmdvLnV0aWxzLmZ1bmN0aW9uYWwgaW1wb3J0IFByb21pc2UKK2Zyb20gZGphbmdvLnV0aWxzLmVuY29kaW5nIGltcG9ydCBmb3JjZV90ZXh0CitjbGFzcyBMYXp5RW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKyAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgUHJvbWlzZSk6CisgICAgICAgICAgICByZXR1cm4gZm9yY2VfdGV4dChvYmopCisgICAgICAgIHJldHVybiBzdXBlcihMYXp5RW5jb2Rlciwgc2VsZikuZGVmYXVsdChvYmopCisKK2Zyb20gdG9hc3Rlcmd1aS50ZW1wbGF0ZXRhZ3MucHJvamVjdHRhZ3MgaW1wb3J0IGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0CitpbXBvcnQgb3MKK2RlZiBfZ2V0X2Rpcl9lbnRyaWVzKGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHN0YXJ0KToKKyAgICBub2RlX3N0ciA9IHsKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfUkVHVUxBUiAgIDogJy0nLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9ESVJFQ1RPUlkgOiAnZCcsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX1NZTUxJTksgICA6ICdsJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfU09DS0VUICAgIDogJ3MnLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9GSUZPICAgICAgOiAncCcsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX0NIQVJBQ1RFUiA6ICdjJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfQkxPQ0sgICAgIDogJ2InLAorICAgIH0KKyAgICByZXNwb25zZSA9IFtdCisgICAgb2JqZWN0cyAgPSBUYXJnZXRfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfX2V4YWN0PXRhcmdldF9pZCwgZGlyZWN0b3J5X19wYXRoPXN0YXJ0KQorICAgIHRhcmdldF9wYWNrYWdlcyA9IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfX2V4YWN0PXRhcmdldF9pZCkudmFsdWVzX2xpc3QoJ3BhY2thZ2VfaWQnLCBmbGF0PVRydWUpCisgICAgZm9yIG8gaW4gb2JqZWN0czoKKyAgICAgICAgIyBleGNsdWRlIHJvb3QgaW5vZGUgJy8nCisgICAgICAgIGlmIG8ucGF0aCA9PSAnLyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbnRyeSA9IHt9CisgICAgICAgICAgICBlbnRyeVsncGFyZW50J10gPSBzdGFydAorICAgICAgICAgICAgZW50cnlbJ25hbWUnXSA9IG9zLnBhdGguYmFzZW5hbWUoby5wYXRoKQorICAgICAgICAgICAgZW50cnlbJ2Z1bGxwYXRoJ10gPSBvLnBhdGgKKworICAgICAgICAgICAgIyBzZXQgZGVmYXVsdHMsIG5vdCBhbGwgZGVudHJpZXMgaGF2ZSBwYWNrYWdlcworICAgICAgICAgICAgZW50cnlbJ2luc3RhbGxlZF9wYWNrYWdlJ10gPSBOb25lCisgICAgICAgICAgICBlbnRyeVsncGFja2FnZV9pZCddID0gTm9uZQorICAgICAgICAgICAgZW50cnlbJ3BhY2thZ2UnXSA9IE5vbmUKKyAgICAgICAgICAgIGVudHJ5WydsaW5rX3RvJ10gPSBOb25lCisgICAgICAgICAgICBpZiBvLmlub2RldHlwZSA9PSBUYXJnZXRfRmlsZS5JVFlQRV9ESVJFQ1RPUlk6CisgICAgICAgICAgICAgICAgZW50cnlbJ2lzZGlyJ10gPSAxCisgICAgICAgICAgICAgICAgIyBpcyB0aGVyZSBjb250ZW50IGluIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIGVudHJ5WydjaGlsZGNvdW50J10gPSBUYXJnZXRfRmlsZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfX2V4YWN0PXRhcmdldF9pZCwgZGlyZWN0b3J5X19wYXRoPW8ucGF0aCkuYWxsKCkuY291bnQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnRyeVsnaXNkaXInXSA9IDAKKworICAgICAgICAgICAgICAgICMgcmVzb2x2ZSB0aGUgZmlsZSB0byBnZXQgdGhlIHBhY2thZ2UgZnJvbSB0aGUgcmVzb2x2ZWQgZmlsZQorICAgICAgICAgICAgICAgIHJlc29sdmVkX2lkID0gby5zeW1fdGFyZ2V0X2lkCisgICAgICAgICAgICAgICAgcmVzb2x2ZWRfcGF0aCA9IG8ucGF0aAorICAgICAgICAgICAgICAgIGlmIHRhcmdldF9wYWNrYWdlcy5jb3VudCgpOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSByZXNvbHZlZF9pZCAhPSAiIiBhbmQgcmVzb2x2ZWRfaWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRmID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5nZXQocGs9cmVzb2x2ZWRfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZF9wYXRoID0gdGYucGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRfaWQgPSB0Zi5zeW1fdGFyZ2V0X2lkCisKKyAgICAgICAgICAgICAgICAgICAgdGhpc2ZpbGU9UGFja2FnZV9GaWxlLm9iamVjdHMuYWxsKCkuZmlsdGVyKHBhdGhfX2V4YWN0PXJlc29sdmVkX3BhdGgsIHBhY2thZ2VfaWRfX2luPXRhcmdldF9wYWNrYWdlcykKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhpc2ZpbGUuY291bnQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPXRoaXNmaWxlWzBdLnBhY2thZ2VfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVsnaW5zdGFsbGVkX3BhY2thZ2UnXSA9IHAuaW5zdGFsbGVkX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5WydwYWNrYWdlX2lkJ10gPSBzdHIocC5pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5WydwYWNrYWdlJ10gPSBwLm5hbWUKKyAgICAgICAgICAgICAgICAjIGRvbid0IHVzZSByZXNvbHZlZCBwYXRoIGZyb20gYWJvdmUsIHNob3cgaW1tZWRpYXRlIGxpbmstdG8KKyAgICAgICAgICAgICAgICBpZiBvLnN5bV90YXJnZXRfaWQgIT0gIiIgYW5kIG8uc3ltX3RhcmdldF9pZCAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICBlbnRyeVsnbGlua190byddID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5nZXQocGs9by5zeW1fdGFyZ2V0X2lkKS5wYXRoCisgICAgICAgICAgICBlbnRyeVsnc2l6ZSddID0gZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQoby5zaXplKQorICAgICAgICAgICAgaWYgZW50cnlbJ2xpbmtfdG8nXSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGVudHJ5WydwZXJtaXNzaW9uJ10gPSBub2RlX3N0cltvLmlub2RldHlwZV0gKyBvLnBlcm1pc3Npb24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW50cnlbJ3Blcm1pc3Npb24nXSA9IG5vZGVfc3RyW28uaW5vZGV0eXBlXSArIG8ucGVybWlzc2lvbgorICAgICAgICAgICAgZW50cnlbJ293bmVyJ10gPSBvLm93bmVyCisgICAgICAgICAgICBlbnRyeVsnZ3JvdXAnXSA9IG8uZ3JvdXAKKyAgICAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChlbnRyeSkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCAiRXhjZXB0aW9uICIsIGUKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZSkKKworICAgICMgc29ydCBieSBkaXJlY3RvcmllcyBmaXJzdCwgdGhlbiBieSBuYW1lCisgICAgcnNvcnRlZCA9IHNvcnRlZChyZXNwb25zZSwga2V5PWxhbWJkYSBlbnRyeSA6ICBlbnRyeVsnbmFtZSddKQorICAgIHJzb3J0ZWQgPSBzb3J0ZWQocnNvcnRlZCwga2V5PWxhbWJkYSBlbnRyeSA6ICBlbnRyeVsnaXNkaXInXSwgcmV2ZXJzZT1UcnVlKQorICAgIHJldHVybiBqc29uLmR1bXBzKHJzb3J0ZWQsIGNscz1MYXp5RW5jb2RlcikucmVwbGFjZSgnPC8nLCAnPFxcLycpCisKK2RlZiBkaXJpbmZvKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIGZpbGVfcGF0aD1Ob25lKToKKyAgICB0ZW1wbGF0ZSA9ICJkaXJpbmZvLmh0bWwiCisgICAgb2JqZWN0cyA9IF9nZXRfZGlyX2VudHJpZXMoYnVpbGRfaWQsIHRhcmdldF9pZCwgJy8nKQorICAgIHBhY2thZ2VzX3N1bSA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWRfX2luPVRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWQ9dGFyZ2V0X2lkKS52YWx1ZXMoJ3BhY2thZ2VfaWQnKSkuYWdncmVnYXRlKFN1bSgnaW5zdGFsbGVkX3NpemUnKSkKKyAgICBkaXJfbGlzdCA9IE5vbmUKKyAgICBpZiBmaWxlX3BhdGggIT0gTm9uZToKKyAgICAgICAgIiIiCisgICAgICAgIExpbmsgZnJvbSB0aGUgaW5jbHVkZWQgcGFja2FnZSBkZXRhaWwgZmlsZSBsaXN0IHBhZ2UgYW5kIGlzCisgICAgICAgIHJlcXVlc3Rpbmcgb3BlbmluZyB0aGUgZGlyIGluZm8gdG8gYSBzcGVjaWZpYyBmaWxlIHBhdGguCisgICAgICAgIFByb3ZpZGUgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gZXhwYW5kIGFuZCB0aGUgZnVsbCBwYXRoIHRvCisgICAgICAgIGhpZ2hsaWdodCBpbiB0aGUgcGFnZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgQWFzc3VtZSB0YXJnZXQncyBwYXRoIHNlcGFyYXRvciBtYXRjaGVzIGhvc3QncywgdGhhdCBpcywgb3Muc2VwCisgICAgICAgIHNlcCA9IG9zLnNlcAorICAgICAgICBkaXJfbGlzdCA9IFtdCisgICAgICAgIGhlYWQgPSBmaWxlX3BhdGgKKyAgICAgICAgd2hpbGUgaGVhZCAhPSBzZXA6CisgICAgICAgICAgICAoaGVhZCwgdGFpbCkgPSBvcy5wYXRoLnNwbGl0KGhlYWQpCisgICAgICAgICAgICBpZiBoZWFkICE9IHNlcDoKKyAgICAgICAgICAgICAgICBkaXJfbGlzdC5pbnNlcnQoMCwgaGVhZCkKKworICAgIGNvbnRleHQgPSB7ICdidWlsZCc6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICAgICAndGFyZ2V0JzogVGFyZ2V0Lm9iamVjdHMuZ2V0KHBrPXRhcmdldF9pZCksCisgICAgICAgICAgICAgICAgJ3BhY2thZ2VzX3N1bSc6IHBhY2thZ2VzX3N1bVsnaW5zdGFsbGVkX3NpemVfX3N1bSddLAorICAgICAgICAgICAgICAgICdvYmplY3RzJzogb2JqZWN0cywKKyAgICAgICAgICAgICAgICAnZGlyX2xpc3QnOiBkaXJfbGlzdCwKKyAgICAgICAgICAgICAgICAnZmlsZV9wYXRoJzogZmlsZV9wYXRoLAorICAgICAgICAgICAgICB9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworZGVmIF9maW5kX3Rhc2tfZGVwKHRhc2tfb2JqZWN0KToKKyAgICByZXR1cm4gbWFwKGxhbWJkYSB4OiB4LmRlcGVuZHNfb24sIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcih0YXNrPXRhc2tfb2JqZWN0KS5maWx0ZXIoZGVwZW5kc19vbl9fb3JkZXJfX2d0ID0gMCkuZXhjbHVkZShkZXBlbmRzX29uX19vdXRjb21lID0gVGFzay5PVVRDT01FX05BKS5zZWxlY3RfcmVsYXRlZCgiZGVwZW5kc19vbiIpKQorCisKK2RlZiBfZmluZF90YXNrX3JldmRlcCh0YXNrX29iamVjdCk6CisgICAgdHAgPSBbXQorICAgIHRwID0gbWFwKGxhbWJkYSB0OiB0LnRhc2ssIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcihkZXBlbmRzX29uPXRhc2tfb2JqZWN0KS5maWx0ZXIodGFza19fb3JkZXJfX2d0PTApLmV4Y2x1ZGUodGFza19fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoInRhc2siLCAidGFza19fcmVjaXBlIiwgInRhc2tfX2J1aWxkIikpCisgICAgcmV0dXJuIHRwCisKK2RlZiBfZmluZF90YXNrX3JldmRlcF9saXN0KHRhc2tsaXN0KToKKyAgICB0cCA9IFtdCisgICAgdHAgPSBtYXAobGFtYmRhIHQ6IHQudGFzaywgVGFza19EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKGRlcGVuZHNfb25fX2luPXRhc2tsaXN0KS5maWx0ZXIodGFza19fb3JkZXJfX2d0PTApLmV4Y2x1ZGUodGFza19fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoInRhc2siLCAidGFza19fcmVjaXBlIiwgInRhc2tfX2J1aWxkIikpCisgICAgcmV0dXJuIHRwCisKK2RlZiBfZmluZF90YXNrX3Byb3ZpZGVyKHRhc2tfb2JqZWN0KToKKyAgICB0YXNrX3JldmRlcHMgPSBfZmluZF90YXNrX3JldmRlcCh0YXNrX29iamVjdCkKKyAgICBmb3IgdHIgaW4gdGFza19yZXZkZXBzOgorICAgICAgICBpZiB0ci5vdXRjb21lICE9IFRhc2suT1VUQ09NRV9DT1ZFUkVEOgorICAgICAgICAgICAgcmV0dXJuIHRyCisgICAgZm9yIHRyIGluIHRhc2tfcmV2ZGVwczoKKyAgICAgICAgdHJjID0gX2ZpbmRfdGFza19wcm92aWRlcih0cikKKyAgICAgICAgaWYgdHJjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHRyYworICAgIHJldHVybiBOb25lCisKK2RlZiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsIHZhcmlhbnQsIHRhc2tfYW5jaG9yKToKKyMgVGhpcyBjbGFzcyBpcyBzaGFyZWQgYmV0d2VlbiB0aGVzZSBwYWdlcworIworIyBDb2x1bW4gICAgdGFza3MgIGJ1aWxkdGltZSAgZGlza2lvICBjcHV1c2FnZQorIyAtLS0tLS0tLS0gLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0KKyMgQ2FjaGUgICAgICBkZWYKKyMgQ1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4gLQorIyBEaXNrICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiAtCisjIEV4ZWN1dGVkICAgZGVmICAgICBkZWYgICAgICAgZGVmICAgICAgZGVmCisjIExvZworIyBPcmRlciAgICAgIGRlZiArCisjIE91dGNvbWUgICAgZGVmICAgICBkZWYgICAgICAgZGVmICAgICAgZGVmCisjIFJlY2lwZSAgICAgbWluICAgICBtaW4gICAgICAgbWluICAgICAgbWluCisjIFZlcnNpb24KKyMgVGFzayAgICAgICBtaW4gICAgIG1pbiAgICAgICBtaW4gICAgICBtaW4KKyMgVGltZSAgICAgICAgICAgICAgIG1pbiAtCisjCisjICdtaW4nOm9uIGFsd2F5cywgJ2RlZic6b24gYnkgZGVmYXVsdCwgZWxzZSBoaWRkZW4KKyMgJysnIGRlZmF1bHQgY29sdW1uIHNvcnQgdXAsICctJyBkZWZhdWx0IGNvbHVtbiBzb3J0IGRvd24KKworICAgIGFuY2hvciA9IHJlcXVlc3QuR0VULmdldCgnYW5jaG9yJywgJycpCisgICAgaWYgbm90IGFuY2hvcjoKKyAgICAgICAgYW5jaG9yPXRhc2tfYW5jaG9yCisKKyAgICAjIGRlZmF1bHQgb3JkZXJpbmcgZGVwZW5kcyBvbiB2YXJpYW50CisgICAgaWYgICAnYnVpbGR0aW1lJyA9PSB2YXJpYW50OgorICAgICAgICB0aXRsZV92YXJpYW50PSdUaW1lJworICAgICAgICBvYmplY3Rfc2VhcmNoX2Rpc3BsYXk9InRpbWUgZGF0YSIKKyAgICAgICAgZmlsdGVyX3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdlbGFwc2VkX3RpbWU6LScpCisgICAgZWxpZiAnZGlza2lvJyAgICA9PSB2YXJpYW50OgorICAgICAgICB0aXRsZV92YXJpYW50PSdEaXNrIEkvTycKKyAgICAgICAgb2JqZWN0X3NlYXJjaF9kaXNwbGF5PSJkaXNrIEkvTyBkYXRhIgorICAgICAgICBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXk9InRhc2tzIgorICAgICAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAyNSwgJ2Rpc2tfaW86LScpCisgICAgZWxpZiAnY3B1dXNhZ2UnICA9PSB2YXJpYW50OgorICAgICAgICB0aXRsZV92YXJpYW50PSdDUFUgdXNhZ2UnCisgICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheT0iQ1BVIHVzYWdlIGRhdGEiCisgICAgICAgIGZpbHRlcl9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnY3B1X3VzYWdlOi0nKQorICAgIGVsc2UgOgorICAgICAgICB0aXRsZV92YXJpYW50PSdUYXNrcycKKyAgICAgICAgb2JqZWN0X3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgZmlsdGVyX3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdvcmRlcjorJykKKworCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknOiBvcmRlcmJ5IH0KKworICAgIHRlbXBsYXRlID0gJ3Rhc2tzLmh0bWwnCisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgaWYgdGFza19hbmNob3I6CisgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1snYW5jaG9yJ109dGFza19hbmNob3IKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCisgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBUYXNrKQorICAgIHF1ZXJ5c2V0X2FsbCA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpLmV4Y2x1ZGUob3JkZXJfX2lzbnVsbD1UcnVlKS5leGNsdWRlKG91dGNvbWU9VGFzay5PVVRDT01FX05BKQorICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5zZWxlY3RfcmVsYXRlZCgicmVjaXBlIiwgImJ1aWxkIikKKworICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIE5vbmUgLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnb3JkZXInKQorCisgICAgaWYgb3JkZXJpbmdfc3RyaW5nLnN0YXJ0c3dpdGgoJ291dGNvbWUnKToKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sICdvcmRlcjorJywgJ29yZGVyJykKKyAgICAgICAgcXVlcnlzZXQgPSBzb3J0ZWQocXVlcnlzZXQsIGtleT1sYW1iZGEgdXI6ICh1ci5vdXRjb21lX3RleHQpLCByZXZlcnNlPW9yZGVyaW5nX3N0cmluZy5lbmRzd2l0aCgnLScpKQorICAgIGVsaWYgb3JkZXJpbmdfc3RyaW5nLnN0YXJ0c3dpdGgoJ3NzdGF0ZV9yZXN1bHQnKToKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sICdvcmRlcjorJywgJ29yZGVyJykKKyAgICAgICAgcXVlcnlzZXQgPSBzb3J0ZWQocXVlcnlzZXQsIGtleT1sYW1iZGEgdXI6ICh1ci5zc3RhdGVfdGV4dCksIHJldmVyc2U9b3JkZXJpbmdfc3RyaW5nLmVuZHN3aXRoKCctJykpCisgICAgZWxzZToKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFRhc2ssIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ29yZGVyJykKKworCisgICAgIyBjb21wdXRlIHRoZSBhbmNob3IncyBwYWdlCisgICAgaWYgYW5jaG9yOgorICAgICAgICByZXF1ZXN0LkdFVCA9IHJlcXVlc3QuR0VULmNvcHkoKQorICAgICAgICBkZWwgcmVxdWVzdC5HRVRbJ2FuY2hvciddCisgICAgICAgIGk9MAorICAgICAgICBhPWludChhbmNob3IpCisgICAgICAgIGNvdW50X3Blcl9wYWdlPWludChwYWdlc2l6ZSkKKyAgICAgICAgZm9yIHRhc2tfb2JqZWN0IGluIHF1ZXJ5c2V0Lml0ZXJhdG9yKCk6CisgICAgICAgICAgICBpZiBhID09IHRhc2tfb2JqZWN0Lm9yZGVyOgorICAgICAgICAgICAgICAgIG5ld19wYWdlPSAoaSAvIGNvdW50X3Blcl9wYWdlICkgKyAxCisgICAgICAgICAgICAgICAgcmVxdWVzdC5HRVQuX19zZXRpdGVtX18oJ3BhZ2UnLCBuZXdfcGFnZSkKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1sncGFnZSddPW5ld19wYWdlCisgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCB2YXJpYW50LCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCisgICAgICAgICAgICBpICs9IDEKKworICAgIHRhc2tfb2JqZWN0cyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgIyBkZWZpbmUgKGFuZCBtb2RpZnkgYnkgdmFyaWFudHMpIHRoZSAndGFibGVjb2xzJyBtZW1iZXJzCisgICAgdGNfb3JkZXI9eworICAgICAgICAnbmFtZSc6J09yZGVyJywKKyAgICAgICAgJ3FoZWxwJzonVGhlIHJ1bm5pbmcgc2VxdWVuY2Ugb2YgZWFjaCB0YXNrIGluIHRoZSBidWlsZCcsCisgICAgICAgICdjbGNsYXNzJzogJ29yZGVyJywgJ2hpZGRlbicgOiAxLAorICAgICAgICAnb3JkZXJrZXknIDogJ29yZGVyJywKKyAgICAgICAgJ29yZGVyZmllbGQnOl9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJvcmRlciIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJvcmRlciIpfQorICAgIGlmICd0YXNrcycgPT0gdmFyaWFudDoKKyAgICAgICAgdGNfb3JkZXJbJ2hpZGRlbiddPScwJworICAgICAgICBkZWwgdGNfb3JkZXJbJ2NsY2xhc3MnXQorCisgICAgdGNfcmVjaXBlPXsKKyAgICAgICAgJ25hbWUnOidSZWNpcGUnLAorICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzJywKKyAgICAgICAgJ29yZGVya2V5JyA6ICdyZWNpcGVfX25hbWUnLAorICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWNpcGVfX25hbWUiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicmVjaXBlX19uYW1lIiksCisgICAgfQorICAgIHRjX3JlY2lwZV92ZXJzaW9uPXsKKyAgICAgICAgJ25hbWUnOidSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICdxaGVscCc6J1RoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUgdG8gd2hpY2ggZWFjaCB0YXNrIGFwcGxpZXMnLAorICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfdmVyc2lvbicsICdoaWRkZW4nIDogMSwKKyAgICB9CisgICAgdGNfdGFzaz17CisgICAgICAgICduYW1lJzonVGFzaycsCisgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSB0YXNrJywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFza19uYW1lIiksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInRhc2tfbmFtZSIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ3Rhc2tfbmFtZScsCisgICAgfQorICAgIHRjX2V4ZWN1dGVkPXsKKyAgICAgICAgJ25hbWUnOidFeGVjdXRlZCcsCisgICAgICAgICdxaGVscCc6IlRoaXMgdmFsdWUgdGVsbHMgeW91IGlmIGEgdGFzayBoYWQgdG8gcnVuIChleGVjdXRlZCkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHRhc2sgb3V0cHV0LCBvciBpZiB0aGUgb3V0cHV0IHdhcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2sgYW5kIHRoZXJlZm9yZSB0aGUgdGFzayBkaWRuJ3QgbmVlZCB0byBydW4gKG5vdCBleGVjdXRlZCkiLAorICAgICAgICAnY2xjbGFzcyc6ICdleGVjdXRlZCcsICdoaWRkZW4nIDogMCwKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFza19leGVjdXRlZCIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ0YXNrX2V4ZWN1dGVkIiksCisgICAgICAgICdvcmRlcmtleScgOiAndGFza19leGVjdXRlZCcsCisgICAgICAgICdmaWx0ZXInIDogeworICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnZXhlY3V0ZWQnLAorICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRXhlY3V0ZWQgVGFza3MnLCAndGFza19leGVjdXRlZDoxJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfZXhlY3V0ZWQ9MSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdOb3QgRXhlY3V0ZWQgVGFza3MnLCAndGFza19leGVjdXRlZDowJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfZXhlY3V0ZWQ9MCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgIH0KKworICAgIH0KKyAgICB0Y19vdXRjb21lPXsKKyAgICAgICAgJ25hbWUnOidPdXRjb21lJywKKyAgICAgICAgJ3FoZWxwJzoiVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvIHJ1biIsCisgICAgICAgICdjbGNsYXNzJzogJ291dGNvbWUnLCAnaGlkZGVuJyA6IDAsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm91dGNvbWUiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAib3V0Y29tZSIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ291dGNvbWUnLAorICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ291dGNvbWUnLAorICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnU3VjY2VlZGVkIFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9TVUNDRVNTLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1UYXNrLk9VVENPTUVfU1VDQ0VTUykuY291bnQoKSwgIidTdWNjZWVkZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IHJhbiBhbmQgY29tcGxldGVkIGR1cmluZyB0aGUgYnVpbGQiICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdGYWlsZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0ZBSUxFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0ZBSUxFRCkuY291bnQoKSwgIidGYWlsZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IHJhbiBidXQgZGlkIG5vdCBjb21wbGV0ZSBkdXJpbmcgdGhlIGJ1aWxkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYWNoZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0NBQ0hFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0NBQ0hFRCkuY291bnQoKSwgJ0NhY2hlZCB0YXNrcyByZXN0b3JlIG91dHB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdQcmVidWlsdCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfUFJFQlVJTFQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9QUkVCVUlMVCkuY291bnQoKSwnUHJlYnVpbHQgdGFza3MgZGlkblwndCBuZWVkIHRvIHJ1biBiZWNhdXNlIHRoZWlyIG91dHB1dCB3YXMgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBidWlsZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQ292ZXJlZCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfQ09WRVJFRCwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0NPVkVSRUQpLmNvdW50KCksICdDb3ZlcmVkIHRhc2tzIGRpZG5cJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRwdXQgaXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGluIHRoaXMgYnVpbGQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0VtcHR5IFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9FTVBUWSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX0VNUFRZKS5jb3VudCgpLCAnRW1wdHkgdGFza3MgaGF2ZSBubyBleGVjdXRhYmxlIGNvbnRlbnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgfQorCisgICAgfQorCisgICAgdGNfY2FjaGU9eworICAgICAgICAnbmFtZSc6J0NhY2hlIGF0dGVtcHQnLAorICAgICAgICAncWhlbHAnOidUaGlzIGNvbHVtbiB0ZWxscyB5b3UgaWYgYSB0YXNrIHRyaWVkIHRvIHJlc3RvcmUgb3V0cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMsIGFuZCByZXBvcnRzIHRoZSByZXN1bHQ6IFN1Y2NlZWRlZCwgRmFpbGVkIG9yIEZpbGUgbm90IGluIGNhY2hlJywKKyAgICAgICAgJ2NsY2xhc3MnOiAnY2FjaGVfYXR0ZW1wdCcsICdoaWRkZW4nIDogMCwKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic3N0YXRlX3Jlc3VsdCIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzc3RhdGVfcmVzdWx0IiksCisgICAgICAgICdvcmRlcmtleScgOiAnc3N0YXRlX3Jlc3VsdCcsCisgICAgICAgICdmaWx0ZXInIDogeworICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnY2FjaGVfYXR0ZW1wdCcsCisgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdUYXNrcyB3aXRoIGNhY2hlIGF0dGVtcHRzJywgJ3NzdGF0ZV9yZXN1bHRfX2d0OiVkJyVUYXNrLlNTVEFURV9OQSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHRfX2d0PVRhc2suU1NUQVRFX05BKS5jb3VudCgpLCAnU2hvdyBhbGwgdGFza3MgdGhhdCB0cmllZCB0byByZXN0b3JlIG91cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlRhc2tzIHdpdGggJ0ZpbGUgbm90IGluIGNhY2hlJyBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9NSVNTLCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfTUlTUykuY291bnQoKSwgJ1Nob3cgdGFza3MgdGhhdCB0cmllZCB0byByZXN0b3JlIG91dHB1dCwgYnV0IGRpZCBub3QgZmluZCBpdCBpbiB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVGFza3Mgd2l0aCAnRmFpbGVkJyBjYWNoZSBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9GQUlMRUQsICBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoc3N0YXRlX3Jlc3VsdD1UYXNrLlNTVEFURV9GQUlMRUQpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgZm91bmQgdGhlIHJlcXVpcmVkIG91dHB1dCBpbiB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycywgYnV0IGNvdWxkIG5vdCByZXN0b3JlIGl0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUYXNrcyB3aXRoICdTdWNjZWVkZWQnIGNhY2hlIGF0dGVtcHRzIiwgJ3NzdGF0ZV9yZXN1bHQ6JWQnJVRhc2suU1NUQVRFX1JFU1RPUkVELCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfUkVTVE9SRUQpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIHRoZSByZXF1aXJlZCBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICB9CisKKyAgICB9CisgICAgI2lmICAgJ3Rhc2tzJyA9PSB2YXJpYW50OiB0Y19jYWNoZVsnaGlkZGVuJ109JzAnOworICAgIHRjX3RpbWU9eworICAgICAgICAnbmFtZSc6J1RpbWUgKHNlY3MpJywKKyAgICAgICAgJ3FoZWxwJzonSG93IGxvbmcgaXQgdG9vayB0aGUgdGFzayB0byBmaW5pc2ggaW4gc2Vjb25kcycsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImVsYXBzZWRfdGltZSIsIFRydWUpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJlbGFwc2VkX3RpbWUiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdlbGFwc2VkX3RpbWUnLAorICAgICAgICAnY2xjbGFzcyc6ICd0aW1lX3Rha2VuJywgJ2hpZGRlbicgOiAxLAorICAgIH0KKyAgICBpZiAnYnVpbGR0aW1lJyA9PSB2YXJpYW50OgorICAgICAgICB0Y190aW1lWydoaWRkZW4nXT0nMCcKKyAgICAgICAgZGVsIHRjX3RpbWVbJ2NsY2xhc3MnXQorICAgICAgICB0Y19jYWNoZVsnaGlkZGVuJ109JzEnCisKKyAgICB0Y19jcHU9eworICAgICAgICAnbmFtZSc6J0NQVSB1c2FnZScsCisgICAgICAgICdxaGVscCc6J1RoZSBwZXJjZW50YWdlIG9mIHRhc2sgQ1BVIHV0aWxpemF0aW9uJywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAiY3B1X3VzYWdlIiwgVHJ1ZSksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImNwdV91c2FnZSIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ2NwdV91c2FnZScsCisgICAgICAgICdjbGNsYXNzJzogJ2NwdV91c2VkJywgJ2hpZGRlbicgOiAxLAorICAgIH0KKworICAgIGlmICAnY3B1dXNhZ2UnID09IHZhcmlhbnQ6CisgICAgICAgIHRjX2NwdVsnaGlkZGVuJ109JzAnCisgICAgICAgIGRlbCB0Y19jcHVbJ2NsY2xhc3MnXQorICAgICAgICB0Y19jYWNoZVsnaGlkZGVuJ109JzEnCisKKyAgICB0Y19kaXNraW89eworICAgICAgICAnbmFtZSc6J0Rpc2sgSS9PIChtcyknLAorICAgICAgICAncWhlbHAnOidOdW1iZXIgb2YgbWlsaXNlY29uZHMgdGhlIHRhc2sgc3BlbnQgZG9pbmcgZGlzayBpbnB1dCBhbmQgb3V0cHV0JywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAiZGlza19pbyIsIFRydWUpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJkaXNrX2lvIiksCisgICAgICAgICdvcmRlcmtleScgOiAnZGlza19pbycsCisgICAgICAgICdjbGNsYXNzJzogJ2Rpc2tfaW8nLCAnaGlkZGVuJyA6IDEsCisgICAgfQorICAgIGlmICdkaXNraW8nID09IHZhcmlhbnQ6CisgICAgICAgIHRjX2Rpc2tpb1snaGlkZGVuJ109JzAnCisgICAgICAgIGRlbCB0Y19kaXNraW9bJ2NsY2xhc3MnXQorICAgICAgICB0Y19jYWNoZVsnaGlkZGVuJ109JzEnCisKKyAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKQorCisgICAgY29udGV4dCA9IHsgJ29iamVjdG5hbWUnOiB2YXJpYW50LAorICAgICAgICAgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOiBvYmplY3Rfc2VhcmNoX2Rpc3BsYXksCisgICAgICAgICAgICAgICAgJ2ZpbHRlcl9zZWFyY2hfZGlzcGxheSc6IGZpbHRlcl9zZWFyY2hfZGlzcGxheSwKKyAgICAgICAgICAgICAgICAndGl0bGUnOiB0aXRsZV92YXJpYW50LAorICAgICAgICAgICAgICAgICdidWlsZCc6IGJ1aWxkLAorICAgICAgICAgICAgICAgICdvYmplY3RzJzogdGFza19vYmplY3RzLAorICAgICAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogb3JkZXJieSwKKyAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nOiBzZWFyY2hfdGVybSwKKyAgICAgICAgICAgICAgICAndG90YWxfY291bnQnOiBxdWVyeXNldF93aXRoX3NlYXJjaC5jb3VudCgpLAorICAgICAgICAgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgICAgICAgICAgdGNfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgIHRjX3JlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgIHRjX3Rhc2ssCisgICAgICAgICAgICAgICAgICAgIHRjX2V4ZWN1dGVkLAorICAgICAgICAgICAgICAgICAgICB0Y19vdXRjb21lLAorICAgICAgICAgICAgICAgICAgICB0Y19jYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfY3B1LAorICAgICAgICAgICAgICAgICAgICB0Y19kaXNraW8sCisgICAgICAgICAgICAgICAgXX0KKworCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIHRhc2tzKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAndGFza3MnLCAnJykKKworZGVmIHRhc2tzX3Rhc2socmVxdWVzdCwgYnVpbGRfaWQsIHRhc2tfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICd0YXNrcycsIHRhc2tfaWQpCisKK2RlZiBidWlsZHRpbWUocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICdidWlsZHRpbWUnLCAnJykKKworZGVmIGRpc2tpbyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgcmV0dXJuIHRhc2tzX2NvbW1vbihyZXF1ZXN0LCBidWlsZF9pZCwgJ2Rpc2tpbycsICcnKQorCitkZWYgY3B1dXNhZ2UocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICdjcHV1c2FnZScsICcnKQorCisKK2RlZiByZWNpcGVzKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICdyZWNpcGVzLmh0bWwnCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAwLCAnbmFtZTorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdyZWNpcGVzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUmVjaXBlKQorICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2lkX19pbj1MYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkKSkuc2VsZWN0X3JlbGF0ZWQoImxheWVyX3ZlcnNpb24iLCAibGF5ZXJfdmVyc2lvbl9fbGF5ZXIiKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChSZWNpcGUsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScpCisKKyAgICByZWNpcGVzID0gX2J1aWxkX3BhZ2VfcmFuZ2UoUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSkscmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAjIHByZWZldGNoIHRoZSBmb3J3YXJkIGFuZCByZXZlcnNlIHJlY2lwZSBkZXBlbmRlbmNpZXMKKyAgICBkZXBzID0geyB9CisgICAgcmV2cyA9IHsgfQorICAgIHF1ZXJ5c2V0X2RlcGVuZGVuY3k9UmVjaXBlX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIocmVjaXBlX19sYXllcl92ZXJzaW9uX19idWlsZF9pZCA9IGJ1aWxkX2lkKS5zZWxlY3RfcmVsYXRlZCgiZGVwZW5kc19vbiIsICJyZWNpcGUiKQorICAgIGZvciByZWNpcGUgaW4gcmVjaXBlczoKKyAgICAgICAgZGVwbGlzdCA9IFsgXQorICAgICAgICBmb3IgcmVjaXBlX2RlcCBpbiBbeCBmb3IgeCBpbiBxdWVyeXNldF9kZXBlbmRlbmN5IGlmIHgucmVjaXBlX2lkID09IHJlY2lwZS5pZF06CisgICAgICAgICAgICBkZXBsaXN0LmFwcGVuZChyZWNpcGVfZGVwKQorICAgICAgICBkZXBzW3JlY2lwZS5pZF0gPSBkZXBsaXN0CisgICAgICAgIHJldmxpc3QgPSBbIF0KKyAgICAgICAgZm9yIHJlY2lwZV9kZXAgaW4gW3ggZm9yIHggaW4gcXVlcnlzZXRfZGVwZW5kZW5jeSBpZiB4LmRlcGVuZHNfb25faWQgPT0gcmVjaXBlLmlkXToKKyAgICAgICAgICAgIHJldmxpc3QuYXBwZW5kKHJlY2lwZV9kZXApCisgICAgICAgIHJldnNbcmVjaXBlLmlkXSA9IHJldmxpc3QKKworICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAnb2JqZWN0bmFtZSc6ICdyZWNpcGVzJywKKyAgICAgICAgJ2J1aWxkJzogYnVpbGQsCisgICAgICAgICdvYmplY3RzJzogcmVjaXBlcywKKyAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAnbmFtZTorJywKKyAgICAgICAgJ3JlY2lwZV9kZXBzJyA6IGRlcHMsCisgICAgICAgICdyZWNpcGVfcmV2cycgOiByZXZzLAorICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J0luZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHBpZWNlIG9mIHNvZnR3YXJlLCBpbmNsdWRpbmcgd2hlcmUgdG8gZG93bmxvYWQgdGhlIHNvdXJjZSwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBob3cgdG8gY29tcGlsZSB0aGUgc291cmNlIGZpbGVzIGFuZCBob3cgdG8gcGFja2FnZSB0aGUgY29tcGlsZWQgb3V0cHV0JywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1JlY2lwZSB2ZXJzaW9uJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgcmVjaXBlIHZlcnNpb24gYW5kIHJldmlzaW9uJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidEZXBlbmRlbmNpZXMnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1JlY2lwZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGVzKScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnZGVwZW5kc19vbicsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1JldmVyc2UgZGVwZW5kZW5jaWVzJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidSZWNpcGUgYnVpbGQtdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcmVjaXBlcyB0aGF0IGRlcGVuZCBvbiB0aGlzIHJlY2lwZSknLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2RlcGVuZHNfYnknLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUgZmlsZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonUGF0aCB0byB0aGUgcmVjaXBlIC5iYiBmaWxlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJmaWxlX3BhdGgiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJmaWxlX3BhdGgiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2ZpbGVfcGF0aCcsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX2ZpbGUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidTZWN0aW9uJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgc2VjdGlvbiBpbiB3aGljaCByZWNpcGVzIHNob3VsZCBiZSBjYXRlZ29yaXplZCcsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2VjdGlvbiIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInNlY3Rpb24iKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3NlY3Rpb24nLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9zZWN0aW9uJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGljZW5zZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgcGlwZSBjaGFyYWN0ZXIgaW5kaWNhdGVzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBhbXBlcnNhbmQgY2hhcmFjdGVyIGluZGljYXRlcyBtdWx0aXBsZSBsaWNlbnNlcyBleGlzdCB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJsaWNlbnNlIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibGljZW5zZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbGljZW5zZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX2xpY2Vuc2UnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllcicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllciBicmFuY2gnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdsYXllcl92ZXJzaW9uX19icmFuY2gnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyIGNvbW1pdCcsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0JywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgXQorICAgICAgICB9CisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgY29uZmlndXJhdGlvbihyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgdGVtcGxhdGUgPSAnY29uZmlndXJhdGlvbi5odG1sJworCisgICAgdmFyX25hbWVzID0gKCdCQl9WRVJTSU9OJywgJ0JVSUxEX1NZUycsICdOQVRJVkVMU0JTVFJJTkcnLCAnVEFSR0VUX1NZUycsCisgICAgICAgICAgICAgICAgICdNQUNISU5FJywgJ0RJU1RSTycsICdESVNUUk9fVkVSU0lPTicsICdUVU5FX0ZFQVRVUkVTJywgJ1RBUkdFVF9GUFUnKQorICAgIGNvbnRleHQgPSBkaWN0KFZhcmlhYmxlLm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkLCB2YXJpYWJsZV9uYW1lX19pbj12YXJfbmFtZXMpXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZXNfbGlzdCgndmFyaWFibGVfbmFtZScsICd2YXJpYWJsZV92YWx1ZScpKQorICAgIGNvbnRleHQudXBkYXRlKHsnb2JqZWN0bmFtZSc6ICdjb25maWd1cmF0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgJ29iamVjdF9zZWFyY2hfZGlzcGxheSc6J3ZhcmlhYmxlcycsCisgICAgICAgICAgICAgICAgICAgICdmaWx0ZXJfc2VhcmNoX2Rpc3BsYXknOid2YXJpYWJsZXMnLAorICAgICAgICAgICAgICAgICAgICAnYnVpbGQnOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAgICAgICAgICd0YXJnZXRzJzogVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkKX0pCisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworCitkZWYgY29uZmlndmFycyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgdGVtcGxhdGUgPSAnY29uZmlndmFycy5odG1sJworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwMCwgJ3ZhcmlhYmxlX25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSwgJ2ZpbHRlcicgOiAnZGVzY3JpcHRpb25fX3JlZ2V4Oi4rJyB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgVmFyaWFibGUpCisgICAgaWYgcmV0dmFsOgorICAgICAgICAjIGlmIG5ldyBzZWFyY2gsIGNsZWFyIHRoZSBkZWZhdWx0IGZpbHRlcgorICAgICAgICBpZiBzZWFyY2hfdGVybSBhbmQgbGVuKHNlYXJjaF90ZXJtKToKKyAgICAgICAgICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzWydmaWx0ZXInXT0nJworICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdjb25maWd2YXJzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorCisgICAgcXVlcnlzZXQgPSBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCkuZXhjbHVkZSh2YXJpYWJsZV9uYW1lX19pc3RhcnRzd2l0aD0nQl8nKS5leGNsdWRlKHZhcmlhYmxlX25hbWVfX2lzdGFydHN3aXRoPSdkb18nKQorICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gIF9nZXRfcXVlcnlzZXQoVmFyaWFibGUsIHF1ZXJ5c2V0LCBOb25lLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAndmFyaWFibGVfbmFtZScpLmV4Y2x1ZGUodmFyaWFibGVfdmFsdWU9Jycsdmhpc3RvcnlfX2ZpbGVfbmFtZV9faXNudWxsPVRydWUpCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFZhcmlhYmxlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICMgcmVtb3ZlIHJlY29yZHMgd2hlcmUgdGhlIHZhbHVlIGlzIGVtcHR5IEFORCB0aGVyZSBhcmUgbm8gaGlzdG9yeSBmaWxlcworICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZXhjbHVkZSh2YXJpYWJsZV92YWx1ZT0nJyx2aGlzdG9yeV9fZmlsZV9uYW1lX19pc251bGw9VHJ1ZSkKKworICAgIHZhcmlhYmxlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLCByZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgICMgc2hvdyBhbGwgbWF0Y2hpbmcgZmlsZXMgKG5vdCBqdXN0IHRoZSBsYXN0IG9uZSkKKyAgICBmaWxlX2ZpbHRlcj0gc2VhcmNoX3Rlcm0gKyAiOiIKKyAgICBpZiBmaWx0ZXJfc3RyaW5nLmZpbmQoJy9jb25mLycpID4gMDoKKyAgICAgICAgZmlsZV9maWx0ZXIgKz0gJ2NvbmYvKGxvY2FsfGJibGF5ZXJzKS5jb25mJworICAgIGlmIGZpbHRlcl9zdHJpbmcuZmluZCgnY29uZi9tYWNoaW5lLycpID4gMDoKKyAgICAgICAgZmlsZV9maWx0ZXIgKz0gJ2NvbmYvbWFjaGluZS8nCisgICAgaWYgZmlsdGVyX3N0cmluZy5maW5kKCdjb25mL2Rpc3Ryby8nKSA+IDA6CisgICAgICAgIGZpbGVfZmlsdGVyICs9ICdjb25mL2Rpc3Ryby8nCisgICAgaWYgZmlsdGVyX3N0cmluZy5maW5kKCcvYml0YmFrZS5jb25mJykgPiAwOgorICAgICAgICBmaWxlX2ZpbHRlciArPSAnL2JpdGJha2UuY29uZicKKyAgICBidWlsZF9kaXI9cmUuc3ViKCIvdG1wL2xvZy8uKiIsIiIsQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLmNvb2tlcl9sb2dfcGF0aCkKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgJ29iamVjdG5hbWUnOiAnY29uZmlndmFycycsCisgICAgICAgICAgICAgICAgJ29iamVjdF9zZWFyY2hfZGlzcGxheSc6J0JpdEJha2UgdmFyaWFibGVzJywKKyAgICAgICAgICAgICAgICAnZmlsdGVyX3NlYXJjaF9kaXNwbGF5JzondmFyaWFibGVzJywKKyAgICAgICAgICAgICAgICAnZmlsZV9maWx0ZXInOiBmaWxlX2ZpbHRlciwKKyAgICAgICAgICAgICAgICAnYnVpbGQnOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAgICAgJ29iamVjdHMnIDogdmFyaWFibGVzLAorICAgICAgICAgICAgICAgICd0b3RhbF9jb3VudCc6cXVlcnlzZXRfd2l0aF9zZWFyY2guY291bnQoKSwKKyAgICAgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6ICd2YXJpYWJsZV9uYW1lOisnLAorICAgICAgICAgICAgICAgICdzZWFyY2hfdGVybSc6c2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAjIFNwZWNpZmllcyB0aGUgZGlzcGxheSBvZiBjb2x1bW5zIGZvciB0aGUgdGFibGUsIGFwcGVhcmFuY2UgaW4gIkVkaXQgY29sdW1ucyIgYm94LCB0b2dnbGluZyBkZWZhdWx0IHNob3cvaGlkZSwgYW5kIHNwZWNpZnlpbmcgZmlsdGVycyBmb3IgY29sdW1ucworICAgICAgICAgICAgICAgICd0YWJsZWNvbHMnIDogWworICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdWYXJpYWJsZScsCisgICAgICAgICAgICAgICAgICdxaGVscCc6ICJCaXRCYWtlIGlzIGEgZ2VuZXJpYyB0YXNrIGV4ZWN1dG9yIHRoYXQgY29uc2lkZXJzIGEgbGlzdCBvZiB0YXNrcyB3aXRoIGRlcGVuZGVuY2llcyBhbmQgaGFuZGxlcyBtZXRhZGF0YSB0aGF0IGNvbnNpc3RzIG9mIHZhcmlhYmxlcyBpbiBhIGNlcnRhaW4gZm9ybWF0IHRoYXQgZ2V0IHBhc3NlZCB0byB0aGUgdGFza3MiLAorICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ2YXJpYWJsZV9uYW1lIiksCisgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInZhcmlhYmxlX25hbWUiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdWYWx1ZScsCisgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgdmFsdWUgYXNzaWduZWQgdG8gdGhlIHZhcmlhYmxlIiwKKyAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICJzcGFuNCIsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnU2V0IGluIGZpbGUnLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGxhc3QgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgdG91Y2hlZCB0aGUgdmFyaWFibGUgdmFsdWUiLAorICAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdmaWxlJywgJ2hpZGRlbicgOiAwLAorICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3ZoaXN0b3J5X19maWxlX25hbWUnLAorICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICd2aGlzdG9yeV9fZmlsZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTG9jYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6JytidWlsZF9kaXIrJy9jb25mLycscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPWJ1aWxkX2RpcisnL2NvbmYvJykuY291bnQoKSwgJ1NlbGVjdCB0aGlzIGZpbHRlciB0byBzZWUgdmFyaWFibGVzIHNldCBieSB0aGUgPGNvZGU+bG9jYWwuY29uZjwvY29kZT4gYW5kIDxjb2RlPmJibGF5ZXJzLmNvbmY8L2NvZGU+IGNvbmZpZ3VyYXRpb24gZmlsZXMgaW5zaWRlIHRoZSA8Y29kZT4vYnVpbGQvY29uZi88L2NvZGU+IGRpcmVjdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTWFjaGluZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczpjb25mL21hY2hpbmUvJyxxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM9J2NvbmYvbWFjaGluZScpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZShzKSBpbnNpZGUgeW91ciBsYXllcnMgPGNvZGU+L2NvbmYvbWFjaGluZS88L2NvZGU+IGRpcmVjdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRGlzdHJvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzJywgJ3ZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zOmNvbmYvZGlzdHJvLycscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPSdjb25mL2Rpc3RybycpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZShzKSBpbnNpZGUgeW91ciBsYXllcnMgPGNvZGU+L2NvbmYvZGlzdHJvLzwvY29kZT4gZGlyZWN0b3J5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdMYXllciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczpjb25mL2xheWVyLmNvbmYnLHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWlucz0nY29uZi9sYXllci5jb25mJykuY291bnQoKSwgJ1NlbGVjdCB0aGlzIGZpbHRlciB0byBzZWUgdmFyaWFibGVzIHNldCBieSB0aGUgPGNvZGU+bGF5ZXIuY29uZjwvY29kZT4gY29uZmlndXJhdGlvbiBmaWxlIGluc2lkZSB5b3VyIGxheWVycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYml0YmFrZS5jb25mIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczovYml0YmFrZS5jb25mJyxxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM9Jy9iaXRiYWtlLmNvbmYnKS5jb3VudCgpLCAnU2VsZWN0IHRoaXMgZmlsdGVyIHRvIHNlZSB2YXJpYWJsZXMgc2V0IGJ5IHRoZSA8Y29kZT5iaXRiYWtlLmNvbmY8L2NvZGU+IGNvbmZpZ3VyYXRpb24gZmlsZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdEZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgICdxaGVscCc6ICJBIGJyaWVmIGV4cGxhbmF0aW9uIG9mIHRoZSB2YXJpYWJsZSIsCisgICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2Rlc2NyaXB0aW9uJywgJ2hpZGRlbicgOiAwLAorICAgICAgICAgICAgICAgICAnZGNsYXNzJzogInNwYW40IiwKKyAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7CisgICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAnZGVzY3JpcHRpb24nLAorICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdWYXJpYWJsZXMgd2l0aCBkZXNjcmlwdGlvbicsICdkZXNjcmlwdGlvbl9fcmVnZXg6LisnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoZGVzY3JpcHRpb25fX3JlZ2V4PScuKycpLmNvdW50KCksICdXZSBwcm92aWRlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIG1vc3QgY29tbW9uIEJpdEJha2UgdmFyaWFibGVzLiBUaGUgbGlzdCBvZiBkZXNjcmlwdGlvbnMgbGl2ZXMgaW4gPGNvZGU+bWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZjwvY29kZT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9CisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgYnBhY2thZ2UocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHRlbXBsYXRlID0gJ2JwYWNrYWdlLmh0bWwnCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAwLCAnbmFtZTorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JyA6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncGFja2FnZXMnLCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMsIGJ1aWxkX2lkID0gYnVpbGRfaWQpCisgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBQYWNrYWdlKQorICAgIHF1ZXJ5c2V0ID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkX2lkKS5maWx0ZXIoc2l6ZV9fZ3RlPTApCisgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScpCisKKyAgICBwYWNrYWdlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldCggcGsgPSBidWlsZF9pZCApCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAnb2JqZWN0bmFtZSc6ICdwYWNrYWdlcyBidWlsdCcsCisgICAgICAgICdidWlsZCc6IGJ1aWxkLAorICAgICAgICAnb2JqZWN0cycgOiBwYWNrYWdlcywKKyAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAnbmFtZTorJywKKyAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUGFja2FnZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonUGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIGEgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UgdmVyc2lvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIHBhY2thZ2UgdmVyc2lvbiBhbmQgcmV2aXNpb24nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1NpemUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBzaXplIG9mIHRoZSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJzaXplIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic2l6ZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnc2l6ZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnc2l6ZScsICdoaWRkZW4nOiAwLAorICAgICAgICAgICAgICAgICdkY2xhc3MnIDogJ3NwYW4yJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMaWNlbnNlJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUgcGFja2FnZSBpcyBkaXN0cmlidXRlZC4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIHBpcGUgY2hhcmFjdGVyIGluZGljYXRlcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgYW1wZXJzYW5kIGNoYXJhY3RlciBpbmRpY2F0ZXMgbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGljZW5zZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxpY2Vuc2UiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2xpY2Vuc2UnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInJlY2lwZV9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlY2lwZV9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAncmVjaXBlX19uYW1lJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX25hbWUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVmVyc2lvbiBhbmQgcmV2aXNpb24gb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX192ZXJzaW9uJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXInLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllciBicmFuY2gnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAncmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2gnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXIgY29tbWl0JywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgR2l0IGNvbW1pdCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIGJmaWxlKHJlcXVlc3QsIGJ1aWxkX2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICdiZmlsZS5odG1sJworICAgIGZpbGVzID0gUGFja2FnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHBhY2thZ2UgPSBwYWNrYWdlX2lkKQorICAgIGNvbnRleHQgPSB7J2J1aWxkJzogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLCAnb2JqZWN0cycgOiBmaWxlc30KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCisKKyMgQSBzZXQgb2YgZGVwZW5kZW5jeSB0eXBlcyB2YWxpZCBmb3IgYm90aCBpbmNsdWRlZCBhbmQgYnVpbHQgcGFja2FnZSB2aWV3cworT1RIRVJfREVQRU5EU19CQVNFID0gWworICAgIFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JTVUdHRVNUUywKKyAgICBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SUFJPVklERVMsCisgICAgUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlJFUExBQ0VTLAorICAgIFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JDT05GTElDVFMsCisgICAgXQorCisjIHZhbHVlIGZvciBpbnZhbGlkIHJvdyBpZAorSU5WQUxJRF9LRVkgPSAtMQorCisiIiIKK0dpdmVuIGEgcGFja2FnZSBpZCwgdGFyZ2V0X2lkIHJldHJpZXZlcyB0d28gc2V0cyBvZiB0aGlzIGltYWdlIGFuZCBwYWNrYWdlJ3MKK2RlcGVuZGVuY2llcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBkaWN0aW9uYXJ5IGNvbnNpc3Rpbmcgb2YgdHdvIG90aGVyCitsaXN0czogYSBsaXN0IG9mICdydW50aW1lJyBkZXBlbmRlbmNpZXMsIHRoYXQgaXMsIGhhdmluZyBSREVQRU5EUwordmFsdWVzIGluIHNvdXJjZSBwYWNrYWdlJ3MgcmVjaXBlLCBhbmQgYSBsaXN0IG9mIG90aGVyIGRlcGVuZGVuY2llcywgdGhhdCBpcwordGhlIGxpc3Qgb2YgcG9zc2libGUgcmVjaXBlIHZhcmlhYmxlcyBhcyBmb3VuZCBpbiBPVEhFUl9ERVBFTkRTX0JBU0UgcGx1cwordGhlIFJSRUNPTU1FTkRTIG9yIFRSRUNPTU1FTkRTIHZhbHVlLgorVGhlIGxpc3RzIGFyZSBidWlsdCBpbiB0aGUgc29ydCBvcmRlciBzcGVjaWZpZWQgZm9yIHRoZSBwYWNrYWdlIHJ1bnRpbWUKK2RlcGVuZGVuY3kgdmlld3MuCisiIiIKK2RlZiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jaWVzKHBhY2thZ2VfaWQsIHRhcmdldF9pZCA9IElOVkFMSURfS0VZKToKKyAgICBydW50aW1lX2RlcHMgPSBbXQorICAgIG90aGVyX2RlcHMgPSBbXQorICAgIG90aGVyX2RlcGVuZHNfdHlwZXMgPSBPVEhFUl9ERVBFTkRTX0JBU0UKKworICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWSA6CisgICAgICAgIHJkZXBlbmRzX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMKKyAgICAgICAgb3RoZXJfZGVwZW5kc190eXBlcyArPSAgW1BhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSRUNPTU1FTkRTXQorICAgIGVsc2UgOgorICAgICAgICByZGVwZW5kc190eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUkRFUEVORFMKKyAgICAgICAgb3RoZXJfZGVwZW5kc190eXBlcyArPSBbUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlJFQ09NTUVORFNdCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWSA6CisgICAgICAgIGFsbGRlcHMgPSBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5maWx0ZXIodGFyZ2V0X2lkX19leGFjdCA9IHRhcmdldF9pZCkKKyAgICBlbHNlIDoKKyAgICAgICAgYWxsZGVwcyA9IHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmFsbCgpCisgICAgZm9yIGlkZXAgaW4gYWxsZGVwczoKKyAgICAgICAgZGVwX3BhY2thZ2UgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPWlkZXAuZGVwZW5kc19vbl9pZCkKKyAgICAgICAgZGVwX2VudHJ5ID0gUGFja2FnZV9EZXBlbmRlbmN5LkRFUEVORFNfRElDVFtpZGVwLmRlcF90eXBlXQorICAgICAgICBpZiBkZXBfcGFja2FnZS52ZXJzaW9uID09ICcnIDoKKyAgICAgICAgICAgIHZlcnNpb24gPSAnJworICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIHZlcnNpb24gPSBkZXBfcGFja2FnZS52ZXJzaW9uICsgIi0iICsgZGVwX3BhY2thZ2UucmV2aXNpb24KKyAgICAgICAgaW5zdGFsbGVkID0gRmFsc2UKKyAgICAgICAgaWYgdGFyZ2V0X2lkICE9IElOVkFMSURfS0VZIDoKKyAgICAgICAgICAgIGlmIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0ID0gdGFyZ2V0X2lkLCBwYWNrYWdlX2lkX19leGFjdCA9IGRlcF9wYWNrYWdlLmlkKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWQgPSBUcnVlCisgICAgICAgIGRlcCA9ICAgeworICAgICAgICAgICAgICAgICduYW1lJyA6IGRlcF9wYWNrYWdlLm5hbWUsCisgICAgICAgICAgICAgICAgJ3ZlcnNpb24nIDogdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAnc2l6ZScgOiBkZXBfcGFja2FnZS5zaXplLAorICAgICAgICAgICAgICAgICdkZXBfdHlwZScgOiBpZGVwLmRlcF90eXBlLAorICAgICAgICAgICAgICAgICdkZXBfdHlwZV9kaXNwbGF5JyA6IGRlcF9lbnRyeVswXS5jYXBpdGFsaXplKCksCisgICAgICAgICAgICAgICAgJ2RlcF90eXBlX2hlbHAnIDogZGVwX2VudHJ5WzFdICUgKGRlcF9wYWNrYWdlLm5hbWUsIHBhY2thZ2UubmFtZSksCisgICAgICAgICAgICAgICAgJ2RlcGVuZHNfb25faWQnIDogZGVwX3BhY2thZ2UuaWQsCisgICAgICAgICAgICAgICAgJ2luc3RhbGxlZCcgOiBpbnN0YWxsZWQsCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWToKKyAgICAgICAgICAgICAgICBkZXBbJ2FsaWFzJ10gPSBfZ2V0X3BhY2thZ2VfYWxpYXMoZGVwX3BhY2thZ2UpCisKKyAgICAgICAgaWYgaWRlcC5kZXBfdHlwZSA9PSByZGVwZW5kc190eXBlIDoKKyAgICAgICAgICAgIHJ1bnRpbWVfZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICBlbGlmIGlkZXAuZGVwX3R5cGUgaW4gb3RoZXJfZGVwZW5kc190eXBlcyA6CisgICAgICAgICAgICBvdGhlcl9kZXBzLmFwcGVuZChkZXApCisKKyAgICByZGVwX3NvcnRlZCA9IHNvcnRlZChydW50aW1lX2RlcHMsIGtleT1sYW1iZGEgazoga1snbmFtZSddKQorICAgIG9kZXBfc29ydGVkID0gc29ydGVkKAorICAgICAgICAgICAgc29ydGVkKG90aGVyX2RlcHMsIGtleT1sYW1iZGEgazoga1snbmFtZSddKSwKKyAgICAgICAgICAgIGtleT1sYW1iZGEgazoga1snZGVwX3R5cGUnXSkKKyAgICByZXR2YWx1ZXMgPSB7J3J1bnRpbWVfZGVwcycgOiByZGVwX3NvcnRlZCwgJ290aGVyX2RlcHMnIDogb2RlcF9zb3J0ZWR9CisgICAgcmV0dXJuIHJldHZhbHVlcworCisjIFJldHVybiB0aGUgY291bnQgb2YgcGFja2FnZXMgZGVwZW5kZW50IG9uIHBhY2thZ2UgZm9yIHRoaXMgdGFyZ2V0X2lkIGltYWdlCitkZWYgX2dldF9wYWNrYWdlX3JldmVyc2VfZGVwX2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCk6CisgICAgcmV0dXJuIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0LmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0PXRhcmdldF9pZCwgZGVwX3R5cGVfX2V4YWN0ID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTKS5jb3VudCgpCisKKyMgUmV0dXJuIHRoZSBjb3VudCBvZiB0aGUgcGFja2FnZXMgdGhhdCB0aGlzIHBhY2thZ2VfaWQgaXMgZGVwZW5kZW50IG9uLgorIyBVc2Ugb25lIG9mIHRoZSB0d28gUkRFUEVORFMgdHlwZXMsIGVpdGhlciBUUkRFUEVORFMgaWYgdGhlIHBhY2thZ2Ugd2FzCisjIGluc3RhbGxlZCwgb3IgZWxzZSBSREVQRU5EUyBpZiBvbmx5IGJ1aWx0LgorZGVmIF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCwgaXNfaW5zdGFsbGVkKToKKyAgICBpZiBpc19pbnN0YWxsZWQgOgorICAgICAgICByZXR1cm4gcGFja2FnZS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuZmlsdGVyKHRhcmdldF9pZF9fZXhhY3QgPSB0YXJnZXRfaWQsCisgICAgICAgICAgICBkZXBfdHlwZV9fZXhhY3QgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMpLmNvdW50KCkKKyAgICBlbHNlIDoKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmZpbHRlcihkZXBfdHlwZV9fZXhhY3QgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SREVQRU5EUykuY291bnQoKQorCitkZWYgX2dldF9wYWNrYWdlX2FsaWFzKHBhY2thZ2UpOgorICAgIGFsaWFzID0gcGFja2FnZS5pbnN0YWxsZWRfbmFtZQorICAgIGlmIGFsaWFzICE9IE5vbmUgYW5kIGFsaWFzICE9ICcnIGFuZCBhbGlhcyAhPSBwYWNrYWdlLm5hbWU6CisgICAgICAgIHJldHVybiBhbGlhcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJworCitkZWYgX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSk6CisgICAgciA9IHBhY2thZ2UubmFtZQorICAgIHZlcnNpb25fZ29vZCA9IHBhY2thZ2UudmVyc2lvbiAhPSBOb25lIGFuZCAgcGFja2FnZS52ZXJzaW9uICE9ICcnCisgICAgcmV2aXNpb25fZ29vZCA9IHBhY2thZ2UucmV2aXNpb24gIT0gTm9uZSBhbmQgcGFja2FnZS5yZXZpc2lvbiAhPSAnJworICAgIGlmIHZlcnNpb25fZ29vZCBvciByZXZpc2lvbl9nb29kOgorICAgICAgICByICs9ICdfJworICAgICAgICBpZiB2ZXJzaW9uX2dvb2Q6CisgICAgICAgICAgICByICs9IHBhY2thZ2UudmVyc2lvbgorICAgICAgICAgICAgaWYgcmV2aXNpb25fZ29vZDoKKyAgICAgICAgICAgICAgICByICs9ICctJworICAgICAgICBpZiByZXZpc2lvbl9nb29kOgorICAgICAgICAgICAgciArPSBwYWNrYWdlLnJldmlzaW9uCisgICAgcmV0dXJuIHIKKworZGVmIHBhY2thZ2VfYnVpbHRfZGV0YWlsKHJlcXVlc3QsIGJ1aWxkX2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2J1aWx0X2RldGFpbC5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgIyBmb2xsb3cgY29udmVudGlvbiBmb3IgcGFnaW5hdGlvbiB3LyBzZWFyY2ggYWx0aG91Z2ggbm90IHVzZWQgZm9yIHRoaXMgdmlldworICAgIHF1ZXJ5c2V0ID0gUGFja2FnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHBhY2thZ2VfaWRfX2V4YWN0PXBhY2thZ2VfaWQpCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdwYXRoOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCBwYWNrYWdlX2lkID0gcGFja2FnZV9pZCkKKworICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZV9GaWxlKQorICAgIHBhdGhzID0gX2dldF9xdWVyeXNldChQYWNrYWdlX0ZpbGUsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAncGF0aCcpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdwYWNrYWdlJyA6IHBhY2thZ2UsCisgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCAtMSwgRmFsc2UpLAorICAgICAgICAgICAgJ29iamVjdHMnIDogcGF0aHMsCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J0ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJwYXRoIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhdGgiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzaXplIiksCisgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc2l6ZWNvbCBzcGFuMicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICB9CisgICAgaWYgcGF0aHMuYWxsKCkuY291bnQoKSA8IDI6CisgICAgICAgIGNvbnRleHRbJ2Rpc2FibGVfc29ydCddID0gVHJ1ZTsKKworICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcyhyZXF1ZXN0LCBidWlsZF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAicGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbCIKKyAgICBpZiBCdWlsZC5vYmplY3RzLmZpbHRlcihwaz1idWlsZF9pZCkuY291bnQoKSA9PSAwIDoKKyAgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBkZXBlbmRlbmNpZXMgPSBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jaWVzKHBhY2thZ2VfaWQpCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAncGFja2FnZScgOiBwYWNrYWdlLAorICAgICAgICAgICAgJ3J1bnRpbWVfZGVwcycgOiBkZXBlbmRlbmNpZXNbJ3J1bnRpbWVfZGVwcyddLAorICAgICAgICAgICAgJ290aGVyX2RlcHMnIDogICBkZXBlbmRlbmNpZXNbJ290aGVyX2RlcHMnXSwKKyAgICAgICAgICAgICdkZXBlbmRlbmN5X2NvdW50JyA6IF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIC0xLCAgRmFsc2UpCisgICAgfQorICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKKworZGVmIHBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHBhY2thZ2VfaWQpOgorICAgIHRlbXBsYXRlID0gInBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICAjIGZvbGxvdyBjb252ZW50aW9uIGZvciBwYWdpbmF0aW9uIHcvIHNlYXJjaCBhbHRob3VnaCBub3QgdXNlZCBmb3IgdGhpcyB2aWV3CisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdwYXRoOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIHBhY2thZ2VfaWQgPSBwYWNrYWdlX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZV9GaWxlKQorCisgICAgcXVlcnlzZXQgPSBQYWNrYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIocGFja2FnZV9pZF9fZXhhY3Q9cGFja2FnZV9pZCkKKyAgICBwYXRocyA9IF9nZXRfcXVlcnlzZXQoUGFja2FnZV9GaWxlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3BhdGgnKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgcGFja2FnZS5hbGlhcyA9IF9nZXRfcGFja2FnZV9hbGlhcyhwYWNrYWdlKQorICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmdldChwaz10YXJnZXRfaWQpCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAndGFyZ2V0JyAgOiB0YXJnZXQsCisgICAgICAgICAgICAncGFja2FnZScgOiBwYWNrYWdlLAorICAgICAgICAgICAgJ3JldmVyc2VfY291bnQnIDogX2dldF9wYWNrYWdlX3JldmVyc2VfZGVwX2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCksCisgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQsIFRydWUpLAorICAgICAgICAgICAgJ29iamVjdHMnOiBwYXRocywKKyAgICAgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonRmlsZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInBhdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicGF0aCIpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1NpemUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJzaXplIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInNpemUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzaXplY29sIHNwYW4yJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgXQorICAgIH0KKyAgICBpZiBwYXRocy5hbGwoKS5jb3VudCgpIDwgMjoKKyAgICAgICAgY29udGV4dFsnZGlzYWJsZV9zb3J0J10gPSBUcnVlCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIHBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHBhY2thZ2VfaWQpOgorICAgIHRlbXBsYXRlID0gInBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBwYWNrYWdlLmFsaWFzID0gX2dldF9wYWNrYWdlX2FsaWFzKHBhY2thZ2UpCisgICAgdGFyZ2V0ID0gVGFyZ2V0Lm9iamVjdHMuZ2V0KHBrPXRhcmdldF9pZCkKKworICAgIGRlcGVuZGVuY2llcyA9IF9nZXRfcGFja2FnZV9kZXBlbmRlbmNpZXMocGFja2FnZV9pZCwgdGFyZ2V0X2lkKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICd0YXJnZXQnIDogdGFyZ2V0LAorICAgICAgICAgICAgJ3J1bnRpbWVfZGVwcycgOiBkZXBlbmRlbmNpZXNbJ3J1bnRpbWVfZGVwcyddLAorICAgICAgICAgICAgJ290aGVyX2RlcHMnIDogICBkZXBlbmRlbmNpZXNbJ290aGVyX2RlcHMnXSwKKyAgICAgICAgICAgICdyZXZlcnNlX2NvdW50JyA6IF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkLCBUcnVlKQorICAgIH0KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCitkZWYgcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAyNSwgJ3BhY2thZ2VfX25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIHBhY2thZ2VfaWQgPSBwYWNrYWdlX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZV9GaWxlKQorCisgICAgcXVlcnlzZXQgPSBQYWNrYWdlX0RlcGVuZGVuY3kub2JqZWN0cy5zZWxlY3RfcmVsYXRlZCgnZGVwZW5kc19vbl9fbmFtZScsICdkZXBlbmRzX29uX19zaXplJykuZmlsdGVyKGRlcGVuZHNfb249cGFja2FnZV9pZCwgdGFyZ2V0X2lkPXRhcmdldF9pZCwgZGVwX3R5cGU9UGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTKQorICAgIG9iamVjdHMgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2VfRGVwZW5kZW5jeSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICdwYWNrYWdlX19uYW1lJykKKworICAgIHBhY2thZ2UgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPXBhY2thZ2VfaWQpCisgICAgcGFja2FnZS5mdWxscGFja2FnZXNwZWMgPSBfZ2V0X2Z1bGxwYWNrYWdlc3BlYyhwYWNrYWdlKQorICAgIHBhY2thZ2UuYWxpYXMgPSBfZ2V0X3BhY2thZ2VfYWxpYXMocGFja2FnZSkKKyAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5nZXQocGs9dGFyZ2V0X2lkKQorICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgIGlmIG8ucGFja2FnZS52ZXJzaW9uICE9ICcnOgorICAgICAgICAgICAgby5wYWNrYWdlLnZlcnNpb24gKz0gJy0nICsgby5wYWNrYWdlLnJldmlzaW9uCisgICAgICAgIG8uYWxpYXMgPSBfZ2V0X3BhY2thZ2VfYWxpYXMoby5wYWNrYWdlKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICd0YXJnZXQnIDogdGFyZ2V0LAorICAgICAgICAgICAgJ29iamVjdHMnIDogb2JqZWN0cywKKyAgICAgICAgICAgICdyZXZlcnNlX2NvdW50JyA6IF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkLCBUcnVlKSwKKyAgICAgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonUGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInBhY2thZ2VfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhY2thZ2VfX25hbWUiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidWZXJzaW9uJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicGFja2FnZV9fc2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzogX2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicGFja2FnZV9fc2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAnZGNsYXNzJzogJ3NpemVjb2wgc3BhbjInLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICBdCisgICAgfQorICAgIGlmIG9iamVjdHMuYWxsKCkuY291bnQoKSA8IDI6CisgICAgICAgIGNvbnRleHRbJ2Rpc2FibGVfc29ydCddID0gVHJ1ZQorICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBpbWFnZV9pbmZvcm1hdGlvbl9kaXIocmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgcGFja2FnZWZpbGVfaWQpOgorICAgICMgc3R1YmJlZCBmb3Igbm93CisgICAgcmV0dXJuIHJlZGlyZWN0KGJ1aWxkcykKKyAgICAjIHRoZSBjb250ZXh0IHByb2Nlc3NvciB0aGF0IHN1cHBsaWVzIGRhdGEgdXNlZCBhY3Jvc3MgYWxsIHRoZSBwYWdlcworCisKK2RlZiBtYW5hZ2VkY29udGV4dHByb2Nlc3NvcihyZXF1ZXN0KToKKyAgICByZXQgPSB7CisgICAgICAgICJwcm9qZWN0cyI6IFByb2plY3Qub2JqZWN0cy5hbGwoKSwKKyAgICAgICAgIkRFQlVHIiA6IHRvYXN0ZXJtYWluLnNldHRpbmdzLkRFQlVHLAorICAgICAgICAiVE9BU1RFUl9CUkFOQ0giOiB0b2FzdGVybWFpbi5zZXR0aW5ncy5UT0FTVEVSX0JSQU5DSCwKKyAgICAgICAgIlRPQVNURVJfUkVWSVNJT04iIDogdG9hc3Rlcm1haW4uc2V0dGluZ3MuVE9BU1RFUl9SRVZJU0lPTiwKKyAgICB9CisgICAgcmV0dXJuIHJldAorCisKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdExheWVyLCBQcm9qZWN0VGFyZ2V0LCBQcm9qZWN0VmFyaWFibGUKKworIyB3ZSBoYXZlIGEgc2V0IG9mIGZ1bmN0aW9ucyBpZiB3ZSdyZSBpbiBtYW5hZ2VkIG1vZGUsIG9yCisjIGEgZGVmYXVsdCAicGFnZSBub3QgYXZhaWxhYmxlIiBzaW1wbGUgZnVuY3Rpb25zIGZvciBpbnRlcmFjdGl2ZSBtb2RlCisKK2lmIFRydWU6CisgICAgZnJvbSBkamFuZ28uY29udHJpYi5hdXRoLm1vZGVscyBpbXBvcnQgVXNlcgorICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aCBpbXBvcnQgYXV0aGVudGljYXRlLCBsb2dpbgorICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5kZWNvcmF0b3JzIGltcG9ydCBsb2dpbl9yZXF1aXJlZAorCisgICAgZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCcmFuY2gsIExheWVyU291cmNlLCBUb2FzdGVyU2V0dGluZywgUmVsZWFzZSwgTWFjaGluZSwgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeQorICAgIGZyb20gYmxkY29udHJvbC5tb2RlbHMgaW1wb3J0IEJ1aWxkUmVxdWVzdAorCisgICAgaW1wb3J0IHRyYWNlYmFjaworCisgICAgY2xhc3MgQmFkUGFyYW1ldGVyRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICcnJyBUaGUgZXhjZXB0aW9uIHJhaXNlZCBvbiBpbnZhbGlkIFBPU1QgcmVxdWVzdHMgJycnCisgICAgICAgIHBhc3MKKworICAgICMgc2hvd3MgdGhlICJhbGwgYnVpbGRzIiBwYWdlIGZvciBtYW5hZ2VkIG1vZGU7IGl0IGRpc3BsYXlzIGJ1aWxkIHJlcXVlc3RzIChhdCBsZWFzdCBzdGFydGVkISkgaW5zdGVhZCBvZiBhY3R1YWwgYnVpbGRzCisgICAgIyBXQVJOSU5HIF9idWlsZF9saXN0X2hlbHBlcigpIG1heSByYWlzZSBhIFJlZGlyZWN0RXhjZXB0aW9uLCB3aGljaAorICAgICMgd2lsbCBzZXQgdGhlIEdFVCBwYXJhbWV0ZXJzIGFuZCByZWRpcmVjdCBiYWNrIHRvIHRoZQorICAgICMgYWxsLWJ1aWxkcyBvciBwcm9qZWN0YnVpbGRzIHBhZ2UgYXMgYXBwcm9wcmlhdGU7CisgICAgIyBUT0RPIGRvbid0IHVzZSBleGNlcHRpb25zIHRvIGNvbnRyb2wgcHJvZ3JhbSBmbG93CisgICAgQF90ZW1wbGF0ZV9yZW5kZXJlcigiYnVpbGRzLmh0bWwiKQorICAgIGRlZiBidWlsZHMocmVxdWVzdCk6CisgICAgICAgICMgZGVmaW5lIGhlcmUgd2hhdCBwYXJhbWV0ZXJzIHRoZSB2aWV3IG5lZWRzIGluIHRoZSBHRVQgcG9ydGlvbiBpbiBvcmRlciB0bworICAgICAgICAjIGJlIGFibGUgdG8gZGlzcGxheSBzb21ldGhpbmcuICAnY291bnQnIGFuZCAncGFnZScgYXJlIG1hbmRhdG9yeSBmb3IgYWxsIHZpZXdzCisgICAgICAgICMgdGhhdCB1c2UgcGFnaW5hdG9ycy4KKworICAgICAgICBxdWVyeXNldCA9IEJ1aWxkLm9iamVjdHMuYWxsKCkKKworICAgICAgICByZWRpcmVjdF9wYWdlID0gcmVzb2x2ZShyZXF1ZXN0LnBhdGhfaW5mbykudXJsX25hbWUKKworICAgICAgICBjb250ZXh0LCBwYWdlc2l6ZSwgb3JkZXJieSA9IF9idWlsZF9saXN0X2hlbHBlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RfcGFnZSkKKyAgICAgICAgIyBhbGwgYnVpbGRzIHBhZ2UgYXMgYSBQcm9qZWN0IGNvbHVtbgorICAgICAgICBjb250ZXh0Wyd0YWJsZWNvbHMnXS5hcHBlbmQoeworICAgICAgICAgICAgJ25hbWUnOiAnUHJvamVjdCcsCisgICAgICAgICAgICAnY2xjbGFzcyc6ICdwcm9qZWN0X2NvbHVtbicKKyAgICAgICAgfSkKKworICAgICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICAjIGhlbHBlciBmdW5jdGlvbiwgdG8gYmUgdXNlZCBvbiAiYWxsIGJ1aWxkcyIgYW5kICJwcm9qZWN0IGJ1aWxkcyIgcGFnZXMKKyAgICBkZWYgX2J1aWxkX2xpc3RfaGVscGVyKHJlcXVlc3QsIHF1ZXJ5c2V0X2FsbCwgcmVkaXJlY3RfcGFnZSwgcGlkPU5vbmUpOgorICAgICAgICBkZWZhdWx0X29yZGVyYnkgPSAnY29tcGxldGVkX29uOi0nCisgICAgICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwLCBkZWZhdWx0X29yZGVyYnkpCisgICAgICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgICAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIHBhcmFtcyA9IHt9CisgICAgICAgICAgICBpZiBwaWQ6CisgICAgICAgICAgICAgICAgcGFyYW1zID0geydwaWQnOiBwaWR9CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdEV4Y2VwdGlvbihyZWRpcmVjdF9wYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5HRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcGFyYW1zKQorCisgICAgICAgICMgYm9pbGVycGxhdGUgY29kZSB0aGF0IHRha2VzIGEgcmVxdWVzdCBmb3IgYW4gb2JqZWN0IHR5cGUgYW5kIHJldHVybnMgYSBxdWVyeXNldAorICAgICAgICAjIGZvciB0aGF0IG9iamVjdCB0eXBlLiBjb3B5cGFzdGEgZm9yIGFsbCBuZWVkZWQgdGFibGUgc2VhcmNoZXMKKyAgICAgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBCdWlsZCkKKworICAgICAgICAjIHBvc3QtcHJvY2VzcyBhbnkgZGF0ZSByYW5nZSBmaWx0ZXJzCisgICAgICAgIGZpbHRlcl9zdHJpbmcsIGRhdGVyYW5nZV9zZWxlY3RlZCA9IF9tb2RpZnlfZGF0ZV9yYW5nZV9maWx0ZXIoZmlsdGVyX3N0cmluZykKKworICAgICAgICAjIGRvbid0IHNob3cgImluIHByb2dyZXNzIiBidWlsZHMgaW4gImFsbCBidWlsZHMiIG9yICJwcm9qZWN0IGJ1aWxkcyIKKyAgICAgICAgcXVlcnlzZXRfYWxsID0gcXVlcnlzZXRfYWxsLmV4Y2x1ZGUob3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKQorCisgICAgICAgICMgYXBwZW5kIHByb2plY3QgaW5mbworICAgICAgICBxdWVyeXNldF9hbGwgPSBxdWVyeXNldF9hbGwuc2VsZWN0X3JlbGF0ZWQoInByb2plY3QiKQorCisgICAgICAgICMgYW5ub3RhdGUgd2l0aCBudW1iZXIgb2YgRVJST1IgYW5kIEVYQ0VQVElPTiBsb2cgbWVzc2FnZXMKKyAgICAgICAgcXVlcnlzZXRfYWxsID0gcXVlcnlzZXRfYWxsLmFubm90YXRlKAorICAgICAgICAgICAgZXJyb3JzX25vID0gQ291bnQoCisgICAgICAgICAgICAgICAgJ2xvZ21lc3NhZ2UnLAorICAgICAgICAgICAgICAgIG9ubHk9UShsb2dtZXNzYWdlX19sZXZlbD1Mb2dNZXNzYWdlLkVSUk9SKSB8CisgICAgICAgICAgICAgICAgICAgICBRKGxvZ21lc3NhZ2VfX2xldmVsPUxvZ01lc3NhZ2UuRVhDRVBUSU9OKQorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICAgICAgIyBhbm5vdGF0ZSB3aXRoIG51bWJlciBvZiB3YXJuaW5ncworICAgICAgICBxX3dhcm5pbmdzID0gUShsb2dtZXNzYWdlX19sZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcpCisgICAgICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5hbm5vdGF0ZSgKKyAgICAgICAgICAgIHdhcm5pbmdzX25vID0gQ291bnQoJ2xvZ21lc3NhZ2UnLCBvbmx5PXFfd2FybmluZ3MpCisgICAgICAgICkKKworICAgICAgICAjIGFkZCB0aW1lc3BlbnQgZmllbGQKKyAgICAgICAgdGltZXNwZW50ID0gJ2NvbXBsZXRlZF9vbiAtIHN0YXJ0ZWRfb24nCisgICAgICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5leHRyYShzZWxlY3Q9eyd0aW1lc3BlbnQnOiB0aW1lc3BlbnR9KQorCisgICAgICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gX2dldF9xdWVyeXNldChCdWlsZCwgcXVlcnlzZXRfYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgc2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmluZ19zdHJpbmcsICctY29tcGxldGVkX29uJykKKworICAgICAgICBxdWVyeXNldCA9IF9nZXRfcXVlcnlzZXQoQnVpbGQsIHF1ZXJ5c2V0X2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJpbmdfc3RyaW5nLCAnLWNvbXBsZXRlZF9vbicpCisKKyAgICAgICAgIyByZXRyaWV2ZSB0aGUgb2JqZWN0cyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZTsgYnVpbGRzIGEgcGFnaW5hdG9yIGFuZCBnZXRzIGEgcGFnZSByYW5nZSB0byBkaXNwbGF5CisgICAgICAgIGJ1aWxkX2luZm8gPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAgICAgIyBidWlsZCB2aWV3LXNwZWNpZmljIGluZm9ybWF0aW9uOyB0aGlzIGlzIHJlbmRlcmVkIHNwZWNpZmljYWxseSBpbiB0aGUgYnVpbGRzIHBhZ2UsIGF0IHRoZSB0b3Agb2YgdGhlIHBhZ2UgKGkuZS4gUmVjZW50IGJ1aWxkcykKKyAgICAgICAgYnVpbGRfbXJ1ID0gQnVpbGQub2JqZWN0cy5vcmRlcl9ieSgiLXN0YXJ0ZWRfb24iKVs6M10KKworICAgICAgICAjIGNhbGN1bGF0ZSB0aGUgZXhhY3QgYmVnaW5pbmcgb2YgbG9jYWwgdG9kYXkgYW5kIHllc3RlcmRheSwgYXBwZW5kIGNvbnRleHQKKyAgICAgICAgY29udGV4dF9kYXRlLHRvZGF5X2JlZ2luLHllc3RlcmRheV9iZWdpbiA9IF9hZGRfZGF0ZXJhbmdlX2NvbnRleHQocXVlcnlzZXRfYWxsLCByZXF1ZXN0LCB7J3N0YXJ0ZWRfb24nLCdjb21wbGV0ZWRfb24nfSkKKworICAgICAgICAjIHNldCB1cCBsaXN0IG9mIGZzdHlwZXMgZm9yIGVhY2ggYnVpbGQKKyAgICAgICAgZnN0eXBlc19tYXAgPSB7fTsKKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkX2luZm86CisgICAgICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBidWlsZF9pZCA9IGJ1aWxkLmlkICkKKyAgICAgICAgICAgIGNvbW1hID0gIiI7CisgICAgICAgICAgICBleHRlbnNpb25zID0gIiI7CisgICAgICAgICAgICBmb3IgdCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgIGlmICggbm90IHQuaXNfaW1hZ2UgKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0aWYgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlciggdGFyZ2V0X2lkID0gdC5pZCApCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gdGlmOgorICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLip0YXIuYnoyJywgJ3Rhci5iejInLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcyA9PSBpLmZpbGVfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHM9cmUuc3ViKCcuKlwuJywgJycsIGkuZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBOb25lID09IHJlLnNlYXJjaChzLGV4dGVuc2lvbnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucyArPSBjb21tYSArIHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hID0gIiwgIgorICAgICAgICAgICAgZnN0eXBlc19tYXBbYnVpbGQuaWRdPWV4dGVuc2lvbnMKKworICAgICAgICAjIHNlbmQgdGhlIGRhdGEgdG8gdGhlIHRlbXBsYXRlCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgIyBzcGVjaWZpYyBpbmZvIGZvcgorICAgICAgICAgICAgICAgICAgICAnbXJ1JyA6IGJ1aWxkX21ydSwKKyAgICAgICAgICAgICAgICAjIFRPRE86IGNvbW1vbiBvYmplY3RzIGZvciBhbGwgdGFibGUgdmlld3MsIGFkYXB0IGFzIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAnb2JqZWN0cycgOiBidWlsZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAnb2JqZWN0bmFtZScgOiAiYnVpbGRzIiwKKyAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiBkZWZhdWx0X29yZGVyYnksCisgICAgICAgICAgICAgICAgICAgICdmc3R5cGVzJyA6IGZzdHlwZXNfbWFwLAorICAgICAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nIDogc2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAgICAgICAgICd0b3RhbF9jb3VudCcgOiBxdWVyeXNldF93aXRoX3NlYXJjaC5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAnZGF0ZXJhbmdlX3NlbGVjdGVkJyA6IGRhdGVyYW5nZV9zZWxlY3RlZCwKKyAgICAgICAgICAgICAgICAjIFNwZWNpZmllcyB0aGUgZGlzcGxheSBvZiBjb2x1bW5zIGZvciB0aGUgdGFibGUsIGFwcGVhcmFuY2UgaW4gIkVkaXQgY29sdW1ucyIgYm94LCB0b2dnbGluZyBkZWZhdWx0IHNob3cvaGlkZSwgYW5kIHNwZWNpZnlpbmcgZmlsdGVycyBmb3IgY29sdW1ucworICAgICAgICAgICAgICAgICAgICAndGFibGVjb2xzJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ091dGNvbWUnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29sdW1uIHdpdGggYSBzaW5nbGUgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnIDogIlRoZSBvdXRjb21lIHRlbGxzIHlvdSBpZiBhIGJ1aWxkIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgb3IgZmFpbGVkIiwgICAgICMgdGhlIGhlbHAgYnV0dG9uIGNvbnRlbnQKKyAgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnIDogInNwYW4yIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluZGljYXRpb24gYWJvdXQgY29sdW1uIHdpZHRoOyBjb21lcyBmcm9tIHRoZSBkZXNpZ24KKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm91dGNvbWUiKSwgICAgICAgICAgICAgICAjIGFkZHMgb3JkZXJpbmcgYnkgdGhlIGZpZWxkIHZhbHVlOyBkZWZhdWx0IGFzY2VuZGluZyB1bmxlc3MgY2xpY2tlZCBmcm9tIGFzY2VuZGluZyBpbnRvIGRlc2NlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm91dGNvbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAjIGZpbHRlciBmaWVsZCB3aWxsIHNldCBhIGZpbHRlciBvbiB0aGF0IGNvbHVtbiB3aXRoIHRoZSBzcGVjcyBpbiB0aGUgZmlsdGVyIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgY2xhc3MgZmllbGQgaW4gdGhlIGZpbHRlciBoYXMgbm8gcmVsYXRpb24gd2l0aCBjbGNsYXNzOyB0aGUgY29udHJvbCBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgVUkKKyAgICAgICAgICAgICAgICAgICAgICAjIHN0aWxsLCBpdCBpcyByZWNvbW1lbmRlZCBmb3IgdGhlIHZhbHVlcyB0byBiZSBpZGVudGljYWwgZm9yIGVhc3kgdHJhY2tpbmcgaW4gdGhlIGdlbmVyYXRlZCBIVE1MCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ291dGNvbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnU3VjY2Vzc2Z1bCBidWlsZHMnLCAnb3V0Y29tZTonICsgc3RyKEJ1aWxkLlNVQ0NFRURFRCksIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPXN0cihCdWlsZC5TVUNDRUVERUQpKS5jb3VudCgpKSwgICMgdGhpcyBpcyB0aGUgZmllbGQgc2VhcmNoIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRmFpbGVkIGJ1aWxkcycsICdvdXRjb21lOicrIHN0cihCdWlsZC5GQUlMRUQpLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1zdHIoQnVpbGQuRkFJTEVEKSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1JlY2lwZScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVmYXVsdCBjb2x1bW4sIGRpc2FibGVkIGJveCwgd2l0aCBqdXN0IHRoZSBuYW1lIGluIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiV2hhdCB5b3UgYnVpbHQgKGkuZS4gb25lIG9yIG1vcmUgcmVjaXBlcyBvciBpbWFnZSByZWNpcGVzKSIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ0YXJnZXRfX3RhcmdldCIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidGFyZ2V0X190YXJnZXQiKSwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ01hY2hpbmUnLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBtYWNoaW5lIGlzIHRoZSBoYXJkd2FyZSBmb3Igd2hpY2ggeW91IGFyZSBidWlsZGluZyBhIHJlY2lwZSBvciBpbWFnZSByZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibWFjaGluZSIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAibWFjaGluZSIpLAorICAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzcGFuMycKKyAgICAgICAgICAgICAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgc2xpZ2h0bHkgd2lkZXIgY29sdW1uCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdTdGFydGVkIG9uJywgJ2NsY2xhc3MnOiAnc3RhcnRlZF9vbicsICdoaWRkZW4nIDogMSwgICAgICAjIHRoaXMgaXMgYW4gdW5jaGVja2VkIGJveCwgd2hpY2ggaGlkZXMgdGhlIGNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBkYXRlIGFuZCB0aW1lIHlvdSBzdGFydGVkIHRoZSBidWlsZCIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJzdGFydGVkX29uIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzdGFydGVkX29uIiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogInN0YXJ0ZWRfb24iLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdzdGFydGVkX29uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlRvZGF5J3MgYnVpbGRzIiAsICdzdGFydGVkX29uX19ndGU6Jyt0b2RheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSwgcXVlcnlzZXRfYWxsLmZpbHRlcihzdGFydGVkX29uX19ndGU9dG9kYXlfYmVnaW4pLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJZZXN0ZXJkYXkncyBidWlsZHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydGVkX29uX19ndGUhc3RhcnRlZF9vbl9fbHQ6JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAreWVzdGVyZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpKychJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlzZXRfYWxsLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbl9fZ3RlPXllc3RlcmRheV9iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbl9fbHQ9dG9kYXlfYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiQnVpbGQgZGF0ZSByYW5nZSIsICdkYXRlcmFuZ2UnLCAxLCAnJywgJ3N0YXJ0ZWRfb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0NvbXBsZXRlZCBvbicsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIGZpbmlzaGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImNvbXBsZXRlZF9vbiIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiY29tcGxldGVkX29uIiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2NvbXBsZXRlZF9vbicsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ2NvbXBsZXRlZF9vbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUb2RheSdzIGJ1aWxkcyIgLCAnY29tcGxldGVkX29uX19ndGU6Jyt0b2RheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSwgcXVlcnlzZXRfYWxsLmZpbHRlcihjb21wbGV0ZWRfb25fX2d0ZT10b2RheV9iZWdpbikuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlllc3RlcmRheSdzIGJ1aWxkcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbl9fZ3RlIWNvbXBsZXRlZF9vbl9fbHQ6JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAreWVzdGVyZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpKychJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlzZXRfYWxsLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uX19ndGU9eWVzdGVyZGF5X2JlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb25fX2x0PXRvZGF5X2JlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkJ1aWxkIGRhdGUgcmFuZ2UiLCAnZGF0ZXJhbmdlJywgMSwgJycsICdjb21wbGV0ZWRfb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnRmFpbGVkIHRhc2tzJywgJ2NsY2xhc3MnOiAnZmFpbGVkX3Rhc2tzJywgICAgICAgICAgICAgICAgIyBzcGVjaWZpbmcgYSBjbGNsYXNzIHdpbGwgZW5hYmxlIHRoZSBjaGVja2JveAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IHRhc2tzIGZhaWxlZCBkdXJpbmcgdGhlIGJ1aWxkIiwKKyAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInIDogeydjbGFzcycgOiAnZmFpbGVkX3Rhc2tzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRoIGZhaWxlZCB0YXNrcycsICd0YXNrX2J1aWxkX19vdXRjb21lOjQnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodGFza19idWlsZF9fb3V0Y29tZT00KS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQnVpbGRzIHdpdGhvdXQgZmFpbGVkIHRhc2tzJywgJ3Rhc2tfYnVpbGRfX291dGNvbWU6Tk9UNCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih+USh0YXNrX2J1aWxkX19vdXRjb21lPTQpKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnRXJyb3JzJywgJ2NsY2xhc3MnOiAnZXJyb3JzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJIb3cgbWFueSBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGJ1aWxkIChpZiBhbnkpIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImVycm9yc19ubyIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZXJyb3JzX25vIiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2Vycm9yc19ubycsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ2Vycm9yc19ubycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aCBlcnJvcnMnLCAnZXJyb3JzX25vX19ndGU6MScsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihlcnJvcnNfbm9fX2d0ZT0xKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQnVpbGRzIHdpdGhvdXQgZXJyb3JzJywgJ2Vycm9yc19ubzowJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKGVycm9yc19ubz0wKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnV2FybmluZ3MnLCAnY2xjbGFzcyc6ICd3YXJuaW5nc19ubycsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgd2FybmluZ3Mgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGJ1aWxkIChpZiBhbnkpIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIndhcm5pbmdzX25vIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ3YXJuaW5nc19ubyIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICd3YXJuaW5nc19ubycsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ3dhcm5pbmdzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRoIHdhcm5pbmdzJywnd2FybmluZ3Nfbm9fX2d0ZToxJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHdhcm5pbmdzX25vX19ndGU9MSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRob3V0IHdhcm5pbmdzJywnd2FybmluZ3Nfbm86MCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih3YXJuaW5nc19ubz0wKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnVGltZScsICdjbGNsYXNzJzogJ3RpbWUnLCAnaGlkZGVuJyA6IDEsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IGxvbmcgaXQgdG9vayB0aGUgYnVpbGQgdG8gZmluaXNoIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInRpbWVzcGVudCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidGltZXNwZW50IiksCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdJbWFnZSBmaWxlcycsICdjbGNsYXNzJzogJ291dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIHJvb3QgZmlsZSBzeXN0ZW0gdHlwZXMgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkLiBZb3UgY2FuIGZpbmQgdGhlbSBpbiB5b3VyIDxjb2RlPi9idWlsZC90bXAvZGVwbG95L2ltYWdlcy88L2NvZGU+IGRpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE86IGNvbXB1dGUgaW1hZ2UgZnN0eXBlcyBmcm9tIFRhcmdldF9JbWFnZV9GaWxlCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAjIG1lcmdlIGRhdGVyYW5nZSB2YWx1ZXMKKyAgICAgICAgY29udGV4dC51cGRhdGUoY29udGV4dF9kYXRlKQorICAgICAgICByZXR1cm4gY29udGV4dCwgcGFnZXNpemUsIG9yZGVyYnkKKworCisKKyAgICAjIG5ldyBwcm9qZWN0CisgICAgZGVmIG5ld3Byb2plY3QocmVxdWVzdCk6CisgICAgICAgIHRlbXBsYXRlID0gIm5ld3Byb2plY3QuaHRtbCIKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdlbWFpbCc6IHJlcXVlc3QudXNlci5lbWFpbCBpZiByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpIGVsc2UgJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiByZXF1ZXN0LnVzZXIudXNlcm5hbWUgaWYgcmVxdWVzdC51c2VyLmlzX2F1dGhlbnRpY2F0ZWQoKSBlbHNlICcnLAorICAgICAgICAgICAgJ3JlbGVhc2VzJzogUmVsZWFzZS5vYmplY3RzLm9yZGVyX2J5KCJkZXNjcmlwdGlvbiIpLAorICAgICAgICB9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsnZGVmYXVsdGJyYW5jaCddID0gVG9hc3RlclNldHRpbmcub2JqZWN0cy5nZXQobmFtZSA9ICJERUZBVUxUX1JFTEVBU0UiKS52YWx1ZQorICAgICAgICBleGNlcHQgVG9hc3RlclNldHRpbmcuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJHRVQiOgorICAgICAgICAgICAgIyByZW5kZXIgbmV3IHByb2plY3QgcGFnZQorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICAgICAgZWxpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiUE9TVCI6CisgICAgICAgICAgICBtYW5kYXRvcnlfZmllbGRzID0gWydwcm9qZWN0bmFtZScsICdwdHlwZSddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHR5cGUgPSByZXF1ZXN0LlBPU1QuZ2V0KCdwdHlwZScpCisgICAgICAgICAgICAgICAgaWYgcHR5cGUgPT0gImJ1aWxkIjoKKyAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5X2ZpZWxkcy5hcHBlbmQoJ3Byb2plY3R2ZXJzaW9uJykKKyAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBoYXZlIHZhbHVlcyBmb3IgYWxsIG1hbmRhdG9yeV9maWVsZHMKKyAgICAgICAgICAgICAgICBpZiByZWR1Y2UoIGxhbWJkYSB4LCB5OiB4IG9yIHksIG1hcChsYW1iZGEgeDogbGVuKHJlcXVlc3QuUE9TVC5nZXQoeCwgJycpKSA9PSAwLCBtYW5kYXRvcnlfZmllbGRzKSk6CisgICAgICAgICAgICAgICAgIyBzZXQgYWxlcnQgZm9yIG1pc3NpbmcgZmllbGRzCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZFBhcmFtZXRlckV4Y2VwdGlvbigiRmllbGRzIG1pc3Npbmc6ICIgKworICAgICAgICAgICAgIiwgIi5qb2luKFt4IGZvciB4IGluIG1hbmRhdG9yeV9maWVsZHMgaWYgbGVuKHJlcXVlc3QuUE9TVC5nZXQoeCwgJycpKSA9PSAwIF0pKQorCisgICAgICAgICAgICAgICAgaWYgbm90IHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCk6CisgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBhdXRoZW50aWNhdGUodXNlcm5hbWUgPSByZXF1ZXN0LlBPU1QuZ2V0KCd1c2VybmFtZScsICdfYW5vbnVzZXInKSwgcGFzc3dvcmQgPSAnbm9wYXNzJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdXNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlciA9IFVzZXIub2JqZWN0cy5jcmVhdGVfdXNlcih1c2VybmFtZSA9IHJlcXVlc3QuUE9TVC5nZXQoJ3VzZXJuYW1lJywgJ19hbm9udXNlcicpLCBlbWFpbCA9IHJlcXVlc3QuUE9TVC5nZXQoJ2VtYWlsJywgJycpLCBwYXNzd29yZCA9ICJub3Bhc3MiKQorCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyID0gYXV0aGVudGljYXRlKHVzZXJuYW1lID0gdXNlci51c2VybmFtZSwgcGFzc3dvcmQgPSAnbm9wYXNzJykKKyAgICAgICAgICAgICAgICAgICAgbG9naW4ocmVxdWVzdCwgdXNlcikKKworICAgICAgICAgICAgICAgICMgIHNhdmUgdGhlIHByb2plY3QKKyAgICAgICAgICAgICAgICBpZiBwdHlwZSA9PSAiYW5hbHlzaXMiOgorICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuZ2V0KHBrID0gcmVxdWVzdC5QT1NULmdldCgncHJvamVjdHZlcnNpb24nLCBOb25lICkpCisKKyAgICAgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3QobmFtZSA9IHJlcXVlc3QuUE9TVFsncHJvamVjdG5hbWUnXSwgcmVsZWFzZSA9IHJlbGVhc2UpCisgICAgICAgICAgICAgICAgcHJqLnVzZXJfaWQgPSByZXF1ZXN0LnVzZXIucGsKKyAgICAgICAgICAgICAgICBwcmouc2F2ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KHJldmVyc2UocHJvamVjdCwgYXJncz0ocHJqLnBrLCkpICsgIj9ub3RpZnk9bmV3LXByb2plY3QiKQorCisgICAgICAgICAgICBleGNlcHQgKEludGVncml0eUVycm9yLCBCYWRQYXJhbWV0ZXJFeGNlcHRpb24pIGFzIGU6CisgICAgICAgICAgICAgICAgIyBmaWxsIGluIHBhZ2Ugd2l0aCBwcmV2aW91c2x5IHN1Ym1pdHRlZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICBtYXAobGFtYmRhIHg6IGNvbnRleHQuX19zZXRpdGVtX18oeCwgcmVxdWVzdC5QT1NULmdldCh4LCAiLS0gbWlzc2luZyIpKSwgbWFuZGF0b3J5X2ZpZWxkcykKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGUsIEludGVncml0eUVycm9yKSBhbmQgInVzZXJuYW1lIiBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ2FsZXJ0J10gPSAiWW91ciBjaG9zZW4gdXNlcm5hbWUgaXMgYWxyZWFkeSB1c2VkIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ2FsZXJ0J10gPSBzdHIoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBIVFRQIG1ldGhvZCBmb3IgdGhpcyBwYWdlIikKKworCisKKyAgICAjIFNob3dzIHRoZSBlZGl0IHByb2plY3QgcGFnZQorICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoJ3Byb2plY3QuaHRtbCcpCisgICAgZGVmIHByb2plY3QocmVxdWVzdCwgcGlkKToKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChpZCA9IHBpZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwdXNlciA9IFVzZXIub2JqZWN0cy5nZXQoaWQgPSBwcmoudXNlcl9pZCkKKyAgICAgICAgZXhjZXB0IFVzZXIuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcHVzZXIgPSBOb25lCisKKyAgICAgICAgIyBleGVjdXRlIFBPU1QgcmVxdWVzdHMKKyAgICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgorICAgICAgICAgICAgIyBhZGQgbGF5ZXJzCisgICAgICAgICAgICBpZiAnbGF5ZXJBZGQnIGluIHJlcXVlc3QuUE9TVCBhbmQgbGVuKHJlcXVlc3QuUE9TVFsnbGF5ZXJBZGQnXSkgPiAwOgorICAgICAgICAgICAgICAgIGZvciBsYyBpbiBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKHBrX19pbj1baSBmb3IgaSBpbiByZXF1ZXN0LlBPU1RbJ2xheWVyQWRkJ10uc3BsaXQoIiwiKSBpZiBsZW4oaSkgPiAwXSk6CisgICAgICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdCA9IHByaiwgbGF5ZXJjb21taXQgPSBsYykKKworICAgICAgICAgICAgIyByZW1vdmUgbGF5ZXJzCisgICAgICAgICAgICBpZiAnbGF5ZXJEZWwnIGluIHJlcXVlc3QuUE9TVCBhbmQgbGVuKHJlcXVlc3QuUE9TVFsnbGF5ZXJEZWwnXSkgPiAwOgorICAgICAgICAgICAgICAgIGZvciB0IGluIHJlcXVlc3QuUE9TVFsnbGF5ZXJEZWwnXS5zdHJpcCgpLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgICAgIHB0ID0gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmosIGxheWVyY29tbWl0X2lkID0gaW50KHQpKS5kZWxldGUoKQorCisgICAgICAgICAgICBpZiAncHJvamVjdE5hbWUnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBwcmoubmFtZSA9IHJlcXVlc3QuUE9TVFsncHJvamVjdE5hbWUnXQorICAgICAgICAgICAgICAgIHByai5zYXZlKCk7CisKKyAgICAgICAgICAgIGlmICdwcm9qZWN0VmVyc2lvbicgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHJlbGVhc2UgaXMgdGhlIGN1cnJlbnQgcHJvamVjdCB0aGVuIHJldHVybiBub3cKKyAgICAgICAgICAgICAgICBpZiBwcmoucmVsZWFzZS5wayA9PSBpbnQocmVxdWVzdC5QT1NULmdldCgncHJvamVjdFZlcnNpb24nLC0xKSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgICAgICAgICAgICAgcHJqLnJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuZ2V0KHBrID0gcmVxdWVzdC5QT1NUWydwcm9qZWN0VmVyc2lvbiddKQorICAgICAgICAgICAgICAgICMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGJpdGJha2UgdmVyc2lvbgorICAgICAgICAgICAgICAgIHByai5iaXRiYWtlX3ZlcnNpb24gPSBwcmoucmVsZWFzZS5iaXRiYWtlX3ZlcnNpb24KKyAgICAgICAgICAgICAgICBwcmouc2F2ZSgpCisgICAgICAgICAgICAgICAgIyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgbGF5ZXJzCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcHJqLnByb2plY3RsYXllcl9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgICAgICMgZmluZCBhbmQgYWRkIGEgc2ltaWxhcmx5LW5hbWVkIGxheWVyIG9uIHRoZSBuZXcgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGx2ID0gcHJqLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhsYXllcl9uYW1lID0gaS5sYXllcmNvbW1pdC5sYXllci5uYW1lKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gcHJqLCBsYXllcmNvbW1pdCA9IGx2KQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHJpZCBvZiB0aGUgb2xkIGVudHJ5CisgICAgICAgICAgICAgICAgICAgICAgICBpLmRlbGV0ZSgpCisKKyAgICAgICAgICAgIGlmICdtYWNoaW5lTmFtZScgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIG1hY2hpbmV2YXIgPSBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZT0iTUFDSElORSIpCisgICAgICAgICAgICAgICAgbWFjaGluZXZhci52YWx1ZT1yZXF1ZXN0LlBPU1RbJ21hY2hpbmVOYW1lJ10KKyAgICAgICAgICAgICAgICBtYWNoaW5ldmFyLnNhdmUoKQorCisKKyAgICAgICAgIyB3ZSB1c2UgaW1wbGljaXQga25vd2xlZGdlIG9mIHRoZSBjdXJyZW50IHVzZXIncyBwcm9qZWN0IHRvIGZpbHRlciBsYXllciBpbmZvcm1hdGlvbiwgZS5nLgorICAgICAgICBwaWQgPSBwcmouaWQKKworICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCisgICAgICAgIGZyZXF0YXJnZXRzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJlcXRhcmdldHMgKz0gbWFwKGxhbWJkYSB4OiB4LnRhcmdldCwgcmVkdWNlKGxhbWJkYSB4LCB5OiB4ICsgeSwgICBtYXAobGFtYmRhIHg6IGxpc3QoeC50YXJnZXRfc2V0LmFsbCgpKSwgQnVpbGQub2JqZWN0cy5maWx0ZXIocHJvamVjdCA9IHByaiwgb3V0Y29tZV9fbHQgPSBCdWlsZC5JTl9QUk9HUkVTUykpKSkKKyAgICAgICAgICAgIGZyZXF0YXJnZXRzICs9IG1hcChsYW1iZGEgeDogeC50YXJnZXQsIHJlZHVjZShsYW1iZGEgeCwgeTogeCArIHksICAgbWFwKGxhbWJkYSB4OiBsaXN0KHguYnJ0YXJnZXRfc2V0LmFsbCgpKSwgQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmosIHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQpKSkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZyZXF0YXJnZXRzID0gQ291bnRlcihmcmVxdGFyZ2V0cykKKyAgICAgICAgZnJlcXRhcmdldHMgPSBzb3J0ZWQoZnJlcXRhcmdldHMsIGtleSA9IGxhbWJkYSB4OiBmcmVxdGFyZ2V0c1t4XSwgcmV2ZXJzZT1UcnVlKQorCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAicHJvamVjdCIgOiBwcmosCisgICAgICAgICAgICAibHZzX25vcyIgOiBMYXllcl9WZXJzaW9uLm9iamVjdHMuYWxsKCkuY291bnQoKSwKKyAgICAgICAgICAgICJjb21wbGV0ZWRidWlsZHMiOiBCdWlsZC5vYmplY3RzLmV4Y2x1ZGUob3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKS5maWx0ZXIocHJvamVjdF9pZCA9IHBpZCksCisgICAgICAgICAgICAicHJqIiA6IHsibmFtZSI6IHByai5uYW1lLCB9LAorICAgICAgICAgICAgImJ1aWxkcmVxdWVzdHMiIDogcHJqLmJ1aWxkX3NldC5maWx0ZXIob3V0Y29tZT1CdWlsZC5JTl9QUk9HUkVTUyksCisgICAgICAgICAgICAiYnVpbGRzIiA6IF9wcm9qZWN0X3JlY2VudF9idWlsZF9saXN0KHByaiksCisgICAgICAgICAgICAibGF5ZXJzIiA6ICBtYXAobGFtYmRhIHg6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IHgubGF5ZXJjb21taXQucGssCisgICAgICAgICAgICAgICAgICAgICAgICAib3JkZXJpZCI6IHgucGssCisgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiB4LmxheWVyY29tbWl0LmxheWVyLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6IHgubGF5ZXJjb21taXQubGF5ZXIudmNzX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2Y3NfcmVmZXJlbmNlIiA6IHgubGF5ZXJjb21taXQuZ2V0X3Zjc19yZWZlcmVuY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1cmwiOiB4LmxheWVyY29tbWl0LmxheWVyLmxheWVyX2luZGV4X3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsYXllcmRldGFpbHVybCI6IHgubGF5ZXJjb21taXQuZ2V0X2RldGFpbHNwYWdlX3VybChwcmoucGspLAorICAgICAgICAgICAgICAgICMgVGhpcyBicmFuY2ggbmFtZSBpcyBhY3R1YWxseSB0aGUgcmVsZWFzZQorICAgICAgICAgICAgICAgICAgICAgICAgImJyYW5jaCIgOiB7ICJuYW1lIiA6IHgubGF5ZXJjb21taXQuZ2V0X3Zjc19yZWZlcmVuY2UoKSwgImxheWVyc291cmNlIiA6IHgubGF5ZXJjb21taXQudXBfYnJhbmNoLmxheWVyX3NvdXJjZS5uYW1lIGlmIHgubGF5ZXJjb21taXQudXBfYnJhbmNoICE9IE5vbmUgZWxzZSBOb25lfX0sCisgICAgICAgICAgICAgICAgICAgIHByai5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpLm9yZGVyX2J5KCJpZCIpKSwKKyAgICAgICAgICAgICJ0YXJnZXRzIiA6IG1hcChsYW1iZGEgeDogeyJ0YXJnZXQiIDogeC50YXJnZXQsICJ0YXNrIiA6IHgudGFzaywgInBrIjogeC5wa30sIHByai5wcm9qZWN0dGFyZ2V0X3NldC5hbGwoKSksCisgICAgICAgICAgICAidmFyaWFibGVzIjogbWFwKGxhbWJkYSB4OiAoeC5uYW1lLCB4LnZhbHVlKSwgcHJqLnByb2plY3R2YXJpYWJsZV9zZXQuYWxsKCkpLAorICAgICAgICAgICAgImZyZXF0YXJnZXRzIjogZnJlcXRhcmdldHNbOjVdLAorICAgICAgICAgICAgInJlbGVhc2VzIjogbWFwKGxhbWJkYSB4OiB7ImlkIjogeC5waywgIm5hbWUiOiB4Lm5hbWUsICJkZXNjcmlwdGlvbiI6eC5kZXNjcmlwdGlvbn0sIFJlbGVhc2Uub2JqZWN0cy5hbGwoKSksCisgICAgICAgICAgICAicHJvamVjdF9odG1sIjogMSwKKyAgICAgICAgICAgICJyZWNpcGVzVHlwZUFoZWFkVXJsIjogcmV2ZXJzZSgneGhyX3JlY2lwZXN0eXBlYWhlYWQnLCBhcmdzPShwcmoucGssKSksCisgICAgICAgICAgICAicHJvamVjdEJ1aWxkc1VybCI6IHJldmVyc2UoJ3Byb2plY3RidWlsZHMnLCBhcmdzPShwcmoucGssKSksCisgICAgICAgIH0KKworICAgICAgICBpZiBwcmoucmVsZWFzZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHRbJ3JlbGVhc2UnXSA9IHsgImlkIjogcHJqLnJlbGVhc2UucGssICJuYW1lIjogcHJqLnJlbGVhc2UubmFtZSwgImRlc2NyaXB0aW9uIjogcHJqLnJlbGVhc2UuZGVzY3JpcHRpb259CisKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WyJtYWNoaW5lIl0gPSB7Im5hbWUiOiBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZT0iTUFDSElORSIpLnZhbHVlfQorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIGNvbnRleHRbIm1hY2hpbmUiXSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsiZGlzdHJvIl0gPSBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZT0iRElTVFJPIikudmFsdWUKKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBjb250ZXh0WyJkaXN0cm8iXSA9ICItLSBub3Qgc2V0IHlldCIKKworICAgICAgICByZXR1cm4gY29udGV4dAorCisgICAgZGVmIGpzdW5pdHRlc3RzKHJlcXVlc3QpOgorICAgICAgIiIiIFByb3ZpZGVzIGEgcGFnZSBmb3IgdGhlIGpzIHVuaXQgdGVzdHMgIiIiCisgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmZpbHRlcihicmFuY2g9Im1hc3RlciIpLmZpcnN0KCkKKyAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuZmlsdGVyKGJpdGJha2VfdmVyc2lvbj1iYnYpLmZpcnN0KCkKKworICAgICAgbmFtZSA9ICJfanNfdW5pdF90ZXN0X3Byal8iCisKKyAgICAgICMgSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgcHJvamVjdCBieSB0aGlzIG5hbWUgZGVsZXRlIGl0LiBXZSBkb24ndCB3YW50CisgICAgICAjIExvdHMgb2YgZHVwbGljYXRlcyBjbHV0dGVyaW5nIHVwIHRoZSBwcm9qZWN0cy4KKyAgICAgIFByb2plY3Qub2JqZWN0cy5maWx0ZXIobmFtZT1uYW1lKS5kZWxldGUoKQorCisgICAgICBuZXdfcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdChuYW1lPW5hbWUsIHJlbGVhc2U9cmVsZWFzZSkKKworICAgICAgY29udGV4dCA9IHsgJ3Byb2plY3QnIDogbmV3X3Byb2plY3QgfQorICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCAianMtdW5pdC10ZXN0cy5odG1sIiwgY29udGV4dCkKKworICAgIGZyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY3NyZiBpbXBvcnQgY3NyZl9leGVtcHQKKyAgICBAY3NyZl9leGVtcHQKKyAgICBkZWYgeGhyX3Rlc3RyZWxlYXNlY2hhbmdlKHJlcXVlc3QsIHBpZCk6CisgICAgICAgIGRlZiByZXNwb25zZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcihkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICAiIiIgcmV0dXJucyBsYXllciB2ZXJzaW9ucyB0aGF0IHdvdWxkIGJlIGRlbGV0ZWQgb24gdGhlIG5ldworICAgICAgICByZWxlYXNlX19wayAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IHBpZCkKKyAgICAgICAgICAgIG5ld19yZWxlYXNlX2lkID0gcmVxdWVzdC5HRVRbJ25ld19yZWxlYXNlX2lkJ10KKworICAgICAgICAgICAgIyBJZiB3ZSdyZSBhbHJlYWR5IG9uIHRoaXMgcHJvamVjdCBkbyBub3RoaW5nCisgICAgICAgICAgICBpZiBwcmoucmVsZWFzZS5wayA9PSBpbnQobmV3X3JlbGVhc2VfaWQpOgorICAgICAgICAgICAgICAgIHJldHVybiByZXBvbnNlKHsiZXJyb3IiOiAib2siLCAicm93cyI6IFtdfSkKKworICAgICAgICAgICAgcmV0dmFsID0gW10KKworICAgICAgICAgICAgZm9yIGkgaW4gcHJqLnByb2plY3RsYXllcl9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgbHYgPSBwcmouY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuZ2V0KHBrPW5ld19yZWxlYXNlX2lkKSkuZmlsdGVyKGxheWVyX19uYW1lID0gaS5sYXllcmNvbW1pdC5sYXllci5uYW1lKQorICAgICAgICAgICAgICAgICMgdGhlcmUgaXMgbm8gbGF5ZXJfdmVyc2lvbiB3aXRoIHRoZSBuZXcgcmVsZWFzZSBpZCwKKyAgICAgICAgICAgICAgICAjIGFuZCB0aGUgc2FtZSBuYW1lCisgICAgICAgICAgICAgICAgaWYgbHYuY291bnQoKSA8IDE6CisgICAgICAgICAgICAgICAgICAgIHJldHZhbC5hcHBlbmQoaSkKKworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlKHsiZXJyb3IiOiJvayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3dzIiA6IG1hcCggX2x2X3RvX2RpY3QocHJqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgeDogeC5sYXllcmNvbW1pdCwgcmV0dmFsICkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoeyJlcnJvciI6IHN0cihlKSB9KQorCisgICAgZGVmIHhocl9jb25maWd2YXJlZGl0KHJlcXVlc3QsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQoaWQgPSBwaWQpCisgICAgICAgICAgICAjIGFkZCBjb25mIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgJ2NvbmZpZ3ZhckFkZCcgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIHQ9cmVxdWVzdC5QT1NUWydjb25maWd2YXJBZGQnXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgIjoiIGluIHQ6CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB2YWx1ZSA9IHQuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gdAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiCisKKyAgICAgICAgICAgICAgICBwdCwgY3JlYXRlZCA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdCA9IHByaiwgbmFtZSA9IHZhcmlhYmxlLCB2YWx1ZSA9IHZhbHVlKQorICAgICAgICAgICAgIyBjaGFuZ2UgY29uZiB2YXJpYWJsZXMKKyAgICAgICAgICAgIGlmICdjb25maWd2YXJDaGFuZ2UnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICB0PXJlcXVlc3QuUE9TVFsnY29uZmlndmFyQ2hhbmdlJ10uc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmICI6IiBpbiB0OgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdmFsdWUgPSB0LnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IHQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIgorCisgICAgICAgICAgICAgICAgcHQsIGNyZWF0ZWQgPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHByb2plY3QgPSBwcmosIG5hbWUgPSB2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICBwdC52YWx1ZT12YWx1ZQorICAgICAgICAgICAgICAgIHB0LnNhdmUoKQorICAgICAgICAgICAgIyByZW1vdmUgY29uZiB2YXJpYWJsZXMKKyAgICAgICAgICAgIGlmICdjb25maWd2YXJEZWwnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICB0PXJlcXVlc3QuUE9TVFsnY29uZmlndmFyRGVsJ10uc3RyaXAoKQorICAgICAgICAgICAgICAgIHB0ID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHBrID0gaW50KHQpKS5kZWxldGUoKQorCisgICAgICAgICAgICAjIHJldHVybiBhbGwgcHJvamVjdCBzZXR0aW5ncywgZmlsdGVyIG91dCBibGFja2xpc3QgYW5kIGVsc2V3aGVyZS1tYW5hZ2VkIHZhcmlhYmxlcworICAgICAgICAgICAgdmFyc19tYW5hZ2VkLHZhcnNfZnN0eXBlcyx2YXJzX2JsYWNrbGlzdCA9IGdldF9wcm9qZWN0X2NvbmZpZ3ZhcnNfY29udGV4dCgpCisgICAgICAgICAgICBjb25maWd2YXJzX3F1ZXJ5ID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZmlsdGVyKHByb2plY3RfaWQgPSBwaWQpLmFsbCgpCisgICAgICAgICAgICBmb3IgdmFyIGluIHZhcnNfbWFuYWdlZDoKKyAgICAgICAgICAgICAgICBjb25maWd2YXJzX3F1ZXJ5ID0gY29uZmlndmFyc19xdWVyeS5leGNsdWRlKG5hbWUgPSB2YXIpCisgICAgICAgICAgICBmb3IgdmFyIGluIHZhcnNfYmxhY2tsaXN0OgorICAgICAgICAgICAgICAgIGNvbmZpZ3ZhcnNfcXVlcnkgPSBjb25maWd2YXJzX3F1ZXJ5LmV4Y2x1ZGUobmFtZSA9IHZhcikKKworICAgICAgICAgICAgcmV0dXJuX2RhdGEgPSB7CisgICAgICAgICAgICAgICAgImVycm9yIjogIm9rIiwKKyAgICAgICAgICAgICAgICAnY29uZmlndmFycycgICA6IG1hcChsYW1iZGEgeDogKHgubmFtZSwgeC52YWx1ZSwgeC5wayksIGNvbmZpZ3ZhcnNfcXVlcnkpLAorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybl9kYXRhWydkaXN0cm8nXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIkRJU1RSTyIpLnZhbHVlLAorICAgICAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybl9kYXRhWydmc3R5cGVzJ10gPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJJTUFHRV9GU1RZUEVTIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ2ltYWdlX2luc3RhbGxfYXBwZW5kJ10gPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJJTUFHRV9JTlNUQUxMX2FwcGVuZCIpLnZhbHVlLAorICAgICAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybl9kYXRhWydwYWNrYWdlX2NsYXNzZXMnXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIlBBQ0tBR0VfQ0xBU1NFUyIpLnZhbHVlLAorICAgICAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybl9kYXRhWydzZGtfbWFjaGluZSddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiU0RLTUFDSElORSIpLnZhbHVlLAorICAgICAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMoIHJldHVybl9kYXRhICksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMoeyJlcnJvciI6c3RyKGUpICsgIlxuIiArIHRyYWNlYmFjay5mb3JtYXRfZXhjKCl9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisKKyAgICBkZWYgeGhyX2ltcG9ydGxheWVyKHJlcXVlc3QpOgorICAgICAgICBpZiAobm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCd2Y3NfdXJsJykgb3IKKyAgICAgICAgICAgIG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgnbmFtZScpIG9yCisgICAgICAgICAgICBub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoJ2dpdF9yZWYnKSBvcgorICAgICAgICAgICAgbm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCdwcm9qZWN0X2lkJykpOgorICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogIk1pc3NpbmcgcGFyYW1ldGVyczsgcmVxdWlyZXMgdmNzX3VybCwgbmFtZSwgZ2l0X3JlZiBhbmQgcHJvamVjdF9pZCJ9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGxheWVyc19hZGRlZCA9IFtdOworCisgICAgICAgICMgUnVkaW1lbnRhcnkgY2hlY2sgZm9yIGFueSBwb3NzaWJsZSBodG1sIHRhZ3MKKyAgICAgICAgaWYgIjwiIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJJbnZhbGlkIGNoYXJhY3RlciA8In0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1yZXF1ZXN0LlBPU1RbJ3Byb2plY3RfaWQnXSkKKworICAgICAgICAjIFN0cmlwIHRyYWlsaW5nL2xlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIGFsbCB2YWx1ZXMKKyAgICAgICAgIyBwdXQgaW50byBhIG5ldyBkaWN0IGJlY2F1c2UgUE9TVCBvbmUgaXMgaW1tdXRhYmxlCisgICAgICAgIHBvc3RfZGF0YSA9IGRpY3QoKQorICAgICAgICBmb3Iga2V5LHZhbCBpbiByZXF1ZXN0LlBPU1QuaXRlcml0ZW1zKCk6CisgICAgICAgICAgcG9zdF9kYXRhW2tleV0gPSB2YWwuc3RyaXAoKQorCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIGtub3cgd2hhdCByZWxlYXNlIHRoZSBjdXJyZW50IHByb2plY3QgaXMgc28gdGhhdCB3ZQorICAgICAgICAjIGNhbiBzZXQgdGhlIGltcG9ydGVkIGxheWVyJ3MgdXBfYnJhbmNoX2lkCisgICAgICAgIHByal9icmFuY2hfbmFtZSA9IFJlbGVhc2Uub2JqZWN0cy5nZXQocGs9cHJqLnJlbGVhc2VfaWQpLmJyYW5jaF9uYW1lCisgICAgICAgIHVwX2JyYW5jaCwgYnJhbmNoX2NyZWF0ZWQgPSBCcmFuY2gub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWU9cHJqX2JyYW5jaF9uYW1lLCBsYXllcl9zb3VyY2VfaWQ9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCkKKworICAgICAgICBsYXllcl9zb3VyY2UgPSBMYXllclNvdXJjZS5vYmplY3RzLmdldChzb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfSU1QT1JURUQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxheWVyLCBsYXllcl9jcmVhdGVkID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWU9cG9zdF9kYXRhWyduYW1lJ10pCisgICAgICAgIGV4Y2VwdCBNdWx0aXBsZU9iamVjdHNSZXR1cm5lZDoKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogImhpbnQtbGF5ZXItZXhpc3RzIn0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgaWYgbGF5ZXI6CisgICAgICAgICAgICBpZiBsYXllcl9jcmVhdGVkOgorICAgICAgICAgICAgICAgIGxheWVyLmxheWVyX3NvdXJjZSA9IGxheWVyX3NvdXJjZQorICAgICAgICAgICAgICAgIGxheWVyLnZjc191cmwgPSBwb3N0X2RhdGFbJ3Zjc191cmwnXQorICAgICAgICAgICAgICAgIGxheWVyLnVwX2RhdGUgPSB0aW1lem9uZS5ub3coKQorICAgICAgICAgICAgICAgIGxheWVyLnNhdmUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYW4gZXhpc3RpbmcgbGF5ZXIgYnkgdGhpcyBuYW1lLCBsZXQncyBzZWUgaWYgdGhlIGdpdAorICAgICAgICAgICAgICAgICMgdXJsIGlzIHRoZSBzYW1lLCBpZiBpdCBpcyB0aGVuIHdlIGNhbiBqdXN0IGNyZWF0ZSBhIG5ldyBsYXllcgorICAgICAgICAgICAgICAgICMgdmVyc2lvbiBmb3IgdGhpcyBsYXllci4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gYmFpbCBvdXQuCisgICAgICAgICAgICAgICAgaWYgbGF5ZXIudmNzX3VybCAhPSBwb3N0X2RhdGFbJ3Zjc191cmwnXToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiaGludC1sYXllci1leGlzdHMtd2l0aC1kaWZmZXJlbnQtdXJsIiAsICJjdXJyZW50X3VybCIgOiBsYXllci52Y3NfdXJsLCAiY3VycmVudF9pZCI6IGxheWVyLmlkIH0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKworICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbiwgdmVyc2lvbl9jcmVhdGVkID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlPWxheWVyX3NvdXJjZSwgbGF5ZXI9bGF5ZXIsIHByb2plY3Q9cHJqLCB1cF9icmFuY2hfaWQ9dXBfYnJhbmNoLmlkLGJyYW5jaD1wb3N0X2RhdGFbJ2dpdF9yZWYnXSwgIGNvbW1pdD1wb3N0X2RhdGFbJ2dpdF9yZWYnXSwgZGlycGF0aD1wb3N0X2RhdGFbJ2Rpcl9wYXRoJ10pCisKKyAgICAgICAgICAgIGlmIGxheWVyX3ZlcnNpb246CisgICAgICAgICAgICAgICAgaWYgbm90IHZlcnNpb25fY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiaGludC1sYXllci12ZXJzaW9uLWV4aXN0cyIsICJleGlzdGluZ19sYXllcl92ZXJzaW9uIjogbGF5ZXJfdmVyc2lvbi5pZCB9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi51cF9kYXRlID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnNhdmUoKQorCisgICAgICAgICAgICAgICAgIyBBZGQgdGhlIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgZm9yIHRoaXMgbmV3IGxheWVyCisgICAgICAgICAgICAgICAgaWYgKHBvc3RfZGF0YS5oYXNfa2V5KCJsYXllcl9kZXBzIikgYW5kCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25fY3JlYXRlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgbGVuKHBvc3RfZGF0YVsibGF5ZXJfZGVwcyJdKSA+IDApOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGF5ZXJfZGVwX2lkIGluIHBvc3RfZGF0YVsibGF5ZXJfZGVwcyJdLnNwbGl0KCIsIik6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX2RlcF9vYmogPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPWxheWVyX2RlcF9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIExheWVyVmVyc2lvbkRlcGVuZGVuY3kub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbiwgZGVwZW5kc19vbj1sYXllcl9kZXBfb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3cgYWRkIHRoZW0gdG8gdGhlIHByb2plY3QsIHdlIGNvdWxkIGdldCBhbiBleGVjcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIHByb2plY3Qgbm93IGNvbnRhaW5zIHRoZSBleGFjdAorICAgICAgICAgICAgICAgICAgICAgICAgIyBkZXBlbmRlbmN5IGFscmVhZHkgKGxpa2UgbW9kaWZpZWQgb24gYW5vdGhlciBwYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByal9sYXllciwgcHJqX2xheWVyX2NyZWF0ZWQgPSBQcm9qZWN0TGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyY29tbWl0PWxheWVyX2RlcF9vYmosIHByb2plY3Q9cHJqKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEludGVncml0eUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkludGVncml0eSBlcnJvciB3aGlsZSBzYXZpbmcgUHJvamVjdCBMYXllcnM6ICVzIChvcmlnaW5hbCAlcykiICUgKGUsIGUuX19jYXVzZV9fKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcmpfbGF5ZXJfY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcmRlcGRldGFpbHVybCA9IHJldmVyc2UoJ2xheWVyZGV0YWlscycsIGFyZ3M9KHByai5pZCwgbGF5ZXJfZGVwX29iai5waykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzX2FkZGVkLmFwcGVuZCh7J2lkJzogbGF5ZXJfZGVwX29iai5pZCwgJ25hbWUnOiBMYXllci5vYmplY3RzLmdldChpZD1sYXllcl9kZXBfb2JqLmxheWVyX2lkKS5uYW1lLCAnbGF5ZXJkZXRhaWx1cmwnOiBsYXllcmRlcGRldGFpbHVybCB9KQorCisKKyAgICAgICAgICAgICAgICAjIElmIGFuIG9sZCBsYXllciB2ZXJzaW9uIGV4aXN0cyBpbiBvdXIgcHJvamVjdCB0aGVuIHJlbW92ZSBpdAorICAgICAgICAgICAgICAgIGZvciBwcmpfbGF5ZXJzIGluIFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PXByaik6CisgICAgICAgICAgICAgICAgICAgIGR1cF9sYXllcl92ID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihpZD1wcmpfbGF5ZXJzLmxheWVyY29tbWl0X2lkLCBsYXllcl9pZD1sYXllci5pZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGR1cF9sYXllcl92KSA+MCA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmpfbGF5ZXJzLmRlbGV0ZSgpCisKKyAgICAgICAgICAgICAgICAjIGZpbmFsbHkgYWRkIHRoZSBpbXBvcnRlZCBsYXllciAodmVyc2lvbiBpZCkgdG8gdGhlIHByb2plY3QKKyAgICAgICAgICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5jcmVhdGUobGF5ZXJjb21taXQ9bGF5ZXJfdmVyc2lvbiwgcHJvamVjdD1wcmosb3B0aW9uYWw9MSkKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFdlIGRpZG4ndCBjcmVhdGUgYSBsYXllciB2ZXJzaW9uIHNvIGJhY2sgb3V0IG5vdyBhbmQgY2xlYW4gdXAuCisgICAgICAgICAgICAgICAgaWYgbGF5ZXJfY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIuZGVsZXRlKCkKKworICAgICAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogIlVuY2F1Z2h0IGVycm9yOiBDb3VsZCBub3QgY3JlYXRlIGxheWVyIHZlcnNpb24ifSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBsYXllcmRldGFpbHVybCA9IHJldmVyc2UoJ2xheWVyZGV0YWlscycsIGFyZ3M9KHByai5pZCwgbGF5ZXJfdmVyc2lvbi5waykpCisKKyAgICAgICAganNvbl9yZXNwb25zZSA9IHsiZXJyb3IiOiAib2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnRlZF9sYXllciIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIgOiBsYXllci5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogbGF5ZXJfdmVyc2lvbi5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXllcmRldGFpbHVybCI6IGxheWVyZGV0YWlsdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgImRlcHNfYWRkZWQiOiBsYXllcnNfYWRkZWQgfQorCisgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcihqc29uX3Jlc3BvbnNlKSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgZGVmIHhocl91cGRhdGVsYXllcihyZXF1ZXN0KToKKworICAgICAgICBkZWYgZXJyb3JfcmVzcG9uc2UoZXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiBlcnJvcn0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgaWYgbm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJsYXllcl92ZXJzaW9uX2lkIik6CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIlBsZWFzZSBzcGVjaWZ5IGEgbGF5ZXIgdmVyc2lvbiBpZCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb25faWQgPSByZXF1ZXN0LlBPU1RbImxheWVyX3ZlcnNpb25faWQiXQorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQoaWQ9bGF5ZXJfdmVyc2lvbl9pZCkKKyAgICAgICAgZXhjZXB0IExheWVyX1ZlcnNpb24uRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJDYW5ub3QgZmluZCBsYXllciB0byB1cGRhdGUiKQorCisKKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoInZjc191cmwiKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIudmNzX3VybCA9IHJlcXVlc3QuUE9TVFsidmNzX3VybCJdCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJkaXJwYXRoIik6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmRpcnBhdGggPSByZXF1ZXN0LlBPU1RbImRpcnBhdGgiXQorICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgiY29tbWl0Iik6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmNvbW1pdCA9IHJlcXVlc3QuUE9TVFsiY29tbWl0Il0KKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoInVwX2JyYW5jaCIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi51cF9icmFuY2hfaWQgPSBpbnQocmVxdWVzdC5QT1NUWyJ1cF9icmFuY2giXSkKKworICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgiYWRkX2RlcCIpOgorICAgICAgICAgICAgbHZkID0gTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeShsYXllcl92ZXJzaW9uPWxheWVyX3ZlcnNpb24sIGRlcGVuZHNfb25faWQ9cmVxdWVzdC5QT1NUWyJhZGRfZGVwIl0pCisgICAgICAgICAgICBsdmQuc2F2ZSgpCisKKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoInJtX2RlcCIpOgorICAgICAgICAgICAgcm1fZGVwID0gTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmdldChsYXllcl92ZXJzaW9uPWxheWVyX3ZlcnNpb24sIGRlcGVuZHNfb25faWQ9cmVxdWVzdC5QT1NUWyJybV9kZXAiXSkKKyAgICAgICAgICAgIHJtX2RlcC5kZWxldGUoKQorCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJzdW1tYXJ5Iik6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLnN1bW1hcnkgPSByZXF1ZXN0LlBPU1RbInN1bW1hcnkiXQorICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgiZGVzY3JpcHRpb24iKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb24gPSByZXF1ZXN0LlBPU1RbImRlc2NyaXB0aW9uIl0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLmxheWVyLnNhdmUoKQorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5zYXZlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIGVycm9yX3Jlc3BvbnNlKCJDb3VsZCBub3QgdXBkYXRlIGxheWVyIHZlcnNpb24gZW50cnk6ICVzIiAlIGUpCisKKyAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAib2siLH0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKworCisgICAgZGVmIGltcG9ydGxheWVyKHJlcXVlc3QsIHBpZCk6CisgICAgICAgIHRlbXBsYXRlID0gImltcG9ydGxheWVyLmh0bWwiCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAncHJvamVjdCc6IFByb2plY3Qub2JqZWN0cy5nZXQoaWQ9cGlkKSwKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCisgICAgQF90ZW1wbGF0ZV9yZW5kZXJlcignbGF5ZXJkZXRhaWxzLmh0bWwnKQorICAgIGRlZiBsYXllcmRldGFpbHMocmVxdWVzdCwgcGlkLCBsYXllcmlkKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9cGlkKQorICAgICAgICBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChwaz1sYXllcmlkKQorCisgICAgICAgIGNvbnRleHQgPSB7ICdwcm9qZWN0JyA6IHByb2plY3QsCisgICAgICAgICAgICAgICAgICAgJ2xheWVydmVyc2lvbicgOiBsYXllcl92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICdsYXllcmRlcHMnIDogeyAibGlzdCI6IFsKKyAgICAgICAgICAgICAgICAgICAgIFt7ImlkIjogeS5pZCwgIm5hbWUiOiB5LmxheWVyLm5hbWV9IGZvciB5IGluIHguZGVwZW5kc19vbi5nZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHByb2plY3QpXVswXSBmb3IgeCBpbiBsYXllcl92ZXJzaW9uLmRlcGVuZGVuY2llcy5hbGwoKV19LAorICAgICAgICAgICAgICAgICAgICdwcm9qZWN0bGF5ZXJzJzogbWFwKGxhbWJkYSBwcmpsYXllcjogcHJqbGF5ZXIubGF5ZXJjb21taXQuaWQsIFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PXByb2plY3QpKQorICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworICAgIGRlZiBnZXRfcHJvamVjdF9jb25maWd2YXJzX2NvbnRleHQoKToKKyAgICAgICAgIyBWYXJzIG1hbmFnZWQgb3V0c2lkZSBvZiB0aGlzIHZpZXcKKyAgICAgICAgdmFyc19tYW5hZ2VkID0geworICAgICAgICAgICAgJ01BQ0hJTkUnLCAnQkJMQVlFUlMnCisgICAgICAgIH0KKworICAgICAgICB2YXJzX2JsYWNrbGlzdCAgPSB7CisgICAgICAgICAgICAnRExfRFInLCdQQVJBTExFTF9NQUtFJywnQkJfTlVNQkVSX1RIUkVBRFMnLCdTU1RBVEVfRElSJywKKyAgICAgICAgICAgICdCQl9ESVNLTU9OX0RJUlMnLCdCQl9OVU1CRVJfVEhSRUFEUycsJ0NWU19QUk9YWV9IT1NUJywnQ1ZTX1BST1hZX1BPUlQnLAorICAgICAgICAgICAgJ0RMX0RJUicsJ1BBUkFMTEVMX01BS0UnLCdTU1RBVEVfRElSJywnU1NUQVRFX0RJUicsJ1NTVEFURV9NSVJST1JTJywnVE1QRElSJywKKyAgICAgICAgICAgICdhbGxfcHJveHknLCdmdHBfcHJveHknLCdodHRwX3Byb3h5ICcsJ2h0dHBzX3Byb3h5JworICAgICAgICAgICAgfQorCisgICAgICAgIHZhcnNfZnN0eXBlcyAgPSB7CisgICAgICAgICAgICAnYnRyZnMnLCdjcGlvJywnY3Bpby5neicsJ2NwaW8ubHo0JywnY3Bpby5sem1hJywnY3Bpby54eicsJ2NyYW1mcycsCisgICAgICAgICAgICAnZWxmJywnZXh0MicsJ2V4dDIuYnoyJywnZXh0Mi5neicsJ2V4dDIubHptYScsICdleHQ0JywgJ2V4dDQuZ3onLCAnZXh0MycsJ2V4dDMuZ3onLCdoZGRpbWcnLAorICAgICAgICAgICAgJ2lzbycsJ2pmZnMyJywnamZmczIuc3VtJywnc3F1YXNoZnMnLCdzcXVhc2hmcy1sem8nLCdzcXVhc2hmcy14eicsJ3Rhci5iejInLAorICAgICAgICAgICAgJ3Rhci5sejQnLCd0YXIueHonLCd0YXJ0YXIuZ3onLCd1YmknLCd1YmlmcycsJ3ZtZGsnCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4odmFyc19tYW5hZ2VkLHNvcnRlZCh2YXJzX2ZzdHlwZXMpLHZhcnNfYmxhY2tsaXN0KQorCisgICAgQF90ZW1wbGF0ZV9yZW5kZXJlcigicHJvamVjdGNvbmYuaHRtbCIpCisgICAgZGVmIHByb2plY3Rjb25mKHJlcXVlc3QsIHBpZCk6CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChpZCA9IHBpZCkKKyAgICAgICAgZXhjZXB0IFByb2plY3QuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZU5vdEZvdW5kKCI8aDE+UHJvamVjdCBpZCAiICsgcGlkICsgIiBpcyB1bmF2YWlsYWJsZTwvaDE+IikKKworICAgICAgICAjIHJlbW92ZSBibGFja2xpc3QgYW5kIGV4dGVybmFsbHkgbWFuYWdlZCB2YXJhaWJsZXMgZnJvbSB0aGlzIGxpc3QKKyAgICAgICAgdmFyc19tYW5hZ2VkLHZhcnNfZnN0eXBlcyx2YXJzX2JsYWNrbGlzdCA9IGdldF9wcm9qZWN0X2NvbmZpZ3ZhcnNfY29udGV4dCgpCisgICAgICAgIGNvbmZpZ3ZhcnMgPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5maWx0ZXIocHJvamVjdF9pZCA9IHBpZCkuYWxsKCkKKyAgICAgICAgZm9yIHZhciBpbiB2YXJzX21hbmFnZWQ6CisgICAgICAgICAgICBjb25maWd2YXJzID0gY29uZmlndmFycy5leGNsdWRlKG5hbWUgPSB2YXIpCisgICAgICAgIGZvciB2YXIgaW4gdmFyc19ibGFja2xpc3Q6CisgICAgICAgICAgICBjb25maWd2YXJzID0gY29uZmlndmFycy5leGNsdWRlKG5hbWUgPSB2YXIpCisKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdwcm9qZWN0JzogICAgICAgICAgcHJqLAorICAgICAgICAgICAgJ2NvbmZpZ3ZhcnMnOiAgICAgICBjb25maWd2YXJzLAorICAgICAgICAgICAgJ3ZhcnNfbWFuYWdlZCc6ICAgICB2YXJzX21hbmFnZWQsCisgICAgICAgICAgICAndmFyc19mc3R5cGVzJzogICAgIHZhcnNfZnN0eXBlcywKKyAgICAgICAgICAgICd2YXJzX2JsYWNrbGlzdCc6ICAgdmFyc19ibGFja2xpc3QsCisgICAgICAgIH0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WydkaXN0cm8nXSA9ICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJESVNUUk8iKS52YWx1ZQorICAgICAgICAgICAgY29udGV4dFsnZGlzdHJvX2RlZmluZWQnXSA9ICIxIgorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsnZnN0eXBlcyddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIklNQUdFX0ZTVFlQRVMiKS52YWx1ZQorICAgICAgICAgICAgY29udGV4dFsnZnN0eXBlc19kZWZpbmVkJ10gPSAiMSIKKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ2ltYWdlX2luc3RhbGxfYXBwZW5kJ10gPSAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiSU1BR0VfSU5TVEFMTF9hcHBlbmQiKS52YWx1ZQorICAgICAgICAgICAgY29udGV4dFsnaW1hZ2VfaW5zdGFsbF9hcHBlbmRfZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WydwYWNrYWdlX2NsYXNzZXMnXSA9ICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJQQUNLQUdFX0NMQVNTRVMiKS52YWx1ZQorICAgICAgICAgICAgY29udGV4dFsncGFja2FnZV9jbGFzc2VzX2RlZmluZWQnXSA9ICIxIgorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsnc2RrX21hY2hpbmUnXSA9ICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJTREtNQUNISU5FIikudmFsdWUKKyAgICAgICAgICAgIGNvbnRleHRbJ3Nka19tYWNoaW5lX2RlZmluZWQnXSA9ICIxIgorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gY29udGV4dAorCisgICAgIyBXQVJOSU5HIF9idWlsZF9saXN0X2hlbHBlcigpIG1heSByYWlzZSBhIFJlZGlyZWN0RXhjZXB0aW9uLCB3aGljaAorICAgICMgd2lsbCBzZXQgdGhlIEdFVCBwYXJhbWV0ZXJzIGFuZCByZWRpcmVjdCBiYWNrIHRvIHRoZQorICAgICMgYWxsLWJ1aWxkcyBvciBwcm9qZWN0YnVpbGRzIHBhZ2UgYXMgYXBwcm9wcmlhdGU7CisgICAgIyBUT0RPIGRvbid0IHVzZSBleGNlcHRpb25zIHRvIGNvbnRyb2wgcHJvZ3JhbSBmbG93CisgICAgQF90ZW1wbGF0ZV9yZW5kZXJlcigncHJvamVjdGJ1aWxkcy5odG1sJykKKyAgICBkZWYgcHJvamVjdGJ1aWxkcyhyZXF1ZXN0LCBwaWQpOgorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KGlkID0gcGlkKQorCisgICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKKyAgICAgICAgICAgICMgcHJvY2VzcyBhbnkgYnVpbGQgcmVxdWVzdAorCisgICAgICAgICAgICBpZiAnYnVpbGRDYW5jZWwnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByZXF1ZXN0LlBPU1RbJ2J1aWxkQ2FuY2VsJ10uc3RyaXAoKS5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLnNlbGVjdF9mb3JfdXBkYXRlKCkuZ2V0KHByb2plY3QgPSBwcmosIHBrID0gaSwgc3RhdGVfX2x0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVEKQorICAgICAgICAgICAgICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0RFTEVURUQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQnVpbGRSZXF1ZXN0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgaWYgJ2J1aWxkRGVsZXRlJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmVxdWVzdC5QT1NUWydidWlsZERlbGV0ZSddLnN0cmlwKCkuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRSZXF1ZXN0Lm9iamVjdHMuc2VsZWN0X2Zvcl91cGRhdGUoKS5nZXQocHJvamVjdCA9IHByaiwgcGsgPSBpLCBzdGF0ZV9fbHRlID0gQnVpbGRSZXF1ZXN0LlJFUV9ERUxFVEVEKS5kZWxldGUoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQnVpbGRSZXF1ZXN0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgaWYgJ3RhcmdldHMnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBQcm9qZWN0VGFyZ2V0Lm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmopLmRlbGV0ZSgpCisgICAgICAgICAgICAgICAgcyA9IHN0cihyZXF1ZXN0LlBPU1RbJ3RhcmdldHMnXSkKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiBzLnRyYW5zbGF0ZShOb25lLCAiOyV8XCIiKS5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgICAgICBpZiAiOiIgaW4gdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgdGFzayA9IHQuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdAorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9ICIiCisgICAgICAgICAgICAgICAgICAgIFByb2plY3RUYXJnZXQub2JqZWN0cy5jcmVhdGUocHJvamVjdCA9IHByaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9IHRhc2spCisgICAgICAgICAgICAgICAgcHJqLnNjaGVkdWxlX2J1aWxkKCkKKworICAgICAgICBxdWVyeXNldCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKHByb2plY3RfaWQgPSBwaWQpCisKKyAgICAgICAgcmVkaXJlY3RfcGFnZSA9IHJlc29sdmUocmVxdWVzdC5wYXRoX2luZm8pLnVybF9uYW1lCisKKyAgICAgICAgY29udGV4dCwgcGFnZXNpemUsIG9yZGVyYnkgPSBfYnVpbGRfbGlzdF9oZWxwZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0X3BhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCkKKworICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBwcmoKKyAgICAgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKworICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICBkZWYgX2ZpbGVfbmFtZV9mb3JfYXJ0aWZhY3QoYiwgYXJ0aWZhY3RfdHlwZSwgYXJ0aWZhY3RfaWQpOgorICAgICAgICBmaWxlX25hbWUgPSBOb25lCisgICAgICAgICMgVGFyZ2V0X0ltYWdlX0ZpbGUgZmlsZV9uYW1lCisgICAgICAgIGlmIGFydGlmYWN0X3R5cGUgPT0gImltYWdlZmlsZSI6CisgICAgICAgICAgICBmaWxlX25hbWUgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmdldCh0YXJnZXRfX2J1aWxkID0gYiwgcGsgPSBhcnRpZmFjdF9pZCkuZmlsZV9uYW1lCisKKyAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICJidWlsZGFydGlmYWN0IjoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IEJ1aWxkQXJ0aWZhY3Qub2JqZWN0cy5nZXQoYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5maWxlX25hbWUKKworICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gICJsaWNlbnNlbWFuaWZlc3QiOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gVGFyZ2V0Lm9iamVjdHMuZ2V0KGJ1aWxkID0gYiwgcGsgPSBhcnRpZmFjdF9pZCkubGljZW5zZV9tYW5pZmVzdF9wYXRoCisKKyAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICJ0YXNrbG9nZmlsZSI6CisgICAgICAgICAgICBmaWxlX25hbWUgPSBUYXNrLm9iamVjdHMuZ2V0KGJ1aWxkID0gYiwgcGsgPSBhcnRpZmFjdF9pZCkubG9nZmlsZQorCisgICAgICAgIGVsaWYgYXJ0aWZhY3RfdHlwZSA9PSAibG9nbWVzc2FnZWZpbGUiOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gTG9nTWVzc2FnZS5vYmplY3RzLmdldChidWlsZCA9IGIsIHBrID0gYXJ0aWZhY3RfaWQpLnBhdGhuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBhcnRpZmFjdCB0eXBlICVzIG5vdCBpbXBsZW1lbnRlZCIgJSAoYXJ0aWZhY3RfdHlwZSkpCisKKyAgICAgICAgcmV0dXJuIGZpbGVfbmFtZQorCisKKyAgICBkZWYgYnVpbGRfYXJ0aWZhY3QocmVxdWVzdCwgYnVpbGRfaWQsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKToKKyAgICAgICAgaWYgYXJ0aWZhY3RfdHlwZSBpbiBbImNvb2tlcmxvZyJdOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQocGsgPSBidWlsZF9pZCkKKyAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBidWlsZC5jb29rZXJfbG9nX3BhdGgKKyAgICAgICAgICAgICAgICBmc29jayA9IG9wZW4oZmlsZV9uYW1lLCAiciIpCisgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gTWltZVR5cGVGaW5kZXIuZ2V0X21pbWV0eXBlKGZpbGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gSHR0cFJlc3BvbnNlKGZzb2NrLCBjb250ZW50X3R5cGUgPSBjb250ZW50X3R5cGUpCisKKyAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbiA9ICdhdHRhY2htZW50OyBmaWxlbmFtZT1jb29rZXIubG9nJworICAgICAgICAgICAgICAgIHJlc3BvbnNlWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSBkaXNwb3NpdGlvbgorCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGsgPSBidWlsZF9pZCksCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgInVuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwiLCBjb250ZXh0KQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHJldHJpZXZlIHRoZSBhcnRpZmFjdCBkaXJlY3RseSBmcm9tIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgcmV0dXJuIF9nZXRfYmVfYXJ0aWZhY3QocmVxdWVzdCwgYnVpbGRfaWQsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKQorCisKKyAgICBkZWYgX2dldF9iZV9hcnRpZmFjdChyZXF1ZXN0LCBidWlsZF9pZCwgYXJ0aWZhY3RfdHlwZSwgYXJ0aWZhY3RfaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiID0gQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpCisgICAgICAgICAgICBpZiBiLmJ1aWxkcmVxdWVzdCBpcyBOb25lIG9yIGIuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBcnRpZmFjdCBub3QgYXZhaWxhYmxlIGZvciBkb3dubG9hZCAobWlzc2luZyBidWlsZCByZXF1ZXN0IG9yIGJ1aWxkIGVudmlyb25tZW50KSIpCisKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IF9maWxlX25hbWVfZm9yX2FydGlmYWN0KGIsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKQorICAgICAgICAgICAgZnNvY2sgPSBOb25lCisgICAgICAgICAgICBjb250ZW50X3R5cGU9J2FwcGxpY2F0aW9uL2ZvcmNlLWRvd25sb2FkJworCisgICAgICAgICAgICBpZiBmaWxlX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBoYW5kbGUgYXJ0aWZhY3QgJXMgaWQgJXMiICUgKGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gYi5idWlsZHJlcXVlc3QuZW52aXJvbm1lbnQuZ2V0X2FydGlmYWN0X3R5cGUoZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgIGZzb2NrID0gYi5idWlsZHJlcXVlc3QuZW52aXJvbm1lbnQuZ2V0X2FydGlmYWN0KGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVfbmFtZSkgIyB3ZSBhc3N1bWUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc3lzdGVtIGhhcyB0aGUgc2FtZSBwYXRoIGNvbnZlbnRpb25zIGFzIGhvc3QKKworICAgICAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoZnNvY2ssIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnRfdHlwZSkKKworICAgICAgICAgICAgIyByZXR1cm5zIGEgZmlsZSBmcm9tIHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgcmVzcG9uc2VbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdhdHRhY2htZW50OyBmaWxlbmFtZT0nICsgZmlsZV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwayA9IGJ1aWxkX2lkKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgInVuYXZhaWxhYmxlX2FydGlmYWN0Lmh0bWwiLCBjb250ZXh0KQorCisKKworCisgICAgQF90ZW1wbGF0ZV9yZW5kZXJlcigicHJvamVjdHMuaHRtbCIpCisgICAgZGVmIHByb2plY3RzKHJlcXVlc3QpOgorICAgICAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAxMCwgJ3VwZGF0ZWQ6LScpCisgICAgICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgICAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0RXhjZXB0aW9uKCAnYWxsLXByb2plY3RzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKworICAgICAgICBxdWVyeXNldF9hbGwgPSBQcm9qZWN0Lm9iamVjdHMuYWxsKCkKKworICAgICAgICAjIGFubm90YXRlIGVhY2ggcHJvamVjdCB3aXRoIGl0cyBudW1iZXIgb2YgYnVpbGRzCisgICAgICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5hbm5vdGF0ZShudW1fYnVpbGRzPUNvdW50KCdidWlsZCcpKQorCisgICAgICAgICMgZXhjbHVkZSB0aGUgY29tbWFuZCBsaW5lIGJ1aWxkcyBwcm9qZWN0IGlmIGl0IGhhcyBubyBidWlsZHMKKyAgICAgICAgcV9kZWZhdWx0X3dpdGhfYnVpbGRzID0gUShpc19kZWZhdWx0PVRydWUpICYgUShudW1fYnVpbGRzX19ndD0wKQorICAgICAgICBxdWVyeXNldF9hbGwgPSBxdWVyeXNldF9hbGwuZmlsdGVyKFEoaXNfZGVmYXVsdD1GYWxzZSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZGVmYXVsdF93aXRoX2J1aWxkcykKKworICAgICAgICAjIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCB0YWtlcyBhIHJlcXVlc3QgZm9yIGFuIG9iamVjdCB0eXBlIGFuZCByZXR1cm5zIGEgcXVlcnlzZXQKKyAgICAgICAgIyBmb3IgdGhhdCBvYmplY3QgdHlwZS4gY29weXBhc3RhIGZvciBhbGwgbmVlZGVkIHRhYmxlIHNlYXJjaGVzCisgICAgICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUHJvamVjdCkKKyAgICAgICAgcXVlcnlzZXRfd2l0aF9zZWFyY2ggPSBfZ2V0X3F1ZXJ5c2V0KFByb2plY3QsIHF1ZXJ5c2V0X2FsbCwgTm9uZSwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy11cGRhdGVkJykKKyAgICAgICAgcXVlcnlzZXQgPSBfZ2V0X3F1ZXJ5c2V0KFByb2plY3QsIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy11cGRhdGVkJykKKworICAgICAgICAjIHJldHJpZXZlIHRoZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlOyBwcm9qZWN0cyBhIHBhZ2luYXRvciBhbmQgZ2V0cyBhIHBhZ2UgcmFuZ2UgdG8gZGlzcGxheQorICAgICAgICBwcm9qZWN0X2luZm8gPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAgICAgIyBhZGQgZmllbGRzIG5lZWRlZCBpbiBKU09OIGR1bXBzIGZvciBBUEkgY2FsbCBzdXBwb3J0CisgICAgICAgIGZvciBwIGluIHByb2plY3RfaW5mby5vYmplY3RfbGlzdDoKKyAgICAgICAgICAgIHAuaWQgPSBwLnBrCisgICAgICAgICAgICBwLnByb2plY3RQYWdlVXJsID0gcmV2ZXJzZSgncHJvamVjdCcsIGFyZ3M9KHAuaWQsKSkKKyAgICAgICAgICAgIHAubGF5ZXJzVHlwZUFoZWFkVXJsID0gcmV2ZXJzZSgneGhyX2xheWVyc3R5cGVhaGVhZCcsIGFyZ3M9KHAuaWQsKSkKKyAgICAgICAgICAgIHAucmVjaXBlc1R5cGVBaGVhZFVybCA9IHJldmVyc2UoJ3hocl9yZWNpcGVzdHlwZWFoZWFkJywgYXJncz0ocC5pZCwpKQorICAgICAgICAgICAgcC5wcm9qZWN0QnVpbGRzVXJsID0gcmV2ZXJzZSgncHJvamVjdGJ1aWxkcycsIGFyZ3M9KHAuaWQsKSkKKworICAgICAgICAjIGJ1aWxkIHZpZXctc3BlY2lmaWMgaW5mb3JtYXRpb247IHRoaXMgaXMgcmVuZGVyZWQgc3BlY2lmaWNhbGx5IGluIHRoZSBidWlsZHMgcGFnZSwgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZSAoaS5lLiBSZWNlbnQgYnVpbGRzKQorICAgICAgICBidWlsZF9tcnUgPSBfZ2V0X2xhdGVzdF9idWlsZHMoKQorCisgICAgICAgICMgdHJhbnNsYXRlIHRoZSBwcm9qZWN0J3MgYnVpbGQgdGFyZ2V0IHN0cmluZ3MKKyAgICAgICAgZnN0eXBlc19tYXAgPSB7fTsKKyAgICAgICAgZm9yIHByb2plY3QgaW4gcHJvamVjdF9pbmZvOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRhcmdldHMgPSBUYXJnZXQub2JqZWN0cy5maWx0ZXIoIGJ1aWxkX2lkID0gcHJvamVjdC5nZXRfbGFzdF9idWlsZF9pZCgpICkKKyAgICAgICAgICAgICAgICBjb21tYSA9ICIiOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgPSAiIjsKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBpZiAoIG5vdCB0LmlzX2ltYWdlICk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0aWYgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlciggdGFyZ2V0X2lkID0gdC5pZCApCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHRpZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHM9cmUuc3ViKCcuKnRhci5iejInLCAndGFyLmJ6MicsIGkuZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcyA9PSBpLmZpbGVfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLipcLicsICcnLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIE5vbmUgPT0gcmUuc2VhcmNoKHMsZXh0ZW5zaW9ucyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucyArPSBjb21tYSArIHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYSA9ICIsICIKKyAgICAgICAgICAgICAgICBmc3R5cGVzX21hcFtwcm9qZWN0LmlkXT1leHRlbnNpb25zCisgICAgICAgICAgICBleGNlcHQgKFRhcmdldC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgZnN0eXBlc19tYXBbcHJvamVjdC5pZF09cHJvamVjdC5nZXRfbGFzdF9pbWdmaWxlcworCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgJ21ydScgOiBidWlsZF9tcnUsCisKKyAgICAgICAgICAgICAgICAnb2JqZWN0cycgOiBwcm9qZWN0X2luZm8sCisgICAgICAgICAgICAgICAgJ29iamVjdG5hbWUnIDogInByb2plY3RzIiwKKyAgICAgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6ICdpZDotJywKKyAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nIDogc2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAgICAgJ3RvdGFsX2NvdW50JyA6IHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmNvdW50KCksCisgICAgICAgICAgICAgICAgJ2ZzdHlwZXMnIDogZnN0eXBlc19tYXAsCisgICAgICAgICAgICAgICAgJ2J1aWxkX0ZBSUxFRCcgOiBCdWlsZC5GQUlMRUQsCisgICAgICAgICAgICAgICAgJ2J1aWxkX1NVQ0NFRURFRCcgOiBCdWlsZC5TVUNDRUVERUQsCisgICAgICAgICAgICAgICAgJ3RhYmxlY29scyc6IFsKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1Byb2plY3QnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICduYW1lJywKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0xhc3QgYWN0aXZpdHkgb24nLAorICAgICAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICd1cGRhdGVkJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlNob3dzIHRoZSBzdGFydGluZyBkYXRlIGFuZCB0aW1lIG9mIHRoZSBsYXN0IHByb2plY3QgYnVpbGQuIElmIHRoZSBwcm9qZWN0IGhhcyBubyBidWlsZHMsIGl0IHNob3dzIHRoZSBkYXRlIHRoZSBwcm9qZWN0IHdhcyBjcmVhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidXBkYXRlZCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ1cGRhdGVkIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAndXBkYXRlZCcsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdSZWxlYXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJyA6ICJUaGUgdmVyc2lvbiBvZiB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWxlYXNlX19uYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlbGVhc2VfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdyZWxlYXNlX19uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ01hY2hpbmUnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGhhcmR3YXJlIGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgdGhlIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnTnVtYmVyIG9mIGJ1aWxkcycsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJIb3cgbWFueSBidWlsZHMgaGF2ZSBiZWVuIHJ1biBmb3IgdGhlIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnTGFzdCBidWlsZCBvdXRjb21lJywgJ2NsY2xhc3MnOiAnbG91dGNvbWUnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGVsbHMgeW91IGlmIHRoZSBsYXN0IHByb2plY3QgYnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnUmVjaXBlJywgJ2NsY2xhc3MnOiAnbHRhcmdldCcsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgbGFzdCByZWNpcGUgdGhhdCB3YXMgYnVpbHQgaW4gdGhpcyBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0Vycm9ycycsICdjbGNsYXNzJzogJ2xlcnJvcnMnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgZXJyb3JzIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBsYXN0IHByb2plY3QgYnVpbGQgKGlmIGFueSkiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnV2FybmluZ3MnLCAnY2xjbGFzcyc6ICdsd2FybmluZ3MnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgd2FybmlnbnMgd2VyZSBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGxhc3QgcHJvamVjdCBidWlsZCAoaWYgYW55KSIsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdJbWFnZSBmaWxlcycsICdjbGNsYXNzJzogJ2xpbWFnZWZpbGVzJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgcm9vdCBmaWxlIHN5c3RlbSB0eXBlcyBwcm9kdWNlZCBieSB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkIiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQorCisgICAgICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgICAgIHJldHVybiBjb250ZXh0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS93aWRnZXRzLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI5MTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weQpAQCAtMCwwICsxLDQxMSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFZpZXcsIFRlbXBsYXRlVmlldworZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCBIdHRwUmVzcG9uc2UKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QKK2Zyb20gZGphbmdvLmNvcmUgaW1wb3J0IHNlcmlhbGl6ZXJzCitmcm9tIGRqYW5nby5jb3JlLmNhY2hlIGltcG9ydCBjYWNoZQorZnJvbSBkamFuZ28uY29yZS5wYWdpbmF0b3IgaW1wb3J0IFBhZ2luYXRvciwgRW1wdHlQYWdlCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdExheWVyLCBMYXllcl9WZXJzaW9uCitmcm9tIGRqYW5nby50ZW1wbGF0ZSBpbXBvcnQgQ29udGV4dCwgVGVtcGxhdGUKK2Zyb20gZGphbmdvLmNvcmUuc2VyaWFsaXplcnMuanNvbiBpbXBvcnQgRGphbmdvSlNPTkVuY29kZXIKK2Zyb20gZGphbmdvLmNvcmUuZXhjZXB0aW9ucyBpbXBvcnQgRmllbGRFcnJvcgorZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwsIHBhdHRlcm5zCisKK2ltcG9ydCB0eXBlcworaW1wb3J0IGpzb24KK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgcmUKKworZnJvbSB0b2FzdGVyZ3VpLnZpZXdzIGltcG9ydCBvYmp0b2pzb24KKworY2xhc3MgVG9hc3RlclRhYmxlKFRlbXBsYXRlVmlldyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFRvYXN0ZXJUYWJsZSwgc2VsZikuX19pbml0X18oKQorICAgICAgICBpZiAndGVtcGxhdGVfbmFtZScgaW4ga3dhcmdzOgorICAgICAgICAgICAgc2VsZi50ZW1wbGF0ZV9uYW1lID0ga3dhcmdzWyd0ZW1wbGF0ZV9uYW1lJ10KKyAgICAgICAgc2VsZi50aXRsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb2x1bW5zID0gW10KKyAgICAgICAgc2VsZi5maWx0ZXJzID0ge30KKyAgICAgICAgc2VsZi50b3RhbF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYSA9IHt9CisgICAgICAgIHNlbGYuZmlsdGVyX2FjdGlvbnMgPSB7fQorICAgICAgICBzZWxmLmVtcHR5X3N0YXRlID0gIlNvcnJ5IC0gbm8gZGF0YSBmb3VuZCIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAiIgorCisgICAgICAgICMgYWRkIHRoZSAiaWQiIGNvbHVtbiwgdW5kaXNwbGF5YWJsZSwgYnkgZGVmYXVsdAorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IklkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJpZCIpCisKKworICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCdmb3JtYXQnLCBOb25lKSA9PSAnanNvbic6CisKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfcXVlcnlzZXQoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgIyBQdXQgdGhlIHByb2plY3QgaWQgaW50byB0aGUgY29udGV4dCBmb3IgdGhlIHN0YXRpY19kYXRhX3RlbXBsYXRlCisgICAgICAgICAgICBpZiAncGlkJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsncGlkJ10gPSBrd2FyZ3NbJ3BpZCddCisKKyAgICAgICAgICAgIGNtZCA9IHJlcXVlc3QuR0VULmdldCgnY21kJywgTm9uZSkKKyAgICAgICAgICAgIGlmIGNtZCBhbmQgJ2ZpbHRlcmluZm8nIGluIGNtZDoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZmlsdGVyX2luZm8ocmVxdWVzdCwgKiprd2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSWYgbm8gY21kIGlzIHNwZWNpZmllZCB3ZSBnaXZlIHlvdSB0aGUgdGFibGUgZGF0YQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKHJlcXVlc3QsICoqa3dhcmdzKQorCisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGRhdGEsIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgcmV0dXJuIHN1cGVyKFRvYXN0ZXJUYWJsZSwgc2VsZikuZ2V0KHJlcXVlc3QsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBnZXRfZmlsdGVyX2luZm8oc2VsZiwgcmVxdWVzdCwgKiprd2FyZ3MpOgorICAgICAgICBkYXRhID0gTm9uZQorCisgICAgICAgIHNlbGYuc2V0dXBfZmlsdGVycygqKmt3YXJncykKKworICAgICAgICBzZWFyY2ggPSByZXF1ZXN0LkdFVC5nZXQoInNlYXJjaCIsIE5vbmUpCisgICAgICAgIGlmIHNlYXJjaDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfc2VhcmNoKHNlYXJjaCkKKworICAgICAgICBuYW1lID0gcmVxdWVzdC5HRVQuZ2V0KCJuYW1lIiwgTm9uZSkKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMoc2VsZi5maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50PTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9RGphbmdvSlNPTkVuY29kZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgYWN0aW9ucyBpbiBzZWxmLmZpbHRlcnNbbmFtZV1bJ2ZpbHRlcl9hY3Rpb25zJ106CisgICAgICAgICAgICAgICAgYWN0aW9uc1snY291bnQnXSA9IHNlbGYuZmlsdGVyX2FjdGlvbnNbYWN0aW9uc1snbmFtZSddXShjb3VudF9vbmx5PVRydWUpCisKKyAgICAgICAgICAgICMgQWRkIHRoZSAiQWxsIiBpdGVtcyBmaWx0ZXIgYWN0aW9uCisgICAgICAgICAgICBzZWxmLmZpbHRlcnNbbmFtZV1bJ2ZpbHRlcl9hY3Rpb25zJ10uaW5zZXJ0KDAsIHsKKyAgICAgICAgICAgICAgICAnbmFtZScgOiAnYWxsJywKKyAgICAgICAgICAgICAgICAndGl0bGUnIDogJ0FsbCcsCisgICAgICAgICAgICAgICAgJ2NvdW50JyA6IHNlbGYucXVlcnlzZXQuY291bnQoKSwKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKHNlbGYuZmlsdGVyc1tuYW1lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzPURqYW5nb0pTT05FbmNvZGVyKQorCisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHNldHVwX2NvbHVtbnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cCB0aGUgY29sdW1ucyAiIiIKKyAgICAgICAgcGFzcworICAgIGRlZiBzZXR1cF9maWx0ZXJzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlIGZpbHRlcnMgIiIiCisgICAgICAgIHBhc3MKKyAgICBkZWYgc2V0dXBfcXVlcnlzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbiB0aGUgc3ViY2xhc3Mgd2hpY2ggc2V0cyB1cCB0aGUgcXVlcnlzZXQiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZF9maWx0ZXIoc2VsZiwgbmFtZSwgdGl0bGUsIGZpbHRlcl9hY3Rpb25zKToKKyAgICAgICAgIiIiQWRkIGEgZmlsdGVyIHRvIHRoZSB0YWJsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbmFtZSAoc3RyKTogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZpbHRlci4KKyAgICAgICAgICAgIHRpdGxlIChzdHIpOiBUaXRsZSBvZiB0aGUgZmlsdGVyLgorICAgICAgICAgICAgZmlsdGVyX2FjdGlvbnM6IEFjdGlvbnMgZm9yIGFsbCB0aGUgZmlsdGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZmlsdGVyc1tuYW1lXSA9IHsKKyAgICAgICAgICAndGl0bGUnIDogdGl0bGUsCisgICAgICAgICAgJ2ZpbHRlcl9hY3Rpb25zJyA6IGZpbHRlcl9hY3Rpb25zLAorICAgICAgICB9CisKKyAgICBkZWYgbWFrZV9maWx0ZXJfYWN0aW9uKHNlbGYsIG5hbWUsIHRpdGxlLCBhY3Rpb25fZnVuY3Rpb24pOgorICAgICAgICAiIiIgVXRpbGl0eSB0byBtYWtlIGEgZmlsdGVyX2FjdGlvbiAiIiIKKworICAgICAgICBhY3Rpb24gPSB7CisgICAgICAgICAgJ3RpdGxlJyA6IHRpdGxlLAorICAgICAgICAgICduYW1lJyA6IG5hbWUsCisgICAgICAgIH0KKworICAgICAgICBzZWxmLmZpbHRlcl9hY3Rpb25zW25hbWVdID0gYWN0aW9uX2Z1bmN0aW9uCisKKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIGFkZF9jb2x1bW4oc2VsZiwgdGl0bGU9IiIsIGhlbHBfdGV4dD0iIiwKKyAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9RmFsc2UsIGhpZGVhYmxlPVRydWUsIGhpZGRlbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSIiLCBmaWx0ZXJfbmFtZT1Ob25lLCBzdGF0aWNfZGF0YV9uYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgZGlzcGxheWFibGU9VHJ1ZSwgY29tcHV0YXRpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1Ob25lKToKKyAgICAgICAgIiIiQWRkIGEgY29sdW1uIHRvIHRoZSB0YWJsZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGl0bGUgKHN0cik6IFRpdGxlIGZvciB0aGUgdGFibGUgaGVhZGVyCisgICAgICAgICAgICBoZWxwX3RleHQgKHN0cik6IE9wdGlvbmFsIGhlbHAgdGV4dCB0byBkZXNjcmliZSB0aGUgY29sdW1uCisgICAgICAgICAgICBvcmRlcmFibGUgKGJvb2wpOiBXaGV0aGVyIHRoZSBjb2x1bW4gY2FuIGJlIG9yZGVyZWQuCisgICAgICAgICAgICAgICAgV2Ugb3JkZXIgb24gdGhlIGZpZWxkX25hbWUuCisgICAgICAgICAgICBoaWRlYWJsZSAoYm9vbCk6IFdoZXRoZXIgdGhlIHVzZXIgY2FuIGhpZGUgdGhlIGNvbHVtbgorICAgICAgICAgICAgaGlkZGVuIChib29sKTogV2hldGhlciB0aGUgY29sdW1uIGlzIGRlZmF1bHQgaGlkZGVuCisgICAgICAgICAgICBmaWVsZF9uYW1lIChzdHIgb3IgbGlzdCk6IGZpZWxkKHMpIHJlcXVpcmVkIGZvciB0aGlzIGNvbHVtbidzIGRhdGEKKyAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWUgKHN0ciwgb3B0aW9uYWwpOiBUaGUgY29sdW1uJ3MgbWFpbiBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCByZXBsYWNlIHRoZSBmaWVsZF9uYW1lLgorICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGUoc3RyLCBvcHRpb25hbCk6IFRoZSB0ZW1wbGF0ZSB0byBiZSByZW5kZXJlZAorICAgICAgICAgICAgICAgIGFzIGRhdGEKKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5jb2x1bW5zLmFwcGVuZCh7J3RpdGxlJyA6IHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVscF90ZXh0JyA6IGhlbHBfdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyYWJsZScgOiBvcmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaWRlYWJsZScgOiBoaWRlYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbicgOiBoaWRkZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWVsZF9uYW1lJyA6IGZpZWxkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXJfbmFtZScgOiBmaWx0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRpY19kYXRhX25hbWUnOiBzdGF0aWNfZGF0YV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdGljX2RhdGFfdGVtcGxhdGUnOiBzdGF0aWNfZGF0YV90ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXlhYmxlJzogZGlzcGxheWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wdXRhdGlvbic6IGNvbXB1dGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCisKKyAgICBkZWYgcmVuZGVyX3N0YXRpY19kYXRhKHNlbGYsIHRlbXBsYXRlLCByb3cpOgorICAgICAgICAiIiJVdGlsaXR5IGZ1bmN0aW9uIHRvIHJlbmRlciB0aGUgc3RhdGljIGRhdGEgdGVtcGxhdGUiIiIKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICdleHRyYScgOiBzZWxmLnN0YXRpY19jb250ZXh0X2V4dHJhLAorICAgICAgICAgICdkYXRhJyA6IHJvdywKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KGNvbnRleHQpCisgICAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUodGVtcGxhdGUpCisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlbmRlcihjb250ZXh0KQorCisgICAgZGVmIGFwcGx5X2ZpbHRlcihzZWxmLCBmaWx0ZXJzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuc2V0dXBfZmlsdGVycygqKmt3YXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWx0ZXJfbmFtZSwgZmlsdGVyX2FjdGlvbiA9IGZpbHRlcnMuc3BsaXQoJzonKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmICJhbGwiIGluIGZpbHRlcl9hY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmZpbHRlcl9hY3Rpb25zW2ZpbHRlcl9hY3Rpb25dKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgIyBwYXNzIGl0IHRvIHRoZSB1c2VyIC0gcHJvZ3JhbW1pbmcgZXJyb3IgaGVyZQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBhcHBseV9vcmRlcmJ5KHNlbGYsIG9yZGVyYnkpOgorICAgICAgICAjIE5vdGUgdGhhdCBkamFuZ28gd2lsbCBleGVjdXRlIHRoaXMgd2hlbiB3ZSB0cnkgdG8gcmV0cmlldmUgdGhlIGRhdGEKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQub3JkZXJfYnkob3JkZXJieSkKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0pOgorICAgICAgICAiIiJDcmVhdGVzIGEgcXVlcnkgYmFzZWQgb24gdGhlIG1vZGVsJ3Mgc2VhcmNoX2FsbG93ZWRfZmllbGRzIiIiCisKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5xdWVyeXNldC5tb2RlbCwgJ3NlYXJjaF9hbGxvd2VkX2ZpZWxkcycpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnIgU2VhcmNoIGZpZWxkcyBhcmVuJ3QgZGVmaW5lZCBpbiB0aGUgbW9kZWwiKQorCisgICAgICAgIHNlYXJjaF9xdWVyaWVzID0gW10KKyAgICAgICAgZm9yIHN0IGluIHNlYXJjaF90ZXJtLnNwbGl0KCIgIik6CisgICAgICAgICAgICBxX21hcCA9IFtRKCoqe2ZpZWxkICsgJ19faWNvbnRhaW5zJzogc3R9KQorICAgICAgICAgICAgICAgICAgICAgZm9yIGZpZWxkIGluIHNlbGYucXVlcnlzZXQubW9kZWwuc2VhcmNoX2FsbG93ZWRfZmllbGRzXQorCisgICAgICAgICAgICBzZWFyY2hfcXVlcmllcy5hcHBlbmQocmVkdWNlKG9wZXJhdG9yLm9yXywgcV9tYXApKQorCisgICAgICAgIHNlYXJjaF9xdWVyaWVzID0gcmVkdWNlKG9wZXJhdG9yLmFuZF8sIHNlYXJjaF9xdWVyaWVzKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihzZWFyY2hfcXVlcmllcykKKworCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHJlcXVlc3QsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZGF0YSBmb3IgdGhlIHBhZ2UgcmVxdWVzdGVkIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAgICBwYXJhbWV0ZXJzIGFwcGxpZWQiIiIKKworICAgICAgICBwYWdlX251bSA9IHJlcXVlc3QuR0VULmdldCgicGFnZSIsIDEpCisgICAgICAgIGxpbWl0ID0gcmVxdWVzdC5HRVQuZ2V0KCJsaW1pdCIsIDEwKQorICAgICAgICBzZWFyY2ggPSByZXF1ZXN0LkdFVC5nZXQoInNlYXJjaCIsIE5vbmUpCisgICAgICAgIGZpbHRlcnMgPSByZXF1ZXN0LkdFVC5nZXQoImZpbHRlciIsIE5vbmUpCisgICAgICAgIG9yZGVyYnkgPSByZXF1ZXN0LkdFVC5nZXQoIm9yZGVyYnkiLCBOb25lKQorCisgICAgICAgICMgTWFrZSBhIHVuaXF1ZSBjYWNoZSBuYW1lCisgICAgICAgIGNhY2hlX25hbWUgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIGZvciBrZXksIHZhbCBpbiByZXF1ZXN0LkdFVC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGNhY2hlX25hbWUgPSBjYWNoZV9uYW1lICsgc3RyKGtleSkgKyBzdHIodmFsKQorCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBjYWNoZV9uYW1lID0gY2FjaGVfbmFtZSArIHN0cihrZXkpICsgc3RyKHZhbCkKKworICAgICAgICAjIE5vIHNwZWNpYWwgY2hhcnMgYWxsb3dlZCBpbiB0aGUgY2FjaGUgbmFtZSBhcGFydCBmcm9tIGRhc2gKKyAgICAgICAgY2FjaGVfbmFtZSA9IHJlLnN1YihyJ1teQS1aYS16MC05LV0nLCAiIiwgY2FjaGVfbmFtZSkKKyAgICAgICAgZGF0YSA9IGNhY2hlLmdldChjYWNoZV9uYW1lKQorCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgICAgIHNlbGYuc2V0dXBfY29sdW1ucygqKmt3YXJncykKKworICAgICAgICBpZiBzZWFyY2g6CisgICAgICAgICAgICBzZWxmLmFwcGx5X3NlYXJjaChzZWFyY2gpCisgICAgICAgIGlmIGZpbHRlcnM6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2ZpbHRlcihmaWx0ZXJzLCAqKmt3YXJncykKKyAgICAgICAgaWYgb3JkZXJieToKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfb3JkZXJieShvcmRlcmJ5KQorCisgICAgICAgIHBhZ2luYXRvciA9IFBhZ2luYXRvcihzZWxmLnF1ZXJ5c2V0LCBsaW1pdCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UocGFnZV9udW0pCisgICAgICAgIGV4Y2VwdCBFbXB0eVBhZ2U6CisgICAgICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UoMSkKKworICAgICAgICBkYXRhID0geworICAgICAgICAgICAgJ3RvdGFsJyA6IHNlbGYucXVlcnlzZXQuY291bnQoKSwKKyAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogc2VsZi5kZWZhdWx0X29yZGVyYnksCisgICAgICAgICAgICAnY29sdW1ucycgOiBzZWxmLmNvbHVtbnMsCisgICAgICAgICAgICAncm93cycgOiBbXSwKKyAgICAgICAgICAgICdlcnJvcicgOiAib2siLAorICAgICAgICB9CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHJvdyBpbiBwYWdlLm9iamVjdF9saXN0OgorICAgICAgICAgICAgICAgICNVc2UgY29sbGVjdGlvbiB0byBtYWludGFpbiB0aGUgb3JkZXIKKyAgICAgICAgICAgICAgICByZXF1aXJlZF9kYXRhID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorCisgICAgICAgICAgICAgICAgZm9yIGNvbCBpbiBzZWxmLmNvbHVtbnM6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gY29sWydmaWVsZF9uYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkOgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBjb2xbJ3N0YXRpY19kYXRhX25hbWUnXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmllbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk11c3Qgc3VwcGx5IGEgZmllbGRfbmFtZSBvciBzdGF0aWNfZGF0YV9uYW1lIGZvciBjb2x1bW4gJXMuJXMiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLGNvbCkpCisgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgbmVlZCB0byBwcm9jZXNzIHNvbWUgc3RhdGljIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgInN0YXRpY19kYXRhX25hbWUiIGluIGNvbCBhbmQgY29sWydzdGF0aWNfZGF0YV9uYW1lJ106CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF9kYXRhWyJzdGF0aWM6JXMiICUgY29sWydzdGF0aWNfZGF0YV9uYW1lJ11dID0gc2VsZi5yZW5kZXJfc3RhdGljX2RhdGEoY29sWydzdGF0aWNfZGF0YV90ZW1wbGF0ZSddLCByb3cpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgT3ZlcndyaXRlIHRoZSBmaWVsZF9uYW1lIHdpdGggc3RhdGljX2RhdGFfbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyB0aGF0IHRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlIGh0bWwgY2xhc3MgbmFtZQorCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xbJ2ZpZWxkX25hbWUnXSA9IGNvbFsnc3RhdGljX2RhdGFfbmFtZSddCisKKyAgICAgICAgICAgICAgICAgICAgIyBjb21wdXRlIHRoZSBjb21wdXRhdGlvbiBvbiB0aGUgcmF3IGRhdGEgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSByb3cKKyAgICAgICAgICAgICAgICAgICAgaWYgY29sWydjb21wdXRhdGlvbiddOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZGF0YSA9IGNvbFsnY29tcHV0YXRpb24nXShyb3cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRyYXZlcnNlIHRvIGFueSBmb3JpZWduIGtleSBpbiB0aGUgb2JqZWN0IGhpZXJhY2h5CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3ViZmllbGQgaW4gZmllbGQuc3BsaXQoIl9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihtb2RlbF9kYXRhLCBzdWJmaWVsZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBnZXRhdHRyKG1vZGVsX2RhdGEsIHN1YmZpZWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgZmllbGQgY291bGQgYmUgYSBmdW5jdGlvbiBvbiB0aGUgbW9kZWwgc28gY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgaXQgaXMgdGhlbiBjYWxsIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1vZGVsX2RhdGEsIHR5cGVzLk1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gbW9kZWxfZGF0YSgpCisKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YVtjb2xbJ2ZpZWxkX25hbWUnXV0gPSBtb2RlbF9kYXRhCisKKyAgICAgICAgICAgICAgICBkYXRhWydyb3dzJ10uYXBwZW5kKHJlcXVpcmVkX2RhdGEpCisKKyAgICAgICAgZXhjZXB0IEZpZWxkRXJyb3I6CisgICAgICAgICAgICAjIHBhc3MgIGl0IHRvIHRoZSB1c2VyIC0gcHJvZ3JhbW1pbmctZXJyb3IgaGVyZQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMoZGF0YSwgaW5kZW50PTIsIGRlZmF1bHQ9b2JqdG9qc29uKQorICAgICAgICBjYWNoZS5zZXQoY2FjaGVfbmFtZSwgZGF0YSwgNjAqMzApCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBUb2FzdGVyVGVtcGxhdGVWaWV3KFRlbXBsYXRlVmlldyk6CisgICAgIyByZW5kZXJzIGEgaW5zdGFuY2UgaW4gYSB0ZW1wbGF0ZSwgb3IgcmV0dXJucyB0aGUgY29udGV4dCBhcyBqc29uCisgICAgIyB0aGUgY2xhc3MtZXF1aXZhbGVudCBvZiB0aGUgX3RlbXBsYXRlX3JlbmRlcmVyIGRlY29yYXRvciBmb3Igdmlld3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUb2FzdGVyVGVtcGxhdGVWaWV3LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuY29udGV4dF9lbnRyaWVzID0gW10KKworICAgIGRlZiBnZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5yZXF1ZXN0LkdFVC5nZXQoJ2Zvcm1hdCcsIE5vbmUpID09ICdqc29uJzoKKyAgICAgICAgICAgIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCisgICAgICAgICAgICBmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IEh0dHBSZXNwb25zZQorICAgICAgICAgICAgZnJvbSB2aWV3cyBpbXBvcnQgb2JqdG9qc29uCisgICAgICAgICAgICBmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBqc29uIGFzIGpzb25maWx0ZXIKKworICAgICAgICAgICAgY29udGV4dCA9IHNlbGYuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKworICAgICAgICAgICAgZm9yIHggaW4gY29udGV4dC5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgeCBub3QgaW4gc2VsZi5jb250ZXh0X2VudHJpZXM6CisgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W3hdCisKKyAgICAgICAgICAgIGNvbnRleHRbImVycm9yIl0gPSAib2siCisKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcihjb250ZXh0LCAgZGVmYXVsdD1vYmp0b2pzb24gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIpCisKKyAgICAgICAgcmV0dXJuIHN1cGVyKFRvYXN0ZXJUZW1wbGF0ZVZpZXcsIHNlbGYpLmdldCgqYXJncywgKiprd2FyZ3MpCisKK2NsYXNzIFRvYXN0ZXJUeXBlQWhlYWQoVmlldyk6CisgICAgIiIiIEEgdHlwZWFoZWFkIG1lY2hhbmlzbSB0byBzdXBwb3J0IHRoZSBmcm9udCBlbmQgdHlwZWFoZWFkIHdpZGdldHMgIiIiCisgICAgTUFYX1JFU1VMVFMgPSA2CisKKyAgICBjbGFzcyBNaXNzaW5nRmllbGRzRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUb2FzdGVyVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGRlZiByZXNwb25zZShkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyhkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1EamFuZ29KU09ORW5jb2RlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgZXJyb3IgPSAib2siCisKKyAgICAgICAgc2VhcmNoX3Rlcm0gPSByZXF1ZXN0LkdFVC5nZXQoInNlYXJjaCIsIE5vbmUpCisgICAgICAgIGlmIHNlYXJjaF90ZXJtID09IE5vbmU6CisgICAgICAgICAgICAjIFdlIGdvdCBubyBzZWFyY2ggdmFsdWUgc28gcmV0dXJuIGVtcHR5IHJlcG9uc2UKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZSh7J2Vycm9yJyA6IGVycm9yICwgJ3Jlc3VsdHMnOiBbXX0pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcmogPSBOb25lCisKKyAgICAgICAgcmVzdWx0cyA9IHNlbGYuYXBwbHlfc2VhcmNoKHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpWzpUb2FzdGVyVHlwZUFoZWFkLk1BWF9SRVNVTFRTXQorCisgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9maWVsZHMocmVzdWx0c1swXSkKKyAgICAgICAgICAgIGV4Y2VwdCBNaXNzaW5nRmllbGRzRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgZXJyb3IgPSBlCisKKyAgICAgICAgZGF0YSA9IHsgJ3Jlc3VsdHMnIDogcmVzdWx0cywKKyAgICAgICAgICAgICAgICAnZXJyb3InIDogZXJyb3IsCisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlKGRhdGEpCisKKyAgICBkZWYgdmFsaWRhdGVfZmllbGRzKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIGlmICduYW1lJyBpbiByZXN1bHQgPT0gRmFsc2Ugb3IgJ2RldGFpbCcgaW4gcmVzdWx0ID09IEZhbHNlOgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ0ZpZWxkc0V4Y2VwdGlvbigibmFtZSBhbmQgZGV0YWlsIGFyZSByZXF1aXJlZCBmaWVsZHMiKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqKToKKyAgICAgICAgIiIiIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gaW1wbGVtZW50IHNlYXJjaC4gUmV0dXJuIGFuIGFycmF5IG9mCisgICAgICAgIGRpY3Rpb25hcmllcyB3aXRoIGEgbWluaXVtIG9mIGEgbmFtZSBhbmQgZGV0YWlsIGZpZWxkIiIiCisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkZGVsZXRlLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRkZWxldGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5M2U1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkZGVsZXRlLnB5CkBAIC0wLDAgKzEsNTQgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBCYXNlQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IE9iamVjdERvZXNOb3RFeGlzdAorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IE9wZXJhdGlvbmFsRXJyb3IKK2ltcG9ydCBvcworCisKKworY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CisgICAgYXJncyAgICA9ICc8YnVpbGRJRDEgYnVpbGRJRDIgLi4uLi4+JworICAgIGhlbHAgICAgPSAiRGVsZXRlcyBzZWxlY3RlZCBidWlsZChzKSIKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgKmFyZ3MsICoqb3B0aW9ucyk6CisgICAgICAgIGZvciBiaWQgaW4gYXJnczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiID0gQnVpbGQub2JqZWN0cy5nZXQocGsgPSBiaWQpCisgICAgICAgICAgICBleGNlcHQgT2JqZWN0RG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHByaW50ICdidWlsZCAlcyBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcuLi4nICUoYmlkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIHRoZW9yZXRpY2FsbHksIGp1c3QgYi5kZWxldGUoKSB3b3VsZCBzdWZmaWNlCisgICAgICAgICAgICAjIGhvd2V2ZXIgU1FMaXRlIHJ1bnMgaW50byBwcm9ibGVtcyB3aGVuIHlvdSB0cnkgdG8KKyAgICAgICAgICAgICMgZGVsZXRlIHRvbyBtYW55IHJvd3MgYXQgb25jZSwgc28gd2UgZGVsZXRlIHNvbWUgZGlyZWN0CisgICAgICAgICAgICAjIHJlbGF0aW9uc2hpcHMgZnJvbSBCdWlsZCBtYW51YWxseS4KKyAgICAgICAgICAgIGZvciB0IGluIGIudGFyZ2V0X3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICB0LmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgdCBpbiBiLnRhc2tfYnVpbGQuYWxsKCk6CisgICAgICAgICAgICAgICAgdC5kZWxldGUoKQorICAgICAgICAgICAgZm9yIHAgaW4gYi5wYWNrYWdlX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBwLmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgbHYgaW4gYi5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbCgpOgorICAgICAgICAgICAgICAgIGx2LmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgdiBpbiBiLnZhcmlhYmxlX2J1aWxkLmFsbCgpOgorICAgICAgICAgICAgICAgIHYuZGVsZXRlKCkKKyAgICAgICAgICAgIGZvciBsIGluIGIubG9nbWVzc2FnZV9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgbC5kZWxldGUoKQorCisgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgYnVpbGQ7IHNvbWUgZGF0YWJhc2VzIG1pZ2h0IGhhdmUgaGFkIHByb2JsZW0gd2l0aCBtaWdyYXRpb24gb2YgdGhlIGJsZGNvbnRyb2wgYXBwCisgICAgICAgICAgICByZXRyeV9jb3VudCA9IDAKKyAgICAgICAgICAgIG5lZWRfYmxkY29udHJvbF9taWdyYXRpb24gPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiByZXRyeV9jb3VudCA+PSA1OgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHJldHJ5X2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBpZiBuZWVkX2JsZGNvbnRyb2xfbWlncmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBmcm9tIGRqYW5nby5jb3JlIGltcG9ydCBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQuY2FsbF9jb21tYW5kKCdtaWdyYXRlJywgJ2JsZGNvbnRyb2wnLCBpbnRlcmFjdGl2ZT1GYWxzZSkKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYi5kZWxldGUoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBPcGVyYXRpb25hbEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICMgZXhlY3V0ZSBtaWdyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIG5lZWRfYmxkY29udHJvbF9taWdyYXRpb24gPSBUcnVlCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL2J1aWxkc2xpc3QucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDk4N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5CkBAIC0wLDAgKzEsMTMgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQKK2ltcG9ydCBvcworCisKKworY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKKyAgICBhcmdzICAgID0gIiIKKyAgICBoZWxwICAgID0gIkxpc3RzIGN1cnJlbnQgYnVpbGRzIgorCisgICAgZGVmIGhhbmRsZV9ub2FyZ3Moc2VsZiwqKm9wdGlvbnMpOgorICAgICAgICBmb3IgYiBpbiBCdWlsZC5vYmplY3RzLmFsbCgpOgorICAgICAgICAgICAgcHJpbnQgIiVkOiAlcyAlcyAlcyIgJSAoYi5waywgYi5tYWNoaW5lLCBiLmRpc3RybywgIiwiLmpvaW4oW3gudGFyZ2V0IGZvciB4IGluIGIudGFyZ2V0X3NldC5hbGwoKV0pKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvcGVyZi5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhNDhlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkKQEAgLTAsMCArMSw1OCBAQAorZnJvbSBkamFuZ28uY29yZS5tYW5hZ2VtZW50LmJhc2UgaW1wb3J0IEJhc2VDb21tYW5kCitmcm9tIGRqYW5nby50ZXN0LmNsaWVudCBpbXBvcnQgQ2xpZW50CitpbXBvcnQgb3MsIHN5cywgcmUKK2ltcG9ydCByZXF1ZXN0cworZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKKworIyBweWxpbnQ6IGRpc2FibGU9RTExMDMKKyMgSW5zdGFuY2Ugb2YgJ1dTR0lSZXF1ZXN0JyBoYXMgbm8gJ3N0YXR1c19jb2RlJyBtZW1iZXIKKyMgKGJ1dCBzb21lIHR5cGVzIGNvdWxkIG5vdCBiZSBpbmZlcnJlZCkgKG1heWJlLW5vLW1lbWJlcikKKworCitjbGFzcyBDb21tYW5kKEJhc2VDb21tYW5kKToKKyAgICBoZWxwICAgID0gIlRlc3QgdGhlIHJlc3BvbnNlIHRpbWUgZm9yIGFsbCB0b2FzdGVyIHVybHMiCisKKyAgICBkZWYgaGFuZGxlKHNlbGYsICphcmdzLCAqKm9wdGlvbnMpOgorCXJvb3RfdXJsY29uZiA9IF9faW1wb3J0X18oc2V0dGluZ3MuUk9PVF9VUkxDT05GKQorCXBhdHRlcm5zID0gcm9vdF91cmxjb25mLnVybHMudXJscGF0dGVybnMKKwlnbG9iYWwgZnVsbF91cmwKKwlmb3IgcGF0IGluIHBhdHRlcm5zOgorCSAgICBpZiBwYXQuX19jbGFzc19fLl9fbmFtZV9fID09ICdSZWdleFVSTFJlc29sdmVyJzoKKwkJdXJsX3Jvb3RfcmVzID0gc3RyKHBhdCkuc3BsaXQoJ14nKVsxXS5yZXBsYWNlKCc+JywgJycpCisJCWlmICdndWknIGluIHVybF9yb290X3JlczoKKwkJICAgIGZvciB1cmxfcGF0dCBpbiBwYXQudXJsX3BhdHRlcm5zOgorCQkJZnVsbF91cmwgPSBzZWxmLmdldF9mdWxsX3VybCh1cmxfcGF0dCwgdXJsX3Jvb3RfcmVzKQorCQkJaW5mbyA9IHNlbGYudXJsX2luZm8oZnVsbF91cmwpCisJCQlzdGF0dXNfY29kZSA9IGluZm9bMF0KKwkJCWxvYWRfdGltZSA9IGluZm9bMV0KKwkJCXByaW50ICdUcnlpbmcgXCcnICsgZnVsbF91cmwgKyAnXCcsICcgKyBzdHIoc3RhdHVzX2NvZGUpICsgJywgJyArIHN0cihsb2FkX3RpbWUpCisKKyAgICBkZWYgZ2V0X2Z1bGxfdXJsKHNlbGYsIHVybF9wYXR0LCB1cmxfcm9vdF9yZXMpOgorCWZ1bGxfdXJsID0gc3RyKHVybF9wYXR0KS5zcGxpdCgnXicpWzFdLnJlcGxhY2UoJyQ+JywgJycpLnJlcGxhY2UoJyg/UDxmaWxlX3BhdGg+KD86L1snLCAnL2Jpbi9idXN5Ym94JykucmVwbGFjZSgnLionLCAnJykKKwlmdWxsX3VybCA9IHN0cih1cmxfcm9vdF9yZXMgKyBmdWxsX3VybCkKKwlmdWxsX3VybCA9IHJlLnN1YignXChcP1A8Lio/PlxcXGRcK1wpJywgJzEnLCBmdWxsX3VybCkKKwlmdWxsX3VybCA9ICdodHRwOi8vbG9jYWxob3N0OjgwMDAvJyArIGZ1bGxfdXJsCisJcmV0dXJuIGZ1bGxfdXJsCisKKyAgICBkZWYgdXJsX2luZm8oc2VsZiwgZnVsbF91cmwpOgorCWNsaWVudCA9IENsaWVudCgpCisJaW5mbyA9IFtdCisJdHJ5OgorCSAgICByZXNwID0gY2xpZW50LmdldChmdWxsX3VybCwgZm9sbG93ID0gVHJ1ZSkKKwlleGNlcHQgRXhjZXB0aW9uIGFzIGVfc3RhdHVzX2NvZGU6CisgICAgICAgICAgICBzZWxmLmVycm9yKCdVcmw6ICVzLCBlcnJvcjogJXMnICUgKGZ1bGxfdXJsLCBlX3N0YXR1c19jb2RlKSkKKyAgICAgICAgICAgIHJlc3AgPSB0eXBlKCdvYmplY3QnLCAoKSwgeydzdGF0dXNfY29kZSc6MCwgJ2NvbnRlbnQnOiBzdHIoZV9zdGF0dXNfY29kZSl9KQorCXN0YXR1c19jb2RlID0gcmVzcC5zdGF0dXNfY29kZQorCWluZm8uYXBwZW5kKHN0YXR1c19jb2RlKQorCXRyeToKKwkgICAgcmVxID0gcmVxdWVzdHMuZ2V0KGZ1bGxfdXJsKQorCWV4Y2VwdCBFeGNlcHRpb24gYXMgZV9sb2FkX3RpbWU6CisgICAgICAgICAgICBzZWxmLmVycm9yKCdVcmw6ICVzLCBlcnJvcjogJXMnICUgKGZ1bGxfdXJsLCBlX2xvYWRfdGltZSkpCisJbG9hZF90aW1lID0gcmVxLmVsYXBzZWQKKwlpbmZvLmFwcGVuZChsb2FkX3RpbWUpCisJcmV0dXJuIGluZm8KKworICAgIGRlZiBlcnJvcihzZWxmLCAqYXJncyk6CisJZm9yIGFyZyBpbiBhcmdzOgorCSAgICBwcmludCA+PnN5cy5zdGRlcnIsIGFyZywKKwlwcmludCA+PnN5cy5zdGRlcnIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weSBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ5YTVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CkBAIC0wLDAgKzEsNDEwIEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBEamFuZ28gc2V0dGluZ3MgZm9yIFRvYXN0ZXIgcHJvamVjdC4KKworaW1wb3J0IG9zLCByZQorCitERUJVRyA9IFRydWUKK1RFTVBMQVRFX0RFQlVHID0gREVCVUcKKworIyBTZXQgdG8gVHJ1ZSB0byBzZWUgdGhlIFNRTCBxdWVyaWVzIGluIGNvbnNvbGUKK1NRTF9ERUJVRyA9IEZhbHNlCitpZiBvcy5lbnZpcm9uLmdldCgiVE9BU1RFUl9TUUxERUJVRyIsIE5vbmUpIGlzIG5vdCBOb25lOgorICAgIFNRTF9ERUJVRyA9IFRydWUKKworCitBRE1JTlMgPSAoCisgICAgIyAoJ1lvdXIgTmFtZScsICd5b3VyX2VtYWlsQGV4YW1wbGUuY29tJyksCispCisKK01BTkFHRVJTID0gQURNSU5TCisKK0RBVEFCQVNFUyA9IHsKKyAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsICMgQWRkICdwb3N0Z3Jlc3FsX3BzeWNvcGcyJywgJ215c3FsJywgJ3NxbGl0ZTMnIG9yICdvcmFjbGUnLgorICAgICAgICAnTkFNRSc6ICd0b2FzdGVyLnNxbGl0ZScsICAgICAgICAgICAgICAgICAgICAgICMgT3IgcGF0aCB0byBkYXRhYmFzZSBmaWxlIGlmIHVzaW5nIHNxbGl0ZTMuCisgICAgICAgICdVU0VSJzogJycsCisgICAgICAgICdQQVNTV09SRCc6ICcnLAorICAgICAgICAnSE9TVCc6ICcxMjcuMC4wLjEnLCAgICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IGZvciBsb2NhbGhvc3QgdGhyb3VnaCBkb21haW4gc29ja2V0cyBvciAnMTI3LjAuMC4xJyBmb3IgbG9jYWxob3N0IHRocm91Z2ggVENQLgorICAgICAgICAnUE9SVCc6ICczMzA2JywgICAgICAgICAgICAgICAgICAgICAgIyBTZXQgdG8gZW1wdHkgc3RyaW5nIGZvciBkZWZhdWx0LgorICAgIH0KK30KKworIyBOZWVkZWQgd2hlbiBVc2luZyBzcWxpdGUgZXNwZWNpYWxseSB0byBhZGQgYSBsb25nZXIgdGltZW91dCBmb3Igd2FpdGluZworIyBmb3IgdGhlIGRhdGFiYXNlIGxvY2sgdG8gYmUgIHJlbGVhc2VkCisjIGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjYvcmVmL2RhdGFiYXNlcy8jZGF0YWJhc2UtaXMtbG9ja2VkLWVycm9ycworaWYgJ3NxbGl0ZScgaW4gREFUQUJBU0VTWydkZWZhdWx0J11bJ0VOR0lORSddOgorICAgIERBVEFCQVNFU1snZGVmYXVsdCddWydPUFRJT05TJ10gPSB7ICd0aW1lb3V0JzogMjAgfQorCisjIFJlaW50ZXJwcmV0IGRhdGFiYXNlIHNldHRpbmdzIGlmIHdlIGhhdmUgREFUQUJBU0VfVVJMIGVudmlyb25tZW50IHZhcmlhYmxlIGRlZmluZWQKKworaWYgJ0RBVEFCQVNFX1VSTCcgaW4gb3MuZW52aXJvbjoKKyAgICBkYnVybCA9IG9zLmVudmlyb25bJ0RBVEFCQVNFX1VSTCddCisgICAgaWYgZGJ1cmwuc3RhcnRzd2l0aCgnc3FsaXRlMzovLycpOgorICAgICAgICByZXN1bHQgPSByZS5tYXRjaCgnc3FsaXRlMzovLyguKiknLCBkYnVybCkKKyAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVSUk9SOiBDb3VsZCBub3QgcmVhZCBzcWxpdGUgZGF0YWJhc2UgdXJsOiAlcyIgJSBkYnVybCkKKyAgICAgICAgREFUQUJBU0VTWydkZWZhdWx0J10gPSB7CisgICAgICAgICAgICAnRU5HSU5FJzogJ2RqYW5nby5kYi5iYWNrZW5kcy5zcWxpdGUzJywKKyAgICAgICAgICAgICdOQU1FJzogcmVzdWx0Lmdyb3VwKDEpLAorICAgICAgICAgICAgJ1VTRVInOiAnJywKKyAgICAgICAgICAgICdQQVNTV09SRCc6ICcnLAorICAgICAgICAgICAgJ0hPU1QnOiAnJywKKyAgICAgICAgICAgICdQT1JUJzogJycsCisgICAgICAgIH0KKyAgICBlbGlmIGRidXJsLnN0YXJ0c3dpdGgoJ215c3FsOi8vJyk6CisgICAgICAgICMgVVJMIG11c3QgYmUgaW4gdGhpcyBmb3JtOiBteXNxbDovL3VzZXI6cGFzc0Bob3N0OnBvcnQvbmFtZQorICAgICAgICByZXN1bHQgPSByZS5tYXRjaChyIm15c3FsOi8vKFteOl0qKTooW15AXSopQChbXjpdKik6KFxkKykvKFteL10qKSIsIGRidXJsKQorICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRVJST1I6IENvdWxkIG5vdCByZWFkIG15c3FsIGRhdGFiYXNlIHVybDogJXMiICUgZGJ1cmwpCisgICAgICAgIERBVEFCQVNFU1snZGVmYXVsdCddID0geworICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMubXlzcWwnLAorICAgICAgICAgICAgJ05BTUUnOiByZXN1bHQuZ3JvdXAoNSksCisgICAgICAgICAgICAnVVNFUic6IHJlc3VsdC5ncm91cCgxKSwKKyAgICAgICAgICAgICdQQVNTV09SRCc6IHJlc3VsdC5ncm91cCgyKSwKKyAgICAgICAgICAgICdIT1NUJzogcmVzdWx0Lmdyb3VwKDMpLAorICAgICAgICAgICAgJ1BPUlQnOiByZXN1bHQuZ3JvdXAoNCksCisgICAgICAgIH0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBQbGVhc2UgaW1wbGVtZW50IG1pc3NpbmcgZGF0YWJhc2UgdXJsIHNjaGVtYSBmb3IgdXJsOiAlcyIgJSBkYnVybCkKKworCitpZiAnVE9BU1RFUl9NQU5BR0VEJyBpbiBvcy5lbnZpcm9uIGFuZCBvcy5lbnZpcm9uWydUT0FTVEVSX01BTkFHRUQnXSA9PSAiMSI6CisgICAgTUFOQUdFRCA9IFRydWUKK2Vsc2U6CisgICAgTUFOQUdFRCA9IEZhbHNlCisKKyMgQWxsb3dzIGN1cnJlbnQgZGF0YWJhc2Ugc2V0dGluZ3MgdG8gYmUgZXhwb3J0ZWQgYXMgYSBEQVRBQkFTRV9VUkwgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUKKworZGVmIGdldERBVEFCQVNFX1VSTCgpOgorICAgIGQgPSBEQVRBQkFTRVNbJ2RlZmF1bHQnXQorICAgIGlmIGRbJ0VOR0lORSddID09ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMyc6CisgICAgICAgIGlmIGRbJ05BTUUnXSA9PSAnOm1lbW9yeTonOgorICAgICAgICAgICAgcmV0dXJuICdzcWxpdGUzOi8vOm1lbW9yeTonCisgICAgICAgIGVsaWYgZFsnTkFNRSddLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgIHJldHVybiAnc3FsaXRlMzovLycgKyBkWydOQU1FJ10KKyAgICAgICAgcmV0dXJuICJzcWxpdGUzOi8vIiArIG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZFsnTkFNRSddKQorCisgICAgZWxpZiBkWydFTkdJTkUnXSA9PSAnZGphbmdvLmRiLmJhY2tlbmRzLm15c3FsJzoKKyAgICAgICAgcmV0dXJuICJteXNxbDovLyIgKyBkWydVU0VSJ10gKyAiOiIgKyBkWydQQVNTV09SRCddICsgIkAiICsgZFsnSE9TVCddICsgIjoiICsgZFsnUE9SVCddICsgIi8iICsgZFsnTkFNRSddCisKKyAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBQbGVhc2UgaW1wbGVtZW50IG1pc3NpbmcgZGF0YWJhc2UgdXJsIHNjaGVtYSBmb3IgZW5naW5lOiAlcyIgJSBkWydFTkdJTkUnXSkKKworCisKKyMgSG9zdHMvZG9tYWluIG5hbWVzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGlzIHNpdGU7IHJlcXVpcmVkIGlmIERFQlVHIGlzIEZhbHNlCisjIFNlZSBodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS41L3JlZi9zZXR0aW5ncy8jYWxsb3dlZC1ob3N0cworQUxMT1dFRF9IT1NUUyA9IFtdCisKKyMgTG9jYWwgdGltZSB6b25lIGZvciB0aGlzIGluc3RhbGxhdGlvbi4gQ2hvaWNlcyBjYW4gYmUgZm91bmQgaGVyZToKKyMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX3R6X3pvbmVzX2J5X25hbWUKKyMgYWx0aG91Z2ggbm90IGFsbCBjaG9pY2VzIG1heSBiZSBhdmFpbGFibGUgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zLgorIyBJbiBhIFdpbmRvd3MgZW52aXJvbm1lbnQgdGhpcyBtdXN0IGJlIHNldCB0byB5b3VyIHN5c3RlbSB0aW1lIHpvbmUuCisKKyMgQWx3YXlzIHVzZSBsb2NhbCBjb21wdXRlcidzIHRpbWUgem9uZSwgZmluZAoraW1wb3J0IGhhc2hsaWIKK2lmICdUWicgaW4gb3MuZW52aXJvbjoKKyAgICBUSU1FX1pPTkUgPSBvcy5lbnZpcm9uWydUWiddCitlbHNlOgorICAgICMgbmVlZCB0byByZWFkIHRoZSAvZXRjL2xvY2FsdGltZSBmaWxlIHdoaWNoIGlzIHRoZSBsaWJjIHN0YW5kYXJkCisgICAgIyBhbmQgZG8gYSByZXZlcnNlLW1hcHBpbmcgdG8gL3Vzci9zaGFyZS96b25laW5mby87CisgICAgIyBzaW5jZSB0aGUgdGltZXpvbmUgbWF5IG1hdGNoIGFueSBudW1iZXIgb2YgaWRlbnRpY2FsIHRpbWV6b25lIGRlZmluaXRpb25zLAorCisgICAgem9uZWZpbGVsaXN0ID0ge30KKyAgICBaT05FSU5GT1BBVEggPSAnL3Vzci9zaGFyZS96b25laW5mby8nCisgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhaT05FSU5GT1BBVEgpOgorICAgICAgICBmb3IgZm4gaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICB6b25lbmFtZSA9IGZpbGVwYXRoLmxzdHJpcChaT05FSU5GT1BBVEgpLnN0cmlwKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgcHl0egorICAgICAgICAgICAgICAgIGZyb20gcHl0ei5leGNlcHRpb25zIGltcG9ydCBVbmtub3duVGltZVpvbmVFcnJvcgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIHB5dHoudGltZXpvbmUoem9uZW5hbWUpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oZmlsZXBhdGgpLnJlYWQoKSkuaGV4ZGlnZXN0KCldID0gem9uZW5hbWUKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5rbm93blRpbWVab25lRXJyb3IsIFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0IHRpbWV6b25lIGZhaWx1cmVzIGhlcmUsIGp1c3QgbW92ZSBvdmVyCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICB6b25lZmlsZWxpc3RbaGFzaGxpYi5tZDUob3BlbihmaWxlcGF0aCkucmVhZCgpKS5oZXhkaWdlc3QoKV0gPSB6b25lbmFtZQorCisgICAgVElNRV9aT05FID0gem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oJy9ldGMvbG9jYWx0aW1lJykucmVhZCgpKS5oZXhkaWdlc3QoKV0KKworIyBMYW5ndWFnZSBjb2RlIGZvciB0aGlzIGluc3RhbGxhdGlvbi4gQWxsIGNob2ljZXMgY2FuIGJlIGZvdW5kIGhlcmU6CisjIGh0dHA6Ly93d3cuaTE4bmd1eS5jb20vdW5pY29kZS9sYW5ndWFnZS1pZGVudGlmaWVycy5odG1sCitMQU5HVUFHRV9DT0RFID0gJ2VuLXVzJworCitTSVRFX0lEID0gMQorCisjIElmIHlvdSBzZXQgdGhpcyB0byBGYWxzZSwgRGphbmdvIHdpbGwgbWFrZSBzb21lIG9wdGltaXphdGlvbnMgc28gYXMgbm90CisjIHRvIGxvYWQgdGhlIGludGVybmF0aW9uYWxpemF0aW9uIG1hY2hpbmVyeS4KK1VTRV9JMThOID0gVHJ1ZQorCisjIElmIHlvdSBzZXQgdGhpcyB0byBGYWxzZSwgRGphbmdvIHdpbGwgbm90IGZvcm1hdCBkYXRlcywgbnVtYmVycyBhbmQKKyMgY2FsZW5kYXJzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUuCitVU0VfTDEwTiA9IFRydWUKKworIyBJZiB5b3Ugc2V0IHRoaXMgdG8gRmFsc2UsIERqYW5nbyB3aWxsIG5vdCB1c2UgdGltZXpvbmUtYXdhcmUgZGF0ZXRpbWVzLgorVVNFX1RaID0gVHJ1ZQorCisjIEFic29sdXRlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2lsbCBob2xkIHVzZXItdXBsb2FkZWQgZmlsZXMuCisjIEV4YW1wbGU6ICIvdmFyL3d3dy9leGFtcGxlLmNvbS9tZWRpYS8iCitNRURJQV9ST09UID0gJycKKworIyBVUkwgdGhhdCBoYW5kbGVzIHRoZSBtZWRpYSBzZXJ2ZWQgZnJvbSBNRURJQV9ST09ULiBNYWtlIHN1cmUgdG8gdXNlIGEKKyMgdHJhaWxpbmcgc2xhc2guCisjIEV4YW1wbGVzOiAiaHR0cDovL2V4YW1wbGUuY29tL21lZGlhLyIsICJodHRwOi8vbWVkaWEuZXhhbXBsZS5jb20vIgorTUVESUFfVVJMID0gJycKKworIyBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgc3RhdGljIGZpbGVzIHNob3VsZCBiZSBjb2xsZWN0ZWQgdG8uCisjIERvbid0IHB1dCBhbnl0aGluZyBpbiB0aGlzIGRpcmVjdG9yeSB5b3Vyc2VsZjsgc3RvcmUgeW91ciBzdGF0aWMgZmlsZXMKKyMgaW4gYXBwcycgInN0YXRpYy8iIHN1YmRpcmVjdG9yaWVzIGFuZCBpbiBTVEFUSUNGSUxFU19ESVJTLgorIyBFeGFtcGxlOiAiL3Zhci93d3cvZXhhbXBsZS5jb20vc3RhdGljLyIKK1NUQVRJQ19ST09UID0gJycKKworIyBVUkwgcHJlZml4IGZvciBzdGF0aWMgZmlsZXMuCisjIEV4YW1wbGU6ICJodHRwOi8vZXhhbXBsZS5jb20vc3RhdGljLyIsICJodHRwOi8vc3RhdGljLmV4YW1wbGUuY29tLyIKK1NUQVRJQ19VUkwgPSAnL3N0YXRpYy8nCisKKyMgQWRkaXRpb25hbCBsb2NhdGlvbnMgb2Ygc3RhdGljIGZpbGVzCitTVEFUSUNGSUxFU19ESVJTID0gKAorICAgICMgUHV0IHN0cmluZ3MgaGVyZSwgbGlrZSAiL2hvbWUvaHRtbC9zdGF0aWMiIG9yICJDOi93d3cvZGphbmdvL3N0YXRpYyIuCisgICAgIyBBbHdheXMgdXNlIGZvcndhcmQgc2xhc2hlcywgZXZlbiBvbiBXaW5kb3dzLgorICAgICMgRG9uJ3QgZm9yZ2V0IHRvIHVzZSBhYnNvbHV0ZSBwYXRocywgbm90IHJlbGF0aXZlIHBhdGhzLgorKQorCisjIExpc3Qgb2YgZmluZGVyIGNsYXNzZXMgdGhhdCBrbm93IGhvdyB0byBmaW5kIHN0YXRpYyBmaWxlcyBpbgorIyB2YXJpb3VzIGxvY2F0aW9ucy4KK1NUQVRJQ0ZJTEVTX0ZJTkRFUlMgPSAoCisgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLmZpbmRlcnMuRmlsZVN5c3RlbUZpbmRlcicsCisgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLmZpbmRlcnMuQXBwRGlyZWN0b3JpZXNGaW5kZXInLAorIyAgICAnZGphbmdvLmNvbnRyaWIuc3RhdGljZmlsZXMuZmluZGVycy5EZWZhdWx0U3RvcmFnZUZpbmRlcicsCispCisKKyMgTWFrZSB0aGlzIHVuaXF1ZSwgYW5kIGRvbid0IHNoYXJlIGl0IHdpdGggYW55Ym9keS4KK1NFQ1JFVF9LRVkgPSAnTk9UX1NVSVRBQkxFX0ZPUl9IT1NURURfREVQTE9ZTUVOVCcKKworIyBMaXN0IG9mIGNhbGxhYmxlcyB0aGF0IGtub3cgaG93IHRvIGltcG9ydCB0ZW1wbGF0ZXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuCitURU1QTEFURV9MT0FERVJTID0gKAorICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5maWxlc3lzdGVtLkxvYWRlcicsCisgICAgJ2RqYW5nby50ZW1wbGF0ZS5sb2FkZXJzLmFwcF9kaXJlY3Rvcmllcy5Mb2FkZXInLAorIyAgICAgJ2RqYW5nby50ZW1wbGF0ZS5sb2FkZXJzLmVnZ3MuTG9hZGVyJywKKykKKworTUlERExFV0FSRV9DTEFTU0VTID0gKAorICAgICdkamFuZ28ubWlkZGxld2FyZS5jb21tb24uQ29tbW9uTWlkZGxld2FyZScsCisgICAgJ2RqYW5nby5jb250cmliLnNlc3Npb25zLm1pZGRsZXdhcmUuU2Vzc2lvbk1pZGRsZXdhcmUnLAorICAgICdkamFuZ28ubWlkZGxld2FyZS5jc3JmLkNzcmZWaWV3TWlkZGxld2FyZScsCisgICAgJ2RqYW5nby5jb250cmliLmF1dGgubWlkZGxld2FyZS5BdXRoZW50aWNhdGlvbk1pZGRsZXdhcmUnLAorICAgICdkamFuZ28uY29udHJpYi5tZXNzYWdlcy5taWRkbGV3YXJlLk1lc3NhZ2VNaWRkbGV3YXJlJywKKyAgICAjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIGZvciBzaW1wbGUgY2xpY2tqYWNraW5nIHByb3RlY3Rpb246CisgICAgIyAnZGphbmdvLm1pZGRsZXdhcmUuY2xpY2tqYWNraW5nLlhGcmFtZU9wdGlvbnNNaWRkbGV3YXJlJywKKykKKworQ0FDSEVTID0geworICAgICMgICAgICAgICdkZWZhdWx0JzogeworICAgICMgICAgICAgICAgICAnQkFDS0VORCc6ICdkamFuZ28uY29yZS5jYWNoZS5iYWNrZW5kcy5tZW1jYWNoZWQuTWVtY2FjaGVkQ2FjaGUnLAorICAgICMgICAgICAgICAgICAnTE9DQVRJT04nOiAnMTI3LjAuMC4xOjExMjExJywKKyAgICAjICAgICAgICB9LAorICAgICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgICAgICAgICdCQUNLRU5EJzogJ2RqYW5nby5jb3JlLmNhY2hlLmJhY2tlbmRzLmZpbGViYXNlZC5GaWxlQmFzZWRDYWNoZScsCisgICAgICAgICAgICAgICAnTE9DQVRJT04nOiAnL3RtcC9kamFuZ28tZGVmYXVsdC1jYWNoZScsCisgICAgICAgICAgICAgICAnVElNRU9VVCc6IDEsCisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisKK2Zyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSBhcyBETgorU0lURV9ST09UPUROKEROKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKQorCitpbXBvcnQgc3VicHJvY2VzcworVE9BU1RFUl9CUkFOQ0ggPSBzdWJwcm9jZXNzLlBvcGVuKCdnaXQgYnJhbmNoIHwgZ3JlcCAiXiogIiB8IHRyIC1kICIqICInLCBjd2QgPSBTSVRFX1JPT1QsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KK1RPQVNURVJfUkVWSVNJT04gPSBzdWJwcm9jZXNzLlBvcGVuKCdnaXQgcmV2LXBhcnNlIEhFQUQgJywgY3dkID0gU0lURV9ST09ULCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisKK1JPT1RfVVJMQ09ORiA9ICd0b2FzdGVybWFpbi51cmxzJworCisjIFB5dGhvbiBkb3R0ZWQgcGF0aCB0byB0aGUgV1NHSSBhcHBsaWNhdGlvbiB1c2VkIGJ5IERqYW5nbydzIHJ1bnNlcnZlci4KK1dTR0lfQVBQTElDQVRJT04gPSAndG9hc3Rlcm1haW4ud3NnaS5hcHBsaWNhdGlvbicKKworVEVNUExBVEVfRElSUyA9ICgKKyAgICAjIFB1dCBzdHJpbmdzIGhlcmUsIGxpa2UgIi9ob21lL2h0bWwvZGphbmdvX3RlbXBsYXRlcyIgb3IgIkM6L3d3dy9kamFuZ28vdGVtcGxhdGVzIi4KKyAgICAjIEFsd2F5cyB1c2UgZm9yd2FyZCBzbGFzaGVzLCBldmVuIG9uIFdpbmRvd3MuCisgICAgIyBEb24ndCBmb3JnZXQgdG8gdXNlIGFic29sdXRlIHBhdGhzLCBub3QgcmVsYXRpdmUgcGF0aHMuCispCisKK1RFTVBMQVRFX0NPTlRFWFRfUFJPQ0VTU09SUyA9ICgnZGphbmdvLmNvbnRyaWIuYXV0aC5jb250ZXh0X3Byb2Nlc3NvcnMuYXV0aCcsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5kZWJ1ZycsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5pMThuJywKKyAnZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLm1lZGlhJywKKyAnZGphbmdvLmNvcmUuY29udGV4dF9wcm9jZXNzb3JzLnN0YXRpYycsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy50eicsCisgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzLmNvbnRleHRfcHJvY2Vzc29ycy5tZXNzYWdlcycsCisgImRqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5yZXF1ZXN0IiwKKyAndG9hc3Rlcmd1aS52aWV3cy5tYW5hZ2VkY29udGV4dHByb2Nlc3NvcicsCisgKQorCitJTlNUQUxMRURfQVBQUyA9ICgKKyAgICAnZGphbmdvLmNvbnRyaWIuYXV0aCcsCisgICAgJ2RqYW5nby5jb250cmliLmNvbnRlbnR0eXBlcycsCisgICAgJ2RqYW5nby5jb250cmliLm1lc3NhZ2VzJywKKyAgICAnZGphbmdvLmNvbnRyaWIuc2Vzc2lvbnMnLAorICAgICdkamFuZ28uY29udHJpYi5hZG1pbicsCisgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzJywKKworICAgICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIGFkbWluIGRvY3VtZW50YXRpb246CisgICAgIyAnZGphbmdvLmNvbnRyaWIuYWRtaW5kb2NzJywKKyAgICAnZGphbmdvLmNvbnRyaWIuaHVtYW5pemUnLAorICAgICdibGRjb2xsZWN0b3InLAorICAgICd0b2FzdGVybWFpbicsCisgICAgJ3NvdXRoJywKKykKKworCitJTlRFUk5BTF9JUFMgPSBbJzEyNy4wLjAuMScsICcxOTIuMTY4LjIuMjgnXQorCisjIExvYWQgZGphbmdvLWZyZXNoIGlzIFRPQVNURVJfREVWRUwgaXMgc2V0LCBhbmQgdGhlIG1vZHVsZSBpcyBhdmFpbGFibGUKK0ZSRVNIX0VOQUJMRUQgPSBGYWxzZQoraWYgb3MuZW52aXJvbi5nZXQoJ1RPQVNURVJfREVWRUwnLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBmcmVzaAorICAgICAgICBNSURETEVXQVJFX0NMQVNTRVMgPSAoImZyZXNoLm1pZGRsZXdhcmUuRnJlc2hNaWRkbGV3YXJlIiwpICsgTUlERExFV0FSRV9DTEFTU0VTCisgICAgICAgIElOU1RBTExFRF9BUFBTID0gSU5TVEFMTEVEX0FQUFMgKyAoJ2ZyZXNoJywpCisgICAgICAgIEZSRVNIX0VOQUJMRUQgPSBUcnVlCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKK0RFQlVHX1BBTkVMX0VOQUJMRUQgPSBGYWxzZQoraWYgb3MuZW52aXJvbi5nZXQoJ1RPQVNURVJfREVWRUwnLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBkZWJ1Z190b29sYmFyLCBkZWJ1Z19wYW5lbAorICAgICAgICBNSURETEVXQVJFX0NMQVNTRVMgPSAoJ2RlYnVnX3BhbmVsLm1pZGRsZXdhcmUuRGVidWdQYW5lbE1pZGRsZXdhcmUnLCkgKyBNSURETEVXQVJFX0NMQVNTRVMKKyAgICAgICAgI01JRERMRVdBUkVfQ0xBU1NFUyA9IE1JRERMRVdBUkVfQ0xBU1NFUyArICgnZGVidWdfdG9vbGJhci5taWRkbGV3YXJlLkRlYnVnVG9vbGJhck1pZGRsZXdhcmUnLCkKKyAgICAgICAgSU5TVEFMTEVEX0FQUFMgPSBJTlNUQUxMRURfQVBQUyArICgnZGVidWdfdG9vbGJhcicsJ2RlYnVnX3BhbmVsJywpCisgICAgICAgIERFQlVHX1BBTkVMX0VOQUJMRUQgPSBUcnVlCisKKyAgICAgICAgIyB0aGlzIGNhY2hlIGJhY2tlbmQgd2lsbCBiZSB1c2VkIGJ5IGRqYW5nby1kZWJ1Zy1wYW5lbAorICAgICAgICBDQUNIRVNbJ2RlYnVnLXBhbmVsJ10gPSB7CisgICAgICAgICAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLmNvcmUuY2FjaGUuYmFja2VuZHMuZmlsZWJhc2VkLkZpbGVCYXNlZENhY2hlJywKKyAgICAgICAgICAgICAgICAnTE9DQVRJT04nOiAnL3Zhci90bXAvZGVidWctcGFuZWwtY2FjaGUnLAorICAgICAgICAgICAgICAgICdUSU1FT1VUJzogMzAwLAorICAgICAgICAgICAgICAgICdPUFRJT05TJzogeworICAgICAgICAgICAgICAgICAgICAnTUFYX0VOVFJJRVMnOiAyMDAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisKK1NPVVRIX1RFU1RTX01JR1JBVEUgPSBGYWxzZQorCisKKyMgV2UgYXV0b21hdGljYWxseSBkZXRlY3QgYW5kIGluc3RhbGwgYXBwbGljYXRpb25zIGhlcmUgaWYKKyMgdGhleSBoYXZlIGEgJ21vZGVscy5weScgb3IgJ3ZpZXdzLnB5JyBmaWxlCitpbXBvcnQgb3MKK2N1cnJlbnRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCitmb3IgdCBpbiBvcy53YWxrKG9zLnBhdGguZGlybmFtZShjdXJyZW50ZGlyKSk6CisgICAgbW9kdWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodFswXSkKKyAgICAjaWYgd2UgaGF2ZSBhIHZpcnR1YWxlbnYgc2tpcCBpdCB0byBhdm9pZCBpbmNvcnJlY3QgaW1wb3J0cworICAgIGlmIG9zLmVudmlyb24uaGFzX2tleSgnVklSVFVBTF9FTlYnKSBhbmQgb3MuZW52aXJvblsnVklSVFVBTF9FTlYnXSBpbiB0WzBdOgorICAgICAgICBjb250aW51ZQorCisgICAgaWYgKCJ2aWV3cy5weSIgaW4gdFsyXSBvciAibW9kZWxzLnB5IiBpbiB0WzJdKSBhbmQgbm90IG1vZHVsZW5hbWUgaW4gSU5TVEFMTEVEX0FQUFM6CisgICAgICAgIElOU1RBTExFRF9BUFBTID0gSU5TVEFMTEVEX0FQUFMgKyAobW9kdWxlbmFtZSwpCisKKyMgQSBzYW1wbGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLiBUaGUgb25seSB0YW5naWJsZSBsb2dnaW5nCisjIHBlcmZvcm1lZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgdG8gc2VuZCBhbiBlbWFpbCB0bworIyB0aGUgc2l0ZSBhZG1pbnMgb24gZXZlcnkgSFRUUCA1MDAgZXJyb3Igd2hlbiBERUJVRz1GYWxzZS4KKyMgU2VlIGh0dHA6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuL2Rldi90b3BpY3MvbG9nZ2luZyBmb3IKKyMgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byBjdXN0b21pemUgeW91ciBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCitMT0dHSU5HID0geworICAgICd2ZXJzaW9uJzogMSwKKyAgICAnZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzJzogRmFsc2UsCisgICAgJ2ZpbHRlcnMnOiB7CisgICAgICAgICdyZXF1aXJlX2RlYnVnX2ZhbHNlJzogeworICAgICAgICAgICAgJygpJzogJ2RqYW5nby51dGlscy5sb2cuUmVxdWlyZURlYnVnRmFsc2UnCisgICAgICAgIH0KKyAgICB9LAorICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAnZGF0ZXRpbWUnOiB7CisgICAgICAgICAgICAnZm9ybWF0JzogJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnCisgICAgICAgIH0KKyAgICB9LAorICAgICdoYW5kbGVycyc6IHsKKyAgICAgICAgJ21haWxfYWRtaW5zJzogeworICAgICAgICAgICAgJ2xldmVsJzogJ0VSUk9SJywKKyAgICAgICAgICAgICdmaWx0ZXJzJzogWydyZXF1aXJlX2RlYnVnX2ZhbHNlJ10sCisgICAgICAgICAgICAnY2xhc3MnOiAnZGphbmdvLnV0aWxzLmxvZy5BZG1pbkVtYWlsSGFuZGxlcicKKyAgICAgICAgfSwKKyAgICAgICAgJ2NvbnNvbGUnOiB7CisgICAgICAgICAgICAnbGV2ZWwnOiAnREVCVUcnLAorICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ2RhdGV0aW1lJywKKyAgICAgICAgfQorICAgIH0sCisgICAgJ2xvZ2dlcnMnOiB7CisgICAgICAgICd0b2FzdGVyJyA6IHsKKyAgICAgICAgICAgICdoYW5kbGVycyc6IFsnY29uc29sZSddLAorICAgICAgICAgICAgJ2xldmVsJzogJ0RFQlVHJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2RqYW5nby5yZXF1ZXN0JzogeworICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydjb25zb2xlJ10sCisgICAgICAgICAgICAnbGV2ZWwnOiAnV0FSTicsCisgICAgICAgICAgICAncHJvcGFnYXRlJzogVHJ1ZSwKKyAgICAgICAgfSwKKyAgICB9Cit9CisKK2lmIERFQlVHIGFuZCBTUUxfREVCVUc6CisgICAgTE9HR0lOR1snbG9nZ2VycyddWydkamFuZ28uZGIuYmFja2VuZHMnXSA9IHsKKyAgICAgICAgICAgICdsZXZlbCc6ICdERUJVRycsCisgICAgICAgICAgICAnaGFuZGxlcnMnOiBbJ2NvbnNvbGUnXSwKKyAgICAgICAgfQorCisKKyMgSWYgd2UncmUgdXNpbmcgc3FsaXRlLCB3ZSBuZWVkIHRvIHR3ZWFrIHRoZSBwZXJmb3JtYW5jZSBhIGJpdAorZnJvbSBkamFuZ28uZGIuYmFja2VuZHMuc2lnbmFscyBpbXBvcnQgY29ubmVjdGlvbl9jcmVhdGVkCitkZWYgYWN0aXZhdGVfc3luY2hyb25vdXNfb2ZmKHNlbmRlciwgY29ubmVjdGlvbiwgKiprd2FyZ3MpOgorICAgIGlmIGNvbm5lY3Rpb24udmVuZG9yID09ICdzcWxpdGUnOgorICAgICAgICBjdXJzb3IgPSBjb25uZWN0aW9uLmN1cnNvcigpCisgICAgICAgIGN1cnNvci5leGVjdXRlKCdQUkFHTUEgc3luY2hyb25vdXMgPSAwOycpCitjb25uZWN0aW9uX2NyZWF0ZWQuY29ubmVjdChhY3RpdmF0ZV9zeW5jaHJvbm91c19vZmYpCisjCisKKworY2xhc3MgSW52YWxpZFN0cmluZyhzdHIpOgorICAgIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgZnJvbSBkamFuZ28udGVtcGxhdGUuYmFzZSBpbXBvcnQgVGVtcGxhdGVTeW50YXhFcnJvcgorICAgICAgICByYWlzZSBUZW1wbGF0ZVN5bnRheEVycm9yKAorICAgICAgICAgICAgIlVuZGVmaW5lZCB2YXJpYWJsZSBvciB1bmtub3duIHZhbHVlIGZvcjogXCIlc1wiIiAlIG90aGVyKQorCitURU1QTEFURV9TVFJJTkdfSUZfSU5WQUxJRCA9IEludmFsaWRTdHJpbmcoIiVzIikKKworaW1wb3J0IHN5cworc3lzLnBhdGguYXBwZW5kKAorICAgIG9zLnBhdGguam9pbigKKyAgICBvcy5wYXRoLmpvaW4oCisgICAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpLAorICAgICAgICAgICAgImNvbnRyaWIiKSwKKyAgICAgICAgICAgICJkamFuZ28tYWdncmVnYXRlLWlmLW1hc3RlciIpCisgICAgKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3VybHMucHkgYi95b2N0by1wb2t5L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjE1ODhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3VybHMucHkKQEAgLTAsMCArMSw5MSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgcGF0dGVybnMsIGluY2x1ZGUsIHVybAorZnJvbSBkamFuZ28udmlld3MuZ2VuZXJpYyBpbXBvcnQgUmVkaXJlY3RWaWV3Citmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNhY2hlIGltcG9ydCBuZXZlcl9jYWNoZQorCitpbXBvcnQgbG9nZ2luZworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IHR3byBsaW5lcyB0byBlbmFibGUgdGhlIGFkbWluOgorZnJvbSBkamFuZ28uY29udHJpYiBpbXBvcnQgYWRtaW4KK2FkbWluLmF1dG9kaXNjb3ZlcigpCisKK3VybHBhdHRlcm5zID0gcGF0dGVybnMoJycsCisKKyAgICAjIEV4YW1wbGVzOgorICAgICMgdXJsKHInXnRvYXN0ZXIvJywgaW5jbHVkZSgndG9hc3Rlci5mb28udXJscycpKSwKKworICAgICMgVW5jb21tZW50IHRoZSBhZG1pbi9kb2MgbGluZSBiZWxvdyB0byBlbmFibGUgYWRtaW4gZG9jdW1lbnRhdGlvbjoKKyAgICAjIHVybChyJ15hZG1pbi9kb2MvJywgaW5jbHVkZSgnZGphbmdvLmNvbnRyaWIuYWRtaW5kb2NzLnVybHMnKSksCisKKworICAgICMgVGhpcyBpcyBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgZGVwcmVjYXRlZAorICAgICMgaW4gdGhlIGZ1dHVyZS4KKyAgICB1cmwocideb3JtL2V2ZW50ZmlsZSQnLCAnYmxkY29sbGVjdG9yLnZpZXdzLmV2ZW50ZmlsZScpLAorCisgICAgIyBpZiBubyBhcHBsaWNhdGlvbiBpcyBzZWxlY3RlZCwgd2UgaGF2ZSB0aGUgbWFnaWMgdG9hc3Rlcmd1aSBhcHAgaGVyZQorICAgIHVybChyJ14kJywgbmV2ZXJfY2FjaGUoUmVkaXJlY3RWaWV3LmFzX3ZpZXcodXJsPScvdG9hc3Rlcmd1aS8nKSkpLAorKQorCitpbXBvcnQgdG9hc3Rlcm1haW4uc2V0dGluZ3MKKworaWYgdG9hc3Rlcm1haW4uc2V0dGluZ3MuRlJFU0hfRU5BQkxFRDoKKyAgICB1cmxwYXR0ZXJucy5pbnNlcnQoMSwgdXJsKHInJywgaW5jbHVkZSgnZnJlc2gudXJscycpKSkKKyAgICAjbG9nZ2VyLmluZm8oIkVuYWJsZWQgZGphbmdvLWZyZXNoIGV4dGVuc2lvbiIpCisKK2lmIHRvYXN0ZXJtYWluLnNldHRpbmdzLkRFQlVHX1BBTkVMX0VOQUJMRUQ6CisgICAgaW1wb3J0IGRlYnVnX3Rvb2xiYXIKKyAgICB1cmxwYXR0ZXJucy5pbnNlcnQoMSwgdXJsKHInJywgaW5jbHVkZShkZWJ1Z190b29sYmFyLnVybHMpKSkKKyAgICAjbG9nZ2VyLmluZm8oIkVuYWJsZWQgZGphbmdvX3Rvb2xiYXIgZXh0ZW5zaW9uIikKKworCitpZiB0b2FzdGVybWFpbi5zZXR0aW5ncy5NQU5BR0VEOgorICAgIHVybHBhdHRlcm5zID0gWworICAgICAgICAjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSB0aGUgYWRtaW46CisgICAgICAgIHVybChyJ15hZG1pbi8nLCBpbmNsdWRlKGFkbWluLnNpdGUudXJscykpLAorICAgIF0gKyB1cmxwYXR0ZXJucworIyBBdXRvbWF0aWNhbGx5IGRpc2NvdmVyIHVybHMucHkgaW4gdmFyaW91cyBhcHBzLCBiZXNpZGUgb3VyIG93bgorIyBhbmQgbWFwIG1vZHVsZSBkaXJlY3RvcmllcyB0byB0aGUgcGF0dGVybnMKKworaW1wb3J0IG9zCitjdXJyZW50ZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorZm9yIHQgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoY3VycmVudGRpcikpOgorICAgICNpZiB3ZSBoYXZlIGEgdmlydHVhbGVudiBza2lwIGl0IHRvIGF2b2lkIGluY29ycmVjdCBpbXBvcnRzCisgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdWSVJUVUFMX0VOVicpIGFuZCBvcy5lbnZpcm9uWydWSVJUVUFMX0VOViddIGluIHRbMF06CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiAidXJscy5weSIgaW4gdFsyXSBhbmQgdFswXSAhPSBjdXJyZW50ZGlyOgorICAgICAgICBtb2R1bGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh0WzBdKQorICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIHRoaXMgbW9kdWxlIG5hbWUgaW4KKyAgICAgICAgY29uZmxpY3QgPSBGYWxzZQorICAgICAgICBmb3IgcCBpbiB1cmxwYXR0ZXJuczoKKyAgICAgICAgICAgIGlmIHAucmVnZXgucGF0dGVybiA9PSAnXicgKyBtb2R1bGVuYW1lICsgJy8nOgorICAgICAgICAgICAgICAgIGNvbmZsaWN0ID0gVHJ1ZQorICAgICAgICBpZiBub3QgY29uZmxpY3Q6CisgICAgICAgICAgICB1cmxwYXR0ZXJucy5pbnNlcnQoMCwgdXJsKHInXicgKyBtb2R1bGVuYW1lICsgJy8nLCBpbmNsdWRlICggbW9kdWxlbmFtZSArICcudXJscycpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJNb2R1bGUgXCclc1wnIGhhcyBhIHJlZ2V4cCBjb25mbGljdCwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdXJscGF0dGVybnMiICUgbW9kdWxlbmFtZSkKKworZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKKyNsb2dnZXIuZGVidWcoInVybHBhdHRlcm5zIGxpc3QgJXMiLCBwZm9ybWF0KHVybHBhdHRlcm5zKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5IGIveW9jdG8tcG9reS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYjMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CkBAIC0wLDAgKzEsMzUgQEAKKyIiIgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKK1dTR0kgY29uZmlnIGZvciBUb2FzdGVyIHByb2plY3QuCisKK1RoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBXU0dJIGFwcGxpY2F0aW9uIHVzZWQgYnkgRGphbmdvJ3MgZGV2ZWxvcG1lbnQgc2VydmVyCithbmQgYW55IHByb2R1Y3Rpb24gV1NHSSBkZXBsb3ltZW50cy4gSXQgc2hvdWxkIGV4cG9zZSBhIG1vZHVsZS1sZXZlbCB2YXJpYWJsZQorbmFtZWQgYGBhcHBsaWNhdGlvbmBgLiBEamFuZ28ncyBgYHJ1bnNlcnZlcmBgIGFuZCBgYHJ1bmZjZ2lgYCBjb21tYW5kcyBkaXNjb3ZlcgordGhpcyBhcHBsaWNhdGlvbiB2aWEgdGhlIGBgV1NHSV9BUFBMSUNBVElPTmBgIHNldHRpbmcuCisKK1VzdWFsbHkgeW91IHdpbGwgaGF2ZSB0aGUgc3RhbmRhcmQgRGphbmdvIFdTR0kgYXBwbGljYXRpb24gaGVyZSwgYnV0IGl0IGFsc28KK21pZ2h0IG1ha2Ugc2Vuc2UgdG8gcmVwbGFjZSB0aGUgd2hvbGUgRGphbmdvIFdTR0kgYXBwbGljYXRpb24gd2l0aCBhIGN1c3RvbSBvbmUKK3RoYXQgbGF0ZXIgZGVsZWdhdGVzIHRvIHRoZSBEamFuZ28gb25lLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGludHJvZHVjZSBXU0dJCittaWRkbGV3YXJlIGhlcmUsIG9yIGNvbWJpbmUgYSBEamFuZ28gYXBwbGljYXRpb24gd2l0aCBhbiBhcHBsaWNhdGlvbiBvZiBhbm90aGVyCitmcmFtZXdvcmsuCisKKyIiIgoraW1wb3J0IG9zCisKKyMgV2UgZGVmZXIgdG8gYSBESkFOR09fU0VUVElOR1NfTU9EVUxFIGFscmVhZHkgaW4gdGhlIGVudmlyb25tZW50LiBUaGlzIGJyZWFrcworIyBpZiBydW5uaW5nIG11bHRpcGxlIHNpdGVzIGluIHRoZSBzYW1lIG1vZF93c2dpIHByb2Nlc3MuIFRvIGZpeCB0aGlzLCB1c2UKKyMgbW9kX3dzZ2kgZGFlbW9uIG1vZGUgd2l0aCBlYWNoIHNpdGUgaW4gaXRzIG93biBkYWVtb24gcHJvY2Vzcywgb3IgdXNlCisjIG9zLmVudmlyb25bIkRKQU5HT19TRVRUSU5HU19NT0RVTEUiXSA9ICJUb2FzdGVyLnNldHRpbmdzIgorb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworIyBUaGlzIGFwcGxpY2F0aW9uIG9iamVjdCBpcyB1c2VkIGJ5IGFueSBXU0dJIHNlcnZlciBjb25maWd1cmVkIHRvIHVzZSB0aGlzCisjIGZpbGUuIFRoaXMgaW5jbHVkZXMgRGphbmdvJ3MgZGV2ZWxvcG1lbnQgc2VydmVyLCBpZiB0aGUgV1NHSV9BUFBMSUNBVElPTgorIyBzZXR0aW5nIHBvaW50cyBoZXJlLgorZnJvbSBkamFuZ28uY29yZS53c2dpIGltcG9ydCBnZXRfd3NnaV9hcHBsaWNhdGlvbgorYXBwbGljYXRpb24gPSBnZXRfd3NnaV9hcHBsaWNhdGlvbigpCisKKyMgQXBwbHkgV1NHSSBtaWRkbGV3YXJlIGhlcmUuCisjIGZyb20gaGVsbG93b3JsZC53c2dpIGltcG9ydCBIZWxsb1dvcmxkQXBwbGljYXRpb24KKyMgYXBwbGljYXRpb24gPSBIZWxsb1dvcmxkQXBwbGljYXRpb24oYXBwbGljYXRpb24pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2JpdGJha2UvdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0IGIveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGEyMjIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dApAQCAtMCwwICsxLDYgQEAKK0RqYW5nbz09MS42CitTb3V0aD09MC44LjQKK2FyZ3BhcnNlPT0xLjIuMQord3NnaXJlZj09MC4xLjIKK2ZpbGVtYWdpYz09MS42CitiZWF1dGlmdWxzb3VwND49NC40LjAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTk3YTQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNDU4IEBACisjIFRoaXMgaXMgYSBzaW5nbGUgTWFrZWZpbGUgdG8gaGFuZGxlIGFsbCBnZW5lcmF0ZWQgWW9jdG8gUHJvamVjdCBkb2N1bWVudHMsCisjIHdoaWNoIGluY2x1ZGVzIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGFuZCB0aGUgVG9hc3RlciBVc2VyIE1hbnVhbC4KKyMgVGhlIE1ha2VmaWxlIG5lZWRzIHRvIGxpdmUgaW4gdGhlIGRvY3VtZW50cyBkaXJlY3RvcnkgYW5kIGFsbCBmaWd1cmVzIHVzZWQKKyMgaW4gYW55IG1hbnVhbHMgbXVzdCBiZSAuUE5HIGZpbGVzIGFuZCBsaXZlIGluIHRoZSBpbmRpdmlkdWFsIGJvb2sncyBmaWd1cmVzCisjIGRpcmVjdG9yeSBhcyB3ZWxsIGFzIGluIHRoZSBmaWd1cmVzIGRpcmVjdG9yeSBmb3IgdGhlIG1lZ2EtbWFudWFsLgorIworIyBTb21lIG1hbnVhbHMgYXJlIGF2YWlsYWJsZSBhcyBsaW5rZWQgaGVscCB0aHJvdWdoIHRoZSBFY2xpcHNlIGRldmVsb3BtZW50CisjIHN5c3RlbS4gIFRoZXNlIG1hbnVhbHMgYWxzbyBpbmNsdWRlIGFuICJlY2xpcHNlIiBzdWItZGlyZWN0b3J5IGFzIHBhcnQgb2YKKyMgdGhlIG1ha2UgcHJvY2Vzcy4KKyMKKyMgTm90ZSB0aGF0IHRoZSBmaWd1cmVzIGZvciB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyMgZGlmZmVyIGRlcGVuZGluZyBvbiB0aGUgQlJBTkNIIGJlaW5nIGJ1aWx0LgorIworIyBUaGUgTWFrZWZpbGUgaGFzIHRoZXNlIHRhcmdldHM6CisjICAgIGFsbDogICAgICAgSWYgeW91IGxlYXZlIG9mZiB0aGUgdGFyZ2V0IHRoZW4gImFsbCIgaXMgaW1wbGllZC4KKyMgICAgICAgICAgICAgICBZb3Ugd2lsbCBnZW5lcmF0ZSBIVE1MLCBlY2xpcHNlIGhlbHAgKGlmIGFwcGxpY2FibGUpLAorIyAgICAgICAgICAgICAgIGFuZCBhIHRhcmJhbGwgb2YgZmlsZXMuCisjCisjICAgIHBkZjoJZ2VuZXJhdGVzIGEgUERGIHZlcnNpb24gb2YgYSBtYW51YWwuICBOb3QgdmFsaWQgZm9yIHRoZQorIwkJUXVpY2sgU3RhcnQgb3IgdGhlIG1lZ2EtbWFudWFsIChzaW5nbGUsIGxhcmdlIEhUTUwgZmlsZQorIwkJY29tcHJpc2VkIG9mIGFsbCBZb2N0byBQcm9qZWN0IG1hbnVhbHMpLgorIyAgICBodG1sOglnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGEgbWFudWFsLgorIyAgICBlY2xpcHNlOglnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGEgbWFudWFsIHRoYXQgY2FuIGJlIHVzZWQgYXMKKyMJCWVjbGlwc2UgaGVscCAoaW5jbHVkaW5nIG5lY2Vzc2FyeSBtZXRhZGF0YSBmaWxlcykuCisjICAgIHRhcmJhbGw6CWNyZWF0ZXMgYSB0YXJiYWxsIGZvciB0aGUgZG9jIGZpbGVzLgorIyAgICB2YWxpZGF0ZToJdmFsaWRhdGVzCisjICAgIHB1Ymxpc2g6CXB1c2hlcyBnZW5lcmF0ZWQgZmlsZXMgdG8gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZQorIyAgICBjbGVhbjoJcmVtb3ZlcyBmaWxlcworIworIyBUaGUgTWFrZWZpbGUgY2FuIGdlbmVyYXRlIGFuIEhUTUwgYW5kIFBERiB2ZXJzaW9uIG9mIGV2ZXJ5IGRvY3VtZW50IGV4Y2VwdCB0aGUKKyMgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBhbmQgdGhlIHNpbmdsZSwgSFRNTCBtZWdhLW1hbnVhbCwgd2hpY2ggaXMgY29tcHJpc2VkCisjIG9mIGFsbCB0aGUgaW5kaXZpZHVhbCBZb2N0byBQcm9qZWN0IG1hbnVhbHMuICBZb3UgY2FuIGdlbmVyYXRlIHRoZXNlIHR3byBtYW51YWxzCisjIGluIEhUTUwgZm9ybSBvbmx5LiAgVGhlIHZhcmlhYmxlIERPQyBpbmRpY2F0ZXMgdGhlIGZvbGRlciBuYW1lIGZvciBhIGdpdmVuIG1hbnVhbC4KKyMgVGhlIHZhcmlhYmxlIFZFUiByZXByZXNlbnRzIHRoZSBkaXN0cm8gdmVyc2lvbiBvZiB0aGUgWW9jdG8gUmVsZWFzZSBmb3Igd2hpY2ggdGhlCisjIG1hbnVhbHMgYXJlIGJlaW5nIGdlbmVyYXRlZC4gIFRoZSB2YXJpYWJsZSBCUkFOQ0ggaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUKKyMgYnJhbmNoIChlZGlzb24gb3IgZGVuemlsKSBhbmQgaXMgdXNlZCBvbmx5IHdoZW4gRE9DPWRldi1tYW51YWwgb3IKKyMgRE9DPW1lZ2EtbWFudWFsLiAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgQlJBTkNILCB0aGUgZGVmYXVsdCBicmFuY2ggdXNlZAorIyB3aWxsIGJlIGZvciB0aGUgbGF0ZXN0IFlvY3RvIFByb2plY3QgcmVsZWFzZS4gIElmIHlvdSBidWlsZCBmb3IgZWl0aGVyCisjIGVkaXNvbiBvciBkZW56aWwsIHlvdSBtdXN0IHVzZSBCUkFOQ0guIFlvdSBkbyBub3QgbmVlZCB0byB1c2UgQlJBTkNIIGZvcgorIyBhbnkgcmVsZWFzZSBiZXlvbmQgZGVuemlsLgorIworIyBUbyBidWlsZCBhIG1hbnVhbCwgeW91IG11c3QgaW52b2tlIE1ha2VmaWxlIHdpdGggdGhlIERPQyBhcmd1bWVudC4gIElmIHlvdQorIyBhcmUgZ29pbmcgdG8gcHVibGlzaCB0aGUgbWFudWFsLCB0aGVuIHlvdSBtdXN0IGludm9rZSBNYWtlZmlsZSB3aXRoIGJvdGggdGhlCisjIERPQyBhbmQgdGhlIFZFUiBhcmd1bWVudC4gIEZ1cnRoZXJtb3JlLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9yIHB1Ymxpc2hpbmcKKyMgdGhlIGVkaXNvbiBvciBkZW56aWwgdmVyc2lvbnMgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIG9yCisjIHRoZSBtZWdhLW1hbnVhbCwgeW91IG11c3QgYWxzbyB1c2UgdGhlIEJSQU5DSCBhcmd1bWVudC4KKyMKKyMgRXhhbXBsZXM6CisjCisjICAgICBtYWtlIERPQz1ic3AtZ3VpZGUKKyMgICAgIG1ha2UgaHRtbCBET0M9eW9jdG8tcHJvamVjdC1xcworIyAgICAgbWFrZSBwZGYgRE9DPXJlZi1tYW51YWwKKyMgICAgIG1ha2UgRE9DPWRldi1tYW51YWwgQlJBTkNIPWVkaXNvbgorIyAgICAgbWFrZSBET0M9bWVnYS1tYW51YWwgQlJBTkNIPWRlbnppbAorIworIyBUaGUgZmlyc3QgZXhhbXBsZSBnZW5lcmF0ZXMgdGhlIEhUTUwgYW5kIEVjbGlwc2UgaGVscCB2ZXJzaW9ucyBvZiB0aGUgQlNQIEd1aWRlLgorIyBUaGUgc2Vjb25kIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MIHZlcnNpb24gb25seSBvZiB0aGUgUXVpY2sgU3RhcnQuICBOb3RlCisjIHRoYXQgdGhlIFF1aWNrIFN0YXJ0IG9ubHkgaGFzIGFuIEhUTUwgdmVyc2lvbiBhdmFpbGFibGUuICBTbywgdGhlCisjICdtYWtlIERPQz15b2N0by1wcm9qZWN0LXFzJyBjb21tYW5kIHdvdWxkIGJlIGVxdWl2YWxlbnQuIFRoZSB0aGlyZCBleGFtcGxlCisjIGdlbmVyYXRlcyBqdXN0IHRoZSBQREYgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorIyBUaGUgZm91cnRoIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MICdlZGlzb24nIHZlcnNpb24gYW5kIChpZiBhdmFpbGFibGUpCisjIHRoZSBFY2xpcHNlIGhlbHAgdmVyc2lvbiBvZiB0aGUgWVAgRGV2ZWxvcG1lbnQgTWFudWFsLiAgVGhlIGxhc3QgZXhhbXBsZQorIyBnZW5lcmF0ZXMgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGUgbWVnYS1tYW51YWwgYW5kIHVzZXMgdGhlICdkZW56aWwnCisjIGJyYW5jaCB3aGVuIGNob29zaW5nIGZpZ3VyZXMgZm9yIHRoZSB0YXJiYWxsIG9mIGZpZ3VyZXMuICBBbnkgZXhhbXBsZSB0aGF0IGRvZXMKKyMgbm90IHVzZSB0aGUgQlJBTkNIIGFyZ3VtZW50IGJ1aWxkcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgc2V0LgorIworIyBUaGUgcHVibGlzaCB0YXJnZXQgcHVzaGVzIHRoZSBnZW5lcmF0ZWQgbWFudWFscyB0byB0aGUgWW9jdG8gUHJvamVjdAorIyB3ZWJzaXRlLiAgVW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIgb24gdGhlIFlQIHRlYW0sIHlvdSB3aWxsIG5vdCBzdWNjZWVkIGluCisjIHB1c2hpbmcgbWFudWFscyB0byB0aGlzIHNlcnZlci4gIEFsbCBmaWxlcyBuZWVkZWQgZm9yIHRoZSBtYW51YWwncyBIVE1MIGZvcm0gYXJlCisjIHB1c2hlZCBhcyB3ZWxsIGFzIGFwcGxpY2FibGUgRWNsaXBzZSB2ZXJzaW9ucy4KKyMKKyMgRXhhbXBsZXM6CisjCisjICAgIG1ha2UgcHVibGlzaCBET0M9YnNwLWd1aWRlIFZFUj0xLjcKKyMgICAgbWFrZSBwdWJsaXNoIERPQz1hZHQtbWFudWFsIFZFUj0xLjYKKyMgICAgbWFrZSBwdWJsaXNoIERPQz1kZXYtbWFudWFsIFZFUj0xLjEuMSBCUkFOQ0g9ZWRpc29uCisjICAgIG1ha2UgcHVibGlzaCBET0M9ZGV2LW1hbnVhbCBWRVI9MS4yIEJSQU5DSD1kZW56aWwKKyMKKyMgVGhlIGZpcnN0IGV4YW1wbGUgcHVibGlzaGVzIHRoZSAxLjcgdmVyc2lvbiBvZiBib3RoIHRoZSBQREYgYW5kIEhUTUwgdmVyc2lvbnMgb2YKKyMgdGhlIEJTUCBHdWlkZS4gIFRoZSBzZWNvbmQgZXhhbXBsZSBwdWJsaXNoZXMgdGhlIDEuNiB2ZXJzaW9uIG9mIGJvdGggdGhlIFBERiBhbmQKKyMgSFRNTCB2ZXJzaW9ucyBvZiB0aGUgQURUIE1hbnVhbC4gVGhlIHRoaXJkIGV4YW1wbGUgcHVibGlzaGVzIHRoZSAxLjEuMSB2ZXJzaW9uIG9mCisjIHRoZSBQREYgYW5kIEhUTUwgWVAgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciB0aGUgJ2VkaXNvbicgYnJhbmNoLiAgVGhlIGZvdXJ0aCBleGFtcGxlCisjIHB1Ymxpc2hlcyB0aGUgMS4yIHZlcnNpb24gb2YgdGhlIFBERiBhbmQgSFRNTCBZUCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIHRoZQorIyAnZGVuemlsJyBicmFuY2guCisjCisKK2lmZXEgKCQoRE9DKSxic3AtZ3VpZGUpCitYU0xUT1BUUyA9IC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIGVjbGlwc2UgdGFyYmFsbAorVEFSRklMRVMgPSBic3Atc3R5bGUuY3NzIGJzcC1ndWlkZS5odG1sIGZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxkZXYtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKKyMKKyMgTm90ZSB0aGF0IHRoZSB0YXJmaWxlIG1pZ2h0IHByb2R1Y2UgdGhlICJDYW5ub3Qgc3RhdDogTm8gc3VjaCBmaWxlIG9yCisjIGRpcmVjdG9yeSIgZXJyb3IgbWVzc2FnZSBmb3IgLlBORyBmaWxlcyB0aGF0IGFyZSBub3QgcHJlc2VudCB3aGVuIGJ1aWxkaW5nCisjIGEgcGFydGljdWxhciBicmFuY2guICBUaGUgbGlzdCBvZiBmaWxlcyBpcyBhbGwtaW5jbHVzaXZlIGZvciBhbGwgYnJhbmNoZXMuCisjIE5vdGUsIGlmIHlvdSBkb24ndCBwcm92aWRlIGEgQlJBTkNIIG9wdGlvbiwgaXQgZGVmYXVsdHMgdG8gdGhlIGxhdGVzdCBzdHVmZi4KKyMgVGhpcyB3b3VsZCBiZSBhcHByb3ByaWF0ZSBmb3IgIm1hc3RlciIgYnJhbmNoLgorIworCisJaWZlcSAoJChCUkFOQ0gpLGVkaXNvbikKK1RBUkZJTEVTID0gZGV2LXN0eWxlLmNzcyBkZXYtbWFudWFsLmh0bWwgXAorICAgICAgICAgICBmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1leGFtcGxlLXJlcG9zLWVkaXNvbi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZWRpc29uLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvd2lwLnBuZworCWVsc2UgaWZlcSAoJChCUkFOQ0gpLGRlbnppbCkKK1RBUkZJTEVTID0gZGV2LXN0eWxlLmNzcyBkZXYtbWFudWFsLmh0bWwgXAorICAgICAgICAgICBmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1leGFtcGxlLXJlcG9zLWRlbnppbC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZGVuemlsLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvd2lwLnBuZworICAgICAgICBlbHNlCitUQVJGSUxFUyA9IGRldi1zdHlsZS5jc3MgZGV2LW1hbnVhbC5odG1sIFwKKyAgICAgICAgICAgZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorCWVuZGlmCisKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSx5b2N0by1wcm9qZWN0LXFzKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0geW9jdG8tcHJvamVjdC1xcy5odG1sIHFzLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxtZWdhLW1hbnVhbCkKK1hTTFRPUFRTID0gLS1zdHJpbmdwYXJhbSBodG1sLnN0eWxlc2hlZXQgbWVnYS1zdHlsZS5jc3MgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5hdXRvbGFiZWwgMSBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIDEgXAorICAgICAgICAgICAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCB0YXJiYWxsCisKKwlpZmVxICgkKEJSQU5DSCksZWRpc29uKQorVEFSRklMRVMgPSBtZWdhLW1hbnVhbC5odG1sIG1lZ2Etc3R5bGUuY3NzIGZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nIFwKKyAgICAgICAgZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgIFwKKwlmaWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBcCisJZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBcCisJZmlndXJlcy9hZHQtdGl0bGUucG5nIGZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgXAorCWZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgXAorICAgICAgICBmaWd1cmVzL2Rldi10aXRsZS5wbmcgZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIGZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBcCisJZmlndXJlcy9rZXJuZWwtZXhhbXBsZS1yZXBvcy1lZGlzb24ucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMy1lZGlzb24ucG5nIFwKKwlmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorCWZpZ3VyZXMvd2lwLnBuZworCWVsc2UgaWZlcSAoJChCUkFOQ0gpLGRlbnppbCkKK1RBUkZJTEVTID0gbWVnYS1tYW51YWwuaHRtbCBtZWdhLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nICBcCisJZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorCWZpZ3VyZXMvcG9reS10aXRsZS5wbmcgXAorCWZpZ3VyZXMvYWR0LXRpdGxlLnBuZyBmaWd1cmVzL2JzcC10aXRsZS5wbmcgXAorCWZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKwlmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorCWZpZ3VyZXMva2VybmVsLWV4YW1wbGUtcmVwb3MtZGVuemlsLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZGVuemlsLnBuZyBcCisJZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIGZpZ3VyZXMveXAtZG93bmxvYWQucG5nIFwKKwlmaWd1cmVzL3dpcC5wbmcKKyAgICAgICAgZWxzZQorVEFSRklMRVMgPSBtZWdhLW1hbnVhbC5odG1sIG1lZ2Etc3R5bGUuY3NzIGZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nIFwKKyAgICAgICAgZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgIFwKKwlmaWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBcCisJZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBmaWd1cmVzL2J1aWxkaGlzdG9yeS5wbmcgXAorICAgICAgICBmaWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nIFwKKwlmaWd1cmVzL2FkdC10aXRsZS5wbmcgZmlndXJlcy9ic3AtdGl0bGUucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgXAorCWZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgXAorICAgICAgICBmaWd1cmVzL2Rldi10aXRsZS5wbmcgXAorCWZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgXAorICAgICAgICBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgXAorCWZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcgZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIFwKKyAgICAgICAgZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyBcCisgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBcCisgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgXAorICAgICAgICBmaWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcgZmlndXJlcy9vcHJvZmlsZXVpLWNvcHktdG8tdXNlci5wbmcgXAorICAgICAgICBmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXByb2JlLWRvX2ZvcmstcHJvZmlsZS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nIFwKKyAgICAgICAgZmlndXJlcy9weWJvb3RjaGFydGd1aS1saW51eC15b2N0by5wbmcgXAorICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcgXAorICAgICAgICBmaWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgXAorICAgICAgICBmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBcCisJZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nIGZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBmaWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nIFwKKyAgICAgICAgZmlndXJlcy9sYXllci1pbnB1dC5wbmcgZmlndXJlcy9pbWFnZXMucG5nIGZpZ3VyZXMvc2RrLnBuZyBcCisJZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nIGZpZ3VyZXMvcGF0Y2hpbmcucG5nIFwKKyAgICAgICAgZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgXAorCWZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgXAorCWZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBcCisJZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBmaWd1cmVzL21lZ2EtdGl0bGUucG5nIFwKKwlmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIGZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIFwKKwlmaWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZworCWVuZGlmCisKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxyZWYtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gcmVmLW1hbnVhbC5odG1sIHJlZi1zdHlsZS5jc3MgZmlndXJlcy9wb2t5LXRpdGxlLnBuZyBcCisJZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcgZWNsaXBzZSBcCisgICAgICAgIGZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcgZmlndXJlcy9sYXllci1pbnB1dC5wbmcgXAorCWZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcgZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nIFwKKwlmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcgZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nIFwKKwlmaWd1cmVzL2ltYWdlcy5wbmcgZmlndXJlcy9zZGsucG5nIGZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBcCisJZmlndXJlcy9wYXRjaGluZy5wbmcgZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgXAorCWZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyBmaWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nIFwKKwlmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyBmaWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZworTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKKworaWZlcSAoJChET0MpLGFkdC1tYW51YWwpCitYU0xUT1BUUyA9IC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIGVjbGlwc2UgdGFyYmFsbAorVEFSRklMRVMgPSBhZHQtbWFudWFsLmh0bWwgYWR0LXN0eWxlLmNzcyBmaWd1cmVzL2FkdC10aXRsZS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCitpZmVxICgkKERPQykscHJvZmlsZS1tYW51YWwpCitYU0xUT1BUUyA9IC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIGVjbGlwc2UgdGFyYmFsbAorVEFSRklMRVMgPSBwcm9maWxlLW1hbnVhbC5odG1sIHByb2ZpbGUtbWFudWFsLXN0eWxlLmNzcyBcCisgICAgICAgICAgIGZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcgZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcgZmlndXJlcy9vcHJvZmlsZXVpLWNvcHktdG8tdXNlci5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXByb2JlLWRvX2ZvcmstcHJvZmlsZS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9weWJvb3RjaGFydGd1aS1saW51eC15b2N0by5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSxrZXJuZWwtZGV2KQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0ga2VybmVsLWRldi5odG1sIGtlcm5lbC1kZXYtc3R5bGUuY3NzIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgXAorICAgICAgICAgICBlY2xpcHNlCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworZW5kaWYKKworaWZlcSAoJChET0MpLHRvYXN0ZXItbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCB0YXJiYWxsCitUQVJGSUxFUyA9IHRvYXN0ZXItbWFudWFsLmh0bWwgdG9hc3Rlci1tYW51YWwtc3R5bGUuY3NzIFwKKwkgICBmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIGZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIFwKKwkgICBmaWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZworTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvJChET0MpLnBkZgorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKKworIyMKKyMgVGhlc2UgVVJJIHNob3VsZCBiZSByZXdyaXR0ZW4gYnkgeW91ciBkaXN0cmlidXRpb24ncyB4bWwgY2F0YWxvZyB0bworIyBtYXRjaCB5b3VyIGxvY2FsbHkgaW5zdGFsbGVkIFhTTCBzdHlsZXNoZWV0cy4KK1hTTF9CQVNFX1VSSSAgPSBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xCitYU0xfWEhUTUxfVVJJID0gJChYU0xfQkFTRV9VUkkpL3hodG1sL2RvY2Jvb2sueHNsCisKK2FsbDogJChBTExQUkVRKQorCitwZGY6CitpZmVxICgkKERPQykseW9jdG8tcHJvamVjdC1xcykKKwlAZWNobyAiICIKKwlAZWNobyAiRVJST1I6IFlvdSBjYW5ub3QgZ2VuZXJhdGUgYSB5b2N0by1wcm9qZWN0LXFzIFBERiBmaWxlLiIKKwlAZWNobyAiICIKKworZWxzZSBpZmVxICgkKERPQyksbWVnYS1tYW51YWwpCisJQGVjaG8gIiAiCisJQGVjaG8gIkVSUk9SOiBZb3UgY2Fubm90IGdlbmVyYXRlIGEgbWVnYS1tYW51YWwgUERGIGZpbGUuIgorCUBlY2hvICIgIgorCitlbHNlCisKKwljZCAkKERPQyk7IC4uL3Rvb2xzL3Bva3ktZG9jYm9vay10by1wZGYgJChET0MpLnhtbCAuLi90ZW1wbGF0ZTsgY2QgLi4KK2VuZGlmCisKK2h0bWw6CitpZmVxICgkKERPQyksbWVnYS1tYW51YWwpCisjICAgICAgIFNlZSBodHRwOi8vd3d3LnNhZ2VoaWxsLm5ldC9kb2Nib29reHNsL0h0bWxPdXRwdXQuaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBCdWlsZGluZyAiJChET0MpCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyB4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkKERPQykuaHRtbCAkKERPQyktY3VzdG9taXphdGlvbi54c2wgJChET0MpLnhtbDsgY2QgLi4KKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogVXNpbmcgbWVnYS1tYW51YWwuc2VkIHRvIHByb2Nlc3MgZXh0ZXJuYWwgbGlua3MiCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyBzZWQgLWYgLi4vdG9vbHMvbWVnYS1tYW51YWwuc2VkIDwgbWVnYS1tYW51YWwuaHRtbCA+IG1lZ2Etb3V0cHV0Lmh0bWw7IGNkIC4uCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIENsZWFuaW5nIHVwIHRyYW5zaWVudCBmaWxlIG1lZ2Etb3V0cHV0Lmh0bWwiCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyBybSBtZWdhLW1hbnVhbC5odG1sOyBtdiBtZWdhLW91dHB1dC5odG1sIG1lZ2EtbWFudWFsLmh0bWw7IGNkIC4uCitlbHNlCisjICAgICAgIFNlZSBodHRwOi8vd3d3LnNhZ2VoaWxsLm5ldC9kb2Nib29reHNsL0h0bWxPdXRwdXQuaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBCdWlsZGluZyAiJChET0MpCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyB4c2x0cHJvYyAkKFhTTFRPUFRTKSAtbyAkKERPQykuaHRtbCAkKERPQyktY3VzdG9taXphdGlvbi54c2wgJChET0MpLnhtbDsgY2QgLi4KK2VuZGlmCisKKworZWNsaXBzZTogQkFTRV9ESVIgPSBodG1sLyQoRE9DKS8KKworZWNsaXBzZTogZWNsaXBzZS1nZW5lcmF0ZSBlY2xpcHNlLXJlc29sdmUtbGlua3MKKworLlBIT05ZIDogZWNsaXBzZS1nZW5lcmF0ZSBlY2xpcHNlLXJlc29sdmUtbGlua3MKKworZWNsaXBzZS1nZW5lcmF0ZToKK2lmZXEgKCQoZmlsdGVyICQoRE9DKSwgYWR0LW1hbnVhbCBic3AtZ3VpZGUgZGV2LW1hbnVhbCBrZXJuZWwtZGV2IHByb2ZpbGUtbWFudWFsIHJlZi1tYW51YWwgeW9jdG8tcHJvamVjdC1xcyksKQorCUBlY2hvICIgIgorCUBlY2hvICJFUlJPUjogWW91IGNhbiBvbmx5IGNyZWF0ZSBlY2xpcHNlIGRvY3VtZW50YXRpb24iCisJQGVjaG8gIiAgICAgICBvZiB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gcGFydHM6IgorCUBlY2hvICIgICAgICAgLSBhZHQtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSBic3AtZ3VpZGUiCisJQGVjaG8gIiAgICAgICAtIGRldi1tYW51YWwiCisJQGVjaG8gIiAgICAgICAtIGtlcm5lbC1kZXYiCisJQGVjaG8gIiAgICAgICAtIHByb2ZpbGUtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSByZWYtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSB5b2N0by1wcm9qZWN0LXFzIgorCUBlY2hvICIgIgorZWxzZQorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBCdWlsZGluZyBlY2xpcHNlIGhlbHAgb2YgIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKSAmJiBcCisJCXhzbHRwcm9jICQoWFNMVE9QVFMpIFwKKwkJCQktLXN0cmluZ3BhcmFtIGJhc2UuZGlyICckKEJBU0VfRElSKScgXAorCQkJCS1vIGVjbGlwc2UvJChET0MpLmh0bWwgXAorCQkJCSQoRE9DKS1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsICQoRE9DKS54bWwgJiYgXAorCQltdiBlY2xpcHNlL3RvYy54bWwgZWNsaXBzZS8kKERPQyktdG9jLnhtbCAmJiBcCisJCWNwIC1yZiAkKEZJR1VSRVMpIGVjbGlwc2UvJChCQVNFX0RJUikgJiYgXAorCQljZCAuLjsKKworCSQoY2FsbCBtb2RpZnktZWNsaXBzZSkKK2VuZGlmCisKK2VjbGlwc2UtcmVzb2x2ZS1saW5rczoKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogVXNpbmcgZWNsaXBzZS1oZWxwLnNlZCB0byBwcm9jZXNzIGV4dGVybmFsIGxpbmtzIgorCUBlY2hvICIgIgorCSQoZm9yZWFjaCBGSUxFLCBcCisJCSQod2lsZGNhcmQgJChET0MpL2VjbGlwc2UvaHRtbC8kKERPQykvKi5odG1sKSwgXAorCQkkKHNoZWxsIHNlZCAtaSAtZiB0b29scy9lY2xpcHNlLWhlbHAuc2VkICQoRklMRSkpKQorCit0YXJiYWxsOiBodG1sCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIENyZWF0aW5nIFRhcmJhbGwgb2YgZG9jdW1lbnQgZmlsZXMiCisJQGVjaG8gIiAiCisJY2QgJChET0MpOyB0YXIgLWN2emYgJChET0MpLnRneiAkKFRBUkZJTEVTKTsgY2QgLi4KKwordmFsaWRhdGU6CisJY2QgJChET0MpOyB4bWxsaW50IC0tcG9zdHZhbGlkIC0teGluY2x1ZGUgLS1ub291dCAkKERPQykueG1sOyBjZCAuLgorCisKK3B1Ymxpc2g6CisJQGlmIHRlc3QgLWYgJChET0MpLyQoRE9DKS5odG1sOyBcCisJICB0aGVuIFwKKyAgICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgICBlY2hvICIqKioqKioqKiBQdWJsaXNoaW5nICIkKERPQykiLmh0bWwiOyBcCisgICAgICAgICAgICBlY2hvICIgIjsgXAorICAgICAgICAgICAgc2NwIC1yICQoTUFOVUFMUykgJChTVFlMRVNIRUVUKSBkb2NzLnlwOi92YXIvd3d3L3d3dy55b2N0b3Byb2plY3Qub3JnLWRvY3MvJChWRVIpLyQoRE9DKTsgXAorICAgICAgICAgICAgY2QgJChET0MpOyBzY3AgLXIgJChGSUdVUkVTKSBkb2NzLnlwOi92YXIvd3d3L3d3dy55b2N0b3Byb2plY3Qub3JnLWRvY3MvJChWRVIpLyQoRE9DKTsgXAorCWVsc2UgXAorICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgZWNobyAkKERPQykiLmh0bWwgbWlzc2luZy4gIEdlbmVyYXRlIHRoZSBmaWxlIGZpcnN0IHRoZW4gdHJ5IGFnYWluLiI7IFwKKyAgICAgICAgICBlY2hvICIgIjsgXAorCWZpCisKK2NsZWFuOgorCXJtIC1yZiAkKE1BTlVBTFMpOyBybSAkKERPQykvJChET0MpLnRnejsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9SRUFETUUgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTY3OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vUkVBRE1FCkBAIC0wLDAgKzEsOTEgQEAKK2RvY3VtZW50YXRpb24KKz09PT09PT09PT09PT0KKworVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbi4gIFRoZSBZb2N0bworUHJvamVjdCBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0IGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaSBoYXZlIHR3bworaW5zdGFuY2VzIG9mIHRoZSAiZG9jdW1lbnRhdGlvbiIgZGlyZWN0b3J5LiAgWW91IHNob3VsZCB1bmRlcnN0YW5kIGVhY2ggb2YKK3RoZXNlIGluc3RhbmNlcy4KKworICBwb2t5L2RvY3VtZW50YXRpb24gLSBUaGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgcG9reSBHaXQgcmVwb3NpdG9yeSBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXQgb2YgWW9jdG8gUHJvamVjdCBtYW51YWxzLiAgV2hlbiB5b3UgY2xvbmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIHBva3kgR2l0IHJlcG9zaXRvcnksIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgbWFudWFscy4gIFRoZSBzdGF0ZSBvZiB0aGUgbWFudWFscyBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBndWFyYW50ZWVkIHRvIHJlZmxlY3QgdGhlIGxhdGVzdCBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IHJlbGVhc2UuICBUaGUgbWFudWFscyBhdCB0aGUgdGlwIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpbGwgYWxzbyBsaWtlbHkgY29udGFpbiBtb3N0IG1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBjaGFuZ2VzLgorCisgIHlvY3RvLWRvY3MvZG9jdW1lbnRhdGlvbiAtIFRoZSBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIFlvY3RvIFByb2plY3QgbWFudWFscy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZXBvc2l0b3J5IGlzIHdoZXJlIG1hbnVhbCBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY2N1cnMuICBJZiB5b3UgcGxhbiBvbiBjb250cmlidXRpbmcgYmFjayB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uLCB5b3Ugc2hvdWxkIHNldCB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IGJhc2VkIG9uIHRoaXMgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWRvY3MKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VzIGFuZCBwYXRjaGVzIGFyZSBmaXJzdCBwdXNoZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvY3RvLWRvY3MgR2l0IHJlcG9zaXRvcnkuICBMYXRlciwgdGhleSBtYWtlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHBva3kgR2l0IHJlcG9zaXRvcnkgZm91bmQgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS4KKworTWFudWFsIE9yZ2FuaXphdGlvbgorPT09PT09PT09PT09PT09PT09PQorCitGb2xkZXJzIGV4aXN0IGZvciBpbmRpdmlkdWFsIG1hbnVhbHMgYXMgZm9sbG93czoKKworKiBhZHQtbWFudWFsICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisqIGJzcC1ndWlkZSAgICAgICAgLSBUaGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUKKyogZGV2LW1hbnVhbCAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorKiBrZXJuZWwtZGV2ICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbAorKiByZWYtbWFudWFsICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbAorKiB5b2N0by1wcm9qZWN0LXFzIC0gVGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQKKyogbWVnYS1tYW51YWwgICAgICAtIEFuIGFnZ3JlZ2F0ZWQgbWFudWFsIGNvbXByaXNlZCBvZiBhbGwgWVAgbWFudWFscyBhbmQgZ3VpZGVzCisqIHByb2ZpbGUtbWFudWFsICAgLSBUaGUgWW9jdG8gUHJvamVjdCBQcm9maWxlIGFuZCBUcmFjaW5nIE1hbnVhbAorCitFYWNoIGZvbGRlciBpcyBzZWxmLWNvbnRhaW5lZCByZWdhcmRpbmcgY29udGVudCBhbmQgZmlndXJlcy4gIE5vdGUgdGhhdCB0aGVyZQoraXMgYSBzZWQgZmlsZSBuZWVkZWQgdG8gcHJvY2VzcyB0aGUgbGlua3Mgb2YgdGhlIG1lZ2EtbWFudWFsLiAgVGhlIHNlZCBmaWxlCitpcyBsb2NhdGVkIGluIHRoZSB0b29scyBkaXJlY3RvcnkuICBBbHNvIG5vdGUgdGhhdCB0aGUgZmlndXJlcyBmb2xkZXIgaW4gdGhlCittZWdhLW1hbnVhbCBkaXJlY3RvcnkgY29udGFpbnMgZHVwbGljYXRlcyBvZiBhbGwgdGhlIGZpZ3VyZXMgaW4gdGhlIFlQIGZvbGRlcnMKK2RpcmVjdG9yaWVzIGZvciBhbGwgWVAgbWFudWFscyBhbmQgZ3VpZGVzLgorCitJZiB5b3Ugd2FudCB0byBmaW5kIEhUTUwgdmVyc2lvbnMgb2YgdGhlIFlvY3RvIFByb2plY3QgbWFudWFscyBvbiB0aGUgd2ViLAorZ28gdG8gaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIGFuZCBjbGljayBvbiB0aGUgIkRvY3VtZW50YXRpb24iIHRhYi4gIEZyb20KK3RoZXJlIHlvdSBoYXZlIGFjY2VzcyB0byBhcmNoaXZlZCBkb2N1bWVudGF0aW9uIGZyb20gcHJldmlvdXMgcmVsZWFzZXMsIGN1cnJlbnQKK2RvY3VtZW50YXRpb24gZm9yIHRoZSBsYXRlc3QgcmVsZWFzZSwgYW5kICJEb2NzIGluIFByb2dyZXNzIiBmb3IgdGhlIHJlbGVhc2UKK2N1cnJlbnRseSBiZWluZyBkZXZlbG9wZWQuCisKK0luIGdlbmVyYWwsIHRoZSBZb2N0byBQcm9qZWN0IHNpdGUgKGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZykgaXMgYSBncmVhdAorcmVmZXJlbmNlIGZvciBib3RoIGluZm9ybWF0aW9uIGFuZCBkb3dubG9hZHMuCisKK01ha2VmaWxlCis9PT09PT09PQorCitUaGUgTWFrZWZpbGUgcHJvY2Vzc2VzIG1hbnVhbCBkaXJlY3RvcmllcyB0byBjcmVhdGUgSFRNTCwgUERGLAordGFyYmFsbHMsIGV0Yy4gIERldGFpbHMgb24gaG93IHRoZSBNYWtlZmlsZSB3b3JrIGFyZSBkb2N1bWVudGVkCitpbnNpZGUgdGhlIE1ha2VmaWxlLiAgU2VlIHRoYXQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBydW4gdGhlIG1ha2UgY29tbWFuZCBhbmQgcGFzcyBpdCB0aGUgbmFtZQorb2YgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBtYW51YWwncyBjb250ZW50cy4KK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcnVuIGZyb20gdGhlIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5CitjcmVhdGVzIGFuIEhUTUwgYW5kIGEgUERGIHZlcnNpb24gb2YgdGhlIEFEVCBtYW51YWwuCitUaGUgRE9DIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbWFudWFsIHlvdSBhcmUgbWFraW5nOgorCisgICAgICQgbWFrZSBET0M9YWR0LW1hbnVhbAorCitwb2t5LmVudAorPT09PT09PT0KKworVGhpcyBmaWxlIGRlZmluZXMgdmFyaWFibGVzIHVzZWQgZm9yIGRvY3VtZW50YXRpb24gcHJvZHVjdGlvbi4gIFRoZSB2YXJpYWJsZXMKK2FyZSB1c2VkIHRvIGRlZmluZSByZWxlYXNlIHBhdGhuYW1lcywgVVJMcyBmb3IgdGhlIHB1Ymxpc2hlZCBtYW51YWxzLCBldGMuCisKK3RlbXBsYXRlCis9PT09PT09PQorQ29udGFpbnMgdmFyaW91cyB0ZW1wbGF0ZXMsIGZvbnRzLCBhbmQgc29tZSBvbGQgUE5HIGZpbGVzLgorCit0b29scworPT09PT0KK0NvbnRhaW5zIGEgdG9vbCB0byBjb252ZXJ0IHRoZSBEb2NCb29rIGZpbGVzIHRvIFBERiBmb3JtYXQuICBUaGlzIGZvbGRlciBhbHNvCitjb250YWlucyB0aGUgbWVnYS1tYW51YWwuc2VkIGZpbGUsIHdoaWNoIGlzIHVzZWQgYnkgTWFrZWZpbGUgdG8gcHJvY2VzcworY3Jvc3MtcmVmZXJlbmNlcyBmcm9tIHdpdGhpbiB0aGUgbWFudWFsIHRoYXQgbm9ybWFsbHkgZ28gdG8gYW4gZXh0ZXJuYWwKK21hbnVhbC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhkMThhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWNvbW1hbmQueG1sCkBAIC0wLDAgKzEsMjY1IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndXNpbmctdGhlLWNvbW1hbmQtbGluZSc+Cis8dGl0bGU+VXNpbmcgdGhlIENvbW1hbmQgTGluZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVjYWxsIHRoYXQgZWFybGllciB0aGUgbWFudWFsIGRpc2N1c3NlZCBob3cgdG8gdXNlIGFuIGV4aXN0aW5nIHRvb2xjaGFpbgorICAgICAgICB0YXJiYWxsIHRoYXQgaGFkIGJlZW4gaW5zdGFsbGVkIGludG8gdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uCisgICAgICAgIGRpcmVjdG9yeSwgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+LCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIChzZWUgdGhlIHNlY3Rpb24gIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWFuLWV4aXN0aW5nLXRvb2xjaGFpbi10YXJiYWxsJz5Vc2luZyBhIENyb3NzLVRvb2xjaGFpbiBUYXJiYWxsKTwvbGluaz4iLgorICAgICAgICBBbmQsIHRoYXQgc291cmNpbmcgeW91ciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgIGluaXRpYWxpemVzIGEgc3VpdGFibGUgY3Jvc3MtdG9vbGNoYWluIGRldmVsb3BtZW50IGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgdGhpcyBzZXR1cCwgbG9jYXRpb25zIGZvciB0aGUgY29tcGlsZXIsIFFFTVUgc2NyaXB0cywgUUVNVSBiaW5hcnksCisgICAgICAgIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiBhbmQgb3RoZXIgdXNlZnVsCisgICAgICAgIHV0aWxpdGllcyBhcmUgYWRkZWQgdG8gdGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIEFsc28sIHZhcmlhYmxlcyB0byBhc3Npc3QKKyAgICAgICAgPGZpbGVuYW1lPnBrZ2NvbmZpZzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4KKyAgICAgICAgYXJlIGFsc28gZGVmaW5lZCBzbyB0aGF0LCBmb3IgZXhhbXBsZSwgPGZpbGVuYW1lPmNvbmZpZ3VyZS5zaDwvZmlsZW5hbWU+CisgICAgICAgIGNhbiBmaW5kIHByZS1nZW5lcmF0ZWQgdGVzdCByZXN1bHRzIGZvciB0ZXN0cyB0aGF0IG5lZWQgdGFyZ2V0IGhhcmR3YXJlCisgICAgICAgIG9uIHdoaWNoIHRvIHJ1bi4KKyAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciB0aGUgbGlzdCBvZiBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgIGVzdGFibGlzaGVkIGJ5IHRoZSBzY3JpcHQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbGxlY3RpdmVseSwgdGhlc2UgY29uZGl0aW9ucyBhbGxvdyB5b3UgdG8gZWFzaWx5IHVzZSB0aGUgdG9vbGNoYWluCisgICAgICAgIG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudCBvbiBib3RoIEF1dG90b29scy1iYXNlZAorICAgICAgICBwcm9qZWN0cyBhbmQgTWFrZWZpbGUtYmFzZWQgcHJvamVjdHMuCisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgYm90aCB0aGVzZSB0eXBlcyBvZiBwcm9qZWN0cy4KKyAgICA8L3BhcmE+CisKKworPHNlY3Rpb24gaWQ9J2F1dG90b29scy1iYXNlZC1wcm9qZWN0cyc+Cis8dGl0bGU+QXV0b3Rvb2xzLUJhc2VkIFByb2plY3RzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBPbmNlIHlvdSBoYXZlIGEgc3VpdGFibGUgY3Jvc3MtdG9vbGNoYWluIGluc3RhbGxlZCwgaXQgaXMgdmVyeSBlYXN5IHRvCisgICAgICAgIGRldmVsb3AgYSBwcm9qZWN0IG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIHNpbXBsZSAiSGVsbG93b3JsZCIgZXhhbXBsZSB0aGF0IHNob3dzIGhvdworICAgICAgICB0byBzZXQgdXAsIGNvbXBpbGUsIGFuZCBydW4gdGhlIHByb2plY3QuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWFuZC1ydW5uaW5nLWEtcHJvamVjdC1iYXNlZC1vbi1nbnUtYXV0b3Rvb2xzJz4KKyAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGFuZCBSdW5uaW5nIGEgUHJvamVjdCBCYXNlZCBvbiBHTlUgQXV0b3Rvb2xzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBjcmVhdGUgYSBzaW1wbGUgQXV0b3Rvb2xzLWJhc2VkIHByb2plY3Q6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgeW91ciBkaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgY2xlYW4gZGlyZWN0b3J5IGZvciB5b3VyIHByb2plY3QgYW5kIHRoZW4gbWFrZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGRpcmVjdG9yeSB5b3VyIHdvcmtpbmcgbG9jYXRpb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciAkSE9NRS9oZWxsb3dvcmxkCisgICAgICQgY2QgJEhPTUUvaGVsbG93b3JsZAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb3B1bGF0ZSB0aGUgZGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSA8ZmlsZW5hbWU+aGVsbG8uYzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jb25maWd1cmUuaW48L2ZpbGVuYW1lPiBmaWxlcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+aGVsbG8uYzwvZmlsZW5hbWU+LCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKworICAgICBtYWluKCkKKyAgICAgICAgeworICAgICAgICAgICBwcmludGYoIkhlbGxvIFdvcmxkIVxuIik7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIDxmaWxlbmFtZT5NYWtlZmlsZS5hbTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaW5fUFJPR1JBTVMgPSBoZWxsbworICAgICBoZWxsb19TT1VSQ0VTID0gaGVsbG8uYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgPGZpbGVuYW1lPmNvbmZpZ3VyZS5pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlc2UgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBQ19JTklUKGhlbGxvLmMpCisgICAgIEFNX0lOSVRfQVVUT01BS0UoaGVsbG8sMC4xKQorICAgICBBQ19QUk9HX0NDCisgICAgIEFDX1BST0dfSU5TVEFMTAorICAgICBBQ19PVVRQVVQoTWFrZWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSB0aGUgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbGF0aW9uIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gY3JlYXRlcyBhIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBBRFQKKyAgICAgICAgICAgICAgICAgICAgd2FzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBjYW4gdXNlIHRoZSB0b29scyB0byBkZXZlbG9wIHlvdXIgcHJvamVjdCwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIHRoaXMgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGJlZ2lucyB3aXRoIHRoZSBzdHJpbmcgImVudmlyb25tZW50LXNldHVwIiBhbmQgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBmb2xsb3dlZCBieSB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICJwb2t5LWxpbnV4Ii4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc291cmNlcyBhIHNjcmlwdCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IEFEVCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgMzItYml0IEludGVsIHg4NiBBcmNoaXRlY3R1cmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAmRElTVFJPX05BTUU7IFlvY3RvIFByb2plY3QgcmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAvb3B0L3Bva3kvJkRJU1RSTzsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBsb2NhbCBhY2xvY2FsLm00CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGFuZCBjcmVhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBHTlUgQXV0b3Rvb2xzIGdlbmVyYXRlIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbC5tNDwvZmlsZW5hbWU+IGZpbGVzIGFuZCBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhY2xvY2FsCisgICAgICQgYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2VuZXJhdGUgZmlsZXMgbmVlZGVkIGJ5IEdOVQorICAgICAgICAgICAgICAgICAgICBjb2Rpbmcgc3RhbmRhcmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEdOVSBjb2Rpbmcgc3RhbmRhcmRzIHJlcXVpcmUgY2VydGFpbiBmaWxlcyBpbiBvcmRlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgdG8gYmUgY29tcGxpYW50LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyB0aG9zZSBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHRvdWNoIE5FV1MgUkVBRE1FIEFVVEhPUlMgQ2hhbmdlTG9nCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgZmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZ2VuZXJhdGVzIHRoZSA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhdXRvbWFrZSAtYQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Dcm9zcy1jb21waWxlIHRoZSBwcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjb21waWxlcyB0aGUgcHJvamVjdCB1c2luZyB0aGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09ORklHVVJFX0ZMQUdTJz48ZmlsZW5hbWU+Q09ORklHVVJFX0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcm92aWRlcyB0aGUgbWluaW1hbCBhcmd1bWVudHMgZm9yCisgICAgICAgICAgICAgICAgICAgIEdOVSBjb25maWd1cmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL2NvbmZpZ3VyZSAke0NPTkZJR1VSRV9GTEFHU30KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBhbmQgaW5zdGFsbCB0aGUgcHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0d28gY29tbWFuZHMgZ2VuZXJhdGUgYW5kIGluc3RhbGwgdGhlIHByb2plY3QgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWFrZQorICAgICAkIG1ha2UgaW5zdGFsbCBERVNURElSPS4vdG1wCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZlcmlmeSB0aGUgaW5zdGFsbGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyBhIHNpbXBsZSB3YXkgdG8gdmVyaWZ5IHRoZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBSdW5uaW5nIHRoZSBjb21tYW5kIHByaW50cyB0aGUgYXJjaGl0ZWN0dXJlIG9uIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHRoZSBiaW5hcnkgZmlsZSBjYW4gcnVuLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyY2hpdGVjdHVyZSBzaG91bGQgYmUgdGhlIHNhbWUgYXJjaGl0ZWN0dXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxlZCBjcm9zcy10b29sY2hhaW4gc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBmaWxlIC4vdG1wL3Vzci9sb2NhbC9iaW4vaGVsbG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhlY3V0ZSB5b3VyIHByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVG8gZXhlY3V0ZSB0aGUgcHJvamVjdCBpbiB0aGUgc2hlbGwsIHNpbXBseSBlbnRlciB0aGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIGFsc28gY29weSB0aGUgYmluYXJ5IHRvIHRoZSBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gdGhlIHByb2plY3QgdGhlcmUgYXMgd2VsbDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vaGVsbG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBcyBleHBlY3RlZCwgdGhlIHByb2plY3QgZGlzcGxheXMgdGhlICJIZWxsbyBXb3JsZCEiIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdwYXNzaW5nLWhvc3Qtb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT5QYXNzaW5nIEhvc3QgT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYW4gQXV0b3Rvb2xzLWJhc2VkIHByb2plY3QsIHlvdSBjYW4gdXNlIHRoZSBjcm9zcy10b29sY2hhaW4gYnkganVzdAorICAgICAgICAgICAgcGFzc2luZyB0aGUgYXBwcm9wcmlhdGUgaG9zdCBvcHRpb24gdG8gPGZpbGVuYW1lPmNvbmZpZ3VyZS5zaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGhvc3Qgb3B0aW9uIHlvdSB1c2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCBzZXR1cAorICAgICAgICAgICAgc2NyaXB0IGZvdW5kIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IGluc3RhbGxlZCB0aGUgY3Jvc3MtdG9vbGNoYWluLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBob3N0IG9wdGlvbiBmb3IgYW4gQVJNLWJhc2VkIHRhcmdldCB0aGF0IHVzZXMgdGhlIEdOVSBFQUJJCisgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+YXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgaXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5lbnZpcm9ubWVudC1zZXR1cC1hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGh1cywgdGhlIGZvbGxvd2luZyBjb21tYW5kIHdvcmtzIHRvIHVwZGF0ZSB5b3VyIHByb2plY3QgYW5kCisgICAgICAgICAgICByZWJ1aWxkIGl0IHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBjcm9zcy10b29sY2hhaW4gdG9vbHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9jb25maWd1cmUgLS1ob3N0PWFybXY1dGUtcG9reS1saW51eC1nbnVlYWJpIFwKKyAgICAgICAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD08cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBzY3JpcHQgcmVzdWx0cyBpbiBwcm9ibGVtcyByZWNvZ25pemluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS13aXRoLWxpYnRvb2wtc3lzcm9vdD08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5zeXNyb290LWRpcjwvcmVwbGFjZWFibGU+IG9wdGlvbiwKKyAgICAgICAgICAgICAgICByZWdlbmVyYXRlIHRoZSBzY3JpcHQgdG8gZW5hYmxlIHRoZSBzdXBwb3J0IGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmcgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBydW4gdGhlIHNjcmlwdCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbGlidG9vbGl6ZSAtLWF1dG9tYWtlCisgICAgICQgYWNsb2NhbCAtSSAke09FQ09SRV9OQVRJVkVfU1lTUk9PVH0vdXNyL3NoYXJlL2FjbG9jYWwgXAorICAgICAgICBbLUkgPHJlcGxhY2VhYmxlPmRpcl9jb250YWluaW5nX3lvdXJfcHJvamVjdC1zcGVjaWZpY19tNF9tYWNyb3M8L3JlcGxhY2VhYmxlPl0KKyAgICAgJCBhdXRvY29uZgorICAgICAkIGF1dG9oZWFkZXIKKyAgICAgJCBhdXRvbWFrZSAtYQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21ha2VmaWxlLWJhc2VkLXByb2plY3RzJz4KKzx0aXRsZT5NYWtlZmlsZS1CYXNlZCBQcm9qZWN0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLCB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICBlc3RhYmxpc2hlZCBieSBydW5uaW5nIHRoZSBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgIGFyZSBzdWJqZWN0IHRvIGdlbmVyYWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBydWxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gaWxsdXN0cmF0ZSB0aGlzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGZvdXIgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0MnPkNDPC91bGluaz49aTU4Ni1wb2t5LWxpbnV4LWdjYyAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vb3B0L3Bva3kvMS44L3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eAorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEQnPkxEPC91bGluaz49aTU4Ni1wb2t5LWxpbnV4LWxkIC0tc3lzcm9vdD0vb3B0L3Bva3kvMS44L3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eAorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz5DRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DWFhGTEFHUyc+Q1hYRkxBR1M8L3VsaW5rPj0tTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgTm93LCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRocmVlIGNhc2VzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DYXNlIDEgLSBObyBWYXJpYWJsZXMgU2V0IGluIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBub3Qgc3BlY2lmaWNhbGx5IHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiwgdGhlIHZhcmlhYmxlcyByZXRhaW4gdGhlaXIKKyAgICAgICAgICAgICAgICB2YWx1ZXMgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DYXNlIDIgLSBWYXJpYWJsZXMgU2V0IGluIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFNwZWNpZmljYWxseSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBkdXJpbmcgdGhlIGJ1aWxkIHJlc3VsdHMgaW4gdGhlCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2YgdGhlIHZhcmlhYmxlcyBiZWluZyBvdmVyd3JpdHRlbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2FzZSAzIC0gVmFyaWFibGVzIFNldCB3aGVuIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBpcyBFeGVjdXRlZCBmcm9tIHRoZSBDb21tYW5kIExpbmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBFeGVjdXRpbmcgdGhlIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+IGZyb20gdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBsaW5lIHJlc3VsdHMgaW4gdGhlIHZhcmlhYmxlcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoCisgICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIGNvbnRlbnQgcmVnYXJkbGVzcyBvZiB3aGF0IGlzIGJlaW5nIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IGNvbnNpZGVyZWQgdW5sZXNzCisgICAgICAgICAgICAgICAgeW91IHVzZSB0aGUgIi1lIiBmbGFnIGR1cmluZyB0aGUgYnVpbGQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1ha2UgLWUgPHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgZmxhZywgdGhlbiB0aGUgZW52aXJvbm1lbnQgdmFsdWVzIG9mIHRoZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBvdmVycmlkZSBhbnkgdmFyaWFibGVzIHNwZWNpZmljYWxseSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEZvciB0aGUgbGlzdCBvZiB2YXJpYWJsZXMgc2V0IHVwIGJ5IHRoZSBjcm9zcy10b29sY2hhaW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHNldHVwIHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NldHRpbmctdXAtdGhlLWNyb3NzLWRldmVsb3BtZW50LWVudmlyb25tZW50Jz5TZXR0aW5nIFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdjNzEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbApAQCAtMCwwICsxLDE4MCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2FkdC1pbnRybyc+CisgICAgPHRpdGxlPlRoZSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBQYXJ0IG9mIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IHNvbHV0aW9uIGlzIGFuIEFwcGxpY2F0aW9uIERldmVsb3BtZW50CisgICAgICAgIFRvb2xraXQgKEFEVCkuCisgICAgICAgIFRoZSBBRFQgcHJvdmlkZXMgeW91IHdpdGggYSBjdXN0b20tYnVpbHQsIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgIHBsYXRmb3JtIHN1aXRlZCBmb3IgZGV2ZWxvcGluZyBhIHVzZXItdGFyZ2V0ZWQgcHJvZHVjdCBhcHBsaWNhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRnVuZGFtZW50YWxseSwgdGhlIEFEVCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjcm9zcy10b29sY2hhaW4gYW5kIG1hdGNoaW5nCisgICAgICAgICAgICAgICAgc3lzcm9vdCBib3RoIGJ1aWx0IGJ5IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBhbmQgc3lzcm9vdCBhcmUgYmFzZWQgb24gYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhbmQgZXh0ZW5zaW9ucywKKyAgICAgICAgICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIGNyb3NzLWRldmVsb3Agb24gdGhlIGhvc3QgbWFjaGluZSBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgRWNsaXBzZSBJREUgWW9jdG8gUGx1Zy1pbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpLCB3aGljaCBsZXRzIHlvdSBzaW11bGF0ZSB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VmFyaW91cyB1c2VyLXNwYWNlIHRvb2xzIHRoYXQgZ3JlYXRseSBlbmhhbmNlIHlvdXIgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBleHBlcmllbmNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLWNyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+CisgICAgICAgIDx0aXRsZT5UaGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L3VsaW5rPgorICAgICAgICAgICAgY29uc2lzdHMgb2YgYSBjcm9zcy1jb21waWxlciwgY3Jvc3MtbGlua2VyLCBhbmQgY3Jvc3MtZGVidWdnZXIKKyAgICAgICAgICAgIHRoYXQgYXJlIHVzZWQgdG8gZGV2ZWxvcCB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBmb3IgdGFyZ2V0ZWQKKyAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgVGhpcyB0b29sY2hhaW4gaXMgY3JlYXRlZCBlaXRoZXIgYnkgcnVubmluZyB0aGUgQURUIEluc3RhbGxlcgorICAgICAgICAgICAgc2NyaXB0LCBhIHRvb2xjaGFpbiBpbnN0YWxsZXIgc2NyaXB0LCBvciB0aHJvdWdoIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIHRoYXQgaXMgYmFzZWQgb24geW91ciBNZXRhZGF0YSBjb25maWd1cmF0aW9uIG9yIGV4dGVuc2lvbiBmb3IKKyAgICAgICAgICAgIHlvdXIgdGFyZ2V0ZWQgZGV2aWNlLgorICAgICAgICAgICAgVGhlIGNyb3NzLXRvb2xjaGFpbiB3b3JrcyB3aXRoIGEgbWF0Y2hpbmcgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3lzcm9vdCc+CisgICAgICAgIDx0aXRsZT5TeXNyb290PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtYXRjaGluZyB0YXJnZXQgc3lzcm9vdCBjb250YWlucyBuZWVkZWQgaGVhZGVycyBhbmQgbGlicmFyaWVzIGZvciBnZW5lcmF0aW5nCisgICAgICAgICAgICBiaW5hcmllcyB0aGF0IHJ1biBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgIFRoZSBzeXNyb290IGlzIGJhc2VkIG9uIHRoZSB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtIGltYWdlIHRoYXQgaXMgYnVpbHQgYnkKKyAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuZCB1c2VzIHRoZSBzYW1lIE1ldGFkYXRhIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgdGhlIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdlY2xpcHNlLW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPkVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgRWNsaXBzZSBJREUgaXMgYSBwb3B1bGFyIGRldmVsb3BtZW50IGVudmlyb25tZW50IGFuZCBpdCBmdWxseSBzdXBwb3J0cworICAgICAgICAgICAgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBXaGVuIHlvdSBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdCBQbHVnLWluIGludG8KKyAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERSwgeW91IG1heGltaXplIHlvdXIgWW9jdG8gUHJvamVjdCBleHBlcmllbmNlLgorICAgICAgICAgICAgSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIFBsdWctaW4gcmVzdWx0cyBpbiBhbiBlbnZpcm9ubWVudCB0aGF0CisgICAgICAgICAgICBoYXMgZXh0ZW5zaW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gbGV0IHlvdSBtb3JlIGVhc2lseSBkZXZlbG9wIHNvZnR3YXJlLgorICAgICAgICAgICAgVGhlc2UgZXh0ZW5zaW9ucyBhbGxvdyBmb3IgY3Jvc3MtY29tcGlsYXRpb24sIGRlcGxveW1lbnQsIGFuZCBleGVjdXRpb24gb2YKKyAgICAgICAgICAgIHlvdXIgb3V0cHV0IGludG8gYSBRRU1VIGVtdWxhdGlvbiBzZXNzaW9uLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBlcmZvcm0gY3Jvc3MtZGVidWdnaW5nIGFuZCBwcm9maWxpbmcuCisgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgYWxzbyBzdXBwb3J0cyBhIHN1aXRlIG9mIHRvb2xzIHRoYXQgYWxsb3dzIHlvdSB0byBwZXJmb3JtCisgICAgICAgICAgICByZW1vdGUgcHJvZmlsaW5nLCB0cmFjaW5nLCBjb2xsZWN0aW9uIG9mIHBvd2VyIGRhdGEsIGNvbGxlY3Rpb24gb2YKKyAgICAgICAgICAgIGxhdGVuY3kgZGF0YSwgYW5kIGNvbGxlY3Rpb24gb2YgcGVyZm9ybWFuY2UgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB3b3JrZmxvdyB0aGF0IHVzZXMgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgIElERSBhbmQgZm9yIGEgZGV0YWlsZWQgZXhhbXBsZSBvZiBob3cgdG8gaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFBsdWctaW4sIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNhZHQtZWNsaXBzZSc+V29ya2luZyBXaXRoaW4gRWNsaXBzZTwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLXFlbXUtZW11bGF0b3InPgorICAgICAgICA8dGl0bGU+VGhlIFFFTVUgRW11bGF0b3I8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFFFTVUgZW11bGF0b3IgYWxsb3dzIHlvdSB0byBzaW11bGF0ZSB5b3VyIGhhcmR3YXJlIHdoaWxlIHJ1bm5pbmcgeW91cgorICAgICAgICAgICAgYXBwbGljYXRpb24gb3IgaW1hZ2UuCisgICAgICAgICAgICBRRU1VIGlzIG1hZGUgYXZhaWxhYmxlIGEgbnVtYmVyIG9mIHdheXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgQURUIEluc3RhbGxlciBzY3JpcHQgdG8gaW5zdGFsbCBBRFQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0byBpbnN0YWxsIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgY2xvbmVkIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGhhdmUgc291cmNlZCB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCBRRU1VIGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBhbmQgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgZG93bmxvYWRlZCBhIFlvY3RvIFByb2plY3QgcmVsZWFzZSBhbmQgdW5wYWNrZWQKKyAgICAgICAgICAgICAgICAgICAgaXQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQsIFFFTVUgaXMKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGFuZCBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNyb3NzLXRvb2xjaGFpbiB0YXJiYWxsIGFuZCB5b3UKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBzb3VyY2VkIHRoZSB0b29sY2hhaW4ncyBzZXR1cCBlbnZpcm9ubWVudCBzY3JpcHQsIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgaXMgYWxzbyBpbnN0YWxsZWQgYW5kIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzZXItc3BhY2UtdG9vbHMnPgorICAgICAgICA8dGl0bGU+VXNlci1TcGFjZSBUb29sczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2VyLXNwYWNlIHRvb2xzIGFyZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgWW91IHdpbGwgZmluZCB0aGVzZSB0b29scyBoZWxwZnVsIGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgIFRoZSB0b29scyBpbmNsdWRlIExhdGVuY3lUT1AsIFBvd2VyVE9QLCBPUHJvZmlsZSwgUGVyZiwgU3lzdGVtVGFwLCBhbmQgTHR0bmctdXN0LgorICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIGNvbW1vbiBkZXZlbG9wbWVudCB0b29scyBmb3IgdGhlIExpbnV4IHBsYXRmb3JtLgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxhdGVuY3lUT1A6PC9lbXBoYXNpcz4gTGF0ZW5jeVRPUCBmb2N1c2VzIG9uIGxhdGVuY3kKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjYXVzZXMgc2tpcHMgaW4gYXVkaW8sCisgICAgICAgICAgICAgICAgICAgIHN0dXR0ZXJzIGluIHlvdXIgZGVza3RvcCBleHBlcmllbmNlLCBvciBzaXR1YXRpb25zIHRoYXQgb3ZlcmxvYWQgeW91ciBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgZXZlbiB3aGVuIHlvdSBoYXZlIHBsZW50eSBvZiBDUFUgcG93ZXIgbGVmdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb3dlclRPUDo8L2VtcGhhc2lzPiBIZWxwcyB5b3UgZGV0ZXJtaW5lIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgaXMgdXNpbmcgdGhlIG1vc3QgcG93ZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCBQb3dlclRPUCBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovLzAxLm9yZy9wb3dlcnRvcC8nPjwvdWxpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T1Byb2ZpbGU6PC9lbXBoYXNpcz4gQSBzeXN0ZW0td2lkZSBwcm9maWxlciBmb3IgTGludXgKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyB0aGF0IGlzIGNhcGFibGUgb2YgcHJvZmlsaW5nIGFsbCBydW5uaW5nIGNvZGUgYXQgbG93IG92ZXJoZWFkLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgT1Byb2ZpbGUgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9hYm91dC8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHNldHVwIGFuZCB1c2UgdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtb3Byb2ZpbGUnPk9Qcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QZXJmOjwvZW1waGFzaXM+IFBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvciBMaW51eCB1c2VkCisgICAgICAgICAgICAgICAgICAgIHRvIGtlZXAgdHJhY2sgb2YgY2VydGFpbiB0eXBlcyBvZiBoYXJkd2FyZSBhbmQgc29mdHdhcmUgZXZlbnRzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0eXBlcyBvZiBjb3VudGVycyBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9wZXJmLndpa2kua2VybmVsLm9yZy8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHNldHVwIGFuZCB1c2UgdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtcGVyZic+cGVyZjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzdGVtVGFwOjwvZW1waGFzaXM+IEEgZnJlZSBzb2Z0d2FyZSBpbmZyYXN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHNpbXBsaWZpZXMgaW5mb3JtYXRpb24gZ2F0aGVyaW5nIGFib3V0IGEgcnVubmluZyBMaW51eCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaGVscHMgeW91IGRpYWdub3NlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbVRhcCBpcyBub3QgYXZhaWxhYmxlIGFzIGEgdXNlci1zcGFjZSB0b29sIHRocm91Z2ggdGhlIEVjbGlwc2UgSURFIFlvY3RvIFBsdWctaW4uCisgICAgICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwJz48L3VsaW5rPiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBvbiBTeXN0ZW1UYXAuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlcyBvbiBob3cgdG8gc2V0dXAgYW5kIHVzZSB0aGlzIHRvb2wsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1zeXN0ZW10YXAnPlN5c3RlbVRhcDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MdHRuZy11c3Q6PC9lbXBoYXNpcz4gQSBVc2VyLXNwYWNlIFRyYWNlciBkZXNpZ25lZCB0bworICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHVzZXItc3BhY2UgYWN0aXZpdHkuCisgICAgICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vbHR0bmcub3JnL3VzdCc+PC91bGluaz4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTHR0bmctdXN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2FkdC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JhNWY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvYWR0LW1hbnVhbC8nIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IicuLi9ib29rLmNzcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJlY2xpcHNlLm1hbmlmZXN0IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjcmVhdGUucGx1Z2luLnhtbCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3VwcHJlc3MubmF2aWdhdGlvbiIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaW5kZXgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZmRmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtaW50cm8ueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdhZHQtbWFudWFsLWludHJvJz4KKzx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdlbGNvbWUgdG8gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQgbGV0cyB5b3UgYmVnaW4gZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMKKyAgICAgICAgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFuIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGVudmlyb25tZW50IGJhc2VkIG9uCisgICAgICAgIGFuIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2Ygc3RhbmQtYWxvbmUKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhbmQgb3RoZXIgdG9vbHMuCisgICAgICAgIFRoaXMgbWFudWFsIGRlc2NyaWJlcyB0aGUgQURUIGFuZCBob3cgeW91IGNhbiBjb25maWd1cmUgYW5kIGluc3RhbGwgaXQsCisgICAgICAgIGhvdyB0byBhY2Nlc3MgYW5kIHVzZSB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucywgaG93IHRvCisgICAgICAgIGN1c3RvbWl6ZSB0aGUgZGV2ZWxvcG1lbnQgcGFja2FnZXMgaW5zdGFsbGF0aW9uLAorICAgICAgICBob3cgdG8gdXNlIGNvbW1hbmQtbGluZSBkZXZlbG9wbWVudCBmb3IgYm90aCBBdXRvdG9vbHMtYmFzZWQgYW5kCisgICAgICAgIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLCBhbmQgYW4gaW50cm9kdWN0aW9uIHRvIHRoZQorICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPiBJREUgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgQURUIGlzIGRpc3RyaWJ1dGlvbi1uZXV0cmFsIGFuZCBkb2VzIG5vdCByZXF1aXJlIHRoZSBZb2N0bworICAgICAgICAgICAgUHJvamVjdCByZWZlcmVuY2UgZGlzdHJpYnV0aW9uLCB3aGljaCBpcyBjYWxsZWQgUG9reS4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsLCBob3dldmVyLCB1c2VzIGV4YW1wbGVzIHRoYXQgdXNlIHRoZSBQb2t5IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U2MmM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC54bWwKQEAgLTAsMCArMSwxMzUgQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxib29rIGlkPSdhZHQtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL2FkdC10aXRsZS5wbmcnCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nU1ZHJworICAgICAgICAgICAgICAgICAgICBhbGlnbj0nbGVmdCcgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUKKyAgICAgICAgPC90aXRsZT4KKworICAgICAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+SmVzc2ljYTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aaGFuZzwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmplc3NpY2EuemhhbmdAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBBcHJpbCAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjAuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjIzIE1heSAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgT2N0b2JlciAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+JkNPUFlSSUdIVF9ZRUFSOzwveWVhcj4KKyAgICAgIDxob2xkZXI+TGludXggRm91bmRhdGlvbjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgPHBhcmE+CisgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKworICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYWR0LW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1wcmVwYXJlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYWR0LXBhY2thZ2UueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJhZHQtY29tbWFuZC54bWwiLz4KKworPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KKyAgICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CisgICAgPC9pbmRleD4KKy0tPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZmYTA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXBhY2thZ2UueG1sCkBAIC0wLDAgKzEsMTAyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYWR0LXBhY2thZ2UnPgorPHRpdGxlPk9wdGlvbmFsbHkgQ3VzdG9taXppbmcgdGhlIERldmVsb3BtZW50IFBhY2thZ2VzIEluc3RhbGxhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVjYXVzZSB0aGUgWW9jdG8gUHJvamVjdCBpcyBzdWl0ZWQgZm9yIGVtYmVkZGVkIExpbnV4IGRldmVsb3BtZW50LCBpdCBpcworICAgICAgICBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGN1c3RvbWl6ZSB5b3VyIGRldmVsb3BtZW50IHBhY2thZ2VzIGluc3RhbGxhdGlvbi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgZGV2ZWxvcGluZyBhIG1pbmltYWwgaW1hZ2UsIHRoZW4geW91IG1pZ2h0IG5vdCBuZWVkCisgICAgICAgIGNlcnRhaW4gcGFja2FnZXMgKGUuZy4gZ3JhcGhpY3Mgc3VwcG9ydCBwYWNrYWdlcykuCisgICAgICAgIFRodXMsIHlvdSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gcmVtb3ZlIHRob3NlIHBhY2thZ2VzIGZyb20geW91ciB0YXJnZXQgc3lzcm9vdC4KKyAgICA8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdwYWNrYWdlLW1hbmFnZW1lbnQtc3lzdGVtcyc+CisgICAgPHRpdGxlPlBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW1zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyB0aGUgZ2VuZXJhdGlvbiBvZiBzeXNyb290IGZpbGVzIHVzaW5nCisgICAgICAgIHRocmVlIGRpZmZlcmVudCBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtcyAoUE1TKToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T1BLRzo8L2VtcGhhc2lzPiBBIGxlc3Mgd2VsbCBrbm93biBQTVMgd2hvc2UgdXNlCisgICAgICAgICAgICAgICAgb3JpZ2luYXRlZCBpbiB0aGUgT3BlbkVtYmVkZGVkIGFuZCBPcGVuV3J0IGVtYmVkZGVkIExpbnV4IHByb2plY3RzLgorICAgICAgICAgICAgICAgIFRoaXMgUE1TIHdvcmtzIHdpdGggZmlsZXMgcGFja2FnZWQgaW4gYW4gPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiBmb3JtYXQuCisgICAgICAgICAgICAgICAgU2VlIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3BrZyc+PC91bGluaz4gZm9yIG1vcmUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBPUEtHLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SUE06PC9lbXBoYXNpcz4gQSBtb3JlIHdpZGVseSBrbm93biBQTVMgaW50ZW5kZWQgZm9yIEdOVS9MaW51eAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgICAgICAgICAgVGhpcyBQTVMgd29ya3Mgd2l0aCBmaWxlcyBwYWNrYWdlZCBpbiBhbiA8ZmlsZW5hbWU+LnJtczwvZmlsZW5hbWU+IGZvcm1hdC4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGN1cnJlbnRseSBpbnN0YWxscyB0aHJvdWdoIHRoaXMgUE1TIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgU2VlIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUlBNX1BhY2thZ2VfTWFuYWdlcic+PC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBSUE0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlYmlhbjo8L2VtcGhhc2lzPiBUaGUgUE1TIGZvciBEZWJpYW4tYmFzZWQgc3lzdGVtcworICAgICAgICAgICAgICAgIGlzIGJ1aWx0IG9uIG1hbnkgUE1TIHRvb2xzLgorICAgICAgICAgICAgICAgIFRoZSBsb3dlci1sZXZlbCBQTVMgdG9vbCA8ZmlsZW5hbWU+ZHBrZzwvZmlsZW5hbWU+IGZvcm1zIHRoZSBiYXNlIG9mIHRoZSBEZWJpYW4gUE1TLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBkcGtnIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHBrZyc+PC91bGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1wbXMnPgorICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgUE1TPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGljaGV2ZXIgUE1TIHlvdSBhcmUgdXNpbmcsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBmaWxlIGlzIHNldCB0byByZWZsZWN0IHRoYXQgc3lzdGVtLgorICAgICAgICBUaGUgZmlyc3QgdmFsdWUgeW91IGNob29zZSBmb3IgdGhlIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZSBmaWxlIGZvcm1hdCBmb3IgdGhlIHJvb3QKKyAgICAgICAgZmlsZXN5c3RlbSBhdCBzeXNyb290LgorICAgICAgICBBZGRpdGlvbmFsIHZhbHVlcyBzcGVjaWZ5IGFkZGl0aW9uYWwgZm9ybWF0cyBmb3IgY29udmVuaWVuY2Ugb3IgdGVzdGluZy4KKyAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGZvcgorICAgICAgICBkZXRhaWxzLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBGb3IgYnVpbGQgcGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgUE1TLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciBhIHNjZW5hcmlvIHdoZXJlIHlvdSBhcmUgdXNpbmcgT1BLRyBhbmQgeW91IHdhbnQgdG8gYWRkCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+bGliZ2xhZGU8L2ZpbGVuYW1lPiBwYWNrYWdlIHRvIHRoZSB0YXJnZXQgc3lzcm9vdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRmlyc3QsIHlvdSBzaG91bGQgZ2VuZXJhdGUgdGhlIElQSyBmaWxlIGZvciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmxpYmdsYWRlPC9maWxlbmFtZT4gcGFja2FnZSBhbmQgYWRkIGl0CisgICAgICAgIGludG8gYSB3b3JraW5nIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgVXNlIHRoZXNlIGNvbW1hbmRzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaWJnbGFkZQorICAgICAkIGJpdGJha2UgcGFja2FnZS1pbmRleAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE5leHQsIHNvdXJjZSB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBmb3VuZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICBGb2xsb3cgdGhhdCBieSBzZXR0aW5nIHVwIHRoZSBpbnN0YWxsYXRpb24gZGVzdGluYXRpb24gdG8gcG9pbnQgdG8geW91cgorICAgICAgICBzeXNyb290IGFzIDxyZXBsYWNlYWJsZT5zeXNyb290X2RpcjwvcmVwbGFjZWFibGU+LgorICAgICAgICBGaW5hbGx5LCBoYXZlIGFuIE9QS0cgY29uZmlndXJhdGlvbiBmaWxlIDxyZXBsYWNlYWJsZT5jb25mX2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgeW91IGhhdmUganVzdCBjcmVhdGVkLgorICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybXMgc2hvdWxkIG5vdyB3b3JrOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jb25mX2ZpbGU8L3JlcGxhY2VhYmxlPiAtbyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPiB1cGRhdGUKKyAgICAgJCBvcGtnLWNsIOKAk2YgPHJlcGxhY2VhYmxlPmNjb25mX2ZpbGU8L3JlcGxhY2VhYmxlPiAtbyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPiBcCisgICAgICAgIC0tZm9yY2Utb3ZlcndyaXRlIGluc3RhbGwgbGliZ2xhZGUKKyAgICAgJCBvcGtnLWNsIOKAk2YgPHJlcGxhY2VhYmxlPmNjb25mX2ZpbGU8L3JlcGxhY2VhYmxlPiAtbyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPiBcCisgICAgICAgIC0tZm9yY2Utb3ZlcndyaXRlIGluc3RhbGwgbGliZ2xhZGUtZGJnCisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jb25mX2ZpbGUmZ3Q7IC1vIDwvcmVwbGFjZWFibGU+c3lzcm9vdF9kaXImZ3Q7IFwKKyAgICAgICAgLS1mb3JjZS1vdmVyd3JpdGUgaW5zdGFsbCBsaWJnbGFkZS1kZXYKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXByZXBhcmUueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXByZXBhcmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjU2OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtcHJlcGFyZS54bWwKQEAgLTAsMCArMSw5ODQgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdhZHQtcHJlcGFyZSc+CisKKzx0aXRsZT5QcmVwYXJpbmcgZm9yIEFwcGxpY2F0aW9uIERldmVsb3BtZW50PC90aXRsZT4KKworPHBhcmE+CisgICAgSW4gb3JkZXIgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMsIHlvdSBuZWVkIHNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLgorICAgIFNldmVyYWwgd2F5cyBleGlzdCB0aGF0IGFsbG93IHlvdSB0byBpbnN0YWxsIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzLCBRRU1VLCB0aGUKKyAgICBFY2xpcHNlIFlvY3RvIFBsdWctaW4sIGFuZCBvdGhlciB0b29scy4KKyAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGhvdyB0byBwcmVwYXJlIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudC4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J2luc3RhbGxpbmctdGhlLWFkdCc+CisgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIEFEVCBhbmQgVG9vbGNoYWluczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyBpbnN0YWxsYXRpb24gbWV0aG9kcyB0aGF0IHNldCB1cCB2YXJ5aW5nCisgICAgICAgIGRlZ3JlZXMgb2YgdG9vbCBhdmFpbGFiaWxpdHkgb24geW91ciBzeXN0ZW0uCisgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIGluc3RhbGxhdGlvbiBtZXRob2QgeW91IGNob29zZSwKKyAgICAgICAgeW91IG11c3QgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSBjcm9zcy10b29sY2hhaW4KKyAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCB3aGljaCBlc3RhYmxpc2hlcyBzZXZlcmFsIGtleQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGJlZm9yZSB5b3UgdXNlIGEgdG9vbGNoYWluLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF2b2lkIG1peGluZyBpbnN0YWxsYXRpb24gbWV0aG9kcyB3aGVuIGluc3RhbGxpbmcgdG9vbGNoYWlucyBmb3IKKyAgICAgICAgICAgIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGF2b2lkIHVzaW5nIHRoZSBBRFQgSW5zdGFsbGVyIHRvIGluc3RhbGwgc29tZQorICAgICAgICAgICAgdG9vbGNoYWlucyBhbmQgdGhlbiBoYW5kLWluc3RhbGxpbmcgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucworICAgICAgICAgICAgYnkgcnVubmluZyB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBmb3IgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICBNaXhpbmcgaW5zdGFsbGF0aW9uIG1ldGhvZHMgY2FuIHJlc3VsdCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZQorICAgICAgICAgICAgQURUIEluc3RhbGxlciBiZWNvbWVzIHVucmVsaWFibGUgYW5kIG1pZ2h0IG5vdCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgdG9vbGNoYWluLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgbXVzdCBtaXggaW5zdGFsbGF0aW9uIG1ldGhvZHMsIHlvdSBtaWdodCBhdm9pZCBwcm9ibGVtcyBieQorICAgICAgICAgICAgZGVsZXRpbmcgPGZpbGVuYW1lPi92YXIvbGliL29wa2c8L2ZpbGVuYW1lPiwgdGh1cyBwdXJnaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiBwYWNrYWdlIG1ldGFkYXRhLgorICAgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSB0aGUgQURUIGluc3RhbGxlciBzY3JpcHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGluc3RhbGwgdGhlIEFEVCBiZWNhdXNlIGl0CisgICAgICAgICAgICAgICAgYXV0b21hdGVzIG11Y2ggb2YgdGhlIHByb2Nlc3MgZm9yIHlvdS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBjb25maWd1cmUgdGhlIGluc3RhbGxhdGlvbiB0byBpbnN0YWxsIHRoZSBRRU1VIGVtdWxhdG9yCisgICAgICAgICAgICAgICAgYW5kIHRoZSB1c2VyLXNwYWNlIE5GUywgc3BlY2lmeSB3aGljaCByb290IGZpbGVzeXN0ZW0gcHJvZmlsZXMgdG8gZG93bmxvYWQsCisgICAgICAgICAgICAgICAgYW5kIGRlZmluZSB0aGUgdGFyZ2V0IHN5c3Jvb3QgbG9jYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBhbiBleGlzdGluZyB0b29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG1ldGhvZCwgeW91IHNlbGVjdCBhbmQgZG93bmxvYWQgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljCisgICAgICAgICAgICAgICAgdG9vbGNoYWluIGluc3RhbGxlciBhbmQgdGhlbiBydW4gdGhlIHNjcmlwdCB0byBoYW5kLWluc3RhbGwgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kLCB5b3UganVzdCBnZXQgdGhlIGNyb3NzLXRvb2xjaGFpbiBhbmQgUUVNVSAtIHlvdSBkbyBub3QKKyAgICAgICAgICAgICAgICBnZXQgYW55IG9mIHRoZSBvdGhlciBtZW50aW9uZWQgYmVuZWZpdHMgaGFkIHlvdSBydW4gdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgdGhlIHRvb2xjaGFpbiBmcm9tIHdpdGhpbiB0aGUgQnVpbGQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSWYgeW91IGFscmVhZHkgaGF2ZSBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGJ1aWxkIHRoZSBjcm9zcy10b29sY2hhaW4gd2l0aGluIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgbGlrZSB0aGUgcHJldmlvdXMgbWV0aG9kIG1lbnRpb25lZCwgeW91IG9ubHkgZ2V0IHRoZSBjcm9zcy10b29sY2hhaW4gYW5kIFFFTVUgLSB5b3UKKyAgICAgICAgICAgICAgICBkbyBub3QgZ2V0IGFueSBvZiB0aGUgb3RoZXIgYmVuZWZpdHMgd2l0aG91dCB0YWtpbmcgc2VwYXJhdGUgc3RlcHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtYWR0LWluc3RhbGxlcic+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgQURUIEluc3RhbGxlcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBydW4gdGhlIEFEVCBJbnN0YWxsZXIsIHlvdSBuZWVkIHRvIGdldCB0aGUgQURUIEluc3RhbGxlciB0YXJiYWxsLCBiZSBzdXJlCisgICAgICAgICAgICB5b3UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGhvc3QgZGV2ZWxvcG1lbnQgcGFja2FnZXMgdGhhdCBzdXBwb3J0IHRoZSBBRFQgSW5zdGFsbGVyLAorICAgICAgICAgICAgYW5kIHRoZW4gcnVuIHRoZSBBRFQgSW5zdGFsbGVyIFNjcmlwdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgaG9zdCBwYWNrYWdlcyBuZWVkZWQgdG8gc3VwcG9ydCBBRFQgaW5zdGFsbGF0aW9uIGFuZCB1c2UsIHNlZSB0aGUKKyAgICAgICAgICAgICJBRFQgSW5zdGFsbGVyIEV4dHJhcyIgbGlzdHMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVxdWlyZWQtcGFja2FnZXMtZm9yLXRoZS1ob3N0LWRldmVsb3BtZW50LXN5c3RlbSc+UmVxdWlyZWQgUGFja2FnZXMgZm9yIHRoZSBIb3N0IERldmVsb3BtZW50IFN5c3RlbTwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dldHRpbmctdGhlLWFkdC1pbnN0YWxsZXItdGFyYmFsbCc+CisgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyB0aGUgQURUIEluc3RhbGxlciBUYXJiYWxsPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEFEVCBJbnN0YWxsZXIgaXMgY29udGFpbmVkIGluIHRoZSBBRFQgSW5zdGFsbGVyIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhlIHRhcmJhbGwgdXNpbmcgZWl0aGVyIG9mIHRoZXNlIG1ldGhvZHM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCB0aGUgVGFyYmFsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkb3dubG9hZCB0aGUgdGFyYmFsbCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQURUSU5TVEFMTEVSX0RMX1VSTDsnPjwvdWxpbms+IGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFueSBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIFRhcmJhbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgdGhlIHRhcmJhbGwgaW5zaWRlIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZSBCaXRCYWtlIHRvIGdlbmVyYXRlIHRoZSBBRFQgSW5zdGFsbGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJiYWxsLCB5b3UgbXVzdCA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkgYmVmb3JlIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgdGhhdCBjcmVhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyYmFsbC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgY29tbWFuZHMgZXN0YWJsaXNoCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrIG91dCB0aGUgY3VycmVudCByZWxlYXNlIGJyYW5jaCwgc2V0IHVwIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQgd2hpbGUgYWxzbyBjcmVhdGluZyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LCBhbmQgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRoYXQgcmVzdWx0cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL3RtcC9kZXBsb3kvc2RrL2FkdF9pbnN0YWxsZXIudGFyLmJ6MjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHVzaW5nIEJpdEJha2UgdG8gYnVpbGQgdGhlIEFEVCB0YXJiYWxsLCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmUgdG8gbWFrZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaXMgcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNlci1jb25maWd1cmF0aW9uJz5Vc2VyIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgJkRJU1RST19OQU1FOyBvcmlnaW4vJkRJU1RST19OQU1FOworICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAkIGJpdGJha2UgYWR0LWluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLWFuZC1ydW5uaW5nLXRoZS1hZHQtaW5zdGFsbGVyLXNjcmlwdCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgYW5kIFJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIgU2NyaXB0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0LCB5b3UgbmVlZCB0byB1bnBhY2sgdGhlIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1bnBhY2sgdGhlIHRhcmJhbGwgaW4gYW55IGRpcmVjdG9yeSB5b3Ugd2lzaC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBjb21tYW5kIGNvcGllcyB0aGUgQURUIEluc3RhbGxlciB0YXJiYWxsIGZyb20gd2hlcmUKKyAgICAgICAgICAgICAgICBpdCB3YXMgYnVpbHQgaW50byB0aGUgaG9tZSBkaXJlY3RvcnkgYW5kIHRoZW4gdW5wYWNrcyB0aGUgdGFyYmFsbCBpbnRvCisgICAgICAgICAgICAgICAgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT5hZHQtaW5zdGFsbGVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBjcCBwb2t5L2J1aWxkL3RtcC9kZXBsb3kvc2RrL2FkdF9pbnN0YWxsZXIudGFyLmJ6MiAkSE9NRQorICAgICAkIHRhciAteGpmIGFkdF9pbnN0YWxsZXIudGFyLmJ6MgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVbnBhY2tpbmcgaXQgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IDxmaWxlbmFtZT5hZHQtaW5zdGFsbGVyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgd2hpY2ggY29udGFpbnMgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0ICg8ZmlsZW5hbWU+YWR0X2luc3RhbGxlcjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIGFuZCBpdHMgY29uZmlndXJhdGlvbiBmaWxlICg8ZmlsZW5hbWU+YWR0X2luc3RhbGxlci5jb25mPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IHJ1biB0aGUgc2NyaXB0LCBob3dldmVyLCB5b3Ugc2hvdWxkIGV4YW1pbmUgdGhlIEFEVCBJbnN0YWxsZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYW5kIGJlIHN1cmUgeW91IGFyZSBnb2luZyB0byBnZXQgd2hhdCB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICBZb3VyIGNvbmZpZ3VyYXRpb25zIGRldGVybWluZSB3aGljaCBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gaW1hZ2UgYXJlIGRvd25sb2FkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlIGNvbmZpZ3VyYXRpb25zIHlvdSBjYW4gZGVmaW5lIGZvciB0aGUgQURUIEluc3RhbGxlci4KKyAgICAgICAgICAgICAgICBGb3IgY29uZmlndXJhdGlvbiB2YWx1ZXMgYW5kIHJlc3RyaWN0aW9ucywgc2VlIHRoZSBjb21tZW50cyBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlci5jb25mPC9maWxlbmFtZT4gZmlsZToKKworICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfUkVQTzwvZmlsZW5hbWU+OiBUaGlzIGFyZWEKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSBJUEtHLWJhc2VkIHBhY2thZ2VzIGFuZCB0aGUgcm9vdCBmaWxlc3lzdGVtIHVwb24gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsYXRpb24gaXMgYmFzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzZXQgdXAgeW91ciBvd24gSVBLRyByZXBvc2l0b3J5IHBvaW50ZWQgdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9SRVBPPC9maWxlbmFtZT4sIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9sbG93cyB0aGUgc2FtZSBsYXlvdXQgYXMgdGhlIHJlZmVyZW5jZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCB1cCBhdCA8dWxpbmsgdXJsPSdodHRwOi8vYWR0cmVwby55b2N0b3Byb2plY3Qub3JnJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIHlvdXIgcmVwb3NpdG9yeSBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggSFRUUC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRTPC9maWxlbmFtZT46IFRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggeW91IHdhbnQgdG8gc2V0IHVwIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfUUVNVTwvZmlsZW5hbWU+OiBJbmRpY2F0ZXMgd2hldGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgb3Igbm90IHRvIGluc3RhbGwgdGhlIGVtdWxhdG9yIFFFTVUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfTkZTX1VUSUw8L2ZpbGVuYW1lPjogSW5kaWNhdGVzIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIG5vdCB0byBpbnN0YWxsIHVzZXItbW9kZSBORlMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIEVjbGlwc2UgSURFIFlvY3RvIHBsdWctaW4gYWdhaW5zdCBRRU1VLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IHNob3VsZCBpbnN0YWxsIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPlRvIGJvb3QgUUVNVSBpbWFnZXMgdXNpbmcgb3VyIHVzZXJzcGFjZSBORlMgc2VydmVyLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJ1bm5pbmcgPGZpbGVuYW1lPnBvcnRtYXA8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+LCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gYWRkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4taTwvZmlsZW5hbWU+IG9wdGlvbiB3aGVuIDxmaWxlbmFtZT5ycGNiaW5kPC9maWxlbmFtZT4gc3RhcnRzIHVwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiBkb2luZyB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCBhbHNvIGhhdmUgdG8gbW9kaWZ5IHlvdXIgZmlyZXdhbGwgc2V0dGluZ3MgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORlMgYm9vdGluZyB0byB3b3JrLjwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+OiBUaGUgcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBpbWFnZXMgeW91IHdhbnQgdG8gZG93bmxvYWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9JUEtHX1JFUE88L2ZpbGVuYW1lPiByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPjogVGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHJvb3QgZmlsZXN5c3RlbSB1c2VkIHRvIGV4dHJhY3QgYW5kIGNyZWF0ZSB0aGUgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBtdXN0IGhhdmUgYmVlbiBzcGVjaWZpZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllPQ1RPQURUX1JPT1RGU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRvd25sb2FkZWQgYm90aCA8ZmlsZW5hbWU+bWluaW1hbDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNhdG8tc2RrPC9maWxlbmFtZT4gaW1hZ2VzIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICB0byAibWluaW1hbCBzYXRvLXNkayIsIHRoZW4gPGZpbGVuYW1lPllPQ1RPQURUX1JPT1RGU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgc2V0IHRvIGVpdGhlciAibWluaW1hbCIgb3IgInNhdG8tc2RrIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT46IFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gb24gdGhlIGRldmVsb3BtZW50IGhvc3Qgd2hlcmUgdGhlIHRhcmdldCBzeXNyb290IGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgY29uZmlndXJlZCB0aGUgPGZpbGVuYW1lPmFkdF9pbnN0YWxsZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgcnVuIHRoZSBpbnN0YWxsZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBhZHQtaW5zdGFsbGVyCisgICAgICQgLi9hZHRfaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGluc3RhbGxlciBiZWdpbnMgdG8gcnVuLCB5b3UgYXJlIGFza2VkIHRvIGVudGVyIHRoZQorICAgICAgICAgICAgICAgIGxvY2F0aW9uIGZvciBjcm9zcy10b29sY2hhaW4gaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGxvY2F0aW9uIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgQWZ0ZXIgZWl0aGVyIGFjY2VwdGluZyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvciBzZWxlY3RpbmcgeW91cgorICAgICAgICAgICAgICAgIG93biBsb2NhdGlvbiwgeW91IGFyZSBwcm9tcHRlZCB0byBydW4gdGhlIGluc3RhbGxhdGlvbiBzY3JpcHQKKyAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZWx5IG9yIGluIHNpbGVudCBtb2RlLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGNsb3NlbHkgbW9uaXRvciB0aGUgaW5zdGFsbGF0aW9uLAorICAgICAgICAgICAgICAgIGNob29zZSDigJxJ4oCdIGZvciBpbnRlcmFjdGl2ZSBtb2RlIHJhdGhlciB0aGFuIOKAnFPigJ0gZm9yIHNpbGVudCBtb2RlLgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGUgcHJvbXB0cyBmcm9tIHRoZSBzY3JpcHQgdG8gY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGUgaW5zdGFsbGF0aW9uIGNvbXBsZXRlcywgdGhlIEFEVCwgd2hpY2ggaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluLCBpcyBpbnN0YWxsZWQgaW4gdGhlIHNlbGVjdGVkIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgZW52aXJvbm1lbnQgc2V0dXAgZmlsZXMgZm9yIHRoZSBjcm9zcy10b29sY2hhaW4KKyAgICAgICAgICAgICAgICBpbiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgYW5kIGltYWdlIHRhcmJhbGxzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hZHQtaW5zdGFsbGVyPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFjY29yZGluZyB0byB5b3VyCisgICAgICAgICAgICAgICAgaW5zdGFsbGVyIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIHRhcmdldCBzeXNyb290IGxvY2F0ZWQKKyAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbHNvIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyBhIENyb3NzLVRvb2xjaGFpbiBUYXJiYWxsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNpbXBseSBpbnN0YWxsIGEgY3Jvc3MtdG9vbGNoYWluIGJ5IGhhbmQsIHlvdSBjYW4KKyAgICAgICAgICAgIGRvIHNvIGJ5IHJ1bm5pbmcgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIuCisgICAgICAgICAgICBUaGUgaW5zdGFsbGVyIGluY2x1ZGVzIHRoZSBwcmUtYnVpbHQgY3Jvc3MtdG9vbGNoYWluLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0LCBhbmQgc3VwcG9ydCBmaWxlcy4KKyAgICAgICAgICAgIElmIHlvdSB1c2UgdGhpcyBtZXRob2QgdG8gaW5zdGFsbCB0aGUgY3Jvc3MtdG9vbGNoYWluLCB5b3UKKyAgICAgICAgICAgIG1pZ2h0IHN0aWxsIG5lZWQgdG8gaW5zdGFsbCB0aGUgdGFyZ2V0IHN5c3Jvb3QgYnkgaW5zdGFsbGluZyBhbmQKKyAgICAgICAgICAgIGV4dHJhY3RpbmcgaXQgc2VwYXJhdGVseS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgc3lzcm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IHlvdXIgdG9vbGNoYWluIGluc3RhbGxlciB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R28gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZpbmQgdGhlIGZvbGRlciB0aGF0IG1hdGNoZXMgeW91ciBob3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgc3lzdGVtIChpLmUuIDxmaWxlbmFtZT5pNjg2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgMzItYml0IG1hY2hpbmVzIG9yIDxmaWxlbmFtZT54ODZfNjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciA2NC1iaXQgbWFjaGluZXMpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5HbyBpbnRvIHRoYXQgZm9sZGVyIGFuZCBkb3dubG9hZCB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVyIHdob3NlIG5hbWUgaW5jbHVkZXMgdGhlIGFwcHJvcHJpYXRlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWlucyBwcm92aWRlZCBieSB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBiYXNlZCBvZmYgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gbGlicmFyaWVzIGFwcHJvcHJpYXRlIGZvciBkZXZlbG9waW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGF0IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NC1iaXQgeDg2IHN5c3RlbSBhbmQgeW91IGFyZSBnb2luZyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGNyb3NzLXRvb2xjaGFpbiBmb3IgYSAzMi1iaXQgeDg2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBnbyBpbnRvIHRoZSA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXIgYW5kIGRvd25sb2FkIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHlvdXIgb3duIHRvb2xjaGFpbiBpbnN0YWxsZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGNhc2VzIHdoZXJlIHlvdSBjYW5ub3QgdXNlIGFuIGluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGRvd25sb2FkIGFyZWEsIHlvdSBjYW4gYnVpbGQgeW91ciBvd24gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PbmNlIHlvdSBoYXZlIHRoZSBpbnN0YWxsZXIsIHJ1biBpdCB0byBpbnN0YWxsIHRoZSB0b29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlciBzY3JpcHQgc28gdGhhdCBpdCBpcyBleGVjdXRhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGNvbW1hbmQgc2hvd3MgaG93IHRvIHJ1biB0aGUgaW5zdGFsbGVyCisgICAgICAgICAgICAgICAgICAgIGdpdmVuIGEgdG9vbGNoYWluIHRhcmJhbGwgZm9yIGEgNjQtYml0IHg4NiBkZXZlbG9wbWVudCBob3N0CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhbmQgYSAzMi1iaXQgeDg2IHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGFzc3VtZXMgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgaXMgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+fi9Eb3dubG9hZHMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB+L0Rvd25sb2Fkcy9wb2t5LWdsaWJjLXg4Nl82NC1jb3JlLWltYWdlLXNhdG8taTU4Ni10b29sY2hhaW4tJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgdGhlIGluc3RhbGxlciBwcm9tcHRzIHlvdSBmb3IgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZGlyZWN0b3J5IHVzZWQgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaW50byB3aGljaCB5b3UgYXJlIGluc3RhbGxpbmcgdGhlIHRvb2xjaGFpbiwgdGhlCisgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBpbnN0YWxsZXIgbm90aWZpZXMgeW91IGFuZCBleGl0cy4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucyBpbiB0aGUgZGlyZWN0b3J5IGFuZAorICAgICAgICAgICAgICAgICAgICBydW4gdGhlIGluc3RhbGxlciBhZ2Fpbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdGhlIHNjcmlwdCBmaW5pc2hlcywgdGhlIGNyb3NzLXRvb2xjaGFpbiBpcworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSBlbnZpcm9ubWVudCBzZXR1cCBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbiBpbiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXRoZS10b29sY2hhaW4tZnJvbS13aXRoaW4tdGhlLWJ1aWxkLXRyZWUnPgorICAgICAgICA8dGl0bGU+VXNpbmcgQml0QmFrZSBhbmQgdGhlIEJ1aWxkIERpcmVjdG9yeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGZpbmFsIHdheSBvZiBtYWtpbmcgdGhlIGNyb3NzLXRvb2xjaGFpbiBhdmFpbGFibGUgaXMgdG8gdXNlIEJpdEJha2UKKyAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSB0b29sY2hhaW4gd2l0aGluIGFuIGV4aXN0aW5nCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgVGhpcyBtZXRob2QgZG9lcyBub3QgaW5zdGFsbCB0aGUgdG9vbGNoYWluIGludG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgQXMgd2l0aCB0aGUgcHJldmlvdXMgbWV0aG9kLCBpZiB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSB0YXJnZXQgc3lzcm9vdCwgeW91IG11c3QKKyAgICAgICAgICAgIGRvIHRoYXQgc2VwYXJhdGVseSBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gZ2VuZXJhdGUgdGhlIHRvb2xjaGFpbiBpbnRvIHRoZSBCdWlsZCBEaXJlY3Rvcnk6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgdGhlIEJ1aWxkIEVudmlyb25tZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50IHNldHVwCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayB5b3VyIExvY2FsIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3Ugc2hvdWxkIGJlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGxpc3QgdGhlIHZhbHVlcyB5b3UgY2FuIHVzZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBwb3B1bGF0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW5zIGZvciBtb3JlIHRoYW4gYSBzaW5nbGUgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGp1c3QgbmVlZCB0byBlZGl0IHRoZSA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcmUtcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBDcm9zcy1Ub29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUnVuIDxmaWxlbmFtZT5iaXRiYWtlIG1ldGEtaWRlLXN1cHBvcnQ8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgY3Jvc3MtdG9vbGNoYWluIGdlbmVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBmaW5pc2hlcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNyb3NzLXRvb2xjaGFpbiBpcworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgYW5kIHBvcHVsYXRlZCB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgbm90aWNlIGVudmlyb25tZW50IHNldHVwIGZpbGVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluIHRoYXQgY29udGFpbiB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXA8L2ZpbGVuYW1lPiIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSdzIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBmb2xkZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZSBhd2FyZSB0aGF0IHdoZW4geW91IHVzZSB0aGlzIG1ldGhvZCB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHlvdSBzdGlsbCBuZWVkIHRvIHNlcGFyYXRlbHkgZXh0cmFjdCBhbmQgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICB0aGUgc3lzcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGRvIHRoaXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQnPgorICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIHlvdSBjYW4gZGV2ZWxvcCB1c2luZyB0aGUgY3Jvc3MtdG9vbGNoYWluLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlCisgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50IGJ5IHNvdXJjaW5nIHRoZSB0b29sY2hhaW4ncyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIElmIHlvdSB1c2VkIHRoZSBBRFQgSW5zdGFsbGVyIG9yIGhhbmQtaW5zdGFsbGVkIGNyb3NzLXRvb2xjaGFpbiwKKyAgICAgICAgdGhlbiB5b3UgY2FuIGZpbmQgdGhpcyBzY3JpcHQgaW4gdGhlIGRpcmVjdG9yeSB5b3UgY2hvc2UgZm9yIGluc3RhbGxhdGlvbi4KKyAgICAgICAgRm9yIHRoaXMgcmVsZWFzZSwgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBpcworICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX0FEVFBBVEhfRElSOzwvZmlsZW5hbWU+LgorICAgICAgICBJZiB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4gaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgIHlvdSBjYW4gZmluZCB0aGUgZW52aXJvbm1lbnQgc2V0dXAKKyAgICAgICAgc2NyaXB0IGZvciB0aGUgdG9vbGNoYWluIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkncyA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCZSBzdXJlIHRvIHJ1biB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRoYXQgbWF0Y2hlcyB0aGUKKyAgICAgICAgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGRldmVsb3BpbmcuCisgICAgICAgIEVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgYmVnaW4gd2l0aCB0aGUgc3RyaW5nCisgICAgICAgICI8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXA8L2ZpbGVuYW1lPiIgYW5kIGluY2x1ZGUgYXMgcGFydCBvZiB0aGVpcgorICAgICAgICBuYW1lIHRoZSBhcmNoaXRlY3R1cmUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdG9vbGNoYWluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBmb3IgYSA2NC1iaXQKKyAgICAgICAgSUEtYmFzZWQgYXJjaGl0ZWN0dXJlIGluc3RhbGxlZCBpbiB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisgICAgICAgIHdvdWxkIGJlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJllPQ1RPX0FEVFBBVEhfRElSOy9lbnZpcm9ubWVudC1zZXR1cC14ODZfNjQtcG9reS1saW51eAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFdoZW4geW91IHJ1biB0aGUgc2V0dXAgc2NyaXB0LCBtYW55IGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgZGVmaW5lZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0RLVEFSR0VUU1lTUk9PVCc+PGZpbGVuYW1lPlNES1RBUkdFVFNZU1JPT1Q8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgdXNlZCBmb3IgY3Jvc3MtY29tcGlsYXRpb24KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBLR19DT05GSUdfUEFUSCc+PGZpbGVuYW1lPlBLR19DT05GSUdfUEFUSDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgcGF0aCB0byB0aGUgdGFyZ2V0IHBrZy1jb25maWcgZmlsZXMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR19TSVRFJz48ZmlsZW5hbWU+Q09ORklHX1NJVEU8L2ZpbGVuYW1lPjwvdWxpbms+IC0gQSBHTlUgYXV0b2NvbmYgc2l0ZSBmaWxlIHByZWNvbmZpZ3VyZWQgZm9yIHRoZSB0YXJnZXQKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNDJz48ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQyBjb21waWxlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1hYJz48ZmlsZW5hbWU+Q1hYPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMrKyBjb21waWxlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1BQJz48ZmlsZW5hbWU+Q1BQPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1BUyc+PGZpbGVuYW1lPkFTPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIGFzc2VtYmxlcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEQnPjxmaWxlbmFtZT5MRDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBsaW5rZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUdEQic+PGZpbGVuYW1lPkdEQjwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBHTlUgRGVidWdnZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUUklQJz48ZmlsZW5hbWU+U1RSSVA8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnc3RyaXAnLCB3aGljaCBzdHJpcHMgc3ltYm9scworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkFOTElCJz48ZmlsZW5hbWU+UkFOTElCPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3JhbmxpYicKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU9CSkNPUFknPjxmaWxlbmFtZT5PQkpDT1BZPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ29iamNvcHknCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PQkpEVU1QJz48ZmlsZW5hbWU+T0JKRFVNUDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpkdW1wJworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQVInPjxmaWxlbmFtZT5BUjwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdhcicKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU5NJz48ZmlsZW5hbWU+Tk08L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnbm0nCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggZm9yIHRoZSB0YXJnZXQgdG9vbHMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNST1NTX0NPTVBJTEUnPjxmaWxlbmFtZT5DUk9TU19DT01QSUxFPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCBmb3IgdGhlIHRhcmdldCB0b29scworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09ORklHVVJFX0ZMQUdTJz48ZmlsZW5hbWU+Q09ORklHVVJFX0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGFyZ3VtZW50cyBmb3IgR05VIGNvbmZpZ3VyZQorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBDIGZsYWdzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DWFhGTEFHUyc+PGZpbGVuYW1lPkNYWEZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBDKysgZmxhZ3MKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBsaW5rZXIgZmxhZ3Mgd2hlbiB5b3UgdXNlIENDIHRvIGxpbmsKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNQUEZMQUdTJz48ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPjwvdWxpbms+IC0gU3VnZ2VzdGVkIHByZXByb2Nlc3NvciBmbGFncworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc2VjdXJpbmcta2VybmVsLWFuZC1maWxlc3lzdGVtLWltYWdlcyc+CisgICAgPHRpdGxlPlNlY3VyaW5nIEtlcm5lbCBhbmQgRmlsZXN5c3RlbSBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBpbWFnZSB0byBib290IHVzaW5nIHlvdXIKKyAgICAgICAgaGFyZHdhcmUgb3IgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgIEZ1cnRoZXJtb3JlLCBpZiB5b3UgcGxhbiBvbiBib290aW5nIHlvdXIgaW1hZ2UgdXNpbmcgTkZTIG9yIHlvdSB3YW50IHRvIHVzZSB0aGUgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgIGFzIHRoZSB0YXJnZXQgc3lzcm9vdCwgeW91IG5lZWQgdG8gZXh0cmFjdCB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdnZXR0aW5nLXRoZS1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+R2V0dGluZyB0aGUgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGdldCB0aGUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGltYWdlcywgeW91IGVpdGhlciBoYXZlIHRvIGJ1aWxkIHRoZW0gb3IgZG93bmxvYWQKKyAgICAgICAgICAgIHByZS1idWlsdCB2ZXJzaW9ucy4KKyAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGhvdyB0byBidWlsZCB0aGVzZSBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWRpbmctaW1hZ2VzJz5CdWlkaW5nIEltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGRvd25sb2FkaW5nIHByZS1idWlsZCB2ZXJzaW9ucywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLXByZS1idWlsdCc+RXhhbXBsZSBVc2luZyBQcmUtQnVpbHQgQmluYXJpZXMgYW5kIFFFTVU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hpcHMgYmFzaWMga2VybmVsIGFuZCBmaWxlc3lzdGVtIGltYWdlcyBmb3Igc2V2ZXJhbAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyAoPGZpbGVuYW1lPng4NjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+eDg2LTY0PC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWlwczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cG93ZXJwYzwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPmFybTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgdGhhdCB5b3UgY2FuIHVzZSB1bmFsdGVyZWQgaW4gdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICBUaGVzZSBrZXJuZWwgaW1hZ2VzIHJlc2lkZSBpbiB0aGUgcmVsZWFzZQorICAgICAgICAgICAgYXJlYSAtIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48L3VsaW5rPgorICAgICAgICAgICAgYW5kIGFyZSBpZGVhbCBmb3IgZXhwZXJpbWVudGF0aW9uIHVzaW5nIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIGltYWdlIHR5cGVzIHlvdSBjYW4gYnVpbGQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgcGxhbm5pbmcgb24gZGV2ZWxvcGluZyBhZ2FpbnN0IHlvdXIgaW1hZ2UgYW5kIHlvdSBhcmUgbm90CisgICAgICAgICAgICBidWlsZGluZyBvciB1c2luZyBvbmUgb2YgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgaW1hZ2VzCisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS0qLWRldjwvZmlsZW5hbWU+KSwgeW91IG11c3QgYmUgc3VyZSB0bworICAgICAgICAgICAgaW5jbHVkZSB0aGUgZGV2ZWxvcG1lbnQgcGFja2FnZXMgYXMgcGFydCBvZiB5b3VyIGltYWdlIHJlY2lwZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHBsYW4gb24gcmVtb3RlbHkgZGVwbG95aW5nIGFuZCBkZWJ1Z2dpbmcgeW91cgorICAgICAgICAgICAgYXBwbGljYXRpb24gZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgbXVzdCBoYXZlIGFuIGltYWdlCisgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIHRoZSBZb2N0byBUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgKFRDRikgYWdlbnQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+dGNmLWFnZW50PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IGluY2x1ZGluZyB0aGUgPGZpbGVuYW1lPmVjbGlwc2UtZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW1hZ2UgZmVhdHVyZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWZlYXR1cmVzLWltYWdlJz5JbWFnZSBGZWF0dXJlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICBpbWFnZSBmZWF0dXJlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIFRvIGluY2x1ZGUgdGhlIDxmaWxlbmFtZT5lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4gaW1hZ2UgZmVhdHVyZSwKKyAgICAgICAgICAgIG1vZGlmeSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIHNvIHRoYXQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGluY2x1ZGVzIHRoZSAiZWNsaXBzZS1kZWJ1ZyIgZmVhdHVyZS4KKyAgICAgICAgICAgIEFmdGVyIG1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB5b3UgY2FuIHJlYnVpbGQgdGhlIGltYWdlLgorICAgICAgICAgICAgT25jZSB0aGUgaW1hZ2UgaXMgcmVidWlsdCwgdGhlIDxmaWxlbmFtZT50Y2YtYWdlbnQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgaW1hZ2UgYW5kIGlzIGxhdW5jaGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIKKyAgICAgICAgICAgIHRoZSBib290LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5FeHRyYWN0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGluc3RhbGwgeW91ciB0b29sY2hhaW4gYnkgaGFuZCBvciBidWlsZCBpdCB1c2luZyBCaXRCYWtlIGFuZAorICAgICAgICAgICAgeW91IG5lZWQgYSByb290IGZpbGVzeXN0ZW0sIHlvdSBuZWVkIHRvIGV4dHJhY3QgaXQgc2VwYXJhdGVseS4KKyAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIEFEVCBJbnN0YWxsZXIgdG8gaW5zdGFsbCB0aGUgQURULCB0aGUgcm9vdAorICAgICAgICAgICAgZmlsZXN5c3RlbSBpcyBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHlvdSBuZWVkIHRvIGV4dHJhY3QgdGhlIHJvb3QgZmlsZXN5c3RlbToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSB3YW50IHRvIGJvb3QgdGhlIGltYWdlIHVzaW5nIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSB3YW50IHRvIHVzZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBFY2xpcHNlIElERSBlbnZpcm9ubWVudCB3aXRoIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFBsdWctaW4gaW5zdGFsbGVkIGFsbG93cyB5b3UgdG8gdXNlIFFFTVUgdG8gYm9vdAorICAgICAgICAgICAgICAgICAgICB1bmRlciBORlMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSB3YW50IHRvIGRldmVsb3AgeW91ciB0YXJnZXQgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyB0aGUgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGV4dHJhY3QgdGhlIHJvb3QgZmlsZXN5c3RlbSwgZmlyc3QgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRvIGVzdGFibGlzaAorICAgICAgICAgICAgbmVjZXNzYXJ5IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAgICAgICAgICAgIElmIHlvdSBidWlsdCB0aGUgdG9vbGNoYWluIGluIHRoZSBCdWlsZCBEaXJlY3RvcnksIHlvdSB3aWxsIGZpbmQKKyAgICAgICAgICAgIHRoZSB0b29sY2hhaW4gZW52aXJvbm1lbnQgc2NyaXB0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIElmIHlvdSBpbnN0YWxsZWQgdGhlIHRvb2xjaGFpbiBieSBoYW5kLCB0aGUgZW52aXJvbm1lbnQgc2V0dXAKKyAgICAgICAgICAgIHNjcmlwdCBpcyBsb2NhdGVkIGluIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgc291cmNpbmcgdGhlIGVudmlyb25tZW50IHNjcmlwdCwgdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBwcm92aWRlIHRoZQorICAgICAgICAgICAgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCisgICAgICAgICAgICBUaGUgc2Vjb25kIGNvbW1hbmQgc2V0cyB1cCB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBzZXR1cCBzY3JpcHQgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgdGhpcmQgY29tbWFuZCBleHRyYWN0cyB0aGUgcm9vdCBmaWxlc3lzdGVtIGZyb20gYSBwcmV2aW91c2x5CisgICAgICAgICAgICBidWlsdCBmaWxlc3lzdGVtIHRoYXQgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5+L0Rvd25sb2FkczwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGlzIGNvbW1hbmQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbnRvIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtc2F0bzwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgc291cmNlIC9vcHQvcG9reS8mRElTVFJPOy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKKyAgICAgJCBydW5xZW11LWV4dHJhY3Qtc2RrIFwKKyAgICAgICAgfi9Eb3dubG9hZHMvY29yZS1pbWFnZS1zYXRvLXNkay1xZW11eDg2LTIwMTEwOTE0MTE4MzEucm9vdGZzLnRhci5iejIgXAorICAgICAgICAkSE9NRS9xZW11eDg2LXNhdG8KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjb3VsZCBub3cgcG9pbnQgdG8gdGhlIHRhcmdldCBzeXNyb290IGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni1zYXRvPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+CisgICAgPHRpdGxlPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBhbiBhbHRlcm5hdGl2ZSB0byBsb2NhdGluZyBhbmQgZG93bmxvYWRpbmcgYSB0b29sY2hhaW4gaW5zdGFsbGVyLAorICAgICAgICB5b3UgY2FuIGJ1aWxkIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyIGlmIHlvdSBoYXZlIGEKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBBbHRob3VnaCBub3QgdGhlIHByZWZlcnJlZCBtZXRob2QsIGl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBtZXRhLXRvb2xjaGFpbjwvZmlsZW5hbWU+IHRvIGJ1aWxkIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgIGluc3RhbGxlci4KKyAgICAgICAgICAgIElmIHlvdSBkbyB1c2UgdGhpcyBtZXRob2QsIHlvdSBtdXN0IHNlcGFyYXRlbHkgaW5zdGFsbCBhbmQgZXh0cmFjdAorICAgICAgICAgICAgdGhlIHRhcmdldCBzeXNyb290LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZSBzeXNyb290LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZXh0cmFjdGluZy10aGUtcm9vdC1maWxlc3lzdGVtJz5FeHRyYWN0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyBidWlsZCB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBhbmQgcG9wdWxhdGUgdGhlIFNESyBpbWFnZSwgdXNlIHRoZQorICAgICAgICBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gLWMgcG9wdWxhdGVfc2RrCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgVGhlIGNvbW1hbmQgcmVzdWx0cyBpbiBhIHRvb2xjaGFpbiBpbnN0YWxsZXIgdGhhdCBjb250YWlucyB0aGUgc3lzcm9vdAorICAgICAgICB0aGF0IG1hdGNoZXMgeW91ciB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBbm90aGVyIHBvd2VyZnVsIGZlYXR1cmUgaXMgdGhhdCB0aGUgdG9vbGNoYWluIGlzIGNvbXBsZXRlbHkKKyAgICAgICAgc2VsZi1jb250YWluZWQuCisgICAgICAgIFRoZSBiaW5hcmllcyBhcmUgbGlua2VkIGFnYWluc3QgdGhlaXIgb3duIGNvcHkgb2YKKyAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiwgd2hpY2ggcmVzdWx0cyBpbiBubyBkZXBlbmRlbmNpZXMKKyAgICAgICAgb24gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgIFRvIGFjaGlldmUgdGhpcywgdGhlIHBvaW50ZXIgdG8gdGhlIGR5bmFtaWMgbG9hZGVyIGlzCisgICAgICAgIGNvbmZpZ3VyZWQgYXQgaW5zdGFsbCB0aW1lIHNpbmNlIHRoYXQgcGF0aCBjYW5ub3QgYmUgZHluYW1pY2FsbHkKKyAgICAgICAgYWx0ZXJlZC4KKyAgICAgICAgVGhpcyBpcyB0aGUgcmVhc29uIGZvciBhIHdyYXBwZXIgYXJvdW5kIHRoZQorICAgICAgICA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gYXJjaGl2ZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBmZWF0dXJlIGlzIHRoYXQgb25seSBvbmUgc2V0IG9mIGNyb3NzLWNhbmFkaWFuIHRvb2xjaGFpbgorICAgICAgICBiaW5hcmllcyBhcmUgcHJvZHVjZWQgcGVyIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgVGhpcyBmZWF0dXJlIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSB0YXJnZXQgaGFyZHdhcmUgY2FuCisgICAgICAgIGJlIHBhc3NlZCB0byA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gYXMgYSBzZXQgb2YgY29tcGlsZXIgb3B0aW9ucy4KKyAgICAgICAgVGhvc2Ugb3B0aW9ucyBhcmUgc2V0IHVwIGJ5IHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgYW5kIGNvbnRhaW5lZCBpbgorICAgICAgICB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0MnPjxmaWxlbmFtZT5DQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MRCc+PGZpbGVuYW1lPkxEPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgVGhpcyByZWR1Y2VzIHRoZSBzcGFjZSBuZWVkZWQgZm9yIHRoZSB0b29scy4KKyAgICAgICAgVW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCBhIHN5c3Jvb3QgaXMgc3RpbGwgbmVlZGVkIGZvciBldmVyeSB0YXJnZXQKKyAgICAgICAgc2luY2UgdGhvc2UgYmluYXJpZXMgYXJlIHRhcmdldC1zcGVjaWZpYy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgIFJlbWVtYmVyLCBiZWZvcmUgdXNpbmcgYW55IEJpdEJha2UgY29tbWFuZCwgeW91CisgICAgICAgICBtdXN0IHNvdXJjZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAoaS5lLgorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICBvcgorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICBsb2NhdGVkIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGFuZCB5b3UgbXVzdCBtYWtlIHN1cmUgeW91cgorICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IHZhcmlhYmxlcyBhcmUgY29ycmVjdC4KKyAgICAgICAgIEluIHBhcnRpY3VsYXIsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhlCisgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICB2YXJpYWJsZSBtYXRjaGVzIHRoZSBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgYW5kIHRoYXQKKyAgICAgICAgIHRoZQorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgdmFyaWFibGUgaXMgY29ycmVjdGx5IHNldCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgdG9vbGNoYWluIGRlc2lnbmVkIHRvCisgICAgICAgICBydW4gb24gYW4gYXJjaGl0ZWN0dXJlIHRoYXQgZGlmZmVycyBmcm9tIHlvdXIgY3VycmVudCBkZXZlbG9wbWVudCBob3N0CisgICAgICAgICBtYWNoaW5lIChpLmUuIHRoZSBidWlsZCBtYWNoaW5lKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbXBsZXRlcywgdGhlIHRvb2xjaGFpbgorICAgICAgICBpbnN0YWxsZXIgd2lsbCBiZSBpbgorICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9zZGs8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdG9vbGNoYWluIGRvZXMgbm90IGJ1aWxkIHN0YXRpYyBiaW5hcmllcy4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgdG9vbGNoYWluIHRvIGJ1aWxkIHRoZXNlIHR5cGVzIG9mIGxpYnJhcmllcywKKyAgICAgICAgICAgIHlvdSBuZWVkIHRvIGJlIHN1cmUgeW91ciBpbWFnZSBoYXMgdGhlIGFwcHJvcHJpYXRlIHN0YXRpYworICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbGlicmFyaWVzLgorICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgaW5zaWRlIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgICBpbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJ5IHBhY2thZ2VzLgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdXNpbmcgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gc3RhdGljCisgICAgICAgICAgICBkZXZlbG9wbWVudCBsaWJyYXJpZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBnbGliYy1zdGF0aWNkZXYiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcHRpb25hbGx5LXVzaW5nLWFuLWV4dGVybmFsLXRvb2xjaGFpbic+CisgICAgPHRpdGxlPk9wdGlvbmFsbHkgVXNpbmcgYW4gRXh0ZXJuYWwgVG9vbGNoYWluPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgbWlnaHQgd2FudCB0byB1c2UgYW4gZXh0ZXJuYWwgdG9vbGNoYWluIGFzIHBhcnQgb2YgeW91cgorICAgICAgICBkZXZlbG9wbWVudC4KKyAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIGZ1bmRhbWVudGFsIHN0ZXBzIHlvdSBuZWVkIHRvIGFjY29tcGxpc2gKKyAgICAgICAgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVW5kZXJzdGFuZCB3aGVyZSB0aGUgaW5zdGFsbGVkIHRvb2xjaGFpbiByZXNpZGVzLgorICAgICAgICAgICAgICAgIEZvciBjYXNlcyB3aGVyZSB5b3UgbmVlZCB0byBidWlsZCB0aGUgZXh0ZXJuYWwgdG9vbGNoYWluLCB5b3UKKyAgICAgICAgICAgICAgICB3b3VsZCBuZWVkIHRvIHRha2Ugc2VwYXJhdGUgc3RlcHMgdG8gYnVpbGQgYW5kIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB5b3UgYWRkIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB0b29sY2hhaW4gdG8KKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFNldCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURVJOQUxfVE9PTENIQUlOJz48ZmlsZW5hbWU+RVhURVJOQUxfVE9PTENIQUlOPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdG8gdGhlIGxvY2F0aW9uIGluIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIEEgZ29vZCBleGFtcGxlIG9mIGFuIGV4dGVybmFsIHRvb2xjaGFpbiB1c2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgaXMgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+TWVudG9yIEdyYXBoaWNzPC90cmFkZW1hcms+CisgICAgICAgIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgIFlvdSBjYW4gc2VlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhhdCBwYXJ0aWN1bGFyIGxheWVyIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhdAorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9NZW50b3JFbWJlZGRlZC9tZXRhLXNvdXJjZXJ5Lyc+PC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gZmluZCBmdXJ0aGVyIGluZm9ybWF0aW9uIGJ5IHJlYWRpbmcgYWJvdXQgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UQ01PREUnPjxmaWxlbmFtZT5UQ01PREU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyB2YXJpYWJsZSBnbG9zc2FyeS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctcHJlLWJ1aWx0Jz4KKyAgICAgICAgPHRpdGxlPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIGhhcmR3YXJlLCBsaWJyYXJpZXMgYW5kIHNlcnZpY2VzIGFyZSBzdGFibGUsIHlvdSBjYW4gZ2V0IHN0YXJ0ZWQgYnkgdXNpbmcgYSBwcmUtYnVpbHQgYmluYXJ5CisgICAgICAgICAgICBvZiB0aGUgZmlsZXN5c3RlbSBpbWFnZSwga2VybmVsLCBhbmQgdG9vbGNoYWluIGFuZCBydW4gaXQgdXNpbmcgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICBUaGlzIHNjZW5hcmlvIGlzIHVzZWZ1bCBmb3IgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbiBzb2Z0d2FyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmciIGZvcm1hdD0iUE5HIiBhbGlnbj0nY2VudGVyJyBzY2FsZWZpdD0nMScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxjYXB0aW9uPgorICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nIGEgUHJlLUJ1aWx0IEltYWdlPC9wYXJhPgorICAgICAgICAgICAgPC9jYXB0aW9uPgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2NlbmFyaW8sIHlvdSBuZWVkIHRvIGRvIHNldmVyYWwgdGhpbmdzOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0YWxsIHRoZSBhcHByb3ByaWF0ZSBzdGFuZC1hbG9uZSB0b29sY2hhaW4gdGFyYmFsbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3dubG9hZCB0aGUgcHJlLWJ1aWx0IGltYWdlIHRoYXQgd2lsbCBib290IHdpdGggUUVNVS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIHRvIGdldCB0aGUgUUVNVSBpbWFnZSB0aGF0IG1hdGNoZXMgeW91ciB0YXJnZXQgbWFjaGluZeKAmXMKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgKGUuZy4geDg2LCBBUk0sIGV0Yy4pLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvd25sb2FkIHRoZSBmaWxlc3lzdGVtIGltYWdlIGZvciB5b3VyIHRhcmdldCBtYWNoaW5lJ3MgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNldCB1cCB0aGUgZW52aXJvbm1lbnQgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUgYW5kIHRoZW4gc3RhcnQgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLXRoZS10b29sY2hhaW4nPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIFRvb2xjaGFpbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgYSB0YXJiYWxsIGluc3RhbGxlciwgd2hpY2ggaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgICAgcHJlLWJ1aWx0IHRvb2xjaGFpbiwgdGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzY3JpcHQsIGFuZCBzdXBwb3J0IGZpbGVzIGZyb20gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19UT09MQ0hBSU5fRExfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgVG9vbGNoYWlucyBhcmUgYXZhaWxhYmxlIGZvciAzMi1iaXQgYW5kIDY0LWJpdCB4ODYgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBzeXN0ZW1zIGZyb20gdGhlIDxmaWxlbmFtZT5pNjg2PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbnMgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYXJlIGJhc2VkIG9mZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2UgYW5kIGNvbnRhaW4KKyAgICAgICAgICAgICAgICBsaWJyYXJpZXMgYXBwcm9wcmlhdGUgZm9yIGRldmVsb3BpbmcgYWdhaW5zdCB0aGF0IGltYWdlLgorICAgICAgICAgICAgICAgIEVhY2ggdHlwZSBvZiBkZXZlbG9wbWVudCBzeXN0ZW0gc3VwcG9ydHMgZml2ZSBvciBtb3JlIHRhcmdldAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBuYW1lcyBvZiB0aGUgdGFyYmFsbCBpbnN0YWxsZXIgc2NyaXB0cyBhcmUgc3VjaCB0aGF0IGEKKyAgICAgICAgICAgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBob3N0IHN5c3RlbSBhcHBlYXJzIGZpcnN0IGluIHRoZQorICAgICAgICAgICAgICAgIGZpbGVuYW1lIGFuZCB0aGVuIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgc3RyaW5nCisgICAgICAgICAgICAgICAgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMtPHJlcGxhY2VhYmxlPmhvc3Rfc3lzdGVtPC9yZXBsYWNlYWJsZT4tPHJlcGxhY2VhYmxlPmltYWdlX3R5cGU8L3JlcGxhY2VhYmxlPi08cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LXRvb2xjaGFpbi08cmVwbGFjZWFibGU+cmVsZWFzZV92ZXJzaW9uPC9yZXBsYWNlYWJsZT4uc2gKKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5ob3N0X3N5c3RlbTwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB5b3VyIGRldmVsb3BtZW50IHN5c3RlbToKKworICAgICAgICAgICAgICAgICAgICBpNjg2IG9yIHg4Nl82NC4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmltYWdlX3R5cGU8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGltYWdlIHlvdSB3aXNoIHRvCisgICAgICAgICAgICAgICAgZGV2ZWxvcCBhIFNvZnR3YXJlIERldmVsb3BtZW50IFRvb2xraXQgKFNESykgZm9yIHVzZSBhZ2FpbnN0LgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGJ1aWxkcyB0b29sY2hhaW4gaW5zdGFsbGVycyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kOgorCisgICAgICAgICAgICAgICAgICAgIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHBvcHVsYXRlX3NkaworCisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHVuZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKworICAgICAgICAgICAgICAgICAgICBpNTg2LCB4ODZfNjQsIHBvd2VycGMsIG1pcHMsIGFybXY3YSBvciBhcm12NXRlCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5yZWxlYXNlX3ZlcnNpb248L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlbGVhc2UgbnVtYmVyIG9mIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6CisKKyAgICAgICAgICAgICAgICAgICAgJkRJU1RSTzssICZESVNUUk87K3NuYXBzaG90CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRvb2xjaGFpbiBpbnN0YWxsZXIgaXMgZm9yIGEgNjQtYml0CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaG9zdCBzeXN0ZW0gYW5kIGEgaTU4Ni10dW5lZCB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgYmFzZWQgb2ZmIHRoZSBTREsgZm9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG9vbGNoYWlucyBhcmUgc2VsZi1jb250YWluZWQgYW5kIGJ5IGRlZmF1bHQgYXJlIGluc3RhbGxlZCBpbnRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHdoZW4geW91IHJ1biB0aGUgdG9vbGNoYWluIGluc3RhbGxlciwgeW91IGNhbiBjaG9vc2UgYW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgc2hvd3MgaG93IHRvIHJ1biB0aGUgaW5zdGFsbGVyIGdpdmVuIGEgdG9vbGNoYWluIHRhcmJhbGwKKyAgICAgICAgICAgICAgICBmb3IgYSA2NC1iaXQgeDg2IGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGFuZCBhIDMyLWJpdCB4ODYgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICBpbnN0YWxsZXIgc2NyaXB0IHNvIHRoYXQgaXQgaXMgZXhlY3V0YWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBpcyBsb2NhdGVkIGluIDxmaWxlbmFtZT5+L0Rvd25sb2Fkcy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggeW91IGFyZSBpbnN0YWxsaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0b29sY2hhaW4sIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyIG5vdGlmaWVzIHlvdSBhbmQgZXhpdHMuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgaW4gdGhlIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBpbnN0YWxsZXIgYWdhaW4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9Eb3dubG9hZHMvcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0YXJiYWxscywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLXRvb2xjaGFpbi1mcm9tLXdpdGhpbi10aGUtYnVpbGQtdHJlZSc+VXNpbmcgQml0QmFrZSBhbmQgdGhlIEJ1aWxkIERpcmVjdG9yeTwvdWxpbms+IiBzZWN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkb3dubG9hZGluZy10aGUtcHJlLWJ1aWx0LWxpbnV4LWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+RG93bmxvYWRpbmcgdGhlIFByZS1CdWlsdCBMaW51eCBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIHRoZSBwcmUtYnVpbHQgTGludXgga2VybmVsIHN1aXRhYmxlIGZvciBydW5uaW5nIGluIHRoZSBRRU1VIGVtdWxhdG9yIGZyb20KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUUVNVV9ETF9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHVzZSB0aGUga2VybmVsIHRoYXQgbWF0Y2hlcyB0aGUgYXJjaGl0ZWN0dXJlIHlvdSB3YW50IHRvIHNpbXVsYXRlLgorICAgICAgICAgICAgICAgIERvd25sb2FkIGFyZWFzIGV4aXN0IGZvciB0aGUgZml2ZSBzdXBwb3J0ZWQgbWFjaGluZSBhcmNoaXRlY3R1cmVzOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5xZW11bWlwczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cWVtdXBwYzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb3N0IGtlcm5lbCBmaWxlcyBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgKnpJbWFnZS1xZW11PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi5iaW4KKyAgICAgdm1saW51eC1xZW11PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi5iaW4KKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgIHg4NiwgeDg2LTY0LCBwcGMsIG1pcHMsIG9yIGFybS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBkb3dubG9hZGluZyBhIFlvY3RvIFByb2plY3Qga2VybmVsIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC1rZXJuZWwtZmlsZXMnPllvY3RvIFByb2plY3QgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgYnVsbGV0ZWQgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZG93bmxvYWRpbmctdGhlLWZpbGVzeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPkRvd25sb2FkaW5nIHRoZSBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGRvd25sb2FkIHRoZSBmaWxlc3lzdGVtIGltYWdlIHN1aXRhYmxlIGZvciB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgZnJvbQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19RRU1VX0RMX1VSTDsnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEFnYWluLCBiZSBzdXJlIHRvIHVzZSB0aGUgZmlsZXN5c3RlbSB0aGF0IG1hdGNoZXMgdGhlIGFyY2hpdGVjdHVyZSB5b3Ugd2FudAorICAgICAgICAgICAgICAgIHRvIHNpbXVsYXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZXN5c3RlbSBpbWFnZSBoYXMgdHdvIHRhcmJhbGwgZm9ybXM6IDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRhcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IHVzZSB0aGUgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPiBmb3JtIHdoZW4gYm9vdGluZyBhbiBpbWFnZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGFyPC9maWxlbmFtZT4gZm9ybSBjYW4gYmUgZmxhdHRlbmVkIG91dCBpbiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgYW5kIHVzZWQgZm9yIGJ1aWxkIHB1cnBvc2VzIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjb3JlLWltYWdlLTxyZXBsYWNlYWJsZT5wcm9maWxlPC9yZXBsYWNlYWJsZT4tcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uZXh0MworICAgICBjb3JlLWltYWdlLTxyZXBsYWNlYWJsZT5wcm9maWxlPC9yZXBsYWNlYWJsZT4tcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4udGFyLmJ6MgorCisgICAgIFdoZXJlOgorICAgICAgICAgPHJlcGxhY2VhYmxlPnByb2ZpbGU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgZmlsZXN5c3RlbSBpbWFnZSdzIHByb2ZpbGU6CisgICAgICAgICAgICAgICAgICAgbHNiLCBsc2ItZGV2LCBsc2Itc2RrLCBsc2ItcXQzLCBtaW5pbWFsLCBtaW5pbWFsLWRldiwgc2F0bywKKyAgICAgICAgICAgICAgICAgICBzYXRvLWRldiwgb3Igc2F0by1zZGsuIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0eXBlcyBvZiBpbWFnZQorICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzLCBzZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgIHg4NiwgeDg2LTY0LCBwcGMsIG1pcHMsIG9yIGFybS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtZW52aXJvbm1lbnQtYW5kLXN0YXJ0aW5nLXRoZS1xZW11LWVtdWxhdG9yJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBFbnZpcm9ubWVudCBhbmQgU3RhcnRpbmcgdGhlIFFFTVUgRW11bGF0b3I8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgZm9ybSBzZXRzIHVwIHRoZSBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAmWU9DVE9fQURUUEFUSF9ESVI7L2Vudmlyb25tZW50LXNldHVwLTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tcG9reS1saW51eC08cmVwbGFjZWFibGU+aWY8L3JlcGxhY2VhYmxlPgorCisgICAgIFdoZXJlOgorICAgICAgICAgPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU6CisgICAgICAgICAgICAgICAgaTU4NiwgeDg2XzY0LCBwcGM2MDNlLCBtaXBzLCBvciBhcm12NXRlLgorCisgICAgICAgICA8cmVwbGFjZWFibGU+aWY8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZW1iZWRkZWQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KKyAgICAgICAgICAgICAgTm90IGFsbCBzZXR1cCBzY3JpcHRzIGluY2x1ZGUgdGhpcyBzdHJpbmcuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCB0aGlzIGNvbW1hbmQgZm9ybSBpbnZva2VzIHRoZSBRRU1VIGVtdWxhdG9yCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgPHJlcGxhY2VhYmxlPnFlbXVhcmNoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmtlcm5lbC1pbWFnZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5maWxlc3lzdGVtLWltYWdlPC9yZXBsYWNlYWJsZT4KKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5xZW11YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZTogcWVtdXg4NiwgcWVtdXg4Ni02NCwKKyAgICAgICAgICAgICAgICAgICAgcWVtdXBwYywgcWVtdW1pcHMsIG9yIHFlbXVhcm0uCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5rZXJuZWwtaW1hZ2U8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGtlcm5lbCBpbWFnZS4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmZpbGVzeXN0ZW0taW1hZ2U8L3JlcGxhY2VhYmxlPiBpcyB0aGUgLmV4dDMgZmlsZXN5c3RlbSBpbWFnZS4KKworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBzZXR1cCB0aGUgZW11bGF0aW9uCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgYW5kIGxhdW5jaCBRRU1VLgorICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHRoZSByb290IGZpbGVzeXN0ZW0gKDxmaWxlbmFtZT4uZXh0MzwvZmlsZW5hbWU+IGZpbGUpIGFuZAorICAgICAgICAgICAgICAgIHRoZSBwcmUtYnVpbHQga2VybmVsIGltYWdlIGZpbGUgYm90aCByZXNpZGUgaW4geW91ciBob21lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIGFuZCBmaWxlc3lzdGVtIGFyZSBmb3IgYSAzMi1iaXQgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUKKyAgICAgJCBzb3VyY2UgJllPQ1RPX0FEVFBBVEhfRElSOy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKKyAgICAgJCBydW5xZW11IHFlbXV4ODYgYnpJbWFnZS1xZW11eDg2LmJpbiBcCisgICAgIGNvcmUtaW1hZ2Utc2F0by1xZW11eDg2LmV4dDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBRRU1VIGxhdW5jaGVzIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGZpbGVzeXN0ZW0gaW1hZ2UgYW5kIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBzb3VyY2UgdGhlIGVudmlyb25tZW50IGZvciB0aGUgQVJNIHRhcmdldAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgdGhlbiBib290IHRoZSBtaW5pbWFsIFFFTVUgaW1hZ2UsIHRoZSBlbXVsYXRvciBjb21lcyB1cCBpbiBhIG5ldworICAgICAgICAgICAgICAgIHNoZWxsIGluIGNvbW1hbmQtbGluZSBtb2RlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBib290IHRoZSBTREsgaW1hZ2UsIFFFTVUgY29tZXMgdXAgd2l0aCBhIEdVSS4KKyAgICAgICAgICAgICAgICA8bm90ZT5Cb290aW5nIHRoZSBQUEMgaW1hZ2UgcmVzdWx0cyBpbiBRRU1VIGxhdW5jaGluZyBpbiB0aGUgc2FtZSBzaGVsbCBpbgorICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBtb2RlLjwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjJhZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2FkdC10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzFlNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9maWd1cmVzL2FkdC10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxMzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTY3NGEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKworICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInYnNwLXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iQSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AtZ3VpZGUtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzNDZlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQKKwl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKwl4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgorCXZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0CisJICBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCistLT4KKworICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rZXIub3V0cHV0LmluZGVudCIgc2VsZWN0PSIneWVzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLmZpcnN0LnNlY3Rpb25zIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBzZWxlY3Q9IjEwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idXNlLmlkLmFzLmZpbGVuYW1lIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1bGluay50YXJnZXQiIHNlbGVjdD0iJ19zZWxmJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJiYXNlLmRpciIgc2VsZWN0PSInaHRtbC9ic3AtZ3VpZGUvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3N2NhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLnhtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J2JzcC1ndWlkZScgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9ic3AtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2NlbnRlcicgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIERldmVsb3BlcidzIEd1aWRlCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlRvbTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aYW51c3NpPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+dG9tLnphbnVzc2lAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlJpY2hhcmQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UHVyZGllPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+TGludXggRm91bmRhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5yaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MC45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+MjQgTm92ZW1iZXIgMjAxMDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlRoZSBpbml0aWFsIGRvY3VtZW50IGRyYWZ0IHJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMC45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBBcHJpbCAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjAuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjIzIE1heSAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgT2N0b2JlciAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uYy1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLU5vbi1Db21tZXJjaWFsLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYnNwLnhtbCIvPgorCis8IS0tICAgIDxpbmRleCBpZD0naW5kZXgnPgorICAgICAgPHRpdGxlPkluZGV4PC90aXRsZT4KKyAgICA8L2luZGV4PgorLS0+CisKKzwvYm9vaz4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3Atc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3Atc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvYnNwLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzllYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwKQEAgLTAsMCArMSwxNTU4IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYnNwJz4KKworICAgICAgICA8dGl0bGU+Qm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKSAtIERldmVsb3BlcidzIEd1aWRlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGlzIGEgY29sbGVjdGlvbiBvZiBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICAgICBkZWZpbmVzIGhvdyB0byBzdXBwb3J0IGEgcGFydGljdWxhciBoYXJkd2FyZSBkZXZpY2UsIHNldCBvZiBkZXZpY2VzLCBvcgorICAgICAgICAgICAgaGFyZHdhcmUgcGxhdGZvcm0uCisgICAgICAgICAgICBUaGUgQlNQIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXJkd2FyZSBmZWF0dXJlcworICAgICAgICAgICAgcHJlc2VudCBvbiB0aGUgZGV2aWNlIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIGFueQorICAgICAgICAgICAgYWRkaXRpb25hbCBoYXJkd2FyZSBkcml2ZXJzIHJlcXVpcmVkLgorICAgICAgICAgICAgVGhlIEJTUCBhbHNvIGxpc3RzIGFueSBhZGRpdGlvbmFsIHNvZnR3YXJlCisgICAgICAgICAgICBjb21wb25lbnRzIHJlcXVpcmVkIGluIGFkZGl0aW9uIHRvIGEgZ2VuZXJpYyBMaW51eCBzb2Z0d2FyZSBzdGFjayBmb3IgYm90aAorICAgICAgICAgICAgZXNzZW50aWFsIGFuZCBvcHRpb25hbCBwbGF0Zm9ybSBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBndWlkZSBwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBCU1AgTGF5ZXJzLCBkZWZpbmVzIGEgc3RydWN0dXJlIGZvciBjb21wb25lbnRzCisgICAgICAgICAgICBzbyB0aGF0IEJTUHMgZm9sbG93IGEgY29tbW9ubHkgdW5kZXJzdG9vZCBsYXlvdXQsIGRpc2N1c3NlcyBob3cgdG8gY3VzdG9taXplCisgICAgICAgICAgICBhIHJlY2lwZSBmb3IgYSBCU1AsIGFkZHJlc3NlcyBCU1AgbGljZW5zaW5nLCBhbmQgcHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICAgICAgc2hvd3MgeW91IGhvdyB0byBjcmVhdGUgYW5kIG1hbmFnZSBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgTGF5ZXI8L2xpbms+IHVzaW5nIHR3byBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5CU1AgVG9vbHM8L2xpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1sYXllcnMnPgorICAgICAgICAgICAgPHRpdGxlPkJTUCBMYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIEJTUCBjb25zaXN0cyBvZiBhIGZpbGUgc3RydWN0dXJlIGluc2lkZSBhIGJhc2UgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgeW91IGNhbiB0aGluayBvZiB0aGUgYmFzZSBkaXJlY3RvcnksIGl0cyBmaWxlIHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBhbmQgdGhlIGNvbnRlbnRzIGFzIGEgQlNQIExheWVyLgorICAgICAgICAgICAgICAgIEFsdGhvdWdoIG5vdCBhIHN0cmljdCByZXF1aXJlbWVudCwgbGF5ZXJzIGluIHRoZSBZb2N0byBQcm9qZWN0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgd2VsbC1lc3RhYmxpc2hlZCBuYW1pbmcgY29udmVudGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHN0cmluZyAibWV0YS0iIGlzIHByZXBlbmRlZCB0byB0aGUgbWFjaGluZSBvciBwbGF0Zm9ybSBuYW1lLCB3aGljaCBpcworICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+IGluIHRoZSBhYm92ZSBmb3JtLgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBCU1AgbGF5ZXIgbmFtaW5nIGNvbnZlbnRpb24gaXMgd2VsbC1lc3RhYmxpc2hlZCwKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgYWR2aXNhYmxlIHRvIGZvbGxvdyBpdCB3aGVuIGNyZWF0aW5nIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgVGVjaG5pY2FsbHkgc3BlYWtpbmcsIGEgQlNQIGxheWVyIG5hbWUgZG9lcyBub3QgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBzdGFydCB3aXRoIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgcnVuIGludG8gc2l0dWF0aW9ucyB3aGVyZSBvYnNjdXJlCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgYXNzdW1lIHRoaXMgY29udmVudGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGhlbHAgdW5kZXJzdGFuZCB0aGUgQlNQIGxheWVyIGNvbmNlcHQsIGNvbnNpZGVyIHRoZSBCU1BzIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBhbmQgcHJvdmlkZXMgd2l0aCBlYWNoIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGxheWVycyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICB0aHJvdWdoIGEgd2ViIGludGVyZmFjZSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZ28gdG8gdGhhdCBpbnRlcmZhY2UsIHlvdSB3aWxsIGZpbmQgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgdW5kZXIgIllvY3RvIE1ldGFkYXRhIExheWVycyIgc2V2ZXJhbCBCU1AgbGF5ZXJzIGFsbCBvZiB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgKGUuZy4gPGZpbGVuYW1lPm1ldGEtbWlubm93PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcmFzcGJlcnJ5cGk8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSBsYXllcnMgaXMgYSByZXBvc2l0b3J5IHVudG8gaXRzZWxmIGFuZCBjbGlja2luZyBvbiBhCisgICAgICAgICAgICAgICAgbGF5ZXIgcmV2ZWFscyBpbmZvcm1hdGlvbiB0aGF0IGluY2x1ZGVzIHR3byBsaW5rcyBmcm9tIHdoaWNoIHlvdSBjYW4gY2hvb3NlCisgICAgICAgICAgICAgICAgdG8gc2V0IHVwIGEgY2xvbmUgb2YgdGhlIGxheWVyJ3MgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNsb25lcyB0aGUgTWlubm93Qm9hcmQgQlNQIGxheWVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS1taW5ub3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBCU1AgZGV2ZWxvcG1lbnQgd29ya2Zsb3csIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2ZWxvcGluZy1hLWJvYXJkLXN1cHBvcnQtcGFja2FnZS1ic3AnPkRldmVsb3BpbmcgYSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGEgbG9jYWwgY29weSBvZiBzb3VyY2UgZmlsZXMKKyAgICAgICAgICAgICAgICBmcm9tIGEgR2l0IHJlcG9zaXRvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGFsc28gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgbGF5ZXIncyBiYXNlIGRpcmVjdG9yeSAoPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPikgaXMgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICBvZiB0aGUgQlNQIExheWVyLgorICAgICAgICAgICAgICAgIFRoaXMgcm9vdCBpcyB3aGF0IHlvdSBhZGQgdG8gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgZXN0YWJsaXNoZWQgYWZ0ZXIgeW91IHJ1biBvbmUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdHMgKGkuZS4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSByb290IGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byByZWNvZ25pemUgdGhlIEJTUAorICAgICAgICAgICAgICAgIGRlZmluaXRpb24gYW5kIGZyb20gaXQgYnVpbGQgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YSBcCisgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0byBcCisgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0by1ic3AgXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEtbXlsYXllciBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZSBCU1BzIHJlcXVpcmUgYWRkaXRpb25hbCBsYXllcnMgb24KKyAgICAgICAgICAgICAgICB0b3Agb2YgdGhlIEJTUCdzIHJvb3QgbGF5ZXIgaW4gb3JkZXIgdG8gYmUgZnVuY3Rpb25hbC4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBhbHNvIG5lZWQgdG8gYWRkIHRob3NlIGxheWVycyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiBvcmRlciB0byBidWlsZCB0aGUgQlNQLgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gc3BlY2lmeSBpbiB0aGUgIkRlcGVuZGVuY2llcyIgc2VjdGlvbiBvZiB0aGUgQlNQJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhbnkgcmVxdWlyZW1lbnRzIGZvciBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgbGF5ZXJzIGFuZCwgcHJlZmVyYWJseSwgYW55CisgICAgICAgICAgICAgICAgYnVpbGQgaW5zdHJ1Y3Rpb25zIHRoYXQgbWlnaHQgYmUgY29udGFpbmVkIGVsc2V3aGVyZQorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZSBsYXllcnMgZnVuY3Rpb24gYXMgYSBsYXllciB0byBob2xkIG90aGVyIEJTUCBsYXllcnMuCisgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBvZiB0aGlzIHR5cGUgb2YgbGF5ZXIgaXMgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIsCisgICAgICAgICAgICAgICAgd2hpY2ggY29udGFpbnMgYSBudW1iZXIgb2YgaW5kaXZpZHVhbCBCU1Agc3ViLWxheWVycywgYXMgd2VsbCBhcyBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5jb21tb24vPC9maWxlbmFtZT4gZnVsbCBvZiBjb21tb24gY29udGVudCBhY3Jvc3MgdGhvc2UgbGF5ZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0Ij4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlIEZpbGVzeXN0ZW0gTGF5b3V0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVmaW5pbmcgYSBjb21tb24gQlNQIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYWxsb3dzIGVuZC11c2VycyB0byB1bmRlcnN0YW5kIGFuZAorICAgICAgICAgICAgICAgIGJlY29tZSBmYW1pbGlhciB3aXRoIHRoYXQgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIEEgY29tbW9uIGZvcm1hdCBhbHNvIGVuY291cmFnZXMgc3RhbmRhcmRpemF0aW9uIG9mIHNvZnR3YXJlIHN1cHBvcnQgb2YgaGFyZHdhcmUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwcm9wb3NlZCBmb3JtIGRvZXMgaGF2ZSBlbGVtZW50cyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIEl0IGlzIGludGVuZGVkIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IG90aGVyIGJ1aWxkIHN5c3RlbXMgYmVzaWRlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCB0aGF0IGl0IHdpbGwgYmUgc2ltcGxlCisgICAgICAgICAgICAgICAgdG8gZXh0cmFjdCBpbmZvcm1hdGlvbiBhbmQgY29udmVydCBpdCB0byBvdGhlciBmb3JtYXRzIGlmIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB0aHJvdWdoIGl0cyBzdGFuZGFyZCBsYXllcnMgbWVjaGFuaXNtLCBjYW4gZGlyZWN0bHkKKyAgICAgICAgICAgICAgICBhY2NlcHQgdGhlIGZvcm1hdCBkZXNjcmliZWQgYXMgYSBsYXllci4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIGNhcHR1cmVzIGFsbAorICAgICAgICAgICAgICAgIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXRhaWxzIGluIG9uZSBwbGFjZSBpbiBhIHN0YW5kYXJkIGZvcm1hdCwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICB1c2VmdWwgZm9yIGFueSBwZXJzb24gd2lzaGluZyB0byB1c2UgdGhlIGhhcmR3YXJlIHBsYXRmb3JtIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtIHRoZXkgYXJlIHVzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhIGJ1aWxkIHN5c3RlbSBvciBvdGhlciB0b29scyAtCisgICAgICAgICAgICAgICAgaXQgaXMgY29uY2VybmVkIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIGNvbXBvbmVudHMgb25seS4KKyAgICAgICAgICAgICAgICBBdCB0aGUgZW5kLWRpc3RyaWJ1dGlvbiBwb2ludCwgeW91IGNhbiBzaGlwIHRoZSBCU1AgY29tYmluZWQgd2l0aCBhIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCBvdGhlciB0b29scy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpdCBpcyBpbXBvcnRhbnQgdG8gbWFpbnRhaW4gdGhlIGRpc3RpbmN0aW9uIHRoYXQgdGhlc2UKKyAgICAgICAgICAgICAgICBhcmUgc2VwYXJhdGUgY29tcG9uZW50cyB0aGF0IGhhcHBlbiB0byBiZSBjb21iaW5lZCBpbiBjZXJ0YWluIGVuZCBwcm9kdWN0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIGxvb2tpbmcgYXQgdGhlIGNvbW1vbiBmb3JtIGZvciB0aGUgZmlsZSBzdHJ1Y3R1cmUgaW5zaWRlIGEgQlNQIExheWVyLAorICAgICAgICAgICAgICAgIHlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBzb21lIHJlcXVpcmVtZW50cyBkbyBleGlzdCBpbiBvcmRlciBmb3IgYSBCU1AgdG8KKyAgICAgICAgICAgICAgICBiZSBjb25zaWRlcmVkIGNvbXBsaWFudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIEZvciB0aGF0IGxpc3Qgb2YgcmVxdWlyZW1lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlbGVhc2VkLWJzcC1yZXF1aXJlbWVudHMnPlJlbGVhc2VkIEJTUCBSZXF1aXJlbWVudHM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlbG93IGlzIHRoZSBjb21tb24gZm9ybSBmb3IgdGhlIGZpbGUgc3RydWN0dXJlIGluc2lkZSBhIEJTUCBMYXllci4KKyAgICAgICAgICAgICAgICBXaGlsZSB5b3UgY2FuIHVzZSB0aGlzIGJhc2ljIGZvcm0gZm9yIHRoZSBzdGFuZGFyZCwgcmVhbGl6ZSB0aGF0IHRoZSBhY3R1YWwgc3RydWN0dXJlcworICAgICAgICAgICAgICAgIGZvciBzcGVjaWZpYyBCU1BzIGNvdWxkIGRpZmZlci4KKworICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi8KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX2xpY2Vuc2VfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FLnNvdXJjZXMKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9iaW5hcnkvPHJlcGxhY2VhYmxlPmJvb3RhYmxlX2ltYWdlczwvcmVwbGFjZWFibGU+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vY29uZi9sYXllci5jb25mCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vY29uZi9tYWNoaW5lLyouY29uZgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMtYnNwLyoKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWNvcmUvKgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMtZ3JhcGhpY3MvKgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzxyZXBsYWNlYWJsZT5rZXJuZWxfcmV2PC9yZXBsYWNlYWJsZT4uYmJhcHBlbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgdGhlIGVNZW5sb3cgQlNQOgorCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLWVtZW5sb3cvQ09QWUlORy5NSVQKKyAgICAgbWV0YS1lbWVubG93L1JFQURNRQorICAgICBtZXRhLWVtZW5sb3cvUkVBRE1FLnNvdXJjZXMKKyAgICAgbWV0YS1lbWVubG93L2JpbmFyeS8KKyAgICAgbWV0YS1lbWVubG93L2NvbmYvCisgICAgIG1ldGEtZW1lbmxvdy9jb25mL2xheWVyLmNvbmYKKyAgICAgbWV0YS1lbWVubG93L2NvbmYvbWFjaGluZS8KKyAgICAgbWV0YS1lbWVubG93L2NvbmYvbWFjaGluZS9lbWVubG93LW5vZW1nZC5jb25mCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC8KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZW1lbmxvdy1ub2VtZ2QvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZW1lbmxvdy1ub2VtZ2QvbWFjaGNvbmZpZworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy8KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9lbWVubG93LW5vZW1nZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9lbWVubG93LW5vZW1nZC94b3JnLmNvbmZpZworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC8KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBlYWNoIHBhcnQgb2YgdGhlIHByb3Bvc2VkIEJTUCBmb3JtYXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1saWNlbnNlIj4KKyAgICAgICAgICAgIDx0aXRsZT5MaWNlbnNlIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LzxyZXBsYWNlYWJsZT5ic3BfbGljZW5zZV9maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbmFsIGZpbGVzIHNhdGlzZnkgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgdHlwZSBvciB0eXBlcyBvZiBmaWxlcyBoZXJlIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gdGhlIGVNZW5sb3cgQlNQIGFsbCBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPUFlJTkcuTUlUPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGljZW5zaW5nIGZpbGVzIGNhbiBiZSBNSVQsIEJTRCwgR1BMdiosIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBhcmUgcmVjb21tZW5kZWQgZm9yIHRoZSBCU1AgYnV0IGFyZSBvcHRpb25hbCBhbmQgdG90YWxseSB1cCB0byB0aGUgQlNQIGRldmVsb3Blci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LXJlYWRtZSI+CisgICAgICAgICAgICA8dGl0bGU+UkVBRE1FIEZpbGU8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgZmlsZSBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9SRUFETUUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYm9vdCB0aGUgbGl2ZSBpbWFnZXMgdGhhdCBhcmUgb3B0aW9uYWxseQorICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSA8ZmlsZW5hbWU+YmluYXJ5LzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYWxzbyBwcm92aWRlcyBzcGVjaWFsIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IKKyAgICAgICAgICAgICAgICBidWlsZGluZyB0aGUgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEF0IGEgbWluaW11bSwgdGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIG11c3QKKyAgICAgICAgICAgICAgICBjb250YWluIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgdGhlIG5hbWVzIG9mCisgICAgICAgICAgICAgICAgYW55IG90aGVyIGxheWVycyBvbiB3aGljaCB0aGUgQlNQIGRlcGVuZHMgYW5kIHRoZSBuYW1lIG9mCisgICAgICAgICAgICAgICAgdGhlIEJTUCBtYWludGFpbmVyIHdpdGggaGlzIG9yIGhlciBjb250YWN0IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0iYnNwLWZpbGVsYXlvdXQtcmVhZG1lLXNvdXJjZXMiPgorICAgICAgICAgICAgPHRpdGxlPlJFQURNRS5zb3VyY2VzIEZpbGU8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgZmlsZSBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9SRUFETUUuc291cmNlcworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHdoZXJlIHRvIGxvY2F0ZSB0aGUgQlNQCisgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlcyAoaWYgYW55KSB0aGF0IHJlc2lkZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2JpbmFyeTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEltYWdlcyBpbiB0aGUgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IHdvdWxkIGJlIGltYWdlcworICAgICAgICAgICAgICAgIHJlbGVhc2VkIHdpdGggdGhlIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaW4gdGhlIDxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBhbHNvIGhlbHBzIHlvdSBmaW5kIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW1hZ2VzIHRoYXQgc2hpcCB3aXRoIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBCU1AncyA8ZmlsZW5hbWU+YmluYXJ5PC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAgICAgICAgIG1pc3Npbmcgb3IgdGhlIGRpcmVjdG9yeSBoYXMgbm8gaW1hZ2VzLCBhbiBleGlzdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPiBmaWxlIGlzCisgICAgICAgICAgICAgICAgICAgIG1lYW5pbmdsZXNzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LWJpbmFyeSI+CisgICAgICAgICAgICA8dGl0bGU+UHJlLWJ1aWx0IFVzZXIgQmluYXJpZXM8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2JpbmFyeS88cmVwbGFjZWFibGU+Ym9vdGFibGVfaW1hZ2VzPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgYXJlYSBjb250YWlucyB1c2VmdWwgcHJlLWJ1aWx0IGtlcm5lbHMgYW5kCisgICAgICAgICAgICAgICAgdXNlci1zcGFjZSBmaWxlc3lzdGVtIGltYWdlcyByZWxlYXNlZCB3aXRoIHRoZSBCU1AgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSB0byB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSB0eXBpY2FsbHkgY29udGFpbnMgZ3JhcGhpY2FsIChlLmcuIFNhdG8pIGFuZAorICAgICAgICAgICAgICAgIG1pbmltYWwgbGl2ZSBpbWFnZXMgd2hlbiB0aGUgQlNQIHRhcmJhbGwgaGFzIGJlZW4gY3JlYXRlZCBhbmQKKyAgICAgICAgICAgICAgICBtYWRlIGF2YWlsYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0PC91bGluaz4gd2Vic2l0ZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSBrZXJuZWxzIGFuZCBpbWFnZXMgdG8gZ2V0IGEgc3lzdGVtIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICBhbmQgcXVpY2tseSBnZXQgc3RhcnRlZCBvbiBkZXZlbG9wbWVudCB0YXNrcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGV4YWN0IHR5cGVzIG9mIGJpbmFyaWVzIHByZXNlbnQgYXJlIGhpZ2hseQorICAgICAgICAgICAgICAgIGhhcmR3YXJlLWRlcGVuZGVudC4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgc2hvdWxkIGJlIHByZXNlbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgQlNQIExheWVyIGFuZCBpdCB3aWxsIGV4cGxhaW4gaG93IHRvIHVzZSB0aGUgaW1hZ2VzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIDxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICBzaG91bGQgYmUgcHJlc2VudCB0byBsb2NhdGUgdGhlIHNvdXJjZXMgdXNlZCB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICBpbWFnZXMgYW5kIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gdGhlIE1ldGFkYXRhLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWZpbGVsYXlvdXQtbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPkxheWVyIENvbmZpZ3VyYXRpb24gRmlsZTwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBmaWxlIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbGF5ZXIuY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlkZW50aWZpZXMgdGhlIGZpbGUgc3RydWN0dXJlIGFzIGEKKyAgICAgICAgICAgICAgICBsYXllciwgaWRlbnRpZmllcyB0aGUKKyAgICAgICAgICAgICAgICBjb250ZW50cyBvZiB0aGUgbGF5ZXIsIGFuZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHNob3VsZCB1c2UgaXQuCisgICAgICAgICAgICAgICAgR2VuZXJhbGx5LCBhIHN0YW5kYXJkIGJvaWxlcnBsYXRlIGZpbGUgc3VjaCBhcyB0aGUgZm9sbG93aW5nIHdvcmtzLgorICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgeW91IHdvdWxkIHJlcGxhY2UgIjxyZXBsYWNlYWJsZT5ic3A8L3JlcGxhY2VhYmxlPiIgYW5kCisgICAgICAgICAgICAgICAgIjxyZXBsYWNlYWJsZT5fYnNwPC9yZXBsYWNlYWJsZT4iIHdpdGggdGhlIGFjdHVhbCBuYW1lCisgICAgICAgICAgICAgICAgb2YgdGhlIEJTUCAoaS5lLiA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPiBmcm9tIHRoZSBleGFtcGxlIHRlbXBsYXRlKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICisgICAgIEJCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisgICAgICMgV2UgaGF2ZSBhIHJlY2lwZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJGSUxFUworICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAiPHJlcGxhY2VhYmxlPmJzcDwvcmVwbGFjZWFibGU+IgorICAgICBCQkZJTEVfUEFUVEVSTl88cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4gPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZXzxyZXBsYWNlYWJsZT5ic3A8L3JlcGxhY2VhYmxlPiA9ICI2IgorCisgICAgIExBWUVSREVQRU5EU188cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4gPSAiaW50ZWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBpbGx1c3RyYXRlIHRoZSBzdHJpbmcgc3Vic3RpdHV0aW9ucywgaGVyZSBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVtZW50cworICAgICAgICAgICAgICAgIGZyb20gdGhlIGVFbWVubG93IDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorICAgICBCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworICAgICAjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKwkgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKKyAgICAgQkJGSUxFX0NPTExFQ1RJT05TICs9ICJlbWVubG93IgorICAgICBCQkZJTEVfUEFUVEVSTl9lbWVubG93IDo9ICJeJHtMQVlFUkRJUn0vIgorICAgICBCQkZJTEVfUFJJT1JJVFlfZW1lbmxvdyA9ICI2IgorCisgICAgIExBWUVSREVQRU5EU19lbWVubG93ID0gImludGVsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIHNpbXBseSBtYWtlcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICAgICAgYXdhcmUgb2YgdGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgVGhlIGZpbGUgbXVzdCBleGlzdCBzbyB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiByZWNvZ25pemUgdGhlIEJTUC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LW1hY2hpbmUiPgorICAgICAgICAgICAgPHRpdGxlPkhhcmR3YXJlIENvbmZpZ3VyYXRpb24gT3B0aW9uczwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2UgZmlsZXMgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vY29uZi9tYWNoaW5lLyouY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIG1hY2hpbmUgZmlsZXMgYmluZCB0b2dldGhlciBhbGwgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBlbHNld2hlcmUKKyAgICAgICAgICAgICAgICBpbiB0aGUgQlNQIGludG8gYSBmb3JtYXQgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGNhbiB1bmRlcnN0YW5kLgorICAgICAgICAgICAgICAgIElmIHRoZSBCU1Agc3VwcG9ydHMgbXVsdGlwbGUgbWFjaGluZXMsIG11bHRpcGxlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgIGNhbiBiZSBwcmVzZW50LgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVuYW1lcyBjb3JyZXNwb25kIHRvIHRoZSB2YWx1ZXMgdG8gd2hpY2ggdXNlcnMgaGF2ZSBzZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgZGVmaW5lIHRoaW5ncyBzdWNoIGFzIHRoZSBrZXJuZWwgcGFja2FnZSB0byB1c2UKKyAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvZiB2aXJ0dWFsL2tlcm5lbCksIHRoZSBoYXJkd2FyZSBkcml2ZXJzIHRvCisgICAgICAgICAgICAgICAgaW5jbHVkZSBpbiBkaWZmZXJlbnQgdHlwZXMgb2YgaW1hZ2VzLCBhbnkgc3BlY2lhbCBzb2Z0d2FyZSBjb21wb25lbnRzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgbmVlZGVkLCBhbnkgYm9vdGxvYWRlciBpbmZvcm1hdGlvbiwgYW5kIGFsc28gYW55IHNwZWNpYWwgaW1hZ2UKKyAgICAgICAgICAgICAgICBmb3JtYXQgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFYWNoIEJTUCBMYXllciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWFjaGluZSBmaWxlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gc3VwcGx5IG1vcmUgdGhhbiBvbmUgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgY291bGQgYWxzbyBpbmNsdWRlIGEgaGFyZHdhcmUgInR1bmluZyIKKyAgICAgICAgICAgICAgICBmaWxlIHRoYXQgaXMgY29tbW9ubHkgdXNlZCB0byBkZWZpbmUgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgYW5kIHNwZWNpZnkgb3B0aW1pemF0aW9uIGZsYWdzLCB3aGljaCBhcmUgY2FyZWZ1bGx5IGNob3NlbgorICAgICAgICAgICAgICAgIHRvIGdpdmUgYmVzdCBwZXJmb3JtYW5jZSBvbiBhIGdpdmVuIHByb2Nlc3Nvci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHVuaW5nIGZpbGVzIGFyZSBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmlhMzItYmFzZS5pbmM8L2ZpbGVuYW1lPiBmaWxlIHJlc2lkZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSBhbiBpbmNsdWRlIGZpbGUsIHlvdSBzaW1wbHkgaW5jbHVkZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZUVtZW5sb3cgQlNQCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVtZW5sb3ctbm9lbWdkLmNvbmY8L2ZpbGVuYW1lPiBjb250YWlucyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgc3RhdGVtZW50czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvaW50ZWwtY29yZTItMzItY29tbW9uLmluYworICAgICByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2ludGVsLWNvbW1vbi1wa2dhcmNoLmluYworICAgICByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL21ldGEtaW50ZWwuaW5jCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWZpbGVsYXlvdXQtbWlzYy1yZWNpcGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIEJTUC1TcGVjaWZpYyBSZWNpcGUgRmlsZXM8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMtYnNwLyoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgZGlyZWN0b3J5IGNvbnRhaW5zIG1pc2NlbGxhbmVvdXMgcmVjaXBlIGZpbGVzIGZvcgorICAgICAgICAgICAgICAgIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgTW9zdCBub3RhYmx5IHdvdWxkIGJlIHRoZSBmb3JtZmFjdG9yIGZpbGVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiB0aGUgZU1lbmxvdyBCU1AgdGhlcmUgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgYW4KKyAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSB1c2VkIHRvIGF1Z21lbnQgdGhlIHJlY2lwZSB0aGF0IHN0YXJ0cyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBtYWNoaW5lLXNwZWNpZmljIHNldHRpbmdzIHVzZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHRoYXQgYXJlIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hY2hjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGZ1cnRoZXIgZG93biBpbiB0aGUKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSW4gdGhlIGVNZW5sb3cgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5tYWNoY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIHN1cHBvcnRzIHRoZSBWaWRlbyBFbGVjdHJvbmljcyBTdGFuZGFyZHMgQXNzb2NpYXRpb24KKyAgICAgICAgICAgICAgICAoVkVTQSkgZ3JhcGhpY3MgZHJpdmVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBBc3N1bWUgYSBVU0IgbW91c2UgYW5kIGtleWJvYXJkIGFyZSBjb25uZWN0ZWQKKyAgICAgSEFWRV9UT1VDSFNDUkVFTj0wCisgICAgIEhBVkVfS0VZQk9BUkQ9MQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+PHBhcmE+CisgICAgICAgICAgICAgICAgSWYgYSBCU1AgZG9lcyBub3QgaGF2ZSBhIGZvcm1mYWN0b3IgZW50cnksIGRlZmF1bHRzIGFyZSBlc3RhYmxpc2hlZCBhY2NvcmRpbmcgdG8KKyAgICAgICAgICAgICAgICB0aGUgZm9ybWZhY3RvciBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBpbnN0YWxsZWQgYnkgdGhlIG1haW4KKyAgICAgICAgICAgICAgICBmb3JtZmFjdG9yIHJlY2lwZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+PC9ub3RlPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWZpbGVsYXlvdXQtcmVjaXBlcy1ncmFwaGljcyc+CisgICAgICAgICAgICA8dGl0bGU+RGlzcGxheSBTdXBwb3J0IEZpbGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWdyYXBoaWNzLyoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uYWwgZGlyZWN0b3J5IGNvbnRhaW5zIHJlY2lwZXMgZm9yIHRoZSBCU1AgaWYgaXQgaGFzCisgICAgICAgICAgICAgICAgc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIGdyYXBoaWNzIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgQWxsIGZpbGVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgdGhlIEJTUCB0byBzdXBwb3J0IGEgZGlzcGxheSBhcmUKKyAgICAgICAgICAgICAgICBrZXB0IGhlcmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bWV0YS1lbWVubG93PC9maWxlbmFtZT4gbGF5ZXIsCisgICAgICAgICAgICAgICAgd2hpY2ggc3VwcG9ydHMgdGhlIGVNZW5sb3cgcGxhdGZvcm0gY29uc2lzdGluZyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5BdG9tPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgWjV4eCBwcm9jZXNzb3Igd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgIFN5c3RlbSBDb250cm9sbGVyIEh1YiBVUzE1VywgdXNlcyB0aGVzZSBmaWxlcyBmb3Igc3VwcG9ydGluZworICAgICAgICAgICAgICAgIHRoZSBWaWRlbyBFbGVjdHJvbmljcyBTdGFuZGFyZHMgQXNzb2NpYXRpb24gKFZFU0EpIGdyYXBoaWNzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL2VtZW5sb3ctbm9lbWdkL3hvcmcuY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+TGludXggS2VybmVsIENvbmZpZ3VyYXRpb248L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvKi5iYmFwcGVuZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgYXBwZW5kIHlvdXIgc3BlY2lmaWMgY2hhbmdlcyB0byB0aGUgbWFpbiBrZXJuZWwgcmVjaXBlIHlvdSBhcmUgdXNpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgeW91ciBCU1AsIHlvdSB0eXBpY2FsbHkgd2FudCB0byB1c2UgYW4gZXhpc3RpbmcgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVjaXBlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF0IDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBhcHBlbmQgeW91ciBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgcmVjaXBlIGJ5IHVzaW5nIGEKKyAgICAgICAgICAgICAgICBzaW1pbGFybHkgbmFtZWQgYXBwZW5kIGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIEJTUCBMYXllciAoZS5nLgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+IGRpcmVjdG9yeSkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTdXBwb3NlIHlvdSBhcmUgdXNpbmcgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjE0LmJiPC9maWxlbmFtZT4gcmVjaXBlIHRvIGJ1aWxkCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgeW91IGhhdmUgc2VsZWN0ZWQgdGhlIGtlcm5lbCBpbiB5b3VyCisgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGJ5IGFkZGluZyB0aGVzZSB0eXBlcworICAgICAgICAgICAgICAgIG9mIHN0YXRlbWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiMy4xNCUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBwcmVmZXJyZWQgcHJvdmlkZXIgaXMgYXNzdW1lZCBieSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+IHN0YXRlbWVudCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgWW91IHdvdWxkIHVzZSB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRvIGFwcGVuZAorICAgICAgICAgICAgICAgIHNwZWNpZmljIEJTUCBzZXR0aW5ncyB0byB0aGUga2VybmVsLCB0aHVzIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwgZm9yIHlvdXIgcGFydGljdWxhciBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBsb29rIGF0IHRoZSBleGlzdGluZyBlTWVubG93IEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgdXNlZCBpczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdGluZyBzaG93cyB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICBCZSBhd2FyZSB0aGF0IHRoZSBhY3R1YWwgY29tbWl0IElEIHN0cmluZ3MgaW4gdGhpcyBleGFtcGxlIGxpc3RpbmcgbWlnaHQgYmUgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgdGhhbiB0aGUgYWN0dWFsIHN0cmluZ3MgaW4gdGhlIGZpbGUgZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIEdpdCBzb3VyY2UgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworICAgICBDT01QQVRJQkxFX01BQ0hJTkVfZW1lbmxvdy1ub2VtZ2QgPSAiZW1lbmxvdy1ub2VtZ2QiCisgICAgIEtNQUNISU5FX2VtZW5sb3ctbm9lbWdkID0gImVtZW5sb3ciCisgICAgIEtCUkFOQ0hfZW1lbmxvdy1ub2VtZ2QgPSAic3RhbmRhcmQvYmFzZSIKKyAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9lbWVubG93LW5vZW1nZCA9ICIgZmVhdHVyZXMvZHJtLWdtYTUwMC9kcm0tZ21hNTAwLnNjYyIKKworICAgICBMSU5VWF9WRVJTSU9OX2VtZW5sb3ctbm9lbWdkID0gIjMuMTQuMTkiCisgICAgIFNSQ1JFVl9tYWNoaW5lX2VtZW5sb3ctbm9lbWdkID0gIjkwMmYzNGQzNjEwMmE0YjIwMDhiNzc2ZWNhZTY4NmY4MGQzMDdlMTIiCisgICAgIFNSQ1JFVl9tZXRhX2VtZW5sb3ctbm9lbWdkID0gIjI4ZTM5NzQxYjhiMzAxODMzNDAyMWQ5ODEzNjlkM2ZkNjFmMThmNWIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgYXBwZW5kIGZpbGUgY29udGFpbnMgc3RhdGVtZW50cyB1c2VkIHRvIHN1cHBvcnQgdGhlCisgICAgICAgICAgICAgICAgZU1lbmxvdyBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGZpbGUgZGVmaW5lcyBtYWNoaW5lcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBtYXBzIHRvIHRoZSBtYWNoaW5lIG5hbWUgdXNlZCBieSB0aGUgTGludXggWW9jdG8KKyAgICAgICAgICAgICAgICBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIGZpbGUgYWxzbyB1c2VzIHRoZSBvcHRpb25hbAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBlbnN1cmUgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGtlcm5lbCBicmFuY2guCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9GRUFUVVJFUyc+PGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBlbmFibGVzIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAoZS5nLiBJbnRlbCBHTUEtNTAwIERSTSBEcml2ZXIgaW4gdGhpcyBjYXNlKS4KKyAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgcG9pbnRzIHRvIHNwZWNpZmljIGNvbW1pdHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgYW5kIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgYnJhbmNoZXMgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGtlcm5lbCBuZWVkZWQgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgZU1lbmxvdyBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSB0aGluZyBtaXNzaW5nIGluIHRoaXMgcGFydGljdWxhciBCU1AsIHdoaWNoIHlvdSB3aWxsIHR5cGljYWxseSBuZWVkIHdoZW4KKyAgICAgICAgICAgICAgICBkZXZlbG9waW5nIGEgQlNQLCBpcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPikgZm9yIHlvdXIgQlNQLgorICAgICAgICAgICAgICAgIFdoZW4gZGV2ZWxvcGluZyBhIEJTUCwgeW91IHByb2JhYmx5IGhhdmUgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIG9yIGEgc2V0IG9mIGtlcm5lbAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCwgd2hlbiB0YWtlbiB0b2dldGhlciwgZGVmaW5lIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgZGVmaW5pdGlvbiBieSBwdXR0aW5nIHRoZSBjb25maWd1cmF0aW9ucyBpbiBhIGZpbGUgb3IgYSBzZXQgb2YgZmlsZXMKKyAgICAgICAgICAgICAgICBpbnNpZGUgYSBkaXJlY3RvcnkgbG9jYXRlZCBhdCB0aGUgc2FtZSBsZXZlbCBhcyB5b3VyIGtlcm5lbCdzIGFwcGVuZCBmaWxlIGFuZCBoYXZpbmcgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBuYW1lIGFzIHRoZSBrZXJuZWwncyBtYWluIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIFdpdGggYWxsIHRoZXNlIGNvbmRpdGlvbnMgbWV0LCBzaW1wbHkgcmVmZXJlbmNlIHRob3NlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4gdGhlIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIGEgZmlsZSBjYWxsZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmV0d29ya19jb25maWdzLmNmZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcGxhY2UgdGhhdCBmaWxlIGluc2lkZSBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiBhbmQgdGhlbiBhZGQKKyAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IHN1Y2ggYXMgdGhlIGZvbGxvd2luZyB0byB0aGUgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgV2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgdGhlIGtlcm5lbCwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUKKyAgICAgICAgICAgICAgICBwaWNrZWQgdXAgYW5kIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbmV0d29ya19jb25maWdzLmNmZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGdyb3VwIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaW50byBtdWx0aXBsZSBmaWxlcywgeW91IHBlcmZvcm0gYSBzaW1pbGFyIHByb2NlZHVyZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBncm91cHMgc2VwYXJhdGUgY29uZmlndXJhdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBFdGhlcm5ldCBhbmQgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICBpbnRvIHRoZWlyIG93biBmaWxlcyBhbmQgYWRkcyB0aGUgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgICAgICBieSB1c2luZyBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGxpa2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL215Y29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8vZXRoLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8vZ2Z4LmNmZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGluIGJvaWxlcnBsYXRlIGZvcm0gaW4gdGhlCisgICAgICAgICAgICAgICAgcHJldmlvdXMgZXhhbXBsZSBpbiBvcmRlciB0byBtYWtlIGl0IGVhc3kgdG8gZG8gdGhhdC4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIG11c3QgYmUgaW4geW91ciBsYXllciBvciBCaXRCYWtlIHdpbGwgbm90IGZpbmQgdGhlIHBhdGNoZXMgb3IKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBldmVuIGlmIHlvdSBoYXZlIHRoZW0gaW4geW91ciA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4gdmFyaWFibGUgZW5hYmxlcyB0aGUgYnVpbGQgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgIGZpbmQgdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE90aGVyIG1ldGhvZHMgZXhpc3QgdG8gYWNjb21wbGlzaCBncm91cGluZyBhbmQgZGVmaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB3b3JraW5nIHdpdGggYSBsb2NhbCBjbG9uZSBvZiB0aGUga2VybmVsIHJlcG9zaXRvcnksCisgICAgICAgICAgICAgICAgICAgIHlvdSBjb3VsZCBjaGVja291dCB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsIG1ha2UgeW91ciBjaGFuZ2VzLAorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBwdXNoIHRoZSBjaGFuZ2VzIHRvIHRoZSBsb2NhbCBiYXJlIGNsb25lIG9mIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCB5b3UgZGlyZWN0bHkgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggZm9yIHlvdXIgQlNQLgorICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgbGlrZWx5IGVuZCB1cCBpbiB0aGF0IGxvY2F0aW9uIGFueXdheSBpZiB0aGUgQlNQIGdldHMKKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGhvd2V2ZXIsIHRoZSBZb2N0byBQcm9qZWN0IG1haW50YWluZXJzIHRha2UgY2FyZSBvZiBtb3ZpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4tc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIE5vdCBvbmx5IGlzIGl0IGVhc2llciBmb3IgQlNQIGRldmVsb3BlcnMgdG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgcHV0dGluZyB0aG9zZQorICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBicmFuY2gsIGJ1dCBoYXZpbmcgdGhlIG1haW50YWluZXJzIGRvIGl0IGFsbG93cyB0aGVtIHRvIGFwcGx5CisgICAgICAgICAgICAgICAgICAgICdnbG9iYWwnIGtub3dsZWRnZSBhYm91dCB0aGUga2luZHMgb2YgY29tbW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtdWx0aXBsZSBCU1BzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSB0cmVlIGFyZSB0eXBpY2FsbHkgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIGZvciBwcm9tb3Rpb24gb2YgY29tbW9uIGNvbmZpZ3VyYXRpb25zIGludG8gY29tbW9uIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZXF1aXJlbWVudHMtYW5kLXJlY29tbWVuZGF0aW9ucy1mb3ItcmVsZWFzZWQtYnNwcyc+CisgICAgICAgICAgICA8dGl0bGU+UmVxdWlyZW1lbnRzIGFuZCBSZWNvbW1lbmRhdGlvbnMgZm9yIFJlbGVhc2VkIEJTUHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDZXJ0YWluIHJlcXVpcmVtZW50cyBleGlzdCBmb3IgYSByZWxlYXNlZCBCU1AgdG8gYmUgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgIGNvbXBsaWFudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgcmVjb21tZW5kYXRpb25zIGFsc28gZXhpc3QuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgcmVxdWlyZW1lbnRzIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yCisgICAgICAgICAgICAgICAgcmVsZWFzZWQgQlNQcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbGVhc2VkLWJzcC1yZXF1aXJlbWVudHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SZWxlYXNlZCBCU1AgUmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbG9va2luZyBhdCBCU1AgcmVxdWlyZW1lbnRzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlcXVpcmVtZW50cyBoZXJlIGFzc3VtZSB0aGUgQlNQIGxheWVyIGlzIGEgd2VsbC1mb3JtZWQsICJsZWdhbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZ3VpZGVsaW5lcyBvbiBjcmVhdGluZyBhIGxheWVyIHRoYXQgbWVldHMgdGhlc2UgYmFzZSByZXF1aXJlbWVudHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyczwvbGluaz4iIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIENyZWF0aW5nIExheWVycyI8L3VsaW5rPiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlcXVpcmVtZW50cyBpbiB0aGlzIHNlY3Rpb24gYXBwbHkgcmVnYXJkbGVzcyBvZiBob3cgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWx0aW1hdGVseSBwYWNrYWdlIGEgQlNQLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29uc3VsdCB0aGUgcGFja2FnaW5nIGFuZCBkaXN0cmlidXRpb24gZ3VpZGVsaW5lcyBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHJlbGVhc2UgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBwYWNrYWdpbmcgYW5kIGRpc3RyaWJ1dGlvbiByZXF1aXJlbWVudHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UaGlyZF9QYXJ0eV9CU1BfUmVsZWFzZV9Qcm9jZXNzJz5UaGlyZCBQYXJ0eSBCU1AgUmVsZWFzZSBQcm9jZXNzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgZm9yIHRoZSBCU1AgYXMgaXQgaXMgbWFkZSBhdmFpbGFibGUgdG8gYSBkZXZlbG9wZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiB0aGUgcmVsZWFzZWQgZm9ybSBvZiB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgQlNQIE1ldGFkYXRhIGNhbiBiZSBjb250YWluZWQgd2l0aGluIGEgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY291bGQgaGF2ZSBhIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB3aGF0IGFwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgb2ZmaWNpYWxseSByZWxlYXNlZCBCU1AgbGF5ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SXQgaXMgbm90IHJlcXVpcmVkIHRoYXQgc3BlY2lmaWMgcGFja2FnZXMgb3IgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgZXhpc3QgaW4gdGhlIEJTUCBsYXllciwgYmV5b25kIHRoZSByZXF1aXJlbWVudHMgZm9yIGdlbmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGlhbmNlIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIG5vIHJlcXVpcmVtZW50IGV4aXN0cyBkaWN0YXRpbmcgdGhhdCBhIHNwZWNpZmljIGtlcm5lbCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9uIGJlIHVzZWQgaW4gYSBnaXZlbiBCU1AuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHRoZSByZXF1aXJlbWVudHMgZm9yIGEgcmVsZWFzZWQgQlNQIHRoYXQgY29uZm9ybXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxheWVyIE5hbWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQlNQIG11c3QgaGF2ZSBhIGxheWVyIG5hbWUgdGhhdCBmb2xsb3dzIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3Qgc3RhbmRhcmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBCU1AgbGF5ZXIgbmFtZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZpbGUgU3lzdGVtIExheW91dDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcG9zc2libGUsIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgbmFtZXMgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBsYXllciBhcyBsaXN0ZWQgaW4gdGhlIDxmaWxlbmFtZT5yZWNpcGVzLnR4dDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91IHNob3VsZCBwbGFjZSByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcykgYW5kIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcykgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcmllcyBieSBmdW5jdGlvbmFsIGFyZWEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBvdXRsaW5lZCBpbiA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2Fubm90IGZpbmQgYSBjYXRlZ29yeSBpbiA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGZpdCBhIHBhcnRpY3VsYXIgcmVjaXBlLCB5b3UgY2FuIG1ha2UgdXAgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW4gdGhlIE9wZW5FbWJlZGRlZCBDb3JlIExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+KSBmb3VuZCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS90cmVlL21ldGEnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gYW55IHBhcnRpY3VsYXIgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+IGNhdGVnb3J5LCB0aGUgbGF5b3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG1hdGNoIHdoYXQgaXMgZm91bmQgaW4gdGhlIE9wZW5FbWJlZGRlZCBDb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgKDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBTb3VyY2UgRGlyZWN0b3J5ICg8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgbWFrZSBzdXJlIHlvdSBwbGFjZSByZWxhdGVkIGZpbGVzIGluIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcmllcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUncyBmdW5jdGlvbiwgb3Igd2l0aGluIGEgc3ViZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSBzZXQgb2YgY2xvc2VseS1yZWxhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlcyB0aGVtc2VsdmVzIHNob3VsZCBmb2xsb3cgdGhlIGdlbmVyYWwgZ3VpZGVsaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZWNpcGVzIHVzZWQgaW4gdGhlIFlvY3RvIFByb2plY3QgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9vcGVuZW1iZWRkZWQub3JnL3dpa2kvU3R5bGVndWlkZSc+T3BlbkVtYmVkZGVkIFN0eWxlIEd1aWRlPC91bGluaz4iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MaWNlbnNlIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgbGljZW5zZSBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbGljZW5zZSBjb3ZlcnMgdGhlIEJTUCBNZXRhZGF0YSBhcyBhIHdob2xlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNwZWNpZnkgd2hpY2ggbGljZW5zZSB0byB1c2Ugc2luY2UgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGxpY2Vuc2UgaWYgb25lIGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9tZXRhLWludGVsL3RyZWUvbWV0YS1mcmkyL0NPUFlJTkcuTUlUJz48ZmlsZW5hbWU+Q09QWUlORy5NSVQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgdGhlIEZpc2ggUml2ZXIgSXNsYW5kIDIgQlNQIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1mcmkyPC9maWxlbmFtZT4gQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYW4gZXhhbXBsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UkVBRE1FIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9tZXRhLWludGVsL3RyZWUvbWV0YS1mcmkyL1JFQURNRSc+PGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB0aGUgRmlzaCBSaXZlciBJc2xhbmQgMiBCU1AgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWZyaTI8L2ZpbGVuYW1lPiBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhbiBleGFtcGxlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BdCBhIG1pbmltdW0sIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgYnJpZWYgZGVzY3JpcHRpb24gYWJvdXQgdGhlIGhhcmR3YXJlIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGxpc3Qgb2YgYWxsIHRoZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIGEgQlNQIGxheWVyIGRlcGVuZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIHR5cGljYWxseSBhIGxpc3Qgb2YgcmVxdWlyZWQgbGF5ZXJzIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYnVpbGQgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBkZXBlbmRlbmNpZXMgc2hvdWxkIGFsc28gY29udGFpbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhlIEJTUCBtaWdodCBoYXZlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW55IHJlcXVpcmVkIHNwZWNpYWwgbGljZW5zaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgdmFyaWFibGVzIG5lZWRlZCB0byBzYXRpc2Z5IGEgRVVMQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluc3RydWN0aW9ucyBvbiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQgb3IgZGlzdHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJpZXMgYnVpbHQgZnJvbSB0aGUgQlNQIE1ldGFkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVyIG1haW50YWluZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBwZXJzb24gdG8gd2hvbSBwYXRjaGVzIGFuZCBxdWVzdGlvbnMgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmaW5kIHRoZSByaWdodCBwZXJzb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBidWlsZCB0aGUgQlNQIHVzaW5nIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBib290IHRoZSBCU1AgYnVpbGQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJTUCBsYXllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RydWN0aW9ucyBvbiBob3cgdG8gYm9vdCB0aGUgYmluYXJ5IGltYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmluYXJ5PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJlc2VudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIG9uIGFueSBrbm93biBidWdzIG9yIGlzc3VlcyB0aGF0IHVzZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQga25vdyBhYm91dCB3aGVuIGVpdGhlciBidWlsZGluZyBvciBib290aW5nIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SRUFETUUuc291cmNlcyBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZSBhIDxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBzcGVjaWZpZXMgZXhhY3RseSB3aGVyZSB5b3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRoZSBiaW5hcnkgaW1hZ2VzIGNvbnRhaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluYXJ5PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBpZiBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvbWV0YS1pbnRlbC90cmVlL21ldGEtZnJpMi9SRUFETUUuc291cmNlcyc+PGZpbGVuYW1lPlJFQURNRS5zb3VyY2VzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHRoZSBGaXNoIFJpdmVyIElzbGFuZCAyIEJTUCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZnJpMjwvZmlsZW5hbWU+IEJTUCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGFuIGV4YW1wbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxheWVyIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGluY2x1ZGUgYSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlkZW50aWZpZXMgdGhlIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1AgbGF5ZXIgYXMgYSBsYXllciB0byB0aGUgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWNoaW5lIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGluY2x1ZGUgb25lIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lLzxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBjb25maWd1cmF0aW9uIGZpbGVzIGRlZmluZSBtYWNoaW5lIHRhcmdldHMgdGhhdCBjYW4gYmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgQlNQIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpcGxlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBkZWZpbmUgdmFyaWF0aW9ucyBvZiBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYSBCU1Agc3VwcG9ydHMgbXVsdGlwbGUgbWFjaGluZSB2YXJpYXRpb25zLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZXF1YXRlbHkgZGVzY3JpYmUgZWFjaCB2YXJpYXRpb24gaW4gdGhlIEJTUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgbXVsdGlwbGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGRlc2NyaWJlIGRpc3BhcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBoYXZlIHZlcnkgZGlmZmVyZW50IHRhcmdldHMsIHlvdSBzaG91bGQgY3JlYXRlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVycyBmb3IgZWFjaCB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+SXQgaXMgY29tcGxldGVseSBwb3NzaWJsZSBmb3IgYSBkZXZlbG9wZXIgdG8gc3RydWN0dXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtpbmcgcmVwb3NpdG9yeSBhcyBhIGNvbmdsb21lcmF0aW9uIG9mIHVucmVsYXRlZCBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcywgYW5kIHRvIHBvc3NpYmx5IGdlbmVyYXRlIEJTUHMgdGFyZ2V0ZWQgZm9yIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoYXQgZGlyZWN0b3J5IHVzaW5nIHNjcmlwdHMgb3Igc29tZSBvdGhlciBtZWNoYW5pc20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBsYXllcikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VjaCBjb25zaWRlcmF0aW9ucyBhcmUgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudC48L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbGVhc2VkLWJzcC1yZWNvbW1lbmRhdGlvbnMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SZWxlYXNlZCBCU1AgUmVjb21tZW5kYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHJlY29tbWVuZGF0aW9ucyBmb3IgYSByZWxlYXNlZCBCU1AgdGhhdCBjb25mb3JtcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qm9vdGFibGUgSW1hZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIHJlbGVhc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgYm9vdGFibGUgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGluZyBib290YWJsZSBpbWFnZXMgYWxsb3dzIHVzZXJzIHRvIGVhc2lseSB0cnkgb3V0IHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGVpciBvd24gaGFyZHdhcmUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkluIHNvbWUgY2FzZXMsIGl0IG1pZ2h0IG5vdCBiZSBjb252ZW5pZW50IHRvIGluY2x1ZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RhYmxlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG1pZ2h0IHdhbnQgdG8gbWFrZSB0d28gdmVyc2lvbnMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGF2YWlsYWJsZTogb25lIHRoYXQgY29udGFpbnMgYmluYXJ5IGltYWdlcywgYW5kIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZG9lcyBub3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gdGhhdCBkb2VzIG5vdCBjb250YWluIGJvb3RhYmxlIGltYWdlcyBhdm9pZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm5lY2Vzc2FyeSBkb3dubG9hZCB0aW1lcyBmb3IgdXNlcnMgbm90IGludGVyZXN0ZWQgaW4gdGhlIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IG5lZWQgdG8gZGlzdHJpYnV0ZSBhIEJTUCBhbmQgaW5jbHVkZSBib290YWJsZSBpbWFnZXMgb3IgYnVpbGQga2VybmVsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW1zIG1lYW50IHRvIGFsbG93IHVzZXJzIHRvIGJvb3QgdGhlIEJTUCBmb3IgZXZhbHVhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VzLCB5b3Ugc2hvdWxkIHB1dCB0aGUgaW1hZ2VzIGFuZCBhcnRpZmFjdHMgd2l0aGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluYXJ5LzwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPklmIHlvdSBkbyBpbmNsdWRlIGEgYm9vdGFibGUgaW1hZ2UgYXMgcGFydCBvZiB0aGUgQlNQIGFuZCB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgYnVpbHQgYnkgc29mdHdhcmUgY292ZXJlZCBieSB0aGUgR1BMIG9yIG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gdW5kZXJzdGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtZWV0IGFsbCBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzLCB3aGljaCBjb3VsZCBpbmNsdWRlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNvdXJjZSBmaWxlcy48L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBhIFlvY3RvIExpbnV4IEtlcm5lbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCByZWNpcGVzIGluIHRoZSBCU1Agc2hvdWxkIGJlIGJhc2VkIG9uIGEgWW9jdG8gTGludXgga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2luZyB5b3VyIHJlY2lwZXMgb24gdGhlc2Uga2VybmVscyByZWR1Y2VzIHRoZSBjb3N0cyBmb3IgbWFpbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgQlNQIGFuZCBpbmNyZWFzZXMgaXRzIHNjYWxhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPllvY3RvIExpbnV4IEtlcm5lbDwvZmlsZW5hbWU+IGNhdGVnb3J5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZXNlIGtlcm5lbHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjdXN0b21pemluZy1hLXJlY2lwZS1mb3ItYS1ic3AnPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIGEgUmVjaXBlIGZvciBhIEJTUDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgSWYgeW91IHBsYW4gb24gY3VzdG9taXppbmcgYSByZWNpcGUgZm9yIGEgcGFydGljdWxhciBCU1AsIHlvdSBuZWVkIHRvIGRvIHRoZQorICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHRoZSBtb2RpZmllZCByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBhcHBlbmQgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlIHlvdXIgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbiB0aGUgQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc3VwcG9ydHMgeW91ciBtYWNoaW5lIGlzIHN1Y2ggdGhhdCBpdCBjYW4gYmUgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBleGFtcGxlIGxhdGVyIGluIHRoaXMgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBQdXQgdGhlIGFwcGVuZCBmaWxlIGluIGEgZGlyZWN0b3J5IHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFjaGluZSdzIG5hbWUgYW5kIGlzIGxvY2F0ZWQgaW4gYW4gYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgc3ViLWRpcmVjdG9yeSBpbnNpZGUgdGhlIEJTUCBsYXllciAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1ic3A8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnJlY2lwZXMtZ3JhcGhpY3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMtY29yZTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UGxhY2UgdGhlIEJTUC1zcGVjaWZpYyBmaWxlcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgSG93IGV4cGFuc2l2ZSB0aGUgbGF5ZXIgaXMgYWZmZWN0cyB3aGVyZSB5b3UgbXVzdCBwbGFjZSB0aGVzZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgbGF5ZXIgc3VwcG9ydHMgc2V2ZXJhbCBkaWZmZXJlbnQgbWFjaGluZSB0eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYmUgc3VyZSB5b3VyIGxheWVyJ3MgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbmNsdWRlcyBoaWVyYXJjaHkKKyAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzZXBhcmF0ZXMgdGhlIGZpbGVzIG91dCBhY2NvcmRpbmcgdG8gbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBsYXllciBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIG1hY2hpbmVzLCB0aGUgbGF5ZXIgd291bGQgbm90CisgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdGhhdCBhZGRpdGlvbmFsIGhpZXJhcmNoeSBhbmQgdGhlIGZpbGVzIHdvdWxkIG9idmlvdXNseSBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgYWJsZSB0byByZXNpZGUgaW4gYSBtYWNoaW5lLXNwZWNpZmljIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgc3BlY2lmaWMgZXhhbXBsZSB0byBoZWxwIHlvdSBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgIENvbnNpZGVyIGFuIGV4YW1wbGUgdGhhdCBjdXN0b21pemVzIGEgcmVjaXBlIGJ5IGFkZGluZworICAgICAgICAgICAgICAgYSBCU1Atc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVkIDxmaWxlbmFtZT5pbnRlcmZhY2VzPC9maWxlbmFtZT4gdG8gdGhlCisgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC1pZnVwZG93bl8xLjAuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZm9yIG1hY2hpbmUgInh5eiIgd2hlcmUgdGhlCisgICAgICAgICAgICAgICBCU1AgbGF5ZXIgYWxzbyBzdXBwb3J0cyBzZXZlcmFsIG90aGVyIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgRG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWRpdCB0aGUgPGZpbGVuYW1lPmluaXQtaWZ1cGRvd25fMS4wLmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBzbyB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBlbmQgZmlsZSBuZWVkcyB0byBiZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteHl6L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGFuZCBwbGFjZSB0aGUgbmV3IDxmaWxlbmFtZT5pbnRlcmZhY2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBCU1AncyBsYXllciBoZXJlOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEteHl6L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2ZpbGVzL3h5ei1tYWNoaW5lLW9uZS9pbnRlcmZhY2VzCisgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPm1ldGEteHl6PC9maWxlbmFtZT4gbGF5ZXIgZGlkIG5vdCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBtYWNoaW5lcywgeW91IHdvdWxkIHBsYWNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmludGVyZmFjZXM8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBoZXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLXh5ei9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9maWxlcy9pbnRlcmZhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBhcHBlbmQgZmlsZXMgZXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIGZpbmQgZmlsZXMgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBmb3IgdGhpcyBleGFtcGxlIHlvdSBuZWVkIHRvIGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB0aGUgc2FtZSBsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBhcyB5b3VyIGFwcGVuZCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdic3AtbGljZW5zaW5nLWNvbnNpZGVyYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5CU1AgTGljZW5zaW5nIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcywgYSBCU1AgY29udGFpbnMgc2VwYXJhdGVseSBsaWNlbnNlZCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgKElQKQorICAgICAgICAgICAgICAgIGZvciBhIGNvbXBvbmVudCBvciBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91IGFyZSByZXF1aXJlZCB0byBhY2NlcHQgdGhlIHRlcm1zIG9mIGEgY29tbWVyY2lhbCBvciBvdGhlcgorICAgICAgICAgICAgICAgIHR5cGUgb2YgbGljZW5zZSB0aGF0IHJlcXVpcmVzIHNvbWUga2luZCBvZiBleHBsaWNpdCBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAoRVVMQSkuCisgICAgICAgICAgICAgICAgT25jZSB0aGUgbGljZW5zZSBpcyBhY2NlcHRlZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHRoZW4gYnVpbGQgYW5kCisgICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgY29ycmVzcG9uZGluZyBjb21wb25lbnQgaW4gdGhlIGZpbmFsIEJTUCBpbWFnZS4KKyAgICAgICAgICAgICAgICBJZiB0aGUgQlNQIGlzIGF2YWlsYWJsZSBhcyBhIHByZS1idWlsdCBpbWFnZSwgeW91IGNhbiBkb3dubG9hZCB0aGUgaW1hZ2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICBhZ3JlZWluZyB0byB0aGUgbGljZW5zZSBvciBFVUxBLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgZmluZCB0aGF0IHNvbWUgc2VwYXJhdGVseSBsaWNlbnNlZCBjb21wb25lbnRzIHRoYXQgYXJlIGVzc2VudGlhbAorICAgICAgICAgICAgICAgIGZvciBub3JtYWwgb3BlcmF0aW9uIG9mIHRoZSBzeXN0ZW0gbWlnaHQgbm90IGhhdmUgYW4gdW5lbmN1bWJlcmVkIChvciBmcmVlKQorICAgICAgICAgICAgICAgIHN1YnN0aXR1dGUuCisgICAgICAgICAgICAgICAgV2l0aG91dCB0aGVzZSBlc3NlbnRpYWwgY29tcG9uZW50cywgdGhlIHN5c3RlbSB3b3VsZCBiZSBub24tZnVuY3Rpb25hbC4KKyAgICAgICAgICAgICAgICBUaGVuIGFnYWluLCB5b3UgbWlnaHQgZmluZCB0aGF0IG90aGVyIGxpY2Vuc2VkIGNvbXBvbmVudHMgdGhhdCBhcmUgc2ltcGx5CisgICAgICAgICAgICAgICAgJ2dvb2QtdG8taGF2ZScgb3IgcHVyZWx5IGVsZWN0aXZlIGRvIGhhdmUgYW4gdW5lbmN1bWJlcmVkLCBmcmVlIHJlcGxhY2VtZW50CisgICAgICAgICAgICAgICAgY29tcG9uZW50IHRoYXQgeW91IGNhbiB1c2UgcmF0aGVyIHRoYW4gYWdyZWVpbmcgdG8gdGhlIHNlcGFyYXRlbHkgbGljZW5zZWQgY29tcG9uZW50LgorICAgICAgICAgICAgICAgIEV2ZW4gZm9yIGNvbXBvbmVudHMgZXNzZW50aWFsIHRvIHRoZSBzeXN0ZW0sIHlvdSBtaWdodCBmaW5kIGFuIHVuZW5jdW1iZXJlZCBjb21wb25lbnQKKyAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpZGVudGljYWwgYnV0IHdpbGwgd29yayBhcyBhIGxlc3MtY2FwYWJsZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIGxpY2Vuc2VkIHZlcnNpb24gaW4gdGhlIEJTUCByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBjYXNlcyB3aGVyZSB5b3UgY2FuIHN1YnN0aXR1dGUgYSBmcmVlIGNvbXBvbmVudCBhbmQgc3RpbGwKKyAgICAgICAgICAgICAgICBtYWludGFpbiB0aGUgc3lzdGVtJ3MgZnVuY3Rpb25hbGl0eSwgdGhlICJEb3dubG9hZHMiIHBhZ2UgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IHdlYnNpdGUnczwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFrZXMgYXZhaWxhYmxlIGRlLWZlYXR1cmVkIEJTUHMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBjb21wbGV0ZWx5IGZyZWUgb2YgYW55IElQIGVuY3VtYnJhbmNlcy4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBjYW4gdXNlIHRoZSBzdWJzdGl0dXRpb24gZGlyZWN0bHkgYW5kCisgICAgICAgICAgICAgICAgd2l0aG91dCBhbnkgZnVydGhlciBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgIElmIHByZXNlbnQsIHRoZXNlIGZ1bGx5IGRlLWZlYXR1cmVkIEJTUHMgYXJlIG5hbWVkIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgICAgICAgICBkaWZmZXJlbnQgYXMgY29tcGFyZWQgdG8gdGhlIG5hbWVzIG9mIHRoZSByZXNwZWN0aXZlCisgICAgICAgICAgICAgICAgZW5jdW1iZXJlZCBCU1BzLgorICAgICAgICAgICAgICAgIElmIGF2YWlsYWJsZSwgdGhlc2Ugc3Vic3RpdHV0aW9ucyBhcmUgeW91cgorICAgICAgICAgICAgICAgIHNpbXBsZXN0IGFuZCBtb3N0IHByZWZlcnJlZCBvcHRpb25zLgorICAgICAgICAgICAgICAgIFVzZSBvZiB0aGVzZSBzdWJzdGl0dXRpb25zIG9mIGNvdXJzZSBhc3N1bWVzIHRoZSByZXN1bHRpbmcgZnVuY3Rpb25hbGl0eSBtZWV0cworICAgICAgICAgICAgICAgIHN5c3RlbSByZXF1aXJlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGhvd2V2ZXIsIGEgbm9uLWVuY3VtYmVyZWQgdmVyc2lvbiBpcyB1bmF2YWlsYWJsZSBvcgorICAgICAgICAgICAgICAgIGl0IHByb3ZpZGVzIHVuc3VpdGFibGUgZnVuY3Rpb25hbGl0eSBvciBxdWFsaXR5LCB5b3UgY2FuIHVzZSBhbiBlbmN1bWJlcmVkCisgICAgICAgICAgICAgICAgdmVyc2lvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb3VwbGUgZGlmZmVyZW50IG1ldGhvZHMgZXhpc3Qgd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgc2F0aXNmeSB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgYW4gZW5jdW1iZXJlZCBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGVtIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CisJICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSByZWNpcGVzIHRoYXQgaGF2ZSBjb21tZXJjaWFsIG9yIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcyBvZiBzcGVjaWFsbHktbGljZW5zZWQgcGFja2FnZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBlYWNoIG9mIHRob3NlIHJlY2lwZXMsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYSBtYXRjaGluZyBsaWNlbnNlIHN0cmluZyBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IHZhcmlhYmxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZSBtYXRjaGluZyBsaWNlbnNlIHN0cmluZyBzaWduaWZpZXMgdGhhdCB5b3UgYWdyZWUgdG8gdGhlIGxpY2Vuc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIGNhbiBidWlsZCB0aGUgY29ycmVzcG9uZGluZyByZWNpcGUgYW5kIGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21wb25lbnQgaW4gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2VuYWJsaW5nLWNvbW1lcmNpYWxseS1saWNlbnNlZC1yZWNpcGVzJz5FbmFibGluZworICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L3VsaW5rPiIgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBmb3IgZGV0YWlscyBvbiBob3cgdG8gdXNlIHRoZXNlIHZhcmlhYmxlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYnVpbGQgYXMgeW91IG5vcm1hbGx5IHdvdWxkLCB3aXRob3V0CisJCSAgICAgICAgc3BlY2lmeWluZyBhbnkgcmVjaXBlcyBpbiB0aGUKKwkJICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPiwgdGhlIGJ1aWxkIHN0b3BzIGFuZAorCQkgICAgICAgIHByb3ZpZGVzIHlvdSB3aXRoIHRoZSBsaXN0IG9mIHJlY2lwZXMgdGhhdCB5b3UgaGF2ZQorCQkgICAgICAgIHRyaWVkIHRvIGluY2x1ZGUgaW4gdGhlIGltYWdlIHRoYXQgbmVlZCBlbnRyaWVzIGluCisJCSAgICAgICAgdGhlIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+LgorCQkgICAgICAgIE9uY2UgeW91IGVudGVyIHRoZSBhcHByb3ByaWF0ZSBsaWNlbnNlIGZsYWdzIGludG8gdGhlIHdoaXRlbGlzdCwKKwkJICAgICAgICByZXN0YXJ0IHRoZSBidWlsZCB0byBjb250aW51ZSB3aGVyZSBpdCBsZWZ0IG9mZi4KKwkJICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUgcHJvbXB0IHdpbGwgbm90IGFwcGVhciBhZ2FpbgorCQkgICAgICAgIHNpbmNlIHlvdSBoYXZlIHNhdGlzZmllZCB0aGUgcmVxdWlyZW1lbnQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+T25jZSB0aGUgYXBwcm9wcmlhdGUgbGljZW5zZSBmbGFncyBhcmUgb24gdGhlIHdoaXRlIGxpc3QKKwkJICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdQorCQkgICAgICAgIGNhbiBidWlsZCB0aGUgZW5jdW1iZXJlZCBpbWFnZSB3aXRoIG5vIGNoYW5nZSBhdCBhbGwKKwkJICAgICAgICB0byB0aGUgbm9ybWFsIGJ1aWxkIHByb2Nlc3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IGEgcHJlLWJ1aWx0IHZlcnNpb24gb2YgdGhlIEJTUDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhpcyB0eXBlIG9mIEJTUCBieSB2aXNpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJEb3dubG9hZHMiIHBhZ2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IHdlYnNpdGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgQlNQIHRhcmJhbGxzIHRoYXQgY29udGFpbiBwcm9wcmlldGFyeSBjb21wb25lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBhZ3JlZWluZyB0byB0aGUgbGljZW5zaW5nCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgb2YgZWFjaCBvZiB0aGUgaW5kaXZpZHVhbGx5IGVuY3VtYmVyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFzIHBhcnQgb2YgdGhlIGRvd25sb2FkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBPYnRhaW5pbmcgdGhlIEJTUCB0aGlzIHdheSBhbGxvd3MgeW91IHRvIGFjY2VzcyBhbiBlbmN1bWJlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpbW1lZGlhdGVseSBhZnRlciBhZ3JlZWluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrLXRocm91Z2ggbGljZW5zZSBhZ3JlZW1lbnRzIHByZXNlbnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlYnNpdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3Vyc2VsZiB1c2luZyB0aGUgcmVjaXBlcyBjb250YWluZWQgd2l0aGluIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGwsIHlvdSB3aWxsIHN0aWxsIG5lZWQgdG8gY3JlYXRlIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPiB0byBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY3VtYmVyZWQgcmVjaXBlcyBpbiB0aGUgQlNQLjwvcGFyYT48L2xpc3RpdGVtPgorCSAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgUHJlLWNvbXBpbGVkIGltYWdlcyBhcmUgYnVuZGxlZCB3aXRoCisgICAgICAgICAgICAgICAgYSB0aW1lLWxpbWl0ZWQga2VybmVsIHRoYXQgcnVucyBmb3IgYQorICAgICAgICAgICAgICAgIHByZWRldGVybWluZWQgYW1vdW50IG9mIHRpbWUgKDEwIGRheXMpIGJlZm9yZSBpdCBmb3JjZXMKKyAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIHRvIHJlYm9vdC4KKyAgICAgICAgICAgICAgICBUaGlzIGxpbWl0YXRpb24gaXMgbWVhbnQgdG8gZGlzY291cmFnZSBkaXJlY3QgcmVkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgWW91IG11c3QgZXZlbnR1YWxseSByZWJ1aWxkIHRoZSBpbWFnZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyByZXN0cmljdGlvbi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdCdzIEJTUCBUb29sczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGluY2x1ZGVzIGEgY291cGxlIG9mIHRvb2xzIHRoYXQgZW5hYmxlCisgICAgICAgICAgICAgICAgeW91IHRvIGNyZWF0ZSBhIDxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBsYXllcjwvbGluaz4KKyAgICAgICAgICAgICAgICBmcm9tIHNjcmF0Y2ggYW5kIGRvIGJhc2ljIGNvbmZpZ3VyYXRpb24gYW5kIG1haW50ZW5hbmNlCisgICAgICAgICAgICAgICAgb2YgdGhlIGtlcm5lbCB3aXRob3V0IGV2ZXIgbG9va2luZyBhdCBhIE1ldGFkYXRhIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHJlc3BlY3RpdmVseS4KKwkgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSBjb21tb24gbG9jYXRpb24gYW5kIGhlbHAgZmVhdHVyZXMgYXMgd2VsbAorICAgICAgICAgICAgICAgIGFzIHByb3ZpZGUgZGV0YWlscyBmb3IgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gdG9vbHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb21tb24tZmVhdHVyZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db21tb24gRmVhdHVyZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlc2lnbmVkIHRvIGhhdmUgYSAgY29tbWFuZCBpbnRlcmZhY2Ugc29tZXdoYXQgbGlrZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+LCBlYWNoCisgICAgICAgICAgICAgICAgICAgIHRvb2wgaXMgc3RydWN0dXJlZCBhcyBhIHNldCBvZiBzdWItY29tbWFuZHMgdW5kZXIgYQorICAgICAgICAgICAgICAgICAgICB0b3AtbGV2ZWwgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvcC1sZXZlbCBjb21tYW5kICg8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+KSBpdHNlbGYgZG9lcworICAgICAgICAgICAgICAgICAgICBub3RoaW5nIGJ1dCBpbnZva2Ugb3IgcHJvdmlkZSBoZWxwIG9uIHRoZSBzdWItY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgaXQgc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJvdGggdG9vbHMgcmVzaWRlIGluIHRoZSA8ZmlsZW5hbWU+c2NyaXB0cy88L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0byB1c2UgdGhlIHNjcmlwdHMsIHlvdSBtdXN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQganVzdCBhcyB5b3Ugd291bGQgd2hlbiBpbnZva2luZyBhIGJ1aWxkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52IDxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGltbWVkaWF0ZWx5IHVzZWZ1bCBmdW5jdGlvbiBpcyB0byBnZXQgaGVscCBvbiBib3RoIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbHQtaW4gaGVscCBzeXN0ZW0gbWFrZXMgaXQgZWFzeSB0byBkcmlsbCBkb3duIGF0CisgICAgICAgICAgICAgICAgICAgIGFueSB0aW1lIGFuZCB2aWV3IHRoZSBzeW50YXggcmVxdWlyZWQgZm9yIGFueSBzcGVjaWZpYyBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBTaW1wbHkgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgd2l0aCB0aGUgPGZpbGVuYW1lPmhlbHA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2g6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1ic3AgaGVscAorICAgICBVc2FnZToKKworICAgICAgQ3JlYXRlIGEgY3VzdG9taXplZCBZb2N0byBCU1AgbGF5ZXIuCisKKyAgICAgIHVzYWdlOiB5b2N0by1ic3AgWy0tdmVyc2lvbl0gWy0taGVscF0gQ09NTUFORCBbQVJHU10KKworICAgICAgQ3VycmVudCAneW9jdG8tYnNwJyBjb21tYW5kcyBhcmU6CisgICAgICAgICBjcmVhdGUgICAgICAgICAgICBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisgICAgICAgICBsaXN0ICAgICAgICAgICAgICBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIG9wdGlvbnMgYW5kIEJTUCBwcm9wZXJ0aWVzCisKKyAgICAgIFNlZSAneW9jdG8tYnNwIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorCisKKyAgICAgT3B0aW9uczoKKyAgICAgICAtLXZlcnNpb24gICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC1ELCAtLWRlYnVnICBvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTaW1pbGFybHksIGVudGVyaW5nIGp1c3QgdGhlIG5hbWUgb2YgYSBzdWItY29tbWFuZCBzaG93cyB0aGUgZGV0YWlsZWQgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoYXQgc3ViLWNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1ic3AgY3JlYXRlCisKKyAgICAgVXNhZ2U6CisKKyAgICAgIENyZWF0ZSBhIG5ldyBZb2N0byBCU1AKKworICAgICAgdXNhZ2U6IHlvY3RvLWJzcCBjcmVhdGUgJmx0O2JzcC1uYW1lJmd0OyAmbHQ7a2FyY2gmZ3Q7IFstbyAmbHQ7RElSTkFNRSZndDsgfCAtLW91dGRpciAmbHQ7RElSTkFNRSZndDtdCisgICAgICAgICAgICAgWy1pICZsdDtKU09OIFBST1BFUlRZIEZJTEUmZ3Q7IHwgLS1pbmZpbGUgJmx0O0pTT04gUFJPUEVSVFlfRklMRSZndDtdCisKKyAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KKyAgICAgIFRoZSBuZXcgQlNQIHdpbGwgYmUgYSBuZXcgWW9jdG8gQlNQIGxheWVyIGNvbnRhaW5lZCBieSBkZWZhdWx0IHdpdGhpbgorICAgICAgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzICdtZXRhLWJzcC1uYW1lJy4gIFRoZSAtbyBvcHRpb24KKyAgICAgIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBCU1AgbGF5ZXIgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudAorICAgICAgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhbnkgc3ViLWNvbW1hbmQsIHlvdSBjYW4gdXNlIHRoZSB3b3JkICJoZWxwIiBvcHRpb24ganVzdCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIHN1Yi1jb21tYW5kIHRvIGdldCBtb3JlIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGhlbHAgY3JlYXRlCisKKyAgICAgTkFNRQorICAgICAgICAgeW9jdG8tYnNwIGNyZWF0ZSAtIENyZWF0ZSBhIG5ldyBZb2N0byBCU1AKKworICAgICBTWU5PUFNJUworICAgICAgICAgeW9jdG8tYnNwIGNyZWF0ZSAmbHQ7YnNwLW5hbWUmZ3Q7ICZsdDtrYXJjaCZndDsgWy1vICZsdDtESVJOQU1FJmd0OyB8IC0tb3V0ZGlyICZsdDtESVJOQU1FJmd0O10KKyAgICAgICAgICAgICBbLWkgJmx0O0pTT04gUFJPUEVSVFkgRklMRSZndDsgfCAtLWluZmlsZSAmbHQ7SlNPTiBQUk9QRVJUWV9GSUxFJmd0O10KKworICAgICBERVNDUklQVElPTgorICAgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBZb2N0byBCU1AgYmFzZWQgb24gdGhlIHNwZWNpZmllZAorICAgICAgICAgcGFyYW1ldGVycy4gIFRoZSBuZXcgQlNQIHdpbGwgYmUgYSBuZXcgWW9jdG8gQlNQIGxheWVyIGNvbnRhaW5lZAorICAgICAgICAgYnkgZGVmYXVsdCB3aXRoaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzCisgICAgICAgICAnbWV0YS1ic3AtbmFtZScuICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBCU1AgbGF5ZXIKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIGZpbGVzCisgICAgICAgICB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgQlNQLCBhbG9uZyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YKKyAgICAgICAgICdwcm9wZXJ0aWVzJyB0aGF0IHdpbGwgYmUgdXNlZCB0byBmaWxsIG91dCB0aGUgQlNQLXNwZWNpZmljCisgICAgICAgICBwb3J0aW9ucyBvZiB0aGUgQlNQLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICdrYXJjaCcgcGFyYW1ldGVyCisgICAgICAgICBjYW4gYmUgbGlzdGVkIHZpYSAneW9jdG8tYnNwIGxpc3Qga2FyY2gnLgorCisgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBOb3cgdGhhdCB5b3Uga25vdyB3aGVyZSB0aGVzZSB0d28gY29tbWFuZHMgcmVzaWRlIGFuZCBob3cgdG8gYWNjZXNzIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZW0sIHlvdSBzaG91bGQgZmluZCBpdCByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBkaXNjb3ZlciB0aGUgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIEJTUCBhbmQgcGVyZm9ybSBiYXNpYyBrZXJuZWwgbWFpbnRlbmFuY2Ugb24gdGhhdCBCU1AgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHRvb2wgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBhICJnZW5lcmljIiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvb2wsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5leHQgc2VjdGlvbnMgcHJvdmlkZSBhIGNvbmNyZXRlIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGFuZCBvbiBhIGZldyBwb2ludHMgdGhhdAorICAgICAgICAgICAgICAgICAgICBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cyBvciB0aGF0IGNvdWxkIHVzZSBmdXJ0aGVyIGV4cGxhbmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBuZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHNjcmlwdCBjcmVhdGVzIGEgbmV3CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBsYXllcjwvbGluaz4gZm9yIGFueSBhcmNoaXRlY3R1cmUgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBhcyB3ZWxsIGFzIFFFTVUgdmVyc2lvbnMgb2YgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IG1vZGUgb2YgdGhlIHNjcmlwdCdzIG9wZXJhdGlvbiBpcyB0byBwcm9tcHQgeW91IGZvciBpbmZvcm1hdGlvbiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBjdXJyZW50IHNldCBvZiBCU1BzLCB0aGUgc2NyaXB0IHByb21wdHMgeW91IGZvciB2YXJpb3VzIGltcG9ydGFudAorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGtlcm5lbCB0byB1c2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgYnJhbmNoIG9mIHRoYXQga2VybmVsIHRvIHVzZSAob3IgcmUtdXNlKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgb3Igbm90IHRvIHVzZSBYLCBhbmQgaWYgc28sIHdoaWNoIGRyaXZlcnMgdG8gdXNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hldGhlciB0byB0dXJuIG9uIFNNUDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdGhlIEJTUCBoYXMgYSBrZXlib2FyZDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdGhlIEJTUCBoYXMgYSB0b3VjaHNjcmVlbjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlbWFpbmluZyBjb25maWd1cmFibGUgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBCU1A8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1ic3AgY3JlYXRlPC9maWxlbmFtZT4gc3ViLWNvbW1hbmQgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgICAgIGEgbmV3IEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHJlcXVpcmVzIHlvdSB0byBzcGVjaWZ5IGEgcGFydGljdWxhciBrZXJuZWwgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+a2FyY2g8L2ZpbGVuYW1lPikgb24gd2hpY2ggdG8gYmFzZSB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3AgbGlzdCBrYXJjaDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIHRvIGxpc3QgdGhlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlIGZvciBCU1AgY3JlYXRpb24gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWJzcCBsaXN0IGthcmNoCisgICAgIEFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlOgorICAgICAgICAgcWVtdQorICAgICAgICAgbWlwczY0CisgICAgICAgICBwb3dlcnBjCisgICAgICAgICB4ODZfNjQKKyAgICAgICAgIGFybQorICAgICAgICAgbWlwcworICAgICAgICAgaTM4NgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIGFuIGV4YW1wbGUgdGhhdCB1c2VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWFybTwvZmlsZW5hbWU+IGFzIHRoZSBtYWNoaW5lIG5hbWUgYW5kIDxmaWxlbmFtZT5xZW11PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBPZiB0aGUgYXZhaWxhYmxlIGFyY2hpdGVjdHVyZXMsIDxmaWxlbmFtZT5xZW11PC9maWxlbmFtZT4gaXMgdGhlIG9ubHkgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2VzIHRoZSBzY3JpcHQgdG8gcHJvbXB0IHlvdSBmdXJ0aGVyIGZvciBhbiBhY3R1YWwgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBJbiBldmVyeSBvdGhlciB3YXksIHRoaXMgYXJjaGl0ZWN0dXJlIGlzIHJlcHJlc2VudGF0aXZlIG9mIGhvdyBjcmVhdGluZyBhIEJTUCBmb3IKKyAgICAgICAgICAgICAgICAgICAgYW4gYWN0dWFsIG1hY2hpbmUgd291bGQgd29yay4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiB0aGUgZXhhbXBsZSB1c2VzIHRoaXMgYXJjaGl0ZWN0dXJlIGlzIGJlY2F1c2UgaXQgaXMgYW4gZW11bGF0ZWQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGFuZCBjYW4gZWFzaWx5IGJlIGZvbGxvd2VkIHdpdGhvdXQgcmVxdWlyaW5nIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgdGhlIDxmaWxlbmFtZT55b2N0by1ic3AgY3JlYXRlPC9maWxlbmFtZT4gY29tbWFuZCBydW5zLCBkZWZhdWx0IHZhbHVlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByb21wdHMgYXBwZWFyIGluIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICBQcmVzc2luZyBlbnRlciB3aXRob3V0IHN1cHBseWluZyBhbnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIHByZXNzaW5nIGVudGVyCisgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gaW52YWxpZCByZXNwb25zZSBjYXVzZXMgdGhlIHNjcmlwdCB0byBhY2NlcHQgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIHNjcmlwdCBjb21wbGV0ZXMsIHRoZSBuZXcgPGZpbGVuYW1lPm1ldGEtbXlhcm08L2ZpbGVuYW1lPiBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgaXMgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgeW91IGhhdmUgc291cmNlZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBjb21wbGV0ZSBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGNyZWF0ZSBteWFybSBxZW11CisgICAgIENoZWNraW5nIGJhc2ljIGdpdCBjb25uZWN0aXZpdHkuLi4KKyAgICAgRG9uZS4KKyAgICAgV2hpY2ggcWVtdSBhcmNoaXRlY3R1cmUgd291bGQgeW91IGxpa2UgdG8gdXNlPyBbZGVmYXVsdDogaTM4Nl0KKyAgICAgICAgIDEpIGkzODYgICAgKDMyLWJpdCkKKyAgICAgICAgIDIpIHg4Nl82NCAgKDY0LWJpdCkKKyAgICAgICAgIDMpIEFSTSAgICAgKDMyLWJpdCkKKyAgICAgICAgIDQpIFBvd2VyUEMgKDMyLWJpdCkKKyAgICAgICAgIDUpIE1JUFMgICAgKDMyLWJpdCkKKyAgICAgICAgIDYpIE1JUFM2NCAgKDY0LWJpdCkKKyAgICAgMworICAgICBXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikgW2RlZmF1bHQ6IHldIHkKKyAgICAgRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIFtkZWZhdWx0OiB5XQorICAgICBHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQuLi4KKyAgICAgUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjogW2RlZmF1bHQ6IHN0YW5kYXJkL2Jhc2VdCisgICAgICAgICAxKSBzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcworICAgICAgICAgMikgc3RhbmRhcmQvYmFzZQorICAgICAgICAgMykgc3RhbmRhcmQvYmVhZ2xlYm9hcmQKKyAgICAgICAgIDQpIHN0YW5kYXJkL2JlYWdsZWJvbmUKKyAgICAgICAgIDUpIHN0YW5kYXJkL2NrCisgICAgICAgICA2KSBzdGFuZGFyZC9jb21tb24tcGMKKyAgICAgICAgIDcpIHN0YW5kYXJkL2Nyb3duYmF5CisgICAgICAgICA4KSBzdGFuZGFyZC9lZGdlcm91dGVyCisgICAgICAgICA5KSBzdGFuZGFyZC9mc2wtbXBjODMxNWUtcmRiCisgICAgICAgICAxMCkgc3RhbmRhcmQvbXRpLW1hbHRhMzIKKyAgICAgICAgIDExKSBzdGFuZGFyZC9tdGktbWFsdGE2NAorICAgICAgICAgMTIpIHN0YW5kYXJkL3FlbXVhcm02NAorICAgICAgICAgMTMpIHN0YW5kYXJkL3FlbXVwcGMKKyAgICAgMQorICAgICBXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikgW2RlZmF1bHQ6IHldCisgICAgIERvZXMgeW91ciBCU1AgaGF2ZSBhIHRvdWNoc2NyZWVuPyAoeS9uKSBbZGVmYXVsdDogbl0KKyAgICAgRG9lcyB5b3VyIEJTUCBoYXZlIGEga2V5Ym9hcmQ/ICh5L24pIFtkZWZhdWx0OiB5XQorICAgICBOZXcgcWVtdSBCU1AgY3JlYXRlZCBpbiBtZXRhLW15YXJtCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBleGFtcGxlIG5vdzoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciB0aGUgUUVNVSBhcmNoaXRlY3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdCBmaXJzdCBwcm9tcHRzIHlvdSBmb3Igd2hpY2ggZW11bGF0ZWQgYXJjaGl0ZWN0dXJlIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgd2UgdXNlIHRoZSBBUk0gYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgdGhlbiBwcm9tcHRzIHlvdSBmb3IgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAzLjE5IGtlcm5lbCBpcyBhY2NlcHRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvLCB0aGUgZXhhbXBsZSBhY2NlcHRzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbnRlciAnbicsIHRoZSBzY3JpcHQgcHJvbXB0cyB5b3UgdG8gZnVydGhlciBlbnRlciB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGRvIHdhbnQgdG8gdXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk5leHQsIHRoZSBzY3JpcHQgYXNrcyB3aGV0aGVyIHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2ggY3JlYXRlZCBlc3BlY2lhbGx5IGZvciB5b3VyIEJTUCBpbiB0aGUgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC1rZXJuZWwtZmlsZXMnPkxpbnV4IFlvY3RvIEtlcm5lbDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCwgdGhlbiB0aGUgc2NyaXB0IHJlLXVzZXMgYW4gZXhpc3RpbmcgYnJhbmNoLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiB0aGlzIGV4YW1wbGUsIHRoZSBkZWZhdWx0IChvciAieWVzIikgaXMgYWNjZXB0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgYSBuZXcgYnJhbmNoIGlzIGNyZWF0ZWQgZm9yIHRoZSBCU1AgcmF0aGVyIHRoYW4gdXNpbmcgYSBjb21tb24sIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmV3IGJyYW5jaCBpcyB0aGUgYnJhbmNoIGNvbW1pdHRlZCB0byBmb3IgYW55IHBhdGNoZXMgeW91IG1pZ2h0IGxhdGVyIGFkZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGEgbmV3IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBpcyB0aGF0IHR5cGljYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCU1BzIGRvIHJlcXVpcmUgQlNQLXNwZWNpZmljIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgdGh1cyBhc3N1bWVzIHRoYXQgbW9zdCBvZiB0aW1lIGEgbmV3IGJyYW5jaCBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWdhcmRsZXNzIG9mIHdoaWNoIGNob2ljZSB5b3UgbWFrZSBpbiB0aGUgcHJldmlvdXMgc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIG5vdyBnaXZlbiB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VsZWN0IGEgcGFydGljdWxhciBtYWNoaW5lIGJyYW5jaCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIGJhc2UgeW91ciBuZXcgQlNQLXNwZWNpZmljIG1hY2hpbmUgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRvIHJlLXVzZSBpZiB5b3UgaGFkIGVsZWN0ZWQgdG8gbm90IGNyZWF0ZSBhIG5ldyBicmFuY2gpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhpcyBleGFtcGxlIGlzIGdlbmVyYXRpbmcgYW4gQVJNLWJhc2VkIEJTUCwgdGhlIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzIDxmaWxlbmFtZT4jMTwvZmlsZW5hbWU+IGF0IHRoZSBwcm9tcHQsIHdoaWNoIHNlbGVjdHMgdGhlIEFSTS12ZXJzYXRpbGUgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZW1haW5kZXIgb2YgdGhlIHByb21wdHMgYXJlIHJvdXRpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgYXJlIGFjY2VwdGVkIGZvciBlYWNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ5IGRlZmF1bHQsIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUgbmV3IEJTUCBMYXllciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgQlNQIExheWVyIGlzIGNyZWF0ZWQsIHlvdSBtdXN0IGFkZCBpdCB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID0gPyAiIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YSBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8gXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEtbXlhcm0gXAorICAgICAgICAiCisKKyAgICAgQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YSBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8gXAorICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBsYXllciB0byB0aGlzIGZpbGUgYWxsb3dzIHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIEJTUCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiB0b29sIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgbGF5ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgIG90aGVyIE1ldGFkYXRhIGl0IG5lZWRzIG9uIHdoaWNoIHRvIG9wZXJhdGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbWFuYWdpbmcta2VybmVsLXBhdGNoZXMtYW5kLWNvbmZpZy1pdGVtcy13aXRoLXlvY3RvLWtlcm5lbCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1hbmFnaW5nIEtlcm5lbCBQYXRjaGVzIGFuZCBDb25maWcgSXRlbXMgd2l0aCB5b2N0by1rZXJuZWw8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdSBoYXZlIGNyZWF0ZWQgYSA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgTGF5ZXI8L2xpbms+IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPjwvbGluaz4gYW5kIHlvdSBhZGRlZCBpdCB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIG5vdyB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgdG8gYWRkIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaXRlbXMgdG8gdGhlIEJTUCdzIGtlcm5lbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgYWxsb3dzIHlvdSB0byBhZGQsIHJlbW92ZSwgYW5kIGxpc3QgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICBhbmQga2VybmVsIGNvbmZpZyBzZXR0aW5ncyB0byBhIEJTUCdzIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHVzZSB0aGUgYXBwcm9wcmlhdGUgc3ViLWNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFJlY2FsbCB0aGF0IHRoZSBlYXNpZXN0IHdheSB0byBzZWUgZXhhY3RseSB3aGF0IHN1Yi1jb21tYW5kcyBhcmUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGlzIHRvIHVzZSB0aGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+IGJ1aWx0LWluIGhlbHAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCAtLWhlbHAKKyAgICAgVXNhZ2U6CisgICAgICBNb2RpZnkgYW5kIGxpc3QgWW9jdG8gQlNQIGtlcm5lbCBjb25maWcgaXRlbXMgYW5kIHBhdGNoZXMuCisgICAgICB1c2FnZTogeW9jdG8ta2VybmVsIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisgICAgICBDdXJyZW50ICd5b2N0by1rZXJuZWwnIGNvbW1hbmRzIGFyZToKKyAgICAgICAgY29uZmlnIGxpc3QgICAgICAgTGlzdCB0aGUgbW9kaWZpYWJsZSBzZXQgb2YgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisgICAgICAgIGNvbmZpZyBhZGQgICAgICAgIEFkZCBvciBtb2RpZnkgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisgICAgICAgIGNvbmZpZyBybSAgICAgICAgIFJlbW92ZSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmcm9tIGEgQlNQCisgICAgICAgIHBhdGNoIGxpc3QgICAgICAgIExpc3QgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIGEgQlNQCisgICAgICAgIHBhdGNoIGFkZCAgICAgICAgIFBhdGNoIHRoZSBZb2N0byBrZXJuZWwgZm9yIGEgQlNQCisgICAgICAgIHBhdGNoIHJtICAgICAgICAgIFJlbW92ZSBwYXRjaGVzIGZyb20gYSBCU1AKKyAgICAgICAgZmVhdHVyZSBsaXN0ICAgICAgTGlzdCB0aGUgZmVhdHVyZXMgdXNlZCBieSBhIEJTUAorICAgICAgICBmZWF0dXJlIGFkZCAgICAgICBIYXZlIGEgQlNQIHVzZSBhIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZSBybSAgICAgICAgSGF2ZSBhIEJTUCBzdG9wIHVzaW5nIGEgZmVhdHVyZQorICAgICAgICBmZWF0dXJlcyBsaXN0ICAgICBMaXN0IHRoZSBmZWF0dXJlcyBhdmFpbGFibGUgdG8gQlNQcworICAgICAgICBmZWF0dXJlIGRlc2NyaWJlICBEZXNjcmliZSBhIHBhcnRpY3VsYXIgZmVhdHVyZQorICAgICAgICBmZWF0dXJlIGNyZWF0ZSAgICBDcmVhdGUgYSBuZXcgQlNQLWxvY2FsIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZSBkZXN0cm95ICAgUmVtb3ZlIGEgQlNQLWxvY2FsIGZlYXR1cmUKKyAgICAgIFNlZSAneW9jdG8ta2VybmVsIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorICAgICBPcHRpb25zOgorICAgICAgIC0tdmVyc2lvbiAgICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgIC1oLCAtLWhlbHAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLUQsIC0tZGVidWcgIG91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIGFkZDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIGFsbG93cyB5b3UgdG8gYWRkIGEKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2ggdG8gYSBCU1AuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBhZGRzIHR3byBwYXRjaGVzIHRvIHRoZSA8ZmlsZW5hbWU+bXlhcm08L2ZpbGVuYW1lPiBCU1A6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIG15YXJtIH4vdGVzdC5wYXRjaAorICAgICBBZGRlZCBwYXRjaGVzOgorICAgICAgIHRlc3QucGF0Y2gKKworICAgICAkIHlvY3RvLWtlcm5lbCBwYXRjaCBhZGQgbXlhcm0gfi95b2N0by10ZXN0bW9kLnBhdGNoCisgICAgIEFkZGVkIHBhdGNoZXM6CisgICAgICAgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPkFsdGhvdWdoIHRoZSBwcmV2aW91cyBleGFtcGxlIGFkZHMgcGF0Y2hlcyBvbmUgYXQgYSB0aW1lLCBpdCBpcyBwb3NzaWJsZQorICAgICAgICAgICAgICAgICAgICB0byBhZGQgbXVsdGlwbGUgcGF0Y2hlcyBhdCB0aGUgc2FtZSB0aW1lLjwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB2ZXJpZnkgcGF0Y2hlcyBoYXZlIGJlZW4gYWRkZWQgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggbGlzdDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCBteWFybQorICAgICBUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBwYXRjaGVzIGZvciBteWFybSBpczoKKyAgICAgICAxKSB0ZXN0LnBhdGNoCisgICAgICAgMikgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgdG8KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIGEgcGF0Y2ggdXNpbmcgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggcm08L2ZpbGVuYW1lPiBzdWItY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIHJtIG15YXJtCisgICAgIFNwZWNpZnkgdGhlIHBhdGNoZXMgdG8gcmVtb3ZlOgorICAgICAgIDEpIHRlc3QucGF0Y2gKKyAgICAgICAyKSB5b2N0by10ZXN0bW9kLnBhdGNoCisgICAgIDEKKyAgICAgUmVtb3ZlZCBwYXRjaGVzOgorICAgICAgIHRlc3QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgdXNpbmcgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggbGlzdDwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHZlcmlmeSB0aGF0IHRoZSBwYXRjaCB3YXMgaW4gZmFjdCByZW1vdmVkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIGxpc3QgbXlhcm0KKyAgICAgVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGF0Y2hlcyBmb3IgbXlhcm0gaXM6CisgICAgICAgMSkgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIGEgY29tcGxldGVseSBzaW1pbGFyIHdheSwgeW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgY29uZmlnIGFkZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1Yi1jb21tYW5kIHRvIGFkZCBvbmUgb3IgbW9yZSBrZXJuZWwgY29uZmlnIGl0ZW0gc2V0dGluZ3MgdG8gYSBCU1AuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYWRkIGEgY291cGxlIG9mIGNvbmZpZyBpdGVtcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15YXJtPC9maWxlbmFtZT4gQlNQOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgbXlhcm0gQ09ORklHX01JU0NfREVWSUNFUz15CisgICAgIEFkZGVkIGl0ZW06CisgICAgICAgQ09ORklHX01JU0NfREVWSUNFUz15CisKKyAgICAgJCB5b2N0by1rZXJuZWwgY29uZmlnIGFkZCBteWFybSBDT05GSUdfWU9DVE9fVEVTVE1PRD15CisgICAgIEFkZGVkIGl0ZW06CisgICAgICAgQ09ORklHX1lPQ1RPX1RFU1RNT0Q9eQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHByZXZpb3VzIGV4YW1wbGUgYWRkcyBjb25maWcgaXRlbXMgb25lIGF0IGEgdGltZSwgaXQgaXMgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBtdWx0aXBsZSBjb25maWcgaXRlbXMgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGxpc3QgdGhlIGNvbmZpZyBpdGVtcyBub3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvIHNob3dzIHlvdSB0aGUgY29uZmlnIGl0ZW1zIHlvdSBhZGRlZCBhcyB3ZWxsIGFzIG90aGVycyBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIEJTUDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBjb25maWcgbGlzdCBteWFybQorICAgICBUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBrZXJuZWwgY29uZmlnIGl0ZW1zIGZvciBteWFybSBpczoKKyAgICAgICAgICAgICAxKSBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyAgICAgICAgICAgICAyKSBDT05GSUdfWU9DVE9fVEVTVE1PRD15CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiByZW1vdmUgb25lIG9yIG1vcmUgY29uZmlnIGl0ZW1zIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIGNvbmZpZyBybTwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIGluIGEgbWFubmVyCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlbHkgYW5hbG9nb3VzIHRvIDxmaWxlbmFtZT55b2N0by1rZXJuZWwgcGF0Y2ggcm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvZmlndXJlcy9ic3AtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9maWd1cmVzL2JzcC10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyNGRkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvZmlndXJlcy9ic3AtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI3YTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sCkBAIC0wLDAgKzEsMTAwNDkgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdleHRlbmRwb2t5Jz4KKworPHRpdGxlPkNvbW1vbiBUYXNrczwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgZnVuZGFtZW50YWwgcHJvY2VkdXJlcyBzdWNoIGFzIGNyZWF0aW5nIGxheWVycywKKyAgICAgICAgYWRkaW5nIG5ldyBzb2Z0d2FyZSBwYWNrYWdlcywgZXh0ZW5kaW5nIG9yIGN1c3RvbWl6aW5nIGltYWdlcywKKyAgICAgICAgcG9ydGluZyB3b3JrIHRvIG5ldyBoYXJkd2FyZSAoYWRkaW5nIGEgbmV3IG1hY2hpbmUpLCBhbmQgc28gZm9ydGguCisgICAgICAgIFlvdSB3aWxsIGZpbmQgdGhhdCB0aGUgcHJvY2VkdXJlcyBkb2N1bWVudGVkIGhlcmUgb2NjdXIgb2Z0ZW4gaW4gdGhlCisgICAgICAgIGRldmVsb3BtZW50IGN5Y2xlIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSJ1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMiPgorICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIG9yZ2FuaXppbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4gaW50byBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICBMYXllcnMgYWxsb3cgeW91IHRvIGlzb2xhdGUgZGlmZmVyZW50IHR5cGVzIG9mIGN1c3RvbWl6YXRpb25zIGZyb20KKyAgICAgICAgICAgIGVhY2ggb3RoZXIuCisgICAgICAgICAgICBZb3UgbWlnaHQgZmluZCBpdCB0ZW1wdGluZyB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gb25lIGxheWVyIHdoZW4KKyAgICAgICAgICAgIHdvcmtpbmcgb24gYSBzaW5nbGUgcHJvamVjdC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBtb3JlIG1vZHVsYXIgeW91ciBNZXRhZGF0YSwgdGhlIGVhc2llcgorICAgICAgICAgICAgaXQgaXMgdG8gY29wZSB3aXRoIGZ1dHVyZSBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBpbGx1c3RyYXRlIGhvdyBsYXllcnMgYXJlIHVzZWQgdG8ga2VlcCB0aGluZ3MgbW9kdWxhciwgY29uc2lkZXIKKyAgICAgICAgICAgIG1hY2hpbmUgY3VzdG9taXphdGlvbnMuCisgICAgICAgICAgICBUaGVzZSB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyB0eXBpY2FsbHkgcmVzaWRlIGluIGEgc3BlY2lhbCBsYXllciwKKyAgICAgICAgICAgIHJhdGhlciB0aGFuIGEgZ2VuZXJhbCBsYXllciwgY2FsbGVkIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICBMYXllci4KKyAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgbWFjaGluZSBjdXN0b21pemF0aW9ucyBzaG91bGQgYmUgaXNvbGF0ZWQgZnJvbQorICAgICAgICAgICAgcmVjaXBlcyBhbmQgTWV0YWRhdGEgdGhhdCBzdXBwb3J0IGEgbmV3IEdVSSBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIGZvciBleGFtcGxlLgorICAgICAgICAgICAgVGhpcyBzaXR1YXRpb24gZ2l2ZXMgeW91IGEgY291cGxlIG9mIGxheWVyczogb25lIGZvciB0aGUgbWFjaGluZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbnMsIGFuZCBvbmUgZm9yIHRoZSBHVUkgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCB0aGUgQlNQIGxheWVyIGNhbgorICAgICAgICAgICAgc3RpbGwgbWFrZSBtYWNoaW5lLXNwZWNpZmljIGFkZGl0aW9ucyB0byByZWNpcGVzIHdpdGhpbiB0aGUgR1VJCisgICAgICAgICAgICBlbnZpcm9ubWVudCBsYXllciB3aXRob3V0IHBvbGx1dGluZyB0aGUgR1VJIGxheWVyIGl0c2VsZgorICAgICAgICAgICAgd2l0aCB0aG9zZSBtYWNoaW5lLXNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyB0aHJvdWdoIGEgcmVjaXBlIHRoYXQgaXMgYSBCaXRCYWtlIGFwcGVuZAorICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZmlsZSwgd2hpY2ggaXMgZGVzY3JpYmVkIGxhdGVyCisgICAgICAgICAgICBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd5b2N0by1wcm9qZWN0LWxheWVycyc+CisgICAgICAgICAgICA8dGl0bGU+TGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgY29udGFpbnMgYm90aCBnZW5lcmFsIGxheWVycyBhbmQgQlNQCisgICAgICAgICAgICAgICAgbGF5ZXJzIHJpZ2h0IG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWFzaWx5IGlkZW50aWZ5IGxheWVycyB0aGF0IHNoaXAgd2l0aCBhCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGJ5IHRoZWlyCisgICAgICAgICAgICAgICAgZm9sZGVyIG5hbWVzLgorICAgICAgICAgICAgICAgIEZvbGRlcnMgdGhhdCByZXByZXNlbnQgbGF5ZXJzIHR5cGljYWxseSBoYXZlIG5hbWVzIHRoYXQgYmVnaW4gd2l0aAorICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcgPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBhIHJlcXVpcmVtZW50IHRoYXQgYSBsYXllciBuYW1lIGJlZ2luIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA8ZmlsZW5hbWU+bWV0YS08L2ZpbGVuYW1lPiwgYnV0IGl0IGlzIGEgY29tbW9ubHkKKyAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgc3RhbmRhcmQgaW4gdGhlIFlvY3RvIFByb2plY3QgY29tbXVuaXR5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiB5b3Ugc2V0IHVwIHRoZSBTb3VyY2UgRGlyZWN0b3J5IHN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICB5b3Ugd2lsbCBzZWUgc2V2ZXJhbCBsYXllcnM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1za2VsZXRvbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXNlbGZ0ZXN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSBmb2xkZXJzIHJlcHJlc2VudHMgYSBkaXN0aW5jdCBsYXllci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW5vdGhlciBleGFtcGxlLCBpZiB5b3Ugc2V0IHVwIGEgbG9jYWwgY29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgYW5kIHRoZW4gZXhwbG9yZSB0aGUgZm9sZGVyIG9mIHRoYXQgZ2VuZXJhbCBsYXllciwKKyAgICAgICAgICAgICAgICB5b3Ugd2lsbCBkaXNjb3ZlciBtYW55IEludGVsLXNwZWNpZmljIEJTUCBsYXllcnMgaW5zaWRlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmcteW91ci1vd24tbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIFlvdXIgT3duIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgdmVyeSBlYXN5IHRvIGNyZWF0ZSB5b3VyIG93biBsYXllcnMgdG8gdXNlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzaGlwcyB3aXRoIHNjcmlwdHMgdGhhdCBzcGVlZCB1cCBjcmVhdGluZworICAgICAgICAgICAgICAgIGdlbmVyYWwgbGF5ZXJzIGFuZCBCU1AgbGF5ZXJzLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHN0ZXBzIHlvdSBwZXJmb3JtIGJ5IGhhbmQgdG8gY3JlYXRlCisgICAgICAgICAgICAgICAgYSBsYXllciBzbyB0aGF0IHlvdSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgdGhlbS4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxheWVyLWNyZWF0aW9uIHNjcmlwdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZ1cnRoZXIgZG93biBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHMgdG8gY3JlYXRlIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoZWNrIEV4aXN0aW5nIExheWVyczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIGNyZWF0aW5nIGEgbmV3IGxheWVyLCB5b3Ugc2hvdWxkIGJlIHN1cmUgc29tZW9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIG5vdCBhbHJlYWR5IGNyZWF0ZWQgYSBsYXllciBjb250YWluaW5nIHRoZSBNZXRhZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVycy8nPjxmaWxlbmFtZT5PcGVuRW1iZWRkZWQgTWV0YWRhdGEgSW5kZXg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBsaXN0IG9mIGxheWVycyBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgY29tbXVuaXR5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgeW91ciBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIG5vdCBzdHJpY3RseSByZXF1aXJlZCwgcHJlcGVuZCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlciB3aXRoIHRoZSBzdHJpbmcgPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1teWxheWVyCisgICAgIG1ldGEtR1VJX3h5egorICAgICBtZXRhLW15bWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgTGF5ZXIgQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgIEluc2lkZSB5b3VyIG5ldyBsYXllciBmb2xkZXIsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBlYXNpZXN0IHRvIHRha2UgYW4gZXhpc3RpbmcgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGFuZCBjb3B5IHRoYXQgdG8geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZCB0aGVuIG1vZGlmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBhcyBuZWVkZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgZGVtb25zdHJhdGVzIHRoZSByZXF1aXJlZCBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKKyAgICAgQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyAgICAgIyBXZSBoYXZlIHJlY2lwZXMtKiBkaXJlY3RvcmllcywgYWRkIHRvIEJCRklMRVMKKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKKyAgICAgQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ5b2N0b2JzcCIKKyAgICAgQkJGSUxFX1BBVFRFUk5feW9jdG9ic3AgPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX3lvY3RvYnNwID0gIjUiCisgICAgIExBWUVSVkVSU0lPTl95b2N0b2JzcCA9ICIzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgY29uZmlndXJhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBkaXJlY3RvcnkgaXMgYXBwZW5kZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG5vbi1kaXN0cm8gbGF5ZXJzLCB3aGljaCBpbmNsdWRlIGFsbCBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycywgYXJlIGV4cGVjdGVkIHRvIGFwcGVuZCB0aGUgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBkaXN0cm8gbGF5ZXJzLCBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+LCBjYW4gY2hvb3NlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBlbmZvcmNlIHRoZWlyIG93biBwcmVjZWRlbmNlIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIHRoYXQgc3ludGF4LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVjaXBlcyBmb3IgdGhlIGxheWVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVTJz5CQkZJTEVTPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCRklMRV9DT0xMRUNUSU9OUyc+QkJGSUxFX0NPTExFQ1RJT05TPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyB0aGVuIGFwcGVuZGVkIHdpdGggdGhlIGxheWVyIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVfUEFUVEVSTic+QkJGSUxFX1BBVFRFUk48L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBtYXRjaCBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaW50byBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MQVlFUkRJUic+TEFZRVJESVI8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gbWFrZSA8ZmlsZW5hbWU+QkJGSUxFX1BBVFRFUk48L2ZpbGVuYW1lPiBtYXRjaCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyJ3MgcGF0aC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFX1BSSU9SSVRZJz5CQkZJTEVfUFJJT1JJVFk8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRoZW4gYXNzaWducyBhIHByaW9yaXR5IHRvIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHlpbmcgcHJpb3JpdGllcyBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgc2FtZSByZWNpcGUgbWlnaHQgYXBwZWFyIGluIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVycyBhbmQgYWxsb3dzIHlvdSB0byBjaG9vc2UgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGFrZXMgcHJlY2VkZW5jZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEFZRVJWRVJTSU9OJz5MQVlFUlZFUlNJT048L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Tm90ZSB0aGUgdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MQVlFUkRJUic+TEFZRVJESVI8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggZXhwYW5kcyB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllci48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaHJvdWdoIHRoZSB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIEJpdEJha2UgbG9jYXRlcyBjbGFzcyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCBCaXRCYWtlIHVzZXMgdGhlIGZpcnN0IGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyB0aGUgbmFtZSBmb3VuZCBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHdheSB0aGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdXNlZCBmb3IgYmluYXJpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCwgdGhlcmVmb3JlLCB0aGF0IHlvdSB1c2UgdW5pcXVlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzIGluIHlvdXIgY3VzdG9tIGxheWVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZCBDb250ZW50OjwvZW1waGFzaXM+IERlcGVuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHR5cGUgb2YgbGF5ZXIsIGFkZCB0aGUgY29udGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsYXllciBhZGRzIHN1cHBvcnQgZm9yIGEgbWFjaGluZSwgYWRkIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluIGEgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB3aXRoaW4gdGhlIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGxheWVyIGFkZHMgZGlzdHJvIHBvbGljeSwgYWRkIHRoZSBkaXN0cm8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW4gYSA8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aGluIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsYXllciBpbnRyb2R1Y2VzIG5ldyByZWNpcGVzLCBwdXQgdGhlIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGluIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPkluIG9yZGVyIHRvIGJlIGNvbXBsaWFudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbGF5ZXIgbXVzdCBjb250YWluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtZmlsZWxheW91dC1yZWFkbWUnPlJFQURNRSBmaWxlLjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtdG8tZm9sbG93LXdoZW4tY3JlYXRpbmctbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5CZXN0IFByYWN0aWNlcyB0byBGb2xsb3cgV2hlbiBDcmVhdGluZyBMYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgbGF5ZXJzIHRoYXQgYXJlIGVhc2llciB0byBtYWludGFpbiBhbmQgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgbm90IGltcGFjdCBidWlsZHMgZm9yIG90aGVyIG1hY2hpbmVzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZQorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhdm9pZC1vdmVybGF5aW5nLWVudGlyZS1yZWNpcGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QXZvaWQgIk92ZXJsYXlpbmciIEVudGlyZSBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdm9pZCAib3ZlcmxheWluZyIgZW50aXJlIHJlY2lwZXMgZnJvbSBvdGhlciBsYXllcnMgaW4geW91cgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgZG8gbm90IGNvcHkgYW4gZW50aXJlIHJlY2lwZSBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYW5kIHRoZW4gbW9kaWZ5IGl0LgorICAgICAgICAgICAgICAgICAgICBSYXRoZXIsIHVzZSBhbiBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICB0byBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBvbmx5IHRob3NlIHBhcnRzIG9mIHRoZSBvcmlnaW5hbCByZWNpcGUgeW91IG5lZWQgdG8gbW9kaWZ5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2F2b2lkLWR1cGxpY2F0aW5nLWluY2x1ZGUtZmlsZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Bdm9pZCBEdXBsaWNhdGluZyBJbmNsdWRlIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdm9pZCBkdXBsaWNhdGluZyBpbmNsdWRlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBVc2UgYXBwZW5kIGZpbGVzICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHVzZXMgYW4gaW5jbHVkZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBPciwgaWYgeW91IGFyZSBpbnRyb2R1Y2luZyBhIG5ldyByZWNpcGUgdGhhdCByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICB0aGUgaW5jbHVkZWQgZmlsZSwgdXNlIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICBsYXllciBkaXJlY3RvcnkgdG8gcmVmZXIgdG8gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmUgcmVjaXBlcy1jb3JlLzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4vPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZmlsZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5yZXF1aXJlIDwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSdyZSBmaW5kaW5nIHlvdSBoYXZlIHRvIG92ZXJsYXkgdGhlIGluY2x1ZGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgaXQgY291bGQgaW5kaWNhdGUgYSBkZWZpY2llbmN5IGluIHRoZSBpbmNsdWRlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGxheWVyIHRvIHdoaWNoIGl0IG9yaWdpbmFsbHkgYmVsb25ncy4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IHNob3VsZCB0cnkgdG8gYWRkcmVzcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRlZmljaWVuY3kgaW5zdGVhZCBvZiBvdmVybGF5aW5nIHRoZSBpbmNsdWRlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY291bGQgYWRkcmVzcyB0aGlzIGJ5IGdldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgb2YgdGhlIGluY2x1ZGUgZmlsZSB0byBhZGQgYSB2YXJpYWJsZSBvcgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gbWFrZSBpdCBlYXN5IHRvIG92ZXJyaWRlIHRoZSBwYXJ0cyBuZWVkaW5nCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIG92ZXJyaWRkZW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLXlvdXItbGF5ZXJzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U3RydWN0dXJlIFlvdXIgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQcm9wZXIgdXNlIG9mIG92ZXJyaWRlcyB3aXRoaW4gYXBwZW5kIGZpbGVzIGFuZCBwbGFjZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgb2YgbWFjaGluZS1zcGVjaWZpYyBmaWxlcyB3aXRoaW4geW91ciBsYXllciBjYW4gZW5zdXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgYSBidWlsZCBpcyBub3QgdXNpbmcgdGhlIHdyb25nIE1ldGFkYXRhIGFuZCBuZWdhdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIGltcGFjdGluZyBhIGJ1aWxkIGZvciBhIGRpZmZlcmVudCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1vZGlmeWluZyBWYXJpYWJsZXMgdG8gU3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgRGlmZmVyZW50IE1hY2hpbmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3NlIHlvdSBoYXZlIGEgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPiB0aGF0IGFkZHMgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBidWlsZGluZyBtYWNoaW5lICJvbmUiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGRvIHNvLCB5b3UgdXNlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXMuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBkZXBlbmRlbmN5IG9uICJmb28iIGJ5IGFsdGVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFMgPSAiZm9vIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBpcyBjcmVhdGVkIGR1cmluZyBhbnkgYnVpbGQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtaWdodCBub3Qgd2FudCB0aGlzIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgYnVpbGRpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSAidHdvIiBidXQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBoYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4gbGF5ZXIgaW5jbHVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXM8L2ZpbGVuYW1lPiBmb3IgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d28iIHdpbGwgYWxzbyBoYXZlIHRoZSBkZXBlbmRlbmN5IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBtYWtlIHN1cmUgeW91ciBjaGFuZ2VzIGFwcGx5IG9ubHkgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIG1hY2hpbmUgIm9uZSIsIHVzZSBhIG1hY2hpbmUgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfb25lID0gImZvbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBmb2xsb3cgdGhlIHNhbWUgc3RyYXRlZ3kgd2hlbiB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfYXBwZW5kX29uZSA9ICIgZm9vIgorICAgICBERVBFTkRTX3ByZXBlbmRfb25lID0gImZvbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGFjdHVhbCBleGFtcGxlLCBoZXJlJ3MgYSBsaW5lIGZyb20gdGhlIHJlY2lwZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgT1Byb2ZpbGUgcHJvZmlsZXIsIHdoaWNoIGxpc3RzIGFuIGV4dHJhIGJ1aWxkLXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IHdoZW4gYnVpbGRpbmcgc3BlY2lmaWNhbGx5IGZvciA2NC1iaXQgUG93ZXJQQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfYXBwZW5kX3Bvd2VycGM2NCA9ICIgbGlicGZtNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2b2lkaW5nICIrPSIgYW5kICI9KyIgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyByZWNvbW1lbmRlZCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGxhY2UgTWFjaGluZS1TcGVjaWZpYyBGaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE1hY2hpbmUtU3BlY2lmaWMgTG9jYXRpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgaGF2ZSBhIGJhc2UgcmVjaXBlLCBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXMuYmI8L2ZpbGVuYW1lPiwgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IHRvIGEgZmlsZSwgeW91IGNhbiB1c2UgYW4gYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjYXVzZSB0aGUgYnVpbGQgdG8gdXNlIHlvdXIgb3duIHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYW4gYXBwZW5kIGZpbGUgaW4geW91ciBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzLmJiYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VsZCBleHRlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtCUE59OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGZvciBtYWNoaW5lICJvbmUiIHdpbGwgcGljayB1cCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBmaWxlIGFzIGxvbmcgYXMgeW91IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYnVpbGRpbmcgZm9yIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluY2x1ZGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tZXRhLW9uZTwvZmlsZW5hbWU+IGxheWVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB5b3VyIG1hY2hpbmUtc3BlY2lmaWMgZmlsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaXJzdCBsb2NhdGlvbiB3aGVyZSB0aGF0IGZpbGUgaXMgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcyBmb3IgYWxsIG1hY2hpbmVzIHdpbGwgYWxzbyB1c2UgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgZmlsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBtYWtlIHN1cmUgdGhhdCBhIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIHVzZWQgZm9yIGEgcGFydGljdWxhciBtYWNoaW5lIGJ5IHB1dHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeSBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCByYXRoZXIgdGhhbiBwbGFjaW5nIHRoZSBmaWxlIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBzaG93biBhYm92ZSwgcHV0IGl0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvb25lLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBvbmx5IGRvZXMgdGhpcyBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBidWlsZGluZyBmb3IgbWFjaGluZSAib25lIiwgYnV0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHByb2Nlc3MgbG9jYXRlcyB0aGUgZmlsZSBtb3JlIHF1aWNrbHkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkluIHN1bW1hcnksIHlvdSBuZWVkIHRvIHBsYWNlIGFsbCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQgZnJvbSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBtYWNoaW5lLXNwZWNpZmljIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaW4gb3JkZXIgdG8gcmVzdHJpY3QgdGhvc2UgZmlsZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGJ1aWxkcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItcmVjb21tZW5kYXRpb25zJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+T3RoZXIgUmVjb21tZW5kYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXZSBhbHNvIHJlY29tbWVuZCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0b3JlIGN1c3RvbSBsYXllcnMgaW4gYSBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+bGF5ZXJfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsb25lIHRoZSByZXBvc2l0b3J5IGFsb25nc2lkZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyB0aGVzZSByZWNvbW1lbmRhdGlvbnMga2VlcHMgeW91ciBTb3VyY2UgRGlyZWN0b3J5IGFuZAorICAgICAgICAgICAgICAgICAgICAgaXRzIGNvbmZpZ3VyYXRpb24gZW50aXJlbHkgaW5zaWRlIHRoZSBZb2N0byBQcm9qZWN0J3MgY29yZQorICAgICAgICAgICAgICAgICAgICAgYmFzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmcteW91ci1sYXllcic+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgWW91ciBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gdXNlIHlvdXIgbmV3IGxheWVyLAorICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGVuYWJsZSBpdC4KKyAgICAgICAgICAgICAgICBUbyBlbmFibGUgeW91ciBsYXllciwgc2ltcGx5IGFkZCB5b3VyIGxheWVyJ3MgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCTEFZRVJTJz5CQkxBWUVSUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGVuYWJsZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTENPTkZfVkVSU0lPTiA9ICI2IgorCisgICAgIEJCUEFUSCA9ICIke1RPUERJUn0iCisgICAgIEJCRklMRVMgPz0gIiIKKworICAgICBCQkxBWUVSUyA/PSAiIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEgXAorICAgICAgICRIT01FL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhLW15bGF5ZXIgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIGVhY2ggPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICBhcyBzcGVjaWZpZWQgaW4gdGhlIDxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgd2l0aGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgZWFjaAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCBCaXRCYWtlIGFkZHMgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlcywgY2xhc3NlcyBhbmQgY29uZmlndXJhdGlvbnMgY29udGFpbmVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGxheWVyIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIHVzZWQgdG8gYXBwZW5kIE1ldGFkYXRhIHRvIG90aGVyIHJlY2lwZXMgYXJlIGNhbGxlZAorICAgICAgICAgICAgICAgIEJpdEJha2UgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgIEJpdEJha2UgYXBwZW5kIGZpbGVzIHVzZSB0aGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0eXBlIHN1ZmZpeCwgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlcyB0byB3aGljaCBNZXRhZGF0YQorICAgICAgICAgICAgICAgIGlzIGJlaW5nIGFwcGVuZGVkIHVzZSB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgdHlwZQorICAgICAgICAgICAgICAgIHN1ZmZpeC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBhbGxvd3MgeW91ciBsYXllciB0byBtYWtlCisgICAgICAgICAgICAgICAgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIGNvbnRlbnQgb2YgYW5vdGhlciBsYXllcidzIHJlY2lwZQorICAgICAgICAgICAgICAgIHdpdGhvdXQgaGF2aW5nIHRvIGNvcHkgdGhlIG90aGVyIHJlY2lwZSBpbnRvIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgWW91ciA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSByZXNpZGVzIGluIHlvdXIgbGF5ZXIsCisgICAgICAgICAgICAgICAgd2hpbGUgdGhlIG1haW4gPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlIHRvCisgICAgICAgICAgICAgICAgd2hpY2ggeW91IGFyZSBhcHBlbmRpbmcgTWV0YWRhdGEgcmVzaWRlcyBpbiBhIGRpZmZlcmVudCBsYXllci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIG11c3QgaGF2ZSB0aGUgc2FtZSByb290IG5hbWVzIGFzIHRoZWlyIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICByZWNpcGVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c29tZWFwcF8mRElTVFJPOy5iYmFwcGVuZDwvZmlsZW5hbWU+IG11c3QgYXBwbHkgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c29tZWFwcF8mRElTVFJPOy5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhlIG9yaWdpbmFsIHJlY2lwZSBhbmQgYXBwZW5kIGZpbGUgbmFtZXMgYXJlIHZlcnNpb24KKyAgICAgICAgICAgICAgICBudW1iZXItc3BlY2lmaWMuCisgICAgICAgICAgICAgICAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGlzIHJlbmFtZWQgdG8gdXBkYXRlIHRvIGEgbmV3ZXIKKyAgICAgICAgICAgICAgICB2ZXJzaW9uLCB0aGUgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBtdXN0CisgICAgICAgICAgICAgICAgYmUgcmVuYW1lZCAoYW5kIHBvc3NpYmx5IHVwZGF0ZWQpIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBCaXRCYWtlIGRpc3BsYXlzIGFuIGVycm9yIG9uIHN0YXJ0aW5nCisgICAgICAgICAgICAgICAgaWYgaXQgZGV0ZWN0cyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgZG9lcworICAgICAgICAgICAgICAgIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyByZWNpcGUgd2l0aCBhIG1hdGNoaW5nIG5hbWUuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFknPjxmaWxlbmFtZT5CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBoYW5kbGUgdGhpcyBlcnJvci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVpbmcgYWJsZSB0byBhcHBlbmQgaW5mb3JtYXRpb24gdG8gYW4gZXhpc3RpbmcgcmVjaXBlIG5vdCBvbmx5CisgICAgICAgICAgICAgICAgYXZvaWRzIGR1cGxpY2F0aW9uLCBidXQgYWxzbyBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgcmVjaXBlCisgICAgICAgICAgICAgICAgY2hhbmdlcyBpbiBhIGRpZmZlcmVudCBsYXllciB0byB5b3VyIGxheWVyLgorICAgICAgICAgICAgICAgIElmIHlvdSB3ZXJlIGNvcHlpbmcgcmVjaXBlcywgeW91IHdvdWxkIGhhdmUgdG8gbWFudWFsbHkgbWVyZ2UKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGFzIHRoZXkgb2NjdXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBtYWluIGZvcm1mYWN0b3IgcmVjaXBlIGFuZCBhCisgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBmb3JtZmFjdG9yIGFwcGVuZCBmaWxlIGJvdGggZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBtYWluIGZvcm1mYWN0b3IgcmVjaXBlLCB3aGljaCBpcyBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYjwvZmlsZW5hbWU+IGFuZCBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICJtZXRhIiBsYXllciBhdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3I8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNVTU1BUlkgPSAiRGV2aWNlIGZvcm1mYWN0b3IgaW5mb3JtYXRpb24iCisgICAgIFNFQ1RJT04gPSAiYmFzZSIKKyAgICAgTElDRU5TRSA9ICJNSVQiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorICAgICBQUiA9ICJyNDUiCisKKyAgICAgU1JDX1VSSSA9ICJmaWxlOi8vY29uZmlnIGZpbGU6Ly9tYWNoY29uZmlnIgorICAgICBTID0gIiR7V09SS0RJUn0iCisKKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworICAgICBkb19pbnN0YWxsKCkgeworCSAgICAgIyBJbnN0YWxsIGZpbGUgb25seSBpZiBpdCBoYXMgY29udGVudHMKKyAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJICAgICBpZiBbIC1zICIke1N9L21hY2hjb25maWciIF07IHRoZW4KKwkgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vbWFjaGNvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworCSAgICAgZmkKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGUgbWFpbiByZWNpcGUsIG5vdGUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVyZSB0bworICAgICAgICAgICAgICAgIGZpbmQgZmlsZXMgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBhcHBlbmQgZmlsZSwgd2hpY2ggaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBhbmQgaXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBFbWVubG93IEJTUCBMYXllciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsL21ldGEtZW1lbmxvdzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGlzIGluIDxmaWxlbmFtZT5yZWNpcGVzLWJzcC9mb3JtZmFjdG9yPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhpcyBhcHBlbmQgZmlsZSBleHRlbmRzIHRoZSBsb2NhdGlvbnMgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBpcyB0aGUgbW9zdCByZWxpYWJsZSBhbmQgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBhZGRpbmcKKyAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byB0aGUgc2VhcmNoIHBhdGggdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgdG8gZmluZCBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBpbiB0aGlzIGV4YW1wbGUgZXh0ZW5kcyB0aGUgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHdoaWNoIHJlc29sdmVzIHRvIGEgZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3I8L2ZpbGVuYW1lPiBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBpbiB3aGljaCB0aGUgYXBwZW5kIGZpbGUgcmVzaWRlcyAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsL21ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3I8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGltcGxpZXMgdGhhdCB5b3UgbXVzdCBoYXZlIHRoZSBzdXBwb3J0aW5nIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBzZXQgdXAgdGhhdCB3aWxsIGNvbnRhaW4gYW55IGZpbGVzIG9yIHBhdGNoZXMgeW91CisgICAgICAgICAgICAgICAgd2lsbCBiZSBpbmNsdWRpbmcgZnJvbSB0aGUgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBpbW1lZGlhdGUgZXhwYW5zaW9uIGFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Oj08L2ZpbGVuYW1lPiBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvZiB0aGUgcmVmZXJlbmNlIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRISVNESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdHJhaWxpbmcgY29sb24gY2hhcmFjdGVyIGlzIGltcG9ydGFudCBhcyBpdCBlbnN1cmVzIHRoYXQKKyAgICAgICAgICAgICAgICBpdGVtcyBpbiB0aGUgbGlzdCByZW1haW4gY29sb24tc2VwYXJhdGVkLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYXV0b21hdGljYWxseSBkZWZpbmVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRISVNESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbmV2ZXIgc2V0IHRoaXMgdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyAiX3ByZXBlbmQiIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4gZW5zdXJlcyB5b3VyIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgc2VhcmNoZWQgcHJpb3IgdG8gb3RoZXIgcGF0aHMgaW4gdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBub3QgYWxsIGFwcGVuZCBmaWxlcyBhZGQgZXh0cmEgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBNYW55IGFwcGVuZCBmaWxlcyBzaW1wbHkgZXhpc3QgdG8gYWRkIGJ1aWxkIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3VyIGFwcGVuZCBmaWxlIHdvdWxkIG5vdCBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJpb3JpdGl6aW5nLXlvdXItbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPlByaW9yaXRpemluZyBZb3VyIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRWFjaCBsYXllciBpcyBhc3NpZ25lZCBhIHByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICAgICAgIFByaW9yaXR5IHZhbHVlcyBjb250cm9sIHdoaWNoIGxheWVyIHRha2VzIHByZWNlZGVuY2UgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICBhcmUgcmVjaXBlIGZpbGVzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB0aGUgcmVjaXBlIGZpbGUgZnJvbSB0aGUgbGF5ZXIgd2l0aCBhIGhpZ2hlcgorICAgICAgICAgICAgICAgIHByaW9yaXR5IG51bWJlciB0YWtlcyBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgIFByaW9yaXR5IHZhbHVlcyBhbHNvIGFmZmVjdCB0aGUgb3JkZXIgaW4gd2hpY2ggbXVsdGlwbGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMgZm9yIHRoZSBzYW1lIHJlY2lwZSBhcmUKKyAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWl0aGVyIHNwZWNpZnkgdGhlIHByaW9yaXR5IG1hbnVhbGx5LCBvciBhbGxvdyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gY2FsY3VsYXRlIGl0IGJhc2VkIG9uIHRoZSBsYXllcidzIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSB0aGUgbGF5ZXIncyBwcmlvcml0eSBtYW51YWxseSwgdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVfUFJJT1JJVFknPjxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkZJTEVfUFJJT1JJVFlfbXlsYXllciA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgcG9zc2libGUgZm9yIGEgcmVjaXBlIHdpdGggYSBsb3dlciB2ZXJzaW9uIG51bWJlcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIGEgbGF5ZXIgdGhhdCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdG8gdGFrZSBwcmVjZWRlbmNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5BbHNvLCB0aGUgbGF5ZXIgcHJpb3JpdHkgZG9lcyBub3QgY3VycmVudGx5IGFmZmVjdCB0aGUKKyAgICAgICAgICAgICAgICBwcmVjZWRlbmNlIG9yZGVyIG9mIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgRnV0dXJlIHZlcnNpb25zIG9mIEJpdEJha2UgbWlnaHQgYWRkcmVzcyB0aGlzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtYW5hZ2luZy1sYXllcnMnPgorICAgICAgICAgICAgPHRpdGxlPk1hbmFnaW5nIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBCaXRCYWtlIGxheWVyIG1hbmFnZW1lbnQgdG9vbCB0byBwcm92aWRlIGEgdmlldworICAgICAgICAgICAgICAgIGludG8gdGhlIHN0cnVjdHVyZSBvZiByZWNpcGVzIGFjcm9zcyBhIG11bHRpLWxheWVyIHByb2plY3QuCisgICAgICAgICAgICAgICAgQmVpbmcgYWJsZSB0byBnZW5lcmF0ZSBvdXRwdXQgdGhhdCByZXBvcnRzIG9uIGNvbmZpZ3VyZWQgbGF5ZXJzCisgICAgICAgICAgICAgICAgd2l0aCB0aGVpciBwYXRocyBhbmQgcHJpb3JpdGllcyBhbmQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMgYW5kIHRoZWlyIGFwcGxpY2FibGUKKyAgICAgICAgICAgICAgICByZWNpcGVzIGNhbiBoZWxwIHRvIHJldmVhbCBwb3RlbnRpYWwgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGZvcm0gd2hlbiBydW5uaW5nIHRoZSBsYXllciBtYW5hZ2VtZW50IHRvb2wuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UtbGF5ZXJzIDxyZXBsYWNlYWJsZT5jb21tYW5kPC9yZXBsYWNlYWJsZT4gWzxyZXBsYWNlYWJsZT5hcmd1bWVudHM8L3JlcGxhY2VhYmxlPl0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGUgYXZhaWxhYmxlIGNvbW1hbmRzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPmhlbHA6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheXMgZ2VuZXJhbCBoZWxwIG9yIGhlbHAgb24gYSBzcGVjaWZpZWQgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LWxheWVyczo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyB0aGUgY3VycmVudCBjb25maWd1cmVkIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LXJlY2lwZXM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgYXZhaWxhYmxlIHJlY2lwZXMgYW5kIHRoZSBsYXllcnMgdGhhdCBwcm92aWRlIHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1vdmVybGF5ZWQ6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgb3ZlcmxheWVkIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBBIHJlY2lwZSBpcyBvdmVybGF5ZWQgd2hlbiBhIHJlY2lwZSB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cyBpbiBhbm90aGVyIGxheWVyIHRoYXQgaGFzIGEgaGlnaGVyIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LWFwcGVuZHM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlcyB0byB3aGljaCB0aGV5IGFwcGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPnNob3ctY3Jvc3MtZGVwZW5kczo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBMaXN0cyBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiByZWNpcGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzIGxheWVyIGJvdW5kYXJpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+YWRkLWxheWVyOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZHMgYSBsYXllciB0byA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPnJlbW92ZS1sYXllcjo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIGEgbGF5ZXIgZnJvbSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+ZmxhdHRlbjo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBGbGF0dGVucyB0aGUgbGF5ZXIgY29uZmlndXJhdGlvbiBpbnRvIGEgc2VwYXJhdGUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBGbGF0dGVuaW5nIHlvdXIgbGF5ZXIgY29uZmlndXJhdGlvbiBidWlsZHMgYSAiZmxhdHRlbmVkIgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGFsbCBsYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFueSBvdmVybGF5ZWQgcmVjaXBlcyByZW1vdmVkIGFuZCBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcyBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCBoYXZlIHRvIHBlcmZvcm0gc29tZSBtYW51YWwgY2xlYW51cCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZCBsYXllciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Tm9uLXJlY2lwZSBmaWxlcyAoc3VjaCBhcyBwYXRjaGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgb3ZlcndyaXR0ZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmbGF0dGVuIGNvbW1hbmQgc2hvd3MgYSB3YXJuaW5nIGZvciB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFueXRoaW5nIGJleW9uZCB0aGUgbm9ybWFsIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwIGhhcyBiZWVuIGFkZGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIGxvd2VzdCBwcmlvcml0eSBsYXllcidzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gaXMgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk92ZXJyaWRkZW4gYW5kIGFwcGVuZGVkIGl0ZW1zIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5lZCB1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGVuZCB1cCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlcmUgYXJlIGFwcGVuZGVkIG9yIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzLCB5b3UgbmVlZCB0byB0aWR5IHRoZXNlIHVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUsIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGFkZHMgdGhlIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiMjIyMgYmJhcHBlbmRlZCAuLi48L2ZpbGVuYW1lPiBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBrbm93IHdoZXJlIHRoZSBmb2xsb3dpbmcgbGluZXMgb3JpZ2luYXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC4uLgorICAgICBERVNDUklQVElPTiA9ICJBIHVzZWZ1bCB1dGlsaXR5IgorICAgICAuLi4KKyAgICAgRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNvbWV0aGluZyIKKyAgICAgLi4uCisKKyAgICAgIyMjIyBiYmFwcGVuZGVkIGZyb20gbWV0YS1hbm90aGVybGF5ZXIgIyMjIworCisgICAgIERFU0NSSVBUSU9OID0gIkN1c3RvbWl6ZWQgdXRpbGl0eSIKKyAgICAgRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1zb21ldGhpbmdlbHNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkZWFsbHksIHlvdSB3b3VsZCB0aWR5IHVwIHRoZXNlIHV0aWxpdGllcyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC4uLgorICAgICBERVNDUklQVElPTiA9ICJDdXN0b21pemVkIHV0aWxpdHkiCisgICAgIC4uLgorICAgICBFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc29tZXRoaW5nIC0tZW5hYmxlLXNvbWV0aGluZ2Vsc2UiCisgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWxheWVyPC9maWxlbmFtZT4gc2NyaXB0IHNpbXBsaWZpZXMKKyAgICAgICAgICAgICAgICBjcmVhdGluZyBhIG5ldyBnZW5lcmFsIGxheWVyLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gQlNQIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFNwZWNpZmljIChCU1ApCisgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBtb2RlIG9mIHRoZSBzY3JpcHQncyBvcGVyYXRpb24gaXMgdG8gcHJvbXB0IHlvdSBmb3IKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZ2VuZXJhdGUgdGhlIGxheWVyOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgbGF5ZXIgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBhIHNhbXBsZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgb3Igbm90IHRvIGNyZWF0ZSBhIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXIgY3JlYXRlPC9maWxlbmFtZT4gc3ViLWNvbW1hbmQKKyAgICAgICAgICAgICAgICB0byBjcmVhdGUgYSBuZXcgZ2VuZXJhbCBsYXllci4KKyAgICAgICAgICAgICAgICBJbiBpdHMgc2ltcGxlc3QgZm9ybSwgeW91IGNhbiBjcmVhdGUgYSBsYXllciBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1sYXllciBjcmVhdGUgbXlsYXllcgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBjcmVhdGVzIGEgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB0aGUgPGZpbGVuYW1lPnlvY3RvLWxheWVyIGNyZWF0ZTwvZmlsZW5hbWU+IGNvbW1hbmQgcnVucywKKyAgICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHByb21wdHMgYXBwZWFyIGluIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgIFByZXNzaW5nIGVudGVyIHdpdGhvdXQgc3VwcGx5aW5nIGFueXRoaW5nIGZvciB0aGUgcHJvbXB0cworICAgICAgICAgICAgICAgIG9yIHByZXNzaW5nIGVudGVyIGFuZCBwcm92aWRpbmcgYW4gaW52YWxpZCByZXNwb25zZSBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAgc2NyaXB0IHRvIGFjY2VwdCB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBzY3JpcHQgY29tcGxldGVzLCB0aGUgbmV3IGxheWVyCisgICAgICAgICAgICAgICAgaXMgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IG5hbWVzIHRoZSBsYXllciBieSBwcmVwZW5kaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4gdG8gdGhlIG5hbWUgeW91IHByb3ZpZGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1pbmltYWxseSwgdGhlIHNjcmlwdCBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgd2l0aGluIHRoZSBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBsYXllcidzIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByb290IG5hbWUgZm9yIHRoZSBmaWxlIGlzIHRoZSBzYW1lIGFzIHRoZSByb290IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcHJvdmlkZWQgZm9yIHRoZSBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT1BZSU5HLk1JVDwvZmlsZW5hbWU+IGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb3B5cmlnaHQgYW5kIHVzZSBub3RpY2UgZm9yIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgZmlsZSBkZXNjcmliaW5nIHRoZSBjb250ZW50cyBvZiB5b3VyIG5ldyBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIGdlbmVyYXRlIGEgc2FtcGxlIHJlY2lwZSBmaWxlLCB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgcHJvbXB0cyB5b3UgZm9yIHRoZSBuYW1lIGZvciB0aGUgcmVjaXBlIGFuZCB0aGVuIGNyZWF0ZXMgaXQKKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBjcmVhdGVzIGEgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgYW5kIGEKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGNvbnRhaW5zIGEgc2FtcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvd29ybGQuYzwvZmlsZW5hbWU+IHNvdXJjZSBmaWxlLCBhbG9uZyB3aXRoCisgICAgICAgICAgICAgICAgYSBzYW1wbGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSByZWNpcGUgbmFtZSwgdGhlIHNjcmlwdCB1c2VzCisgICAgICAgICAgICAgICAgImV4YW1wbGUiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIGdlbmVyYXRlIGEgc2FtcGxlIGFwcGVuZCBmaWxlLCB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgcHJvbXB0cyB5b3UgZm9yIHRoZSBuYW1lIGZvciB0aGUgZmlsZSBhbmQgdGhlbiBjcmVhdGVzIGl0CisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFuZCBhCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyBhIHNhbXBsZSBwYXRjaCBmaWxlLgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIHJlY2lwZSBuYW1lLCB0aGUgc2NyaXB0IHVzZXMKKyAgICAgICAgICAgICAgICAiZXhhbXBsZSIuCisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBhbHNvIHByb21wdHMgeW91IGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gc2hvdWxkIG1hdGNoIHRoZSByZWNpcGUgdG8gd2hpY2ggdGhlIGFwcGVuZCBmaWxlCisgICAgICAgICAgICAgICAgaXMgYXNzb2NpYXRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIHNlZSBob3cgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0IHdvcmtzIGlzIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGUgc2NyaXB0LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWFkIHRoZSB1c2FnZSBpbmZvcm1hdGlvbiBieSBlbnRlcmluZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWxheWVyIGhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGNyZWF0ZSB5b3VyIGdlbmVyYWwgbGF5ZXIsIHlvdSBtdXN0IGFkZCBpdCB0byB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+IGlzIGFkZGVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSA/IiBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0by1ic3AgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLW15bGF5ZXIgXAorICAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgbGF5ZXIgdG8gdGhpcyBmaWxlIGVuYWJsZXMgdGhlIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgIGxvY2F0ZSB0aGUgbGF5ZXIgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZSc+CisgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBJbWFnZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBjdXN0b21pemUgaW1hZ2VzIHRvIHNhdGlzZnkgcGFydGljdWxhciByZXF1aXJlbWVudHMuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNldmVyYWwgbWV0aG9kcyBhbmQgcHJvdmlkZXMgZ3VpZGVsaW5lcyBmb3IgZWFjaC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWxvY2FsY29uZic+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQcm9iYWJseSB0aGUgZWFzaWVzdCB3YXkgdG8gY3VzdG9taXplIGFuIGltYWdlIGlzIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgcGFja2FnZSBieSB3YXkgb2YgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBpdCBpcyBsaW1pdGVkIHRvIGxvY2FsIHVzZSwgdGhpcyBtZXRob2QgZ2VuZXJhbGx5IG9ubHkKKyAgICAgICAgICAgICAgICBhbGxvd3MgeW91IHRvIGFkZCBwYWNrYWdlcyBhbmQgaXMgbm90IGFzIGZsZXhpYmxlIGFzIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgeW91ciBvd24gY3VzdG9taXplZCBpbWFnZS4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhZGQgcGFja2FnZXMgdXNpbmcgbG9jYWwgdmFyaWFibGVzIHRoaXMgd2F5LCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIHJlYWxpemUgdGhhdCB0aGVzZSB2YXJpYWJsZSBjaGFuZ2VzIGFyZSBpbiBlZmZlY3QgZm9yIGV2ZXJ5CisgICAgICAgICAgICAgICAgYnVpbGQgYW5kIGNvbnNlcXVlbnRseSBhZmZlY3QgYWxsIGltYWdlcywgd2hpY2ggbWlnaHQgbm90CisgICAgICAgICAgICAgICAgYmUgd2hhdCB5b3UgcmVxdWlyZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gYWRkIGEgcGFja2FnZSB0byB5b3VyIGltYWdlIHVzaW5nIHRoZSBsb2NhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSwgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+SU1BR0VfSU5TVEFMTDwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9wZXJhdG9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIHN0cmFjZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNlIG9mIHRoZSBzeW50YXggaXMgaW1wb3J0YW50IC0gc3BlY2lmaWNhbGx5LCB0aGUgc3BhY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgIHRoZSBxdW90ZSBhbmQgdGhlIHBhY2thZ2UgbmFtZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gaW4gdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgIFRoaXMgc3BhY2UgaXMgcmVxdWlyZWQgc2luY2UgdGhlIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvcGVyYXRvciBkb2VzIG5vdCBhZGQgdGhlIHNwYWNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgeW91IG11c3QgdXNlIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gaW5zdGVhZAorICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRvciBpZiB5b3Ugd2FudCB0byBhdm9pZAorICAgICAgICAgICAgICAgIG9yZGVyaW5nIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIGJlY2F1c2UgZG9pbmcgc28gdW5jb25kaXRpb25hbGx5IGFwcGVuZHMKKyAgICAgICAgICAgICAgICB0byB0aGUgdmFyaWFibGUgYW5kIGF2b2lkcyBvcmRlcmluZyBwcm9ibGVtcyBkdWUgdG8gdGhlCisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmVpbmcgc2V0IGluIGltYWdlIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZXMgd2l0aCBvcGVyYXRvcnMgbGlrZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4/PTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4gZW5zdXJlcyB0aGUgb3BlcmF0aW9uIHRha2VzCisgICAgICAgICAgICAgICAgYWZmZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBzaG93biBpbiBpdHMgc2ltcGxlc3QgdXNlLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMX2FwcGVuZDwvZmlsZW5hbWU+IGFmZmVjdHMgYWxsIGltYWdlcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBleHRlbmQgdGhlIHN5bnRheCBzbyB0aGF0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gYSBzcGVjaWZpYyBpbWFnZSBvbmx5LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICIgc3RyYWNlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYWRkcyA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlIG9ubHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWRkIHBhY2thZ2VzIHVzaW5nIGEgc2ltaWxhciBhcHByb2FjaCB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMJz5DT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEw8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIHZhcmlhYmxlLCBvbmx5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtKjwvZmlsZW5hbWU+IGltYWdlcyBhcmUgYWZmZWN0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZWZlYXR1cmVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBtZXRob2QgZm9yIGN1c3RvbWl6aW5nIHlvdXIgaW1hZ2UgaXMgdG8gZW5hYmxlIG9yCisgICAgICAgICAgICAgICAgZGlzYWJsZSBoaWdoLWxldmVsIGltYWdlIGZlYXR1cmVzIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZCA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIGZ1bmN0aW9ucyBmb3IgYm90aCB2YXJpYWJsZXMgYXJlIG5lYXJseSBlcXVpdmFsZW50LAorICAgICAgICAgICAgICAgIGJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdXNpbmcgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBhIHJlY2lwZSBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBmcm9tIHdpdGhpbgorICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIHdvcmssIHRoZSBiZXN0IHJlZmVyZW5jZSBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBjbGFzcyBsaXN0cyBvdXQgdGhlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9mIHdoaWNoIG1vc3QgbWFwIHRvIHBhY2thZ2UgZ3JvdXBzIHdoaWxlIHNvbWUsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVidWctdHdlYWtzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlYWQtb25seS1yb290ZnM8L2ZpbGVuYW1lPiwgcmVzb2x2ZSBhcyBnZW5lcmFsCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gc3VtbWFyeSwgdGhlIGZpbGUgbG9va3MgYXQgdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFuZCB0aGVuIG1hcHMKKyAgICAgICAgICAgICAgICBvciBjb25maWd1cmVzIHRoZSBmZWF0dXJlIGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgIEJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGFkZHMgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2VzIG9yIGNvbmZpZ3VyYXRpb25zIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBFZmZlY3RpdmVseSwgeW91IGFyZSBlbmFibGluZyBleHRyYSBmZWF0dXJlcyBieSBleHRlbmRpbmcgdGhlCisgICAgICAgICAgICAgICAgY2xhc3Mgb3IgY3JlYXRpbmcgYSBjdXN0b20gY2xhc3MgZm9yIHVzZSB3aXRoIHNwZWNpYWxpemVkIGltYWdlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4geW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgVXNpbmcgYSBzZXBhcmF0ZSBhcmVhIGZyb20gd2hpY2ggdG8gZW5hYmxlIGZlYXR1cmVzIHdpdGgKKyAgICAgICAgICAgICAgICB0aGlzIHZhcmlhYmxlIGhlbHBzIHlvdSBhdm9pZCBvdmVyd3JpdGluZyB0aGUgZmVhdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIHRoYXQgYXJlIGVuYWJsZWQgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpcyBhZGRlZAorICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHdpdGhpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGlsbHVzdHJhdGUgaG93IHlvdSBjYW4gdXNlIHRoZXNlIHZhcmlhYmxlcyB0byBtb2RpZnkgeW91cgorICAgICAgICAgICAgICAgIGltYWdlLCBjb25zaWRlciBhbiBleGFtcGxlIHRoYXQgc2VsZWN0cyB0aGUgU1NIIHNlcnZlci4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzaGlwcyB3aXRoIHR3byBTU0ggc2VydmVycyB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgIHdpdGggeW91ciBpbWFnZXM6IERyb3BiZWFyIGFuZCBPcGVuU1NILgorICAgICAgICAgICAgICAgIERyb3BiZWFyIGlzIGEgbWluaW1hbCBTU0ggc2VydmVyIGFwcHJvcHJpYXRlIGZvcgorICAgICAgICAgICAgICAgIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cywgd2hpbGUgT3BlblNTSCBpcyBhCisgICAgICAgICAgICAgICAgd2VsbC1rbm93biBzdGFuZGFyZCBTU0ggc2VydmVyIGltcGxlbWVudGF0aW9uLgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2UKKyAgICAgICAgICAgICAgICBpcyBjb25maWd1cmVkIHRvIHVzZSBEcm9wYmVhci4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gaW1hZ2VzIGJvdGgKKyAgICAgICAgICAgICAgICBpbmNsdWRlIE9wZW5TU0guCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGNvbnRhaW4gYW4gU1NIIHNlcnZlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBjdXN0b21pemUgeW91ciBpbWFnZSBhbmQgY2hhbmdlIHRoZXNlIGRlZmF1bHRzLgorICAgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaW4geW91ciByZWNpcGUgb3IgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgc28gdGhhdCBpdCBjb25maWd1cmVzIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIHlvdSBhcmUgd29ya2luZyB3aXRoIHRvIGluY2x1ZGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoLXNlcnZlci1kcm9wYmVhcjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaC1zZXJ2ZXItb3BlbnNzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgYSBjb21wbGV0ZQorICAgICAgICAgICAgICAgIGxpc3Qgb2YgaW1hZ2UgZmVhdHVyZXMgdGhhdCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1jdXN0b21iYic+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSAuYmIgRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gY3VzdG9taXplIGFuIGltYWdlIGJ5IGNyZWF0aW5nIGEgY3VzdG9tIHJlY2lwZQorICAgICAgICAgICAgICAgIHRoYXQgZGVmaW5lcyBhZGRpdGlvbmFsIHNvZnR3YXJlIGFzIHBhcnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgZm9ybSBmb3IgdGhlIHR3byBsaW5lcyB5b3UgbmVlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgcGFja2FnZTEgcGFja2FnZTIiCisKKyAgICAgaW5oZXJpdCBjb3JlLWltYWdlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZWZpbmluZyB0aGUgc29mdHdhcmUgdXNpbmcgYSBjdXN0b20gcmVjaXBlIGdpdmVzIHlvdSB0b3RhbAorICAgICAgICAgICAgICAgIGNvbnRyb2wgb3ZlciB0aGUgY29udGVudHMgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIGNvcnJlY3QgbmFtZXMgb2YgcGFja2FnZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz5JTUFHRV9JTlNUQUxMPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IHVzZSB0aGUgT3BlbkVtYmVkZGVkIG5vdGF0aW9uIGFuZCBub3QgdGhlIERlYmlhbiBub3RhdGlvbiBmb3IgdGhlIG5hbWVzCisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmdsaWJjLWRldjwvZmlsZW5hbWU+IGluc3RlYWQgb2YgPGZpbGVuYW1lPmxpYmM2LWRldjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIG90aGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBjdXN0b20gaW1hZ2UgaXMgdG8gYmFzZSBpdCBvbiBhbiBleGlzdGluZyBpbWFnZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGltYWdlIGJhc2VkIG9uIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGJ1dCBhZGQgdGhlIGFkZGl0aW9uYWwgcGFja2FnZSA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gdG8gdGhlIGltYWdlLAorICAgICAgICAgICAgICAgIGNvcHkgdGhlIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiPC9maWxlbmFtZT4gdG8gYQorICAgICAgICAgICAgICAgIG5ldyA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGVuZCBvZiB0aGUgY29weToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTEwgKz0gInN0cmFjZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1jdXN0b210YXNrcyc+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSBQYWNrYWdlIEdyb3VwczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBjb21wbGV4IGN1c3RvbSBpbWFnZXMsIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBjdXN0b21pemluZworICAgICAgICAgICAgICAgIGFuIGltYWdlIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBwYWNrYWdlIGdyb3VwIHJlY2lwZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGUgaW1hZ2Ugb3IgaW1hZ2VzLgorICAgICAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIG9mIGEgcGFja2FnZSBncm91cCByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZXhhbWluZSB0aGF0IHJlY2lwZSwgeW91IHNlZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGxpc3RzIHRoZSBwYWNrYWdlIGdyb3VwIHBhY2thZ2VzIHRvIHByb2R1Y2UuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0IHBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IHN0YXRlbWVudAorICAgICAgICAgICAgICAgIHNldHMgYXBwcm9wcmlhdGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGF1dG9tYXRpY2FsbHkgYWRkcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4sIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcHRlc3Q8L2ZpbGVuYW1lPiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGZvciBlYWNoCisgICAgICAgICAgICAgICAgcGFja2FnZSBzcGVjaWZpZWQgaW4gdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluaGVyaXQgcGFja2FnZXM8L2ZpbGVuYW1lPiBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBuZWFyIHRoZSB0b3Agb2YgdGhlIHJlY2lwZSwgY2VydGFpbmx5IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGVhY2ggcGFja2FnZSB5b3Ugc3BlY2lmeSBpbiA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPlJERVBFTkRTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUlJFQ09NTUVORFMnPlJSRUNPTU1FTkRTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGVudHJpZXMgdG8gcHJvdmlkZSBhIGxpc3Qgb2YgcGFja2FnZXMgdGhlIHBhcmVudCB0YXNrIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBzaG91bGQgY29udGFpbi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSBleGFtcGxlcyBvZiB0aGVzZSBmdXJ0aGVyIGRvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1iYXNlLmJiPC9maWxlbmFtZT4gcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGEgc2hvcnQsIGZhYnJpY2F0ZWQgZXhhbXBsZSBzaG93aW5nIHRoZSBzYW1lIGJhc2ljCisgICAgICAgICAgICAgICAgcGllY2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVTQ1JJUFRJT04gPSAiTXkgQ3VzdG9tIFBhY2thZ2UgR3JvdXBzIgorCisgICAgIGluaGVyaXQgcGFja2FnZWdyb3VwCisKKyAgICAgUEFDS0FHRVMgPSAiXAorICAgICAgICAgcGFja2FnZWdyb3VwLWN1c3RvbS1hcHBzIFwKKyAgICAgICAgIHBhY2thZ2Vncm91cC1jdXN0b20tdG9vbHMgXAorICAgICAgICAgIgorCisgICAgIFJERVBFTkRTX3BhY2thZ2Vncm91cC1jdXN0b20tYXBwcyA9ICJcCisgICAgICAgICBkcm9wYmVhciBcCisgICAgICAgICBwb3J0bWFwIFwKKyAgICAgICAgIHBzcGxhc2giCisKKyAgICAgUkRFUEVORFNfcGFja2FnZWdyb3VwLWN1c3RvbS10b29scyA9ICJcCisgICAgICAgICBvcHJvZmlsZSBcCisgICAgICAgICBvcHJvZmlsZXVpLXNlcnZlciBcCisgICAgICAgICBsdHRuZy10b29scyIKKworICAgICBSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzID0gIlwKKyAgICAgICAgIGtlcm5lbC1tb2R1bGUtb3Byb2ZpbGUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdHdvIHBhY2thZ2UgZ3JvdXAgcGFja2FnZXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyCisgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgcGFja2FnZSBkZXBlbmRlbmNpZXMgbGlzdGVkOiA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWN1c3RvbS1hcHBzPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVG8gYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlc2UgcGFja2FnZSBncm91cCBwYWNrYWdlcywgeW91IG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jdXN0b20tYXBwczwvZmlsZW5hbWU+IGFuZC9vcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPklNQUdFX0lOU1RBTEw8L3VsaW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBvdGhlciBmb3JtcyBvZiBpbWFnZSBkZXBlbmRlbmNpZXMgc2VlIHRoZSBvdGhlciBhcmVhcyBvZiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZS1uYW1lJz4KKyAgICAgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBhbiBJbWFnZSBIb3N0bmFtZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjb25maWd1cmVkIGhvc3RuYW1lIChpLmUuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaG9zdG5hbWU8L2ZpbGVuYW1lPikgaW4gYW4gaW1hZ2UgaXMgdGhlCisgICAgICAgICAgICAgICAgc2FtZSBhcyB0aGUgbWFjaGluZSBuYW1lLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBlcXVhbHMgInFlbXV4ODYiLCB0aGUgY29uZmlndXJlZCBob3N0bmFtZSB3cml0dGVuIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaG9zdG5hbWU8L2ZpbGVuYW1lPiBpcyAicWVtdXg4NiIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgbmFtZSBieSBhbHRlcmluZyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgImhvc3RuYW1lIiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzZS1maWxlczwvZmlsZW5hbWU+IHJlY2lwZSB1c2luZyBlaXRoZXIKKyAgICAgICAgICAgICAgICBhbiBhcHBlbmQgZmlsZSBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBpbiBhbiBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGhvc3RuYW1lPSJteWhvc3RuYW1lIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGhvc3RuYW1lX3BuLWJhc2UtZmlsZXMgPSAibXlob3N0bmFtZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENoYW5naW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSAiaG9zdG5hbWUiIGNhbiBiZQorICAgICAgICAgICAgICAgIHVzZWZ1bCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IG5lZWQgdG8gZG8gZXh0ZW5zaXZlIHRlc3Rpbmcgb24gYW4KKyAgICAgICAgICAgICAgICBpbWFnZSBhbmQgeW91IHdvdWxkIGxpa2UgdG8gZWFzaWx5IGlkZW50aWZ5IHRoZSBpbWFnZQorICAgICAgICAgICAgICAgIHVuZGVyIHRlc3QgZnJvbSBleGlzdGluZyBpbWFnZXMgd2l0aCB0eXBpY2FsIGRlZmF1bHQKKyAgICAgICAgICAgICAgICBob3N0bmFtZXMuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHlvdSBjb3VsZCBjaGFuZ2UgdGhlIGRlZmF1bHQgaG9zdG5hbWUgdG8KKyAgICAgICAgICAgICAgICAidGVzdG1lIiwgd2hpY2ggcmVzdWx0cyBpbiBhbGwgdGhlIGltYWdlcyB1c2luZyB0aGUgbmFtZQorICAgICAgICAgICAgICAgICJ0ZXN0bWUiLgorICAgICAgICAgICAgICAgIE9uY2UgdGVzdGluZyBpcyBjb21wbGV0ZSBhbmQgeW91IGRvIG5vdCBuZWVkIHRvIHJlYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UgZm9yIHRlc3QgYW55IGxvbmdlciwgeW91IGNhbiBlYXNpbHkgcmVzZXQgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICBob3N0bmFtZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGF0IGlmIHlvdSB1bnNldCB0aGUgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgdGhlIGltYWdlIHdpbGwgaGF2ZSBubyBkZWZhdWx0IGhvc3RuYW1lIGluIHRoZSBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHVuc2V0cyB0aGUgdmFyaWFibGUgaW4gYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGhvc3RuYW1lX3BuLWJhc2UtZmlsZXMgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIYXZpbmcgbm8gZGVmYXVsdCBob3N0bmFtZSBpbiB0aGUgZmlsZXN5c3RlbSBpcyBzdWl0YWJsZSBmb3IKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMgdGhhdCB1c2UgZHluYW1pYyBob3N0bmFtZXMgc3VjaCBhcyB2aXJ0dWFsCisgICAgICAgICAgICAgICAgbWFjaGluZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS13cml0aW5nLWEtbmV3LXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5Xcml0aW5nIGEgTmV3IFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZWNpcGVzICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMpIGFyZSBmdW5kYW1lbnRhbCBjb21wb25lbnRzCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEVhY2ggc29mdHdhcmUgY29tcG9uZW50IGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICByZXF1aXJlcyBhIHJlY2lwZSB0byBkZWZpbmUgdGhlIGNvbXBvbmVudC4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSwgd3JpdGUsIGFuZCB0ZXN0IGEgbmV3CisgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdmFyaWFibGVzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgcmVjaXBlcyBhbmQKKyAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gYWJvdXQgcmVjaXBlIG5hbWluZyBpc3N1ZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1yZXF1aXJlZCc+UmVxdWlyZWQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1vdmVydmlldyc+CisgICAgICAgICAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgYmFzaWMgcHJvY2VzcyBmb3IgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGUgc2VjdGlvbiBwcm92aWRlcyBkZXRhaWxzIGZvciB0aGUgc3RlcHMuCisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtbG9jYXRlLW9yLWF1dG9tYXRpY2FsbHktY3JlYXRlLWEtYmFzZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2F0ZSBvciBBdXRvbWF0aWNhbGx5IENyZWF0ZSBhIEJhc2UgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHdheXMgd3JpdGUgYSByZWNpcGUgZnJvbSBzY3JhdGNoLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHR3byBjaG9pY2VzIGV4aXN0IHRoYXQgY2FuIGhlbHAgeW91IHF1aWNrbHkgZ2V0IGEKKyAgICAgICAgICAgICAgICBzdGFydCBvbiBhIG5ldyByZWNpcGU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cmVjaXBldG9vbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHRvb2wgcHJvdmlkZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGhhdCBhdXRvbWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIGEgYmFzZSByZWNpcGUgYmFzZWQgb24gdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGlzdGluZyBSZWNpcGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIGFuIGV4aXN0aW5nIHJlY2lwZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBzaW1pbGFyIGluIGZ1bmN0aW9uIHRvIHRoZSByZWNpcGUgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtY3JlYXRpbmctdGhlLWJhc2UtcmVjaXBlLXVzaW5nLXJlY2lwZXRvb2wnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgQmFzZSBSZWNpcGUgVXNpbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiBhdXRvbWF0ZXMgY3JlYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgYSBiYXNlIHJlY2lwZSBnaXZlbiBhIHNldCBvZiBzb3VyY2UgY29kZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgbG9uZyBhcyB5b3UgY2FuIGV4dHJhY3Qgb3IgcG9pbnQgdG8gdGhlIHNvdXJjZSBmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2wgd2lsbCBjb25zdHJ1Y3QgYSByZWNpcGUgYW5kIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGFsbCBwcmUtYnVpbGQgaW5mb3JtYXRpb24gaW50byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhbiBhcHBsaWNhdGlvbiB0aGF0IGJ1aWxkcworICAgICAgICAgICAgICAgICAgICB1c2luZyBBdXRvdG9vbHMuCisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIHRoZSBiYXNlIHJlY2lwZSB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBldG9vbDwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBoYXMgdGhlIHByZS1idWlsZCBkZXBlbmRlbmNpZXMsIGxpY2Vuc2UgcmVxdWlyZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICBhbmQgY2hlY2tzdW1zIGNvbmZpZ3VyZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHJ1biB0aGUgdG9vbCwgeW91IGp1c3QgbmVlZCB0byBiZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgaGF2ZSBzb3VyY2VkIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgYmFzaWMgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+cmVjaXBldG9vbCAtaDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBldG9vbCBjcmVhdGUgLWg8L2ZpbGVuYW1lPiBwcm9kdWNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbi1nZW5lcmF0ZWQgaGVscCwgd2hpY2ggcHJlc2VudGVkIGRpZmZlcmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHdoYXQgZm9sbG93cyBoZXJlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVjaXBldG9vbCAtaAorICAgICByZWNpcGV0b29sIGNyZWF0ZSBbLWhdCisgICAgIHJlY2lwZXRvb2wgWy1kXSBbLXFdIFstLWNvbG9yIGF1dG8gfCBhbHdheXMgfCBuZXZlciBdIGNyZWF0ZSAtbyA8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+IFstbV0gWy14IDxyZXBsYWNlYWJsZT5FWFRFUk5BTFNSQzwvcmVwbGFjZWFibGU+XSA8cmVwbGFjZWFibGU+c291cmNlPC9yZXBsYWNlYWJsZT4KKworICAgICAgICAgIC1kICAgICAgIEVuYWJsZXMgZGVidWcgb3V0cHV0LgorICAgICAgICAgIC1xICAgICAgIE91dHB1dHMgb25seSBlcnJvcnMgKHF1aWV0IG1vZGUpLgorICAgICAgICAgIC0tY29sb3IgIENvbG9yaXplcyB0aGUgb3V0cHV0IGF1dG9tYXRpY2FsbHksIGFsd2F5cywgb3IgbmV2ZXIuCisgICAgICAgICAgLWggICAgICAgRGlzcGxheXMgUHl0aG9uIGdlbmVyYXRlZCBzeW50YXggZm9yIHJlY2lwZXRvb2wuCisgICAgICAgICAgY3JlYXRlICAgQ2F1c2VzIHJlY2lwZXRvb2wgdG8gY3JlYXRlIGEgYmFzZSByZWNpcGUuICBUaGUgY3JlYXRlCisgICAgICAgICAgICAgICAgICAgY29tbWFuZCBpcyBmdXJ0aGVyIGRlZmluZWQgd2l0aCB0aGVzZSBvcHRpb25zOgorCisgICAgICAgICAgICAgICAgICAgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiAgICAgIFNwZWNpZmllcyB0aGUgZnVsbCBwYXRoIGFuZCBmaWxlbmFtZSBmb3IgdGhlIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgLW0gICAgICAgICAgICAgIENhdXNlcyB0aGUgcmVjaXBlIHRvIGJlIG1hY2hpbmUtc3BlY2lmaWMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIChkZWZhdWx0KS4KKyAgICAgICAgICAgICAgICAgICAteCA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPiAgRmV0Y2hlcyBhbmQgZXh0cmFjdHMgc291cmNlIGZpbGVzIGZyb20gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwbGFjZXMgdGhlbSBpbiA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+IG11c3QgYmUgYSBVUkwuCisgICAgICAgICAgICAgICAgICAgLWggICAgICAgICAgICAgIERpc3BsYXlzIFB5dGhvbi1nZW5lcmF0ZWQgc3ludGF4IGZvciBjcmVhdGUuCisgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+ICAgICAgICAgIFNwZWNpZmllcyB0aGUgc291cmNlIGNvZGUgb24gd2hpY2ggdG8gYmFzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2wgY3JlYXRlIC1vPC9maWxlbmFtZT4mbmJzcDs8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgdGhlIGJhc2UgcmVjaXBlIGFuZCBsb2NhdGVzIGl0IHByb3Blcmx5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICBsYXllciB0aGF0IGNvbnRhaW5zIHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgc3ludGF4IGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBzeW50YXggdG8gZ2VuZXJhdGUgYSByZWNpcGUgYmFzZWQgb24gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICBPbmNlIGdlbmVyYXRlZCwgdGhlIHJlY2lwZSByZXNpZGVzIGluIHRoZSBleGlzdGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZSBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZWNpcGV0b29sIGNyZWF0ZSAtbyA8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgc3ludGF4IHRvIGdlbmVyYXRlIGEgcmVjaXBlIHVzaW5nIGNvZGUgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdCBmcm9tIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4dHJhY3RlZCBjb2RlIGlzIHBsYWNlZCBpbiBpdHMgb3duIGxheWVyIGRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVjaXBldG9vbCBjcmVhdGUgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiAteCA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+c291cmNlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBzeW50YXggdG8gZ2VuZXJhdGUgYSByZWNpcGUgYmFzZWQgb24gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgb3B0aW9ucyBkaXJlY3QgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICBydW4gaW4gInF1aWV0IG1vZGUiIGFuZCB0byBnZW5lcmF0ZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9uY2UgZ2VuZXJhdGVkLCB0aGUgcmVjaXBlIHJlc2lkZXMgaW4gdGhlIGV4aXN0aW5nIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBjb2RlIGxheWVyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlY2lwZXRvb2wgY3JlYXRlIC1vIDxyZXBsYWNlYWJsZT5PVVRGSUxFPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWxvY2F0aW5nLWFuZC11c2luZy1hLXNpbWlsYXItcmVjaXBlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TG9jYXRpbmcgYW5kIFVzaW5nIGEgU2ltaWxhciBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB3cml0aW5nIGEgcmVjaXBlIGZyb20gc2NyYXRjaCwgaXQgaXMgb2Z0ZW4gdXNlZnVsIHRvCisgICAgICAgICAgICAgICAgICAgIGRpc2NvdmVyIHdoZXRoZXIgc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IHdyaXR0ZW4gb25lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWVldHMgKG9yIGNvbWVzIGNsb3NlIHRvIG1lZXRpbmcpIHlvdXIgbmVlZHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGFuZCBPcGVuRW1iZWRkZWQgY29tbXVuaXRpZXMgbWFpbnRhaW4gbWFueQorICAgICAgICAgICAgICAgICAgICByZWNpcGVzIHRoYXQgbWlnaHQgYmUgY2FuZGlkYXRlcyBmb3Igd2hhdCB5b3UgYXJlIGRvaW5nLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSBnb29kIGNlbnRyYWwgaW5kZXggb2YgdGhlc2UgcmVjaXBlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnJz5PcGVuRW1iZWRkZWQgbWV0YWRhdGEgaW5kZXg8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV29ya2luZyBmcm9tIGFuIGV4aXN0aW5nIHJlY2lwZSBvciBhIHNrZWxldG9uIHJlY2lwZSBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCB3YXkgdG8gZ2V0IHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgcG9pbnRzIG9uIGJvdGggbWV0aG9kczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TG9jYXRlIGFuZCBtb2RpZnkgYSByZWNpcGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNsb3NlIHRvIHdoYXQgeW91IHdhbnQgdG8gZG86PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3b3JrcyB3aGVuIHlvdSBhcmUgZmFtaWxpYXIgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHJlY2lwZSBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWV0aG9kIGRvZXMgbm90IHdvcmsgc28gd2VsbCBmb3IgdGhvc2UgbmV3IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qgb3Igd3JpdGluZyByZWNpcGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Tb21lIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1ldGhvZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBhIHJlY2lwZSB0aGF0IGhhcyBhcmVhcyB0b3RhbGx5IHVucmVsYXRlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gYWNjb21wbGlzaCB3aXRoIHlvdXIgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByZWNvZ25pemluZyBhcmVhcyBvZiB0aGUgcmVjaXBlIHRoYXQgeW91IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSB0byBhZGQgZnJvbSBzY3JhdGNoLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHRoZXNlIHJpc2tzIHN0ZW0gZnJvbSB1bmZhbWlsaWFyaXR5IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgcmVjaXBlIHNwYWNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgYW5kIG1vZGlmeSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tlbGV0b24gcmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBkbyBub3Qgd2FudCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBldG9vbDwvZmlsZW5hbWU+IGFuZCB5b3UgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZCBhbiBleGlzdGluZyByZWNpcGUgdGhhdCBpcyBjbG9zZSB0byBtZWV0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBuZWVkcywgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIHRoZSBmdW5kYW1lbnRhbCBhcmVhcyBvZiBhIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVNDUklQVElPTiA9ICIiCisgICAgIEhPTUVQQUdFID0gIiIKKyAgICAgTElDRU5TRSA9ICIiCisgICAgIFNFQ1RJT04gPSAiIgorICAgICBERVBFTkRTID0gIiIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICIiCisKKyAgICAgU1JDX1VSSSA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1zdG9yaW5nLWFuZC1uYW1pbmctdGhlLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+U3RvcmluZyBhbmQgTmFtaW5nIHRoZSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHlvdXIgYmFzZSByZWNpcGUsIHlvdSBzaG91bGQgcHV0IGl0IGluIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gbGF5ZXIgYW5kIG5hbWUgaXQgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgICAgICBMb2NhdGluZyBpdCBjb3JyZWN0bHkgZW5zdXJlcyB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gY2FuIGZpbmQgaXQgd2hlbiB5b3UgdXNlIEJpdEJha2UgdG8gcHJvY2VzcyB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdG9yaW5nIFlvdXIgUmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGxvY2F0ZXMgeW91ciByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbGF5ZXIncyA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgc2V0cyB1cCBhIHBhdGggZnJvbSB3aGljaCB0aGUgYnVpbGQgc3lzdGVtIGNhbgorICAgICAgICAgICAgICAgICAgICBsb2NhdGUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgdHlwaWNhbCB1c2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdSBsb2NhdGUgeW91ciBuZXcgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGluc2lkZSB5b3VyIGxheWVyIHN1Y2ggdGhhdCBpdCBjYW4gYmUgZm91bmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgbGF5ZXJzIGFyZQorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtaW5nIFlvdXIgUmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IG5hbWUgeW91ciByZWNpcGUsIHlvdSBuZWVkIHRvIGZvbGxvdyB0aGlzIG5hbWluZworICAgICAgICAgICAgICAgICAgICBjb252ZW50aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5iYXNlbmFtZTwvcmVwbGFjZWFibGU+XzxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4uYmIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBVc2UgbG93ZXItY2FzZWQgY2hhcmFjdGVycyBhbmQgZG8gbm90IGluY2x1ZGUgdGhlIHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgIHN1ZmZpeGVzIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tY3Jvc3M8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi1pbml0aWFsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gY2FzdWFsbHkgKGkuZS4gZG8gbm90IHVzZSB0aGVtCisgICAgICAgICAgICAgICAgICAgIGFzIHBhcnQgb2YgeW91ciByZWNpcGUgbmFtZSB1bmxlc3MgdGhlIHN0cmluZyBhcHBsaWVzKS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjdXBzXzEuNy4wLmJiCisgICAgIGdhd2tfNC4wLjIuYmIKKyAgICAgaXJzc2lfMC44LjE2LXJjMS5iYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kaW5nLXJlY2lwZS1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPlVuZGVyc3RhbmRpbmcgUmVjaXBlIFN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgcmVjaXBlIGZpbGUgc3ludGF4IGlzIGltcG9ydGFudCBmb3IKKyAgICAgICAgICAgICAgICB3cml0aW5nIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IG92ZXJ2aWV3cyB0aGUgYmFzaWMgaXRlbXMgdGhhdCBtYWtlIHVwIGEKKyAgICAgICAgICAgICAgICBCaXRCYWtlIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGNvbXBsZXRlIEJpdEJha2Ugc3ludGF4IGRlc2NyaXB0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEnPlN5bnRheCBhbmQgT3BlcmF0b3JzPC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZhcmlhYmxlIEFzc2lnbm1lbnRzIGFuZCBNYW5pcHVsYXRpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSBhc3NpZ25tZW50cyBhbGxvdyBhIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFzc2lnbm1lbnQgY2FuIGJlIHN0YXRpYyB0ZXh0IG9yIG1pZ2h0IGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb250ZW50cyBvZiBvdGhlciB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXNzaWdubWVudCwgYXBwZW5kaW5nIGFuZCBwcmVwZW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zIGFyZSBhbHNvIHN1cHBvcnRlZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3Mgc29tZSBvZiB0aGUgd2F5cworICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdmFyaWFibGVzIGluIHJlY2lwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFMgPSAiJHtXT1JLRElSfS9wb3N0Zml4LSR7UFZ9IgorICAgICBDRkxBR1MgKz0gIi1ETk9fQVNNIgorICAgICBTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2ZpeHVwLnBhdGNoIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgcHJvdmlkZSBhIHNlcmllcyBvZiBhY3Rpb25zIHRvIGJlIHBlcmZvcm1lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB1c3VhbGx5IHVzZSBmdW5jdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIGEgdGFzayBmdW5jdGlvbiBvciB0byBjb21wbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgZnVuY3Rpb24gKGkuZS4gYXBwZW5kIG9yIHByZXBlbmQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGZ1bmN0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIGZ1bmN0aW9ucyB1c2UgPGZpbGVuYW1lPnNoPC9maWxlbmFtZT4gc2hlbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCwgYWx0aG91Z2ggYWNjZXNzIHRvIE9wZW5FbWJlZGRlZCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCBtZXRob2RzIGFyZSBhbHNvIGF2YWlsYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgZnVuY3Rpb24gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2luc3RhbGwgKCkgeworICAgICAgICAgYXV0b3Rvb2xzX2RvX2luc3RhbGwKKyAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgICBtdiAke0R9JHtiaW5kaXJ9L3NlZCAke0R9JHtiYXNlX2JpbmRpcn0vc2VkCisgICAgICAgICBybWRpciAke0R9JHtiaW5kaXJ9LworICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGltcGxlbWVudCBuZXcgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBjYWxsZWQgYmV0d2VlbiBleGlzdGluZyB0YXNrcyBhcyBsb25nIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGZ1bmN0aW9ucyBhcmUgbm90IHJlcGxhY2luZyBvciBjb21wbGVtZW50aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGltcGxlbWVudCBmdW5jdGlvbnMgaW4gUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHNoZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgQm90aCBvZiB0aGVzZSBvcHRpb25zIGFyZSBub3Qgc2VlbiBpbiB0aGUgbWFqb3JpdHkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+S2V5d29yZHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcmVjaXBlcyB1c2Ugb25seSBhIGZldyBrZXl3b3Jkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB1c2Uga2V5d29yZHMgdG8gaW5jbHVkZSBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyAoPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiksIGxvYWQgcGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIGEgcmVjaXBlIGZyb20gb3RoZXIgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPikgYW5kIGV4cG9ydCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBlbnZpcm9ubWVudCAoPGZpbGVuYW1lPmV4cG9ydDwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHVzZSBvZiBzb21lIG9mCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVzZSBrZXl3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IFBPU1RDT05GID0gIiR7U1RBR0lOR19CSU5ESVJ9L3Bvc3Rjb25mIgorICAgICBpbmhlcml0IGF1dG9jb25mCisgICAgIHJlcXVpcmUgb3RoZXJmaWxlLmluYworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29tbWVudHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFueSBsaW5lcyB0aGF0IGJlZ2luIHdpdGggdGhlIGhhc2ggY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPiM8L2ZpbGVuYW1lPikgYXJlIHRyZWF0ZWQgYXMgY29tbWVudCBsaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFyZSBpZ25vcmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFRoaXMgaXMgYSBjb21tZW50CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGxpc3Qgc3VtbWFyaXplcyB0aGUgbW9zdCBpbXBvcnRhbnQgYW5kIG1vc3QgY29tbW9ubHkKKyAgICAgICAgICAgICAgICB1c2VkIHBhcnRzIG9mIHRoZSByZWNpcGUgc3ludGF4LgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHBhcnRzIG9mIHRoZSBzeW50YXgsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhJz5TeW50YXggYW5kIE9wZXJhdG9yczwvdWxpbms+CisgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxpbmUgQ29udGludWF0aW9uOiA8ZmlsZW5hbWU+XDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBiYWNrd2FyZCBzbGFzaCAoPGZpbGVuYW1lPlw8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciB0byBzcGxpdCBhIHN0YXRlbWVudCBvdmVyIG11bHRpcGxlIGxpbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgUGxhY2UgdGhlIHNsYXNoIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGNvbnRpbnVlZCBvbiB0aGUgbmV4dCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIgPSAiQSByZWFsbHkgbG9uZyBcCisgICAgICAgICAgICBsaW5lIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBoYXZlIGFueSBjaGFyYWN0ZXJzIGluY2x1ZGluZyBzcGFjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0YWJzIGFmdGVyIHRoZSBzbGFzaCBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2luZyBWYXJpYWJsZXM6IDxmaWxlbmFtZT4key4uLn08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPiR7PHJlcGxhY2VhYmxlPnZhcm5hbWU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPiBzeW50YXggdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgY29udGVudHMgb2YgYSB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlicG5nL3psaWItJHtQVn0udGFyLmd6IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UXVvdGUgQWxsIEFzc2lnbm1lbnRzOiA8ZmlsZW5hbWU+IjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGRvdWJsZSBxdW90ZXMgYXJvdW5kIHRoZSB2YWx1ZSBpbiBhbGwgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIxID0gIiR7T1RIRVJWQVJ9IgorICAgICBWQVIyID0gIlRoZSB2ZXJzaW9uIGlzICR7UFZ9IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZGl0aW9uYWwgQXNzaWdubWVudDogPGZpbGVuYW1lPj89PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb25hbCBhc3NpZ25tZW50IGlzIHVzZWQgdG8gYXNzaWduIGEgdmFsdWUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgdmFyaWFibGUsIGJ1dCBvbmx5IHdoZW4gdGhlIHZhcmlhYmxlIGlzIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgdW5zZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHF1ZXN0aW9uIG1hcmsgZm9sbG93ZWQgYnkgdGhlIGVxdWFsIHNpZ24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPikgdG8gbWFrZSBhICJzb2Z0IiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGZvciBjb25kaXRpb25hbCBhc3NpZ25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCAic29mdCIgYXNzaWdubWVudHMgYXJlIHVzZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgYWxsb3dlZCB0byBjb21lIHRocm91Z2ggZnJvbSB0aGUgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VkFSMTwvZmlsZW5hbWU+IGlzIHNldCB0byAiTmV3IHZhbHVlIiBpZgorICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgY3VycmVudGx5IGVtcHR5LgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPiBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQsIGl0IHJlbWFpbnMgdW5jaGFuZ2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIxID89ICJOZXcgdmFsdWUiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIG5leHQgZXhhbXBsZSwgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgbGVmdCB3aXRoIHRoZSB2YWx1ZSAiT3JpZ2luYWwgdmFsdWUiOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIxID0gIk9yaWdpbmFsIHZhbHVlIgorICAgICBWQVIxID89ICJOZXcgdmFsdWUiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BcHBlbmRpbmc6IDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBwbHVzIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgZXF1YWxzIHNpZ24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPikgdG8gYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcGVyYXRvciBhZGRzIGEgc3BhY2UgYmV0d2VlbiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50IG9mIHRoZSB2YXJpYWJsZSBhbmQgdGhlIG5ldyBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBlbmRpbmc6IDxmaWxlbmFtZT49KzwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBlcXVhbHMgc2lnbiBmb2xsb3dlZCBieSB0aGUgcGx1cyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPikgdG8gcHJlcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgYWRkcyBhIHNwYWNlIGJldHdlZW4gdGhlIG5ldyBjb250ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBleGlzdGluZyBjb250ZW50IG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUiA9KyAiU3RhcnRzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nOiA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9wZXJhdG9yIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgZG9lcyBub3QgYWRkIGFueSBhZGRpdGlvbmFsIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgdGhlIG9wZXJhdG9yIGlzIGFwcGxpZWQgYWZ0ZXIgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4gb3BlcmF0b3JzIGhhdmUgYmVlbiBhcHBsaWVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gYXNzaWdubWVudHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHNwYWNlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IGFkZGVkIHRvIHRoZSBzdGFydCB0byBlbnN1cmUgdGhlIGFwcGVuZGVkCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyBub3QgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIHdpdGggb3ZlcnJpZGVzLCB3aGljaCByZXN1bHRzIGluIHRoZSBhY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlaW5nIHBlcmZvcm1lZCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUklfYXBwZW5kX3NoNCA9ICIgZmlsZTovL2ZpeC1tYWtlZmlsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBlbmRpbmc6IDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRvciB0bworICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcGVyYXRvciBkb2VzIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCB0aGUgb3BlcmF0b3IgaXMgYXBwbGllZCBhZnRlciBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPiBvcGVyYXRvcnMgaGF2ZSBiZWVuIGFwcGxpZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBhbGwgPGZpbGVuYW1lPj08L2ZpbGVuYW1lPiBhc3NpZ25tZW50cyBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICBvY2N1cnJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgc3BhY2UgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgYWRkZWQgdG8gdGhlIGVuZCB0byBlbnN1cmUgdGhlIHByZXBlbmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgbm90IG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ0ZMQUdTX3ByZXBlbmQgPSAiLUkke1N9L215aW5jbHVkZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIHdpdGggb3ZlcnJpZGVzLCB3aGljaCByZXN1bHRzIGluIHRoZSBhY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlaW5nIHBlcmZvcm1lZCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENGTEFHU19wcmVwZW5kX3NoNCA9ICItSSR7U30vbXlpbmNsdWRlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PdmVycmlkZXM6PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2Ugb3ZlcnJpZGVzIHRvIHNldCBhIHZhbHVlIGNvbmRpdGlvbmFsbHksCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYmFzZWQgb24gaG93IHRoZSByZWNpcGUgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtCUkFOQ0gnPjxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyB2YWx1ZSB0byAic3RhbmRhcmQvYmFzZSIgZm9yIGFueSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgZm9yIHFlbXVhcm0gd2hlcmUgaXQgc2hvdWxkIGJlIHNldCB0bworICAgICAgICAgICAgICAgICAgICAgICAgInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiwgeW91IHdvdWxkIGRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdWFybSAgPSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMgYXJlIGFsc28gdXNlZCB0byBzZXBhcmF0ZSBhbHRlcm5hdGUgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiBhIHZhcmlhYmxlIGluIG90aGVyIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiBzZXR0aW5nIHZhcmlhYmxlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFyZSBzcGVjaWZpYyB0byBpbmRpdmlkdWFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSwgeW91IHNob3VsZCBhbHdheXMgdXNlIGFuIG92ZXJyaWRlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluZGVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2Ugc3BhY2VzIGZvciBpbmRlbnRhdGlvbiByYXRoZXIgdGhhbiB0aGFuIHRhYnMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3Igc2hlbGwgZnVuY3Rpb25zLCBib3RoIGN1cnJlbnRseSB3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgYSBwb2xpY3kgZGVjaXNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSB0YWJzIGluIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCBzb21lIGxheWVycyBoYXZlIGEgcG9saWN5IHRvIHVzZSBzcGFjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgaW5kZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2luZyBQeXRob24gZm9yIENvbXBsZXggT3BlcmF0aW9uczogPGZpbGVuYW1lPiR7QDxyZXBsYWNlYWJsZT5weXRob25fY29kZTwvcmVwbGFjZWFibGU+fTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQgcHJvY2Vzc2luZywgaXQgaXMgcG9zc2libGUgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gY29kZSBkdXJpbmcgdmFyaWFibGUgYXNzaWdubWVudHMgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaCBhbmQgcmVwbGFjZW1lbnQgb24gYSB2YXJpYWJsZSkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGluZGljYXRlIFB5dGhvbiBjb2RlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7QDxyZXBsYWNlYWJsZT5weXRob25fY29kZTwvcmVwbGFjZWFibGU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXggZm9yIHRoZSB2YXJpYWJsZSBhc3NpZ25tZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3ppcCR7QGQuZ2V0VmFyKCdQVicsMSkucmVwbGFjZSgnLicsICcnKX0udGd6CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaGVsbCBGdW5jdGlvbiBTeW50YXg6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIHNoZWxsIGZ1bmN0aW9ucyBhcyBpZiB5b3Ugd2VyZSB3cml0aW5nIGEgc2hlbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCB3aGVuIHlvdSBkZXNjcmliZSBhIGxpc3Qgb2YgYWN0aW9ucyB0byB0YWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBlbnN1cmUgdGhhdCB5b3VyIHNjcmlwdCB3b3JrcyB3aXRoIGEgZ2VuZXJpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoPC9maWxlbmFtZT4gYW5kIHRoYXQgaXQgZG9lcyBub3QgcmVxdWlyZQorICAgICAgICAgICAgICAgICAgICAgICAgYW55IDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gb3Igb3RoZXIgc2hlbGwtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSB0byB2YXJpb3VzIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0aWVzIChlLmcuIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncmVwPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5hd2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkgdGhhdCB5b3UgbWlnaHQgd2lzaCB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBpbiBkb3VidCwgeW91IHNob3VsZCBjaGVjayB3aXRoIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgLSBpbmNsdWRpbmcgdGhvc2UgZnJvbSBCdXN5Qm94LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1ydW5uaW5nLWEtYnVpbGQtb24tdGhlLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBhIEJ1aWxkIG9uIHRoZSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDcmVhdGluZyBhIG5ldyByZWNpcGUgaXMgdXN1YWxseSBhbiBpdGVyYXRpdmUgcHJvY2VzcyB0aGF0CisgICAgICAgICAgICAgICAgcmVxdWlyZXMgdXNpbmcgQml0QmFrZSB0byBwcm9jZXNzIHRoZSByZWNpcGUgbXVsdGlwbGUgdGltZXMgaW4KKyAgICAgICAgICAgICAgICBvcmRlciB0byBwcm9ncmVzc2l2ZWx5IGRpc2NvdmVyIGFuZCBhZGQgaW5mb3JtYXRpb24gdG8gdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdSBoYXZlIHNvdXJjZWQgYSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgIGFuZCB5b3UgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgICAgICB1c2UgQml0QmFrZSB0byBwcm9jZXNzIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIEFsbCB5b3UgbmVlZCB0byBwcm92aWRlIGlzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+YmFzZW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IG9mIHRoZSByZWNpcGUgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPmJhc2VuYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyBhCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IHdvcmsgZGlyZWN0b3J5IGZvciBlYWNoIHJlY2lwZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIHdoZXJlIGl0IGtlZXBzIGV4dHJhY3RlZCBzb3VyY2UgZmlsZXMsIGxvZyBmaWxlcywgaW50ZXJtZWRpYXRlCisgICAgICAgICAgICAgICAgY29tcGlsYXRpb24gYW5kIHBhY2thZ2luZyBmaWxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcGVyLXJlY2lwZSB0ZW1wb3Jhcnkgd29yayBkaXJlY3RvcnkgaXMgY29uc3RydWN0ZWQgYXMgZm9sbG93cyBhbmQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHNldmVyYWwgZmFjdG9yczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJBU0VfV09SS0RJUiA/PSAiJHtUTVBESVJ9L3dvcmsiCisgICAgIFdPUktESVIgPSAiJHtCQVNFX1dPUktESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhIFNvdXJjZSBEaXJlY3RvcnkgdG9wLWxldmVsIGZvbGRlciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4sIGEgZGVmYXVsdCBCdWlsZCBEaXJlY3RvcnkgYXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+LCBhbmQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXBva3ktbGludXg8L2ZpbGVuYW1lPiBtYWNoaW5lIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHN1cHBvc2UgeW91ciByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzEuMy4wLmJiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCisgICAgICAgICAgICAgICAgYnVpbGQgdGhlIHBhY2thZ2Ugd291bGQgYmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2Zvby8xLjMuMC1yMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbnNpZGUgdGhpcyBkaXJlY3RvcnkgeW91IGNhbiBmaW5kIHN1Yi1kaXJlY3RvcmllcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5wYWNrYWdlcy1zcGxpdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+dGVtcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBidWlsZCwgeW91IGNhbiBleGFtaW5lIHRoZXNlIHRvIGRldGVybWluZSBob3cgd2VsbAorICAgICAgICAgICAgICAgIHRoZSBidWlsZCB3ZW50LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbG9nIGZpbGVzIGZvciBlYWNoIHRhc2sgaW4gdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZW1wPC9maWxlbmFtZT4gZGlyZWN0b3J5IChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAvdGVtcDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgTG9nIGZpbGVzIGFyZSBuYW1lZCA8ZmlsZW5hbWU+bG9nLjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmxvZy5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvZy5kb19mZXRjaDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvZy5kb19jb21waWxlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1aWxkIHByb2Nlc3MgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcmVmZXJlbmNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCdzIGdsb3NzYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTVVMVElNQUNIX1RBUkdFVF9TWVMnPjxmaWxlbmFtZT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IHN5c3RlbSBpZGVudGlmaWVyPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgbmFtZTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURU5EUEUnPjxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggLSAoaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNwZWNpZmllZCwgd2hpY2ggaXMgdXN1YWxseSB0aGUgY2FzZSBmb3IgbW9zdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBpcyBibGFuayk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSB2ZXJzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgcmV2aXNpb248L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtZmV0Y2hpbmctY29kZSc+CisgICAgICAgICAgICA8dGl0bGU+RmV0Y2hpbmcgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3VyIHJlY2lwZSBtdXN0IGRvIGlzIHNwZWNpZnkgaG93IHRvIGZldGNoCisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBGZXRjaGluZyBpcyBjb250cm9sbGVkIG1haW5seSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBZb3VyIHJlY2lwZSBtdXN0IGhhdmUgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgdGhhdCBwb2ludHMgdG8gd2hlcmUgdGhlIHNvdXJjZSBpcyBsb2NhdGVkLgorICAgICAgICAgICAgICAgIEZvciBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiBzb3VyY2UgbG9jYXRpb25zLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NvdXJjZXMtZGV2LWVudmlyb25tZW50Jz5Tb3VyY2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlIHByZWZpeCBvZiBlYWNoIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHdoaWNoCisgICAgICAgICAgICAgICAgZmV0Y2hlciB0byB1c2UgdG8gZ2V0IHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRoYXQgdHJpZ2dlcnMKKyAgICAgICAgICAgICAgICB0aGUgZmV0Y2hlci4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlIHZhcmlhYmxlIGFmdGVyIHNvdXJjZSBpcyBmZXRjaGVkIHRvIGFwcGx5CisgICAgICAgICAgICAgICAgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTT1ZFUlJJREVTJz48ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIHNjYW5uaW5nIGRpcmVjdG9yeSBsb2NhdGlvbnMgZm9yIGxvY2FsIGZpbGVzIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgaW4geW91ciByZWNpcGUgbXVzdAorICAgICAgICAgICAgICAgIGRlZmluZSBlYWNoIHVuaXF1ZSBsb2NhdGlvbiBmb3IgeW91ciBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgSXQgaXMgZ29vZCBwcmFjdGljZSB0byBub3QgaGFyZC1jb2RlIHBhdGhuYW1lcyBpbiBhbiBVUkwgdXNlZAorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gaGFyZC1jb2RlIHRoZXNlIHBhdGhzLCB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgd2hpY2ggY2F1c2VzIHRoZSBmZXRjaCBwcm9jZXNzIHRvIHVzZSB0aGUgdmVyc2lvbiBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGZpbGVuYW1lLgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgdGhlIHZlcnNpb24gaW4gdGhpcyBtYW5uZXIgbWVhbnMgdGhhdCB1cGdyYWRpbmcgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIGEgZnV0dXJlIHZlcnNpb24gaXMgYXMgc2ltcGxlIGFzIHJlbmFtaW5nIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICB0byBtYXRjaCB0aGUgbmV3IHZlcnNpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2RydG9vbHMvY2RydG9vbHMtbmF0aXZlXzMuMDFhMjAuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHJlY2lwZSB3aGVyZSB0aGUgc291cmNlIGNvbWVzIGZyb20gYSBzaW5nbGUgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICBOb3RpY2UgdGhlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiZnRwOi8vZnRwLmJlcmxpb3MuZGUvcHViL2NkcmVjb3JkL2FscGhhL2NkcnRvb2xzLSR7UFZ9LnRhci5iejIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaWxlcyBtZW50aW9uZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB3aG9zZSBuYW1lcyBlbmQKKyAgICAgICAgICAgICAgICBpbiBhIHR5cGljYWwgYXJjaGl2ZSBleHRlbnNpb24gKGUuZy4gPGZpbGVuYW1lPi50YXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnRhci5nejwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+LnRhci5iejI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnppcDwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLCBhcmUgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGV4dHJhY3RlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXVucGFjayc+PGZpbGVuYW1lPmRvX3VucGFjazwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIEZvciBhbm90aGVyIGV4YW1wbGUgdGhhdCBzcGVjaWZpZXMgdGhlc2UgdHlwZXMgb2YgZmlsZXMsIHNlZQorICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLWF1dG90b29sZWQtcGFja2FnZSc+QXV0b3Rvb2xlZCBQYWNrYWdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbm90aGVyIHdheSBvZiBzcGVjaWZ5aW5nIHNvdXJjZSBpcyBmcm9tIGFuIFNDTS4KKyAgICAgICAgICAgICAgICBGb3IgR2l0IHJlcG9zaXRvcmllcywgeW91IG11c3Qgc3BlY2lmeQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIHlvdSBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUgdGhlIHJldmlzaW9uIHdpdGgKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDUkVWID0gImQ2OTE4Yzg4MzI3OTNiNDIwNWVkM2JmZWRlNzhjMmY5MTVjMjMzODUiCisKKyAgICAgUFIgPSAicjYiCisgICAgIFBWID0gIjEuMC41K2dpdCR7U1JDUFZ9IgorCisgICAgIFNSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXQgXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91ciA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBpbmNsdWRlcworICAgICAgICAgICAgICAgIFVSTHMgcG9pbnRpbmcgdG8gaW5kaXZpZHVhbCBmaWxlcyBmZXRjaGVkIGZyb20gYSByZW1vdGUgc2VydmVyCisgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0sIEJpdEJha2UgYXR0ZW1wdHMgdG8KKyAgICAgICAgICAgICAgICB2ZXJpZnkgdGhlIGZpbGVzIGFnYWluc3QgY2hlY2tzdW1zIGRlZmluZWQgaW4geW91ciByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICBlbnN1cmUgdGhleSBoYXZlIG5vdCBiZWVuIHRhbXBlcmVkIHdpdGggb3Igb3RoZXJ3aXNlIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgc2luY2UgdGhlIHJlY2lwZSB3YXMgd3JpdHRlbi4KKyAgICAgICAgICAgICAgICBUd28gY2hlY2tzdW1zIGFyZSB1c2VkOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJW21kNXN1bV08L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSVtzaGEyNTZzdW1dPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdXIgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICBtb3JlIHRoYW4gYSBzaW5nbGUgVVJMIChleGNsdWRpbmcgU0NNIFVSTHMpLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgdGhlIDxmaWxlbmFtZT5tZDU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hhMjU2PC9maWxlbmFtZT4gY2hlY2tzdW1zIGZvciBlYWNoIFVSTC4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBwcm92aWRlIGEgbmFtZSBmb3IgZWFjaCBVUkwgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFuZCB0aGVuIHJlZmVyZW5jZSB0aGF0IG5hbWUKKyAgICAgICAgICAgICAgICBpbiB0aGUgc3Vic2VxdWVudCBjaGVja3N1bSBzdGF0ZW1lbnRzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXBtZC9hcG1kXzMuMi4yLm9yaWcudGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICAgICAgJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXBtZC9hcG1kXyR7UFZ9LmRpZmYuZ3o7bmFtZT1wYXRjaAorCisgICAgIFNSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImIxZTYzMDllODMzMWUwZjRlNmVmZDMxMWMyZDk3ZmE4IgorICAgICBTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICI3ZjdkOWY2MGI3NzY2Yjg1Mjg4MWQ0MGI4ZmY5MWQ4ZTM5ZmNjYjBkMWQ5MTMxMDJhNWM3NWEyZGJiNTIzMzJkIgorCisgICAgIFNSQ19VUklbcGF0Y2gubWQ1c3VtXSA9ICI1N2UxYjY4OTI2NGVhODBmNzgzNTM1MTllZWNlMGM5MiIKKyAgICAgU1JDX1VSSVtwYXRjaC5zaGEyNTZzdW1dID0gIjc5MDVmZjk2YmU5M2Q3MjU1NDRkMDA0MGU0MjVjNDJmOWMwNTU4MGRiM2MyNzJmMTFjZmY3NWI5YWE4OWQ0MzAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQcm9wZXIgdmFsdWVzIGZvciA8ZmlsZW5hbWU+bWQ1PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoYTI1NjwvZmlsZW5hbWU+IGNoZWNrc3VtcyBtaWdodCBiZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICB3aXRoIG90aGVyIHNpZ25hdHVyZXMgb24gdGhlIGRvd25sb2FkIHBhZ2UgZm9yIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgIHNvdXJjZSAoZS5nLiA8ZmlsZW5hbWU+bWQ1PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoYTE8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnNoYTI1NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HUEc8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG9ubHkgZGVhbHMgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGEyNTZzdW08L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPm1kNXN1bTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHlvdSBzaG91bGQgdmVyaWZ5IGFsbCB0aGUgc2lnbmF0dXJlcyB5b3UgZmluZCBieSBoYW5kLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiBubyA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGNoZWNrc3VtcyBhcmUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgd2hlbiB5b3UgYXR0ZW1wdCB0byBidWlsZCB0aGUgcmVjaXBlLCBvciB5b3UgcHJvdmlkZSBhbgorICAgICAgICAgICAgICAgIGluY29ycmVjdCBjaGVja3N1bSwgdGhlIGJ1aWxkIHdpbGwgcHJvZHVjZSBhbiBlcnJvciBmb3IgZWFjaAorICAgICAgICAgICAgICAgIG1pc3Npbmcgb3IgaW5jb3JyZWN0IGNoZWNrc3VtLgorICAgICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIGVycm9yIG1lc3NhZ2UsIHRoZSBidWlsZCBzeXN0ZW0gcHJvdmlkZXMKKyAgICAgICAgICAgICAgICB0aGUgY2hlY2tzdW0gc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZldGNoZWQgZmlsZS4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGNoZWNrc3VtcywgeW91IGNhbiBjb3B5IGFuZCBwYXN0ZQorICAgICAgICAgICAgICAgIHRoZW0gaW50byB5b3VyIHJlY2lwZSBhbmQgdGhlbiBydW4gdGhlIGJ1aWxkIGFnYWluIHRvIGNvbnRpbnVlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIGlmIHRoZSB1cHN0cmVhbSBzb3VyY2UgcHJvdmlkZXMgc2lnbmF0dXJlcworICAgICAgICAgICAgICAgICAgICBmb3IgdmVyaWZ5aW5nIHRoZSBkb3dubG9hZGVkIHNvdXJjZSBjb2RlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIHZlcmlmeSB0aG9zZSBtYW51YWxseSBiZWZvcmUgc2V0dGluZyB0aGUgY2hlY2tzdW0gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSByZWNpcGUgYW5kIGNvbnRpbnVpbmcgd2l0aCB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbmFsIGV4YW1wbGUgaXMgYSBiaXQgbW9yZSBjb21wbGljYXRlZCBhbmQgaXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUncyA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBpZGVudGlmaWVzCisgICAgICAgICAgICAgICAgbXVsdGlwbGUgZmlsZXMgYXMgdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHJlY2lwZTogYSB0YXJiYWxsLCBhCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZSwgYSBkZXNrdG9wIGZpbGUsIGFuZCBhbiBpY29uLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vZGlzdC5zY2htb3JwLmRlL3J4dnQtdW5pY29kZS9BdHRpYy9yeHZ0LXVuaWNvZGUtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICAgICAgZmlsZTovL3h3Yy5wYXRjaCBcCisgICAgICAgICAgICAgICAgZmlsZTovL3J4dnQuZGVza3RvcCBcCisgICAgICAgICAgICAgICAgZmlsZTovL3J4dnQucG5nIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3BlY2lmeSBsb2NhbCBmaWxlcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSSSBwcm90b2NvbCwgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGZldGNoZXMgZmlsZXMgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBUaGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBzZWFyY2hlcyBzcGVjaWZpYyBkaXJlY3RvcmllcyBpbiBhIGNlcnRhaW4gb3JkZXI6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlAnPjxmaWxlbmFtZT5CUDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQTic+PGZpbGVuYW1lPkJQTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3JpZXMgYXJlIGFzc3VtZWQgdG8gYmUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIHRoYXQgc3BlY2lmaWVzIHRoZXNlIHR5cGVzIG9mIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtc2luZ2xlLWMtZmlsZS1wYWNrYWdlLWhlbGxvLXdvcmxkJz5TaW5nbGUgLmMgRmlsZSBQYWNrYWdlIChIZWxsbyBXb3JsZCEpPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBhbHNvIHNwZWNpZmllcyBhIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgUGF0Y2ggZmlsZXMgYXJlIGZpbGVzIHdob3NlIG5hbWVzIHVzdWFsbHkgZW5kIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5wYXRjaDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4uZGlmZjwvZmlsZW5hbWU+IGJ1dAorICAgICAgICAgICAgICAgIGNhbiBlbmQgd2l0aCBjb21wcmVzc2VkIHN1ZmZpeGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlmZi5nejwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaC5iejI8L2ZpbGVuYW1lPiwgZm9yIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgcGF0Y2hlcyBhcyBkZXNjcmliZWQKKyAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1wYXRjaGluZy1jb2RlJz5QYXRjaGluZyBDb2RlPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXVucGFja2luZy1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5VbnBhY2tpbmcgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy11bnBhY2snPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayB1bnBhY2tzIHRoZSBzb3VyY2Ugd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwb2ludGluZyB0byB3aGVyZSBpdCBpcyB1bnBhY2tlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBmZXRjaGluZyB5b3VyIHNvdXJjZSBmaWxlcyBmcm9tIGFuIHVwc3RyZWFtIHNvdXJjZQorICAgICAgICAgICAgICAgIGFyY2hpdmVkIHRhcmJhbGwgYW5kIHRoZSB0YXJiYWxsJ3MgaW50ZXJuYWwgc3RydWN0dXJlIG1hdGNoZXMKKyAgICAgICAgICAgICAgICB0aGUgY29tbW9uIGNvbnZlbnRpb24gb2YgYSB0b3AtbGV2ZWwgc3ViZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHRoZW4geW91IGRvIG5vdCBuZWVkIHRvIHNldCA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3BlY2lmaWVzIHRvIGZldGNoCisgICAgICAgICAgICAgICAgc291cmNlIGZyb20gYW4gYXJjaGl2ZSB0aGF0IGRvZXMgbm90IHVzZSB0aGlzIGNvbnZlbnRpb24sCisgICAgICAgICAgICAgICAgb3IgZnJvbSBhbiBTQ00gbGlrZSBHaXQgb3IgU3VidmVyc2lvbiwgeW91ciByZWNpcGUgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICBkZWZpbmUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgcHJvY2Vzc2luZyB5b3VyIHJlY2lwZSB1c2luZyBCaXRCYWtlIHN1Y2Nlc3NmdWxseSB1bnBhY2tzCisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBmaWxlcywgeW91IG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gbWF0Y2hlcyB0aGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgb2YgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXBhdGNoaW5nLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGNoaW5nIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIHBhdGNoIGNvZGUgYWZ0ZXIgaXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICBmZXRjaGVkLgorICAgICAgICAgICAgICAgIEFueSBmaWxlcyBtZW50aW9uZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB3aG9zZQorICAgICAgICAgICAgICAgIG5hbWVzIGVuZCBpbiA8ZmlsZW5hbWU+LnBhdGNoPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmRpZmY8L2ZpbGVuYW1lPiBvciBjb21wcmVzc2VkIHZlcnNpb25zIG9mIHRoZXNlCisgICAgICAgICAgICAgICAgc3VmZml4ZXMgKGUuZy4gPGZpbGVuYW1lPmRpZmYuZ3o8L2ZpbGVuYW1lPiBhcmUgdHJlYXRlZCBhcworICAgICAgICAgICAgICAgIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgdGhlc2UgcGF0Y2hlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBhcHBseSBwYXRjaGVzIHdpdGggdGhlICItcDEiCisgICAgICAgICAgICAgICAgb3B0aW9uIChpLmUuIG9uZSBkaXJlY3RvcnkgbGV2ZWwgaW4gdGhlIHBhdGggd2lsbCBiZSBzdHJpcHBlZAorICAgICAgICAgICAgICAgIG9mZikuCisgICAgICAgICAgICAgICAgSWYgeW91ciBwYXRjaCBuZWVkcyB0byBoYXZlIG1vcmUgZGlyZWN0b3J5IGxldmVscyBzdHJpcHBlZCBvZmYsCisgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGxldmVscyB1c2luZyB0aGUgInN0cmlwbGV2ZWwiIG9wdGlvbiBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGVudHJ5IGZvciB0aGUgcGF0Y2guCisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91ciBwYXRjaCBuZWVkcyB0byBiZSBhcHBsaWVkIGluIGEgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcnkgdGhhdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBwYXRjaCBmaWxlLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgInBhdGNoZGlyIiBvcHRpb24gaW4gdGhlIGVudHJ5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB3aXRoIGFsbCBsb2NhbCBmaWxlcyByZWZlcmVuY2VkIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHVzaW5nIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4sIHlvdSBzaG91bGQgcGxhY2UKKyAgICAgICAgICAgICAgICBwYXRjaCBmaWxlcyBpbiBhIGRpcmVjdG9yeSBuZXh0IHRvIHRoZSByZWNpcGUgZWl0aGVyCisgICAgICAgICAgICAgICAgbmFtZWQgdGhlIHNhbWUgYXMgdGhlIGJhc2UgbmFtZSBvZiB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUCc+PGZpbGVuYW1lPkJQPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgIG9yICJmaWxlcyIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1saWNlbnNpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkxpY2Vuc2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdXIgcmVjaXBlIG5lZWRzIHRvIGhhdmUgYm90aCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElDRU5TRSc+PGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ19GSUxFU19DSEtTVU0nPjxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBsaWNlbnNlIGZvciB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGtub3cgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIGlzIGRpc3RyaWJ1dGVkLCB5b3Ugc2hvdWxkIGdvIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgYW5kIGxvb2sgZm9yIHRoYXQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUeXBpY2FsIGZpbGVzIGNvbnRhaW5pbmcgdGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09QWUlORzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY291bGQgYWxzbyBmaW5kIHRoZSBpbmZvcm1hdGlvbiBuZWFyIHRoZSB0b3Agb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgc291cmNlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBwaWVjZSBvZiBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgeW91IHdvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIkdQTHYyIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBsaWNlbnNlcyB5b3Ugc3BlY2lmeSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gY2FuIGhhdmUgYW55IG5hbWUgYXMgbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgYXMgeW91IGRvIG5vdCB1c2Ugc3BhY2VzLCBzaW5jZSBzcGFjZXMgYXJlIHVzZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcnMgYmV0d2VlbiBsaWNlbnNlIG5hbWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHN0YW5kYXJkIGxpY2Vuc2VzLCB1c2UgdGhlIG5hbWVzIG9mIHRoZSBmaWxlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgPGZpbGVuYW1lPlNQRFhMSUNFTlNFTUFQPC9maWxlbmFtZT4gZmxhZyBuYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+bWV0YS9jb25mL2xpY2Vuc2VzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhpcyB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIHRoZSBsaWNlbnNlIHRleHQgaGFzIG5vdCBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgaXQgaGFzLCB0aGUgYnVpbGQgcHJvZHVjZXMgYW4gZXJyb3IgYW5kIGl0IGFmZm9yZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB0aGUgY2hhbmNlIHRvIGZpZ3VyZSBpdCBvdXQgYW5kIGNvcnJlY3QgdGhlIHByb2JsZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbmVlZCB0byBzcGVjaWZ5IGFsbCBhcHBsaWNhYmxlIGxpY2Vuc2luZworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgZm9yIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3RlcCwgdGhlIGJ1aWxkIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgY29tcGFyZSB0aGUgY2hlY2tzdW1zIG9mIHRoZSBmaWxlcyB0byBiZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGV4dCBoYXMgbm90IGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBBbnkgZGlmZmVyZW5jZXMgcmVzdWx0IGluIGFuIGVycm9yIHdpdGggdGhlIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgY2hlY2tzdW0uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBleHBsYW5hdGlvbiBhbmQgZXhhbXBsZXMgb2YgaG93IHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSc+VHJhY2tpbmcgTGljZW5zZSBDaGFuZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGNoZWNrc3VtIHN0cmluZywgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gbGlzdCB0aGUgYXBwcm9wcmlhdGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdCBtZDUgc3RyaW5ncywgYXR0ZW1wdCB0byBidWlsZCB0aGUgc29mdHdhcmUsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBub3RlIHRoZSByZXN1bHRpbmcgZXJyb3IgbWVzc2FnZXMgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIGNvcnJlY3QgbWQ1IHN0cmluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1mZXRjaGluZy1jb2RlJz5GZXRjaGluZyBDb2RlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFzc3VtZXMgdGhlIHNvZnR3YXJlIGhhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09QWUlORzwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PXh4eCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHRyeSB0byBidWlsZCB0aGUgc29mdHdhcmUsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgcHJvZHVjZSBhbiBlcnJvciBhbmQgZ2l2ZSB5b3UgdGhlIGNvcnJlY3Qgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBjYW4gc3Vic3RpdHV0ZSBpbnRvIHRoZSByZWNpcGUgZmlsZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCis8IS0tCisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0cnlpbmcgdGhpcyBvdXQgSSBjcmVhdGVkIGEgbmV3IHJlY2lwZSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odG9wXzEuMC4yLmJiPC9maWxlbmFtZT4gYW5kIHB1dCBpdCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9odG9wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHR3byBsaWNlbnNlIHR5cGUgc3RhdGVtZW50cyBpbiBteSB2ZXJ5IHNpbXBsZQorICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0UgPSAiIgorCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgIFNSQ19VUklbbWQ1c3VtXSA9ICIiCisgICAgIFNSQ19VUklbc2hhMjU2c3VtXSA9ICIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV2aWRlbnRseSwgeW91IG5lZWQgdG8gcnVuIGEgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW5hbGwgaHRvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE5leHQsIHlvdSBkZWxldGUgb3IgY29tbWVudCBvdXQgdGhlIHR3byA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbGluZXMgYXQgdGhlIGVuZCBhbmQgdGhlbiBhdHRlbXB0IHRvIGJ1aWxkIHRoZSBzb2Z0d2FyZSB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgaHRvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGNhdXNlcyBCaXRCYWtlIHRvIHJlcG9ydCBzb21lIGVycm9ycyBhbmQgYW5kIGdpdmUKKyAgICAgICAgICAgICAgICB5b3UgdGhlIGFjdHVhbCBzdHJpbmdzIHlvdSBuZWVkIGZvciB0aGUgbGFzdCB0d28KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGxpbmVzLgorICAgICAgICAgICAgICAgIFByaW9yIHRvIHRoaXMsIHlvdSBoYXZlIHRvIGRpZyBhcm91bmQgaW4gdGhlIGhvbWUgcGFnZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgZm9yIDxmaWxlbmFtZT5odG9wPC9maWxlbmFtZT4gYW5kIGRldGVybWluZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIEdQTHYyLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSB0aGF0IGluIHRoZSA8ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIE5vdyB5b3UgZWRpdCB5b3VyIHJlY2lwZSB0byBoYXZlIHRob3NlIHR3byBzdHJpbmdzIGZvcgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIkdQTHYyIgorCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2h0b3AvaHRvcC0ke1BWfS50YXIuZ3oiCisgICAgIFNSQ19VUklbbWQ1c3VtXSA9ICIwZDAxY2NhOGRmMzM0OWM3NDU2OWNlZmViYmQ5OTE5ZSIKKyAgICAgU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlNjA2NTdiMDQ0ZWNlMGRmMDk2YzA1MzA2MGRmN2FiZjNjY2UzYTU2OGFiMzRkMjYwMDQ5ZTZhMzdjY2Q4YTEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4gYnVpbGQgdGhlIHNvZnR3YXJlIGFnYWluIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIGh0b3A8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIFRoZXJlIGlzIGp1c3QgYSBzZXQgb2YgZXJyb3JzIG5vdyBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgZW1wdHkgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSBub3cuCisgICAgICAgICAgICA8L3BhcmE+CistLT4KKworICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtY29uZmlndXJpbmctdGhlLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1vc3Qgc29mdHdhcmUgcHJvdmlkZXMgc29tZSBtZWFucyBvZiBzZXR0aW5nIGJ1aWxkLXRpbWUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIFR5cGljYWxseSwgc2V0dGluZyB0aGVzZSBvcHRpb25zIGlzIGFjY29tcGxpc2hlZCBieSBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0IHdpdGggc29tZSBvcHRpb25zLCBvciBieSBtb2RpZnlpbmcgYSBidWlsZAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBtYWpvciBwYXJ0IG9mIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBpcyBhYm91dCBjaGVja2luZyBmb3IKKyAgICAgICAgICAgICAgICBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBhbmQgcG9zc2libHkgZW5hYmxpbmcgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGFzIGEgcmVzdWx0LgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNwZWNpZnkgYW55IGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSB5b3UgYXJlIGJ1aWxkaW5nIGluIHlvdXIgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFsdWUsIGluIHRlcm1zIG9mIG90aGVyIHJlY2lwZXMgdGhhdCBzYXRpc2Z5IHRob3NlCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gb2Z0ZW4gZmluZCBidWlsZC10aW1lIG9yIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgZGVzY3JpYmVkIGluIHRoZSBzb2Z0d2FyZSdzIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBwcm92aWRlcyBjb25maWd1cmF0aW9uIGl0ZW1zIG9mIG5vdGUgYmFzZWQKKyAgICAgICAgICAgICAgICBvbiBob3cgeW91ciBzb2Z0d2FyZSBpcyBidWlsdDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkF1dG90b29sczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBzb3VyY2UgZmlsZXMgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlLmFjPC9maWxlbmFtZT4gZmlsZSwgdGhlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyBidWlsdCB1c2luZyBBdXRvdG9vbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3UganVzdCBuZWVkIHRvIHdvcnJ5IGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB1c2luZyBBdXRvdG9vbHMsIHlvdXIgcmVjaXBlIG5lZWRzIHRvIGluaGVyaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIHlvdXIgcmVjaXBlIGRvZXMgbm90IGhhdmUgdG8gY29udGFpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtaWdodCBzdGlsbCB3YW50IHRvIG1ha2Ugc29tZSBhZGp1c3RtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBhc3MgYW55IG5lZWRlZCBjb25maWd1cmUgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DTWFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBzb3VyY2UgZmlsZXMgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q01ha2VMaXN0cy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB0aGVuIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIGJ1aWx0IHVzaW5nIENNYWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IGp1c3QgbmVlZCB0byB3b3JyeSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IHVzZSBDTWFrZSwgeW91ciByZWNpcGUgbmVlZHMgdG8gaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1jbWFrZSc+PGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIHlvdXIgcmVjaXBlIGRvZXMgbm90IGhhdmUgdG8gY29udGFpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbWFrZSBzb21lIGFkanVzdG1lbnRzIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNNQUtFJz48ZmlsZW5hbWU+RVhUUkFfT0VDTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHBhc3MgYW55IG5lZWRlZCBjb25maWd1cmUgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PdGhlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBzb3VyY2UgZmlsZXMgZG8gbm90IGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZS5hYzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q01ha2VMaXN0cy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB0aGVuIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIGJ1aWx0IHVzaW5nIHNvbWUgbWV0aG9kIG90aGVyIHRoYW4gQXV0b3Rvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICBvciBDTWFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBub3JtYWxseSBuZWVkIHRvIHByb3ZpZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4geW91ciByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcywgb2YgY291cnNlLCB0aGVyZSBpcyBub3RoaW5nIHRvIGNvbmZpZ3VyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkV2ZW4gaWYgeW91ciBzb2Z0d2FyZSBpcyBub3QgYmVpbmcgYnVpbHQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIEF1dG90b29scyBvciBDTWFrZSwgeW91IHN0aWxsIG1pZ2h0IG5vdCBuZWVkIHRvIGRlYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYW55IGNvbmZpZ3VyYXRpb24gaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGNvbmZpZ3VyYXRpb24gaXMgZXZlbiBhIHJlcXVpcmVkIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgbmVlZCB0byBtb2RpZnkgYSBNYWtlZmlsZSBvciBzb21lIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgdGhlIGJ1aWxkIHRvIHNwZWNpZnkgbmVjZXNzYXJ5IGJ1aWxkIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBPciwgcGVyaGFwcyB5b3UgbWlnaHQgbmVlZCB0byBydW4gYSBwcm92aWRlZCwgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0IHdpdGggdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIHRoZSBjYXNlIGludm9sdmluZyBhIGN1c3RvbSBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCwgeW91IHdvdWxkIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlIC0taGVscDwvZmlsZW5hbWU+IGFuZCBsb29rIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wdGlvbnMgeW91IG5lZWQgdG8gc2V0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIGNvbmZpZ3VyYXRpb24gc3VjY2VlZHMsIGl0IGlzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvCisgICAgICAgICAgICAgICAgbG9vayBhdCB0aGUgPGZpbGVuYW1lPmxvZy5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgICAgICAgZW5zdXJlIHRoYXQgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgaGF2ZSBiZWVuIGVuYWJsZWQgYW5kIG5vCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBuZWVkIHRvIGJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgcmVwb3J0cyB0aGF0IGl0IGZvdW5kCisgICAgICAgICAgICAgICAgc29tZXRoaW5nIG5vdCBtZW50aW9uZWQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiwgb3IKKyAgICAgICAgICAgICAgICB0aGF0IGl0IGRpZCBub3QgZmluZCBzb21ldGhpbmcgdGhhdCBpdCBuZWVkZWQgZm9yIHNvbWUKKyAgICAgICAgICAgICAgICBkZXNpcmVkIG9wdGlvbmFsIGZ1bmN0aW9uYWxpdHksIHRoZW4geW91IHdvdWxkIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgdGhvc2UgdG8gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBMb29raW5nIGF0IHRoZSBsb2cgbWlnaHQgYWxzbyByZXZlYWwgaXRlbXMgYmVpbmcgY2hlY2tlZCBmb3IsCisgICAgICAgICAgICAgICAgZW5hYmxlZCwgb3IgYm90aCB0aGF0IHlvdSBkbyBub3Qgd2FudCwgb3IgaXRlbXMgbm90IGJlaW5nIGZvdW5kCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiwgaW4gd2hpY2ggY2FzZQorICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBuZWVkIHRvIGxvb2sgYXQgcGFzc2luZyBleHRyYSBvcHRpb25zIHRvIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgYXMgbmVlZGVkLgorICAgICAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gY29uZmlndXJlIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgc29mdHdhcmUgeW91IGFyZSBidWlsZGluZywgeW91IGNhbiBjb25zdWx0IHRoZSBvdXRwdXQgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQgd2l0aGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U308L2ZpbGVuYW1lPiBvciBjb25zdWx0IHRoZSBzb2Z0d2FyZSdzIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNvbXBpbGF0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db21waWxhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyBhIGJ1aWxkLCB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrCisgICAgICAgICAgICAgICAgaGFwcGVucyBhZnRlciBzb3VyY2UgaXMgZmV0Y2hlZCwgdW5wYWNrZWQsIGFuZCBjb25maWd1cmVkLgorICAgICAgICAgICAgICAgIElmIHRoZSByZWNpcGUgcGFzc2VzIHRocm91Z2ggPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgbm90aGluZyBuZWVkcyB0byBiZSBkb25lLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGUgY29tcGlsZSBzdGVwIGZhaWxzLCB5b3UgbmVlZCB0byBkaWFnbm9zZSB0aGUKKyAgICAgICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgY29tbW9uIGlzc3VlcyB0aGF0IGNhdXNlIGZhaWx1cmVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFyYWxsZWwgYnVpbGQgZmFpbHVyZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIGZhaWx1cmVzIG1hbmlmZXN0IHRoZW1zZWx2ZXMgYXMgaW50ZXJtaXR0ZW50CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsIG9yIGVycm9ycyByZXBvcnRpbmcgdGhhdCBhIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBjcmVhdGVkIGJ5IHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgY291bGQgbm90IGJlIGZvdW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGZhaWx1cmUgY2FuIG9jY3VyIGV2ZW4gaWYsIHVwb24gaW5zcGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBkb2VzIGV4aXN0IGFmdGVyIHRoZSBidWlsZCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCwgYmVjYXVzZSB0aGF0IHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgaGFwcGVuZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSB3cm9uZyBvcmRlci48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBmaXggdGhlIHByb2JsZW0sIHlvdSBuZWVkIHRvIGVpdGhlciBzYXRpc2Z5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWlzc2luZyBkZXBlbmRlbmN5IGluIHRoZSBNYWtlZmlsZSBvciB3aGF0ZXZlcgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IHByb2R1Y2VkIHRoZSBNYWtlZmlsZSwgb3IgKGFzIGEgd29ya2Fyb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gYW4gZW1wdHkgc3RyaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQVJBTExFTF9NQUtFID0gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcGFyYWxsZWwgTWFrZWZpbGUgaXNzdWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbXByb3BlciBob3N0IHBhdGggdXNhZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmFpbHVyZSBhcHBsaWVzIHRvIHJlY2lwZXMgYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBvbmx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZhaWx1cmUgb2NjdXJzIHdoZW4gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgdXNlcworICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm9wZXIgaGVhZGVycywgbGlicmFyaWVzLCBvciBvdGhlciBmaWxlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBzeXN0ZW0gd2hlbiBjcm9zcy1jb21waWxpbmcgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBmaXggdGhlIHByb2JsZW0sIGV4YW1pbmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9nLmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiBmaWxlIHRvIGlkZW50aWZ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaG9zdCBwYXRocyBiZWluZyB1c2VkIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWI8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIGFkZCBjb25maWd1cmUgb3B0aW9ucywgYXBwbHkgYSBwYXRjaCwgb3IgZG8gYm90aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZhaWx1cmUgdG8gZmluZCByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzL2hlYWRlcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGEgYnVpbGQtdGltZSBkZXBlbmRlbmN5IGlzIG1pc3NpbmcgYmVjYXVzZSBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIGRlY2xhcmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBleGlzdHMgYnV0IHRoZSBwYXRoIHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIHRvIGZpbmQgdGhlIGZpbGUgaXMgaW5jb3JyZWN0IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzdGVwIGRpZCBub3QgZGV0ZWN0IGl0LCB0aGUgY29tcGlsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgY291bGQgZmFpbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBlaXRoZXIgb2YgdGhlc2UgZmFpbHVyZXMsIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBub3RlcyB0aGF0IGZpbGVzIGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZXNlIGNhc2VzLCB5b3UgbmVlZCB0byBnbyBiYWNrIGFuZCBhZGQgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB0byB0aGUgY29uZmlndXJlIHNjcmlwdCBhcyB3ZWxsIGFzIHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYWRkaXRpb25hbCBidWlsZC10aW1lIGRlcGVuZGVuY2llcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5PY2Nhc2lvbmFsbHksIGl0IGlzIG5lY2Vzc2FyeSB0byBhcHBseSBhIHBhdGNoCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgc291cmNlIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBwYXRocyBhcmUgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHNwZWNpZnkgcGF0aHMgdG8gZmluZCBmaWxlcyBzdGFnZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHN5c3Jvb3QgZnJvbSBvdGhlciByZWNpcGVzLCB1c2UgdGhlIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFHSU5HX0JJTkRJUjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfSU5DRElSPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19EQVRBRElSPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCis8IS0tCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUQUdJTkdfQklORElSJz48ZmlsZW5hbWU+U1RBR0lOR19CSU5ESVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUQUdJTkdfSU5DRElSJz48ZmlsZW5hbWU+U1RBR0lOR19JTkNESVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNUQUdJTkdfREFUQURJUic+PGZpbGVuYW1lPlNUQUdJTkdfREFUQURJUjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpLgorLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWluc3RhbGxpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiwgdGhlIHRhc2sgY29waWVzIHRoZQorICAgICAgICAgICAgICAgIGJ1aWx0IGZpbGVzIGFsb25nIHdpdGggdGhlaXIgaGllcmFyY2h5IHRvIGxvY2F0aW9ucyB0aGF0CisgICAgICAgICAgICAgICAgd291bGQgbWlycm9yIHRoZWlyIGxvY2F0aW9ucyBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBUaGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MgY29waWVzIGZpbGVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRvIGNyZWF0ZSB0aGUgc3RydWN0dXJlIGFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IHlvdXIgc29mdHdhcmUgaXMgYnVpbHQgYWZmZWN0cyB3aGF0IHlvdSBtdXN0IGRvIHRvIGJlCisgICAgICAgICAgICAgICAgc3VyZSB5b3VyIHNvZnR3YXJlIGlzIGluc3RhbGxlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB3aGF0IHlvdSBtdXN0IGRvIGZvciBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BdXRvdG9vbHMgYW5kIENNYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc29mdHdhcmUgeW91ciByZWNpcGUgaXMgYnVpbGRpbmcgdXNlcyBBdXRvdG9vbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIENNYWtlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdW5kZXJzdGFuZHMgaG93IHRvIGluc3RhbGwgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgZG8gbm90IGhhdmUgdG8gaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2sgYXMgcGFydCBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW5zdGFsbCBwb3J0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgY29tcGxldGVzIHdpdGggbm8gaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IHdpc2ggdG8gaW5zdGFsbCBhZGRpdGlvbmFsIGZpbGVzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBiZWluZyBpbnN0YWxsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiwgeW91IHNob3VsZCBkbyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBhIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgaW5zdGFsbCBjb21tYW5kIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJNYW51YWwiIGJ1bGxldGVkIGl0ZW0gbGF0ZXIgaW4gdGhpcyBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3RoZXIgKHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4pOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBkZWZpbmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBmdW5jdGlvbiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiBhbmQgd2lsbCBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gcGFzcyBpbiB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgeW91IHBhc3MgdGhhdCBwYXRoIGlzIGRlcGVuZGVudCBvbiBob3cgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBiZWluZyBydW4gaXMgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPkRFU1RESVI9JHtEfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZJWD0ke0R9PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5TVEFMTFJPT1Q9JHtEfTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGFuIGV4YW1wbGUgcmVjaXBlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLW1ha2VmaWxlLWJhc2VkLXBhY2thZ2UnPk1ha2VmaWxlLUJhc2VkIFBhY2thZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW51YWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRlZmluZSBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGZ1bmN0aW9uIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBtdXN0IGZpcnN0IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluc3RhbGwgLWQ8L2ZpbGVuYW1lPiB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGRpcmVjdG9yaWVzIGV4aXN0LCB5b3VyIGZ1bmN0aW9uIGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnN0YWxsPC9maWxlbmFtZT4gdG8gbWFudWFsbHkgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHNvZnR3YXJlIGludG8gdGhlIGRpcmVjdG9yaWVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5zdGFsbDwvZmlsZW5hbWU+IGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzL21hbnVhbC9odG1sX25vZGUvaW5zdGFsbC1pbnZvY2F0aW9uLmh0bWwnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0aGUgc2NlbmFyaW9zIHRoYXQgZG8gbm90IHVzZSBBdXRvdG9vbHMgb3IKKyAgICAgICAgICAgICAgICBDTWFrZSwgeW91IG5lZWQgdG8gdHJhY2sgdGhlIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgIGFuZCBkaWFnbm9zZSBhbmQgZml4IGFueSBpc3N1ZXMgdW50aWwgZXZlcnl0aGluZyBpbnN0YWxscworICAgICAgICAgICAgICAgIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBsb29rIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7RH08L2ZpbGVuYW1lPiwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS9pbWFnZTwvZmlsZW5hbWU+LCB0byBiZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICBmaWxlcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGNvcnJlY3RseS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLCB5b3UgbWlnaHQgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5IHNvbWUgb2YgdGhlIGluc3RhbGxlZCBmaWxlcyB0byBzdWl0IHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbmVlZCB0byByZXBsYWNlIGhhcmQtY29kZWQgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIGFuIGluaXRzY3JpcHQgd2l0aCB2YWx1ZXMgb2YgdmFyaWFibGVzIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLCBzdWNoIGFzIHJlcGxhY2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluLzwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2JpbmRpcn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBwZXJmb3JtIHN1Y2ggbW9kaWZpY2F0aW9ucyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4sIGJlIHN1cmUgdG8gbW9kaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gZmlsZSBhZnRlciBjb3B5aW5nIHJhdGhlciB0aGFuIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29weWluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmeWluZyBhZnRlciBjb3B5aW5nIGVuc3VyZXMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gcmUtZXhlY3V0ZSA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGlmCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lX3J1bm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+LCB3aGljaCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBkaXJlY3RseSBvciBjYW4gYmUgcnVuIGluZGlyZWN0bHkgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWNtYWtlJz48ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLCBydW5zIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMsIGEgTWFrZWZpbGUgY2FuIGhhdmUgbWlzc2luZyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gdGFyZ2V0cyB0aGF0IGNhbiByZXN1bHQgaW4gcmFjZSBjb25kaXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGV4cGVyaWVuY2UgaW50ZXJtaXR0ZW50IGZhaWx1cmVzIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiwgeW91IG1pZ2h0IGJlIGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmsgYXJvdW5kIHRoZW0gYnkgZGlzYWJsaW5nIHBhcmFsbGVsIE1ha2VmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxscyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQVJBTExFTF9NQUtFSU5TVCA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWVuYWJsaW5nLXN5c3RlbS1zZXJ2aWNlcyc+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgU3lzdGVtIFNlcnZpY2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNlcnZpY2UsIHdoaWNoIGlzIGEgcHJvY2VzcyB0aGF0CisgICAgICAgICAgICAgICAgdXN1YWxseSBzdGFydHMgb24gYm9vdCBhbmQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCwgdGhlbgorICAgICAgICAgICAgICAgIHlvdSBtdXN0IGluY2x1ZGUgc29tZSBhZGRpdGlvbmFsIGRlZmluaXRpb25zIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGFkZGluZyBzZXJ2aWNlcyBhbmQgdGhlIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICBzY3JpcHQgb3IgdGhlIHNlcnZpY2UgZmlsZSBpdHNlbGYgaXMgbm90IGluc3RhbGxlZCwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBwcm92aWRlIGZvciB0aGF0IGluc3RhbGxhdGlvbiBpbiB5b3VyIHJlY2lwZSB1c2luZyBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGxfYXBwZW5kPC9maWxlbmFtZT4gZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgSWYgeW91ciByZWNpcGUgYWxyZWFkeSBoYXMgYSA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnVuY3Rpb24sIHVwZGF0ZSB0aGUgZnVuY3Rpb24gbmVhciBpdHMgZW5kIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgYWRkaW5nIGFuIGFkZGl0aW9uYWwgPGZpbGVuYW1lPmRvX2luc3RhbGxfYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIHRoZSBpbnN0YWxsYXRpb24gZm9yIHlvdXIgc2VydmljZXMsIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgdG8gYWNjb21wbGlzaCB3aGF0IGlzIG5vcm1hbGx5IGRvbmUgYnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIG1ha2Ugc3VyZSB5b3VyIGluc3RhbGxhdGlvbiBhcnJhbmdlcyB0aGUgb3V0cHV0CisgICAgICAgICAgICAgICAgc2ltaWxhciB0byBob3cgaXQgaXMgYXJyYW5nZWQgb24gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHN0YXJ0aW5nCisgICAgICAgICAgICAgICAgc2VydmljZXMgdHdvIGRpZmZlcmVudCB3YXlzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzVmluaXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c1Zpbml0IGlzIGEgc3lzdGVtIGFuZCBzZXJ2aWNlIG1hbmFnZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlcyB0aGUgaW5pdCBzeXN0ZW0gdXNlZCB0byBjb250cm9sIHRoZSB2ZXJ5IGJhc2ljCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgb2YgeW91ciBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaW5pdCBwcm9ncmFtIGlzIHRoZSBmaXJzdCBwcm9ncmFtCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgd2hlbiB0aGUgc3lzdGVtIGJvb3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgSW5pdCB0aGVuIGNvbnRyb2xzIHRoZSBzdGFydHVwLCBydW5uaW5nIGFuZCBzaHV0ZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYWxsIG90aGVyIHByb2dyYW1zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvIGVuYWJsZSBhIHNlcnZpY2UgdXNpbmcgU3lzVmluaXQsIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtdXBkYXRlLXJjLmQnPjxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIGhlbHBzIGZhY2lsaXRhdGUgc2FmZWx5IGluc3RhbGxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG9uIHRoZSB0YXJnZXQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHdpbGwgbmVlZCB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFNDUklQVF9QQUNLQUdFUyc+PGZpbGVuYW1lPklOSVRTQ1JJUFRfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOSVRTQ1JJUFRfTkFNRSc+PGZpbGVuYW1lPklOSVRTQ1JJUFRfTkFNRTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTklUU0NSSVBUX1BBUkFNUyc+PGZpbGVuYW1lPklOSVRTQ1JJUFRfUEFSQU1TPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHdpdGhpbiB5b3VyIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zeXN0ZW1kOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gTWFuYWdlbWVudCBEYWVtb24gKHN5c3RlbWQpIHdhcyBkZXNpZ25lZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSBTeXNWaW5pdCBhbmQgdG8gcHJvdmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5oYW5jZWQgbWFuYWdlbWVudCBvZiBzZXJ2aWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN5c3RlbWQsIHNlZSB0aGUgc3lzdGVtZAorICAgICAgICAgICAgICAgICAgICAgICAgaG9tZXBhZ2UgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kLyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBlbmFibGUgYSBzZXJ2aWNlIHVzaW5nIHN5c3RlbWQsIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPnN5c3RlbWQuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1wYWNrYWdpbmcnPgorICAgICAgICAgICAgPHRpdGxlPlBhY2thZ2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFN1Y2Nlc3NmdWwgcGFja2FnaW5nIGlzIGEgY29tYmluYXRpb24gb2YgYXV0b21hdGVkIHByb2Nlc3NlcworICAgICAgICAgICAgICAgIHBlcmZvcm1lZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmQgc29tZQorICAgICAgICAgICAgICAgIHNwZWNpZmljIHN0ZXBzIHlvdSBuZWVkIHRvIHRha2UuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGUgcHJvY2VzczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwbGl0dGluZyBGaWxlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzayBzcGxpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBwcm9kdWNlZCBieSB0aGUgcmVjaXBlIGludG8gbG9naWNhbCBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgRXZlbiBzb2Z0d2FyZSB0aGF0IHByb2R1Y2VzIGEgc2luZ2xlIGJpbmFyeSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgaGF2ZSBkZWJ1ZyBzeW1ib2xzLCBkb2N1bWVudGF0aW9uLCBhbmQgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWwgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBzcGxpdCBvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiB0YXNrIGVuc3VyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZmlsZXMgYXJlIHNwbGl0IHVwIGFuZCBwYWNrYWdlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW5uaW5nIFFBIENoZWNrczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhZGRzIGEgc3RlcCB0bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIHNvIHRoYXQgb3V0cHV0IHF1YWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VyYW5jZSBjaGVja3MgYXJlIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgcGVyZm9ybXMgYSByYW5nZSBvZiBjaGVja3MgdG8gYmUgc3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkJ3Mgb3V0cHV0IGlzIGZyZWUgb2YgY29tbW9uIHByb2JsZW1zIHRoYXQgc2hvdworICAgICAgICAgICAgICAgICAgICAgICAgdXAgZHVyaW5nIHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgY2hlY2tzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkhhbmQtQ2hlY2tpbmcgWW91ciBQYWNrYWdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGJ1aWxkIHlvdXIgc29mdHdhcmUsIHlvdSBuZWVkIHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcGFja2FnZXMgYXJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBFeGFtaW5lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0vcGFja2FnZXMtc3BsaXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBtYWtlIHN1cmUgZmlsZXMgYXJlIHdoZXJlIHlvdSBleHBlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW0gdG8gYmUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZGlzY292ZXIgcHJvYmxlbXMsIHlvdSBjYW4gc2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbChfYXBwZW5kKTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBzcGxpdCBhbiBhcHBsaWNhdGlvbiBpbnRvIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3BsaXR0aW5nLWFuLWFwcGxpY2F0aW9uLWludG8tbXVsdGlwbGUtcGFja2FnZXMnPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsaW5nIGEgUG9zdC1JbnN0YWxsYXRpb24gU2NyaXB0PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBzaG93aW5nIGhvdyB0byBpbnN0YWxsIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtcG9zdC1pbnN0YWxsYXRpb24tc2NyaXB0cyc+UG9zdC1JbnN0YWxsYXRpb24gU2NyaXB0czwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFya2luZyBQYWNrYWdlIEFyY2hpdGVjdHVyZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHdoYXQgeW91ciByZWNpcGUgaXMgYnVpbGRpbmcgYW5kIGhvdyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgaXMgY29uZmlndXJlZCwgaXQgbWlnaHQgYmUgaW1wb3J0YW50IHRvIG1hcmsgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBwcm9kdWNlZCBhcyBiZWluZyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUsIG9yIHRvIG1hcmsgdGhlbSBhcyBub3QgYmVpbmcgc3BlY2lmaWMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciBtYWNoaW5lIG9yIGFyY2hpdGVjdHVyZSBhdCBhbGwuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBwYWNrYWdlcyBwcm9kdWNlZCBmb3IgdGhlIHRhcmdldCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlZCBhcyBiZWluZyBzcGVjaWZpYyB0byB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUgYmVjYXVzZSB0aGF0IGlzIHVzdWFsbHkgdGhlIGRlc2lyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZSByZWNpcGUgY29uZmlndXJlcyB0aGUgc29mdHdhcmUgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHNwZWNpZmljIHRvIHRoZSB0YXJnZXQgbWFjaGluZSAoZS5nLiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIHBhc3NlZCBpbnRvIHRoZSBjb25maWd1cmUgc2NyaXB0IG9yIGEgcGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFwcGxpZWQgb25seSBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUpLCB0aGVuIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG1hcmsgdGhlIHBhY2thZ2VzIHByb2R1Y2VkIGFzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSByZWNpcGUgcHJvZHVjZXMgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZG8gbm90IGNvbnRhaW4gYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBvciBhcmNoaXRlY3R1cmUgYXQgYWxsIChlLmcuIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2ltcGx5IHBhY2thZ2Ugc2NyaXB0IGZpbGVzIG9yIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzKSwgeW91IHNob3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hbGxhcmNoJz48ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRvIGRvIHRoaXMgZm9yIHlvdSBieSBhZGRpbmcgdGhpcyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYWxsYXJjaAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJpbmcgdGhhdCB0aGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgaXMgY29ycmVjdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNyaXRpY2FsIHdoaWxlIHlvdSBhcmUgZG9pbmcgdGhlIGZpcnN0IGZldyBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgaW1wb3J0YW50IGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB5b3VyIHJlY2lwZSByZWJ1aWxkcyAob3IgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYnVpbGQpIGFwcHJvcHJpYXRlbHkgaW4gcmVzcG9uc2UgdG8gY2hhbmdlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgYW5kIHRvIGVuc3VyZSB0aGF0IHlvdSBnZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBwYWNrYWdlcyBpbnN0YWxsZWQgb24gdGhlIHRhcmdldCBtYWNoaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhcmx5IGlmIHlvdSBydW4gc2VwYXJhdGUgYnVpbGRzIGZvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIG9uZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3Blcmx5LXZlcnNpb25pbmctcHJlLXJlbGVhc2UtcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+UHJvcGVybHkgVmVyc2lvbmluZyBQcmUtUmVsZWFzZSBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIHRoZSBuYW1lIG9mIGEgcmVjaXBlIGNhbiBsZWFkIHRvIHZlcnNpb25pbmcKKyAgICAgICAgICAgICAgICBwcm9ibGVtcyB3aGVuIHRoZSByZWNpcGUgaXMgdXBncmFkZWQgdG8gYSBmaW5hbCByZWxlYXNlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aXJzc2lfMC44LjE2LXJjMS5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlIGluCisgICAgICAgICAgICAgICAgdGhlIGxpc3Qgb2YgZXhhbXBsZSByZWNpcGVzIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLXN0b3JpbmctYW5kLW5hbWluZy10aGUtcmVjaXBlJz5TdG9yaW5nIGFuZCBOYW1pbmcgdGhlIFJlY2lwZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBhdCBhIHJlbGVhc2UgY2FuZGlkYXRlIHN0YWdlIChpLmUuCisgICAgICAgICAgICAgICAgInJjMSIpLgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIHJlY2lwZSBpcyByZWxlYXNlZCwgdGhlIHJlY2lwZSBmaWxlbmFtZSBiZWNvbWVzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmlyc3NpXzAuOC4xNi5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIGNoYW5nZSBmcm9tIDxmaWxlbmFtZT4wLjguMTYtcmMxPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+MC44LjE2PC9maWxlbmFtZT4gaXMgc2VlbiBhcyBhIGRlY3JlYXNlIGJ5IHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBhbmQgcGFja2FnZSBtYW5hZ2Vycywgc28gdGhlIHJlc3VsdGluZyBwYWNrYWdlcworICAgICAgICAgICAgICAgIHdpbGwgbm90IGNvcnJlY3RseSB0cmlnZ2VyIGFuIHVwZ3JhZGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGVuc3VyZSB0aGUgdmVyc2lvbnMgY29tcGFyZSBwcm9wZXJseSwgdGhlCisgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgY29udmVudGlvbiBpcyB0byBzZXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHJlY2lwZSB0bworICAgICAgICAgICAgICAgICI8cmVwbGFjZWFibGU+cHJldmlvdXNfdmVyc2lvbjwvcmVwbGFjZWFibGU+KzxyZXBsYWNlYWJsZT5jdXJyZW50X3ZlcnNpb248L3JlcGxhY2VhYmxlPiIuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYW4gYWRkaXRpb25hbCB2YXJpYWJsZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgIGN1cnJlbnQgdmVyc2lvbiBlbHNld2hlcmUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkVBTFBWID0gIjAuOC4xNi1yYzEiCisgICAgIFBWID0gIjAuOC4xNSske1JFQUxQVn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtcG9zdC1pbnN0YWxsYXRpb24tc2NyaXB0cyc+CisgICAgICAgICAgICA8dGl0bGU+UG9zdC1JbnN0YWxsYXRpb24gU2NyaXB0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgcnVuIGltbWVkaWF0ZWx5IGFmdGVyIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICBhIHBhY2thZ2Ugb24gdGhlIHRhcmdldCBvciBkdXJpbmcgaW1hZ2UgY3JlYXRpb24gd2hlbiBhCisgICAgICAgICAgICAgICAgcGFja2FnZSBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBUbyBhZGQgYSBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQgdG8gYSBwYWNrYWdlLCBhZGQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3RfUEFDS0FHRU5BTUUoKTwvZmlsZW5hbWU+IGZ1bmN0aW9uIHRvCisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBmaWxlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGFuZCByZXBsYWNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VOQU1FPC9maWxlbmFtZT4gd2l0aCB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIGF0dGFjaCB0byB0aGUgPGZpbGVuYW1lPnBvc3RpbnN0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzY3JpcHQuCisgICAgICAgICAgICAgICAgVG8gYXBwbHkgdGhlIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdCB0byB0aGUgbWFpbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgZm9yIHRoZSByZWNpcGUsIHdoaWNoIGlzIHVzdWFsbHkgd2hhdCBpcyByZXF1aXJlZCwgc3BlY2lmeQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGluIHBsYWNlIG9mIDxmaWxlbmFtZT5QQUNLQUdFTkFNRTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHBvc3QtaW5zdGFsbGF0aW9uIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBrZ19wb3N0aW5zdF9QQUNLQUdFTkFNRSgpIHsKKyAgICAgIyBDb21tYW5kcyB0byBjYXJyeSBvdXQKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBkZWZpbmVkIGluIHRoZSBwb3N0LWluc3RhbGxhdGlvbiBmdW5jdGlvbiBpcworICAgICAgICAgICAgICAgIGNhbGxlZCB3aGVuIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgc2NyaXB0IHN1Y2NlZWRzLCB0aGUgcGFja2FnZSBpcyBtYXJrZWQgYXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIElmIHRoZSBzY3JpcHQgZmFpbHMsIHRoZSBwYWNrYWdlIGlzIG1hcmtlZCBhcyB1bnBhY2tlZCBhbmQKKyAgICAgICAgICAgICAgICB0aGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHdoZW4gdGhlIGltYWdlIGJvb3RzIGFnYWluLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IGZvciB0aGUgZXhlY3V0aW9uIG9mIGEKKyAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQgdG8gYmUgZGVsYXllZCB1bnRpbCB0aGUgZmlyc3QgYm9vdC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNjcmlwdCBtaWdodCBuZWVkIHRvIGJlIGV4ZWN1dGVkIG9uIHRoZQorICAgICAgICAgICAgICAgIGRldmljZSBpdHNlbGYuCisgICAgICAgICAgICAgICAgVG8gZGVsYXkgc2NyaXB0IGV4ZWN1dGlvbiB1bnRpbCBib290IHRpbWUsIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgc3RydWN0dXJlIGluIHRoZSBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwa2dfcG9zdGluc3RfUEFDS0FHRU5BTUUoKSB7CisgICAgIGlmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICAgICAgICMgQWN0aW9ucyB0byBjYXJyeSBvdXQgb24gdGhlIGRldmljZSBnbyBoZXJlCisgICAgIGVsc2UKKyAgICAgICAgICBleGl0IDEKKyAgICAgZmkKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZGVsYXlzIGV4ZWN1dGlvbiB1bnRpbCB0aGUgaW1hZ2UgYm9vdHMKKyAgICAgICAgICAgICAgICBhZ2FpbiBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZmlsZW5hbWU+RDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW1hZ2Ugd2hlbgorICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBhdCBidWlsZCB0aW1lIGJ1dCBpcyB1bnNldAorICAgICAgICAgICAgICAgIHdoZW4gZXhlY3V0ZWQgb24gdGhlIGZpcnN0IGJvb3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEVxdWl2YWxlbnQgc3VwcG9ydCBmb3IgcHJlLWluc3RhbGwsIHByZS11bmluc3RhbGwsIGFuZAorICAgICAgICAgICAgICAgIHBvc3QtdW5pbnN0YWxsIHNjcmlwdHMgZXhpc3QgYnkgd2F5IG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RybTwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgVGhlc2Ugc2NyaXBzIHdvcmsgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgZG9lcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGV5CisgICAgICAgICAgICAgICAgcnVuIGF0IGRpZmZlcmVudCB0aW1lcy4KKyAgICAgICAgICAgICAgICBBbHNvLCBiZWNhdXNlIG9mIHdoZW4gdGhleSBydW4sIHRoZXkgYXJlIG5vdCBhcHBsaWNhYmxlIHRvCisgICAgICAgICAgICAgICAgYmVpbmcgcnVuIGF0IGltYWdlIGNyZWF0aW9uIHRpbWUgbGlrZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXRlc3RpbmcnPgorICAgICAgICAgICAgPHRpdGxlPlRlc3Rpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmluYWwgc3RlcCBmb3IgY29tcGxldGluZyB5b3VyIHJlY2lwZSBpcyB0byBiZSBzdXJlIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgc29mdHdhcmUgeW91IGJ1aWx0IHJ1bnMgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggcnVudGltZSB0ZXN0aW5nLCBhZGQgdGhlIGJ1aWxkJ3Mgb3V0cHV0CisgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8geW91ciBpbWFnZSBhbmQgdGVzdCB0aGVtIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3VzdG9taXplIHlvdXIgaW1hZ2UgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgcGFja2FnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZSc+Q3VzdG9taXppbmcgSW1hZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtdGVzdGluZy1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoZWxwIHN1bW1hcml6ZSBob3cgdG8gd3JpdGUgYSByZWNpcGUsIHRoaXMgc2VjdGlvbiBwcm92aWRlcworICAgICAgICAgICAgICAgIHNvbWUgZXhhbXBsZXMgZ2l2ZW4gdmFyaW91cyBzY2VuYXJpb3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlY2lwZXMgdGhhdCB1c2UgbG9jYWwgZmlsZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzaW5nIGFuIEF1dG90b29sZWQgcGFja2FnZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNpbmcgYSBNYWtlZmlsZS1iYXNlZCBwYWNrYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TcGxpdHRpbmcgYW4gYXBwbGljYXRpb24gaW50byBtdWx0aXBsZSBwYWNrYWdlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkaW5nIGJpbmFyaWVzIHRvIGFuIGltYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXNpbmdsZS1jLWZpbGUtcGFja2FnZS1oZWxsby13b3JsZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNpbmdsZSAuYyBGaWxlIFBhY2thZ2UgKEhlbGxvIFdvcmxkISk8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIGFuIGFwcGxpY2F0aW9uIGZyb20gYSBzaW5nbGUgZmlsZSB0aGF0IGlzIHN0b3JlZAorICAgICAgICAgICAgICAgICAgICBsb2NhbGx5IChlLmcuIHVuZGVyIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+KSByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSB0aGF0IGhhcyB0aGUgZmlsZSBsaXN0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+U1JDX1VSSTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IG5lZWQgdG8gbWFudWFsbHkgd3JpdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPlM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlZmluZXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlIC0gdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgZm9yIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVU1NQVJZID0gIlNpbXBsZSBoZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorICAgICBTRUNUSU9OID0gImV4YW1wbGVzIgorICAgICBMSUNFTlNFID0gIk1JVCIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisKKyAgICAgU1JDX1VSSSA9ICJmaWxlOi8vaGVsbG93b3JsZC5jIgorCisgICAgIFMgPSAiJHtXT1JLRElSfSIKKworICAgICBkb19jb21waWxlKCkgeworICAgICAJJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKKyAgICAgfQorCisgICAgIGRvX2luc3RhbGwoKSB7CisgICAgIAlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICAgCWluc3RhbGwgLW0gMDc1NSBoZWxsb3dvcmxkICR7RH0ke2JpbmRpcn0KKyAgICAgfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+aGVsbG93b3JsZDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGVsbG93b3JsZC1kYmc8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsb3dvcmxkLWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIGFyZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjdXN0b21pemUgdGhlIHBhY2thZ2luZyBwcm9jZXNzLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzcGxpdHRpbmctYW4tYXBwbGljYXRpb24taW50by1tdWx0aXBsZS1wYWNrYWdlcyc+U3BsaXR0aW5nIGFuIEFwcGxpY2F0aW9uIGludG8gTXVsdGlwbGUgUGFja2FnZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtYXV0b3Rvb2xlZC1wYWNrYWdlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QXV0b3Rvb2xlZCBQYWNrYWdlPC90aXRsZT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25zIHRoYXQgdXNlIEF1dG90b29scyBzdWNoIGFzIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiByZXF1aXJlIGEgcmVjaXBlIHRoYXQgaGFzIGEgc291cmNlIGFyY2hpdmUgbGlzdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+U1JDX1VSSTwvdWxpbms+PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIGFsc28gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgc3RlcHMKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkIHRvIGJ1aWxkIGFuIEF1dG90b29sLWJhc2VkIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBidWlsZCBpcyBhdXRvbWF0aWNhbGx5IHBhY2thZ2VkLgorICAgICAgICAgICAgICAgICAgICBBbmQsIGlmIHRoZSBhcHBsaWNhdGlvbiB1c2VzIE5MUyBmb3IgbG9jYWxpemF0aW9uLCBwYWNrYWdlcyB3aXRoIGxvY2FsIGluZm9ybWF0aW9uIGFyZQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgKG9uZSBwYWNrYWdlIHBlciBsYW5ndWFnZSkuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBvbmUgZXhhbXBsZTogKDxmaWxlbmFtZT5oZWxsb18yLjMuYmI8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVU1NQVJZID0gIkdOVSBIZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorICAgICBTRUNUSU9OID0gImV4YW1wbGVzIgorICAgICBMSUNFTlNFID0gIkdQTHYyKyIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKKyAgICAgU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2hlbGxvL2hlbGxvLSR7UFZ9LnRhci5neiIKKworICAgICBpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ19GSUxFU19DSEtTVU0nPkxJQ19GSUxFU19DSEtTVU08L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gdHJhY2sgc291cmNlIGxpY2Vuc2UgY2hhbmdlcyBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSc+VHJhY2tpbmcgTGljZW5zZSBDaGFuZ2VzPC91bGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcXVpY2tseSBjcmVhdGUgQXV0b3Rvb2wtYmFzZWQgcmVjaXBlcyBpbiBhIG1hbm5lciBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtbWFrZWZpbGUtYmFzZWQtcGFja2FnZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1ha2VmaWxlLUJhc2VkIFBhY2thZ2U8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSBHTlUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBhbHNvIHJlcXVpcmUgYSByZWNpcGUgdGhhdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBhcmNoaXZlIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gYWRkIGEgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiBzdGVwIHNpbmNlIGJ5IGRlZmF1bHQgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICBzdGFydHMgdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY29tbWFuZCB0byBjb21waWxlIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgYWRkaXRpb25hbCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IG9wdGlvbnMsIHlvdSBzaG91bGQgc3RvcmUgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRU1BS0UnPkVYVFJBX09FTUFLRTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcGFzc2VzIHRoZXNlIG9wdGlvbnMgaW50byB0aGUgR05VIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gaW52b2NhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGEgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGlzIHN0aWxsIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIEJpdEJha2UgcnVucyBhbiBlbXB0eSA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2sgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTb21lIGFwcGxpY2F0aW9ucyBtaWdodCByZXF1aXJlIGV4dHJhIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBhcHBsaWNhdGlvbiBtaWdodCBuZWVkIGFuIGFkZGl0aW9uYWwgaGVhZGVyIHBhdGguCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGFkZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DRkxBR1MnPkNGTEFHUzwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENGTEFHU19wcmVwZW5kID0gIi1JICR7U30vaW5jbHVkZSAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIDxmaWxlbmFtZT5tdGQtdXRpbHM8L2ZpbGVuYW1lPiBpcyBhIG1ha2VmaWxlLWJhc2VkIHBhY2thZ2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgbWVtb3J5IHRlY2hub2xvZ3kgZGV2aWNlcyIKKyAgICAgU0VDVElPTiA9ICJiYXNlIgorICAgICBERVBFTkRTID0gInpsaWIgbHpvIGUyZnNwcm9ncyB1dGlsLWxpbnV4IgorICAgICBIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLyIKKyAgICAgTElDRU5TRSA9ICJHUEx2MisiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9jb21tb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1iYTA1YjA3OTEyYTQ0ZWEyYmY4MWNlNDA5MzgwMDQ5YyIKKworICAgICAjIFVzZSB0aGUgbGF0ZXN0IHZlcnNpb24gYXQgMjYgT2N0LCAyMDEzCisgICAgIFNSQ1JFViA9ICI5ZjEwNzEzMmE2YTA3M2NjZTM3NDM0Y2E5Y2RhNjkxN2RkOGQ4NjZiIgorICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQgXAorICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBcCisgICAgICIKKworICAgICBQViA9ICIxLjUuMStnaXQke1NSQ1BWfSIKKworICAgICBTID0gIiR7V09SS0RJUn0vZ2l0LyIKKworICAgICBFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnUkFOTElCPSR7UkFOTElCfScgJ0FSPSR7QVJ9JyAnQ0ZMQUdTPSR7Q0ZMQUdTfSAtSSR7U30vaW5jbHVkZSAtRFdJVEhPVVRfWEFUVFInICdCVUlMRERJUj0ke1N9JyIKKworICAgICBkb19pbnN0YWxsICgpIHsKKyAgICAgICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorICAgICB9CisKKyAgICAgUEFDS0FHRVMgPSsgIm10ZC11dGlscy1qZmZzMiBtdGQtdXRpbHMtdWJpZnMgbXRkLXV0aWxzLW1pc2MiCisKKyAgICAgRklMRVNfbXRkLXV0aWxzLWpmZnMyID0gIiR7c2JpbmRpcn0vbWtmcy5qZmZzMiAke3NiaW5kaXJ9L2pmZnMyZHVtcCAke3NiaW5kaXJ9L2pmZnMycmVhZGVyICR7c2JpbmRpcn0vc3VtdG9vbCIKKyAgICAgRklMRVNfbXRkLXV0aWxzLXViaWZzID0gIiR7c2JpbmRpcn0vbWtmcy51YmlmcyAke3NiaW5kaXJ9L3ViaSoiCisgICAgIEZJTEVTX210ZC11dGlscy1taXNjID0gIiR7c2JpbmRpcn0vbmZ0bCogJHtzYmluZGlyfS9mdGwqICR7c2JpbmRpcn0vcmZkKiAke3NiaW5kaXJ9L2RvYyogJHtzYmluZGlyfS9zZXJ2ZV9pbWFnZSAke3NiaW5kaXJ9L3JlY3ZfaW1hZ2UiCisKKyAgICAgUEFSQUxMRUxfTUFLRSA9ICIiCisKKyAgICAgQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzcGxpdHRpbmctYW4tYXBwbGljYXRpb24taW50by1tdWx0aXBsZS1wYWNrYWdlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC91bGluaz48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFUyc+RklMRVM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIHNwbGl0IGFuIGFwcGxpY2F0aW9uIGludG8gbXVsdGlwbGUgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyB0aGUgPGZpbGVuYW1lPmxpYnhwbTwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyByZWNpcGUgZ2VuZXJhdGVzIGEgc2luZ2xlIHBhY2thZ2UgdGhhdCBjb250YWlucyB0aGUgbGlicmFyeSBhbG9uZworICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZmV3IGJpbmFyaWVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG1vZGlmeSB0aGUgcmVjaXBlIHRvIHNwbGl0IHRoZSBiaW5hcmllcyBpbnRvIHNlcGFyYXRlIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCisgICAgIFNVTU1BUlkgPSAiWHBtOiBYIFBpeG1hcCBleHRlbnNpb24gbGlicmFyeSIKKyAgICAgTElDRU5TRSA9ICJCU0QiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTUxZjQyNzBiMDEyZWNkNGFiMWExNjRmNWY0ZWQ2Y2Y3IgorICAgICBERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnNtIGxpYnh0IgorICAgICBQRSA9ICIxIgorCisgICAgIFhPUkdfUE4gPSAibGliWHBtIgorCisgICAgIFBBQ0tBR0VTID0rICJzeHBtIGN4cG0iCisgICAgIEZJTEVTX2N4cG0gPSAiJHtiaW5kaXJ9L2N4cG0iCisgICAgIEZJTEVTX3N4cG0gPSAiJHtiaW5kaXJ9L3N4cG0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHdlIHdhbnQgdG8gc2hpcCB0aGUgPGZpbGVuYW1lPnN4cG08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmN4cG08L2ZpbGVuYW1lPiBiaW5hcmllcyBpbiBzZXBhcmF0ZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgU2luY2UgPGZpbGVuYW1lPmJpbmRpcjwvZmlsZW5hbWU+IHdvdWxkIGJlIHBhY2thZ2VkIGludG8gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+UE48L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgYnkgZGVmYXVsdCwgd2UgcHJlcGVuZCB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc28gYWRkaXRpb25hbCBwYWNrYWdlIG5hbWVzIGFyZSBhZGRlZCB0byB0aGUgc3RhcnQgb2YgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZXN1bHRzIGluIHRoZSBleHRyYSA8ZmlsZW5hbWU+RklMRVNfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0aGVuIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gdGhhdCBkZWZpbmUgd2hpY2ggZmlsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGdvIGludG8gd2hpY2ggcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEZpbGVzIGluY2x1ZGVkIGJ5IGVhcmxpZXIgcGFja2FnZXMgYXJlIHNraXBwZWQgYnkgbGF0dGVyIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgbWFpbiA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGluY2x1ZGUgdGhlIGFib3ZlIGxpc3RlZCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdpbmctZXh0ZXJuYWxseS1wcm9kdWNlZC1iaW5hcmllcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlBhY2thZ2luZyBFeHRlcm5hbGx5IFByb2R1Y2VkIEJpbmFyaWVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMsIHlvdSBuZWVkIHRvIGFkZCBwcmUtY29tcGlsZWQgYmluYXJpZXMgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoYXQgYmluYXJpZXMgZm9yIHByb3ByaWV0YXJ5IGNvZGUKKyAgICAgICAgICAgICAgICAgICAgZXhpc3QsIHdoaWNoIGFyZSBjcmVhdGVkIGJ5IGEgcGFydGljdWxhciBkaXZpc2lvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgIGNvbXBhbnkuCisgICAgICAgICAgICAgICAgICAgIFlvdXIgcGFydCBvZiB0aGUgY29tcGFueSBuZWVkcyB0byB1c2UgdGhvc2UgYmluYXJpZXMgYXMKKyAgICAgICAgICAgICAgICAgICAgcGFydCBvZiBhbiBpbWFnZSB0aGF0IHlvdSBhcmUgYnVpbGRpbmcgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFNpbmNlIHlvdSBvbmx5IGhhdmUgdGhlIGJpbmFyaWVzIGFuZCBub3QgdGhlIHNvdXJjZSBjb2RlLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2Fubm90IHVzZSBhIHR5cGljYWwgcmVjaXBlIHRoYXQgZXhwZWN0cyB0byBmZXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIGNvbXBpbGUgaXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uZSBtZXRob2QgaXMgdG8gcGFja2FnZSB0aGUgYmluYXJpZXMgYW5kIHRoZW4gaW5zdGFsbCB0aGVtCisgICAgICAgICAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBHZW5lcmFsbHksIGl0IGlzIG5vdCBhIGdvb2QgaWRlYSB0byBwYWNrYWdlIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAgIHNpbmNlLCBhbW9uZyBvdGhlciB0aGluZ3MsIGl0IGNhbiBoaW5kZXIgdGhlIGFiaWxpdHkgdG8KKyAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWNlIGJ1aWxkcyBhbmQgY291bGQgbGVhZCB0byBjb21wYXRpYmlsaXR5IHByb2JsZW1zCisgICAgICAgICAgICAgICAgICAgIHdpdGggQUJJIGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWV0aW1lcyB5b3UgaGF2ZSBubyBjaG9pY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIGNyZWF0ZSBhIHJlY2lwZSB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWJpbi1wYWNrYWdlJz48ZmlsZW5hbWU+YmluX3BhY2thZ2U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB0byBiZSBzdXJlIHRoYXQgeW91IGFyZSB1c2luZyBkZWZhdWx0IGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBmb3IgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyAic2tpcHBpbmciIHRoZSBjb25maWd1cmUgYW5kIGNvbXBpbGUgc3RlcHMgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICBhcyBzZXRzIHRoaW5ncyB1cCB0byBncmFiIHBhY2thZ2VzIGZyb20gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIGFyZWEuCisgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoaXMgY2xhc3Mgc2V0cyA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb24gYm90aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFza3MsIHNldHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7UE59PC9maWxlbmFtZT4gdG8gIi8iIHNvIHRoYXQgaXQgcGlja3MKKyAgICAgICAgICAgICAgICAgICAgdXAgYWxsIGZpbGVzLCBhbmQgc2V0cyB1cCBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzaywgd2hpY2ggZWZmZWN0aXZlbHkgY29waWVzIGFsbCBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gdG8gPGZpbGVuYW1lPiR7RH08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW5fcGFja2FnZTwvZmlsZW5hbWU+IGNsYXNzIHdvcmtzIHdlbGwgd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMgZXh0cmFjdGVkIGludG8gPGZpbGVuYW1lPiR7U308L2ZpbGVuYW1lPiBhcmUKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBsYWlkIG91dCBpbiB0aGUgd2F5IHRoZXkgc2hvdWxkIGJlIGxhaWQgb3V0CisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIHZhcmlhYmxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBnbG9zc2FyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbid0IHVzZSB0aGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHlvdSBuZWVkIHRvIGJlIHN1cmUgeW91IGFyZSBkb2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIHJlY2lwZSB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrcyBkbyBub3RoaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKKyAgICAgZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gbWFrZSB0aGVzZSB0YXNrcyBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2Ugc3VyZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGluc3RhbGxzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5zdXJlIHRoYXQgeW91IHNldCB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+ICh1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7UE59PC9maWxlbmFtZT4pIHRvIHBvaW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIHlvdSBoYXZlIGluc3RhbGxlZCwgd2hpY2ggb2YgY291cnNlIGRlcGVuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3aGVyZSB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlbSBhbmQgd2hldGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob3NlIGZpbGVzIGFyZSBpbiBkaWZmZXJlbnQgbG9jYXRpb25zIHRoYW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUiPgorICAgICAgICA8dGl0bGU+QWRkaW5nIGEgTmV3IE1hY2hpbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWRkaW5nIGEgbmV3IG1hY2hpbmUgdG8gdGhlIFlvY3RvIFByb2plY3QgaXMgYSBzdHJhaWdodGZvcndhcmQKKyAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBhZGQgbWFjaGluZXMgdGhhdCBhcmUgc2ltaWxhcgorICAgICAgICAgICAgdG8gdGhvc2UgdGhhdCB0aGUgWW9jdG8gUHJvamVjdCBhbHJlYWR5IHN1cHBvcnRzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQWx0aG91Z2ggd2VsbCB3aXRoaW4gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICBhZGRpbmcgYSB0b3RhbGx5IG5ldyBhcmNoaXRlY3R1cmUgbWlnaHQgcmVxdWlyZQorICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gPGZpbGVuYW1lPmdjYy9nbGliYzwvZmlsZW5hbWU+IGFuZCB0byB0aGUgc2l0ZQorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLCB3aGljaCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYSBjb21wbGV0ZSBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGFkZCBhIG5ldyBtYWNoaW5lLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUtY29uZmZpbGUiPgorICAgICAgICAgICAgPHRpdGxlPkFkZGluZyB0aGUgTWFjaGluZSBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBhZGQgYSBuZXcgbWFjaGluZSwgeW91IG5lZWQgdG8gYWRkIGEgbmV3IG1hY2hpbmUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgdG8gdGhlIGxheWVyJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHByb3ZpZGVzIGRldGFpbHMgYWJvdXQgdGhlIGRldmljZQorICAgICAgICAgICAgICAgIHlvdSBhcmUgYWRkaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSByb290IG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gcmVmZXJlbmNlIHRoZSBuZXcgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcm93bmJheS5jb25mPC9maWxlbmFtZT4sIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICByZWNvZ25pemVzIHRoZSBtYWNoaW5lIGFzICJjcm93bmJheSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBtb3N0IGltcG9ydGFudCB2YXJpYWJsZXMgeW91IG11c3Qgc2V0IGluIHlvdXIgbWFjaGluZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBvciBpbmNsdWRlIGZyb20gYSBsb3dlci1sZXZlbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UQVJHRVRfQVJDSCc+VEFSR0VUX0FSQ0g8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiYXJtIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFJFRkVSUkVEX1BST1ZJREVSJz5QUkVGRVJSRURfUFJPVklERVI8L3VsaW5rPl92aXJ0dWFsL2tlcm5lbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJhcG0gc2NyZWVuIHdpZmkiKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYWxzbyBuZWVkIHRoZXNlIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TRVJJQUxfQ09OU09MRVMnPlNFUklBTF9DT05TT0xFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0lNQUdFVFlQRSc+S0VSTkVMX0lNQUdFVFlQRTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJ6SW1hZ2UiKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GU1RZUEVTJz5JTUFHRV9GU1RZUEVTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gInRhci5neiBqZmZzMiIpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBmdWxsIGRldGFpbHMgb24gdGhlc2UgdmFyaWFibGVzIGluIHRoZSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbGV2ZXJhZ2UgZXhpc3RpbmcgbWFjaGluZSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVzIGZyb20gPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUta2VybmVsIj4KKyAgICAgICAgICAgIDx0aXRsZT5BZGRpbmcgYSBLZXJuZWwgZm9yIHRoZSBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbmVlZHMgdG8gYmUgYWJsZSB0byBidWlsZCBhIGtlcm5lbAorICAgICAgICAgICAgICAgIGZvciB0aGUgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBlaXRoZXIgY3JlYXRlIGEgbmV3IGtlcm5lbCByZWNpcGUgZm9yIHRoaXMgbWFjaGluZSwKKyAgICAgICAgICAgICAgICBvciBleHRlbmQgYW4gZXhpc3Rpbmcga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgc2V2ZXJhbCBrZXJuZWwgcmVjaXBlIGV4YW1wbGVzIGluIHRoZQorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgYXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCB5b3UgY2FuIHVzZSBhcyByZWZlcmVuY2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbmV3IGtlcm5lbCByZWNpcGUsIG5vcm1hbCByZWNpcGUtd3JpdGluZworICAgICAgICAgICAgICAgIHJ1bGVzIGFwcGx5IGZvciBzZXR0aW5nIHVwIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRodXMsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYW55IG5lY2Vzc2FyeSBwYXRjaGVzIGFuZCBzZXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPlM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gcG9pbnQgYXQgdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiB0YXNrIHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmVzIHRoZSB1bnBhY2tlZCBrZXJuZWwgd2l0aCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IHVzaW5nIGEgPGZpbGVuYW1lPm1ha2UgZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIG9yLCBtb3JlIGNvbW1vbmx5LCBieSBjb3B5aW5nIGluIGEgc3VpdGFibGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlbiBydW5uaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2Ugb2xkY29uZmlnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQnkgbWFraW5nIHVzZSBvZiA8ZmlsZW5hbWU+aW5oZXJpdCBrZXJuZWw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICBwb3RlbnRpYWxseSBzb21lIG9mIHRoZSA8ZmlsZW5hbWU+bGludXgtKi5pbmM8L2ZpbGVuYW1lPiBmaWxlcywKKyAgICAgICAgICAgICAgICBtb3N0IG90aGVyIGZ1bmN0aW9uYWxpdHkgaXMgY2VudHJhbGl6ZWQgYW5kIHRoZSBkZWZhdWx0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcyBub3JtYWxseSB3b3JrIHdlbGwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZXh0ZW5kaW5nIGFuIGV4aXN0aW5nIGtlcm5lbCByZWNpcGUsIGl0IGlzIHVzdWFsbHkKKyAgICAgICAgICAgICAgICBhIG1hdHRlciBvZiBhZGRpbmcgYSBzdWl0YWJsZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIG5lZWRzIHRvIGJlIGFkZGVkIGludG8gYSBsb2NhdGlvbiBzaW1pbGFyIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIHVzZWQgZm9yIG90aGVyIG1hY2hpbmVzCisgICAgICAgICAgICAgICAgaW4gYSBnaXZlbiBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgIEEgcG9zc2libGUgd2F5IHRvIGRvIHRoaXMgaXMgYnkgbGlzdGluZyB0aGUgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFuZCBhZGRpbmcgdGhlIG1hY2hpbmUgdG8gdGhlCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz5DT01QQVRJQkxFX01BQ0hJTkU8L3VsaW5rPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FID0gJyhxZW11eDg2fHFlbXVtaXBzKScKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzLAorICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW5ld21hY2hpbmUtZm9ybWZhY3RvciI+CisgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIGEgRm9ybWZhY3RvciBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGZvcm1mYWN0b3IgY29uZmlndXJhdGlvbiBmaWxlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBoYXJkd2FyZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJlaW5nIGJ1aWx0IGFuZCBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBjYW5ub3Qgb2J0YWluIGZyb20gb3RoZXIgc291cmNlcyBzdWNoIGFzIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gYSBmb3JtZmFjdG9yIGNvbmZpZ3VyYXRpb24gZmlsZSBpbmNsdWRlCisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgb3JpZW50YXRpb24sIHdoZXRoZXIgb3Igbm90IHRoZSBzeXN0ZW0gaGFzIGEga2V5Ym9hcmQsCisgICAgICAgICAgICAgICAgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBrZXlib2FyZCBpbiByZWxhdGlvbiB0byB0aGUgc2NyZWVuLCBhbmQKKyAgICAgICAgICAgICAgICB0aGUgc2NyZWVuIHJlc29sdXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdXNlcyByZWFzb25hYmxlIGRlZmF1bHRzIGluIG1vc3QgY2FzZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgY3VzdG9taXphdGlvbiBpcworICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgPGZpbGVuYW1lPm1hY2hjb25maWc8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBkaXJlY3RvcmllcyBmb3Igc3BlY2lmaWMgbWFjaGluZXMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXR0aW5ncyBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBzYW1lIGFyZWEuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZvciAicWVtdWFybSIgbWFjaGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEhBVkVfVE9VQ0hTQ1JFRU49MQorICAgICBIQVZFX0tFWUJPQVJEPTEKKworICAgICBESVNQTEFZX0NBTl9ST1RBVEU9MAorICAgICBESVNQTEFZX09SSUVOVEFUSU9OPTAKKyAgICAgI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorICAgICAjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorICAgICAjRElTUExBWV9CUFA9MTYKKyAgICAgRElTUExBWV9EUEk9MTUwCisgICAgIERJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LXdvcmtpbmctd2l0aC1saWJyYXJpZXMiPgorICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIExpYnJhcmllczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaWJyYXJpZXMgYXJlIGFuIGludGVncmFsIHBhcnQgb2YgeW91ciBzeXN0ZW0uCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNvbWUgY29tbW9uIHByYWN0aWNlcyB5b3UgbWlnaHQgZmluZAorICAgICAgICAgICAgaGVscGZ1bCB3aGVuIHdvcmtpbmcgd2l0aCBsaWJyYXJpZXMgdG8gYnVpbGQgeW91ciBzeXN0ZW06CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdpbmNsdWRpbmctc3RhdGljLWxpYnJhcnktZmlsZXMnPkhvdyB0byBpbmNsdWRlIHN0YXRpYyBsaWJyYXJ5IGZpbGVzPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0nY29tYmluaW5nLW11bHRpcGxlLXZlcnNpb25zLWxpYnJhcnktZmlsZXMtaW50by1vbmUtaW1hZ2UnPkhvdyB0byB1c2UgdGhlIE11bHRpbGliIGZlYXR1cmUgdG8gY29tYmluZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBsaWJyYXJ5IGZpbGVzIGludG8gYSBzaW5nbGUgaW1hZ2U8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdpbnN0YWxsaW5nLW11bHRpcGxlLXZlcnNpb25zLW9mLXRoZS1zYW1lLWxpYnJhcnknPkhvdyB0byBpbnN0YWxsIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGxpYnJhcnkgaW4gcGFyYWxsZWwgb24gdGhlIHNhbWUgc3lzdGVtPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2luY2x1ZGluZy1zdGF0aWMtbGlicmFyeS1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+SW5jbHVkaW5nIFN0YXRpYyBMaWJyYXJ5IEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBidWlsZGluZyBhIGxpYnJhcnkgYW5kIHRoZSBsaWJyYXJ5IG9mZmVycyBzdGF0aWMgbGlua2luZywgeW91IGNhbiBjb250cm9sCisgICAgICAgICAgICAgICAgd2hpY2ggc3RhdGljIGxpYnJhcnkgZmlsZXMgKDxmaWxlbmFtZT4qLmE8L2ZpbGVuYW1lPiBmaWxlcykgZ2V0IGluY2x1ZGVkIGluIHRoZQorICAgICAgICAgICAgICAgIGJ1aWx0IGxpYnJhcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVNfKjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgZGVmaW5lIGhvdyBmaWxlcyBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGFyZSBwYWNrYWdlZC4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn0tc3RhdGljZGV2PC9maWxlbmFtZT4sIHdoaWNoIHJlcHJlc2VudHMgYWxsIHN0YXRpYyBsaWJyYXJ5IGZpbGVzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTb21lIHByZXZpb3VzbHkgcmVsZWFzZWQgdmVyc2lvbnMgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCB0aGUgc3RhdGljIGxpYnJhcnkgZmlsZXMgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn0tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBwYXJ0IG9mIHRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hlcmUKKyAgICAgICAgICAgICAgICB5b3UgY2FuIHNlZSBob3cgdGhlIHN0YXRpYyBsaWJyYXJ5IGZpbGVzIGFyZSBkZWZpbmVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9CRUZPUkVfUE4gPz0gIiIKKyAgICAgUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZG9jICR7UE59LWxvY2FsZSAke1BBQ0tBR0VfQkVGT1JFX1BOfSAke1BOfSIKKyAgICAgUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tbG9jYWxlLS4qIgorICAgICBGSUxFUyA9ICIiCisKKyAgICAgRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qICR7bGliZXhlY2Rpcn0vKiAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0gJHtzaGFyZWRzdGF0ZWRpcn0gJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9LyogJHtiYXNlX3NiaW5kaXJ9LyogXAorICAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS8qJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICAgJHtiYXNlX3ByZWZpeH0vbGliL3VkZXYvcnVsZXMuZCAke3ByZWZpeH0vbGliL3VkZXYvcnVsZXMuZCBcCisgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKiBcCisgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWRsICR7ZGF0YWRpcn0vb21mICR7ZGF0YWRpcn0vc291bmRzIFwKKyAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Jvbm9iby9zZXJ2ZXJzIgorCisgICAgIEZJTEVTXyR7UE59LWJpbiA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyoiCisKKyAgICAgRklMRVNfJHtQTn0tZG9jID0gIiR7ZG9jZGlyfSAke21hbmRpcn0gJHtpbmZvZGlyfSAke2RhdGFkaXJ9L2d0ay1kb2MgXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dub21lL2hlbHAiCisgICAgIFNFQ1RJT05fJHtQTn0tZG9jID0gImRvYyIKKworICAgICBGSUxFU19TT0xJQlNERVYgPz0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCisgICAgIEZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9ICR7RklMRVNfU09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtkYXRhZGlyfS9wa2djb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hY2xvY2FsICR7YmFzZV9saWJkaXJ9LyoubyBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSIKKyAgICAgU0VDVElPTl8ke1BOfS1kZXYgPSAiZGV2ZWwiCisgICAgIEFMTE9XX0VNUFRZXyR7UE59LWRldiA9ICIxIgorICAgICBSREVQRU5EU18ke1BOfS1kZXYgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisKKyAgICAgRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5hICR7bGliZGlyfS8ke0JQTn0vKi5hIgorICAgICBTRUNUSU9OXyR7UE59LXN0YXRpY2RldiA9ICJkZXZlbCIKKyAgICAgUkRFUEVORFNfJHtQTn0tc3RhdGljZGV2ID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0iY29tYmluaW5nLW11bHRpcGxlLXZlcnNpb25zLWxpYnJhcnktZmlsZXMtaW50by1vbmUtaW1hZ2UiPgorICAgICAgICAgICAgPHRpdGxlPkNvbWJpbmluZyBNdWx0aXBsZSBWZXJzaW9ucyBvZiBMaWJyYXJ5IEZpbGVzIGludG8gT25lIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBvZmZlcnMgdGhlIGFiaWxpdHkgdG8gYnVpbGQgbGlicmFyaWVzIHdpdGggZGlmZmVyZW50CisgICAgICAgICAgICAgICAgdGFyZ2V0IG9wdGltaXphdGlvbnMgb3IgYXJjaGl0ZWN0dXJlIGZvcm1hdHMgYW5kIGNvbWJpbmUgdGhlc2UgdG9nZXRoZXIKKyAgICAgICAgICAgICAgICBpbnRvIG9uZSBzeXN0ZW0gaW1hZ2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBsaW5rIGRpZmZlcmVudCBiaW5hcmllcyBpbiB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICBhZ2FpbnN0IHRoZSBkaWZmZXJlbnQgbGlicmFyaWVzIGFzIG5lZWRlZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLgorICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBpcyBjYWxsZWQgIk11bHRpbGliLiIKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSB3b3VsZCBiZSB3aGVyZSB5b3UgaGF2ZSBtb3N0IG9mIGEgc3lzdGVtIGNvbXBpbGVkIGluIDMyLWJpdAorICAgICAgICAgICAgICAgIG1vZGUgdXNpbmcgMzItYml0IGxpYnJhcmllcywgYnV0IHlvdSBoYXZlIHNvbWV0aGluZyBsYXJnZSwgbGlrZSBhIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgZW5naW5lLCB0aGF0IG5lZWRzIHRvIGJlIGEgNjQtYml0IGFwcGxpY2F0aW9uIGFuZCB1c2VzIDY0LWJpdCBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgTXVsdGlsaWIgYWxsb3dzIHlvdSB0byBnZXQgdGhlIGJlc3Qgb2YgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBsaWJyYXJpZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoaWxlIHRoZSBNdWx0aWxpYiBmZWF0dXJlIGlzIG1vc3QgY29tbW9ubHkgdXNlZCBmb3IgMzIgYW5kIDY0LWJpdCBkaWZmZXJlbmNlcywKKyAgICAgICAgICAgICAgICB0aGUgYXBwcm9hY2ggdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIGZhY2lsaXRhdGVzIGRpZmZlcmVudCB0YXJnZXQgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgY29tcGlsZSBzb21lIGJpbmFyaWVzIHRvIHVzZSBvbmUgc2V0IG9mIGxpYnJhcmllcyBhbmQgb3RoZXIgYmluYXJpZXMKKyAgICAgICAgICAgICAgICB0byB1c2UgYSBkaWZmZXJlbnQgc2V0IG9mIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICBUaGUgbGlicmFyaWVzIGNvdWxkIGRpZmZlciBpbiBhcmNoaXRlY3R1cmUsIGNvbXBpbGVyIG9wdGlvbnMsIG9yIG90aGVyCisgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIG92ZXJ2aWV3cyB0aGUgTXVsdGlsaWIgcHJvY2VzcyBvbmx5LgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gaG93IHRvIGltcGxlbWVudCBNdWx0aWxpYiwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9NdWx0aWxpYic+TXVsdGlsaWI8L3VsaW5rPiB3aWtpCisgICAgICAgICAgICAgICAgcGFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGlzIHdpa2kgcGFnZSwgc2V2ZXJhbCBleGFtcGxlcyBleGlzdCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1za2VsZXRvbjwvZmlsZW5hbWU+IGxheWVyIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb25mL211bHRpbGliLWV4YW1wbGUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb25mL211bHRpbGliLWV4YW1wbGUyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cmVjaXBlcy1tdWx0aWxpYi9pbWFnZXMvY29yZS1pbWFnZS1tdWx0aWxpYi1leGFtcGxlLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncHJlcGFyaW5nLXRvLXVzZS1tdWx0aWxpYic+CisgICAgICAgICAgICAgICAgPHRpdGxlPlByZXBhcmluZyB0byBVc2UgTXVsdGlsaWI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZXItc3BlY2lmaWMgcmVxdWlyZW1lbnRzIGRyaXZlIHRoZSBNdWx0aWxpYiBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZXJlIGlzIG5vIG9uZSAib3V0LW9mLXRoZS1ib3giIGNvbmZpZ3VyYXRpb24gdGhhdCBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RzIHRvIG1lZXQgeW91ciBuZWVkcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gZW5hYmxlIE11bHRpbGliLCB5b3UgZmlyc3QgbmVlZCB0byBlbnN1cmUgeW91ciByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIE1hbnkgc3RhbmRhcmQgcmVjaXBlcyBhcmUgYWxyZWFkeSBleHRlbmRlZCBhbmQgc3VwcG9ydCBtdWx0aXBsZSBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hlY2sgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbXVsdGlsaWIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gdG8gc2VlIGhvdyB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIGRvbmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEV2ZW50dWFsbHksIGFsbCByZWNpcGVzIHdpbGwgYmUgY292ZXJlZCBhbmQgdGhpcyBsaXN0IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbm90IGJlIG5lZWRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBNdWx0aWxpYiBjbGFzcyBleHRlbnNpb24gd29ya3MgYXV0b21hdGljYWxseSB0bworICAgICAgICAgICAgICAgICAgICBleHRlbmQgdGhlIHBhY2thZ2UgbmFtZSBmcm9tIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke01MUFJFRklYfSR7UE59PC9maWxlbmFtZT4sIHdoZXJlIDxmaWxlbmFtZT5NTFBSRUZJWDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBwYXJ0aWN1bGFyIG11bHRpbGliIChlLmcuICJsaWIzMi0iIG9yICJsaWI2NC0iKS4KKyAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC91bGluaz4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFyZSBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZXh0ZW5kaW5nIGFueSBtYW51YWwgY29kZSBpbiB0aGUgcmVjaXBlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gdmFyaWFibGUgdG8gZW5zdXJlIHRob3NlIG5hbWVzIGFyZSBleHRlbmRlZAorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXV0b21hdGljIGV4dGVuc2lvbiBjb2RlIHJlc2lkZXMgaW4gPGZpbGVuYW1lPm11bHRpbGliLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1tdWx0aWxpYic+CisgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIE11bHRpbGliPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBzZXQgdXAgdGhlIHJlY2lwZXMsIHlvdSBuZWVkIHRvIGRlZmluZSB0aGUgYWN0dWFsCisgICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9uIG9mIG11bHRpcGxlIGxpYnJhcmllcyB5b3Ugd2FudCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGFjY29tcGxpc2ggdGhpcyB0aHJvdWdoIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBjb25maWd1cmF0aW9uIHdvdWxkIGJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORSA9ICJxZW11eDg2LTY0IgorICAgICByZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgorICAgICBNVUxUSUxJQlMgPSAibXVsdGlsaWI6bGliMzIiCisgICAgIERFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCisgICAgIElNQUdFX0lOU1RBTEwgPSAibGliMzItY29ubm1hbiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBhbgorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGxpYnJhcnkgbmFtZWQgPGZpbGVuYW1lPmxpYjMyPC9maWxlbmFtZT4gYWxvbmdzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBub3JtYWwgdGFyZ2V0IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGNvbWJpbmluZyB0aGVzZSAibGliMzIiIGFsdGVybmF0aXZlcywgdGhlIGV4YW1wbGUgdXNlcyAieDg2IiBmb3IgdHVuaW5nLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhpcyBwYXJ0aWN1bGFyIHR1bmluZywgc2VlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2lhMzIvYXJjaC1pYTMyLmluYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSB0aGVuIGluY2x1ZGVzIDxmaWxlbmFtZT5saWIzMi1jb25ubWFuPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4gYWxsIHRoZSBpbWFnZXMsIHdoaWNoIGlsbHVzdHJhdGVzIG9uZSBtZXRob2Qgb2YgaW5jbHVkaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbGlicmFyeSBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhIG5vcm1hbCBpbWFnZSBidWlsZCB0byBpbmNsdWRlIHRoaXMgZGVwZW5kZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBidWlsZCBNdWx0aWxpYiBwYWNrYWdlcyBzcGVjaWZpY2FsbHkgd2l0aCBhIGNvbW1hbmQgbGlrZSB0aGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaWIzMi1jb25ubWFuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhZGRpdGlvbmFsLWltcGxlbWVudGF0aW9uLWRldGFpbHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5BZGRpdGlvbmFsIEltcGxlbWVudGF0aW9uIERldGFpbHM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpZmZlcmVudCBwYWNrYWdpbmcgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCBsZXZlbHMgb2YgbmF0aXZlIE11bHRpbGliCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0sIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscworICAgICAgICAgICAgICAgICAgICBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHVuaXF1ZSBhcmNoaXRlY3R1cmUgaXMgZGVmaW5lZCBmb3IgdGhlIE11bHRpbGliIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsb25nIHdpdGggY3JlYXRpbmcgYSB1bmlxdWUgZGVwbG95IGZvbGRlciB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L3JwbTwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgPGZpbGVuYW1lPmxpYjMyPC9maWxlbmFtZT4gaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LTY0PC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBvc3NpYmxlIGFyY2hpdGVjdHVyZXMgaW4gdGhlIHN5c3RlbSBhcmUgImFsbCIsICJxZW11eDg2XzY0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliMzJfcWVtdXg4Nl82NCIsIGFuZCAibGliMzJfeDg2Ii48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc3RyaXBwZWQgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IGR1cmluZyBSUE0gcGFja2FnaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1pbmcgZm9yIGEgbm9ybWFsIFJQTSBwYWNrYWdlIGFuZCBhIE11bHRpbGliIFJQTSBwYWNrYWdlIGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IHN5c3RlbSByZXNvbHZlcyB0byBzb21ldGhpbmcgc2ltaWxhciB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLTQuMS1yMi54ODZfNjQucnBtPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2gtNC4xLnIyLmxpYjMyX3g4Ni5ycG08L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gaW5zdGFsbGluZyBhIE11bHRpbGliIGltYWdlLCB0aGUgUlBNIGJhY2tlbmQgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxscyB0aGUgYmFzZSBpbWFnZSBhbmQgdGhlbiBpbnN0YWxscyB0aGUgTXVsdGlsaWIgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBidWlsZCBzeXN0ZW0gcmVsaWVzIG9uIFJQTSB0byByZXNvbHZlIHRoZSBpZGVudGljYWwgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdvIChvciBtb3JlKSBNdWx0aWxpYiBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgSVBLIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0sIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gaXMgbm90IHN0cmlwcGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkdXJpbmcgSVBLIHBhY2thZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtaW5nIGZvciBhIG5vcm1hbCBSUE0gcGFja2FnZSBhbmQgYSBNdWx0aWxpYiBJUEsgcGFja2FnZSBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPiBzeXN0ZW0gcmVzb2x2ZXMgdG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaF80LjEtcjIueDg2XzY0LmlwazwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWIzMi1iYXNoXzQuMS1yd194ODYuaXBrPC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgSVBLIGRlcGxveSBmb2xkZXIgaXMgbm90IG1vZGlmaWVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtNTFBSRUZJWH08L2ZpbGVuYW1lPiBiZWNhdXNlIHBhY2thZ2VzIHdpdGggYW5kIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTXVsdGlsaWIgZmVhdHVyZSBjYW4gZXhpc3QgaW4gdGhlIHNhbWUgZm9sZGVyIGR1ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkaWZmZXJlbmNlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JUEsgZGVmaW5lcyBhIHNhbml0eSBjaGVjayBmb3IgTXVsdGlsaWIgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgY2VydGFpbiBydWxlcyBmb3IgZmlsZSBjb21wYXJpc29uLCBvdmVycmlkZGVuLCBldGMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLW11bHRpcGxlLXZlcnNpb25zLW9mLXRoZS1zYW1lLWxpYnJhcnknPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgdGhlIFNhbWUgTGlicmFyeTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNpdHVhdGlvbnMgY2FuIGV4aXN0IHdoZXJlIHlvdSBuZWVkIHRvIGluc3RhbGwgYW5kIHVzZQorICAgICAgICAgICAgICAgIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lIGxpYnJhcnkgb24gdGhlIHNhbWUgc3lzdGVtCisgICAgICAgICAgICAgICAgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBzaXR1YXRpb25zIGFsbW9zdCBhbHdheXMgZXhpc3Qgd2hlbiBhIGxpYnJhcnkgQVBJCisgICAgICAgICAgICAgICAgY2hhbmdlcyBhbmQgeW91IGhhdmUgbXVsdGlwbGUgcGllY2VzIG9mIHNvZnR3YXJlIHRoYXQKKyAgICAgICAgICAgICAgICBkZXBlbmQgb24gdGhlIHNlcGFyYXRlIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgICAgIFRvIGFjY29tbW9kYXRlIHRoZXNlIHNpdHVhdGlvbnMsIHlvdSBjYW4gaW5zdGFsbCBtdWx0aXBsZQorICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBzYW1lIGxpYnJhcnkgaW4gcGFyYWxsZWwgb24gdGhlIHNhbWUgc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvY2VzcyBpcyBzdHJhaWdodGZvcndhcmQgYXMgbG9uZyBhcyB0aGUgbGlicmFyaWVzIHVzZQorICAgICAgICAgICAgICAgIHByb3BlciB2ZXJzaW9uaW5nLgorICAgICAgICAgICAgICAgIFdpdGggcHJvcGVybHkgdmVyc2lvbmVkIGxpYnJhcmllcywgYWxsIHlvdSBuZWVkIHRvIGRvIHRvCisgICAgICAgICAgICAgICAgaW5kaXZpZHVhbGx5IHNwZWNpZnkgdGhlIGxpYnJhcmllcyBpcyBjcmVhdGUgc2VwYXJhdGUsCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBuYW1lZCByZWNpcGVzIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPiBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgIG5hbWUgaW5jbHVkZXMgYSBwb3J0aW9uIHRoYXQgZGlmZmVyZW50aWF0ZXMgZWFjaCBsaWJyYXJ5IHZlcnNpb24KKyAgICAgICAgICAgICAgICAoZS5nLnRoZSBtYWpvciBwYXJ0IG9mIHRoZSB2ZXJzaW9uIG51bWJlcikuCisgICAgICAgICAgICAgICAgVGh1cywgaW5zdGVhZCBvZiBoYXZpbmcgYSBzaW5nbGUgcmVjaXBlIHRoYXQgbG9hZHMgb25lIHZlcnNpb24KKyAgICAgICAgICAgICAgICBvZiBhIGxpYnJhcnkgKGUuZy4gPGZpbGVuYW1lPmNsdXR0ZXI8L2ZpbGVuYW1lPiksIHlvdSBwcm92aWRlCisgICAgICAgICAgICAgICAgbXVsdGlwbGUgcmVjaXBlcyB0aGF0IHJlc3VsdCBpbiBkaWZmZXJlbnQgdmVyc2lvbnMKKyAgICAgICAgICAgICAgICBvZiB0aGUgbGlicmFyaWVzIHlvdSB3YW50LgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHdvIHJlY2lwZXMgd291bGQgYWxsb3cgdGhlCisgICAgICAgICAgICAgICAgdHdvIHNlcGFyYXRlIHZlcnNpb25zIG9mIHRoZSA8ZmlsZW5hbWU+Y2x1dHRlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbGlicmFyeSB0byBjby1leGlzdCBvbiB0aGUgc2FtZSBzeXN0ZW06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjbHV0dGVyLTEuNl8xLjYuMjAuYmIKKyAgICAgY2x1dHRlci0xLjhfMS44LjQuYmIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBpZiB5b3UgaGF2ZSBvdGhlciByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICBsaWJyYXJ5LCB5b3UgbmVlZCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGNyZWF0ZSB0aGUgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIHNhbWUgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHJlY2lwZQorICAgICAgICAgICAgICAgIGRlcGVuZCBvbiB0aGUgMS44IHZlcnNpb24gb2YgdGhlIDxmaWxlbmFtZT5jbHV0dGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBsaWJyYXJ5LCB1c2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFMgPSAiY2x1dHRlci0xLjgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXBhcnRpdGlvbmVkLWltYWdlcyc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBQYXJ0aXRpb25lZCBJbWFnZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRpbmcgYW4gaW1hZ2UgZm9yIGEgcGFydGljdWxhciBoYXJkd2FyZSB0YXJnZXQgdXNpbmcgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4geW91IGNhbiBib290CisgICAgICAgICAgICB0aGF0IGltYWdlIGFzIGlzIG9uIHlvdXIgZGV2aWNlLgorICAgICAgICAgICAgUGh5c2ljYWwgZGV2aWNlcyBhY2NlcHQgYW5kIGJvb3QgaW1hZ2VzIGluIHZhcmlvdXMgd2F5cyBkZXBlbmRpbmcKKyAgICAgICAgICAgIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGRldmljZS4KKyAgICAgICAgICAgIFVzdWFsbHksIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXJkd2FyZSBjYW4gdGVsbCB5b3Ugd2hhdCBpbWFnZQorICAgICAgICAgICAgZm9ybWF0IHRoZSBkZXZpY2UgcmVxdWlyZXMuCisgICAgICAgICAgICBTaG91bGQgeW91ciBkZXZpY2UgcmVxdWlyZSBtdWx0aXBsZSBwYXJ0aXRpb25zIG9uIGFuIFNEIGNhcmQsIGZsYXNoLAorICAgICAgICAgICAgb3IgYW4gSERELCB5b3UgY2FuIHVzZSB0aGUgT3BlbkVtYmVkZGVkIEltYWdlIENyZWF0b3IsCisJICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIHRvIGNyZWF0ZSB0aGUgcHJvcGVybHkgcGFydGl0aW9uZWQgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY29tbWFuZCBnZW5lcmF0ZXMgcGFydGl0aW9uZWQgaW1hZ2VzCisgICAgICAgICAgICBmcm9tIGV4aXN0aW5nIE9wZW5FbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMuCisgICAgICAgICAgICBJbWFnZSBnZW5lcmF0aW9uIGlzIGRyaXZlbiBieSBwYXJ0aXRpb25pbmcgY29tbWFuZHMgY29udGFpbmVkCisgICAgICAgICAgICBpbiBhbiBPcGVuZW1iZWRkZWQga2lja3N0YXJ0IGZpbGUgKDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4pCisgICAgICAgICAgICBzcGVjaWZpZWQgZWl0aGVyIGRpcmVjdGx5IG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgYXMgb25lIG9mIGEKKyAgICAgICAgICAgIHNlbGVjdGlvbiBvZiBjYW5uZWQgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBmaWxlcyBhcyBzaG93bgorICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IGNvbW1hbmQgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1wcm92aWRlZC1raWNrc3RhcnRfZmlsZSc+VXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIFdoZW4gYXBwbGllZCB0byBhIGdpdmVuIHNldCBvZiBidWlsZCBhcnRpZmFjdHMsIHRoZSByZXN1bHQgaXMgYW4KKyAgICAgICAgICAgIGltYWdlIG9yIHNldCBvZiBpbWFnZXMgdGhhdCBjYW4gYmUgZGlyZWN0bHkgd3JpdHRlbiBvbnRvIG1lZGlhIGFuZAorICAgICAgICAgICAgdXNlZCBvbiBhIHBhcnRpY3VsYXIgc3lzdGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHRoZSBpbmZyYXN0cnVjdHVyZQorCSAgICAgICAgaXQgaXMgYmFzZWQgb24gaXMgYnkgZGVmaW5pdGlvbiBpbmNvbXBsZXRlLgorICAgICAgICAgICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgY3VzdG9taXplZCBpbWFnZXMsCisgICAgICAgICAgICBhbmQgYXMgc3VjaCB3YXMgZGVzaWduZWQgdG8gYmUgY29tcGxldGVseSBleHRlbnNpYmxlIHRocm91Z2ggYQorICAgICAgICAgICAgcGx1Z2luIGludGVyZmFjZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXBsdWdpbnMnPlBsdWdpbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgcGx1Z2lucy4KKwkgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCBkZXNjcmliZXMgd2hhdCB5b3UgbmVlZCB0byBoYXZlIGluCisgICAgICAgICAgICBwbGFjZSB0byBydW4gdGhlIHRvb2wsIHByb3ZpZGVzIGluc3RydWN0aW9uIG9uIGhvdyB0byB1c2UKKyAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiwgYW5kIHByb3ZpZGVzIHNldmVyYWwgZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLWJhY2tncm91bmQnPgorICAgICAgICAgICAgPHRpdGxlPkJhY2tncm91bmQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBiYWNrZ3JvdW5kIG9uIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB1dGlsaXR5LgorICAgICAgICAgICAgICAgIFdoaWxlIG5vbmUgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCB0byB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIHlvdSBtaWdodCBmaW5kIGl0IGludGVyZXN0aW5nLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lICJ3aWMiIGlzIGRlcml2ZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlIENyZWF0b3IgKG9laWMpLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJvZSIgZGlwaHRob25nIGluICJvZWljIiB3YXMgcHJvbW90ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsZXR0ZXIgInciLCBiZWNhdXNlICJvZWljIiBpcyBib3RoIGRpZmZpY3VsdCB0byByZW1lbWJlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb25vdW5jZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBNZWVnbyBJbWFnZSBDcmVhdG9yICg8ZmlsZW5hbWU+bWljPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICBoZWF2aWx5IG1vZGlmaWVkIHRvIG1ha2UgZGlyZWN0IHVzZSBvZiBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFydGlmYWN0cyBpbnN0ZWFkIG9mIHBhY2thZ2UgaW5zdGFsbGF0aW9uIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgd2hpY2ggYXJlIGFscmVhZHkgaW5jb3Jwb3JhdGVkIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBhcnRpZmFjdHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpcyBhIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYWxvbmUgdXRpbGl0eSB0aGF0IGluaXRpYWxseSBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICAgICAgZWFzaWVyLXRvLXVzZSBhbmQgbW9yZSBmbGV4aWJsZSByZXBsYWNlbWVudHMgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvdXBsZSBiaXRzIG9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgaW4gT0UgQ29yZSdzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdC1kaXJlY3RkaXNrLmJiY2xhc3M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPiBzY3JpcHRzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGFuZCB0aG9zZSBleGFtcGxlcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXRoIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2Ugc2NyaXB0cyBpcyBpbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgYSBnZW5lcmFsLXB1cnBvc2UgcGFydGl0aW9uaW5nIGxhbmd1YWdlLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gUmVkaGF0IGtpY2tzdGFydCBzeW50YXguPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLXJlcXVpcmVtZW50cyc+CisgICAgICAgICAgICA8dGl0bGU+UmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eQorICAgICAgICAgICAgICAgIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBCdWlsZCBzeXN0ZW0sIHlvdXIgc3lzdGVtIG5lZWRzCisgICAgICAgICAgICAgICAgdG8gbWVldCB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIExpbnV4IGRpc3RyaWJ1dGlvbiBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBob3N0IG11c3Qgc3VwcG9ydCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXRhaWxlZC1zdXBwb3J0ZWQtZGlzdHJvcyc+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCBvZiBkaXN0cmlidXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RhbmRhcmQgc3lzdGVtIHV0aWxpdGllcywgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwPC9maWxlbmFtZT4sIG11c3QgYmUgaW5zdGFsbGVkIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGhhdmUgdGhlIGJ1aWxkIGFydGlmYWN0cyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUsIHdoaWNoIHR5cGljYWxseSBtZWFucyB0aGF0IHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGFscmVhZHkgY3JlYXRlZCBhbiBpbWFnZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5lbWJlZGRlZCBidWlsZCBzeXN0ZW0gKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBtaWdodCBzZWVtIHJlZHVuZGFudCB0byBnZW5lcmF0ZSBhbiBpbWFnZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgdG8gY3JlYXRlIGFuIGltYWdlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIHRoZSBjdXJyZW50IHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiByZXF1aXJlcyB0aGUgYXJ0aWZhY3RzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZm9ybSBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBidWlsZCBzZXZlcmFsIG5hdGl2ZSB0b29sczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIHBhcnRlZC1uYXRpdmUgZG9zZnN0b29scy1uYXRpdmUgbXRvb2xzLW5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGhhdmUgc291cmNlZCBvbmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLWdldHRpbmctaGVscCc+CisgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBIZWxwPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgZ2VuZXJhbCBoZWxwIGZvciB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYnkgZW50ZXJpbmcgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kIGJ5IGl0c2VsZgorICAgICAgICAgICAgICAgIG9yIGJ5IGVudGVyaW5nIHRoZSBjb21tYW5kIHdpdGggYSBoZWxwIGFyZ3VtZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyAtaAorICAgICAkIHdpYyAtLWhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IHN1cHBvcnRzIHR3byBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JlYXRlPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5saXN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgaGVscCBmb3IgdGhlc2UgY29tbWFuZHMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGhlbHAgPHJlcGxhY2VhYmxlPmNvbW1hbmQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGdldCBkZXRhaWxlZCBoZWxwIG9uIGEgbnVtYmVyIG9mIHRvcGljcworICAgICAgICAgICAgICAgIGZyb20gdGhlIGhlbHAgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgb2YgPGZpbGVuYW1lPndpYyAtLWhlbHA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpc3BsYXlzIGEgbGlzdCBvZiBhdmFpbGFibGUgaGVscAorICAgICAgICAgICAgICAgIHRvcGljcyB1bmRlciBhICJIZWxwIHRvcGljcyIgaGVhZGluZy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGhhdmUgdGhlIGhlbHAgc3lzdGVtIGRpc3BsYXkgdGhlIGhlbHAgdGV4dCBmb3IKKyAgICAgICAgICAgICAgICBhIGdpdmVuIHRvcGljIGJ5IHByZWZhY2luZyB0aGUgdG9waWMgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWMgaGVscDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgaGVscCA8cmVwbGFjZWFibGU+aGVscF90b3BpYzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIGltYWdlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjcmVhdGVzIHVzaW5nIHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgIGtpY2tzdGFydCBmaWxlcyB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybSBvZiB0aGUgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGxpc3QgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gaGVscAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICB3aGVyZSA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBpcyBlaXRoZXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1rZWZpZGlzazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J29wZXJhdGlvbmFsLW1vZGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5PcGVyYXRpb25hbCBNb2RlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbiB0d28gZGlmZmVyZW50CisJICAgICAgICAgICAgbW9kZXMsIGRlcGVuZGluZyBvbiBob3cgbXVjaCBjb250cm9sIHlvdSBuZWVkIGZvcgorCSAgICAgICAgICAgIHNwZWNpZnlpbmcgdGhlIE9wZW5lbWJlZGRlZCBidWlsZCBhcnRpZmFjdHMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICB1c2VkIGZvciBjcmVhdGluZyB0aGUgaW1hZ2U6IFJhdyBhbmQgQ29va2VkOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmF3IE1vZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBleHBsaWNpdGx5IHNwZWNpZnkgYnVpbGQgYXJ0aWZhY3RzIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29va2VkIE1vZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIGFuZCBpbWFnZSBuYW1lIGFyZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgbG9jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJvdmlkZSB0aGUgYnVpbGQgYXJ0aWZhY3RzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBtb2RlIHlvdSB1c2UsIHlvdSBuZWVkIHRvIGhhdmUgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgYXJ0aWZhY3RzIHJlYWR5IGFuZCBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgZW52aXJvbm1lbnQgbXVzdCBiZSBzZXQgdXAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyYXctbW9kZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlJhdyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZSAnd2ljJyBjb21tYW5kIGluIHJhdyBtb2RlIGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+LndrcyBbPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPl0gWy4uLl0KKworICAgICAgICAgV2hlcmU6CisKKyAgICAgICAgICAgICA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+LndrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIE9wZW5FbWJlZGRlZCBraWNrc3RhcnQgZmlsZS4gIFlvdSBjYW4gcHJvdmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgb3duIGN1c3RvbSBmaWxlIG9yIHVzZSBhIGZpbGUgZnJvbSBhIHNldCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGZpbGVzIGFzIGRlc2NyaWJlZCBieSBmdXJ0aGVyIG9wdGlvbnMuCisKKyAgICAgICAgICAgICAtbyA8cmVwbGFjZWFibGU+T1VURElSPC9yZXBsYWNlYWJsZT4sIC0tb3V0ZGlyPTxyZXBsYWNlYWJsZT5PVVRESVI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGNyZWF0ZSBpbWFnZS4KKworICAgICAgICAgICAgIC1pIDxyZXBsYWNlYWJsZT5QUk9QRVJUSUVTX0ZJTEU8L3JlcGxhY2VhYmxlPiwgLS1pbmZpbGU9PHJlcGxhY2VhYmxlPlBST1BFUlRJRVNfRklMRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBmb3IgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGFzIGEgSlNPTiBmaWxlLgorCisgICAgICAgICAgICAgLWUgPHJlcGxhY2VhYmxlPklNQUdFX05BTUU8L3JlcGxhY2VhYmxlPiwgLS1pbWFnZS1uYW1lPTxyZXBsYWNlYWJsZT5JTUFHRV9OQU1FPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgZnJvbSB3aGljaCB0byB1c2UgdGhlIGFydGlmYWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPikuCisKKyAgICAgICAgICAgICAtciA8cmVwbGFjZWFibGU+Uk9PVEZTX0RJUjwvcmVwbGFjZWFibGU+LCAtLXJvb3Rmcy1kaXI9PHJlcGxhY2VhYmxlPlJPT1RGU19ESVI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Jvb3RmczwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0byB1c2UgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiByb290ZnMgc291cmNlLgorCisgICAgICAgICAgICAgLWIgPHJlcGxhY2VhYmxlPkJPT1RJTUdfRElSPC9yZXBsYWNlYWJsZT4sIC0tYm9vdGltZy1kaXI9PHJlcGxhY2VhYmxlPkJPT1RJTUdfRElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGJvb3QgYXJ0aWZhY3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPi9FRkk8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+L3N5c2xpbnV4PC9maWxlbmFtZT4pIHRvIHVzZSBhcyB0aGUgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBib290aW1nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLgorCisgICAgICAgICAgICAgLWsgPHJlcGxhY2VhYmxlPktFUk5FTF9ESVI8L3JlcGxhY2VhYmxlPiwgLS1rZXJuZWwtZGlyPTxyZXBsYWNlYWJsZT5LRVJORUxfRElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGtlcm5lbCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBib290IGltYWdlLgorCisgICAgICAgICAgICAgLW4gPHJlcGxhY2VhYmxlPk5BVElWRV9TWVNST09UPC9yZXBsYWNlYWJsZT4sIC0tbmF0aXZlLXN5c3Jvb3Q9PHJlcGxhY2VhYmxlPk5BVElWRV9TWVNST09UPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY29udGFpbmluZyB0aGUgdG9vbHMgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYnVpbGQgdGhlIGltYWdlLgorCisgICAgICAgICAgICAgLXMsIC0tc2tpcC1idWlsZC1jaGVjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNraXBzIHRoZSBidWlsZCBjaGVjay4KKworICAgICAgICAgICAgIC1ELCAtLWRlYnVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHJvb3QgcHJpdmlsZWdlcyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIGZhY3QsIHlvdSBzaG91bGQgbm90IHJ1biBhcyByb290IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29va2VkLW1vZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db29rZWQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgQ29va2VkIE1vZGUgaXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIDxyZXBsYWNlYWJsZT5raWNrc3RhcnRfZmlsZTwvcmVwbGFjZWFibGU+IC1lIDxyZXBsYWNlYWJsZT5pbWFnZV9uYW1lPC9yZXBsYWNlYWJsZT4KKworICAgICAgICAgV2hlcmU6CisKKyAgICAgICAgICAgICA8cmVwbGFjZWFibGU+a2lja3N0YXJ0X2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIE9wZW5FbWJlZGRlZCBraWNrc3RhcnQgZmlsZS4gWW91IGNhbiBwcm92aWRlIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tIGZpbGUgb3Igc3VwcGxpZWQgZmlsZS4KKworICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5pbWFnZV9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGltYWdlIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmb3JtIGlzIHRoZSBzaW1wbGVzdCBhbmQgbW9zdCB1c2VyLWZyaWVuZGx5LCBhcyBpdAorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCByZXF1aXJlIHNwZWNpZnlpbmcgYWxsIGluZGl2aWR1YWwgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgQWxsIHlvdSBuZWVkIHRvIHByb3ZpZGUgaXMgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uZSBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICByZWxlYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLXByb3ZpZGVkLWtpY2tzdGFydF9maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBhbiBFeGlzdGluZyBLaWNrc3RhcnQgRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byBjcmVhdGUgeW91ciBvd24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGZpbGUsIHlvdSBjYW4gdXNlIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgZmlsZSBwcm92aWRlZCBieSB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGxpc3QgdGhlIGF2YWlsYWJsZSBmaWxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGxpc3QgaW1hZ2VzCisgICAgIGRpcmVjdGRpc2sgQ3JlYXRlIGEgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2UKKyAgICAgbWtlZmlkaXNrIENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSBhbiBleGlzdGluZyBmaWxlLCB5b3UgZG8gbm90IGhhdmUgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGluIFJhdyBNb2RlIHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIC1yIDxyZXBsYWNlYWJsZT5yb290ZnNfZGlyPC9yZXBsYWNlYWJsZT4gLWIgPHJlcGxhY2VhYmxlPmJvb3RpbWdfZGlyPC9yZXBsYWNlYWJsZT4gXAorICAgICAgICAgICAtayA8cmVwbGFjZWFibGU+a2VybmVsX2RpcjwvcmVwbGFjZWFibGU+IC1uIDxyZXBsYWNlYWJsZT5uYXRpdmVfc3lzcm9vdDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgYWN0dWFsIHBhcnRpdGlvbiBsYW5ndWFnZSBjb21tYW5kcworICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5ta2VmaWRpc2sud2tzPC9maWxlbmFtZT4gZmlsZSB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgIGFuIGltYWdlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGFuIEVGSSBkaXNrIGltYWdlCisgICAgICMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyAgICAgIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctZWZpIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorCisgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworICAgICBwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworICAgICBib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDMgY29uc29sZT10dHlQQ0gwLDExNTIwMCBjb25zb2xlPXR0eTAgdm1hbGxvYz0yNTZNQiBzbmQtaGRhLWludGVsLmVuYWJsZV9tc2k9MCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nd2ljLXVzYWdlLWV4YW1wbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzZXZlcmFsIGV4YW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB1dGlsaXR5LgorICAgICAgICAgICAgICAgIEFsbCB0aGUgZXhhbXBsZXMgYXNzdW1lIHRoZSBsaXN0IG9mIHJlcXVpcmVtZW50cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd2ljLXJlcXVpcmVtZW50cyc+UmVxdWlyZW1lbnRzPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBtZXQuCisgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGFzc3VtZSB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgaW1hZ2UgaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdnZW5lcmF0ZS1hbi1pbWFnZS11c2luZy1hLXByb3ZpZGVkLWtpY2tzdGFydC1maWxlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+R2VuZXJhdGUgYW4gSW1hZ2UgdXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBydW5zIGluIENvb2tlZCBNb2RlIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtlZmlkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIG1rZWZpZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KKyAgICAgRG9uZS4KKworICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAvdmFyL3RtcC93aWMvYnVpbGQvbWtlZmlkaXNrLTIwMTMxMDIzMDk0Ni1zZGEuZGlyZWN0CisKKyAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisgICAgICBST09URlNfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvbWlubm93LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgIEJPT1RJTUdfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvbWlubm93LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9jb3JlLWltYWdlLW1pbmltYWwtMS4wL2hkZGltZworICAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9taW5ub3cvdXNyL3NyYy9rZXJuZWwKKyAgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisKKyAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgdGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICBieSBydW5uaW5nIGluIENvb2tlZCBNb2RlIGFuZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1lPC9maWxlbmFtZT4gb3B0aW9uIHdpdGggYW4gZXhpc3Rpbmcga2lja3N0YXJ0CisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEFsbCB0aGF0IGlzIG5lY2Vzc2FyeSBpcyB0byBzcGVjaWZ5IHRoZSBpbWFnZSB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRoZSBhcnRpZmFjdHMuCisgICAgICAgICAgICAgICAgICAgIFlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBuZWVkcyB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldCB0byB0aGUgbWFjaGluZSB5b3UgYXJlIHVzaW5nLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAibWlubm93IiBpbiB0aGlzIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgc3BlY2lmaWVzIHRoZSBleGFjdCBjcmVhdGVkIGFzIHdlbGwgYXMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgaXQgd2FzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBvdXRwdXQgYWxzbyBuYW1lcyB0aGUgYXJ0aWZhY3RzIHVzZWQgYW5kIHRoZSBleGFjdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IHNjcmlwdCB0aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyB2ZXJpZnkgdGhlIGRldGFpbHMgcHJvdmlkZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGltYWdlIHdhcyBpbmRlZWQgY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3RseSBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIGV4YW1wbGUsIHlvdSBjYW4gbm93IGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZDwvZmlsZW5hbWU+IHRoZSBpbWFnZSB0byBhIFVTQiBzdGljaywgb3IKKyAgICAgICAgICAgICAgICAgICAgd2hhdGV2ZXIgbWVkaWEgZm9yIHdoaWNoIHlvdSBidWlsdCB5b3VyIGltYWdlLAorICAgICAgICAgICAgICAgICAgICBhbmQgYm9vdCB0aGUgcmVzdWx0aW5nIG1lZGlhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBkZCBpZj0vdmFyL3RtcC93aWMvYnVpbGQvbWtlZmlkaXNrLTIwMTMxMDIzMDk0Ni1zZGEuZGlyZWN0IG9mPS9kZXYvc2RiCisgICAgIFtzdWRvXSBwYXNzd29yZCBmb3IgdHJ6OgorICAgICAxODIyNzQrMCByZWNvcmRzIGluCisgICAgIDE4MjI3NCswIHJlY29yZHMgb3V0CisgICAgIDkzMzI0Mjg4IGJ5dGVzICg5MyBNQikgY29waWVkLCAxNC40Nzc3IHMsIDYuNCBNQi9zCisgICAgIFt0cnpAZW1wYW5hZGEgfl0kIHN1ZG8gZWplY3QgL2Rldi9zZGIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWEtbW9kaWZpZWQta2lja3N0YXJ0LWZpbGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBhIE1vZGlmaWVkIEtpY2tzdGFydCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbWFnZSBjcmVhdGlvbiBpcyBkcml2ZW4KKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIGtpY2tzdGFydCBmaWxlLCBpdCBpcyBlYXN5IHRvIGFmZmVjdCBpbWFnZSBjcmVhdGlvbgorICAgICAgICAgICAgICAgICAgICBieSBjaGFuZ2luZyB0aGUgcGFyYW1ldGVycyBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoYXQgdGhyb3VnaCBtb2RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljIGxpc3QgaW1hZ2VzPC9maWxlbmFtZT4gdG8gc2hvdyB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICBvZiBleGlzdGluZyBraWNrc3RhcnQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlc2UgZmlsZXMgcmVzaWRlIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBhdmFpbGFibGUgZmlsZXMgcmVzaWRlIGluIHRoaXMgZGlyZWN0b3J5LCB5b3UKKyAgICAgICAgICAgICAgICAgICAgY2FuIGNyZWF0ZSBhbmQgYWRkIHlvdXIgb3duIGN1c3RvbSBmaWxlcyB0byB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHVzZSBvZiB0aGUgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgd291bGQgdGhlbiBpbmNsdWRlIHlvdXIga2lja3N0YXJ0IGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGZpbGUgYWxyZWFkeSBkb2VzIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgb2Ygd2hhdCBpcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGZvciB0aGUgaGFyZHdhcmUgaW4gdGhpcyBleGFtcGxlLCB0aGUgaW1hZ2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJvb3QgZnJvbSA8ZmlsZW5hbWU+c2RiPC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2RhPC9maWxlbmFtZT4sIHdoaWNoIGlzIHdoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4ga2lja3N0YXJ0IGZpbGUgdXNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYmVnaW5zIGJ5IG1ha2luZyBhIGNvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrLndrczwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIGNoYW5naW5nIHRoZSBsaW5lcyB0aGF0IHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBkaXNrIGZyb20gd2hpY2ggdG8gYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNwIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzIFwKKyAgICAgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrc2RiLndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE5leHQsIHRoZSBleGFtcGxlIG1vZGlmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlza3NkYi53a3M8L2ZpbGVuYW1lPiBmaWxlIGFuZCBjaGFuZ2VzIGFsbAorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgIjxmaWxlbmFtZT4tLW9uZGlzayBzZGE8L2ZpbGVuYW1lPiIKKyAgICAgICAgICAgICAgICAgICAgdG8gIjxmaWxlbmFtZT4tLW9uZGlzayBzZGI8L2ZpbGVuYW1lPiIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGNoYW5nZXMgdGhlIGZvbGxvd2luZyB0d28gbGluZXMgYW5kIGxlYXZlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGxpbmVzIHVudG91Y2hlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYiAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CisgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RiIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBsaW5lcyBhcmUgY2hhbmdlZCwgdGhlIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlza3NkYjwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBwb2ludHMgdGhlIHByb2Nlc3MgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBhcnRpZmFjdHMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBOZXh0IFVuaXQgb2YgQ29tcHV0aW5nIChudWMpCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIGRpcmVjdGRpc2tzZGIgLWUgY29yZS1pbWFnZS1taW5pbWFsCisgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgIERvbmUuCisKKyAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL2RpcmVjdGRpc2tzZGItMjAxMzEwMjMxMTMxLXNkYi5kaXJlY3QKKworICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKyAgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9udWMtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICAgQk9PVElNR19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvbnVjL3Vzci9zaGFyZQorICAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9udWMvdXNyL3NyYy9rZXJuZWwKKyAgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisKKyAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL2RpcmVjdGRpc2tzZGIud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBleGFtcGxlLCB5b3UgY2FuIG5vdyBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPiB0aGUgaW1hZ2UgdG8gYSBVU0Igc3RpY2ssIG9yCisgICAgICAgICAgICAgICAgICAgIHdoYXRldmVyIG1lZGlhIGZvciB3aGljaCB5b3UgYnVpbHQgeW91ciBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gZGQgaWY9L3Zhci90bXAvd2ljL2J1aWxkL2RpcmVjdGRpc2tzZGItMjAxMzEwMjMxMTMxLXNkYi5kaXJlY3Qgb2Y9L2Rldi9zZGIKKyAgICAgODYwMTgrMCByZWNvcmRzIGluCisgICAgIDg2MDE4KzAgcmVjb3JkcyBvdXQKKyAgICAgNDQwNDEyMTYgYnl0ZXMgKDQ0IE1CKSBjb3BpZWQsIDEzLjA3MzQgcywgMy40IE1CL3MKKyAgICAgW3RyekBlbXBhbmFkYSB0bXBdJCBzdWRvIGVqZWN0IC9kZXYvc2RiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hbi1pbWFnZS1iYXNlZC1vbi1jb3JlLWltYWdlLW1pbmltYWwtYW5kLWNyb3duYmF5LW5vZW1nZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGFuIEltYWdlIEJhc2VkIG9uIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmNyb3duYmF5LW5vZW1nZDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhbiBpbWFnZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNyb3duYmF5LW5vZW1nZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCB3b3JrcyByaWdodCBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKKworICAgICBDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLgorICAgICBEb25lLgorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgIC92YXIvdG1wL3dpYy9idWlsZC9kaXJlY3RkaXNrLTIwMTMwOTI1MjM1MC1zZGEuZGlyZWN0CisKKyAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisKKyAgICAgUk9PVEZTX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL2Nyb3duYmF5X25vZW1nZC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCisgICAgIEJPT1RJTUdfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc2hhcmUKKyAgICAgS0VSTkVMX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NyYy9rZXJuZWwKKyAgICAgTkFUSVZFX1NZU1JPT1Q6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsCisKKyAgICAgVGhlIGltYWdlKHMpIHdlcmUgY3JlYXRlZCB1c2luZyBPRSBraWNrc3RhcnQgZmlsZToKKyAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9zY3JpcHRzL2xpYi9pbWFnZS9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLW1vZGlmaWVkLWtpY2tzdGFydC1maWxlLWFuZC1ydW5uaW5nLWluLXJhdy1tb2RlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYSBNb2RpZmllZCBLaWNrc3RhcnQgRmlsZSBhbmQgUnVubmluZyBpbiBSYXcgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgbWFudWFsbHkgc3BlY2lmaWVzIGVhY2ggYnVpbGQgYXJ0aWZhY3QKKyAgICAgICAgICAgICAgICAgICAgKHJ1bnMgaW4gUmF3IE1vZGUpIGFuZCB1c2VzIGEgbW9kaWZpZWQga2lja3N0YXJ0IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGFsc28gdXNlcyB0aGUgPGZpbGVuYW1lPi1vPC9maWxlbmFtZT4gb3B0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIGNhdXNlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB0byBjcmVhdGUgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Zhci90bXAvd2ljPC9maWxlbmFtZT4gZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSB+L3Rlc3Qud2tzIC1vIC9ob21lL3Ryei90ZXN0d2ljIC0tcm9vdGZzLWRpciBcCisgICAgICAgICAgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL2Nyb3duYmF5X25vZW1nZC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzIFwKKyAgICAgICAgICAtLWJvb3RpbWctZGlyIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zaGFyZSBcCisgICAgICAgICAgLS1rZXJuZWwtZGlyIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsIFwKKyAgICAgICAgICAtLW5hdGl2ZS1zeXNyb290IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4CisKKyAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL2hvbWUvdHJ6L3Rlc3R3aWMvYnVpbGQvdGVzdC0yMDEzMDkyNjAwMzItc2RhLmRpcmVjdAorCisgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorCisgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9jcm93bmJheV9ub2VtZ2QtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICBCT09USU1HX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NoYXJlCisgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsCisgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbAorCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnovdGVzdC53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGRpZCBub3QgaGF2ZSB0byBiZSBzcGVjaWZpZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBzaW5jZSB0aGUgYXJ0aWZhY3QgaXMKKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkgc3BlY2lmaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXBsdWdpbnMnPgorICAgICAgICAgICAgPHRpdGxlPlBsdWdpbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBQbHVnaW5zIGFsbG93IDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBmdW5jdGlvbmFsaXR5IHRvCisJICAgICAgICAgICAgYmUgZXh0ZW5kZWQgYW5kIHNwZWNpYWxpemVkIGJ5IHVzZXJzLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkb2N1bWVudHMgdGhlIHBsdWdpbiBpbnRlcmZhY2UsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgY3VycmVudGx5IHJlc3RyaWN0ZWQgdG8gc291cmNlIHBsdWdpbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFNvdXJjZSBwbHVnaW5zIHByb3ZpZGUgYSBtZWNoYW5pc20gdG8gY3VzdG9taXplCisJICAgICAgICAgICAgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaW4KKwkgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIG1haW5seSB0aGUgY29udGVudHMgb2YKKwkgICAgICAgICAgICBwYXJ0aXRpb25zLgorCSAgICAgICAgICAgIFRoZSBwbHVnaW5zIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIG1hcHBpbmcgdmFsdWVzCisJICAgICAgICAgICAgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZXMgdXNpbmcgdGhlCisJICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4ga2V5d29yZCB0byBhCisgICAgICAgICAgICAgICAgcGFydGljdWxhciBwbHVnaW4gaW1wbGVtZW50YXRpb24gdGhhdCBwb3B1bGF0ZXMgYQorICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcGFydGl0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBBIHNvdXJjZSBwbHVnaW4gaXMgY3JlYXRlZCBhcyBhIHN1YmNsYXNzIG9mCisJICAgICAgICAgICAgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBwbHVnaW4gZmlsZSBjb250YWluaW5nIGl0IGlzIGFkZGVkIHRvCisJICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL21pYy9wbHVnaW5zL3NvdXJjZS88L2ZpbGVuYW1lPiB0bworCSAgICAgICAgICAgIG1ha2UgdGhlIHBsdWdpbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlCisJICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvbWljL3BsdWdpbmJhc2UucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgU291cmNlIHBsdWdpbnMgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgYW5kIGFkZGVkIGJ5CisJICAgICAgICAgICAgZXh0ZXJuYWwgbGF5ZXJzLgorICAgICAgICAgICAgICAgIEFzIHN1Y2gsIGFueSBwbHVnaW5zIGZvdW5kIGluIGEKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvbWljL3BsdWdpbnMvc291cmNlLzwvZmlsZW5hbWU+CisJICAgICAgICAgICAgZGlyZWN0b3J5IGluIGFuIGV4dGVybmFsIGxheWVyIGFyZSBhbHNvIG1hZGUKKwkgICAgICAgICAgICBhdmFpbGFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBuZWVkcworCSAgICAgICAgICAgIHRvIGludm9rZSBhIHBhcnRpdGlvbi1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgaXQgbG9va3MKKwkgICAgICAgICAgICBmb3IgdGhlIHBsdWdpbiB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IHBhcmFtZXRlciBnaXZlbiB0bworICAgICAgICAgICAgICAgIHRoYXQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcGFydGl0aW9uIGlzIHNldCB1cCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAgIC4uLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgICAgICBUaGUgbWV0aG9kcyBkZWZpbmVkIGFzIGNsYXNzIG1lbWJlcnMgb2YgdGhlIHBsdWdpbgorCSAgICAgICAgICAgIGhhdmluZyB0aGUgbWF0Y2hpbmcgPGZpbGVuYW1lPmJvb3RpbWctcGNiaW9zLm5hbWU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNsYXNzIG1lbWJlciBhcmUgdXNlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgVG8gYmUgbW9yZSBjb25jcmV0ZSwgaGVyZSBpcyB0aGUgcGx1Z2luIGRlZmluaXRpb24gdGhhdAorCSAgICAgICAgICAgIG1hdGNoZXMgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZSBib290aW1nLXBjYmlvczwvZmlsZW5hbWU+IHVzYWdlLAorICAgICAgICAgICAgICAgIGFsb25nIHdpdGggYW4gZXhhbXBsZQorCSAgICAgICAgICAgIG1ldGhvZCBjYWxsZWQgYnkgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgIHdoZW4gaXQgbmVlZHMgdG8gaW52b2tlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljCisJICAgICAgICAgICAgcGFydGl0aW9uLXByZXBhcmF0aW9uIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBjbGFzcyBCb290aW1nUGNiaW9zUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgICAgIG5hbWUgPSAnYm9vdGltZy1wY2Jpb3MnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKHNlbGYsIHBhcnQsIC4uLikKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICAgICAgSWYgdGhlIHN1YmNsYXNzIGl0c2VsZiBkb2VzIG5vdCBpbXBsZW1lbnQgYSBmdW5jdGlvbiwgYQorCSAgICAgICAgICAgIGRlZmF1bHQgdmVyc2lvbiBpbiBhIHN1cGVyY2xhc3MgaXMgbG9jYXRlZCBhbmQKKwkgICAgICAgICAgICB1c2VkLCB3aGljaCBpcyB3aHkgYWxsIHBsdWdpbnMgbXVzdCBiZSBkZXJpdmVkIGZyb20KKwkgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gY2xhc3MgZGVmaW5lcyB0aGUKKwkgICAgICAgICAgICBmb2xsb3dpbmcgbWV0aG9kcywgd2hpY2ggaXMgdGhlIGN1cnJlbnQgc2V0IG9mIG1ldGhvZHMKKwkgICAgICAgICAgICB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBvciBvdmVycmlkZGVuIGJ5CisJICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT4gcGx1Z2lucy4KKyAgICAgICAgICAgICAgICBBbnkgbWV0aG9kcyBub3QgaW1wbGVtZW50ZWQgYnkgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBzdWJjbGFzcyBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyBwcmVzZW50IGluIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBzb3VyY2UgZm9yIGRldGFpbHM6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIG1ldGhvZCBwcmVwYXJlcyB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBpbWFnZSB0aGF0IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGlzayBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGVkIGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3ByZXBhcmVfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHR5cGljYWxseSB1c2VkIHRvIGNyZWF0ZSBjdXN0b20KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgcGFydGl0aW9uIChlLmcuIHN5c2xpbnV4IG9yCisgICAgICAgICAgICAgICAgICAgICAgICBncnViIGNvbmZpZ3VyYXRpb24gZmlsZXMpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2luc3RhbGxfZGlzaygpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZWQgaW50byBhIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIGhvb2sgdG8gYWxsb3cgZmluYWxpemF0aW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2sgaW1hZ2UsIChlLmcuIHdyaXRpbmcgYW4gTUJSKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19zdGFnZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWFsIGNvbnRlbnQtc3RhZ2luZyBob29rIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wcmVwYXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBub3JtYWxseSBlbXB0eS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UeXBpY2FsbHksIGEgcGFydGl0aW9uIGp1c3QgdXNlcyB0aGUgcGFzc2VkLWluCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIChlLmcuIHRoZSB1bm1vZGlmaWVkIHZhbHVlIG9mCisJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdGltZ19kaXI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpbiBzb21lIGNhc2VzIHRoaW5ncyBtaWdodCBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIHRhaWxvcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY2VydGFpbiBmaWxlcyBtaWdodCBhZGRpdGlvbmFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgdGFrZW4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3RpbWdfZGlyICsgL2Jvb3Q8L2ZpbGVuYW1lPi4KKwkJICAgICAgICAgICAgICAgIFRoaXMgaG9vayBhbGxvd3MgdGhvc2UgZmlsZXMgdG8gYmUgc3RhZ2VkIGluIGEKKwkJICAgICAgICAgICAgICAgIGN1c3RvbWl6ZWQgZmFzaGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nZXRfYml0YmFrZV92YXIoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzIHlvdSB0byBhY2Nlc3Mgbm9uLXN0YW5kYXJkIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGZvciB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NoZW1lIGlzIGV4dGVuc2libGUuCisgICAgICAgICAgICAgICAgQWRkaW5nIG1vcmUgaG9va3MgaXMgYSBzaW1wbGUgbWF0dGVyIG9mIGFkZGluZyBtb3JlCisgICAgICAgICAgICAgICAgcGx1Z2luIG1ldGhvZHMgdG8gPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIGRlcml2ZWQgY2xhc3Nlcy4KKyAgICAgICAgICAgICAgICBUaGUgY29kZSB0aGF0IHRoZW4gbmVlZHMgdG8gY2FsbCB0aGUgcGx1Z2luIG1ldGhvZHMgdXNlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wbHVnaW4uZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcygpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0byBmaW5kIHRoZSBtZXRob2Qgb3IgbWV0aG9kcyBuZWVkZWQgYnkgdGhlIGNhbGwuCisgICAgICAgICAgICAgICAgUmV0cmlldmFsIG9mIHRob3NlIG1ldGhvZHMgaXMgYWNjb21wbGlzaGVkCisgICAgICAgICAgICAgICAgYnkgZmlsbGluZyB1cCBhIGRpY3Qgd2l0aCBrZXlzCisgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgbWV0aG9kIG5hbWVzIG9mIGludGVyZXN0LgorICAgICAgICAgICAgICAgIE9uIHN1Y2Nlc3MsIHRoZXNlIHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgUGxlYXNlIHNlZSB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIGV4YW1wbGVzIGFuZCBkZXRhaWxzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtd2tzLXJlZmVyZW5jZSc+CisgICAgICAgICAgICA8dGl0bGU+T3BlbkVtYmVkZGVkIEtpY2tzdGFydCAoLndrcykgUmVmZXJlbmNlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgb25seSB0aGUgYmFzaWMga2lja3N0YXJ0IHBhcnRpdGlvbmluZyBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFydGl0aW9uPC9maWxlbmFtZT4gKG9yIDxmaWxlbmFtZT5wYXJ0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmb3Igc2hvcnQpIGFuZCA8ZmlsZW5hbWU+Ym9vdGxvYWRlcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGdXR1cmUgdXBkYXRlcyB3aWxsIGltcGxlbWVudCBtb3JlIGNvbW1hbmRzIGFuZCBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGFueXRoaW5nIHRoYXQgaXMgbm90IHNwZWNpZmljYWxseQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQsIHJlc3VsdHMgY2FuIGJlIHVucHJlZGljdGFibGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiB0aGUgY29tbWFuZHMsIHRoZWlyIHN5bnRheCwKKyAgICAgICAgICAgICAgICBhbmQgbWVhbmluZ3MuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmRzIGFyZSBiYXNlZCBvbiB0aGUgRmVkb3JhCisgICAgICAgICAgICAgICAga2lja3N0YXJ0IHZlcnNpb25zIGJ1dCB3aXRoIG1vZGlmaWNhdGlvbnMgdG8KKyAgICAgICAgICAgICAgICByZWZsZWN0IDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjYXBhYmlsaXRpZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIG9yaWdpbmFsIGRvY3VtZW50YXRpb24gZm9yIHRob3NlIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgYXQgdGhlIGZvbGxvd2luZyBsaW5rczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjcGFydF9vcl9wYXJ0aXRpb24nPmh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNwYXJ0X29yX3BhcnRpdGlvbjwvdWxpbms+CisJCQkgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I2Jvb3Rsb2FkZXInPmh0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNib290bG9hZGVyPC91bGluaz4KKwkJCSAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29tbWFuZC1wYXJ0LW9yLXBhcnRpdGlvbic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvbW1hbmQ6IHBhcnQgb3IgcGFydGl0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgcGFydGl0aW9uIG9uIHRoZSBzeXN0ZW0gYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwYXJ0IDxyZXBsYWNlYWJsZT5tbnRwb2ludDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bW50cG9pbnQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gd2lsbCBiZSBtb3VudGVkIGFuZCBtdXN0IGJlIG9mIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGZvcm1zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4vPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnN3YXA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGFydGl0aW9uIHdpbGwgYmUgdXNlZCBhcyBzd2FwIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0aGUgc3VwcG9ydGVkIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4tLXNpemU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbXVtIHBhcnRpdGlvbiBzaXplIGluIE1CeXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IGFuIGludGVnZXIgdmFsdWUgc3VjaCBhcyA1MDAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGFwcGVuZCB0aGUgbnVtYmVyIHdpdGggIk1CIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdGhpcyBvcHRpb24gaWYgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4tc3BlY2lmaWMgb3B0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhIHRoYXQgcG9wdWxhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvb3RmcyIsIGJ1dCB5b3UgY2FuIHVzZSBhbnkgdmFsdWUgdGhhdCBtYXBzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB2YWxpZCBzb3VyY2UgcGx1Z2luLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgc291cmNlIHBsdWdpbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nb3BlbmVtYmVkZGVkLWtpY2tzdGFydC1wbHVnaW5zJz5QbHVnaW5zPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlIHJvb3RmczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjcmVhdGVzIGEgcGFydGl0aW9uIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2UgYXMgbmVlZGVkIGFuZCB0byBmaWxsIGl0IHdpdGggdGhlIGNvbnRlbnRzIG9mCisJCQkgICAgICAgICAgICAgICAgdGhlIHJvb3QgZmlsZXN5c3RlbSBwb2ludGVkIHRvIGJ5IHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcjwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24KKwkJCSAgICAgICAgICAgICAgICBvciB0aGUgZXF1aXZhbGVudCByb290ZnMgZGVyaXZlZCBmcm9tIHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorCQkJICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXN5c3RlbSB0eXBlIHVzZWQgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBpcyBkcml2ZW4gYnkgdGhlIHZhbHVlIG9mIHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWZzdHlwZTwvZmlsZW5hbWU+IG9wdGlvbgorCQkJICAgICAgICAgICAgICAgIHNwZWNpZmllZCBmb3IgdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGVudHJ5IG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tZnN0eXBlPC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJCQkgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2UgPHJlcGxhY2VhYmxlPnBsdWdpbi1uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY3JlYXRlcyBhIHBhcnRpdGlvbiBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIGFzIG5lZWRlZCBhbmQgZmlsbHMgaXQgd2l0aCB0aGUgY29udGVudHMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFydGl0aW9uIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBwbHVnaW4gbmFtZSB1c2luZyB0aGUgZGF0YSBwb2ludGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYnkgdGhlIDxmaWxlbmFtZT4tcjwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBvciB0aGUgZXF1aXZhbGVudCByb290ZnMgZGVyaXZlZCBmcm9tIHRoZQorCQkJICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorCQkJICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFjdGx5IHdoYXQgdGhvc2UgY29udGVudHMgYW5kCisJCQkgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSB0eXBlIGVuZCB1cCBiZWluZyBhcmUgZGVwZW5kZW50CisJCQkgICAgICAgICAgICAgICAgb24gdGhlIGdpdmVuIHBsdWdpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tb25kaXNrPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi0tb25kcml2ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VzIHRoZSBwYXJ0aXRpb24gdG8gYmUgY3JlYXRlZCBvbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1mc3R5cGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGZpbGUgc3lzdGVtIHR5cGUgZm9yIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgdmFsdWVzIGFyZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmV4dDQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ0cmZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c3F1YXNoZnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zd2FwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4tLWZzb3B0aW9uczwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnJlZS1mb3JtIHN0cmluZyBvZiBvcHRpb25zIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB3aGVuIG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RyaW5nIHdpbGwgYmUgY29waWVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvZnN0YWI8L2ZpbGVuYW1lPiBmaWxlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBzeXN0ZW0gYW5kIHNob3VsZCBiZSBlbmNsb3NlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyAiZGVmYXVsdHMiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1sYWJlbCBsYWJlbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsYWJlbCB0byBnaXZlIHRvIHRoZSBmaWxlc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgbWFkZSBvbiB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBnaXZlbiBsYWJlbCBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSwgYSBuZXcgbGFiZWwgaXMgY3JlYXRlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hY3RpdmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtzIHRoZSBwYXJ0aXRpb24gYXMgYWN0aXZlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hbGlnbiAoaW4gS0J5dGVzKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgYSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4tc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gdGhhdCBzYXlzIHRvIHN0YXJ0IGEgcGFydGl0aW9uIG9uIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCBLQnl0ZXMgYm91bmRhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbW1hbmQtYm9vdGxvYWRlcic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvbW1hbmQ6IGJvb3Rsb2FkZXI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzcGVjaWZpZXMgaG93IHRoZSBib290IGxvYWRlciBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCBhbmQgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXIgZnVuY3Rpb25hbGl0eSBhbmQgYm9vdCBwYXJ0aXRpb25zIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQgYnkgdGhlIHZhcmlvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+CisJCQkgICAgICAgICAgICBwbHVnaW5zIHRoYXQgaW1wbGVtZW50IGJvb3Rsb2FkZXIgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBib290bG9hZGVyIGNvbW1hbmQgZXNzZW50aWFsbHkgcHJvdmlkZXMgYSBtZWFucyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS10aW1lb3V0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290bG9hZGVyIHRpbWVzIG91dCBhbmQgYm9vdHMgdGhlIGRlZmF1bHQgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1hcHBlbmQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBrZXJuZWwgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBwYXJhbWV0ZXJzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHN5c2xpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFQUEVORDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdydWI8L2ZpbGVuYW1lPiBrZXJuZWwgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWtlcm5lbCc+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgS2VybmVsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbmZpZ3VyaW5nIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBjb25zaXN0cyBvZiBtYWtpbmcgc3VyZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBoYXMgYWxsIHRoZSByaWdodCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaW4gaXQgZm9yIHRoZSBpbWFnZSB5b3UgYXJlIGJ1aWxkaW5nLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbCBhbmQKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHRvIG1ha2Ugc3VyZSB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaXMganVzdCBob3cgeW91IG5lZWQgaXQuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2F2ZSBrbm93biBjb25maWd1cmF0aW9ucyBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gY2FuIHVzZQorICAgICAgICAgICAgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byB1c2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGNyZWF0ZSBhbmQgdXNlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBhbmQgaG93IHRvIGludGVyYWN0aXZlbHkKKyAgICAgICAgICAgIG1vZGlmeSB5b3VyIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICBsZWFuZXN0IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgcG9zc2libGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLW1lbnVjb25maWcnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBkZWZpbmUga2VybmVsIGNvbmZpZ3VyYXRpb25zIGlzIHRvIHNldCB0aGVtIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBwcm92aWRlcyBhbiBpbnRlcmFjdGl2ZSBtZXRob2Qgd2l0aCB3aGljaAorICAgICAgICAgICAgICAgIHRvIHNldCBrZXJuZWwgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZW51Y29uZmlnJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvb2wgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgeW91IG11c3QgbGF1bmNoIGl0IHVzaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGVudmlyb25tZW50IG11c3QgYmUgc2V0IHVwIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzY3JpcHQgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gYmUgc3VyZSBvZiB0aGUgc3RhdGUgb2YgeW91ciBidWlsZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHJ1biA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYXNzdW1pbmcgdGhlIFNvdXJjZSBEaXJlY3RvcnkncyB0b3AtbGV2ZWwgZm9sZGVyIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPn4vcG9reTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBwb2t5CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnbWUgLWYKKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIG1lbnVjb25maWcKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbWVzIHVwLCBpdHMgc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2UgYWxsb3dzIHlvdSB0byBpbnRlcmFjdGl2ZWx5IGV4YW1pbmUgYW5kIGNvbmZpZ3VyZQorICAgICAgICAgICAgICAgIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICBBZnRlciBtYWtpbmcgeW91ciBjaGFuZ2VzLCBzaW1wbHkgZXhpdCB0aGUgdG9vbCBhbmQgc2F2ZSB5b3VyCisgICAgICAgICAgICAgICAgY2hhbmdlcyB0byBjcmVhdGUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHRoYXQgY29uZmlndXJlcyB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWNvZ25pemVzIHRoaXMga2VybmVsIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBmcm9tIHRoZSBzaGVsbCBpbiB3aGljaCB5b3UgcHJldmlvdXNseSBzb3VyY2VkIHRoZQorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uIHNjcmlwdCBjbGVhbnMgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgdGhlbiBydW5zIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgbWVudWNvbmZpZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGxhdW5jaGVzLCB1c2UgdGhlIGludGVyZmFjZQorICAgICAgICAgICAgICAgIHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIHNlbGVjdGlvbnMgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbgorICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIDxmaWxlbmFtZT5DT05GSUdfU01QPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBzZXR0aW5nLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpdCBhdCA8ZmlsZW5hbWU+UHJvY2Vzc29yIFR5cGUgYW5kIEZlYXR1cmVzPC9maWxlbmFtZT4gdW5kZXIKKyAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBzZWxlY3Rpb24gPGZpbGVuYW1lPlN5bW1ldHJpYyBNdWx0aS1wcm9jZXNzaW5nIFN1cHBvcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBBZnRlciBoaWdobGlnaHRpbmcgdGhlIHNlbGVjdGlvbiwgdXNlIHRoZSBhcnJvdyBrZXlzIHRvIHNlbGVjdCBvciBkZXNlbGVjdAorICAgICAgICAgICAgICAgIHRoZSBzZXR0aW5nLgorICAgICAgICAgICAgICAgIFdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGFsbCB5b3VyIHNlbGVjdGlvbnMsIGV4aXQgb3V0IGFuZCBzYXZlIHRoZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNhdmluZyB0aGUgc2VsZWN0aW9ucyB1cGRhdGVzIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBmaWxlIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAga2VybmVsIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGFuZCBleGFtaW5lIHRoaXMgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC93b3JrLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBpcyBsb2NhdGVkIGluIHRoZSBhcmVhIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGtlcm5lbCBpcyBidWlsdC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdlcmUgYnVpbGRpbmcgYSBMaW51eCBZb2N0byBrZXJuZWwgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgTGludXggMy4xNCBrZXJuZWwgYW5kIHlvdSB3ZXJlIGJ1aWxkaW5nIGEgUUVNVSBpbWFnZSB0YXJnZXRlZCBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eDg2PC9maWxlbmFtZT4gYXJjaGl0ZWN0dXJlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgd291bGQgYmUgbG9jYXRlZCBoZXJlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvbGludXgteW9jdG8tMy4xNC4xMStnaXQxKzg0Zi4uLgorICAgICAgICAuLi42NTZlZDMwLXIxL2xpbnV4LXFlbXV4ODYtc3RhbmRhcmQtYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGRpcmVjdG9yeSBpcyBhcnRpZmljaWFsbHkgc3BsaXQgYW5kIG1hbnkgb2YgdGhlIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGFjdHVhbCBmaWxlbmFtZSBhcmUgb21pdHRlZCBpbiBvcmRlciB0byBtYWtlIGl0IG1vcmUgcmVhZGFibGUuCisgICAgICAgICAgICAgICAgICAgIEFsc28sIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHlvdSBhcmUgdXNpbmcsIHRoZSBleGFjdCBwYXRobmFtZQorICAgICAgICAgICAgICAgICAgICBmb3IgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQuLi48L2ZpbGVuYW1lPiBtaWdodCBkaWZmZXIuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgeW91IGNhbiBzZWUgdGhlIGtlcm5lbCBzZXR0aW5ncy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBlbnRyeSBzaG93cyB0aGF0IHN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzb3Igc3VwcG9ydAorICAgICAgICAgICAgICAgIGlzIG5vdCBzZXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIENPTkZJR19TTVAgaXMgbm90IHNldAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBnb29kIG1ldGhvZCB0byBpc29sYXRlIGNoYW5nZWQgY29uZmlndXJhdGlvbnMgaXMgdG8gdXNlIGEgY29tYmluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sIGFuZCBzaW1wbGUgc2hlbGwgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgQmVmb3JlIGNoYW5naW5nIGNvbmZpZ3VyYXRpb25zIHdpdGggPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwgY29weSB0aGUKKyAgICAgICAgICAgICAgICBleGlzdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGFuZCByZW5hbWUgaXQgdG8gc29tZXRoaW5nIGVsc2UsCisgICAgICAgICAgICAgICAgdXNlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG8gbWFrZQorICAgICAgICAgICAgICAgIGFzIG1hbnkgY2hhbmdlcyBhcyB5b3Ugd2FudCBhbmQgc2F2ZSB0aGVtLCB0aGVuIGNvbXBhcmUgdGhlIHJlbmFtZWQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYWdhaW5zdCB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSByZXN1bHRpbmcgZGlmZmVyZW5jZXMgYXMgeW91ciBiYXNlIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgIHRvIHBlcm1hbmVudGx5IHNhdmUgaW4geW91ciBrZXJuZWwgbGF5ZXIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gYW5kIGRvbid0IGp1c3QKKyAgICAgICAgICAgICAgICAgICAgcmVuYW1lIGl0LgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIG5lZWRzIGFuIGV4aXN0aW5nIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB0byB3b3JrLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLWRlZmNvbmZpZy1maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzIHNpbXBseSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiByZW5hbWVkIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICB0byByZXRhaW4gYSBrbm93biBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb25zIGZyb20gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gZHJhdyB0byBjcmVhdGUgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBPdXQtb2YtdGhlLWJveCwgdGhlIFlvY3RvIFByb2plY3QgbmV2ZXIgc2hpcHMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdXNlZCB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiwgc3RhcnQgd2l0aCBhCisgICAgICAgICAgICAgICAgY29tcGxldGUsIHdvcmtpbmcgTGludXgga2VybmVsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIENvcHkgdGhhdCBmaWxlIHRvIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB5b3VyIGxheWVyJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIGFuZCByZW5hbWUKKyAgICAgICAgICAgICAgICB0aGUgY29waWVkIGZpbGUgdG8gImRlZmNvbmZpZyIuCisgICAgICAgICAgICAgICAgVGhlbiwgYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gdGhlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaW4geW91ciBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gaG93IHRvIHNlYXJjaCBmb3IgdGhlIGZpbGUsIHdoaWxlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZXh0ZW5kcyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIChzZWFyY2ggZGlyZWN0b3JpZXMpIHRvIGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlyZWN0b3J5IHlvdSBjcmVhdGVkIHRvIGhvbGQgdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdGhlIGNvbmZpZ3VyYXRpb25zIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGJlZm9yZSBhcHBseWluZyBhbnkKKyAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGtlcm5lbCBjb25maWd1cmF0aW9uIGlzIGEgY29tYmluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGluIHRoZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgYW55IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byByZWFsaXplIHRoYXQgaWYgeW91IGhhdmUgYW55IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzLCB0aGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdGhlc2Ugb24gdG9wIG9mIGFuZAorICAgICAgICAgICAgICAgICAgICBhZnRlciBhcHBseWluZyB0aGUgZXhpc3RpbmcgZGVmY29uZmlnIGZpbGUgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9ucywgYm90aCBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZyYWdtZW50cyBhcmUgc2ltcGx5IGtlcm5lbCBvcHRpb25zIHRoYXQgYXBwZWFyIGluIGEgZmlsZQorICAgICAgICAgICAgICAgIHBsYWNlZCB3aGVyZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gZmluZCBhbmQgYXBwbHkgdGhlbS4KKyAgICAgICAgICAgICAgICBTeW50YWN0aWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBzdGF0ZW1lbnQgaXMgaWRlbnRpY2FsIHRvIHdoYXQgd291bGQgYXBwZWFyCisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG1wL3dvcmsvPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLTxyZXBsYWNlYWJsZT5yZWxlYXNlX3NwZWNpZmljX3N0cmluZzwvcmVwbGFjZWFibGU+L2xpbnV4LTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tPHJlcGxhY2VhYmxlPmJ1aWxkX3R5cGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgc2ltcGxlIHRvIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlzc3VpbmcgdGhlIGZvbGxvd2luZyBmcm9tIHRoZSBzaGVsbCBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgICAgIGZpbGUgbmFtZWQgPGZpbGVuYW1lPm15X3NtcC5jZmc8L2ZpbGVuYW1lPiB0aGF0IGVuYWJsZXMgbXVsdGktcHJvY2Vzc29yIHN1cHBvcnQKKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGtlcm5lbDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAiQ09ORklHX1NNUD15IiA+PiBteV9zbXAuY2ZnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBbGwgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBtdXN0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPiBleHRlbnNpb24gaW4gb3JkZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHJlY29nbml6ZSB0aGVtIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZXJlIGRvIHlvdSBwdXQgeW91ciBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzPworICAgICAgICAgICAgICAgIFlvdSBjYW4gcGxhY2UgdGhlc2UgZmlsZXMgaW4gdGhlIHNhbWUgYXJlYSBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwaWNrcyB1cCB0aGUgY29uZmlndXJhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICBhZGRzIGl0IHRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgYSBzZXQgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgICAgICAgICAgaW4gYSBmaWxlIGNhbGxlZCA8ZmlsZW5hbWU+bXljb25maWcuY2ZnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSWYgeW91IHB1dCB0aGF0IGZpbGUgaW5zaWRlIGEgZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4gdGhhdCByZXNpZGVzIGluIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFzIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZSBhbmQgdGhlbiBhZGQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IHN1Y2ggYXMgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIHRvIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZSwgdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgICAgICAgICAgd2lsbCBiZSBwaWNrZWQgdXAgYW5kIGFwcGxpZWQgd2hlbiB0aGUga2VybmVsIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL215Y29uZmlnLmNmZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB5b3UgY2FuIGdyb3VwIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaW50byBtdWx0aXBsZSBmaWxlcyBhbmQKKyAgICAgICAgICAgICAgICBuYW1lIHRoZW0gYWxsIGluIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY291bGQgZ3JvdXAgc2VwYXJhdGUgY29uZmlndXJhdGlvbnMgc3BlY2lmaWNhbGx5IGZvciBFdGhlcm5ldCBhbmQgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICBpbnRvIHRoZWlyIG93biBmaWxlcyBhbmQgYWRkIHRob3NlIGJ5IHVzaW5nIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgbGlrZSB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW4geW91ciBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2V0aC5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2dmeC5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ZpbmUtdHVuaW5nLXRoZS1rZXJuZWwtY29uZmlndXJhdGlvbi1maWxlJz4KKyAgICAgICAgICAgIDx0aXRsZT5GaW5lLVR1bmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbWFrZSBzdXJlIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaXMgYXMgbGVhbiBvciBlZmZpY2llbnQgYXMKKyAgICAgICAgICAgICAgICBwb3NzaWJsZSBieSByZWFkaW5nIHRoZSBvdXRwdXQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGF1ZGl0LAorICAgICAgICAgICAgICAgIG5vdGluZyBhbnkgaXNzdWVzLCBtYWtpbmcgY2hhbmdlcyB0byBjb3JyZWN0IHRoZSBpc3N1ZXMsIGFuZCB0aGVuIHJlcGVhdGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgcGFydCBvZiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrIHJ1bnMuCisgICAgICAgICAgICAgICAgVGhpcyB0YXNrIHZhbGlkYXRlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYnkgY2hlY2tpbmcgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFnYWluc3QgdGhlIGlucHV0IGZpbGVzLgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgY2hlY2ssIHRoZSB0YXNrIHByb2R1Y2VzIHdhcm5pbmcgbWVzc2FnZXMgZm9yIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBpc3N1ZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlcXVlc3RlZCBvcHRpb25zIHRoYXQgZGlkIG5vdCBtYWtlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IGFwcGVhciB0d2ljZSBpbiB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyYXRpb24gaXRlbXMgdGFnZ2VkIGFzICJyZXF1aXJlZCIgdGhhdCB3ZXJlIG92ZXJyaWRkZW4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgYm9hcmQgb3ZlcnJpZGVzIGEgbm9uLWJvYXJkIHNwZWNpZmljIG9wdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxpc3RlZCBvcHRpb25zIG5vdCB2YWxpZCBmb3IgdGhlIGtlcm5lbCBiZWluZyBwcm9jZXNzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIG9wdGlvbiBkb2VzIG5vdCBhcHBlYXIgYW55d2hlcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzayBjYW4KKyAgICAgICAgICAgICAgICAgICAgYWxzbyBvcHRpb25hbGx5IHJlcG9ydCBpZiBhbiBvcHRpb24gaXMgb3ZlcnJpZGRlbiBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBlYWNoIG91dHB1dCB3YXJuaW5nLCBhIG1lc3NhZ2UgcG9pbnRzIHRvIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgdGhlIG9wdGlvbnMgYW5kIGEgcG9pbnRlciB0byB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZyYWdtZW50IHRoYXQgZGVmaW5lcyB0aGVtLgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhlIGZpbGVzIGFyZSB0aGUga2V5IHRvIHN0cmVhbWxpbmluZyB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBzdHJlYW1saW5lIHRoZSBjb25maWd1cmF0aW9uLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXJ0IHdpdGggYSBmdWxsIGNvbmZpZ3VyYXRpb24gdGhhdCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGtub3cgd29ya3MgLSBpdCBidWlsZHMgYW5kIGJvb3RzIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgYmUgeW91ciBiYXNlbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VwYXJhdGVseSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGFrZSB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPiB0YXNrCisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyBhbmQgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcm9wIHZhbHVlcyB0aGF0IGFyZSByZWRlZmluZWQgaW4gdGhlIGZyYWdtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBkbyBub3QgY2hhbmdlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgZHJvcCB2YWx1ZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHl6ZSBhbmQgcG90ZW50aWFsbHkgcmVtb3ZlIG5vbi1ib2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSByZXBlYXRlZCBhbmQgaW52YWxpZCBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSB3b3JrZWQgdGhyb3VnaCB0aGUgb3V0cHV0IG9mIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYXVkaXQsIHlvdSBjYW4gcmUtcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ21lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFza3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgcmVzdWx0cyBvZiB5b3VyIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBtb3JlIGlzc3VlcywgeW91IGNhbiBkZWFsIHdpdGggdGhlbSBhcworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXRlcmF0aXZlbHkgd29ya2luZyB0aHJvdWdoIHN0ZXBzIHR3byB0aHJvdWdoIGZvdXIgZXZlbnR1YWxseSB5aWVsZHMKKyAgICAgICAgICAgICAgICBhIG1pbmltYWwsIHN0cmVhbWxpbmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBiZXN0IDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4sIHlvdSBjYW4gYnVpbGQgdGhlIExpbnV4CisgICAgICAgICAgICAgICAgWW9jdG8ga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBhdGNoaW5nLXRoZS1rZXJuZWwiPgorICAgICAgICA8dGl0bGU+UGF0Y2hpbmcgdGhlIEtlcm5lbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQYXRjaGluZyB0aGUga2VybmVsIGludm9sdmVzIGNoYW5naW5nIG9yIGFkZGluZyBjb25maWd1cmF0aW9ucyB0byBhbiBleGlzdGluZyBrZXJuZWwsCisgICAgICAgICAgICBjaGFuZ2luZyBvciBhZGRpbmcgcmVjaXBlcyB0byB0aGUga2VybmVsIHRoYXQgYXJlIG5lZWRlZCB0byBzdXBwb3J0IHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzLAorICAgICAgICAgICAgb3IgZXZlbiBhbHRlcmluZyB0aGUgc291cmNlIGNvZGUgaXRzZWxmLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICB1bmRlciA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IHRvIG1hbmFnZSBrZXJuZWwgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBTZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNtYW5hZ2luZy1rZXJuZWwtcGF0Y2hlcy1hbmQtY29uZmlnLWl0ZW1zLXdpdGgteW9jdG8ta2VybmVsJz5NYW5hZ2luZyBrZXJuZWwgUGF0Y2hlcyBhbmQgQ29uZmlnIEl0ZW1zIHdpdGggeW9jdG8ta2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApIERldmVsb3BlcidzIEd1aWRlIGZvcgorICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIHNpbXBsZSBwYXRjaCBieSBhZGRpbmcgc29tZSBRRU1VIGVtdWxhdG9yIGNvbnNvbGUKKyAgICAgICAgICAgIG91dHB1dCBhdCBib290IHRpbWUgdGhyb3VnaCA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cyBpbiB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IHNvdXJjZSBjb2RlIGZpbGUuCisgICAgICAgICAgICBBcHBseWluZyB0aGUgcGF0Y2ggYW5kIGJvb3RpbmcgdGhlIG1vZGlmaWVkIGltYWdlIGNhdXNlcyB0aGUgYWRkZWQKKyAgICAgICAgICAgIG1lc3NhZ2VzIHRvIGFwcGVhciBvbiB0aGUgZW11bGF0b3IncyBjb25zb2xlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXhhbXBsZSBhc3N1bWVzIGEgY2xlYW4gYnVpbGQgZXhpc3RzIGZvciB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgbWFjaGluZSBpbiBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGlzCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBhbmQgaXMgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgdGhlIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy40IGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWxzbywgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGF0Y2hpbmcgdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNhcHBseWluZy1wYXRjaGVzJz5BcHBseWluZyBQYXRjaGVzPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRlLWEtbGF5ZXItZm9yLXlvdXItY2hhbmdlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRlIGEgTGF5ZXIgZm9yIHlvdXIgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGVwIGlzIHRvIGNyZWF0ZSBhIGxheWVyIHNvIHlvdSBjYW4gaXNvbGF0ZSB5b3VyCisgICAgICAgICAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBSYXRoZXIgdGhhbiB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB0aGUgbGF5ZXIsIHRoaXMgZXhhbXBsZSBzdGVwcyB0aHJvdWdoIHRoZSBwcm9jZXNzCisgICAgICAgICAgICAgICAgYnkgaGFuZC4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiB0aGUgc2NyaXB0IHRoYXQgY3JlYXRlcyBhIGdlbmVyYWwKKyAgICAgICAgICAgICAgICBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIHR3byBjb21tYW5kcyBjcmVhdGUgYSBkaXJlY3RvcnkgeW91IGNhbiB1c2UgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgbWtkaXIgbWV0YS1teWxheWVyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENyZWF0aW5nIGEgZGlyZWN0b3J5IHRoYXQgZm9sbG93cyB0aGUgWW9jdG8gUHJvamVjdCBsYXllciBuYW1pbmcKKyAgICAgICAgICAgICAgICBjb252ZW50aW9ucyBzZXRzIHVwIHRoZSBsYXllciBmb3IgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRoZSBsYXllciBpcyB3aGVyZSB5b3UgcGxhY2UgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzLCBhcHBlbmQKKyAgICAgICAgICAgICAgICBmaWxlcywgYW5kIHBhdGNoIGZpbGVzLgorICAgICAgICAgICAgICAgIFRvIGxlYXJuIG1vcmUgYWJvdXQgY3JlYXRpbmcgYSBsYXllciBhbmQgZmlsbGluZyBpdCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGZpbGVzIHlvdSBuZWVkLCBzZWUgdGhlICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcKKyAgICAgICAgICAgICAgICBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdmaW5kaW5nLXRoZS1rZXJuZWwtc291cmNlLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPkZpbmRpbmcgdGhlIEtlcm5lbCBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEVhY2ggdGltZSB5b3UgYnVpbGQgYSBrZXJuZWwgaW1hZ2UsIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgZmV0Y2hlZAorICAgICAgICAgICAgICAgIGFuZCB1bnBhY2tlZCBpbnRvIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtTfS9saW51eAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdmaW5kaW5nLXRoZS10ZW1wb3Jhcnktc291cmNlLWNvZGUnPkZpbmRpbmcgVGVtcG9yYXJ5IFNvdXJjZSBDb2RlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgc291cmNlIGlzIGtlcHQgZHVyaW5nIGEgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHdlIGFyZSBnb2luZyB0byBwYXRjaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC9jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICBieSBhZGRpbmcgc29tZSBzaW1wbGUgY29uc29sZSA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cyB0aGF0IHdlIGNhbgorICAgICAgICAgICAgICAgIHNlZSB3aGVuIHdlIGJvb3QgdGhlIGltYWdlIHVzaW5nIFFFTVUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctdGhlLXBhdGNoJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUGF0Y2g8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUd28gbWV0aG9kcyBleGlzdCBieSB3aGljaCB5b3UgY2FuIGNyZWF0ZSB0aGUgcGF0Y2g6CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5RdWlsdDwvbGluaz4uCisgICAgICAgICAgICAgICAgRm9yIGtlcm5lbCBwYXRjaGVzLCB0aGUgR2l0IHdvcmtmbG93IGlzIG1vcmUgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGFzc3VtZXMgdGhlIEdpdCB3b3JrZmxvdyBhbmQgc2hvd3MgdGhlIHN0ZXBzIHNwZWNpZmljIHRvCisgICAgICAgICAgICAgICAgdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdG8gd2hlcmUgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBpcyBiZWZvcmUgbWFraW5nCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGVkaXRzIHRvIHRoZSA8ZmlsZW5hbWU+Y2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvbGludXgteW9jdG8tJHtQVn0tJHtQUn0vbGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgeW91IGFyZSB3b3JraW5nIGluIGFuIGVzdGFibGlzaGVkIEdpdCByZXBvc2l0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgYmUgaW4gdGhpcyBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gY29tbWl0IHlvdXIgY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNyZWF0ZSB0aGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPlRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudCB0aGUgdmVyc2lvbiBhbmQgcmV2aXNpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMgdGhlIEdpdCBtZXRhIGFuZCBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVzLCB3aGljaCBtYWtlIHRoZSBkaXJlY3RvcnkgbmFtZSBsb25nZXIgdGhhbiB5b3UgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RWRpdCB0aGUgc291cmNlIGZpbGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT5pbml0L2NhbGlicmF0ZS5jPC9maWxlbmFtZT4gZmlsZSB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHZvaWQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCisgICAgIHsKKyAgICAgICAgIHVuc2lnbmVkIGxvbmcgbHBqOworICAgICAgICAgc3RhdGljIGJvb2wgcHJpbnRlZDsKKyAgICAgICAgIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworICAgICAgICAgcHJpbnRrKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKyAgICAgICAgIHByaW50aygiKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuIik7CisgICAgICAgICBwcmludGsoIiogICAgICAgIEhFTExPIFlPQ1RPIEtFUk5FTCAgICAgICAgICpcbiIpOworICAgICAgICAgcHJpbnRrKCIqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4iKTsKKyAgICAgICAgIHByaW50aygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisKKyAgICAgCWlmIChwZXJfY3B1KGNwdV9sb29wc19wZXJfamlmZnksIHRoaXNfY3B1KSkgeworICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YWdlIGFuZCBjb21taXQgeW91ciBjaGFuZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBHaXQgY29tbWFuZHMgZGlzcGxheSB0aGUgbW9kaWZpZWQgZmlsZSwgc3RhZ2UgaXQsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgdGhlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IHN0YXR1cworICAgICAkIGdpdCBhZGQgaW5pdC9jYWxpYnJhdGUuYworICAgICAkIGdpdCBjb21taXQgLW0gImNhbGlicmF0ZTogQWRkIHByaW50ayBleGFtcGxlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBwYXRjaCBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEdpdCBjb21tYW5kIGNyZWF0ZXMgdGhlIGEgcGF0Y2ggZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjAwMDEtY2FsaWJyYXRlLUFkZC1wcmludGstZXhhbXBsZS5wYXRjaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtMQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXQtdXAteW91ci1sYXllci1mb3ItdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgWW91ciBMYXllciBmb3IgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+VGhlc2Ugc3RlcHMgZ2V0IHlvdXIgbGF5ZXIgc2V0IHVwIGZvciB0aGUgYnVpbGQ6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhZGRpdGlvbmFsIHN0cnVjdHVyZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIHRoZSBhZGRpdGlvbmFsIGxheWVyIHN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvbWV0YS1teWxheWVyCisgICAgICQgbWtkaXIgY29uZgorICAgICAkIG1rZGlyIHJlY2lwZXMta2VybmVsCisgICAgICQgbWtkaXIgcmVjaXBlcy1rZXJuZWwvbGludXgKKyAgICAgJCBta2RpciByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0bworICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaG9sZHMgeW91ciBjb25maWd1cmF0aW9uIGZpbGVzLCB3aGlsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaG9sZHMgeW91ciBhcHBlbmQgZmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHBhdGNoIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHRoZSBsYXllciBjb25maWd1cmF0aW9uIGZpbGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICisgICAgIEJCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisgICAgICMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorICAgICAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAibXlsYXllciIKKyAgICAgQkJGSUxFX1BBVFRFUk5fbXlsYXllciA9ICJeJHtMQVlFUkRJUn0vIgorICAgICBCQkZJTEVfUFJJT1JJVFlfbXlsYXllciA9ICI1IgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpY2UgPGZpbGVuYW1lPm15bGF5ZXI8L2ZpbGVuYW1lPiBhcyBwYXJ0IG9mIHRoZSBsYXN0IHRocmVlCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgdGhlIGtlcm5lbCByZWNpcGUgYXBwZW5kIGZpbGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUgdG8gdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjQuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1jYWxpYnJhdGUtQWRkLXByaW50ay1leGFtcGxlLnBhdGNoIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cyBlbmFibGUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZmluZCB0aGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIGFwcGVuZCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlB1dCB0aGUgcGF0Y2ggZmlsZSBpbiB5b3VyIGxheWVyPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRoZSA8ZmlsZW5hbWU+MDAwMS1jYWxpYnJhdGUtQWRkLXByaW50ay1leGFtcGxlLnBhdGNoPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0LXVwLWZvci10aGUtYnVpbGQnPgorICAgICAgICAgICAgPHRpdGxlPlNldCBVcCBmb3IgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRG8gdGhlIGZvbGxvd2luZyB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIHBhcmFtZXRlcnMgYXJlIHNldCB1cCBmb3IgdGhlIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgT25jZSB5b3Ugc2V0IHVwIHRoZXNlIGJ1aWxkIHBhcmFtZXRlcnMsIHRoZXkgZG8gbm90IGhhdmUgdG8gY2hhbmdlIHVubGVzcyB5b3UKKyAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUgeW91IGFyZSBidWlsZGluZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIGZvciB0aGUgY29ycmVjdCB0YXJnZXQgYXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+IFlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gd2l0aGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LCB3aGljaCBzcGVjaWZpZXMgYSAzMi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+IEFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUgc3VpdGFibGUgZm9yIHRoZSBRRU1VIGVtdWxhdG9yLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPklkZW50aWZ5IHlvdXIgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjo8L2VtcGhhc2lzPiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG5lZWRzIHRvIGhhdmUgdGhlIHBhdGggdG8geW91ciBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGNvbnRhaW5zIHBhdGhzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcDwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgcGF0aCB0byB5b3VyIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEteW9jdG8gXAorICAgICAgICRIT01FL3Bva3kvbWV0YS15b2N0by1ic3AgXAorICAgICAgICRIT01FL3Bva3kvbWV0YS1teWxheWVyIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtdGhlLW1vZGlmaWVkLXFlbXUta2VybmVsLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZCB0aGUgTW9kaWZpZWQgUUVNVSBLZXJuZWwgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGJ1aWxkIHlvdXIgbW9kaWZpZWQga2VybmVsIGltYWdlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CZSBzdXJlIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgaW5pdGlhbGl6ZWQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgZW52aXJvbm1lbnQgc2hvdWxkIGJlIHNldCB1cCBzaW5jZSB5b3UgcHJldmlvdXNseSBzb3VyY2VkCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgaXQgaXMgbm90LCBzb3VyY2UgdGhlIHNjcmlwdCBhZ2FpbiBmcm9tIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgc291cmNlICZPRV9JTklUX0ZJTEU7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGVhbiB1cDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBjbGVhbiB0aGUgc2hhcmVkIHN0YXRlIG91dCBieSB1c2luZyBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gZnJvbSB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW5zc3RhdGUgbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyIHJlbW92ZSBhbnkgZmlsZXMgYnkgaGFuZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXMgdXNlIHRoZSB2YXJpb3VzIEJpdEJha2UgY2xlYW4gdGFza3MgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciBvdXQgcHJldmlvdXMgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgY2xlYW4gdGFza3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuJz48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuYWxsJz48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuc3N0YXRlJz48ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGFsbCBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgaW1hZ2U8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIGJ1aWxkIHRoZSBrZXJuZWwgaW1hZ2UgdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWsgbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jvb3QtdGhlLWltYWdlLWFuZC12ZXJpZnkteW91ci1jaGFuZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Cb290IHRoZSBJbWFnZSBhbmQgVmVyaWZ5IFlvdXIgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGJvb3QgdGhlIGltYWdlIGFuZCBhbGxvdyB5b3UgdG8gc2VlIHRoZSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJvb3QgdGhlIGltYWdlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBCb290IHRoZSBtb2RpZmllZCBpbWFnZSBpbiB0aGUgUUVNVSBlbXVsYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlZlcmlmeSB0aGUgY2hhbmdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGludG8gdGhlIG1hY2hpbmUgdXNpbmcgPGZpbGVuYW1lPnJvb3Q8L2ZpbGVuYW1lPiB3aXRoIG5vIHBhc3N3b3JkIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBzaGVsbCBjb21tYW5kIHRvIHNjcm9sbCB0aHJvdWdoIHRoZSBjb25zb2xlJ3MgYm9vdCBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgZG1lc2cgfCBsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNlZSB0aGUgcmVzdWx0cyBvZiB5b3VyIDxmaWxlbmFtZT5wcmludGs8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBvdXRwdXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYWtpbmctaW1hZ2VzLW1vcmUtc2VjdXJlJz4KKyAgICAgICAgPHRpdGxlPk1ha2luZyBJbWFnZXMgTW9yZSBTZWN1cmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VjdXJpdHkgaXMgb2YgaW5jcmVhc2luZyBjb25jZXJuIGZvciBlbWJlZGRlZCBkZXZpY2VzLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGlzc3VlcyBhbmQgcHJvYmxlbXMgZGlzY3Vzc2VkIGluIGp1c3QgdGhpcworICAgICAgICAgICAgc2FtcGxpbmcgb2Ygd29yayBmb3VuZCBhY3Jvc3MgdGhlIEludGVybmV0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93d3cuc2NobmVpZXIuY29tL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMS9zZWN1cml0eV9yaXNrc185Lmh0bWwnPlNlY3VyaXR5IFJpc2tzIG9mIEVtYmVkZGVkIFN5c3RlbXM8L3VsaW5rPiI8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBieSBCcnVjZSBTY2huZWllcgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cDovL2ludGVybmV0Y2Vuc3VzMjAxMi5iaXRidWNrZXQub3JnL3BhcGVyLmh0bWwnPkludGVybmV0IENlbnN1cyAyMDEyPC91bGluaz4iPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgYnkgQ2FybmEgQm90bmV0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9lbGludXgub3JnL2ltYWdlcy82LzZmL1NlY3VyaXR5LWlzc3Vlcy5wZGYnPlNlY3VyaXR5IElzc3VlcyBmb3IgRW1iZWRkZWQgRGV2aWNlczwvdWxpbms+IjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIGJ5IEpha2UgRWRnZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93d3cubmNjZ3JvdXAuY29tL21lZGlhLzE4NDc1L2V4cGxvaXRpbmdfc2VjdXJpdHlfZ2F0ZXdheXNfdmlhX3RoZWlyX3dlYl9pbnRlcmZhY2VzLnBkZic+VGhleSBvdWdodCB0byBrbm93IGJldHRlcjogRXhwbG9pdGluZyBTZWN1cml0eSBHYXRld2F5cyB2aWEgdGhlaXIgV2ViIEludGVyZmFjZXM8L3VsaW5rPiI8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBieSBCZW4gV2lsbGlhbXMKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBzZWN1cmluZyB5b3VyIGltYWdlIGlzIG9mIGNvbmNlcm4sIHRoZXJlIGFyZSBzdGVwcywgdG9vbHMsCisgICAgICAgICAgICBhbmQgdmFyaWFibGVzIHRoYXQgeW91IGNhbiBjb25zaWRlciB0byBoZWxwIHlvdSByZWFjaCB0aGUKKyAgICAgICAgICAgIHNlY3VyaXR5IGdvYWxzIHlvdSBuZWVkIGZvciB5b3VyIHBhcnRpY3VsYXIgZGV2aWNlLgorICAgICAgICAgICAgTm90IGFsbCBzaXR1YXRpb25zIGFyZSBpZGVudGljYWwgd2hlbiBpdCBjb21lcyB0byBtYWtpbmcgYW4KKyAgICAgICAgICAgIGltYWdlIHNlY3VyZS4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgZ3VpZGFuY2UgYW5kIHN1Z2dlc3Rpb25zCisgICAgICAgICAgICBmb3IgY29uc2lkZXJhdGlvbiB3aGVuIHlvdSB3YW50IHRvIG1ha2UgeW91ciBpbWFnZSBtb3JlIHNlY3VyZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHNlY3VyaXR5IHJlcXVpcmVtZW50cyBhbmQgcmlza3MgYXJlCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IGZvciBldmVyeSB0eXBlIG9mIGRldmljZSwgdGhpcyBzZWN0aW9uIGNhbm5vdAorICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBjb21wbGV0ZSByZWZlcmVuY2Ugb24gc2VjdXJpbmcgeW91ciBjdXN0b20gT1MuCisgICAgICAgICAgICAgICAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWxzbyBjb25zdWx0IG90aGVyIHNvdXJjZXMKKyAgICAgICAgICAgICAgICBvZiBpbmZvcm1hdGlvbiBvbiBlbWJlZGRlZCBMaW51eCBzeXN0ZW0gaGFyZGVuaW5nIGFuZCBvbgorICAgICAgICAgICAgICAgIHNlY3VyaXR5LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dlbmVyYWwtY29uc2lkZXJhdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPkdlbmVyYWwgQ29uc2lkZXJhdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBHZW5lcmFsIGNvbnNpZGVyYXRpb25zIGV4aXN0IHRoYXQgaGVscCB5b3UgY3JlYXRlIG1vcmUKKyAgICAgICAgICAgICAgICBzZWN1cmUgaW1hZ2VzLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzdWdnZXN0aW9ucyB0byBoZWxwCisgICAgICAgICAgICAgICAgbWFrZSB5b3VyIGRldmljZSBtb3JlIHNlY3VyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTY2FuIGFkZGl0aW9uYWwgY29kZSB5b3UgYXJlIGFkZGluZyB0byB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBhcHBsaWNhdGlvbiBjb2RlKSBieSB1c2luZyBzdGF0aWMgYW5hbHlzaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgcG90ZW50aWFsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eSBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBheSBwYXJ0aWN1bGFyIGF0dGVudGlvbiB0byB0aGUgc2VjdXJpdHkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgd2ViLWJhc2VkIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldlYiBpbnRlcmZhY2VzIHR5cGljYWxseSBuZWVkIHRvIHBlcmZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluaXN0cmF0aXZlIGZ1bmN0aW9ucyBhbmQgdGVuZCB0byBuZWVkIHRvIHJ1biB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICBlbGV2YXRlZCBwcml2aWxlZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGNvbnNlcXVlbmNlcyByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJmYWNlJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5IGJlY29taW5nIGNvbXByb21pc2VkIGNhbiBiZSBzZXJpb3VzLgorICAgICAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgY29tbW9uIHdlYiB2dWxuZXJhYmlsaXRpZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3Mtc2l0ZS1zY3JpcHRpbmcgKFhTUyksIHVudmFsaWRhdGVkIGlucHV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BcyB3aXRoIHN5c3RlbSBwYXNzd29yZHMsIHRoZSBkZWZhdWx0IGNyZWRlbnRpYWxzCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWNjZXNzaW5nIGEgd2ViLWJhc2VkIGludGVyZmFjZSBzaG91bGQgbm90IGJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBhY3Jvc3MgYWxsIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGlmIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBhcyBpdCBjYW4gYmUgYXNzdW1lZCB0aGF0IG1hbnkgZW5kLXVzZXJzCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBjaGFuZ2UgdGhlIGNyZWRlbnRpYWxzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlIHlvdSBjYW4gdXBkYXRlIHRoZSBzb2Z0d2FyZSBvbiB0aGUgZGV2aWNlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBtaXRpZ2F0ZSB2dWxuZXJhYmlsaXRpZXMgZGlzY292ZXJlZCBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25zaWRlcmF0aW9uIGVzcGVjaWFsbHkgYXBwbGllcyB3aGVuIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBpcyBuZXR3b3JrLWVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBFbnN1cmUgeW91IHJlbW92ZSBvciBkaXNhYmxlIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgcHJvZHVjaW5nIHRoZSBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZG8gdGhpcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbnNpZGVyYXRpb25zLXNwZWNpZmljLXRvLXRoZS1vcGVuZW1iZWRkZWQtYnVpbGQtc3lzdGVtJz5Db25zaWRlcmF0aW9ucyBTcGVjaWZpYyB0byB0aGUgT3BlbkVtYmVkZGVkIEJ1aWxkIFN5c3RlbTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSB5b3UgaGF2ZSBubyBuZXR3b3JrIHNlcnZpY2VzIGxpc3RlbmluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSBhbnkgc29mdHdhcmUgZnJvbSB0aGUgaW1hZ2UgdGhhdCBpcyBub3QgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHNlY3VyZSBib290IGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4geW91ciBkZXZpY2Ugc3VwcG9ydHMgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZWN1cml0eS1mbGFncyc+CisgICAgICAgICAgICA8dGl0bGU+U2VjdXJpdHkgRmxhZ3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgc2VjdXJpdHkgZmxhZ3MgdGhhdCB5b3UgY2FuIGVuYWJsZSB0aGF0CisgICAgICAgICAgICAgICAgaGVscCBtYWtlIHlvdXIgYnVpbGQgb3V0cHV0IG1vcmUgc2VjdXJlLgorICAgICAgICAgICAgICAgIFRoZSBzZWN1cml0eSBmbGFncyBhcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgcmVjaXBlLCBjZXJ0YWluIHNlY3VyaXR5IGZsYWdzIGFyZSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+Cis8IS0tCisgICAgICAgICAgICAgICAgVGhlIEdDQy9MRCBmbGFncyBpbiA8ZmlsZW5hbWU+c2VjdXJpdHlfZmxhZ3MuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBlbmFibGUgbW9yZSBzZWN1cmUgY29kZSBnZW5lcmF0aW9uLgorICAgICAgICAgICAgICAgIEJ5IGluY2x1ZGluZyB0aGUgPGZpbGVuYW1lPnNlY3VyaXR5X2ZsYWdzLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSwgeW91IGVuYWJsZSBmbGFncyB0byB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciB0aGF0IGNhdXNlCisgICAgICAgICAgICAgICAgdGhlbSB0byBnZW5lcmF0ZSBtb3JlIHNlY3VyZSBjb2RlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgR0NDL0xEIGZsYWdzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LWxzYjwvZmlsZW5hbWU+IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CistLT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgaW4geW91ciBjdXN0b20KKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlIHRvIGVuYWJsZSB0aGUgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICBjb21waWxlciBhbmQgbGlua2VyIGZsYWdzIGZvciB5b3VyIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25zaWRlcmF0aW9ucy1zcGVjaWZpYy10by10aGUtb3BlbmVtYmVkZGVkLWJ1aWxkLXN5c3RlbSc+CisgICAgICAgICAgICA8dGl0bGU+Q29uc2lkZXJhdGlvbnMgU3BlY2lmaWMgdG8gdGhlIE9wZW5FbWJlZGRlZCBCdWlsZCBTeXN0ZW08L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHRha2Ugc29tZSBzdGVwcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIG1ha2UgeW91ciBpbWFnZXMgbW9yZSBzZWN1cmU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlICJkZWJ1Zy10d2Vha3MiIGlzIG5vdCBvbmUgb2YgeW91ciBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyBhIG5ldyBwcm9qZWN0LCB0aGUgZGVmYXVsdCBpcyB0byBwcm92aWRlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbiBpbml0aWFsIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHRoaXMgZmVhdHVyZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZSB3aXRoIHRoZSBsaW5lOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGRpc2FibGUgdGhhdCBmZWF0dXJlLCBzaW1wbHkgY29tbWVudCBvdXQgdGhhdCBsaW5lIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBkb2VzIG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVidWctdHdlYWtzIiBiZWZvcmUgcHJvZHVjaW5nIHlvdXIgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIGxlYXZpbmcgdGhpcyBpbiBwbGFjZSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCBwYXNzd29yZCBhcyBibGFuaywgd2hpY2ggbWFrZXMgbG9nZ2luZyBpbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZyBvciBpbnNwZWN0aW9uIGVhc3kgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBidXQgYWxzbyBtZWFucyBhbnlvbmUgY2FuIGVhc2lseSBsb2cgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBwcm9kdWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHNldCBhIHJvb3QgcGFzc3dvcmQgZm9yIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFsc28gdG8gc2V0IHBhc3N3b3JkcyBmb3IgYW55IGV4dHJhIHVzZXJzIHlvdSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkIChlLmcuIGFkbWluaXN0cmF0aXZlIG9yIHNlcnZpY2UgdHlwZSB1c2VycykuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgcGFzc3dvcmRzIGZvciBtdWx0aXBsZSBpbWFnZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLCB5b3Ugc2hvdWxkIG5vdCBkdXBsaWNhdGUgcGFzc3dvcmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBzZXQgdXAgcGFzc3dvcmRzLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz48ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB3aGljaCBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byBzZXQgdXAgYm90aCByb290IGFuZCB1c2VyCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz48ZmlsZW5hbWU+ZXh0cmF1c2Vycy5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGFkZGluZyBleHRyYSB1c2VyIGFjY291bnRzIG9yIHNldHRpbmcgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgcGFzc3dvcmQsIGJlIGNhdXRpb3VzIGFib3V0IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBwYXNzd29yZCBvbiBldmVyeSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHRoaXMsIGFuZCB0aGUgcGFzc3dvcmQgeW91IGhhdmUgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXhwb3NlZCwgdGhlbiBldmVyeSBkZXZpY2UgaXMgbm93IHBvdGVudGlhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJvbWlzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdGhpcyBhY2Nlc3MgYnV0IHdhbnQgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHksIGNvbnNpZGVyIHNldHRpbmcgYSBkaWZmZXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tIHBhc3N3b3JkIGZvciBlYWNoIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBkbyB0aGlzIGFzIGEgc2VwYXJhdGUgc3RlcCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBkZXBsb3kgdGhlIGltYWdlIG9udG8gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBlbmFibGluZyBhIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbCAoTUFDKQorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrIHN1Y2ggYXMgU01BQ0sgb3IgU0VMaW51eCBhbmQgdHVuaW5nIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5IGZvciB5b3VyIGRldmljZSdzIHVzYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXNlbGludXgvJz48ZmlsZW5hbWU+bWV0YS1zZWxpbnV4PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9vbHMtZm9yLWhhcmRlbmluZy15b3VyLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Ub29scyBmb3IgSGFyZGVuaW5nIFlvdXIgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyB0b29scyBmb3IgbWFraW5nIHlvdXIgaW1hZ2UKKyAgICAgICAgICAgICAgICBtb3JlIHNlY3VyZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2UgdG9vbHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc2VjdXJpdHk8L2ZpbGVuYW1lPiBsYXllciBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmcteW91ci1vd24tZGlzdHJpYnV0aW9uJz4KKyAgICAgICAgPHRpdGxlPkNyZWF0aW5nIFlvdXIgT3duIERpc3RyaWJ1dGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBidWlsZCBhbiBpbWFnZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBhbmQKKyAgICAgICAgICAgIGRvIG5vdCBhbHRlciBhbnkgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+LCB5b3UgYXJlIGNyZWF0aW5nIGEKKyAgICAgICAgICAgIFBva3kgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gZ2FpbiBtb3JlIGNvbnRyb2wgb3ZlciBwYWNrYWdlIGFsdGVybmF0aXZlCisgICAgICAgICAgICBzZWxlY3Rpb25zLCBjb21waWxlLXRpbWUgb3B0aW9ucywgYW5kIG90aGVyIGxvdy1sZXZlbAorICAgICAgICAgICAgY29uZmlndXJhdGlvbnMsIHlvdSBjYW4gY3JlYXRlIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gY3JlYXRlIHlvdXIgb3duIGRpc3RyaWJ1dGlvbiwgdGhlIGJhc2ljIHN0ZXBzIGNvbnNpc3Qgb2YKKyAgICAgICAgICAgIGNyZWF0aW5nIHlvdXIgb3duIGRpc3RyaWJ1dGlvbiBsYXllciwgY3JlYXRpbmcgeW91ciBvd24KKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGVuIGFkZGluZyBhbnkgbmVlZGVkCisgICAgICAgICAgICBjb2RlIGFuZCBNZXRhZGF0YSB0byB0aGUgbGF5ZXIuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIHByb3ZpZGUgc29tZSBtb3JlIGRldGFpbDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBsYXllciBmb3IgeW91ciBuZXcgZGlzdHJvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSB5b3VyIGRpc3RyaWJ1dGlvbiBsYXllciBzbyB0aGF0IHlvdSBjYW4ga2VlcCB5b3VyCisgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhIGFuZCBjb2RlIGZvciB0aGUgZGlzdHJpYnV0aW9uIHNlcGFyYXRlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgYW5kIHVzZSB5b3VyIG93bgorICAgICAgICAgICAgICAgICAgICBsYXllciBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgeW91ciBvd24gbGF5ZXIgYXMgY29tcGFyZWQgdG8ganVzdCBwbGFjaW5nCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGluIGEgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgbWFrZXMgaXQgZWFzaWVyIHRvIHJlcHJvZHVjZSB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBjb25maWd1cmF0aW9uIHdoZW4gdXNpbmcgbXVsdGlwbGUgYnVpbGQgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUteW9jdG8tbGF5ZXItc2NyaXB0Jz5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWxheWVyIFNjcmlwdDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBxdWlja2x5IHNldCB1cCBhIGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSBuZWVkcyB0byBiZSBjcmVhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29uZi9kaXN0cm88L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gbmFtZSBpdCB1c2luZyB5b3VyIGRpc3RyaWJ1dGlvbiBuYW1lCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5teWRpc3Ryby5jb25mPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBkZXRlcm1pbmVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBzcGxpdCBvdXQgcGFydHMgb2YgeW91ciBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgaW50byBpbmNsdWRlIGZpbGVzIGFuZCB0aGVuICJyZXF1aXJlIiB0aGVtIGZyb20gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwbGFjZSB0aGUgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YKKyAgICAgICAgICAgICAgICAgICAgeW91ciBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSB1c2FnZSBvZiBpbmNsdWRlIGZpbGVzIHdvdWxkIGJlIHRvCisgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlIG91dCB0aGUgc2VsZWN0aW9uIG9mIGRlc2lyZWQgdmVyc2lvbiBhbmQgcmV2aXNpb25zCisgICAgICAgICAgICAgICAgICAgIGZvciBpbmRpdmlkdWFsIHJlY2lwZXMuCis8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdXIgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIHNldCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX05BTUUnPjxmaWxlbmFtZT5ESVNUUk9fTkFNRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19WRVJTSU9OJz48ZmlsZW5hbWU+RElTVFJPX1ZFUlNJT048L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgb3B0aW9uYWwgYW5kIHlvdSB0eXBpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZW0gZnJvbSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0VYVFJBX1JERVBFTkRTJz48ZmlsZW5hbWU+RElTVFJPX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTJz48ZmlsZW5hbWU+RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVENMSUJDJz48ZmlsZW5hbWU+VENMSUJDPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBiYXNlIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHZlcnkgYmFzaWMgY29uZmlndXJhdGlvbiBmcm9tIE9FLUNvcmUsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVmZXJlbmNlIGFuZCBqdXN0IGluY2x1ZGUgdmFyaWFibGVzIHRoYXQgZGlmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBjb21wYXJlZCB0byA8ZmlsZW5hbWU+ZGVmYXVsdHNldHVwLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gY3JlYXRlIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgZnJvbSBzY3JhdGNoIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgb3IgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIG90aGVyIGRpc3RyaWJ1dGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgUG9reSBvciBBbmdzdHJvbSBhcyByZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgICA8L3RpcD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByb3ZpZGUgbWlzY2VsbGFuZW91cyB2YXJpYWJsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBkZWZpbmUgYW55IG90aGVyIHZhcmlhYmxlcyBmb3Igd2hpY2ggeW91IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgZGVmYXVsdCBvciBlbmZvcmNlIGFzIHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGluY2x1ZGUgbmVhcmx5IGFueSB2YXJpYWJsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZXMgeW91IHVzZSBhcmUgbm90IGxpbWl0ZWQgdG8gdGhlIGxpc3QgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGJ1bGxldGVkIGl0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb2ludCB0byBZb3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8geW91ciBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3VyIGRpc3RyaWJ1dGlvbidzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcworICAgICAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+bXlkaXN0cm8uY29uZjwvZmlsZW5hbWU+LCB0aGVuIHlvdSBwb2ludAorICAgICAgICAgICAgICAgICAgICB0byBpdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RSTyA9ICJteWRpc3RybyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QWRkIG1vcmUgdG8gdGhlIGxheWVyIGlmIG5lY2Vzc2FyeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVc2UgeW91ciBsYXllciB0byBob2xkIG90aGVyIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgcmVjaXBlcyBmb3IgaW5zdGFsbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Ryby1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW5zdGFsbGVkIGJ5IGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGRpc3Ryby1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgaW5jbHVkZWQgYnkgYW4gZXhpc3RpbmcgcmVjaXBlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGFuIGFwcGVuZCBmaWxlICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRob3NlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFuZCByZWNvbW1lbmRhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBob3cgdG8gYWRkIHJlY2lwZXMgdG8geW91ciBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy15b3VyLW93bi1sYXllcic+Q3JlYXRpbmcgWW91ciBPd24gTGF5ZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdiZXN0LXByYWN0aWNlcy10by1mb2xsb3ctd2hlbi1jcmVhdGluZy1sYXllcnMnPkJlc3QgUHJhY3RpY2VzIHRvIEZvbGxvdyBXaGVuIENyZWF0aW5nIExheWVyczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGFueSBpbWFnZSByZWNpcGVzIHRoYXQgYXJlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8geW91ciBkaXN0cmlidXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGEgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlIGZvciBhIGJyYW5kZWQgc3BsYXNoIHNjcmVlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYXBwZW5kIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGFueSBvdGhlciBhcHBlbmQgZmlsZXMgdG8gbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBjaGFuZ2VzIHRoYXQgYXJlIHNwZWNpZmljIHRvIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtY3VzdG9tLXRlbXBsYXRlLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgcHJvZHVjaW5nIHlvdXIgb3duIGN1c3RvbWl6ZWQgdmVyc2lvbgorICAgICAgICAgICAgb2YgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgdXNlIGJ5IG90aGVyIHVzZXJzLCB5b3UgbWlnaHQKKyAgICAgICAgICAgIHdhbnQgdG8gY3VzdG9taXplIHRoZSBtZXNzYWdlIHNob3duIGJ5IHRoZSBzZXR1cCBzY3JpcHQgb3IKKyAgICAgICAgICAgIHlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBmaWxlcyAoaS5lLgorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4pIHRoYXQgYXJlIGNyZWF0ZWQgaW4KKyAgICAgICAgICAgIGEgbmV3IGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB0byBsb2NhdGUgdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgZnJvbSB3aGljaCBpdCBnYXRoZXJzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gdGhhdCB1bHRpbWF0ZWx5CisgICAgICAgICAgICBlbmRzIHVwIGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3RvcnknczwvbGluaz4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IGlzIHNldCBhcworICAgICAgICAgICAgZm9sbG93cyBpbiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURU1QTEFURUNPTkY9JHtURU1QTEFURUNPTkY6LW1ldGEteW9jdG8vY29uZn0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gdG8gZmluZCB0ZW1wbGF0ZXMKKyAgICAgICAgICAgIGZyb20gd2hpY2ggdG8gYnVpbGQgc29tZSBrZXkgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIElmIHlvdSBsb29rIGF0IHRoaXMgZGlyZWN0b3J5LCB5b3Ugd2lsbCBzZWUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZXNlIGZpbGVzIHRvIGZvcm0gdGhlIHJlc3BlY3RpdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgYW5kIGRpc3BsYXkgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgIEJpdEJha2UgdGFyZ2V0cyB3aGVuIHJ1bm5pbmcgdGhlIHNldHVwIHNjcmlwdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGgKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIHlvdSB3YW50IHVzZWQgd2l0aGluIGV2ZXJ5IG5ldworICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LCBzaW1wbHkgc2V0IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIHlvdXIgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LnRlbXBsYXRlY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGluIHRoZQorICAgICAgICAgICAgdG9wLWxldmVsCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgZm9sZGVyIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgRWRpdCB0aGUgPGZpbGVuYW1lPi50ZW1wbGF0ZWNvbmY8L2ZpbGVuYW1lPiBzbyB0aGF0IGl0IGNhbiBsb2NhdGUKKyAgICAgICAgICAgIHlvdXIgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZXN0IHByYWN0aWNlcyBkaWN0YXRlIHRoYXQgeW91IHNob3VsZCBrZWVwIHlvdXIKKyAgICAgICAgICAgIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IGluIHlvdXIgY3VzdG9tIGRpc3RyaWJ1dGlvbiBsYXllci4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEgbGF5ZXIgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBsb2NhdGVkIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFuZCB5b3Ugd2FudCB5b3VyIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXljb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgPGZpbGVuYW1lPi50ZW1wbGF0ZWNvbmY8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzCisgICAgICAgICAgICBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gbG9vayBpbiB5b3VyIGRpcmVjdG9yeQorICAgICAgICAgICAgYW5kIGJhc2UgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZXMgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zYW1wbGU8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzIGl0IGZpbmRzLgorICAgICAgICAgICAgVGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgKGkuZS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IHVsdGltYXRlbHkgc3RpbGwgZW5kIHVwIGluCisgICAgICAgICAgICB5b3VyIEJ1aWxkIERpcmVjdG9yeSwgYnV0IHRoZXkgYXJlIGJhc2VkIG9uIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURU1QTEFURUNPTkY9JHtURU1QTEFURUNPTkY6LW1ldGEtbXlsYXllci9teWNvbmZ9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzaWRlIGZyb20gdGhlIDxmaWxlbmFtZT4qLnNhbXBsZTwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZXMsCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gYWxzbyByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgZGVmYXVsdCA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIHNjcmlwdHMgdGhhdCBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgdXNlIHRoaXMgZmlsZSB0byBkaXNwbGF5IEJpdEJha2UgdGFyZ2V0cyBhcyBwYXJ0IG9mIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgICAgIEN1c3RvbWl6aW5nIHRoaXMgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gZmlsZSBpcyBhCisgICAgICAgICAgICBnb29kIHdheSB0byBtYWtlIHN1cmUgeW91ciBsaXN0IG9mIGN1c3RvbSB0YXJnZXRzIGFwcGVhcnMKKyAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIHNjcmlwdCdzIG91dHB1dC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBpcyB0aGUgZGVmYXVsdCBsaXN0IG9mIHRhcmdldHMgZGlzcGxheWVkIGFzIGEgcmVzdWx0IG9mCisgICAgICAgICAgICBydW5uaW5nIGVpdGhlciBvZiB0aGUgc2V0dXAgc2NyaXB0czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgWW91IGNhbiBub3cgcnVuICdiaXRiYWtlICZsdDt0YXJnZXQmZ3Q7JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgbGlzdGVkIGNvbW1vbiB0YXJnZXRzIGlzIGFzIGVhc3kgYXMgZWRpdGluZyB5b3VyCisgICAgICAgICAgICB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGluIHlvdXIKKyAgICAgICAgICAgIGN1c3RvbSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBhbmQgbWFraW5nIHN1cmUgeW91CisgICAgICAgICAgICBoYXZlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBzZXQgdG8geW91ciBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctYS10aW55LXN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5CdWlsZGluZyBhIFRpbnkgU3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFZlcnkgc21hbGwgZGlzdHJpYnV0aW9ucyBoYXZlIHNvbWUgc2lnbmlmaWNhbnQgYWR2YW50YWdlcyBzdWNoCisgICAgICAgICAgICBhcyByZXF1aXJpbmcgbGVzcyBvbi1kaWUgb3IgaW4tcGFja2FnZSBtZW1vcnkgKGNoZWFwZXIpLCBiZXR0ZXIKKyAgICAgICAgICAgIHBlcmZvcm1hbmNlIHRocm91Z2ggZWZmaWNpZW50IGNhY2hlIHVzYWdlLCBsb3dlciBwb3dlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgIGR1ZSB0byBsZXNzIG1lbW9yeSwgZmFzdGVyIGJvb3QgdGltZXMsIGFuZCByZWR1Y2VkIGRldmVsb3BtZW50CisgICAgICAgICAgICBvdmVyaGVhZC4KKyAgICAgICAgICAgIFNvbWUgcmVhbC13b3JsZCBleGFtcGxlcyB3aGVyZSBhIHZlcnkgc21hbGwgZGlzdHJpYnV0aW9uIGdpdmVzCisgICAgICAgICAgICB5b3UgZGlzdGluY3QgYWR2YW50YWdlcyBhcmUgZGlnaXRhbCBjYW1lcmFzLCBtZWRpY2FsIGRldmljZXMsCisgICAgICAgICAgICBhbmQgc21hbGwgaGVhZGxlc3Mgc3lzdGVtcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIHRoYXQgc2hvd3MgeW91IGhvdyB5b3UgY2FuCisgICAgICAgICAgICB0cmltIHlvdXIgZGlzdHJpYnV0aW9uIHRvIGV2ZW4gc21hbGxlciBzaXplcyB0aGFuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3ktdGlueTwvZmlsZW5hbWU+IGRpc3RyaWJ1dGlvbiwgd2hpY2ggaXMgYXJvdW5kCisgICAgICAgICAgICA1IE1ieXRlcywgdGhhdCBjYW4gYmUgYnVpbHQgb3V0LW9mLXRoZS1ib3ggdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndGlueS1zeXN0ZW0tb3ZlcnZpZXcnPgorICAgICAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByZXNlbnRzIHRoZSBvdmVyYWxsIHN0ZXBzIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgY29uc2lkZXIgYW5kIHBlcmZvcm0gdG8gY3JlYXRlIGRpc3RyaWJ1dGlvbnMgd2l0aCBzbWFsbGVyCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtcywgYWNoaWV2ZSBmYXN0ZXIgYm9vdCB0aW1lcywgbWFpbnRhaW4geW91ciBjcml0aWNhbAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIGFuZCBhdm9pZCBpbml0aWFsIFJBTSBkaXNrczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnb2Fscy1hbmQtZ3VpZGluZy1wcmluY2lwbGVzJz5EZXRlcm1pbmUgeW91ciBnb2FscyBhbmQgZ3VpZGluZyBwcmluY2lwbGVzLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kLXdoYXQtZ2l2ZXMteW91ci1pbWFnZS1zaXplJz5VbmRlcnN0YW5kIHdoYXQgY29udHJpYnV0ZXMgdG8geW91ciBpbWFnZSBzaXplLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0cmltLXRoZS1yb290LWZpbGVzeXN0ZW0nPlJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0cmltLXRoZS1rZXJuZWwnPlJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZW1vdmUtcGFja2FnZS1tYW5hZ2VtZW50LXJlcXVpcmVtZW50cyc+RWxpbWluYXRlIHBhY2thZ2luZyByZXF1aXJlbWVudHMuPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xvb2stZm9yLW90aGVyLXdheXMtdG8tbWluaW1pemUtc2l6ZSc+TG9vayBmb3Igb3RoZXIgd2F5cyB0byBtaW5pbWl6ZSBzaXplLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpdGVyYXRlLW9uLXRoZS1wcm9jZXNzJz5JdGVyYXRlIG9uIHRoZSBwcm9jZXNzLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dvYWxzLWFuZC1ndWlkaW5nLXByaW5jaXBsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkdvYWxzIGFuZCBHdWlkaW5nIFByaW5jaXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGNhbiByZWFjaCB5b3VyIGRlc3RpbmF0aW9uLCB5b3UgbmVlZCB0byBrbm93CisgICAgICAgICAgICAgICAgd2hlcmUgeW91IGFyZSBnb2luZy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgbGlzdCB0aGF0IHlvdSBjYW4gdXNlIGFzIGEgZ3VpZGUgd2hlbgorICAgICAgICAgICAgICAgIGNyZWF0aW5nIHZlcnkgc21hbGwgZGlzdHJpYnV0aW9uczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGV0ZXJtaW5lIGhvdyBtdWNoIHNwYWNlIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiBhIGtlcm5lbCB0aGF0IGlzIDEgTWJ5dGUgb3IgbGVzcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgcm9vdCBmaWxlc3lzdGVtIHRoYXQgaXMgMyBNYnl0ZXMgb3IgbGVzcykuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpbmQgdGhlIGFyZWFzIHRoYXQgYXJlIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgdGFraW5nIDkwJSBvZiB0aGUgc3BhY2UgYW5kIGNvbmNlbnRyYXRlIG9uIHJlZHVjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aG9zZSBhcmVhcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG8gbm90IGNyZWF0ZSBhbnkgZGlmZmljdWx0ICJoYWNrcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFjaGlldmUgeW91ciBnb2Fscy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxldmVyYWdlIHRoZSBkZXZpY2Utc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Xb3JrIGluIGEgc2VwYXJhdGUgbGF5ZXIgc28gdGhhdCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgY2hhbmdlcyBpc29sYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGxheWVycywgc2VlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VuZGVyc3RhbmQtd2hhdC1naXZlcy15b3VyLWltYWdlLXNpemUnPgorICAgICAgICAgICAgPHRpdGxlPlVuZGVyc3RhbmQgV2hhdCBDb250cmlidXRlcyB0byBZb3VyIEltYWdlIFNpemU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyBlYXNpZXN0IHRvIGhhdmUgc29tZXRoaW5nIHRvIHN0YXJ0IHdpdGggd2hlbiBjcmVhdGluZworICAgICAgICAgICAgICAgIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBvdXQtb2YtdGhlLWJveCB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3ktdGlueTwvZmlsZW5hbWU+IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICBVbHRpbWF0ZWx5LCB5b3Ugd2lsbCB3YW50IHRvIG1ha2UgY2hhbmdlcyBpbiB5b3VyIG93bgorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiB0aGF0IGFyZSBsaWtlbHkgbW9kZWxlZCBhZnRlcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPiBpbiB5b3VyIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvICJwb2t5LXRpbnkiCisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+Q3JlYXRpbmcgWW91ciBPd24gRGlzdHJpYnV0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgc29tZSBtZW1vcnkgY29uY2VwdHMgd2lsbCBoZWxwIHlvdSByZWR1Y2UgdGhlCisgICAgICAgICAgICAgICAgc3lzdGVtIHNpemUuCisgICAgICAgICAgICAgICAgTWVtb3J5IGNvbnNpc3RzIG9mIHN0YXRpYywgZHluYW1pYywgYW5kIHRlbXBvcmFyeSBtZW1vcnkuCisgICAgICAgICAgICAgICAgU3RhdGljIG1lbW9yeSBpcyB0aGUgVEVYVCAoY29kZSksIERBVEEgKGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgICAgICBpbiB0aGUgY29kZSksIGFuZCBCU1MgKHVuaW5pdGlhbGl6ZWQgZGF0YSkgc2VjdGlvbnMuCisgICAgICAgICAgICAgICAgRHluYW1pYyBtZW1vcnkgcmVwcmVzZW50cyBtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYXQgcnVudGltZToKKyAgICAgICAgICAgICAgICBzdGFja3MsIGhhc2ggdGFibGVzLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgVGVtcG9yYXJ5IG1lbW9yeSBpcyByZWNvdmVyZWQgYWZ0ZXIgdGhlIGJvb3QgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBUaGlzIG1lbW9yeSBjb25zaXN0cyBvZiBtZW1vcnkgdXNlZCBmb3IgZGVjb21wcmVzc2luZworICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgYW5kIGZvciB0aGUgPGZpbGVuYW1lPl9faW5pdF9fPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGhlbHAgeW91IHNlZSB3aGVyZSB5b3UgY3VycmVudGx5IGFyZSB3aXRoIGtlcm5lbCBhbmQgcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gc2l6ZXMsIHlvdSBjYW4gdXNlIHR3byB0b29scyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+c2NyaXB0cy90aW55LzwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmtzaXplLnB5PC9maWxlbmFtZT46IFJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCBzaXplcyBmb3IgdGhlIGtlcm5lbCBidWlsZCBvYmplY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZGlyc2l6ZS5weTwvZmlsZW5hbWU+OiBSZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgc2l6ZXMgZm9yIHRoZSByb290IGZpbGVzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgVGhpcyBuZXh0IHRvb2wgYW5kIGNvbW1hbmQgaGVscCB5b3Ugb3JnYW5pemUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZyYWdtZW50cyBhbmQgdmlldyBmaWxlIGRlcGVuZGVuY2llcyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm06CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5tZXJnZV9jb25maWcuc2g8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEhlbHBzIHlvdSBtYW5hZ2UgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZnJhZ21lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyB0b29sLCB5b3UgY2FuIG1lcmdlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIHRvZ2V0aGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgYWxsb3dzIHlvdSB0byBtYWtlIG92ZXJyaWRlcyBhbmQgd2FybnMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBvZiBhbnkgbWlzc2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbCBpcyBpZGVhbCBmb3IgYWxsb3dpbmcgeW91IHRvIGl0ZXJhdGUgb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLCBjcmVhdGUgbWluaW1hbCBjb25maWd1cmF0aW9ucywgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGhhdmluZyB0byBkdXBsaWNhdGUgeW91ciBwcm9jZXNzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSA8ZmlsZW5hbWU+bWVyZ2VfY29uZmlnLnNoPC9maWxlbmFtZT4gc2NyaXB0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBMaW51eCBZb2N0byBrZXJuZWwgR2l0IHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjEwPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy44PC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMva2NvbmZpZzwvZmlsZW5hbWU+IGRpcmVjdG9yeS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmF0aW9uIGZyYWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgYW5kIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Q3JlYXRpbmcgQ29uZmlndXJhdGlvbiBGcmFnbWVudHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggaXMgaW4gdGhpcyBtYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Yml0YmFrZSAtdSBkZXBleHAgLWcgPHJlcGxhY2VhYmxlPmJpdGJha2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSBCaXRCYWtlIGNvbW1hbmQgd2l0aCB0aGVzZSBvcHRpb25zIGJyaW5ncyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgYSBEZXBlbmRlbmN5IEV4cGxvcmVyIGZyb20gd2hpY2ggeW91IGNhbiB2aWV3IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGFsbG93cyB5b3UgdG8gbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtZWQgZGVjaXNpb25zIHdoZW4gY3V0dGluZyBvdXQgdmFyaW91cyBwaWVjZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgYW5kIHJvb3QgZmlsZXN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmltLXRoZS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPlRyaW0gdGhlIFJvb3QgRmlsZXN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByb290IGZpbGVzeXN0ZW0gaXMgbWFkZSB1cCBvZiBwYWNrYWdlcyBmb3IgYm9vdGluZywKKyAgICAgICAgICAgICAgICBsaWJyYXJpZXMsIGFuZCBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICAgICAgVG8gY2hhbmdlIHRoaW5ncywgeW91IGNhbiBjb25maWd1cmUgaG93IHRoZSBwYWNrYWdpbmcgaGFwcGVucywKKyAgICAgICAgICAgICAgICB3aGljaCBjaGFuZ2VzIHRoZSB3YXkgeW91IGJ1aWxkIHRoZW0uCisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIG1vZGlmeSB0aGUgZmlsZXN5c3RlbSBpdHNlbGYgb3Igc2VsZWN0IGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmlyc3QsIGZpbmQgb3V0IHdoYXQgaXMgaG9nZ2luZyB5b3VyIHJvb3QgZmlsZXN5c3RlbSBieSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJzaXplLnB5PC9maWxlbmFtZT4gc2NyaXB0IGZyb20geW91ciByb290IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgPHJlcGxhY2VhYmxlPnJvb3QtZGlyZWN0b3J5LW9mLWltYWdlPC9yZXBsYWNlYWJsZT4KKyAgICAgJCBkaXJzaXplLnB5IDEwMDAwMCA+IGRpcnNpemUtMTAway5sb2cKKyAgICAgJCBjYXQgZGlyc2l6ZS0xMDBrLmxvZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFwcGx5IGEgZmlsdGVyIHRvIHRoZSBzY3JpcHQgdG8gaWdub3JlIGZpbGVzIHVuZGVyCisgICAgICAgICAgICAgICAgYSBjZXJ0YWluIHNpemUuCisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZmlsdGVycyBvdXQgYW55IGZpbGVzIGJlbG93IDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgVGhlIHNpemVzIHJlcG9ydGVkIGJ5IHRoZSB0b29sIGFyZSB1bmNvbXByZXNzZWQsIGFuZCB0aHVzCisgICAgICAgICAgICAgICAgd2lsbCBiZSBzbWFsbGVyIGJ5IGEgcmVsYXRpdmVseSBjb25zdGFudCBmYWN0b3IgaW4gYQorICAgICAgICAgICAgICAgIGNvbXByZXNzZWQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFdoZW4geW91IGV4YW1pbmUgeW91ciBsb2cgZmlsZSwgeW91IGNhbiBmb2N1cyBvbiBhcmVhcyBvZiB0aGUKKyAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0gdGhhdCB0YWtlIHVwIGxhcmdlIGFtb3VudHMgb2YgbWVtb3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2hhdCB5b3UgZWxpbWluYXRlIGRvZXMgbm90IGNyaXBwbGUKKyAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb25hbGl0eSB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICBPbmUgd2F5IHRvIHNlZSBob3cgcGFja2FnZXMgcmVsYXRlIHRvIGVhY2ggb3RoZXIgaXMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICB0aGUgRGVwZW5kZW5jeSBFeHBsb3JlciBVSSB3aXRoIHRoZSBCaXRCYWtlIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIDxyZXBsYWNlYWJsZT5pbWFnZS1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgorICAgICAkIGJpdGJha2UgLXUgZGVwZXhwIC1nIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFVzZSB0aGUgaW50ZXJmYWNlIHRvIHNlbGVjdCBwb3RlbnRpYWwgcGFja2FnZXMgeW91IHdpc2ggdG8KKyAgICAgICAgICAgICAgICBlbGltaW5hdGUgYW5kIHNlZSB0aGVpciBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZGVjaWRpbmcgaG93IHRvIHJlZHVjZSB0aGUgc2l6ZSwgZ2V0IHJpZCBvZiBwYWNrYWdlcyB0aGF0CisgICAgICAgICAgICAgICAgcmVzdWx0IGluIG1pbmltYWwgaW1wYWN0IG9uIHRoZSBmZWF0dXJlIHNldC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IG5vdCBuZWVkIGEgVkdBIGRpc3BsYXkuCisgICAgICAgICAgICAgICAgT3IsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGdldCBieSB3aXRoIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5tZGV2PC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0byBtYWtlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGVsaW1pbmF0ZSA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliPC9maWxlbmFtZT4sIHNldCB0aGUgZm9sbG93aW5nIGluIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA9ICIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCB5b3Ugc2hvdWxkIGNvbnNpZGVyIGV4YWN0bHkgdGhlIHR5cGUgb2Ygcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0geW91IG5lZWQgdG8gbWVldCB5b3VyIG5lZWRzIHdoaWxlIGFsc28gcmVkdWNpbmcKKyAgICAgICAgICAgICAgICBpdHMgc2l6ZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgPGZpbGVuYW1lPmNyYW1mczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zcXVhc2hmczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dWJpZnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+LCBvciBhbiA8ZmlsZW5hbWU+aW5pdHJhbWZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+aW5pdHJhbWZzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+IHJlcXVpcmVzIGEgMSBNYnl0ZQorICAgICAgICAgICAgICAgIGpvdXJuYWwuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBva2F5IHdpdGggcnVubmluZyByZWFkLW9ubHksIHlvdSBkbyBub3QgbmVlZCB0aGlzCisgICAgICAgICAgICAgICAgam91cm5hbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQWZ0ZXIgZWFjaCByb3VuZCBvZiBlbGltaW5hdGlvbiwgeW91IG5lZWQgdG8gcmVidWlsZCB5b3VyCisgICAgICAgICAgICAgICAgc3lzdGVtIGFuZCB0aGVuIHVzZSB0aGUgdG9vbHMgdG8gc2VlIHRoZSBlZmZlY3RzIG9mIHlvdXIKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb25zLgorICAgICAgICAgICAgPC9ub3RlPgorCisKKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmltLXRoZS1rZXJuZWwnPgorICAgICAgICAgICAgPHRpdGxlPlRyaW0gdGhlIEtlcm5lbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgaXMgYnVpbHQgYnkgaW5jbHVkaW5nIHBvbGljaWVzIGZvciBoYXJkd2FyZS1pbmRlcGVuZGVudAorICAgICAgICAgICAgICAgIGFzcGVjdHMuCisgICAgICAgICAgICAgICAgV2hhdCBzdWJzeXN0ZW1zIGRvIHlvdSBlbmFibGU/CisgICAgICAgICAgICAgICAgRm9yIHdoYXQgYXJjaGl0ZWN0dXJlIGFyZSB5b3UgYnVpbGRpbmc/CisgICAgICAgICAgICAgICAgV2hpY2ggZHJpdmVycyBkbyB5b3UgYnVpbGQgYnkgZGVmYXVsdD8KKyAgICAgICAgICAgICAgICA8bm90ZT5Zb3UgY2FuIG1vZGlmeSB0aGUga2VybmVsIHNvdXJjZSBpZiB5b3Ugd2FudCB0byBoZWxwCisgICAgICAgICAgICAgICAgICAgIHdpdGggYm9vdCB0aW1lLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVuIHRoZSA8ZmlsZW5hbWU+a3NpemUucHk8L2ZpbGVuYW1lPiBzY3JpcHQgZnJvbSB0aGUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgTGludXggYnVpbGQgZGlyZWN0b3J5IHRvIGdldCBhbiBpZGVhIG9mIHdoYXQgaXMgbWFraW5nIHVwCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgPHJlcGxhY2VhYmxlPnRvcC1sZXZlbC1saW51eC1idWlsZC1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgorICAgICAkIGtzaXplLnB5ID4ga3NpemUubG9nCisgICAgICQgY2F0IGtzaXplLmxvZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBleGFtaW5lIHRoZSBsb2csIHlvdSB3aWxsIHNlZSBob3cgbXVjaCBzcGFjZSBpcworICAgICAgICAgICAgICAgIHRha2VuIHVwIHdpdGggdGhlIGJ1aWx0LWluIDxmaWxlbmFtZT4ubzwvZmlsZW5hbWU+IGZpbGVzIGZvcgorICAgICAgICAgICAgICAgIGRyaXZlcnMsIG5ldHdvcmtpbmcsIGNvcmUga2VybmVsIGZpbGVzLCBmaWxlc3lzdGVtLCBzb3VuZCwKKyAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgVGhlIHNpemVzIHJlcG9ydGVkIGJ5IHRoZSB0b29sIGFyZSB1bmNvbXByZXNzZWQsIGFuZCB0aHVzCisgICAgICAgICAgICAgICAgd2lsbCBiZSBzbWFsbGVyIGJ5IGEgcmVsYXRpdmVseSBjb25zdGFudCBmYWN0b3IgaW4gYSBjb21wcmVzc2VkCisgICAgICAgICAgICAgICAga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgIExvb2sgdG8gcmVkdWNlIHRoZSBhcmVhcyB0aGF0IGFyZSBsYXJnZSBhbmQgdGFraW5nIHVwIGFyb3VuZAorICAgICAgICAgICAgICAgIHRoZSAiOTAlIHJ1bGUuIgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBleGFtaW5lLCBvciBkcmlsbCBkb3duLCBpbnRvIGFueSBwYXJ0aWN1bGFyIGFyZWEsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWQ8L2ZpbGVuYW1lPiBvcHRpb24gd2l0aCB0aGUgc2NyaXB0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBrc2l6ZS5weSAtZCA+IGtzaXplLmxvZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBicmVha3Mgb3V0IHRoZSBpbmRpdmlkdWFsIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICBmb3IgZWFjaCBhcmVhIG9mIHRoZSBrZXJuZWwgKGUuZy4gZHJpdmVycywgbmV0d29ya2luZywgYW5kCisgICAgICAgICAgICAgICAgc28gZm9ydGgpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgeW91ciBsb2cgZmlsZSB0byBzZWUgd2hhdCB5b3UgY2FuIGVsaW1pbmF0ZSBmcm9tIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBiYXNlZCBvbiBmZWF0dXJlcyB5b3UgY2FuIGxldCBnby4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBub3QgZ29pbmcgdG8gbmVlZCBzb3VuZCwgeW91IGRvIG5vdAorICAgICAgICAgICAgICAgIG5lZWQgYW55IGRyaXZlcnMgdGhhdCBzdXBwb3J0IHNvdW5kLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciBmaWd1cmluZyBvdXQgd2hhdCB0byBlbGltaW5hdGUsIHlvdSBuZWVkIHRvIHJlY29uZmlndXJlCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCB0byByZWZsZWN0IHRob3NlIGNoYW5nZXMgZHVyaW5nIHRoZSBuZXh0IGJ1aWxkLgorICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBydW4gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBhbmQgbWFrZSBhbGwgeW91cgorICAgICAgICAgICAgICAgIGNoYW5nZXMgYXQgb25jZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGF0IG1ha2VzIGl0IGRpZmZpY3VsdCB0byBzZWUgdGhlIGVmZmVjdHMgb2YgeW91cgorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgZWxpbWluYXRpb25zIGFuZCBhbHNvIG1ha2VzIGl0IGRpZmZpY3VsdCB0byByZXBsaWNhdGUKKyAgICAgICAgICAgICAgICB0aGUgY2hhbmdlcyBmb3IgcGVyaGFwcyBhbm90aGVyIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgQSBiZXR0ZXIgbWV0aG9kIGlzIHRvIHN0YXJ0IHdpdGggbm8gY29uZmlndXJhdGlvbnMgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWxsbm9jb25maWc8L2ZpbGVuYW1lPiwgY3JlYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmcmFnbWVudHMgZm9yIGluZGl2aWR1YWwgY2hhbmdlcywgYW5kIHRoZW4gbWFuYWdlIHRoZQorICAgICAgICAgICAgICAgIGZyYWdtZW50cyBpbnRvIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXJnZV9jb25maWcuc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdG9vbCBtYWtlcyBpdCBlYXN5IGZvciB5b3UgdG8gaXRlcmF0ZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZSBhbmQgYnVpbGQgY3ljbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEVhY2ggdGltZSB5b3UgbWFrZSBjb25maWd1cmF0aW9uIGNoYW5nZXMsIHlvdSBuZWVkIHRvIHJlYnVpbGQKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIGFuZCBjaGVjayB0byBzZWUgd2hhdCBpbXBhY3QgeW91ciBjaGFuZ2VzIGhhZCBvbgorICAgICAgICAgICAgICAgIHRoZSBvdmVyYWxsIHNpemUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVtb3ZlLXBhY2thZ2UtbWFuYWdlbWVudC1yZXF1aXJlbWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPlJlbW92ZSBQYWNrYWdlIE1hbmFnZW1lbnQgUmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUGFja2FnaW5nIHJlcXVpcmVtZW50cyBhZGQgc2l6ZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgT25lIHdheSB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGltYWdlIGlzIHRvIHJlbW92ZSBhbGwgdGhlCisgICAgICAgICAgICAgICAgcGFja2FnaW5nIHJlcXVpcmVtZW50cyBmcm9tIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGlzIHJlZHVjdGlvbiBpbmNsdWRlcyBib3RoIHJlbW92aW5nIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMgYXMgd2VsbCBhcyByZW1vdmluZyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgZGF0YSBpdHNlbGYuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGVsaW1pbmF0ZSBhbGwgdGhlIHBhY2thZ2luZyByZXF1aXJlbWVudHMgZm9yIGFuIGltYWdlLAorICAgICAgICAgICAgICAgIGJlIHN1cmUgdGhhdCAicGFja2FnZS1tYW5hZ2VtZW50IiBpcyBub3QgcGFydCBvZiB5b3VyCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGZvciB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgcmVtb3ZlIHRoaXMgZmVhdHVyZSwgeW91IGFyZSByZW1vdmluZyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgIG1hbmFnZXIgYXMgd2VsbCBhcyBpdHMgZGVwZW5kZW5jaWVzIGZyb20gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb29rLWZvci1vdGhlci13YXlzLXRvLW1pbmltaXplLXNpemUnPgorICAgICAgICAgICAgPHRpdGxlPkxvb2sgZm9yIE90aGVyIFdheXMgdG8gTWluaW1pemUgU2l6ZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlcywgb3RoZXIgYXJlYXMgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICBjYW4gdHJpbSBsaWtlbHkgZXhpc3QuCisgICAgICAgICAgICAgICAgVGhlIGtleSB0byBmaW5kaW5nIHRoZXNlIGFyZWFzIGlzIHRocm91Z2ggdG9vbHMgYW5kIG1ldGhvZHMKKyAgICAgICAgICAgICAgICBkZXNjcmliZWQgaGVyZSBjb21iaW5lZCB3aXRoIGV4cGVyaW1lbnRhdGlvbiBhbmQgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIGFyZWFzIHRvIGV4cGVyaW1lbnQgd2l0aDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBmb2xsb3cgdGhpcyBwcm9jZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZW1vdmUgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSB0aGluayB5b3UgZG8gbm90IG5lZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHlvdXIgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgdGhlIGJ1aWxkIGZhaWxzIGR1ZSB0byBtaXNzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgaW4gYSBwYWNrYWdlLCBkZXRlcm1pbmUgaWYgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvbmZpZ3VyZSB0aGUgcGFja2FnZSB0byBub3QgbmVlZCB0aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiB0byBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCB3aWRlIGNoYXJhY3RlciBzdXBwb3J0IGFzIGlzIGRvbmUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uY3Vyc2VzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yLCBpZiBzdXBwb3J0IGZvciB0aG9zZSBjaGFyYWN0ZXJzIGlzIG5lZWRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHdoYXQgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgcHJvdmlkZSB0aGUgc3VwcG9ydCBhbmQgcmVzdG9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlYnVpbGQgYW5kIHJlcGVhdCB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBCdXN5Qm94LCB1c2UgYSBwcm9jZXNzIHNpbWlsYXIgYXMgZGVzY3JpYmVkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBBIGRpZmZlcmVuY2UgaXMgeW91IHdpbGwgbmVlZCB0byBib290IHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0byBzZWUgaWYgeW91IGFyZSBhYmxlIHRvIGRvIGV2ZXJ5dGhpbmcgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QgZnJvbSB0aGUgcnVubmluZyBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIHRvIGludGVncmF0ZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgaW50byBCdXN5Ym94IGJlY2F1c2UgQnVzeUJveCBoYW5kbGVzIGl0cyBvd24gY29yZQorICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgYW5kIHRoZW4gYWxsb3dzIHlvdSB0byBhZGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIG9uIHRvcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2l0ZXJhdGUtb24tdGhlLXByb2Nlc3MnPgorICAgICAgICAgICAgPHRpdGxlPkl0ZXJhdGUgb24gdGhlIFByb2Nlc3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBub3QgcmVhY2hlZCB5b3VyIGdvYWxzIG9uIHN5c3RlbSBzaXplLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGl0ZXJhdGUgb24gdGhlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgVXNlIHRoZSB0b29scyBhbmQgc2VlIGp1c3Qgd2hhdCBpcyB0YWtpbmcgdXAgOTAlIG9mIHRoZSByb290CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBhbmQgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBEZWNpZGUgd2hhdCB5b3UgY2FuIGVsaW1pbmF0ZSB3aXRob3V0IGxpbWl0aW5nIHlvdXIgZGV2aWNlCisgICAgICAgICAgICAgICAgYmV5b25kIHdoYXQgeW91IG5lZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSwgYSBnb29kIHBsYWNlIHRvIGxvb2sgbWlnaHQgYmUKKyAgICAgICAgICAgICAgICBCdXN5Ym94LCB3aGljaCBwcm92aWRlcyBhIHN0cmlwcGVkIGRvd24KKyAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIFVuaXggdG9vbHMgaW4gYSBzaW5nbGUsIGV4ZWN1dGFibGUgZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYmUgYWJsZSB0byBkcm9wIHZpcnR1YWwgdGVybWluYWwgc2VydmljZXMgb3IgcGVyaGFwcworICAgICAgICAgICAgICAgIGlwdjYuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctaW1hZ2VzLWZvci1tb3JlLXRoYW4tb25lLW1hY2hpbmUnPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgSW1hZ2VzIGZvciBNb3JlIHRoYW4gT25lIE1hY2hpbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gc2NlbmFyaW8gZGV2ZWxvcGVycyBmYWNlIGlzIGNyZWF0aW5nIGltYWdlcyBmb3Igc2V2ZXJhbAorICAgICAgICAgICAgZGlmZmVyZW50IG1hY2hpbmVzIHRoYXQgdXNlIHRoZSBzYW1lIHNvZnR3YXJlIGVudmlyb25tZW50LgorICAgICAgICAgICAgSW4gdGhpcyBzaXR1YXRpb24sIGl0IGlzIHRlbXB0aW5nIHRvIHNldCB0aGUKKyAgICAgICAgICAgIHR1bmluZ3MgYW5kIG9wdGltaXphdGlvbiBmbGFncyBmb3IgZWFjaCBidWlsZCBzcGVjaWZpY2FsbHkgZm9yCisgICAgICAgICAgICB0aGUgdGFyZ2V0ZWQgaGFyZHdhcmUgKGkuZS4gIm1heGluZyBvdXQiIHRoZSB0dW5pbmdzKS4KKyAgICAgICAgICAgIERvaW5nIHNvIGNhbiBjb25zaWRlcmFibHkgYWRkIHRvIGJ1aWxkIHRpbWVzIGFuZCBwYWNrYWdlIGZlZWQKKyAgICAgICAgICAgIG1haW50ZW5hbmNlIGNvbGxlY3RpdmVseSBmb3IgdGhlIG1hY2hpbmVzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNlbGVjdGluZyB0dW5lcyB0aGF0IGFyZSBleHRyZW1lbHkgc3BlY2lmaWMgdG8gYQorICAgICAgICAgICAgQ1BVIGNvcmUgdXNlZCBpbiBhIHN5c3RlbSBtaWdodCBlbmFibGUgc29tZSBtaWNybyBvcHRpbWl6YXRpb25zCisgICAgICAgICAgICBpbiBHQ0MgZm9yIHRoYXQgcGFydGljdWxhciBzeXN0ZW0gYnV0IHdvdWxkIG90aGVyd2lzZSBub3QgZ2FpbgorICAgICAgICAgICAgeW91IG11Y2ggb2YgYSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGFjcm9zcyB0aGUgb3RoZXIgc3lzdGVtcworICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gdXNpbmcgYSBtb3JlIGdlbmVyYWwgdHVuaW5nIGFjcm9zcyBhbGwgdGhlIGJ1aWxkcworICAgICAgICAgICAgKGUuZy4gc2V0dGluZworICAgICAgICAgICAgPHVsaW5rIHVybD0ndmFyLURFRkFVTFRUVU5FJz48ZmlsZW5hbWU+REVGQVVMVFRVTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBzcGVjaWZpY2FsbHkgZm9yIGVhY2ggbWFjaGluZSdzIGJ1aWxkKS4KKyAgICAgICAgICAgIFJhdGhlciB0aGFuICJtYXggb3V0IiBlYWNoIGJ1aWxkJ3MgdHVuaW5ncywgeW91IGNhbiB0YWtlIHN0ZXBzIHRoYXQKKyAgICAgICAgICAgIGNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHJldXNlIHNvZnR3YXJlIGFjcm9zcyB0aGUKKyAgICAgICAgICAgIHZhcmlvdXMgbWFjaGluZXMgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBidWlsZCBzcGVlZCBhbmQgcGFja2FnZSBmZWVkIG1haW50ZW5hbmNlIGFyZSBjb25zaWRlcmF0aW9ucywKKyAgICAgICAgICAgIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHBvaW50cyBpbiB0aGlzIHNlY3Rpb24gdGhhdCBjYW4gaGVscCB5b3UKKyAgICAgICAgICAgIG9wdGltaXplIHlvdXIgdHVuaW5ncyB0byBiZXN0IGNvbnNpZGVyIGJ1aWxkIHRpbWVzIGFuZCBwYWNrYWdlCisgICAgICAgICAgICBmZWVkIG1haW50ZW5hbmNlLgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlIHRoZSBCdWlsZCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgYXQgYWxsIHBvc3NpYmxlLCBzaGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYWNyb3NzIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgc3dpdGNoaW5nIGJldHdlZW4gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGluIHRoZSBzYW1lIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBpcyB3ZWxsIHN1cHBvcnRlZCBhbmQgcmVndWxhcmx5IHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVycyB3aGVuIGJ1aWxkaW5nIGZvciBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSBzYW1lIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbWFjaGluZSBidWlsZHMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbgorICAgICAgICAgICAgICAgICAgICByZXVzZSB0aGUgZXhpc3RpbmcgbmF0aXZlIGFuZCBvZnRlbiBjcm9zcy1yZWNpcGVzIGZvcgorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgYnVpbGQgdGltZSBkZWNyZWFzZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyBjaGFuZ2Ugb3IgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyB0aGUgZmlsZXN5c3RlbSBsYXlvdXQsIHlvdSBuZWVkIHRvIHdvcmsgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgYSBjbGVhbiA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBTaGFyaW5nIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB1bmRlciB0aGVzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2lyY3Vtc3RhbmNlcyBtaWdodCB3b3JrIGJ1dCBzaW5jZSBpdCBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGd1YXJhbnRlZWQsIHlvdSBzaG91bGQgdXNlIGEgY2xlYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVuYWJsZSB0aGUgQXBwcm9wcmlhdGUgUGFja2FnZSBBcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZW5hYmxlcyB0aHJlZQorICAgICAgICAgICAgICAgICAgICBsZXZlbHMgb2YgcGFja2FnZSBhcmNoaXRlY3R1cmVzOiAiYWxsIiwgInR1bmUiIG9yICJwYWNrYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgYW5kICJtYWNoaW5lIi4KKyAgICAgICAgICAgICAgICAgICAgQW55IGdpdmVuIHJlY2lwZSB1c3VhbGx5IHNlbGVjdHMgb25lIG9mIHRoZXNlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyAodHlwZXMpIGZvciBpdHMgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgZm9yIHdoYXQgYSBnaXZlbiByZWNpcGUgY3JlYXRlcyBwYWNrYWdlcywgbWFraW5nCisgICAgICAgICAgICAgICAgICAgIHN1cmUgeW91IGVuYWJsZSB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgY2FuCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGltcGFjdCB0aGUgYnVpbGQgdGltZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkEgcmVjaXBlIHRoYXQganVzdCBnZW5lcmF0ZXMgc2NyaXB0cyBjYW4gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICJhbGwiIGFyY2hpdGVjdHVyZSBiZWNhdXNlIHRoZXJlIGFyZSBubyBiaW5hcmllcyB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmaWNhbGx5IGVuYWJsZSAiYWxsIiBhcmNoaXRlY3R1cmUsIGJlIHN1cmUgeW91cgorICAgICAgICAgICAgICAgICAgICByZWNpcGUgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWFsbGFyY2gnPjxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyB1c2VmdWwgZm9yICJhbGwiIGFyY2hpdGVjdHVyZXMgYmVjYXVzZSBpdAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVzIG1hbnkgdmFyaWFibGVzIHNvIHBhY2thZ2VzIGNhbiBiZSB1c2VkIGFjcm9zcworICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91ciByZWNpcGUgbmVlZHMgdG8gZ2VuZXJhdGUgcGFja2FnZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBvciB3aGVuIG9uZSBvZiB0aGUgYnVpbGQgb3IgcnVudGltZQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgaXMgYWxyZWFkeSBtYWNoaW5lLWFyY2hpdGVjdHVyZSBkZXBlbmRlbnQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIG1ha2VzIHlvdXIgcmVjaXBlIGFsc28gbWFjaGluZS1hcmNoaXRlY3R1cmUgZGVwZW5kZW50LAorICAgICAgICAgICAgICAgICAgICBtYWtlIHN1cmUgeW91ciByZWNpcGUgZW5hYmxlcyB0aGUgIm1hY2hpbmUiIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0FSQ0gnPjxmaWxlbmFtZT5NQUNISU5FX0FSQ0g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgZG8gbm90IHNwZWNpZmljYWxseSBlbmFibGUgYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGVmYXVsdHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNldHRpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7VFVORV9QS0dBUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNob29zZSBhIEdlbmVyaWMgVHVuaW5nIEZpbGUgaWYgUG9zc2libGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29tZSB0dW5lcyBhcmUgbW9yZSBnZW5lcmljIGFuZCBjYW4gcnVuIG9uIG11bHRpcGxlIHRhcmdldHMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gYW4gPGZpbGVuYW1lPmFybXY1PC9maWxlbmFtZT4gc2V0IG9mIHBhY2thZ2VzIGNvdWxkCisgICAgICAgICAgICAgICAgICAgIHJ1biBvbiA8ZmlsZW5hbWU+YXJtdjY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFybXY3PC9maWxlbmFtZT4gcHJvY2Vzc29ycyBpbiBtb3N0IGNhc2VzKS4KKyAgICAgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCA8ZmlsZW5hbWU+aTQ4NjwvZmlsZW5hbWU+IGJpbmFyaWVzIGNvdWxkIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgb24gPGZpbGVuYW1lPmk1ODY8L2ZpbGVuYW1lPiBhbmQgaGlnaGVyIHByb2Nlc3NvcnMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCBhZHZhbmNlcyBvbiBuZXdlcgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IgdmVyc2lvbnMgd291bGQgbm90IGJlIHVzZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3Ugc2VsZWN0IHRoZSBzYW1lIHR1bmUgZm9yIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZXVzZXMgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBidWlsdCwgdGh1cyBzcGVlZGluZyB1cCB0aGUgb3ZlcmFsbCBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgZXZlbiB0aG91Z2ggYSBuZXcgc3lzcm9vdCBmb3IgZWFjaCBtYWNoaW5lIGlzCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCwgdGhlIHNvZnR3YXJlIGlzIG5vdCByZWNvbXBpbGVkIGFuZCBvbmx5IG9uZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGZlZWQgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hbmFnZSBHcmFudWxhciBMZXZlbCBQYWNrYWdpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIGNhc2VzIGV4aXN0IHdoZXJlIGluamVjdGluZyBhbm90aGVyIGxldmVsCisgICAgICAgICAgICAgICAgICAgIG9mIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGJleW9uZCB0aGUgdGhyZWUgaGlnaGVyIGxldmVscworICAgICAgICAgICAgICAgICAgICBub3RlZCBlYXJsaWVyIGNhbiBiZSB1c2VmdWwuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgPGZpbGVuYW1lPmVtZ2Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBncmFwaGljcyBzdGFjayBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBsYXllciwgYSBzdWJzZXQgb2Ygc29mdHdhcmUgZXhpc3RzIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQgYWdhaW5zdCBzb21ldGhpbmcgZGlmZmVyZW50IGZyb20gdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGdlbmVyaWMgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhhbWluZSB0aGUga2V5IGNvZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgImRhaXN5IiBicmFuY2ggaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvZW1nZC1nbC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBhIHNwZWNpZmljIHNldCBvZiBwYWNrYWdlcywgdGhlIGNvZGUgcmVkZWZpbmVzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0FSQ0gnPjxmaWxlbmFtZT5QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9FWFRSQV9BUkNIUyc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhUUkFfQVJDSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZW4gYXBwZW5kZWQgd2l0aCB0aGlzIGV4dHJhIHR1bmUgbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbC1lbWdkLmluYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgd2hlbiBzZWFyY2hpbmcgZm9yIHBhY2thZ2VzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHVzZXMgYSBmb3VyLWxldmVsIHNlYXJjaCBhbmQgdGhlIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgbmV3IGxldmVsIGFyZSBwcmVmZXJyZWQgYXMgY29tcGFyZWQgdG8gdGhlIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgICAgIHR1bmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBvdmVyYWxsIHJlc3VsdCBpcyB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV1c2VzIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgZnJvbSB0aGUgY29tbW9uIHR1bmUgZXhjZXB0IGZvciBzcGVjaWZpYyBjYXNlcworICAgICAgICAgICAgICAgICAgICBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIFRvb2xzIHRvIERlYnVnIElzc3Vlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgeW91IGNhbiBydW4gaW50byBzaXR1YXRpb25zIHdoZXJlIHNvZnR3YXJlIGlzCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIHJlYnVpbHQgd2hlbiB5b3UgdGhpbmsgaXQgc2hvdWxkIG5vdCBiZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgICAgICAgICB1c2luZyBzaGFyZWQgc3RhdGUgYmV0d2VlbiBtYWNoaW5lcyB3aGVuIHlvdSB0aGluayBpdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHR5cGVzIG9mIHNpdHVhdGlvbnMgYXJlIHVzdWFsbHkgZHVlIHRvIHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gbWFjaGluZS1zcGVjaWZpYyB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0VSSUFMX0NPTlNPTEUnPjxmaWxlbmFtZT5TRVJJQUxfQ09OU09MRTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1YU0VSVkVSJz48ZmlsZW5hbWU+WFNFUlZFUjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCBpbiBjb2RlIHRoYXQgaXMgc3VwcG9zZWQgdG8gb25seSBiZQorICAgICAgICAgICAgICAgICAgICB0dW5lLXNwZWNpZmljIG9yIHdoZW4gdGhlIHJlY2lwZSBkZXBlbmRzCisgICAgICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkgb24gc29tZSBvdGhlciByZWNpcGUgdGhhdCBhbHJlYWR5IGhhcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGFzICIke01BQ0hJTkVfQVJDSH0iLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhdGNoZXMgdG8gZml4IGFueSBpc3N1ZXMgaWRlbnRpZmllZCBhcmUgbW9zdCB3ZWxjb21lCisgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGVzZSBpc3N1ZXMgb2NjYXNpb25hbGx5IGRvIG9jY3VyLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3Igc3VjaCBjYXNlcywgeW91IGNhbiB1c2Ugc29tZSB0b29scyB0byBoZWxwIHlvdQorICAgICAgICAgICAgICAgICAgICBzb3J0IG91dCB0aGUgc2l0dWF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3N0YXRlLWRpZmYtbWFjaGluZXMuc2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIHRvb2wgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGNvbW1lbnRzIGluIHRoZSBzY3JpcHQgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG93IHRvIHVzZSB0aGUgdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qml0QmFrZSdzICItUyBwcmludGRpZmYiIE9wdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoaXMgb3B0aW9uIGNhdXNlcyBCaXRCYWtlIHRvIHRyeSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaCB0aGUgY2xvc2VzdCBzaWduYXR1cmUgbWF0Y2ggaXQgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gaW4gdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZSkgYW5kIHRoZW4gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtZGlmZnNpZ3M8L2ZpbGVuYW1lPiBvdmVyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgdG8gZGV0ZXJtaW5lIHRoZSBzdGFtcHMgYW5kIGRlbHRhIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgdHdvIHN0YW1wIHRyZWVzIGRpdmVyZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtpbmctd2l0aC1wYWNrYWdlcyc+CisgICAgICAgIDx0aXRsZT5Xb3JraW5nIHdpdGggUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBhIGZldyB0YXNrcyB0aGF0IGludm9sdmUgcGFja2FnZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZXhjbHVkaW5nLXBhY2thZ2VzLWZyb20tYW4taW1hZ2UnPkV4Y2x1ZGluZyBwYWNrYWdlcyBmcm9tIGFuIGltYWdlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2luY3JlbWVudGluZy1hLXBhY2thZ2UtcmV2aXNpb24tbnVtYmVyJz5JbmNyZW1lbnRpbmcgYSBwYWNrYWdlIHJldmlzaW9uIG51bWJlcjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdoYW5kbGluZy1vcHRpb25hbC1tb2R1bGUtcGFja2FnaW5nJz5IYW5kbGluZyBvcHRpb25hbCBtb2R1bGUgcGFja2FnaW5nPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3VzaW5nLXJ1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50Jz5Vc2luZyBSdW50aW1lIFBhY2thZ2UgTWFuYWdlbWVudDwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgcGFja2FnZSB0ZXN0IChwdGVzdCk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZXhjbHVkaW5nLXBhY2thZ2VzLWZyb20tYW4taW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPkV4Y2x1ZGluZyBQYWNrYWdlcyBmcm9tIGFuIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgbmVjZXNzYXJ5IHRvIHByZXZlbnQgc3BlY2lmaWMgcGFja2FnZXMKKyAgICAgICAgICAgICAgICBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnRvIGFuIGltYWdlLgorICAgICAgICAgICAgICAgIElmIHNvLCB5b3UgY2FuIHVzZSBzZXZlcmFsIHZhcmlhYmxlcyB0byBkaXJlY3QgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHRvIGVzc2VudGlhbGx5IGlnbm9yZSBpbnN0YWxsaW5nIHJlY29tbWVuZGVkIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgb3IgdG8gbm90IGluc3RhbGwgYSBwYWNrYWdlIGF0IGFsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGludHJvZHVjZXMgdmFyaWFibGVzIHlvdSBjYW4gdXNlIHRvCisgICAgICAgICAgICAgICAgcHJldmVudCBwYWNrYWdlcyBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnRvIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSB2YXJpYWJsZXMgb25seSB3b3JrcyB3aXRoIElQSyBhbmQgUlBNCisgICAgICAgICAgICAgICAgcGFja2FnZSB0eXBlcy4KKyAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciBEZWJpYW4gcGFja2FnZXMgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICAgICAgQWxzbywgeW91IGNhbiB1c2UgdGhlc2UgdmFyaWFibGVzIGZyb20geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBhdHRhY2ggdGhlbSB0byBhCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIGEgcmVjaXBlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSB2YXJpYWJsZXMsIHNlZSB0aGUgZGVzY3JpcHRpb25zIGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCdzIGdsb3NzYXJ5IGNoYXB0ZXIuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyB2YXJpYWJsZSB0byBzcGVjaWZ5ICJyZWNvbW1lbmRlZC1vbmx5IgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHRvIHByZXZlbnQgYWxsICJyZWNvbW1lbmRlZC1vbmx5IgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgZnJvbSBiZWluZyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgdG8gcHJldmVudCBzcGVjaWZpYyBwYWNrYWdlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBpbnN0YWxsZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAicmVjb21tZW5kZWQtb25seSIgb3Igbm90LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSB0aGF0IHRoZSBidWlsZCBwcm9jZXNzIGNvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsIHdpdGggYW4gZXJyb3Igd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnQgdGhlIGluc3RhbGxhdGlvbiBvZiBhIHBhY2thZ2Ugd2hvc2UgcHJlc2VuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlcXVpcmVkIGJ5IGFuIGluc3RhbGxlZCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jcmVtZW50aW5nLWEtcGFja2FnZS1yZXZpc2lvbi1udW1iZXInPgorICAgICAgICAgICAgPHRpdGxlPkluY3JlbWVudGluZyBhIFBhY2thZ2UgUmV2aXNpb24gTnVtYmVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgYSBjb21taXR0ZWQgY2hhbmdlIHJlc3VsdHMgaW4gY2hhbmdpbmcgdGhlIHBhY2thZ2Ugb3V0cHV0LAorICAgICAgICAgICAgICAgIHRoZW4gdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIG5lZWRzIHRvIGJlIGluY3JlYXNlZCAob3IgImJ1bXBlZCIpLgorICAgICAgICAgICAgICAgIEluY3JlYXNpbmcgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gb2NjdXJzIG9uZSBvZiB0d28gd2F5czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QXV0b21hdGljYWxseSB1c2luZyBhIFBhY2thZ2UgUmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgKFBSIFNlcnZpY2UpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFudWFsbHkgaW5jcmVtZW50aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEdpdmVuIHRoYXQgb25lIG9mIHRoZSBjaGFsbGVuZ2VzIGFueSBidWlsZCBzeXN0ZW0gYW5kIGl0cworICAgICAgICAgICAgICAgIHVzZXJzIGZhY2UgaXMgaG93IHRvIG1haW50YWluIGEgcGFja2FnZSBmZWVkIHRoYXQgaXMgY29tcGF0aWJsZQorICAgICAgICAgICAgICAgIHdpdGggZXhpc3RpbmcgcGFja2FnZSBtYW5hZ2VyIGFwcGxpY2F0aW9ucyBzdWNoIGFzCisgICAgICAgICAgICAgICAgUlBNLCBBUFQsIGFuZCBPUEtHLCB1c2luZyBhbiBhdXRvbWF0ZWQgc3lzdGVtIGlzIG11Y2gKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWQgb3ZlciBhIG1hbnVhbCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgSW4gZWl0aGVyIHN5c3RlbSwgdGhlIG1haW4gcmVxdWlyZW1lbnQgaXMgdGhhdCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgbnVtYmVyaW5nIGluY3JlYXNlcyBpbiBhIGxpbmVhciBmYXNoaW9uIGFuZCB0aGF0IGEgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgdmVyc2lvbiBjb21wb25lbnRzIGV4aXN0IHRoYXQgc3VwcG9ydCB0aGF0IGxpbmVhciBwcm9ncmVzc2lvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyB0d28gc2VjdGlvbnMgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0aGUgUFIgU2VydmljZQorICAgICAgICAgICAgICAgIGFuZCBvbiBtYW51YWwgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gYnVtcGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Xb3JraW5nIFdpdGggYSBQUiBTZXJ2aWNlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIGF0dGVtcHRpbmcgdG8gbWFpbnRhaW4gcmV2aXNpb24gbnVtYmVycyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgZXJyb3IgcHJvbmUsIGluYWNjdXJhdGUsIGFuZCBjYXVzZXMgcHJvYmxlbXMgZm9yIHBlb3BsZQorICAgICAgICAgICAgICAgICAgICBzdWJtaXR0aW5nIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIENvbnZlcnNlbHksIHRoZSBQUiBTZXJ2aWNlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzCisgICAgICAgICAgICAgICAgICAgIGluY3JlYXNpbmcgbnVtYmVycywgcGFydGljdWxhcmx5IHRoZSByZXZpc2lvbiBmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggcmVtb3ZlcyB0aGUgaHVtYW4gZWxlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB1c2luZyBhIFBSIFNlcnZpY2UsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9QUl9TZXJ2aWNlJz5QUiBTZXJ2aWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB1c2VzIHZhcmlhYmxlcyBpbiBvcmRlciBvZgorICAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nIHByaW9yaXR5IHRvIGZhY2lsaXRhdGUgcmV2aXNpb24gbnVtYmVyaW5nIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBlcG9jaCwgdmVyc2lvbiwgYW5kIHJldmlzaW9uLCByZXNwZWN0aXZlbHkpLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWVzIGFyZSBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBwb2xpY2llcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgcHJvY2VkdXJlcyBvZiBhIGdpdmVuIGRpc3RyaWJ1dGlvbiBhbmQgcGFja2FnZSBmZWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2NoZWNrc3Vtcyc+c2lnbmF0dXJlczwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggYXJlIHVuaXF1ZSB0byBhIGdpdmVuIGJ1aWxkLCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGtub3dzIHdoZW4gdG8gcmVidWlsZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgQWxsIHRoZSBpbnB1dHMgaW50byBhIGdpdmVuIHRhc2sgYXJlIHJlcHJlc2VudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCB3aGljaCBjYW4gdHJpZ2dlciBhIHJlYnVpbGQgd2hlbiBkaWZmZXJlbnQuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmIGRvZXMgbm90IHJlbHkgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IG51bWJlcnMgdG8gdHJpZ2dlciBhIHJlYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzaWduYXR1cmVzLCBob3dldmVyLCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBQUiBTZXJ2aWNlIHdvcmtzIHdpdGggYm90aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T0VCYXNpYzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T0VCYXNpY0hhc2g8L2ZpbGVuYW1lPiBnZW5lcmF0b3JzLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gYnVtcHMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gY2hhbmdlcyBhbmQgdGhlIGRpZmZlcmVudCBnZW5lcmF0b3IgbWVjaGFuaXNtcworICAgICAgICAgICAgICAgICAgICBjaGFuZ2Ugc2lnbmF0dXJlcyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgaW1wbGVtZW50ZWQsIHRoZSBidWlsZCBzeXN0ZW0gaW5jbHVkZXMgdmFsdWVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgdGhlIFBSIFNlcnZpY2UgaW50byB0aGUgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gZmllbGQgYXMKKyAgICAgICAgICAgICAgICAgICAgYW4gYWRkaXRpb24gdXNpbmcgdGhlIGZvcm0gIjxmaWxlbmFtZT4ueDwvZmlsZW5hbWU+IiBzbworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cjA8L2ZpbGVuYW1lPiBiZWNvbWVzIDxmaWxlbmFtZT5yMC4xPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yMC4yPC9maWxlbmFtZT4gYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNjaGVtZSBhbGxvd3MgZXhpc3RpbmcgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIHVzZWQgZm9yIHdoYXRldmVyIHJlYXNvbnMsIHdoaWNoIGluY2x1ZGUgbWFudWFsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGJ1bXBzLCBzaG91bGQgaXQgYmUgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgUFIgU2VydmljZSBpcyBub3QgZW5hYmxlZCBvciBydW5uaW5nLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgcGFja2FnZXMgZ2VuZXJhdGVkIGFyZSBqdXN0ICJzZWxmIGNvbnNpc3RlbnQiLgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFkZHMgYW5kIHJlbW92ZXMgcGFja2FnZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIGFib3V0IHVwZ3JhZGUgcGF0aHMgYnV0IGltYWdlcworICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGNvbnNpc3RlbnQgYW5kIGNvcnJlY3Qgd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaW1wbGVzdCBmb3JtIGZvciBhIFBSIFNlcnZpY2UgaXMgZm9yIGl0IHRvIGV4aXN0CisgICAgICAgICAgICAgICAgICAgIGZvciBhIHNpbmdsZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbSB0aGF0IGJ1aWxkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBmZWVkIChidWlsZGluZyBzeXN0ZW0pLgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBzY2VuYXJpbywgeW91IGNhbiBlbmFibGUgYSBsb2NhbCBQUiBTZXJ2aWNlIGJ5CisgICAgICAgICAgICAgICAgICAgIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSU0VSVl9IT1NUJz48ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIHNlcnZpY2UgaXMgc3RhcnRlZCwgcGFja2FnZXMgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGdldCBpbmNyZWFzaW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aWxsIHRha2UgY2FyZSBvZiBzdGFydGluZyBhbmQgc3RvcHBpbmcgdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBtb3JlIGNvbXBsZXggc2V0dXAgd2hlcmUgbXVsdGlwbGUgaG9zdAorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBzeXN0ZW1zIHdvcmsgYWdhaW5zdCBhIGNvbW1vbiwgc2hhcmVkIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgZmVlZCwgeW91IGhhdmUgYSBzaW5nbGUgUFIgU2VydmljZSBydW5uaW5nIGFuZCBpdCBpcworICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgdG8gZWFjaCBidWlsZGluZyBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgbmVlZCB0byBzdGFydCB0aGUgUFIgU2VydmljZSB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmJpdGJha2UtcHJzZXJ2PC9maWxlbmFtZT4gY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaXRiYWtlLXByc2VydiAtLWhvc3QgPHJlcGxhY2VhYmxlPmlwPC9yZXBsYWNlYWJsZT4gLS1wb3J0IDxyZXBsYWNlYWJsZT5wb3J0PC9yZXBsYWNlYWJsZT4gLS1zdGFydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIGhhbmQtc3RhcnRpbmcgdGhlIHNlcnZpY2UsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9mIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgc3lzdGVtIGFzIGRlc2NyaWJlZCBlYXJsaWVyIHNvIGVhY2ggc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgc2VydmVyIGFuZCBwb3J0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHlvdSB1c2UgYnVpbGQgaGlzdG9yeSwgd2hpY2ggYWRkcworICAgICAgICAgICAgICAgICAgICBzb21lIHNhbml0eSBjaGVja3MgdG8gcGFja2FnZSB2ZXJzaW9ucywgaW4gY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgc2VydmVyIHRoYXQgaXMgcnVubmluZyB0aGUgUFIgU2VydmljZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIGJ1aWxkIGhpc3RvcnksIGFkZCB0aGUgZm9sbG93aW5nIHRvIGVhY2ggYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtJ3MgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgSXQgaXMgcmVjb21tZW5kZWQgdG8gYWN0aXZhdGUgImJ1aWxkaGlzdG9yeSIgZm9yIHRlc3RpbmcgdGhlIFBSIHNlcnZpY2UKKyAgICAgSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IgorICAgICBCVUlMREhJU1RPUllfQ09NTUlUID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkIGhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IG1haW50YWluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGluZm9ybWF0aW9uIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG1haW50YWluIGFuIHNzdGF0ZSBmZWVkLCBpdHMgZXhwZWN0ZWQgdGhhdCBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgYWxsIHlvdXIgYnVpbGRpbmcgc3lzdGVtcyB0aGF0IGNvbnRyaWJ1dGUgdG8gdGhlIHNzdGF0ZQorICAgICAgICAgICAgICAgICAgICBmZWVkIHVzZSBhIHNoYXJlZCBQUiBTZXJ2aWNlLCBvciB5b3UgZG8gbm90IHJ1biBhIFBSCisgICAgICAgICAgICAgICAgICAgIFNlcnZpY2Ugb24gYW55IG9mIHlvdXIgYnVpbGRpbmcgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgSGF2aW5nIHNvbWUgc3lzdGVtcyB1c2UgYSBQUiBTZXJ2aWNlIHdoaWxlIG90aGVycyBkbworICAgICAgICAgICAgICAgICAgICBub3QgbGVhZHMgdG8gb2J2aW91cyBwcm9ibGVtcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNoYXJlZCBzdGF0ZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc2hhcmVkLXN0YXRlLWNhY2hlJz5TaGFyZWQgU3RhdGUgQ2FjaGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdtYW51YWxseS1idW1waW5nLXByJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TWFudWFsbHkgQnVtcGluZyBQUjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFsdGVybmF0aXZlIHRvIHNldHRpbmcgdXAgYSBQUiBTZXJ2aWNlIGlzIHRvIG1hbnVhbGx5CisgICAgICAgICAgICAgICAgICAgIGJ1bXAgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSBjb21taXR0ZWQgY2hhbmdlIHJlc3VsdHMgaW4gY2hhbmdpbmcgdGhlIHBhY2thZ2Ugb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgUFIgdmFyaWFibGUgbmVlZHMgdG8gYmUgaW5jcmVhc2VkCisgICAgICAgICAgICAgICAgICAgIChvciAiYnVtcGVkIikgYXMgcGFydCBvZiB0aGF0IGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG5ldyByZWNpcGVzIHlvdSBzaG91bGQgYWRkIHRoZSA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgc2V0IGl0cyBpbml0aWFsIHZhbHVlIGVxdWFsIHRvICJyMCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICBFdmVuIHRob3VnaCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAicjAiLCB0aGUgcHJhY3RpY2Ugb2YgYWRkaW5nIGl0IHRvIGEgbmV3IHJlY2lwZSBtYWtlcworICAgICAgICAgICAgICAgICAgICBpdCBoYXJkZXIgdG8gZm9yZ2V0IHRvIGJ1bXAgdGhlIHZhcmlhYmxlIHdoZW4geW91IG1ha2UgY2hhbmdlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgcmVjaXBlIGluIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBzaGFyaW5nIGEgY29tbW9uIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSB3aXRoIG11bHRpcGxlIHJlY2lwZXMsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWxzbyB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5DX1BSJz5JTkNfUFI8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGVzIHNoYXJpbmcgdGhlIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSBhcmUgcmVidWlsdCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgaXRzZWxmIGlzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgbXVzdCBzZXQgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIChpbml0aWFsbHkgdG8gInIwIiksIGFuZCBhbGwgcmVjaXBlcyByZWZlcnJpbmcgdG8gaXQgc2hvdWxkIHNldCA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byAiJChJTkNfUFIpLjAiIGluaXRpYWxseSwgaW5jcmVtZW50aW5nIHRoZSBsYXN0IG51bWJlciB3aGVuIHRoZSByZWNpcGUgaXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSBpcyBjaGFuZ2VkIHRoZW4gaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiBzaG91bGQgYmUgaW5jcmVtZW50ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXBncmFkaW5nIHRoZSB2ZXJzaW9uIG9mIGEgcGFja2FnZSwgYXNzdW1pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPlBWPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLCB0aGUgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFyaWFibGUgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIHJlc2V0IHRvICJyMCIgKG9yICIkKElOQ19QUikuMCIgaWYgeW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc3VhbGx5LCB2ZXJzaW9uIGluY3JlYXNlcyBvY2N1ciBvbmx5IHRvIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBmb3Igc29tZSByZWFzb24gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gY2hhbmdlcyBidXQgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgaW5jcmVhc2UsIHlvdSBjYW4gaW5jcmVhc2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEUnPlBFPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSAoUGFja2FnZSBFcG9jaCkuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cyB0byAiMCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gbnVtYmVyaW5nIHN0cml2ZXMgdG8gZm9sbG93IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmRlYmlhbi5vcmcvZG9jL2RlYmlhbi1wb2xpY3kvY2gtY29udHJvbGZpZWxkcy5odG1sJz4KKyAgICAgICAgICAgICAgICAgICAgRGViaWFuIFZlcnNpb24gRmllbGQgUG9saWN5IEd1aWRlbGluZXM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZ3VpZGVsaW5lcyBkZWZpbmUgaG93IHZlcnNpb25zIGFyZSBjb21wYXJlZCBhbmQgd2hhdCAiaW5jcmVhc2luZyIgYSB2ZXJzaW9uIG1lYW5zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdoYW5kbGluZy1vcHRpb25hbC1tb2R1bGUtcGFja2FnaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5IYW5kbGluZyBPcHRpb25hbCBNb2R1bGUgUGFja2FnaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWFueSBwaWVjZXMgb2Ygc29mdHdhcmUgc3BsaXQgZnVuY3Rpb25hbGl0eSBpbnRvIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgbW9kdWxlcyAob3IgcGx1Zy1pbnMpIGFuZCB0aGUgcGx1Zy1pbnMgdGhhdCBhcmUgYnVpbHQKKyAgICAgICAgICAgICAgICBtaWdodCBkZXBlbmQgb24gY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgIFRvIGF2b2lkIGhhdmluZyB0byBkdXBsaWNhdGUgdGhlIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyB3aGF0CisgICAgICAgICAgICAgICAgbW9kdWxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgcmVjaXBlIG9yIHRvIGF2b2lkIGhhdmluZworICAgICAgICAgICAgICAgIHRvIHBhY2thZ2UgZWFjaCBtb2R1bGUgYnkgaGFuZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGhhbmRsZSBtb2R1bGUgcGFja2FnaW5nIGR5bmFtaWNhbGx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYW5kbGUgb3B0aW9uYWwgbW9kdWxlIHBhY2thZ2luZywgeW91IG5lZWQgdG8gZG8gdHdvIHRoaW5nczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5zdXJlIHRoZSBtb2R1bGUgcGFja2FnaW5nIGlzIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBkb25lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5zdXJlIHRoYXQgYW55IGRlcGVuZGVuY2llcyBvbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyBmcm9tIG90aGVyIHJlY2lwZXMgYXJlIHNhdGlzZmllZCBieSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbWFraW5nLXN1cmUtdGhlLXBhY2thZ2luZy1pcy1kb25lJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TWFraW5nIFN1cmUgdGhlIFBhY2thZ2luZyBpcyBEb25lPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBlbnN1cmUgdGhlIG1vZHVsZSBwYWNrYWdpbmcgYWN0dWFsbHkgZ2V0cyBkb25lLCB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiBmdW5jdGlvbiB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9wYWNrYWdlczwvZmlsZW5hbWU+IFB5dGhvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIHNlYXJjaGVzIGZvciBhIHBhdHRlcm4gb2YgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdW5kZXIgYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcGF0aCBhbmQgY3JlYXRlcyBhIHBhY2thZ2UgZm9yIGVhY2ggb25lIGl0IGZpbmRzCisgICAgICAgICAgICAgICAgICAgIGJ5IGFwcGVuZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU19wYWNrYWdlbmFtZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfcGFja2FnZW5hbWU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFU0NSSVBUSU9OX3BhY2thZ2VuYW1lPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIDxmaWxlbmFtZT5saWdodHRwZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgICAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpZ2h0dHBkX2xpYmRpciwgJ15tb2RfKC4qKVwuc28kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpZ2h0dHBkLW1vZHVsZS0lcycsICdMaWdodHRwZCBtb2R1bGUgZm9yICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycpCisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBzcGVjaWZpZXMgYSBudW1iZXIgb2YgdGhpbmdzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWxsIHRvIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZGlyZWN0b3J5IHdpdGhpbiB0aGUgZmlsZXMgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgeW91ciByZWNpcGUgdGhyb3VnaCA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gd2hpY2ggdG8gc2VhcmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gbWF0Y2ggbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIG5vdGUgdGhlIHBhcmVudGhlc2VzICgpIHRoYXQgbWFyaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJ0IG9mIHRoZSBleHByZXNzaW9uIGZyb20gd2hpY2ggdGhlIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgc2hvdWxkIGJlIGRlcml2ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBwYXR0ZXJuIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBkZXNjcmlwdGlvbiBmb3IgZWFjaCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFuIGVtcHR5IHN0cmluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0cmFfZGVwZW5kczwvZmlsZW5hbWU+LCB3aGljaCBkaXNhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGRlcGVuZGVuY3kgb24gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlnaHR0cGQ8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIGEgZmlsZSBpbiA8ZmlsZW5hbWU+JHtsaWJkaXJ9PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgPGZpbGVuYW1lPm1vZF9hbGlhcy5zbzwvZmlsZW5hbWU+IGlzIGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcGFja2FnZSBjYWxsZWQgPGZpbGVuYW1lPmxpZ2h0dHBkLW1vZHVsZS1hbGlhczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3JlYXRlZCBmb3IgaXQgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVNDUklQVElPTic+PGZpbGVuYW1lPkRFU0NSSVBUSU9OPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiTGlnaHR0cGQgbW9kdWxlIGZvciBhbGlhcyIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPZnRlbiwgcGFja2FnaW5nIG1vZHVsZXMgaXMgYXMgc2ltcGxlIGFzIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBtb3JlIGFkdmFuY2VkIG9wdGlvbnMgZXhpc3QgdGhhdCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gdG8gbW9kaWZ5IGl0cworICAgICAgICAgICAgICAgICAgICBiZWhhdmlvci4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCBpZiB5b3UgbmVlZCB0bywgeW91IGNhbiBhZGQgbW9yZSBsb2dpYyBieSBzcGVjaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgIGEgaG9vayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmb3IgZWFjaCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbHNvIHBlcmZlY3RseSBhY2NlcHRhYmxlIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gbXVsdGlwbGUgdGltZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBzZXQgb2YgbW9kdWxlcyB0byBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29ubm1hbi5pbmM8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+c291cmNlIHJlcG9zaXRvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBleGFtcGxlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIHJlZmVyZW5jZSB0aGF0IHNob3dzCisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiBtYW5kYXRvcnkgYW5kCisgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1hbmRhdG9yeSBhcmd1bWVudHMKKworICAgICByb290CisgICAgICAgIFRoZSBwYXRoIGluIHdoaWNoIHRvIHNlYXJjaAorICAgICBmaWxlX3JlZ2V4CisgICAgICAgIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBzZWFyY2hlZCBmaWxlcy4KKyAgICAgICAgVXNlIHBhcmVudGhlc2VzICgpIHRvIG1hcmsgdGhlIHBhcnQgb2YgdGhpcworICAgICAgICBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGVyaXZlIHRoZQorICAgICAgICBtb2R1bGUgbmFtZSAodG8gYmUgc3Vic3RpdHV0ZWQgd2hlcmUgJXMgaXMKKyAgICAgICAgdXNlZCBpbiBvdGhlciBmdW5jdGlvbiBhcmd1bWVudHMgYXMgbm90ZWQgYmVsb3cpCisgICAgIG91dHB1dF9wYXR0ZXJuCisgICAgICAgIFBhdHRlcm4gdG8gdXNlIGZvciB0aGUgcGFja2FnZSBuYW1lcy4gTXVzdAorICAgICAgICBpbmNsdWRlICVzLgorICAgICBkZXNjcmlwdGlvbgorICAgICAgICBEZXNjcmlwdGlvbiB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdAorICAgICAgICBpbmNsdWRlICVzLgorCisgICAgIE9wdGlvbmFsIGFyZ3VtZW50cworCisgICAgIHBvc3RpbnN0CisgICAgICAgIFBvc3RpbnN0YWxsIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcworICAgICAgICAoYXMgYSBzdHJpbmcpCisgICAgIHJlY3Vyc2l2ZQorICAgICAgICBUcnVlIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgc2VhcmNoIC0gZGVmYXVsdAorICAgICAgICBGYWxzZQorICAgICBob29rCisgICAgICAgIEEgaG9vayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGV2ZXJ5IG1hdGNoLgorICAgICAgICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nCisgICAgICAgIGFyZ3VtZW50cyAoaW4gdGhlIG9yZGVyIGxpc3RlZCk6CisKKyAgICAgICAgZgorICAgICAgICAgICBGdWxsIHBhdGggdG8gdGhlIGZpbGUvZGlyZWN0b3J5IG1hdGNoCisgICAgICAgIHBrZworICAgICAgICAgICBUaGUgcGFja2FnZSBuYW1lCisgICAgICAgIGZpbGVfcmVnZXgKKyAgICAgICAgICAgQXMgYWJvdmUKKyAgICAgICAgb3V0cHV0X3BhdHRlcm4KKyAgICAgICAgICAgQXMgYWJvdmUKKyAgICAgICAgbW9kdWxlbmFtZQorICAgICAgICAgICBUaGUgbW9kdWxlIG5hbWUgZGVyaXZlZCB1c2luZyBmaWxlX3JlZ2V4CisKKyAgICAgZXh0cmFfZGVwZW5kcworICAgICAgICBFeHRyYSBydW50aW1lIGRlcGVuZGVuY2llcyAoUkRFUEVORFMpIHRvIGJlCisgICAgICAgIHNldCBmb3IgYWxsIHBhY2thZ2VzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBOb25lCisgICAgICAgIGNhdXNlcyBhIGRlcGVuZGVuY3kgb24gdGhlIG1haW4gcGFja2FnZQorICAgICAgICAoJHtQTn0pIC0gaWYgeW91IGRvIG5vdCB3YW50IHRoaXMsIHBhc3MgZW1wdHkKKyAgICAgICAgc3RyaW5nICcnIGZvciB0aGlzIHBhcmFtZXRlci4KKyAgICAgYXV4X2ZpbGVzX3BhdHRlcm4KKyAgICAgICAgRXh0cmEgaXRlbShzKSB0byBiZSBhZGRlZCB0byBGSUxFUyBmb3IgZWFjaAorICAgICAgICBwYWNrYWdlLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0gb3IgYSBsaXN0CisgICAgICAgIG9mIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiBNdXN0IGluY2x1ZGUgJXMuCisgICAgIHBvc3RybQorICAgICAgICBwb3N0cm0gc2NyaXB0IHRvIHVzZSBmb3IgYWxsIHBhY2thZ2VzIChhcyBhCisgICAgICAgIHN0cmluZykKKyAgICAgYWxsb3dfZGlycworICAgICAgICBUcnVlIHRvIGFsbG93IGRpcmVjdG9yaWVzIHRvIGJlIG1hdGNoZWQgLQorICAgICAgICBkZWZhdWx0IEZhbHNlCisgICAgIHByZXBlbmQKKyAgICAgICAgSWYgVHJ1ZSwgcHJlcGVuZCBjcmVhdGVkIHBhY2thZ2VzIHRvIFBBQ0tBR0VTCisgICAgICAgIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgRmFsc2Ugd2hpY2ggYXBwZW5kcyB0aGVtCisgICAgIG1hdGNoX3BhdGgKKyAgICAgICAgbWF0Y2ggZmlsZV9yZWdleCBvbiB0aGUgd2hvbGUgcmVsYXRpdmUgcGF0aCB0bworICAgICAgICB0aGUgcm9vdCByYXRoZXIgdGhhbiBqdXN0IHRoZSBmaWxlIG5hbWUKKyAgICAgYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0KKyAgICAgICAgRXh0cmEgaXRlbShzKSB0byBiZSBhZGRlZCB0byBGSUxFUyBmb3IgZWFjaAorICAgICAgICBwYWNrYWdlLCB1c2luZyB0aGUgYWN0dWFsIGRlcml2ZWQgbW9kdWxlIG5hbWUKKyAgICAgICAgcmF0aGVyIHRoYW4gY29udmVydGluZyBpdCB0byBzb21ldGhpbmcgbGVnYWwKKyAgICAgICAgZm9yIGEgcGFja2FnZSBuYW1lLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0KKyAgICAgICAgb3IgYSBsaXN0IG9mIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiBNdXN0CisgICAgICAgIGluY2x1ZGUgJXMuCisgICAgIGFsbG93X2xpbmtzCisgICAgICAgIFRydWUgdG8gYWxsb3cgc3ltbGlua3MgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQKKyAgICAgICAgRmFsc2UKKyAgICAgc3VtbWFyeQorICAgICAgICBTdW1tYXJ5IHRvIHNldCBmb3IgZWFjaCBwYWNrYWdlLiBNdXN0IGluY2x1ZGUgJXM7CisgICAgICAgIGRlZmF1bHRzIHRvIGRlc2NyaXB0aW9uIGlmIG5vdCBzZXQuCisgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3NhdGlzZnlpbmctZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2F0aXNmeWluZyBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgcGFydCBmb3IgaGFuZGxpbmcgb3B0aW9uYWwgbW9kdWxlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBpcyB0byBlbnN1cmUgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIG9uIG9wdGlvbmFsIG1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBvdGhlciByZWNpcGVzIGFyZSBzYXRpc2ZpZWQgYnkgeW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYmUgc3VyZSB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTX0RZTkFNSUMnPjxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY29udGludWVzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWdodHRwZDwvZmlsZW5hbWU+IHJlY2lwZSBzaG93biBlYXJsaWVyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VTX0RZTkFNSUMgPSAibGlnaHR0cGQtbW9kdWxlLS4qIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNwZWNpZmllZCBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhbiBvZgorICAgICAgICAgICAgICAgICAgICBjb3Vyc2UgYmUgYW55dGhpbmcuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgaXQgaXMgPGZpbGVuYW1lPmxpZ2h0dHBkLW1vZHVsZS08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgc3BlY2lmaWVkIGFzIHRoZSBwcmVmaXggdG8gZW5zdXJlIHRoYXQgYW55CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9uIGEgcGFja2FnZSBuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIHByZWZpeCBhcmUgc2F0aXNmaWVkCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlIHZhbHVlIHlvdSBwdXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPiBzaG91bGQgY29ycmVzcG9uZCB0bworICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBwYXR0ZXJuIHNwZWNpZmllZCBpbiB0aGUgY2FsbCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctcnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIFJ1bnRpbWUgUGFja2FnZSBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHVyaW5nIGEgYnVpbGQsIEJpdEJha2UgYWx3YXlzIHRyYW5zZm9ybXMgYSByZWNpcGUgaW50byBvbmUgb3IKKyAgICAgICAgICAgICAgICBtb3JlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBCaXRCYWtlIHRha2VzIHRoZSA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+IHJlY2lwZQorICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50bHkgcHJvZHVjZXMgdGhlIDxmaWxlbmFtZT5iYXNoLWRiZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLXN0YXRpY2RldjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLWRldjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmFzaC1kb2M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC1sb2NhbGU8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBOb3QgYWxsIGdlbmVyYXRlZCBwYWNrYWdlcyBhcmUgaW5jbHVkZWQgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHNldmVyYWwgc2l0dWF0aW9ucywgeW91IG1pZ2h0IG5lZWQgdG8gdXBkYXRlLCBhZGQsIHJlbW92ZSwKKyAgICAgICAgICAgICAgICBvciBxdWVyeSB0aGUgcGFja2FnZXMgb24gYSB0YXJnZXQgZGV2aWNlIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAoaS5lLiB3aXRob3V0IGhhdmluZyB0byBnZW5lcmF0ZSBhIG5ldyBpbWFnZSkuCisgICAgICAgICAgICAgICAgRXhhbXBsZXMgb2Ygc3VjaCBzaXR1YXRpb25zIGluY2x1ZGU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdhbnQgdG8gcHJvdmlkZSBpbi10aGUtZmllbGQgdXBkYXRlcyB0byBkZXBsb3llZAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcyAoZS5nLiBzZWN1cml0eSB1cGRhdGVzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byBoYXZlIGEgZmFzdCB0dXJuLWFyb3VuZCBkZXZlbG9wbWVudCBjeWNsZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG9uZSBvciBtb3JlIGFwcGxpY2F0aW9ucyB0aGF0IHJ1biBvbiB5b3VyIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byB0ZW1wb3JhcmlseSBpbnN0YWxsIHRoZSAiZGVidWciIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiB2YXJpb3VzIGFwcGxpY2F0aW9ucyBvbiB5b3VyIGRldmljZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcgY2FuIGJlIGdyZWF0bHkgaW1wcm92ZWQgYnkgYWxsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0byBzeW1ib2xzIGFuZCBzb3VyY2UgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB3YW50IHRvIGRlcGxveSBhIG1vcmUgbWluaW1hbCBwYWNrYWdlIHNlbGVjdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBkZXZpY2UgYnV0IGFsbG93IGluLXRoZS1maWVsZCB1cGRhdGVzIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXIgc2VsZWN0aW9uIGZvciBjdXN0b21pemF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIGFsbCB0aGVzZSBzaXR1YXRpb25zLCB5b3UgaGF2ZSBzb21ldGhpbmcgc2ltaWxhciB0byBhIG1vcmUKKyAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCBMaW51eCBkaXN0cmlidXRpb24gaW4gdGhhdCBpbi1maWVsZCBkZXZpY2VzCisgICAgICAgICAgICAgICAgYXJlIGFibGUgdG8gcmVjZWl2ZSBwcmUtY29tcGlsZWQgcGFja2FnZXMgZnJvbSBhIHNlcnZlciBmb3IKKyAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gb3IgdXBkYXRlLgorICAgICAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gaW5zdGFsbCB0aGVzZSBwYWNrYWdlcyBvbiBhIHJ1bm5pbmcsCisgICAgICAgICAgICAgICAgaW4tZmllbGQgZGV2aWNlIGlzIHdoYXQgaXMgdGVybWVkICJydW50aW1lIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtYW5hZ2VtZW50Ii4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50LCB5b3UKKyAgICAgICAgICAgICAgICBuZWVkIGEgaG9zdC9zZXJ2ZXIgbWFjaGluZSB0aGF0IHNlcnZlcyB1cCB0aGUgcHJlLWNvbXBpbGVkCisgICAgICAgICAgICAgICAgcGFja2FnZXMgcGx1cyB0aGUgcmVxdWlyZWQgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgWW91IGFsc28gbmVlZCBwYWNrYWdlIG1hbmlwdWxhdGlvbiB0b29scyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBtYWNoaW5lIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBhY3QgYXMgdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGF0IG1hY2hpbmUgZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBiZSB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIHNlcnZlci4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgbWFjaGluZSBjb3VsZCBwdXNoIGl0cyBhcnRpZmFjdHMgdG8gYW5vdGhlciBtYWNoaW5lCisgICAgICAgICAgICAgICAgdGhhdCBhY3RzIGFzIHRoZSBzZXJ2ZXIgKGUuZy4gSW50ZXJuZXQtZmFjaW5nKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBzaW1wbGUgYnVpbGQgdGhhdCB0YXJnZXRzIGp1c3Qgb25lIGRldmljZSBwcm9kdWNlcworICAgICAgICAgICAgICAgIG1vcmUgdGhhbiBvbmUgcGFja2FnZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgYnVpbGQgYXJlIHNlcGFyYXRlZAorICAgICAgICAgICAgICAgIG91dCBpbnRvIGEgY291cGxlIG9mIGRpZmZlcmVudCBwYWNrYWdlIGdyb3VwaW5ncyBiYXNlZCBvbgorICAgICAgICAgICAgICAgIGNyaXRlcmlhIHN1Y2ggYXMgdGhlIHRhcmdldCdzIENQVSBhcmNoaXRlY3R1cmUsIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBib2FyZCwgb3IgdGhlIEMgbGlicmFyeSB1c2VkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgYnVpbGQgdGFyZ2V0aW5nIHRoZSA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGV2aWNlIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFja2FnZSBkYXRhYmFzZXM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsbDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXJtdjV0ZTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50ZWQgeW91ciA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+IGRldmljZSB0byBiZQorICAgICAgICAgICAgICAgIGF3YXJlIG9mIGFsbCB0aGUgcGFja2FnZXMgdGhhdCB3ZXJlIGF2YWlsYWJsZSB0byBpdCwKKyAgICAgICAgICAgICAgICB5b3Ugd291bGQgbmVlZCB0byBwb2ludCBpdCB0byBlYWNoIG9mIHRoZXNlIGRhdGFiYXNlcworICAgICAgICAgICAgICAgIGluZGl2aWR1YWxseS4KKyAgICAgICAgICAgICAgICBJbiBhIHNpbWlsYXIgd2F5LCBhIHRyYWRpdGlvbmFsIExpbnV4IGRpc3RyaWJ1dGlvbiB1c3VhbGx5IGlzCisgICAgICAgICAgICAgICAgY29uZmlndXJlZCB0byBiZSBhd2FyZSBvZiBhIG51bWJlciBvZiBzb2Z0d2FyZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIGl0IHJldHJpZXZlcyBwYWNrYWdlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQgaXMgY29tcGxldGVseSBvcHRpb25hbCBhbmQKKyAgICAgICAgICAgICAgICBub3QgcmVxdWlyZWQgZm9yIGEgc3VjY2Vzc2Z1bCBidWlsZCBvciBkZXBsb3ltZW50IGluIGFueQorICAgICAgICAgICAgICAgIHdheS4KKyAgICAgICAgICAgICAgICBCdXQgaWYgeW91IHdhbnQgdG8gbWFrZSB1c2Ugb2YgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQsCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZG8gYSBjb3VwbGUgdGhpbmdzIGFib3ZlIGFuZCBiZXlvbmQgdGhlIGJhc2ljcy4KKyAgICAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMgd2hhdCB5b3UgbmVlZCB0byBkby4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QnVpbGQgQ29uc2lkZXJhdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYnVpbGQgY29uc2lkZXJhdGlvbnMgdGhhdCB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICB0byBiZSBhd2FyZSBvZiBpbiBvcmRlciB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIEJpdEJha2UgZ2VuZXJhdGVzIHBhY2thZ2VzIGl0IG5lZWRzIHRvIGtub3cKKyAgICAgICAgICAgICAgICAgICAgd2hhdCBmb3JtYXQgb3IgZm9ybWF0cyB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgIEluIHlvdXIgY29uZmlndXJhdGlvbiwgeW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSB0aGUgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hvb3NlIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBmb3JtYXQgYnV0IHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGF0IGxlYXN0IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd291bGQgbGlrZSB5b3VyIGltYWdlIHRvIHN0YXJ0IG9mZiB3aXRoIGEgYmFzaWMKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBkYXRhYmFzZSBvZiB0aGUgcGFja2FnZXMgaW4geW91ciBjdXJyZW50IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgaGF2ZSB0aGUgcmVsZXZhbnQgdG9vbHMgYXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZm9yIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50LCB5b3UgY2FuIGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UtbWFuYWdlbWVudCIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkaW5nICJwYWNrYWdlLW1hbmFnZW1lbnQiIGluIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBlbnN1cmVzIHRoYXQgd2hlbiB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgaXMgYXNzZW1ibGVkIGZvciB5b3VyIHRhcmdldCwgdGhlIGltYWdlIGluY2x1ZGVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50bHkta25vd24gcGFja2FnZSBkYXRhYmFzZXMgYXMgd2VsbCBhcworICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LXNwZWNpZmljIHRvb2xzIHJlcXVpcmVkIGZvciBydW50aW1lCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlbWVudCB0byBiZSBwZXJmb3JtZWQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY291bGQgc3RhcnQgeW91ciBpbWFnZSBvZmYgd2l0aG91dCBhbnkgZGF0YWJhc2VzCisgICAgICAgICAgICAgICAgICAgIGJ1dCBvbmx5IGluY2x1ZGUgdGhlIHJlcXVpcmVkIG9uLXRhcmdldCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHRvb2wocykuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdSBjb3VsZCBpbmNsdWRlICJvcGtnIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWYgeW91IGFyZSB1c2luZyB0aGUgSVBLIHBhY2thZ2UgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoZW4gaW5pdGlhbGl6ZSB5b3VyIHRhcmdldCdzIHBhY2thZ2UgZGF0YWJhc2UocykKKyAgICAgICAgICAgICAgICAgICAgbGF0ZXIgb25jZSB5b3VyIGltYWdlIGlzIHVwIGFuZCBydW5uaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuZXZlciB5b3UgcGVyZm9ybSBhbnkgc29ydCBvZiBidWlsZCBzdGVwIHRoYXQgY2FuCisgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbGx5IGdlbmVyYXRlIGEgcGFja2FnZSBvciBtb2RpZnkgYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgaXQgaXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlLWdlbmVyYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGluZGV4IHdpdGg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAkIGJpdGJha2UgcGFja2FnZS1pbmRleAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCBpdCBpcyBub3Qgc3VmZmljaWVudCB0byBzaW1wbHkgZG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+c29tZS1wYWNrYWdlPC9yZXBsYWNlYWJsZT4gcGFja2FnZS1pbmRleAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYmVjYXVzZSBCaXRCYWtlIGRvZXMgbm90IHByb3Blcmx5IHNjaGVkdWxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1pbmRleDwvZmlsZW5hbWU+IHRhcmdldCBmdWxseSBhZnRlciBhbnkKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGFyZ2V0IGhhcyBjb21wbGV0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGJlIHN1cmUgdG8gcnVuIHRoZSBwYWNrYWdlIHVwZGF0ZSBzdGVwIHNlcGFyYXRlbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldC1pcGsnPlVzaW5nIElQSzwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIGlmIHlvdSBhcmUgdXNpbmcgSVBLIGFzIHlvdXIgcGFja2FnZSBmb3JtYXQsIHlvdQorICAgICAgICAgICAgICAgICAgICBjYW4gbWFrZSB1c2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0cm8tZmVlZC1jb25maWdzPC9maWxlbmFtZT4gcmVjaXBlIHByb3ZpZGVkCisgICAgICAgICAgICAgICAgICAgIGJ5IDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gaW4gb3JkZXIgdG8gY29uZmlndXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHRvIHVzZSB5b3VyIElQSyBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91ciBidWlsZCBpcyBjb21wbGV0ZSwgeW91ciBwYWNrYWdlcyByZXNpZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95LzxyZXBsYWNlYWJsZT5wYWNrYWdlLWZvcm1hdDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBhbmQgeW91ciBzZWxlY3RlZCBwYWNrYWdlIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgaXMgSVBLLCB0aGVuIHlvdXIgSVBLIHBhY2thZ2VzIGFyZSBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaXBrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQtc2VydmVyJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SG9zdCBvciBTZXJ2ZXIgTWFjaGluZSBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBwYWNrYWdlcyBhcmUgc2VydmVkIGZyb20gYSBzZXJ2ZXIgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgSFRUUC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgb3RoZXIgcHJvdG9jb2xzIGFyZSBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIEhUVFAsIHRoZW4gc2V0dXAgYW5kIGNvbmZpZ3VyZSBhCisgICAgICAgICAgICAgICAgICAgIHdlYiBzZXJ2ZXIsIHN1Y2ggYXMgQXBhY2hlIDIgb3IgbGlnaHR0cGQsIG9uIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgIHNlcnZpbmcgdGhlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBwcmV2aW91c2x5IG1lbnRpb25lZCwgdGhlIGJ1aWxkIG1hY2hpbmUgY2FuIGFjdCBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgdGhhdCBkZXNjcmliZSBzZXJ2ZXIgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBzZXR1cHMsIHRoZSBidWlsZCBtYWNoaW5lIGlzIGFzc3VtZWQgdG8gYWxzbyBiZSB0aGUgc2VydmVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdlLXNlcnZlci1hcGFjaGUnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+U2VydmluZyBQYWNrYWdlcyB2aWEgQXBhY2hlIDI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgeW91IGFyZSB1c2luZyB0aGUgQXBhY2hlIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgZGlyZWN0b3J5IHRvIHlvdXIgQXBhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIHlvdSBjYW4gZmluZCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9odHRwZC9jb25mL2h0dHBkLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGNvbW1hbmRzIHNpbWlsYXIgdG8gdGhlc2Ugb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgZXhhbXBsZSBjb21tYW5kcyBhc3N1bWUgYSB0b3AtbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBpbiB5b3VyIGhvbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBhbHNvIGFzc3VtZXMgYW4gUlBNIHBhY2thZ2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhIGRpZmZlcmVudCBwYWNrYWdlIHR5cGUsIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgSVBLLCB1c2UgImlwayIgaW4gdGhlIHBhdGhuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAmbHQ7VmlydHVhbEhvc3QgKjo4MCZndDsKKyAgICAgICAuLi4uCisgICAgICAgICBBbGlhcyAvcnBtIH4vcG9reS9idWlsZC90bXAvZGVwbG95L3JwbQorICAgICAgICAgJmx0O0RpcmVjdG9yeSAifi9wb2t5L2J1aWxkL3RtcC9kZXBsb3kvcnBtIiZndDsKKyAgICAgICAgICAgT3B0aW9ucyArSW5kZXhlcworICAgICAgICAgJmx0Oy9EaXJlY3RvcnkmZ3Q7CisgICAgICZsdDsvVmlydHVhbEhvc3QmZ3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbG9hZCB0aGUgQXBhY2hlIGNvbmZpZ3VyYXRpb24gYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgc3RlcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFsbCBjb21tYW5kcywgYmUgc3VyZSB5b3UgaGF2ZSByb290CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZpbGVnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgdXNpbmcgRmVkb3JhIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENlbnRPUywgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzZXJ2aWNlIGh0dHBkIHJlbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBVYnVudHUgYW5kIERlYmlhbiwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyAvZXRjL2luaXQuZC9hcGFjaGUyIHJlbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBPcGVuU1VTRSwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyAvZXRjL2luaXQuZC9hcGFjaGUyIHJlbG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTRUxpbnV4KSwgeW91IG5lZWQgdG8gbGFiZWwgdGhlIGZpbGVzIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIGFjY2Vzc2libGUgdGhyb3VnaCBBcGFjaGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgUlBNIHBhY2thZ2UgdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBjaGNvbiAtUiAtaCAtdCBodHRwZF9zeXNfY29udGVudF90IHRtcC9kZXBsb3kvcnBtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zZXJ2ZXItbGlnaHR0cGQnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+U2VydmluZyBQYWNrYWdlcyB2aWEgbGlnaHR0cGQ8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBsaWdodHRwZCwgYWxsIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICB0byBkbyBpcyB0byBwcm92aWRlIGEgbGluayBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95LzxyZXBsYWNlYWJsZT5wYWNrYWdlLWZvcm1hdDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byBsaWdodHRwZCdzIGRvY3VtZW50LXJvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRldGVybWluZSB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgbGlnaHR0cGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBieSBsb29raW5nIHRocm91Z2ggaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgZm91bmQgYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIElQSywgbGlnaHR0cGQncworICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQtcm9vdCBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdmFyL3d3dy9saWdodHRwZDwvZmlsZW5hbWU+LCBhbmQgeW91IGhhZAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgZm9yIGEgdGFyZ2V0IG5hbWVkICJCT0FSRCIsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHlvdSBtaWdodCBjcmVhdGUgYSBsaW5rIGZyb20geW91ciBidWlsZCBsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gbGlnaHR0cGQncyBkb2N1bWVudC1yb290IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIyBsbiAtcyAkKFBXRCkvdG1wL2RlcGxveS9pcGsgL3Zhci93d3cvbGlnaHR0cGQvQk9BUkQtZGlyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBuZWVkIHRvIHN0YXJ0IHRoZSBsaWdodHRwZCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWV0aG9kIHVzZWQgdG8gc3RhcnQgdGhlIHNlcnZlciB2YXJpZXMgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG9uZSBiYXNpYyBtZXRob2QgdGhhdCBzdGFydHMgaXQgYnkgaGFuZCBpczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAjIGxpZ2h0dHBkIC1mIC9ldGMvbGlnaHR0cGQvbGlnaHR0cGQuY29uZgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQtdGFyZ2V0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VGFyZ2V0IFNldHVwPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHVwIHRoZSB0YXJnZXQgZGlmZmVycyBkZXBlbmRpbmcgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgUlBNIGFuZCBJUEsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldC1ycG0nPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgUlBNPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBmb3IgcGVyZm9ybWluZyBydW50aW1lIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgb2YgUlBNIHBhY2thZ2VzIG9uIHRoZSB0YXJnZXQgaXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c21hcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgT24gdGhlIHRhcmdldCBtYWNoaW5lLCB5b3UgbmVlZCB0byBpbmZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zbWFydDwvZmlsZW5hbWU+IG9mIGV2ZXJ5IHBhY2thZ2UgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHN1cHBvc2UgeW91ciB0YXJnZXQgZGV2aWNlIGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgdGhyZWUgcGFja2FnZSBkYXRhYmFzZXMgZnJvbSBhIHNlcnZlciBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlcnZlci5uYW1lPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWxsPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5pNTg2PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdmVuIHRoaXMgZXhhbXBsZSwgaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzbWFydCBjaGFubmVsIC0tYWRkIGFsbCB0eXBlPXJwbS1tZCBiYXNldXJsPWh0dHA6Ly9zZXJ2ZXIubmFtZS9ycG0vYWxsCisgICAgICMgc21hcnQgY2hhbm5lbCAtLWFkZCBpNTg1IHR5cGU9cnBtLW1kIGJhc2V1cmw9aHR0cDovL3NlcnZlci5uYW1lL3JwbS9pNTg2CisgICAgICMgc21hcnQgY2hhbm5lbCAtLWFkZCBxZW11eDg2IHR5cGU9cnBtLW1kIGJhc2V1cmw9aHR0cDovL3NlcnZlci5uYW1lL3JwbS9xZW11eDg2CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvIGZyb20gdGhlIHRhcmdldCBtYWNoaW5lLCBmZXRjaCB0aGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIHNtYXJ0IHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgdXNlIHRoZSA8ZmlsZW5hbWU+c21hcnQgcXVlcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5zbWFydCBpbnN0YWxsPC9maWxlbmFtZT4gY29tbWFuZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgYW5kIGluc3RhbGwgcGFja2FnZXMgZnJvbSB0aGUgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldC1pcGsnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgSVBLPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBmb3IgcGVyZm9ybWluZyBydW50aW1lIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgb2YgSVBLIHBhY2thZ2VzIG9uIHRoZSB0YXJnZXQgaXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBpbmZvcm0gPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZGF0YWJhc2VzIHlvdSB3YW50IHRvIHVzZSwgc2ltcGx5IGNyZWF0ZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIG1vcmUgPGZpbGVuYW1lPiouY29uZjwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvb3BrZzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gYXBwbGljYXRpb24gdXNlcyB0aGVtCisgICAgICAgICAgICAgICAgICAgICAgICB0byBmaW5kIGl0cyBhdmFpbGFibGUgcGFja2FnZSBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBjb25maWd1cmVkIHlvdXIgSFRUUCBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHlvdXIgbWFjaGluZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnd3dy5teXNpdGUuY29tPC9maWxlbmFtZT4gdG8gc2VydmUgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYSA8ZmlsZW5hbWU+Qk9BUkQtZGlyPC9maWxlbmFtZT4gZGlyZWN0b3J5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpdHMgZG9jdW1lbnQtcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG1pZ2h0IGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgb24gdGhlIHRhcmdldCBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL29wa2cvYmFzZS1mZWVkcy5jb25mPC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNyYy9neiBhbGwgaHR0cDovL3d3dy5teXNpdGUuY29tL0JPQVJELWRpci9hbGwKKyAgICAgc3JjL2d6IGFybXY3YSBodHRwOi8vd3d3Lm15c2l0ZS5jb20vQk9BUkQtZGlyL2FybXY3YQorICAgICBzcmMvZ3ogYmVhZ2xlYm9uZSBodHRwOi8vd3d3Lm15c2l0ZS5jb20vQk9BUkQtZGlyL2JlYWdsZWJvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSB3YXkgb2YgbWFraW5nIGl0IGVhc2llciB0byBnZW5lcmF0ZSBhbmQgbWFrZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2UgSVBLIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXZhaWxhYmxlIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgc2ltcGx5IGRlZmluZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZFRURfREVQTE9ZRElSX0JBU0VfVVJJJz48ZmlsZW5hbWU+RkVFRF9ERVBMT1lESVJfQkFTRV9VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwb2ludCB0byB5b3VyIHNlcnZlciBhbmQgdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LXJvb3Qgd2hpY2ggY29udGFpbnMgdGhlIGRhdGFiYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOiBpZiB5b3UgYXJlIHNlcnZpbmcgeW91ciBwYWNrYWdlcyBvdmVyCisgICAgICAgICAgICAgICAgICAgICAgICBIVFRQLCB5b3VyIHNlcnZlcidzIElQIGFkZHJlc3MgaXMgMTkyLjE2OC43LjEsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBkYXRhYmFzZXMgYXJlIGxvY2F0ZWQgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qk9BUkQtZGlyPC9maWxlbmFtZT4gdW5kZXJuZWF0aCB5b3VyIEhUVFAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcidzIGRvY3VtZW50LXJvb3QsIHlvdSBuZWVkIHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFRURfREVQTE9ZRElSX0JBU0VfVVJJPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vMTkyLjE2OC43LjEvQk9BUkQtZGlyPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhIHNldCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgdGFyZ2V0IHRvIHdvcmsgd2l0aCB0aGlzIGZlZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSB0YXJnZXQgbWFjaGluZSwgZmV0Y2ggKG9yIHJlZnJlc2gpIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiB1c2luZyB0aGlzIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgb3BrZyB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHVzZSB0aGUgPGZpbGVuYW1lPm9wa2cgbGlzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2cgaW5zdGFsbDwvZmlsZW5hbWU+IGNvbW1hbmRzIHRvIGZpbmQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIHBhY2thZ2VzIGZyb20gdGhlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPgorICAgICAgICAgICAgPHRpdGxlPlRlc3RpbmcgUGFja2FnZXMgV2l0aCBwdGVzdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgUGFja2FnZSBUZXN0IChwdGVzdCkgcnVucyB0ZXN0cyBhZ2FpbnN0IHBhY2thZ2VzIGJ1aWx0CisgICAgICAgICAgICAgICAgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gb24gdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIEEgcHRlc3QgY29udGFpbnMgYXQgbGVhc3QgdHdvIGl0ZW1zOiB0aGUgYWN0dWFsIHRlc3QsIGFuZAorICAgICAgICAgICAgICAgIGEgc2hlbGwgc2NyaXB0ICg8ZmlsZW5hbWU+cnVuLXB0ZXN0PC9maWxlbmFtZT4pIHRoYXQgc3RhcnRzCisgICAgICAgICAgICAgICAgdGhlIHRlc3QuCisgICAgICAgICAgICAgICAgVGhlIHNoZWxsIHNjcmlwdCB0aGF0IHN0YXJ0cyB0aGUgdGVzdCBtdXN0IG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgdGhlIGFjdHVhbCB0ZXN0IC0gdGhlIHNjcmlwdCBvbmx5IHN0YXJ0cyB0aGUgdGVzdC4KKyAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHRlc3QgY2FuIGJlIGFueXRoaW5nIGZyb20gYSBzaW1wbGUKKyAgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHQgdGhhdCBydW5zIGEgYmluYXJ5IGFuZCBjaGVja3MgdGhlIG91dHB1dCB0bworICAgICAgICAgICAgICAgIGFuIGVsYWJvcmF0ZSBzeXN0ZW0gb2YgdGVzdCBiaW5hcmllcyBhbmQgZGF0YSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRlc3QgZ2VuZXJhdGVzIG91dHB1dCBpbiB0aGUgZm9ybWF0IHVzZWQgYnkKKyAgICAgICAgICAgICAgICBBdXRvbWFrZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5yZXN1bHQ8L3JlcGxhY2VhYmxlPjogPHJlcGxhY2VhYmxlPnRlc3RuYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHJlc3VsdCBjYW4gYmUgPGZpbGVuYW1lPlBBU1M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkFJTDwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+U0tJUDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIGFuZCB0aGUgdGVzdG5hbWUgY2FuIGJlIGFueSBpZGVudGlmeWluZyBzdHJpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgWW9jdG8gUHJvamVjdCByZWNpcGVzIHRoYXQgYXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICBlbmFibGVkIHdpdGggcHRlc3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1B0ZXN0Jz5QdGVzdDwvdWxpbms+CisgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBIHJlY2lwZSBpcyAicHRlc3QtZW5hYmxlZCIgaWYgaXQgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXB0ZXN0Jz48ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2FkZGluZy1wdGVzdC10by15b3VyLWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIHB0ZXN0IHRvIFlvdXIgQnVpbGQ8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBwYWNrYWdlIHRlc3RpbmcgdG8geW91ciBidWlsZCwgYWRkIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiBwdGVzdCIKKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgKz0gInB0ZXN0LXBrZ3MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3VyIGJ1aWxkIGlzIGNvbXBsZXRlLCB0aGUgcHRlc3QgZmlsZXMgYXJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWIvPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPi9wdGVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGltYWdlLCB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctcHRlc3QnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SdW5uaW5nIHB0ZXN0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnB0ZXN0LXJ1bm5lcjwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbHMgYQorICAgICAgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHQgdGhhdCBsb29wcyB0aHJvdWdoIGFsbCBpbnN0YWxsZWQgcHRlc3QgdGVzdAorICAgICAgICAgICAgICAgICAgICBzdWl0ZXMgYW5kIHJ1bnMgdGhlbSBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbWlnaHQgd2FudCB0byBhZGQgdGhpcyBwYWNrYWdlIHRvCisgICAgICAgICAgICAgICAgICAgIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZ2V0dGluZy15b3VyLXBhY2thZ2UtcmVhZHknPgorICAgICAgICAgICAgICAgIDx0aXRsZT5HZXR0aW5nIFlvdXIgUGFja2FnZSBSZWFkeTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gZW5hYmxlIGEgcmVjaXBlIHRvIHJ1biBpbnN0YWxsZWQgcHRlc3RzCisgICAgICAgICAgICAgICAgICAgIG9uIHRhcmdldCBoYXJkd2FyZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gcHJlcGFyZSB0aGUgcmVjaXBlcyB0aGF0IGJ1aWxkIHRoZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB0ZXN0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHdoYXQgeW91IGhhdmUgdG8gZG8gZm9yIGVhY2ggcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CZSBzdXJlIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wdGVzdCc+PGZpbGVuYW1lPnB0ZXN0PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4gZWFjaCByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IHB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgPGZpbGVuYW1lPnJ1bi1wdGVzdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzY3JpcHQgc3RhcnRzIHlvdXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGUgdGhlIHNjcmlwdCB3aGVyZSB5b3Ugd2lsbCByZWZlciB0byBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzdGFydHMgYSB0ZXN0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYnVzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIS9iaW4vc2gKKyAgICAgY2QgdGVzdAorICAgICBtYWtlIC1rIHJ1bnRlc3QtVEVTVFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVuc3VyZSBkZXBlbmRlbmNpZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHRlc3QgYWRkcyBidWlsZCBvciBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbm9ybWFsbHkgZG8gbm90IGV4aXN0IGZvciB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWNoIGFzIHJlcXVpcmluZyAibWFrZSIgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBpbiB5b3VyIHJlY2lwZSBpbiBvcmRlciBmb3IgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBtZWV0IHRoZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlIHRoZSBwYWNrYWdlIGhhcyBhIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uICJtYWtlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QWRkIGEgZnVuY3Rpb24gdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCBzdWl0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBtYW55IHBhY2thZ2VzIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciB0ZXN0IHN1aXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSB1c3VhbGx5IG5lZWQgdG8gYWRkIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxhdGlvbiBmdW5jdGlvbiB0byB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+TWFueSBwYWNrYWdlcyBiYXNlZCBvbiBBdXRvbWFrZSBjb21waWxlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biB0aGUgdGVzdCBzdWl0ZSBieSB1c2luZyBhIHNpbmdsZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+bWFrZSBjaGVjazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBuYXRpdmUgPGZpbGVuYW1lPm1ha2UgY2hlY2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcyBhbmQgcnVucyBvbiB0aGUgc2FtZSBjb21wdXRlciwgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxpbmcgcmVxdWlyZXMgdGhhdCB0aGUgcGFja2FnZSBpcyBidWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBob3N0IGJ1dCBleGVjdXRlZCBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsdCB2ZXJzaW9uIG9mIEF1dG9tYWtlIHRoYXQgc2hpcHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGluY2x1ZGVzIGEgcGF0Y2ggdGhhdCBzZXBhcmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBhbmQgZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgcGFja2FnZXMgdGhhdCB1c2UgdGhlIHVuYWx0ZXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGVkIHZlcnNpb24gb2YgPGZpbGVuYW1lPm1ha2UgY2hlY2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY3Jvc3MtY29tcGlsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlJlZ2FyZGxlc3MsIHlvdSBzdGlsbCBtdXN0IGFkZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGVfcHRlc3Q8L2ZpbGVuYW1lPiBmdW5jdGlvbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSB0ZXN0IHN1aXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBhIGZ1bmN0aW9uIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKKyAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbnN1cmUgc3BlY2lhbCBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBzZXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgcGFja2FnZSByZXF1aXJlcyBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3IgdG8gY29tcGlsaW5nIHRoZSB0ZXN0IGNvZGUsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGEgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZV9wdGVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW50byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgdGhlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY29waWVzIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi1wdGVzdDwvZmlsZW5hbWU+IHRvIHRoZSB0YXJnZXQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBydW5zIG1ha2UgPGZpbGVuYW1lPmluc3RhbGwtcHRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgdGVzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBub3QgZW5vdWdoLCB5b3UgbmVlZCB0byBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsX3B0ZXN0PC9maWxlbmFtZT4gZnVuY3Rpb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIGl0IGdldHMgY2FsbGVkIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlIGluc3RhbGwtcHRlc3QiIGNvbXBsZXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtpbmctd2l0aC1zb3VyY2UtZmlsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIFNvdXJjZSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3b3JrcyB3aXRoIHNvdXJjZSBmaWxlcyBsb2NhdGVkCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBXaGVuIHlvdSBidWlsZCBzb21ldGhpbmcgdXNpbmcgQml0QmFrZSwgYSBiaWcgcGFydCBvZiB0aGUgb3BlcmF0aW9uCisgICAgICAgICAgICBpcyBsb2NhdGluZyBhbmQgZG93bmxvYWRpbmcgYWxsIHRoZSBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICBGb3IgaW1hZ2VzLCBkb3dubG9hZGluZyBhbGwgdGhlIHNvdXJjZSBmb3IgdmFyaW91cyBwYWNrYWdlcyBjYW4KKyAgICAgICAgICAgIHRha2UgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIGZvciB3b3JraW5nIHdpdGggc291cmNlCisgICAgICAgICAgICBmaWxlcyB0aGF0IGNhbiBsZWFkIHRvIG1vcmUgZWZmaWNpZW50IHVzZSBvZiByZXNvdXJjZXMgYW5kCisgICAgICAgICAgICB0aW1lLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtZWZmZWN0aXZlLW1pcnJvcnMnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgdXAgRWZmZWN0aXZlIE1pcnJvcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIGEgZ29vZCBkZWFsIHRoYXQgZ29lcyBpbnRvIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGJ1aWxkIGlzIHNpbXBseSBkb3dubG9hZGluZyBhbGwgb2YgdGhlIHNvdXJjZSB0YXJiYWxscy4KKyAgICAgICAgICAgICAgICBNYXliZSB5b3UgaGF2ZSBiZWVuIHdvcmtpbmcgd2l0aCBhbm90aGVyIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIChPcGVuRW1iZWRkZWQgb3IgQW5nc3Ryb20pIGZvciB3aGljaCB5b3UgaGF2ZSBidWlsdCB1cCBhCisgICAgICAgICAgICAgICAgc2l6YWJsZSBkaXJlY3Rvcnkgb2Ygc291cmNlIHRhcmJhbGxzLgorICAgICAgICAgICAgICAgIE9yLCBwZXJoYXBzIHNvbWVvbmUgZWxzZSBoYXMgc3VjaCBhIGRpcmVjdG9yeSBmb3Igd2hpY2ggeW91CisgICAgICAgICAgICAgICAgaGF2ZSByZWFkIGFjY2Vzcy4KKyAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiBzYXZlIHRpbWUgYnkgYWRkaW5nIHN0YXRlbWVudHMgdG8geW91cgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBzbyB0aGF0IHRoZSBidWlsZCBwcm9jZXNzIGNoZWNrcyBsb2NhbAorICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZpcnN0IGZvciBleGlzdGluZyB0YXJiYWxscyBiZWZvcmUgY2hlY2tpbmcgdGhlCisgICAgICAgICAgICAgICAgSW50ZXJuZXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZWZmaWNpZW50IHdheSB0byBzZXQgaXQgdXAgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNPVVJDRV9NSVJST1JfVVJMID89ICJmaWxlOi8vL2hvbWUveW91L3lvdXItZG93bmxvYWQtZGlyLyIKKyAgICAgSU5IRVJJVCArPSAib3duLW1pcnJvcnMiCisgICAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA9ICIxIgorICAgICAjIEJCX05PX05FVFdPUksgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzIGFuZCBzdG9yZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIER1ZSB0byBwZXJmb3JtYW5jZSByZWFzb25zLCBnZW5lcmF0aW5nIGFuZCBzdG9yaW5nIHRoZXNlCisgICAgICAgICAgICAgICAgdGFyYmFsbHMgaXMgbm90IHRoZSBidWlsZCBzeXN0ZW0ncyBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSwgc2VlIHRoZSB2YXJpYWJsZSdzIGdsb3NzYXJ5IGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnZXR0aW5nLXNvdXJjZS1maWxlcy1hbmQtc3VwcHJlc3NpbmctdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZXR0aW5nIFNvdXJjZSBGaWxlcyBhbmQgU3VwcHJlc3NpbmcgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciB0ZWNobmlxdWUgeW91IGNhbiB1c2UgdG8gcmVhZHkgeW91cnNlbGYgZm9yIGEKKyAgICAgICAgICAgICAgICBzdWNjZXNzaXZlIHN0cmluZyBvZiBidWlsZCBvcGVyYXRpb25zLCBpcyB0byBwcmUtZmV0Y2gKKyAgICAgICAgICAgICAgICBhbGwgdGhlIHNvdXJjZSBmaWxlcyB3aXRob3V0IGFjdHVhbGx5IHN0YXJ0aW5nIGEgYnVpbGQuCisgICAgICAgICAgICAgICAgVGhpcyB0ZWNobmlxdWUgbGV0cyB5b3Ugd29yayB0aHJvdWdoIGFueSBkb3dubG9hZCBpc3N1ZXMKKyAgICAgICAgICAgICAgICBhbmQgdWx0aW1hdGVseSBnYXRoZXJzIGFsbCB0aGUgc291cmNlIGZpbGVzIGludG8geW91cgorICAgICAgICAgICAgICAgIGRvd25sb2FkIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1idWlsZC1kb3dubG9hZHMnPjxmaWxlbmFtZT5idWlsZC9kb3dubG9hZHM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGxvY2F0ZWQgd2l0aAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBCaXRCYWtlIGNvbW1hbmQgZm9ybSB0byBmZXRjaCBhbGwgdGhlCisgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IHNvdXJjZXMgd2l0aG91dCBzdGFydGluZyB0aGUgYnVpbGQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgZmV0Y2hhbGwgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgdmFyaWF0aW9uIG9mIHRoZSBCaXRCYWtlIGNvbW1hbmQgZ3VhcmFudGVlcyB0aGF0IHlvdQorICAgICAgICAgICAgICAgIGhhdmUgYWxsIHRoZSBzb3VyY2VzIGZvciB0aGF0IEJpdEJha2UgdGFyZ2V0IHNob3VsZCB5b3UKKyAgICAgICAgICAgICAgICBkaXNjb25uZWN0IGZyb20gdGhlIEludGVybmV0IGFuZCB3YW50IHRvIGRvIHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGxhdGVyIG9mZmxpbmUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVpbGRpbmctc29mdHdhcmUtZnJvbS1hbi1leHRlcm5hbC1zb3VyY2UiPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgU29mdHdhcmUgZnJvbSBhbiBFeHRlcm5hbCBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiB3aGVuCisgICAgICAgICAgICBidWlsZGluZyBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGludm9sdmVzIGZldGNoaW5nIHRoZSBzb3VyY2UgZmlsZXMsIHVucGFja2luZworICAgICAgICAgICAgdGhlbSwgYW5kIHRoZW4gcGF0Y2hpbmcgdGhlbSBpZiBuZWNlc3NhcnkgYmVmb3JlIHRoZSBidWlsZCB0YWtlcworICAgICAgICAgICAgcGxhY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgeW91IG1pZ2h0IHdhbnQgdG8gYnVpbGQgc29mdHdhcmUgZnJvbSBzb3VyY2UKKyAgICAgICAgICAgIGZpbGVzIHRoYXQgYXJlIGV4dGVybmFsIHRvIGFuZCB0aHVzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSBwcm9qZWN0IHRoYXQgaW5jbHVkZXMgYSBuZXcgQlNQIHdpdGgKKyAgICAgICAgICAgIGEgaGVhdmlseSBjdXN0b21pemVkIGtlcm5lbC4KKyAgICAgICAgICAgIEFuZCwgeW91IHdhbnQgdG8gbWluaW1pemUgZXhwb3NpbmcgdGhlIGJ1aWxkIHN5c3RlbSB0byB0aGUKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHRlYW0gc28gdGhhdCB0aGV5IGNhbiBmb2N1cyBvbiB0aGVpciBwcm9qZWN0IGFuZAorICAgICAgICAgICAgbWFpbnRhaW4gZXZlcnlvbmUncyB3b3JrZmxvdyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugd2FudCBhIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5IG9uIHRoZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgbWFjaGluZSB3aGVyZSB0aGUgZGV2ZWxvcG1lbnQgb2NjdXJzLgorICAgICAgICAgICAgWW91IHdhbnQgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBwb2ludCB0byB0aGUgZXh0ZXJuYWwgZGlyZWN0b3J5IGFuZCB1c2UgaXQgYXMgaXMsIG5vdAorICAgICAgICAgICAgY29weSBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gYnVpbGQgZnJvbSBzb2Z0d2FyZSB0aGF0IGNvbWVzIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlLCBhbGwgeW91CisgICAgICAgICAgICBuZWVkIHRvIGRvIGlzIGluaGVyaXQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgY2xhc3MgYW5kIHRoZW4gc2V0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVSTkFMU1JDJz48ZmlsZW5hbWU+RVhURVJOQUxTUkM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBwb2ludCB0byB5b3VyIGV4dGVybmFsIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgSGVyZSBhcmUgdGhlIHN0YXRlbWVudHMgdG8gcHV0IGluIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiZXh0ZXJuYWxzcmMiCisgICAgIEVYVEVSTkFMU1JDX3BuLTxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYXRoLXRvLXlvdXItc291cmNlLXRyZWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgc2hvd3MgaG93IHRvIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcgYnkgc2V0dGluZworICAgICAgICAgICAgPGZpbGVuYW1lPkVYVEVSTkFMU1JDPC9maWxlbmFtZT4gaW4gdGhlIHJlY2lwZSBpdHNlbGYgb3IgaW4gdGhlCisgICAgICAgICAgICByZWNpcGUncyBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhURVJOQUxTUkMgPSAiPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIKKyAgICAgRVhURVJOQUxTUkNfQlVJTEQgPSAiPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGVzZSBzZXR0aW5ncyB0byB0YWtlIGVmZmVjdCwgeW91IG11c3QgZ2xvYmFsbHkKKyAgICAgICAgICAgICAgICBvciBsb2NhbGx5IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPiBidWlsZHMKKyAgICAgICAgICAgIHRoZSBzb3VyY2UgY29kZSBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0ZSBmcm9tIHRoZSBleHRlcm5hbCBzb3VyY2UKKyAgICAgICAgICAgIGRpcmVjdG9yeSBhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFUk5BTFNSQyc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGhhdmUgdGhlIHNvdXJjZSBidWlsdCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgaW4KKyAgICAgICAgICAgIHdoaWNoIGl0IHJlc2lkZXMsIG9yIHNvbWUgb3RoZXIgbm9taW5hdGVkIGRpcmVjdG9yeSwgeW91IGNhbiBzZXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFUk5BTFNSQ19CVUlMRCc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDX0JVSUxEPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdG8gcG9pbnQgdG8gdGhhdCBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVEVSTkFMU1JDX0JVSUxEX3BuLTxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYXRoLXRvLXlvdXItc291cmNlLXRyZWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzZWxlY3RpbmctYW4taW5pdGlhbGl6YXRpb24tbWFuYWdlciI+CisgICAgICAgIDx0aXRsZT5TZWxlY3RpbmcgYW4gSW5pdGlhbGl6YXRpb24gTWFuYWdlcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIFN5c1Zpbml0IGFzIHRoZSBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgbWFuYWdlci4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHN1cHBvcnQgYWxzbyBleGlzdHMgZm9yIHN5c3RlbWQsCisgICAgICAgICAgICB3aGljaCBpcyBhIGZ1bGwgcmVwbGFjZW1lbnQgZm9yIGluaXQgd2l0aAorICAgICAgICAgICAgcGFyYWxsZWwgc3RhcnRpbmcgb2Ygc2VydmljZXMsIHJlZHVjZWQgc2hlbGwgb3ZlcmhlYWQgYW5kIG90aGVyCisgICAgICAgICAgICBmZWF0dXJlcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbnkgZGlzdHJpYnV0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIFN5c1Zpbml0LCB5b3UgZG8KKyAgICAgICAgICAgIG5vdCBoYXZlIHRvIGRvIGFueXRoaW5nLgorICAgICAgICAgICAgQnV0LCBpZiB5b3Ugd2FudCB0byB1c2Ugc3lzdGVtZCwgeW91IG11c3QKKyAgICAgICAgICAgIHRha2Ugc29tZSBzdGVwcyBhcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1zeXN0ZW1kLWV4Y2x1c2l2ZWx5Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBzeXN0ZW1kIEV4Y2x1c2l2ZWx5PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IHRoZSB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHN5c3RlbWQiCisgICAgIFZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPSAic3lzdGVtZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHByZXZlbnQgdGhlIFN5c1Zpbml0CisgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGZlYXR1cmUgZnJvbQorICAgICAgICAgICAgICAgIGJlaW5nIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQgPSAic3lzdmluaXQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIERvaW5nIHNvIHJlbW92ZXMgYW55IHJlZHVuZGFudCBTeXNWaW5pdCBzY3JpcHRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyByZW1vdmUgIGluaXRzY3JpcHRzIGZyb20geW91ciBpbWFnZSBhbHRvZ2V0aGVyLAorICAgICAgICAgICAgICAgIHNldCB0aGlzIHZhcmlhYmxlIGFsc286CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBiYWNrZmlsbCB2YXJpYWJsZSwgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXN5c3RlbWQtZm9yLXRoZS1tYWluLWltYWdlLWFuZC11c2luZy1zeXN2aW5pdC1mb3ItdGhlLXJlc2N1ZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgc3lzdGVtZCBmb3IgdGhlIE1haW4gSW1hZ2UgYW5kIFVzaW5nIFN5c1Zpbml0IGZvciB0aGUgUmVzY3VlIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IHRoZXNlIHZhcmlhYmxlcyBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgc3lzdGVtZCIKKyAgICAgVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA9ICJzeXN0ZW1kIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBjYXVzZXMgeW91ciBtYWluIGltYWdlIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYjwvZmlsZW5hbWU+IHJlY2lwZSBhbmQKKyAgICAgICAgICAgICAgICBzeXN0ZW1kLgorICAgICAgICAgICAgICAgIFRoZSByZXNjdWUvbWluaW1hbCBpbWFnZSBjYW5ub3QgdXNlIHRoaXMgcGFja2FnZSBncm91cC4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpdCBjYW4gaW5zdGFsbCBTeXNWaW5pdAorICAgICAgICAgICAgICAgIGFuZCB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZXMgd2lsbCBoYXZlIHN1cHBvcnQgZm9yIGJvdGgKKyAgICAgICAgICAgICAgICBzeXN0ZW1kIGFuZCBTeXNWaW5pdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzZWxlY3RpbmctZGV2LW1hbmFnZXIiPgorICAgICAgICA8dGl0bGU+U2VsZWN0aW5nIGEgRGV2aWNlIE1hbmFnZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgbXVsdGlwbGUgd2F5cyB0byBtYW5hZ2UgdGhlIGRldmljZQorICAgICAgICAgICAgbWFuYWdlciAoPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPik6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGVyc2lzdGVudCBhbmQgUHJlLVBvcHVsYXRlZDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgdGhlIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHBlcnNpc3RlbnQgYW5kIHRoZSByZXF1aXJlZCBkZXZpY2Ugbm9kZXMgYXJlIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgPGZpbGVuYW1lPmRldnRtcGZzPC9maWxlbmFtZT4gd2l0aCBhIERldmljZSBNYW5hZ2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIHRoZSA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBwcm92aWRlZCBieSB0aGUga2VybmVsIGFzIGFuIGluLW1lbW9yeSBmaWxlIHN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXMgYXV0b21hdGljYWxseSBwb3B1bGF0ZWQgYnkgdGhlIGtlcm5lbCBhdCBydW50aW1lLgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2YgZGV2aWNlIG5vZGVzIGlzIGRvbmUgaW4gdXNlcgorICAgICAgICAgICAgICAgICAgICBzcGFjZSBieSBhIGRldmljZSBtYW5hZ2VyIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveC1tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ic3RhdGljLWRldi1tYW5hZ2VtZW50Ij4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBQZXJzaXN0ZW50IGFuZCBQcmUtUG9wdWxhdGVkPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgc3RhdGljIG1ldGhvZCBmb3IgZGV2aWNlIHBvcHVsYXRpb24sIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1VU0VfREVWRlMnPjxmaWxlbmFtZT5VU0VfREVWRlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjAiIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VfREVWRlMgPSAiMCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjb250ZW50IG9mIHRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBkZWZpbmVkIGluIGEgRGV2aWNlIFRhYmxlIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0RFVklDRV9UQUJMRVMnPjxmaWxlbmFtZT5JTUFHRV9ERVZJQ0VfVEFCTEVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlZmluZXMgdGhlIERldmljZSBUYWJsZSB0byB1c2UgYW5kIHNob3VsZCBiZSBzZXQKKyAgICAgICAgICAgICAgICBpbiB0aGUgbWFjaGluZSBvciBkaXN0cm8gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfREVWSUNFX1RBQkxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZpY2VfdGFibGUtbWluaW1hbC50eHQ8L2ZpbGVuYW1lPiBpcyB1c2VkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfREVWSUNFX1RBQkxFUyA9ICJkZXZpY2VfdGFibGUtbXltYWNoaW5lLnR4dCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwb3B1bGF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIDxmaWxlbmFtZT5tYWtlZGV2czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdXRpbGl0eSBkdXJpbmcgaW1hZ2UgY3JlYXRpb246CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0iZGV2dG1wZnMtZGV2LW1hbmFnZW1lbnQiPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IGFuZCBhIERldmljZSBNYW5hZ2VyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSBkeW5hbWljIG1ldGhvZCBmb3IgZGV2aWNlIHBvcHVsYXRpb24sIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgdXNlIChvciBiZSBzdXJlIHRvIHNldCkgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVVTRV9ERVZGUyc+PGZpbGVuYW1lPlVTRV9ERVZGUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFX0RFVkZTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdpdGggdGhpcyBzZXR0aW5nLCB0aGUgcmVzdWx0aW5nIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBNYWtlIHN1cmUgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09ORklHX0RFVlRNUEZTPC9maWxlbmFtZT4gaXMgc2V0IHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICB5b3UgYnVpbGQgYSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFsbCBkZXZpY2VzIGNyZWF0ZWQgYnkgPGZpbGVuYW1lPmRldnRtcGZzPC9maWxlbmFtZT4gd2lsbCBiZQorICAgICAgICAgICAgICAgIG93bmVkIGJ5IDxmaWxlbmFtZT5yb290PC9maWxlbmFtZT4gYW5kIGhhdmUgcGVybWlzc2lvbnMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+MDYwMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYXZlIG1vcmUgY29udHJvbCBvdmVyIHRoZSBkZXZpY2Ugbm9kZXMsIHlvdSBjYW4gdXNlIGEKKyAgICAgICAgICAgICAgICBkZXZpY2UgbWFuYWdlciBsaWtlIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveC1tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNob29zZSB0aGUgZGV2aWNlIG1hbmFnZXIgYnkgZGVmaW5pbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlcjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaW4geW91ciBtYWNoaW5lIG9yIGRpc3RybyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAidWRldiIKKworICAgICAjIFNvbWUgYWx0ZXJuYXRpdmUgdmFsdWVzCisgICAgICMgVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gImJ1c3lib3gtbWRldiIKKyAgICAgIyBWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAic3lzdGVtZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1hcHBkZXYtc3JjcmV2Ij4KKyAgICAgICAgPHRpdGxlPlVzaW5nIGFuIEV4dGVybmFsIFNDTTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UncmUgd29ya2luZyBvbiBhIHJlY2lwZSB0aGF0IHB1bGxzIGZyb20gYW4gZXh0ZXJuYWwgU291cmNlCisgICAgICAgICAgICBDb2RlIE1hbmFnZXIgKFNDTSksIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgc3lzdGVtIG5vdGljZSBuZXcgcmVjaXBlIGNoYW5nZXMgYWRkZWQgdG8gdGhlIFNDTSBhbmQgdGhlbiBidWlsZAorICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBwYWNrYWdlcyB0aGF0IGRlcGVuZCBvbiB0aGUgbmV3IHJlY2lwZXMgYnkgdXNpbmcKKyAgICAgICAgICAgIHRoZSBsYXRlc3QgdmVyc2lvbnMuCisgICAgICAgICAgICBUaGlzIG9ubHkgd29ya3MgZm9yIFNDTXMgZnJvbSB3aGljaCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYQorICAgICAgICAgICAgc2Vuc2libGUgcmV2aXNpb24gbnVtYmVyIGZvciBjaGFuZ2VzLgorICAgICAgICAgICAgQ3VycmVudGx5LCB5b3UgY2FuIGRvIHRoaXMgd2l0aCBBcGFjaGUgU3VidmVyc2lvbiAoU1ZOKSwgR2l0LCBhbmQKKyAgICAgICAgICAgIEJhemFhciAoQlpSKSByZXBvc2l0b3JpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGVuYWJsZSB0aGlzIGJlaGF2aW9yLCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSBuZWVkcyB0byByZWZlcmVuY2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFYgPSAiMS4yLjMrZ2l0JHtTUkNQVn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVuLCB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFVl9wbi08cmVwbGFjZWFibGU+UE48L3JlcGxhY2VhYmxlPiA9ICIke0FVVE9SRVZ9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgcmVjaXBlIGZvciB3aGljaCB5b3Ugd2FudCB0byBlbmFibGUgYXV0b21hdGljIHNvdXJjZQorICAgICAgICAgICAgcmV2aXNpb24gdXBkYXRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0byB1cGRhdGUgeW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUsIHlvdSBjYW4KKyAgICAgICAgICAgIGFkZCB0aGUgZm9sbG93aW5nIGRpcmVjdGx5IHRvIHRoZSByZWNpcGUgdG8gZmluaXNoIGVuYWJsaW5nCisgICAgICAgICAgICB0aGUgZmVhdHVyZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDUkVWID0gIiR7QVVUT1JFVn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgZGlzdHJpYnV0aW9uIG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS1ibGVlZGluZzwvZmlsZW5hbWU+LCB3aG9zZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlIGNvbnRhaW5zIHRoZSBsaW5lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGxpbmUgcHVsbHMgaW4gdGhlIGxpc3RlZCBpbmNsdWRlIGZpbGUgdGhhdCBjb250YWlucworICAgICAgICAgICAgbnVtZXJvdXMgbGluZXMgb2YgZXhhY3RseSB0aGF0IGZvcm06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFVl9wbi1nY29uZi1kYnVzID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtY29tbW9uID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LWRlc2t0b3AgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC1rZXlib2FyZCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtcGFuZWwtMiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXRoZW1lcy1leHRyYSA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXRlcm1pbmFsID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtd20gPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC13bS0yID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tc2V0dGluZ3MtZGFlbW9uID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tc2NyZWVuc2hvdCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLWxpYmZha2VrZXkgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1vcHJvZmlsZXVpID89ICIke0FVVE9SRVZ9IgorICAgICAgICAgIC4KKyAgICAgICAgICAuCisgICAgICAgICAgLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlc2UgbGluZXMgYWxsb3cgeW91IHRvIGV4cGVyaW1lbnQgd2l0aCBidWlsZGluZyBhCisgICAgICAgICAgICBkaXN0cmlidXRpb24gdGhhdCB0cmFja3MgdGhlIGxhdGVzdCBkZXZlbG9wbWVudCBzb3VyY2UKKyAgICAgICAgICAgIGZvciBudW1lcm91cyBwYWNrYWdlcy4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5DYXV0aW9uPC90aXRsZT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBva3ktYmxlZWRpbmc8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICBpcyBub3QgdGVzdGVkIG9uIGEgcmVndWxhciBiYXNpcy4KKyAgICAgICAgICAgICAgICBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgdXNlIGl0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtcmVhZC1vbmx5LXJvb3QtZmlsZXN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIFJlYWQtT25seSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3VwcG9zZSwgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHlvdSBuZWVkIHRvIGRpc2FibGUKKyAgICAgICAgICAgIHlvdXIgdGFyZ2V0IGRldmljZSdzIHJvb3QgZmlsZXN5c3RlbSdzIHdyaXRlIHBlcm1pc3Npb25zCisgICAgICAgICAgICAoaS5lLiB5b3UgbmVlZCBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0pLgorICAgICAgICAgICAgT3IsIHBlcmhhcHMgeW91IGFyZSBydW5uaW5nIHRoZSBkZXZpY2UncyBvcGVyYXRpbmcgc3lzdGVtCisgICAgICAgICAgICBmcm9tIGEgcmVhZC1vbmx5IHN0b3JhZ2UgZGV2aWNlLgorICAgICAgICAgICAgRm9yIGVpdGhlciBjYXNlLCB5b3UgY2FuIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGZvcgorICAgICAgICAgICAgdGhhdCBiZWhhdmlvci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgU3VwcG9ydGluZyBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0gcmVxdWlyZXMgdGhhdCB0aGUgc3lzdGVtIGFuZAorICAgICAgICAgICAgYXBwbGljYXRpb25zIGRvIG5vdCB0cnkgdG8gd3JpdGUgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgIFlvdSBtdXN0IGNvbmZpZ3VyZSBhbGwgcGFydHMgb2YgdGhlIHRhcmdldCBzeXN0ZW0gdG8gd3JpdGUKKyAgICAgICAgICAgIGVsc2V3aGVyZSwgb3IgdG8gZ3JhY2VmdWxseSBmYWlsIGluIHRoZSBldmVudCBvZiBhdHRlbXB0aW5nIHRvCisgICAgICAgICAgICB3cml0ZSB0byB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgdGhlIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW0sIHNpbXBseSBhZGQgdGhlCisgICAgICAgICAgICAgICAgInJlYWQtb25seS1yb290ZnMiIGZlYXR1cmUgdG8geW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICBVc2luZyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzIGluIHlvdXIKKyAgICAgICAgICAgICAgICBpbWFnZSByZWNpcGUgb3IgZnJvbSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSBhIHJlYWQtb25seSByb290IGZpbGVzeXN0ZW06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9GRUFUVVJFUyA9ICJyZWFkLW9ubHktcm9vdGZzIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgKz0gInJlYWQtb25seS1yb290ZnMiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHZhcmlhYmxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWltYWdlZmVhdHVyZXMnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaWFibGVzLCBzZWUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Bvc3QtaW5zdGFsbGF0aW9uLXNjcmlwdHMnPgorICAgICAgICAgICAgPHRpdGxlPlBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHlvdSBtYWtlIHN1cmUgYWxsCisgICAgICAgICAgICAgICAgcG9zdC1JbnN0YWxsYXRpb24gKDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPikgc2NyaXB0cworICAgICAgICAgICAgICAgIGZvciBwYWNrYWdlcyB0aGF0IGFyZSBpbnN0YWxsZWQgaW50byB0aGUgaW1hZ2UgY2FuIGJlIHJ1bgorICAgICAgICAgICAgICAgIGF0IHRoZSB0aW1lIHdoZW4gdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBvbiB0aGUgaG9zdCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlc2Ugc2NyaXB0cyBjYW5ub3QgYXR0ZW1wdCB0byBydW4gZHVyaW5nIGZpcnN0LWJvb3Qgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBXaXRoIHRoZSAicmVhZC1vbmx5LXJvb3RmcyIgZmVhdHVyZSBlbmFibGVkLAorICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gY2hlY2tzIGR1cmluZyByb290IGZpbGVzeXN0ZW0gY3JlYXRpb24gdG8gbWFrZQorICAgICAgICAgICAgICAgIHN1cmUgYWxsIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgc3VjY2VlZC4KKyAgICAgICAgICAgICAgICBJZiBhbnkgb2YgdGhlc2Ugc2NyaXB0cyBzdGlsbCBuZWVkIHRvIGJlIHJ1biBhZnRlciB0aGUgcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCwgdGhlIGJ1aWxkIGltbWVkaWF0ZWx5IGZhaWxzLgorICAgICAgICAgICAgICAgIFRoZXNlIGJ1aWxkLXRpbWUgY2hlY2tzIGVuc3VyZSB0aGF0IHRoZSBidWlsZCBmYWlscworICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHRoZSB0YXJnZXQgZGV2aWNlIGZhaWxzIGxhdGVyIGR1cmluZyBpdHMKKyAgICAgICAgICAgICAgICBpbml0aWFsIGJvb3Qgb3BlcmF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb3N0IG9mIHRoZSBjb21tb24gcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cyBnZW5lcmF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGZvciB0aGUgb3V0LW9mLXRoZS1ib3ggWW9jdG8gUHJvamVjdCBhcmUgZW5naW5lZXJlZAorICAgICAgICAgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gcnVuIGR1cmluZyByb290IGZpbGVzeXN0ZW0gY3JlYXRpb24KKyAgICAgICAgICAgICAgICAoZS5nLiBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIGZvciBjYWNoaW5nIGZvbnRzKS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgY3JlYXRlIGFuZCBhZGQgY3VzdG9tIHNjcmlwdHMsIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgdG8gYmUgc3VyZSB0aGV5IGNhbiBiZSBydW4gZHVyaW5nIHRoaXMgZmlsZSBzeXN0ZW0gY3JlYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgY29tbW9uIHByb2JsZW1zIHRoYXQgcHJldmVudAorICAgICAgICAgICAgICAgIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgZnJvbSBydW5uaW5nIGR1cmluZyByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICBjcmVhdGlvbjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Tm90IHVzaW5nICREIGluIGZyb250IG9mIGFic29sdXRlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkZWZpbmVzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JDwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgPGZpbGVuYW1lPiREPC9maWxlbmFtZT4gaXMgYmxhbmsgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBpcyBydW4gb24gdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGltcGxpZXMgdHdvIHB1cnBvc2VzIGZvciA8ZmlsZW5hbWU+JEQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyaW5nIHBhdGhzIGFyZSB2YWxpZCBpbiBib3RoIHRoZSBob3N0IGFuZCB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50cywgYW5kIGNoZWNraW5nIHRvIGRldGVybWluZSB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaXMgYmVpbmcgdXNlZCBhcyBhIG1ldGhvZCBmb3IgdGFraW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBhY3Rpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BdHRlbXB0aW5nIHRvIHJ1biBwcm9jZXNzZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIG9yIGRlcGVuZGVudCBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gd29yayBhcm91bmQgdGhlc2UgYXR0ZW1wdHMgYnkgdXNpbmcgbmF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICB0b29scyB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRhc2tzLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgYnkgYWx0ZXJuYXRpdmVseSBydW5uaW5nIHRoZSBwcm9jZXNzZXMgdW5kZXIgUUVNVSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGhhcyB0aGUgPGZpbGVuYW1lPnFlbXVfcnVuX2JpbmFyeTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1xZW11Jz48ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FyZWFzLXdpdGgtd3JpdGUtYWNjZXNzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcmVhcyBXaXRoIFdyaXRlIEFjY2VzczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGggdGhlICJyZWFkLW9ubHktcm9vdGZzIiBmZWF0dXJlIGVuYWJsZWQsCisgICAgICAgICAgICAgICAgYW55IGF0dGVtcHQgYnkgdGhlIHRhcmdldCB0byB3cml0ZSB0byB0aGUgcm9vdCBmaWxlc3lzdGVtIGF0CisgICAgICAgICAgICAgICAgcnVudGltZSBmYWlscy4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHlvdSBjb25maWd1cmUgcHJvY2Vzc2VzCisgICAgICAgICAgICAgICAgYW5kIGFwcGxpY2F0aW9ucyB0aGF0IGF0dGVtcHQgdGhlc2UgdHlwZXMgb2Ygd3JpdGVzIGRvIHNvCisgICAgICAgICAgICAgICAgdG8gZGlyZWN0b3JpZXMgd2l0aCB3cml0ZSBhY2Nlc3MgKGUuZy4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3RtcDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4vdmFyL3J1bjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmciPgorICAgICAgICA8dGl0bGU+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG1ha2VzIGF2YWlsYWJsZSBhIHNlcmllcyBvZiBhdXRvbWF0ZWQKKyAgICAgICAgICAgIHRlc3RzIGZvciBpbWFnZXMgdG8gdmVyaWZ5IHJ1bnRpbWUgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoZXNlIHRlc3RzIG9uIGVpdGhlciBRRU1VIG9yIGFjdHVhbCB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICBUZXN0cyBhcmUgd3JpdHRlbiBpbiBQeXRob24gbWFraW5nIHVzZSBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT51bml0dGVzdDwvZmlsZW5hbWU+IG1vZHVsZSwgYW5kIHRoZSBtYWpvcml0eSBvZiB0aGVtCisgICAgICAgICAgICBydW4gY29tbWFuZHMgb24gdGhlIHRhcmdldCBzeXN0ZW0gb3ZlciBTU0guCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3Ugc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB0byB1c2UgdGhlc2UKKyAgICAgICAgICAgIHRlc3RzLCBydW4gYXZhaWxhYmxlIHRlc3RzLCBhbmQgd3JpdGUgYW5kIGFkZCB5b3VyIG93biB0ZXN0cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdlbmFibGluZy10ZXN0cyc+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgVGVzdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hldGhlciB5b3UgYXJlIHBsYW5uaW5nIHRvIHJ1biB0ZXN0cyB1c2luZworICAgICAgICAgICAgICAgIFFFTVUgb3Igb24gdGhlIGhhcmR3YXJlLCB5b3UgaGF2ZSB0byB0YWtlCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IHN0ZXBzIHRvIGVuYWJsZSB0aGUgdGVzdHMuCisgICAgICAgICAgICAgICAgU2VlIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0bworICAgICAgICAgICAgICAgIGVuYWJsZSBib3RoIHR5cGVzIG9mIHRlc3RzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncWVtdS1pbWFnZS1lbmFibGluZy10ZXN0cyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gUUVNVTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gcnVuIHRlc3RzLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgdG8gYXZvaWQgaW50ZXJhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIDxmaWxlbmFtZT5zdWRvPC9maWxlbmFtZT4gZm9yIG5ldHdvcmtpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBhY2NvbXBsaXNoIHRoaXMsIHlvdSBtdXN0IGRvIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk5PUEFTU1dEPC9maWxlbmFtZT4gZm9yIHlvdXIgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi9ldGMvc3Vkb2VyczwvZmlsZW5hbWU+IGVpdGhlciBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBjb21tYW5kcyBvciBqdXN0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXUtaWZ1cDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgcHJvdmlkZSB0aGUgZnVsbCBwYXRoIGFzIHRoYXQgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgaWYgeW91IGFyZSB1c2luZyBtdWx0aXBsZSBjbG9uZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIHNvbWUgZGlzdHJpYnV0aW9ucywgeW91IGFsc28gbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgb3V0ICJEZWZhdWx0cyByZXF1aXJldHR5IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL3N1ZG9lcnM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1hbnVhbGx5IGNvbmZpZ3VyZSBhIHRhcCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biBhcyByb290IHRoZSBzY3JpcHQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHNob3VsZCBnZW5lcmF0ZSBhIGxpc3Qgb2YgdGFwIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBvcHRpb24gdHlwaWNhbGx5IGNob3NlbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9idWlsZGVyLXR5cGUgZW52aXJvbm1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTUExBWTwvZmlsZW5hbWU+IHZhcmlhYmxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgc28gdGhhdCB5b3UgaGF2ZSBhbiBYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyIGF2YWlsYWJsZSAoZS5nLiBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT52bmNzZXJ2ZXI8L2ZpbGVuYW1lPiBmb3IgYSBoZWFkbGVzcyBtYWNoaW5lKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3VyIGhvc3QncyBmaXJld2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdHMgaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5Mi4xNjguNy4wLzI0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBvZiB0aGUgdGVzdHMgKGluIHBhcnRpY3VsYXIgc21hcnQgdGVzdHMpIHN0YXJ0IGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUCBzZXJ2ZXIgb24gYSByYW5kb20gaGlnaCBudW1iZXIgcG9ydCwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHNlcnZlIGZpbGVzIHRvIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNtYXJ0IG1vZHVsZSBzZXJ2ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtERVBMT1lfRElSfS9ycG08L2ZpbGVuYW1lPiBzbyBpdCBjYW4gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hcnQgY2hhbm5lbCBjb21tYW5kcy4gVGhhdCBtZWFucyB5b3VyIGhvc3QncyBmaXJld2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYWNjZXB0IGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20gMTkyLjE2OC43LjAvMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGRlZmF1bHQgSVAgcmFuZ2UgdXNlZCBmb3IgdGFwIGRldmljZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3Ugc3RhcnQgcnVubmluZyB0aGUgdGVzdHMsIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgY29weSBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZXN0aW1hZ2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgaW1hZ2UgaXMgYm9vdGVkIHVuZGVyIFFFTVUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBkZWZhdWx0IHRpbWVvdXQgb2YgNTAwIHNlY29uZHMgb2NjdXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWxsb3cgZm9yIHRoZSBib290IHByb2Nlc3MgdG8gcmVhY2ggdGhlIGxvZ2luIHByb21wdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgdGltZW91dCBwZXJpb2QgYnkgc2V0dGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1FFTVVCT09UX1RJTUVPVVQnPjxmaWxlbmFtZT5URVNUX1FFTVVCT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PbmNlIHRoZSBib290IHByb2Nlc3MgaXMgcmVhY2hlZCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naW4gcHJvbXB0IGFwcGVhcnMsIHRoZSB0ZXN0cyBydW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bGwgYm9vdCBsb2cgaXMgd3JpdHRlbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3Rlc3RpbWFnZS9xZW11X2Jvb3RfbG9nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWFjaCB0ZXN0IG1vZHVsZSBsb2FkcyBpbiB0aGUgb3JkZXIgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+VEVTVF9TVUlURVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIGZ1bGwgb3V0cHV0IG9mIHRoZSBjb21tYW5kcyBydW4gb3ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTSCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3Rlc3RpbWdhZ2Uvc3NoX3RhcmdldF9sb2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiBubyBmYWlsdXJlcyBvY2N1ciwgdGhlIHRhc2sgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBlbmRzIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51bml0dGVzdDwvZmlsZW5hbWU+IGluIHRoZSB0YXNrIGxvZyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvX3Rlc3RpbWFnZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2hhcmR3YXJlLWltYWdlLWVuYWJsaW5nLXRlc3RzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgUnVudGltZSBUZXN0cyBvbiBIYXJkd2FyZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHJ1biB0ZXN0cyBvbiByZWFsCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLCBhbmQgZm9yIGNlcnRhaW4gZGV2aWNlcyBpdCBjYW4gYWxzbyBkZXBsb3kKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIHRvIGJlIHRlc3RlZCBvbnRvIHRoZSBkZXZpY2UgYmVmb3JlaGFuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBkZXBsb3ltZW50LCBhICJtYXN0ZXIgaW1hZ2UiIGlzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBvbnRvIHRoZSBoYXJkd2FyZSBvbmNlIGFzIHBhcnQgb2Ygc2V0dXAuCisgICAgICAgICAgICAgICAgICAgIFRoZW4sIGVhY2ggdGltZSB0ZXN0cyBhcmUgdG8gYmUgcnVuLCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIG9jY3VyczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBtYXN0ZXIgaW1hZ2UgaXMgYm9vdGVkIGludG8gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byB3cml0ZSB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzZWNvbmQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBkZXZpY2UgaXMgdGhlbiByZWJvb3RlZCB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIHNjcmlwdCB0aGF0IHlvdSBuZWVkIHRvIHByb3ZpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRldmljZSBib290cyBpbnRvIHRoZSBpbWFnZSB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBydW5uaW5nIHRlc3RzIChpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBkZXBsb3llZCBhdXRvbWF0aWNhbGx5IG9yIG5vdCksIHRoZSBkZXZpY2UgaXMKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgdG8gYmUgY29ubmVjdGVkIHRvIGEgbmV0d29yayBvbiBhCisgICAgICAgICAgICAgICAgICAgIHByZS1kZXRlcm1pbmVkIElQIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZWl0aGVyIHVzZSBzdGF0aWMgSVAgYWRkcmVzc2VzIHdyaXR0ZW4gaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UsIG9yIHNldCB0aGUgaW1hZ2UgdG8gdXNlIERIQ1AgYW5kIGhhdmUgeW91cgorICAgICAgICAgICAgICAgICAgICBESENQIHNlcnZlciBvbiB0aGUgdGVzdCBuZXR3b3JrIGFzc2lnbiBhIGtub3duIElQIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHJ1biB0ZXN0cyBvbiBoYXJkd2FyZSwgeW91IG5lZWQgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+IHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBGb3IgUUVNVSwgeW91IGRvIG5vdCBoYXZlIHRvIGNoYW5nZSBhbnl0aGluZywgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgIlFlbXVUYXJnZXQiLgorICAgICAgICAgICAgICAgICAgICBGb3IgcnVubmluZyB0ZXN0cyBvbiBoYXJkd2FyZSwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iU2ltcGxlUmVtb3RlVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiU2ltcGxlUmVtb3RlVGFyZ2V0IiBpZiB5b3UgYXJlIGdvaW5nIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuIHRlc3RzIG9uIGEgdGFyZ2V0IHN5c3RlbSB0aGF0IGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIHRoZSBpbWFnZSB0byBiZSB0ZXN0ZWQgYW5kIGlzIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlICJTaW1wbGVSZW1vdGVUYXJnZXQiIGluIGNvbmp1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBlaXRoZXIgcmVhbCBoYXJkd2FyZSBvciBhbiBpbWFnZSBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgc2VwYXJhdGVseSBzdGFydGVkIFFFTVUgb3IgYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdmlydHVhbCBtYWNoaW5lIG1hbmFnZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJHdW1taWJvb3RUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICJHdW1taWJvb3RUYXJnZXQiIGlmIHlvdXIgaGFyZHdhcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBFRkktYmFzZWQgbWFjaGluZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd1bW1pYm9vdDwvZmlsZW5hbWU+IGFzIGJvb3Rsb2FkZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHNvbWV0aGluZyBzaW1pbGFyKSBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgeW91ciBoYXJkd2FyZSB1bmRlciB0ZXN0IG11c3QgYmUgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERIQ1AtZW5hYmxlZCBuZXR3b3JrIHRoYXQgZ2l2ZXMgaXQgdGhlIHNhbWUgSVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGZvciBlYWNoIHJlYm9vdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGNob29zZSAiR3VtbWlib290VGFyZ2V0IiwgdGhlcmUgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgYW5kIGNvbnNpZGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2VsZWN0aW5nLWd1bW1pYm9vdHRhcmdldCc+U2VsZWN0aW5nIEd1bW1pYm9vdFRhcmdldDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgd2hpY2ggZm9sbG93cywgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJCZWFnbGVCb25lVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiQmVhZ2xlQm9uZVRhcmdldCIgaWYgeW91IGFyZSBkZXBsb3lpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIEJlYWdsZUJvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmxhY2siIG9yIG9yaWdpbmFsICJXaGl0ZSIgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlc2UgdGVzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBCZWFnbGVCb25lVGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2JlYWdsZWJvbmV0YXJnZXQucHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJFZGdlUm91dGVyVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiRWRnZVJvdXRlclRhcmdldCIgaXMgeW91IGFyZSBkZXBsb3lpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIFViaXF1aXRpIE5ldHdvcmtzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZVJvdXRlciBMaXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgRWRnZVJvdXRlclRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9lZGdlcm91dGVydGFyZ2V0LnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iR3J1YlRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgdGhlICJzdXBwb3J0cyBkZXBsb3lpbmcgaW1hZ2VzIGFuZCBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgb24gYW55IGdlbmVyaWMgUEMgdGhhdCBib290cyB1c2luZyBHUlVCLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgR3J1YlRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iPHJlcGxhY2VhYmxlPnlvdXItdGFyZ2V0PC9yZXBsYWNlYWJsZT4iOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIHlvdXIgb3duIGN1c3RvbSB0YXJnZXQgaWYgeW91IHdhbnQgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgd2hlbiB5b3UgYXJlIGRlcGxveWluZyBpbWFnZXMgYW5kIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBvbiBhIGN1c3RvbSBtYWNoaW5lIHdpdGhpbiB5b3VyIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBhZGQgYSBQeXRob24gdW5pdCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgdGFyZ2V0IGNsYXNzIHVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYi9vZXFhL2NvbnRyb2xsZXJzLzwvZmlsZW5hbWU+IHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyBwcm92aWRlIGFuIGVtcHR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9faW5pdF9fLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGVzLCBzZWUgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3NlbGVjdGluZy1ndW1taWJvb3R0YXJnZXQnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TZWxlY3RpbmcgR3VtbWlib290VGFyZ2V0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZGlkIG5vdCBzZXQgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgIkd1bW1pYm9vdFRhcmdldCIsIHRoZW4geW91IGRvIG5vdCBuZWVkIGFueSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2tpcCBkb3duIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncWVtdS1pbWFnZS1ydW5uaW5nLXRlc3RzJz5SdW5uaW5nIFRlc3RzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBzZXQgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgIkd1bW1pYm9vdFRhcmdldCIsIHlvdSBhbHNvIG5lZWQgdG8gcGVyZm9ybSBhIG9uZS10aW1lCisgICAgICAgICAgICAgICAgICAgIHNldHVwIG9mIHlvdXIgbWFzdGVyIGltYWdlIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IDxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCA8ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBtYXN0ZXIgaW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXRlc3RtYXN0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpcyBwcm92aWRlZCBhcyBhbiBleGFtcGxlIGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hc3RlciIgaW1hZ2UgYW5kIHlvdSBjYW4gY3VzdG9taXplIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBhcyB5b3Ugd291bGQgYW55IG90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBhcmUgdGhlIGltYWdlIHJlY2lwZSByZXF1aXJlbWVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluaGVyaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IGtlcm5lbCBtb2R1bGVzIGFyZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RhbGxzIG5vcm1hbCBsaW51eCB1dGlsaXRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBidXN5Ym94IG9uZXMgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZXV0aWxzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3ppcDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rbW9kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2VzIGEgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFJBTSBEaXNrIChpbml0cmFtZnMpIGltYWdlIHdpdGggYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tIGluc3RhbGxlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgbm9ybWFsIGltYWdlIHRoYXQgeW91IGNhbiBpbnN0YWxsIHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYSBzaW5nbGUgcm9vdGZzIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2UgdXNlcyBhbm90aGVyIGluc3RhbGxlciB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGEgc3BlY2lmaWMgcGFydGl0aW9uIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBhbGwgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiB1c2UgYW4gaW5zdGFsbGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHN1Y2ggY2FzZXMsIHlvdSBuZWVkIHRvIG1hbnVhbGx5IGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBwYXJ0aXRpb24gbGF5b3V0IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmlyc3QgcGFydGl0aW9uIG1vdW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgPGZpbGVuYW1lPi9ib290PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsZWQgImJvb3QiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIG1haW4gcm9vdGZzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiB3aGVyZSB0aGlzIGltYWdlIGdldHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLCB3aGljaCBpcyBtb3VudGVkIHVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Bbm90aGVyIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbGVkICJ0ZXN0cm9vdGZzIiB3aGVyZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyBnZXQgZGVwbG95ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCBpbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGwgdGhlIGltYWdlIHRoYXQgeW91IGp1c3QgYnVpbHQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHRoaW5nIHlvdSBuZWVkIHRvIGRvIHdoZW4gc2V0dGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPiB0byAiR3VtbWlib290VGFyZ2V0IiBpcworICAgICAgICAgICAgICAgICAgICB0byBzZXQgdXAgdGhlIHRlc3QgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfRlNUWVBFUyArPSAidGFyLmd6IgorICAgICBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiCisgICAgIFRFU1RfVEFSR0VUID0gIkd1bW1pYm9vdFRhcmdldCIKKyAgICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC4yLjMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB5b3VyIHRlc3QgaW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgQml0QmFrZSB0byBidWlsZCB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3Bvd2VyLWNvbnRyb2wnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Qb3dlciBDb250cm9sPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9zdCBoYXJkd2FyZSB0YXJnZXRzIG90aGVyIHRoYW4gU2ltcGxlUmVtb3RlVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGNvbnRyb2wgcG93ZXI6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfQ01EPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dldGhlciB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgY29tbWFuZCB0aGF0IHJ1bnMgb24gdGhlIGhvc3QgYW5kIGRvZXMgcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvZGUgcGFzc2VzIG9uZSBhcmd1bWVudCB0byB0aGF0IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmLCBvbiBvciBjeWNsZSAob2ZmIHRoZW4gb24pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvdWxkIGFwcGVhciBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9QT1dFUkNPTlRST0xfQ01EID0gInBvd2VyY29udHJvbC5leHAgdGVzdCAxMC4xMS4xMi4xIG51YzEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGV4cGVjdCBzY3JpcHQgZG9lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzc2ggdGVzdEAxMC4xMS4xMi4xICJweWN0bCBudWMxIDxyZXBsYWNlYWJsZT5hcmc8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgdGhlbiBydW5zIGEgUHl0aG9uIHNjcmlwdCB0aGF0IGNvbnRyb2xzIHBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGFiZWwgY2FsbGVkIDxmaWxlbmFtZT5udWMxPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGN1c3RvbWl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfQ01EPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHlvdXIgb3duIHNldHVwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb25lIHJlcXVpcmVtZW50IGlzIHRoYXQgaXQgYWNjZXB0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24iLCAib2ZmIiwgYW5kICJjeWNsZSIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gbm8gY29tbWFuZCBpcyBkZWZpbmVkLCBpdCBjb25uZWN0cyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3ZlciBTU0ggYW5kIHVzZXMgdGhlIGNsYXNzaWMgcmVib290IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byByZWJvb3QgdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2ljIHJlYm9vdCBpcyBmaW5lIGFzIGxvbmcgYXMgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxseSByZWJvb3RzIChpLmUuIHRoZSBTU0ggdGVzdCBoYXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyB1c2VmdWwgZm9yIHNjZW5hcmlvcyB3aGVyZSB5b3UgaGF2ZSBhIHNpbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwLCB0eXBpY2FsbHkgd2l0aCBhIHNpbmdsZSBib2FyZCwgYW5kIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29tZSBtYW51YWwgaW50ZXJhY3Rpb24gaXMgb2theSBmcm9tIHRpbWUgdG8gdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIG5vIGhhcmR3YXJlIHRvIGF1dG9tYXRpY2FsbHkgcGVyZm9ybSBwb3dlcgorICAgICAgICAgICAgICAgICAgICBjb250cm9sIGJ1dCBzdGlsbCB3aXNoIHRvIGV4cGVyaW1lbnQgd2l0aCBhdXRvbWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgdGVzdGluZywgeW91IGNhbiB1c2UgdGhlIGRpYWxvZy1wb3dlci1jb250cm9sCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdCB0aGF0IHNob3dzIGEgZGlhbG9nIHByb21wdGluZyB5b3UgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgcG93ZXIgYWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNjcmlwdCByZXF1aXJlcyBlaXRoZXIgS0RpYWxvZyBvciBaZW5pdHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhpcyBzY3JpcHQsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfUE9XRVJDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1BPV0VSQ09OVFJPTF9DTUQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0cy9jb250cmliL2RpYWxvZy1wb3dlci1jb250cm9sIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2VyaWFsLWNvbnNvbGUtY29ubmVjdGlvbic+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNlcmlhbCBDb25zb2xlIENvbm5lY3Rpb248L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0ZXN0IHRhcmdldCBjbGFzc2VzIHJlcXVpcmluZyBhIHNlcmlhbCBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgIHRvIGludGVyYWN0IHdpdGggdGhlIGJvb3Rsb2FkZXIgKGUuZy4gQmVhZ2xlQm9uZVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgRWRnZVJvdXRlclRhcmdldCwgYW5kIEdydWJUYXJnZXQpLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGEgY29tbWFuZCB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhcmdldCBtYWNoaW5lIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9TRVJJQUxDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfU0VSSUFMQ09OVFJPTF9DTUQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCBvcHRpb25hbGx5IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1MnPjxmaWxlbmFtZT5URVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNhc2VzIGNvdWxkIGJlIGEgc2VyaWFsIHRlcm1pbmFsIHByb2dyYW0gaWYgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgaXMgY29ubmVjdGVkIHRvIGEgbG9jYWwgc2VyaWFsIHBvcnQsIG9yIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlbG5ldDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbm5lY3RpbmcgdG8gYSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgdGhlIGNhc2UsIHRoZSBjb21tYW5kIHNpbXBseSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBhbmQgZm9yd2FyZCB0aGF0IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgdG8gc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dCBhcyBhbnkgbm9ybWFsIHRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0gZG9lcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHVzZSB0aGUgcGljb2NvbSB0ZXJtaW5hbCBwcm9ncmFtIG9uCisgICAgICAgICAgICAgICAgICAgIHNlcmlhbCBkZXZpY2UgPGZpbGVuYW1lPi9kZXYvdHR5VVNCMDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGF0IDExNTIwMGJwcywgeW91IHdvdWxkIHNldCB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EID0gInBpY29jb20gL2Rldi90dHlVU0IwIC1iIDExNTIwMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbG9jYWwgZGV2aWNlcyB3aGVyZSB0aGUgc2VyaWFsIHBvcnQgZGV2aWNlIGRpc2FwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgZGV2aWNlIHJlYm9vdHMsIGFuIGFkZGl0aW9uYWwgInNlcmRldnRyeSIgd3JhcHBlcgorICAgICAgICAgICAgICAgICAgICBzY3JpcHQgaXMgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIHdyYXBwZXIsIHNpbXBseSBwcmVmaXggdGhlIHRlcm1pbmFsIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtDT1JFQkFTRX0vc2NyaXB0cy9jb250cmliL3NlcmRldnRyeTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0cy9jb250cmliL3NlcmRldnRyeSBwaWNvY29tIC1iCisxMTUyMDAgL2Rldi90dHlVU0IwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InFlbXUtaW1hZ2UtcnVubmluZy10ZXN0cyI+CisgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBUZXN0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc3RhcnQgdGhlIHRlc3RzIGF1dG9tYXRpY2FsbHkgb3IgbWFudWFsbHk6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BdXRvbWF0aWNhbGx5IHJ1bm5pbmcgdGVzdHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIHJ1biB0aGUgdGVzdHMgYXV0b21hdGljYWxseSBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VjY2Vzc2Z1bGx5IGNyZWF0ZXMgYW4gaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9JTUFHRSc+PGZpbGVuYW1lPlRFU1RfSU1BR0U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9JTUFHRSA9ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgTmV4dCwgYnVpbGQgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBpbWFnZSBzdWNjZXNzZnVsbHkgYnVpbGRzLCB0aGUgdGVzdHMgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgcnVuOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hbnVhbGx5IHJ1bm5pbmcgdGVzdHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIG1hbnVhbGx5IHJ1biB0aGUgdGVzdHMsIGZpcnN0IGdsb2JhbGx5IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy10ZXN0aW1hZ2UnPjxmaWxlbmFtZT50ZXN0aW1hZ2U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBieSBlZGl0aW5nIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBOZXh0LCB1c2UgQml0QmFrZSB0byBydW4gdGhlIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiaXRiYWtlIC1jIHRlc3RpbWFnZSA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbGwgdGVzdCBmaWxlcyByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgQSB0ZXN0IG5hbWUgbWFwcyBkaXJlY3RseSB0byBhIFB5dGhvbiBtb2R1bGUuCisgICAgICAgICAgICAgICAgRWFjaCB0ZXN0IG1vZHVsZSBtYXkgY29udGFpbiBhIG51bWJlciBvZiBpbmRpdmlkdWFsIHRlc3RzLgorICAgICAgICAgICAgICAgIFRlc3RzIGFyZSB1c3VhbGx5IGdyb3VwZWQgdG9nZXRoZXIgYnkgdGhlIGFyZWEKKyAgICAgICAgICAgICAgICB0ZXN0ZWQgKGUuZyB0ZXN0cyBmb3Igc3lzdGVtZCByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHk8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWRkIHRlc3RzIHRvIGFueSBsYXllciBwcm92aWRlZCB5b3UgcGxhY2UgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9wZXIgYXJlYSBhbmQgeW91IGV4dGVuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBhcyBub3JtYWwuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0aGF0IHRlc3RzIHJlc2lkZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCBtb2R1bGUgbmFtZXMgZG8gbm90IGNvbGxpZGUgd2l0aCBtb2R1bGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgZGVmYXVsdCBzZXQgb2YgdGVzdCBtb2R1bGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3J1bnRpbWU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hhbmdlIHRoZSBzZXQgb2YgdGVzdHMgcnVuIGJ5IGFwcGVuZGluZyBvciBvdmVycmlkaW5nCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfU1VJVEVTJz48ZmlsZW5hbWU+VEVTVF9TVUlURVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBFYWNoIG5hbWUgaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4gcmVwcmVzZW50cyBhCisgICAgICAgICAgICAgICAgcmVxdWlyZWQgdGVzdCBmb3IgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFRlc3QgbW9kdWxlcyBuYW1lZCB3aXRoaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgc2tpcHBlZCBldmVuIGlmIGEgdGVzdCBpcyBub3Qgc3VpdGFibGUgZm9yIGFuIGltYWdlCisgICAgICAgICAgICAgICAgKGUuZy4gcnVubmluZyB0aGUgUlBNIHRlc3RzIG9uIGFuIGltYWdlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnBtPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEFwcGVuZGluZyAiYXV0byIgdG8gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4gY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byB0cnkgdG8gcnVuIGFsbCB0ZXN0cyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UgKGkuZS4gZWFjaCB0ZXN0IG1vZHVsZSBtYXkgZWxlY3QgdG8gc2tpcCBpdHNlbGYpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3JkZXIgeW91IGxpc3QgdGVzdHMgaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpcyBpbXBvcnRhbnQgYW5kIGluZmx1ZW5jZXMgdGVzdCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBvdGhlciB0ZXN0cyBzaG91bGQgYmUgYWRkZWQKKyAgICAgICAgICAgICAgICBhZnRlciB0aGUgdGVzdCBvbiB3aGljaCB0aGV5IGRlcGVuZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2luY2UgdGhlIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiB0ZXN0CisgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGluZzwvZmlsZW5hbWU+IHRlc3QsICJzc2giIG5lZWRzIHRvIGNvbWUgYWZ0ZXIKKyAgICAgICAgICAgICAgICAicGluZyIgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgVGhlIHRlc3QgY2xhc3MgcHJvdmlkZXMgbm8gcmUtb3JkZXJpbmcgb3IgZGVwZW5kZW5jeSBoYW5kbGluZy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRWFjaCBtb2R1bGUgY2FuIGhhdmUgbXVsdGlwbGUgY2xhc3NlcyB3aXRoIG11bHRpcGxlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCBQeXRob24gPGZpbGVuYW1lPnVuaXR0ZXN0PC9maWxlbmFtZT4gcnVsZXMgYXBwbHkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHRoaW5ncyB0byBrZWVwIGluIG1pbmQgd2hlbiBydW5uaW5nIHRlc3RzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZGVmYXVsdCB0ZXN0cyBmb3IgdGhlIGltYWdlIGFyZSBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBhczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVGQVVMVF9URVNUX1NVSVRFU19wbi08cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPiA9ICJwaW5nIHNzaCBkZiBjb25ubWFuIHN5c2xvZyB4b3JnIHNjcCB2bmMgZGF0ZSBycG0gc21hcnQgZG1lc2ciCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgeW91ciBvd24gdGVzdCB0byB0aGUgbGlzdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTX2FwcGVuZCA9ICIgbXl0ZXN0IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIGEgc3BlY2lmaWMgbGlzdCBvZiB0ZXN0cyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NVSVRFUyA9ICJ0ZXN0MSB0ZXN0MiB0ZXN0MyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbWVtYmVyLCBvcmRlciBpcyBpbXBvcnRhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHBsYWNlIGEgdGVzdCB0aGF0IGlzIGRlcGVuZGVudCBvbiBhbm90aGVyIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVyIGluIHRoZSBvcmRlci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJleHBvcnRpbmctdGVzdHMiPgorICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBUZXN0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwb3J0IHRlc3RzIHNvIHRoYXQgdGhleSBjYW4gcnVuIGluZGVwZW5kZW50bHkgb2YKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIEV4cG9ydGluZyB0ZXN0cyBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGhhbmQKKyAgICAgICAgICAgICAgICB0aGUgdGVzdCBleGVjdXRpb24gb2ZmIHRvIGEgc2NoZWR1bGVyLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gb25seSBleHBvcnQgdGVzdHMgdGhhdCBhcmUgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1NVSVRFUyc+PGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91ciBpbWFnZSBpcyBhbHJlYWR5IGJ1aWx0LCBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgc2V0CisgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIHRoZSBJUCBhZGRyZXNzIHlvdSBuZWVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9FWFBPUlRfT05MWSA9ICIxIgorICAgICBURVNUX1RBUkdFVCA9ICJzaW1wbGVyZW1vdGUiCisgICAgIFRFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4yIgorICAgICBURVNUX1NFUlZFUl9JUCA9ICIxOTIuMTY4LjcuMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIGV4cG9ydCB0aGUgdGVzdHMgd2l0aCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRXhwb3J0aW5nIHRoZSB0ZXN0cyBwbGFjZXMgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgICAgICBpcyBjb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX0VYUE9SVF9ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgcnVuIHRoZSB0ZXN0cyBvdXRzaWRlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgdG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG8KKyAgICAgJCAuL3J1bmV4cG9ydGVkLnB5IHRlc3RkYXRhLmpzb24KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgImV4cG9ydCIgZmVhdHVyZSBkb2VzIG5vdCBkZXBsb3kgb3IgYm9vdCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBZb3VyIHRhcmdldCAoYmUgaXQgYSBRZW11IG9yIGhhcmR3YXJlIG9uZSkKKyAgICAgICAgICAgICAgICAgICAgaGFzIHRvIGFscmVhZHkgYmUgdXAgYW5kIHJ1bm5pbmcgd2hlbiB5b3UgY2FsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuZXhwb3J0ZWQucHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGV4cG9ydGVkIGRhdGEgKGkuZS4gPGZpbGVuYW1lPnRlc3RkYXRhLmpzb248L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBjb250YWlucyBwYXRocyB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBjb250ZW50cyBvZiB0aGUgZGlyZWN0b3J5IGNhbiBiZSBtb3ZlZAorICAgICAgICAgICAgICAgIHRvIGFub3RoZXIgbWFjaGluZSBhcyBsb25nIGFzIHlvdSB1cGRhdGUgc29tZSBwYXRocyBpbiB0aGUKKyAgICAgICAgICAgICAgICBKU09OLgorICAgICAgICAgICAgICAgIFVzdWFsbHksIHlvdSBvbmx5IGNhcmUgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vcnBtPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgKGFzc3VtaW5nIHRoZSBSUE0gYW5kIFNtYXJ0IHRlc3RzIGFyZSBlbmFibGVkKS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHJ1bm5pbmcgdGhlIHRlc3RzIG9uIG90aGVyIG1hY2hpbmUKKyAgICAgICAgICAgICAgICBtZWFucyB0aGF0IHlvdSBoYXZlIHRvIG1vdmUgdGhlIGNvbnRlbnRzIGFuZCBjYWxsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bmV4cG9ydGVkLnB5PC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgICItLWRlcGxveS1kaXIgPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIgYXMKKyAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLi9ydW5leHBvcnRlZC5weSAtLWRlcGxveS1kaXIgL25ldy9wYXRoL29uL3RoaXMvbWFjaGluZSB0ZXN0ZGF0YS5qc29uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5leHBvcnRlZC5weTwvZmlsZW5hbWU+IGFjY2VwdHMgb3RoZXIgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBkZXNjcmliZWQgdXNpbmcgPGZpbGVuYW1lPi0taGVscDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InFlbXUtaW1hZ2Utd3JpdGluZy1uZXctdGVzdHMiPgorICAgICAgICAgICAgPHRpdGxlPldyaXRpbmcgTmV3IFRlc3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIHByZXZpb3VzbHksIGFsbCBuZXcgdGVzdCBmaWxlcyBuZWVkIHRvIGJlIGluIHRoZQorICAgICAgICAgICAgICAgIHByb3BlciBwbGFjZSBmb3IgdGhlIGJ1aWxkIHN5c3RlbSB0byBmaW5kIHRoZW0uCisgICAgICAgICAgICAgICAgTmV3IHRlc3RzIGZvciBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgb3V0c2lkZSBvZiB0aGUgY29yZQorICAgICAgICAgICAgICAgIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbGF5ZXIgdGhhdCBhZGRzIHRoZSBmdW5jdGlvbmFsaXR5LCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAoYXMgbG9uZyBhcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgZXh0ZW5kZWQgaW4gdGhlIGxheWVyJ3MKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgYXMgbm9ybWFsKS4KKyAgICAgICAgICAgICAgICBKdXN0IHJlbWVtYmVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpbGVuYW1lcyBuZWVkIHRvIG1hcCBkaXJlY3RseSB0byB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAobW9kdWxlKSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG8gbm90IHVzZSBtb2R1bGUgbmFtZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlkZSB3aXRoIGV4aXN0aW5nIGNvcmUgdGVzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1pbmltYWxseSwgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fX2luaXRfXy5weTwvZmlsZW5hbWU+IGZpbGUgbXVzdCBleGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJ1bnRpbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIG5ldyB0ZXN0LCBzdGFydCBieSBjb3B5aW5nIGFuIGV4aXN0aW5nIG1vZHVsZQorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5zeXNsb2cucHk8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MucHk8L2ZpbGVuYW1lPiBhcmUgZ29vZCBvbmVzIHRvIHVzZSkuCisgICAgICAgICAgICAgICAgVGVzdCBtb2R1bGVzIGNhbiB1c2UgY29kZSBmcm9tCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvdXRpbHM8L2ZpbGVuYW1lPiwgd2hpY2ggYXJlIGhlbHBlcgorICAgICAgICAgICAgICAgIGNsYXNzZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFN0cnVjdHVyZSBzaGVsbCBjb21tYW5kcyBzdWNoIHRoYXQgeW91IHJlbHkgb24gdGhlbSBhbmQgdGhleQorICAgICAgICAgICAgICAgIHJldHVybiBhIHNpbmdsZSBjb2RlIGZvciBzdWNjZXNzLgorICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgc29tZXRpbWVzIHlvdSB3aWxsIG5lZWQgdG8gcGFyc2UgdGhlIG91dHB1dC4KKyAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5kZi5weTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYXRlLnB5PC9maWxlbmFtZT4gbW9kdWxlcyBmb3IgZXhhbXBsZXMuCisgICAgICAgICAgICA8L25vdGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IGFsbCB0ZXN0IGNsYXNzZXMgaW5oZXJpdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZVJ1bnRpbWVUZXN0PC9maWxlbmFtZT4sIHdoaWNoIGlzIGZvdW5kIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29ldGVzdC5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgYmFzZSBjbGFzcyBvZmZlcnMgc29tZSBoZWxwZXIgYXR0cmlidXRlcywgd2hpY2ggYXJlCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdxZW11LWltYWdlLXdyaXRpbmctdGVzdHMtY2xhc3MtbWV0aG9kcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNsYXNzIE1ldGhvZHM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENsYXNzIG1ldGhvZHMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5oYXNQYWNrYWdlKHBrZyk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgIlRydWUiIGlmIDxmaWxlbmFtZT5wa2c8L2ZpbGVuYW1lPiBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgcGFja2FnZSBsaXN0IG9mIHRoZSBpbWFnZSwgd2hpY2ggaXMgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgbWFuaWZlc3QgZmlsZSB0aGF0IGlzIGdlbmVyYXRlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5oYXNGZWF0dXJlKGZlYXR1cmUpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zICJUcnVlIiBpZiB0aGUgZmVhdHVyZSBpcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3FlbXUtaW1hZ2Utd3JpdGluZy10ZXN0cy1jbGFzcy1hdHRyaWJ1dGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q2xhc3MgQXR0cmlidXRlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2xhc3MgYXR0cmlidXRlcyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBzY21kPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcXVhbHMgInBzIC1lZiIgaWYgPGZpbGVuYW1lPnByb2NwczwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIDxmaWxlbmFtZT5wc2NtZDwvZmlsZW5hbWU+IGVxdWFscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcyIgKGJ1c3lib3gpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dGM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjYWxsZWQgdGVzdCBjb250ZXh0LCB3aGljaCBnaXZlcyBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBkYXRhc3RvcmUsIHdoaWNoIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBzdHVmZiBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dGVzdHNsaXN0PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT50ZXN0c3JlcXVpcmVkPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgaW50ZXJuYWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0cyBkbyBub3QgbmVlZCB0aGVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlc2RpcjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvcnVudGltZS9maWxlczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggY29udGFpbnMgaGVscGVyIGZpbGVzIGZvciB0ZXN0cyBtZWFudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvcHlpbmcgb24gdGhlIHRhcmdldCBzdWNoIGFzIHNtYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyB3cml0dGVuIGluIEMgZm9yIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRhcmdldDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGNvbnRyb2xsZXIgb2JqZWN0IHVzZWQgdG8gZGVwbG95CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc3RhcnQgYW4gaW1hZ2Ugb24gYSBwYXJ0aWN1bGFyIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gUWVtdVRhcmdldCwgU2ltcGxlUmVtb3RlLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd1bW1pYm9vdFRhcmdldCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0cyB1c3VhbGx5IHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5pcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQncyBJUCBhZGRyZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zZXJ2ZXJfaXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaG9zdCdzIElQIGFkZHJlc3MsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkgdXNlZCBieSB0aGUgInNtYXJ0IiB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ydW4oY21kLCB0aW1lb3V0PU5vbmUpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNpbmdsZSwgbW9zdCB1c2VkIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGEgd3JhcHBlciBmb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2ggcm9vdEBob3N0ICJjbWQiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIHJldHVybnMgYSB0dXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSwgd2hpY2ggYXJlIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgbmFtZXMgaW1wbHkgLSB0aGUgcmV0dXJuIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgImNtZCIgYW5kIHdoYXRldmVyIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBwcm9kdWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHRpbWVvdXQgYXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qgc2hvdWxkIHdhaXQgZm9yICJjbWQiIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzICJOb25lIiwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgdXNlcyB0aGUgZGVmYXVsdCBpbnN0YW5jZSdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgcGVyaW9kLCB3aGljaCBpcyAzMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzICIwIiwgdGhlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVucyB1bnRpbCB0aGUgY29tbWFuZCByZXR1cm5zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5jb3B5X3RvKGxvY2FscGF0aCwgcmVtb3RlcGF0aCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NwIGxvY2FscGF0aCByb290QGlwOnJlbW90ZXBhdGg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y29weV9mcm9tKHJlbW90ZXBhdGgsIGxvY2FscGF0aCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NwIHJvb3RAaG9zdDpyZW1vdGVwYXRoIGxvY2FscGF0aDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdxZW11LWltYWdlLXdyaXRpbmctdGVzdHMtaW5zdGFuY2UtYXR0cmlidXRlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbmNlIEF0dHJpYnV0ZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIGluc3RhbmNlIGF0dHJpYnV0ZSBleGlzdHMsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPiBpbnN0YW5jZSBhdHRyaWJ1dGUgaXMKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsIHRvIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgaXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBleGlzdHMgYXMgYm90aCBhbiBpbnN0YW5jZSBhbmQgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHNvIHRlc3RzIGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlbGYudGFyZ2V0LnJ1bihjbWQpPC9maWxlbmFtZT4gaW4gaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oY21kKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1ZyI+CisgICAgICAgIDx0aXRsZT5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR0RCIGFsbG93cyB5b3UgdG8gZXhhbWluZSBydW5uaW5nIHByb2dyYW1zLCB3aGljaCBpbiB0dXJuIGhlbHBzIHlvdSB0byB1bmRlcnN0YW5kIGFuZCBmaXggcHJvYmxlbXMuCisgICAgICAgICAgICBJdCBhbHNvIGFsbG93cyB5b3UgdG8gcGVyZm9ybSBwb3N0LW1vcnRlbSBzdHlsZSBhbmFseXNpcyBvZiBwcm9ncmFtIGNyYXNoZXMuCisgICAgICAgICAgICBHREIgaXMgYXZhaWxhYmxlIGFzIGEgcGFja2FnZSB3aXRoaW4gdGhlIFlvY3RvIFByb2plY3QgYW5kIGlzCisgICAgICAgICAgICBpbnN0YWxsZWQgaW4gU0RLIGltYWdlcyBieSBkZWZhdWx0LgorICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iIGNoYXB0ZXIKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlc2UgaW1hZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIEdEQiBhdCA8dWxpbmsgdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiLyIvPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDx0aXA+CisgICAgICAgICAgICBGb3IgYmVzdCByZXN1bHRzLCBpbnN0YWxsIGRlYnVnICg8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+KSBwYWNrYWdlcworICAgICAgICAgICAgZm9yIHRoZSBhcHBsaWNhdGlvbnMgeW91IGFyZSBnb2luZyB0byBkZWJ1Zy4KKyAgICAgICAgICAgIERvaW5nIHNvIG1ha2VzIGV4dHJhIGRlYnVnIHN5bWJvbHMgYXZhaWxhYmxlIHRoYXQgZ2l2ZSB5b3UgbW9yZQorICAgICAgICAgICAgbWVhbmluZ2Z1bCBvdXRwdXQuCisgICAgICAgIDwvdGlwPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzLCBkdWUgdG8gbWVtb3J5IG9yIGRpc2sgc3BhY2UgY29uc3RyYWludHMsIGl0IGlzIG5vdCBwb3NzaWJsZQorICAgICAgICAgICAgdG8gdXNlIEdEQiBkaXJlY3RseSBvbiB0aGUgcmVtb3RlIHRhcmdldCB0byBkZWJ1ZyBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICBUaGVzZSBjb25zdHJhaW50cyBhcmlzZSBiZWNhdXNlIEdEQiBuZWVkcyB0byBsb2FkIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kIHRoZQorICAgICAgICAgICAgYmluYXJpZXMgb2YgdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQuCisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIEdEQiBuZWVkcyB0byBwZXJmb3JtIG1hbnkgY29tcHV0YXRpb25zIHRvIGxvY2F0ZSBpbmZvcm1hdGlvbiBzdWNoIGFzIGZ1bmN0aW9uCisgICAgICAgICAgICBuYW1lcywgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcywgc3RhY2sgdHJhY2VzIGFuZCBzbyBmb3J0aCAtIGV2ZW4gYmVmb3JlIHN0YXJ0aW5nIHRoZQorICAgICAgICAgICAgZGVidWdnaW5nIHByb2Nlc3MuCisgICAgICAgICAgICBUaGVzZSBleHRyYSBjb21wdXRhdGlvbnMgcGxhY2UgbW9yZSBsb2FkIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGFuZCBjYW4gYWx0ZXIgdGhlCisgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGhlbHAgZ2V0IHBhc3QgdGhlIHByZXZpb3VzbHkgbWVudGlvbmVkIGNvbnN0cmFpbnRzLCB5b3UgY2FuIHVzZSBHZGJzZXJ2ZXIuCisgICAgICAgICAgICBHZGJzZXJ2ZXIgcnVucyBvbiB0aGUgcmVtb3RlIHRhcmdldCBhbmQgZG9lcyBub3QgbG9hZCBhbnkgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgICAgICAgICBmcm9tIHRoZSBkZWJ1Z2dlZCBwcm9jZXNzLgorICAgICAgICAgICAgSW5zdGVhZCwgYSBHREIgaW5zdGFuY2UgcHJvY2Vzc2VzIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCBpcyBydW4gb24gYQorICAgICAgICAgICAgcmVtb3RlIGNvbXB1dGVyIC0gdGhlIGhvc3QgR0RCLgorICAgICAgICAgICAgVGhlIGhvc3QgR0RCIHRoZW4gc2VuZHMgY29udHJvbCBjb21tYW5kcyB0byBHZGJzZXJ2ZXIgdG8gbWFrZSBpdCBzdG9wIG9yIHN0YXJ0IHRoZSBkZWJ1Z2dlZAorICAgICAgICAgICAgcHJvZ3JhbSwgYXMgd2VsbCBhcyByZWFkIG9yIHdyaXRlIG1lbW9yeSByZWdpb25zIG9mIHRoYXQgZGVidWdnZWQgcHJvZ3JhbS4KKyAgICAgICAgICAgIEFsbCB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGxvYWRlZCBhbmQgcHJvY2Vzc2VkIGFzIHdlbGwKKyAgICAgICAgICAgIGFzIGFsbCB0aGUgaGVhdnkgZGVidWdnaW5nIGlzIGRvbmUgYnkgdGhlIGhvc3QgR0RCLgorICAgICAgICAgICAgT2ZmbG9hZGluZyB0aGVzZSBwcm9jZXNzZXMgZ2l2ZXMgdGhlIEdkYnNlcnZlciBydW5uaW5nIG9uIHRoZSB0YXJnZXQgYSBjaGFuY2UgdG8gcmVtYWluCisgICAgICAgICAgICBzbWFsbCBhbmQgZmFzdC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHNvdXJjZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcyBpbiBvcmRlciB0byBlbmFibGUgR0RCCisgICAgICAgICAgICAgICAgdG8gc2hvdyBzb3VyY2UgbGluZXMgaW4gaXRzIG91dHB1dC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNhdmUgZnVydGhlciBzcGFjZSBvbiB0aGUgdGFyZ2V0IGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnPjxmaWxlbmFtZT5QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICJkZWJ1Zy13aXRob3V0LXNyYyIgc28gdGhhdCB0aGVzZSBwYWNrYWdlcyBkbyBub3QKKyAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIGhvc3QgR0RCIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kCisgICAgICAgICAgICBmb3IgZG9pbmcgdGhlIG5lY2Vzc2FyeSBwcm9jZXNzaW5nIHRvIG1ha2UgYWN0dWFsIGRlYnVnZ2luZyBoYXBwZW4sCisgICAgICAgICAgICB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGhvc3QgY2FuIGFjY2VzcyB0aGUgdW5zdHJpcHBlZCBiaW5hcmllcyBjb21wbGV0ZQorICAgICAgICAgICAgd2l0aCB0aGVpciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYW5kIGFsc28gYmUgc3VyZSB0aGUgdGFyZ2V0IGlzIGNvbXBpbGVkIHdpdGggbm8gb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIFRoZSBob3N0IEdEQiBtdXN0IGFsc28gaGF2ZSBsb2NhbCBhY2Nlc3MgdG8gYWxsIHRoZSBsaWJyYXJpZXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgIGRlYnVnZ2VkIHByb2dyYW0uCisgICAgICAgICAgICBCZWNhdXNlIEdkYnNlcnZlciBkb2VzIG5vdCBuZWVkIGFueSBsb2NhbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIHRoZSBiaW5hcmllcyBvbgorICAgICAgICAgICAgdGhlIHJlbW90ZSB0YXJnZXQgY2FuIHJlbWFpbiBzdHJpcHBlZC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBiaW5hcmllcyBtdXN0IGFsc28gYmUgY29tcGlsZWQgd2l0aG91dCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgIHNvIHRoZXkgbWF0Y2ggdGhlIGhvc3QncyBiaW5hcmllcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcmVtYWluIGNvbnNpc3RlbnQgd2l0aCBHREIgZG9jdW1lbnRhdGlvbiBhbmQgdGVybWlub2xvZ3ksIHRoZSBiaW5hcnkgYmVpbmcgZGVidWdnZWQKKyAgICAgICAgICAgIG9uIHRoZSByZW1vdGUgdGFyZ2V0IG1hY2hpbmUgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICJpbmZlcmlvciIgYmluYXJ5LgorICAgICAgICAgICAgRm9yIGRvY3VtZW50YXRpb24gb24gR0RCIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvZG9jdW1lbnRhdGlvbi8iPkdEQiBzaXRlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc3RlcHMgeW91IG5lZWQgdG8gdGFrZQorICAgICAgICAgICAgdG8gZGVidWcgdXNpbmcgdGhlIEdOVSBwcm9qZWN0IGRlYnVnZ2VyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLXNldHVwJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgdGhlIENyb3NzLURldmVsb3BtZW50IERlYnVnZ2luZyBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgY2FuIGluaXRpYXRlIGEgcmVtb3RlIGRlYnVnZ2luZyBzZXNzaW9uLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGJlIHN1cmUgeW91IGhhdmUgc2V0IHVwIHRoZSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgICAgICB0b29sY2hhaW4sIGFuZCBzeXNyb290LgorICAgICAgICAgICAgICAgIFRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjYWR0LXByZXBhcmUnPlByZXBhcmluZyBmb3IgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBjaGFwdGVyIG9mIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlCisgICAgICAgICAgICAgICAgZGVzY3JpYmVzIHRoaXMgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIHJlYWQgdGhhdCBjaGFwdGVyIGFuZCBoYXZlIHNldCB1cAorICAgICAgICAgICAgICAgIHlvdXIgZW52aXJvbm1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1nZGItcmVtb3RlZGVidWctbGF1bmNoLWdkYnNlcnZlciI+CisgICAgICAgICAgICA8dGl0bGU+TGF1bmNoIEdkYnNlcnZlciBvbiB0aGUgVGFyZ2V0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWFrZSBzdXJlIEdkYnNlcnZlciBpcyBpbnN0YWxsZWQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICBJZiBpdCBpcyBub3QsIGluc3RhbGwgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2Ric2VydmVyPC9maWxlbmFtZT4sIHdoaWNoIG5lZWRzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJ0aHJlYWQtZGIxPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlLCB0aGF0IHdoZW4gZW50ZXJlZCBmcm9tIHRoZSBob3N0LAorICAgICAgICAgICAgICAgIGNvbm5lY3RzIHRvIHRoZSB0YXJnZXQgYW5kIGxhdW5jaGVzIEdkYnNlcnZlciBpbiBvcmRlciB0bworICAgICAgICAgICAgICAgICJkZWJ1ZyIgYSBiaW5hcnkgbmFtZWQgPGZpbGVuYW1lPmhlbGxvd29ybGQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2Ric2VydmVyIGxvY2FsaG9zdDoyMzQ1IC91c3IvYmluL2hlbGxvd29ybGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgR2Ric2VydmVyIHNob3VsZCBub3cgYmUgbGlzdGVuaW5nIG9uIHBvcnQgMjM0NSBmb3IgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgY29tbWFuZHMgY29taW5nIGZyb20gYSByZW1vdGUgR0RCIHByb2Nlc3MgdGhhdCBpcyBydW5uaW5nIG9uCisgICAgICAgICAgICAgICAgdGhlIGhvc3QgY29tcHV0ZXIuCisgICAgICAgICAgICAgICAgQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIEdkYnNlcnZlciBhbmQgdGhlIGhvc3QgR0RCIGFyZSBkb25lCisgICAgICAgICAgICAgICAgdXNpbmcgVENQLgorICAgICAgICAgICAgICAgIFRvIHVzZSBvdGhlciBjb21tdW5pY2F0aW9uIHByb3RvY29scywgcGxlYXNlIHJlZmVyIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGIvJz5HZGJzZXJ2ZXIgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGIiPgorICAgICAgICAgICAgPHRpdGxlPkxhdW5jaCBHREIgb24gdGhlIEhvc3QgQ29tcHV0ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIEdEQiBvbiB0aGUgaG9zdCBjb21wdXRlciB0YWtlcyBhIG51bWJlciBvZiBzdGFnZXMsIHdoaWNoCisgICAgICAgICAgICAgICAgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGItYnVpbGRjcm9zcyI+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIHRoZSBDcm9zcy1HREIgUGFja2FnZTwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgc3VpdGFibGUgR0RCIGNyb3NzLWJpbmFyeSBpcyByZXF1aXJlZCB0aGF0IHJ1bnMgb24geW91cgorICAgICAgICAgICAgICAgICAgICBob3N0IGNvbXB1dGVyIGJ1dCBhbHNvIGtub3dzIGFib3V0IHRoZSB0aGUgQUJJIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICByZW1vdGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGlzIGJpbmFyeSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSB0aGUgdG9vbGNoYWluIGhhcyBiZWVuIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZGVmYXVsdCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9vcHQvcG9reS8mRElTVFJPOy9zeXNyb290cy9pNjg2LXBva3lzZGstbGludXgvdXNyL2Jpbi9hcm12N2EtdmZwLW5lb24tcG9reS1saW51eC1nbnVlYWJpL2FybS1wb2t5LWxpbnV4LWdudWVhYmktZ2RiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgPGZpbGVuYW1lPmFybTwvZmlsZW5hbWU+IGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bGludXgtZ251ZWFiaTwvZmlsZW5hbWU+IGlzIHRoZSB0YXJnZXQgQUJJLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2RiLWNyb3NzPC9maWxlbmFtZT4gYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGdkYi1jcm9zcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGJpbmFyeSBpcyBidWlsdCwgeW91IGNhbiBmaW5kIGl0IGhlcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG1wL3N5c3Jvb3RzLzxyZXBsYWNlYWJsZT5ob3N0LWFyY2g8L3JlcGxhY2VhYmxlPi91c3IvYmluLzxyZXBsYWNlYWJsZT50YXJnZXQtcGxhdGZvcm08L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+dGFyZ2V0LWFiaTwvcmVwbGFjZWFibGU+LWdkYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRlLXRoZS1nZGItaW5pdGlhbGl6YXRpb24tZmlsZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNyZWF0ZSB0aGUgR0RCIEluaXRpYWxpemF0aW9uIEZpbGUgYW5kIFBvaW50IHRvIFlvdXIgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSBHREIgY3Jvc3MtYmluYXJ5LCB5b3UgYWxzbyBuZWVkIGEgR0RCCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIGZpbGUgaW4gdGhlIHNhbWUgdG9wIGRpcmVjdG9yeSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICB5b3VyIGJpbmFyeSByZXNpZGVzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzdGFydCBHREIgb24geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSwgR0RCCisgICAgICAgICAgICAgICAgICAgIGZpbmRzIHRoaXMgaW5pdGlhbGl6YXRpb24gZmlsZSBhbmQgZXhlY3V0ZXMgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kcyB3aXRoaW4uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPi5nZGJpbml0PC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi9vbmxpbmVkb2NzL2dkYi8nPkRlYnVnZ2luZyB3aXRoIEdEQjwvdWxpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbWFpbnRhaW5lZCBieQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnNvdXJjZXdhcmUub3JnJz5zb3VyY2V3YXJlLm9yZzwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBhZGQgYSBzdGF0ZW1lbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+Ly5nZGJpbml0PC9maWxlbmFtZT4gZmlsZSB0aGF0IHBvaW50cyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgcG9pbnRzIHRvIHRoZSByb290IGZpbGVzeXN0ZW0gZm9yCisgICAgICAgICAgICAgICAgICAgIGFuIEFSTS1iYXNlZCB0YXJnZXQgZGV2aWNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNldCBzeXNyb290IH4vc3lzcm9vdF9hcm0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGItbGF1bmNoaG9zdCI+CisgICAgICAgICAgICAgICAgPHRpdGxlPkxhdW5jaCB0aGUgSG9zdCBHREI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBsYXVuY2hpbmcgdGhlIGhvc3QgR0RCLCB5b3UgbmVlZCB0byBiZSBzdXJlCisgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIHNvdXJjZWQgdGhlIGNyb3NzLWRlYnVnZ2luZyBlbnZpcm9ubWVudCBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlmIHlvdSBpbnN0YWxsZWQgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBpcyBhdCA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGJlZ2lucyB3aXRoIHRoZSBzdHJpbmcgImVudmlyb25tZW50LXNldHVwIi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3NldHRpbmctdXAtdGhlLWNyb3NzLWRldmVsb3BtZW50LWVudmlyb25tZW50Jz5TZXR0aW5nIFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzCisgICAgICAgICAgICAgICAgICAgIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCBzd2l0Y2ggdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgYmluYXJ5IHJlc2lkZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHJ1biB0aGUgPGZpbGVuYW1lPmNyb3NzLWdkYjwvZmlsZW5hbWU+IGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSB0aGUgYmluYXJ5IGZpbGUgeW91IGFyZSBnb2luZyB0byBkZWJ1Zy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBjb250aW51ZXMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSB1c2VkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIGJ5IGxvYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5oZWxsb3dvcmxkPC9maWxlbmFtZT4gYmluYXJ5IGFzIHdlbGwgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZyBpbmZvcm1hdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFybS1wb2t5LWxpbnV4LWdudWFiaS1nZGIgaGVsbG93b3JsZAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kcyBpbiB5b3VyIDxmaWxlbmFtZT4uZ2RiaW5pdDwvZmlsZW5hbWU+IGV4ZWN1dGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBHREIgcHJvbXB0IGFwcGVhcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3BsYXRkZXYtZ2RiLWNvbm5lY3QtdG8tdGhlLXJlbW90ZS1nZGItc2VydmVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25uZWN0IHRvIHRoZSBSZW1vdGUgR0RCIFNlcnZlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZyb20gdGhlIHRhcmdldCwgeW91IG5lZWQgdG8gY29ubmVjdCB0byB0aGUgcmVtb3RlIEdEQgorICAgICAgICAgICAgICAgIHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgcmVtb3RlIGhvc3QgYW5kIHBvcnQuCisgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgY29tbWFuZCBjb250aW51aW5nIHdpdGggdGhlIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB0YXJnZXQgcmVtb3RlIDE5Mi4xNjguNy4yOjIzNDUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1nZGItcmVtb3RlZGVidWctbGF1bmNoLWdkYi11c2luZyI+CisgICAgICAgICAgICA8dGl0bGU+VXNlIHRoZSBEZWJ1Z2dlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHByb2NlZWQgd2l0aCBkZWJ1Z2dpbmcgYXMgbm9ybWFsIC0gYXMgaWYgeW91IHdlcmUgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgb24gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGluc3RydWN0IEdEQiB0byBicmVhayBpbiB0aGUgIm1haW4iIGZ1bmN0aW9uIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgY29udGludWUgd2l0aCBleGVjdXRpb24gb2YgdGhlIGluZmVyaW9yIGJpbmFyeSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcworICAgICAgICAgICAgICAgIGZyb20gd2l0aGluIEdEQjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIChnZGIpIGJyZWFrIG1haW4KKyAgICAgKGdkYikgY29udGludWUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIEdEQiwgc2VlIHRoZSBwcm9qZWN0J3Mgb25saW5lIGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2Rvd25sb2FkL29ubGluZWRvY3MvIi8+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz4KKyAgICAgICAgPHRpdGxlPkRlYnVnZ2luZyBQYXJhbGxlbCBNYWtlIFJhY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgcGFyYWxsZWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiByYWNlIG9jY3VycyB3aGVuIHRoZSBidWlsZAorICAgICAgICAgICAgY29uc2lzdHMgb2Ygc2V2ZXJhbCBwYXJ0cyB0aGF0IGFyZSBydW4gc2ltdWx0YW5lb3VzbHkgYW5kCisgICAgICAgICAgICBhIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgb3V0cHV0IG9yIHJlc3VsdCBvZiBvbmUKKyAgICAgICAgICAgIHBhcnQgaXMgbm90IHJlYWR5IGZvciB1c2Ugd2l0aCBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSBidWlsZCB0aGF0CisgICAgICAgICAgICBkZXBlbmRzIG9uIHRoYXQgb3V0cHV0LgorICAgICAgICAgICAgUGFyYWxsZWwgbWFrZSByYWNlcyBhcmUgYW5ub3lpbmcgYW5kIGNhbiBzb21ldGltZXMgYmUgZGlmZmljdWx0CisgICAgICAgICAgICB0byByZXByb2R1Y2UgYW5kIGZpeC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgc2ltcGxlIHRpcHMgYW5kIHRyaWNrcyBleGlzdCB0aGF0IGNhbiBoZWxwCisgICAgICAgICAgICB5b3UgZGVidWcgYW5kIGZpeCB0aGVtLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGEgcmVhbC13b3JsZCBleGFtcGxlIG9mIGFuIGVycm9yIGVuY291bnRlcmVkCisgICAgICAgICAgICBvbiB0aGUgWW9jdG8gUHJvamVjdCBhdXRvYnVpbGRlciBhbmQgdGhlIHByb2Nlc3MgdXNlZCB0byBmaXggaXQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY2Fubm90IHByb3Blcmx5IGZpeCBhIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gcmFjZQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbiwgeW91IGNhbiB3b3JrIGFyb3VuZCBpdCBieSBjbGVhcmluZyBlaXRoZXIgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0VJTlNUJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRUlOU1Q8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RoZS1mYWlsdXJlJz4KKyAgICAgICAgICAgIDx0aXRsZT5UaGUgRmFpbHVyZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIGFzc3VtZSB0aGF0IHlvdSBhcmUgYnVpbGRpbmcgYW4gaW1hZ2UgdGhhdAorICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlICJuZWFyZCIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICBBbmQsIGR1cmluZyB0aGUgYnVpbGQsIEJpdEJha2UgcnVucyBpbnRvIHByb2JsZW1zIGFuZAorICAgICAgICAgICAgICAgIGNyZWF0ZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBsb2cgZmlsZSBoYXMgbG9uZ2VyIGxpbmVzIGFydGlmaWNpYWxseQorICAgICAgICAgICAgICAgICAgICBicm9rZW4gdG8gbWFrZSB0aGUgbGlzdGluZyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgSWYgeW91IGV4YW1pbmUgdGhlIG91dHB1dCBvciB0aGUgbG9nIGZpbGUsIHlvdSBzZWUgdGhlCisgICAgICAgICAgICAgICAgZmFpbHVyZSBkdXJpbmcgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHwgREVCVUc6IFNJVEUgZmlsZXMgWydlbmRpYW4tbGl0dGxlJywgJ2JpdC0zMicsICdpeDg2LWNvbW1vbicsICdjb21tb24tbGludXgnLCAnY29tbW9uLWdsaWJjJywgJ2k1ODYtbGludXgnLCAnY29tbW9uJ10KKyAgICAgfCBERUJVRzogRXhlY3V0aW5nIHNoZWxsIGZ1bmN0aW9uIGRvX2NvbXBpbGUKKyAgICAgfCBOT1RFOiBtYWtlIC1qIDE2CisgICAgIHwgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSBhbGwtYW0KKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3R5cGVzLmggaW5jbHVkZS9uZWFyL3R5cGVzLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL2xvZy5oIGluY2x1ZGUvbmVhci9sb2cuaAorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvcGx1Z2luLmggaW5jbHVkZS9uZWFyL3BsdWdpbi5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS90YWcuaCBpbmNsdWRlL25lYXIvdGFnLmgKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvYWRhcHRlci5oIGluY2x1ZGUvbmVhci9hZGFwdGVyLmgKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvbmRlZi5oIGluY2x1ZGUvbmVhci9uZGVmLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3Rsdi5oIGluY2x1ZGUvbmVhci90bHYuaAorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3NldHRpbmcuaCBpbmNsdWRlL25lYXIvc2V0dGluZy5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9kZXZpY2UuaCBpbmNsdWRlL25lYXIvZGV2aWNlLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL25mY19jb3B5LmggaW5jbHVkZS9uZWFyL25mY19jb3B5LmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3NuZXAuaCBpbmNsdWRlL25lYXIvc25lcC5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS92ZXJzaW9uLmggaW5jbHVkZS9uZWFyL3ZlcnNpb24uaAorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvZGJ1cy5oIGluY2x1ZGUvbmVhci9kYnVzLmgKKyAgICAgfCAuL3NyYy9nZW5idWlsdGluIG5mY3R5cGUxIG5mY3R5cGUyIG5mY3R5cGUzIG5mY3R5cGU0IHAycCA+IHNyYy9idWlsdGluLmgKKyAgICAgfCBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvCisgICAgICAgYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4vaW5jbHVkZSAtSS4vc3JjIC1JLi9nZGJ1cyAgLUkvaG9tZS9wb2t5YnVpbGQvCisgICAgICAgeW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvZ2xpYi0yLjAKKyAgICAgICAtSS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvCisgICAgICAgbGliL2dsaWItMi4wL2luY2x1ZGUgIC1JL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkLworICAgICAgIHRtcC9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL2RidXMtMS4wIC1JL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlLworICAgICAgIG5pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9saWIvZGJ1cy0xLjAvaW5jbHVkZSAgLUkvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIvCisgICAgICAgeW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvbGlibmwzCisgICAgICAgLURORUFSX1BMVUdJTl9CVUlMVElOIC1EUExVR0lORElSPVwiIi91c3IvbGliL25lYXIvcGx1Z2lucyJcIgorICAgICAgIC1EQ09ORklHRElSPVwiIi9ldGMvbmVhcmRcIiIgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtYworICAgICAgIC1vIHRvb2xzL3NuZXAtc2VuZC5vIHRvb2xzL3NuZXAtc2VuZC5jCisgICAgIHwgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHRvb2xzL3NuZXAtc2VuZC5jOjE2OjA6CisgICAgIHwgdG9vbHMvLi4vc3JjL25lYXIuaDo0MToyMzogZmF0YWwgZXJyb3I6IG5lYXIvZGJ1cy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgIHwgICNpbmNsdWRlICZsdDtuZWFyL2RidXMuaCZndDsKKyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgfCBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorICAgICB8IG1ha2VbMV06ICoqKiBbdG9vbHMvc25lcC1zZW5kLm9dIEVycm9yIDEKKyAgICAgfCBtYWtlWzFdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorICAgICB8IG1ha2U6ICoqKiBbYWxsXSBFcnJvciAyCisgICAgIHwgRVJST1I6IG9lX3J1bm1ha2UgZmFpbGVkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlcHJvZHVjaW5nLXRoZS1lcnJvcic+CisgICAgICAgICAgICA8dGl0bGU+UmVwcm9kdWNpbmcgdGhlIEVycm9yPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSByYWNlIGNvbmRpdGlvbnMgYXJlIGludGVybWl0dGVudCwgdGhleSBkbyBub3QKKyAgICAgICAgICAgICAgICBtYW5pZmVzdCB0aGVtc2VsdmVzIGV2ZXJ5IHRpbWUgeW91IGRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBJbiBmYWN0LCBtb3N0IHRpbWVzIHRoZSBidWlsZCB3aWxsIGNvbXBsZXRlIHdpdGhvdXQgcHJvYmxlbXMKKyAgICAgICAgICAgICAgICBldmVuIHRob3VnaCB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBUaHVzLCBvbmNlIHRoZSBlcnJvciBzdXJmYWNlcywgeW91IG5lZWQgYSB3YXkgdG8gcmVwcm9kdWNlIGl0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGNvbXBpbGluZyB0aGUgIm5lYXJkIiBwYWNrYWdlIGlzIGNhdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgcHJvYmxlbS4KKyAgICAgICAgICAgICAgICBTbyB0aGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgYnVpbGQgIm5lYXJkIiBsb2NhbGx5LgorICAgICAgICAgICAgICAgIEJlZm9yZSB5b3Ugc3RhcnQgdGhlIGJ1aWxkLCBzZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvCisgICAgICAgICAgICAgICAgYSBoaWdoIG51bWJlciAoZS5nLiAiLWogMjAiKS4KKyAgICAgICAgICAgICAgICBVc2luZyBhIGhpZ2ggdmFsdWUgZm9yIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbmNyZWFzZXMgdGhlIGNoYW5jZXMgb2YgdGhlIHJhY2UgY29uZGl0aW9uIHNob3dpbmcgdXA6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbmVhcmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGxvY2FsIGJ1aWxkIGZvciAibmVhcmQiIGNvbXBsZXRlcywgc3RhcnQgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG5lYXJkIC1jIGRldnNoZWxsCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIGNsZWFuCisgICAgICQgbWFrZSB0b29scy9zbmVwLXNlbmQubworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gY29tbWFuZHMgY2F1c2UgdGhlIGZhaWx1cmUKKyAgICAgICAgICAgICAgICB0byBjbGVhcmx5IGJlIHZpc2libGUuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhIG1pc3NpbmcgZGVwZW5kZW5jeSBleGlzdHMgZm9yIHRoZSAibmVhcmQiCisgICAgICAgICAgICAgICAgTWFrZWZpbGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgc29tZSBhYmJyZXZpYXRlZCwgc2FtcGxlIG91dHB1dCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIG1pc3NpbmcgZGVwZW5kZW5jeSBjbGVhcmx5IHZpc2libGUgYXQgdGhlIGVuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9ob21lL3Njb3R0LWxlbm92by8uLi4uLi4KKyAgICAgICAgLgorICAgICAgICAuCisgICAgICAgIC4KKyAgICAgdG9vbHMvc25lcC1zZW5kLmMKKyAgICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHRvb2xzL3NuZXAtc2VuZC5jOjE2OjA6CisgICAgIHRvb2xzLy4uL3NyYy9uZWFyLmg6NDE6MjM6IGZhdGFsIGVycm9yOiBuZWFyL2RidXMuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgI2luY2x1ZGUgJmx0O25lYXIvZGJ1cy5oJmd0OworICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgIGNvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCisgICAgIG1ha2U6ICoqKiBbdG9vbHMvc25lcC1zZW5kLm9dIEVycm9yIDEKKyAgICAgJAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLXBhdGNoLWZvci10aGUtZml4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIFBhdGNoIGZvciB0aGUgRml4PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGVyZSBpcyBhIG1pc3NpbmcgZGVwZW5kZW5jeSBmb3IgdGhlIE1ha2VmaWxlCisgICAgICAgICAgICAgICAgdGFyZ2V0LCB5b3UgbmVlZCB0byBwYXRjaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5NYWtlZmlsZS5pbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIFF1aWx0IHRvIGNyZWF0ZSB0aGUgcGF0Y2g6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IG5ldyBwYXJhbGxlbG1ha2UucGF0Y2gKKyAgICAgUGF0Y2ggcGF0Y2hlcy9wYXJhbGxlbG1ha2UucGF0Y2ggaXMgbm93IG9uIHRvcAorICAgICAkIHF1aWx0IGFkZCBNYWtlZmlsZS5hbQorICAgICBGaWxlIE1ha2VmaWxlLmFtIGFkZGVkIHRvIHBhdGNoIHBhdGNoZXMvcGFyYWxsZWxtYWtlLnBhdGNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIFF1aWx0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQgeW91IG5lZWQgdG8gbWFrZSB0aGUgZWRpdHMgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiB0byBhZGQgdGhlIG1pc3NpbmcKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgIEZvciBvdXIgZXhhbXBsZSwgeW91IGhhdmUgdG8gYWRkIHRoZSBmb2xsb3dpbmcgbGluZQorICAgICAgICAgICAgICAgIHRvIHRoZSBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG9vbHMvc25lcC1zZW5kLiQoT0JKRVhUKTogaW5jbHVkZS9uZWFyL2RidXMuaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBlZGl0ZWQgdGhlIGZpbGUsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVmcmVzaDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBwYXRjaDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcXVpbHQgcmVmcmVzaAorICAgICBSZWZyZXNoZWQgcGF0Y2ggcGF0Y2hlcy9wYXJhbGxlbG1ha2UucGF0Y2gKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSB0aGUgcGF0Y2ggZmlsZSBleGlzdHMsIHlvdSBuZWVkIHRvIGFkZCBpdCBiYWNrIHRvIHRoZQorICAgICAgICAgICAgICAgIG9yaWdpbmF0aW5nIHJlY2lwZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGFzc3VtaW5nIGEgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcCBwYXRjaGVzL3BhcmFsbGVsbWFrZS5wYXRjaCBwb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHRoaW5nIHlvdSBuZWVkIHRvIGRvIHRvIGltcGxlbWVudCB0aGUgZml4IGluIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIGlzIHRvIHVwZGF0ZSB0aGUgIm5lYXJkIiByZWNpcGUgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmVhcmQtMC4xNC5iYjwvZmlsZW5hbWU+KSBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW5jbHVkZXMgdGhlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBmaWxlIGlzIGluIHRoZSBmb2xkZXIgYWJvdmUgdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgd2hhdCB0aGUgZWRpdGVkIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgd291bGQgbG9vayBsaWtlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvbmZjLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5pbiBcCisgICAgICAgICAgICAgICAgZmlsZTovL25lYXJkLnNlcnZpY2UuaW4gXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbG1ha2UucGF0Y2ggXAorICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aCB0aGUgcGF0Y2ggY29tcGxldGUgYW5kIG1vdmVkIHRvIHRoZSBjb3JyZWN0IGZvbGRlciBhbmQKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgdXBkYXRlZCwgeW91IGNhbgorICAgICAgICAgICAgICAgIGV4aXQgdGhlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBleGl0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Rlc3RpbmctdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5UZXN0aW5nIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGggZXZlcnl0aGluZyBpbiBwbGFjZSwgeW91IGNhbiBnZXQgYmFjayB0byB0cnlpbmcgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgYWdhaW4gbG9jYWxseToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBuZWFyZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGJ1aWxkIHNob3VsZCBzdWNjZWVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3cgeW91IGNhbiBvcGVuIHVwIGEgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gYWdhaW4KKyAgICAgICAgICAgICAgICBhbmQgcmVwZWF0IHRoZSBjbGVhbiBhbmQgbWFrZSBvcGVyYXRpb25zIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbmVhcmQgLWMgZGV2c2hlbGwKKyAgICAgJCBtYWtlIGNsZWFuCisgICAgICQgbWFrZSB0b29scy9zbmVwLXNlbmQubworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc2hvdWxkIHdvcmsgd2l0aG91dCBpc3N1ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgc29sdmVkIHByb2JsZW1zLCBpZiB0aGV5IG9yaWdpbmF0ZWQgdXBzdHJlYW0sIHlvdQorICAgICAgICAgICAgICAgIG5lZWQgdG8gc3VibWl0IHRoZSBmaXggZm9yIHRoZSByZWNpcGUgaW4gT0UtQ29yZSBhbmQgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICBzbyB0aGF0IHRoZSBwcm9ibGVtIGlzIHRha2VuIGNhcmUgb2YgYXQgaXRzIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZSI+CisgICAgICAgIDx0aXRsZT5Qcm9maWxpbmcgd2l0aCBPUHJvZmlsZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0LyI+T1Byb2ZpbGU8L3VsaW5rPiBpcyBhCisgICAgICAgICAgICBzdGF0aXN0aWNhbCBwcm9maWxlciB3ZWxsIHN1aXRlZCBmb3IgZmluZGluZyBwZXJmb3JtYW5jZQorICAgICAgICAgICAgYm90dGxlbmVja3MgaW4gYm90aCB1c2VyLXNwYWNlIHNvZnR3YXJlIGFuZCBpbiB0aGUga2VybmVsLgorICAgICAgICAgICAgVGhpcyBwcm9maWxlciBwcm92aWRlcyBhbnN3ZXJzIHRvIHF1ZXN0aW9ucyBsaWtlICJXaGljaCBmdW5jdGlvbnMgZG9lcyBteSBhcHBsaWNhdGlvbiBzcGVuZAorICAgICAgICAgICAgdGhlIG1vc3QgdGltZSBpbiB3aGVuIGRvaW5nIFg/IgorICAgICAgICAgICAgQmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyB3ZWxsIGludGVncmF0ZWQgd2l0aCBPUHJvZmlsZSwgaXQgbWFrZXMgcHJvZmlsaW5nCisgICAgICAgICAgICBhcHBsaWNhdGlvbnMgb24gdGFyZ2V0IGhhcmR3YXJlIHN0cmFpZ2h0IGZvcndhcmQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGFuZCBydW4gT1Byb2ZpbGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz5vcHJvZmlsZTwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gdXNlIE9Qcm9maWxlLCB5b3UgbmVlZCBhbiBpbWFnZSB0aGF0IGhhcyBPUHJvZmlsZSBpbnN0YWxsZWQuCisgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJ0b29scy1wcm9maWxlIiBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPklNQUdFX0ZFQVRVUkVTPC91bGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgZGVidWdnaW5nIHN5bWJvbHMgdG8gYmUgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0gd2hlcmUgdGhlIGFuYWx5c2lzCisgICAgICAgICAgICB0YWtlcyBwbGFjZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZ2FpbiBhY2Nlc3MgdG8gdGhlIHN5bWJvbHMgYnkgdXNpbmcgImRiZy1wa2dzIiBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG9yIGJ5CisgICAgICAgICAgICBpbnN0YWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBkZWJ1ZyAoPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3Igc3VjY2Vzc2Z1bCBjYWxsIGdyYXBoIGFuYWx5c2lzLCB0aGUgYmluYXJpZXMgbXVzdCBwcmVzZXJ2ZSB0aGUgZnJhbWUKKyAgICAgICAgICAgIHBvaW50ZXIgcmVnaXN0ZXIgYW5kIHNob3VsZCBhbHNvIGJlIGNvbXBpbGVkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LWZuby1vbWl0LWZyYW1lcG9pbnRlcjwvZmlsZW5hbWU+IGZsYWcuCisgICAgICAgICAgICBZb3UgY2FuIGFjaGlldmUgdGhpcyBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TRUxFQ1RFRF9PUFRJTUlaQVRJT04nPlNFTEVDVEVEX09QVElNSVpBVElPTjwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zCisgICAgIC1mbm8tb21pdC1mcmFtZXBvaW50ZXIKKyAgICAgLWZyZW5hbWUtcmVnaXN0ZXJzCisgICAgIC1PMgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIGFjaGlldmUgaXQgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVCVUdfQlVJTEQnPkRFQlVHX0JVSUxEPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5ERUJVR19CVUlMRDwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgeW91IGFsc28gYWRkIGV4dHJhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0aGF0IGNhbiBtYWtlIHRoZSBkZWJ1ZworICAgICAgICAgICAgcGFja2FnZXMgbGFyZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS10YXJnZXQiPgorICAgICAgICAgICAgPHRpdGxlPlByb2ZpbGluZyBvbiB0aGUgVGFyZ2V0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgT1Byb2ZpbGUsIHlvdSBjYW4gcGVyZm9ybSBhbGwgdGhlIHByb2ZpbGluZyB3b3JrIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgIEEgc2ltcGxlIE9Qcm9maWxlIHNlc3Npb24gbWlnaHQgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBvcGNvbnRyb2wgLS1yZXNldAorICAgICAjIG9wY29udHJvbCAtLXN0YXJ0IC0tc2VwYXJhdGU9bGliIC0tbm8tdm1saW51eCAtYyA1CisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgLgorICAgICAgICBbZG8gd2hhdGV2ZXIgaXMgYmVpbmcgcHJvZmlsZWRdCisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgLgorICAgICAjIG9wY29udHJvbCAtLXN0b3AKKyAgICAgJCBvcHJlcG9ydCAtY2wKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5yZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgY2xlYXJzIGFueSBwcmV2aW91c2x5IHByb2ZpbGVkIGRhdGEuCisgICAgICAgICAgICAgICAgVGhlIG5leHQgY29tbWFuZCBzdGFydHMgT1Byb2ZpbGUuCisgICAgICAgICAgICAgICAgVGhlIG9wdGlvbnMgdXNlZCB3aGVuIHN0YXJ0aW5nIHRoZSBwcm9maWxlciBzZXBhcmF0ZSBkeW5hbWljIGxpYnJhcnkgZGF0YQorICAgICAgICAgICAgICAgIHdpdGhpbiBhcHBsaWNhdGlvbnMsIGRpc2FibGUga2VybmVsIHByb2ZpbGluZywgYW5kIGVuYWJsZSBjYWxsZ3JhcGhpbmcgdXAgdG8KKyAgICAgICAgICAgICAgICBmaXZlIGxldmVscyBkZWVwLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUbyBwcm9maWxlIHRoZSBrZXJuZWwsIHlvdSB3b3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS12bWxpbnV4PS9wYXRoL3RvL3ZtbGludXg8L2ZpbGVuYW1lPiBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+IGZpbGUgaXMgdXN1YWxseSBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ib290LzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgbXVzdCBtYXRjaCB0aGUgcnVubmluZyBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciB5b3UgcGVyZm9ybSB5b3VyIHByb2ZpbGluZyB0YXNrcywgdGhlIG5leHQgY29tbWFuZCBzdG9wcyB0aGUgcHJvZmlsZXIuCisgICAgICAgICAgICAgICAgQWZ0ZXIgdGhhdCwgeW91IGNhbiB2aWV3IHJlc3VsdHMgd2l0aCB0aGUgPGZpbGVuYW1lPm9wcmVwb3J0PC9maWxlbmFtZT4gY29tbWFuZCB3aXRoIG9wdGlvbnMKKyAgICAgICAgICAgICAgICB0byBzZWUgdGhlIHNlcGFyYXRlIGxpYnJhcnkgc3ltYm9scyBhbmQgY2FsbGdyYXBoIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDYWxsZ3JhcGhpbmcgbG9ncyBpbmZvcm1hdGlvbiBhYm91dCB0aW1lIHNwZW50IGluIGZ1bmN0aW9ucyBhbmQgYWJvdXQgYSBmdW5jdGlvbidzCisgICAgICAgICAgICAgICAgY2FsbGluZyBmdW5jdGlvbiAocGFyZW50KSBhbmQgY2FsbGVkIGZ1bmN0aW9ucyAoY2hpbGRyZW4pLgorICAgICAgICAgICAgICAgIFRoZSBoaWdoZXIgdGhlIGNhbGxncmFwaGluZyBkZXB0aCwgdGhlIG1vcmUgYWNjdXJhdGUgdGhlIHJlc3VsdHMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaGlnaGVyIGRlcHRocyBhbHNvIGluY3JlYXNlIHRoZSBsb2dnaW5nIG92ZXJoZWFkLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCB0YWtlIGNhcmUgd2hlbiBzZXR0aW5nIHRoZSBjYWxsZ3JhcGhpbmcgZGVwdGguCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIE9uIEFSTSwgYmluYXJpZXMgbmVlZCB0byBoYXZlIHRoZSBmcmFtZSBwb2ludGVyIGVuYWJsZWQgZm9yIGNhbGxncmFwaGluZyB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICBUbyBhY2NvbXBsaXNoIHRoaXMgdXNlIHRoZSA8ZmlsZW5hbWU+LWZuby1vbWl0LWZyYW1lcG9pbnRlcjwvZmlsZW5hbWU+IG9wdGlvbgorICAgICAgICAgICAgICAgICAgICB3aXRoIDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIE9Qcm9maWxlLCBzZWUgdGhlIE9Qcm9maWxlCisgICAgICAgICAgICAgICAgb25saW5lIGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0L2RvY3MvIi8+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUtb3Byb2ZpbGV1aSI+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgT1Byb2ZpbGVVSTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBPUHJvZmlsZSBpcyBhbHNvIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIGFuZCBidWlsZCB0aGlzIGludGVyZmFjZSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL29wcm9maWxldWkvIj48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJZiB0aGUgInRvb2xzLXByb2ZpbGUiIGltYWdlIGZlYXR1cmUgaXMgc2VsZWN0ZWQsIGFsbCBuZWNlc3NhcnkgYmluYXJpZXMKKyAgICAgICAgICAgICAgICBhcmUgaW5zdGFsbGVkIG9udG8gdGhlIHRhcmdldCBkZXZpY2UgZm9yIE9Qcm9maWxlVUkgaW50ZXJhY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiBpbWFnZSBmZWF0dXJlcyB0aGF0IHNoaXAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1mZWF0dXJlcy1pbWFnZSc+SW1hZ2UgRmVhdHVyZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHVzdWFsbHkgaW5jbHVkZXMgYWxsIG5lZWRlZCBwYXRjaGVzIG9uIHRoZSB0YXJnZXQgZGV2aWNlLCB5b3UKKyAgICAgICAgICAgICAgICBtaWdodCBmaW5kIHlvdSBuZWVkIG90aGVyIE9Qcm9maWxlIHBhdGNoZXMgZm9yIHJlY2VudCBPUHJvZmlsZVVJIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIElmIHNvLCBzZWUgdGhlIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9vcHJvZmlsZXVpL3RyZWUvUkVBRE1FJz4KKyAgICAgICAgICAgICAgICBPUHJvZmlsZVVJIFJFQURNRTwvdWxpbms+IGZvciB0aGUgbW9zdCByZWNlbnQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW9wcm9maWxlLW9wcm9maWxldWktb25saW5lIj4KKyAgICAgICAgICAgICAgICA8dGl0bGU+T25saW5lIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIE9Qcm9maWxlIGluIG9ubGluZSBtb2RlIGFzc3VtZXMgYSB3b3JraW5nIG5ldHdvcmsgY29ubmVjdGlvbiB3aXRoIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBjb25uZWN0aW9uLCB5b3UganVzdCBuZWVkIHRvIHJ1biAib3Byb2ZpbGUtc2VydmVyIiBvbiB0aGUgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBPUHJvZmlsZSBsaXN0ZW5zIG9uIHBvcnQgNDIyNC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgcG9ydCB1c2luZyB0aGUgPGZpbGVuYW1lPi0tcG9ydDwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgcHJvZ3JhbSBpcyBjYWxsZWQgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IGFuZCBpdHMgVUkgaXMgcmVsYXRpdmVseQorICAgICAgICAgICAgICAgICAgICBzdHJhaWdodCBmb3J3YXJkLgorICAgICAgICAgICAgICAgICAgICBZb3UgYWNjZXNzIGtleSBmdW5jdGlvbmFsaXR5IHRocm91Z2ggdGhlIGJ1dHRvbnMgb24gdGhlIHRvb2xiYXIsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGFyZSBkdXBsaWNhdGVkIGluIHRoZSBtZW51cy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGJ1dHRvbnM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbm5lY3Q6PC9lbXBoYXNpcz4gQ29ubmVjdHMgdG8gdGhlIHJlbW90ZSBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzdXBwbHkgdGhlIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRpc2Nvbm5lY3Q6PC9lbXBoYXNpcz4gRGlzY29ubmVjdHMgZnJvbSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydDo8L2VtcGhhc2lzPiBTdGFydHMgcHJvZmlsaW5nIG9uIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0b3A6PC9lbXBoYXNpcz4gU3RvcHMgcHJvZmlsaW5nIG9uIHRoZSBkZXZpY2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRzIHRoZSBkYXRhIHRvIHRoZSBsb2NhbCBob3N0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3BwaW5nIHRoZSBwcm9maWxlciBnZW5lcmF0ZXMgdGhlIHByb2ZpbGUgYW5kIGRpc3BsYXlzIGl0IGluIHRoZSB2aWV3ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvd25sb2FkOjwvZW1waGFzaXM+IERvd25sb2FkcyB0aGUgZGF0YSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBhbmQgZ2VuZXJhdGVzIHRoZSBwcm9maWxlLCB3aGljaCBhcHBlYXJzIGluIHRoZSB2aWV3ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlc2V0OjwvZW1waGFzaXM+IFJlc2V0cyB0aGUgc2FtcGxlIGRhdGEgb24gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldHRpbmcgdGhlIGRhdGEgcmVtb3ZlcyBzYW1wbGUgaW5mb3JtYXRpb24gY29sbGVjdGVkIGZyb20gcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZyBydW5zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IHJlc2V0IHRoZSBkYXRhIGlmIHlvdSBkbyBub3Qgd2FudCB0byBpbmNsdWRlIG9sZCBzYW1wbGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNhdmU6PC9lbXBoYXNpcz4gU2F2ZXMgdGhlIGRhdGEgZG93bmxvYWRlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0byBhbm90aGVyIGRpcmVjdG9yeSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW46PC9lbXBoYXNpcz4gTG9hZHMgcHJldmlvdXNseSBzYXZlZCBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsaWVudCBkb3dubG9hZHMgdGhlIGNvbXBsZXRlIHByb2ZpbGUgYXJjaGl2ZSBmcm9tCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgdG8gdGhlIGhvc3QgZm9yIHByb2Nlc3NpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJjaGl2ZSBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1wbGUgZGF0YSwgdGhlIG9iamVjdCBmaWxlcywKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG9iamVjdCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFyY2hpdmUgaXMgdGhlbiBjb252ZXJ0ZWQgdXNpbmcgdGhlIDxmaWxlbmFtZT5vcGFyY2hjb252PC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCB1c2VzIDxmaWxlbmFtZT5vcGltcG9ydDwvZmlsZW5hbWU+IHRvIGNvbnZlcnQgdGhlIGFyY2hpdmUgZnJvbQorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvd25sb2FkZWQgYXJjaGl2ZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGFuZCBhcmUgY2xlYXJlZCB1cCB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciBpbiB1c2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIHBlcmZvcm0ga2VybmVsIHByb2ZpbGluZywgeW91IG5lZWQgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZSB0aGF0IG1hdGNoZXMgdGhlIHJ1bm5pbmcga2VybmVsIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHNvdXJjZSBkaXJlY3RvcnksIHRoYXQgZmlsZSBpcyB1c3VhbGx5IGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ib290L3ZtbGludXgtPHJlcGxhY2VhYmxlPmtlcm5lbHZlcnNpb248L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LCB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmtlcm5lbHZlcnNpb248L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyBzZXBhcmF0ZSA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZvciBlYWNoIGtlcm5lbCBpdCBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGl0IHNob3VsZCBqdXN0IGJlIGEgcXVlc3Rpb24gb2YgbWFraW5nIHN1cmUgYSBtYXRjaGluZyBwYWNrYWdlIGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCAoZS5nLiA8ZmlsZW5hbWU+b3BrZyBpbnN0YWxsIGtlcm5lbC12bWxpbnV4PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGludG8gZGV2ZWxvcG1lbnQgYW5kIHByb2ZpbGluZyBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgYWxvbmdzaWRlIE9Qcm9maWxlLgorICAgICAgICAgICAgICAgICAgICBBIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGV4aXN0cyB3aXRoaW4gdGhlIE9Qcm9maWxlVUkgc2V0dGluZ3MgcGFnZSB0aGF0IHlvdSBjYW4gdXNlIHRvCisgICAgICAgICAgICAgICAgICAgIGVudGVyIHRoZSBsb2NhdGlvbiBvZiB0aGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXYWl0aW5nIGZvciBkZWJ1ZyBzeW1ib2xzIHRvIHRyYW5zZmVyIGZyb20gdGhlIGRldmljZSBjYW4gYmUgc2xvdywgYW5kIGl0CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhbHdheXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IGhhdmUgdGhlbSBvbiB0aGUgZGV2aWNlIGZvciBPUHJvZmlsZSB1c2UuCisgICAgICAgICAgICAgICAgICAgIEFsbCB0aGF0IGlzIG5lZWRlZCBpcyBhIGNvcHkgb2YgdGhlIGZpbGVzeXN0ZW0gd2l0aCB0aGUgZGVidWcgc3ltYm9scyBwcmVzZW50CisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB2aWV3ZXIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgIjxsaW5rIGxpbmtlbmQ9J3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGInPkxhdW5jaCBHREIgb24gdGhlIEhvc3QgQ29tcHV0ZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGNvdmVycyBob3cgdG8gY3JlYXRlIHN1Y2ggYSBkaXJlY3Rvcnkgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZCBob3cgdG8gdXNlIHRoZSBPUHJvZmlsZVVJIFNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgIERpYWxvZyB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgdGhlIGRpcmVjdG9yeSwgaXQgd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGZpbGUgY2hlY2tzdW1zCisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRob3NlIG9uIHRoZSBzeXN0ZW0geW91IGFyZSBwcm9maWxpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS1vcHJvZmlsZXVpLW9mZmxpbmUiPgorICAgICAgICAgICAgICAgIDx0aXRsZT5PZmZsaW5lIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIG5ldHdvcmsgYWNjZXNzIHRvIHRoZSB0YXJnZXQgaXMgdW5hdmFpbGFibGUsIHlvdSBjYW4gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgYW4gYXJjaGl2ZSBmb3IgcHJvY2Vzc2luZyBpbiA8ZmlsZW5hbWU+b3Byb2ZpbGUtdmlld2VyPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIG9wY29udHJvbCAtLXJlc2V0CisgICAgICMgb3Bjb250cm9sIC0tc3RhcnQgLS1zZXBhcmF0ZT1saWIgLS1uby12bWxpbnV4IC1jIDUKKyAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4KKyAgICAgW2RvIHdoYXRldmVyIGlzIGJlaW5nIHByb2ZpbGVkXQorICAgICAgICAgICAgLgorICAgICAgICAgICAgLgorICAgICAjIG9wY29udHJvbCAtLXN0b3AKKyAgICAgIyBvcGFyY2hpdmUgLW8gbXlfYXJjaGl2ZQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCA8ZmlsZW5hbWU+bXlfYXJjaGl2ZTwvZmlsZW5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXZlIGRpcmVjdG9yeSB3aGVyZSB5b3Ugd291bGQgbGlrZSB0aGUgcHJvZmlsZSBhcmNoaXZlIHRvIGJlIGtlcHQuCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgeW91IGNhbiBjb3B5IGl0IHRvIGFub3RoZXIgaG9zdCBhbmQgbG9hZCBpdAorICAgICAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+b3Byb2ZpbGUtdmlld2VyPC9maWxlbmFtZT4gb3BlbiBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgICAgICBJZiBuZWNlc3NhcnksIHRoZSBhcmNoaXZlIGlzIGNvbnZlcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+CisgICAgICAgIDx0aXRsZT5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgb2YgdGhlIGNvbmNlcm5zIGZvciBhIGRldmVsb3BtZW50IG9yZ2FuaXphdGlvbiB1c2luZyBvcGVuIHNvdXJjZQorICAgICAgICAgICAgc29mdHdhcmUgaXMgaG93IHRvIG1haW50YWluIGNvbXBsaWFuY2Ugd2l0aCB2YXJpb3VzIG9wZW4gc291cmNlCisgICAgICAgICAgICBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHByb2R1Y3QuCisgICAgICAgICAgICBXaGlsZSB0aGlzIHNlY3Rpb24gZG9lcyBub3QgcHJvdmlkZSBsZWdhbCBhZHZpY2Ugb3IKKyAgICAgICAgICAgIGNvbXByZWhlbnNpdmVseSBjb3ZlciBhbGwgc2NlbmFyaW9zLCBpdCBkb2VzCisgICAgICAgICAgICBwcmVzZW50IG1ldGhvZHMgdGhhdCB5b3UgY2FuIHVzZSB0bworICAgICAgICAgICAgYXNzaXN0IHlvdSBpbiBtZWV0aW5nIHRoZSBjb21wbGlhbmNlIHJlcXVpcmVtZW50cyBkdXJpbmcgYSBzb2Z0d2FyZQorICAgICAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2l0aCBodW5kcmVkcyBvZiBkaWZmZXJlbnQgb3BlbiBzb3VyY2UgbGljZW5zZXMgdGhhdCB0aGUgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgdHJhY2tzLCBpdCBpcyBkaWZmaWN1bHQgdG8ga25vdyB0aGUgcmVxdWlyZW1lbnRzIG9mIGVhY2gKKyAgICAgICAgICAgIGFuZCBldmVyeSBsaWNlbnNlLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgbWFqb3IgRkxPU1MgbGljZW5zZXMgY2FuIGJlZ2luCisgICAgICAgICAgICB0byBiZSBjb3ZlcmVkIGJ5CisgICAgICAgICAgICBhc3N1bWluZyB0aGF0IHRocmVlIG1haW4gYXJlYXMgb2YgY29uY2VybiBleGlzdDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNvdXJjZSBjb2RlIG11c3QgYmUgcHJvdmlkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxpY2Vuc2UgdGV4dCBmb3IgdGhlIHNvZnR3YXJlIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbXBpbGF0aW9uIHNjcmlwdHMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIG11c3QgYmUgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBUaGVyZSBhcmUgb3RoZXIgcmVxdWlyZW1lbnRzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhlc2UKKyAgICAgICAgICAgIHRocmVlIGFuZCB0aGUgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uCisgICAgICAgICAgICAoZS5nLiB0aGUgbWVjaGFuaXNtIHRocm91Z2ggd2hpY2ggc291cmNlIGNvZGUgaXMgZGlzdHJpYnV0ZWQpLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBkaWZmZXJlbnQgb3JnYW5pemF0aW9ucyBoYXZlIGRpZmZlcmVudCBtZXRob2RzIG9mIGNvbXBseWluZyB3aXRoCisgICAgICAgICAgICBvcGVuIHNvdXJjZSBsaWNlbnNpbmcsIHRoaXMgc2VjdGlvbiBpcyBub3QgbWVhbnQgdG8gaW1wbHkgdGhhdAorICAgICAgICAgICAgdGhlcmUgaXMgb25seSBvbmUgc2luZ2xlIHdheSB0byBtZWV0IHlvdXIgY29tcGxpYW5jZSBvYmxpZ2F0aW9ucywKKyAgICAgICAgICAgIGJ1dCByYXRoZXIgdG8gZGVzY3JpYmUgb25lIG1ldGhvZCBvZiBhY2hpZXZpbmcgY29tcGxpYW5jZS4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBtZXRob2RzIHN1cHBvcnRlZCB0byBtZWV0IHRoZQorICAgICAgICAgICAgcHJldmlvdXNseSBtZW50aW9uZWQgdGhyZWUgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgT25jZSB5b3UgdGFrZSBzdGVwcyB0byBtZWV0IHRoZXNlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgIGFuZCBwcmlvciB0byByZWxlYXNpbmcgaW1hZ2VzLCBzb3VyY2VzLCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSwKKyAgICAgICAgICAgIHlvdSBzaG91bGQgYXVkaXQgYWxsIGFydGlmYWN0cyB0byBlbnN1cmUgY29tcGxldGVuZXNzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZ2VuZXJhdGVzIGEgbGljZW5zZSBtYW5pZmVzdCBkdXJpbmcKKyAgICAgICAgICAgICAgICBpbWFnZSBjcmVhdGlvbiB0aGF0IGlzIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+JHtERVBMT1lfRElSfS9saWNlbnNlcy88cmVwbGFjZWFibGU+aW1hZ2VfbmFtZS1kYXRlc3RhbXA8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gYXNzaXN0IHdpdGggYW55IGF1ZGl0cy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctdGhlLXNvdXJjZS1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgdGhlIFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29tcGxpYW5jZSBhY3Rpdml0aWVzIHNob3VsZCBiZWdpbiBiZWZvcmUgeW91IGdlbmVyYXRlIHRoZQorICAgICAgICAgICAgICAgIGZpbmFsIGltYWdlLgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3Ugc2hvdWxkIGxvb2sgYXQgaXMgdGhlIHJlcXVpcmVtZW50IHRoYXQKKyAgICAgICAgICAgICAgICB0b3BzIHRoZSBsaXN0IGZvciBtb3N0IGNvbXBsaWFuY2UgZ3JvdXBzIC0gcHJvdmlkaW5nCisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgYSBmZXcgd2F5cyBvZiBtZWV0aW5nIHRoaXMKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIG9mIHRoZSBlYXNpZXN0IHdheXMgdG8gbWVldCB0aGlzIHJlcXVpcmVtZW50IGlzCisgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSB0aGUgZW50aXJlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCwgaG93ZXZlciwgaGFzIGEgZmV3IGlzc3Vlcy4KKyAgICAgICAgICAgICAgICBUaGUgbW9zdCBvYnZpb3VzIGlzIHRoZSBzaXplIG9mIHRoZSBkaXJlY3Rvcnkgc2luY2UgaXQgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICBhbGwgc291cmNlcyB1c2VkIGluIHRoZSBidWlsZCBhbmQgbm90IGp1c3QgdGhlIHNvdXJjZSB1c2VkIGluCisgICAgICAgICAgICAgICAgdGhlIHJlbGVhc2VkIGltYWdlLgorICAgICAgICAgICAgICAgIEl0IHdpbGwgaW5jbHVkZSB0b29sY2hhaW4gc291cmNlLCBhbmQgb3RoZXIgYXJ0aWZhY3RzLCB3aGljaAorICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBub3QgZ2VuZXJhbGx5IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIG1vcmUgc2VyaW91cyBpc3N1ZSBmb3IgbW9zdCBjb21wYW5pZXMgaXMgYWNjaWRlbnRhbAorICAgICAgICAgICAgICAgIHJlbGVhc2Ugb2YgcHJvcHJpZXRhcnkgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYW4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hcmNoaXZlcic+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGhlbHAgYXZvaWQgc29tZSBvZiB0aGVzZSBjb25jZXJucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBlbXBsb3kgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IG9yIHRoZQorICAgICAgICAgICAgICAgIGFyY2hpdmVyIGNsYXNzLCB5b3UgbmVlZCB0byBkZWNpZGUgaG93IHlvdSBjaG9vc2UgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBUaGUgc291cmNlIGFyY2hpdmVyIGNsYXNzIGNhbiBnZW5lcmF0ZSB0YXJiYWxscyBhbmQgU1JQTXMKKyAgICAgICAgICAgICAgICBhbmQgY2FuIGNyZWF0ZSB0aGVtIHdpdGggdmFyaW91cyBsZXZlbHMgb2YgY29tcGxpYW5jZSBpbiBtaW5kLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmUgd2F5IG9mIGRvaW5nIHRoaXMgKGJ1dCBjZXJ0YWlubHkgbm90IHRoZSBvbmx5IHdheSkgaXMgdG8KKyAgICAgICAgICAgICAgICByZWxlYXNlIGp1c3QgdGhlIHNvdXJjZSBhcyBhIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJhcmNoaXZlciIKKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHlvdXIgaW1hZ2UsIHRoZSBzb3VyY2UgZnJvbSBhbGwKKyAgICAgICAgICAgICAgICByZWNpcGVzIHRoYXQgZGVwbG95IHBhY2thZ2VzIHRvIHRoZSBpbWFnZSBpcyBwbGFjZWQgd2l0aGluCisgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUi9zb3VyY2VzPC9maWxlbmFtZT4gYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciBlYWNoIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBSZWxlYXNpbmcgdGhlIGVudGlyZSBkaXJlY3RvcnkgZW5hYmxlcyB5b3UgdG8gY29tcGx5IHdpdGgKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgY29uY2VybmluZyBwcm92aWRpbmcgdGhlIHVubW9kaWZpZWQgc291cmNlLgorICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIHNpemUgb2YgdGhlIGRpcmVjdG9yeSBjYW4KKyAgICAgICAgICAgICAgICBnZXQgbGFyZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgd2F5IHRvIGhlbHAgbWl0aWdhdGUgdGhlIHNpemUgaXNzdWUgaXMgdG8gb25seSByZWxlYXNlCisgICAgICAgICAgICAgICAgdGFyYmFsbHMgZm9yIGxpY2Vuc2VzIHRoYXQgcmVxdWlyZSB0aGUgcmVsZWFzZSBvZgorICAgICAgICAgICAgICAgIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBMZXQgdXMgYXNzdW1lIHlvdSBhcmUgb25seSBjb25jZXJuZWQgd2l0aCBHUEwgY29kZSBhcworICAgICAgICAgICAgICAgIGlkZW50aWZpZWQgd2l0aCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBwb2t5L2J1aWxkL3RtcC9kZXBsb3kvc291cmNlcworICAgICAkIG1rZGlyIH4vZ3BsX3NvdXJjZV9yZWxlYXNlCisgICAgICQgZm9yIGRpciBpbiAqLypHUEwqOyBkbyBjcCAtciAkZGlyIH4vZ3BsX3NvdXJjZV9yZWxlYXNlOyBkb25lCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBjb3VsZCBjcmVhdGUgYSB0YXJiYWxsIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdwbF9zb3VyY2VfcmVsZWFzZTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICBwcm92aWRlIHRoYXQgdG8gdGhlIGVuZCB1c2VyLgorICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdvdWxkIGJlIGEgc3RlcCB0b3dhcmQgYWNoaWV2aW5nIGNvbXBsaWFuY2UKKyAgICAgICAgICAgICAgICB3aXRoIHNlY3Rpb24gM2Egb2YgR1BMdjIgYW5kIHdpdGggc2VjdGlvbiA2IG9mIEdQTHYzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3ZpZGluZy1saWNlbnNlLXRleHQnPgorICAgICAgICAgICAgPHRpdGxlPlByb3ZpZGluZyBMaWNlbnNlIFRleHQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmUgcmVxdWlyZW1lbnQgdGhhdCBpcyBvZnRlbiBvdmVybG9va2VkIGlzIGluY2x1c2lvbgorICAgICAgICAgICAgICAgIG9mIGxpY2Vuc2UgdGV4dC4KKyAgICAgICAgICAgICAgICBUaGlzIHJlcXVpcmVtZW50IGFsc28gbmVlZHMgdG8gYmUgZGVhbHQgd2l0aCBwcmlvciB0bworICAgICAgICAgICAgICAgIGdlbmVyYXRpbmcgdGhlIGZpbmFsIGltYWdlLgorICAgICAgICAgICAgICAgIFNvbWUgbGljZW5zZXMgcmVxdWlyZSB0aGUgbGljZW5zZSB0ZXh0IHRvIGFjY29tcGFueQorICAgICAgICAgICAgICAgIHRoZSBiaW5hcnkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2hpZXZlIHRoaXMgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPUFlfTElDX01BTklGRVNUID0gIjEiCisgICAgIENPUFlfTElDX0RJUlMgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWRkaW5nIHRoZXNlIHN0YXRlbWVudHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBlbnN1cmVzCisgICAgICAgICAgICAgICAgdGhhdCB0aGUgbGljZW5zZXMgY29sbGVjdGVkIGR1cmluZyBwYWNrYWdlIGdlbmVyYXRpb24KKyAgICAgICAgICAgICAgICBhcmUgaW5jbHVkZWQgb24geW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICBBcyB0aGUgc291cmNlIGFyY2hpdmVyIGhhcyBhbHJlYWR5IGFyY2hpdmVkIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgIHVubW9kaWZpZWQgc291cmNlIHRoYXQgY29udGFpbnMgdGhlIGxpY2Vuc2UgZmlsZXMsCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIGhhdmUgYWxyZWFkeSBtZXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgaW5jbHVzaW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gd2l0aCBzb3VyY2UgYXMgZGVmaW5lZCBieSB0aGUgR1BMCisgICAgICAgICAgICAgICAgYW5kIG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2VzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3ZpZGluZy1jb21waWxhdGlvbi1zY3JpcHRzLWFuZC1zb3VyY2UtY29kZS1tb2RpZmljYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgQ29tcGlsYXRpb24gU2NyaXB0cyBhbmQgU291cmNlIENvZGUgTW9kaWZpY2F0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYWRkcmVzc2VkIGFsbCB3ZSBuZWVkIHRvIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBwcmlvciB0byBnZW5lcmF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGUgbmV4dCB0d28gcmVxdWlyZW1lbnRzIGFyZSBhZGRyZXNzZWQgZHVyaW5nIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIHBhY2thZ2luZyBvZiB0aGUgcmVsZWFzZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgcmVsZWFzaW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYW5kIHRoZSBsYXllcnMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLCB5b3Ugd2lsbCBiZSBwcm92aWRpbmcgYm90aAorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uIHNjcmlwdHMgYW5kIHRoZSBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zIGluIG9uZQorICAgICAgICAgICAgICAgIHN0ZXAuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHRoZSBkZXBsb3ltZW50IHRlYW0gaGFzIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtbGF5ZXJzJz5CU1AgbGF5ZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZCBhIGRpc3RybyBsYXllciwgYW5kIHRob3NlIHRob3NlIGxheWVycyBhcmUgdXNlZCB0byBwYXRjaCwKKyAgICAgICAgICAgICAgICBjb21waWxlLCBwYWNrYWdlLCBvciBtb2RpZnkgKGluIGFueSB3YXkpIGFueSBvcGVuIHNvdXJjZQorICAgICAgICAgICAgICAgIHNvZnR3YXJlIGluY2x1ZGVkIGluIHlvdXIgcmVsZWFzZWQgaW1hZ2VzLCB5b3UKKyAgICAgICAgICAgICAgICBtaWdodCBiZSByZXF1aXJlZCB0byB0byByZWxlYXNlIHRob3NlIGxheWVycyB1bmRlciBzZWN0aW9uIDMgb2YKKyAgICAgICAgICAgICAgICBHUEx2MiBvciBzZWN0aW9uIDEgb2YgR1BMdjMuCisgICAgICAgICAgICAgICAgT25lIHdheSBvZiBkb2luZyB0aGF0IGlzIHdpdGggYSBjbGVhbgorICAgICAgICAgICAgICAgIGNoZWNrb3V0IG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBsYXllcnMgdXNlZAorICAgICAgICAgICAgICAgIGR1cmluZyB5b3VyIGJ1aWxkLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgYnVpbHQgdXNpbmcgdGhlICZESVNUUk9fTkFNRTsgYnJhbmNoIG9mIHRoZSBwb2t5IHJlcG8KKyAgICAgJCBnaXQgY2xvbmUgLWIgJkRJU1RST19OQU1FOyBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICQgY2QgcG9reQorICAgICAjIFdlIGJ1aWx0IHVzaW5nIHRoZSByZWxlYXNlX2JyYW5jaCBmb3Igb3VyIGxheWVycworICAgICAkIGdpdCBjbG9uZSAtYiByZWxlYXNlX2JyYW5jaCBnaXQ6Ly9naXQubXljb21wYW55LmNvbS9tZXRhLW15LWJzcC1sYXllcgorICAgICAkIGdpdCBjbG9uZSAtYiByZWxlYXNlX2JyYW5jaCBnaXQ6Ly9naXQubXljb21wYW55LmNvbS9tZXRhLW15LXNvZnR3YXJlLWxheWVyCisgICAgICMgY2xlYW4gdXAgdGhlIC5naXQgcmVwb3MKKyAgICAgJCBmaW5kIC4gLW5hbWUgIi5naXQiIC10eXBlIGQgLWV4ZWMgcm0gLXJmIHt9IFw7CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uZSB0aGluZyBhIGRldmVsb3BtZW50IG9yZ2FuaXphdGlvbiBtaWdodCB3YW50IHRvIGNvbnNpZGVyCisgICAgICAgICAgICAgICAgZm9yIGVuZC11c2VyIGNvbnZlbmllbmNlIGlzIHRvIG1vZGlmeQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgIGVuc3VyZSB0aGF0IHdoZW4gdGhlIGVuZCB1c2VyIHV0aWxpemVzIHRoZSByZWxlYXNlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB0byBidWlsZCBhbiBpbWFnZSwgdGhlIGRldmVsb3BtZW50IG9yZ2FuaXphdGlvbidzCisgICAgICAgICAgICAgICAgbGF5ZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgYXV0b21hdGljYWxseToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgTEFZRVJfQ09ORl9WRVJTSU9OIGlzIGluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi9iYmxheWVycy5jb25mCisgICAgICMgY2hhbmdlcyBpbmNvbXBhdGlibHkKKyAgICAgTENPTkZfVkVSU0lPTiA9ICI2IgorCisgICAgIEJCUEFUSCA9ICIke1RPUERJUn0iCisgICAgIEJCRklMRVMgPz0gIiIKKworICAgICBCQkxBWUVSUyA/PSAiIFwKKyAgICAgICAjI09FUk9PVCMjL21ldGEgXAorICAgICAgICMjT0VST09UIyMvbWV0YS15b2N0byBcCisgICAgICAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgIyNPRVJPT1QjIy9tZXRhLW15bGF5ZXIgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQ3JlYXRpbmcgYW5kIHByb3ZpZGluZyBhbiBhcmNoaXZlIG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4gbGF5ZXJzCisgICAgICAgICAgICAgICAgKHJlY2lwZXMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBzbyBmb3J0aCkKKyAgICAgICAgICAgICAgICBlbmFibGVzIHlvdSB0byBtZWV0IHlvdXIKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgdG8gaW5jbHVkZSB0aGUgc2NyaXB0cyB0byBjb250cm9sIGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgb3JpZ2luYWwgc291cmNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXRoZS1lcnJvci1yZXBvcnRpbmctdG9vbCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgRXJyb3IgUmVwb3J0aW5nIFRvb2w8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGVycm9yIHJlcG9ydGluZyB0b29sIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgIHN1Ym1pdCBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIGJ1aWxkcyB0byBhIGNlbnRyYWwgZGF0YWJhc2UuCisgICAgICAgICAgICBPdXRzaWRlIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgYSB3ZWIgaW50ZXJmYWNlIHRvCisgICAgICAgICAgICBicm93c2UgZXJyb3JzLCB2aWV3IHN0YXRpc3RpY3MsIGFuZCBxdWVyeSBmb3IgZXJyb3JzLgorICAgICAgICAgICAgVGhlIHRvb2wgd29ya3MgdXNpbmcgYSBjbGllbnQtc2VydmVyIHN5c3RlbSB3aGVyZSB0aGUgY2xpZW50CisgICAgICAgICAgICBwb3J0aW9uIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgaW5zdGFsbGVkIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoZSBzZXJ2ZXIgcmVjZWl2ZXMgdGhlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBhbmQgc2F2ZXMgaXQgaW4gYQorICAgICAgICAgICAgZGF0YWJhc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbGl2ZSBpbnN0YW5jZSBvZiB0aGUgZXJyb3IgcmVwb3J0aW5nIHNlcnZlciBleGlzdHMgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZyc+PC91bGluaz4uCisgICAgICAgICAgICBUaGlzIHNlcnZlciBleGlzdHMgc28gdGhhdCB3aGVuIHlvdSB3YW50IHRvIGdldCBoZWxwIHdpdGgKKyAgICAgICAgICAgIGJ1aWxkIGZhaWx1cmVzLCB5b3UgY2FuIHN1Ym1pdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICAgICAgZmFpbHVyZSBlYXNpbHkgYW5kIHRoZW4gcG9pbnQgdG8gdGhlIFVSTCBpbiB5b3VyIGJ1ZyByZXBvcnQKKyAgICAgICAgICAgIG9yIHNlbmQgYW4gZW1haWwgdG8gdGhlIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIHlvdSBzZW5kIGVycm9yIHJlcG9ydHMgdG8gdGhpcyBzZXJ2ZXIsIHRoZSByZXBvcnRzIGJlY29tZQorICAgICAgICAgICAgICAgIHB1YmxpY2x5IHZpc2libGUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmctYW5kLXVzaW5nLXRoZS10b29sJz4KKyAgICAgICAgICAgIDx0aXRsZT5FbmFibGluZyBhbmQgVXNpbmcgdGhlIFRvb2w8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZXJyb3IgcmVwb3J0aW5nIHRvb2wgaXMgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBlbmFibGUgaXQgYnkgaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1yZXBvcnQtZXJyb3InPjxmaWxlbmFtZT5yZXBvcnQtZXJyb3I8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IHRvIHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAicmVwb3J0LWVycm9yIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGVycm9yIHJlcG9ydGluZyBmZWF0dXJlIHN0b3JlcyBpbmZvcm1hdGlvbiBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxPR19ESVInPjxmaWxlbmFtZT5MT0dfRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59L2Vycm9yLXJlcG9ydDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gc3BlY2lmeSBhIGRpcmVjdG9yeSB0byB1c2UgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVSUl9SRVBPUlRfRElSID0gInBhdGgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEVuYWJsaW5nIGVycm9yIHJlcG9ydGluZyBjYXVzZXMgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gY29sbGVjdAorICAgICAgICAgICAgICAgIHRoZSBlcnJvcnMgYW5kIHN0b3JlIHRoZW0gaW4gYSBmaWxlIGFzIHByZXZpb3VzbHkgZGVzY3JpYmVkLgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCBpbmNsdWRlcyBhCisgICAgICAgICAgICAgICAgY29tbWFuZCBhcyBwYXJ0IG9mIHRoZSBjb25zb2xlIG91dHB1dC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGUgY29tbWFuZCB0byBzZW5kIHRoZSBlcnJvciBmaWxlIHRvIHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBzZW5kcyB0aGUgZXJyb3JzIHRvIGFuCisgICAgICAgICAgICAgICAgdXBzdHJlYW0gc2VydmVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzZW5kLWVycm9yLXJlcG9ydCAvaG9tZS9icmFuZHVzYS9wcm9qZWN0L3Bva3kvYnVpbGQvdG1wL2xvZy9lcnJvci1yZXBvcnQvZXJyb3JfcmVwb3J0XzIwMTQwMzE0MTYxNy50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSBlcnJvcnMgYXJlIHNlbnQgdG8gYSBwdWJsaWMKKyAgICAgICAgICAgICAgICBkYXRhYmFzZSBhdmFpbGFibGUgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcnPjwvdWxpbms+LCB3aGljaCBpcworICAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIGVudGlyZSBjb21tdW5pdHkuCisgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHNlcnZlciwgeW91IGNhbiBzZW5kIHRoZSBlcnJvcnMKKyAgICAgICAgICAgICAgICB0byBhIGRpZmZlcmVudCBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNlbmQtZXJyb3ItcmVwb3J0IC0taGVscAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBzZW5kaW5nIHRoZSBlcnJvciBmaWxlLCB5b3UgYXJlIHByb21wdGVkIHRvIHJldmlldyB0aGUKKyAgICAgICAgICAgICAgICBkYXRhIGJlaW5nIHNlbnQgYXMgd2VsbCBhcyB0byBwcm92aWRlIGEgbmFtZSBhbmQgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICBlbWFpbCBhZGRyZXNzLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IHNhdGlzZnkgdGhlc2UgcHJvbXB0cywgdGhlIGNvbW1hbmQgcmV0dXJucyBhIGxpbmsKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIGVudHJ5IGluIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaGVyZSBpcyBhIHR5cGljYWwgbGluazoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9lcnJvcnMueW9jdG9wcm9qZWN0Lm9yZy9FcnJvcnMvRGV0YWlscy85NTIyLworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdGhlIGxpbmsgdGFrZXMgeW91IHRvIGEgd2ViIGludGVyZmFjZSB3aGVyZSB5b3UgY2FuCisgICAgICAgICAgICAgICAgYnJvd3NlLCBxdWVyeSB0aGUgZXJyb3JzLCBhbmQgdmlldyBzdGF0aXN0aWNzLgorICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkaXNhYmxpbmctdGhlLXRvb2wnPgorICAgICAgICAgICAgPHRpdGxlPkRpc2FibGluZyB0aGUgVG9vbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGRpc2FibGUgdGhlIGVycm9yIHJlcG9ydGluZyBmZWF0dXJlLCBzaW1wbHkgcmVtb3ZlIG9yIGNvbW1lbnQKKyAgICAgICAgICAgICAgICBvdXQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZnJvbSB0aGUgZW5kIG9mIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gInJlcG9ydC1lcnJvciIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC15b3VyLW93bi1lcnJvci1yZXBvcnRpbmctc2VydmVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIFlvdXIgT3duIEVycm9yIFJlcG9ydGluZyBTZXJ2ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzZXQgdXAgeW91ciBvd24gZXJyb3IgcmVwb3J0aW5nIHNlcnZlciwgeW91CisgICAgICAgICAgICAgICAgY2FuIG9idGFpbiB0aGUgY29kZSBmcm9tIHRoZSBHaXQgcmVwb3NpdG9yeSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2Vycm9yLXJlcG9ydC13ZWIvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbnMgb24gaG93IHRvIHNldCBpdCB1cCBhcmUgaW4gdGhlIFJFQURNRSBkb2N1bWVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CisKKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzZWEzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKworICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInZGV2LXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iQSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2I1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQKKwl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKwl4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IgorCXZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0CisJICBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCistLT4KKworICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rZXIub3V0cHV0LmluZGVudCIgc2VsZWN0PSIneWVzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLmZpcnN0LnNlY3Rpb25zIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBzZWxlY3Q9IjEwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idXNlLmlkLmFzLmZpbGVuYW1lIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1bGluay50YXJnZXQiIHNlbGVjdD0iJ19zZWxmJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJiYXNlLmRpciIgc2VsZWN0PSInaHRtbC9kZXYtbWFudWFsLyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJy4uL2Jvb2suY3NzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImVjbGlwc2UubWFuaWZlc3QiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNyZWF0ZS5wbHVnaW4ueG1sIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pbmRleCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzUwODgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwKQEAgLTAsMCArMSwyNDYgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLWludHJvJz4KKworPHRpdGxlPlRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J2Rldi1pbnRybyc+CisgICAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2VsY29tZSB0byB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwhCisgICAgICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IHRvCisgICAgICAgICAgICBkZXZlbG9wIGVtYmVkZGVkIExpbnV4IGltYWdlcyBhbmQgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgdGhhdAorICAgICAgICAgICAgcnVuIG9uIHRhcmdldGVkIGRldmljZXMuCisgICAgICAgICAgICBUaGUgbWFudWFsIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIGltYWdlLCBrZXJuZWwsIGFuZAorICAgICAgICAgICAgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIEJlY2F1c2UgbXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcyBtYW51YWwgaXMgZ2VuZXJhbCwgaXQKKyAgICAgICAgICAgIGNvbnRhaW5zIG1hbnkgcmVmZXJlbmNlcyB0byBvdGhlciBzb3VyY2VzIHdoZXJlIHlvdSBjYW4gZmluZCBtb3JlCisgICAgICAgICAgICBkZXRhaWwuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBmaW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIEdpdCwgcmVwb3NpdG9yaWVzLAorICAgICAgICAgICAgYW5kIG9wZW4gc291cmNlIGluIGdlbmVyYWwgaW4gbWFueSBwbGFjZXMgb24gdGhlIEludGVybmV0LgorICAgICAgICAgICAgQW5vdGhlciBleGFtcGxlIHNwZWNpZmljIHRvIHRoZSBZb2N0byBQcm9qZWN0IGlzIGhvdyB0byBxdWlja2x5CisgICAgICAgICAgICBzZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBhbmQgYnVpbGQgYW4gaW1hZ2UsIHdoaWNoIHlvdQorICAgICAgICAgICAgZmluZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGRvZXMsIGhvd2V2ZXIsIHByb3ZpZGUKKyAgICAgICAgICAgIGd1aWRhbmNlIGFuZCBleGFtcGxlcyBvbiBob3cgdG8gY2hhbmdlIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsCisgICAgICAgICAgICByZWNvbmZpZ3VyZSB0aGUga2VybmVsLCBhbmQgZGV2ZWxvcCBhbiBhcHBsaWNhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgIHBvcHVsYXIgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBjcmVhdGVzIGEgUG9reSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24gYnkgcHJvdmlkaW5nIGtleQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPi4KKyAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIEFuZ3N0cm9tLCB3aGljaCBoYXMgaGFkIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICBiYXNlZCBvbiB0aGUgWW9jdG8gUHJvamVjdCBzaW5jZSBpdHMgaW5jZXB0aW9uLgorICAgICAgICAgICAgT3RoZXIgZXhhbXBsZXMgaW5jbHVkZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbnMgbGlrZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vd2luZC1yaXZlci1zeXN0ZW1zJz5XaW5kIFJpdmVyIExpbnV4PC91bGluaz4sCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b2N0b3Byb2plY3Qub3JnL29yZ2FuaXphdGlvbi9tZW50b3ItZ3JhcGhpY3MnPk1lbnRvciBFbWJlZGRlZCBMaW51eDwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vZW5lYS1hYic+RU5FQSBMaW51eDwvdWxpbms+CisgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9lY29zeXN0ZW0vbWVtYmVyLW9yZ2FuaXphdGlvbnMnPm90aGVyczwvdWxpbms+LgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmcteW91ci1vd24tZGlzdHJpYnV0aW9uJz5DcmVhdGluZyBZb3VyIE93biBEaXN0cmlidXRpb248L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3aGF0LXRoaXMtbWFudWFsLXByb3ZpZGVzJz4KKyAgICAgICAgPHRpdGxlPldoYXQgVGhpcyBNYW51YWwgUHJvdmlkZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB3aGF0IHlvdSBjYW4gZ2V0IGZyb20gdGhpcyBtYW51YWw6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiB0aGF0IGxldHMgeW91IGdldCBzZXQKKyAgICAgICAgICAgICAgICAgICAgdXAgdG8gZGV2ZWxvcCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5mb3JtYXRpb24gdG8gaGVscCBkZXZlbG9wZXJzIHdobyBhcmUgbmV3IHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBhbmQgdG8gdGhlIGRpc3RyaWJ1dGVkIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgc3lzdGVtIEdpdCwgd2hpY2ggdGhlIFlvY3RvIFByb2plY3QgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFuIHVuZGVyc3RhbmRpbmcgb2YgY29tbW9uIGVuZC10by1lbmQKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbW9kZWxzIGFuZCB0YXNrcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5mb3JtYXRpb24gYWJvdXQgY29tbW9uIGRldmVsb3BtZW50IHRhc2tzCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYWxseSB1c2VkIGR1cmluZyBpbWFnZSBkZXZlbG9wbWVudCBmb3IKKyAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGludGVncmF0aW9uIG9mIHRoZSBRdWlja0VNVWxhdG9yIChRRU1VKSwgd2hpY2ggbGV0cyB5b3UKKyAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGUgcnVubmluZyBvbiBoYXJkd2FyZSBhbiBpbWFnZSB5b3UgaGF2ZSBidWlsdCB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1hbnkgcmVmZXJlbmNlcyB0byBvdGhlciBzb3VyY2VzIG9mIHJlbGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3aGF0LXRoaXMtbWFudWFsLWRvZXMtbm90LXByb3ZpZGUnPgorICAgICAgICA8dGl0bGU+V2hhdCB0aGlzIE1hbnVhbCBEb2VzIE5vdCBQcm92aWRlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsIHdpbGwgbm90IGdpdmUgeW91IHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RlcC1ieS1zdGVwIGluc3RydWN0aW9ucyB3aGVuIHRob3NlIGluc3RydWN0aW9ucyBleGlzdCBpbiBvdGhlciBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IGRvY3VtZW50YXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlIGNvbnRhaW5zIGRldGFpbGVkCisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucyBvbiBob3cgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNpbnN0YWxsaW5nLXRoZS1hZHQnPkFEVCBJbnN0YWxsZXI8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgdXNlZCB0byBzZXQgdXAgYSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlZmVyZW5jZSBtYXRlcmlhbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHR5cGUgb2YgbWF0ZXJpYWwgcmVzaWRlcyBpbiBhbiBhcHByb3ByaWF0ZSByZWZlcmVuY2UgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3lzdGVtIHZhcmlhYmxlcyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsnPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvdWxpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGV0YWlsZWQgcHVibGljIGluZm9ybWF0aW9uIHRoYXQgaXMgbm90IHNwZWNpZmljIHRvIHRoZSBZb2N0byBQcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBleGhhdXN0aXZlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgR2l0IGlzIGNvdmVyZWQgYmV0dGVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIEludGVybmV0IHRoYW4gaW4gdGhpcyBtYW51YWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvdGhlci1pbmZvcm1hdGlvbic+CisgICAgICAgIDx0aXRsZT5PdGhlciBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHRoaXMgbWFudWFsIHByZXNlbnRzIG92ZXJ2aWV3IGluZm9ybWF0aW9uIGZvciBtYW55IGRpZmZlcmVudAorICAgICAgICAgICAgdG9waWNzLCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gaXMgcmVjb21tZW5kZWQgZm9yIGZ1bGwKKyAgICAgICAgICAgIGNvbXByZWhlbnNpb24uCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgcHJlc2VudHMgb3RoZXIgc291cmNlcyBvZiBpbmZvcm1hdGlvbiB5b3UgbWlnaHQgZmluZCBoZWxwZnVsOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8L2VtcGhhc2lzPiBUaGUgaG9tZSBwYWdlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBsb3RzIG9mIGluZm9ybWF0aW9uIG9uIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgbGlua3MgdG8gc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNob3J0IGRvY3VtZW50IGxldHMgeW91IGdldCBzdGFydGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYW5kIHF1aWNrbHkgYmVnaW4gYnVpbGRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBpcyBhIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBndWlkZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggaXMgYmFzZWQgb24gQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgIlBva3kiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZ3VpZGUgcHJvdmlkZXMgaW5mb3JtYXRpb24gdGhhdCBsZXRzIHlvdSBnZXQgZ29pbmcgd2l0aCB0aGUgQXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBhbmQgc3RhbmQtYWxvbmUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyB0bworICAgICAgICAgICAgICAgICAgICBkZXZlbG9wIHByb2plY3RzIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGd1aWRlIGRlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgQlNQIGNvbXBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgIEhhdmluZyBhIGNvbW1vbmx5IHVuZGVyc3Rvb2Qgc3RydWN0dXJlIGVuY291cmFnZXMgc3RhbmRhcmRpemF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsnPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGRlc2NyaWJlcyBob3cgdG8gd29yayB3aXRoIExpbnV4IFlvY3RvIGtlcm5lbHMgYXMgd2VsbCBhcyBwcm92aWRlcyBhIGJpdAorICAgICAgICAgICAgICAgICAgICBvZiBjb25jZXB0dWFsIGluZm9ybWF0aW9uIG9uIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIFlvY3RvIExpbnV4IGtlcm5lbCB0cmVlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsnPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIHByZXNlbnRzIGEgc2V0IG9mIGNvbW1vbiBhbmQgZ2VuZXJhbGx5IHVzZWZ1bCB0cmFjaW5nIGFuZAorICAgICAgICAgICAgICAgICAgICBwcm9maWxpbmcgc2NoZW1lcyBhbG9uZyB3aXRoIHRoZWlyIGFwcGxpY2F0aW9ucyAoYXMgYXBwcm9wcmlhdGUpIHRvIGVhY2ggdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVE9BU1RfVVJMOyc+VG9hc3RlciBVc2VyIE1hbnVhbDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWFudWFsIGludHJvZHVjZXMgYW5kIGRlc2NyaWJlcyBob3cgdG8gc2V0IHVwIGFuZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlciwgd2hpY2ggaXMgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0J3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtc3lzdGVtLXRlcm0nPk9wZW5FbWJlZGRlZCBCdWlsZCBTeXN0ZW08L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9M1psT3UtZ0xzaDAnPgorICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERSBZb2N0byBQbHVnLWluPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBzdGVwLWJ5LXN0ZXAgaW5zdHJ1Y3Rpb25hbCB2aWRlbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRlbW9uc3RyYXRlcyBob3cgYW4gYXBwbGljYXRpb24gZGV2ZWxvcGVyIHVzZXMgWW9jdG8gUGx1Zy1pbiBmZWF0dXJlcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvRkFRJz5GQVE8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY29tbW9ubHkgYXNrZWQgcXVlc3Rpb25zIGFuZCB0aGVpciBhbnN3ZXJzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUkVMRUFTRV9OT1RFUzsnPlJlbGVhc2UgTm90ZXM8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcywgdXBkYXRlcyBhbmQga25vd24gaXNzdWVzIGZvciB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBIb2IncyBwcmltYXJ5IGdvYWwgaXMgdG8gZW5hYmxlIGEgdXNlciB0byBwZXJmb3JtIGNvbW1vbiB0YXNrcyBtb3JlIGVhc2lseS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvdG9hc3Rlcic+VG9hc3RlcjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFuIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSAoQVBJKSBhbmQgd2ViLWJhc2VkCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggdXNlcworICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLCB0aGF0IHJlcG9ydHMgYnVpbGQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2J1aWxkLWFwcGxpYW5jZSc+QnVpbGQgQXBwbGlhbmNlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSB2aXJ0dWFsIG1hY2hpbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHlvdSB0byBidWlsZCBhbmQgYm9vdCBhIGN1c3RvbSBlbWJlZGRlZCBMaW51eCBpbWFnZQorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHVzaW5nIGEgbm9uLUxpbnV4IGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPkJ1Z3ppbGxhPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1ZyB0cmFja2luZyBhcHBsaWNhdGlvbiB0aGUgWW9jdG8gUHJvamVjdCB1c2VzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LCB5b3Ugc2hvdWxkIHJlcG9ydCB0aGVtIHVzaW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBNYWlsaW5nIExpc3RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvIHN1YnNjcmliZSB0byB0aGUgWW9jdG8gUHJvamVjdCBtYWlsaW5nCisgICAgICAgICAgICAgICAgICAgIGxpc3RzLCBjbGljayBvbiB0aGUgZm9sbG93aW5nIFVSTHMgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIFlvY3RvIFByb2plY3QgRGlzY3Vzc2lvbnMgbWFpbGluZyBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3Bva3knPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgWW9jdG8gUHJvamVjdCBEaXNjdXNzaW9ucyBtYWlsaW5nIGxpc3QgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSAoUG9reSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8veW9jdG8tYW5ub3VuY2UnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbWFpbGluZyBsaXN0IHRvIHJlY2VpdmUgb2ZmaWNpYWwgWW9jdG8gUHJvamVjdCBhbm5vdW5jZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBZb2N0byBQcm9qZWN0IG1pbGVzdG9uZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8nPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGlzdGluZyBvZiBhbGwgcHVibGljIG1haWxpbmcgbGlzdHMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlzdHMueW9jdG9wcm9qZWN0Lm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkludGVybmV0IFJlbGF5IENoYXQgKElSQyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVHdvIElSQyBjaGFubmVscyBvbiBmcmVlbm9kZSBhcmUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGZvciBZb2N0byBQcm9qZWN0IGFuZCBQb2t5IGRpc2N1c3Npb25zOiA8ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4jcG9reTwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9qZWN0IGlzIHRoZSB1cHN0cmVhbSwgZ2VuZXJpYywgZW1iZWRkZWQgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdGhlIFlvY3RvIFByb2plY3QgZGVyaXZlcyBpdHMgYnVpbGQgc3lzdGVtIChQb2t5KQorICAgICAgICAgICAgICAgICAgICBhbmQgdG8gd2hpY2ggaXQgY29udHJpYnV0ZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy93aWtpL0JpdEJha2UnPkJpdEJha2U8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbCB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIHByb2Nlc3MgcHJvamVjdCBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDo8L3VsaW5rPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgY29tcHJlaGVuc2l2ZSBndWlkZSB0byB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhpcyBtYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL0luZGV4Lmh0bWwnPlF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFuIG9wZW4tc291cmNlIG1hY2hpbmUgZW11bGF0b3IgYW5kIHZpcnR1YWxpemVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW1vZGVsLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGRlZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLW1vZGVsLnhtbApAQCAtMCwwICsxLDI2MjQgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLW1vZGVsJz4KKworPHRpdGxlPkNvbW1vbiBEZXZlbG9wbWVudCBNb2RlbHM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBNYW55IGRldmVsb3BtZW50IG1vZGVscyBleGlzdCBmb3Igd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgVGhpcyBjaGFwdGVyIG92ZXJ2aWV3cyBzaW1wbGUgbWV0aG9kcyB0aGF0IHVzZSB0b29scyBwcm92aWRlZCBieSB0aGUKKyAgICBZb2N0byBQcm9qZWN0OgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3lzdGVtIERldmVsb3BtZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgU3lzdGVtIERldmVsb3BtZW50IGNvdmVycyBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICBhbmQga2VybmVsIG1vZGlmaWNhdGlvbiBvciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byBjcmVhdGUgYSBCU1AsIHNlZSB0aGUKKyAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgIEZvciBtb3JlIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCwKKyAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlciBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFVzZXIgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgY292ZXJzIGRldmVsb3BtZW50IG9mIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgIHRoYXQgeW91IGludGVuZCB0byBydW4gb24gdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gZm9yCisgICAgICAgICAgICAgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCwgc2VlIHRoZQorICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgRm9yIGEgc2ltcGxlIGV4YW1wbGUgb2YgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCB1c2luZworICAgICAgICAgICAgIHRoZSA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+RWNsaXBzZTwvdHJhZGVtYXJrPiBJREUsIHNlZSB0aGUKKyAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbGljYXRpb24tZGV2ZWxvcG1lbnQtd29ya2Zsb3cnPkFwcGxpY2F0aW9uCisgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgV29ya2Zsb3c8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZW1wb3JhcnkgU291cmNlIENvZGUgTW9kaWZpY2F0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgRGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgaXMgYSBjb252ZW5pZW50CisgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbW9kZWwgdG8gcXVpY2tseSBpdGVyYXRlIGFuZCBkZXZlbG9wIHRvd2FyZHMgYQorICAgICAgICAgICAgIHNvbHV0aW9uLgorICAgICAgICAgICAgIE9uY2UgeW91IGltcGxlbWVudCB0aGUgc29sdXRpb24sIHlvdSBzaG91bGQgb2YgY291cnNlIHRha2UKKyAgICAgICAgICAgICBzdGVwcyB0byBnZXQgdGhlIGNoYW5nZXMgdXBzdHJlYW0gYW5kIGFwcGxpZWQgaW4gdGhlIGFmZmVjdGVkCisgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1hZ2UgRGV2ZWxvcG1lbnQgdXNpbmcgVG9hc3Rlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvVG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL3RvYXN0ZXInPlRvYXN0ZXI8L3VsaW5rPgorICAgICAgICAgICAgIHRvIGJ1aWxkIGN1c3RvbSBvcGVyYXRpbmcgc3lzdGVtIGltYWdlcyB3aXRoaW4gdGhlIGJ1aWxkCisgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgVG9hc3RlciBwcm92aWRlcyBhbiBlZmZpY2llbnQgaW50ZXJmYWNlIHRvIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICB0aGF0IGFsbG93cyB5b3UgdG8gc3RhcnQgYnVpbGRzIGFuZCBleGFtaW5lIGJ1aWxkIHN0YXRpc3RpY3MuCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIERldmVsb3BtZW50IHVzaW5nIEhvYjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+CisgICAgICAgICAgICAgdG8gYnVpbGQgY3VzdG9tIG9wZXJhdGluZyBzeXN0ZW0gaW1hZ2VzIHdpdGhpbiB0aGUgYnVpbGQKKyAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICBIb2IgcHJvdmlkZXMgYW4gZWZmaWNpZW50IGludGVyZmFjZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGEgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gdG8gZWZmaWNpZW50bHkgZGVidWcKKyAgICAgICAgICAgICBjb21tYW5kcyBvciBzaW1wbHkgZWRpdCBwYWNrYWdlcy4KKyAgICAgICAgICAgICBXb3JraW5nIGluc2lkZSBhIGRldmVsb3BtZW50IHNoZWxsIGlzIGEgcXVpY2sgd2F5IHRvIHNldCB1cCB0aGUKKyAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQgdG8gd29yayBvbiBwYXJ0cyBvZiBhIHByb2plY3QuCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgIDwvaXRlbWl6ZWRsaXN0PgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nc3lzdGVtLWRldmVsb3BtZW50LW1vZGVsJz4KKyAgICA8dGl0bGU+U3lzdGVtIERldmVsb3BtZW50IFdvcmtmbG93PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTeXN0ZW0gZGV2ZWxvcG1lbnQgaW52b2x2ZXMgbW9kaWZpY2F0aW9uIG9yIGNyZWF0aW9uIG9mIGFuIGltYWdlIHRoYXQgeW91IHdhbnQgdG8gcnVuIG9uCisgICAgICAgIGEgc3BlY2lmaWMgaGFyZHdhcmUgdGFyZ2V0LgorICAgICAgICBVc3VhbGx5LCB3aGVuIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbWFnZSB0aGF0IHJ1bnMgb24gZW1iZWRkZWQgaGFyZHdhcmUsIHRoZSBpbWFnZSBkb2VzCisgICAgICAgIG5vdCByZXF1aXJlIHRoZSBzYW1lIG51bWJlciBvZiBmZWF0dXJlcyB0aGF0IGEgZnVsbC1mbGVkZ2VkIExpbnV4IGRpc3RyaWJ1dGlvbiBwcm92aWRlcy4KKyAgICAgICAgVGh1cywgeW91IGNhbiBjcmVhdGUgYSBtdWNoIHNtYWxsZXIgaW1hZ2UgdGhhdCBpcyBkZXNpZ25lZCB0byB1c2Ugb25seSB0aGUKKyAgICAgICAgZmVhdHVyZXMgZm9yIHlvdXIgcGFydGljdWxhciBoYXJkd2FyZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgc3lzdGVtIGRldmVsb3BtZW50IHdvcmtzIGluIHRoZSBZb2N0byBQcm9qZWN0LCB0aGlzIHNlY3Rpb24KKyAgICAgICAgY292ZXJzIHR3byB0eXBlcyBvZiBpbWFnZSBkZXZlbG9wbWVudDogIEJTUCBjcmVhdGlvbiBhbmQga2VybmVsIG1vZGlmaWNhdGlvbiBvcgorICAgICAgICBjb25maWd1cmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZlbG9waW5nLWEtYm9hcmQtc3VwcG9ydC1wYWNrYWdlLWJzcCc+CisgICAgICAgIDx0aXRsZT5EZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgQlNQIGlzIGEgY29sbGVjdGlvbiBvZiByZWNpcGVzIHRoYXQsIHdoZW4gYXBwbGllZCBkdXJpbmcgYSBidWlsZCwgcmVzdWx0cyBpbgorICAgICAgICAgICAgYW4gaW1hZ2UgdGhhdCB5b3UgY2FuIHJ1biBvbiBhIHBhcnRpY3VsYXIgYm9hcmQuCisgICAgICAgICAgICBUaHVzLCB0aGUgcGFja2FnZSB3aGVuIGNvbXBpbGVkIGludG8gdGhlIG5ldyBpbWFnZSwgc3VwcG9ydHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgYm9hcmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEZvciBhIGJyaWVmIGxpc3Qgb2YgdGVybXMgdXNlZCB3aGVuIGRlc2NyaWJpbmcgdGhlIGRldmVsb3BtZW50IHByb2Nlc3MgaW4gdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICBzZWUgdGhlICI8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXRlcm1zJz5Zb2N0byBQcm9qZWN0IFRlcm1zPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIGJhc2ljCisgICAgICAgICAgICBzdGVwcyB1c2VkIHRvIGNyZWF0ZSBhIEJTUCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyN1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5CU1AgVG9vbHM8L3VsaW5rPi4KKyAgICAgICAgICAgIEFsdGhvdWdoIG5vdCByZXF1aXJlZCBmb3IgQlNQIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gcmVwb3NpdG9yeSwgd2hpY2ggY29udGFpbnMKKyAgICAgICAgICAgIG1hbnkgQlNQcyBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QsIGlzIHBhcnQgb2YgdGhlIGV4YW1wbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIG5ldyBsYXllciB1c2luZyB0aGUgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgTmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBhbmQgbGlzdCBzdW1tYXJpemUgdGhlIEJTUCBjcmVhdGlvbiBnZW5lcmFsIHdvcmtmbG93LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPjogIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdGhlLWxpbnV4LWRpc3Rybyc+VGhlIExpbnV4IERpc3RyaWJ1dGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3BhY2thZ2VzJz5UaGUgQnVpbGQgSG9zdCBQYWNrYWdlczwvdWxpbms+IiBzZWN0aW9ucyBib3RoCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciByZXF1aXJlbWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3RhYmxpc2ggYSBsb2NhbCBjb3B5IG9mIHRoZSBwcm9qZWN0IGZpbGVzIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtPC9lbXBoYXNpcz46ICBZb3UgbmVlZCB0aGlzIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZQorICAgICAgICAgICAgICAgICAgICBEaXJlY3Rvcnk8L2xpbms+IGF2YWlsYWJsZSBvbiB5b3VyIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBIYXZpbmcgdGhlc2UgZmlsZXMgb24geW91ciBzeXN0ZW0gZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhbmQgdG8gdGhlIHRvb2xzIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCB0aGUgU291cmNlIERpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L2xpbms+IiBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgb24geW91ciBzeXN0ZW08L2VtcGhhc2lzPjogIEhhdmluZyBsb2NhbCBjb3BpZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlc2Ugc3VwcG9ydGVkIEJTUCBsYXllcnMgb24geW91ciBzeXN0ZW0gZ2l2ZXMgeW91CisgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0byBsYXllcnMgeW91IG1pZ2h0IGJlIGFibGUgdG8gYnVpbGQgb24gb3IgbW9kaWZ5CisgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQgdGhlc2UgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB5b3VyIG93biBCU1AgbGF5ZXIgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+PGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+PC91bGluaz4gc2NyaXB0PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIExheWVycyBhcmUgaWRlYWwgZm9yCisgICAgICAgICAgICAgICAgICAgIGlzb2xhdGluZyBhbmQgc3RvcmluZyB3b3JrIGZvciBhIGdpdmVuIHBpZWNlIG9mIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBBIGxheWVyIGlzIHJlYWxseSBqdXN0IGEgbG9jYXRpb24gb3IgYXJlYSBpbiB3aGljaCB5b3UgcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgSW4gZmFjdCwgYSBCU1AgaXMsIGluIGl0c2VsZiwgYSBzcGVjaWFsIHR5cGUgb2YgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzaW1wbGVzdCB3YXkgdG8gY3JlYXRlIGEgbmV3IEJTUCBsYXllciB0aGF0IGlzIGNvbXBsaWFudCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGlzIHRvIHVzZSB0aGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgc2NyaXB0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgTmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSB0aGF0IGlsbHVzdHJhdGVzIGEgbGF5ZXIgaXMgYW4gYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN1cHBvc2UgeW91IGFyZSBjcmVhdGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IGhhcyBsaWJyYXJ5IG9yIG90aGVyIGRlcGVuZGVuY2llcyBpbgorICAgICAgICAgICAgICAgICAgICBvcmRlciBmb3IgaXQgdG8gY29tcGlsZSBhbmQgcnVuLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGF5ZXIsIGluIHRoaXMgY2FzZSwgd291bGQgYmUgd2hlcmUgYWxsIHRoZSByZWNpcGVzIHRoYXQgZGVmaW5lIHRob3NlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBhcmUga2VwdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGtleSBwb2ludCBmb3IgYSBsYXllciBpcyB0aGF0IGl0IGlzIGFuIGlzb2xhdGVkIGFyZWEgdGhhdCBjb250YWlucworICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciB0aGUgcHJvamVjdCB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGtub3dzIGFib3V0LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQlNQIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IiBzZWN0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPkZpdmUgQlNQcyBleGlzdCB0aGF0IGFyZSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2U6IDxmaWxlbmFtZT5nZW5lcmljeDg2PC9maWxlbmFtZT4sIDxmaWxlbmFtZT5nZW5lcmljeDg2LTY0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iZWFnbGVib25lPC9maWxlbmFtZT4gKEFSTSksCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tcGM4MzE1ZTwvZmlsZW5hbWU+IChQb3dlclBDKSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5lZGdlcm91dGVyPC9maWxlbmFtZT4gKE1JUFMpLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIHRoZXNlIGZpdmUgQlNQcyBhcmUgbG9jYXRlZCBhbmQgZGlzcGVyc2VkCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBCU1AgbGF5ZXJzIGZvciBtYW55IHN1cHBvcnRlZCBCU1BzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIENyeXN0YWwgRm9yZXN0LCBFbWVubG93LCBGaXNoIFJpdmVyIElzbGFuZCAyLCBIYXN3ZWxsLAorICAgICAgICAgICAgICAgICAgICBKYXNwZXIgRm9yZXN0LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSBCU1BzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbiBhZGRpdGlvbmFsIEJTUCBsYXllcnMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1taW5ub3c8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtcmFzcGJlcnJ5cGk8L2ZpbGVuYW1lPi48L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IHNldCB1cCBhIGxheWVyIGZvciBhIG5ldyBCU1AsIHlvdSBzaG91bGQgZm9sbG93IGEgc3RhbmRhcmQgbGF5b3V0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGxheW91dCBpcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtZmlsZWxheW91dCc+RXhhbXBsZSBGaWxlc3lzdGVtIExheW91dDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcG1lbnQgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzdGFuZGFyZCBsYXlvdXQsIHlvdSB3aWxsIG5vdGljZSBhIHN1Z2dlc3RlZCBzdHJ1Y3R1cmUgZm9yIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBzdGFuZGFyZCBsYXlvdXQgZm9yIGEgQlNQIGJ5IGV4YW1pbmluZworICAgICAgICAgICAgICAgICAgICBhbnkgc3VwcG9ydGVkIEJTUCBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllciBpbnNpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNvdXJjZSBEaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0byB5b3VyIG5ldyBCU1AKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXI8L2VtcGhhc2lzPjogIFRoZSBzdGFuZGFyZCBCU1AgbGF5ZXIgc3RydWN0dXJlIG9yZ2FuaXplcyB0aGUgZmlsZXMgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZWRpdCBpbiA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGFuZCBzZXZlcmFsIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB3aXRoaW4gdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGlkZW50aWZ5IHdoZXJlIHlvdXIgbmV3IGxheWVyIGlzIG9uIHRoZSBsb2NhbCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgYW5kIGlkZW50aWZ5IHdoaWNoIGtlcm5lbCB5b3UgYXJlIGdvaW5nIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gc2NyaXB0LCB5b3UgYXJlIGFibGUgdG8gaW50ZXJhY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgbWFueSB0aGluZ3MgZm9yIHRoZSBCU1AgKGUuZy4ga2V5Ym9hcmQsIHRvdWNoc2NyZWVuLCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgcmVjaXBlIGNoYW5nZXMgdG8geW91ciBuZXcgQlNQIGxheWVyPC9lbXBoYXNpcz46ICBSZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyBpbmNsdWRlIGFsdGVyaW5nIHJlY2lwZXMgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcyksIHJlbW92aW5nCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgeW91IGRvIG5vdCB1c2UsIGFuZCBhZGRpbmcgbmV3IHJlY2lwZXMgb3IgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIHRoYXQgeW91IG5lZWQgdG8gc3VwcG9ydCB5b3VyIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgZm9yIHRoZSBidWlsZDwvZW1waGFzaXM+OiAgT25jZSB5b3UgaGF2ZSBtYWRlIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB0byB5b3VyIEJTUCBsYXllciwgdGhlcmUgcmVtYWlucyBhIGZldyB0aGluZ3MKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZG8gZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluIG9yZGVyIGZvciBpdCB0byBjcmVhdGUgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZ2V0IHRoZSBidWlsZCBlbnZpcm9ubWVudCByZWFkeSBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBhbmQgeW91IG5lZWQgdG8gYmUgc3VyZSB0d28ga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGNvbmZpZ3VyZWQgYXBwcm9wcmlhdGVseToKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBtYWtlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF3YXJlIG9mIHlvdXIgbmV3IGxheWVyLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdlbmFibGluZy15b3VyLWxheWVyJz5FbmFibGluZyBZb3VyIExheWVyPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGxldCB0aGUgYnVpbGQgc3lzdGVtIGtub3cgYWJvdXQgeW91ciBuZXcgbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZW50aXJlIHByb2Nlc3MgZm9yIGJ1aWxkaW5nIGFuIGltYWdlIGlzIG92ZXJ2aWV3ZWQgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgaW1hZ2U8L2VtcGhhc2lzPjogIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgdGhlIEJpdEJha2UgdG9vbCB0byBidWlsZCBpbWFnZXMgYmFzZWQgb24gdGhlIHR5cGUgb2YgaW1hZ2UgeW91IHdhbnQgdG8gY3JlYXRlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBCaXRCYWtlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJ1aWxkIHByb2Nlc3Mgc3VwcG9ydHMgc2V2ZXJhbCB0eXBlcyBvZiBpbWFnZXMgdG8gc2F0aXNmeSBkaWZmZXJlbnQgbmVlZHMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IiBjaGFwdGVyCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBpbWFnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHZpZXcgYSB2aWRlbyBwcmVzZW50YXRpb24gb24gIkJ1aWxkaW5nIEN1c3RvbSBFbWJlZGRlZCBJbWFnZXMgd2l0aCBZb2N0byIKKyAgICAgICAgICAgIGF0IDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlLWVsZWN0cm9ucy5jb20vYmxvZy9lbGMtMjAxMS12aWRlb3MnPkZyZWUgRWxlY3Ryb25zPC91bGluaz4uCisgICAgICAgICAgICBBZnRlciBnb2luZyB0byB0aGUgcGFnZSwganVzdCBzZWFyY2ggZm9yICJFbWJlZGRlZCIuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgRmluYWxseSwgdGhlcmUgaXMgaGVscGZ1bCBtYXRlcmlhbCBhbmQgbGlua3Mgb24gdGhpcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1RyYW5zY3JpcHQ6X2NyZWF0aW5nX29uZV9nZW5lcmljX0F0b21fQlNQX2Zyb21fYW5vdGhlcic+d2lraSBwYWdlPC91bGluaz4uCisgICAgICAgICAgICBBbHRob3VnaCBhIGJpdCBkYXRlZCwgeW91IG1pZ2h0IGZpbmQgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSB3aWtpCisgICAgICAgICAgICBoZWxwZnVsLgorICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLXRoZS1rZXJuZWwnPgorICAgICAgICA8dGl0bGU+PGFuY2hvciBpZD0na2VybmVsLXNwb3QnIC8+TW9kaWZ5aW5nIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgS2VybmVsIG1vZGlmaWNhdGlvbiBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwsIHdoaWNoIGNvdWxkIGludm9sdmUgY2hhbmdpbmcKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcyB3ZWxsIGFzIGFkZGluZyBuZXcga2VybmVsIHJlY2lwZXMuCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIGNoYW5nZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmb3JtIG9mIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCB3aGlsZSByZWNpcGUKKyAgICAgICAgICAgIG1vZGlmaWNhdGlvbiBjb21lcyB0aHJvdWdoIHRoZSBrZXJuZWwncyA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPiBhcmVhCisgICAgICAgICAgICBpbiBhIGtlcm5lbCBsYXllciB5b3UgY3JlYXRlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIGtlcm5lbCBhcmNoaXRlY3R1cmUgYW5kIHRoZSBzdGVwcyB0byBtb2RpZnkgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIFlvdSBjYW4gcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZSB0aGF0IGNoYW5nZXMgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWtlcm5lbCc+Q29uZmlndXJpbmcgdGhlIEtlcm5lbDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUga2VybmVsIGFuZCBvbiBtb2RpZnlpbmcgdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtb3ZlcnZpZXcnPgorICAgICAgICAgICAgPHRpdGxlPktlcm5lbCBPdmVydmlldzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRyYWRpdGlvbmFsbHksIHdoZW4gb25lIHRoaW5rcyBvZiBhIHBhdGNoZWQga2VybmVsLCB0aGV5IHRoaW5rIG9mIGEgYmFzZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBzb3VyY2UgdHJlZSBhbmQgYSBmaXhlZCBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBrZXJuZWwgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCwgaG93ZXZlciwgZW1wbG95cyBtZWNoYW5pc21zIHRoYXQsIGluIGEgc2Vuc2UsIHJlc3VsdCBpbiBhIGtlcm5lbCBzb3VyY2UKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgQnkgdGhlIGVuZCBvZiB0aGlzIHNlY3Rpb24sIHRoaXMgYW5hbG9neSB3aWxsIGJlY29tZSBjbGVhcmVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgbG9vayBhdCB0aGUgaW50ZXJmYWNlLCB5b3Ugd2lsbCBzZWUgdG8gdGhlIGxlZnQgYSBncm91cGluZyBvZgorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgdGl0bGVkICJZb2N0byBMaW51eCBLZXJuZWwuIgorICAgICAgICAgICAgICAgIFdpdGhpbiB0aGlzIGdyb3VwLCB5b3Ugd2lsbCBmaW5kIHNldmVyYWwga2VybmVscyBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuODwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZSAxLjQuIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgTGludXggMy44IHJlbGVhc2VkIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTA8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gQW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwsIHVuc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVsIHVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVsZWFzZSAxLjUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xMCByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlcyAxLjYgYW5kIDEuNy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZSBMaW51eCAzLjE0IHJlbGVhc2VkIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTc8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gQW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwsIHVuc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVsIHVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVsZWFzZSAxLjcuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xNyByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhYmxlIFlvY3RvIFByb2plY3Qga2VybmVsIHRvIHVzZSB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBSZWxlYXNlIDEuOC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMga2VybmVsIGlzIGJhc2VkIG9uIHRoZSBMaW51eCAzLjE5IHJlbGVhc2VkIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBBCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBrZXJuZWwgYmFzZWQgb24gdGhlIGxhdGVzdCB1cHN0cmVhbSByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBrZXJuZWxzIGFyZSBtYWludGFpbmVkIHVzaW5nIHRoZSBHaXQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0KKyAgICAgICAgICAgICAgICB0aGF0IHN0cnVjdHVyZXMgdGhlbSB1c2luZyB0aGUgZmFtaWxpYXIgInRyZWUiLCAiYnJhbmNoIiwgYW5kICJsZWFmIiBzY2hlbWUuCisgICAgICAgICAgICAgICAgQnJhbmNoZXMgcmVwcmVzZW50IGRpdmVyc2lvbnMgZnJvbSBnZW5lcmFsIGNvZGUgdG8gbW9yZSBzcGVjaWZpYyBjb2RlLCB3aGlsZSBsZWF2ZXMKKyAgICAgICAgICAgICAgICByZXByZXNlbnQgdGhlIGVuZC1wb2ludHMgZm9yIGEgY29tcGxldGUgYW5kIHVuaXF1ZSBrZXJuZWwgd2hvc2Ugc291cmNlIGZpbGVzLAorICAgICAgICAgICAgICAgIHdoZW4gZ2F0aGVyZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0byB0aGUgbGVhZiwgYWNjdW11bGF0ZSB0byBjcmVhdGUgdGhlIGZpbGVzCisgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGZvciBhIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIGFuZCBpdHMgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgZGlzcGxheXMgdGhpcyBjb25jZXB0OgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyIKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aGluIHRoZSBmaWd1cmUsIHRoZSAiS2VybmVsLm9yZyBCcmFuY2ggUG9pbnQiIHJlcHJlc2VudHMgdGhlIHBvaW50IGluIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgd2hlcmUgYSBzdXBwb3J0ZWQgYmFzZSBrZXJuZWwgaXMgbW9kaWZpZWQgZnJvbSB0aGUgTGludXgga2VybmVsLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIGNvdWxkIGJlIHRoZSBicmFuY2ggcG9pbnQgZm9yIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAga2VybmVsLgorICAgICAgICAgICAgICAgIFRodXMsIGV2ZXJ5dGhpbmcgZnVydGhlciB0byB0aGUgcmlnaHQgaW4gdGhlIHN0cnVjdHVyZSBpcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBCcmFuY2ggcG9pbnRzIHRvIHRoZSByaWdodCBpbiB0aGUgZmlndXJlIHJlcHJlc2VudCB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+IGtlcm5lbCBpcyBtb2RpZmllZCBmb3Igc3BlY2lmaWMgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBvciB0eXBlcyBvZiBrZXJuZWxzLCBzdWNoIGFzIHJlYWwtdGltZSBrZXJuZWxzLgorICAgICAgICAgICAgICAgIEVhY2ggbGVhZiB0aHVzIHJlcHJlc2VudHMgdGhlIGVuZC1wb2ludCBmb3IgYSBrZXJuZWwgZGVzaWduZWQgdG8gcnVuIG9uIGEgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICB0YXJnZXRlZCBkZXZpY2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBvdmVyYWxsIHJlc3VsdCBpcyBhIEdpdC1tYWludGFpbmVkIHJlcG9zaXRvcnkgZnJvbSB3aGljaCBhbGwgdGhlIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIGtlcm5lbCB0eXBlcyBjYW4gYmUgZGVyaXZlZCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICBBIGJpZyBhZHZhbnRhZ2UgdG8gdGhpcyBzY2hlbWUgaXMgdGhlIHNoYXJpbmcgb2YgY29tbW9uIGZlYXR1cmVzIGJ5IGtlZXBpbmcgdGhlbSBpbgorICAgICAgICAgICAgICAgICJsYXJnZXIiIGJyYW5jaGVzIHdpdGhpbiB0aGUgdHJlZS4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGVsaW1pbmF0ZXMgcmVkdW5kYW50IHN0b3JhZ2Ugb2Ygc2ltaWxhciBmZWF0dXJlcyBzaGFyZWQgYW1vbmcga2VybmVscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgS2VlcCBpbiBtaW5kIHRoZSBmaWd1cmUgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgYWxsIHRoZSBzdXBwb3J0ZWQgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGtlcm5lbCB0eXBlcywgYnV0IHJhdGhlciBzaG93cyBhIHNpbmdsZSBnZW5lcmljIGtlcm5lbCBqdXN0IGZvciBjb25jZXB0dWFsIHB1cnBvc2VzLgorICAgICAgICAgICAgICAgIEFsc28ga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgWW9jdG8gUHJvamVjdCBzb3VyY2UgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgZWl0aGVyIHB1bGxlZCBmcm9tIGR1cmluZyB0aGUgYnVpbGQgb3IgZXN0YWJsaXNoZWQgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgcHJpb3IgdG8gdGhlIGJ1aWxkIGJ5IGVpdGhlciBjbG9uaW5nIGEgcGFydGljdWxhciBrZXJuZWwncyBHaXQgcmVwb3NpdG9yeSBvciBieQorICAgICAgICAgICAgICAgIGRvd25sb2FkaW5nIGFuZCB1bnBhY2tpbmcgYSB0YXJiYWxsLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVcHN0cmVhbSBzdG9yYWdlIG9mIGFsbCB0aGUgYXZhaWxhYmxlIGtlcm5lbCBzb3VyY2UgY29kZSBpcyBvbmUgdGhpbmcsIHdoaWxlCisgICAgICAgICAgICAgICAgcmVwcmVzZW50aW5nIGFuZCB1c2luZyB0aGUgY29kZSBvbiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIGFub3RoZXIuCisgICAgICAgICAgICAgICAgQ29uY2VwdHVhbGx5LCB5b3UgY2FuIHRoaW5rIG9mIHRoZSBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcyBhcyBhbGwgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIG5lY2Vzc2FyeSBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQga2VybmVscy4KKyAgICAgICAgICAgICAgICBBcyBhIGRldmVsb3BlciwgeW91IGFyZSBqdXN0IGludGVyZXN0ZWQgaW4gdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIGtlcm5lbCBvbgorICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBhcmUgd29ya2luZy4KKyAgICAgICAgICAgICAgICBBbmQsIGZ1cnRoZXJtb3JlLCB5b3UgbmVlZCB0aGVtIGF2YWlsYWJsZSBvbiB5b3VyIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBLZXJuZWwgc291cmNlIGNvZGUgaXMgYXZhaWxhYmxlIG9uIHlvdXIgaG9zdCBzeXN0ZW0gYSBjb3VwbGUgb2YgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgd2F5cy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgaW4gdGhlIGtlcm5lbCBhbGwgdGhlIHRpbWUsIHlvdSBwcm9iYWJseSB3b3VsZCB3YW50CisgICAgICAgICAgICAgICAgdG8gc2V0IHVwIHlvdXIgb3duIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UganVzdCBuZWVkIHRvIG1ha2Ugc29tZSBwYXRjaGVzIHRvIHRoZSBrZXJuZWwsIHlvdSBjYW4gYWNjZXNzCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGtlcm5lbCBzb3VyY2UgZmlsZXMgdGhhdCB3ZXJlIGV4dHJhY3RlZCBhbmQgdXNlZAorICAgICAgICAgICAgICAgIGR1cmluZyBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIFdlIHdpbGwganVzdCB0YWxrIGFib3V0IHdvcmtpbmcgd2l0aCB0aGUgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQga2VybmVsIHNvdXJjZSBjb2RlIG9udG8geW91cgorICAgICAgICAgICAgICAgIGhvc3Qgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2xvY2FsLWtlcm5lbC1maWxlcyc+WW9jdG8gUHJvamVjdCBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgIGJ1bGxldGVkIGl0ZW0gZWFybGllciBpbiB0aGUgbWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBidWlsZD8KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBidWlsZCB0aGUga2VybmVsIG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCBhbGwgZmlsZXMgbmVlZGVkIGZvciB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICBhcmUgdGFrZW4gZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcmllcyBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICBhbmQgZ2F0aGVyZWQgaW4gYSB0ZW1wb3Jhcnkgd29yayBhcmVhCisgICAgICAgICAgICAgICAgd2hlcmUgdGhleSBhcmUgc3Vic2VxdWVudGx5IHVzZWQgdG8gY3JlYXRlIHRoZSB1bmlxdWUga2VybmVsLgorICAgICAgICAgICAgICAgIFRodXMsIGluIGEgc2Vuc2UsIHRoZSBwcm9jZXNzIGNvbnN0cnVjdHMgYSBsb2NhbCBzb3VyY2UgdHJlZSBzcGVjaWZpYyB0byB5b3VyCisgICAgICAgICAgICAgICAga2VybmVsIHRvIGdlbmVyYXRlIHRoZSBuZXcga2VybmVsIGltYWdlIC0gYSBzb3VyY2UgZ2VuZXJhdG9yIGlmIHlvdSB3aWxsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIHRoZSB0ZW1wb3JhcnkgZmlsZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICBjcmVhdGVkIG9uIHlvdXIgaG9zdCBzeXN0ZW0gd2hlbiB0aGUgYnVpbGQgb2NjdXJzLgorICAgICAgICAgICAgICAgIFRoaXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gY29udGFpbnMgYWxsIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZyIKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjVpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWdhaW4sIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCdzCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIGFuZCBpdHMgYnJhbmNoaW5nIHN0cmF0ZWd5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhIGRldGFpbGVkIGV4YW1wbGUgdGhhdCBtb2RpZmllcyB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC1tb2RpZmljYXRpb24td29ya2Zsb3cnPgorICAgICAgICAgICAgPHRpdGxlPktlcm5lbCBNb2RpZmljYXRpb24gV29ya2Zsb3c8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGlsbHVzdHJhdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBsaXN0IHN1bW1hcml6ZXMgdGhlIGtlcm5lbCBtb2RpZmljYXRpb24gZ2VuZXJhbCB3b3JrZmxvdy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmciCisgICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gdG8gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPjogIFNlZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdGhlLWxpbnV4LWRpc3Rybyc+VGhlIExpbnV4IERpc3RyaWJ1dGlvbjwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3BhY2thZ2VzJz5UaGUgQnVpbGQgSG9zdCBQYWNrYWdlczwvdWxpbms+IiBzZWN0aW9ucyBib3RoCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgcmVxdWlyZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzdGFibGlzaCBhIGxvY2FsIGNvcHkgb2YgcHJvamVjdCBmaWxlcyBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW08L2VtcGhhc2lzPjogIEhhdmluZyB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3Rvcnk8L2xpbms+IG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IHRoZXNlIGZpbGVzLCBzZWUgdGhlIGJ1bGxldGVkIGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdsb2NhbC15cC1yZWxlYXNlJz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U8L2xpbms+IiBlYXJsaWVyIGluIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIHRoZSB0ZW1wb3Jhcnkga2VybmVsIHNvdXJjZSBmaWxlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGVtcG9yYXJ5IGtlcm5lbCBzb3VyY2UgZmlsZXMgYXJlIGtlcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4geW91IHJ1biBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbmV2ZXIgYnVpbHQgdGhlIGtlcm5lbCBpbiB3aGljaCB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGVkLCB5b3UgbmVlZCB0byBydW4gYW4gaW5pdGlhbCBidWlsZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgZXN0YWJsaXNoIGxvY2FsIGtlcm5lbCBzb3VyY2UgZmlsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSBidWlsZGluZyBhbiBpbWFnZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHlvdSBuZWVkIHRvIGdldCB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHJlYWR5IGJ5IHNvdXJjaW5nIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIHRvIGJlIHN1cmUgdHdvIGtleSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGVudGlyZSBwcm9jZXNzIGZvciBidWlsZGluZyBhbiBpbWFnZSBpcyBvdmVydmlld2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byByZWZlcmVuY2UgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgYnVpbGQgcHJvY2VzcyBzdXBwb3J0cyBzZXZlcmFsIHR5cGVzIG9mIGltYWdlcyB0byBzYXRpc2Z5IGRpZmZlcmVudCBuZWVkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IiBjaGFwdGVyIGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGU8L2VtcGhhc2lzPjogIE1vZGlmeWluZyB0aGUga2VybmVsIGRvZXMgbm90IGFsd2F5cyBtZWFuIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgaGF2ZSB0byBkbyB0aGlzLCB5b3UgbWFrZSB0aGUgY2hhbmdlcyB0byB0aGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBrZXJuZWwgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGlmIGFwcGxpY2FibGU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc2l0dWF0aW9uIGNhbGxzIGZvciBjaGFuZ2luZyB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz48ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIGludGVyYWN0aXZlbHkgZGV2ZWxvcCBhbmQgdGVzdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB5b3UgYXJlIG1ha2luZyB0byB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgU2F2aW5nIGNoYW5nZXMgeW91IG1ha2Ugd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB1cGRhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyeSB0byByZXNpc3QgdGhlIHRlbXB0YXRpb24gdG8gZGlyZWN0bHkgZWRpdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9zeXNyb290cy88cmVwbGFjZWFibGU+bWFjaGluZS1uYW1lPC9yZXBsYWNlYWJsZT4va2VybmVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28sIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVnZW5lcmF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIG1hZGUgdXNpbmcgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBoYXZlIHNhdmVkIHRoZW0sIHlvdSBjYW4gZGlyZWN0bHkgY29tcGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYWdhaW5zdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmcgb3JpZ2luYWwgYW5kIGdhdGhlciB0aG9zZSBjaGFuZ2VzIGludG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctY29uZmlnLWZyYWdtZW50cyc+Y29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcmVmZXJlbmNlZCBmcm9tIHdpdGhpbiB0aGUga2VybmVsJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWRkaXRpb25hbGx5LCBpZiB5b3UgYXJlIHdvcmtpbmcgaW4gYSBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuZWVkIHRvIG1vZGlmeSB0aGUgQlNQJ3Mga2VybmVsJ3MgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjbWFuYWdpbmcta2VybmVsLXBhdGNoZXMtYW5kLWNvbmZpZy1pdGVtcy13aXRoLXlvY3RvLWtlcm5lbCc+PGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBhcyB3ZWxsIGFzIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+IHNjcmlwdCBsZXRzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgaW50ZXJhY3RpdmVseSBzZXQgdXAga2VybmVsIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVidWlsZCB0aGUga2VybmVsIGltYWdlIHdpdGggeW91ciBjaGFuZ2VzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBSZWJ1aWxkaW5nIHRoZSBrZXJuZWwgaW1hZ2UgYXBwbGllcyB5b3VyIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nYXBwbGljYXRpb24tZGV2ZWxvcG1lbnQtd29ya2Zsb3cnPgorICAgIDx0aXRsZT5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBXb3JrZmxvdzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgaW52b2x2ZXMgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB5b3Ugd2FudAorICAgICAgICB0byBydW4gb24geW91ciB0YXJnZXQgaGFyZHdhcmUsIHdoaWNoIGlzIHJ1bm5pbmcgYSBrZXJuZWwgaW1hZ2UgY3JlYXRlZCB1c2luZyB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgYW4KKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjYWR0LWludHJvJz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpPC91bGluaz4KKyAgICAgICAgYW5kIHN0YW5kLWFsb25lCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3RoZS1jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPmNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnM8L3VsaW5rPgorICAgICAgICB0aGF0IGZhY2lsaXRhdGUgcXVpY2sgZGV2ZWxvcG1lbnQgYW5kIGludGVncmF0aW9uIG9mIHlvdXIgYXBwbGljYXRpb24gaW50byBpdHMgcnVudGltZSBlbnZpcm9ubWVudC4KKyAgICAgICAgVXNpbmcgdGhlIEFEVCBhbmQgdG9vbGNoYWlucywgeW91IGNhbiBjb21waWxlIGFuZCBsaW5rIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgIFlvdSBjYW4gdGhlbiBkZXBsb3kgeW91ciBhcHBsaWNhdGlvbiB0byB0aGUgYWN0dWFsIGhhcmR3YXJlIG9yIHRvIHRoZSBRRU1VIGVtdWxhdG9yIGZvciB0ZXN0aW5nLgorICAgICAgICBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhlIHBvcHVsYXIgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFLAorICAgICAgICB5b3UgY2FuIHVzZSBhbiBFY2xpcHNlIFlvY3RvIFBsdWctaW4gdG8KKyAgICAgICAgYWxsb3cgeW91IHRvIGRldmVsb3AsIGRlcGxveSwgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbiBhbGwgZnJvbSB3aXRoaW4gRWNsaXBzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpbGUgd2Ugc3Ryb25nbHkgc3VnZ2VzdCB1c2luZyB0aGUgQURUIHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbiwgdGhpcyBvcHRpb24gbWlnaHQgbm90CisgICAgICAgIGJlIGJlc3QgZm9yIHlvdS4KKyAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IGNhbiBzdGlsbCB1c2UgcGllY2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGZvciB5b3VyIGRldmVsb3BtZW50IHByb2Nlc3MuCisgICAgICAgIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIHByb2Nlc3MgY2FuIHZhcnkgZ3JlYXRseSwgdGhpcyBtYW51YWwgZG9lcyBub3QgcHJvdmlkZSBkZXRhaWwgb24gdGhlIHByb2Nlc3MuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtmbG93LXVzaW5nLXRoZS1hZHQtYW5kLWVjbGlwc2UnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgVXNpbmcgdGhlIEFEVCBhbmQgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaGVscCB5b3UgdW5kZXJzdGFuZCBob3cgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgd29ya3MgdXNpbmcgdGhlIEFEVCwgdGhpcyBzZWN0aW9uCisgICAgICAgICAgICBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgZ2VuZXJhbCBkZXZlbG9wbWVudCBwcm9jZXNzIGFuZCBhIGRldGFpbGVkIGV4YW1wbGUgb2YgdGhlIHByb2Nlc3MKKyAgICAgICAgICAgIGFzIGl0IGlzIHVzZWQgZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBhbmQgbGlzdCBzdW1tYXJpemUgdGhlIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGdlbmVyYWwgd29ya2Zsb3cuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIgorICAgICAgICAgICAgICAgIHdpZHRoPSI3aW4iIGRlcHRoPSI4aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgdGhlIGhvc3Qgc3lzdGVtIGZvciB0aGUgWW9jdG8gUHJvamVjdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIgc2VjdGlvbnMgYm90aAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGJlIHN1cmUgeW91ciBob3N0IHN5c3RlbSBoYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54dGVybTwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlY3VyZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdGFyZ2V0IGltYWdlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGhhdmUgYSB0YXJnZXQga2VybmVsIGltYWdlIHRoYXQgaGFzIGJlZW4gYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5EZXBlbmRpbmcgb24gd2hldGhlciB0aGUgWW9jdG8gUHJvamVjdCBoYXMgYSBwcmUtYnVpbHQgaW1hZ2UgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgd2hlcmUgeW91IGFyZSBnb2luZyB0byBydW4gdGhlIGltYWdlIHdoaWxlIHlvdSBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKFFFTVUgb3IgcmVhbCBoYXJkd2FyZSksIHRoZSBhcmVhIGZyb20gd2hpY2ggeW91IGdldCB0aGUgaW1hZ2UgZGlmZmVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvd25sb2FkIHRoZSBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48ZmlsZW5hbWU+bWFjaGluZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzdXBwb3J0ZWQgYW5kIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGVzdCB5b3VyIGFwcGxpY2F0aW9uIG9uIGFjdHVhbCBoYXJkd2FyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG93bmxvYWQgdGhlIGltYWdlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoaW5lcy9xZW11PC9maWxlbmFtZT48L3VsaW5rPiBpZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXVsYXRvci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgeW91ciBpbWFnZSBpZiB5b3UgY2Fubm90IGZpbmQgYSBwcmUtYnVpbHQgaW1hZ2UgdGhhdCBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHNpbWlsYXIgdG8gYSBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeSB0aGUga2VybmVsIGltYWdlIGJlZm9yZSB5b3UgYnVpbGQgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhdGNoaW5nLXRoZS1rZXJuZWwnPlBhdGNoaW5nIHRoZSBLZXJuZWw8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhbiBleGFtcGxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gb24gcHJlLWJ1aWx0IGtlcm5lbCBpbWFnZSBuYW1pbmcgc2NoZW1lcyBmb3IgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIHJ1biBvbiB0aGUgUUVNVSBlbXVsYXRvciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNkb3dubG9hZGluZy10aGUtcHJlLWJ1aWx0LWxpbnV4LWtlcm5lbCc+RG93bmxvYWRpbmcgdGhlIFByZS1CdWlsdCBMaW51eCBLZXJuZWw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgdGhlIEFEVDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBUaGUgQURUIHByb3ZpZGVzIGEgdGFyZ2V0LXNwZWNpZmljIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiwgdGhlIHJvb3QgZmlsZXN5c3RlbSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIFFFTVUgZW11bGF0b3IsIGFuZCBvdGhlciB0b29scyB0aGF0IGNhbiBoZWxwIHlvdSBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFdoaWxlIGl0IGlzIHBvc3NpYmxlIHRvIGdldCB0aGVzZSBwaWVjZXMgc2VwYXJhdGVseSwgdGhlIEFEVCBJbnN0YWxsZXIgcHJvdmlkZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgZWFzeSwgaW5jbHVzaXZlIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhlc2UgcGllY2VzIGJ5IHJ1bm5pbmcgYW4gQURUIGluc3RhbGxlciBzY3JpcHQsIHdoaWNoIGlzIGNvbmZpZ3VyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZSBBRFQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS1hZHQtaW5zdGFsbGVyJz5Vc2luZyB0aGUgQURUIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SWYgYXBwbGljYWJsZSwgc2VjdXJlIHRoZSB0YXJnZXQgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjaG9vc2Ugbm90IHRvIGluc3RhbGwgdGhlIEFEVCB1c2luZyB0aGUgQURUIEluc3RhbGxlciwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZmluZCBhbmQgZG93bmxvYWQgdGhlIGFwcHJvcHJpYXRlIHJvb3QgZmlsZXN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgdGFyYmFsbHMgZm9yIHRoZSByb290IGZpbGVzeXN0ZW0gaW4gdGhlIHNhbWUgYXJlYSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW1hZ2UgeW91IGFyZSBydW5uaW5nLCB0aGUgcm9vdCBmaWxlc3lzdGVtIHlvdSBuZWVkIGRpZmZlcnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGRldmVsb3BpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIGFuIGltYWdlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgU2F0bywgeW91IG5lZWQgdG8gZ2V0IGEgcm9vdCBmaWxlc3lzdGVtIHRoYXQgc3VwcG9ydHMgU2F0by48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjxmaWxlbmFtZT50b29sY2hhaW5zPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBnZXQgdGhlIGNvcnJlY3QgdG9vbGNoYWluIGZvciB5b3VyIGRldmVsb3BtZW50IGhvc3QgYW5kIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZSBmb3IgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNpbnN0YWxsaW5nLXRoZS10b29sY2hhaW4nPkluc3RhbGxpbmcgdGhlIFRvb2xjaGFpbjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZSBmb3IgaW5mb3JtYXRpb24gb24gZmluZGluZyBhbmQgaW5zdGFsbGluZworICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVjdCB0b29sY2hhaW4gYmFzZWQgb24geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBhbmQgeW91ciB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhbmQgYnVpbGQgeW91ciBhcHBsaWNhdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgbmVlZCB0byBoYXZlIHNvdXJjZSBmaWxlcyBmb3IgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgZmlsZXMsIHlvdSBjYW4gdXNlIHRoZSBFY2xpcHNlIElERSB0byBpbXBvcnQgdGhlbSBhbmQgYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIEVjbGlwc2UsIHlvdSBuZWVkIHRvIHVzZSB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMgeW91IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHRvIGNyZWF0ZSB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXBsb3kgdGhlIGltYWdlIHdpdGggdGhlIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIEVjbGlwc2UgSURFLCB5b3UgY2FuIGRlcGxveSB5b3VyIGltYWdlIHRvIHRoZSBoYXJkd2FyZSBvciB0bworICAgICAgICAgICAgICAgICAgICBRRU1VIHRocm91Z2ggdGhlIHByb2plY3QncyBwcmVmZXJlbmNlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBub3QgdXNpbmcgdGhlIEVjbGlwc2UgSURFLCB0aGVuIHlvdSBuZWVkIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGhhcmR3YXJlIHVzaW5nIG90aGVyIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgICAgIE9yLCBpZiB5b3UgYXJlIHVzaW5nIFFFTVUsIHlvdSBuZWVkIHRvIHVzZSB0aGF0IHRvb2wgYW5kCisgICAgICAgICAgICAgICAgICAgIGxvYWQgeW91ciBpbWFnZSBpbiBmb3IgdGVzdGluZy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBmb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZXN0IGFuZCBkZWJ1ZyB0aGUgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3VyIGFwcGxpY2F0aW9uIGlzIGRlcGxveWVkLCB5b3UgbmVlZCB0byB0ZXN0IGl0LgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgY2FuIHVzZSB0aGUgZGVidWdnaW5nIGVudmlyb25tZW50IGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIHNldCBvZiB1c2VyLXNwYWNlIHRvb2xzIGluc3RhbGxlZCBhbG9uZyB3aXRoIHRoZSBBRFQgdG8gZGVidWcgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgT2YgY291cnNlLCB0aGUgc2FtZSB1c2VyLXNwYWNlIHRvb2xzIGFyZSBhdmFpbGFibGUgc2VwYXJhdGVseSBpZiB5b3UgY2hvb3NlCisgICAgICAgICAgICAgICAgICAgIG5vdCB0byB1c2UgdGhlIEVjbGlwc2UgSURFLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2FkdC1lY2xpcHNlJz4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgV2l0aGluIEVjbGlwc2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIEVjbGlwc2UgSURFIGlzIGEgcG9wdWxhciBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgaXQgZnVsbHkKKyAgICAgICAgICAgIHN1cHBvcnRzIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIGJvdGggdGhlIEx1bmEKKyAgICAgICAgICAgICAgICBhbmQgS2VwbGVyIHZlcnNpb25zIG9mIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHByb3ZpZGVzIHNldHVwIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgICAgIGJvdGggdmVyc2lvbnMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQcm9qZWN0IFBsdWctaW4KKyAgICAgICAgICAgIGludG8gdGhlIEVjbGlwc2UgSURFLCB5b3UgbWF4aW1pemUgeW91ciBZb2N0byBQcm9qZWN0IGV4cGVyaWVuY2UuCisgICAgICAgICAgICBJbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyB0aGUgUGx1Zy1pbiByZXN1bHRzIGluIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICB0aGF0IGhhcyBleHRlbnNpb25zIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBsZXQgeW91IG1vcmUgZWFzaWx5CisgICAgICAgICAgICBkZXZlbG9wIHNvZnR3YXJlLgorICAgICAgICAgICAgVGhlc2UgZXh0ZW5zaW9ucyBhbGxvdyBmb3IgY3Jvc3MtY29tcGlsYXRpb24sIGRlcGxveW1lbnQsIGFuZAorICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHlvdXIgb3V0cHV0IGludG8gYSBRRU1VIGVtdWxhdGlvbiBzZXNzaW9uIGFzIHdlbGwgYXMKKyAgICAgICAgICAgIGFjdHVhbCB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gcGVyZm9ybSBjcm9zcy1kZWJ1Z2dpbmcgYW5kIHByb2ZpbGluZy4KKyAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCBhbHNvIHN1cHBvcnRzIGEgc3VpdGUgb2YgdG9vbHMgdGhhdCBhbGxvd3MgeW91CisgICAgICAgICAgICB0byBwZXJmb3JtIHJlbW90ZSBwcm9maWxpbmcsIHRyYWNpbmcsIGNvbGxlY3Rpb24gb2YgcG93ZXIgZGF0YSwKKyAgICAgICAgICAgIGNvbGxlY3Rpb24gb2YgbGF0ZW5jeSBkYXRhLCBhbmQgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBkYXRhLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgSURFCisgICAgICAgICAgICBZb2N0byBQbHVnLWluIGFuZCBob3cgdG8gdXNlIGl0IHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLXRoZS1lY2xpcHNlLWlkZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgRWNsaXBzZSBJREU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkZXZlbG9wIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUsIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdGFsbCB0aGUgb3B0aW1hbCB2ZXJzaW9uIG9mIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyZSB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCBFY2xpcHNlIGZyb20geW91ciBkaXN0cmlidXRpb24ncyBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gaW5zdGFsbCBFY2xpcHNlIGZyb20gdGhlIG9mZmljaWFsIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQgc2l0ZSBhcyBkaXJlY3RlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2luc3RhbGxpbmctZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBFY2xpcHNlIElERTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaGF2ZSB0aGUgTHVuYSBTUjIgKDQuNC4yKQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBFY2xpcHNlIElERSBpbnN0YWxsZWQgb24geW91ciBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBjdXJyZW50bHkgaGF2ZSB0aGUgS2VwbGVyIDQuMy4yIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGFuZCB5b3UgZG8gbm90IHdhbnQgdG8gdXBncmFkZSB0aGUgSURFLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBLZXBsZXIgdG8gd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgdGhlIEx1bmEgU1IyICg0LjQuMikgRWNsaXBzZSBJREUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLCB5b3UgY2FuIGZpbmQgdGhlIHRhcmJhbGwgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJkVDTElQU0VfTUFJTl9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGF0IHNpdGUsIGNob29zZSB0aGUgYXBwcm9wcmlhdGUgZG93bmxvYWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIkVjbGlwc2UgSURFIGZvciBDL0MrKyBEZXZlbG9wZXJzIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBFY2xpcHNlIFBsYXRmb3JtLCB0aGUgSmF2YQorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBUb29scyAoSkRUKSwgYW5kIHRoZSBQbHVnLWluIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGRvd25sb2FkZWQgdGhlIHRhcmJhbGwsIGV4dHJhY3QgaXQgaW50byBhCisgICAgICAgICAgICAgICAgICAgIGNsZWFuIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdW5wYWNrIGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkIEVjbGlwc2UgSURFIHRhcmJhbGwgaW50byBhIGNsZWFuIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgZGVmYXVsdCBuYW1lIDxmaWxlbmFtZT5lY2xpcHNlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgdGFyIC14enZmIH4vRG93bmxvYWRzL2VjbGlwc2UtY3BwLWx1bmEtU1IyLWxpbnV4LWd0ay14ODZfNjQudGFyLmd6CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBJREU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUgc3RlcHMgbmVlZGVkIHRvIGNvbmZpZ3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBpbnN0YWxsaW5nIGFuZCBjb25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluLAorICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBjb25maWd1cmUgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2UgZ2VuZXJhbCBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXJ0IHRoZSBFY2xpcHNlIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGFyZSBpbiB5b3VyIFdvcmtiZW5jaCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsLWRvd24gbWVudS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THVuYSAtICZFQ0xJUFNFX0xVTkFfVVJMOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIldvcmsgd2l0aDoiIHB1bGwtZG93biBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgS2VwbGVyLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktlcGxlciAtICZFQ0xJUFNFX0tFUExFUl9VUkw7PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwYW5kIHRoZSBib3ggbmV4dCB0byAiTGludXggVG9vbHMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TGludXggVG9vbHMgTFRUbmcgVHJhY2VyIENvbnRyb2w8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TGludXggVG9vbHMgTFRUbmcgVXNlcnNwYWNlIEFuYWx5c2lzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxUVG5nIEtlcm5lbCBBbmFseXNpczwvZmlsZW5hbWU+IGJveGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZXNlIHNlbGVjdGlvbnMgZG8gbm90IGFwcGVhciBpbiB0aGUgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG1lYW5zIHRoZSBpdGVtcyBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBLZXBsZXIsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TFRUbmcgLSBMaW51eCBUcmFjaW5nIFRvb2xraXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCB0aGUgYm94IG5leHQgdG8gIk1vYmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UgRGV2ZWxvcG1lbnQiIGFuZCBzZWxlY3QgdGhlIGZvbGxvd2luZyBib3hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uLCB0aGF0IG1lYW5zIHRoZSBpdGVtcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluc3RhbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkMvQysrIFJlbW90ZSBMYXVuY2ggKFJlcXVpcmVzIFJTRSBSZW1vdGUgU3lzdGVtIEV4cGxvcmVyKTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+UmVtb3RlIFN5c3RlbSBFeHBsb3JlciBFbmQtdXNlciBSdW50aW1lPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5SZW1vdGUgU3lzdGVtIEV4cGxvcmVyIFVzZXIgQWN0aW9uczwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+VGFyZ2V0IE1hbmFnZW1lbnQgVGVybWluYWwgKENvcmUgU0RLKTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+VENGIFJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgYWRkLWluPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5UQ0YgVGFyZ2V0IEV4cGxvcmVyPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgdGhlIGJveCBuZXh0IHRvICJQcm9ncmFtbWluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlcyIgYW5kIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Qy9DKysgQXV0b3Rvb2xzIFN1cHBvcnQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Qy9DKysgRGV2ZWxvcG1lbnQgVG9vbHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBMdW5hLCB0aGVzZSBpdGVtcyBkbyBub3QgYXBwZWFyIG9uIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhleSBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBhbmQgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIG9yIEFjY2Vzc2luZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBpbnRvIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIElERSBvbmUgb2YgdHdvIHdheXM6ICB1c2UgdGhlIFlvY3RvIFByb2plY3QncyBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBzaXRlIHRvIGluc3RhbGwgdGhlIHByZS1idWlsdCBwbHVnLWluIG9yIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIHRoZSBwbHVnLWluIGZyb20gdGhlIGxhdGVzdCBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXNvZnR3YXJlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIFByZS1idWlsdCBQbHVnLWluIGZyb20gdGhlIFlvY3RvIFByb2plY3QgRWNsaXBzZSBVcGRhdGUgU2l0ZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBpbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4gZnJvbSB0aGUgdXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBzaXRlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXJ0IHVwIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIEVjbGlwc2UsIHNlbGVjdCAiSW5zdGFsbCBOZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUiIGZyb20gdGhlICJIZWxwIiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkFkZC4uLiIgaW4gdGhlICJXb3JrIHdpdGg6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRUNMSVBTRV9ETF9QTFVHSU5fVVJMOy9sdW5hPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFVSTCBmaWVsZCBhbmQgcHJvdmlkZSBhIG1lYW5pbmdmdWwgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgIk5hbWUiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgS2VwbGVyLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRUNMSVBTRV9ETF9QTFVHSU5fVVJMOy9rZXBsZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFVSTCBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiT0siIHRvIGhhdmUgdGhlIGVudHJ5IGFkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSAiV29yayB3aXRoOiIgZHJvcC1kb3duIGxpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgdGhlIGVudHJ5IGZvciB0aGUgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiV29yayB3aXRoOiIgZHJvcC1kb3duIGxpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGVjayB0aGUgYm94ZXMgbmV4dCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBBRFQgUGx1Zy1pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBCaXRiYWtlIENvbW1hbmRlciBQbHVnLWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbXBsZXRlIHRoZSByZW1haW5pbmcgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHN0ZXBzIGFuZCB0aGVuIHJlc3RhcnQgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURFIHRvIGZpbmlzaCB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBwbHVnLWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsaW5nIHNvZnR3YXJlIHRoYXQgY29udGFpbnMgdW5zaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nemlwLWZpbGUtbWV0aG9kJz4KKyAgICAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgUGx1Zy1pbiBVc2luZyB0aGUgTGF0ZXN0IFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlIGxhdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB5b3VyIGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgdXNpbmcgT3BlbkpESyB0byBidWlsZCB0aGUgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBkb2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIHRoZSBPcmFjbGUgSkRLLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkb24ndCBoYXZlIHRoYXQsIGdvIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2phdmEvamF2YXNlL2Rvd25sb2Fkcy9qZGs3LWRvd25sb2Fkcy0xODgwMjYwLmh0bWwnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRvd25sb2FkIHRoZSBsYXRlc3QgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXZhIFNFIERldmVsb3BtZW50IEtpdCB0YXJiYWxsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3QgaXQgaW50byB5b3VyIGhvbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBzaGVsbCB5b3UgYXJlIGdvaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZG8geW91ciB3b3JrLCBleHBvcnQgdGhlIGxvY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9yYWNsZSBKYXZhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzdGVwIGNyZWF0ZXMgYSBuZXcgZm9sZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBleHRyYWN0ZWQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXhwb3J0PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwcm92aWRlIHRoZSBzcGVjaWZpYyBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBQQVRIPX4vPHJlcGxhY2VhYmxlPmV4dHJhY3RlZF9qZGtfbG9jYXRpb248L3JlcGxhY2VhYmxlPi9iaW46JFBBVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgc2FtZSBzaGVsbCwgY3JlYXRlIGEgR2l0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgd2l0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZWNsaXBzZS1wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgdG8gY2hlY2tvdXQgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBMdW5hLCBkbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNoZWNrb3V0IGx1bmEveW9jdG8tMS44CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwdXRzIHlvdSBpbiBhIGRldGFjaGVkIEhFQUQgc3RhdGUsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZpbmUgc2luY2UgeW91IGFyZSBvbmx5IGdvaW5nIHRvIGJlIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgZGV2ZWxvcGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGJ1aWxkaW5nIGtlcGxlciwgY2hlY2tvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VwbGVyL3lvY3RvLTEuODwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5nZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZSBHaXQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSBydW5uaW5nIHRoZSBzZXR1cCBzY3JpcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL3NldHVwLnNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gdGhlIHNjcmlwdCBmaW5pc2hlcyBleGVjdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHByb21wdHMgeW91IHdpdGggaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5idWlsZC5zaDwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWxzbyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIEdpdCByZXBvc2l0b3J5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGFzIGRpcmVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgdGhlIHRhZyBuYW1lLCBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgYW5kIGEgcmVsZWFzZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bHVuYS95b2N0by0xLjg8L2ZpbGVuYW1lPiB0YWcsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFzdGVyPC9maWxlbmFtZT4gZG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkRJU1RST19OQU1FOzwvZmlsZW5hbWU+IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgRUNMSVBTRV9IT01FPS9ob21lL3Njb3R0cmlmL2VjbGlwc2UtcG9reS9zY3JpcHRzL2VjbGlwc2UgLi9idWlsZC5zaCBsdW5hL3lvY3RvLTEuOCBtYXN0ZXIgJkRJU1RST19OQU1FOyAyPiZhbXA7MSB8IHRlZSAtYSBidWlsZC5sb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBzY3JpcHQsIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcmcueW9jdG8uc2RrLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJlbGVhc2U8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZGF0ZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi1hcmNoaXZlLnppcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIG5lY2Vzc2FyeSwgc3RhcnQgdGhlIEVjbGlwc2UgSURFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBiZSBzdXJlIHlvdSBhcmUgaW4gdGhlIFdvcmtiZW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiSW5zdGFsbCBOZXcgU29mdHdhcmUiIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJIZWxwIiBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJBZGQiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGFueXRoaW5nIHlvdSB3YW50IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZSIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQXJjaGl2ZSIgYW5kIGJyb3dzZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWklQIGZpbGUgeW91IGJ1aWx0IGluIHN0ZXAgZWlnaHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgWklQIGZpbGUgc2hvdWxkIG5vdCBiZSAidW56aXBwZWQiLCBhbmQgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0aGUgPGZpbGVuYW1lPiphcmNoaXZlLnppcDwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBieSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQuc2g8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayB0aGUgIk9LIiBidXR0b24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGVjayB0aGUgYm94ZXMgdGhhdCBhcHBlYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxhdGlvbiB3aW5kb3cgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIFBsdWctaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQml0YmFrZSBDb21tYW5kZXIgUGx1Zy1pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IERvY3VtZW50YXRpb24gcGx1Zy1pbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluaXNoIHRoZSBpbnN0YWxsYXRpb24gYnkgY2xpY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgYnV0dG9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjbGljayAiT0siIHdoZW4gcHJvbXB0ZWQgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zIHVuc2lnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0YXJ0IHRoZSBFY2xpcHNlIElERSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBZb2N0byBQbHVnLWluIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGludm9sdmVzIHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIENyb3NzIENvbXBpbGVyIG9wdGlvbnMgYW5kIHRoZSBUYXJnZXQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb25zIHlvdSBjaG9vc2UgYmVjb21lIHRoZSBkZWZhdWx0IHNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBoYXZlIG9wcG9ydHVuaXRpZXMgdG8gY2hhbmdlIHRoZW0gbGF0ZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICB5b3UgY29uZmlndXJlIHRoZSBwcm9qZWN0IChzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3RhcnQsIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgZnJvbSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNob29zZSAiUHJlZmVyZW5jZXMiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmRvdyIgbWVudSB0byBkaXNwbGF5IHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIllvY3RvIFByb2plY3QgQURUIiB0byBkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gc2NyZWVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWNyb3NzLWNvbXBpbGVyLW9wdGlvbnMnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLUNvbXBpbGVyIE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZSBDcm9zcyBDb21waWxlciBPcHRpb25zLCB5b3UgbXVzdCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIHRvb2xjaGFpbiwgcG9pbnQgdG8gdGhlIHRvb2xjaGFpbiwgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgbG9jYXRpb24sIGFuZCBzZWxlY3QgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlbGVjdGluZyB0aGUgVG9vbGNoYWluIFR5cGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlN0YW5kYWxvbmUgcHJlLWJ1aWx0IHRvb2xjaGFpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIENyb3NzIENvbXBpbGVyIE9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIFByZS1idWlsdCBUb29sY2hhaW46PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBtb2RlIHdoZW4geW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHN0YW5kLWFsb25lIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJ1aWxkIGEgdGFyZ2V0IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB5b3UganVzdCB3YW50IHRvIHVzZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdG9vbGNoYWluIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4aXN0aW5nIGtlcm5lbCBhbmQgdGFyZ2V0IHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZCBTeXN0ZW0gRGVyaXZlZCBUb29sY2hhaW46PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBtb2RlIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4gaGFzIGJlZW4gaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBidWlsdCBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgdXNpbmcgdGhlIHRvb2xjaGFpbiBidW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvaW50IHRvIHRoZSBUb29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBhIHN0YW5kLWFsb25lIHByZS1idWlsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHlvdSBzaG91bGQgYmUgcG9pbnRpbmcgdG8gd2hlcmUgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlZCB0aGUgQURUIEluc3RhbGxlciBzY3JpcHQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gd2lsbCBiZSBpbnN0YWxsZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fQURUUEFUSF9ESVI7PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0aW9ucyAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjY29uZmlndXJpbmctYW5kLXJ1bm5pbmctdGhlLWFkdC1pbnN0YWxsZXItc2NyaXB0Jz5Db25maWd1cmluZyBhbmQgUnVubmluZyB0aGUgQURUIEluc3RhbGxlciBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdWlkZSBkZXNjcmliZSBob3cgdG8gaW5zdGFsbCBhIHN0YW5kLWFsb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgdXNpbmcgYSBzeXN0ZW0tZGVyaXZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4sIHRoZSBwYXRoIHlvdSBwcm92aWRlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRvb2xjaGFpbiBSb290IExvY2F0aW9uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLXRvb2xjaGFpbi1mcm9tLXdpdGhpbi10aGUtYnVpbGQtdHJlZSc+VXNpbmcgQml0QmFrZSBhbmQgdGhlIEJ1aWxkIERpcmVjdG9yeTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCB0aGUgdG9vbGNoYWluIGludG8gdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwZWNpZnkgdGhlIFN5c3Jvb3QgTG9jYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBpcyB3aGVyZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IGhhcmR3YXJlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2VkIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgbG9jYXRpb24gaW4geW91ciBob21lIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGZvbGRlciBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdC15b2N0by88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXJnZXRfYXJjaDwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHdoZW4geW91IHVzZSB0aGUgQURUIEluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87L3N5c3Jvb3RzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gaXMgdXNlZCBmb3IgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci1zcGFjZSB0b29scyBhbmQgdGhlIE5GUyBib290IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZWQgZWl0aGVyIG9mIHRoZSBvdGhlciB0d28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyB0byBpbnN0YWxsIHRoZSB0b29sY2hhaW4gb3IgZGlkIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0J3MgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LCB0aGVuIHRoZSBsb2NhdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3lzcm9vdCBmaWxlc3lzdGVtIGRlcGVuZHMgb24gd2hlcmUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlbHkgZXh0cmFjdGVkIGFuZCBpbnN0YWxsZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBhbmQgb24gaG93IHRvIGV4dHJhY3QgYW5kIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgZmlsZXN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjaW5zdGFsbGluZy10aGUtYWR0Jz5JbnN0YWxsaW5nIHRoZSBBRFQgYW5kIFRvb2xjaGFpbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3QgdGhlIFRhcmdldCBBcmNoaXRlY3R1cmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgdGhlIHR5cGUgb2YgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBnb2luZyB0byB1c2Ugb3IgZW11bGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBwdWxsLWRvd24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRhcmdldCBBcmNoaXRlY3R1cmU8L2ZpbGVuYW1lPiBtZW51CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2UgeW91ciBzZWxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwdWxsLWRvd24gbWVudSBzaG91bGQgaGF2ZSB0aGUgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmNoaXRlY3R1cmUgeW91IG5lZWQgaXMgbm90IGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWVudSwgeW91IHdpbGwgbmVlZCB0byBidWlsZCB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS10YXJnZXQtb3B0aW9ucyc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmluZyB0aGUgVGFyZ2V0IE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaG9vc2UgdG8gZW11bGF0ZSBoYXJkd2FyZSB1c2luZyB0aGUgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IsIG9yIHlvdSBjYW4gY2hvb3NlIHRvIHJ1biB5b3VyIGltYWdlIG9uIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UUVNVTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGVtdWxhdG9yLCB5b3UgYWxzbyBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZSB0aGUga2VybmVsIGFuZCBzcGVjaWZ5IGFueSBjdXN0b20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgc3lzdGVtIGRlcml2ZWQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQga2VybmVsIHlvdSBidWlsdCB3aWxsIGJlIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNlbGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIHByZS1idWlsdCB0b29sY2hhaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZS1idWlsdCBpbWFnZSB5b3UgZG93bmxvYWRlZCBpcyBsb2NhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkaXJlY3RvcnkgeW91IHNwZWNpZmllZCB3aGVuIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkIHRoZSBpbWFnZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk1vc3QgY3VzdG9tIG9wdGlvbnMgYXJlIGZvciBhZHZhbmNlZCBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzIHRvIGZ1cnRoZXIgY3VzdG9taXplIHRoZWlyIFFFTVUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBiZXR3ZWVuIHBhaXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZWQgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCBvdXRzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNlcmlhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9ncmFwaGljPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a3ZtPC9maWxlbmFtZT4gbXVzdCBhbGwgYmUgb3V0c2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPm1hbiBxZW11PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgaGVscCBvbiBhbGwgdGhlIG9wdGlvbnMgYW5kIHRoZWlyIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBzZXJpYWwg4oCYJmx0Oy1tIDI1NiAtZnVsbC1zY3JlZW4mZ3Q74oCZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBtb2RlLCBTeXNyb290IGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBDcm9zcy1Db21waWxlciBPcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TeXNyb290IExvY2F0aW9uOjwvZmlsZW5hbWU+IGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4dGVybmFsIEhXOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2lsbCBiZSB1c2luZyBhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhlICJPSyIgdG8gc2F2ZSB5b3VyIHBsdWctaW4gY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctdGhlLXByb2plY3QnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdHdvIHR5cGVzIG9mIHByb2plY3RzOiAgQXV0b3Rvb2xzLWJhc2VkLCBvcgorICAgICAgICAgICAgICAgIE1ha2VmaWxlLWJhc2VkLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBBdXRvdG9vbHMtYmFzZWQgcHJvamVjdHMKKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzIGluIGEKKyAgICAgICAgICAgICAgICB0ZXJtaW5hbCB3aW5kb3csIHNlZSB0aGUgc2VjdGlvbgorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtY29tbWFuZC1saW5lJz5Vc2luZyB0aGUgQ29tbWFuZCBMaW5lPC91bGluaz4iCisgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHByb2plY3QgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gc3BhY2VzLCB1bmRlcnNjb3JlcywgZXRjLikuICBEb2luZyBzbyBjYW4KKyAgICAgICAgICAgICAgICAgICAgY2F1c2UgY29uZmlndXJhdGlvbiB0byBmYWlsLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgcHJvamVjdCBiYXNlZCBvbiBhIFlvY3RvIHRlbXBsYXRlIGFuZCB0aGVuIGRpc3BsYXkKKyAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUsIGZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIlByb2plY3QiIGZyb20gdGhlICJGaWxlIC0+IE5ldyIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG91YmxlIGNsaWNrIDxmaWxlbmFtZT5DQysrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvdWJsZSBjbGljayA8ZmlsZW5hbWU+QyBQcm9qZWN0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB0aGUgcHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBBRFQgQXV0b3Rvb2xzIFByb2plY3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IDxmaWxlbmFtZT5IZWxsbyBXb3JsZCBBTlNJIEMgQXV0b3Rvb2xzIFByb2plY3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYW4gQXV0b3Rvb2xzLWJhc2VkIHByb2plY3QgYmFzZWQgb24gYSBZb2N0bworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QdXQgYSBuYW1lIGluIHRoZSA8ZmlsZW5hbWU+UHJvamVjdCBuYW1lOjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCB1c2UgaHlwaGVucyBhcyBwYXJ0IG9mIHRoZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiTmV4dCIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QXV0aG9yPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q29weXJpZ2h0IG5vdGljZTwvZmlsZW5hbWU+IGZpZWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB0aGUgPGZpbGVuYW1lPkxpY2Vuc2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgaXMgY29ycmVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJGaW5pc2giLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgdGhlICJvcGVuIHBlcnNwZWN0aXZlIiBwcm9tcHQgYXBwZWFycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrICJZZXMiIHNvIHRoYXQgeW91IGluIHRoZSBDL0MrKyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGxlZnQtaGFuZCBuYXZpZ2F0aW9uIHBhbmUgc2hvd3MgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzcGxheSB5b3VyIHNvdXJjZSBieSBkb3VibGUgY2xpY2tpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0J3Mgc291cmNlIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtY3Jvc3MtdG9vbGNoYWlucyc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIENyb3NzLVRvb2xjaGFpbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFybGllciBzZWN0aW9uLAorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz5Db25maWd1cmluZyB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluPC9saW5rPiIsCisgICAgICAgICAgICAgICAgc2V0cyB1cCB0aGUgZGVmYXVsdCBwcm9qZWN0IGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2Ugc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHJvamVjdCBieSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkNoYW5nZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIlByb2plY3QiIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdGlvbiBicmluZ3MgdXAgdGhlIFlvY3RvIFByb2plY3QgU2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIERpYWxvZyBhbmQgYWxsb3dzIHlvdSB0byBtYWtlIGNoYW5nZXMgc3BlY2lmaWMgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgcHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CeSBkZWZhdWx0LCB0aGUgQ3Jvc3MgQ29tcGlsZXIgT3B0aW9ucyBhbmQgVGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIGZvciBhIHByb2plY3QgYXJlIGluaGVyaXRlZCBmcm9tIHNldHRpbmdzIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgdXNpbmcgdGhlIFByZWZlcmVuY2VzIERpYWxvZyBhcyBkZXNjcmliZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyBEaWFsb2cgYWxsb3dzIHlvdSB0byBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhvc2UgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHlvdXIgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY2xpY2sgIk9LIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmlnaHQtY2xpY2sgaW4gdGhlIG5hdmlnYXRpb24gcGFuZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCAiUmVjb25maWd1cmUgUHJvamVjdCIgZnJvbSB0aGUgcG9wLXVwIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdGlvbiByZWNvbmZpZ3VyZXMgdGhlIHByb2plY3QgYnkgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9nZW4uc2g8L2ZpbGVuYW1lPiBpbiB0aGUgd29ya3NwYWNlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBhbHNvIHJ1bnMgPGZpbGVuYW1lPmxpYnRvb2xpemU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hY2xvY2FsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvaGVhZGVyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b21ha2UgLS1hPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBDbGljayBvbiB0aGUgIkNvbnNvbGUiIHRhYiBiZW5lYXRoIHlvdXIgc291cmNlIGNvZGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUgcmVzdWx0cyBvZiByZWNvbmZpZ3VyaW5nIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctdGhlLXByb2plY3QnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIHRoZSBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gYnVpbGQgdGhlIHByb2plY3Qgc2VsZWN0ICJCdWlsZCBQcm9qZWN0IiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICJQcm9qZWN0IiBtZW51LgorICAgICAgICAgICAgICAgIFRoZSBjb25zb2xlIHNob3VsZCB1cGRhdGUgYW5kIHlvdSBjYW4gbm90ZSB0aGUgY3Jvc3MtY29tcGlsZXIKKyAgICAgICAgICAgICAgICB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3N0YXJ0aW5nLXFlbXUtaW4tdXNlci1zcGFjZS1uZnMtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U3RhcnRpbmcgUUVNVSBpbiBVc2VyLVNwYWNlIE5GUyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc3RhcnQgdGhlIFFFTVUgZW11bGF0b3IgZnJvbSB3aXRoaW4gRWNsaXBzZSwgZm9sbG93IHRoZXNlCisgICAgICAgICAgICAgICAgc3RlcHM6CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3NlIGFuZCBzZWxlY3QgIkV4dGVybmFsIFRvb2xzIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIlJ1biIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgaW1hZ2Ugc2hvdWxkIGFwcGVhciBhcyBhIHNlbGVjdGFibGUgbWVudSBpdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgeW91ciBpbWFnZSBmcm9tIHRoZSBtZW51IHRvIGxhdW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVtdWxhdG9yIGluIGEgbmV3IHdpbmRvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgbmVlZGVkLCBlbnRlciB5b3VyIGhvc3Qgcm9vdCBwYXNzd29yZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNoZWxsIHdpbmRvdyBhdCB0aGUgcHJvbXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXRzIHVwIGEgPGZpbGVuYW1lPlRhcCAwPC9maWxlbmFtZT4gY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkIGZvciBydW5uaW5nIGluIHVzZXItc3BhY2UgTkZTIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldhaXQgZm9yIFFFTVUgdG8gbGF1bmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+T25jZSBRRU1VIGxhdW5jaGVzLCB5b3UgY2FuIGJlZ2luIG9wZXJhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmUgdXNlZnVsIHRhc2sgYXQgdGhpcyBwb2ludCB3b3VsZCBiZSB0byBkZXRlcm1pbmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBJUCBBZGRyZXNzIGZvciB0aGUgdXNlci1zcGFjZSBORlMgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pZmNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGVwbG95aW5nLWFuZC1kZWJ1Z2dpbmctdGhlLWFwcGxpY2F0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXBsb3lpbmcgYW5kIERlYnVnZ2luZyB0aGUgQXBwbGljYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBRRU1VIGVtdWxhdG9yIGlzIHJ1bm5pbmcgdGhlIGltYWdlLCB5b3UgY2FuIGRlcGxveQorICAgICAgICAgICAgICAgIHlvdXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIEVjbGlwc2UgSURFIGFuZCB0aGVuIHVzZQorICAgICAgICAgICAgICAgIHRoZSBlbXVsYXRvciB0byBwZXJmb3JtIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gZGVwbG95IHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkRlYnVnIENvbmZpZ3VyYXRpb25zLi4uIiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIlJ1biIgbWVudS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBsZWZ0IGFyZWEsIGV4cGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkMvQysrUmVtb3RlIEFwcGxpY2F0aW9uPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxvY2F0ZSB5b3VyIHByb2plY3QgYW5kIHNlbGVjdCBpdCB0byBicmluZworICAgICAgICAgICAgICAgICAgICAgICAgdXAgYSBuZXcgdGFiYmVkIHZpZXcgaW4gdGhlIERlYnVnIENvbmZpZ3VyYXRpb25zIERpYWxvZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW50ZXIgdGhlIGFic29sdXRlIHBhdGggaW50byB3aGljaCB5b3Ugd2FudAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZGVwbG95IHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgIlJlbW90ZSBBYnNvbHV0ZSBGaWxlIFBhdGggZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBDL0MrK0FwcGxpY2F0aW9uOiIgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2Jpbi88cmVwbGFjZWFibGU+cHJvZ3JhbW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayBvbiB0aGUgIkRlYnVnZ2VyIiB0YWIgdG8gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbCBkZWJ1Z2dlciB5b3UgYXJlIHVzaW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgb24gdGhlICJNYWluIiB0YWIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYSBuZXcgY29ubmVjdGlvbiB0byB0aGUgUUVNVSBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgYnkgY2xpY2tpbmcgb24gIm5ldyIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgPGZpbGVuYW1lPlRDRjwvZmlsZW5hbWU+LCB3aGljaCBtZWFucworICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk5leHQiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xlYXIgb3V0IHRoZSAiaG9zdCBuYW1lIiBmaWVsZCBhbmQgZW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBJUCBBZGRyZXNzIGRldGVybWluZWQgZWFybGllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJGaW5pc2giIHRvIGNsb3NlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgTmV3IENvbm5lY3Rpb25zIERpYWxvZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgZHJvcC1kb3duIG1lbnUgbm93IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24iIGZpZWxkIGFuZCBwaWNrIHRoZSBJUCBBZGRyZXNzIHlvdSBlbnRlcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkRlYnVnIiB0byBicmluZyB1cCBhIGxvZ2luIHNjcmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxvZ2luLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWNjZXB0IHRoZSBkZWJ1ZyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncnVubmluZy11c2VyLXNwYWNlLXRvb2xzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SdW5uaW5nIFVzZXItU3BhY2UgVG9vbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciBpbiB0aGUgbWFudWFsLCBzZXZlcmFsIHRvb2xzIGV4aXN0IHRoYXQKKyAgICAgICAgICAgICAgICBlbmhhbmNlIHlvdXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZS4KKyAgICAgICAgICAgICAgICBUaGVzZSB0b29scyBhcmUgYWlkcyBpbiBkZXZlbG9waW5nIGFuZCBkZWJ1Z2dpbmcgYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgYW5kIGltYWdlcy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGVzZSB1c2VyLXNwYWNlIHRvb2xzIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgSURFIHRocm91Z2ggdGhlICJZb2N0b1Byb2plY3RUb29scyIgbWVudS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgcGljayBhIHRvb2wsIHlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBpdCBmb3IgdGhlIHJlbW90ZQorICAgICAgICAgICAgICAgIHRhcmdldC4KKyAgICAgICAgICAgICAgICBFdmVyeSB0b29sIG5lZWRzIHRvIGhhdmUgdGhlIGNvbm5lY3Rpb24gY29uZmlndXJlZC4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZWxlY3QgYW4gZXhpc3RpbmcgVENGLWJhc2VkIFJTRSBjb25uZWN0aW9uIHRvIHRoZQorICAgICAgICAgICAgICAgIHJlbW90ZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgSWYgb25lIGRvZXMgbm90IGV4aXN0LCBjbGljayAiTmV3IiB0byBjcmVhdGUgb25lLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHNwZWNpZmljcyBhYm91dCB0aGUgcmVtb3RlIHRvb2xzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPk9Qcm9maWxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGluZyB0aGlzIHRvb2wgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlLXNlcnZlcjwvZmlsZW5hbWU+IG9uIHRoZSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0byBsYXVuY2ggb24gdGhlIGxvY2FsIGhvc3QgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b3Byb2ZpbGUtdmlld2VyPC9maWxlbmFtZT4gbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIG9uIHRoZSBsb2NhbCBob3N0IG1hY2hpbmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlLXNlcnZlcjwvZmlsZW5hbWU+IG11c3QgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgcmVtb3RlIHRhcmdldCwgcmVzcGVjdGl2ZWx5LCBpbiBvcmRlciB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjb21waWxlIGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IGZyb20gdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgY29kZSBvbiB5b3VyIGxvY2FsIGhvc3QgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBpbiBvcmRlciB0byBjb252ZXJ0IHRoZSB0YXJnZXQncyBzYW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBkYXRhIGludG8gYSBmb3JtIHRoYXQgdGhlIGhvc3QgY2FuIHVzZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgT1Byb2ZpbGUgdmVyc2lvbiAwLjkuNCBvciBncmVhdGVyIGluc3RhbGxlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBsb2NhdGUgYm90aCB0aGUgdmlld2VyIGFuZCBzZXJ2ZXIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvb3Byb2ZpbGV1aS8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyB0b29sIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1vcHJvZmlsZSc+b3Byb2ZpbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5UaGUgPGZpbGVuYW1lPm9wcm9maWxlLXNlcnZlcjwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYnkgZGVmYXVsdCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8tc2RrPC9maWxlbmFtZT4gaW1hZ2UuPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkx0dG5nMi4wIHRyYWNlIGltcG9ydDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RpbmcgdGhpcyB0b29sIHRyYW5zZmVycyB0aGUgcmVtb3RlIHRhcmdldCdzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THR0bmc8L2ZpbGVuYW1lPiB0cmFjaW5nIGRhdGEgYmFjayB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIGhvc3QgbWFjaGluZSBhbmQgdXNlcyB0aGUgTHR0bmcgRWNsaXBzZSBwbHVnLWluCisgICAgICAgICAgICAgICAgICAgICAgICB0byBncmFwaGljYWxseSBkaXNwbGF5IHRoZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBMdHRuZyB0byB0cmFjZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgPHVsaW5rIHVybD0naHR0cDovL2x0dG5nLm9yZy9kb2N1bWVudGF0aW9uJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNsdHRuZy1saW51eC10cmFjZS10b29sa2l0LW5leHQtZ2VuZXJhdGlvbic+TFRUbmcgKExpbnV4IFRyYWNlIFRvb2xraXQsIG5leHQgZ2VuZXJhdGlvbik8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGlzIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNpbmcgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+RG8gbm90IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MdHRuZy11c2VyIHNwYWNlIChsZWdhY3kpPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHRvb2wgbm8gbG9uZ2VyIGhhcyBhbnkgdXBzdHJlYW0gc3VwcG9ydC48L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5CZWZvcmUgeW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MdHRuZzIuMCB0cmFjZSBpbXBvcnQ8L2ZpbGVuYW1lPiB0b29sLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gc2V0dXAgdGhlIEx0dG5nIEVjbGlwc2UgcGx1Zy1pbiBhbmQgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNpbmcgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiT3BlbiBQZXJzcGVjdGl2ZSIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmRvdyIgbWVudSBhbmQgdGhlbiBzZWxlY3QgIk90aGVyLi4uIiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmluZyB1cCBhIG1lbnUgb2Ygb3RoZXIgcGVyc3BlY3RpdmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIlRyYWNpbmciLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk9LIiB0byBjaGFuZ2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc3BlY3RpdmUgaW50byB0aGUgVHJhY2luZyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIG5ldyBUcmFjaW5nIHByb2plY3QgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW5nICJQcm9qZWN0IiBmcm9tIHRoZSAiRmlsZSAtPiBOZXciIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaG9vc2UgIlRyYWNpbmcgUHJvamVjdCIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYWNpbmciIG1lbnUgYW5kIGNsaWNrICJOZXh0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgYSBuYW1lIGZvciB5b3VyIHRyYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCBhbmQgY2xpY2sgIkZpbmlzaCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZW5lcmF0ZSB5b3VyIHRyYWNpbmcgZGF0YSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJMdHRuZzIuMCB0cmFjZSBpbXBvcnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlICJZb2N0byBQcm9qZWN0IFRvb2xzIiBtZW51IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHRoZSBkYXRhIGltcG9ydCBwcm9jZXNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TcGVjaWZ5IHlvdXIgcmVtb3RlIGNvbm5lY3Rpb24gbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciB0aGUgVXN0IGRpcmVjdG9yeSBwYXRoLCBzcGVjaWZ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB5b3VyIHJlbW90ZSB0cmFjaW5nIGRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB0aGUgbG9jYXRpb24gZW5kcyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51c3Q8L2ZpbGVuYW1lPiAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9teXNlc3Npb24vdXN0PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk9LIiB0byBjb21wbGV0ZSB0aGUgaW1wb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhIGlzIG5vdyBpbiB0aGUgbG9jYWwgdHJhY2luZyBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjcmVhdGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SaWdodCBjbGljayBvbiB0aGUgZGF0YSBhbmQgdGhlbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1lbnUgdG8gU2VsZWN0ICJHZW5lcmljIENURiBUcmFjZSIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYWNlIFR5cGUuLi4gLT4gQ29tbW9uIFRyYWNlIEZvcm1hdCIgbWVudSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAgdGhlIHRyYWNpbmcgdHlwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmlnaHQgY2xpY2sgdGhlIG1vdXNlIGFuZCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wZW4iIHRvIGJyaW5nIHVwIHRoZSBFY2xpcHNlIEx0dG5nIFRyYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdlciBzbyB5b3UgdmlldyB0aGUgdHJhY2luZyBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlBvd2VyVE9QPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGluZyB0aGlzIHRvb2wgcnVucyBQb3dlclRPUCBvbiB0aGUgcmVtb3RlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBhbmQgZGlzcGxheXMgdGhlIHJlc3VsdHMgaW4gYSBuZXcgdmlldyBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyVE9QLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSAiVGltZSB0byBnYXRoZXIgZGF0YShzZWMpOiIgZmllbGQgaXMgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBzZWNvbmRzIGJlZm9yZSBkYXRhIGlzIGdhdGhlcmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUgdGFyZ2V0IGZvciBhbmFseXNpcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgInNob3cgcGlkcyBpbiB3YWtldXBzIGxpc3Q6IiBmaWVsZCBjb3JyZXNwb25kcworICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT4tcDwvZmlsZW5hbWU+IGFyZ3VtZW50IHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBvd2VyVE9QPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkxhdGVuY3lUT1AgYW5kIFBlcmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgTGF0ZW5jeVRPUCBpZGVudGlmaWVzIHN5c3RlbSBsYXRlbmN5LCB3aGlsZQorICAgICAgICAgICAgICAgICAgICAgICAgUGVyZiBtb25pdG9ycyB0aGUgc3lzdGVtJ3MgcGVyZm9ybWFuY2UgY291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW5nIGVpdGhlciBvZiB0aGVzZSB0b29scyBjYXVzZXMgYW4gUlNFIHRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IHRvIGFwcGVhciBmcm9tIHdoaWNoIHlvdSBjYW4gcnVuIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvdGggdG9vbHMgcmVmcmVzaCB0aGUgZW50aXJlIHNjcmVlbiB0byBkaXNwbGF5IHJlc3VsdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRoZXkgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wZXJmPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtcGVyZic+cGVyZjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TeXN0ZW1UYXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtdGFwIGlzIGEgdG9vbCB0aGF0IGxldHMgeW91IGNyZWF0ZSBhbmQgcmV1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgdG8gZXhhbWluZSB0aGUgYWN0aXZpdGllcyBvZiBhIGxpdmUgTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZWFzaWx5IGV4dHJhY3QsIGZpbHRlciwgYW5kIHN1bW1hcml6ZSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGhlbHBzIHlvdSBkaWFnbm9zZSBjb21wbGV4IHBlcmZvcm1hbmNlIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsIHByb2JsZW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TeXN0ZW1UYXA8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9zeXN0ZW10YXAvZG9jdW1lbnRhdGlvbi5odG1sJz5TeXN0ZW1UYXAgRG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHRvb2wgbGV0cyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1aWNrbHkgc2V0IHVwIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgcmVxdWlyZXMgYSBNZXRhZGF0YSBsb2NhdGlvbiwgYnVpbGQgbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBCU1AgbmFtZSwgQlNQIG91dHB1dCBsb2NhdGlvbiwgYW5kIGEga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiB0b29sIG91dHNpZGUgb2YgRWNsaXBzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgbmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIChCU1ApIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2Zsb3ctdXNpbmctc3RhbmQtYWxvbmUtY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucyc+CisgICAgICAgIDx0aXRsZT5Xb3JrZmxvdyBVc2luZyBTdGFuZC1BbG9uZSBDcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW5zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGRldmVsb3AgYW4gYXBwbGljYXRpb24gd2l0aG91dCBwcmlvciBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgIG9mIHRoZSBBRFQsIHlvdSBzdGlsbCBjYW4gZW1wbG95IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcyBEZXZlbG9wbWVudCBUb29sY2hhaW48L2xpbms+LAorICAgICAgICAgICAgdGhlIFFFTVUgZW11bGF0b3IsIGFuZCBhIG51bWJlciBvZiBzdXBwb3J0ZWQgIHRhcmdldCBpbWFnZSBmaWxlcy4KKyAgICAgICAgICAgIFlvdSBqdXN0IG5lZWQgdG8gZm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHM6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIHRoZSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gZm9yIHlvdXIgdGFyZ2V0IGhhcmR3YXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzCisgICAgICAgICAgICAgICAgICAgIEd1aWRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG93bmxvYWQgdGhlIFRhcmdldCBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBzZXZlcmFsIHRhcmdldCBhcmNoaXRlY3R1cmVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBoYXMgbWFueSBwcmUtYnVpbHQga2VybmVsIGltYWdlcyBhbmQgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGltYWdlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLCBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsnPjxmaWxlbmFtZT5tYWNoaW5lczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQgYXJlYSBhbmQgY2hvb3NlIGEgdGFyZ2V0IG1hY2hpbmUgYXJlYQorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHRvIGRvd25sb2FkIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkb3dubG9hZCBhcmVhIGNvdWxkIGhhdmUgc2V2ZXJhbCBmaWxlcyBpbiBpdCB0aGF0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZGV2ZWxvcG1lbnQgdXNpbmcgYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGFyZWEgbWlnaHQgY29udGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGZpbGVzIHRoYXQgY29tYmluZSB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIHdpdGggdGhlIGZpbGVzeXN0ZW0sIGJvb3QgbG9hZGVycywgYW5kCisgICAgICAgICAgICAgICAgICAgIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGdldCB0aGUgZmlsZXMgeW91IG5lZWQgZm9yIHlvdXIgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBwcm9jZXNzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGFyZSBnb2luZyB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24gYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZW4gcnVuIGFuZCB0ZXN0IGl0IHVzaW5nIHRoZSBRRU1VIGVtdWxhdG9yLCBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+PGZpbGVuYW1lPm1hY2hpbmVzL3FlbXU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIGFyZWEuCisgICAgICAgICAgICAgICAgICAgIEZyb20gdGhpcyBhcmVhLCBnbyBkb3duIGludG8gdGhlIGRpcmVjdG9yeSBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlIChlLmcuIDxmaWxlbmFtZT5xZW11eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFuIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+LWJhc2VkCisgICAgICAgICAgICAgICAgICAgIDY0LWJpdCBhcmNoaXRlY3R1cmUpLgorICAgICAgICAgICAgICAgICAgICBEb3dubG9hZCBrZXJuZWwsIHJvb3QgZmlsZXN5c3RlbSwgYW5kIGFueSBvdGhlciBmaWxlcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgbmVlZCBmb3IgeW91ciBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5JbiBvcmRlciB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbiBRRU1VLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBleHRyYWN0IGl0LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPkV4dHJhY3RpbmcgdGhlIFJvb3QgRmlsZXN5c3RlbTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXh0cmFjdCB0aGUgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLjwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRldmVsb3AgYW5kIFRlc3QgeW91cgorICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbjo8L2VtcGhhc2lzPiAgQXQgdGhpcyBwb2ludCwgeW91IGhhdmUgdGhlIHRvb2xzCisgICAgICAgICAgICAgICAgICAgIHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gc2VwYXJhdGVseSBpbnN0YWxsIGFuZCB1c2UgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IsIHlvdSBjYW4gZ28gdG8KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFpbl9QYWdlJz5RRU1VIEhvbWUgUGFnZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRvIGRvd25sb2FkIGFuZCBsZWFybiBhYm91dCB0aGUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBmb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUUVNVSB3aXRoaW4gdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iZGV2LW1vZGlmeWluZy1zb3VyY2UtY29kZSI+CisgICAgPHRpdGxlPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBjb21tb24gZGV2ZWxvcG1lbnQgd29ya2Zsb3cgY29uc2lzdHMgb2YgbW9kaWZ5aW5nIHByb2plY3Qgc291cmNlCisgICAgICAgIGZpbGVzIHRoYXQgYXJlIGV4dGVybmFsIHRvIHRoZSBZb2N0byBQcm9qZWN0IGFuZCB0aGVuIGludGVncmF0aW5nCisgICAgICAgIHRoYXQgcHJvamVjdCdzIGJ1aWxkIG91dHB1dCBpbnRvIGFuIGltYWdlIGJ1aWx0IHVzaW5nIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBHaXZlbiB0aGlzIHNjZW5hcmlvLCBkZXZlbG9wbWVudCBlbmdpbmVlcnMgdHlwaWNhbGx5IHdhbnQgdG8gc3RpY2sKKyAgICAgICAgdG8gdGhlaXIgZmFtaWxpYXIgcHJvamVjdCBkZXZlbG9wbWVudCB0b29scyBhbmQgbWV0aG9kcywgd2hpY2ggYWxsb3dzCisgICAgICAgIHRoZW0gdG8ganVzdCBmb2N1cyBvbiB0aGUgcHJvamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU2V2ZXJhbCB3b3JrZmxvd3MgZXhpc3QgdGhhdCBhbGxvdyB5b3UgdG8gZGV2ZWxvcCwgYnVpbGQsIGFuZCB0ZXN0CisgICAgICAgIGNvZGUgdGhhdCBpcyBnb2luZyB0byBiZSBpbnRlZ3JhdGVkIGludG8gYW4gaW1hZ2UgYnVpbHQgdXNpbmcgdGhlCisgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdHdvOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBzZXQgb2YgdG9vbHMgdG8gYWlkIGluIHdvcmtpbmcgb24gdGhlIHNvdXJjZSBjb2RlIGJ1aWx0IGJ5CisgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgU2VjdGlvbgorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLWluLXlvdXItd29ya2Zsb3cnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICAgICAgZGVzY3JpYmVzIHRoaXMgd29ya2Zsb3cuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgbW9yZSBpbmZvcm1hdGlvbiB0aGF0IHNob3djYXNlcyB0aGUgd29ya2Zsb3csIGNsaWNrCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2EvbGluYXJvLm9yZy9maWxlL2QvMEIzS0d6WTVmVzdsYVREVnhVWG8zVURSdmQycy92aWV3Jz5oZXJlPC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3IgYW4gZXhjZWxsZW50IHByZXNlbnRhdGlvbiBieSBUcmV2b3IgV29lcm5lciB0aGF0CisgICAgICAgICAgICAgICAgcHJvdmlkZXMgZGV0YWlsZWQgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhbmQgYSBjb21wbGV0ZQorICAgICAgICAgICAgICAgIHdvcmtpbmcgdHV0b3JpYWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjx1bGluayB1cmw9J2h0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0Jz5RdWlsdDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBwb3dlcmZ1bCB0b29sIHRoYXQgYWxsb3dzIHlvdSB0byBjYXB0dXJlIHNvdXJjZQorICAgICAgICAgICAgICAgIGNvZGUgY2hhbmdlcyB3aXRob3V0IGhhdmluZyBhIGNsZWFuIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgICAgIFdoaWxlIFF1aWx0IGlzIG5vdCB0aGUgcHJlZmVycmVkIHdvcmtmbG93IG9mIHRoZSB0d28sIHRoaXMKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluY2x1ZGVzIGl0IGZvciB1c2VycyB0aGF0IGFyZSBjb21taXR0ZWQgdG8gdXNpbmcKKyAgICAgICAgICAgICAgICB0aGUgdG9vbC4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy1kZXZ0b29sLWluLXlvdXItd29ya2Zsb3cnPgorICAgICAgICA8dGl0bGU+VXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBpbiBZb3VyIFdvcmtmbG93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGhlbHBzCisgICAgICAgICAgICB5b3UgZWFzaWx5IGRldmVsb3AgcHJvamVjdHMgd2hvc2UgYnVpbGQgb3V0cHV0IG11c3QgYmUgcGFydCBvZgorICAgICAgICAgICAgYW4gaW1hZ2UgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyB0aGUgd29ya2Zsb3cgeW91IHdvdWxkCisgICAgICAgICAgICB1c2UgdGhhdCBpbmNsdWRlcyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPGZvb3Rub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBLdWRvcyBhbmQgdGhhbmtzIHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J21haWx0bzp0d29lcm5lckBnbWFpbC5jb20nPlRyZXZvciBXb2VybmVyPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hvc2UKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvMEIzS0d6WTVmVzdsYVREVnhVWG8zVURSdmQycy92aWV3Jz5Zb2N0byBQcm9qZWN0IERldmVsb3BlciBXb3JrZmxvdyBUdXRvcmlhbDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBwYXBlciBjb250cmlidXRlZCBuaWNlbHkgdG93YXJkcyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZm9vdG5vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzdGVwcyBpbiB0aGlzIHNlY3Rpb24gYXNzdW1lIHlvdSBoYXZlIGEgcHJldmlvdXNseSBidWlsdAorICAgICAgICAgICAgaW1hZ2UgdGhhdCBpcyBhbHJlYWR5IGVpdGhlciBydW5uaW5nIGluIFFFTVUgb3IgcnVubmluZyBvbiBhY3R1YWwKKyAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgQWxzbywgaXQgaXMgYXNzdW1lZCB0aGF0IGZvciBkZXBsb3ltZW50IG9mIHRoZSBpbWFnZSB0byB0aGUKKyAgICAgICAgICAgIHRhcmdldCwgU1NIIGlzIGluc3RhbGxlZCBpbiB0aGUgaW1hZ2UgYW5kIGlmIHRoZSBpbWFnZSBpcyBydW5uaW5nCisgICAgICAgICAgICBvbiByZWFsIGhhcmR3YXJlIHRoYXQgeW91IGhhdmUgbmV0d29yayBhY2Nlc3MgdG8gYW5kIGZyb20geW91cgorICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbWFjaGluZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1cGRhdGUteW91ci1leHRlcm5hbC1zb3VyY2UnPgorICAgICAgICAgICAgPHRpdGxlPlVwZGF0ZSBZb3VyIEV4dGVybmFsIFNvdXJjZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBhcnQgb2YgdGhlIGRldmVsb3BtZW50IGZsb3cgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IG9mIGNvdXJzZSBpbnZvbHZlcyB1cGRhdGluZworICAgICAgICAgICAgICAgIHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIFNldmVyYWwgb3Bwb3J0dW5pdGllcyBleGlzdCBpbiB0aGUgd29ya2Zsb3cgdG8gZXh0cmFjdCBhbmQKKyAgICAgICAgICAgICAgICB3b3JrIG9uIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBGb3Igbm93LCBqdXN0IHJlYWxpemUgdGhhdCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGhhdmUKKyAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gYW5kIGVkaXQgZmlsZXMuCisgICAgICAgICAgICAgICAgT25lIG9idmlvdXMgc29sdXRpb24gaXMgdG8gaW5pdGlhbGx5IGV4dHJhY3QgdGhlIGNvZGUgaW50byBhbgorICAgICAgICAgICAgICAgIGlzb2xhdGVkIGFyZWEgaW4gcHJlcGFyYXRpb24gZm9yIG1vZGlmaWNhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBvcHRpb24gaXMgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIG1ha2VzIHVzZSBvZiBhICJ3b3Jrc3BhY2UiIGxheWVyIHdoZXJlIG11Y2ggb2YKKyAgICAgICAgICAgICAgICB0aGUgdHJhbnNpdGlvbmFsIHdvcmsgb2NjdXJzLCB3aGljaCBpcyBuZWVkZWQgZm9yIHNldHRpbmcgdXAKKyAgICAgICAgICAgICAgICBNZXRhZGF0YSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRoYXQgbGV0cyB5b3UKKyAgICAgICAgICAgICAgICBidWlsZCB5b3VyIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIE9wdGlvbnMgKGkuZS4gIi14IikgZXhpc3QgdXNpbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRoYXQgZW5hYmxlIHlvdSB0byB1c2UgdGhlIHRvb2wgdG8gZXh0cmFjdCBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2UtZGV2dG9vbC10by1pbnRlZ3JhdGUteW91ci1jb2RlLXdpdGgtdGhlLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2UgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gdG8gSW50ZWdyYXRlIFlvdXIgQ29kZSB3aXRoIHRoZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZXMgdGhlIG5lZWRlZCBNZXRhZGF0YSB0aGF0IGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHlvdXIgY29kZSBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSBwYWNrYWdlIG9yIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IHRoZSByZWNpcGUgb24gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91IGFyZSB3b3JraW5nIGFyZSBub3QgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgaW1hZ2UsIHlvdSBtdXN0IGFkZCB0aGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBhZGQgdGhlbSBmb3IgeW91LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIDxyZXBsYWNlYWJsZT55b3VyLXByb2plY3QtbmFtZTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnBhdGgtdG8tc291cmNlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBmb3IgdGhlIGZpcnN0IHRpbWUKKyAgICAgICAgICAgICAgICBjcmVhdGVzIGEgd29ya3NwYWNlIGxheWVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICBpcyBiYXNlZCBvbiB5b3VyIHByb2plY3QncyBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYXRoLXRvLXNvdXJjZTwvcmVwbGFjZWFibGU+LzxyZXBsYWNlYWJsZT5idWlsZC1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+d29ya3NwYWNlLWxheWVyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZSBsYXllciBpcyAid29ya3NwYWNlIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlIHdvcmtzcGFjZSBsYXllciBjcmVhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5idWlsZC1kaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPiwKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtYWRkaW5nLWEtbmV3LXJlY2lwZS10by10aGUtd29ya3NwYWNlJz5BZGRpbmcgYSBOZXcgUmVjaXBlIHRvIHRoZSBXb3Jrc3BhY2UgTGF5ZXI8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKzwhLS0KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgZWFjaCBsYXllciBtdXN0IGhhdmUgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gYWxzbyBjcmVhdGVzIHRoaXMgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNhdCB3b3Jrc3BhY2UvY29uZi9sYXllci5jb25mCisgICAgICMgIyMjIHdvcmtzcGFjZSBsYXllciBhdXRvwq1nZW5lcmF0ZWQgYnkgZGV2dG9vbCAjIyMKKyAgICAgQkJQQVRIID0uICIke0xBWUVSRElSfToiCisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMvKi8qLmJiIFwKKyAgICAgICAgICAgICAgICAgJHtMQVlFUkRJUn0vYXBwZW5kcy8qLmJiYXBwZW5kIgorICAgICBCQkZJTEVfQ09MTEVDVElPTlMgKz0gIndvcmtzcGFjZWxheWVyIgorICAgICBCQkZJTEVfUEFUVEVSTl93b3Jrc3BhY2VsYXllciA9ICJeJHtMQVlFUkRJUn0vIgorICAgICBCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfd29ya3NwYWNlbGF5ZXIgPSAiMSIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX3dvcmtzcGFjZWxheWVyID0gIjk5IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKy0tPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZXMgeW91ciByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNhdCB3b3Jrc3BhY2UvcmVjaXBlcy88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPi5iYgorICAgICAjIFJlY2lwZSBjcmVhdGVkIGJ5IHJlY2lwZXRvb2wKKyAgICAgIyBUaGlzIGlzIHRoZSBiYXNpcyBvZiBhIHJlY2lwZSBhbmQgbWF5IG5lZWQgZnVydGhlciBlZGl0aW5nIGluIG9yZGVyIHRvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgICMgKEZlZWwgZnJlZSB0byByZW1vdmUgdGhlc2UgY29tbWVudHMgd2hlbiBlZGl0aW5nLikKKyAgICAgIworICAgICAjIFVuYWJsZSB0byBmaW5kIGFueSBmaWxlcyB0aGF0IGxvb2tlZCBsaWtlIGxpY2Vuc2Ugc3RhdGVtZW50cy4gQ2hlY2sgdGhlIGFjY29tcGFueWluZworICAgICAjIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZSBoZWFkZXJzIGFuZCBzZXQgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSBhY2NvcmRpbmdseS4KKyAgICAgTElDRU5TRSA9ICJDTE9TRUQiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgICMgTm8gaW5mb3JtYXRpb24gZm9yIFNSQ19VUkkgeWV0IChvbmx5IGFuIGV4dGVybmFsIHNvdXJjZSB0cmVlIHdhcworICAgICAjIHNwZWNpZmllZCkKKyAgICAgU1JDX1VSSSA9ICIiCisKKyAgICAgREVQRU5EUyA9ICJsaWJ4MTEiCisgICAgICMgTk9URTogaWYgdGhpcyBzb2Z0d2FyZSBpcyBub3QgY2FwYWJsZSBvZiBiZWluZyBidWlsdCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeQorICAgICAjIGZyb20gdGhlIHNvdXJjZSwgeW91IHNob3VsZCByZXBsYWNlIGF1dG90b29scyB3aXRoIGF1dG90b29sc8KtLWJyb2tlbnNlcCBpbiB0aGUKKyAgICAgIyBpbmhlcml0IGxpbmUKKyAgICAgaW5oZXJpdCBhdXRvdG9vbHMKKworICAgICAjIFNwZWNpZnkgYW55IG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgY29uZmlndXJlIHNjcmlwdCB1c2luZyBFWFRSQV9PRUNPTkY6CisgICAgIEVYVFJBX09FQ09ORiA9ICIiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBMYXN0bHksIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNyZWF0ZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNhdCB3b3Jrc3BhY2UvYXBwZW5kcy88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPi5iYmFwcGVuZAorICAgICBpbmhlcml0IGV4dGVybmFsc3JjCisgICAgIEVYVEVSTkFMU1JDID0gIi88cmVwbGFjZWFibGU+cGF0aC10by1zb3VyY2U8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPiIKKworICAgICAjIGluaXRpYWxfcmV2OiA8cmVwbGFjZWFibGU+Y29tbWl0LUlEPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQteW91ci1wcm9qZWN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZCBZb3VyIFByb2plY3Q8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBCaXRCYWtlIG9yIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICBidWlsZCB5b3VyIG1vZGlmaWVkIHByb2plY3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSBCaXRCYWtlLCB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGJ1aWxkPC9maWxlbmFtZT4sIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYnVpbGQgPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworPCEtLQorICAgICAgICA8c2VjdGlvbiBpZD0nZGV2LWJ1aWxkLXRoZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgdGhlIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHN0ZXAgYmVmb3JlIHRlc3RpbmcgaXMgdG8gcmVidWlsZCB0aGUgYmFzZSBpbWFnZQorICAgICAgICAgICAgICAgIHdpdGggeW91ciBwcm9qZWN0IGNoYW5nZXMgYXMgcGFydCBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgU2ltcGx5IHJ1biBCaXRCYWtlIGFnYWluIG9uIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rldi10ZXN0aW5nLXRoZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VGVzdGluZyB0aGUgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHRoZSBpbWFnZSwgeW91IGNhbiB0ZXN0IGl0IHVzaW5nIFFFTVUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGFzc3VtaW5nICJxZW11eDg2IjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2IDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdGVzdCBhbiBpbWFnZSB1c2luZyBRRU1VLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorLS0+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtcXVpY2stcmVmZXJlbmNlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gUXVpY2sgUmVmZXJlbmNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaGFzIG1vcmUgZnVuY3Rpb25hbGl0eSB0aGFuIHNpbXBseQorICAgICAgICAgICAgYWRkaW5nIGEgbmV3IHJlY2lwZSBhbmQgdGhlIHN1cHBvcnRpbmcgTWV0YWRhdGEgdG8gYSB0ZW1wb3JhcnkKKyAgICAgICAgICAgIHdvcmtzcGFjZSBsYXllci4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHNob3J0IHJlZmVyZW5jZSBvbgorICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBmb3IgbW9zdCBvZiB0aGUgY29tbWFuZHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1nZXR0aW5nLWhlbHAnPgorICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgSGVscDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBnZXQgaGVscCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY29tbWFuZCBpcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT4gb3B0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIC0taGVscAorICAgICB1c2FnZTogZGV2dG9vbCBbLWhdIFstLWJhc2VwYXRoIEJBU0VQQVRIXSBbLWRdIFstcV0gWy0tY29sb3IgQ09MT1JdCisgICAgICAgICAgICAgICAmbHQ7c3ViY29tbWFuZCZndDsgLi4uCisKKyAgICAgT3BlbkVtYmVkZGVkIGRldmVsb3BtZW50IHRvb2wKKworICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tYmFzZXBhdGggQkFTRVBBVEggIEJhc2UgZGlyZWN0b3J5IG9mIFNESyAvIGJ1aWxkIGRpcmVjdG9yeQorICAgICAgIC1kLCAtLWRlYnVnICAgICAgICAgIEVuYWJsZSBkZWJ1ZyBvdXRwdXQKKyAgICAgICAtcSwgLS1xdWlldCAgICAgICAgICBQcmludCBvbmx5IGVycm9ycworICAgICAgIC0tY29sb3IgQ09MT1IgICAgICAgIENvbG9yaXplIG91dHB1dCAod2hlcmUgQ09MT1IgaXMgYXV0bywgYWx3YXlzLCBuZXZlcikKKworICAgICBzdWJjb21tYW5kczoKKyAgICAgICAmbHQ7c3ViY29tbWFuZCZndDsKKyAgICAgICAgIGNyZWF0ZS13b3Jrc3BhY2UgICBTZXQgdXAgYSB3b3Jrc3BhY2UKKyAgICAgICAgIGRlcGxveS10YXJnZXQgICAgICBEZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyB0byBsaXZlIHRhcmdldCBtYWNoaW5lCisgICAgICAgICB1bmRlcGxveS10YXJnZXQgICAgVW5kZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyBpbiBsaXZlIHRhcmdldCBtYWNoaW5lCisgICAgICAgICBhZGQgICAgICAgICAgICAgICAgQWRkIGEgbmV3IHJlY2lwZQorICAgICAgICAgbW9kaWZ5ICAgICAgICAgICAgIE1vZGlmeSB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUKKyAgICAgICAgIGV4dHJhY3QgICAgICAgICAgICBFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZQorICAgICAgICAgdXBkYXRlLXJlY2lwZSAgICAgIEFwcGx5IGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgdHJlZSB0byByZWNpcGUKKyAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICBTaG93IHdvcmtzcGFjZSBzdGF0dXMKKyAgICAgICAgIGJ1aWxkICAgICAgICAgICAgICBCdWlsZCBhIHJlY2lwZQorICAgICAgICAgcmVzZXQgICAgICAgICAgICAgIFJlbW92ZSBhIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlCisKKyAgICAgVXNlIGRldnRvb2wgJmx0O3N1YmNvbW1hbmQmZ3Q7IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGRpcmVjdGVkIGluIHRoZSBnZW5lcmFsIGhlbHAgb3V0cHV0LCB5b3UgY2FuIGdldCBtb3JlCisgICAgICAgICAgICAgICAgc3ludGF4IG9uIGEgc3BlY2lmaWMgY29tbWFuZCBieSBwcm92aWRpbmcgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBuYW1lIGFuZCB1c2luZyA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIC0taGVscAorICAgICB1c2FnZTogZGV2dG9vbCBhZGQgWy1oXSBbLS1zYW1lLWRpcl0gWy0tZmV0Y2ggVVJJXSBbLS12ZXJzaW9uIFZFUlNJT05dCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVuYW1lIHNyY3RyZWUKKworICAgICBBZGRzIGEgbmV3IHJlY2lwZQorCisgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIHJlY2lwZW5hbWUgICAgICAgICAgICBOYW1lIGZvciBuZXcgcmVjaXBlIHRvIGFkZAorICAgICAgIHNyY3RyZWUgICAgICAgICAgICAgICBQYXRoIHRvIGV4dGVybmFsIHNvdXJjZSB0cmVlCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLS1zYW1lLWRpciwgLXMgICAgICAgIEJ1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZQorICAgICAgIC0tZmV0Y2ggVVJJLCAtZiBVUkkgICBGZXRjaCB0aGUgc3BlY2lmaWVkIFVSSSBhbmQgZXh0cmFjdCBpdCB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlCisgICAgICAgLS12ZXJzaW9uIFZFUlNJT04sIC1WIFZFUlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiB0byB1c2Ugd2l0aGluIHJlY2lwZSAoUFYpCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtYWRkaW5nLWEtbmV3LXJlY2lwZS10by10aGUtd29ya3NwYWNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5BZGRpbmcgYSBOZXcgUmVjaXBlIHRvIHRoZSBXb3Jrc3BhY2UgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gYWRkIGEgbmV3IHJlY2lwZQorICAgICAgICAgICAgICAgIHRvIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSB5b3UgYWRkIHNob3VsZCBub3QgZXhpc3QgLQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gY3JlYXRlcyBpdCBmb3IgeW91LgorICAgICAgICAgICAgICAgIFRoZSBzb3VyY2UgZmlsZXMgdGhlIHJlY2lwZSB1c2VzIHNob3VsZCBleGlzdCBpbiBhbiBleHRlcm5hbAorICAgICAgICAgICAgICAgIGFyZWEuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGFuZCBhZGRzIGEgbmV3IHJlY2lwZSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5qYWNrc29uPC9maWxlbmFtZT4gdG8gdGhlIHdvcmtzcGFjZSBsYXllci4KKyAgICAgICAgICAgICAgICBUaGUgc291cmNlIGNvZGUgYnVpbHQgYnkgdGhlIHJlY2lwZXMgcmVzaWRlcyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS9zY290dHJpZi9zb3VyY2VzL2phY2tzb248L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBhZGQgamFja3NvbiAvaG9tZS9zY290dHJpZi9zb3VyY2VzL2phY2tzb24KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgYWRkIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYWRkIGEgcmVjaXBlIGFuZCB0aGUgd29ya3NwYWNlIGxheWVyIGRvZXMgbm90IGV4aXN0LAorICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGNyZWF0ZXMgdGhlIGxheWVyIGFuZCBwb3B1bGF0ZXMgaXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nIgorICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJFQURNRSAtIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHdoYXQgaXMgaW4gd29ya3NwYWNlIGxheWVyIGFuZCBob3cgdG8KKyAgICAgICAgICAgICAgbWFuYWdlIGl0LgorCisgICAgIGFwcGVuZHMgLSBBIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zICouYmJhcHBlbmQgZmlsZXMsIHdoaWNoIHBvaW50IHRvCisgICAgICAgICAgICAgICBleHRlcm5hbCBzb3VyY2UuCisKKyAgICAgY29uZiAtIEEgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgbGF5ZXIuY29uZiBmaWxlLgorCisgICAgIHJlY2lwZXMgLSBBIGRpcmVjdG9yeSBjb250YWluaW5nIHJlY2lwZXMuICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhCisgICAgICAgICAgICAgICBmb2xkZXIgZm9yIGVhY2ggZGlyZWN0b3J5IGFkZGVkIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGF0IG9mIHRoZQorICAgICAgICAgICAgICAgYWRkZWQgcmVjaXBlLiAgZGV2dG9vbCBwbGFjZXMgdGhlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPi5iYiBmaWxlCisgICAgICAgICAgICAgICB3aXRoaW4gdGhhdCBzdWItZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiB3aGVuIHRoZQorICAgICAgICAgICAgICAgIHdvcmtzcGFjZSBsYXllciBleGlzdHMgY2F1c2VzIHRoZSB0b29sIHRvIGFkZCB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgYW5kIGFwcGVuZCBmaWxlcyBpbnRvIHRoZSBleGlzdGluZyB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGlzIGNyZWF0ZWQgdG8gcG9pbnQKKyAgICAgICAgICAgICAgICB0byB0aGUgZXh0ZXJuYWwgc291cmNlIHRyZWUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1tb2RpZnlpbmctYS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPk1vZGlmeWluZyBhbiBFeGlzdGluZyBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gYmVnaW4KKyAgICAgICAgICAgICAgICBtb2RpZnlpbmcgdGhlIHNvdXJjZSBvZiBhbiBleGlzdGluZyByZWNpcGUuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIHZlcnkgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+PGZpbGVuYW1lPmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgcGh5c2ljYWxseSBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIGluIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgYmVjYXVzZSB0aGUgcmVjaXBlIGFscmVhZHkKKyAgICAgICAgICAgICAgICBleGlzdHMgaW4gYW4gYW5vdGhlciBsYXllci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+IGNvbW1hbmQgZXh0cmFjdHMgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGZvciBhIHJlY2lwZSwgc2V0cyBpdCB1cCBhcyBhIEdpdCByZXBvc2l0b3J5IGlmIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBoYWQgbm90IGFscmVhZHkgYmVlbiBmZXRjaGVkIGZyb20gR2l0LCBjaGVja3Mgb3V0IGEKKyAgICAgICAgICAgICAgICBicmFuY2ggZm9yIGRldmVsb3BtZW50LCBhbmQgYXBwbGllcyBhbnkgcGF0Y2hlcyBmcm9tIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICBhcyBjb21taXRzIG9uIHRvcC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gY2hlY2tvdXQgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgIGZpbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIG1vZGlmeSAteCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8cmVwbGFjZWFibGU+cGF0aC10by1zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGUgYWJvdmUgY29tbWFuZCBmb3JtLCB0aGUgZGVmYXVsdCBkZXZlbG9wbWVudCBicmFuY2gKKyAgICAgICAgICAgICAgICB3b3VsZCBiZSAiZGV2dG9vbCIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgbW9kaWZ5IC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtdXBkYXRpbmctYS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPlVwZGF0aW5nIGEgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIHVwZGF0ZSB5b3VyIHJlY2lwZSB3aXRoIHBhdGNoZXMgdGhhdCByZWZsZWN0IGNoYW5nZXMgeW91IG1ha2UKKyAgICAgICAgICAgICAgICB0byB0aGUgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Uga25vdyB5b3UgYXJlIGdvaW5nIHRvIHdvcmsgb24gc29tZQorICAgICAgICAgICAgICAgIGNvZGUsIHlvdSBjb3VsZCBmaXJzdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZGV2dG9vbC1tb2RpZnlpbmctYS1yZWNpcGUnPjxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gZXh0cmFjdCB0aGUgY29kZSBhbmQgc2V0IHVwIHRoZSB3b3Jrc3BhY2UuCisgICAgICAgICAgICAgICAgQWZ0ZXIgd2hpY2gsIHlvdSBjb3VsZCBtb2RpZnksIGNvbXBpbGUsIGFuZCB0ZXN0IHRoZSBjb2RlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIHJlc3VsdHMgYW5kIHlvdSBoYXZlIGNvbW1pdHRlZAorICAgICAgICAgICAgICAgIHlvdXIgY2hhbmdlcyB0byB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gdGhlbgorICAgICAgICAgICAgICAgIHJ1biB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+IHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCB1cGRhdGUgdGhlIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCB1cGRhdGUtcmVjaXBlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgcnVuIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB3aXRob3V0IGNvbW1pdHRpbmcgeW91ciBjaGFuZ2VzLCB0aGUgY29tbWFuZCBpZ25vcmVzIHRoZQorICAgICAgICAgICAgICAgIGNoYW5nZXMuCisgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgIE9mdGVuLCB5b3UgbWlnaHQgd2FudCB0byBhcHBseSBjdXN0b21pemF0aW9ucyBtYWRlIHRvIHlvdXIKKyAgICAgICAgICAgICAgICAgc29mdHdhcmUgaW4geW91ciBvd24gbGF5ZXIgcmF0aGVyIHRoYW4gYXBwbHkgdGhlbSB0byB0aGUKKyAgICAgICAgICAgICAgICAgb3JpZ2luYWwgcmVjaXBlLgorICAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tYTwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4tLWFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgIG9wdGlvbiB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgVGhlc2Ugb3B0aW9ucyBhbGxvdyB5b3UgdG8gc3BlY2lmeSB0aGUgbGF5ZXIgaW50byB3aGljaCB0bworICAgICAgICAgICAgICAgICB3cml0ZSBhbiBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4gLWEgPHJlcGxhY2VhYmxlPmJhc2UtbGF5ZXItZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPiouYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGlzIGNyZWF0ZWQgYXQgdGhlCisgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHBhdGggd2l0aGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIgZGlyZWN0b3J5LCB3aGljaAorICAgICAgICAgICAgICAgICBtYXkgb3IgbWF5IG5vdCBiZSBpbiB5b3VyIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgSWYgYW4gYXBwZW5kIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBjb21tYW5kIHVwZGF0ZXMgaXQKKyAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtcmVzZXR0aW5nLWEtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZXNldHRpbmcgYSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCB0byByZW1vdmUgYQorICAgICAgICAgICAgICAgIHJlY2lwZSBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gKGUuZy4gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSkgZnJvbSB0aGUgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCB0aGlzIGNvbW1hbmQgZGVsZXRlcyB0aGUgcmVjaXBlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBkb2VzIG5vdCBwaHlzaWNhbGx5IG1vdmUgdGhlbSBmb3IgeW91LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgYmUgc3VyZSB0byBwaHlzaWNhbGx5IHJlbG9jYXRlIHlvdXIKKyAgICAgICAgICAgICAgICB1cGRhdGVkIHJlY2lwZSBhbmQgdGhlIGFwcGVuZCBmaWxlIG91dHNpZGUgb2YgdGhlIHdvcmtzcGFjZQorICAgICAgICAgICAgICAgIGxheWVyIGJlZm9yZSBydW5uaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0PC9maWxlbmFtZT4gY29tbWFuZCBkZXRlY3RzIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIG9yIHRoZSBhcHBlbmQgZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICBjb21tYW5kIHByZXNlcnZlcyB0aGUgbW9kaWZpZWQgZmlsZXMgaW4gYSBzZXBhcmF0ZSAiYXR0aWMiCisgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQgLS1oZWxwPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1idWlsZGluZy15b3VyLXNvZnR3YXJlJz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBZb3VyIFNvZnR3YXJlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB5b3VyIHNvZnR3YXJlIGJhc2VkCisgICAgICAgICAgICAgICAgb24gdGhlIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYnVpbGQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLS1oZWxwPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgQnVpbGRpbmcgeW91ciBzb2Z0d2FyZSB1c2luZyA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaXMgaWRlbnRpY2FsIHRvIHVzaW5nIEJpdEJha2UgdG8gYnVpbGQgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZGVwbG95aW5nLXlvdXItc29mdHdhcmUtb24tdGhlLXRhcmdldC1tYWNoaW5lJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXBsb3lpbmcgWW91ciBTb2Z0d2FyZSBvbiB0aGUgVGFyZ2V0IE1hY2hpbmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgZGVwbG95IHRoZSByZWNpcGUncyBidWlsZCBvdXRwdXQgdG8gdGhlIGxpdmUgdGFyZ2V0IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgZGVwbG95LXRhcmdldCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZSwgd2hpY2ggbXVzdCBiZSBydW5uaW5nIGFuIFNTSCBzZXJ2ZXIgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlckBob3N0bmFtZVs6ZGVzdGRpcl08L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBkZXBsb3lzIGFsbCBmaWxlcyBpbnN0YWxsZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB5b3UgZG8gbm90IG5lZWQgdG8gaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZW5hYmxlZAorICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgSWYgeW91IGRvLCB0aGUgcGFja2FnZSBtYW5hZ2VyIGlzIGJ5cGFzc2VkLgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgaXMgZm9yIGRldmVsb3BtZW50IG9ubHkuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5ldmVyIHVzZSBpdCB0byB1cGRhdGUgYW4gaW1hZ2UgdGhhdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHByb2R1Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQgLS1oZWxwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1yZW1vdmluZy15b3VyLXNvZnR3YXJlLWZyb20tdGhlLXRhcmdldC1tYWNoaW5lJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZW1vdmluZyBZb3VyIFNvZnR3YXJlIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1bmRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgcmVtb3ZlIGRlcGxveWVkIGJ1aWxkIG91dHB1dCBmcm9tIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBGb3IgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICB3b3JrLCB5b3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgdXNlZCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdkZXZ0b29sLWRlcGxveWluZy15b3VyLXNvZnR3YXJlLW9uLXRoZS10YXJnZXQtbWFjaGluZSc+PGZpbGVuYW1lPmRldnRvb2wgZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0IDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGlzIHRoZSBhZGRyZXNzIG9mIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lLCB3aGljaCBtdXN0IGJlIHJ1bm5pbmcgYW4gU1NIIHNlcnZlciAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51c2VyQGhvc3RuYW1lPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHVuZGVwbG95LXRhcmdldCAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWNyZWF0aW5nLXRoZS13b3Jrc3BhY2UnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIHRoZSBXb3Jrc3BhY2UgTGF5ZXIgaW4gYW4gQWx0ZXJuYXRpdmUgTG9jYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5kZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgY3JlYXRlIGEgbmV3IHdvcmtzcGFjZSBsYXllciBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIsIGl0IGlzIHBvcHVsYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgaW4geW91cgorICAgICAgICAgICAgICAgIGN1cnJlbnQgd29ya2luZyBhbmQgYnkgZGVmYXVsdCBuYW1lcyB0aGUgd29ya3NwYWNlIGxheWVyCisgICAgICAgICAgICAgICAgIndvcmtzcGFjZSI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBhIHdvcmtzcGFjZSBsYXllciBhbnl3aGVyZSBieSBzdXBwbHlpbmcKKyAgICAgICAgICAgICAgICBhIHBhdGhuYW1lIHdpdGggdGhlIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgIm5ldy13b3Jrc3BhY2UiOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UgL2hvbWUvc2NvdHRyaWYvbmV3LXdvcmtzcGFjZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJ1c2luZy1hLXF1aWx0LXdvcmtmbG93Ij4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQnPlF1aWx0PC91bGluaz4KKyAgICAgICAgICAgIGlzIGEgcG93ZXJmdWwgdG9vbCB0aGF0IGFsbG93cyB5b3UgdG8gY2FwdHVyZSBzb3VyY2UgY29kZSBjaGFuZ2VzCisgICAgICAgICAgICB3aXRob3V0IGhhdmluZyBhIGNsZWFuIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIG91dGxpbmVzIHRoZSB0eXBpY2FsIHdvcmtmbG93IHlvdSBjYW4gdXNlIHRvIG1vZGlmeQorICAgICAgICAgICAgc291cmNlIGNvZGUsIHRlc3QgY2hhbmdlcywgYW5kIHRoZW4gcHJlc2VydmUgdGhlIGNoYW5nZXMgaW4gdGhlCisgICAgICAgICAgICBmb3JtIG9mIGEgcGF0Y2ggYWxsIHVzaW5nIFF1aWx0LgorICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CisgICAgICAgICAgICAgICAgV2l0aCByZWdhcmQgdG8gcHJlc2VydmluZyBjaGFuZ2VzIHRvIHNvdXJjZSBmaWxlcyBpZiB5b3UKKyAgICAgICAgICAgICAgICBjbGVhbiBhIHJlY2lwZSBvciBoYXZlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4gZW5hYmxlZCwKKyAgICAgICAgICAgICAgICB0aGUgd29ya2Zsb3cgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1kZXZ0b29sLWluLXlvdXItd29ya2Zsb3cnPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpcyBhIHNhZmVyIGRldmVsb3BtZW50IGZsb3cgdGhhbiB0aGFuIHRoZSBmbG93IHRoYXQKKyAgICAgICAgICAgICAgICB1c2VzIFF1aWx0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2UgZ2VuZXJhbCBzdGVwczoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZpbmQgdGhlIFNvdXJjZSBDb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGlzIGtlcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz5GaW5kaW5nIFRlbXBvcmFyeSBTb3VyY2UgQ29kZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gdG8gbGVhcm4gaG93IHRvIGxvY2F0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgZm9yIGEgcGFydGljdWxhciBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoYW5nZSBZb3VyIFdvcmtpbmcgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgVGhhdCBkaXJlY3RvcnkgaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIE5ldyBQYXRjaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBjb2RlLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBuZXcgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIG5ldyBwYXRjaCBmaWxlLCB1c2UgPGZpbGVuYW1lPnF1aWx0IG5ldzwvZmlsZW5hbWU+IGFzIGJlbG93OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcXVpbHQgbmV3IG15X2NoYW5nZXMucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Tm90aWZ5IFF1aWx0IGFuZCBBZGQgRmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgY3JlYXRpbmcgdGhlIHBhdGNoLCB5b3UgbmVlZCB0byBub3RpZnkgUXVpbHQgYWJvdXQgdGhlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHlvdSBwbGFuIHRvIGVkaXQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBub3RpZnkgUXVpbHQgYnkgYWRkaW5nIHRoZSBmaWxlcyB0byB0aGUgcGF0Y2ggeW91IGp1c3QgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IGFkZCBmaWxlMS5jIGZpbGUyLmMgZmlsZTMuYworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RWRpdCB0aGUgRmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFrZSB5b3VyIGNoYW5nZXMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBmaWxlcyB5b3UgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRlc3QgWW91ciBDaGFuZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLCB0aGUgZWFzaWVzdCB3YXkgdG8KKyAgICAgICAgICAgICAgICAgICAgeW91ciBjaGFuZ2VzIGlzIGJ5IGNhbGxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFzayBhcyBzaG93biBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNvbXBpbGUgLWYgPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LS1mb3JjZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBmb3JjZXMgdGhlIHNwZWNpZmllZCB0YXNrIHRvIGV4ZWN1dGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBmaW5kIHByb2JsZW1zIHdpdGggeW91ciBjb2RlLCB5b3UgY2FuIGp1c3Qga2VlcCBlZGl0aW5nIGFuZAorICAgICAgICAgICAgICAgICAgICByZS10ZXN0aW5nIGl0ZXJhdGl2ZWx5IHVudGlsIHRoaW5ncyB3b3JrIGFzIGV4cGVjdGVkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5BbGwgdGhlIG1vZGlmaWNhdGlvbnMgeW91IG1ha2UgdG8gdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICBkaXNhcHBlYXIgb25jZSB5b3UgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW4nPjxmaWxlbmFtZT5kb19jbGVhbjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuYWxsJz48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2tzIHVzaW5nIEJpdEJha2UgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW4gPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBjbGVhbmFsbCA8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBNb2RpZmljYXRpb25zIHdpbGwgYWxzbyBkaXNhcHBlYXIgaWYgeW91IHVzZSB0aGUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlIGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2VuZXJhdGUgdGhlIFBhdGNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBjaGFuZ2VzIHdvcmsgYXMgZXhwZWN0ZWQsIHlvdSBuZWVkIHRvIHVzZSBRdWlsdCB0byBnZW5lcmF0ZSB0aGUgZmluYWwgcGF0Y2ggdGhhdAorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhbGwgeW91ciBtb2RpZmljYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcXVpbHQgcmVmcmVzaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHRoZSA8ZmlsZW5hbWU+bXlfY2hhbmdlcy5wYXRjaDwvZmlsZW5hbWU+IGZpbGUgaGFzIGFsbCB5b3VyIGVkaXRzIG1hZGUKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5maWxlMS5jPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5maWxlMi5jPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTMuYzwvZmlsZW5hbWU+IGZpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSByZXN1bHRpbmcgcGF0Y2ggZmlsZSBpbiB0aGUgPGZpbGVuYW1lPnBhdGNoZXMvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pIGRpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvcHkgdGhlIFBhdGNoIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIGNvcHkgdGhlIHBhdGNoIGZpbGUgaW50byBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggeW91IGNhbiBjcmVhdGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBmaWxlIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgUGxhY2luZyB0aGUgcGF0Y2ggaGVyZSBndWFyYW50ZWVzIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2lsbCBmaW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgTmV4dCwgYWRkIHRoZSBwYXRjaCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbXlfY2hhbmdlcy5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdmaW5kaW5nLXRoZS10ZW1wb3Jhcnktc291cmNlLWNvZGUnPgorICAgICAgICA8dGl0bGU+RmluZGluZyBUZW1wb3JhcnkgU291cmNlIENvZGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gbW9kaWZ5IHRoZQorICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIHVzZWQgYnkgcmVjaXBlcyB0byBidWlsZCBwYWNrYWdlcy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgZGV2ZWxvcGluZyBhIHBhdGNoIGFuZCB5b3UgbmVlZCB0bworICAgICAgICAgICAgZXhwZXJpbWVudCBhIGJpdCB0byBmaWd1cmUgb3V0IHlvdXIgc29sdXRpb24uCisgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBpbml0aWFsbHkgYnVpbHQgdGhlIHBhY2thZ2UsIHlvdSBjYW4gaXRlcmF0aXZlbHkKKyAgICAgICAgICAgIHR3ZWFrIHRoZSBzb3VyY2UgY29kZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwgYW5kIHRoZW4KKyAgICAgICAgICAgIHlvdSBjYW4gZm9yY2UgYSByZS1jb21waWxlIGFuZCBxdWlja2x5IHRlc3QgeW91ciBhbHRlcmVkIGNvZGUuCisgICAgICAgICAgICBPbmNlIHlvdSBzZXR0bGUgb24gYSBzb2x1dGlvbiwgeW91IGNhbiB0aGVuIHByZXNlcnZlIHlvdXIgY2hhbmdlcworICAgICAgICAgICAgaW4gdGhlIGZvcm0gb2YgcGF0Y2hlcy4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgUXVpbHQgZm9yIGRldmVsb3BtZW50LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+VXNpbmcgUXVpbHQgaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEdXJpbmcgYSBidWlsZCwgdGhlIHVucGFja2VkIHRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHJlY2lwZXMKKyAgICAgICAgICAgIHRvIGJ1aWxkIHBhY2thZ2VzIGlzIGF2YWlsYWJsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGFzCisgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz5TPC91bGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIEJlbG93IGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcyBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUyA9ICIke1dPUktESVJ9LyR7QlB9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IG1hbnkgcmVjaXBlcyBvdmVycmlkZSB0aGUgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCByZWNpcGVzIHRoYXQgZmV0Y2ggdGhlaXIgc291cmNlIGZyb20gR2l0IHVzdWFsbHkgc2V0CisgICAgICAgICAgICA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IHRvIDxmaWxlbmFtZT4ke1dPUktESVJ9L2dpdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQJz48ZmlsZW5hbWU+QlA8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgYmFzZSByZWNpcGUgbmFtZSwgd2hpY2ggY29uc2lzdHMgb2YgdGhlIG5hbWUgYW5kIHZlcnNpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCUCA9ICIke0JQTn0tJHtQVn0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgd29yayBkaXJlY3RvcnkgZm9yIHRoZSByZWNpcGUKKyAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1RNUERJUn0vd29yay8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgYWN0dWFsIGRpcmVjdG9yeSBkZXBlbmRzIG9uIHNldmVyYWwgdGhpbmdzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllcjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVORFBFJz48ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggLSAoaWYKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBpcyBibGFuayk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSByZXZpc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgYXNzdW1lIGEgU291cmNlIERpcmVjdG9yeSB0b3AtbGV2ZWwgZm9sZGVyCisgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+LCBhbmQgYQorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtcG9reS1saW51eDwvZmlsZW5hbWU+IG1hY2hpbmUgdGFyZ2V0CisgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgc3VwcG9zZSB5b3VyIHJlY2lwZSBpcyBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCisgICAgICAgICAgICBidWlsZCB0aGUgcGFja2FnZSB3b3VsZCBiZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm93IHRoYXQgeW91IGtub3cgd2hlcmUgdG8gbG9jYXRlIHRoZSBkaXJlY3RvcnkgdGhhdCBoYXMgdGhlCisgICAgICAgICAgICB0ZW1wb3Jhcnkgc291cmNlIGNvZGUsIHlvdSBjYW4gdXNlIGEgUXVpbHQgYXMgZGVzY3JpYmVkIGluIHNlY3Rpb24KKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKKyAgICAgICAgICAgIHRvIG1ha2UgeW91ciBlZGl0cywgdGVzdCB0aGUgY2hhbmdlcywgYW5kIHByZXNlcnZlIHRoZSBjaGFuZ2VzIGluCisgICAgICAgICAgICB0aGUgZm9ybSBvZiBwYXRjaGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW1hZ2UtZGV2ZWxvcG1lbnQtdXNpbmctdG9hc3Rlcic+CisgICAgPHRpdGxlPkltYWdlIERldmVsb3BtZW50IFVzaW5nIFRvYXN0ZXI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvYXN0ZXIgaXMgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0J3MgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgIHN5c3RlbS4KKyAgICAgICAgWW91IGNhbiBpbml0aWF0ZSBidWlsZHMgdXNpbmcgVG9hc3RlciBhcyB3ZWxsIGFzIGV4YW1pbmUgdGhlIHJlc3VsdHMKKyAgICAgICAgYW5kIHN0YXRpc3RpY3Mgb2YgYnVpbGRzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsjdG9hc3Rlci1tYW51YWwtaW50cm8nPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPgorICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBhbmQgdXNlIFRvYXN0ZXIgdG8gYnVpbGQgaW1hZ2VzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ltYWdlLWRldmVsb3BtZW50LXVzaW5nLWhvYic+CisgICAgPHRpdGxlPkltYWdlIERldmVsb3BtZW50IFVzaW5nIEhvYjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4gaXMgYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB3aGljaCBpcyBiYXNlZCBvbiBCaXRCYWtlLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgSG9iIHRvIGJ1aWxkIGN1c3RvbSBvcGVyYXRpbmcgc3lzdGVtIGltYWdlcyB3aXRoaW4gdGhlIFlvY3RvIFByb2plY3QgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgIEhvYiBzaW1wbHkgcHJvdmlkZXMgYSBmcmllbmRseSBpbnRlcmZhY2Ugb3ZlciB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgZHVyaW5nIGRldmVsb3BtZW50LgorICAgICAgICBJbiBvdGhlciB3b3JkcywgYnVpbGRpbmcgaW1hZ2VzIHdpdGggdGhlIEhvYiBsZXRzIHlvdSB0YWtlIGNhcmUgb2YgY29tbW9uIGJ1aWxkIHRhc2tzIG1vcmUgZWFzaWx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBIb2IsIHNlZSB0aGUgcHJvamVjdCBwYWdlIGF0CisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+PC91bGluaz4KKyAgICAgICAgb24gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgICAgSWYgeW91IGZvbGxvdyB0aGUgIkRvY3VtZW50YXRpb24iIGxpbmsgZnJvbSB0aGUgSG9iIHBhZ2UsIHlvdSB3aWxsCisgICAgICAgIGZpbmQgYSBzaG9ydCBpbnRyb2R1Y3RvcnkgdHJhaW5pbmcgdmlkZW8gb24gSG9iLgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3RzIHNvbWUgZmVhdHVyZXMgb2YgSG9iOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc2V0dXAgYW5kIHJ1biBIb2IgdXNpbmcgdGhlc2UgY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisgICAgICQgaG9iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBzZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIG1vZGlmeSB2YXJpb3VzIHBvbGljeSBzZXR0aW5ncyBzdWNoIGFzIHRoZQorICAgICAgICAgICAgICAgIHBhY2thZ2UgZm9ybWF0IHdpdGggd2hpY2ggdG8gYnVpbGQsCisgICAgICAgICAgICAgICAgdGhlIHBhcmFsbGVsaXNtIEJpdEJha2UgdXNlcywgd2hldGhlciBvciBub3QgdG8gYnVpbGQgYW4KKyAgICAgICAgICAgICAgICBleHRlcm5hbCB0b29sY2hhaW4sIGFuZCB3aGljaCBob3N0IHRvIGJ1aWxkIGFnYWluc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBtYW5hZ2UKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPmxheWVyczwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBzZWxlY3QgYSBiYXNlIGltYWdlIGFuZCB0aGVuIGFkZCBleHRyYSBwYWNrYWdlcyBmb3IgeW91ciBjdXN0b20gYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBsYXVuY2ggYW5kIG1vbml0b3IgdGhlIGJ1aWxkIGZyb20gd2l0aGluIEhvYi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0icGxhdGRldi1hcHBkZXYtZGV2c2hlbGwiPgorICAgIDx0aXRsZT5Vc2luZyBhIERldmVsb3BtZW50IFNoZWxsPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIGRlYnVnZ2luZyBjZXJ0YWluIGNvbW1hbmRzIG9yIGV2ZW4gd2hlbiBqdXN0IGVkaXRpbmcgcGFja2FnZXMsCisgICAgICAgIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGNhbiBiZSBhIHVzZWZ1bCB0b29sLgorICAgICAgICBXaGVuIHlvdSBpbnZva2UgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4sIHNvdXJjZSBmaWxlcyBhcmUKKyAgICAgICAgZXh0cmFjdGVkIGludG8geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcGF0Y2hlcyBhcmUgYXBwbGllZC4KKyAgICAgICAgVGhlbiwgYSBuZXcgdGVybWluYWwgaXMgb3BlbmVkIGFuZCB5b3UgYXJlIHBsYWNlZCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgIEluIHRoZSBuZXcgdGVybWluYWwsIGFsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkLXJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZQorICAgICAgICBzdGlsbCBkZWZpbmVkIHNvIHlvdSBjYW4gdXNlIGNvbW1hbmRzIHN1Y2ggYXMgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+LgorICAgICAgICBUaGUgY29tbWFuZHMgZXhlY3V0ZSBqdXN0IGFzIGlmIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdlcmUgZXhlY3V0aW5nIHRoZW0uCisgICAgICAgIENvbnNlcXVlbnRseSwgd29ya2luZyB0aGlzIHdheSBjYW4gYmUgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBhIGJ1aWxkIG9yIHByZXBhcmluZworICAgICAgICBzb2Z0d2FyZSB0byBiZSB1c2VkIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBvbiBhIHRhcmdldCBuYW1lZAorICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGRldnNoZWxsCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjb21tYW5kIHNwYXducyBhIHRlcm1pbmFsIHdpdGggYSBzaGVsbCBwcm9tcHQgd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0VfVEVSTUlOQUwnPjxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgY29udHJvbHMgd2hhdCB0eXBlIG9mIHNoZWxsIGlzIG9wZW5lZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIHNwYXduZWQgdGVybWluYWxzLCB0aGUgZm9sbG93aW5nIG9jY3VyczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbmNsdWRlcyB0aGUKKyAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgZmluZCB0aGUgY29ycmVjdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucGM8L2ZpbGVuYW1lPiBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBjb21tYW5kIGZpbmRzIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgc2l0ZSBmaWxlcyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuZWNlc3NhcnkgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaXRoaW4gdGhpcyBlbnZpcm9ubWVudCwgeW91IGNhbiBydW4gY29uZmlndXJlIG9yIGNvbXBpbGUKKyAgICAgICAgY29tbWFuZHMgYXMgaWYgdGhleSB3ZXJlIGJlaW5nIHJ1biBieQorICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpdHNlbGYuCisgICAgICAgIEFzIG5vdGVkIGVhcmxpZXIsIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbHNvIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgU291cmNlIERpcmVjdG9yeSAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4geW91IGFyZSBmaW5pc2hlZCwgeW91IGp1c3QgZXhpdCB0aGUgc2hlbGwgb3IgY2xvc2UgdGhlIHRlcm1pbmFsIHdpbmRvdy4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCByZW1lbWJlcmluZyB0aGF0IHdoZW4gdXNpbmcgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHlvdSBuZWVkIHRvIHVzZSB0aGUgZnVsbCBjb21waWxlciBuYW1lIHN1Y2ggYXMgPGZpbGVuYW1lPmFybS1wb2t5LWxpbnV4LWdudWVhYmktZ2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluc3RlYWQgb2YganVzdCB1c2luZyA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgc2FtZSBhcHBsaWVzIHRvIG90aGVyIGFwcGxpY2F0aW9ucyBzdWNoIGFzIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGguCisgICAgICAgICAgICBCaXRCYWtlIHNldHMgdXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgPGZpbGVuYW1lPkNDPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRvIGFzc2lzdCBhcHBsaWNhdGlvbnMsIHN1Y2ggYXMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB0byBmaW5kIHRoZSBjb3JyZWN0IHRvb2xzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyBhbHNvIHdvcnRoIG5vdGluZyB0aGF0IDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IHN0aWxsIHdvcmtzIG92ZXIKKyAgICAgICAgICAgIFgxMSBmb3J3YXJkaW5nIGFuZCBzaW1pbGFyIHNpdHVhdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZhOTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sCkBAIC0wLDAgKzEsMTcxNiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2Rldi1tYW51YWwtbmV3YmllJz4KKworPHRpdGxlPlRoZSBZb2N0byBQcm9qZWN0IE9wZW4gU291cmNlIERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGhlbHBzIHlvdSB1bmRlcnN0YW5kIHRoZSBZb2N0byBQcm9qZWN0IGFzIGFuIG9wZW4gc291cmNlIGRldmVsb3BtZW50IHByb2plY3QuCisgICAgSW4gZ2VuZXJhbCwgd29ya2luZyBpbiBhbiBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIHdvcmtpbmcgaW4gYQorICAgIGNsb3NlZCwgcHJvcHJpZXRhcnkgZW52aXJvbm1lbnQuCisgICAgQWRkaXRpb25hbGx5LCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIHNwZWNpZmljIHRvb2xzIGFuZCBjb25zdHJ1Y3RzIGFzIHBhcnQgb2YgaXRzIGRldmVsb3BtZW50CisgICAgZW52aXJvbm1lbnQuCisgICAgVGhpcyBjaGFwdGVyIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgb3BlbiBzb3VyY2UgcGhpbG9zb3BoeSwgdXNpbmcgdGhlCisgICAgWW9jdG8gUHJvamVjdCBpbiBhIHRlYW0gZW52aXJvbm1lbnQsIHNvdXJjZSByZXBvc2l0b3JpZXMsIFlvY3RvIFByb2plY3QKKyAgICB0ZXJtcywgbGljZW5zaW5nLCB0aGUgb3BlbiBzb3VyY2UgZGlzdHJpYnV0ZWQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBHaXQsCisgICAgd29ya2Zsb3dzLCBidWcgdHJhY2tpbmcsIGFuZCBob3cgdG8gc3VibWl0IGNoYW5nZXMuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdvcGVuLXNvdXJjZS1waGlsb3NvcGh5Jz4KKyAgICA8dGl0bGU+T3BlbiBTb3VyY2UgUGhpbG9zb3BoeTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT3BlbiBzb3VyY2UgcGhpbG9zb3BoeSBpcyBjaGFyYWN0ZXJpemVkIGJ5IHNvZnR3YXJlIGRldmVsb3BtZW50IGRpcmVjdGVkIGJ5IHBlZXIgcHJvZHVjdGlvbgorICAgICAgICBhbmQgY29sbGFib3JhdGlvbiB0aHJvdWdoIGFuIGFjdGl2ZSBjb21tdW5pdHkgb2YgZGV2ZWxvcGVycy4KKyAgICAgICAgQ29udHJhc3QgdGhpcyB0byB0aGUgbW9yZSBzdGFuZGFyZCBjZW50cmFsaXplZCBkZXZlbG9wbWVudCBtb2RlbHMgdXNlZCBieSBjb21tZXJjaWFsIHNvZnR3YXJlCisgICAgICAgIGNvbXBhbmllcyB3aGVyZSBhIGZpbml0ZSBzZXQgb2YgZGV2ZWxvcGVycyBwcm9kdWNlcyBhIHByb2R1Y3QgZm9yIHNhbGUgdXNpbmcgYSBkZWZpbmVkIHNldAorICAgICAgICBvZiBwcm9jZWR1cmVzIHRoYXQgdWx0aW1hdGVseSByZXN1bHQgaW4gYW4gZW5kIHByb2R1Y3Qgd2hvc2UgYXJjaGl0ZWN0dXJlIGFuZCBzb3VyY2UgbWF0ZXJpYWwKKyAgICAgICAgYXJlIGNsb3NlZCB0byB0aGUgcHVibGljLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBPcGVuIHNvdXJjZSBwcm9qZWN0cyBjb25jZXB0dWFsbHkgaGF2ZSBkaWZmZXJpbmcgY29uY3VycmVudCBhZ2VuZGFzLCBhcHByb2FjaGVzLCBhbmQgcHJvZHVjdGlvbi4KKyAgICAgICAgVGhlc2UgZmFjZXRzIG9mIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGNhbiBjb21lIGZyb20gYW55b25lIGluIHRoZSBwdWJsaWMgKGNvbW11bml0eSkgdGhhdCBoYXMgYQorICAgICAgICBzdGFrZSBpbiB0aGUgc29mdHdhcmUgcHJvamVjdC4KKyAgICAgICAgVGhlIG9wZW4gc291cmNlIGVudmlyb25tZW50IGNvbnRhaW5zIG5ldyBjb3B5cmlnaHQsIGxpY2Vuc2luZywgZG9tYWluLCBhbmQgY29uc3VtZXIgaXNzdWVzCisgICAgICAgIHRoYXQgZGlmZmVyIGZyb20gdGhlIG1vcmUgdHJhZGl0aW9uYWwgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgIEluIGFuIG9wZW4gc291cmNlIGVudmlyb25tZW50LCB0aGUgZW5kIHByb2R1Y3QsIHNvdXJjZSBtYXRlcmlhbCwgYW5kIGRvY3VtZW50YXRpb24gYXJlCisgICAgICAgIGFsbCBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBhdCBubyBjb3N0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBIGJlbmNobWFyayBleGFtcGxlIG9mIGFuIG9wZW4gc291cmNlIHByb2plY3QgaXMgdGhlIExpbnV4IGtlcm5lbCwgd2hpY2ggd2FzIGluaXRpYWxseSBjb25jZWl2ZWQKKyAgICAgICAgYW5kIGNyZWF0ZWQgYnkgRmlubmlzaCBjb21wdXRlciBzY2llbmNlIHN0dWRlbnQgTGludXMgVG9ydmFsZHMgaW4gMTk5MS4KKyAgICAgICAgQ29udmVyc2VseSwgYSBnb29kIGV4YW1wbGUgb2YgYSBub24tb3BlbiBzb3VyY2UgcHJvamVjdCBpcyB0aGUKKyAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+V2luZG93czwvdHJhZGVtYXJrPiBmYW1pbHkgb2Ygb3BlcmF0aW5nCisgICAgICAgIHN5c3RlbXMgZGV2ZWxvcGVkIGJ5IDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPk1pY3Jvc29mdDwvdHJhZGVtYXJrPiBDb3Jwb3JhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2lraXBlZGlhIGhhcyBhIGdvb2QgaGlzdG9yaWNhbCBkZXNjcmlwdGlvbiBvZiB0aGUgT3BlbiBTb3VyY2UgUGhpbG9zb3BoeQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wZW5fc291cmNlJz5oZXJlPC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGhlbHBmdWwgaW5mb3JtYXRpb24gb24gaG93IHRvIHBhcnRpY2lwYXRlIGluIHRoZSBMaW51eCBDb21tdW5pdHkKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xkbi5saW51eGZvdW5kYXRpb24ub3JnL2Jvb2svaG93LXBhcnRpY2lwYXRlLWxpbnV4LWNvbW11bml0eSc+aGVyZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InVzaW5ncG9reS1jaGFuZ2VzLWNvbGxhYm9yYXRlIj4KKyAgICA8dGl0bGU+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QgaW4gYSBUZWFtIEVudmlyb25tZW50PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBJdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgY2xlYXIgaG93IHlvdSBjYW4gdXNlIHRoZSBZb2N0bworICAgICAgICBQcm9qZWN0IGluIGEgdGVhbSBlbnZpcm9ubWVudCwgb3Igc2NhbGUgaXQgZm9yIGEgbGFyZ2UgdGVhbSBvZgorICAgICAgICBkZXZlbG9wZXJzLgorICAgICAgICBPbmUgb2YgdGhlIHN0cmVuZ3RocyBvZiB0aGUgWW9jdG8gUHJvamVjdCBpcyB0aGF0IGl0IGlzIGV4dHJlbWVseQorICAgICAgICBmbGV4aWJsZS4KKyAgICAgICAgVGh1cywgeW91IGNhbiBhZGFwdCBpdCB0byBtYW55IGRpZmZlcmVudCB1c2UgY2FzZXMgYW5kIHNjZW5hcmlvcy4KKyAgICAgICAgSG93ZXZlciwgdGhlc2UgY2hhcmFjdGVyaXN0aWNzIGNhbiBjYXVzZSBhIHN0cnVnZ2xlIGlmIHlvdSBhcmUgdHJ5aW5nCisgICAgICAgIHRvIGNyZWF0ZSBhIHdvcmtpbmcgc2V0dXAgdGhhdCBzY2FsZXMgYWNyb3NzIGEgbGFyZ2UgdGVhbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gaGVscCB3aXRoIHRoZXNlIHR5cGVzIG9mIHNpdHVhdGlvbnMsIHRoaXMgc2VjdGlvbiBwcmVzZW50cworICAgICAgICBzb21lIG9mIHRoZSBwcm9qZWN0J3MgbW9zdCBzdWNjZXNzZnVsIGV4cGVyaWVuY2VzLAorICAgICAgICBwcmFjdGljZXMsIHNvbHV0aW9ucywgYW5kIGF2YWlsYWJsZSB0ZWNobm9sb2dpZXMgdGhhdCB3b3JrIHdlbGwuCisgICAgICAgIEtlZXAgaW4gbWluZCwgdGhlIGluZm9ybWF0aW9uIGhlcmUgaXMgYSBzdGFydGluZyBwb2ludC4KKyAgICAgICAgWW91IGNhbiBidWlsZCBvZmYgaXQgYW5kIGN1c3RvbWl6ZSBpdCB0byBmaXQgYW55CisgICAgICAgIHBhcnRpY3VsYXIgd29ya2luZyBlbnZpcm9ubWVudCBhbmQgc2V0IG9mIHByYWN0aWNlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtc3lzdGVtLWNvbmZpZ3VyYXRpb25zJz4KKyAgICAgICAgPHRpdGxlPlN5c3RlbSBDb25maWd1cmF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTeXN0ZW1zIGFjcm9zcyBhIGxhcmdlIHRlYW0gc2hvdWxkIG1lZXQgdGhlIG5lZWRzIG9mCisgICAgICAgICAgICB0d28gdHlwZXMgb2YgZGV2ZWxvcGVyczogdGhvc2Ugd29ya2luZyBvbiB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIGltYWdlIGl0c2VsZiBhbmQgdGhvc2UgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGRldmVsb3BlciwgdGhlaXIgd29ya3N0YXRpb25zIG11c3QKKyAgICAgICAgICAgIGJlIGJvdGggcmVhc29uYWJseSBwb3dlcmZ1bCBhbmQgcnVuIExpbnV4LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLWFwcGxpY2F0aW9uLWRldmVsb3BtZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBkZXZlbG9wZXJzIHdobyBtYWlubHkgZG8gYXBwbGljYXRpb24gbGV2ZWwgd29yaworICAgICAgICAgICAgICAgIG9uIHRvcCBvZiBhbiBleGlzdGluZyBzb2Z0d2FyZSBzdGFjaywKKyAgICAgICAgICAgICAgICBoZXJlIGFyZSBzb21lIHByYWN0aWNlcyB0aGF0IHdvcmsgYmVzdDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIGEgcHJlLWJ1aWx0IHRvb2xjaGFpbiB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgc29mdHdhcmUgc3RhY2sgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlbiwgZGV2ZWxvcCB0aGUgYXBwbGljYXRpb24gY29kZSBvbiB0b3Agb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIHdlbGwgZm9yIHNtYWxsIG51bWJlcnMgb2YgcmVsYXRpdmVseQorICAgICAgICAgICAgICAgICAgICAgICAgaXNvbGF0ZWQgYXBwbGljYXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbiBwb3NzaWJsZSwgdXNlIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBwbHVnLWluIGZvciB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXIgcGllY2VzIG9mIEFwcGxpY2F0aW9uIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICBUZWNobm9sb2d5IChBRFQpLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdhcHBsaWNhdGlvbi1kZXZlbG9wbWVudC13b3JrZmxvdyc+QXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IFdvcmtmbG93PC9saW5rPiIgc2VjdGlvbiBhcyB3ZWxsIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+S2VlcCB5b3VyIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvIHRoaXMgdGhyb3VnaCBwcm92aXNpb25pbmcgZWl0aGVyIGFzIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGRvd25sb2FkcyBvciBhcyB1cGRhdGVzIHRocm91Z2ggYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUgbWVjaGFuaXNtIHVzaW5nIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdXBkYXRlcyB0byBhbiBleGlzdGluZyB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhhY3QgbWVjaGFuaWNzIG9mIGhvdyBhbmQgd2hlbiB0byBkbyB0aGlzIGFyZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbiBmb3IgbG9jYWwgcG9saWN5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIG11bHRpcGxlIHRvb2xjaGFpbnMgaW5zdGFsbGVkIGxvY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gZGlmZmVyZW50IGxvY2F0aW9ucyB0byBhbGxvdyBkZXZlbG9wbWVudCBhY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLWNvcmUtc3lzdGVtLWRldmVsb3BtZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Db3JlIFN5c3RlbSBEZXZlbG9wbWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBjb3JlIHN5c3RlbSBkZXZlbG9wbWVudCwgaXQgaXMgb2Z0ZW4gYmVzdCB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBpdHNlbGYgYXZhaWxhYmxlIG9uIHRoZSBkZXZlbG9wZXIgd29ya3N0YXRpb25zCisgICAgICAgICAgICAgICAgc28gZGV2ZWxvcGVycyBjYW4gcnVuIHRoZWlyIG93biBidWlsZHMgYW5kIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgcmVidWlsZCB0aGUgc29mdHdhcmUgc3RhY2suCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBrZWVwIHRoZSBjb3JlIHN5c3RlbSB1bmNoYW5nZWQgYXMgbXVjaCBhcworICAgICAgICAgICAgICAgIHBvc3NpYmxlIGFuZCBkbyB5b3VyIHdvcmsgaW4gbGF5ZXJzIG9uIHRvcCBvZiB0aGUgY29yZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgRG9pbmcgc28gZ2l2ZXMgeW91IGEgZ3JlYXRlciBsZXZlbCBvZiBwb3J0YWJpbGl0eSB3aGVuCisgICAgICAgICAgICAgICAgdXBncmFkaW5nIHRvIG5ldyB2ZXJzaW9ucyBvZiB0aGUgY29yZSBzeXN0ZW0gb3IgQm9hcmQKKyAgICAgICAgICAgICAgICBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNoYXJlIGxheWVycyBhbW9uZ3N0IHRoZSBkZXZlbG9wZXJzIG9mIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgIHByb2plY3QgYW5kIGNvbnRhaW4gdGhlIHBvbGljeSBjb25maWd1cmF0aW9uIHRoYXQgZGVmaW5lcworICAgICAgICAgICAgICAgIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSBwcmV2aW91cyBiZXN0IHByYWN0aWNlcywgdGhlcmUgZXhpc3RzIGEgbnVtYmVyCisgICAgICAgICAgICAgICAgb2YgdGlwcyBhbmQgdHJpY2tzIHRoYXQgY2FuIGhlbHAgc3BlZWQgdXAgY29yZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIHByb2plY3RzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc2hhcmVkLXN0YXRlLWNhY2hlJz5TaGFyZWQgU3RhdGUgQ2FjaGU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgKHNzdGF0ZSkgYW1vbmcgZ3JvdXBzIG9mIGRldmVsb3BlcnMgd2hvIGFyZSBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0IG5ldHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmVzdCB3YXkgdG8gc2hhcmUgc3N0YXRlIGlzIHRocm91Z2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKSBzaGFyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB1c2VyIHRvIGJ1aWxkIGEgZ2l2ZW4gY29tcG9uZW50IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IHRpbWUgY29udHJpYnV0ZXMgdGhhdCBvYmplY3QgdG8gdGhlIHNzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHN1YnNlcXVlbnQgYnVpbGRzIGZyb20gb3RoZXIgZGV2ZWxvcGVycyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICByZXVzZSB0aGUgb2JqZWN0IHJhdGhlciB0aGFuIHJlYnVpbGQgaXQgdGhlbXNlbHZlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBvdGhlciBwcm90b2NvbHMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3N0YXRlIHN1Y2ggYXMgSFRUUCBhbmQgRlRQLCB5b3Ugc2hvdWxkIGF2b2lkIHRoZXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgSFRUUCBsaW1pdHMgdGhlIHNzdGF0ZSB0byByZWFkLW9ubHkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBGVFAgcHJvdmlkZXMgcG9vciBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SGF2ZSBhdXRvYnVpbGRlcnMgY29udHJpYnV0ZSB0byB0aGUgc3N0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICBwb29sIHNpbWlsYXJseSB0byBob3cgdGhlIGRldmVsb3BlciB3b3Jrc3RhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdiZXN0LXByYWN0aWNlcy1hdXRvYnVpbGRlcnMnPkF1dG9idWlsZGVyczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgc3RhbmQtYWxvbmUgdGFyYmFsbHMgdGhhdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyIgc3lzdGVtIHJlcXVpcmVtZW50cyBpZiBmb3Igc29tZSByZWFzb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlciB3b3Jrc3RhdGlvbnMgZG8gbm90IG1lZXQgbWluaW11bSBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50cyBzdWNoIGFzIGxhdGVzdCBQeXRob24gdmVyc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+LCBvciBvdGhlciB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gaW5zdGFsbCBhbmQgcmVsb2NhdGUgdGhlIHRhcmJhbGwgZXhhY3RseSBhcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvdWxkIHRoZSB1c3VhbCBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgYWxsIGRldmVsb3BlcnMgY2FuIG1lZXQgbWluaW11bSB2ZXJzaW9uIHJlcXVpcmVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgb24gbW9zdCBkaXN0cmlidXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIGEgc21hbGwgbnVtYmVyIG9mIHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggcGVyZm9ybWFuY2Ugc3lzdGVtcyBmb3IgdGVzdGluZyBwdXJwb3NlcworICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gZHVhbCwgc2l4LWNvcmUgWGVvbnMgd2l0aCAyNCBHYnl0ZXMgb2YgUkFNCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGxlbnR5IG9mIGRpc2sgc3BhY2UpLgorICAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcGVycyBjYW4gdXNlIHRoZXNlIHN5c3RlbXMgZm9yIHdpZGVyLCBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpdmUgdGVzdGluZyB3aGlsZSB0aGV5IGNvbnRpbnVlIHRvIGRldmVsb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsbHkgdXNpbmcgdGhlaXIgcHJpbWFyeSBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuYWJsZSB0aGUgUFIgU2VydmljZSB3aGVuIHBhY2thZ2UgZmVlZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgaW5jcmVtZW50YWwgd2l0aCBjb250aW51YWxseSBpbmNyZWFzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPlBSPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgdGhpcyBzaXR1YXRpb24gb2NjdXJzIHdoZW4geW91IHVzZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlzaCBwYWNrYWdlIGZlZWRzIGFuZCB1c2UgYSBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGUgUFIgU2VydmljZSBmb3IgYWxsIHVzZXJzIHdobworICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBzaGFyZWQgc3RhdGUgcG9vbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBQUiBTZXJ2aWNlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+V29ya2luZyBXaXRoIGEgUFIgU2VydmljZTwvbGluaz4iLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtc291cmNlLWNvbnRyb2wtbWFuYWdlbWVudCc+CisgICAgICAgIDx0aXRsZT5Tb3VyY2UgQ29udHJvbCBNYW5hZ2VtZW50IChTQ00pPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEtlZXBpbmcgeW91cgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBhbnkgc29mdHdhcmUgeW91IGFyZSBkZXZlbG9waW5nIHVuZGVyIHRoZQorICAgICAgICAgICAgY29udHJvbCBvZiBhbiBTQ00gc3lzdGVtIHRoYXQgaXMgY29tcGF0aWJsZQorICAgICAgICAgICAgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBhZHZpc2FibGUuCisgICAgICAgICAgICBPZiB0aGUgU0NNcyBCaXRCYWtlIHN1cHBvcnRzLCB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgdGVhbSBzdHJvbmdseSByZWNvbW1lbmRzIHVzaW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4uCisgICAgICAgICAgICBHaXQgaXMgYSBkaXN0cmlidXRlZCBzeXN0ZW0gdGhhdCBpcyBlYXN5IHRvIGJhY2t1cCwKKyAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gd29yayByZW1vdGVseSwgYW5kIHRoZW4gY29ubmVjdHMgYmFjayB0byB0aGUKKyAgICAgICAgICAgIGluZnJhc3RydWN0dXJlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHJlbGF0aXZlbHkgZWFzeSB0byBzZXQgdXAgR2l0IHNlcnZpY2VzIGFuZCBjcmVhdGUKKyAgICAgICAgICAgIGluZnJhc3RydWN0dXJlIGxpa2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnPC91bGluaz4sCisgICAgICAgICAgICB3aGljaCBpcyBiYXNlZCBvbiBzZXJ2ZXIgc29mdHdhcmUgY2FsbGVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiB3aXRoIDxmaWxlbmFtZT5jZ2l0PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGJlaW5nIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHdlYiBpbnRlcmZhY2UgdGhhdCBsZXRzIHlvdSB2aWV3IHRoZQorICAgICAgICAgICAgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IHNvZnR3YXJlIGlkZW50aWZpZXMgdXNlcnMKKyAgICAgICAgICAgIHVzaW5nIFNTSCBrZXlzIGFuZCBhbGxvd3MgYnJhbmNoLWJhc2VkCisgICAgICAgICAgICBhY2Nlc3MgY29udHJvbHMgdG8gcmVwb3NpdG9yaWVzIHRoYXQgeW91IGNhbiBjb250cm9sIGFzIGxpdHRsZQorICAgICAgICAgICAgb3IgYXMgbXVjaCBhcyBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoZSBzZXR1cCBvZiB0aGVzZSBzZXJ2aWNlcyBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgSG93ZXZlciwgc2l0ZXMgc3VjaCBhcyB0aGVzZSBleGlzdCB0aGF0IGRlc2NyaWJlIGhvdyB0byBwZXJmb3JtCisgICAgICAgICAgICBzZXR1cDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9ib29rL2NoNC04Lmh0bWwnPkdpdCBkb2N1bWVudGF0aW9uPC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIERlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgc2VydmVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vc2l0YXJhbWMuZ2l0aHViLmNvbS9naXRvbGl0ZS9tYXN0ZXItdG9jLmh0bWwnPlRoZSA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiBtYXN0ZXIgaW5kZXg8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgQWxsIHRvcGljcyBmb3IgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwczovL2dpdC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0ludGVyZmFjZXMsX2Zyb250ZW5kcyxfYW5kX3Rvb2xzJz5JbnRlcmZhY2VzLCBmcm9udGVuZHMsIGFuZCB0b29sczwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byBjcmVhdGUgaW50ZXJmYWNlcyBhbmQgZnJvbnRlbmRzCisgICAgICAgICAgICAgICAgICAgIGZvciBHaXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1hdXRvYnVpbGRlcnMnPgorICAgICAgICA8dGl0bGU+QXV0b2J1aWxkZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF1dG9idWlsZGVycyBhcmUgb2Z0ZW4gdGhlIGNvcmUgb2YgYSBkZXZlbG9wbWVudCBwcm9qZWN0LgorICAgICAgICAgICAgSXQgaXMgaGVyZSB0aGF0IGNoYW5nZXMgZnJvbSBpbmRpdmlkdWFsIGRldmVsb3BlcnMgYXJlIGJyb3VnaHQKKyAgICAgICAgICAgIHRvZ2V0aGVyIGFuZCBjZW50cmFsbHkgdGVzdGVkIGFuZCBzdWJzZXF1ZW50IGRlY2lzaW9ucyBhYm91dAorICAgICAgICAgICAgcmVsZWFzZXMgY2FuIGJlIG1hZGUuCisgICAgICAgICAgICBBdXRvYnVpbGRlcnMgYWxzbyBhbGxvdyBmb3IgImNvbnRpbnVvdXMgaW50ZWdyYXRpb24iIHN0eWxlCisgICAgICAgICAgICB0ZXN0aW5nIG9mIHNvZnR3YXJlIGNvbXBvbmVudHMgYW5kIHJlZ3Jlc3Npb24gaWRlbnRpZmljYXRpb24KKyAgICAgICAgICAgIGFuZCB0cmFja2luZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VlICI8dWxpbmsgdXJsPSdodHRwOi8vYXV0b2J1aWxkZXIueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdCBBdXRvYnVpbGRlcjwvdWxpbms+IgorICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGxpbmtzIHRvIGJ1aWxkYm90LgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBoYXMgZm91bmQgdGhpcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgd29ya3Mgd2VsbCBpbiB0aGlzIHJvbGUuCisgICAgICAgICAgICBBIHB1YmxpYyBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIEF1dG9idWlsZGVycywgd2hpY2ggd2UgdXNlIHRvIHRlc3QgdGhlIG92ZXJhbGwgaGVhbHRoIG9mIHRoZQorICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZlYXR1cmVzIG9mIHRoaXMgc3lzdGVtIGFyZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhpZ2hsaWdodHMgd2hlbiBjb21taXRzIGJyZWFrIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlBvcHVsYXRlcyBhbiBzc3RhdGUgY2FjaGUgZnJvbSB3aGljaAorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIGNhbiBwdWxsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBsb2NhbAorICAgICAgICAgICAgICAgICAgICBidWlsZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG93cyBjb21taXQgaG9vayB0cmlnZ2VycywKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggdHJpZ2dlciBidWlsZHMgd2hlbiBjb21taXRzIGFyZSBtYWRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxsb3dzIHRyaWdnZXJpbmcgb2YgYXV0b21hdGVkIGltYWdlIGJvb3RpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRlc3RpbmcgdW5kZXIgdGhlIFF1aWNrRU1VbGF0b3IgKFFFTVUpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydHMgaW5jcmVtZW50YWwgYnVpbGQgdGVzdGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZnJvbS1zY3JhdGNoIGJ1aWxkcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2hhcmVzIG91dHB1dCB0aGF0IGFsbG93cyBkZXZlbG9wZXIKKyAgICAgICAgICAgICAgICAgICAgdGVzdGluZyBhbmQgaGlzdG9yaWNhbCByZWdyZXNzaW9uIGludmVzdGlnYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGVzIG91dHB1dCB0aGF0IGNhbiBiZSB1c2VkIGZvciByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG93cyBzY2hlZHVsaW5nIG9mIGJ1aWxkcyBzbyB0aGF0IHJlc291cmNlcworICAgICAgICAgICAgICAgICAgICBjYW4gYmUgdXNlZCBlZmZpY2llbnRseS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXBvbGljaWVzLWFuZC1jaGFuZ2UtZmxvdyc+CisgICAgICAgIDx0aXRsZT5Qb2xpY2llcyBhbmQgQ2hhbmdlIEZsb3c8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXRzZWxmIHVzZXMgYSBoaWVyYXJjaGljYWwgc3RydWN0dXJlIGFuZCBhCisgICAgICAgICAgICBwdWxsIG1vZGVsLgorICAgICAgICAgICAgU2NyaXB0cyBleGlzdCB0byBjcmVhdGUgYW5kIHNlbmQgcHVsbCByZXF1ZXN0cworICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoaXMgbW9kZWwgaXMgaW4gbGluZSB3aXRoIG90aGVyIG9wZW4gc291cmNlIHByb2plY3RzIHdoZXJlCisgICAgICAgICAgICBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIHNwZWNpZmljIGFyZWFzIG9mIHRoZSBwcm9qZWN0CisgICAgICAgICAgICBhbmQgYSBzaW5nbGUgbWFpbnRhaW5lciBoYW5kbGVzIHRoZSBmaW5hbCAidG9wLW9mLXRyZWUiIG1lcmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSBhIG1vcmUgY29sbGVjdGl2ZSBwdXNoIG1vZGVsLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+IHNvZnR3YXJlIHN1cHBvcnRzIGJvdGggdGhlCisgICAgICAgICAgICBwdXNoIGFuZCBwdWxsIG1vZGVscyBxdWl0ZSBlYXNpbHkuCisgICAgICAgIDwvbm90ZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHdpdGggYW55IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBpdCBpcyBpbXBvcnRhbnQKKyAgICAgICAgICAgIHRvIGRvY3VtZW50IHRoZSBwb2xpY3kgdXNlZCBhcyB3ZWxsIGFzIGFueSBtYWluIHByb2plY3QKKyAgICAgICAgICAgIGd1aWRlbGluZXMgc28gdGhleSBhcmUgdW5kZXJzdG9vZCBieSBldmVyeW9uZS4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gYSBnb29kIGlkZWEgdG8gaGF2ZSB3ZWxsIHN0cnVjdHVyZWQKKyAgICAgICAgICAgIGNvbW1pdCBtZXNzYWdlcywgd2hpY2ggYXJlIHVzdWFsbHkgYSBwYXJ0IG9mIGEgcHJvamVjdCdzCisgICAgICAgICAgICBndWlkZWxpbmVzLgorICAgICAgICAgICAgR29vZCBjb21taXQgbWVzc2FnZXMgYXJlIGVzc2VudGlhbCB3aGVuIGxvb2tpbmcgYmFjayBpbiB0aW1lIGFuZAorICAgICAgICAgICAgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2h5IGNoYW5nZXMgd2VyZSBtYWRlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZGlzY292ZXIgdGhhdCBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gdGhlIGNvcmUgbGF5ZXIgb2YgdGhlCisgICAgICAgICAgICBwcm9qZWN0LCBpdCBpcyB3b3J0aCBzaGFyaW5nIHRob3NlIHdpdGggdGhlIGNvbW11bml0eSBhcyBzb29uCisgICAgICAgICAgICBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgIENoYW5jZXMgYXJlIGlmIHlvdSBoYXZlIGRpc2NvdmVyZWQgdGhlIG5lZWQgZm9yIGNoYW5nZXMsIHNvbWVvbmUKKyAgICAgICAgICAgIGVsc2UgaW4gdGhlIGNvbW11bml0eSBuZWVkcyB0aGVtIGFsc28uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtc3VtbWFyeSc+CisgICAgICAgIDx0aXRsZT5TdW1tYXJ5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzdW1tYXJpemVzIHRoZSBrZXkgcmVjb21tZW5kYXRpb25zIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb25zOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWludGFpbiB5b3VyIE1ldGFkYXRhIGluIGxheWVycyB0aGF0IG1ha2Ugc2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIHlvdXIgc2l0dWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VwYXJhdGUgdGhlIHByb2plY3QncyBNZXRhZGF0YSBhbmQgY29kZSBieSB1c2luZworICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgbG9jYWwgR2l0CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcyBmb3IgcmVsYXRlZCB1cHN0cmVhbSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZQorICAgICAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzZXQgdXAgdGhlIHNzdGF0ZSBjYWNoZSBvbiBhIHN5c3RlbSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGJ5IGRldmVsb3BlcnMgaW4gdGhlIHNhbWUgb3JnYW5pemF0aW9uIGFuZCBzaGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBzb3VyY2UgZGlyZWN0b3JpZXMgb24gdGhlaXIgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgYW4gQXV0b2J1aWxkZXIgYW5kIGhhdmUgaXQgcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNzdGF0ZSBjYWNoZSBhbmQgc291cmNlIGRpcmVjdG9yaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBjb21tdW5pdHkgZW5jb3VyYWdlcyB5b3UKKyAgICAgICAgICAgICAgICAgICAgdG8gc2VuZCBwYXRjaGVzIHRvIHRoZSBwcm9qZWN0IHRvIGZpeCBidWdzIG9yIGFkZCBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIHN1Ym1pdCBwYXRjaGVzLCBmb2xsb3cgdGhlIHByb2plY3QgY29tbWl0CisgICAgICAgICAgICAgICAgICAgIGd1aWRlbGluZXMgZm9yIHdyaXRpbmcgZ29vZCBjb21taXQgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZW5kIGNoYW5nZXMgdG8gdGhlIGNvcmUgc29vbmVyIHRoYW4gbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgYXMgb3RoZXJzIGFyZSBsaWtlbHkgdG8gcnVuIGludG8gdGhlIHNhbWUgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICBGb3Igc29tZSBndWlkYW5jZSBvbiBtYWlsaW5nIGxpc3RzIHRvIHVzZSwgc2VlIHRoZSBsaXN0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGUgbWFpbGluZyBsaXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVzb3VyY2VzLW1haWxpbmdsaXN0Jz5NYWlsaW5nIExpc3RzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz4KKyAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIG1haW50YWlucyBjb21wbGV0ZSBzb3VyY2UgcmVwb3NpdG9yaWVzIGZvciBhbGwKKyAgICAgICAgWW9jdG8gUHJvamVjdCBmaWxlcyBhdAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgIFRoaXMgd2ViLWJhc2VkIHNvdXJjZSBjb2RlIGJyb3dzZXIgaXMgb3JnYW5pemVkIGludG8gY2F0ZWdvcmllcyBieQorICAgICAgICBmdW5jdGlvbiBzdWNoIGFzIElERSBQbHVnaW5zLCBNYXRjaGJveCwgUG9reSwgWW9jdG8gTGludXggS2VybmVsLCBhbmQKKyAgICAgICAgc28gZm9ydGguCisgICAgICAgIEZyb20gdGhlIGludGVyZmFjZSwgeW91IGNhbiBjbGljayBvbiBhbnkgcGFydGljdWxhciBpdGVtIGluIHRoZSAiTmFtZSIKKyAgICAgICAgY29sdW1uIGFuZCBzZWUgdGhlIFVSTCBhdCB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIHRoYXQgeW91IG5lZWQgdG8gY2xvbmUKKyAgICAgICAgYSBHaXQgcmVwb3NpdG9yeSBmb3IgdGhhdCBwYXJ0aWN1bGFyIGl0ZW0uCisgICAgICAgIEhhdmluZyBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiwgd2hpY2ggaXMKKyAgICAgICAgdXN1YWxseSBuYW1lZCAicG9reSIsIGFsbG93cworICAgICAgICB5b3UgdG8gbWFrZSBjaGFuZ2VzLCBjb250cmlidXRlIHRvIHRoZSBoaXN0b3J5LCBhbmQgdWx0aW1hdGVseSBlbmhhbmNlCisgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0J3MgdG9vbHMsIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMsIGFuZCBzbyBmb3J0aC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGFueSBzdXBwb3J0ZWQgcmVsZWFzZSBvZiBZb2N0byBQcm9qZWN0LCB5b3UgY2FuIGFsc28gZ28gdG8gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+IGFuZAorICAgICAgICBzZWxlY3QgdGhlICJEb3dubG9hZHMiIHRhYiBhbmQgZ2V0IGEgcmVsZWFzZWQgdGFyYmFsbCBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IG9yIGFueSBzdXBwb3J0ZWQgQlNQIHRhcmJhbGxzLgorICAgICAgICBVbnBhY2tpbmcgdGhlc2UgdGFyYmFsbHMgZ2l2ZXMgeW91IGEgc25hcHNob3Qgb2YgdGhlIHJlbGVhc2VkCisgICAgICAgIGZpbGVzLgorICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIHNldHRpbmcgdXAgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBmaWxlcyBmb3Igc3VwcG9ydGVkIEJTUHMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4sIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4pIGlzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gdG8gY3JlYXRlIGEgbG9jYWwgY29weSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gYWx3YXlzIHdvcmsgaW4gbWF0Y2hpbmcgYnJhbmNoZXMgZm9yIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNlbGVjdGVkIEJTUCByZXBvc2l0b3J5IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGNoZWNrZWQgb3V0IHRoZSAibWFzdGVyIiBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQgeW91IGFyZSBnb2luZyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiwgYmUgc3VyZSB0byBjaGVja291dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIm1hc3RlciIgYnJhbmNoIG9mIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gc3VtbWFyeSwgaGVyZSBpcyB3aGVyZSB5b3UgY2FuIGdldCB0aGUgcHJvamVjdCBmaWxlcyBuZWVkZWQgZm9yIGRldmVsb3BtZW50OgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdzb3VyY2UtcmVwb3NpdG9yaWVzJz48ZW1waGFzaXM+PHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2knPlNvdXJjZSBSZXBvc2l0b3JpZXM6PC91bGluaz48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBjb250YWlucyBJREUgUGx1Z2lucywgTWF0Y2hib3gsIFBva3ksIFBva3kgU3VwcG9ydCwgVG9vbHMsIFlvY3RvIExpbnV4IEtlcm5lbCwgYW5kIFlvY3RvCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgTGF5ZXJzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGxvY2FsIGNvcGllcyBvZiBHaXQgcmVwb3NpdG9yaWVzIGZvciBlYWNoIG9mIHRoZXNlIGFyZWFzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjRpbiIgLz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48YW5jaG9yIGlkPSdpbmRleC1kb3dubG9hZHMnIC8+PGVtcGhhc2lzPjx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzLyc+SW5kZXggb2YgL3JlbGVhc2VzOjwvdWxpbms+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIGluZGV4IG9mIHJlbGVhc2VzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICBZb2N0byBQbHVnLWluLCBtaXNjZWxsYW5lb3VzIHN1cHBvcnQsIFBva3ksIFBzZXVkbywgaW5zdGFsbGVycyBmb3IgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucywKKyAgICAgICAgICAgICAgICBhbmQgYWxsIHJlbGVhc2VkIHZlcnNpb25zIG9mIFlvY3RvIFByb2plY3QgaW4gdGhlIGZvcm0gb2YgaW1hZ2VzIG9yIHRhcmJhbGxzLgorICAgICAgICAgICAgICAgIERvd25sb2FkaW5nIGFuZCBleHRyYWN0aW5nIHRoZXNlIGZpbGVzIGRvZXMgbm90IHByb2R1Y2UgYSBsb2NhbCBjb3B5IG9mIHRoZQorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGJ1dCByYXRoZXIgYSBzbmFwc2hvdCBvZiBhIHBhcnRpY3VsYXIgcmVsZWFzZSBvciBpbWFnZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSIzLjVpbiIgLz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IkRvd25sb2FkcyIgcGFnZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCBXZWJzaXRlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhpcyBwYWdlIGJ5IGdvaW5nIHRvIHRoZSB3ZWJzaXRlIGFuZCB0aGVuIHNlbGVjdGluZworICAgICAgICAgICAgICAgIHRoZSAiRG93bmxvYWRzIiB0YWIuCisgICAgICAgICAgICAgICAgVGhpcyBwYWdlIGFsbG93cyB5b3UgdG8gZG93bmxvYWQgYW55IFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICByZWxlYXNlIG9yIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBpbiB0YXJiYWxsIGZvcm0uCisgICAgICAgICAgICAgICAgVGhlIHRhcmJhbGxzIGFyZSBzaW1pbGFyIHRvIHRob3NlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzLyc+SW5kZXggb2YgL3JlbGVhc2VzOjwvdWxpbms+IGFyZWEuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy95cC1kb3dubG9hZC5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0neW9jdG8tcHJvamVjdC10ZXJtcyc+CisgICAgPHRpdGxlPllvY3RvIFByb2plY3QgVGVybXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgdGVybXMgYW5kIGRlZmluaXRpb25zIHVzZXJzIG5ldyB0byB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudAorICAgICAgICBlbnZpcm9ubWVudCBtaWdodCBmaW5kIGhlbHBmdWwuCisgICAgICAgIFdoaWxlIHNvbWUgb2YgdGhlc2UgdGVybXMgYXJlIHVuaXZlcnNhbCwgdGhlIGxpc3QgaW5jbHVkZXMgdGhlbSBqdXN0IGluIGNhc2U6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZCBGaWxlczo8L2VtcGhhc2lzPiBGaWxlcyB0aGF0IGFwcGVuZCBidWlsZCBpbmZvcm1hdGlvbiB0bworICAgICAgICAgICAgICAgIGEgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIGFyZSBrbm93biBhcyBCaXRCYWtlIGFwcGVuZCBmaWxlcyBhbmQgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGV4cGVjdHMgZXZlcnkgYXBwZW5kIGZpbGUgdG8gaGF2ZSBhIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgZmlsZS4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGFwcGVuZCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgbXVzdCB1c2UgdGhlIHNhbWUgcm9vdCBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWVzIGNhbiBkaWZmZXIgb25seSBpbiB0aGUgZmlsZSB0eXBlIHN1ZmZpeCB1c2VkIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SW5mb3JtYXRpb24gaW4gYXBwZW5kIGZpbGVzIGV4dGVuZHMgb3Igb3ZlcnJpZGVzIHRoZQorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBzaW1pbGFybHktbmFtZWQgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgYW4gYXBwZW5kIGZpbGUgaW4gdXNlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBBcHBlbmQgZmlsZXMgY2FuIGFsc28gdXNlIHdpbGRjYXJkIHBhdHRlcm5zIGluIHRoZWlyIHZlcnNpb24gbnVtYmVycworICAgICAgICAgICAgICAgICAgICBzbyB0aGV5IGNhbiBiZSBhcHBsaWVkIHRvIG1vcmUgdGhhbiBvbmUgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2JpdGJha2UtdGVybSc+PGVtcGhhc2lzPkJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgdGFzayBleGVjdXRvciBhbmQgc2NoZWR1bGVyIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQml0QmFrZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0nYnVpbGQtZGlyZWN0b3J5Jz48ZW1waGFzaXM+QnVpbGQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyB0ZXJtIHJlZmVycyB0byB0aGUgYXJlYSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gZm9yIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBUaGUgYXJlYSBpcyBjcmVhdGVkIHdoZW4geW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUKKyAgICAgICAgICAgICAgICBzZXR1cCBlbnZpcm9ubWVudCBzY3JpcHQgdGhhdCBpcyBmb3VuZCBpbiB0aGUgU291cmNlIERpcmVjdG9yeQorICAgICAgICAgICAgICAgIChpLmUuIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE9QRElSJz48ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgaGF2ZSBhIGxvdCBvZiBmbGV4aWJpbGl0eSB3aGVuIGNyZWF0aW5nIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgYXNzdW1lIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gaXMKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IGluc2lkZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBhbmQgbGV0IHRoZSBuYW1lIG9mIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSBkZWZhdWx0IHRvIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRS9wb2t5CisgICAgICQgc291cmNlICZPRV9JTklUX0ZJTEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IGluc2lkZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9tZSBkaXJlY3RvcnkgYW5kIHNwZWNpZmljYWxseSBuYW1lIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3QtYnVpbGRzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FCisgICAgICQgc291cmNlIHBva3kvJk9FX0lOSVRfRklMRTsgdGVzdC1idWlsZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIGRpcmVjdG9yeSBwYXRoIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljYWxseSBuYW1lIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55IGludGVybWVkaWF0ZSBmb2xkZXJzIGluIHRoZSBwYXRobmFtZSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBuZXh0IGV4YW1wbGUgY3JlYXRlcyBhIEJ1aWxkIERpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZUC0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPGZpbGVuYW1lPm15YnVpbGRzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkY2QgJEhPTUUKKyAgICAgJCBzb3VyY2UgJEhPTUUvcG9reS8mT0VfSU5JVF9GSUxFOyAkSE9NRS9teWJ1aWxkcy9ZUC0mUE9LWVZFUlNJT047CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgQnVpbGQgRGlyZWN0b3J5IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpdHMgd29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBjYW5ub3QgYmUgdW5kZXIgTkZTLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgYnkgZGVmYXVsdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBjYW5ub3QgYmUgdW5kZXIgTkZTLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IG5lZWQgdGhlIEJ1aWxkIERpcmVjdG9yeSB0byBiZSB1bmRlciBORlMsCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHVwIGJ5IHNldHRpbmcgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gdXNlIGEgbG9jYWwgZHJpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBlZmZlY3RpdmVseSBzZXBhcmF0ZXMgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDxmaWxlbmFtZT5UT1BESVI8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNsYXNzZXM6PC9lbXBoYXNpcz4gRmlsZXMgdGhhdCBwcm92aWRlIGZvciBsb2dpYyBlbmNhcHN1bGF0aW9uCisgICAgICAgICAgICAgICAgYW5kIGluaGVyaXRhbmNlIHNvIHRoYXQgY29tbW9ubHkgdXNlZCBwYXR0ZXJucyBjYW4gYmUgZGVmaW5lZCBvbmNlIGFuZCB0aGVuIGVhc2lseSB1c2VkCisgICAgICAgICAgICAgICAgaW4gbXVsdGlwbGUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIHRoZSBZb2N0byBQcm9qZWN0IGNsYXNzZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMnPkNsYXNzZXM8L3VsaW5rPiIgY2hhcHRlciBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgQ2xhc3MgZmlsZXMgZW5kIHdpdGggdGhlIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVuYW1lIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpbiB2YXJpb3VzIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZXMgcHJvdmlkZXMgZ2xvYmFsIGRlZmluaXRpb25zIG9mIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBpbgorICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIHVzZXItZGVmaW5lZCB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgZXZlcnkgYnVpbGQuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3kuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGRlZmluZXMgWW9jdG8gImRpc3RybyIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB1c2VkIG9ubHkgd2hlbiBidWlsZGluZyB3aXRoIHRoaXMgcG9saWN5LgorICAgICAgICAgICAgICAgIE1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcywgd2hpY2gKKyAgICAgICAgICAgICAgICBhcmUgbG9jYXRlZCB0aHJvdWdob3V0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LCBkZWZpbmUKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBhcmUgb25seSB1c2VkIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICBmb3IgdGhhdCB0YXJnZXQgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hY2hpbmUvYmVhZ2xlYm9uZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgZGVmaW5lcyB2YXJpYWJsZXMgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBBUk0gQ29ydGV4LUE4CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYm9hcmQpLgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZmlsZXMgZW5kIHdpdGggYSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVuYW1lIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz4KKyAgICAgICAgICAgICAgICA8ZW1waGFzaXM+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGEgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGlzIGEgY29sbGVjdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBkZXZlbG9wbWVudCB0b29scyBhbmQgdXRpbGl0aWVzIHRoYXQgcnVuIG9uIG9uZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIGFsbG93IHlvdSB0byBkZXZlbG9wIHNvZnR3YXJlIGZvciBhCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCwgb3IgdGFyZ2V0ZWQsIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdG9vbGNoYWlucyBjb250YWluIGNyb3NzLWNvbXBpbGVycywgbGlua2VycywgYW5kCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VycyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyB0d28gZGlmZmVyZW50IGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbnM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b29sY2hhaW4gb25seSB1c2VkIGJ5IGFuZCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UgZm9yIGEgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgcmVsb2NhdGFibGUgdG9vbGNoYWluIHVzZWQgb3V0c2lkZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYnkgZGV2ZWxvcGVycyB3aGVuIGRldmVsb3BpbmcgYXBwbGljYXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aWxsIHJ1biBvbiBhIHRhcmdldGVkIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgdGhpcyByZWxvY2F0YWJsZSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBpcyByZWZlcnJlZCB0byBhcyB0aGUgbWV0YS10b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbiBvZiB0aGVzZSB0b29sY2hhaW5zIGlzIHNpbXBsZSBhbmQgYXV0b21hdGVkLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdG9vbGNoYWluIGNvbmNlcHRzIGFzIHRoZXkgYXBwbHkgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlbG9jYXRhYmxlIHRvb2xjaGFpbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBbiBpbWFnZSBpcyBhbiBhcnRpZmFjdCBvZiB0aGUgQml0QmFrZSBidWlsZCBwcm9jZXNzIGdpdmVuCisgICAgICAgICAgICAgICAgYSBjb2xsZWN0aW9uIG9mIHJlY2lwZXMgYW5kIHJlbGF0ZWQgTWV0YWRhdGEuCisgICAgICAgICAgICAgICAgSW1hZ2VzIGFyZSB0aGUgYmluYXJ5IG91dHB1dCB0aGF0IHJ1biBvbiBzcGVjaWZpYyBoYXJkd2FyZSBvcgorICAgICAgICAgICAgICAgIFFFTVUgYW5kIGFyZSB1c2VkIGZvciBzcGVjaWZpYyB1c2UtY2FzZXMuCisgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGltYWdlIHR5cGVzIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdsYXllcic+PGVtcGhhc2lzPkxheWVyOjwvZW1waGFzaXM+IEEgY29sbGVjdGlvbiBvZiByZWNpcGVzIHJlcHJlc2VudGluZyB0aGUgY29yZSwKKyAgICAgICAgICAgICAgICBhIEJTUCwgb3IgYW4gYXBwbGljYXRpb24gc3RhY2suCisgICAgICAgICAgICAgICAgRm9yIGEgZGlzY3Vzc2lvbiBzcGVjaWZpY2FsbHkgb24gQlNQIExheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtbGF5ZXJzJz5CU1AgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J21ldGEtdG9vbGNoYWluJz48ZW1waGFzaXM+TWV0YS1Ub29sY2hhaW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHRlcm0gc29tZXRpbWVzIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdtZXRhZGF0YSc+PGVtcGhhc2lzPk1ldGFkYXRhOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzIHRoYXQgQml0QmFrZSBwYXJzZXMgd2hlbiBidWlsZGluZyBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBNZXRhZGF0YSBpbmNsdWRlcyByZWNpcGVzLCBjbGFzc2VzLCBhbmQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwgKCJrZXJuZWwgTWV0YWRhdGEiKSwKKyAgICAgICAgICAgICAgICBpdCByZWZlcnMgdG8gTWV0YWRhdGEgaW4gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBicmFuY2hlcyBvZiB0aGUga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdvZS1jb3JlJz48ZW1waGFzaXM+T0UtQ29yZTo8L2VtcGhhc2lzPiBBIGNvcmUgc2V0IG9mIE1ldGFkYXRhIG9yaWdpbmF0aW5nCisgICAgICAgICAgICAgICAgd2l0aCBPcGVuRW1iZWRkZWQgKE9FKSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIE9FIGFuZCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBUaGlzIE1ldGFkYXRhIGlzIGZvdW5kIGluIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nYnVpbGQtc3lzdGVtLXRlcm0nPjxlbXBoYXNpcz5PcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZCBvbiBhbm90aGVyIHByb2plY3Qga25vd24KKyAgICAgICAgICAgICAgICBhcyAiUG9reSIsIHdoaWNoIHVzZXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdiaXRiYWtlLXRlcm0nPkJpdEJha2U8L2xpbms+IGFzIHRoZSB0YXNrCisgICAgICAgICAgICAgICAgZXhlY3V0b3IuCisgICAgICAgICAgICAgICAgVGhyb3VnaG91dCB0aGUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHNldCwgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gc2ltcGx5CisgICAgICAgICAgICAgICAgYXMgInRoZSBidWlsZCBzeXN0ZW0iLgorICAgICAgICAgICAgICAgIElmIG90aGVyIGJ1aWxkIHN5c3RlbXMsIHN1Y2ggYXMgYSBob3N0IG9yIHRhcmdldCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhcmUgcmVmZXJlbmNlZCwgdGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhlCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNvbWUgaGlzdG9yaWNhbCBpbmZvcm1hdGlvbiBhYm91dCBQb2t5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Bva3knPlBva3k8L2xpbms+IHRlcm0uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYWNrYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QsIHRoaXMgdGVybSByZWZlcnMgdG8gYQorICAgICAgICAgICAgICAgIHJlY2lwZSdzIHBhY2thZ2VkIG91dHB1dCBwcm9kdWNlZCBieSBCaXRCYWtlIChpLmUuIGEKKyAgICAgICAgICAgICAgICAiYmFrZWQgcmVjaXBlIikuCisgICAgICAgICAgICAgICAgQSBwYWNrYWdlIGlzIGdlbmVyYWxseSB0aGUgY29tcGlsZWQgYmluYXJpZXMgcHJvZHVjZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUncyBzb3VyY2VzLgorICAgICAgICAgICAgICAgIFlvdSAiYmFrZSIgc29tZXRoaW5nIGJ5IHJ1bm5pbmcgaXQgdGhyb3VnaCBCaXRCYWtlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgdGVybSAicGFja2FnZSIgY2FuLCBpbiBnZW5lcmFsLCBoYXZlIHN1YnRsZQorICAgICAgICAgICAgICAgIG1lYW5pbmdzLiAgRm9yIGV4YW1wbGUsIHRoZSBwYWNrYWdlcyByZWZlcnJlZCB0byBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbiBhcmUKKyAgICAgICAgICAgICAgICBjb21waWxlZCBiaW5hcmllcyB0aGF0LCB3aGVuIGluc3RhbGxlZCwgYWRkIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBMaW51eAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QW5vdGhlciBwb2ludCB3b3J0aCBub3RpbmcgaXMgdGhhdCBoaXN0b3JpY2FsbHkgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgICAgIHJlY2lwZXMgd2VyZSByZWZlcnJlZCB0byBhcyBwYWNrYWdlcyAtIHRodXMsIHRoZSBleGlzdGVuY2Ugb2Ygc2V2ZXJhbCBCaXRCYWtlCisgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHNlZW1pbmdseSBtaXMtbmFtZWQsCisgICAgICAgICAgICAgICAgKGUuZy4gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZSBHcm91cHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBcmJpdHJhcnkgZ3JvdXBzIG9mIHNvZnR3YXJlIFJlY2lwZXMuCisgICAgICAgICAgICAgICAgWW91IHVzZSBwYWNrYWdlIGdyb3VwcyB0byBob2xkIHJlY2lwZXMgdGhhdCwgd2hlbiBidWlsdCwKKyAgICAgICAgICAgICAgICB1c3VhbGx5IGFjY29tcGxpc2ggYSBzaW5nbGUgdGFzay4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBwYWNrYWdlIGdyb3VwIGNvdWxkIGNvbnRhaW4gdGhlIHJlY2lwZXMgZm9yIGEKKyAgICAgICAgICAgICAgICBjb21wYW554oCZcyBwcm9wcmlldGFyeSBvciB2YWx1ZS1hZGQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgT3IsIHRoZSBwYWNrYWdlIGdyb3VwIGNvdWxkIGNvbnRhaW4gdGhlIHJlY2lwZXMgdGhhdCBlbmFibGUKKyAgICAgICAgICAgICAgICBncmFwaGljcy4KKyAgICAgICAgICAgICAgICBBIHBhY2thZ2UgZ3JvdXAgaXMgcmVhbGx5IGp1c3QgYW5vdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBwYWNrYWdlIGdyb3VwIGZpbGVzIGFyZSByZWNpcGVzLCB0aGV5IGVuZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlbmFtZSBleHRlbnNpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J3Bva3knPjxlbXBoYXNpcz5Qb2t5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIHRlcm0gInBva3kiIGNhbiBtZWFuIHNldmVyYWwgdGhpbmdzLgorICAgICAgICAgICAgICAgIEluIGl0cyBtb3N0IGdlbmVyYWwgc2Vuc2UsIGl0IGlzIGFuIG9wZW4tc291cmNlCisgICAgICAgICAgICAgICAgcHJvamVjdCB0aGF0IHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIGJ5IE9wZW5lZEhhbmQuCisgICAgICAgICAgICAgICAgV2l0aCBPcGVuZWRIYW5kLCBwb2t5IHdhcyBkZXZlbG9wZWQgb2ZmIG9mIHRoZSBleGlzdGluZworICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYmVjb21pbmcgYSBjb21tZXJjaWFsbHkKKyAgICAgICAgICAgICAgICBzdXBwb3J0YWJsZSBidWlsZCBzeXN0ZW0gZm9yIGVtYmVkZGVkIExpbnV4LgorICAgICAgICAgICAgICAgIEFmdGVyIEludGVsIENvcnBvcmF0aW9uIGFjcXVpcmVkIE9wZW5lZEhhbmQsIHRoZQorICAgICAgICAgICAgICAgIHByb2plY3QgcG9reSBiZWNhbWUgdGhlIGJhc2lzIGZvciB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5XaXRoaW4gdGhlIFlvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcywKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGV4aXN0cyBhcyBhIHNlcGFyYXRlIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgeW91IGNhbiBjbG9uZSB0byB5aWVsZCBhIGxvY2FsIGNvcHkgb24geW91cgorICAgICAgICAgICAgICAgIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRodXMsICJwb2t5IiBjYW4gcmVmZXIgdG8gdGhlIGxvY2FsIGNvcHkgb2YgdGhlIFNvdXJjZQorICAgICAgICAgICAgICAgIERpcmVjdG9yeSB1c2VkIGZvciBkZXZlbG9wbWVudCB3aXRoaW4gdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+RmluYWxseSwgInBva3kiIGNhbiByZWZlciB0byB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgKGkuZS4gZGlzdHJpYnV0aW9uKSBjcmVhdGVkIHdoZW4geW91IHVzZSB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IHRvIGJ1aWxkIGFuIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHNldCBvZiBpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEEgcmVjaXBlIGRlc2NyaWJlcyB3aGVyZSB5b3UgZ2V0IHNvdXJjZSBjb2RlLCB3aGljaCBwYXRjaGVzCisgICAgICAgICAgICAgICAgdG8gYXBwbHksIGhvdyB0byBjb25maWd1cmUgdGhlIHNvdXJjZSwgaG93IHRvIGNvbXBpbGUgaXQgYW5kIHNvIG9uLgorICAgICAgICAgICAgICAgIFJlY2lwZXMgYWxzbyBkZXNjcmliZSBkZXBlbmRlbmNpZXMgZm9yIGxpYnJhcmllcyBvciBmb3Igb3RoZXIKKyAgICAgICAgICAgICAgICByZWNpcGVzLgorICAgICAgICAgICAgICAgIFJlY2lwZXMgcmVwcmVzZW50IHRoZSBsb2dpY2FsIHVuaXQgb2YgZXhlY3V0aW9uLCB0aGUgc29mdHdhcmUKKyAgICAgICAgICAgICAgICB0byBidWlsZCwgdGhlIGltYWdlcyB0byBidWlsZCwgYW5kIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3NvdXJjZS1kaXJlY3RvcnknPjxlbXBoYXNpcz5Tb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyB0ZXJtIHJlZmVycyB0byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBjcmVhdGVkIGFzIGEgcmVzdWx0CisgICAgICAgICAgICAgICAgb2YgY3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIGV4cGFuZGluZyBhIHJlbGVhc2VkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gdGFyYmFsbC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRpbmcgYSBsb2NhbCBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGlzIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIHNldHRpbmcgdXAKKyAgICAgICAgICAgICAgICAgICAgeW91ciBTb3VyY2UgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgeW91IG1pZ2h0IGhlYXIgdGhlIHRlcm0gInBva3kgZGlyZWN0b3J5IiB1c2VkIHRvIHJlZmVyCisgICAgICAgICAgICAgICAgdG8gdGhpcyBkaXJlY3Rvcnkgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzIHRoYXQgY29udGFpbiBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCB0aGUgU291cmNlIERpcmVjdG9yeSB5b3UgdXNlIGRvZXMgbm90IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlc2UgdHlwZXMgb2YgbmFtZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBTb3VyY2UgRGlyZWN0b3J5IGNvbnRhaW5zIEJpdEJha2UsIERvY3VtZW50YXRpb24sCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgYW5kIG90aGVyIGZpbGVzIHRoYXQgYWxsIHN1cHBvcnQgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbXVzdCBoYXZlIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGluIHBsYWNlIG9uCisgICAgICAgICAgICAgICAgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gaW4gb3JkZXIgdG8gZG8gYW55IGRldmVsb3BtZW50IHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB5b3UgY3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdQorICAgICAgICAgICAgICAgIGNhbiBuYW1lIHRoZSByZXBvc2l0b3J5IGFueXRoaW5nIHlvdSBsaWtlLgorICAgICAgICAgICAgICAgIFRocm91Z2hvdXQgbXVjaCBvZiB0aGUgZG9jdW1lbnRhdGlvbiwgInBva3kiCisgICAgICAgICAgICAgICAgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGZvbGRlciBvZiB0aGUgbG9jYWwgY29weSBvZgorICAgICAgICAgICAgICAgIHRoZSBwb2t5IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgY2xvbmluZyB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHJlc3VsdHMgaW4gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSB3aG9zZSB0b3AtbGV2ZWwKKyAgICAgICAgICAgICAgICBmb2xkZXIgaXMgYWxzbyBuYW1lZCAicG9reSIuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+V2hpbGUgaXQgaXMgbm90IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0YXJiYWxsIGV4cGFuc2lvbgorICAgICAgICAgICAgICAgIHRvIHNldCB1cCB0aGUgU291cmNlIERpcmVjdG9yeSwgaWYgeW91IGRvLCB0aGUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWUgb2YgdGhlIFNvdXJjZSBEaXJlY3RvcnkgaXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSB0YXJiYWxsLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBkb3dubG9hZGluZyBhbmQgdW5wYWNraW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19QT0tZX1RBUkJBTEw7PC9maWxlbmFtZT4gcmVzdWx0cyBpbiBhCisgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSB3aG9zZSByb290IGZvbGRlciBpcyBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fUE9LWTs8L2ZpbGVuYW1lPi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5JdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKKyAgICAgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IGNyZWF0ZWQgYnkgdW5wYWNraW5nIGEgcmVsZWFzZWQgdGFyYmFsbCBhcworICAgICAgICAgICAgICAgIGNvbXBhcmVkIHRvIGNsb25pbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFdoZW4geW91IHVucGFjayBhIHRhcmJhbGwsIHlvdSBoYXZlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIGZpbGVzCisgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIHRpbWUgb2YgcmVsZWFzZSAtIGEgZml4ZWQgcmVsZWFzZSBwb2ludC4KKyAgICAgICAgICAgICAgICBBbnkgY2hhbmdlcyB5b3UgbWFrZSB0byB5b3VyIGxvY2FsIGZpbGVzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgYXJlIG9uIHRvcCBvZiB0aGUgcmVsZWFzZSBhbmQgd2lsbCByZW1haW4gbG9jYWwgb25seS4KKyAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgd2hlbiB5b3UgY2xvbmUgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSwgeW91IGhhdmUgYW4gYWN0aXZlIGRldmVsb3BtZW50IHJlcG9zaXRvcnkgd2l0aAorICAgICAgICAgICAgICAgIGFjY2VzcyB0byB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSdzIGJyYW5jaGVzIGFuZCB0YWdzLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYW55IGxvY2FsIGNoYW5nZXMgeW91IG1ha2UgdG8gdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBjYW4gYmUgbGF0ZXIgYXBwbGllZCB0byBhY3RpdmUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBicmFuY2hlcyBvZiB0aGUgdXBzdHJlYW0gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbmNlcHRzIHJlbGF0ZWQgdG8gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLCBicmFuY2hlcywgYW5kIHRhZ3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVwb3NpdG9yaWVzLXRhZ3MtYW5kLWJyYW5jaGVzJz5SZXBvc2l0b3JpZXMsIFRhZ3MsIGFuZCBCcmFuY2hlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgdW5pdCBvZiBleGVjdXRpb24gZm9yIEJpdEJha2UgKGUuZy4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXBzdHJlYW06PC9lbXBoYXNpcz4gQSByZWZlcmVuY2UgdG8gc291cmNlIGNvZGUgb3IgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgbm90IGxvY2FsIHRvIHRoZSBkZXZlbG9wbWVudCBzeXN0ZW0gYnV0IGxvY2F0ZWQgaW4gYSBtYXN0ZXIgYXJlYSB0aGF0IGlzIGNvbnRyb2xsZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgbWFpbnRhaW5lciBvZiB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIG9yZGVyIGZvciBhIGRldmVsb3BlciB0byB3b3JrIG9uIGEgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLCB0aGV5IG5lZWQgdG8KKyAgICAgICAgICAgICAgICBmaXJzdCBnZXQgYSBjb3B5IG9mIGl0IGZyb20gYW4gInVwc3RyZWFtIiBzb3VyY2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2xpY2Vuc2luZyc+CisgICAgPHRpdGxlPkxpY2Vuc2luZzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVjYXVzZSBvcGVuIHNvdXJjZSBwcm9qZWN0cyBhcmUgb3BlbiB0byB0aGUgcHVibGljLCB0aGV5IGhhdmUgZGlmZmVyZW50IGxpY2Vuc2luZyBzdHJ1Y3R1cmVzIGluIHBsYWNlLgorICAgICAgICBMaWNlbnNlIGV2b2x1dGlvbiBmb3IgYm90aCBPcGVuIFNvdXJjZSBhbmQgRnJlZSBTb2Z0d2FyZSBoYXMgYW4gaW50ZXJlc3RpbmcgaGlzdG9yeS4KKyAgICAgICAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHRoaXMgaGlzdG9yeSwgeW91IGNhbiBmaW5kIGJhc2ljIGluZm9ybWF0aW9uIGhlcmU6CisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3Blbi1zb3VyY2VfbGljZW5zZSc+T3BlbiBzb3VyY2UgbGljZW5zZSBoaXN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GcmVlX3NvZnR3YXJlX2xpY2Vuc2UnPkZyZWUgc29mdHdhcmUgbGljZW5zZQorICAgICAgICAgICAgaGlzdG9yeTwvdWxpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGdlbmVyYWwsIHRoZSBZb2N0byBQcm9qZWN0IGlzIGJyb2FkbHkgbGljZW5zZWQgdW5kZXIgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyAgICAgICAgKE1JVCkgTGljZW5zZS4KKyAgICAgICAgTUlUIGxpY2Vuc2luZyBwZXJtaXRzIHRoZSByZXVzZSBvZiBzb2Z0d2FyZSB3aXRoaW4gcHJvcHJpZXRhcnkgc29mdHdhcmUgYXMgbG9uZyBhcyB0aGUKKyAgICAgICAgbGljZW5zZSBpcyBkaXN0cmlidXRlZCB3aXRoIHRoYXQgc29mdHdhcmUuCisgICAgICAgIE1JVCBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCisgICAgICAgIFBhdGNoZXMgdG8gdGhlIFlvY3RvIFByb2plY3QgZm9sbG93IHRoZSB1cHN0cmVhbSBsaWNlbnNpbmcgc2NoZW1lLgorICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIE1JVCBsaWNlbnNlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwJz5oZXJlPC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiB0aGUgR05VIEdQTCA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0xHUEwtMy4wJz4KKyAgICAgICAgaGVyZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSBidWlsZCBhbiBpbWFnZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyBhCisgICAgICAgIGtub3duIGxpc3Qgb2YgbGljZW5zZXMgdG8gZW5zdXJlIGNvbXBsaWFuY2UuCisgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGxpc3QgaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IGF0CisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+LgorICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSBsaXN0IG9mIGFsbCBsaWNlbnNlcyBmb3VuZCBhbmQgdXNlZCBkdXJpbmcgdGhhdCBidWlsZCBhcmUKKyAgICAgICAga2VwdCBpbiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGF0CisgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L2xpY2Vuc2VzPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIGEgbW9kdWxlIHJlcXVpcmVzIGEgbGljZW5zZSB0aGF0IGlzIG5vdCBpbiB0aGUgYmFzZSBsaXN0LCB0aGUgYnVpbGQgcHJvY2VzcworICAgICAgICBnZW5lcmF0ZXMgYSB3YXJuaW5nIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgIFRoZXNlIHRvb2xzIG1ha2UgaXQgZWFzaWVyIGZvciBhIGRldmVsb3BlciB0byBiZSBjZXJ0YWluIG9mIHRoZSBsaWNlbnNlcyB3aXRoIHdoaWNoCisgICAgICAgIHRoZWlyIHNoaXBwZWQgcHJvZHVjdHMgbXVzdCBjb21wbHkuCisgICAgICAgIEhvd2V2ZXIsIGV2ZW4gd2l0aCB0aGVzZSB0b29scyBpdCBpcyBzdGlsbCB1cCB0byB0aGUgZGV2ZWxvcGVyIHRvIHJlc29sdmUgcG90ZW50aWFsIGxpY2Vuc2luZyBpc3N1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBiYXNlIGxpc3Qgb2YgbGljZW5zZXMgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSBQYWNrYWdlCisgICAgICAgIERhdGEgRXhjaGFuZ2UgKFNQRFgpIGxpc3QgYW5kIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIHByb2plY3RzLgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc3BkeC5vcmcnPlNQRFggR3JvdXA8L3VsaW5rPiBpcyBhIHdvcmtpbmcgZ3JvdXAgb2YgdGhlIExpbnV4IEZvdW5kYXRpb24KKyAgICAgICAgdGhhdCBtYWludGFpbnMgYSBzcGVjaWZpY2F0aW9uCisgICAgICAgIGZvciBhIHN0YW5kYXJkIGZvcm1hdCBmb3IgY29tbXVuaWNhdGluZyB0aGUgY29tcG9uZW50cywgbGljZW5zZXMsIGFuZCBjb3B5cmlnaHRzCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIHNvZnR3YXJlIHBhY2thZ2UuCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuc291cmNlLm9yZyc+T1NJPC91bGluaz4gaXMgYSBjb3Jwb3JhdGlvbiBkZWRpY2F0ZWQgdG8gdGhlIE9wZW4gU291cmNlCisgICAgICAgIERlZmluaXRpb24gYW5kIHRoZSBlZmZvcnQgZm9yIHJldmlld2luZyBhbmQgYXBwcm92aW5nIGxpY2Vuc2VzIHRoYXQKKyAgICAgICAgY29uZm9ybSB0byB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiAoT1NEKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiB0aGUgY29tYmluZWQgU1BEWCBhbmQgT1NJIGxpY2Vuc2VzIHRoYXQgdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgdXNlcyBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluIHlvdXIKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBoZWxwIHlvdSBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cworICAgICAgICBvcGVuIHNvdXJjZSBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgYSBwcm9kdWN0IGNyZWF0ZWQgdXNpbmcKKyAgICAgICAgdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdnaXQnPgorICAgIDx0aXRsZT5HaXQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgR2l0LAorICAgICAgICB3aGljaCBpcyBhIGZyZWUsIG9wZW4gc291cmNlIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uCisgICAgICAgIEdpdCBzdXBwb3J0cyBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCwgbm9uLWxpbmVhciBkZXZlbG9wbWVudCwgYW5kIGNhbiBoYW5kbGUgbGFyZ2UgcHJvamVjdHMuCisgICAgICAgIEl0IGlzIGJlc3QgdGhhdCB5b3UgaGF2ZSBzb21lIGZ1bmRhbWVudGFsIHVuZGVyc3RhbmRpbmcgb2YgaG93IEdpdCB0cmFja3MgcHJvamVjdHMgYW5kCisgICAgICAgIGhvdyB0byB3b3JrIHdpdGggR2l0IGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IGZvciBkZXZlbG9wbWVudC4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgcXVpY2sgb3ZlcnZpZXcgb2YgaG93IEdpdCB3b3JrcyBhbmQgcHJvdmlkZXMgeW91IHdpdGggYSBzdW1tYXJ5CisgICAgICAgIG9mIHNvbWUgZXNzZW50aWFsIEdpdCBjb21tYW5kcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gR2l0LCBzZWUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgorICAgICAgICBJZiB5b3UgbmVlZCB0byBkb3dubG9hZCBHaXQsIGdvIHRvIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb3dubG9hZCc+PC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+CisgICAgICAgIDx0aXRsZT5SZXBvc2l0b3JpZXMsIFRhZ3MsIGFuZCBCcmFuY2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciBpbiB0aGUgc2VjdGlvbgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3lvY3RvLXByb2plY3QtcmVwb3NpdG9yaWVzJz5Zb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXM8L2xpbms+IiwKKyAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IG1haW50YWlucyBzb3VyY2UgcmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICAgICAgSWYgeW91IGxvb2sgYXQgdGhpcyB3ZWItaW50ZXJmYWNlIG9mIHRoZSByZXBvc2l0b3JpZXMsIGVhY2ggaXRlbSBpcyBhIHNlcGFyYXRlCisgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcyB1c2UgYnJhbmNoaW5nIHRlY2huaXF1ZXMgdGhhdCB0cmFjayBjb250ZW50IGNoYW5nZSAobm90IGZpbGVzKQorICAgICAgICAgICAgd2l0aGluIGEgcHJvamVjdCAoZS5nLiBhIG5ldyBmZWF0dXJlIG9yIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbikuCisgICAgICAgICAgICBDcmVhdGluZyBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgYmFzZWQgb24gcHJvamVjdCBkaXZlcmdlbmNlIGFsbG93cyBmb3IgZXhjZWxsZW50IGhpc3RvcmljYWwKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIG92ZXIgdGhlIGxpZmUgb2YgYSBwcm9qZWN0LgorICAgICAgICAgICAgVGhpcyBtZXRob2RvbG9neSBhbHNvIGFsbG93cyBmb3IgYW4gZW52aXJvbm1lbnQgZnJvbSB3aGljaCB5b3UgY2FuIGRvIGxvdHMgb2YKKyAgICAgICAgICAgIGxvY2FsIGV4cGVyaW1lbnRhdGlvbiBvbiBwcm9qZWN0cyBhcyB5b3UgZGV2ZWxvcCBjaGFuZ2VzIG9yIG5ldyBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBHaXQgcmVwb3NpdG9yeSByZXByZXNlbnRzIGFsbCBkZXZlbG9wbWVudCBlZmZvcnRzIGZvciBhIGdpdmVuIHByb2plY3QuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEdpdCByZXBvc2l0b3J5IDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gY29udGFpbnMgYWxsIGNoYW5nZXMKKyAgICAgICAgICAgIGFuZCBkZXZlbG9wbWVudHMgZm9yIFBva3kgb3ZlciB0aGUgY291cnNlIG9mIGl0cyBlbnRpcmUgbGlmZS4KKyAgICAgICAgICAgIFRoYXQgbWVhbnMgdGhhdCBhbGwgY2hhbmdlcyB0aGF0IG1ha2UgdXAgYWxsIHJlbGVhc2VzIGFyZSBjYXB0dXJlZC4KKyAgICAgICAgICAgIFRoZSByZXBvc2l0b3J5IG1haW50YWlucyBhIGNvbXBsZXRlIGhpc3Rvcnkgb2YgY2hhbmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIGFueSByZXBvc2l0b3J5IGJ5ICJjbG9uaW5nIiBpdCB3aXRoIHRoZSBHaXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jbG9uZTwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSBhIEdpdCByZXBvc2l0b3J5LCB5b3UgZW5kIHVwIHdpdGggYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhlCisgICAgICAgICAgICByZXBvc2l0b3J5IG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBhIGxvY2FsIGNvcHkgb2YgYSByZXBvc2l0b3J5LCB5b3UgY2FuIHRha2Ugc3RlcHMgdG8gZGV2ZWxvcCBsb2NhbGx5LgorICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBjbG9uZSBHaXQgcmVwb3NpdG9yaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IEdpdCB0cmFja3MgY29udGVudCBjaGFuZ2UgYW5kCisgICAgICAgICAgICBub3QgZmlsZXMuCisgICAgICAgICAgICBHaXQgdXNlcyAiYnJhbmNoZXMiIHRvIG9yZ2FuaXplIGRpZmZlcmVudCBkZXZlbG9wbWVudCBlZmZvcnRzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgaGFzCisgICAgICAgICAgICBzZXZlcmFsIGJyYW5jaGVzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudAorICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRTs8L2ZpbGVuYW1lPiBicmFuY2gsIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+IGJyYW5jaCwgYW5kIG1hbnkgYnJhbmNoZXMgZm9yIHBhc3QKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZXMuCisgICAgICAgICAgICBZb3UgY2FuIHNlZSBhbGwgdGhlIGJyYW5jaGVzIGJ5IGdvaW5nIHRvCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvcG9reS8nPjwvdWxpbms+IGFuZAorICAgICAgICAgICAgY2xpY2tpbmcgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvcmVmcy9oZWFkcyc+Wy4uLl08L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBsaW5rIGJlbmVhdGggdGhlICJCcmFuY2giIGhlYWRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgYnJhbmNoZXMgcmVwcmVzZW50cyBhIHNwZWNpZmljIGFyZWEgb2YgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+IGJyYW5jaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IG9yIG1vc3QgcmVjZW50CisgICAgICAgICAgICBkZXZlbG9wbWVudC4KKyAgICAgICAgICAgIEFsbCBvdGhlciBicmFuY2hlcyByZXByZXNlbnQgb2Zmc2hvb3RzIG9mIHRoZSA8ZmlsZW5hbWU+bWFzdGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGJyYW5jaC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgbG9jYWwgY29weSBvZiBhIEdpdCByZXBvc2l0b3J5LCB0aGUgY29weSBoYXMgdGhlIHNhbWUgc2V0CisgICAgICAgICAgICBvZiBicmFuY2hlcyBhcyB0aGUgb3JpZ2luYWwuCisgICAgICAgICAgICBUaGlzIG1lYW5zIHlvdSBjYW4gdXNlIEdpdCB0byBjcmVhdGUgYSBsb2NhbCB3b3JraW5nIGFyZWEgKGFsc28gY2FsbGVkIGEgYnJhbmNoKQorICAgICAgICAgICAgdGhhdCB0cmFja3MgYSBzcGVjaWZpYyBkZXZlbG9wbWVudCBicmFuY2ggZnJvbSB0aGUgc291cmNlIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgaW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gZGVmaW5lIHlvdXIgbG9jYWwgR2l0IGVudmlyb25tZW50IHRvIHdvcmsgb24gYW55IGRldmVsb3BtZW50CisgICAgICAgICAgICBicmFuY2ggaW4gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUbyBoZWxwIGlsbHVzdHJhdGUsIGhlcmUgaXMgYSBzZXQgb2YgY29tbWFuZHMgdGhhdCBjcmVhdGVzIGEgbG9jYWwgY29weSBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgYW5kIHRoZW4gY3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhIGxvY2FsCisgICAgICAgICAgICBHaXQgYnJhbmNoIHRoYXQgdHJhY2tzIHRoZSBZb2N0byBQcm9qZWN0ICZESVNUUk87IFJlbGVhc2UgKCZESVNUUk9fTkFNRTspIGRldmVsb3BtZW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgJkRJU1RST19OQU1FOyBvcmlnaW4vJkRJU1RST19OQU1FOworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB5b3VyIGxvY2FsCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgaXMgInBva3kiIGFuZCB0aGUgbmFtZSBvZiB0aGF0IGxvY2FsIHdvcmtpbmcgYXJlYSAobG9jYWwgYnJhbmNoKQorICAgICAgICAgICAgeW91IGp1c3QgY3JlYXRlZCBhbmQgY2hlY2tlZCBvdXQgaXMgIiZESVNUUk9fTkFNRTsiLgorICAgICAgICAgICAgVGhlIGZpbGVzIGluIHlvdXIgbG9jYWwgcmVwb3NpdG9yeSBub3cgcmVmbGVjdCB0aGUgc2FtZSBmaWxlcyB0aGF0CisgICAgICAgICAgICBhcmUgaW4gdGhlICImRElTVFJPX05BTUU7IiBkZXZlbG9wbWVudCBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0J3MgInBva3kiIHVwc3RyZWFtIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHdoZW4geW91IGNyZWF0ZSBhbmQgY2hlY2tvdXQgYQorICAgICAgICAgICAgbG9jYWwgd29ya2luZyBicmFuY2ggYmFzZWQgb24gYSBicmFuY2ggbmFtZSwKKyAgICAgICAgICAgIHlvdXIgbG9jYWwgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgInRpcCIgb2YgdGhhdCBkZXZlbG9wbWVudCBicmFuY2gKKyAgICAgICAgICAgIGF0IHRoZSB0aW1lIHlvdSBjcmVhdGVkIHlvdXIgbG9jYWwgYnJhbmNoLCB3aGljaCBjb3VsZCBiZQorICAgICAgICAgICAgZGlmZmVyZW50IGZyb20gdGhlIGZpbGVzIGF0IHRoZSB0aW1lIG9mIGEgc2ltaWxhcmx5IG5hbWVkIHJlbGVhc2UuCisgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgY3JlYXRpbmcgYW5kIGNoZWNraW5nIG91dCBhIGxvY2FsIGJyYW5jaCBiYXNlZCBvbgorICAgICAgICAgICAgdGhlICImRElTVFJPX05BTUU7IiBicmFuY2ggbmFtZSBpcyBub3QgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgIGNsb25pbmcgYW5kIGNoZWNraW5nIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoLgorICAgICAgICAgICAgS2VlcCByZWFkaW5nIHRvIHNlZSBob3cgeW91IGNyZWF0ZSBhIGxvY2FsIHNuYXBzaG90IG9mIGEgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2l0IHVzZXMgInRhZ3MiIHRvIG1hcmsgc3BlY2lmaWMgY2hhbmdlcyBpbiBhIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUeXBpY2FsbHksIGEgdGFnIGlzIHVzZWQgdG8gbWFyayBhIHNwZWNpYWwgcG9pbnQgc3VjaCBhcyB0aGUgZmluYWwKKyAgICAgICAgICAgIGNoYW5nZSBiZWZvcmUgYSBwcm9qZWN0IGlzIHJlbGVhc2VkLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHRhZ3MgdXNlZCB3aXRoIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgcmVwb3NpdG9yeSBieSBnb2luZyB0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKKyAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvdGFncyc+Wy4uLl08L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBsaW5rIGJlbmVhdGggdGhlICJUYWciIGhlYWRpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUga2V5IHRhZ3MgYXJlIDxmaWxlbmFtZT5keWxhbi05LjAuNDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvcmEtMTAuMC40PC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kYWlzeS0xMS4wLjI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kaXp6eS0xMi4wLjA8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+JkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGVzZSB0YWdzIHJlcHJlc2VudCBZb2N0byBQcm9qZWN0IHJlbGVhc2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGFsc28gaGF2ZSBhY2Nlc3MgdG8gYWxsIHRoZQorICAgICAgICAgICAgdGFncy4KKyAgICAgICAgICAgIFNpbWlsYXIgdG8gYnJhbmNoZXMsIHlvdSBjYW4gY3JlYXRlIGFuZCBjaGVja291dCBhIGxvY2FsIHdvcmtpbmcgR2l0IGJyYW5jaCBiYXNlZAorICAgICAgICAgICAgb24gYSB0YWcgbmFtZS4KKyAgICAgICAgICAgIFdoZW4geW91IGRvIHRoaXMsIHlvdSBnZXQgYSBzbmFwc2hvdCBvZiB0aGUgR2l0IHJlcG9zaXRvcnkgdGhhdCByZWZsZWN0cworICAgICAgICAgICAgdGhlIHN0YXRlIG9mIHRoZSBmaWxlcyB3aGVuIHRoZSBjaGFuZ2Ugd2FzIG1hZGUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgdGFnLgorICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHVzZSBpcyB0byBjaGVja291dCBhIHdvcmtpbmcgYnJhbmNoIHRoYXQgbWF0Y2hlcyBhIHNwZWNpZmljCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICQgY2QgcG9reQorICAgICAkIGdpdCBjaGVja291dCAtYiBteS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjsgJkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBuYW1lIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHlvdXIgbG9jYWwgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgRmlsZXMgR2l0IHJlcG9zaXRvcnkgaXMgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEFuZCwgdGhlIG5hbWUgb2YgdGhlIGxvY2FsIGJyYW5jaCB5b3UgaGF2ZSBjcmVhdGVkIGFuZCBjaGVja2VkIG91dCBpcworICAgICAgICAgICAgPGZpbGVuYW1lPm15LSZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGZpbGVzIGluIHlvdXIgcmVwb3NpdG9yeSBub3cgZXhhY3RseSBtYXRjaCB0aGUgWW9jdG8gUHJvamVjdCAmRElTVFJPOworICAgICAgICAgICAgUmVsZWFzZSB0YWcgKDxmaWxlbmFtZT4mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjs8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IHdoZW4geW91IGNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBsb2NhbAorICAgICAgICAgICAgd29ya2luZyBicmFuY2ggYmFzZWQgb24gYSB0YWcsIHlvdXIgZW52aXJvbm1lbnQgbWF0Y2hlcyBhIHNwZWNpZmljIHBvaW50CisgICAgICAgICAgICBpbiB0aW1lIGFuZCBub3QgdGhlIGVudGlyZSBkZXZlbG9wbWVudCBicmFuY2guCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmFzaWMtY29tbWFuZHMnPgorICAgICAgICA8dGl0bGU+QmFzaWMgQ29tbWFuZHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2l0IGhhcyBhbiBleHRlbnNpdmUgc2V0IG9mIGNvbW1hbmRzIHRoYXQgbGV0cyB5b3UgbWFuYWdlIGNoYW5nZXMgYW5kIHBlcmZvcm0KKyAgICAgICAgICAgIGNvbGxhYm9yYXRpb24gb3ZlciB0aGUgbGlmZSBvZiBhIHByb2plY3QuCisgICAgICAgICAgICBDb252ZW5pZW50bHkgdGhvdWdoLCB5b3UgY2FuIG1hbmFnZSB3aXRoIGEgc21hbGwgc2V0IG9mIGJhc2ljIG9wZXJhdGlvbnMgYW5kIHdvcmtmbG93cworICAgICAgICAgICAgb25jZSB5b3UgdW5kZXJzdGFuZCB0aGUgYmFzaWMgcGhpbG9zb3BoeSBiZWhpbmQgR2l0LgorICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIGJlIGFuIGV4cGVydCBpbiBHaXQgdG8gYmUgZnVuY3Rpb25hbC4KKyAgICAgICAgICAgIEEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBpbnN0cnVjdGlvbiBvbiBhIG1pbmltYWwgc2V0IG9mIEdpdCBjb21tYW5kcyBpcworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPmhlcmU8L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGRvd25sb2FkIEdpdCwgeW91IGNhbiBkbyBzbworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Rvd25sb2FkJz5oZXJlPC91bGluaz4sIGFsdGhvdWdoCisgICAgICAgICAgICBhbnkgcmVhc29uYWJseSBjdXJyZW50IExpbnV4IGRpc3RyaWJ1dGlvbiBzaG91bGQgYWxyZWFkeSBoYXZlIGFuCisgICAgICAgICAgICBpbnN0YWxsYWJsZSBwYWNrYWdlIGZvciBHaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3Qga25vdyBtdWNoIGFib3V0IEdpdCwgeW91IHNob3VsZCBlZHVjYXRlCisgICAgICAgICAgICB5b3Vyc2VsZiBieSB2aXNpdGluZyB0aGUgbGlua3MgcHJldmlvdXNseSBtZW50aW9uZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBicmllZmx5IGRlc2NyaWJlcyBzb21lIGJhc2ljIEdpdCBvcGVyYXRpb25zIGFzIGEgd2F5IHRvIGdldCBzdGFydGVkLgorICAgICAgICAgICAgQXMgd2l0aCBhbnkgc2V0IG9mIGNvbW1hbmRzLCB0aGlzIGxpc3QgKGluIG1vc3QgY2FzZXMpIHNpbXBseSBzaG93cyB0aGUgYmFzZSBjb21tYW5kIGFuZAorICAgICAgICAgICAgb21pdHMgdGhlIG1hbnkgYXJndW1lbnRzIHRoZXkgc3VwcG9ydC4KKyAgICAgICAgICAgIFNlZSB0aGUgR2l0IGRvY3VtZW50YXRpb24gZm9yIGNvbXBsZXRlIGRlc2NyaXB0aW9ucyBhbmQgc3RyYXRlZ2llcyBvbiBob3cgdG8gdXNlIHRoZXNlIGNvbW1hbmRzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgaW5pdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IEluaXRpYWxpemVzIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHVzZSBHaXQgY29tbWFuZHMgdW5sZXNzIHlvdSBoYXZlIGEgPGZpbGVuYW1lPi5naXQ8L2ZpbGVuYW1lPiByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjbG9uZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBsb2NhbCBjbG9uZSBvZiBhIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgY29sbGFib3JhdGlvbiwgdGhpcyBjb21tYW5kIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBvbiBlcXVhbCBmb290aW5nIHdpdGggYSBmZWxsb3cKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVy4oCZcyBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFN0YWdlcyB1cGRhdGVkIGZpbGUgY29udGVudHMKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGluZGV4IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgR2l0IHVzZXMgdG8gdHJhY2sgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc3RhZ2UgYWxsIGZpbGVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSB5b3UgY2FuIGNvbW1pdCB0aGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjb21taXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDcmVhdGVzIGEgImNvbW1pdCIgdGhhdCBkb2N1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgeW91IG1hZGUuCisgICAgICAgICAgICAgICAgICAgIENvbW1pdHMgYXJlIHVzZWQgZm9yIGhpc3RvcmljYWwgcHVycG9zZXMsIGZvciBkZXRlcm1pbmluZyBpZiBhIG1haW50YWluZXIgb2YgYSBwcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIHdpbGwgYWxsb3cgdGhlIGNoYW5nZSwgYW5kIGZvciB1bHRpbWF0ZWx5IHB1c2hpbmcgdGhlIGNoYW5nZSBmcm9tIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgcHJvamVjdOKAmXMgdXBzdHJlYW0gKG9yIG1hc3RlcikgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgc3RhdHVzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmVwb3J0cyBhbnkgbW9kaWZpZWQgZmlsZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBwb3NzaWJseSBuZWVkIHRvIGJlIHN0YWdlZCBhbmQgY29tbWl0dGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjaGVja291dCAmbHQ7YnJhbmNoLW5hbWUmZ3Q7PC9maWxlbmFtZT46PC9lbXBoYXNpcz4gQ2hhbmdlcworICAgICAgICAgICAgICAgICAgICB5b3VyIHdvcmtpbmcgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYW5hbG9nb3VzIHRvICJjZCIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNoZWNrb3V0IOKAk2IgJmx0O3dvcmtpbmctYnJhbmNoJmd0OzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IENyZWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgYSB3b3JraW5nIGJyYW5jaCBvbiB5b3VyIGxvY2FsIG1hY2hpbmUgd2hlcmUgeW91IGNhbiBpc29sYXRlIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZSBsb2NhbCBicmFuY2hlcyB3aGVuIGFkZGluZyBzcGVjaWZpYyBmZWF0dXJlcyBvciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHdheSBpZiB5b3UgZG8gbm90IGxpa2Ugd2hhdCB5b3UgaGF2ZSBkb25lIHlvdSBjYW4gZWFzaWx5IGdldCByaWQgb2YgdGhlIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGJyYW5jaDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFJlcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgbG9jYWwgYnJhbmNoZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRlbGxzIHlvdSB0aGUgYnJhbmNoIGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IHdvcmtpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGJyYW5jaCAtRCAmbHQ7YnJhbmNoLW5hbWUmZ3Q7PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRGVsZXRlcyBhbiBleGlzdGluZyBsb2NhbCBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGluIGEgbG9jYWwgYnJhbmNoIG90aGVyIHRoYW4gdGhlIG9uZSB5b3UgYXJlIGRlbGV0aW5nCisgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGRlbGV0ZSA8ZmlsZW5hbWU+Jmx0O2JyYW5jaC1uYW1lJmd0OzwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBwdWxsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmV0cmlldmVzIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZyb20gYW4gdXBzdHJlYW0gR2l0CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYW5kIHBsYWNlcyBpdCBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoaXMgY29tbWFuZCB0byBtYWtlIHN1cmUgeW91IGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHlvdSBhcmUgYmFzaW5nIGNoYW5nZXMgKC5lLmcuIHRoZSBtYXN0ZXIgYnJhbmNoKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgcHVzaDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNlbmRzIGFsbCB5b3VyIGNvbW1pdHRlZCBsb2NhbCBjaGFuZ2VzIHRvIGFuIHVwc3RyZWFtIEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IChlLmcuIGEgY29udHJpYnV0aW9uIHJlcG9zaXRvcnkpLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbnRhaW5lciBvZiB0aGUgcHJvamVjdCBkcmF3cyBmcm9tIHRoZXNlIHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgICAgICB3aGVuIGFkZGluZyBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN04oCZcyBtYXN0ZXIgcmVwb3NpdG9yeSBvcgorICAgICAgICAgICAgICAgICAgICBvdGhlciBkZXZlbG9wbWVudCBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBtZXJnZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IENvbWJpbmVzIG9yIGFkZHMgY2hhbmdlcyBmcm9tIG9uZQorICAgICAgICAgICAgICAgICAgICBsb2NhbCBicmFuY2ggb2YgeW91ciByZXBvc2l0b3J5IHdpdGggYW5vdGhlciBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGxvY2FsIEdpdCByZXBvc2l0b3J5LCB0aGUgZGVmYXVsdCBicmFuY2ggaXMgbmFtZWQgIm1hc3RlciIuCisgICAgICAgICAgICAgICAgICAgIEEgdHlwaWNhbCB3b3JrZmxvdyBpcyB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgYnJhbmNoIGZvciBpc29sYXRlZCB3b3JrLCBtYWtlIGFuZCBjb21taXQgeW91cgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLCBzd2l0Y2ggdG8geW91ciBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBtZXJnZSB0aGUgY2hhbmdlcyBmcm9tIHRoZSB0ZW1wb3JhcnkgYnJhbmNoIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIG1hc3RlciBicmFuY2gsIGFuZCB0aGVuIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGJyYW5jaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY2hlcnJ5LXBpY2s8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDaG9vc2UgYW5kIGFwcGx5IHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMgZnJvbSBvbmUgYnJhbmNoIGludG8gYW5vdGhlciBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIFRoZXJlIGFyZSB0aW1lcyB3aGVuIHlvdSBtaWdodCBub3QgYmUgYWJsZSB0byBtZXJnZSBhbGwgdGhlIGNoYW5nZXMgaW4gb25lIGJyYW5jaCB3aXRoCisgICAgICAgICAgICAgICAgICAgIGFub3RoZXIgYnV0IG5lZWQgdG8gcGljayBvdXQgY2VydGFpbiBvbmVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdGs8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBQcm92aWRlcyBhIEdVSSB2aWV3IG9mIHRoZSBicmFuY2hlcworICAgICAgICAgICAgICAgICAgICBhbmQgY2hhbmdlcyBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYSBnb29kIHdheSB0byBncmFwaGljYWxseSBzZWUgd2hlcmUgdGhpbmdzIGhhdmUgZGl2ZXJnZWQgaW4geW91cgorICAgICAgICAgICAgICAgICAgICBsb2NhbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBsb2c8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBSZXBvcnRzIGEgaGlzdG9yeSBvZiB5b3VyIGNoYW5nZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGRpZmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBEaXNwbGF5cyBsaW5lLWJ5LWxpbmUgZGlmZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB5b3VyIGxvY2FsIHdvcmtpbmcgZmlsZXMgYW5kIHRoZSBzYW1lIGZpbGVzIGluIHRoZSB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeSB0aGF0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGN1cnJlbnRseSB0cmFja3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3dvcmtmbG93cyc+CisgICAgPHRpdGxlPldvcmtmbG93czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgb3ZlcnZpZXcgb24gd29ya2Zsb3dzIHVzaW5nIEdpdC4KKyAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIGluZm9ybWF0aW9uIGNvdmVycyBiYXNpYyBwcmFjdGljZXMgdGhhdCBkZXNjcmliZSByb2xlcyBhbmQgYWN0aW9ucyBpbiBhCisgICAgICAgIGNvbGxhYm9yYXRpdmUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgIEFnYWluLCBpZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhpcyB0eXBlIG9mIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB5b3UgbWlnaHQgd2FudCB0byBqdXN0CisgICAgICAgIHNraXAgdGhpcyBzZWN0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBmaWxlcyBhcmUgbWFpbnRhaW5lZCB1c2luZyBHaXQgaW4gYSAibWFzdGVyIiBicmFuY2ggd2hvc2UgR2l0IGhpc3RvcnkKKyAgICAgICAgdHJhY2tzIGV2ZXJ5IGNoYW5nZSBhbmQgd2hvc2Ugc3RydWN0dXJlIHByb3ZpZGVzIGJyYW5jaGVzIGZvciBhbGwgZGl2ZXJnaW5nIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIEFsdGhvdWdoIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIEdpdCwgbWFueSBvcGVuIHNvdXJjZSBwcm9qZWN0cyBkbyBzby4KKyAgICAgICAgRm9yIHRoZSBZb2N0byBQcm9qZWN0LCBhIGtleSBpbmRpdmlkdWFsIGNhbGxlZCB0aGUgIm1haW50YWluZXIiIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgIm1hc3RlciIKKyAgICAgICAgYnJhbmNoIG9mIGEgZ2l2ZW4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIFRoZSAibWFzdGVyIiBicmFuY2ggaXMgdGhlIOKAnHVwc3RyZWFt4oCdIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGZpbmFsIGJ1aWxkcyBvZiB0aGUgcHJvamVjdCBvY2N1ci4KKyAgICAgICAgVGhlIG1haW50YWluZXIgaXMgcmVzcG9uc2libGUgZm9yIGFjY2VwdGluZyBjaGFuZ2VzIGZyb20gb3RoZXIgZGV2ZWxvcGVycyBhbmQgZm9yCisgICAgICAgIG9yZ2FuaXppbmcgdGhlIHVuZGVybHlpbmcgYnJhbmNoIHN0cnVjdHVyZSB0byByZWZsZWN0IHJlbGVhc2Ugc3RyYXRlZ2llcyBhbmQgc28gZm9ydGguCisgICAgICAgIDxub3RlPkZvciBpbmZvcm1hdGlvbiBvbiBmaW5kaW5nIG91dCB3aG8gaXMgcmVzcG9uc2libGUgZm9yIChtYWludGFpbnMpCisgICAgICAgICAgICBhIHBhcnRpY3VsYXIgYXJlYSBvZiBjb2RlLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBwcm9qZWN0IGFsc28gaGFzIGFuIHVwc3RyZWFtIGNvbnRyaWJ1dGlvbiBHaXQgcmVwb3NpdG9yeSBuYW1lZAorICAgICAgICA8ZmlsZW5hbWU+cG9reS1jb250cmliPC9maWxlbmFtZT4uCisgICAgICAgIFlvdSBjYW4gc2VlIGFsbCB0aGUgYnJhbmNoZXMgaW4gdGhpcyByZXBvc2l0b3J5IHVzaW5nIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICAgIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPiBvcmdhbml6ZWQKKyAgICAgICAgd2l0aGluIHRoZSAiUG9reSBTdXBwb3J0IiBhcmVhLgorICAgICAgICBUaGVzZSBicmFuY2hlcyB0ZW1wb3JhcmlseSBob2xkIGNoYW5nZXMgdG8gdGhlIHByb2plY3QgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgc3VibWl0dGVkIG9yIGNvbW1pdHRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB0ZWFtIGFuZCBieQorICAgICAgICBjb21tdW5pdHkgbWVtYmVycyB3aG8gY29udHJpYnV0ZSB0byB0aGUgcHJvamVjdC4KKyAgICAgICAgVGhlIG1haW50YWluZXIgZGV0ZXJtaW5lcyBpZiB0aGUgY2hhbmdlcyBhcmUgcXVhbGlmaWVkIHRvIGJlIG1vdmVkCisgICAgICAgIGZyb20gdGhlICJjb250cmliIiBicmFuY2hlcyBpbnRvIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdAorICAgICAgICByZXBvc2l0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEZXZlbG9wZXJzIChpbmNsdWRpbmcgY29udHJpYnV0aW5nIGNvbW11bml0eSBtZW1iZXJzKSBjcmVhdGUgYW5kIG1haW50YWluIGNsb25lZCByZXBvc2l0b3JpZXMKKyAgICAgICAgb2YgdGhlIHVwc3RyZWFtICJtYXN0ZXIiIGJyYW5jaC4KKyAgICAgICAgVGhlc2UgcmVwb3NpdG9yaWVzIGFyZSBsb2NhbCB0byB0aGVpciBkZXZlbG9wbWVudCBwbGF0Zm9ybXMgYW5kIGFyZSB1c2VkIHRvIGRldmVsb3AgY2hhbmdlcy4KKyAgICAgICAgV2hlbiBhIGRldmVsb3BlciBpcyBzYXRpc2ZpZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjaGFuZ2UsIHRoZXkgInB1c2giIHRoZSBjaGFuZ2VzCisgICAgICAgIHRvIHRoZSBhcHByb3ByaWF0ZSAiY29udHJpYiIgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRGV2ZWxvcGVycyBhcmUgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgdGhlaXIgbG9jYWwgcmVwb3NpdG9yeSB1cC10by1kYXRlIHdpdGggIm1hc3RlciIuCisgICAgICAgIFRoZXkgYXJlIGFsc28gcmVzcG9uc2libGUgZm9yIHN0cmFpZ2h0ZW5pbmcgb3V0IGFueSBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSB3aXRoaW4gZmlsZXMKKyAgICAgICAgdGhhdCBhcmUgYmVpbmcgd29ya2VkIG9uIHNpbXVsdGFuZW91c2x5IGJ5IG1vcmUgdGhhbiBvbmUgcGVyc29uLgorICAgICAgICBBbGwgdGhpcyB3b3JrIGlzIGRvbmUgbG9jYWxseSBvbiB0aGUgZGV2ZWxvcGVy4oCZcyBtYWNoaW5lcyBiZWZvcmUgYW55dGhpbmcgaXMgcHVzaGVkIHRvIGEKKyAgICAgICAgImNvbnRyaWIiIGFyZWEgYW5kIGV4YW1pbmVkIGF0IHRoZSBtYWludGFpbmVy4oCZcyBsZXZlbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBzb21ld2hhdCBmb3JtYWwgbWV0aG9kIGV4aXN0cyBieSB3aGljaCBkZXZlbG9wZXJzIGNvbW1pdCBjaGFuZ2VzIGFuZCBwdXNoIHRoZW0gaW50byB0aGUKKyAgICAgICAgImNvbnRyaWIiIGFyZWEgYW5kIHN1YnNlcXVlbnRseSByZXF1ZXN0IHRoYXQgdGhlIG1haW50YWluZXIgaW5jbHVkZSB0aGVtIGludG8gIm1hc3RlciIKKyAgICAgICAgVGhpcyBwcm9jZXNzIGlzIGNhbGxlZCDigJxzdWJtaXR0aW5nIGEgcGF0Y2jigJ0gb3IgInN1Ym1pdHRpbmcgYSBjaGFuZ2UuIgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc3VibWl0dGluZyBwYXRjaGVzIGFuZCBjaGFuZ2VzLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gc3VtbWFyaXplIHRoZSBlbnZpcm9ubWVudDogIGEgc2luZ2xlIHBvaW50IG9mIGVudHJ5IGV4aXN0cyBmb3IKKyAgICAgICAgY2hhbmdlcyBpbnRvIHRoZSBwcm9qZWN04oCZcyAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdCByZXBvc2l0b3J5LAorICAgICAgICB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBwcm9qZWN04oCZcyBtYWludGFpbmVyLgorICAgICAgICBBbmQsIGEgc2V0IG9mIGRldmVsb3BlcnMgZXhpc3Qgd2hvIGluZGVwZW5kZW50bHkgZGV2ZWxvcCwgdGVzdCwgYW5kCisgICAgICAgIHN1Ym1pdCBjaGFuZ2VzIHRvICJjb250cmliIiBhcmVhcyBmb3IgdGhlIG1haW50YWluZXIgdG8gZXhhbWluZS4KKyAgICAgICAgVGhlIG1haW50YWluZXIgdGhlbiBjaG9vc2VzIHdoaWNoIGNoYW5nZXMgYXJlIGdvaW5nIHRvIGJlY29tZSBhCisgICAgICAgIHBlcm1hbmVudCBwYXJ0IG9mIHRoZSBwcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjNpbiIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSBlYWNoIGRldmVsb3BtZW50IGVudmlyb25tZW50IGlzIHVuaXF1ZSwgdGhlcmUgYXJlIHNvbWUgYmVzdCBwcmFjdGljZXMgb3IgbWV0aG9kcworICAgICAgICB0aGF0IGhlbHAgZGV2ZWxvcG1lbnQgcnVuIHNtb290aGx5LgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHNvbWUgb2YgdGhlc2UgcHJhY3RpY2VzLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBHaXQgd29ya2Zsb3dzLCBzZWUgdGhlIHdvcmtmbG93IHRvcGljcyBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2Jvb2suZ2l0LXNjbS5jb20nPkdpdCBDb21tdW5pdHkgQm9vazwvdWxpbms+LgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIFNtYWxsIENoYW5nZXM6PC9lbXBoYXNpcz4gSXQgaXMgYmVzdCB0byBrZWVwIHRoZSBjaGFuZ2VzIHlvdSBjb21taXQKKyAgICAgICAgICAgICAgICBzbWFsbCBhcyBjb21wYXJlZCB0byBidW5kbGluZyBtYW55IGRpc3BhcmF0ZSBjaGFuZ2VzIGludG8gYSBzaW5nbGUgY29tbWl0LgorICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2Ugbm90IG9ubHkga2VlcHMgdGhpbmdzIG1hbmFnZWFibGUgYnV0IGFsc28gYWxsb3dzIHRoZSBtYWludGFpbmVyCisgICAgICAgICAgICAgICAgdG8gbW9yZSBlYXNpbHkgaW5jbHVkZSBvciByZWZ1c2UgY2hhbmdlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgYWxzbyBnb29kIHByYWN0aWNlIHRvIGxlYXZlIHRoZSByZXBvc2l0b3J5IGluIGEgc3RhdGUgdGhhdCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgc3RpbGwgc3VjY2Vzc2Z1bGx5IGJ1aWxkIHlvdXIgcHJvamVjdC4gIEluIG90aGVyIHdvcmRzLCBkbyBub3QgY29tbWl0IGhhbGYgb2YgYSBmZWF0dXJlLAorICAgICAgICAgICAgICAgIHRoZW4gYWRkIHRoZSBvdGhlciBoYWxmIGFzIGEgc2VwYXJhdGUsIGxhdGVyIGNvbW1pdC4KKyAgICAgICAgICAgICAgICBFYWNoIGNvbW1pdCBzaG91bGQgdGFrZSB5b3UgZnJvbSBvbmUgYnVpbGRhYmxlIHByb2plY3Qgc3RhdGUgdG8gYW5vdGhlcgorICAgICAgICAgICAgICAgIGJ1aWxkYWJsZSBzdGF0ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIEJyYW5jaGVzIExpYmVyYWxseTo8L2VtcGhhc2lzPiBJdCBpcyB2ZXJ5IGVhc3kgdG8gY3JlYXRlLCB1c2UsIGFuZAorICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbCBicmFuY2hlcyBpbiB5b3VyIHdvcmtpbmcgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBuYW1lIHRoZXNlIGJyYW5jaGVzIGFueXRoaW5nIHlvdSBsaWtlLgorICAgICAgICAgICAgICAgIEl0IGlzIGhlbHBmdWwgdG8gZ2l2ZSB0aGVtIG5hbWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFydGljdWxhciBmZWF0dXJlIG9yIGNoYW5nZQorICAgICAgICAgICAgICAgIG9uIHdoaWNoIHlvdSBhcmUgd29ya2luZy4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgZG9uZSB3aXRoIGEgZmVhdHVyZSBvciBjaGFuZ2UgYW5kIGhhdmUgbWVyZ2VkIGl0CisgICAgICAgICAgICAgICAgaW50byB5b3VyIGxvY2FsIG1hc3RlciBicmFuY2gsIHNpbXBseSBkaXNjYXJkIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgICAgICAgICBicmFuY2guPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1lcmdlIENoYW5nZXM6PC9lbXBoYXNpcz4gVGhlIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgYWxsb3dzIHlvdSB0byB0YWtlIHRoZQorICAgICAgICAgICAgICAgIGNoYW5nZXMgZnJvbSBvbmUgYnJhbmNoIGFuZCBmb2xkIHRoZW0gaW50byBhbm90aGVyIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBUaGlzIHByb2Nlc3MgaXMgZXNwZWNpYWxseSBoZWxwZnVsIHdoZW4gbW9yZSB0aGFuIGEgc2luZ2xlIGRldmVsb3BlciBtaWdodCBiZSB3b3JraW5nCisgICAgICAgICAgICAgICAgb24gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzYW1lIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgTWVyZ2luZyBjaGFuZ2VzIGFsc28gYXV0b21hdGljYWxseSBpZGVudGlmaWVzIGFueSBjb2xsaXNpb25zIG9yICJjb25mbGljdHMiCisgICAgICAgICAgICAgICAgdGhhdCBtaWdodCBoYXBwZW4gYXMgYSByZXN1bHQgb2YgdGhlIHNhbWUgbGluZXMgb2YgY29kZSBiZWluZyBhbHRlcmVkIGJ5IHR3byBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICBkZXZlbG9wZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW5hZ2UgQnJhbmNoZXM6PC9lbXBoYXNpcz4gQmVjYXVzZSBicmFuY2hlcyBhcmUgZWFzeSB0byB1c2UsIHlvdSBzaG91bGQKKyAgICAgICAgICAgICAgICB1c2UgYSBzeXN0ZW0gd2hlcmUgYnJhbmNoZXMgaW5kaWNhdGUgdmFyeWluZyBsZXZlbHMgb2YgY29kZSByZWFkaW5lc3MuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gaGF2ZSBhICJ3b3JrIiBicmFuY2ggdG8gZGV2ZWxvcCBpbiwgYSAidGVzdCIgYnJhbmNoIHdoZXJlIHRoZSBjb2RlIG9yCisgICAgICAgICAgICAgICAgY2hhbmdlIGlzIHRlc3RlZCwgYSAic3RhZ2UiIGJyYW5jaCB3aGVyZSBjaGFuZ2VzIGFyZSByZWFkeSB0byBiZSBjb21taXR0ZWQsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBBcyB5b3VyIHByb2plY3QgZGV2ZWxvcHMsIHlvdSBjYW4gbWVyZ2UgY29kZSBhY3Jvc3MgdGhlIGJyYW5jaGVzIHRvIHJlZmxlY3QgZXZlci1pbmNyZWFzaW5nCisgICAgICAgICAgICAgICAgc3RhYmxlIHN0YXRlcyBvZiB0aGUgZGV2ZWxvcG1lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBQdXNoIGFuZCBQdWxsOjwvZW1waGFzaXM+IFRoZSBwdXNoLXB1bGwgd29ya2Zsb3cgaXMgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgY29uY2VwdCBvZiBkZXZlbG9wZXJzICJwdXNoaW5nIiBsb2NhbCBjb21taXRzIHRvIGEgcmVtb3RlIHJlcG9zaXRvcnksIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgdXN1YWxseSBhIGNvbnRyaWJ1dGlvbiByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgd29ya2Zsb3cgaXMgYWxzbyBiYXNlZCBvbiBkZXZlbG9wZXJzICJwdWxsaW5nIiBrbm93biBzdGF0ZXMgb2YgdGhlIHByb2plY3QgZG93biBpbnRvIHRoZWlyCisgICAgICAgICAgICAgICAgbG9jYWwgZGV2ZWxvcG1lbnQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgIFRoZSB3b3JrZmxvdyBlYXNpbHkgYWxsb3dzIHlvdSB0byBwdWxsIGNoYW5nZXMgc3VibWl0dGVkIGJ5IG90aGVyIGRldmVsb3BlcnMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSByZXBvc2l0b3J5IGludG8geW91ciB3b3JrIGFyZWEgZW5zdXJpbmcgdGhhdCB5b3UgaGF2ZSB0aGUgbW9zdCByZWNlbnQgc29mdHdhcmUKKyAgICAgICAgICAgICAgICBvbiB3aGljaCB0byBkZXZlbG9wLgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGhhcyB0d28gc2NyaXB0cyBuYW1lZCA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IHRoYXQgc2hpcCB3aXRoIHRoZSByZWxlYXNlIHRvIGZhY2lsaXRhdGUgdGhpcworICAgICAgICAgICAgICAgIHdvcmtmbG93LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBzY3JpcHRzIGluIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZm9sZGVyIG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHNjcmlwdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncHVzaGluZy1hLWNoYW5nZS11cHN0cmVhbSc+VXNpbmcgU2NyaXB0cyB0byBQdXNoIGEgQ2hhbmdlIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhdGNoIFdvcmtmbG93OjwvZW1waGFzaXM+IFRoaXMgd29ya2Zsb3cgYWxsb3dzIHlvdSB0byBub3RpZnkgdGhlCisgICAgICAgICAgICAgICAgbWFpbnRhaW5lciB0aHJvdWdoIGFuIGVtYWlsIHRoYXQgeW91IGhhdmUgYSBjaGFuZ2UgKG9yIHBhdGNoKSB5b3Ugd291bGQgbGlrZSBjb25zaWRlcmVkCisgICAgICAgICAgICAgICAgZm9yIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgdGhlIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRvIHNlbmQgdGhpcyB0eXBlIG9mIGNoYW5nZSwgeW91IGZvcm1hdCB0aGUgcGF0Y2ggYW5kIHRoZW4gc2VuZCB0aGUgZW1haWwgdXNpbmcgdGhlIEdpdCBjb21tYW5kcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHNjcmlwdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ndHJhY2tpbmctYnVncyc+CisgICAgPHRpdGxlPlRyYWNraW5nIEJ1Z3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHVzZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmJ1Z3ppbGxhLm9yZy9hYm91dC8nPkJ1Z3ppbGxhPC91bGluaz4gdG8gdHJhY2sgYnVncy4KKyAgICAgICAgSW1wbGVtZW50YXRpb25zIG9mIEJ1Z3ppbGxhIHdvcmsgd2VsbCBmb3IgZ3JvdXAgZGV2ZWxvcG1lbnQgYmVjYXVzZSB0aGV5IHRyYWNrIGJ1Z3MgYW5kIGNvZGUKKyAgICAgICAgY2hhbmdlcywgY2FuIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgY2hhbmdlcyBhbmQgcHJvYmxlbXMgd2l0aCBkZXZlbG9wZXJzLCBjYW4gYmUgdXNlZCB0bworICAgICAgICBzdWJtaXQgYW5kIHJldmlldyBwYXRjaGVzLCBhbmQgY2FuIGJlIHVzZWQgdG8gbWFuYWdlIHF1YWxpdHkgYXNzdXJhbmNlLgorICAgICAgICBUaGUgaG9tZSBwYWdlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBCdWd6aWxsYSBpcworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+JllPQ1RPX0JVR1pJTExBX1VSTDs8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU29tZXRpbWVzIGl0IGlzIGhlbHBmdWwgdG8gc3VibWl0LCBpbnZlc3RpZ2F0ZSwgb3IgdHJhY2sgYSBidWcgYWdhaW5zdCB0aGUgWW9jdG8gUHJvamVjdCBpdHNlbGYKKyAgICAgICAgc3VjaCBhcyB3aGVuIGRpc2NvdmVyaW5nIGFuIGlzc3VlIHdpdGggc29tZSBjb21wb25lbnQgb2YgdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IGFjdHMgY29udHJhcnkKKyAgICAgICAgdG8gdGhlIGRvY3VtZW50YXRpb24gb3IgeW91ciBleHBlY3RhdGlvbnMuCisgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgZ2VuZXJhbCBwcm9jZWR1cmUgZm9yIHN1Ym1pdHRpbmcgYSBuZXcgYnVnIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIEJ1Z3ppbGxhLgorICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBkZWZlY3QgbWFuYWdlbWVudCwgYnVnIHRyYWNraW5nLCBhbmQgZmVhdHVyZSByZXF1ZXN0CisgICAgICAgIHByb2Nlc3NlcyBhbGwgYWNjb21wbGlzaGVkIHRocm91Z2ggdGhlIFlvY3RvIFByb2plY3QgQnVnemlsbGEgb24gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9CdWd6aWxsYV9Db25maWd1cmF0aW9uX2FuZF9CdWdfVHJhY2tpbmcnPndpa2kgcGFnZTwvdWxpbms+LgorICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWx3YXlzIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBCdWd6aWxsYSB0byBzdWJtaXQKKyAgICAgICAgICAgICAgICBhIGJ1Zy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuIHN1Ym1pdHRpbmcgYSBuZXcgYnVnLCBiZSBzdXJlIHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICBDbGFzc2lmaWNhdGlvbiwgUHJvZHVjdCwgYW5kIENvbXBvbmVudCBmb3Igd2hpY2ggdGhlIGlzc3VlIHdhcyBmb3VuZC4KKyAgICAgICAgICAgICAgICBEZWZlY3RzIGZvciB0aGUgWW9jdG8gUHJvamVjdCBmYWxsIGludG8gb25lIG9mIHNldmVuIGNsYXNzaWZpY2F0aW9uczoKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IENvbXBvbmVudHMsIEluZnJhc3RydWN0dXJlLCBCdWlsZCBTeXN0ZW0gJmFtcDsgTWV0YWRhdGEsCisgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiwgUUEvVGVzdGluZywgUnVudGltZSBhbmQgSGFyZHdhcmUuCisgICAgICAgICAgICAgICAgRWFjaCBvZiB0aGVzZSBDbGFzc2lmaWNhdGlvbnMgYnJlYWsgZG93biBpbnRvIG11bHRpcGxlIFByb2R1Y3RzIGFuZCwgaW4gc29tZQorICAgICAgICAgICAgICAgIGNhc2VzLCBtdWx0aXBsZSBDb21wb25lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgYnVnIGZvcm0gdG8gY2hvb3NlIHRoZSBjb3JyZWN0IEhhcmR3YXJlIGFuZCBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGJ1ZyBhcHBsaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZGljYXRlIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24geW91IHdlcmUgdXNpbmcgd2hlbiB0aGUgaXNzdWUKKyAgICAgICAgICAgICAgICBvY2N1cnJlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHRvIGluZGljYXRlIHRoZSBTZXZlcml0eSBvZiB0aGUgYnVnLgorICAgICAgICAgICAgICAgIFNldmVyaXR5IGNvbW11bmljYXRlcyBob3cgdGhlIGJ1ZyBpbXBhY3RlZCB5b3VyIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IHRoZSBhcHByb3ByaWF0ZSAiRG9jdW1lbnRhdGlvbiBjaGFuZ2UiIGl0ZW0KKyAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBGaXhpbmcgYSBidWcgbWF5IG9yIG1heSBub3QgYWZmZWN0IHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgaXNzdWUuCisgICAgICAgICAgICAgICAgVHJ5IHRvIGxpbWl0IHlvdXIgc3VtbWFyeSB0byBqdXN0IGEgbGluZSBvciB0d28gYW5kIGJlIHN1cmUgdG8gY2FwdHVyZSB0aGUKKyAgICAgICAgICAgICAgICBlc3NlbmNlIG9mIHRoZSBpc3N1ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGlzc3VlLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcHJvdmlkZSBhcyBtdWNoIGRldGFpbCBhcyB5b3UgY2FuIGFib3V0IHRoZSBjb250ZXh0LCBiZWhhdmlvciwgb3V0cHV0LAorICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCB0aGF0IHN1cnJvdW5kcyB0aGUgaXNzdWUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBldmVuIGF0dGFjaCBzdXBwb3J0aW5nIGZpbGVzIGZvciBvdXRwdXQgZnJvbSBsb2dzIGJ5CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICJBZGQgYW4gYXR0YWNobWVudCIgYnV0dG9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgdG8gY29weSB0aGUgYXBwcm9wcmlhdGUgcGVvcGxlIGluIHRoZQorICAgICAgICAgICAgICAgICJDQyBMaXN0IiBmb3IgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBmaW5kaW5nIG91dCB3aG8gaXMgcmVzcG9uc2libGUKKyAgICAgICAgICAgICAgICBmb3IgY29kZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdWJtaXQgdGhlIGJ1ZyBieSBjbGlja2luZyB0aGUgIlN1Ym1pdCBCdWciIGJ1dHRvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz4KKyAgICA8dGl0bGU+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQ29udHJpYnV0aW9ucyB0byB0aGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkIGFyZSB2ZXJ5IHdlbGNvbWUuCisgICAgICAgIEJlY2F1c2UgdGhlIHN5c3RlbSBpcyBleHRyZW1lbHkgY29uZmlndXJhYmxlIGFuZCBmbGV4aWJsZSwgd2UgcmVjb2duaXplIHRoYXQgZGV2ZWxvcGVycworICAgICAgICB3aWxsIHdhbnQgdG8gZXh0ZW5kLCBjb25maWd1cmUgb3Igb3B0aW1pemUgaXQgZm9yIHRoZWlyIHNwZWNpZmljIHVzZXMuCisgICAgICAgIFlvdSBzaG91bGQgc2VuZCBwYXRjaGVzIHRvIHRoZSBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3Qgc28gdGhhdCB0aGV5CisgICAgICAgIGNhbiBiZSByZXZpZXdlZCBhbmQgbWVyZ2VkIGJ5IHRoZSBhcHByb3ByaWF0ZSBtYWludGFpbmVyLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCZWZvcmUgc3VibWl0dGluZyBhbnkgY2hhbmdlLCBiZSBzdXJlIHRvIGZpbmQgb3V0IHdobyB5b3Ugc2hvdWxkIGJlCisgICAgICAgIG5vdGlmeWluZy4KKyAgICAgICAgU2V2ZXJhbCBtZXRob2RzIGV4aXN0IHRocm91Z2ggd2hpY2ggeW91IGZpbmQgb3V0IHdobyB5b3Ugc2hvdWxkIGJlIGNvcHlpbmcKKyAgICAgICAgb3Igbm90aWZ5aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWludGVuYW5jZSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRXhhbWluZSB0aGUgPGZpbGVuYW1lPm1haW50YWluZXJzLmluYzwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGF0IDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiwgdG8KKyAgICAgICAgICAgICAgICBzZWUgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciBjb2RlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgUkVBRE1FIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRm9yIEJTUCBtYWludGFpbmVycyBvZiBzdXBwb3J0ZWQgQlNQcywgeW91IGNhbiBleGFtaW5lCisgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCBCU1AgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCBzb21lIGxheWVycyAoc3VjaCBhcyB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllciksCisgICAgICAgICAgICAgICAgaW5jbHVkZSBhIDxmaWxlbmFtZT5NQUlOVEFJTkVSUzwvZmlsZW5hbWU+IGZpbGUgd2hpY2ggY29udGFpbnMKKyAgICAgICAgICAgICAgICBhIGxpc3Qgb2YgYWxsIHN1cHBvcnRlZCBCU1AgbWFpbnRhaW5lcnMgZm9yIHRoYXQgbGF5ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlYXJjaCBieSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVXNpbmcgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+LCB5b3UgY2FuIGVudGVyIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBjb21tYW5kIHRvIGJyaW5nIHVwIGEgc2hvcnQgbGlzdCBvZiBhbGwgY29tbWl0cworICAgICAgICAgICAgICAgIGFnYWluc3QgYSBzcGVjaWZpYyBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZ2l0IHNob3J0bG9nIC0tIDxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEp1c3QgcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmb3Igd2hpY2ggeW91IGFyZSBpbnRlcmVzdGVkLgorICAgICAgICAgICAgICAgIFRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBpcyBub3Qgb3JkZXJlZCBieSBoaXN0b3J5IGJ1dCBkb2VzCisgICAgICAgICAgICAgICAgaW5jbHVkZSBhIGxpc3Qgb2YgYWxsIGNvbW1pdHRlcnMgZ3JvdXBlZCBieSBuYW1lLgorICAgICAgICAgICAgICAgIEZyb20gdGhlIGxpc3QsIHlvdSBjYW4gc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGJ1bGsgb2YKKyAgICAgICAgICAgICAgICB0aGUgY2hhbmdlcyBhZ2FpbnN0IHRoZSBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgWW9jdG8gUHJvamVjdCBhbmQgcmVsYXRlZCBtYWlsaW5nIGxpc3RzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPk1haWxpbmcgbGlzdHM8L3VsaW5rPiIgc2VjdGlvbiBpbgorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIHNvbWUgZ3VpZGFuY2Ugb24gd2hpY2ggbWFpbGluZyBsaXN0IHRvIHVzZSBmb3Igd2hhdCB0eXBlIG9mIGNoYW5nZToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgY2hhbmdlcyB0byB0aGUgY29yZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4sIHNlbmQgeW91ciBwYXRjaCB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9vcGVuZW1iZWRkZWQtY29yZSc+b3BlbmVtYmVkZGVkLWNvcmU8L3VsaW5rPiBtYWlsaW5nIGxpc3QuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgY2hhbmdlIHRvIGFueXRoaW5nIHVuZGVyIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZW50IHRvIHRoaXMgbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBjaGFuZ2VzIHRvIEJpdEJha2UgKGFueXRoaW5nIHVuZGVyIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5KSwgc2VuZCB5b3VyIHBhdGNoIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPmJpdGJha2UtZGV2ZWw8L3VsaW5rPiBtYWlsaW5nIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGNoYW5nZXMgdG8gPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgc2VuZCB5b3VyIHBhdGNoIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3Bva3knPnBva3k8L3VsaW5rPiBtYWlsaW5nIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGNoYW5nZXMgdG8gb3RoZXIgbGF5ZXJzIGhvc3RlZCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0b3Byb2plY3Qub3JnPC9maWxlbmFtZT4gKHVubGVzcyB0aGUKKyAgICAgICAgICAgICAgICBsYXllcidzIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIG90aGVyd2lzZSksIHRvb2xzLCBhbmQgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24sIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+eW9jdG88L3VsaW5rPiBtYWlsaW5nIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGFkZGl0aW9uYWwgcmVjaXBlcyB0aGF0IGRvIG5vdCBmaXQgaW50byB0aGUgY29yZSBNZXRhZGF0YSwKKyAgICAgICAgICAgICAgICB5b3Ugc2hvdWxkIGRldGVybWluZSB3aGljaCBsYXllciB0aGUgcmVjaXBlIHNob3VsZCBnbyBpbnRvIGFuZCBzdWJtaXQgdGhlCisgICAgICAgICAgICAgICAgY2hhbmdlIGluIHRoZSBtYW5uZXIgcmVjb21tZW5kZWQgYnkgdGhlIGRvY3VtZW50YXRpb24gKGUuZy4gUkVBRE1FKSBzdXBwbGllZAorICAgICAgICAgICAgICAgIHdpdGggdGhlIGxheWVyLiBJZiBpbiBkb3VidCwgcGxlYXNlIGFzayBvbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+eW9jdG88L3VsaW5rPiBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL29wZW5lbWJlZGRlZC1kZXZlbCc+b3BlbmVtYmVkZGVkLWRldmVsPC91bGluaz4KKyAgICAgICAgICAgICAgICBtYWlsaW5nIGxpc3RzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3Ugc2VuZCBhIHBhdGNoLCBiZSBzdXJlIHRvIGluY2x1ZGUgYSAiU2lnbmVkLW9mZi1ieToiCisgICAgICAgIGxpbmUgaW4gdGhlIHNhbWUgc3R5bGUgYXMgcmVxdWlyZWQgYnkgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgQWRkaW5nIHRoaXMgbGluZSBzaWduaWZpZXMgdGhhdCB5b3UsIHRoZSBzdWJtaXR0ZXIsIGhhdmUgYWdyZWVkIHRvIHRoZSBEZXZlbG9wZXIncyBDZXJ0aWZpY2F0ZSBvZiBPcmlnaW4gMS4xCisgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YgT3JpZ2luIDEuMQorCisgICAgIEJ5IG1ha2luZyBhIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHByb2plY3QsIEkgY2VydGlmeSB0aGF0OgorCisgICAgIChhKSBUaGUgY29udHJpYnV0aW9uIHdhcyBjcmVhdGVkIGluIHdob2xlIG9yIGluIHBhcnQgYnkgbWUgYW5kIEkKKyAgICAgICAgIGhhdmUgdGhlIHJpZ2h0IHRvIHN1Ym1pdCBpdCB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZQorICAgICAgICAgaW5kaWNhdGVkIGluIHRoZSBmaWxlOyBvcgorCisgICAgIChiKSBUaGUgY29udHJpYnV0aW9uIGlzIGJhc2VkIHVwb24gcHJldmlvdXMgd29yayB0aGF0LCB0byB0aGUgYmVzdAorICAgICAgICAgb2YgbXkga25vd2xlZGdlLCBpcyBjb3ZlcmVkIHVuZGVyIGFuIGFwcHJvcHJpYXRlIG9wZW4gc291cmNlCisgICAgICAgICBsaWNlbnNlIGFuZCBJIGhhdmUgdGhlIHJpZ2h0IHVuZGVyIHRoYXQgbGljZW5zZSB0byBzdWJtaXQgdGhhdAorICAgICAgICAgd29yayB3aXRoIG1vZGlmaWNhdGlvbnMsIHdoZXRoZXIgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0CisgICAgICAgICBieSBtZSwgdW5kZXIgdGhlIHNhbWUgb3BlbiBzb3VyY2UgbGljZW5zZSAodW5sZXNzIEkgYW0KKyAgICAgICAgIHBlcm1pdHRlZCB0byBzdWJtaXQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSksIGFzIGluZGljYXRlZAorICAgICAgICAgaW4gdGhlIGZpbGU7IG9yCisKKyAgICAgKGMpIFRoZSBjb250cmlidXRpb24gd2FzIHByb3ZpZGVkIGRpcmVjdGx5IHRvIG1lIGJ5IHNvbWUgb3RoZXIKKyAgICAgICAgIHBlcnNvbiB3aG8gY2VydGlmaWVkIChhKSwgKGIpIG9yIChjKSBhbmQgSSBoYXZlIG5vdCBtb2RpZmllZAorICAgICAgICAgaXQuCisKKyAgICAgKGQpIEkgdW5kZXJzdGFuZCBhbmQgYWdyZWUgdGhhdCB0aGlzIHByb2plY3QgYW5kIHRoZSBjb250cmlidXRpb24KKyAgICAgICAgIGFyZSBwdWJsaWMgYW5kIHRoYXQgYSByZWNvcmQgb2YgdGhlIGNvbnRyaWJ1dGlvbiAoaW5jbHVkaW5nIGFsbAorICAgICAgICAgcGVyc29uYWwgaW5mb3JtYXRpb24gSSBzdWJtaXQgd2l0aCBpdCwgaW5jbHVkaW5nIG15IHNpZ24tb2ZmKSBpcworICAgICAgICAgbWFpbnRhaW5lZCBpbmRlZmluaXRlbHkgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgdGhpcyBwcm9qZWN0IG9yIHRoZSBvcGVuIHNvdXJjZSBsaWNlbnNlKHMpIGludm9sdmVkLgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGEgY29sbGFib3JhdGl2ZSBlbnZpcm9ubWVudCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgc29tZSBzb3J0IG9mIHN0YW5kYXJkCisgICAgICAgIG9yIG1ldGhvZCB0aHJvdWdoIHdoaWNoIHlvdSBzdWJtaXQgY2hhbmdlcy4KKyAgICAgICAgT3RoZXJ3aXNlLCB0aGluZ3MgY291bGQgZ2V0IHF1aXRlIGNoYW90aWMuCisgICAgICAgIE9uZSBnZW5lcmFsIHByYWN0aWNlIHRvIGZvbGxvdyBpcyB0byBtYWtlIHNtYWxsLCBjb250cm9sbGVkIGNoYW5nZXMuCisgICAgICAgIEtlZXBpbmcgY2hhbmdlcyBzbWFsbCBhbmQgaXNvbGF0ZWQgYWlkcyByZXZpZXcsIG1ha2VzIG1lcmdpbmcvcmViYXNpbmcgZWFzaWVyCisgICAgICAgIGFuZCBrZWVwcyB0aGUgY2hhbmdlIGhpc3RvcnkgY2xlYW4gd2hlbiBhbnlvbmUgbmVlZHMgdG8gcmVmZXIgdG8gaXQgaW4gZnV0dXJlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSBtYWtlIGEgY29tbWl0LCB5b3UgbXVzdCBmb2xsb3cgY2VydGFpbiBzdGFuZGFyZHMgZXN0YWJsaXNoZWQgYnkgdGhlCisgICAgICAgIE9wZW5FbWJlZGRlZCBhbmQgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB0ZWFtcy4KKyAgICAgICAgRm9yIGVhY2ggY29tbWl0LCB5b3UgbXVzdCBwcm92aWRlIGEgc2luZ2xlLWxpbmUgc3VtbWFyeSBvZiB0aGUgY2hhbmdlIGFuZCB5b3UKKyAgICAgICAgc2hvdWxkIGFsbW9zdCBhbHdheXMgcHJvdmlkZSBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2Ygd2hhdCB5b3UgZGlkIChpLmUuCisgICAgICAgIHRoZSBib2R5IG9mIHRoZSBjb21taXQgbWVzc2FnZSkuCisgICAgICAgIFRoZSBvbmx5IGV4Y2VwdGlvbnMgZm9yIG5vdCBwcm92aWRpbmcgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiB3b3VsZCBiZSBpZiB5b3VyCisgICAgICAgIGNoYW5nZSBpcyBhIHNpbXBsZSwgc2VsZi1leHBsYW5hdG9yeSBjaGFuZ2UgdGhhdCBuZWVkcyBubyBmdXJ0aGVyIGRlc2NyaXB0aW9uCisgICAgICAgIGJleW9uZCB0aGUgc3VtbWFyeS4KKyAgICAgICAgSGVyZSBhcmUgdGhlIGd1aWRlbGluZXMgZm9yIGNvbXBvc2luZyBhIGNvbW1pdCBtZXNzYWdlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgYSBzaW5nbGUtbGluZSwgc2hvcnQgc3VtbWFyeSBvZiB0aGUgY2hhbmdlLgorICAgICAgICAgICAgICAgIFRoaXMgc3VtbWFyeSBpcyB0eXBpY2FsbHkgdmlld2FibGUgaW4gdGhlICJzaG9ydGxpc3QiIG9mIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGh1cywgcHJvdmlkaW5nIHNvbWV0aGluZyBzaG9ydCBhbmQgZGVzY3JpcHRpdmUgdGhhdCBnaXZlcyB0aGUgcmVhZGVyCisgICAgICAgICAgICAgICAgYSBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2UgaXMgdXNlZnVsIHdoZW4gdmlld2luZyBhIGxpc3Qgb2YgbWFueSBjb21taXRzLgorICAgICAgICAgICAgICAgIFRoaXMgc2hvcnQgZGVzY3JpcHRpb24gc2hvdWxkIGJlIHByZWZpeGVkIGJ5IHRoZSByZWNpcGUgbmFtZSAoaWYgY2hhbmdpbmcgYSByZWNpcGUpLCBvcgorICAgICAgICAgICAgICAgIGVsc2UgdGhlIHNob3J0IGZvcm0gcGF0aCB0byB0aGUgZmlsZSBiZWluZyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciB0aGUgYm9keSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsIHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICB0aGF0IGRlc2NyaWJlcyB3aGF0IHlvdSBjaGFuZ2VkLCB3aHkgeW91IG1hZGUgdGhlIGNoYW5nZSwgYW5kIHRoZSBhcHByb2FjaAorICAgICAgICAgICAgICAgIHlvdSB1c2VkLiBJdCBtYXkgYWxzbyBiZSBoZWxwZnVsIGlmIHlvdSBtZW50aW9uIGhvdyB5b3UgdGVzdGVkIHRoZSBjaGFuZ2UuCisgICAgICAgICAgICAgICAgUHJvdmlkZSBhcyBtdWNoIGRldGFpbCBhcyB5b3UgY2FuIGluIHRoZSBib2R5IG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgY2hhbmdlIGFkZHJlc3NlcyBhIHNwZWNpZmljIGJ1ZyBvciBpc3N1ZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEgYnVnLXRyYWNraW5nIElELCBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIHRoYXQKKyAgICAgICAgICAgICAgICBJRCBpbiB5b3VyIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEgc3BlY2lmaWMgY29udmVudGlvbiBmb3IKKyAgICAgICAgICAgICAgICBidWcgcmVmZXJlbmNlcyAtIGFueSBjb21taXQgdGhhdCBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcgc2hvdWxkCisgICAgICAgICAgICAgICAgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybSBmb3IgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRml4ZXMgW1lPQ1RPICM8cmVwbGFjZWFibGU+YnVnLWlkPC9yZXBsYWNlYWJsZT5dCisKKyAgICAgPHJlcGxhY2VhYmxlPmRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGNoYW5nZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIFdoZXJlIDxyZXBsYWNlYWJsZT5idWctaWQ8L3JlcGxhY2VhYmxlPiBpcyByZXBsYWNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGJ1ZyBJRCBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhIGluc3RhbmNlLgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgZ3VpZGFuY2Ugb24gY3JlYXRpbmcgd2VsbC1mb3JtZWQgY29tbWl0IG1lc3NhZ2VzIGF0IHRoaXMgT3BlbkVtYmVkZGVkCisgICAgICAgIHdpa2kgcGFnZToKKyAgICAgICAgPHVsaW5rIHVybD0nJk9FX0hPTUVfVVJMOy93aWtpL0NvbW1pdF9QYXRjaF9NZXNzYWdlX0d1aWRlbGluZXMnPjwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgbmV4dCB0d28gc2VjdGlvbnMgZGVzY3JpYmUgZ2VuZXJhbCBpbnN0cnVjdGlvbnMgZm9yIGJvdGggcHVzaGluZworICAgICAgICBjaGFuZ2VzIHVwc3RyZWFtIGFuZCBmb3Igc3VibWl0dGluZyBjaGFuZ2VzIGFzIHBhdGNoZXMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPgorICAgICAgICA8dGl0bGU+VXNpbmcgU2NyaXB0cyB0byBQdXNoIGEgQ2hhbmdlIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgYmFzaWMgZmxvdyBmb3IgcHVzaGluZyBhIGNoYW5nZSB0byBhbiB1cHN0cmVhbSAiY29udHJpYiIgR2l0IHJlcG9zaXRvcnkgaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2UgeW91ciBjaGFuZ2VzIGluIHlvdXIgbG9jYWwgR2l0IHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YWdlIHlvdXIgY2hhbmdlcyBieSB1c2luZyB0aGUgPGZpbGVuYW1lPmdpdCBhZGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG9uIGVhY2ggZmlsZSB5b3UgY2hhbmdlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbW1pdCB0aGUgY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNvbW1pdDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcHJvdmlkZSBhIGNvbW1pdCBtZXNzYWdlIHRoYXQgZm9sbG93cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcHJvamVjdOKAmXMgY29tbWl0IG1lc3NhZ2Ugc3RhbmRhcmRzIGFzIGRlc2NyaWJlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFB1c2ggdGhlIGNoYW5nZSB0byB0aGUgdXBzdHJlYW0gImNvbnRyaWIiIHJlcG9zaXRvcnkgYnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgcHVzaDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ob3RpZnkgdGhlIG1haW50YWluZXIgdGhhdCB5b3UgaGF2ZSBwdXNoZWQgYSBjaGFuZ2UgYnkgbWFraW5nIGEgcHVsbAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyB0d28gc2NyaXB0cyB0aGF0IGNvbnZlbmllbnRseSBsZXQgeW91IGdlbmVyYXRlIGFuZCBzZW5kCisgICAgICAgICAgICAgICAgICAgIHB1bGwgcmVxdWVzdHMgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwdHMgYXJlIDxmaWxlbmFtZT5jcmVhdGUtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2Ugc2NyaXB0cyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nIHRoZXNlIHNjcmlwdHMgY29ycmVjdGx5IGZvcm1hdHMgdGhlIHJlcXVlc3RzIHdpdGhvdXQgaW50cm9kdWNpbmcgYW55CisgICAgICAgICAgICAgICAgICAgIHdoaXRlc3BhY2Ugb3IgSFRNTCBmb3JtYXR0aW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbnRhaW5lciB0aGF0IHJlY2VpdmVzIHlvdXIgcGF0Y2hlcyBuZWVkcyB0byBiZSBhYmxlIHRvIHNhdmUgYW5kIGFwcGx5IHRoZW0KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSB5b3VyIGVtYWlscy4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlc2Ugc2NyaXB0cyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBmb3Igc2VuZGluZyBwYXRjaGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGhlbHAgb24gdXNpbmcgdGhlc2Ugc2NyaXB0cywgc2ltcGx5IHByb3ZpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4taDwvZmlsZW5hbWU+IGFyZ3VtZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBwb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdCAtaAorICAgICAkIHBva3kvc2NyaXB0cy9zZW5kLXB1bGwtcmVxdWVzdCAtaAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgR2l0IGluZm9ybWF0aW9uIG9uIGhvdyB0byBwdXNoIGEgY2hhbmdlIHVwc3RyZWFtIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2Jvb2svZW4vdjIvRGlzdHJpYnV0ZWQtR2l0LURpc3RyaWJ1dGVkLVdvcmtmbG93cyc+R2l0IENvbW11bml0eSBCb29rPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3VibWl0dGluZy1hLXBhdGNoJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIEVtYWlsIHRvIFN1Ym1pdCBhIFBhdGNoPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gc3VibWl0IHBhdGNoZXMgd2l0aG91dCB1c2luZyB0aGUgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IHNjcmlwdHMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwga2VlcCBpbiBtaW5kLCB0aGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byB1c2UgdGhlIHNjcmlwdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgY29tcG9uZW50cyBjaGFuZ2VkLCB5b3UgbmVlZCB0byBzdWJtaXQgdGhlIGVtYWlsIHRvIGEgc3BlY2lmaWMKKyAgICAgICAgICAgIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgIEZvciBzb21lIGd1aWRhbmNlIG9uIHdoaWNoIG1haWxpbmcgbGlzdCB0byB1c2UsIHNlZSB0aGUgbGlzdCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPk1haWxpbmcgTGlzdHM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBwcm9jZWR1cmUgb24gaG93IHRvIHN1Ym1pdCBhIHBhdGNoIHRocm91Z2ggZW1haWwgd2l0aG91dCB1c2luZyB0aGUKKyAgICAgICAgICAgIHNjcmlwdHM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHlvdXIgY2hhbmdlcyBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFnZSB5b3VyIGNoYW5nZXMgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgYWRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvbiBlYWNoIGZpbGUgeW91IGNoYW5nZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbW1pdCB0aGUgY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGNvbW1pdCAtLXNpZ25vZmY8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgPGZpbGVuYW1lPi0tc2lnbm9mZjwvZmlsZW5hbWU+IG9wdGlvbiBpZGVudGlmaWVzIHlvdSBhcyB0aGUgcGVyc29uCisgICAgICAgICAgICAgICAgICAgIG1ha2luZyB0aGUgY2hhbmdlIGFuZCBhbHNvIHNhdGlzZmllcyB0aGUgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YKKyAgICAgICAgICAgICAgICAgICAgT3JpZ2luIChEQ08pIHNob3duIGVhcmxpZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHlvdSBmb3JtIGEgY29tbWl0LCB5b3UgbXVzdCBmb2xsb3cgY2VydGFpbiBzdGFuZGFyZHMgZXN0YWJsaXNoZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBlYXJsaWVyIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBmb3IgWW9jdG8gUHJvamVjdCBjb21taXQgbWVzc2FnZSBzdGFuZGFyZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvcm1hdCB0aGUgY29tbWl0IGludG8gYW4gZW1haWwgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gZm9ybWF0IGNvbW1pdHMsIHVzZSB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBwcm92aWRlIHRoZSBjb21tYW5kLCB5b3UgbXVzdCBpbmNsdWRlIGEgcmV2aXNpb24gbGlzdCBvciBhIG51bWJlciBvZiBwYXRjaGVzCisgICAgICAgICAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBlaXRoZXIgb2YgdGhlc2UgdHdvIGNvbW1hbmRzIHRha2VzIHlvdXIgbW9zdAorICAgICAgICAgICAgICAgICAgICByZWNlbnQgc2luZ2xlIGNvbW1pdCBhbmQgZm9ybWF0cyBpdCBhcyBhbiBlbWFpbCBtZXNzYWdlIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLTEKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCBIRUFEfgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5BZnRlciB0aGUgY29tbWFuZCBpcyBydW4sIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlucyBhCisgICAgICAgICAgICAgICAgICAgIG51bWJlcmVkIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPiBmaWxlIGZvciB0aGUgY29tbWl0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHByb3ZpZGUgc2V2ZXJhbCBjb21taXRzIGFzIHBhcnQgb2YgdGhlIGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQgcHJvZHVjZXMgYQorICAgICAgICAgICAgICAgICAgICBzZXJpZXMgb2YgbnVtYmVyZWQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IOKAkyBvbmUgZm9yIGVhY2ggY29tbWl0LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHBhdGNoLCB5b3Ugc2hvdWxkIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1jb3ZlcjwvZmlsZW5hbWU+IG9wdGlvbiB3aXRoIHRoZSBjb21tYW5kLCB3aGljaCBnZW5lcmF0ZXMgYQorICAgICAgICAgICAgICAgICAgICBjb3ZlciBsZXR0ZXIgYXMgdGhlIGZpcnN0ICJwYXRjaCIgaW4gdGhlIHNlcmllcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIGVkaXQgdGhlIGNvdmVyIGxldHRlciB0byBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBzZXJpZXMgb2YgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHNlZSA8ZmlsZW5hbWU+R0lUX0ZPUk1BVF9QQVRDSCgxKTwvZmlsZW5hbWU+IGRpc3BsYXllZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbiBnaXQtZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPklmIHlvdSBhcmUgb3Igd2lsbCBiZSBhIGZyZXF1ZW50IGNvbnRyaWJ1dG9yIHRvIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIG9yIHRvIE9wZW5FbWJlZGRlZCwgeW91IG1pZ2h0IGNvbnNpZGVyIHJlcXVlc3RpbmcgYSBjb250cmliIGFyZWEgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgYXNzb2NpYXRlZCByaWdodHMuPC9ub3RlPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkltcG9ydCB0aGUgZmlsZXMgaW50byB5b3VyIG1haWwgY2xpZW50IGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5JbiBvcmRlciB0byB1c2UgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4sIHlvdSBtdXN0IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9wZXIgR2l0IHBhY2thZ2VzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIFVidW50dSwgRGViaWFuLCBhbmQgRmVkb3JhIHRoZSBwYWNrYWdlIGlzIDxmaWxlbmFtZT5naXQtZW1haWw8L2ZpbGVuYW1lPi48L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZCBzZW5kcyBlbWFpbCBieSB1c2luZyBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIG9yIHJlbW90ZSBNYWlsIFRyYW5zcG9ydCBBZ2VudCAoTVRBKSBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tc210cDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+c2VuZG1haWw8L2ZpbGVuYW1lPiwgb3IgdGhyb3VnaCBhIGRpcmVjdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c210cDwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gaW4geW91ciBHaXQgPGZpbGVuYW1lPmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgc3VibWl0dGluZyBwYXRjaGVzIHRocm91Z2ggZW1haWwgb25seSwgaXQgaXMgdmVyeSBpbXBvcnRhbnQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3Ugc3VibWl0IHRoZW0gd2l0aG91dCBhbnkgd2hpdGVzcGFjZSBvciBIVE1MIGZvcm1hdHRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgeW91IG9yIHlvdXIgbWFpbGVyIGludHJvZHVjZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWludGFpbmVyIHRoYXQgcmVjZWl2ZXMgeW91ciBwYXRjaGVzIG5lZWRzIHRvIGJlIGFibGUgdG8gc2F2ZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYXBwbHkgdGhlbSBkaXJlY3RseSBmcm9tIHlvdXIgZW1haWxzLgorICAgICAgICAgICAgICAgICAgICBBIGdvb2Qgd2F5IHRvIHZlcmlmeSB0aGF0IHdoYXQgeW91IGFyZSBzZW5kaW5nIHdpbGwgYmUgYXBwbGljYWJsZSBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRhaW5lciBpcyB0byBkbyBhIGRyeSBydW4gYW5kIHNlbmQgdGhlbSB0byB5b3Vyc2VsZiBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICBzYXZlIGFuZCBhcHBseSB0aGVtIGFzIHRoZSBtYWludGFpbmVyIHdvdWxkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgdGhlIHByZWZlcnJlZCBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNlbmRpbmcgeW91ciBwYXRjaGVzIHNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgY29tcHJvbWlzaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UsIHdoaWNoIGNhbiBvY2N1ciB3aGVuIHlvdSB1c2UgeW91ciBvd24gbWFpbCBjbGllbnQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGFsc28gaGFzIHNldmVyYWwgb3B0aW9ucyB0aGF0IGxldCB5b3UKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSByZWNpcGllbnRzIGFuZCBwZXJmb3JtIGZ1cnRoZXIgZWRpdGluZyBvZiB0aGUgZW1haWwgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIHNlZSA8ZmlsZW5hbWU+R0lULVNFTkQtRU1BSUwoMSk8L2ZpbGVuYW1lPiBkaXNwbGF5ZWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tYW4gZ2l0LXNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXFlbXUueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M5MTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbApAQCAtMCwwICsxLDQyMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2Rldi1tYW51YWwtcWVtdSc+CisKKzx0aXRsZT5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC90aXRsZT4KKworPHBhcmE+CisgICAgUXVpY2sgRU1VbGF0b3IgKFFFTVUpIGlzIGFuIE9wZW4gU291cmNlIHByb2plY3QgdGhlIFlvY3RvIFByb2plY3QgdXNlcworICAgIGFzIHBhcnQgb2YgaXRzIGRldmVsb3BtZW50ICJ0b29sIHNldCIuCisgICAgQXMgc3VjaCwgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgY2hhcHRlciBpcyBsaW1pdGVkIHRvIHRoZQorICAgIFlvY3RvIFByb2plY3QgaW50ZWdyYXRpb24gb2YgUUVNVSBhbmQgbm90IFFFTVUgaW4gZ2VuZXJhbC4KKyAgICBGb3Igb2ZmaWNpYWwgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24gb24gUUVNVSwgc2VlIHRoZQorICAgIGZvbGxvd2luZyByZWZlcmVuY2VzOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFpbl9QYWdlJz5RRU1VIFdlYnNpdGU8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgVGhlIG9mZmljaWFsIHdlYnNpdGUgZm9yIHRoZSBRRU1VIE9wZW4gU291cmNlIHByb2plY3QuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPSdodHRwOi8vd2lraS5xZW11Lm9yZy9NYW51YWwnPkRvY3VtZW50YXRpb248L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgVGhlIFFFTVUgdXNlciBtYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBZb2N0byBQcm9qZWN0J3MgaW50ZWdyYXRpb24gb2YKKyAgICBRRU1VLCBhIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIFFFTVUgYW5kIGl0cyB2YXJpb3VzIG9wdGlvbnMsIHJ1bm5pbmcKKyAgICB1bmRlciBhIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgc2VydmVyLCBhbmQgYSBmZXcgdGlwcyBhbmQgdHJpY2tzIHlvdQorICAgIG1pZ2h0IGZpbmQgaGVscGZ1bCB3aGVuIHVzaW5nIFFFTVUuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdxZW11LW92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgWW9jdG8gUHJvamVjdCwgUUVNVSBpcyBhbgorICAgICAgICBlbXVsYXRvciBhbmQgdmlydHVhbGl6YXRpb24gbWFjaGluZSB0aGF0IGFsbG93cyB5b3UgdG8gcnVuIGEgY29tcGxldGUKKyAgICAgICAgaW1hZ2UgeW91IGhhdmUgYnVpbHQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgYXMganVzdCBhbm90aGVyIHRhc2sKKyAgICAgICAgb24geW91ciBidWlsZCBzeXN0ZW0uCisgICAgICAgIFFFTVUgaXMgdXNlZnVsIGZvciBydW5uaW5nIGFuZCB0ZXN0aW5nIGltYWdlcyBhbmQgYXBwbGljYXRpb25zIG9uCisgICAgICAgIHN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGFyY2hpdGVjdHVyZXMgd2l0aG91dCBoYXZpbmcgYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgUUVNVSB0byBydW4gYXV0b21hdGVkCisgICAgICAgIFF1YWxpdHkgQXNzdXJhbmNlIChRQSkgdGVzdHMgb24gZmluYWwgaW1hZ2VzIHNoaXBwZWQgd2l0aCBlYWNoCisgICAgICAgIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFFFTVUgaXMgbWFkZSBhdmFpbGFibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBhIG51bWJlciBvZiB3YXlzLgorICAgICAgICBUaGUgZWFzaWVzdCBhbmQgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBnZXR0aW5nIFFFTVUgaXMgdG8gcnVuIHRoZQorICAgICAgICBBRFQgaW5zdGFsbGVyLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZQorICAgICAgICBRRU1VIGF2YWlsYWJsZSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdGhlLXFlbXUtZW11bGF0b3InPlRoZSBRRU1VIEVtdWxhdG9yPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncWVtdS1ydW5uaW5nLXFlbXUnPgorICAgIDx0aXRsZT5SdW5uaW5nIFFFTVU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFJ1bm5pbmcgUUVNVSBpbnZvbHZlcyBoYXZpbmcgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXQgdXAsIGhhdmluZyB0aGUKKyAgICAgICAgcmlnaHQgYXJ0aWZhY3RzIGF2YWlsYWJsZSwgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRvIHVzZSB0aGUgbWFueQorICAgICAgICBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSB0byB5b3Ugd2hlbiB5b3Ugc3RhcnQgUUVNVSB1c2luZyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdxZW11LXNldHRpbmctdXAtdGhlLWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdGhlIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBydW4gUUVNVSBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudCBmcm9tIHdoaWNoIHlvdSBydW4gQml0QmFrZS4KKyAgICAgICAgICAgIFRoaXMgbWVhbnMgeW91IG5lZWQgdG8gc291cmNlIGEgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0IChpLmUuCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncWVtdS11c2luZy10aGUtcnVucWVtdS1jb21tYW5kJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIHRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IENvbW1hbmQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJhc2ljIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gY29tbWFuZCBzeW50YXggaXMgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBbPHJlcGxhY2VhYmxlPm9wdGlvbjwvcmVwbGFjZWFibGU+IF0gIFsuLi5dCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBCYXNlZCBvbiB3aGF0IHlvdSBwcm92aWRlIG9uIHRoZSBjb21tYW5kIGxpbmUsCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGRvZXMgYSBnb29kIGpvYiBvZiBmaWd1cmluZyBvdXQgd2hhdAorICAgICAgICAgICAgeW91IGFyZSB0cnlpbmcgdG8gZG8uCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCwgUUVNVSBsb29rcyBmb3IgdGhlIG1vc3QgcmVjZW50bHkgYnVpbHQKKyAgICAgICAgICAgIGltYWdlIGFjY29yZGluZyB0byB0aGUgdGltZXN0YW1wIHdoZW4gaXQgbmVlZHMgdG8gbG9vayBmb3IgYW4KKyAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgTWluaW1hbGx5LCB0aHJvdWdoIHRoZSB1c2Ugb2Ygb3B0aW9ucywgeW91IG11c3QgcHJvdmlkZSBlaXRoZXIKKyAgICAgICAgICAgIGEgbWFjaGluZSBuYW1lLCBhIHZpcnR1YWwgbWFjaGluZSBpbWFnZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLnZtZGs8L2ZpbGVuYW1lPiksIG9yIGEga2VybmVsIGltYWdlCisgICAgICAgICAgICAoPGZpbGVuYW1lPiouYmluPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBkZXNjcmlwdGlvbiBvZiA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICBvcHRpb25zIHlvdSBjYW4gcHJvdmlkZSBvbiB0aGUgY29tbWFuZCBsaW5lOgorICAgICAgICAgICAgPG5vdGU+PHRpdGxlPlRpcDwvdGl0bGU+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIHByb3ZpZGUgc29tZSAiaWxsZWdhbCIgb3B0aW9uIGNvbWJpbmF0aW9uIG9yIHBlcmhhcHMKKyAgICAgICAgICAgICAgICB5b3UgZG8gbm90IHByb3ZpZGUgZW5vdWdoIGluIHRoZSB3YXkgb2Ygb3B0aW9ucywKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHByb3ZpZGVzIGFwcHJvcHJpYXRlIGVycm9yCisgICAgICAgICAgICAgICAgbWVzc2FnaW5nIHRvIGhlbHAgeW91IGNvcnJlY3QgdGhlIHByb2JsZW0uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48cmVwbGFjZWFibGU+UUVNVUFSQ0g8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIFFFTVUgbWFjaGluZSBhcmNoaXRlY3R1cmUsIHdoaWNoIG11c3QgYmUgInFlbXV4ODYiLAorICAgICAgICAgICAgICAgICAgICAicWVtdXg4Nl82NCIsICJxZW11YXJtIiwgInFlbXVtaXBzIiwgInFlbXVtaXBzZWwiLAorICAgICAgICAgICAgICAgICAgICDigJxxZW11bWlwczY0IiwgInFlbXVzaDQiLCAicWVtdXBwYyIsICJxZW11bWljcm9ibGF6ZSIsCisgICAgICAgICAgICAgICAgICAgIG9yICJxZW11enlucSIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPlZNPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIHZpcnR1YWwgbWFjaGluZSBpbWFnZSwgd2hpY2ggbXVzdCBiZSBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4udm1kazwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIG9wdGlvbiB3aGVuIHlvdSB3YW50IHRvIGJvb3QgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGltYWdlIGZpbGVuYW1lIHlvdSBwcm92aWRlIG11c3QgY29udGFpbiBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzdHJpbmdzOiAicWVtdXg4Ni02NCIsICJxZW11eDg2IiwgInFlbXVhcm0iLAorICAgICAgICAgICAgICAgICAgICAicWVtdW1pcHM2NCIsICJxZW11bWlwcyIsICJxZW11cHBjIiwgb3IgInFlbXVzaDQiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHJlcGxhY2VhYmxlPlJPT1RGUzwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBBIHJvb3QgZmlsZXN5c3RlbSB0aGF0IGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBmaWxldHlwZSBleHRlbnNpb25zOiAiZXh0MiIsICJleHQzIiwgImV4dDQiLCAiamZmczIiLAorICAgICAgICAgICAgICAgICAgICAibmZzIiwgb3IgImJ0cmZzIi4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGVuYW1lIHlvdSBwcm92aWRlIGZvciB0aGlzIG9wdGlvbiB1c2VzIOKAnG5mc+KAnSwgaXQKKyAgICAgICAgICAgICAgICAgICAgbXVzdCBwcm92aWRlIGFuIGV4cGxpY2l0IHJvb3QgZmlsZXN5c3RlbSBwYXRoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHJlcGxhY2VhYmxlPktFUk5FTDwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBBIGtlcm5lbCBpbWFnZSwgd2hpY2ggaXMgYSA8ZmlsZW5hbWU+LmJpbjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHByb3ZpZGUgYSA8ZmlsZW5hbWU+LmJpbjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gZGV0ZWN0cyBpdCBhbmQgYXNzdW1lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyBhIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIFFFTVUgbWFjaGluZSwgd2hpY2ggbXVzdCBiZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZzogInFlbXV4ODYiLAorICAgICAgICAgICAgICAgICAgICAicWVtdXg4Ni02NCIsICJxZW11YXJtIiwgInFlbXVtaXBzIiwgInFlbXVtaXBzZWwiLAorICAgICAgICAgICAgICAgICAgICDigJxxZW11bWlwczY0IiwgInFlbXVzaDQiLCAicWVtdXBwYyIsICJxZW11bWljcm9ibGF6ZSIsCisgICAgICAgICAgICAgICAgICAgIG9yICJxZW11enlucSIuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+UUVNVUFSQ0g8L3JlcGxhY2VhYmxlPiBvcHRpb25zIGFyZSBiYXNpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiB0cmllcyB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgaXQgYmFzZWQgb24gb3RoZXIgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5yYW1mczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgeW91IGFyZSBib290aW5nIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UsIHdoaWNoIG1lYW5zIHRoZSA8ZmlsZW5hbWU+RlNUWVBFPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwaW8uZ3o8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pc288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHlvdSBhcmUgYm9vdGluZyBhbiBJU08gaW1hZ2UsIHdoaWNoIG1lYW5zIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RlNUWVBFPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pc288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ub2dyYXBoaWM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgdGhlIHZpZGVvIGNvbnNvbGUsIHdoaWNoIHNldHMgdGhlIGNvbnNvbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgInR0eXMwIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zZXJpYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBhIHNlcmlhbCBjb25zb2xlIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L3R0eVMwPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ymlvc2RpcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFc3RhYmxpc2hlcyBhIGN1c3RvbSBkaXJlY3RvcnkgZm9yIEJJT1MsIFZHQSBCSU9TIGFuZAorICAgICAgICAgICAgICAgICAgICBrZXltYXBzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpb3NmaWxlbmFtZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFc3RhYmxpc2hlcyBhIGN1c3RvbSBCSU9TIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cWVtdXBhcmFtcz1cIjxyZXBsYWNlYWJsZT54eXo8L3JlcGxhY2VhYmxlPlwiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBjdXN0b20gUUVNVSBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBvcHRpb24gdG8gcGFzcyBvcHRpb25zIG90aGVyIHRoYW4gdGhlIHNpbXBsZQorICAgICAgICAgICAgICAgICAgICAia3ZtIiBhbmQgInNlcmlhbCIgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ib290cGFyYW1zPVwiPHJlcGxhY2VhYmxlPnh5ejwvcmVwbGFjZWFibGU+XCI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGN1c3RvbSBib290IHBhcmFtZXRlcnMgZm9yIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YXVkaW88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBhdWRpbyBpbiBRRU1VLgorICAgICAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBvcHRpb24gbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0IiBpbiBvcmRlciBmb3IgYXVkaW8gdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgPGZpbGVuYW1lPnNuZF9pbnRlbDh4MDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5zbmRfZW5zMTM3MDwvZmlsZW5hbWU+IGRyaXZlciBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBsaW51eCBndWVzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zbGlycDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzICJzbGlycCIgbmV0d29ya2luZywgd2hpY2ggaXMgYSBkaWZmZXJlbnQgd2F5CisgICAgICAgICAgICAgICAgICAgIG9mIG5ldHdvcmtpbmcgdGhhdCBkb2VzIG5vdCBuZWVkIHJvb3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgIGJ1dCBhbHNvIGlzIG5vdCBhcyBlYXN5IHRvIHVzZSBvciBjb21wcmVoZW5zaXZlCisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmt2bTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIEtWTSB3aGVuIHJ1bm5pbmcgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0IgorICAgICAgICAgICAgICAgICAgICBRRU1VIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBLVk0gdG8gd29yaywgYWxsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIG1ldDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gbXVzdCBiZSBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicWVtdXg4NiIgb3IgInFlbXV4ODYtNjQiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgYnVpbGQgaG9zdCBoYXMgdG8gaGF2ZSB0aGUgS1ZNIG1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQsIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L2t2bTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdXIgYnVpbGQgaG9zdCBoYXMgdG8gaGF2ZSB2aXJ0aW8gbmV0IGRldmljZSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgPGZpbGVuYW1lPi9kZXYvdmhvc3QtbmV0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICBidWlsZCBob3N0IDxmaWxlbmFtZT4vZGV2L2t2bTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGhhcyB0byBiZSBib3RoIHdyaXRhYmxlIGFuZCByZWFkYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaG9zdCA8ZmlsZW5hbWU+L2Rldi92aG9zdC1uZXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBoYXMgdG8gYmUgZWl0aGVyIHJlYWRhYmxlIG9yIHdyaXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIOKAnHNsaXJwLWVuYWJsZWTigJ0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB1YmxpY3ZuYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGEgVk5DIHNlcnZlciBvcGVuIHRvIGFsbCBob3N0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGZ1cnRoZXIgdW5kZXJzdGFuZGluZyByZWdhcmRpbmcgb3B0aW9uIHVzZSB3aXRoCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+LCBjb25zaWRlciBzb21lIGV4YW1wbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc3RhcnRzIFFFTVUgd2l0aAorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBzZXQgdG8gInFlbXV4ODYiLgorICAgICAgICAgICAgQXNzdW1pbmcgYSBzdGFuZGFyZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBhdXRvbWF0aWNhbGx5IGZpbmRzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJ6SW1hZ2UtcWVtdXg4Ni5iaW48L2ZpbGVuYW1lPiBpbWFnZSBmaWxlIGFuZAorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYtMjAxNDA3MDcwNzQ2MTEucm9vdGZzLmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgKGFzc3VtaW5nIHRoZSBjdXJyZW50IGJ1aWxkIGNyZWF0ZWQgYQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlKS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFdoZW4gbW9yZSB0aGFuIG9uZSBpbWFnZSB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLCBRRU1VIGZpbmRzCisgICAgICAgICAgICAgICAgYW5kIHVzZXMgdGhlIG1vc3QgcmVjZW50bHkgYnVpbHQgaW1hZ2UgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgIHRpbWVzdGFtcC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHByb2R1Y2VzIHRoZSBleGFjdCBzYW1lIHJlc3VsdHMgYXMgdGhlCisgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlLgorICAgICAgICAgICAgVGhpcyBjb21tYW5kLCBob3dldmVyLCBzcGVjaWZpY2FsbHkgcHJvdmlkZXMgdGhlIGltYWdlCisgICAgICAgICAgICBhbmQgcm9vdCBmaWxlc3lzdGVtIHR5cGUuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2IGNvcmUtaW1hZ2UtbWluaW1hbCBleHQzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc3BlY2lmaWVzIHRvIGJvb3QgYW4gaW5pdGlhbCBSQU0gZGlzayBpbWFnZQorICAgICAgICAgICAgYW5kIHRvIGVuYWJsZSBhdWRpbyBpbiBRRU1VLgorICAgICAgICAgICAgRm9yIHRoaXMgY2FzZSwgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzZXQgdGhlCisgICAgICAgICAgICBpbnRlcm5hbCB2YXJpYWJsZSA8ZmlsZW5hbWU+RlNUWVBFPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICJjcGlvLmd6Ii4KKyAgICAgICAgICAgIEFsc28sIGZvciBhdWRpbyB0byBiZSBlbmFibGVkLCBhbiBhcHByb3ByaWF0ZSBkcml2ZXIgbXVzdAorICAgICAgICAgICAgYmUgaW5zdGFsbGVkIChzZWUgdGhlIHByZXZpb3VzIGRlc2NyaXB0aW9uIGZvciB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5hdWRpbzwvZmlsZW5hbWU+IG9wdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2IHJhbWZzIGF1ZGlvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24gZm9yCisgICAgICAgICAgICBRRU1VIHRvIGxhdW5jaC4KKyAgICAgICAgICAgIFdoaWxlIHRoZSBjb21tYW5kIGRvZXMgcHJvdmlkZSBhIHJvb3QgZmlsZXN5c3RlbSB0eXBlLCBpdAorICAgICAgICAgICAgbXVzdCBhbHNvIG1pbmltYWxseSBwcm92aWRlIGEKKyAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4sCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+S0VSTkVMPC9yZXBsYWNlYWJsZT4sIG9yCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+Vk08L3JlcGxhY2VhYmxlPiBvcHRpb24uCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBleHQzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc3BlY2lmaWVzIHRvIGJvb3QgYSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiBmaWxlKS4KKyAgICAgICAgICAgIEZyb20gdGhlIDxmaWxlbmFtZT4udm1kazwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkZXRlcm1pbmVzIHRoZSBRRU1VCisgICAgICAgICAgICBhcmNoaXRlY3R1cmUgKDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4pIHRvIGJlCisgICAgICAgICAgICAicWVtdXg4NiIgYW5kIHRoZSByb290IGZpbGVzeXN0ZW0gdHlwZSB0byBiZSAidm1kayIuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSAvaG9tZS9zY290dC1sZW5vdm8vdm0vY29yZS1pbWFnZS1taW5pbWFsLXFlbXV4ODYudm1kaworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncWVtdS1ydW5uaW5nLXVuZGVyLWEtbmV0d29yay1maWxlLXN5c3RlbS1uZnMtc2VydmVyJz4KKyAgICA8dGl0bGU+UnVubmluZyBVbmRlciBhIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgU2VydmVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBPbmUgbWV0aG9kIGZvciBydW5uaW5nIFFFTVUgaXMgdG8gcnVuIGl0IG9uIGFuIE5GUyBzZXJ2ZXIuCisgICAgICAgIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIGZpbGUgc3lzdGVtIGZyb20gYm90aAorICAgICAgICB0aGUgYnVpbGQgYW5kIHRoZSBlbXVsYXRlZCBzeXN0ZW0gYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgc3lzdGVtIGRvZXMgbm90IG5lZWQgcm9vdCBwcml2aWxlZ2VzCisgICAgICAgIHRvIHJ1bi4KKyAgICAgICAgSXQgdXNlcyBhIHVzZXIgc3BhY2UgTkZTIHNlcnZlciB0byBhdm9pZCB0aGF0LgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBzZXQgdXAgZm9yIHJ1bm5pbmcgUUVNVSB1c2luZyBhbiBORlMKKyAgICAgICAgc2VydmVyIGFuZCB0aGVuIGhvdyB5b3UgY2FuIHN0YXJ0IGFuZCBzdG9wIHRoZSBzZXJ2ZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtc2V0dGluZy11cC10by11c2UtbmZzJz4KKyAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdG8gVXNlIE5GUzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSBhcmUgYWJsZSB0byBydW4gUUVNVSBpbiB5b3VyIGVudmlyb25tZW50LCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaCBpcyBsb2NhdGVkCisgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYWxvbmcgd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiB0YWtlcyBhIHJvb3QKKyAgICAgICAgICAgIGZpbGUgc3lzdGVtIHRhcmJhbGwgYW5kIGV4dHJhY3RzIGl0IGludG8gYSBsb2NhdGlvbiB0aGF0IHlvdQorICAgICAgICAgICAgc3BlY2lmeS4KKyAgICAgICAgICAgIFRoZW4sIHdoZW4geW91IHJ1biA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkKKyAgICAgICAgICAgIHRoZSBsb2NhdGlvbiB0aGF0IGhhcyB0aGUgZmlsZSBzeXN0ZW0gdG8gcGFzcyBpdCB0byBRRU1VLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdGFrZXMgYSBmaWxlIHN5c3RlbSBhbmQgZXh0cmFjdHMgaXQgdG8KKyAgICAgICAgICAgIGEgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT50ZXN0LW5mczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4dHJhY3Qtc2RrIC4vdG1wL2RlcGxveS9pbWFnZXMvcWVtdXg4Ni9jb3JlLWltYWdlLXNhdG8tcWVtdXg4Ni50YXIuYnoyIHRlc3QtbmZzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGV4dHJhY3RlZCB0aGUgZmlsZSBzeXN0ZW0sIHlvdSBjYW4gcnVuCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IG5vcm1hbGx5IHdpdGggdGhlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgIFlvdSBjYW4gdGhlbiBhbHNvIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZXMgd2l0aGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+Li90ZXN0LW5mczwvZmlsZW5hbWU+IGFuZCBzZWUgdGhvc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlCisgICAgICAgICAgICBpbWFnZSBpbiByZWFsIHRpbWUuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdXNpbmcgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gaW1hZ2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJ1bnFlbXUgcWVtdXg4NiAuL3Rlc3QtbmZzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncWVtdS1zdGFydGluZy1hbmQtc3RvcHBpbmctbmZzJz4KKyAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIGFuZCBTdG9wcGluZyBORlM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBtYW51YWxseSBzdGFydCBhbmQgc3RvcCB0aGUgTkZTIHNoYXJlIHVzaW5nIHRoZXNlCisgICAgICAgICAgICBjb21tYW5kczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTdGFydHMgdGhlIE5GUyBzaGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RhcnQgPHJlcGxhY2VhYmxlPmZpbGUtc3lzdGVtLWxvY2F0aW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdG9wPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3RvcHMgdGhlIE5GUyBzaGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCA8cmVwbGFjZWFibGU+ZmlsZS1zeXN0ZW0tbG9jYXRpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJlc3RhcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZXN0YXJ0cyB0aGUgTkZTIHNoYXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJ1bnFlbXUtZXhwb3J0LXJvb3RmcyByZXN0YXJ0IDxyZXBsYWNlYWJsZT5maWxlLXN5c3RlbS1sb2NhdGlvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FlbXUtdGlwcy1hbmQtdHJpY2tzJz4KKyAgICA8dGl0bGU+VGlwcyBhbmQgVHJpY2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHRoaW5ncyB5b3UgY2FuIGRvIHRvIG1ha2UgcnVubmluZyBRRU1VCisgICAgICAgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0IGEgYmV0dGVyIGV4cGVyaWVuY2U6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN3aXRjaGluZyBCZXR3ZWVuIENvbnNvbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgV2hlbiBib290aW5nIG9yIHJ1bm5pbmcgUUVNVSwgeW91IGNhbiBzd2l0Y2ggYmV0d2VlbgorICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBjb25zb2xlcyBieSB1c2luZworICAgICAgICAgICAgICAgIEN0cmwrQWx0KzxyZXBsYWNlYWJsZT5udW1iZXI8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgQ3RybCtBbHQrMyBzd2l0Y2hlcyB5b3UgdG8gdGhlIHNlcmlhbCBjb25zb2xlIGFzCisgICAgICAgICAgICAgICAgbG9uZyBhcyB0aGF0IGNvbnNvbGUgaXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBCZWluZyBhYmxlIHRvIHN3aXRjaCBjb25zb2xlcyBpcyBoZWxwZnVsLCBmb3IgZXhhbXBsZSwgaWYgdGhlCisgICAgICAgICAgICAgICAgbWFpbiBRRU1VIGNvbnNvbGUgYnJlYWtzIGZvciBzb21lIHJlYXNvbi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVXN1YWxseSwgIjIiIGdldHMgeW91IHRvIHRoZSBtYWluIGNvbnNvbGUgYW5kICIzIiBnZXRzIHlvdQorICAgICAgICAgICAgICAgICAgICB0byB0aGUgc2VyaWFsIGNvbnNvbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZW1vdmluZyB0aGUgU3BsYXNoIFNjcmVlbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVtb3ZlIHRoZSBzcGxhc2ggc2NyZWVuIHdoZW4gUUVNVSBpcyBib290aW5nIGJ5CisgICAgICAgICAgICAgICAgdXNpbmcgQWx0K2xlZnQuCisgICAgICAgICAgICAgICAgUmVtb3ZpbmcgdGhlIHNwbGFzaCBzY3JlZW4gYWxsb3dzIHlvdSB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcKKyAgICAgICAgICAgICAgICBpbiB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGlzYWJsaW5nIHRoZSBDdXJzb3IgR3JhYjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IFFFTVUgaW50ZWdyYXRpb24gY2FwdHVyZXMgdGhlIGN1cnNvciB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgbWFpbiB3aW5kb3cuCisgICAgICAgICAgICAgICAgSXQgZG9lcyB0aGlzIHNpbmNlIHN0YW5kYXJkIG1vdXNlIGRldmljZXMgb25seSBwcm92aWRlIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgaW5wdXQgYW5kIG5vdCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICAgICAgICAgICAgICBZb3UgdGhlbiBoYXZlIHRvIGJyZWFrIG91dCBvZiB0aGUgZ3JhYiB1c2luZyB0aGUgIkN0cmwrQWx0IiBrZXkKKyAgICAgICAgICAgICAgICBjb21iaW5hdGlvbi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgWW9jdG8gUHJvamVjdCdzIGludGVncmF0aW9uIG9mIFFFTVUgZW5hYmxlcyB0aGUKKyAgICAgICAgICAgICAgICB3YWNvbSBVU0IgdG91Y2ggcGFkIGRyaXZlciBieSBkZWZhdWx0IHRvIGFsbG93IGlucHV0IG9mIGFic29sdXRlCisgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgVGhpcyBkZWZhdWx0IG1lYW5zIHRoYXQgdGhlIG1vdXNlIGNhbiBlbnRlciBhbmQgbGVhdmUgdGhlCisgICAgICAgICAgICAgICAgbWFpbiB3aW5kb3cgd2l0aG91dCB0aGUgZ3JhYiB0YWtpbmcgZWZmZWN0IGxlYWRpbmcgdG8gYSBiZXR0ZXIKKyAgICAgICAgICAgICAgICB1c2VyIGV4cGVyaWVuY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTg5YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbApAQCAtMCwwICsxLDQzMyBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2Rldi1tYW51YWwtc3RhcnQnPgorCis8dGl0bGU+R2V0dGluZyBTdGFydGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgaW50cm9kdWNlcyB0aGUgWW9jdG8gUHJvamVjdCBhbmQgZ2l2ZXMgeW91IGFuIGlkZWEgb2Ygd2hhdCB5b3UgbmVlZCB0byBnZXQgc3RhcnRlZC4KKyAgICBZb3UgY2FuIGZpbmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHNldCB1cCB5b3VyIGRldmVsb3BtZW50IGhvc3QgYW5kIGJ1aWxkIG9yIHVzZSBpbWFnZXMgZm9yCisgICAgaGFyZHdhcmUgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGJ5IHJlYWRpbmcgdGhlCisgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+LgorPC9wYXJhPgorCis8cGFyYT4KKyAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgY2hhcHRlciBzdW1tYXJpemVzIHdoYXQgaXMgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgYW5kIHByb3ZpZGVzCisgICAgc29tZSBoaWdoZXItbGV2ZWwgY29uY2VwdHMgeW91IG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdpbnRyb2R1Y2luZy10aGUteW9jdG8tcHJvamVjdCc+CisgICAgPHRpdGxlPkludHJvZHVjaW5nIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBpcyBhbiBvcGVuLXNvdXJjZSBjb2xsYWJvcmF0aW9uIHByb2plY3QgZm9jdXNlZCBvbiBlbWJlZGRlZCBMaW51eCBkZXZlbG9wbWVudC4KKyAgICAgICAgVGhlIHByb2plY3QgY3VycmVudGx5IHByb3ZpZGVzIGEgYnVpbGQgc3lzdGVtIHRoYXQgaXMKKyAgICAgICAgcmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC9saW5rPgorICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uLgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyB2YXJpb3VzIGFuY2lsbGFyeSB0b29scyBmb3IgdGhlIGVtYmVkZGVkIGRldmVsb3BlcgorICAgICAgICBhbmQgYWxzbyBmZWF0dXJlcyB0aGUgU2F0byByZWZlcmVuY2UgVXNlciBJbnRlcmZhY2UsIHdoaWNoIGlzIG9wdGltaXplZCBmb3IKKyAgICAgICAgc3R5bHVzLWRyaXZlbiwgbG93LXJlc29sdXRpb24gc2NyZWVucy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoIHVzZXMKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPiwgdG8gZGV2ZWxvcCBjb21wbGV0ZSBMaW51eAorICAgICAgICBpbWFnZXMgYW5kIGFzc29jaWF0ZWQgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgZm9yIGFyY2hpdGVjdHVyZXMgYmFzZWQKKyAgICAgICAgb24gQVJNLCBNSVBTLCBQb3dlclBDLCB4ODYgYW5kIHg4Ni02NC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBjcmVhdGVzIGEgUG9reSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24gYnkgcHJvdmlkaW5nIGtleQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+Q3JlYXRpbmcgWW91ciBPd24gRGlzdHJpYnV0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgV2hpbGUgdGhlIFlvY3RvIFByb2plY3QgZG9lcyBub3QgcHJvdmlkZSBhIHN0cmljdCB0ZXN0aW5nIGZyYW1ld29yaywKKyAgICAgICAgaXQgZG9lcyBwcm92aWRlIG9yIGdlbmVyYXRlIGZvciB5b3UgYXJ0aWZhY3RzIHRoYXQgbGV0IHlvdSBwZXJmb3JtIHRhcmdldC1sZXZlbCBhbmQKKyAgICAgICAgZW11bGF0ZWQgdGVzdGluZyBhbmQgZGVidWdnaW5nLgorICAgICAgICBBZGRpdGlvbmFsbHksIGlmIHlvdSBhcmUgYW4gPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4KKyAgICAgICAgSURFIHVzZXIsIHlvdSBjYW4gaW5zdGFsbCBhbiBFY2xpcHNlIFlvY3RvIFBsdWctaW4gdG8gYWxsb3cgeW91IHRvCisgICAgICAgIGRldmVsb3Agd2l0aGluIHRoYXQgZmFtaWxpYXIgZW52aXJvbm1lbnQuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nZ2V0dGluZy1zZXR1cCc+CisgICAgPHRpdGxlPkdldHRpbmcgU2V0IFVwPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIHdoYXQgeW91IG5lZWQgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0OgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Ib3N0IFN5c3RlbTo8L2VtcGhhc2lzPiAgWW91IHNob3VsZCBoYXZlIGEgcmVhc29uYWJseSBjdXJyZW50CisgICAgICAgICAgICAgICAgTGludXgtYmFzZWQgaG9zdCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgWW91IHdpbGwgaGF2ZSB0aGUgYmVzdCByZXN1bHRzIHdpdGggYSByZWNlbnQgcmVsZWFzZSBvZiBGZWRvcmEsCisgICAgICAgICAgICAgICAgb3BlblNVU0UsIERlYmlhbiwgVWJ1bnR1LCBvciBDZW50T1MgYXMgdGhlc2UgcmVsZWFzZXMgYXJlIGZyZXF1ZW50bHkgdGVzdGVkIGFnYWluc3QgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBhbmQgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgZGlzdHJpYnV0aW9ucyB1bmRlciB2YWxpZGF0aW9uIGFuZCB0aGVpciBzdGF0dXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGFuZCB0aGUgd2lraSBwYWdlIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0Rpc3RyaWJ1dGlvbl9TdXBwb3J0Jz5EaXN0cmlidXRpb24gU3VwcG9ydDwvdWxpbms+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsc28gaGF2ZSBhYm91dCA1MCBHYnl0ZXMgb2YgZnJlZSBkaXNrIHNwYWNlIGZvciBidWlsZGluZyBpbWFnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2VzOjwvZW1waGFzaXM+ICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIHJlcXVpcmVzIHRoYXQgY2VydGFpbiBwYWNrYWdlcyBleGlzdCBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSAoZS5nLiBQeXRob24gMi43KS4KKyAgICAgICAgICAgICAgICBTZWUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcGFja2FnZXMnPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBhbmQgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIHRoZSBleGFjdAorICAgICAgICAgICAgICAgIHBhY2thZ2UgcmVxdWlyZW1lbnRzIGFuZCB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmRzIHRvIGluc3RhbGwKKyAgICAgICAgICAgICAgICB0aGVtIGZvciB0aGUgc3VwcG9ydGVkIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0gaWQ9J2xvY2FsLXlwLXJlbGVhc2UnPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCBhIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QgbG9jYWxseSBpbnN0YWxsZWQgb24KKyAgICAgICAgICAgICAgICB5b3VyIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gdGhpcyBzZXQgb2YgbG9jYWxseSBpbnN0YWxsZWQgZmlsZXMKKyAgICAgICAgICAgICAgICBhcyB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgWW91IGNyZWF0ZSB5b3VyIFNvdXJjZSBEaXJlY3RvcnkgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gdG8gY2xvbmUgYSBsb2NhbCBjb3B5CisgICAgICAgICAgICAgICAgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICBvciBieSBkb3dubG9hZGluZyBhbmQgdW5wYWNraW5nIGEgdGFyYmFsbCBvZiBhbiBvZmZpY2lhbAorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBUaGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+V29ya2luZyBmcm9tIGEgY29weSBvZiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSBhbGxvd3MgeW91CisgICAgICAgICAgICAgICAgdG8gY29udHJpYnV0ZSBiYWNrIGludG8gdGhlIFlvY3RvIFByb2plY3Qgb3Igc2ltcGx5IHdvcmsgd2l0aAorICAgICAgICAgICAgICAgIHRoZSBsYXRlc3Qgc29mdHdhcmUgb24gYSBkZXZlbG9wbWVudCBicmFuY2guCisgICAgICAgICAgICAgICAgQmVjYXVzZSBHaXQgbWFpbnRhaW5zIGFuZCBjcmVhdGVzIGFuIHVwc3RyZWFtIHJlcG9zaXRvcnkgd2l0aAorICAgICAgICAgICAgICAgIGEgY29tcGxldGUgaGlzdG9yeSBvZiBjaGFuZ2VzIGFuZCB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIGxvY2FsCisgICAgICAgICAgICAgICAgY2xvbmUgb2YgdGhhdCByZXBvc2l0b3J5LCB5b3UgaGF2ZSBhY2Nlc3MgdG8gYWxsIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgZGV2ZWxvcG1lbnQgYnJhbmNoZXMgYW5kIHRhZyBuYW1lcyB1c2VkIGluIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxub3RlPllvdSBjYW4gdmlldyB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyB0cmFuc2NyaXB0IHNob3dzIGhvdyB0byBjbG9uZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IGludG8gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBjcmVhdGVzIHRoZSBsb2NhbCByZXBvc2l0b3J5IGluIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR2l0IHVzZWQgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgQ2xvbmluZyBpbnRvICdwb2t5Jy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDIyNjc5MCwgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg1NzQ2NS81NzQ2NSksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgMjI2NzkwIChkZWx0YSAxNjUyMTIpLCByZXVzZWQgMjI1ODg3IChkZWx0YSAxNjQzMjcpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgyMjY3OTAvMjI2NzkwKSwgMTAwLjk4IE1pQiB8IDI2MyBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMTY1MjEyLzE2NTIxMiksIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgeW91ciBvd24gbG9jYWwgR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLCBzZWUgdGhpcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9UcmFuc2NyaXB0Ol9mcm9tX2dpdF9jaGVja291dF90b19tZXRhLWludGVsX0JTUCc+CisgICAgICAgICAgICAgICAgd2lraSBwYWdlPC91bGluaz4sIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY3JlYXRlIGxvY2FsCisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcyBmb3IgYm90aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBnZXQgdGhlIFlvY3RvIFByb2plY3QgRmlsZXMgYnkgZG93bmxvYWRpbmcKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0hPTUVfVVJMOyI+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgRnJvbSB0aGUgd2Vic2l0ZSwgeW91IGp1c3QgY2xpY2sgIkRvd25sb2FkcyIgaW4gdGhlIG5hdmlnYXRpb24KKyAgICAgICAgICAgICAgICBwYW5lIHRvIHRoZSBsZWZ0IHRvIGRpc3BsYXkgYWxsIFlvY3RvIFByb2plY3QgZG93bmxvYWRzLgorICAgICAgICAgICAgICAgIEN1cnJlbnQgYW5kIGFyY2hpdmVkIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkLgorICAgICAgICAgICAgICAgIE5pZ2h0bHkgYW5kIGRldmVsb3BtZW50YWwgYnVpbGRzIGFyZSBhbHNvIG1haW50YWluZWQgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fQUJfTklHSFRMWV9VUkw7Ij48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBPbmUgZmluYWwgc2l0ZSB5b3UgY2FuIHZpc2l0IGZvciBpbmZvcm1hdGlvbiBvbiBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZXMgaXMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1JlbGVhc2VzJz5SZWxlYXNlczwvdWxpbms+CisgICAgICAgICAgICAgICAgd2lraS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbSBpZD0nbG9jYWwta2VybmVsLWZpbGVzJz48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBLZXJuZWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIGJlIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGEgc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVsLCB5b3UKKyAgICAgICAgICAgICAgICBuZWVkIHRvIGVzdGFibGlzaCBsb2NhbCBjb3BpZXMgb2YgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgR2l0IHJlcG9zaXRvcmllcyBvZiBzdXBwb3J0ZWQgWW9jdG8gUHJvamVjdCBrZXJuZWxzIG9yZ2FuaXplZCB1bmRlcgorICAgICAgICAgICAgICAgICJZb2N0byBMaW51eCBLZXJuZWwiIGluIHRoZSBZb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGlzIHNldHVwIGNhbiBpbnZvbHZlIGNyZWF0aW5nIGEgYmFyZSBjbG9uZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBjb3B5aW5nIHRoYXQgY2xvbmVkIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgdGhlIGJhcmUgY2xvbmUgYW5kIHRoZSBjb3B5IG9mIHRoZSBiYXJlIGNsb25lIGFueXdoZXJlIHlvdSBsaWtlLgorICAgICAgICAgICAgICAgIEZvciBzaW1wbGljaXR5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjcmVhdGUgdGhlc2Ugc3RydWN0dXJlcyBvdXRzaWRlIG9mIHRoZQorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHVzdWFsbHkgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0cmFuc2NyaXB0IHNob3dzIGhvdyB0byBjcmVhdGUgdGhlIGJhcmUgY2xvbmUKKyAgICAgICAgICAgICAgICBvZiB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPiBrZXJuZWwgYW5kIHRoZW4gY3JlYXRlIGEgY29weSBvZgorICAgICAgICAgICAgICAgIHRoYXQgY2xvbmUuCisgICAgICAgICAgICAgICAgPG5vdGU+V2hlbiB5b3UgaGF2ZSBhIGxvY2FsIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRoYXQgcmVwb3NpdG9yeSByYXRoZXIgdGhhbiB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgYXMKKyAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSA8ZmlsZW5hbWU+Y2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGNhbiBzcGVlZCB1cCB0aGUgcHJvY2Vzcy48L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGJhcmUgY2xvbmUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOS5naXQ8L2ZpbGVuYW1lPiwgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgY29weSBpcyBuYW1lZCA8ZmlsZW5hbWU+bXktbGludXgteW9jdG8tMy4xOS13b3JrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSAtLWJhcmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOSBsaW51eC15b2N0by0zLjE5LmdpdAorICAgICBDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICdsaW51eC15b2N0by0zLjE5LmdpdCcuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiAzOTgzMjU2LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDYwNTAwNi82MDUwMDYpLCBkb25lLgorICAgICByZW1vdGU6IFRvdGFsIDM5ODMyNTYgKGRlbHRhIDMzNTI4MzIpLCByZXVzZWQgMzk3NDUwMyAoZGVsdGEgMzM0NDA3OSkKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDM5ODMyNTYvMzk4MzI1NiksIDg0My42NiBNaUIgfCAxLjA3IE1pQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgzMzUyODMyLzMzNTI4MzIpLCBkb25lLgorICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPk5vdyBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgYmFyZSBjbG9uZSBqdXN0IGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBsaW51eC15b2N0by0zLjE5LmdpdCBteS1saW51eC15b2N0by0zLjE5LXdvcmsKKyAgICAgQ2xvbmluZyBpbnRvICdteS1saW51eC15b2N0by0zLjE5LXdvcmsnLi4uCisgICAgIGRvbmUuCisgICAgIENoZWNraW5nIG91dCBmaWxlczogMTAwJSAoNDg0NDAvNDg0NDApLCBkb25lLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbSBpZD0nbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzLXJlcG8nPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG8ta2VybmVsLWV4dHJhczwvZmlsZW5hbWU+IEdpdCBSZXBvc2l0b3J5PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXM8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBjb250YWlucyBNZXRhZGF0YSBuZWVkZWQKKyAgICAgICAgICAgICAgICBvbmx5IGlmIHlvdSBhcmUgbW9kaWZ5aW5nIGFuZCBidWlsZGluZyB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIGl0IGNvbnRhaW5zIHRoZSBrZXJuZWwgQml0QmFrZSBhcHBlbmQgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IHlvdQorICAgICAgICAgICAgICAgIGVkaXQgdG8gcG9pbnQgdG8geW91ciBsb2NhbGx5IG1vZGlmaWVkIGtlcm5lbCBzb3VyY2UgZmlsZXMgYW5kIHRvIGJ1aWxkIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICBQb2ludGluZyB0byB0aGVzZSBsb2NhbCBmaWxlcyBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gcmVxdWlyaW5nIGEgZG93bmxvYWQgb2YgdGhlCisgICAgICAgICAgICAgICAga2VybmVsJ3Mgc291cmNlIGZpbGVzIGZyb20gdXBzdHJlYW0gZWFjaCB0aW1lIHlvdSBtYWtlIGNoYW5nZXMgdG8gdGhlIGtlcm5lbC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0IFJlcG9zaXRvcnkgaW4gdGhlCisgICAgICAgICAgICAgICAgIllvY3RvIE1ldGFkYXRhIExheWVycyIgYXJlYSBvZiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJdCBpcyBnb29kIHByYWN0aWNlIHRvIGNyZWF0ZSB0aGlzIEdpdCByZXBvc2l0b3J5IGluc2lkZSB0aGUgU291cmNlIERpcmVjdG9yeS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCBjcmVhdGVzIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbnNpZGUgdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXMgbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzCisgICAgIENsb25pbmcgaW50byAnbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDcyNywgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg0NTIvNDUyKSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCA3MjcgKGRlbHRhIDI2MCksIHJldXNlZCA3MTkgKGRlbHRhIDI1MikKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDcyNy83MjcpLCA1MzYuMzYgS2lCIHwgMjQwIEtpQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgyNjAvMjYwKSwgZG9uZS4KKyAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdzdXBwb3J0ZWQtYm9hcmQtc3VwcG9ydC1wYWNrYWdlcy0oYnNwcyknPjxlbXBoYXNpcz5TdXBwb3J0ZWQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBtYW55IEJTUHMsIHdoaWNoIGFyZSBtYWludGFpbmVkIGluCisgICAgICAgICAgICAgICAgdGhlaXIgb3duIGxheWVycyBvciBpbiBsYXllcnMgZGVzaWduZWQgdG8gY29udGFpbiBzZXZlcmFsCisgICAgICAgICAgICAgICAgQlNQcy4KKyAgICAgICAgICAgICAgICBUbyBnZXQgYW4gaWRlYSBvZiBtYWNoaW5lIHN1cHBvcnQgdGhyb3VnaCBCU1AgbGF5ZXJzLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgbG9vayBhdCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUkVMRUFTRV9ETF9VUkw7L21hY2hpbmVzJz5pbmRleCBvZiBtYWNoaW5lczwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIHRoZSByZWxlYXNlLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IHVzZXMgdGhlIGZvbGxvd2luZyBCU1AgbGF5ZXIgbmFtaW5nCisgICAgICAgICAgICAgICAgc2NoZW1lOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICB3aGVyZSA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPiBpcyB0aGUgcmVjb2duaXplZAorICAgICAgICAgICAgICAgIEJTUCBuYW1lLgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLWNyb3duYmF5CisgICAgIG1ldGEtZW1lbmxvdworICAgICBtZXRhLXJhc3BiZXJyeXBpCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQlNQIExheWVycy48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5BIHVzZWZ1bCBHaXQgcmVwb3NpdG9yeSByZWxlYXNlZCB3aXRoIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgaXMgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYQorICAgICAgICAgICAgICAgIHBhcmVudCBsYXllciB0aGF0IGNvbnRhaW5zIG1hbnkgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbG9jYXRlIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW4gdGhlICJZb2N0byBNZXRhZGF0YSBMYXllcnMiIGFyZWEgb2YgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiB0byBjcmVhdGUgYSBsb2NhbCBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSByZXBvc2l0b3J5IGNhbiBiZSBoZWxwZnVsIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoCisgICAgICAgICAgICAgICAgQlNQcy4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBzZXQgdXAgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBpbnNpZGUgdGhlIFNvdXJjZSBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHJhbnNjcmlwdCBzaG93cyB0aGUgc3RlcHMgdG8gY2xvbmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHdvcmsgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIHRoYXQgbWF0Y2hlcyB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGNoZWNrZWQgb3V0IHRoZSAibWFzdGVyIiBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQgeW91IGFyZSBnb2luZyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiwgYmUgc3VyZSB0byBjaGVja291dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIm1hc3RlciIgYnJhbmNoIG9mIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kKKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS1pbnRlbC5naXQKKyAgICAgQ2xvbmluZyBpbnRvICdtZXRhLWludGVsJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDg4NDQsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoMjg2NC8yODY0KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCA4ODQ0IChkZWx0YSA0OTMxKSwgcmV1c2VkIDg3ODAgKGRlbHRhIDQ4NjcpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICg4ODQ0Lzg4NDQpLCAyLjQ4IE1pQiB8IDI2NCBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoNDkzMS80OTMxKSwgZG9uZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNhbWUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfZnJvbV9naXRfY2hlY2tvdXRfdG9fbWV0YS1pbnRlbF9CU1AnPndpa2kgcGFnZTwvdWxpbms+CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlZCBlYXJsaWVyIGNvdmVycyBob3cgdG8gc2V0IHVwIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVjbGlwc2UgWW9jdG8gUGx1Zy1pbjo8L2VtcGhhc2lzPiAgSWYgeW91IGFyZSBkZXZlbG9waW5nCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBFY2xpcHNlIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgKElERSksCisgICAgICAgICAgICAgICAgeW91IHdpbGwgbmVlZCB0aGlzIHBsdWctaW4uCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1lY2xpcHNlLWlkZSc+U2V0dGluZyB1cCB0aGUgRWNsaXBzZSBJREU8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWltYWdlcyc+CisgICAgPHRpdGxlPkJ1aWxkaW5nIEltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgY3JlYXRlcyBhbiBlbnRpcmUgTGludXggZGlzdHJpYnV0aW9uLCBpbmNsdWRpbmcgdGhlIHRvb2xjaGFpbiwgZnJvbSBzb3VyY2UuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93czoKKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnkgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5pdGlhbGl6ZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYnkgc291cmNpbmcgYSBidWlsZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9wdGlvbmFsbHkgZW5zdXJlIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgICAgICBpcyBzZXQgdXAgaG93IHlvdSB3YW50IGl0LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIG1hbnkgYXNwZWN0cyBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBtYWNoaW5lIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+TUFDSElORTwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUsCisgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2luZyBmb3JtYXQgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+KSwKKyAgICAgICAgICAgICAgICBhbmQgYSBjZW50cmFsaXplZCB0YXJiYWxsIGRvd25sb2FkIGRpcmVjdG9yeSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz5ETF9ESVI8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBpbWFnZSB1c2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSBpbWFnZSBlaXRoZXIgb24gdGhlIGFjdHVhbCBoYXJkd2FyZSBvciB1c2luZyB0aGUgUUVNVQorICAgICAgICAgICAgICAgIGVtdWxhdG9yLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3VzaW5nLXByZS1idWlsdC1iaW5hcmllcy1hbmQtcWVtdSc+CisgICAgPHRpdGxlPlVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBvcHRpb24geW91IGhhdmUgdG8gZ2V0IHN0YXJ0ZWQgaXMgdG8gdXNlIHByZS1idWlsdCBiaW5hcmllcy4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgbWFueSB0eXBlcyBvZiBiaW5hcmllcyB3aXRoIGVhY2ggcmVsZWFzZS4KKyAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbAorICAgICAgICBmb3IgZGVzY3JpcHRpb25zIG9mIHRoZSB0eXBlcyBvZiBiaW5hcmllcyB0aGF0IHNoaXAgd2l0aCBhIFlvY3RvIFByb2plY3QKKyAgICAgICAgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVXNpbmcgYSBwcmUtYnVpbHQgYmluYXJ5IGlzIGlkZWFsIGZvciBkZXZlbG9waW5nIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyB0byBydW4gb24geW91cgorICAgICAgICB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgIFRvIGRvIHRoaXMsIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBhcHByb3ByaWF0ZSBjcm9zcy10b29sY2hhaW4gdGFyYmFsbCBmb3IKKyAgICAgICAgdGhlIGFyY2hpdGVjdHVyZSBvbiB3aGljaCB5b3UgYXJlIGRldmVsb3BpbmcuCisgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYW4gU0RLIHR5cGUgaW1hZ2UsIHRoZSBpbWFnZSBzaGlwcyB3aXRoIHRoZSBjb21wbGV0ZSB0b29sY2hhaW4gbmF0aXZlIHRvCisgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUuCisgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIGFuIFNESyB0eXBlIGltYWdlLCB5b3UgbmVlZCB0byBzZXBhcmF0ZWx5IGRvd25sb2FkIGFuZAorICAgICAgICBpbnN0YWxsIHRoZSBzdGFuZC1hbG9uZSBZb2N0byBQcm9qZWN0IGNyb3NzLXRvb2xjaGFpbiB0YXJiYWxsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGltYWdlIHlvdSBhcmUgdXNpbmcsIHlvdSBuZWVkIHRvIGRvd25sb2FkIHRoZSBwcmUtYnVpbHQga2VybmVsCisgICAgICAgIHRoYXQgeW91IHdpbGwgYm9vdCBpbiB0aGUgUUVNVSBlbXVsYXRvciBhbmQgdGhlbiBkb3dubG9hZCBhbmQgZXh0cmFjdCB0aGUgdGFyZ2V0IHJvb3QKKyAgICAgICAgZmlsZXN5c3RlbSBmb3IgeW91ciB0YXJnZXQgbWFjaGluZeKAmXMgYXJjaGl0ZWN0dXJlLgorICAgICAgICBZb3UgY2FuIGdldCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmluYXJpZXMgYW5kIGZpbGUgc3lzdGVtcyBmcm9tCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz5tYWNoaW5lczwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGdldCBpbnN0YWxsYXRpb24gc2NyaXB0cyBmb3Igc3RhbmQtYWxvbmUgdG9vbGNoYWlucyBmcm9tCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19UT09MQ0hBSU5fRExfVVJMOyc+dG9vbGNoYWluczwvdWxpbms+LgorICAgICAgICBPbmNlIHlvdSBoYXZlIGFsbCB5b3VyIGZpbGVzLCB5b3Ugc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB0byBlbXVsYXRlIHRoZSBoYXJkd2FyZQorICAgICAgICBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIEZpbmFsbHksIHlvdSBzdGFydCB0aGUgUUVNVSBlbXVsYXRvci4KKyAgICAgICAgWW91IGNhbiBmaW5kIGRldGFpbHMgb24gYWxsIHRoZXNlIHN0ZXBzIGluIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN1c2luZy1wcmUtYnVpbHQnPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCB1c2luZyBRRU1VIHdpdGggdGhlIFlvY3RvIFByb2plY3QgaW4gdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2luZyBRRU1VIHRvIGVtdWxhdGUgeW91ciBoYXJkd2FyZSBjYW4gcmVzdWx0IGluIHNwZWVkIGlzc3VlcworICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhbmQgaG9zdCBhcmNoaXRlY3R1cmUgbWl4LgorICAgICAgICBGb3IgZXhhbXBsZSwgdXNpbmcgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gaW1hZ2UgaW4gdGhlIGVtdWxhdG9yCisgICAgICAgIG9uIGFuIEludGVsLWJhc2VkIDMyLWJpdCAoeDg2KSBob3N0IG1hY2hpbmUgaXMgZmFzdCBiZWNhdXNlIHRoZSB0YXJnZXQgYW5kCisgICAgICAgIGhvc3QgYXJjaGl0ZWN0dXJlcyBtYXRjaC4KKyAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+IGltYWdlIG9uIHRoZSBzYW1lIEludGVsLWJhc2VkCisgICAgICAgIGhvc3QgY2FuIGJlIHNsb3dlci4KKyAgICAgICAgQnV0LCB5b3Ugc3RpbGwgYWNoaWV2ZSBmYWl0aGZ1bCBlbXVsYXRpb24gb2YgQVJNLXNwZWNpZmljIGlzc3Vlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gc3BlZWQgdGhpbmdzIHVwLCB0aGUgUUVNVSBpbWFnZXMgc3VwcG9ydCB1c2luZyA8ZmlsZW5hbWU+ZGlzdGNjPC9maWxlbmFtZT4KKyAgICAgICAgdG8gY2FsbCBhIGNyb3NzLWNvbXBpbGVyIG91dHNpZGUgdGhlIGVtdWxhdGVkIHN5c3RlbS4KKyAgICAgICAgSWYgeW91IHVzZWQgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiB0byBzdGFydCBRRU1VLCBhbmQgdGhlCisgICAgICAgIDxmaWxlbmFtZT5kaXN0Y2NkPC9maWxlbmFtZT4gYXBwbGljYXRpb24gaXMgcHJlc2VudCBvbiB0aGUgaG9zdCBzeXN0ZW0sIGFueQorICAgICAgICBCaXRCYWtlIGNyb3NzLWNvbXBpbGluZyB0b29sY2hhaW4gYXZhaWxhYmxlIGZyb20gdGhlIGJ1aWxkIHN5c3RlbSBpcyBhdXRvbWF0aWNhbGx5CisgICAgICAgIHVzZWQgZnJvbSB3aXRoaW4gUUVNVSBzaW1wbHkgYnkgY2FsbGluZyA8ZmlsZW5hbWU+ZGlzdGNjPC9maWxlbmFtZT4uCisgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGRlZmluaW5nIHRoZSBjcm9zcy1jb21waWxlciB2YXJpYWJsZQorICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+ZXhwb3J0IENDPSJkaXN0Y2MiPC9maWxlbmFtZT4pLgorICAgICAgICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgYXJlIHVzaW5nIGEgc3VpdGFibGUgU0RLIGltYWdlIG9yIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBzdGFuZC1hbG9uZSB0b29sY2hhaW4gaXMgcHJlc2VudCwKKyAgICAgICAgdGhlIHRvb2xjaGFpbiBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgdXNlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgU2V2ZXJhbCBtZWNoYW5pc21zIGV4aXN0IHRoYXQgbGV0IHlvdSBjb25uZWN0IHRvIHRoZSBzeXN0ZW0gcnVubmluZyBvbiB0aGUKKyAgICAgICAgUUVNVSBlbXVsYXRvcjoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5RRU1VIHByb3ZpZGVzIGEgZnJhbWVidWZmZXIgaW50ZXJmYWNlIHRoYXQgbWFrZXMgc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBjb25zb2xlcyBhdmFpbGFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2VuZXJhbGx5LCBoZWFkbGVzcyBlbWJlZGRlZCBkZXZpY2VzIGhhdmUgYSBzZXJpYWwgcG9ydC4KKyAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiBjb25maWd1cmUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHJ1bm5pbmcgaW1hZ2UKKyAgICAgICAgICAgICAgICB0byB1c2UgdGhhdCBwb3J0IHRvIHJ1biBhIGNvbnNvbGUuCisgICAgICAgICAgICAgICAgVGhlIGNvbm5lY3Rpb24gdXNlcyBzdGFuZGFyZCBJUCBuZXR3b3JraW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFNTSCBzZXJ2ZXJzIGV4aXN0IGluIHNvbWUgUUVNVSBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBRRU1VIGltYWdlIGhhcyBhCisgICAgICAgICAgICAgICAgRHJvcGJlYXIgc2VjdXJlIHNoZWxsIChTU0gpIHNlcnZlciB0aGF0IHJ1bnMgd2l0aCB0aGUgcm9vdAorICAgICAgICAgICAgICAgIHBhc3N3b3JkIGRpc2FibGVkLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPiBRRU1VIGltYWdlcworICAgICAgICAgICAgICAgIGhhdmUgT3BlblNTSCBpbnN0ZWFkIG9mIERyb3BiZWFyLgorICAgICAgICAgICAgICAgIEluY2x1ZGluZyB0aGVzZSBTU0ggc2VydmVycyBhbGxvdyB5b3UgdG8gdXNlIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+c2NwPC9maWxlbmFtZT4gY29tbWFuZHMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBRRU1VIGltYWdlLAorICAgICAgICAgICAgICAgIGhvd2V2ZXIsIGNvbnRhaW5zIG5vIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiB1c2UgYSBwcm92aWRlZCwgdXNlci1zcGFjZSBORlMgc2VydmVyIHRvIGJvb3QgdGhlIFFFTVUgc2Vzc2lvbgorICAgICAgICAgICAgICAgIHVzaW5nIGEgbG9jYWwgY29weSBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBjb25uZWN0aW9uLCB5b3UgbXVzdCBleHRyYWN0IGEgcm9vdCBmaWxlc3lzdGVtIHRhcmJhbGwgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXUtZXh0cmFjdC1zZGs8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIHlvdSBtdXN0IHRoZW4gcG9pbnQgdGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzY3JpcHQgdG8gdGhlIGV4dHJhY3RlZCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBhIHJvb3QgZmlsZXN5c3RlbSBpbWFnZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4ZDNhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwueG1sCkBAIC0wLDAgKzEsMTI0IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0nZGV2LW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9kZXYtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5JbnRlbCBDb3Jwb3JhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5zY290dC5tLnJpZmVuYmFya0BpbnRlbC5jb208L2VtYWlsPgorICAgICAgICAgICAgPC9hdXRob3I+CisgICAgICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IE9jdG9iZXIgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlRoZSBpbml0aWFsIGRvY3VtZW50IHJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4zPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjU8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkKKyAgICAgICAgICBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorCisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsnPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1zdGFydC54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtbmV3YmllLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1tb2RlbC54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1xZW11LnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDBmZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2Rldi10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTMzNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2MWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2FjNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDEzMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjUxZDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDkxMDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2YzBiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTcwZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU5NjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM1ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy95cC1kb3dubG9hZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3MGJlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhYWQxNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOGRkNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1hZHZhbmNlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkYjg1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sCkBAIC0wLDAgKzEsMTA4OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1kZXYtYWR2YW5jZWQnPgorPHRpdGxlPldvcmtpbmcgd2l0aCBBZHZhbmNlZCBNZXRhZGF0YTwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LWFkdmFuY2VkLW92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMsIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IGtlcm5lbCB0b29scyBhbHNvIHN1cHBvcnQgcmljaAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiB0aGF0IHlvdSBjYW4KKyAgICAgICAgdXNlIHRvIGRlZmluZSBjb21wbGV4IHBvbGljaWVzIGFuZCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgc3VwcG9ydC4KKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhlIE1ldGFkYXRhIGFuZCB0aGUgdG9vbHMgdGhhdCBtYW5hZ2UgaXQsIGtub3duIGFzCisgICAgICAgIHRoZSBrZXJuLXRvb2xzICg8ZmlsZW5hbWU+a2Vybi10b29scy1uYXRpdmVfZ2l0LmJiPC9maWxlbmFtZT4pLCBpcworICAgICAgICB0byBoZWxwIHlvdSBtYW5hZ2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHNvdXJjZXMKKyAgICAgICAgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIEJTUHMgYW5kIExpbnV4IGtlcm5lbCB0eXBlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZy1rZXJuZWwtbWV0YWRhdGEtaW4tYS1yZWNpcGUnPgorICAgIDx0aXRsZT5Vc2luZyBLZXJuZWwgTWV0YWRhdGEgaW4gYSBSZWNpcGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBrZXJuZWwgc291cmNlcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBjb250YWluIGtlcm5lbCBNZXRhZGF0YSwgd2hpY2gKKyAgICAgICAgaXMgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2hlcyBvZiB0aGUga2VybmVsCisgICAgICAgIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICBUaGlzIE1ldGFkYXRhIGRlZmluZXMgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykgdGhhdAorICAgICAgICBjb3JyZXNwb25kIHRvIGRlZmluaXRpb25zIGluIGxpbnV4LXlvY3RvIHJlY2lwZXMgZm9yIHRoZSBzYW1lIEJTUHMuCisgICAgICAgIEEgQlNQIGNvbnNpc3RzIG9mIGFuIGFnZ3JlZ2F0aW9uIG9mIGtlcm5lbCBwb2xpY3kgYW5kIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgIGZlYXR1cmUgZW5hYmxlbWVudHMuCisgICAgICAgIFRoZSBCU1AgY2FuIGJlIGluZmx1ZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBMaW51eCBrZXJuZWwgc291cmNlIHRoYXQgY29udGFpbnMga2VybmVsIE1ldGFkYXRhIGlzIHNhaWQgdG8gYmUKKyAgICAgICAgICAgICJsaW51eC15b2N0byBzdHlsZSIga2VybmVsIHNvdXJjZS4KKyAgICAgICAgICAgIEEgTGludXgga2VybmVsIHJlY2lwZSB0aGF0IGluaGVyaXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8uaW5jPC9maWxlbmFtZT4gaW5jbHVkZSBmaWxlIGlzIHNhaWQgdG8gYmUgYQorICAgICAgICAgICAgImxpbnV4LXlvY3RvIHN0eWxlIiByZWNpcGUuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRXZlcnkgbGludXgteW9jdG8gc3R5bGUgcmVjaXBlIG11c3QgZGVmaW5lIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdHlwaWNhbGx5IHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgdXNlZCBieQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgSG93ZXZlciwgaW4gc29tZSBjYXNlcywgdGhlIHZhcmlhYmxlIG1pZ2h0IGluc3RlYWQgcmVmZXIgdG8gdGhlCisgICAgICAgIHVuZGVybHlpbmcgcGxhdGZvcm0gb2YgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE11bHRpcGxlIEJTUHMgY2FuIHJldXNlIHRoZSBzYW1lIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgIG5hbWUgaWYgdGhleSBhcmUgYnVpbHQgdXNpbmcgdGhlIHNhbWUgQlNQIGRlc2NyaXB0aW9uLgorICAgICAgICBUaGUgImVwMTA4LXp5bnFtcCIgYW5kICJxZW11enlucW1wIiBCU1AgY29tYmluYXRpb24KKyAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLXhpbGlueDwvZmlsZW5hbWU+CisgICAgICAgIGxheWVyIGlzIGEgZ29vZCBleGFtcGxlIG9mIHR3byBCU1BzIHVzaW5nIHRoZSBzYW1lCisgICAgICAgIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IHZhbHVlIChpLmUuICJ6eW5xbXAiKS4KKyAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSdic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC9saW5rPiBzZWN0aW9uCisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBFdmVyeSBsaW51eC15b2N0byBzdHlsZSByZWNpcGUgbXVzdCBhbHNvIGluZGljYXRlIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlIHJlcG9zaXRvcnkgYnJhbmNoIHVzZWQgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIGJyYW5jaC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiB2YWx1ZSB0byBkZWZpbmUgYW4KKyAgICAgICAgICAgIGFsdGVybmF0ZSBicmFuY2ggdHlwaWNhbGx5IHdpdGggYSBtYWNoaW5lIG92ZXJyaWRlIGFzIHNob3duIGhlcmUKKyAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5tZXRhLWVtZW5sb3c8L2ZpbGVuYW1lPiBsYXllcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSF9lbWVubG93LW5vZW1nZCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBsaW51eC15b2N0byBzdHlsZSByZWNpcGVzIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0aGUgZm9sbG93aW5nCisgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz5LRVJORUxfRkVBVFVSRVM8L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPkxJTlVYX0tFUk5FTF9UWVBFPC91bGluaz4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiBkZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZQorICAgICAgICB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LAorICAgICAgICBpdCBkZWZhdWx0cyB0byAic3RhbmRhcmQiLgorICAgICAgICBUb2dldGhlciB3aXRoCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gZGVmaW5lcyB0aGUgc2VhcmNoCisgICAgICAgIGFyZ3VtZW50cyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG9vbHMgdG8gZmluZCB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgZGVzY3JpcHRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgd2l0aCB3aGljaCB0bworICAgICAgICBidWlsZCBvdXQgdGhlIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsIGFuZCAicHJlZW1wdC1ydCIKKyAgICAgICAga2VybmVsIHR5cGVzLgorICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdrZXJuZWwtdHlwZXMnPktlcm5lbCBUeXBlczwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIHR5cGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUga2Vybi10b29scyBzZWFyY2ggZm9yIHRoZSBCU1AgZGVzY3JpcHRpb24KKyAgICAgICAgZmlsZSB0aGF0IG1vc3QgY2xvc2VseSBtYXRjaGVzIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gdmFyaWFibGVzIHBhc3NlZCBpbiBmcm9tIHRoZQorICAgICAgICByZWNpcGUuCisgICAgICAgIFRoZSB0b29scyB1c2UgdGhlIGZpcnN0IEJTUCBkZXNjcmlwdGlvbiBpdCBmaW5kcyB0aGF0IG1hdGNoCisgICAgICAgIGJvdGggdmFyaWFibGVzLgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBtYXRjaCwgdGhleSBpc3N1ZSBhIHdhcm5pbmcgc3VjaCBhcworICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdBUk5JTkc6IENhbid0IGZpbmQgYW55IEJTUCBoYXJkd2FyZSBvciByZXF1aXJlZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgV0FSTklORzogTG9va2VkIGF0IG1ldGEvY2ZnL2Jyb2tlbi9lbWVubG93LWJyb2tlbi9oZHdfZnJhZ3MudHh0IGFuZAorICAgICAgICAgICAgICBtZXRhL2NmZy9icm9rZW4vZW1lbmxvdy1icm9rZW4vcmVxdWlyZWRfZnJhZ3MudHh0IGluIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgbWV0YS9jZmcvYnJva2VuL2VtZW5sb3ctYnJva2VuCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiB3YXMgc2V0IHRvICJlbWVubG93LWJyb2tlbiIKKyAgICAgICAgYW5kIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHdhcyBzZXQgdG8gImJyb2tlbiIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSB0b29scyBmaXJzdCBzZWFyY2ggZm9yIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgdGhlbiBmb3IgdGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBwYXJ0aWFsIG1hdGNoLCB0aGV5IHdpbGwgdXNlIHRoZQorICAgICAgICBzb3VyY2VzIGZyb20gdGhlIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gYW5kIGFueSBjb25maWd1cmF0aW9uCisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICB0byBpbmNsdWRlIGZlYXR1cmVzIChjb25maWd1cmF0aW9uIGZyYWdtZW50cywgcGF0Y2hlcywgb3IgYm90aCkgdGhhdAorICAgICAgICBhcmUgbm90IGFscmVhZHkgaW5jbHVkZWQgYnkgdGhlIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBjb21iaW5hdGlvbi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBmZWF0dXJlIHNwZWNpZmllZCBhcworICAgICAgICAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiLAorICAgICAgICBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFUyArPSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgVG8gaW5jbHVkZSBhIGZlYXR1cmUgY2FsbGVkICJjZmcvc291bmQuc2NjIiBqdXN0IGZvciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiBtYWNoaW5lLCBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4NiA9ICIgY2ZnL3NvdW5kLnNjYyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIGVudHJpZXMgaW4gPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+CisgICAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgaXRzZWxmLgorICAgICAgICBUaGUgZXhhbXBsZXMgaGVyZSBhcmUgdGFrZW4gZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPgorICAgICAgICBicmFuY2ggb2YgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgV2l0aGluIHRoYXQgYnJhbmNoLCAiZmVhdHVyZXMiIGFuZCAiY2ZnIiBhcmUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdrZXJuZWwtbWV0YWRhdGEtc3ludGF4Jz5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgdGhlc2UgdmFyaWFibGVzIGhhcyBldm9sdmVkIHNvbWUgYmV0d2VlbiB0aGUKKwkgICAgICAgIDAuOSBhbmQgMS4zIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBhc3NvY2lhdGVkCisJICAgICAgICBrZXJuLXRvb2xzIHNvdXJjZXMuCisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb25zIGluIHRoaXMgc2VjdGlvbiBhcmUgYWNjdXJhdGUgZm9yIDEuMyBhbmQgbGF0ZXIKKwkgICAgICAgIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0na2VybmVsLW1ldGFkYXRhLWxvY2F0aW9uJz4KKyAgICA8dGl0bGU+S2VybmVsIE1ldGFkYXRhIExvY2F0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBLZXJuZWwgTWV0YWRhdGEgY2FuIGJlIGRlZmluZWQgaW4gZWl0aGVyIHRoZSBrZXJuZWwgcmVjaXBlCisgICAgICAgIChyZWNpcGUtc3BhY2UpIG9yIGluIHRoZSBrZXJuZWwgdHJlZSAoaW4tdHJlZSkuCisgICAgICAgIFdoZXJlIHlvdSBjaG9vc2UgdG8gZGVmaW5lIHRoZSBNZXRhZGF0YSBkZXBlbmRzIG9uIHdoYXQgeW91IHdhbnQKKyAgICAgICAgdG8gZG8gYW5kIGhvdyB5b3UgaW50ZW5kIHRvIHdvcmsuCisgICAgICAgIFJlZ2FyZGxlc3Mgb2Ygd2hlcmUgeW91IGRlZmluZSB0aGUga2VybmVsIE1ldGFkYXRhLCB0aGUgc3ludGF4IHVzZWQKKyAgICAgICAgYXBwbGllcyBlcXVhbGx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgYXJlIHVuZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBvbmx5IHdpc2gKKyAgICAgICAgdG8gYXBwbHkgYSBjb25maWd1cmF0aW9uIGFuZCBwb3NzaWJseSBhIGNvdXBsZSBvZiBwYXRjaGVzIHByb3ZpZGVkIHRvCisgICAgICAgIHlvdSBieSBvdGhlcnMsIHRoZSByZWNpcGUtc3BhY2UgbWV0aG9kIGlzIHJlY29tbWVuZGVkLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBhbHNvIGEgZ29vZCBhcHByb2FjaCBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlcyB5b3UgZG8gbm90IGNvbnRyb2wgb3IgaWYgeW91IGp1c3QgZG8gbm90IHdhbnQgdG8gbWFpbnRhaW4gYQorICAgICAgICBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb24geW91ciBvd24uCisgICAgICAgIEZvciBwYXJ0aWFsIGluZm9ybWF0aW9uIG9uIGhvdyB5b3UgY2FuIGRlZmluZSBrZXJuZWwgTWV0YWRhdGEgaW4KKyAgICAgICAgdGhlIHJlY2lwZS1zcGFjZSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbnZlcnNlbHksIGlmIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBhIGtlcm5lbCBhbmQgYXJlIGFscmVhZHkKKyAgICAgICAgbWFpbnRhaW5pbmcgYSBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb2YgeW91ciBvd24sIHlvdSBtaWdodCBmaW5kCisgICAgICAgIGl0IG1vcmUgY29udmVuaWVudCB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBNZXRhZGF0YSBpbiB0aGUgc2FtZQorICAgICAgICByZXBvc2l0b3J5IGFzIHRoZSBMaW51eCBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgVGhpcyBtZXRob2QgY2FuIG1ha2UgaXRlcmF0aXZlIGRldmVsb3BtZW50IG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgbW9yZSBlZmZpY2llbnQgb3V0c2lkZSBvZiB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVjaXBlLXNwYWNlLW1ldGFkYXRhJz4KKyAgICAgICAgPHRpdGxlPlJlY2lwZS1TcGFjZSBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHN0b3JlZCBpbiByZWNpcGUtc3BhY2UsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIGEKKyAgICAgICAgICAgIGRpcmVjdG9yeSBoaWVyYXJjaHkgYmVsb3cKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgRm9yIGEgbGludXgteW9jdG8gcmVjaXBlIG9yIGZvciBhIExpbnV4IGtlcm5lbCByZWNpcGUgZGVyaXZlZAorICAgICAgICAgICAgYnkgY29weWluZyBhbmQgbW9kaWZ5aW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtY29yZS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICB0byBhIHJlY2lwZSBpbiB5b3VyIGxheWVyLCA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHR5cGljYWxseSBzZXQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIHRyaXZpYWwgdHJlZSBvZiBrZXJuZWwgTWV0YWRhdGEKKyAgICAgICAgICAgIHN0b3JlZCBpbiByZWNpcGUtc3BhY2Ugd2l0aGluIGEgQlNQIGxheWVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5teV9ic3BfbGF5ZXI8L3JlcGxhY2VhYmxlPi8KKyAgICAgYC0tIHJlY2lwZXMta2VybmVsCisgICAgICAgICBgLS0gbGludXgKKyAgICAgICAgICAgICBgLS0gbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICAgICAgfC0tIGJzcC5jZmcKKyAgICAgICAgICAgICAgICAgYC0tIHN0YW5kYXJkLmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHRoZSBNZXRhZGF0YSBpcyBzdG9yZWQgaW4gcmVjaXBlLXNwYWNlLCB5b3UgbXVzdCB0YWtlCisgICAgICAgICAgICBzdGVwcyB0byBlbnN1cmUgQml0QmFrZSBoYXMgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBkZWNpZGUKKyAgICAgICAgICAgIHdoYXQgZmlsZXMgdG8gZmV0Y2ggYW5kIHdoZW4gdGhleSBuZWVkIHRvIGJlIGZldGNoZWQgYWdhaW4uCisgICAgICAgICAgICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcyBvbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyB0aGVtIGFuZCBmZXRjaGVzIGFueSBmaWxlcyByZWZlcmVuY2VkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyBieSB0aGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kcy4KKyAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGJ1bXAgdGhlIHJlY2lwZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YWx1ZSB3aGVuIGNoYW5naW5nIHRoZSBjb250ZW50IG9mIGZpbGVzIG5vdCBleHBsaWNpdGx5IGxpc3RlZAorICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0naW4tdHJlZS1tZXRhZGF0YSc+CisgICAgICAgIDx0aXRsZT5Jbi1UcmVlIE1ldGFkYXRhPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gc3RvcmVkIGluLXRyZWUsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNhbiBiZSBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgc2FtZSByZXBvc2l0b3J5IGJyYW5jaCBhcyB0aGUgc291cmNlcywKKyAgICAgICAgICAgIHN1Y2ggYXMgIm1hc3RlciIsIG9yIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gY2FuIGJlIGl0cyBvd24KKyAgICAgICAgICAgIG9ycGhhbiBicmFuY2guCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBbiBvcnBoYW4gYnJhbmNoIGluIEdpdCBpcyBhIGJyYW5jaCB3aXRoIHVuaXF1ZSBoaXN0b3J5IGFuZAorICAgICAgICAgICAgICAgIGNvbnRlbnQgdG8gdGhlIG90aGVyIGJyYW5jaGVzIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIE9ycGhhbiBicmFuY2hlcyBhcmUgdXNlZnVsIHRvIHRyYWNrIE1ldGFkYXRhIGNoYW5nZXMKKyAgICAgICAgICAgICAgICBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHNvdXJjZXMgb2YgdGhlIExpbnV4IGtlcm5lbCwgd2hpbGUKKyAgICAgICAgICAgICAgICBzdGlsbCBrZWVwaW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHNhbWUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkb2N1bWVudCwgd2Ugd2lsbCBkaXNjdXNzIGFsbAorICAgICAgICAgICAgaW4tdHJlZSBNZXRhZGF0YSBhcyByZXNpZGluZyBiZWxvdyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IGEgdHJpdmlhbCB0cmVlIG9mIE1ldGFkYXRhCisgICAgICAgICAgICBpcyBzdG9yZWQgaW4gYSBjdXN0b20gTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLworICAgICBgLS0gY2ZnCisgICAgICAgICBgLS0ga2VybmVsLWNhY2hlCisgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICB8LS0gYnNwLmNmZworICAgICAgICAgICAgIGAtLSBzdGFuZGFyZC5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gdXNlIGEgYnJhbmNoIGRpZmZlcmVudCBmcm9tIHdoZXJlIHRoZSBzb3VyY2VzIHJlc2lkZSwKKyAgICAgICAgICAgIHNwZWNpZnkgdGhlIGJyYW5jaCBpbiB0aGUgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGluIHlvdXIgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS01FVEEgPSAibWV0YSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHVzZSB0aGUgc2FtZSBicmFuY2ggYXMgdGhlIHNvdXJjZXMsIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdG8gYW4gZW1wdHkgc3RyaW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLTUVUQSA9ICIiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCB5b3VyIG93biBzb3VyY2VzIGFuZCB3YW50IHRvIGNyZWF0ZSBhbgorICAgICAgICAgICAgb3JwaGFuIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB1c2UgdGhlc2UgY29tbWFuZHMKKyAgICAgICAgICAgIGZyb20gd2l0aGluIHlvdXIgTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCAtLW9ycGhhbiBtZXRhCisgICAgICQgZ2l0IHJtIC1yZiAuCisgICAgICQgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJDcmVhdGUgb3JwaGFuIG1ldGEgYnJhbmNoIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgbW9kaWZ5IHRoZSBNZXRhZGF0YSBpbiB0aGUgbGludXgteW9jdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB5b3UgbXVzdCBub3QgZm9yZ2V0IHRvIHVwZGF0ZQorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgc3RhdGVtZW50cyBpbiB0aGUga2VybmVsJ3MgcmVjaXBlLgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91IG5lZWQgdG8gdXBkYXRlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVl9tZXRhPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gbWF0Y2ggdGhlIGNvbW1pdCBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5LTUVUQTwvZmlsZW5hbWU+IGJyYW5jaCB5b3Ugd2lzaCB0byB1c2UuCisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgZGF0YSBpbiB0aGVzZSBicmFuY2hlcyBhbmQgbm90IHVwZGF0aW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHN0YXRlbWVudHMgdG8gbWF0Y2ggd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgICAgIGJ1aWxkIHRvIGZldGNoIGFuIG9sZGVyIGNvbW1pdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2tlcm5lbC1tZXRhZGF0YS1zeW50YXgnPgorICAgIDx0aXRsZT5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUga2VybmVsIE1ldGFkYXRhIGNvbnNpc3RzIG9mIHRocmVlIHByaW1hcnkgdHlwZXMgb2YgZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPgorICAgICAgICA8Zm9vdG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NjPC9maWxlbmFtZT4gc3RhbmRzIGZvciBTZXJpZXMgQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIENvbnRyb2wsIGJ1dCB0aGUgbmFtaW5nIGhhcyBsZXNzIHNpZ25pZmljYW5jZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSB0b29saW5nIHRoYW4gaXQgaGFkIGluIHRoZQorICAgICAgICAgICAgICAgIHBhc3QuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIHRvIGJlIGRlc2NyaXB0aW9uIGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Zvb3Rub3RlPgorICAgICAgICBkZXNjcmlwdGlvbiBmaWxlcywgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIGFuZCBwYXRjaGVzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIGRlZmluZSB2YXJpYWJsZXMgYW5kIGluY2x1ZGUgb3IKKyAgICAgICAgb3RoZXJ3aXNlIHJlZmVyZW5jZSBhbnkgb2YgdGhlIHRocmVlIGZpbGUgdHlwZXMuCisgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYWxsIHR5cGVzIG9mIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBpbnRvCisgICAgICAgIHdoYXQgdWx0aW1hdGVseSBkZXNjcmliZXMgdGhlIHNvdXJjZXMgYW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkCisgICAgICAgIHRvIGJ1aWxkIGEgTGludXgga2VybmVsIHRhaWxvcmVkIHRvIGEgc3BlY2lmaWMgbWFjaGluZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBkZWZpbmUgdHdvCisgICAgICAgIGZ1bmRhbWVudGFsIHR5cGVzIG9mIGtlcm5lbCBNZXRhZGF0YToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWF0dXJlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGZWF0dXJlcyBhZ2dyZWdhdGUgc291cmNlcyBpbiB0aGUgZm9ybSBvZiBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgIGZyYWdtZW50cyBpbnRvIGEgbW9kdWxhciByZXVzYWJsZSB1bml0LgorICAgICAgICBZb3UgY2FuIHVzZSBmZWF0dXJlcyB0byBpbXBsZW1lbnQgY29uY2VwdHVhbGx5IHNlcGFyYXRlIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBkZXNjcmlwdGlvbnMgc3VjaCBhcyBwdXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLAorICAgICAgICBzaW1wbGUgcGF0Y2hlcywgY29tcGxleCBmZWF0dXJlcywgYW5kIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgdHlwZXM8L2xpbms+IGRlZmluZSBnZW5lcmFsCisgICAgICAgIGtlcm5lbCBmZWF0dXJlcyBhbmQgcG9saWN5IHRvIGJlIHJldXNlZCBpbiB0aGUgQlNQcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQlNQcyBkZWZpbmUgaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgYW5kIGFnZ3JlZ2F0ZSB0aGVtIHdpdGgga2VybmVsCisgICAgICAgIHR5cGVzIHRvIGZvcm0gdGhlIGZpbmFsIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2lsbCBiZSBhc3NlbWJsZWQgYW5kIGJ1aWx0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSB0aGUga2VybmVsIE1ldGFkYXRhIHN5bnRheCBkb2VzIG5vdCBlbmZvcmNlIGFueSBsb2dpY2FsCisgICAgICAgIHNlcGFyYXRpb24gb2YgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGZlYXR1cmVzIG9yIGtlcm5lbAorICAgICAgICB0eXBlcywgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSBhIGxvZ2ljYWwgc2VwYXJhdGlvbiBvZiB0aGVzZSB0eXBlcworICAgICAgICBvZiBNZXRhZGF0YS4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBNZXRhZGF0YSBmaWxlIGhpZXJhcmNoeSBpcyByZWNvbW1lbmRlZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+YmFzZTwvcmVwbGFjZWFibGU+LworICAgICAgICBic3AvCisgICAgICAgIGNmZy8KKyAgICAgICAgZmVhdHVyZXMvCisgICAgICAgIGt0eXBlcy8KKyAgICAgICAgcGF0Y2hlcy8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJzcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIGRlc2NyaXB0aW9uczwvbGluaz4uCisgICAgICAgIFRoZSByZW1haW5pbmcgZGlyZWN0b3JpZXMgYWxsIGNvbnRhaW4gImZlYXR1cmVzIi4KKyAgICAgICAgU2VwYXJhdGluZyA8ZmlsZW5hbWU+YnNwPC9maWxlbmFtZT4gZnJvbSB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIGFpZHMgY29uY2VwdHVhbGl6aW5nIGludGVuZGVkIHVzYWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2UgdGhlc2UgZ3VpZGVsaW5lcyB0byBoZWxwIHBsYWNlIHlvdXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+CisgICAgICAgIGRlc2NyaXB0aW9uIGZpbGVzIHdpdGhpbiB0aGUgc3RydWN0dXJlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdXIgZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgIG9ubHkgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBsYWNlIHRoZSBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgb25seSBzb3VyY2UtY29kZSBmaXhlcywgcGxhY2UgdGhlIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGVuY2Fwc3VsYXRlcworICAgICAgICAgICAgICAgIGEgbWFqb3IgZmVhdHVyZSwgb2Z0ZW4gY29tYmluaW5nIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb25zLAorICAgICAgICAgICAgICAgIHBsYWNlIHRoZSBmaWxlIGluIDxmaWxlbmFtZT5mZWF0dXJlczwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3VyIGZpbGUgYWdncmVnYXRlcworICAgICAgICAgICAgICAgIG5vbi1oYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCBwYXRjaGVzIGluIG9yZGVyIHRvIGRlZmluZSBhCisgICAgICAgICAgICAgICAgYmFzZSBrZXJuZWwgcG9saWN5IG9yIG1ham9yIGtlcm5lbCB0eXBlIHRvIGJlIHJldXNlZCBhY3Jvc3MKKyAgICAgICAgICAgICAgICBtdWx0aXBsZSBCU1BzLCBwbGFjZSB0aGUgZmlsZSBpbiA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGVzZSBkaXN0aW5jdGlvbnMgY2FuIGVhc2lseSBiZWNvbWUgYmx1cnJlZCAtIGVzcGVjaWFsbHkgYXMKKyAgICAgICAgb3V0LW9mLXRyZWUgZmVhdHVyZXMgc2xvd2x5IG1lcmdlIHVwc3RyZWFtIG92ZXIgdGltZS4KKyAgICAgICAgQWxzbywgcmVtZW1iZXIgdGhhdCBob3cgdGhlIGRlc2NyaXB0aW9uIGZpbGVzIGFyZSBwbGFjZWQgaXMKKyAgICAgICAgYSBwdXJlbHkgbG9naWNhbCBvcmdhbml6YXRpb24gYW5kIGhhcyBubyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgb2YgdGhlIGtlcm5lbCBNZXRhZGF0YS4KKyAgICAgICAgVGhlcmUgaXMgbm8gaW1wYWN0IGJlY2F1c2UgYWxsIG9mIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPmZlYXR1cmVzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5wYXRjaGVzPC9maWxlbmFtZT4sIGFuZAorICAgICAgICA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4sIGNvbnRhaW4gImZlYXR1cmVzIiBhcyBmYXIgYXMgdGhlIGtlcm5lbAorICAgICAgICB0b29scyBhcmUgY29uY2VybmVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBQYXRocyB1c2VkIGluIGtlcm5lbCBNZXRhZGF0YSBmaWxlcyBhcmUgcmVsYXRpdmUgdG8KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtiYXNlJmd0OzwvZmlsZW5hbWU+LCB3aGljaCBpcyBlaXRoZXIKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgaWYgeW91IGFyZSBjcmVhdGluZyBNZXRhZGF0YSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWNpcGUtc3BhY2UtbWV0YWRhdGEnPnJlY2lwZS1zcGFjZTwvbGluaz4sCisgICAgICAgIG9yIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGUvPC9maWxlbmFtZT4gaWYgeW91IGFyZSBjcmVhdGluZworICAgICAgICBNZXRhZGF0YSA8bGluayBsaW5rZW5kPSdpbi10cmVlLW1ldGFkYXRhJz5pbi10cmVlPC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaW1wbGVzdCB1bml0IG9mIGtlcm5lbCBNZXRhZGF0YSBpcyB0aGUgY29uZmlndXJhdGlvbi1vbmx5CisgICAgICAgICAgICBmZWF0dXJlLgorICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBwYXJhbWV0ZXJzIGluIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPikgYW5kIGEgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICB0aGF0IGRlc2NyaWJlcyB0aGUgZnJhZ21lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZyAoU01QKSBmcmFnbWVudCBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZpbGVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjZmcvc21wLnNjYzoKKyAgICAgICAgZGVmaW5lIEtGRUFUVVJFX0RFU0NSSVBUSU9OICJFbmFibGUgU01QIgorICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSBhbGwKKworICAgICAgICBrY29uZiBoYXJkd2FyZSBzbXAuY2ZnCisKKyAgICAgY2ZnL3NtcC5jZmc6CisgICAgICAgIENPTkZJR19TTVA9eQorICAgICAgICBDT05GSUdfU0NIRURfU01UPXkKKyAgICAgICAgIyBJbmNyZWFzZSBkZWZhdWx0IE5SX0NQVVMgZnJvbSA4IHRvIDY0IHNvIHRoYXQgcGxhdGZvcm0gd2l0aAorICAgICAgICAjIG1vcmUgdGhhbiA4IHByb2Nlc3NvcnMgY2FuIGJlIGFsbCBhY3RpdmF0ZWQgYXQgYm9vdCB0aW1lCisgICAgICAgIENPTkZJR19OUl9DUFVTPTY0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1jb25maWctZnJhZ21lbnRzJz5DcmVhdGluZyBDb25maWd1cmF0aW9uIEZyYWdtZW50czwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgYW5kIGluCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtGRUFUVVJFX0RFU0NSSVBUSU9OJz48ZmlsZW5hbWU+S0ZFQVRVUkVfREVTQ1JJUFRJT048L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBwcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgIEhpZ2hlciBsZXZlbCBrZXJuZWwgdG9vbHMgdXNlIHRoaXMgZGVzY3JpcHRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHVzZWQgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIGFjdHVhbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGluIGFuIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUsIGFuZCB0aGUgImhhcmR3YXJlIiBrZXl3b3JkIGlkZW50aWZpZXMgdGhlIGZyYWdtZW50IGFzCisgICAgICAgICAgICBiZWluZyBoYXJkd2FyZSBlbmFibGluZywgYXMgb3Bwb3NlZCB0byBnZW5lcmFsIHBvbGljeSwKKyAgICAgICAgICAgIHdoaWNoIHdvdWxkIHVzZSB0aGUgIm5vbi1oYXJkd2FyZSIga2V5d29yZC4KKyAgICAgICAgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyBtYWRlIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgdmFsaWRhdGlvbiB0b29scywgd2hpY2ggd2FybiB5b3UgaWYgYSBoYXJkd2FyZSBmcmFnbWVudAorICAgICAgICAgICAgb3ZlcnJpZGVzIGEgcG9saWN5IHNldCBieSBhIG5vbi1oYXJkd2FyZSBmcmFnbWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlIGNhbiBpbmNsdWRlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gc3RhdGVtZW50cywgb25lIHBlciBmcmFnbWVudC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24sIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kIHRvIGF1ZGl0IHlvdXIKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdwYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPlBhdGNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGF0Y2ggZGVzY3JpcHRpb25zIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgZGVzY3JpcHRpb25zLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgaW5zdGVhZCBvZiBhIDxmaWxlbmFtZT4uY2ZnPC9maWxlbmFtZT4gZmlsZSwgdGhlc2UKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyB3b3JrIHdpdGggc291cmNlIHBhdGNoZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgdHlwaWNhbCBwYXRjaCBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIGZpbGUgYW5kIHRoZSBwYXRjaCBpdHNlbGY6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBhdGNoZXMvbXlwYXRjaC5zY2M6CisgICAgICAgIHBhdGNoIG15cGF0Y2gucGF0Y2gKKworICAgICBwYXRjaGVzL215cGF0Y2gucGF0Y2g6CisgICAgICAgIDxyZXBsYWNlYWJsZT50eXBpY2FsLXBhdGNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHRoZSB0eXBpY2FsIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSB1c2luZyA8ZmlsZW5hbWU+ZGlmZiAtTnVycDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gZmlsZSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBwYXRjaCBzdGF0ZW1lbnRzLAorICAgICAgICAgICAgb25lIHBlciBwYXRjaC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdmZWF0dXJlcyc+CisgICAgICAgIDx0aXRsZT5GZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZWF0dXJlcyBhcmUgY29tcGxleCBrZXJuZWwgTWV0YWRhdGEgdHlwZXMgdGhhdCBjb25zaXN0CisgICAgICAgICAgICBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cyAoPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4pLCBwYXRjaGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4pLCBhbmQgcG9zc2libHkgb3RoZXIgZmVhdHVyZQorICAgICAgICAgICAgZGVzY3JpcHRpb24gZmlsZXMgKDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIGZlYXR1cmUgZGVzY3JpcHRpb24gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmVhdHVyZXMvbXlmZWF0dXJlLnNjYworICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBteWZlYXR1cmUiCisKKyAgICAgICAgcGF0Y2ggMDAwMS1teWZlYXR1cmUtY29yZS5wYXRjaAorICAgICAgICBwYXRjaCAwMDAyLW15ZmVhdHVyZS1pbnRlcmZhY2UucGF0Y2gKKworICAgICAgICBpbmNsdWRlIGNmZy9teWZlYXR1cmVfZGVwZW5kZW5jeS5zY2MKKyAgICAgICAga2NvbmYgbm9uLWhhcmR3YXJlIG15ZmVhdHVyZS5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdGhlIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gY29tbWFuZHMgYXJlIHVzZWQgYXMgd2VsbCBhcworICAgICAgICAgICAgaG93IGFuIGFkZGl0aW9uYWwgZmVhdHVyZSBkZXNjcmlwdGlvbiBmaWxlIGlzIGluY2x1ZGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUeXBpY2FsbHksIGZlYXR1cmVzIGFyZSBsZXNzIGdyYW51bGFyIHRoYW4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZnJhZ21lbnRzIGFuZCBhcmUgbW9yZSBsaWtlbHkgdGhhbiBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgYW5kIHBhdGNoZXMgdG8gYmUgdGhlIHR5cGVzIG9mIHRoaW5ncyB5b3Ugd2FudCB0byBzcGVjaWZ5CisgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG9mIHRoZQorICAgICAgICAgICAgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGUgbWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC10eXBlcyc+CisgICAgICAgIDx0aXRsZT5LZXJuZWwgVHlwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBrZXJuZWwgdHlwZSBkZWZpbmVzIGEgaGlnaC1sZXZlbCBrZXJuZWwgcG9saWN5IGJ5CisgICAgICAgICAgICBhZ2dyZWdhdGluZyBub24taGFyZHdhcmUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgd2l0aAorICAgICAgICAgICAgcGF0Y2hlcyB5b3Ugd2FudCB0byB1c2Ugd2hlbiBidWlsZGluZyBhIExpbnV4IGtlcm5lbHMgb2YgYQorICAgICAgICAgICAgc3BlY2lmaWMgdHlwZS4KKyAgICAgICAgICAgIFN5bnRhY3RpY2FsbHksIGtlcm5lbCB0eXBlcyBhcmUgbm8gZGlmZmVyZW50IHRoYW4gZmVhdHVyZXMKKyAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgIjxsaW5rIGxpbmtlbmQ9J2ZlYXR1cmVzJz5GZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZSBrZXJuZWwKKyAgICAgICAgICAgIHJlY2lwZSBzZWxlY3RzIHRoZSBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0cmVlIGRlZmluZXMgdGhyZWUga2VybmVsIHR5cGVzOiAic3RhbmRhcmQiLAorICAgICAgICAgICAgInRpbnkiLCBhbmQgInByZWVtcHQtcnQiOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InN0YW5kYXJkIjoKKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgdGhlIGdlbmVyaWMgTGludXgga2VybmVsIHBvbGljeSBvZiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBsaW51eC15b2N0byBrZXJuZWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwb2xpY3kgaW5jbHVkZXMsIGFtb25nIG90aGVyIHRoaW5ncywgd2hpY2ggZmlsZQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBuZXR3b3JraW5nIG9wdGlvbnMsIGNvcmUga2VybmVsIGZlYXR1cmVzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGFuZCB0cmFjaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiJwcmVlbXB0LXJ0IjoKKyAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0aGUgPGZpbGVuYW1lPlBSRUVNUFRfUlQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGEgcmVhbC10aW1lIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgdHlwZSBpbmhlcml0cyBmcm9tIHRoZSAic3RhbmRhcmQiIGtlcm5lbCB0eXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InRpbnkiOgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgYmFyZSBtaW5pbXVtIGNvbmZpZ3VyYXRpb24gbWVhbnQgdG8gc2VydmUgYXMgYQorICAgICAgICAgICAgICAgICAgICBiYXNlIGZvciB2ZXJ5IHNtYWxsIExpbnV4IGtlcm5lbHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAidGlueSIga2VybmVsIHR5cGUgaXMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgInRpbnkiIGtlcm5lbCB0eXBlIGRvZXMgbm90IGN1cnJlbnRseSBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIGFueSBzb3VyY2UgY2hhbmdlcywgaXQgbWlnaHQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIga2VybmVsIHR5cGUgaXMgZGVmaW5lZCBieQorICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEluY2x1ZGUgdGhpcyBrZXJuZWwgdHlwZSBmcmFnbWVudCB0byBnZXQgdGhlIHN0YW5kYXJkIGZlYXR1cmVzIGFuZAorICAgICAjIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgorCisgICAgICMgSW5jbHVkZSBhbGwgc3RhbmRhcmQgZmVhdHVyZXMKKyAgICAgaW5jbHVkZSBzdGFuZGFyZC1ub2NmZy5zY2MKKworICAgICBrY29uZiBub24taGFyZHdhcmUgc3RhbmRhcmQuY2ZnCisKKyAgICAgIyBpbmRpdmlkdWFsIGNmZyBibG9jayBzZWN0aW9uCisgICAgIGluY2x1ZGUgY2ZnL2ZzL2RldnRtcGZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9kZWJ1Z2ZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9idHJmcy5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0Mi5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0My5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0NC5zY2MKKworICAgICBpbmNsdWRlIGNmZy9uZXQvaXB2Ni5zY2MKKyAgICAgaW5jbHVkZSBjZmcvbmV0L2lwX25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvaXA2X25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvYnJpZGdlLnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIGFueSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIGEKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlIGRlZmluaXRpb24gY2FuIGFnZ3JlZ2F0ZSBvdGhlcgorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyB3aXRoCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGNvbW1hbmRzLgorICAgICAgICAgICAgVGhlc2UgZGVmaW5pdGlvbnMgY2FuIGFsc28gZGlyZWN0bHkgcHVsbCBpbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMgd2l0aCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5rY29uZjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZHMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgSXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBrZXJuZWwgdHlwZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBmaWxlIGNhbiBpbXBsaWNpdGx5IGRlZmluZQorICAgICAgICAgICAgdGhlIGtlcm5lbCB0eXBlIHVzaW5nIGEgPGZpbGVuYW1lPmRlZmluZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz5LVFlQRTwvdWxpbms+IG15a3R5cGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdic3AtZGVzY3JpcHRpb25zJz4KKyAgICAgICAgPHRpdGxlPkJTUCBEZXNjcmlwdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQlNQIGRlc2NyaXB0aW9ucyBjb21iaW5lIGtlcm5lbCB0eXBlcyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgICAgICBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZSBoYXJkd2FyZS1zcGVjaWZpYyBwb3J0aW9uIGlzIHR5cGljYWxseSBkZWZpbmVkCisgICAgICAgICAgICBpbmRlcGVuZGVudGx5LCBhbmQgdGhlbiBhZ2dyZWdhdGVkIHdpdGggZWFjaCBzdXBwb3J0ZWQga2VybmVsCisgICAgICAgICAgICB0eXBlLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgQlNQIGRlc2NyaXB0aW9uIHRoYXQgc3VwcG9ydHMgdGhlCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPiBtYWNoaW5lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPgorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBrY29uZiA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEV2ZXJ5IEJTUCBkZXNjcmlwdGlvbiBzaG91bGQgZGVmaW5lIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz48ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQVJDSCc+PGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGFsbG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGlkZW50aWZ5CisgICAgICAgICAgICB0aGUgZGVzY3JpcHRpb24gYXMgbWVldGluZyB0aGUgY3JpdGVyaWEgc2V0IGJ5IHRoZSByZWNpcGUgYmVpbmcKKyAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgVGhpcyBzaW1wbGUgZXhhbXBsZSBzdXBwb3J0cyB0aGUgIm15YnNwIiBtYWNoaW5lIGZvciB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAga2VybmVsIGFuZCB0aGUgImkzODYiIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCBhIGhhcmQgbGluayBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIGEga2VybmVsIHR5cGUKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uIGZpbGUgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICBUaHVzLCBpZiB5b3UgZG8gbm90IGhhdmUga2VybmVsIHR5cGVzIGRlZmluZWQgaW4geW91ciBrZXJuZWwKKyAgICAgICAgICAgIE1ldGFkYXRhLCB5b3Ugb25seSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+PGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZSA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgIEJTUCBkZXNjcmlwdGlvbiBmaWxlIG1hdGNoLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRnV0dXJlIHZlcnNpb25zIG9mIHRoZSB0b29saW5nIG1ha2UgdGhlIHNwZWNpZmljYXRpb24gb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiBpbiB0aGUgQlNQIG9wdGlvbmFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZGlkIHdhbnQgdG8gc2VwYXJhdGUgeW91ciBrZXJuZWwgcG9saWN5IGZyb20geW91cgorICAgICAgICAgICAgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgeW91IGNvdWxkIGRvIHNvIGJ5IHNwZWNpZnlpbmcgYSBrZXJuZWwKKyAgICAgICAgICAgIHR5cGUsIHN1Y2ggYXMgInN0YW5kYXJkIiBhbmQgaW5jbHVkaW5nIHRoYXQgZGVzY3JpcHRpb24gZmlsZQorICAgICAgICAgICAgaW4gdGhlIEJTUCBkZXNjcmlwdGlvbiBmaWxlLgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG1pZ2h0IGFsc28gaGF2ZSBtdWx0aXBsZSBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IHlvdQorICAgICAgICAgICAgYWdncmVnYXRlIGludG8gYSBzaW5nbGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gZmlsZSB0aGF0IHlvdQorICAgICAgICAgICAgY291bGQgaW5jbHVkZSBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uIGZpbGUsIHJhdGhlciB0aGFuIHJlZmVyZW5jaW5nCisgICAgICAgICAgICBhIHNpbmdsZSA8ZmlsZW5hbWU+LmNmZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIHN0YW5kYXJkLnNjYworICAgICAgICBpbmNsdWRlIDxyZXBsYWNlYWJsZT5teWJzcDwvcmVwbGFjZWFibGU+LWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBhZ2dyZWdhdGVzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGFuZAorICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBtYWtlIHVwIHlvdXIgc3RhbmRhcmQga2VybmVsIHBvbGljeSB3aGVyZWFzCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4taHcuc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFnZ3JlZ2F0ZXMgYWxsIHRob3NlIG5lY2Vzc2FyeQorICAgICAgICAgICAgdG8gc3VwcG9ydCB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPm15YnNwPC9yZXBsYWNlYWJsZT4gbWFjaGluZS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYnJlYWsgYSBjb21wbGV0ZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGludG8gdGhlIHZhcmlvdXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTWFueSByZWFsLXdvcmxkIGV4YW1wbGVzIGFyZSBtb3JlIGNvbXBsZXguCisgICAgICAgICAgICBMaWtlIGFueSBvdGhlciA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIEJTUAorICAgICAgICAgICAgZGVzY3JpcHRpb25zIGNhbiBhZ2dyZWdhdGUgZmVhdHVyZXMuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgTWlubm93IEJTUCBkZWZpbml0aW9uIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LnNjYzoKKyAgICAgICAgaW5jbHVkZSBjZmcveDg2LnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL2VnMjB0L2VnMjB0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy9kbWFlbmdpbmUuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvZWhjaS1oY2Quc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvdXNiL29oY2ktaGNkLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3VzYi91c2ItZ2FkZ2V0cy5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvdG91Y2hzY3JlZW4tY29tcG9zaXRlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ocGV0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ydGMuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbGVkcy9sZWRzLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NwaS9zcGlkZXYuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvaTJjL2kyY2Rldi5zY2MKKworICAgICAgICAjIEVhcmx5cHJpbnRrIGFuZCBwb3J0IGRlYnVnIHJlcXVpcmVzIDgyNTAKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgY2ZnLzgyNTAuY2ZnCisKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LmNmZworICAgICAgICBrY29uZiBoYXJkd2FyZSBtaW5ub3ctZGV2LmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlIGluY2x1ZGVzCisgICAgICAgICAgICBhIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bWlubm93LmNmZzwvZmlsZW5hbWU+KSBzcGVjaWZpYyB0byB0aGUgTWlubm93CisgICAgICAgICAgICBCU1AgYXMgd2VsbCBhcyBzZXZlcmFsIG1vcmUgZ2VuZXJhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGVuYWJsaW5nIGhhcmR3YXJlIGZvdW5kIG9uIHRoZQorICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgIFRoaXMgZGVzY3JpcHRpb24gZmlsZSBpcyB0aGVuIGluY2x1ZGVkIGluIGVhY2ggb2YgdGhlIHRocmVlCisgICAgICAgICAgICAibWlubm93IiBkZXNjcmlwdGlvbiBmaWxlcyBmb3IgdGhlIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMKKyAgICAgICAgICAgIChpLmUuICJzdGFuZGFyZCIsICJwcmVlbXB0LXJ0IiwgYW5kICJ0aW55IikuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAic3RhbmRhcmQiIGtlcm5lbAorICAgICAgICAgICAgdHlwZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LXN0YW5kYXJkLnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIGt0eXBlcy9zdGFuZGFyZAorCisgICAgICAgIGluY2x1ZGUgbWlubm93LnNjYworCisgICAgICAgICMgRXh0cmEgbWlubm93IGNvbmZpZ3MgYWJvdmUgdGhlIG1pbmltYWwgZGVmaW5lZCBpbiBtaW5ub3cuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS1leHQuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbWVkaWEvbWVkaWEtYWxsLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NvdW5kL3NuZF9oZGFfaW50ZWwuc2NjCisKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHNob3VsZCByZWFsbHkgYmUgaW4gc3RhbmRhcmQuc2NjCisgICAgICAgICMgVVNCIGxpdmUtaW1hZ2Ugc3VwcG9ydAorICAgICAgICBpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCisKKyAgICAgICAgIyBCYXNpYyBwcm9maWxpbmcKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKKworICAgICAgICAjIFJlcXVlc3RlZCBkcml2ZXJzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBzY2MKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LWRyaXZlcnMtZXh0cmEuY2ZnCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBjb21tYW5kIG1pZHdheSB0aHJvdWdoIHRoZSBmaWxlCisgICAgICAgICAgICBpbmNsdWRlcyB0aGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiB0aGF0CisgICAgICAgICAgICBkZWZpbmVzIGFsbCBoYXJkd2FyZSBlbmFibGVtZW50cyBmb3IgdGhlIEJTUCB0aGF0IGlzIGNvbW1vbiB0byBhbGwKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgIFVzaW5nIHRoaXMgY29tbWFuZCBzaWduaWZpY2FudGx5IHJlZHVjZXMgZHVwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyBjb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAidGlueSIga2VybmVsIHR5cGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1pbm5vdy10aW55LnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgdGlueQorICAgICAgICBkZWZpbmUgS0FSQ0ggaTM4NgorCisgICAgICAgIGluY2x1ZGUga3R5cGVzL3RpbnkKKworICAgICAgICBpbmNsdWRlIG1pbm5vdy5zY2MKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFzIHlvdSBtaWdodCBleHBlY3QsIHRoZSAidGlueSIgZGVzY3JpcHRpb24gaW5jbHVkZXMgcXVpdGUgYQorICAgICAgICAgICAgYml0IGxlc3MuCisgICAgICAgICAgICBJbiBmYWN0LCBpdCBpbmNsdWRlcyBvbmx5IHRoZSBtaW5pbWFsIHBvbGljeSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgInRpbnkiIGtlcm5lbCB0eXBlIGFuZCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlZAorICAgICAgICAgICAgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUgYWxvbmcgd2l0aCB0aGUgbW9zdCBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mCisgICAgICAgICAgICB0aGUgc3lzdGVtIGFzIGRlZmluZWQgaW4gdGhlIGJhc2UgIm1pbm5vdyIgZGVzY3JpcHRpb24gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm90aWNlIGFnYWluIHRoZSB0aHJlZSBjcml0aWNhbCB2YXJpYWJsZXM6CisgICAgICAgICAgICA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBPZiB0aGVzZSB2YXJpYWJsZXMsIG9ubHkgdGhlIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgSXQgaXMgbm93IHNldCB0byAidGlueSIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcmdhbml6aW5nLXlvdXItc291cmNlJz4KKyAgICA8dGl0bGU+T3JnYW5pemluZyBZb3VyIFNvdXJjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgTWFueSByZWNpcGVzIGJhc2VkIG9uIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgcmVjaXBlIHVzZSBMaW51eCBrZXJuZWwgc291cmNlcyB0aGF0IGhhdmUgb25seSBhIHNpbmdsZQorICAgICAgICBicmFuY2ggLSAibWFzdGVyIi4KKyAgICAgICAgVGhpcyB0eXBlIG9mIHJlcG9zaXRvcnkgc3RydWN0dXJlIGlzIGZpbmUgZm9yIGxpbmVhciBkZXZlbG9wbWVudAorICAgICAgICBzdXBwb3J0aW5nIGEgc2luZ2xlIG1hY2hpbmUgYW5kIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgSG93ZXZlciwgaWYgeW91IHdvcmsgd2l0aCBtdWx0aXBsZSBib2FyZHMgYW5kIGFyY2hpdGVjdHVyZXMsCisgICAgICAgIGEga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5IHdpdGggbXVsdGlwbGUgYnJhbmNoZXMgaXMgbW9yZQorICAgICAgICBlZmZpY2llbnQuCisgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIGEgc2VyaWVzIG9mIHBhdGNoZXMgZm9yIG9uZSBib2FyZCB0byBib290LgorICAgICAgICBTb21ldGltZXMsIHRoZXNlIHBhdGNoZXMgYXJlIHdvcmtzLWluLXByb2dyZXNzIG9yIGZ1bmRhbWVudGFsbHkgd3JvbmcsCisgICAgICAgIHlldCB0aGV5IGFyZSBzdGlsbCBuZWNlc3NhcnkgZm9yIHNwZWNpZmljIGJvYXJkcy4KKyAgICAgICAgSW4gdGhlc2Ugc2l0dWF0aW9ucywgeW91IG1vc3QgbGlrZWx5IGRvIG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlc2UKKyAgICAgICAgcGF0Y2hlcyBpbiBldmVyeSBrZXJuZWwgeW91IGJ1aWxkIChpLmUuIGhhdmUgdGhlIHBhdGNoZXMgYXMgcGFydCBvZgorICAgICAgICB0aGUgbG9uZSAibWFzdGVyIiBicmFuY2gpLgorICAgICAgICBJdCBpcyBzaXR1YXRpb25zIGxpa2UgdGhlc2UgdGhhdCBnaXZlIHJpc2UgdG8gbXVsdGlwbGUgYnJhbmNoZXMgdXNlZAorICAgICAgICB3aXRoaW4gYSBMaW51eCBrZXJuZWwgc291cmNlcyBHaXQgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVwb3NpdG9yeSBvcmdhbml6YXRpb24gc3RyYXRlZ2llcyBleGlzdCB0aGF0IG1heGltaXplIHNvdXJjZSByZXVzZSwKKyAgICAgICAgcmVtb3ZlIHJlZHVuZGFuY3ksIGFuZCBsb2dpY2FsbHkgb3JkZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc3RyYXRlZ2llcyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmNhcHN1bGF0aW5nIHBhdGNoZXMgaW4gYSBmZWF0dXJlIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgYW5kIG9ubHkgaW5jbHVkaW5nIHRoZSBwYXRjaGVzIGluIHRoZSBCU1AgZGVzY3JpcHRpb25zIG9mCisgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2FibGUgYm9hcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgbWFjaGluZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgYXBwbHlpbmcgdGhlIHBhdGNoZXMgb24gdGhhdAorICAgICAgICAgICAgICAgIGJyYW5jaCBvbmx5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgZmVhdHVyZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgbWVyZ2luZyB0aGF0IGJyYW5jaCBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBCU1Agd2hlbiBuZWVkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYXBwcm9hY2ggeW91IHRha2UgaXMgZW50aXJlbHkgdXAgdG8geW91CisgICAgICAgIGFuZCBkZXBlbmRzIG9uIHdoYXQgd29ya3MgYmVzdCBmb3IgeW91ciBkZXZlbG9wbWVudCBtb2RlbC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZW5jYXBzdWxhdGluZy1wYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPkVuY2Fwc3VsYXRpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBpZiB5b3UgYXJlIHJldXNpbmcgcGF0Y2hlcyBmcm9tIGFuIGV4dGVybmFsIHRyZWUgYW5kIGFyZSBub3QKKyAgICAgICAgICAgIHdvcmtpbmcgb24gdGhlIHBhdGNoZXMsIHlvdSBtaWdodCBmaW5kIHRoZSBlbmNhcHN1bGF0ZWQgZmVhdHVyZQorICAgICAgICAgICAgdG8gYmUgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBHaXZlbiB0aGlzIHNjZW5hcmlvLCB5b3UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGFueSBicmFuY2hlcyBpbiB0aGUKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgUmF0aGVyLCB5b3UganVzdCB0YWtlIHRoZSBzdGF0aWMgcGF0Y2hlcyB5b3UgbmVlZCBhbmQgZW5jYXBzdWxhdGUKKyAgICAgICAgICAgIHRoZW0gd2l0aGluIGEgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24sIHlvdSBzaW1wbHkgaW5jbHVkZSB0aGF0IGludG8KKyAgICAgICAgICAgIHRoZSBCU1AgZGVzY3JpcHRpb24gYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgcGF0Y2hlcyBhbmQgQlNQCisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgaW4gdGhlICI8bGluayBsaW5rZW5kPSdwYXRjaGVzJz5QYXRjaGVzPC9saW5rPiIgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYWNoaW5lLWJyYW5jaGVzJz4KKyAgICAgICAgPHRpdGxlPk1hY2hpbmUgQnJhbmNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgaGF2ZSBtdWx0aXBsZSBtYWNoaW5lcyBhbmQgYXJjaGl0ZWN0dXJlcyB0byBzdXBwb3J0LAorICAgICAgICAgICAgb3IgeW91IGFyZSBhY3RpdmVseSB3b3JraW5nIG9uIGJvYXJkIHN1cHBvcnQsIGl0IGlzIG1vcmUKKyAgICAgICAgICAgIGVmZmljaWVudCB0byBjcmVhdGUgYnJhbmNoZXMgaW4gdGhlIHJlcG9zaXRvcnkgYmFzZWQgb24KKyAgICAgICAgICAgIGluZGl2aWR1YWwgbWFjaGluZXMuCisgICAgICAgICAgICBIYXZpbmcgbWFjaGluZSBicmFuY2hlcyBhbGxvd3MgY29tbW9uIHNvdXJjZSB0byByZW1haW4gaW4gdGhlCisgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggd2l0aCBhbnkgZmVhdHVyZXMgc3BlY2lmaWMgdG8gYSBtYWNoaW5lIHN0b3JlZAorICAgICAgICAgICAgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUgYnJhbmNoLgorICAgICAgICAgICAgVGhpcyBvcmdhbml6YXRpb24gbWV0aG9kIGZyZWVzIHlvdSBmcm9tIGNvbnRpbnVhbGx5IHJlaW50ZWdyYXRpbmcKKyAgICAgICAgICAgIHlvdXIgcGF0Y2hlcyBpbnRvIGEgZmVhdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBhIG5ldyBicmFuY2gsIHlvdSBjYW4gc2V0IHVwIHlvdXIga2VybmVsIE1ldGFkYXRhCisgICAgICAgICAgICB0byB1c2UgdGhlIGJyYW5jaCBhIGNvdXBsZSBkaWZmZXJlbnQgd2F5cy4KKyAgICAgICAgICAgIEluIHRoZSByZWNpcGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbmV3IGJyYW5jaCBhcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gdG8gdXNlIGZvciB0aGUgYm9hcmQgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCUkFOQ0ggPSAibXluZXdicmFuY2giCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBbm90aGVyIG1ldGhvZCBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKworICAgICAgICBpbmNsdWRlIG15YnNwLWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZmluZAorICAgICAgICAgICAgeW91cnNlbGYgd2l0aCBudW1lcm91cyBicmFuY2hlcywgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIGEKKyAgICAgICAgICAgIGhpZXJhcmNoaWNhbCBicmFuY2hpbmcgc3lzdGVtIHNpbWlsYXIgdG8gd2hhdCB0aGUgbGludXgteW9jdG8gTGludXgKKyAgICAgICAgICAgIGtlcm5lbCByZXBvc2l0b3JpZXMgdXNlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGFkIHR3byBrZXJuZWwgdHlwZXMsICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgZm9yCisgICAgICAgICAgICBpbnN0YW5jZSwgdGhyZWUgbWFjaGluZXMsIGFuZCA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5teWRpcjwvZmlsZW5hbWU+LCB0aGUgYnJhbmNoZXMgaW4geW91cgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG15ZGlyL2Jhc2UKKyAgICAgbXlkaXIvc3RhbmRhcmQvYmFzZQorICAgICBteWRpci9zdGFuZGFyZC9tYWNoaW5lX2EKKyAgICAgbXlkaXIvc3RhbmRhcmQvbWFjaGluZV9iCisgICAgIG15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYworICAgICBteWRpci9zbWFsbC9iYXNlCisgICAgIG15ZGlyL3NtYWxsL21hY2hpbmVfYQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIG9yZ2FuaXphdGlvbiBjYW4gaGVscCBjbGFyaWZ5IHRoZSBicmFuY2ggcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPm15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYTwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbmNsdWRlcyBldmVyeXRoaW5nIGluIDxmaWxlbmFtZT5teWRpci9iYXNlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlkaXIvc3RhbmRhcmQvYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgYnJhbmNoZXMgYWRkIHNvdXJjZXMgc3BlY2lmaWMgdG8gdGhvc2UKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcyB0aGF0IGZvciB3aGF0ZXZlciByZWFzb24gYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlCisgICAgICAgICAgICBvdGhlciBicmFuY2hlcy4KKyAgICAgICAgICAgIDxub3RlPlRoZSAiYmFzZSIgYnJhbmNoZXMgYXJlIGFuIGFydGlmYWN0IG9mIHRoZSB3YXkgR2l0IG1hbmFnZXMKKyAgICAgICAgICAgICAgICBpdHMgZGF0YSBpbnRlcm5hbGx5IG9uIHRoZSBmaWxlc3lzdGVtOiBHaXQgd2lsbCBub3QgYWxsb3cgeW91CisgICAgICAgICAgICAgICAgdG8gdXNlIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZC9tYWNoaW5lX2E8L2ZpbGVuYW1lPiBiZWNhdXNlIGl0CisgICAgICAgICAgICAgICAgd291bGQgaGF2ZSB0byBjcmVhdGUgYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBuYW1lZCAic3RhbmRhcmQiLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ZlYXR1cmUtYnJhbmNoZXMnPgorICAgICAgICA8dGl0bGU+RmVhdHVyZSBCcmFuY2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBuZXcgZmVhdHVyZXMsIGl0IGNhbiBiZSBtb3JlCisgICAgICAgICAgICBlZmZpY2llbnQgdG8gd29yayB3aXRoIHRoYXQgZmVhdHVyZSBhcyBhIGJyYW5jaCwgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGFzIGEgc2V0IG9mIHBhdGNoZXMgdGhhdCBoYXZlIHRvIGJlIHJlZ3VsYXJseSB1cGRhdGVkLgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIHByb3ZpZGUgZm9yIHRoaXMgd2l0aAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtZXJnZSBhIGZlYXR1cmUgYnJhbmNoIGludG8gYSBCU1AsIGluc2VydCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFmdGVyIGFueQorICAgICAgICAgICAgPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+IGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKyAgICAgICAgZ2l0IG1lcmdlIG15ZmVhdHVyZQorCisgICAgICAgIGluY2x1ZGUgbXlic3AtaHcuc2NjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzY2MtcmVmZXJlbmNlJz4KKyAgICA8dGl0bGU+U0NDIERlc2NyaXB0aW9uIEZpbGUgUmVmZXJlbmNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBicmllZiByZWZlcmVuY2UgZm9yIHRoZSBjb21tYW5kcyB5b3UgY2FuIHVzZQorICAgICAgICB3aXRoaW4gYW4gU0NDIGRlc2NyaXB0aW9uIGZpbGUgKDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4pOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5icmFuY2ggW3JlZl08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IGJyYW5jaCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBicmFuY2gKKyAgICAgICAgICAgICAgICAodHlwaWNhbGx5IDxmaWxlbmFtZT4ke0tUWVBFfTwvZmlsZW5hbWU+KSB1c2luZworICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoLCBvciAicmVmIiBpZiBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRlZmluZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIERlZmluZXMgdmFyaWFibGVzLCBzdWNoIGFzIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+S0FSQ0g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktGRUFUVVJFX0RFU0NSSVBUSU9OPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluY2x1ZGUgU0NDX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBJbmNsdWRlcyBhbiBTQ0MgZmlsZSBpbiB0aGUgY3VycmVudCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGlzIHBhcnNlZCBhcyBpZiB5b3UgaGFkIGluc2VydGVkIGl0IGlubGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+a2NvbmYgW2hhcmR3YXJlfG5vbi1oYXJkd2FyZV0gQ0ZHX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBRdWV1ZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZvciBtZXJnaW5nIGludG8gdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgTGludXggPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5naXQgbWVyZ2UgR0lUX0JSQU5DSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIE1lcmdlcyB0aGUgZmVhdHVyZSBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhdGNoIFBBVENIX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBcHBsaWVzIHRoZSBwYXRjaCB0byB0aGUgY3VycmVudCBHaXQgYnJhbmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb21tb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzgyY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbW1vbi54bWwKQEAgLTAsMCArMSwxMDMzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1jb21tb24nPgorCis8dGl0bGU+Q29tbW9uIFRhc2tzPC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIHByZXNlbnRzIHNldmVyYWwgY29tbW9uIHRhc2tzIHlvdSBwZXJmb3JtIHdoZW4geW91CisgICAgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbC4KKyAgICBUaGVzZSB0YXNrcyBpbmNsdWRlIHByZXBhcmluZyBhIGxheWVyLCBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgcmVjaXBlLAorICAgIGl0ZXJhdGl2ZSBkZXZlbG9wbWVudCwgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMsIGFuZCBpbmNvcnBvcmF0aW5nCisgICAgb3V0LW9mLXRyZWUgbW9kdWxlcy4KKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIGV4YW1wbGVzIHByZXNlbnRlZCBpbiB0aGlzIGNoYXB0ZXIgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIDEuMi4yIFJlbGVhc2UgYW5kIGZvcndhcmQuCisgICAgPC9ub3RlPgorPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUHJlcGFyaW5nIGEgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSBtb2RpZnlpbmcga2VybmVsIHJlY2lwZXMsIGl0IGlzIHJlY29tbWVuZGVkCisgICAgICAgICAgICB0aGF0IHlvdSBjcmVhdGUgYW5kIHByZXBhcmUgeW91ciBvd24gbGF5ZXIgaW4gd2hpY2ggdG8gZG8geW91cgorICAgICAgICAgICAgd29yay4KKyAgICAgICAgICAgIFlvdXIgbGF5ZXIgY29udGFpbnMgaXRzIG93bgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgYW5kIHByb3ZpZGVzIGEgY29udmVuaWVudAorICAgICAgICAgICAgbWVjaGFuaXNtIHRvIGNyZWF0ZSB5b3VyIG93biByZWNpcGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHRvIGNyZWF0ZSBhbmQgd29yayB3aXRoIGxheWVycywgc2VlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiBsYXllcnMgYW5kIGhvdyB0byBjcmVhdGUgbGF5ZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4iPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc2V0LXVwLXlvdXItbGF5ZXItZm9yLXRoZS1idWlsZCc+U2V0IFVwIFlvdXIgTGF5ZXIgZm9yIHRoZSBCdWlsZDwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIG9uIHNldHRpbmcgdXAgYSBsYXllciBmb3Iga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG1hbnkgY2FzZXMsIHlvdSBjYW4gY3VzdG9taXplIGFuIGV4aXN0aW5nIGxpbnV4LXlvY3RvIHJlY2lwZSB0bworICAgICAgICAgICAgbWVldCB0aGUgbmVlZHMgb2YgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgRWFjaCByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgZmV3IExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVjaXBlcyBmcm9tIHdoaWNoIHlvdSBjYW4gY2hvb3NlLgorICAgICAgICAgICAgVGhlc2UgYXJlIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUgY2FuIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIHRoZSBhcHBlbmQgZmlsZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcHBseWluZyBwYXRjaGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIG1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUsIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkCisgICAgICAgICAgICBhIG1pbmltYWwsIGN1c3RvbSBsYXllciBmcm9tIHdoaWNoIHlvdSBjYW4gd29yay4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+Q3JlYXRpbmcgYW5kIFByZXBhcmluZyBhIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIHNvbWUgZ2VuZXJhbCByZXNvdXJjZXMuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NldC11cC15b3VyLWxheWVyLWZvci10aGUtYnVpbGQnPlNldCBVcCBZb3VyIExheWVyIGZvciB0aGUgQnVpbGQ8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBhIGRldGFpbGVkCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1hcHBlbmQtZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIEFwcGVuZCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNyZWF0ZSB0aGlzIGZpbGUgaW4geW91ciBjdXN0b20gbGF5ZXIuCisgICAgICAgICAgICAgICAgWW91IGFsc28gbmFtZSBpdCBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgbGludXgteW9jdG8gcmVjaXBlCisgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBtb2RpZnlpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgYXBwZW5kIGZpbGUgd2lsbCB0eXBpY2FsbHkgYmUgbG9jYXRlZCBhcyBmb2xsb3dzCisgICAgICAgICAgICAgICAgd2l0aGluIHlvdXIgY3VzdG9tIGxheWVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnlvdXItbGF5ZXI8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBhcHBlbmQgZmlsZSBzaG91bGQgaW5pdGlhbGx5IGV4dGVuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHNlYXJjaCBwYXRoIGJ5IHByZXBlbmRpbmcgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHlvdXIKKyAgICAgICAgICAgICAgICBmaWxlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwYXRoIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZXhwYW5kcyB0byAibGludXgteW9jdG8iIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhbnkgbmV3IGZpbGVzIHRoYXQgbW9kaWZ5IHRoZSBrZXJuZWwgcmVjaXBlIGFuZCB5b3UKKyAgICAgICAgICAgICAgICBoYXZlIGV4dGVuZGVkIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBhYm92ZSwgeW91IG11c3QgcGxhY2UgdGhlIGZpbGVzIGluIHlvdXIgbGF5ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGFyZWE6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+eW91ci1sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBuZXcgbWFjaGluZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKEJTUCksIGJlIHN1cmUgdG8gcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBseWluZy1wYXRjaGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBseWluZyBQYXRjaGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBzaW5nbGUgcGF0Y2ggb3IgYSBzbWFsbCBzZXJpZXMgb2YgcGF0Y2hlcworICAgICAgICAgICAgICAgIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHlvdQorICAgICAgICAgICAgICAgIGNhbiBkbyBzbyBqdXN0IGFzIHlvdSB3b3VsZCB3aXRoIGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgWW91IGZpcnN0IGNvcHkgdGhlIHBhdGNoZXMgdG8gdGhlIHBhdGggYWRkZWQgdG8KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYXMgZGVzY3JpYmVkIGluCisgICAgICAgICAgICAgICAgdGhlIHByZXZpb3VzIHNlY3Rpb24sIGFuZCB0aGVuIHJlZmVyZW5jZSB0aGVtIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFwcGx5IGEgdGhyZWUtcGF0Y2ggc2VyaWVzIGJ5IGFkZGluZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1maXJzdC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLXNlY29uZC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAzLXRoaXJkLWNoYW5nZS5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIG5leHQgdGltZSB5b3UgcnVuIEJpdEJha2UgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbCwKKyAgICAgICAgICAgICAgICBCaXRCYWtlIGRldGVjdHMgdGhlIGNoYW5nZSBpbiB0aGUgcmVjaXBlIGFuZCBmZXRjaGVzIGFuZAorICAgICAgICAgICAgICAgIGFwcGxpZXMgdGhlIHBhdGNoZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gcGF0Y2ggdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBtYWtlIHdob2xlc2FsZSBvciBpbmNyZW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB1c2VkIGZvciB0aGUgZXZlbnR1YWwKKyAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBieSBpbmNsdWRpbmcgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFuZCBieSBzcGVjaWZ5aW5nCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRvIGJlIGFwcGxpZWQgdG8gdGhhdCBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIGNvbXBsZXRlLCB3b3JraW5nIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIHlvdSB3YW50IHRvIHVzZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGFzIGJlZm9yZSwgY29weQorICAgICAgICAgICAgICAgIHRoYXQgZmlsZSB0byB0aGUgYXBwcm9wcmlhdGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIGFuZCByZW5hbWUgdGhlIGNvcGllZCBmaWxlIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gaG93IHRvCisgICAgICAgICAgICAgICAgc2VhcmNoIGZvciB0aGUgZmlsZSwgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBleHRlbmRzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgKHNlYXJjaCBkaXJlY3RvcmllcykgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgeW91IGNyZWF0ZWQgdG8gaG9sZCB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0aGUgY29uZmlndXJhdGlvbnMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBiZWZvcmUgYXBwbHlpbmcgYW55CisgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICBUaGUgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYW5kCisgICAgICAgICAgICAgICAgYW55IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCBpZiB5b3UgaGF2ZSBhbnkgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZyYWdtZW50cywgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZXNlIG9uIHRvcCBvZiBhbmQKKyAgICAgICAgICAgICAgICBhZnRlciBhcHBseWluZyB0aGUgZXhpc3RpbmcgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgcHJlZmVycmVkIGFwcHJvYWNoIGlzIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbCBjaGFuZ2UgeW91IHdhbnQgdG8gbWFrZSBhbmQgYWRkIHRoYXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBhIGJhc2ljIHNlcmlhbAorICAgICAgICAgICAgICAgIGNvbnNvbGUsIGNyZWF0ZSBhIGZpbGUgbmFtZWQgPGZpbGVuYW1lPjgyNTAuY2ZnPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGNvbnRlbnQgKHdpdGhvdXQgaW5kZW50YXRpb24pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09ORklHX1NFUklBTF84MjUwPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorICAgICBDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorICAgICBDT05GSUdfU0VSSUFMX0NPUkU9eQorICAgICBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5leHQsIGluY2x1ZGUgdGhpcyBjb25maWd1cmF0aW9uIGZyYWdtZW50IGFuZCBleHRlbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovLzgyNTAuY2ZnIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgbmV4dCB0aW1lIHlvdSBydW4gQml0QmFrZSB0byBidWlsZCB0aGUgTGludXgga2VybmVsLCBCaXRCYWtlCisgICAgICAgICAgICAgICAgZGV0ZWN0cyB0aGUgY2hhbmdlIGluIHRoZSByZWNpcGUgYW5kIGZldGNoZXMgYW5kIGFwcGxpZXMgdGhlCisgICAgICAgICAgICAgICAgbmV3IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb25maWd1cmluZy10aGUta2VybmVsJz5Db25maWd1cmluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYW4taW4tdHJlZS1kZWZjb25maWctZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYW4gIkluLVRyZWUiJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gaGF2ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgICAgIHN1cHBvcnQgdGhyb3VnaCBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICBpcyBwdWxsZWQgZnJvbSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGUgY29uZmlndXJlZAorICAgICAgICAgICAgICAgIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbG9va3MgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBsYXllciB1c2VkIGZvcgorICAgICAgICAgICAgICAgIE1ldGFkYXRhLCB3aGljaCBpcyAib3V0LW9mLXRyZWUiLCBhbmQgdGhlbiBjb25maWd1cmVzIHRoZW0KKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRvIG1haW50YWluIGNvcGllcyBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcyBpbiB5b3VyIGxheWVyIGJ1dCB3b3VsZAorICAgICAgICAgICAgICAgIHJhdGhlciBhbGxvdyB1c2VycyB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCB0cmVlIGFuZCBzdGlsbCBiZSBhYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0aHJvdWdoLCBmb3IgZXhhbXBsZSwgYXBwZW5kIGZpbGVzLCB5b3UgY2FuIGRpcmVjdCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpcyAiaW4tdHJlZSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgYW4gImluLXRyZWUiIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIGVkaXQgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB5b3VyIGtlcm5lbCBzbyB0aGF0IGl0IGhhcyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JVSUxEX0RFRkNPTkZJR188dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPktNQUNISU5FPC91bGluaz4gPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYXBwZW5kIHRoZSB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gYW5kIHRoZW4gc3VwcGx5IHRoZSBwYXRoIHRvCisgICAgICAgICAgICAgICAgeW91ciAiaW4tdHJlZSIgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gbW9kaWZ5aW5nIHlvdXIga2VybmVsIHJlY2lwZSBhbmQgcHJvdmlkaW5nIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHlvdSBuZWVkIHRvIGJlIHN1cmUgbm8KKyAgICAgICAgICAgICAgICBmaWxlcyBvciBzdGF0ZW1lbnRzIHNldCA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IG90aGVyIHRoYW4geW91ciAiaW4tdHJlZSIKKyAgICAgICAgICAgICAgICBmaWxlIChlLmcuIGEga2VybmVsJ3MgPGZpbGVuYW1lPmxpbnV4LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlKS4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGEgc3RhdGVtZW50CisgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmaWVzIGFuICJvdXQtb2YtdHJlZSIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgdGhhdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICB3aWxsIG92ZXJyaWRlIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtCVUlMRF9ERUZDT05GSUcnPjxmaWxlbmFtZT5LQlVJTERfREVGQ09ORklHPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIGFuIEl0ZXJhdGl2ZSBEZXZlbG9wbWVudCBQcm9jZXNzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSBleGlzdGluZyBwYXRjaGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMsCisgICAgICAgICAgICB5b3UgY2FuIGl0ZXJhdGl2ZWx5IGdlbmVyYXRlIHRoZW0gZnJvbSB3aXRoaW4gdGhlIEJpdEJha2UgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50IGFzIGRlc2NyaWJlZCB3aXRoaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgRHVyaW5nIGFuIGl0ZXJhdGl2ZSB3b3JrZmxvdywgcnVubmluZyBhIHByZXZpb3VzbHkgY29tcGxldGVkIEJpdEJha2UKKyAgICAgICAgICAgIHRhc2sgY2F1c2VzIEJpdEJha2UgdG8gaW52YWxpZGF0ZSB0aGUgdGFza3MgdGhhdCBmb2xsb3cgdGhlCisgICAgICAgICAgICBjb21wbGV0ZWQgdGFzayBpbiB0aGUgYnVpbGQgc2VxdWVuY2UuCisgICAgICAgICAgICBJbnZhbGlkYXRlZCB0YXNrcyByZWJ1aWxkIHRoZSBuZXh0IHRpbWUgeW91IHJ1biB0aGUgYnVpbGQgdXNpbmcKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHlvdSByZWFkIHRoaXMgc2VjdGlvbiwgYmUgc3VyZSB0byBzdWJzdGl0dXRlIHRoZSBuYW1lCisgICAgICAgICAgICBvZiB5b3VyIExpbnV4IGtlcm5lbCByZWNpcGUgZm9yIHRoZSB0ZXJtCisgICAgICAgICAgICAibGludXgteW9jdG8iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKzwhLS0KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BUiAtIERhcnJlbiBIYXJ0OjwvZW1waGFzaXM+ICBUaGlzIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBvcmlnaW5hdGVkIGZyb20gdGhlIG9sZCBZb2N0byBQcm9qZWN0IEtlcm5lbCBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBhbmQgVXNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICBJdCB3YXMgZGVjaWRlZCB3ZSBuZWVkIHRvIHB1dCBpdCBpbiB0aGlzIHNlY3Rpb24gaGVyZS4KKyAgICAgICAgICAgICAgICBEYXJyZW4gbmVlZHMgdG8gZmlndXJlIG91dCB3aGVyZSB3ZSB3YW50IGl0IGFuZCB3aGF0IHBhcnQKKyAgICAgICAgICAgICAgICBvZiBpdCB3ZSB3YW50IChhbGwsIHJldmlzaW9uPz8/KQorICAgICAgICAgICAgPC9wYXJhPgorLS0+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlCisgICAgICAgICAgICAgICAgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsCisgICAgICAgICAgICAgICAgcmVtb3ZlZCwgb3IgYWRkZWQgZmlsZXMuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBjb21taXQgdGhvc2UgY2hhbmdlcyB0byB0aGUgdHJlZSByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgd2hldGhlciB0aGV5IHdpbGwgYmUgc2F2ZWQsIGV4cG9ydGVkLCBvciB1c2VkLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGNvbW1pdCB0aGUgY2hhbmdlcywgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBmb3JjZSBhIHBpY2t1cCBhbmQgY29tbWl0IG9mIGFsbCBzdWNoIHBlbmRpbmcgY2hhbmdlcywKKyAgICAgICAgICAgICAgICBlbnRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgYWRkIC4KKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hIC1tICJnZXR0aW5nIHJpZCBvZiAtZGlydHkiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOZXh0LCByZWJ1aWxkIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG1hbmlwdWxhdGUgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgYSBsaW51eC15b2N0byByZWNpcGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzdGFydHMgdGhlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvb2wsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBwcmVwYXJlIGEgbmV3CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGZvciB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgZXhpdCB0aGUgdG9vbCwgYmUgc3VyZSB0byBzYXZlIHlvdXIgY2hhbmdlcworICAgICAgICAgICAgICAgIGF0IHRoZSBwcm9tcHQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzCisgICAgICAgICAgICAgICAgbG9jYXRlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+fS1idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZW50aXJlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgYmV0dGVyIG1ldGhvZCBpcyB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIGNvbmZpZ3VyYXRpb24gZmlsZXM6IG9uZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgc2F2ZWQsIGFuZCBvbmUgZnJlc2hseSBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCB1c2luZyB0aGlzIG1ldGhvZCwgZm9sbG93CisgICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgYSBidWlsZCBhdCBsZWFzdCB0aHJvdWdoIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgZW5zdXJlcyB0aGF0IHlvdSB3aWxsIGJlIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmcm9tIGEga25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgeW91ciBidWlsZCBzdGF0ZSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lIHVua25vd24sIGl0IGlzIGJlc3QgdG8gcnVuIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBwcmlvciB0byBzdGFydGluZyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgbWVudWNvbmZpZworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+ZGlmZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHByZXBhcmUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBmaWxlIDxmaWxlbmFtZT5mcmFnbWVudC5jZmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIGRpZmZjb25maWcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRpZmZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kIGNyZWF0ZXMgYSBmaWxlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgIGxpc3Qgb2YgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfPC9maWxlbmFtZT4gYXNzaWdubWVudHMuCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBvdXRwdXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGZvciBhIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIHRvb2xzIGFsc28gcHJvdmlkZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2UgdG9vbHMgdG8gcHJvZHVjZSB3YXJuaW5ncyBmb3Igd2hlbiBhCisgICAgICAgICAgICAgICAgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgYXBwZWFyIGluIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBvciB3aGVuIHlvdSBvdmVycmlkZSBhCisgICAgICAgICAgICAgICAgcG9saWN5IGNvbmZpZ3VyYXRpb24gaW4gYSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aXRoIHNvbWUgc2FtcGxlIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgIHRoYXQgcnVucyB0aGVzZSB0b29sczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKworICAgICAuLi4KKworICAgICBOT1RFOiB2YWxpZGF0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgIFRoaXMgQlNQIHNldHMgMyBpbnZhbGlkL29ic29sZXRlIGtlcm5lbCBvcHRpb25zLgorICAgICBUaGVzZSBjb25maWcgb3B0aW9ucyBhcmUgbm90IG9mZmVyZWQgYW55d2hlcmUgd2l0aGluIHRoaXMga2VybmVsLgorICAgICBUaGUgZnVsbCBsaXN0IGNhbiBiZSBmb3VuZCBpbiB5b3VyIGtlcm5lbCBzcmMgZGlyIGF0OgorICAgICBtZXRhL2NmZy9zdGFuZGFyZC9teWJzcC9pbnZhbGlkLmNmZworCisgICAgIFRoaXMgQlNQIHNldHMgMjEga2VybmVsIG9wdGlvbnMgdGhhdCBhcmUgcG9zc2libHkgbm9uLWhhcmR3YXJlIHJlbGF0ZWQuCisgICAgIFRoZSBmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIHlvdXIga2VybmVsIHNyYyBkaXIgYXQ6CisgICAgIG1ldGEvY2ZnL3N0YW5kYXJkL215YnNwL3NwZWNpZmllZF9ub25faGR3LmNmZworCisgICAgIFdBUk5JTkc6IFRoZXJlIHdlcmUgMiBoYXJkd2FyZSBvcHRpb25zIHJlcXVlc3RlZCB0aGF0IGRvIG5vdAorICAgICAgICAgICAgICBoYXZlIGEgY29ycmVzcG9uZGluZyB2YWx1ZSBwcmVzZW50IGluIHRoZSBmaW5hbCAiLmNvbmZpZyIgZmlsZS4KKyAgICAgICAgICAgICAgVGhpcyBwcm9iYWJseSBtZWFucyB5b3UgYXJlIG5vdCBnZXR0aW5nIHRoZSBjb25maWcgeW91IHdhbnRlZC4KKyAgICAgICAgICAgICAgVGhlIGZ1bGwgbGlzdCBjYW4gYmUgZm91bmQgaW4geW91ciBrZXJuZWwgc3JjIGRpciBhdDoKKyAgICAgICAgICAgICAgbWV0YS9jZmcvc3RhbmRhcmQvbXlic3AvbWlzbWF0Y2guY2ZnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGRlc2NyaWJlcyB0aGUgdmFyaW91cyBwcm9ibGVtcyB0aGF0IHlvdSBjYW4KKyAgICAgICAgICAgICAgICBlbmNvdW50ZXIgYWxvbmcgd2l0aCB3aGVyZSB0byBmaW5kIHRoZSBvZmZlbmRpbmcgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGl0ZW1zLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9ncyB0byBhZGp1c3QgeW91cgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHRoZW4gcmVwZWF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gY29tbWFuZHMgdW50aWwKKyAgICAgICAgICAgICAgICB0aGV5IHByb2R1Y2Ugbm8gd2FybmluZ3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLW1lbnVjb25maWcnPlVzaW5nIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtb2RpZnlpbmctc291cmNlLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwZXJpbWVudCB3aXRoIHNvdXJjZSBjb2RlIGNoYW5nZXMgYW5kIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgc2ltcGxlIHBhdGNoIHdpdGhvdXQgbGVhdmluZyB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgYmUgc3VyZSB0byBjb21wbGV0ZSBhIGJ1aWxkIGF0CisgICAgICAgICAgICAgICAgbGVhc3QgdGhyb3VnaCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdGFzazoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnbWUgLWYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGFraW5nIHRoaXMgc3RlcCBlbnN1cmVzIHlvdSBoYXZlIHRoZSBzb3VyY2VzIHByZXBhcmVkCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbXBsZXRlZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0vbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWRpdCB0aGUgc291cmNlcyBhcyB5b3Ugd291bGQgYW55IG90aGVyIExpbnV4IHNvdXJjZQorICAgICAgICAgICAgICAgIHRyZWUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwga2VlcCBpbiBtaW5kIHRoYXQgeW91IHdpbGwgbG9zZSBjaGFuZ2VzIGlmIHlvdQorICAgICAgICAgICAgICAgIHRyaWdnZXIgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGF2b2lkIHRyaWdnZXJpbmcgdGhpcyB0YXNrIGJ5IG5vdCB1c2luZyBCaXRCYWtlIHRvCisgICAgICAgICAgICAgICAgcnVuIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmNsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgb3IgZm9yY2VkCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgQWxzbywgZG8gbm90IG1vZGlmeSB0aGUgcmVjaXBlIGl0c2VsZiB3aGlsZSB3b3JraW5nCisgICAgICAgICAgICAgICAgd2l0aCB0ZW1wb3JhcnkgY2hhbmdlcyBvciBCaXRCYWtlIG1pZ2h0IHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHRlc3QgeW91ciB0ZW1wb3JhcnkgY2hhbmdlcywgaW5zdHJ1Y3QgQml0QmFrZSB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbXBpbGU8L2ZpbGVuYW1lPiBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3B0aW9uIGZvcmNlcyB0aGUgY29tbWFuZCB0byBydW4KKyAgICAgICAgICAgICAgICBldmVuIHRob3VnaCBCaXRCYWtlIG1pZ2h0IHRoaW5rIGl0IGhhcyBhbHJlYWR5IGRvbmUgc286CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgY29tcGlsZSAtZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgY29tcGlsZSBmYWlscywgeW91IGNhbiB1cGRhdGUgdGhlIHNvdXJjZXMgYW5kIHJlcGVhdAorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29tcGlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgeW91IGNhbiBpbnNwZWN0IGFuZCB0ZXN0CisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBidWlsZCAoaS5lLiBrZXJuZWwsIG1vZHVsZXMsIGFuZCBzbyBmb3J0aCkgZnJvbQorICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgYnVpbGQgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9saW51eC0ke1BBQ0tBR0VfQVJDSH0tJHtMSU5VWF9LRVJORUxfVFlQRX0tYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gcGxhY2UgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXM8L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorCSQgYml0YmFrZSBsaW51eC15b2N0byAtYyBkZXBsb3kKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kLCBvZiBjb3Vyc2UsIHlvdSBjYW4gcGVyZm9ybSB0aGUgcmVtYWluaW5nIGluc3RhbGxhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgc3RlcHMgYnkgaXNzdWluZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisJJCBiaXRiYWtlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgcmFwaWQgaXRlcmF0aXZlIGRldmVsb3BtZW50LCB0aGUgZWRpdC1jb21waWxlLXJlcGVhdCBsb29wCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiBpcyBwcmVmZXJhYmxlIHRvIHJlYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgZW50aXJlIHJlY2lwZSBiZWNhdXNlIHRoZSBpbnN0YWxsYXRpb24gYW5kIHBhY2thZ2luZyB0YXNrcworICAgICAgICAgICAgICAgIGFyZSB2ZXJ5IHRpbWUgY29uc3VtaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gbWFrZSB0aGVtIHBlcm1hbmVudCBieSBnZW5lcmF0aW5nIHBhdGNoZXMgYW5kCisgICAgICAgICAgICAgICAgYXBwbHlpbmcgdGhlbSB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbHlpbmctcGF0Y2hlcyc+QXBwbHlpbmcgUGF0Y2hlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCBmYW1pbGlhciB3aXRoIGdlbmVyYXRpbmcgcGF0Y2hlcywgcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXRoZS1wYXRjaCc+Q3JlYXRpbmcgdGhlIFBhdGNoPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLXlvdXItb3duLXNvdXJjZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGNhbm5vdCB3b3JrIHdpdGggb25lIG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgICAgIHZlcnNpb25zIHN1cHBvcnRlZCBieSBleGlzdGluZyBsaW51eC15b2N0byByZWNpcGVzLCB5b3UgY2FuCisgICAgICAgICAgICBzdGlsbCBtYWtlIHVzZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdG9vbGluZyBieQorICAgICAgICAgICAgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMuCisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgeW91ciBvd24gc291cmNlcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8KKyAgICAgICAgICAgIGxldmVyYWdlIHRoZSBleGlzdGluZyBrZXJuZWwKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGFuZAorICAgICAgICAgICAgc3RhYmlsaXphdGlvbiB3b3JrIG9mIHRoZSBsaW51eC15b2N0byBzb3VyY2VzLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IHdpbGwgYmUgYWJsZSB0byBtYW5hZ2UgeW91ciBvd24gTWV0YWRhdGEgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgIGZvcm1hdCBhcyB0aGUgbGludXgteW9jdG8gc291cmNlcy4KKyAgICAgICAgICAgIE1haW50YWluaW5nIGZvcm1hdCBjb21wYXRpYmlsaXR5IGZhY2lsaXRhdGVzIGNvbnZlcmdpbmcgd2l0aAorICAgICAgICAgICAgbGludXgteW9jdG8gb24gYSBmdXR1cmUsIG11dHVhbGx5LXN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaGVscCB5b3UgdXNlIHlvdXIgb3duIHNvdXJjZXMsIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEKKyAgICAgICAgICAgIGxpbnV4LXlvY3RvIGN1c3RvbSByZWNpcGUKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4pIHRoYXQgdXNlcworICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBzb3VyY2VzCisgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIGZvciBtYW5hZ2luZworICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhdDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGJhc2ljIHN0ZXBzIHlvdSBjYW4gdXNlIHRvIHdvcmsgd2l0aCB5b3VyIG93biBzb3VyY2VzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db3B5IHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHlvdXIgbGF5ZXIgYW5kIGdpdmUgaXQgYSBtZWFuaW5nZnVsIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNob3VsZCBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgeW91CisgICAgICAgICAgICAgICAgICAgIGFyZSB1c2luZyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tbXlwcm9qZWN0XzMuMTkuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgIjMuMTkiIGlzIHRoZSBiYXNlIHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHlvdSB3b3VsZCBiZSB3b3JraW5nKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNhbWUgZGlyZWN0b3J5IGluc2lkZSB5b3VyIGxheWVyLAorICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBtYXRjaGluZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdG8gc3RvcmUgeW91ciBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by1teXByb2plY3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGhhdmUgZWl0aGVyIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgb3IgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIGRlZmNvbmZpZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIGNvcHkgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYXMgImRlZmNvbmZpZyIgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZW4gYWRkIGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSByZWNpcGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5SdW5uaW5nIHRoZSA8ZmlsZW5hbWU+bWFrZSBkZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYXMgZGVmaW5lZCBieSB5b3VyIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgbm8gZ3VhcmFudGVlIGV4aXN0cyB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiBpcworICAgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgeW91ciB1c2UgY2FzZSwgb3IgdGhhdCB5b3VyIGJvYXJkIHdpbGwgZXZlbiBib290LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGZvciBub24teDg2IGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSBub24teDg2IDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcywgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgbW9yZSBzcGVjaWZpYyBhbmQgZmluZCBvbmUgdGhhdCBtYXRjaGVzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgYm9hcmQgKGkuZS4gZm9yIGFybSwgeW91IGxvb2sgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyY2gvYXJtL2NvbmZpZ3M8L2ZpbGVuYW1lPiBhbmQgdXNlIHRoZSBvbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBmb3IgeW91ciBib2FyZCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FZGl0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFzIGFwcHJvcHJpYXRlIGZvciB5b3VyIHByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgdGhhdCB1c2VzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoZXIgcHJvdG9jb2xzIChpLmUuIDxmaWxlbmFtZT5maWxlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBzcGVjaWZ5IGVpdGhlciBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgb3Igc29tZSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBza2VsZXRvbiByZWNpcGUgcHJvdmlkZXMgYW4gZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYXMgYSBzeW50YXggcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OJz48ZmlsZW5hbWU+TElOVVhfVkVSU0lPTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IGtlcm5lbCB2ZXJzaW9uIHlvdSBhcmUgdXNpbmcgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMy4xOSIpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTic+PGZpbGVuYW1lPkxJTlVYX1ZFUlNJT05fRVhURU5TSU9OPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfTE9DQUxWRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGNvbXBpbGVkIGludG8gdGhlIHJlc3VsdGluZyBrZXJuZWwgYW5kIHZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21taXQgSUQgZnJvbSB3aGljaCB5b3Ugd2FudCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlYXQgdGhpcyB2YXJpYWJsZSB0aGUgc2FtZSBhcyB5b3Ugd291bGQgaW4gYW55IG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudCB0aGUgdmFyaWFibGUgdG8gaW5kaWNhdGUgdG8gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0aGF0IHRoZSByZWNpcGUgaGFzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGFzc2lnbm1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYWRlcXVhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY29tYmluZXMgdGhlIDxmaWxlbmFtZT5MSU5VWF9WRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21iaW5lZCByZXN1bHRzIGFyZSBhIHN0cmluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgMy4xOS4xMStnaXQxKzY4YTYzNWJmOGRmYjY0YjAyMjYzYzFhYzgwYzk0ODY0N2NjNzZkNWZfMSsyMThiZDhkMjAyMmI5ODUyYzYwZDMyZjBkNzcwOTMxZTNjZjM0M2UyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIGxlbmd0aHksIHRoZSBleHRyYSB2ZXJib3NpdHkgaW4gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwcyBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGZyb20gd2hpY2ggeW91IGludGVuZCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIG1hY2hpbmVzIHN1cHBvcnRlZCBieSB5b3VyIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpbiB0aGUgZXhhbXBsZSByZWNpcGUgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoZSBlbXB0eSBzdHJpbmcsICIoXiQpIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgc2V0dGluZyB0cmlnZ2VycyBhbiBleHBsaWNpdCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIGl0IHRvIG1hdGNoIGEgbGlzdCBvZiB0aGUgbWFjaGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdXIgbmV3IHJlY2lwZSBzdXBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IG1hY2hpbmVzLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdXg4NnxxZW11eDg2LTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgZnVydGhlciBjdXN0b21pemF0aW9ucyB0byB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBhcyBuZWVkZWQganVzdCBhcyB5b3Ugd291bGQgY3VzdG9taXplIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLW91dC1vZi10cmVlLW1vZHVsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzdGVwcyB0byBidWlsZCBvdXQtb2YtdHJlZSBtb2R1bGVzIG9uCisgICAgICAgICAgICB5b3VyIHRhcmdldCBhbmQgZGVzY3JpYmVzIGhvdyB0byBpbmNvcnBvcmF0ZSBvdXQtb2YtdHJlZSBtb2R1bGVzCisgICAgICAgICAgICBpbiB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcy1vbi10aGUtdGFyZ2V0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzIG9uIHRoZSBUYXJnZXQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgdHJhZGl0aW9uYWwgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBtb2RlbCB3b3VsZCBiZQorICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUga2VybmVsIG1vZHVsZXMgYXMgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkCisgICAgICAgICAgICAgICAgcHJvY2VzcywgeW91IG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGJ1aWxkIG1vZHVsZXMgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0LgorICAgICAgICAgICAgICAgIFRoaXMgY291bGQgYmUgdGhlIGNhc2UgaWYgeW91ciB0YXJnZXQgc3lzdGVtIGlzIGNhcGFibGUKKyAgICAgICAgICAgICAgICBhbmQgcG93ZXJmdWwgZW5vdWdoIHRvIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIEJlZm9yZSBkZWNpZGluZyB0byBidWlsZCBvbiB5b3VyIHRhcmdldCwgaG93ZXZlciwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgIGNvbnNpZGVyIHRoZSBiZW5lZml0cyBvZiB1c2luZyBhIHByb3BlciBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGZyb20geW91ciBidWlsZCBob3N0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMgb24KKyAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LCB0aGVyZSBhcmUgc29tZSBzdGVwcyB5b3UgbmVlZCB0byB0YWtlCisgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCB0aGF0IGlzIHJ1bm5pbmcgeW91ciBTREsgaW1hZ2UuCisgICAgICAgICAgICAgICAgQnJpZWZseSwgdGhlIDxmaWxlbmFtZT5rZXJuZWwtZGV2PC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IG9uIGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC1kZXZzcmM8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgIG9uIG1hbnkgb2YgdGhlIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbmVlZCB0byBjcmVhdGUgc29tZSBzY3JpcHRzIHByaW9yIHRvCisgICAgICAgICAgICAgICAgYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgb3V0LW9mLXRyZWUgbW9kdWxlcyBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgdGhhdCBpcyBydW5uaW5nIHRoYXQgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlIG91dC1vZi10cmVlIG1vZHVsZXMsCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYmUgb24gdGhlIHRhcmdldCBhcyByb290IGFuZCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIGNoYW5nZSB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc3JjL2tlcm5lbDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBOZXh0LCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHRoZSBzY3JpcHRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBjZCAvdXNyL3NyYy9rZXJuZWwKKyAgICAgIyBtYWtlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBhbGwgU0RLIGltYWdlIHJlY2lwZXMgaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXYtcGtnczwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgU0RLIGltYWdlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldnNyYzwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiBhcHBsaWNhYmxlIFNESyBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIFNESyB1c2VzIHRoZSBzY3JpcHRzIHdoZW4gYnVpbGRpbmcgb3V0LW9mLXRyZWUKKyAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgc3dpdGNoZWQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kIGNyZWF0ZWQgdGhlCisgICAgICAgICAgICAgICAgc2NyaXB0cywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGJ1aWxkIHlvdXIgb3V0LW9mLXRyZWUgbW9kdWxlcworICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jb3Jwb3JhdGluZy1vdXQtb2YtdHJlZS1tb2R1bGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbmNvcnBvcmF0aW5nIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBhbHdheXMgcHJlZmVyYWJsZSB0byB3b3JrIHdpdGggc291cmNlcyBpbnRlZ3JhdGVkCisgICAgICAgICAgICAgICAgaW50byB0aGUgTGludXgga2VybmVsIHNvdXJjZXMsIGlmIHlvdSBuZWVkIGFuIGV4dGVybmFsIGtlcm5lbAorICAgICAgICAgICAgICAgIG1vZHVsZSwgdGhlIDxmaWxlbmFtZT5oZWxsby1tb2QuYmI8L2ZpbGVuYW1lPiByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICBhdmFpbGFibGUgYXMgYSB0ZW1wbGF0ZSBmcm9tIHdoaWNoIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gb3V0LW9mLXRyZWUgTGludXgga2VybmVsIG1vZHVsZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdGVtcGxhdGUgcmVjaXBlIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9oZWxsby1tb2RfMC4xLmJiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgY29weSB0aGlzIHJlY2lwZSB0byB5b3VyIGxheWVyIGFuZCBnaXZlIGl0IGEKKyAgICAgICAgICAgICAgICBtZWFuaW5nZnVsIG5hbWUgKGUuZy4gPGZpbGVuYW1lPm15bW9kdWxlXzEuMC5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2FtZSBkaXJlY3RvcnksIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiB3aGVyZSB5b3UgY2FuIHN0b3JlIGFueSBzb3VyY2UgZmlsZXMsCisgICAgICAgICAgICAgICAgcGF0Y2hlcywgb3Igb3RoZXIgZmlsZXMgbmVjZXNzYXJ5IGZvciBidWlsZGluZworICAgICAgICAgICAgICAgIHRoZSBtb2R1bGUgdGhhdCBkbyBub3QgY29tZSB3aXRoIHRoZSBzb3VyY2VzLgorICAgICAgICAgICAgICAgIEZpbmFsbHksIHVwZGF0ZSB0aGUgcmVjaXBlIGFzIG5lZWRlZCBmb3IgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFKjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBtb2R1bGUgc291cmNlcywKKyAgICAgICAgICAgICAgICB5b3UgbWlnaHQgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgdHlwaWNhbCBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBsb29rcyBtdWNoIGxpa2UgdGhlIG9uZSBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsby1tb2Q8L2ZpbGVuYW1lPiB0ZW1wbGF0ZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG9iai1tIDo9IGhlbGxvLm8KKworICAgICBTUkMgOj0gJChzaGVsbCBwd2QpCisKKyAgICAgYWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpCisKKyAgICAgbW9kdWxlc19pbnN0YWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpIG1vZHVsZXNfaW5zdGFsbAorICAgICAuLi4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBpbXBvcnRhbnQgcG9pbnQgdG8gbm90ZSBoZXJlIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LRVJORUxfU1JDJz48ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGlzIHZhcmlhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX1BBVEgnPjxmaWxlbmFtZT5LRVJORUxfUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0tFUk5FTF9ESVInPjxmaWxlbmFtZT5TVEFHSU5HX0tFUk5FTF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgd2l0aCB0aGUgbmVjZXNzYXJ5IExpbnV4IGtlcm5lbCBidWlsZCBpbmZvcm1hdGlvbiB0byBidWlsZAorICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgSWYgeW91ciBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gdXNlcyBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB5b3UgbWlnaHQgd2FudCB0byBvdmVycmlkZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGUoKTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGVwLCBvciBjcmVhdGUgYSBwYXRjaCB0bworICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiB0byB3b3JrIHdpdGggdGhlIG1vcmUgdHlwaWNhbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfU1JDPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIHByZXBhcmVkIHlvdXIgcmVjaXBlLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bworICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIG1vZHVsZSBpbiB5b3VyIGltYWdlcy4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBhbmQgc2V0IG9uZSBvZiB0aGVtCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb2R1bGVzIGFyZSBvZnRlbiBub3QgcmVxdWlyZWQgZm9yIGJvb3QgYW5kIGNhbiBiZSBleGNsdWRlZCBmcm9tCisgICAgICAgICAgICAgICAgY2VydGFpbiBidWlsZCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGFsbG93cyBmb3IgdGhlIG1vc3QgZmxleGliaWxpdHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJrZXJuZWwtbW9kdWxlLW15bW9kdWxlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgZGVyaXZlZCBieSBhcHBlbmRpbmcgdGhlIG1vZHVsZSBmaWxlbmFtZSB3aXRob3V0CisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT4ua288L2ZpbGVuYW1lPiBleHRlbnNpb24gdG8gdGhlIHN0cmluZworICAgICAgICAgICAgICAgICJrZXJuZWwtbW9kdWxlLSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIG5vdCBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBidWlsZCB3aWxsIG5vdCBmYWlsIGlmIHRoaXMgbW9kdWxlIGlzIG5vdAorICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworCisgICAgPHNlY3Rpb24gaWQ9J2luc3BlY3RpbmctY2hhbmdlcy1hbmQtY29tbWl0cyc+CisgICAgICAgIDx0aXRsZT5JbnNwZWN0aW5nIENoYW5nZXMgYW5kIENvbW1pdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAiV2hhdCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgdHJlZT8iCisgICAgICAgICAgICBSYXRoZXIgdGhhbiB1c2luZyAiZ3JlcCIgYWNyb3NzIGRpcmVjdG9yaWVzIHRvIHNlZSB3aGF0IGhhcworICAgICAgICAgICAgY2hhbmdlZCwgeW91IGNhbiB1c2UgR2l0IHRvIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgd2F5IHRvIHNlZSB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZSB0cmVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3doYXQtY2hhbmdlZC1pbi1hLWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgYSBmZXcgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UgR2l0CisgICAgICAgICAgICAgICAgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRoZXNlIGV4YW1wbGVzIGFyZSBieSBubyBtZWFucyB0aGUgb25seSB3YXkgdG8gc2VlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdAorICAgICAgICAgICAgICAgICAgICByYW5nZSwgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBoaXN0b3J5IGlzIGJsZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBZb2N0byBQcm9qZWN0IGtlcm5lbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdHJlZSBhcyB0aGUgdXBwZXIgYW5kIGxvd2VyIGNvbW1pdCBtYXJrZXJzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGJyYW5jaCBuYW1lcyB0aHJvdWdoIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgd2hhdGNoYW5nZWQ8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBzcGVjaWZ5IGEKKyAgICAgICAgICAgICAgICBjb21taXQgcmFuZ2UgZm9yIHRoZSBicmFuY2gKKyAgICAgICAgICAgICAgICAoPHJlcGxhY2VhYmxlPmNvbW1pdDwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi4uPC9maWxlbmFtZT48cmVwbGFjZWFibGU+Y29tbWl0PC9yZXBsYWNlYWJsZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBsb29rcyBhdCB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lbWVubG93PC9maWxlbmFtZT4gYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsLgorICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkL2Jhc2U8L2ZpbGVuYW1lPiBicmFuY2gsIHdoaWxlCisgICAgICAgICAgICAgICAgdGhlIHVwcGVyIGNvbW1pdCByYW5nZSBpcyB0aGUgY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IHdoYXRjaGFuZ2VkIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIHNob3J0LCBvbmUgbGluZSBzdW1tYXJpZXMgb2YgY2hhbmdlcyB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBsb2c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgbG9nIC0tb25lbGluZSBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIGNvZGUgZGlmZmVyZW5jZXMgZm9yIHRoZSBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZGlmZiBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICB0ZXh0IGRpZmZlcmVuY2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gY3JlYXRlIGluZGl2aWR1YWwgcGF0Y2hlcyBmb3IKKyAgICAgICAgICAgICAgICBlYWNoIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB0aGF0IGNyZWF0ZXMgcGF0Y2ggZmlsZXMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICBjb21taXQgYW5kIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICRIT01FL0RvY3VtZW50cyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2hvd2luZy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TaG93aW5nIGEgUGFydGljdWxhciBGZWF0dXJlIG9yIEJyYW5jaCBDaGFuZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUYWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIGRpdmlkZSBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGZlYXR1cmVzIG9yIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiZuYnNwOzxyZXBsYWNlYWJsZT50YWc8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgc2hvd3MgY2hhbmdlcyBiYXNlZCBvbiBhIHRhZy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBicmFuY2ggLS1jb250YWluczwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnRhZzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgY29tbWFuZCB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNob3dzIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbXRhcDwvZmlsZW5hbWU+IGZlYXR1cmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTE3NDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCkBAIC0wLDAgKzEsMjUzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8YXBwZW5kaXggaWQ9J2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweCc+Cis8dGl0bGU+QWR2YW5jZWQgS2VybmVsIENvbmNlcHRzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYmlnLXBpY3R1cmUnPgorICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBLZXJuZWwgRGV2ZWxvcG1lbnQgYW5kIE1haW50ZW5hbmNlPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBLZXJuZWxzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0LCBsaWtlIG90aGVyIGtlcm5lbHMsIGFyZSBiYXNlZCBvZmYgdGhlIExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVsZWFzZXMgZnJvbSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lmtlcm5lbC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgQXQgdGhlIGJlZ2lubmluZyBvZiBhIG1ham9yIGRldmVsb3BtZW50IGN5Y2xlLCB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtCisgICAgICAgICAgICBjaG9vc2VzIGl0cyBrZXJuZWwgYmFzZWQgb24gZmFjdG9ycyBzdWNoIGFzIHJlbGVhc2UgdGltaW5nLCB0aGUgYW50aWNpcGF0ZWQgcmVsZWFzZQorICAgICAgICAgICAgdGltaW5nIG9mIGZpbmFsIHVwc3RyZWFtIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbnMsIGFuZCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBmZWF0dXJlIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIFR5cGljYWxseSwgdGhlIGtlcm5lbCBjaG9zZW4gaXMgaW4gdGhlCisgICAgICAgICAgICBmaW5hbCBzdGFnZXMgb2YgZGV2ZWxvcG1lbnQgYnkgdGhlIGNvbW11bml0eS4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUga2VybmVsIGlzIGluIHRoZSByZWxlYXNlCisgICAgICAgICAgICBjYW5kaWRhdGUgb3IgInJjIiBwaGFzZSBhbmQgbm90IHlldCBhIGZpbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBCdXQsIGJ5IGJlaW5nIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YgZXh0ZXJuYWwgZGV2ZWxvcG1lbnQsIHRoZSB0ZWFtIGtub3dzIHRoYXQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+IGZpbmFsIHJlbGVhc2Ugd2lsbCBjbGVhcmx5IGJlIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB3aW5kb3cuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGJhbGFuY2UgYWxsb3dzIHRoZSB0ZWFtIHRvIGRlbGl2ZXIgdGhlIG1vc3QgdXAtdG8tZGF0ZSBrZXJuZWwKKyAgICAgICAgICAgIHBvc3NpYmxlLCB3aGlsZSBzdGlsbCBlbnN1cmluZyB0aGF0IHRoZSB0ZWFtIGhhcyBhIHN0YWJsZSBvZmZpY2lhbCByZWxlYXNlIGZvcgorICAgICAgICAgICAgdGhlIGJhc2VsaW5lIExpbnV4IGtlcm5lbCB2ZXJzaW9uLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHVsdGltYXRlIHNvdXJjZSBmb3Iga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgWW9jdG8gUHJvamVjdCBhcmUgcmVsZWFzZWQga2VybmVscworICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gYSBmb3VuZGF0aW9uYWwga2VybmVsIGZyb20gPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhlCisgICAgICAgICAgICBrZXJuZWxzIGF2YWlsYWJsZSBjb250YWluIGEgbWl4IG9mIGltcG9ydGFudCBuZXcgbWFpbmxpbmUKKyAgICAgICAgICAgIGRldmVsb3BtZW50cywgbm9uLW1haW5saW5lIGRldmVsb3BtZW50cyAod2hlbiB0aGVyZSBpcyBubyBhbHRlcm5hdGl2ZSksCisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgZGV2ZWxvcG1lbnRzLAorICAgICAgICAgICAgYW5kIGN1c3RvbSBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZXNlIGFkZGl0aW9ucyByZXN1bHQgaW4gYSBjb21tZXJjaWFsbHkgcmVsZWFzZWQgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdGhhdCBjYXRlcnMKKyAgICAgICAgICAgIHRvIHNwZWNpZmljIGVtYmVkZGVkIGRlc2lnbmVyIG5lZWRzIGZvciB0YXJnZXRlZCBoYXJkd2FyZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgYSBrZXJuZWwgaXMgb2ZmaWNpYWxseSByZWxlYXNlZCwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSBnb2VzIGludG8KKyAgICAgICAgICAgIHRoZWlyIG5leHQgZGV2ZWxvcG1lbnQgY3ljbGUsIG9yIHVwd2FyZCByZXZpc2lvbiAodXByZXYpIGN5Y2xlLCB3aGlsZSBzdGlsbAorICAgICAgICAgICAgY29udGludWluZyBtYWludGVuYW5jZSBvbiB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW9zdCBzdXN0YWluYWJsZSBhbmQgc3RhYmxlIHdheQorICAgICAgICAgICAgdG8gaW5jbHVkZSBmZWF0dXJlIGRldmVsb3BtZW50IHVwc3RyZWFtIGlzIHRocm91Z2ggYSBrZXJuZWwgdXByZXYgcHJvY2Vzcy4KKyAgICAgICAgICAgIEJhY2stcG9ydGluZyBodW5kcmVkcyBvZiBpbmRpdmlkdWFsIGZpeGVzIGFuZCBtaW5vciBmZWF0dXJlcyBmcm9tIHZhcmlvdXMKKyAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9ucyBpcyBub3Qgc3VzdGFpbmFibGUgYW5kIGNhbiBlYXNpbHkgY29tcHJvbWlzZSBxdWFsaXR5LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIHRoZSB1cHJldiBjeWNsZSwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB1c2VzIGFuIG9uZ29pbmcgYW5hbHlzaXMgb2YKKyAgICAgICAgICAgIGtlcm5lbCBkZXZlbG9wbWVudCwgQlNQIHN1cHBvcnQsIGFuZCByZWxlYXNlIHRpbWluZyB0byBzZWxlY3QgdGhlIGJlc3QKKyAgICAgICAgICAgIHBvc3NpYmxlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbi4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNvbnRpbnVhbGx5IG1vbml0b3JzIGNvbW11bml0eSBrZXJuZWwKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHRvIGxvb2sgZm9yIHNpZ25pZmljYW50IGZlYXR1cmVzIG9mIGludGVyZXN0LgorICAgICAgICAgICAgVGhlIHRlYW0gZG9lcyBjb25zaWRlciBiYWNrLXBvcnRpbmcgbGFyZ2UgZmVhdHVyZXMgaWYgdGhleSBoYXZlIGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlLgorICAgICAgICAgICAgVXNlciBvciBjb21tdW5pdHkgZGVtYW5kIGNhbiBhbHNvIHRyaWdnZXIgYSBiYWNrLXBvcnQgb3IgY3JlYXRpb24gb2YgbmV3CisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCBkdXJpbmcgdGhlIHVwcmV2IGN5Y2xlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCBldmVyeSBuZXcga2VybmVsIGJvdGggYWRkcyBmZWF0dXJlcyBhbmQgaW50cm9kdWNlcyBuZXcgYnVncy4KKyAgICAgICAgICAgIFRoZXNlIGNvbnNlcXVlbmNlcyBhcmUgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdXBzdHJlYW0ga2VybmVsIGRldmVsb3BtZW50IGFuZCBhcmUKKyAgICAgICAgICAgIG1hbmFnZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSdzIGtlcm5lbCBzdHJhdGVneS4KKyAgICAgICAgICAgIEl0IGlzIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0ncyBwb2xpY3kgdG8gbm90IGJhY2stcG9ydCBtaW5vciBmZWF0dXJlcyB0byB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgVGhleSBvbmx5IGNvbnNpZGVyIGJhY2stcG9ydGluZyBzaWduaWZpY2FudCB0ZWNobm9sb2dpY2FsIGp1bXBzIC0gYW5kLCB0aGF0IGlzIGRvbmUKKyAgICAgICAgICAgIGFmdGVyIGEgY29tcGxldGUgZ2FwIGFuYWx5c2lzLgorICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBwb2xpY3kgaXMgdGhhdCBiYWNrLXBvcnRpbmcgYW55IHNtYWxsIHRvIG1lZGl1bSBzaXplZCBjaGFuZ2UKKyAgICAgICAgICAgIGZyb20gYW4gZXZvbHZpbmcga2VybmVsIGNhbiBlYXNpbHkgY3JlYXRlIG1pc21hdGNoZXMsIGluY29tcGF0aWJpbGl0aWVzIGFuZCB2ZXJ5CisgICAgICAgICAgICBzdWJ0bGUgZXJyb3JzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlc2UgcG9saWNpZXMgcmVzdWx0IGluIGJvdGggYSBzdGFibGUgYW5kIGEgY3V0dGluZworICAgICAgICAgICAgZWRnZSBrZXJuZWwgdGhhdCBtaXhlcyBmb3J3YXJkIHBvcnRzIG9mIGV4aXN0aW5nIGZlYXR1cmVzIGFuZCBzaWduaWZpY2FudCBhbmQgY3JpdGljYWwKKyAgICAgICAgICAgIG5ldyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgRm9yd2FyZCBwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFlvY3RvIFByb2plY3Qga2VybmVsCisgICAgICAgICAgICBjYW4gYmUgdGhvdWdodCBvZiBhcyBhICJtaWNybyB1cHJldi4iCisgICAgICAgICAgICBUaGUgbWFueSDigJxtaWNybyB1cHJldnPigJ0gcHJvZHVjZSBhIGtlcm5lbCB2ZXJzaW9uIHdpdGggYSBtaXggb2YKKyAgICAgICAgICAgIGltcG9ydGFudCBuZXcgbWFpbmxpbmUsIG5vbi1tYWlubGluZSwgQlNQIGRldmVsb3BtZW50cyBhbmQgZmVhdHVyZSBpbnRlZ3JhdGlvbnMuCisgICAgICAgICAgICBUaGlzIGtlcm5lbCBnaXZlcyBpbnNpZ2h0IGludG8gbmV3IGZlYXR1cmVzIGFuZCBhbGxvd3MgZm9jdXNlZAorICAgICAgICAgICAgYW1vdW50cyBvZiB0ZXN0aW5nIHRvIGJlIGRvbmUgb24gdGhlIGtlcm5lbCwgd2hpY2ggcHJldmVudHMKKyAgICAgICAgICAgIHN1cnByaXNlcyB3aGVuIHNlbGVjdGluZyB0aGUgbmV4dCBtYWpvciB1cHJldi4KKyAgICAgICAgICAgIFRoZSBxdWFsaXR5IG9mIHRoZXNlIGN1dHRpbmcgZWRnZSBrZXJuZWxzIGlzIGV2b2x2aW5nIGFuZCB0aGUga2VybmVscyBhcmUgdXNlZCBpbiBsZWFkaW5nIGVkZ2UKKyAgICAgICAgICAgIGZlYXR1cmUgYW5kIEJTUCBkZXZlbG9wbWVudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYXJjaGl0ZWN0dXJlJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBBcmNoaXRlY3R1cmU8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uCisgICAgICAgICAgICBvbiB0aGUgbWVjaGFuaXNtcyB1c2VkIHRvIGFjaGlldmUgdGhhdCBhcmNoaXRlY3R1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgYSBrZXkgZ29hbCBvZiB0aGUgWW9jdG8gUHJvamVjdCBpcyB0byBwcmVzZW50IHRoZQorICAgICAgICAgICAgICAgIGRldmVsb3BlciB3aXRoCisgICAgICAgICAgICAgICAgYSBrZXJuZWwgdGhhdCBoYXMgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5IHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4KKyAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIGFuZCBtZWNoYW5pc21zIHVzZWQgYWNoaWV2ZSB0aGF0IGdvYWwgaW4gYSBtYW5uZXIgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiBhIFlvY3RvIFByb2plY3Qga2VybmVsIGFzIGNvbnNpc3Rpbmcgb2YgYSBiYXNlbGluZSBMaW51eCBrZXJuZWwgd2l0aAorICAgICAgICAgICAgICAgIGFkZGVkIGZlYXR1cmVzIGxvZ2ljYWxseSBzdHJ1Y3R1cmVkIG9uIHRvcCBvZiB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmVzIGFyZSB0YWdnZWQgYW5kIG9yZ2FuaXplZCBieSB3YXkgb2YgYSBicmFuY2hpbmcgc3RyYXRlZ3kgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgbWFuYWdlciAoU0NNKSBHaXQuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdpdCBhcyBhcHBsaWVkIHRvIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIHVzZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNlZSB0aGUgYWRkZWQgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICAgICAgdGhlIGNvbW1pdHMgdGhhdCBtYWtlIHVwIHRob3NlIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIGJlaW5nIGFibGUgdG8gc2VlIGFkZGVkIGZlYXR1cmVzLCB0aGUgdXNlciBjYW4gYWxzbyB2aWV3IHRoZSBoaXN0b3J5IG9mIHdoYXQKKyAgICAgICAgICAgICAgICBtYWRlIHVwIHRoZSBiYXNlbGluZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBzaG93cyB0aGUgY29uY2VwdHVhbCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBpbGx1c3RyYXRpb24sIHRoZSAiS2VybmVsLm9yZyBCcmFuY2ggUG9pbnQiCisgICAgICAgICAgICAgICAgbWFya3MgdGhlIHNwZWNpZmljIHNwb3QgKG9yIHJlbGVhc2UpIGZyb20KKyAgICAgICAgICAgICAgICB3aGljaCB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBGcm9tIHRoaXMgcG9pbnQgInVwIiBpbiB0aGUgdHJlZSwgZmVhdHVyZXMgYW5kIGRpZmZlcmVuY2VzIGFyZSBvcmdhbml6ZWQgYW5kIHRhZ2dlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAiWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwiIGNvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gdG8gZXZlcnkga2VybmVsCisgICAgICAgICAgICAgICAgdHlwZSBhbmQgQlNQIHRoYXQgaXMgb3JnYW5pemVkIGZ1cnRoZXIgdXAgdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgUGxhY2luZyB0aGVzZSBjb21tb24gZmVhdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJlZSB0aGlzIHdheSBtZWFucyBmZWF0dXJlcyBkbyBub3QgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGFsb25nIGluZGl2aWR1YWwgYnJhbmNoZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRnJvbSB0aGUgWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwsIGJyYW5jaCBwb2ludHMgcmVwcmVzZW50IHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICBmb3IgaW5kaXZpZHVhbCBCU1BzIGFzIHdlbGwgYXMgcmVhbC10aW1lIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgVGhlIGlsbHVzdHJhdGlvbiByZXByZXNlbnRzIHRoaXMgdGhyb3VnaCB0aHJlZSBCU1Atc3BlY2lmaWMgYnJhbmNoZXMgYW5kIGEgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCByZXByZXNlbnRzIHNvbWUgdW5pcXVlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBCU1Agb3IgYSByZWFsLXRpbWUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlIHN0cnVjdHVyZSwgdGhlIHJlYWwtdGltZSBrZXJuZWwgYnJhbmNoIGhhcyBjb21tb24gZmVhdHVyZXMgZm9yIGFsbAorICAgICAgICAgICAgICAgIHJlYWwtdGltZSBrZXJuZWxzIGFuZCBjb250YWlucworICAgICAgICAgICAgICAgIG1vcmUgYnJhbmNoZXMgZm9yIGluZGl2aWR1YWwgQlNQLXNwZWNpZmljIHJlYWwtdGltZSBrZXJuZWxzLgorICAgICAgICAgICAgICAgIFRoZSBpbGx1c3RyYXRpb24gc2hvd3MgdGhyZWUgYnJhbmNoZXMgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCBwb2ludHMgdGhlIHdheSB0byBzcGVjaWZpYywgdW5pcXVlIGZlYXR1cmVzIGZvciBhIHJlc3BlY3RpdmUgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGFzIHRoZXkgYXBwbHkgdG8gYSBnaXZlbiBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIHByZXNlbnRzIGEgY2xlYXIgcGF0aCBvZiBtYXJrZXJzIChvciBicmFuY2hlcykgdG8gdGhlCisgICAgICAgICAgICAgICAgZGV2ZWxvcGVyIHRoYXQsIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLCBpcyB0aGUga2VybmVsIG5lZWRlZCBmb3IgYW55IGdpdmVuIHNldAorICAgICAgICAgICAgICAgIG9mIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdicmFuY2hpbmctYW5kLXdvcmtmbG93Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CcmFuY2hpbmcgU3RyYXRlZ3kgYW5kIFdvcmtmbG93PC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gY3JlYXRlcyBrZXJuZWwgYnJhbmNoZXMgYXQgcG9pbnRzIHdoZXJlIGZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgICAgICAgICBubyBsb25nZXIgc2hhcmVkIGFuZCB0aHVzLCBuZWVkcyB0byBiZSBpc29sYXRlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYm9hcmQtc3BlY2lmaWMgaW5jb21wYXRpYmlsaXRpZXMgd291bGQgcmVxdWlyZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgIGFuZCB3b3VsZCByZXF1aXJlIGEgYnJhbmNoIHRvIHNlcGFyYXRlIHRoZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICBMaWtld2lzZSwgZm9yIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcywgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGlzIHVzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaGluZyBzdHJhdGVneSByZXN1bHRzIGluIGEgdHJlZSB0aGF0IGhhcyBmZWF0dXJlcyBvcmdhbml6ZWQgdG8gYmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICBmb3IgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5LCBzaW5nbGUga2VybmVsIHR5cGVzLCBvciBhIHN1YnNldCBvZiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzdHJhdGVneSBhbHNvIHJlc3VsdHMgaW4gbm90IGhhdmluZyB0byBzdG9yZSB0aGUgc2FtZSBmZWF0dXJlIHR3aWNlCisgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBpbiB0aGUgdHJlZS4KKyAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSBrZXJuZWwgdGVhbSBzdG9yZXMgdGhlIHVuaXF1ZSBkaWZmZXJlbmNlcyByZXF1aXJlZCB0byBhcHBseSB0aGUKKyAgICAgICAgICAgICAgICBmZWF0dXJlIG9udG8gdGhlIGtlcm5lbCB0eXBlIGluIHF1ZXN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHN0cml2ZXMgdG8gcGxhY2UgZmVhdHVyZXMgaW4gdGhlIHRyZWUgc3VjaCB0aGF0IHRoZXkgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBieSBhbGwgYm9hcmRzIGFuZCBrZXJuZWwgdHlwZXMgd2hlcmUgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGR1cmluZyBkZXZlbG9wbWVudCBjeWNsZXMgb3Igd2hlbiBsYXJnZSBmZWF0dXJlcyBhcmUgbWVyZ2VkLAorICAgICAgICAgICAgICAgICAgICB0aGUgdGVhbSBjYW5ub3QgYWx3YXlzIGZvbGxvdyB0aGlzIHByYWN0aWNlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aG9zZSBjYXNlcywgdGhlIHRlYW0gdXNlcyBpc29sYXRlZCBicmFuY2hlcyB0byBtZXJnZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCU1Atc3BlY2lmaWMgY29kZSBhZGRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBrZXJuZWwtc3BlY2lmaWMgYWRkaXRpb25zLgorICAgICAgICAgICAgICAgIFNvbWUgQlNQcyBvbmx5IG1ha2Ugc2Vuc2UgZ2l2ZW4gY2VydGFpbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgU28sIGZvciB0aGVzZSB0eXBlcywgdGhlIHRlYW0gY3JlYXRlcyBicmFuY2hlcyBvZmYgdGhlIGVuZCBvZiB0aGF0IGtlcm5lbCB0eXBlIGZvciBhbGwKKyAgICAgICAgICAgICAgICBvZiB0aGUgQlNQcyB0aGF0IGFyZSBzdXBwb3J0ZWQgb24gdGhhdCBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgdG9vbHMgdGhhdCBjcmVhdGUgdGhlIEJTUCBicmFuY2gsIHRoZSBCU1AgaXMgcmVhbGx5IG5vCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IHRoYW4gYSBmZWF0dXJlLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGFwcGxpZXMgdG8gQlNQcyBhcyBpdCBkb2VzIHRvIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIFNvIGFnYWluLCByYXRoZXIgdGhhbiBzdG9yZSB0aGUgQlNQIHR3aWNlLCB0aGUgdGVhbSBvbmx5IHN0b3JlcyB0aGUgdW5pcXVlCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMgZm9yIHRoZSBCU1AgYWNyb3NzIHRoZSBzdXBwb3J0ZWQgbXVsdGlwbGUga2VybmVscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoaWxlIHRoaXMgc3RyYXRlZ3kgY2FuIHJlc3VsdCBpbiBhIHRyZWUgd2l0aCBhIHNpZ25pZmljYW50IG51bWJlciBvZiBicmFuY2hlcywgaXQgaXMKKyAgICAgICAgICAgICAgICBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGZyb20gdGhlIGRldmVsb3BlcidzIHBvaW50IG9mIHZpZXcsIHRoZXJlIGlzIGEgbGluZWFyCisgICAgICAgICAgICAgICAgcGF0aCB0aGF0IHRyYXZlbHMgZnJvbSB0aGUgYmFzZWxpbmUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhyb3VnaCBhIHNlbGVjdAorICAgICAgICAgICAgICAgIGdyb3VwIG9mIGZlYXR1cmVzIGFuZCBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBkaXZpc2lvbnMgb2YgdGhlIGtlcm5lbCBhcmUgdHJhbnNwYXJlbnQgYW5kIGFyZSBub3QgcmVsZXZhbnQKKyAgICAgICAgICAgICAgICB0byB0aGUgZGV2ZWxvcGVyIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRoIGlzIHRoZSAibWFzdGVyIiBicmFuY2guCisgICAgICAgICAgICAgICAgVGhlIGRldmVsb3BlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBleGlzdGVuY2Ugb2YgYW55IG90aGVyIGJyYW5jaGVzIGF0IGFsbC4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZXJlIGlzIHZhbHVlIGluIHRoZSBleGlzdGVuY2Ugb2YgdGhlc2UgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICBpbiB0aGUgdHJlZSwgc2hvdWxkIGEgcGVyc29uIGRlY2lkZSB0byBleHBsb3JlIHRoZW0uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byBCU1BzIGF0IGVpdGhlciB0aGUgY29tbWl0IGxldmVsIG9yIGF0IHRoZSBsaW5lLWJ5LWxpbmUKKyAgICAgICAgICAgICAgICBjb2RlIDxmaWxlbmFtZT5kaWZmPC9maWxlbmFtZT4gbGV2ZWwgaXMgbm93IGEgdHJpdmlhbCBvcGVyYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXb3JraW5nIHdpdGggdGhlIGtlcm5lbCBhcyBhIHN0cnVjdHVyZWQgdHJlZSBmb2xsb3dzIHJlY29nbml6ZWQgY29tbXVuaXR5IGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBrZXJuZWwgYXMgc2hpcHBlZCB3aXRoIHRoZSBwcm9kdWN0LCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICBjb25zaWRlcmVkIGFuICJ1cHN0cmVhbSBzb3VyY2UiIGFuZCB2aWV3ZWQgYXMgYSBzZXJpZXMgb2YKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2FsIGFuZCBkb2N1bWVudGVkIG1vZGlmaWNhdGlvbnMgKGNvbW1pdHMpLgorICAgICAgICAgICAgICAgIFRoZXNlIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50IHRoZSBkZXZlbG9wbWVudCBhbmQgc3RhYmlsaXphdGlvbiBkb25lCisgICAgICAgICAgICAgICAgYnkgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGRldmVsb3BtZW50IHRlYW0uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGNvbW1pdHMgb25seSBjaGFuZ2UgYXQgc2lnbmlmaWNhbnQgcmVsZWFzZSBwb2ludHMgaW4gdGhlIHByb2R1Y3QgbGlmZSBjeWNsZSwKKyAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIGNhbiB3b3JrIG9uIGEgYnJhbmNoIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBsYXN0IHJlbGV2YW50IGNvbW1pdCBpbiB0aGUgc2hpcHBlZCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgcHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBpcyB0cmFuc3BhcmVudCB0byB0aGUgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUga2VybmVsIHRyZWUgaXMgbGVmdCBpbiB0aGlzIHN0YXRlIGFmdGVyIGNsb25pbmcgYW5kIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc291cmNlLWNvZGUtbWFuYWdlci1naXQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb2RlIE1hbmFnZXIgLSBHaXQ8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgaXMgR2l0LgorICAgICAgICAgICAgICAgIFRoaXMgU0NNIGlzIHRoZSBvYnZpb3VzIG1lY2hhbmlzbSBmb3IgbWVldGluZyB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgZ29hbHMuCisgICAgICAgICAgICAgICAgTm90IG9ubHkgaXMgaXQgdGhlIFNDTSBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBidXQsCisgICAgICAgICAgICAgICAgR2l0IGNvbnRpbnVlcyB0byBncm93IGluIHBvcHVsYXJpdHkgYW5kIHN1cHBvcnRzIG1hbnkgZGlmZmVyZW50IHdvcmsgZmxvd3MsCisgICAgICAgICAgICAgICAgZnJvbnQtZW5kcyBhbmQgbWFuYWdlbWVudCB0ZWNobmlxdWVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGRvY3VtZW50YXRpb24gb24gR2l0IGF0IDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IGFuIGludHJvZHVjdGlvbiB0byBHaXQgYXMgaXQgYXBwbGllcyB0byB0aGUgWW9jdG8gUHJvamVjdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICBUaGVzZSByZWZlcmVuY2VkIHNlY3Rpb25zIG92ZXJ2aWV3IEdpdCBhbmQgZGVzY3JpYmUgYSBtaW5pbWFsIHNldCBvZgorICAgICAgICAgICAgICAgIGNvbW1hbmRzIHRoYXQgYWxsb3dzIHlvdSB0byBiZSBmdW5jdGlvbmFsIHVzaW5nIEdpdC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYXMgbXVjaCwgb3IgYXMgbGl0dGxlLCBvZiB3aGF0IEdpdCBoYXMgdG8gb2ZmZXIgdG8gYWNjb21wbGlzaCB3aGF0CisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGZvciB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBiZSBhICJHaXQgTWFzdGVyIiBpbiBvcmRlciB0byB1c2UgaXQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2FwcGVuZGl4PgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjViNzM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidrZXJuZWwtZGV2LXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1NmE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL2tlcm5lbC1kZXYvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZXhhbXBsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOWFlZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDkxOCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1ob3ctdG8nPgorCis8dGl0bGU+V29ya2luZyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IEtlcm5lbDwvdGl0bGU+CisKKworPHNlY3Rpb24gaWQ9J2FjdGlvbnMtb3JnJz4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBob3cgdG8gYWNjb21wbGlzaCB0YXNrcyBpbnZvbHZpbmcgYSBrZXJuZWwncyB0cmVlIHN0cnVjdHVyZS4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGlzIGRlc2lnbmVkIHRvIGhlbHAgdGhlIGRldmVsb3BlciB0aGF0IHdhbnRzIHRvIG1vZGlmeSB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdCBrZXJuZWwgYW5kIGNvbnRyaWJ1dGUgY2hhbmdlcyB1cHN0cmVhbSB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGNvdmVycyB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRyZWUgY29uc3RydWN0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgc3RyYXRlZ2llczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldvcmtmbG93IGV4YW1wbGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0cmVlLWNvbnN0cnVjdGlvbic+CisgICAgICAgIDx0aXRsZT5UcmVlIENvbnN0cnVjdGlvbjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBjb25zdHJ1Y3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGFzIGFjY29tcGxpc2hlZCBieSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHRvIGNyZWF0ZSBrZXJuZWwgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgVGhlc2Uga2VybmVsIHJlcG9zaXRvcmllcyBhcmUgZm91bmQgdW5kZXIgdGhlIGhlYWRpbmcgIllvY3RvIExpbnV4IEtlcm5lbCIgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+JllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBjYW4gYmUgc2hpcHBlZCBhcyBwYXJ0IG9mIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgVGhlIHRlYW0gY3JlYXRlcyB0aGVzZSByZXBvc2l0b3JpZXMgYnkKKyAgICAgICAgICAgIGNvbXBpbGluZyBhbmQgZXhlY3V0aW5nIHRoZSBzZXQgb2YgZmVhdHVyZSBkZXNjcmlwdGlvbnMgZm9yIGV2ZXJ5IEJTUC9mZWF0dXJlCisgICAgICAgICAgICBpbiB0aGUgcHJvZHVjdC4KKyAgICAgICAgICAgIFRob3NlIGZlYXR1cmUgZGVzY3JpcHRpb25zIGxpc3QgYWxsIG5lY2Vzc2FyeSBwYXRjaGVzLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgYnJhbmNoaW5nLCB0YWdnaW5nIGFuZCBmZWF0dXJlIGRpdmlzaW9ucyBmb3VuZCBpbiBhIGtlcm5lbC4KKyAgICAgICAgICAgIFRodXMsIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3J5IChvciB0cmVlKSBpcyBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBleGlzdGVuY2Ugb2YgdGhpcyB0cmVlIGFsbG93cyB5b3UgdG8gYWNjZXNzIGFuZCBjbG9uZSBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCB0byBidWlsZCBpbWFnZXMgYmFzZWQgb24gdGhlaXIgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgZmlsZXMgdXNlZCB0byBkZXNjcmliZSBhbGwgdGhlIHZhbGlkIGZlYXR1cmVzIGFuZCBCU1BzCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaW4gYW55IGNsb25lIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeQorICAgICAgICAgICAgR2l0IHRyZWUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGNsb25lcyB0aGUgWW9jdG8gUHJvamVjdCBiYXNlbGluZSBrZXJuZWwgdGhhdAorICAgICAgICAgICAgYnJhbmNoZWQgb2ZmIG9mIDxmaWxlbmFtZT5saW51eC5vcmc8L2ZpbGVuYW1lPiB2ZXJzaW9uIDMuNDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy40CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAga2VybmVsIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvdWxpbms+IiBidWxsZXRlZAorICAgICAgICAgICAgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNsb25lZCB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5IG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgeW91IGNhbgorICAgICAgICAgICAgc3dpdGNoIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGJyYW5jaCB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhc3N1bWVzIHRoZSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGtlcm5lbCBpcyBpbgorICAgICAgICAgICAgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2xpbnV4LXlvY3RvLTMuNAorICAgICAkIGdpdCBjaGVja291dCAtYiBtZXRhIG9yaWdpbi9tZXRhCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNoZWNrZWQgb3V0IGFuZCBzd2l0Y2hlZCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsCisgICAgICAgICAgICB5b3UgY2FuIHNlZSBhIHNuYXBzaG90IG9mIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmUgZGVzY3JpcHRpb25zIHRoYXQgYXJlCisgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoYXQgcGFydGljdWxhciBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZXNlIGRlc2NyaXB0aW9ucyBhcmUgaW4gdGhlIGZvcm0gb2YgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCBicm93c2luZyB5b3VyIGxvY2FsIGtlcm5lbCByZXBvc2l0b3J5CisgICAgICAgICAgICBmb3IgZmVhdHVyZSBkZXNjcmlwdGlvbnMgYW5kIHBhdGNoZXMgaXMgbm90IGFuIGVmZmVjdGl2ZSB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgaW4gYQorICAgICAgICAgICAgcGFydGljdWxhciBrZXJuZWwgYnJhbmNoLgorICAgICAgICAgICAgSW5zdGVhZCwgeW91IHNob3VsZCB1c2UgR2l0IGRpcmVjdGx5IHRvIGRpc2NvdmVyIHRoZSBjaGFuZ2VzIGluIGEgYnJhbmNoLgorICAgICAgICAgICAgVXNpbmcgR2l0IGlzIGFuIGVmZmljaWVudCBhbmQgZmxleGlibGUgd2F5IHRvIGluc3BlY3QgY2hhbmdlcyB0byB0aGUga2VybmVsLgorICAgICAgICAgICAgRm9yIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSBHaXQgdG8gaW5zcGVjdCBrZXJuZWwgY29tbWl0cywgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMKKyAgICAgICAgICAgIGluIHRoaXMgY2hhcHRlci4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtic3BfbmFtZSZndDstJmx0O2tlcm5lbF90eXBlJmd0Oy5zY2MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PbmNlIGxvY2F0ZWQsIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uIGlzIGVpdGhlciBjb21waWxlZCBpbnRvIGEgc2ltcGxlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICBvZiBhY3Rpb25zLCBvciBpbnRvIGFuIGV4aXN0aW5nIGVxdWl2YWxlbnQgc2NyaXB0IHRoYXQgaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzaGlwcGVkIGtlcm5lbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgZmVhdHVyZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZmVhdHVyZXMgY2FuIGNvbWUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9GRUFUVVJFUyc+PGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWFjaCBleHRyYSBmZWF0dXJlIGlzIGxvY2F0ZWQsIGNvbXBpbGVkIGFuZCBhcHBlbmRlZCB0byB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiBzdGVwIHRocmVlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHRvIHByb2R1Y2UgYSBzZXJpZXMgb2YgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBkaXJlY3RvcmllcyBhcmUgZGVzY3JpcHRpb25zIG9mIGFsbCB0aGUgYnJhbmNoZXMsIHRhZ3MsIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBiYXNlIEdpdCByZXBvc2l0b3J5IHRvIGNvbXBsZXRlbHkgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKGJ1aWxkKSBicmFuY2ggZm9yIHRoZSBuZXcgQlNQIG9yIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBiYXNlIHJlcG9zaXRvcnkgaXMgY2xvbmVkLCBhbmQgdGhlIGFjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYXJlIGFwcGxpZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHRyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBHaXQgcmVwb3NpdG9yeSBpcyBsZWZ0IHdpdGggdGhlIGRlc2lyZWQgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCBhbnkKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnJhbmNoaW5nLCBwYXRjaGluZyBhbmQgdGFnZ2luZyBoYXMgYmVlbiBwZXJmb3JtZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGtlcm5lbCB0cmVlIGlzIG5vdyByZWFkeSBmb3IgZGV2ZWxvcGVyIGNvbnN1bXB0aW9uIHRvIGJlIGxvY2FsbHkgY2xvbmVkLAorICAgICAgICAgICAgY29uZmlndXJlZCwgYW5kIGJ1aWx0IGludG8gYSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzcGVjaWZpYyB0byBzb21lIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgIDxub3RlPjxwYXJhPlRoZSBnZW5lcmF0ZWQgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGFkZCB0byB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgQW55IGFkZC1vbnMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmUgYXBwbGllZCB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBUaGUgZnVsbCByZXBvc2l0b3J5IGdlbmVyYXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBvZmZpY2lhbCBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPmh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgYm9hcmRzIGFuZCBjb25maWd1cmF0aW9ucy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHRlY2huaXF1ZSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHVzZXMgaXMgZmxleGlibGUgYW5kIGFsbG93cyBmb3Igc2VhbWxlc3MKKyAgICAgICAgICAgICAgICBibGVuZGluZyBvZiBhbiBpbW11dGFibGUgaGlzdG9yeSB3aXRoIGFkZGl0aW9uYWwgcGF0Y2hlcyBzcGVjaWZpYyB0byBhCisgICAgICAgICAgICAgICAgZGVwbG95bWVudC4KKyAgICAgICAgICAgICAgICBBbnkgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwgYmVjb21lIGFuIGludGVncmF0ZWQgcGFydCBvZiB0aGUgYnJhbmNoZXMuPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXN0cmF0ZWd5Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIFN0cmF0ZWd5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGV4aXN0cyBvbiBhIGRldmVsb3BtZW50IHN5c3RlbSwKKyAgICAgICAgICAgIHlvdSBjYW4gY29uc2lkZXIgdGhlIGNvbXBpbGF0aW9uIHBoYXNlIG9mIGtlcm5lbCBkZXZlbG9wbWVudCAtIGJ1aWxkaW5nIGEga2VybmVsIGltYWdlLgorICAgICAgICAgICAgU29tZSBwcmVyZXF1aXNpdGVzIGV4aXN0IHRoYXQgYXJlIHZhbGlkYXRlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBiZWZvcmUgY29tcGlsYXRpb24KKyAgICAgICAgICAgIHN0YXJ0czoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPiBwb2ludHMKKyAgICAgICAgICAgICAgICB0byB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgQlNQIGJ1aWxkIGJyYW5jaCBleGlzdHMuCisgICAgICAgICAgICAgICAgVGhpcyBicmFuY2ggaGFzIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtrZXJuZWxfdHlwZSZndDsvJmx0O2JzcF9uYW1lJmd0OworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUCwgc2VlCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3dvcmtmbG93LWV4YW1wbGVzJz5Xb3JrZmxvdyBFeGFtcGxlczwvbGluaz4iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWZvcmUgYnVpbGRpbmcgYSBrZXJuZWwsIHRoZSBidWlsZCBwcm9jZXNzIHZlcmlmaWVzIHRoZSB0cmVlCisgICAgICAgICAgICBhbmQgY29uZmlndXJlcyB0aGUga2VybmVsIGJ5IHByb2Nlc3NpbmcgYWxsIG9mIHRoZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiAiZnJhZ21lbnRzIiBzcGVjaWZpZWQgYnkgZmVhdHVyZSBkZXNjcmlwdGlvbnMgaW4gdGhlIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgQXMgdGhlIGZlYXR1cmVzIGFyZSBjb21waWxlZCwgYXNzb2NpYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYXJlIG5vdGVkCisgICAgICAgICAgICBhbmQgcmVjb3JkZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBzZXJpZXMgb2YgZGlyZWN0b3JpZXMgaW4gdGhlaXIgY29tcGlsYXRpb24gb3JkZXIuCisgICAgICAgICAgICBUaGUgZnJhZ21lbnRzIGFyZSBtaWdyYXRlZCwgcHJlLXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBMaW51eCBLZXJuZWwKKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gc3Vic3lzdGVtICg8ZmlsZW5hbWU+bGtjPC9maWxlbmFtZT4pIGFzIHJhdyBpbnB1dCBpbiB0aGUgZm9ybQorICAgICAgICAgICAgb2YgYSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+IHVzZXMgaXRzIG93biBpbnRlcm5hbCBkZXBlbmRlbmN5IGNvbnN0cmFpbnRzIHRvIGRvIHRoZSBmaW5hbAorICAgICAgICAgICAgcHJvY2Vzc2luZyBvZiB0aGF0IGluZm9ybWF0aW9uIGFuZCBnZW5lcmF0ZXMgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgdGhhdCBpcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNpbmcgdGhlIGJvYXJkJ3MgYXJjaGl0ZWN0dXJlIGFuZCBvdGhlciByZWxldmFudCB2YWx1ZXMgZnJvbSB0aGUgYm9hcmQncyB0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGtlcm5lbCBjb21waWxhdGlvbiBpcyBzdGFydGVkIGFuZCBhIGtlcm5lbCBpbWFnZSBpcyBwcm9kdWNlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG90aGVyIHRoaW5nIHRoYXQgeW91IG5vdGljZSBvbmNlIHlvdSBjb25maWd1cmUgYSBrZXJuZWwgaXMgdGhhdAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGEgYnVpbGQgdHJlZSB0aGF0IGlzIHNlcGFyYXRlIGZyb20geW91ciBrZXJuZWwncyBsb2NhbCBHaXQKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5IHRyZWUuCisgICAgICAgICAgICBUaGlzIGJ1aWxkIHRyZWUgaGFzIGEgbmFtZSB0aGF0IHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtLCB3aGVyZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUFDSElORX08L2ZpbGVuYW1lPiBpcyB0aGUgbWV0YWRhdGEgbmFtZSBvZiB0aGUgbWFjaGluZSAoQlNQKSBhbmQgImtlcm5lbF90eXBlIiBpcyBvbmUKKyAgICAgICAgICAgIG9mIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMgKGUuZy4gInN0YW5kYXJkIik6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbGludXgtJHtNQUNISU5FfS0mbHQ7a2VybmVsX3R5cGUmZ3Q7LWJ1aWxkCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0aW5nIHN1cHBvcnQgaW4gdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdHJlZSBhY2hpZXZlcyB0aGlzCisgICAgICAgICAgICBkZWZhdWx0IGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgbWVhbnMgdGhhdCBhbGwgdGhlIGdlbmVyYXRlZCBmaWxlcyBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgb3IgQlNQIGFyZSBub3cgaW4KKyAgICAgICAgICAgIHRoZSBidWlsZCB0cmVlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbmNsdWRlIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIGFsbCB0aGUgPGZpbGVuYW1lPi5vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLCB0aGUgPGZpbGVuYW1lPi5hPC9maWxlbmFtZT4gZmlsZXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIFNpbmNlIGVhY2ggbWFjaGluZSBvciBCU1AgaGFzIGl0cyBvd24gc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGluIGl0cyBvd24gc2VwYXJhdGUgYnJhbmNoCisgICAgICAgICAgICBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZWFzaWx5IHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBidWlsZHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2Zsb3ctZXhhbXBsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgRXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgcHJldmlvdXNseSBub3RlZCwgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGhhcyBidWlsdC1pbiBHaXQgaW50ZWdyYXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB0aGVzZSB1dGlsaXRpZXMgYXJlIG5vdCB0aGUgb25seSB3YXkgdG8gd29yayB3aXRoIHRoZSBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGhhcyBub3QgbWFkZSBjaGFuZ2VzIHRvIEdpdCBvciB0byBvdGhlciB0b29scyB0aGF0CisgICAgICAgICAgICB3b3VsZCBpbnZhbGlkYXRlIGFsdGVybmF0ZSB3b3JrZmxvd3MuCisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSB3YXkgdGhlIGtlcm5lbCByZXBvc2l0b3J5IGlzIGNvbnN0cnVjdGVkIHJlc3VsdHMgaW4gdXNpbmcKKyAgICAgICAgICAgIG9ubHkgY29yZSBHaXQgZnVuY3Rpb25hbGl0eSwgdGh1cyBhbGxvd2luZyBhbnkgbnVtYmVyIG9mIHRvb2xzIG9yIGZyb250IGVuZHMgdG8gdXNlIHRoZQorICAgICAgICAgICAgcmVzdWx0aW5nIHRyZWUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyBzZXZlcmFsIHdvcmtmbG93IGV4YW1wbGVzLgorICAgICAgICAgICAgTWFueSBvZiB0aGUgZXhhbXBsZXMgdXNlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBHaXQgZG9jdW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgc2ltcGxlIG92ZXJ2aWV3IG9mIHVzaW5nIEdpdCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjaGFuZ2UtaW5zcGVjdGlvbi1rZXJuZWwtY2hhbmdlcy1jb21taXRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DaGFuZ2UgSW5zcGVjdGlvbjogQ2hhbmdlcy9Db21taXRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAgICAgIldoYXQgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIHRyZWU/IgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBwcm9qZWN0cyB0aGF0IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjb250YWluIHBhdGNoZXMgdG8gdGhlIGtlcm5lbCwgaXQgaXMgcG9zc2libGUgdG8gaW5zcGVjdCBvciAiZ3JlcCIgdGhlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgb2YgdGhlIGRpcmVjdG9yaWVzIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzb3J0IG9mIHBhdGNoIGluc3BlY3Rpb24gaXMgbm90IGFuIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICBkb25lIHRvIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBpdCBpcyBpbmVmZmljaWVudCBpcyBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IG9wdGlvbmFsIHBhdGNoZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICBzZWxlY3RlZCBiYXNlZCBvbiB0aGUga2VybmVsIHR5cGUgYW5kIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgcGF0Y2hlcyBjb3VsZCBleGlzdCBpbiBkaXJlY3RvcmllcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGNoYW5nZWQgaW4gdGhlIGJyYW5jaCBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICBHaXQgYW5kIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBnaXZlcyB5b3UgYSBmdWxsIHZpZXcgb2Ygbm90IG9ubHkgdGhlIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgYnV0IGFsc28gcHJvdmlkZXMgdGhlIHJlYXNvbnMgZm9yIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nd2hhdC1jaGFuZ2VkLWluLWEta2VybmVsJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBhIGZldyBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZSBHaXQgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIEdpdCByZXBvc2l0b3JpZXMgaW4gdGhlIFlvY3RvIFByb2plY3QgZG8gbm90IGJyZWFrIGV4aXN0aW5nIEdpdAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LCBhbmQgYmVjYXVzZSB0aGVyZSBleGlzdHMgbWFueSBwZXJtdXRhdGlvbnMgb2YgdGhlc2UgdHlwZXMgb2YKKyAgICAgICAgICAgICAgICAgICAgR2l0IGNvbW1hbmRzLCBtYW55IG1ldGhvZHMgZXhpc3QgYnkgd2hpY2ggeW91IGNhbiBkaXNjb3ZlciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdCByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gaGlzdG9yeSBpcyBibGVuZGVkIHdpdGggWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZSBrZXJuZWwgdHJlZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyIGFuZCBsb3dlciBjb21taXQgbWFya2VycyB3aXRoIHRoZSBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgYnJhbmNoIG5hbWVzIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGJyYW5jaCBuYW1lcyBmb3IgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlcG9zaXRvcnkgY2FuIGJlIHNlZW4gYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaS9saW51eC15b2N0by0zLjQvcmVmcy9oZWFkcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgc3BlY2lmeSBhIGNvbW1pdCByYW5nZQorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJyYW5jaCAoPGZpbGVuYW1lPiZsdDtjb21taXQmZ3Q7Li4mbHQ7Y29tbWl0Jmd0OzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgbG9va3MgYXQgd2hhdCBoYXMgY2hhbmdlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVtZW5sb3c8L2ZpbGVuYW1lPiBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFuZGFyZC9iYXNlPC9maWxlbmFtZT4gYnJhbmNoLCB3aGlsZQorICAgICAgICAgICAgICAgICAgICB0aGUgdXBwZXIgY29tbWl0IHJhbmdlIGlzIHRoZSBjb21taXQgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCB3aGF0Y2hhbmdlZCBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBzZWUgYSBzdW1tYXJ5IG9mIGNoYW5nZXMgdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2luZyB0aGUgc2FtZSBicmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBsb2cgLS1vbmVsaW5lIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IG91dHB1dCBtaWdodCBiZSBtb3JlIHVzZWZ1bCB0aGFuCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gYXMgeW91IGdldAorICAgICAgICAgICAgICAgICAgICBhIHNob3J0LCBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggY2hhbmdlIGFuZCBub3QgdGhlIGVudGlyZSBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNlZSBjb2RlIGRpZmZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIGNoYW5nZXMsIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGRpZmYgb3JpZ2luL3N0YW5kYXJkL2Jhc2UuLm9yaWdpbi9zdGFuZGFyZC9lbWVubG93CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZXMgYW5kIHRoZSB0ZXh0IGRpZmZlcmVuY2VzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBpbmRpdmlkdWFsIHBhdGNoZXMgZm9yIGVhY2ggY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHRoYXQgY3JlYXRlcyBwYXRjaCBmaWxlcyBmb3IgZWFjaCBjb21taXQgYW5kCisgICAgICAgICAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJEhPTUUvRG9jdW1lbnRzIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2hvdy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2hvdyBhIFBhcnRpY3VsYXIgRmVhdHVyZSBvciBCcmFuY2ggQ2hhbmdlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzIHVzZSB0YWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIHRvIGRpdmlkZSBjaGFuZ2VzIGZvciBzaWduaWZpY2FudAorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBvciBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3Uga25vdyBhIHBhcnRpY3VsYXIgdGFnLCB5b3UgY2FuIHVzZSBHaXQgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2hvdyBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnIGFuZCBmaW5kIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBCU1AgYnJhbmNoLCA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LCBhbmQgZmVhdHVyZSB0YWdzIGFyZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQsIHRoZXJlIGNvdWxkIGJlIG1hbnkgdGFncy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmdpdCBzaG93ICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZCBzaG93cyBjaGFuZ2VzIHRoYXQgYXJlIHRhZ2dlZCBieQorICAgICAgICAgICAgICAgICAgICBhIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGNoYW5nZXMgdGFnZ2VkIGJ5IHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzaG93IHN5c3RlbXRhcAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGJyYW5jaCAtLWNvbnRhaW5zICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzaG93cyB0aGUgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBtYW55IG90aGVyIGNvbXBhcmlzb25zIHRvIGlzb2xhdGUgQlNQIGFuZCBrZXJuZWwgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29tcGFyZSBhZ2FpbnN0IDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdGFncworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSA8ZmlsZW5hbWU+djMuNDwvZmlsZW5hbWU+IHRhZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcG1lbnQtc2F2aW5nLWtlcm5lbC1tb2RpZmljYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXZlbG9wbWVudDogU2F2aW5nIEtlcm5lbCBNb2RpZmljYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBjb21tb24gb3BlcmF0aW9uIGlzIHRvIGJ1aWxkIGEgQlNQIHN1cHBsaWVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBtYWtlIHNvbWUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLCByZWJ1aWxkLCBhbmQgdGhlbiB0ZXN0LgorICAgICAgICAgICAgICAgIFRob3NlIGxvY2FsIGNoYW5nZXMgb2Z0ZW4gbmVlZCB0byBiZSBleHBvcnRlZCwgc2hhcmVkIG9yIG90aGVyd2lzZSBtYWludGFpbmVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaW5jZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHRyZWUgaXMgYmFja2VkIGJ5IEdpdCwgdGhpcyBhY3Rpdml0eSBpcworICAgICAgICAgICAgICAgIG11Y2ggZWFzaWVyIGFzIGNvbXBhcmVkIHRvIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBHaXQgdHJhY2tzIGZpbGUgbW9kaWZpY2F0aW9ucywgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMsIGl0IGlzIGVhc3kKKyAgICAgICAgICAgICAgICB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIGxhdGVyIHJlYWxpemUgdGhhdCB5b3UgbmVlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gZWFzeSB0byBkZXRlcm1pbmUgd2hhdCBoYXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbHNvIHByb3ZpZGVzIG1hbnkgdG9vbHMgdG8gY29tbWl0LCB1bmRvIGFuZCBleHBvcnQgdGhvc2UgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGFuZCBpdHMgc3ViLXNlY3Rpb25zLCBkZXNjcmliZSBnZW5lcmFsIGFwcGxpY2F0aW9uIG9mIEdpdCdzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBjb21tYW5kcywgd2hpY2ggYXJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICBnZXQgeW91ciBjaGFuZ2VzIHVwc3RyZWFtIG9yIHNvdXJjZSB5b3VyIGNvZGUgZnJvbSBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIHNjcmlwdHMgdGhhdCBoZWxwIHlvdSB3b3JrIGluIGEgY29sbGFib3JhdGl2ZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZQorICAgICAgICAgICAgICAgIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc3VibWl0dGluZy1hLXBhdGNoJz5Vc2luZyBFbWFpbCB0byBTdWJtaXQgYSBQYXRjaDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIG1hbnkgd2F5cyB0byBzYXZlIGtlcm5lbCBtb2RpZmljYXRpb25zLgorICAgICAgICAgICAgICAgIFRoZSB0ZWNobmlxdWUgZW1wbG95ZWQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBhdGNoZXM6CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVsayBzdG9yYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnRlcm5hbCBzaGFyaW5nIGVpdGhlciB0aHJvdWdoIHBhdGNoZXMgb3IgYnkgdXNpbmcgR2l0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlcm5hbCBzdWJtaXNzaW9uczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3J0aW5nIGZvciBpbnRlZ3JhdGlvbiBpbnRvIGFub3RoZXIgU291cmNlIENvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZXIgKFNDTSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGxpc3Qgb2YgaXNzdWVzLCB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHBhdGNoZXMgYWxzbyBpbmZsdWVuY2VzCisgICAgICAgICAgICAgICAgdGhlIG1ldGhvZCBmb3IgZ2F0aGVyaW5nIHRoZW06CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmlzZWN0YWJpbGl0eTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tbWl0IGhlYWRlcnM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRpdmlzaW9uIG9mIHN1YnN5c3RlbXMgZm9yIHNlcGFyYXRlIHN1Ym1pc3Npb24gb3IgcmV2aWV3PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdidWxrLWV4cG9ydCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1bGsgRXhwb3J0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuICJidWxrIiBleHBvcnQgY2hhbmdlcyB0aGF0IGhhdmUgbm90CisgICAgICAgICAgICAgICAgICAgIGJlZW4gc2VwYXJhdGVkIG9yIGRpdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIHdvcmtzIHdlbGwgd2hlbiB5b3UgYXJlIHNpbXBseSBzdG9yaW5nIHBhdGNoZXMgb3V0c2lkZSBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LCBlaXRoZXIgcGVybWFuZW50bHkgb3IgdGVtcG9yYXJpbHksIGFuZCB5b3UgYXJlIG5vdCBjb21taXR0aW5nCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsIGNoYW5nZXMgZHVyaW5nIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGVjaG5pcXVlIGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgZnVsbCBpbnRlZ3JhdGlvbiBvZiB1cHN0cmVhbSBzdWJtaXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGNoYW5nZXMgYXJlIG5vdCBwcm9wZXJseSBkaXZpZGVkIGFuZCBkbyBub3QgcHJvdmlkZSBhbiBhdmVudWUgZm9yIHBlci1jaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBleGFtcGxlIGFzc3VtZXMgdGhhdCBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gY29tbWl0dGVkIGluY3JlbWVudGFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgdGhhdCB5b3Ugc2ltcGx5IG11c3QgZ2F0aGVyIGFuZCBleHBvcnQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgYnVsayBleHBvcnQgb2YgQUxMIG1vZGlmaWNhdGlvbnMgd2l0aG91dCBzZXBhcmF0aW9uIG9yIGRpdmlzaW9uCisgICAgICMgb2YgdGhlIGNoYW5nZXMKKworICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gJmx0O21zZyZndDsKKyAgICAgICAgb3IKKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hICMgYW5kIGludGVyYWN0IHdpdGggJEVESVRPUgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBvcGVyYXRpb25zIGNhcHR1cmUgYWxsIHRoZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSBwcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgICAgICB0cmVlIGluIGEgc2luZ2xlIEdpdCBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgdGhhdCBjb21taXQgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIHByb2plY3QncyBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBhcmUgZXhwb3J0ZWQsIHlvdSBjYW4gcmVzdG9yZSB0aGVtIG1hbnVhbGx5IHVzaW5nIGEgdGVtcGxhdGUKKyAgICAgICAgICAgICAgICAgICAgb3IgdGhyb3VnaCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGVmYXVsdF9rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2luY3JlbWVudGFsLXBsYW5uZWQtc2hhcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkluY3JlbWVudGFsL1BsYW5uZWQgU2hhcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gc2F2ZSBtb2RpZmljYXRpb25zIHdoZW4geW91IGFyZSBtYWtpbmcgaW5jcmVtZW50YWwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cyBvciBwcmFjdGljaW5nIHBsYW5uZWQgc2hhcmluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGluIHRoaXMgc2VjdGlvbiBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBpbmNyZW1lbnRhbGx5IGNvbW1pdHRlZAorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSB0cmVlIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgbm93IG5lZWQgdG8gZXhwb3J0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWN0aW9ucyB0aGF0IGZvbGxvdworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZSBob3cgeW91IGNhbiBleHBvcnQgeW91ciBjaGFuZ2VzIGludGVybmFsbHkgdGhyb3VnaCBlaXRoZXIgcGF0Y2hlcyBvciBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIER1cmluZyBkZXZlbG9wbWVudCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgb2YgaW50ZXJlc3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBmdWxsIEdpdCBkb2N1bWVudGF0aW9uLCByZWZlciB0byB0aGUgR2l0IGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20nPjwvdWxpbms+LgorCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBlZGl0IGEgZmlsZQorICAgICAkIHZpICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgc3RhZ2UgdGhlIGNoYW5nZQorICAgICAkIGdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgIyBjb21taXQgdGhlIGNoYW5nZQorICAgICAkIGdpdCBjb21taXQgLXMKKyAgICAgIyByZW1vdmUgYSBmaWxlCisgICAgICQgZ2l0IHJtICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgY29tbWl0IHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgY29tbWl0IC1zCisKKyAgICAgLi4uIGV0Yy4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRlZCBkZXZlbG9wbWVudCB3aXRoIEdpdCBpcyBwb3NzaWJsZSB3aGVuIHlvdSB1c2UgYSB1bml2ZXJzYWxseQorICAgICAgICAgICAgICAgICAgICBhZ3JlZWQtdXBvbiB1bmlxdWUgY29tbWl0IGlkZW50aWZpZXIgKHNldCBieSB0aGUgY3JlYXRvciBvZiB0aGUgY29tbWl0KSB0aGF0IG1hcHMgdG8gYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjaGFuZ2Ugc2V0IHdpdGggYSBzcGVjaWZpYyBwYXJlbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaWRlbnRpZmllciBpcyBjcmVhdGVkIGZvciB5b3Ugd2hlbgorICAgICAgICAgICAgICAgICAgICB5b3UgY3JlYXRlIGEgY29tbWl0LCBhbmQgaXMgcmUtY3JlYXRlZCB3aGVuIHlvdSBhbWVuZCwgYWx0ZXIgb3IgcmUtYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgYSBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGluZGl2aWR1YWwgaW4gaXNvbGF0aW9uLCB0aGlzIGlzIG9mIG5vIGludGVyZXN0LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgaW50ZW5kIHRvIHNoYXJlIHlvdXIgdHJlZSB3aXRoIG5vcm1hbCBHaXQgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBvcGVyYXRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCwgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcmFtaWZpY2F0aW9ucyBvZiBjaGFuZ2luZyBhCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdCB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2hhcmVkIHdpdGggb3RoZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB0aGF0IHRoZSBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gcHVzaGVkIHVwc3RyZWFtLCBvciBwdWxsZWQgaW50bworICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdXBkYXRlIGJvdGggdGhlIGNvbW1pdCBjb250ZW50IGFuZCBjb21taXQgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGRldmVsb3BtZW50IGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgJCBHaXQgY29tbWl0IC0tYW1lbmQKKyAgICAgJCBHaXQgcmViYXNlIG9yIEdpdCByZWJhc2UgLWkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgYXNzdW1pbmcgdGhhdCB0aGUgY2hhbmdlcyBoYXZlIG5vdCBiZWVuIHB1c2hlZCB1cHN0cmVhbSwgYW5kIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbm8gcGVuZGluZyB3b3Jrcy1pbi1wcm9ncmVzcyBleGlzdCAodXNlIDxmaWxlbmFtZT5naXQgc3RhdHVzPC9maWxlbmFtZT4gdG8gY2hlY2spLCB0aGVuCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcmV2ZXJ0ICh1bmRvKSBjb21taXRzIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIHJlbW92ZSB0aGUgY29tbWl0LCB1cGRhdGUgd29ya2luZyB0cmVlIGFuZCByZW1vdmUgYWxsCisgICAgICMgdHJhY2VzIG9mIHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGJ1dCBsZWF2ZSB0aGUgZmlsZXMgY2hhbmdlZCBhbmQgc3RhZ2VkIGZvciByZS1jb21taXQKKyAgICAgJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGxlYXZlIGZpbGUgY2hhbmdlLCBidXQgbm90IHN0YWdlZCBmb3IgY29tbWl0CisgICAgICQgZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRF4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBicmFuY2hlcywgImNoZXJyeS1waWNrIiBjaGFuZ2VzLCBvciBwZXJmb3JtIGFueSBudW1iZXIgb2YgR2l0CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMgdW50aWwgdGhlIGNvbW1pdHMgYXJlIGluIGdvb2Qgb3JkZXIgZm9yIHB1c2hpbmcgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgb3IgZm9yIHB1bGwgcmVxdWVzdHMuCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGEgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+cHVsbDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMgYXJlIG5vcm1hbGx5IGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgInBlcm1hbmVudCIgYW5kIHlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29tbWl0cyBuZWVkIHRvIGJlIGNoYW5nZWQsIHlvdSBjYW4gaW5jcmVtZW50YWxseSBkbyBzbyB3aXRoIG5ldyBjb21taXRzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBwcmFjdGljZXMgZm9sbG93IHN0YW5kYXJkIEdpdCB3b3JrZmxvdyBhbmQgdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gYmVzdAorICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMsIHdoaWNoIGlzIHJlY29tbWVuZGVkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHRhZyBvciBicmFuY2ggYmVmb3JlIGFkZGluZyBjaGFuZ2VzIHRvIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgQlNQIG9yIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIHJlY29tbWVuZGF0aW9uIGlzIGJlY2F1c2UgdGhlIGJyYW5jaCBvciB0YWcgcHJvdmlkZXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHBvaW50IHRvIGZhY2lsaXRhdGUgbG9jYXRpbmcgYW5kIGV4cG9ydGluZyBsb2NhbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1pbnRlcm5hbGx5LXZpYS1wYXRjaGVzJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuIGV4dHJhY3QgY29tbWl0dGVkIGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBleHBvcnRpbmcgdGhlbSBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBoYXZlIGJlZW4gZXh0cmFjdGVkLCB5b3UgY2FuIHVzZSB0aGUgcGF0Y2hlcyBmb3IgdXBzdHJlYW0gc3VibWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlIHRoZW0gaW4gYSBZb2N0byBQcm9qZWN0IHRlbXBsYXRlIGZvciBhdXRvbWF0aWMga2VybmVsIHBhdGNoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXBwbHkgdGhlbSBpbiBtYW55IG90aGVyIGNvbW1vbiB1c2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoIHNlcXVlbnRpYWxseSBudW1iZXJlZCBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdSBjYW4gYXBwbHkgaXQgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBhbTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gcmVwcm9kdWNlIHRoZSBvcmlnaW5hbCBjb21taXQgYW5kIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlbGF0ZWQgaW5mb3JtYXRpb24gc3VjaCBhcyBhdXRob3IsIGRhdGUsIGNvbW1pdCBsb2csIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuZXcgY29tbWl0IGlkZW50aWZpZXJzIChJRCkgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiByZS1hcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFjdGlvbiByZWZsZWN0cyB0aGF0IHRoZSBjb21taXQgaXMgbm93IGFwcGxpZWQgdG8gYW4gdW5kZXJseWluZyBjb21taXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZGlmZmVyZW50IElELgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjICZsdDtmaXJzdC1jb21taXQmZ3Q7IGNhbiBiZSBhIHRhZyBpZiBvbmUgd2FzIGNyZWF0ZWQgYmVmb3JlIGRldmVsb3BtZW50CisgICAgICMgYmVnYW4uIEl0IGNhbiBhbHNvIGJlIHRoZSBwYXJlbnQgYnJhbmNoIGlmIGEgYnJhbmNoIHdhcyBjcmVhdGVkCisgICAgICMgYmVmb3JlIGRldmVsb3BtZW50IGJlZ2FuLgorCisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7ZGlyJmd0OyAmbHQ7Zmlyc3QgY29tbWl0Jmd0Oy4uJmx0O2xhc3QgY29tbWl0Jmd0OworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBJZGVudGlmeSBjb21taXRzIG9mIGludGVyZXN0LgorCisgICAgICMgSWYgdGhlIHRyZWUgd2FzIHRhZ2dlZCBiZWZvcmUgZGV2ZWxvcG1lbnQKKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICZsdDtzYXZlIGRpciZndDsgJmx0O3RhZyZndDsKKworICAgICAjIElmIG5vIHRhZ3MgYXJlIGF2YWlsYWJsZQorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXiAgIyBsYXN0IGNvbW1pdAorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXl4gIyBsYXN0IDIgY29tbWl0cworICAgICAkIGdpdCB3aGF0Y2hhbmdlZCAjIGlkZW50aWZ5IGxhc3QgY29tbWl0CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtjb21taXQgaWQmZ3Q7CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtyZXYtbGlzdCZndDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleHBvcnQtaW50ZXJuYWxseS12aWEtZ2l0Jz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgR2l0PC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHlvdSBjYW4gZXhwb3J0IGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBwdXNoaW5nIHRoZSBjaGFuZ2VzIGludG8gYSBtYXN0ZXIgcmVwb3NpdG9yeSBvciBieSBtYWtpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHB1c2hlZCB0aGUgY2hhbmdlcyB0byB0aGUgbWFzdGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHVsbCB0aG9zZSBzYW1lIGNoYW5nZXMgaW50byBhIG5ldyBrZXJuZWwgYnVpbGQgYXQgYSBsYXRlciB0aW1lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kIGZvcm0gdG8gcHVzaCB0aGUgY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgcHVzaCBzc2g6Ly8mbHQ7bWFzdGVyX3NlcnZlciZndDsvJmx0O3BhdGhfdG9fcmVwbyZndDsKKyAgICAgICAgJmx0O2xvY2FsX2JyYW5jaCZndDs6Jmx0O3JlbW90ZV9icmFuY2gmZ3Q7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcHVzaGVzIHRoZSBjaGFuZ2VzIGZyb20geW91ciBsb2NhbCBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+IHRvIHRoZSByZW1vdGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1hc3RlciByZXBvc2l0b3J5IDxmaWxlbmFtZT4vL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBwdXNoIHNzaDovL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNCBcCisgICAgICAgIHlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlOnlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgcHVsbCByZXF1ZXN0IGVudGFpbHMgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgcmVxdWVzdC1wdWxsPC9maWxlbmFtZT4gY29tbWFuZCB0byBjb21wb3NlCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBlbWFpbCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgcmVxdWVzdGluZyB0aGF0IGEgYnJhbmNoIGJlIHB1bGxlZCBpbnRvIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9ndWlkZXMvcHVsbC1yZXF1ZXN0cyc+PC91bGluaz4gZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciBjb21tYW5kcyBzdWNoIGFzIDxmaWxlbmFtZT5naXQgc3Rhc2g8L2ZpbGVuYW1lPiBvciBicmFuY2hpbmcgY2FuIGFsc28gYmUgdXNlZCB0byBzYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgYnV0IGFyZSBub3QgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0LWZvci1leHRlcm5hbC11cHN0cmVhbS1zdWJtaXNzaW9uJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEV4dGVybmFsIChVcHN0cmVhbSkgU3VibWlzc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gZXhwb3J0IGNoYW5nZXMgZm9yIGV4dGVybmFsIHVwc3RyZWFtIHN1Ym1pc3Npb24uCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBwYXRjaCBzZXJpZXMgaXMgbGFyZ2Ugb3IgdGhlIG1haW50YWluZXIgcHJlZmVycyB0byBwdWxsCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMsIHlvdSBjYW4gc3VibWl0IHRoZXNlIGNoYW5nZXMgYnkgdXNpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGNvbW1vbiB0byBzZW5kIHBhdGNoZXMgYXMgYW4gZW1haWwgc2VyaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbGxvd3MgZWFzeSByZXZpZXcgYW5kIGludGVncmF0aW9uIG9mIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBzZW5kaW5nIHBhdGNoZXMgZm9yIHJldmlldyBiZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tbXVuaXR5IHN0YW5kYXJkcyBmb3Igc3VibWl0dGluZyBhbmQgZG9jdW1lbnRpbmcgY2hhbmdlcyBhbmQgZm9sbG93IHRoZWlyIGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGtlcm5lbCBwYXRjaGVzIHNob3VsZCBmb2xsb3cgc3RhbmRhcmRzIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbCc+PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyAoaW4gYW55IGxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgdHJlZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlcyB1c2VkIHRvIGNvbW1pdCBjaGFuZ2VzIGFyZSBhIGxhcmdlIHBhcnQgb2YgdGhlc2Ugc3RhbmRhcmRzLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGJlIHN1cmUgdGhhdCB0aGUgaGVhZGVycyBmb3IgZWFjaCBjb21taXQgaGF2ZSB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZm9sbG93IHRoZSBZb2N0byBQcm9qZWN0IGNvbW1pdCBtZXNzYWdlIHN0YW5kYXJkcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhCisgICAgICAgICAgICAgICAgICAgIENoYW5nZTwvdWxpbms+IiBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGluaXRpYWwgY29tbWl0cyB3ZXJlIG5vdCBwcm9wZXJseSBkb2N1bWVudGVkIG9yIGRvIG5vdCBtZWV0IHRob3NlIHN0YW5kYXJkcywKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiByZS1iYXNlIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IHJlYmFzZSAtaTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZSB0aGUgY29tbWl0cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ2V0IHRoZW0gaW50byB0aGUgcmVxdWlyZWQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZWNobmlxdWVzIHN1Y2ggYXMgYnJhbmNoaW5nIGFuZCBjaGVycnktcGlja2luZyBjb21taXRzIGFyZSBhbHNvIHZpYWJsZSBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21wbGV0ZSB0aGUgY29tbWl0cywgeW91IGNhbiBnZW5lcmF0ZSB0aGUgZW1haWwgdGhhdCBzZW5kcyB0aGUgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgbWFpbnRhaW5lcihzKSBvciBsaXN0cyB0aGF0IHJldmlldyBhbmQgaW50ZWdyYXRlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGlzIGNvbW1vbmx5IHVzZWQgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcGF0Y2hlcyBhcmUgcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIGZvciBlYXN5IGFwcGxpY2F0aW9uIGFuZCBhdm9pZCBtYWlsZXItaW5kdWNlZCBwYXRjaCBkYW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBkdW1waW5nIHBhdGNoZXMgZm9yIGV4dGVybmFsIHN1Ym1pc3Npb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBkdW1wIHRoZSBsYXN0IDQgY29tbWl0cworICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLS10aHJlYWQgLW4gLW8gfi9yci8gSEVBRF5eXl4KKyAgICAgJCBnaXQgc2VuZC1lbWFpbCAtLWNvbXBvc2UgLS1zdWJqZWN0ICdbUkZDIDAvTl0gJmx0O3BhdGNoIHNlcmllcyBzdW1tYXJ5Jmd0OycgXAorICAgICAgLS10byBmb29AeW9jdG9wcm9qZWN0Lm9yZyAtLXRvIGJhckB5b2N0b3Byb2plY3Qub3JnIFwKKyAgICAgIC0tY2MgbGlzdEB5b2N0b3Byb2plY3Qub3JnICB+L3JyCisgICAgICMgdGhlIGVkaXRvciBpcyBpbnZva2VkIGZvciB0aGUgMC9OIHBhdGNoLCBhbmQgd2hlbiBjb21wbGV0ZSB0aGUgZW50aXJlCisgICAgICMgc2VyaWVzIGlzIHNlbnQgdmlhIGVtYWlsIGZvciByZXZpZXcKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1mb3ItaW1wb3J0LWludG8tb3RoZXItc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEltcG9ydCBpbnRvIEFub3RoZXIgU0NNPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB3YW50IHRvIGV4cG9ydCBjaGFuZ2VzIGZvciBpbXBvcnQgaW50byBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSksIHlvdSBjYW4gdXNlIGFueSBvZiB0aGUgcHJldmlvdXNseSBkaXNjdXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdGVjaG5pcXVlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHBhdGNoZXMgYXJlIG1hbnVhbGx5IGFwcGxpZWQgdG8gYSBzZWNvbmRhcnkgdHJlZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICB0aGF0IHRyZWUgaXMgY2hlY2tlZCBpbnRvIHRoZSBTQ00sIHlvdSBjYW4gbG9zZSBjaGFuZ2UgaW5mb3JtYXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgICAgICBjb21taXQgbG9ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIG5vdCByZWNvbW1lbmRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTWFueSBTQ01zIGNhbiBkaXJlY3RseSBpbXBvcnQgR2l0IGNvbW1pdHMsIG9yIGNhbiB0cmFuc2xhdGUgR2l0IHBhdGNoZXMgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpcyBub3QgbG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhvc2UgZmFjaWxpdGllcyBhcmUgU0NNLWRlcGVuZGVudCBhbmQgeW91IHNob3VsZCB1c2UgdGhlbSB3aGVuZXZlciBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2NtLXdvcmtpbmctd2l0aC10aGUteW9jdG8tcHJvamVjdC1rZXJuZWwtaW4tYW5vdGhlci1zY20nPgorICAgICAgICAgICAgPHRpdGxlPldvcmtpbmcgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBLZXJuZWwgaW4gQW5vdGhlciBTQ008L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGtlcm5lbCBkZXZlbG9wbWVudCBpbiBhbiBTQ00gb3RoZXIgdGhhbiBHaXQsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIGV4cG9ydGluZyBjaGFuZ2VzIHRvIGFub3RoZXIgU0NNIGRlc2NyaWJlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgZGV2ZWxvcCB0aGUga2VybmVsIGluIGEgZGlmZmVyZW50IFNDTS4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZSBmb3IgeW91IHRvIGFjY29tcGxpc2ggdGhpczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlbGl2ZXJlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCBtdXN0IGJlIGV4cG9ydGVkIGludG8gdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgU0NNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGV2ZWxvcG1lbnQgbXVzdCBiZSBleHBvcnRlZCBmcm9tIHRoYXQgc2Vjb25kYXJ5IFNDTSBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0aW5nLWRlbGl2ZXJlZC1rZXJuZWwtdG8tc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIHRoZSBEZWxpdmVyZWQgS2VybmVsIHRvIHRoZSBTQ008L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgU0NNLCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBleHBvcnQgdGhlIGVudGlyZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgYnJhbmNoZXMgYW5kIGFsbCwgaW50byBhIG5ldyBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgcHJlZmVycmVkIGJlY2F1c2UgaXQgaGFzIHRoZSBtb3N0IGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdG8gbWFpbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggZWFjaCBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYSBkaXJlY3QgaW1wb3J0IG1lY2hhbmlzbSBpcyBub3QgYXZhaWxhYmxlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0bworICAgICAgICAgICAgICAgICAgICBleHBvcnQgYSBicmFuY2ggKG9yIHNlcmllcyBvZiBicmFuY2hlcykgYW5kIGNoZWNrIHRoZW0gaW50byBhIG5ldyByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGlsbHVzdHJhdGUgc29tZSBvZiB0aGUgc3RlcHMgeW91IGNvdWxkIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdGhlIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbnRvIGEgc2Vjb25kYXJ5IFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGNkIC4uIDsgZWNobyBsaW51eC8uZ2l0ICZndDsgLmN2c2lnbm9yZQorICAgICAkIGN2cyBpbXBvcnQgLW0gImluaXRpYWwgaW1wb3J0IiBsaW51eCBNWV9DT01QQU5ZIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIG5vdyByZWxvY2F0ZSB0aGUgQ1ZTIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCBpbiBhIGNlbnRyYWxpemVkIG1hbm5lci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBpbGx1c3RyYXRlIGhvdyB5b3UgY2FuIGNvbmRlbnNlIGFuZCBtZXJnZSB0d28gQlNQcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kIFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGdpdCBtZXJnZSB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZQorICAgICAjIHJlc29sdmUgYW55IGNvbmZsaWN0cyBhbmQgY29tbWl0IHRoZW0KKyAgICAgJCBjZCAuLiA7IGVjaG8gbGludXgvLmdpdCAmZ3Q7IC5jdnNpZ25vcmUKKyAgICAgJCBjdnMgaW1wb3J0IC1tICJpbml0aWFsIGltcG9ydCIgbGludXggTVlfQ09NUEFOWSBzdGFydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0naW1wb3J0aW5nLWNoYW5nZXMtZm9yLWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW1wb3J0aW5nIENoYW5nZXMgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSBkZXZlbG9wbWVudCBoYXMgcmVhY2hlZCBhIHN1aXRhYmxlIHBvaW50IGluIHRoZSBzZWNvbmQgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHlvdSBuZWVkIHRvIGV4cG9ydCB0aGUgY2hhbmdlcyBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgdGhlbSwgcGxhY2UgdGhlIGNoYW5nZXMgaW4gYSByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYXBwbHkgdGhlbSB0byB0aGUga2VybmVsIGR1cmluZyBwYXRjaGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWNyZWF0aW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIEJTUCBCYXNlZCBvbiBhbiBFeGlzdGluZyBTaW1pbGFyIEJTUDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdmVydmlld3MgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBCU1AgYmFzZWQgb24gYW4KKyAgICAgICAgICAgICAgICBleGlzdGluZyBzaW1pbGFyIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgaW50cm9kdWN0b3J5IGluIG5hdHVyZSBhbmQgZG9lcyBub3QgcHJvdmlkZSBzdGVwLWJ5LXN0ZXAgZXhhbXBsZXMuCisgICAgICAgICAgICAgICAgRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgYSBuZXcgQlNQLCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUsIG9yIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfY3JlYXRpbmdfb25lX2dlbmVyaWNfQXRvbV9CU1BfZnJvbV9hbm90aGVyJz5UcmFuc2NyaXB0Ol9jcmVhdGluZ19vbmVfZ2VuZXJpY19BdG9tX0JTUF9mcm9tX2Fub3RoZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJhc2ljIHN0ZXBzIHlvdSBuZWVkIHRvIGZvbGxvdyBhcmU6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgdXAgYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjcmVhdGUgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBieSBlaXRoZXIgY3JlYXRpbmcgYSBHaXQgcmVwb3NpdG9yeSAocmVjb21tZW5kZWQpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0aW5nIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRhcmJhbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hvb3NlIGFuIGV4aXN0aW5nIEJTUCBhdmFpbGFibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVHJ5IHRvIG1hcCB5b3VyIGJvYXJkIGZlYXR1cmVzIGFzIGNsb3NlbHkgdG8gdGhlIGZlYXR1cmVzIG9mIGEgQlNQIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgc3VwcG9ydGVkIGFuZCBleGlzdHMgaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGluZyB3aXRoIHNvbWV0aGluZyBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB5b3VyIGJvYXJkIG1ha2VzIGRldmVsb3BpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgQlNQIGVhc2llci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhbGwgdGhlIEJTUHMgdGhhdCBhcmUgc3VwcG9ydGVkIGFuZCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBZb2N0byBQcm9qZWN0J3MgRG93bmxvYWQgcGFnZSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb3dubG9hZCc+PC91bGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3UgaGF2ZSB0aGUgQmFzZSBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGVpdGhlciBoYXZlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIGJhc2UgQlNQIHNldCB1cCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQgdGhlIGZpbGVzIGZyb20gYSByZWxlYXNlIEJTUCB0YXJiYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIG1ldGhvZCBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZSBCU1Agc291cmNlIGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgYSBjb3B5IG9mIHRoZSBleGlzdGluZyBCU1AsIHRodXMgaXNvbGF0aW5nIHlvdXIgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBCU1Agd29yazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29weWluZyB0aGUgZXhpc3RpbmcgQlNQIGZpbGUgc3RydWN0dXJlIGdpdmVzIHlvdSBhIG5ldyBhcmVhIGluIHdoaWNoIHRvIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjb25maWd1cmF0aW9uIGFuZCByZWNpcGUgY2hhbmdlcyB0byB5b3VyIG5ldyBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY2hhbmdlcyBpbnZvbHZlIHRoZSBmaWxlcyBpbiB0aGUgQlNQJ3MgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGNyZWF0aW5nIGEgbWFjaGluZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIGVkaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGlkZW50aWZ5IHRoZSBrZXJuZWwgeW91IHdpbGwgYmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUgY2hhbmdlcyBpbmNsdWRlIHJlbW92aW5nLCBtb2RpZnlpbmcsIG9yIGFkZGluZyBuZXcgcmVjaXBlIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0IHRoZSBidWlsZCBwcm9jZXNzIG9uIHdoYXQgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSBmb3IgdGhlIGJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGFjdHVhbGx5IGluaXRpYXRlIHRoZSBidWlsZCwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgc291cmNpbmcgdGhlIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBtYWtlIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB0byB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gY3JlYXRlIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRlY2lkZSBvbiB0aGUgdHlwZSBvZiBpbWFnZSB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIChlLmcuIG1pbmltYWwsIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLCBzYXRvLCBhbmQgc28gZm9ydGgpIGFuZCB0aGVuIHN0YXJ0IHRoZSBidWlsZCB1c2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlIGVuZCBvZiB0aGUgdmVyc2lvbgorICAgICAgICAgICAgICAgIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIGluIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGFkZGVkIGZpbGVzLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29tbWl0IHRob3NlIGNoYW5nZXMgdG8gdGhlIHRyZWUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgd2lsbCBiZSBzYXZlZCwKKyAgICAgICAgICAgICAgICBleHBvcnRlZCwgb3IgdXNlZC4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21taXQgdGhlIGNoYW5nZXMgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBicnV0ZSBmb3JjZSBwaWNrdXAgYW5kIGNvbW1pdCBhbGwgc3VjaCBwZW5kaW5nIGNoYW5nZXMsIGVudGVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gImdldHRpbmcgcmlkIG9mIC1kaXJ0eSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5leHQsIHJlYnVpbGQgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1mYXEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTlhZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWZhcS54bWwKQEAgLTAsMCArMSwxNDAgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxhcHBlbmRpeCBpZD0na2VybmVsLWRldi1mYXEnPgorPHRpdGxlPktlcm5lbCBEZXZlbG9wbWVudCBGQVE8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0na2VybmVsLWRldi1mYXEtc2VjdGlvbic+CisgICAgPHRpdGxlPkNvbW1vbiBRdWVzdGlvbnMgYW5kIFNvbHV0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0cyBzb21lIHNvbHV0aW9ucyBmb3IgY29tbW9uIHF1ZXN0aW9ucy4KKworCisgICAgICAgIDxxYW5kYXNldD4KKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgbXkgb3duIExpbnV4IGtlcm5lbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZlciB0byB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorCisgICAgICAgICAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyIHRvIHRoZSAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIHVzZSBteSBvd24gTGludXgga2VybmVsIHNvdXJjZXM/CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICAgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8gdGhlICI8bGluayBsaW5rZW5kPSd3b3JraW5nLXdpdGgteW91ci1vd24tc291cmNlcyc+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGluc3RhbGwvbm90LWluc3RhbGwgdGhlIGtlcm5lbCBpbWFnZSBvbiB0aGUgcm9vdGZzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgaW1hZ2UgKGUuZy4gPGZpbGVuYW1lPnZtbGludXo8L2ZpbGVuYW1lPikgaXMgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSA8ZmlsZW5hbWU+a2VybmVsLWltYWdlPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlIHJlY2lwZXMgZGVwZW5kIG9uIDxmaWxlbmFtZT5rZXJuZWwtYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpcyBpbnN0YWxsZWQgaW4gdGhlIGdlbmVyYXRlZCByb290IGZpbGVzeXN0ZW0sIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfa2VybmVsLWJhc2U8L2ZpbGVuYW1lPiB0byBpbmNsdWRlIG9yIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSAia2VybmVsLWltYWdlIi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGFuIGFwcGVuZCBmaWxlIHRvIG92ZXJyaWRlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9hbnN3ZXI+CisgICAgICAgICAgICA8L3FhbmRhZW50cnk+CisKKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSBpbnN0YWxsIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZT8KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgICAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgbW9kdWxlcyBhcmUgcGFja2FnZWQgaW5kaXZpZHVhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5zdXJlIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB1c2VmdWwgZm9yIGluc3RhbGxpbmcgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0IHRoZSBmb2xsb3dpbmcgaW4gdGhlIDxmaWxlbmFtZT5xZW11eDg2LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB0byBpbmNsdWRlIHRoZSA8ZmlsZW5hbWU+YWIxMjM8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbWFnZXMgYnVpbHQgZm9yIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtYWIxMjMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGNoYW5nZSB0aGUgTGludXgga2VybmVsIGNvbW1hbmQgbGluZT8KKyAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBrZXJuZWwgY29tbWFuZCBsaW5lIGlzIHR5cGljYWxseSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGNvbmZpZyB1c2luZyB0aGUgPGZpbGVuYW1lPkFQUEVORDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZCBzb21lIGhlbHBmdWwgZGVidWcgaW5mb3JtYXRpb24gZG9pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFQUEVORCArPSAicHJpbnRrLnRpbWU9eSBpbml0Y2FsbF9kZWJ1ZyBkZWJ1ZyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorICAgICAgICA8L3FhbmRhc2V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzZTUwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sCkBAIC0wLDAgKzEsMTQ5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPCEtLQorPHBhcmE+CisgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNlZSBpZiB0aGUgY29uY2VwdHMgaW4gdGhlc2UKKyAgICB0aHJlZSBidWxsZXRzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgaW4gc29tZXdoZXJlIGluIHRoaXMgbWFudWFsOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCBvdXIga2VybmVsIEdpdCByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGhhdmUgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5LCBzaW1pbGFyIHRvIHRoZSB3YXkgdGhlCisgICAgICAgICAgICBrZXJuZWwgR2l0IHJlcG9zaXRvcmllcyBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZG8uCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvZXMgdGhlIG1hbnVhbCBub3RlIHRoYXQgWW9jdG8gUHJvamVjdCBkZWxpdmVycworICAgICAgICAgICAgYSBrZXkgc2V0IG9mIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMsIHdoZXJlCisgICAgICAgICAgICBlYWNoIHR5cGUgaXMgdGFpbG9yZWQgdG8gbWVldCBhIHNwZWNpZmljIHVzZSAoZS5nLiBuZXR3b3JraW5nLAorICAgICAgICAgICAgY29uc3VtZXIsIGRldmljZXMsIGFuZCBzbyBmb3J0aCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEKKyAgICAgICAgICAgIEdpdCBicmFuY2hpbmcgc3RyYXRlZ3kgdGhhdCwgZnJvbSBhCisgICAgICAgICAgICBkZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3LCByZXN1bHRzIGluIGEgbGluZWFyIHBhdGggZnJvbSB0aGUKKyAgICAgICAgICAgIGJhc2VsaW5lIGtlcm5lbC5vcmcsIHRocm91Z2ggYSBzZWxlY3QgZ3JvdXAgb2YgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+CistLT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBpbnRlbmQgdG8gbWFrZSB1c2Ugb2YgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICBjaGFuY2VzIGFyZSB5b3Ugd2lsbCB3b3JrIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICBkZXNjcmliZXMgY29tbW9uIHRhc2tzIHlvdSBjYW4gcGVyZm9ybSB1c2luZyB0aGUga2VybmVsIHRvb2xzLAorICAgICAgICAgICAgYW5kIHNob3dzIHlvdSBob3cgdG8gdXNlIHRoZSBrZXJuZWwgTWV0YWRhdGEgbmVlZGVkIHRvIHdvcmsgd2l0aAorICAgICAgICAgICAgdGhlIGtlcm5lbCBpbnNpZGUgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIFlvY3RvIFByb2plY3QgcmVsZWFzZSBoYXMgYSBzZXQgb2YgbGludXgteW9jdG8gcmVjaXBlcywgd2hvc2UKKyAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgeW91IGNhbiB2aWV3IGluIHRoZSBZb2N0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4gdW5kZXIKKyAgICAgICAgICAgIHRoZSAiWW9jdG8gTGludXggS2VybmVsIiBoZWFkaW5nLgorICAgICAgICAgICAgTmV3IHJlY2lwZXMgZm9yIHRoZSByZWxlYXNlIHRyYWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZGV2ZWxvcG1lbnRzCisgICAgICAgICAgICBhbmQgaW50cm9kdWNlIG5ld2x5LXN1cHBvcnRlZCBwbGF0Zm9ybXMuCisgICAgICAgICAgICBQcmV2aW91cyByZWNpcGVzIGluIHRoZSByZWxlYXNlIGFyZSByZWZyZXNoZWQgYW5kIHN1cHBvcnRlZCBmb3IgYXQKKyAgICAgICAgICAgIGxlYXN0IG9uZSBhZGRpdGlvbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBBcyB0aGV5IGFsaWduLCB0aGVzZSBwcmV2aW91cyByZWxlYXNlcyBhcmUgdXBkYXRlZCB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgbGF0ZXN0IGZyb20gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L29yZ2FuaXphdGlvbi9sb25nLXRlcm0tc3VwcG9ydC1pbml0aWF0aXZlLWx0c2knPkxvbmcgVGVybSBTdXBwb3J0IEluaXRpYXRpdmU8L3VsaW5rPgorICAgICAgICAgICAgKExUU0kpIHByb2plY3QuCisgICAgICAgICAgICBBbHNvIGluY2x1ZGVkIGlzIGEgbGludXgteW9jdG8gZGV2ZWxvcG1lbnQgcmVjaXBlCisgICAgICAgICAgICAoPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldi5iYjwvZmlsZW5hbWU+KSBzaG91bGQgeW91IHdhbnQgdG8gd29yaworICAgICAgICAgICAgd2l0aCB0aGUgdmVyeSBsYXRlc3QgaW4gdXBzdHJlYW0gTGludXgga2VybmVsIGRldmVsb3BtZW50IGFuZAorICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhIGRldmVsb3BtZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBhbHNvIHByb3ZpZGVzIGEgcG93ZXJmdWwgc2V0IG9mIGtlcm5lbAorICAgICAgICAgICAgdG9vbHMgZm9yIG1hbmFnaW5nIExpbnV4IGtlcm5lbCBzb3VyY2VzIGFuZCBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSB0b29scyB0byBtYWtlIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gY2hhbmdlLAorICAgICAgICAgICAgYXBwbHkgbXVsdGlwbGUgcGF0Y2hlcywgb3Igd29yayB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUga2VybmVsIHRvb2xzIGFsbG93IHlvdSB0byBnZW5lcmF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgdGhhdCBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbXVzdCwgYW5kIG5vdGhpbmcgbW9yZS4KKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIG9ubHkgbmVlZCB0byBjb250YWluIHRoZSBoaWdoZXN0IGxldmVsCisgICAgICAgICAgICB2aXNpYmxlIDxmaWxlbmFtZT5DT05GSUc8L2ZpbGVuYW1lPiBvcHRpb25zIGFzIHByZXNlbnRlZCBieSB0aGUgTGludXgKKyAgICAgICAgICAgIGtlcm5lbCA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHN5c3RlbS4KKyAgICAgICAgICAgIENvbnRyYXN0IHRoaXMgYWdhaW5zdCBhIGNvbXBsZXRlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiwgd2hpY2ggaW5jbHVkZXMgYWxsIHRoZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICBzZWxlY3RlZCA8ZmlsZW5hbWU+Q09ORklHPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgZWZmaWNpZW5jeSByZWR1Y2VzIHlvdXIgbWFpbnRlbmFuY2UgZWZmb3J0IGFuZCBhbGxvd3MgeW91CisgICAgICAgICAgICB0byBmdXJ0aGVyIHNlcGFyYXRlIHlvdXIgY29uZmlndXJhdGlvbiBpbiB3YXlzIHRoYXQgbWFrZSBzZW5zZSBmb3IKKyAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgIEEgY29tbW9uIHNwbGl0IHNlcGFyYXRlcyBwb2xpY3kgYW5kIGhhcmR3YXJlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbCB5b3VyIGtlcm5lbHMgbWlnaHQgc3VwcG9ydAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wcm9jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zeXM8L2ZpbGVuYW1lPiBmaWxlc3lzdGVtcywKKyAgICAgICAgICAgIGJ1dCBvbmx5IHNwZWNpZmljIGJvYXJkcyByZXF1aXJlIHNvdW5kLCBVU0IsIG9yIHNwZWNpZmljIGRyaXZlcnMuCisgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGluZGl2aWR1YWxseSBhbGxvd3MgeW91IHRvIGFnZ3JlZ2F0ZQorICAgICAgICAgICAgdGhlbSB0b2dldGhlciBhcyBuZWVkZWQsIGJ1dCBtYWludGFpbnMgdGhlbSBpbiBvbmx5IG9uZSBwbGFjZS4KKyAgICAgICAgICAgIFNpbWlsYXIgbG9naWMgYXBwbGllcyB0byBzZXBhcmF0aW5nIHNvdXJjZSBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IG1haW50YWluIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzIGFuZCBuZWVkIHRvIG1ha2UKKyAgICAgICAgICAgIG9ubHkgbWluaW1hbCBjaGFuZ2VzIHRvIHRoZSBzb3VyY2VzLCB0aGUgcmVsZWFzZWQgcmVjaXBlcyBwcm92aWRlIGEKKyAgICAgICAgICAgIHZldHRlZCBiYXNlIHVwb24gd2hpY2ggdG8gbGF5ZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBiZW5lZml0IGZyb20gdGhlIGNvbnRpbnVhbCBrZXJuZWwKKyAgICAgICAgICAgIGludGVncmF0aW9uIGFuZCB0ZXN0aW5nIHBlcmZvcm1lZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiwgaW5zdGVhZCwgeW91IGhhdmUgYSB2ZXJ5IHNwZWNpZmljIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZQorICAgICAgICAgICAgYW5kIGFyZSB1bmFibGUgdG8gYWxpZ24gd2l0aCBvbmUgb2YgdGhlIG9mZmljaWFsIGxpbnV4LXlvY3RvCisgICAgICAgICAgICByZWNpcGVzLCBhbiBhbHRlcm5hdGl2ZSBleGlzdHMgYnkgd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IExpbnV4IGtlcm5lbCB0b29scyB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC1kZXYtb3RoZXItcmVzb3VyY2VzJz4KKyAgICAgICAgPHRpdGxlPk90aGVyIFJlc291cmNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2VjdGlvbnMgdGhhdCBmb2xsb3cgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIGNvbXBsZXRpbmcKKyAgICAgICAgICAgIHNwZWNpZmljIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCB0YXNrcy4KKyAgICAgICAgICAgIFRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgeW91IGFyZSBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuZW1iZWRkZWQub3JnL3dpa2kvQml0YmFrZSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICByZWNpcGVzIGFuZCBiYXNpYyBvcGVuLXNvdXJjZSBkZXZlbG9wbWVudCB0b29scy4KKyAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uY2VwdHMgd2lsbCBmYWNpbGl0YXRlIHRoZSBwcm9jZXNzIG9mIHdvcmtpbmcKKyAgICAgICAgICAgIHdpdGggdGhlIGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgSWYgeW91IGZpbmQgeW91IG5lZWQgc29tZSBhZGRpdGlvbmFsIGJhY2tncm91bmQsIHBsZWFzZSBiZSBzdXJlIHRvCisgICAgICAgICAgICByZXZpZXcgYW5kIHVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tb2RpZnlpbmctc291cmNlLWNvZGUnPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21vZGlmeWluZy10aGUta2VybmVsJz5Nb2RpZnlpbmcgdGhlIEtlcm5lbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaW5hbGx5LCB3aGlsZSB0aGlzIGRvY3VtZW50IGZvY3VzZXMgb24gdGhlIG1hbnVhbCBjcmVhdGlvbiBvZgorICAgICAgICAgICAgcmVjaXBlcywgcGF0Y2hlcywgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgdG9vbHMgYXJlIGF2YWlsYWJsZSB0byBhdXRvbWF0ZQorICAgICAgICAgICAgdGhpcyBwcm9jZXNzIHdpdGggZXhpc3RpbmcgY29udGVudCBhbmQgd29yayB3ZWxsIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgIGluaXRpYWwgZnJhbWV3b3JrIGFuZCBib2lsZXJwbGF0ZSBjb2RlLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlc2UgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyN1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdCdzIEJTUCBUb29sczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LW1haW50LWFwcHgueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmIwY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApAQCAtMCwwICsxLDIyMCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGFwcGVuZGl4IGlkPSdrZXJuZWwtZGV2LW1haW50LWFwcHgnPgorPHRpdGxlPktlcm5lbCBNYWludGVuYW5jZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ndHJlZS1jb25zdHJ1Y3Rpb24nPgorICAgICAgICA8dGl0bGU+VHJlZSBDb25zdHJ1Y3Rpb248L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgY29uc3RydWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICBhcyBhY2NvbXBsaXNoZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB0byBjcmVhdGUga2VybmVsIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFRoZXNlIGtlcm5lbCByZXBvc2l0b3JpZXMgYXJlIGZvdW5kIHVuZGVyIHRoZSBoZWFkaW5nICJZb2N0byBMaW51eCBLZXJuZWwiIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPiZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICBhbmQgY2FuIGJlIHNoaXBwZWQgYXMgcGFydCBvZiBhIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNyZWF0ZXMgdGhlc2UgcmVwb3NpdG9yaWVzIGJ5CisgICAgICAgICAgICBjb21waWxpbmcgYW5kIGV4ZWN1dGluZyB0aGUgc2V0IG9mIGZlYXR1cmUgZGVzY3JpcHRpb25zIGZvciBldmVyeSBCU1AKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlIGluIHRoZSBwcm9kdWN0LgorICAgICAgICAgICAgVGhvc2UgZmVhdHVyZSBkZXNjcmlwdGlvbnMgbGlzdCBhbGwgbmVjZXNzYXJ5IHBhdGNoZXMsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBicmFuY2hpbmcsIHRhZ2dpbmcgYW5kIGZlYXR1cmUgZGl2aXNpb25zIGZvdW5kIGluIGEga2VybmVsLgorICAgICAgICAgICAgVGh1cywgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgKG9yIHRyZWUpIGlzIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHRyZWUgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYW5kIGNsb25lIGEgcGFydGljdWxhcgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVwb3NpdG9yeSBhbmQgdXNlIGl0IHRvIGJ1aWxkIGltYWdlcyBiYXNlZCBvbiB0aGVpciBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgYW5kIGZlYXR1cmVzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmaWxlcyB1c2VkIHRvIGRlc2NyaWJlIGFsbCB0aGUgdmFsaWQgZmVhdHVyZXMgYW5kIEJTUHMKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiBhbnkgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5CisgICAgICAgICAgICBHaXQgdHJlZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2xvbmVzIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCB0aGF0CisgICAgICAgICAgICBicmFuY2hlZCBvZmYgb2YgPGZpbGVuYW1lPmxpbnV4Lm9yZzwvZmlsZW5hbWU+IHZlcnNpb24gMy4xOToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRm9yIGFub3RoZXIgZXhhbXBsZSBvZiBob3cgdG8gc2V0IHVwIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIGtlcm5lbCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLWtlcm5lbC1maWxlcyc+WW9jdG8gUHJvamVjdCBLZXJuZWw8L3VsaW5rPiIgYnVsbGV0ZWQKKyAgICAgICAgICAgIGl0ZW0gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIHlvdSBjYW4KKyAgICAgICAgICAgIHN3aXRjaCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggd2l0aGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYXNzdW1lcyB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBrZXJuZWwgaXMgaW4KKyAgICAgICAgICAgIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIGxpbnV4LXlvY3RvLTMuMTkKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgbWV0YSBvcmlnaW4vbWV0YQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjaGVja2VkIG91dCBhbmQgc3dpdGNoZWQgdG8gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLAorICAgICAgICAgICAgeW91IGNhbiBzZWUgYSBzbmFwc2hvdCBvZiBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBmZWF0dXJlIGRlc2NyaXB0aW9ucyB0aGF0IGFyZQorICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGF0IHBhcnRpY3VsYXIga2VybmVsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUaGVzZSBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZSBmb3JtIG9mIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgYnJvd3NpbmcgeW91ciBsb2NhbCBrZXJuZWwgcmVwb3NpdG9yeQorICAgICAgICAgICAgZm9yIGZlYXR1cmUgZGVzY3JpcHRpb25zIGFuZCBwYXRjaGVzIGlzIG5vdCBhbiBlZmZlY3RpdmUgd2F5IHRvIGRldGVybWluZSB3aGF0IGlzIGluIGEKKyAgICAgICAgICAgIHBhcnRpY3VsYXIga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIEdpdCBkaXJlY3RseSB0byBkaXNjb3ZlciB0aGUgY2hhbmdlcyBpbiBhIGJyYW5jaC4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgYW5kIGZsZXhpYmxlIHdheSB0byBpbnNwZWN0IGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LnNjYworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgbG9jYXRlZCwgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gaXMgZWl0aGVyIGNvbXBpbGVkIGludG8gYSBzaW1wbGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIG9mIGFjdGlvbnMsIG9yIGludG8gYW4gZXhpc3RpbmcgZXF1aXZhbGVudCBzY3JpcHQgdGhhdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNoaXBwZWQga2VybmVsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBmZWF0dXJlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmZWF0dXJlcyBjYW4gY29tZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz48ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FYWNoIGV4dHJhIGZlYXR1cmUgaXMgbG9jYXRlZCwgY29tcGlsZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgYXMgZGVzY3JpYmVkIGluIHN0ZXAgdGhyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgdG8gcHJvZHVjZSBhIHNlcmllcyBvZiA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSBkZXNjcmlwdGlvbnMgb2YgYWxsIHRoZSBicmFuY2hlcywgdGFncywgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGJhc2UgR2l0IHJlcG9zaXRvcnkgdG8gY29tcGxldGVseSBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSAoYnVpbGQpIGJyYW5jaCBmb3IgdGhlIG5ldyBCU1Agb3IgZmVhdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJhc2UgcmVwb3NpdG9yeSBpcyBjbG9uZWQsIGFuZCB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBhcmUgYXBwbGllZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgdHJlZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEdpdCByZXBvc2l0b3J5IGlzIGxlZnQgd2l0aCB0aGUgZGVzaXJlZCBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIGFueQorICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBicmFuY2hpbmcsIHBhdGNoaW5nIGFuZCB0YWdnaW5nIGhhcyBiZWVuIHBlcmZvcm1lZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUga2VybmVsIHRyZWUgaXMgbm93IHJlYWR5IGZvciBkZXZlbG9wZXIgY29uc3VtcHRpb24gdG8gYmUgbG9jYWxseSBjbG9uZWQsCisgICAgICAgICAgICBjb25maWd1cmVkLCBhbmQgYnVpbHQgaW50byBhIFlvY3RvIFByb2plY3Qga2VybmVsIHNwZWNpZmljIHRvIHNvbWUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgPG5vdGU+PHBhcmE+VGhlIGdlbmVyYXRlZCA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYWRkIHRvIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBBbnkgYWRkLW9ucyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIGFyZSBhcHBsaWVkIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYnJhbmNoLgorICAgICAgICAgICAgICAgIFRoZSBmdWxsIHJlcG9zaXRvcnkgZ2VuZXJhdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIG9mZmljaWFsIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgICAgICBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHN1cHBvcnRlZCBib2FyZHMgYW5kIGNvbmZpZ3VyYXRpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgdGVjaG5pcXVlIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdXNlcyBpcyBmbGV4aWJsZSBhbmQgYWxsb3dzIGZvciBzZWFtbGVzcworICAgICAgICAgICAgICAgIGJsZW5kaW5nIG9mIGFuIGltbXV0YWJsZSBoaXN0b3J5IHdpdGggYWRkaXRpb25hbCBwYXRjaGVzIHNwZWNpZmljIHRvIGEKKyAgICAgICAgICAgICAgICBkZXBsb3ltZW50LgorICAgICAgICAgICAgICAgIEFueSBhZGRpdGlvbnMgdG8gdGhlIGtlcm5lbCBiZWNvbWUgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIHRoZSBicmFuY2hlcy48L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGQtc3RyYXRlZ3knPgorICAgICAgICA8dGl0bGU+QnVpbGQgU3RyYXRlZ3k8L3RpdGxlPgorCis8IS0tCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNvbWUgcGFydHMgb2YgdGhpcyBzZWN0aW9uCisgICAgICAgICAgICBuZWVkIHRvIGJlIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz5Vc2luZyBhbiBJdGVyYXRpdmUgRGV2ZWxvcG1lbnQgUHJvY2VzczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgRGFycmVuIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGFydHMgYW5kIGlkZW50aWZ5IHRoZW0uCisgICAgICAgIDwvcGFyYT4KKy0tPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBleGlzdHMgb24gYSBkZXZlbG9wbWVudCBzeXN0ZW0sCisgICAgICAgICAgICB5b3UgY2FuIGNvbnNpZGVyIHRoZSBjb21waWxhdGlvbiBwaGFzZSBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQgLSBidWlsZGluZyBhIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgIFNvbWUgcHJlcmVxdWlzaXRlcyBleGlzdCB0aGF0IGFyZSB2YWxpZGF0ZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgYmVmb3JlIGNvbXBpbGF0aW9uCisgICAgICAgICAgICBzdGFydHM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4gcG9pbnRzCisgICAgICAgICAgICAgICAgdG8gdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIEJTUCBidWlsZCBicmFuY2ggZXhpc3RzLgorICAgICAgICAgICAgICAgIFRoaXMgYnJhbmNoIGhhcyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+a2VybmVsX3R5cGU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIGJ1aWxkaW5nIGEga2VybmVsLCB0aGUgYnVpbGQgcHJvY2VzcyB2ZXJpZmllcyB0aGUgdHJlZQorICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZXMgdGhlIGtlcm5lbCBieSBwcm9jZXNzaW5nIGFsbCBvZiB0aGUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gImZyYWdtZW50cyIgc3BlY2lmaWVkIGJ5IGZlYXR1cmUgZGVzY3JpcHRpb25zIGluIHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgIEFzIHRoZSBmZWF0dXJlcyBhcmUgY29tcGlsZWQsIGFzc29jaWF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFyZSBub3RlZAorICAgICAgICAgICAgYW5kIHJlY29yZGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gc2VyaWVzIG9mIGRpcmVjdG9yaWVzIGluIHRoZWlyIGNvbXBpbGF0aW9uIG9yZGVyLgorICAgICAgICAgICAgVGhlIGZyYWdtZW50cyBhcmUgbWlncmF0ZWQsIHByZS1wcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgTGludXggS2VybmVsCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIHN1YnN5c3RlbSAoPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+KSBhcyByYXcgaW5wdXQgaW4gdGhlIGZvcm0KKyAgICAgICAgICAgIG9mIGEgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sa2M8L2ZpbGVuYW1lPiB1c2VzIGl0cyBvd24gaW50ZXJuYWwgZGVwZW5kZW5jeSBjb25zdHJhaW50cyB0byBkbyB0aGUgZmluYWwKKyAgICAgICAgICAgIHByb2Nlc3Npbmcgb2YgdGhhdCBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhdGVzIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIHRoYXQgaXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzaW5nIHRoZSBib2FyZCdzIGFyY2hpdGVjdHVyZSBhbmQgb3RoZXIgcmVsZXZhbnQgdmFsdWVzIGZyb20gdGhlIGJvYXJkJ3MgdGVtcGxhdGUsCisgICAgICAgICAgICBrZXJuZWwgY29tcGlsYXRpb24gaXMgc3RhcnRlZCBhbmQgYSBrZXJuZWwgaW1hZ2UgaXMgcHJvZHVjZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvdGhlciB0aGluZyB0aGF0IHlvdSBub3RpY2Ugb25jZSB5b3UgY29uZmlndXJlIGEga2VybmVsIGlzIHRoYXQKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBhIGJ1aWxkIHRyZWUgdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHlvdXIga2VybmVsJ3MgbG9jYWwgR2l0CisgICAgICAgICAgICBzb3VyY2UgcmVwb3NpdG9yeSB0cmVlLgorICAgICAgICAgICAgVGhpcyBidWlsZCB0cmVlIGhhcyBhIG5hbWUgdGhhdCB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybSwgd2hlcmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gaXMgdGhlIG1ldGFkYXRhIG5hbWUgb2YgdGhlIG1hY2hpbmUgKEJTUCkgYW5kICJrZXJuZWxfdHlwZSIgaXMgb25lCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0ZWQga2VybmVsIHR5cGVzIChlLmcuICJzdGFuZGFyZCIpOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxpbnV4LSR7TUFDSElORX0tPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4tYnVpbGQKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXhpc3Rpbmcgc3VwcG9ydCBpbiB0aGUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiB0cmVlIGFjaGlldmVzIHRoaXMKKyAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBtZWFucyB0aGF0IGFsbCB0aGUgZ2VuZXJhdGVkIGZpbGVzIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBvciBCU1AgYXJlIG5vdyBpbgorICAgICAgICAgICAgdGhlIGJ1aWxkIHRyZWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGZpbGVzIGluY2x1ZGUgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgYWxsIHRoZSA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZXMsIHRoZSA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBmaWxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgU2luY2UgZWFjaCBtYWNoaW5lIG9yIEJTUCBoYXMgaXRzIG93biBzZXBhcmF0ZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaW4gaXRzIG93biBzZXBhcmF0ZSBicmFuY2gKKyAgICAgICAgICAgIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBlYXNpbHkgc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGJ1aWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwYzFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkZjJjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0na2VybmVsLWRldicgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorCQkgIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbAorCQk8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5EYXJyZW48L2ZpcnN0bmFtZT4gPHN1cm5hbWU+SGFydDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmRhcnJlbi5oYXJ0QGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb21tb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWFkdmFuY2VkLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb25jZXB0cy1hcHB4LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1tYWludC1hcHB4LnhtbCIvPgorCis8IS0tCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1leGFtcGxlcy54bWwiLz4KKy0tPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1mYXEueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTcxZTQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGYyNzk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI3YjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBiMGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjI0ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjFmOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZGI4NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDVmOGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWZiZWE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3NDY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjY3MGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyMjcxOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYWM0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwMTMzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmVhN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjk2MjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2ltYWdlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5ZWFjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2ltYWdlcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkwNzk5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYWFkMTcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5MTA1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YThkZDU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNmMwYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjk3MGVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkODZjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNDBiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRkNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZWRmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmQwZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1vdXRwdXQtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNGYyZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjYwMTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9tZWdhLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGUwYjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNzVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjY0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1kb3dubG9hZGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NDJkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjOWMzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWNkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTEwNzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVjNmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyODY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2UyNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMzRlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODFlOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk2MmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQyZDA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGYzOTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLWRlYnVnaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5OWFmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC11bnJlc29sdmVkLWhpZGRlbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTgwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5M2Q4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YzY4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZiZmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0Njc1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUzNTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTk2MGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdlMjc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzljYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZjZTJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YWVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1pbnB1dC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTE1MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzVmMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LWZyb20tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTViYWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYTM5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxMzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGM2YzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI3YTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWQyYjE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzcwYmU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJiNWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsNDIgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiPgorICAgYXBwZW5kaXggIHRvYworICAgY2hhcHRlciAgIHRvYworICAgYXJ0aWNsZSAgIG5vcAorICAgYm9vayAgICAgIG5vcAorICAgcGFydCAgICAgIG5vcAorICAgcHJlZmFjZSAgIG5vcAorICAgcWFuZGFkaXYgIG5vcAorICAgcWFuZGFzZXQgIG5vcAorICAgcmVmZXJlbmNlIG5vcAorICAgc2VjdGlvbiAgIG5vcAorICAgc2V0ICAgICAgIG5vcAorICA8L3hzbDpwYXJhbT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ21lZ2Etc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzVlYmYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbApAQCAtMCwwICsxLDIzMSBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworCis8Ym9vayBpZD0nbWVnYS1tYW51YWwnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisKKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPGFic3RyYWN0PgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgTWVnYS1NYW51YWwgaXMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBwdWJsaXNoZWQKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgSFRNTCBtYW51YWxzIGZvciB0aGUgZ2l2ZW4gcmVsZWFzZS4KKyAgICAgICAgICAgIFRoZSBtYW51YWwgZXhpc3RzIHRvIGhlbHAgdXNlcnMgZWZmaWNpZW50bHkgc2VhcmNoIGZvciBzdHJpbmdzCisgICAgICAgICAgICBhY3Jvc3MgdGhlIGVudGlyZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gc2V0LgorICAgICAgICA8L2Fic3RyYWN0PgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcnCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nU1ZHJworICAgICAgICAgICAgICAgICAgICBhbGlnbj0nbGVmdCcgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgTWVnYS1NYW51YWwKKyAgICAgICAgPC90aXRsZT4KKworICAgICAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+U2NvdHQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UmlmZW5iYXJrPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+c2NvdHQubS5yaWZlbmJhcmtAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX01NX1VSTDsnPllvY3RvIFByb2plY3QgTWVnYS1NYW51YWw8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKworICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCis8IS0tIEluY2x1ZGVzIHlvY3RvLXByb2plY3QtcXMgLS0+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGRldi1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gZGV2LW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGV2LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWNvbW1vbi10YXNrcy54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXFlbXUueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMgYWR0LW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiBhZHQtbWFudWFsIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9hZHQtdGl0bGUucG5nIiB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1tYW51YWwtaW50cm8ueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1wcmVwYXJlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGJzcC1ndWlkZSB0aXRsZSBpbWFnZSBhbmQgdGhlbiBic3AtZ3VpZGUgY2hhcHRlcnMgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2JzcC10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2JzcC1ndWlkZS9ic3AueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMga2VybmVsLWRldiB0aXRsZSBpbWFnZSBhbmQgdGhlbiBrZXJuZWwtZGV2IGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29tbW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jb25jZXB0cy1hcHB4LnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtbWFpbnQtYXBweC54bWwiLz4KKworPCEtLSBJbmNsdWRlcyBwcm9maWxlLW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiBwcm9maWxlLW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC11c2FnZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZXhhbXBsZXMueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMgcmVmLW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiByZWYtbWFudWFsIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wb2t5LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC91c2luZ3Bva3kueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvbWlncmF0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXN0cnVjdHVyZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1jbGFzc2VzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXFhLWNoZWNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtZmVhdHVyZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvZmFxLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVzb3VyY2VzLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIHRvYXN0ZXItbWFudWFsIHRpdGxlIGltYWdlIGFuZCB0aGVuIHRvYXN0ZXItbWFudWFsIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sIi8+CisKKzwvYm9vaz4KKworPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MWEyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9tZWdhLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcG9reS5lbnQgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcG9reS5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNGY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wb2t5LmVudApAQCAtMCwwICsxLDcwIEBACis8IUVOVElUWSBESVNUUk8gIjEuOSI+Cis8IUVOVElUWSBESVNUUk9fQ09NUFJFU1NFRCAiMTkiPgorPCFFTlRJVFkgRElTVFJPX05BTUUgInRiZCI+Cis8IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMS45Ij4KKzwhRU5USVRZIFBPS1lWRVJTSU9OICIxNC4wLjAiPgorPCFFTlRJVFkgUE9LWVZFUlNJT05fQ09NUFJFU1NFRCAiMTQwMCI+Cis8IUVOVElUWSBZT0NUT19QT0tZICJwb2t5LSZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOyI+Cis8IUVOVElUWSBDT1BZUklHSFRfWUVBUiAiMjAxMC0yMDE1Ij4KKzwhRU5USVRZIFlPQ1RPX0RMX1VSTCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0hPTUVfVVJMICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fTElTVFNfVVJMICJodHRwOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19CVUdaSUxMQV9VUkwgImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX1dJS0lfVVJMICJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19BQl9VUkwgImh0dHA6Ly9hdXRvYnVpbGRlci55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0dJVF9VUkwgImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19BRFRSRVBPX1VSTCAiaHR0cDovL2FkdHJlcG8ueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19SRUxFQVNFX05PVEVTICImWU9DVE9fSE9NRV9VUkw7L2Rvd25sb2Fkcy9jb3JlLyZESVNUUk9fTkFNRTsmRElTVFJPX0NPTVBSRVNTRUQ7Ij4KKzwhRU5USVRZIE9FX0hPTUVfVVJMICJodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmciPgorPCFFTlRJVFkgT0VfTElTVFNfVVJMICJodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tYWlsbWFuIj4KKzwhRU5USVRZIE9FX0RPQ1NfVVJMICJodHRwOi8vZG9jcy5vcGVuZW1iZWRkZWQub3JnIj4KKzwhRU5USVRZIE9IX0hPTUVfVVJMICJodHRwOi8vby1oYW5kLmNvbSI+Cis8IUVOVElUWSBCSVRCQUtFX0hPTUVfVVJMICJodHRwOi8vZGV2ZWxvcGVyLmJlcmxpb3MuZGUvcHJvamVjdHMvYml0YmFrZS8iPgorPCFFTlRJVFkgRUNMSVBTRV9NQUlOX1VSTCAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMiPgorPCFFTlRJVFkgRUNMSVBTRV9ETF9VUkwgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZyI+Cis8IUVOVElUWSBFQ0xJUFNFX0RMX1BMVUdJTl9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL2VjbGlwc2UtcGx1Z2luLyZESVNUUk87Ij4KKzwhRU5USVRZIEVDTElQU0VfVVBEQVRFU19VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvdG0vdXBkYXRlcy8zLjMiPgorPCFFTlRJVFkgRUNMSVBTRV9JTkRJR09fVVJMICImRUNMSVBTRV9ETF9VUkw7L3JlbGVhc2VzL2luZGlnbyI+Cis8IUVOVElUWSBFQ0xJUFNFX0pVTk9fVVJMICImRUNMSVBTRV9ETF9VUkw7L3JlbGVhc2VzL2p1bm8iPgorPCFFTlRJVFkgRUNMSVBTRV9MVU5BX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9sdW5hIj4KKzwhRU5USVRZIEVDTElQU0VfS0VQTEVSX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9rZXBsZXIiPgorPCFFTlRJVFkgRUNMSVBTRV9JTkRJR09fQ0RUX1VSTCAiJkVDTElQU0VfRExfVVJMOy90b29scy9jZHQvcmVsZWFzZXMvaW5kaWdvIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfVVJMICImWU9DVE9fSE9NRV9VUkw7L2RvY3MiPgorPCFFTlRJVFkgWU9DVE9fU09VUkNFU19VUkwgIiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8iPgorPCFFTlRJVFkgWU9DVE9fQUJfUE9SVF9VUkwgIiZZT0NUT19BQl9VUkw7OjgwMTAiPgorPCFFTlRJVFkgWU9DVE9fQUJfTklHSFRMWV9VUkwgIiZZT0NUT19BQl9VUkw7L3B1Yi9uaWdodGx5LyI+Cis8IUVOVElUWSBZT0NUT19QT0tZX1VSTCAiJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMvcG9reS8iPgorPCFFTlRJVFkgWU9DVE9fUkVMRUFTRV9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3lvY3RvL3lvY3RvLSZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1RPT0xDSEFJTl9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvdG9vbGNoYWluLyI+Cis8IUVOVElUWSBZT0NUT19FQ0xJUFNFX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9lY2xpcHNlLXBsdWdpbi8iPgorPCFFTlRJVFkgWU9DVE9fQURUSU5TVEFMTEVSX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9hZHQtaW5zdGFsbGVyIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7LyZZT0NUT19QT0tZOy50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX01BQ0hJTkVTX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyI+Cis8IUVOVElUWSBZT0NUT19RRU1VX0RMX1VSTCAiJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsvcWVtdSI+Cis8IUVOVElUWSBZT0NUT19QWVRIT04taTY4Nl9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS1pNjg2LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLXg4Nl82NF9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS14ODZfNjQudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1FTX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQURUX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2FkdC1tYW51YWwvYWR0LW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfUkVGX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQlNQX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2JzcC1ndWlkZS9ic3AtZ3VpZGUuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0RFVl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0tFUk5FTF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsva2VybmVsLWRldi9rZXJuZWwtZGV2Lmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19QUk9GX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19NTV9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQkJfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19UT0FTVF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0FEVFBBVEhfRElSICIvb3B0L3Bva3kvJkRJU1RSTzsiPgorPCFFTlRJVFkgWU9DVE9fUE9LWV9UQVJCQUxMICImWU9DVE9fUE9LWTsudGFyLmJ6MiI+Cis8IUVOVElUWSBPRV9JTklUX1BBVEggIiZZT0NUT19QT0tZOy9vZS1pbml0LWJ1aWxkLWVudiI+Cis8IUVOVElUWSBPRV9JTklUX0ZJTEUgIm9lLWluaXQtYnVpbGQtZW52Ij4KKzwhRU5USVRZIFVCVU5UVV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayB3Z2V0IGdpdC1jb3JlIGRpZmZzdGF0IHVuemlwIHRleGluZm8gZ2NjLW11bHRpbGliIFwKKyAgICAgYnVpbGQtZXNzZW50aWFsIGNocnBhdGggc29jYXQiPgorPCFFTlRJVFkgRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIG1ha2Ugd2dldCB0YXIgYnppcDIgZ3ppcCBweXRob24gdW56aXAgcGVybCBwYXRjaCBcCisgICAgIGRpZmZ1dGlscyBkaWZmc3RhdCBnaXQgY3BwIGdjYyBnY2MtYysrIGdsaWJjLWRldmVsIHRleGluZm8gY2hycGF0aCBcCisgICAgIGNjYWNoZSBwZXJsLURhdGEtRHVtcGVyIHBlcmwtVGV4dC1QYXJzZVdvcmRzIHBlcmwtVGhyZWFkLVF1ZXVlIHNvY2F0IFwKKyAgICAgZmluZHV0aWxzIHdoaWNoIj4KKzwhRU5USVRZIE9QRU5TVVNFX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJweXRob24gZ2NjIGdjYy1jKysgZ2l0IGNocnBhdGggbWFrZSB3Z2V0IHB5dGhvbi14bWwgXAorICAgICBkaWZmc3RhdCBtYWtlaW5mbyBweXRob24tY3Vyc2VzIHBhdGNoIHNvY2F0Ij4KKzwhRU5USVRZIENFTlRPU19IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayBtYWtlIHdnZXQgdGFyIGJ6aXAyIGd6aXAgcHl0aG9uIHVuemlwIHBlcmwgcGF0Y2ggXAorICAgICBkaWZmdXRpbHMgZGlmZnN0YXQgZ2l0IGNwcCBnY2MgZ2NjLWMrKyBnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggc29jYXQiPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNDBiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRkNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZWRmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmQwZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1vdXRwdXQtZGlzcGxheS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjYwMTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNzVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjY0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1kb3dubG9hZGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NDJkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0NzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTEwNzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVjNmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyODY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2UyNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMzRlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODFlOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk2MmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQyZDA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGYzOTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLWRlYnVnaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5OWFmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC11bnJlc29sdmVkLWhpZGRlbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTgwOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YzY4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZiZmRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0Njc1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUzNTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1ODExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LWZyb20tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTViYWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1hcmNoLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQxMTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWFyY2gueG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC1hcmNoJz4KKworPHRpdGxlPk92ZXJhbGwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBUcmFjaW5nIGFuZCBQcm9maWxpbmcgVG9vbHM8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW9mLXRoZS10cmFjaW5nLWFuZC1wcm9maWxpbmctdG9vbHMnPgorICAgIDx0aXRsZT5BcmNoaXRlY3R1cmUgb2YgdGhlIFRyYWNpbmcgYW5kIFByb2ZpbGluZyBUb29sczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQgbWF5IHNlZW0gc3VycHJpc2luZyB0byBzZWUgYSBzZWN0aW9uIGNvdmVyaW5nIGFuICdvdmVyYWxsIGFyY2hpdGVjdHVyZScKKyAgICAgICAgZm9yIHdoYXQgc2VlbXMgdG8gYmUgYSByYW5kb20gY29sbGVjdGlvbiBvZiB0cmFjaW5nIHRvb2xzIHRoYXQgdG9nZXRoZXIKKyAgICAgICAgbWFrZSB1cCB0aGUgTGludXggdHJhY2luZyBhbmQgcHJvZmlsaW5nIHNwYWNlLgorICAgICAgICBUaGUgZmFjdCBpcywgaG93ZXZlciwgdGhhdCBpbiByZWNlbnQgeWVhcnMgdGhpcyBzZWVtaW5nbHkgZGlzcGFyYXRlCisgICAgICAgIHNldCBvZiB0b29scyBoYXMgc3RhcnRlZCB0byBjb252ZXJnZSBvbiBhICdjb3JlJyBzZXQgb2YgdW5kZXJseWluZworICAgICAgICBtZWNoYW5pc21zOgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPnN0YXRpYyB0cmFjZXBvaW50czwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPmtwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPnVwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+dGhlIHBlcmZfZXZlbnRzIHN1YnN5c3RlbTwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZGVidWdmczwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBSYXRoZXIgdGhhbiBlbnVtZXJhdGluZyBoZXJlIGhvdyBlYWNoIHRvb2wgbWFrZXMgdXNlIG9mCisgICAgICAgIHRoZXNlIGNvbW1vbiBtZWNoYW5pc21zLCB0ZXh0Ym94ZXMgbGlrZSB0aGlzIHdpbGwgbWFrZSBub3RlIG9mIHRoZQorICAgICAgICBzcGVjaWZpYyB1c2FnZXMgaW4gZWFjaCB0b29sIGFzIHRoZXkgY29tZSB1cCBpbiB0aGUgY291cnNlCisgICAgICAgIG9mIHRoZSB0ZXh0LgorICAgIDwvaW5mb3JtYWxleGFtcGxlPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNTdlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iidwcm9maWxlLW1hbnVhbC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5ODI4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvcHJvZmlsZS1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZXhhbXBsZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMwYzZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncHJvZmlsZS1tYW51YWwtZXhhbXBsZXMnPgorCis8dGl0bGU+UmVhbC1Xb3JsZCBFeGFtcGxlczwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBjb250YWlucyByZWFsLXdvcmxkIGV4YW1wbGVzLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nc2xvdy13cml0ZS1zcGVlZC1vbi1saXZlLWltYWdlcyc+CisgICAgPHRpdGxlPlNsb3cgV3JpdGUgU3BlZWQgb24gTGl2ZSBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIG9uZSBvZiBvdXIgcHJldmlvdXMgcmVsZWFzZXMgKGRlbnppbCksIHVzZXJzIG5vdGljZWQgdGhhdCBib290aW5nCisgICAgICAgIG9mZiBvZiBhIGxpdmUgaW1hZ2UgYW5kIHdyaXRpbmcgdG8gZGlzayB3YXMgbm90aWNlYWJseSBzbG93ZXIuCisgICAgICAgIFRoaXMgaW5jbHVkZWQgdGhlIGJvb3QgaXRzZWxmLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBvbmUsIHNpbmNlIGZpcnN0CisgICAgICAgIGJvb3RzIHRlbmQgdG8gZG8gYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd3JpdGluZyBkdWUgdG8gY2VydGFpbgorICAgICAgICBwb3N0LWluc3RhbGwgc2NyaXB0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHByb2JsZW0gKGFuZCBzb2x1dGlvbikgd2FzIGRpc2NvdmVyZWQgYnkgdXNpbmcgdGhlIFlvY3RvIHRyYWNpbmcKKyAgICAgICAgdG9vbHMsIGluIHRoaXMgY2FzZSAncGVyZiBzdGF0JywgJ3BlcmYgc2NyaXB0JywgJ3BlcmYgcmVjb3JkJworICAgICAgICBhbmQgJ3BlcmYgcmVwb3J0Jy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU2VlIGFsbCB0aGUgdW52YXJuaXNoZWQgZGV0YWlscyBvZiBob3cgdGhpcyBidWcgd2FzIGRpYWdub3NlZCBhbmQKKyAgICAgICAgc29sdmVkIGhlcmU6IFlvY3RvIEJ1ZyAjMzA0OQorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtaW50cm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ3ZjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3Byb2ZpbGUtbWFudWFsLWludHJvJz4KKworPHRpdGxlPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtaW50cm8nPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGJ1bmRsZXMgYSBudW1iZXIgb2YgdHJhY2luZyBhbmQgcHJvZmlsaW5nIHRvb2xzIC0gdGhpcyAnSE9XVE8nCisgICAgICAgICAgICBkZXNjcmliZXMgdGhlaXIgYmFzaWMgdXNhZ2UgYW5kIHNob3dzIGJ5IGV4YW1wbGUgaG93IHRvIG1ha2UgdXNlCisgICAgICAgICAgICBvZiB0aGVtIHRvIGV4YW1pbmUgYXBwbGljYXRpb24gYW5kIHN5c3RlbSBiZWhhdmlvci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2xzIHByZXNlbnRlZCBhcmUgZm9yIHRoZSBtb3N0IHBhcnQgY29tcGxldGVseSBvcGVuLWVuZGVkIGFuZAorICAgICAgICAgICAgaGF2ZSBxdWl0ZSBnb29kIGFuZC9vciBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBvZiB0aGVpciBvd24gd2hpY2gKKyAgICAgICAgICAgIGNhbiBiZSB1c2VkIHRvIHNvbHZlIGp1c3QgYWJvdXQgYW55IHByb2JsZW0geW91IG1pZ2h0IGNvbWUgYWNyb3NzCisgICAgICAgICAgICBpbiBMaW51eC4KKyAgICAgICAgICAgIEVhY2ggc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgdG9vbCBoYXMgbGlua3MgdG8gdGhhdAorICAgICAgICAgICAgdG9vbCdzIGRvY3VtZW50YXRpb24gYW5kIHdlYnNpdGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgJ0hPV1RPJyBpcyB0byBwcmVzZW50IGEgc2V0IG9mIGNvbW1vbiBhbmQKKyAgICAgICAgICAgIGdlbmVyYWxseSB1c2VmdWwgdHJhY2luZyBhbmQgcHJvZmlsaW5nIGlkaW9tcyBhbG9uZyB3aXRoIHRoZWlyCisgICAgICAgICAgICBhcHBsaWNhdGlvbiAoYXMgYXBwcm9wcmlhdGUpIHRvIGVhY2ggdG9vbCwgaW4gdGhlIGNvbnRleHQgb2YgYQorICAgICAgICAgICAgZ2VuZXJhbC1wdXJwb3NlICdkcmlsbC1kb3duJyBtZXRob2RvbG9neSB0aGF0IGNhbiBiZSBhcHBsaWVkCisgICAgICAgICAgICB0byBzb2x2aW5nIGEgbGFyZ2UgbnVtYmVyICg5MCU/KSBvZiBwcm9ibGVtcy4KKyAgICAgICAgICAgIEZvciBoZWxwIHdpdGggbW9yZSBhZHZhbmNlZCB1c2FnZXMgYW5kIHByb2JsZW1zLCBwbGVhc2Ugc2VlCisgICAgICAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igd2Vic2l0ZXMgbGlzdGVkIGZvciBlYWNoIHRvb2wuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaW5hbCBzZWN0aW9uIG9mIHRoaXMgJ0hPV1RPJyBpcyBhIGNvbGxlY3Rpb24gb2YgcmVhbC13b3JsZAorICAgICAgICAgICAgZXhhbXBsZXMgd2hpY2ggd2UnbGwgYmUgY29udGludWFsbHkgYWRkaW5nIHRvIGFzIHdlIHNvbHZlIG1vcmUKKyAgICAgICAgICAgIHByb2JsZW1zIHVzaW5nIHRoZSB0b29scyAtIGZlZWwgZnJlZSB0byBhZGQgeW91ciBvd24gZXhhbXBsZXMKKyAgICAgICAgICAgIHRvIHRoZSBsaXN0IQorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPgorICAgICAgICA8dGl0bGU+R2VuZXJhbCBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNb3N0IG9mIHRoZSB0b29scyBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gJ3NkaycgaW1hZ2VzIG9yIGluIGltYWdlcworICAgICAgICAgICAgYnVpbHQgYWZ0ZXIgYWRkaW5nICd0b29scy1wcm9maWxlJyB0byB5b3VyIGxvY2FsLmNvbmYuCisgICAgICAgICAgICBTbywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYWxsIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaGVyZSwKKyAgICAgICAgICAgIHBsZWFzZSBmaXJzdCBidWlsZCBhbmQgYm9vdCBhbiAnc2RrJyBpbWFnZSBlLmcuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8tc2RrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBvciBhbHRlcm5hdGl2ZWx5IGJ5IGFkZGluZyAndG9vbHMtcHJvZmlsZScgdG8gdGhlCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBsaW5lIGluIHlvdXIgbG9jYWwuY29uZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyB0b29scy1wcm9maWxlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgJ3Rvb2xzLXByb2ZpbGUnIG1ldGhvZCwgeW91IGRvbid0IG5lZWQgdG8gYnVpbGQgYW4KKyAgICAgICAgICAgIHNkayBpbWFnZSAtIHRoZSB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbHMgd2lsbCBiZSBpbmNsdWRlZCBpbgorICAgICAgICAgICAgbm9uLXNkayBpbWFnZXMgYXMgd2VsbCBlLmcuOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT48cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgWW9jdG8gYnVpbGQgc3lzdGVtIHN0cmlwcyBzeW1ib2xzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgYmluYXJpZXMgaXQgcGFja2FnZXMsIHdoaWNoIG1ha2VzIGl0IGRpZmZpY3VsdCB0byB1c2Ugc29tZQorICAgICAgICAgICAgICAgIG9mIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PHBhcmE+WW91IGNhbiBwcmV2ZW50IHRoYXQgYnkgcHV0dGluZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaW4geW91ciBsb2NhbC5jb25mIHdoZW4geW91IGJ1aWxkIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIHNldHRpbmcgd2lsbCBub3RpY2VhYmx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSd2ZSBhbHJlYWR5IGJ1aWx0IGEgc3RyaXBwZWQgaW1hZ2UsIHlvdSBjYW4gZ2VuZXJhdGUKKyAgICAgICAgICAgIGRlYnVnIHBhY2thZ2VzICh4eHgtZGJnKSB3aGljaCB5b3UgY2FuIG1hbnVhbGx5IGluc3RhbGwgYXMKKyAgICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2VuZXJhdGUgZGVidWcgaW5mbyBmb3IgcGFja2FnZXMsIHlvdSBjYW4gYWRkIGRiZy1wa2dzIHRvCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBpbiBsb2NhbC5jb25mLiBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSByaWdodCB0eXBlIG9mCisgICAgICAgICAgICBkZWJ1Z2luZm8sIHdlIGFsc28gbmVlZCB0byBhZGQgdGhlIGZvbGxvd2luZyB0byBsb2NhbC5jb25mOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFID0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NjYTg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWFkNzM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbApAQCAtMCwwICsxLDM2OTUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC11c2FnZSc+CisKKzx0aXRsZT5CYXNpYyBVc2FnZSAod2l0aCBleGFtcGxlcykgZm9yIGVhY2ggb2YgdGhlIFlvY3RvIFRyYWNpbmcgVG9vbHM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgcHJlc2VudHMgYmFzaWMgdXNhZ2UgZXhhbXBsZXMgZm9yIGVhY2ggb2YgdGhlIHRyYWNpbmcKKyAgICB0b29scy4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXBlcmYnPgorICAgIDx0aXRsZT5wZXJmPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgJ3BlcmYnIHRvb2wgaXMgdGhlIHByb2ZpbGluZyBhbmQgdHJhY2luZyB0b29sIHRoYXQgY29tZXMKKyAgICAgICAgYnVuZGxlZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIERvbid0IGxldCB0aGUgZmFjdCB0aGF0IGl0J3MgcGFydCBvZiB0aGUga2VybmVsIGZvb2wgeW91IGludG8gdGhpbmtpbmcKKyAgICAgICAgdGhhdCBpdCdzIG9ubHkgZm9yIHRyYWNpbmcgYW5kIHByb2ZpbGluZyB0aGUga2VybmVsIC0geW91IGNhbiBpbmRlZWQKKyAgICAgICAgdXNlIGl0IHRvIHRyYWNlIGFuZCBwcm9maWxlIGp1c3QgdGhlIGtlcm5lbCwgYnV0IHlvdSBjYW4gYWxzbyB1c2UgaXQKKyAgICAgICAgdG8gcHJvZmlsZSBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgc2VwYXJhdGVseSAod2l0aCBvciB3aXRob3V0IGtlcm5lbAorICAgICAgICBjb250ZXh0KSwgYW5kIHlvdSBjYW4gYWxzbyB1c2UgaXQgdG8gdHJhY2UgYW5kIHByb2ZpbGUgdGhlIGtlcm5lbAorICAgICAgICBhbmQgYWxsIGFwcGxpY2F0aW9ucyBvbiB0aGUgc3lzdGVtIHNpbXVsdGFuZW91c2x5IHRvIGdhaW4gYSBzeXN0ZW0td2lkZQorICAgICAgICB2aWV3IG9mIHdoYXQncyBnb2luZyBvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gbWFueSB3YXlzLCBwZXJmIGFpbXMgdG8gYmUgYSBzdXBlcnNldCBvZiBhbGwgdGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZworICAgICAgICB0b29scyBhdmFpbGFibGUgaW4gTGludXggdG9kYXksIGluY2x1ZGluZyBhbGwgdGhlIG90aGVyIHRvb2xzIGNvdmVyZWQKKyAgICAgICAgaW4gdGhpcyBIT1dUTy4gVGhlIHBhc3QgY291cGxlIG9mIHllYXJzIGhhdmUgc2VlbiBwZXJmIHN1YnN1bWUgYSBsb3QKKyAgICAgICAgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2Ugb3RoZXIgdG9vbHMgYW5kLCBhdCB0aGUgc2FtZSB0aW1lLCB0aG9zZQorICAgICAgICBvdGhlciB0b29scyBoYXZlIHJlbW92ZWQgbGFyZ2UgcG9ydGlvbnMgb2YgdGhlaXIgcHJldmlvdXMgZnVuY3Rpb25hbGl0eQorICAgICAgICBhbmQgcmVwbGFjZWQgaXQgd2l0aCBjYWxscyB0byB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IG5vdworICAgICAgICBpbXBsZW1lbnRlZCBieSB0aGUgcGVyZiBzdWJzeXN0ZW0uIEV4dHJhcG9sYXRpb24gc3VnZ2VzdHMgdGhhdCBhdAorICAgICAgICBzb21lIHBvaW50IHRob3NlIG90aGVyIHRvb2xzIHdpbGwgc2ltcGx5IGJlY29tZSBjb21wbGV0ZWx5IHJlZHVuZGFudAorICAgICAgICBhbmQgZ28gYXdheTsgdW50aWwgdGhlbiwgd2UnbGwgY292ZXIgdGhvc2Ugb3RoZXIgdG9vbHMgaW4gdGhlc2UgcGFnZXMKKyAgICAgICAgYW5kIGluIG1hbnkgY2FzZXMgc2hvdyBob3cgdGhlIHNhbWUgdGhpbmdzIGNhbiBiZSBhY2NvbXBsaXNoZWQgaW4KKyAgICAgICAgcGVyZiBhbmQgdGhlIG90aGVyIHRvb2xzIHdoZW4gaXQgc2VlbXMgdXNlZnVsIHRvIGRvIHNvLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY292ZXJhZ2UgYmVsb3cgZGV0YWlscyBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiB3YXlzIHlvdSdsbCBsaWtlbHkKKyAgICAgICAgd2FudCB0byBhcHBseSB0aGUgdG9vbDsgZnVsbCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBlaXRoZXIgd2l0aGluCisgICAgICAgIHRoZSB0b29sIGl0c2VsZiBvciBpbiB0aGUgbWFuIHBhZ2VzIGF0CisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYnPnBlcmYoMSk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncGVyZi1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZSBiYXNpYworICAgICAgICAgICAgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91J2xsIGdldCB0aGUgbW9zdCBtaWxlYWdlIG91dCBvZiBwZXJmIGlmIHlvdQorICAgICAgICAgICAgcHJvZmlsZSBhbiBpbWFnZSBidWlsdCB3aXRoIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIiBpbiB5b3VyCisgICAgICAgICAgICBsb2NhbC5jb25mLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBwZXJmIHJ1bnMgb24gdGhlIHRhcmdldCBzeXN0ZW0gZm9yIHRoZSBtb3N0IHBhcnQuIFlvdSBjYW4gYXJjaGl2ZQorICAgICAgICAgICAgcHJvZmlsZSBkYXRhIGFuZCBjb3B5IGl0IHRvIHRoZSBob3N0IGZvciBhbmFseXNpcywgYnV0IGZvciB0aGUKKyAgICAgICAgICAgIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQKKyAgICAgICAgICAgIHdpbGwgYmUgcnVubmluZyB0aGUgcGVyZiBjb21tYW5kcyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHBlcmYgdG9vbCBpcyBwcmV0dHkgbXVjaCBzZWxmLWRvY3VtZW50aW5nLiBUbyByZW1pbmQgeW91cnNlbGYKKyAgICAgICAgICAgIG9mIHRoZSBhdmFpbGFibGUgY29tbWFuZHMsIHNpbXBseSB0eXBlICdwZXJmJywgd2hpY2ggd2lsbCBzaG93IHlvdQorICAgICAgICAgICAgYmFzaWMgdXNhZ2UgYWxvbmcgd2l0aCB0aGUgYXZhaWxhYmxlIHBlcmYgc3ViY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZgorCisgICAgIHVzYWdlOiBwZXJmIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyAgICAgVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBwZXJmIGNvbW1hbmRzIGFyZToKKyAgICAgICBhbm5vdGF0ZSAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IGFubm90YXRlZCBjb2RlCisgICAgICAgYXJjaGl2ZSAgICAgICAgIENyZWF0ZSBhcmNoaXZlIHdpdGggb2JqZWN0IGZpbGVzIHdpdGggYnVpbGQtaWRzIGZvdW5kIGluIHBlcmYuZGF0YSBmaWxlCisgICAgICAgYmVuY2ggICAgICAgICAgIEdlbmVyYWwgZnJhbWV3b3JrIGZvciBiZW5jaG1hcmsgc3VpdGVzCisgICAgICAgYnVpbGRpZC1jYWNoZSAgIE1hbmFnZSBidWlsZC1pZCBjYWNoZS4KKyAgICAgICBidWlsZGlkLWxpc3QgICAgTGlzdCB0aGUgYnVpbGRpZHMgaW4gYSBwZXJmLmRhdGEgZmlsZQorICAgICAgIGRpZmYgICAgICAgICAgICBSZWFkIHR3byBwZXJmLmRhdGEgZmlsZXMgYW5kIGRpc3BsYXkgdGhlIGRpZmZlcmVudGlhbCBwcm9maWxlCisgICAgICAgZXZsaXN0ICAgICAgICAgIExpc3QgdGhlIGV2ZW50IG5hbWVzIGluIGEgcGVyZi5kYXRhIGZpbGUKKyAgICAgICBpbmplY3QgICAgICAgICAgRmlsdGVyIHRvIGF1Z21lbnQgdGhlIGV2ZW50cyBzdHJlYW0gd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgICAga21lbSAgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBrZXJuZWwgbWVtb3J5KHNsYWIpIHByb3BlcnRpZXMKKyAgICAgICBrdm0gICAgICAgICAgICAgVG9vbCB0byB0cmFjZS9tZWFzdXJlIGt2bSBndWVzdCBvcworICAgICAgIGxpc3QgICAgICAgICAgICBMaXN0IGFsbCBzeW1ib2xpYyBldmVudCB0eXBlcworICAgICAgIGxvY2sgICAgICAgICAgICBBbmFseXplIGxvY2sgZXZlbnRzCisgICAgICAgcHJvYmUgICAgICAgICAgIERlZmluZSBuZXcgZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgIHJlY29yZCAgICAgICAgICBSdW4gYSBjb21tYW5kIGFuZCByZWNvcmQgaXRzIHByb2ZpbGUgaW50byBwZXJmLmRhdGEKKyAgICAgICByZXBvcnQgICAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IHRoZSBwcm9maWxlCisgICAgICAgc2NoZWQgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBzY2hlZHVsZXIgcHJvcGVydGllcyAobGF0ZW5jaWVzKQorICAgICAgIHNjcmlwdCAgICAgICAgICBSZWFkIHBlcmYuZGF0YSAoY3JlYXRlZCBieSBwZXJmIHJlY29yZCkgYW5kIGRpc3BsYXkgdHJhY2Ugb3V0cHV0CisgICAgICAgc3RhdCAgICAgICAgICAgIFJ1biBhIGNvbW1hbmQgYW5kIGdhdGhlciBwZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRpc3RpY3MKKyAgICAgICB0ZXN0ICAgICAgICAgICAgUnVucyBzYW5pdHkgdGVzdHMuCisgICAgICAgdGltZWNoYXJ0ICAgICAgIFRvb2wgdG8gdmlzdWFsaXplIHRvdGFsIHN5c3RlbSBiZWhhdmlvciBkdXJpbmcgYSB3b3JrbG9hZAorICAgICAgIHRvcCAgICAgICAgICAgICBTeXN0ZW0gcHJvZmlsaW5nIHRvb2wuCisKKyAgICAgU2VlICdwZXJmIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBwZXJmIHRvIGRvIEJhc2ljIFByb2ZpbGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgc2ltcGxlIHRlc3QgY2FzZSwgd2UnbGwgcHJvZmlsZSB0aGUgJ3dnZXQnIG9mIGEgZmFpcmx5IGxhcmdlCisgICAgICAgICAgICAgICAgZmlsZSwgd2hpY2ggaXMgYSBtaW5pbWFsbHkgaW50ZXJlc3RpbmcgY2FzZSBiZWNhdXNlIGl0IGhhcyBib3RoCisgICAgICAgICAgICAgICAgZmlsZSBhbmQgbmV0d29yayBJL08gYXNwZWN0cywgYW5kIGF0IGxlYXN0IGluIHRoZSBjYXNlIG9mIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgWW9jdG8gaW1hZ2VzLCBpdCdzIGltcGxlbWVudGVkIGFzIHBhcnQgb2YgYnVzeWJveCwgc28gdGhlIG1ldGhvZHMKKyAgICAgICAgICAgICAgICB3ZSB1c2UgdG8gYW5hbHl6ZSBpdCBjYW4gYmUgdXNlZCBpbiBhIHZlcnkgc2ltaWxhciB3YXkgdG8gdGhlIHdob2xlCisgICAgICAgICAgICAgICAgaG9zdCBvZiBzdXBwb3J0ZWQgYnVzeWJveCBhcHBsZXRzIGluIFlvY3RvLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyBcCisgICAgIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHF1aWNrZXN0IGFuZCBlYXNpZXN0IHdheSB0byBnZXQgc29tZSBiYXNpYyBvdmVyYWxsIGRhdGEgYWJvdXQKKyAgICAgICAgICAgICAgICB3aGF0J3MgZ29pbmcgb24gZm9yIGEgcGFydGljdWxhciB3b3JrbG9hZCBpcyB0byBwcm9maWxlIGl0IHVzaW5nCisgICAgICAgICAgICAgICAgJ3BlcmYgc3RhdCcuICdwZXJmIHN0YXQnIGJhc2ljYWxseSBwcm9maWxlcyB1c2luZyBhIGZldyBkZWZhdWx0CisgICAgICAgICAgICAgICAgY291bnRlcnMgYW5kIGRpc3BsYXlzIHRoZSBzdW1tZWQgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzdGF0IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorCisgICAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICd3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+JzoKKworICAgICAgICAgICA0NTk3LjIyMzkwMiB0YXNrLWNsb2NrICAgICAgICAgICAgICAgICMgICAgMC4wNzcgQ1BVcyB1dGlsaXplZAorICAgICAgICAgICAgICAgICAyMzU2OCBjb250ZXh0LXN3aXRjaGVzICAgICAgICAgICMgICAgMC4wMDUgTS9zZWMKKyAgICAgICAgICAgICAgICAgICAgNjggQ1BVLW1pZ3JhdGlvbnMgICAgICAgICAgICAjICAgIDAuMDE1IEsvc2VjCisgICAgICAgICAgICAgICAgICAgMjQxIHBhZ2UtZmF1bHRzICAgICAgICAgICAgICAgIyAgICAwLjA1MiBLL3NlYworICAgICAgICAgICAgMzA0NTgxNzI5MyBjeWNsZXMgICAgICAgICAgICAgICAgICAgICMgICAgMC42NjMgR0h6CisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kCisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQKKyAgICAgICAgICAgICA4NTg5MDkxNjcgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAjICAgIDAuMjggIGluc25zIHBlciBjeWNsZQorICAgICAgICAgICAgIDE2NTQ0MTE2NSBicmFuY2hlcyAgICAgICAgICAgICAgICAgICMgICAzNS45ODcgTS9zZWMKKyAgICAgICAgICAgICAgMTk1NTAzMjkgYnJhbmNoLW1pc3NlcyAgICAgICAgICAgICAjICAgMTEuODIlIG9mIGFsbCBicmFuY2hlcworCisgICAgICAgICAgNTkuODM2NjI3NjIwIHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE1hbnkgdGltZXMgc3VjaCBhIHNpbXBsZS1taW5kZWQgdGVzdCBkb2Vzbid0IHlpZWxkIG11Y2ggb2YKKyAgICAgICAgICAgICAgICBpbnRlcmVzdCwgYnV0IHNvbWV0aW1lcyBpdCBkb2VzIChzZWUgUmVhbC13b3JsZCBZb2N0byBidWcKKyAgICAgICAgICAgICAgICAoc2xvdyBsb29wLW1vdW50ZWQgd3JpdGUgc3BlZWQpKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxzbywgbm90ZSB0aGF0ICdwZXJmIHN0YXQnIGlzbid0IHJlc3RyaWN0ZWQgdG8gYSBmaXhlZCBzZXQgb2YKKyAgICAgICAgICAgICAgICBjb3VudGVycyAtIGJhc2ljYWxseSBhbnkgZXZlbnQgbGlzdGVkIGluIHRoZSBvdXRwdXQgb2YgJ3BlcmYgbGlzdCcKKyAgICAgICAgICAgICAgICBjYW4gYmUgdGFsbGllZCBieSAncGVyZiBzdGF0Jy4gRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2Ugd2FudGVkIHRvCisgICAgICAgICAgICAgICAgc2VlIGEgc3VtbWFyeSBvZiBhbGwgdGhlIGV2ZW50cyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uL2ZyZWVpbmcgYWxvbmcgd2l0aCBjYWNoZSBoaXRzIGFuZCBtaXNzZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBrbWVtOiogLWUgY2FjaGUtcmVmZXJlbmNlcyAtZSBjYWNoZS1taXNzZXMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisKKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgICA1NTY2IGttZW06a21hbGxvYworICAgICAgICAgICAgICAgIDEyNTUxNyBrbWVtOmttZW1fY2FjaGVfYWxsb2MKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWFsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgMzQ0MDEga21lbTprZnJlZQorICAgICAgICAgICAgICAgICA2OTkyMCBrbWVtOmttZW1fY2FjaGVfZnJlZQorICAgICAgICAgICAgICAgICAgIDEzMyBrbWVtOm1tX3BhZ2VfZnJlZQorICAgICAgICAgICAgICAgICAgICA0MSBrbWVtOm1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgICAgICAgICAgICAgIDExNTAyIGttZW06bW1fcGFnZV9hbGxvYworICAgICAgICAgICAgICAgICAxMTM3NSBrbWVtOm1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX3BjcHVfZHJhaW4KKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX2FsbG9jX2V4dGZyYWcKKyAgICAgICAgICAgICAgNjY4NDg2MDIgY2FjaGUtcmVmZXJlbmNlcworICAgICAgICAgICAgICAgMjkxNzc0MCBjYWNoZS1taXNzZXMgICAgICAgICAgICAgICMgICAgNC4zNjUgJSBvZiBhbGwgY2FjaGUgcmVmcworCisgICAgICAgICAgNDQuODMxMDIzNDE1IHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFNvICdwZXJmIHN0YXQnIGdpdmVzIHVzIGEgbmljZSBlYXN5IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZgorICAgICAgICAgICAgICAgIHdoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGZvciBhIHNldCBvZiBldmVudHMsIGJ1dCBub3JtYWxseSB3ZSdkCisgICAgICAgICAgICAgICAgbmVlZCBhIGxpdHRsZSBtb3JlIGRldGFpbCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbgorICAgICAgICAgICAgICAgIGluIGEgd2F5IHRoYXQgd2UgY2FuIGFjdCBvbiBpbiBhIHVzZWZ1bCB3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGRpdmUgZG93biBpbnRvIGEgbmV4dCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiB1c2UgJ3BlcmYKKyAgICAgICAgICAgICAgICByZWNvcmQnLydwZXJmIHJlcG9ydCcgd2hpY2ggd2lsbCBjb2xsZWN0IHByb2ZpbGluZyBkYXRhIGFuZAorICAgICAgICAgICAgICAgIHByZXNlbnQgaXQgdG8gdXNlIHVzaW5nIGFuIGludGVyYWN0aXZlIHRleHQtYmFzZWQgVUkgKG9yCisgICAgICAgICAgICAgICAgc2ltcGx5IGFzIHRleHQgaWYgd2Ugc3BlY2lmeSAtLXN0ZGlvIHRvICdwZXJmIHJlcG9ydCcpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBvdXIgZmlyc3QgYXR0ZW1wdCBhdCBwcm9maWxpbmcgdGhpcyB3b3JrbG9hZCwgd2UnbGwgc2ltcGx5CisgICAgICAgICAgICAgICAgcnVuICdwZXJmIHJlY29yZCcsIGhhbmRpbmcgaXQgdGhlIHdvcmtsb2FkIHdlIHdhbnQgdG8gcHJvZmlsZQorICAgICAgICAgICAgICAgIChldmVyeXRoaW5nIGFmdGVyICdwZXJmIHJlY29yZCcgYW5kIGFueSBwZXJmIG9wdGlvbnMgd2UgaGFuZAorICAgICAgICAgICAgICAgIGl0IC0gaGVyZSBub25lIC0gd2lsbCBiZSBleGVjdXRlZCBpbiBhIG5ldyBzaGVsbCkuIHBlcmYgY29sbGVjdHMKKyAgICAgICAgICAgICAgICBzYW1wbGVzIHVudGlsIHRoZSBwcm9jZXNzIGV4aXRzIGFuZCByZWNvcmRzIHRoZW0gaW4gYSBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgJ3BlcmYuZGF0YScgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgIFsgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDEgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAwLjE3NiBNQiBwZXJmLmRhdGEgKH43NzAwIHNhbXBsZXMpIF0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHNlZSB0aGUgcmVzdWx0cyBpbiBhICd0ZXh0LWJhc2VkIFVJJyAodHVpKSwgc2ltcGx5IHJ1bgorICAgICAgICAgICAgJ3BlcmYgcmVwb3J0Jywgd2hpY2ggd2lsbCByZWFkIHRoZSBwZXJmLmRhdGEgZmlsZSBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHMgaW4gYW4gaW50ZXJhY3RpdmUgVUk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVwb3J0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGFib3ZlIHNjcmVlbnNob3QgZGlzcGxheXMgYSAnZmxhdCcgcHJvZmlsZSwgb25lIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgIGVhY2ggJ2J1Y2tldCcgY29ycmVzcG9uZGluZyB0byB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBwcm9maWxlZAorICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgcHJvZmlsaW5nIHJ1biwgb3JkZXJlZCBmcm9tIHRoZSBtb3N0IHBvcHVsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgbGVhc3QgKHBlcmYgaGFzIG9wdGlvbnMgdG8gc29ydCBpbiB2YXJpb3VzIG9yZGVycyBhbmQga2V5cyBhcworICAgICAgICAgICAgICAgIHdlbGwgYXMgZGlzcGxheSBlbnRyaWVzIG9ubHkgYWJvdmUgYSBjZXJ0YWluIHRocmVzaG9sZCBhbmQgc28KKyAgICAgICAgICAgICAgICBvbiAtIHNlZSB0aGUgcGVyZiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICBpbmNsdWRlcyBib3RoIHVzZXJzcGFjZSBmdW5jdGlvbnMgKGVudHJpZXMgY29udGFpbmluZyBhIFsuXSkgYW5kCisgICAgICAgICAgICAgICAga2VybmVsIGZ1bmN0aW9ucyBhY2NvdW50ZWQgdG8gdGhlIHByb2Nlc3MgKGVudHJpZXMgY29udGFpbmluZworICAgICAgICAgICAgICAgIGEgW2tdKS4gKHBlcmYgaGFzIGNvbW1hbmQtbGluZSBtb2RpZmllcnMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHJlc3RyaWN0IHRoZSBwcm9maWxpbmcgdG8ga2VybmVsIG9yIHVzZXJzcGFjZSwgYW1vbmcgb3RoZXJzKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIGFsc28gdGhhdCB0aGUgYWJvdmUgcmVwb3J0IHNob3dzIGFuIGVudHJ5IGZvciAnYnVzeWJveCcsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGV4ZWN1dGFibGUgdGhhdCBpbXBsZW1lbnRzICd3Z2V0JyBpbiBZb2N0bywgYnV0IHRoYXQKKyAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGEgdXNlZnVsIGZ1bmN0aW9uIG5hbWUgaW4gdGhhdCBlbnRyeSwgaXQgZGlzcGxheXMKKyAgICAgICAgICAgICAgICBhIG5vdC1zby1mcmllbmRseSBoZXggdmFsdWUgaW5zdGVhZC4gVGhlIHN0ZXBzIGJlbG93IHdpbGwgc2hvdworICAgICAgICAgICAgICAgIGhvdyB0byBmaXggdGhhdCBwcm9ibGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgd2UgZG8gdGhhdCwgaG93ZXZlciwgbGV0J3MgdHJ5IHJ1bm5pbmcgYSBkaWZmZXJlbnQgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICBvbmUgd2hpY2ggc2hvd3Mgc29tZXRoaW5nIGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcuIFRoZSBvbmx5CisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBuZXcgcHJvZmlsZSBhbmQgdGhlIHByZXZpb3VzIG9uZSBpcyB0aGF0CisgICAgICAgICAgICAgICAgd2UnbGwgYWRkIHRoZSAtZyBvcHRpb24sIHdoaWNoIHdpbGwgcmVjb3JkIG5vdCBqdXN0IHRoZSBhZGRyZXNzCisgICAgICAgICAgICAgICAgb2YgYSBzYW1wbGVkIGZ1bmN0aW9uLCBidXQgdGhlIGVudGlyZSBjYWxsY2hhaW4gdG8gdGhlIHNhbXBsZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcyB3ZWxsOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMyB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuNjUyIE1CIHBlcmYuZGF0YSAofjI4NDc2IHNhbXBsZXMpIF0KKworCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZXBvcnQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGNhbGxncmFwaCB2aWV3LCB3ZSBjYW4gYWN0dWFsbHkgc2VlIG5vdCBvbmx5IHdoaWNoCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zIHRvb2sgdGhlIG1vc3QgdGltZSwgYnV0IHdlIGNhbiBhbHNvIHNlZSBhIHN1bW1hcnkgb2YKKyAgICAgICAgICAgICAgICBob3cgdGhvc2UgZnVuY3Rpb25zIHdlcmUgY2FsbGVkIGFuZCBsZWFybiBzb21ldGhpbmcgYWJvdXQgaG93IHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgZWFjaCBlbnRyeSBpbiB0aGUgYWJvdmUgc2NyZWVuc2hvdCBub3cgY29udGFpbnMgYSAnKycKKyAgICAgICAgICAgICAgICBvbiB0aGUgbGVmdC1oYW5kIHNpZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gZXhwYW5kIHRoZSBlbnRyeSBhbmQKKyAgICAgICAgICAgICAgICBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxjaGFpbnMgdGhhdCBmZWVkIGludG8gdGhhdCBlbnRyeS4KKyAgICAgICAgICAgICAgICBQcmVzc2luZyAnZW50ZXInIG9uIGFueSBvbmUgb2YgdGhlbSB3aWxsIGV4cGFuZCB0aGUgY2FsbGNoYWluCisgICAgICAgICAgICAgICAgKHlvdSBjYW4gYWxzbyBwcmVzcyAnRScgdG8gZXhwYW5kIHRoZW0gYWxsIGF0IHRoZSBzYW1lIHRpbWUgb3IgJ0MnCisgICAgICAgICAgICAgICAgdG8gY29sbGFwc2UgdGhlbSBhbGwpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UndmUgdG9nZ2xlZCB0aGUgX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgICAgIGVudHJ5IGFuZCBzZXZlcmFsIHN1Ym5vZGVzIGFsbCB0aGUgd2F5IGRvd24uIFRoaXMgbGV0cyB1cyBzZWUKKyAgICAgICAgICAgICAgICB3aGljaCBjYWxsY2hhaW5zIGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9maWxlZCBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2hpY2ggY29udHJpYnV0ZWQgMS43NyUgdG8gdGhlIHRvdGFsIHByb2ZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgYml0IG9mIGJhY2tncm91bmQgZXhwbGFuYXRpb24gZm9yIHRoZXNlIGNhbGxjaGFpbnMsIHRoaW5rCisgICAgICAgICAgICAgICAgYWJvdXQgd2hhdCBoYXBwZW5zIGF0IGEgaGlnaCBsZXZlbCB3aGVuIHlvdSBydW4gd2dldCB0byBnZXQgYSBmaWxlCisgICAgICAgICAgICAgICAgb3V0IG9uIHRoZSBuZXR3b3JrLiBCYXNpY2FsbHkgd2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIGRhdGEgY29tZXMKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBrZXJuZWwgdmlhIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gKHNvY2tldCkgYW5kIGlzIHBhc3NlZAorICAgICAgICAgICAgICAgIHRvIHRoZSB1c2Vyc3BhY2UgcHJvZ3JhbSAnd2dldCcgKHdoaWNoIGlzIGFjdHVhbGx5IGEgcGFydCBvZgorICAgICAgICAgICAgICAgIGJ1c3lib3gsIGJ1dCB0aGF0J3Mgbm90IGltcG9ydGFudCBmb3Igbm93KSwgd2hpY2ggdGFrZXMgdGhlIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIHBhc3NlcyB0byBpdCBhbmQgd3JpdGVzIGl0IHRvIGEgZGlzayBmaWxlIHRvIHNhdmUgaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwYXJ0IG9mIHRoaXMgcHJvY2VzcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgaW4gdGhlIGFib3ZlIGNhbGwKKyAgICAgICAgICAgICAgICBzdGFja3MgaXMgdGhlIHBhcnQgd2hlcmUgdGhlIGtlcm5lbCBwYXNzZXMgdGhlIGRhdGEgaXQncyByZWFkIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgc29ja2V0IGRvd24gdG8gd2dldCBpLmUuIGEgY29weS10by11c2VyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RpY2UgYWxzbyB0aGF0IGhlcmUgdGhlcmUncyBhbHNvIGEgY2FzZSB3aGVyZSB0aGUgaGV4IHZhbHVlCisgICAgICAgICAgICAgICAgaXMgZGlzcGxheWVkIGluIHRoZSBjYWxsc3RhY2ssIGhlcmUgaW4gdGhlIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBmdW5jdGlvbi4gTGF0ZXIgd2UnbGwgc2VlIGl0IHJlc29sdmUgdG8gYQorICAgICAgICAgICAgICAgIHVzZXJzcGFjZSBmdW5jdGlvbiBjYWxsIGluIGJ1c3lib3guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYWJvdmUgc2NyZWVuc2hvdCBzaG93cyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgam91cm5leSBmb3IgdGhlCisgICAgICAgICAgICAgICAgZGF0YSAtIGZyb20gdGhlIHdnZXQgcHJvZ3JhbSdzIHVzZXJzcGFjZSBidWZmZXJzIHRvIGRpc2suIFRvIGdldAorICAgICAgICAgICAgICAgIHRoZSBidWZmZXJzIHRvIGRpc2ssIHRoZSB3Z2V0IHByb2dyYW0gaXNzdWVzIGEgd3JpdGUoMiksIHdoaWNoCisgICAgICAgICAgICAgICAgZG9lcyBhIGNvcHktZnJvbS11c2VyIHRvIHRoZSBrZXJuZWwsIHdoaWNoIHRoZW4gdGFrZXMgY2FyZSB2aWEKKyAgICAgICAgICAgICAgICBzb21lIGNpcmN1aXRvdXMgcGF0aCAocHJvYmFibHkgYWxzbyBwcmVzZW50IHNvbWV3aGVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9maWxlIGRhdGEpLCB0byBnZXQgaXQgc2FmZWx5IHRvIGRpc2suCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHNlZW4gdGhlIGJhc2ljIGxheW91dCBvZiB0aGUgcHJvZmlsZSBkYXRhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBiYXNpY3Mgb2YgaG93IHRvIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uIG91dCBvZiBpdCwgbGV0J3MgZ2V0CisgICAgICAgICAgICAgICAgYmFjayB0byB0aGUgdGFzayBhdCBoYW5kIGFuZCBzZWUgaWYgd2UgY2FuIGdldCBzb21lIGJhc2ljIGlkZWEKKyAgICAgICAgICAgICAgICBhYm91dCB3aGVyZSB0aGUgdGltZSBpcyBzcGVudCBpbiB0aGUgcHJvZ3JhbSB3ZSdyZSBwcm9maWxpbmcsCisgICAgICAgICAgICAgICAgd2dldC4gUmVtZW1iZXIgdGhhdCB3Z2V0IGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGFzIGFuIGFwcGxldAorICAgICAgICAgICAgICAgIGluIGJ1c3lib3gsIHNvIHdoaWxlIHRoZSBwcm9jZXNzIG5hbWUgaXMgJ3dnZXQnLCB0aGUgZXhlY3V0YWJsZQorICAgICAgICAgICAgICAgIHdlJ3JlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gaXMgYnVzeWJveC4gU28gbGV0J3MgZXhwYW5kIHRoZQorICAgICAgICAgICAgICAgIGZpcnN0IGVudHJ5IGNvbnRhaW5pbmcgYnVzeWJveDoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFnYWluLCBiZWZvcmUgd2UgZXhwYW5kZWQgd2Ugc2F3IHRoYXQgdGhlIGZ1bmN0aW9uIHdhcyBsYWJlbGVkCisgICAgICAgICAgICAgICAgd2l0aCBhIGhleCB2YWx1ZSBpbnN0ZWFkIG9mIGEgc3ltYm9sIGFzIHdpdGggbW9zdCBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgZW50cmllcy4gRXhwYW5kaW5nIHRoZSBidXN5Ym94IGVudHJ5IGRvZXNuJ3QgbWFrZSBpdCBhbnkgYmV0dGVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHBlcmYgY2FuJ3QgZmluZCB0aGUgc3ltYm9sIGluZm9ybWF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICBidXN5Ym94IGJpbmFyeSwgd2hpY2ggaXMgYWN0dWFsbHkgc3RyaXBwZWQgb3V0IGJ5IHRoZSBZb2N0byBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHdheSBhcm91bmQgdGhhdCBpcyB0byBwdXQgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGxvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSG93ZXZlciwgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlIHdpdGggdGhlIGJpbmFyaWVzIHN0cmlwcGVkLAorICAgICAgICAgICAgICAgIHNvIHdoYXQgY2FuIHdlIGRvIHRvIGdldCBwZXJmIHRvIHJlc29sdmUgdGhlIHN5bWJvbHM/IEJhc2ljYWxseQorICAgICAgICAgICAgICAgIHdlIG5lZWQgdG8gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciB0aGUgYnVzeWJveCBwYWNrYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZW5lcmF0ZSB0aGUgZGVidWcgaW5mbyBmb3IgdGhlIHBhY2thZ2VzIGluIHRoZSBpbWFnZSwgd2UgY2FuCisgICAgICAgICAgICAgICAgYWRkIGRiZy1wa2dzIHRvIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGluIGxvY2FsLmNvbmYuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHR5cGUgb2YgZGVidWdpbmZvIHRoYXQKKyAgICAgICAgICAgICAgICBwZXJmIHVuZGVyc3RhbmRzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbG9jYWwuY29uZjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnZGVidWctZmlsZS1kaXJlY3RvcnknCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2Ugd2UndmUgZG9uZSB0aGF0LCB3ZSBjYW4gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciBidXN5Ym94LgorICAgICAgICAgICAgICAgIFRoZSBkZWJ1ZyBwYWNrYWdlcyBvbmNlIGJ1aWx0IGNhbiBiZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgIGJ1aWxkL3RtcC9kZXBsb3kvcnBtLyogb24gdGhlIGhvc3Qgc3lzdGVtLiBGaW5kIHRoZQorICAgICAgICAgICAgICAgIGJ1c3lib3gtZGJnLS4uLnJwbSBmaWxlIGFuZCBjb3B5IGl0IHRvIHRoZSB0YXJnZXQuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBjb3JlMl0kIHNjcCAvaG9tZS90cnoveW9jdG8vY3Jvd25iYXktdHJhY2luZy1kYmcvYnVpbGQvdG1wL2RlcGxveS9ycG0vY29yZTJfMzIvYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSByb290QDE5Mi4xNjguMS4zMToKKyAgICAgcm9vdEAxOTIuMTY4LjEuMzEncyBwYXNzd29yZDoKKyAgICAgYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSAgICAgICAgICAgICAgICAgICAgIDEwMCUgMTgyNktCICAgMS44TUIvcyAgIDAwOjAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdyBpbnN0YWxsIHRoZSBkZWJ1ZyBycG0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcnBtIC1pIGJ1c3lib3gtZGJnLTEuMjAuMi1yMi5jb3JlMl8zMi5ycG0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTm93IHRoYXQgdGhlIGRlYnVnaW5mbyBpcyBpbnN0YWxsZWQsIHdlIHNlZSB0aGF0IHRoZSBidXN5Ym94CisgICAgICAgICAgICAgICAgZW50cmllcyBub3cgZGlzcGxheSB0aGVpciBmdW5jdGlvbnMgc3ltYm9saWNhbGx5OgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHdlIGV4cGFuZCBvbmUgb2YgdGhlIGVudHJpZXMgYW5kIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUsCisgICAgICAgICAgICAgICAgd2UncmUgcHJlc2VudGVkIHdpdGggYSBtZW51IG9mIGFjdGlvbnMgd2UgY2FuIHRha2UgdG8gZ2V0IG1vcmUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoYXQgZW50cnk6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSBvZiB0aGVzZSBhY3Rpb25zIGFsbG93cyB1cyB0byBzaG93IGEgdmlldyB0aGF0IGRpc3BsYXlzIGEKKyAgICAgICAgICAgICAgICBidXN5Ym94LWNlbnRyaWMgdmlldyBvZiB0aGUgcHJvZmlsZWQgZnVuY3Rpb25zIChpbiB0aGlzIGNhc2Ugd2UndmUKKyAgICAgICAgICAgICAgICBhbHNvIGV4cGFuZGVkIGFsbCB0aGUgbm9kZXMgdXNpbmcgdGhlICdFJyBrZXkpOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHNlZSB0aGF0IG5vdyB0aGF0IHRoZSBidXN5Ym94IGRlYnVnaW5mbyBpcworICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgdGhlIHByZXZpb3VzbHkgdW5yZXNvbHZlZCBzeW1ib2wgaW4gdGhlCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBlbnRyeSBtZW50aW9uZWQgcHJldmlvdXNseSBpcyBub3cgcmVzb2x2ZWQsCisgICAgICAgICAgICAgICAgYW5kIHNob3dzIHRoYXQgdGhlIHN5c19jbG9ja19nZXR0aW1lIHN5c3RlbSBjYWxsIHRoYXQgd2FzIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBvZiA2Ljc1JSBvZiB0aGUgY29weS10by11c2VyIG92ZXJoZWFkIHdhcyBpbml0aWF0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgaGFuZGxlX2lucHV0KCkgYnVzeWJveCBmdW5jdGlvbjoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXQgdGhlIGxvd2VzdCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiBkaXZlIGRvd24gdG8gdGhlIGFzc2VtYmx5CisgICAgICAgICAgICAgICAgbGV2ZWwgYW5kIHNlZSB3aGljaCBpbnN0cnVjdGlvbnMgY2F1c2VkIHRoZSBtb3N0IG92ZXJoZWFkIGluIGEKKyAgICAgICAgICAgICAgICBmdW5jdGlvbi4gUHJlc3NpbmcgJ2VudGVyJyBvbiB0aGUgJ3VkaGNwY19tYWluJyBmdW5jdGlvbiwgd2UncmUKKyAgICAgICAgICAgICAgICBhZ2FpbiBwcmVzZW50ZWQgd2l0aCBhIG1lbnU6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNlbGVjdGluZyAnQW5ub3RhdGUgdWRoY3BjX21haW4nLCB3ZSBnZXQgYSBkZXRhaWxlZCBsaXN0aW5nIG9mCisgICAgICAgICAgICAgICAgcGVyY2VudGFnZXMgYnkgaW5zdHJ1Y3Rpb24gZm9yIHRoZSB1ZGhjcGNfbWFpbiBmdW5jdGlvbi4gRnJvbSB0aGUKKyAgICAgICAgICAgICAgICBkaXNwbGF5LCB3ZSBjYW4gc2VlIHRoYXQgb3ZlciA1MCUgb2YgdGhlIHRpbWUgc3BlbnQgaW4gdGhpcworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIHRha2VuIHVwIGJ5IGEgY291cGxlIHRlc3RzIGFuZCB0aGUgbW92ZSBvZiBhCisgICAgICAgICAgICAgICAgY29uc3RhbnQgKDEpIHRvIGEgcmVnaXN0ZXI6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzZWd1ZSBpbnRvIHRyYWNpbmcsIGxldCdzIHRyeSBhbm90aGVyIHByb2ZpbGUgdXNpbmcgYQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjb3VudGVyLCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAnY3ljbGVzJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBpbmZyYXN0cnVjdHVyZSBpbiBMaW51eCBoYXMgYmVjb21lCisgICAgICAgICAgICAgICAgdW5pZmllZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgdG9vbCB3aXRoIGEKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZXQgb2YgY291bnRlcnMsIG5vdCBqdXN0IHRoZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHRoYXQgdHJhZGl0aW9uYWwgdG9vbHMgaGF2ZSBoYWQgdG8gcmVzdHJpY3QKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzIHRvIChvZiBjb3Vyc2UgdGhlIHRyYWRpdGlvbmFsIHRvb2xzIGNhbiBhbHNvIG1ha2UgdXNlCisgICAgICAgICAgICAgICAgb2YgdGhlIGV4cGFuZGVkIHBvc3NpYmlsaXRpZXMgbm93IGF2YWlsYWJsZSB0byB0aGVtLCBhbmQgaW4gc29tZQorICAgICAgICAgICAgICAgIGNhc2VzIGhhdmUsIGFzIG1lbnRpb25lZCBwcmV2aW91c2x5KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2UgY2FuIGdldCBhIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBldmVudHMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHByb2ZpbGUgYSB3b3JrbG9hZCB2aWEgJ3BlcmYgbGlzdCc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgbGlzdAorCisgICAgIExpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKToKKyAgICAgIGNwdS1jeWNsZXMgT1IgY3ljbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kIE9SIGlkbGUtY3ljbGVzLWZyb250ZW5kICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQgT1IgaWRsZS1jeWNsZXMtYmFja2VuZCAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLXJlZmVyZW5jZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLW1pc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1pbnN0cnVjdGlvbnMgT1IgYnJhbmNoZXMgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJ1cy1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHJlZi1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKworICAgICAgY3B1LWNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgdGFzay1jbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgcGFnZS1mYXVsdHMgT1IgZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWlub3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWFqb3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY29udGV4dC1zd2l0Y2hlcyBPUiBjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY3B1LW1pZ3JhdGlvbnMgT1IgbWlncmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgYWxpZ25tZW50LWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgZW11bGF0aW9uLWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorCisgICAgICBMMS1kY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtcHJlZmV0Y2gtbWlzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICAuCisgICAgICByTk5OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICBjcHUvdDE9djFbLHQyPXYyLHQzIC4uLl0vbW9kaWZpZXIgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICAgKHNlZSAncGVyZiBsaXN0IC0taGVscCcgb24gaG93IHRvIGVuY29kZSBpdCkKKworICAgICAgbWVtOiZsdDthZGRyJmd0O1s6YWNjZXNzXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hhcmR3YXJlIGJyZWFrcG9pbnRdCisKKyAgICAgIHN1bnJwYzpycGNfY2FsbF9zdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc3VucnBjOnJwY19iaW5kX3N0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzdW5ycGM6cnBjX2Nvbm5lY3Rfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN1bnJwYzpycGNfdGFza19iZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2tiOmtmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBza2I6Y29uc3VtZV9za2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldF9kZXZfeG1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuZXQ6bmV0X2Rldl9xdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG5ldDpuZXRpZl9yZWNlaXZlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldGlmX3J4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuYXBpOm5hcGlfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNvY2s6c29ja19yY3ZxdWV1ZV9mdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc29jazpzb2NrX2V4Y2VlZF9idWZfbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB1ZHA6dWRwX2ZhaWxfcXVldWVfcmN2X3NrYiAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGhkYTpoZGFfc2VuZF9jbWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaGRhOmhkYV9nZXRfcmVzcG9uc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBoZGE6aGRhX2J1c19yZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjc2k6c2NzaV9kaXNwYXRjaF9jbWRfc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NzaTpzY3NpX2Rpc3BhdGNoX2NtZF9lcnJvciAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY3NpOnNjc2lfZWhfd2FrZXVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGRybTpkcm1fdmJsYW5rX2V2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZHJtOmRybV92YmxhbmtfZXZlbnRfcXVldWVkICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBkcm06ZHJtX3ZibGFua19ldmVudF9kZWxpdmVyZWQgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhbmRvbTptaXhfcG9vbF9ieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmFuZG9tOm1peF9wb29sX2J5dGVzX25vbG9jayAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByYW5kb206Y3JlZGl0X2VudHJvcHlfYml0cyAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGdwaW86Z3Bpb19kaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZ3BpbzpncGlvX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19ycV9hYm9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX3JxX3JlcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfcnFfaXNzdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19iaW9fYm91bmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX2Jpb19jb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfYmlvX2JhY2ttZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3dha2VfdGhyZWFkICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfd2FrZV9mb3JrZXJfdGhyZWFkICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd3JpdGViYWNrOndyaXRlYmFja19iZGlfcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3NpbmdsZV9pbm9kZV9yZXF1ZXVlICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfc2luZ2xlX2lub2RlICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTprbWFsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOmttZW1fY2FjaGVfYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTptbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOm1tX3BhZ2VfcGNwdV9kcmFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvY19leHRmcmFnICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB2bXNjYW46bW1fdm1zY2FuX2tzd2FwZF93YWtlICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHZtc2NhbjptbV92bXNjYW5fd2FrZXVwX2tzd2FwZCAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbiAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICBtb2R1bGU6bW9kdWxlX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG1vZHVsZTptb2R1bGVfcHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbW9kdWxlOm1vZHVsZV9yZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9rdGhyZWFkX3N0b3AgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfd2FrZXVwX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZvcmsgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByY3U6cmN1X3V0aWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdvcmtxdWV1ZTp3b3JrcXVldWVfcXVldWVfd29yayAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZCAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzaWduYWw6c2lnbmFsX2dlbmVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNpZ25hbDpzaWduYWxfZGVsaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6dGltZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjp0aW1lcl9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRpbWVyOmhydGltZXJfY2FuY2VsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6aXRpbWVyX3N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjppdGltZXJfZXhwaXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTppcnFfaGFuZGxlcl9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOmlycV9oYW5kbGVyX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBpcnE6c29mdGlycV9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTpzb2Z0aXJxX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOnNvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBwcmludGs6Y29uc29sZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRhc2s6dGFza19uZXd0YXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGFzazp0YXNrX3JlbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZW50ZXJfc29ja2V0Y2FsbCAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgc3lzY2FsbHM6c3lzX2VudGVyX3Vuc2hhcmUgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZXhpdF91bnNoYXJlICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhd19zeXNjYWxsczpzeXNfZW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmF3X3N5c2NhbGxzOnN5c19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnRzIGRlZmluZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtIGFuZCBleHBvc2VkIGJ5CisgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIGFzIGZpbGVzIGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGJ5IFN5c3RlbVRhcCBhcworICAgICAgICAgICAgICAgIGtlcm5lbC50cmFjZSgidHJhY2Vwb2ludF9uYW1lIikgYW5kIChwYXJ0aWFsbHkpIGFjY2Vzc2VkIGJ5IExUVG5nLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9ubHkgYSBzdWJzZXQgb2YgdGhlc2Ugd291bGQgYmUgb2YgaW50ZXJlc3QgdG8gdXMgd2hlbiBsb29raW5nIGF0CisgICAgICAgICAgICAgICAgdGhpcyB3b3JrbG9hZCwgc28gbGV0J3MgY2hvb3NlIHRoZSBtb3N0IGxpa2VseSBzdWJzeXN0ZW1zCisgICAgICAgICAgICAgICAgKGlkZW50aWZpZWQgYnkgdGhlIHN0cmluZyBiZWZvcmUgdGhlIGNvbG9uIGluIHRoZSBUcmFjZXBvaW50IGV2ZW50cykKKyAgICAgICAgICAgICAgICBhbmQgZG8gYSAncGVyZiBzdGF0JyBydW4gdXNpbmcgb25seSB0aG9zZSB3aWxkY2FyZGVkIHN1YnN5c3RlbXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBza2I6KiAtZSBuZXQ6KiAtZSBuYXBpOiogLWUgc2NoZWQ6KiAtZSB3b3JrcXVldWU6KiAtZSBpcnE6KiAtZSBzeXNjYWxsczoqIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgIDIzMzIzIHNrYjprZnJlZV9za2IKKyAgICAgICAgICAgICAgICAgICAgIDAgc2tiOmNvbnN1bWVfc2tiCisgICAgICAgICAgICAgICAgIDQ5ODk3IHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgICAgICAgICAgICAgNjIxNyBuZXQ6bmV0X2Rldl94bWl0CisgICAgICAgICAgICAgICAgICA2MjE3IG5ldDpuZXRfZGV2X3F1ZXVlCisgICAgICAgICAgICAgICAgICA3OTYyIG5ldDpuZXRpZl9yZWNlaXZlX3NrYgorICAgICAgICAgICAgICAgICAgICAgMiBuZXQ6bmV0aWZfcngKKyAgICAgICAgICAgICAgICAgIDgzNDAgbmFwaTpuYXBpX3BvbGwKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfa3RocmVhZF9zdG9wCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX2t0aHJlYWRfc3RvcF9yZXQKKyAgICAgICAgICAgICAgICAgIDM3NDkgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dha2V1cF9uZXcKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfc3dpdGNoCisgICAgICAgICAgICAgICAgICAgIDI5IHNjaGVkOnNjaGVkX21pZ3JhdGVfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZyZWUKKyAgICAgICAgICAgICAgICAgICAgIDEgc2NoZWQ6c2NoZWRfcHJvY2Vzc19leGl0CisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dhaXRfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX3dhaXQKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfcHJvY2Vzc19mb3JrCisgICAgICAgICAgICAgICAgICAgICAxIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X3dhaXQKKyAgICAgICAgIDIxMDY1MTk0MTU2NDEgc2NoZWQ6c2NoZWRfc3RhdF9zbGVlcAorICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X2lvd2FpdAorICAgICAgICAgICAgIDE0NzQ1MzYxMyBzY2hlZDpzY2hlZF9zdGF0X2Jsb2NrZWQKKyAgICAgICAgICAgMTI5MDMwMjY5NTUgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3BpX3NldHByaW8KKyAgICAgICAgICAgICAgICAgIDM1NzQgd29ya3F1ZXVlOndvcmtxdWV1ZV9xdWV1ZV93b3JrCisgICAgICAgICAgICAgICAgICAzNTc0IHdvcmtxdWV1ZTp3b3JrcXVldWVfYWN0aXZhdGVfd29yaworICAgICAgICAgICAgICAgICAgICAgMCB3b3JrcXVldWU6d29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgIDAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZAorICAgICAgICAgICAgICAgICAxNjYzMSBpcnE6aXJxX2hhbmRsZXJfZW50cnkKKyAgICAgICAgICAgICAgICAgMTY2MzEgaXJxOmlycV9oYW5kbGVyX2V4aXQKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZW50cnkKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZXhpdAorICAgICAgICAgICAgICAgICAyODcyOCBpcnE6c29mdGlycV9yYWlzZQorICAgICAgICAgICAgICAgICAgICAgMSBzeXNjYWxsczpzeXNfZW50ZXJfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDEgc3lzY2FsbHM6c3lzX2V4aXRfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDAgc3lzY2FsbHM6c3lzX2VudGVyX3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgICAwIHN5c2NhbGxzOnN5c19leGl0X3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19lbnRlcl9zb2NrZXRjYWxsCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2VudGVyX3JlYWQKKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2V4aXRfcmVhZAorICAgICAgICAgICAgICAgICAxMjg1NCBzeXNjYWxsczpzeXNfZW50ZXJfd3JpdGUKKyAgICAgICAgICAgICAgICAgMTI4NTQgc3lzY2FsbHM6c3lzX2V4aXRfd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKworICAgICAgICAgIDU4LjAyOTcxMDk3MiBzZWNvbmRzIHRpbWUgZWxhcHNlZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBMZXQncyBwaWNrIG9uZSBvZiB0aGVzZSB0cmFjZXBvaW50cyBhbmQgdGVsbCBwZXJmIHRvIGRvIGEgcHJvZmlsZQorICAgICAgICAgICAgICAgIHVzaW5nIGl0IGFzIHRoZSBzYW1wbGluZyBldmVudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2NoZWQ6c2NoZWRfd2FrZXVwIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc2NyZWVuc2hvdCBhYm92ZSBzaG93cyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgcHJvZmlsZSB1c2luZworICAgICAgICAgICAgICAgIHNjaGVkOnNjaGVkX3N3aXRjaCB0cmFjZXBvaW50LCB3aGljaCBzaG93cyB0aGUgcmVsYXRpdmUgY29zdHMgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIHBhdGhzIHRvIHNjaGVkX3dha2V1cCAobm90ZSB0aGF0IHNjaGVkX3dha2V1cCBpcyB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0cmFjZXBvaW50IC0gaXQncyBhY3R1YWxseSBkZWZpbmVkIGp1c3QgaW5zaWRlCisgICAgICAgICAgICAgICAgdHR3dV9kb193YWtldXAoKSwgd2hpY2ggYWNjb3VudHMgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBwcm9maWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLyoKKyAgICAgICogTWFyayB0aGUgdGFzayBydW5uYWJsZSBhbmQgcGVyZm9ybSB3YWtldXAtcHJlZW1wdGlvbi4KKyAgICAgICovCisgICAgIHN0YXRpYyB2b2lkCisgICAgIHR0d3VfZG9fd2FrZXVwKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2VfZmxhZ3MpCisgICAgIHsKKyAgICAgICAgICB0cmFjZV9zY2hlZF93YWtldXAocCwgdHJ1ZSk7CisgICAgICAgICAgLgorICAgICAgICAgIC4KKyAgICAgICAgICAuCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQSBjb3VwbGUgb2YgdGhlIG1vcmUgaW50ZXJlc3RpbmcgY2FsbGNoYWlucyBhcmUgZXhwYW5kZWQgYW5kCisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGFib3ZlLCBiYXNpY2FsbHkgc29tZSBuZXR3b3JrIHJlY2VpdmUgcGF0aHMgdGhhdAorICAgICAgICAgICAgICAgIHByZXN1bWFibHkgZW5kIHVwIHdha2luZyB1cCB3Z2V0IChidXN5Ym94KSB3aGVuIG5ldHdvcmsgZGF0YSBpcworICAgICAgICAgICAgICAgIHJlYWR5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RlIHRoYXQgYmVjYXVzZSB0cmFjZXBvaW50cyBhcmUgbm9ybWFsbHkgdXNlZCBmb3IgdHJhY2luZywKKyAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBzYW1wbGluZyBwZXJpb2QgZm9yIHRyYWNlcG9pbnRzIGlzIDEgaS5lLiBmb3IKKyAgICAgICAgICAgICAgICB0cmFjZXBvaW50cyBwZXJmIHdpbGwgc2FtcGxlIG9uIGV2ZXJ5IGV2ZW50IG9jY3VycmVuY2UgKHRoaXMKKyAgICAgICAgICAgICAgICBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgLWMgb3B0aW9uKS4gVGhpcyBpcyBpbiBjb250cmFzdCB0bworICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHN1Y2ggYXMgZm9yIGV4YW1wbGUgdGhlIGRlZmF1bHQgJ2N5Y2xlcycKKyAgICAgICAgICAgICAgICBoYXJkd2FyZSBjb3VudGVyIHVzZWQgZm9yIG5vcm1hbCBwcm9maWxpbmcsIHdoZXJlIHNhbXBsaW5nCisgICAgICAgICAgICAgICAgcGVyaW9kcyBhcmUgbXVjaCBoaWdoZXIgKGluIHRoZSB0aG91c2FuZHMpIGJlY2F1c2UgcHJvZmlsaW5nIHNob3VsZAorICAgICAgICAgICAgICAgIGhhdmUgYXMgbG93IGFuIG92ZXJoZWFkIGFzIHBvc3NpYmxlIGFuZCBzYW1wbGluZyBvbiBldmVyeSBjeWNsZQorICAgICAgICAgICAgICAgIHdvdWxkIGJlIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtdHJhY2luZyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgcGVyZiB0byBkbyBCYXNpYyBUcmFjaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvZmlsaW5nIGlzIGEgZ3JlYXQgdG9vbCBmb3Igc29sdmluZyBtYW55IHByb2JsZW1zIG9yIGZvcgorICAgICAgICAgICAgICAgIGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYSB3b3JrbG9hZCBvcgorICAgICAgICAgICAgICAgIGFjcm9zcyB0aGUgc3lzdGVtLiBJdCBpcyBob3dldmVyIGJ5IGRlZmluaXRpb24gYW4gYXBwcm94aW1hdGlvbiwKKyAgICAgICAgICAgICAgICBhcyBzdWdnZXN0ZWQgYnkgdGhlIG1vc3QgcHJvbWluZW50IHdvcmQgYXNzb2NpYXRlZCB3aXRoIGl0LAorICAgICAgICAgICAgICAgICdzYW1wbGluZycuIE9uIHRoZSBvbmUgaGFuZCwgaXQgYWxsb3dzIGEgcmVwcmVzZW50YXRpdmUgcGljdHVyZSBvZgorICAgICAgICAgICAgICAgIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgc3lzdGVtIHRvIGJlIGNoZWFwbHkgdGFrZW4sIGJ1dCBvbiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICBoYW5kLCB0aGF0IGNoZWFwbmVzcyBsaW1pdHMgaXRzIHV0aWxpdHkgd2hlbiB0aGF0IGRhdGEgc3VnZ2VzdHMgYQorICAgICAgICAgICAgICAgIG5lZWQgdG8gJ2RpdmUgZG93bicgbW9yZSBkZWVwbHkgdG8gZGlzY292ZXIgd2hhdCdzIHJlYWxseSBnb2luZworICAgICAgICAgICAgICAgIG9uLiBJbiBzdWNoIGNhc2VzLCB0aGUgb25seSB3YXkgdG8gc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaXMKKyAgICAgICAgICAgICAgICB0byBiZSBhYmxlIHRvIGxvb2sgYXQgKG9yIHN1bW1hcml6ZSBtb3JlIGludGVsbGlnZW50bHkpIHRoZQorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgc3RlcHMgdGhhdCBnbyBpbnRvIHRoZSBoaWdoZXItbGV2ZWwgYmVoYXZpb3IgZXhwb3NlZAorICAgICAgICAgICAgICAgIGJ5IHRoZSBjb2Fyc2UtZ3JhaW5lZCBwcm9maWxpbmcgZGF0YS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBjb25jcmV0ZSBleGFtcGxlLCB3ZSBjYW4gdHJhY2UgYWxsIHRoZSBldmVudHMgd2UgdGhpbmsgbWlnaHQKKyAgICAgICAgICAgICAgICBiZSBhcHBsaWNhYmxlIHRvIG91ciB3b3JrbG9hZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2tiOiogLWUgbmV0OiogLWUgbmFwaToqIC1lIHNjaGVkOnNjaGVkX3N3aXRjaCAtZSBzY2hlZDpzY2hlZF93YWtldXAgLWUgaXJxOioKKyAgICAgIC1lIHN5c2NhbGxzOnN5c19lbnRlcl9yZWFkIC1lIHN5c2NhbGxzOnN5c19leGl0X3JlYWQgLWUgc3lzY2FsbHM6c3lzX2VudGVyX3dyaXRlIC1lIHN5c2NhbGxzOnN5c19leGl0X3dyaXRlCisgICAgICB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBsb29rIGF0IHRoZSByYXcgdHJhY2Ugb3V0cHV0IHVzaW5nICdwZXJmIHNjcmlwdCcgd2l0aCBubworICAgICAgICAgICAgICAgIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQKKworICAgICAgICAgICBwZXJmICAxMjYyIFswMDBdIDExNjI0Ljg1NzA4Mjogc3lzX2V4aXRfcmVhZDogMHgwCisgICAgICAgICAgIHBlcmYgIDEyNjIgWzAwMF0gMTE2MjQuODU3MTkzOiBzY2hlZF93YWtldXA6IGNvbW09bWlncmF0aW9uLzAgcGlkPTYgcHJpbz0wIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODAyMTogc29mdGlycV9yYWlzZTogdmVjPTEgW2FjdGlvbj1USU1FUl0KKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTgwNzQ6IHNvZnRpcnFfZW50cnk6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MDgxOiBzb2Z0aXJxX2V4aXQ6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTY2OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGJmODJjOTQwLCBjb3VudDogMHgwMjAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTc3OiBzeXNfZXhpdF9yZWFkOiAweDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODg3ODoga2ZyZWVfc2tiOiBza2JhZGRyPTB4ZWIyNDhkODAgcHJvdG9jb2w9MCBsb2NhdGlvbj0weGMxNWE1MzA4CisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4OTQ1OiBrZnJlZV9za2I6IHNrYmFkZHI9MHhlYjI0ODAwMCBwcm90b2NvbD0wIGxvY2F0aW9uPTB4YzE1YTUzMDgKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkwMjA6IHNvZnRpcnFfcmFpc2U6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5MDc2OiBzb2Z0aXJxX2VudHJ5OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTA4Mzogc29mdGlycV9leGl0OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE2Nzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiNzcyMDAwMCwgY291bnQ6IDB4MDQwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE5Mjogc3lzX2V4aXRfcmVhZDogMHgxZDcKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMjg6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMzM6IHN5c19leGl0X3JlYWQ6IDB4MAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU3Mzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiZjgyYzU4MCwgY291bnQ6IDB4MDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU4NDogc3lzX2V4aXRfcmVhZDogMHgyMDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4NjQ6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4ODg6IHN5c19leGl0X3JlYWQ6IDB4NDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTM1OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGI3NzIwMDAwLCBjb3VudDogMHgwNDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTQ0OiBzeXNfZXhpdF9yZWFkOiAweDQwMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGdpdmVzIHVzIGEgZGV0YWlsZWQgdGltZXN0YW1wZWQgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQKKyAgICAgICAgICAgICAgICBvY2N1cnJlZCB3aXRoaW4gdGhlIHdvcmtsb2FkIHdpdGggcmVzcGVjdCB0byB0aG9zZSBldmVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG1hbnkgd2F5cywgcHJvZmlsaW5nIGNhbiBiZSB2aWV3ZWQgYXMgYSBzdWJzZXQgb2YgdHJhY2luZyAtCisgICAgICAgICAgICAgICAgdGhlb3JldGljYWxseSwgaWYgeW91IGhhdmUgYSBzZXQgb2YgdHJhY2UgZXZlbnRzIHRoYXQncyBzdWZmaWNpZW50CisgICAgICAgICAgICAgICAgdG8gY2FwdHVyZSBhbGwgdGhlIGltcG9ydGFudCBhc3BlY3RzIG9mIGEgd29ya2xvYWQsIHlvdSBjYW4gZGVyaXZlCisgICAgICAgICAgICAgICAgYW55IG9mIHRoZSByZXN1bHRzIG9yIHZpZXdzIHRoYXQgYSBwcm9maWxpbmcgcnVuIGNhbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBhc3BlY3Qgb2YgdHJhZGl0aW9uYWwgcHJvZmlsaW5nIGlzIHRoYXQgd2hpbGUgcG93ZXJmdWwgaW4KKyAgICAgICAgICAgICAgICBtYW55IHdheXMsIGl0J3MgbGltaXRlZCBieSB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHVuZGVybHlpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICBQcm9maWxpbmcgdG9vbHMgb2ZmZXIgdmFyaW91cyB3YXlzIG9mIHNvcnRpbmcgYW5kIHByZXNlbnRpbmcgdGhlCisgICAgICAgICAgICAgICAgc2FtcGxlIGRhdGEsIHdoaWNoIG1ha2UgaXQgbXVjaCBtb3JlIHVzZWZ1bCBhbmQgYW1lbmFibGUgdG8gdXNlcgorICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhdGlvbiwgYnV0IGluIHRoZSBlbmQgaXQgY2FuJ3QgYmUgdXNlZCBpbiBhbiBvcGVuLWVuZGVkCisgICAgICAgICAgICAgICAgd2F5IHRvIGV4dHJhY3QgZGF0YSB0aGF0IGp1c3QgaXNuJ3QgcHJlc2VudCBhcyBhIGNvbnNlcXVlbmNlIG9mCisgICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCBjb25jZXB0dWFsbHksIG1vc3Qgb2YgaXQgaGFzIGJlZW4gdGhyb3duIGF3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZ1bGwtYmxvd24gZGV0YWlsZWQgdHJhY2luZyBkYXRhIGRvZXMgaG93ZXZlciBvZmZlciB0aGUgb3Bwb3J0dW5pdHkKKyAgICAgICAgICAgICAgICB0byBtYW5pcHVsYXRlIGFuZCBwcmVzZW50IHRoZSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZHVyaW5nIGEKKyAgICAgICAgICAgICAgICB0cmFjaW5nIHJ1biBpbiBhbiBpbmZpbml0ZSB2YXJpZXR5IG9mIHdheXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgd2F5IHRvIGxvb2sgYXQgaXQgaXMgdGhhdCB0aGVyZSBhcmUgb25seSBzbyBtYW55IHdheXMgdGhhdAorICAgICAgICAgICAgICAgIHRoZSAncHJpbWl0aXZlJyBjb3VudGVycyBjYW4gYmUgdXNlZCBvbiB0aGVpciBvd24gdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICBpbnRlcmVzdGluZyBvdXRwdXQ7IHRvIGdldCBhbnl0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gc2ltcGxlCisgICAgICAgICAgICAgICAgY291bnRzIHJlcXVpcmVzIHNvbWUgYW1vdW50IG9mIGFkZGl0aW9uYWwgbG9naWMsIHdoaWNoIGlzIHR5cGljYWxseQorICAgICAgICAgICAgICAgIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHByb2JsZW0gYXQgaGFuZC4gRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0bworICAgICAgICAgICAgICAgIG1ha2UgdXNlIG9mIGEgJ2NvdW50ZXInIHRoYXQgbWFwcyB0byB0aGUgdmFsdWUgb2YgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIGJldHdlZW4gd2hlbiBhIHByb2Nlc3Mgd2FzIHNjaGVkdWxlZCB0byBydW4gb24gYQorICAgICAgICAgICAgICAgIHByb2Nlc3NvciBhbmQgdGhlIHRpbWUgaXQgYWN0dWFsbHkgcmFuLCB3ZSB3b3VsZG4ndCBleHBlY3Qgc3VjaAorICAgICAgICAgICAgICAgIGEgY291bnRlciB0byBleGlzdCBvbiBpdHMgb3duLCBidXQgd2UgY291bGQgZGVyaXZlIG9uZSBjYWxsZWQgc2F5CisgICAgICAgICAgICAgICAgJ3dha2V1cF9sYXRlbmN5JyBhbmQgdXNlIGl0IHRvIGV4dHJhY3QgYSB1c2VmdWwgdmlldyBvZiB0aGF0IG1ldHJpYworICAgICAgICAgICAgICAgIGZyb20gdHJhY2UgZGF0YS4gTGlrZXdpc2UsIHdlIHJlYWxseSBjYW4ndCBmaWd1cmUgb3V0IGZyb20gc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBwcm9maWxpbmcgdG9vbHMgaG93IG11Y2ggZGF0YSBldmVyeSBwcm9jZXNzIG9uIHRoZSBzeXN0ZW0gcmVhZHMgYW5kCisgICAgICAgICAgICAgICAgd3JpdGVzLCBhbG9uZyB3aXRoIGhvdyBtYW55IG9mIHRob3NlIHJlYWRzIGFuZCB3cml0ZXMgZmFpbAorICAgICAgICAgICAgICAgIGNvbXBsZXRlbHkuIElmIHdlIGhhdmUgc3VmZmljaWVudCB0cmFjZSBkYXRhLCBob3dldmVyLCB3ZSBjb3VsZAorICAgICAgICAgICAgICAgIHdpdGggdGhlIHJpZ2h0IHRvb2xzIGVhc2lseSBleHRyYWN0IGFuZCBwcmVzZW50IHRoYXQgaW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgYnV0IHdlJ2QgbmVlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBwcmUtY2FubmVkIHByb2ZpbGluZyB0b29scyB0bworICAgICAgICAgICAgICAgIGRvIHRoYXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEx1Y2tpbHksIHRoZXJlIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHdheSB0byBoYW5kbGUgc3VjaCBuZWVkcywKKyAgICAgICAgICAgICAgICBjYWxsZWQgJ3Byb2dyYW1taW5nIGxhbmd1YWdlcycuIE1ha2luZyBwcm9ncmFtbWluZyBsYW5ndWFnZXMKKyAgICAgICAgICAgICAgICBlYXNpbHkgYXZhaWxhYmxlIHRvIGFwcGx5IHRvIHN1Y2ggcHJvYmxlbXMgZ2l2ZW4gdGhlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgZm9ybWF0IG9mIGRhdGEgaXMgY2FsbGVkIGEgJ3Byb2dyYW1taW5nIGxhbmd1YWdlIGJpbmRpbmcnIGZvcgorICAgICAgICAgICAgICAgIHRoYXQgZGF0YSBhbmQgbGFuZ3VhZ2UuIFBlcmYgc3VwcG9ydHMgdHdvIHByb2dyYW1taW5nIGxhbmd1YWdlCisgICAgICAgICAgICAgICAgYmluZGluZ3MsIG9uZSBmb3IgUHl0aG9uIGFuZCBvbmUgZm9yIFBlcmwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IExhbmd1YWdlIGJpbmRpbmdzIGZvciBtYW5pcHVsYXRpbmcgYW5kCisgICAgICAgICAgICAgICAgYWdncmVnYXRpbmcgdHJhY2UgZGF0YSBhcmUgb2YgY291cnNlIG5vdCBhIG5ldworICAgICAgICAgICAgICAgIGlkZWEuICBPbmUgb2YgdGhlIGZpcnN0IHByb2plY3RzIHRvIGRvIHRoaXMgd2FzIElCTSdzIERQcm9iZXMKKyAgICAgICAgICAgICAgICBkcGNjIGNvbXBpbGVyLCBhbiBBTlNJIEMgY29tcGlsZXIgd2hpY2ggdGFyZ2V0ZWQgYSBsb3ctbGV2ZWwKKyAgICAgICAgICAgICAgICBhc3NlbWJseSBsYW5ndWFnZSBydW5uaW5nIG9uIGFuIGluLWtlcm5lbCBpbnRlcnByZXRlciBvbiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLiAgVGhpcyBpcyBleGFjdGx5IGFuYWxvZ291cyB0byB3aGF0IFN1bidzIERUcmFjZQorICAgICAgICAgICAgICAgIGRpZCwgZXhjZXB0IHRoYXQgRFRyYWNlIGludmVudGVkIGl0cyBvd24gbGFuZ3VhZ2UgZm9yIHRoZSBwdXJwb3NlLgorICAgICAgICAgICAgICAgIFN5c3RlbXRhcCwgaGVhdmlseSBpbnNwaXJlZCBieSBEVHJhY2UsIGFsc28gY3JlYXRlZCBpdHMgb3duCisgICAgICAgICAgICAgICAgb25lLW9mZiBsYW5ndWFnZSwgYnV0IHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlIHByb2R1Y3Qgb24gYW4KKyAgICAgICAgICAgICAgICBpbi1rZXJuZWwgaW50ZXJwcmV0ZXIsIGNyZWF0ZWQgYW4gZWxhYm9yYXRlIGNvbXBpbGVyLWJhc2VkCisgICAgICAgICAgICAgICAgbWFjaGluZXJ5IHRvIHRyYW5zbGF0ZSBpdHMgbGFuZ3VhZ2UgaW50byBrZXJuZWwgbW9kdWxlcyB3cml0dGVuCisgICAgICAgICAgICAgICAgaW4gQy4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIHRoZSB0cmFjZSBkYXRhIGluIHBlcmYuZGF0YSwgd2UgY2FuIHVzZQorICAgICAgICAgICAgICAgICdwZXJmIHNjcmlwdCAtZycgdG8gZ2VuZXJhdGUgYSBza2VsZXRvbiBzY3JpcHQgd2l0aCBoYW5kbGVycworICAgICAgICAgICAgICAgIGZvciB0aGUgcmVhZC93cml0ZSBlbnRyeS9leGl0IGV2ZW50cyB3ZSByZWNvcmRlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQgLWcgcHl0aG9uCisgICAgIGdlbmVyYXRlZCBQeXRob24gc2NyaXB0OiBwZXJmLXNjcmlwdC5weQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgc2tlbGV0b24gc2NyaXB0IHNpbXBseSBjcmVhdGVzIGEgcHl0aG9uIGZ1bmN0aW9uIGZvciBlYWNoCisgICAgICAgICAgICAgICAgZXZlbnQgdHlwZSBpbiB0aGUgcGVyZi5kYXRhIGZpbGUuIFRoZSBib2R5IG9mIGVhY2ggZnVuY3Rpb24gc2ltcGx5CisgICAgICAgICAgICAgICAgcHJpbnRzIHRoZSBldmVudCBuYW1lIGFsb25nIHdpdGggaXRzIHBhcmFtZXRlcnMuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZGVmIG5ldF9fbmV0aWZfcngoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKyAgICAgICAgICAgIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorICAgICAgICAgICAgc2tiYWRkciwgbGVuLCBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKwkJICAgICBwcmludCAic2tiYWRkcj0ldSwgbGVuPSV1LCBuYW1lPSVzXG4iICUgKHNrYmFkZHIsIGxlbiwgbmFtZSksCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBydW4gdGhhdCBzY3JpcHQgZGlyZWN0bHkgdG8gcHJpbnQgYWxsIG9mIHRoZSBldmVudHMKKyAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gdGhlIHBlcmYuZGF0YSBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHNjcmlwdCAtcyBwZXJmLXNjcmlwdC5weQorCisgICAgIGluIHRyYWNlX2JlZ2luCisgICAgIHN5c2NhbGxzX19zeXNfZXhpdF9yZWFkICAgICAwIDExNjI0Ljg1NzA4Mjc5NSAgICAgMTI2MiBwZXJmICAgICAgICAgICAgICAgICAgbnI9MywgcmV0PTAKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgIDAgMTE2MjQuODU3MTkzNDk4ICAgICAxMjYyIHBlcmYgICAgICAgICAgICAgICAgICBjb21tPW1pZ3JhdGlvbi8wLCBwaWQ9NiwgcHJpbz0wLCAgICAgIHN1Y2Nlc3M9MSwgdGFyZ2V0X2NwdT0wCisgICAgIGlycV9fc29mdGlycV9yYWlzZSAgICAgICAxIDExNjI0Ljg1ODAyMTYzNSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9lbnRyeSAgICAgICAxIDExNjI0Ljg1ODA3NDA3NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9leGl0ICAgICAgICAxIDExNjI0Ljg1ODA4MTM4OSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTgxNjY0MzQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE5NDU2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTgxNzc5MjQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc2tiX19rZnJlZV9za2IgICAgICAgICAgIDEgMTE2MjQuODU4ODc4MTg4ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBza2JhZGRyPTM5NDUwNDEyODAsICAgICAgICAgICBsb2NhdGlvbj0zMjQzOTIyMTg0LCBwcm90b2NvbD0wCisgICAgIHNrYl9fa2ZyZWVfc2tiICAgICAgICAgICAxIDExNjI0Ljg1ODk0NTYwOCAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgc2tiYWRkcj0zOTQ1MDM3ODI0LCAgICAgIGxvY2F0aW9uPTMyNDM5MjIxODQsIHByb3RvY29sPTAKKyAgICAgaXJxX19zb2Z0aXJxX3JhaXNlICAgICAgIDEgMTE2MjQuODU5MDIwOTQyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgIDEgMTE2MjQuODU5MDc2OTM1ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2V4aXQgICAgICAgIDEgMTE2MjQuODU5MDgzNDY5ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTE2NzU2NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkxOTI1MzMgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD00NzEKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTIyODA3MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkyMzM3MDcgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0wCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk1NzMwMDggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE4NDk2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk1ODQ4MTggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTg2NDU2MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk4ODg3NzAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0xMDI0CisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk5MzUxNDAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMDc3NzAxNjMyLCAgICAgIGNvdW50PTEwMjQKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgIDEgMTE2MjQuODU5OTQ0MDMyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBucj0zLCByZXQ9MTAyNAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGF0IGluIGl0c2VsZiBpc24ndCB2ZXJ5IHVzZWZ1bDsgYWZ0ZXIgYWxsLCB3ZSBjYW4gYWNjb21wbGlzaAorICAgICAgICAgICAgICAgIHByZXR0eSBtdWNoIHRoZSBzYW1lIHRoaW5nIGJ5IHNpbXBseSBydW5uaW5nICdwZXJmIHNjcmlwdCcKKyAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHBlcmYuZGF0YSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXZSBjYW4gaG93ZXZlciByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluIHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBib2RpZXMgd2l0aCB3aGF0ZXZlciB3ZSB3YW50LCBhbmQgdGhlcmVieSBtYWtlIGl0CisgICAgICAgICAgICAgICAgaW5maW5pdGVseSBtb3JlIHVzZWZ1bC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzaW1wbGUgZXhhbXBsZSwgbGV0J3MganVzdCByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluCisgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIGJvZGllcyB3aXRoIGEgc2ltcGxlIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nIGJ1dAorICAgICAgICAgICAgICAgIGluY3JlbWVudCBhIHBlci1ldmVudCBjb3VudC4gV2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4gYWdhaW5zdCBhCisgICAgICAgICAgICAgICAgcGVyZi5kYXRhIGZpbGUsIGVhY2ggdGltZSBhIHBhcnRpY3VsYXIgZXZlbnQgaXMgZW5jb3VudGVyZWQsCisgICAgICAgICAgICAgICAgYSB0YWxseSBpcyBpbmNyZW1lbnRlZCBmb3IgdGhhdCBldmVudC4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWYgbmV0X19uZXRpZl9yeChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorICAgICAgICAgICAgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisgICAgICAgICAgICBza2JhZGRyLCBsZW4sIG5hbWUpOgorCQkgICAgICAgICAgaW5jX2NvdW50cyhldmVudF9uYW1lKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFYWNoIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gaW4gdGhlIGdlbmVyYXRlZCBjb2RlIGlzIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgdG8gZG8gdGhpcy4gRm9yIGNvbnZlbmllbmNlLCB3ZSBkZWZpbmUgYSBjb21tb24gZnVuY3Rpb24gY2FsbGVkCisgICAgICAgICAgICAgICAgaW5jX2NvdW50cygpIHRoYXQgZWFjaCBoYW5kbGVyIGNhbGxzOyBpbmNfY291bnRzKCkgc2ltcGx5IHRhbGxpZXMKKyAgICAgICAgICAgICAgICBhIGNvdW50IGZvciBlYWNoIGV2ZW50IHVzaW5nIHRoZSAnY291bnRzJyBoYXNoLCB3aGljaCBpcyBhCisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWQgaGFzaCBmdW5jdGlvbiB0aGF0IGRvZXMgUGVybC1saWtlIGF1dG92aXZpZmljYXRpb24sIGEKKyAgICAgICAgICAgICAgICBjYXBhYmlsaXR5IHRoYXQncyBleHRyZW1lbHkgdXNlZnVsIGZvciBraW5kcyBvZiBtdWx0aS1sZXZlbAorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uIGNvbW1vbmx5IHVzZWQgaW4gcHJvY2Vzc2luZyB0cmFjZXMgKHNlZSBwZXJmJ3MKKyAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIG9uIHRoZSBQeXRob24gbGFuZ3VhZ2UgYmluZGluZyBmb3IgZGV0YWlscyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjb3VudHMgPSBhdXRvZGljdCgpCisKKyAgICAgZGVmIGluY19jb3VudHMoZXZlbnRfbmFtZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvdW50c1tldmVudF9uYW1lXSArPSAxCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb3VudHNbZXZlbnRfbmFtZV0gPSAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZpbmFsbHksIGF0IHRoZSBlbmQgb2YgdGhlIHRyYWNlIHByb2Nlc3NpbmcgcnVuLCB3ZSB3YW50IHRvCisgICAgICAgICAgICAgICAgcHJpbnQgdGhlIHJlc3VsdCBvZiBhbGwgdGhlIHBlci1ldmVudCB0YWxsaWVzLiBGb3IgdGhhdCwgd2UKKyAgICAgICAgICAgICAgICB1c2UgdGhlIHNwZWNpYWwgJ3RyYWNlX2VuZCgpJyBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZiB0cmFjZV9lbmQoKToKKyAgICAgICAgICAgIGZvciBldmVudF9uYW1lLCBjb3VudCBpbiBjb3VudHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIlLTQwcyAlMTBzXG4iICUgKGV2ZW50X25hbWUsIGNvdW50KQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgZW5kIHJlc3VsdCBpcyBhIHN1bW1hcnkgb2YgYWxsIHRoZSBldmVudHMgcmVjb3JkZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBza2JfX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjICAgICAgICAgICAgICAgICAgMTMxNDgKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Nzk2CisgICAgIGlycV9faXJxX2hhbmRsZXJfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNQorICAgICBpcnFfX3NvZnRpcnFfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTUKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl93cml0ZSAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgIG5ldF9fbmV0X2Rldl94bWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1MgorICAgICBza2JfX2tmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNDcKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTU1CisgICAgIGlycV9faXJxX2hhbmRsZXJfZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNAorICAgICBpcnFfX3NvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTkKKyAgICAgbmV0X19uZXRfZGV2X3F1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUyCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgICAgICAgICAgICAgICAgICAxNzU5OQorICAgICBuZXRfX25ldGlmX3JlY2VpdmVfc2tiICAgICAgICAgICAgICAgICAgICAgICAgIDE3NDMKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgICAgICAgICAgICAgICAgICAgIDE3NTk4CisgICAgIG5ldF9fbmV0aWZfcnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorICAgICBuYXBpX19uYXBpX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NzcKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3dyaXRlICAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHByZXR0eSBtdWNoIGV4YWN0bHkgdGhlIHNhbWUgaW5mb3JtYXRpb24gd2UgZ2V0CisgICAgICAgICAgICAgICAgZnJvbSAncGVyZiBzdGF0Jywgd2hpY2ggZ29lcyBhIGxpdHRsZSB3YXkgdG8gc3VwcG9ydCB0aGUgaWRlYQorICAgICAgICAgICAgICAgIG1lbnRpb25lZCBwcmV2aW91c2x5IHRoYXQgZ2l2ZW4gdGhlIHJpZ2h0IGtpbmQgb2YgdHJhY2UgZGF0YSwKKyAgICAgICAgICAgICAgICBoaWdoZXItbGV2ZWwgcHJvZmlsaW5nLXR5cGUgc3VtbWFyaWVzIGNhbiBiZSBkZXJpdmVkIGZyb20gaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zY3JpcHQtcHl0aG9uJz4ncGVyZiBzY3JpcHQnIHB5dGhvbiBiaW5kaW5nPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc3lzdGVtLXdpZGUtdHJhY2luZy1hbmQtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5TeXN0ZW0tV2lkZSBUcmFjaW5nIGFuZCBQcm9maWxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgc28gZmFyIGhhdmUgZm9jdXNlZCBvbiB0cmFjaW5nIGEgcGFydGljdWxhciBwcm9ncmFtIG9yCisgICAgICAgICAgICAgICAgd29ya2xvYWQgLSBpbiBvdGhlciB3b3JkcywgZXZlcnkgcHJvZmlsaW5nIHJ1biBoYXMgc3BlY2lmaWVkIHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gdG8gcHJvZmlsZSBpbiB0aGUgY29tbWFuZC1saW5lIGUuZy4gJ3BlcmYgcmVjb3JkIHdnZXQgLi4uJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQncyBhbHNvIHBvc3NpYmxlLCBhbmQgbW9yZSBpbnRlcmVzdGluZyBpbiBtYW55IGNhc2VzLCB0byBydW4gYQorICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHByb2ZpbGUgb3IgdHJhY2Ugd2hpbGUgcnVubmluZyB0aGUgd29ya2xvYWQgaW4gYQorICAgICAgICAgICAgICAgIHNlcGFyYXRlIHNoZWxsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkbyBzeXN0ZW0td2lkZSBwcm9maWxpbmcgb3IgdHJhY2luZywgeW91IHR5cGljYWxseSB1c2UKKyAgICAgICAgICAgICAgICB0aGUgLWEgZmxhZyB0byAncGVyZiByZWNvcmQnLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkZW1vbnN0cmF0ZSB0aGlzLCBvcGVuIHVwIG9uZSB3aW5kb3cgYW5kIHN0YXJ0IHRoZSBwcm9maWxlCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIC1hIGZsYWcgKHByZXNzIEN0cmwtQyB0byBzdG9wIHRyYWNpbmcpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyAtYQorICAgICBeQ1sgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDYgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAxLjQwMCBNQiBwZXJmLmRhdGEgKH42MTE3MiBzYW1wbGVzKSBdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIGFub3RoZXIgd2luZG93LCBydW4gdGhlIHdnZXQgdGVzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIZXJlIHdlIHNlZSBlbnRyaWVzIG5vdCBvbmx5IGZvciBvdXIgd2dldCBsb2FkLCBidXQgZm9yIG90aGVyCisgICAgICAgICAgICAgICAgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbSBhcyB3ZWxsOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBzbmFwc2hvdCBhYm92ZSwgd2UgY2FuIHNlZSBjYWxsY2hhaW5zIHRoYXQgb3JpZ2luYXRlIGluCisgICAgICAgICAgICAgICAgbGliYywgYW5kIGEgY2FsbGNoYWluIGZyb20gWG9yZyB0aGF0IGRlbW9uc3RyYXRlcyB0aGF0IHdlJ3JlCisgICAgICAgICAgICAgICAgdXNpbmcgYSBwcm9wcmlldGFyeSBYIGRyaXZlciBpbiB1c2Vyc3BhY2UgKG5vdGljZSB0aGUgcHJlc2VuY2UKKyAgICAgICAgICAgICAgICBvZiAnUFZSJyBhbmQgc29tZSBvdGhlciB1bnJlc29sdmFibGUgc3ltYm9scyBpbiB0aGUgZXhwYW5kZWQKKyAgICAgICAgICAgICAgICBYb3JnIGNhbGxjaGFpbikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSBlbnRyaWVzIGluIHRoZQorICAgICAgICAgICAgICAgIGFib3ZlIHNuYXBzaG90LiBXZSBjYW4gYWxzbyB0ZWxsIHBlcmYgdG8gZm9jdXMgb24gdXNlcnNwYWNlIGJ1dAorICAgICAgICAgICAgICAgIHByb3ZpZGluZyBhIG1vZGlmaWVyLCBpbiB0aGlzIGNhc2UgJ3UnLCB0byB0aGUgJ2N5Y2xlcycgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBjb3VudGVyIHdoZW4gd2UgcmVjb3JkIGEgcHJvZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWEgLWUgY3ljbGVzOnUKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAyIHRpbWVzIHRvIHdyaXRlIGRhdGEgXQorICAgICBbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgMC4zNzYgTUIgcGVyZi5kYXRhICh+MTY0NDMgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGljZSBpbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2Ugc2VlIG9ubHkgdXNlcnNwYWNlIGVudHJpZXMgKFsuXSkKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUgYW5kIHNlbGVjdCB0aGUgJ1pvb20KKyAgICAgICAgICAgICAgICBpbnRvIERTTycgbWVudSBpdGVtIHRvIHNob3cgb25seSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgRFNPLiBJbiB0aGUgc2NyZWVuc2hvdCBiZWxvdywgd2UndmUgem9vbWVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgJ2xpYmMnIERTTyB3aGljaCBzaG93cyBhbGwgdGhlIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGxpYmMteHh4LnNvIERTTy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdlIGNhbiBhbHNvIHVzZSB0aGUgc3lzdGVtLXdpZGUgLWEgc3dpdGNoIHRvIGRvIHN5c3RlbS13aWRlCisgICAgICAgICAgICAgICAgdHJhY2luZy4gSGVyZSB3ZSdsbCB0cmFjZSBhIGNvdXBsZSBvZiBzY2hlZHVsZXIgZXZlbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtYSAtZSBzY2hlZDpzY2hlZF9zd2l0Y2ggLWUgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgIF5DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMzggdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA5Ljc4MCBNQiBwZXJmLmRhdGEgKH40MjcyOTkgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbG9vayBhdCB0aGUgcmF3IG91dHB1dCB1c2luZyAncGVyZiBzY3JpcHQnIHdpdGggbm8KKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA0NTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA2Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGVyZiBwcmV2X3BpZD0xMzgzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMToxIG5leHRfcGlkPTIxIG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMToxICAgIDIxIFswMDFdICA2MTcxLjQ2MDA5Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8xOjEgcHJldl9waWQ9MjEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1wZXJmIG5leHRfcGlkPTEzODMgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDYxNzEuNDY4MDYzOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNjE3MS40NjgxMDc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNjE3MS40NjgxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwMzk6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzE6MSBwaWQ9MjEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAxCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwNTg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBlcmYgcHJldl9waWQ9MTM4MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNjE3MS40NzAwODI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGVyZiBuZXh0X3BpZD0xMzgzIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ4MDAzNTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwZXJmLWZpbHRlcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkZpbHRlcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgdGhlcmUgYXJlIGEgbG90IG9mIGV2ZW50cyB0aGF0IGRvbid0IHJlYWxseSBoYXZlCisgICAgICAgICAgICAgICAgICAgIGFueXRoaW5nIHRvIGRvIHdpdGggd2hhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLCBuYW1lbHkgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2NoZWR1bGUgJ3BlcmYnIGl0c2VsZiBpbiBhbmQgb3V0IG9yIHRoYXQgd2FrZSBwZXJmIHVwLgorICAgICAgICAgICAgICAgICAgICBXZSBjYW4gZ2V0IHJpZCBvZiB0aG9zZSBieSB1c2luZyB0aGUgJy0tZmlsdGVyJyBvcHRpb24gLQorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBldmVudCB3ZSBzcGVjaWZ5IHVzaW5nIC1lLCB3ZSBjYW4gYWRkIGEgLS1maWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhhdCB0byBmaWx0ZXIgb3V0IHRyYWNlIGV2ZW50cyB0aGF0IGNvbnRhaW4gZmllbGRzCisgICAgICAgICAgICAgICAgICAgIHdpdGggc3BlY2lmaWMgdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWEgLWUgc2NoZWQ6c2NoZWRfc3dpdGNoIC0tZmlsdGVyICduZXh0X2NvbW0gIT0gcGVyZiAmYW1wOyZhbXA7IHByZXZfY29tbSAhPSBwZXJmJyAtZSBzY2hlZDpzY2hlZF93YWtldXAgLS1maWx0ZXIgJ2NvbW0gIT0gcGVyZicKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAzOCB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDkuNjg4IE1CIHBlcmYuZGF0YSAofjQyMzI3OSBzYW1wbGVzKSBdCisKKworICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDBdICA3OTMyLjE2MjE4MDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MyBuZXh0X3BpZD0xMjA5IG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMDozICAxMjA5IFswMDBdICA3OTMyLjE2MjIzNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjMgcHJldl9waWQ9MTIwOSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE3MDA0ODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE4MDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE5MDAzODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIwMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIxMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIyMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDExMTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDE0Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8xIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNzkzMi4yMzAyMDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8xIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDc5MzIuMzI2MTA5OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNzkzMi4zMjYxNzE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNzkzMi4zMjYyMTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB3ZSd2ZSBmaWx0ZXJlZCBvdXQgYWxsIGV2ZW50cyB0aGF0IGhhdmUgJ3BlcmYnCisgICAgICAgICAgICAgICAgICAgIGluIHRoZWlyICdjb21tJyBvciAnY29tbV9wcmV2JyBvciAnY29tbV9uZXh0JyBmaWVsZHMuIE5vdGljZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXJlIGFyZSBzdGlsbCBldmVudHMgcmVjb3JkZWQgZm9yIHBlcmYsIGJ1dCBub3RpY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aG9zZSBldmVudHMgZG9uJ3QgaGF2ZSB2YWx1ZXMgb2YgJ3BlcmYnIGZvciB0aGUgZmlsdGVyZWQKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLiBUbyBjb21wbGV0ZWx5IGZpbHRlciBvdXQgYW55dGhpbmcgZnJvbSBwZXJmIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhIGJpdCBtb3JlIHdvcmssIGJ1dCBmb3IgdGhlIHB1cnBvc2Ugb2YgZGVtb25zdHJhdGluZworICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGZpbHRlcnMsIGl0J3MgY2xvc2UgZW5vdWdoLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVycyBkZWZpbmVkIGJ5IHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0uIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIHNlY3Rpb24gZm9yIG1vcmUgZGlzY3Vzc2lvbiBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGVzZSBldmVudCBmaWx0ZXJzLgorICAgICAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZXNlIGV2ZW50IGZpbHRlcnMgYXJlIGltcGxlbWVudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC1wdXJwb3NlIHBzZXVkby1pbnRlcnByZXRlciBpbiB0aGUga2VybmVsIGFuZCBhcmUgYW4KKyAgICAgICAgICAgICAgICAgICAgaW50ZWdyYWwgYW5kIGluZGlzcGVuc2FibGUgcGFydCBvZiB0aGUgcGVyZiBkZXNpZ24gYXMgaXQKKyAgICAgICAgICAgICAgICAgICAgcmVsYXRlcyB0byB0cmFjaW5nLiAga2VybmVsLWJhc2VkIGV2ZW50IGZpbHRlcnMgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSB0byBwcmVjaXNlbHkgdGhyb3R0bGUgdGhlIGV2ZW50IHN0cmVhbSB0aGF0IGFwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdXNlciBzcGFjZSwgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gcHJvdmlkZSBiaW5kaW5ncyB0byByZWFsCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlcyBmb3IgcG9zdHByb2Nlc3NpbmcgdGhlIGV2ZW50IHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciB0aGUgaW50ZWxsaWdlbnQgYW5kIGZsZXhpYmxlCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbmluZyBvZiBwcm9jZXNzaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJhc3QgdGhpcyB3aXRoIG90aGVyIHRvb2xzIHN1Y2ggYXMgU3lzdGVtVGFwLCB3aGljaCBkb2VzCisgICAgICAgICAgICAgICAgICAgIGFsbCBvZiBpdHMgcHJvY2Vzc2luZyBpbiB0aGUga2VybmVsIGFuZCBhcyBzdWNoIHJlcXVpcmVzIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCBwcm9qZWN0LWRlZmluZWQgbGFuZ3VhZ2UgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZXNpZ24sIG9yIExUVG5nLCB3aGVyZSBldmVyeXRoaW5nIGlzIHNlbnQgdG8gdXNlcnNwYWNlIGFuZAorICAgICAgICAgICAgICAgICAgICBhcyBzdWNoIHJlcXVpcmVzIGEgc3VwZXItZWZmaWNpZW50IGtlcm5lbC10by11c2Vyc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IG1lY2hhbmlzbSBpbiBvcmRlciB0byBmdW5jdGlvbiBwcm9wZXJseS4gIFdoaWxlCisgICAgICAgICAgICAgICAgICAgIHBlcmYgY2VydGFpbmx5IGNhbiBiZW5lZml0IGZyb20gZm9yIGluc3RhbmNlIGFkdmFuY2VzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZXNpZ24gb2YgdGhlIHRyYW5zcG9ydCwgaXQgZG9lc24ndCBmdW5kYW1lbnRhbGx5IGRlcGVuZAorICAgICAgICAgICAgICAgICAgICBvbiB0aGVtLiAgQmFzaWNhbGx5LCBpZiB5b3UgZmluZCB0aGF0IHlvdXIgcGVyZiB0cmFjaW5nCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGlzIGNhdXNpbmcgYnVmZmVyIEkvTyBvdmVycnVucywgaXQgcHJvYmFibHkKKyAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB5b3UgYXJlbid0IHRha2luZyBlbm91Z2ggYWR2YW50YWdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgZmlsdGVyaW5nIGVuZ2luZS4KKyAgICAgICAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1keW5hbWljLXRyYWNlcG9pbnRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBEeW5hbWljIFRyYWNlcG9pbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgcGVyZiBpc24ndCByZXN0cmljdGVkIHRvIHRoZSBmaXhlZCBzZXQgb2Ygc3RhdGljIHRyYWNlcG9pbnRzCisgICAgICAgICAgICAgICAgbGlzdGVkIGJ5ICdwZXJmIGxpc3QnLiBVc2VycyBjYW4gYWxzbyBhZGQgdGhlaXIgb3duICdkeW5hbWljJworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIGFueXdoZXJlIGluIHRoZSBrZXJuZWwuIEZvciBpbnN0YW5jZSwgc3VwcG9zZSB3ZQorICAgICAgICAgICAgICAgIHdhbnQgdG8gZGVmaW5lIG91ciBvd24gdHJhY2Vwb2ludCBvbiBkb19mb3JrKCkuIFdlIGNhbiBkbyB0aGF0CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICdwZXJmIHByb2JlJyBwZXJmIHN1YmNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcHJvYmUgZG9fZm9yaworICAgICBBZGRlZCBuZXcgZXZlbnQ6CisgICAgICAgcHJvYmU6ZG9fZm9yayAgICAgICAgKG9uIGRvX2ZvcmspCisKKyAgICAgWW91IGNhbiBub3cgdXNlIGl0IGluIGFsbCBwZXJmIHRvb2xzLCBzdWNoIGFzOgorCisJICAgICBwZXJmIHJlY29yZCAtZSBwcm9iZTpkb19mb3JrIC1hUiBzbGVlcCAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyBhIG5ldyB0cmFjZXBvaW50IHZpYSAncGVyZiBwcm9iZScgcmVzdWx0cyBpbiBhbiBldmVudAorICAgICAgICAgICAgICAgIHdpdGggYWxsIHRoZSBleHBlY3RlZCBmaWxlcyBhbmQgZm9ybWF0IGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGp1c3QgdGhlIHNhbWUgYXMgZm9yIHN0YXRpYworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIChhcyBkaXNjdXNzZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIHRyYWNlIGV2ZW50cworICAgICAgICAgICAgICAgIHN1YnN5c3RlbSBzZWN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9wcm9iZS9kb19mb3JrIyBscyAtYWwKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgLgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiAuLgorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBlbmFibGUKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgZmlsdGVyCisgICAgIC1yLS1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgT2N0IDI4IDExOjQyIGZvcm1hdAorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBpZAorCisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvcHJvYmUvZG9fZm9yayMgY2F0IGZvcm1hdAorICAgICBuYW1lOiBkb19mb3JrCisgICAgIElEOiA5NDQKKyAgICAgZm9ybWF0OgorCSAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CW9mZnNldDowOwlzaXplOjI7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CW9mZnNldDoyOwlzaXplOjE7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsJb2Zmc2V0OjM7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsJb2Zmc2V0OjQ7CXNpemU6NDsJc2lnbmVkOjE7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BhZGRpbmc7CW9mZnNldDo4OwlzaXplOjQ7CXNpZ25lZDoxOworCisJICAgICBmaWVsZDp1bnNpZ25lZCBsb25nIF9fcHJvYmVfaXA7CW9mZnNldDoxMjsJc2l6ZTo0OwlzaWduZWQ6MDsKKworICAgICBwcmludCBmbXQ6ICIoJWx4KSIsIFJFQy0+X19wcm9iZV9pcAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbGlzdCBhbGwgZHluYW1pYyB0cmFjZXBvaW50cyBjdXJyZW50bHkgaW4gZXhpc3RlbmNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHByb2JlIC1sCisgICAgICBwcm9iZTpkb19mb3JrICAgICAgICAob24gZG9fZm9yaykKKyAgICAgIHByb2JlOnNjaGVkdWxlICAgICAgIChvbiBzY2hlZHVsZSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTGV0J3MgcmVjb3JkIHN5c3RlbS13aWRlICgnc2xlZXAgMzAnIGlzIGEgdHJpY2sgZm9yIHJlY29yZGluZworICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIGJ1dCBiYXNpY2FsbHkgZG8gbm90aGluZyBhbmQgdGhlbiB3YWtlIHVwIGFmdGVyCisgICAgICAgICAgICAgICAgMzAgc2Vjb25kcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIC1nIC1hIC1lIHByb2JlOmRvX2Zvcmsgc2xlZXAgMzAKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuMDg3IE1CIHBlcmYuZGF0YSAofjM4MTIgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyAncGVyZiBzY3JpcHQnIHdlIGNhbiBzZWUgZWFjaCBkb19mb3JrIGV2ZW50IHRoYXQgZmlyZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgIyA9PT09PT09PQorICAgICAjIGNhcHR1cmVkIG9uOiBTdW4gT2N0IDI4IDExOjU1OjE4IDIwMTIKKyAgICAgIyBob3N0bmFtZSA6IGNyb3duYmF5CisgICAgICMgb3MgcmVsZWFzZSA6IDMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAjIHBlcmYgdmVyc2lvbiA6IDMuNC4xMQorICAgICAjIGFyY2ggOiBpNjg2CisgICAgICMgbnJjcHVzIG9ubGluZSA6IDIKKyAgICAgIyBucmNwdXMgYXZhaWwgOiAyCisgICAgICMgY3B1ZGVzYyA6IEludGVsKFIpIEF0b20oVE0pIENQVSBFNjYwIEAgMS4zMEdIegorICAgICAjIGNwdWlkIDogR2VudWluZUludGVsLDYsMzgsMQorICAgICAjIHRvdGFsIG1lbW9yeSA6IDEwMTcxODQga0IKKyAgICAgIyBjbWRsaW5lIDogL3Vzci9iaW4vcGVyZiByZWNvcmQgLWcgLWEgLWUgcHJvYmU6ZG9fZm9yayBzbGVlcCAzMAorICAgICAjIGV2ZW50IDogbmFtZSA9IHByb2JlOmRvX2ZvcmssIHR5cGUgPSAyLCBjb25maWcgPSAweDNiMCwgY29uZmlnMSA9IDB4MCwgY29uZmlnMiA9IDB4MCwgZXhjbF91c3IgPSAwLCBleGNsX2tlcm4KKyAgICAgID0gMCwgaWQgPSB7IDUsIDYgfQorICAgICAjIEhFQURFUl9DUFVfVE9QT0xPR1kgaW5mbyBhdmFpbGFibGUsIHVzZSAtSSB0byBkaXNwbGF5CisgICAgICMgPT09PT09PT0KKyAgICAgIworICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjExLjM3ODMxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk1IFswMDFdIDM0MjExLjM4MDM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzMjM1MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzOTkxNzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjE3LjU0MTYwMzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk5IFswMDFdIDM0MjE3LjU0MzU4NDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE3LjY5NzQ1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjA4NTczNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDBdIDM0MjE5LjEyMTM1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjI2NDU1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjE5LjU5MDM4MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjI0Ljk1NTk2NTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzA2IFswMDFdIDM0MjI0Ljk1Nzk3MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjAzODIxNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDFdIDM0MjI1LjA0NDIxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjA0NjQ0MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjM3LjExMjEzODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzExIFswMDFdIDM0MjM3LjExNDEwNjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgICBnYWt1ICAxMzEyIFswMDBdIDM0MjM3LjIwMjM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdXNpbmcgJ3BlcmYgcmVwb3J0JyBvbiB0aGUgc2FtZSBmaWxlLCB3ZSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgIGNhbGxncmFwaHMgZnJvbSBzdGFydGluZyBhIGZldyBwcm9ncmFtcyBkdXJpbmcgdGhvc2UgMzAgc2Vjb25kczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSB0cmFjZSBldmVudHMgc3Vic3lzdGVtIGFjY29tbW9kYXRlIHN0YXRpYworICAgICAgICAgICAgICAgIGFuZCBkeW5hbWljIHRyYWNlcG9pbnRzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IC0gdGhlcmUncyBubworICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgYXMgZmFyIGFzIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBjb25jZXJuZWQuICBTZWUgdGhlCisgICAgICAgICAgICAgICAgZnRyYWNlIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IER5bmFtaWMgdHJhY2Vwb2ludHMgYXJlIGltcGxlbWVudGVkIHVuZGVyIHRoZQorICAgICAgICAgICAgICAgIGNvdmVycyBieSBrcHJvYmVzIGFuZCB1cHJvYmVzLiAga3Byb2JlcyBhbmQgdXByb2JlcyBhcmUgYWxzbyB1c2VkCisgICAgICAgICAgICAgICAgYnkgYW5kIGluIGZhY3QgYXJlIHRoZSBtYWluIGZvY3VzIG9mIFN5c3RlbVRhcC4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9ubGluZSB2ZXJzaW9ucyBvZiB0aGUgbWFuIHBhZ2VzIGZvciB0aGUgY29tbWFuZHMgZGlzY3Vzc2VkIGluIHRoaXMKKyAgICAgICAgICAgIHNlY3Rpb24gY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zdGF0Jz4ncGVyZiBzdGF0JyBtYW5wYWdlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1yZWNvcmQnPidwZXJmIHJlY29yZCcgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtcmVwb3J0Jz4ncGVyZiByZXBvcnQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmLXByb2JlJz4ncGVyZiBwcm9iZScgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0Jz4ncGVyZiBzY3JpcHQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0LXB5dGhvbic+J3BlcmYgc2NyaXB0JyBweXRob24gYmluZGluZzwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmJz5wZXJmKDEpIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm9ybWFsbHksIHlvdSBzaG91bGQgYmUgYWJsZSB0byBpbnZva2UgdGhlIG1hbiBwYWdlcyB2aWEgcGVyZgorICAgICAgICAgICAgaXRzZWxmIGUuZy4gJ3BlcmYgaGVscCcgb3IgJ3BlcmYgaGVscCByZWNvcmQnLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIb3dldmVyLCBieSBkZWZhdWx0IFlvY3RvIGRvZXNuJ3QgaW5zdGFsbCBtYW4gcGFnZXMsIGJ1dCBwZXJmCisgICAgICAgICAgICBpbnZva2VzIHRoZSBtYW4gcGFnZXMgZm9yIG1vc3QgaGVscCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgYnVnCisgICAgICAgICAgICBhbmQgaXMgYmVpbmcgYWRkcmVzc2VkIGJ5IGEgWW9jdG8gYnVnOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg4Jz5CdWcgMzM4OCAtIHBlcmY6IGVuYWJsZSBtYW4gcGFnZXMgZm9yIGJhc2ljICdoZWxwJyBmdW5jdGlvbmFsaXR5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtYW4gcGFnZXMgaW4gdGV4dCBmb3JtLCBhbG9uZyB3aXRoIHNvbWUgb3RoZXIgZmlsZXMsIHN1Y2ggYXMKKyAgICAgICAgICAgIGEgc2V0IG9mIGV4YW1wbGVzLCBjYW4gYmUgZm91bmQgaW4gdGhlICdwZXJmJyBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICBrZXJuZWwgdHJlZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVyZSdzIGFsc28gYSBuaWNlIHBlcmYgdHV0b3JpYWwgb24gdGhlIHBlcmYgd2lraSB0aGF0IGdvZXMKKyAgICAgICAgICAgIGludG8gbW9yZSBkZXRhaWwgdGhhbiB3ZSBkbyBoZXJlIGluIGNlcnRhaW4gYXJlYXM6CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3BlcmYud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9UdXRvcmlhbCc+UGVyZiBUdXRvcmlhbDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1mdHJhY2UnPgorICAgIDx0aXRsZT5mdHJhY2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgICdmdHJhY2UnIGxpdGVyYWxseSByZWZlcnMgdG8gdGhlICdmdHJhY2UgZnVuY3Rpb24gdHJhY2VyJyBidXQgaW4KKyAgICAgICAgcmVhbGl0eSB0aGlzIGVuY29tcGFzc2VzIGEgbnVtYmVyIG9mIHJlbGF0ZWQgdHJhY2VycyBhbG9uZyB3aXRoCisgICAgICAgIHRoZSBpbmZyYXN0cnVjdHVyZSB0aGF0IHRoZXkgYWxsIG1ha2UgdXNlIG9mLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdmdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUgYmFzaWMKKyAgICAgICAgICAgIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIGZ0cmFjZSwgdHJhY2UtY21kLCBhbmQga2VybmVsc2hhcmsgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtLAorICAgICAgICAgICAgYW5kIGFyZSByZWFkeSB0byBnbyBvdXQtb2YtdGhlLWJveCAtIG5vIGFkZGl0aW9uYWwgc2V0dXAgaXMKKyAgICAgICAgICAgIG5lY2Vzc2FyeS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZAorICAgICAgICAgICAgdG8gdGhlIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBmdHJhY2Ugb24gdGhlIHRhcmdldC4ga2VybmVsc2hhcmsKKyAgICAgICAgICAgIGlzIGEgR1VJIGFwcGxpY2F0aW9uIGFuZCBpZiB5b3UgdXNlIHRoZSAnLVgnIG9wdGlvbiB0byBzc2ggeW91CisgICAgICAgICAgICBjYW4gaGF2ZSB0aGUga2VybmVsc2hhcmsgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5CisgICAgICAgICAgICByZW1vdGVseSBvbiB0aGUgaG9zdCBpZiB5b3Ugd2FudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYXNpYy1mdHJhY2UtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgZnRyYWNlIHVzYWdlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICdmdHJhY2UnIGVzc2VudGlhbGx5IHJlZmVycyB0byBldmVyeXRoaW5nIGluY2x1ZGVkIGluCisgICAgICAgICAgICB0aGUgL3RyYWNpbmcgZGlyZWN0b3J5IG9mIHRoZSBtb3VudGVkIGRlYnVnZnMgZmlsZXN5c3RlbQorICAgICAgICAgICAgKFlvY3RvIGZvbGxvd3MgdGhlIHN0YW5kYXJkIGNvbnZlbnRpb24gYW5kIG1vdW50cyBpdAorICAgICAgICAgICAgYXQgL3N5cy9rZXJuZWwvZGVidWcpLiBIZXJlJ3MgYSBsaXN0aW5nIG9mIGFsbCB0aGUgZmlsZXMKKyAgICAgICAgICAgIGZvdW5kIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgb24gYSBZb2N0byBzeXN0ZW06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgbHMKKyAgICAgUkVBRE1FICAgICAgICAgICAgICAgICAgICAgIGtwcm9iZV9ldmVudHMgICAgICAgICAgICAgICB0cmFjZQorICAgICBhdmFpbGFibGVfZXZlbnRzICAgICAgICAgICAga3Byb2JlX3Byb2ZpbGUgICAgICAgICAgICAgIHRyYWNlX2Nsb2NrCisgICAgIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgdHJhY2VfbWFya2VyCisgICAgIGF2YWlsYWJsZV90cmFjZXJzICAgICAgICAgICBwZXJfY3B1ICAgICAgICAgICAgICAgICAgICAgdHJhY2Vfb3B0aW9ucworICAgICBidWZmZXJfc2l6ZV9rYiAgICAgICAgICAgICAgcHJpbnRrX2Zvcm1hdHMgICAgICAgICAgICAgIHRyYWNlX3BpcGUKKyAgICAgYnVmZmVyX3RvdGFsX3NpemVfa2IgICAgICAgIHNhdmVkX2NtZGxpbmVzICAgICAgICAgICAgICB0cmFjaW5nX2NwdW1hc2sKKyAgICAgY3VycmVudF90cmFjZXIgICAgICAgICAgICAgIHNldF9ldmVudCAgICAgICAgICAgICAgICAgICB0cmFjaW5nX2VuYWJsZWQKKyAgICAgZHluX2Z0cmFjZV90b3RhbF9pbmZvICAgICAgIHNldF9mdHJhY2VfZmlsdGVyICAgICAgICAgICB0cmFjaW5nX29uCisgICAgIGVuYWJsZWRfZnVuY3Rpb25zICAgICAgICAgICBzZXRfZnRyYWNlX25vdHJhY2UgICAgICAgICAgdHJhY2luZ190aHJlc2gKKyAgICAgZXZlbnRzICAgICAgICAgICAgICAgICAgICAgIHNldF9mdHJhY2VfcGlkCisgICAgIGZyZWVfYnVmZmVyICAgICAgICAgICAgICAgICBzZXRfZ3JhcGhfZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBsaXN0ZWQgYWJvdmUgYXJlIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMgLQorICAgICAgICAgICAgc29tZSByZWxhdGUgZGlyZWN0bHkgdG8gdGhlIHRyYWNlcnMgdGhlbXNlbHZlcywgb3RoZXJzIGFyZQorICAgICAgICAgICAgdXNlZCB0byBzZXQgdHJhY2luZyBvcHRpb25zLCBhbmQgeWV0IG90aGVycyBhY3R1YWxseSBjb250YWluCisgICAgICAgICAgICB0aGUgdHJhY2luZyBvdXRwdXQgd2hlbiBhIHRyYWNlciBpcyBpbiBlZmZlY3QuIFNvbWUgb2YgdGhlCisgICAgICAgICAgICBmdW5jdGlvbnMgY2FuIGJlIGd1ZXNzZWQgZnJvbSB0aGVpciBuYW1lcywgb3RoZXJzIG5lZWQKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uOyBpbiBhbnkgY2FzZSwgd2UnbGwgY292ZXIgc29tZSBvZiB0aGUgZmlsZXMgd2UKKyAgICAgICAgICAgIHNlZSBoZXJlIGJlbG93IGJ1dCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIG90aGVycywgcGxlYXNlCisgICAgICAgICAgICBzZWUgdGhlIGZ0cmFjZSBkb2N1bWVudGF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZSdsbCBzdGFydCBieSBsb29raW5nIGF0IHNvbWUgb2YgdGhlIGF2YWlsYWJsZSBidWlsdC1pbgorICAgICAgICAgICAgdHJhY2Vycy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgY2F0J2luZyB0aGUgJ2F2YWlsYWJsZV90cmFjZXJzJyBmaWxlIGxpc3RzIHRoZSBzZXQgb2YKKyAgICAgICAgICAgIGF2YWlsYWJsZSB0cmFjZXJzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2N1cnJlbnRfdHJhY2VyJyBmaWxlIGNvbnRhaW5zIHRoZSB0cmFjZXIgY3VycmVudGx5IGluCisgICAgICAgICAgICBlZmZlY3Q6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IGN1cnJlbnRfdHJhY2VyCisgICAgIG5vcAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIGxpc3Rpbmcgb2YgY3VycmVudF90cmFjZXIgc2hvd3MgdGhhdAorICAgICAgICAgICAgdGhlICdub3AnIHRyYWNlciBpcyBpbiBlZmZlY3QsIHdoaWNoIGlzIGp1c3QgYW5vdGhlcgorICAgICAgICAgICAgd2F5IG9mIHNheWluZyB0aGF0IHRoZXJlJ3MgYWN0dWFsbHkgbm8gdHJhY2VyCisgICAgICAgICAgICBjdXJyZW50bHkgaW4gZWZmZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBlY2hvJ2luZyBvbmUgb2YgdGhlIGF2YWlsYWJsZV90cmFjZXJzIGludG8gY3VycmVudF90cmFjZXIKKyAgICAgICAgICAgIG1ha2VzIHRoZSBzcGVjaWZpZWQgdHJhY2VyIHRoZSBjdXJyZW50IHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgY3VycmVudF90cmFjZXIKKyAgICAgZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBzZXRzIHRoZSBjdXJyZW50IHRyYWNlciB0byBiZSB0aGUKKyAgICAgICAgICAgICdmdW5jdGlvbiB0cmFjZXInLiBUaGlzIHRyYWNlciB0cmFjZXMgZXZlcnkgZnVuY3Rpb24KKyAgICAgICAgICAgIGNhbGwgaW4gdGhlIGtlcm5lbCBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGFzIHRoZQorICAgICAgICAgICAgY29udGVudHMgb2YgdGhlICd0cmFjZScgZmlsZS4gUmVhZGluZyB0aGUgJ3RyYWNlJyBmaWxlCisgICAgICAgICAgICBsaXN0cyB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICB0cmFjZWQgYnkgdGhlIGZ1bmN0aW9uIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIyB0cmFjZXI6IGZ1bmN0aW9uCisgICAgICMKKyAgICAgIyBlbnRyaWVzLWluLWJ1ZmZlci9lbnRyaWVzLXdyaXR0ZW46IDMxMDYyOS83NjY0NzEgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTY5OiBrdGltZV9nZXRfcmVhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcwOiBnZXRuc3RpbWVvZmRheSAmbHQ7LWt0aW1lX2dldF9yZWFsCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLi4xICAgNDcwLjg2NzE3MTogbnNfdG9fdGltZXZhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcxOiBuc190b190aW1lc3BlYyAmbHQ7LW5zX3RvX3RpbWV2YWwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcyOiBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQgJmx0Oy1hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IG5hdGl2ZV9hcGljX21lbV93cml0ZSAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IGlycV9lbnRlciAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IHJjdV9pcnFfZW50ZXIgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiByY3VfaWRsZV9leGl0X2NvbW1vbi5pc3JhLjMzICZsdDstcmN1X2lycV9lbnRlcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzM6IGxvY2FsX2JoX2Rpc2FibGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiBhZGRfcHJlZW1wdF9jb3VudCAmbHQ7LWxvY2FsX2JoX2Rpc2FibGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX2lkbGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDoga3RpbWVfZ2V0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDogdGlja19ub2h6X3N0b3BfaWRsZSAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHVwZGF0ZV90c190aW1lX3N0YXRzICZsdDstdGlja19ub2h6X3N0b3BfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IG5yX2lvd2FpdF9jcHUgJmx0Oy11cGRhdGVfdHNfdGltZV9zdGF0cworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NCAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IF9yYXdfc3Bpbl9sb2NrICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NjogYWRkX3ByZWVtcHRfY291bnQgJmx0Oy1fcmF3X3NwaW5fbG9jaworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGRvX3RpbWVyICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMyICAgNDcwLjg2NzE3NjogX3Jhd19zcGluX2xvY2sgJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGFkZF9wcmVlbXB0X2NvdW50ICZsdDstX3Jhd19zcGluX2xvY2sKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczMgICA0NzAuODY3MTc3OiBudHBfdGlja19sZW5ndGggJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMyAgIDQ3MC44NjcxNzc6IF9yYXdfc3Bpbl9sb2NrX2lycXNhdmUgJmx0Oy1udHBfdGlja19sZW5ndGgKKyAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEVhY2ggbGluZSBpbiB0aGUgdHJhY2UgYWJvdmUgc2hvd3Mgd2hhdCB3YXMgaGFwcGVuaW5nIGluCisgICAgICAgICAgICB0aGUga2VybmVsIG9uIGEgZ2l2ZW4gY3B1LCB0byB0aGUgbGV2ZWwgb2YgZGV0YWlsIG9mCisgICAgICAgICAgICBmdW5jdGlvbiBjYWxscy4gRWFjaCBlbnRyeSBzaG93cyB0aGUgZnVuY3Rpb24gY2FsbGVkLAorICAgICAgICAgICAgZm9sbG93ZWQgYnkgaXRzIGNhbGxlciAoYWZ0ZXIgdGhlIGFycm93KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRyYWNlciBnaXZlcyB5b3UgYW4gZXh0cmVtZWx5IGRldGFpbGVkIGlkZWEKKyAgICAgICAgICAgIG9mIHdoYXQgdGhlIGtlcm5lbCB3YXMgZG9pbmcgYXQgdGhlIHBvaW50IGluIHRpbWUgdGhlIHRyYWNlCisgICAgICAgICAgICB3YXMgdGFrZW4sIGFuZCBpcyBhIGdyZWF0IHdheSB0byBsZWFybiBhYm91dCBob3cgdGhlIGtlcm5lbAorICAgICAgICAgICAgY29kZSB3b3JrcyBpbiBhIGR5bmFtaWMgc2Vuc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSBmdHJhY2UgZnVuY3Rpb24gdHJhY2VyIGlzIGFsc28KKyAgICAgICAgICAgIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiBwZXJmLCBhcyB0aGUgZnRyYWNlOmZ1bmN0aW9uIHRyYWNlcG9pbnQuCisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYSBsaXR0bGUgbW9yZSBkaWZmaWN1bHQgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyB0aGFuCisgICAgICAgICAgICBpdCBuZWVkcyB0byBiZSAtIGx1Y2tpbHkgdGhlcmUncyBhIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICB0cmFjZXIgdGhhdCBkaXNwbGF5cyB0aGUgY2FsbGNoYWlucyBleHBsaWNpdGx5LCBjYWxsZWQgdGhlCisgICAgICAgICAgICAnZnVuY3Rpb25fZ3JhcGgnIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uX2dyYXBoICZndDsgY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIHRyYWNlcjogZnVuY3Rpb25fZ3JhcGgKKworICAgICAgQ1BVICBEVVJBVElPTiAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTCisgICAgICB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgICAgNykgICAwLjA0NiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA3KSAgIDAuMDQzIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19zdG9wKCk7CisgICAgIDcpICAgMC4wNDIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3J0KCk7CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX2ZhaXIoKTsKKyAgICAgNykgICAwLjAzMCB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfaWRsZSgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fdW5sb2NrX2lycSgpIHsKKyAgICAgNykgICAwLjAzMyB1cyAgICB8ICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMjU4IHVzICAgIHwgICAgICB9CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICsgMTMuMzQxIHVzICAgfCAgICB9IC8qIF9fc2NoZWR1bGUgKi8KKyAgICAgNykgICAwLjA5NSB1cyAgICB8ICB9IC8qIHN1Yl9wcmVlbXB0X2NvdW50ICovCisgICAgIDcpICAgICAgICAgICAgICAgfCAgc2NoZWR1bGUoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICBfX3NjaGVkdWxlKCkgeworICAgICA3KSAgIDAuMDYwIHVzICAgIHwgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMDQ0IHVzICAgIHwgICAgICByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fbG9ja19pcnEoKSB7CisgICAgIDcpICAgMC4wMzMgdXMgICAgfCAgICAgICAgYWRkX3ByZWVtcHRfY291bnQoKTsKKyAgICAgNykgICAwLjI0NyB1cyAgICB8ICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBpZGxlX2JhbGFuY2UoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9jaygpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICAgMC4yNDYgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIHVwZGF0ZV9zaGFyZXMoKSB7CisgICAgIDcpICAgMC4wMzAgdXMgICAgfCAgICAgICAgICBfX3JjdV9yZWFkX2xvY2soKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgIF9fcmN1X3JlYWRfdW5sb2NrKCk7CisgICAgIDcpICAgMC40ODQgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgIDAuMDMwIHVzICAgIHwgICAgICAgIF9fcmN1X3JlYWRfbG9jaygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAzNSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjkwNiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgNykgICAxLjE0MSB1cyAgICB8ICAgICAgICB9CisgICAgIDcpICAgMC4wMjIgdXMgICAgfCAgICAgICAgbXNlY3NfdG9famlmZmllcygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgICBtc2Vjc190b19qaWZmaWVzKCk7CisgICAgIDQpICAgMC4wNjIgdXMgICAgfCAgICAgICAgX19yY3VfcmVhZF91bmxvY2soKTsKKyAgICAgNCkgICAgICAgICAgICAgICB8ICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgNCkgICAwLjA3MyB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDQpICAgMC41NjIgdXMgICAgfCAgICAgICAgfQorICAgICA0KSArIDE3LjQ1MiB1cyAgIHwgICAgICB9CisgICAgIDQpICAgMC4xMDggdXMgICAgfCAgICAgIHB1dF9wcmV2X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMTAyIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19mYWlyKCk7CisgICAgIDQpICAgMC4wODQgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3N0b3AoKTsKKyAgICAgNCkgICAwLjA3NSB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfcnQoKTsKKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMDY2IHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19pZGxlKCk7CisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA0KSAgIGt3b3JrZXItNzQgICA9Jmd0OyAgICAmbHQ7aWRsZSZndDstMAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICA0KSAgICAgICAgICAgICAgIHwgICAgICBmaW5pc2hfdGFza19zd2l0Y2goKSB7CisgICAgIDQpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9ja19pcnEoKSB7CisgICAgIDQpICAgMC4xMDAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAgIDAuNTgyIHVzICAgIHwgICAgICAgIH0KKyAgICAgNCkgICAxLjEwNSB1cyAgICB8ICAgICAgfQorICAgICA0KSAgIDAuMDg4IHVzICAgIHwgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAhIDEwMC4wNjYgdXMgIHwgICAgfQorICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAzKSAgICAgICAgICAgICAgIHwgIHN5c19pb2N0bCgpIHsKKyAgICAgMykgICAwLjA4MyB1cyAgICB8ICAgIGZnZXRfbGlnaHQoKTsKKyAgICAgMykgICAgICAgICAgICAgICB8ICAgIHNlY3VyaXR5X2ZpbGVfaW9jdGwoKSB7CisgICAgIDMpICAgMC4wNjYgdXMgICAgfCAgICAgIGNhcF9maWxlX2lvY3RsKCk7CisgICAgIDMpICAgMC41NjIgdXMgICAgfCAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICBkb192ZnNfaW9jdGwoKSB7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgIGRybV9pb2N0bCgpIHsKKyAgICAgMykgICAwLjA3NSB1cyAgICB8ICAgICAgICBkcm1fdXRfZGVidWdfcHJpbnRrKCk7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoKSB7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICAgIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgpOworICAgICAzKSAgIDAuNTcwIHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgZHJtX2dlbV9vYmplY3RfbG9va3VwKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgMykgICAwLjA4MCB1cyAgICB8ICAgICAgICAgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuNjIwIHVzICAgIHwgICAgICAgICAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgICAgIF9yYXdfc3Bpbl91bmxvY2soKSB7CisgICAgIDMpICAgMC4wODUgdXMgICAgfCAgICAgICAgICAgICAgc3ViX3ByZWVtcHRfY291bnQoKTsKKyAgICAgMykgICAwLjU2MiB1cyAgICB8ICAgICAgICAgICAgfQorICAgICAzKSAgIDIuMTQ5IHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgIDAuMTMzIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3BpbigpOworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKCkgeworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbigpOworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoKTsKKyAgICAgMykgICAwLjA2MiB1cyAgICB8ICAgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2NwdV93cml0ZV9kb21haW4oKTsKKyAgICAgMykgICAxLjYxMiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAgICAgICAgICAgICB8ICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2UoKSB7CisgICAgIDMpICAgMC4wOTcgdXMgICAgfCAgICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mZW5jZS5jb25zdHByb3AuMzYoKTsKKyAgICAgMykgICAwLjY0NSB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAwLjA3MCB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuMDczIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3VucGluKCk7CisgICAgIDMpICAgMC4wNjggdXMgICAgfCAgICAgICAgICBtdXRleF91bmxvY2soKTsKKyAgICAgMykgICA5LjkyNCB1cyAgICB8ICAgICAgICB9CisgICAgIDMpICsgMTEuMjM2IHVzICAgfCAgICAgIH0KKyAgICAgMykgKyAxMS43NzAgdXMgICB8ICAgIH0KKyAgICAgMykgKyAxMy43ODQgdXMgICB8ICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgc3lzX2lvY3RsKCkgeworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQXMgeW91IGNhbiBzZWUsIHRoZSBmdW5jdGlvbl9ncmFwaCBkaXNwbGF5IGlzIG11Y2ggZWFzaWVyIHRvCisgICAgICAgICAgICBmb2xsb3cuIEFsc28gbm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQKKyAgICAgICAgICAgIGFzc29jaWF0ZWQgYnJhY2VzLCBvdGhlciBldmVudHMgc3VjaCBhcyBzY2hlZHVsZXIgZXZlbnRzCisgICAgICAgICAgICBhcmUgZGlzcGxheWVkIGluIGNvbnRleHQuIEluIGZhY3QsIHlvdSBjYW4gZnJlZWx5IGluY2x1ZGUKKyAgICAgICAgICAgIGFueSB0cmFjZXBvaW50IGF2YWlsYWJsZSBpbiB0aGUgdHJhY2UgZXZlbnRzIHN1YnN5c3RlbSBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBuZXh0IHNlY3Rpb24gYnkgc2ltcGx5IGVuYWJsaW5nIHRob3NlIGV2ZW50cywgYW5kIHRoZXknbGwKKyAgICAgICAgICAgIGFwcGVhciBpbiBjb250ZXh0IGluIHRoZSBmdW5jdGlvbiBncmFwaCBkaXNwbGF5LiBRdWl0ZSBhCisgICAgICAgICAgICBwb3dlcmZ1bCB0b29sIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBkeW5hbWljcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWxzbyBub3RpY2UgdGhhdCB0aGVyZSBhcmUgdmFyaW91cyBhbm5vdGF0aW9ucyBvbiB0aGUgbGVmdAorICAgICAgICAgICAgaGFuZCBzaWRlIG9mIHRoZSBkaXNwbGF5LiBGb3IgZXhhbXBsZSBpZiB0aGUgdG90YWwgdGltZSBpdAorICAgICAgICAgICAgdG9vayBmb3IgYSBnaXZlbiBmdW5jdGlvbiB0byBleGVjdXRlIGlzIGFib3ZlIGEgY2VydGFpbgorICAgICAgICAgICAgdGhyZXNob2xkLCBhbiBleGNsYW1hdGlvbiBwb2ludCBvciBwbHVzIHNpZ24gYXBwZWFycyBvbiB0aGUKKyAgICAgICAgICAgIGxlZnQgaGFuZCBzaWRlLiBQbGVhc2Ugc2VlIHRoZSBmdHJhY2UgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgICAgICAgIGRldGFpbHMgb24gYWxsIHRoZXNlIGZpZWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0aGUtdHJhY2UtZXZlbnRzLXN1YnN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5UaGUgJ3RyYWNlIGV2ZW50cycgU3Vic3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uZSBlc3BlY2lhbGx5IGltcG9ydGFudCBkaXJlY3RvcnkgY29udGFpbmVkIHdpdGhpbgorICAgICAgICAgICAgdGhlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZGlyZWN0b3J5IGlzIHRoZSAnZXZlbnRzJworICAgICAgICAgICAgc3ViZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyByZXByZXNlbnRhdGlvbnMgb2YgZXZlcnkKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgaW4gdGhlIHN5c3RlbS4gTGlzdGluZyBvdXQgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICB0aGUgJ2V2ZW50cycgc3ViZGlyZWN0b3J5LCB3ZSBzZWUgbWFpbmx5IGFub3RoZXIgc2V0IG9mCisgICAgICAgICAgICBzdWJkaXJlY3RvcmllczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjZCBldmVudHMKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgZHJ3eHIteHIteCAgIDE5IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYmxvY2sKKyAgICAgZHJ3eHIteHIteCAgIDMyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYnRyZnMKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZHJtCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICBkcnd4ci14ci14ICAgNDAgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBleHQzCisgICAgIGRyd3hyLXhyLXggICA3OSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGV4dDQKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZnRyYWNlCisgICAgIGRyd3hyLXhyLXggICAgOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGhkYQorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBoZWFkZXJfZXZlbnQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaGVhZGVyX3BhZ2UKKyAgICAgZHJ3eHIteHIteCAgIDI1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaTkxNQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBpcnEKKyAgICAgZHJ3eHIteHIteCAgIDEyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgamJkCisgICAgIGRyd3hyLXhyLXggICAxNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGpiZDIKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBtb2R1bGUKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbmFwaQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBuZXQKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgb29tCisgICAgIGRyd3hyLXhyLXggICAxMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHBvd2VyCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHByaW50aworICAgICBkcnd4ci14ci14ICAgIDggcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSByYW5kb20KKyAgICAgZHJ3eHIteHIteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgcmF3X3N5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHJjdQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBycG0KKyAgICAgZHJ3eHIteHIteCAgIDIwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NoZWQKKyAgICAgZHJ3eHIteHIteCAgICA3IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NzaQorICAgICBkcnd4ci14ci14ICAgIDQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBzaWduYWwKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2tiCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHNvY2sKKyAgICAgZHJ3eHIteHIteCAgIDEwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc3VucnBjCisgICAgIGRyd3hyLXhyLXggIDUzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHN5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHRhc2sKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdGltZXIKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdWRwCisgICAgIGRyd3hyLXhyLXggICAyMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHZtc2NhbgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB2c3lzY2FsbAorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB3b3JrcXVldWUKKyAgICAgZHJ3eHIteHIteCAgIDI2IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgd3JpdGViYWNrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBFYWNoIG9uZSBvZiB0aGVzZSBzdWJkaXJlY3RvcmllcyBjb3JyZXNwb25kcyB0byBhCisgICAgICAgICAgICAnc3Vic3lzdGVtJyBhbmQgY29udGFpbnMgeWV0IGFnYWluIG1vcmUgc3ViZGlyZWN0b3JpZXMsCisgICAgICAgICAgICBlYWNoIG9uZSBvZiB0aG9zZSBmaW5hbGx5IGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjZXBvaW50LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGhlcmUgYXJlIHRoZSBjb250ZW50cyBvZiB0aGUgJ2ttZW0nIHN1YnN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgY2Qga21lbQorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0jIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSAuCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4uCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmaWx0ZXIKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga2ZyZWUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWFsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2MKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9hbGxvY19leHRmcmFnCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfcGNwdV9kcmFpbgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgTGV0J3Mgc2VlIHdoYXQncyBpbnNpZGUgdGhlIHN1YmRpcmVjdG9yeSBmb3IgYSBzcGVjaWZpYworICAgICAgICAgICAgdHJhY2Vwb2ludCwgaW4gdGhpcyBjYXNlIHRoZSBvbmUgZm9yIGttYWxsb2M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbSMgY2Qga21hbGxvYworICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZW5hYmxlCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGZpbHRlcgorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmb3JtYXQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaWQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAnZm9ybWF0JyBmaWxlIGZvciB0aGUgdHJhY2Vwb2ludCBkZXNjcmliZXMgdGhlIGV2ZW50CisgICAgICAgICAgICBpbiBtZW1vcnksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMgdHJhY2luZyB0b29scworICAgICAgICAgICAgdGhhdCBub3cgbWFrZSB1c2Ugb2YgdGhlc2UgdHJhY2Vwb2ludCB0byBwYXJzZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIGFuZCBtYWtlIHNlbnNlIG9mIGl0LCBhbG9uZyB3aXRoIGEgJ3ByaW50IGZtdCcgZmllbGQgdGhhdAorICAgICAgICAgICAgYWxsb3dzIHRvb2xzIGxpa2UgZnRyYWNlIHRvIGRpc3BsYXkgdGhlIGV2ZW50IGFzIHRleHQuCisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB0aGUgZm9ybWF0IG9mIHRoZSBrbWFsbG9jIGV2ZW50IGxvb2tzIGxpa2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbS9rbWFsbG9jIyBjYXQgZm9ybWF0CisgICAgIG5hbWU6IGttYWxsb2MKKyAgICAgSUQ6IDMxMworICAgICBmb3JtYXQ6CisJICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsJb2Zmc2V0OjA7CXNpemU6MjsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsJb2Zmc2V0OjI7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwlvZmZzZXQ6MzsJc2l6ZToxOwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGlkOwlvZmZzZXQ6NDsJc2l6ZTo0OwlzaWduZWQ6MTsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGFkZGluZzsJb2Zmc2V0Ojg7CXNpemU6NDsJc2lnbmVkOjE7CisKKwkgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlOwlvZmZzZXQ6MTY7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpjb25zdCB2b2lkICogcHRyOwlvZmZzZXQ6MjQ7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfcmVxOwlvZmZzZXQ6MzI7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfYWxsb2M7CW9mZnNldDo0MDsJc2l6ZTo4OwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmdmcF90IGdmcF9mbGFnczsJb2Zmc2V0OjQ4OwlzaXplOjQ7CXNpZ25lZDowOworCisgICAgIHByaW50IGZtdDogImNhbGxfc2l0ZT0lbHggcHRyPSVwIGJ5dGVzX3JlcT0lenUgYnl0ZXNfYWxsb2M9JXp1IGdmcF9mbGFncz0lcyIsIFJFQy0+Y2FsbF9zaXRlLCBSRUMtPnB0ciwgUkVDLT5ieXRlc19yZXEsIFJFQy0+Ynl0ZXNfYWxsb2MsCisgICAgIChSRUMtPmdmcF9mbGFncykgPyBfX3ByaW50X2ZsYWdzKFJFQy0+Z2ZwX2ZsYWdzLCAifCIsIHsodW5zaWduZWQgbG9uZykoKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSkgfCAoKCBnZnBfdCkweDQwMDB1KSB8ICgoIGdmcF90KTB4MTAwMDB1KSB8ICgoIGdmcF90KTB4MTAwMHUpIHwgKCggZ2ZwX3QpMHgyMDB1KSB8ICgoCisgICAgIGdmcF90KTB4NDAwMDAwdSkpLCAiR0ZQX1RSQU5TSFVHRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoIGdmcF90KTB4MjAwMDB1KSB8ICgoCisgICAgIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSksICJHRlBfSElHSFVTRVJfTU9WQUJMRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSksICJHRlBfSElHSFVTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKAorICAgICBnZnBfdCkweDIwMDAwdSkpLCAiR0ZQX1VTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKCBnZnBfdCkweDgwMDAwdSkpLCBHRlBfVEVNUE9SQVJZIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCggZ2ZwX3QpMHgxMHUpIHwgKCggZ2ZwX3QpMHg0MHUpIHwgKCggZ2ZwX3QpMHg4MHUpKSwgIkdGUF9LRVJORUwifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkpLAorICAgICAiR0ZQX05PRlMifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDIwdSkpLCAiR0ZQX0FUT01JQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSksICJHRlBfTk9JTyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgKKyAgICAgZ2ZwX3QpMHgyMHUpLCAiR0ZQX0hJR0gifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4MTB1KSwgIkdGUF9XQUlUIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwdSksICJHRlBfSU8ifSwgeyh1bnNpZ25lZCBsb25nKSgoCisgICAgIGdmcF90KTB4MTAwdSksICJHRlBfQ09MRCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDB1KSwgIkdGUF9OT1dBUk4ifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwdSksICJHRlBfUkVQRUFUIn0sIHsodW5zaWduZWQKKyAgICAgbG9uZykoKCBnZnBfdCkweDgwMHUpLCAiR0ZQX05PRkFJTCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgxMDAwdSksICJHRlBfTk9SRVRSWSJ9LCAgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDB1KSwgIkdGUF9DT01QIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDB1KSwgIkdGUF9aRVJPIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDEwMDAwdSksICJHRlBfTk9NRU1BTExPQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDAwMHUpLAorICAgICAiR0ZQX0hBUkRXQUxMIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDAwdSksICJHRlBfVEhJU05PREUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4ODAwMDB1KSwgIkdGUF9SRUNMQUlNQUJMRSJ9LCB7KHVuc2lnbmVkCisgICAgIGxvbmcpKCggZ2ZwX3QpMHgwOHUpLCAiR0ZQX01PVkFCTEUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTApLCAiR0ZQX05PVFJBQ0sifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwMDAwdSksICJHRlBfTk9fS1NXQVBEIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDAwMHUpLCAiR0ZQX09USEVSX05PREUifSApIDogIkdGUF9OT1dBSVQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2VuYWJsZScgZmlsZSBpbiB0aGUgdHJhY2Vwb2ludCBkaXJlY3RvcnkgaXMgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgIHRoZSB1c2VyIChvciB0b29scyBzdWNoIGFzIHRyYWNlLWNtZCkgdG8gYWN0dWFsbHkgdHVybiB0aGUKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgb24gYW5kIG9mZi4gV2hlbiBlbmFibGVkLCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgdHJhY2Vwb2ludCB3aWxsIHN0YXJ0IGFwcGVhcmluZyBpbiB0aGUgZnRyYWNlICd0cmFjZScKKyAgICAgICAgICAgIGZpbGUgZGVzY3JpYmVkIHByZXZpb3VzbHkuIEZvciBleGFtcGxlLCB0aGlzIHR1cm5zIG9uIHRoZQorICAgICAgICAgICAga21hbGxvYyB0cmFjZXBvaW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgZWNobyAxID4gZW5hYmxlCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBdCB0aGUgbW9tZW50LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gdHJhY2VyIG9yCisgICAgICAgICAgICBzb21lIG90aGVyIHRyYWNlciB0aGF0IG1pZ2h0IGJlIGluIGVmZmVjdCwgc28gd2UgZmlyc3QgdHVybgorICAgICAgICAgICAgaXQgb2ZmLCBidXQgaWYgd2UgZG8gdGhhdCwgd2Ugc3RpbGwgbmVlZCB0byB0dXJuIHRyYWNpbmcgb24gaW4KKyAgICAgICAgICAgIG9yZGVyIHRvIHNlZSB0aGUgZXZlbnRzIGluIHRoZSBvdXRwdXQgYnVmZmVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGVjaG8gbm9wID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiB0cmFjaW5nX29uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3csIGlmIHdlIGxvb2sgYXQgdGhlIHRoZSAndHJhY2UnIGZpbGUsIHdlIHNlZSBub3RoaW5nCisgICAgICAgICAgICBidXQgdGhlIGttYWxsb2MgZXZlbnRzIHdlIGp1c3QgdHVybmVkIG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCB0cmFjZSB8IGxlc3MKKyAgICAgIyB0cmFjZXI6IG5vcAorICAgICAjCisgICAgICMgZW50cmllcy1pbi1idWZmZXIvZW50cmllcy13cml0dGVuOiAxODk3LzE4OTcgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTQuNjIwNzUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU0LjYyMTY0MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTQuNjIxNjU2OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICBtYXRjaGJveC10ZXJtaW4tMTM2MSAgWzAwMV0gLi4uMSAxODE1NC43NTU0NzI6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE0MDUwIHB0cj1mZmZmODgwMDZkNWYwZTAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTQuNzU1NTgxOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4Mzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4OToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1LjM1NDU5NDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmRiMzU0MDAgYnl0ZXNfcmVxPTU3NiBieXRlc19hbGxvYz0xMDI0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuMzU0NzAzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcwNToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcxMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3MzMxOToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTUuNjczNTI1OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3NDgyMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzkzMDE0OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1NS43OTMyMTk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzk0MTQ3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45MzY3MDU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU1LjkzNjkxMDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfcmVxPTIwNDggYnl0ZXNfYWxsb2M9MjA0OCBnZnBfZmxhZ3M9R0ZQX0tFUk5FTAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45Mzc4Njk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU0ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1Ljk1MzY2Nzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmQ1ZjIwMDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgICAgIFhvcmctMTI2NCAgWzAwMl0gLi4uMSAxODE1NS45NTM3NzU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNDFhYmU4IHB0cj1mZmZmODgwMDczNGY0Y2MwIGJ5dGVzX3JlcT0xNjggYnl0ZXNfYWxsb2M9MTkyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9OT1dBUk58R0ZQX05PUkVUUlkKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzc3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOTJhMyBwdHI9ZmZmZjg4MDAxZjgyMjUyMCBieXRlc19yZXE9MjQgYnl0ZXNfYWxsb2M9MzIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzgzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOWVkYiBwdHI9ZmZmZjg4MDA3MjFhMmYwMCBieXRlc19yZXE9NjQgYnl0ZXNfYWxsb2M9NjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc2MDUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1Ni4xNzYyNTc6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc3NzE3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1Ni4zOTkyMjk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU2LjM5OTQzNDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfaHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay9yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU2LjQwMDY2MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgbWF0Y2hib3gtdGVybWluLTEzNjEgIFswMDFdIC4uLjEgMTgxNTYuNTUyODAwOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxNDA1MCBwdHI9ZmZmZjg4MDA2ZGIzNDgwMCBieXRlc19yZXE9NTc2IGJ5dGVzX2FsbG9jPTEwMjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVG8gYWdhaW4gZGlzYWJsZSB0aGUga21hbGxvYyBldmVudCwgd2UgbmVlZCB0byBzZW5kIDAgdG8gdGhlCisgICAgICAgICAgICBlbmFibGUgZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9rbWVtL2ttYWxsb2MjIGVjaG8gMCA+IGVuYWJsZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBlbmFibGUgYW55IG51bWJlciBvZiBldmVudHMgb3IgY29tcGxldGUgc3Vic3lzdGVtcworICAgICAgICAgICAgKGJ5IHVzaW5nIHRoZSAnZW5hYmxlJyBmaWxlIGluIHRoZSBzdWJzeXN0ZW0gZGlyZWN0b3J5KSBhbmQKKyAgICAgICAgICAgIGdldCBhbiBhcmJpdHJhcmlseSBmaW5lLWdyYWluZWQgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlCisgICAgICAgICAgICBzeXN0ZW0gYnkgZW5hYmxpbmcgYXMgbWFueSBvZiB0aGUgYXBwcm9wcmlhdGUgdHJhY2Vwb2ludHMKKyAgICAgICAgICAgIGFzIGFwcGxpY2FibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbnVtYmVyIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaW4gdGhpcyBIT1dUTyBkbyBqdXN0IHRoYXQsCisgICAgICAgICAgICBpbmNsdWRpbmcgdHJhY2UtY21kIGFuZCBrZXJuZWxzaGFyayBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSB0cmFjZXBvaW50cyBhbmQgdGhlaXIgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIGFyZSB1c2VkIG5vdCBvbmx5IGJ5IGZ0cmFjZSwgIGJ1dCBieSBtYW55IG9mIHRoZSBvdGhlciB0b29scworICAgICAgICAgICAgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCB0aGV5IGZvcm0gYSBjZW50cmFsIHBvaW50IG9mCisgICAgICAgICAgICBpbnRlZ3JhdGlvbiBmb3IgdGhlIHZhcmlvdXMgdHJhY2VycyBhdmFpbGFibGUgaW4gTGludXguCisgICAgICAgICAgICBUaGV5IGZvcm0gYSBjZW50cmFsIHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgdGhlCisgICAgICAgICAgICBmb2xsb3dpbmcgdG9vbHM6IHBlcmYsIGx0dG5nLCBmdHJhY2UsIGJsa3RyYWNlIGFuZCBTeXN0ZW1UYXAKKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBFdmVudHVhbGx5IGFsbCB0aGUgc3BlY2lhbC1wdXJwb3NlIHRyYWNlcnMKKyAgICAgICAgICAgIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyB3aWxsIGJlCisgICAgICAgICAgICByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIGVxdWl2YWxlbnQgdHJhY2VycyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICd0cmFjZSBldmVudHMnIHN1YnN5c3RlbS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RyYWNlLWNtZC1rZXJuZWxzaGFyayc+CisgICAgICAgIDx0aXRsZT50cmFjZS1jbWQva2VybmVsc2hhcms8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdHJhY2UtY21kIGlzIGVzc2VudGlhbGx5IGFuIGV4dGVuc2l2ZSBjb21tYW5kLWxpbmUgJ3dyYXBwZXInCisgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBoaWRlcyB0aGUgZGV0YWlscyBvZiBhbGwgdGhlIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcsIGFsbG93aW5nIHVzZXJzIHRvIHNwZWNpZnkKKyAgICAgICAgICAgIHNwZWNpZmljIHBhcnRpY3VsYXIgZXZlbnRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyBzdWJkaXJlY3RvcnkgYW5kIHRvIGNvbGxlY3QKKyAgICAgICAgICAgIHRyYWNlcyBhbmQgYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCB0aG9zZSBkZXRhaWxzIGRpcmVjdGx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB5ZXQgYW5vdGhlciBsYXllciBvbiB0b3Agb2YgdGhhdCwga2VybmVsc2hhcmsgcHJvdmlkZXMgYSBHVUkKKyAgICAgICAgICAgIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHN0YXJ0IGFuZCBzdG9wIHRyYWNlcyBhbmQgc3BlY2lmeSBzZXRzCisgICAgICAgICAgICBvZiBldmVudHMgdXNpbmcgYW4gaW50dWl0aXZlIGludGVyZmFjZSwgYW5kIHZpZXcgdGhlCisgICAgICAgICAgICBvdXRwdXQgYXMgYm90aCB0cmFjZSBldmVudHMgYW5kIGFzIGEgcGVyLUNQVSBncmFwaGljYWwKKyAgICAgICAgICAgIGRpc3BsYXkuIEl0IGRpcmVjdGx5IHVzZXMgJ3RyYWNlLWNtZCcgYXMgdGhlIHBsdW1iaW5nCisgICAgICAgICAgICB0aGF0IGFjY29tcGxpc2hlcyBhbGwgdGhhdCB1bmRlcm5lYXRoIHRoZSBjb3ZlcnMgKGFuZAorICAgICAgICAgICAgYWN0dWFsbHkgZGlzcGxheXMgdGhlIHRyYWNlLWNtZCBjb21tYW5kIGl0IHVzZXMsIGFzIHdlJ2xsIHNlZSkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHN0YXJ0IGEgdHJhY2UgdXNpbmcga2VybmVsc2hhcmssIGZpcnN0IHN0YXJ0IGtlcm5lbHNoYXJrOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5On4jIGtlcm5lbHNoYXJrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVuIGJyaW5nIHVwIHRoZSAnQ2FwdHVyZScgZGlhbG9nIGJ5IGNob29zaW5nIGZyb20gdGhlCisgICAgICAgICAgICBrZXJuZWxzaGFyayBtZW51OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDYXB0dXJlIHwgUmVjb3JkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGF0IHdpbGwgZGlzcGxheSB0aGUgZm9sbG93aW5nIGRpYWxvZywgd2hpY2ggYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgY2hvb3NlIG9uZSBvciBtb3JlIGV2ZW50cyAob3IgZXZlbiBvbmUgb3IgbW9yZSBjb21wbGV0ZQorICAgICAgICAgICAgc3Vic3lzdGVtcykgdG8gdHJhY2U6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXRzIG9mIGV2ZW50cyBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyB0cmFjZSBldmVudHMgc3Vic3lzdGVtIHNlY3Rpb24sIGFuZCBpbiBmYWN0CisgICAgICAgICAgICBpcyB3aGVyZSB0cmFjZS1jbWQgZ2V0cyB0aGVtIGZvciBrZXJuZWxzaGFyay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gdGhlIGFib3ZlIHNjcmVlbnNob3QsIHdlJ3ZlIGRlY2lkZWQgdG8gZXhwbG9yZSB0aGUKKyAgICAgICAgICAgIGdyYXBoaWNzIHN1YnN5c3RlbSBhIGJpdCBhbmQgc28gaGF2ZSBjaG9zZW4gdG8gdHJhY2UgYWxsCisgICAgICAgICAgICB0aGUgdHJhY2Vwb2ludHMgY29udGFpbmVkIHdpdGhpbiB0aGUgJ2k5MTUnIGFuZCAnZHJtJworICAgICAgICAgICAgc3Vic3lzdGVtcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgZG9pbmcgdGhhdCwgd2UgY2FuIHN0YXJ0IGFuZCBzdG9wIHRoZSB0cmFjZSB1c2luZworICAgICAgICAgICAgdGhlICdSdW4nIGFuZCAnU3RvcCcgYnV0dG9uIG9uIHRoZSBsb3dlciByaWdodCBjb3JuZXIgb2YKKyAgICAgICAgICAgIHRoZSBkaWFsb2cgKHRoZSBzYW1lIGJ1dHRvbiB3aWxsIHR1cm4gaW50byB0aGUgJ1N0b3AnCisgICAgICAgICAgICBidXR0b24gYWZ0ZXIgdGhlIHRyYWNlIGhhcyBzdGFydGVkKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGljZSB0aGF0IHRoZSByaWdodC1oYW5kIHBhbmUgc2hvd3MgdGhlIGV4YWN0IHRyYWNlLWNtZAorICAgICAgICAgICAgY29tbWFuZC1saW5lIHRoYXQncyB1c2VkIHRvIHJ1biB0aGUgdHJhY2UsIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICByZXN1bHRzIG9mIHRoZSB0cmFjZS1jbWQgcnVuLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHRoZSAnU3RvcCcgYnV0dG9uIGlzIHByZXNzZWQsIHRoZSBncmFwaGljYWwgdmlldyBtYWdpY2FsbHkKKyAgICAgICAgICAgIGZpbGxzIHVwIHdpdGggYSBjb2xvcmZ1bCBwZXItY3B1IGRpc3BsYXkgb2YgdGhlIHRyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBkZXRhaWxlZCBldmVudCBsaXN0aW5nIGJlbG93IHRoYXQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSdzIGFub3RoZXIgZXhhbXBsZSwgdGhpcyB0aW1lIGEgZGlzcGxheSByZXN1bHRpbmcKKyAgICAgICAgICAgIGZyb20gdHJhY2luZyAnYWxsIGV2ZW50cyc6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2wgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBmb3IgbW9yZSBkZXRhaWxlZAorICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBkYXRhLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vcm9zdGVkdC5ob21lbGludXguY29tL2tlcm5lbHNoYXJrLyc+a2VybmVsc2hhcmsgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Z0cmFjZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIGZ0cmFjZSBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbAorICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0gY2FuIGFsc28KKyAgICAgICAgICAgIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlcmUgaXMgYSBuaWNlIHNlcmllcyBvZiBhcnRpY2xlcyBvbiB1c2luZworICAgICAgICAgICAgZnRyYWNlIGFuZCB0cmFjZS1jbWQgYXQgTFdOOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMzY1ODM1Lyc+RGVidWdnaW5nIHRoZSBrZXJuZWwgdXNpbmcgRnRyYWNlIC0gcGFydCAxPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9sd24ubmV0L0FydGljbGVzLzM2Njc5Ni8nPkRlYnVnZ2luZyB0aGUga2VybmVsIHVzaW5nIEZ0cmFjZSAtIHBhcnQgMjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8zNzA0MjMvJz5TZWNyZXRzIG9mIHRoZSBGdHJhY2UgZnVuY3Rpb24gdHJhY2VyPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy80MTAyMDAvJz50cmFjZS1jbWQ6IEEgZnJvbnQtZW5kIGZvciBGdHJhY2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSdzIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBrZXJuZWxzaGFyayB1c2FnZSBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay8nPktlcm5lbFNoYXJrPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW4gYW11c2luZyB5ZXQgdXNlZnVsIFJFQURNRSAoYSB0cmFjaW5nIG1pbmktSE9XVE8pIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9SRUFETUUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1zeXN0ZW10YXAnPgorICAgIDx0aXRsZT5zeXN0ZW10YXA8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFN5c3RlbVRhcCBpcyBhIHN5c3RlbS13aWRlIHNjcmlwdC1iYXNlZCB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU3lzdGVtVGFwIHNjcmlwdHMgYXJlIEMtbGlrZSBwcm9ncmFtcyB0aGF0IGFyZSBleGVjdXRlZCBpbiB0aGUKKyAgICAgICAga2VybmVsIHRvIGdhdGhlci9wcmludC9hZ2dyZWdhdGUgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUgY29udGV4dAorICAgICAgICB0aGV5IGVuZCB1cCBiZWluZyBpbnZva2VkIHVuZGVyLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBwcm9iZSBmcm9tIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwL3R1dG9yaWFsLyc+U3lzdGVtVGFwIHR1dG9yaWFsPC91bGluaz4KKyAgICAgICAgc2ltcGx5IHByaW50cyBhIGxpbmUgZXZlcnkgdGltZSBhbnkgcHJvY2VzcyBvbiB0aGUgc3lzdGVtIG9wZW4oKXMKKyAgICAgICAgYSBmaWxlLiBGb3IgZWFjaCBsaW5lLCBpdCBwcmludHMgdGhlIGV4ZWN1dGFibGUgbmFtZSBvZiB0aGUKKyAgICAgICAgcHJvZ3JhbSB0aGF0IG9wZW5lZCB0aGUgZmlsZSwgYWxvbmcgd2l0aCBpdHMgUElELCBhbmQgdGhlIG5hbWUKKyAgICAgICAgb2YgdGhlIGZpbGUgaXQgb3BlbmVkIChvciB0cmllZCB0byBvcGVuKSwgd2hpY2ggaXQgZXh0cmFjdHMKKyAgICAgICAgZnJvbSB0aGUgb3BlbiBzeXNjYWxsJ3MgYXJnc3RyLgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHByb2JlIHN5c2NhbGwub3BlbgorICAgICB7CisgICAgICAgICAgICAgcHJpbnRmICgiJXMoJWQpIG9wZW4gKCVzKVxuIiwgZXhlY25hbWUoKSwgcGlkKCksIGFyZ3N0cikKKyAgICAgfQorCisgICAgIHByb2JlIHRpbWVyLm1zKDQwMDApICMgYWZ0ZXIgNCBzZWNvbmRzCisgICAgIHsKKyAgICAgICAgICAgICBleGl0ICgpCisgICAgIH0KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBOb3JtYWxseSwgdG8gZXhlY3V0ZSB0aGlzIHByb2JlLCB5b3UnZCBzaW1wbHkgaW5zdGFsbAorICAgICAgICBzeXN0ZW10YXAgb24gdGhlIHN5c3RlbSB5b3Ugd2FudCB0byBwcm9iZSwgYW5kIGRpcmVjdGx5IHJ1bgorICAgICAgICB0aGUgcHJvYmUgb24gdGhhdCBzeXN0ZW0gZS5nLiBhc3N1bWluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZQorICAgICAgICBjb250YWluaW5nIHRoZSBhYm92ZSB0ZXh0IGlzIHRyYWNlX29wZW4uc3RwOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc3RhcCB0cmFjZV9vcGVuLnN0cAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFdoYXQgc3lzdGVtdGFwIGRvZXMgdW5kZXIgdGhlIGNvdmVycyB0byBydW4gdGhpcyBwcm9iZSBpcyAxKQorICAgICAgICBwYXJzZSBhbmQgY29udmVydCB0aGUgcHJvYmUgdG8gYW4gZXF1aXZhbGVudCAnQycgZm9ybSwgMikKKyAgICAgICAgY29tcGlsZSB0aGUgJ0MnIGZvcm0gaW50byBhIGtlcm5lbCBtb2R1bGUsIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIGtlcm5lbCwgd2hpY2ggYXJtcyBpdCwgYW5kIDQpIGNvbGxlY3QgdGhlIGRhdGEKKyAgICAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBwcm9iZSBhbmQgZGlzcGxheSBpdCB0byB0aGUgdXNlci4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgICBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHN0ZXBzIDEgYW5kIDIsIHRoZSAnc3RhcCcgcHJvZ3JhbSBuZWVkcworICAgICAgICBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdGhhdCBwcm9kdWNlZCB0aGUga2VybmVsCisgICAgICAgIHRoYXQgdGhlIHByb2JlZCBzeXN0ZW0gaXMgcnVubmluZy4gSW4gdGhlIGNhc2Ugb2YgYSB0eXBpY2FsCisgICAgICAgIGVtYmVkZGVkIHN5c3RlbSAodGhlICd0YXJnZXQnKSwgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0KKyAgICAgICAgdW5mb3J0dW5hdGVseSBpc24ndCB0eXBpY2FsbHkgcGFydCBvZiB0aGUgaW1hZ2UgcnVubmluZyBvbgorICAgICAgICB0aGUgdGFyZ2V0LiBJdCBpcyBub3JtYWxseSBhdmFpbGFibGUgb24gdGhlICdob3N0JyBzeXN0ZW0KKyAgICAgICAgdGhhdCBwcm9kdWNlZCB0aGUgdGFyZ2V0IGltYWdlIGhvd2V2ZXI7IGluIHN1Y2ggY2FzZXMsCisgICAgICAgIHN0ZXBzIDEgYW5kIDIgYXJlIGV4ZWN1dGVkIG9uIHRoZSBob3N0IHN5c3RlbSwgYW5kIHN0ZXBzCisgICAgICAgIDMgYW5kIDQgYXJlIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLCB1c2luZyBvbmx5IHRoZQorICAgICAgICBzeXN0ZW10YXAgJ3J1bnRpbWUnLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgc3lzdGVtdGFwIHN1cHBvcnQgaW4gWW9jdG8gYXNzdW1lcyB0aGF0IG9ubHkgc3RlcHMKKyAgICAgICAgMyBhbmQgNCBhcmUgcnVuIG9uIHRoZSB0YXJnZXQ7IGl0IGlzIHBvc3NpYmxlIHRvIGRvCisgICAgICAgIGV2ZXJ5dGhpbmcgb24gdGhlIHRhcmdldCwgYnV0IHRoaXMgc2VjdGlvbiBhc3N1bWVzIG9ubHkKKyAgICAgICAgdGhlIHR5cGljYWwgZW1iZWRkZWQgdXNlLWNhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvIGJhc2ljYWxseSB3aGF0IHlvdSBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIHJ1biBhIHN5c3RlbXRhcAorICAgICAgICBzY3JpcHQgb24gdGhlIHRhcmdldCBpcyB0byAxKSBvbiB0aGUgaG9zdCBzeXN0ZW0sIGNvbXBpbGUgdGhlCisgICAgICAgIHByb2JlIGludG8gYSBrZXJuZWwgbW9kdWxlIHRoYXQgbWFrZXMgc2Vuc2UgdG8gdGhlIHRhcmdldCwgMikKKyAgICAgICAgY29weSB0aGUgbW9kdWxlIG9udG8gdGhlIHRhcmdldCBzeXN0ZW0gYW5kIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIHRhcmdldCBrZXJuZWwsIHdoaWNoIGFybXMgaXQsIGFuZCA0KSBjb2xsZWN0CisgICAgICAgIHRoZSBkYXRhIGdlbmVyYXRlZCBieSB0aGUgcHJvYmUgYW5kIGRpc3BsYXkgaXQgdG8gdGhlIHVzZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3RlbXRhcC1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaG9zZSBhcmUgYSBsb3Qgb2Ygc3RlcHMgYW5kIGEgbG90IG9mIGRldGFpbHMsIGJ1dAorICAgICAgICAgICAgZm9ydHVuYXRlbHkgWW9jdG8gaW5jbHVkZXMgYSBzY3JpcHQgY2FsbGVkICdjcm9zc3RhcCcKKyAgICAgICAgICAgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgdGhvc2UgZGV0YWlscywgYWxsb3dpbmcgeW91IHRvCisgICAgICAgICAgICBzaW1wbHkgZXhlY3V0ZSBhIHN5c3RlbXRhcCBzY3JpcHQgb24gdGhlIHJlbW90ZSB0YXJnZXQsCisgICAgICAgICAgICB3aXRoIGFyZ3VtZW50cyBpZiBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIGRvIHRoaXMgZnJvbSBhIHJlbW90ZSBob3N0LCBob3dldmVyLCB5b3UKKyAgICAgICAgICAgIG5lZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1aWxkIGZvciB0aGUgaW1hZ2UgeW91CisgICAgICAgICAgICBib290ZWQuIFRoZSAnY3Jvc3N0YXAnIHNjcmlwdCBwcm92aWRlcyBkZXRhaWxzIG9uIGhvdworICAgICAgICAgICAgdG8gZG8gdGhpcyBpZiB5b3UgcnVuIHRoZSBzY3JpcHQgb24gdGhlIGhvc3Qgd2l0aG91dCBoYXZpbmcKKyAgICAgICAgICAgIGRvbmUgYSBidWlsZDoKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFN5c3RlbVRhcCwgd2hpY2ggdXNlcyAnY3Jvc3N0YXAnLCBhc3N1bWVzIHlvdSBjYW4gZXN0YWJsaXNoIGFuCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBjcm9zc3RhcCB3aWtpIHBhZ2UgZm9yIGRldGFpbHMgb24gdmVyaWZ5aW5nCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb25zIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UcmFjaW5nX2FuZF9Qcm9maWxpbmcjc3lzdGVtdGFwJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBBbHNvLCB0aGUgYWJpbGl0eSB0byBzc2ggaW50byB0aGUgdGFyZ2V0IHN5c3RlbSBpcyBub3QgZW5hYmxlZAorICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gKi1taW5pbWFsIGltYWdlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS44OCB0cmFjZV9vcGVuLnN0cAorCisgICAgIEVycm9yOiBObyB0YXJnZXQga2VybmVsIGJ1aWxkIGZvdW5kLgorICAgICBEaWQgeW91IGZvcmdldCB0byBjcmVhdGUgYSBsb2NhbCBidWlsZCBvZiB5b3VyIGltYWdlPworCisgICAgICdjcm9zc3RhcCcgcmVxdWlyZXMgYSBsb2NhbCBzZGsgYnVpbGQgb2YgdGhlIHRhcmdldCBzeXN0ZW0KKyAgICAgKG9yIGEgYnVpbGQgdGhhdCBpbmNsdWRlcyAndG9vbHMtcHJvZmlsZScpIGluIG9yZGVyIHRvIGJ1aWxkCisgICAgIGtlcm5lbCBtb2R1bGVzIHRoYXQgY2FuIHByb2JlIHRoZSB0YXJnZXQgc3lzdGVtLgorCisgICAgIFByYWN0aWNhbGx5IHNwZWFraW5nLCB0aGF0IG1lYW5zIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAtIElmIHlvdSdyZSBydW5uaW5nIGEgcHJlLWJ1aWx0IGltYWdlLCBkb3dubG9hZCB0aGUgcmVsZWFzZQorICAgICAgICBhbmQvb3IgQlNQIHRhcmJhbGxzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorICAgICAgLSBJZiB5b3UncmUgd29ya2luZyBmcm9tIGdpdCBzb3VyY2VzLCBqdXN0IGNsb25lIHRoZSBtZXRhZGF0YQorICAgICAgICBhbmQgQlNQIGxheWVycyBuZWVkZWQgdG8gYnVpbGQgdGhlIGltYWdlIHlvdSdsbCBiZSBib290aW5nLgorICAgICAgLSBNYWtlIHN1cmUgeW91J3JlIHByb3Blcmx5IHNldCB1cCB0byBidWlsZCBhIG5ldyBpbWFnZSAoc2VlCisgICAgICAgIHRoZSBCU1AgUkVBRE1FIGFuZC9vciB0aGUgd2lkZWx5IGF2YWlsYWJsZSBiYXNpYyBkb2N1bWVudGF0aW9uCisgICAgICAgIHRoYXQgZGlzY3Vzc2VzIGhvdyB0byBidWlsZCBpbWFnZXMpLgorICAgICAgLSBCdWlsZCBhbiAtc2RrIHZlcnNpb24gb2YgdGhlIGltYWdlIGUuZy46CisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0by1zZGsKKyAgICAgIE9SCisgICAgICAtIEJ1aWxkIGEgbm9uLXNkayBpbWFnZSBidXQgaW5jbHVkZSB0aGUgcHJvZmlsaW5nIHRvb2xzOgorICAgICAgICAgIFsgZWRpdCBsb2NhbC5jb25mIGFuZCBhZGQgJ3Rvb2xzLXByb2ZpbGUnIHRvIHRoZSBlbmQgb2YKKyAgICAgICAgICAgIHRoZSBFWFRSQV9JTUFHRV9GRUFUVVJFUyB2YXJpYWJsZSBdCisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworCisgICAgIE9uY2UgeW91J3ZlIGJ1aWxkIHRoZSBpbWFnZSBvbiB0aGUgaG9zdCBzeXN0ZW0sIHlvdSdyZSByZWFkeSB0bworICAgICBib290IGl0IChvciB0aGUgZXF1aXZhbGVudCBwcmUtYnVpbHQgaW1hZ2UpIGFuZCB1c2UgJ2Nyb3NzdGFwJworICAgICB0byBwcm9iZSBpdCAoeW91IG5lZWQgdG8gc291cmNlIHRoZSBlbnZpcm9ubWVudCBhcyB1c3VhbCBmaXJzdCk6CisKKyAgICAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKyAgICAgICAgJCBjZCB+L215L3N5c3RlbXRhcC9zY3JpcHRzCisgICAgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgU28gZXNzZW50aWFsbHkgd2hhdCB5b3UgbmVlZCB0byBkbyBpcyBidWlsZCBhbiBTREsgaW1hZ2Ugb3IKKyAgICAgICAgICAgIGltYWdlIHdpdGggJ3Rvb2xzLXByb2ZpbGUnIGFzIGRldGFpbGVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGlzIG1hbnVhbCwgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyB0YXJnZXQgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgbWFjaGluZXMsCisgICAgICAgICAgICB5b3UgbmVlZCB0byBoYXZlIHRoZSBNQUNISU5FIHlvdSdyZSBjb25uZWN0aW5nIHRvIHNlbGVjdGVkCisgICAgICAgICAgICBpbiBsb2NhbC5jb25mLCBhbmQgdGhlIGtlcm5lbCBpbiB0aGF0IG1hY2hpbmUncyBidWlsZAorICAgICAgICAgICAgZGlyZWN0b3J5IG11c3QgbWF0Y2ggdGhlIGtlcm5lbCBvbiB0aGUgYm9vdGVkIHN5c3RlbSBleGFjdGx5LAorICAgICAgICAgICAgb3IgeW91J2xsIGdldCB0aGUgYWJvdmUgJ2Nyb3NzdGFwJyBtZXNzYWdlIHdoZW4geW91IHRyeSB0bworICAgICAgICAgICAgaW52b2tlIGEgc2NyaXB0LgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctYS1zY3JpcHQtb24tYS10YXJnZXQnPgorICAgICAgICA8dGl0bGU+UnVubmluZyBhIFNjcmlwdCBvbiBhIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBkb25lIHRoYXQsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBydW4gYSBzeXN0ZW10YXAKKyAgICAgICAgICAgIHNjcmlwdCBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIC9wYXRoL3RvL3lvY3RvCisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisKKyAgICAgIyMjIFNoZWxsIGVudmlyb25tZW50IHNldCB1cCBmb3IgYnVpbGRzLiAjIyMKKworICAgICBZb3UgY2FuIG5vdyBydW4gJ2JpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgeW91J3ZlIGRvbmUgdGhhdCwgeW91IGNhbiBjZCB0byB3aGF0ZXZlciBkaXJlY3RvcnkKKyAgICAgICAgICAgIGNvbnRhaW5zIHlvdXIgc2NyaXB0cyBhbmQgdXNlICdjcm9zc3RhcCcgdG8gcnVuIHRoZSBzY3JpcHQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgL3BhdGgvdG8vbXkvc3lzdGVtYXAvc2NyaXB0CisgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjcuMiB0cmFjZV9vcGVuLnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IGdldCBhbiBlcnJvciBjb25uZWN0aW5nIHRvIHRoZSB0YXJnZXQgZS5nLjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIGVycm9yIGVzdGFibGlzaGluZyBzc2ggY29ubmVjdGlvbiBvbiByZW1vdGUgJ3Jvb3RAMTkyLjE2OC43LjInCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUcnkgc3NoJ2luZyB0byB0aGUgdGFyZ2V0IGFuZCBzZWUgd2hhdCBoYXBwZW5zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCByb290QDE5Mi4xNjguNy4yCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBIGxvdCBvZiB0aGUgdGltZSwgY29ubmVjdGlvbiBwcm9ibGVtcyBhcmUgZHVlIHNwZWNpZnlpbmcgYQorICAgICAgICAgICAgd3JvbmcgSVAgYWRkcmVzcyBvciBoYXZpbmcgYSAnaG9zdCBrZXkgdmVyaWZpY2F0aW9uIGVycm9yJy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgZXZlcnl0aGluZyB3b3JrZWQgYXMgcGxhbm5lZCwgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nCisgICAgICAgICAgICBsaWtlIHRoaXMgKGVudGVyIHRoZSBwYXNzd29yZCB3aGVuIHByb21wdGVkLCBvciBwcmVzcyBlbnRlcgorICAgICAgICAgICAgaWYgaXQncyBzZXQgdXAgdG8gdXNlIG5vIHBhc3N3b3JkKToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIHJvb3RAMTkyLjE2OC43LjIncyBwYXNzd29yZDoKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZTNGUzJMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZUpNQzdMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzeXN0ZW10YXAtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeXN0ZW1UYXAgbGFuZ3VhZ2UgcmVmZXJlbmNlIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcC9sYW5ncmVmLyc+U3lzdGVtVGFwIExhbmd1YWdlIFJlZmVyZW5jZTwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExpbmtzIHRvIG90aGVyIFN5c3RlbVRhcCBkb2N1bWVudHMsIHR1dG9yaWFscywgYW5kIGV4YW1wbGVzIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9zeXN0ZW10YXAvZG9jdW1lbnRhdGlvbi5odG1sJz5TeXN0ZW1UYXAgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz4KKyAgICA8dGl0bGU+b3Byb2ZpbGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIG9wcm9maWxlIGl0c2VsZiBpcyBhIGNvbW1hbmQtbGluZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J29wcm9maWxlLXNldHVwJz4KKyAgICAgICAgPHRpdGxlPlNldHVwPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGlzIHNlY3Rpb24sIHdlJ2xsIGFzc3VtZSB5b3UndmUgYWxyZWFkeSBwZXJmb3JtZWQgdGhlCisgICAgICAgICAgICBiYXNpYyBzZXR1cCBvdXRsaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwcm9maWxlLW1hbnVhbC1nZW5lcmFsLXNldHVwJz5HZW5lcmFsIFNldHVwPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGUgc2VjdGlvbiB0aGF0IGRlYWxzIHdpdGggcnVubmluZyBvcHJvZmlsZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUsCisgICAgICAgICAgICB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQgd2lsbCBiZSBydW5uaW5nCisgICAgICAgICAgICBvcHJvZmlsZSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBvcHJvZmlsZXVpIChvcHJvZmlsZS12aWV3ZXIpIGlzIGEgR1VJLWJhc2VkIHByb2dyYW0gdGhhdCBydW5zCisgICAgICAgICAgICBvbiB0aGUgaG9zdCBhbmQgaW50ZXJhY3RzIHJlbW90ZWx5IHdpdGggdGhlIHRhcmdldC4KKyAgICAgICAgICAgIFNlZSB0aGUgb3Byb2ZpbGV1aSBzZWN0aW9uIGZvciB0aGUgZXhhY3Qgc3RlcHMgbmVlZGVkIHRvCisgICAgICAgICAgICBpbnN0YWxsIG9wcm9maWxldWkgb24gdGhlIGhvc3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nb3Byb2ZpbGUtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT3Byb2ZpbGUgYXMgY29uZmlndXJlZCBpbiBZb2N0byBpcyBhIHN5c3RlbS13aWRlIHByb2ZpbGVyCisgICAgICAgICAgICAoaS5lLiB0aGUgdmVyc2lvbiBpbiBZb2N0byBkb2Vzbid0IHlldCBtYWtlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgIHBlcmZfZXZlbnRzIGludGVyZmFjZSB3aGljaCB3b3VsZCBhbGxvdyBpdCB0byBwcm9maWxlCisgICAgICAgICAgICBzcGVjaWZpYyBwcm9jZXNzZXMgYW5kIHdvcmtsb2FkcykuIEl0IHJlbGllcyBvbiBoYXJkd2FyZQorICAgICAgICAgICAgY291bnRlciBzdXBwb3J0IGluIHRoZSBoYXJkd2FyZSAoYnV0IGNhbiBmYWxsIGJhY2sgdG8gYQorICAgICAgICAgICAgdGltZXItYmFzZWQgbW9kZSksIHdoaWNoIG1lYW5zIHRoYXQgaXQgZG9lc24ndCB0YWtlCisgICAgICAgICAgICBhZHZhbnRhZ2Ugb2YgdHJhY2Vwb2ludHMgb3Igb3RoZXIgZXZlbnQgc291cmNlcyBmb3IgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgY29uc2lzdHMgb2YgYSBrZXJuZWwgbW9kdWxlIHRoYXQgY29sbGVjdHMgc2FtcGxlcyBhbmQgYQorICAgICAgICAgICAgdXNlcnNwYWNlIGRhZW1vbiB0aGF0IHdyaXRlcyB0aGUgc2FtcGxlIGRhdGEgdG8gZGlzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICdvcGNvbnRyb2wnIHNoZWxsIHNjcmlwdCBpcyB1c2VkIGZvciB0cmFuc3BhcmVudGx5CisgICAgICAgICAgICBtYW5hZ2luZyB0aGVzZSBjb21wb25lbnRzIGFuZCBzdGFydGluZyBhbmQgc3RvcHBpbmcKKyAgICAgICAgICAgIHByb2ZpbGVzLCBhbmQgdGhlICdvcHJlcG9ydCcgY29tbWFuZCBpcyB1c2VkIHRvCisgICAgICAgICAgICBkaXNwbGF5IHRoZSByZXN1bHRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3Byb2ZpbGUgZGFlbW9uIHNob3VsZCBhbHJlYWR5IGJlIHJ1bm5pbmcsIGJ1dCBiZWZvcmUKKyAgICAgICAgICAgIHlvdSBzdGFydCBwcm9maWxpbmcsIHlvdSBtYXkgbmVlZCB0byBjaGFuZ2Ugc29tZSBzZXR0aW5ncworICAgICAgICAgICAgYW5kIHNvbWUgb2YgdGhlc2Ugc2V0dGluZ3MgbWF5IHJlcXVpcmUgdGhlIGRhZW1vbiB0byBub3QKKyAgICAgICAgICAgIGJlIHJ1bm5pbmcuIE9uZSBvZiB0aGVzZSBzZXR0aW5ncyBpcyB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgIHZtbGludXggZmlsZSwgd2hpY2ggeW91J2xsIHdhbnQgdG8gc2V0IHVzaW5nIHRoZSAtLXZtbGludXgKKyAgICAgICAgICAgIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHByb2ZpbGVkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXZtbGludXg9L2Jvb3Qvdm1saW51eC1gdW5hbWUgLXJgCisgICAgIFRoZSBwcm9maWxpbmcgZGFlbW9uIGlzIGN1cnJlbnRseSBhY3RpdmUsIHNvIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgd2lsbCBiZSB1c2VkIHRoZSBuZXh0IHRpbWUgeW91IHJlc3RhcnQgb3Byb2ZpbGUgYWZ0ZXIgYSAtLXNodXRkb3duIG9yIC0tZGVpbml0LgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBjaGVjayBpZiB2bWxpbnV4IGZpbGU6IGlzIHNldCB1c2luZyBvcGNvbnRyb2wgLS1zdGF0dXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxMzM0CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiBub25lCisgICAgIEltYWdlIGZpbHRlcjogbm9uZQorICAgICBDYWxsLWdyYXBoIGRlcHRoOiA2CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiBpdCdzIG5vdCwgeW91IG5lZWQgdG8gc2h1dGRvd24gdGhlIGRhZW1vbiwgYWRkIHRoZSBzZXR0aW5nCisgICAgICAgICAgICBhbmQgcmVzdGFydCB0aGUgZGFlbW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIEtpbGxpbmcgZGFlbW9uLgorCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgVXNpbmcgZGVmYXVsdCBldmVudDogQ1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjEKKyAgICAgVXNpbmcgMi42KyBPUHJvZmlsZSBrZXJuZWwgaW50ZXJmYWNlLgorICAgICBSZWFkaW5nIG1vZHVsZSBpbmZvLgorICAgICBVc2luZyBsb2cgZmlsZSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL29wcm9maWxlZC5sb2cKKyAgICAgRGFlbW9uIHN0YXJ0ZWQuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB3ZSBjaGVjayB0aGUgc3RhdHVzIGFnYWluIHdlIG5vdyBzZWUgb3VyIHVwZGF0ZWQgc2V0dGluZ3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxNjQ5CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICBJbWFnZSBmaWx0ZXI6IG5vbmUKKyAgICAgQ2FsbC1ncmFwaCBkZXB0aDogNgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgV2UncmUgbm93IGluIGEgcG9zaXRpb24gdG8gcnVuIGEgcHJvZmlsZS4gRm9yIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAnb3Bjb250cm9sIC0tc3RhcnQnOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXJ0CisgICAgIFByb2ZpbGVyIHJ1bm5pbmcuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHdpbmRvdywgcnVuIG91ciB3Z2V0IHdvcmtsb2FkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHN0b3AgdGhlIHByb2ZpbGUgd2UgdXNlICdvcGNvbnRyb2wgLS1zaHV0ZG93bicsIHdoaWNoIG5vdAorICAgICAgICAgICAgb25seSBzdG9wcyB0aGUgcHJvZmlsZSBidXQgc2h1dHMgZG93biB0aGUgZGFlbW9uIGFzIHdlbGw6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc2h1dGRvd24KKyAgICAgU3RvcHBpbmcgcHJvZmlsaW5nLgorICAgICBLaWxsaW5nIGRhZW1vbi4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9wcm9maWxlIHdyaXRlcyBzYW1wbGUgZGF0YSB0byAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLAorICAgICAgICAgICAgd2hpY2ggeW91IGNhbiBsb29rIGF0IGlmIHlvdSdyZSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlCisgICAgICAgICAgICBzYW1wbGVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIGlzIGFsc28gaW50ZXJlc3RpbmcgYmVjYXVzZQorICAgICAgICAgICAgaXQncyByZWxhdGVkIHRvIGhvdyB5b3UgZGl2ZSBkb3duIHRvIGdldCBmdXJ0aGVyIGRldGFpbHMKKyAgICAgICAgICAgIGFib3V0IHNwZWNpZmljIGV4ZWN1dGFibGVzIGluIE9Qcm9maWxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgZGlzcGxheSBvdXRwdXQgZm9yIGEgcHJvZmlsZSwgc2ltcGx5IHR5cGUKKyAgICAgICAgICAgICdvcHJlcG9ydCcsIHdoaWNoIHdpbGwgc2hvdyB0aGUgcmVzdWx0cyB1c2luZyB0aGUgZGF0YSBpbgorICAgICAgICAgICAgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJlcG9ydAorCisgICAgIFdBUk5JTkchIFRoZSBPUHJvZmlsZSBrZXJuZWwgZHJpdmVyIHJlcG9ydHMgc2FtcGxlIGJ1ZmZlciBvdmVyZmxvd3MuCisgICAgIFN1Y2ggb3ZlcmZsb3dzIGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IHNhbXBsZSBhdHRyaWJ1dGlvbiwgaW52YWxpZCBzYW1wbGUKKyAgICAgZmlsZXMgYW5kIG90aGVyIHN5bXB0b21zLiAgU2VlIHRoZSBvcHJvZmlsZWQubG9nIGZvciBkZXRhaWxzLgorICAgICBZb3Ugc2hvdWxkIGFkanVzdCB5b3VyIHNhbXBsaW5nIGZyZXF1ZW5jeSB0byBlbGltaW5hdGUgKG9yIGF0IGxlYXN0IG1pbmltaXplKQorICAgICB0aGVzZSBvdmVyZmxvd3MuCisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIENQVV9DTEtfVU5IQUxULi4ufAorICAgICAgc2FtcGxlc3wgICAgICAlfAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICA0NjQzNjUgNzkuODE1NiB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgICA2NTEwOCAxMS4xOTA4IG9wcm9maWxlZAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKyAJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAJICAgICAgICAgNjQ0MTYgOTguOTM3MiBvcHJvZmlsZWQKKyAJICAgICAgICAgICA2OTIgIDEuMDYyOCBsaWJjLTIuMTYuc28KKyAgICAgICAgMzY5NTkgIDYuMzUyNiBuby12bWxpbnV4CisgICAgICAgICA0Mzc4ICAwLjc1MjUgYnVzeWJveAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKwkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgICAgICAyODQ0IDY0Ljk2MTIgbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSBidXN5Ym94CisJICAgICAgICAgICAxOTMgIDQuNDA4NCBsZC0yLjE2LnNvCisJICAgICAgICAgICAgIDIgIDAuMDQ1NyBsaWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IGxpYm5zbC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgIDAuMDIyOCBsaWJuc3NfZmlsZXMtMi4xNi5zbworICAgICAgICAgNDM0NCAgMC43NDY3IGJhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IGJhc2gKKwkgICAgICAgICAgMTY2NSAzOC4zMjg3IGxpYmMtMi4xNi5zbworCSAgICAgICAgICAgIDE4ICAwLjQxNDQgbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgbGlidGluZm8uc28uNS45CisJICAgICAgICAgICAgIDEgIDAuMDIzMCBsaWJkbC0yLjE2LnNvCisgICAgICAgICAzMTE4ICAwLjUzNTkgbmZfY29ubnRyYWNrCisgICAgICAgICAgNjg2ICAwLjExNzkgbWF0Y2hib3gtdGVybWluYWwKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgIDIxNCAzMS4xOTUzIGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAxMTQgMTYuNjE4MSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICA3OSAxMS41MTYwIGxpYmNhaXJvLnNvLjIuMTEyMDAuMgorCSAgICAgICAgICAgIDc4IDExLjM3MDMgbGliZ2RrLXgxMS0yLjAuc28uMC4yNDAwLjgKKwkgICAgICAgICAgICA1MSAgNy40MzQ0IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgIDQ1ICA2LjU1OTggbGliZ29iamVjdC0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAyOSAgNC4yMjc0IGxpYnZ0ZS5zby45LjI4MDAuMgorCSAgICAgICAgICAgIDI1ICAzLjY0NDMgbGliWDExLnNvLjYuMy4wCisJICAgICAgICAgICAgMTkgIDIuNzY5NyBsaWJ4Y2Iuc28uMS4xLjAKKwkgICAgICAgICAgICAxNyAgMi40NzgxIGxpYmd0ay14MTEtMi4wLnNvLjAuMjQwMC44CisJICAgICAgICAgICAgMTIgIDEuNzQ5MyBsaWJydC0yLjE2LnNvCisJICAgICAgICAgICAgIDMgIDAuNDM3MyBsaWJYcmVuZGVyLnNvLjEuMy4wCisgICAgICAgICAgNjcxICAwLjExNTMgZW1nZAorICAgICAgICAgIDQxMSAgMC4wNzA2IG5mX2Nvbm50cmFja19pcHY0CisgICAgICAgICAgMzkxICAwLjA2NzIgaXB0YWJsZV9uYXQKKyAgICAgICAgICAzNzggIDAuMDY1MCBuZl9uYXQKKyAgICAgICAgICAyNjMgIDAuMDQ1MiBYb3JnCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAxMDYgNDAuMzA0MiBYb3JnCisJICAgICAgICAgICAgNTMgMjAuMTUyMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAzMSAxMS43ODcxIGxpYnBpeG1hbi0xLnNvLjAuMjcuMgorCSAgICAgICAgICAgIDI2ICA5Ljg4NTkgZW1nZF9kcnYuc28KKwkgICAgICAgICAgICAxNiAgNi4wODM3IGxpYmVtZ2RzcnZfdW0uc28uMS41LjE1LjMyMjYKKwkgICAgICAgICAgICAxMSAgNC4xODI1IGxpYkVNR0QyZC5zby4xLjUuMTUuMzIyNgorCSAgICAgICAgICAgICA5ICAzLjQyMjEgbGliZmIuc28KKwkgICAgICAgICAgICAgNyAgMi42NjE2IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGlidWRldi5zby4wLjkuMworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGliZHJtLnNvLjIuNC4wCisJICAgICAgICAgICAgIDEgIDAuMzgwMiBsaWJleHRtb2Quc28KKwkgICAgICAgICAgICAgMSAgMC4zODAyIG1vdXNlX2Rydi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICA5ICAwLjAwMTUgY29ubm1hbmQKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgNCA0NC40NDQ0IGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAgIDIgMjIuMjIyMiBsaWJwdGhyZWFkLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGNvbm5tYW5kCisJICAgICAgICAgICAgIDEgMTEuMTExMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGxpYnJ0LTIuMTYuc28KKyAgICAgICAgICAgIDYgIDAuMDAxMCBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgCSBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAgIDMgNTAuMDAwMCBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxNi42NjY3IG9wcm9maWxlLXNlcnZlcgorCSAgICAgICAgICAgICAxIDE2LjY2NjcgbGlicHRocmVhZC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgMTYuNjY2NyBsaWJnbGliLTIuMC5zby4wLjMyMDAuNAorICAgICAgICAgICA1IDguNmUtMDQgZ2NvbmZkLTIKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgMiA0MC4wMDAwIGxpYmRidXMtMS5zby4zLjcuMgorCSAgICAgICAgICAgICAyIDQwLjAwMDAgbGliZ2xpYi0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAgMSAyMC4wMDAwIGxpYmMtMi4xNi5zbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIG91dHB1dCBhYm92ZSBzaG93cyB0aGUgYnJlYWtkb3duIG9yIHNhbXBsZXMgYnkgYm90aAorICAgICAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXMgYW5kIHBlcmNlbnRhZ2UgZm9yIGVhY2ggZXhlY3V0YWJsZS4KKyAgICAgICAgICAgIFdpdGhpbiBhbiBleGVjdXRhYmxlLCB0aGUgc2FtcGxlIGNvdW50cyBhcmUgYnJva2VuIGRvd24KKyAgICAgICAgICAgIGZ1cnRoZXIgaW50byBleGVjdXRhYmxlIGFuZCBzaGFyZWQgbGlicmFyaWVzIChEU09zKSB1c2VkCisgICAgICAgICAgICBieSB0aGUgZXhlY3V0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2V0IGV2ZW4gbW9yZSBkZXRhaWxlZCBicmVha2Rvd25zIGJ5IGZ1bmN0aW9uLCB3ZSBuZWVkIHRvCisgICAgICAgICAgICBoYXZlIHRoZSBmdWxsIHBhdGhzIHRvIHRoZSBEU09zLCB3aGljaCB3ZSBjYW4gZ2V0IGJ5CisgICAgICAgICAgICB1c2luZyAtZiB3aXRoIG9wcmVwb3J0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1mCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisgICAgICBzYW1wbGVzfCAgICAgICV8CisKKyAgICAgICA0NjQzNjUgNzkuODE1NiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgIDY1MTA4IDExLjE5MDggL3Vzci9iaW4vb3Byb2ZpbGVkCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgNjQ0MTYgOTguOTM3MiAvdXNyL2Jpbi9vcHJvZmlsZWQKKwkgICAgICAgICAgIDY5MiAgMS4wNjI4IC9saWIvbGliYy0yLjE2LnNvCisgICAgICAgIDM2OTU5ICA2LjM1MjYgL25vLXZtbGludXgKKyAgICAgICAgIDQzNzggIDAuNzUyNSAvYmluL2J1c3lib3gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjg0NCA2NC45NjEyIC9saWIvbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSAvYmluL2J1c3lib3gKKwkgICAgICAgICAgIDE5MyAgNC40MDg0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAyICAwLjA0NTcgL2xpYi9saWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNsLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNzX2ZpbGVzLTIuMTYuc28KKyAgICAgICAgIDQzNDQgIDAuNzQ2NyAvYmluL2Jhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IC9iaW4vYmFzaAorCSAgICAgICAgICAxNjY1IDM4LjMyODcgL2xpYi9saWJjLTIuMTYuc28KKwkgICAgICAgICAgICAxOCAgMC40MTQ0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgL2xpYi9saWJ0aW5mby5zby41LjkKKwkgICAgICAgICAgICAgMSAgMC4wMjMwIC9saWIvbGliZGwtMi4xNi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVXNpbmcgdGhlIHBhdGhzIHNob3duIGluIHRoZSBhYm92ZSBvdXRwdXQgYW5kIHRoZSAtbCBvcHRpb24gdG8KKyAgICAgICAgICAgIG9wcmVwb3J0LCB3ZSBjYW4gc2VlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBoaXRzIGluIHRoZQorICAgICAgICAgICAgcHJvZmlsZSBhbmQgdGhlaXIgc2FtcGxlIGNvdW50cyBhbmQgcGVyY2VudGFnZXMuIEhlcmUncyBhCisgICAgICAgICAgICBwb3J0aW9uIG9mIHdoYXQgd2UgZ2V0IGZvciB0aGUga2VybmVsOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1sIC9ib290L3ZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgc2FtcGxlcyAgJSAgICAgICAgc3ltYm9sIG5hbWUKKyAgICAgMjMzOTgxICAgNTAuMzg3MyAgaW50ZWxfaWRsZQorICAgICAxNTQzNyAgICAgMy4zMjQzICByYl9nZXRfcmVhZGVyX3BhZ2UKKyAgICAgMTQ1MDMgICAgIDMuMTIzMiAgcmluZ19idWZmZXJfY29uc3VtZQorICAgICAxNDA5MiAgICAgMy4wMzQ3ICBtdXRleF9zcGluX29uX293bmVyCisgICAgIDEzMDI0ICAgICAyLjgwNDcgIHJlYWRfaHBldAorICAgICA4MDM5ICAgICAgMS43MzEyICBzdWJfcHJlZW1wdF9jb3VudAorICAgICA3MDk2ICAgICAgMS41MjgxICBpb3JlYWQzMgorICAgICA2OTk3ICAgICAgMS41MDY4ICBhZGRfcHJlZW1wdF9jb3VudAorICAgICAzOTg1ICAgICAgMC44NTgyICByYl9hZHZhbmNlX3JlYWRlcgorICAgICAzNDg4ICAgICAgMC43NTExICBhZGRfZXZlbnRfZW50cnkKKyAgICAgMzMwMyAgICAgIDAuNzExMyAgZ2V0X3BhcmVudF9pcAorICAgICAzMTA0ICAgICAgMC42Njg0ICByYl9idWZmZXJfcGVlaworICAgICAyOTYwICAgICAgMC42Mzc0ICBvcF9jcHVfYnVmZmVyX3JlYWRfZW50cnkKKyAgICAgMjYxNCAgICAgIDAuNTYyOSAgc3luY19idWZmZXIKKyAgICAgMjU0NSAgICAgIDAuNTQ4MSAgZGVidWdfc21wX3Byb2Nlc3Nvcl9pZAorICAgICAyNDU2ICAgICAgMC41Mjg5ICBvaGNpX2lycQorICAgICAyMzk3ICAgICAgMC41MTYyICBtZW1zZXQKKyAgICAgMjM0OSAgICAgIDAuNTA1OSAgX19jb3B5X3RvX3VzZXJfbGwKKyAgICAgMjE4NSAgICAgIDAuNDcwNSAgcmluZ19idWZmZXJfZXZlbnRfbGVuZ3RoCisgICAgIDE5MTggICAgICAwLjQxMzAgIGluX2xvY2tfZnVuY3Rpb25zCisgICAgIDE4NTAgICAgICAwLjM5ODQgIF9fc2NoZWR1bGUKKyAgICAgMTc2NyAgICAgIDAuMzgwNSAgX19jb3B5X2Zyb21fdXNlcl9sbF9ub3plcm8KKyAgICAgMTU3NSAgICAgIDAuMzM5MiAgcmJfZXZlbnRfZGF0YV9sZW5ndGgKKyAgICAgMTI1NiAgICAgIDAuMjcwNSAgbWVtY3B5CisgICAgIDEyMzMgICAgICAwLjI2NTUgIHN5c3RlbV9jYWxsCisgICAgIDEyMTMgICAgICAwLjI2MTIgIG1lbnVfc2VsZWN0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3RpY2UgdGhhdCBhYm92ZSB3ZSBzZWUgYW4gZW50cnkgZm9yIHRoZSBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICBmdW5jdGlvbiB0aGF0IHdlJ3ZlIGxvb2tlZCBhdCB3aXRoIG90aGVyIHByb2ZpbGVycyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB3ZSBnZXQgd2hlbiB3ZSBkbyB0aGUgc2FtZSB0aGluZyBmb3IgdGhlCisgICAgICAgICAgICBidXN5Ym94IGV4ZWN1dGFibGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIHNhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQorICAgICAzNDkgICAgICAgOC40MTk4ICBidXN5Ym94ICAgICAgICAgICAgICAgICAgcmV0cmlldmVfZmlsZV9kYXRhCisgICAgIDMwOCAgICAgICA3LjQzMDYgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfSU9fZmlsZV94c2dldG4KKyAgICAgMjgzICAgICAgIDYuODI3NSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9fcmVhZF9ub2NhbmNlbAorICAgICAyMzUgICAgICAgNS42Njk1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgc3lzY2FsbAorICAgICAyMzMgICAgICAgNS42MjEyICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgY2xlYXJlcnIKKyAgICAgMjE1ICAgICAgIDUuMTg3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIGZyZWFkCisgICAgIDE4MSAgICAgICA0LjM2NjcgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3dyaXRlX25vY2FuY2VsCisgICAgIDE1OCAgICAgICAzLjgxMTggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3VuZGVyZmxvdworICAgICAxNTEgICAgICAgMy42NDI5ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX2RsX2FkZHIKKyAgICAgMTUwICAgICAgIDMuNjE4OCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIHByb2dyZXNzX21ldGVyCisgICAgIDE1MCAgICAgICAzLjYxODggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3BvbGxfbm9jYW5jZWwKKyAgICAgMTQ4ICAgICAgIDMuNTcwNiAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3VuZGVyZmxvd0BAR0xJQkNfMi4xCisgICAgIDEzNyAgICAgICAzLjMwNTIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3BvbGwKKyAgICAgMTI1ICAgICAgIDMuMDE1NyAgYnVzeWJveCAgICAgICAgICAgICAgICAgIGJiX3Byb2dyZXNzX3VwZGF0ZQorICAgICAxMjIgICAgICAgMi45NDMzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX194ODYuZ2V0X3BjX3RodW5rLmJ4CisgICAgIDk1ICAgICAgICAyLjI5MTkgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBmdWxsX3dyaXRlCisgICAgIDgxICAgICAgICAxLjk1NDIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3dyaXRlCisgICAgIDc3ICAgICAgICAxLjg1NzcgIGJ1c3lib3ggICAgICAgICAgICAgICAgICB4d3JpdGUKKyAgICAgNzIgICAgICAgIDEuNzM3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3JlYWQKKyAgICAgNzEgICAgICAgIDEuNzEyOSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19zZ2V0bgorICAgICA2NyAgICAgICAgMS42MTY0ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcG9sbAorICAgICA1MiAgICAgICAgMS4yNTQ1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX0lPX3N3aXRjaF90b19nZXRfbW9kZQorICAgICA0NSAgICAgICAgMS4wODU2ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcmVhZAorICAgICAzNCAgICAgICAgMC44MjAzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgd3JpdGUKKyAgICAgMzIgICAgICAgIDAuNzcyMCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIG1vbm90b25pY19zZWMKKyAgICAgMjUgICAgICAgIDAuNjAzMSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIHZmcHJpbnRmCisgICAgIDIyICAgICAgICAwLjUzMDggIGJ1c3lib3ggICAgICAgICAgICAgICAgICBnZXRfbW9ubworICAgICAxNCAgICAgICAgMC4zMzc4ICBsZC0yLjE2LnNvICAgICAgICAgICAgICAgc3RyY21wCisgICAgIDE0ICAgICAgICAwLjMzNzggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3g4Ni5nZXRfcGNfdGh1bmsuY3gKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFNpbmNlIHdlIHJlY29yZGVkIHRoZSBwcm9maWxlIHdpdGggYSBjYWxsY2hhaW4gZGVwdGggb2YgNiwgd2UKKyAgICAgICAgICAgIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBvdXIgX19jb3B5X3RvX3VzZXJfbGwoKSBjYWxsY2hhaW5zIGluCisgICAgICAgICAgICB0aGUgb3V0cHV0LCBhbmQgaW5kZWVkIHdlIGNhbiBpZiB3ZSBzZWFyY2ggYXJvdW5kIGEgYml0IGluCisgICAgICAgICAgICB0aGUgJ29wcmVwb3J0IC0tY2FsbGdyYXBoJyBvdXRwdXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3ByZXBvcnQgLS1jYWxsZ3JhcGggL2Jvb3Qvdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQKKworICAgICAgIDM5MiAgICAgICA2Ljk2MzkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIHNvY2tfYWlvX3JlYWQKKyAgICAgICA3MzYgICAgICAxMy4wNzUxICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUKKyAgICAgICAzMjU1ICAgICA1Ny44MjU1ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBpbmV0X3JlY3Ztc2cKKyAgICAgNzg1ICAgICAgIDAuMTY5MCAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgdGNwX3JlY3Ztc2cKKyAgICAgICAxNzkwICAgICAzMS43OTQwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBsb2NhbF9iaF9lbmFibGUKKyAgICAgICAxMjM4ICAgICAyMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2tmcmVlX3NrYgorICAgICAgIDk5MiAgICAgIDE3LjYxOTkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGxvY2tfc29ja19uZXN0ZWQKKyAgICAgICA3ODUgICAgICAxMy45NDMyICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfcmVjdm1zZyBbc2VsZl0KKyAgICAgICA1MjUgICAgICAgOS4zMjUwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCByZWxlYXNlX3NvY2sKKyAgICAgICAxMTIgICAgICAgMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfY2xlYW51cF9yYnVmCisgICAgICAgNzIgICAgICAgIDEuMjc4OSAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKworICAgICAxNzAgICAgICAgMC4wMzY2ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgIDE0OTEgICAgIDczLjMwMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIG1lbWNweV90b2lvdmVjCisgICAgICAgMzI3ICAgICAgMTYuMDc2NyAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKyAgICAgICAxNzAgICAgICAgOC4zNTc5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyBbc2VsZl0KKyAgICAgICAyMCAgICAgICAgMC45ODMzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBjb3B5X3RvX3VzZXIKKworICAgICAgIDI1ODggICAgIDk4LjI5MDkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGNvcHlfdG9fdXNlcgorICAgICAyMzQ5ICAgICAgMC41MDU5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2NvcHlfdG9fdXNlcl9sbAorICAgICAgIDIzNDkgICAgIDg5LjIxMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIF9fY29weV90b191c2VyX2xsIFtzZWxmXQorICAgICAgIDE2NiAgICAgICA2LjMwNDYgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGRvX3BhZ2VfZmF1bHQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFJlbWVtYmVyIHRoYXQgYnkgZGVmYXVsdCBPUHJvZmlsZSBzZXNzaW9ucyBhcmUgY3VtdWxhdGl2ZQorICAgICAgICAgICAgaS5lLiBpZiB5b3Ugc3RhcnQgYW5kIHN0b3AgYSBwcm9maWxpbmcgc2Vzc2lvbiwgdGhlbiBzdGFydCBhCisgICAgICAgICAgICBuZXcgb25lLCB0aGUgbmV3IG9uZSB3aWxsIG5vdCBlcmFzZSB0aGUgcHJldmlvdXMgcnVuKHMpIGJ1dAorICAgICAgICAgICAgd2lsbCBidWlsZCBvbiBpdC4gSWYgeW91IHdhbnQgdG8gcmVzdGFydCBhIHByb2ZpbGUgZnJvbSBzY3JhdGNoLAorICAgICAgICAgICAgeW91IG5lZWQgdG8gcmVzZXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tcmVzZXQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZXVpLWEtZ3VpLWZvci1vcHJvZmlsZSc+CisgICAgICAgIDx0aXRsZT5PUHJvZmlsZVVJIC0gQSBHVUkgZm9yIE9Qcm9maWxlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGFsc28gc3VwcG9ydHMgYSBncmFwaGljYWwgVUkgZm9yIGNvbnRyb2xsaW5nIGFuZCB2aWV3aW5nCisgICAgICAgICAgICBPUHJvZmlsZSB0cmFjZXMsIGNhbGxlZCBPUHJvZmlsZVVJLiBUbyB1c2UgaXQsIHlvdSBmaXJzdCBuZWVkCisgICAgICAgICAgICB0byBjbG9uZSB0aGUgb3Byb2ZpbGV1aSBnaXQgcmVwbywgdGhlbiBjb25maWd1cmUsIGJ1aWxkLCBhbmQKKyAgICAgICAgICAgIGluc3RhbGwgaXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFt0cnpAZW1wYW5hZGEgdG1wXSQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkKKyAgICAgW3RyekBlbXBhbmFkYSB0bXBdJCBjZCBvcHJvZmlsZXVpCisgICAgIFt0cnpAZW1wYW5hZGEgb3Byb2ZpbGV1aV0kIC4vYXV0b2dlbi5zaAorICAgICBbdHJ6QGVtcGFuYWRhIG9wcm9maWxldWldJCBzdWRvIG1ha2UgaW5zdGFsbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT3Byb2ZpbGVVSSByZXBsYWNlcyB0aGUgJ29wcmVwb3J0JyBmdW5jdGlvbmFsaXR5IHdpdGggYSBHVUksCisgICAgICAgICAgICBhbmQgbm9ybWFsbHkgZG9lc24ndCByZXF1aXJlIHRoZSB1c2VyIHRvIHVzZSAnb3Bjb250cm9sJyBlaXRoZXIuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm9maWxlIHRoZSBrZXJuZWwsIGhvd2V2ZXIsIHlvdSBuZWVkIHRvIGVpdGhlcgorICAgICAgICAgICAgdXNlIHRoZSBVSSB0byBzcGVjaWZ5IGEgdm1saW51eCBvciB1c2UgJ29wY29udHJvbCcgdG8gc3BlY2lmeQorICAgICAgICAgICAgaXQgb24gdGhlIHRhcmdldDoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlyc3QsIG9uIHRoZSB0YXJnZXQsIGNoZWNrIGlmIHZtbGludXggZmlsZTogaXMgc2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXR1cworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgbm90OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE5vdywgc3RhcnQgdGhlIG9wcm9maWxlIFVJIG9uIHRoZSBob3N0IHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBvcHJvZmlsZXVpXSQgb3Byb2ZpbGUtdmlld2VyCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUbyBydW4gYSBwcm9maWxlIG9uIHRoZSByZW1vdGUgc3lzdGVtLCBmaXJzdCBjb25uZWN0IHRvIHRoZQorICAgICAgICAgICAgcmVtb3RlIHN5c3RlbSBieSBwcmVzc2luZyB0aGUgJ0Nvbm5lY3QnIGJ1dHRvbiBhbmQgc3VwcGx5aW5nCisgICAgICAgICAgICB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgcmVtb3RlIHN5c3RlbSAodGhlIGRlZmF1bHQKKyAgICAgICAgICAgIHBvcnQgaXMgNDIyNCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvcHJvZmlsZSBzZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYmUgc3RhcnRlZCBhbHJlYWR5LgorICAgICAgICAgICAgSWYgbm90LCB0aGUgY29ubmVjdGlvbiB3aWxsIGZhaWwgYW5kIHlvdSBlaXRoZXIgdHlwZWQgaW4gdGhlCisgICAgICAgICAgICB3cm9uZyBJUCBhZGRyZXNzIGFuZCBwb3J0IChzZWUgYmVsb3cpLCBvciB5b3UgbmVlZCB0byBzdGFydAorICAgICAgICAgICAgdGhlIHNlcnZlciB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9yLCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgcG9ydDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIgLS1wb3J0IDg4ODgKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgY29ubmVjdGVkLCBwcmVzcyB0aGUgJ1N0YXJ0JyBidXR0b24gYW5kIHRoZW4gcnVuIHRoZQorICAgICAgICAgICAgd2dldCB3b3JrbG9hZCBvbiB0aGUgcmVtb3RlIHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+OyBzeW5jCisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHRoZSB3b3JrbG9hZCBjb21wbGV0ZXMsIHByZXNzIHRoZSAnU3RvcCcgYnV0dG9uLiBBdCB0aGF0CisgICAgICAgICAgICBwb2ludCB0aGUgT1Byb2ZpbGUgdmlld2VyIHdpbGwgZG93bmxvYWQgdGhlIHByb2ZpbGUgZmlsZXMgaXQncworICAgICAgICAgICAgY29sbGVjdGVkICh0aGlzIG1heSB0YWtlIHNvbWUgdGltZSwgZXNwZWNpYWxseSBpZiB0aGUga2VybmVsCisgICAgICAgICAgICB3YXMgcHJvZmlsZWQpLiBXaGlsZSBpdCBkb3dubG9hZHMgdGhlIGZpbGVzLCB5b3Ugc2hvdWxkIHNlZQorICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB0aGUgcHJvZmlsZSBmaWxlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCB5b3Ugc2hvdWxkIHNlZSBhCisgICAgICAgICAgICBsaXN0IG9mIHRoZSBwcm9jZXNzZXMgdGhhdCB3ZXJlIHByb2ZpbGVkOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHNlbGVjdCBvbmUgb2YgdGhlbSwgeW91IHNob3VsZCBzZWUgYWxsIHRoZSBzeW1ib2xzIHRoYXQKKyAgICAgICAgICAgIHdlcmUgaGl0IGR1cmluZyB0aGUgcHJvZmlsZS4gU2VsZWN0aW5nIG9uZSBvZiB0aGVtIHdpbGwgc2hvdyBhCisgICAgICAgICAgICBsaXN0IG9mIGNhbGxlcnMgYW5kIGNhbGxlZXMgb2YgdGhlIGNob3NlbiBmdW5jdGlvbiBpbiB0d28KKyAgICAgICAgICAgIHBhbmVzIGJlbG93IHRoZSB0b3AgcGFuZS4gRm9yIGV4YW1wbGUsIGhlcmUncyB3aGF0IHdlIHNlZQorICAgICAgICAgICAgd2hlbiB3ZSBzZWxlY3QgX19jb3B5X3RvX3VzZXJfbGwoKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFub3RoZXIgZXhhbXBsZSwgd2UgY2FuIGxvb2sgYXQgdGhlIGJ1c3lib3ggcHJvY2VzcyBhbmQgc2VlCisgICAgICAgICAgICB0aGF0IHRoZSBwcm9ncmVzcyBtZXRlciBtYWRlIGEgc3lzdGVtIGNhbGw6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW9jdG8gYWxyZWFkeSBoYXMgc29tZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCB1c2luZworICAgICAgICAgICAgT1Byb2ZpbGUgYW5kIG9wcm9maWxldWkuIEFzIHRoaXMgZG9jdW1lbnQgZG9lc24ndCBjb3ZlcgorICAgICAgICAgICAgZXZlcnl0aGluZyBpbiBkZXRhaWwsIGl0IG1heSBiZSB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtb3Byb2ZpbGUnPlByb2ZpbGluZyB3aXRoIE9Qcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT1Byb2ZpbGUgbWFudWFsIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9kb2MvaW5kZXguaHRtbCc+T1Byb2ZpbGUgbWFudWFsPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9Qcm9maWxlIHdlYnNpdGUgY29udGFpbnMgbGlua3MgdG8gdGhlIGFib3ZlIG1hbnVhbCBhbmQKKyAgICAgICAgICAgIGJ1bmNoIG9mIG90aGVyIGl0ZW1zIGluY2x1ZGluZyBhbiBleHRlbnNpdmUgc2V0IG9mIGV4YW1wbGVzOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9hYm91dC8nPkFib3V0IE9Qcm9maWxlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXN5c3Byb2YnPgorICAgIDx0aXRsZT5TeXNwcm9mPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTeXNwcm9mIGlzIGEgdmVyeSBlYXN5IHRvIHVzZSBzeXN0ZW0td2lkZSBwcm9maWxlciB0aGF0IGNvbnNpc3RzCisgICAgICAgIG9mIGEgc2luZ2xlIHdpbmRvdyB3aXRoIHRocmVlIHBhbmVzIGFuZCBhIGZldyBidXR0b25zIHdoaWNoIGFsbG93CisgICAgICAgIHlvdSB0byBzdGFydCwgc3RvcCwgYW5kIHZpZXcgdGhlIHByb2ZpbGUgZnJvbSBvbmUgcGxhY2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2Ytc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN5c3Byb2YgaXMgYSBHVUktYmFzZWQgYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIHN5c3RlbS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgd2UgYXNzdW1lIHlvdSd2ZQorICAgICAgICAgICAgc3NoJ2VkIHRvIHRoZSBob3N0IGFuZCB3aWxsIGJlIHJ1bm5pbmcgU3lzcHJvZiBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCAoeW91IGNhbiB1c2UgdGhlICctWCcgb3B0aW9uIHRvIHNzaCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICAgIFN5c3Byb2YgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5IHJlbW90ZWx5IG9uIHRoZQorICAgICAgICAgICAgaG9zdCBpZiB5b3Ugd2FudCkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3lzcHJvZi1iYXNpYy11c2FnZSc+CisgICAgICAgIDx0aXRsZT5CYXNpYyBVc2FnZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzdGFydCBwcm9maWxpbmcgdGhlIHN5c3RlbSwgeW91IHNpbXBseSBwcmVzcyB0aGUgJ1N0YXJ0JworICAgICAgICAgICAgYnV0dG9uLiBUbyBzdG9wIHByb2ZpbGluZyBhbmQgdG8gc3RhcnQgdmlld2luZyB0aGUgcHJvZmlsZSBkYXRhCisgICAgICAgICAgICBpbiBvbmUgZWFzeSBzdGVwLCBwcmVzcyB0aGUgJ1Byb2ZpbGUnIGJ1dHRvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UndmUgcHJlc3NlZCB0aGUgcHJvZmlsZSBidXR0b24sIHRoZSB0aHJlZSBwYW5lcyB3aWxsCisgICAgICAgICAgICBmaWxsIHVwIHdpdGggcHJvZmlsaW5nIGRhdGE6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zeXNwcm9mLWNvcHktdG8tdXNlci5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbGVmdCBwYW5lIHNob3dzIGEgbGlzdCBvZiBmdW5jdGlvbnMgYW5kIHByb2Nlc3Nlcy4KKyAgICAgICAgICAgIFNlbGVjdGluZyBvbmUgb2YgdGhvc2UgZXhwYW5kcyB0aGF0IGZ1bmN0aW9uIGluIHRoZSByaWdodAorICAgICAgICAgICAgcGFuZSwgc2hvd2luZyBhbGwgaXRzIGNhbGxlZXMuIE5vdGUgdGhhdCB0aGlzIGNhbGxlci1vcmllbnRlZAorICAgICAgICAgICAgZGlzcGxheSBpcyBlc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBwZXJmJ3MgZGVmYXVsdAorICAgICAgICAgICAgY2FsbGVlLW9yaWVudGVkIGNhbGxjaGFpbiBkaXNwbGF5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UncmUgZm9jdXNpbmcgb24gX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgYW5kIGxvb2tpbmcgdXAgdGhlIGNhbGxjaGFpbiB3ZSBjYW4gc2VlIHRoYXQgb25lIG9mIHRoZSBjYWxsZXJzCisgICAgICAgICAgICBvZiBfX2NvcHlfdG9fdXNlcl9sbCBpcyBzeXNfcmVhZCgpIGFuZCB0aGUgY29tcGxldGUgY2FsbHBhdGgKKyAgICAgICAgICAgIGJldHdlZW4gdGhlbS4gTm90aWNlIHRoYXQgdGhpcyBpcyBlc3NlbnRpYWxseSBhIHBvcnRpb24gb2YgdGhlCisgICAgICAgICAgICBzYW1lIGluZm9ybWF0aW9uIHdlIHNhdyBpbiB0aGUgcGVyZiBkaXNwbGF5IHNob3duIGluIHRoZSBwZXJmCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoaXMgcGFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2ltaWxhcmx5LCB0aGUgYWJvdmUgaXMgYSBzbmFwc2hvdCBvZiB0aGUgU3lzcHJvZiBkaXNwbGF5IG9mIGEKKyAgICAgICAgICAgIGNvcHktZnJvbS11c2VyIGNhbGxjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgbG9va2luZyBhdCB0aGUgdGhpcmQgU3lzcHJvZiBwYW5lIGluIHRoZSBsb3dlciBsZWZ0LAorICAgICAgICAgICAgd2UgY2FuIHNlZSBhIGxpc3Qgb2YgYWxsIHRoZSBjYWxsZXJzIG9mIGEgcGFydGljdWxhciBmdW5jdGlvbgorICAgICAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIHRvcCBsZWZ0IHBhbmUuIEluIHRoaXMgY2FzZSwgdGhlIGxvd2VyIHBhbmUgaXMKKyAgICAgICAgICAgIHNob3dpbmcgYWxsIHRoZSBjYWxsZXJzIG9mIF9fbWFya19pbm9kZV9kaXJ0eToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEb3VibGUtY2xpY2tpbmcgb24gb25lIG9mIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGluIHR1cm4gY2hhbmdlIHRoZQorICAgICAgICAgICAgZm9jdXMgdG8gdGhlIHNlbGVjdGVkIGZ1bmN0aW9uLCBhbmQgc28gb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IElmIHlvdSBsaWtlIHN5c3Byb2YncyAnY2FsbGVyLW9yaWVudGVkJworICAgICAgICAgICAgZGlzcGxheSwgeW91IG1heSBiZSBhYmxlIHRvIGFwcHJveGltYXRlIGl0IGluIG90aGVyIHRvb2xzIGFzCisgICAgICAgICAgICB3ZWxsLiAgRm9yIGV4YW1wbGUsICdwZXJmIHJlcG9ydCcgaGFzIHRoZSAtZyAoLS1jYWxsLWdyYXBoKQorICAgICAgICAgICAgb3B0aW9uIHRoYXQgeW91IGNhbiBleHBlcmltZW50IHdpdGg7IG9uZSBvZiB0aGUgb3B0aW9ucyBpcworICAgICAgICAgICAgJ2NhbGxlcicgZm9yIGFuIGludmVydGVkIGNhbGxlci1iYXNlZCBjYWxsZ3JhcGggZGlzcGxheS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2YtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgU3lzcHJvZiwgYnV0CisgICAgICAgICAgICBtYXliZSB0aGF0J3MgYmVjYXVzZSBpdCdzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LgorICAgICAgICAgICAgVGhlIFN5c3Byb2Ygd2Vic2l0ZSwgaG93ZXZlciwgaXMgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zeXNwcm9mLmNvbS8nPlN5c3Byb2YsIFN5c3RlbS13aWRlIFBlcmZvcm1hbmNlIFByb2ZpbGVyIGZvciBMaW51eDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdsdHRuZy1saW51eC10cmFjZS10b29sa2l0LW5leHQtZ2VuZXJhdGlvbic+CisgICAgPHRpdGxlPkxUVG5nIChMaW51eCBUcmFjZSBUb29sa2l0LCBuZXh0IGdlbmVyYXRpb24pPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdsdHRuZy1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZQorICAgICAgICAgICAgYmFzaWMgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTFRUbmcgaXMgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGJ5IHNzaCdpbmcgdG8gaXQuCisgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHRyYWNlcyBncmFwaGljYWxseSwKKyAgICAgICAgICAgIGluc3RhbGwgRWNsaXBzZSBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21hbnVhbGx5LWNvcHlpbmctYS10cmFjZS10by10aGUtaG9zdC1hbmQtdmlld2luZy1pdC1pbi1lY2xpcHNlJz5NYW51YWxseSBjb3B5aW5nIGEgdHJhY2UgdG8gdGhlIGhvc3QgYW5kIHZpZXdpbmcgaXQgaW4gRWNsaXBzZSAoaS5lLiB1c2luZyBFY2xpcHNlIHdpdGhvdXQgbmV0d29yayBzdXBwb3J0KTwvbGluaz4iCisgICAgICAgICAgICBhbmQgZm9sbG93IHRoZSBkaXJlY3Rpb25zIHRvIG1hbnVhbGx5IGNvcHkgdHJhY2VzIHRvIHRoZSBob3N0IGFuZAorICAgICAgICAgICAgdmlldyB0aGVtIGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEJlIHN1cmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwvcnVuIHRoZSAnU1IxJyBvciBsYXRlciBKdW5vIHJlbGVhc2UKKyAgICAgICAgICAgIG9mIGVjbGlwc2UgZS5nLjoKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzL2Rvd25sb2FkLnBocD9maWxlPS90ZWNobm9sb2d5L2VwcC9kb3dubG9hZHMvcmVsZWFzZS9qdW5vL1NSMS9lY2xpcHNlLWNwcC1qdW5vLVNSMS1saW51eC1ndGsteDg2XzY0LnRhci5neic+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvZG93bmxvYWQucGhwP2ZpbGU9L3RlY2hub2xvZ3kvZXBwL2Rvd25sb2Fkcy9yZWxlYXNlL2p1bm8vU1IxL2VjbGlwc2UtY3BwLWp1bm8tU1IxLWxpbnV4LWd0ay14ODZfNjQudGFyLmd6PC91bGluaz4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLXRyYWNlcyc+CisgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCBWaWV3aW5nIFRyYWNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBhcHBsaWVkIHRoZSBhYm92ZSBjb21taXRzIGFuZCBidWlsdCBhbmQgYm9vdGVkIHlvdXIKKyAgICAgICAgICAgIGltYWdlICh5b3UgbmVlZCB0byBidWlsZCB0aGUgY29yZS1pbWFnZS1zYXRvLXNkayBpbWFnZSBvciB1c2Ugb25lIG9mIHRoZQorICAgICAgICAgICAgb3RoZXIgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbiksIHlvdSdyZQorICAgICAgICAgICAgcmVhZHkgdG8gc3RhcnQgdHJhY2luZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdHJhY2Utb24tdGhlLXRhcmdldC1pbnNpZGUtYS1zaGVsbCc+CisgICAgICAgICAgICA8dGl0bGU+Q29sbGVjdGluZyBhbmQgdmlld2luZyBhIHRyYWNlIG9uIHRoZSB0YXJnZXQgKGluc2lkZSBhIHNoZWxsKTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTcGF3bmluZyBhIHNlc3Npb24gZGFlbW9uCisgICAgIFNlc3Npb24gYXV0by0yMDEyMTAxNS0yMzIxMjAgY3JlYXRlZC4KKyAgICAgVHJhY2VzIHdpbGwgYmUgd3JpdHRlbiBpbiAvaG9tZS9yb290L2x0dG5nLXRyYWNlcy9hdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGV2ZW50cyB5b3Ugd2FudCB0byB0cmFjZSAoaW4gdGhpcyBjYXNlIGFsbAorICAgICAgICAgICAgICAgIGtlcm5lbCBldmVudHMpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBlbmFibGUtZXZlbnQgLS1rZXJuZWwgLS1hbGwKKyAgICAgQWxsIGtlcm5lbCBldmVudHMgYXJlIGVuYWJsZWQgaW4gY2hhbm5lbCBjaGFubmVsMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTdGFydCB0aGUgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0YXJ0CisgICAgIFRyYWNpbmcgc3RhcnRlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdGhlbiBzdG9wIHRoZSB0cmFjZSBhZnRlciBhd2hpbGUgb3IgYWZ0ZXIgcnVubmluZworICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciB3b3JrbG9hZCB0aGF0IHlvdSB3YW50IHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdG9wCisgICAgIFRyYWNpbmcgc3RvcHBlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyB2aWV3IHRoZSB0cmFjZSBpbiB0ZXh0IGZvcm0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgdmlldworICAgICBbMjM6MjE6NTYuOTg5MjcwMzk5XSAoKz8uPz8/Pz8/Pz8/KSBzeXNfZ2V0ZXVpZDogeyAxIH0sIHsgfQorICAgICBbMjM6MjE6NTYuOTg5Mjc4MDgxXSAoKzAuMDAwMDA3NjgyKSBleGl0X3N5c2NhbGw6IHsgMSB9LCB7IHJldCA9IDAgfQorICAgICBbMjM6MjE6NTYuOTg5Mjg2MDQzXSAoKzAuMDAwMDA3OTYyKSBzeXNfcGlwZTogeyAxIH0sIHsgZmlsZGVzID0gMHhCNzdCOUU4QyB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjE4MDJdICgrMC4wMDAwMzU3NTkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjkzNDVdICgrMC4wMDAwMDc1NDMpIHN5c19tbWFwX3Bnb2ZmOiB7IDEgfSwgeyBhZGRyID0gMHgwLCBsZW4gPSAxMDQ4NTc2MCwgcHJvdCA9IDMsIGZsYWdzID0gMTMxMzYyLCBmZCA9IDQyOTQ5NjcyOTUsIHBnb2ZmID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzNTE2OTRdICgrMC4wMDAwMjIzNDkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gLTEyNDc4MDU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NDMyOTg5XSAoKzAuMDAwMDgxMjk1KSBzeXNfY2xvbmU6IHsgMSB9LCB7IGNsb25lX2ZsYWdzID0gMHg0MTEsIG5ld3NwID0gMHhCNUVGRkZFNCwgcGFyZW50X3RpZCA9IDB4RkZGRkZGRkYsIGNoaWxkX3RpZCA9IDB4MCB9CisgICAgIFsyMzoyMTo1Ni45ODk0NzcxMjldICgrMC4wMDAwNDQxNDApIHNjaGVkX3N0YXRfcnVudGltZTogeyAxIH0sIHsgY29tbSA9ICJsdHRuZy1jb25zdW1lcmQiLCB0aWQgPSAxMTkzLCBydW50aW1lID0gNjgxNjYwLCB2cnVudGltZSA9IDQzMzY3OTgzMzg4IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTQ4NjY5N10gKCswLjAwMDAwOTU2OCkgc2NoZWRfbWlncmF0ZV90YXNrOiB7IDEgfSwgeyBjb21tID0gImx0dG5nLWNvbnN1bWVyZCIsIHRpZCA9IDExOTMsIHByaW8gPSAyMCwgb3JpZ19jcHUgPSAxLCBkZXN0X2NwdSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NTA4NDE4XSAoKzAuMDAwMDIxNzIxKSBocnRpbWVyX2luaXQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTcwODMyMDc2LCBjbG9ja2lkID0gMSwgbW9kZSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NzcwNDYyXSAoKzAuMDAwMjYyMDQ0KSBocnRpbWVyX2NhbmNlbDogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NzcxNTgwXSAoKzAuMDAwMDAxMTE4KSBocnRpbWVyX2NhbmNlbDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc2OTU3XSAoKzAuMDAwMDA1Mzc3KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAsIG5vdyA9IDc5ODE1OTgwMDA3MDU3LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc4MTQ1XSAoKzAuMDAwMDAxMTg4KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIsIG5vdyA9IDc5ODE1OTgwMDA4MTc0LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5NzkxNjk1XSAoKzAuMDAwMDEzNTUwKSBzb2Z0aXJxX3JhaXNlOiB7IDEgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTc5NTM5Nl0gKCswLjAwMDAwMzcwMSkgc29mdGlycV9yYWlzZTogeyAwIH0sIHsgdmVjID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDA2MzVdICgrMC4wMDAwMDUyMzkpIHNvZnRpcnFfcmFpc2U6IHsgMCB9LCB7IHZlYyA9IDkgfQorICAgICBbMjM6MjE6NTYuOTg5ODA3MTMwXSAoKzAuMDAwMDA2NDk1KSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDMzMDcxMCwgdnJ1bnRpbWUgPSA0MzM2ODMxNDA5OCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDk5OTNdICgrMC4wMDAwMDI4NjMpIHNjaGVkX3N0YXRfcnVudGltZTogeyAwIH0sIHsgY29tbSA9ICJsdHRuZy1zZXNzaW9uZCIsIHRpZCA9IDExODEsIHJ1bnRpbWUgPSAxMDE1MzEzLCB2cnVudGltZSA9IDM2OTc2NzMzMjQwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgxODUxNF0gKCswLjAwMDAwODUyMSkgaHJ0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODE5NjMxXSAoKzAuMDAwMDAxMTE3KSBocnRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyBocnRpbWVyID0gMzk5Mzg2NTQ0MCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjE4NjZdICgrMC4wMDAwMDIyMzUpIGhydGltZXJfc3RhcnQ6IHsgMCB9LCB7IGhydGltZXIgPSAzOTkzODEyMTkyLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjI5ODRdICgrMC4wMDAwMDExMTgpIGhydGltZXJfc3RhcnQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTkzODY1NDQwLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MzI3NjJdICgrMC4wMDAwMDk3NzgpIHNvZnRpcnFfZW50cnk6IHsgMSB9LCB7IHZlYyA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5ODMzODc5XSAoKzAuMDAwMDAxMTE3KSBzb2Z0aXJxX2VudHJ5OiB7IDAgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgzODA2OV0gKCswLjAwMDAwNDE5MCkgdGltZXJfY2FuY2VsOiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODM5MTg3XSAoKzAuMDAwMDAxMTE4KSB0aW1lcl9jYW5jZWw6IHsgMCB9LCB7IHRpbWVyID0gMzk5MzgxODcwOCB9CisgICAgIFsyMzoyMTo1Ni45ODk4NDE0OTJdICgrMC4wMDAwMDIzMDUpIHRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgdGltZXIgPSAzOTkzODcxOTU2LCBub3cgPSA3OTUxNTk4MCwgZnVuY3Rpb24gPSAzMjM4Mjc3NTUyIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg0MjgxOV0gKCswLjAwMDAwMTMyNykgdGltZXJfZXhwaXJlX2VudHJ5OiB7IDAgfSwgeyB0aW1lciA9IDM5OTM4MTg3MDgsIG5vdyA9IDc5NTE1OTgwLCBmdW5jdGlvbiA9IDMyMzgyNzc1NTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODU0ODMxXSAoKzAuMDAwMDEyMDEyKSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDQ5MjM3LCB2cnVudGltZSA9IDQzMzY4MzYzMzM1IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg1NTk0OV0gKCswLjAwMDAwMTExOCkgc2NoZWRfc3RhdF9ydW50aW1lOiB7IDAgfSwgeyBjb21tID0gImx0dG5nLXNlc3Npb25kIiwgdGlkID0gMTE4MSwgcnVudGltZSA9IDQ1MTIxLCB2cnVudGltZSA9IDM2OTc2Nzc4MzYxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2MTI1N10gKCswLjAwMDAwNTMwOCkgc2NoZWRfc3RhdF9zbGVlcDogeyAxIH0sIHsgY29tbSA9ICJrd29ya2VyLzE6MSIsIHRpZCA9IDIxLCBkZWxheSA9IDk0NTEzMTggfQorICAgICBbMjM6MjE6NTYuOTg5ODYyMzc0XSAoKzAuMDAwMDAxMTE3KSBzY2hlZF9zdGF0X3NsZWVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgZGVsYXkgPSA5OTU4ODIwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2ODI0MV0gKCswLjAwMDAwNTg2Nykgc2NoZWRfd2FrZXVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgcHJpbyA9IDEyMCwgc3VjY2VzcyA9IDEsIHRhcmdldF9jcHUgPSAwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2OTM1OF0gKCswLjAwMDAwMTExNykgc2NoZWRfd2FrZXVwOiB7IDEgfSwgeyBjb21tID0gImt3b3JrZXIvMToxIiwgdGlkID0gMjEsIHByaW8gPSAxMjAsIHN1Y2Nlc3MgPSAxLCB0YXJnZXRfY3B1ID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4Nzc0NjBdICgrMC4wMDAwMDgxMDIpIHRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODc4NTc3XSAoKzAuMDAwMDAxMTE3KSB0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgdGltZXIgPSAzOTkzODE4NzA4IH0KKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgc2FmZWx5IGRlc3Ryb3kgdGhlIHRyYWNlIHNlc3Npb24gKG5vdGUgdGhhdAorICAgICAgICAgICAgICAgIHRoaXMgZG9lc24ndCBkZWxldGUgdGhlIHRyYWNlIC0gaXQncyBzdGlsbCB0aGVyZQorICAgICAgICAgICAgICAgIGluIH4vbHR0bmctdHJhY2VzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZGVzdHJveQorICAgICBTZXNzaW9uIGF1dG8tMjAxMjEwMTUtMjMyMTIwIGRlc3Ryb3llZCBhdCAvaG9tZS9yb290CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgdHJhY2UgaXMgc2F2ZWQgaW4gYSBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBuYW1lIGFzIHJldHVybmVkIGJ5ICdsdHRuZyBjcmVhdGUnLCB1bmRlciB0aGUgfi9sdHRuZy10cmFjZXMKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgKG5vdGUgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGlzIGJ5IHN1cHBseWluZyB5b3VyCisgICAgICAgICAgICAgICAgb3duIG5hbWUgdG8gJ2x0dG5nIGNyZWF0ZScpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBscyAtYWwgfi9sdHRuZy10cmFjZXMKKyAgICAgZHJ3eHJ3eC0tLSAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMTUgMjM6MjEgLgorICAgICBkcnd4ci14ci14ICAgIDUgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzo1NyAuLgorICAgICBkcnd4cnd4LS0tICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzoyMSBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdXNlcnNwYWNlLXRyYWNlLW9uLXRoZS10YXJnZXQtaW5zaWRlLWEtc2hlbGwnPgorICAgICAgICAgICAgPHRpdGxlPkNvbGxlY3RpbmcgYW5kIHZpZXdpbmcgYSB1c2Vyc3BhY2UgdHJhY2Ugb24gdGhlIHRhcmdldCAoaW5zaWRlIGEgc2hlbGwpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIExUVG5nIHVzZXJzcGFjZSB0cmFjaW5nLCB5b3UgbmVlZCB0byBoYXZlIGEgcHJvcGVybHkKKyAgICAgICAgICAgICAgICBpbnN0cnVtZW50ZWQgdXNlcnNwYWNlIHByb2dyYW0uIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIHVzZQorICAgICAgICAgICAgICAgIHRoZSAnaGVsbG8nIHRlc3QgcHJvZ3JhbSBnZW5lcmF0ZWQgYnkgdGhlIGx0dG5nLXVzdCBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICdoZWxsbycgdGVzdCBwcm9ncmFtIGlzbid0IGluc3RhbGxlZCBvbiB0aGUgcm9vdGZzIGJ5CisgICAgICAgICAgICAgICAgdGhlIGx0dG5nLXVzdCBidWlsZCwgc28gd2UgbmVlZCB0byBjb3B5IGl0IG92ZXIgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgRmlyc3QgY2QgaW50byB0aGUgYnVpbGQgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGhlbGxvCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgYnVpbGQvdG1wL3dvcmsvY29yZTJfMzItcG9reS1saW51eC9sdHRuZy11c3QvMi4wLjUtcjAvZ2l0L3Rlc3RzL2hlbGxvLy5saWJzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENvcHkgdGhhdCBvdmVyIHRvIHRoZSB0YXJnZXQgbWFjaGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2NwIGhlbGxvIHJvb3RAMTkyLjE2OC4xLjIwOgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3Ugbm93IGhhdmUgdGhlIGluc3RydW1lbnRlZCBsdHRuZyAnaGVsbG8gd29ybGQnIHRlc3QKKyAgICAgICAgICAgICAgICBwcm9ncmFtIG9uIHRoZSB0YXJnZXQsIHJlYWR5IHRvIHRlc3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzIGNyZWF0ZWQuCisgICAgIFRyYWNlcyB3aWxsIGJlIHdyaXR0ZW4gaW4gL2hvbWUvcm9vdC9sdHRuZy10cmFjZXMvYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBldmVudHMgeW91IHdhbnQgdG8gdHJhY2UgKGluIHRoaXMgY2FzZSBhbGwKKyAgICAgICAgICAgICAgICB1c2Vyc3BhY2UgZXZlbnRzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZW5hYmxlLWV2ZW50IC0tdXNlcnNwYWNlIC0tYWxsCisgICAgIEFsbCBVU1QgZXZlbnRzIGFyZSBlbmFibGVkIGluIGNoYW5uZWwgY2hhbm5lbDAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU3RhcnQgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdGFydAorICAgICBUcmFjaW5nIHN0YXJ0ZWQgZm9yIHNlc3Npb24gYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgUnVuIHRoZSBpbnN0cnVtZW50ZWQgaGVsbG8gd29ybGQgcHJvZ3JhbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgLi9oZWxsbworICAgICBIZWxsbywgV29ybGQhCisgICAgIFRyYWNpbmcuLi4gIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGVuIHN0b3AgdGhlIHRyYWNlIGFmdGVyIGF3aGlsZSBvciBhZnRlciBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHdvcmtsb2FkIHRoYXQgeW91IHdhbnQgdG8gdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0b3AKKyAgICAgVHJhY2luZyBzdG9wcGVkIGZvciBzZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHZpZXcgdGhlIHRyYWNlIGluIHRleHQgZm9ybSBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyB2aWV3CisgICAgIFswMjozMToxNC45MDYxNDY1NDRdICgrPy4/Pz8/Pz8/Pz8pIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAwLCBpbnRmaWVsZDIgPSAweDAsIGxvbmdmaWVsZCA9IDAsIG5ldGludGZpZWxkID0gMCwgbmV0aW50ZmllbGRoZXggPSAweDAsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCAgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIFswMjozMToxNC45MDYxNzAzNjBdICgrMC4wMDAwMjM4MTYpIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAxLCBpbnRmaWVsZDIgPSAweDEsIGxvbmdmaWVsZCA9IDEsIG5ldGludGZpZWxkID0gMSwgbmV0aW50ZmllbGRoZXggPSAweDEsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCBzZXFmaWVsZDIgPSAidGVzdCIsIHN0cmluZ2ZpZWxkID0gInRlc3QiLCBmbG9hdGZpZWxkID0gMjIyMiwgZG91YmxlZmllbGQgPSAyLCBib29sZmllbGQgPSAxIH0KKyAgICAgWzAyOjMxOjE0LjkwNjE4MzE0MF0gKCswLjAwMDAxMjc4MCkgaGVsbG86MTQyNCB1c3RfdGVzdHNfaGVsbG86dHB0ZXN0OiB7IGNwdV9pZCA9IDEgfSwgeyBpbnRmaWVsZCA9IDIsIGludGZpZWxkMiA9IDB4MiwgbG9uZ2ZpZWxkID0gMiwgbmV0aW50ZmllbGQgPSAyLCBuZXRpbnRmaWVsZGhleCA9IDB4MiwgYXJyZmllbGQxID0gWyBbMF0gPSAxLCBbMV0gPSAyLCBbMl0gPSAzIF0sIGFycmZpZWxkMiA9ICJ0ZXN0IiwgX3NlcWZpZWxkMV9sZW5ndGggPSA0LCBzZXFmaWVsZDEgPSBbIFswXSA9IDExNiwgWzFdID0gMTAxLCBbMl0gPSAxMTUsIFszXSA9IDExNiBdLCBfc2VxZmllbGQyX2xlbmd0aCA9IDQsIHNlcWZpZWxkMiA9ICJ0ZXN0Iiwgc3RyaW5nZmllbGQgPSAidGVzdCIsIGZsb2F0ZmllbGQgPSAyMjIyLCBkb3VibGVmaWVsZCA9IDIsIGJvb2xmaWVsZCA9IDEgfQorICAgICBbMDI6MzE6MTQuOTA2MTk0Mzg1XSAoKzAuMDAwMDExMjQ1KSBoZWxsbzoxNDI0IHVzdF90ZXN0c19oZWxsbzp0cHRlc3Q6IHsgY3B1X2lkID0gMSB9LCB7IGludGZpZWxkID0gMywgaW50ZmllbGQyID0gMHgzLCBsb25nZmllbGQgPSAzLCBuZXRpbnRmaWVsZCA9IDMsIG5ldGludGZpZWxkaGV4ID0gMHgzLCBhcnJmaWVsZDEgPSBbIFswXSA9IDEsIFsxXSA9IDIsIFsyXSA9IDMgXSwgYXJyZmllbGQyID0gInRlc3QiLCBfc2VxZmllbGQxX2xlbmd0aCA9IDQsIHNlcWZpZWxkMSA9IFsgWzBdID0gMTE2LCBbMV0gPSAxMDEsIFsyXSA9IDExNSwgWzNdID0gMTE2IF0sIF9zZXFmaWVsZDJfbGVuZ3RoID0gNCwgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIC4KKyAgICAgLgorICAgICAuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHNhZmVseSBkZXN0cm95IHRoZSB0cmFjZSBzZXNzaW9uIChub3RlIHRoYXQKKyAgICAgICAgICAgICAgICB0aGlzIGRvZXNuJ3QgZGVsZXRlIHRoZSB0cmFjZSAtIGl0J3Mgc3RpbGwKKyAgICAgICAgICAgICAgICB0aGVyZSBpbiB+L2x0dG5nLXRyYWNlcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGRlc3Ryb3kKKyAgICAgU2Vzc2lvbiBhdXRvLTIwMTkwMzAzLTAyMTk0MyBkZXN0cm95ZWQgYXQgL2hvbWUvcm9vdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtYW51YWxseS1jb3B5aW5nLWEtdHJhY2UtdG8tdGhlLWhvc3QtYW5kLXZpZXdpbmctaXQtaW4tZWNsaXBzZSc+CisgICAgICAgICAgICA8dGl0bGU+TWFudWFsbHkgY29weWluZyBhIHRyYWNlIHRvIHRoZSBob3N0IGFuZCB2aWV3aW5nIGl0IGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYWxyZWFkeSBoYXZlIGFuIExUVG5nIHRyYWNlIG9uIGEgcmVtb3RlIHRhcmdldCBhbmQKKyAgICAgICAgICAgICAgICB3b3VsZCBsaWtlIHRvIHZpZXcgaXQgaW4gRWNsaXBzZSBvbiB0aGUgaG9zdCwgeW91IGNhbiBlYXNpbHkKKyAgICAgICAgICAgICAgICBjb3B5IGl0IGZyb20gdGhlIHRhcmdldCB0byB0aGUgaG9zdCBhbmQgaW1wb3J0IGl0IGludG8KKyAgICAgICAgICAgICAgICBFY2xpcHNlIHRvIHZpZXcgaXQgdXNpbmcgdGhlIExUVG5nIEVjbGlwc2UgcGx1Zy1pbiBhbHJlYWR5CisgICAgICAgICAgICAgICAgYnVuZGxlZCBpbiB0aGUgRWNsaXBzZSAoSnVubyBTUjEgb3IgZ3JlYXRlcikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB0cmFjZSB3ZSBjcmVhdGVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBhcmNoaXZlCisgICAgICAgICAgICAgICAgaXQgYW5kIGNvcHkgaXQgdG8geW91ciBob3N0IHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fi9sdHRuZy10cmFjZXMjIHRhciB6Y3ZmIGF1dG8tMjAxMjEwMTUtMjMyMTIwLnRhci5neiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC8KKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvbWV0YWRhdGEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzAKKworICAgICAkIHNjcCByb290QDE5Mi4xNjguMS40NzpsdHRuZy10cmFjZXMvYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IC4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwJSAxNTY2S0IgICAxLjVNQi9zICAgMDA6MDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVW5hcmNoaXZlIGl0IG9uIHRoZSBob3N0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBndW56aXAgLWMgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IHwgdGFyIHh2ZiAtCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwL2tlcm5lbC9tZXRhZGF0YQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbm93IGltcG9ydCB0aGUgdHJhY2UgaW50byBFY2xpcHNlIGFuZCB2aWV3IGl0OgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpcnN0LCBzdGFydCBlY2xpcHNlIGFuZCBvcGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgcGVyc3BlY3RpdmUgYnkgc2VsZWN0aW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgT3BlbiBQZXJzcGVjdGl2ZSB8IE90aGVyLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICdMVFRuZyBLZXJuZWwnIGZyb20gdGhlIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CYWNrIGF0IHRoZSBtYWluIG1lbnUsIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBtZW51IGl0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZpbGUgfCBOZXcgfCBQcm9qZWN0Li4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAnVHJhY2luZyB8IFRyYWNpbmcgUHJvamVjdCcgd2l6YXJkIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ05leHQ+Jy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdmUgdGhlIHByb2plY3QgYSBuYW1lIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpbmlzaCcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9qZWN0IHlvdSBjcmVhdGVkLCByaWdodCBjbGljayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICdUcmFjZXMnIGl0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgJ0ltcG9ydC4uLiIgYW5kIGluIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQncyBkaXNwbGF5ZWQ6PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ccm93c2UgdGhlIGZpbGVzeXN0ZW0gYW5kIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgdGhlICdrZXJuZWwnIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB0cmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNvcGllZCBmcm9tIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4nQ2hlY2ttYXJrJyB0aGUgZGlyZWN0b3J5IGluIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0J3MgZGlzcGxheWVkIGZvciB0aGUgdHJhY2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlbG93IHRoYXQsIHNlbGVjdCAnQ29tbW9uIFRyYWNlIEZvcm1hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCBUcmFjZScgZm9yIHRoZSAnVHJhY2UgVHlwZSc8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByZXNzICdGaW5pc2gnIHRvIGNsb3NlIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmFjayBpbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUtY2xpY2sgb24gdGhlICdrZXJuZWwnIGl0ZW0gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UgeW91IGp1c3QgaW1wb3J0ZWQgdW5kZXIgJ1RyYWNlcycKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3cgc2VlIHlvdXIgdHJhY2UgZGF0YSBkaXNwbGF5ZWQgZ3JhcGhpY2FsbHkKKyAgICAgICAgICAgICAgICBpbiBzZXZlcmFsIGRpZmZlcmVudCB2aWV3cyBpbiBFY2xpcHNlOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvbHR0bmdtYWluMC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY2VzcyBleHRlbnNpdmUgaGVscCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEKKyAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBoZWxwIHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEhlbHAgfCBIZWxwIENvbnRlbnRzIHwgTFRUbmcgUGx1Zy1pbiBVc2VyIEd1aWRlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbGxlY3RpbmctYW5kLXZpZXdpbmctYS10cmFjZS1pbi1lY2xpcHNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCB2aWV3aW5nIGEgdHJhY2UgaW4gRWNsaXBzZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvbiBjb2xsZWN0aW5nIHRyYWNlcyByZW1vdGVseSBkb2Vzbid0IGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHdvcmsgYmVjYXVzZSBvZiBFY2xpcHNlICdSU0UnIGNvbm5lY3Rpdml0eSBwcm9ibGVtcy4gTWFudWFsbHkKKyAgICAgICAgICAgICAgICB0cmFjaW5nIG9uIHRoZSB0YXJnZXQsIGNvcHlpbmcgdGhlIHRyYWNlIGZpbGVzIHRvIHRoZSBob3N0LAorICAgICAgICAgICAgICAgIGFuZCB2aWV3aW5nIHRoZSB0cmFjZSBpbiBFY2xpcHNlIG9uIHRoZSBob3N0IGFzIG91dGxpbmVkIGluCisgICAgICAgICAgICAgICAgcHJldmlvdXMgc3RlcHMgZG9lcyB3b3JrIGhvd2V2ZXIgLSBwbGVhc2UgdXNlIHRoZSBtYW51YWwKKyAgICAgICAgICAgICAgICBzdGVwcyBvdXRsaW5lZCBhYm92ZSB0byB2aWV3IHRyYWNlcyBpbiBFY2xpcHNlLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byB0cmFjZSBhIHJlbW90ZSB0YXJnZXQsIHlvdSBhbHNvIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgYSAndHJhY2luZycgZ3JvdXAgb24gdGhlIHRhcmdldCBhbmQgY29ubmVjdCBhcyBhIHVzZXIKKyAgICAgICAgICAgICAgICB3aG8ncyBwYXJ0IG9mIHRoYXQgZ3JvdXAgZS5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBhZGR1c2VyIHRvbXoKKyAgICAgIyBncm91cGFkZCAtciB0cmFjaW5nCisgICAgICMgdXNlcm1vZCAtYSAtRyB0cmFjaW5nIHRvbXoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmlyc3QsIHN0YXJ0IGVjbGlwc2UgYW5kIG9wZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAnTFRUbmcgS2VybmVsJyBwZXJzcGVjdGl2ZSBieSBzZWxlY3RpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdpbmRvdyB8IE9wZW4gUGVyc3BlY3RpdmUgfCBPdGhlci4uLgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgZnJvbSB0aGUgbGlzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJhY2sgYXQgdGhlIG1haW4gbWVudSwgc2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRmlsZSB8IE5ldyB8IFByb2plY3QuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICdUcmFjaW5nIHwgVHJhY2luZyBQcm9qZWN0JyB3aXphcmQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzcyAnTmV4dD4nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZSB0aGUgcHJvamVjdCBhIG5hbWUgYW5kIHByZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAnRmluaXNoJy4gVGhhdCBzaG91bGQgcmVzdWx0IGluIGFuIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2plY3QnIHN1YndpbmRvdy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSAnQ29udHJvbCcgc3Vid2luZG93IGp1c3QgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBwcmVzcyAnTmV3IENvbm5lY3Rpb24nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGEgbmV3IGNvbm5lY3Rpb24sIGdpdmluZyBpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBxdWFsaWZpZWQgdXNlciAoYSBtZW1iZXIgb2YgdGhlICd0cmFjaW5nJyBncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIHJvb3QgYWNjb3VudCBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhcHByb3ByaWF0ZSBhbnN3ZXJzIHRvIHdoYXRldmVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlzIGFza2VkIGZvciBlLmcuICdzZWN1cmUgc3RvcmFnZSBwYXNzd29yZCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gJ1JTRSBFcnJvcicgaXQgbWF5IGJlIGR1ZSB0byBwcm94aWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGdldCBhcm91bmQgdGhlIHByb2JsZW0gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHRoZSBmb2xsb3dpbmcgc2V0dGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgUHJlZmVyZW5jZXMgfCBOZXR3b3JrIENvbm5lY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2ggJ0FjdGl2ZSBQcm92aWRlcicgdG8gJ0RpcmVjdCcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbGx0bmctZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgcHJpbWFyeSBMVFRuZyBEb2N1bWVudGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9sdHRuZy5vcmcvZG9jcy8nPkxUVG5nIERvY3VtZW50YXRpb248L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFRoZSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgc2l0ZSBpcyBhcHByb3ByaWF0ZSBmb3IgaW50ZXJtZWRpYXRlIHRvCisgICAgICAgICAgICBhZHZhbmNlZCBzb2Z0d2FyZSBkZXZlbG9wZXJzIHdobyBhcmUgd29ya2luZyBpbiBhIExpbnV4IGVudmlyb25tZW50CisgICAgICAgICAgICBhbmQgYXJlIGludGVyZXN0ZWQgaW4gZWZmaWNpZW50IHNvZnR3YXJlIHRyYWNpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBMVFRuZyBpbiBnZW5lcmFsLCB2aXNpdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sdHRuZy5vcmcvbHR0bmcyLjAnPkxUVG5nIFByb2plY3Q8L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhICJHZXR0aW5nIFN0YXJ0ZWQiIGxpbmsgb24gdGhpcyBzaXRlIHRoYXQgdGFrZXMKKyAgICAgICAgICAgIHlvdSB0byBhbiBMVFRuZyBRdWljayBTdGFydC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBhY2Nlc3MgZXh0ZW5zaXZlIGhlbHAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEgdGhlCisgICAgICAgICAgICBFY2xpcHNlIGhlbHAgc3lzdGVtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIZWxwIHwgSGVscCBDb250ZW50cyB8IExUVG5nIFBsdWctaW4gVXNlciBHdWlkZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncHJvZmlsZS1tYW51YWwtYmxrdHJhY2UnPgorICAgIDx0aXRsZT5ibGt0cmFjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgYmxrdHJhY2UgaXMgYSB0b29sIGZvciB0cmFjaW5nIGFuZCByZXBvcnRpbmcgbG93LWxldmVsIGRpc2sgSS9PLgorICAgICAgICBibGt0cmFjZSBwcm92aWRlcyB0aGUgdHJhY2luZyBoYWxmIG9mIHRoZSBlcXVhdGlvbjsgaXRzIG91dHB1dCBjYW4KKyAgICAgICAgYmUgcGlwZWQgaW50byB0aGUgYmxrcGFyc2UgcHJvZ3JhbSwgd2hpY2ggcmVuZGVycyB0aGUgZGF0YSBpbiBhCisgICAgICAgIGh1bWFuLXJlYWRhYmxlIGZvcm0gYW5kIGRvZXMgc29tZSBiYXNpYyBhbmFseXNpczoKKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgYmxrdHJhY2UgaXMgYW4gYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlIGVudGlyZSBibGt0cmFjZSBhbmQgYmxrcGFyc2UgcGlwZWxpbmUgb24gdGhlCisgICAgICAgICAgICB0YXJnZXQsIG9yIHlvdSBjYW4gcnVuIGJsa3RyYWNlIGluICdsaXN0ZW4nIG1vZGUgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgYW5kIGhhdmUgYmxrdHJhY2UgYW5kIGJsa3BhcnNlIGNvbGxlY3QgYW5kIGFuYWx5emUgdGhlIGRhdGEgb24KKyAgICAgICAgICAgIHRoZSBob3N0IChzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYmxrdHJhY2UtcmVtb3RlbHknPlVzaW5nIGJsa3RyYWNlIFJlbW90ZWx5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gYmVsb3cpLgorICAgICAgICAgICAgRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUKKyAgICAgICAgICAgIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBibGtyYWNlIG9uIHRoZSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2UtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcmVjb3JkIGEgdHJhY2UsIHNpbXBseSBydW4gdGhlICdibGt0cmFjZScgY29tbWFuZCwgZ2l2aW5nIGl0CisgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgYmxvY2sgZGV2aWNlIHlvdSB3YW50IHRvIHRyYWNlIGFjdGl2aXR5IG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJsa3RyYWNlIC9kZXYvc2RjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L21lZGlhL3NkYyMgcm0gbGludXgtMi42LjE5LjIudGFyLmJ6Mjsgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPjsgc3luYworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgUHJlc3MgQ3RybC1DIGluIHRoZSBibGt0cmFjZSBzaGVsbCB0byBzdG9wIHRoZSB0cmFjZS4gSXQgd2lsbAorICAgICAgICAgICAgZGlzcGxheSBob3cgbWFueSBldmVudHMgd2VyZSBsb2dnZWQsIGFsb25nIHdpdGggdGhlIHBlci1jcHUgZmlsZQorICAgICAgICAgICAgc2l6ZXMgKGJsa3RyYWNlIHJlY29yZHMgdHJhY2VzIGluIHBlci1jcHUga2VybmVsIGJ1ZmZlcnMgYW5kCisgICAgICAgICAgICBzaW1wbHkgZHVtcHMgdGhlbSB0byB1c2Vyc3BhY2UgZm9yIGJsa3BhcnNlIHRvIG1lcmdlIGFuZCBzb3J0CisgICAgICAgICAgICBsYXRlcikuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIF5DPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDcwODIgZXZlbnRzLCAgICAgIDMzMiBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgMTU3OCBldmVudHMsICAgICAgIDc0IEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgICA4NjYwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA0MDYgS2lCIGRhdGEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIElmIHlvdSBleGFtaW5lIHRoZSBmaWxlcyBzYXZlZCB0byBkaXNrLCB5b3Ugc2VlIG11bHRpcGxlIGZpbGVzLAorICAgICAgICAgICAgb25lIHBlciBDUFUgYW5kIHdpdGggdGhlIGRldmljZSBuYW1lIGFzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgZmlsZW5hbWU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgNiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI3IDIyOjM5IC4KKyAgICAgZHJ3eHItc3IteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMjYgMTg6MjQgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgIDMzOTkzOCBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjAKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA3NTc1MyBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHZpZXcgdGhlIHRyYWNlIGV2ZW50cywgc2ltcGx5IGludm9rZSAnYmxrcGFyc2UnIGluIHRoZQorICAgICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRyYWNlIGZpbGVzLCBnaXZpbmcgaXQgdGhlIGRldmljZSBuYW1lCisgICAgICAgICAgICB0aGF0IGZvcm1zIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlbmFtZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTIyNSAgUSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMiAgICAgMC4wMDAwMjUyMTMgIDEyMjUgIEcgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDMzMzg0ICAxMjI1ICBQICAgTiBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA0ICAgICAwLjAwMDA0MzMwMSAgMTIyNSAgSSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTcyNzAgICAgIDAgIG0gICBOIGNmcTEyMjUgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2NDgxMyAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICA1ICAgICAwLjAwMDA3NjMzNiAgMTIyNSAgVSAgIE4gW2piZDIvc2RjLThdIDEKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA4ODU1OSAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjE1MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDk3MzU5ICAgICAwICBtICAgTiBjZnExMjI1IHNldF9hY3RpdmUgd2xfcHJpbzowIHdsX3R5cGU6MQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTA0MDYzICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMTI1ODQgICAgIDAgIG0gICBOIGNmcTEyMjUgZmlmbz0gIChudWxsKQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTE4NzMwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoX2luc2VydAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTI3MzkwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoZWQgYSByZXF1ZXN0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMzM1MzYgICAgIDAgIG0gICBOIGNmcTEyMjUgYWN0aXZhdGUgcnEsIGRydj0xCisgICAgICA4LDMyICAgMSAgICAgICAgNiAgICAgMC4wMDAxMzY4ODkgIDEyMjUgIEQgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDcgICAgIDAuMDAwMzYwMzgxICAxMjI1ICBRICBXUyAzNDE3MDU2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA4ICAgICAwLjAwMDM3NzQyMiAgMTIyNSAgRyAgV1MgMzQxNzA1NiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgOSAgICAgMC4wMDAzODg4NzYgIDEyMjUgIFAgICBOIFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTAgICAgIDAuMDAwMzk3ODg2ICAxMjI1ICBRICBXUyAzNDE3MDY0ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDExICAgICAwLjAwMDQwNDgwMCAgMTIyNSAgTSAgV1MgMzQxNzA2NCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxMiAgICAgMC4wMDA0MTIzNDMgIDEyMjUgIFEgIFdTIDM0MTcwNzIgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTMgICAgIDAuMDAwNDE2NTMzICAxMjI1ICBNICBXUyAzNDE3MDcyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE0ICAgICAwLjAwMDQyMjEyMSAgMTIyNSAgUSAgV1MgMzQxNzA4MCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxNSAgICAgMC4wMDA0MjUxOTQgIDEyMjUgIE0gIFdTIDM0MTcwODAgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTYgICAgIDAuMDAwNDMxOTY4ICAxMjI1ICBRICBXUyAzNDE3MDg4ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE3ICAgICAwLjAwMDQzNTI1MSAgMTIyNSAgTSAgV1MgMzQxNzA4OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxOCAgICAgMC4wMDA0NDAyNzkgIDEyMjUgIFEgIFdTIDM0MTcwOTYgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTkgICAgIDAuMDAwNDQzOTExICAxMjI1ICBNICBXUyAzNDE3MDk2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIwICAgICAwLjAwMDQ1MDMzNiAgMTIyNSAgUSAgV1MgMzQxNzEwNCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyMSAgICAgMC4wMDA0NTQwMzggIDEyMjUgIE0gIFdTIDM0MTcxMDQgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMjIgICAgIDAuMDAwNDYyMDcwICAxMjI1ICBRICBXUyAzNDE3MTEyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIzICAgICAwLjAwMDQ2NTQyMiAgMTIyNSAgTSAgV1MgMzQxNzExMiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyNCAgICAgMC4wMDA0NzQyMjIgIDEyMjUgIEkgIFdTIDM0MTcwNTYgKyA2NCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDQ4MzAyMiAgICAgMCAgbSAgIE4gY2ZxMTIyNSBpbnNlcnRfcmVxdWVzdAorICAgICAgOCwzMiAgIDEgICAgICAgMjUgICAgIDAuMDAwNDg5NzI3ICAxMjI1ICBVICAgTiBbamJkMi9zZGMtOF0gMQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwNDk4NDU3ICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MDM3NjUgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hfaW5zZXJ0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MTI5MTQgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDUxODg1MSAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhY3RpdmF0ZSBycSwgZHJ2PTIKKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNTAwNjEzOCAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgMjAyNCAgICA1OC41MTY2MDMyNjkgICAgIDMgIEMgIFdTIDMxNTY5OTIgKyAxNiBbMF0KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNjYyNjczNiAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgICAgMCAgICA1OC41MTY2MzQ1NTggICAgIDAgIG0gICBOIGNmcTM1NTEgYXJtX2lkbGU6IDggZ3JvdXBfaWRsZTogMAorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAgNTguNTE2NjM2OTMzICAgICAwICBtICAgTiBjZnEgc2NoZWR1bGUgZGlzcGF0Y2gKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgIDU4LjUxNjk3MTYxMyAgICAgMCAgbSAgIE4gY2ZxMzU1MSBzbGljZSBleHBpcmVkIHQ9MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTgyMDg5ICAgICAwICBtICAgTiBjZnEzNTUxIHNsX3VzZWQ9MTMgZGlzcD02IGNoYXJnZT0xMyBpb3BzPTAgc2VjdD04MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTg1NTExICAgICAwICBtICAgTiBjZnEzNTUxIGRlbF9mcm9tX3JyCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICA1OC41MTY5OTA4MTkgICAgIDAgIG0gICBOIGNmcTM1NTEgcHV0X3F1ZXVlCisKKyAgICAgQ1BVMCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDMzMSwgICAyNiwyODRLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDQ4NSwgICA0MCw0ODRLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTExLCAgIDQxLDAwMEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDEzLCAgICAgIDE2MEtpQgorICAgICAgUmVhZCBkZXB0aDogICAgICAgICAgICAgMCAgICAgICAgCSBXcml0ZSBkZXB0aDogICAgICAgICAgICAgMgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICAyMyAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMAorICAgICBDUFUxIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjQ5LCAgIDE1LDgwMEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgIDQyLCAgICAxLDYwMEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICAgMTYsICAgIDEsMDg0S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgNDAsICAgICAgMjc2S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAwICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDMwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisKKyAgICAgVG90YWwgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICA1ODAsICAgNDIsMDg0S2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICA1MjcsICAgNDIsMDg0S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgIDUyNywgICA0MiwwODRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA1MywgICAgICA0MzZLaUIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTMgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDEKKworICAgICBUaHJvdWdocHV0IChSL1cpOiAwS2lCL3MgLyA3MTlLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDYsNTkyIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgSW5wdXQgZmlsZSBzZGMuYmxrdHJhY2UuMCBhZGRlZAorICAgICBJbnB1dCBmaWxlIHNkYy5ibGt0cmFjZS4xIGFkZGVkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgcmVwb3J0IHNob3dzIGVhY2ggZXZlbnQgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGJsa3RyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIGEgc3VtbWFyeSBvZiB0aGUgb3ZlcmFsbCBibG9jayBJL08gdHJhZmZpYyBkdXJpbmcKKyAgICAgICAgICAgIHRoZSBydW4uIFlvdSBjYW4gbG9vayBhdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICBtYW5wYWdlIHRvIGxlYXJuIHRoZQorICAgICAgICAgICAgbWVhbmluZyBvZiBlYWNoIGZpZWxkIGRpc3BsYXllZCBpbiB0aGUgdHJhY2UgbGlzdGluZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdibGt0cmFjZS1saXZlLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPkxpdmUgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIGJsa3RyYWNlIGFuZCBibGtwYXJzZSBhcmUgZGVzaWduZWQgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvCisgICAgICAgICAgICAgICAgYmUgYWJsZSB0byBvcGVyYXRlIHRvZ2V0aGVyIGluIGEgJ3BpcGUgbW9kZScgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgc3Rkb3V0IG9mIGJsa3RyYWNlIGNhbiBiZSBmZWQgZGlyZWN0bHkgaW50byB0aGUgc3RkaW4gb2YKKyAgICAgICAgICAgICAgICBibGtwYXJzZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrdHJhY2UgL2Rldi9zZGMgLW8gLSB8IGJsa3BhcnNlIC1pIC0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBlbmFibGVzIGxvbmctbGl2ZWQgdHJhY2luZyBzZXNzaW9ucyB0byBydW4gd2l0aG91dAorICAgICAgICAgICAgICAgIHdyaXRpbmcgYW55dGhpbmcgdG8gZGlzaywgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb29rIGZvcgorICAgICAgICAgICAgICAgIGNlcnRhaW4gY29uZGl0aW9ucyBpbiB0aGUgdHJhY2UgZGF0YSBpbiAncmVhbC10aW1lJyBieQorICAgICAgICAgICAgICAgIHZpZXdpbmcgdGhlIHRyYWNlIG91dHB1dCBhcyBpdCBzY3JvbGxzIGJ5IG9uIHRoZSBzY3JlZW4gb3IKKyAgICAgICAgICAgICAgICBieSBwYXNzaW5nIGl0IGFsb25nIHRvIHlldCBhbm90aGVyIHByb2dyYW0gaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICAgICAgICAgc3VjaCBhcyBncmVwIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGFuZCBjYXB0dXJlCisgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBvZiBpbnRlcmVzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUncyBhY3R1YWxseSBhbm90aGVyIGJsa3RyYWNlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzCisgICAgICAgICAgICAgICAgdGhlIGFib3ZlIHBpcGVsaW5lIGFzIGEgc2luZ2xlIGNvbW1hbmQsIHNvIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICBoYXZlIHRvIGJvdGhlciB0eXBpbmcgaW4gdGhlIGFib3ZlIGNvbW1hbmQgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJ0cmFjZSAvZGV2L3NkYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1ibGt0cmFjZS1yZW1vdGVseSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYmxrdHJhY2UgUmVtb3RlbHk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGJsa3RyYWNlIHRyYWNlcyBibG9jayBJL08gYW5kIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgICAgICAgICBub3JtYWxseSB3cml0ZXMgaXRzIHRyYWNlIGRhdGEgdG8gYSBibG9jayBkZXZpY2UsIGFuZAorICAgICAgICAgICAgICAgIGluIGdlbmVyYWwgYmVjYXVzZSBpdCdzIG5vdCByZWFsbHkgYSBncmVhdCBpZGVhIHRvIG1ha2UKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIGJlaW5nIHRyYWNlZCB0aGUgc2FtZSBhcyB0aGUgZGV2aWNlIHRoZSB0cmFjZXIKKyAgICAgICAgICAgICAgICB3cml0ZXMgdG8sIGJsa3RyYWNlIHByb3ZpZGVzIGEgd2F5IHRvIHRyYWNlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICBwZXJ0dXJiaW5nIHRoZSB0cmFjZWQgZGV2aWNlIGF0IGFsbCBieSBwcm92aWRpbmcgbmF0aXZlCisgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3Igc2VuZGluZyBhbGwgdHJhY2UgZGF0YSBvdmVyIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYXZlIGJsa3RyYWNlIG9wZXJhdGUgaW4gdGhpcyBtb2RlLCBzdGFydCBibGt0cmFjZSBvbgorICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIGJlaW5nIHRyYWNlZCB3aXRoIHRoZSAtbCBvcHRpb24sIGFsb25nIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBibGt0cmFjZSAtbCAvZGV2L3NkYworICAgICBzZXJ2ZXI6IHdhaXRpbmcgZm9yIGNvbm5lY3Rpb25zLi4uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uIHRoZSBob3N0IHN5c3RlbSwgdXNlIHRoZSAtaCBvcHRpb24gdG8gY29ubmVjdCB0byB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLCBhbHNvIHBhc3NpbmcgaXQgdGhlIGRldmljZSB0byB0cmFjZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrdHJhY2UgLWQgL2Rldi9zZGMgLWggMTkyLjE2OC4xLjQzCisgICAgIGJsa3RyYWNlOiBjb25uZWN0aW5nIHRvIDE5Mi4xNjguMS40MworICAgICBibGt0cmFjZTogY29ubmVjdGVkIQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBzZWUgdGhpczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNlcnZlcjogY29ubmVjdGlvbiBmcm9tIDE5Mi4xNjguMS40MworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9tZWRpYS9zZGMjIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiBpdCdzIGRvbmUsIGRvIGEgQ3RybC1DIG9uIHRoZSBob3N0IHN5c3RlbSB0bworICAgICAgICAgICAgICAgIHN0b3AgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgXkM9PT0gc2RjID09PQorICAgICAgQ1BVICAwOiAgICAgICAgICAgICAgICAgNzY5MSBldmVudHMsICAgICAgMzYxIEtpQiBkYXRhCisgICAgICBDUFUgIDE6ICAgICAgICAgICAgICAgICA0MTA5IGV2ZW50cywgICAgICAxOTMgS2lCIGRhdGEKKyAgICAgIFRvdGFsOiAgICAgICAgICAgICAgICAgMTE4MDAgZXZlbnRzIChkcm9wcGVkIDApLCAgICAgIDU1NCBLaUIgZGF0YQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBhbHNvIHNlZSBhIHRyYWNlCisgICAgICAgICAgICAgICAgc3VtbWFyeSBmb3IgdGhlIHRyYWNlIGp1c3QgZW5kZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzZXJ2ZXI6IGVuZCBvZiBydW4gZm9yIDE5Mi4xNjguMS40MzpzZGMKKyAgICAgPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDc2OTEgZXZlbnRzLCAgICAgIDM2MSBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgNDEwOSBldmVudHMsICAgICAgMTkzIEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgIDExODAwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA1NTQgS2lCIGRhdGEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGJsa3RyYWNlIGluc3RhbmNlIG9uIHRoZSBob3N0IHdpbGwgc2F2ZSB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgb3V0cHV0IGluc2lkZSBhIGhvc3RuYW1lLXRpbWVzdGFtcCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTAgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAyOCAwMjo0MCAuCisgICAgIGRyd3hyLXNyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI2IDE4OjI0IC4uCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI4IDAyOjQwIDE5Mi4xNjguMS40My0yMDEyLTEwLTI4LTAyOjQwOjU2CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIGNkIGludG8gdGhhdCBkaXJlY3RvcnkgdG8gc2VlIHRoZSBvdXRwdXQgZmlsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1sCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAzNjkxOTMgT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4wCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAxOTcyNzggT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4xCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCBydW4gYmxrcGFyc2Ugb24gdGhlIGhvc3Qgc3lzdGVtIHVzaW5nIHRoZSBkZXZpY2UgbmFtZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTI2MyAgUSAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDM2MDM4ICAgICAwICBtICAgTiBjZnExMjYzIGFsbG9jZWQKKyAgICAgIDgsMzIgICAxICAgICAgICAyICAgICAwLjAwMDAzOTM5MCAgMTI2MyAgRyAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDQ5MTY4ICAxMjYzICBJICBSTSA2MDE2ICsgOCBbbHNdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTYxNTIgICAgIDAgIG0gICBOIGNmcTEyNjMgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2MTYwMCAgICAgMCAgbSAgIE4gY2ZxMTI2MyBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA3NTQ5OCAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjMwMAorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAxNzcuMjY2Mzg1Njk2ICAgICAwICBtICAgTiBjZnExMjY3IGFybV9pZGxlOiA4IGdyb3VwX2lkbGU6IDAKKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgMTc3LjI2NjM4ODE0MCAgICAgMCAgbSAgIE4gY2ZxIHNjaGVkdWxlIGRpc3BhdGNoCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2NzkyMzkgICAgIDAgIG0gICBOIGNmcTEyNjcgc2xpY2UgZXhwaXJlZCB0PTAKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY4OTI5NyAgICAgMCAgbSAgIE4gY2ZxMTI2NyBzbF91c2VkPTkgZGlzcD02IGNoYXJnZT05IGlvcHM9MCBzZWN0PTU2CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2OTI2NDkgICAgIDAgIG0gICBOIGNmcTEyNjcgZGVsX2Zyb21fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY5NjU2MCAgICAgMCAgbSAgIE4gY2ZxMTI2NyBwdXRfcXVldWUKKworICAgICBDUFUwIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjcwLCAgIDIxLDcwOEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICA1OSwgICAgMiw2MjhLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgNDk1LCAgIDM5LDk2NEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgIDkwLCAgICAyLDc1MktpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICA1NDMsICAgNDEsNTk2S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgIDksICAgICAgMzQ0S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAyICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDIwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisgICAgIENQVTEgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgNjg4LCAgICAyLDc1MktpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICAzODEsICAgMjAsNjUyS2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgIDMxLCAgICAgIDEyNEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICAgNTksICAgIDIsMzk2S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgICAxMSwgICAgICA3NjRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICA1OTgsICAgIDIsMzkyS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA4OCwgICAgICA0NDhLaUIKKyAgICAgIFJlYWQgZGVwdGg6ICAgICAgICAgICAgIDIgICAgICAgIAkgV3JpdGUgZGVwdGg6ICAgICAgICAgICAgIDIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTIgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDAKKworICAgICBUb3RhbCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICA2ODgsICAgIDIsNzUyS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDY1MSwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgOTAsICAgIDIsNzUyS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDU1NCwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICA5MCwgICAgMiw3NTJLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTU0LCAgIDQyLDM2MEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgIDU5OCwgICAgMiwzOTJLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDk3LCAgICAgIDc5MktpQgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICA3MiAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMQorCisgICAgIFRocm91Z2hwdXQgKFIvVyk6IDE1S2lCL3MgLyAyMzhLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDksMzAxIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIHRyYWNlIGV2ZW50cyBhbmQgc3VtbWFyeSBqdXN0IGFzCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIGhhdmUgaWYgeW91J2QgcnVuIHRoZSBzYW1lIGNvbW1hbmQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmFjaW5nLWJsb2NrLWlvLXZpYS1mdHJhY2UnPgorICAgICAgICAgICAgPHRpdGxlPlRyYWNpbmcgQmxvY2sgSS9PIHZpYSAnZnRyYWNlJzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0J3MgYWxzbyBwb3NzaWJsZSB0byB0cmFjZSBibG9jayBJL08gdXNpbmcgb25seQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3RoZS10cmFjZS1ldmVudHMtc3Vic3lzdGVtJz50cmFjZSBldmVudHMgc3Vic3lzdGVtPC9saW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBjYXN1YWwgdHJhY2luZworICAgICAgICAgICAgICAgIGlmIHlvdSBkb24ndCB3YW50IHRvIGJvdGhlciBkZWFsaW5nIHdpdGggdGhlIHVzZXJzcGFjZSB0b29scy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHRyYWNpbmcgZm9yIGEgZ2l2ZW4gZGV2aWNlLCB1c2UKKyAgICAgICAgICAgICAgICAvc3lzL2Jsb2NrL3h4eC90cmFjZS9lbmFibGUsIHdoZXJlIHh4eCBpcyB0aGUgZGV2aWNlIG5hbWUuCisgICAgICAgICAgICAgICAgVGhpcyBmb3IgZXhhbXBsZSBlbmFibGVzIHRyYWNpbmcgZm9yIC9kZXYvc2RjOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiAvc3lzL2Jsb2NrL3NkYy90cmFjZS9lbmFibGUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSB5b3UndmUgc2VsZWN0ZWQgdGhlIGRldmljZShzKSB5b3Ugd2FudCB0byB0cmFjZSwKKyAgICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhlICdibGsnIHRyYWNlciB3aWxsIHR1cm4gdGhlIGJsayB0cmFjZXIgb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisKKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGJsayA+IGN1cnJlbnRfdHJhY2VyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGhlIHdvcmtsb2FkIHlvdSdyZSBpbnRlcmVzdGVkIGluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgL21lZGlhL3NkYy90ZXN0ZmlsZS50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kIGxvb2sgYXQgdGhlIG91dHB1dCAobm90ZSBoZXJlIHRoYXQgd2UncmUgdXNpbmcKKyAgICAgICAgICAgICAgICAndHJhY2VfcGlwZScgaW5zdGVhZCBvZiB0cmFjZSB0byBjYXB0dXJlIHRoaXMgdHJhY2UgLQorICAgICAgICAgICAgICAgIHRoaXMgYWxsb3dzIHVzIHRvIHdhaXQgYXJvdW5kIG9uIHRoZSBwaXBlIGZvciBkYXRhIHRvCisgICAgICAgICAgICAgICAgYXBwZWFyKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IHRyYWNlX3BpcGUKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2MzYxOiAgIDgsMzIgICBRICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgYWxsb2NlZAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTU6ICAgOCwzMiAgIEcgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQyNDogICA4LDMyICAgUCAgIE4gW2NhdF0KKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjIgIDMwMjMuMjc2NDMyOiAgIDgsMzIgICBJICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0Mzk6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgaW5zZXJ0X3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDQ1OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFkZF90b19ycgorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY0NTQ6ICAgOCwzMiAgIFUgICBOIFtjYXRdIDEKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDY0OiAgIDgsMzIgICBtICAgTiBjZnEgd29ya2xvYWQgc2xpY2U6MTUwCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQ3MTogICA4LDMyICAgbSAgIE4gY2ZxMzU4NyBzZXRfYWN0aXZlIHdsX3ByaW86MCB3bF90eXBlOjIKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDc4OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGZpZm89ICAobnVsbCkKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDgzOiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGRpc3BhdGNoX2luc2VydAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0OTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDk3OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFjdGl2YXRlIHJxLCBkcnY9MQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY1MDA6ICAgOCwzMiAgIEQgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGlzIHR1cm5zIG9mZiB0cmFjaW5nIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgZWNobyAwID4gL3N5cy9ibG9jay9zZGMvdHJhY2UvZW5hYmxlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jsa3RyYWNlLWRvY3VtZW50YXRpb24nPgorICAgICAgICA8dGl0bGU+RG9jdW1lbnRhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmxpbmUgdmVyc2lvbnMgb2YgdGhlIG1hbiBwYWdlcyBmb3IgdGhlIGNvbW1hbmRzIGRpc2N1c3NlZAorICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvYmxrdHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2Jsa3RyYWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5odHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vOC9idHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2J0cmFjZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBtYW5wYWdlcywgYWxvbmcgd2l0aCBtYW5wYWdlcyBmb3IgdGhlIG90aGVyCisgICAgICAgICAgICBibGt0cmFjZSB1dGlsaXRpZXMgKGJ0dCwgYmxraW9tb24sIGV0YykgY2FuIGJlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgL2RvYyBkaXJlY3Rvcnkgb2YgdGhlIGJsa3RyYWNlIHRvb2xzIGdpdCByZXBvOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODYyMGRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3Byb2ZpbGUtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisJCSAgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsCisJCTwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlRvbTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aYW51c3NpPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+dG9tLnphbnVzc2lAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPgorICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWFyY2gueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC11c2FnZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL1RPRE8gYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMGRiOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPCkBAIC0wLDAgKzEsMTEgQEAKK0hhbmRib29rIFRvZG8gTGlzdDoKKworICAqIERvY3VtZW50IGFkZGluZyBhIG5ldyBJTUFHRV9GRUFUVVJFIHRvIHRoZSBjdXN0b21pc2luZyBpbWFnZXMgc2VjdGlvbiAKKyAgKiBBZGQgaW5zdHJ1Y3Rpb25zIGFib3V0IHVzaW5nIHphdXJ1cy9vcGVubW9rbyBlbXVsYXRpb24KKyAgKiBBZGQgY29tcG9uZW50IG92ZXJ2aWV3L2Jsb2NrIGRpYWdyYW1zCisgICogU29mdHdhcmUgRGVldmVsb3BtZW50IGludHJvIHNob3VsZCBtZW50aW9uIGl0cyBzb2Z0d2FyZSBkZXZlbG9wbWVudCBmb3IgCisgICAgaW50ZW5kZWQgdGFyZ2V0IGFuZCBjb3VsZCBiZSBhIGRpZmZlcmVudCBhcmNoIGV0YyBhbmQgdGh1cyBzcGVjaWFsIGNhc2UuIAorICAqIEV4cGFuZCBpbnNhbmUuYmJjbGFzcyBkb2N1bWVudGF0aW9uIHRvIGNvdmVyIHRlc3RzCisgICogRG9jdW1lbnQgcmVtYWluaW5nIGNsYXNzZXMgKHNlZSBsaXN0IGluIHJlZi1jbGFzc2VzKQorICAqIERvY3VtZW50IGZvcm1mYWN0b3IKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjY3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwKQEAgLTAsMCArMSwxMzMxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nY2xvc2VyLWxvb2snPgorPHRpdGxlPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciB0YWtlcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHJlcHJlc2VudHMgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IGF0IGEKKyAgICAgICAgaGlnaCBsZXZlbC4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGNoYXB0ZXIgZXhwYW5kcyBvbiB0aGUgZnVuZGFtZW50YWwgaW5wdXQsIG91dHB1dCwKKyAgICAgICAgcHJvY2VzcywgYW5kCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+KSBibG9ja3MKKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4aW4iIGRlcHRoPSI0LjI1aW4iIC8+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBnZW5lcmFsaXplZCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGNvbnNpc3RzIG9mCisgICAgICAgIHNldmVyYWwgZnVuY3Rpb25hbCBhcmVhczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlciBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTWV0YWRhdGEgeW91IGNhbiB1c2UgdG8gY29udHJvbCB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGEgTGF5ZXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVmFyaW91cyBsYXllcnMgdGhhdCBwcm92aWRlIHNvZnR3YXJlLCBtYWNoaW5lLCBhbmQKKyAgICAgICAgICAgICAgICBkaXN0cm8gTWV0YWRhdGEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFVwc3RyZWFtIHJlbGVhc2VzLCBsb2NhbCBwcm9qZWN0cywgYW5kIFNDTXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb2Nlc3NlcyB1bmRlciB0aGUgY29udHJvbCBvZgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoaXMgYmxvY2sgZXhwYW5kcyBvbiBob3cgQml0QmFrZSBmZXRjaGVzIHNvdXJjZSwgYXBwbGllcworICAgICAgICAgICAgICAgIHBhdGNoZXMsIGNvbXBsZXRlcyBjb21waWxhdGlvbiwgYW5hbHl6ZXMgb3V0cHV0IGZvciBwYWNrYWdlCisgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiwgY3JlYXRlcyBhbmQgdGVzdHMgcGFja2FnZXMsIGdlbmVyYXRlcyBpbWFnZXMsIGFuZAorICAgICAgICAgICAgICAgIGdlbmVyYXRlcyBjcm9zcy1kZXZlbG9wbWVudCB0b29scy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZSBGZWVkczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIGNvbnRhaW5pbmcgb3V0cHV0IHBhY2thZ2VzIChSUE0sIERFQiBvciBJUEspLAorICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIGFuIGltYWdlIG9yCisgICAgICAgICAgICAgICAgU0RLLCBwcm9kdWNlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZXNlIGZlZWRzIGNhbiBhbHNvIGJlIGNvcGllZCBhbmQgc2hhcmVkIHVzaW5nIGEgd2ViIHNlcnZlciBvcgorICAgICAgICAgICAgICAgIG90aGVyIG1lYW5zIHRvIGZhY2lsaXRhdGUgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgaW1hZ2VzIG9uIGRldmljZXMgYXQgcnVudGltZSBpZiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcworICAgICAgICAgICAgICAgIGVuYWJsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEltYWdlcyBwcm9kdWNlZCBieSB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMgdGhhdCBhcmUgcHJvZHVjZWQgYWxvbmcgd2l0aCBhbiBpbWFnZQorICAgICAgICAgICAgICAgIG9yIHNlcGFyYXRlbHkgd2l0aCBCaXRCYWtlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlci1jb25maWd1cmF0aW9uIj4KKyAgICAgICAgPHRpdGxlPlVzZXIgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2VyIGNvbmZpZ3VyYXRpb24gaGVscHMgZGVmaW5lIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRocm91Z2ggdXNlciBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHRlbGwgQml0QmFrZSB0aGUKKyAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgdGhlIGltYWdlLAorICAgICAgICAgICAgd2hlcmUgdG8gc3RvcmUgZG93bmxvYWRlZCBzb3VyY2UsIGFuZCBvdGhlciBidWlsZCBwcm9wZXJ0aWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyBhbiBleHBhbmRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICJVc2VyIENvbmZpZ3VyYXRpb24iIGJveCBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjMuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBvcmRlciB0byBjb21wbGV0ZQorICAgICAgICAgICAgYSBidWlsZC4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSA8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBUaGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBvbmVzIHJlc2lkZSBhcyBleGFtcGxlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIHRoaXMgc2VjdGlvbiByZWZlcnMgdG8gdGhlIFNvdXJjZSBEaXJlY3RvcnkgYXMKKyAgICAgICAgICAgIHRoZSAiUG9reSBEaXJlY3RvcnkuIgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvciB5b3UKKyAgICAgICAgICAgIGRvd25sb2FkIGFuZCB1bnBhY2sgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHlvdSBjYW4gc2V0IHVwIHRoZQorICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSB0byBiZSBuYW1lZCBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgIEZvciB0aGlzIGRpc2N1c3Npb24sIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB1c2VzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBuYW1lIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgUG9reSByZXBvc2l0b3J5IGlzIHByaW1hcmlseSBhbiBhZ2dyZWdhdGlvbiBvZiBleGlzdGluZworICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSBjYW5vbmljYWwgdXBzdHJlYW0gc291cmNlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllciBpbnNpZGUgUG9reSBjb250YWlucworICAgICAgICAgICAgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0IGhhcyBleGFtcGxlCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgVGhlc2UgZXhhbXBsZSBmaWxlcyBhcmUgdXNlZCBhcyBhIGJhc2lzIGZvciBjcmVhdGluZyBhY3R1YWwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hlbiB5b3Ugc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU291cmNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCBjcmVhdGVzIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSBCdWlsZCBEaXJlY3RvcnkgZm9yIGFsbCBpdHMgd29yayBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgVGhlIEJ1aWxkIERpcmVjdG9yeSBoYXMgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0CisgICAgICAgICAgICBjb250YWlucyBkZWZhdWx0IHZlcnNpb25zIG9mIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIFRoZXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgY3JlYXRlZCBvbmx5IGlmIHZlcnNpb25zCisgICAgICAgICAgICBkbyBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGF0IHRoZSB0aW1lIHlvdQorICAgICAgICAgICAgc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIFBva3kgcmVwb3NpdG9yeSBpcyBmdW5kYW1lbnRhbGx5IGFuIGFnZ3JlZ2F0aW9uIG9mCisgICAgICAgICAgICBleGlzdGluZyByZXBvc2l0b3JpZXMsIHNvbWUgdXNlcnMgbWlnaHQgYmUgZmFtaWxpYXIgd2l0aCBydW5uaW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgICAgIG9mIHNlcGFyYXRlIE9wZW5FbWJlZGRlZC1Db3JlIGFuZCBCaXRCYWtlIHJlcG9zaXRvcmllcyByYXRoZXIgdGhhbiBhCisgICAgICAgICAgICBzaW5nbGUgUG9reSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVGhpcyBkaXNjdXNzaW9uIGFzc3VtZXMgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCBmcm9tIHdpdGhpbiBhIGNsb25lZAorICAgICAgICAgICAgb3IgdW5wYWNrZWQgdmVyc2lvbiBvZiBQb2t5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNjcmlwdCBpcyBzb3VyY2VkLCBkaWZmZXJlbnQgc3ViLXNjcmlwdHMKKyAgICAgICAgICAgIGFyZSBjYWxsZWQgdG8gc2V0IHVwIHRoZSBCdWlsZCBEaXJlY3RvcnkgKFlvY3RvIG9yIE9wZW5FbWJlZGRlZCkuCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gaW5zaWRlIHRoZQorICAgICAgICAgICAgcG9reSBkaXJlY3Rvcnkgc2V0cyB1cCB0aGUgQnVpbGQgRGlyZWN0b3J5IGFuZCBzZWVkcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAoaWYgbmVjZXNzYXJ5KSB3aXRoIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXBwcm9wcmlhdGUgZm9yIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIHVzZXMgdGhlIDxmaWxlbmFtZT4kVEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gbG9jYXRlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHByb3ZpZGVzIG1hbnkKKyAgICAgICAgICAgIGJhc2ljIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBhIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgYSBmZXcuCisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgaW4gYSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhcmFsbGVsaXNtIE9wdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhcmdldCBNYWNoaW5lIFNlbGVjdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlZCBTdGF0ZSBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgT3V0cHV0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb25zIHNldCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYXV0by5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0ZWxscyBCaXRCYWtlIHdoYXQKKyAgICAgICAgICAgIGxheWVycyB5b3Ugd2FudCBjb25zaWRlcmVkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgbGF5ZXJzIGxpc3RlZCBpbiB0aGlzIGZpbGUgaW5jbHVkZSBsYXllcnMKKyAgICAgICAgICAgIG1pbmltYWxseSBuZWVkZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtdXN0IG1hbnVhbGx5IGFkZCBhbnkgY3VzdG9tIGxheWVycyB5b3UgaGF2ZSBjcmVhdGVkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2VuYWJsaW5nLXlvdXItbGF5ZXInPkVuYWJsaW5nIFlvdXIgTGF5ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZmlsZXMgPGZpbGVuYW1lPnNpdGUuY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG8uY29uZjwvZmlsZW5hbWU+IGFyZSBub3QgY3JlYXRlZCBieSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHlvdSBtdXN0IGNyZWF0ZSB0aGVtCisgICAgICAgICAgICB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2l0ZS5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBjb25maWd1cmUgbXVsdGlwbGUgYnVpbGQgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgc2V2ZXJhbCBidWlsZCBlbnZpcm9ubWVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hhcmVkIHNvbWUgY29tbW9uIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGVzZSBkZWZhdWx0IGJ1aWxkIHByb3BlcnRpZXMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgaXMgcGVyaGFwcyB0aGUgcGFja2FnaW5nIGZvcm1hdCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uZSB1c2VmdWwgc2NlbmFyaW8gZm9yIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIHRvIGV4dGVuZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgcGF0aCB0byBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGVuLCB3aGVuIEJpdEJha2UgbG9va3MgZm9yIE1ldGFkYXRhIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiwgaXQgZmluZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIGFwcGxpZXMgeW91cgorICAgICAgICAgICAgICAgICAgICBjb21tb24gY29uZmlndXJhdGlvbnMgZm91bmQgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zIGluIGEgcGFydGljdWxhciBidWlsZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgIGFsdGVyIHRoZSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGF0IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSdzIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgbm90IGhhbmQtY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB0aGUgZmlsZSBpcyB1c3VhbGx5IGNyZWF0ZWQgYW5kIHdyaXR0ZW4gdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgYW4gYXV0b2J1aWxkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXR0aW5ncyBwdXQgaW50byB0aGUgZmlsZSBhcmUgdHlwaWNhbGx5IHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBmaW5kIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGVkaXQgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZnVydGhlciBkZWZpbmUKKyAgICAgICAgICAgIGFueSBwYXJ0aWN1bGFyIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSAiVXNlciBDb25maWd1cmF0aW9uIEVkaXRzIgorICAgICAgICAgICAgYm94IGluIHRoZSBmaWd1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGxhdW5jaCB5b3VyIGJ1aWxkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBjb21tYW5kLCBCaXRCYWtlCisgICAgICAgICAgICBzb3J0cyBvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHVsdGltYXRlbHkgZGVmaW5lIHlvdXIgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Im1ldGFkYXRhLW1hY2hpbmUtY29uZmlndXJhdGlvbi1hbmQtcG9saWN5LWNvbmZpZ3VyYXRpb24iPgorICAgICAgICA8dGl0bGU+TWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzZWN0aW9uIGRlc2NyaWJlZCB0aGUgdXNlciBjb25maWd1cmF0aW9ucyB0aGF0CisgICAgICAgICAgICBkZWZpbmUgQml0QmFrZSdzIGdsb2JhbCBiZWhhdmlvci4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiB0YWtlcyBhIGNsb3NlciBsb29rIGF0IHRoZSBsYXllcnMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgdXNlcyB0byBmdXJ0aGVyIGNvbnRyb2wgdGhlIGJ1aWxkLgorICAgICAgICAgICAgVGhlc2UgbGF5ZXJzIHByb3ZpZGUgTWV0YWRhdGEgZm9yIHRoZSBzb2Z0d2FyZSwgbWFjaGluZSwgYW5kCisgICAgICAgICAgICBwb2xpY3kuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIHRocmVlIHR5cGVzIG9mIGxheWVyIGlucHV0IGV4aXN0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvbGljeSBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGlvbiBMYXllcnMgcHJvdmlkZSB0b3AtbGV2ZWwgb3IgZ2VuZXJhbAorICAgICAgICAgICAgICAgICAgICBwb2xpY2llcyBmb3IgdGhlIGltYWdlIG9yIFNESyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgbGF5ZXIgd291bGQgZGljdGF0ZSB3aGV0aGVyIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXMgUlBNIG9yIElQSyBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hY2hpbmUgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgbGF5ZXJzIHByb3ZpZGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGluZm9ybWF0aW9uIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgbGF5ZXJzIGNvbnRhaW4gdXNlci1zdXBwbGllZCByZWNpcGUgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMsIGFuZCBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGFuIGV4cGFuZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgICAgICAgICAgTWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uIGlucHV0CisgICAgICAgICAgICAobGF5ZXJzKSBib3hlcyBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2xheWVyLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjhpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhbGwgbGF5ZXJzIGhhdmUgYSBzaW1pbGFyIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIFRoZXkgYWxsIGNvbnRhaW4gYSBsaWNlbnNpbmcgZmlsZQorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPikgaWYgdGhlIGxheWVyIGlzIHRvIGJlCisgICAgICAgICAgICBkaXN0cmlidXRlZCwgYSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhcyBnb29kIHByYWN0aWNlCisgICAgICAgICAgICBhbmQgZXNwZWNpYWxseSBpZiB0aGUgbGF5ZXIgaXMgdG8gYmUgZGlzdHJpYnV0ZWQsIGEKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBhbmQgcmVjaXBlIGRpcmVjdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgbWFueSBsYXllcnMgdGhhdCBjYW4gYmUgdXNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIGEgd2ViLWludGVyZmFjZSBsaXN0aW5nIG9mIHRoZW0gb24gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvIj5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgIHBhZ2UuCisgICAgICAgICAgICBUaGUgbGF5ZXJzIGFyZSBzaG93biBhdCB0aGUgYm90dG9tIGNhdGVnb3JpemVkIHVuZGVyCisgICAgICAgICAgICAiWW9jdG8gTWV0YWRhdGEgTGF5ZXJzLiIKKyAgICAgICAgICAgIFRoZXNlIGxheWVycyBhcmUgZnVuZGFtZW50YWxseSBhIHN1YnNldCBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVycy8iPk9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleDwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggbGlzdHMgYWxsIGxheWVycyBwcm92aWRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIExheWVycyBleGlzdCBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleC4KKyAgICAgICAgICAgICAgICBUaGVzZSBsYXllcnMgYXJlIGVpdGhlciBkZXByZWNhdGVkIG9yIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICB3aGljaCBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24sIHRvIGZpbmQgd2hhdCBsYXllcnMgaXQKKyAgICAgICAgICAgIHNob3VsZCBiZSB1c2luZyBhcyBwYXJ0IG9mIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImRpc3Ryby1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+RGlzdHJvIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBsYXllciBwcm92aWRlcyBwb2xpY3kgY29uZmlndXJhdGlvbnMgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBpc29sYXRlIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgaW50byB0aGVpciBvd24gbGF5ZXIuCisgICAgICAgICAgICAgICAgU2V0dGluZ3MgeW91IHByb3ZpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiBvdmVycmlkZQorICAgICAgICAgICAgICAgIHNpbWlsYXIKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyB0aGF0IEJpdEJha2UgZmluZHMgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByb3ZpZGVzIHNvbWUgZXhwbGFuYXRpb24gYW5kIHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICBmb3Igd2hhdCB5b3UgdHlwaWNhbGx5IGZpbmQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsYXNzZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgaG9sZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGluIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdXIgcmVjaXBlcyBpbmhlcml0IGEgY2xhc3MsIHRoZXkgdGFrZSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzIGFuZCBmdW5jdGlvbnMgZm9yIHRoYXQgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBjbGFzcyBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb25mOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgaG9sZHMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciAoPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGRpc3RyaWJ1dGlvbi13aWRlIGluY2x1ZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNpcGVzLSo6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcyB0aGF0IGFmZmVjdCBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY291bGQgaW5jbHVkZSByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBkaXN0cmlidXRpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGN1c3RvbSBpbWFnZSByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+QlNQIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJTUCBMYXllciBwcm92aWRlcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIEV2ZXJ5dGhpbmcgaW4gdGhpcyBsYXllciBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBmb3Igd2hpY2gKKyAgICAgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZSBvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgIEEgY29tbW9uIHN0cnVjdHVyZSBvciBmb3JtIGlzIGRlZmluZWQgZm9yIEJTUCBsYXllcnMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IHRoaXMgc3RydWN0dXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgYSBCU1AgbGF5ZXIgdG8gYmUgY29uc2lkZXJlZCBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCwgaXQgbXVzdCBtZWV0IHNvbWUgc3RydWN0dXJhbCByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIExheWVyJ3MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgY29udGFpbnMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+KSBhbmQsCisgICAgICAgICAgICAgICAgb2YgY291cnNlLCB0aGUgbGF5ZXIgKDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhlIGxheWVyIGlzIGRlZGljYXRlZCB0byBzcGVjaWZpYyByZWNpcGVzCisgICAgICAgICAgICAgICAgYnkgZnVuY3Rpb246IDxmaWxlbmFtZT5yZWNpcGVzLWJzcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1ncmFwaGljczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBNZXRhZGF0YSBjYW4gZXhpc3QgZm9yIG11bHRpcGxlIGZvcm1mYWN0b3JzLCBncmFwaGljcworICAgICAgICAgICAgICAgIHN1cHBvcnQgc3lzdGVtcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGUgZmlndXJlIHNob3dzIHNldmVyYWwgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLCBub3QgYWxsIHRoZXNlIGRpcmVjdG9yaWVzIGFwcGVhciBpbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ic29mdHdhcmUtbGF5ZXIiPgorICAgICAgICAgICAgPHRpdGxlPlNvZnR3YXJlIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIGxheWVyIHByb3ZpZGVzIHRoZSBNZXRhZGF0YSBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgIHNvZnR3YXJlIHBhY2thZ2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGRvZXMgbm90IGluY2x1ZGUgTWV0YWRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gb3IgdGhlIG1hY2hpbmUsIHdoaWNoIGFyZSBmb3VuZCBpbiB0aGVpcgorICAgICAgICAgICAgICAgIHJlc3BlY3RpdmUgbGF5ZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGNvbnRhaW5zIGFueSBuZXcgcmVjaXBlcyB0aGF0IHlvdXIgcHJvamVjdCBuZWVkcworICAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIG9mIHJlY2lwZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzb3VyY2VzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5Tb3VyY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYW4gaW1hZ2Ugb3IKKyAgICAgICAgICAgIGFueSB0YXJnZXQsIGl0IG11c3QgYmUgYWJsZSB0byBhY2Nlc3Mgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4KKyAgICAgICAgICAgIHJlcHJlc2VudHMgc291cmNlIGZpbGVzIHVzaW5nIHRoZSAiVXBzdHJlYW0gUHJvamVjdCBSZWxlYXNlcyIsCisgICAgICAgICAgICAiTG9jYWwgUHJvamVjdHMiLCBhbmQgIlNDTXMgKG9wdGlvbmFsKSIgYm94ZXMuCisgICAgICAgICAgICBUaGUgZmlndXJlIHJlcHJlc2VudHMgbWlycm9ycywgd2hpY2ggYWxzbyBwbGF5IGEgcm9sZSBpbiBsb2NhdGluZworICAgICAgICAgICAgc291cmNlIGZpbGVzLCB3aXRoIHRoZSAiU291cmNlIE1pcnJvcihzKSIgYm94LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWV0aG9kIGJ5IHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgdWx0aW1hdGVseSBvcmdhbml6ZWQgaXMKKyAgICAgICAgICAgIGEgZnVuY3Rpb24gb2YgdGhlIHByb2plY3QuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZm9yIHJlbGVhc2VkIHNvZnR3YXJlLCBwcm9qZWN0cyB0ZW5kIHRvIHVzZSB0YXJiYWxscworICAgICAgICAgICAgb3Igb3RoZXIgYXJjaGl2ZWQgZmlsZXMgdGhhdCBjYW4gY2FwdHVyZSB0aGUgc3RhdGUgb2YgYSByZWxlYXNlCisgICAgICAgICAgICBndWFyYW50ZWVpbmcgdGhhdCBpdCBpcyBzdGF0aWNhbGx5IHJlcHJlc2VudGVkLgorICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGZvciBhIHByb2plY3QgdGhhdCBpcyBtb3JlIGR5bmFtaWMgb3IKKyAgICAgICAgICAgIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUsIGEgcHJvamVjdCBtaWdodCBrZWVwIHNvdXJjZSBmaWxlcyBpbiBhCisgICAgICAgICAgICByZXBvc2l0b3J5IGNvbnRyb2xsZWQgYnkgYSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHN1Y2ggYXMKKyAgICAgICAgICAgIEdpdC4KKyAgICAgICAgICAgIFB1bGxpbmcgc291cmNlIGZyb20gYSByZXBvc2l0b3J5IGFsbG93cyB5b3UgdG8gY29udHJvbAorICAgICAgICAgICAgdGhlIHBvaW50IGluIHRoZSByZXBvc2l0b3J5ICh0aGUgcmV2aXNpb24pIGZyb20gd2hpY2ggeW91IHdhbnQgdG8KKyAgICAgICAgICAgIGJ1aWxkIHNvZnR3YXJlLgorICAgICAgICAgICAgRmluYWxseSwgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIG1pZ2h0IGV4aXN0LCB3aGljaCB3b3VsZCBnaXZlIHRoZQorICAgICAgICAgICAgY29uc3VtZXIgYSBjaG9pY2Ugd2hlbiBkZWNpZGluZyB3aGVyZSB0byBnZXQgc291cmNlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHNvdXJjZSBmaWxlcyByZWdhcmRsZXNzIG9mIHRoZWlyIGxvY2F0aW9uLgorICAgICAgICAgICAgRWFjaCByZWNpcGUgbXVzdCBoYXZlIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgdGhhdCBwb2ludHMgdG8gdGhlIHNvdXJjZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBhcmVhIHRoYXQgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIHdoZXJlIHNvdXJjZSBmaWxlcworICAgICAgICAgICAgY29tZSBmcm9tIGlzIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFRoaXMgYXJlYSBpcyBhIGNhY2hlIHRoYXQgY2FuIGhvbGQgcHJldmlvdXNseSBkb3dubG9hZGVkIHNvdXJjZS4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBpbnN0cnVjdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUKKyAgICAgICAgICAgIHRhcmJhbGxzIGZyb20gR2l0IHJlcG9zaXRvcmllcywgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBKdWRpY2lvdXMgdXNlIG9mIGEgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjYW4KKyAgICAgICAgICAgIHNhdmUgdGhlIGJ1aWxkIHN5c3RlbSBhIHRyaXAgYWNyb3NzIHRoZSBJbnRlcm5ldCB3aGVuIGxvb2tpbmcKKyAgICAgICAgICAgIGZvciBmaWxlcy4KKyAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgZm9yIHVzaW5nIGEgZG93bmxvYWQgZGlyZWN0b3J5IGlzIHRvIGhhdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBwb2ludCB0byBhbiBhcmVhIG91dHNpZGUgb2YgeW91cgorICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBzYWZlbHkgZGVsZXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIG5lZWRlZCB3aXRob3V0IGZlYXIgb2YgcmVtb3ZpbmcgYW55IGRvd25sb2FkZWQgc291cmNlIGZpbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgZGVlcGVyIGxvb2sgaW50byB0aGUKKyAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBhbmQgdGhlIG1pcnJvcnMuCisgICAgICAgICAgICBIZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBzb3VyY2UgZmlsZSBhcmVhIG9mIHRoZQorICAgICAgICAgICAgYmFzZSBmaWd1cmU6CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Vwc3RyZWFtLXByb2plY3QtcmVsZWFzZXMnPgorICAgICAgICAgICAgPHRpdGxlPlVwc3RyZWFtIFByb2plY3QgUmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVcHN0cmVhbSBwcm9qZWN0IHJlbGVhc2VzIGV4aXN0IGFueXdoZXJlIGluIHRoZSBmb3JtIG9mIGFuCisgICAgICAgICAgICAgICAgYXJjaGl2ZWQgZmlsZSAoZS5nLiB0YXJiYWxsIG9yIHppcCBmaWxlKS4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBjb3JyZXNwb25kIHRvIGluZGl2aWR1YWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZpZ3VyZSB1c2VzIHNwZWNpZmljIHJlbGVhc2VzIGVhY2ggZm9yCisgICAgICAgICAgICAgICAgQnVzeUJveCwgUXQsIGFuZCBEYnVzLgorICAgICAgICAgICAgICAgIEFuIGFyY2hpdmUgZmlsZSBjYW4gYmUgZm9yIGFueSByZWxlYXNlZCBwcm9kdWN0IHRoYXQgY2FuIGJlCisgICAgICAgICAgICAgICAgYnVpbHQgdXNpbmcgYSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtcHJvamVjdHMnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2FsIFByb2plY3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTG9jYWwgcHJvamVjdHMgYXJlIGN1c3RvbSBiaXRzIG9mIHNvZnR3YXJlIHRoZSB1c2VyIHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFRoZXNlIGJpdHMgcmVzaWRlIHNvbWV3aGVyZSBsb2NhbCB0byBhIHByb2plY3QgLSBwZXJoYXBzCisgICAgICAgICAgICAgICAgYSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgdXNlciBjaGVja3MgaW4gaXRlbXMgKGUuZy4KKyAgICAgICAgICAgICAgICBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZGV2ZWxvcG1lbnQgc291cmNlIHRyZWUKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBncm91cCkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjYW5vbmljYWwgbWV0aG9kIHRocm91Z2ggd2hpY2ggdG8gaW5jbHVkZSBhIGxvY2FsIHByb2plY3QKKyAgICAgICAgICAgICAgICBpcyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGluY2x1ZGUgdGhhdCBsb2NhbCBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFlvdSB1c2UgZWl0aGVyIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIGEKKyAgICAgICAgICAgICAgICByZWNpcGUncyBhcHBlbmQgZmlsZSB0byBvdmVycmlkZSBvciBzZXQgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHBvaW50IHRvIHRoZSBsb2NhbCBkaXJlY3Rvcnkgb24geW91ciBkaXNrIHRvIHB1bGwKKyAgICAgICAgICAgICAgICBpbiB0aGUgd2hvbGUgc291cmNlIHRyZWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NjbXMnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb250cm9sIE1hbmFnZXJzIChPcHRpb25hbCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbm90aGVyIHBsYWNlIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGdldCBzb3VyY2UgZmlsZXMgZnJvbSBpcworICAgICAgICAgICAgICAgIHRocm91Z2ggYW4gU0NNIHN1Y2ggYXMgR2l0IG9yIFN1YnZlcnNpb24uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkIG9yIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbnNpZGUgQml0QmFrZSB1c2VzCisgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGUgYXJndW1lbnQncyBwcmVmaXggdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgZmV0Y2hlciBtb2R1bGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGF2ZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRhcmJhbGxzIGZvciBHaXQgcmVwb3NpdG9yaWVzIGFuZCBwbGFjZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICA8L25vdGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZmV0Y2hpbmcgYSByZXBvc2l0b3J5LCBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgcmV2aXNpb24gZnJvbSB3aGljaCB0bworICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Tb3VyY2UgTWlycm9yKHMpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHdvIGtpbmRzIG9mIG1pcnJvcnMgZXhpc3Q6IHByZS1taXJyb3JzIGFuZCByZWd1bGFyIG1pcnJvcnMuCisgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBwb2ludCB0byB0aGVzZSwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIEJpdEJha2UgY2hlY2tzIHByZS1taXJyb3JzIGJlZm9yZSBsb29raW5nIHVwc3RyZWFtIGZvciBhbnkKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgUHJlLW1pcnJvcnMgYXJlIGFwcHJvcHJpYXRlIHdoZW4geW91IGhhdmUgYSBzaGFyZWQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgQSBQcmUtbWlycm9yIHR5cGljYWxseSBwb2ludHMgdG8gYSBzaGFyZWQgZGlyZWN0b3J5IHRoYXQgaXMKKyAgICAgICAgICAgICAgICBsb2NhbCB0byB5b3VyIG9yZ2FuaXphdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVndWxhciBtaXJyb3JzIGNhbiBiZSBhbnkgc2l0ZSBhY3Jvc3MgdGhlIEludGVybmV0IHRoYXQgaXMKKyAgICAgICAgICAgICAgICB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uIGZvciBzb3VyY2UgY29kZSBzaG91bGQgdGhlCisgICAgICAgICAgICAgICAgcHJpbWFyeSBzaXRlIG5vdCBiZSBmdW5jdGlvbmluZyBmb3Igc29tZSByZWFzb24gb3IgYW5vdGhlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5QYWNrYWdlIEZlZWRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIGFuIGltYWdlIG9yIGFuIFNESywKKyAgICAgICAgICAgIGl0IGdldHMgdGhlIHBhY2thZ2VzIGZyb20gYSBwYWNrYWdlIGZlZWQgYXJlYSBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+CisgICAgICAgICAgICBzaG93cyB0aGlzIHBhY2thZ2UgZmVlZHMgYXJlYSBpbiB0aGUgdXBwZXItcmlnaHQgY29ybmVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbG9va3MgYSBsaXR0bGUgY2xvc2VyIGludG8gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYSB1c2VkCisgICAgICAgICAgICBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgYXJlYToKKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjZpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGFja2FnZSBmZWVkcyBhcmUgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBjbGFzc2VzIHRvIGdlbmVyYXRlCisgICAgICAgICAgICBkaWZmZXJlbnQgcGFja2FnZSB0eXBlcywgYW5kIHlvdSBzcGVjaWZ5IHdoaWNoIGNsYXNzZXMgdG8gZW5hYmxlCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCZWZvcmUgcGxhY2luZyB0aGUgcGFja2FnZXMgaW50byBwYWNrYWdlIGZlZWRzLAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgdmFsaWRhdGVzIHRoZW0gd2l0aCBnZW5lcmF0ZWQgb3V0cHV0IHF1YWxpdHkKKyAgICAgICAgICAgIGFzc3VyYW5jZSBjaGVja3MgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwYWNrYWdlIGZlZWQgYXJlYSByZXNpZGVzIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYWNrYWdlcworICAgICAgICAgICAgaXMgZGV0ZXJtaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgdGhlIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciBpbiB1c2UuCisgICAgICAgICAgICBTZWUgdGhlICJQYWNrYWdlIEZlZWRzIiBib3ggaW4gdGhlIGlsbHVzdHJhdGlvbiBhbmQgbm90ZSB0aGUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSByaWdodCBvZiB0aGF0IGFyZWEuCisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIGRlZmluZXMgd2hlcmUgcGFja2FnZSBmaWxlcyBhcmUKKyAgICAgICAgICAgIGtlcHQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIERlZmluZWQgYXMgPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkRFUExPWV9ESVJfKjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHBhY2thZ2UgbWFuYWdlciB1c2VkLCB0aGUgcGFja2FnZSB0eXBlCisgICAgICAgICAgICAgICAgICAgIHN1Yi1mb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEdpdmVuIFJQTSwgSVBLLCBvciBERUIgcGFja2FnaW5nIGFuZCB0YXJiYWxsIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfUlBNJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSVBLPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfVEFSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9UQVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgdXNlZCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3ViLWZvbGRlcnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBwYWNrYWdlcyBjb3VsZCBleGlzdCBmb3IgdGhlIGk1ODYgb3IgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiB0YXNrcyB0bworICAgICAgICAgICAgZ2VuZXJhdGUgcGFja2FnZXMgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgcGFja2FnZSBob2xkaW5nIGFyZWEgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+IGZvciBJUEsgcGFja2FnZXMpLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2RlYic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L2xpbms+IiwKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9pcGsnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC9saW5rPiIsCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfcnBtJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4iLAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIGEgc2NlbmFyaW8gd2hlcmUgYW4gSVBLIHBhY2thZ2luZyBtYW5hZ2VyCisgICAgICAgICAgICBpcyBiZWluZyB1c2VkIGFuZCBwYWNrYWdlIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBib3RoIGk1ODYKKyAgICAgICAgICAgIGFuZCBxZW11eDg2IGV4aXN0LgorICAgICAgICAgICAgUGFja2FnZXMgZm9yIHRoZSBpNTg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvaTU4NjwvZmlsZW5hbWU+LCB3aGlsZSBwYWNrYWdlcyBmb3IKKyAgICAgICAgICAgIHRoZSBxZW11eDg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvcWVtdXg4NjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIHRvIHByb2R1Y2UgaW1hZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBCaXRCYWtlIGFyZWEgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmdW5jdGlvbmFsIGFyZWFzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHRha2VzIGEgY2xvc2VyIGxvb2sgYXQgZWFjaCBvZiB0aG9zZSBhcmVhcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VwYXJhdGUgZG9jdW1lbnRhdGlvbiBleGlzdHMgZm9yIHRoZSBCaXRCYWtlIHRvb2wuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPgorICAgICAgICAgICAgZm9yIHJlZmVyZW5jZSBtYXRlcmlhbCBvbiBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBGZXRjaGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGFnZXMgb2YgYnVpbGRpbmcgYSByZWNpcGUgYXJlIHRvIGZldGNoIGFuZCB1bnBhY2sKKyAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGU6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2LjVpbiIgZGVwdGg9IjVpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgZmV0Y2ggdGhlIHNvdXJjZSBmaWxlcyBhbmQgdW5wYWNrIHRoZW0gaW50byB0aGUgd29yaworICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV2ZXJ5IGxvY2FsIGZpbGUgKGUuZy4gPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBwYXJ0IG9mIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdGFrZXMgYSBjaGVja3N1bQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZSBmb3IgdGhlIHJlY2lwZSBhbmQgaW5zZXJ0cyB0aGUgY2hlY2tzdW0gaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgc2lnbmF0dXJlIGZvciB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIGFueSBsb2NhbCBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzayBhbmQgYWxsIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kIG9uIGl0IGFyZSByZS1leGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgZXZlcnl0aGluZyBpcyBhY2NvbXBsaXNoZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBoYXMgYSBkZWZpbmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZSBCdWlsZCBEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1idWlsZCc+PGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbnBhY2tlZCBzb3VyY2UgZmlsZXMgYXJlIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEVhY2ggcmVjaXBlIGhhcyBhbiBhcmVhIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgdW5wYWNrZWQgc291cmNlIGNvZGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGF0IGRpcmVjdG9yeSBmb3IgYW55IGdpdmVuIHJlY2lwZSBpcyBkZWZpbmVkIGZyb20KKyAgICAgICAgICAgICAgICBzZXZlcmFsIGRpZmZlcmVudCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHZhcmlhYmxlcyB0aGF0IGRlZmluZSB0aGVzZSBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgIGJ5IGxvb2tpbmcgYXQgdGhlIGZpZ3VyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIGFsbCBpdHMgd29yayBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWx0IHBhY2thZ2Ugb3IgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPjxmaWxlbmFtZT5UQVJHRVRfT1M8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gd2l0aGluIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBwYWNrYWdlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIHVucGFja2VkIHNvdXJjZSBmaWxlcyBmb3IgYSBnaXZlbiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBzb3VyY2UgY29kZSBpcyBmZXRjaGVkIGFuZCB1bnBhY2tlZCwgQml0QmFrZSBsb2NhdGVzCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGZpbGVzOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBwcm9jZXNzZXMgcmVjaXBlcyBieQorICAgICAgICAgICAgICAgIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxvY2F0ZSBhcHBsaWNhYmxlIHBhdGNoIGZpbGVzLCB3aGljaCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5kaWZmPC9maWxlbmFtZT4gZmlsZXMsIG9yIGFueSBmaWxlIGlmCisgICAgICAgICAgICAgICAgImFwcGx5PXllcyIgaXMgc3BlY2lmaWVkIGZvciB0aGUgZmlsZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZmluZHMgYW5kIGFwcGxpZXMgbXVsdGlwbGUgcGF0Y2hlcyBmb3IgYSBzaW5nbGUgcmVjaXBlCisgICAgICAgICAgICAgICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGl0IGZpbmRzIHRoZSBwYXRjaGVzLgorICAgICAgICAgICAgICAgIFBhdGNoZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHJlY2lwZSdzIHNvdXJjZSBmaWxlcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgc291cmNlIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc291cmNlLWZldGNoaW5nLWRldi1lbnZpcm9ubWVudCc+U291cmNlIEZldGNoaW5nPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tYW5kLWNvbXBpbGF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBhbmQgQ29tcGlsYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciBzb3VyY2UgY29kZSBpcyBwYXRjaGVkLCBCaXRCYWtlIGV4ZWN1dGVzIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgYW5kIGNvbXBpbGUgdGhlIHNvdXJjZSBjb2RlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBjb25zaXN0cyBvZiB0aHJlZSB0YXNrczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbnMgY2FuIGNvbWUgZnJvbSB0aGUgcmVjaXBlIGl0c2VsZiBhcyB3ZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGFuIGluaGVyaXRlZCBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHNvZnR3YXJlIGl0c2VsZiBtaWdodCBjb25maWd1cmUgaXRzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBmb3Igd2hpY2ggaXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBjb25maWd1cmF0aW9ucyBoYW5kbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNvdXJjZSBjb2RlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQgYnkgdGhlIHJlY2lwZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSB3b3JrcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBhIGNvbmZpZ3VyYXRpb24gdGFzayBoYXMgYmVlbiBzYXRpc2ZpZWQsIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVzIHRoZSBzb3VyY2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxhdGlvbiBvY2N1cnMgaW4gdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMsIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LCB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgZG9uZSwgQml0QmFrZSBleGVjdXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGFzayBjb3BpZXMgZmlsZXMgZnJvbSB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBwbGFjZXMgdGhlbSBpbiBhIGhvbGRpbmcgYXJlYSBwb2ludGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zcGxpdHRpbmctZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdlIFNwbGl0dGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHNvdXJjZSBjb2RlIGlzIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkLCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuYWx5emVzCisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdHMgYW5kIHNwbGl0cyB0aGUgb3V0cHV0IGludG8gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI3aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgY29tYmluZSB0byBhbmFseXplCisgICAgICAgICAgICAgICAgdGhlIGZpbGVzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhbmQgc3BsaXQgdGhlbSBpbnRvIHN1YnNldHMgYmFzZWQgb24gYXZhaWxhYmxlIHBhY2thZ2VzIGFuZAorICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBhbmFseXppbmcgcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIGFzIHdlbGwgYXMgb3RoZXIKKyAgICAgICAgICAgICAgICBpdGVtczogc3BsaXR0aW5nIG91dCBkZWJ1Z2dpbmcgc3ltYm9scywKKyAgICAgICAgICAgICAgICBsb29raW5nIGF0IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgIGFuZCBsb29raW5nIGF0IHBhY2thZ2UgcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGdlbmVyYXRlIHRoZSBmaW5hbCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBXb3JraW5nLCBzdGFnZWQsIGFuZCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMKKyAgICAgICAgICAgICAgICBhbmQgcGFja2FnZSBzcGxpdHRpbmcgcHJvY2VzcyB1c2UgdGhlc2UgYXJlYXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEJz48ZmlsZW5hbWU+UEtHRDwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBiZWZvcmUgdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREFUQV9ESVInPjxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREVTVFdPUksnPjxmaWxlbmFtZT5QS0dERVNUV09SSzwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBLR0RFU1QnPjxmaWxlbmFtZT5QS0dERVNUPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBhZnRlciB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gc3BsaXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBmaWxlcyB0aGF0IGdvIGludG8gZWFjaCBwYWNrYWdlIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgZGV0YWlscyBvbiBob3cgdGhpcyBpcyBhY2NvbXBsaXNoZWQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICBsb29rIGF0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBwYWNrYWdlcyBiZWluZyBjcmVhdGVkIChSUE0sIERFQiwgb3IKKyAgICAgICAgICAgICAgICBJUEspLCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+IHRhc2sKKyAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBhY3R1YWwgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIFBhY2thZ2UgRmVlZCBhcmVhLCB3aGljaCBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbCBvbiB0aGF0IHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGNyZWF0aW5nIGZlZWRzIGRpcmVjdGx5IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyBzdWNoIGZlZWRzIHVzdWFsbHkgcmVxdWlyZXMgc29tZSBraW5kIG9mIGZlZWQKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRlbmFuY2UgbWVjaGFuaXNtIHRoYXQgd291bGQgdXBsb2FkIHRoZSBuZXcgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBvZmZpY2lhbCBwYWNrYWdlIGZlZWQgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgIMOFbmdzdHLDtm0gZGlzdHJpYnV0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGhpZ2hseSBkaXN0cmlidXRpb24tc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRodXMgaXMgbm90IHByb3ZpZGVkIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+SW1hZ2UgR2VuZXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgcGFja2FnZXMgYXJlIHNwbGl0IGFuZCBzdG9yZWQgaW4gdGhlIFBhY2thZ2UgRmVlZHMgYXJlYSwKKyAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBjb25zaXN0cyBvZiBzZXZlcmFsIHN0YWdlcyBhbmQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIG1hbnkgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlc2Uga2V5IHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5IGluc3RhbGw6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIG91dCB0aGUgYmFzZSBzZXQgb2YgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBwYWNrYWdlcyB0aGF0IHNob3VsZCBub3QgYmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1vc3Qgb2YgdGhlc2UgZmVhdHVyZXMgbWFwIHRvIGFkZGl0aW9uYWwgcGFja2FnZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWNrYWdlIGJhY2tlbmQgdG8gdXNlIGFuZCBjb25zZXF1ZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBzIGRldGVybWluZSB3aGVyZSB0byBsb2NhdGUgcGFja2FnZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxmaWxlbmFtZT5JTUFHRV9MSU5HVUFTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbGFuZ3VhZ2UocykgZm9yIHdoaWNoIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIHN1cHBvcnQgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlIGluc3RhbGxhdGlvbiBpcyB1bmRlciBjb250cm9sIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAoZS5nLiBzbWFydC9ycG0sIG9wa2csIG9yIGFwdC9kcGtnKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3IKKyAgICAgICAgICAgICAgICBub3QgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcywgaWYgcGFja2FnZSBtYW5hZ2VtZW50IGlzIG5vdAorICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQsIHRoZSBwYWNrYWdlIG1hbmFnZXIncyBkYXRhIGZpbGVzCisgICAgICAgICAgICAgICAgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgaW1hZ2UgZ2VuZXJhdGlvbiwgdGhlIGJ1aWxkIHN5c3RlbSBhdHRlbXB0cyB0byBydW4KKyAgICAgICAgICAgICAgICBhbGwgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICBBbnkgdGhhdCBmYWlsIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBhcmUgcnVuIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCB3aGVuIHRoZSB0YXJnZXQgc3lzdGVtIGlzIGZpcnN0IGJvb3RlZC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPnJlYWQtb25seSByb290IGZpbGVzeXN0ZW08L3VsaW5rPiwKKyAgICAgICAgICAgICAgICBhbGwgdGhlIHBvc3QgaW5zdGFsbGF0aW9uIHNjcmlwdHMgbXVzdCBzdWNjZWVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIGluc3RhbGxhdGlvbiBwaGFzZSBzaW5jZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgcmVhZC1vbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgT3B0aW1pemF0aW9uLCBvcHRpbWl6aW5nIHByb2Nlc3NlcyBhcmUgcnVuIGFjcm9zcworICAgICAgICAgICAgICAgIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBwcm9jZXNzZXMgaW5jbHVkZSA8ZmlsZW5hbWU+bWtsaWJzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByZWxpbms8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1rbGliczwvZmlsZW5hbWU+IHByb2Nlc3Mgb3B0aW1pemVzIHRoZSBzaXplCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4gcHJvY2VzcyBvcHRpbWl6ZXMgdGhlIGR5bmFtaWMKKyAgICAgICAgICAgICAgICBsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gcmVkdWNlIHN0YXJ0IHVwIHRpbWUgb2YKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxvbmcgd2l0aCB3cml0aW5nIG91dCB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIGEgbWFuaWZlc3QgZmlsZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Lm1hbmlmZXN0PC9maWxlbmFtZT4pIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UgdGhhdCBsaXN0cyBvdXQsIGxpbmUtYnktbGluZSwgdGhlCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoaXMgbWFuaWZlc3QgZmlsZSBpcyB1c2VmdWwgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXRlc3RpbWFnZSc+PGZpbGVuYW1lPnRlc3RpbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzLCBmb3IgZXhhbXBsZSwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHJ1bgorICAgICAgICAgICAgICAgIHNwZWNpZmljIHRlc3RzLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTUFOSUZFU1QnPjxmaWxlbmFtZT5JTUFHRV9NQU5JRkVTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYXJ0IG9mIHRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaW5jbHVkZXMgY29tcHJlc3NpbmcgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIGlzIGFjY29tcGxpc2hlZCB0aHJvdWdoIHNldmVyYWwgb3B0aW1pemF0aW9uCisgICAgICAgICAgICAgICAgcm91dGluZXMgZGVzaWduZWQgdG8gcmVkdWNlIHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGUgcm9vdCBmaWxlc3lzdGVtIGhhcyBiZWVuIGNvbnN0cnVjdGVkLCB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICBnZW5lcmF0aW9uIHByb2Nlc3MgdHVybnMgZXZlcnl0aGluZyBpbnRvIGFuIGltYWdlIGZpbGUgb3IKKyAgICAgICAgICAgICAgICBhIHNldCBvZiBpbWFnZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgZm9ybWF0cyB1c2VkIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGVudGlyZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaXMgcnVuIHVuZGVyIFBzZXVkby4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIHVuZGVyIFBzZXVkbyBlbnN1cmVzIHRoYXQgdGhlIGZpbGVzIGluIHRoZSByb290CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBoYXZlIGNvcnJlY3Qgb3duZXJzaGlwLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+U0RLIEdlbmVyYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIGluc3RhbGxlciBzY3JpcHQ6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbgorICAgICAgICAgICAgICAgIGdlbmVyYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3Nkayc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGlrZSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgU0RLIHNjcmlwdCBwcm9jZXNzIGNvbnNpc3RzIG9mCisgICAgICAgICAgICAgICAgc2V2ZXJhbCBzdGFnZXMgYW5kIGRlcGVuZHMgb24gbWFueSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiB0YXNrIHVzZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBrZXkgdmFyaWFibGVzIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgaW5zdGFsbC4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhlIGZpZ3VyZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBoYW5kbGVzIHR3bworICAgICAgICAgICAgICAgIHBhcnRzOiBhIHRhcmdldCBwYXJ0IGFuZCBhIGhvc3QgcGFydC4KKyAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IHBhcnQgaXMgdGhlIHBhcnQgYnVpbHQgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUgYW5kCisgICAgICAgICAgICAgICAgaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorICAgICAgICAgICAgICAgIFRoZSBob3N0IHBhcnQgaXMgdGhlIHBhcnQgb2YgdGhlIFNESyB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIGJvdGggcGFydHMgYXJlIGNvbnN0cnVjdGVkLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBwZXJmb3JtcyBzb21lIGNsZWFudXAKKyAgICAgICAgICAgICAgICBvbiBib3RoIHBhcnRzLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBjbGVhbnVwLCB0aGUgdGFzayBjcmVhdGVzIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYW5kIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICBtaWdodCBiZSBuZWVkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIHRhc2sgaXMgdGhlIENyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgdG9vbGNoYWluIGluc3RhbGxhdGlvbiBzY3JpcHQgKDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlKSwKKyAgICAgICAgICAgICAgICB3aGljaCBpbmNsdWRlcyB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ltYWdlcy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICA8dGl0bGU+SW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBpbWFnZXMgcHJvZHVjZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGFyZSBjb21wcmVzc2VkIGZvcm1zIG9mIHRoZQorICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRoYXQgYXJlIHJlYWR5IHRvIGJvb3Qgb24gYSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPgorICAgICAgICAgICAgdGhhdCBCaXRCYWtlIG91dHB1dCwgaW4gcGFydCwgY29uc2lzdHMgb2YgaW1hZ2VzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGlzIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2ltYWdlcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjUuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGV4YW1wbGUgaW1hZ2VzIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMsCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW1hZ2VzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluc2lkZSB0aGUgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvbGRlciBhcyBzaG93biBpbiB0aGUgZmlndXJlLgorICAgICAgICAgICAgVGhpcyBmb2xkZXIgY29udGFpbnMgYW55IGZpbGVzIGV4cGVjdGVkIHRvIGJlIGxvYWRlZCBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgd2hpbGUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaW1hZ2VzIGZvcgorICAgICAgICAgICAgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLWltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQSBrZXJuZWwgYmluYXJ5IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX0lNQUdFVFlQRSc+PGZpbGVuYW1lPktFUk5FTF9JTUFHRVRZUEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSBuYW1pbmcgc2NoZW1lIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGF0IHZhcmlhYmxlLCB0aGUgZmlsZSBjb3VsZCBiZWdpbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIGEgdmFyaWV0eSBvZiBuYW1pbmcgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2UgZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJvb3QtZmlsZXN5c3RlbS1pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJvb3QgZmlsZXN5c3RlbXMgZm9yIHRoZSB0YXJnZXQgZGV2aWNlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLmV4dDM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+Ki5iejI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcm9vdCBmaWxlc3lzdGVtcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLW1vZHVsZXM8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUYXJiYWxscyB0aGF0IGNvbnRhaW4gYWxsIHRoZSBtb2R1bGVzIGJ1aWx0IGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBLZXJuZWwgbW9kdWxlIHRhcmJhbGxzIGV4aXN0IGZvciBsZWdhY3kgcHVycG9zZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NT0RVTEVfVEFSQkFMTF9ERVBMT1knPjxmaWxlbmFtZT5NT0RVTEVfVEFSQkFMTF9ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYW4gY29udGFpbiBtdWx0aXBsZSBrZXJuZWwgbW9kdWxlIHRhcmJhbGxzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5ib290bG9hZGVyczwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXJzIHN1cHBvcnRpbmcgdGhlIGltYWdlLCBpZiBhcHBsaWNhYmxlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgYm9vdGxvYWRlcnMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnN5bWxpbmtzPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb2xkZXIgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgYSBzeW1ib2xpYyBsaW5rIHRoYXQgcG9pbnRzIHRvIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2ggbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbGlua3MgbWlnaHQgYmUgdXNlZnVsIGZvciBleHRlcm5hbCBzY3JpcHRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBvYnRhaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgbGFiZWxlZCAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLIiByZXByZXNlbnRzIGFuCisgICAgICAgICAgICBTREsuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gaXMgZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzcGVjaWZpYyBmb3JtIG9mIHRoaXMgb3V0cHV0IGlzIGEgc2VsZi1leHRyYWN0aW5nCisgICAgICAgICAgICBTREsgaW5zdGFsbGVyICg8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+KSB0aGF0LCB3aGVuIHJ1biwKKyAgICAgICAgICAgIGluc3RhbGxzIHRoZSBTREssIHdoaWNoIGNvbnNpc3RzIG9mIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIHRvb2xjaGFpbiwgYSBzZXQgb2YgbGlicmFyaWVzIGFuZCBoZWFkZXJzLCBhbmQgYW4gU0RLCisgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgaW5zdGFsbGVyIGVzc2VudGlhbGx5IHNldHMgdXAgeW91cgorICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gYXMgdGhlICJob3N0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIGl0IHJ1bnMgb24gdGhlIFNESyBtYWNoaW5lLgorICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiB0aGUgbGlicmFyaWVzIGFuZCBoZWFkZXJzIGFzIHRoZSAidGFyZ2V0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIHRoZXkgYXJlIGJ1aWx0IGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgVGhlIHNldHVwIHNjcmlwdCBpcyBhZGRlZCBzbyB0aGF0IHlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgICAgIGVudmlyb25tZW50IGJlZm9yZSB1c2luZyB0aGUgdG9vbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHNldmVyYWwgbWV0aG9kcyBieSB3aGljaCB5b3UgY2FuCisgICAgICAgICAgICAgICAgc2V0IHVwIHRoaXMgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyBpbmNsdWRlIGRvd25sb2FkaW5nIHByZS1idWlsdCBTREsgaW5zdGFsbGVycywKKyAgICAgICAgICAgICAgICBidWlsZGluZyBhbmQgaW5zdGFsbGluZyB5b3VyIG93biBTREsgaW5zdGFsbGVyLCBvciBydW5uaW5nCisgICAgICAgICAgICAgICAgYW4gQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBpbnN0YWxsZXIgdG8KKyAgICAgICAgICAgICAgICBpbnN0YWxsIG5vdCBqdXN0IGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBidXQgYWxzbyBhZGRpdGlvbmFsIHRvb2xzIHRvIGhlbHAgaW4gdGhpcyB0eXBlIG9mCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBidWlsdCwgdGhlIFNESyBpbnN0YWxsZXJzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvc2RrPC9maWxlbmFtZT4gZm9sZGVyIGluc2lkZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFzIHNob3duIGluIHRoZSBmaWd1cmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBTZXZlcmFsIHZhcmlhYmxlcyBleGlzdCB0aGF0IGhlbHAgY29uZmlndXJlIHRoZXNlIGZpbGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIGFyZSBydW4gdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIHBhY2thZ2VzIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+U0RLSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSAidGFyZ2V0IiBwYXJ0CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItVE9PTENIQUlOX0hPU1RfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9IT1NUX1RBU0s8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaG9zdAorICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBTREsgKGkuZS4gdGhlIHBhcnQgdGhhdCBydW5zIG9uCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkayA8cmVwbGFjZWFibGU+aW1hZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIFNESywgYSBzZXQgb2YgZGVmYXVsdCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGFkZCBtb3JlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSB0YXJnZXQgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLIChpLmUuIHRoZSBwYXJ0IGJ1aWx0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtQQVRIJz48ZmlsZW5hbWU+U0RLUEFUSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBTREsgaW5zdGFsbGF0aW9uIHBhdGggb2ZmZXJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1hdXRvdG9vbHMvaGVsbG9fMi4zLmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZiMGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYgpAQCAtMCwwICsxLDggQEAKK0RFU0NSSVBUSU9OID0gIkdOVSBIZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hZGVmZGEzMDkwNTIyMzVhYTVkMWU5OWNlNzU1NzAxMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2hlbGxvL2hlbGxvLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvZmlsZXMvaGVsbG93b3JsZC5jIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzcxNjliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbih2b2lkKQoreworCXByaW50ZigiSGVsbG8gd29ybGQhXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2hlbGxvLmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2hlbGxvLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MTI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvaGVsbG8uYmIKQEAgLTAsMCArMSwxNyBAQAorREVTQ1JJUFRJT04gPSAiU2ltcGxlIGhlbGxvd29ybGQgYXBwbGljYXRpb24iCitTRUNUSU9OID0gImV4YW1wbGVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworU1JDX1VSSSA9ICJmaWxlOi8vaGVsbG93b3JsZC5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9saWJ4cG0vbGlieHBtXzMuNS42LmJiIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNThkNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworREVTQ1JJUFRJT04gPSAiWDExIFBpeG1hcCBsaWJyYXJ5IgorTElDRU5TRSA9ICJYLUJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNlMDc3NjNkMTY5NjNjM2FmMTJkYjI3MWEzMWFiYWE1IgorREVQRU5EUyArPSAibGlieGV4dCIKK1BSID0gInIyIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcG0iCisKK1BBQ0tBR0VTID0rICJzeHBtIGN4cG0iCitGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorRklMRVNfc3hwbSA9ICIke2JpbmRpcn0vc3hwbSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2V4YW1wbGVzL210ZC1tYWtlZmlsZS9tdGQtdXRpbHNfMS4wLjAuYmIgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMDVhNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK0RFU0NSSVBUSU9OID0gIlRvb2xzIGZvciBtYW5hZ2luZyBtZW1vcnkgdGVjaG5vbG9neSBkZXZpY2VzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiemxpYiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmluZnJhZGVhZC5vcmcvcHViL210ZC11dGlscy9tdGQtdXRpbHMtJHtQVn0udGFyLmd6IgorCitDRkxBR1NfcHJlcGVuZCA9ICItSSAke1N9L2luY2x1ZGUgIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZhcS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5N2Q0OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCkBAIC0wLDAgKzEsODE3IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZmFxJz4KKzx0aXRsZT5GQVE8L3RpdGxlPgorPHFhbmRhc2V0PgorICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyBQb2t5IGRpZmZlciBmcm9tIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRlcm0gIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICByZWZlcnMgdG8gdGhlIHNwZWNpZmljIHJlZmVyZW5jZSBidWlsZCBzeXN0ZW0gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFBva3kgaXMgYmFzZWQgb24gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBnZW5lcmljIHRlcm0gdXNlZCBoZXJlIGZvciB0aGUgYnVpbGQgc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgdGhlICJPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBpbiB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBQb2t5IGlzIGNsb3NlbHkgdGllZCB0byBPcGVuRW1iZWRkZWQsIHdpdGgKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGFsd2F5cyBiZWluZyBtZXJnZWQgdG8gT0UtQ29yZSBvciBCaXRCYWtlIGZpcnN0IGJlZm9yZSBiZWluZyBwdWxsZWQgYmFjaworICAgICAgICAgICAgICAgIGludG8gUG9reS4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGJlbmVmaXRzIGJvdGggcHJvamVjdHMgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYSBpZD0nZmFxLW5vdC1tZWV0aW5nLXJlcXVpcmVtZW50cyc+CisgICAgICAgICAgICAgICAgTXkgZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IG1lZXQgdGhlCisgICAgICAgICAgICAgICAgcmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgSSBkbyBub3QgaGF2ZSBQeXRob24gMi43LjMgb3IgZ3JlYXRlciwgb3IKKyAgICAgICAgICAgICAgICBJIGRvIGhhdmUgUHl0aG9uIDMueCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IG5vdCBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBDYW4gSSBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3Q/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGUgcmVxdWlyZWQgdG9vbHMgb24geW91ciBob3N0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgc3lzdGVtIGEgY291cGxlIGRpZmZlcmVudCB3YXlzIChpLmUuIGJ1aWxkaW5nIGEgdGFyYmFsbCBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkaW5nIGEgdGFyYmFsbCkuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBzdGVwcyBvbiBob3cgdG8gdXBkYXRlIHlvdXIgYnVpbGQgdG9vbHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgY2FuIHlvdSBjbGFpbSBQb2t5IC8gT3BlbkVtYmVkZGVkLUNvcmUgaXMgc3RhYmxlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGFyZWFzIHRoYXQgaGVscCB3aXRoIHN0YWJpbGl0eTsKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFlvY3RvIFByb2plY3QgdGVhbSBrZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+IHNtYWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZm9jdXNlZCwgY29udGFpbmluZyBhcm91bmQgODMwIHJlY2lwZXMgYXMgb3Bwb3NlZCB0byB0aGUgdGhvdXNhbmRzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgaW4gb3RoZXIgT3BlbkVtYmVkZGVkIGNvbW11bml0eSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBLZWVwaW5nIGl0IHNtYWxsIG1ha2VzIGl0IGVhc3kgdG8gdGVzdCBhbmQgbWFpbnRhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHJ1bnMgbWFudWFsIGFuZCBhdXRvbWF0ZWQgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGEgc21hbGwsIGZpeGVkIHNldCBvZiByZWZlcmVuY2UgaGFyZHdhcmUgYXMgd2VsbCBhcyBlbXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYW4gYXV0b2J1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBwcm92aWRlcyBjb250aW51b3VzIGJ1aWxkIGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhvdyBkbyBJIGdldCBzdXBwb3J0IGZvciBteSBib2FyZCBhZGRlZCB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGFuIGFkZGl0aW9uYWwgYm9hcmQgaXMgYWRkZWQgYnkgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllciBmb3IgaXQuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhIEJTUCBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzdWFsbHksIGlmIHRoZSBib2FyZCBpcyBub3QgY29tcGxldGVseSBleG90aWMsIGFkZGluZyBzdXBwb3J0IGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFyZSB0aGVyZSBhbnkgcHJvZHVjdHMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc29mdHdhcmUgcnVubmluZyBvbiB0aGUgPHVsaW5rIHVybD0naHR0cDovL3Zlcm5pZXIuY29tL2xhYnF1ZXN0Lyc+VmVybmllciBMYWJRdWVzdDwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgU2VlIHRoZSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZlcm5pZXIuY29tL3Byb2R1Y3RzL2ludGVyZmFjZXMvbGFicS8nPlZlcm5pZXIgTGFiUXVlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdlYnNpdGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHByZS1wcm9kdWN0aW9uIGRldmljZXMgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgdGVhbQorICAgICAgICAgICAgICAgIGFubm91bmNlcyB0aGVtIGFzIHNvb24gYXMgdGhleSBhcmUgcmVsZWFzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvZHVjZSBhcyBvdXRwdXQ/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBjYW4gdXNlIHRoZSBzYW1lIHNldCBvZiByZWNpcGVzIHRvIGNyZWF0ZSBvdXRwdXQgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIGZvcm1hdHMsIHRoZSBvdXRwdXQgb2YgYW4gT3BlbkVtYmVkZGVkIGJ1aWxkIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICBob3cgeW91IHN0YXJ0IGl0LgorICAgICAgICAgICAgICAgIFVzdWFsbHksIHRoZSBvdXRwdXQgaXMgYSBmbGFzaGFibGUgaW1hZ2UgcmVhZHkgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBkZXZpY2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBhZGQgbXkgcGFja2FnZSB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGFkZCBhIHBhY2thZ2UsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIEJpdEJha2UgcmVjaXBlLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgQml0QmFrZSByZWNpcGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS13cml0aW5nLWEtbmV3LXJlY2lwZSc+V3JpdGluZyBhIE5ldyBSZWNpcGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEbyBJIGhhdmUgdG8gcmVmbGFzaCBteSBlbnRpcmUgYm9hcmQgd2l0aCBhIG5ldyBZb2N0byBQcm9qZWN0IGltYWdlIHdoZW4gcmVjb21waWxpbmcKKyAgICAgICAgICAgICAgICBhIHBhY2thZ2U/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gYnVpbGQgcGFja2FnZXMgaW4gdmFyaW91cworICAgICAgICAgICAgICAgIGZvcm1hdHMgc3VjaCBhcyBJUEsgZm9yIE9QS0csIERlYmlhbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4pLCBvciBSUE0uCisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIHVwZ3JhZGUgdGhlIHBhY2thZ2VzIHVzaW5nIHRoZSBwYWNrYWdlIHRvb2xzIG9uCisgICAgICAgICAgICAgICAgdGhlIGRldmljZSwgbXVjaCBsaWtlIG9uIGEgZGVza3RvcCBkaXN0cmlidXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgIFVidW50dSBvciBGZWRvcmEuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgcGFja2FnZSBtYW5hZ2VtZW50IG9uIHRoZSB0YXJnZXQgaXMgZW50aXJlbHkgb3B0aW9uYWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSB0aGUgZXJyb3IgJzxmaWxlbmFtZT5jaG1vZDogWFhYWFggbmV3IHBlcm1pc3Npb25zIGFyZSByLXhyd3hyd3gsIG5vdCByLXhyLXhyLXg8L2ZpbGVuYW1lPicuCisgICAgICAgICAgICAgICAgV2hhdCBpcyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvYmFibHkgcnVubmluZyB0aGUgYnVpbGQgb24gYW4gTlRGUyBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGluc3RlYWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPCEtLSAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgbWFrZSB0aGUgWW9jdG8gUHJvamVjdCB3b3JrIGluIFJIRUwvQ2VudE9TPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IHdvcmtpbmcgdW5kZXIgUkhFTC9DZW50T1MgNS4xIHlvdSBuZWVkIHRvIGZpcnN0CisgICAgICAgICAgICAgICAgaW5zdGFsbCBzb21lIHJlcXVpcmVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBDZW50T1MgcGFja2FnZXMgbmVlZGVkIGFyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+IkRldmVsb3BtZW50IHRvb2xzIiAoc2VsZWN0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT50ZXhpMmh0bWw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvbXBhdC1nY2MtMzQ8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIE9uIHRvcCBvZiB0aGVzZSwgeW91IG5lZWQgdGhlIGZvbGxvd2luZyBleHRlcm5hbCBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB5dGhvbi1zcWxpdGUyPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2RhZy53aWVlcnMuY29tL3JwbS9wYWNrYWdlcy9weXRob24tc3FsaXRlMi8nPkRBRyByZXBvc2l0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmhlbHAybWFuPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NlbnRvcy5rYXJhbi5vcmcvZWw0L2V4dHJhcy9zdGFibGUveDg2XzY0L1JQTVMvcmVwb2RhdGEvcmVwb3ZpZXcvaGVscDJtYW4tMC0xLjMzLjEtMi5odG1sJz5LYXJhbiByZXBvc2l0b3J5PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGVzZSBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIGJlIGFibGUKKyAgICAgICAgICAgICAgICB0byBidWlsZCBzdGFuZGFyZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHdpdGggdGhlIFFFTVUgZW11bGF0b3Igc2VnZmF1bHRpbmcuCisgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlcyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OJz5FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9saW5rPgorICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+IHRvICIwIiBvciBieSByZW1vdmluZyB0aGUgPGZpbGVuYW1lPmxpbnV4LTIuNi1leGVjc2hpZWxkLnBhdGNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBrZXJuZWwgYW5kIHJlYnVpbGRpbmcgaXQgc2luY2UgdGhhdCBpcyB0aGUgcGF0Y2ggdGhhdCBjYXVzZXMgdGhlIHByb2JsZW1zIHdpdGggUUVNVS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGRpc3RyaWJ1dGlvbnMgdGhhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHVzZXMgZHVyaW5nIHZhbGlkYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvRGlzdHJpYnV0aW9uX1N1cHBvcnQnPkRpc3RyaWJ1dGlvbiBTdXBwb3J0PC91bGluaz4KKyAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvciBub3RlcyBhYm91dCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBvbiBhIFJIRUwgNC1iYXNlZAorICAgICAgICAgICAgICAgIGhvc3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvQnVpbGRpbmdPblJIRUw0Jz5CdWlsZGluZyBvbiBSSEVMNDwvdWxpbms+CisgICAgICAgICAgICAgICAgV2lraSBwYWdlLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PiAtLT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSBsb3RzIG9mIDQwNCByZXNwb25zZXMgZm9yIGZpbGVzIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8qPC9maWxlbmFtZT4uIElzIHNvbWV0aGluZyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGhpbmcgaXMgd3JvbmcuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzIGFueSBjb25maWd1cmVkIHNvdXJjZSBtaXJyb3JzIGJlZm9yZSBkb3dubG9hZGluZworICAgICAgICAgICAgICAgIGZyb20gdGhlIHVwc3RyZWFtIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkb2VzIHRoaXMgc2VhcmNoaW5nIGZvciBib3RoIHNvdXJjZSBhcmNoaXZlcyBhbmQKKyAgICAgICAgICAgICAgICBwcmUtY2hlY2tlZCBvdXQgdmVyc2lvbnMgb2YgU0NNLW1hbmFnZWQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgVGhlc2UgY2hlY2tzIGhlbHAgaW4gbGFyZ2UgaW5zdGFsbGF0aW9ucyBiZWNhdXNlIGl0IGNhbiByZWR1Y2UgbG9hZCBvbiB0aGUgU0NNIHNlcnZlcnMKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzLgorICAgICAgICAgICAgICAgIFRoZSBhZGRyZXNzIGFib3ZlIGlzIG9uZSBvZiB0aGUgZGVmYXVsdCBtaXJyb3JzIGNvbmZpZ3VyZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBhbiB1cHN0cmVhbSBzb3VyY2UgZGlzYXBwZWFycywgdGhlIHRlYW0KKyAgICAgICAgICAgICAgICBjYW4gcGxhY2Ugc291cmNlcyB0aGVyZSBzbyBidWlsZHMgY29udGludWUgdG8gd29yay4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEkgaGF2ZSBtYWNoaW5lLXNwZWNpZmljIGRhdGEgaW4gYSBwYWNrYWdlIGZvciBvbmUgbWFjaGluZSBvbmx5IGJ1dCB0aGUgcGFja2FnZSBpcworICAgICAgICAgICAgICAgIGJlaW5nIG1hcmtlZCBhcyBtYWNoaW5lLXNwZWNpZmljIGluIGFsbCBjYXNlcywgaG93IGRvIEkgcHJldmVudCB0aGlzPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJz5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2xpbms+CisgICAgICAgICAgICAgICAgPC9maWxlbmFtZT4gPSAiMCIgaW4gdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGJ1dCBtYWtlIHN1cmUgdGhlIHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICBtYW51YWxseSBtYXJrZWQgYXMKKyAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGZvciB0aGUgY2FzZSB0aGF0IG5lZWRzIGl0LgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIHRoYXQgaGFuZGxlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJJ20gYmVoaW5kIGEgZmlyZXdhbGwgYW5kIG5lZWQgdG8gdXNlIGEgcHJveHkgc2VydmVyLiBIb3cgZG8gSSBkbyB0aGF0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBzb3VyY2UgZmV0Y2hpbmcgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgZG9uZSBieSA8ZmlsZW5hbWU+d2dldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIHlvdSB0aGVyZWZvcmUgbmVlZCB0byBzcGVjaWZ5IHRoZSBwcm94eSBzZXR0aW5ncyBpbiBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53Z2V0cmM8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlIHNldHRpbmdzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgIGZ0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGFsc28gaW5jbHVkZXMgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaXRlLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSB0aGF0IHNob3dzIGhvdyB0bworICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBDVlMgYW5kIEdpdCBwcm94eSBzZXJ2ZXJzIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoYXTigJlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGFuZCA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4qLW5hdGl2ZTwvZmlsZW5hbWU+IHRhcmdldHMgYXJlIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCBmb3IgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZXNlIGFyZSB1c3VhbGx5IHRvb2xzIHRoYXQgYXJlIG5lZWRlZCB0byBhc3Npc3QgdGhlIGJ1aWxkIGluIHNvbWUgd2F5IHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoIGlzIHVzZWQgdG8gYXBwbHkgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgbm9uLW5hdGl2ZSB2ZXJzaW9uIGlzIHRoZSBvbmUgdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSSdtIHNlZWluZyByYW5kb20gYnVpbGQgZmFpbHVyZXMuIEhlbHA/IQorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIHNhbWUgYnVpbGQgaXMgZmFpbGluZyBpbiB0b3RhbGx5IGRpZmZlcmVudCBhbmQgcmFuZG9tCisgICAgICAgICAgICAgICAgd2F5cywgdGhlIG1vc3QgbGlrZWx5IGV4cGxhbmF0aW9uIGlzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgaGFyZHdhcmUgeW91IGFyZSBydW5uaW5nIHRoZSBidWlsZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIHNvbWUgcHJvYmxlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBhcmUgcnVubmluZyB0aGUgYnVpbGQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxpemF0aW9uLCBpbiB3aGljaCBjYXNlIHRoZSB2aXJ0dWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFibHkgaGFzIGJ1Z3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIGEgbWFzc2l2ZSBhbW91bnQgb2YKKyAgICAgICAgICAgICAgICBkYXRhIHRoYXQgY2F1c2VzIGxvdHMgb2YgbmV0d29yaywgZGlzayBhbmQgQ1BVIGFjdGl2aXR5IGFuZAorICAgICAgICAgICAgICAgIGlzIHNlbnNpdGl2ZSB0byBldmVuIHNpbmdsZS1iaXQgZmFpbHVyZXMgaW4gYW55IG9mIHRoZXNlIGFyZWFzLgorICAgICAgICAgICAgICAgIFRydWUgcmFuZG9tIGZhaWx1cmVzIGhhdmUgYWx3YXlzIGJlZW4gdHJhY2VkIGJhY2sgdG8gaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBvciB2aXJ0dWFsaXphdGlvbiBpc3N1ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIEkgdHJ5IHRvIGJ1aWxkIGEgbmF0aXZlIHJlY2lwZSwgdGhlIGJ1aWxkIGZhaWxzIHdpdGggPGZpbGVuYW1lPmljb252Lmg8L2ZpbGVuYW1lPiBwcm9ibGVtcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IGluZGljYXRlcyBHTlUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliaWNvbnY8L2ZpbGVuYW1lPiBpcyBub3QgaW4gdXNlIGJ1dAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4gaGFzIGJlZW4gaW5jbHVkZWQgZnJvbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJpY29udjwvZmlsZW5hbWU+LCB5b3UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYKKyAgICAgICAgICAgICAgICB5b3UgaGF2ZSBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlCisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi91c3IvbG9jYWwvaW5jbHVkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI2Vycm9yIEdOVSBsaWJpY29udiBub3QgaW4gdXNlIGJ1dCBpbmNsdWRlZCBpY29udi5oIGlzIGZyb20gbGliaWNvbnYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGZpbmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBmaWxlLCB5b3Ugc2hvdWxkIGVpdGhlcgorICAgICAgICAgICAgICAgIHVuaW5zdGFsbCBpdCBvciB0ZW1wb3JhcmlseSByZW5hbWUgaXQgYW5kIHRyeSB0aGUgYnVpbGQgYWdhaW4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgaXNzdWUgaXMganVzdCBhIHNpbmdsZSBtYW5pZmVzdGF0aW9uIG9mICJzeXN0ZW0KKyAgICAgICAgICAgICAgICBsZWFrYWdlIiBpc3N1ZXMgY2F1c2VkIHdoZW4gdGhlIE9wZW5FYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGZpbmRzIGFuZCB1c2VzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGZpbGVzIGR1cmluZyBhIG5hdGl2ZQorICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBpc3N1ZSBtaWdodCBub3QgYmUgbGltaXRlZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0aGF0IGxlYWthZ2UgY2Fubm90IG9jY3VyIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9pbmNsdWRlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQ8L2ZpbGVuYW1lPiBsb2NhdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvIHdlIG5lZWQgdG8gc2hpcCBmb3IgbGljZW5zZSBjb21wbGlhbmNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRpZmZpY3VsdCBxdWVzdGlvbiBhbmQgeW91IG5lZWQgdG8gY29uc3VsdCB5b3VyIGxhd3llcgorICAgICAgICAgICAgICAgIGZvciB0aGUgYW5zd2VyIGZvciB5b3VyIHNwZWNpZmljIGNhc2UuCisgICAgICAgICAgICAgICAgSXQgaXMgd29ydGggYmVhcmluZyBpbiBtaW5kIHRoYXQgZm9yIEdQTCBjb21wbGlhbmNlLCB0aGVyZSBuZWVkcworICAgICAgICAgICAgICAgIHRvIGJlIGVub3VnaCBpbmZvcm1hdGlvbiBzaGlwcGVkIHRvIGFsbG93IHNvbWVvbmUgZWxzZSB0bworICAgICAgICAgICAgICAgIHJlYnVpbGQgYW5kIHByb2R1Y2UgdGhlIHNhbWUgZW5kIHJlc3VsdCB5b3UgYXJlIHNoaXBwaW5nLgorICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgc2hhcmluZyB0aGUgc291cmNlIGNvZGUsIGFueSBwYXRjaGVzIGFwcGxpZWQgdG8gaXQsCisgICAgICAgICAgICAgICAgYW5kIGFsc28gYW55IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoYXQgcGFja2FnZQorICAgICAgICAgICAgICAgIHdhcyBjb25maWd1cmVkIGFuZCBidWlsdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gbGljZW5zaW5nIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsaWNlbnNpbmcnPkxpY2Vuc2luZzwvdWxpbms+IgorICAgICAgICAgICAgICAgIGFuZCAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9ucywgYm90aCBvZiB3aGljaCBhcmUgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBkaXNhYmxlIHRoZSBjdXJzb3Igb24gbXkgdG91Y2hzY3JlZW4gZGV2aWNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgZm9ybSBmYWN0b3IgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgU2V0IHRoZSA8ZmlsZW5hbWU+SEFWRV9UT1VDSFNDUkVFTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgb25lIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIQVZFX1RPVUNIU0NSRUVOPTEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBtYWtlIHN1cmUgY29ubmVjdGVkIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUgYnJvdWdodCB1cCBieSBkZWZhdWx0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW50ZXJmYWNlcyBmaWxlIHByb3ZpZGVkIGJ5IHRoZSBuZXRiYXNlIHJlY2lwZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnJpbmcgdXAgbmV0d29yayBpbnRlcmZhY2VzLgorICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgeW91IHdpbGwgbmVlZCB0byBhZGQgYSBCU1Atc3BlY2lmaWMgbmV0YmFzZSB0aGF0IGluY2x1ZGVzIGFuIGludGVyZmFjZXMKKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgbWlzY2VsbGFuZW91cyByZWNpcGUgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWRkIHRoZSBmb2xsb3dpbmcgZmlsZXMgdG8geW91ciBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2UvTUFDSElORS9pbnRlcmZhY2VzCisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2VfNS4wLmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGltYWdlcyB3aXRoIG1vcmUgZnJlZSBzcGFjZT8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgaW1hZ2VzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgMS4zIHRpbWVzIHRoZSBzaXplIG9mIHRoZSBwb3B1bGF0ZWQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFRvIGFmZmVjdCB0aGUgaW1hZ2Ugc2l6ZSwgeW91IG5lZWQgdG8gc2V0IHZhcmlvdXMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIFNpemU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPjxmaWxlbmFtZT5JTUFHRV9ST09URlNfU0laRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpbiBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgdGhlIHNpemUgYnkgdGFraW5nIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQgdGhlIGluaXRpYWwgcm9vdCBmaWxlc3lzdGVtIHNpemUgYmVmb3JlIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9ucyBzdWNoIGFzIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgaW1hZ2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgcmVxdWVzdGVkIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcmhlYWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPjxmaWxlbmFtZT5JTUFHRV9PVkVSSEVBRF9GQUNUT1I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgaW1hZ2Ugc2l6ZSwgd2hpY2ggaXMgMS4zIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZGl0aW9uYWwgRnJlZSBTcGFjZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+PGZpbGVuYW1lPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gYWRkIGFkZGl0aW9uYWwgZnJlZSBzcGFjZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFkZHMgdGhpcyBzcGFjZSB0byB0aGUgaW1hZ2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGRldGVybWluZXMgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX1NJWkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2h5IGRvbid0IHlvdSBzdXBwb3J0IGRpcmVjdG9yaWVzIHdpdGggc3BhY2VzIGluIHRoZSBwYXRobmFtZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGhhcyB0cmllZCB0byBkbyB0aGlzIGJlZm9yZSBidXQgdG9vCisgICAgICAgICAgICAgICAgbWFueSBvZiB0aGUgdG9vbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGVwZW5kcyBvbiwKKyAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+LCBicmVhayB3aGVuIHRoZXkgZmluZAorICAgICAgICAgICAgICAgIHNwYWNlcyBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICAgICAgVW50aWwgdGhhdCBzaXR1YXRpb24gY2hhbmdlcywgdGhlIHRlYW0gd2lsbCBub3Qgc3VwcG9ydCBzcGFjZXMKKyAgICAgICAgICAgICAgICBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgYW4gZXh0ZXJuYWwgdG9vbGNoYWluPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIGlzIHZlcnkgZmxleGlibGUgYW5kIGN1c3RvbWl6YWJsZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBwcmltYXJpbHkgY29udHJvbGxlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENNT0RFJz5UQ01PREU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHdoaWNoIDxmaWxlbmFtZT50Y21vZGUtKi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgdG8gaW5jbHVkZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluCisgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gaXMgImRlZmF1bHQiLAorICAgICAgICAgICAgICAgIHdoaWNoIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBpdHMgaW50ZXJuYWxseQorICAgICAgICAgICAgICAgIGJ1aWx0IHRvb2xjaGFpbiAoaS5lLiA8ZmlsZW5hbWU+dGNtb2RlLWRlZmF1bHQuaW5jPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG90aGVyIHBhdHRlcm5zIGFyZSBhY2NlcHRlZC4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCAiZXh0ZXJuYWwtKiIgcmVmZXJzIHRvIGV4dGVybmFsIHRvb2xjaGFpbnMuCisgICAgICAgICAgICAgICAgT25lIGV4YW1wbGUgaXMgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnQgZm9yIHRoaXMgdG9vbGNoYWluIHJlc2lkZXMgaW4gdGhlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllciBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXRodWIuY29tL01lbnRvckVtYmVkZGVkL21ldGEtc291cmNlcnkvJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uLCB5b3UgYWxzbyBuZWVkIGEKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvb2xjaGFpbiByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBmaWxlIG5lZWRzIHRvIHBhY2thZ2UgdXAgYW55IHByZS1idWlsdCBvYmplY3RzIGluCisgICAgICAgICAgICAgICAgdGhlIHRvb2xjaGFpbiBzdWNoIGFzIDxmaWxlbmFtZT5saWJnY2M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlic3RkY2MrKzwvZmlsZW5hbWU+LCBhbnkgbG9jYWxlcywgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhIGlkPSdob3ctZG9lcy10aGUteW9jdG8tcHJvamVjdC1vYnRhaW4tc291cmNlLWNvZGUtYW5kLXdpbGwtaXQtd29yay1iZWhpbmQtbXktZmlyZXdhbGwtb3ItcHJveHktc2VydmVyJz4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBvYnRhaW4gc291cmNlIGNvZGUgYW5kCisgICAgICAgICAgICAgICAgd2lsbCBpdCB3b3JrIGJlaGluZCBteSBmaXJld2FsbCBvciBwcm94eSBzZXJ2ZXI/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgd2F5IHRoZSBidWlsZCBzeXN0ZW0gb2J0YWlucyBzb3VyY2UgY29kZSBpcyBoaWdobHkKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZXR1cCB0aGUgYnVpbGQgc3lzdGVtIHRvIGdldCBzb3VyY2UgY29kZSBpbiBtb3N0CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzIGlmIEhUVFAgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgdHJpZXMgdGhlIGxvY2FsIGRvd25sb2FkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCBQb2t5IHRyaWVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSBzb3VyY2UsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uIGlzICJwb2t5IiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB1c2VzIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gYnkgZGVmYXVsdCBmb3IgU0NNLWJhc2VkCisgICAgICAgICAgICAgICAgc291cmNlcywgdXBzdHJlYW1zIGZvciBub3JtYWwgdGFyYmFsbHMsIGFuZCB0aGVuIGZhbGxzIGJhY2sKKyAgICAgICAgICAgICAgICB0byBhIG51bWJlciBvZiBvdGhlciBtaXJyb3JzIGluY2x1ZGluZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHNvdXJjZSBtaXJyb3IgaWYgdGhvc2UgZmFpbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdSBjb3VsZCBhZGQgYSBzcGVjaWZpYyBzZXJ2ZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBhdHRlbXB0IGJlZm9yZSBhbnkgb3RoZXJzIGJ5IGFkZGluZyBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBnaXQ6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGludGVyY2VwdCBHaXQsIEZUUCwKKyAgICAgICAgICAgICAgICBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gc291cmNlcyBtaXJyb3IuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIHRvIHBvaW50IHRvCisgICAgICAgICAgICAgICAgbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gdGhlIHByZXZpb3VzIHRlY2huaXF1ZSwgdGhlc2Ugb3B0aW9ucyBhbHNvIGV4aXN0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfTk9fTkVUV09SSyA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCB0ZWxscyBCaXRCYWtlIHRvIGlzc3VlIGFuIGVycm9yIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICB0cnlpbmcgdG8gYWNjZXNzIHRoZSBJbnRlcm5ldC4KKyAgICAgICAgICAgICAgICBUaGlzIHRlY2huaXF1ZSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZW5zdXJlIGNvZGUgYnVpbGRzCisgICAgICAgICAgICAgICAgb25seSBmcm9tIGxvY2FsIHNvdXJjZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCBsaW1pdHMgdGhlIGJ1aWxkIHN5c3RlbSB0byBwdWxsaW5nIHNvdXJjZQorICAgICAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gb25seS4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgdGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyBidWlsZHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgc3RhdGVtZW50IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgbWlycm9yCisgICAgICAgICAgICAgICAgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgVGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG1pcnJvciBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgSWYgbm90LCBob3dldmVyLCB0aGUgdGVjaG5pcXVlIGNhbiBzaW1wbHkgd2FzdGUgdGltZSBkdXJpbmcKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCBjb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBhcmUgYmVoaW5kIGFuCisgICAgICAgICAgICAgICAgSFRUUC1vbmx5IGZpcmV3YWxsLgorICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBsb25nIGFzCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gc2VydmVyIGlzIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgIEJCX0ZFVENIX1BSRU1JUlJPUk9OTFkgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyB3b3VsZCBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIGZldGNoIHNvdXJjZSBvdmVyIEhUVFAgYW5kIGFueSBuZXR3b3JrIGFjY2Vzc2VzIHRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiB3b3VsZCBmYWlsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhbHNvIGhvbm9ycyB0aGUgc3RhbmRhcmQgc2hlbGwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgPGZpbGVuYW1lPmh0dHBfcHJveHk8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZnRwX3Byb3h5PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmh0dHBzX3Byb3h5PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbGxfcHJveHk8L2ZpbGVuYW1lPiB0byByZWRpcmVjdCByZXF1ZXN0cyB0aHJvdWdoCisgICAgICAgICAgICAgICAgcHJveHkgc2VydmVycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9Xb3JraW5nX0JlaGluZF9hX05ldHdvcmtfUHJveHknPldvcmtpbmcgQmVoaW5kIGEgTmV0d29yayBQcm94eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDYW4gSSBnZXQgcmlkIG9mIGJ1aWxkIG91dHB1dCBzbyBJIGNhbiBzdGFydCBvdmVyPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWWVzIC0geW91IGNhbiBlYXNpbHkgZG8gdGhpcy4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgQml0QmFrZSB0byBidWlsZCBhbiBpbWFnZSwgYWxsIHRoZSBidWlsZCBvdXRwdXQKKyAgICAgICAgICAgICAgICBnb2VzIGludG8gdGhlIGRpcmVjdG9yeSBjcmVhdGVkIHdoZW4geW91IHJ1biB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgbmFtZWQgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gYnV0IGNhbiBiZSBuYW1lZAorICAgICAgICAgICAgICAgIGFueXRoaW5nIHlvdSB3YW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSwgaXMgdGhlIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUbyByZW1vdmUgYWxsIHRoZSBidWlsZCBvdXRwdXQgeWV0IHByZXNlcnZlIGFueSBzb3VyY2UgY29kZSBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkZWQgZmlsZXMgZnJvbSBwcmV2aW91cyBidWlsZHMsIHNpbXBseSByZW1vdmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoeSBkbyA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4ke2xpYmRpcn08L2ZpbGVuYW1lPiBoYXZlIHN0cmFuZ2UgdmFsdWVzIGZvciA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFeGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIG1pZ2h0IG5lZWQgdG8gYmUgdXNlZCBmcm9tIGEKKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhleSB3ZXJlCisgICAgICAgICAgICAgICAgaW5pdGlhbGx5IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICBDb21wbGljYXRpbmcgdGhpcyBzaXR1YXRpb24gaXMgdGhlIGZhY3QgdGhhdCBzb21ldGltZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSBleHBlY3RhdGlvbgorICAgICAgICAgICAgICAgIG9mIGJlaW5nIHJ1biBmcm9tIHRoYXQgaW5pdGlhbCBpbnN0YWxsYXRpb24gdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBtb3ZpbmcgdGhlbSBjYXVzZXMgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NlbmFyaW8gaXMgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIGZvciBwYWNrYWdlIG1haW50YWluZXJzCisgICAgICAgICAgICAgICAgb2YgbWFpbnN0cmVhbSBMaW51eCBkaXN0cmlidXRpb25zIGFzIHdlbGwgYXMgZm9yIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQXMgc3VjaCwgYSB3ZWxsLWVzdGFibGlzaGVkIHNvbHV0aW9uIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBNYWtlZmlsZXMsIEF1dG90b29scyBjb25maWd1cmF0aW9uIHNjcmlwdHMsIGFuZCBvdGhlciBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbXMgYXJlIGV4cGVjdGVkIHRvIHJlc3BlY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5saWJkaXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnN5c2NvbmZkaXI8L2ZpbGVuYW1lPiB0aGF0IGluZGljYXRlIHdoZXJlCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMsIGxpYnJhcmllcywgYW5kIGRhdGEgcmVzaWRlIHdoZW4gYSBwcm9ncmFtIGlzCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgcnVuLgorICAgICAgICAgICAgICAgIFRoZXkgYXJlIGFsc28gZXhwZWN0ZWQgdG8gcmVzcGVjdCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICBwcmVwZW5kZWQgdG8gYWxsIHRoZSBvdGhlciB2YXJpYWJsZXMgd2hlbiB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgaW5zdGFsbHMgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgcHJvZ3JhbSBkb2VzIG5vdCBhY3R1YWxseSBydW4gZnJvbQorICAgICAgICAgICAgICAgIHdpdGhpbiA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgYSByZWNpcGUgdG8gYnVpbGQgYQorICAgICAgICAgICAgICAgIHRhcmdldC1hcmNoaXRlY3R1cmUgcHJvZ3JhbSAoaS5lLiBvbmUgdGhhdCBpcyBpbnRlbmRlZCBmb3IKKyAgICAgICAgICAgICAgICBpbmNsdXNpb24gb24gdGhlIGltYWdlIGJlaW5nIGJ1aWx0KSwgdGhhdCBwcm9ncmFtIGV2ZW50dWFsbHkKKyAgICAgICAgICAgICAgICBydW5zIGZyb20gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIGEgdmFsdWUgb2YgIi91c3IvYmluIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIGEgdmFsdWUgb2YgIi91c3IvbGliIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliZGlyPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWVhbndoaWxlLCA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+IGlzIGEgcGF0aCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHRoZSByZWNpcGUgYnVpbGRzIGEgbmF0aXZlIHByb2dyYW0gKGkuZS4gb25lCisgICAgICAgICAgICAgICAgdGhhdCBpcyBpbnRlbmRlZCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUpLCB0aGF0IHByb2dyYW0KKyAgICAgICAgICAgICAgICBpcyBuZXZlciBpbnN0YWxsZWQgZGlyZWN0bHkgdG8gdGhlIGJ1aWxkIG1hY2hpbmUncyByb290CisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgcGF0aHMgd2l0aGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeSBmb3IgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4gYW5kIHJlbGF0ZWQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRvIGJldHRlciB1bmRlcnN0YW5kIHRoaXMsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIHBhdGhzCisgICAgICAgICAgICAgICAgd2hlcmUgdGhlIGZpcnN0IGlzIHJlbGF0aXZlbHkgbm9ybWFsIGFuZCB0aGUgc2Vjb25kIGlzIG5vdDoKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHRoZXNlIGxlbmd0aHkgZXhhbXBsZXMsIHRoZSBwYXRocyBhcmUgYXJ0aWZpY2lhbGx5CisgICAgICAgICAgICAgICAgICAgIGJyb2tlbiBhY3Jvc3MgbGluZXMgZm9yIHJlYWRhYmlsaXR5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9ob21lL21heHRvdGhlbWF4L3Bva3ktYm9vdGNoYXJ0Mi9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvemxpYi8KKyAgICAgICAgMS4yLjgtcjAvc3lzcm9vdC1kZXN0ZGlyL3Vzci9iaW4KKworICAgICAvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4LworICAgICAgICB6bGliLW5hdGl2ZS8xLjIuOC1yMC9zeXNyb290LWRlc3RkaXIvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvCisgICAgICAgIGJ1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2JpbgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFdmVuIGlmIHRoZSBwYXRocyBsb29rIHVudXN1YWwsIHRoZXkgYm90aCBhcmUgY29ycmVjdCAtCisgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGZvciBhIHRhcmdldCBhbmQgdGhlIHNlY29uZCBmb3IgYSBuYXRpdmUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZXNlIHBhdGhzIGFyZSBhIGNvbnNlcXVlbmNlIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVNURElSPC9maWxlbmFtZT4gbWVjaGFuaXNtIGFuZCB3aGlsZSB0aGV5CisgICAgICAgICAgICAgICAgYXBwZWFyIHN0cmFuZ2UsIHRoZXkgYXJlIGNvcnJlY3QgYW5kIGluIHByYWN0aWNlIHZlcnkgZWZmZWN0aXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzIHByb3ZpZGVkIGJ5IG15IDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gcmVjaXBlIGRvCisgICAgICAgICAgICAgICAgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUgdG8gb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGaWxlcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBuYXRpdmUgc3lzcm9vdCwgbXkgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgaW5zdGFsbGluZyB0byB0aGUgd3JvbmcgcGxhY2UsIG9yIEkgYW0gZ2V0dGluZyBwZXJtaXNzaW9ucworICAgICAgICAgICAgICAgIGVycm9ycyBkdXJpbmcgdGhlIGRvX2luc3RhbGwgdGFzayBpbiBteSByZWNpcGUhIFdoYXQgaXMgd3Jvbmc/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiByZXN1bHRzIHdoZW4gYSBidWlsZCBzeXN0ZW0gZG9lcworICAgICAgICAgICAgICAgIG5vdCByZWNvZ25pemUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdXBwbGllZCB0byBpdCBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoZSBpbmNpZGVudCB0aGF0IHByb21wdGVkIHRoaXMgRkFRIGVudHJ5IGludm9sdmVkIGEgTWFrZWZpbGUKKyAgICAgICAgICAgICAgICB0aGF0IHVzZWQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QklORElSPC9maWxlbmFtZT4gaW5zdGVhZCBvZiB0aGUgbW9yZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIHZhcmlhYmxlIDxmaWxlbmFtZT5iaW5kaXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgbWFrZWZpbGUncyBoYXJkY29kZWQgZGVmYXVsdCB2YWx1ZSBvZiAiL3Vzci9iaW4iIHdvcmtlZAorICAgICAgICAgICAgICAgIG1vc3Qgb2YgdGhlIHRpbWUsIGJ1dCBub3QgZm9yIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gdmFyaWFudC4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlLCBwZXJtaXNzaW9ucyBlcnJvcnMgbWlnaHQgYmUgY2F1c2VkCisgICAgICAgICAgICAgICAgYnkgYSBNYWtlZmlsZSB0aGF0IGlnbm9yZXMgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBvciB1c2VzCisgICAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBDaGVjayB0aGUgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgaWYgdGhlc2Uga2luZHMgb2YKKyAgICAgICAgICAgICAgICBpc3N1ZXMgZXhpc3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPC9xYW5kYXNldD4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjI3OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkYjg2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWY4YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZmJlYTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDc0NjRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NjcwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDIyNzE4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTYyNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTllYWMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9pbWFnZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0ZjJlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzljMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wYXRjaGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjZDAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTNkODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Bva3ktdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZTI3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM5Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmFlZmI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzUxNTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmIzZjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBjNmM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTBlMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9pbnRyb2R1Y3Rpb24ueG1sCkBAIC0wLDAgKzEsNTkxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLW1hbnVhbC1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9J2ludHJvLXdlbGNvbWUnPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IGZvY3VzZWQgb24gZW1iZWRkZWQgTGludXgKKyAgICAgICAgZGV2ZWxvcGVycy4KKyAgICAgICAgQW1vbmdzdCBvdGhlciB0aGluZ3MsIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoCisgICAgICAgIGlzIGJhc2VkIG9uIHRoZSBQb2t5IHByb2plY3QsIHRvIGNvbnN0cnVjdCBjb21wbGV0ZSBMaW51eCBpbWFnZXMuCisgICAgICAgIFlvdSBjYW4gZmluZCBjb21wbGV0ZSBpbnRyb2R1Y3RvcnkgYW5kIGdldHRpbmcgc3RhcnRlZCBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBieSByZWFkaW5nIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4uCisgICAgICAgIEZvciB0YXNrLWJhc2VkIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+CisgICAgICAgIGFuZCB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgRm9yIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBzdHJ1Y3R1cmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiB0cmFjaW5nIGFuZCBwcm9maWxpbmcgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCB3aGljaCBpcyB0aGUgdGFzayBleGVjdXRpb24gdG9vbCB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZCBvbiwgc2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgRmluYWxseSwgeW91IGNhbiBhbHNvIGZpbmQgbG90cyBvZiBZb2N0byBQcm9qZWN0IGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fSE9NRV9VUkw7Ij5Zb2N0byBQcm9qZWN0IHdlYnNpdGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbnRyby1tYW51YWxvdmVydmlldyc+CisgICAgPHRpdGxlPkRvY3VtZW50YXRpb24gT3ZlcnZpZXc8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGlzIHJlZmVyZW5jZSBtYW51YWwgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5Jz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgY29tcG9uZW50cyB0aGF0IG1ha2UgdXAgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSBpbmZvcm1hdGlvbiBhYm91dCBkZWJ1Z2dpbmcgaW1hZ2VzIGNyZWF0ZWQgaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0ZWNobmljYWwtZGV0YWlscyc+VGVjaG5pY2FsIERldGFpbHM8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRGVzY3JpYmVzIGZ1bmRhbWVudGFsIFlvY3RvIFByb2plY3QgY29tcG9uZW50cyBhcyB3ZWxsIGFzIGFuIGV4cGxhbmF0aW9uCisgICAgICAgICAgICAgICAgYmVoaW5kIGhvdyB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSBjYWNoZSB0byBzcGVlZCBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtaWdyYXRpb24nPk1pZ3JhdGluZyB0byBhIE5ld2VyIFlvY3RvIFByb2plY3QgUmVsZWFzZTwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgcmVsZWFzZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0aGF0IGhlbHBzIHlvdSBtb3ZlIGZyb20KKyAgICAgICAgICAgICAgICBvbmUgWW9jdG8gUHJvamVjdCBSZWxlYXNlIHRvIGFub3RoZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1zdHJ1Y3R1cmUnPkRpcmVjdG9yeSBTdHJ1Y3R1cmU8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRGVzY3JpYmVzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiBjcmVhdGVkCisgICAgICAgICAgICAgICAgZWl0aGVyIGJ5IHVucGFja2luZyBhIHJlbGVhc2VkIFlvY3RvIFByb2plY3QgdGFyYmFsbCBvbiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLAorICAgICAgICAgICAgICAgIG9yIGJ5IGNsb25pbmcgdGhlIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIGNsYXNzZXMgdXNlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzJz5UYXNrczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIHRhc2tzIGRlZmluZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIExpc3RzIGFuZCBkZXNjcmliZXMgUUEgd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1pbWFnZXMnPkltYWdlczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlIHN0YW5kYXJkIGltYWdlcyB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMnPkZlYXR1cmVzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyBtZWNoYW5pc21zIGZvciBjcmVhdGluZyBkaXN0cmlidXRpb24sIG1hY2hpbmUsIGFuZCBpbWFnZQorICAgICAgICAgICAgICAgIGZlYXR1cmVzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXZhcmlhYmxlcy1nbG9zJz5WYXJpYWJsZXMgR2xvc3Nhcnk8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJlc2VudHMgbW9zdCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2gKKyAgICAgICAgICAgICAgICB1c2VzIEJpdEJha2UuCisgICAgICAgICAgICAgICAgRW50cmllcyBkZXNjcmliZSB0aGUgZnVuY3Rpb24gb2YgdGhlIHZhcmlhYmxlIGFuZCBob3cgdG8gYXBwbHkgdGhlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXZhcmxvY2FsaXR5Jz5WYXJpYWJsZSBDb250ZXh0PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIHZhcmlhYmxlIGxvY2FsaXR5IG9yIGNvbnRleHQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2ZhcSc+RkFRPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGFuc3dlcnMgZm9yIGNvbW1vbmx5IGFza2VkIHF1ZXN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGVudmlyb25tZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZXNvdXJjZXMnPkNvbnRyaWJ1dGluZyB0byB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBndWlkYW5jZSBvbiBob3cgeW91IGNhbiBjb250cmlidXRlIGJhY2sgdG8gdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCisKKzxzZWN0aW9uIGlkPSdpbnRyby1yZXF1aXJlbWVudHMnPgorPHRpdGxlPlN5c3RlbSBSZXF1aXJlbWVudHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBGb3IgZ2VuZXJhbCBZb2N0byBQcm9qZWN0IHN5c3RlbSByZXF1aXJlbWVudHMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjeXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgorICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcm92aWRlcyBkZXRhaWxzIG9uIHN5c3RlbSByZXF1aXJlbWVudHMKKyAgICAgICAgbm90IGNvdmVyZWQgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz4KKyAgICAgICAgPHRpdGxlPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlIFlvY3RvIFByb2plY3QgaXMgc3VwcG9ydGVkIG9uIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnM6CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlcyBhcmUgdGVzdGVkIGFnYWluc3QgdGhlIHN0YWJsZSBMaW51eAorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25zIGluIHRoZSBmb2xsb3dpbmcgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hvdWxkIHdvcmsgb24gb3RoZXIgZGlzdHJpYnV0aW9ucyBidXQKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbiBpcyBub3QgcGVyZm9ybWVkIGFnYWluc3QgdGhlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdGhlIFlvY3RvIFByb2plY3QgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBhbmQgY3VycmVudGx5IGhhcyBubyBwbGFucyB0byBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIHJvbGxpbmctcmVsZWFzZXMgb3IgZGV2ZWxvcG1lbnQgZGlzdHJpYnV0aW9ucyBkdWUgdG8gdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRseSBjaGFuZ2luZyBuYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFdlIHdlbGNvbWUgcGF0Y2hlcyBhbmQgYnVnIHJlcG9ydHMsIGJ1dCBrZWVwIGluIG1pbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICBvdXIgcHJpb3JpdHkgaXMgb24gdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXMgbGlzdGVkIGJlbG93LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5jb3VudGVyIHByb2JsZW1zLCBwbGVhc2UgZ28gdG8KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPllvY3RvIFByb2plY3QgQnVnemlsbGE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgc3VibWl0IGEgYnVnLgorICAgICAgICAgICAgICAgICAgICBXZSBhcmUgaW50ZXJlc3RlZCBpbiBoZWFyaW5nIGFib3V0IHlvdXIgZXhwZXJpZW5jZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorPCEtLQorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTAuMDQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDExLjEwPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxMi4wNCAoTFRTKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTMuMTA8L3BhcmE+PC9saXN0aXRlbT4gLS0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxNC4wNCAoTFRTKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTQuMTA8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSAxNiAoVmVybmUpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSAxNyAoU3BoZXJpY2FsKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgcmVsZWFzZSAxOSAoU2NocsO2ZGluZ2VyJ3MgQ2F0KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgcmVsZWFzZSAyMCAoSGVpc2VuYnVnKTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmVkb3JhIHJlbGVhc2UgMjE8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDUuNiAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDUuNyAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDUuOCAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDYuMyAoRmluYWwpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DZW50T1MgcmVsZWFzZSA2Lng8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNy54PC9wYXJhPjwvbGlzdGl0ZW0+Cis8IS0tICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDYuMCAoU3F1ZWV6ZSk8L3BhcmE+PC9saXN0aXRlbT4gLS0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy54IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggOC54IChKZXNzaWUpPC9wYXJhPjwvbGlzdGl0ZW0+Cis8IS0tICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuMSAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuMiAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuMyAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuNCAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuNSAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EZWJpYW4gR05VL0xpbnV4IDcuNiAoV2hlZXp5KTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPm9wZW5TVVNFIDExLjQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTIuMTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMi4yPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPm9wZW5TVVNFIDEyLjM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTMuMTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTMuMjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFdoaWxlIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gYXR0ZW1wdHMgdG8gZW5zdXJlIGFsbCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICByZWxlYXNlcyBhcmUgb25lIGh1bmRyZWQgcGVyY2VudCBjb21wYXRpYmxlIHdpdGggZWFjaCBvZmZpY2lhbGx5CisgICAgICAgICAgICBzdXBwb3J0ZWQgTGludXggZGlzdHJpYnV0aW9uLCBpbnN0YW5jZXMgbWlnaHQgZXhpc3Qgd2hlcmUgeW91CisgICAgICAgICAgICBlbmNvdW50ZXIgYSBwcm9ibGVtIHdoaWxlIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IG9uIGEgc3BlY2lmaWMKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgQ2VudE9TIDYuNCBkaXN0cmlidXRpb24gZG9lcyBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIEd0aysgMi4yMC4wIGFuZCBQeUd0ayAyLjIxLjAgKG9yIGhpZ2hlcikgcGFja2FnZXMsIHdoaWNoIGFyZQorICAgICAgICAgICAgcmVxdWlyZWQgdG8gcnVuCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+LgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPgorICAgIDx0aXRsZT5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHlvdSBuZWVkIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBjYW4KKyAgICAgICAgICAgIGJlIGxhcmdlIHdoZW4gY292ZXJpbmcgYWxsIGJ1aWxkIHNjZW5hcmlvcyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyByZXF1aXJlZCBwYWNrYWdlcyBhY2NvcmRpbmcgdG8KKyAgICAgICAgICAgIExpbnV4IGRpc3RyaWJ1dGlvbiBhbmQgZnVuY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndWJ1bnR1LXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5VYnVudHUgYW5kIERlYmlhbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgYnkgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBnaXZlbiBhIHN1cHBvcnRlZCBVYnVudHUgb3IgRGViaWFuIExpbnV4IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBidWlsZCBzeXN0ZW0gaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3NzNC1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxlZCwgeW91CisgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGV4cGVyaWVuY2UgUUVNVSBidWlsZCBmYWlsdXJlcyBkdWUgdG8gdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBpdHMgb3duIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlL2xpbnV4L3NvdW5kY2FyZC5oPC9maWxlbmFtZT4gb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIERlYmlhbiBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gaW50byB0aGlzIHNpdHVhdGlvbiwgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgc29sdXRpb25zIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGJ1aWxkLWRlcCBxZW11CisgICAgICQgc3VkbyBhcHQtZ2V0IHJlbW92ZSBvc3M0LWRldgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzc2VudGlhbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCB0byBidWlsZCBhbiBpbWFnZSBvbiBhIGhlYWRsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgJlVCVU5UVV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HcmFwaGljYWwgYW5kIEVjbGlwc2UgUGx1Zy1JbiBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHJlY29tbWVuZGVkIGlmIHRoZSBob3N0IHN5c3RlbSBoYXMgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb3IgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIElERToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBsaWJzZGwxLjItZGV2IHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG9jdW1lbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYnVpbGQgb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIG1hbnVhbHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgbWFrZSB4c2x0cHJvYyBkb2Nib29rLXV0aWxzIGZvcCBkYmxhdGV4IHhtbHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QURUIEluc3RhbGxlciBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLWFkdC1pbnN0YWxsZXInPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgSW5zdGFsbGVyPC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBsaWJnbGliMi4wLWRldgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ZlZG9yYS1wYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+RmVkb3JhIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBieSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGdpdmVuIGEgc3VwcG9ydGVkIEZlZG9yYSBMaW51eCBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3NlbnRpYWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgdG8gYnVpbGQgYW4gaW1hZ2UgZm9yIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsICZGRURPUkFfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R3JhcGhpY2FsIGFuZCBFY2xpcHNlIFBsdWctSW4gRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyByZWNvbW1lbmRlZCBpZiB0aGUgaG9zdCBzeXN0ZW0gaGFzIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IG9yIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICBJREU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBTREwtZGV2ZWwgeHRlcm0gcGVybC1UaHJlYWQtUXVldWUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIG1ha2UgZG9jYm9vay1zdHlsZS1kc3NzbCBkb2Nib29rLXN0eWxlLXhzbCBcCisgICAgIGRvY2Jvb2stZHRkcyBkb2Nib29rLXV0aWxzIGZvcCBsaWJ4c2x0IGRibGF0ZXggeG1sdG8geHNsdHByb2MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZ2xpYjItZGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuc3VzZS1wYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+b3BlblNVU0UgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGJ5IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgZ2l2ZW4gYSBzdXBwb3J0ZWQgb3BlblNVU0UgTGludXggZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXNzZW50aWFsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkIGFuIGltYWdlIGZvciBhIGhlYWRsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB6eXBwZXIgaW5zdGFsbCAmT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R3JhcGhpY2FsIGFuZCBFY2xpcHNlIFBsdWctSW4gRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyByZWNvbW1lbmRlZCBpZiB0aGUgaG9zdCBzeXN0ZW0gaGFzIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IG9yIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICBJREU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB6eXBwZXIgaW5zdGFsbCBsaWJTREwtZGV2ZWwgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsIG1ha2UgZm9wIHhzbHRwcm9jIGRibGF0ZXggeG1sdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZ2xpYjItZGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjZW50b3MtcGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNlbnRPUyBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgYnkgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBnaXZlbiBhIHN1cHBvcnRlZCBDZW50T1MgTGludXggZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgQ2VudE9TIDYueCwgc29tZSBvZiB0aGUgdmVyc2lvbnMgb2YgdGhlIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIGRpc3RyaWJ1dGlvbiBhcmUgdG9vIG9sZCAoZS5nLiBHaXQsIFB5dGhvbiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRhcikuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGluc3RhbGwgdGhlIGJ1aWxkdG9vbHMgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSB2ZXJzaW9ucyB0aGF0IHdpbGwgd29yayB3aXRoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIGJ1aWxkdG9vbHMgdGFyYmFsbCwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz5SZXF1aXJlZCBHaXQsIFRhciwgYW5kIFB5dGhvbiBWZXJzaW9uczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXNzZW50aWFsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkIGFuIGltYWdlIGZvciBhIGhlYWRsZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCAmQ0VOVE9TX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdyYXBoaWNhbCBhbmQgRWNsaXBzZSBQbHVnLUluIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgcmVjb21tZW5kZWQgaWYgdGhlIGhvc3Qgc3lzdGVtIGhhcyBncmFwaGljcworICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBvciBpZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICAgICAgSURFOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG9jdW1lbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYnVpbGQgb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIG1hbnVhbHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBtYWtlIGRvY2Jvb2stc3R5bGUtZHNzc2wgZG9jYm9vay1zdHlsZS14c2wgXAorICAgICBkb2Nib29rLWR0ZHMgZG9jYm9vay11dGlscyBmb3AgbGlieHNsdCBkYmxhdGV4IHhtbHRvIHhzbHRwcm9jCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QURUIEluc3RhbGxlciBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLWFkdC1pbnN0YWxsZXInPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgSW5zdGFsbGVyPC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGdsaWIyLWRldmVsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz4KKyAgICAgICAgPHRpdGxlPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSB0aGUgYnVpbGQgc3lzdGVtLCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICBtdXN0IG1lZXQgdGhlIGZvbGxvd2luZyB2ZXJzaW9uIHJlcXVpcmVtZW50cyBmb3IgR2l0LCB0YXIsIGFuZAorICAgICAgICAgICAgUHl0aG9uOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l0IDEuNy44IG9yIGdyZWF0ZXI8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+dGFyIDEuMjQgb3IgZ3JlYXRlcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QeXRob24gMi43LjMgb3IgZ3JlYXRlciBub3QgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgICAgIFB5dGhvbiAzLngsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBkb2VzIG5vdCBtZWV0IGFsbCB0aGVzZSByZXF1aXJlbWVudHMsCisgICAgICAgICAgICB5b3UgY2FuIHJlc29sdmUgdGhpcyBieSBpbnN0YWxsaW5nIGEgPGZpbGVuYW1lPmJ1aWxkdG9vbHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGFyYmFsbCB0aGF0IGNvbnRhaW5zIHRoZXNlIHRvb2xzLgorICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhlIHRhcmJhbGwgb25lIG9mIHR3byB3YXlzOiBkb3dubG9hZCBhIHByZS1idWlsdAorICAgICAgICAgICAgdGFyYmFsbCBvciB1c2UgQml0QmFrZSB0byBidWlsZCB0aGUgdGFyYmFsbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkb3dubG9hZGluZy1hLXByZS1idWlsdC1idWlsZHRvb2xzLXRhcmJhbGwnPgorICAgICAgICAgICAgPHRpdGxlPkRvd25sb2FkaW5nIGEgUHJlLUJ1aWx0IDxmaWxlbmFtZT5idWlsZHRvb2xzPC9maWxlbmFtZT4gVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvd25sb2FkaW5nIGFuZCBydW5uaW5nIGEgcHJlLWJ1aWx0IGJ1aWxkdG9vbHMgaW5zdGFsbGVyIGlzCisgICAgICAgICAgICAgICAgdGhlIGVhc2llc3Qgb2YgdGhlIHR3byBtZXRob2RzIGJ5IHdoaWNoIHlvdSBjYW4gZ2V0IHRoZXNlIHRvb2xzOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRlIGFuZCBkb3dubG9hZCB0aGUgPGZpbGVuYW1lPiouc2g8L2ZpbGVuYW1lPiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMveW9jdG8veW9jdG8tJkRJU1RSTzsvYnVpbGR0b29scy8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGhlIGluc3RhbGxhdGlvbiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2ggcG9reS1nbGliYy14ODZfNjQtYnVpbGR0b29scy10YXJiYWxsLXg4Nl82NC1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgZXhlY3V0aW9uLCBhIHByb21wdCBhcHBlYXJzIHRoYXQgYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBjaG9vc2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXItdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIHRoZSB0b29scyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYnkgdXNpbmcgYQorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIC9ob21lLzxyZXBsYWNlYWJsZT55b3VyX3VzZXJuYW1lPC9yZXBsYWNlYWJsZT4vYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cC1pNTg2LXBva3ktbGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgeW91IG5lZWQgdG8gc3VwcGx5IHlvdXIgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBhbmQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cmUgdG8gdXNlIHRoZSByaWdodCBmaWxlIChpLmUuIGk1ODUgb3IgeDg2LTY0KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgc291cmNlZCB0aGUgc2V0dXAgc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2xzIGFyZSBhZGRlZCB0byA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IG90aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyByZXF1aXJlZCB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0b29scyBhcmUgaW5pdGlhbGl6ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0cyBhcmUgd29ya2luZyB2ZXJzaW9ucyB2ZXJzaW9ucyBvZiBHaXQsIHRhciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBhbmQgPGZpbGVuYW1lPmNocnBhdGg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmcteW91ci1vd24tYnVpbGR0b29scy10YXJiYWxsJz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBZb3VyIE93biA8ZmlsZW5hbWU+YnVpbGR0b29sczwvZmlsZW5hbWU+IFRhcmJhbGw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCdWlsZGluZyBhbmQgcnVubmluZyB5b3VyIG93biBidWlsZHRvb2xzIGluc3RhbGxlciBhcHBsaWVzCisgICAgICAgICAgICAgICAgb25seSB3aGVuIHlvdSBoYXZlIGEgYnVpbGQgaG9zdCB0aGF0IGNhbiBhbHJlYWR5IHJ1biBCaXRCYWtlLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHVzZSB0aGF0IG1hY2hpbmUgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICB0YWtlIHN0ZXBzIHRvIHRyYW5zZmVyIGFuZCBydW4gaXQgb24gYQorICAgICAgICAgICAgICAgIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBtZWV0IHRoZSBtaW5pbWFsIEdpdCwgdGFyLCBhbmQgUHl0aG9uCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgc3RlcHMgdG8gdGFrZSB0byBidWlsZCBhbmQgcnVuIHlvdXIgb3duCisgICAgICAgICAgICAgICAgYnVpbGR0b29scyBpbnN0YWxsZXI6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgbWFjaGluZSB0aGF0IGlzIGFibGUgdG8gcnVuIEJpdEJha2UsCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBzdXJlIHlvdSBoYXZlIHNldCB1cCB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1biB0aGUgQml0QmFrZSBjb21tYW5kIHRvIGJ1aWxkIHRoZSB0YXJiYWxsOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgYnVpbGR0b29scy10YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyB3aGV0aGVyIHlvdSBidWlsZCB0b29scyBmb3IgYSAzMi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIDY0LWJpdCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgYnVpbGQgY29tcGxldGVzLCB5b3UgY2FuIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRvb2xzIGluIHRoZSA8ZmlsZW5hbWU+dG1wL2RlcGxveS9zZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnN0YWxsZXIgZmlsZSBoYXMgdGhlIHN0cmluZyAiYnVpbGR0b29scyIKKyAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXIgdGhlIDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3QgdG8gdGhlIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBtZWV0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICBHaXQsIHRhciwgb3IgUHl0aG9uIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgbWFjaGluZSB0aGF0IGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgcnVuIHRoZSA8ZmlsZW5hbWU+LnNoPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICB0byBpbnN0YWxsIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2ggcG9reS1nbGliYy14ODZfNjQtYnVpbGR0b29scy10YXJiYWxsLXg4Nl82NC1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgRHVyaW5nIGV4ZWN1dGlvbiwgYSBwcm9tcHQgYXBwZWFycyB0aGF0IGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGNob29zZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9ob21lLzxyZXBsYWNlYWJsZT55b3VyX3VzZXJuYW1lPC9yZXBsYWNlYWJsZT4vYnVpbGR0b29scworICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgdGhlIHRvb2xzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBieSB1c2luZyBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXJfdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwLWk1ODYtcG9reS1saW51eAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgbmVlZCB0byBzdXBwbHkgeW91ciBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGFuZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0byB1c2UgdGhlIHJpZ2h0IGZpbGUgKGkuZS4gaTU4NSBvciB4ODYtNjQpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBzZXR1cCBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbHMgYXJlIGFkZGVkIHRvIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzIGFyZSBpbml0aWFsaXplZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRzIGFyZSB3b3JraW5nIHZlcnNpb25zIHZlcnNpb25zIG9mIEdpdCwgdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGFuZCA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ludHJvLWdldGl0Jz4KKyAgICA8dGl0bGU+T2J0YWluaW5nIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbSBtYWtlcyB0aGUgWW9jdG8gUHJvamVjdCBhdmFpbGFibGUgdGhyb3VnaCBhIG51bWJlcgorICAgICAgICBvZiBtZXRob2RzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgUmVwb3NpdG9yaWVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgV29ya2luZyBmcm9tIGEgY29weSBvZiB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgaXMgdGhlCisgICAgICAgICAgICAgICAgcHJlZmVycmVkIG1ldGhvZCBmb3Igb2J0YWluaW5nIGFuZCB1c2luZyBhIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICByZWxlYXNlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdmlldyB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB5b3UgY2FuIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWxlYXNlczo8L2VtcGhhc2lzPiBTdGFibGUsIHRlc3RlZAorICAgICAgICAgICAgICAgIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgYXMgdGFyYmFsbHMgdGhyb3VnaAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3lvY3RvLycvPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmlnaHRseSBCdWlsZHM6PC9lbXBoYXNpcz4gVGhlc2UKKyAgICAgICAgICAgICAgICB0YXJiYWxsIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQUJfTklHSFRMWV9VUkw7Jy8+LgorICAgICAgICAgICAgICAgIFRoZXNlIGJ1aWxkcyBpbmNsdWRlIFlvY3RvIFByb2plY3QgcmVsZWFzZXMsIG1ldGEtdG9vbGNoYWluCisgICAgICAgICAgICAgICAgdGFyYmFsbCBpbnN0YWxsYXRpb24gc2NyaXB0cywgYW5kIGV4cGVyaW1lbnRhbCBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgV2Vic2l0ZTo8L2VtcGhhc2lzPiBZb3UgY2FuCisgICAgICAgICAgICAgICAgZmluZCB0YXJiYWxsIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBzdXBwb3J0ZWQgQlNQcworICAgICAgICAgICAgICAgIGF0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEFsb25nIHdpdGggdGhlc2UgZG93bmxvYWRzLCB5b3UgY2FuIGZpbmQgbG90cyBvZiBvdGhlcgorICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGF0IHRoaXMgc2l0ZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW50cm8tZ2V0aXQtZGV2Jz4KKyAgICA8dGl0bGU+RGV2ZWxvcG1lbnQgQ2hlY2tvdXRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgRGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgcmVxdWlyZXMgYSBsb2NhbAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIFlvdSBjYW4gc2V0IHVwIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGJ5IGNsb25pbmcgYSBjb3B5IG9mIHRoZSB1cHN0cmVhbQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwb2t5Jz5wb2t5PC91bGluaz4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZG8gdGhpcywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9taWdyYXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNzVlYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9taWdyYXRpb24ueG1sCkBAIC0wLDAgKzEsMjMxOSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J21pZ3JhdGlvbic+Cis8dGl0bGU+TWlncmF0aW5nIHRvIGEgTmV3ZXIgWW9jdG8gUHJvamVjdCBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgaW5mb3JtYXRpb24geW91IGNhbiB1c2UgdG8gbWlncmF0ZSB3b3JrIHRvIGEKKyAgICAgICAgbmV3ZXIgWW9jdG8gUHJvamVjdCByZWxlYXNlLiAgWW91IGNhbiBmaW5kIHRoZSBzYW1lIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICByZWxlYXNlIG5vdGVzIGZvciBhIGdpdmVuIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nZ2VuZXJhbC1taWdyYXRpb24tY29uc2lkZXJhdGlvbnMnPgorICAgIDx0aXRsZT5HZW5lcmFsIE1pZ3JhdGlvbiBDb25zaWRlcmF0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU29tZSBjb25zaWRlcmF0aW9ucyBhcmUgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyBZb2N0byBQcm9qZWN0CisgICAgICAgIHJlbGVhc2UuCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBpbmZvcm1hdGlvbiB5b3Ugc2hvdWxkIGNvbnNpZGVyIHdoZW4KKyAgICAgICAgbWlncmF0aW5nIHRvIGFueSBuZXcgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZWFsaW5nIHdpdGggQ3VzdG9taXplZCBSZWNpcGVzPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgSXNzdWVzIGNvdWxkIGFyaXNlIGlmIHlvdSB0YWtlIG9sZGVyIHJlY2lwZXMgdGhhdCBjb250YWluCisgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgYW5kIHNpbXBseSBjb3B5IHRoZW0gZm9yd2FyZCBleHBlY3RpbmcgdGhlbQorICAgICAgICAgICAgICAgIHRvIHdvcmsgYWZ0ZXIgeW91IG1pZ3JhdGUgdG8gbmV3IFlvY3RvIFByb2plY3QgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSByZWNpcGUgaW4geW91ciBsYXllciB0aGF0IGlzCisgICAgICAgICAgICAgICAgYSBjdXN0b21pemVkIHZlcnNpb24gb2YgYSBjb3JlIHJlY2lwZSBjb3BpZWQgZnJvbSB0aGUgZWFybGllcgorICAgICAgICAgICAgICAgIHJlbGVhc2UsIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIHVzZSBvZiBhbiBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBtaWdyYXRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBZb2N0byBQcm9qZWN0LCB0aGUKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSAoZS5nLiBwZXJoYXBzIGFuIGluY2x1ZGUgZmlsZSB1c2VkIGJ5IHRoZSByZWNpcGUpCisgICAgICAgICAgICAgICAgY291bGQgaGF2ZSBjaGFuZ2VkIGluIGEgd2F5IHRoYXQgd291bGQgYnJlYWsgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFNheSwgZm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaXMgcmVtb3ZlZCBmcm9tIGFuIGluY2x1ZGUgZmlsZQorICAgICAgICAgICAgICAgIGFuZCB0aGUgY3VzdG9taXplZCByZWNpcGUgdHJpZXMgdG8gY2FsbCB0aGF0IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjb3VsZCAiZm9yd2FyZC1wb3J0IiBhbGwgeW91ciBjdXN0b21pemF0aW9ucyBpbiB5b3VyCisgICAgICAgICAgICAgICAgcmVjaXBlIHNvIHRoYXQgZXZlcnl0aGluZyB3b3JrcyBmb3IgdGhlIG5ldyByZWxlYXNlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHRoZSBvcHRpbWFsIHNvbHV0aW9uIGFzIHlvdSB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgdG8gcmVwZWF0IHRoaXMgcHJvY2VzcyB3aXRoIGVhY2ggbmV3IHJlbGVhc2UgaWYgY2hhbmdlcworICAgICAgICAgICAgICAgIG9jY3VyIHRoYXQgZ2l2ZSByaXNlIHRvIHByb2JsZW1zLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBiZXR0ZXIgc29sdXRpb24gKHdoZXJlIHByYWN0aWNhbCkgaXMgdG8gdXNlIGFwcGVuZAorICAgICAgICAgICAgICAgIGZpbGVzICg8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+KSB0byBjYXB0dXJlIGFueQorICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb25zIHlvdSB3YW50IHRvIG1ha2UgdG8gYSByZWNpcGUuCisgICAgICAgICAgICAgICAgRG9pbmcgc28sIGlzb2xhdGVzIHlvdXIgY2hhbmdlcyBmcm9tIHRoZSBtYWluIHJlY2lwZSBtYWtpbmcKKyAgICAgICAgICAgICAgICB0aGVtIG11Y2ggbW9yZSBtYW5hZ2VhYmxlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWV0aW1lcyBpdCBpcyBub3QgcHJhY3RpY2FsIHRvIHVzZSBhbiBhcHBlbmQKKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIG9mIHRoaXMgaXMgd2hlbiBpbnRyb2R1Y2luZyBhIG5ld2VyIG9yIG9sZGVyCisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBhIHJlY2lwZSBpbiBhbm90aGVyIGxheWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5VcGRhdGluZyBBcHBlbmQgRmlsZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICBTaW5jZSBhcHBlbmQgZmlsZXMgZ2VuZXJhbGx5IG9ubHkgY29udGFpbiB5b3VyIGN1c3RvbWl6YXRpb25zLAorICAgICAgICAgICAgICAgIHRoZXkgb2Z0ZW4gZG8gbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQgZm9yIG5ldyByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGUgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaXMKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIChpLmUuIGl0cworICAgICAgICAgICAgICAgIG5hbWUgZG9lcyBub3QgdXNlIHRoZSAlIHdpbGRjYXJkKSBhbmQgdGhlIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHdoaWNoIGl0IGlzIGFwcGVuZGluZyBoYXMgY2hhbmdlZCwgdGhlbiB5b3Ugd2lsbAorICAgICAgICAgICAgICAgIGF0IGEgbWluaW11bSBuZWVkIHRvIHJlbmFtZSB0aGUgYXBwZW5kIGZpbGUgdG8gbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgQSBtaXNtYXRjaCBiZXR3ZWVuIGFuIGFwcGVuZCBmaWxlIGFuZCBpdHMgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIHdpbGwKKyAgICAgICAgICAgICAgICB0cmlnZ2VyIGFuIGVycm9yIGR1cmluZyBwYXJzaW5nLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5EZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY3VzdG9taXphdGlvbiB0aGUgYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICBhcHBsaWVzLCBvdGhlciBpbmNvbXBhdGliaWxpdGllcyBtaWdodCBvY2N1ciB3aGVuIHlvdQorICAgICAgICAgICAgICAgIHVwZ3JhZGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgYXBwZW5kIGZpbGUgYXBwbGllcyBhIHBhdGNoIGFuZCB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUgdG8gd2hpY2ggaXQgaXMgYXBwZW5kaW5nIGlzIHVwZGF0ZWQgdG8gYSBuZXdlcgorICAgICAgICAgICAgICAgIHZlcnNpb24sIHRoZSBwYXRjaCBtaWdodCBubyBsb25nZXIgYXBwbHkuCisgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSBhbmQgYXNzdW1pbmcgdGhlIHBhdGNoIGlzIHN0aWxsIG5lZWRlZCwKKyAgICAgICAgICAgICAgICB5b3UgbXVzdCBtb2RpZnkgdGhlIHBhdGNoIGZpbGUgc28gdGhhdCBpdCBkb2VzIGFwcGx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS4zLXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS4zIFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPScxLjMtbG9jYWwtY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Mb2NhbCBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERpZmZlcmVuY2VzIGluY2x1ZGUgY2hhbmdlcyBmb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfTUlSUk9SUyc+PGZpbGVuYW1lPlNTVEFURV9NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXNzdGF0ZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5TU1RBVEVfTUlSUk9SUzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY2FjaGUgKHNzdGF0ZS1jYWNoZSksIGFzIHBvaW50ZWQgdG8gYnkKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4sIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICBub3cgaGFzIHR3by1jaGFyYWN0ZXIgc3ViZGlyZWN0b3JpZXMgdG8gcHJldmVudCBpc3N1ZXMgYXJpc2luZworICAgICAgICAgICAgICAgIGZyb20gdG9vIG1hbnkgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEFsc28sIG5hdGl2ZSBzc3RhdGUtY2FjaGUgcGFja2FnZXMgd2lsbCBnbyBpbnRvIGEgc3ViZGlyZWN0b3J5IG5hbWVkIHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIGRpc3RybyBJRCBzdHJpbmcuCisgICAgICAgICAgICAgICAgSWYgeW91IGNvcHkgdGhlIG5ld2x5IHN0cnVjdHVyZWQgc3N0YXRlLWNhY2hlIHRvIGEgbWlycm9yIGxvY2F0aW9uCisgICAgICAgICAgICAgICAgKGVpdGhlciBsb2NhbCBvciByZW1vdGUpIGFuZCB0aGVuIHBvaW50IHRvIGl0IGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYXBwZW5kICJQQVRIIiB0byB0aGUgZW5kIG9mIHRoZSBtaXJyb3IgVVJMIHNvIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgcGF0aCB1c2VkIGJ5IEJpdEJha2UgYmVmb3JlIHRoZSBtaXJyb3Igc3Vic3RpdHV0aW9uIGlzCisgICAgICAgICAgICAgICAgYXBwZW5kZWQgdG8gdGhlIHBhdGggdXNlZCB0byBhY2Nlc3MgdGhlIG1pcnJvci4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTU1RBVEVfTUlSUk9SUyA9ICJmaWxlOi8vLiogaHR0cDovLzxyZXBsYWNlYWJsZT5zb21lc2VydmVyPC9yZXBsYWNlYWJsZT4udGxkL3NoYXJlL3NzdGF0ZS9QQVRIIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLWJibGF5ZXJzLWNvbmYnPgorICAgICAgICAgICAgPHRpdGxlPmJibGF5ZXJzLmNvbmY8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllciBjb25zaXN0cyBvZiB0d28gcGFydHMKKyAgICAgICAgICAgICAgICB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIFBva3kgcmVmZXJlbmNlIGRpc3RyaWJ1dGlvbiBhbmQgdGhlCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIGhhcmR3YXJlIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpLCByZXNwZWN0aXZlbHk6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgQml0QmFrZSBvciBIb2IgZm9yIHRoZSBmaXJzdCB0aW1lIGFmdGVyIHVwZ3JhZGluZywKKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHdpbGwgYmUKKyAgICAgICAgICAgICAgICB1cGRhdGVkIHRvIGhhbmRsZSB0aGlzIGNoYW5nZSBhbmQgeW91IHdpbGwgYmUgYXNrZWQgdG8KKyAgICAgICAgICAgICAgICByZS1ydW4gb3IgcmVzdGFydCBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nMS4zLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEaWZmZXJlbmNlcyBpbmNsdWRlIGNoYW5nZXMgZm9yIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QeXRob24gZnVuY3Rpb24gd2hpdGVzcGFjZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cHJvdG89PC9maWxlbmFtZT4gaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGFzayByZWNpcGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlbW92ZWQgcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1weXRob24tZnVuY3Rpb24td2hpdGVzcGFjZSc+CisgICAgICAgICAgICA8dGl0bGU+UHl0aG9uIEZ1bmN0aW9uIFdoaXRlc3BhY2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbGwgUHl0aG9uIGZ1bmN0aW9ucyBtdXN0IG5vdyB1c2UgZm91ciBzcGFjZXMgZm9yIGluZGVudGF0aW9uLgorICAgICAgICAgICAgICAgIFByZXZpb3VzbHksIGFuIGluY29uc2lzdGVudCBtaXggb2Ygc3BhY2VzIGFuZCB0YWJzIGV4aXN0ZWQsCisgICAgICAgICAgICAgICAgd2hpY2ggbWFkZSBleHRlbmRpbmcgdGhlc2UgZnVuY3Rpb25zIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbXBsaWNhdGVkIGdpdmVuIHRoYXQgUHl0aG9uIHRyZWF0cyB3aGl0ZXNwYWNlIGFzCisgICAgICAgICAgICAgICAgc3ludGFjdGljYWxseSBzaWduaWZpY2FudC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGRlZmluaW5nIG9yIGV4dGVuZGluZyBhbnkgUHl0aG9uIGZ1bmN0aW9ucyAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9wYWNrYWdlczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT4gYW5kIHNvIGZvcnRoKSBpbiBjdXN0b20gcmVjaXBlcworICAgICAgICAgICAgICAgIG9yIGNsYXNzZXMsIHlvdSBuZWVkIHRvIGVuc3VyZSB5b3UgYXJlIHVzaW5nIGNvbnNpc3RlbnQKKyAgICAgICAgICAgICAgICBmb3VyLXNwYWNlIGluZGVudGF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtcHJvdG89LWluLXNyYy11cmknPgorICAgICAgICAgICAgPHRpdGxlPnByb3RvPSBpbiBTUkNfVVJJPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW55IHVzZSBvZiA8ZmlsZW5hbWU+cHJvdG89PC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIDxmaWxlbmFtZT5wcm90b2NvbD08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGFwcGxpZXMgdG8gdGhlIGZvbGxvd2luZyBVUklzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c3ZuOi8vPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ienI6Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIE90aGVyIFVSSXMgd2VyZSBhbHJlYWR5IHVzaW5nIDxmaWxlbmFtZT5wcm90b2NvbD08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBpbXByb3ZlcyBjb25zaXN0ZW5jeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLW5hdGl2ZXNkayc+CisgICAgICAgICAgICA8dGl0bGU+bmF0aXZlc2RrPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1ZmZpeCA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gaXMgbm93IGltcGxlbWVudGVkCisgICAgICAgICAgICAgICAgYXMgYSBwcmVmaXgsIHdoaWNoIHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhlIHBhY2thZ2luZyBjb2RlIGZvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiByZWNpcGVzLgorICAgICAgICAgICAgICAgIEFsbCBjdXN0b20gPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMgYW5kIGFueQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstKjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1uYXRpdmVzZGs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXRhc2stcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+VGFzayBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgIlRhc2siIHJlY2lwZXMgYXJlIG5vdyBrbm93biBhcyAiUGFja2FnZSBncm91cHMiIGFuZCBoYXZlCisgICAgICAgICAgICAgICAgYmVlbiByZW5hbWVkIGZyb20gPGZpbGVuYW1lPnRhc2stKi5iYjwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC0qLmJiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRXhpc3RpbmcgcmVmZXJlbmNlcyB0byB0aGUgcHJldmlvdXMgPGZpbGVuYW1lPnRhc2stKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbmFtZXMgc2hvdWxkIHdvcmsgaW4gbW9zdCBjYXNlcyBhcyB0aGVyZSBpcyBhbiBhdXRvbWF0aWMKKyAgICAgICAgICAgICAgICB1cGdyYWRlIHBhdGggZm9yIG1vc3QgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IHNob3VsZCB1cGRhdGUgcmVmZXJlbmNlcyBpbiB5b3VyIG93biByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFzIHRoZXkgY291bGQgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHNvIHJlbmFtZSBhbnkgY3VzdG9tIDxmaWxlbmFtZT50YXNrLSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHJlY2lwZXMgdG8gPGZpbGVuYW1lPnBhY2thZ2Vncm91cC0qPC9maWxlbmFtZT4sIGFuZCBjaGFuZ2UKKyAgICAgICAgICAgICAgICB0aGVtIHRvIGluaGVyaXQgPGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFzazwvZmlsZW5hbWU+LCBhcyB3ZWxsIGFzIHRha2luZyB0aGUgb3Bwb3J0dW5pdHkKKyAgICAgICAgICAgICAgICB0byByZW1vdmUgYW55dGhpbmcgbm93IGhhbmRsZWQgYnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLmJiY2xhc3M8L2ZpbGVuYW1lPiwgc3VjaCBhcyBwcm92aWRpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGFja2FnZXMsIHNldHRpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDX0ZJTEVTX0NIS1NVTSc+PGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZWdyb3VwJz48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgZnVydGhlciBkZXRhaWxzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtaW1hZ2UtZmVhdHVyZXMnPgorICAgICAgICAgICAgPHRpdGxlPklNQUdFX0ZFQVRVUkVTPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW1hZ2UgcmVjaXBlcyB0aGF0IHByZXZpb3VzbHkgaW5jbHVkZWQgImFwcHMtY29uc29sZS1jb3JlIgorICAgICAgICAgICAgICAgIGluIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc2hvdWxkIG5vdyBpbmNsdWRlICJzcGxhc2giIGluc3RlYWQgdG8gZW5hYmxlIHRoZSBib290LXVwCisgICAgICAgICAgICAgICAgc3BsYXNoIHNjcmVlbi4KKyAgICAgICAgICAgICAgICBSZXRhaW5pbmcgImFwcHMtY29uc29sZS1jb3JlIiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHNwbGFzaAorICAgICAgICAgICAgICAgIHNjcmVlbiBidXQgZ2VuZXJhdGVzIGEgd2FybmluZy4KKyAgICAgICAgICAgICAgICBUaGUgImFwcHMteDExLWNvcmUiIGFuZCAiYXBwcy14MTEtZ2FtZXMiCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gZmVhdHVyZXMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1yZW1vdmVkLXJlY2lwZXMnPgorICAgICAgICAgICAgPHRpdGxlPlJlbW92ZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBGb3IgbW9zdCBvZiB0aGVtLCBpdCBpcyB1bmxpa2VseSB0aGF0IHlvdSB3b3VsZCBoYXZlIGFueQorICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgdG8gdGhlbSBpbiB5b3VyIG93bgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBzaG91bGQgY2hlY2sgeW91ciBtZXRhZGF0YSBhZ2FpbnN0IHRoaXMgbGlzdCB0byBiZSBzdXJlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYngxMS10cmltPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IDxmaWxlbmFtZT5saWJ4MTE8L2ZpbGVuYW1lPiwgd2hpY2ggaGFzIGEgbmVnbGlnaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBkaWZmZXJlbmNlIHdpdGggbW9kZXJuIFhvcmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhzZXJ2ZXIteG9yZy1saXRlPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+eHNlcnZlci14b3JnPC9maWxlbmFtZT4sIHdoaWNoIGhhcyBhIG5lZ2xpZ2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgZGlmZmVyZW5jZSB3aGVuIERSSSBhbmQgR0xYIG1vZHVsZXMgYXJlIG5vdCBpbnN0YWxsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhzZXJ2ZXIta2RyaXZlPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZWx5IHVubWFpbnRhaW5lZCBmb3IgbWFueSB5ZWFycy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWVzYS14bGliPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBzZXJ2ZXMgYW55IHB1cnBvc2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdhbGFnbzwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlZCBieSB0ZWxlcGF0aHkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdhaWw8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSB3YXMgaW50ZWdyYXRlZCBpbnRvIEdUSysgMi4xMy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZWdnZGJ1czwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBObyBsb25nZXIgbmVlZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5nY2MtKi1pbnRlcm1lZGlhdGU8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhhcyBiZWVuIHJlc3RydWN0dXJlZCB0byBhdm9pZCB0aGUgbmVlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc3RlcC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGliZ3NtZDwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBVbm1haW50YWluZWQgZm9yIG1hbnkgeWVhcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IG5vdyBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9mb25vPC9maWxlbmFtZT4gaW5zdGVhZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb250YWN0cywgZGF0ZXMsIHRhc2tzLCBlZHMtdG9vbHM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExhcmdlbHkgdW5tYWludGFpbmVkIFBJTSBhcHBsaWNhdGlvbiBzdWl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGhhcyBiZWVuIG1vdmVkIHRvIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhLW9wZW5lbWJlZGRlZDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBwcmV2aW91c2x5IGxpc3RlZCBjaGFuZ2VzLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1kZW1vYXBwczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBoYXMgYWxzbyBiZWVuIHJlbW92ZWQKKyAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSByZWNpcGVzIGluIGl0IHdlcmUgbm90IGJlaW5nIG1haW50YWluZWQgYW5kIG1hbnkKKyAgICAgICAgICAgICAgICBoYWQgYmVjb21lIG9ic29sZXRlIG9yIGJyb2tlbi4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZXNlIHJlY2lwZXMgd2VyZSBub3QgcGFyc2VkIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgTWFueSBvZiB0aGVzZSByZWNpcGVzIGFyZSBhbHJlYWR5IHByb3ZpZGVkIGluIGFuIHVwZGF0ZWQgYW5kCisgICAgICAgICAgICAgICAgbWFpbnRhaW5lZCBmb3JtIHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eSBsYXllcnMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIHRoZSByZW1haW5kZXIsIHlvdSBjYW4gbm93IGZpbmQgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1leHRyYXM8L2ZpbGVuYW1lPiByZXBvc2l0b3J5LCB3aGljaCBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLXJlcG9zaXRvcmllcyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9JzEuMy1saW51eC1rZXJuZWwtbmFtaW5nJz4KKyAgICAgICAgPHRpdGxlPkxpbnV4IEtlcm5lbCBOYW1pbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG5hbWluZyBzY2hlbWUgZm9yIGtlcm5lbCBvdXRwdXQgYmluYXJpZXMgaGFzIGJlZW4gY2hhbmdlZCB0bworICAgICAgICAgICAgbm93IGluY2x1ZGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L2xpbms+IGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICBmaWxlbmFtZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke1BFfS0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBub3Qgc2V0IGJ5IGRlZmF1bHQsCisgICAgICAgICAgICB0aGVzZSBiaW5hcnkgZmlsZXMgY291bGQgcmVzdWx0IHdpdGggbmFtZXMgdGhhdCBpbmNsdWRlIHR3byBkYXNoCisgICAgICAgICAgICBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBiekltYWdlLS0zLjEwLjkrZ2l0MCtjZDUwMmE4ODE0XzcxNDRiY2M0YjgtcjAtcWVtdXg4Ni02NC0yMDEzMDgzMDA4NTQzMS5iaW4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21vdmluZy10by10aGUteW9jdG8tcHJvamVjdC0xLjQtcmVsZWFzZSc+CisgICAgPHRpdGxlPk1vdmluZyB0byB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIG1pZ3JhdGlvbiBpbmZvcm1hdGlvbiBmb3IgbW92aW5nIHRvIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlIGZyb20gdGhlIHByaW9yIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5CaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERpZmZlcmVuY2VzIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db21tZW50IENvbnRpbnVhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiBhIGNvbW1lbnQgZW5kcyB3aXRoIGEgbGluZSBjb250aW51YXRpb24gKFwpIGNoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgbmV4dCBsaW5lIG11c3QgYWxzbyBiZSBhIGNvbW1lbnQuCisgICAgICAgICAgICAgICAgICAgIEFueSBpbnN0YW5jZSB3aGVyZSB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgbm93IHRyaWdnZXJzCisgICAgICAgICAgICAgICAgICAgIGEgd2FybmluZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgZWl0aGVyIHJlbW92ZSB0aGUgY29udGludWF0aW9uIGNoYXJhY3Rlciwgb3IgYmUKKyAgICAgICAgICAgICAgICAgICAgc3VyZSB0aGUgbmV4dCBsaW5lIGlzIGEgY29tbWVudC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYWNrYWdlIE5hbWUgT3ZlcnJpZGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBydW50aW1lIHBhY2thZ2Ugc3BlY2lmaWMgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFMTE9XX0VNUFRZJz48ZmlsZW5hbWU+QUxMT1dfRU1QVFk8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcHJlLCBwb3N0LCBpbnN0YWxsLCBhbmQgdW5pbnN0YWxsIHNjcmlwdCBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0cm08L2ZpbGVuYW1lPiBzaG91bGQgYWx3YXlzIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB1c2UgPGZpbGVuYW1lPlJERVBFTkRTXyR7UE59PC9maWxlbmFtZT4gZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWluIHBhY2thZ2UgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIG1vcmUgc3RyaWN0IGNoZWNrcyB3aGVuIGl0IHBhcnNlcyByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtYnVpbGQtYmVoYXZpb3InPgorICAgICAgICA8dGl0bGU+QnVpbGQgQmVoYXZpb3I8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGlmZmVyZW5jZXMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlZCBTdGF0ZSBDb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY29kZSBoYXMgYmVlbiBvcHRpbWl6ZWQgdG8gYXZvaWQgcnVubmluZworICAgICAgICAgICAgICAgICAgICB1bm5lY2Vzc2FyeSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbm8gbG9uZ2VyIHBvcHVsYXRlcyB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3Qgc2luY2UgdGhhdCBpcyBub3QgbmVjZXNzYXJ5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyByb290ZnMgPHJlcGxhY2VhYmxlPnNvbWUtaW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluc3RlYWQsIHRoZSBzeXN0ZW0ganVzdCBuZWVkcyB0byBleHRyYWN0IHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBjb250ZW50cywgcmUtY3JlYXRlIHRoZSBwYWNrYWdlcywgYW5kIGNvbnN0cnVjdAorICAgICAgICAgICAgICAgICAgICB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBpcyB1bmxpa2VseSB0byBjYXVzZSBhbnkgcHJvYmxlbXMgdW5sZXNzCisgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIG1pc3NpbmcgZGVjbGFyZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNjYW5uaW5nIERpcmVjdG9yeSBOYW1lczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNjYW5uaW5nIGZvciBmaWxlcyBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gbm93IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTT1ZFUlJJREVTJz48ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZGlyZWN0b3J5IG5hbWVzLgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCB0aGUgdmFsdWVzIHByZXZpb3VzbHkgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IGFyZSBub3cgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT4gYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IHJlbGllZCB1cG9uIGFuIGFkZGl0aW9uYWwgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgeW91IHByZXZpb3VzbHkgYWRkZWQgdG8gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB5b3UgbWlnaHQgbm93IG5lZWQgdG8gYWRkIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+IHVubGVzcyB5b3UgYXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgYWRkaW5nIGl0IHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FT1ZFUlJJREVTJz48ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvciA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPT1ZFUlJJREVTJz48ZmlsZW5hbWU+RElTVFJPT1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcywgYXMgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIHJlbGF0ZWQgY2hhbmdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWlncmF0aW9uLTEuNC12YXJpYWJsZXMnPlZhcmlhYmxlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXByb3hpZXMtYW5kLWZldGNoaW5nLXNvdXJjZSc+CisgICAgICAgIDx0aXRsZT5Qcm94aWVzIGFuZCBGZXRjaGluZyBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBuZXcgPGZpbGVuYW1lPm9lLWdpdC1wcm94eTwvZmlsZW5hbWU+IHNjcmlwdCBoYXMgYmVlbiBhZGRlZCB0bworICAgICAgICAgICAgcmVwbGFjZSBwcmV2aW91cyBtZXRob2RzIG9mIGhhbmRsaW5nIHByb3hpZXMgYW5kIGZldGNoaW5nIHNvdXJjZQorICAgICAgICAgICAgZnJvbSBHaXQuCisgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgc2NyaXB0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtY3VzdG9tLWludGVyZmFjZXMtZmlsZS1uZXRiYXNlLWNoYW5nZSc+CisgICAgICAgIDx0aXRsZT5DdXN0b20gSW50ZXJmYWNlcyBGaWxlIChuZXRiYXNlIGNoYW5nZSk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGhhdmUgY3JlYXRlZCB5b3VyIG93biBjdXN0b20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5ldGMvbmV0d29yay9pbnRlcmZhY2VzPC9maWxlbmFtZT4gZmlsZSBieSBjcmVhdGluZworICAgICAgICAgICAgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZSA8ZmlsZW5hbWU+bmV0YmFzZTwvZmlsZW5hbWU+IHJlY2lwZSwKKyAgICAgICAgICAgIHlvdSBub3cgbmVlZCB0byBjcmVhdGUgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQtaWZ1cGRvd248L2ZpbGVuYW1lPiByZWNpcGUgaW5zdGVhZCwgd2hpY2ggeW91IGNhbgorICAgICAgICAgICAgZmluZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgYXQgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd248L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIGFwcGVuZCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWJiYXBwZW5kLWZpbGVzJz5Vc2luZyAuYmJhcHBlbmQgRmlsZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXJlbW90ZS1kZWJ1Z2dpbmcnPgorICAgICAgICA8dGl0bGU+UmVtb3RlIERlYnVnZ2luZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTdXBwb3J0IGZvciByZW1vdGUgZGVidWdnaW5nIHdpdGggdGhlIEVjbGlwc2UgSURFIGlzIG5vdworICAgICAgICAgICAgc2VwYXJhdGVkIGludG8gYW4gaW1hZ2UgZmVhdHVyZQorICAgICAgICAgICAgKDxmaWxlbmFtZT5lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4pIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1ZzwvZmlsZW5hbWU+IHBhY2thZ2UgZ3JvdXAuCisgICAgICAgICAgICBQcmV2aW91c2x5LCB0aGUgZGVidWdnaW5nIGZlYXR1cmUgd2FzIGluY2x1ZGVkIHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG9vbHMtZGVidWc8L2ZpbGVuYW1lPiBpbWFnZSBmZWF0dXJlLCB3aGljaCBjb3JyZXNwb25kcworICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBwYWNrYWdlIGdyb3VwLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtdmFyaWFibGVzJz4KKyAgICAgICAgPHRpdGxlPlZhcmlhYmxlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBoYXZlIGNoYW5nZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPlNBTklUWV9URVNURURfRElTVFJPUzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgbm93IHVzZXMgYSBkaXN0cmlidXRpb24gSUQsIHdoaWNoIGlzIGNvbXBvc2VkCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBob3N0IGRpc3RyaWJ1dG9yIElEIGZvbGxvd2VkIGJ5IHRoZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91c2x5LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0FOSVRZX1RFU1RFRF9ESVNUUk9TJz48ZmlsZW5hbWU+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdhcyBjb21wb3NlZCBvZiB0aGUgZGVzY3JpcHRpb24gZmllbGQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCAiVWJ1bnR1IDEyLjEwIiBiZWNvbWVzICJVYnVudHUtMTIuMTAiLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcyBjaGFuZ2UgaWYgeW91IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWNhbGx5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgb3IgaWYgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2FsbHkgc2V0dGluZyBpdCB0byAiIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEYnPjxmaWxlbmFtZT5QRjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVAnPjxmaWxlbmFtZT5QPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5GSUxFX0RJUk5BTUU8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgZHJvcHBlZCBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyB1c2VkIGFzIHRoZSBzZWFyY2ggcGF0aCBmb3IgZmluZGluZyBmaWxlcworICAgICAgICAgICAgICAgICAgICByZWZlcnJlZCB0byBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgcmVjaXBlIHRoYXQgcmVsaWVkIHVwb24gdGhlc2UgZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdvdWxkIGJlIHVudXN1YWwsIHRoZW4geW91IHdpbGwgbmVlZCB0byBhZGQgdGhlCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHBhdGhzIHdpdGhpbiB0aGUgcmVjaXBlIG9yLCBhbHRlcm5hdGl2ZWx5LAorICAgICAgICAgICAgICAgICAgICByZWFycmFuZ2UgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gbG9jYXRpb25zIGFyZSBzdGlsbCBjb3ZlcmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0JQfTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+JHtCUE59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCAiZmlsZXMiLCB3aGljaCBhbGwgcmVtYWluIGluIHRoZSBkZWZhdWx0IHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLXRhcmdldC1wYWNrYWdlLW1hbmFnZW1lbnQtd2l0aC1ycG0nPgorICAgICAgICA8dGl0bGU+VGFyZ2V0IFBhY2thZ2UgTWFuYWdlbWVudCB3aXRoIFJQTTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBlbmFibGVkIGFuZCB0aGUgUlBNIGJhY2tlbmQKKyAgICAgICAgICAgIGlzIHNlbGVjdGVkLCBTbWFydCBpcyBub3cgaW5zdGFsbGVkIGZvciBwYWNrYWdlIGRvd25sb2FkLCBkZXBlbmRlbmN5CisgICAgICAgICAgICByZXNvbHV0aW9uLCBhbmQgdXBncmFkZXMgaW5zdGVhZCBvZiBaeXBwZXIuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIFNtYXJ0LCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kCisgICAgICAgICAgICBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzbWFydCAtLWhlbHAKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXJlY2lwZXMtbW92ZWQnPgorICAgICAgICA8dGl0bGU+UmVjaXBlcyBNb3ZlZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlY2lwZXMgd2VyZSBtb3ZlZCBmcm9tIHRoZWlyIHByZXZpb3VzIGxvY2F0aW9ucworICAgICAgICAgICAgYmVjYXVzZSB0aGV5IGFyZSBubyBsb25nZXIgdXNlZCBieSBhbnl0aGluZyBpbgorICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZC1Db3JlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5jbHV0dGVyLWJveDJkPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmV2b2x1dGlvbi1kYXRhLXNlcnZlcjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ndGh1bWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z3RraHRtbDI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z3VwbnA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtbXVsdGltZWRpYTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5neXBzeTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJjYW5iZXJyYTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJnZGF0YTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJtdXNpY2JyYWluejwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1tdWx0aW1lZGlhPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1ldGFjaXR5PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvbGtpdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT56ZXJvY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1uZXR3b3JraW5nPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1yZW1vdmFscy1hbmQtcmVuYW1lcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmFscyBhbmQgUmVuYW1lczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3Mgd2hhdCBoYXMgYmVlbiByZW1vdmVkIG9yIHJlbmFtZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmV2aWVleHQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54c2VydmVyPC9maWxlbmFtZT4gc2luY2UgMjAwOC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HdGsrIERpcmVjdEZCOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgc3VwcG9ydCBiZWNhdXNlIHVwc3RyZWFtIEd0aysgbm8gbG9uZ2VyIHN1cHBvcnRzIGl0CisgICAgICAgICAgICAgICAgICAgIGFzIG9mIHZlcnNpb24gMi4xOC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGlieGZvbnRjYWNoZSAvIHhmb250Y2FjaGVwcm90bzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSB0aGV5IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBYb3JnIHNlcnZlciBpbiAyMDA4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJ4cCAvIGxpYnhwcmludGFwcHV0aWwgLyBsaWJ4cHJpbnR1dGlsIC8gcHJpbnRwcm90bzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSB0aGUgWFByaW50IHNlcnZlciB3YXMgcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIFhvcmcgaW4gMjAwOC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGlieHRyYXAgLyB4dHJhcHByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZWlyIGZ1bmN0aW9uYWxpdHkgd2FzIGJyb2tlbiB1cHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5saW51eC15b2N0byAzLjAga2VybmVsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgd2l0aCBsaW51eC15b2N0byAzLjgga2VybmVsIGJlaW5nIGFkZGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGludXgteW9jdG8gMy4yIGFuZCBsaW51eC15b2N0byAzLjQga2VybmVscyByZW1haW4KKyAgICAgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bHNic2V0dXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIHdpdGggZnVuY3Rpb25hbGl0eSBub3cgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxzYnRlc3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWF0Y2hib3gtc3Ryb2tlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IHdhcyBuZXZlciBtb3JlIHRoYW4gYSBwcm9vZi1vZi1jb25jZXB0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tYXRjaGJveC13bS0yIC8gbWF0Y2hib3gtdGhlbWUtc2F0by0yPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBtYWludGFpbmVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCA8ZmlsZW5hbWU+bWF0Y2hib3gtd208L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hdGNoYm94LXRoZW1lLXNhdG88L2ZpbGVuYW1lPiBhcmUgc3RpbGwKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1lc2EtZHJpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVuYW1lZCB0byA8ZmlsZW5hbWU+bWVzYTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tZXNhLXhsaWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgd2FzIG5vIGxvbmdlciB1c2VmdWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm11dHRlcjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBub3RoaW5nIGV2ZXIgdXNlcyBpdCBhbmQgdGhlIHJlY2lwZSBpcworICAgICAgICAgICAgICAgICAgICB2ZXJ5IG9sZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+b3Jpbm9jby1jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IGhhcyBiZWNvbWUgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVwZGF0ZS1tb2R1bGVzPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUga2VybmVsIG1vZHVsZSA8ZmlsZW5hbWU+cG9zdGluc3RhbGw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBvc3RybTwvZmlsZW5hbWU+IHNjcmlwdHMgY2FuIG5vdyBkbyB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICB0YXNrIHdpdGhvdXQgdGhlIHVzZSBvZiB0aGlzIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+d2ViPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIGl0IGlzIG5vdCBtYWludGFpbmVkLiAgU3VwZXJzZWRlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ViLXdlYmtpdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT54Zjg2YmlnZm9udHByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHVwc3RyZWFtIGl0IGhhcyBiZWVuIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgc2luY2UgMjAwNy4KKyAgICAgICAgICAgICAgICAgICAgTm90aGluZyB1c2VzIDxmaWxlbmFtZT54Zjg2YmlnZm9udHByb3RvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhmODZydXNocHJvdG88L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXRzIGRlcGVuZGVuY3kgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhzZXJ2ZXI8L2ZpbGVuYW1lPiB3YXMgc3B1cmlvdXMgYW5kIGl0IHdhcworICAgICAgICAgICAgICAgICAgICByZW1vdmVkIGluIDIwMDUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnp5cHBlciAvIGxpYnp5cHAgLyBzYXQtc29sdmVyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBhbmQgYmVlbiBmdW5jdGlvbmFsbHkgcmVwbGFjZWQgd2l0aCBTbWFydAorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnB5dGhvbi1zbWFydHBtPC9maWxlbmFtZT4pIHdoZW4gUlBNIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIGFuZCBwYWNrYWdlIG1hbmFnZW1lbnQgaXMgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuNS1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1ob3N0LWRlcGVuZGVuY3ktY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5Ib3N0IERlcGVuZGVuY3kgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBub3cgaGFzIHNvbWUgYWRkaXRpb25hbCByZXF1aXJlbWVudHMKKyAgICAgICAgICAgIG9uIHRoZSBob3N0IHN5c3RlbToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiAyLjcuMys8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGFyIDEuMjQrPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdCAxLjcuOCs8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UGF0Y2hlZCB2ZXJzaW9uIG9mIE1ha2UgaWYgeW91IGFyZSB1c2luZworICAgICAgICAgICAgICAgICAgICAzLjgyLgorICAgICAgICAgICAgICAgICAgICBNb3N0IGRpc3RyaWJ1dGlvbnMgdGhhdCBwcm92aWRlIE1ha2UgMy44MiB1c2UgdGhlIHBhdGNoZWQKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgSWYgdGhlIExpbnV4IGRpc3RyaWJ1dGlvbiB5b3UgYXJlIHVzaW5nIG9uIHlvdXIgYnVpbGQgaG9zdAorICAgICAgICAgICAgZG9lcyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgdGhlc2UsIHlvdSBjYW4gaW5zdGFsbCBhbmQgdXNlCisgICAgICAgICAgICB0aGUgQnVpbGR0b29scyB0YXJiYWxsLCB3aGljaCBwcm92aWRlcyBhbiBTREstbGlrZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgY29udGFpbmluZyB0aGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHJlcXVpcmVtZW50LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz5SZXF1aXJlZCBHaXQsIHRhciwgYW5kIFB5dGhvbiBWZXJzaW9uczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtYXRvbS1wYy1ic3AnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmF0b20tcGM8L2ZpbGVuYW1lPiBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hdG9tLXBjPC9maWxlbmFtZT4gaGFyZHdhcmUgcmVmZXJlbmNlIEJTUCBoYXMgYmVlbgorICAgICAgICAgICAgcmVwbGFjZWQgYnkgYSA8ZmlsZW5hbWU+Z2VuZXJpY3g4NjwvZmlsZW5hbWU+IEJTUC4KKyAgICAgICAgICAgIFRoaXMgQlNQIGlzIG5vdCBuZWNlc3NhcmlseSBndWFyYW50ZWVkIHRvIHdvcmsgb24gYWxsIHg4NgorICAgICAgICAgICAgaGFyZHdhcmUsIGJ1dCBpdCB3aWxsIHJ1biBvbiBhIHdpZGVyIHJhbmdlIG9mIHN5c3RlbXMgdGhhbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5hdG9tLXBjPC9maWxlbmFtZT4gZGlkLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBhIDxmaWxlbmFtZT5nZW5lcmljeDg2LTY0PC9maWxlbmFtZT4gQlNQIGhhcworICAgICAgICAgICAgICAgIGJlZW4gYWRkZWQgZm9yIDY0LWJpdCBBdG9tIHN5c3RlbXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRoYXQgcmVsYXRlIHRvIEJpdEJha2U6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBub3cgc3VwcG9ydHMgYSA8ZmlsZW5hbWU+X3JlbW92ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICBUaGUgYWRkaXRpb24gb2YgdGhpcyBvcGVyYXRvciBtZWFucyB5b3Ugd2lsbCBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgIHJlbmFtZSBhbnkgaXRlbXMgaW4gcmVjaXBlIHNwYWNlIChmdW5jdGlvbnMsIHZhcmlhYmxlcykKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZXMgY3VycmVudGx5IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9yZW1vdmVfPC9maWxlbmFtZT4gb3IgZW5kIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9yZW1vdmU8L2ZpbGVuYW1lPiB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UncyBnbG9iYWwgbWV0aG9kIHBvb2wgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwgYW5kIGxlZCB0byBjbGFzaGVzCisgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gcmVjaXBlcyBjb250YWluaW5nIGZ1bmN0aW9ucyB0aGF0IGhhZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBuYW1lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJub25lIiBzZXJ2ZXIgYmFja2VuZCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgInByb2Nlc3MiIHNlcnZlciBiYWNrZW5kIGhhcyBiZWVuIHNlcnZpbmcgd2VsbCBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgYSBsb25nIHRpbWUgbm93LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlLXJ1bnRhc2s8L2ZpbGVuYW1lPiBzY3JpcHQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVAnPjxmaWxlbmFtZT5QPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEYnPjxmaWxlbmFtZT5QRjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYXJlIG5vIGxvbmdlciBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJPVklERVMnPjxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0IGluIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdmVyc2lvbi1zcGVjaWZpYyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpdGVtcyB3ZXJlIHNlbGRvbSB1c2VkLgorICAgICAgICAgICAgICAgICAgICBBdHRlbXB0aW5nIHRvIHVzZSB0aGVtIGNvdWxkIHJlc3VsdCBpbiB0d28gdmVyc2lvbnMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgc2ltdWx0YW5lb3VzbHkgcmF0aGVyIHRoYW4ganVzdCBvbmUgdmVyc2lvbiBkdWUgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIHdheSBCaXRCYWtlIHJlc29sdmVzIGRlcGVuZGVuY2llcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcWEtd2FybmluZ3MnPgorICAgICAgICA8dGl0bGU+UUEgV2FybmluZ3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwYWNrYWdlIFFBIGNoZWNrczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBjdXN0b21pemVkCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FUlJPUl9RQSc+PGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yIDxsaW5rIGxpbmtlbmQ9J3Zhci1XQVJOX1FBJz48ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgaW4geW91ciBjb25maWd1cmF0aW9uLCBjaGVjayB0aGF0IHRoZXkgY29udGFpbiBhbGwgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIGlzc3VlcyB0aGF0IHlvdSB3aXNoIHRvIGJlIHJlcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91cyBZb2N0byBQcm9qZWN0IHZlcnNpb25zIGNvbnRhaW5lZCBhIGJ1ZyB0aGF0IG1lYW50CisgICAgICAgICAgICAgICAgICAgIHRoYXQgYW55IGl0ZW0gbm90IG1lbnRpb25lZCBpbiA8ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+IHdvdWxkIGJlIHRyZWF0ZWQgYXMgYQorICAgICAgICAgICAgICAgICAgICB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHNldmVyYWwgaW1wb3J0YW50IGl0ZW1zIHdlcmUgbm90IGFscmVhZHkgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQWxsIG9mIHRoZSBwb3NzaWJsZSBRQSBjaGVja3MgYXJlIG5vdyBkb2N1bWVudGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBhZGRpdGlvbmFsIFFBIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGNoZWNrIGlmCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NoYXJlL2luZm8vZGlyPC9maWxlbmFtZT4gaXMgYmVpbmcgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBZb3VyIHJlY2lwZSBzaG91bGQgZGVsZXRlIHRoaXMgZmlsZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlmICJtYWtlIGluc3RhbGwiIGlzIGluc3RhbGxpbmcgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGUgY2hlY2sgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHZlcnNpb24gZ29pbmcgYmFja3dhcmRzIGlzIG5vdyBjb250cm9sbGVkIHVzaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmQgUUEgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBoYXZlIGN1c3RvbWl6ZWQgeW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+IHZhbHVlcyBhbmQgc3RpbGwgd2lzaCB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIHRoaXMgY2hlY2sgcGVyZm9ybWVkLCB5b3Ugc2hvdWxkIGFkZAorICAgICAgICAgICAgICAgICAgICAidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiIHRvIHlvdXIgdmFsdWUgZm9yIG9uZSBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdmFyaWFibGVzIGRlcGVuZGluZyBvbiBob3cgeW91IHdpc2ggaXQgdG8gYmUgaGFuZGxlZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBkb2N1bWVudGVkIFFBIGNoZWNrcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtZGlyZWN0b3J5LWxheW91dC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkRpcmVjdG9yeSBMYXlvdXQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGRpcmVjdG9yeSBjaGFuZ2VzIGV4aXN0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE91dHB1dCBTREsgaW5zdGFsbGVyIGZpbGVzIGFyZSBub3cgbmFtZWQgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgbmFtZSBhbmQgdHVuaW5nIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX05BTUUnPjxmaWxlbmFtZT5TREtfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEltYWdlcyBhbmQgcmVsYXRlZCBmaWxlcyBhcmUgbm93IGluc3RhbGxlZCBpbnRvIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIG1hY2hpbmUsIGluc3RlYWQgb2YgYSBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgb3V0cHV0IGZpbGVzIGZvciBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBjb250aW51ZXMgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgIGltYWdlcyBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBzaG91bGQgYmUgdXNlZCBhbnl3aGVyZSB0aGVyZSBpcyBhIG5lZWQgdG8gcmVmZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHNjcmlwdCBub3cgdXNlcyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGZpbmQgaW1hZ2VzIGFuZCBrZXJuZWwgYmluYXJpZXMgYW5kIHdpbGwgdXNlCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdG8gZGV0ZXJtaW5lIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCBlbnZpcm9ubWVudC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRoaXN0b3J5IGlzIGVuYWJsZWQsIGl0cyBvdXRwdXQgaXMgbm93IHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gbWFrZXMgaXQgZWFzaWVyIHRvIGRlbGV0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gYW5kIHByZXNlcnZlIHRoZSBidWlsZCBoaXN0b3J5LgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGRhdGEgZm9yIHByb2R1Y2VkIFNES3MgaXMgbm93IHNwbGl0IGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9OQU1FJz48ZmlsZW5hbWU+SU1BR0VfTkFNRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBrZ2RhdGE8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgcHJvZHVjZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgcGFja2FnaW5nIHByb2Nlc3MgaGFzIGJlZW4gY29sbGFwc2VkIGludG8gYQorICAgICAgICAgICAgICAgICAgICBzaW5nbGUgbWFjaGluZS1zcGVjaWZpYyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3Jvb3RzPC9maWxlbmFtZT4gYW5kIHVzZXMgYSBtYWNoaW5lLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgIG5hbWUgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9zeXNyb290cy88cmVwbGFjZWFibGU+bWFjaGluZTwvcmVwbGFjZWFibGU+L3BrZ2RhdGE8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1zaG9ydGVuZWQtZ2l0LXNyY3Jldi12YWx1ZXMnPgorICAgICAgICA8dGl0bGU+U2hvcnRlbmVkIEdpdCA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gVmFsdWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2Ugd2lsbCBub3cgc2hvcnRlbiByZXZpc2lvbnMgZnJvbSBHaXQgcmVwb3NpdG9yaWVzIGZyb20gdGhlCisgICAgICAgICAgICBub3JtYWwgNDAgY2hhcmFjdGVycyBkb3duIHRvIDEwIGNoYXJhY3RlcnMgd2l0aGluCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgZm9yIGltcHJvdmVkIHVzYWJpbGl0eSBpbiBwYXRoIGFuZCBmaWxlIG5hbWVzLgorICAgICAgICAgICAgVGhpcyBjaGFuZ2Ugc2hvdWxkIGJlIHNhZmUgd2l0aGluIGNvbnRleHRzIHdoZXJlIHRoZXNlIHJldmlzaW9ucworICAgICAgICAgICAgYXJlIHVzZWQgYmVjYXVzZSB0aGUgY2hhbmNlcyBvZiBzcGF0aWFsbHkgY2xvc2UgY29sbGlzaW9ucworICAgICAgICAgICAgaXMgdmVyeSBsb3cuCisgICAgICAgICAgICBEaXN0YW50IGNvbGxpc2lvbnMgYXJlIG5vdCBhIG1ham9yIGlzc3VlIGluIHRoZSB3YXkKKyAgICAgICAgICAgIHRoZSB2YWx1ZXMgYXJlIHVzZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1pbWFnZS1mZWF0dXJlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdGhhdCByZWxhdGUgdG8KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3cgdmFsaWRhdGVkIHRvIGVuc3VyZSBpbnZhbGlkIGZlYXR1cmUgaXRlbXMgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBhZGRlZC4KKyAgICAgICAgICAgICAgICAgICAgU29tZSB1c2VycyBtaXN0YWtlbmx5IGFkZCBwYWNrYWdlIG5hbWVzIHRvIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgcGFja2FnZSBhZGRlZCB0byB0aGUgaW1hZ2UsIHdoaWNoIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGlzIGludGVuZGVkIHRvIGNhdGNoIHRob3NlIGtpbmRzIG9mIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFZhbGlkIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFyZSBkcmF3biBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0dST1VQJz48ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTVBMRU1FTlRBUllfR0xPQic+PGZpbGVuYW1lPkNPTVBMRU1FTlRBUllfR0xPQjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgYSBuZXcgInZhbGlkaXRlbXMiIHZhcmZsYWcgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSAidmFsaWRpdGVtcyIgdmFyZmxhZyBjaGFuZ2UgYWxsb3dzIGFkZGl0aW9uYWwgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgYWRkZWQgaWYgdGhleSBhcmUgbm90IHByb3ZpZGVkIHVzaW5nIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICB0d28gbWVjaGFuaXNtcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXNseSBkZXByZWNhdGVkICJhcHBzLWNvbnNvbGUtY29yZSIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gaXRlbSBpcyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICBBZGQgInNwbGFzaCIgdG8gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gaWYgeW91CisgICAgICAgICAgICAgICAgICAgIHdpc2ggdG8gaGF2ZSB0aGUgc3BsYXNoIHNjcmVlbiBlbmFibGVkLCBzaW5jZSB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIGFsbCB0aGF0IGFwcHMtY29uc29sZS1jb3JlIHdhcyBkb2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcnVuJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT4vcnVuPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4vcnVuPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZyb20gdGhlIEZpbGVzeXN0ZW0KKyAgICAgICAgICAgIEhpZXJhcmNoeSBTdGFuZGFyZCAzLjAgaGFzIGJlZW4gaW50cm9kdWNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoaXMgY2hhbmdlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aWQ9MGUzMjYyODBhMTViMGYyYzRlZjJlZjRlYzQ0MWY2M2Y1NWI3NTg3Myc+aGVyZTwvdWxpbms+LgorICAgICAgICAgICAgVGhlIGNoYW5nZSBhbHNvIG1lYW5zIHRoYXQgcmVjaXBlcyB0aGF0IGluc3RhbGwgZmlsZXMgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4vdmFyL3J1bjwvZmlsZW5hbWU+IG11c3QgYmUgY2hhbmdlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGd1aWRlIG9uIGhvdyB0byBtYWtlIHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9wZXJtYWxpbmsuZ21hbmUub3JnL2dtYW5lLmNvbXAuaGFuZGhlbGRzLm9wZW5lbWJlZGRlZC81ODUzMCc+aGVyZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcmVtb3ZhbC1vZi1wYWNrYWdlLW1hbmFnZXItZGF0YWJhc2Utd2l0aGluLWltYWdlLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZhbCBvZiBQYWNrYWdlIE1hbmFnZXIgRGF0YWJhc2UgV2l0aGluIEltYWdlIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGltYWdlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBubyBsb25nZXIgYWRkcworICAgICAgICAgICAgPGZpbGVuYW1lPnJlbW92ZV9wYWNrYWdpbmdfZGF0YV9maWxlczwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxmaWxlbmFtZT5ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIFRoaXMgYWRkaXRpb24gaXMgbm93IGhhbmRsZWQgYXV0b21hdGljYWxseSB3aGVuICJwYWNrYWdlLW1hbmFnZW1lbnQiCisgICAgICAgICAgICBpcyBub3QgaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgSWYgeW91IGhhdmUgY3VzdG9tIGltYWdlIHJlY2lwZXMgdGhhdCBtYWtlIHRoaXMgYWRkaXRpb24sCisgICAgICAgICAgICB5b3Ugc2hvdWxkIHJlbW92ZSB0aGUgbGluZXMsIGFzIHRoZXkgYXJlIG5vdCBuZWVkZWQgYW5kIG1pZ2h0CisgICAgICAgICAgICBpbnRlcmZlcmUgd2l0aCBjb3JyZWN0IG9wZXJhdGlvbiBvZiBwb3N0aW5zdGFsbCBzY3JpcHRzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtaW1hZ2VzLW5vdy1yZWJ1aWxkLW9ubHktb24tY2hhbmdlcy1pbnN0ZWFkLW9mLWV2ZXJ5LXRpbWUnPgorICAgICAgICA8dGl0bGU+SW1hZ2VzIE5vdyBSZWJ1aWxkIE9ubHkgb24gQ2hhbmdlcyBJbnN0ZWFkIG9mIEV2ZXJ5IFRpbWU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgb3RoZXIgcmVsYXRlZCBpbWFnZQorICAgICAgICAgICAgY29uc3RydWN0aW9uIHRhc2tzIGFyZSBubyBsb25nZXIgbWFya2VkIGFzICJub3N0YW1wIi4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhleSB3aWxsIG9ubHkgYmUgcmUtZXhlY3V0ZWQgd2hlbiB0aGVpciBpbnB1dHMgaGF2ZQorICAgICAgICAgICAgY2hhbmdlZC4KKyAgICAgICAgICAgIFByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFsd2F5cyByZWJ1aWx0CisgICAgICAgICAgICB0aGUgaW1hZ2Ugd2hlbiByZXF1ZXN0ZWQgcmF0aGVyIHdoZW4gbmVjZXNzYXJ5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtdGFzay1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlRhc2sgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcHJldmlvdXNseSBkZXByZWNhdGVkIDxmaWxlbmFtZT50YXNrLmJiY2xhc3M8L2ZpbGVuYW1lPiBoYXMKKyAgICAgICAgICAgIG5vdyBiZWVuIGRyb3BwZWQuCisgICAgICAgICAgICBGb3IgcmVjaXBlcyB0aGF0IHByZXZpb3VzbHkgaW5oZXJpdGVkIGZyb20gdGhpcyBjbGFzcywgeW91IHNob3VsZAorICAgICAgICAgICAgcmVuYW1lIHRoZW0gZnJvbSA8ZmlsZW5hbWU+dGFzay0qPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtKjwvZmlsZW5hbWU+IGFuZCBpbmhlcml0IHBhY2thZ2Vncm91cAorICAgICAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlZ3JvdXAnPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1idXN5Ym94Jz4KKyAgICAgICAgPHRpdGxlPkJ1c3lCb3g8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgd2Ugbm93IHNwbGl0IEJ1c3lCb3ggaW50byB0d28gYmluYXJpZXM6CisgICAgICAgICAgICBvbmUgdGhhdCBpcyBzdWlkIHJvb3QgZm9yIHRob3NlIGNvbXBvbmVudHMgdGhhdCBuZWVkIGl0LCBhbmQKKyAgICAgICAgICAgIGFub3RoZXIgZm9yIHRoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzLgorICAgICAgICAgICAgU3BsaXR0aW5nIEJ1c3lCb3ggYWxsb3dzIGZvciBvcHRpbWl6YXRpb24gdGhhdCBlbGltaW5hdGVzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRpbnlsb2dpbjwvZmlsZW5hbWU+IHJlY2lwZSBhcyByZWNvbW1lbmRlZCBieSB1cHN0cmVhbS4KKyAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGlzIHNwbGl0IGJ5IHNldHRpbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVVNZQk9YX1NQTElUX1NVSUQnPjxmaWxlbmFtZT5CVVNZQk9YX1NQTElUX1NVSUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvICIwIi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWF1dG9tYXRlZC1pbWFnZS10ZXN0aW5nJz4KKyAgICAgICAgPHRpdGxlPkF1dG9tYXRlZCBJbWFnZSBUZXN0aW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbmV3IGF1dG9tYXRlZCBpbWFnZSB0ZXN0aW5nIGZyYW1ld29yayBoYXMgYmVlbiBhZGRlZAorICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXRlc3RpbWFnZSc+PGZpbGVuYW1lPnRlc3RpbWFnZSouYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICBUaGlzIGZyYW1ld29yayByZXBsYWNlcyB0aGUgb2xkZXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZXRlc3QtcWVtdTwvZmlsZW5hbWU+IGZyYW1ld29yay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IHBlcmZvcm1pbmcgYXV0b21hdGVkIGltYWdlIHRlc3RzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtYnVpbGQtaGlzdG9yeSc+CisgICAgICAgIDx0aXRsZT5CdWlsZCBIaXN0b3J5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY2hhbmdlcyB0byBCdWlsZCBIaXN0b3J5OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsZWQgcGFja2FnZSBzaXplczoKKyAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQ8L2ZpbGVuYW1lPiBmb3IgYW4KKyAgICAgICAgICAgICAgICAgICAgIGltYWdlIG5vdyByZWNvcmRzIHRoZSBzaXplIG9mIHRoZSBmaWxlcyBpbnN0YWxsZWQgYnkgZWFjaAorICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpbnN0ZWFkIG9mIHRoZSBzaXplIG9mIGVhY2ggY29tcHJlc3NlZCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBncmFwaHMgKDxmaWxlbmFtZT5kZXBlbmRzKi5kb3Q8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgbm93IHVzZSB0aGUgYWN0dWFsIHBhY2thZ2UgbmFtZXMgaW5zdGVhZCBvZiByZXBsYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgZGFzaGVzLCBkb3RzIGFuZCBwbHVzIHNpZ25zIHdpdGggdW5kZXJzY29yZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktZGlmZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHV0aWxpdGllcyBoYXZlIGltcHJvdmVkIGNvbW1hbmQtbGluZSBoYW5kbGluZy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+LS1oZWxwPC9maWxlbmFtZT4gb3B0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBlYWNoIHV0aWxpdHkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG5ldyBzeW50YXguCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCdWlsZCBIaXN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS11ZGV2Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBjaGFuZ2VzIHRvIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBubyBsb25nZXIgYnJpbmdzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2LWV4dHJhY29uZjwvZmlsZW5hbWU+IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgc2luY2UgdGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBiZSBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdGhlIGV4dHJhIHJ1bGVzLCB0aGVuIGFkZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWRldi1leHRyYWNvbmY8L2ZpbGVuYW1lPiB0byB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gbm8gbG9uZ2VyIGJyaW5ncyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGNpdXRpbHMtaWRzPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzYnV0aWxzLWlkczwvZmlsZW5hbWU+IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGFyZSBub3QgbmVlZGVkIGJ5IDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gaXRzZWxmCisgICAgICAgICAgICAgICAgICAgIGFuZCByZW1vdmluZyB0aGVtIHNhdmVzIGFyb3VuZCAzNTBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LXJlbW92ZWQtcmVuYW1lZC1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgYW5kIFJlbmFtZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4gMy4yIGtlcm5lbCBoYXMgYmVlbgorICAgICAgICAgICAgICAgIHJlbW92ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnRvb2wtbmF0aXZlc2RrPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstbGlidG9vbDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50aW55bG9naW48L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgc3VpZCBwb3J0aW9uIG9mIEJ1c3lib3guCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtaWdyYXRpb24tMS41LWJ1c3lib3gnPkJ1c3lCb3g8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dGVybmFsLXB5dGhvbi10YXJiYWxsPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZAorICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5idWlsZHRvb2xzLXRhcmJhbGw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ViLXdlYmtpdDwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaGFzIGJlZW4gZnVuY3Rpb25hbGx5IHJlcGxhY2VkIGJ5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1pZG9yaTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFrZTwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBieSBhbnkgb3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50cmFuc2ZpZy1uYXRpdmU8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYnkgYW55IG90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YW5qdXRhLXJlbW90ZS1ydW48L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEFuanV0YSBJREUgaW50ZWdyYXRpb24gaGFzIG5vdCBiZWVuIG9mZmljaWFsbHkgc3VwcG9ydGVkIGZvcgorICAgICAgICAgICAgICAgIHNldmVyYWwgcmVsZWFzZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LW90aGVyLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+T3RoZXIgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHNob3J0IGVudHJpZXMgZGVzY3JpYmluZyBvdGhlciBjaGFuZ2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW4tcG9zdGluc3RzPC9maWxlbmFtZT46IE1ha2UgdGhpcyBnZW5lcmljLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzPC9maWxlbmFtZT46IFJlbW92ZSB0aGUgdW5uZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lZGlhLzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnh4eDwvcmVwbGFjZWFibGU+IGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbHNhLXN0YXRlPC9maWxlbmFtZT46IFByb3ZpZGUgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFzb3VuZC5jb25mPC9maWxlbmFtZT4gYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9pbWFnZTwvZmlsZW5hbWU+OiBFbnN1cmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHByZS1yZW5hbWVkIHBhY2thZ2UgbmFtZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9yb290ZnNfcnBtPC9maWxlbmFtZT46IEltcGxlbWVudAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIFJQTS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT46IFJlbW92ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZF91bml0ZGlyPC9maWxlbmFtZT4gaWYKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPiBpcyBub3QgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+OiBSZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQuZDwvZmlsZW5hbWU+IGRpciBpZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+IHVuaXQgZmlsZSBpcyBwcmVzZW50IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdmluaXQ8L2ZpbGVuYW1lPiBpcyBub3QgYSBkaXN0cm8gZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlicGFtPC9maWxlbmFtZT46IERlbnkgYWxsIHNlcnZpY2VzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9USEVSPC9maWxlbmFtZT4gZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+OiBNb3ZlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW50aW1lX21hcHBpbmdfcmVuYW1lPC9maWxlbmFtZT4gdG8gYXZvaWQKKyAgICAgICAgICAgICAgICAgICAgY29uZmxpY3Qgd2l0aCA8ZmlsZW5hbWU+bXVsdGlsaWI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5Myc+PGZpbGVuYW1lPllPQ1RPICM0OTkzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiBCdWd6aWxsYSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgtZHRiPC9maWxlbmFtZT46IFVzZSBrZXJuZWwgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSA8ZmlsZW5hbWU+ZHRiPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm4tdG9vbHM8L2ZpbGVuYW1lPjogU3dpdGNoIGZyb20gZ3VpbHQgdG8KKyAgICAgICAgICAgICAgICAgICAgbmV3IDxmaWxlbmFtZT5rZ2l0LXMycTwvZmlsZW5hbWU+IHRvb2wuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS42LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYXJjaGl2ZXItY2xhc3MnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT4gQ2xhc3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hcmNoaXZlcic+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBoYXMgYmVlbiByZXdyaXR0ZW4gYW5kIGl0cyBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHNpbXBsaWZpZWQuCisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBzb3VyY2UgYXJjaGl2ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtYWludGFpbmluZy1vcGVuLXNvdXJjZS1saWNlbnNlLWNvbXBsaWFuY2UtZHVyaW5nLXlvdXItcHJvZHVjdHMtbGlmZWN5Y2xlJz5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1wYWNrYWdpbmctY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5QYWNrYWdpbmcgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHBhY2thZ2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPiByZWNpcGUgbm8gbG9uZ2VyIHByb2R1Y2VzCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPmJpbnV0aWxzLXN5bWxpbmtzPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBpcyBub3cgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICBoYW5kbGUgdGhlIHByZWZlcnJlZCA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYW50IG9uIHRoZSB0YXJnZXQgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGMgKHRyYWZmaWMgY29udHJvbCkgdXRpbGl0aWVzIGhhdmUgYmVlbiBzcGxpdCBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIG1haW4gPGZpbGVuYW1lPmlwcm91dGUyPC9maWxlbmFtZT4gcGFja2FnZSBhbmQgcHV0CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIDxmaWxlbmFtZT5pcHJvdXRlMi10YzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstZW5naW5lczwvZmlsZW5hbWU+IHNjaGVtYXMgaGF2ZSBiZWVuCisgICAgICAgICAgICAgICAgICAgIG1vdmVkIHRvIGEgZGVkaWNhdGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ndGstZW5naW5lcy1zY2hlbWFzPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmFybXY3YTwvZmlsZW5hbWU+IHdpdGggdGh1bWIgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgc3VmZml4IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3VmZml4IGZvciB0aGVzZSBwYWNrYWdlcyB3aXRoIHRoZSB0aHVtYgorICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb24gZW5hYmxlZCBpcyAidDIiIGFzIGl0IHNob3VsZCBiZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIG9mIHRoaXMgc3VmZml4IHdhcyBub3QgdGhlIGNhc2UgaW4gdGhlIDEuNSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICBBcmNoaXRlY3R1cmUgbmFtZXMgd2lsbCBjaGFuZ2Ugd2l0aGluIHBhY2thZ2UgZmVlZHMgYXMgYQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LW1hdGNoaW5nLWJyYW5jaC1yZXF1aXJlbWVudC1mb3ItZ2l0LWZldGNoaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5NYXRjaGluZyBCcmFuY2ggUmVxdWlyZW1lbnQgZm9yIEdpdCBGZXRjaGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZmV0Y2hpbmcgc291cmNlIGZyb20gYSBHaXQgcmVwb3NpdG9yeSB1c2luZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBCaXRCYWtlIHdpbGwgbm93IHZhbGlkYXRlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YWx1ZSBhZ2FpbnN0IHRoZSBicmFuY2guCisgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IHRoZSBicmFuY2ggdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9zZXJ2ZXIubmFtZS9yZXBvc2l0b3J5O2JyYW5jaD08cmVwbGFjZWFibGU+YnJhbmNobmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBicmFuY2gsIEJpdEJha2UgbG9va3MKKyAgICAgICAgICAgICAgICBpbiB0aGUgZGVmYXVsdCAibWFzdGVyIiBicmFuY2guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIGlmIHlvdSBuZWVkIHRvIGJ5cGFzcyB0aGlzIGNoZWNrIChlLmcuCisgICAgICAgICAgICAgICAgaWYgeW91IGFyZSBmZXRjaGluZyBhIHJldmlzaW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0YWcgdGhhdAorICAgICAgICAgICAgICAgIGlzIG5vdCBvbiBhbnkgYnJhbmNoKSwgeW91IGNhbiBhZGQgIjtub2JyYW5jaD0xIiB0bworICAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIFVSTCB3aXRoaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UtZGVwcyc+CisgICAgICAgICAgICA8dGl0bGU+UHl0aG9uIERlZmluaXRpb24gc3Vic3RpdHV0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgaGFkIHNvbWUgcHJldmlvdXNseSBkZXByZWNhdGVkIFB5dGhvbiBkZWZpbml0aW9ucworICAgICAgICAgICAgICAgIHdpdGhpbiBpdHMgPGZpbGVuYW1lPmJiPC9maWxlbmFtZT4gbW9kdWxlIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCB1c2UgdGhlaXIgc3ViLW1vZHVsZSBjb3VudGVycGFydHMgaW5zdGVhZDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLk1hbGZvcm1lZFVybDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi5mZXRjaC5NYWxmb3JtZWRVcmw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLmZldGNoLmVuY29kZXVybDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi5mZXRjaC5lbmNvZGV1cmw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLmRlY29kZXVybDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi5mZXRjaC5kZWNvZGV1cmw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIubWtkaXJoaWVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLm1rZGlyaGllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIubW92ZWZpbGU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMubW92ZWZpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLmNvcHlmaWxlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLmNvcHlmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi53aGljaDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy53aGljaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIudmVyY21wX3N0cmluZzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy52ZXJjbXBfc3RyaW5nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi52ZXJjbXA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMudmVyY21wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+U1ZLIEZldGNoZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgU1ZLIGZldGNoZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIEJpdEJha2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1iaXRiYWtlLWNvbnNvbGUtb3V0cHV0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25zb2xlIE91dHB1dCBFcnJvciBSZWRpcmVjdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbnNvbGUgVUkgd2lsbCBub3cgb3V0cHV0IGVycm9ycyB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGRlcnI8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0ZG91dDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGFyZSBwaXBpbmcgb3IgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gdG8gc29tZXdoZXJlIGVsc2UsIGFuZCB5b3Ugd2lzaAorICAgICAgICAgICAgICAgIHRvIHJldGFpbiB0aGUgZXJyb3JzLCB5b3Ugd2lsbCBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4yPiZhbXA7MTwvZmlsZW5hbWU+IChvciBzb21ldGhpbmcgc2ltaWxhcikgdG8gdGhlCisgICAgICAgICAgICAgICAgZW5kIG9mIHlvdXIgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi10YXNrLXRhc2tuYW1lLW92ZXJyaWRlcyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnRhc2stPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPiBPdmVycmlkZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+IG92ZXJyaWRlcyBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICBhZGp1c3RlZCBzbyB0aGF0IHRhc2tzIHdob3NlIG5hbWVzIGNvbnRhaW4gdW5kZXJzY29yZXMgaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICB1bmRlcnNjb3JlcyByZXBsYWNlZCBieSBoeXBoZW5zIGZvciB0aGUgb3ZlcnJpZGUgc28gdGhhdCB0aGV5CisgICAgICAgICAgICAgICAgbm93IGZ1bmN0aW9uIHByb3Blcmx5LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdGFzayBvdmVycmlkZSBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaXMgPGZpbGVuYW1lPnRhc2stcG9wdWxhdGUtc2RrPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkNoYW5nZXMgdG8gVmFyaWFibGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB2YXJpYWJsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz4iIENoYXB0ZXIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLVRNUERJUic+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNhbiBubyBsb25nZXIgYmUgb24gYW4gTkZTIG1vdW50LgorICAgICAgICAgICAgICAgIE5GUyBkb2VzIG5vdCBvZmZlciBmdWxsIFBPU0lYIGxvY2tpbmcgYW5kIGlub2RlIGNvbnNpc3RlbmN5CisgICAgICAgICAgICAgICAgYW5kIGNhbiBjYXVzZSB1bmV4cGVjdGVkIGlzc3VlcyBpZiB1c2VkIHRvIHN0b3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgY2hlY2sgZm9yIHRoaXMgb2NjdXJzIG9uIHN0YXJ0dXAuCisgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGlzIGRldGVjdGVkIG9uIGFuIE5GUyBtb3VudCwKKyAgICAgICAgICAgICAgICBhbiBlcnJvciBvY2N1cnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLVBSSU5DJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHRyaWdnZXJzIGEgd2FybmluZyBpZgorICAgICAgICAgICAgICAgIGRldGVjdGVkIGR1cmluZyBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIEZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaW5jcmVtZW50cyBvbiBjaGFuZ2VzLCB1c2UgdGhlIFBSIHNlcnZpY2UgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhpcyBzZXJ2aWNlIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN3b3JraW5nLXdpdGgtYS1wci1zZXJ2aWNlJz5Xb3JraW5nIFdpdGggYSBQUiBTZXJ2aWNlPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLUlNQUdFX1RZUEVTJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+SU1BR0VfVFlQRVM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAic3VtLmpmZnMyIiBvcHRpb24gZm9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgImpmZnMyLnN1bSIgb3B0aW9uLCB3aGljaCBmaXRzIHRoZQorICAgICAgICAgICAgICAgIHByb2Nlc3Npbmcgb3JkZXIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLUNPUFlfTElDX01BTklGRVNUJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Q09QWV9MSUNfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT1BZX0xJQ19NQU5JRkVTVCc+PGZpbGVuYW1lPkNPUFlfTElDX01BTklGRVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgbXVzdAorICAgICAgICAgICAgICAgIG5vdyBiZSBzZXQgdG8gIjEiIHJhdGhlciB0aGFuIGFueSB2YWx1ZSBpbiBvcmRlciB0byBlbmFibGUKKyAgICAgICAgICAgICAgICBpdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtQ09QWV9MSUNfRElSUyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPkNPUFlfTElDX0RJUlM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT1BZX0xJQ19ESVJTJz48ZmlsZW5hbWU+Q09QWV9MSUNfRElSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIG11c3QKKyAgICAgICAgICAgICAgICBub3cgYmUgc2V0IHRvICIxIiByYXRoZXIgdGhhbiBhbnkgdmFsdWUgaW4gb3JkZXIgdG8gZW5hYmxlCisgICAgICAgICAgICAgICAgaXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLVBBQ0tBR0VfR1JPVVAnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5QQUNLQUdFX0dST1VQPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9HUk9VUCc+PGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPjxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgaXRzIHB1cnBvc2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzdGlsbCB1c2UgPGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPiBidXQKKyAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm9kdWNlcyBhIHdhcm5pbmcgbWVzc2FnZSB3aGVuCisgICAgICAgICAgICAgICAgaXQgZW5jb3VudGVycyB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi12YXJpYWJsZS1jaGFuZ2VzLXZhcmlhYmxlLWVudHJ5LWJlaGF2aW9yJz4KKyAgICAgICAgICAgIDx0aXRsZT5QcmVwcm9jZXNzIGFuZCBQb3N0IFByb2Nlc3MgQ29tbWFuZCBWYXJpYWJsZSBCZWhhdmlvcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIG5vdyBleHBlY3QgYSBzZW1pY29sb24gc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhbmQgbm90IGFyYml0cmFyeSBzaGVsbCBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUFJFUFJPQ0VTU19DT01NQU5EJz5ST09URlNfUFJFUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnPlJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnPlNES19QT1NUUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQnPlBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EJz5QT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJz5JTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EJz5JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EJz5ST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EPC9saW5rPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQnPlJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EPC9saW5rPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgbWlncmF0aW9uIHB1cnBvc2VzLCB5b3UgY2FuIHNpbXBseSB3cmFwIHNoZWxsIGNvbW1hbmRzIGluCisgICAgICAgICAgICAgICAgYSBzaGVsbCBmdW5jdGlvbiBhbmQgdGhlbiBjYWxsIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteV9wb3N0cHJvY2Vzc19mdW5jdGlvbigpIHsKKyAgICAgICAgZWNobyAiaGVsbG8iID4gJHtJTUFHRV9ST09URlN9L2hlbGxvLnR4dAorICAgICB9CisgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICJteV9wb3N0cHJvY2Vzc19mdW5jdGlvbjsgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWRpcmVjdG9yeS1sYXlvdXQtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5EaXJlY3RvcnkgTGF5b3V0IENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLWhvYjwvZmlsZW5hbWU+IGxheWVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbQorICAgICAgICAgICAgdGhlIHRvcC1sZXZlbCBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGxheWVyIGFyZSBubyBsb25nZXIgbmVlZGVkIGJ5IHRoZSBIb2IKKyAgICAgICAgICAgIHVzZXIgaW50ZXJmYWNlIGZvciBidWlsZGluZyBpbWFnZXMgYW5kIHRvb2xjaGFpbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1wYWNrYWdlLXRlc3QtcHRlc3QnPgorICAgICAgICA8dGl0bGU+UGFja2FnZSBUZXN0IChwdGVzdCk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGFja2FnZSBUZXN0cyAocHRlc3QpIGFyZSBidWlsdCBidXQgbm90IGluc3RhbGxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFBhY2thZ2UgVGVzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlNldHRpbmcgdXAgYW5kIHJ1bm5pbmcgcGFja2FnZSB0ZXN0IChwdGVzdCk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXB0ZXN0Jz48ZmlsZW5hbWU+cHRlc3QuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1idWlsZC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VwYXJhdGUgYnVpbGQgYW5kIHNvdXJjZSBkaXJlY3RvcmllcyBoYXZlIGJlZW4gZW5hYmxlZAorICAgICAgICAgICAgYnkgZGVmYXVsdCBmb3Igc2VsZWN0ZWQgcmVjaXBlcyB3aGVyZSBpdCBpcyBrbm93biB0byB3b3JrCisgICAgICAgICAgICAoYSB3aGl0ZWxpc3QpIGFuZCBmb3IgYWxsIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY21ha2UnPjxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICBJbiBmdXR1cmUgcmVsZWFzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIHdpbGwgZW5hYmxlIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGJ5IGRlZmF1bHQgYXMKKyAgICAgICAgICAgIHdlbGwuCisgICAgICAgICAgICBSZWNpcGVzIGJ1aWxkaW5nIEF1dG90b29scy1iYXNlZAorICAgICAgICAgICAgc29mdHdhcmUgdGhhdCBmYWlscyB0byBidWlsZCB3aXRoIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5CisgICAgICAgICAgICBzaG91bGQgYmUgY2hhbmdlZCB0byBpbmhlcml0IGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgaW5zdGVhZCBvZiB0aGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYnVpbGRpbmctcWVtdS1uYXRpdmUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnFlbXUtbmF0aXZlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXUtbmF0aXZlPC9maWxlbmFtZT4gbm93IGJ1aWxkcyB3aXRob3V0CisgICAgICAgICAgICBTREwtYmFzZWQgZ3JhcGhpY2FsIG91dHB1dCBzdXBwb3J0IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbGluZXMgYXJlIG5lZWRlZCBpbiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IHRvIGVuYWJsZSBpdDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19wbi1xZW11LW5hdGl2ZSA9ICJzZGwiCisgICAgIEFTU1VNRV9QUk9WSURFRCArPSAibGlic2RsLW5hdGl2ZSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWlucyB0aGVzZSBzdGF0ZW1lbnRzLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGFyZSBidWlsZGluZyBhIGhlYWRsZXNzIHN5c3RlbSBhbmQgdXNpbmcKKyAgICAgICAgICAgICAgICBhIGRlZmF1bHQgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB5b3Ugd2lsbCBuZWVkCisgICAgICAgICAgICAgICAgY29tbWVudCB0aGVzZSB0d28gbGluZXMgb3V0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtY29yZS1pbWFnZS1iYXNpYyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1iYXNpYzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2ljPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIDxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2ljPC9maWxlbmFtZT4gYmVpbmcgcmVuYW1lZCwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1iYXNpYzwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbmFtZWQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPiB0byBtYXRjaC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWxpY2Vuc2luZyc+CisgICAgICAgIDx0aXRsZT5MaWNlbnNpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvcC1sZXZlbCA8ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+IGZpbGUgaGFzIGJlZW4gY2hhbmdlZAorICAgICAgICAgICAgdG8gYmV0dGVyIGRlc2NyaWJlIHRoZSBsaWNlbnNlIG9mIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgb2YKKyAgICAgICAgICAgIE9FLUNvcmUuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUgbGljZW5zaW5nIGl0c2VsZiByZW1haW5zIHVuY2hhbmdlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm9ybWFsbHksIHRoaXMgY2hhbmdlIHdvdWxkIG5vdCBjYXVzZSBhbnkgc2lkZS1lZmZlY3RzLgorICAgICAgICAgICAgSG93ZXZlciwgc29tZSByZWNpcGVzIHBvaW50IHRvIHRoaXMgZmlsZSB3aXRoaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgKGFzIDxmaWxlbmFtZT4ke0NPUkVCQVNFfS9MSUNFTlNFPC9maWxlbmFtZT4pIGFuZCB0aHVzIHRoZQorICAgICAgICAgICAgYWNjb21wYW55aW5nIGNoZWNrc3VtIG11c3QgYmUgY2hhbmdlZCBmcm9tCisgICAgICAgICAgICAzZjQwZDc5OTQzOTcxMDkyODVlYzdiODFmZGViM2I1OCB0bworICAgICAgICAgICAgNGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAuCisgICAgICAgICAgICBBIGJldHRlciBhbHRlcm5hdGl2ZSBpcyB0byBoYXZlCisgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHBvaW50IHRvIGEgZmlsZQorICAgICAgICAgICAgZGVzY3JpYmluZyB0aGUgbGljZW5zZSB0aGF0IGlzIGRpc3RyaWJ1dGVkIHdpdGggdGhlIHNvdXJjZQorICAgICAgICAgICAgdGhhdCB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nLCBpZiBwb3NzaWJsZSwgcmF0aGVyIHRoYW4gcG9pbnRpbmcKKyAgICAgICAgICAgIHRvIDxmaWxlbmFtZT4ke0NPUkVCQVNFfS9MSUNFTlNFPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1jZmxhZ3Mtb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT4gT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgIi1mcGVybWlzc2l2ZSIgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICBZb3UgbmVlZCB0byB0YWtlIGFjdGlvbiBvbiBpbmRpdmlkdWFsIHJlY2lwZXMgdGhhdCBmYWlsIHdoZW4KKyAgICAgICAgICAgIGJ1aWxkaW5nIHdpdGggdGhpcyBvcHRpb24uCisgICAgICAgICAgICBZb3UgbmVlZCB0byBlaXRoZXIgcGF0Y2ggdGhlIHJlY2lwZXMgdG8gZml4IHRoZSBpc3N1ZXMgcmVwb3J0ZWQgYnkKKyAgICAgICAgICAgIHRoZSBjb21waWxlciwgb3IgeW91IG5lZWQgdG8gYWRkICItZnBlcm1pc3NpdmUiIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT4gaW4gdGhlIHJlY2lwZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1jdXN0b20taW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPkN1c3RvbSBJbWFnZSBPdXRwdXQgVHlwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3VzdG9tIGltYWdlIG91dHB1dCB0eXBlcywgYXMgc2VsZWN0ZWQgdXNpbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIG11c3QgZGVjbGFyZSB0aGVpciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgaW1hZ2UgdHlwZXMgKGlmIGFueSkgdXNpbmcKKyAgICAgICAgICAgIGEgbmV3CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfVFlQRURFUCc+PGZpbGVuYW1lPklNQUdFX1RZUEVERVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtZG8tcGFja2FnZS13cml0ZS10YXNrJz4KKyAgICAgICAgPHRpdGxlPlRhc2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZTwvZmlsZW5hbWU+IHRhc2sgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgIFRoZSB0YXNrIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi11cGRhdGUtYWx0ZXJuYXRpdmVzLXByb3ZpZGVyJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmU8L2ZpbGVuYW1lPiBQcm92aWRlcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+IHByb3ZpZGVyIGhhcworICAgICAgICAgICAgYmVlbiBjaGFuZ2VkIGZyb20gPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2ctdXRpbHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoaXMgY2hhbmdlIHJlc29sdmVzIHNvbWUgdHJvdWJsZXNvbWUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgVGhlIHJ1bnRpbWUgcGFja2FnZSBoYXMgYWxzbyBiZWVuIHJlbmFtZWQgZnJvbQorICAgICAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRvIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZpcnRjbGFzcy1vdmVycmlkZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnZpcnRjbGFzczwvZmlsZW5hbWU+IE92ZXJyaWRlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnZpcnRjbGFzczwvZmlsZW5hbWU+IG92ZXJyaWRlcyBhcmUgbm93IGRlcHJlY2F0ZWQuCisgICAgICAgICAgICBVc2UgdGhlIGVxdWl2YWxlbnQgY2xhc3Mgb3ZlcnJpZGVzIGluc3RlYWQgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT52aXJ0Y2xhc3MtbmF0aXZlPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzLW5hdGl2ZTwvZmlsZW5hbWU+LikKKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXJlbW92ZWQtcmVuYW1lZC1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgYW5kIFJlbmFtZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBiZWVuIHJlbW92ZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLXRvb2xzZXQtbmF0aXZlPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBsYXJnZWx5IHVudXNlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC15b2N0by0zLjg8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBMaW51eCB5b2N0byAzLjgga2VybmVsIGhhcyBiZWVuIGRyb3BwZWQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSAzLjEwIGFuZCAzLjE0IGtlcm5lbHMgaGF2ZSBiZWVuIGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjEwPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT4gcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5vY2YtbGludXg8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGhhcyBiZWVuIGZ1bmN0aW9uYWxseSByZXBsYWNlZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3J5cHRvZGV2LWxpbnV4PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2VuZXh0MmZzPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2VuZXh0MmZzPC9maWxlbmFtZT4gaXMgbm8gbG9uZ2VyIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBhbmQgaXMgdW5tYWludGFpbmVkIHVwc3RyZWFtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmpzPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHByb3ZpZGVkIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBNb3ppbGxhJ3MgamF2YXNjcmlwdAorICAgICAgICAgICAgICAgICAgICBlbmdpbmUgdGhhdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnphdXJ1c2Q8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgaGFzIGJlZW4gbW92ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWhhbmRoZWxkPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZWdsaWJjIDIuMTc8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IHRoZSA8ZmlsZW5hbWU+ZWdsaWJjIDIuMTk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjIDQuNy4yPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBSZXBsYWNlZCBieSB0aGUgbm93IHN0YWJsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjIDQuOC4yPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0ZXJuYWwtc291cmNlcnktdG9vbGNoYWluPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICB0aGlzIHJlY2lwZSBpcyBub3cgbWFpbnRhaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC1saWJjLWhlYWRlcnMteW9jdG8gMy40K2dpdDwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgTm93IHVzaW5nIHZlcnNpb24gMy4xMCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LWxpYmMtaGVhZGVyczwvZmlsZW5hbWU+IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bWV0YS10b29sY2hhaW4tZ21hZTwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtc2RrLWdtYWU8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtZ21hZS1zZGstdGFyZ2V0PC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBvYnNvbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXJlbW92ZWQtY2xhc3Nlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmVkIENsYXNzZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGhhdmUgYmVjb21lIG9ic29sZXRlIGFuZCBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5tb2R1bGVfc3RyaXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBrZ19tZXRhaW5mbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGtnX2Rpc3RyaWJ1dGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmltYWdlLWVtcHR5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXJlZmVyZW5jZS1ic3BzJz4KKyAgICAgICAgPHRpdGxlPlJlZmVyZW5jZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlZmVyZW5jZSBCU1BzIGNoYW5nZXMgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgQmVhZ2xlQm9hcmQKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5iZWFnbGVib2FyZDwvZmlsZW5hbWU+KSBBUk0gcmVmZXJlbmNlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBCZWFnbGVCb25lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+YmVhZ2xlYm9uZTwvZmlsZW5hbWU+KSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBSb3V0ZXJTdGF0aW9uIFBybworICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnJvdXRlcnN0YXRpb25wcm88L2ZpbGVuYW1lPikgTUlQUyByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIEVkZ2VSb3V0ZXIgTGl0ZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmVkZ2Vyb3V0ZXI8L2ZpbGVuYW1lPikgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBUaGUgcHJldmlvdXMgcmVmZXJlbmNlIEJTUHMgZm9yIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJlYWdsZWJvYXJkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+cm91dGVyc3RhdGlvbnBybzwvZmlsZW5hbWU+IG1hY2hpbmVzIGFyZSBzdGlsbCBhdmFpbGFibGUKKyAgICAgICAgICAgIGluIGEgbmV3IDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC1vbGQ8L2ZpbGVuYW1lPiBsYXllciBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS15b2N0by1ic3Atb2xkLyc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS15b2N0by1ic3Atb2xkLzwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuNy1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1jaGFuZ2VzLXRvLXNldHRpbmctcWVtdS1wYWNrYWdlY29uZmlnLW9wdGlvbnMnPgorICAgICAgICA8dGl0bGU+Q2hhbmdlcyB0byBTZXR0aW5nIFFFTVUgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBPcHRpb25zIGluIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFFFTVUgcmVjaXBlIG5vdyB1c2VzIGEgbnVtYmVyIG9mCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9wdGlvbnMgdG8gZW5hYmxlIHZhcmlvdXMgb3B0aW9uYWwgZmVhdHVyZXMuCisgICAgICAgICAgICBUaGUgbWV0aG9kIHVzZWQgdG8gc2V0IGRlZmF1bHRzIGZvciB0aGVzZSBvcHRpb25zIG1lYW5zIHRoYXQKKyAgICAgICAgICAgIGV4aXN0aW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGVzIHdpbGwgbmVlZCB0byBiZSBiZQorICAgICAgICAgICAgbW9kaWZpZWQgdG8gYXBwZW5kIHRvIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4gZm9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdS1uYXRpdmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstcWVtdTwvZmlsZW5hbWU+IGluc3RlYWQgb2Ygc2V0dGluZyBpdC4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0byBlbmFibGUgZ3JhcGhpY2FsIG91dHB1dCBmb3IgUUVNVSwgeW91IHNob3VsZAorICAgICAgICAgICAgbm93IGhhdmUgdGhlc2UgbGluZXMgaW4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tcWVtdS1uYXRpdmUgPSAiIHNkbCIKKyAgICAgUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tbmF0aXZlc2RrLXFlbXUgPSAiIHNkbCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LW1pbmltdW0tZ2l0LXZlcnNpb24nPgorICAgICAgICA8dGl0bGU+TWluaW11bSBHaXQgdmVyc2lvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWluaW11bQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiB2ZXJzaW9uIHJlcXVpcmVkCisgICAgICAgICAgICBvbiB0aGUgYnVpbGQgaG9zdCBpcyBub3cgMS43LjggYmVjYXVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4tLWxpc3Q8L2ZpbGVuYW1lPiBvcHRpb24gaXMgbm93IHJlcXVpcmVkIGJ5CisgICAgICAgICAgICBCaXRCYWtlJ3MgR2l0IGZldGNoZXIuCisgICAgICAgICAgICBBcyBhbHdheXMsIGlmIHlvdXIgaG9zdCBkaXN0cmlidXRpb24gZG9lcyBub3QgcHJvdmlkZSBhIHZlcnNpb24gb2YKKyAgICAgICAgICAgIEdpdCB0aGF0IG1lZXRzIHRoaXMgcmVxdWlyZW1lbnQsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkdG9vbHMtdGFyYmFsbDwvZmlsZW5hbWU+IHRoYXQgZG9lcy4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1hdXRvdG9vbHMtY2xhc3MtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5BdXRvdG9vbHMgQ2xhc3MgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGNoYW5nZXMgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGlzIG5vdyB1c2VkIGJ5IGRlZmF1bHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcyBoYXMgYmVlbiBjaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhIGRpcmVjdG9yeSBmb3IgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHNlcGFyYXRlIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkIgIT0gUzwvZmlsZW5hbWU+LCBvciBhbiBvdXQtb2YtdHJlZSBidWlsZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBpcyBhbHJlYWR5IGNhcGFibGUgb2YKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgaW4gYSBkaXJlY3Rvcnkgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZSBzb2Z0d2FyZSBpcyBub3QgY2FwYWJsZSBvZiBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIG1hbm5lciwgeW91IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBlaXRoZXIgcGF0Y2ggdGhlIHNvZnR3YXJlIHNvIHRoYXQgaXQgY2FuIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlbHksIG9yIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHRoZSByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzLWJyb2tlbnNlcCc+PGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaW5zdGVhZCBvZiB0aGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi0tZm9yZWlnbjwvZmlsZW5hbWU+IG9wdGlvbiBpcworICAgICAgICAgICAgICAgICAgICBubyBsb25nZXIgcGFzc2VkIHRvIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgcnVubmluZyA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiB0ZWxscyA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiB0aGF0IGEKKyAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBzb2Z0d2FyZSBwYWNrYWdlIGRvZXMgbm90IGZvbGxvdyB0aGUgR05VCisgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkcyBhbmQgdGhlcmVmb3JlIHNob3VsZCBub3QgYmUgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZGlzdHJpYnV0ZSBjZXJ0YWluIGZpbGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNoYW5nZUxvZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QVVUSE9SUzwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIG1ham9yaXR5IG9mIHVwc3RyZWFtIHNvZnR3YXJlIHBhY2thZ2VzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgdGVsbCA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiB0byBlbmFibGUgZm9yZWlnbiBtb2RlCisgICAgICAgICAgICAgICAgICAgIHRoZW1zZWx2ZXMsIHRoZSBvcHRpb24gaXMgbW9zdGx5IHN1cGVyZmx1b3VzLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBzb21lIHJlY2lwZXMgd2lsbCBuZWVkIHBhdGNoZXMgZm9yIHRoaXMgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVhc2lseSBtYWtlIHRoZSBjaGFuZ2UgYnkgcGF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZS5hYzwvZmlsZW5hbWU+IHNvIHRoYXQgaXQgcGFzc2VzCisgICAgICAgICAgICAgICAgICAgICJmb3JlaWduIiB0byA8ZmlsZW5hbWU+QU1fSU5JVF9BVVRPTUFLRSgpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aWQ9MDE5NDMxODhmODVjZTY0MTE3MTdmYjViZjcwMmQ2MDlmNTU4MTNmMic+dGhpcyBjb21taXQ8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZSBzaG93aW5nIGhvdyB0byBtYWtlIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWJpbmFyeS1jb25maWd1cmF0aW9uLXNjcmlwdHMtZGlzYWJsZWQnPgorICAgICAgICA8dGl0bGU+QmluYXJ5IENvbmZpZ3VyYXRpb24gU2NyaXB0cyBEaXNhYmxlZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIG9mIHRoZSBjb3JlIHJlY2lwZXMgdGhhdCBwYWNrYWdlIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMKKyAgICAgICAgICAgIG5vdyBkaXNhYmxlIHRoZSBzY3JpcHRzIGR1ZSB0byB0aGUKKyAgICAgICAgICAgIHNjcmlwdHMgcHJldmlvdXNseSByZXF1aXJpbmcgZXJyb3ItcHJvbmUgcGF0aCBzdWJzdGl0dXRpb24uCisgICAgICAgICAgICBTb2Z0d2FyZSB0aGF0IGxpbmtzIGFnYWluc3QgdGhlc2UgbGlicmFyaWVzIHVzaW5nIHRoZXNlIHNjcmlwdHMKKyAgICAgICAgICAgIHNob3VsZCB1c2UgdGhlIG11Y2ggbW9yZSByb2J1c3QgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgICAgIFRoZSBsaXN0IG9mIHJlY2lwZXMgY2hhbmdlZCBpbiB0aGlzIHZlcnNpb24gKGFuZCB0aGVpcgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHRzKSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkaXJlY3RmYiAoZGlyZWN0ZmItY29uZmlnKQorICAgICBmcmVldHlwZSAoZnJlZXR5cGUtY29uZmlnKQorICAgICBncGdtZSAoZ3BnbWUtY29uZmlnKQorICAgICBsaWJhc3N1YW4gKGxpYmFzc3Vhbi1jb25maWcpCisgICAgIGxpYmNyb2NvIChjcm9jby02LjAtY29uZmlnKQorICAgICBsaWJnY3J5cHQgKGxpYmdjcnlwdC1jb25maWcpCisgICAgIGxpYmdwZy1lcnJvciAoZ3BnLWVycm9yLWNvbmZpZykKKyAgICAgbGlia3NiYSAoa3NiYS1jb25maWcpCisgICAgIGxpYnBjYXAgKHBjYXAtY29uZmlnKQorICAgICBsaWJwY3JlIChwY3JlLWNvbmZpZykKKyAgICAgbGlicG5nIChsaWJwbmctY29uZmlnLCBsaWJwbmcxNi1jb25maWcpCisgICAgIGxpYnNkbCAoc2RsLWNvbmZpZykKKyAgICAgbGlidXNiLWNvbXBhdCAobGlidXNiLWNvbmZpZykKKyAgICAgbGlieG1sMiAoeG1sMi1jb25maWcpCisgICAgIGxpYnhzbHQgKHhzbHQtY29uZmlnKQorICAgICBuY3Vyc2VzIChuY3Vyc2VzLWNvbmZpZykKKyAgICAgbmVvbiAobmVvbi1jb25maWcpCisgICAgIG5wdGggKG5wdGgtY29uZmlnKQorICAgICBwdGggKHB0aC1jb25maWcpCisgICAgIHRhZ2xpYiAodGFnbGliLWNvbmZpZykKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgc3VwcG9ydCBmb3IgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBoYXMgYmVlbgorICAgICAgICAgICAgYWRkZWQgdG8gc29tZSByZWNpcGVzIGluIHRoZSBwcmV2aW91cyBsaXN0IGluIHRoZSByYXJlIGNhc2VzCisgICAgICAgICAgICB3aGVyZSB0aGUgdXBzdHJlYW0gc29mdHdhcmUgcGFja2FnZSBkb2VzIG5vdCBhbHJlYWR5IHByb3ZpZGUKKyAgICAgICAgICAgIGl0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctZ2xpYmMtcmVwbGFjZXMtZWdsaWJjJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5lZ2xpYmMgMi4xOTwvZmlsZW5hbWU+IFJlcGxhY2VkIHdpdGggPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIDxmaWxlbmFtZT5lZ2xpYmM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IHdlcmUgYWxyZWFkeSBmYWlybHkgY2xvc2UsIHRoaXMKKyAgICAgICAgICAgIHJlcGxhY2VtZW50IHNob3VsZCBub3QgcmVxdWlyZSBhbnkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBvdGhlcgorICAgICAgICAgICAgc29mdHdhcmUgdGhhdCBsaW5rcyB0byA8ZmlsZW5hbWU+ZWdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICBIb3dldmVyLCB0aGVyZSB3ZXJlIGEgbnVtYmVyIG9mIG1pbm9yIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYyAyLjIwPC9maWxlbmFtZT4gdXBzdHJlYW0gdGhhdCBjb3VsZCByZXF1aXJlCisgICAgICAgICAgICBwYXRjaGluZyBzb21lIHNvZnR3YXJlIChlLmcuIHRoZSByZW1vdmFsIG9mIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPl9CU0RfU09VUkNFPC9maWxlbmFtZT4gZmVhdHVyZSB0ZXN0IG1hY3JvKS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPiByZXF1aXJlcyB2ZXJzaW9uIDIuNi4zMiBvciBncmVhdGVyCisgICAgICAgICAgICBvZiB0aGUgTGludXgga2VybmVsLgorICAgICAgICAgICAgVGh1cywgb2xkZXIga2VybmVscyB3aWxsIG5vIGxvbmdlciBiZSB1c2FibGUgaW4gY29uanVuY3Rpb24gd2l0aCBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGZ1bGwgZGV0YWlscyBvbiB0aGUgY2hhbmdlcyBpbiA8ZmlsZW5hbWU+Z2xpYmMgMi4yMDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgc2VlIHRoZSB1cHN0cmVhbSByZWxlYXNlIG5vdGVzCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAxNC0wOS9tc2cwMDA4OC5odG1sJz5oZXJlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1rZXJuZWwtbW9kdWxlLWF1dG9sb2FkaW5nJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBNb2R1bGUgQXV0b2xvYWRpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItbW9kdWxlX2F1dG9sb2FkJz48ZmlsZW5hbWU+bW9kdWxlX2F1dG9sb2FkXyo8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGlzIG5vdyBkZXByZWNhdGVkIGFuZCBhIG5ldworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorICAgICAgICAgICAgQWxzbywKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1tb2R1bGVfY29uZic+PGZpbGVuYW1lPm1vZHVsZV9jb25mXyo8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG11c3Qgbm93IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIG5ldworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfUFJPQkVDT05GJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgVGhlIG5ldyB2YXJpYWJsZXMgbm8gbG9uZ2VyIHJlcXVpcmUgeW91IHRvIHNwZWNpZnkgdGhlIG1vZHVsZSBuYW1lCisgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSB2YXJpYWJsZSBuYW1lLgorICAgICAgICAgICAgVGhpcyBjaGFuZ2Ugbm90IG9ubHkgc2ltcGxpZmllcyB1c2FnZSBidXQgYWxzbyBhbGxvd3MgdGhlIHZhbHVlcworICAgICAgICAgICAgb2YgdGhlc2UgdmFyaWFibGVzIHRvIGJlIGFwcHJvcHJpYXRlbHkgaW5jb3Jwb3JhdGVkIGludG8gdGFzaworICAgICAgICAgICAgc2lnbmF0dXJlcyBhbmQgdGh1cyB0cmlnZ2VyIHRoZSBhcHByb3ByaWF0ZSB0YXNrcyB0byByZS1leGVjdXRlCisgICAgICAgICAgICB3aGVuIGNoYW5nZWQuCisgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlcGxhY2UgYW55IHJlZmVyZW5jZXMgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWRfKjwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT4sIGFuZCBhZGQgYW55IG1vZHVsZXMKKyAgICAgICAgICAgIGZvciB3aGljaCA8ZmlsZW5hbWU+bW9kdWxlX2NvbmZfKjwvZmlsZW5hbWU+IGlzIHNwZWNpZmllZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfUFJPQkVDT05GPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9BVVRPTE9BRCc+PGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfUFJPQkVDT05GJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LXFhLWNoZWNrLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+UUEgQ2hlY2sgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZCB0byB0aGUgUUEgY2hlY2sgcHJvY2VzczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIFFBIGNoZWNrcyA8ZmlsZW5hbWU+ZmlsZS1yZGVwczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+YnVpbGQtZGVwczwvZmlsZW5hbWU+IGhhdmUgYmVlbiBhZGRlZCBpbgorICAgICAgICAgICAgICAgICAgICBvcmRlciB0byB2ZXJpZnkgdGhhdCBmaWxlIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkCisgICAgICAgICAgICAgICAgICAgIChlLmcuIHBhY2thZ2UgY29udGFpbnMgYSBzY3JpcHQgcmVxdWlyaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluL2Jhc2g8L2ZpbGVuYW1lPikgYW5kIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBkZWNsYXJlZCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIFFBIGNoZWNrcyBhcmUgbm93IHBlcmZvcm1lZCBkdXJpbmcgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2VfcWEnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgcmF0aGVyIHRoYW4gYmVpbmcgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIG1vcmUgcGFyYWxsZWwgZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYW5nZSBpcyB1bmxpa2VseSB0byBiZSBhbiBpc3N1ZSBleGNlcHQgZm9yIGhpZ2hseQorICAgICAgICAgICAgICAgICAgICBjdXN0b21pemVkIHJlY2lwZXMgdGhhdCBkaXNhYmxlIHBhY2thZ2luZyB0YXNrcyB0aGVtc2VsdmVzCisgICAgICAgICAgICAgICAgICAgIGJ5IG1hcmtpbmcgdGhlbSBhcyA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciB0aG9zZSBwYWNrYWdlcywgeW91IHdpbGwgbmVlZCB0byBkaXNhYmxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV9xYTwvZmlsZW5hbWU+IHRhc2sgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBiZWluZyBvdmVyd3JpdHRlbiBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIG5vdyB0cmlnZ2VyIGFuIGVycm9yIGluc3RlYWQgb2YgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHNob3VsZCBub3QgYmUgb3ZlcndyaXRpbmcgZmlsZXMgd3JpdHRlbiB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBieSBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSB0aGVzZSB0eXBlcyBvZiByZWNpcGVzLCB5b3UgbmVlZCB0byBhbHRlciB0aGVtCisgICAgICAgICAgICAgICAgICAgIHNvIHRoYXQgdGhleSBkbyBub3Qgb3ZlcndyaXRlIHRoZXNlIGZpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IG1pZ2h0IG5vdyByZWNlaXZlIHRoaXMgZXJyb3IgYWZ0ZXIgY2hhbmdlcyBpbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9yIG1ldGFkYXRhIHJlc3VsdGluZyBpbiBvcnBoYW5lZCBmaWxlcworICAgICAgICAgICAgICAgICAgICBiZWluZyBsZWZ0IGluIHRoZSBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gcmVjZWl2ZSB0aGlzIGVycm9yLCB0aGUgd2F5IHRvIHJlc29sdmUgdGhlIGlzc3VlCisgICAgICAgICAgICAgICAgICAgIGlzIHRvIGRlbGV0ZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IgdG8gbW92ZSBpdCBvdXQgb2YgdGhlIHdheSBhbmQgdGhlbiByZS1zdGFydCB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIEFueXRoaW5nIHRoYXQgaGFzIGJlZW4gZnVsbHkgYnVpbHQgdXAgdG8gdGhhdCBwb2ludCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgbmVlZCByZWJ1aWxkaW5nIHdpbGwgYmUgcmVzdG9yZWQgZnJvbSB0aGUgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgIHN0YXRlIGNhY2hlIGFuZCB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgd2lsbCBiZSBhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIHByb2NlZWQgYXMgbm9ybWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctcmVtb3ZlZC1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBiZWVuIHJlbW92ZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPngtbG9hZDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIFUtYm9vdCBTUEwgZm9yIGFsbCBDb3J0ZXgtYmFzZWQgVEkgU29Dcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGxlZ2FjeSBib2FyZHMsIHRoZSA8ZmlsZW5hbWU+bWV0YS10aTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLCB3aGljaCBjb250YWlucyBhIG1haW50YWluZWQgcmVjaXBlLCBzaG91bGQgYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51Ym9vdGNoYXJ0PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5ib290Y2hhcnQyPC9maWxlbmFtZT4gcmVjaXBlIGhhcyBiZWVuIGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIGZ1bmN0aW9uYWxseSByZXBsYWNlIGl0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0byAzLjQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIGxpbnV4LXlvY3RvIDMuNCBrZXJuZWwgaGFzIGJlZW4gZHJvcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIDMuMTAgYW5kIDMuMTQga2VybmVscyByZW1haW5zLCB3aGlsZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB2ZXJzaW9uIDMuMTcgaGFzIGJlZW4gYWRkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVnbGliYzwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21pZ3JhdGlvbi0xLjctZ2xpYmMtcmVwbGFjZXMtZWdsaWJjJz48ZmlsZW5hbWU+ZWdsaWJjIDIuMTk8L2ZpbGVuYW1lPiBSZXBsYWNlZCB3aXRoIDxmaWxlbmFtZT5nbGliYyAyLjIwPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctbWlzY2VsbGFuZW91cy1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPk1pc2NlbGxhbmVvdXMgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG1pc2NlbGxhbmVvdXMgY2hhbmdlIG9jY3VycmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmUgbm93IHdyaXRlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQtaWQudHh0PC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQtaWQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCA8ZmlsZW5hbWU+YnVpbGQtaWQudHh0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbm93IGNvbnRhaW5zIHRoZSBmdWxsIGJ1aWxkIGhlYWRlciBhcyBwcmludGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXBvbiBzdGFydGluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbWFudWFsbHkgcmVtb3ZlIG9sZCAiYnVpbGQtaWQiIGZpbGVzIGZyb20geW91cgorICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBidWlsZCBoaXN0b3J5IHJlcG9zaXRvcmllcyB0byBhdm9pZCBjb25mdXNpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYnVpbGQgaGlzdG9yeSBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuOC1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1yZW1vdmVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5vd2wtdmlkZW88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSByZXBsYWNlZCBieSA8ZmlsZW5hbWU+Z3N0LXBsYXllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdha3U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSByZXBsYWNlZCBieSA8ZmlsZW5hbWU+Z3N0LXBsYXllcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdub21lLWRlc2t0b3A8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgbm93IGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgbm93IGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB5dGhvbi1hcmdwYXJzZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmFyZ3BhcnNlPC9maWxlbmFtZT4gbW9kdWxlIGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgaW4gdGhlIGRlZmF1bHQgUHl0aG9uIGRpc3RyaWJ1dGlvbiBpbiBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZWQgPGZpbGVuYW1lPnB5dGhvbi1hcmdwYXJzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHl0aG9uLWFyZ3BhcnNlPC9maWxlbmFtZT4gcmVjaXBlIGlzIG5vCisgICAgICAgICAgICAgICAgICAgIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+dGVsZXBhdGh5LXB5dGhvbiwgbGlidGVsZXBhdGh5LCB0ZWxlcGF0aHktZ2xpYiwgdGVsZXBhdGh5LWlkbGUsIHRlbGVwYXRoeS1taXNzaW9uLWNvbnRyb2w8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQWxsIHRoZXNlIHJlY2lwZXMgaGF2ZSBtb3ZlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGFuZCBhcmUgY29uc2VxdWVudGx5IG5vCisgICAgICAgICAgICAgICAgICAgIGxvbmdlciBuZWVkZWQgYnkgYW55IHJlY2lwZXMgaW4gT3BlbkVtYmVkZGVkLUNvcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bGludXgteW9jdG9fMy4xMDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bGludXgteW9jdG9fMy4xNzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgbGludXgteW9jdG8gMy4xMCBhbmQgMy4xNyBrZXJuZWxzIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIGRyb3BwZWQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSAzLjE0IGtlcm5lbCByZW1haW5zLCB3aGlsZSBzdXBwb3J0IGZvcgorICAgICAgICAgICAgICAgICAgICAzLjE5IGtlcm5lbCBoYXMgYmVlbiBhZGRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wb2t5LWZlZWQtY29uZmlnLW9wa2c8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaGFzIGJlY29tZSBvYnNvbGV0ZSBhbmQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5kaXN0cm8tZmVlZC1jb25maWc8L2ZpbGVuYW1lPiBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saWJhdiAwLjgueDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliYXYgOS54PC9maWxlbmFtZT4gaXMgbm93IHVzZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c2VkLW5hdGl2ZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBObyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBBIHdvcmtpbmcgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4gaXMgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjgtYmx1ZXonPgorICAgICAgICA8dGl0bGU+Qmx1ZVogNC54IC8gNS54IFNlbGVjdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQcm9wZXIgYnVpbHQtaW4gc3VwcG9ydCBmb3Igc2VsZWN0aW5nIEJsdWVaIDUueCBpbiBwcmVmZXJlbmNlCisgICAgICAgICAgICB0byB0aGUgZGVmYXVsdCBvZiA0Lnggbm93IGV4aXN0cy4KKyAgICAgICAgICAgIFRvIHVzZSBCbHVlWiA1LngsIHNpbXBseSBhZGQgImJsdWV6NSIgdG8geW91cgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICBJZiB5b3UgaGFkIHByZXZpb3VzbHkgYWRkZWQgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPiouYmJhcHBlbmQ8L2ZpbGVuYW1lPikgdG8gbWFrZSB0aGlzIHNlbGVjdGlvbiwgeW91IGNhbgorICAgICAgICAgICAgbm93IHJlbW92ZSB0aGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGEKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJsdWV0b290aCc+PGZpbGVuYW1lPmJsdWV0b290aDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgaGFzIGJlZW4gYWRkZWQgdG8gbWFrZSBzZWxlY3Rpb24gb2YgdGhlIGFwcHJvcHJpYXRlIGJsdWV0b290aAorICAgICAgICAgICAgc3VwcG9ydCB3aXRoaW4gYSByZWNpcGUgYSBsaXR0bGUgZWFzaWVyLgorICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gbWFrZSB1c2Ugb2YgdGhpcyBjbGFzcyBpbiBhIHJlY2lwZSwgYWRkIHNvbWV0aGluZworICAgICAgICAgICAgc3VjaCBhcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGJsdWV0b290aAorICAgICBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9CisgICAgIFBBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsLS1kaXNhYmxlLWJsdWV0b290aCxibHVlejQiCisgICAgIFBBQ0tBR0VDT05GSUdbYmx1ZXo1XSA9ICItLWVuYWJsZS1ibHVlejUsLS1kaXNhYmxlLWJsdWV6NSxibHVlejUiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1rZXJuZWwtYnVpbGQtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5LZXJuZWwgQnVpbGQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUga2VybmVsIGJ1aWxkIHByb2Nlc3Mgd2FzIGNoYW5nZWQgdG8gcGxhY2UgdGhlIHNvdXJjZQorICAgICAgICAgICAgaW4gYSBjb21tb24gc2hhcmVkIHdvcmsgYXJlYSBhbmQgdG8gcGxhY2UgYnVpbGQgYXJ0aWZhY3RzCisgICAgICAgICAgICBzZXBhcmF0ZWx5IGluIHRoZSBzb3VyY2UgY29kZSB0cmVlLgorICAgICAgICAgICAgSW4gdGhlb3J5LCBtaWdyYXRpb24gcGF0aHMgaGF2ZSBiZWVuIHByb3ZpZGVkIGZvciBtb3N0IGNvbW1vbgorICAgICAgICAgICAgdXNhZ2VzIGluIGtlcm5lbCByZWNpcGVzIGJ1dCB0aGlzIG1pZ2h0IG5vdCB3b3JrIGluIGFsbCBjYXNlcy4KKyAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHVzZXJzIG5lZWQgdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gKHNvdXJjZSBmaWxlcykgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IChidWlsZCBhcnRpZmFjdHMpIGFyZSB1c2VkCisgICAgICAgICAgICBjb3JyZWN0bHkgaW4gZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgRm9yIGtlcm5lbCByZWNpcGVzIHRoYXQgZG8gbm90IGluaGVyaXQgZnJvbQorICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC15b2N0bzwvZmlsZW5hbWU+IG9yIGluY2x1ZGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by5pbmM8L2ZpbGVuYW1lPiwgeW91IG1pZ2h0IHdpc2ggdG8KKyAgICAgICAgICAgIHJlZmVyIHRvIHRoZSA8ZmlsZW5hbWU+bGludXguaW5jPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIgZm9yIHRoZSBraW5kcyBvZiBjaGFuZ2VzIHlvdQorICAgICAgICAgICAgbmVlZCB0byBtYWtlLgorICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSwgaGVyZSBpcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvbWV0YS1vcGVuZW1iZWRkZWQvY29tbWl0L21ldGEtb2UvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXguaW5jP2lkPWZjNzEzMmVkZTI3YWM2NzY2OTQ0OGQzZDI4NDVjZTdkNDZjNmExZWUnPmNvbW1pdDwvdWxpbms+CisgICAgICAgICAgICB3aGVyZSB0aGUgPGZpbGVuYW1lPmxpbnV4LmluYzwvZmlsZW5hbWU+IGZpbGUgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gd2FzIHVwZGF0ZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlY2lwZXMgdGhhdCByZWx5IG9uIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgYW5kIGRvIG5vdCBpbmhlcml0CisgICAgICAgICAgICB0aGUgbW9kdWxlIGNsYXNzZXMgbWlnaHQgbmVlZCB0byBhZGQgZXhwbGljaXQgZGVwZW5kZW5jaWVzIG9uCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX3NoYXJlZF93b3JrZGlyPC9maWxlbmFtZT4ga2VybmVsIHRhc2ssIGZvciBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjgtc3NsJz4KKyAgICAgICAgPHRpdGxlPlNTTCAzLjAgaXMgTm93IERpc2FibGVkIGluIE9wZW5TU0w8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU1NMIDMuMCBpcyBub3cgZGlzYWJsZWQgd2hlbiBidWlsZGluZyBPcGVuU1NMLgorICAgICAgICAgICAgRGlzYWJsaW5nIFNTTCAzLjAgYXZvaWRzIGFueSBsaW5nZXJpbmcgaW5zdGFuY2VzIG9mIHRoZSBQT09ETEUKKyAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHkuCisgICAgICAgICAgICBJZiB5b3UgZmVlbCB5b3UgbXVzdCByZS1lbmFibGUgU1NMIDMuMCwgdGhlbiB5b3UgY2FuIGFkZCBhbgorICAgICAgICAgICAgYXBwZW5kIGZpbGUgKDxmaWxlbmFtZT4qLmJiYXBwZW5kPC9maWxlbmFtZT4pIGZvciB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuc3NsPC9maWxlbmFtZT4gcmVjaXBlIHRvIHJlbW92ZSAiLW5vLXNzbDMiCisgICAgICAgICAgICBmcm9tCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjgtZGVmYXVsdC1zeXNyb290LXBvaXNvbmluZyc+CisgICAgICAgIDx0aXRsZT5EZWZhdWx0IFN5c3Jvb3QgUG9pc29uaW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MnczwvZmlsZW5hbWU+IGRlZmF1bHQgc3lzcm9vdCBhbmQgaW5jbHVkZSBkaXJlY3RvcmllcworICAgICAgICAgICAgYXJlIG5vdyAicG9pc29uZWQiLgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBzeXNyb290IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFyZSBiZWluZworICAgICAgICAgICAgcmVkaXJlY3RlZCB0byBhIG5vbi1leGlzdGVudCBsb2NhdGlvbiBpbiBvcmRlciB0byBjYXRjaCB3aGVuCisgICAgICAgICAgICBob3N0IGRpcmVjdG9yaWVzIGFyZSBiZWluZyB1c2VkIGR1ZSB0byB0aGUgY29ycmVjdCBvcHRpb25zIG5vdAorICAgICAgICAgICAgYmVpbmcgcGFzc2VkLgorICAgICAgICAgICAgVGhpcyBwb2lzb25pbmcgYXBwbGllcyBib3RoIHRvIHRoZSBjcm9zcy1jb21waWxlciB1c2VkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIGJ1aWxkIGFuZCB0byB0aGUgY3Jvc3MtY29tcGlsZXIgcHJvZHVjZWQgaW4gdGhlIFNESy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgdGhpcyBjaGFuZ2UgY2F1c2VzIHNvbWV0aGluZyBpbiB0aGUgYnVpbGQgdG8gZmFpbCwgaXQgYWxtb3N0CisgICAgICAgICAgICBjZXJ0YWlubHkgbWVhbnMgdGhlIHZhcmlvdXMgY29tcGlsZXIgZmxhZ3MgYW5kIGNvbW1hbmRzIGFyZSBub3QKKyAgICAgICAgICAgIGJlaW5nIHBhc3NlZCBjb3JyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgcGllY2Ugb2Ygc29mdHdhcmUuCisgICAgICAgICAgICBJbiBzdWNoIGNhc2VzLCB5b3UgbmVlZCB0byB0YWtlIGNvcnJlY3RpdmUgc3RlcHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1yZWJ1aWxkLWltcHJvdmVtZW50cyc+CisgICAgICAgIDx0aXRsZT5SZWJ1aWxkIEltcHJvdmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmFzZSc+PGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWNtYWtlJz48ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzZXMgdG8gY2xlYW4gb3V0IGdlbmVyYXRlZCBmaWxlcyB3aGVuIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBuZWVkcyB0byBiZSByZS1leGVjdXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25lIG9mIHRoZSBpbXByb3ZlbWVudHMgaXMgdG8gYXR0ZW1wdCB0byBydW4gIm1ha2UgY2xlYW4iIGR1cmluZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPiB0YXNrIGlmIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+IGV4aXN0cy4KKyAgICAgICAgICAgIFNvbWUgc29mdHdhcmUgcGFja2FnZXMgZG8gbm90IHByb3ZpZGUgYSB3b3JraW5nIGNsZWFuIHRhcmdldAorICAgICAgICAgICAgd2l0aGluIHRoZWlyIG1ha2UgZmlsZXMuCisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBzdWNoIHJlY2lwZXMsIHlvdSBuZWVkIHRvIHNldAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNMRUFOQlJPS0VOJz48ZmlsZW5hbWU+Q0xFQU5CUk9LRU48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvICIxIiB3aXRoaW4gdGhlIHJlY2lwZSwgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENMRUFOQlJPS0VOID0gIjEiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1xYS1jaGVjay1hbmQtdmFsaWRhdGlvbi1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPlFBIENoZWNrIGFuZCBWYWxpZGF0aW9uIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBRQSBDaGVjayBhbmQgVmFsaWRhdGlvbiBDaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNhZ2Ugb2YgPGZpbGVuYW1lPlBSSU5DPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSB0cmlnZ2VyZWQgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBJdCBub3cgdHJpZ2dlcnMgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVtb3ZlIGFueSByZW1haW5pbmcgdXNhZ2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSSU5DPC9maWxlbmFtZT4gaW4gYW55IHJlY2lwZSBvciBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBhZGRpdGlvbmFsIFFBIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIGRldGVjdCB1c2FnZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtEfTwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz4gdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgdXNlZCBhdCBhbGwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzYW1lIGNoZWNrIGVuc3VyZXMgdGhhdCA8ZmlsZW5hbWU+JEQ8L2ZpbGVuYW1lPiBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlaW5zdC9wa2dfcG9zdGluc3QvcGtnX3ByZXJtL3BrZ19wb3N0cm08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+JHtEfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBub3cKKyAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gYmUgc2V0IHRvIGEgdmFsaWQgdmFsdWUgd2l0aGluIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IGlzIG5vdCBzZXQgaW4gdGhlIHJlY2lwZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpcyBub3QgYXV0b21hdGljYWxseSBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IGRvZXMgbm90IHBvaW50IHRvIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHRoYXQgZXhpc3RzIGF0IHRoZSB0aW1lIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZmluaXNoZXMsIGEgd2FybmluZyB3aWxsIGJlIHNob3duLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3cgdmFsaWRhdGVkIGZvciBjb3JyZWN0IGZvcm1hdHRpbmcgb2YgbXVsdGlwbGUKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmb3JtYXQgaXMgaW52YWxpZCAoZS5nLiBtdWx0aXBsZSBsaWNlbnNlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHdpdGggbm8gb3BlcmF0b3JzIHRvIHNwZWNpZnkgaG93IHRoZSBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcyBpbnRlcmFjdCksIHRoZW4gYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1taXNjZWxsYW5lb3VzLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbWlzY2VsbGFuZW91cyBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zZW5kLWVycm9yLXJlcG9ydDwvZmlsZW5hbWU+IHNjcmlwdCBub3cKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0cyBhICItcyIgb3B0aW9uIHRvIGJlIHNwZWNpZmllZCBiZWZvcmUgdGhlIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFzc3VtZXMgYSBzZXJ2ZXIgYWRkcmVzcyBpcyBiZWluZyBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5vZS1wa2dkYXRhLXV0aWw8L2ZpbGVuYW1lPiBzY3JpcHQgbm93CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdHMgYSAiLXAiIG9wdGlvbiB0byBiZSBzcGVjaWZpZWQgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggaXMgbm93CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPnBrZ2RhdGE8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhlIHNjcmlwdCB3aWxsIHJ1biBCaXRCYWtlIHRvIHF1ZXJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1iaXRiYWtlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1iaXRiYWtlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQwMmRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWJpdGJha2UueG1sCkBAIC0wLDAgKzEsNDcyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLWJpdGJha2UnPgorCisgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdEJha2UgaXMgYSBwcm9ncmFtIHdyaXR0ZW4gaW4gUHl0aG9uIHRoYXQgaW50ZXJwcmV0cyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdXNlZCBieQorICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgQXQgc29tZSBwb2ludCwgZGV2ZWxvcGVycyB3b25kZXIgd2hhdCBhY3R1YWxseSBoYXBwZW5zIHdoZW4geW91IGVudGVyOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgYW4gb3ZlcnZpZXcgb2Ygd2hhdCBoYXBwZW5zIGJlaGluZCB0aGUgc2NlbmVzIGZyb20gQml0QmFrZSdzIHBlcnNwZWN0aXZlLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBCaXRCYWtlIHN0cml2ZXMgdG8gYmUgYSBnZW5lcmljICJ0YXNrIiBleGVjdXRvciB0aGF0IGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgY29tcGxleCBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMuCisgICAgICAgIEFzIHN1Y2gsIGl0IGhhcyBubyByZWFsIGtub3dsZWRnZSBvZiB3aGF0IHRoZSB0YXNrcyBiZWluZyBleGVjdXRlZCBhY3R1YWxseSBkby4KKyAgICAgICAgQml0QmFrZSBqdXN0IGNvbnNpZGVycyBhIGxpc3Qgb2YgdGFza3Mgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGhhbmRsZXMKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgY29uc2lzdGluZyBvZiB2YXJpYWJsZXMgaW4gYSBjZXJ0YWluIGZvcm1hdCB0aGF0IGdldCBwYXNzZWQgdG8gdGhlIHRhc2tzLgorICAgIDwvbm90ZT4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1wYXJzaW5nJz4KKyAgICAgICAgPHRpdGxlPlBhcnNpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgY29uZmlndXJhdGlvbiBmaWxlcywgY2xhc3NlcywgYW5kIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIEJpdEJha2UgZG9lcyBpcyBsb29rIGZvciB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBUaGlzIGZpbGUgcmVzaWRlcyBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgd2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEJpdEJha2UgZmluZHMgaXQgYnkgZXhhbWluaW5nIGl0cworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiBlbnZpcm9ubWVudAorICAgICAgICAgICAgdmFyaWFibGUgYW5kIGxvb2tpbmcgZm9yIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mLzwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBsaXN0cyBvdGhlciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlcyB0byBpbmNsdWRlIGZyb20gYSA8ZmlsZW5hbWU+Y29uZi88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGJlbG93IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gZ2VuZXJhbCwgdGhlIG1vc3QgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIGEgdXNlcidzIHBlcnNwZWN0aXZlCisgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LCB3aGljaCBjb250YWlucyBhIHVzZXIncyBjdXN0b21pemVkCisgICAgICAgICAgICBzZXR0aW5ncyBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIE90aGVyIG5vdGFibGUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIChzZXQgYnkgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+RElTVFJPPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlKQorICAgICAgICAgICAgYW5kIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgKHNldCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TUFDSElORTwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSkuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IEJpdEJha2UgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgYm90aCB1c3VhbGx5IHNldCBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIFZhbGlkIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2Rpc3Ryby88L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFuZCB2YWxpZCBtYWNoaW5lIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgV2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGFyZSB2YXJpb3VzIDxmaWxlbmFtZT50dW5lLSouaW5jPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHByb3ZpZGUgY29tbW9uCisgICAgICAgICAgICAidHVuaW5nIiBzZXR0aW5ncyBzcGVjaWZpYyB0byBhbmQgc2hhcmVkIGJldHdlZW4gcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIGFuZCBtYWNoaW5lcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgdGhlIHBhcnNpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNvbWUgc3RhbmRhcmQgY2xhc3NlcyBhcmUgaW5jbHVkZWQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUgaXMgYWx3YXlzIGluY2x1ZGVkLgorICAgICAgICAgICAgT3RoZXIgY2xhc3NlcyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlOSEVSSVQnPklOSEVSSVQ8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIGFyZSBhbHNvIGluY2x1ZGVkLgorICAgICAgICAgICAgQ2xhc3MgZmlsZXMgYXJlIHNlYXJjaGVkIGZvciBpbiBhIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5CisgICAgICAgICAgICB1bmRlciB0aGUgcGF0aHMgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IGluIHRoZSBzYW1lIHdheSBhcworICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgY2xhc3NlcyBhcmUgaW5jbHVkZWQsIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBpcyBzZXQsIHVzdWFsbHkgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4sIGFuZCBkZWZpbmVzIHRoZSBsaXN0IG9mIHBsYWNlcyB0byBzZWFyY2ggZm9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLSovPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiBQb2t5LgorICAgICAgICAgICAgQWRkaW5nIGV4dHJhIGNvbnRlbnQgdG8gPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBpcyBiZXN0IGFjaGlldmVkIHRocm91Z2ggdGhlIHVzZSBvZgorICAgICAgICAgICAgQml0QmFrZSBsYXllcnMgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQKKyAgICAgICAgICAgIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgZWFjaCA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBpbiA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgc3RvcmVzIHRoZSB2YWx1ZXMgb2YgdmFyaW91cyB2YXJpYWJsZXMuCisgICAgICAgICAgICBJbiBzdW1tYXJ5LCBmb3IgZWFjaCA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgdGhlIGNvbmZpZ3VyYXRpb24gcGx1cyB0aGUgYmFzZSBjbGFzcyBvZiB2YXJpYWJsZXMgYXJlIHNldCwgZm9sbG93ZWQKKyAgICAgICAgICAgIGJ5IHRoZSBkYXRhIGluIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgaXRzZWxmLCBmb2xsb3dlZCBieSBhbnkgaW5oZXJpdCBjb21tYW5kcyB0aGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBtaWdodCBjb250YWluLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHBhcnNpbmcgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzIGlzIGEgdGltZQorICAgICAgICAgICAgY29uc3VtaW5nIHByb2Nlc3MsIGEgY2FjaGUgaXMga2VwdCB0byBzcGVlZCB1cCBzdWJzZXF1ZW50IHBhcnNpbmcuCisgICAgICAgICAgICBUaGlzIGNhY2hlIGlzIGludmFsaWQgaWYgdGhlIHRpbWVzdGFtcCBvZiB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGl0c2VsZiBjaGFuZ2VzLCBvciBpZiB0aGUgdGltZXN0YW1wcyBvZiBhbnkgb2YgdGhlIGluY2x1ZGUsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGNsYXNzIGZpbGVzIG9uIHdoaWNoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgZGVwZW5kcyBjaGFuZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mIGhvdyBCaXRCYWtlIHBhcnNlcyBjdXJseSBicmFjZXMuCisgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyBhIGNsb3NpbmcgY3VybHkgYnJhY2Ugd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQKKyAgICAgICAgICAgICAgICB0aGUgY2hhcmFjdGVyIGhhcyBubyBsZWFkaW5nIHNwYWNlcywgQml0QmFrZSBwcm9kdWNlcyBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvci4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGEgcGFpciBvZiBjdXJseSBicmFjZSBpbiBhIHNoZWxsIGZ1bmN0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICBjbG9zaW5nIGN1cmx5IGJyYWNlIG11c3Qgbm90IGJlIGxvY2F0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgd2l0aG91dCBsZWFkaW5nIHNwYWNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgY2F1c2VzIEJpdEJha2UgdG8gcHJvZHVjZSBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGZha2Vyb290IGNyZWF0ZV9zaGFyKCkgeworICAgICAgICAgY2F0ICZsdDsmbHQ7ICJFT0YiICZndDsgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorICAgICB1c2FnZSgpCisgICAgIHsKKyAgICAgICBlY2hvICJ0ZXN0IgorICAgICAgICMjIyMjIyBUaGUgZm9sbG93aW5nICJ9IiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgY2F1c2VzIGEgcGFyc2luZyBlcnJvciAjIyMjIyMKKyAgICAgfQorICAgICBFT0YKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXcml0aW5nIHRoZSByZWNpcGUgdGhpcyB3YXkgYXZvaWRzIHRoZSBlcnJvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGZha2Vyb290IGNyZWF0ZV9zaGFyKCkgeworICAgICAgICAgY2F0ICZsdDsmbHQ7ICJFT0YiICZndDsgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorICAgICB1c2FnZSgpCisgICAgIHsKKyAgICAgICBlY2hvICJ0ZXN0IgorICAgICAgICMjIyMjI1RoZSBmb2xsb3dpbmcgIn0iIHdpdGggYSBsZWFkaW5nIHNwYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBhdm9pZHMgdGhlIGVycm9yICMjIyMjIworICAgICAgfQorICAgICBFT0YKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1wcm92aWRlcnMnPgorICAgICAgICA8dGl0bGU+UHJlZmVyZW5jZXMgYW5kIFByb3ZpZGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGFsbCB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzIGhhdmUgYmVlbgorICAgICAgICAgICAgcGFyc2VkLCBCaXRCYWtlIHN0YXJ0cyB0byBidWlsZCB0aGUgdGFyZ2V0ICg8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uJ3MgZXhhbXBsZSkgYW5kIGxvb2tzIGZvciBwcm92aWRlcnMgb2YgdGhhdCB0YXJnZXQuCisgICAgICAgICAgICBPbmNlIGEgcHJvdmlkZXIgaXMgc2VsZWN0ZWQsIEJpdEJha2UgcmVzb2x2ZXMgYWxsIHRoZSBkZXBlbmRlbmNpZXMgZm9yCisgICAgICAgICAgICB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgSW4gdGhlIGNhc2Ugb2YgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+LCBpdCB3b3VsZCBsZWFkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG88L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gcmVjaXBlcyBsaWtlIDxmaWxlbmFtZT5tYXRjaGJveC10ZXJtaW5hbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnBjbWFuZm08L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmd0aHVtYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlc2UgcmVjaXBlcyBpbiB0dXJuIGRlcGVuZCBvbiA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiBhbmQgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzIGEgdGFyZ2V0IG1pZ2h0IGhhdmUgbXVsdGlwbGUgcHJvdmlkZXJzLgorICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSBpcyAidmlydHVhbC9rZXJuZWwiLCB3aGljaCBpcyBwcm92aWRlZCBieSBlYWNoIGtlcm5lbCBwYWNrYWdlLgorICAgICAgICAgICAgRWFjaCBtYWNoaW5lIG9mdGVuIHNlbGVjdHMgdGhlIGJlc3Qga2VybmVsIHByb3ZpZGVyIGJ5IHVzaW5nIGEgbGluZSBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgZm9sbG93aW5nIGluIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+UFJFRkVSUkVEX1BST1ZJREVSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBpcyB0aGUgcHJvdmlkZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgaG93IHByb3ZpZGVycyBhcmUgY2hvc2VuIGlzIG1hZGUgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QKKyAgICAgICAgICAgIHRoYXQgbXVsdGlwbGUgdmVyc2lvbnMgbWlnaHQgZXhpc3QuCisgICAgICAgICAgICBCaXRCYWtlIGRlZmF1bHRzIHRvIHRoZSBoaWdoZXN0IHZlcnNpb24gb2YgYSBwcm92aWRlci4KKyAgICAgICAgICAgIFZlcnNpb24gY29tcGFyaXNvbnMgYXJlIG1hZGUgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGFzIERlYmlhbi4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+UFJFRkVSUkVEX1ZFUlNJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHZlcnNpb24gKHVzdWFsbHkgaW4gdGhlIGRpc3RybyBjb25maWd1cmF0aW9uKS4KKyAgICAgICAgICAgIFlvdSBjYW4gaW5mbHVlbmNlIHRoZSBvcmRlciBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz5ERUZBVUxUX1BSRUZFUkVOQ0U8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgZmlsZXMgaGF2ZSBhIHByZWZlcmVuY2Ugb2YgIjAiLgorICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICItMSIgbWFrZXMgdGhlCisgICAgICAgICAgICBwYWNrYWdlIHVubGlrZWx5IHRvIGJlIHVzZWQgdW5sZXNzIGl0IGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4KKyAgICAgICAgICAgIFNldHRpbmcgdGhlIDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiB0byAiMSIgbWFrZXMgaXQgbGlrZWx5IHRoZSBwYWNrYWdlIGlzIHVzZWQuCisgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFRkVSUkVEX1ZFUlNJT048L2ZpbGVuYW1lPiBvdmVycmlkZXMgYW55IDxmaWxlbmFtZT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2ZpbGVuYW1lPiBzZXR0aW5nLgorICAgICAgICAgICAgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IGlzIG9mdGVuIHVzZWQgdG8gbWFyayBuZXdlciBhbmQgbW9yZSBleHBlcmltZW50YWwgcGFja2FnZQorICAgICAgICAgICAgdmVyc2lvbnMgdW50aWwgdGhleSBoYXZlIHVuZGVyZ29uZSBzdWZmaWNpZW50IHRlc3RpbmcgdG8gYmUgY29uc2lkZXJlZCBzdGFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIHN1bW1hcnksIEJpdEJha2UgaGFzIGNyZWF0ZWQgYSBsaXN0IG9mIHByb3ZpZGVycywgd2hpY2ggaXMgcHJpb3JpdGl6ZWQsIGZvciBlYWNoIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1kZXBlbmRlbmNpZXMnPgorICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVhY2ggdGFyZ2V0IEJpdEJha2UgYnVpbGRzIGNvbnNpc3RzIG9mIG11bHRpcGxlIHRhc2tzIHN1Y2ggYXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jb21waWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICBGb3IgYmVzdCBwZXJmb3JtYW5jZSBvbiBtdWx0aS1jb3JlIHN5c3RlbXMsIEJpdEJha2UgY29uc2lkZXJzIGVhY2ggdGFzayBhcyBhbiBpbmRlcGVuZGVudAorICAgICAgICAgICAgZW50aXR5IHdpdGggaXRzIG93biBzZXQgb2YgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgdGhyb3VnaCBzZXZlcmFsIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB2YXJpYWJsZXMgQml0QmFrZSB1c2VzIGluIHRoZSBCaXRCYWtlIGRvY3VtZW50YXRpb24sCisgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UvZG9jL21hbnVhbDwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBBdCBhIGJhc2ljIGxldmVsLCBpdCBpcyBzdWZmaWNpZW50IHRvIGtub3cgdGhhdCBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZXMgd2hlbgorICAgICAgICAgICAgY2FsY3VsYXRpbmcgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXRhc2tsaXN0Jz4KKyAgICAgICAgPHRpdGxlPlRoZSBUYXNrIExpc3Q8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmFzZWQgb24gdGhlIGdlbmVyYXRlZCBsaXN0IG9mIHByb3ZpZGVycyBhbmQgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24sCisgICAgICAgICAgICBCaXRCYWtlIGNhbiBub3cgY2FsY3VsYXRlIGV4YWN0bHkgd2hhdCB0YXNrcyBpdCBuZWVkcyB0byBydW4gYW5kIGluIHdoYXQKKyAgICAgICAgICAgIG9yZGVyIGl0IG5lZWRzIHRvIHJ1biB0aGVtLgorICAgICAgICAgICAgVGhlIGJ1aWxkIG5vdyBzdGFydHMgd2l0aCBCaXRCYWtlIGZvcmtpbmcgb2ZmIHRocmVhZHMgdXAgdG8gdGhlIGxpbWl0IHNldCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPkJCX05VTUJFUl9USFJFQURTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgQml0QmFrZSBjb250aW51ZXMgdG8gZm9yayB0aHJlYWRzIGFzIGxvbmcgYXMgdGhlcmUgYXJlIHRhc2tzIHJlYWR5IHRvIHJ1biwKKyAgICAgICAgICAgIHRob3NlIHRhc2tzIGhhdmUgYWxsIHRoZWlyIGRlcGVuZGVuY2llcyBtZXQsIGFuZCB0aGUgdGhyZWFkIHRocmVzaG9sZCBoYXMgbm90IGJlZW4KKyAgICAgICAgICAgIGV4Y2VlZGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB5b3UgY2FuIGdyZWF0bHkgc3BlZWQgdXAgdGhlIGJ1aWxkIHRpbWUgYnkgcHJvcGVybHkgc2V0dGluZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcXMtYnVpbGRpbmctaW1hZ2VzJz5CdWlsZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGVhY2ggdGFzayBjb21wbGV0ZXMsIGEgdGltZXN0YW1wIGlzIHdyaXR0ZW4gdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QJz5TVEFNUDwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIE9uIHN1YnNlcXVlbnQgcnVucywgQml0QmFrZSBsb29rcyB3aXRoaW4gdGhlIDxmaWxlbmFtZT5idWlsZC90bXAvc3RhbXBzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgZG9lcyBub3QgcmVydW4KKyAgICAgICAgICAgIHRhc2tzIHRoYXQgYXJlIGFscmVhZHkgY29tcGxldGVkIHVubGVzcyBhIHRpbWVzdGFtcCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLgorICAgICAgICAgICAgQ3VycmVudGx5LCBpbnZhbGlkIHRpbWVzdGFtcHMgYXJlIG9ubHkgY29uc2lkZXJlZCBvbiBhIHBlcgorICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgYmFzaXMuCisgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGlmIHRoZSBjb25maWd1cmUgc3RhbXAgaGFzIGEgdGltZXN0YW1wIGdyZWF0ZXIgdGhhbiB0aGUKKyAgICAgICAgICAgIGNvbXBpbGUgdGltZXN0YW1wIGZvciBhIGdpdmVuIHRhcmdldCwgdGhlbiB0aGUgY29tcGlsZSB0YXNrIHdvdWxkIHJlcnVuLgorICAgICAgICAgICAgUnVubmluZyB0aGUgY29tcGlsZSB0YXNrIGFnYWluLCBob3dldmVyLCBoYXMgbm8gZWZmZWN0IG9uIG90aGVyIHByb3ZpZGVycworICAgICAgICAgICAgdGhhdCBkZXBlbmQgb24gdGhhdCB0YXJnZXQuCisgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGNvdWxkIGNoYW5nZSBvciBiZWNvbWUgY29uZmlndXJhYmxlIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBTb21lIHRhc2tzIGFyZSBtYXJrZWQgYXMgIm5vc3RhbXAiIHRhc2tzLgorICAgICAgICAgICAgTm8gdGltZXN0YW1wIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHRoZXNlIHRhc2tzIGFyZSBydW4uCisgICAgICAgICAgICBDb25zZXF1ZW50bHksICJub3N0YW1wIiB0YXNrcyBhcmUgYWx3YXlzIHJlcnVuLgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXJ1bnRhc2snPgorICAgICAgICA8dGl0bGU+UnVubmluZyBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGFza3MgY2FuIGVpdGhlciBiZSBhIHNoZWxsIHRhc2sgb3IgYSBQeXRob24gdGFzay4KKyAgICAgICAgICAgIEZvciBzaGVsbCB0YXNrcywgQml0QmFrZSB3cml0ZXMgYSBzaGVsbCBzY3JpcHQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvcnVuLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+IGFuZCB0aGVuIGV4ZWN1dGVzIHRoZSBzY3JpcHQuCisgICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNoZWxsIHNjcmlwdCBjb250YWlucyBhbGwgdGhlIGV4cG9ydGVkIHZhcmlhYmxlcywgYW5kIHRoZSBzaGVsbCBmdW5jdGlvbnMKKyAgICAgICAgICAgIHdpdGggYWxsIHZhcmlhYmxlcyBleHBhbmRlZC4KKyAgICAgICAgICAgIE91dHB1dCBmcm9tIHRoZSBzaGVsbCBzY3JpcHQgZ29lcyB0byB0aGUgZmlsZSA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb190YXNrbmFtZS5waWQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIExvb2tpbmcgYXQgdGhlIGV4cGFuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiB0aGUgcnVuIGZpbGUgYW5kIHRoZSBvdXRwdXQgaW4gdGhlIGxvZyBmaWxlcworICAgICAgICAgICAgaXMgYSB1c2VmdWwgZGVidWdnaW5nIHRlY2huaXF1ZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIFB5dGhvbiB0YXNrcywgQml0QmFrZSBleGVjdXRlcyB0aGUgdGFzayBpbnRlcm5hbGx5IGFuZCBsb2dzIGluZm9ybWF0aW9uIHRvIHRoZQorICAgICAgICAgICAgY29udHJvbGxpbmcgdGVybWluYWwuCisgICAgICAgICAgICBGdXR1cmUgdmVyc2lvbnMgb2YgQml0QmFrZSB3aWxsIHdyaXRlIHRoZSBmdW5jdGlvbnMgdG8gZmlsZXMgc2ltaWxhciB0byB0aGUgd2F5CisgICAgICAgICAgICBzaGVsbCB0YXNrcyBhcmUgaGFuZGxlZC4KKyAgICAgICAgICAgIExvZ2dpbmcgd2lsbCBiZSBoYW5kbGVkIGluIGEgd2F5IHNpbWlsYXIgdG8gc2hlbGwgdGFza3MgYXMgd2VsbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBhbGwgdGhlIHRhc2tzIGhhdmUgYmVlbiBjb21wbGV0ZWQgQml0QmFrZSBleGl0cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBydW5uaW5nIGEgdGFzaywgQml0QmFrZSB0aWdodGx5IGNvbnRyb2xzIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQKKyAgICAgICAgICAgIG9mIHRoZSBidWlsZCB0YXNrcyB0byBtYWtlIHN1cmUgdW53YW50ZWQgY29udGFtaW5hdGlvbiBmcm9tIHRoZSBidWlsZCBtYWNoaW5lCisgICAgICAgICAgICBjYW5ub3QgaW5mbHVlbmNlIHRoZSBidWlsZC4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGRvIHdhbnQgc29tZXRoaW5nIHRvIGdldCBwYXNzZWQgaW50byB0aGUgYnVpbGQKKyAgICAgICAgICAgIHRhc2sncyBlbnZpcm9ubWVudCwgeW91IG11c3QgdGFrZSBhIGZldyBzdGVwczoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGVsbCBCaXRCYWtlIHRvIGxvYWQgd2hhdCB5b3Ugd2FudCBmcm9tIHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBkYXRhIHN0b3JlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvIHNvIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5CQl9FTlZfRVhUUkFXSElURTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzdW1lIHlvdSB3YW50IHRvIHByZXZlbnQgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB5b3VyIDxmaWxlbmFtZT4kSE9NRS8uY2NhY2hlPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgdGVsbHMgQml0QmFrZSB0byBsb2FkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DQ0FDSEVfRElSPC9maWxlbmFtZT4gZnJvbSB0aGUgZW52aXJvbm1lbnQgaW50byB0aGUgZGF0YQorICAgICAgICAgICAgICAgICAgICBzdG9yZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgQkJfRU5WX0VYVFJBV0hJVEU9IiRCQl9FTlZfRVhUUkFXSElURSBDQ0FDSEVfRElSIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRlbGwgQml0QmFrZSB0byBleHBvcnQgd2hhdCB5b3UgaGF2ZSBsb2FkZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc3RvcmUgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBMb2FkaW5nIHNvbWV0aGluZyBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbnRvIHRoZSBkYXRhIHN0b3JlCisgICAgICAgICAgICAgICAgICAgIChwcmV2aW91cyBzdGVwKSBvbmx5IG1ha2VzIGl0IGF2YWlsYWJsZSBpbiB0aGUgZGF0YXN0b3JlLgorICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgaXQgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLAorICAgICAgICAgICAgICAgICAgICB1c2UgYSBjb21tYW5kIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgZGlzdHJvIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgQ0NBQ0hFX0RJUgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBBIHNpZGUgZWZmZWN0IG9mIHRoZSBwcmV2aW91cyBzdGVwcyBpcyB0aGF0IEJpdEJha2UgcmVjb3JkcyB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBpbiB0aGluZ3MgbGlrZSB0aGUgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICBjaGVja3N1bXMuCisgICAgICAgICAgICBJZiBkb2luZyBzbyByZXN1bHRzIGluIHVubmVjZXNzYXJ5IHJlYnVpbGRzIG9mIHRhc2tzLCB5b3UgY2FuIHdoaXRlbGlzdCB0aGUKKyAgICAgICAgICAgIHZhcmlhYmxlIHNvIHRoYXQgdGhlIHNoYXJlZCBzdGF0ZSBjb2RlIGlnbm9yZXMgdGhlIGRlcGVuZGVuY3kgd2hlbiBpdCBjcmVhdGVzCisgICAgICAgICAgICBjaGVja3N1bXMuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9jZXNzLCBzZWUgdGhlIDxmaWxlbmFtZT5CQl9IQVNIQkFTRV9XSElURUxJU1Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZXhhbXBsZSBpbiB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NoZWNrc3Vtcyc+Q2hlY2tzdW1zIChTaWduYXR1cmVzKTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtY29tbWFuZGxpbmUnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZSBDb21tYW5kIExpbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBCaXRCYWtlIGhlbHAgb3V0cHV0OgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNjcmVlbj4KKyQgYml0YmFrZSAtLWhlbHAKK1VzYWdlOiBiaXRiYWtlIFtvcHRpb25zXSBbcmVjaXBlbmFtZS90YXJnZXQgLi4uXQorCisgICAgRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIChkZWZhdWx0IGlzICdidWlsZCcpIGZvciBhIGdpdmVuIHNldCBvZiB0YXJnZXQgcmVjaXBlcyAoLmJiIGZpbGVzKS4KKyAgICBJdCBpcyBhc3N1bWVkIHRoZXJlIGlzIGEgY29uZi9iYmxheWVycy5jb25mIGF2YWlsYWJsZSBpbiBjd2Qgb3IgaW4gQkJQQVRIIHdoaWNoCisgICAgd2lsbCBwcm92aWRlIHRoZSBsYXllciwgQkJGSUxFUyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKworT3B0aW9uczoKKyAgLS12ZXJzaW9uICAgICAgICAgICAgIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgIC1iIEJVSUxERklMRSwgLS1idWlsZGZpbGU9QlVJTERGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlIHRhc2tzIGZyb20gYSBzcGVjaWZpYyAuYmIgcmVjaXBlIGRpcmVjdGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORzogRG9lcyBub3QgaGFuZGxlIGFueSBkZXBlbmRlbmNpZXMgZnJvbSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgLWssIC0tY29udGludWUgICAgICAgIENvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYW4gZXJyb3IuIFdoaWxlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHRoYXQgZmFpbGVkIGFuZCBhbnl0aGluZyBkZXBlbmRpbmcgb24gaXQgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICBiZSBidWlsdCwgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aWxsIGJlIGJ1aWx0IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmcuCisgIC1hLCAtLXRyeWFsdGNvbmZpZ3MgICBDb250aW51ZSB3aXRoIGJ1aWxkcyBieSB0cnlpbmcgdG8gdXNlIGFsdGVybmF0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisgIC1mLCAtLWZvcmNlICAgICAgICAgICBGb3JjZSB0aGUgc3BlY2lmaWVkIHRhcmdldHMvdGFzayB0byBydW4gKGludmFsaWRhdGluZworICAgICAgICAgICAgICAgICAgICAgICAgYW55IGV4aXN0aW5nIHN0YW1wIGZpbGUpLgorICAtYyBDTUQsIC0tY21kPUNNRCAgICAgU3BlY2lmeSB0aGUgdGFzayB0byBleGVjdXRlLiBUaGUgZXhhY3Qgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGRlcGVuZCBvbiB0aGUgbWV0YWRhdGEuIFNvbWUgZXhhbXBsZXMgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlICdjb21waWxlJyBvciAncG9wdWxhdGVfc3lzcm9vdCcgb3IgJ2xpc3R0YXNrcycgbWF5CisgICAgICAgICAgICAgICAgICAgICAgICBnaXZlIGEgbGlzdCBvZiB0aGUgdGFza3MgYXZhaWxhYmxlLgorICAtQyBJTlZBTElEQVRFX1NUQU1QLCAtLWNsZWFyLXN0YW1wPUlOVkFMSURBVEVfU1RBTVAKKyAgICAgICAgICAgICAgICAgICAgICAgIEludmFsaWRhdGUgdGhlIHN0YW1wIGZvciB0aGUgc3BlY2lmaWVkIHRhc2sgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGUnIGFuZCB0aGVuIHJ1biB0aGUgZGVmYXVsdCB0YXNrIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCB0YXJnZXQocykuCisgIC1yIFBSRUZJTEUsIC0tcmVhZD1QUkVGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLgorICAtUiBQT1NURklMRSwgLS1wb3N0cmVhZD1QT1NURklMRQorICAgICAgICAgICAgICAgICAgICAgICAgUmVhZCB0aGUgc3BlY2lmaWVkIGZpbGUgYWZ0ZXIgYml0YmFrZS5jb25mLgorICAtdiwgLS12ZXJib3NlICAgICAgICAgT3V0cHV0IG1vcmUgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuCisgIC1ELCAtLWRlYnVnICAgICAgICAgICBJbmNyZWFzZSB0aGUgZGVidWcgbGV2ZWwuIFlvdSBjYW4gc3BlY2lmeSB0aGlzIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gb25jZS4KKyAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4KKyAgLVMsIC0tZHVtcC1zaWduYXR1cmVzCisgICAgICAgICAgICAgICAgICAgICAgICBEb24ndCBleGVjdXRlLCBqdXN0IGR1bXAgb3V0IHRoZSBzaWduYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdGlvbiBpbmZvcm1hdGlvbi4KKyAgLXAsIC0tcGFyc2Utb25seSAgICAgIFF1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgcmVjaXBlcy4KKyAgLXMsIC0tc2hvdy12ZXJzaW9ucyAgIFNob3cgY3VycmVudCBhbmQgcHJlZmVycmVkIHZlcnNpb25zIG9mIGFsbCByZWNpcGVzLgorICAtZSwgLS1lbnZpcm9ubWVudCAgICAgU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1wYWNrYWdlIGVudmlyb25tZW50IGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHZhcmlhYmxlcyB3ZXJlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQvY2hhbmdlZC4KKyAgLWcsIC0tZ3JhcGh2aXogICAgICAgIFNhdmUgZGVwZW5kZW5jeSB0cmVlIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzIGluIHRoZSBkb3Qgc3ludGF4LgorICAtSSBFWFRSQV9BU1NVTUVfUFJPVklERUQsIC0taWdub3JlLWRlcHM9RVhUUkFfQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgICAgICAgICBBc3N1bWUgdGhlc2UgZGVwZW5kZW5jaWVzIGRvbid0IGV4aXN0IGFuZCBhcmUgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgKGVxdWl2YWxlbnQgdG8gQVNTVU1FX1BST1ZJREVEKS4gVXNlZnVsIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nCisgIC1sIERFQlVHX0RPTUFJTlMsIC0tbG9nLWRvbWFpbnM9REVCVUdfRE9NQUlOUworICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucworICAtUCwgLS1wcm9maWxlICAgICAgICAgUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLgorICAtdSBVSSwgLS11aT1VSSAgICAgICAgVGhlIHVzZXIgaW50ZXJmYWNlIHRvIHVzZSAoZS5nLiBrbm90dHksIGhvYiwgZGVwZXhwKS4KKyAgLXQgU0VSVkVSVFlQRSwgLS1zZXJ2ZXJ0eXBlPVNFUlZFUlRZUEUKKyAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBwcm9jZXNzIG9yIHhtbHJwYy4KKyAgLS1yZXZpc2lvbnMtY2hhbmdlZCAgIFNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyByZXZpc2lvbnMgaGF2ZSBjaGFuZ2VkIG9yIG5vdC4KKyAgLS1zZXJ2ZXItb25seSAgICAgICAgIFJ1biBiaXRiYWtlIHdpdGhvdXQgYSBVSSwgb25seSBzdGFydGluZyBhIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICAgICAgKGNvb2tlcikgcHJvY2Vzcy4KKyAgLUIgQklORCwgLS1iaW5kPUJJTkQgIFRoZSBuYW1lL2FkZHJlc3MgZm9yIHRoZSBiaXRiYWtlIHNlcnZlciB0byBiaW5kIHRvLgorICAtLW5vLXNldHNjZW5lICAgICAgICAgRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MuIHNzdGF0ZSB3aWxsIGJlIGlnbm9yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVyeXRoaW5nIG5lZWRlZCwgYnVpbHQuCisgIC0tcmVtb3RlLXNlcnZlcj1SRU1PVEVfU0VSVkVSCisgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0IHRvIHRoZSBzcGVjaWZpZWQgc2VydmVyLgorICAtbSwgLS1raWxsLXNlcnZlciAgICAgVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLgorICAtLW9ic2VydmUtb25seSAgICAgICAgQ29ubmVjdCB0byBhIHNlcnZlciBhcyBhbiBvYnNlcnZpbmctb25seSBjbGllbnQuCisgICAgICAgIDwvc2NyZWVuPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1mZXRjaGVycyc+CisgICAgICAgIDx0aXRsZT5GZXRjaGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsc28gY29udGFpbnMgYSBzZXQgb2YgImZldGNoZXIiIG1vZHVsZXMgdGhhdCBhbGxvdworICAgICAgICAgICAgcmV0cmlldmFsIG9mIHNvdXJjZSBjb2RlIGZyb20gdmFyaW91cyB0eXBlcyBvZiBzb3VyY2VzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIEJpdEJha2UgY2FuIGdldCBzb3VyY2UgY29kZSBmcm9tIGEgZGlzayB3aXRoIHRoZSBtZXRhZGF0YSwgZnJvbSB3ZWJzaXRlcywKKyAgICAgICAgICAgIGZyb20gcmVtb3RlIHNoZWxsIGFjY291bnRzLCBvciBmcm9tIFNvdXJjZSBDb2RlIE1hbmFnZW1lbnQgKFNDTSkgc3lzdGVtcworICAgICAgICAgICAgbGlrZSA8ZmlsZW5hbWU+Y3ZzL3N1YnZlcnNpb24vZ2l0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZldGNoZXJzIGFyZSB1c3VhbGx5IHRyaWdnZXJlZCBieSBlbnRyaWVzIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPlNSQ19VUkk8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9wdGlvbnMgYW5kIGZvcm1hdHMgb2YgZW50cmllcyBmb3Igc3BlY2lmaWMKKyAgICAgICAgICAgIGZldGNoZXJzIGluIHRoZSBCaXRCYWtlIG1hbnVhbCBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvZG9jL21hbnVhbDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25lIHVzZWZ1bCBmZWF0dXJlIGZvciBjZXJ0YWluIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgZmV0Y2hlcnMgaXMgdGhlIGFiaWxpdHkgdG8KKyAgICAgICAgICAgICJhdXRvLXVwZGF0ZSIgd2hlbiB0aGUgdXBzdHJlYW0gU0NNIGNoYW5nZXMgdmVyc2lvbi4KKyAgICAgICAgICAgIFNpbmNlIHRoaXMgYWJpbGl0eSByZXF1aXJlcyBjZXJ0YWluIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGUgU0NNLCBub3QgYWxsCisgICAgICAgICAgICBzeXN0ZW1zIHN1cHBvcnQgaXQuCisgICAgICAgICAgICBDdXJyZW50bHkgU3VidmVyc2lvbiwgQmF6YWFyIGFuZCB0byBhIGxpbWl0ZWQgZXh0ZW50LCBHaXQgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byAiYXV0by11cGRhdGUiLgorICAgICAgICAgICAgVGhpcyBmZWF0dXJlIHdvcmtzIHVzaW5nIHRoZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+U1JDUkVWPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1zcmNyZXYnPlVzaW5nIGFuIEV4dGVybmFsIFNDTTwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NCBzcGVsbCBzcGVsbGxhbmc9ZW5fZ2IKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4N2M5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtY2xhc3Nlcy54bWwKQEAgLTAsMCArMSwzNTM5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLWNsYXNzZXMnPgorPHRpdGxlPkNsYXNzZXM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBDbGFzcyBmaWxlcyBhcmUgdXNlZCB0byBhYnN0cmFjdCBjb21tb24gZnVuY3Rpb25hbGl0eSBhbmQgc2hhcmUgaXQgYW1vbmdzdAorICAgIG11bHRpcGxlIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICBUbyB1c2UgYSBjbGFzcyBmaWxlLCB5b3Ugc2ltcGx5IG1ha2Ugc3VyZSB0aGUgcmVjaXBlIGluaGVyaXRzIHRoZSBjbGFzcy4KKyAgICBJbiBtb3N0IGNhc2VzLCB3aGVuIGEgcmVjaXBlIGluaGVyaXRzIGEgY2xhc3MgaXQgaXMgZW5vdWdoIHRvIGVuYWJsZSBpdHMKKyAgICBmZWF0dXJlcy4KKyAgICBUaGVyZSBhcmUgY2FzZXMsIGhvd2V2ZXIsIHdoZXJlIGluIHRoZSByZWNpcGUgeW91IG1pZ2h0IG5lZWQgdG8gc2V0CisgICAgdmFyaWFibGVzIG9yIG92ZXJyaWRlIHNvbWUgZGVmYXVsdCBiZWhhdmlvci4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgQW55IDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IHVzdWFsbHkKKyAgICBmb3VuZCBpbiBhIHJlY2lwZSBjYW4gYWxzbyBiZSBwbGFjZWQgaW4gYSBjbGFzcyBmaWxlLgorICAgIENsYXNzIGZpbGVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBleHRlbnNpb24gPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICBhbmQgYXJlIHVzdWFsbHkgcGxhY2VkIGluIGEgPGZpbGVuYW1lPmNsYXNzZXMvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGJlbmVhdGgKKyAgICB0aGUgPGZpbGVuYW1lPm1ldGEqLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBmb3VuZCBpbiB0aGUKKyAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgQ2xhc3MgZmlsZXMgY2FuIGFsc28gYmUgcG9pbnRlZCB0byBieQorICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRERJUic+PGZpbGVuYW1lPkJVSUxERElSPC9maWxlbmFtZT48L2xpbms+CisgICAgKGUuZy4gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+KSBpbiB0aGUgc2FtZSB3YXkgYXMKKyAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgQ2xhc3MgZmlsZXMgYXJlIHNlYXJjaGVkIGZvciBpbgorICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICB1c2luZyB0aGUgc2FtZSBtZXRob2QgYnkgd2hpY2ggPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZXMgYXJlCisgICAgc2VhcmNoZWQuCis8L3BhcmE+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBkaXNjdXNzZXMgb25seSB0aGUgbW9zdCB1c2VmdWwgYW5kIGltcG9ydGFudCBjbGFzc2VzLgorICAgIE90aGVyIGNsYXNzZXMgZG8gZXhpc3Qgd2l0aGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4KKyAgICBkaXJlY3RvcnkgaW4gdGhlCisgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgIFlvdSBjYW4gcmVmZXJlbmNlIHRoZSA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlcyBkaXJlY3RseQorICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYWxsYXJjaCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5hbGxhcmNoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkCisgICAgICAgIGJ5IHJlY2lwZXMgdGhhdCBkbyBub3QgcHJvZHVjZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb3V0cHV0LgorICAgICAgICBUaGUgY2xhc3MgZGlzYWJsZXMgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIG5vcm1hbGx5IG5lZWRlZCBmb3IgcmVjaXBlcworICAgICAgICB0aGF0IHByb2R1Y2UgZXhlY3V0YWJsZSBiaW5hcmllcyAoc3VjaCBhcyBidWlsZGluZyB0aGUgY3Jvc3MtY29tcGlsZXIKKyAgICAgICAgYW5kIGEgQyBsaWJyYXJ5IGFzIHByZS1yZXF1aXNpdGVzLCBhbmQgc3BsaXR0aW5nIG91dCBvZiBkZWJ1ZyBzeW1ib2xzCisgICAgICAgIGR1cmluZyBwYWNrYWdpbmcpLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFVubGlrZSBlLmcuIERlYmlhbiwgT3BlbkVtYmVkZGVkIHJlY2lwZXMgdGhhdCBwcm9kdWNlIHBhY2thZ2VzCisgICAgICAgICAgICB3aGljaAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9uCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBwYWNrYWdlcyBzaG91bGQgbmV2ZXIgYmUgbWFkZSA8ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+LCBldmVuCisgICAgICAgICAgICBpZiB0aGV5IGRvIG5vdCBwcm9kdWNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvdXRwdXQuIFRoaXMgd291bGQKKyAgICAgICAgICAgIGNhdXNlIHRoZSBkb19wYWNrYWdlX3dyaXRlXyogdGFza3MgdG8gaGF2ZSBkaWZmZXJlbnQgc2lnbmF0dXJlcworICAgICAgICAgICAgZm9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz5zCisgICAgICAgICAgICB3aXRoIGRpZmZlcmVudAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIHRodXMgdW5uZWNlc3NhcnkgcmVidWlsZHMgZXZlcnkgc2luZ2xlIHRpbWUgYW4gaW1hZ2UgZm9yIGEgZGlmZmVyZW50CisgICAgICAgICAgICBNQUNISU5FIGlzIGJ1aWx0IChldmVuIHdpdGhvdXQgYW55IGNoYW5nZSB0byB0aGUgcmVjaXBlKS4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCBhbGwgcmVjaXBlcyBpbmhlcml0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Nlcywgd2hpY2ggZW5hYmxlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgbmVlZGVkIGZvciByZWNpcGVzIHRoYXQgcHJvZHVjZSBleGVjdXRhYmxlIG91dHB1dC4KKyAgICAgICAgSWYgeW91ciByZWNpcGUsIGZvciBleGFtcGxlLCBvbmx5IHByb2R1Y2VzIHBhY2thZ2VzIHRoYXQgY29udGFpbgorICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLCBtZWRpYSBmaWxlcywgb3Igc2NyaXB0cyAoZS5nLiBQeXRob24gYW5kIFBlcmwpLAorICAgICAgICB0aGVuIGl0IHNob3VsZCBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmFyY2hpdmVyLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlbGVhc2luZworICAgICAgICBzb3VyY2UgY29kZSBhbmQgb3RoZXIgbWF0ZXJpYWxzIHdpdGggdGhlIGJpbmFyaWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBzb3VyY2UgYXJjaGl2ZXIsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVJDSElWRVJfTU9ERSc+PGZpbGVuYW1lPkFSQ0hJVkVSX01PREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpCisgICAgICAgIHRoYXQgaGVscCBjb250cm9sIGFyY2hpdmUgY3JlYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgQXV0b3Rvb2xlZAorICAgICAgICBwYWNrYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXV0b21ha2U8L2ZpbGVuYW1lPiwKKyAgICAgICAgYW5kIDxmaWxlbmFtZT5saWJ0b29sPC9maWxlbmFtZT4gYnJpbmcgc3RhbmRhcmRpemF0aW9uLgorICAgICAgICBUaGlzIGNsYXNzIGRlZmluZXMgYSBzZXQgb2YgdGFza3MgKGNvbmZpZ3VyZSwgY29tcGlsZSBldGMuKSB0aGF0CisgICAgICAgIHdvcmsgZm9yIGFsbCBBdXRvdG9vbGVkIHBhY2thZ2VzLgorICAgICAgICBJdCBzaG91bGQgdXN1YWxseSBiZSBlbm91Z2ggdG8gZGVmaW5lIGEgZmV3IHN0YW5kYXJkIHZhcmlhYmxlcworICAgICAgICBhbmQgdGhlbiBzaW1wbHkgPGZpbGVuYW1lPmluaGVyaXQgYXV0b3Rvb2xzPC9maWxlbmFtZT4uCisgICAgICAgIFRoaXMgY2xhc3MgY2FuIGFsc28gd29yayB3aXRoIHNvZnR3YXJlIHRoYXQgZW11bGF0ZXMgQXV0b3Rvb2xzLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS1hdXRvdG9vbGVkLXBhY2thZ2UnPkF1dG90b29sZWQgUGFja2FnZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICB1c2VzIG91dC1vZi10cmVlIGJ1aWxkcworICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+IDxmaWxlbmFtZT4hPTwvZmlsZW5hbWU+CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIElmIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBieSBhIHJlY2lwZSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICAgIHVzaW5nIG91dC1vZi10cmVlIGJ1aWxkcywgeW91IHNob3VsZCBoYXZlIHRoZSByZWNpcGUgaW5oZXJpdCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzLWJyb2tlbnNlcCc+PGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEl0J3MgdXNlZnVsIHRvIGhhdmUgc29tZSBpZGVhIG9mIGhvdyB0aGUgdGFza3MgZGVmaW5lZCBieSB0aGlzIGNsYXNzIHdvcmsKKyAgICAgICAgYW5kIHdoYXQgdGhleSBkbyBiZWhpbmQgdGhlIHNjZW5lcy4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICBSZWdlbmVyYXRlcyB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0ICh1c2luZyA8ZmlsZW5hbWU+YXV0b3JlY29uZjwvZmlsZW5hbWU+KSBhbmQgdGhlbiBsYXVuY2hlcyBpdAorICAgICAgICAgICAgICAgIHdpdGggYSBzdGFuZGFyZCBzZXQgb2YgYXJndW1lbnRzIHVzZWQgZHVyaW5nIGNyb3NzLWNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcGFzcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+IHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPkVYVFJBX09FQ09ORjwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4gLSBSdW5zIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgIGFyZ3VtZW50cyB0aGF0IHNwZWNpZnkgdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIuCisgICAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRU1BS0UnPkVYVFJBX09FTUFLRTwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4gLSBSdW5zIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZCBwYXNzZXMgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXAuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmF1dG90b29scy1icm9rZW5zZXA8L2ZpbGVuYW1lPiBjbGFzcyBiZWhhdmVzIHRoZSBzYW1lCisgICAgICAgIGFzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYnV0IGJ1aWxkcyB3aXRoCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiA9PQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuIG91dC1vZi10cmVlIGJ1aWxkIHN1cHBvcnQgaXMgZWl0aGVyIG5vdAorICAgICAgICBwcmVzZW50IG9yIGlzIGJyb2tlbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IG91dC1vZi10cmVlIHN1cHBvcnQgYmUgZml4ZWQgYW5kIHVzZWQKKyAgICAgICAgICAgIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJhc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+IGNsYXNzIGlzIHNwZWNpYWwgaW4gdGhhdCBldmVyeQorICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBpbXBsaWNpdGx5IGluaGVyaXRzIHRoZSBjbGFzcy4KKyAgICAgICAgVGhpcyBjbGFzcyBjb250YWlucyBkZWZpbml0aW9ucyBmb3Igc3RhbmRhcmQgYmFzaWMKKyAgICAgICAgdGFza3Mgc3VjaCBhcyBmZXRjaGluZywgdW5wYWNraW5nLCBjb25maWd1cmluZyAoZW1wdHkgYnkgZGVmYXVsdCksCisgICAgICAgIGNvbXBpbGluZyAocnVucyBhbnkgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gcHJlc2VudCksIGluc3RhbGxpbmcKKyAgICAgICAgKGVtcHR5IGJ5IGRlZmF1bHQpIGFuZCBwYWNrYWdpbmcgKGVtcHR5IGJ5IGRlZmF1bHQpLgorICAgICAgICBUaGVzZSBjbGFzc2VzIGFyZSBvZnRlbiBvdmVycmlkZGVuIG9yIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMKKyAgICAgICAgc3VjaCBhcyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIG9yIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gY29udGFpbnMgc29tZSBjb21tb25seSB1c2VkIGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmluLXBhY2thZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YmluX3BhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT4gY2xhc3MgaXMgYQorICAgICAgICBoZWxwZXIgY2xhc3MgZm9yIHJlY2lwZXMgdGhhdCBleHRyYWN0IHRoZSBjb250ZW50cyBvZiBhIGJpbmFyeSBwYWNrYWdlCisgICAgICAgIChlLmcuIGFuIFJQTSkgYW5kIGluc3RhbGwgdGhvc2UgY29udGVudHMgcmF0aGVyIHRoYW4gYnVpbGRpbmcgdGhlCisgICAgICAgIGJpbmFyeSBmcm9tIHNvdXJjZS4KKyAgICAgICAgVGhlIGJpbmFyeSBwYWNrYWdlIGlzIGV4dHJhY3RlZCBhbmQgbmV3IHBhY2thZ2VzIGluIHRoZSBjb25maWd1cmVkCisgICAgICAgIG91dHB1dCBwYWNrYWdlIGZvcm1hdCBhcmUgY3JlYXRlZC4KKyAgICAgICAgRXh0cmFjdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHByb3ByaWV0YXJ5IGJpbmFyaWVzIGlzIGEgZ29vZCBleGFtcGxlCisgICAgICAgIHVzZSBmb3IgdGhpcyBjbGFzcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBGb3IgUlBNcyBhbmQgb3RoZXIgcGFja2FnZXMgdGhhdCBkbyBub3QgY29udGFpbiBhIHN1YmRpcmVjdG9yeSwKKyAgICAgICAgICAgIHlvdSBzaG91bGQgc3BlY2lmeSBhICJzdWJkaXIiIHBhcmFtZXRlci4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSA8ZmlsZW5hbWU+JHtCUH08L2ZpbGVuYW1lPiBpcyB1c2VkIHNvIHRoYXQKKyAgICAgICAgICAgIHRoZSBmaWxlcyBhcmUgZXh0cmFjdGVkIGludG8gdGhlIHN1YmRpcmVjdG9yeSBleHBlY3RlZCBieSB0aGUKKyAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJodHRwOi8vZXhhbXBsZS5jb20vZG93bmxvYWRzL3NvbWVwYWNrYWdlLnJwbTtzdWJkaXI9JHtCUH0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW5jb25maWc8L2ZpbGVuYW1lPiBjbGFzcyBoZWxwcyB0byBjb3JyZWN0IHBhdGhzIGluCisgICAgICAgIHNoZWxsIHNjcmlwdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlZm9yZSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGhhZCBiZWNvbWUgd2lkZXNwcmVhZCwgbGlicmFyaWVzCisgICAgICAgIHNoaXBwZWQgc2hlbGwgc2NyaXB0cyB0byBnaXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaWJyYXJpZXMgYW5kCisgICAgICAgIGluY2x1ZGUgcGF0aHMgbmVlZGVkIHRvIGJ1aWxkIHNvZnR3YXJlICh1c3VhbGx5IG5hbWVkCisgICAgICAgIDxmaWxlbmFtZT5MSUJOQU1FLWNvbmZpZzwvZmlsZW5hbWU+KS4KKyAgICAgICAgVGhpcyBjbGFzcyBhc3Npc3RzIGFueSByZWNpcGUgdXNpbmcgc3VjaCBzY3JpcHRzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgc3RhZ2luZywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW5zdGFsbHMgc3VjaCBzY3JpcHRzCisgICAgICAgIGludG8gdGhlIDxmaWxlbmFtZT5zeXNyb290cy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIEluaGVyaXRpbmcgdGhpcyBjbGFzcyByZXN1bHRzIGluIGFsbCBwYXRocyBpbiB0aGVzZSBzY3JpcHRzIGJlaW5nCisgICAgICAgIGNoYW5nZWQgdG8gcG9pbnQgaW50byB0aGUgPGZpbGVuYW1lPnN5c3Jvb3RzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBzbworICAgICAgICB0aGF0IGFsbCBidWlsZHMgdGhhdCB1c2UgdGhlIHNjcmlwdCB1c2UgdGhlIGNvcnJlY3QgZGlyZWN0b3JpZXMKKyAgICAgICAgZm9yIHRoZSBjcm9zcyBjb21waWxpbmcgbGF5b3V0LgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CSU5DT05GSUdfR0xPQic+PGZpbGVuYW1lPkJJTkNPTkZJR19HTE9CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZy1kaXNhYmxlZCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iaW5jb25maWctZGlzYWJsZWQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBbiBhbHRlcm5hdGl2ZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPjxmaWxlbmFtZT5iaW5jb25maWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MsIHdoaWNoIGRpc2FibGVzIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMgYnkgbWFraW5nIHRoZW0KKyAgICAgICAgcmV0dXJuIGFuIGVycm9yIGluIGZhdm9yIG9mIHVzaW5nIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgdG8gcXVlcnkgdGhlIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgc2NyaXB0cyB0byBiZSBkaXNhYmxlZCBzaG91bGQgYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQklOQ09ORklHJz48ZmlsZW5hbWU+QklOQ09ORklHPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHdpdGhpbiB0aGUgcmVjaXBlIGluaGVyaXRpbmcgdGhlIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJsYWNrbGlzdCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ibGFja2xpc3QuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJsYWNrbGlzdDwvZmlsZW5hbWU+IGNsYXNzIHByZXZlbnRzCisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZyb20gYnVpbGRpbmcgc3BlY2lmaWMgcmVjaXBlcworICAgICAgICAoYmxhY2tsaXN0cyB0aGVtKS4KKyAgICAgICAgVG8gdXNlIHRoaXMgY2xhc3MsIGluaGVyaXQgdGhlIGNsYXNzIGdsb2JhbGx5IGFuZCBzZXQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOQkxBQ0tMSVNUJz48ZmlsZW5hbWU+UE5CTEFDS0xJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZm9yIGVhY2ggcmVjaXBlIHlvdSB3aXNoIHRvIGJsYWNrbGlzdC4KKyAgICAgICAgU3BlY2lmeSB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFsdWUgYXMgYSB2YXJpYWJsZSBmbGFnICh2YXJmbGFnKSBhbmQgcHJvdmlkZSBhIHJlYXNvbiwgd2hpY2ggaXMKKyAgICAgICAgcmVwb3J0ZWQsIGlmIHRoZSBwYWNrYWdlIGlzIHJlcXVlc3RlZCB0byBiZSBidWlsdCBhcyB0aGUgdmFsdWUuCisgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBibGFja2xpc3QgYSByZWNpcGUgY2FsbGVkICJleG90aWN3YXJlIiwKKyAgICAgICAgeW91IGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBvciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJibGFja2xpc3QiCisgICAgIFBOQkxBQ0tMSVNUW2V4b3RpY3dhcmVdID0gIk5vdCBzdXBwb3J0ZWQgYnkgb3VyIG9yZ2FuaXphdGlvbi4iCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ibHVldG9vdGgnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Ymx1ZXRvb3RoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ibHVldG9vdGg8L2ZpbGVuYW1lPiBjbGFzcyBkZWZpbmVzIGEgdmFyaWFibGUgdGhhdAorICAgICAgICBleHBhbmRzIHRvIHRoZSByZWNpcGUgKHBhY2thZ2UpIHByb3ZpZGluZyBjb3JlCisgICAgICAgIGJsdWV0b290aCBzdXBwb3J0IG9uIHRoZSBwbGF0Zm9ybS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHRoZSBjbGFzcyB3b3Jrcywgc2VlIHRoZQorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2JsdWV0b290aC5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYm9vdC1kaXJlY3RkaXNrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJvb3QtZGlyZWN0ZGlzay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Ym9vdC1kaXJlY3RkaXNrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgY3JlYXRlcyBhbiBpbWFnZSB0aGF0IGNhbiBiZSBwbGFjZWQgZGlyZWN0bHkgb250byBhIGhhcmQgZGlzayB1c2luZworICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPiBhbmQgdGhlbiBib290ZWQuCisgICAgICAgIFRoZSBpbWFnZSB1c2VzIFNZU0xJTlVYLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZW5kIHJlc3VsdCBpcyBhIDUxMiBib290IHNlY3RvciBwb3B1bGF0ZWQgd2l0aCBhCisgICAgICAgIE1hc3RlciBCb290IFJlY29yZCAoTUJSKSBhbmQgcGFydGl0aW9uIHRhYmxlIGZvbGxvd2VkIGJ5IGFuIE1TRE9TCisgICAgICAgIEZBVDE2IHBhcnRpdGlvbiBjb250YWluaW5nIFNZU0xJTlVYIGFuZCBhIExpbnV4IGtlcm5lbCBjb21wbGV0ZWQgYnkKKyAgICAgICAgdGhlIDxmaWxlbmFtZT5leHQyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgcm9vdCBmaWxlc3lzdGVtcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ib290aW1nJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJvb3RpbWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPiBjbGFzcyBjcmVhdGVzIGEgYm9vdGFibGUKKyAgICAgICAgaW1hZ2UgdXNpbmcgU1lTTElOVVgsIHlvdXIga2VybmVsLCBhbmQgYW4gb3B0aW9uYWwgaW5pdGlhbCBSQU0gZGlzaworICAgICAgICAoPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgY2xhc3MsIHR3byB0aGluZ3MgaGFwcGVuOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPi5oZGRpbWc8L2ZpbGVuYW1lPiBmaWxlIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGFuIE1TRE9TIGZpbGVzeXN0ZW0gdGhhdCBjb250YWlucyBTWVNMSU5VWCwKKyAgICAgICAgICAgICAgICBhIGtlcm5lbCwgYW4gPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+LCBhbmQgYSByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICBBbGwgdGhyZWUgb2YgdGhlc2UgY2FuIGJlIHdyaXR0ZW4gdG8gaGFyZCBkcml2ZXMgZGlyZWN0bHkgYW5kCisgICAgICAgICAgICAgICAgYWxzbyBib290ZWQgb24gYSBVU0IgZmxhc2ggZGlza3MgdXNpbmcgPGZpbGVuYW1lPmRkPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQSBDRCA8ZmlsZW5hbWU+LmlzbzwvZmlsZW5hbWU+IGltYWdlIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgV2hlbiB0aGlzIGZpbGUgaXMgYm9vdGVkLCB0aGUgPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYm9vdHMgYW5kIHByb2Nlc3NlcyB0aGUgbGFiZWwgc2VsZWN0ZWQgaW4gU1lTTElOVVguCisgICAgICAgICAgICAgICAgQWN0aW9ucyBiYXNlZCBvbiB0aGUgbGFiZWwgYXJlIHRoZW4gcGVyZm9ybWVkIChlLmcuIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICB0byBhIGhhcmQgZHJpdmUpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkQnPjxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OT0lTTyc+PGZpbGVuYW1lPk5PSVNPPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9IREQnPjxmaWxlbmFtZT5OT0hERDwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlMnPjxmaWxlbmFtZT5ST09URlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJ1Z3ppbGxhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1Z3ppbGxhLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5idWd6aWxsYTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHNldHRpbmcgdXAgYW4KKyAgICAgICAgaW5zdGFuY2Ugb2YgQnVnemlsbGEgaW4gd2hpY2ggeW91IGNhbiBhdXRvbWF0aWNhbGx5IGZpbGVzIGJ1ZyByZXBvcnRzCisgICAgICAgIGluIHJlc3BvbnNlIHRvIGJ1aWxkIGZhaWx1cmVzLgorICAgICAgICBGb3IgdGhpcyBjbGFzcyB0byB3b3JrLCB5b3UgbmVlZCB0byBlbmFibGUgdGhlIFhNTC1SUEMgaW50ZXJmYWNlIGluCisgICAgICAgIHRoZSBpbnN0YW5jZSBvZiBCdWd6aWxsYS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcyByZWNvcmRzIGEKKyAgICAgICAgaGlzdG9yeSBvZiBidWlsZCBvdXRwdXQgbWV0YWRhdGEsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBwb3NzaWJsZQorICAgICAgICByZWdyZXNzaW9ucyBhcyB3ZWxsIGFzIHVzZWQgZm9yIGFuYWx5c2lzIG9mIHRoZSBidWlsZCBvdXRwdXQuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIEJ1aWxkIEhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYnVpbGRzdGF0cyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZHN0YXRzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZHN0YXRzPC9maWxlbmFtZT4gY2xhc3MgcmVjb3JkcworICAgICAgICBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzIGFib3V0IGVhY2ggdGFzayBleGVjdXRlZCBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgIChlLmcuIGVsYXBzZWQgdGltZSwgQ1BVIHVzYWdlLCBhbmQgSS9PIHVzYWdlKS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgY2xhc3MsIHRoZSBvdXRwdXQgZ29lcyBpbnRvIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTVEFUU19CQVNFJz48ZmlsZW5hbWU+QlVJTERTVEFUU19CQVNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggZGVmYXVsdHMgdG8gPGZpbGVuYW1lPiR7VE1QRElSfS9idWlsZHN0YXRzLzwvZmlsZW5hbWU+LgorICAgICAgICBZb3UgY2FuIGFuYWx5emUgdGhlIGVsYXBzZWQgdGltZSB1c2luZworICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS5weTwvZmlsZW5hbWU+LCB3aGljaAorICAgICAgICBwcm9kdWNlcyBhIGNhc2NhZGluZyBjaGFydCBvZiB0aGUgZW50aXJlIGJ1aWxkIHByb2Nlc3MgYW5kIGNhbiBiZQorICAgICAgICB1c2VmdWwgZm9yIGhpZ2hsaWdodGluZyBib3R0bGVuZWNrcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQ29sbGVjdGluZyBidWlsZCBzdGF0aXN0aWNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUl9DTEFTU0VTJz48ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGZyb20geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGRvIG5vdCBoYXZlIHRvIGRvIGFueXRoaW5nIHRvIGVuYWJsZSB0aGUgY2xhc3MuCisgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdGhlIGNsYXNzLCBzaW1wbHkgcmVtb3ZlICJidWlsZHN0YXRzIgorICAgICAgICBmcm9tIHRoZSA8ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT4gbGlzdC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzLXN1bW1hcnknPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBpbmhlcml0ZWQgZ2xvYmFsbHksIHByaW50cyBzdGF0aXN0aWNzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1aWxkCisgICAgICAgIG9uIHNzdGF0ZSByZS11c2UuCisgICAgICAgIEluIG9yZGVyIHRvIGZ1bmN0aW9uLCB0aGlzIGNsYXNzIHJlcXVpcmVzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzJz48ZmlsZW5hbWU+YnVpbGRzdGF0czwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBiZSBlbmFibGVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNjYWNoZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jY2FjaGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNjYWNoZTwvZmlsZW5hbWU+IGNsYXNzIGVuYWJsZXMgdGhlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jY2FjaGUuc2FtYmEub3JnLyc+Qy9DKysgQ29tcGlsZXIgQ2FjaGU8L3VsaW5rPgorICAgICAgICBmb3IgdGhlIGJ1aWxkLgorICAgICAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZ2l2ZSBhIG1pbm9yIHBlcmZvcm1hbmNlIGJvb3N0IGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgIEhvd2V2ZXIsIHVzaW5nIHRoZSBjbGFzcyBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHNpZGUtZWZmZWN0cy4KKyAgICAgICAgVGh1cywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG8gbm90IHVzZSB0aGlzIGNsYXNzLgorICAgICAgICBTZWUgPHVsaW5rIHVybD0naHR0cDovL2NjYWNoZS5zYW1iYS5vcmcvJz48L3VsaW5rPiBmb3IgaW5mb3JtYXRpb24gb24KKyAgICAgICAgdGhlIEMvQysrIENvbXBpbGVyIENhY2hlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNocnBhdGgnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y2hycGF0aC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlICJjaHJwYXRoIiB1dGlsaXR5LCB3aGljaCBpcyB1c2VkIGR1cmluZyB0aGUKKyAgICAgICAgYnVpbGQgcHJvY2VzcyBmb3IgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+Y3Jvc3M8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgIDxmaWxlbmFtZT5jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+IHJlY2lwZXMgdG8gY2hhbmdlCisgICAgICAgIDxmaWxlbmFtZT5SUEFUSDwvZmlsZW5hbWU+IHJlY29yZHMgd2l0aGluIGJpbmFyaWVzIGluIG9yZGVyIHRvIG1ha2UKKyAgICAgICAgdGhlbSByZWxvY2F0YWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jbHV0dGVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNsdXR0ZXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNsdXR0ZXI8L2ZpbGVuYW1lPiBjbGFzcyBjb25zb2xpZGF0ZXMgdGhlCisgICAgICAgIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG5hbWluZyBhbmQgb3RoZXIgY29tbW9uIGl0ZW1zIHVzZWQgYnkgQ2x1dHRlcgorICAgICAgICBhbmQgcmVsYXRlZCByZWNpcGVzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFVubGlrZSBzb21lIG90aGVyIGNsYXNzZXMgcmVsYXRlZCB0byBzcGVjaWZpYyBsaWJyYXJpZXMsIHJlY2lwZXMKKyAgICAgICAgICAgIGJ1aWxkaW5nIG90aGVyIHNvZnR3YXJlIHRoYXQgdXNlcyBDbHV0dGVyIGRvIG5vdCBuZWVkIHRvCisgICAgICAgICAgICBpbmhlcml0IHRoaXMgY2xhc3MgdW5sZXNzIHRoZXkgdXNlIHRoZSBzYW1lIHJlY2lwZSB2ZXJzaW9uaW5nCisgICAgICAgICAgICBzY2hlbWUgdGhhdCB0aGUgQ2x1dHRlciBhbmQgcmVsYXRlZCByZWNpcGVzIGRvLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY21ha2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y21ha2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT4gY2xhc3MgYWxsb3dzIGZvcgorICAgICAgICByZWNpcGVzIHRoYXQgbmVlZCB0byBidWlsZCBzb2Z0d2FyZSB1c2luZyB0aGUgQ01ha2UgYnVpbGQgc3lzdGVtLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ01BS0UnPjxmaWxlbmFtZT5FWFRSQV9PRUNNQUtFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgcGFzc2VkIG9uCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY21sMSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jbWwxLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jbWwxPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgYmFzaWMgc3VwcG9ydCBmb3IgdGhlCisgICAgICAgIExpbnV4IGtlcm5lbCBzdHlsZSBidWlsZCBjb25maWd1cmF0aW9uIHN5c3RlbS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb21wcmVzc19kb2MnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29tcHJlc3NfZG9jLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBjb21wcmVzc2lvbiBmb3IgbWFuIHBhZ2VzIGFuZCBpbmZvIHBhZ2VzLgorICAgICAgICBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIGluaGVyaXRlZCBnbG9iYWxseS4KKyAgICAgICAgVGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbWVjaGFuaXNtIGlzIGd6IChnemlwKSBidXQgeW91IGNhbgorICAgICAgICBzZWxlY3QgYW4gYWx0ZXJuYXRpdmUgbWVjaGFuaXNtIGJ5IHNldHRpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ET0NfQ09NUFJFU1MnPjxmaWxlbmFtZT5ET0NfQ09NUFJFU1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY29weWxlZnRfY29tcGxpYW5jZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jb3B5bGVmdF9jb21wbGlhbmNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3B5bGVmdF9jb21wbGlhbmNlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJlc2VydmVzIHNvdXJjZSBjb2RlIGZvciB0aGUgcHVycG9zZXMgb2YgbGljZW5zZSBjb21wbGlhbmNlLgorICAgICAgICBUaGlzIGNsYXNzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSA8ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBhbmQgaXMgc3RpbGwgdXNlZCBieSBzb21lIHVzZXJzIGV2ZW4gdGhvdWdoIGl0IGhhcyBiZWVuCisgICAgICAgIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY29weWxlZnRfZmlsdGVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNvcHlsZWZ0X2ZpbHRlci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgY2xhc3MgdXNlZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY29weWxlZnRfY29tcGxpYW5jZSc+PGZpbGVuYW1lPmNvcHlsZWZ0X2NvbXBsaWFuY2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3NlcyBmb3IgZmlsdGVyaW5nIGxpY2Vuc2VzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcHlsZWZ0X2ZpbHRlcjwvZmlsZW5hbWU+IGNsYXNzIGlzIGFuIGludGVybmFsIGNsYXNzCisgICAgICAgIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb3JlLWltYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNvcmUtaW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZGVmaW5pdGlvbnMgZm9yIHRoZQorICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS0qPC9maWxlbmFtZT4gaW1hZ2UgcmVjaXBlcywgc3VjaCBhcyBzdXBwb3J0IGZvcgorICAgICAgICBhZGRpdGlvbmFsCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNwYW4nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Bhbi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y3BhbjwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIFBlcmwgbW9kdWxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVjaXBlcyBmb3IgUGVybCBtb2R1bGVzIGFyZSBzaW1wbGUuCisgICAgICAgIFRoZXNlIHJlY2lwZXMgdXN1YWxseSBvbmx5IG5lZWQgdG8gcG9pbnQgdG8gdGhlIHNvdXJjZSdzIGFyY2hpdmUgYW5kCisgICAgICAgIHRoZW4gaW5oZXJpdCB0aGUgcHJvcGVyIGNsYXNzIGZpbGUuCisgICAgICAgIEJ1aWxkaW5nIGlzIHNwbGl0IGludG8gdHdvIG1ldGhvZHMgZGVwZW5kaW5nIG9uIHdoaWNoIG1ldGhvZCB0aGUgbW9kdWxlCisgICAgICAgIGF1dGhvcnMgdXNlZC4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Nb2R1bGVzIHRoYXQgdXNlIG9sZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZS5QTDwvZmlsZW5hbWU+LWJhc2VkIGJ1aWxkIHN5c3RlbSByZXF1aXJlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNwYW4uYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TW9kdWxlcyB0aGF0IHVzZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CdWlsZC5QTDwvZmlsZW5hbWU+LWJhc2VkIGJ1aWxkIHN5c3RlbSByZXF1aXJlCisgICAgICAgICAgICAgICAgdXNpbmcgPGZpbGVuYW1lPmNwYW5fYnVpbGQuYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNyb3NzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNyb3NzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jcm9zczwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSByZWNpcGVzCisgICAgICAgIHRoYXQgYnVpbGQgdGhlIGNyb3NzLWNvbXBpbGF0aW9uIHRvb2xzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNyb3NzLWNhbmFkaWFuJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNyb3NzLWNhbmFkaWFuLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSByZWNpcGVzIHRoYXQgYnVpbGQgdGhlIENhbmFkaWFuCisgICAgICAgIENyb3NzLWNvbXBpbGF0aW9uIHRvb2xzIGZvciBTREtzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRpc2N1c3Npb24gb24gdGhlc2UgY3Jvc3MtY29tcGlsYXRpb24gdG9vbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Jvc3NzZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Jvc3NzZGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNyb3Nzc2RrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCB0aGUgY3Jvc3MtY29tcGlsYXRpb24KKyAgICAgICAgdG9vbHMgdXNlZCBmb3IgYnVpbGRpbmcgU0RLcy4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBkaXNjdXNzaW9uIG9uIHRoZXNlIGNyb3NzLWNvbXBpbGF0aW9uIHRvb2xzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kZWJpYW4uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+IGNsYXNzIHJlbmFtZXMgb3V0cHV0IHBhY2thZ2VzIHNvIHRoYXQKKyAgICAgICAgdGhleSBmb2xsb3cgdGhlIERlYmlhbiBuYW1pbmcgcG9saWN5IChpLmUuIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+CisgICAgICAgIGJlY29tZXMgPGZpbGVuYW1lPmxpYmM2PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5nbGliYy1kZXZlbDwvZmlsZW5hbWU+CisgICAgICAgIGJlY29tZXMgPGZpbGVuYW1lPmxpYmM2LWRldjwvZmlsZW5hbWU+LikKKyAgICAgICAgUmVuYW1pbmcgaW5jbHVkZXMgdGhlIGxpYnJhcnkgbmFtZSBhbmQgdmVyc2lvbiBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlCisgICAgICAgIG5hbWUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIGEgcmVjaXBlIGNyZWF0ZXMgcGFja2FnZXMgZm9yIG11bHRpcGxlIGxpYnJhcmllcworICAgICAgICAoc2hhcmVkIG9iamVjdCBmaWxlcyBvZiA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gdHlwZSksIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxFQURfU09OQU1FJz48ZmlsZW5hbWU+TEVBRF9TT05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIHJlY2lwZSB0byBzcGVjaWZ5IHRoZSBsaWJyYXJ5IG9uIHdoaWNoIHRvIGFwcGx5IHRoZQorICAgICAgICBuYW1pbmcgc2NoZW1lLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRlcGxveSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kZXBsb3kuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGNsYXNzIGhhbmRsZXMgZGVwbG95aW5nIGZpbGVzCisgICAgICAgIHRvIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICBUaGUgbWFpbiBmdW5jdGlvbiBvZiB0aGlzIGNsYXNzIGlzIHRvIGFsbG93IHRoZSBkZXBsb3kgc3RlcCB0byBiZQorICAgICAgICBhY2NlbGVyYXRlZCBieSBzaGFyZWQgc3RhdGUuCisgICAgICAgIFJlY2lwZXMgdGhhdCBpbmhlcml0IHRoaXMgY2xhc3Mgc2hvdWxkIGRlZmluZSB0aGVpciBvd24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWRlcGxveSc+PGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBmdW5jdGlvbiB0byBjb3B5IHRoZSBmaWxlcyB0byBiZSBkZXBsb3llZCB0bworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZRElSJz48ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQgdXNlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gdG8gYWRkIHRoZSB0YXNrIGF0IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBwbGFjZSwgd2hpY2ggaXMgdXN1YWxseSBhZnRlcgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgb3IKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBUaGUgY2xhc3MgdGhlbiB0YWtlcyBjYXJlIG9mIHN0YWdpbmcgdGhlIGZpbGVzIGZyb20KKyAgICAgICAgPGZpbGVuYW1lPkRFUExPWURJUjwvZmlsZW5hbWU+IHRvCisgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGV2c2hlbGwnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGV2c2hlbGwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gY2xhc3MgYWRkcyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmRvX2RldnNoZWxsPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgRGlzdHJpYnV0aW9uIHBvbGljeSBkaWN0YXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjbGFzcy4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgdXNpbmcgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGlzdHJvX2ZlYXR1cmVzX2NoZWNrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3Ryb19mZWF0dXJlc19jaGVjay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGlzdHJvX2ZlYXR1cmVzX2NoZWNrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgYWxsb3dzIGluZGl2aWR1YWwgcmVjaXBlcyB0byBjaGVjayBmb3IgcmVxdWlyZWQgYW5kIGNvbmZsaWN0aW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT05GTElDVF9ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5DT05GTElDVF9ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgICAgICBJZiBhbnkgY29uZGl0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIHJlY2lwZSB1c2luZyB0aGUgYWJvdmUgdmFyaWFibGVzIGFyZQorICAgICAgICBub3QgbWV0LCB0aGUgcmVjaXBlIHdpbGwgYmUgc2tpcHBlZC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kaXN0cm9kYXRhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3Ryb2RhdGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRpc3Ryb2RhdGE8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBmb3IgYXV0b21hdGljIGNoZWNraW5nIGZvciB1cHN0cmVhbSByZWNpcGUgdXBkYXRlcy4KKyAgICAgICAgVGhlIGNsYXNzIGNyZWF0ZXMgYSBjb21tYS1zZXBhcmF0ZWQgdmFsdWUgKENTVikgc3ByZWFkc2hlZXQgdGhhdAorICAgICAgICBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjaXBlcy4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIHByb3ZpZGVzIHRoZSA8ZmlsZW5hbWU+ZG9fZGlzdHJvZGF0YTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+ZG9fZGlzdHJvX2NoZWNrPC9maWxlbmFtZT4gdGFza3MsIHdoaWNoIGRvIHVwc3RyZWFtIGNoZWNraW5nCisgICAgICAgIGFuZCBhbHNvIHZlcmlmeSBpZiBhIHBhY2thZ2UgaXMgdXNlZCBpbiBtdWx0aXBsZSBtYWpvciBkaXN0cmlidXRpb25zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgaXMgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIFRvIHVzZSBpdCwgeW91IG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZpbGVzIGFuZCBzZXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUJz48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYworICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcmVjaXBlX2NvbG9yLmluYworICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jCisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKKyAgICAgaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCisgICAgIElOSEVSSVQrPSAiZGlzdHJvZGF0YSIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlscyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kaXN0dXRpbHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgZm9yIFB5dGhvbgorICAgICAgICB2ZXJzaW9uIDIueCBleHRlbnNpb25zLCB3aGljaCBhcmUgc2ltcGxlLgorICAgICAgICBUaGVzZSByZWNpcGVzIHVzdWFsbHkgb25seSBuZWVkIHRvIHBvaW50IHRvIHRoZSBzb3VyY2UncyBhcmNoaXZlIGFuZAorICAgICAgICB0aGVuIGluaGVyaXQgdGhlIHByb3BlciBjbGFzcy4KKyAgICAgICAgQnVpbGRpbmcgaXMgc3BsaXQgaW50byB0d28gbWV0aG9kcyBkZXBlbmRpbmcgb24gd2hpY2ggbWV0aG9kIHRoZQorICAgICAgICBtb2R1bGUgYXV0aG9ycyB1c2VkLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dGVuc2lvbnMgdGhhdCB1c2UgYW4gQXV0b3Rvb2xzLWJhc2VkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIHJlcXVpcmUgQXV0b3Rvb2xzIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXN0dXRpbHM8L2ZpbGVuYW1lPi1iYXNlZCBjbGFzc2VzIGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+IHJlcXVpcmUKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+IGNsYXNzIGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPiByZXF1aXJlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzMyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kaXN0dXRpbHMzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5kaXN0dXRpbHMzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyBmb3IgUHl0aG9uCisgICAgICAgIHZlcnNpb24gMy54IGV4dGVuc2lvbnMsIHdoaWNoIGFyZSBzaW1wbGUuCisgICAgICAgIFRoZXNlIHJlY2lwZXMgdXN1YWxseSBvbmx5IG5lZWQgdG8gcG9pbnQgdG8gdGhlIHNvdXJjZSdzIGFyY2hpdmUgYW5kCisgICAgICAgIHRoZW4gaW5oZXJpdCB0aGUgcHJvcGVyIGNsYXNzLgorICAgICAgICBCdWlsZGluZyBpcyBzcGxpdCBpbnRvIHR3byBtZXRob2RzIGRlcGVuZGluZyBvbiB3aGljaCBtZXRob2QgdGhlCisgICAgICAgIG1vZHVsZSBhdXRob3JzIHVzZWQuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBhbiBBdXRvdG9vbHMtYmFzZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcmVxdWlyZSBBdXRvdG9vbHMgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+LWJhc2VkIGNsYXNzZXMgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+LWJhc2VkIGJ1aWxkIHN5c3RlbXMgcmVxdWlyZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPiByZXF1aXJlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIGluIHRoZWlyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGJ1aWxkaW5nIHNvZnR3YXJlCisgICAgICAgIGZyb20gc291cmNlIGNvZGUgdGhhdCBpcyBleHRlcm5hbCB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgQnVpbGRpbmcgc29mdHdhcmUgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UgdHJlZSBtZWFucyB0aGF0IHRoZSBidWlsZAorICAgICAgICBzeXN0ZW0ncyBub3JtYWwgZmV0Y2gsIHVucGFjaywgYW5kIHBhdGNoIHByb2Nlc3MgaXMgbm90IHVzZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlcyB0bworICAgICAgICBsb2NhdGUgdW5wYWNrZWQgcmVjaXBlIHNvdXJjZSBjb2RlIGFuZCB0byBidWlsZCBpdCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICBXaGVuIHlvdXIgcmVjaXBlIGluaGVyaXRzIHRoZSA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPiBjbGFzcywKKyAgICAgICAgeW91IHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVEVSTkFMU1JDJz48ZmlsZW5hbWU+RVhURVJOQUxTUkM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRFUk5BTFNSQ19CVUlMRCc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDX0JVSUxEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcyB0byB1bHRpbWF0ZWx5IGRlZmluZSA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGNsYXNzIGV4cGVjdHMgdGhlIHNvdXJjZSBjb2RlIHRvIHN1cHBvcnQgcmVjaXBlIGJ1aWxkcworICAgICAgICB0aGF0IHVzZSB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICBzeXN0ZW0gcGxhY2VzIHRoZSBnZW5lcmF0ZWQgb2JqZWN0cyBidWlsdCBmcm9tIHRoZSByZWNpcGVzLgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgc2V0IHRvIHRoZQorICAgICAgICBmb2xsb3dpbmcsIHdoaWNoIGlzIHNlcGFyYXRlIGZyb20gdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgICAgICAgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vJHtCUE59L3tQVn0vCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgU2VlIHRoZXNlIHZhcmlhYmxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZSBjb21tZW50cyBpbgorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgPGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlJz5CdWlsZGluZyBTb2Z0d2FyZSBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmV4dHJhdXNlcnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPiBjbGFzcyBhbGxvd3MKKyAgICAgICAgYWRkaXRpb25hbCB1c2VyIGFuZCBncm91cCBjb25maWd1cmF0aW9uIHRvIGJlIGFwcGxpZWQgYXQgdGhlIGltYWdlCisgICAgICAgIGxldmVsLgorICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgZWl0aGVyIGdsb2JhbGx5IG9yIGZyb20gYW4gaW1hZ2UgcmVjaXBlIGFsbG93cworICAgICAgICBhZGRpdGlvbmFsIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfVVNFUlNfUEFSQU1TJz48ZmlsZW5hbWU+RVhUUkFfVVNFUlNfUEFSQU1TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoZSB1c2VyIGFuZCBncm91cCBvcGVyYXRpb25zIGFkZGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPiBjbGFzcyBhcmUgbm90IHRpZWQgdG8gYSBzcGVjaWZpYworICAgICAgICAgICAgcmVjaXBlIG91dHNpZGUgb2YgdGhlIHJlY2lwZSBmb3IgdGhlIGltYWdlLgorICAgICAgICAgICAgVGh1cywgdGhlIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBhY3Jvc3MgdGhlIGltYWdlIGFzIGEgd2hvbGUuCisgICAgICAgICAgICBVc2UgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgdG8gYWRkIHVzZXIgYW5kIGdyb3VwIGNvbmZpZ3VyYXRpb24gdG8gYSBzcGVjaWZpYyByZWNpcGUuCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyB0aGlzIGNsYXNzIGluIGFuIGltYWdlIHJlY2lwZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGV4dHJhdXNlcnMKKyAgICAgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyAgICAgICAgIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisgICAgICAgICBncm91cGFkZCBkZXZlbG9wZXJzOyBcCisgICAgICAgICB1c2VyZGVsIG5vYm9keTsgXAorICAgICAgICAgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyAgICAgICAgIGdyb3VwbW9kIC1nIDEwMjAgZGV2ZWxvcGVyczsgXAorICAgICAgICAgdXNlcm1vZCAtcyAvYmluL3NoIHRlc3RlcjsgXAorICAgICAgICAgIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFkZHMgdHdvIHVzZXJzIG5hbWVkICJ0ZXN0ZXItamltIiBhbmQKKyAgICAgICAgInRlc3Rlci1zdWUiIGFuZCBhc3NpZ25zIHBhc3N3b3JkczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGV4dHJhdXNlcnMKKyAgICAgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyAgICAgICAgIHVzZXJhZGQgLVAgdGVzdGVyMDEgdGVzdGVyLWppbTsgXAorICAgICAgICAgdXNlcmFkZCAtUCB0ZXN0ZXIwMSB0ZXN0ZXItc3VlOyBcCisgICAgICAgICAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgRmluYWxseSwgaGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2V0cyB0aGUgcm9vdCBwYXNzd29yZCB0bworICAgICAgICAiMTg3NioxOCI6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5oZXJpdCBleHRyYXVzZXJzCisgICAgIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisgICAgICAgICB1c2VybW9kIC1QIDE4NzYqMTggcm9vdDsgXAorICAgICAgICAgIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZm9udGNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmZvbnRjYWNoZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT4gY2xhc3MgZ2VuZXJhdGVzIHRoZQorICAgICAgICBwcm9wZXIgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QgYW5kIHBvc3RybSkKKyAgICAgICAgc2NyaXB0bGV0cyBmb3IgZm9udCBwYWNrYWdlcy4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT5mYy1jYWNoZTwvZmlsZW5hbWU+IChwYXJ0IG9mCisgICAgICAgIDxmaWxlbmFtZT5Gb250Y29uZmlnPC9maWxlbmFtZT4pIHRvIGFkZCB0aGUgZm9udHMgdG8gdGhlIGZvbnQKKyAgICAgICAgaW5mb3JtYXRpb24gY2FjaGUuCisgICAgICAgIFNpbmNlIHRoZSBjYWNoZSBmaWxlcyBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLAorICAgICAgICA8ZmlsZW5hbWU+ZmMtY2FjaGU8L2ZpbGVuYW1lPiBydW5zIHVzaW5nIFFFTVUgaWYgdGhlIHBvc3RpbnN0CisgICAgICAgIHNjcmlwdGxldHMgbmVlZCB0byBiZSBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIGltYWdlIGNyZWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUgZm9udHMgYmVpbmcgaW5zdGFsbGVkIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluCisgICAgICAgIHBhY2thZ2UsIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRk9OVF9QQUNLQUdFUyc+PGZpbGVuYW1lPkZPTlRfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgZm9udHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ2NvbmYnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z2NvbmYuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdjb25mPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgY29tbW9uCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGluc3RhbGwgR0NvbmYgc2NoZW1hcy4KKyAgICAgICAgVGhlIHNjaGVtYXMgd2lsbCBiZSBwdXQgaW50byBhIHNlcGFyYXRlIHBhY2thZ2UKKyAgICAgICAgKDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS1nY29uZjwvZmlsZW5hbWU+KQorICAgICAgICB0aGF0IGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIHRoaXMgY2xhc3MgaXMgaW5oZXJpdGVkLgorICAgICAgICBUaGlzIHBhY2thZ2UgdXNlcyB0aGUgYXBwcm9wcmlhdGUgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZQorICAgICAgICAocG9zdGluc3QvcG9zdHJtKSBzY3JpcHRsZXRzIHRvIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIHRoZSBzY2hlbWFzCisgICAgICAgIGluIHRoZSB0YXJnZXQgaW1hZ2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ2V0dGV4dCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nZXR0ZXh0LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nZXR0ZXh0PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgYnVpbGRpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBHTlUgPGZpbGVuYW1lPmdldHRleHQ8L2ZpbGVuYW1lPgorICAgICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uIHN5c3RlbS4KKyAgICAgICAgQWxsIHJlY2lwZXMgYnVpbGRpbmcgc29mdHdhcmUgdGhhdCB1c2UKKyAgICAgICAgPGZpbGVuYW1lPmdldHRleHQ8L2ZpbGVuYW1lPiBzaG91bGQgaW5oZXJpdCB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdub21lJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdub21lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nbm9tZTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdAorICAgICAgICBidWlsZCBzb2Z0d2FyZSBmcm9tIHRoZSBHTk9NRSBzdGFjay4KKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ25vbWViYXNlJz48ZmlsZW5hbWU+Z25vbWViYXNlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndGstaWNvbi1jYWNoZSc+PGZpbGVuYW1lPmd0ay1pY29uLWNhY2hlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1nY29uZic+PGZpbGVuYW1lPmdjb25mPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1taW1lJz48ZmlsZW5hbWU+bWltZTwvZmlsZW5hbWU+PC9saW5rPiBjbGFzc2VzLgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBkaXNhYmxlcyBHT2JqZWN0IGludHJvc3BlY3Rpb24gd2hlcmUgYXBwbGljYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nbm9tZWJhc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z25vbWViYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nbm9tZWJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyB0aGUgYmFzZQorICAgICAgICBjbGFzcyBmb3IgcmVjaXBlcyB0aGF0IGJ1aWxkIHNvZnR3YXJlIGZyb20gdGhlIEdOT01FIHN0YWNrLgorICAgICAgICBUaGlzIGNsYXNzIHNldHMKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+IHRvCisgICAgICAgIGRvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgR05PTUUgbWlycm9ycyBhcyB3ZWxsIGFzIGV4dGVuZGluZworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB3aXRoIHRoZSB0eXBpY2FsIEdOT01FIGluc3RhbGxhdGlvbiBwYXRocy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ncnViLWVmaS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBwcm92aWRlcyA8ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPi1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yCisgICAgICAgIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIHZhcmlhYmxlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5JVFJEJz48ZmlsZW5hbWU+SU5JVFJEPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEluZGljYXRlcyBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UKKyAgICAgICAgICAgICAgICBhcyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmQpIChvcHRpb25hbCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGUyc+PGZpbGVuYW1lPlJPT1RGUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgIChvcHRpb25hbCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdSVUJfR0ZYU0VSSUFMJz48ZmlsZW5hbWU+R1JVQl9HRlhTRVJJQUw8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgU2V0IHRoaXMgdG8gIjEiIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQUJFTFMnPjxmaWxlbmFtZT5MQUJFTFM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVBQRU5EJz48ZmlsZW5hbWU+QVBQRU5EPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TEFCRUw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1JVQl9PUFRTJz48ZmlsZW5hbWU+R1JVQl9PUFRTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4KKyAgICAgICAgICAgICAgICBPcHRpb25zIGFyZSBkZWxpbWl0ZWQgdXNpbmcgc2VtaS1jb2xvbiBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT47PC9maWxlbmFtZT4pLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUlVCX1RJTUVPVVQnPjxmaWxlbmFtZT5HUlVCX1RJTUVPVVQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgVGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgKG9wdGlvbmFsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdzZXR0aW5ncyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nc2V0dGluZ3MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdzZXR0aW5nczwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzIHRoYXQgbmVlZCB0byBpbnN0YWxsCisgICAgICAgIEdTZXR0aW5ncyAoZ2xpYikgc2NoZW1hcy4KKyAgICAgICAgVGhlIHNjaGVtYXMgYXJlIGFzc3VtZWQgdG8gYmUgcGFydCBvZiB0aGUgbWFpbiBwYWNrYWdlLgorICAgICAgICBBcHByb3ByaWF0ZSBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pCisgICAgICAgIHNjcmlwdGxldHMgYXJlIGFkZGVkIHRvIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIHRoZSBzY2hlbWFzIGluIHRoZQorICAgICAgICB0YXJnZXQgaW1hZ2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3RrLWRvYyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ndGstZG9jLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstZG9jPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgaXMgYSBoZWxwZXIgY2xhc3MgdG8gcHVsbCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgPGZpbGVuYW1lPmd0ay1kb2M8L2ZpbGVuYW1lPiBkZXBlbmRlbmNpZXMgYW5kIGRpc2FibGUKKyAgICAgICAgPGZpbGVuYW1lPmd0ay1kb2M8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndGstaWNvbi1jYWNoZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ndGstaWNvbi1jYWNoZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3RrLWljb24tY2FjaGU8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBnZW5lcmF0ZXMgdGhlIHByb3BlciBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pCisgICAgICAgIHNjcmlwdGxldHMgZm9yIHBhY2thZ2VzIHRoYXQgdXNlIEdUSysgYW5kIGluc3RhbGwgaWNvbnMuCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+Z3RrLXVwZGF0ZS1pY29uLWNhY2hlPC9maWxlbmFtZT4gdG8gYWRkCisgICAgICAgIHRoZSBmb250cyB0byBHVEsrJ3MgaWNvbiBjYWNoZS4KKyAgICAgICAgU2luY2UgdGhlIGNhY2hlIGZpbGVzIGFyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsCisgICAgICAgIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiBpcyBydW4gdXNpbmcgUUVNVSBpZiB0aGUKKyAgICAgICAgcG9zdGluc3Qgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UKKyAgICAgICAgY3JlYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3RrLWltbW9kdWxlcy1jYWNoZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstaW1tb2R1bGVzLWNhY2hlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZ2VuZXJhdGVzIHRoZSBwcm9wZXIgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QvcG9zdHJtKQorICAgICAgICBzY3JpcHRsZXRzIGZvciBwYWNrYWdlcyB0aGF0IGluc3RhbGwgR1RLKyBpbnB1dCBtZXRob2QgbW9kdWxlcyBmb3IKKyAgICAgICAgdmlydHVhbCBrZXlib2FyZHMuCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+Z3RrLXVwZGF0ZS1pY29uLWNhY2hlPC9maWxlbmFtZT4gdG8gYWRkCisgICAgICAgIHRoZSBpbnB1dCBtZXRob2QgbW9kdWxlcyB0byB0aGUgY2FjaGUuCisgICAgICAgIFNpbmNlIHRoZSBjYWNoZSBmaWxlcyBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLAorICAgICAgICA8ZmlsZW5hbWU+Z3RrLXVwZGF0ZS1pY29uLWNhY2hlPC9maWxlbmFtZT4gaXMgcnVuIHVzaW5nIFFFTVUgaWYgdGhlCisgICAgICAgIHBvc3RpbnN0IHNjcmlwdGxldHMgbmVlZCB0byBiZSBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIGltYWdlCisgICAgICAgIGNyZWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUgaW5wdXQgbWV0aG9kIG1vZHVsZXMgYmVpbmcgaW5zdGFsbGVkIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuCisgICAgICAgIHRoZSBtYWluIHBhY2thZ2UsIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJz48ZmlsZW5hbWU+R1RLSU1NT0RVTEVTX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRvIHNwZWNpZnkgdGhlIHBhY2thZ2VzIGNvbnRhaW5pbmcgdGhlIG1vZHVsZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd1bW1pYm9vdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25zIHNwZWNpZmljCisgICAgICAgIHRvIHRoZSBndW1taWJvb3QgYm9vdGxvYWRlciBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorICAgICAgICBUaGlzIGlzIGFuIGludGVybmFsIGNsYXNzIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUKKyAgICAgICAgdXNlZCBkaXJlY3RseS4KKyAgICAgICAgU2V0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRUZJX1BST1ZJREVSJz48ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvICJndW1taWJvb3QiIHRvIHVzZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbW9yZSB2YXJpYWJsZXMgdXNlZCBhbmQgc3VwcG9ydGVkIGluIHRoaXMgY2xhc3MsCisgICAgICAgIHNlZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdVTU1JQk9PVF9DRkcnPjxmaWxlbmFtZT5HVU1NSUJPT1RfQ0ZHPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1VNTUlCT09UX0VOVFJJRVMnPjxmaWxlbmFtZT5HVU1NSUJPT1RfRU5UUklFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HVU1NSUJPT1RfVElNRU9VVCc+PGZpbGVuYW1lPkdVTU1JQk9PVF9USU1FT1VUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBhbHNvIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdC8nPkd1bW1pYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3ppcG5hdGl2ZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nemlwbmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nemlwbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MgZW5hYmxlcyB0aGUgdXNlIG9mIG5hdGl2ZSB2ZXJzaW9ucyBvZiA8ZmlsZW5hbWU+Z3ppcDwvZmlsZW5hbWU+CisgICAgICAgIGFuZCA8ZmlsZW5hbWU+cGlnejwvZmlsZW5hbWU+IHJhdGhlciB0aGFuIHRoZSB2ZXJzaW9ucyBvZiB0aGVzZSB0b29scworICAgICAgICBmcm9tIHRoZSBidWlsZCBob3N0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWljZWNjJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmljZWNjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzCisgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZ2l0aHViLmNvbS9pY2VjYy9pY2VjcmVhbSc+SWNlY3JlYW08L3VsaW5rPiwgd2hpY2gKKyAgICAgICAgZmFjaWxpdGF0ZXMgdGFraW5nIGNvbXBpbGUgam9icyBhbmQgZGlzdHJpYnV0aW5nIHRoZW0gYW1vbmcgcmVtb3RlCisgICAgICAgIG1hY2hpbmVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3Mgc3RhZ2VzIGRpcmVjdG9yaWVzIHdpdGggc3ltbGlua3MgZnJvbSA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5nKys8L2ZpbGVuYW1lPiB0byA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiwgZm9yIGJvdGgKKyAgICAgICAgbmF0aXZlIGFuZCBjcm9zcyBjb21waWxlcnMuCisgICAgICAgIERlcGVuZGluZyBvbiBlYWNoIGNvbmZpZ3VyZSBvciBjb21waWxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICBhZGRzIHRoZSBkaXJlY3RvcmllcyBhdCB0aGUgaGVhZCBvZiB0aGUgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBsaXN0CisgICAgICAgIGFuZCB0aGVuIHNldHMgdGhlIDxmaWxlbmFtZT5JQ0VDQ19DWFg8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgPGZpbGVuYW1lPklDRUNfQ0M8L2ZpbGVuYW1lPiB2YXJpYWJsZXMsIHdoaWNoIGFyZSB0aGUgcGF0aHMgdG8gdGhlCisgICAgICAgIDxmaWxlbmFtZT5nKys8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGNvbXBpbGVycywKKyAgICAgICAgcmVzcGVjdGl2ZWx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgdGhlIGNyb3NzIGNvbXBpbGVyLCB0aGUgY2xhc3MgY3JlYXRlcyBhIDxmaWxlbmFtZT50YXIuZ3o8L2ZpbGVuYW1lPgorICAgICAgICBmaWxlIHRoYXQgY29udGFpbnMgdGhlIFlvY3RvIFByb2plY3QgdG9vbGNoYWluIGFuZCBzZXRzCisgICAgICAgIDxmaWxlbmFtZT5JQ0VDQ19WRVJTSU9OPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICBjcm9zcy1jb21waWxlciB1c2VkIGluIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4sIGFjY29yZGluZ2x5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgaGFuZGxlcyBhbGwgdGhyZWUgZGlmZmVyZW50IGNvbXBpbGUgc3RhZ2VzCisgICAgICAgIChpLmUgbmF0aXZlICxjcm9zcy1rZXJuZWwgYW5kIHRhcmdldCkgYW5kIGNyZWF0ZXMgdGhlIG5lY2Vzc2FyeQorICAgICAgICBlbnZpcm9ubWVudCA8ZmlsZW5hbWU+dGFyLmd6PC9maWxlbmFtZT4gZmlsZSB0byBiZSB1c2VkIGJ5IHRoZSByZW1vdGUKKyAgICAgICAgbWFjaGluZXMuCisgICAgICAgIFRoZSBjbGFzcyBhbHNvIHN1cHBvcnRzIFNESyBnZW5lcmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfUEFUSCc+PGZpbGVuYW1lPklDRUNDX1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaXMgbm90IHNldCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgdGhlbiB0aGUKKyAgICAgICAgY2xhc3MgdHJpZXMgdG8gbG9jYXRlIHRoZSA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiBiaW5hcnkKKyAgICAgICAgdXNpbmcgPGZpbGVuYW1lPndoaWNoPC9maWxlbmFtZT4uCisKKyAgICAgICAgSWYKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX0VOVl9FWEVDJz48ZmlsZW5hbWU+SUNFQ0NfRU5WX0VYRUM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaXMgc2V0IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB0aGUgdmFyaWFibGUgc2hvdWxkCisgICAgICAgIHBvaW50IHRvIHRoZSA8ZmlsZW5hbWU+aWNlY2MtY3JlYXRlLWVudjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICBwcm92aWRlZCBieSB0aGUgdXNlci4KKyAgICAgICAgSWYgeW91IGRvIG5vdCBwb2ludCB0byBhIHVzZXItcHJvdmlkZWQgc2NyaXB0LCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgIHVzZXMgdGhlIGRlZmF1bHQgc2NyaXB0IHByb3ZpZGVkIGJ5IHRoZSByZWNpcGUKKyAgICAgICAgPGZpbGVuYW1lPmljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLmJiPC9maWxlbmFtZT4uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBzY3JpcHQgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIGFuZCBub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGgKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGFwcGx5CisgICAgICAgIHRvIHNwZWNpZmljIHJlY2lwZXMgb3IgY2xhc3NlcywgeW91IGNhbiBlZmZlY3RpdmVseSAiYmxhY2tsaXN0IiB0aGVtCisgICAgICAgIGJ5IGxpc3RpbmcgdGhlIHJlY2lwZXMgYW5kIGNsYXNzZXMgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19VU0VSX1BBQ0tBR0VfQkwnPjxmaWxlbmFtZT5JQ0VDQ19VU0VSX1BBQ0tBR0VfQkw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19VU0VSX0NMQVNTX0JMJz48ZmlsZW5hbWU+SUNFQ0NfVVNFUl9DTEFTU19CTDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgdmFyaWFibGVzLCByZXNwZWN0aXZlbHksIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICBEb2luZyBzbyBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gaGFuZGxlIHRoZXNlCisgICAgICAgIGNvbXBpbGF0aW9ucyBsb2NhbGx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBjYW4gbGlzdCByZWNpcGVzIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfVVNFUl9QQUNLQUdFX1dMJz48ZmlsZW5hbWU+SUNFQ0NfVVNFUl9QQUNLQUdFX1dMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvIGZvcmNlCisgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IHRvIGJlIGVuYWJsZWQgZm9yIHJlY2lwZXMgdXNpbmcgYW4gZW1wdHkKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJbmhlcml0aW5nIHRoZSA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiBjbGFzcyBjaGFuZ2VzIGFsbCBzc3RhdGUKKyAgICAgICAgc2lnbmF0dXJlcy4KKyAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBhIGRldmVsb3BtZW50IHRlYW0gaGFzIGEgZGVkaWNhdGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB0aGF0IHBvcHVsYXRlcworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX01JUlJPUlMnPjxmaWxlbmFtZT5TVEFURV9NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZCB0aGV5IHdhbnQgdG8gcmV1c2Ugc3N0YXRlIGZyb20KKyAgICAgICAgPGZpbGVuYW1lPlNUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlbiBhbGwgZGV2ZWxvcGVycyBhbmQgdGhlCisgICAgICAgIGJ1aWxkIHN5c3RlbSBuZWVkIHRvIGVpdGhlciBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBvciBub2JvZHkgc2hvdWxkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBdCB0aGUgZGlzdHJpYnV0aW9uIGxldmVsLCB5b3UgY2FuIGluaGVyaXQgdGhlCisgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGNsYXNzIHRvIGJlIHN1cmUgdGhhdCBhbGwgYnVpbGRlcnMgc3RhcnQKKyAgICAgICAgd2l0aCB0aGUgc2FtZSBzc3RhdGUgc2lnbmF0dXJlcy4KKyAgICAgICAgQWZ0ZXIgaW5oZXJpdGluZyB0aGUgY2xhc3MsIHlvdSBjYW4gdGhlbiBkaXNhYmxlIHRoZSBmZWF0dXJlIGJ5IHNldHRpbmcKKyAgICAgICAgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19ESVNBQkxFRCc+PGZpbGVuYW1lPklDRUNDX0RJU0FCTEVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvICIxIiBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVRfRElTVFJPX2FwcGVuZCA9ICIgaWNlY2MiCisgICAgIElDRUNDX0RJU0FCTEVEID8/PSAiMSIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBUaGlzIHByYWN0aWNlIG1ha2VzIHN1cmUgZXZlcnlvbmUgaXMgdXNpbmcgdGhlIHNhbWUgc2lnbmF0dXJlcyBidXQgYWxzbworICAgICAgICByZXF1aXJlcyBpbmRpdmlkdWFscyB0aGF0IGRvIHdhbnQgdG8gdXNlIEljZWNyZWFtIHRvIGVuYWJsZSB0aGUgZmVhdHVyZQorICAgICAgICBpbmRpdmlkdWFsbHkgYXMgZm9sbG93cyBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJQ0VDQ19ESVNBQkxFRCA9ICIiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2U8L2ZpbGVuYW1lPiBjbGFzcyBoZWxwcyBzdXBwb3J0IGNyZWF0aW5nIGltYWdlcworICAgICAgICBpbiBkaWZmZXJlbnQgZm9ybWF0cy4KKyAgICAgICAgRmlyc3QsIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBmcm9tIHBhY2thZ2VzIHVzaW5nCisgICAgICAgIG9uZSBvZiB0aGUgPGZpbGVuYW1lPnJvb3RmcyouYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgIGZpbGVzIChkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2UgZm9ybWF0IHVzZWQpIGFuZCB0aGVuIG9uZSBvciBtb3JlIGltYWdlCisgICAgICAgIGZpbGVzIGFyZSBjcmVhdGVkLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+SU1BR0VfRlNUWVBFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSB0eXBlcyBvZiBpbWFnZXMgdG8gZ2VuZXJhdGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz5JTUFHRV9JTlNUQUxMPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgY29udHJvbHMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIHRoZQorICAgICAgICAgICAgICAgIGltYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGN1c3RvbWl6aW5nIGltYWdlcywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZSc+Q3VzdG9taXppbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IGltYWdlcyBhcmUgY3JlYXRlZCwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2VzLWRldi1lbnZpcm9ubWVudCc+SW1hZ2VzPC9saW5rPiIgc2VjdGlvbiBlbHNld2hlcmUKKyAgICAgICAgaW4gdGhpcyBtYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2VfdHlwZXMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2VfdHlwZXMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4gY2xhc3MgZGVmaW5lcyBhbGwgb2YKKyAgICAgICAgdGhlIHN0YW5kYXJkIGltYWdlIG91dHB1dCB0eXBlcyB0aGF0IHlvdSBjYW4gZW5hYmxlIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBjbGFzcyBhcyBhIHJlZmVyZW5jZSBvbiBob3cgdG8gYWRkIHN1cHBvcnQgZm9yIGN1c3RvbQorICAgICAgICBpbWFnZSBvdXRwdXQgdHlwZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgY2xhc3MgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPklNQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UnPjxmaWxlbmFtZT5pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBJZiB5b3UgZGVmaW5lIHlvdXIgb3duIGltYWdlIHR5cGVzIHVzaW5nIGEgY3VzdG9tIEJpdEJha2UgY2xhc3MgYW5kCisgICAgICAgIHRoZW4gdXNlIDxmaWxlbmFtZT5JTUFHRV9DTEFTU0VTPC9maWxlbmFtZT4gdG8gZW5hYmxlIGl0LCB0aGUgY3VzdG9tCisgICAgICAgIGNsYXNzIG11c3QgZWl0aGVyIGluaGVyaXQgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4gb3IKKyAgICAgICAgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4gbXVzdCBhbHNvIGFwcGVhciBpbgorICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfQ0xBU1NFUzwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlX3R5cGVzX3Vib290Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlX3R5cGVzX3Vib290LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZV90eXBlc191Ym9vdDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGRlZmluZXMgYWRkaXRpb25hbCBpbWFnZSB0eXBlcyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBVLUJvb3QgYm9vdGxvYWRlci4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS1saXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLWxpdmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLWxpdmU8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBidWlsZGluZyAibGl2ZSIKKyAgICAgICAgaW1hZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBOb3JtYWxseSwgeW91IGRvIG5vdCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4KKyAgICAgICAgSW5zdGVhZCwgeW91IGFkZCAibGl2ZSIgdG8KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdlcmUgYnVpbGRpbmcgYW4gSVNPIGltYWdlLCB5b3Ugd291bGQgYWRkICJsaXZlIgorICAgICAgICB0byA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+LCBzZXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OT0lTTyc+PGZpbGVuYW1lPk5PSVNPPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlIHRvCisgICAgICAgICIwIiBhbmQgdGhlIGJ1aWxkIHN5c3RlbSB3b3VsZCB1c2UgdGhlIDxmaWxlbmFtZT5pbWFnZS1saXZlPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MgdG8gYnVpbGQgdGhlIElTTyBpbWFnZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS1ta2xpYnMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2UtbWtsaWJzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS1ta2xpYnM8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5ta2xpYnM8L2ZpbGVuYW1lPiB1dGlsaXR5IGR1cmluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXJvb3Rmcyc+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLCB3aGljaCBvcHRpbWl6ZXMgdGhlIHNpemUgb2YKKyAgICAgICAgbGlicmFyaWVzIGNvbnRhaW5lZCBpbiB0aGUgaW1hZ2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBpcyBlbmFibGVkIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi50ZW1wbGF0ZTwvZmlsZW5hbWU+IHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUl9DTEFTU0VTJz48ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUl9DTEFTU0VTID89ICJidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2UtcHJlbGluayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS1wcmVsaW5rLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS1wcmVsaW5rPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSA8ZmlsZW5hbWU+cHJlbGluazwvZmlsZW5hbWU+IHV0aWxpdHkgZHVyaW5nCisgICAgICAgIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHdoaWNoIG9wdGltaXplcyB0aGUgZHluYW1pYworICAgICAgICBsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gcmVkdWNlIGV4ZWN1dGFibGUgc3RhcnR1cCB0aW1lLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY2xhc3MgaXMgZW5hYmxlZCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYudGVtcGxhdGU8L2ZpbGVuYW1lPiB1c2luZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJfQ0xBU1NFUyc+PGZpbGVuYW1lPlVTRVJfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLXN3YWInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2Utc3dhYi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2Utc3dhYjwvZmlsZW5hbWU+IGNsYXNzIGVuYWJsZXMgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL3N3YWJiZXInPlN3YWJiZXI8L3VsaW5rPgorICAgICAgICB0b29sIGluIG9yZGVyIHRvIGRldGVjdCBhbmQgbG9nIGFjY2Vzc2VzIHRvIHRoZSBob3N0IHN5c3RlbSBkdXJpbmcKKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBwcm9jZXNzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IHVubWFpbnRhaW5lZC4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLXZtZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2Utdm1kay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2Utdm1kazwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGJ1aWxkaW5nIFZNd2FyZQorICAgICAgICBWTURLIGltYWdlcy4KKyAgICAgICAgTm9ybWFsbHksIHlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHkuCisgICAgICAgIEluc3RlYWQsIHlvdSBhZGQgInZtZGsiIHRvCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbnNhbmU8L2ZpbGVuYW1lPiBjbGFzcyBhZGRzIGEgc3RlcCB0byB0aGUgcGFja2FnZQorICAgICAgICBnZW5lcmF0aW9uIHByb2Nlc3Mgc28gdGhhdCBvdXRwdXQgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIGFyZQorICAgICAgICBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIEEgcmFuZ2Ugb2YgY2hlY2tzIGFyZSBwZXJmb3JtZWQgdGhhdCBjaGVjayB0aGUgYnVpbGQncyBvdXRwdXQKKyAgICAgICAgZm9yIGNvbW1vbiBwcm9ibGVtcyB0aGF0IHNob3cgdXAgZHVyaW5nIHJ1bnRpbWUuCisgICAgICAgIERpc3RyaWJ1dGlvbiBwb2xpY3kgdXN1YWxseSBkaWN0YXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjb25maWd1cmUgdGhlIHNhbml0eSBjaGVja3Mgc28gdGhhdCBzcGVjaWZpYyB0ZXN0IGZhaWx1cmVzCisgICAgICAgIGVpdGhlciByYWlzZSBhIHdhcm5pbmcgb3IgYW4gZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgVHlwaWNhbGx5LCBmYWlsdXJlcyBmb3IgbmV3IHRlc3RzIGdlbmVyYXRlIGEgd2FybmluZy4KKyAgICAgICAgU3Vic2VxdWVudCBmYWlsdXJlcyBmb3IgdGhlIHNhbWUgdGVzdCB3b3VsZCB0aGVuIGdlbmVyYXRlIGFuIGVycm9yCisgICAgICAgIG1lc3NhZ2Ugb25jZSB0aGUgbWV0YWRhdGEgaXMgaW4gYSBrbm93biBhbmQgZ29vZCBjb25kaXRpb24uCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9saW5rPiIKKyAgICAgICAgQ2hhcHRlciBmb3IgYSBsaXN0IG9mIGFsbCB0aGUgd2FybmluZyBhbmQgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgeW91IG1pZ2h0IGVuY291bnRlciB1c2luZyBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV0FSTl9RQSc+PGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FUlJPUl9RQSc+PGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZgorICAgICAgICB0aGVzZSBjaGVja3MgYXQgdGhlIGdsb2JhbCBsZXZlbCAoaS5lLiBpbiB5b3VyIGN1c3RvbSBkaXN0cm8KKyAgICAgICAgY29uZmlndXJhdGlvbikuCisgICAgICAgIEhvd2V2ZXIsIHRvIHNraXAgb25lIG9yIG1vcmUgY2hlY2tzIGluIHJlY2lwZXMsIHlvdSBzaG91bGQgdXNlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc2tpcCB0aGUgY2hlY2sgZm9yIHN5bWJvbGljIGxpbmsKKyAgICAgICAgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBtYWluIHBhY2thZ2Ugb2YgYSByZWNpcGUsCisgICAgICAgIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSByZWNpcGUuCisgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCB0aGUgcGFja2FnZSBuYW1lIG92ZXJyaWRlLCBpbiB0aGlzIGV4YW1wbGUKKyAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4sIG11c3QgYmUgdXNlZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgUUEgY2hlY2tzIGV4aXN0IGluIG9yZGVyIHRvIGRldGVjdCByZWFsCisgICAgICAgIG9yIHBvdGVudGlhbCBwcm9ibGVtcyBpbiB0aGUgcGFja2FnZWQgb3V0cHV0LgorICAgICAgICBTbyBleGVyY2lzZSBjYXV0aW9uIHdoZW4gZGlzYWJsaW5nIHRoZXNlIGNoZWNrcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSB0ZXN0cyB5b3UgY2FuIGxpc3Qgd2l0aCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YWxyZWFkeS1zdHJpcHBlZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgcHJvZHVjZWQgYmluYXJpZXMgaGF2ZSBub3QgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICAgc3RyaXBwZWQgcHJpb3IgdG8gdGhlIGJ1aWxkIHN5c3RlbSBleHRyYWN0aW5nIGRlYnVnIHN5bWJvbHMuCisgICAgICAgICAgICAgICAgSXQgaXMgY29tbW9uIGZvciB1cHN0cmVhbSBzb2Z0d2FyZSBwcm9qZWN0cyB0byBkZWZhdWx0IHRvCisgICAgICAgICAgICAgICAgc3RyaXBwaW5nIGRlYnVnIHN5bWJvbHMgZm9yIG91dHB1dCBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgZGVidWdnaW5nIHRvIHdvcmsgb24gdGhlIHRhcmdldCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZXMsIHRoaXMgc3RyaXBwaW5nIG11c3QgYmUKKyAgICAgICAgICAgICAgICBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmFyY2g6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGUgRXhlY3V0YWJsZSBhbmQgTGlua2FibGUgRm9ybWF0IChFTEYpIHR5cGUsIGJpdCBzaXplLAorICAgICAgICAgICAgICAgIGFuZCBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUgdGhleSBtYXRjaCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIFRoaXMgdGVzdCBmYWlscyBpZiBhbnkgYmluYXJpZXMgZG8gbm90IG1hdGNoIHRoZSB0eXBlIHNpbmNlCisgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvdWxkIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgd3JvbmcgY29tcGlsZXIgb3IgY29tcGlsZXIgb3B0aW9ucyBoYXZlIGJlZW4gdXNlZC4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8gYnlwYXNzCisgICAgICAgICAgICAgICAgdGhpcyBjaGVjay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmJ1aWxkcGF0aHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgcGF0aHMgdG8gbG9jYXRpb25zIG9uIHRoZSBidWlsZCBob3N0IGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGlzIHRlc3QgdHJpZ2dlcnMgdG9vIG1hbnkgZmFsc2UgcG9zaXRpdmVzIGFuZAorICAgICAgICAgICAgICAgIHRodXMgaXMgbm90IG5vcm1hbGx5IGVuYWJsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5idWlsZC1kZXBzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGlmIGEgYnVpbGQtdGltZSBkZXBlbmRlbmN5IHRoYXQgaXMgc3BlY2lmaWVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgZXhwbGljaXQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBvciB0YXNrLWxldmVsIGRlcGVuZGVuY2llcyBleGlzdHMgdG8gbWF0Y2ggYW55IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgIFRoaXMgZGV0ZXJtaW5hdGlvbiBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHRvIGRpc2NvdmVyIHdoZXJlCisgICAgICAgICAgICAgICAgcnVudGltZSBkZXBlbmRlbmNpZXMgYXJlIGRldGVjdGVkIGFuZCBhZGRlZCBkdXJpbmcgcGFja2FnaW5nLgorICAgICAgICAgICAgICAgIElmIG5vIGV4cGxpY2l0IGRlcGVuZGVuY3kgaGFzIGJlZW4gc3BlY2lmaWVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSwgYXQgdGhlIHBhY2thZ2luZyBzdGFnZSBpdCBpcyB0b28gbGF0ZSB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgICAgIHRoZSBkZXBlbmRlbmN5IGlzIGJ1aWx0LCBhbmQgdGh1cyB5b3UgY2FuIGVuZCB1cCB3aXRoIGFuCisgICAgICAgICAgICAgICAgZXJyb3Igd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgaW50byB0aGUgaW1hZ2UgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIGJlY2F1c2UgdGhlIGF1dG8tZGV0ZWN0ZWQgZGVwZW5kZW5jeSB3YXMgbm90IHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICBBbiBleGFtcGxlIG9mIHRoaXMgd291bGQgYmUgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLXJjLmQnPjxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGRlcGVuZGVuY3kgb24gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXRzY3JpcHRzLWZ1bmN0aW9uczwvZmlsZW5hbWU+IHBhY2thZ2UgdG8gcGFja2FnZXMKKyAgICAgICAgICAgICAgICB0aGF0IGluc3RhbGwgYW4gaW5pdHNjcmlwdCB0aGF0IHJlZmVycyB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2luaXQuZC9mdW5jdGlvbnM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHNob3VsZCByZWFsbHkgaGF2ZSBhbiBleHBsaWNpdAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IGZvciB0aGUgcGFja2FnZSBpbiBxdWVzdGlvbiBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbml0c2NyaXB0cy1mdW5jdGlvbnM8L2ZpbGVuYW1lPiBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYWJsZSB0byBlbnN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdHNjcmlwdHM8L2ZpbGVuYW1lPiByZWNpcGUgaXMgYWN0dWFsbHkgYnVpbHQgYW5kCisgICAgICAgICAgICAgICAgdGh1cyB0aGUgPGZpbGVuYW1lPmluaXRzY3JpcHRzLWZ1bmN0aW9uczwvZmlsZW5hbWU+IHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICBtYWRlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNvbXBpbGUtaG9zdC1wYXRoOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgbG9nIGZvciBpbmRpY2F0aW9ucworICAgICAgICAgICAgICAgIHRoYXQgcGF0aHMgdG8gbG9jYXRpb25zIG9uIHRoZSBidWlsZCBob3N0IHdlcmUgdXNlZC4KKyAgICAgICAgICAgICAgICBVc2luZyBzdWNoIHBhdGhzIG1pZ2h0IHJlc3VsdCBpbiBob3N0IGNvbnRhbWluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgb3V0cHV0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGVidWctZGVwczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGV4Y2VwdCA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGFja2FnZXMgZG8gbm90IGRlcGVuZCBvbiA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGFja2FnZXMsIHdoaWNoIHdvdWxkIGNhdXNlIGEgcGFja2FnaW5nIGJ1Zy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRlYnVnLWZpbGVzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBpbiBhbnl0aGluZyBidXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIFRoZSBkZWJ1ZyBmaWxlcyBzaG91bGQgYWxsIGJlIGluIHRoZSA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgVGh1cywgYW55dGhpbmcgcGFja2FnZWQgZWxzZXdoZXJlIGlzIGluY29ycmVjdCBwYWNrYWdpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXAtY21wOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIGludmFsaWQgdmVyc2lvbiBjb21wYXJpc29uIHN0YXRlbWVudHMgaW4gcnVudGltZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHBhY2thZ2VzIChpLmUuIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPjxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzKS4KKyAgICAgICAgICAgICAgICBBbnkgaW52YWxpZCBjb21wYXJpc29ucyBtaWdodCB0cmlnZ2VyIGZhaWx1cmVzIG9yIHVuZGVzaXJhYmxlCisgICAgICAgICAgICAgICAgYmVoYXZpb3Igd2hlbiBwYXNzZWQgdG8gdGhlIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRlc2t0b3A6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJ1bnMgdGhlIDxmaWxlbmFtZT5kZXNrdG9wLWZpbGUtdmFsaWRhdGU8L2ZpbGVuYW1lPiBwcm9ncmFtCisgICAgICAgICAgICAgICAgYWdhaW5zdCBhbnkgPGZpbGVuYW1lPi5kZXNrdG9wPC9maWxlbmFtZT4gZmlsZXMgdG8gdmFsaWRhdGUKKyAgICAgICAgICAgICAgICB0aGVpciBjb250ZW50cyBhZ2FpbnN0IHRoZSBzcGVjaWZpY2F0aW9uIGZvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZGVza3RvcDwvZmlsZW5hbWU+IGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2LWRlcHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IGFsbCBwYWNrYWdlcyBleGNlcHQgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4tc3RhdGljZGV2PC9maWxlbmFtZT4gcGFja2FnZXMgZG8gbm90IGRlcGVuZCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZXMsIHdoaWNoIHdvdWxkIGJlIGEKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgYnVnLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGV2LXNvOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCB0aGUgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IHN5bWJvbGljIGxpbmtzIGFyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgYW5kIG5vdCBpbiBhbnkgb2YgdGhlIG90aGVyIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIHRoZXNlIHN5bWxpbmtzIGFyZSBvbmx5IHVzZWZ1bCBmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZSBpcyB0aGUgY29ycmVjdCBsb2NhdGlvbiBmb3IKKyAgICAgICAgICAgICAgICB0aGVtLgorICAgICAgICAgICAgICAgIFNvbWUgdmVyeSByYXJlIGNhc2VzIGRvIGV4aXN0IGZvciBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyB3aGVyZQorICAgICAgICAgICAgICAgIHRoZXNlIHN5bWxpbmtzIGFyZSBuZWVkZWQgaW5zdGVhZCBpbiB0aGUgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZS1yZGVwczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgZmlsZS1sZXZlbCBkZXBlbmRlbmNpZXMgaWRlbnRpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF0IHBhY2thZ2luZyB0aW1lIGFyZSBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgc2hlbGwgc2NyaXB0IG1pZ2h0IHN0YXJ0IHdpdGggdGhlIGxpbmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+IyEvYmluL2Jhc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGxpbmUgd291bGQgdHJhbnNsYXRlIHRvIGEgZmlsZSBkZXBlbmRlbmN5IG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9iaW4vYmFzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE9mIHRoZSB0aHJlZSBwYWNrYWdlIG1hbmFnZXJzIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSBzdXBwb3J0cywgb25seSBSUE0gZGlyZWN0bHkgaGFuZGxlcyBmaWxlLWxldmVsCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLCByZXNvbHZpbmcgdGhlbSBhdXRvbWF0aWNhbGx5IHRvIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgcHJvdmlkaW5nIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgbGFjayBvZiB0aGF0IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIG90aGVyIHR3bworICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlcnMgZG9lcyBub3QgbWVhbiB0aGUgZGVwZW5kZW5jaWVzIGRvIG5vdCBzdGlsbAorICAgICAgICAgICAgICAgIG5lZWQgcmVzb2x2aW5nLgorICAgICAgICAgICAgICAgIFRoaXMgUUEgY2hlY2sgYXR0ZW1wdHMgdG8gZW5zdXJlIHRoYXQgZXhwbGljaXRseSBkZWNsYXJlZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgZXhpc3QgdG8gaGFuZGxlIGFueSBmaWxlLWxldmVsIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgaW4KKyAgICAgICAgICAgICAgICBwYWNrYWdlZCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZpbGVzLWludmFsaWQ6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcyB0aGF0IGNvbnRhaW4gIi8vIiwgd2hpY2ggaXMgaW52YWxpZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmluY29tcGF0aWJsZS1saWNlbnNlOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnQgd2hlbiBwYWNrYWdlcyBhcmUgZXhjbHVkZWQgZnJvbSBiZWluZyBjcmVhdGVkIGR1ZSB0bworICAgICAgICAgICAgICAgIGJlaW5nIG1hcmtlZCB3aXRoIGEgbGljZW5zZSB0aGF0IGlzIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOQ09NUEFUSUJMRV9MSUNFTlNFJz48ZmlsZW5hbWU+SU5DT01QQVRJQkxFX0xJQ0VOU0U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5pbnN0YWxsLWhvc3QtcGF0aDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGxvZyBmb3IgaW5kaWNhdGlvbnMKKyAgICAgICAgICAgICAgICB0aGF0IHBhdGhzIHRvIGxvY2F0aW9ucyBvbiB0aGUgYnVpbGQgaG9zdCB3ZXJlIHVzZWQuCisgICAgICAgICAgICAgICAgVXNpbmcgc3VjaCBwYXRocyBtaWdodCByZXN1bHQgaW4gaG9zdCBjb250YW1pbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmluc3RhbGxlZC12cy1zaGlwcGVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIHdoZW4gZmlsZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCB3aXRoaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGJ1dCBoYXZlIG5vdCBiZWVuIGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgYW55IHBhY2thZ2UgYnkgd2F5IG9mIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRmlsZXMgdGhhdCBkbyBub3QgYXBwZWFyIGluIGFueSBwYWNrYWdlIGNhbm5vdCBiZSBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgYW4gaW1hZ2UgbGF0ZXIgb24gaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgSWRlYWxseSwgYWxsIGluc3RhbGxlZCBmaWxlcyBzaG91bGQgYmUgcGFja2FnZWQgb3Igbm90CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGF0IGFsbC4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBjYW4gYmUgZGVsZXRlZCBhdCB0aGUgZW5kIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBpZiB0aGUgZmlsZXMgYXJlIG5vdAorICAgICAgICAgICAgICAgIG5lZWRlZCBpbiBhbnkgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxhOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgPGZpbGVuYW1lPi5sYTwvZmlsZW5hbWU+IGZpbGVzIGZvciBhbnkgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGF0aHMuCisgICAgICAgICAgICAgICAgQW55IDxmaWxlbmFtZT4ubGE8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgcGF0aHMgaXMgaW5jb3JyZWN0IHNpbmNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPiBhZGRzIHRoZSBjb3JyZWN0IHN5c3Jvb3QgcHJlZml4IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgZmlsZXMgYXV0b21hdGljYWxseSBpdHNlbGYuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5sZGZsYWdzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBFbnN1cmVzIHRoYXQgdGhlIGJpbmFyaWVzIHdlcmUgbGlua2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgb3B0aW9ucyBwcm92aWRlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIElmIHRoaXMgdGVzdCBmYWlscywgY2hlY2sgdGhhdCB0aGUgPGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlzIGJlaW5nIHBhc3NlZCB0byB0aGUgbGlua2VyIGNvbW1hbmQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJkaXI6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgbGlicmFyaWVzIGJlaW5nIGluc3RhbGxlZCBpbnRvIGluY29ycmVjdAorICAgICAgICAgICAgICAgIChwb3NzaWJseSBoYXJkY29kZWQpIGluc3RhbGxhdGlvbiBwYXRocy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB0ZXN0IHdpbGwgY2F0Y2ggcmVjaXBlcyB0aGF0IGluc3RhbGwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2xpYi9iYXIuc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4gaXMgImxpYjMyIi4KKyAgICAgICAgICAgICAgICBBbm90aGVyIGV4YW1wbGUgaXMgd2hlbiByZWNpcGVzIGluc3RhbGwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWI2NC9mb28uc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7bGliZGlyfTwvZmlsZW5hbWU+IGlzICIvdXNyL2xpYiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJleGVjOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgaWYgYSBwYWNrYWdlIGNvbnRhaW5zIGZpbGVzIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgY2hlY2sgaXMgbm90IHBlcmZvcm1lZCBpZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliZXhlY2RpcjwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyBiZWVuIHNldAorICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgdG8gPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGFja2FnZXMtbGlzdDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciB0aGUgc2FtZSBwYWNrYWdlIGJlaW5nIGxpc3RlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoCisgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWUuCisgICAgICAgICAgICAgICAgSW5zdGFsbGluZyB0aGUgcGFja2FnZSBpbiB0aGlzIG1hbm5lciBjYW4gY2F1c2UgZXJyb3JzIGR1cmluZworICAgICAgICAgICAgICAgIHBhY2thZ2luZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm0tY29uZmlnOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIGxpbmVzIGluIDxmaWxlbmFtZT5mcy1wZXJtcy50eHQ8L2ZpbGVuYW1lPiB0aGF0IGhhdmUKKyAgICAgICAgICAgICAgICBhbiBpbnZhbGlkIGZvcm1hdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm0tbGluZTo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyBsaW5lcyBpbiA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4gdGhhdCBoYXZlCisgICAgICAgICAgICAgICAgYW4gaW52YWxpZCBmb3JtYXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wZXJtLWxpbms6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgbGluZXMgaW4gPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBzcGVjaWZ5ICdsaW5rJyB3aGVyZSB0aGUgc3BlY2lmaWVkIHRhcmdldCBhbHJlYWR5IGV4aXN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm1zOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIHRoaXMgY2hlY2sgaXMgdW51c2VkIGJ1dCByZXNlcnZlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBrZ2NvbmZpZzo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIDxmaWxlbmFtZT4ucGM8L2ZpbGVuYW1lPiBmaWxlcyBmb3IgYW55CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPi88bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICBBbnkgPGZpbGVuYW1lPi5wYzwvZmlsZW5hbWU+IGZpbGUgY29udGFpbmluZyB0aGVzZSBwYXRocyBpcyBpbmNvcnJlY3QKKyAgICAgICAgICAgICAgICBzaW5jZSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGl0c2VsZiBhZGRzIHRoZSBjb3JyZWN0IHN5c3Jvb3QgcHJlZml4CisgICAgICAgICAgICAgICAgd2hlbiB0aGUgZmlsZXMgYXJlIGFjY2Vzc2VkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGtnbmFtZTo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBoYXZlIG5hbWVzIHRoYXQgZG8gbm90IGNvbnRhaW4gaW52YWxpZCBjaGFyYWN0ZXJzIChpLmUuCisgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBvdGhlciB0aGFuIDAtOSwgYS16LCAuLCArLCBhbmQgLSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wa2d2LXVuZGVmaW5lZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiB0aGUgPGZpbGVuYW1lPlBLR1Y8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCBkdXJpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wa2d2YXJjaGVjazo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRocm91Z2ggdGhlIHZhcmlhYmxlcworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SU1VHR0VTVFMnPjxmaWxlbmFtZT5SU1VHR0VTVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRVBMQUNFUyc+PGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQUxMT1dfRU1QVFknPjxmaWxlbmFtZT5BTExPV19FTVBUWTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZWluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5wa2dfcG9zdHJtPC9maWxlbmFtZT4sIGFuZCByZXBvcnRzIGlmIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNldHMgdGhhdCBhcmUgbm90IHBhY2thZ2Utc3BlY2lmaWMuCisgICAgICAgICAgICAgICAgVXNpbmcgdGhlc2UgdmFyaWFibGVzIHdpdGhvdXQgYSBwYWNrYWdlIHN1ZmZpeCBpcyBiYWQgcHJhY3RpY2UsCisgICAgICAgICAgICAgICAgYW5kIG1pZ2h0IHVubmVjZXNzYXJpbHkgY29tcGxpY2F0ZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcGFja2FnZXMKKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHNhbWUgcmVjaXBlIG9yIGhhdmUgb3RoZXIgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wbi1vdmVycmlkZXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IGEgcmVjaXBlIGRvZXMgbm90IGhhdmUgYSBuYW1lCisgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+KSB2YWx1ZQorICAgICAgICAgICAgICAgIHRoYXQgYXBwZWFycyBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgaXMgbmFtZWQgc3VjaCB0aGF0IGl0cyA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhbHVlIG1hdGNoZXMgc29tZXRoaW5nIGFscmVhZHkgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gKGUuZy4gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBoYXBwZW5zIHRvIGJlIHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICBpdCBjYW4gaGF2ZSB1bmV4cGVjdGVkIGNvbnNlcXVlbmNlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzaWdubWVudHMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfSA9ICJ4eXoiPC9maWxlbmFtZT4gZWZmZWN0aXZlbHkgdHVybiBpbnRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTID0gInh5eiI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cnBhdGhzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIHJwYXRocyBpbiB0aGUgYmluYXJpZXMgdGhhdCBjb250YWluIGJ1aWxkIHN5c3RlbSBwYXRocyBzdWNoCisgICAgICAgICAgICAgICAgYXMgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIElmIHRoaXMgdGVzdCBmYWlscywgYmFkIDxmaWxlbmFtZT4tcnBhdGg8L2ZpbGVuYW1lPiBvcHRpb25zIGFyZSBiZWluZworICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgbGlua2VyIGNvbW1hbmRzIGFuZCB5b3VyIGJpbmFyaWVzIGhhdmUgcG90ZW50aWFsIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgaXNzdWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3BsaXQtc3RyaXA6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgdGhhdCBzcGxpdHRpbmcgb3Igc3RyaXBwaW5nIGRlYnVnIHN5bWJvbHMgZnJvbSBiaW5hcmllcworICAgICAgICAgICAgICAgIGhhcyBmYWlsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdGF0aWNkZXY6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3Igc3RhdGljIGxpYnJhcnkgZmlsZXMgKDxmaWxlbmFtZT4qLmE8L2ZpbGVuYW1lPikgaW4KKyAgICAgICAgICAgICAgICBub24tPGZpbGVuYW1lPnN0YXRpY2RldjwvZmlsZW5hbWU+IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3ltbGluay10by1zeXNyb290OjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIHN5bWxpbmtzIGluIHBhY2thZ2VzIHRoYXQgcG9pbnQgaW50bworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICBTdWNoIHN5bWxpbmtzIHdpbGwgd29yayBvbiB0aGUgaG9zdCwgYnV0IGFyZSBjbGVhcmx5IGludmFsaWQKKyAgICAgICAgICAgICAgICB3aGVuIHJ1bm5pbmcgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRleHRyZWw6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgRUxGIGJpbmFyaWVzIHRoYXQgY29udGFpbiByZWxvY2F0aW9ucyBpbiB0aGVpcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4udGV4dDwvZmlsZW5hbWU+IHNlY3Rpb25zLCB3aGljaCBjYW4gcmVzdWx0IGluIGEKKyAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZSBpbXBhY3QgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICBTZWUgdGhlIGV4cGxhbmF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdxYS1pc3N1ZS10ZXh0cmVsJz48ZmlsZW5hbWU+RUxGIGJpbmFyeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHJ1bnRpbWUgcGVyZm9ybWFuY2UgaXNzdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgd2hlbiBhIGJpbmFyeSBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2JpbmRpcn08L2ZpbGVuYW1lPiwgb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4sIGRlcGVuZHMgb24gYW5vdGhlcgorICAgICAgICAgICAgICAgIGJpbmFyeSBpbnN0YWxsZWQgdW5kZXIgPGZpbGVuYW1lPiR7ZXhlY19wcmVmaXh9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBkZXBlbmRlbmN5IGlzIGEgY29uY2VybiBpZiB5b3Ugd2FudCB0aGUgc3lzdGVtIHRvIHJlbWFpbgorICAgICAgICAgICAgICAgIGJhc2ljYWxseSBvcGVyYWJsZSBpZiA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+IGlzIG1vdW50ZWQKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGFuZCBpcyBub3QgbW91bnRlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgZm9yIGJpbmFyaWVzIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9iaW5kaXJ9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4gYXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3NiaW48L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmb3IgYSBiaW5hcnkgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIHVuZGVyIDxmaWxlbmFtZT4ke2V4ZWNfcHJlZml4fTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0czo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB3aGVuIGEgc2NyaXB0IGZpbGUgaW5zdGFsbGVkIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9iaW5kaXJ9PC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9zYmluZGlyfTwvZmlsZW5hbWU+LCBkZXBlbmRzIG9uIGZpbGVzCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHVuZGVyIDxmaWxlbmFtZT4ke2V4ZWNfcHJlZml4fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgZGVwZW5kZW5jeSBpcyBhIGNvbmNlcm4gaWYgeW91IHdhbnQgdGhlIHN5c3RlbSB0byByZW1haW4KKyAgICAgICAgICAgICAgICBiYXNpY2FsbHkgb3BlcmFibGUgaWYgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPiBpcyBtb3VudGVkCisgICAgICAgICAgICAgICAgc2VwYXJhdGVseSBhbmQgaXMgbm90IG1vdW50ZWQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIGZvciBiaW5hcmllcyBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfYmluZGlyfTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9zYmluZGlyfTwvZmlsZW5hbWU+IGFyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2xpYjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+L2JpbjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9zYmluPC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZm9yIGEgYmluYXJ5IGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICB1bmRlciA8ZmlsZW5hbWU+JHtleGVjX3ByZWZpeH08L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVzZWxlc3MtcnBhdGhzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIGR5bmFtaWMgbGlicmFyeSBsb2FkIHBhdGhzIChycGF0aHMpIGluIHRoZSBiaW5hcmllcyB0aGF0CisgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBvbiBhIHN0YW5kYXJkIHN5c3RlbSBhcmUgc2VhcmNoZWQgYnkgdGhlIGxpbmtlciAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4vdXNyL2xpYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGVzZSBwYXRocyB3aWxsIG5vdCBjYXVzZSBhbnkgYnJlYWthZ2UsIHRoZXkgZG8gd2FzdGUgc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgYXJlIHVubmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dmFyLXVuZGVmaW5lZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB3aGVuIHZhcmlhYmxlcyBmdW5kYW1lbnRhbCB0byBwYWNrYWdpbmcgKGkuZS4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0QnPjxmaWxlbmFtZT5QS0dEPC9maWxlbmFtZT48L2xpbms+KSBhcmUKKyAgICAgICAgICAgICAgICB1bmRlZmluZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dmVyc2lvbi1nb2luZy1iYWNrd2FyZHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIElmIEJ1aWxkIEhpc3RvcnkgaXMgZW5hYmxlZCwgcmVwb3J0cyB3aGVuIGEgcGFja2FnZQorICAgICAgICAgICAgICAgIGJlaW5nIHdyaXR0ZW4gb3V0IGhhcyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0aGUgcHJldmlvdXNseQorICAgICAgICAgICAgICAgIHdyaXR0ZW4gcGFja2FnZSB1bmRlciB0aGUgc2FtZSBuYW1lLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcGxhY2luZyBvdXRwdXQgcGFja2FnZXMgaW50byBhIGZlZWQgYW5kCisgICAgICAgICAgICAgICAgdXBncmFkaW5nIHBhY2thZ2VzIG9uIGEgdGFyZ2V0IHN5c3RlbSB1c2luZyB0aGF0IGZlZWQsIHRoZQorICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgYSBwYWNrYWdlIGdvaW5nIGJhY2t3YXJkcyBjYW4gcmVzdWx0IGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gbm90IGNvcnJlY3RseSB1cGdyYWRpbmcgdG8gdGhlICJuZXciIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBub3QgdXNpbmcgcnVudGltZSBwYWNrYWdlIG1hbmFnZW1lbnQgb24geW91cgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLCB0aGVuIHlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGlzIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT54b3JnLWRyaXZlci1hYmk6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IGFsbCBwYWNrYWdlcyBjb250YWluaW5nIFhvcmcgZHJpdmVycyBoYXZlIEFCSQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnhzZXJ2ZXIteG9yZzwvZmlsZW5hbWU+IHJlY2lwZSBwcm92aWRlcyBkcml2ZXIKKyAgICAgICAgICAgICAgICBBQkkgbmFtZXMuCisgICAgICAgICAgICAgICAgQWxsIGRyaXZlcnMgc2hvdWxkIGRlcGVuZCBvbiB0aGUgQUJJIHZlcnNpb25zIHRoYXQgdGhleSBoYXZlCisgICAgICAgICAgICAgICAgYmVlbiBidWlsdCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgIERyaXZlciByZWNpcGVzIHRoYXQgaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54b3JnLWRyaXZlci1pbnB1dC5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT54b3JnLWRyaXZlci12aWRlby5pbmM8L2ZpbGVuYW1lPiB3aWxsCisgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBnZXQgdGhlc2UgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkIG9ubHkgbmVlZCB0byBleHBsaWNpdGx5IGFkZAorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyB0byBiaW5hcnkgZHJpdmVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWluc3NlcnYnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW5zc2Vydi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5zc2VydjwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHVzZXMgdGhlIDxmaWxlbmFtZT5pbnNzZXJ2PC9maWxlbmFtZT4gdXRpbGl0eSB0byB1cGRhdGUgdGhlIG9yZGVyIG9mCisgICAgICAgIHN5bWJvbGljIGxpbmtzIGluIDxmaWxlbmFtZT4vZXRjL3JjPy5kLzwvZmlsZW5hbWU+IHdpdGhpbiBhbiBpbWFnZQorICAgICAgICBiYXNlZCBvbiBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IExTQiBoZWFkZXJzIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+aW5pdC5kPC9maWxlbmFtZT4gc2NyaXB0cyB0aGVtc2VsdmVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmtlcm5lbDwvZmlsZW5hbWU+IGNsYXNzIGhhbmRsZXMgYnVpbGRpbmcgTGludXgga2VybmVscy4KKyAgICAgICAgVGhlIGNsYXNzIGNvbnRhaW5zIGNvZGUgdG8gYnVpbGQgYWxsIGtlcm5lbCB0cmVlcy4KKyAgICAgICAgQWxsIG5lZWRlZCBoZWFkZXJzIGFyZSBzdGFnZWQgaW50byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0tFUk5FTF9ESVInPlNUQUdJTkdfS0VSTkVMX0RJUjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkgdG8gYWxsb3cgb3V0LW9mLXRyZWUgbW9kdWxlIGJ1aWxkcyB1c2luZworICAgICAgICB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgZWFjaCBidWlsdCBrZXJuZWwgbW9kdWxlIGlzIHBhY2thZ2VkIHNlcGFyYXRlbHkgYW5kIGludGVyLW1vZHVsZQorICAgICAgICBkZXBlbmRlbmNpZXMgYXJlIGNyZWF0ZWQgYnkgcGFyc2luZyB0aGUgPGZpbGVuYW1lPm1vZGluZm88L2ZpbGVuYW1lPiBvdXRwdXQuCisgICAgICAgIElmIGFsbCBtb2R1bGVzIGFyZSByZXF1aXJlZCwgdGhlbiBpbnN0YWxsaW5nIHRoZSA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZXM8L2ZpbGVuYW1lPgorICAgICAgICBwYWNrYWdlIGluc3RhbGxzIGFsbCBwYWNrYWdlcyB3aXRoIG1vZHVsZXMgYW5kIHZhcmlvdXMgb3RoZXIga2VybmVsIHBhY2thZ2VzCisgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmtlcm5lbC12bWxpbnV4PC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFZhcmlvdXMgb3RoZXIgY2xhc3NlcyBhcmUgdXNlZCBieSB0aGUgPGZpbGVuYW1lPmtlcm5lbDwvZmlsZW5hbWU+CisgICAgICAgIGFuZCA8ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT4gY2xhc3NlcyBpbnRlcm5hbGx5IGluY2x1ZGluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsLWFyY2gnPjxmaWxlbmFtZT5rZXJuZWwtYXJjaDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlLWJhc2UnPjxmaWxlbmFtZT5tb2R1bGUtYmFzZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWxpbnV4LWtlcm5lbC1iYXNlJz48ZmlsZW5hbWU+bGludXgta2VybmVsLWJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Nlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1rZXJuZWwtYXJjaCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5rZXJuZWwtYXJjaC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsLWFyY2g8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzZXRzIHRoZSA8ZmlsZW5hbWU+QVJDSDwvZmlsZW5hbWU+IGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBMaW51eAorICAgICAgICBrZXJuZWwgY29tcGlsYXRpb24gKGluY2x1ZGluZyBtb2R1bGVzKS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1rZXJuZWwtbW9kdWxlLXNwbGl0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmtlcm5lbC1tb2R1bGUtc3BsaXQ8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3Igc3BsaXR0aW5nIExpbnV4IGtlcm5lbCBtb2R1bGVzIGludG8KKyAgICAgICAgc2VwYXJhdGUgcGFja2FnZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMta2VybmVsLXlvY3RvJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC15b2N0by5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsLXlvY3RvPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkaW5nIGZyb20gbGludXgteW9jdG8gc3R5bGUKKyAgICAgICAga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbGliX3BhY2thZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bGliX3BhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmxpYl9wYWNrYWdlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IGJ1aWxkIGxpYnJhcmllcyBhbmQgcHJvZHVjZSBleGVjdXRhYmxlCisgICAgICAgIGJpbmFyaWVzLCB3aGVyZSB0aG9zZSBiaW5hcmllcyBzaG91bGQgbm90IGJlIGluc3RhbGxlZCBieSBkZWZhdWx0CisgICAgICAgIGFsb25nIHdpdGggdGhlIGxpYnJhcnkuCisgICAgICAgIEluc3RlYWQsIHRoZSBiaW5hcmllcyBhcmUgYWRkZWQgdG8gYSBzZXBhcmF0ZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0tYmluPC9maWxlbmFtZT4KKyAgICAgICAgcGFja2FnZSB0byBtYWtlIHRoZWlyIGluc3RhbGxhdGlvbiBvcHRpb25hbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1saWNlbnNlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmxpY2Vuc2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmxpY2Vuc2U8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBsaWNlbnNlCisgICAgICAgIG1hbmlmZXN0IGNyZWF0aW9uIGFuZCBsaWNlbnNlIGV4Y2x1c2lvbi4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVF9ESVNUUk8nPjxmaWxlbmFtZT5JTkhFUklUX0RJU1RSTzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1saW51eC1rZXJuZWwtYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGludXgta2VybmVsLWJhc2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IGJ1aWxkIG91dCBvZiB0aGUgTGludXgKKyAgICAgICAga2VybmVsIHNvdXJjZSB0cmVlLgorICAgICAgICBUaGVzZSBidWlsZHMgZ29lcyBiZXlvbmQgdGhlIGtlcm5lbCBpdHNlbGYuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgUGVyZiByZWNpcGUgYWxzbyBpbmhlcml0cyB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWxvZ2dpbmcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bG9nZ2luZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9nZ2luZzwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHRoZSBzdGFuZGFyZAorICAgICAgICBzaGVsbCBmdW5jdGlvbnMgdXNlZCB0byBsb2cgbWVzc2FnZXMgZm9yIHZhcmlvdXMgQml0QmFrZSBzZXZlcml0eSBsZXZlbHMKKyAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmJicGxhaW48L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJibm90ZTwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+YmJ3YXJuPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYmVycm9yPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5iYmZhdGFsPC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+YmJkZWJ1ZzwvZmlsZW5hbWU+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgc2luY2UgaXQgaXMgaW5oZXJpdGVkIGJ5CisgICAgICAgIHRoZSA8ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW1ldGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGNsYXNzIGlzIGluaGVyaXRlZCBieSByZWNpcGVzCisgICAgICAgIHRoYXQgZG8gbm90IGJ1aWxkIGFueSBvdXRwdXQgcGFja2FnZXMgdGhlbXNlbHZlcywgYnV0IGFjdCBhcyBhICJtZXRhIgorICAgICAgICB0YXJnZXQgZm9yIGJ1aWxkaW5nIG90aGVyIHJlY2lwZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWV0YWRhdGFfc2NtJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGFkYXRhX3NjbS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YWRhdGFfc2NtPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAgcXVlcnlpbmcgdGhlIGJyYW5jaCBhbmQgcmV2aXNpb24gb2YgYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pCisgICAgICAgIHJlcG9zaXRvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyB1c2VzIHRoaXMgY2xhc3MgdG8gcHJpbnQgdGhlIHJldmlzaW9ucyBvZiBlYWNoIGxheWVyIGJlZm9yZQorICAgICAgICBzdGFydGluZyBldmVyeSBidWlsZC4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhZGF0YV9zY208L2ZpbGVuYW1lPiBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlIDxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWltZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5taW1lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5taW1lPC9maWxlbmFtZT4gY2xhc3MgZ2VuZXJhdGVzIHRoZSBwcm9wZXIKKyAgICAgICAgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QvcG9zdHJtKSBzY3JpcHRsZXRzIGZvciBwYWNrYWdlcworICAgICAgICB0aGF0IGluc3RhbGwgTUlNRSB0eXBlIGZpbGVzLgorICAgICAgICBUaGVzZSBzY3JpcHRsZXRzIGNhbGwgPGZpbGVuYW1lPnVwZGF0ZS1taW1lLWRhdGFiYXNlPC9maWxlbmFtZT4gdG8gYWRkCisgICAgICAgIHRoZSBNSU1FIHR5cGVzIHRvIHRoZSBzaGFyZWQgZGF0YWJhc2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWlycm9ycyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5taXJyb3JzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5taXJyb3JzPC9maWxlbmFtZT4gY2xhc3Mgc2V0cyB1cCBzb21lIHN0YW5kYXJkCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiBlbnRyaWVzCisgICAgICAgIGZvciBzb3VyY2UgY29kZSBtaXJyb3JzLgorICAgICAgICBUaGVzZSBtaXJyb3JzIHByb3ZpZGUgYSBmYWxsLWJhY2sgcGF0aCBpbiBjYXNlIHRoZSB1cHN0cmVhbSBzb3VyY2UKKyAgICAgICAgc3BlY2lmaWVkIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB3aXRoaW4gcmVjaXBlcyBpcyB1bmF2YWlsYWJsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgc2luY2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1tb2R1bGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bW9kdWxlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBidWlsZGluZworICAgICAgICBvdXQtb2YtdHJlZSBMaW51eCBrZXJuZWwgbW9kdWxlcy4KKyAgICAgICAgVGhlIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUtYmFzZSc+PGZpbGVuYW1lPm1vZHVsZS1iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwtbW9kdWxlLXNwbGl0Jz48ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1zcGxpdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzLCBhbmQgaW1wbGVtZW50cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFza3MuCisgICAgICAgIFRoZSBjbGFzcyBwcm92aWRlcyBldmVyeXRoaW5nIG5lZWRlZCB0byBidWlsZCBhbmQgcGFja2FnZSBhIGtlcm5lbAorICAgICAgICBtb2R1bGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIG91dC1vZi10cmVlIExpbnV4IGtlcm5lbCBtb2R1bGVzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfVVJMOyNpbmNvcnBvcmF0aW5nLW91dC1vZi10cmVlLW1vZHVsZXMnPkluY29ycG9yYXRpbmcgT3V0LW9mLVRyZWUgTW9kdWxlczwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbW9kdWxlLWJhc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bW9kdWxlLWJhc2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZS1iYXNlPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIGJhc2UKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgTGludXgga2VybmVsIG1vZHVsZXMuCisgICAgICAgIFR5cGljYWxseSwgYSByZWNpcGUgdGhhdCBidWlsZHMgc29mdHdhcmUgdGhhdCBpbmNsdWRlcyBvbmUgb3IKKyAgICAgICAgbW9yZSBrZXJuZWwgbW9kdWxlcyBhbmQgaGFzIGl0cyBvd24gbWVhbnMgb2YgYnVpbGRpbmcKKyAgICAgICAgdGhlIG1vZHVsZSBpbmhlcml0cyB0aGlzIGNsYXNzIGFzIG9wcG9zZWQgdG8gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW11bHRpbGliKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tdWx0aWxpYiouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm11bHRpbGliKjwvZmlsZW5hbWU+IGNsYXNzZXMgcHJvdmlkZSBzdXBwb3J0CisgICAgICAgIGZvciBidWlsZGluZyBsaWJyYXJpZXMgd2l0aCBkaWZmZXJlbnQgdGFyZ2V0IG9wdGltaXphdGlvbnMgb3IgdGFyZ2V0CisgICAgICAgIGFyY2hpdGVjdHVyZXMgYW5kIGluc3RhbGxpbmcgdGhlbSBzaWRlLWJ5LXNpZGUgaW4gdGhlIHNhbWUgaW1hZ2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBNdWx0aWxpYiBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb21iaW5pbmctbXVsdGlwbGUtdmVyc2lvbnMtbGlicmFyeS1maWxlcy1pbnRvLW9uZS1pbWFnZSc+Q29tYmluaW5nIE11bHRpcGxlIFZlcnNpb25zIG9mIExpYnJhcnkgRmlsZXMgaW50byBPbmUgSW1hZ2U8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgY29tbW9uCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMgdGhhdCB3aXNoIHRvIGJ1aWxkIHRvb2xzIHRvIHJ1biBvbiB0aGUgYnVpbGQKKyAgICAgICAgaG9zdCAoaS5lLiB0b29scyB0aGF0IHVzZSB0aGUgY29tcGlsZXIgb3Igb3RoZXIgdG9vbHMgZnJvbSB0aGUKKyAgICAgICAgYnVpbGQgaG9zdCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgcmVjaXBlIHRoYXQgYnVpbGRzIHRvb2xzIHRoYXQgcnVuIG5hdGl2ZWx5IG9uIHRoZQorICAgICAgICBob3N0IGEgY291cGxlIGRpZmZlcmVudCB3YXlzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIDxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi1uYXRpdmUuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRoYXQgaW5oZXJpdHMgdGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBvcmRlciB0aGUgaW5oZXJpdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFmdGVyIGFsbCBvdGhlciBpbmhlcml0IHN0YXRlbWVudHMgc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkIGxhc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIG9yIG1vZGlmeSBhIHRhcmdldCByZWNpcGUgdGhhdCBjb250YWlucworICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvbGluaz4gPSAibmF0aXZlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbnNpZGUgdGhlIHJlY2lwZSwgdXNlIDxmaWxlbmFtZT5fY2xhc3MtbmF0aXZlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9jbGFzcy10YXJnZXQ8L2ZpbGVuYW1lPiBvdmVycmlkZXMgdG8gc3BlY2lmeSBhbnkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIHRoZSByZXNwZWN0aXZlIG5hdGl2ZSBvciB0YXJnZXQKKyAgICAgICAgICAgICAgICBjYXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQWx0aG91Z2ggYXBwbGllZCBkaWZmZXJlbnRseSwgdGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcyBpcworICAgICAgICB1c2VkIHdpdGggYm90aCBtZXRob2RzLgorICAgICAgICBUaGUgYWR2YW50YWdlIG9mIHRoZSBzZWNvbmQgbWV0aG9kIGlzIHRoYXQgeW91IGRvIG5vdCBuZWVkIHRvIGhhdmUgdHdvCisgICAgICAgIHNlcGFyYXRlIHJlY2lwZXMgKGFzc3VtaW5nIHlvdSBuZWVkIGJvdGgpIGZvciBuYXRpdmUgYW5kIHRhcmdldC4KKyAgICAgICAgQWxsIGNvbW1vbiBwYXJ0cyBvZiB0aGUgcmVjaXBlIGFyZSBhdXRvbWF0aWNhbGx5IHNoYXJlZC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1uYXRpdmVzZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bmF0aXZlc2RrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBjb21tb24KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IHdpc2ggdG8gYnVpbGQgdG9vbHMgdG8gcnVuIGFzIHBhcnQgb2YKKyAgICAgICAgYW4gU0RLIChpLmUuIHRvb2xzIHRoYXQgcnVuIG9uCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgcmVjaXBlIHRoYXQgYnVpbGRzIHRvb2xzIHRoYXQgcnVuIG9uIHRoZSBTREsgbWFjaGluZQorICAgICAgICBhIGNvdXBsZSBkaWZmZXJlbnQgd2F5czoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXlyZWNpcGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHJlY2lwZSB0aGF0IGluaGVyaXRzIHRoZSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3Qgb3JkZXIgdGhlIGluaGVyaXQgc3RhdGVtZW50CisgICAgICAgICAgICAgICAgaW4gdGhlIHJlY2lwZSBhZnRlciBhbGwgb3RoZXIgaW5oZXJpdCBzdGF0ZW1lbnRzIHNvIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IGNsYXNzIGlzIGluaGVyaXRlZCBsYXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiB2YXJpYW50CisgICAgICAgICAgICAgICAgb2YgYW55IHJlY2lwZSBieSBhZGRpbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC9saW5rPiA9ICJuYXRpdmVzZGsiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluc2lkZSB0aGUgcmVjaXBlLCB1c2UgPGZpbGVuYW1lPl9jbGFzcy1uYXRpdmVzZGs8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2NsYXNzLXRhcmdldDwvZmlsZW5hbWU+IG92ZXJyaWRlcyB0byBzcGVjaWZ5IGFueQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgc3BlY2lmaWMgdG8gdGhlIHJlc3BlY3RpdmUgU0RLIG1hY2hpbmUgb3IgdGFyZ2V0CisgICAgICAgICAgICAgICAgY2FzZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEFsdGhvdWdoIGFwcGxpZWQgZGlmZmVyZW50bHksIHRoZSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgaXMgdXNlZCB3aXRoIGJvdGggbWV0aG9kcy4KKyAgICAgICAgVGhlIGFkdmFudGFnZSBvZiB0aGUgc2Vjb25kIG1ldGhvZCBpcyB0aGF0IHlvdSBkbyBub3QgbmVlZCB0byBoYXZlIHR3bworICAgICAgICBzZXBhcmF0ZSByZWNpcGVzIChhc3N1bWluZyB5b3UgbmVlZCBib3RoKSBmb3IgdGhlIFNESyBtYWNoaW5lIGFuZCB0aGUKKyAgICAgICAgdGFyZ2V0LgorICAgICAgICBBbGwgY29tbW9uIHBhcnRzIG9mIHRoZSByZWNpcGUgYXJlIGF1dG9tYXRpY2FsbHkgc2hhcmVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW9lbGludCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5vZWxpbnQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm9lbGludDwvZmlsZW5hbWU+IGNsYXNzIGlzIGFuCisgICAgICAgIG9ic29sZXRlIGxpbnQgY2hlY2tpbmcgdG9vbCB0aGF0IGV4aXN0cyBpbgorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBudW1iZXIgb2YgY2xhc3NlcyBleGlzdCB0aGF0IGNvdWxkIGJlIGdlbmVyYWxseSB1c2VmdWwgaW4KKyAgICAgICAgT0UtQ29yZSBidXQgYXJlIG5ldmVyIGFjdHVhbGx5IHVzZWQgd2l0aGluIE9FLUNvcmUgaXRzZWxmLgorICAgICAgICBUaGUgPGZpbGVuYW1lPm9lbGludDwvZmlsZW5hbWU+IGNsYXNzIGlzIG9uZSBzdWNoIGV4YW1wbGUuCisgICAgICAgIEhvd2V2ZXIsIGJlaW5nIGF3YXJlIG9mIHRoaXMgY2xhc3MgY2FuIHJlZHVjZSB0aGUgcHJvbGlmZXJhdGlvbiBvZgorICAgICAgICBkaWZmZXJlbnQgdmVyc2lvbnMgb2Ygc2ltaWxhciBjbGFzc2VzIGFjcm9zcyBtdWx0aXBsZSBsYXllcnMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtb3duLW1pcnJvcnMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+b3duLW1pcnJvcnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm93bi1taXJyb3JzPC9maWxlbmFtZT4gY2xhc3MgbWFrZXMgaXQKKyAgICAgICAgZWFzaWVyIHRvIHNldCB1cCB5b3VyIG93bgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZnJvbSB3aGljaCB0byBmaXJzdCBmZXRjaCBzb3VyY2UgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyAgICAgICAgdXBzdHJlYW0gc3BlY2lmaWVkIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB3aXRoaW4gZWFjaCByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSB0aGlzIGNsYXNzLCBpbmhlcml0IGl0IGdsb2JhbGx5IGFuZCBzcGVjaWZ5CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TT1VSQ0VfTUlSUk9SX1VSTCc+PGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfVVJMPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAib3duLW1pcnJvcnMiCisgICAgIFNPVVJDRV9NSVJST1JfVVJMID0gImh0dHA6Ly9leGFtcGxlLmNvbS9teS1zb3VyY2UtbWlycm9yIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBvbmx5IGEgc2luZ2xlIFVSTCBpbgorICAgICAgICA8ZmlsZW5hbWU+U09VUkNFX01JUlJPUl9VUkw8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBnZW5lcmF0aW5nCisgICAgICAgIHBhY2thZ2VzIGZyb20gYSBidWlsZCdzIG91dHB1dC4KKyAgICAgICAgVGhlIGNvcmUgZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IGlzIGluCisgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlIGNvZGUgc3BlY2lmaWMgdG8gcGFydGljdWxhciBwYWNrYWdlIHR5cGVzIHJlc2lkZXMgaW4gdGhlc2UKKyAgICAgICAgcGFja2FnZS1zcGVjaWZpYyBjbGFzc2VzOgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2RlYic+PGZpbGVuYW1lPnBhY2thZ2VfZGViPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+PGZpbGVuYW1lPnBhY2thZ2VfcnBtPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2lwayc+PGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV90YXInPjxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+IGNsYXNzIGlzIGJyb2tlbiBhbmQgbm90CisgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjb250cm9sIHRoZSBsaXN0IG9mIHJlc3VsdGluZyBwYWNrYWdlIGZvcm1hdHMgYnkgdXNpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz5QQUNLQUdFX0NMQVNTRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGUgZGVmaW5lZCBpbiB5b3VyIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIFdoZW4gZGVmaW5pbmcgdGhlIHZhcmlhYmxlLCB5b3UgY2FuIHNwZWNpZnkgb25lIG9yIG1vcmUgcGFja2FnZSB0eXBlcy4KKyAgICAgICAgU2luY2UgaW1hZ2VzIGFyZSBnZW5lcmF0ZWQgZnJvbSBwYWNrYWdlcywgYSBwYWNrYWdpbmcgY2xhc3MgaXMKKyAgICAgICAgbmVlZGVkIHRvIGVuYWJsZSBpbWFnZSBnZW5lcmF0aW9uLgorICAgICAgICBUaGUgZmlyc3QgY2xhc3MgbGlzdGVkIGluIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBmb3IgaW1hZ2UgZ2VuZXJhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IHRha2UgdGhlIG9wdGlvbmFsIHN0ZXAgdG8gc2V0IHVwIGEgcmVwb3NpdG9yeSAocGFja2FnZSBmZWVkKQorICAgICAgICBvbiB0aGUgZGV2ZWxvcG1lbnQgaG9zdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IFNtYXJ0LCB5b3UgY2FuCisgICAgICAgIGluc3RhbGwgcGFja2FnZXMgZnJvbSB0aGUgZmVlZCB3aGlsZSB5b3UgYXJlIHJ1bm5pbmcgdGhlIGltYWdlCisgICAgICAgIG9uIHRoZSB0YXJnZXQgKGkuZS4gcnVudGltZSBpbnN0YWxsYXRpb24gb2YgcGFja2FnZXMpLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctcnVudGltZS1wYWNrYWdlLW1hbmFnZW1lbnQnPlVzaW5nIFJ1bnRpbWUgUGFja2FnZSBNYW5hZ2VtZW50PC91bGluaz4iCisgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHBhY2thZ2Utc3BlY2lmaWMgY2xhc3MgeW91IGNob29zZSBjYW4gYWZmZWN0IGJ1aWxkLXRpbWUgcGVyZm9ybWFuY2UKKyAgICAgICAgYW5kIGhhcyBzcGFjZSByYW1pZmljYXRpb25zLgorICAgICAgICBJbiBnZW5lcmFsLCBidWlsZGluZyBhIHBhY2thZ2Ugd2l0aCBJUEsgdGFrZXMgYWJvdXQgdGhpcnR5IHBlcmNlbnQgbGVzcworICAgICAgICB0aW1lIGFzIGNvbXBhcmVkIHRvIHVzaW5nIFJQTSB0byBidWlsZCB0aGUgc2FtZSBvciBzaW1pbGFyIHBhY2thZ2UuCisgICAgICAgIFRoaXMgY29tcGFyaXNvbiB0YWtlcyBpbnRvIGFjY291bnQgYSBjb21wbGV0ZSBidWlsZCBvZiB0aGUgcGFja2FnZSB3aXRoCisgICAgICAgIGFsbCBkZXBlbmRlbmNpZXMgcHJldmlvdXNseSBidWlsdC4KKyAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBkaXNjcmVwYW5jeSBpcyBiZWNhdXNlIHRoZSBSUE0gcGFja2FnZSBtYW5hZ2VyCisgICAgICAgIGNyZWF0ZXMgYW5kIHByb2Nlc3NlcyBtb3JlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IHRoYW4gdGhlCisgICAgICAgIElQSyBwYWNrYWdlIG1hbmFnZXIuCisgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG1pZ2h0IGNvbnNpZGVyIHNldHRpbmcKKyAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+IHRvICJwYWNrYWdlX2lwayIgaWYgeW91IGFyZQorICAgICAgICBidWlsZGluZyBzbWFsbGVyIHN5c3RlbXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlZm9yZSBtYWtpbmcgeW91ciBwYWNrYWdlIG1hbmFnZXIgZGVjaXNpb24sIGhvd2V2ZXIsIHlvdSBzaG91bGQKKyAgICAgICAgY29uc2lkZXIgc29tZSBmdXJ0aGVyIHRoaW5ncyBhYm91dCB1c2luZyBSUE06CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgUlBNIHN0YXJ0cyB0byBwcm92aWRlIG1vcmUgYWJpbGl0aWVzIHRoYW4gSVBLIGR1ZSB0bworICAgICAgICAgICAgICAgIHRoZSBmYWN0IHRoYXQgaXQgcHJvY2Vzc2VzIG1vcmUgTWV0YWRhdGEuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgaW5kaXZpZHVhbCBmaWxlIHR5cGVzLAorICAgICAgICAgICAgICAgIGZpbGUgY2hlY2tzdW0gZ2VuZXJhdGlvbiBhbmQgZXZhbHVhdGlvbiBvbiBpbnN0YWxsLCBzcGFyc2UgZmlsZQorICAgICAgICAgICAgICAgIHN1cHBvcnQsIGNvbmZsaWN0IGRldGVjdGlvbiBhbmQgcmVzb2x1dGlvbiBmb3IgTXVsdGlsaWIgc3lzdGVtcywKKyAgICAgICAgICAgICAgICBBQ0lEIHN0eWxlIHVwZ3JhZGUsIGFuZCByZXBhY2thZ2luZyBhYmlsaXRpZXMgZm9yIHJvbGxiYWNrcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBGb3Igc21hbGxlciBzeXN0ZW1zLCB0aGUgZXh0cmEgc3BhY2UgdXNlZCBmb3IgdGhlIEJlcmtlbGV5CisgICAgICAgICAgICAgICAgRGF0YWJhc2UgYW5kIHRoZSBhbW91bnQgb2YgbWV0YWRhdGEgd2hlbiB1c2luZyBSUE0gY2FuIGFmZmVjdAorICAgICAgICAgICAgICAgIHlvdXIgYWJpbGl0eSB0byBwZXJmb3JtIG9uLWRldmljZSB1cGdyYWRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBlZmZlY3RzIG9mIHRoZSBwYWNrYWdlCisgICAgICAgIGNsYXNzIGF0IHRoZXNlIHR3byBZb2N0byBQcm9qZWN0IG1haWxpbmcgbGlzdCBsaW5rczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9waXBlcm1haWwvcG9reS8yMDExLU1heS8wMDYzNjIuaHRtbCc+CisgICAgICAgICAgICAgICAgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2Mi5odG1sPC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9waXBlcm1haWwvcG9reS8yMDExLU1heS8wMDYzNjMuaHRtbCc+CisgICAgICAgICAgICAgICAgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2My5odG1sPC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9kZWInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZV9kZWIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfZGViPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgcGFja2FnZXMgdGhhdCB1c2UgdGhlIERlYmlhbgorICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+KSBmaWxlIGZvcm1hdC4KKyAgICAgICAgVGhlIGNsYXNzIGVuc3VyZXMgdGhlIHBhY2thZ2VzIGFyZSB3cml0dGVuIG91dCBpbiBhCisgICAgICAgIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gZmlsZSBmb3JtYXQgdG8gdGhlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfREVCJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9ERUI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgIGRpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYW5kIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfaXBrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2VfaXBrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlX2lwazwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBJUEsKKyAgICAgICAgKGkuZS4gPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPikgZmlsZSBmb3JtYXQuCisgICAgICAgIFRoZSBjbGFzcyBlbnN1cmVzIHRoZSBwYWNrYWdlcyBhcmUgd3JpdHRlbiBvdXQgaW4gYQorICAgICAgICA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+IGZpbGUgZm9ybWF0IHRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSVBLPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFuZCBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlX3JwbS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV9ycG08L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBjcmVhdGluZyBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgUlBNCisgICAgICAgIChpLmUuIDxmaWxlbmFtZT4ucnBtPC9maWxlbmFtZT4pIGZpbGUgZm9ybWF0LgorICAgICAgICBUaGUgY2xhc3MgZW5zdXJlcyB0aGUgcGFja2FnZXMgYXJlIHdyaXR0ZW4gb3V0IGluIGEKKyAgICAgICAgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBmaWxlIGZvcm1hdCB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9SUE0nPjxmaWxlbmFtZT5ERVBMT1lfRElSX1JQTTwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZV90YXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZV90YXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgdGFyYmFsbHMuCisgICAgICAgIFRoZSBjbGFzcyBlbnN1cmVzIHRoZSBwYWNrYWdlcyBhcmUgd3JpdHRlbiBvdXQgaW4gYQorICAgICAgICB0YXJiYWxsIGZvcm1hdCB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9UQVInPjxmaWxlbmFtZT5ERVBMT1lfRElSX1RBUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgWW91IGNhbm5vdCBzcGVjaWZ5IHRoZSA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgZmlyc3QgdXNpbmcgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIFlvdSBtdXN0IHVzZSA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiwgb3IgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICBmb3JtYXRzIGZvciB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VkYXRhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2VkYXRhLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlZGF0YTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzCisgICAgICAgIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciByZWFkaW5nIDxmaWxlbmFtZT5wa2dkYXRhPC9maWxlbmFtZT4gZmlsZXMKKyAgICAgICAgZm91bmQgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFRoZXNlIGZpbGVzIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvdXRwdXQgcGFja2FnZSBwcm9kdWNlZCBieQorICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2Vncm91cCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IGNsYXNzIHNldHMgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgYXBwcm9wcmlhdGUgZm9yIHBhY2thZ2UgZ3JvdXAgcmVjaXBlcyAoZS5nLgorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0FSQ0gnPlBBQ0tBR0VfQVJDSDwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTExPV19FTVBUWSc+QUxMT1dfRU1QVFk8L2xpbms+PC9maWxlbmFtZT4sCisgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IGFsbCBwYWNrYWdlIGdyb3VwIHJlY2lwZXMgaW5oZXJpdCB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIGNsYXNzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWN1c3RvbXRhc2tzJz5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIFBhY2thZ2UgR3JvdXBzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBQcmV2aW91c2x5LCB0aGlzIGNsYXNzIHdhcyBjYWxsZWQgdGhlIDxmaWxlbmFtZT50YXNrPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZWluZm8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZWluZm8uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VpbmZvPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZ2l2ZXMgYSBCaXRCYWtlIHVzZXIgaW50ZXJmYWNlIHRoZSBhYmlsaXR5IHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisgICAgICAgIGFib3V0IG91dHB1dCBwYWNrYWdlcyBmcm9tIHRoZSA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGZpbGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYXV0b21hdGljYWxseSB3aGVuIHVzaW5nIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+CisgICAgICAgIHVzZXIgaW50ZXJmYWNlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhdGNoJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhdGNoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBhcHBseWluZyBwYXRjaGVzIGR1cmluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzay4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBlcmxuYXRpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGVybG5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gaW5oZXJpdGVkIGJ5IGEgcmVjaXBlLCB0aGUgPGZpbGVuYW1lPnBlcmxuYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzdXBwb3J0cyB1c2luZyB0aGUgbmF0aXZlIHZlcnNpb24gb2YgUGVybCBidWlsdCBieSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSB2ZXJzaW9uIHByb3ZpZGVkIGJ5IHRoZSBidWlsZCBob3N0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBpeGJ1ZmNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBpeGJ1ZmNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5waXhidWZjYWNoZTwvZmlsZW5hbWU+IGNsYXNzIGdlbmVyYXRlcyB0aGUgcHJvcGVyCisgICAgICAgIHBvc3QtaW5zdGFsbCBhbmQgcG9zdC1yZW1vdmUgKHBvc3RpbnN0L3Bvc3RybSkgc2NyaXB0bGV0cyBmb3IgcGFja2FnZXMKKyAgICAgICAgdGhhdCBpbnN0YWxsIHBpeGJ1ZiBsb2FkZXJzLCB3aGljaCBhcmUgdXNlZCB3aXRoCisgICAgICAgIDxmaWxlbmFtZT5nZGstcGl4YnVmPC9maWxlbmFtZT4uCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+dXBkYXRlX3BpeGJ1Zl9jYWNoZTwvZmlsZW5hbWU+CisgICAgICAgIHRvIGFkZCB0aGUgcGl4YnVmIGxvYWRlcnMgdG8gdGhlIGNhY2hlLgorICAgICAgICBTaW5jZSB0aGUgY2FjaGUgZmlsZXMgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywKKyAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZV9waXhidWZfY2FjaGU8L2ZpbGVuYW1lPiBpcyBydW4gdXNpbmcgUUVNVSBpZiB0aGUKKyAgICAgICAgcG9zdGluc3Qgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UKKyAgICAgICAgY3JlYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBwaXhidWYgbG9hZGVycyBiZWluZyBpbnN0YWxsZWQgYXJlIGluIHBhY2thZ2VzIG90aGVyCisgICAgICAgIHRoYW4gdGhlIHJlY2lwZSdzIG1haW4gcGFja2FnZSwgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QSVhCVUZfUEFDS0FHRVMnPjxmaWxlbmFtZT5QSVhCVUZfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgbG9hZGVycy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wa2djb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGtnY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgYSBzdGFuZGFyZCB3YXkgdG8gZ2V0CisgICAgICAgIGhlYWRlciBhbmQgbGlicmFyeSBpbmZvcm1hdGlvbi4KKyAgICAgICAgVGhpcyBjbGFzcyBhaW1zIHRvIHNtb290aCBpbnRlZ3JhdGlvbiBvZgorICAgICAgICA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGludG8gbGlicmFyaWVzIHRoYXQgdXNlIGl0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgc3RhZ2luZywgQml0QmFrZSBpbnN0YWxscyA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGRhdGEgaW50byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnN5c3Jvb3RzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgQnkgbWFraW5nIHVzZSBvZiBzeXNyb290IGZ1bmN0aW9uYWxpdHkgd2l0aGluIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4sCisgICAgICAgIHRoaXMgY2xhc3Mgbm8gbG9uZ2VyIGhhcyB0byBtYW5pcHVsYXRlIHRoZSBmaWxlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICBTREstb25seSByZWNpcGVzLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYWR2YW50YWdlcyBnYWluZWQgd2hlbiBidWlsZGluZyBhIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgIHRvb2xjaGFpbiB1c2luZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3Nkayc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+T3B0aW9uYWxseSBCdWlsZGluZyBhIFRvb2xjaGFpbiBJbnN0YWxsZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfKi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrXyo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgU0RLIGNyZWF0aW9uCisgICAgICAgIGFuZCBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgYmFzZSBjbGFzcyBzdXBwb3J0aW5nIFNESyBjcmVhdGlvbiB1bmRlciBhbGwgcGFja2FnZQorICAgICAgICAgICAgICAgIG1hbmFnZXJzIChpLmUuIERFQiwgUlBNLCBhbmQgb3BrZykuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfZGViPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBTdXBwb3J0cyBjcmVhdGlvbiBvZiB0aGUgU0RLIGdpdmVuIHRoZSBEZWJpYW4gcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX3JwbTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgY3JlYXRpb24gb2YgdGhlIFNESyBnaXZlbiB0aGUgUlBNIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19pcGs8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGNyZWF0aW9uIG9mIHRoZSBTREsgZ2l2ZW4gdGhlIG9wa2cgKElQSyBmb3JtYXQpCisgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+IGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrXyo8L2ZpbGVuYW1lPiAoaS5lLgorICAgICAgICA8ZmlsZW5hbWU+ZGViPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5ycG08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgIDxmaWxlbmFtZT5pcGs8L2ZpbGVuYW1lPikgYmFzZWQgb24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1BLR1RZUEUnPjxmaWxlbmFtZT5JTUFHRV9QS0dUWVBFPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYmFzZSBjbGFzcyBlbnN1cmVzIGFsbCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICBlc3RhYmxpc2hlZCBhbmQgdGhlbiBwb3B1bGF0ZXMgdGhlIFNESy4KKyAgICAgICAgQWZ0ZXIgcG9wdWxhdGluZyB0aGUgU0RLLCB0aGUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4KKyAgICAgICAgY2xhc3MgY29uc3RydWN0cyB0d28gc3lzcm9vdHM6CisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNES19BUkNIJz48ZmlsZW5hbWU+U0RLX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS1uYXRpdmVzZGs8L2ZpbGVuYW1lPiwKKyAgICAgICAgd2hpY2ggY29udGFpbnMgdGhlIGNyb3NzLWNvbXBpbGVyIGFuZCBhc3NvY2lhdGVkIHRvb2xpbmcsIGFuZCB0aGUKKyAgICAgICAgdGFyZ2V0LCB3aGljaCBjb250YWlucyBhIHRhcmdldCByb290IGZpbGVzeXN0ZW0gdGhhdCBpcyBjb25maWd1cmVkIGZvcgorICAgICAgICB0aGUgU0RLIHVzYWdlLgorICAgICAgICBUaGVzZSB0d28gaW1hZ2VzIHJlc2lkZSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX09VVFBVVCc+PGZpbGVuYW1lPlNES19PVVRQVVQ8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtTREtfT1VUUFVUfS8ke1NES19BUkNIfTxyZXBsYWNlYWJsZT4tbmF0aXZlc2RrLXBrZ3M8L3JlcGxhY2VhYmxlPgorICAgICAke1NES19PVVRQVVR9LyR7U0RLVEFSR0VUU1lTUk9PVH0vPHJlcGxhY2VhYmxlPnRhcmdldC1wa2dzPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGaW5hbGx5LCB0aGUgYmFzZSBwb3B1bGF0ZSBTREsgY2xhc3MgY3JlYXRlcyB0aGUgdG9vbGNoYWluCisgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgdGhlIHRhcmJhbGwgb2YgdGhlIFNESywgYW5kIHRoZSBpbnN0YWxsZXIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSByZXNwZWN0aXZlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfZGViPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfcnBtPC9maWxlbmFtZT4sIGFuZAorICAgICAgICA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2lwazwvZmlsZW5hbWU+IGNsYXNzZXMgZWFjaCBzdXBwb3J0IHRoZQorICAgICAgICBzcGVjaWZpYyB0eXBlIG9mIFNESy4KKyAgICAgICAgVGhlc2UgY2xhc3NlcyBhcmUgaW5oZXJpdGVkIGJ5IGFuZCB1c2VkIHdpdGggdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluCisgICAgICAgIGdlbmVyYXRpb24sIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXByZXhwb3J0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnByZXhwb3J0LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wcmV4cG9ydDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIGV4cG9ydGluZworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiB2YWx1ZXMuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICAgICAgICAgIFJhdGhlciwgaXQgaXMgZW5hYmxlZCB3aGVuIHVzaW5nCisgICAgICAgICAgICAiPGZpbGVuYW1lPmJpdGJha2UtcHJzZXJ2LXRvb2wgZXhwb3J0PC9maWxlbmFtZT4iLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHJpbXBvcnQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHJpbXBvcnQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnByaW1wb3J0PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAgaW1wb3J0aW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IHZhbHVlcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5LgorICAgICAgICAgICAgUmF0aGVyLCBpdCBpcyBlbmFibGVkIHdoZW4gdXNpbmcKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+Yml0YmFrZS1wcnNlcnYtdG9vbCBpbXBvcnQ8L2ZpbGVuYW1lPiIuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wcnNlcnYnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHJzZXJ2LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wcnNlcnY8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICB1c2luZyBhCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPlBSIHNlcnZpY2U8L3VsaW5rPgorICAgICAgICBpbiBvcmRlciB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSB0aGUgaW5jcmVtZW50aW5nIG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSBmb3IKKyAgICAgICAgZWFjaCByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICAgICAgSG93ZXZlciwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2lsbCBub3QgZW5hYmxlIHRoZQorICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgY2xhc3MgdW5sZXNzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUlNFUlZfSE9TVCc+PGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGhhcyBiZWVuIHNldC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wdGVzdCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wdGVzdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHRlc3Q8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBwYWNrYWdpbmcgYW5kIGluc3RhbGxpbmcgcnVudGltZSB0ZXN0cyBmb3IgcmVjaXBlcyB0aGF0IGJ1aWxkIHNvZnR3YXJlCisgICAgICAgIHRoYXQgcHJvdmlkZXMgdGhlc2UgdGVzdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgaW5oZXJpdGVkIGJ5IGluZGl2aWR1YWwgcmVjaXBlcy4KKyAgICAgICAgSG93ZXZlciwgdGhlIGNsYXNzJyBmdW5jdGlvbmFsaXR5IGlzIGxhcmdlbHkgZGlzYWJsZWQgdW5sZXNzICJwdGVzdCIKKyAgICAgICAgYXBwZWFycyBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlRlc3RpbmcgUGFja2FnZXMgV2l0aCBwdGVzdDwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICBvbiBwdGVzdC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wdGVzdC1nbm9tZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wdGVzdC1nbm9tZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEVuYWJsZXMgcGFja2FnZSB0ZXN0cyAocHRlc3RzKSBzcGVjaWZpY2FsbHkgZm9yIEdOT01FIHBhY2thZ2VzLAorICAgICAgICB3aGljaCBoYXZlIHRlc3RzIGludGVuZGVkIHRvIGJlIGV4ZWN1dGVkIHdpdGgKKyAgICAgICAgPGZpbGVuYW1lPmdub21lLWRlc2t0b3AtdGVzdGluZzwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQgcnVubmluZyBwdGVzdHMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+VGVzdGluZyBQYWNrYWdlcyBXaXRoIHB0ZXN0PC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXB5dGhvbi1kaXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHl0aG9uLWRpci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHl0aG9uLWRpcjwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHRoZSBiYXNlIHZlcnNpb24sCisgICAgICAgIGxvY2F0aW9uLCBhbmQgc2l0ZSBwYWNrYWdlIGxvY2F0aW9uIGZvciBQeXRob24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHl0aG9ubmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnB5dGhvbm5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gaW5oZXJpdGVkIGJ5IGEgcmVjaXBlLCB0aGUgPGZpbGVuYW1lPnB5dGhvbm5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHN1cHBvcnRzIHVzaW5nIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiBQeXRob24gYnVpbHQgYnkgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICByYXRoZXIgdGhhbiB1c2luZyB0aGUgdmVyc2lvbiBwcm92aWRlZCBieSB0aGUgYnVpbGQgaG9zdC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1xZW11Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnFlbXUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnFlbXU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzCisgICAgICAgIHRoYXQgZWl0aGVyIG5lZWQgUUVNVSBvciB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIFFFTVUuCisgICAgICAgIFR5cGljYWxseSwgdGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJ1biBwcm9ncmFtcyBmb3IgYSB0YXJnZXQgc3lzdGVtIG9uCisgICAgICAgIHRoZSBidWlsZCBob3N0IHVzaW5nIFFFTVUncyBhcHBsaWNhdGlvbiBlbXVsYXRpb24gbW9kZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1xbWFrZSonPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cW1ha2UqLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5xbWFrZSo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgcmVjaXBlcyB0aGF0CisgICAgICAgIG5lZWQgdG8gYnVpbGQgc29mdHdhcmUgdGhhdCB1c2VzIFF0J3MgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4KKyAgICAgICAgYnVpbGQgc3lzdGVtIGFuZCBhcmUgY29tcHJpc2VkIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBiYXNlIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCB2ZXJzaW9ucyBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xbWFrZTwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cW1ha2UyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBFeHRlbmRzIGJhc2UgZnVuY3Rpb25hbGl0eSBmb3IgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4gMi54IGFzCisgICAgICAgICAgICAgICAgdXNlZCBieSBRdCA0LnguPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgbmVlZCB0byBzZXQgYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIHBhc3MgYW55IG9wdGlvbnMgdG8KKyAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4sIHlvdSBjYW4gYWRkIHRoZXNlIHRvIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BSRSc+PGZpbGVuYW1lPkVYVFJBX1FNQUtFVkFSU19QUkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgb3IKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX1FNQUtFVkFSU19QT1NUJz48ZmlsZW5hbWU+RVhUUkFfUU1BS0VWQVJTX1BPU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYmVmb3JlIG9yCisgICAgICAgIGFmdGVyIHRoZSA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLAorICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIGFsbCA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGVzIGFyZSBidWlsdC4KKyAgICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSB5b3VyIG93biBzdWJzZXQgb2YgPGZpbGVuYW1lPi5wcm88L2ZpbGVuYW1lPgorICAgICAgICBmaWxlcyB0byBiZSBidWlsdCwgc3BlY2lmeSB0aGVtIGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUU1BS0VfUFJPRklMRVMnPjxmaWxlbmFtZT5RTUFLRV9QUk9GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1xdDQqJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnF0NCouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnF0NCo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgcmVjaXBlcyB0aGF0IG5lZWQgdG8KKyAgICAgICAgYnVpbGQgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBRdCBkZXZlbG9wbWVudCBmcmFtZXdvcmsgdmVyc2lvbiA0LngKKyAgICAgICAgYW5kIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnF0NGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGJ1aWxkaW5nIGFnYWluc3QgUXQvRW1iZWRkZWQsIHdoaWNoIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgZm9yIGdyYXBoaWNhbCBvdXRwdXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5xdDR4MTE8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGJ1aWxkaW5nIGFnYWluc3QgUXQvWDExLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNsYXNzZXMgaW5oZXJpdCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2UyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXJlbG9jYXRhYmxlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJlbG9jYXRhYmxlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5yZWxvY2F0YWJsZTwvZmlsZW5hbWU+IGNsYXNzIGVuYWJsZXMgcmVsb2NhdGlvbiBvZgorICAgICAgICBiaW5hcmllcyB3aGVuIHRoZXkgYXJlIGluc3RhbGxlZCBpbnRvIHRoZSBzeXNyb290LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIG1ha2VzIHVzZSBvZiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY2hycGF0aCc+PGZpbGVuYW1lPmNocnBhdGg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYW5kIGlzIHVzZWQgYnkgYm90aCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY3Jvc3MnPjxmaWxlbmFtZT5jcm9zczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbmF0aXZlJz48ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcmVwb3J0LWVycm9yJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJlcG9ydC1lcnJvci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cmVwb3J0LWVycm9yPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgZW5hYmxpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLXRoZS1lcnJvci1yZXBvcnRpbmctdG9vbCc+ZXJyb3IgcmVwb3J0aW5nIHRvb2w8L3VsaW5rPiwKKyAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBzdWJtaXQgYnVpbGQgZXJyb3IgaW5mb3JtYXRpb24gdG8gYSBjZW50cmFsCisgICAgICAgIGRhdGFiYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgY29sbGVjdHMgZGVidWcgaW5mb3JtYXRpb24gZm9yIHJlY2lwZSwgcmVjaXBlIHZlcnNpb24sIHRhc2ssCisgICAgICAgIG1hY2hpbmUsIGRpc3RybywgYnVpbGQgc3lzdGVtLCB0YXJnZXQgc3lzdGVtLCBob3N0IGRpc3RybywgYnJhbmNoLAorICAgICAgICBjb21taXQsIGFuZCBsb2cuCisgICAgICAgIEZyb20gdGhlIGluZm9ybWF0aW9uLCByZXBvcnQgZmlsZXMgdXNpbmcgYSBKU09OIGZvcm1hdCBhcmUgY3JlYXRlZCBhbmQKKyAgICAgICAgc3RvcmVkIGluCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxPR19ESVInPjxmaWxlbmFtZT5MT0dfRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vZXJyb3ItcmVwb3J0PC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcm0td29yayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ybV93b3JrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgZGVsZXRpb24gb2YgdGVtcG9yYXJ5CisgICAgICAgIHdvcmtzcGFjZSwgd2hpY2ggY2FuIGVhc2UgeW91ciBoYXJkIGRyaXZlIGRlbWFuZHMgZHVyaW5nIGJ1aWxkcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHVzZSBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiBkaXNrCisgICAgICAgIHNwYWNlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgQSBwb3J0aW9uIG9mIHRoaXMgc3BhY2UgaXMgdGhlIHdvcmsgZmlsZXMgdW5kZXIgdGhlCisgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vd29yazwvZmlsZW5hbWU+IGRpcmVjdG9yeSBmb3IgZWFjaCByZWNpcGUuCisgICAgICAgIE9uY2UgdGhlIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgdGhlIHBhY2thZ2VzIGZvciBhIHJlY2lwZSwgdGhlIHdvcmsKKyAgICAgICAgZmlsZXMgZm9yIHRoYXQgcmVjaXBlIGFyZSBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICBIb3dldmVyLCBieSBkZWZhdWx0LCB0aGUgYnVpbGQgc3lzdGVtIHByZXNlcnZlcyB0aGVzZSBmaWxlcworICAgICAgICBmb3IgaW5zcGVjdGlvbiBhbmQgcG9zc2libGUgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICAgICBJZiB5b3Ugd291bGQgcmF0aGVyIGhhdmUgdGhlc2UgZmlsZXMgZGVsZXRlZCB0byBzYXZlIGRpc2sgc3BhY2UKKyAgICAgICAgYXMgdGhlIGJ1aWxkIHByb2dyZXNzZXMsIHlvdSBjYW4gZW5hYmxlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4KKyAgICAgICAgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgSU5IRVJJVCArPSAicm1fd29yayIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBJZiB5b3UgYXJlIG1vZGlmeWluZyBhbmQgYnVpbGRpbmcgc291cmNlIGNvZGUgb3V0IG9mIHRoZSB3b3JrIGRpcmVjdG9yeQorICAgICAgICBmb3IgYSByZWNpcGUsIGVuYWJsaW5nIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4gd2lsbCBwb3RlbnRpYWxseQorICAgICAgICByZXN1bHQgaW4geW91ciBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgYmVpbmcgbG9zdC4KKyAgICAgICAgVG8gZXhjbHVkZSBzb21lIHJlY2lwZXMgZnJvbSBoYXZpbmcgdGhlaXIgd29yayBkaXJlY3RvcmllcyBkZWxldGVkIGJ5CisgICAgICAgIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4sIHlvdSBjYW4gYWRkIHRoZSBuYW1lcyBvZiB0aGUgcmVjaXBlIG9yCisgICAgICAgIHJlY2lwZXMgeW91IGFyZSB3b3JraW5nIG9uIHRvIHRoZSA8ZmlsZW5hbWU+Uk1fV09SS19FWENMVURFPC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGUsIHdoaWNoIGNhbiBhbHNvIGJlIHNldCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZS4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgUk1fV09SS19FWENMVURFICs9ICJidXN5Ym94IGdsaWJjIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcm9vdGZzKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5yb290ZnMqLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5yb290ZnMqPC9maWxlbmFtZT4gY2xhc3NlcyBzdXBwb3J0IGNyZWF0aW5nCisgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gZm9yIGFuIGltYWdlIGFuZCBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJvb3Rmc19kZWI8L2ZpbGVuYW1lPiBjbGFzcywgd2hpY2ggc3VwcG9ydHMKKyAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiByb290IGZpbGVzeXN0ZW1zIGZvciBpbWFnZXMgYnVpbHQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+IHBhY2thZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cm9vdGZzX3JwbTwvZmlsZW5hbWU+IGNsYXNzLCB3aGljaCBzdXBwb3J0cworICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHJvb3QgZmlsZXN5c3RlbXMgZm9yIGltYWdlcyBidWlsdCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucnBtPC9maWxlbmFtZT4gcGFja2FnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5yb290ZnNfaXBrPC9maWxlbmFtZT4gY2xhc3MsIHdoaWNoIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgY3JlYXRpb24gb2Ygcm9vdCBmaWxlc3lzdGVtcyBmb3IgaW1hZ2VzIGJ1aWx0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBmcm9tIHBhY2thZ2VzIHVzaW5nIG9uZSBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnJvb3RmcyouYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzIGFzIGRldGVybWluZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgcm9vdCBmaWxlc3lzdGVtIGltYWdlcyBhcmUgY3JlYXRlZCwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2UtZ2VuZXJhdGlvbi1kZXYtZW52aXJvbm1lbnQnPkltYWdlIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNhbml0eSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zYW5pdHkuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNhbml0eTwvZmlsZW5hbWU+IGNsYXNzIGNoZWNrcyB0byBzZWUgaWYgcHJlcmVxdWlzaXRlCisgICAgICAgIHNvZnR3YXJlIGlzIHByZXNlbnQgb24gdGhlIGhvc3Qgc3lzdGVtIHNvIHRoYXQgdXNlcnMgY2FuIGJlIG5vdGlmaWVkCisgICAgICAgIG9mIHBvdGVudGlhbCBwcm9ibGVtcyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGVpciBidWlsZC4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gcGVyZm9ybXMgYmFzaWMgdXNlciBjb25maWd1cmF0aW9uIGNoZWNrcyBmcm9tCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSB0bworICAgICAgICBwcmV2ZW50IGNvbW1vbiBtaXN0YWtlcyB0aGF0IGNhdXNlIGJ1aWxkIGZhaWx1cmVzLgorICAgICAgICBEaXN0cmlidXRpb24gcG9saWN5IHVzdWFsbHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zY29ucyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zY29ucy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NvbnM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyByZWNpcGVzIHRoYXQgbmVlZCB0bworICAgICAgICBidWlsZCBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIFNDb25zIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRVNDT05TJz48ZmlsZW5hbWU+RVhUUkFfT0VTQ09OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MKKyAgICAgICAgU0NvbnMgY29tbWFuZCBsaW5lLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNkbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zZGwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNkbDwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGJ1aWxkCisgICAgICAgIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIChTREwpIGxpYnJhcnkuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zZXR1cHRvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgUHl0aG9uCisgICAgICAgIHZlcnNpb24gMi54IGV4dGVuc2lvbnMgdGhhdCB1c2UgYnVpbGQgc3lzdGVtcyBiYXNlZCBvbgorICAgICAgICA8ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+LgorICAgICAgICBJZiB5b3VyIHJlY2lwZSB1c2VzIHRoZXNlIGJ1aWxkIHN5c3RlbXMsIHRoZSByZWNpcGUgbmVlZHMgdG8KKyAgICAgICAgaW5oZXJpdCB0aGUgPGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzMyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zZXR1cHRvb2xzMy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBQeXRob24KKyAgICAgICAgdmVyc2lvbiAzLnggZXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgIDxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+LgorICAgICAgICBJZiB5b3VyIHJlY2lwZSB1c2VzIHRoZXNlIGJ1aWxkIHN5c3RlbXMsIHRoZSByZWNpcGUgbmVlZHMgdG8KKyAgICAgICAgaW5oZXJpdCB0aGUgPGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2lwJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNpcC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2lwPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IGJ1aWxkIG9yIHBhY2thZ2UgU0lQLWJhc2VkIFB5dGhvbiBiaW5kaW5ncy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zaXRlY29uZmlnJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNpdGVjb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNpdGVjb25maWc8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciBoYW5kbGluZyBzaXRlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIFRoZSBjbGFzcyBpcyB1c2VkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgdG8gYWNjZWxlcmF0ZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNpdGVpbmZvJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNpdGVpbmZvLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zaXRlaW5mbzwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgIHRoZSB0YXJnZXRzIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGJ5IG90aGVyIGNsYXNzZXMgb3IgcmVjaXBlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgQXV0b3Rvb2xzLCB3aGljaCBjYW4gcmVxdWlyZSB0ZXN0cyB0aGF0IG11c3QKKyAgICAgICAgZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICBTaW5jZSB0aGlzIGlzIG5vdCBwb3NzaWJsZSBpbiBnZW5lcmFsIHdoZW4gY3Jvc3MgY29tcGlsaW5nLCBzaXRlCisgICAgICAgIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSBjYWNoZWQgdGVzdCByZXN1bHRzIHNvIHRoZXNlIHRlc3RzIGNhbgorICAgICAgICBiZSBza2lwcGVkIG92ZXIgYnV0IHN0aWxsIG1ha2UgdGhlIGNvcnJlY3QgdmFsdWVzIGF2YWlsYWJsZS4KKyAgICAgICAgVGhlCisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWV0YS1zaXRlJz5tZXRhL3NpdGUgZGlyZWN0b3J5PC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIGNvbnRhaW5zIHRlc3QgcmVzdWx0cyBzb3J0ZWQgaW50byBkaWZmZXJlbnQgY2F0ZWdvcmllcyBzdWNoIGFzCisgICAgICAgIGFyY2hpdGVjdHVyZSwgZW5kaWFubmVzcywgYW5kIHRoZSA8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+IHVzZWQuCisgICAgICAgIFNpdGUgaW5mb3JtYXRpb24gcHJvdmlkZXMgYSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgZGF0YSByZWxldmFudCB0bworICAgICAgICB0aGUgY3VycmVudCBidWlsZCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1DT05GSUdfU0lURSc+Q09ORklHX1NJVEU8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgdGhhdCBBdXRvdG9vbHMgYXV0b21hdGljYWxseSBwaWNrcyB1cC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gcHJvdmlkZXMgdmFyaWFibGVzIGxpa2UKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TSVRFSU5GT19FTkRJQU5ORVNTJz5TSVRFSU5GT19FTkRJQU5ORVNTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIGFuZCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNJVEVJTkZPX0JJVFMnPlNJVEVJTkZPX0JJVFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBlbHNld2hlcmUgaW4gdGhlIG1ldGFkYXRhLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCZWNhdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiBjbGFzcworICAgICAgICBpbmNsdWRlcyB0aGUgPGZpbGVuYW1lPnNpdGVpbmZvPC9maWxlbmFtZT4gY2xhc3MsIGl0IGlzIGFsd2F5cyBhY3RpdmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc3BkeCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zcGR4LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zcGR4PC9maWxlbmFtZT4gY2xhc3MgaW50ZWdyYXRlcyByZWFsLXRpbWUgbGljZW5zZQorICAgICAgICBzY2FubmluZywgZ2VuZXJhdGlvbiBvZiBTUERYIHN0YW5kYXJkIG91dHB1dCwgYW5kIHZlcmlmaWNhdGlvbgorICAgICAgICBvZiBsaWNlbnNlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyBjdXJyZW50bHkgYXQgdGhlIHByb3RvdHlwZSBzdGFnZSBpbiB0aGUgMS42CisgICAgICAgICAgICByZWxlYXNlLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc3N0YXRlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNzdGF0ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3N0YXRlPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgU2hhcmVkCisgICAgICAgIFN0YXRlIChzc3RhdGUpLgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY2xhc3MgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVF9ESVNUUk8nPjxmaWxlbmFtZT5JTkhFUklUX0RJU1RSTzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSdzIGRlZmF1bHQgdmFsdWUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNzdGF0ZSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5TaGFyZWQgU3RhdGUgQ2FjaGU8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXN0YWdpbmcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c3RhZ2luZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3RhZ2luZzwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHN0YWdpbmcKKyAgICAgICAgZmlsZXMgaW50byB0aGUgc3lzcm9vdCBkdXJpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLgorICAgICAgICBUaGUgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zeXNsaW51eC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzeXNsaW51eC1zcGVjaWZpYworICAgICAgICBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNsYXNzIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkQnPjxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcworICAgICAgICAgICAgICAgIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkuCisgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBvcHRpb25hbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUk9PVEZTJz48ZmlsZW5hbWU+Uk9PVEZTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgb3B0aW9uYWwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUFVVE9fU1lTTElOVVhNRU5VJz48ZmlsZW5hbWU+QVVUT19TWVNMSU5VWE1FTlU8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgRW5hYmxlcyBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudSB3aGVuIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+PGZpbGVuYW1lPkxBQkVMUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBMaXN0cyB0YXJnZXRzIGZvciBhdXRvbWF0aWMgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQVBQRU5EJz48ZmlsZW5hbWU+QVBQRU5EPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIGFwcGVuZCBzdHJpbmcgb3ZlcnJpZGVzIGZvciBlYWNoIGxhYmVsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNMSU5VWF9PUFRTJz48ZmlsZW5hbWU+U1lTTElOVVhfT1BUUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLgorICAgICAgICAgICAgICAgIFNlbWljb2xvbiBjaGFyYWN0ZXJzIHNlcGFyYXRlIG11bHRpcGxlIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX1NQTEFTSCc+PGZpbGVuYW1lPlNZU0xJTlVYX1NQTEFTSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBMaXN0cyBhIGJhY2tncm91bmQgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBib290IG1lbnUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRSc+PGZpbGVuYW1lPlNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBTZXQgdG8gImNvbnNvbGU9dHR5WCIgdG8gY2hhbmdlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU1lTTElOVVhfU0VSSUFMJz48ZmlsZW5hbWU+U1lTTElOVVhfU0VSSUFMPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIFNldHMgYW4gYWx0ZXJuYXRlIHNlcmlhbCBwb3J0LgorICAgICAgICAgICAgICAgIE9yLCB0dXJucyBvZmYgc2VyaWFsIHdoZW4gdGhlIHZhcmlhYmxlIGlzIHNldCB3aXRoIGFuCisgICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNMSU5VWF9TRVJJQUxfVFRZJz48ZmlsZW5hbWU+U1lTTElOVVhfU0VSSUFMX1RUWTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBTZXRzIGFuIGFsdGVybmF0ZSAiY29uc29sZT10dHkuLi4iIGtlcm5lbCBib290IGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnN5c3RlbWQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciByZWNpcGVzCisgICAgICAgIHRoYXQgaW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIGNsYXNzIGlzIGRpc2FibGVkIHVubGVzcyB5b3UgaGF2ZSAic3lzdGVtZCIKKyAgICAgICAgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVW5kZXIgdGhpcyBjbGFzcywgdGhlIHJlY2lwZSBvciBNYWtlZmlsZSAoaS5lLiB3aGF0ZXZlciB0aGUgcmVjaXBlIGlzCisgICAgICAgIGNhbGxpbmcgZHVyaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzaykgaW5zdGFsbHMgdW5pdCBmaWxlcyBpbnRvCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtPC9maWxlbmFtZT4uCisgICAgICAgIElmIHRoZSB1bml0IGZpbGVzIGJlaW5nIGluc3RhbGxlZCBnbyBpbnRvIHBhY2thZ2VzIG90aGVyIHRoYW4gdGhlCisgICAgICAgIG1haW4gcGFja2FnZSwgeW91IG5lZWQgdG8gc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNURU1EX1BBQ0tBR0VTJz48ZmlsZW5hbWU+U1lTVEVNRF9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpbiB5b3VyIHJlY2lwZSB0byBpZGVudGlmeSB0aGUgcGFja2FnZXMgaW4gd2hpY2ggdGhlIGZpbGVzIHdpbGwgYmUKKyAgICAgICAgaW5zdGFsbGVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3Ugc2hvdWxkIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTVEVNRF9TRVJWSUNFJz48ZmlsZW5hbWU+U1lTVEVNRF9TRVJWSUNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRvIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGZpbGUuCisgICAgICAgIFlvdSBzaG91bGQgYWxzbyB1c2UgYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUgdG8gaW5kaWNhdGUgdGhlIHBhY2thZ2UKKyAgICAgICAgdG8gd2hpY2ggdGhlIHZhbHVlIGFwcGxpZXMuCisgICAgICAgIElmIHRoZSB2YWx1ZSBhcHBsaWVzIHRvIHRoZSByZWNpcGUncyBtYWluIHBhY2thZ2UsIHVzZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIGNvbm5tYW4gcmVjaXBlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjb25ubWFuLnNlcnZpY2UiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgU2VydmljZXMgYXJlIHNldCB1cCB0byBzdGFydCBvbiBib290IGF1dG9tYXRpY2FsbHkgdW5sZXNzCisgICAgICAgIHlvdSBoYXZlIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTVEVNRF9BVVRPX0VOQUJMRSc+PGZpbGVuYW1lPlNZU1RFTURfQVVUT19FTkFCTEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gImRpc2FibGUiLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzZWxlY3RpbmctYW4taW5pdGlhbGl6YXRpb24tbWFuYWdlcic+U2VsZWN0aW5nIGFuIEluaXRpYWxpemF0aW9uIE1hbmFnZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdGVybWluYWwnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGVybWluYWwuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnRlcm1pbmFsPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc3RhcnRpbmcKKyAgICAgICAgYSB0ZXJtaW5hbCBzZXNzaW9uLgorICAgICAgICBUaGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9FX1RFUk1JTkFMJz48ZmlsZW5hbWU+T0VfVEVSTUlOQUw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgY29udHJvbHMgd2hpY2ggdGVybWluYWwgZW11bGF0b3IgaXMgdXNlZCBmb3IgdGhlIHNlc3Npb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE90aGVyIGNsYXNzZXMgdXNlIHRoZSA8ZmlsZW5hbWU+dGVybWluYWw8L2ZpbGVuYW1lPiBjbGFzcyBhbnl3aGVyZSBhCisgICAgICAgIHNlcGFyYXRlIHRlcm1pbmFsIHNlc3Npb24gbmVlZHMgdG8gYmUgc3RhcnRlZC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYXRjaCc+PGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFzc3VtaW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVRDSFJFU09MVkUnPjxmaWxlbmFtZT5QQVRDSFJFU09MVkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaXMgc2V0IHRvICJ1c2VyIiwgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWNtbDEnPjxmaWxlbmFtZT5jbWwxPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLCBhbmQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRldnNoZWxsJz48ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYWxsIHVzZSB0aGUgPGZpbGVuYW1lPnRlcm1pbmFsPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdGVzdGltYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRlc3RpbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGVzdGltYWdlPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcnVubmluZyBhdXRvbWF0ZWQKKyAgICAgICAgdGVzdHMgYWdhaW5zdCBpbWFnZXMgdXNpbmcgUUVNVSBhbmQgb24gYWN0dWFsIGhhcmR3YXJlLgorICAgICAgICBUaGUgY2xhc3MgaGFuZGxlcyBsb2FkaW5nIHRoZSB0ZXN0cyBhbmQgc3RhcnRpbmcgdGhlIGltYWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyB1c2UgdGhlIGNsYXNzLCB5b3UgbmVlZCB0byBwZXJmb3JtIHN0ZXBzIHRvIHNldCB1cCB0aGUKKyAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgIFRoZSB0ZXN0cyBhcmUgY29tbWFuZHMgdGhhdCBydW4gb24gdGhlIHRhcmdldCBzeXN0ZW0gb3ZlcgorICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4uCisgICAgICAgIHRoZXkgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBtYWtlIHVzZSBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnVuaXR0ZXN0PC9maWxlbmFtZT4gbW9kdWxlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGVuYWJsZSwgcnVuLCBhbmQgY3JlYXRlIG5ldyB0ZXN0cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10ZXhpbmZvJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRleGluZm8uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIHNob3VsZCBiZSBpbmhlcml0ZWQgYnkgcmVjaXBlcyB3aG9zZSB1cHN0cmVhbSBwYWNrYWdlcworICAgICAgICBpbnZva2UgdGhlIDxmaWxlbmFtZT50ZXhpbmZvPC9maWxlbmFtZT4gdXRpbGl0aWVzIGF0IGJ1aWxkLXRpbWUuCisgICAgICAgIE5hdGl2ZSBhbmQgY3Jvc3MgcmVjaXBlcyBhcmUgbWFkZSB0byB1c2UgdGhlIGR1bW15IHNjcmlwdHMgcHJvdmlkZWQKKyAgICAgICAgYnkgPGZpbGVuYW1lPnRleGluZm8tZHVtbXktbmF0aXZlPC9maWxlbmFtZT4sIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4KKyAgICAgICAgVGFyZ2V0IGFyY2hpdGVjdHVyZSByZWNpcGVzIHVzZSB0aGUgZ2VudWluZQorICAgICAgICBUZXhpbmZvIHV0aWxpdGllcy4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhleSB1c2UgdGhlIFRleGluZm8gdXRpbGl0aWVzIG9uIHRoZSBob3N0IHN5c3RlbS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIFRleGluZm8gcmVjaXBlIHNoaXBwZWQgd2l0aCB0aGUgYnVpbGQKKyAgICAgICAgICAgIHN5c3RlbSwgeW91IGNhbiByZW1vdmUgInRleGluZm8tbmF0aXZlIiBmcm9tCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVNTVU1FX1BST1ZJREVEJz48ZmlsZW5hbWU+QVNTVU1FX1BST1ZJREVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgbWFrZWluZm8gZnJvbQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnPjxmaWxlbmFtZT5TQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdGluZGVyY2xpZW50Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRpbmRlcmNsaWVudC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGluZGVyY2xpZW50PC9maWxlbmFtZT4gY2xhc3Mgc3VibWl0cyBidWlsZCByZXN1bHRzIHRvCisgICAgICAgIGFuIGV4dGVybmFsIFRpbmRlcmJveCBpbnN0YW5jZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSB1bm1haW50YWluZWQuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10b2FzdGVyJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnRvYXN0ZXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnRvYXN0ZXI8L2ZpbGVuYW1lPiBjbGFzcyBjb2xsZWN0cyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBwYWNrYWdlcyBhbmQgaW1hZ2VzIGFuZCBzZW5kcyB0aGVtIGFzIGV2ZW50cyB0aGF0IHRoZSBCaXRCYWtlCisgICAgICAgIHVzZXIgaW50ZXJmYWNlIGNhbiByZWNlaXZlLgorICAgICAgICBUaGUgY2xhc3MgaXMgZW5hYmxlZCB3aGVuIHRoZSBUb2FzdGVyIHVzZXIgaW50ZXJmYWNlIGlzIHJ1bm5pbmcuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdG9vbGNoYWluLXNjcmlwdHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnRvb2xjaGFpbi1zY3JpcHRzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIHNjcmlwdHMKKyAgICAgICAgdXNlZCBmb3Igc2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQgZm9yIGluc3RhbGxlZCBTREtzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXR5cGVjaGVjayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT50eXBlY2hlY2suYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnR5cGVjaGVjazwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yCisgICAgICAgIHZhbGlkYXRpbmcgdGhlIHZhbHVlcyBvZiB2YXJpYWJsZXMgc2V0IGF0IHRoZSBjb25maWd1cmF0aW9uIGxldmVsCisgICAgICAgIGFnYWluc3QgdGhlaXIgZGVmaW5lZCB0eXBlcy4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWxsb3dzIHlvdSB0byBkZWZpbmUgdGhlIHR5cGUgb2YgYQorICAgICAgICB2YXJpYWJsZSB1c2luZyB0aGUgInR5cGUiIHZhcmZsYWcuCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9GRUFUVVJFU1t0eXBlXSA9ICJsaXN0IgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdWJvb3QtY29uZmlnJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVib290LWNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dWJvb3QtY29uZmlnPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgVS1Cb290IGNvbmZpZ3VyYXRpb24gZm9yIGEgbWFjaGluZS4KKyAgICAgICAgU3BlY2lmeSB0aGUgbWFjaGluZSBpbiB5b3VyIHJlY2lwZSBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVCT09UX0NPTkZJRyA/Pz0gJmx0O2RlZmF1bHQmZ3Q7CisgICAgIFVCT09UX0NPTkZJR1tmb29dID0gImNvbmZpZyxpbWFnZXMiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIG1hY2hpbmUgdXNpbmcgdGhpcyBtZXRob2Q6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfTUFDSElORSA9ICJjb25maWciCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfQ09ORklHJz48ZmlsZW5hbWU+VUJPT1RfQ09ORklHPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfTUFDSElORSc+PGZpbGVuYW1lPlVCT09UX01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVuaW5hdGl2ZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51bmluYXRpdmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBQcm92aWRlcyBhIG1lYW5zIG9mIHJldXNpbmcgPGZpbGVuYW1lPm5hdGl2ZS9jcm9zczwvZmlsZW5hbWU+IG92ZXIKKyAgICAgICAgbXVsdGlwbGUgZGlzdHJvcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBDdXJyZW50bHksIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgPGZpbGVuYW1lPnVuaW5hdGl2ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICBjbGFzcyBpcyBleHBlcmltZW50YWwuCisgICAgICAgIDwvbm90ZT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2lkPWU2NmM5NmFlOWM3YmEyMWViZDA0YTQ4MDczOTBmMDAzMTIzOGE4NWEnPmhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11cGRhdGUtYWx0ZXJuYXRpdmVzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBjbGFzcyBoZWxwcyB0aGUKKyAgICAgICAgYWx0ZXJuYXRpdmVzIHN5c3RlbSB3aGVuIG11bHRpcGxlIHNvdXJjZXMgcHJvdmlkZSB0aGUgc2FtZSBjb21tYW5kLgorICAgICAgICBUaGlzIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiBzZXZlcmFsIHByb2dyYW1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcgorICAgICAgICBzaW1pbGFyIGZ1bmN0aW9uIGFyZSBpbnN0YWxsZWQgd2l0aCB0aGUgc2FtZSBuYW1lLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5hcjwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgYXZhaWxhYmxlIGZyb20gdGhlCisgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+ZWxmdXRpbHM8L2ZpbGVuYW1lPiBwYWNrYWdlcy4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4gY2xhc3MgaGFuZGxlcworICAgICAgICByZW5hbWluZyB0aGUgYmluYXJpZXMgc28gdGhhdCBtdWx0aXBsZSBwYWNrYWdlcyBjYW4gYmUgaW5zdGFsbGVkCisgICAgICAgIHdpdGhvdXQgY29uZmxpY3RzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPmFyPC9maWxlbmFtZT4gY29tbWFuZCBzdGlsbCB3b3JrcyByZWdhcmRsZXNzIG9mIHdoaWNoCisgICAgICAgIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQgb3Igc3Vic2VxdWVudGx5IHJlbW92ZWQuCisgICAgICAgIFRoZSBjbGFzcyByZW5hbWVzIHRoZSBjb25mbGljdGluZyBiaW5hcnkgaW4gZWFjaCBwYWNrYWdlIGFuZCBzeW1saW5rcworICAgICAgICB0aGUgaGlnaGVzdCBwcmlvcml0eSBiaW5hcnkgZHVyaW5nIGluc3RhbGxhdGlvbiBvciByZW1vdmFsIG9mIHBhY2thZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyB1c2UgdGhpcyBjbGFzcywgeW91IG5lZWQgdG8gZGVmaW5lIGEgbnVtYmVyIG9mIHZhcmlhYmxlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQUxURVJOQVRJVkUnPjxmaWxlbmFtZT5BTFRFUk5BVElWRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRV9MSU5LX05BTUUnPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQUxURVJOQVRJVkVfVEFSR0VUJz48ZmlsZW5hbWU+QUxURVJOQVRJVkVfVEFSR0VUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUFMVEVSTkFUSVZFX1BSSU9SSVRZJz48ZmlsZW5hbWU+QUxURVJOQVRJVkVfUFJJT1JJVFk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBsaXN0IGFsdGVybmF0aXZlIGNvbW1hbmRzIG5lZWRlZCBieSBhIHBhY2thZ2UsCisgICAgICAgIHByb3ZpZGUgcGF0aG5hbWVzIGZvciBsaW5rcywgZGVmYXVsdCBsaW5rcyBmb3IgdGFyZ2V0cywgYW5kCisgICAgICAgIHNvIGZvcnRoLgorICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MsIHNlZSB0aGUgY29tbWVudHMgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMvdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzJz48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICBkaXJlY3RseSBpbiB5b3VyIHJlY2lwZXMuCisgICAgICAgIEhvd2V2ZXIsIHRoaXMgY2xhc3Mgc2ltcGxpZmllcyB0aGluZ3MgaW4gbW9zdCBjYXNlcy4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11cGRhdGUtcmMuZCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51cGRhdGUtcmMuZC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPiBjbGFzcyB1c2VzCisgICAgICAgIDxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+IHRvIHNhZmVseSBpbnN0YWxsIGFuCisgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdCBvbiBiZWhhbGYgb2YgdGhlIHBhY2thZ2UuCisgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRha2VzIGNhcmUgb2YgZGV0YWlscyBzdWNoIGFzIG1ha2luZworICAgICAgICBzdXJlIHRoZSBzY3JpcHQgaXMgc3RvcHBlZCBiZWZvcmUgYSBwYWNrYWdlIGlzIHJlbW92ZWQgYW5kIHN0YXJ0ZWQgd2hlbgorICAgICAgICB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRocmVlIHZhcmlhYmxlcyBjb250cm9sIHRoaXMgY2xhc3M6CisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU5JVFNDUklQVF9QQUNLQUdFUyc+SU5JVFNDUklQVF9QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUU0NSSVBUX05BTUUnPklOSVRTQ1JJUFRfTkFNRTwvbGluaz48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUU0NSSVBUX1BBUkFNUyc+SU5JVFNDUklQVF9QQVJBTVM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgIFNlZSB0aGUgdmFyaWFibGUgbGlua3MgZm9yIGRldGFpbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51c2VyYWRkLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlIGFkZGl0aW9uIG9mIHVzZXJzCisgICAgICAgIG9yIGdyb3VwcyBmb3IgdXNhZ2UgYnkgdGhlIHBhY2thZ2Ugb24gdGhlIHRhcmdldC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBzeXN0ZW0gc2VydmljZXMgdGhhdAorICAgICAgICBzaG91bGQgYmUgcnVuIHVuZGVyIHRoZWlyIG93biB1c2VyIG9yIGdyb3VwLCB5b3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvCisgICAgICAgIGVuYWJsZSBjcmVhdGlvbiBvZiB0aGUgdXNlciBvciBncm91cC4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUuYmI8L2ZpbGVuYW1lPgorICAgICAgICByZWNpcGUgaW4gdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICBwcm92aWRlcyBhIHNpbXBsZSBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGFkZCB0aHJlZQorICAgICAgICB1c2VycyBhbmQgZ3JvdXBzIHRvIHR3byBwYWNrYWdlcy4KKyAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+dXNlcmFkZC1leGFtcGxlLmJiPC9maWxlbmFtZT4gcmVjaXBlIGZvciBtb3JlCisgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX1BBQ0tBR0VTJz48ZmlsZW5hbWU+VVNFUkFERF9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfUEFSQU0nPjxmaWxlbmFtZT5VU0VSQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1JPVVBBRERfUEFSQU0nPjxmaWxlbmFtZT5HUk9VUEFERF9QQVJBTTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUE1FTVNfUEFSQU0nPjxmaWxlbmFtZT5HUk9VUE1FTVNfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQtc3RhdGljaWRzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51c2VyYWRkLXN0YXRpY2lkczwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHRoZSBhZGRpdGlvbgorICAgICAgICBvZiB1c2VycyBvciBncm91cHMgdGhhdCBoYXZlIHN0YXRpYyB1c2VyIGlkZW50aWZpY2F0aW9uCisgICAgICAgICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIGFuZCBncm91cCBpZGVudGlmaWNhdGlvbgorICAgICAgICAoPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+KSB2YWx1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZvciBhc3NpZ25pbmcKKyAgICAgICAgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzIHdoZW4KKyAgICAgICAgcGFja2FnZXMgYWRkIHVzZXJzIGFuZCBncm91cHMgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbCB0aW1lIGlzIHRvCisgICAgICAgIGFkZCB0aGVtIGR5bmFtaWNhbGx5LgorICAgICAgICBUaGlzIHdvcmtzIGZpbmUgZm9yIHByb2dyYW1zIHRoYXQgZG8gbm90IGNhcmUgd2hhdCB0aGUgdmFsdWVzIG9mIHRoZQorICAgICAgICByZXN1bHRpbmcgdXNlcnMgYW5kIGdyb3VwcyBiZWNvbWUuCisgICAgICAgIEluIHRoZXNlIGNhc2VzLCB0aGUgb3JkZXIgb2YgdGhlIGluc3RhbGxhdGlvbiBkZXRlcm1pbmVzIHRoZSBmaW5hbAorICAgICAgICA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgIEhvd2V2ZXIsIGlmIG5vbi1kZXRlcm1pbmlzdGljCisgICAgICAgIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcyBhcmUgYQorICAgICAgICBwcm9ibGVtLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0LCBkeW5hbWljIGFwcGxpY2F0aW9uIG9mIHRoZXNlCisgICAgICAgIHZhbHVlcyBieSBzZXR0aW5nIHN0YXRpYyB2YWx1ZXMuCisgICAgICAgIFdoZW4geW91IHNldCBzdGF0aWMgdmFsdWVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBsb29rcyBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+IGZvcgorICAgICAgICA8ZmlsZW5hbWU+ZmlsZXMvcGFzc3dkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5maWxlcy9ncm91cDwvZmlsZW5hbWU+CisgICAgICAgIGZpbGVzIGZvciB0aGUgdmFsdWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUbyB1c2Ugc3RhdGljIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+CisgICAgICAgIHZhbHVlcywgeW91IG5lZWQgdG8gc2V0IHNvbWUgdmFyaWFibGVzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfVUlEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfR0lEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfR0lEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX0VSUk9SX0RZTkFNSUMnPjxmaWxlbmFtZT5VU0VSQUREX0VSUk9SX0RZTkFNSUM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICBZb3UgZG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LgorICAgICAgICBZb3UgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjbGFzcyBieSBzZXR0aW5nIHRoZQorICAgICAgICA8ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICBJZiB5b3UgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGNsYXNzIGluIGEgY29uZmlndXJlZCBzeXN0ZW0sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgbWlnaHQgY29udGFpbiBpbmNvcnJlY3QgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICBEZWxldGluZyB0aGUgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICB3aWxsIGNvcnJlY3QgdGhpcyBjb25kaXRpb24uCisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXRpbGl0eS10YXNrcyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51dGlsaXR5LXRhc2tzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51dGlsaXR5LXRhc2tzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgdmFyaW91cyAidXRpbGl0eSIgdHlwZSB0YXNrcyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIGFsbCByZWNpcGVzLAorICAgICAgICBzdWNoIGFzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbic+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtbGlzdHRhc2tzJz48ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieQorICAgICAgICB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmFzZSc+PGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXRpbHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dXRpbHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnV0aWxzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc29tZSB1c2VmdWwgUHl0aG9uCisgICAgICAgIGZ1bmN0aW9ucyB0aGF0IGFyZSB0eXBpY2FsbHkgdXNlZCBpbiBpbmxpbmUgUHl0aG9uIGV4cHJlc3Npb25zCisgICAgICAgIChlLmcuIDxmaWxlbmFtZT4ke0AuLi59PC9maWxlbmFtZT4pLgorICAgICAgICBPbmUgZXhhbXBsZSB1c2UgaXMgZm9yIDxmaWxlbmFtZT5iYi51dGlscy5jb250YWlucygpPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy12YWxhJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnZhbGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnZhbGE8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyByZWNpcGVzIHRoYXQgbmVlZCB0bworICAgICAgICBidWlsZCBzb2Z0d2FyZSB3cml0dGVuIHVzaW5nIHRoZSBWYWxhIHByb2dyYW1taW5nIGxhbmd1YWdlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXdhZic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT53YWYuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPndhZjwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGJ1aWxkCisgICAgICAgIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgV2FmIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBwYXNzZWQgb24KKyAgICAgICAgdGhlIFdhZiBjb21tYW5kIGxpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8IS0tIFVuZG9jdW1lbnRlZCBjbGFzc2VzIGFyZToKKyAgICAgICAgaW1hZ2UtZW1wdHkuYmJjbGFzcyAocG9zc2libHkgYmVpbmcgZHJvcHBlZCkKKyAgICAgICAgbWlncmF0ZV9sb2NhbGNvdW50LmJiY2xhc3MgKHN0aWxsIG5lZWQgYSBkZXNjcmlwdGlvbikKKy0tPgorCisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1mZWF0dXJlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4ZTBhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1mZWF0dXJlcy54bWwKQEAgLTAsMCArMSw0NDMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtZmVhdHVyZXMnPgorICAgIDx0aXRsZT5GZWF0dXJlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGEgcmVmZXJlbmNlIG9mIHNoaXBwZWQgbWFjaGluZSBhbmQgZGlzdHJvIGZlYXR1cmVzCisgICAgICAgIHlvdSBjYW4gaW5jbHVkZSBhcyBwYXJ0IG9mIHlvdXIgaW1hZ2UsIGEgcmVmZXJlbmNlIG9uIGltYWdlIGZlYXR1cmVzIHlvdSBjYW4KKyAgICAgICAgc2VsZWN0LCBhbmQgYSByZWZlcmVuY2Ugb24gZmVhdHVyZSBiYWNrZmlsbGluZy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRmVhdHVyZXMgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3Igd29ya2luZyBvdXQgd2hpY2ggcGFja2FnZXMKKyAgICAgICAgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgaW1hZ2VzLgorICAgICAgICBEaXN0cmlidXRpb25zIGNhbiBzZWxlY3Qgd2hpY2ggZmVhdHVyZXMgdGhleSB3YW50IHRvIHN1cHBvcnQgdGhyb3VnaCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPkRJU1RST19GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgc2V0IG9yIGFwcGVuZGVkIHRvIGluIGEgZGlzdHJpYnV0aW9uJ3MgY29uZmlndXJhdGlvbiBmaWxlIHN1Y2ggYXMKKyAgICAgICAgPGZpbGVuYW1lPnBva3kuY29uZjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+cG9reS10aW55LmNvbmY8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPnBva3ktbHNiLmNvbmY8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGguCisgICAgICAgIE1hY2hpbmUgZmVhdHVyZXMgYXJlIHNldCBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz5NQUNISU5FX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBzZXQgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlIGFuZAorICAgICAgICBzcGVjaWZpZXMgdGhlIGhhcmR3YXJlIGZlYXR1cmVzIGZvciBhIGdpdmVuIG1hY2hpbmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZXNlIHR3byB2YXJpYWJsZXMgY29tYmluZSB0byB3b3JrIG91dCB3aGljaCBrZXJuZWwgbW9kdWxlcywKKyAgICAgICAgdXRpbGl0aWVzLCBhbmQgb3RoZXIgcGFja2FnZXMgdG8gaW5jbHVkZS4KKyAgICAgICAgQSBnaXZlbiBkaXN0cmlidXRpb24gY2FuIHN1cHBvcnQgYSBzZWxlY3RlZCBzdWJzZXQgb2YgZmVhdHVyZXMgc28gc29tZSBtYWNoaW5lIGZlYXR1cmVzIG1pZ2h0IG5vdAorICAgICAgICBiZSBpbmNsdWRlZCBpZiB0aGUgZGlzdHJpYnV0aW9uIGl0c2VsZiBkb2VzIG5vdCBzdXBwb3J0IHRoZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE9uZSBtZXRob2QgeW91IGNhbiB1c2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlY2lwZXMgYXJlIGNoZWNraW5nIHRvIHNlZSBpZiBhCisgICAgICAgIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBjb250YWluZWQgb3Igbm90IGlzIHRvIDxmaWxlbmFtZT5ncmVwPC9maWxlbmFtZT4gdGhyb3VnaAorICAgICAgICB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgZm9yIHRoZSBmZWF0dXJlLgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBkaXNjb3ZlcnMgdGhlIHJlY2lwZXMgd2hvc2UgYnVpbGQgaXMgcG90ZW50aWFsbHkKKyAgICAgICAgY2hhbmdlZCBiYXNlZCBvbiBhIGdpdmVuIGZlYXR1cmU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBwb2t5CisgICAgICQgZ2l0IGdyZXAgJ2NvbnRhaW5zLipNQUNISU5FX0ZFQVRVUkVTLio8cmVwbGFjZWFibGU+ZmVhdHVyZTwvcmVwbGFjZWFibGU+JworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1mZWF0dXJlcy1tYWNoaW5lJz4KKyAgICAgICAgPHRpdGxlPk1hY2hpbmUgRmVhdHVyZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGl0ZW1zIGJlbG93IGFyZSBmZWF0dXJlcyB5b3UgY2FuIHVzZSB3aXRoCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBGZWF0dXJlcyBkbyBub3QgaGF2ZSBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgdG8gcGFja2FnZXMsIGFuZCB0aGV5IGNhbgorICAgICAgICAgICAgZ28gYmV5b25kIHNpbXBseSBjb250cm9sbGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIGEgcGFja2FnZSBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgIFNvbWV0aW1lcyBhIGZlYXR1cmUgY2FuIGluZmx1ZW5jZSBob3cgY2VydGFpbiByZWNpcGVzIGFyZSBidWlsdC4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGZlYXR1cmUgbWlnaHQgZGV0ZXJtaW5lIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyZSBvcHRpb24KKyAgICAgICAgICAgIGlzIHNwZWNpZmllZCB3aXRoaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGZvciBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGZlYXR1cmUgbGlzdCBvbmx5IHJlcHJlc2VudHMgZmVhdHVyZXMgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IG1ldGFkYXRhOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFjcGk6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIEFDUEkgKHg4Ni94ODZfNjQgb25seSkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5hbHNhOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBBTFNBIGF1ZGlvIGRyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5hcG06PC9lbXBoYXNpcz4gSGFyZHdhcmUgdXNlcyBBUE0gKG9yIEFQTSBlbXVsYXRpb24pCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ymx1ZXRvb3RoOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBpbnRlZ3JhdGVkIEJUCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZWZpOjwvZW1waGFzaXM+IFN1cHBvcnQgZm9yIGJvb3RpbmcgdGhyb3VnaCBFRkkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5leHQyOjwvZW1waGFzaXM+IEhhcmR3YXJlIEhERCBvciBNaWNyb2RyaXZlCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aXJkYTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgSXJEQSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+a2V5Ym9hcmQ6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEga2V5Ym9hcmQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY2Jpb3M6PC9lbXBoYXNpcz4gU3VwcG9ydCBmb3IgYm9vdGluZyB0aHJvdWdoIEJJT1MKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY2k6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEgUENJIGJ1cworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBjbWNpYTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgUENNQ0lBIG9yIENvbXBhY3RGbGFzaCBzb2NrZXRzCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGhvbmU6PC9lbXBoYXNpcz4gTW9iaWxlIHBob25lICh2b2ljZSkgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnF2Z2E6PC9lbXBoYXNpcz4gTWFjaGluZSBoYXMgYSBRVkdBICgzMjB4MjQwKSBkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cnRjOjwvZW1waGFzaXM+IE1hY2hpbmUgaGFzIGEgUmVhbC1UaW1lIENsb2NrCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c2NyZWVuOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBhIHNjcmVlbgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNlcmlhbDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgc2VyaWFsIHN1cHBvcnQgKHVzdWFsbHkgUlMyMzIpCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG91Y2hzY3JlZW46PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEgdG91Y2hzY3JlZW4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51c2JnYWRnZXQ6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaXMgVVNCIGdhZGdldCBkZXZpY2UgY2FwYWJsZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVzYmhvc3Q6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaXMgVVNCIEhvc3QgY2FwYWJsZQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnZmYXQ6PC9lbXBoYXNpcz4gRkFUIGZpbGUgc3lzdGVtIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz53aWZpOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBpbnRlZ3JhdGVkIFdpRmkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtZmVhdHVyZXMtZGlzdHJvJz4KKyAgICAgICAgPHRpdGxlPkRpc3RybyBGZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaXRlbXMgYmVsb3cgYXJlIGZlYXR1cmVzIHlvdSBjYW4gdXNlIHdpdGgKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvIGVuYWJsZSBmZWF0dXJlcyBhY3Jvc3MgeW91ciBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBGZWF0dXJlcyBkbyBub3QgaGF2ZSBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgdG8gcGFja2FnZXMsCisgICAgICAgICAgICBhbmQgdGhleSBjYW4gZ28gYmV5b25kIHNpbXBseSBjb250cm9sbGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIGEKKyAgICAgICAgICAgIHBhY2thZ2Ugb3IgcGFja2FnZXMuCisgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhIGZlYXR1cmUgdHJhbnNsYXRlcyB0bworICAgICAgICAgICAgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBzdXBwbGllZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCBkdXJpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGZvciB0aGUgcmVjaXBlcyB0aGF0IG9wdGlvbmFsbHkKKyAgICAgICAgICAgIHN1cHBvcnQgdGhlIGZlYXR1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgZGlzdHJvIGZlYXR1cmVzIGFyZSBhbHNvIG1hY2hpbmUgZmVhdHVyZXMuCisgICAgICAgICAgICBUaGVzZSBzZWxlY3QgZmVhdHVyZXMgbWFrZSBzZW5zZSB0byBiZSBjb250cm9sbGVkIGJvdGggYXQKKyAgICAgICAgICAgIHRoZSBtYWNoaW5lIGFuZCBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBsZXZlbC4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT01CSU5FRF9GRUFUVVJFUyc+PGZpbGVuYW1lPkNPTUJJTkVEX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgbGlzdCBvbmx5IHJlcHJlc2VudHMgZmVhdHVyZXMgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IG1ldGFkYXRhOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFsc2E6PC9lbXBoYXNpcz4gSW5jbHVkZSBBTFNBIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgKE9TUyBjb21wYXRpYmlsaXR5IGtlcm5lbCBtb2R1bGVzIGluc3RhbGxlZCBpZiBhdmFpbGFibGUpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmJsdWV0b290aDo8L2VtcGhhc2lzPiBJbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIGJsdWV0b290aCBzdXBwb3J0IChpbnRlZ3JhdGVkIEJUIG9ubHkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y3JhbWZzOjwvZW1waGFzaXM+IEluY2x1ZGUgQ3JhbUZTCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kaXJlY3RmYjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIERpcmVjdEZCIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZXh0Mjo8L2VtcGhhc2lzPiBJbmNsdWRlIHRvb2xzIGZvcgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0aW5nIGZvciBkZXZpY2VzIHdpdGggaW50ZXJuYWwgSEREL01pY3JvZHJpdmUgZm9yCisgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgZmlsZXMgKGluc3RlYWQgb2YgRmxhc2ggb25seSBkZXZpY2VzKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pcHNlYzo8L2VtcGhhc2lzPiBJbmNsdWRlIElQU2VjCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pcHY2OjwvZW1waGFzaXM+IEluY2x1ZGUgSVB2NiBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmlyZGE6PC9lbXBoYXNpcz4gSW5jbHVkZSBJckRBIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+a2V5Ym9hcmQ6PC9lbXBoYXNpcz4gSW5jbHVkZSBrZXlib2FyZAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IChlLmcuIGtleW1hcHMgd2lsbCBiZSBsb2FkZWQgZHVyaW5nIGJvb3QpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5mczo8L2VtcGhhc2lzPiBJbmNsdWRlIE5GUyBjbGllbnQKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCAoZm9yIG1vdW50aW5nIE5GUyBleHBvcnRzIG9uIGRldmljZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+b3BlbmdsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgdGhlIE9wZW4gR3JhcGhpY3MgTGlicmFyeSwgd2hpY2ggaXMgYQorICAgICAgICAgICAgICAgICAgICBjcm9zcy1sYW5ndWFnZSwgbXVsdGktcGxhdGZvcm0gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIHVzZWQgZm9yIHJlbmRlcmluZyB0d28gYW5kIHRocmVlLWRpbWVuc2lvbmFsCisgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGNpOjwvZW1waGFzaXM+IEluY2x1ZGUgUENJIGJ1cworICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGNtY2lhOjwvZW1waGFzaXM+IEluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgUENNQ0lBL0NvbXBhY3RGbGFzaCBzdXBwb3J0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHBwOjwvZW1waGFzaXM+IEluY2x1ZGUgUFBQIGRpYWx1cAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHRlc3Q6PC9lbXBoYXNpcz4gRW5hYmxlcyBidWlsZGluZworICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZSB0ZXN0cyB3aGVyZSBzdXBwb3J0ZWQgYnkgaW5kaXZpZHVhbCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYWNrYWdlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN0ZXN0aW5nLXBhY2thZ2VzLXdpdGgtcHRlc3QnPlRlc3RpbmcgUGFja2FnZXMgV2l0aCBwdGVzdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zbWJmczo8L2VtcGhhc2lzPiBJbmNsdWRlIFNNQiBuZXR3b3JrcworICAgICAgICAgICAgICAgICAgICBjbGllbnQgc3VwcG9ydCAoZm9yIG1vdW50aW5nIFNhbWJhL01pY3Jvc29mdCBXaW5kb3dzIHNoYXJlcworICAgICAgICAgICAgICAgICAgICBvbiBkZXZpY2UpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3lzdGVtZDo8L2VtcGhhc2lzPiBJbmNsdWRlIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgPGZpbGVuYW1lPmluaXQ8L2ZpbGVuYW1lPiBtYW5hZ2VyLCB3aGljaCBpcyBhIGZ1bGwKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgb2YgZm9yIDxmaWxlbmFtZT5pbml0PC9maWxlbmFtZT4gd2l0aCBwYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBvZiBzZXJ2aWNlcywgcmVkdWNlZCBzaGVsbCBvdmVyaGVhZCwgYW5kIG90aGVyCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIDxmaWxlbmFtZT5pbml0PC9maWxlbmFtZT4gbWFuYWdlciBpcyB1c2VkIGJ5IG1hbnkKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVzYmdhZGdldDo8L2VtcGhhc2lzPiBJbmNsdWRlIFVTQgorICAgICAgICAgICAgICAgICAgICBHYWRnZXQgRGV2aWNlIHN1cHBvcnQgKGZvciBVU0IgbmV0d29ya2luZy9zZXJpYWwvc3RvcmFnZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dXNiaG9zdDo8L2VtcGhhc2lzPiBJbmNsdWRlIFVTQiBIb3N0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgKGFsbG93cyB0byBjb25uZWN0IGV4dGVybmFsIGtleWJvYXJkLCBtb3VzZSwKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbmV0d29yayBldGMpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+d2F5bGFuZDo8L2VtcGhhc2lzPiBJbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBXYXlsYW5kIGRpc3BsYXkgc2VydmVyIHByb3RvY29sIGFuZCB0aGUgbGlicmFyeSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIGl0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+d2lmaTo8L2VtcGhhc2lzPiBJbmNsdWRlIFdpRmkgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAoaW50ZWdyYXRlZCBvbmx5KS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMTo8L2VtcGhhc2lzPiBJbmNsdWRlIHRoZSBYIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICBhbmQgbGlicmFyaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWZlYXR1cmVzLWltYWdlJz4KKyAgICAgICAgPHRpdGxlPkltYWdlIEZlYXR1cmVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBpbWFnZXMgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICBjYW4gYmUgY29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMgdGhhdCB5b3UgdHlwaWNhbGx5IGNvbmZpZ3VyZSBpbiB5b3VyIGltYWdlIHJlY2lwZXMuCisgICAgICAgICAgICBUaHJvdWdoIHRoZXNlIHZhcmlhYmxlcywgeW91IGNhbiBhZGQgc2V2ZXJhbCBkaWZmZXJlbnQKKyAgICAgICAgICAgIHByZWRlZmluZWQgcGFja2FnZXMgc3VjaCBhcyBkZXZlbG9wbWVudCB1dGlsaXRpZXMgb3IgcGFja2FnZXMgd2l0aAorICAgICAgICAgICAgZGVidWcgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGludmVzdGlnYXRlIGFwcGxpY2F0aW9uIHByb2JsZW1zIG9yCisgICAgICAgICAgICBwcm9maWxlIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbWFnZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGZvciBhbGwgaW1hZ2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFsbG93LWVtcHR5LXBhc3N3b3JkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBEcm9wYmVhciBhbmQgT3BlblNTSCB0byBhY2NlcHQgcm9vdCBsb2dpbnMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGxvZ2lucyBmcm9tIGFjY291bnRzIGhhdmluZyBhbiBlbXB0eSBwYXNzd29yZCBzdHJpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGJnLXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGVidWcgc3ltYm9sIHBhY2thZ2VzIGZvciBhbGwgcGFja2FnZXMgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIGluIGEgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGVidWctdHdlYWtzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1ha2VzIGFuIGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCAoZS5nLgorICAgICAgICAgICAgICAgICAgICBhbGxvd3Mgcm9vdCBsb2dpbnMgd2l0aG91dCBwYXNzd29yZHMgYW5kIGVuYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgcG9zdC1pbnN0YWxsYXRpb24gbG9nZ2luZykuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgJ2FsbG93LWVtcHR5LXBhc3N3b3JkJywgJ2VtcHR5LXJvb3QtcGFzc3dvcmQnLAorICAgICAgICAgICAgICAgICAgICBhbmQgJ3Bvc3QtaW5zdGFsbC1sb2dnaW5nJyBmZWF0dXJlcyBpbiB0aGlzIGxpc3QgZm9yCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZGV2LXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGV2ZWxvcG1lbnQgcGFja2FnZXMgKGhlYWRlcnMgYW5kIGV4dHJhIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgbGlua3MpIGZvciBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIGEgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZG9jLXBrZ3M6PC9lbXBoYXNpcz4gSW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBwYWNrYWdlcyBmb3IgYWxsIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhCisgICAgICAgICAgICAgICAgICAgIGdpdmVuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmVtcHR5LXJvb3QtcGFzc3dvcmQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgcm9vdCBwYXNzd29yZCB0byBhbiBlbXB0eSBzdHJpbmcsIHdoaWNoIGFsbG93cworICAgICAgICAgICAgICAgICAgICBsb2dpbnMgd2l0aCBhIGJsYW5rIHBhc3N3b3JkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBhY2thZ2UtbWFuYWdlbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBwYWNrYWdlIG1hbmFnZW1lbnQgdG9vbHMgYW5kIHByZXNlcnZlcyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBvc3QtaW5zdGFsbC1sb2dnaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgbG9nZ2luZyBwb3N0aW5zdGFsbCBzY3JpcHQgcnVucyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPi92YXIvbG9nL3Bvc3RpbnN0YWxsLmxvZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgb24gZmlyc3QgYm9vdCBvZiB0aGUgaW1hZ2Ugb24gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cHRlc3QtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBwdGVzdCBwYWNrYWdlcyBmb3IgYWxsIHB0ZXN0LWVuYWJsZWQgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWFkLW9ubHktcm9vdGZzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYW4gaW1hZ2Ugd2hvc2Ugcm9vdCBmaWxlc3lzdGVtIGlzIHJlYWQtb25seS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1yZWFkLW9ubHktcm9vdC1maWxlc3lzdGVtJz5DcmVhdGluZyBhIFJlYWQtT25seSBSb290IEZpbGVzeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3BsYXNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgc2hvd2luZyBhIHNwbGFzaCBzY3JlZW4gZHVyaW5nIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgc2NyZWVuIGlzIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wc3BsYXNoPC9maWxlbmFtZT4sIHdoaWNoIGRvZXMgYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHByZWZlciB0byB1c2UgYW4gYWx0ZXJuYXRpdmUgc3BsYXNoIHNjcmVlbiBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGRvIHNvIGJ5IHNldHRpbmcgdGhlIDxmaWxlbmFtZT5TUExBU0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBhIGRpZmZlcmVudCBwYWNrYWdlIG5hbWUgKG9yIG5hbWVzKSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIHJlY2lwZSBvciBhdCB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24gbGV2ZWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3RhdGljZGV2LXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgc3RhdGljIGRldmVsb3BtZW50IHBhY2thZ2VzLCB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGxpYnJhcmllcyAoaS5lLiA8ZmlsZW5hbWU+Ki5hPC9maWxlbmFtZT4gZmlsZXMpLCBmb3IKKyAgICAgICAgICAgICAgICAgICAgYWxsIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhIGdpdmVuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIGltYWdlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgb25seSB3aGVuIHlvdSBpbmhlcml0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY29yZS1pbWFnZSc+PGZpbGVuYW1lPmNvcmUtaW1hZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgVGhlIGN1cnJlbnQgbGlzdCBvZiB0aGVzZSB2YWxpZCBmZWF0dXJlcyBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmVjbGlwc2UtZGVidWc6PC9lbXBoYXNpcz4gUHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSByZW1vdGUgZGVidWdnaW5nIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aHdjb2RlY3M6PC9lbXBoYXNpcz4gSW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGNvZGVjcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5uZnMtc2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIGFuIE5GUyBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cXQ0LXBrZ3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydHMgUXQ0L1gxMSBhbmQgZGVtbyBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3NoLXNlcnZlci1kcm9wYmVhcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgRHJvcGJlYXIgbWluaW1hbCBTU0ggc2VydmVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNzaC1zZXJ2ZXItb3BlbnNzaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgT3BlblNTSCBTU0ggc2VydmVyLCB3aGljaCBpcyBtb3JlCisgICAgICAgICAgICAgICAgICAgIGZ1bGwtZmVhdHVyZWQgdGhhbiBEcm9wYmVhci4KKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGlmIGJvdGggdGhlIE9wZW5TU0ggU1NIIHNlcnZlciBhbmQgdGhlIERyb3BiZWFyCisgICAgICAgICAgICAgICAgICAgIG1pbmltYWwgU1NIIHNlcnZlciBhcmUgcHJlc2VudCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiwgdGhlbiBPcGVuU1NIIHdpbGwgdGFrZQorICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlIGFuZCBEcm9wYmVhciB3aWxsIG5vdCBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG9vbHMtZGVidWc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2RiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHREIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnJz5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0cmFjaW5nIGFuZCBwcm9maWxpbmcsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy1wcm9maWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHByb2ZpbGluZyB0b29scyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZXhtYXA8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5MVFRuZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB1c2VyLXNwYWNlIHRvb2xzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2VyLXNwYWNlLXRvb2xzJz5Vc2VyLVNwYWNlIFRvb2xzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgICAgICAgICAgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG9vbHMtc2RrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIGEgZnVsbCBTREsgdGhhdCBydW5zIG9uIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dG9vbHMtdGVzdGFwcHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgZGV2aWNlIHRlc3RpbmcgdG9vbHMgKGUuZy4gdG91Y2hzY3JlZW4gZGVidWdnaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz54MTE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgdGhlIFggc2VydmVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMS1iYXNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBYIHNlcnZlciB3aXRoIGEgbWluaW1hbCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz54MTEtc2F0bzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgT3BlbmVkSGFuZCBTYXRvIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz4KKyAgICAgICAgPHRpdGxlPkZlYXR1cmUgQmFja2ZpbGxpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSBpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBleHRlbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gY29udHJvbCBmdW5jdGlvbmFsaXR5IHRoYXQgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCBhbmQgbm90IGFibGUKKyAgICAgICAgICAgIHRvIGJlIGRpc2FibGVkLgorICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB3ZSBuZWVkIHRvIGFkZCBhbgorICAgICAgICAgICAgYWRkaXRpb25hbCBmZWF0dXJlIGl0ZW0gdG8gYXBwZWFyIGluIG9uZSBvZiB0aGVzZSB2YXJpYWJsZXMsCisgICAgICAgICAgICBidXQgd2UgZG8gbm90IHdhbnQgdG8gZm9yY2UgZGV2ZWxvcGVycyB3aG8gaGF2ZSBleGlzdGluZyB2YWx1ZXMKKyAgICAgICAgICAgIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlaXIgY29uZmlndXJhdGlvbiB0byBhZGQgdGhlIG5ldyBmZWF0dXJlCisgICAgICAgICAgICBpbiBvcmRlciB0byByZXRhaW4gdGhlIHNhbWUgb3ZlcmFsbCBsZXZlbCBvZiBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgVGh1cywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGEgbWVjaGFuaXNtIHRvCisgICAgICAgICAgICBhdXRvbWF0aWNhbGx5ICJiYWNrZmlsbCIgdGhlc2UgYWRkZWQgZmVhdHVyZXMgaW50byBleGlzdGluZworICAgICAgICAgICAgZGlzdHJvIG9yIG1hY2hpbmUgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgbGlzdCBvZiBmZWF0dXJlcyBmb3Igd2hpY2ggdGhpcyBpcyBkb25lIGJ5CisgICAgICAgICAgICBmaW5kaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTCc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2Ugc3VjaCBmZWF0dXJlcyBhcmUgYmFja2ZpbGxlZCBieSBkZWZhdWx0IGludG8gYWxsCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgZGV2ZWxvcGVycworICAgICAgICAgICAgd2hvIHdpc2ggdG8gZGlzYWJsZSB0aGUgbmV3IGZlYXR1cmVzIG5lZWQgdG8gYmUgYWJsZSB0byBzZWxlY3RpdmVseQorICAgICAgICAgICAgcHJldmVudCB0aGUgYmFja2ZpbGxpbmcgZnJvbSBvY2N1cnJpbmcuCisgICAgICAgICAgICBUaGV5IGNhbiBkbyB0aGlzIGJ5IGFkZGluZyB0aGUgdW5kZXNpcmVkIGZlYXR1cmUgb3IgZmVhdHVyZXMgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzIGZvciBkaXN0cm8gZmVhdHVyZXMgYW5kIG1hY2hpbmUgZmVhdHVyZXMgcmVzcGVjdGl2ZWx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMgdG8gaGVscCBpbGx1c3RyYXRlIGZlYXR1cmUgYmFja2ZpbGxpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGhlICJwdWxzZWF1ZGlvIiBkaXN0cm8gZmVhdHVyZSBvcHRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgUHJldmlvdXNseSwgUHVsc2VBdWRpbyBzdXBwb3J0IHdhcyBlbmFibGVkIHdpdGhpbiB0aGUgUXQgYW5kCisgICAgICAgICAgICAgICAgICAgIEdTdHJlYW1lciBmcmFtZXdvcmtzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBmZWF0dXJlIGlzIGJhY2tmaWxsZWQgYW5kIHRodXMKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCBmb3IgYWxsIGRpc3Ryb3MgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdXIgZGlzdHJvIG5lZWRzIHRvIGRpc2FibGUgdGhlIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGUgZmVhdHVyZSB3aXRob3V0IGFmZmVjdGluZworICAgICAgICAgICAgICAgICAgICBvdGhlciBleGlzdGluZyBkaXN0cm8gY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIFB1bHNlQXVkaW8gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgInB1bHNlYXVkaW8iIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgZGlzdHJvJ3MgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBmZWF0dXJlIHRvIHRoaXMgdmFyaWFibGUgd2hlbiBpdCBhbHNvCisgICAgICAgICAgICAgICAgICAgIGV4aXN0cyBpbiB0aGUgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHByZXZlbnRzIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBhZGRpbmcgdGhlIGZlYXR1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgeW91ciBjb25maWd1cmF0aW9uJ3MgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+LCBlZmZlY3RpdmVseSBkaXNhYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmUgZm9yIHRoYXQgcGFydGljdWxhciBkaXN0cm8uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgInJ0YyIgbWFjaGluZSBmZWF0dXJlIG9wdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91c2x5LCByZWFsIHRpbWUgY2xvY2sgKFJUQykgc3VwcG9ydCB3YXMgZW5hYmxlZCBmb3IgYWxsCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIG9mIHRoaXMsIHRoZSBmZWF0dXJlIGlzIGJhY2tmaWxsZWQgYW5kIHRodXMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIG1hY2hpbmVzIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91ciB0YXJnZXQgZGV2aWNlIGRvZXMgbm90IGhhdmUgdGhpcyBjYXBhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRpc2FibGUgUlRDIHN1cHBvcnQgZm9yIHlvdXIgZGV2aWNlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgYWZmZWN0aW5nIG90aGVyIG1hY2hpbmVzIHRoYXQgbmVlZCBSVEMgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgdGhlIGZlYXR1cmUgdG8geW91ciBtYWNoaW5lJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpc3QgaW4gdGhlIG1hY2hpbmUncyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGZlYXR1cmUgdG8gdGhpcyB2YXJpYWJsZSB3aGVuIGl0IGFsc28KKyAgICAgICAgICAgICAgICAgICAgZXhpc3RzIGluIHRoZSA8ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHByZXZlbnRzIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBhZGRpbmcgdGhlIGZlYXR1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgeW91ciBjb25maWd1cmF0aW9uJ3MgPGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPiwgZWZmZWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsaW5nIFJUQyBzdXBwb3J0IGZvciB0aGF0IHBhcnRpY3VsYXIgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorCis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00IHNwZWxsIHNwZWxsbGFuZz1lbl9nYgorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNWNhNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbApAQCAtMCwwICsxLDE2OSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1pbWFnZXMnPgorICAgIDx0aXRsZT5JbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIHNldmVyYWwgZXhhbXBsZQorICAgICAgICBpbWFnZXMgdG8gc2F0aXNmeSBkaWZmZXJlbnQgbmVlZHMuCisgICAgICAgIFdoZW4geW91IGlzc3VlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgeW91IHByb3ZpZGUgYSDigJx0b3AtbGV2ZWzigJ0gcmVjaXBlCisgICAgICAgIHRoYXQgZXNzZW50aWFsbHkgYmVnaW5zIHRoZSBidWlsZCBmb3IgdGhlIHR5cGUgb2YgaW1hZ2UgeW91IHdhbnQuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIEJ1aWxkaW5nIGFuIGltYWdlIHdpdGhvdXQgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAzIChHUEx2MyksCisgICAgICAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDMgKExHUEx2MyksIGFuZCB0aGUKKyAgICAgICAgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMyAoQUdQTC0zLjApIGNvbXBvbmVudHMKKyAgICAgICAgaXMgb25seSBzdXBwb3J0ZWQgZm9yIG1pbmltYWwgYW5kIGJhc2UgaW1hZ2VzLgorICAgICAgICBGdXJ0aGVybW9yZSwgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBhbiBpbWFnZSB1c2luZyBub24tR1BMdjMgYW5kCisgICAgICAgIHNpbWlsYXJseSBsaWNlbnNlZCBjb21wb25lbnRzLCB5b3UgbXVzdCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBpbgorICAgICAgICB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGJlZm9yZSB1c2luZyB0aGUgQml0QmFrZQorICAgICAgICBjb21tYW5kIHRvIGJ1aWxkIHRoZSBtaW5pbWFsIG9yIGJhc2UgaW1hZ2U6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgMS4gQ29tbWVudCBvdXQgdGhlIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGxpbmUKKyAgICAgMi4gU2V0IElOQ09NUEFUSUJMRV9MSUNFTlNFID0gIkdQTC0zLjAgTEdQTC0zLjAgQUdQTC0zLjAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRnJvbSB3aXRoaW4gdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gdXNlCisgICAgICAgIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBkaXNwbGF5IHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIHRoYXQgY29udGFpbmUgaW1hZ2UgcmVjaXBlIGZpbGVzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbHMgbWV0YSovcmVjaXBlcyovaW1hZ2VzLyouYmIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHN1cHBvcnRlZCByZWNpcGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idWlsZC1hcHBsaWFuY2UtaW1hZ2U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBleGFtcGxlIHZpcnR1YWwgbWFjaGluZSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgcGllY2VzIHJlcXVpcmVkIHRvCisgICAgICAgICAgICAgICAgcnVuIGJ1aWxkcyB1c2luZyB0aGUgYnVpbGQgc3lzdGVtIGFzIHdlbGwgYXMgdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYuCisgICAgICAgICAgICAgICAgWW91IGNhbiBib290IGFuZCBydW4gdGhlIGltYWdlIHVzaW5nIGVpdGhlciB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZtd2FyZS5jb20vcHJvZHVjdHMvcGxheWVyL292ZXJ2aWV3Lmh0bWwnPlZNd2FyZSBQbGF5ZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yIDx1bGluayB1cmw9J2h0dHA6Ly93d3cudm13YXJlLmNvbS9wcm9kdWN0cy93b3Jrc3RhdGlvbi9vdmVydmlldy5odG1sJz5WTXdhcmUgV29ya3N0YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGltYWdlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uL2J1aWxkLWFwcGxpYW5jZSc+QnVpbGQgQXBwbGlhbmNlPC91bGluaz4gcGFnZSBvbgorICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtYmFzZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgY29uc29sZS1vbmx5IGltYWdlIHRoYXQgZnVsbHkgc3VwcG9ydHMgdGhlIHRhcmdldCBkZXZpY2UgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtY2x1dHRlcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGltYWdlIHdpdGggc3VwcG9ydCBmb3IgdGhlIE9wZW4gR0wtYmFzZWQgdG9vbGtpdCBDbHV0dGVyLCB3aGljaCBlbmFibGVzIGRldmVsb3BtZW50IG9mCisgICAgICAgICAgICAgICAgcmljaCBhbmQgYW5pbWF0ZWQgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1kaXJlY3RmYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGltYWdlIHRoYXQgdXNlcyA8ZmlsZW5hbWU+ZGlyZWN0ZmI8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mIFgxMS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIGNvbnNvbGUtb25seSBpbWFnZSB3aXRoIG1vcmUgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluc3RhbGxlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2UgdGhhdCBjb25mb3JtcyB0byB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKQorICAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24uCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSByZXF1aXJlcyBhIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICBlbmFibGVzIExTQiBjb21wbGlhbmNlIChlLmcuIDxmaWxlbmFtZT5wb2t5LWxzYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYnVpbGQgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gd2l0aG91dCB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgdGhlIGltYWdlIHdpbGwgbm90IGJlIExTQi1jb21wbGlhbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiLWRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgd29yaworICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBpbmNsdWRlcyBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgeW91IGNhbiB1c2UgaW4gYSBob3N0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSByZXF1aXJlcyBhIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICBlbmFibGVzIExTQiBjb21wbGlhbmNlIChlLmcuIDxmaWxlbmFtZT5wb2t5LWxzYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYnVpbGQgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiLWRldjwvZmlsZW5hbWU+IHdpdGhvdXQgdGhhdAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHRoZSBpbWFnZSB3aWxsIG5vdCBiZSBMU0ItY29tcGxpYW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYi1zZGs8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYjwvZmlsZW5hbWU+IHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyBpbgorICAgICAgICAgICAgICAgIG1ldGEtdG9vbGNoYWluIGJ1dCBhbHNvIGluY2x1ZGVzIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcworICAgICAgICAgICAgICAgIHRvIGZvcm0gYSBjb21wbGV0ZSBzdGFuZGFsb25lIFNESy4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHJlcXVpcmVzIGEgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIGVuYWJsZXMgTFNCIGNvbXBsaWFuY2UgKGUuZy4gPGZpbGVuYW1lPnBva3ktbHNiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIElmIHlvdSBidWlsZCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2Itc2RrPC9maWxlbmFtZT4gd2l0aG91dCB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgdGhlIGltYWdlIHdpbGwgbm90IGJlIExTQi1jb21wbGlhbnQuCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIHRhcmdldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSBzbWFsbCBpbWFnZSBqdXN0IGNhcGFibGUgb2YgYWxsb3dpbmcgYSBkZXZpY2UgdG8gYm9vdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsLWRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGluY2x1ZGVzIGhlYWRlcnMgYW5kIGxpYnJhcmllcyB5b3UgY2FuIHVzZSBpbiBhIGhvc3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0naW1hZ2VzLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMnPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBoYXMgdGhlIE1pbmltYWwgUkFNLWJhc2VkCisgICAgICAgICAgICAgICAgSW5pdGlhbCBSb290IEZpbGVzeXN0ZW0gKGluaXRyYW1mcykgYXMgcGFydCBvZiB0aGUga2VybmVsLAorICAgICAgICAgICAgICAgIHdoaWNoIGFsbG93cyB0aGUgc3lzdGVtIHRvIGZpbmQgdGhlIGZpcnN0IOKAnGluaXTigJ0gcHJvZ3JhbSBtb3JlIGVmZmljaWVudGx5LgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9JTlNUQUxMJz48ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaGVscGZ1bCB3aGVuIHdvcmtpbmcgd2l0aAorICAgICAgICAgICAgICAgIGluaXRyYW1mcyBpbWFnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlsczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlIHRoYXQgaGFzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICBmb3IgdGhlIE1pbmltYWwgTVREIFV0aWxpdGllcywgd2hpY2ggbGV0IHRoZSB1c2VyIGludGVyYWN0IHdpdGggdGhlCisgICAgICAgICAgICAgICAgTVREIHN1YnN5c3RlbSBpbiB0aGUga2VybmVsIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBmbGFzaCBkZXZpY2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXJ0PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgcGx1cyBhIHJlYWwtdGltZSB0ZXN0IHN1aXRlIGFuZAorICAgICAgICAgICAgICAgIHRvb2xzIGFwcHJvcHJpYXRlIGZvciByZWFsLXRpbWUgdXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXJ0LXNkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtcnQ8L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGluY2x1ZGVzIGV2ZXJ5dGhpbmcgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS10b29sY2hhaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgaW1hZ2UgYWxzbyBpbmNsdWRlcyBkZXZlbG9wbWVudCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgdG8gZm9ybSBhIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgc3RhbmQtYWxvbmUgU0RLIGFuZCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2Ugd2l0aCBTYXRvIHN1cHBvcnQsIGEgbW9iaWxlIGVudmlyb25tZW50IGFuZCB2aXN1YWwgc3R5bGUgdGhhdCB3b3JrcyB3ZWxsCisgICAgICAgICAgICAgICAgd2l0aCBtb2JpbGUgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICBUaGUgaW1hZ2Ugc3VwcG9ydHMgWDExIHdpdGggYSBTYXRvIHRoZW1lIGFuZCBhcHBsaWNhdGlvbnMgc3VjaCBhcworICAgICAgICAgICAgICAgIGEgdGVybWluYWwsIGVkaXRvciwgZmlsZSBtYW5hZ2VyLCBtZWRpYSBwbGF5ZXIsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvLWRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBpbmNsdWRlcyBsaWJyYXJpZXMgbmVlZGVkIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucyBvbiB0aGUgZGV2aWNlIGl0c2VsZiwKKyAgICAgICAgICAgICAgICB0ZXN0aW5nIGFuZCBwcm9maWxpbmcgdG9vbHMsIGFuZCBkZWJ1ZyBzeW1ib2xzLgorICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2Ugd2FzIGZvcm1lcmx5IDxmaWxlbmFtZT5jb3JlLWltYWdlLXNkazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8tc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIGluIG1ldGEtdG9vbGNoYWluLgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBhbHNvIGluY2x1ZGVzIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgY29tcGxldGUgc3RhbmRhbG9uZSBTREsKKyAgICAgICAgICAgICAgICBhbmQgaXMgc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IHVzaW5nIHRoZSB0YXJnZXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgIm1hc3RlciIgaW1hZ2UgZGVzaWduZWQgdG8gYmUgdXNlZCBmb3IgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZy4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBhICJrbm93biBnb29kIiBpbWFnZSB0aGF0IGlzIGRlcGxveWVkIHRvIGEgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICBwYXJ0aXRpb24gc28gdGhhdCB5b3UgY2FuIGJvb3QgaW50byBpdCBhbmQgdXNlIGl0IHRvIGRlcGxveSBhCisgICAgICAgICAgICAgICAgc2Vjb25kIGltYWdlIHRvIGJlIHRlc3RlZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBydW50aW1lIHRlc3RpbmcgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIFJBTS1iYXNlZCBJbml0aWFsIFJvb3QgRmlsZXN5c3RlbSAoaW5pdHJhbWZzKSBpbWFnZSB0YWlsb3JlZCBmb3IKKyAgICAgICAgICAgICAgICB1c2Ugd2l0aCB0aGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtdGVzdG1hc3RlcjwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXdlc3RvbjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgdmVyeSBiYXNpYyBXYXlsYW5kIGltYWdlIHdpdGggYSB0ZXJtaW5hbC4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHByb3ZpZGVzIHRoZSBXYXlsYW5kIHByb3RvY29sIGxpYnJhcmllcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIFdlc3RvbiBjb21wb3NpdG9yLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3dheWxhbmQnPldheWxhbmQ8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXgxMTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgdmVyeSBiYXNpYyBYMTEgaW1hZ2Ugd2l0aCBhIHRlcm1pbmFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5xdDRlLWRlbW8taW1hZ2U8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbWFnZSB0aGF0IGxhdW5jaGVzIGludG8gdGhlIGRlbW8gYXBwbGljYXRpb24gZm9yIHRoZSBlbWJlZGRlZAorICAgICAgICAgICAgICAgIChub3QgYmFzZWQgb24gWDExKSB2ZXJzaW9uIG9mIFF0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OGRkOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcWEtY29kZS1wZXJtYWxpbmtzLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidyZWYtc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSJBIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNzUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL3JlZi1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGVkZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbApAQCAtMCwwICsxLDE2MCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3JlZi1tYW51YWwnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcnCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nU1ZHJworICAgICAgICAgICAgICAgICAgICBhbGlnbj0nbGVmdCcgc2NhbGVmaXQ9JzEnIHdpZHRoPScxMDAlJy8+CisgICAgICAgICAgICA8L2ltYWdlb2JqZWN0PgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDx0aXRsZT4KKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbAorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5SaWNoYXJkPC9maXJzdG5hbWU+IDxzdXJuYW1lPlB1cmRpZTwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkxpbnV4IEZvdW5kYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZzwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKworICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+NC4wK2dpdDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjI0IE5vdmVtYmVyIDIwMTA8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDAuOSBSZWxlYXNlPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBBcHJpbCAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjAuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjIzIE1heSAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjAuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgT2N0b2JlciAyMDExPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjI8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjIgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjM8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImludHJvZHVjdGlvbi54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InVzaW5ncG9reS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImNsb3Nlci1sb29rLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idGVjaG5pY2FsLWRldGFpbHMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJtaWdyYXRpb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtc3RydWN0dXJlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLWNsYXNzZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtdGFza3MueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtcWEtY2hlY2tzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLWltYWdlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1mZWF0dXJlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi12YXJpYWJsZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtdmFybG9jYWxpdHkueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJmYXEueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZXNvdXJjZXMueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Njg5YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbApAQCAtMCwwICsxLDEyMzUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtcWEtY2hlY2tzJz4KKzx0aXRsZT5RQSBFcnJvciBhbmQgV2FybmluZyBNZXNzYWdlczwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdxYS1pbnRyb2R1Y3Rpb24nPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gYnVpbGRpbmcgYSByZWNpcGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBlcmZvcm1zCisgICAgICAgIHZhcmlvdXMgUUEgY2hlY2tzIG9uIHRoZSBvdXRwdXQgdG8gZW5zdXJlIHRoYXQgY29tbW9uIGlzc3VlcyBhcmUKKyAgICAgICAgZGV0ZWN0ZWQgYW5kIHJlcG9ydGVkLgorICAgICAgICBTb21ldGltZXMgd2hlbiB5b3UgY3JlYXRlIGEgbmV3IHJlY2lwZSB0byBidWlsZCBuZXcgc29mdHdhcmUsCisgICAgICAgIGl0IHdpbGwgYnVpbGQgd2l0aCBubyBwcm9ibGVtcy4KKyAgICAgICAgV2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgb3Igd2hlbiB5b3UgaGF2ZSBRQSBpc3N1ZXMgYnVpbGRpbmcgYW55CisgICAgICAgIHNvZnR3YXJlLCBpdCBjb3VsZCB0YWtlIGEgbGl0dGxlIHRpbWUgdG8gcmVzb2x2ZSB0aGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSBpdCBpcyB0ZW1wdGluZyB0byBpZ25vcmUgYSBRQSBtZXNzYWdlIG9yIGV2ZW4gdG8KKyAgICAgICAgZGlzYWJsZSBRQSBjaGVja3MsIGl0IGlzIGJlc3QgdG8gdHJ5IGFuZCByZXNvbHZlIGFueQorICAgICAgICByZXBvcnRlZCBRQSBpc3N1ZXMuCisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhIGxpc3Qgb2YgdGhlIFFBIG1lc3NhZ2VzIGFuZCBicmllZiBleHBsYW5hdGlvbnMKKyAgICAgICAgb2YgdGhlIGlzc3VlcyB5b3UgY291bGQgZW5jb3VudGVyIHNvIHRoYXQgeW91IGNhbiBwcm9wZXJseSByZXNvbHZlCisgICAgICAgIHByb2JsZW1zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgbmV4dCBzZWN0aW9uIHByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgUUEgZXJyb3IgYW5kIHdhcm5pbmcKKyAgICAgICAgbWVzc2FnZXMgYmFzZWQgb24gYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgICAgIEVhY2ggZW50cnkgcHJvdmlkZXMgdGhlIG1lc3NhZ2Ugb3IgZXJyb3IgZm9ybSBhbG9uZyB3aXRoIGFuCisgICAgICAgIGV4cGxhbmF0aW9uLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXQgdGhlIGVuZCBvZiBlYWNoIG1lc3NhZ2UsIHRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgIFFBIHRlc3QgKGFzIGxpc3RlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uKSBhcHBlYXJzIHdpdGhpbiBzcXVhcmUgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCB0aGlzIGxpc3Qgb2YgZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXMgaXMgZm9yCisgICAgICAgICAgICAgICAgICAgIFFBIGNoZWNrcyBvbmx5LgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBkb2VzIG5vdCBjb3ZlciBhbGwgcG9zc2libGUgYnVpbGQgZXJyb3JzIG9yCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzIHlvdSBjb3VsZCBlbmNvdW50ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBzb21lIFFBIGNoZWNrcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBsaXN0CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGluY2x1ZGUgYWxsIHBvc3NpYmxlIFFBIGNoZWNrIGVycm9ycyBhbmQgd2FybmluZ3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdxYS1lcnJvcnMtYW5kLXdhcm5pbmdzJz4KKyAgICA8dGl0bGU+RXJyb3JzIGFuZCBXYXJuaW5nczwvdGl0bGU+CisKKzwhLS0KK1RoaXMgc2VjdGlvbiB1c2VzIHRoZSA8cGFyYT48Y29kZT4gY29uc3RydWN0IHRvIGVuYWJsZSBwZXJtYWxpbmtzIGZvciB0aGUKK3ZhcmlvdXMgUUEgaXNzdWUgYW5kIHdhcm5pbmcgbWVzc2FnZXMuICBUaGUgZmlsZSB0ZW1wbGF0ZXMvcWEtY29kZS1wZXJtYWxpbmtzLnhzbAoraXMgdXNlZCB0byBsb2NhdGUgdGhlIGNvbnN0cnVjdCBhbmQgZ2VuZXJhdGUgdGhlIHBlcm1hbGluay4gIFRoaXMgc29sdXRpb24KK2xldmVyYWdlcyB0aGUgZmFjdCB0aGF0IHJpZ2h0IG5vdyB0aGlzIHNlY3Rpb24gaW4gdGhlIHJlZi1tYW51YWwgaXMgdGhlIG9ubHkKK3BsYWNlIGlzIGFsbCB0aGUgWVAgZG9jcyB0aGF0IHVzZXMgdGhlIDxwYXJhPjxjb2RlPiBjb25zdHJ1Y3QuICBJZiwgaW4gdGhlCitmdXR1cmUsIHRoYXQgY29uc3RydWN0IHdlcmUgdG8gYXBwZWFyIGluIHRoZSByZWYtbWFudWFsLCBhIGdlbmVyaWMgcGVybWFsaW5rCit3b3VsZCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSB0ZXh0IGJldHdlZW4gPGNvZGU+PC9jb2RlPi4gIElmIGEgYmV0dGVyIHNvbHV0aW9uCitjYW4gYmUgZm91bmQgdGhlbiBpdCBzaG91bGQgYmUgaW1wbGVtZW50ZWQuICBJIGNhbid0IGZpbmQgb25lIGF0IHRoZSBtb21lbnQuCistLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1saWJleGVjJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6ICZsdDtwYXRoJmd0OyBpcyB1c2luZyBsaWJleGVjIHBsZWFzZSByZWxvY2F0ZSB0byAmbHQ7bGliZXhlY2RpciZndDsgW2xpYmV4ZWNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBwYWNrYWdlIGNvbnRhaW5zIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYmV4ZWM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPmxpYmV4ZWNkaXI8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgIiR7bGliZGlyfS8ke0JQTn0iIHJhdGhlciB0aGFuIHRvICIvdXNyL2xpYmV4ZWMiLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBpbnN0YWxsaW5nIHRvIDxmaWxlbmFtZT4vdXNyL2xpYmV4ZWM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBsaWtlbHkgbm90IGRlc2lyYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXJwYXRocyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBwYWNrYWdlICZsdDtwYWNrYWdlbmFtZSZndDsgY29udGFpbnMgYmFkIFJQQVRIICZsdDtycGF0aCZndDsgaW4gZmlsZSAmbHQ7ZmlsZSZndDsgW3JwYXRoc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIGJpbmFyeSBwcm9kdWNlZCBieSB0aGUgcmVjaXBlIGNvbnRhaW5zIGR5bmFtaWMKKyAgICAgICAgICAgICAgICAgICAgbGlicmFyeSBsb2FkIHBhdGhzIChycGF0aHMpIHRoYXQgY29udGFpbiBidWlsZCBzeXN0ZW0gcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBhcmUgaW5jb3JyZWN0IGZvciB0aGUgdGFyZ2V0IGFuZCBjb3VsZCBwb3RlbnRpYWxseQorICAgICAgICAgICAgICAgICAgICBiZSBhIHNlY3VyaXR5IGlzc3VlLgorICAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgYmFkIDxmaWxlbmFtZT4tcnBhdGg8L2ZpbGVuYW1lPiBvcHRpb25zIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgbGlua2VyIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGxvZy4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQsIHRoZXJlIG1pZ2h0IGJlIGEgY29uZmlndXJlIG9wdGlvbiB0byBkaXNhYmxlIHJwYXRoCisgICAgICAgICAgICAgICAgICAgIHVzYWdlIGNvbXBsZXRlbHkgd2l0aGluIHRoZSBidWlsZCBvZiB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS11c2VsZXNzLXJwYXRocyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7OiAmbHQ7ZmlsZSZndDsgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIICZsdDtycGF0aCZndDsgW3VzZWxlc3MtcnBhdGhzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgYmluYXJ5IHByb2R1Y2VkIGJ5IHRoZSByZWNpcGUgY29udGFpbnMgZHluYW1pYworICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IGxvYWQgcGF0aHMgKHJwYXRocykgdGhhdCBvbiBhIHN0YW5kYXJkIHN5c3RlbSBhcmUKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoZWQgYnkgZGVmYXVsdCBieSB0aGUgbGlua2VyIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4vdXNyL2xpYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgV2hpbGUgdGhlc2UgcGF0aHMgd2lsbCBub3QgY2F1c2UgYW55IGJyZWFrYWdlLCB0aGV5IGRvIHdhc3RlCisgICAgICAgICAgICAgICAgICAgIHNwYWNlIGFuZCBhcmUgdW5uZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0LCB0aGVyZSBtaWdodCBiZSBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gZGlzYWJsZSBycGF0aAorICAgICAgICAgICAgICAgICAgICB1c2FnZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgYnVpbGQgb2YgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZmlsZS1yZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHJlcXVpcmVzICZsdDtmaWxlcyZndDssIGJ1dCBubyBwcm92aWRlcnMgaW4gaXRzIFJERVBFTkRTIFtmaWxlLXJkZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgZmlsZS1sZXZlbCBkZXBlbmRlbmN5IGhhcyBiZWVuIGlkZW50aWZpZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHBhY2thZ2Ugb24gdGhlIHNwZWNpZmllZCBmaWxlcywgYnV0IHRoZXJlIGlzCisgICAgICAgICAgICAgICAgICAgIG5vIGV4cGxpY2l0IGNvcnJlc3BvbmRpbmcgZW50cnkgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIHBhcnRpY3VsYXIgZmlsZXMgYXJlIHJlcXVpcmVkIGF0IHJ1bnRpbWUgdGhlbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBzaG91bGQgYmUgZGVjbGFyZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB0byBlbnN1cmUgdGhlIHBhY2thZ2VzIHByb3ZpZGluZyB0aGVtIGFyZSBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWJ1aWxkLWRlcHMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lMSZndDsgcmRlcGVuZHMgb24gJmx0O3BhY2thZ2VuYW1lMiZndDssIGJ1dCBpdCBpc24ndCBhIGJ1aWxkIGRlcGVuZGVuY3k/IFtidWlsZC1kZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgcnVudGltZSBkZXBlbmRlbmN5IGV4aXN0cyBiZXR3ZWVuIHRoZSB0d28gc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLCBidXQgdGhlcmUgaXMgbm90aGluZyBleHBsaWNpdCB3aXRoaW4gdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICB0byBlbmFibGUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBpcyBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZGl0aW9uIGlzIHVzdWFsbHkgdHJpZ2dlcmVkIGJ5IGFuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlIGJlaW5nIGFkZGVkIGF0IHRoZSBwYWNrYWdpbmcgc3RhZ2UgcmF0aGVyIHRoYW4gdXAKKyAgICAgICAgICAgICAgICAgICAgZnJvbnQsIHdoaWNoIGlzIHVzdWFsbHkgYXV0b21hdGljIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCBjaGFuZ2UgdGhlIHJlY2lwZSB0byBhZGQgYW4KKyAgICAgICAgICAgICAgICAgICAgZXhwbGljaXQgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gZm9yIHRoZSBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGV2LXNvJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIG5vbiAtZGV2Ly1kYmcvbmF0aXZlc2RrLSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmsgLnNvOiAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHBhdGggJyZsdDtwYXRoJmd0OycgW2Rldi1zb10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTeW1saW5rIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlcyBhcmUgZm9yIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIG9ubHksIGFuZCBzaG91bGQgdGhlcmVmb3JlIGdvIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2NjdXIgaWYgeW91IGFkZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zbyo8L2ZpbGVuYW1lPiByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zby4qPC9maWxlbmFtZT4gdG8gYSBub24tZGV2IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIENoYW5nZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoYW5kIHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgdGhlIHNwZWNpZmllZCA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSBnb2VzCisgICAgICAgICAgICAgICAgICAgIGludG8gYW4gYXBwcm9wcmlhdGUgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtc3RhdGljZGV2Jz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIG5vbiAtc3RhdGljZGV2IHBhY2thZ2UgY29udGFpbnMgc3RhdGljIC5hIGxpYnJhcnk6ICZsdDtwYWNrYWdlbmFtZSZndDsgcGF0aCAnJmx0O3BhdGgmZ3Q7JyBbc3RhdGljZGV2XQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN0YXRpYyA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBsaWJyYXJ5IGZpbGVzIHNob3VsZCBnbyBpbnRvCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPi1zdGF0aWNkZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBDaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGFuZCBwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgc3VjaCB0aGF0IHRoZSBzcGVjaWZpZWQgPGZpbGVuYW1lPi5hPC9maWxlbmFtZT4gZmlsZSBnb2VzCisgICAgICAgICAgICAgICAgICAgIGludG8gYW4gYXBwcm9wcmlhdGUgPGZpbGVuYW1lPi1zdGF0aWNkZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtbGliZGlyJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6IGZvdW5kIGxpYnJhcnkgaW4gd3JvbmcgbG9jYXRpb24gW2xpYmRpcl0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIGZpbGUgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgaW50byBhbiBpbmNvcnJlY3QKKyAgICAgICAgICAgICAgICAgICAgKHBvc3NpYmx5IGhhcmRjb2RlZCkgaW5zdGFsbGF0aW9uIHBhdGguCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHRlc3Qgd2lsbCBjYXRjaCByZWNpcGVzIHRoYXQgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2xpYi9iYXIuc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+IGlzICJsaWIzMiIuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyB3aGVuIHJlY2lwZXMgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWI2NC9mb28uc288L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2xpYmRpcn08L2ZpbGVuYW1lPiBpcyAiL3Vzci9saWIiLgorICAgICAgICAgICAgICAgICAgICBGYWxzZSBwb3NpdGl2ZXMgb2NjYXNpb25hbGx5IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMgYWRkICJsaWJkaXIiIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRlYnVnLWZpbGVzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIG5vbiBkZWJ1ZyBwYWNrYWdlIGNvbnRhaW5zIC5kZWJ1ZyBkaXJlY3Rvcnk6ICZsdDtwYWNrYWdlbmFtZSZndDsgcGF0aCAmbHQ7cGF0aCZndDsgW2RlYnVnLWZpbGVzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgcGFja2FnZSBjb250YWlucyBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHdoaWNoIHNob3VsZCBub3QKKyAgICAgICAgICAgICAgICAgICAgYXBwZWFyIGluIGFueXRoaW5nIGJ1dCB0aGUgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBtaWdodCBvY2N1ciBpZiB5b3UgYWRkIGEgcGF0aCB3aGljaCBjb250YWlucworICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGRvIG5vdAorICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IGFkZCB0aGUgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBhZGQgdGhlIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZXhwbGljaXRseSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfJHtQTn0tZGJnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWFyY2gnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgQXJjaGl0ZWN0dXJlIGRpZCBub3QgbWF0Y2ggKCZsdDttYWNoaW5lX2FyY2gmZ3Q7IHRvICZsdDtmaWxlX2FyY2gmZ3Q7KSBvbiAmbHQ7ZmlsZSZndDsgW2FyY2hdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzIHRoZQorICAgICAgICAgICAgICAgICAgICBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwgYml0IHNpemUsIGFuZAorICAgICAgICAgICAgICAgICAgICBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUgdGhleSBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSB3cm9uZyBjb21waWxlciBvciBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnlwYXNzIHRoaXMgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIHlvdSByZWNlaXZlIHRoZSBlcnJvciBmb3IgaXMgZmlybXdhcmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBpcyBpbnRlbmRlZCB0byBydW4gb24gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3Igd2l0aGluIHRoZSBkZXZpY2UsIHlvdSBjYW4gYWRkICJhcmNoIiB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIGNoZWNrIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgb3B0aW9ucyBiZWluZyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGFyZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXJjaC1iaXQtc2l6ZS1uby1tYXRjaCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBCaXQgc2l6ZSBkaWQgbm90IG1hdGNoICgmbHQ7bWFjaGluZV9iaXRzJmd0OyB0byAmbHQ7ZmlsZV9iaXRzJmd0OykgJmx0O3JlY2lwZSZndDsgb24gJmx0O2ZpbGUmZ3Q7IFthcmNoXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNoZWNrcworICAgICAgICAgICAgICAgICAgICB0aGUgRXhlY3V0YWJsZSBhbmQgTGlua2FibGUgRm9ybWF0IChFTEYpIHR5cGUsCisgICAgICAgICAgICAgICAgICAgIGJpdCBzaXplLCBhbmQgZW5kaWFubmVzcyBvZiBhbnkgYmluYXJpZXMgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIHRoZXkgbWF0Y2ggdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdGVzdCBmYWlscyBpZiBhbnkgYmluYXJpZXMgZG8gbm90IG1hdGNoIHRoZSB0eXBlIHNpbmNlCisgICAgICAgICAgICAgICAgICAgIHRoZXJlIHdvdWxkIGJlIGFuIGluY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRlc3QgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUgd3JvbmcgY29tcGlsZXIgb3IgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBoYXZlIGJlZW4gdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHNvZnR3YXJlLCBsaWtlIGJvb3Rsb2FkZXJzLCBtaWdodCBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ5cGFzcyB0aGlzIGNoZWNrLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZSB5b3UgcmVjZWl2ZSB0aGUgZXJyb3IgZm9yIGlzIGZpcm13YXJlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaXMgbm90IGludGVuZGVkIHRvIGJlIGV4ZWN1dGVkIHdpdGhpbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0gb3IgaXMgaW50ZW5kZWQgdG8gcnVuIG9uIGEgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yIHdpdGhpbiB0aGUgZGV2aWNlLCB5b3UgY2FuIGFkZCAiYXJjaCIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBBbm90aGVyIG9wdGlvbiBpcyB0byBjaGVjayB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGxvZyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNvbXBpbGVyIG9wdGlvbnMgYmVpbmcgdXNlZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWFyY2gtZW5kaWFubmVzcy1uby1tYXRjaCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBFbmRpYW5uZXNzIGRpZCBub3QgbWF0Y2ggKCZsdDttYWNoaW5lX2VuZGlhbm5lc3MmZ3Q7IHRvICZsdDtmaWxlX2VuZGlhbm5lc3MmZ3Q7KSBvbiAmbHQ7ZmlsZSZndDsgW2FyY2hdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzCisgICAgICAgICAgICAgICAgICAgIHRoZSBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwgYml0CisgICAgICAgICAgICAgICAgICAgIHNpemUsIGFuZCBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUgdGhleQorICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSB3cm9uZyBjb21waWxlciBvciBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnlwYXNzIHRoaXMgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIHlvdSByZWNlaXZlIHRoZSBlcnJvciBmb3IgaXMgZmlybXdhcmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBpcyBpbnRlbmRlZCB0byBydW4gb24gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3Igd2l0aGluIHRoZSBkZXZpY2UsIHlvdSBjYW4gYWRkICJhcmNoIiB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIGNoZWNrIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgb3B0aW9ucyBiZWluZyB1c2VkCisgICAgICAgICAgICAgICAgICAgIGFyZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtdGV4dHJlbCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBFTEYgYmluYXJ5ICcmbHQ7ZmlsZSZndDsnIGhhcyByZWxvY2F0aW9ucyBpbiAudGV4dCBbdGV4dHJlbF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIEVMRiBiaW5hcnkgY29udGFpbnMgcmVsb2NhdGlvbnMgaW4gaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4udGV4dDwvZmlsZW5hbWU+IHNlY3Rpb25zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBjYW4gcmVzdWx0IGluIGEgcGVyZm9ybWFuY2UgaW1wYWN0CisgICAgICAgICAgICAgICAgICAgIGF0IHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgdGhlIHdheSB0byBzb2x2ZSB0aGlzIHBlcmZvcm1hbmNlIGlzc3VlIGlzIHRvCisgICAgICAgICAgICAgICAgICAgIGFkZCAiLWZQSUMiIG9yICItZnBpYyIgdG8gdGhlIGNvbXBpbGVyIGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZ2l2ZW4gc29mdHdhcmUgdGhhdCByZWFkcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZW4geW91IGJ1aWxkIGl0LCB5b3UgY291bGQgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRleHQgcmVsb2NhdGlvbnMgYXQgcnVudGltZSwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuYWtrYWRpYS5vcmcvZHJlcHBlci90ZXh0cmVsb2NzLmh0bWwnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtbGRmbGFncyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeTogJyZsdDtmaWxlJmd0OycgW2xkZmxhZ3NdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpbmRpY2F0ZXMgdGhhdCBiaW5hcmllcyBwcm9kdWNlZCB3aGVuIGJ1aWxkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUgaGF2ZSBub3QgYmVlbiBsaW5rZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdG8gYmUgc3VyZSB0aGF0IHRoZSA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGJlaW5nIHBhc3NlZCB0byB0aGUgbGlua2VyIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIHdvcmthcm91bmQgZm9yIHRoaXMgc2l0dWF0aW9uIGlzIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPiB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NDX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQ0NfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHJlY2lwZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS14b3JnLWRyaXZlci1hYmknPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgUGFja2FnZSAmbHQ7cGFja2FnZW5hbWUmZ3Q7IGNvbnRhaW5zIFhvcmcgZHJpdmVyICgmbHQ7ZHJpdmVyJmd0OykgYnV0IG5vIHhvcmctYWJpLSBkZXBlbmRlbmNpZXMgW3hvcmctZHJpdmVyLWFiaV0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHBhY2thZ2UgY29udGFpbnMgYW4gWG9yZyBkcml2ZXIsIGJ1dCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBoYXZlIGEgY29ycmVzcG9uZGluZyBBQkkgcGFja2FnZSBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgICAgICBUaGUgeHNlcnZlci14b3JnIHJlY2lwZSBwcm92aWRlcyBkcml2ZXIgQUJJIG5hbWVzLgorICAgICAgICAgICAgICAgICAgICBBbGwgZHJpdmVycyBzaG91bGQgZGVwZW5kIG9uIHRoZSBBQkkgdmVyc2lvbnMgdGhhdCB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgYmVlbiBidWlsdCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgICAgICBEcml2ZXIgcmVjaXBlcyB0aGF0IGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhvcmctZHJpdmVyLWlucHV0LmluYzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54b3JnLWRyaXZlci12aWRlby5pbmM8L2ZpbGVuYW1lPiB3aWxsCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZ2V0IHRoZXNlIHZlcnNpb25zLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyB0byBiaW5hcnkgZHJpdmVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1pbmZvZGlyJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIFRoZSAvdXNyL3NoYXJlL2luZm8vZGlyIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIHNoaXBwZWQgaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UuIFtpbmZvZGlyXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+L3Vzci9zaGFyZS9pbmZvL2RpcjwvZmlsZW5hbWU+IHNob3VsZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWQuCisgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBvciB0byB5b3VyIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm0gJHtEfSR7aW5mb2Rpcn0vZGlyCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXN5bWxpbmstdG8tc3lzcm9vdCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBTeW1saW5rICZsdDtwYXRoJmd0OyBpbiAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHBvaW50cyB0byBUTVBESVIgW3N5bWxpbmstdG8tc3lzcm9vdF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHN5bWxpbmsgcG9pbnRzIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgU3VjaCBzeW1saW5rcyB3aWxsIHdvcmsgb24gdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXkgYXJlIGNsZWFybHkgaW52YWxpZCB3aGVuIHJ1bm5pbmcgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBlaXRoZXIgY29ycmVjdCB0aGUgc3ltbGluayB0byB1c2UgYSByZWxhdGl2ZQorICAgICAgICAgICAgICAgICAgICBwYXRoIG9yIHJlbW92ZSB0aGUgc3ltbGluay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWxhJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtmaWxlJmd0OyBmYWlsZWQgc2FuaXR5IHRlc3QgKHdvcmtkaXIpIGluIHBhdGggJmx0O3BhdGgmZ3Q7IFtsYV0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIDxmaWxlbmFtZT4ubGE8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuCisgICAgICAgICAgICAgICAgICAgIEFueSA8ZmlsZW5hbWU+LmxhPC9maWxlbmFtZT4gZmlsZSBjb250YWluaW5nIHRoZXNlIHBhdGhzCisgICAgICAgICAgICAgICAgICAgIGlzIGluY29ycmVjdCBzaW5jZSA8ZmlsZW5hbWU+bGlidG9vbDwvZmlsZW5hbWU+IGFkZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXggd2hlbiB1c2luZyB0aGUgZmlsZXMgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wa2djb25maWcnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O2ZpbGUmZ3Q7IGZhaWxlZCBzYW5pdHkgdGVzdCAodG1wZGlyKSBpbiBwYXRoICZsdDtwYXRoJmd0OyBbcGtnY29uZmlnXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgPGZpbGVuYW1lPi5wYzwvZmlsZW5hbWU+IGZpbGUgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT4vPC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuCisgICAgICAgICAgICAgICAgICAgIEFueSA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZSBjb250YWluaW5nIHRoZXNlIHBhdGhzIGlzCisgICAgICAgICAgICAgICAgICAgIGluY29ycmVjdCBzaW5jZSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGl0c2VsZiBhZGRzCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb3JyZWN0IHN5c3Jvb3QgcHJlZml4IHdoZW4gdGhlIGZpbGVzIGFyZSBhY2Nlc3NlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRlYnVnLWRlcHMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OyByZGVwZW5kcyBvbiAmbHQ7ZGVidWdfcGFja2FnZW5hbWUmZ3Q7IFtkZWJ1Zy1kZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgZGVwZW5kZW5jeSBleGlzdHMgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIG5vbi1kYmcgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiBhIHBhY2thZ2Ugd2hvc2UgbmFtZSBkb2VzIG5vdCBlbmQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPikgYW5kIGEgcGFja2FnZSB0aGF0IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZXMgY29udGFpbgorICAgICAgICAgICAgICAgICAgICBkZWJ1ZyBzeW1ib2xzIGFuZCBhcmUgYnJvdWdodCBpbiB1c2luZyBzZXZlcmFsCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBtZXRob2RzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGJnLXBrZ3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSBkZXBlbmRlbmN5IG9mIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZSB0aGF0IHdhcyBicm91Z2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdXNpbmcgb25lIG9mIHRoZSBhYm92ZSBtZXRob2RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgbWlnaHQgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUgPGZpbGVuYW1lPmRiZzwvZmlsZW5hbWU+IHBhY2thZ2UgZXJyb25lb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgZmlsZXMgdGhhdCBpdCBzaG91bGQgbm90IGNvbnRhaW4gKGUuZy4gYQorICAgICAgICAgICAgICAgICAgICBub24tc3ltbGluayA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSkgb3IgaXQgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIGFkZGVkIG1hbnVhbGx5IChlLmcuIGJ5IGFkZGluZyB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1kZXYtZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHJkZXBlbmRzIG9uICZsdDtkZXZfcGFja2FnZW5hbWUmZ3Q7IFtkZXYtZGVwc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGRlcGVuZGVuY3kgZXhpc3RzIGJldHdlZW4gdGhlIHNwZWNpZmllZCBub24tZGV2IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKGEgcGFja2FnZSB3aG9zZSBuYW1lIGRvZXMgbm90IGVuZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+KSBhbmQgYSBwYWNrYWdlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2PC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcyBjb250YWluIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgYW5kIGFyZSB1c3VhbGx5IGJyb3VnaHQgaW4gdXNpbmcgc2V2ZXJhbCBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgPGZpbGVuYW1lPmRldi1wa2dzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGEgZGVwZW5kZW5jeSBvZiBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldjwvZmlsZW5hbWU+IHBhY2thZ2UgdGhhdCB3YXMgYnJvdWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVzaW5nIG9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZXBlbmRlbmN5IG1pZ2h0IGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IGFkZGVkIChiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGV2PC9maWxlbmFtZT4gcGFja2FnZSBlcnJvbmVvdXNseSBjb250YWlucworICAgICAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IGl0IHNob3VsZCBub3QgaGF2ZSAoZS5nLiBhIG5vbi1zeW1saW5rCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlKSBvciBpdCBtaWdodCBoYXZlIGJlZW4gYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkgKGUuZy4gYnkgYWRkaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRlcC1jbXAnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3ZhciZndDtfJmx0O3BhY2thZ2VuYW1lJmd0OyBpcyBpbnZhbGlkOiAmbHQ7Y29tcGFyaXNvbiZndDsgKCZsdDt2YWx1ZSZndDspICAgb25seSBjb21wYXJpc29ucyAmbHQ7LCA9LCAmZ3Q7LCAmbHQ7PSwgYW5kICZndDs9IGFyZSBhbGxvd2VkIFtkZXAtY21wXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgYWRkaW5nIGEgdmVyc2lvbmVkIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIHRvIG9uZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZGVwZW5kZW5jeSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRVBMQUNFUyc+PGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgeW91IG11c3Qgb25seSB1c2UgdGhlIG5hbWVkIGNvbXBhcmlzb24gb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgdGhlIHZlcnNpb25lZCBkZXBlbmRlbmN5IHZhbHVlcyB5b3UgYXJlIGFkZGluZworICAgICAgICAgICAgICAgICAgICB0byBtYXRjaCB0aG9zZSBsaXN0ZWQgaW4gdGhlIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1jb21waWxlLWhvc3QtcGF0aCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cmVjaXBlbmFtZSZndDs6IFRoZSBjb21waWxlIGxvZyBpbmRpY2F0ZXMgdGhhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2VyZSB1c2VkLiBQbGVhc2UgY2hlY2sgdGhlIGxvZyAnJmx0O2xvZ2ZpbGUmZ3Q7JyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gW2NvbXBpbGUtaG9zdC1wYXRoXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2cgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBpbmRpY2F0ZXMgdGhhdCBwYXRocyBvbiB0aGUgaG9zdCB3ZXJlIHNlYXJjaGVkCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlcywgd2hpY2ggaXMgbm90IGFwcHJvcHJpYXRlIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorICAgICAgICAgICAgICAgICAgICBMb29rIGZvciAiaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbiIgb3IgIkNST1NTIENPTVBJTEUKKyAgICAgICAgICAgICAgICAgICAgQmFkbmVzcyIgaW4gdGhlIHNwZWNpZmllZCBsb2cgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWluc3RhbGwtaG9zdC1wYXRoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtyZWNpcGVuYW1lJmd0OzogVGhlIGluc3RhbGwgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuIFBsZWFzZSBjaGVjayB0aGUgbG9nICcmbHQ7bG9nZmlsZSZndDsnIGZvciBtb3JlIGluZm9ybWF0aW9uLiBbaW5zdGFsbC1ob3N0LXBhdGhdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvZyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluZGljYXRlcyB0aGF0IHBhdGhzIG9uIHRoZSBob3N0IHdlcmUgc2VhcmNoZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVzLCB3aGljaCBpcyBub3QgYXBwcm9wcmlhdGUgd2hlbiBjcm9zcy1jb21waWxpbmcuCisgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yICJpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIgorICAgICAgICAgICAgICAgICAgICBvciAiQ1JPU1MgQ09NUElMRSBCYWRuZXNzIiBpbiB0aGUgc3BlY2lmaWVkIGxvZyBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXV0b2NvbmYtbG9nJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIFRoaXMgYXV0b2NvbmYgbG9nIGluZGljYXRlcyBlcnJvcnMsIGl0IGxvb2tlZCBhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2hpbGUgZGV0ZXJtaW5pbmcgc3lzdGVtIGNhcGFiaWxpdGllcy4gUmVydW4gY29uZmlndXJlIHRhc2sgYWZ0ZXIgZml4aW5nIHRoaXMuIFRoZSBwYXRoIHdhcyAnJmx0O3BhdGgmZ3Q7JworICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2cgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW5kaWNhdGVzIHRoYXQgcGF0aHMgb24gdGhlIGhvc3Qgd2VyZSBzZWFyY2hlZAorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZXMsIHdoaWNoIGlzIG5vdCBhcHByb3ByaWF0ZSB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgImlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24iIG9yCisgICAgICAgICAgICAgICAgICAgICJDUk9TUyBDT01QSUxFIEJhZG5lc3MiIGluIHRoZSBzcGVjaWZpZWQgbG9nIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wa2duYW1lJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgZG9lc24ndCBtYXRjaCB0aGUgW2EtejAtOS4rLV0rIHJlZ2V4IFtwa2duYW1lXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb252ZW50aW9uIHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAoc29tZXRpbWVzIGVuZm9yY2VkIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgaXRzZWxmKSBpcyB0bworICAgICAgICAgICAgICAgICAgICByZXF1aXJlIHRoYXQgcGFja2FnZSBuYW1lcyBhcmUgYWxsIGxvd2VyIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRvIGFsbG93IGEgcmVzdHJpY3RlZCBzZXQgb2YgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciByZWNpcGUgbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGlzLCBvciB5b3UgYWRkCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgZG8gbm90IGNvbmZvcm0gdG8gdGhlIGNvbnZlbnRpb24sIHRoZW4geW91CisgICAgICAgICAgICAgICAgICAgIHdpbGwgcmVjZWl2ZSB0aGlzIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBSZW5hbWUgeW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIE9yLCBpZiB5b3UgaGF2ZSBhZGRlZCBhIG5vbi1jb25mb3JtaW5nIHBhY2thZ2UgbmFtZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiwgY2hhbmdlIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXVua25vd24tY29uZmlndXJlLW9wdGlvbic+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cmVjaXBlJmd0OzogY29uZmlndXJlIHdhcyBwYXNzZWQgdW5yZWNvZ25pemVkIG9wdGlvbnM6ICZsdDtvcHRpb25zJmd0OyBbdW5rbm93bi1jb25maWd1cmUtb3B0aW9uXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmUgc2NyaXB0IGlzIHJlcG9ydGluZyB0aGF0IHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgdW5yZWNvZ25pemVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBjb3VsZCBiZSBiZWNhdXNlIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgIHdlcmUgcHJldmlvdXNseSB2YWxpZCBidXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgT3IsIHRoZXJlIHdhcyBhIG1pc3Rha2Ugd2hlbiB0aGUgb3B0aW9ucyB3ZXJlIGFkZGVkCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVyZSBpcyBhbm90aGVyIG9wdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdW5zdXJlLCBjb25zdWx0IHRoZSB1cHN0cmVhbSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi4vY29uZmlndXJlIC0taGVscDwvZmlsZW5hbWU+IG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSB1cHN0cmVhbSBjaGFuZ2UgbG9nIG9yIHJlbGVhc2Ugbm90ZXMuCisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgd29ya2VkIG91dCB3aGF0IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgaXMsIHlvdSBjYW4gdXBkYXRlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IgdGhlIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VDT05GSUcnPjxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiB2YWx1ZXMgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wbi1vdmVycmlkZXMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgUmVjaXBlICZsdDtyZWNpcGVmaWxlJmd0OyBoYXMgUE4gb2YgIiZsdDtyZWNpcGVuYW1lJmd0OyIgd2hpY2ggaXMgaW4gT1ZFUlJJREVTLCB0aGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvci4gW3BuLW92ZXJyaWRlc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHJlY2lwZSBoYXMgYSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgdGhhdCBhcHBlYXJzIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIGlzIG5hbWVkIHN1Y2ggdGhhdCBpdHMgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgbWF0Y2hlcyBzb21ldGhpbmcgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gKGUuZy4gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaGFwcGVucyB0byBiZSB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgICAgIGl0IGNhbiBoYXZlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzaWdubWVudHMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfJHtQTn0gPSAieHl6IjwvZmlsZW5hbWU+IGVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIHR1cm4gaW50byA8ZmlsZW5hbWU+RklMRVMgPSAieHl6IjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBSZW5hbWUgeW91ciByZWNpcGUgKG9yIGlmIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IGlzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIHNldCBleHBsaWNpdGx5LCBjaGFuZ2UgdGhlIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IHZhbHVlKSBzbworICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBjb25mbGljdCBkb2VzIG5vdCBvY2N1ci4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtcGtndmFyY2hlY2snPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3JlY2lwZWZpbGUmZ3Q7OiBWYXJpYWJsZSAmbHQ7dmFyaWFibGUmZ3Q7IGlzIHNldCBhcyBub3QgYmVpbmcgcGFja2FnZSBzcGVjaWZpYywgcGxlYXNlIGZpeCB0aGlzLiBbcGtndmFyY2hlY2tdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2VydGFpbiB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPjxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVybTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RybTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFMTE9XX0VNUFRZJz48ZmlsZW5hbWU+QUxMT1dfRU1QVFk8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBhbHdheXMgYmUgc2V0IHNwZWNpZmljIHRvIGEgcGFja2FnZSAoaS5lLiB0aGV5CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZSBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EU18ke1BOfSA9ICJ2YWx1ZSI8L2ZpbGVuYW1lPiByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFMgPSAidmFsdWUiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcmVjZWl2ZSB0aGlzIGVycm9yLCBjb3JyZWN0IGFueSBhc3NpZ25tZW50cyB0byB0aGVzZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgd2l0aGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYWxyZWFkeS1zdHJpcHBlZCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBGaWxlICcmbHQ7ZmlsZSZndDsnIGZyb20gJmx0O3JlY2lwZW5hbWUmZ3Q7IHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISBbYWxyZWFkeS1zdHJpcHBlZF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQcm9kdWNlZCBiaW5hcmllcyBoYXZlIGFscmVhZHkgYmVlbiBzdHJpcHBlZCBwcmlvciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGV4dHJhY3RpbmcgZGVidWcgc3ltYm9scy4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgY29tbW9uIGZvciB1cHN0cmVhbSBzb2Z0d2FyZSBwcm9qZWN0cyB0byBkZWZhdWx0IHRvCisgICAgICAgICAgICAgICAgICAgIHN0cmlwcGluZyBkZWJ1ZyBzeW1ib2xzIGZvciBvdXRwdXQgYmluYXJpZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBkZWJ1Z2dpbmcgdG8gd29yayBvbiB0aGUgdGFyZ2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZXMsIHRoaXMgc3RyaXBwaW5nIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0LCBkaXNhYmxpbmcgdGhpcyBzdHJpcHBpbmcgY291bGQgYmUgYXMgZWFzeSBhcworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5aW5nIGFuIGFkZGl0aW9uYWwgY29uZmlndXJlIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90LCBkaXNhYmxpbmcgc3RyaXBwaW5nIG1pZ2h0IGludm9sdmUgcGF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBsYXR0ZXIgY2FzZSwgbG9vayBmb3IgcmVmZXJlbmNlcyB0byAic3RyaXAiIG9yCisgICAgICAgICAgICAgICAgICAgICJTVFJJUCIsIG9yIHRoZSAiLXMiIG9yICItUyIgY29tbWFuZC1saW5lIG9wdGlvbnMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIG9uIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lIChwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBjb21waWxlciBjb21tYW5kIGxpbmUgaWYgcHJlY2VkZWQgd2l0aCAiLVdsLCIpLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGluZyBzdHJpcHBpbmcgaGVyZSBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZCBiaW5hcmllcyB3aWxsIGJlIHVuc3RyaXBwZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNwbGl0cyBvdXQgZGVidWcKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgdG8gdGhlIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgdGhlbiBzdHJpcCB0aGUgc3ltYm9scyBmcm9tIHRoZSBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtcGFja2FnZXMtbGlzdCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiBbcGFja2FnZXMtbGlzdF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIG5hbWVzIG11c3QgYXBwZWFyIG9ubHkgb25jZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCByZWNlaXZlIHRoaXMgZXJyb3IgaWYgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgdG8gPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdGhhdCBpcworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZmlsZXMtaW52YWxpZCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBGSUxFUyB2YXJpYWJsZSBmb3IgcGFja2FnZSAmbHQ7cGFja2FnZW5hbWUmZ3Q7IGNvbnRhaW5zICcvLycgd2hpY2ggaXMgaW52YWxpZC4gQXR0ZW1wdGluZyB0byBmaXggdGhpcyBidXQgeW91IHNob3VsZCBjb3JyZWN0IHRoZSBtZXRhZGF0YS4gW2ZpbGVzLWludmFsaWRdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN0cmluZyAiLy8iIGlzIGludmFsaWQgaW4gYSBVbml4IHBhdGguCisgICAgICAgICAgICAgICAgICAgIENvcnJlY3QgYWxsIG9jY3VycmVuY2VzIHdoZXJlIHRoaXMgc3RyaW5nIGFwcGVhcnMgaW4gYQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgIi8iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtaW5zdGFsbGVkLXZzLXNoaXBwZWQnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgICZsdDtyZWNpcGVuYW1lJmd0OzogRmlsZXMvZGlyZWN0b3JpZXMgd2VyZSBpbnN0YWxsZWQgYnV0IG5vdCBzaGlwcGVkIFtpbnN0YWxsZWQtdnMtc2hpcHBlZF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBoYXZlIGJlZW4gaW5zdGFsbGVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgYnV0IGhhdmUgbm90IGJlZW4gaW5jbHVkZWQgaW4gYW55IHBhY2thZ2UgYnkgd2F5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRmlsZXMgdGhhdCBkbyBub3QgYXBwZWFyIGluIGFueSBwYWNrYWdlIGNhbm5vdCBiZSBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIGFuIGltYWdlIGxhdGVyIG9uIGluIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIGZpbGVzIHRvIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHlvdSB3YW50IHRoZW0gdG8gYXBwZWFyIGluIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gZm9yIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlIHRoZSBmaWxlcyBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBpZiB0aGUgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgbm90IG5lZWRlZCBpbiBhbnkgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1vbGQtYW5kLW5ldy1wYWNrYWdlLWFuZC12ZXJzaW9uLW5hbWVzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtvbGRwYWNrYWdlJmd0Oy0mbHQ7b2xkcGtndmVyc2lvbiZndDsgd2FzIHJlZ2lzdGVyZWQgYXMgc2hsaWIgcHJvdmlkZXIgZm9yICZsdDtsaWJyYXJ5Jmd0OywgY2hhbmdpbmcgaXQgdG8gJmx0O25ld3BhY2thZ2UmZ3Q7LSZsdDtuZXdwa2d2ZXJzaW9uJmd0OyBiZWNhdXNlIGl0IHdhcyBidWlsdCBsYXRlcgorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVzc2FnZSBtZWFucyB0aGF0IGJvdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZsdDtvbGRwYWNrYWdlJmd0OzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Jmx0O25ld3BhY2thZ2UmZ3Q7PC9maWxlbmFtZT4gcHJvdmlkZSB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGV4cGVjdCB0aGlzIG1lc3NhZ2Ugd2hlbiBhIHJlY2lwZSBoYXMgYmVlbiByZW5hbWVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgdGhlIG1lc3NhZ2UgbWlnaHQgaW5kaWNhdGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhIHByaXZhdGUgdmVyc2lvbiBvZiBhIGxpYnJhcnkgaXMgYmVpbmcgZXJyb25lb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgcGlja2VkIHVwIGFzIHRoZSBwcm92aWRlciBmb3IgYSBjb21tb24gbGlicmFyeS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgeW91IHNob3VsZCBhZGQgdGhlIGxpYnJhcnkncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZSBuYW1lIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUklWQVRFX0xJQlMnPjxmaWxlbmFtZT5QUklWQVRFX0xJQlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJlY2lwZSB0aGF0IHByb3ZpZGVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcml2YXRlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCis8IS0tCitIZXJlIGFyZSBzb21lIG1lc3NhZ2VzIHRoYXQgbWlnaHQgYmUgZG9jdW1lbnRlZCBpbiB0aGUgZnV0dXJlLgorUmlnaHQgbm93IHdlIGFyZSBub3QgZG9jdW1lbnRpbmcgdGhlbSBiZWNhdXNlIHRoZSBRQSBjaGVja3MgYXJlIG5vdAorZW5hYmxlZCBieSBkZWZhdWx0OgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBEZXNrdG9wIGZpbGUgaXNzdWU6ICZsdDtlcnJvciZndDsgW2Rlc2t0b3BdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5FRUQgQSBERVNDUklQVElPTiBBTkQgU09MVVRJT04KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7OiAmbHQ7ZmlsZSZndDssIGluc3RhbGxlZCBpbiB0aGUgYmFzZV9wcmVmaXgsIHJlcXVpcmVzIGEgc2hhcmVkIGxpYnJhcnkgdW5kZXIgZXhlY19wcmVmaXggKCZsdDtleGVjX3ByZWZpeCZ0O2cpIFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllc10KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTkVFRCBBIERFU0NSSVBUSU9OIEFORCBTT0xVVElPTgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6IEZvdW5kIGEgcmVmZXJlbmNlIHRvICZsdDtleGVjX3ByZWZpeCZndDsvIGluICZsdDtwYXRoJmd0OyAtIFNoZWxsIHNjcmlwdHMgaW4gYmFzZV9iaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciBzaG91bGQgbm90IHJlZmVyZW5jZSBhbnl0aGluZyBpbiBleGVjX3ByZWZpeCBbdW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0c10KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTkVFRCBBIERFU0NSSVBUSU9OIEFORCBTT0xVVElPTgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CistLT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLWFuZC1kaXNhYmxpbmctcWEtY2hlY2tzJz4KKyAgICA8dGl0bGU+Q29uZmlndXJpbmcgYW5kIERpc2FibGluZyBRQSBDaGVja3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gY29uZmlndXJlIHRoZSBRQSBjaGVja3MgZ2xvYmFsbHkgc28gdGhhdCBzcGVjaWZpYyBjaGVjaworICAgICAgICBmYWlsdXJlcyBlaXRoZXIgcmFpc2UgYSB3YXJuaW5nIG9yIGFuIGVycm9yIG1lc3NhZ2UsIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV0FSTl9RQSc+PGZpbGVuYW1lPldBUk5fUUE8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FUlJPUl9RQSc+PGZpbGVuYW1lPkVSUk9SX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5LgorICAgICAgICBZb3UgY2FuIGFsc28gZGlzYWJsZSBjaGVja3Mgd2l0aGluIGEgcGFydGljdWxhciByZWNpcGUgdXNpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gd29yayB3aXRoIHRoZSBRQSBjaGVja3MsIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgICAgICA8bm90ZT48dGl0bGU+VGlwPC90aXRsZT4KKyAgICAgICAgICAgIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgUUEgY2hlY2tzIGV4aXN0IGluIG9yZGVyIHRvCisgICAgICAgICAgICBkZXRlY3QgcmVhbCBvciBwb3RlbnRpYWwgcHJvYmxlbXMgaW4gdGhlIHBhY2thZ2VkIG91dHB1dC4KKyAgICAgICAgICAgIFNvIGV4ZXJjaXNlIGNhdXRpb24gd2hlbiBkaXNhYmxpbmcgdGhlc2UgY2hlY2tzLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTM5MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbApAQCAtMCwwICsxLDExNTMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtc3RydWN0dXJlJz4KKworPHRpdGxlPlNvdXJjZSBEaXJlY3RvcnkgU3RydWN0dXJlPC90aXRsZT4KKworPHBhcmE+CisgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPiBjb25zaXN0cyBvZiBzZXZlcmFsIGNvbXBvbmVudHMuCisgICAgVW5kZXJzdGFuZGluZyB0aGVtIGFuZCBrbm93aW5nIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQgaXMga2V5IHRvIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IHdlbGwuCisgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB0aGUgU291cmNlIERpcmVjdG9yeSBhbmQgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlvdXMKKyAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCis8L3BhcmE+CisKKzxwYXJhPgorICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXN0YWJsaXNoIGEgbG9jYWwgU291cmNlIERpcmVjdG9yeSBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSwgc2VlIHRoZQorICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvdWxpbms+IgorICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorPC9wYXJhPgorCis8bm90ZT4KKyAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIHRoYXQKKyAgICBjb250YWluIHNwYWNlcy4KKyAgICBCZSBzdXJlIHRoYXQgdGhlIFNvdXJjZSBEaXJlY3RvcnkgeW91IHVzZSBkb2VzIG5vdCBjb250YWluIHRoZXNlIHR5cGVzCisgICAgb2YgbmFtZXMuCis8L25vdGU+CisKKzxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZSc+CisgICAgPHRpdGxlPlRvcC1MZXZlbCBDb3JlIENvbXBvbmVudHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHRvcC1sZXZlbCBjb21wb25lbnRzIG9mIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlLWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJpdGJha2UvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaW5jbHVkZXMgYSBjb3B5IG9mIEJpdEJha2UgZm9yIGVhc2Ugb2YgdXNlLgorICAgICAgICAgICAgVGhlIGNvcHkgdXN1YWxseSBtYXRjaGVzIHRoZSBjdXJyZW50IHN0YWJsZSBCaXRCYWtlIHJlbGVhc2UgZnJvbQorICAgICAgICAgICAgdGhlIEJpdEJha2UgcHJvamVjdC4KKyAgICAgICAgICAgIEJpdEJha2UsIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICBpbnRlcnByZXRlciwgcmVhZHMgdGhlIFlvY3RvIFByb2plY3QgTWV0YWRhdGEgYW5kIHJ1bnMgdGhlIHRhc2tzCisgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoYXQgZGF0YS4KKyAgICAgICAgICAgIEZhaWx1cmVzIGFyZSB1c3VhbGx5IGZyb20gdGhlIE1ldGFkYXRhIGFuZCBub3QgZnJvbSBCaXRCYWtlIGl0c2VsZi4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgbW9zdCB1c2VycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwgdGhlCisgICAgICAgICAgICBtYWluIEJpdEJha2UgZXhlY3V0YWJsZSwgd2hpY2ggcmVzaWRlcyBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2Jpbi88L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHN0YXJ0cy4KKyAgICAgICAgICAgIFNvdXJjaW5nIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCAoZS5nLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ic3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgcGxhY2VzIHRoZSA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvYmluPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgKGluIHRoYXQgb3JkZXIpIGludG8KKyAgICAgICAgICAgIHRoZSBzaGVsbCdzIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1idWlsZCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdXNlciBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB0aGUgb3V0cHV0CisgICAgICAgICAgICBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW4gaXRzIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gd2hlcmUKKyAgICAgICAgICAgIHRoZSBzb3VyY2UgdHJlZSBpcyBjb21iaW5lZCB3aXRoIHRoZSBvdXRwdXQuCisgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaXMgY3JlYXRlZCBpbml0aWFsbHkgd2hlbiB5b3UgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcGxhY2Ugb3V0cHV0IGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlcyBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0ZSBmcm9tIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBieSBwcm92aWRpbmcgYSBkaXJlY3RvcnkgbmFtZSB3aGVuIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRoZSBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2VwYXJhdGluZyBvdXRwdXQgZnJvbSB5b3VyIGxvY2FsCisgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdoYW5kYm9vayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9jdW1lbnRhdGlvbi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBob2xkcyB0aGUgc291cmNlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICBhcyB3ZWxsIGFzIHRlbXBsYXRlcyBhbmQgdG9vbHMgdGhhdCBhbGxvdyB5b3UgdG8gZ2VuZXJhdGUgUERGIGFuZCBIVE1MCisgICAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgbWFudWFscy4KKyAgICAgICAgICAgIEVhY2ggbWFudWFsIGlzIGNvbnRhaW5lZCBpbiBhIHN1Yi1mb2xkZXIuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVzIGZvciB0aGlzIG1hbnVhbCByZXNpZGUgaW4KKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+cmVmLW1hbnVhbC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtbWV0YSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgT3BlbkVtYmVkZGVkIENvcmUgbWV0YWRhdGEuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGhvbGRzIHJlY2lwZXMsIGNvbW1vbiBjbGFzc2VzLCBhbmQgbWFjaGluZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgZW11bGF0ZWQgdGFyZ2V0cyAoPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4pCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtbWV0YS15b2N0byc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS15b2N0by88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFBva3kKKyAgICAgICAgICAgIHJlZmVyZW5jZSBkaXN0cmlidXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtbWV0YS15b2N0by1ic3AnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBZb2N0byBQcm9qZWN0IHJlZmVyZW5jZQorICAgICAgICAgICAgaGFyZHdhcmUgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCU1BzLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0CisgICAgICAgICAgICBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtc2VsZnRlc3QnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEtc2VsZnRlc3QvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgYWRkcyBhZGRpdGlvbmFsIHJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIHNlbGZ0ZXN0cyB0byB2ZXJpZnkgdGhlIGJlaGF2aW9yCisgICAgICAgICAgICBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gYWRkIHRoaXMgbGF5ZXIgdG8geW91cgorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHVubGVzcyB5b3Ugd2FudCB0byBydW4gdGhlCisgICAgICAgICAgICBzZWxmdGVzdHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtc2tlbGV0b24nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEtc2tlbGV0b24vPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGVtcGxhdGUgcmVjaXBlcyBmb3IgQlNQIGFuZCBrZXJuZWwgZGV2ZWxvcG1lbnQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0cyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+c2NyaXB0cy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB2YXJpb3VzIGludGVncmF0aW9uIHNjcmlwdHMgdGhhdCBpbXBsZW1lbnQKKyAgICAgICAgICAgIGV4dHJhIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQgKGUuZy4gUUVNVSBzY3JpcHRzKS4KKyAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBzY3JpcHRzIGFwcGVuZCB0aGlzIGRpcmVjdG9yeSB0byB0aGUgc2hlbGwncworICAgICAgICAgICAgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhhcyB1c2VmdWwgc2NyaXB0cyB0aGF0IGFzc2lzdCBpbiBjb250cmlidXRpbmcKKyAgICAgICAgICAgIGJhY2sgdG8gdGhlIFlvY3RvIFByb2plY3QsIHN1Y2ggYXMgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZW5kLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNjcmlwdCBpcyBvbmUgb2YgdHdvIHNjcmlwdHMgdGhhdCBzZXQgdXAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIG90aGVyIHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgc2NyaXB0IHdpdGggdGhlIDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiBjb21tYW5kIGluCisgICAgICAgICAgICBhIHNoZWxsIG1ha2VzIGNoYW5nZXMgdG8gPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBhbmQgc2V0cyBvdGhlcgorICAgICAgICAgICAgY29yZSBCaXRCYWtlIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYmVmb3JlIHJ1bm5pbmcgQml0QmFrZQorICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICBUaGUgc2NyaXB0IHVzZXMgb3RoZXIgc2NyaXB0cyB3aXRoaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0czwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0byBkbyB0aGUgYnVsayBvZiB0aGUgd29yay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoaXMgc2NyaXB0LCB5b3VyIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQgaXMgc2V0CisgICAgICAgICAgICB1cCwgYQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaXMgY3JlYXRlZCwgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBiZWNvbWVzIHRoZSBCdWlsZCBEaXJlY3RvcnksCisgICAgICAgICAgICBhbmQgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2YgY29tbW9uIEJpdEJha2UgdGFyZ2V0cy4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKworICAgICAjIyMgU2hlbGwgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBidWlsZHMuICMjIworCisgICAgIFlvdSBjYW4gbm93IHJ1biAnYml0YmFrZSAmbHQ7dGFyZ2V0Jmd0OycKKworICAgICBDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgICAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgbWV0YS10b29sY2hhaW4KKyAgICAgICAgIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgIG1ldGEtaWRlLXN1cHBvcnQKKworICAgICBZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgc2NyaXB0IGdldHMgaXRzIGRlZmF1bHQgbGlzdCBvZiBjb21tb24gdGFyZ2V0cyBmcm9tIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTaG91bGQgeW91IGhhdmUgY3VzdG9tIGRpc3RyaWJ1dGlvbnMsIGl0IGlzIHZlcnkgZWFzeSB0byBtb2RpZnkKKyAgICAgICAgICAgIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHRvIGluY2x1ZGUgeW91ciB0YXJnZXRzIGZvciB5b3VyCisgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1jdXN0b20tdGVtcGxhdGUtY29uZmlndXJhdGlvbi1kaXJlY3RvcnknPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aG91dCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhcmd1bWVudCBjcmVhdGVzIHRoZSA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgIGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIElmIHlvdSBwcm92aWRlIGEgQnVpbGQgRGlyZWN0b3J5IGFyZ3VtZW50IHdoZW4geW91CisgICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHNjcmlwdCwgeW91IGRpcmVjdCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIGEgQnVpbGQgRGlyZWN0b3J5IG9mIHlvdXIgY2hvaWNlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBjcmVhdGVzIGEgQnVpbGQgRGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlidWlsZHM8L2ZpbGVuYW1lPiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlICZPRV9JTklUX0ZJTEU7IH4vbXlidWlsZHMKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzLCB3aGljaCBhcmUgZm91bmQgYnkgZGVmYXVsdCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1jdXN0b20tdGVtcGxhdGUtY29uZmlndXJhdGlvbi1kaXJlY3RvcnknPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjb250YWluIHNwYWNlcy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXR0ZW1wdCB0byBydW4gdGhlIDxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIGZyb20gYSBTb3VyY2UgRGlyZWN0b3J5IHRoYXQgY29udGFpbnMgc3BhY2VzIGluIGVpdGhlciB0aGUgZmlsZW5hbWVzCisgICAgICAgICAgICAgICAgb3IgZGlyZWN0b3J5IG5hbWVzLCB0aGUgc2NyaXB0IHJldHVybnMgYW4gZXJyb3IgaW5kaWNhdGluZyBubyBzdWNoCisgICAgICAgICAgICAgICAgZmlsZSBvciBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB1c2UgYSBTb3VyY2UgRGlyZWN0b3J5IGZyZWUgb2YgbmFtZXMgY29udGFpbmluZyBzcGFjZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzY3JpcHQgaXMgb25lIG9mIHR3byBzY3JpcHRzIHRoYXQgc2V0IHVwIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgQXNpZGUgZnJvbSBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCwgdGhpcyBzY3JpcHQgc3RhcnRzIGEKKyAgICAgICAgICAgIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlIHNlcnZlci4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgb3RoZXIgc2V0dXAgc2NyaXB0LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNZW1vcnktcmVzaWRlbnQgQml0QmFrZSByZXNpZGVzIGluIG1lbW9yeSB1bnRpbCB5b3Ugc3BlY2lmaWNhbGx5CisgICAgICAgICAgICByZW1vdmUgaXQgdXNpbmcgdGhlIGZvbGxvd2luZyBCaXRCYWtlIGNvbW1hbmQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtbQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgc2NyaXB0IHdpdGggdGhlIDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiBjb21tYW5kIGluCisgICAgICAgICAgICBhIHNoZWxsIG1ha2VzIGNoYW5nZXMgdG8gPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBhbmQgc2V0cyBvdGhlcgorICAgICAgICAgICAgY29yZSBCaXRCYWtlIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIE9uZSBvZiB0aGVzZSB2YXJpYWJsZXMgaXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJTRVJWRVInPjxmaWxlbmFtZT5CQlNFUlZFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBsb2NhdGUKKyAgICAgICAgICAgIHRoZSBzZXJ2ZXIgdGhhdCBpcyBydW5uaW5nIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYmVmb3JlIHVzaW5nIEJpdEJha2UKKyAgICAgICAgICAgIGNvbW1hbmRzLgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIHRoZSBzY3JpcHQgc3ludGF4OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgPHJlcGxhY2VhYmxlPnBvcnRfbnVtYmVyPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgY29uc2lkZXJhdGlvbnMgd2hlbiBzb3VyY2luZyB0aGlzIHNjcmlwdDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IHVzZXMgb3RoZXIgc2NyaXB0cyB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRvIGRvIHRoZSBidWxrIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIHBvcnQgbnVtYmVyIHdpdGggdGhlIHNjcmlwdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugc2VydmVyIHN0YXJ0cyBhdCBhIHJhbmRvbWx5IHNlbGVjdGVkIHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCdzIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWxseSBkZXBlbmRlbnQuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGNhbm5vdCBydW4gdGhlIHNjcmlwdCBhbmQgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgbmFtZSB3aXRob3V0IGFsc28gcHJvdmlkaW5nIGEgcG9ydCBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nIHN5bnRheCBpcyBpbGxlZ2FsOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXRidWlsZC1lbnYtbWVtcmVzIDxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIHJlc3RyaWN0aW9uIG1pZ2h0IGJlIHJlc29sdmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTUnPkJ1ZyA3NTU1PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGlzIHNjcmlwdCwgeW91ciBZb2N0byBQcm9qZWN0IGVudmlyb25tZW50IGlzIHNldAorICAgICAgICAgICAgdXAsIGEgQnVpbGQgRGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYmVjb21lcworICAgICAgICAgICAgdGhlIEJ1aWxkIERpcmVjdG9yeSwgYW5kIHlvdSBhcmUgcHJlc2VudGVkIHdpdGggYSBsaXN0IG9mIGNvbW1vbgorICAgICAgICAgICAgQml0QmFrZSB0YXJnZXRzLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMKKyAgICAgTm8gcG9ydCBzcGVjaWZpZWQsIHVzaW5nIGR5bmFtaWNhbGx5IHNlbGVjdGVkIHBvcnQKKworICAgICAjIyMgU2hlbGwgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBidWlsZHMuICMjIworCisgICAgIFlvdSBjYW4gbm93IHJ1biAnYml0YmFrZSAmbHQ7dGFyZ2V0Jmd0OycKKworICAgICBDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgICAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgbWV0YS10b29sY2hhaW4KKyAgICAgICAgIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgIG1ldGEtaWRlLXN1cHBvcnQKKworICAgICBZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCisgICAgIEJpdGJha2Ugc2VydmVyIGFkZHJlc3M6IDEyNy4wLjAuMSwgc2VydmVyIHBvcnQ6IDUzOTk1CisgICAgIEJpdGJha2Ugc2VydmVyIHN0YXJ0ZWQgb24gZGVtYW5kIGFzIG5lZWRlZCwgdXNlIGJpdGJha2UgLW0gdG8gc2h1dCBpdCBkb3duCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgc2NyaXB0IGdldHMgaXRzIGRlZmF1bHQgbGlzdCBvZiBjb21tb24gdGFyZ2V0cyBmcm9tIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYtbm90ZXMudHh0PC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTaG91bGQgeW91IGhhdmUgY3VzdG9tIGRpc3RyaWJ1dGlvbnMsIGl0IGlzIHZlcnkgZWFzeSB0byBtb2RpZnkKKyAgICAgICAgICAgIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHRvIGluY2x1ZGUgeW91ciB0YXJnZXRzIGZvciB5b3VyCisgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1jdXN0b20tdGVtcGxhdGUtY29uZmlndXJhdGlvbi1kaXJlY3RvcnknPkNyZWF0aW5nIGEgQ3VzdG9tIFRlbXBsYXRlIENvbmZpZ3VyYXRpb24gRGlyZWN0b3J5PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aG91dCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhcmd1bWVudCBjcmVhdGVzIGEgYnVpbGQgZGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIElmIHlvdSBwcm92aWRlIGEgQnVpbGQgRGlyZWN0b3J5IGFyZ3VtZW50IGFuZCBwb3J0IG51bWJlciB3aGVuIHlvdQorICAgICAgICAgICAgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSBzY3JpcHQsIHRoZSBCdWlsZCBEaXJlY3RvcnkgaXMKKyAgICAgICAgICAgIGNyZWF0ZWQgdXNpbmcgdGhhdCBuYW1lLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBzdGFydHMgdGhlIEJpdEJha2Ugc2VydmVyIHVzaW5nCisgICAgICAgICAgICBwb3J0IDUzOTk1IGFuZCBjcmVhdGVzIGEgQnVpbGQgRGlyZWN0b3J5IG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlidWlsZHM8L2ZpbGVuYW1lPiB0aGF0IGlzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcyA1Mzk5NSB+L215YnVpbGRzCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+IHNjcmlwdCBzdGFydHMgYQorICAgICAgICAgICAgbWVtb3J5IHJlc2lkZW50IEJpdEJha2Ugc2VydmVyLgorICAgICAgICAgICAgVGhpcyBCaXRCYWtlIGluc3RhbmNlIHVzZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1jb29rZXJkYWVtb24ubG9nPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMsIHdoaWNoIGFyZSBmb3VuZCBieSBkZWZhdWx0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBvcgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lcyB0aGF0IGNvbnRhaW4gc3BhY2VzLgorICAgICAgICAgICAgICAgIElmIHlvdSBhdHRlbXB0IHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgZnJvbSBhIFNvdXJjZSBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBzcGFjZXMgaW4gZWl0aGVyIHRoZQorICAgICAgICAgICAgICAgIGZpbGVuYW1lcyBvciBkaXJlY3RvcnkgbmFtZXMsIHRoZSBzY3JpcHQgcmV0dXJucyBhbiBlcnJvcgorICAgICAgICAgICAgICAgIGluZGljYXRpbmcgbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHVzZSBhIFNvdXJjZSBEaXJlY3RvcnkgZnJlZSBvZiBuYW1lcyBjb250YWluaW5nCisgICAgICAgICAgICAgICAgc3BhY2VzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1iYXNpYy10b3AtbGV2ZWwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPkxJQ0VOU0UsIFJFQURNRSwgYW5kIFJFQURNRS5oYXJkd2FyZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSBzdGFuZGFyZCB0b3AtbGV2ZWwgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQnPgorICAgIDx0aXRsZT5UaGUgQnVpbGQgRGlyZWN0b3J5IC0gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIHdoZW4geW91IHJ1biBvbmUgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdHMgKGkuZS4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgb3IKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBkbyBub3QgZ2l2ZSB0aGUgQnVpbGQgRGlyZWN0b3J5IGEgc3BlY2lmaWMgbmFtZSB3aGVuIHlvdSBydW4KKyAgICAgICAgYSBzZXR1cCBzY3JpcHQsIHRoZSBuYW1lIGRlZmF1bHRzIHRvIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRPUERJUic+PGZpbGVuYW1lPlRPUERJUjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICBwb2ludHMgdG8gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWJ1aWxkaGlzdG9yeSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvYnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyB0aGlzIGRpcmVjdG9yeSB3aGVuIHlvdQorICAgICAgICAgICAgZW5hYmxlIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmUuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRyYWNrcyBidWlsZCBpbmZvcm1hdGlvbiBpbnRvIGltYWdlLCBwYWNrYWdlcywgYW5kCisgICAgICAgICAgICBTREsgc3ViZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC1jb25mLWxvY2FsLmNvbmYnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL2NvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbG9jYWwgdXNlciBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgZm9yIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24gb24KKyAgICAgICAgICAgIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgIEFueSB2YXJpYWJsZSBzZXQgaGVyZSBvdmVycmlkZXMgYW55IHZhcmlhYmxlIHNldCBlbHNld2hlcmUgd2l0aGluCisgICAgICAgICAgICB0aGUgZW52aXJvbm1lbnQgdW5sZXNzIHRoYXQgdmFyaWFibGUgaXMgaGFyZC1jb2RlZCB3aXRoaW4gYSBmaWxlCisgICAgICAgICAgICAoZS5nLiBieSB1c2luZyAnPScgaW5zdGVhZCBvZiAnPz0nKS4KKyAgICAgICAgICAgIFNvbWUgdmFyaWFibGVzIGFyZSBoYXJkLWNvZGVkIGZvciB2YXJpb3VzIHJlYXNvbnMgYnV0IHRoZXNlCisgICAgICAgICAgICB2YXJpYWJsZXMgYXJlIHJlbGF0aXZlbHkgcmFyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRWRpdCB0aGlzIGZpbGUgdG8gc2V0IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NQUNISU5FPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmb3Igd2hpY2ggeW91IHdhbnQgdG8gYnVpbGQsIHdoaWNoIHBhY2thZ2UgdHlwZXMgeW91IHdpc2ggdG8gdXNlCisgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICBhbmQgdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggeW91IHdhbnQgdG8gYWNjZXNzIGRvd25sb2FkZWQgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+RExfRElSPC9saW5rPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBpcyBub3QgcHJlc2VudCB3aGVuIHlvdQorICAgICAgICAgICAgc3RhcnQgdGhlIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGl0IGZyb20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2V0dXAgc2NyaXB0IChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc291cmNlIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgdXNlZAorICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgPGZpbGVuYW1lPiRURU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBzY3JpcHQgdmFyaWFibGUsCisgICAgICAgICAgICB3aGljaCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHdoZW4geW91IGFyZSBidWlsZGluZyBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICBlbnZpcm9ubWVudCBhbmQgZGVmYXVsdHMgdG8gPGZpbGVuYW1lPm1ldGEvY29uZjwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSBhcmUgYnVpbGRpbmcgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIENvcmUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBCZWNhdXNlIHRoZSBzY3JpcHQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlLCB0aGlzIGltcGxpZXMgdGhhdAorICAgICAgICAgICAgeW91IGNhbiBjb25maWd1cmUgeW91ciBidWlsZCBlbnZpcm9ubWVudCBmcm9tIGFueSBsYXllciBieSBzZXR0aW5nCisgICAgICAgICAgICB0aGUgdmFyaWFibGUgaW4gdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFTVBMQVRFQ09ORj08cmVwbGFjZWFibGU+eW91cl9sYXllcjwvcmVwbGFjZWFibGU+L2NvbmYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIHByb2Nlc3MgZ2V0cyB0aGUgc2FtcGxlIGZpbGUsIGl0IHVzZXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiB0byBzdWJzdGl0dXRlIGZpbmFsCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1PRVJPT1QnPjxmaWxlbmFtZT5PRVJPT1Q8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YWx1ZXMgZm9yIGFsbCA8ZmlsZW5hbWU+IyNPRVJPT1QjIzwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIGhvdyB0aGUgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaXMgdXNlZCBieSBsb29raW5nIGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gc2NyaXB0IGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWNvbmYtYmJsYXllcnMuY29uZic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvY29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgZGVmaW5lcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5sYXllcnM8L3VsaW5rPiwKKyAgICAgICAgICAgIHdoaWNoIGFyZSBkaXJlY3RvcnkgdHJlZXMsIHRyYXZlcnNlZCAob3Igd2Fsa2VkKSBieSBCaXRCYWtlLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCTEFZRVJTJz48ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxpc3QgdGhlIGxheWVycyBCaXRCYWtlIHRyaWVzIHRvIGZpbmQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gaXMgbm90IHByZXNlbnQgd2hlbiB5b3UKKyAgICAgICAgICAgIHN0YXJ0IHRoZSBidWlsZCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyBpdCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICB5b3UgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHNldHVwIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNvdXJjZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlIHVzZWQKKyAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIDxmaWxlbmFtZT4kVEVNUExBVEVDT05GPC9maWxlbmFtZT4gc2NyaXB0IHZhcmlhYmxlLAorICAgICAgICAgICAgd2hpY2ggZGVmYXVsdHMgdG8gPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICB3aGVuIHlvdSBhcmUgYnVpbGRpbmcgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudAorICAgICAgICAgICAgZW52aXJvbm1lbnQgYW5kIGRlZmF1bHRzIHRvIDxmaWxlbmFtZT5tZXRhL2NvbmY8L2ZpbGVuYW1lPiB3aGVuCisgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIGZyb20gdGhlIE9wZW5FbWJlZGRlZCBDb3JlIGVudmlyb25tZW50LgorICAgICAgICAgICAgQmVjYXVzZSB0aGUgc2NyaXB0IHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc291cmNlIG9mIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSwgdGhpcyBpbXBsaWVzIHRoYXQKKyAgICAgICAgICAgIHlvdSBjYW4gYmFzZSB5b3VyIGJ1aWxkIGZyb20gYW55IGxheWVyIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIGluCisgICAgICAgICAgICB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURU1QTEFURUNPTkY9PHJlcGxhY2VhYmxlPnlvdXJfbGF5ZXI8L3JlcGxhY2VhYmxlPi9jb25mCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBwcm9jZXNzIGdldHMgdGhlIHNhbXBsZSBmaWxlLCBpdCB1c2VzCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4gdG8gc3Vic3RpdHV0ZSBmaW5hbAorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItT0VST09UJz48ZmlsZW5hbWU+T0VST09UPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFsdWVzIGZvciBhbGwgPGZpbGVuYW1lPiMjT0VST09UIyM8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSBob3cgdGhlIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gc2NyaXB0IGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWNvbmYtc2FuaXR5X2luZm8nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL2NvbmYvc2FuaXR5X2luZm88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGZpbGUgaW5kaWNhdGVzIHRoZSBzdGF0ZSBvZiB0aGUgc2FuaXR5IGNoZWNrcyBhbmQgaXMgY3JlYXRlZAorICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtZG93bmxvYWRzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC9kb3dubG9hZHMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZG93bmxvYWRlZCB1cHN0cmVhbSBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICBZb3UgY2FuIHJldXNlIHRoZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIGJ1aWxkcyBvciBtb3ZlCisgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRvIGFub3RoZXIgbG9jYXRpb24uCisgICAgICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5IHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+RExfRElSPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC1zc3RhdGUtY2FjaGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3NzdGF0ZS1jYWNoZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlLgorICAgICAgICAgICAgWW91IGNhbiByZXVzZSB0aGUgZGlyZWN0b3J5IGZvciBtdWx0aXBsZSBidWlsZHMgb3IgbW92ZQorICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0byBhbm90aGVyIGxvY2F0aW9uLgorICAgICAgICAgICAgWW91IGNhbiBjb250cm9sIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz5TU1RBVEVfRElSPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGFuZCB1c2VzIHRoaXMgZGlyZWN0b3J5CisgICAgICAgICAgICBmb3IgYWxsIHRoZSBidWlsZCBzeXN0ZW0ncyBvdXRwdXQuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBjcmVhdGVzIHRoaXMgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgQXMgYSBsYXN0IHJlc29ydCwgdG8gY2xlYW4gdXAgYSBidWlsZCBhbmQgc3RhcnQgaXQgZnJvbSBzY3JhdGNoCisgICAgICAgICAgICAob3RoZXIgdGhhbiB0aGUgZG93bmxvYWRzKSwgeW91IGNhbiByZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb3IgZ2V0IHJpZCBvZiB0aGUKKyAgICAgICAgICAgIGRpcmVjdG9yeSBjb21wbGV0ZWx5LgorICAgICAgICAgICAgSWYgeW91IGRvLCB5b3Ugc2hvdWxkIGFsc28gY29tcGxldGVseSByZW1vdmUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvc3N0YXRlLWNhY2hlPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtYnVpbGRzdGF0cyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2J1aWxkc3RhdHMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3Rvcnkgc3RvcmVzIHRoZSBidWlsZCBzdGF0aXN0aWNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtY2FjaGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9jYWNoZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIEJpdEJha2UgcGFyc2VzIHRoZSBtZXRhZGF0YSwgaXQgY3JlYXRlcyBhIGNhY2hlIGZpbGUgb2YgdGhlIHJlc3VsdCB0aGF0IGNhbgorICAgICAgICAgICAgYmUgdXNlZCB3aGVuIHN1YnNlcXVlbnRseSBydW5uaW5nIGNvbW1hbmRzLgorICAgICAgICAgICAgQml0QmFrZSBzdG9yZXMgdGhlc2UgcmVzdWx0cyBoZXJlIG9uIGEgcGVyLW1hY2hpbmUgYmFzaXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3knPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYW55ICJlbmQgcmVzdWx0IiBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiBhbmQKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktZGViJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L2RlYi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSByZWNlaXZlcyBhbnkgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgcGFja2FnZXMgYXJlIHNvcnRlZCBpbnRvIGZlZWRzIGZvciBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIHR5cGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LXJwbSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9ycG0vPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgcmVjZWl2ZXMgYW55IDxmaWxlbmFtZT4ucnBtPC9maWxlbmFtZT4gcGFja2FnZXMgcHJvZHVjZWQgYnkKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgVGhlIHBhY2thZ2VzIGFyZSBzb3J0ZWQgaW50byBmZWVkcyBmb3IgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSB0eXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveS1pcGsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvaXBrLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gcGFja2FnZXMgcHJvZHVjZWQgYnkKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LWxpY2Vuc2VzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L2xpY2Vuc2VzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIHBhY2thZ2UgbGljZW5zaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgc3ViLWRpcmVjdG9yaWVzIGZvciA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IChhbW9uZyBvdGhlcnMpIHRoYXQgaW4gdHVybgorICAgICAgICAgICAgY29udGFpbiBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+Q09QWUlORzwvZmlsZW5hbWU+IGxpY2Vuc2UgZmlsZXMgd2l0aCBvdGhlciBsaWNlbnNpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbGljZW5zaW5nLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktaW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L2ltYWdlcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSByZWNlaXZlcyBjb21wbGV0ZSBmaWxlc3lzdGVtIGltYWdlcy4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGZsYXNoIHRoZSByZXN1bHRpbmcgaW1hZ2UgZnJvbSBhIGJ1aWxkIG9udG8gYSBkZXZpY2UsIGxvb2sgaGVyZSBmb3IgdGhlIGltYWdlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZSBjYXJlZnVsIHdoZW4gZGVsZXRpbmcgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICBZb3UgY2FuIHNhZmVseSBkZWxldGUgb2xkIGltYWdlcyBmcm9tIHRoaXMgZGlyZWN0b3J5IChlLmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS0qPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5ob2ItaW1hZ2UtKjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgZXRjLikuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUga2VybmVsICg8ZmlsZW5hbWU+KnpJbWFnZSo8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPip1SW1hZ2UqPC9maWxlbmFtZT4sIGV0Yy4pLAorICAgICAgICAgICAgYm9vdGxvYWRlciBhbmQgb3RoZXIgc3VwcGxlbWVudGFyeSBmaWxlcyBtaWdodCBiZSBkZXBsb3llZCBoZXJlIHByaW9yIHRvIGJ1aWxkaW5nIGFuCisgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlc2UgZmlsZXMgYXJlIG5vdCBkaXJlY3RseSBwcm9kdWNlZCBmcm9tIHRoZSBpbWFnZSwgaWYgeW91CisgICAgICAgICAgICBkZWxldGUgdGhlbSB0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmUtY3JlYXRlZCB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2UgYWdhaW4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBhY2NpZGVudGFsbHkgZGVsZXRlIGZpbGVzIGhlcmUsIHlvdSB3aWxsIG5lZWQgdG8gZm9yY2UgdGhlbSB0byBiZQorICAgICAgICAgICAgcmUtY3JlYXRlZC4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIGRvIHRoYXQsIHlvdSB3aWxsIG5lZWQgdG8ga25vdyB0aGUgdGFyZ2V0IHRoYXQgcHJvZHVjZWQgdGhlbS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGVzZSBjb21tYW5kcyByZWJ1aWxkIGFuZCByZS1jcmVhdGUgdGhlIGtlcm5lbCBmaWxlczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuIHZpcnR1YWwva2VybmVsCisgICAgICQgYml0YmFrZSB2aXJ0dWFsL2tlcm5lbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LXNkayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9zZGsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyB0aGlzIGRpcmVjdG9yeSB0byBob2xkCisgICAgICAgICAgICB0b29sY2hhaW4gaW5zdGFsbGVyIHNjcmlwdHMsIHdoaWNoIHdoZW4gZXhlY3V0ZWQsIGluc3RhbGwgdGhlCisgICAgICAgICAgICBzeXNyb290IHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGVzZSBpbnN0YWxsZXJzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXNzdGF0ZS1jb250cm9sJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvc3N0YXRlLWNvbnRyb2wvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGlzIGRpcmVjdG9yeSBmb3IgdGhlCisgICAgICAgICAgICBzaGFyZWQgc3RhdGUgbWFuaWZlc3QgZmlsZXMuCisgICAgICAgICAgICBUaGUgc2hhcmVkIHN0YXRlIGNvZGUgdXNlcyB0aGVzZSBmaWxlcyB0byByZWNvcmQgdGhlIGZpbGVzCisgICAgICAgICAgICBpbnN0YWxsZWQgYnkgZWFjaCBzc3RhdGUgdGFzayBzbyB0aGF0IHRoZSBmaWxlcyBjYW4gYmUgcmVtb3ZlZAorICAgICAgICAgICAgd2hlbiBjbGVhbmluZyB0aGUgcmVjaXBlIG9yIHdoZW4gYSBuZXdlciB2ZXJzaW9uIGlzIGFib3V0IHRvCisgICAgICAgICAgICBiZSBpbnN0YWxsZWQuCisgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFsc28gdXNlcyB0aGUgbWFuaWZlc3RzIHRvIGRldGVjdCBhbmQgcHJvZHVjZQorICAgICAgICAgICAgYSB3YXJuaW5nIHdoZW4gZmlsZXMgZnJvbSBvbmUgdGFzayBhcmUgb3ZlcndyaXRpbmcgdGhvc2UgZnJvbQorICAgICAgICAgICAgYW5vdGhlci4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXN5c3Jvb3RzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvc3lzcm9vdHMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgc2hhcmVkIGhlYWRlciBmaWxlcyBhbmQgbGlicmFyaWVzIGFzIHdlbGwgYXMgb3RoZXIgc2hhcmVkCisgICAgICAgICAgICBkYXRhLgorICAgICAgICAgICAgUGFja2FnZXMgdGhhdCBuZWVkIHRvIHNoYXJlIG91dHB1dCB3aXRoIG90aGVyIHBhY2thZ2VzIGRvIHNvIHdpdGhpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaXMgc3ViZGl2aWRlZCBieSBhcmNoaXRlY3R1cmUgc28gbXVsdGlwbGUgYnVpbGRzIGNhbiBydW4gd2l0aGluCisgICAgICAgICAgICB0aGUgb25lIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXN0YW1wcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL3N0YW1wcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBob2xkcyBpbmZvcm1hdGlvbiB0aGF0IEJpdEJha2UgdXNlcyBmb3IgYWNjb3VudGluZyBwdXJwb3NlcworICAgICAgICAgICAgdG8gdHJhY2sgd2hhdCB0YXNrcyBoYXZlIHJ1biBhbmQgd2hlbiB0aGV5IGhhdmUgcnVuLgorICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpcyBzdWItZGl2aWRlZCBieSBhcmNoaXRlY3R1cmUsIHBhY2thZ2UgbmFtZSwgYW5kCisgICAgICAgICAgICB2ZXJzaW9uLgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHN0YW1wcy9hbGwtcG9reS1saW51eC9kaXN0Y2MtY29uZmlnLzEuMC1yMC5kb19idWlsZC0yZmRkLi4uLjJkbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQWx0aG91Z2ggdGhlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXJlIGVtcHR5IG9mIGRhdGEsCisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIGZpbGVuYW1lcyBhbmQgdGltZXN0YW1wcyBmb3IgdHJhY2tpbmcgcHVycG9zZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1sb2cnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9sb2cvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZ2VuZXJhbCBsb2dzIHRoYXQgYXJlIG5vdCBvdGhlcndpc2UgcGxhY2VkIHVzaW5nIHRoZQorICAgICAgICAgICAgcGFja2FnZSdzIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEV4YW1wbGVzIG9mIGxvZ3MgYXJlIHRoZSBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jaGVja19wa2c8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2Rpc3Ryb19jaGVjazwvZmlsZW5hbWU+IHRhc2tzLgorICAgICAgICAgICAgUnVubmluZyBhIGJ1aWxkIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhpcyBkaXJlY3RvcnkgaXMgY3JlYXRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLXdvcmsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC93b3JrLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB3b3JrIHN1Yi1kaXJlY3RvcmllcworICAgICAgICAgICAgZm9yIHBhY2thZ2VzIGJ1aWx0IGJ5IEJpdEJha2UuCisgICAgICAgICAgICBBbGwgdGFza3MgZXhlY3V0ZSBmcm9tIHRoZSBhcHByb3ByaWF0ZSB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgc291cmNlIGZvciBhIHBhcnRpY3VsYXIgcGFja2FnZSBpcyB1bnBhY2tlZCwKKyAgICAgICAgICAgIHBhdGNoZWQsIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkIGFsbCB3aXRoaW4gaXRzIG93biB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFdpdGhpbiB0aGUgd29yayBkaXJlY3RvcnksIG9yZ2FuaXphdGlvbiBpcyBiYXNlZCBvbiB0aGUgcGFja2FnZSBncm91cAorICAgICAgICAgICAgYW5kIHZlcnNpb24gZm9yIHdoaWNoIHRoZSBzb3VyY2UgaXMgYmVpbmcgY29tcGlsZWQKKyAgICAgICAgICAgIGFzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIGNvbnNpZGVyaW5nIHRoZSBzdHJ1Y3R1cmUgb2YgYSB0eXBpY2FsIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWtlcm5lbC0zLjA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb24gdGhlIG1hY2hpbmUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYnVpbHQgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgRm9yIHRoaXMgcGFja2FnZSwgYSB3b3JrIGRpcmVjdG9yeSBvZgorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9saW51eC15b2N0by8zLjArZ2l0MSsmbHQ7Li4uLi4mZ3Q7PC9maWxlbmFtZT4sCisgICAgICAgICAgICByZWZlcnJlZCB0byBhcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz48L2ZpbGVuYW1lPiwgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgIFdpdGhpbiB0aGlzIGRpcmVjdG9yeSwgdGhlIHNvdXJjZSBpcyB1bnBhY2tlZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXFlbXV4ODYtc3RhbmRhcmQtYnVpbGQ8L2ZpbGVuYW1lPiBhbmQgdGhlbiBwYXRjaGVkIGJ5IFF1aWx0LgorICAgICAgICAgICAgKFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4pCisgICAgICAgICAgICBXaXRoaW4gdGhlIDxmaWxlbmFtZT5saW51eC1xZW11eDg2LXN0YW5kYXJkLWJ1aWxkPC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgc3RhbmRhcmQgUXVpbHQgZGlyZWN0b3JpZXMgPGZpbGVuYW1lPmxpbnV4LTMuMC9wYXRjaGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bGludXgtMy4wLy5wYzwvZmlsZW5hbWU+IGFyZSBjcmVhdGVkLAorICAgICAgICAgICAgYW5kIHN0YW5kYXJkIFF1aWx0IGNvbW1hbmRzIGNhbiBiZSB1c2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSBhcmUgb3RoZXIgZGlyZWN0b3JpZXMgZ2VuZXJhdGVkIHdpdGhpbiA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIG1vc3QgaW1wb3J0YW50IGRpcmVjdG9yeSBpcyA8ZmlsZW5hbWU+V09SS0RJUi90ZW1wLzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgd2hpY2ggaGFzIGxvZyBmaWxlcyBmb3IgZWFjaCB0YXNrICg8ZmlsZW5hbWU+bG9nLmRvXyoucGlkPC9maWxlbmFtZT4pCisgICAgICAgICAgICBhbmQgY29udGFpbnMgdGhlIHNjcmlwdHMgQml0QmFrZSBydW5zIGZvciBlYWNoIHRhc2sKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+cnVuLmRvXyoucGlkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5XT1JLRElSL2ltYWdlLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyB3aGVyZSAibWFrZQorICAgICAgICAgICAgaW5zdGFsbCIgcGxhY2VzIGl0cyBvdXRwdXQgdGhhdCBpcyB0aGVuIHNwbGl0IGludG8gc3ViLXBhY2thZ2VzCisgICAgICAgICAgICB3aXRoaW4gPGZpbGVuYW1lPldPUktESVIvcGFja2FnZXMtc3BsaXQvPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXdvcmstc2hhcmVkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvd29yay1zaGFyZWQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGVmZmljaWVuY3ksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW5kIHVzZXMKKyAgICAgICAgICAgIHRoaXMgZGlyZWN0b3J5IHRvIGhvbGQgcmVjaXBlcyB0aGF0IHNoYXJlIGEgd29yayBkaXJlY3Rvcnkgd2l0aAorICAgICAgICAgICAgb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgIEluIHByYWN0aWNlLCB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgaXRzIHZhcmlhbnRzIChlLmcuIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saWJnY2M8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmdjYy1ydW50aW1lPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgc28gZm9ydGgpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEnPgorICAgIDx0aXRsZT5UaGUgTWV0YWRhdGEgLSA8ZmlsZW5hbWU+bWV0YS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgbWVudGlvbmVkIHByZXZpb3VzbHksCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGlzIHRoZSBjb3JlCisgICAgICAgIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBNZXRhZGF0YSBoYXMgc2V2ZXJhbCBpbXBvcnRhbnQgc3ViZGl2aXNpb25zOgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jbGFzc2VzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIDxmaWxlbmFtZT4qLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIENsYXNzIGZpbGVzIGFyZSB1c2VkIHRvIGFic3RyYWN0IGNvbW1vbiBjb2RlIHNvIGl0IGNhbiBiZSByZXVzZWQgYnkgbXVsdGlwbGUKKyAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgRXZlcnkgcGFja2FnZSBpbmhlcml0cyB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBFeGFtcGxlcyBvZiBvdGhlciBpbXBvcnRhbnQgY2xhc3NlcyBhcmUgPGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICBpbiB0aGVvcnkgYWxsb3dzIGFueSBBdXRvdG9vbC1lbmFibGVkIHBhY2thZ2UgdG8gd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHdpdGggbWluaW1hbCBlZmZvcnQuCisgICAgICAgICAgICBBbm90aGVyIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmtlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT4gdGhhdCBjb250YWlucyBjb21tb24gY29kZSBhbmQgZnVuY3Rpb25zCisgICAgICAgICAgICBmb3Igd29ya2luZyB3aXRoIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICBGdW5jdGlvbnMgbGlrZSBpbWFnZSBnZW5lcmF0aW9uIG9yIHBhY2thZ2luZyBhbHNvIGhhdmUgdGhlaXIgc3BlY2lmaWMgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnJvb3Rmc18qLmJiY2xhc3M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlKi5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gY2xhc3Nlcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzJz5DbGFzc2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NvbmYvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGNvcmUgc2V0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBzdGFydCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gYW5kIGZyb20gd2hpY2ggYWxsIG90aGVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIGFyZSBpbmNsdWRlZC4KKyAgICAgICAgICAgIFNlZSB0aGUgaW5jbHVkZSBzdGF0ZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQgeW91IHdpbGwgbm90ZSB0aGF0IGV2ZW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gaXMgbG9hZGVkIGZyb20gdGhlcmUuCisgICAgICAgICAgICBXaGlsZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gc2V0cyB1cCB0aGUgZGVmYXVsdHMsIHlvdSBjYW4gb2Z0ZW4gb3ZlcnJpZGUKKyAgICAgICAgICAgIHRoZXNlIGJ5IHVzaW5nIHRoZSAoPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPikgZmlsZSwgbWFjaGluZSBmaWxlIG9yCisgICAgICAgICAgICB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mLW1hY2hpbmUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgSWYgeW91IHNldCA8ZmlsZW5hbWU+TUFDSElORSA9ICJxZW11eDg2IjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbG9va3MgZm9yIGEgPGZpbGVuYW1lPnFlbXV4ODYuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhpcworICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNvbnRhaW5zIHZhcmlvdXMgZGF0YSBjb21tb24gdG8gbXVsdGlwbGUgbWFjaGluZXMuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgYSBuZXcgbWFjaGluZSB0byB0aGUgWW9jdG8gUHJvamVjdCwgbG9vayBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mLWRpc3Rybyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9jb25mL2Rpc3Ryby88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgY29udGVudHMgb2YgdGhpcyBkaXJlY3RvcnkgY29udHJvbHMgYW55IGRpc3RyaWJ1dGlvbi1zcGVjaWZpYworICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICBGb3IgdGhlIFlvY3RvIFByb2plY3QsIHRoZSA8ZmlsZW5hbWU+ZGVmYXVsdHNldHVwLmNvbmY8L2ZpbGVuYW1lPiBpcyB0aGUgbWFpbiBmaWxlIGhlcmUuCisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpbmNsdWRlcyB0aGUgdmVyc2lvbnMgYW5kIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ0RBVEU8L2ZpbGVuYW1lPiBkZWZpbml0aW9ucyBmb3IgYXBwbGljYXRpb25zIHRoYXQgYXJlIGNvbmZpZ3VyZWQgaGVyZS4KKyAgICAgICAgICAgIEFuIGV4YW1wbGUgb2YgYW4gYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbiBtaWdodCBiZSA8ZmlsZW5hbWU+cG9reS1ibGVlZGluZy5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICBBbHRob3VnaCB0aGlzIGZpbGUgbWFpbmx5IGluaGVyaXRzIGl0cyBjb25maWd1cmF0aW9uIGZyb20gUG9reS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1jb25mLW1hY2hpbmUtc2RrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS1zZGsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgdGhpcyBkaXJlY3RvcnkgZm9yCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDMyLWJpdCBhbmQgNjQtYml0IHg4NiBmaWxlcyBzaGlwIHdpdGggdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IHRoYXQgc3VwcG9ydCBzb21lIFNESyBob3N0cy4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGV4dGVuZCB0aGF0IHN1cHBvcnQgdG8gb3RoZXIgU0RLIGhvc3RzCisgICAgICAgICAgICBieSBhZGRpbmcgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZpbGVzIGluIHRoaXMgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICB3aXRoaW4gYW5vdGhlciBsYXllci4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1maWxlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9maWxlcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb21tb24gbGljZW5zZSBmaWxlcyBhbmQgc2V2ZXJhbCB0ZXh0IGZpbGVzCisgICAgICAgICAgICB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICBUaGUgdGV4dCBmaWxlcyBjb250YWluIG1pbmltYWwgZGV2aWNlIGluZm9ybWF0aW9uIGFuZAorICAgICAgICAgICAgbGlzdHMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGgga25vd24gcGVybWlzc2lvbnMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtbGliJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2xpYi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBPcGVuRW1iZWRkZWQgUHl0aG9uIGxpYnJhcnkgY29kZQorICAgICAgICAgICAgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1ic3AnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ic3AvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYW55dGhpbmcgbGlua2luZyB0byBzcGVjaWZpYyBoYXJkd2FyZSBvciBoYXJkd2FyZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBzdWNoIGFzICJ1LWJvb3QiIGFuZCAiZ3J1YiIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1jb25uZWN0aXZpdHknPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnMgcmVsYXRlZCB0byBjb21tdW5pY2F0aW9uIHdpdGggb3RoZXIgZGV2aWNlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWNvcmUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHdoYXQgaXMgbmVlZGVkIHRvIGJ1aWxkIGEgYmFzaWMgd29ya2luZyBMaW51eCBpbWFnZQorICAgICAgICAgICAgaW5jbHVkaW5nIGNvbW1vbmx5IHVzZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtZGV2dG9vbHMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1kZXZ0b29scy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0b29scyB0aGF0IGFyZSBwcmltYXJpbHkgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgVGhlIHRvb2xzLCBob3dldmVyLCBjYW4gYWxzbyBiZSB1c2VkIG9uIHRhcmdldHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1leHRlbmRlZCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWV4dGVuZGVkLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIG5vbi1lc3NlbnRpYWwgYXBwbGljYXRpb25zIHRoYXQgYWRkIGZlYXR1cmVzIGNvbXBhcmVkIHRvIHRoZQorICAgICAgICAgICAgYWx0ZXJuYXRpdmVzIGluIGNvcmUuCisgICAgICAgICAgICBZb3UgbWlnaHQgbmVlZCB0aGlzIGRpcmVjdG9yeSBmb3IgZnVsbCB0b29sIGZ1bmN0aW9uYWxpdHkgb3IgZm9yIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikKKyAgICAgICAgICAgIGNvbXBsaWFuY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1nbm9tZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWdub21lLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgR1RLKyBhcHBsaWNhdGlvbiBmcmFtZXdvcmsuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1ncmFwaGljcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWdyYXBoaWNzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIFggYW5kIG90aGVyIGdyYXBoaWNhbGx5IHJlbGF0ZWQgc3lzdGVtIGxpYnJhcmllcworICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMta2VybmVsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBrZXJuZWwgYW5kIGdlbmVyaWMgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgdGhhdAorICAgICAgICAgICAgaGF2ZSBzdHJvbmcga2VybmVsIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWxzYjQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1sc2I0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHJlY2lwZXMgc3BlY2lmaWNhbGx5IGFkZGVkIHRvIHN1cHBvcnQKKyAgICAgICAgICAgIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHZlcnNpb24gNC54LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtbXVsdGltZWRpYSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgY29kZWNzIGFuZCBzdXBwb3J0IHV0aWxpdGllcyBmb3IgYXVkaW8sIGltYWdlcyBhbmQgdmlkZW8uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1xdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXF0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgUXQgYXBwbGljYXRpb24gZnJhbWV3b3JrLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtcnQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ydC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBwYWNrYWdlIGFuZCBpbWFnZSByZWNpcGVzIGZvciB1c2luZyBhbmQgdGVzdGluZworICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUkVFTVBUX1JUPC9maWxlbmFtZT4ga2VybmVsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtc2F0byc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFNhdG8gZGVtby9yZWZlcmVuY2UgVUkvVVggYW5kIGl0cyBhc3NvY2lhdGVkIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLXN1cHBvcnQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1zdXBwb3J0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHJlY2lwZXMgdXNlZCBieSBvdGhlciByZWNpcGVzLCBidXQgdGhhdCBhcmUKKyAgICAgICAgICAgIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiBpbWFnZXMgKGkuZS4gZGVwZW5kZW5jaWVzIG9mIG90aGVyCisgICAgICAgICAgICByZWNpcGVzKS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1zaXRlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3NpdGUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYSBsaXN0IG9mIGNhY2hlZCByZXN1bHRzIGZvciB2YXJpb3VzIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICBCZWNhdXNlIGNlcnRhaW4gImF1dG9jb25mIiB0ZXN0IHJlc3VsdHMgY2Fubm90IGJlIGRldGVybWluZWQgd2hlbiBjcm9zcy1jb21waWxpbmcgZHVlIHRvCisgICAgICAgICAgICB0aGUgdGVzdHMgbm90IGFibGUgdG8gcnVuIG9uIGEgbGl2ZSBzeXN0ZW0sIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRpcmVjdG9yeSBpcworICAgICAgICAgICAgcGFzc2VkIHRvICJhdXRvY29uZiIgZm9yIHRoZSB2YXJpb3VzIGFyY2hpdGVjdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy10eHQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy50eHQ8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGZpbGUgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGVudHMgb2YgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYThkYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsMTAyOCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wb2t5LXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy8qIFVzZSB0aGlzIHNldCB3aGVuIHlvdSBkZWNpZGUgdG8gZ2V0IHRoZSBpbWFnZXMgaW4gZm9yIHZhcmlhYmxlcy4KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1sZWZ0OiAxNS41ZW07CisgIG1hcmdpbi1ib3R0b206IDJlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmdsb3NzZGVmZmlyc3QgeworICB0ZXh0LWluZGVudDogLTcwcHg7Cit9CisqLworCisvKiBTdGFydCBvZiBub24taW1hZ2Ugc2V0ICovCisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmdsb3NzZGVmZmlyc3QgeworICB0ZXh0LWluZGVudDogMHB4OworfQorCisvKiBFbmQgb2Ygbm9uLWltYWdlIHNldCAqLworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvcG9reS10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI0ZDk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXRhc2tzLnhtbApAQCAtMCwwICsxLDcxMSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi10YXNrcyc+Cis8dGl0bGU+VGFza3M8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUYXNrcyBhcmUgdW5pdHMgb2YgZXhlY3V0aW9uIGZvciBCaXRCYWtlLgorICAgIFJlY2lwZXMgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcykgdXNlIHRhc2tzIHRvIGNvbXBsZXRlCisgICAgY29uZmlndXJpbmcsIGNvbXBpbGluZywgYW5kIHBhY2thZ2luZyBzb2Z0d2FyZS4KKyAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgYSByZWZlcmVuY2Ugb2YgdGhlIHRhc2tzIGRlZmluZWQgaW4gdGhlCisgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J25vcm1hbC1yZWNpcGUtYnVpbGQtdGFza3MnPgorICAgIDx0aXRsZT5Ob3JtYWwgUmVjaXBlIEJ1aWxkIFRhc2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIG5vcm1hbCB0YXNrcyBhc3NvY2lhdGVkIHdpdGggYnVpbGRpbmcKKyAgICAgICAgYSByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1idWlsZCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXNrIGZvciBhbGwgcmVjaXBlcy4KKyAgICAgICAgICAgIFRoaXMgdGFzayBkZXBlbmRzIG9uIGFsbCBvdGhlciBub3JtYWwgdGFza3MKKyAgICAgICAgICAgIHJlcXVpcmVkIHRvIGJ1aWxkIGEgcmVjaXBlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb21waWxlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29tcGlsZXMgdGhlIHNvdXJjZSBpbiB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5LCB3aGljaCBpcyBwb2ludGVkCisgICAgICAgICAgICB0byBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY29tcGlsZV9wdGVzdF9iYXNlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jb21waWxlX3B0ZXN0X2Jhc2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb21waWxlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUgc291cmNlIGJ5IGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYW55IGJ1aWxkLXRpbWUgYW5kCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY29uZmlndXJlX3B0ZXN0X2Jhc2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWRlcGxveSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV3JpdGVzIG91dHB1dCBmaWxlcyB0aGF0IGFyZSB0byBiZSBkZXBsb3llZCB0byB0aGUgZGVwbG95CisgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGlzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZRElSJz48ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPiB0YXNrIGlzIGEKKyAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSAoc3N0YXRlKSB0YXNrLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0YXNrIGNhbgorICAgICAgICAgICAgYmUgYWNjZWxlcmF0ZWQgdGhyb3VnaCBzc3RhdGUgdXNlLgorICAgICAgICAgICAgUmVhbGl6ZSBhbHNvIHRoYXQgaWYgdGhlIHRhc2sgaXMgcmUtZXhlY3V0ZWQsIGFueSBwcmV2aW91cyBvdXRwdXQKKyAgICAgICAgICAgIGlzIHJlbW92ZWQgKGkuZS4gImNsZWFuZWQiKS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZmV0Y2gnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmV0Y2hlcyB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICBUaGlzIHRhc2sgdXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZSBhcmd1bWVudCdzIHByZWZpeCB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgIGZldGNoZXIgbW9kdWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1pbnN0YWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29waWVzIGZpbGVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSwgd2hpY2ggaXMgZGVmaW5lZCBieQorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUsCisgICAgICAgICAgICB0byBhIGhvbGRpbmcgYXJlYSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1pbnN0YWxsX3B0ZXN0X2Jhc2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2luc3RhbGxfcHRlc3RfYmFzZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvcGllcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGZpbGVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeQorICAgICAgICAgICAgdG8gYSBob2xkaW5nIGFyZWEuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbmFseXplcyB0aGUgY29udGVudCBvZiB0aGUgaG9sZGluZyBhcmVhIGFuZCBzcGxpdHMgaXQgaW50byBzdWJzZXRzCisgICAgICAgICAgICBiYXNlZCBvbiBhdmFpbGFibGUgcGFja2FnZXMgYW5kIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX3FhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUnVucyBRQSBjaGVja3Mgb24gcGFja2FnZWQgZmlsZXMuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBjaGVja3MsIHNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfZGViJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2RlYjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgRGViaWFuIHBhY2thZ2VzIChpLmUuIDxmaWxlbmFtZT4qLmRlYjwvZmlsZW5hbWU+IGZpbGVzKSBhbmQKKyAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcGFja2FnZSBmZWVkcyBhcmVhLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2lwayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIElQSyBwYWNrYWdlcyAoaS5lLiA8ZmlsZW5hbWU+Ki5pcGs8L2ZpbGVuYW1lPiBmaWxlcykgYW5kCisgICAgICAgICAgICBwbGFjZXMgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSVBLJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JUEs8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgaW4gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYS4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9ycG0nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfcnBtPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBSUE0gcGFja2FnZXMgKGkuZS4gPGZpbGVuYW1lPioucnBtPC9maWxlbmFtZT4gZmlsZXMpIGFuZAorICAgICAgICAgICAgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1JQTSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfUlBNPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGluIHRoZSBwYWNrYWdlIGZlZWRzIGFyZWEuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX3RhcjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgdGFyYmFsbHMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9UQVInPjxmaWxlbmFtZT5ERVBMT1lfRElSX1RBUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcGFja2FnZSBmZWVkcyBhcmVhLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIHBhY2thZ2UgbWV0YWRhdGEgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGdlbmVyYXRlIHRoZQorICAgICAgICAgICAgZmluYWwgcGFja2FnZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhdGNoJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExvY2F0ZXMgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGF0Y2hpbmctZGV2LWVudmlyb25tZW50Jz5QYXRjaGluZzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9saWMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX2xpYzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdyaXRlcyBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciB0aGUgcmVjaXBlIHRoYXQgaXMgY29sbGVjdGVkIGxhdGVyCisgICAgICAgICAgICB3aGVuIHRoZSBpbWFnZSBpcyBjb25zdHJ1Y3RlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIHRoZSBmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhbiBpbnN0YWxsYWJsZSBTREsuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWdlbmVyYXRpb24tZGV2LWVudmlyb25tZW50Jz5TREsgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29waWVzIGEgc3Vic2V0IG9mIGZpbGVzIGluc3RhbGxlZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBpbnRvIHRoZSBzeXNyb290IGluIG9yZGVyIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gb3RoZXIKKyAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+IHRhc2sgaXMgYQorICAgICAgICAgICAgc2hhcmVkIHN0YXRlIChzc3RhdGUpIHRhc2ssIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHRhc2sgY2FuCisgICAgICAgICAgICBiZSBhY2NlbGVyYXRlZCB0aHJvdWdoIHNzdGF0ZSB1c2UuCisgICAgICAgICAgICBSZWFsaXplIGFsc28gdGhhdCBpZiB0aGUgdGFzayBpcyByZS1leGVjdXRlZCwgYW55IHByZXZpb3VzIG91dHB1dAorICAgICAgICAgICAgaXMgcmVtb3ZlZCAoaS5lLiAiY2xlYW5lZCIpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1ybV93b3JrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19ybV93b3JrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcworICAgICAgICAgICAgZmluaXNoZWQgd2l0aCB0aGVtLgorICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcm0td29yayc+PGZpbGVuYW1lPnJtX3dvcmsuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXJtX3dvcmtfYWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19ybV93b3JrX2FsbDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvcC1sZXZlbCB0YXNrIGZvciByZW1vdmluZyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBidWlsZCBzeXN0ZW0gaGFzCisgICAgICAgICAgICBmaW5pc2hlZCB3aXRoIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXVucGFjayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVW5wYWNrcyB0aGUgc291cmNlIGNvZGUgaW50byBhIHdvcmtpbmcgZGlyZWN0b3J5IHBvaW50ZWQgdG8KKyAgICAgICAgICAgIGJ5CisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSBhbHNvCisgICAgICAgICAgICBwbGF5cyBhIHJvbGUgaW4gd2hlcmUgdW5wYWNrZWQgc291cmNlIGZpbGVzIHVsdGltYXRlbHkgcmVzaWRlLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHNvdXJjZSBmaWxlcyBhcmUgdW5wYWNrZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzb3VyY2UtZmV0Y2hpbmctZGV2LWVudmlyb25tZW50Jz5Tb3VyY2UgRmV0Y2hpbmc8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBhbmQgdGhlIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+IHZhcmlhYmxlIGRlc2NyaXB0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21hbnVhbGx5LWNhbGxlZC10YXNrcyc+CisgICAgPHRpdGxlPk1hbnVhbGx5IENhbGxlZCBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlc2UgdGFza3MgYXJlIHR5cGljYWxseSBtYW51YWxseSB0cmlnZ2VyZWQgKGUuZy4gYnkgdXNpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jPC9maWxlbmFtZT4gY29tbWFuZC1saW5lIG9wdGlvbik6CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jaGVja3VyaSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2hlY2t1cmk8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYWxpZGF0ZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jaGVja3VyaWFsbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2hlY2t1cmlhbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYWxpZGF0ZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlIGZvciBhbGwgcmVjaXBlcyByZXF1aXJlZCB0byBidWlsZCBhIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY2xlYW4nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGZvciBhIHRhcmdldCBmcm9tIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXVucGFjayc+PGZpbGVuYW1lPmRvX3VucGFjazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBmb3J3YXJkIChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGlzIHRhc2sgdXNpbmcgQml0QmFrZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW4gPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyB0YXNrIGRvZXMgbm90IHJlbW92ZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NoYXJlZC1zdGF0ZS1jYWNoZSc+c3N0YXRlPC9saW5rPikgY2FjaGUKKyAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBubyBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGFuZCB0aGUgcmVjaXBlIGlzCisgICAgICAgICAgICByZWJ1aWx0IGFmdGVyIGNsZWFuaW5nLCBvdXRwdXQgZmlsZXMgYXJlIHNpbXBseSByZXN0b3JlZCBmcm9tIHRoZQorICAgICAgICAgICAgc3N0YXRlIGNhY2hlLgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoZSBzc3RhdGUgY2FjaGUgZmlsZXMgZm9yIHRoZSByZWNpcGUsCisgICAgICAgICAgICB5b3UgbmVlZCB0byB1c2UgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBpbnN0ZWFkIChpLmUuIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuc3N0YXRlPC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+KS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY2xlYW5hbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NsZWFuYWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzLCBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSdzaGFyZWQtc3RhdGUtY2FjaGUnPnNzdGF0ZTwvbGluaz4pIGNhY2hlLCBhbmQKKyAgICAgICAgICAgIGRvd25sb2FkZWQgc291cmNlIGZpbGVzIGZvciBhIHRhcmdldCAoaS5lLiB0aGUgY29udGVudHMgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgRXNzZW50aWFsbHksIHRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPiB0YXNrIGlzCisgICAgICAgICAgICBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayB3aXRoIHRoZSBhZGRlZCByZW1vdmFsIG9mIGRvd25sb2FkZWQgc291cmNlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGlzIHRhc2sgdXNpbmcgQml0QmFrZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW5hbGwgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIG5vdCBub3JtYWxseSB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xlYW5hbGw8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgRG8gc28gb25seSBpZiB5b3Ugd2FudCB0byBzdGFydCBmcmVzaCB3aXRoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2suCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNsZWFuc3N0YXRlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlbW92ZXMgYWxsIG91dHB1dCBmaWxlcyBhbmQgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zc3RhdGU8L2xpbms+KQorICAgICAgICAgICAgY2FjaGUgZm9yIGEgdGFyZ2V0LgorICAgICAgICAgICAgRXNzZW50aWFsbHksIHRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiB0YXNrIGlzCisgICAgICAgICAgICBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY2xlYW4nPjxmaWxlbmFtZT5kb19jbGVhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayB3aXRoIHRoZSBhZGRlZCByZW1vdmFsIG9mIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3NoYXJlZC1zdGF0ZS1jYWNoZSc+c3N0YXRlPC9saW5rPikgY2FjaGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoaXMgdGFzayB1c2luZyBCaXRCYWtlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiB0YXNrLAorICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbm8gbG9uZ2VyIHVzZXMgYW55CisgICAgICAgICAgICBzc3RhdGUuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIGJ1aWxkaW5nIHRoZSByZWNpcGUgZnJvbSBzY3JhdGNoIGlzIGd1YXJhbnRlZWQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT4gdGFzayBjYW5ub3QgcmVtb3ZlCisgICAgICAgICAgICAgICAgc3N0YXRlIGZyb20gYSByZW1vdGUgc3N0YXRlIG1pcnJvci4KKyAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBidWlsZCBhIHRhcmdldCBmcm9tIHNjcmF0Y2ggdXNpbmcgcmVtb3RlCisgICAgICAgICAgICAgICAgbWlycm9ycywgdXNlIHRoZSAiLWYiIG9wdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1mIC1jIGRvX2NsZWFuc3N0YXRlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWRldnNoZWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19kZXZzaGVsbDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN0YXJ0cyBhIHNoZWxsIHdob3NlIGVudmlyb25tZW50IGlzIHNldCB1cCBmb3IKKyAgICAgICAgICAgIGRldmVsb3BtZW50LCBkZWJ1Z2dpbmcsIG9yIGJvdGguCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZmV0Y2hhbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2ZldGNoYWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmV0Y2hlcyBhbGwgcmVtb3RlIHNvdXJjZXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWxpc3R0YXNrcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTGlzdHMgYWxsIGRlZmluZWQgdGFza3MgZm9yIGEgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX2luZGV4Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX2luZGV4PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBpbmRleCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPgorICAgICAgICAgICAgYXJlYS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgdGFzayBpcyBub3QgdHJpZ2dlcmVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWM8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uIGFzCisgICAgICAgICAgICAgICAgYXJlIHRoZSBvdGhlciB0YXNrcyBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGlzIHRhc2sgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1pbmRleDwvZmlsZW5hbWU+IHJlY2lwZSwKKyAgICAgICAgICAgICAgICB5b3UgcnVuIGl0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgcGFja2FnZS1pbmRleDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW1hZ2UtcmVsYXRlZC10YXNrcyc+CisgICAgPHRpdGxlPkltYWdlLVJlbGF0ZWQgVGFza3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFza3MgYXJlIGFwcGxpY2FibGUgdG8gaW1hZ2UgcmVjaXBlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWJvb3RpbWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2Jvb3RpbWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgYm9vdGFibGUgbGl2ZSBpbWFnZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gbGl2ZSBpbWFnZSB0eXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtYnVuZGxlX2luaXRyYW1mcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fYnVuZGxlX2luaXRyYW1mczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbWJpbmVzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykgaW1hZ2UgYW5kIGtlcm5lbAorICAgICAgICAgICAgdG9nZXRoZXIgdG8gZm9ybSBhIHNpbmdsZSBpbWFnZS4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTkZJR19JTklUUkFNRlNfU09VUkNFJz48ZmlsZW5hbWU+Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGhhcyBzb21lIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMgb2YgaW1hZ2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1yb290ZnMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAoZmlsZSBhbmQgZGlyZWN0b3J5IHN0cnVjdHVyZSkgZm9yIGFuCisgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+SW1hZ2UgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXRlc3RpbWFnZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdGVzdGltYWdlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQm9vdHMgYW4gaW1hZ2UgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgd2l0aGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhdXRvbWF0aWNhbGx5IHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy10ZXN0aW1hZ2VfYXV0byc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdGVzdGltYWdlX2F1dG88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCb290cyBhbiBpbWFnZSBhbmQgcGVyZm9ybXMgcnVudGltZSB0ZXN0cyB3aXRoaW4gdGhlIGltYWdlCisgICAgICAgICAgICBpbW1lZGlhdGVseSBhZnRlciBpdCBoYXMgYmVlbiBidWlsdC4KKyAgICAgICAgICAgIFRoaXMgdGFzayBpcyBlbmFibGVkIHdoZW4geW91IHNldAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfSU1BR0UnPjxmaWxlbmFtZT5URVNUX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBlcXVhbCB0byAiMSIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhdXRvbWF0aWNhbGx5IHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy12bWRraW1nJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb192bWRraW1nPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBhIDxmaWxlbmFtZT4udm1kazwvZmlsZW5hbWU+IGltYWdlIGZvciB1c2Ugd2l0aAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy52bXdhcmUuY29tLyc+Vk13YXJlPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBjb21wYXRpYmxlIHZpcnR1YWwgbWFjaGluZSBob3N0cy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2tlcm5lbC1yZWxhdGVkLXRhc2tzJz4KKyAgICA8dGl0bGU+S2VybmVsLVJlbGF0ZWQgVGFza3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFza3MgYXJlIGFwcGxpY2FibGUgdG8ga2VybmVsIHJlY2lwZXMuCisgICAgICAgIFNvbWUgb2YgdGhlc2UgdGFza3MgKGUuZy4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1tZW51Y29uZmlnJz48ZmlsZW5hbWU+ZG9fbWVudWNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrKSBhcmUgYWxzbyBhcHBsaWNhYmxlIHRvIHJlY2lwZXMgdGhhdCB1c2UKKyAgICAgICAgTGludXgga2VybmVsIHN0eWxlIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyB0aGUgQnVzeUJveCByZWNpcGUuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb21waWxlX2tlcm5lbG1vZHVsZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbXBpbGVfa2VybmVsbW9kdWxlczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbXBpbGVzIGxvYWRhYmxlIG1vZHVsZXMgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWRpZmZjb25maWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2RpZmZjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb21wYXJlcyB0aGUgb2xkIGFuZCBuZXcgY29uZmlnIGZpbGVzIGFmdGVyIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtbWVudWNvbmZpZyc+PGZpbGVuYW1lPmRvX21lbnVjb25maWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgZm9yIHRoZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9jaGVja291dCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2NoZWNrb3V0PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hlY2tzIG91dCBzb3VyY2UvbWV0YSBicmFuY2hlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9jb25maWdjaGVjayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVmFsaWRhdGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9jb25maWdtZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ21lPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXNzZW1ibGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWtlcm5lbF9saW5rX3ZtbGludXgnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2tlcm5lbF9saW5rX3ZtbGludXg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgc3ltYm9saWMgbGluayBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmFyY2gvJGFyY2gvYm9vdDwvZmlsZW5hbWU+IGZvciB2bWxpbnV4IGtlcm5lbAorICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1tZW51Y29uZmlnJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19tZW51Y29uZmlnPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUnVucyA8ZmlsZW5hbWU+bWFrZSBtZW51Y29uZmlnPC9maWxlbmFtZT4gZm9yIHRoZSBrZXJuZWwuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLW1lbnVjb25maWcnPlVzaW5nJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXNhdmVkZWZjb25maWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3NhdmVkZWZjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgbWluaW1hbCBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1zaXplY2hlY2snPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3NpemVjaGVjazwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENoZWNrcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGFnYWluc3QKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfSU1BR0VfTUFYU0laRSc+PGZpbGVuYW1lPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB3aGVuIHNldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtc3RyaXAnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3N0cmlwPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3RyaXBzIHVubmVlZGVkIHNlY3Rpb25zIG91dCBvZiB0aGUgTGludXgga2VybmVsIGltYWdlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy11Ym9vdF9ta2ltYWdlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb191Ym9vdF9ta2ltYWdlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBhIHVJbWFnZSBmaWxlIGZyb20gdGhlIGtlcm5lbCBmb3IgdGhlIFUtQm9vdCBib290bG9hZGVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy12YWxpZGF0ZV9icmFuY2hlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fdmFsaWRhdGVfYnJhbmNoZXM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFbnN1cmVzIHRoYXQgdGhlIHNvdXJjZSwgbWV0YWRhdGEgKG9yIGJvdGgpIGJyYW5jaGVzIGFyZSBvbiB0aGUKKyAgICAgICAgICAgIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkgdGhlaXIKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtaXNjZWxsYW5lb3VzLXRhc2tzJz4KKyAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBtaXNjZWxsYW5lb3VzIHRhc2tzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2dlbmVyYXRlX3F0X2NvbmZpZ19maWxlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV3JpdGVzIGEgPGZpbGVuYW1lPnF0LmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlIHVzZWQgZm9yIGJ1aWxkaW5nIGEgUXQtYmFzZWQgYXBwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXNwZHgnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3NwZHg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGJ1aWxkIHN0YWdlIHRoYXQgdGFrZXMgdGhlIHNvdXJjZSBjb2RlIGFuZCBzY2FucyBpdCBvbiBhIHJlbW90ZQorICAgICAgICAgICAgRk9TU09MT0dZIHNlcnZlciBpbiBvcmRlciB0byBwcm9kdWNlIGFuIFNQRFggZG9jdW1lbnQuCisgICAgICAgICAgICBUaGlzIHRhc2sgYXBwbGllcyBvbmx5IHRvIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3BkeCc+PGZpbGVuYW1lPnNwZHg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0ZmMyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sCkBAIC0wLDAgKzEsMTQwOTYgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzwhLS0gRHVtbXkgY2hhcHRlciAtLT4KKzxjaGFwdGVyIGlkPSdyZWYtdmFyaWFibGVzLWdsb3MnPgorCis8dGl0bGU+VmFyaWFibGVzIEdsb3NzYXJ5PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGxpc3RzIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmQgZ2l2ZXMgYW4gb3ZlcnZpZXcKKyAgICBvZiB0aGVpciBmdW5jdGlvbiBhbmQgY29udGVudHMuCis8L3BhcmE+CisKKzxnbG9zc2FyeSBpZD0ncmVmLXZhcmlhYmxlcy1nbG9zc2FyeSc+CisKKworICAgIDxwYXJhPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BQklFWFRFTlNJT04nPkE8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPkI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNBQ0hFJz5DPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz5EPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPkU8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPkY8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdEQic+RzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSE9NRVBBR0UnPkg8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX0RJU0FCTEVEJz5JPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1qJz5KPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0FSQ0gnPks8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+TDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TTwvbGluaz4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnktbic+TjwvbGluaz4gLS0+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9CSkNPUFknPk88L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVAnPlA8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz5RPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SQU5MSUInPlI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPlM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVQnPlQ8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVCT09UX0NPTkZJRyc+VTwvbGluaz4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3Nhcnktdic+VjwvbGluaz4gLS0+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPlc8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVhTRVJWRVInPlg8L2xpbms+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXknPlk8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS16Jz5aPC9saW5rPi0tPgorICAgIDwvcGFyYT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWEnPjx0aXRsZT5BPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFCSUVYVEVOU0lPTic+PGdsb3NzdGVybT5BQklFWFRFTlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFCSUVYVEVOU0lPTltkb2NdID0gIkV4dGVuc2lvbiB0byB0aGUgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSBmaWVsZCBvZiB0aGUgR05VIGNhbm9uaWNhbCBhcmNoaXRlY3R1cmUgbmFtZSAoZS5nLiAiZWFiaSIpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbiB0byB0aGUgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKQorICAgICAgICAgICAgICAgICAgICBmaWVsZCBvZiB0aGUgR05VIGNhbm9uaWNhbCBhcmNoaXRlY3R1cmUgbmFtZQorICAgICAgICAgICAgICAgICAgICAoZS5nLiAiZWFiaSIpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFCSSBleHRlbnNpb25zIGFyZSBzZXQgaW4gdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgZmlsZSBzZXRzIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUJJRVhURU5TSU9OID0gImVhYmkiCisgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFMTE9XX0VNUFRZJz48Z2xvc3N0ZXJtPkFMTE9XX0VNUFRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTExPV19FTVBUWVtkb2NdID0gIlNwZWNpZmllcyBpZiBhbiBvdXRwdXQgcGFja2FnZSBzaG91bGQgc3RpbGwgYmUgcHJvZHVjZWQgaWYgaXQgaXMgZW1wdHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgaWYgYW4gb3V0cHV0IHBhY2thZ2Ugc2hvdWxkIHN0aWxsIGJlIHByb2R1Y2VkIGlmIGl0IGlzIGVtcHR5LgorICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIEJpdEJha2UgZG9lcyBub3QgcHJvZHVjZSBlbXB0eSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgYmVoYXZpb3IgY2FuIGNhdXNlIGlzc3VlcyB3aGVuIHRoZXJlIGlzIGFuCisgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4gb3IKKyAgICAgICAgICAgICAgICAgICBzb21lIG90aGVyIGhhcmQgcnVudGltZSByZXF1aXJlbWVudCBvbiB0aGUgZXhpc3RlbmNlIG9mIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIExpa2UgYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCBhbHdheXMgdXNlIHRoZW0gaW4KKyAgICAgICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlLCBhcyBpbjoKKyAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisgICAgIEFMTE9XX0VNUFRZXyR7UE59LWRldiA9ICIxIgorICAgICBBTExPV19FTVBUWV8ke1BOfS1zdGF0aWNkZXYgPSAiMSIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUxURVJOQVRJVkUnPjxnbG9zc3Rlcm0+QUxURVJOQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFMVEVSTkFUSVZFW2RvY10gPSAiTGlzdHMgY29tbWFuZHMgaW4gYSBwYWNrYWdlIHRoYXQgbmVlZCBhbiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtaW5nIHNjaGVtZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBjb21tYW5kcyBpbiBhIHBhY2thZ2UgdGhhdCBuZWVkIGFuIGFsdGVybmF0aXZlCisgICAgICAgICAgICAgICAgICAgIGJpbmFyeSBuYW1pbmcgc2NoZW1lLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgdGhlIHNhbWUgY29tbWFuZCBpcyBwcm92aWRlZCBpbiBtdWx0aXBsZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGlzIG9jY3VycywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBhIGRpZmZlcmVudCBiaW5hcnkKKyAgICAgICAgICAgICAgICAgICAgbmFtaW5nIHNjaGVtZSBzbyB0aGUgY29tbWFuZHMgY2FuIGNvLWV4aXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHZhcmlhYmxlLCBsaXN0IG91dCB0aGUgcGFja2FnZSdzIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYWxzbyBleGlzdCBhcyBwYXJ0IG9mIGFub3RoZXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaGFzIGZvdXIgY29tbWFuZHMgdGhhdCBhbHNvIGV4aXN0IGFzIHBhcnQgb2YgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCB5b3UgaWRlbnRpZnkgdGhlbSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMVEVSTkFUSVZFX2J1c3lib3ggPSAic2ggc2VkIHRlc3QgYnJhY2tldCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRV9MSU5LX05BTUUnPjxnbG9zc3Rlcm0+QUxURVJOQVRJVkVfTElOS19OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTFRFUk5BVElWRV9MSU5LX05BTUVbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIG1hcCBkdXBsaWNhdGVkIGNvbW1hbmRzIHRvIGFjdHVhbCBsb2NhdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBtYXAgZHVwbGljYXRlZCBjb21tYW5kcworICAgICAgICAgICAgICAgICAgICB0byBhY3R1YWwgbG9jYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5icmFja2V0PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzCisgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZWQgdGhyb3VnaCBhbm90aGVyIHBhY2thZ2UsIHlvdSBtdXN0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIGFjdHVhbCBsb2NhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBTFRFUk5BVElWRV9MSU5LX05BTUVbYnJhY2tldF0gPSAiL3Vzci9iaW4vWyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBiaW5hcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnJhY2tldDwvZmlsZW5hbWU+IGNvbW1hbmQgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPls8L2ZpbGVuYW1lPikgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiBwYWNrYWdlIHJlc2lkZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2ZpbGVuYW1lPiBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQsIGl0IGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiaW5kaXJ9LzxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRV9QUklPUklUWSc+PGdsb3NzdGVybT5BTFRFUk5BVElWRV9QUklPUklUWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUxURVJOQVRJVkVfUFJJT1JJVFlbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IHByaW9yaXRpZXMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBwcmlvcml0aWVzIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgdmFyaWFibGUgdG8gY3JlYXRlIGEgc2luZ2xlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgY29tbWFuZCBuYW1lIG9yIHBhY2thZ2UsIGEgZGVmYXVsdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgZHVwbGljYXRlZCBjb21tYW5kcyByZWdhcmRsZXNzIG9mIHRoZSBwYWNrYWdlLCBvcgorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgZm9yIHNwZWNpZmljIGNvbW1hbmRzIHRpZWQgdG8gcGFydGljdWxhciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBzeW50YXggZm9ybXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiPHJlcGxhY2VhYmxlPnByaW9yaXR5PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1BSSU9SSVRZWzxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT5dID0gIjxyZXBsYWNlYWJsZT5wcmlvcml0eTwvcmVwbGFjZWFibGU+IgorICAgICBBTFRFUk5BVElWRV9QUklPUklUWV88cmVwbGFjZWFibGU+cGtnPC9yZXBsYWNlYWJsZT5bPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPl0gPSAiPHJlcGxhY2VhYmxlPnByaW9yaXR5PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1hbHRlcm5hdGl2ZXMnPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUxURVJOQVRJVkVfVEFSR0VUJz48Z2xvc3N0ZXJtPkFMVEVSTkFUSVZFX1RBUkdFVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUxURVJOQVRJVkVfVEFSR0VUW2RvY10gPSAiVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdCBsaW5rIGxvY2F0aW9ucyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IGxpbmsKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgdmFyaWFibGUgdG8gY3JlYXRlIGEgc2luZ2xlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gZm9yIGFsbCBkdXBsaWNhdGVkIGNvbW1hbmRzIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbmFtZSBvciBwYWNrYWdlLCBhIGRlZmF1bHQgZm9yCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGR1cGxpY2F0ZWQgY29tbWFuZHMgcmVnYXJkbGVzcyBvZiB0aGUgcGFja2FnZSwgb3IKKyAgICAgICAgICAgICAgICAgICAgYSBkZWZhdWx0IGZvciBzcGVjaWZpYyBjb21tYW5kcyB0aWVkIHRvIHBhcnRpY3VsYXIgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBhdmFpbGFibGUgc3ludGF4IGZvcm1zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMVEVSTkFUSVZFX1RBUkdFVCA9ICI8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1RBUkdFVFs8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+XSA9ICI8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1RBUkdFVF88cmVwbGFjZWFibGU+cGtnPC9yZXBsYWNlYWJsZT5bPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPl0gPSAiPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX1RBUkdFVDwvZmlsZW5hbWU+IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQsIGl0IGluaGVyaXRzIHRoZSB2YWx1ZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRV9MSU5LX05BTUUnPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BTFRFUk5BVElWRV9UQVJHRVQ8L2ZpbGVuYW1lPiBhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSwgdGhlIHRhcmdldCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfVEFSR0VUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgIjxmaWxlbmFtZT4ue0JQTn08L2ZpbGVuYW1lPiIgYXBwZW5kZWQgdG8gaXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIGlmIHRoZSBmaWxlIHJlZmVyZW5jZWQgaGFzIG5vdCBiZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCwgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gd2lsbCByZW5hbWUgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdm9pZCB0aGUgbmVlZCB0byByZW5hbWUgYWx0ZXJuYXRpdmUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayB3aGlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmluZyBzdXBwb3J0IGZvciB0aGUgY29tbWFuZCBpZiBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1hbHRlcm5hdGl2ZXMnPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVBQRU5EJz48Z2xvc3N0ZXJtPkFQUEVORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVBQRU5EW2RvY10gPSAiQW4gb3ZlcnJpZGUgbGlzdCBvZiBhcHBlbmQgc3RyaW5ncyBmb3IgZWFjaCBMQUJFTC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQUJFTFMnPjxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVInPjxnbG9zc3Rlcm0+QVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFSW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdhcicuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFSQ0hJVkVSX01PREUnPjxnbG9zc3Rlcm0+QVJDSElWRVJfTU9ERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVJDSElWRVJfTU9ERVtkb2NdID0gIkNvbnRyb2xzIGFyY2hpdmUgY3JlYXRpb24gdXNlZCB3aGVuIHJlbGVhc2luZyBzb3VyY2UgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIGRldGVybWluZXMgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgYSByZWxlYXNlZCBhcmNoaXZlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGNyZWF0ZSBhcmNoaXZlcyBvZiBwYXRjaGVkCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgb3JpZ2luYWwgc291cmNlLCBjb25maWd1cmVkIHNvdXJjZSwgYW5kIHNvIGZvcnRoCisgICAgICAgICAgICAgICAgICAgIGJ5IGVtcGxveWluZyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIGZsYWdzICh2YXJmbGFncyk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIiAgICAgICAgICAgICAgICAgIyBVc2VzIG9yaWdpbmFsICh1bnBhY2tlZCkgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlsZXMuCisKKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gInBhdGNoZWQiICAgICAgICAgICAgICAgICAgIyBVc2VzIHBhdGNoZWQgc291cmNlIGZpbGVzLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGRlZmF1bHQuCisKKyAgICAgQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiICAgICAgICAgICAgICAgIyBVc2VzIGNvbmZpZ3VyZWQgc291cmNlIGZpbGVzLgorCisgICAgIEFSQ0hJVkVSX01PREVbZGlmZl0gPSAiMSIgICAgICAgICAgICAgICAgICAgICAgICMgVXNlcyBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvX3BhdGNoLgorCisgICAgIEFSQ0hJVkVSX01PREVbZGlmZi1leGNsdWRlXSA/PSAiPHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ZmlsZTwvcmVwbGFjZWFibGU+IC4uLiIgICMgTGlzdHMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhjbHVkZSBmcm9tIGRpZmYuCisKKyAgICAgQVJDSElWRVJfTU9ERVtkdW1wZGF0YV0gPSAiMSIgICAgICAgICAgICAgICAgICAgIyBVc2VzIGVudmlyb25tZW50IGRhdGEuCisKKyAgICAgQVJDSElWRVJfTU9ERVtyZWNpcGVdID0gIjEiICAgICAgICAgICAgICAgICAgICAgIyBVc2VzIHJlY2lwZSBhbmQgaW5jbHVkZSBmaWxlcy4KKworICAgICBBUkNISVZFUl9NT0RFW3NycG1dID0gIjEiICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXMgUlBNIHBhY2thZ2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgdmFyaWFibGUgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFTJz48Z2xvc3N0ZXJtPkFTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBU1tkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgYXNzZW1ibGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFTU1VNRV9QUk9WSURFRCc+PGdsb3NzdGVybT5BU1NVTUVfUFJPVklERUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFTU1VNRV9QUk9WSURFRFtkb2NdID0gIkxpc3RzIHJlY2lwZSBuYW1lcyAoUE4gdmFsdWVzKSBCaXRCYWtlIGRvZXMgbm90IGF0dGVtcHQgdG8gYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcmVjaXBlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpIEJpdEJha2UgZG9lcyBub3QgYXR0ZW1wdCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgQml0QmFrZSBhc3N1bWVzIHRoZXNlIHJlY2lwZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIE9wZW5FbWJlZGRlZCBDb3JlLCA8ZmlsZW5hbWU+QVNTVU1FX1BST1ZJREVEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbW9zdGx5IHNwZWNpZmllcyBuYXRpdmUgdG9vbHMgdGhhdCBzaG91bGQgbm90IGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIDxmaWxlbmFtZT5naXQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBhbGxvd3MgZm9yIHRoZSBHaXQgYmluYXJ5IGZyb20gdGhlIGhvc3QgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZCByYXRoZXIgdGhhbiBidWlsZGluZyA8ZmlsZW5hbWU+Z2l0LW5hdGl2ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFTU1VNRV9TSExJQlMnPjxnbG9zc3Rlcm0+QVNTVU1FX1NITElCUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVNTVU1FX1NITElCU1tkb2NdID0gUHJvdmlkZXMgYWRkaXRpb25hbCBzaGxpYnMgcHJvdmlkZXIgbWFwcGluZyBpbmZvcm1hdGlvbiwgd2hpY2ggYWRkcyB0byBvciBvdmVyd3JpdGVzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYWRkaXRpb25hbCA8ZmlsZW5hbWU+c2hsaWJzPC9maWxlbmFtZT4gcHJvdmlkZXIKKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZyBpbmZvcm1hdGlvbiwgd2hpY2ggYWRkcyB0byBvciBvdmVyd3JpdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBwcm92aWRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlIG11bHRpcGxlIGVudHJpZXMgdXNpbmcgc3BhY2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB1c2UgdGhlIGZvbGxvd2luZyBmb3JtIHRvIGFkZCBhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hsaWI8L2ZpbGVuYW1lPiBwcm92aWRlciBvZgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+c2hsaWJuYW1lPC9yZXBsYWNlYWJsZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT4gd2l0aCB0aGUgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+c2hsaWJuYW1lOnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT5bXzxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT5dCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYWRkcyBhIHNoYXJlZCBsaWJyYXJ5IG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJFR0wuc28uMTwvZmlsZW5hbWU+IGFzIGJlaW5nIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bGliZWdsLWltcGxlbWVudGF0aW9uPC9maWxlbmFtZT4gcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBU1NVTUVfU0hMSUJTID0gImxpYkVHTC5zby4xOmxpYmVnbC1pbXBsZW1lbnRhdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFVVEhPUic+PGdsb3NzdGVybT5BVVRIT1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVEhPUltkb2NdID0gIkVtYWlsIGFkZHJlc3MgdXNlZCB0byBjb250YWN0IHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycyBpbiBvcmRlciB0byBzZW5kIHBhdGNoZXMgYW5kIGZvcndhcmQgYnVncy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZW1haWwgYWRkcmVzcyB1c2VkIHRvIGNvbnRhY3QgdGhlIG9yaWdpbmFsIGF1dGhvcgorICAgICAgICAgICAgICAgICAgICBvciBhdXRob3JzIGluIG9yZGVyIHRvIHNlbmQgcGF0Y2hlcyBhbmQgZm9yd2FyZCBidWdzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFVVE9fTElCTkFNRV9QS0dTJz48Z2xvc3N0ZXJtPkFVVE9fTElCTkFNRV9QS0dTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBVVRPX0xJQk5BTUVfUEtHU1tkb2NdID0gIlNwZWNpZmllcyB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2hlY2tlZCBmb3IgbGlicmFyaWVzIGFuZCByZW5hbWVkIGFjY29yZGluZyB0byBEZWJpYW4gbGlicmFyeSBwYWNrYWdlIG5hbWluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaXMgaW5oZXJpdGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFVVE9fTElCTkFNRV9QS0dTPC9maWxlbmFtZT4gc3BlY2lmaWVzIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHNob3VsZCBiZSBjaGVja2VkIGZvciBsaWJyYXJpZXMgYW5kIHJlbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIERlYmlhbiBsaWJyYXJ5IHBhY2thZ2UgbmFtaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtQQUNLQUdFU30iLCB3aGljaCBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlYmlhbiBjbGFzcyB0byBhY3Qgb24gYWxsIHBhY2thZ2VzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgZ2VuZXJhdGVkIGJ5IHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVVUT19TWVNMSU5VWE1FTlUnPjxnbG9zc3Rlcm0+QVVUT19TWVNMSU5VWE1FTlU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVE9fU1lTTElOVVhNRU5VW2RvY10gPSAiRW5hYmxlcyBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudSBmb3IgdGhlIHN5c2xpbnV4IGJvb3Rsb2FkZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudSBmb3IgdGhlIHN5c2xpbnV4CisgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzbGludXgnPjxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBjaGVja3MgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BVVRPUkVWJz48Z2xvc3N0ZXJtPkFVVE9SRVY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVE9SRVZbZG9jXSA9ICJXaGVuIFNSQ1JFViBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUsIGl0IHNwZWNpZmllcyB0byB1c2UgdGhlIGxhdGVzdCBzb3VyY2UgcmV2aXNpb24gaW4gdGhlIHJlcG9zaXRvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+U1JDUkVWPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSwgaXQgc3BlY2lmaWVzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgbGF0ZXN0IHNvdXJjZSByZXZpc2lvbiBpbiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFViA9ICIke0FVVE9SRVZ9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIHByZXZpb3VzIHN0YXRlbWVudCB0byByZXRyaWV2ZSB0aGUgbGF0ZXN0CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2Ygc29mdHdhcmUsIHlvdSBuZWVkIHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEga2VybmVsIHJlY2lwZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPmtlcm5lbDwvbGluaz4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSB1c2UgdGhlIHByZXZpb3VzIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+JHtTUkNQVn08L2ZpbGVuYW1lPiBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGdldCBpbnRvIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBuZWVkIHRvIGNoYW5nZSA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZSBzbyB0aGF0IGl0IGRvZXMgY29udGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTUkNQVn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BVkFJTFRVTkVTJz48Z2xvc3N0ZXJtPkFWQUlMVFVORVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFWQUlMVFVORVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBkZWZpbmVkIENQVSBhbmQgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5pbmdzIChpLmUuICAidHVuZXMiKSBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBkZWZpbmVkIENQVSBhbmQgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAoQUJJKSB0dW5pbmdzIChpLmUuICAidHVuZXMiKSBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgc2ltcGx5IHByZXNlbnRzIHRoZSB0dW5lcyB0aGF0IGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIE5vdCBhbGwgdHVuZXMgbWF5IGJlIGNvbXBhdGlibGUgd2l0aCBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBjb25maWd1cmF0aW9uLCBvciB3aXRoIGVhY2ggb3RoZXIgaW4gYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb21iaW5pbmctbXVsdGlwbGUtdmVyc2lvbnMtbGlicmFyeS1maWxlcy1pbnRvLW9uZS1pbWFnZSc+TXVsdGlsaWI8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBhZGQgYSB0dW5lIHRvIHRoZSBsaXN0LCBiZSBzdXJlIHRvIGFwcGVuZCBpdCB3aXRoCisgICAgICAgICAgICAgICAgICAgIHNwYWNlcyB1c2luZyB0aGUgIis9IiBCaXRCYWtlIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2ltcGx5IHJlcGxhY2UgdGhlIGxpc3QgYnkgdXNpbmcgdGhlICI9IiBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiYXNpYy1zeW50YXgnPkJhc2ljIFN5bnRheDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1iJz48dGl0bGU+QjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CJz48Z2xvc3N0ZXJtPkI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJbZG9jXSA9ICJUaGUgQnVpbGQgRGlyZWN0b3J5LiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwbGFjZXMgZ2VuZXJhdGVkIG9iamVjdHMgaW50byB0aGUgQnVpbGQgRGlyZWN0b3J5IGR1cmluZyBhIHJlY2lwZSdzIGJ1aWxkIHByb2Nlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICBvYmplY3RzIGR1cmluZyBhIHJlY2lwZSdzIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZGlyZWN0b3J5IGlzIHRoZSBzYW1lIGFzIHRoZSA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBkZWZpbmVkIGFzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFMgPSAiJHtXT1JLRElSfS8ke0JQfS8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXBhcmF0ZSB0aGUgKDxmaWxlbmFtZT5TPC9maWxlbmFtZT4pIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBNb3N0IEF1dG90b29scy1iYXNlZCByZWNpcGVzIHN1cHBvcnQgc2VwYXJhdGluZyB0aGVzZQorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkZWZhdWx0cyB0byB1c2luZyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGFuZCBzb21lIGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxnbG9zc3Rlcm0+QkFEX1JFQ09NTUVOREFUSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkFEX1JFQ09NTUVOREFUSU9OU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyBub3QgdG8gaW5zdGFsbCBkZXNwaXRlIGJlaW5nIHJlY29tbWVuZGVkIGJ5IGEgcmVjaXBlLiBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlIElQSyBwYWNrYWdpbmcgYmFja2VuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyAicmVjb21tZW5kZWQtb25seSIgcGFja2FnZXMgdG8gbm90IGluc3RhbGwuCisgICAgICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkLW9ubHkgcGFja2FnZXMgYXJlIHBhY2thZ2VzIGluc3RhbGxlZCBvbmx5CisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHByZXZlbnQgYW55IG9mIHRoZXNlICJyZWNvbW1lbmRlZCIgcGFja2FnZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICBiZWluZyBpbnN0YWxsZWQgYnkgbGlzdGluZyB0aGVtIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OUyA9ICI8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiAuLi4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBnbG9iYWxseSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciB5b3UgY2FuIGF0dGFjaCBpdCB0bworICAgICAgICAgICAgICAgICAgICBhIHNwZWNpZmljIGltYWdlIHJlY2lwZSBieSB1c2luZyB0aGUgcmVjaXBlIG5hbWUgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OU19wbi08cmVwbGFjZWFibGU+dGFyZ2V0X2ltYWdlPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaWYgeW91IGNob29zZSB0byBub3QgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB1c2luZyB0aGlzIHZhcmlhYmxlIGFuZCBzb21lIG90aGVyIHBhY2thZ2VzIGFyZQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhlbSAoaS5lLiBsaXN0ZWQgaW4gYSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlnbm9yZXMgeW91cgorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB3aWxsIGluc3RhbGwgdGhlIHBhY2thZ2VzIHRvIGF2b2lkIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElQSyBhbmQgUlBNIHBhY2thZ2luZyBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGRvZXMgbm90IGV4aXN0IGZvciBERUIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJBU0VfTElCJz48Z2xvc3N0ZXJtPkJBU0VfTElCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQVNFX0xJQltkb2NdID0gIlRoZSBsaWJyYXJ5IGRpcmVjdG9yeSBuYW1lIGZvciB0aGUgQ1BVIG9yIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlicmFyeSBkaXJlY3RvcnkgbmFtZSBmb3IgdGhlIENQVSBvciBBcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkFTRV9MSUI8L2ZpbGVuYW1lPiBhcHBsaWVzIG9ubHkgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIE11bHRpbGliIGNvbnRleHQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5Db21iaW5pbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgTGlicmFyeSBGaWxlcyBpbnRvIE9uZSBJbWFnZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gTXVsdGlsaWIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkFTRV9MSUI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgTXVsdGlsaWIgaXMgbm90IGJlaW5nIHVzZWQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byAibGliIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQVNFX1dPUktESVInPjxnbG9zc3Rlcm0+QkFTRV9XT1JLRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQVNFX1dPUktESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHdvcmsgZGlyZWN0b3J5IGZvciBhbGwgcmVjaXBlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHdvcmsgZGlyZWN0b3J5IGZvciBhbGwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIiR7VE1QRElSfS93b3JrIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9BTExPV0VEX05FVFdPUktTJz48Z2xvc3N0ZXJtPkJCX0FMTE9XRURfTkVUV09SS1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCX0FMTE9XRURfTkVUV09SS1NbZG9jXSA9ICJBIGxpc3Qgb2YgaG9zdHMgdGhhdCB0aGUgZmV0Y2hlciBpcyBhbGxvd2VkIHRvIHVzZSB0byBvYnRhaW4gdGhlIHJlcXVpcmVkIHNvdXJjZSBjb2RlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgaG9zdHMgdGhhdCB0aGUgZmV0Y2hlcgorICAgICAgICAgICAgICAgICAgICBpcyBhbGxvd2VkIHRvIHVzZSB0byBvYnRhaW4gdGhlIHJlcXVpcmVkIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGNvbnNpZGVyYXRpb25zIHN1cnJvdW5kaW5nIHRoaXMgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBob3N0IGxpc3QgaXMgb25seSB1c2VkIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05PX05FVFdPUks8L2ZpbGVuYW1lPiBpcyBlaXRoZXIgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IG9yIHNldCB0byAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGltaXRlZCBzdXBwb3J0IGZvciB3aWxkY2FyZCBtYXRjaGluZyBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvZiBob3N0IG5hbWVzIGV4aXN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXR0aW5nIG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0LmdudS5vcmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZnRwLmdudS5vcmc8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvby5naXQuZ251Lm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfQUxMT1dFRF9ORVRXT1JLUyA9ICIqLmdudS5vcmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pcnJvcnMgbm90IGluIHRoZSBob3N0IGxpc3QgYXJlIHNraXBwZWQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VkIGluIGRlYnVnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGVtcHRzIHRvIGFjY2VzcyBuZXR3b3JrcyBub3QgaW4gdGhlIGhvc3QgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlIGEgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5CQl9BTExPV0VEX05FVFdPUktTPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgY29uanVuY3Rpb24gd2l0aAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgdmVyeSB1c2VmdWwuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgaG9zdCB5b3Ugd2FudCB0byB1c2UgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiByZXN1bHRzIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBmZXRjaGVkIGZyb20gYW4gYWxsb3dlZCBsb2NhdGlvbiBhbmQgYXZvaWRzIHJhaXNpbmcKKyAgICAgICAgICAgICAgICAgICAgYW4gZXJyb3Igd2hlbiBhIGhvc3QgdGhhdCBpcyBub3QgYWxsb3dlZCBpcyBpbiBhCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgZmV0Y2hlciBkb2VzIG5vdCBhdHRlbXB0IHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaG9zdCBsaXN0ZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhZnRlciBhCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWwgZmV0Y2ggZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiBvY2N1cnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZJz48Z2xvc3N0ZXJtPkJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZW2RvY10gPSAiRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kIGZpbGUgKC5iYmFwcGVuZCkgaGFzIG5vIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKC5iYikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGUgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgaGFzIG5vCisgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZGl0aW9uIG9mdGVuIG9jY3VycyB3aGVuIGxheWVycyBnZXQgb3V0IG9mIHN5bmMKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPm9lLWNvcmU8L2ZpbGVuYW1lPiBidW1wcyBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB2ZXJzaW9uIGFuZCB0aGUgb2xkIHJlY2lwZSBubyBsb25nZXIgZXhpc3RzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgbGF5ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgdG8gdGhlIG5ldyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgeWV0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZmF0YWwgYmVoYXZpb3IgaXMgc2FmZXN0IGJlY2F1c2UgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNhbmUgcmVhY3Rpb24gZ2l2ZW4gc29tZXRoaW5nIGlzIG91dCBvZiBzeW5jLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB3aGVuIHlvdXIgY2hhbmdlcyBhcmUgbm8gbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJ5IHNldHRpbmcgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIsICJ5ZXMiLCBvciAidHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFkgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fRElSUyc+PGdsb3NzdGVybT5CQl9ESVNLTU9OX0RJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCX0RJU0tNT05fRElSU1tkb2NdID0gIk1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZCBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZSBwYXJhbWV0ZXJzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIE1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNrIHNwYWNlIG1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIG1vbml0b3JpbmcsIGFkZCB0aGUgPGZpbGVuYW1lPkJCX0RJU0tNT05fRElSUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHlvdXIgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIjxyZXBsYWNlYWJsZT5hY3Rpb248L3JlcGxhY2VhYmxlPiw8cmVwbGFjZWFibGU+ZGlyPC9yZXBsYWNlYWJsZT4sPHJlcGxhY2VhYmxlPnRocmVzaG9sZDwvcmVwbGFjZWFibGU+IFsuLi5dIgorCisgICAgIHdoZXJlOgorCisgICAgICAgIDxyZXBsYWNlYWJsZT5hY3Rpb248L3JlcGxhY2VhYmxlPiBpczoKKyAgICAgICAgICAgQUJPUlQ6ICAgICBJbW1lZGlhdGVseSBhYm9ydCB0aGUgYnVpbGQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KKyAgICAgICAgICAgU1RPUFRBU0tTOiBTdG9wIHRoZSBidWlsZCBhZnRlciB0aGUgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIHRhc2tzIGhhdmUgZmluaXNoZWQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgIGEgdGhyZXNob2xkIGlzIGJyb2tlbi4KKyAgICAgICAgICAgV0FSTjogICAgICBJc3N1ZSBhIHdhcm5pbmcgYnV0IGNvbnRpbnVlIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHdoZW4gYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBhcworICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvbGluaz4gdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBiZSBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgIGNvbmYvbG9jYWwuY29uZiBmaWxlLgorCisgICAgICAgIDxyZXBsYWNlYWJsZT5kaXI8L3JlcGxhY2VhYmxlPiBpczoKKyAgICAgICAgICAgQW55IGRpcmVjdG9yeSB5b3UgY2hvb3NlLiBZb3UgY2FuIHNwZWNpZnkgb25lIG9yCisgICAgICAgICAgIG1vcmUgZGlyZWN0b3JpZXMgdG8gbW9uaXRvciBieSBzZXBhcmF0aW5nIHRoZQorICAgICAgICAgICBncm91cGluZ3Mgd2l0aCBhIHNwYWNlLiAgSWYgdHdvIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAgICBvbiB0aGUgc2FtZSBkZXZpY2UsIG9ubHkgdGhlIGZpcnN0IGRpcmVjdG9yeQorICAgICAgICAgICBpcyBtb25pdG9yZWQuCisKKyAgICAgICAgPHJlcGxhY2VhYmxlPnRocmVzaG9sZDwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBFaXRoZXIgdGhlIG1pbmltdW0gYXZhaWxhYmxlIGRpc2sgc3BhY2UsCisgICAgICAgICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmVlIGlub2Rlcywgb3IKKyAgICAgICAgICAgYm90aC4gIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lLiAgVG8KKyAgICAgICAgICAgb21pdCBvbmUgb3IgdGhlIG90aGVyLCBzaW1wbHkgb21pdCB0aGUgdmFsdWUuCisgICAgICAgICAgIFNwZWNpZnkgdGhlIHRocmVzaG9sZCB1c2luZyBHLCBNLCBLIGZvciBHYnl0ZXMsCisgICAgICAgICAgIE1ieXRlcywgYW5kIEtieXRlcywgcmVzcGVjdGl2ZWx5LiBJZiB5b3UgZG8KKyAgICAgICAgICAgbm90IHNwZWNpZnkgRywgTSwgb3IgSywgS2J5dGVzIGlzIGFzc3VtZWQgYnkKKyAgICAgICAgICAgZGVmYXVsdC4gIERvIG5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sMUcsMTAwSyBXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMUciCisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sLDEwMEsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGV4YW1wbGUgd29ya3Mgb25seSBpZiB5b3UgYWxzbyBwcm92aWRlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgYWJvcnQgd2hlbiBlaXRoZXIgdGhlIGRpc2sgc3BhY2UgaW4gPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIGF2YWlsYWJsZSBmcmVlIGlub2RlcyBkcm9wcyBiZWxvdworICAgICAgICAgICAgICAgICAgICAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHR3byBkaXJlY3RvcmllcyBhcmUgcHJvdmlkZWQgd2l0aCB0aGUgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYWxzbyBpc3N1ZSBhCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgd2hlbiB0aGUgZGlzayBzcGFjZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMSBHYnl0ZSBvciB0aGUgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBkdXJpbmcgaW50ZXJ2YWxzIGFzCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgdGhlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgc3RvcHMgdGhlIGJ1aWxkIGFmdGVyIGFsbCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIHRhc2tzIGNvbXBsZXRlIHdoZW4gdGhlIG1pbmltdW0gZGlzayBzcGFjZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPiR7PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+VE1QRElSPC9saW5rPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZHJvcHMgYmVsb3cgMSBHYnl0ZS4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBtb25pdG9yaW5nIG9jY3VycyBmb3IgdGhlIGZyZWUgaW5vZGVzIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGV4YW1wbGUgaW1tZWRpYXRlbHkgYWJvcnRzIHRoZSBidWlsZCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgZnJlZSBpbm9kZXMgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgZHJvcHMgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBzcGFjZSBtb25pdG9yaW5nIGZvciB0aGUgZGlyZWN0b3J5IGl0c2VsZiBvY2N1cnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTFtkb2NdID0gIkRlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuIFRvIHNldCB0aGVzZSBpbnRlcnZhbHMsIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGlzayBzcGFjZSBhbmQgZnJlZSBpbm9kZSB3YXJuaW5nIGludGVydmFscy4KKyAgICAgICAgICAgICAgICAgICAgVG8gc2V0IHRoZXNlIGludGVydmFscywgZGVmaW5lIHRoZSB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9ESVJTJz48ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgaXRzIGFjdGlvbiBhcyAiV0FSTiIuCisgICAgICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHN1YnNlcXVlbnQgd2FybmluZ3MgYXJlIGlzc3VlZCBlYWNoIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgZGlzayBzcGFjZSBvciBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZnVydGhlciByZWR1Y2VzIGJ5CisgICAgICAgICAgICAgICAgICAgIHRoZSByZXNwZWN0aXZlIGludGVydmFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgeW91IGRvIHVzZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgIldBUk4iIGFjdGlvbiwgdGhlIGRpc2sgbW9uaXRvcmluZyBpbnRlcnZhbCBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgdGhlIHZhcmlhYmxlIGluIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlLAorICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjxyZXBsYWNlYWJsZT5kaXNrX3NwYWNlX2ludGVydmFsPC9yZXBsYWNlYWJsZT4sPHJlcGxhY2VhYmxlPmRpc2tfaW5vZGVfaW50ZXJ2YWw8L3JlcGxhY2VhYmxlPiIKKworICAgICB3aGVyZToKKworICAgICAgICA8cmVwbGFjZWFibGU+ZGlza19zcGFjZV9pbnRlcnZhbDwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBtZW1vcnkgZXhwcmVzc2VkIGluIGVpdGhlcgorICAgICAgICAgICBHLCBNLCBvciBLIGZvciBHYnl0ZXMsIE1ieXRlcywgb3IgS2J5dGVzLAorICAgICAgICAgICByZXNwZWN0aXZlbHkuIFlvdSBjYW5ub3QgdXNlIEdCLCBNQiwgb3IgS0IuCisKKyAgICAgICAgPHJlcGxhY2VhYmxlPmRpc2tfaW5vZGVfaW50ZXJ2YWw8L3JlcGxhY2VhYmxlPiBpczoKKyAgICAgICAgICAgQW4gaW50ZXJ2YWwgb2YgZnJlZSBpbm9kZXMgZXhwcmVzc2VkIGluIGVpdGhlcgorICAgICAgICAgICBHLCBNLCBvciBLIGZvciBHYnl0ZXMsIE1ieXRlcywgb3IgS2J5dGVzLAorICAgICAgICAgICByZXNwZWN0aXZlbHkuIFlvdSBjYW5ub3QgdXNlIEdCLCBNQiwgb3IgS0IuCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHZhcmlhYmxlcyBjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgICAgICBpc3N1ZSBzdWJzZXF1ZW50IHdhcm5pbmdzIGVhY2ggdGltZSB0aGUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGRpc2sgc3BhY2UgZnVydGhlciByZWR1Y2VzIGJ5IDUwIE1ieXRlcyBvciB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIG9mIGZyZWUgaW5vZGVzIGZ1cnRoZXIgcmVkdWNlcyBieSA1IEtieXRlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYmFzZWQgb24gdGhlIGludGVydmFsIG9jY3VyIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBhIHJlc3BlY3RpdmUgaW50ZXJ2YWwgaXMgcmVhY2hlZCBiZXlvbmQgdGhlIGluaXRpYWwgd2FybmluZworICAgICAgICAgICAgICAgICAgICAoaS5lLiAxIEdieXRlcyBhbmQgMTAwIEtieXRlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48Z2xvc3N0ZXJtPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTW2RvY10gPSAiQ2F1c2VzIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzIHRvIGJlIHBsYWNlZCBpbiB0aGUgRExfRElSIGRpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGFyYmFsbHMgb2YgdGhlIEdpdCByZXBvc2l0b3JpZXMsIGluY2x1ZGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgR2l0IG1ldGFkYXRhLCB0byBiZSBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgY3JlYXRpbmcgYW5kIHBsYWNpbmcgdGFyYmFsbHMgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCByZXBvc2l0b3JpZXMgaXMgbm90IHRoZSBkZWZhdWx0IGFjdGlvbiBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+PGdsb3NzdGVybT5CQl9OVU1CRVJfVEhSRUFEUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfTlVNQkVSX1RIUkVBRFNbZG9jXSA9ICJUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsIGF0IGFueSBvbmUgdGltZS4gVGhpcyB2YXJpYWJsZSBpcyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgdG8gYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBidWlsZCBzeXN0ZW0gY29yZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIEJpdEJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICBhdCBhbnkgb25lIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlcworICAgICAgICAgICAgICAgICAgICB0aGlzIHZhcmlhYmxlIHRvIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgY29yZXMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgc3lzdGVtIHdpdGggYSBkdWFsIGNvcmUgcHJvY2Vzc29yIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2VzIGh5cGVyLXRocmVhZGluZyBjYXVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdG8gIjQiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3Igc2luZ2xlIHNvY2tldCBzeXN0ZW1zIChpLmUuIG9uZSBDUFUpLCB5b3Ugc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBoYXZlIHRvIG92ZXJyaWRlIHRoaXMgdmFyaWFibGUgdG8gZ2FpbiBvcHRpbWFsIHBhcmFsbGVsaXNtCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIHZlcnkgbGFyZ2Ugc3lzdGVtcyB0aGF0IGVtcGxveQorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBwaHlzaWNhbCBDUFVzLCB5b3UgbWlnaHQgd2FudCB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBzZXQgaGlnaGVyIHRoYW4gIjIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3BlZWRpbmcgdXAgYnVpbGRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzcGVlZGluZy11cC10aGUtYnVpbGQnPlNwZWVkaW5nIFVwIHRoZSBCdWlsZDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJDTEFTU0VYVEVORCc+PGdsb3NzdGVybT5CQkNMQVNTRVhURU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkNMQVNTRVhURU5EW2RvY10gPSAiQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMgb2YgdGhlIHNvZnR3YXJlLiBDb21tb24gdmFyaWFudHMgZm9yIHJlY2lwZXMgYXJlICduYXRpdmUnLCAnY3Jvc3MnLCAnbmF0aXZlc2RrJyBhbmQgbXVsdGlsaWJzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzIG9mIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgQ29tbW9uIHZhcmlhbnRzIGZvciByZWNpcGVzIGV4aXN0IHN1Y2ggYXMgIm5hdGl2ZXMiIGxpa2UgPGZpbGVuYW1lPnF1aWx0LW5hdGl2ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIGNvcHkgb2YgUXVpbHQgYnVpbHQgdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW07CisgICAgICAgICAgICAgICAgICAgICJjcm9zc2VzIiBzdWNoIGFzIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgYSBjb21waWxlciBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUgYnV0IHByb2R1Y2VzIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcnVuIG9uIHRoZSB0YXJnZXQgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+OworICAgICAgICAgICAgICAgICAgICAibmF0aXZlc2RrIiwgd2hpY2ggdGFyZ2V0cyB0aGUgU0RLIG1hY2hpbmUgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+OworICAgICAgICAgICAgICAgICAgICBhbmQgIm11bGl0bGlicyIgaW4gdGhlIGZvcm0gIjxmaWxlbmFtZT5tdWx0aWxpYjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5tdWx0aWxpYl9uYW1lPC9yZXBsYWNlYWJsZT4iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBidWlsZCBhIGRpZmZlcmVudCB2YXJpYW50IG9mIHRoZSByZWNpcGUgd2l0aCBhIG1pbmltYWwgYW1vdW50IG9mIGNvZGUsIGl0IHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgICAgaXMgYXMgc2ltcGxlIGFzIGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHlvdXIgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm5hdGl2ZSBuYXRpdmVzZGsiCisgICAgIEJCQ0xBU1NFWFRFTkQgPSsgIm11bHRpbGliOjxyZXBsYWNlYWJsZT5tdWx0aWxpYl9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX0NPTExFQ1RJT05TJz48Z2xvc3N0ZXJtPkJCRklMRV9DT0xMRUNUSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFX0NPTExFQ1RJT05TW2RvY10gPSAiTGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLiBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kIHRoZSBvdGhlciBCQkZJTEVfKiB2YXJpYWJsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kIHRoZSBvdGhlciA8ZmlsZW5hbWU+QkJGSUxFXyo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgZWFjaCBsYXllciB3aWxsIGFwcGVuZCBpdHMgbmFtZSB0byB0aGlzIHZhcmlhYmxlIGluIGl0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfUEFUVEVSTic+PGdsb3NzdGVybT5CQkZJTEVfUEFUVEVSTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFX1BBVFRFUk5bZG9jXSA9ICJWYXJpYWJsZSB0aGF0IGV4cGFuZHMgdG8gbWF0Y2ggZmlsZXMgZnJvbSBCQkZJTEVTIGluIGEgcGFydGljdWxhciBsYXllci4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBsYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiBhIGxheWVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiBhIHBhcnRpY3VsYXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIG11c3QKKyAgICAgICAgICAgICAgICAgICAgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCRklMRV9QQVRURVJOX2VtZW5sb3c8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX1BSSU9SSVRZJz48Z2xvc3N0ZXJtPkJCRklMRV9QUklPUklUWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFX1BSSU9SSVRZW2RvY10gPSAiQXNzaWducyB0aGUgcHJpb3JpdHkgZm9yIHJlY2lwZSBmaWxlcyBpbiBlYWNoIGxheWVyLiBTZXR0aW5nIHRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBwcmlvcml0aXplIGEgbGF5ZXIgYWdhaW5zdCBvdGhlciBsYXllcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHNhbWUgcmVjaXBlIGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gcHJpb3JpdGl6ZSBhCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgY29udGFpbiB0aGUgc2FtZSByZWNpcGUgLSBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBsZXR0aW5nIHlvdSBjb250cm9sIHRoZSBwcmVjZWRlbmNlIGZvciB0aGUgbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJlY2VkZW5jZSBlc3RhYmxpc2hlZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgc3RhbmRzIHJlZ2FyZGxlc3Mgb2YgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGxheWVyIHRoYXQgaGFzIGEgcmVjaXBlIHdpdGggYSBoaWdoZXIgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFsdWUgYnV0IGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IGlzIHNldCB0byBoYXZlIGEgbG93ZXIgcHJlY2VkZW5jZSBzdGlsbCBoYXMgYQorICAgICAgICAgICAgICAgICAgICBsb3dlciBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxhcmdlciB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXN1bHRzIGluIGEgaGlnaGVyCisgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgNiBoYXMgYSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSB2YWx1ZSA1LgorICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldCBiYXNlZCBvbiBsYXllcgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgKHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPkxBWUVSREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgcHJpb3JpdHksIGlmIHVuc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGZvciBhIGxheWVyIHdpdGggbm8gZGVwZW5kZW5jaWVzLCBpcyB0aGUgbG93ZXN0IGRlZmluZWQgcHJpb3JpdHkgKyAxCisgICAgICAgICAgICAgICAgICAgIChvciAxIGlmIG5vIHByaW9yaXRpZXMgYXJlIGRlZmluZWQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY29tbWFuZCA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnM8L2ZpbGVuYW1lPiB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGFsbCBjb25maWd1cmVkIGxheWVycyBhbG9uZyB3aXRoIHRoZWlyIHByaW9yaXRpZXMuCisgICAgICAgICAgICAgICAgPC90aXA+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVTJz48Z2xvc3N0ZXJtPkJCRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCRklMRVNbZG9jXSA9ICJMaXN0IG9mIHJlY2lwZSBmaWxlcyB1c2VkIGJ5IEJpdEJha2UgdG8gYnVpbGQgc29mdHdhcmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiByZWNpcGUgZmlsZXMgdXNlZCBieSBCaXRCYWtlIHRvIGJ1aWxkIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCSU5DTFVERUxPR1MnPjxnbG9zc3Rlcm0+QkJJTkNMVURFTE9HUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJJTkNMVURFTE9HU1tkb2NdID0gIlZhcmlhYmxlIHRoYXQgY29udHJvbHMgaG93IEJpdEJha2UgZGlzcGxheXMgbG9ncyBvbiBidWlsZCBmYWlsdXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlIHRoYXQgY29udHJvbHMgaG93IEJpdEJha2UgZGlzcGxheXMgbG9ncyBvbiBidWlsZCBmYWlsdXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCSU5DTFVERUxPR1NfTElORVMnPjxnbG9zc3Rlcm0+QkJJTkNMVURFTE9HU19MSU5FUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJJTkNMVURFTE9HU19MSU5FU1tkb2NdID0gIkFtb3VudCBvZiBsb2cgbGluZXMgcHJpbnRlZCBvbiBmYWlsdXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQklOQ0xVREVMT0dTJz48ZmlsZW5hbWU+QkJJTkNMVURFTE9HUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQsIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFzayBsb2cgZmlsZSB0byBwcmludCB3aGVuIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCA8ZmlsZW5hbWU+QkJJTkNMVURFTE9HU19MSU5FUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIGxvZyBpcyBwcmludGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCTEFZRVJTJz48Z2xvc3N0ZXJtPkJCTEFZRVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkxBWUVSU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMgdG8gZW5hYmxlIGR1cmluZyB0aGUgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgYmJsYXllcnMuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID0gIiBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8gXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0by1ic3AgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS1teWtlcm5lbCBcCisgICAgICAgIgorCisgICAgIEJCTEFZRVJTX05PTl9SRU1PVkFCTEUgPz0gIiBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8gXAorICAgICAgICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCTEFZRVJTX05PTl9SRU1PVkFCTEUnPjxmaWxlbmFtZT5CQkxBWUVSU19OT05fUkVNT1ZBQkxFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBleGlzdHMgb25seSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCB1c2UgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuYWJsZXMgZm91ciBsYXllcnMsIG9uZSBvZiB3aGljaCBpcyBhIGN1c3RvbSwgdXNlci1kZWZpbmVkIGxheWVyCisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5tZXRhLW15a2VybmVsPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSc+PGdsb3NzdGVybT5CQkxBWUVSU19OT05fUkVNT1ZBQkxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkxBWUVSU19OT05fUkVNT1ZBQkxFW2RvY10gPSAiTGlzdHMgY29yZSBsYXllcnMgdGhhdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBiYmxheWVycy5jb25mIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgY29yZSBsYXllcnMgdGhhdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgZHVyaW5nIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBhbiBpbWFnZSBvdXRzaWRlIG9mIEhvYiwgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGlnbm9yZXMgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgQml0QmFrZSB0byBidWlsZCB5b3VyIGltYWdlIHVzaW5nIEhvYiwgeW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgbXVzdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvcmUgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyB0aGVzZSB0d28gbGF5ZXJzIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkJCTEFZRVJTX05PTl9SRU1PVkFCTEU8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLW15a2VybmVsIFwKKyAgICAgICAiCisKKyAgICAgQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJNQVNLJz48Z2xvc3N0ZXJtPkJCTUFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJNQVNLW2RvY10gPSAiUHJldmVudHMgQml0QmFrZSBmcm9tIHByb2Nlc3Npbmcgc3BlY2lmaWMgcmVjaXBlcyBvciByZWNpcGUgYXBwZW5kIGZpbGVzLiBVc2UgdGhlIEJCTUFTSyB2YXJpYWJsZSBmcm9tIHdpdGhpbiBjb25mL2xvY2FsLmNvbmYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmVudHMgQml0QmFrZSBmcm9tIHByb2Nlc3NpbmcgcmVjaXBlcyBhbmQgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUgZnJvbSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPkJCTUFTSzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHRvICJoaWRlIiB0aGVzZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpZ25vcmVzIGFueSByZWNpcGUgb3IgcmVjaXBlIGFwcGVuZCBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBleHByZXNzaW9uLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhcyBpZiBCaXRCYWtlIGRvZXMgbm90IHNlZSB0aGVtIGF0IGFsbC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBtYXRjaGluZyBmaWxlcyBhcmUgbm90IHBhcnNlZCBvciBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgdXNlZCBieSBCaXRCYWtlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHlvdSBwcm92aWRlIGlzIHBhc3NlZCB0byBQeXRob24ncyByZWd1bGFyCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleHByZXNzaW9uIGlzIGNvbXBhcmVkIGFnYWluc3QgdGhlIGZ1bGwgcGF0aHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4IGluZm9ybWF0aW9uLCBzZWUgUHl0aG9uJ3MKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZG9jcy5weXRob24ub3JnL3JlbGVhc2UvMi4zL2xpYi9yZS1zeW50YXguaHRtbCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIGEgY29tcGxldGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHRvIHRlbGwgQml0QmFrZSB0byBpZ25vcmUgYWxsIHJlY2lwZSBhbmQgcmVjaXBlIGFwcGVuZAorICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtdGkvcmVjaXBlcy1taXNjLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQk1BU0sgPSAibWV0YS10aS9yZWNpcGVzLW1pc2MvIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIG1hc2sgb3V0IG11bHRpcGxlIGRpcmVjdG9yaWVzIG9yIHJlY2lwZXMsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmVydGljYWwgYmFyIHRvIHNlcGFyYXRlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBtYXNrcyBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgcmVjaXBlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQk1BU0sgPSAibWV0YS10aS9yZWNpcGVzLW1pc2MvfG1ldGEtdGkvcmVjaXBlcy10aS9wYWNrYWdlZ3JvdXAvIgorICAgICBCQk1BU0sgLj0gInwuKm1ldGEtb2UvcmVjaXBlcy1zdXBwb3J0LyIKKyAgICAgQkJNQVNLIC49ICJ8LipvcGVubGRhcCIKKyAgICAgQkJNQVNLIC49ICJ8LipvcGVuY3YiCisgICAgIEJCTUFTSyAuPSAifC4qbHptYSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBOb3RpY2UgaG93IHRoZSB2ZXJ0aWNhbCBiYXIgaXMgdXNlZCB0byBhcHBlbmQgdGhlIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnkgbmFtZSwgdXNlIHRoZSB0cmFpbGluZworICAgICAgICAgICAgICAgICAgICAgICAgc2xhc2ggY2hhcmFjdGVyIHRvIGVuc3VyZSB5b3UgbWF0Y2gganVzdCB0aGF0IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCUEFUSCc+PGdsb3NzdGVybT5CQlBBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCUEFUSFtkb2NdID0gIlVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUgLmJiY2xhc3MgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZSBQQVRIIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4gYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gQml0QmFrZSBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMO2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbXVzdCBiZSBzdXJlIHRvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSBhcyB5b3Ugd291bGQgYW55IGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBydW4gQml0QmFrZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBCQlBBVEggPSAiPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJTRVJWRVInPjxnbG9zc3Rlcm0+QkJTRVJWRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCU0VSVkVSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgc2VydmVyIHRoYXQgcnVucyBtZW1vcnktcmVzaWRlbnQgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0IGFuZCBzaG91bGQgbm90IGJlIGhhbmQtZWRpdGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldHVwIHNjcmlwdCBleHBvcnRzIHRoZSB2YWx1ZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBCQlNFUlZFUj1sb2NhbGhvc3Q6JHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlNFUlZFUjwvZmlsZW5hbWU+IGlzIHVzZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJJTkNPTkZJRyc+PGdsb3NzdGVybT5CSU5DT05GSUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJJTkNPTkZJR1tkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYmluY29uZmlnLWRpc2FibGVkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBiaW5hcnkgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRvIGRpc2FibGUgaW4gZmF2b3Igb2YgdXNpbmcgcGtnLWNvbmZpZyB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWctZGlzYWJsZWQnPjxmaWxlbmFtZT5iaW5jb25maWctZGlzYWJsZWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGJpbmFyeSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgdG8gZGlzYWJsZSBpbiBmYXZvciBvZiB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IHRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW5jb25maWctZGlzYWJsZWQ8L2ZpbGVuYW1lPiBjbGFzcyB3aWxsCisgICAgICAgICAgICAgICAgICAgIG1vZGlmeSB0aGUgc3BlY2lmaWVkIHNjcmlwdHMgdG8gcmV0dXJuIGFuIGVycm9yIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgY2FsbHMgdG8gdGhlbSBjYW4gYmUgZWFzaWx5IGZvdW5kIGFuZCByZXBsYWNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWRkIG11bHRpcGxlIHNjcmlwdHMsIHNlcGFyYXRlIHRoZW0gYnkgc3BhY2VzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgPGZpbGVuYW1lPmxpYnBuZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYnBuZy1jb25maWcgJHtiaW5kaXJ9L2xpYnBuZzE2LWNvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJJTkNPTkZJR19HTE9CJz48Z2xvc3N0ZXJtPkJJTkNPTkZJR19HTE9CPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCSU5DT05GSUdfR0xPQltkb2NdID0gIldoZW4gaW5oZXJpdGluZyBiaW5jb25maWcuYmJjbGFzcyBmcm9tIGEgcmVjaXBlLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIHdpbGRjYXJkIGZvciBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBuZWVkIGVkaXRpbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPjxmaWxlbmFtZT5iaW5jb25maWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgd2lsZGNhcmQgZm9yCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0aGF0IG5lZWQgZWRpdGluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdHMgYXJlIGVkaXRlZCB0byBjb3JyZWN0IGFueSBwYXRocyB0aGF0IGhhdmUgYmVlbgorICAgICAgICAgICAgICAgICAgICBzZXQgdXAgZHVyaW5nIGNvbXBpbGF0aW9uIHNvIHRoYXQgdGhleSBhcmUgY29ycmVjdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgdXNlIHdoZW4gaW5zdGFsbGVkIGludG8gdGhlIHN5c3Jvb3QgYW5kIGNhbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgcHJvY2Vzc2VzIG9mIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIHdvcmtzLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gdGhlIGNsYXNzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnJz48ZmlsZW5hbWU+YmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlAnPjxnbG9zc3Rlcm0+QlA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJQW2RvY10gPSAiVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQgYW55IHNwZWNpYWwgcmVjaXBlIG5hbWUgc3VmZml4IChpLmUuIC1uYXRpdmUsIGxpYjY0LSwgYW5kIHNvIGZvcnRoKS4gQlAgaXMgY29tcHJpc2VkIG9mICR7QlBOfS0ke1BWfSIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uIGJ1dCB3aXRob3V0IGFueSBzcGVjaWFsCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBuYW1lIHN1ZmZpeCAoaS5lLiA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+bGliNjQtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CUDwvZmlsZW5hbWU+IGlzIGNvbXByaXNlZCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0ibW9ub3NwYWNlZCI+CisgICAgICR7QlBOfS0ke1BWfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlBOJz48Z2xvc3N0ZXJtPkJQTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlBOW2RvY10gPSAiVGhlIGJhcmUgbmFtZSBvZiB0aGUgcmVjaXBlLiBUaGlzIHZhcmlhYmxlIGlzIGEgdmVyc2lvbiBvZiB0aGUgUE4gdmFyaWFibGUgYnV0IHJlbW92ZXMgY29tbW9uIHN1ZmZpeGVzIGFuZCBwcmVmaXhlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFyZSBuYW1lIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYSB2ZXJzaW9uIG9mIHRoZSA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBidXQgcmVtb3ZlcyBjb21tb24gc3VmZml4ZXMgc3VjaCBhcyAiLW5hdGl2ZSIgYW5kICItY3Jvc3MiIGFzIHdlbGwKKyAgICAgICAgICAgICAgICAgICAgYXMgcmVtb3ZlcyBjb21tb24gcHJlZml4ZXMgc3VjaCBhcyBtdWx0aWxpYidzICJsaWI2NC0iIGFuZCAibGliMzItIi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YWN0IGxpc3Qgb2Ygc3VmZml4ZXMgcmVtb3ZlZCBpcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUEVDSUFMX1BLR1NVRkZJWCc+PGZpbGVuYW1lPlNQRUNJQUxfUEtHU1VGRklYPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhY3QgbGlzdCBvZiBwcmVmaXhlcyByZW1vdmVkIGlzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1MUFJFRklYJz48ZmlsZW5hbWU+TUxQUkVGSVg8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFByZWZpeGVzIGFyZSByZW1vdmVkIGZvciA8ZmlsZW5hbWU+bXVsdGlsaWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IGNhc2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVR1RSQUNLRVInPjxnbG9zc3Rlcm0+QlVHVFJBQ0tFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVHVFJBQ0tFUltkb2NdID0gIlNwZWNpZmllcyBhIFVSTCBmb3IgYW4gdXBzdHJlYW0gYnVnIHRyYWNraW5nIHdlYnNpdGUgZm9yIGEgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIFVSTCBmb3IgYW4gdXBzdHJlYW0gYnVnIHRyYWNraW5nIHdlYnNpdGUgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCB1c2UgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB0aGUgdmFyaWFibGUgaXMgYSB1c2VmdWwgcG9pbnRlciBpbiBjYXNlIGEgYnVnCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBuZWVkcyB0byBiZSBtYW51YWxseSByZXBvcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9BUkNIJz48Z2xvc3N0ZXJtPkJVSUxEX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIGk2ODYpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBidWlsZCBob3N0CisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5pNjg2PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfQVJDSDwvZmlsZW5hbWU+IGZyb20gdGhlIG1hY2hpbmUgbmFtZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBieSB0aGUgPGZpbGVuYW1lPnVuYW1lPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9DRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERfQ0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9DRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfQ1BQRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERfQ1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0NQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKSB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX0NYWEZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEX0NYWEZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9DWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNYWEZMQUdTJz48ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfTERGTEFHUyc+PGdsb3NzdGVybT5CVUlMRF9MREZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9MREZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX09QVElNSVpBVElPTic+PGdsb3NzdGVybT5CVUlMRF9PUFRJTUlaQVRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX09QVElNSVpBVElPTltkb2NdID0gIlNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCBvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCBvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmxhZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQ0ZMQUdTJz48ZmlsZW5hbWU+QlVJTERfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ0ZMQUdTJz48ZmlsZW5hbWU+QlVJTERTREtfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX09QVElNSVpBVElPTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgICAgICItTzIgLXBpcGUiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX09TJz48Z2xvc3N0ZXJtPkJVSUxEX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9PU1tkb2NdID0gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIChpbiBsb3dlciBjYXNlKSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIExpbnV4KS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaW4gdXNlIG9uIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBob3N0IChlLmcuICJsaW51eCIpLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfT1M8L2ZpbGVuYW1lPiBmcm9tIHRoZSBPUyByZXBvcnRlZCBieQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnVuYW1lPC9maWxlbmFtZT4gY29tbWFuZCAtIHRoZSBmaXJzdCB3b3JkLAorICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgdG8gbG93ZXItY2FzZSBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX1BSRUZJWCc+PGdsb3NzdGVybT5CVUlMRF9QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX1BSRUZJWFtkb2NdID0gIlRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmUgcmVjaXBlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggdXNlZCBmb3IgbmF0aXZlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9QUkVGSVg8L2ZpbGVuYW1lPiB2YWx1ZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBuYXRpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9TWVMnPjxnbG9zc3Rlcm0+QlVJTERfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRF9TWVNbZG9jXSA9ICJUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggdXNlZCBmb3IgbmF0aXZlIHJlY2lwZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBob3N0IChpLmUuIHdoZW4gYnVpbGRpbmcgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQVJDSCc+PGZpbGVuYW1lPkJVSUxEX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9WRU5ET1InPjxmaWxlbmFtZT5CVUlMRF9WRU5ET1I8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfT1MnPjxmaWxlbmFtZT5CVUlMRF9PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgPGZpbGVuYW1lPkJVSUxEX1NZUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX1ZFTkRPUic+PGdsb3NzdGVybT5CVUlMRF9WRU5ET1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgQlVJTERfVkVORE9SW2RvY10gPSAiVGhlIHZlbmRvciBuYW1lIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHZlbmRvciBuYW1lIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nICgiIikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERESVInPjxnbG9zc3Rlcm0+QlVJTERESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxERElSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGVmaW5lIHRoaXMgZGlyZWN0b3J5IGluZGlyZWN0bHkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyBieSBwYXNzaW5nIGluIGEgQnVpbGQgRGlyZWN0b3J5IHBhdGggd2hlbiB5b3UgcnVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBzY3JpcHRzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcnVuIHRoZSBzY3JpcHRzIGFuZCBkbyBub3QgcHJvdmlkZSBhIEJ1aWxkIERpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBwYXRoLCB0aGUgPGZpbGVuYW1lPkJVSUxERElSPC9maWxlbmFtZT4gZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0NPTU1JVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0NPTU1JVFtkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0byBjb21taXQgdGhlIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IGluIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNvbW1pdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaGlzdG9yeSBvdXRwdXQgaW4gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgdGhpcyBsb2NhbCByZXBvc2l0b3J5IHdpbGwgYmUgbWFpbnRhaW5lZAorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIGEgY29tbWl0IHdpbGwgYmUgY3JlYXRlZCBvbiBldmVyeQorICAgICAgICAgICAgICAgICAgICBidWlsZCBmb3IgY2hhbmdlcyB0byBlYWNoIHRvcC1sZXZlbCBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IChpbWFnZXMsIHBhY2thZ2VzLCBhbmQgc2RrKS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdHJhY2sgY2hhbmdlcyB0byBidWlsZCBoaXN0b3J5IG92ZXIKKyAgICAgICAgICAgICAgICAgICAgdGltZSwgeW91IHNob3VsZCBzZXQgdGhpcyB2YWx1ZSB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgY29tbWl0IHRoZSBidWlsZCBoaXN0b3J5IG91dHB1dCBpbiBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9DT01NSVQgPz0gIjAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUic+PGdsb3NzdGVybT5CVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1JbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGF1dGhvciB0byB1c2UgZm9yIGVhY2ggR2l0IGNvbW1pdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGF1dGhvciB0byB1c2UgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgR2l0IGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIHRoZSA8ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byB3b3JrLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgR2l0IHJlcXVpcmVzIHRoYXQgdGhlIHZhbHVlIHlvdSBwcm92aWRlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdGFrZXMgdGhlIGZvcm0gb2YgIm5hbWUgJmx0O2VtYWlsQGhvc3QmZ3Q7Ii4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkaW5nIGFuIGVtYWlsIGFkZHJlc3Mgb3IgaG9zdCB0aGF0IGlzIG5vdCB2YWxpZCBkb2VzCisgICAgICAgICAgICAgICAgICAgIG5vdCBwcm9kdWNlIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIHNldHMgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1IgPz0gImJ1aWxkaGlzdG9yeSAmbHQ7YnVpbGRoaXN0b3J5QCR7RElTVFJPfSZndDsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfRElSJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxESElTVE9SWV9ESVJbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBidWlsZCBoaXN0b3J5IGluZm9ybWF0aW9uIGlzIGtlcHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaGlzdG9yeSBpbmZvcm1hdGlvbiBpcyBrZXB0LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIHZhcmlhYmxlIHdvcmtzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkuY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBzZXRzIHRoZSBkaXJlY3RvcnkgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfRElSID89ICIke1RPUERJUn0vYnVpbGRoaXN0b3J5IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERISVNUT1JZX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmVzIHRvIGJlIGVuYWJsZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmVzCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBidWlsZCBoaXN0b3J5IHdvcmtzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhyZWUgZmVhdHVyZXMgaW4gdGhlIGZvcm0gb2YgYQorICAgICAgICAgICAgICAgICAgICBzcGFjZS1zZXBhcmF0ZWQgbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXNpcyBvZiB0aGUgY29udGVudHMgb2YgaW1hZ2VzLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBhbW9uZyBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGFja2FnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIG9mIHRoZSBjb250ZW50cyBvZiBpbmRpdmlkdWFsIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zZGs6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmFseXNpcyBvZiB0aGUgY29udGVudHMgb2YgdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQga2l0IChTREspLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBlbmFibGVzIGFsbCB0aHJlZSBmZWF0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfRkVBVFVSRVMgPz0gImltYWdlIHBhY2thZ2Ugc2RrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9JTUFHRV9GSUxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgbGlzdCBvZiBwYXRocyB0byBmaWxlcyBjb3BpZWQgZnJvbSB0aGUgaW1hZ2UgY29udGVudHMgaW50byB0aGUgYnVpbGQgaGlzdG9yeSBkaXJlY3RvcnkgdW5kZXIgYW4gImltYWdlLWZpbGVzIiBkaXJlY3RvcnkgaW4gdGhlIGRpcmVjdG9yeSBmb3IgdGhlIGltYWdlLCBzbyB0aGF0IHlvdSBjYW4gdHJhY2sgdGhlIGNvbnRlbnRzIG9mIGVhY2ggZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhdGhzIHRvIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGNvcGllZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBpbWFnZSBjb250ZW50cyBpbnRvIHRoZSBidWlsZCBoaXN0b3J5IGRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgICAgICAgICBhbiAiaW1hZ2UtZmlsZXMiIGRpcmVjdG9yeSBpbiB0aGUgZGlyZWN0b3J5IGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UsIHNvIHRoYXQgeW91IGNhbiB0cmFjayB0aGUgY29udGVudHMgb2YgZWFjaCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyB0byBjb3B5IDxmaWxlbmFtZT4vZXRjL3Bhc3N3ZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+L2V0Yy9ncm91cDwvZmlsZW5hbWU+LCB3aGljaCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgICAgIG1vbml0b3IgZm9yIGNoYW5nZXMgaW4gdXNlciBhbmQgZ3JvdXAgZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBtb2RpZnkgdGhlIGxpc3QgdG8gaW5jbHVkZSBhbnkgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyBhbiBpbnZhbGlkIHBhdGggZG9lcyBub3QgcHJvZHVjZSBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2FuIGluY2x1ZGUgZmlsZXMgdGhhdCBtaWdodAorICAgICAgICAgICAgICAgICAgICBub3QgYWx3YXlzIGJlIHByZXNlbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgcGF0aHMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfSU1BR0VfRklMRVMgPz0gIi9ldGMvcGFzc3dkIC9ldGMvZ3JvdXAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfUFVTSF9SRVBPJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9QVVNIX1JFUE88L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxESElTVE9SWV9QVVNIX1JFUE9bZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBvcHRpb25hbGx5IHNwZWNpZmllcyBhIHJlbW90ZSByZXBvc2l0b3J5IHRvIHdoaWNoIGJ1aWxkIGhpc3RvcnkgcHVzaGVzIEdpdCBjaGFuZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIGEgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgdG8gd2hpY2ggYnVpbGQgaGlzdG9yeSBwdXNoZXMgR2l0IGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciA8ZmlsZW5hbWU+QlVJTERISVNUT1JZX1BVU0hfUkVQTzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIHdvcmssCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZXBvc2l0b3J5IHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgdGhhdCBzcGVjaWZpZXMgYSByZXBvc2l0b3J5IGFzIHVuZGVyc3Rvb2QgYnkKKyAgICAgICAgICAgICAgICAgICAgR2l0LCBvciBhbHRlcm5hdGl2ZWx5IHRvIGEgcmVtb3RlIG5hbWUgdGhhdCB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICBzZXQgdXAgbWFudWFsbHkgdXNpbmcgPGZpbGVuYW1lPmdpdCByZW1vdGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfUFVTSF9SRVBPID89ICIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19DRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERTREtfQ0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRFNES19DRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERTREtfQ1BQRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERTREtfQ1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU0RLX0NQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1BQRkxBR1MnPjxmaWxlbmFtZT5DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19DWFhGTEFHUyc+PGdsb3NzdGVybT5CVUlMRFNES19DWFhGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTREtfQ1hYRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMrKyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19MREZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEU0RLX0xERkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU0RLX0xERkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU1RBVFNfQkFTRSc+PGdsb3NzdGVybT5CVUlMRFNUQVRTX0JBU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU1RBVFNfQkFTRVtkb2NdID0gIlBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGJ1aWxkIHN0YXRpc3RpY3Mgd2hlbiB5b3UgdXNlIGFuZCBlbmFibGUgdGhlIGJ1aWxkc3RhdHMgY2xhc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcyB3aGVuIHlvdSB1c2UgYW5kIGVuYWJsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRzdGF0cyc+PGZpbGVuYW1lPmJ1aWxkc3RhdHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QlVJTERTVEFUU19CQVNFPC9maWxlbmFtZT4gZGlyZWN0b3J5IGRlZmF1bHRzCisgICAgICAgICAgICAgICAgICAgIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59L2J1aWxkc3RhdHMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVTWUJPWF9TUExJVF9TVUlEJz48Z2xvc3N0ZXJtPkJVU1lCT1hfU1BMSVRfU1VJRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVTWUJPWF9TUExJVF9TVUlEW2RvY10gPSAiRm9yIHRoZSBCdXN5Qm94IHJlY2lwZSwgc3BlY2lmaWVzIHdoZXRoZXIgdG8gc3BsaXQgdGhlIG91dHB1dCBleGVjdXRhYmxlIGZpbGUgaW50byB0d28gcGFydHM6IG9uZSBmb3IgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNldHVpZCByb290LCBhbmQgb25lIGZvciB0aGUgcmVtYWluaW5nIGZlYXR1cmVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgQnVzeUJveCByZWNpcGUsIHNwZWNpZmllcyB3aGV0aGVyIHRvIHNwbGl0IHRoZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZXhlY3V0YWJsZSBmaWxlIGludG8gdHdvIHBhcnRzOiBvbmUgZm9yIGZlYXR1cmVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcmVxdWlyZSA8ZmlsZW5hbWU+c2V0dWlkIHJvb3Q8L2ZpbGVuYW1lPiwgYW5kIG9uZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlbWFpbmluZyBmZWF0dXJlcyAoaS5lLiB0aG9zZSB0aGF0IGRvIG5vdCByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXR1aWQgcm9vdDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CVVNZQk9YX1NQTElUX1NVSUQ8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byAiMSIsIHdoaWNoIHJlc3VsdHMgaW4gYSBzaW5nbGUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMCIgdG8gc3BsaXQgdGhlIG91dHB1dCBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1jJz48dGl0bGU+QzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DQUNIRSc+PGdsb3NzdGVybT5DQUNIRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ0FDSEVbZG9jXSAgPSAiVGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgYSBjYWNoZSBvZiB0aGUgbWV0YWRhdGEuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIHRvIHN0b3JlIGEgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNvIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyc2VkIGV2ZXJ5IHRpbWUgQml0QmFrZSBpcworICAgICAgICAgICAgICAgICAgICBzdGFydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNDJz48Z2xvc3N0ZXJtPkNDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDQ1tkb2NdID0gIk1pbmltdW0gY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQyBjb21waWxlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdXNlZCB0byBydW4gdGhlIEMKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0ZMQUdTJz48Z2xvc3N0ZXJtPkNGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ0ZMQUdTW2RvY10gPSAiRmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdGhlIHNhbWUgYXMgVEFSR0VUX0NGTEFHUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZXhwb3J0ZWQgdG8gYW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRodXMgbWFkZSB2aXNpYmxlIHRvIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DRkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9DRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEU0RLX0NGTEFHUyc+PGZpbGVuYW1lPkJVSUxEU0RLX0NGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNMQVNTT1ZFUlJJREUnPjxnbG9zc3Rlcm0+Q0xBU1NPVkVSUklERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ0xBU1NPVkVSUklERVtkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHNwZWNpZnlpbmcgdGhlIHNwZWNpYWwgY2xhc3Mgb3ZlcnJpZGUgdGhhdCBzaG91bGQgY3VycmVudGx5IGFwcGx5IChlLmcuICJjbGFzcy10YXJnZXQiLCAiY2xhc3MtbmF0aXZlIiwgYW5kIHNvIGZvcnRoKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBpbnRlcm5hbCB2YXJpYWJsZSBzcGVjaWZ5aW5nIHRoZSBzcGVjaWFsIGNsYXNzIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGN1cnJlbnRseSBhcHBseSAoZS5nLiAiY2xhc3MtdGFyZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImNsYXNzLW5hdGl2ZSIsIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzc2VzIHRoYXQgdXNlIHRoaXMgdmFyaWFibGUgc2V0IGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBub3JtYWxseSBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5DTEFTU09WRVJSSURFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZ29lcyBpbnRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gY2FuIGJlIHVzZWQgYXMgYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSAicHl0aG9uLW5hdGl2ZSIgaXMgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBidWlsZGluZyBmb3IgdGhlIG5hdGl2ZSBjYXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcHl0aG9uLW5hdGl2ZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNMRUFOQlJPS0VOJz48Z2xvc3N0ZXJtPkNMRUFOQlJPS0VOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDTEVBTkJST0tFTltkb2NdID0gIlByZXZlbnRzIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBydW5uaW5nICdtYWtlIGNsZWFuJyBkdXJpbmcgdGhlIGRvX2NvbmZpZ3VyZSB0YXNrLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMSIgd2l0aGluIGEgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q0xFQU5CUk9LRU48L2ZpbGVuYW1lPiBzcGVjaWZpZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1ha2UgY2xlYW48L2ZpbGVuYW1lPiBjb21tYW5kIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsgZm9yIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIG5vdCB0cnkKKyAgICAgICAgICAgICAgICAgICAgdG8gcnVuIDxmaWxlbmFtZT5tYWtlIGNsZWFuPC9maWxlbmFtZT4gZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTUJJTkVEX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkNPTUJJTkVEX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01CSU5FRF9GRUFUVVJFU1tkb2NdID0gIkEgc2V0IG9mIGZlYXR1cmVzIGNvbW1vbiBiZXR3ZWVuIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIERJU1RST19GRUFUVVJFUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBhIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgdGhhdCBhcmUgZW5hYmxlZCBpbgorICAgICAgICAgICAgICAgICAgICBib3RoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3QgbGlzdCBvZiBmZWF0dXJlcyBjb250YWlucyBmZWF0dXJlcyB0aGF0IG1ha2UKKyAgICAgICAgICAgICAgICAgICAgc2Vuc2UgdG8gYmUgY29udHJvbGxlZCBib3RoIGF0IHRoZSBtYWNoaW5lIGFuZCBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSAiYmx1ZXRvb3RoIiBmZWF0dXJlIHJlcXVpcmVzIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgYnV0IHNob3VsZCBhbHNvIGJlIG9wdGlvbmFsIGF0IHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgbGV2ZWwsIGluIGNhc2UgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIEJsdWV0b290aCBidXQgeW91CisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBldmVyIGludGVuZCB0byB1c2UgaXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NTU9OX0xJQ0VOU0VfRElSJz48Z2xvc3N0ZXJtPkNPTU1PTl9MSUNFTlNFX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09NTU9OX0xJQ0VOU0VfRElSW2RvY10gPSAiUG9pbnRzIHRvIG1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LCB3aGljaCBpcyB3aGVyZSBnZW5lcmljIGxpY2Vuc2UgZmlsZXMgcmVzaWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byA8ZmlsZW5hbWU+bWV0YS9maWxlcy9jb21tb24tbGljZW5zZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB3aGVyZSBnZW5lcmljIGxpY2Vuc2UgZmlsZXMgcmVzaWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTVBBVElCTEVfSE9TVCc+PGdsb3NzdGVybT5DT01QQVRJQkxFX0hPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTVBBVElCTEVfSE9TVFtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gb25lIG9yIG1vcmUgaG9zdHMgKHdoZW4gdGhlIHJlY2lwZSBpcyBuYXRpdmUpIG9yIG9uZSBvciBtb3JlIHRhcmdldHMgKHdoZW4gdGhlIHJlY2lwZSBpcyBub24tbmF0aXZlKSB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSBob3N0cworICAgICAgICAgICAgICAgICAgICAod2hlbiB0aGUgcmVjaXBlIGlzIG5hdGl2ZSkgb3Igb25lIG9yIG1vcmUgdGFyZ2V0cyAod2hlbgorICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGlzIG5vbi1uYXRpdmUpIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0idmFyLUhPU1RfU1lTIj48ZmlsZW5hbWU+SE9TVF9TWVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBzdG9wIHJlY2lwZXMgZnJvbSBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICBmb3IgY2xhc3NlcyBvZiBzeXN0ZW1zIHdpdGggd2hpY2ggdGhlIHJlY2lwZXMgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICBTdG9wcGluZyB0aGVzZSBidWlsZHMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBhbHNvIGhlbHBzIHRvIGluY3JlYXNlIHBhcnNpbmcgc3BlZWQKKyAgICAgICAgICAgICAgICAgICAgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBza2lwcyBwYXJzaW5nIHJlY2lwZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT01QQVRJQkxFX01BQ0hJTkUnPjxnbG9zc3Rlcm0+Q09NUEFUSUJMRV9NQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01QQVRJQkxFX01BQ0hJTkVbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIHRhcmdldCBtYWNoaW5lcyB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZXMgd2l0aCB3aGljaCBhIHJlY2lwZSBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJ2YXItTUFDSElORU9WRVJSSURFUyI+PGZpbGVuYW1lPk1BQ0hJTkVPVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBzdG9wIHJlY2lwZXMgZnJvbSBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICBmb3IgbWFjaGluZXMgd2l0aCB3aGljaCB0aGUgcmVjaXBlcyBhcmUgbm90IGNvbXBhdGlibGUuCisgICAgICAgICAgICAgICAgICAgIFN0b3BwaW5nIHRoZXNlIGJ1aWxkcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdpdGgga2VybmVscy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGFsc28gaGVscHMgdG8gaW5jcmVhc2UgcGFyc2luZyBzcGVlZAorICAgICAgICAgICAgICAgICAgICBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIHNraXBzIHBhcnNpbmcgcmVjaXBlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NUExFTUVOVEFSWV9HTE9CJz48Z2xvc3N0ZXJtPkNPTVBMRU1FTlRBUllfR0xPQjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09NUExFTUVOVEFSWV9HTE9CW2RvY10gPSAiRGVmaW5lcyB3aWxkY2FyZHMgdG8gbWF0Y2ggd2hlbiBpbnN0YWxsaW5nIGEgbGlzdCBvZiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGZvciBhbGwgdGhlIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhbiBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHdpbGRjYXJkcyB0byBtYXRjaCB3aGVuIGluc3RhbGxpbmcgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgZm9yIGFsbCB0aGUgcGFja2FnZXMgZXhwbGljaXRseQorICAgICAgICAgICAgICAgICAgICAob3IgaW1wbGljaXRseSkgaW5zdGFsbGVkIGluIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGxpc3Qgb2YgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBpcyBhc3NvY2lhdGVkCisgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gaXRlbSB0aGF0IGNhbiBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSB1c2FnZSBvZiB0aGlzIGlzIHRoZSAiZGV2LXBrZ3MiIGl0ZW0gdGhhdCB3aGVuCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZGV2IHBhY2thZ2VzIChjb250YWluaW5nIGhlYWRlcnMgYW5kIG90aGVyCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGZpbGVzKSBmb3IgZXZlcnkgcGFja2FnZSBpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBhIG5ldyBmZWF0dXJlIGl0ZW0gcG9pbnRpbmcgdG8gYSB3aWxkY2FyZCwgdXNlIGEKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZmxhZyB0byBzcGVjaWZ5IHRoZSBmZWF0dXJlIGl0ZW0gbmFtZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2YWx1ZSB0byBzcGVjaWZ5IHRoZSB3aWxkY2FyZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTVBMRU1FTlRBUllfR0xPQltkZXYtcGtnc10gPSAnKi1kZXYnCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GX1ZFUlNJT04nPjxnbG9zc3Rlcm0+Q09ORl9WRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GX1ZFUlNJT05bZG9jXSA9ICJUcmFja3MgdGhlIHZlcnNpb24gb2YgbG9jYWwuY29uZi4gIEluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi8gY2hhbmdlcyBpbmNvbXBhdGlibHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVHJhY2tzIHRoZSB2ZXJzaW9uIG9mIHRoZSBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgPGZpbGVuYW1lPkNPTkZfVkVSU0lPTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudHMgZWFjaCB0aW1lIDxmaWxlbmFtZT5idWlsZC9jb25mLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GRklMRVMnPjxnbG9zc3Rlcm0+Q09ORkZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GRklMRVNbZG9jXSA9ICJJZGVudGlmaWVzIGVkaXRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVzIGVkaXRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0gKFBNUykgaXMgYmVpbmcgdXNlZCB0byB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgb24gdGhlIHRhcmdldCBzeXN0ZW0sIGl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB5b3UgaGF2ZSBjaGFuZ2VkIGFmdGVyIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoYXQgeW91IG5vdyB3YW50IHRvIHJlbWFpbiB1bmNoYW5nZWQgYXJlIG92ZXJ3cml0dGVuLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgZWRpdGFibGUgZmlsZXMgbWlnaHQgZXhpc3QgaW4gdGhlIHBhY2thZ2UgdGhhdCB5b3UgZG8gbm90CisgICAgICAgICAgICAgICAgICAgIHdhbnQgcmVzZXQgYXMgcGFydCBvZiB0aGUgcGFja2FnZSB1cGRhdGUgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBsaXN0IHRoZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0aGF0IHlvdSB3aXNoIHRvIHByZXZlbnQgdGhlIFBNUyBmcm9tIG92ZXJ3cml0aW5nIGR1cmluZyB0aGlzIHVwZGF0ZSBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgcHJvdmlkZSBhIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSB0aGF0IGlkZW50aWZpZXMgdGhlIHJlc3VsdGluZyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGVuLCBwcm92aWRlIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vZmlsZTEgXAorICAgICAgICAke3N5c2NvbmZkaXJ9L2ZpbGUyICR7c3lzY29uZmRpcn0vZmlsZTMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWxhdGlvbnNoaXAgZXhpc3RzIGJldHdlZW4gdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+RklMRVM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXMgbGlzdGVkIHdpdGhpbiA8ZmlsZW5hbWU+Q09ORkZJTEVTPC9maWxlbmFtZT4gbXVzdCBiZSBhIHN1YnNldCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMgbGlzdGVkIHdpdGhpbiA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB5b3UgcHJvdmlkZSB3aXRoIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcmUgc2ltcGx5IGJlaW5nIGlkZW50aWZpZWQgc28gdGhhdCB0aGUgUE1TIHdpbGwgbm90IG92ZXJ3cml0ZSB0aGVtLAorICAgICAgICAgICAgICAgICAgICBpdCBtYWtlcyBzZW5zZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlcyBtdXN0IGFscmVhZHkgYmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgcGFja2FnZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHBhdGhzIGFzIHBhcnQgb2YgdGhlIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgZ29vZCBwcmFjdGljZSB0byB1c2UgYXBwcm9wcmlhdGUgcGF0aCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+JHtzeXNjb25mZGlyfTwvZmlsZW5hbWU+IHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPiR7YmluZGlyfTwvZmlsZW5hbWU+IHJhdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIDxmaWxlbmFtZT4vdXNyL2JpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHRoZXNlIHZhcmlhYmxlcyBhdCB0aGUgdG9wIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRSc+PGdsb3NzdGVybT5DT05GSUdfSU5JVFJBTUZTX1NPVVJDRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORklHX0lOSVRSQU1GU19TT1VSQ0VbZG9jXSA9ICJJZGVudGlmaWVzIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpIHNvdXJjZSBmaWxlcy4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVjZWl2ZXMgYW5kIHVzZXMgdGhpcyBrZXJuZWwgS2NvbmZpZyB2YXJpYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVzIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVjZWl2ZXMgYW5kIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBrZXJuZWwgS2NvbmZpZyB2YXJpYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBudWxsICgiIikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U8L2ZpbGVuYW1lPiBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIGEgc2luZ2xlIGNwaW8gYXJjaGl2ZSB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jcGlvPC9maWxlbmFtZT4gc3VmZml4IG9yIGEKKyAgICAgICAgICAgICAgICAgICAgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGZvciBidWlsZGluZworICAgICAgICAgICAgICAgICAgICB0aGUgaW5pdHJhbWZzIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBBIGNwaW8gYXJjaGl2ZSBzaG91bGQgY29udGFpbiBhIGZpbGVzeXN0ZW0gYXJjaGl2ZQorICAgICAgICAgICAgICAgICAgICB0byBiZSB1c2VkIGFzIGFuIGluaXRyYW1mcyBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3JpZXMgc2hvdWxkIGNvbnRhaW4gYSBmaWxlc3lzdGVtIGxheW91dCB0byBiZQorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgaW5pdHJhbWZzIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBzaG91bGQgY29udGFpbiBlbnRyaWVzIGFjY29yZGluZyB0byB0aGUgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzci9nZW5faW5pdF9jcGlvPC9maWxlbmFtZT4gcHJvZ3JhbSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHRyZWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcywgdGhlCisgICAgICAgICAgICAgICAgICAgIGluaXRyYW1mcyBpbWFnZSB3aWxsIGJlIHRoZSBhZ2dyZWdhdGUgb2YgYWxsIG9mIHRoZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09ORklHX1NJVEUnPjxnbG9zc3Rlcm0+Q09ORklHX1NJVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZJR19TSVRFW2RvY10gPSAiQSBsaXN0IG9mIGZpbGVzIHRoYXQgY29udGFpbnMgYXV0b2NvbmYgdGVzdCByZXN1bHRzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGJ1aWxkLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlIEF1dG90b29scyB1dGlsaXRpZXMgd2hlbiBydW5uaW5nIGNvbmZpZ3VyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb250YWlucyA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiB0ZXN0IHJlc3VsdHMgcmVsZXZhbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGN1cnJlbnQgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgQXV0b3Rvb2xzIHV0aWxpdGllcyB3aGVuIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZJR1VSRV9GTEFHUyc+PGdsb3NzdGVybT5DT05GSUdVUkVfRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZJR1VSRV9GTEFHU1tkb2NdID0gIlRoZSBtaW5pbWFsIGFyZ3VtZW50cyBmb3IgR05VIGNvbmZpZ3VyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBhcmd1bWVudHMgZm9yIEdOVSBjb25maWd1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkNPTkZMSUNUX0RJU1RST19GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIHRoYXQgd291bGQgYmUgaW4gY29uZmxpY3Qgc2hvdWxkIHRoZSByZWNpcGUgYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0cm9fZmVhdHVyZXNfY2hlY2snPjxmaWxlbmFtZT5kaXN0cm9fZmVhdHVyZXNfY2hlY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCB3b3VsZAorICAgICAgICAgICAgICAgICAgICBiZSBpbiBjb25mbGljdCBzaG91bGQgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgbGlzdHMgYSBmZWF0dXJlIHRoYXQgYWxzbyBhcHBlYXJzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPiB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW4gZXJyb3Igb2NjdXJzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3RvcHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09QWV9MSUNfRElSUyc+PGdsb3NzdGVybT5DT1BZX0xJQ19ESVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT1BZX0xJQ19ESVJTW2RvY10gPSAiSWYgc2V0IHRvICIxIiBhbG9uZyB3aXRoIHRoZSBDT1BZX0xJQ19NQU5JRkVTVCB2YXJpYWJsZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29waWVzIGludG8gdGhlIGltYWdlIHRoZSBsaWNlbnNlIGZpbGVzLCB3aGljaCBhcmUgbG9jYXRlZCBpbiAvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcywgZm9yIGVhY2ggcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT1BZX0xJQ19NQU5JRkVTVCc+PGZpbGVuYW1lPkNPUFlfTElDX01BTklGRVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb3BpZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgaW1hZ2UgdGhlIGxpY2Vuc2UgZmlsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGljZW5zZSBmaWxlcyBhcmUgcGxhY2VkCisgICAgICAgICAgICAgICAgICAgIGluIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUgaW1hZ2UgaXRzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPUFlfTElDX01BTklGRVNUJz48Z2xvc3N0ZXJtPkNPUFlfTElDX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT1BZX0xJQ19NQU5JRkVTVFtkb2NdID0gIklmIHNldCB0byAiMSIsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvcGllcyB0aGUgbGljZW5zZSBtYW5pZmVzdCBmb3IgdGhlIGltYWdlIHRvIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL2xpY2Vuc2UubWFuaWZlc3Qgd2l0aGluIHRoZSBpbWFnZSBpdHNlbGYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29waWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBsaWNlbnNlIG1hbmlmZXN0IGZvciB0aGUgaW1hZ2UgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL2xpY2Vuc2UubWFuaWZlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGltYWdlIGl0c2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwnPjxnbG9zc3Rlcm0+Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLiBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBvbmx5IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3VuZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSByZXBsYWNlcyA8ZmlsZW5hbWU+UE9LWV9FWFRSQV9JTlNUQUxMPC9maWxlbmFtZT4sIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09SRUJBU0UnPjxnbG9zc3Rlcm0+Q09SRUJBU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUkVCQVNFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBNZXRhZGF0YSBsYXllciAoaS5lLiBtZXRhKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBDb3JlIE1ldGFkYXRhIGxheWVyIChpLmUuIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhbiBpbXBvcnRhbnQgZGlzdGluY3Rpb24gdGhhdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09SRUJBU0U8L2ZpbGVuYW1lPiBwb2ludHMgdG8gdGhlIHBhcmVudCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFuZCBub3QgdGhlIGxheWVyIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB3aGVyZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIFBva3kgR2l0CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYW5kIHJldGFpbmVkIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG5hbWUgZm9yIHlvdXIgbG9jYWwgY29weSBvZiB0aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCA8ZmlsZW5hbWU+Q09SRUJBU0U8L2ZpbGVuYW1lPiBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gZm9sZGVyIGJlY2F1c2UgaXQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIDxmaWxlbmFtZT5wb2t5L21ldGE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DUFAnPjxnbG9zc3Rlcm0+Q1BQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDUFBbZG9jXSA9ICJNaW5pbXVtIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUgQworICAgICAgICAgICAgICAgICAgICBwcmVwcm9jZXNzb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ1BQRkxBR1MnPjxnbG9zc3Rlcm0+Q1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBleHBvcnRlZCB0byBhbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGh1cyBtYWRlIHZpc2libGUgdG8gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGR1cmluZyB0aGUgY29tcGlsYXRpb24gc3RlcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiBmb3IgPGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGF0IGlzIGJlaW5nIGJ1aWx0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ1BQRkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfQ1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX0NQUEZMQUdTJz48ZmlsZW5hbWU+QlVJTERfQ1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEU0RLX0NQUEZMQUdTJz48ZmlsZW5hbWU+QlVJTERTREtfQ1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBhbiBTREsgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DUk9TU19DT01QSUxFJz48Z2xvc3N0ZXJtPkNST1NTX0NPTVBJTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENST1NTX0NPTVBJTEVbZG9jXSA9ICJUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggZm9yIHRoZSB0YXJnZXQgdG9vbHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCBmb3IgdGhlIHRhcmdldCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5DUk9TU19DT01QSUxFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNST1NTX0NPTVBJTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBvbmx5IGluCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0YWluIGNvbnRleHRzIChlLmcuIHdoZW4gYnVpbGRpbmcgZm9yIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGtlcm5lbCBtb2R1bGUgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DVlNESVInPjxnbG9zc3Rlcm0+Q1ZTRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDVlNESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIGN2cyBjaGVja291dHMgd2lsbCBiZSBzdG9yZWQgaW4uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgQ1ZTIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNYWCc+PGdsb3NzdGVybT5DWFg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENYWFtkb2NdID0gIk1pbmltdW0gY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQysrIGNvbXBpbGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUgQysrCisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNYWEZMQUdTJz48Z2xvc3N0ZXJtPkNYWEZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGV4cG9ydGVkIHRvIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aHVzIG1hZGUgdmlzaWJsZSB0byB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBzdGVwLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIGZvciA8ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DWFhGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQ1hYRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ1hYRkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWQnPjx0aXRsZT5EPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUQnPjxnbG9zc3Rlcm0+RDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRFtkb2NdID0gIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGluIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZXJlIGNvbXBvbmVudHMgYXJlIGluc3RhbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gZGVmYXVsdHMgdG86CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9pbWFnZQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREFURSc+PGdsb3NzdGVybT5EQVRFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBEQVRFW2RvY10gPSAiVGhlIGRhdGUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHVzaW5nIFlNRCBmb3JtYXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBEYXRlcyBhcHBlYXIgdXNpbmcgdGhlIHllYXIsIG1vbnRoLCBhbmQgZGF5IChZTUQpIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAoZS5nLiAiMjAxNTAyMDkiIGZvciBGZWJydWFyeSA5dGgsIDIwMTUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURBVEVUSU1FJz48Z2xvc3N0ZXJtPkRBVEVUSU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBEQVRFVElNRVtkb2NdID0gIlRoZSBkYXRlIGFuZCB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSBhbmQgdGltZSBvbiB3aGljaCB0aGUgY3VycmVudCBidWlsZCBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9ybWF0IGlzIHN1aXRhYmxlIGZvciB0aW1lc3RhbXBzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFQklBTl9OT0FVVE9OQU1FJz48Z2xvc3N0ZXJtPkRFQklBTl9OT0FVVE9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUJJQU5fTk9BVVRPTkFNRVtkb2NdID0gIlByZXZlbnRzIGEgcGFydGljdWxhciBwYWNrYWdlIGZyb20gYmVpbmcgcmVuYW1lZCBhY2NvcmRpbmcgdG8gRGViaWFuIHBhY2thZ2UgbmFtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBpbmhlcml0ZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVCSUFOX05PQVVUT05BTUU8L2ZpbGVuYW1lPiBzcGVjaWZpZXMgYQorICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHBhY2thZ2Ugc2hvdWxkIG5vdCBiZSByZW5hbWVkIGFjY29yZGluZyB0bworICAgICAgICAgICAgICAgICAgICBEZWJpYW4gbGlicmFyeSBwYWNrYWdlIG5hbWluZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlIHRoZSBwYWNrYWdlIG5hbWUgYXMgYW4gb3ZlcnJpZGUgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+Zm9udGNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERUJJQU5fTk9BVVRPTkFNRV9mb250Y29uZmlnLXV0aWxzID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUJJQU5OQU1FJz48Z2xvc3N0ZXJtPkRFQklBTk5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFQklBTk5BTUVbZG9jXSA9ICJBbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBsaWJyYXJ5IG5hbWUgZm9yIGFuIGluZGl2aWR1YWwgcGFja2FnZSBmb3IgRGViaWFuIGxpYnJhcnkgcGFja2FnZSByZW5hbWluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaXMgaW5oZXJpdGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFQklBTk5BTUU8L2ZpbGVuYW1lPiBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IG5hbWUgZm9yIGFuIGluZGl2aWR1YWwgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGluZyB0aGUgbGlicmFyeSBuYW1lIGluIHRoZXNlIGNhc2VzIGlzIHJhcmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHVzZSB0aGUgcGFja2FnZSBuYW1lIGFzIGFuIG92ZXJyaWRlIHdoZW4geW91CisgICAgICAgICAgICAgICAgICAgIHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgPGZpbGVuYW1lPmRidXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVCSUFOTkFNRV8ke1BOfSA9ICJkYnVzLTEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUJVR19CVUlMRCc+PGdsb3NzdGVybT5ERUJVR19CVUlMRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVCVUdfQlVJTERbZG9jXSA9ICJTcGVjaWZpZXMgdG8gYnVpbGQgcGFja2FnZXMgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW5mbHVlbmNlcyB0aGUgdmFsdWUgb2YgdGhlIFNFTEVDVEVEX09QVElNSVpBVElPTiB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdG8gYnVpbGQgcGFja2FnZXMgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaW5mbHVlbmNlcyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0VMRUNURURfT1BUSU1JWkFUSU9OJz5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVCVUdfT1BUSU1JWkFUSU9OJz48Z2xvc3N0ZXJtPkRFQlVHX09QVElNSVpBVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVCVUdfT1BUSU1JWkFUSU9OW2RvY10gPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYSBzeXN0ZW0gZm9yIGRlYnVnZ2luZy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0ZMQUdTJz5UQVJHRVRfQ0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+Q0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+IHdoZW4gY29tcGlsaW5nCisgICAgICAgICAgICAgICAgICAgIGEgc3lzdGVtIGZvciBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gIi1PIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyICR7REVCVUdfRkxBR1N9IC1waXBlIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxnbG9zc3Rlcm0+REVGQVVMVF9QUkVGRVJFTkNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUZBVUxUX1BSRUZFUkVOQ0VbZG9jXSA9ICJTcGVjaWZpZXMgYSB3ZWFrIGJpYXMgZm9yIHJlY2lwZSBzZWxlY3Rpb24gcHJpb3JpdHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgd2VhayBiaWFzIGZvciByZWNpcGUgc2VsZWN0aW9uIHByaW9yaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2Ugb2YgdGhpcyBpcyB2YXJpYWJsZSBpcyB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgaXQgdG8gIi0xIiB3aXRoaW4gYSByZWNpcGUgZm9yIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgIHBpZWNlIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgdmFyaWFibGUgaW4gdGhpcyB3YXkgY2F1c2VzIHRoZSBzdGFibGUgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHRvIGJ1aWxkIGJ5IGRlZmF1bHQgaW4gdGhlIGFic2VuY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+UFJFRkVSUkVEX1ZFUlNJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCB0byBidWlsZCB0aGUgZGV2ZWxvcG1lbnQgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJpYXMgcHJvdmlkZWQgYnkgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHdlYWsgYW5kIGlzIG92ZXJyaWRkZW4gYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPkJCRklMRV9QUklPUklUWTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiB0aGF0IHZhcmlhYmxlIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHR3byBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVGQVVMVFRVTkUnPjxnbG9zc3Rlcm0+REVGQVVMVFRVTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFRkFVTFRUVU5FW2RvY10gPSAiVGhlIGRlZmF1bHQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmluZ3MgKGkuZS4gIHRoZSAidHVuZSIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIHR1bmluZ3MgKGkuZS4gIHRoZSAidHVuZSIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+REVGQVVMVFRVTkU8L2ZpbGVuYW1lPiBoZWxwcyBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0dW5lIGlzIGVpdGhlciBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgc2V0CisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBzZXR0aW5nIHVzaW5nIGF2YWlsYWJsZSB0dW5lcworICAgICAgICAgICAgICAgICAgICBhcyBkZWZpbmVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFWQUlMVFVORVMnPjxmaWxlbmFtZT5BVkFJTFRVTkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUEVORFMnPjxnbG9zc3Rlcm0+REVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQRU5EU1tkb2NdID0gIkxpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBhIHJlY2lwZSdzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIG90aGVyIHJlY2lwZSBmaWxlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGxpc3RlZAorICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gYnVpbHQgYW5kIGhhdmUgdGhlaXIgY29udGVudHMgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3RzIGJlZm9yZSB0aGUgcmVjaXBlJ3MgY29uZmlndXJlIHRhc2sgaXMgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoaXMgc2ltcGxlIGV4YW1wbGUgZm9yIHR3byByZWNpcGVzIG5hbWVkICJhIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgImIiIHRoYXQgcHJvZHVjZSBzaW1pbGFybHkgbmFtZWQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFwcGVhcnMgaW4gdGhlICJhIiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyA9ICJiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEhlcmUsIHRoZSBkZXBlbmRlbmN5IGlzIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGZvciByZWNpcGUgImEiIGRlcGVuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zeXNyb290Jz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIG9mIHJlY2lwZSAiYiIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgYW55dGhpbmcgdGhhdCByZWNpcGUgImIiIHB1dHMgaW50byBzeXNyb290CisgICAgICAgICAgICAgICAgICAgIGlzIGF2YWlsYWJsZSB3aGVuIHJlY2lwZSAiYSIgaXMgY29uZmlndXJpbmcgaXRzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVudGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQTE9ZX0RJUic+PGdsb3NzdGVybT5ERVBMT1lfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBnZW5lcmFsIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGdlbmVyYWwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRpcmVjdG9yeSByZXNpZGVzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnksIHNlZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWJ1aWxkJz5UaGUgQnVpbGQgRGlyZWN0b3J5IC0gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2VzLWRldi1lbnZpcm9ubWVudCc+SW1hZ2VzPC9saW5rPiIsCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iLAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfREVCJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfREVCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX0RFQltkb2NdID0gIlBvaW50cyB0byBhIERlYmlhbi1zcGVjaWZpYyBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBEZWJpYW4gcGFja2FnZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV9kZWIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+IHZhcmlhYmxlIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgc3ViLWZvbGRlciBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQTE9ZX0RJUl9ERUIgPSAiJHtERVBMT1lfRElSfS9kZWIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfZGViJz48ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVJfREVCPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gbWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9kZWInPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2RlYjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIHdyaXRlcyBEZWJpYW4gcGFja2FnZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgZm9sZGVyLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgcGFja2FnaW5nIHdvcmtzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGdsb3NzdGVybT5ERVBMT1lfRElSX0lNQUdFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX0lNQUdFW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMgYW5kIG90aGVyIGFzc29jaWF0ZWQgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIGRlcGxveWVkIG9udG8gdGhlIHRhcmdldCBtYWNoaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgaW1hZ2VzIGFuZCBvdGhlciBhc3NvY2lhdGVkIG91dHB1dCBmaWxlcyB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICByZWFkeSB0byBiZSBkZXBsb3llZCBvbnRvIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpcyBtYWNoaW5lLXNwZWNpZmljIGFzIGl0IGNvbnRhaW5zIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtNQUNISU5FfTwvZmlsZW5hbWU+IG5hbWUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZGlyZWN0b3J5IHJlc2lkZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJ9L2ltYWdlcy8ke01BQ0hJTkV9LzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnksIHNlZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWJ1aWxkJz5UaGUgQnVpbGQgRGlyZWN0b3J5IC0gPGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsIG9uIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2VzLWRldi1lbnZpcm9ubWVudCc+SW1hZ2VzPC9saW5rPiIgYW5kCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGdsb3NzdGVybT5ERVBMT1lfRElSX0lQSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQTE9ZX0RJUl9JUEtbZG9jXSA9ICJQb2ludHMgdG8gYSBJUEstc3BlY2lmaWMgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgSVBLIHBhY2thZ2VzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgInBhY2thZ2VfaXBrIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlIGluaXRpYWxseSBkZWZpbmVzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgYSBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX0lQSyA9ICIke0RFUExPWV9ESVJ9L2lwayIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9pcGsnPjxmaWxlbmFtZT5wYWNrYWdlX2lwazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9JUEs8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2lwayc+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfaXBrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIElQSyBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX1JQTSc+PGdsb3NzdGVybT5ERVBMT1lfRElSX1JQTTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQTE9ZX0RJUl9SUE1bZG9jXSA9ICJQb2ludHMgdG8gYSBSUE0tc3BlY2lmaWMgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgUlBNIHBhY2thZ2VzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgInBhY2thZ2VfcnBtIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlIGluaXRpYWxseSBkZWZpbmVzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgYSBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX1JQTSA9ICIke0RFUExPWV9ESVJ9L3JwbSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9ycG0nPjxmaWxlbmFtZT5wYWNrYWdlX3JwbTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX3JwbSc+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfcnBtPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIFJQTSBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX1RBUic+PGdsb3NzdGVybT5ERVBMT1lfRElSX1RBUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVQTE9ZX0RJUl9UQVJbZG9jXSA9ICJQb2ludHMgdG8gYSB0YXJiYWxsIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIHBsYWNlIHRhcmJhbGxzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgInBhY2thZ2VfdGFyIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlIGluaXRpYWxseSBkZWZpbmVzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgYSBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX1RBUiA9ICIke0RFUExPWV9ESVJ9L3RhciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV90YXInPjxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9UQVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX3Rhcic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfdGFyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIFRBUiBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lESVInPjxnbG9zc3Rlcm0+REVQTE9ZRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lESVJbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGRlcGxveSBjbGFzcywgdGhlIERFUExPWURJUiBwb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIGZvciBkZXBsb3llZCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlcGxveSc+PGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhlIDxmaWxlbmFtZT5ERVBMT1lESVI8L2ZpbGVuYW1lPiBwb2ludHMgdG8gYQorICAgICAgICAgICAgICAgICAgICB0ZW1wb3Jhcnkgd29yayBhcmVhIGZvciBkZXBsb3llZCBmaWxlcyB0aGF0IGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGNsYXNzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQTE9ZRElSID0gIiR7V09SS0RJUn0vZGVwbG95LSR7PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz59IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgaW5oZXJpdGluZyB0aGUgPGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBjb3B5IGZpbGVzIHRvIGJlIGRlcGxveWVkIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWURJUjwvZmlsZW5hbWU+LCBhbmQgdGhlIGNsYXNzIHdpbGwgdGFrZQorICAgICAgICAgICAgICAgICAgICBjYXJlIG9mIGNvcHlpbmcgdGhlbSBpbnRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhZnRlcndhcmRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFU0NSSVBUSU9OJz48Z2xvc3N0ZXJtPkRFU0NSSVBUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVNDUklQVElPTltkb2NdID0gIlRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uIHVzZWQgYnkgcGFja2FnZSBtYW5hZ2Vycy4gSWYgbm90IHNldCwgREVTQ1JJUFRJT04gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBTVU1NQVJZIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uIHVzZWQgYnkgcGFja2FnZSBtYW5hZ2Vycy4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90IHNldCwgPGZpbGVuYW1lPkRFU0NSSVBUSU9OPC9maWxlbmFtZT4gdGFrZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1VNTUFSWSc+PGZpbGVuYW1lPlNVTU1BUlk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTS19TSUdOQVRVUkUnPjxnbG9zc3Rlcm0+RElTS19TSUdOQVRVUkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU0tfU0lHTkFUVVJFW2RvY10gPSAiQSAzMi1iaXQgTUJSIGRpc2sgc2lnbmF0dXJlIHVzZWQgYnkgZGlyZWN0ZGlzayBpbWFnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSAzMi1iaXQgTUJSIGRpc2sgc2lnbmF0dXJlIHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBpbWFnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBzaWduYXR1cmUgaXMgc2V0IHRvIGFuIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZSB0aGF0IGFsbG93cyB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYSBib290IGxvYWRlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGUgc2lnbmF0dXJlIGluIHRoZSBpbWFnZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYnkgc2V0dGluZyA8ZmlsZW5hbWU+RElTS19TSUdOQVRVUkU8L2ZpbGVuYW1lPiB0byBhbgorICAgICAgICAgICAgICAgICAgICA4LWRpZ2l0IGhleCBzdHJpbmcuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IGlmIHlvdSB3YW50IHRoZSBkaXNrCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSB0byByZW1haW4gY29uc3RhbnQgYmV0d2VlbiBpbWFnZSBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgTGludXggMy44IG9yIGxhdGVyLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTS19TSUdOQVRVUkU8L2ZpbGVuYW1lPiB0byBzcGVjaWZ5IHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIGJ5IFVVSUQgdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBsb2NhdGUgdGhlIHJvb3QgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgIGV2ZW4gaWYgdGhlIGRldmljZSBuYW1lIGNoYW5nZXMgZHVlIHRvIGRpZmZlcmVuY2VzIGluCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5TWVNMSU5VWF9ST09UPC9maWxlbmFtZT4gaXMgc2V0CisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTTElOVVhfUk9PVCA9ICJyb290PS9kZXYvc2RhMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIGNoYW5nZSB0aGlzIHRvIGxvY2F0ZSB0aGUgcm9vdCBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGRpc2sgc2lnbmF0dXJlIGluc3RlYWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTTElOVVhfUk9PVCA9ICJyb290PVBBUlRVVUlEPSR7RElTS19TSUdOQVRVUkV9LTAyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIHByZXZpb3VzbHkgbWVudGlvbmVkLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRvIGEgZml4ZWQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgaWYgeW91IGRvIG5vdCB3YW50IDxmaWxlbmFtZT5zeXNsaW51eC5jZmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyBmb3IgZWFjaCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgdGhpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byB1cGdyYWRlIHRoZQorICAgICAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0gb24gYSBkZXZpY2Ugd2l0aG91dCBoYXZpbmcgdG8gcmVjcmVhdGUgb3IKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZ5IHRoZSBtYXN0ZXIgYm9vdCByZWNvcmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPJz48Z2xvc3N0ZXJtPkRJU1RSTzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPW2RvY10gPSAiVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNvcnJlc3BvbmRzIHRvIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB3aG9zZSByb290IG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlJ3MgYXJndW1lbnQgYW5kIHdob3NlIGZpbGVuYW1lIGV4dGVuc2lvbiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgUG9reSBkaXN0cmlidXRpb24gaXMgbmFtZWQgPGZpbGVuYW1lPnBva3kuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2Rpc3RybzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZgorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gdGhhdCA8ZmlsZW5hbWU+cG9reS5jb25mPC9maWxlbmFtZT4gZmlsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk8gPSAicG9reSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbG9jYXRlZCBpbiBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3RybzwvZmlsZW5hbWU+IGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgZm9yIDxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPiBtdXN0IG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHNwYWNlcywgYW5kIGlzIHR5cGljYWxseSBhbGwgbG93ZXItY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGJsYW5rLCBhIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhcmUgdXNlZCwgd2hpY2ggYXJlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0NPREVOQU1FJz48Z2xvc3N0ZXJtPkRJU1RST19DT0RFTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0NPREVOQU1FW2RvY10gPSAiU3BlY2lmaWVzIGEgY29kZW5hbWUgZm9yIHRoZSBkaXN0cmlidXRpb24gYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgY29kZW5hbWUgZm9yIHRoZSBkaXN0cmlidXRpb24gYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0VYVFJBX1JERVBFTkRTJz48Z2xvc3N0ZXJtPkRJU1RST19FWFRSQV9SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMuIFRoZSB2YXJpYWJsZSBvbmx5IGFwcGxpZXMgdG8gdGhlIGltYWdlcyB0aGF0IGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgdGFrZXMgYWZmZWN0IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1iYXNlPC9maWxlbmFtZT4gc28gdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9ubHkgcmVhbGx5IGFwcGxpZXMgdG8gdGhlIG1vcmUgZnVsbC1mZWF0dXJlZAorICAgICAgICAgICAgICAgICAgICBpbWFnZXMgdGhhdCBpbmNsdWRlIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvIGtlZXAgZGlzdHJvIHBvbGljeSBvdXQgb2YKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJpYyBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIG90aGVyIGRpc3RybyB2YXJpYWJsZXMsIHlvdSBzZXQgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZGlzdHJvIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTJz48Z2xvc3N0ZXJtPkRJU1RST19FWFRSQV9SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMgaWYgdGhlIHBhY2thZ2VzIGV4aXN0LiBUaGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgYnV0IHlvdSBjYW4gcmVtb3ZlIHRoZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHBhY2thZ2VzIGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZXMgbWlnaHQgbm90IGV4aXN0IG9yIGJlIGVtcHR5IChlLmcuIGtlcm5lbCBtb2R1bGVzKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGJ1dCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19GRUFUVVJFU1tkb2NdID0gIlRoZSBmZWF0dXJlcyBlbmFibGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzb2Z0d2FyZSBzdXBwb3J0IHlvdSB3YW50IGluIHlvdXIgZGlzdHJpYnV0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICB2YXJpb3VzIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIHlvdXIgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIGluIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhIGZlYXR1cmUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+IGlzIHRyYW5zbGF0ZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIG9wdGlvbiBzdXBwbGllZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBmb3IgcmVjaXBlcyB0aGF0IG9wdGlvbmFsbHkgc3VwcG9ydCB0aGUgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNwZWNpZnlpbmcgIngxMSIgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+LCBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgZXZlcnkgcGllY2Ugb2Ygc29mdHdhcmUgYnVpbHQgZm9yIHRoZSB0YXJnZXQgdGhhdCBjYW4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxseSBzdXBwb3J0IFgxMSB0byBoYXZlIGl0cyBYMTEgc3VwcG9ydCBlbmFibGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUd28gbW9yZSBleGFtcGxlcyBhcmUgQmx1ZXRvb3RoIGFuZCBORlMgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIGZlYXR1cmVzIHRoYXQgc2hpcHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBhbmQgdGhhdCB5b3UgY2FuIHByb3ZpZGUgd2l0aCB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtZGlzdHJvJz5EaXN0cm8gRmVhdHVyZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTCc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVELiBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgbWV0YS9jb25mL2JpdGJha2UuY29uZiBmaWxlIGFuZCBpdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPkRJU1RST19GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWxzbyBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGJlc3QgdG8ganVzdCByZWZlcmVuY2UgdGhlIHZhcmlhYmxlIHRvIHNlZSB3aGljaCBkaXN0cm8gZmVhdHVyZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJhY2tmaWxsZWQgZm9yIGFsbCBkaXN0cm8gY29uZmlndXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIGJhY2tmaWxsaW5nPC9saW5rPiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMIHRoYXQgc2hvdWxkIG5vdCBiZSBiYWNrZmlsbGVkIChpLmUuIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMJz5ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEw8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPkRJU1RST19GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIEJhY2tmaWxsaW5nPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfREVGQVVMVCc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVNfREVGQVVMVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTX0RFRkFVTFRbZG9jXSA9ICJQcm92aWRlcyB0aGUgZGVmYXVsdCBsaXN0IG9mIGRpc3RybyBmZWF0dXJlcyB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW55IGxpYmMtc3BlY2lmaWMgZmVhdHVyZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBjb252ZW5pZW5jZSB2YXJpYWJsZSB0aGF0IGdpdmVzIHlvdSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBsaXN0IG9mIGRpc3RybyBmZWF0dXJlcyB3aXRoIHRoZSBleGNlcHRpb24gb2YgYW55CisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBDIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIGEgY3VzdG9tIGRpc3RyaWJ1dGlvbiwgeW91IG1pZ2h0IGZpbmQgaXQKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHRvIGJlIGFibGUgdG8gcmV1c2UgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIHdpdGhvdXQgdGhlIG5lZWQgdG8gd3JpdGUgb3V0IHRoZSBmdWxsIHNldC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFQ8L2ZpbGVuYW1lPiBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tIGRpc3RybyBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTID89ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSBteWZlYXR1cmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfTElCQyc+PGdsb3NzdGVybT5ESVNUUk9fRkVBVFVSRVNfTElCQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTX0xJQkNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgZGlzdHJvIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBDIGxpYnJhcnkgKGxpYmMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgY29udmVuaWVuY2UgdmFyaWFibGUgdGhhdCBzcGVjaWZpZXMgdGhlIGxpc3Qgb2YgZGlzdHJvCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBDIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoZXNlIGZlYXR1cmVzIGFyZSBwcmVmaXhlZCB3aXRoICJsaWJjLSIgYW5kCisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgYXQgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIEMgbGlicmFyeSBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX05BTUUnPjxnbG9zc3Rlcm0+RElTVFJPX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19OQU1FW2RvY10gPSAiVGhlIGxvbmcgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb25nIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fVkVSU0lPTic+PGdsb3NzdGVybT5ESVNUUk9fVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX1ZFUlNJT05bZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPkRJU1RST09WRVJSSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4gQnkgZGVmYXVsdCwgdGhlIHZhcmlhYmxlIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIHRoZSBESVNUUk8gdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBsaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz5ESVNUUk88L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXh0ZW5kIHRoZSB2YXJpYWJsZSB0byBhcHBseSBhbnkgdmFyaWFibGUgb3ZlcnJpZGVzCisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IGFzIHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIHNvbWUgb3RoZXIgbWVhbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRExfRElSJz48Z2xvc3N0ZXJtPkRMX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRExfRElSW2RvY10gPSAiVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc3RvcmUgZG93bmxvYWRzLiBCeSBkZWZhdWx0LCB0aGUgZGlyZWN0b3J5IGlzICdkb3dubG9hZHMnIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RvcmUgZG93bmxvYWRzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gZ2V0cyBmaWxlcworICAgICAgICAgICAgICAgICAgICBzdWl0YWJsZSBmb3IgbWlycm9yaW5nIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0YXJiYWxscyBvZiBHaXQgcmVwb3NpdG9yaWVzLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgZGlyZWN0b3J5IGJ5IGRlZmluaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpcyBzZWxmLW1haW50YWluaW5nIGFuZCB5b3Ugc2hvdWxkIG5vdCBoYXZlCisgICAgICAgICAgICAgICAgICAgIHRvIHRvdWNoIGl0LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZGlyZWN0b3J5IGlzIDxmaWxlbmFtZT5kb3dubG9hZHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjRExfRElSID89ICIke1RPUERJUn0vZG93bmxvYWRzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgZG93bmxvYWQgZGlyZWN0b3J5LCBzaW1wbHkgcmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tZW50IGZyb20gdGhlIGxpbmUgYW5kIHByb3ZpZGUgeW91ciBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIER1cmluZyBhIGZpcnN0IGJ1aWxkLCB0aGUgc3lzdGVtIGRvd25sb2FkcyBtYW55IGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSB0YXJiYWxscyBmcm9tIHZhcmlvdXMgdXBzdHJlYW0gcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgIERvd25sb2FkaW5nIGNhbiB0YWtlIGEgd2hpbGUsIHBhcnRpY3VsYXJseSBpZiB5b3VyIG5ldHdvcmsKKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBpcyBzbG93LgorICAgICAgICAgICAgICAgICAgICBUYXJiYWxscyBhcmUgYWxsIHN0b3JlZCBpbiB0aGUgZGlyZWN0b3J5IGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGFuZCB0aGUgYnVpbGQgc3lzdGVtIGxvb2tzIHRoZXJlCisgICAgICAgICAgICAgICAgICAgIGZpcnN0IHRvIGZpbmQgc291cmNlIHRhcmJhbGxzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gd2lwaW5nIGFuZCByZWJ1aWxkaW5nLCB5b3UgY2FuIHByZXNlcnZlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byBzcGVlZCB1cCB0aGlzIHBhcnQgb2Ygc3Vic2VxdWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2FmZWx5IHNoYXJlIHRoaXMgZGlyZWN0b3J5IGJldHdlZW4gbXVsdGlwbGUgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBzYW1lIGRldmVsb3BtZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgYnVpbGQgcHJvY2VzcyBnZXRzCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyB3aGVuIHdvcmtpbmcgYmVoaW5kIGEgZmlyZXdhbGwgb3IgcHJveHkgc2VydmVyLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhpcyBzcGVjaWZpYyBxdWVzdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy1kb2VzLXRoZS15b2N0by1wcm9qZWN0LW9idGFpbi1zb3VyY2UtY29kZS1hbmQtd2lsbC1pdC13b3JrLWJlaGluZC1teS1maXJld2FsbC1vci1wcm94eS1zZXJ2ZXInPkZBUTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRE9DX0NPTVBSRVNTJz48Z2xvc3N0ZXJtPkRPQ19DT01QUkVTUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRE9DX0NPTVBSRVNTW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBjb21wcmVzc19kb2MgY2xhc3MsIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUgY29tcHJlc3Npb24gcG9saWN5IHVzZWQgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb21wcmVzc2VzIG1hbiBwYWdlcyBhbmQgaW5mbyBwYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWNvbXByZXNzX2RvYyc+PGZpbGVuYW1lPmNvbXByZXNzX2RvYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZSBjb21wcmVzc2lvbiBwb2xpY3kgdXNlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvbXByZXNzZXMgbWFuIHBhZ2VzIGFuZCBpbmZvCisgICAgICAgICAgICAgICAgICAgIHBhZ2VzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHVzZWQgaXMgZ3ogKGd6aXApLgorICAgICAgICAgICAgICAgICAgICBPdGhlciBwb2xpY2llcyBhdmFpbGFibGUgYXJlIHh6IGFuZCBiejIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBwb2xpY2llcyBhbmQgb24gaG93IHRvIHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBzZWUgdGhlIGNvbW1lbnRzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2NvbXByZXNzX2RvYy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZSc+PHRpdGxlPkU8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRUZJX1BST1ZJREVSJz48Z2xvc3N0ZXJtPkVGSV9QUk9WSURFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRUZJX1BST1ZJREVSW2RvY10gPSAiV2hlbiBidWlsZGluZyBib290YWJsZSBpbWFnZXMgKGkuZS4gd2hlcmUgaGRkaW1nIG9yIHZtZGsgaXMgaW4gSU1BR0VfRlNUWVBFUyksIHRoZSBFRklfUFJPVklERVIgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBFRkkgYm9vdGxvYWRlciB0byB1c2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBib290YWJsZSBpbWFnZXMgKGkuZS4gd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhkZGltZzwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT52bWRrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIEVGSSBib290bG9hZGVyIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgImdydWItZWZpIiwgYnV0ICJndW1taWJvb3QiIGNhbiBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGluc3RlYWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04nPjxnbG9zc3Rlcm0+RU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTltkb2NdID0gIkNvbnRyb2xzIHdoaWNoIGxvY2FsZXMgZm9yIGdsaWJjIGFyZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBidWlsZC4gVGhlIHZhcmlhYmxlIGlzIHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IGRldmljZSBoYXMgNjRNYnl0ZXMgb2YgUkFNIG9yIGxlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdGhhdCBjb250cm9scyB3aGljaCBsb2NhbGVzIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiBhcmUgZ2VuZXJhdGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgKHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IGRldmljZSBoYXMgNjRNYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgUkFNIG9yIGxlc3MpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVSUl9SRVBPUlRfRElSJz48Z2xvc3N0ZXJtPkVSUl9SRVBPUlRfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFUlJfUkVQT1JUX0RJUltkb2NdID0gIldoZW4gdXNlZCB3aXRoIHRoZSByZXBvcnQtZXJyb3IgY2xhc3MsIHNwZWNpZmllcyB0aGUgcGF0aCB1c2VkIGZvciBzdG9yaW5nIHRoZSBkZWJ1ZyBmaWxlcyBjcmVhdGVkIGJ5IHRoZSBlcnJvciByZXBvcnRpbmcgdG9vbCwgd2hpY2ggYWxsb3dzIHlvdSB0byBzdWJtaXQgYnVpbGQgZXJyb3JzIHlvdSBlbmNvdW50ZXIgdG8gYSBjZW50cmFsIGRhdGFiYXNlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1yZXBvcnQtZXJyb3InPjxmaWxlbmFtZT5yZXBvcnQtZXJyb3I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHNwZWNpZmllcyB0aGUgcGF0aCB1c2VkIGZvciBzdG9yaW5nIHRoZSBkZWJ1ZyBmaWxlcworICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy10aGUtZXJyb3ItcmVwb3J0aW5nLXRvb2wnPmVycm9yIHJlcG9ydGluZyB0b29sPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFsbG93cyB5b3UgdG8gc3VibWl0IGJ1aWxkIGVycm9ycyB5b3UgZW5jb3VudGVyIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgY2VudHJhbCBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTE9HX0RJUic+PGZpbGVuYW1lPkxPR19ESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9lcnJvci1yZXBvcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPkVSUl9SRVBPUlRfRElSPC9maWxlbmFtZT4gdG8gdGhlIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sIHRvIHN0b3JlIHRoZSBkZWJ1ZyBmaWxlcworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVSUl9SRVBPUlRfRElSID0gIjxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FUlJPUl9RQSc+PGdsb3NzdGVybT5FUlJPUl9RQTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVJST1JfUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgZXJyb3JzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyBlcnJvcnMgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGNoZWNrcyB5b3UgY2FuIGNvbnRyb2wgd2l0aCB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWENMVURFX0ZST01fV09STEQnPjxnbG9zc3Rlcm0+RVhDTFVERV9GUk9NX1dPUkxEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWENMVURFX0ZST01fV09STERbZG9jXSA9ICJEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLiBiaXRiYWtlIHdvcmxkKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSB3b3JsZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHdvcmxkIGJ1aWxkcywgQml0QmFrZSBsb2NhdGVzLCBwYXJzZXMgYW5kIGJ1aWxkcyBhbGwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBmb3VuZCBpbiBldmVyeSBsYXllciBleHBvc2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIGEgd29ybGQgYnVpbGQgdXNpbmcgdGhpcyB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBhZGRlZCB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWF5IHN0aWxsIGJlIGJ1aWx0IGR1cmluZyBhIHdvcmxkIGJ1aWxkIGluIG9yZGVyIHRvIHNhdGlzZnkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyBhIHJlY2lwZSB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb25seSBlbnN1cmVzIHRoYXQgdGhlIHJlY2lwZSBpcyBub3QgZXhwbGljaXRseSBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgbGlzdCBvZiBidWlsZCB0YXJnZXRzIGluIGEgd29ybGQgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURU5EUEUnPjxnbG9zc3Rlcm0+RVhURU5EUEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVORFBFW2RvY10gPSAiVXNlZCB3aXRoIGZpbGUgYW5kIHBhdGhuYW1lcyB0byBjcmVhdGUgYSBwcmVmaXggZm9yIGEgcmVjaXBlJ3MgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcmVjaXBlJ3MgUEUgdmFsdWUuIElmIFBFIGlzIHNldCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGEgcmVjaXBlLCBFWFRFTkRQRSBiZWNvbWVzIHRoYXQgdmFsdWUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCB3aXRoIGZpbGUgYW5kIHBhdGhuYW1lcyB0byBjcmVhdGUgYSBwcmVmaXggZm9yIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4gdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IGlzIHNldCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGEgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBiZWNvbWVzIHRoYXQgdmFsdWUgKGUuZyBpZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPiBpcyBlcXVhbCB0byAiMSIgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWNvbWVzICIxXyIpLgorICAgICAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSdzIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQgKHRoZSBkZWZhdWx0KSBvciBpcyBlcXVhbCB0bworICAgICAgICAgICAgICAgICAgICB6ZXJvLCA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBiZWNvbWVzICIiLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+U2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFTkRQS0dWJz48Z2xvc3N0ZXJtPkVYVEVORFBLR1Y8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVORFBLR1ZbZG9jXSA9ICJUaGUgZnVsbCBwYWNrYWdlIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBhcyBpdCBhcHBlYXJzIG9uIHRoZSBmaW5hbCBwYWNrYWdlcyBwcm9kdWNlZCBieSBhIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVsbCBwYWNrYWdlIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBhcyBpdCBhcHBlYXJzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICBmaW5hbCBwYWNrYWdlcyBwcm9kdWNlZCBieSBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgdmFsdWUgaXMgbm9ybWFsbHkgdXNlZCB0byBmaXggYSBydW50aW1lCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgdG8gdGhlIGV4YWN0IHNhbWUgdmVyc2lvbiBvZiBhbm90aGVyIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59LWFkZGl0aW9uYWwtbW9kdWxlID0gIiR7UE59ICg9ICR7RVhURU5EUEtHVn0pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgYXJlIGludGVuZGVkIHRvIGZvcmNlIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZXIgdG8gdXBncmFkZSB0aGVzZSB0eXBlcyBvZiBwYWNrYWdlcyBpbgorICAgICAgICAgICAgICAgICAgICBsb2NrLXN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURVJOQUxfS0VSTkVMX1RPT0xTJz48Z2xvc3N0ZXJtPkVYVEVSTkFMX0tFUk5FTF9UT09MUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURVJOQUxfS0VSTkVMX1RPT0xTW2RvY10gPSAiSW5kaWNhdGVzIGtlcm5lbCB0b29scyBhcmUgZXh0ZXJuYWwgdG8gdGhlIHNvdXJjZSB0cmVlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0LCB0aGUgPGZpbGVuYW1lPkVYVEVSTkFMX0tFUk5FTF9UT09MUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluZGljYXRlcyB0aGF0IHRoZXNlIHRvb2xzIGFyZSBub3QgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGtlcm5lbCB0b29scyBhcmUgYXZhaWxhYmxlIGluIHRoZSB0cmVlLCB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWQgb3ZlciBhbnkgZXh0ZXJuYWxseSBpbnN0YWxsZWQgdG9vbHMuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIDxmaWxlbmFtZT5FWFRFUk5BTF9LRVJORUxfVE9PTFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwcmVmZXIKKyAgICAgICAgICAgICAgICAgICAgdGhlIGluc3RhbGxlZCBleHRlcm5hbCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwteW9jdG8nPjxmaWxlbmFtZT5rZXJuZWwteW9jdG88L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaW4gPGZpbGVuYW1lPm1ldGEvY2xhc3NlczwvZmlsZW5hbWU+IHRvIHNlZSBob3cKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURVJOQUxTUkMnPjxnbG9zc3Rlcm0+RVhURVJOQUxTUkM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVSTkFMU1JDW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2UgdHJlZSwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2UgdHJlZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQsIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyB3aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gbG9jYXRlIHVucGFja2VkIHJlY2lwZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZGluZy1zb2Z0d2FyZS1mcm9tLWFuLWV4dGVybmFsLXNvdXJjZSc+QnVpbGRpbmcgU29mdHdhcmUgZnJvbSBhbiBFeHRlcm5hbCBTb3VyY2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhURVJOQUxTUkNfQlVJTEQnPjxnbG9zc3Rlcm0+RVhURVJOQUxTUkNfQlVJTEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVEVSTkFMU1JDX0JVSUxEW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHJlY2lwZSdzIHNvdXJjZSBjb2RlIGlzIGJ1aWx0LCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3Mgc291cmNlIGNvZGUgaXMgYnVpbHQsIHdoaWNoIGlzIG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0LCB0aGlzIHZhcmlhYmxlIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgd2hhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIGxvY2F0ZSB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlJz5CdWlsZGluZyBTb2Z0d2FyZSBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9BVVRPUkVDT05GJz48Z2xvc3N0ZXJtPkVYVFJBX0FVVE9SRUNPTkY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX0FVVE9SRUNPTkZbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgYXV0b3JlY29uZiBjb21tYW5kLCB3aGljaCBpcyBleGVjdXRlZCBkdXJpbmcgZG9fY29uZmlndXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgeW91IGNhbiB1c2UgPGZpbGVuYW1lPkVYVFJBX0FVVE9SRUNPTkY8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGV4dHJhIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9yZWNvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICItLWV4Y2x1ZGU9YXV0b3BvaW50Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGdsb3NzdGVybT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBhZGRpdGlvbmFsIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhZGRpdGlvbmFsIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gbGlzdGluZyBtb3JlIHRoYW4gb25lIGZlYXR1cmUsIHNlcGFyYXRlIHRoZW0gd2l0aAorICAgICAgICAgICAgICAgICAgICBhIHNwYWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBjb25maWd1cmUgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgZnJvbSB3aXRoaW4gYSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIGJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdGhhdCB5b3UgZG8gbm90LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBwcmltYXJ5IGZlYXR1cmVzIGZyb20gd2l0aGluIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBmZWF0dXJlcyB5b3UgY2FuIGFkZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorImRiZy1wa2dzIiAtIEFkZHMgLWRiZyBwYWNrYWdlcyBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcworICAgICAgICAgICAgIGluY2x1ZGluZyBzeW1ib2wgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZyBhbmQKKyAgICAgICAgICAgICBwcm9maWxpbmcuCisKKyJkZWJ1Zy10d2Vha3MiIC0gTWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbG93cyByb290IGxvZ2lucyB3aXRob3V0CisgICAgICAgICAgICAgICAgIHBhc3N3b3JkcyBhbmQgZW5hYmxlcyBwb3N0LWluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICBsb2dnaW5nLiBTZWUgdGhlICdhbGxvdy1lbXB0eS1wYXNzd29yZCcKKyAgICAgICAgICAgICAgICAgYW5kICdwb3N0LWluc3RhbGwtbG9nZ2luZycgZmVhdHVyZXMgaW4KKyAgICAgICAgICAgICAgICAgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtaW1hZ2UnPkltYWdlIEZlYXR1cmVzPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKworImRldi1wa2dzIiAtIEFkZHMgLWRldiBwYWNrYWdlcyBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBkZXZlbG9wIGFnYWluc3QKKyAgICAgICAgICAgICB0aGUgbGlicmFyaWVzIGluIHRoZSBpbWFnZS4KKworInJlYWQtb25seS1yb290ZnMiIC0gQ3JlYXRlcyBhbiBpbWFnZSB3aG9zZSByb290CisgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGlzIHJlYWQtb25seS4gU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLWEtcmVhZC1vbmx5LXJvb3QtZmlsZXN5c3RlbSc+Q3JlYXRpbmcgYSBSZWFkLU9ubHkgUm9vdCBGaWxlc3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisKKyJ0b29scy1kZWJ1ZyIgLSBBZGRzIGRlYnVnZ2luZyB0b29scyBzdWNoIGFzIGdkYiBhbmQKKyAgICAgICAgICAgICAgICBzdHJhY2UuCisKKyJ0b29scy1wcm9maWxlIiAtIEFkZHMgcHJvZmlsaW5nIHRvb2xzIHN1Y2ggYXMgb3Byb2ZpbGUsCisgICAgICAgICAgICAgICAgICBleG1hcCwgbHR0bmcgYW5kIHZhbGdyaW5kICh4ODYgb25seSkuCisKKyJ0b29scy1zZGsiIC0gQWRkcyBkZXZlbG9wbWVudCB0b29scyBzdWNoIGFzIGdjYywgbWFrZSwKKyAgICAgICAgICAgICAgcGtnY29uZmlnIGFuZCBzbyBmb3J0aC4KKworInRvb2xzLXRlc3RhcHBzIiAtIEFkZHMgdXNlZnVsIHRlc3RpbmcgdG9vbHMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgIHRzX3ByaW50LCBhcGxheSwgYXJlY29yZCBhbmQgc28KKyAgICAgICAgICAgICAgICAgICBmb3J0aC4KKworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgaW1hZ2UgZmVhdHVyZXMgdGhhdCBzaGlwcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSJyZWYtZmVhdHVyZXMtaW1hZ2UiPkltYWdlIEZlYXR1cmVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gY3VzdG9taXplIHlvdXIgaW1hZ2UgYnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhpcyB2YXJpYWJsZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZWZlYXR1cmVzJz5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9JTUFHRUNNRCc+PGdsb3NzdGVybT5FWFRSQV9JTUFHRUNNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfSU1BR0VDTURbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgaW1hZ2UgY3JlYXRpb24gY29tbWFuZCB0aGF0IGhhcyBiZWVuIHNwZWNpZmllZCBpbiBJTUFHRV9DTUQuIFdoZW4gc2V0dGluZyB0aGlzIHZhcmlhYmxlLCB5b3Ugc2hvdWxkIHVzZSBhbiBvdmVycmlkZSBmb3IgdGhlIGFzc29jaWF0ZWQgdHlwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gY29tbWFuZCB0aGF0IGhhcyBiZWVuIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfQ01EJz48ZmlsZW5hbWU+SU1BR0VfQ01EPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICB1c2UgYW4gb3ZlcnJpZGUgZm9yIHRoZSBhc3NvY2lhdGVkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFWFRSQV9JTUFHRUNNRF9leHQzID89ICItaSA0MDk2IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfSU1BR0VERVBFTkRTJz48Z2xvc3N0ZXJtPkVYVFJBX0lNQUdFREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfSU1BR0VERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdG8gYnVpbGQgdGhhdCBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgaW5zdGFsbGluZyBpbnRvIHRoZSByb290IGZpbGVzeXN0ZW0uIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGxpc3QgcmVjaXBlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgaW1hZ2UsIGJ1dCBub3QgbmVlZGVkIGluIHRoZSByb290IGZpbGVzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY2lwZXMgdG8gYnVpbGQgdGhhdCBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBmb3IgaW5zdGFsbGluZyBpbnRvIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBhIHJlY2lwZSBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgaW1hZ2UgYnV0IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBuZWVkZWQgaW4gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5FWFRSQV9JTUFHRURFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICBsaXN0IHRoZXNlIHJlY2lwZXMgYW5kIHRodXMgc3BlY2lmeSB0aGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBBIHR5cGljYWwgZXhhbXBsZSBpcyBhIHJlcXVpcmVkIGJvb3Rsb2FkZXIgaW4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBwYWNrYWdlcyB0byB0aGUgcm9vdCBmaWxlc3lzdGVtLCBzZWUgdGhlIHZhcmlvdXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPio8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+KjxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+UlJFQ09NTUVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX09FQ01BS0UnPjxnbG9zc3Rlcm0+RVhUUkFfT0VDTUFLRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VDTUFLRVtkb2NdID0gIkFkZGl0aW9uYWwgY21ha2Ugb3B0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIDxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfT0VDT05GJz48Z2xvc3N0ZXJtPkVYVFJBX09FQ09ORjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VDT05GW2RvY10gPSAiQWRkaXRpb25hbCBjb25maWd1cmUgc2NyaXB0IG9wdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gc2NyaXB0IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfT0VNQUtFJz48Z2xvc3N0ZXJtPkVYVFJBX09FTUFLRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBHTlUgbWFrZSBvcHRpb25zLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgR05VIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9PRVNDT05TJz48Z2xvc3N0ZXJtPkVYVFJBX09FU0NPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX09FU0NPTlNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBzY29ucyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgc2NvbnMgY29tbWFuZCBsaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2NvbnMnPjxmaWxlbmFtZT5zY29uczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjb25zPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX1FNQUtFVkFSU19QT1NUJz48Z2xvc3N0ZXJtPkVYVFJBX1FNQUtFVkFSU19QT1NUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9RTUFLRVZBUlNfUE9TVFtkb2NdID0gIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBxbWFrZSB3aGVuIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBhZnRlciB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2l0aCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBvciBvdGhlciBjbGFzc2VzIHRoYXQgaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BSRSc+PGdsb3NzdGVybT5FWFRSQV9RTUFLRVZBUlNfUFJFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9RTUFLRVZBUlNfUFJFW2RvY10gPSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3Igb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHFtYWtlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGJlZm9yZSB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5wcm88L2ZpbGVuYW1lPiBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdpdGggcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXFtYWtlKic+PGZpbGVuYW1lPnFtYWtlX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgb3Igb3RoZXIgY2xhc3NlcyB0aGF0IGluaGVyaXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlX2Jhc2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9VU0VSU19QQVJBTVMnPjxnbG9zc3Rlcm0+RVhUUkFfVVNFUlNfUEFSQU1TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9VU0VSU19QQVJBTVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBleHRyYXVzZXJzIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIGltYWdlIGxldmVsIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRyYXVzZXJzJz48ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyBpbWFnZSBsZXZlbCB1c2VyIGFuZCBncm91cAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgbW9yZSBnbG9iYWwgbWV0aG9kIG9mIHByb3ZpZGluZyB1c2VyIGFuZCBncm91cAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFzIGNvbXBhcmVkIHRvIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggdGllcyB1c2VyIGFuZCBncm91cCBjb25maWd1cmF0aW9ucyB0byBhCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBsaXN0IG9mIGNvbW1hbmRzIHlvdSBjYW4gY29uZmlndXJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfVVNFUlNfUEFSQU1TPC9maWxlbmFtZT4gaXMgc2hvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRyYXVzZXJzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNvbW1hbmRzIG1hcCB0byB0aGUgbm9ybWFsIFVuaXggY29tbWFuZHMgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorICAgICAjIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisgICAgICMgZ3JvdXBhZGQgZGV2ZWxvcGVyczsgXAorICAgICAjIHVzZXJkZWwgbm9ib2R5OyBcCisgICAgICMgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyAgICAgIyBncm91cG1vZCAtZyAxMDIwIGRldmVsb3BlcnM7IFwKKyAgICAgIyB1c2VybW9kIC1zIC9iaW4vc2ggdGVzdGVyOyBcCisgICAgICMgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWYnPjx0aXRsZT5GPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPjxnbG9zc3Rlcm0+RkVBVFVSRV9QQUNLQUdFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRkVBVFVSRV9QQUNLQUdFU1tkb2NdID0gIkRlZmluZXMgb25lIG9yIG1vcmUgcGFja2FnZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZSB3aGVuIGEgc3BlY2lmaWMgaXRlbSBpcyBpbmNsdWRlZCBpbiBJTUFHRV9GRUFUVVJFUy4gV2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSwgRkVBVFVSRV9QQUNLQUdFUyBzaG91bGQgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSBpdGVtIGFzIGFuIG92ZXJyaWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgb25lIG9yIG1vcmUgcGFja2FnZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaXRlbSBpcyBpbmNsdWRlZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoZSB2YWx1ZSwgPGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzaG91bGQgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSBpdGVtIGFzIGFuIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRkVBVFVSRV9QQUNLQUdFU193aWRnZXQgPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2UxPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2UyPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCBpZiAid2lkZ2V0IiB3ZXJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+LCA8cmVwbGFjZWFibGU+cGFja2FnZTE8L3JlcGxhY2VhYmxlPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2UyPC9yZXBsYWNlYWJsZT4gd291bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIGluc3RhbGxlZCBieSBmZWF0dXJlcyBkZWZpbmVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT4gYXJlIG9mdGVuIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIHNpbWlsYXJseSBuYW1lZCwgeW91IHNob3VsZCBub3QgY29uZnVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBncm91cHMsIHdoaWNoIGFyZSBkaXNjdXNzZWQgZWxzZXdoZXJlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZFRURfREVQTE9ZRElSX0JBU0VfVVJJJz48Z2xvc3N0ZXJtPkZFRURfREVQTE9ZRElSX0JBU0VfVVJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGRUVEX0RFUExPWURJUl9CQVNFX1VSSVtkb2NdID0gIkFsbG93IHRvIHNlcnZlIGlwayBkZXBsb3kgZGlyZWN0b3J5IGFzIGFuIGFkIGhvYyBmZWVkIChib2dvZmVlZCkuIFNldCB0byBiYXNlIFVSTCBvZiB0aGUgZGlyZWN0b3J5IGFzIGV4cG9ydGVkIGJ5IEhUVFAuIFNldCBvZiBhZCBob2MgZmVlZCBjb25maWdzIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGJhc2UgVVJMIG9mIHRoZSBzZXJ2ZXIgYW5kIGxvY2F0aW9uIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICB0aGUgZG9jdW1lbnQtcm9vdCB0aGF0IHByb3ZpZGVzIHRoZSBtZXRhZGF0YSBhbmQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgcmVxdWlyZWQgYnkgT1BLRyB0byBzdXBwb3J0IHJ1bnRpbWUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IG9mIElQSyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRkVFRF9ERVBMT1lESVJfQkFTRV9VUkkgPSAiaHR0cDovLzE5Mi4xNjguNy4xL0JPQVJELWRpciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYXNzdW1lcyB5b3UgYXJlIHNlcnZpbmcgeW91ciBwYWNrYWdlcyBvdmVyCisgICAgICAgICAgICAgICAgICAgIEhUVFAgYW5kIHlvdXIgZGF0YWJhc2VzIGFyZSBsb2NhdGVkIGluIGEgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5CT0FSRC1kaXI8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdW5kZXJuZWF0aAorICAgICAgICAgICAgICAgICAgICB5b3VyIEhUVFAgc2VydmVyJ3MgZG9jdW1lbnQtcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgYSBzZXQKKyAgICAgICAgICAgICAgICAgICAgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgeW91IGluIHlvdXIgdGFyZ2V0IHRoYXQgd29yaworICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBmZWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTJz48Z2xvc3N0ZXJtPkZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGSUxFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgYXJlIHBsYWNlZCBpbiBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBkaXJlY3RvcmllcyBvciBmaWxlcyB0aGF0IGFyZSBwbGFjZWQgaW4gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgPGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT4gdmFyaWFibGUsIHByb3ZpZGUgYQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUgdGhhdCBpZGVudGlmaWVzIHRoZSByZXN1bHRpbmcgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlbiwgcHJvdmlkZSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIG9yIHBhdGhzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgaWRlbnRpZnkgdGhlIGZpbGVzIHlvdSB3YW50IGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNfJHtQTn0gKz0gIiR7YmluZGlyfS9teWRpcjEvICR7YmluZGlyfS9teWRpcjIvbXlmaWxlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBwYXRocyBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgaXQgaXMgZ29vZCBwcmFjdGljZQorICAgICAgICAgICAgICAgICAgICB0byB1c2UgYXBwcm9wcmlhdGUgcGF0aCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB1c2UgPGZpbGVuYW1lPiR7c3lzY29uZmRpcn08L2ZpbGVuYW1lPiByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiA8ZmlsZW5hbWU+L2V0YzwvZmlsZW5hbWU+LCBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlc2UgdmFyaWFibGVzIGF0IHRoZSB0b3Agb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBzb21lIG9mIHRoZSBmaWxlcyB5b3UgcHJvdmlkZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcmUgZWRpdGFibGUgYW5kIHlvdQorICAgICAgICAgICAgICAgICAgICBrbm93IHRoZXkgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdHRlbiBkdXJpbmcgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHByb2Nlc3MgYnkgdGhlIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW0gKFBNUyksIHlvdQorICAgICAgICAgICAgICAgICAgICBjYW4gaWRlbnRpZnkgdGhlc2UgZmlsZXMgc28gdGhhdCB0aGUgUE1TIHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT05GRklMRVMnPjxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB0aGVzZSBmaWxlcyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgUE1TLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNfU09MSUJTREVWJz48Z2xvc3N0ZXJtPkZJTEVTX1NPTElCU0RFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNfU09MSUJTREVWW2RvY10gPSAiRGVmaW5lcyB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZmlsZSBzcGVjaWZpY2F0aW9uIHRvIG1hdGNoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TT0xJQlNERVYnPjxmaWxlbmFtZT5TT0xJQlNERVY8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCA8ZmlsZW5hbWU+RklMRVNfU09MSUJTREVWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgZnVsbCBwYXRoIG5hbWUgb2YgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBzaG93cyBob3cgaXQgaXMgc2V0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTX1NPTElCU0RFViA/PSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTRVhUUkFQQVRIUyc+PGdsb3NzdGVybT5GSUxFU0VYVFJBUEFUSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTRVhUUkFQQVRIU1tkb2NdID0gIkV4dGVuZHMgdGhlIHNlYXJjaCBwYXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBsb29raW5nIGZvciBmaWxlcyBhbmQgcGF0Y2hlcyBhcyBpdCBwcm9jZXNzZXMgcmVjaXBlcyBhbmQgYXBwZW5kIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEV4dGVuZHMgdGhlIHNlYXJjaCBwYXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBsb29raW5nIGZvciBmaWxlcyBhbmQgcGF0Y2hlcyBhcyBpdCBwcm9jZXNzZXMgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICBhbmQgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBkaXJlY3RvcmllcyBCaXRCYWtlIHVzZXMgd2hlbiBpdCBwcm9jZXNzZXMKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBhcmUgaW5pdGlhbGx5IGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXh0ZW5kIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBieSB1c2luZyA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlc3QgcHJhY3RpY2VzIGRpY3RhdGUgdGhhdCB5b3UgYWNjb21wbGlzaCB0aGlzIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPiBmcm9tIHdpdGhpbiBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGFuZCB0aGF0IHlvdSBwcmVwZW5kCisgICAgICAgICAgICAgICAgICAgIHBhdGhzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgYnVpbGQgc3lzdGVtIGZpcnN0IGxvb2tzIGZvciBmaWxlcworICAgICAgICAgICAgICAgICAgICBpbiBhIGRpcmVjdG9yeSB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gZXh0ZW5kaW5nIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgdG8gdXNlIHRoZSBpbW1lZGlhdGUgZXhwYW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjo9PC9maWxlbmFtZT4pIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgSW1tZWRpYXRlIGV4cGFuc2lvbiBtYWtlcyBzdXJlIHRoYXQgQml0QmFrZSBldmFsdWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1USElTRElSJz48ZmlsZW5hbWU+VEhJU0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIHRpbWUgdGhlIGRpcmVjdGl2ZSBpcyBlbmNvdW50ZXJlZCByYXRoZXIgdGhhbiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZSBsYXRlciB0aW1lIHdoZW4gZXhwYW5zaW9uIG1pZ2h0IHJlc3VsdCBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBmaWxlcyB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFsc28sIGluY2x1ZGUgdGhlIHRyYWlsaW5nIHNlcGFyYXRpbmcgY29sb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBpZiB5b3UgYXJlIHByZXBlbmRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdHJhaWxpbmcgY29sb24gY2hhcmFjdGVyIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGRpcmVjdGluZyBCaXRCYWtlIHRvIGV4dGVuZCB0aGUgcGF0aCBieSBwcmVwZW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byB0aGUgc2VhcmNoIHBhdGguPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW5vdGhlciBjb21tb24gdXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gZXh0ZW5kcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGluY2x1ZGUgYQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZWQgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4gdGhhdCBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYSBmaW5hbCBleGFtcGxlIHRoYXQgc3BlY2lmaWNhbGx5IGFkZHMgdGhyZWUgcGF0aHM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gInBhdGhfMTpwYXRoXzI6cGF0aF8zOiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBwcmVwZW5kaW5nIHBhdGhzIGluIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcywgeW91IGFsbG93IG11bHRpcGxlIGFwcGVuZCBmaWxlcyB0aGF0IHJlc2lkZSBpbgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgbGF5ZXJzIGJ1dCBhcmUgdXNlZCBmb3IgdGhlIHNhbWUgcmVjaXBlIHRvCisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseSBleHRlbmQgdGhlIHBhdGguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNPVkVSUklERVMnPjxnbG9zc3Rlcm0+RklMRVNPVkVSUklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTT1ZFUlJJREVTW2RvY10gPSAiQSBzdWJzZXQgb2YgT1ZFUlJJREVTIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZm9yIGNyZWF0aW5nIEZJTEVTUEFUSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHN1YnNldCBvZiA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZm9yIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBvdmVycmlkZXMgYXJlIGhhbmRsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBkZWZpbmVkIGFzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTT1ZFUlJJREVTID0gIiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU30iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKworICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCBoYW5kLWVkaXQgdGhlIDxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZXMgbWF0Y2ggdXAgd2l0aCBleHBlY3RlZCBvdmVycmlkZXMgYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiBhbiBleHBlY3RlZCBtYW5uZXIgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTUEFUSCc+PGdsb3NzdGVybT5GSUxFU1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTUEFUSFtkb2NdID0gIlRoZSBkZWZhdWx0IHNldCBvZiBkaXJlY3RvcmllcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvciBwYXRjaGVzIGFuZCBmaWxlcy4gSXQgaXMgZGVmaW5lZCBpbiB0aGUgYmFzZS5iYmNsYXNzIGNsYXNzIGZvdW5kIGluIG1ldGEvY2xhc3NlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeS4gRG8gbm90IGhhbmQtZWRpdCB0aGUgRklMRVNQQVRIIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHNldCBvZiBkaXJlY3RvcmllcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvciBwYXRjaGVzIGFuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBCaXRCYWtlIHNlYXJjaGVzIGVhY2ggZGlyZWN0b3J5IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgbG9va2luZyBmb3IgZmlsZXMgYW5kIHBhdGNoZXMgc3BlY2lmaWVkIGJ5IGVhY2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkkgaW4gYSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBmb3VuZCBpbiA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU1BBVEggPSAiJHtAYmFzZV9zZXRfZmlsZXNwYXRoKFsiJHtGSUxFX0RJUk5BTUV9LyR7QlB9IiwgXAorICAgICAgICAiJHtGSUxFX0RJUk5BTUV9LyR7QlBOfSIsICIke0ZJTEVfRElSTkFNRX0vZmlsZXMiXSwgZCl9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGhhbmQtZWRpdCB0aGUgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBidWlsZCBzeXN0ZW0gdG8gbG9vayBpbiBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdHMsIGV4dGVuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGRvIG5vdCBtYXAgdG8gZGlyZWN0b3JpZXMgaW4gY3VzdG9tIGxheWVycworICAgICAgICAgICAgICAgICAgICB3aGVyZSBhcHBlbmQgZmlsZXMgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBidWlsZCBzeXN0ZW0gdG8gZmluZCBwYXRjaGVzIG9yIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcmVzaWRlIHdpdGggeW91ciBhcHBlbmQgZmlsZXMsIHlvdSBuZWVkIHRvIGV4dGVuZAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZJTEVTWVNURU1fUEVSTVNfVEFCTEVTJz48Z2xvc3N0ZXJtPkZJTEVTWVNURU1fUEVSTVNfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGSUxFU1lTVEVNX1BFUk1TX1RBQkxFU1tkb2NdID0gIkFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZ3MgdGFibGUgYXMgcGFydCBvZiB5b3VyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgeW91IHRvIGRlZmluZSB5b3VyIG93biBmaWxlIHBlcm1pc3Npb25zIHNldHRpbmdzIHRhYmxlIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgeW91ciBjb25maWd1cmF0aW9uIGZvciB0aGUgcGFja2FnaW5nIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIGEgY29uc2lzdGVudCBzZXQgb2YgY3VzdG9tIHBlcm1pc3Npb25zIGZvcgorICAgICAgICAgICAgICAgICAgICBhIHNldCBvZiBncm91cHMgYW5kIHVzZXJzIGFjcm9zcyBhbiBlbnRpcmUgd29yayBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBiZXN0IHRvIGRvIHRoaXMgaW4gdGhlIHBhY2thZ2VzIHRoZW1zZWx2ZXMgYnV0IHRoaXMgaXMgbm90IGFsd2F5cworICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+LCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9maWxlczwvZmlsZW5hbWU+IGZvbGRlciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY3JlYXRlIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZyB0YWJsZSwgeW91IHNob3VsZCBwbGFjZSBpdCBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIG9yIHRoZSBkaXN0cm8ncyBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGUgPGZpbGVuYW1lPkZJTEVTWVNURU1fUEVSTVNfVEFCTEVTPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwgdG8KKyAgICAgICAgICAgICAgICAgICAgcG9pbnQgdG8geW91ciBjdXN0b20gPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgbW9yZSB0aGFuIGEgc2luZ2xlIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZyB0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGhzIHlvdSBzcGVjaWZ5IHRvIHRoZXNlIGZpbGVzIG11c3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBndWlkYW5jZSBvbiBob3cgdG8gY3JlYXRlIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZ3MgdGFibGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgZXhhbWluZSB0aGUgZXhpc3RpbmcgPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZPTlRfRVhUUkFfUkRFUEVORFMnPjxnbG9zc3Rlcm0+Rk9OVF9FWFRSQV9SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRk9OVF9FWFRSQV9SREVQRU5EU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGZvbnRjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIGZvbnQgcGFja2FnZXMuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJ2ZvbnRjb25maWctdXRpbHMnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZm9udGNhY2hlJz48ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZvbnQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+Rk9OVF9FWFRSQV9SREVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiZm9udGNvbmZpZy11dGlscyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRk9OVF9QQUNLQUdFUyc+PGdsb3NzdGVybT5GT05UX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGT05UX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgY29udGFpbmluZyBmb250IGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgYnkgRm9udGNvbmZpZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWZvbnRjYWNoZSc+PGZpbGVuYW1lPmZvbnRjYWNoZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIHBhY2thZ2VzIGNvbnRhaW5pbmcgZm9udAorICAgICAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgY2FjaGVkIGJ5IEZvbnRjb25maWcuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT4gY2xhc3MgYXNzdW1lcworICAgICAgICAgICAgICAgICAgICB0aGF0IGZvbnRzIGFyZSBpbiB0aGUgcmVjaXBlJ3MgbWFpbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgaWYgZm9udHMgeW91IG5lZWQgYXJlIGluIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHRoYXQgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZVTExfT1BUSU1JWkFUSU9OJz48Z2xvc3N0ZXJtPkZVTExfT1BUSU1JWkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGVUxMX09QVElNSVpBVElPTltkb2NdPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYW4gb3B0aW1pemVkIHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgb3B0aW9ucyB0byBwYXNzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NGTEFHUyc+VEFSR0VUX0NGTEFHUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPkNGTEFHUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGNvbXBpbGluZyBhbiBvcHRpbWl6ZWQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgICItTzIgLXBpcGUgJHtERUJVR19GTEFHU30iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZyc+PHRpdGxlPkc8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR0RCJz48Z2xvc3N0ZXJtPkdEQjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR0RCW2RvY10gPSAiVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgR05VIERlYnVnZ2VyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEdOVSBEZWJ1Z2dlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HSVRESVInPjxnbG9zc3Rlcm0+R0lURElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHSVRESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIEdpdCBjbG9uZXMgd2lsbCBiZSBzdG9yZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBzdG9yZWQgd2hlbiBpdCBpcyBjbG9uZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR0xJQkNfR0VORVJBVEVfTE9DQUxFUyc+PGdsb3NzdGVybT5HTElCQ19HRU5FUkFURV9MT0NBTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHTElCQ19HRU5FUkFURV9MT0NBTEVTW2RvY109ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgR0xJQkMgbG9jYWxlcyB0byBnZW5lcmF0ZSBzaG91bGQgeW91IG5vdCB3aXNoIGdlbmVyYXRlIGFsbCBMSUJDIGxvY2Fscywgd2hpY2ggY2FuIGJlIHRpbWUgY29uc3VtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGlzdCBvZiBHTElCQyBsb2NhbGVzIHRvIGdlbmVyYXRlIHNob3VsZCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbm90IHdpc2ggZ2VuZXJhdGUgYWxsIExJQkMgbG9jYWxzLCB3aGljaCBjYW4gYmUgdGltZQorICAgICAgICAgICAgICAgICAgICBjb25zdW1pbmcuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZmljYWxseSByZW1vdmUgdGhlIGxvY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVuX1VTLlVURi04PC9maWxlbmFtZT4sIHlvdSBtdXN0IHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxmaWxlbmFtZT5JTUFHRV9MSU5HVUFTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IDxmaWxlbmFtZT5HTElCQ19HRU5FUkFURV9MT0NBTEVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGFsbCBsb2NhbGVzIGFyZSBnZW5lcmF0ZWQuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIEdMSUJDX0dFTkVSQVRFX0xPQ0FMRVMgPSAiZW5fR0IuVVRGLTggZW5fVVMuVVRGLTgiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUk9VUEFERF9QQVJBTSc+PGdsb3NzdGVybT5HUk9VUEFERF9QQVJBTTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JPVVBBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cGFkZCBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIGFkZCBhIGdyb3VwIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPmdyb3VwYWRkPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaCB0byBhZGQgYSBncm91cCB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgPGZpbGVuYW1lPmRidXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbmV0ZGV2IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgc3RhbmRhcmQgTGludXggc2hlbGwgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JvdXBhZGQ8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2dyb3VwYWRkJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUk9VUE1FTVNfUEFSQU0nPjxnbG9zc3Rlcm0+R1JPVVBNRU1TX1BBUkFNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUk9VUE1FTVNfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cG1lbXMgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIG1lbWJlcnMgb2YgYSBncm91cCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+Z3JvdXBtZW1zPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIG1lbWJlcnMgb2YgYSBncm91cCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGlzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFuZGFyZCBMaW51eCBzaGVsbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncm91cG1lbXM8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2dyb3VwbWVtcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1JVQl9HRlhTRVJJQUwnPjxnbG9zc3Rlcm0+R1JVQl9HRlhTRVJJQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdSVUJfR0ZYU0VSSUFMW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgdG8gaGF2ZQorICAgICAgICAgICAgICAgICAgICBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBlbmFibGUgZ3JhcGhpY3MgYW5kIHNlcmlhbAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbWVudS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1JVQl9PUFRTJz48Z2xvc3N0ZXJtPkdSVUJfT1BUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JVQl9PUFRTW2RvY10gPSAiQWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgY29uZmlndXJhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBHTlUgR1JhbmQgVW5pZmllZAorICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVyIChHUlVCKSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBVc2UgYSBzZW1pLWNvbG9uIGNoYXJhY3RlciAoPGZpbGVuYW1lPjs8L2ZpbGVuYW1lPikgdG8KKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUgbXVsdGlwbGUgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5HUlVCX09QVFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1JVQl9USU1FT1VUJz48Z2xvc3N0ZXJtPkdSVUJfVElNRU9VVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JVQl9USU1FT1VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQgTEFCRUwgaW4gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+IGluIHRoZSBHTlUgR1JhbmQgVW5pZmllZAorICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVyIChHUlVCKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5HUlVCX1RJTUVPVVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPkdUS0lNTU9EVUxFU19QQUNLQUdFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBndGstaW1tb2R1bGVzLWNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZSBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGJlaW5nIGluc3RhbGxlZCB3aGVuIHRoZSBtb2R1bGVzIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluIHBhY2thZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndGstaW1tb2R1bGVzLWNhY2hlJz48ZmlsZW5hbWU+Z3RrLWltbW9kdWxlcy1jYWNoZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgR1RLKyBpbnB1dCBtZXRob2QgbW9kdWxlcyBiZWluZyBpbnN0YWxsZWQgd2hlbiB0aGUgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICBhcmUgaW4gcGFja2FnZXMgb3RoZXIgdGhhbiB0aGUgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdVTU1JQk9PVF9DRkcnPjxnbG9zc3Rlcm0+R1VNTUlCT09UX0NGRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1VNTUlCT09UX0NGR1tkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlIEdVTU1JQk9PVF9DRkcgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBzaG91bGQgYmUgdXNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdVTU1JQk9PVF9DRkc8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHNob3VsZCBiZSB1c2VkLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5HVU1NSUJPT1RfQ0ZHPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHVU1NSUJPT1RfQ0ZHID89ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1TJz5TPC9saW5rPn0vbG9hZGVyLmNvbmYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEd1bW1pYm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290Lyc+R3VtbWlib290IGRvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HVU1NSUJPT1RfRU5UUklFUyc+PGdsb3NzdGVybT5HVU1NSUJPT1RfRU5UUklFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1VNTUlCT09UX0VOVFJJRVNbZG9jXSA9ICJXaGVuIEVGSV9QUk9WSURFUiBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZSBHVU1NSUJPT1RfRU5UUklFUyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIGVudHJ5IGZpbGVzICgqLmNvbmYpIHRvIGJlIGluc3RhbGxlZCBjb250YWluaW5nIG9uZSBib290IGVudHJ5IHBlciBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1VNTUlCT09UX0VOVFJJRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgYSBsaXN0IG9mIGVudHJ5IGZpbGVzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4pIHRvIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIG9uZSBib290IGVudHJ5IHBlciBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5HVU1NSUJPT1RfRU5UUklFUzwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgR1VNTUlCT09UX0VOVFJJRVMgPz0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR3VtbWlib290LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9ndW1taWJvb3QvJz5HdW1taWJvb3QgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdVTU1JQk9PVF9USU1FT1VUJz48Z2xvc3N0ZXJtPkdVTU1JQk9PVF9USU1FT1VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVU1NSUJPT1RfVElNRU9VVFtkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlIEdVTU1JQk9PVF9USU1FT1VUIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYm9vdCBtZW51IHRpbWVvdXQgaW4gc2Vjb25kcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdVTU1JQk9PVF9USU1FT1VUPC9maWxlbmFtZT4gdmFyaWFibGUgc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBib290IG1lbnUgdGltZW91dCBpbiBzZWNvbmRzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZ3VtbWlib290Jz48ZmlsZW5hbWU+Z3VtbWlib290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlIDxmaWxlbmFtZT5HVU1NSUJPT1RfVElNRU9VVDwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgR1VNTUlCT09UX1RJTUVPVVQgPz0gIjEwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHdW1taWJvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdC8nPkd1bW1pYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWgnPjx0aXRsZT5IPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPTUVQQUdFJz48Z2xvc3N0ZXJtPkhPTUVQQUdFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT01FUEFHRVtkb2NdID0gIldlYnNpdGUgd2hlcmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcyBidWlsZGluZyBjYW4gYmUgZm91bmQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2Vic2l0ZSB3aGVyZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX0FSQ0gnPjxnbG9zc3Rlcm0+SE9TVF9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT1NUX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX0FSQ0guIgorCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgbm9ybWFsbHkKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9BUkNIJz48ZmlsZW5hbWU+VEFSR0VUX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIG1hbnkKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBpcyBieSBubyBtZWFucyBjb21wbGV0ZSBhcyB0aGUgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGlzIGNvbmZpZ3VyYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhcm0KKyAgICAgaTU4NgorICAgICB4ODZfNjQKKyAgICAgcG93ZXJwYworICAgICBwb3dlcnBjNjQKKyAgICAgbWlwcworICAgICBtaXBzZWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfQ0NfQVJDSCc+PGdsb3NzdGVybT5IT1NUX0NDX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfQ0NfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX0NDX0FSQ0guIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb21waWxlciBmbGFncyB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5IT1NUX0NDX0FSQ0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DQ19BUkNIJz48ZmlsZW5hbWU+VEFSR0VUX0NDX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX0NDX0FSQ0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRFNES19DQ19BUkNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBhbiBTREsgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfT1MnPjxnbG9zc3Rlcm0+SE9TVF9PUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9PU1tkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgb3BlcmF0aW5nIHN5c3RlbS4gTm9ybWFsbHkgdGhlIHNhbWUgYXMgdGhlIFRBUkdFVF9PUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtLCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9PUyc+PGZpbGVuYW1lPlRBUkdFVF9PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gImxpbnV4IiBmb3IgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4tYmFzZWQgc3lzdGVtcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gImxpbnV4LXVjbGliYyIgZm9yIDxmaWxlbmFtZT51Y2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIEFSTS9FQUJJIHRhcmdldHMsIHRoZXJlIGFyZSBhbHNvICJsaW51eC1nbnVlYWJpIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgImxpbnV4LXVjbGliYy1nbnVlYWJpIiB2YWx1ZXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9QUkVGSVgnPjxnbG9zc3Rlcm0+SE9TVF9QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCBmb3IgdGhlIGNyb3NzIGNvbXBpbGUgdG9vbGNoYWluLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfUFJFRklYLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcHJlZml4IGZvciB0aGUgY3Jvc3MtY29tcGlsZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5IT1NUX1BSRUZJWDwvZmlsZW5hbWU+IGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX1NZUyc+PGdsb3NzdGVybT5IT1NUX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9TWVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2l0aCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2hpY2ggdGhlIGJ1aWxkIGlzIG9jY3VycmluZworICAgICAgICAgICAgICAgICAgICBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1IT1NUX0FSQ0gnPjxmaWxlbmFtZT5IT1NUX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1IT1NUX1ZFTkRPUic+PGZpbGVuYW1lPkhPU1RfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhPU1RfT1MnPjxmaWxlbmFtZT5IT1NUX09TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZSB2YXJpYWJsZSB5b3Vyc2VsZi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGVzZSB0d28gZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZW4gYSBuYXRpdmUgcmVjaXBlIG9uIGEgMzItYml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDg2IG1hY2hpbmUgcnVubmluZyBMaW51eCwgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYtbGludXgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdmVuIGEgcmVjaXBlIGJlaW5nIGJ1aWx0IGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLWVuZGlhbiBNSVBTIHRhcmdldCBydW5uaW5nIExpbnV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBtaWdodCBiZSAibWlwc2VsLWxpbnV4Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9WRU5ET1InPjxnbG9zc3Rlcm0+SE9TVF9WRU5ET1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfVkVORE9SW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHZlbmRvci4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX1ZFTkRPUi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHZlbmRvci4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkhPU1RfVkVORE9SPC9maWxlbmFtZT4gaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1pJz48dGl0bGU+STwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19ESVNBQkxFRCc+PGdsb3NzdGVybT5JQ0VDQ19ESVNBQkxFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfRElTQUJMRURbZG9jXSA9ICJEaXNhYmxlcyBvciBlbmFibGVzIHRoZSBpY2VjYyAoSWNlY3JlYW0pIGZ1bmN0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERpc2FibGVzIG9yIGVuYWJsZXMgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIChJY2VjcmVhbSkgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGJlc3QgcHJhY3RpY2VzCisgICAgICAgICAgICAgICAgICAgIGZvciB1c2luZyB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAiMSIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGRpc2FibGVzIHRoZSBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJQ0VDQ19ESVNBQkxFRCA/Pz0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHRoZSBmdW5jdGlvbiwgc2V0IHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElDRUNDX0RJU0FCTEVEID0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX0VOVl9FWEVDJz48Z2xvc3N0ZXJtPklDRUNDX0VOVl9FWEVDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19FTlZfRVhFQ1tkb2NdID0gIlBvaW50cyB0byB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCB5b3UgcHJvdmlkZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5pY2VjYy1jcmVhdGUtZW52PC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IHByb3ZpZGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaWNlY2MnPjxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHBvaW50IHRvIGEgc2NyaXB0IHRoYXQgeW91IHByb3ZpZGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIGRlZmF1bHQgc2NyaXB0IHByb3ZpZGVkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSA8ZmlsZW5hbWU+aWNlY2MtY3JlYXRlLWVudi5iYjwvZmlsZW5hbWU+IHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgYSBtb2RpZmllZCB2ZXJzaW9uIGFuZCBub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSUNFQ0NfUEFSQUxMRUxfTUFLRSc+PGdsb3NzdGVybT5JQ0VDQ19QQVJBTExFTF9NQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19QQVJBTExFTF9NQUtFW2RvY10gPSAiRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIG1ha2UgY29tbWFuZCBkdXJpbmcgdGhlIGRvX2NvbXBpbGUgdGFzayB0aGF0IHNwZWNpZnkgcGFyYWxsZWwgY29tcGlsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIHRoYXQgc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB1c3VhbGx5IHRha2VzIHRoZSBmb3JtIG9mCisgICAgICAgICAgICAgICAgICAgICItaiA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+Iiwgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPiByZXByZXNlbnRzIHRoZSBtYXhpbXVtCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY2FuCisgICAgICAgICAgICAgICAgICAgIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgYWZmZWN0IGJ1aWxkcyBvbiBhbGwgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMgb24gdGhlIG5ldHdvcmssIHdoaWNoIGFyZSBtYWNoaW5lcyBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmljZWNjZDwvZmlsZW5hbWU+IGRhZW1vbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGVuYWJsZWQgbWFjaGluZXMgc3VwcG9ydCBtdWx0aXBsZSBjb3JlcywKKyAgICAgICAgICAgICAgICAgICAgY29taW5nIHVwIHdpdGggdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIHRocmVhZHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBnaXZlcyB5b3UgdGhlIGJlc3QgcGVyZm9ybWFuY2UgY291bGQgdGFrZSBzb21lCisgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhdGlvbiBzaW5jZSBtYWNoaW5lIHNwZWVkLCBuZXR3b3JrIGxhZywKKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIG1lbW9yeSwgYW5kIGV4aXN0aW5nIG1hY2hpbmUgbG9hZHMgY2FuIGFsbAorICAgICAgICAgICAgICAgICAgICBhZmZlY3QgYnVpbGQgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB1bmxpa2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlcmUgaXMgbm8gcnVsZS1vZi10aHVtYiBmb3Igc2V0dGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SUNFQ0NfUEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+IHRvIGFjaGlldmUKKyAgICAgICAgICAgICAgICAgICAgb3B0aW1hbCBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzZXQgPGZpbGVuYW1lPklDRUNDX1BBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCB1c2UgaXQgKGkuZS4gdGhlIHN5c3RlbSBkb2VzCisgICAgICAgICAgICAgICAgICAgIG5vdCBkZXRlY3QgYW5kIGFzc2lnbiB0aGUgbnVtYmVyIG9mIGNvcmVzIGFzIGlzIGRvbmUgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19QQVRIJz48Z2xvc3N0ZXJtPklDRUNDX1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGljZWNjIGJpbmFyeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZG9lcyBub3QgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgIHRoaXMgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGF0dGVtcHRzIHRvIGRlZmluZSBpdCBieSBsb2NhdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPiB1c2luZyA8ZmlsZW5hbWU+d2hpY2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19VU0VSX0NMQVNTX0JMJz48Z2xvc3N0ZXJtPklDRUNDX1VTRVJfQ0xBU1NfQkw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1VTRVJfQ0xBU1NfQkxbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgY2xhc3NlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGNvbnNpZGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdXNlciBjbGFzc2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaWNlY2MnPjxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBsaXN0IGNsYXNzZXMgdXNpbmcgdGhpcyB2YXJpYWJsZSwgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAiYmxhY2tsaXN0aW5nIiB0aGVtIGZyb20gZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gYWNyb3NzCisgICAgICAgICAgICAgICAgICAgIHJlbW90ZSBob3N0cy4KKyAgICAgICAgICAgICAgICAgICAgQW55IGNsYXNzZXMgeW91IGxpc3Qgd2lsbCBiZSBkaXN0cmlidXRlZCBhbmQgY29tcGlsZWQKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19VU0VSX1BBQ0tBR0VfQkwnPjxnbG9zc3Rlcm0+SUNFQ0NfVVNFUl9QQUNLQUdFX0JMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkxbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGNvbnNpZGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaWNlY2MnPjxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBsaXN0IHBhY2thZ2VzIHVzaW5nIHRoaXMgdmFyaWFibGUsIHlvdSBhcmUKKyAgICAgICAgICAgICAgICAgICAgImJsYWNrbGlzdGluZyIgdGhlbSBmcm9tIGRpc3RyaWJ1dGVkIGNvbXBpbGF0aW9uIGFjcm9zcworICAgICAgICAgICAgICAgICAgICByZW1vdGUgaG9zdHMuCisgICAgICAgICAgICAgICAgICAgIEFueSBwYWNrYWdlcyB5b3UgbGlzdCB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFuZCBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICBsb2NhbGx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1VTRVJfUEFDS0FHRV9XTCc+PGdsb3NzdGVybT5JQ0VDQ19VU0VSX1BBQ0tBR0VfV0w8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1VTRVJfUEFDS0FHRV9XTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgdXNlIGFuIGVtcHR5IFBBUkFMTEVMX01BS0UgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBmb3JjZSByZW1vdGUgZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gb24gdXNpbmcgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHVzZSBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBmb3JjZSByZW1vdGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsYXRpb24gb24gdXNpbmcgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfQkFTRU5BTUUnPjxnbG9zc3Rlcm0+SU1BR0VfQkFTRU5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0JBU0VOQU1FW2RvY10gPSAiVGhlIGJhc2UgbmFtZSBvZiBpbWFnZSBvdXRwdXQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBvZiBpbWFnZSBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gdGhlIHJlY2lwZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfQk9PVF9GSUxFUyc+PGdsb3NzdGVybT5JTUFHRV9CT09UX0ZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9CT09UX0ZJTEVTW2RvY10gPSAiV2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyBmcm9tICR7REVQTE9ZX0RJUl9JTUFHRX0gdG8gcGxhY2UgaW4gYm9vdCBwYXJ0aXRpb24uIEVudHJpZXMgd2lsbCBiZSBpbnN0YWxsZWQgdW5kZXIgYSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlLiBUbyBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgcGFzcyBhIGRlc2lyZWQgbmFtZSBhZnRlciBhIHNlbWljb2xvbiAoZWcuIHUtYm9vdC5pbWc7dWJvb3QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgaW5zdGFsbGVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGJvb3QgcGFydGl0aW9uIHdoZW4gcHJlcGFyaW5nIGFuIGltYWdlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdG9vbCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ym9vdGltZy1wYXJ0aXRpb248L2ZpbGVuYW1lPiBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2luLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZmlsZXMgYXJlIGluc3RhbGxlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBuYW1lIGFzIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRvIGNoYW5nZSB0aGUgaW5zdGFsbGVkIG5hbWUsIHNlcGFyYXRlIGl0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIG5hbWUgd2l0aCBhIHNlbWktY29sb24gKDspLgorICAgICAgICAgICAgICAgICAgICBTb3VyY2UgZmlsZXMgbmVlZCB0byBiZSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgorCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgSU1BR0VfQk9PVF9GSUxFUyA9ICJ1LWJvb3QuaW1nIHVJbWFnZTtrZXJuZWwiCisgICAgIElNQUdFX0JPT1RfRklMRVMgPSAidS1ib290LiR7VUJPT1RfU1VGRklYfSAke0tFUk5FTF9JTUFHRVRZUEV9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHNvdXJjZSBmaWxlcyBjYW4gYmUgcGlja2VkIHVwIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIGEgZ2xvYiBwYXR0ZXJuLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgIHdpbGwgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlCisgICAgICAgICAgICAgICAgICAgIHBhdGguCisgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgZmlsZXMgaW50byBhIGRpcmVjdG9yeSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBsb2NhdGlvbiwgcGFzcyBpdHMgbmFtZSBhZnRlciBhIHNlbWktY29sb24KKyAgICAgICAgICAgICAgICAgICAgKDspLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgSU1BR0VfQk9PVF9GSUxFUyA9ICJiY20yODM1LWJvb3RmaWxlcy8qIgorICAgICBJTUFHRV9CT09UX0ZJTEVTID0gImJjbTI4MzUtYm9vdGZpbGVzLyo7Ym9vdC8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGV4YW1wbGUgaW5zdGFsbHMgYWxsIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUl9JTUFHRX0vYmNtMjgzNS1ib290ZmlsZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSByb290IG9mIHRoZSB0YXJnZXQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgaW5zdGFsbHMgdGhlIHNhbWUgZmlsZXMgaW50byBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ib290PC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9DTEFTU0VTJz48Z2xvc3N0ZXJtPklNQUdFX0NMQVNTRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFsbCBpbWFnZXMgc2hvdWxkIGluaGVyaXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGNsYXNzZXMgdGhhdCBhbGwgaW1hZ2VzIHNob3VsZCBpbmhlcml0LgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IHVzZSB0aGlzIHZhcmlhYmxlIHRvIHNwZWNpZnkgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyB0aGF0IHJlZ2lzdGVyIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciA8ZmlsZW5hbWU+SU1BR0VfQ0xBU1NFUzwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZV90eXBlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBpbiBhIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9DTUQnPjxnbG9zc3Rlcm0+SU1BR0VfQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9DTURbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBpbWFnZSBmaWxlIGZvciBhIHNwZWNpZmljIGltYWdlIHR5cGUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSB2YWx1ZSBzZXQgc2V0IGluIElNQUdFX0ZTVFlQRVMsIChlLmcuIGV4dDMsIGJ0cmZzLCBhbmQgc28gZm9ydGgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGltYWdlIGZpbGUgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW1hZ2UgdHlwZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIHNldAorICAgICAgICAgICAgICAgICAgICBzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnRyZnM8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgIGFuIG92ZXJyaWRlIGZvciB0aGUgYXNzb2NpYXRlZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfQ01EX2pmZnMyID0gIm1rZnMuamZmczIgLS1yb290PSR7SU1BR0VfUk9PVEZTfSBcCisgICAgICAgIC0tZmFrZXRpbWUgLS1vdXRwdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5qZmZzMiBcCisgICAgICAgICR7RVhUUkFfSU1BR0VDTUR9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgZG8gbm90IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgdW5sZXNzCisgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgYWRkaW5nIHN1cHBvcnQgZm9yIGEgbmV3IGltYWdlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGV4YW1wbGVzIG9uIGhvdyB0byBzZXQgdGhpcyB2YXJpYWJsZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZV90eXBlcyc+PGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0RFVklDRV9UQUJMRVMnPjxnbG9zc3Rlcm0+SU1BR0VfREVWSUNFX1RBQkxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfREVWSUNFX1RBQkxFU1tkb2NdID0gIlNwZWNpZmllcyBvbmUgb3IgbW9yZSBmaWxlcyB0aGF0IGNvbnRhaW4gY3VzdG9tIGRldmljZSB0YWJsZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtYWtlZGV2cyBjb21tYW5kIGFzIHBhcnQgb2YgY3JlYXRpbmcgYW4gaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQgY29udGFpbiBjdXN0b20gZGV2aWNlCisgICAgICAgICAgICAgICAgICAgIHRhYmxlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlZGV2czwvZmlsZW5hbWU+IGNvbW1hbmQgYXMgcGFydCBvZiBjcmVhdGluZworICAgICAgICAgICAgICAgICAgICBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgbGlzdCBiYXNpYyBkZXZpY2Ugbm9kZXMgdGhhdCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCB1bmRlciA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IHdpdGhpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5JTUFHRV9ERVZJQ0VfVEFCTEVTPC9maWxlbmFtZT4gaXMgbm90IHNldCwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dDwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIHVzZWQsIHdoaWNoIGlzIGxvY2F0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHlvdSBzaG91bGQgd3JpdGUgZGV2aWNlIHRhYmxlIGZpbGVzLAorICAgICAgICAgICAgICAgICAgICBzZWUgPGZpbGVuYW1lPm1ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGdsb3NzdGVybT5JTUFHRV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgcHJpbWFyeSBsaXN0IG9mIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIGFuIGltYWdlIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJpbWFyeSBsaXN0IG9mIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIGFuIGltYWdlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBkbyBub3QuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIGV4dHJhIGZlYXR1cmVzIGZyb20gb3V0c2lkZSB0aGUgaW1hZ2UgcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiBpbWFnZSBmZWF0dXJlcyB0aGF0IHNoaXBzIHdpdGggdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9InJlZi1mZWF0dXJlcy1pbWFnZSI+SW1hZ2UgRmVhdHVyZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBjdXN0b21pemUgeW91ciBpbWFnZSBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWltYWdlZmVhdHVyZXMnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxnbG9zc3Rlcm0+SU1BR0VfRlNUWVBFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfRlNUWVBFU1tkb2NdID0gIkZvcm1hdHMgb2Ygcm9vdCBmaWxlc3lzdGVtIGltYWdlcyB0aGF0IHlvdSB3YW50IHRvIGhhdmUgY3JlYXRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZvcm1hdHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkIHdoZW4gY3JlYXRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNldHRpbmcgPGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW1zIHVzaW5nIHR3byBmb3JtYXRzOiA8ZmlsZW5hbWU+LmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPi50YXIuYnoyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfRlNUWVBFUyA9ICJleHQzIHRhci5iejIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBmb3JtYXRzIGZyb20gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBjaG9vc2UsIHNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9UWVBFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFkZCAibGl2ZSIgdG8gPGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbnNpZGUgYW4gaW1hZ2UgcmVjaXBlLCBiZSBzdXJlIHRoYXQgeW91IGRvIHNvIHByaW9yIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAiaW5oZXJpdCBpbWFnZSIgbGluZSBvZiB0aGUgcmVjaXBlIG9yIHRoZSBsaXZlIGltYWdlIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbm90IGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEdWUgdG8gdGhlIHdheSB0aGlzIHZhcmlhYmxlIGlzIHByb2Nlc3NlZCwgaXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHRvIHVwZGF0ZSBpdHMgY29udGVudHMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPi4gVG8gYWRkIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGlzIHZhcmlhYmxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRvciBtdXN0IGJlIHVzZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfSU5TVEFMTCc+PGdsb3NzdGVybT5JTUFHRV9JTlNUQUxMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9JTlNUQUxMW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UuIEltYWdlIHJlY2lwZXMgc2V0IElNQUdFX0lOU1RBTEwgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlIHRocm91Z2ggaW1hZ2UuYmJjbGFzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYQorICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gZm9yIGFuIGltYWdlIHJlY2lwZSBhbmQgeW91IHNob3VsZCB1c2UgaXQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBjYXJlIHRvIGF2b2lkIG9yZGVyaW5nIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW1hZ2VzLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMnPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSwgZG8gbm90IHVzZSB0aGUgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBwYWNrYWdlcyBmb3IgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfSU5TVEFMTCc+PGZpbGVuYW1lPlBBQ0tBR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFsbG93cyB0aGUgaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHVzZSBhIGZpeGVkIHNldCBvZiBwYWNrYWdlcyBhbmQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlZCBieSA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEltYWdlIHJlY2lwZXMgc2V0IDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCAiaGVscGVyIiBjbGFzc2VzIGV4aXN0LCBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPiwgdGhhdCBjYW4gdGFrZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz5JTUFHRV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsaXN0cyBhbmQgdHVybiB0aGVzZSBpbnRvIGF1dG8tZ2VuZXJhdGVkIGVudHJpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiBpbiBhZGRpdGlvbiB0byBpdHMKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBjb250ZW50cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRvciBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2NvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgZnJvbSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgYW4gaW1hZ2UgcmVjaXBlIGlzIG5vdCByZWNvbW1lbmRlZCBhcyBpdCBjYW4gY2F1c2Ugb3JkZXJpbmcKKyAgICAgICAgICAgICAgICAgICAgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICBTaW5jZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT4gc2V0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IHRvIGEgZGVmYXVsdCB2YWx1ZSB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPj89PC9maWxlbmFtZT4gb3BlcmF0b3IsIHVzaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4gb3BlcmF0aW9uIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiB3aWxsIHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gdXNlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGUgc2FtZSBvcGVyYXRpb24gZnJvbSB3aXRoaW4gYW4gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG1heSBvciBtYXkgbm90IHN1Y2NlZWQgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBzaXR1YXRpb24uCisgICAgICAgICAgICAgICAgICAgIEluIGJvdGggdGhlc2UgY2FzZXMsIHRoZSBiZWhhdmlvciBpcyBjb250cmFyeSB0byBob3cgbW9zdAorICAgICAgICAgICAgICAgICAgICB1c2VycyBleHBlY3QgdGhlIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+IG9wZXJhdG9yIHRvIHdvcmsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGlzIHZhcmlhYmxlLCBpdCBpcyBiZXN0IHRvIHVzZSBpdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiA8cmVwbGFjZWFibGU+cGFja2FnZS1uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBxdW90YXRpb24gY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHBhY2thZ2UgbmFtZSBvciBuYW1lcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9MSU5HVUFTJz48Z2xvc3N0ZXJtPklNQUdFX0xJTkdVQVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0xJTkdVQVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgbG9jYWxlcyB0byBpbnN0YWxsIGludG8gdGhlIGltYWdlIGR1cmluZyB0aGUgcm9vdCBmaWxlc3lzdGVtIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGlzdCBvZiBsb2NhbGVzIHRvIGluc3RhbGwgaW50byB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gY29uc3RydWN0aW9uIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc3BsaXRzIGxvY2FsZQorICAgICAgICAgICAgICAgICAgICBmaWxlcywgd2hpY2ggYXJlIHVzZWQgZm9yIGxvY2FsaXphdGlvbiwgaW50byBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPklNQUdFX0xJTkdVQVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBlbnN1cmVzIHRoYXQgYW55IGxvY2FsZSBwYWNrYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBzZWxlY3RlZCBmb3IgaW5zdGFsbGF0aW9uIGludG8gdGhlIGltYWdlIGFyZSBhbHNvCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0xJTkdVQVMgPSAicHQtYnIgZGUtZGUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgYnVpbGQgc3lzdGVtIGVuc3VyZXMgYW55IEJyYXppbGlhbgorICAgICAgICAgICAgICAgICAgICBQb3J0dWd1ZXNlIGFuZCBHZXJtYW4gbG9jYWxlIGZpbGVzIHRoYXQgY29ycmVzcG9uZCB0bworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbiB0aGUgaW1hZ2UgYXJlIGluc3RhbGxlZCAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1sb2NhbGUtcHQtYnI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPiotbG9jYWxlLWRlLWRlPC9maWxlbmFtZT4gYXMgd2VsbCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki1sb2NhbGUtcHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPiotbG9jYWxlLWRlPC9maWxlbmFtZT4sIHNpbmNlIHNvbWUgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgb25seSBwcm92aWRlIGxvY2FsZSBmaWxlcyBieSBsYW5ndWFnZSBhbmQgbm90IGJ5CisgICAgICAgICAgICAgICAgICAgIGNvdW50cnktc3BlY2lmaWMgbGFuZ3VhZ2UpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HTElCQ19HRU5FUkFURV9MT0NBTEVTJz48ZmlsZW5hbWU+R0xJQkNfR0VORVJBVEVfTE9DQUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgaW5mb3JtYXRpb24gb24gZ2VuZXJhdGluZyBHTElCQyBsb2NhbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX01BTklGRVNUJz48Z2xvc3N0ZXJtPklNQUdFX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9NQU5JRkVTVFtkb2NdID0gIlRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaW1hZ2UuIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBjb250YWlucyBwYWNrYWdlIGluZm9ybWF0aW9uIG9uIGEgbGluZS1wZXItcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiYXNpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYWNrYWdlbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlYXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UnPjxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSBtYW5pZmVzdCBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfTUFOSUZFU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5tYW5pZmVzdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaXMgZGVyaXZlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTkFNRSc+PGZpbGVuYW1lPklNQUdFX05BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBpcyBjcmVhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naW1hZ2UtZ2VuZXJhdGlvbi1kZXYtZW52aXJvbm1lbnQnPkltYWdlIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX05BTUUnPjxnbG9zc3Rlcm0+SU1BR0VfTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfTkFNRVtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZXMgbWludXMgdGhlIGV4dGVuc2lvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGltYWdlIGZpbGVzIG1pbnVzIHRoZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZGVyaXZlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0JBU0VOQU1FJz48ZmlsZW5hbWU+SU1BR0VfQkFTRU5BTUU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EQVRFVElNRSc+PGZpbGVuYW1lPkRBVEVUSU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9OQU1FID0gIiR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPjxnbG9zc3Rlcm0+SU1BR0VfT1ZFUkhFQURfRkFDVE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9PVkVSSEVBRF9GQUNUT1JbZG9jXSA9ICJEZWZpbmVzIGEgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0byB0aGUgaW5pdGlhbCBpbWFnZSBzaXplIGZvciBjYXNlcyB3aGVuIHRoZSBtdWx0aXBsaWVyIHRpbWVzIHRoZSByZXR1cm5lZCBkaXNrIHVzYWdlIHZhbHVlIGZvciB0aGUgaW1hZ2UgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdW0gb2YgSU1BR0VfUk9PVEZTX1NJWkUgYW5kIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0byB0aGUgaW5pdGlhbCBpbWFnZQorICAgICAgICAgICAgICAgICAgICBzaXplIGZvciBjYXNlcyB3aGVuIHRoZSBtdWx0aXBsaWVyIHRpbWVzIHRoZSByZXR1cm5lZCBkaXNrIHVzYWdlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgaW1hZ2UgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdW0gb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlNfU0laRSc+SU1BR0VfUk9PVEZTX1NJWkU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz5JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0U8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGxpZXIgYXBwbGllZCB0byB0aGUgaW5pdGlhbCBpbWFnZSBzaXplIGNyZWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgZnJlZSBkaXNrIHNwYWNlIGluIHRoZSBpbWFnZSBhcyBvdmVyaGVhZC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyBhIG11bHRpcGxpZXIgb2YgMS4zIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgdmFsdWUgcmVzdWx0cyBpbiAzMCUgZnJlZSBkaXNrIHNwYWNlIGFkZGVkIHRvIHRoZSBpbWFnZSB3aGVuIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmaW5hbCBnZW5lcmF0ZWQgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IHBvc3QgaW5zdGFsbCBzY3JpcHRzIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB1c2VzIGRpc2sgc3BhY2UgaW5zaWRlIHRoaXMgb3ZlcmhlYWQgYXJlYS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgbXVsdGlwbGllciBkb2VzIG5vdCBwcm9kdWNlIGFuIGltYWdlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgYWxsIHRoZSB0aGVvcmV0aWNhbCBmcmVlIGRpc2sgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIFNlZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz5JTUFHRV9ST09URlNfU0laRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAzMCUgZnJlZSBkaXNrIHNwYWNlIHR5cGljYWxseSBnaXZlcyB0aGUgaW1hZ2UgZW5vdWdoIHJvb20gdG8gYm9vdAorICAgICAgICAgICAgICAgICAgICBhbmQgYWxsb3dzIGZvciBiYXNpYyBwb3N0IGluc3RhbGxzIHdoaWxlIHN0aWxsIGxlYXZpbmcgYSBzbWFsbCBhbW91bnQgb2YKKyAgICAgICAgICAgICAgICAgICAgZnJlZSBkaXNrIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICBJZiAzMCUgZnJlZSBzcGFjZSBpcyBpbmFkZXF1YXRlLCB5b3UgY2FuIGluY3JlYXNlIHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXR0aW5nIGdpdmVzIHlvdSA1MCUgZnJlZSBzcGFjZSBhZGRlZCB0byB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfT1ZFUkhFQURfRkFDVE9SID0gIjEuNSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGVuc3VyZSBhIHNwZWNpZmljIGFtb3VudCBvZiBmcmVlIGRpc2sgc3BhY2UgaXMgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGltYWdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+SU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1BLR1RZUEUnPjxnbG9zc3Rlcm0+SU1BR0VfUEtHVFlQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUEtHVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIHBhY2thZ2UgdHlwZSAoREVCLCBSUE0sIElQSywgb3IgVEFSKSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHBhY2thZ2UgdHlwZSAoREVCLCBSUE0sIElQSywgb3IgVEFSKSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgZGVmaW5lZCBhcHByb3ByaWF0ZWx5IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2RlYic+PGZpbGVuYW1lPnBhY2thZ2VfZGViPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+PGZpbGVuYW1lPnBhY2thZ2VfcnBtPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2lwayc+PGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+PGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MgaXMgYnJva2VuCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvIG5vdCB1c2UgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cGFja2FnZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UnPjxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIHVzZSB0aGUgPGZpbGVuYW1lPklNQUdFX1BLR1RZUEU8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnaW5nIHVwIGltYWdlcyBhbmQgU0RLcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3Qgc2V0IHRoZSA8ZmlsZW5hbWU+SU1BR0VfUEtHVFlQRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hbnVhbGx5LgorICAgICAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW5kaXJlY3RseSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZV8qPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBmaXJzdCBwYWNrYWdlIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gREVCLCBSUE0sIG9yIElQSykgdGhhdCBhcHBlYXJzIHdpdGggdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXMgdXNpbmcgdGhlIDxmaWxlbmFtZT4udGFyPC9maWxlbmFtZT4gZm9ybWF0IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV2ZXIgdXNlZCBhcyBhIHN1YnN0aXR1dGUgcGFja2FnaW5nIGZvcm1hdCBmb3IgREVCLAorICAgICAgICAgICAgICAgICAgICAgICAgUlBNLCBhbmQgSVBLIGZvcm1hdHRlZCBmaWxlcyBmb3IgeW91ciBpbWFnZSBvciBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJz48Z2xvc3N0ZXJtPklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGZpbmFsIGltYWdlIG91dHB1dCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGZpbmFsIGltYWdlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+SU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgZmluYWwgaW1hZ2Ugb3V0cHV0IGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSBmaW5hbCBpbWFnZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9ST09URlMnPjxnbG9zc3Rlcm0+SU1BR0VfUk9PVEZTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSB3aGlsZSBpdCBpcyB1bmRlciBjb25zdHJ1Y3Rpb24gKGkuZS4gZHVyaW5nIGRvX3Jvb3RmcykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gd2hpbGUgaXQgaXMgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0aW9uIChpLmUuIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXJvb3Rmcyc+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBub3QgY29uZmlndXJhYmxlLgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgY2hhbmdlIGl0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1JPT1RGU19BTElHTk1FTlQnPjxnbG9zc3Rlcm0+SU1BR0VfUk9PVEZTX0FMSUdOTUVOVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUk9PVEZTX0FMSUdOTUVOVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWxpZ25tZW50IGZvciB0aGUgb3V0cHV0IGltYWdlIGZpbGUgaW4gS2J5dGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYWxpZ25tZW50IGZvciB0aGUgb3V0cHV0IGltYWdlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaXMgbm90IGEgbXVsdGlwbGUgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhpcyB2YWx1ZSwgdGhlbiB0aGUgc2l6ZSBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZWFyZXN0CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIG9mIHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIjEiLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX1NJWkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz48Z2xvc3N0ZXJtPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFW2RvY10gPSAiRGVmaW5lcyBhZGRpdGlvbmFsIGZyZWUgZGlzayBzcGFjZSBjcmVhdGVkIGluIHRoZSBpbWFnZSBpbiBLYnl0ZXMuIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICcwJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIGNyZWF0ZWQgaW4gdGhlIGltYWdlIGluIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZyZWUgZGlzayBzcGFjZSBpcyBhZGRlZCB0byB0aGUgaW1hZ2UgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBzaXplIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz5JTUFHRV9ST09URlNfU0laRTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBhbW91bnQgb2YgZnJlZSBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSBvbiBhIGRldmljZSBhZnRlciBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICBpcyBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBiZSBzdXJlIDUgR2J5dGVzIG9mIGZyZWUgZGlzayBzcGFjZSBpcyBhdmFpbGFibGUsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiNTI0Mjg4MCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIFlvY3RvIFByb2plY3QgQnVpbGQgQXBwbGlhbmNlIHNwZWNpZmljYWxseSByZXF1ZXN0cyA0MCBHYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgZXh0cmEgc3BhY2Ugd2l0aCB0aGUgbGluZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiNDE5NDMwNDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9ST09URlNfU0laRSc+PGdsb3NzdGVybT5JTUFHRV9ST09URlNfU0laRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUk9PVEZTX1NJWkVbZG9jXSA9ICJEZWZpbmVzIHRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgZmluYWwgc2l6ZSBmb3IgdGhlIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICBpbWFnZSB1c2luZyBhbiBhbGdvcml0aG0gdGhhdCB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGluaXRpYWwgZGlzayBzcGFjZSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLCBhIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgaW1hZ2UsIGFuZCByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBmcmVlIGRpc2sgc3BhY2UgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBQcm9ncmFtYXRpY2FsbHksIHRoZSBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgZmluYWwgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGltYWdlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBpZiAoaW1hZ2UtZHUgKiBvdmVyaGVhZCkgJmx0OyByb290ZnMtc2l6ZToKKwlpbnRlcm5hbC1yb290ZnMtc2l6ZSA9IHJvb3Rmcy1zaXplICsgeHNwYWNlCisgICAgZWxzZToKKwlpbnRlcm5hbC1yb290ZnMtc2l6ZSA9IChpbWFnZS1kdSAqIG92ZXJoZWFkKSArIHhzcGFjZQorCisgICAgd2hlcmU6CisKKyAgICAgIGltYWdlLWR1ID0gUmV0dXJuZWQgdmFsdWUgb2YgdGhlIGR1IGNvbW1hbmQgb24KKyAgICAgICAgICAgICAgICAgdGhlIGltYWdlLgorCisgICAgICBvdmVyaGVhZCA9IElNQUdFX09WRVJIRUFEX0ZBQ1RPUgorCisgICAgICByb290ZnMtc2l6ZSA9IElNQUdFX1JPT1RGU19TSVpFCisKKyAgICAgIGludGVybmFsLXJvb3Rmcy1zaXplID0gSW5pdGlhbCByb290IGZpbGVzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBiZWZvcmUgYW55IG1vZGlmaWNhdGlvbnMuCisKKyAgICAgIHhzcGFjZSA9IElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX09WRVJIRUFEX0ZBQ1RPUic+PGZpbGVuYW1lPklNQUdFX09WRVJIRUFEX0ZBQ1RPUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+PGZpbGVuYW1lPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCis8IS0tICAgICAgICAgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPm92ZXJoZWFkPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPklNQUdFX09WRVJIRUFEX0ZBQ1RPUjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgPGZpbGVuYW1lPnhzcGFjZTwvZmlsZW5hbWU+IGlzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz5JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0U8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCA8ZmlsZW5hbWU+ZHU8L2ZpbGVuYW1lPiBpcyB0aGUgcmVzdWx0cyBvZiB0aGUgZGlzayB1c2FnZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBpbml0aWFsbHkgZ2VuZXJhdGVkIGltYWdlLiAtLT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9UWVBFREVQJz48Z2xvc3N0ZXJtPklNQUdFX1RZUEVERVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1RZUEVERVBbZG9jXSA9ICJTcGVjaWZpZXMgYSBkZXBlbmRlbmN5IGZyb20gb25lIGltYWdlIHR5cGUgb24gYW5vdGhlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBkZXBlbmRlbmN5IGZyb20gb25lIGltYWdlIHR5cGUgb24gYW5vdGhlci4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWltYWdlLWxpdmUnPjxmaWxlbmFtZT5pbWFnZS1saXZlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1RZUEVERVBfbGl2ZSA9ICJleHQzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgdmFyaWFibGUgZW5zdXJlcyB0aGF0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgImxpdmUiIGlzIGxpc3RlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb2R1Y2VzIGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4gaW1hZ2UgZmlyc3Qgc2luY2Ugb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIG9mIHRoZSBsaXZlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGlzIGFuIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIHBhcnRpdGlvbiBjb250YWluaW5nIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfVFlQRVMnPjxnbG9zc3Rlcm0+SU1BR0VfVFlQRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1RZUEVTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyBieSBkZWZhdWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMKKyAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBqZmZzMgorICAgICBqZmZzMi5zdW0KKyAgICAgY3JhbWZzCisgICAgIGV4dDIKKyAgICAgZXh0Mi5negorICAgICBleHQyLmJ6MgorICAgICBleHQzCisgICAgIGV4dDMuZ3oKKyAgICAgZXh0Mi5sem1hCisgICAgIGJ0cmZzCisgICAgIGxpdmUKKyAgICAgc3F1YXNoZnMKKyAgICAgc3F1YXNoZnMteHoKKyAgICAgdWJpCisgICAgIHViaWZzCisgICAgIHRhcgorICAgICB0YXIuZ3oKKyAgICAgdGFyLmJ6MgorICAgICB0YXIueHoKKyAgICAgY3BpbworICAgICBjcGlvLmd6CisgICAgIGNwaW8ueHoKKyAgICAgY3Bpby5sem1hCisgICAgIHZkaQorICAgICB2bWRrCisgICAgIGVsZgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIHR5cGVzIG9mIGltYWdlcywgc2VlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMqLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOQ19QUic+PGdsb3NzdGVybT5JTkNfUFI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOQ19QUltkb2NdID0gIkhlbHBzIGRlZmluZSB0aGUgcmVjaXBlIHJldmlzaW9uIGZvciByZWNpcGVzIHRoYXQgc2hhcmUgYSBjb21tb24gaW5jbHVkZSBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEhlbHBzIGRlZmluZSB0aGUgcmVjaXBlIHJldmlzaW9uIGZvciByZWNpcGVzIHRoYXQgc2hhcmUKKyAgICAgICAgICAgICAgICAgICAgYSBjb21tb24gPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoaXMgdmFyaWFibGUgYXMgcGFydCBvZiB0aGUgcmVjaXBlIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIGFzIHNldCBmcm9tIHdpdGhpbiBhbiBpbmNsdWRlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB5b3UgaGF2ZSBhIHNldCBvZiByZWNpcGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVzZWQgYWNyb3NzIHNldmVyYWwgcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgd2l0aGluIGVhY2ggb2YgdGhvc2UgcmVjaXBlcyB0aGUgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgKGl0cyA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSkgaXMgc2V0IGFjY29yZGluZ2x5LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHdoZW4gdGhlIHJldmlzaW9uIG9mIHRob3NlIHJlY2lwZXMgY2hhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1cmRlbiBpcyBvbiB5b3UgdG8gZmluZCBhbGwgdGhvc2UgcmVjaXBlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgYmUgc3VyZSB0aGF0IHRoZXkgZ2V0IGNoYW5nZWQgdG8gcmVmbGVjdCB0aGUgdXBkYXRlZAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgc2NlbmFyaW8sIGl0IGNhbiBnZXQgY29tcGxpY2F0ZWQgd2hlbiByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIHVzZWQgaW4gbWFueSBwbGFjZXMgYW5kIHByb3ZpZGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVwZ3JhZGVkIHRvIGEgbmV3IHJldmlzaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIG1vcmUgZWZmaWNpZW50IHdheSBvZiBkZWFsaW5nIHdpdGggdGhpcyBzaXR1YXRpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2V0IHRoZSA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4gdmFyaWFibGUgaW5zaWRlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGVzIHRoYXQgdGhlIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgc2hhcmUgYW5kIHRoZW4gZXhwYW5kIHRoZSA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aGluIHRoZSByZWNpcGVzIHRvIGhlbHAKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIHRoZSByZWNpcGUgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIGNvbW1vbiA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gc2V0IHRoZSA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgZWFjaCByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IHdoZW4geW91IHNldCBhIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHlvdSBjYW4gcHJvdmlkZSBtb3JlIGdyYW51bGFyCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uaW5nIGJ5IGFwcGVuZGluZyB2YWx1ZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmM6SU5DX1BSID0gInIyIgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiOlBSID0gIiR7SU5DX1BSfS4xIgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4wLmJiOlBSID0gIiR7SU5DX1BSfS4wIgorcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhc18xLjAuMy5iYjpQUiA9ICIke0lOQ19QUn0uMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbGluZSBvZiB0aGUgZXhhbXBsZSBlc3RhYmxpc2hlcyB0aGUgYmFzZWxpbmUKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gdG8gYmUgdXNlZCBmb3IgYWxsIHJlY2lwZXMgdGhhdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlbWFpbmluZyBsaW5lcyBpbiB0aGUgZXhhbXBsZSBhcmUgZnJvbSBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgYW5kIHNob3cgaG93IHRoZSA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpcyBzZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5DT01QQVRJQkxFX0xJQ0VOU0UnPjxnbG9zc3Rlcm0+SU5DT01QQVRJQkxFX0xJQ0VOU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOQ09NUEFUSUJMRV9MSUNFTlNFW2RvY10gPSAiU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGljZW5zZSBuYW1lcyAoYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4gTElDRU5TRSkgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGljZW5zZSBuYW1lcworICAgICAgICAgICAgICAgICAgICAoYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyB0aGF0IHByb3ZpZGUgbm8gYWx0ZXJuYXRpdmVzIHRvIGxpc3RlZCBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgYXJlIG5vdCBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgdGhhdCBhcmUgaW5kaXZpZHVhbGx5IGxpY2Vuc2VkIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBpbmNvbXBhdGlibGUgbGljZW5zZXMgd2lsbCBiZSBkZWxldGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSByZWd1bGFybHkgdGVzdGVkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgc2V0dGluZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkNPTVBBVElCTEVfTElDRU5TRSA9ICJHUEwtMy4wIExHUEwtMy4wIEFHUEwtMy4wIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHlvdSBjYW4gdXNlIG90aGVyIHNldHRpbmdzLCB5b3UgbWlnaHQgYmUgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gcmVtb3ZlIGRlcGVuZGVuY2llcyBvbiBvciBwcm92aWRlIGFsdGVybmF0aXZlcyB0bworICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHByb2R1Y2UgYSBmdW5jdGlvbmFsIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhJQklUX0RFRkFVTFRfREVQUyc+PGdsb3NzdGVybT5JTkhJQklUX0RFRkFVTFRfREVQUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5ISUJJVF9ERUZBVUxUX0RFUFNbZG9jXSA9ICJQcmV2ZW50cyB0aGUgZGVmYXVsdCBkZXBlbmRlbmNpZXMsIG5hbWVseSB0aGUgQyBjb21waWxlciBhbmQgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSwgZnJvbSBiZWluZyBhZGRlZCB0byBERVBFTkRTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIHRoZSBkZWZhdWx0IGRlcGVuZGVuY2llcywgbmFtZWx5IHRoZSBDIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpLCBmcm9tIGJlaW5nIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IHVzZWQgd2l0aGluIHJlY2lwZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhbnkgY29tcGlsYXRpb24gdXNpbmcgdGhlIEMgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgdG8gIjEiIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGZyb20gYmVpbmcgYWRkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUJz48Z2xvc3N0ZXJtPklOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5ISUJJVF9QQUNLQUdFX1NUUklQW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZyb20gc3BsaXR0aW5nCisgICAgICAgICAgICAgICAgICAgIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBkdXJpbmcgcGFja2FnaW5nLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgc3lzdGVtIHNwbGl0cyBvdXQgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBzcGxpdCBvdXQsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnPjxmaWxlbmFtZT5QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBwcmV2ZW50IHRoZSBidWlsZCBzeXN0ZW0gZnJvbSBzcGxpdHRpbmcgb3V0CisgICAgICAgICAgICAgICAgICAgIGRlYnVnIGluZm9ybWF0aW9uIGR1cmluZyBwYWNrYWdpbmcsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhJQklUX1BBQ0tBR0VfU1RSSVAnPjxnbG9zc3Rlcm0+SU5ISUJJVF9QQUNLQUdFX1NUUklQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVBbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSEVSSVQnPjxnbG9zc3Rlcm0+SU5IRVJJVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5IRVJJVFtkb2NdID0gIkNhdXNlcyB0aGUgbmFtZWQgY2xhc3MgdG8gYmUgaW5oZXJpdGVkIGF0IHRoaXMgcG9pbnQgZHVyaW5nIHBhcnNpbmcuIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHZhbGlkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhFUklUX0RJU1RSTyc+PGdsb3NzdGVybT5JTkhFUklUX0RJU1RSTzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5IRVJJVF9ESVNUUk9bZG9jXSA9ICJMaXN0cyBjbGFzc2VzIHRoYXQgd2lsbCBiZSBpbmhlcml0ZWQgYXQgdGhlIGRpc3RyaWJ1dGlvbiBsZXZlbC4gSXQgaXMgdW5saWtlbHkgdGhhdCB5b3Ugd2FudCB0byBlZGl0IHRoaXMgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgY2xhc3NlcyB0aGF0IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gbGV2ZWwuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdhbnQgdG8gZWRpdCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgaXMgc2V0IGFzIGZvbGxvd3MgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUX0RJU1RSTyA/PSAiZGViaWFuIGRldnNoZWxsIHNzdGF0ZSBsaWNlbnNlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJBTUZTX0ZTVFlQRVMnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0ZTVFlQRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSQU1GU19GU1RZUEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgZm9ybWF0IGZvciB0aGUgb3V0cHV0IGltYWdlIG9mIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcyksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIGJvb3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZm9ybWF0IGZvciB0aGUgb3V0cHV0IGltYWdlIG9mIGFuIGluaXRpYWwKKyAgICAgICAgICAgICAgICAgICAgUkFNIGRpc2sgKGluaXRyYW1mcyksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBzdXBwb3J0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUUkFNRlNfSU1BR0UnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0lNQUdFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUUkFNRlNfSU1BR0VbZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYW4gYWRkaXRpb25hbCByZWNpcGUgYXMgYSBkZXBlbmRlbmN5IHRvIHlvdXIgcm9vdCBmaWxlc3lzdGVtIHJlY2lwZSAoZS5nLiBjb3JlLWltYWdlLXNhdG8pLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCBhbiBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciByb290IGZpbGVzeXN0ZW0gcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhZGRpdGlvbmFsIHJlY2lwZSBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBpbml0aWFsIFJBTSBkaXNrCisgICAgICAgICAgICAgICAgICAgIChpbml0cmFtZnMpIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbCBib290IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIHRvIGFjY29tcGxpc2ggc3VjaCB0aGluZ3MgYXMgbG9hZGluZworICAgICAgICAgICAgICAgICAgICBrZXJuZWwgbW9kdWxlcyBwcmlvciB0byBtb3VudGluZyB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHRoZSB2YXJpYWJsZSwgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIHlvdSB3YW50IGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2hpY2ggaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSwgY2F1c2VzCisgICAgICAgICAgICAgICAgICAgIGEgc2VwYXJhdGUgcmVjaXBlIHRvIGJlIGNyZWF0ZWQgdGhhdCByZXN1bHRzIGluIGFuCisgICAgICAgICAgICAgICAgICAgIGluaXRyYW1mcyBpbWFnZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvLWluaXRyYW1mcy5iYjwvZmlsZW5hbWU+IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+PGZpbGVuYW1lPmtlcm5lbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBzZXRzIHRoaXMgdmFyaWFibGUgdG8gYSBudWxsIHN0cmluZyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSVRSQU1GU19JTUFHRSA9ICIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L3RyZWUvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkJz48ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyByZWZlcmVuY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MnPjxmaWxlbmFtZT5rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSB0byBzZWUgaG93IHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSQU1GU19JTUFHRV9CVU5ETEUnPjxnbG9zc3Rlcm0+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRVtkb2NdID0gIkNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSByZWNpcGUgc3BlY2lmaWVkIGJ5IElOSVRSQU1GU19JTUFHRSBpcyBydW4gdGhyb3VnaCBhbiBleHRyYSBwYXNzIGR1cmluZyBrZXJuZWwgY29tcGlsYXRpb24gaW4gb3JkZXIgdG8gYnVpbGQgYSBzaW5nbGUgYmluYXJ5IHRoYXQgY29udGFpbnMgYm90aCB0aGUga2VybmVsIGltYWdlIGFuZCB0aGUgaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB3aGV0aGVyIG9yIG5vdCB0aGUgaW1hZ2UgcmVjaXBlIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5JVFJBTUZTX0lNQUdFJz48ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHJ1biB0aHJvdWdoIGFuIGV4dHJhIHBhc3MgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBidWlsZCBhIHNpbmdsZSBiaW5hcnkgdGhhdCBjb250YWlucyBib3RoIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgaW1hZ2UgYW5kIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpLgorICAgICAgICAgICAgICAgICAgICBVc2luZyBhbiBleHRyYSBjb21waWxhdGlvbiBwYXNzIGVuc3VyZXMgdGhhdCB3aGVuIGEga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRzIHRvIHVzZSBhbiBpbml0cmFtZnMsIGl0IGRvZXMgbm90IGVuY291bnRlcgorICAgICAgICAgICAgICAgICAgICBjaXJjdWxhciBkZXBlbmRlbmNpZXMgc2hvdWxkIHRoZSBpbml0cmFtZnMgaW5jbHVkZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbWJpbmVkIGJpbmFyeSBpcyBkZXBvc2l0ZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHdoaWNoIGlzIHBhcnQKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIHZhcmlhYmxlIHRvICIxIiBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gbWFrZSB0aGUgZXh0cmEgcGFzcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGNvbXBpbGF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSVRSQU1GU19JTUFHRV9CVU5ETEUgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz48ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhpcyB2YXJpYWJsZSB0byBhIG51bGwgc3RyaW5nIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA9ICIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5JVFJBTUZTX0lNQUdFX0JVTkRMRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluCisgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3Qgc2V0IHRoZSB2YXJpYWJsZSBpbiBhIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZCc+PGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSRCc+PGdsb3NzdGVybT5JTklUUkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSRFtkb2NdID0gIkluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmQpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgYXMgYW4gaW5pdGlhbCBSQU0gZGlzayAoPGZpbGVuYW1lPmluaXRyZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBhbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPjxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSRF9JTUFHRSc+PGdsb3NzdGVybT5JTklUUkRfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSRF9JTUFHRVtkb2NdID0gIldoZW4gYnVpbGRpbmcgYSAibGl2ZSIgYm9vdGFibGUgaW1hZ2UgKGkuZS4gd2hlbiBJTUFHRV9GU1RZUEVTIGNvbnRhaW5zICJsaXZlIiksIElOSVRSRF9JTUFHRSBzcGVjaWZpZXMgdGhlIGltYWdlIHJlY2lwZSB0aGF0IHNob3VsZCBiZSBidWlsdCB0byBwcm92aWRlIHRoZSBpbml0aWFsIFJBTSBkaXNrIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYSAibGl2ZSIgYm9vdGFibGUgaW1hZ2UgKGkuZS4gd2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgImxpdmUiKSwgPGZpbGVuYW1lPklOSVRSRF9JTUFHRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgaW1hZ2UgcmVjaXBlIHRoYXQgc2hvdWxkIGJlIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgUkFNIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICJjb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZS1saXZlJz48ZmlsZW5hbWU+aW1hZ2UtbGl2ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUU0NSSVBUX05BTUUnPjxnbG9zc3Rlcm0+SU5JVFNDUklQVF9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUU0NSSVBUX05BTUVbZG9jXSA9ICJUaGUgZmlsZW5hbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdCBhcyBpbnN0YWxsZWQgdG8gJHtzeXNjb25mZGlyfS9pbml0LmQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQgYXMgaW5zdGFsbGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke3N5c2NvbmZkaXJ9L2luaXQuZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIDxmaWxlbmFtZT51cGRhdGUtcmMuZC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBtYW5kYXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFNDUklQVF9QQUNLQUdFUyc+PGdsb3NzdGVybT5JTklUU0NSSVBUX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUU0NSSVBUX1BBQ0tBR0VTW2RvY10gPSAiQSBsaXN0IG9mIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gaW5pdHNjcmlwdHMuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiByZWNpcGVzIHdoZW4gdXNpbmcgdXBkYXRlLXJjLmQuYmJjbGFzcy4gVGhlIHZhcmlhYmxlIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byB0aGUgUE4gdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gaW5pdHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIElmIG11bHRpcGxlIHBhY2thZ2VzIGFyZSBzcGVjaWZpZWQsIHlvdSBuZWVkIHRvIGFwcGVuZCB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBvdGhlciA8ZmlsZW5hbWU+SU5JVFNDUklQVF8qPC9maWxlbmFtZT4gYXMgYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRTQ1JJUFRfUEFSQU1TJz48Z2xvc3N0ZXJtPklOSVRTQ1JJUFRfUEFSQU1TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUU0NSSVBUX1BBUkFNU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIHVwZGF0ZS1yYy5kLiBUaGUgdmFyaWFibGUgaXMgbWFuZGF0b3J5IGFuZCBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIDxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAyMCAwIDEgNiAuIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIHNjcmlwdCBoYXMgYSBydW5sZXZlbCBvZiA5OSwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRzIHRoZSBzY3JpcHQgaW4gaW5pdGxldmVscyAyIGFuZCA1LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgc3RvcHMgdGhlIHNjcmlwdCBpbiBsZXZlbHMgMCwgMSBhbmQgNi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZSBpcyAiZGVmYXVsdHMiLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz48ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5JVFNDUklQVF9QQVJBTVM8L2ZpbGVuYW1lPiBpcyBwYXNzZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdmFsaWQgcGFyYW1ldGVycywgcGxlYXNlIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4gbWFudWFsIHBhZ2UgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy50aW4ub3JnL2Jpbi9tYW4uY2dpP3NlY3Rpb249OCZhbXA7dG9waWM9dXBkYXRlLXJjLmQnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOU0FORV9TS0lQJz48Z2xvc3N0ZXJtPklOU0FORV9TS0lQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTlNBTkVfU0tJUFtkb2NdID0gIlNwZWNpZmllcyB0aGUgUUEgY2hlY2tzIHRvIHNraXAgZm9yIGEgc3BlY2lmaWMgcGFja2FnZSB3aXRoaW4gYSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBRQSBjaGVja3MgdG8gc2tpcCBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHNraXAgdGhlIGNoZWNrIGZvciBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUgbWFpbiBwYWNrYWdlIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCBhZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBuYW1lIG92ZXJyaWRlIG11c3QgYmUgdXNlZCwgd2hpY2ggaW4gdGhpcworICAgICAgICAgICAgICAgICAgICBleGFtcGxlIGlzIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGEgbGlzdCBvZiB0aGUgdmFsaWQgUUEgY2hlY2tzIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB1c2luZyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlQS19GRUVEX1VSSVMnPjxnbG9zc3Rlcm0+SVBLX0ZFRURfVVJJUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSVBLX0ZFRURfVVJJU1tkb2NdID0gIkxpc3Qgb2YgaXBrZyBmZWVkIHJlY29yZHMgdG8gcHV0IGludG8gZ2VuZXJhdGVkIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIElQSyBiYWNrZW5kIGlzIGluIHVzZSBhbmQgcGFja2FnZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIGlzIGVuYWJsZWQgb24gdGhlIHRhcmdldCwgeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICBzZXQgdXAgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiBpbiB0aGUgdGFyZ2V0IGltYWdlCisgICAgICAgICAgICAgICAgICAgIHRvIHBvaW50IHRvIHBhY2thZ2UgZmVlZHMgb24gYSBub21pbmF0ZWQgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBmZWVkIGlzIGVzdGFibGlzaGVkLCB5b3UgY2FuIHBlcmZvcm0KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9ucyBvciB1cGdyYWRlcyB1c2luZyB0aGUgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgICAgIGF0IHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCis8IS0tCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5URVJDRVBUX0RJUic+PGdsb3NzdGVybT5JTlRFUkNFUFRfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgZGlyZWN0b3J5IHdoZXJlCisgICAgICAgICAgICAgICAgICAgIHBvc3QgaW5zdGFsbGF0aW9uIGhvb2tzIGFyZSBpbnN0YWxsZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBwb3N0IGluc3RhbGwgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZml4ZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9L2ludGVyY2VwdF9zY3JpcHRzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgdGFyZ2V0J3Mgcm9vdCBmaWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICBwb3N0IGluc3RhbGxhdGlvbiBzY3JpcHRzLCB3aGljaCBhcmUgZXNzZW50aWFsbHkgYmFzaCBzY3JpcHRzLAorICAgICAgICAgICAgICAgICAgICBhcmUgYWxsIGV4ZWN1dGVkIGp1c3QgYSBzaW5nbGUgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgTGltaXRpbmcgZXhlY3V0aW9uIG9mIHRoZXNlIHNjcmlwdHMgbWluaW1pemVzIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICB0aW1lIHRoYXQgd291bGQgYmUgbGVuZ3RoZW5lZCBkdWUgdG8gIGNlcnRhaW4gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmluZyByZWR1bmRhbnQgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBpbnN0YWxsYXRpb24gb2YgZm9udCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhcyBhIGNvbW1vbiBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICBXaXRob3V0IGxpbWl0aW5nIHRoZSBleGVjdXRpb24gb2YgcG9zdCBpbnN0YWxsYXRpb24gc2NyaXB0cywKKyAgICAgICAgICAgICAgICAgICAgYWxsIGZvbnQgZGlyZWN0b3JpZXMgd291bGQgYmUgcmVzY2FubmVkIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUgYWZ0ZXIgZWFjaCBpbmRpdmlkdWFsIGZvbnQgcGFja2FnZSB3YXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgZWRpdCB0aGUgPGZpbGVuYW1lPklOVEVSQ0VQVF9ESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CistLT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0gICAgICAgICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1qJz48dGl0bGU+SjwvdGl0bGU+LS0+Cis8IS0tICAgICAgICAgICAgPC9nbG9zc2Rpdj4tLT4KKworICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktayc+PHRpdGxlPks8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0FSQ0gnPjxnbG9zc3Rlcm0+S0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtBUkNIW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4gWW91IGRlZmluZSB0aGUgS0FSQ0ggdmFyaWFibGUgaW4gdGhlIEJTUCBEZXNjcmlwdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYXNzZW1ibGluZworICAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgZm9yIHRoaXMgcmVsZWFzZSBhcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG93ZXJwYworICAgICBpMzg2CisgICAgIHg4Nl82NAorICAgICBhcm0KKyAgICAgcWVtdQorICAgICBtaXBzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGUgPGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0JSQU5DSCc+PGdsb3NzdGVybT5LQlJBTkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLQlJBTkNIW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBleHBsaWNpdGx5IGlkZW50aWZ5IHRoZSBrZXJuZWwgYnJhbmNoIHRoYXQgaXMgdmFsaWRhdGVkLCBwYXRjaGVkIGFuZCBjb25maWd1cmVkIGR1cmluZyBhIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gZXhwbGljaXRseQorICAgICAgICAgICAgICAgICAgICBpZGVudGlmeSB0aGUga2VybmVsIGJyYW5jaCB0aGF0IGlzIHZhbGlkYXRlZCwgcGF0Y2hlZCwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZWQgZHVyaW5nIGEgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGUgZXhhY3Qga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCB5b3Ugd2FudCBpcyBiZWluZyB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgZm9yIHRoaXMgdmFyaWFibGUgYXJlIHNldCBpbiB0aGUga2VybmVsJ3MgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTQga2VybmVsLCB0aGUga2VybmVsIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgICAgIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgZm9yIGEga2VybmVsIHJlY2lwZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbHNvIHVzZWQgZnJvbSB0aGUga2VybmVsJ3MgYXBwZW5kIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgdG8gaWRlbnRpZnkgdGhlIGtlcm5lbCBicmFuY2ggc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgb3IgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUga2VybmVsJ3MgYXBwZW5kIGZpbGUgaXMgbG9jYXRlZCBpbiB0aGUgQlNQIGxheWVyIGZvcgorICAgICAgICAgICAgICAgICAgICBhIGdpdmVuIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUga2VybmVsIGFwcGVuZCBmaWxlIGZvciB0aGUgRW1lbmxvdyBCU1AgaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgYW5kIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgcmVsYXRlZCBzdGF0ZW1lbnRzIGZyb20gdGhlIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTVBBVElCTEVfTUFDSElORV9lbWVubG93LW5vZW1nZCA9ICJlbWVubG93LW5vZW1nZCIKKyAgICAgS01BQ0hJTkVfZW1lbmxvdy1ub2VtZ2QgPSAiZW1lbmxvdyIKKyAgICAgS0JSQU5DSF9lbWVubG93LW5vZW1nZCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX2VtZW5sb3ctbm9lbWdkID0gIiBmZWF0dXJlcy9kcm0tZ21hNTAwL2RybS1nbWE1MDAuc2NjIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgaWRlbnRpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBicmFuY2ggdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBFbWVubG93CisgICAgICAgICAgICAgICAgICAgICAgICBCU1AuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0JVSUxEX0RFRkNPTkZJRyc+PGdsb3NzdGVybT5LQlVJTERfREVGQ09ORklHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLQlVJTERfREVGQ09ORklHW2RvY10gPSAiU3BlY2lmaWVzIGFuICJpbi10cmVlIiBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB1c2UgZHVyaW5nIGEga2VybmVsIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwteW9jdG8nPjxmaWxlbmFtZT5rZXJuZWwteW9jdG88L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHNwZWNpZmllcyBhbiAiaW4tdHJlZSIga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICBmb3IgdXNlIGR1cmluZyBhIGtlcm5lbCBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB3aGVuIHVzaW5nIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBhIGtlcm5lbCBkdXJpbmcgYSBidWlsZCwgeW91IHBsYWNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHlvdXIgbGF5ZXIgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHlvdSB3b3VsZAorICAgICAgICAgICAgICAgICAgICBwYXRjaCBmaWxlcyBhbmQgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAib3V0LW9mLXRyZWUiKS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IHdhbnQgdG8gdXNlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgdHJlZSAoaS5lLiAiaW4tdHJlZSIpLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktCVUlMRF9ERUZDT05GSUc8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBwb2ludAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgdmFyaWFibGUsIHNldCBpdCBpbiB0aGUgYXBwZW5kIGZpbGUgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JVSUxEX0RFRkNPTkZJR188bGluayBsaW5rZW5kPSd2YXItS01BQ0hJTkUnPktNQUNISU5FPC9saW5rPiA/PSA8cmVwbGFjZWFibGU+ZGVmY29uZmlnX2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGEgInJhc3BiZXJyeXBpMiIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gYnVpbGQgdGhhdCB1c2VzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgImJjbTI3MDlfZGVmY29uZmlnIjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlVJTERfREVGQ09ORklHX3Jhc3BiZXJyeXBpMiA9ICJiY20yNzA5X2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBhbHRlcm5hdGl2ZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB3aXRoaW4geW91cgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlVJTERfREVGQ09ORklHX3BuLWxpbnV4LXlvY3RvID89IDxyZXBsYWNlYWJsZT5kZWZjb25maWdfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktCVUlMRF9ERUZDT05GSUc8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I3VzaW5nLWFuLWluLXRyZWUtZGVmY29uZmlnLWZpbGUnPlVzaW5nIGFuICJJbi1UcmVlIiA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gRmlsZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9DTEFTU0VTJz48Z2xvc3N0ZXJtPktFUk5FTF9DTEFTU0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIGRlZmluaW5nIGtlcm5lbCBpbWFnZSB0eXBlcyB0aGF0IGtlcm5lbCBjbGFzcyBzaG91bGQgaW5oZXJpdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY2xhc3NlcyBkZWZpbmluZyBrZXJuZWwgaW1hZ2UgdHlwZXMgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz48ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNob3VsZCBpbmhlcml0LgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IGFwcGVuZCB0aGlzIHZhcmlhYmxlIHRvIGVuYWJsZSBleHRlbmRlZCBpbWFnZQorICAgICAgICAgICAgICAgICAgICB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBpcyB0aGUgImtlcm5lbC1maXRpbWFnZSIsIHdoaWNoIGVuYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgZml0SW1hZ2Ugc3VwcG9ydCBhbmQgcmVzaWRlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVnaXN0ZXIgY3VzdG9tIGtlcm5lbCBpbWFnZSB0eXBlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT4gY2xhc3MgdXNpbmcgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfRVhUUkFfQVJHUyc+PGdsb3NzdGVybT5LRVJORUxfRVhUUkFfQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX0VYVFJBX0FSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBtYWtlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGFzc2VzIG9uIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHBhc3NlcyBvbiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9GRUFUVVJFUyc+PGdsb3NzdGVybT5LRVJORUxfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9GRUFUVVJFU1tkb2NdID0gIkluY2x1ZGVzIGFkZGl0aW9uYWwgbWV0YWRhdGEgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkuIFRoZSBtZXRhZGF0YSB5b3UgYWRkIHRocm91Z2ggdGhpcyB2YXJpYWJsZSBpbmNsdWRlcyBjb25maWcgZnJhZ21lbnRzIGFuZCBmZWF0dXJlcyBkZXNjcmlwdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHRoZSBkZWZhdWx0IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHByb3ZpZGVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItS0JSQU5DSCc+PGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGZ1cnRoZXIKKyAgICAgICAgICAgICAgICAgICAgYWRkIG1ldGFkYXRhIGZvciBhbGwgQlNQcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIGRlc2NyaXB0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggdXN1YWxseSBpbmNsdWRlcyBwYXRjaGVzIGFzIHdlbGwgYXMgY29uZmlnIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgWW91IHR5cGljYWxseSBvdmVycmlkZSB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGZvciBhIHNwZWNpZmljIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgd2F5LCB5b3UgY2FuIHByb3ZpZGUgdmFsaWRhdGVkLCBidXQgb3B0aW9uYWwsIHNldHMgb2Yga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFuZCBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgYWRkcyA8ZmlsZW5hbWU+bmV0ZmlsdGVyPC9maWxlbmFtZT4gdG8gYWxsCisgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbHMgYW5kIGFkZHMgc291bmQgc3VwcG9ydCB0byB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgQWRkIG5ldGZpbHRlciB0byBhbGwgbGludXgteW9jdG8ga2VybmVscworICAgICBLRVJORUxfRkVBVFVSRVM9ImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorCisgICAgICMgQWRkIHNvdW5kIHN1cHBvcnQgdG8gdGhlIHFlbXV4ODYgbWFjaGluZQorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSc+PGdsb3NzdGVybT5LRVJORUxfSU1BR0VfQkFTRV9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfSU1BR0VfQkFTRV9OQU1FW2RvY10gPSAiVGhlIGJhc2UgbmFtZSBvZiB0aGUga2VybmVsIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+a2VybmVsPC9saW5rPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9JTUFHRV9CQVNFX05BTUUgPz0gIiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfSU1BR0VUWVBFJz48ZmlsZW5hbWU+S0VSTkVMX0lNQUdFVFlQRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0UnPjxmaWxlbmFtZT5QS0dFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHVic+PGZpbGVuYW1lPlBLR1Y8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dSJz48ZmlsZW5hbWU+UEtHUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURBVEVUSU1FJz48ZmlsZW5hbWU+REFURVRJTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9JTUFHRV9NQVhTSVpFJz48Z2xvc3N0ZXJtPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfSU1BR0VfTUFYU0laRVtkb2NdID0gIlRoZSBtYXhpbXVtIGFsbG93YWJsZSBzaXplIGluIGtpbG9ieXRlcyBvZiB0aGUga2VybmVsIGltYWdlIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGtlcm5lbCBpbWFnZSBmaWxlIGluCisgICAgICAgICAgICAgICAgICAgIGtpbG9ieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9maWxlbmFtZT4gaXMgc2V0LAorICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGZpbGUgaXMgY2hlY2tlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIHRoZSBzZXQgdmFsdWUgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtc2l6ZWNoZWNrJz48ZmlsZW5hbWU+ZG9fc2l6ZWNoZWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGZhaWxzIGlmIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSBpcyBsYXJnZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICB0aGUgc2V0dGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9JTUFHRV9NQVhTSVpFPC9maWxlbmFtZT4gaXMgdXNlZnVsIGZvcgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGV2aWNlcyB0aGF0IGhhdmUgYSBsaW1pdGVkIGFtb3VudCBvZiBzcGFjZSBpbgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUga2VybmVsIGltYWdlIG11c3QgYmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzZXQsIHdoaWNoIG1lYW5zIHRoZQorICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgaXMgbm90IGNoZWNrZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0lNQUdFVFlQRSc+PGdsb3NzdGVybT5LRVJORUxfSU1BR0VUWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfSU1BR0VUWVBFW2RvY10gPSAiVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGZvciBhIGRldmljZSwgdXN1YWxseSBzZXQgYnkgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZGVmYXVsdHMgdG8gJ3pJbWFnZScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGZvciBhIGRldmljZSwgdXN1YWxseSBzZXQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZGVmYXVsdHMgdG8gInpJbWFnZSIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIHRoZSBrZXJuZWwgYW5kIGlzIHBhc3NlZCB0byA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGFzIHRoZSB0YXJnZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX01PRFVMRV9BVVRPTE9BRCc+PGdsb3NzdGVybT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfTU9EVUxFX0FVVE9MT0FEW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGF1dG8tbG9hZGVkIGR1cmluZyBib290IgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGF1dG8tbG9hZGVkIGR1cmluZworICAgICAgICAgICAgICAgICAgICBib290LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcmVwbGFjZXMgdGhlIGRlcHJlY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1tb2R1bGVfYXV0b2xvYWQnPjxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFueXdoZXJlIHRoYXQgaXQgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGtlcm5lbCByZWNpcGUgb3IgYnkgYW4gb3V0LW9mLXRyZWUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSByZWNpcGUgKGUuZy4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSwgYQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLCBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSwgb3IgdGhlIHJlY2lwZSBpdHNlbGYpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IGl0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAiPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lMTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+bW9kdWxlX25hbWUzPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkaW5nIDxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT4gY2F1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9tb2R1bGVzLWxvYWQuZC9tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHdpdGggdGhlIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBhdXRvLWxvYWRlZCBvbiBib290LgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlcyBhcHBlYXIgb25lLXBlci1saW5lIGluIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgKz0gIjxyZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHByb2JlLmQ8L2ZpbGVuYW1lPiBzeW50YXggbGluZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfUFJPQkVDT05GJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxnbG9zc3Rlcm0+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9NT0RVTEVfUFJPQkVDT05GW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgZm9yIHdoaWNoIHRoZSBidWlsZCBzeXN0ZW0gZXhwZWN0cyB0byBmaW5kIG1vZHVsZV9jb25mXyogdmFsdWVzIHRoYXQgc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBlYWNoIG9mIHRoZSBtb2R1bGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGlzdCBvZiBtb2R1bGVzIGZvciB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBleHBlY3RzIHRvIGZpbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHVsZV9jb25mXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1vZG5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgdGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggb2YgdGhlIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcHJvdmlkZSB0aG9zZSBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLW1vZHVsZV9jb25mJz48ZmlsZW5hbWU+bW9kdWxlX2NvbmZfKjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfUEFUSCc+PGdsb3NzdGVybT5LRVJORUxfUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+PGZpbGVuYW1lPlNUQUdJTkdfS0VSTkVMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1vZHVsZSc+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNpbmNvcnBvcmF0aW5nLW91dC1vZi10cmVlLW1vZHVsZXMnPkluY29ycG9yYXRpbmcgT3V0LW9mLVRyZWUgTW9kdWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBoZWxwIG1heGltaXplIGNvbXBhdGliaWxpdHkgd2l0aCBvdXQtb2YtdHJlZSBkcml2ZXJzCisgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgbW9kdWxlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWxzbworICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVzIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX1NSQyc+PGZpbGVuYW1lPktFUk5FTF9TUkM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEJvdGggdmFyaWFibGVzIGFyZSBjb21tb24gdmFyaWFibGVzIHVzZWQgYnkgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzIHRvIHBvaW50IHRvIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfU1JDJz48Z2xvc3N0ZXJtPktFUk5FTF9TUkM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9TUkNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+PGZpbGVuYW1lPlNUQUdJTkdfS0VSTkVMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1vZHVsZSc+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNpbmNvcnBvcmF0aW5nLW91dC1vZi10cmVlLW1vZHVsZXMnPkluY29ycG9yYXRpbmcgT3V0LW9mLVRyZWUgTW9kdWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBoZWxwIG1heGltaXplIGNvbXBhdGliaWxpdHkgd2l0aCBvdXQtb2YtdHJlZSBkcml2ZXJzCisgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgbW9kdWxlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWxzbworICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVzIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX1BBVEgnPjxmaWxlbmFtZT5LRVJORUxfUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBCb3RoIHZhcmlhYmxlcyBhcmUgY29tbW9uIHZhcmlhYmxlcyB1c2VkIGJ5IGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgIE1ha2VmaWxlcyB0byBwb2ludCB0byB0aGUga2VybmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0ZFQVRVUkVfREVTQ1JJUFRJT04nPjxnbG9zc3Rlcm0+S0ZFQVRVUkVfREVTQ1JJUFRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtGRUFUVVJFX0RFU0NSSVBUSU9OW2RvY10gPSAiUHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLnNjYyBmaWxlIHRoYXQgZGVzY3JpYmVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoaXMgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSB0aGF0IGRlc2NyaWJlcyBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgdmFyaWFibGUgdXNlZCBpbiBhIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtcC5zY2M8L2ZpbGVuYW1lPiB0byBkZXNjcmliZSBTTVAgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBTTVAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LTUFDSElORSc+PGdsb3NzdGVybT5LTUFDSElORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS01BQ0hJTkVbZG9jXSA9ICJUaGUgbWFjaGluZSBhcyBrbm93biBieSB0aGUga2VybmVsLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWNoaW5lIGFzIGtub3duIGJ5IHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIGtlcm5lbCBkb2VzIG5vdAorICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgbWFjaGluZSBuYW1lIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdW5kZXJzdGFuZHMgYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUyLTMyLWludGVsLWNvbW1vbjwvZmlsZW5hbWU+IGdvZXMgYnkgYQorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgbmFtZSBpbiB0aGUgTGludXggWW9jdG8ga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBUaGUga2VybmVsIHVuZGVyc3RhbmRzIHRoYXQgbWFjaGluZSBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW50ZWwtY29yZTItMzI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNhc2VzIGxpa2UgdGhlc2UsIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBtYXBzIHRoZSBrZXJuZWwgbWFjaGluZSBuYW1lIHRvIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIG1hY2hpbmUgbmFtZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbWFwcGluZ3MgYmV0d2VlbiBkaWZmZXJlbnQgbmFtZXMgb2NjdXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIExpbnV4IEtlcm5lbCdzIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlIHRha2UgYSBsb29rIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJTlVYX1ZFUlNJT05fY29yZTItMzItaW50ZWwtY29tbW9uID0gIjMuMTkuMCIKKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICIke01BQ0hJTkV9IgorICAgICBTUkNSRVZfbWV0YV9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiODg5N2VmNjhiMzBlNzQyNmJjMWQzOTg5NWU3MWZiMTU1ZDY5NDk3NCIKKyAgICAgU1JDUkVWX21hY2hpbmVfY29yZTItMzItaW50ZWwtY29tbW9uID0gIjQzYjllY2VkOWJhOGE1N2FkZDM2YWYwNzczNjM0NGRjYzM4M2Y3MTEiCisgICAgIEtNQUNISU5FX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICJpbnRlbC1jb3JlMi0zMiIKKyAgICAgS0JSQU5DSF9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAic3RhbmRhcmQvYmFzZSIKKyAgICAgS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiJHtLRVJORUxfRkVBVFVSRVNfSU5URUxfQ09NTU9OfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gc3RhdGVtZW50IHNheXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIHVuZGVyc3RhbmRzIHRoZSBtYWNoaW5lIG5hbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgImludGVsLWNvcmUyLTMyIi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdW5kZXJzdGFuZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYXMgImNvcmUyLTMyLWludGVsLWNvbW1vbiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LVFlQRSc+PGdsb3NzdGVybT5LVFlQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS1RZUEVbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGludXgteW9jdG8gcmVjaXBlcyBkZWZpbmUgInN0YW5kYXJkIiwgInRpbnkiLAorICAgICAgICAgICAgICAgICAgICBhbmQgInByZWVtcHQtcnQiIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2tlcm5lbC10eXBlcyc+S2VybmVsIFR5cGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgdGhlIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgeW91IHVzZSBtdXN0IG1hdGNoIHRoZSB2YWx1ZSB1c2VkIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgdXNlZCBieSB0aGUga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbCc+PHRpdGxlPkw8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFCRUxTJz48Z2xvc3N0ZXJtPkxBQkVMUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFCRUxTW2RvY10gPSAiUHJvdmlkZXMgYSBsaXN0IG9mIHRhcmdldHMgZm9yIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGlzdCBvZiB0YXJnZXRzIGZvciBhdXRvbWF0aWMgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ncnViLWVmaSc+PGZpbGVuYW1lPmdydWItZWZpPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJERVBFTkRTJz48Z2xvc3N0ZXJtPkxBWUVSREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFZRVJERVBFTkRTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycywgc2VwYXJhdGVkIGJ5IHNwYWNlcywgdXBvbiB3aGljaCB0aGlzIHJlY2lwZSBkZXBlbmRzLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBsYXllcnMgdGhhdCB0aGlzIHJlY2lwZSBkZXBlbmRzIHVwb24sIHNlcGFyYXRlZCBieSBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSBhIHNwZWNpZmljIGxheWVyIHZlcnNpb24gZm9yIGEgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICBieSBhZGRpbmcgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGF5ZXIgbmFtZSB3aXRoIGEgY29sb24sIChlLmcuICJhbm90aGVybGF5ZXI6MyIKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgY29tcGFyZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJWRVJTSU9OJz48ZmlsZW5hbWU+TEFZRVJWRVJTSU9OPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPl9hbm90aGVybGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UpLgorICAgICAgICAgICAgICAgICAgICBBbiBlcnJvciB3aWxsIGJlIHByb2R1Y2VkIGlmIGFueSBkZXBlbmRlbmN5IGlzIG1pc3Npbmcgb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZlcnNpb24gbnVtYmVycyBkbyBub3QgbWF0Y2ggZXhhY3RseSAoaWYgc3BlY2lmaWVkKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TEFZRVJERVBFTkRTX215bGF5ZXI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJESVInPjxnbG9zc3Rlcm0+TEFZRVJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExBWUVSRElSW2RvY10gPSAiV2hlbiB1c2VkIGluc2lkZSB0aGUgbGF5ZXIuY29uZiBjb25maWd1cmF0aW9uIGZpbGUsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIGluc2lkZSB0aGUgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZSBvdXRzaWRlIG9mIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlZmVyZW5jZXMgYXJlIGV4cGFuZGVkIGltbWVkaWF0ZWx5IHdoZW4gcGFyc2luZyBvZiB0aGUgZmlsZSBjb21wbGV0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJWRVJTSU9OJz48Z2xvc3N0ZXJtPkxBWUVSVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFZRVJWRVJTSU9OW2RvY10gPSAiT3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPjxmaWxlbmFtZT5MQVlFUkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFub3RoZXIgbGF5ZXIgaW4gb3JkZXIgdG8gZGVwZW5kIG9uIGEgc3BlY2lmaWMgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxBWUVSVkVSU0lPTl9teWxheWVyPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxEJz48Z2xvc3N0ZXJtPkxEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMRFtkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgbGlua2VyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGlua2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxERkxBR1MnPjxnbG9zc3Rlcm0+TERGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTERGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGV4cG9ydGVkIHRvIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aHVzIG1hZGUgdmlzaWJsZSB0byB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBzdGVwLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIGZvciA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0xERkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfTERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfTERGTEFHUyc+PGZpbGVuYW1lPkJVSUxEX0xERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEU0RLX0xERkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgYW4gU0RLIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEVBRF9TT05BTUUnPjxnbG9zc3Rlcm0+TEVBRF9TT05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExFQURfU09OQU1FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsZWFkIChvciBwcmltYXJ5KSBjb21waWxlZCBsaWJyYXJ5IGZpbGUgKC5zbykgdGhhdCB0aGUgZGViaWFuIGNsYXNzIGFwcGxpZXMgaXRzIG5hbWluZyBwb2xpY3kgdG8gZ2l2ZW4gYSByZWNpcGUgdGhhdCBwYWNrYWdlcyBtdWx0aXBsZSBsaWJyYXJpZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsZWFkIChvciBwcmltYXJ5KSBjb21waWxlZCBsaWJyYXJ5IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPikgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGViaWFuJz48ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFwcGxpZXMgaXRzIG5hbWluZyBwb2xpY3kgdG8gZ2l2ZW4gYSByZWNpcGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBtdWx0aXBsZSBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPjxnbG9zc3Rlcm0+TElDX0ZJTEVTX0NIS1NVTTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElDX0ZJTEVTX0NIS1NVTVtkb2NdID0gIkNoZWNrc3VtcyBvZiB0aGUgbGljZW5zZSB0ZXh0IGluIHRoZSByZWNpcGUgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHJlY2lwZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0cmFja3MgY2hhbmdlcyBpbiBsaWNlbnNlIHRleHQgb2YgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBjb2RlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbGljZW5zZSB0ZXh0IGlzIGNoYW5nZWQsIGl0IHdpbGwgdHJpZ2dlciBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUsIHdoaWNoIGdpdmVzIHRoZSBkZXZlbG9wZXIgYW4gb3Bwb3J0dW5pdHkgdG8gcmV2aWV3IGFueQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBtdXN0IGJlIGRlZmluZWQgZm9yIGFsbCByZWNpcGVzICh1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiQ0xPU0VEIikuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSc+CisgICAgICAgICAgICAgICAgICAgIFRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRSc+PGdsb3NzdGVybT5MSUNFTlNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFW2RvY10gPSAiVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLiBUaGUgbG9naWNhbCBvcGVyYXRvcnMgJmFtcDssICd8JywgYW5kIHBhcmVudGhlc2VzIGNhbiBiZSB1c2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHJ1bGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCB1c2Ugc3BhY2VzIHdpdGhpbiBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXBhcmF0ZSBsaWNlbnNlIG5hbWVzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAocGlwZSkgd2hlbiB0aGVyZSBpcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wOyAoYW1wZXJzYW5kKSB3aGVuIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIHVzZSBzcGFjZXMgYmV0d2VlbiBsaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIHN0YW5kYXJkIGxpY2Vuc2VzLCB1c2UgdGhlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNQRFhMSUNFTlNFTUFQJz48ZmlsZW5hbWU+U1BEWExJQ0VOU0VNQVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIG5hbWVzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2xpY2Vuc2VzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJMR1BMdjIuMSB8IEdQTHYzIgorICAgICBMSUNFTlNFID0gIk1QTC0xICZhbXA7IExHUEx2Mi4xIgorICAgICBMSUNFTlNFID0gIkdQTHYyKyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXhhbXBsZSBpcyBmcm9tIHRoZSByZWNpcGVzIGZvciBRdCwgd2hpY2ggdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHVuZGVyIGVpdGhlciB0aGUgTEdQTCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDIuMSBvciBHUEwgdmVyc2lvbiAzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGV4YW1wbGUgaXMgZnJvbSBDYWlybyB3aGVyZSB0d28gbGljZW5zZXMgY292ZXIKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGV4YW1wbGUgaXMgZnJvbSA8ZmlsZW5hbWU+c3lzc3RhdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBwcmVzZW50cyBhIHNpbmdsZSBsaWNlbnNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSBsaWNlbnNlcyBvbiBhIHBlci1wYWNrYWdlIGJhc2lzIHRvCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSBzaXR1YXRpb25zIHdoZXJlIGNvbXBvbmVudHMgb2YgdGhlIG91dHB1dCBoYXZlCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBsaWNlbnNlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgcGllY2Ugb2Ygc29mdHdhcmUgd2hvc2UgY29kZSBpcworICAgICAgICAgICAgICAgICAgICBsaWNlbnNlZCB1bmRlciBHUEx2MiBidXQgaGFzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgMS4yIGNvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlIHNwZWNpZmllZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0UgPSAiR0ZETC0xLjIgJmFtcDsgR1BMdjIiCisgICAgIExJQ0VOU0VfJHtQTn0gPSAiR1BMdjIiCisgICAgIExJQ0VOU0VfJHtQTn0tZG9jID0gIkdGREwtMS4yIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRV9GTEFHUyc+PGdsb3NzdGVybT5MSUNFTlNFX0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFX0ZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIGFkZGl0aW9uYWwgZmxhZ3MgZm9yIGEgcmVjaXBlIHlvdSBtdXN0IHdoaXRlbGlzdCB0aHJvdWdoIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIGluIG9yZGVyIHRvIGFsbG93IHRoZSByZWNpcGUgdG8gYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgZmxhZ3MgZm9yIGEgcmVjaXBlIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTX1dISVRFTElTVCc+PGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGFsbG93IHRoZSByZWNpcGUgdG8gYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gcHJvdmlkaW5nIG11bHRpcGxlIGZsYWdzLCBzZXBhcmF0ZSB0aGVtIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgdHlwaWNhbGx5IHVzZWQgdG8gbWFyayByZWNpcGVzIHRoYXQgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhZGRpdGlvbmFsIGxpY2Vuc2VzIGluIG9yZGVyIHRvIGJlIHVzZWQgaW4gYQorICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsIHByb2R1Y3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyc+RW5hYmxpbmcgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVFtkb2NdID0gIkxpc3RzIGxpY2Vuc2UgZmxhZ3MgdGhhdCB3aGVuIHNwZWNpZmllZCBpbiBMSUNFTlNFX0ZMQUdTIHdpdGhpbiBhIHJlY2lwZSBzaG91bGQgbm90IHByZXZlbnQgdGhhdCByZWNpcGUgZnJvbSBiZWluZyBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBsaWNlbnNlIGZsYWdzIHRoYXQgd2hlbiBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIHJlY2lwZSBzaG91bGQgbm90IHByZXZlbnQgdGhhdCByZWNpcGUgZnJvbSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBpcyBvdGhlcndpc2Uga25vd24gYXMgIndoaXRlbGlzdGluZyIKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBmbGFncy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZW5hYmxpbmctY29tbWVyY2lhbGx5LWxpY2Vuc2VkLXJlY2lwZXMnPkVuYWJsaW5nIENvbW1lcmNpYWxseSBMaWNlbnNlZCBSZWNpcGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSUNFTlNFX1BBVEgnPjxnbG9zc3Rlcm0+TElDRU5TRV9QQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNFTlNFX1BBVEhbZG9jXSA9ICJQYXRoIHRvIGFkZGl0aW9uYWwgbGljZW5zZXMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBhdGggdG8gYWRkaXRpb25hbCBsaWNlbnNlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgPGZpbGVuYW1lPkNPTU1PTl9MSUNFTlNFX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIGRlZmluZSB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgY29tbW9uIGxpY2Vuc2UgdGV4dCB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+TElDRU5TRV9QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgYWxsb3dzIHlvdSB0byBleHRlbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiB0byBvdGhlciBhcmVhcyB0aGF0IGhhdmUgYWRkaXRpb25hbCBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX1BBVEggKz0gIjxyZXBsYWNlYWJsZT5wYXRoLXRvLWFkZGl0aW9uYWwtY29tbW9uLWxpY2Vuc2VzPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+PGdsb3NzdGVybT5MSU5VWF9LRVJORUxfVFlQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElOVVhfS0VSTkVMX1RZUEVbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGludXgteW9jdG8gcmVjaXBlcyBkZWZpbmUgInN0YW5kYXJkIiwgInRpbnkiLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgInByZWVtcHQtcnQiIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2tlcm5lbC10eXBlcyc+S2VybmVsIFR5cGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LCBpdCBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICAic3RhbmRhcmQiLgorICAgICAgICAgICAgICAgICAgICBUb2dldGhlciB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgc2VhcmNoCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG9vbHMgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gd2l0aGluIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB3aGljaCB0byBidWlsZCBvdXQgdGhlIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJTlVYX1ZFUlNJT04nPjxnbG9zc3Rlcm0+TElOVVhfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElOVVhfVkVSU0lPTltkb2NdID0gIlRoZSBMaW51eCB2ZXJzaW9uIGZyb20ga2VybmVsLm9yZyBvbiB3aGljaCB0aGUgTGludXgga2VybmVsIGltYWdlIGJlaW5nIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlzIGJhc2VkLiBZb3UgZGVmaW5lIHRoaXMgdmFyaWFibGUgaW4gdGhlIGtlcm5lbCByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IHZlcnNpb24gZnJvbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgYmVpbmcgYnVpbHQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy40LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlY2lwZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHZhcmlhYmxlcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJTlVYX1ZFUlNJT04gPz0gIjMuNC4yNCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkxJTlVYX1ZFUlNJT048L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIGRlZmluZSA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElOVVhfVkVSU0lPTl9FWFRFTlNJT04nPjxnbG9zc3Rlcm0+TElOVVhfVkVSU0lPTl9FWFRFTlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJTlVYX1ZFUlNJT05fRVhURU5TSU9OW2RvY10gPSAiQSBzdHJpbmcgZXh0ZW5zaW9uIGNvbXBpbGVkIGludG8gdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBMaW51eCBrZXJuZWwgYnVpbHQgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4gWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nIGV4dGVuc2lvbiBjb21waWxlZCBpbnRvIHRoZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBvZiB0aGUgTGludXgga2VybmVsIGJ1aWx0IHdpdGggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBsaW51eC15b2N0byBrZXJuZWwgcmVjaXBlcyBhbGwgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICIteW9jdG8tJHs8bGluayBsaW5rZW5kPSd2YXItTElOVVhfS0VSTkVMX1RZUEUnPkxJTlVYX0tFUk5FTF9UWVBFPC9saW5rPn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5pbmcgdGhpcyB2YXJpYWJsZSBlc3NlbnRpYWxseSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBpdGVtCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT05GSUdfTE9DQUxWRVJTSU9OPC9maWxlbmFtZT4sIHdoaWNoIGlzIHZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPnVuYW1lPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgdGhlIGV4dGVuc2lvbiBhc3N1bWluZyBpdAorICAgICAgICAgICAgICAgICAgICB3YXMgc2V0IGFzIHByZXZpb3VzbHkgc2hvd246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB1bmFtZSAtcgorICAgICAzLjcuMC1yYzgtY3VzdG9tCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MT0dfRElSJz48Z2xvc3N0ZXJtPkxPR19ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExPR19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3cml0ZXMgb3ZlcmFsbCBsb2cgZmlsZXMuIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyAke1RNUERJUn0vbG9nIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd3JpdGVzIG92ZXJhbGwgbG9nIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMgPGZpbGVuYW1lPiR7VE1QRElSfS9sb2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBsb2dzIHNwZWNpZmljIHRvIGVhY2ggdGFzaywKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LW0nPjx0aXRsZT5NPC90aXRsZT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FJz48Z2xvc3N0ZXJtPk1BQ0hJTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCBkZXZpY2UgZm9yIHdoaWNoIHRoZSBpbWFnZSBpcyBidWlsdC4gWW91IGRlZmluZSBNQUNISU5FIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0IGRldmljZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYiLCB3aGljaCBpcyBhbiB4ODYtYmFzZWQgYXJjaGl0ZWN0dXJlIG1hY2hpbmUgdG8KKyAgICAgICAgICAgICAgICAgICAgYmUgZW11bGF0ZWQgdXNpbmcgUUVNVToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FID89ICJxZW11eDg2IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBjb3JyZXNwb25kcyB0byBhIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIG5hbWUsIHRocm91Z2ggd2hpY2ggbWFjaGluZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgc2V0LgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB3aGVuIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gaXMgc2V0IHRvICJxZW11eDg2IiB0aGVyZQorICAgICAgICAgICAgICAgICAgICBleGlzdHMgdGhlIGNvcnJlc3BvbmRpbmcgPGZpbGVuYW1lPnFlbXV4ODYuY29uZjwvZmlsZW5hbWU+IG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgbWFjaGluZXMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGFzCisgICAgICAgICAgICAgICAgICAgIHNoaXBwZWQgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkUgPz0gInFlbXVhcm0iCisgICAgIE1BQ0hJTkUgPz0gInFlbXVhcm02NCIKKyAgICAgTUFDSElORSA/PSAicWVtdW1pcHMiCisgICAgIE1BQ0hJTkUgPz0gInFlbXVtaXBzNjQiCisgICAgIE1BQ0hJTkUgPz0gInFlbXVwcGMiCisgICAgIE1BQ0hJTkUgPz0gInFlbXV4ODYiCisgICAgIE1BQ0hJTkUgPz0gInFlbXV4ODYtNjQiCisgICAgIE1BQ0hJTkUgPz0gImdlbmVyaWN4ODYiCisgICAgIE1BQ0hJTkUgPz0gImdlbmVyaWN4ODYtNjQiCisgICAgIE1BQ0hJTkUgPz0gImJlYWdsZWJvbmUiCisgICAgIE1BQ0hJTkUgPz0gIm1wYzgzMTVlLXJkYiIKKyAgICAgTUFDSElORSA/PSAiZWRnZXJvdXRlciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbGFzdCBmaXZlIGFyZSBZb2N0byBQcm9qZWN0IHJlZmVyZW5jZSBoYXJkd2FyZSBib2FyZHMsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGFyZSBwcm92aWRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPkFkZGluZyBhZGRpdGlvbmFsIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHlvdXIgY29uZmlndXJhdGlvbiBhZGRzIG5ldyBwb3NzaWJsZSBzZXR0aW5ncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfQVJDSCc+PGdsb3NzdGVybT5NQUNISU5FX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfQVJDSFtkb2NdID0gIlNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbWFjaGluZS1zcGVjaWZpYyBhcmNoaXRlY3R1cmUuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgZnJvbSBNQUNISU5FIG9yIFRVTkVfUEtHQVJDSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIG1hY2hpbmUtc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IGhhbmQtZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkVfQVJDSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMnPjxnbG9zc3Rlcm0+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlcXVpcmVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdC4gQmVjYXVzZSB0aGlzIGlzIGEgJ21hY2hpbmUgZXNzZW50aWFsJyB2YXJpYWJsZSwgdGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcmVxdWlyZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBkZXBlbmRzIG9uIHRoZXNlIHBhY2thZ2VzIGJlaW5nIHByZXNlbnQuCisgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoaXMgaXMgYSAibWFjaGluZSBlc3NlbnRpYWwiIHZhcmlhYmxlLCB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LgorICAgICAgICAgICAgICAgICAgICBUaGUgaW1wYWN0IG9mIHRoaXMgdmFyaWFibGUgYWZmZWN0cyBpbWFnZXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJvb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IGhhcyBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb24gdGhlIHZhcmlhYmxlJ3MgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbWFnZSB3aWxsIG5vdCBidWlsZCBpZiBhIGZpbGUgaW4gdGhpcyBsaXN0IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB0aGUgbWFjaGluZSBmb3Igd2hpY2ggeW91IGFyZSBidWlsZGluZyByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXhhbXBsZS1pbml0PC9maWxlbmFtZT4gdG8gYmUgcnVuIGR1cmluZyBib290IHRvIGluaXRpYWxpemUgdGhlIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSB3b3VsZCB1c2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgbWFjaGluZSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyArPSAiZXhhbXBsZS1pbml0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjb21tZW5kZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiByZWNvbW1lbmRlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGRvZXMgbm90IGRlcGVuZCBvbiB0aGVzZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBiZWNhdXNlIHRoaXMgaXMgYSAibWFjaGluZSBlc3NlbnRpYWwiIHZhcmlhYmxlLCB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LgorICAgICAgICAgICAgICAgICAgICBUaGUgaW1wYWN0IG9mIHRoaXMgdmFyaWFibGUgYWZmZWN0cyBpbWFnZXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJvb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGhhdmUgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSB2YXJpYWJsZSdzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgaW1hZ2Ugd2lsbCBzdGlsbCBidWlsZCBpZiBhIHBhY2thZ2UgaW4gdGhpcyBsaXN0IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gaGFuZGxlIGVzc2VudGlhbCBrZXJuZWwgbW9kdWxlcywgd2hvc2UKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBtYXkgYmUgc2VsZWN0ZWQgdG8gYmUgYnVpbHQgaW50byB0aGUga2VybmVsIHJhdGhlciB0aGFuIGFzIGEgbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICBpbiB3aGljaCBjYXNlIGEgcGFja2FnZSB3aWxsIG5vdCBiZSBwcm9kdWNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB3aGVyZSB5b3UgaGF2ZSBhIGN1c3RvbSBrZXJuZWwgd2hlcmUgYSBzcGVjaWZpYyB0b3VjaHNjcmVlbgorICAgICAgICAgICAgICAgICAgICBkcml2ZXIgaXMgcmVxdWlyZWQgZm9yIHRoZSBtYWNoaW5lIHRvIGJlIHVzYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIGRyaXZlciBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUgb3IKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUga2VybmVsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIHlvdSB3YW50IGl0IHRvIGJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgQnV0LCB3aGVuIHRoZSBkcml2ZXIgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCB5b3Ugc3RpbGwgd2FudCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgdG8gc3VjY2VlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBzZXRzIHVwIGEgInJlY29tbWVuZHMiIHJlbGF0aW9uc2hpcCBzbyB0aGF0IGluIHRoZSBsYXR0ZXIgY2FzZSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHdpbGwgbm90IGZhaWwgZHVlIHRvIHRoZSBtaXNzaW5nIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcywgYXNzdW1pbmcgdGhlIHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUgd2FzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1hYjEyMzwvZmlsZW5hbWU+LCB5b3Ugd291bGQgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW4gdGhlIG1hY2hpbmUncyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtYWIxMjMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiB0aGVzZSBtYWNoaW5lIGVzc2VudGlhbHMgYXJlIGZsYXNoLCBzY3JlZW4sIGtleWJvYXJkLCBtb3VzZSwKKyAgICAgICAgICAgICAgICAgICAgb3IgdG91Y2hzY3JlZW4gZHJpdmVycyAoZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VYVFJBX1JERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiBIb3dldmVyLCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZXMgZGVwZW5kcyBvbiB0aGUgcGFja2FnZXMgYmVpbmcgcHJlc2VudC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBidWlsZCBwcm9jZXNzIGZvciBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlcworICAgICAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFmZmVjdHMgYWxsIGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWJhc2U8L2ZpbGVuYW1lPiwgd2hpY2ggZG9lcyBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiB0aGUgdmFyaWFibGUncyBsaXN0IG9mIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIGltYWdlIHdpbGwgbm90IGJ1aWxkIGlmIGEgZmlsZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIGEgbWFjaGluZSB0aGF0IGhhcyBXaUZpIGNhcGFiaWxpdHkgYnV0IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZSwgeW91IHdhbnQgdG8gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgIHRoZSBXaUZpLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBjb250YWluaW5nIHRoZSBmaXJtd2FyZSBmb3IgdGhlIFdpRmkgaGFyZHdhcmUgaXMgYWx3YXlzCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkIHRvIGV4aXN0LCBzbyBpdCBpcyBhY2NlcHRhYmxlIGZvciB0aGUgYnVpbGQgcHJvY2VzcyB0byBkZXBlbmQgdXBvbgorICAgICAgICAgICAgICAgICAgICBmaW5kaW5nIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFzc3VtaW5nIHRoZSBwYWNrYWdlIGZvciB0aGUgZmlybXdhcmUgd2FzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2lmaWRyaXZlci1maXJtd2FyZTwvZmlsZW5hbWU+LCB5b3Ugd291bGQgdXNlIHRoZSBmb2xsb3dpbmcgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yIHRoZSBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUkRFUEVORFMgKz0gIndpZmlkcml2ZXItZmlybXdhcmUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMnPjxnbG9zc3Rlcm0+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgYm9vdGluZyB0aGUgbWFjaGluZS4gVGhlIGltYWdlIGJlaW5nIGJ1aWx0IGhhcyBubyBidWlsZCBkZXBlbmRlbmNpZXMgb24gdGhlIHBhY2thZ2VzIGluIHRoaXMgbGlzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBiZWluZyBidWlsdCBoYXMgbm8gYnVpbGQgZGVwZW5kZW5jeSBvbiB0aGlzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWZmZWN0cyBvbmx5IGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWJhc2U8L2ZpbGVuYW1lPiwgd2hpY2ggZG9lcyBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGhhdmUgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSB2YXJpYWJsZSdzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgaW1hZ2Ugd2lsbCBidWlsZCBpZiBhIGZpbGUgaW4gdGhpcyBsaXN0IGlzIG5vdCBmb3VuZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBpcyBhIG1hY2hpbmUgdGhhdCBoYXMgV2lGaSBjYXBhYmlsaXR5IGJ1dCBpcyBub3QgZXNzZW50aWFsCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbWFjaGluZSB0byBib290IHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGFyZSBidWlsZGluZyBhIG1vcmUgZnVsbHktZmVhdHVyZWQgaW1hZ2UsIHlvdSB3YW50IHRvIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICBXaUZpLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlIFdpRmkga2VybmVsIG1vZHVsZSB3aWxsIG5vdCBiZSBwcm9kdWNlZAorICAgICAgICAgICAgICAgICAgICBpZiB0aGUgV2lGaSBkcml2ZXIgaXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBpbiB3aGljaCBjYXNlIHlvdSBzdGlsbCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCB0byBzdWNjZWVkIGluc3RlYWQgb2YgZmFpbGluZyBhcyBhIHJlc3VsdCBvZiB0aGUgcGFja2FnZSBub3QgYmVpbmcgZm91bmQuCisgICAgICAgICAgICAgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcywgYXNzdW1pbmcgdGhlIHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUgd2FzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1leGFtcGxld2lmaTwvZmlsZW5hbWU+LCB5b3Ugd291bGQgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaW4gdGhlIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUgZm9yIHRoZSBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtZXhhbXBsZXdpZmkiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+TUFDSElORV9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9GRUFUVVJFU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGUgTUFDSElORSBzdXBwb3J0cy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiBpcyBjYXBhYmxlCisgICAgICAgICAgICAgICAgICAgIG9mIHN1cHBvcnRpbmcuCisgICAgICAgICAgICAgICAgICAgIEZvciByZWxhdGVkIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nIGZlYXR1cmVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT01CSU5FRF9GRUFUVVJFUyc+PGZpbGVuYW1lPkNPTUJJTkVEX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGhhcmR3YXJlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBhcyBzaGlwcGVkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtbWFjaGluZSc+TWFjaGluZSBGZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwnPjxnbG9zc3Rlcm0+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIE1BQ0hJTkVfRkVBVFVSRVMgaWYgbm90IGFsc28gcHJlc2VudCBpbiBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyB0byBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFsc28gcHJlc2VudCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGJlc3QgdG8ganVzdCByZWZlcmVuY2UgdGhlIHZhcmlhYmxlIHRvIHNlZSB3aGljaCBtYWNoaW5lIGZlYXR1cmVzIGFyZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBiYWNrZmlsbGVkIGZvciBhbGwgbWFjaGluZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIGJhY2tmaWxsaW5nPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPjxnbG9zc3Rlcm0+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCc+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTDwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1iYWNrZmlsbCc+RmVhdHVyZSBiYWNrZmlsbGluZzwvbGluaz4iIHNlY3Rpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORU9WRVJSSURFUyc+PGdsb3NzdGVybT5NQUNISU5FT1ZFUlJJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG1hY2hpbmUuIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgTUFDSElORS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPk1BQ0hJTkU8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXh0ZW5kIHRoZSBsaXN0IHRvIGFwcGx5IHZhcmlhYmxlIG92ZXJyaWRlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBvZiBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbCBRRU1VIGVtdWxhdGVkIG1hY2hpbmVzIChlLmcuIHFlbXVhcm0sCisgICAgICAgICAgICAgICAgICAgIHFlbXV4ODYsIGFuZCBzbyBmb3J0aCkgaW5jbHVkZSBhIGNvbW1vbiBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBwcmVwZW5kcyA8ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIE1BQ0hJTkVPVkVSUklERVMgPS4gInFlbXVhbGw6IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFwcGx5aW5nIGFuIG92ZXJyaWRlIGxpa2UgPGZpbGVuYW1lPnFlbXVhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhZmZlY3RzIGFsbCBRRU1VIGVtdWxhdGVkIG1hY2hpbmVzIGVsc2V3aGVyZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25ubWFuLWNvbmY8L2ZpbGVuYW1lPiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBTUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gImZpbGU6Ly93aXJlZC5jb25maWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcmVkLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFJTlRBSU5FUic+PGdsb3NzdGVybT5NQUlOVEFJTkVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUlOVEFJTkVSW2RvY10gPSAiVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBkaXN0cmlidXRpb24gbWFpbnRhaW5lci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NSVJST1JTJz48Z2xvc3N0ZXJtPk1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+IGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBpcyAicG9reSIsIHRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+IGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1MUFJFRklYJz48Z2xvc3N0ZXJtPk1MUFJFRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNTFBSRUZJWFtkb2NdID0gIlNwZWNpZmllcyBhIHByZWZpeCBoYXMgYmVlbiBhZGRlZCB0byBQTiB0byBjcmVhdGUgYSBzcGVjaWFsIHZlcnNpb24gb2YgYSByZWNpcGUgb3IgcGFja2FnZSwgc3VjaCBhcyBhIE11bHRpbGliIHZlcnNpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgcHJlZml4IGhhcyBiZWVuIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHRvIGNyZWF0ZSBhIHNwZWNpYWwgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiBhIHJlY2lwZSBvciBwYWNrYWdlLCBzdWNoIGFzIGEgTXVsdGlsaWIgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIHVzZWQgaW4gcGxhY2VzIHdoZXJlIHRoZSBwcmVmaXggbmVlZHMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIGEgdGhlIG5hbWUgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUpLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUxQUkVGSVg8L2ZpbGVuYW1lPiBnZXRzIHNldCB3aGVuIGEgcHJlZml4IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLW1vZHVsZV9hdXRvbG9hZCc+PGdsb3NzdGVybT5tb2R1bGVfYXV0b2xvYWQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIG1vZHVsZV9hdXRvbG9hZFtkb2NdID0gIlRoaXMgdmFyaWFibGUgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgdmFyaWFibGUuIFlvdSBzaG91bGQgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgbW9kdWxlX2F1dG9sb2FkIHdpdGggYWRkaXRpb25zIHRvIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kdWxlX2F1dG9sb2FkPC9maWxlbmFtZT4gd2l0aCBhZGRpdGlvbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiwgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbW9kdWxlX2F1dG9sb2FkX3JmY29tbSA9ICJyZmNvbW0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdyBiZSByZXBsYWNlZCB3aXRoOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgKz0gInJmY29tbSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1tb2R1bGVfY29uZic+PGdsb3NzdGVybT5tb2R1bGVfY29uZjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgbW9kdWxlX2NvbmZbZG9jXSA9ICJTcGVjaWZpZXMgbW9kcHJvYmUuZCBzeW50YXggbGluZXMgZm9yIGluY2x1c2lvbiBpbiB0aGUgL2V0Yy9tb2Rwcm9iZS5kL21vZG5hbWUuY29uZiBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vNS9tb2Rwcm9iZS5kJz48ZmlsZW5hbWU+bW9kcHJvYmUuZDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3ludGF4IGxpbmVzIGZvciBpbmNsdXNpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL21vZHByb2JlLmQvbW9kbmFtZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBhbnl3aGVyZSB0aGF0IGl0IGNhbiBiZQorICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVkIGJ5IHRoZSBrZXJuZWwgcmVjaXBlIG9yIG91dC1vZi10cmVlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgcmVjaXBlIChlLmcuIGEgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUsIGEKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW4gYXBwZW5kIGZpbGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUsIG9yIHRoZSByZWNpcGUgaXRzZWxmKS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIHZhcmlhYmxlLCB5b3UgbXVzdCBhbHNvIGJlIHN1cmUgdG8gbGlzdAorICAgICAgICAgICAgICAgICAgICB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbW9kdWxlX2NvbmZfPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPm1vZHByb2JlLmQtc3ludGF4PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlIHRoZSBrZXJuZWwgbW9kdWxlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFJ1biA8ZmlsZW5hbWU+bWFuIG1vZHByb2JlLmQ8L2ZpbGVuYW1lPiBpbiB0aGUgc2hlbGwgdG8KKyAgICAgICAgICAgICAgICAgICAgZmluZCBvdXQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZXhhY3Qgc3ludGF4CisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHByb3ZpZGUgd2l0aCA8ZmlsZW5hbWU+bW9kdWxlX2NvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkaW5nIDxmaWxlbmFtZT5tb2R1bGVfY29uZjwvZmlsZW5hbWU+IGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwb3B1bGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvbW9kcHJvYmUuZC9tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHdpdGggPGZpbGVuYW1lPm1vZHByb2JlLmQ8L2ZpbGVuYW1lPiBzeW50YXggbGluZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFkZHMgdGhlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyZzE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmFyZzI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBhIG1vZHVsZSBuYW1lZCA8ZmlsZW5hbWU+bXltb2R1bGU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtb2R1bGVfY29uZl9teW1vZHVsZSA9ICJvcHRpb25zIG15bW9kdWxlIGFyZzE9dmFsMSBhcmcyPXZhbDIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzcGVjaWZ5IGtlcm5lbCBtb2R1bGVzIHRvCisgICAgICAgICAgICAgICAgICAgIGF1dG8tbG9hZCBvbiBib290LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NT0RVTEVfSU1BR0VfQkFTRV9OQU1FJz48Z2xvc3N0ZXJtPk1PRFVMRV9JTUFHRV9CQVNFX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1PRFVMRV9JTUFHRV9CQVNFX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIHRoZSBrZXJuZWwgbW9kdWxlcyB0YXJiYWxsLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIG5hbWUgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPmtlcm5lbDwvbGluaz4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNT0RVTEVfSU1BR0VfQkFTRV9OQU1FID89ICJtb2R1bGVzLSR7UEtHRX0tJHtQS0dWfS0ke1BLR1J9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRSc+PGZpbGVuYW1lPlBLR0U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dWJz48ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR1InPjxmaWxlbmFtZT5QS0dSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREFURVRJTUUnPjxmaWxlbmFtZT5EQVRFVElNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTU9EVUxFX1RBUkJBTExfREVQTE9ZJz48Z2xvc3N0ZXJtPk1PRFVMRV9UQVJCQUxMX0RFUExPWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTU9EVUxFX1RBUkJBTExfREVQTE9ZW2RvY10gPSAiQ29udHJvbHMgY3JlYXRpb24gb2YgdGhlIG1vZHVsZXMtKi50Z3ogZmlsZS4gU2V0IHRoaXMgdmFyaWFibGUgdG8gIjAiIHRvIGRpc2FibGUgY3JlYXRpb24gb2YgdGhpcyBmaWxlLCB3aGljaCBjb250YWlucyBhbGwgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHJlc3VsdGluZyBmcm9tIGEga2VybmVsIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGNyZWF0aW9uIG9mIHRoZSA8ZmlsZW5hbWU+bW9kdWxlcy0qLnRnejwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIHRvICIwIiB0byBkaXNhYmxlIGNyZWF0aW9uIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgd2hpY2ggY29udGFpbnMgYWxsIG9mIHRoZSBrZXJuZWwgbW9kdWxlcyByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGtlcm5lbCBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGdsb3NzdGVybT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTVVMVElNQUNIX1RBUkdFVF9TWVNbZG9jXSA9ICJTZXBhcmF0ZXMgZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcyBzdWNoIHRoYXQgeW91IGNhbiBidWlsZCBmb3IgbXVsdGlwbGUgdGFyZ2V0IG1hY2hpbmVzIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBkaXJlY3Rvcmllcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTZXBhcmF0ZXMgZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcyBzdWNoIHRoYXQgeW91IGNhbiBidWlsZAorICAgICAgICAgICAgICAgICAgICBmb3IgbXVsdGlwbGUgdGFyZ2V0IG1hY2hpbmVzIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBmb3IgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktbic+PHRpdGxlPk48L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTkFUSVZFTFNCU1RSSU5HJz48Z2xvc3N0ZXJtPk5BVElWRUxTQlNUUklORzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTkFUSVZFTFNCU1RSSU5HW2RvY10gPSAiQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBob3N0IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5ncyBjb25zaXN0IG9mIHRoZSBob3N0IGRpc3RyaWJ1dG9yIElECisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSByZWxlYXNlLCBhcyByZXBvcnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxzYl9yZWxlYXNlPC9maWxlbmFtZT4gdG9vbAorICAgICAgICAgICAgICAgICAgICBvciBhcyByZWFkIGZyb20gPGZpbGVuYW1lPi9ldGMvbHNiLXJlbGVhc2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gcnVubmluZyBhIGJ1aWxkIG9uIFVidW50dSAxMi4xMCwgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlzICJVYnVudHUtMTIuMTAiLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGluZm9ybWF0aW9uIGlzIHVuYWJsZSB0byBiZSBkZXRlcm1pbmVkLCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXMgdG8gIlVua25vd24iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgZGVmYXVsdCB0byBpc29sYXRlIG5hdGl2ZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgcGFja2FnZXMgZm9yIGRpZmZlcmVudCBkaXN0cmlidXRpb25zIChlLmcuIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgICAgIHByb2JsZW1zIHdpdGggPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBpbmNvbXBhdGliaWxpdGllcykuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHZhcmlhYmxlIGlzIGNoZWNrZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0FOSVRZX1RFU1RFRF9ESVNUUk9TJz48ZmlsZW5hbWU+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlmIHRoYXQgdmFyaWFibGUgaXMgc2V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU5NJz48Z2xvc3N0ZXJtPk5NPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOTVtkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnbm0nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5tPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48Z2xvc3N0ZXJtPk5PX1JFQ09NTUVOREFUSU9OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTk9fUkVDT01NRU5EQVRJT05TW2RvY10gPSAiV2hlbiBzZXQgdG8gJzEnLCBubyByZWNvbW1lbmRlZCBwYWNrYWdlcyB3aWxsIGJlIGluc3RhbGxlZC4gUmVhbGl6ZSB0aGF0IHNvbWUgcmVjb21tZW5kZWQgcGFja2FnZXMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4gc3lzdGVtIGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXMga2VybmVsLW1vZHVsZXMuIEl0IGlzIHVwIHRvIHRoZSB1c2VyIHRvIGFkZCBwYWNrYWdlcyB0byBJTUFHRV9JTlNUQUxMIGFzIG5lZWRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcmV2ZW50cyBpbnN0YWxsYXRpb24gb2YgYWxsICJyZWNvbW1lbmRlZC1vbmx5IiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQtb25seSBwYWNrYWdlcyBhcmUgcGFja2FnZXMgaW5zdGFsbGVkIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUpLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSA8ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdG8gIjEiIHR1cm5zIHRoaXMgZmVhdHVyZSBvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBOT19SRUNPTU1FTkRBVElPTlMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGdsb2JhbGx5IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIHlvdSBjYW4gYXR0YWNoIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIHRoZSByZWNpcGUgbmFtZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBOT19SRUNPTU1FTkRBVElPTlNfcG4tPHJlcGxhY2VhYmxlPnRhcmdldF9pbWFnZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGlmIHlvdSBjaG9vc2UgdG8gbm90IGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdXNpbmcgdGhpcyB2YXJpYWJsZSBhbmQgc29tZSBvdGhlciBwYWNrYWdlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIHRoZW0gKGkuZS4gbGlzdGVkIGluIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUpLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpZ25vcmVzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgd2lsbCBpbnN0YWxsIHRoZSBwYWNrYWdlcyB0byBhdm9pZCBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgIGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHJlY29tbWVuZGVkIHBhY2thZ2VzIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBjZXJ0YWluCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgc3VjaCBhcyBrZXJuZWwgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHVwIHRvIHlvdSB0byBhZGQgcGFja2FnZXMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhpcyB2YXJpYWJsZSBleGlzdHMgb25seSB3aGVuIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBJUEsgYW5kIFJQTSBwYWNrYWdpbmcgYmFja2VuZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBkb2VzIG5vdCBleGlzdCBmb3IgREVCLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciByZWxhdGVkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU5PSEREJz48Z2xvc3N0ZXJtPk5PSEREPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOT0hERFtkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSAuaGRkaW1nIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPk5PSEREPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ib290aW1nJz48ZmlsZW5hbWU+Ym9vdGltZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgdG8gcHJldmVudCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5oZGRpbWc8L2ZpbGVuYW1lPiBpbWFnZSBmcm9tIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU5PSVNPJz48Z2xvc3N0ZXJtPk5PSVNPPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOT0lTT1tkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElTTyBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5OT0lTTzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYm9vdGltZyc+PGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgdG8gIjEiIHRvIHByZXZlbnQgdGhlIElTTyBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgYnVpbGRpbmcgYW4gSVNPIGltYWdlLCBzZXQgdGhlIHZhcmlhYmxlIHRvICIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktbyc+PHRpdGxlPk88L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0JKQ09QWSc+PGdsb3NzdGVybT5PQkpDT1BZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPQkpDT1BZW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpjb3B5Jy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vYmpjb3B5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0JKRFVNUCc+PGdsb3NzdGVybT5PQkpEVU1QPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPQkpEVU1QW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpkdW1wJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vYmpkdW1wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSc+PGdsb3NzdGVybT5PRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgYmluY29uZmlnLmJiY2xhc3MgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgInNlZCIgY29tbWFuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+PGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSAic2VkIiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2VkIGNvbW1hbmQgYWx0ZXJzIGFueSBwYXRocyBpbiBjb25maWd1cmF0aW9uIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBoYXZlIGJlZW4gc2V0IHVwIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSW5oZXJpdGluZyB0aGlzIGNsYXNzIHJlc3VsdHMgaW4gYWxsIHBhdGhzIGluIHRoZXNlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgY2hhbmdlZCB0byBwb2ludCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzcm9vdHMvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHNvIHRoYXQgYWxsIGJ1aWxkcworICAgICAgICAgICAgICAgICAgICB0aGF0IHVzZSB0aGUgc2NyaXB0IHdpbGwgdXNlIHRoZSBjb3JyZWN0IGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgY3Jvc3MgY29tcGlsaW5nIGxheW91dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2JpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgZGV0YWlscyBvbiBob3cgdGhpcyBjbGFzcyBhcHBsaWVzIHRoZXNlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgc2VkIGNvbW1hbmQgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT4gY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+QmluYXJ5IENvbmZpZ3VyYXRpb24gU2NyaXB0cyAtIDxmaWxlbmFtZT5iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRV9JTVBPUlRTJz48Z2xvc3N0ZXJtPk9FX0lNUE9SVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FX0lNUE9SVFNbZG9jXSA9ICJBbiBpbnRlcm5hbCB2YXJpYWJsZSB1c2VkIHRvIHRlbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hhdCBQeXRob24gbW9kdWxlcyB0byBpbXBvcnQgZm9yIGV2ZXJ5IFB5dGhvbiBmdW5jdGlvbiBydW4gYnkgdGhlIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBpbnRlcm5hbCB2YXJpYWJsZSB1c2VkIHRvIHRlbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd2hhdCBQeXRob24gbW9kdWxlcyB0byBpbXBvcnQgZm9yIGV2ZXJ5IFB5dGhvbgorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBydW4gYnkgdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0VfVEVSTUlOQUwnPjxnbG9zc3Rlcm0+T0VfVEVSTUlOQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FX1RFUk1JTkFMW2RvY10gPSAiQ29udHJvbHMgaG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNwYXducyBpbnRlcmFjdGl2ZSB0ZXJtaW5hbHMgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGhvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzcGF3bnMKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgdGVybWluYWxzIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAoZS5nLiB1c2luZyB0aGUgQml0QmFrZSBjb21tYW5kIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tYyBkZXZzaGVsbDwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24pLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T0VfVEVSTUlOQUw8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhdXRvCisgICAgIGdub21lCisgICAgIHhmY2UKKyAgICAgcnh2dAorICAgICBzY3JlZW4KKyAgICAga29uc29sZQorICAgICBub25lCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRVJPT1QnPjxnbG9zc3Rlcm0+T0VST09UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPRVJPT1RbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgaXMgc291cmNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQgaXMgc291cmNlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgbWFrZXMgdHdvIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIGF2YWlsYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biBvbmUgb2YgdGhlc2Ugc2NyaXB0cywgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PRVJPT1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXNvbHZlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9MREVTVF9LRVJORUwnPjxnbG9zc3Rlcm0+T0xERVNUX0tFUk5FTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT0xERVNUX0tFUk5FTFtkb2NdID0gIkRlY2xhcmVzIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsIHRoYXQgdGhlIHByb2R1Y2VkIGJpbmFyaWVzIG11c3Qgc3VwcG9ydC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWNsYXJlcyB0aGUgb2xkZXN0IHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZCBiaW5hcmllcyBtdXN0IHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgcGFzc2VkIGludG8gdGhlIGJ1aWxkIG9mIHRoZSBFbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBHTlUgQyBMaWJyYXJ5ICg8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciB0aGlzIHZhcmlhYmxlIGNvbWVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiBhIGN1c3RvbSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9WRVJSSURFUyc+PGdsb3NzdGVybT5PVkVSUklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9WRVJSSURFU1tkb2NdID0gIkJpdEJha2UgdXNlcyBPVkVSUklERVMgdG8gY29udHJvbCB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcyByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29udHJvbAorICAgICAgICAgICAgICAgICAgICB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgb3ZlcnJpZGVzIGFyZSBoYW5kbGVkCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXAnPjx0aXRsZT5QPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVAnPjxnbG9zc3Rlcm0+UDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFtkb2NdID0gIlRoZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbi4gUCBpcyBjb21wcmlzZWQgb2YgJHtQTn0tJHtQVn0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UDwvZmlsZW5hbWU+IGlzIGNvbXByaXNlZCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7UE59LSR7UFZ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0FSQ0gnPjxnbG9zc3Rlcm0+UEFDS0FHRV9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBvciBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX0FSQ0g8L2ZpbGVuYW1lPiB3aGVuIGJ1aWxkaW5nIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdCBhbmQgIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91ciByZWNpcGUncyBvdXRwdXQgcGFja2FnZXMgYXJlIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIHRoZSB0YXJnZXQgbWFjaGluZSByYXRoZXIgdGhhbiBnZW5lcmFsIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtYWNoaW5lLCB5b3Ugc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT4gdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0FSQ0gnPjxmaWxlbmFtZT5NQUNISU5FX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHJlY2lwZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0FSQ0hTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfQVJDSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfQVJDSFNbZG9jXSA9ICJBIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIHRhcmdldCBpbiBvcmRlciBvZiBwcmlvcml0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgYXV0b21hdGljYWxseSBhbmQgc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBub3JtYWxseSBiZSBoYW5kLWVkaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgRW50cmllcyBhcmUgc2VwYXJhdGVkIHVzaW5nIHNwYWNlcyBhbmQgbGlzdGVkIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIG9mIHByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPiBpcyAiYWxsIGFueSBub2FyY2gKKyAgICAgICAgICAgICAgICAgICAgJHtQQUNLQUdFX0VYVFJBX0FSQ0hTfSAke01BQ0hJTkVfQVJDSH0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfQkVGT1JFX1BOJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfQkVGT1JFX1BOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0JFRk9SRV9QTltkb2NdID0gIkVuYWJsZXMgZWFzaWx5IGFkZGluZyBwYWNrYWdlcyB0byBQQUNLQUdFUyBiZWZvcmUgJHtQTn0gc28gdGhhdCB0aGUgcGFja2FnZXMgY2FuIHBpY2sgdXAgZmlsZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgZWFzaWx5IGFkZGluZyBwYWNrYWdlcyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWZvcmUgPGZpbGVuYW1lPiR7PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc28gdGhhdCB0aG9zZSBhZGRlZCBwYWNrYWdlcyBjYW4gcGljayB1cCBmaWxlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfQ0xBU1NFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9DTEFTU0VTW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YS4gSXQgaXMgc2V0IGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUsIHdoaWNoIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgZm91bmQgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZm9sZGVyIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHdoZW4gcGFja2FnaW5nIGRhdGEuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9ycG0gcGFja2FnZV9kZWIgcGFja2FnZV9pcGsgcGFja2FnZV90YXIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgaXQgaXMgYSBsZWdhbCBvcHRpb24sIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MgaXMgYnJva2VuCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvIG5vdCB1c2UgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSB1c2VzIG9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50IGluIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBwYWNrYWdlIG1hbmFnZXIgd2hlbiBjcmVhdGluZyB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgcGFja2FnZXMgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIGFueSBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2luZyBjbGFzc2VzIHlvdSBzcGVjaWZ5LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSB0aGUgZm9sbG93aW5nIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9pcGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgSVBLIHBhY2thZ2UgbWFuYWdlcgorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgeW91ciBpbWFnZSBvciBTREsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBwYWNrYWdpbmcgYW5kIGJ1aWxkIHBlcmZvcm1hbmNlIGVmZmVjdHMKKyAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIHBhY2thZ2UgbWFuYWdlciBpbiB1c2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRSc+PGdsb3NzdGVybT5QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFW2RvY10gPSAiRGV0ZXJtaW5lcyBob3cgdG8gc3BsaXQgdXAgdGhlIGJpbmFyeSBhbmQgZGVidWcgaW5mb3JtYXRpb24gd2hlbiBjcmVhdGluZyAqLWRiZyBwYWNrYWdlcyB0byBiZSB1c2VkIHdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaG93IHRvIHNwbGl0IHVwIHRoZSBiaW5hcnkgYW5kIGRlYnVnIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIHdoZW4gY3JlYXRpbmcgPGZpbGVuYW1lPiotZGJnPC9maWxlbmFtZT4gcGFja2FnZXMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZCB3aXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBjb250cm9sIHdoZXJlIGRlYnVnIGluZm9ybWF0aW9uLCB3aGljaCBjYW4gaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICBvciBleGNsdWRlIHNvdXJjZSBmaWxlcywgaXMgc3RvcmVkOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuZGVidWciOiBEZWJ1ZyBzeW1ib2wgZmlsZXMgYXJlIHBsYWNlZCBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGJpbmFyeSBpbiBhIDxmaWxlbmFtZT4uZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGJpbmFyeSBpcyBpbnN0YWxsZWQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIHRoZSBjb3JyZXNwb25kaW5nIGRlYnVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Jpbi8uZGVidWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgZmlsZXMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NyYy9kZWJ1ZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlYnVnLWZpbGUtZGlyZWN0b3J5IjogRGVidWcgc3ltYm9sIGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCB1bmRlciA8ZmlsZW5hbWU+L3Vzci9saWIvZGVidWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQsIGFuZCBzZXBhcmF0ZWQgYnkgdGhlIHBhdGggZnJvbSB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiaW5hcnkgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGJpbmFyeSBpcyBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2JpbjwvZmlsZW5hbWU+LCB0aGUgY29ycmVzcG9uZGluZyBkZWJ1ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMgYXJlIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYi9kZWJ1Zy9iaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgZmlsZXMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL3NyYy9kZWJ1ZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWJ1Zy13aXRob3V0LXNyYyI6IFRoZSBzYW1lIGJlaGF2aW9yIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5kZWJ1ZyIgcHJldmlvdXNseSBkZXNjcmliZWQgd2l0aCB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBubyBzb3VyY2UgZmlsZXMgYXJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4uCisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgZGVidWdnaW5nIHVzaW5nIEdEQiBieSByZWFkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1nZGItcmVtb3RlZGVidWcnPkRlYnVnZ2luZyBXaXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBSZW1vdGVseTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxnbG9zc3Rlcm0+UEFDS0FHRV9FWENMVURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0VYQ0xVREVbZG9jXSA9ICJQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdGhlIGluc3RhbGxhdGlvbi4gSWYgYSBsaXN0ZWQgcGFja2FnZSBpcyByZXF1aXJlZCwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbnN0YWxsZWQgaW50byBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9FWENMVURFID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IC4uLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGdsb2JhbGx5IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIHlvdSBjYW4gYXR0YWNoIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIHRoZSByZWNpcGUgbmFtZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0VYQ0xVREVfcG4tPHJlcGxhY2VhYmxlPnRhcmdldF9pbWFnZTwvcmVwbGFjZWFibGU+ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIHRvIG5vdCBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIGEgcGFja2FnZSB1c2luZyB0aGlzIHZhcmlhYmxlIGFuZCBzb21lIG90aGVyIHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIGl0IChpLmUuIGxpc3RlZCBpbiBhIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlKSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIGEgZmF0YWwKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBidWlsZCBzeXN0ZW0gaGFsdHMgdGhlIHByb2Nlc3Mgd2l0aCBhIGZhdGFsCisgICAgICAgICAgICAgICAgICAgIGVycm9yLCB5b3UgY2FuIHVzZSB0aGUgdmFyaWFibGUgd2l0aCBhbiBpdGVyYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgcHJvY2VzcyB0byByZW1vdmUgc3BlY2lmaWMgY29tcG9uZW50cyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElQSyBhbmQgUlBNIHBhY2thZ2luZyBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGRvZXMgbm90IGV4aXN0IGZvciBERUIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9FWFRSQV9BUkNIUyc+PGdsb3NzdGVybT5QQUNLQUdFX0VYVFJBX0FSQ0hTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0VYVFJBX0FSQ0hTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZXZpY2UgQ1BVLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCB3aGVuIHlvdSBidWlsZCBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZGV2aWNlcyB0aGF0IHVzZSBtaXNjZWxsYW5lb3VzIHByb2Nlc3NvcnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZXZpY2UgQ1BVLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCB3aGVuIHlvdSBidWlsZCBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZGV2aWNlcyB0aGF0IHVzZQorICAgICAgICAgICAgICAgICAgICBtaXNjZWxsYW5lb3VzIHByb2Nlc3NvcnMgc3VjaCBhcyBYU2NhbGUgYW5kIEFSTTkyNi1FSlMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9HUk9VUCc+PGdsb3NzdGVybT5QQUNLQUdFX0dST1VQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0dST1VQW2RvY10gPSAiRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4gYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluIElNQUdFX0ZFQVRVUkVTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZFQVRVUkVfUEFDS0FHRVMnPjxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkVBVFVSRV9QQUNLQUdFUzwvZmlsZW5hbWU+IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgaWYgeW91IHVzZSB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXNzdWVzIGEgd2FybmluZworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfSU5TVEFMTCc+PGdsb3NzdGVybT5QQUNLQUdFX0lOU1RBTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfSU5TVEFMTFtkb2NdID0gIkxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBpbWFnZS4gVGhlIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkIGFuZCB1c2VzIElNQUdFX0lOU1RBTEwgYXMgcGFydCBvZiB0aGUgbGlzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgbGlzdCBvZiBwYWNrYWdlcyBwYXNzZWQgdG8gdGhlIHBhY2thZ2UgbWFuYWdlcgorICAgICAgICAgICAgICAgICAgICBmb3IgaW5zdGFsbGF0aW9uIGludG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBwYWNrYWdlIG1hbmFnZXIgY29udHJvbHMgYWN0dWFsIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICBvZiBhbGwgcGFja2FnZXMsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHBhc3NlZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT4gaXMgbm90IHRoZSBmaW5hbCBsaXN0CisgICAgICAgICAgICAgICAgICAgIG9mIHBhY2thZ2VzIHRoYXQgYXJlIGFjdHVhbGx5IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBpbnRlcm5hbCB0byB0aGUgaW1hZ2UgY29uc3RydWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaW4gZ2VuZXJhbCwgeW91IHNob3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IHBhY2thZ2VzIGZvciBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcyB3aGVuIHdvcmtpbmcgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW1hZ2VzLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMnPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpCisgICAgICAgICAgICAgICAgICAgIGltYWdlLCB1c2UgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFknPjxnbG9zc3Rlcm0+UEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFlbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIGF0dGVtcHRlZCB0byBiZSBpbnN0YWxsZWQgd2hlbiBjcmVhdGluZyBhbiBpbWFnZS4gSWYgYSBsaXN0ZWQgcGFja2FnZSBmYWlscyB0byBpbnN0YWxsLCB0aGUgYnVpbGQgc3lzdGVtIGRvZXMgbm90IGdlbmVyYXRlIGFuIGVycm9yLiBUaGlzIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXR0ZW1wdHMgdG8gaW5zdGFsbCB3aGVuIGNyZWF0aW5nIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiBhIGxpc3RlZCBwYWNrYWdlIGZhaWxzIHRvIGluc3RhbGwsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgcnVuIHRvIHByZS1wcm9jZXNzIHRoZSBQS0dEIGRpcmVjdG9yeSBwcmlvciB0byBzcGxpdHRpbmcgdGhlIGZpbGVzIG91dCB0byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHJ1biB0byBwcmUtcHJvY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0QnPjxmaWxlbmFtZT5QS0dEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBwcmlvciB0byBzcGxpdHRpbmcgdGhlIGZpbGVzIG91dCB0byBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VDT05GSUcnPjxnbG9zc3Rlcm0+UEFDS0FHRUNPTkZJRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRUNPTkZJR1tkb2NdID0gIlRoaXMgdmFyaWFibGUgcHJvdmlkZXMgYSBtZWFucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgZmVhdHVyZXMgb2YgYSByZWNpcGUgb24gYSBwZXItcmVjaXBlIGJhc2lzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcHJvdmlkZXMgYSBtZWFucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgb2YgYSByZWNpcGUgb24gYSBwZXItcmVjaXBlIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IGJsb2NrcyBhcmUgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICBpbiByZWNpcGVzIHdoZW4geW91IHNwZWNpZnkgZmVhdHVyZXMgYW5kIHRoZW4gYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZGVmaW5lIGZlYXR1cmUgYmVoYXZpb3JzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBiYXNpYyBibG9jayBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJRyA/Pz0gImYxIGYyIGYzIC4uLiIKKyAgICAgUEFDS0FHRUNPTkZJR1tmMV0gPSAiLS13aXRoLWYxLC0td2l0aG91dC1mMSxidWlsZC1kZXBzLWYxLHJ0LWRlcHMtZjEiCisgICAgIFBBQ0tBR0VDT05GSUdbZjJdID0gIi0td2l0aC1mMiwtLXdpdGhvdXQtZjIsYnVpbGQtZGVwcy1mMixydC1kZXBzLWYyIgorICAgICBQQUNLQUdFQ09ORklHW2YzXSA9ICItLXdpdGgtZjMsLS13aXRob3V0LWYzLGJ1aWxkLWRlcHMtZjMscnQtZGVwcy1mMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpdHNlbGYgc3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHRvIGVuYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIHRoZSBmZWF0dXJlcywgeW91IGNhbiBkZXRlcm1pbmUgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgICAgICAgICAgICAgIGVhY2ggZmVhdHVyZSBieSBwcm92aWRpbmcgdXAgdG8gZm91ciBvcmRlci1kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLCB3aGljaCBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvbWl0IGFueSBhcmd1bWVudCB5b3UgbGlrZSBidXQgbXVzdCByZXRhaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRpbmcgY29tbWFzLgorICAgICAgICAgICAgICAgICAgICBUaGUgb3JkZXIgaXMgaW1wb3J0YW50IGFuZCBzcGVjaWZpZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dHJhIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gPGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkaXRpb25hbCBidWlsZCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkaXRpb25hbCBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBhZGRlZCBpZiB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4gYmxvY2sgdGFrZW4gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYnJzdmc8L2ZpbGVuYW1lPiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSB0aGUgZmVhdHVyZSBpcyA8ZmlsZW5hbWU+Y3JvY288L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaGFzIHRocmVlIGFyZ3VtZW50cyB0aGF0IGRldGVybWluZSB0aGUgZmVhdHVyZSdzCisgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VDT05GSUcgPz89ICJjcm9jbyIKKyAgICAgUEFDS0FHRUNPTkZJR1tjcm9jb10gPSAiLS13aXRoLWNyb2NvLC0td2l0aG91dC1jcm9jbyxsaWJjcm9jbyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi0td2l0aC1jcm9jbzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliY3JvY288L2ZpbGVuYW1lPiBhcmd1bWVudHMgYXBwbHkgb25seSBpZgorICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIDxmaWxlbmFtZT4tLXdpdGgtY3JvY288L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCBhcmd1bWVudCBsaXN0IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliY3JvY288L2ZpbGVuYW1lPiBpcyBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCBzYXkgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIGFub3RoZXIgbGF5ZXIsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHNlY29uZCBhcmd1bWVudCA8ZmlsZW5hbWU+LS13aXRob3V0LWNyb2NvPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0td2l0aC1jcm9jbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzaWMgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBkZXNjcmliZWQgaG9sZHMgdHJ1ZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgeW91CisgICAgICAgICAgICAgICAgICAgIGFyZSBjcmVhdGluZyBhIGJsb2NrIG9yIGNoYW5naW5nIGEgYmxvY2suCisgICAgICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBibG9jaywgdXNlIHRoZSBzdHJ1Y3R1cmUgaW5zaWRlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBibG9jaywgeW91IGNhbiBkbyBzbworICAgICAgICAgICAgICAgICAgICBvbmUgb2YgdHdvIHdheXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZCBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgbGF5ZXIgYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgY29tcGxldGVseSBvdmVycmlkZSB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHPSJmNCBmNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IsIHlvdSBjYW4ganVzdCBhcHBlbmQgdGhlIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19hcHBlbmQgPSAiIGY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgaWRlbnRpY2FsIHRvIGNoYW5naW5nIHRoZSBibG9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggYW4gYXBwZW5kIGZpbGUgZXhjZXB0IHlvdSBlZGl0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5teWRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYXBwZW5kIGZpbGVzIHByZXZpb3VzbHkgZGVzY3JpYmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gZWl0aGVyIGNvbXBsZXRlbHkgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJR19wbi08cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+PSJmNCBmNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3IsIHlvdSBjYW4ganVzdCBhbWVuZCB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi08cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+ID0gIiBmNCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlknPjxnbG9zc3Rlcm0+UEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWVtkb2NdID0gIlByZXZlbnRzIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiB0aGUgbm9ybWFsIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgc3VjaCBhcyAtZGV2IGFuZCAtZGJnIGluIGEgcGFja2FnZWdyb3VwIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgcmVjaXBlcyBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlZ3JvdXAnPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlk8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICAiMSIgc3BlY2lmaWVzIHRoYXQgdGhlIG5vcm1hbCBjb21wbGVtZW50YXJ5IHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkgc2hvdWxkIG5vdCBiZQorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXA8L2ZpbGVuYW1lPiByZWNpcGUsIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFU1tkb2NdID0gIlRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0aGUgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7UE59LWRiZyAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRvYyAke1BOfS1sb2NhbGUgJHtQQUNLQUdFX0JFRk9SRV9QTn0gJHtQTn0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTX0RZTkFNSUMnPjxnbG9zc3Rlcm0+UEFDS0FHRVNfRFlOQU1JQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRVNfRFlOQU1JQ1tkb2NdID0gIkEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcyBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFjdHVhbGx5IHNhdGlzZnkgdGhlIGRlcGVuZGVuY2llcywgaXQgb25seSBzdGF0ZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCBiZSBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGhhcmQsIHJ1bnRpbWUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIG9mIGFub3RoZXIgcGFja2FnZSBpcyBzYXRpc2ZpZWQKKyAgICAgICAgICAgICAgICAgICAgYXQgYnVpbGQgdGltZSB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBidXQgYSBwYWNrYWdlIHdpdGggdGhlIG1vZHVsZSBuYW1lIGlzIG5ldmVyIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkLCB0aGVuIHRoZSBvdGhlciBwYWNrYWdlIHdpbGwgYmUgYnJva2VuLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBpZiB5b3UgYXR0ZW1wdCB0byBpbmNsdWRlIHRoYXQgcGFja2FnZSBpbiBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IHdpbGwgZ2V0IGEgZGVwZW5kZW5jeSBmYWlsdXJlIGZyb20gdGhlIHBhY2thZ2luZyBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBzdWNoIGEgc2l0dWF0aW9uIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhbmQgdGhlIHBhY2thZ2UgdGhhdCBpcyBub3QgY3JlYXRlZCBpcyB2YWxpZAorICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHRoZSBkZXBlbmRlbmN5IGJlaW5nIHNhdGlzZmllZCwgdGhlbiB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoYSBzb2Z0IHJ1bnRpbWUgZGVwZW5kZW5jeSkgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aGVuIHlvdSBhcmUgc3BsaXR0aW5nIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNoYW5kbGluZy1vcHRpb25hbC1tb2R1bGUtcGFja2FnaW5nJz5IYW5kbGluZyBPcHRpb25hbCBNb2R1bGUgUGFja2FnaW5nPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VTUExJVEZVTkNTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VTUExJVEZVTkNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFU1BMSVRGVU5DU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHJ1biB0byBwZXJmb3JtIGFkZGl0aW9uYWwgc3BsaXR0aW5nIG9mIGZpbGVzIGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyBydW4gdG8gcGVyZm9ybSBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZyBvZiBmaWxlcyBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgY2FuIGVpdGhlciBwcmVwZW5kIHRvIHRoaXMgdmFyaWFibGUgb3IgcHJlcGVuZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnBvcHVsYXRlX3BhY2thZ2VzPC9maWxlbmFtZT4gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHBhY2thZ2Ugc3BsaXR0aW5nLgorICAgICAgICAgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhlIGZ1bmN0aW9uIHNob3VsZCBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgb3RoZXIgcGFja2FnaW5nIHZhcmlhYmxlcyBhcHByb3ByaWF0ZWx5IGluIG9yZGVyIHRvCisgICAgICAgICAgICAgICAgICAgIHBlcmZvcm0gdGhlIGRlc2lyZWQgc3BsaXR0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxnbG9zc3Rlcm0+UEFSQUxMRUxfTUFLRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFSQUxMRUxfTUFLRVtkb2NdID0gIlNwZWNpZmllcyBleHRyYSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWFrZSBjb21tYW5kIGR1cmluZyB0aGUgY29tcGlsZSB0YXNrcy4gVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluIHRoZSBmb3JtIC1qIHgsIHdoZXJlIHggcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyBtYWtlIGNhbiBydW4uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgY29tcGlsYXRpb24gb24gdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXN1YWxseSBpbiB0aGUgZm9ybSAiLWogPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPiIsCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIDxyZXBsYWNlYWJsZT54PC9yZXBsYWNlYWJsZT4gcmVwcmVzZW50cyB0aGUgbWF4aW11bQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNhbgorICAgICAgICAgICAgICAgICAgICBydW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGlzIHZhcmlhYmxlIHRvIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgY29yZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB1c2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCBleHBlcmllbmNlcyBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXMgZHVyaW5nIHRoZSA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIHRoYXQgcmVzdWx0IGluIHJhY2UgY29uZGl0aW9ucywgeW91IGNhbiBjbGVhcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGFzIGEgd29ya2Fyb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNpbmdsZSBzb2NrZXQgc3lzdGVtcyAoaS5lLiBvbmUgQ1BVKSwgeW91IHNob3VsZCBub3QKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSB0byBvdmVycmlkZSB0aGlzIHZhcmlhYmxlIHRvIGdhaW4gb3B0aW1hbCBwYXJhbGxlbGlzbQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgaGF2ZSB2ZXJ5IGxhcmdlIHN5c3RlbXMgdGhhdCBlbXBsb3kKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgcGh5c2ljYWwgQ1BVcywgeW91IG1pZ2h0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBzZXQgaGlnaGVyIHRoYW4gIi1qIDIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3BlZWRpbmcgdXAgYnVpbGRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzcGVlZGluZy11cC10aGUtYnVpbGQnPlNwZWVkaW5nIFVwIHRoZSBCdWlsZDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFSQUxMRUxfTUFLRUlOU1QnPjxnbG9zc3Rlcm0+UEFSQUxMRUxfTUFLRUlOU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBUkFMTEVMX01BS0VJTlNUW2RvY10gPSAiRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIG1ha2UgaW5zdGFsbCBjb21tYW5kIGR1cmluZyB0aGUgZG9faW5zdGFsbCB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4gY29tbWFuZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGV4cGVyaWVuY2VzIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlcyBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2sgdGhhdCByZXN1bHQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhY2UgY29uZGl0aW9ucywgeW91IGNhbiBjbGVhciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFSU5TVDwvZmlsZW5hbWU+IHZhcmlhYmxlIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBhcyBhIHdvcmthcm91bmQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYWRkcmVzc2luZyByYWNlIGNvbmRpdGlvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZWJ1Z2dpbmctcGFyYWxsZWwtbWFrZS1yYWNlcyc+RGVidWdnaW5nIFBhcmFsbGVsIE1ha2UgUmFjZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFUQ0hSRVNPTFZFJz48Z2xvc3N0ZXJtPlBBVENIUkVTT0xWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFUQ0hSRVNPTFZFW2RvY10gPSAiRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBhY3Rpb24gdG8gdGFrZSB3aGVuIGEgcGF0Y2ggZmFpbHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgdG8gb25lIG9mIHR3byB2YWx1ZXM6ICJub29wIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgInVzZXIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAibm9vcCIgY2F1c2VzIHRoZSBidWlsZCB0byBzaW1wbHkgZmFpbAorICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbm5vdCBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICAgICAgYXBwbHkgYSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgdmFsdWUgdG8gInVzZXIiIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgICAgIGxhdW5jaCBhIHNoZWxsIGFuZCBwbGFjZXMgeW91IGluIHRoZSByaWdodCBsb2NhdGlvbiBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gbWFudWFsbHkgcmVzb2x2ZSB0aGUgY29uZmxpY3RzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQVRDSFRPT0wnPjxnbG9zc3Rlcm0+UEFUQ0hUT09MPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQVRDSFRPT0xbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHV0aWxpdHkgdXNlZCB0byBhcHBseSBwYXRjaGVzIGZvciBhIHJlY2lwZSBkdXJpbmcgZG9fcGF0Y2guIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB1dGlsaXR5IHVzZWQgdG8gYXBwbHkgcGF0Y2hlcyBmb3IgYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgb25lIG9mIHRocmVlIHV0aWxpdGllczogInBhdGNoIiwgInF1aWx0Iiwgb3IKKyAgICAgICAgICAgICAgICAgICAgImdpdCIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHV0aWxpdHkgdXNlZCBpcyAicXVpbHQiIGV4Y2VwdCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHF1aWx0LW5hdGl2ZSByZWNpcGUgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBxdWlsdCB0b29sIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHRpbWUgcXVpbHQtbmF0aXZlIGlzIGJlaW5nIHBhdGNoZWQsIGl0IHVzZXMgInBhdGNoIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gdXNlIGFuIGFsdGVybmF0aXZlIHBhdGNoaW5nIHRvb2wsIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIHJlY2lwZSB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQVRDSFRPT0wgPSAicGF0Y2giCisgICAgIFBBVENIVE9PTCA9ICJxdWlsdCIKKyAgICAgUEFUQ0hUT09MID0gImdpdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBFJz48Z2xvc3N0ZXJtPlBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQRVtkb2NdID0gIlRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnMCcuIFRoZSBmaWVsZCBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgd2F5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHVuc2V0LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgIHdheS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRic+PGdsb3NzdGVybT5QRjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEZbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHJlY2lwZSBvciBwYWNrYWdlIG5hbWUgYW5kIGluY2x1ZGVzIGFsbCB2ZXJzaW9uIGFuZCByZXZpc2lvbiBudW1iZXJzLiBUaGlzIHZhcmlhYmxlIGlzIGNvbXByaXNlZCBvZiAke1BOfS0ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgIG51bWJlcnMgKGkuZS4gPGZpbGVuYW1lPmdsaWJjLTIuMTMtcjIwK3N2bnIxNTUwOC88L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2gtNC4yLXIxLzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBjb21wcmlzZWQgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkezxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+fS0kezxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRFTkRQRSc+RVhURU5EUEU8L2xpbms+fSR7PGxpbmsgbGlua2VuZD0ndmFyLVBWJz5QVjwvbGluaz59LSR7PGxpbmsgbGlua2VuZD0ndmFyLVBSJz5QUjwvbGluaz59CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QSVhCVUZfUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UElYQlVGX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQSVhCVUZfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBwaXhidWZjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUgcGl4YnVmIGxvYWRlcnMgdXNlZCB3aXRoIGdkay1waXhidWYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1waXhidWZjYWNoZSc+PGZpbGVuYW1lPnBpeGJ1ZmNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgdGhhdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHRoZSBwaXhidWYgbG9hZGVycyB1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkay1waXhidWY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5waXhidWZjYWNoZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGFzc3VtZXMgdGhhdCB0aGUgbG9hZGVycyBhcmUgaW4gdGhlIHJlY2lwZSdzIG1haW4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIGlmIHRoZSBsb2FkZXJzIHlvdSBuZWVkIGFyZSBpbiBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGF0IG1haW4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0cnPjxnbG9zc3Rlcm0+UEtHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHBhY2thZ2UgY3JlYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4gV2hlbiB5b3UgdXNlIHRoaXMgdmFyaWFibGUsIHlvdSBtdXN0IHVzZSBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHBhY2thZ2UgY3JlYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nIHRoZSA8ZmlsZW5hbWU+UEtHPC9maWxlbmFtZT4gdmFyaWFibGUsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCB1c2UgYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyByZW5hbWVzIHRoZSBvdXRwdXQgcGFja2FnZSwgaXQgZG9lcyBzbyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QS0dfPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dfQ09ORklHX1BBVEgnPjxnbG9zc3Rlcm0+UEtHX0NPTkZJR19QQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dfQ09ORklHX1BBVEhbZG9jXSA9ICJQYXRoIHRvIHBrZy1jb25maWcgZmlsZXMgZm9yIHRoZSBjdXJyZW50IGJ1aWxkIGNvbnRleHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgYnVpbGQgY29udGV4dC4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiByZWFkcyB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0QnPjxnbG9zc3Rlcm0+UEtHRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHRFtkb2NdID0gIlBvaW50cyB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBiZWZvcmUgdGhleSBhcmUgc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZCBiZWZvcmUgdGhleSBhcmUgc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBkZWZhdWx0cyB0byB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vcGFja2FnZQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0RBVEFfRElSJz48Z2xvc3N0ZXJtPlBLR0RBVEFfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dEQVRBX0RJUltkb2NdID0gIlBvaW50cyB0byBhIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEgZ2VuZXJhdGVkIGR1cmluZyB0aGUgcGFja2FnaW5nIHByb2Nlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIGEgc2hhcmVkLCBnbG9iYWwtc3RhdGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgZGF0YQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2VzcywgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgcGFja2FnZXMgZGF0YSBmb3IgZWFjaCByZWNpcGUgYW5kIGluc3RhbGxzIGl0IGludG8KKyAgICAgICAgICAgICAgICAgICAgdGhpcyB0ZW1wb3JhcnksIHNoYXJlZCBhcmVhLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBkZWZhdWx0cyB0byB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0RFU1QnPjxnbG9zc3Rlcm0+UEtHREVTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHREVTVFtkb2NdID0gIlBvaW50cyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBkZWZhdWx0cyB0byB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vcGFja2FnZXMtc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVbmRlciB0aGlzIGRpcmVjdG9yeSwgdGhlIGJ1aWxkIHN5c3RlbSBjcmVhdGVzCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZvciBlYWNoIHBhY2thZ2Ugc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgY2hhbmdlIHRoaXMgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dERVNUV09SSyc+PGdsb3NzdGVybT5QS0dERVNUV09SSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHREVTVFdPUktbZG9jXSA9ICJQb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHVzZWQgYnkgdGhlIGRvX3BhY2thZ2UgdGFzayB0byB3cml0ZSBvdXRwdXQgZnJvbSB0aGUgZG9fcGFja2FnZWRhdGEgdGFzay4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIHRvIHdyaXRlIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZWRhdGEnPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBLR0RFU1RXT1JLPC9maWxlbmFtZT4gbG9jYXRpb24gZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9L3BrZ2RhdGEKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4gdGFzayB0aGVuIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhIGluIHRoZSB0ZW1wb3Jhcnkgd29yayBhcmVhIGFuZCBpbnN0YWxscyBpdCBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEQVRBX0RJUic+PGZpbGVuYW1lPlBLR0RBVEFfRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgY2hhbmdlIHRoaXMgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dFJz48Z2xvc3N0ZXJtPlBLR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR0VbZG9jXSA9ICJUaGUgZXBvY2ggb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5QS0dFPC9maWxlbmFtZT4gaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR1InPjxnbG9zc3Rlcm0+UEtHUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHUltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlBLR1I8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHVic+PGdsb3NzdGVybT5QS0dWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dWW2RvY10gPSAiVGhlIHZlcnNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlBLR1Y8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBOJz48Z2xvc3N0ZXJtPlBOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQTltkb2NdID0gIlBOIHJlZmVycyB0byBhIHJlY2lwZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFzIGlucHV0IHRvIGNyZWF0ZSBhIHBhY2thZ2UuIEl0IHJlZmVycyB0byBhIHBhY2thZ2UgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgY3JlYXRlZCBvciBwcm9kdWNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNhbiBoYXZlIHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0OiBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBuYW1lIG9yIGEgcmVzdWx0aW5nIHBhY2thZ2UgbmFtZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gcmVmZXJzIHRvIGEgcmVjaXBlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXMgaW5wdXQgdG8gY3JlYXRlIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgaXMgbm9ybWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHJlY2lwZSBmaWxlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHBhdF8yLjAuMS5iYjwvZmlsZW5hbWU+LCB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgImV4cGF0Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIHJlZmVycyB0byBhIHBhY2thZ2UgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgY3JlYXRlZCBvciBwcm9kdWNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgYXBwbGljYWJsZSwgdGhlIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGFsc28gY29udGFpbnMgYW55IHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgc3VmZml4IG9yIHByZWZpeC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHVzaW5nIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gdG8gYnVpbGQgcGFja2FnZXMgZm9yIHRoZSBuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSwgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gaXMgPGZpbGVuYW1lPmJhc2gtbmF0aXZlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gdG8gYnVpbGQgcGFja2FnZXMgZm9yIHRoZSB0YXJnZXQgYW5kIGZvciBNdWx0aWxpYiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gd291bGQgYmUgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYjY0LWJhc2g8L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBOQkxBQ0tMSVNUJz48Z2xvc3N0ZXJtPlBOQkxBQ0tMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQTkJMQUNLTElTVFtkb2NdID0gIkxpc3RzIHJlY2lwZXMgeW91IGRvIG5vdCB3YW50IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHJlY2lwZXMgeW91IGRvIG5vdCB3YW50IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJsYWNrbGlzdCc+PGZpbGVuYW1lPmJsYWNrbGlzdDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggdGhlIHJlY2lwZSBtdXN0IGluaGVyaXQgZ2xvYmFsbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHByZXZlbnQgYSByZWNpcGUgZnJvbSBiZWluZyBidWlsdCwgaW5oZXJpdCB0aGUgY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsbHkgYW5kIHVzZSB0aGUgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHByZXZlbnRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXJlY2lwZTwvZmlsZW5hbWU+IGZyb20gYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiYmxhY2tsaXN0IgorICAgICBQTkJMQUNLTElTVFtteXJlY2lwZV0gPSAiTm90IHN1cHBvcnRlZCBieSBvdXIgb3JnYW5pemF0aW9uLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCc+PGdsb3NzdGVybT5QT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCBob3N0IHBhcnQgb2YgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGhvc3QgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgU0RLIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTREtfRElSfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ESVInPjxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EJz48Z2xvc3N0ZXJtPlBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgdGFyZ2V0IHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgU0RLIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTREtfRElSfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ESVInPjxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSJz48Z2xvc3N0ZXJtPlBSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyAncjAnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyAicjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGdsb3NzdGVybT5QUkVGRVJSRURfUFJPVklERVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSRUZFUlJFRF9QUk9WSURFUltkb2NdID0gIklmIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSBhbiBpdGVtLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSBhbiBpdGVtLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsd2F5cyBzdWZmaXggdGhlIHZhcmlhYmxlIHdpdGggdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGl0ZW0sIGFuZCB5b3Ugc2hvdWxkIHNldCBpdCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB0byB3aGljaCB5b3Ugd2FudCB0byBnaXZlIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA9ICJ4c2VydmVyLXhmODYiCisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFRkVSUkVEX1ZFUlNJT04nPjxnbG9zc3Rlcm0+UFJFRkVSUkVEX1ZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSRUZFUlJFRF9WRVJTSU9OW2RvY10gPSAiSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiByZWNpcGVzIGF2YWlsYWJsZSwgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gc2VsZWN0LCBhbmQgeW91IHNob3VsZCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZ2x5IGZvciBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgIjxmaWxlbmFtZT4lPC9maWxlbmFtZT4iIGNoYXJhY3RlciBhcyBhCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkIHRvIG1hdGNoIGFueSBudW1iZXIgb2YgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHNwZWNpZnlpbmcgdmVyc2lvbnMgdGhhdCBjb250YWluIGxvbmcgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIyLjcuMyIKKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiMy4xOSUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVNSVJST1JTJz48Z2xvc3N0ZXJtPlBSRU1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSRU1JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4sIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGFuZCB0aGVuIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBpcyAicG9reSIsIHRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSBjb3VsZCBhZGQgYSBzcGVjaWZpYyBzZXJ2ZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gYXR0ZW1wdCBiZWZvcmUgYW55IG90aGVycyBieSBhZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFTUlSUk9SU19wcmVwZW5kID0gIlwKKyAgICAgZ2l0Oi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgZnRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGh0dHBzOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNoYW5nZXMgY2F1c2UgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbnRlcmNlcHQKKyAgICAgICAgICAgICAgICAgICAgR2l0LCBGVFAsIEhUVFAsIGFuZCBIVFRQUyByZXF1ZXN0cyBhbmQgZGlyZWN0IHRoZW0gdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gc291cmNlcyBtaXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gVVJMcyB0byBwb2ludAorICAgICAgICAgICAgICAgICAgICB0byBsb2NhbCBkaXJlY3RvcmllcyBvciBuZXR3b3JrIHNoYXJlcyBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSSU9SSVRZJz48Z2xvc3N0ZXJtPlBSSU9SSVRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUklPUklUWVtkb2NdID0gIkluZGljYXRlcyB0aGUgaW1wb3J0YW5jZSBvZiBhIHBhY2thZ2UuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnb3B0aW9uYWwnLiAgT3RoZXIgc3RhbmRhcmQgdmFsdWVzIGFyZSAncmVxdWlyZWQnLCAnc3RhbmRhcmQnIGFuZCAnZXh0cmEnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGUgaW1wb3J0YW5jZSBvZiBhIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUklPUklUWTwvZmlsZW5hbWU+IGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgZGlzdHJpYnV0aW9uIHBvbGljeSBiZWNhdXNlIHRoZSBpbXBvcnRhbmNlIG9mIGFueSBnaXZlbgorICAgICAgICAgICAgICAgICAgICByZWNpcGUgZGVwZW5kcyBvbiB0aGUgcHVycG9zZSBmb3Igd2hpY2ggdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBpcyBiZWluZyBwcm9kdWNlZC4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgPGZpbGVuYW1lPlBSSU9SSVRZPC9maWxlbmFtZT4gaXMgbm90IG5vcm1hbGx5IHNldAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPlBSSU9SSVRZPC9maWxlbmFtZT4gdG8gInJlcXVpcmVkIiwKKyAgICAgICAgICAgICAgICAgICAgInN0YW5kYXJkIiwgImV4dHJhIiwgYW5kICJvcHRpb25hbCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSSVZBVEVfTElCUyc+PGdsb3NzdGVybT5QUklWQVRFX0xJQlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSSVZBVEVfTElCU1tkb2NdID0gIlNwZWNpZmllcyBsaWJyYXJpZXMgaW5zdGFsbGVkIHdpdGhpbiBhIHJlY2lwZSB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtJ3Mgc2hhcmVkIGxpYnJhcnkgcmVzb2x2ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGxpYnJhcmllcyBpbnN0YWxsZWQgd2l0aGluIGEgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0ncworICAgICAgICAgICAgICAgICAgICBzaGFyZWQgbGlicmFyeSByZXNvbHZlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGJ5IGEgcmVjaXBlIGhhcyBpdHMgb3duIHByaXZhdGUgdmVyc2lvbnMgb2YgYQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IG5vcm1hbGx5IHByb3ZpZGVkIGJ5IGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSB3b3VsZCBub3Qgd2FudCB0aGUgcGFja2FnZSBjb250YWluaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcml2YXRlIGxpYnJhcmllcyB0byBiZSBzZXQgYXMgYSBkZXBlbmRlbmN5IG9uIG90aGVyCisgICAgICAgICAgICAgICAgICAgIHVucmVsYXRlZCBwYWNrYWdlcyB0aGF0IHNob3VsZCBpbnN0ZWFkIGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBwcm92aWRpbmcgdGhlIHN0YW5kYXJkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpYnJhcmllcyBzcGVjaWZpZWQgaW4gdGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZWlyIGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGZyb20gdGhlIEZpcmVmb3ggcmVjaXBlIGluIG1ldGEtYnJvd3NlcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUklWQVRFX0xJQlMgPSAibGlibW96anMuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlieHBjb20uc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlibnNwcjQuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlieHVsLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgIGxpYm1vemFsbG9jLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgIGxpYnBsYzQuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlicGxkczQuc28iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUk9WSURFUyc+PGdsb3NzdGVybT5QUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgYWxpYXNlcyB0aGF0IGEgcmVjaXBlIGFsc28gcHJvdmlkZXMuIFRoZXNlIGFsaWFzZXMgYXJlIHVzZWZ1bCBmb3Igc2F0aXNmeWluZyBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcyBkdXJpbmcgdGhlIGJ1aWxkIGFzIHNwZWNpZmllZCBieSBERVBFTkRTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhbGlhc2VzIGJ5IHdoaWNoIGEgcGFydGljdWxhciByZWNpcGUgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIGtub3duLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBhIHJlY2lwZSdzIG93bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBpbXBsaWNpdGx5IGFscmVhZHkgaW4gaXRzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlIHVzZXMgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4sIHRoZQorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGFsaWFzZXMgYXJlIHN5bm9ueW1zIGZvciB0aGUgcmVjaXBlIGFuZCBjYW4KKyAgICAgICAgICAgICAgICAgICAgYmUgdXNlZnVsIHNhdGlzZnlpbmcgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz5ERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gc3RhdGVtZW50IGZyb20gYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSA8ZmlsZW5hbWU+bGliYXZfMC44LjExLmJiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJPVklERVMgKz0gImxpYnBvc3Rwcm9jIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgcmVzdWx0cyBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgImxpYmF2IiByZWNpcGUgYWxzbyBiZWluZyBrbm93biBhcyAibGlicG9zdHByb2MiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSU0VSVl9IT1NUJz48Z2xvc3N0ZXJtPlBSU0VSVl9IT1NUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUlNFUlZfSE9TVFtkb2NdID0gIlRoZSBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmV0d29yayBiYXNlZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIGhvdyB0aGUgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgc2V0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUgdmFyaWFibGUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBzdGFydCBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPlBSIHNlcnZpY2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdG8gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHRvIHVzZSBhIHJlbW90ZSBQUiBzZXJ2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBURVNUX0VOQUJMRUQnPjxnbG9zc3Rlcm0+UFRFU1RfRU5BQkxFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJTRVJWX0hPU1RbZG9jXSA9ICJTcGVjaWZpZXMgd2hldGhlciBvciBub3QgUGFja2FnZSBUZXN0IChwdGVzdCkgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIHdoZW4gYnVpbGRpbmcgYSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+UGFja2FnZSBUZXN0PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgKHB0ZXN0KSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgd2hlbiBidWlsZGluZyBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3Qgc2V0IHRoaXMgdmFyaWFibGUgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIEVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYnVpbGRpbmcgUGFja2FnZSBUZXN0cworICAgICAgICAgICAgICAgICAgICBhdCBidWlsZCB0aW1lIHNob3VsZCBiZSBkb25lIGJ5IGFkZGluZyAicHRlc3QiIHRvIChvcgorICAgICAgICAgICAgICAgICAgICByZW1vdmluZyBpdCBmcm9tKQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QVic+PGdsb3NzdGVybT5QVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFZbZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgdmVyc2lvbiBpcyBub3JtYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgcmVjaXBlIGZpbGVuYW1lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHBhdF8yLjAuMS5iYjwvZmlsZW5hbWU+LCB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgIjIuMC4xIi4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gaXMgZ2VuZXJhbGx5IG5vdCBvdmVycmlkZGVuIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICBhIHJlY2lwZSB1bmxlc3MgaXQgaXMgYnVpbGRpbmcgYW4gdW5zdGFibGUgKGkuZS4gZGV2ZWxvcG1lbnQpIHZlcnNpb24gZnJvbSBhIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gR2l0IG9yIFN1YnZlcnNpb24pLgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QWVRIT05fQUJJJz48Z2xvc3N0ZXJtPlBZVEhPTl9BQkk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBZVEhPTl9BQklbZG9jXSA9ICJXaGVuIHVzZWQgYnkgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGRpc3R1dGlsczMsIHNldHVwdG9vbHMzLCBkaXN0dXRpbHMsIG9yIHNldHVwdG9vbHMgY2xhc3NlcywgZGVub3RlcyB0aGUgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSBjdXJyZW50bHkgaW4gdXNlIGZvciBQeXRob24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIGJ5IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29sczMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzJz48ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLCBkZW5vdGVzIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseSBpbiB1c2UgZm9yIFB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIEFCSSBpcyAibSIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBzZXQgdGhpcyB2YXJpYWJsZSBhcyB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBzZXRzIGl0IGZvciB5b3UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIEFCSSB0byBjb25zdHJ1Y3QKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzIHVzZWQgd2hlbiBpbnN0YWxsaW5nIHRoZSBQeXRob24gaGVhZGVycworICAgICAgICAgICAgICAgICAgICBhbmQgbGlicmFyaWVzIGluIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPi4uLi9weXRob24zLjNtLy4uLjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlscyc+PGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkdXJpbmcgY3Jvc3MtYnVpbGRzIGFsc28gdXNlIHRoaXMgdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlIHRoZSBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgb2YgdGhlIGFwcHJvcHJpYXRlIFB5dGhvbgorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBleHRlbnNpb24gaXMgdGFyZ2V0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBZVEhPTl9QTic+PGdsb3NzdGVybT5QWVRIT05fUE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBZVEhPTl9QTltkb2NdID0gIldoZW4gdXNlZCBieSByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZGlzdHV0aWxzMywgc2V0dXB0b29sczMsIGRpc3R1dGlscywgb3Igc2V0dXB0b29scyBjbGFzc2VzLCBzcGVjaWZpZXMgdGhlIG1ham9yIFB5dGhvbiB2ZXJzaW9uIGJlaW5nIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNlZCBieSByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzMyc+PGZpbGVuYW1lPmRpc3R1dGlsczM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMzJz48ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlscyc+PGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+PGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcywgc3BlY2lmaWVzIHRoZSBtYWpvciBQeXRob24gdmVyc2lvbiBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIFB5dGhvbiAyLngsIDxmaWxlbmFtZT5QWVRIT05fUE48L2ZpbGVuYW1lPiB3b3VsZAorICAgICAgICAgICAgICAgICAgICBiZSAicHl0aG9uMiIuICBGb3IgUHl0aG9uIDMueCwgdGhlIHZhcmlhYmxlIHdvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICJweXRob24zIi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIHNldCB0aGlzIHZhcmlhYmxlIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc2V0cyBpdCBmb3IgeW91LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYWxsb3dzIHJlY2lwZXMgdG8gdXNlIGNvbW1vbiBpbmZyYXN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyArPSAiJHtQWVRIT05fUE59LW5hdGl2ZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlIHZlcnNpb24gb2YgdGhlIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgaXMgPGZpbGVuYW1lPlBZVEhPTl9QTjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1xJz48dGl0bGU+UTwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1RTUFLRV9QUk9GSUxFUyc+PGdsb3NzdGVybT5RTUFLRV9QUk9GSUxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUU1BS0VfUFJPRklMRVNbZG9jXSA9ICJTcGVjaWZpZXMgeW91ciBvd24gc3Vic2V0IG9mIC5wcm8gZmlsZXMgdG8gYmUgYnVpbHQgZm9yIHVzZSB3aXRoIHFtYWtlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB5b3VyIG93biBzdWJzZXQgb2YgPGZpbGVuYW1lPi5wcm88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcyB0byBiZSBidWlsdCBmb3IgdXNlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IHRoaXMgdmFyaWFibGUsIGFsbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgcG9pbnRlZCB0bworICAgICAgICAgICAgICAgICAgICBieSA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBidWlsdCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2l0aCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBvciBvdGhlciBjbGFzc2VzIHRoYXQgaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1yJz48dGl0bGU+UjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SQU5MSUInPjxnbG9zc3Rlcm0+UkFOTElCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSQU5MSUJbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3JhbmxpYicuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmFubGliPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUkNPTkZMSUNUUyc+PGdsb3NzdGVybT5SQ09ORkxJQ1RTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSQ09ORkxJQ1RTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBjb25mbGljdCB3aXRoIGFub3RoZXIgcGFja2FnZS4gTm90ZSB0aGF0IHRoZSBwYWNrYWdlIHdpbGwgbm90IGJlIGluc3RhbGxlZCBpZiB0aGUgY29uZmxpY3RpbmcgcGFja2FnZXMgYXJlIG5vdCBmaXJzdCByZW1vdmVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHBhY2thZ2VzIHdpbGwgbm90IGJlIGluc3RhbGxlZCBpZiBjb25mbGljdGluZworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcmUgbm90IGZpcnN0IHJlbW92ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgTGlrZSBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cyB1c2UKKyAgICAgICAgICAgICAgICAgICB0aGVtIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkNPTkZMSUNUU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+YW5vdGhlcl9jb25mbGljdGluZ19wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SQ09ORkxJQ1RTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkNPTkZMSUNUU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIGRlcGVuZGVuY3kgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkNPTkZMSUNUU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SREVQRU5EUyc+PGdsb3NzdGVybT5SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUkRFUEVORFNbZG9jXSA9ICJMaXN0cyBhIHBhY2thZ2UncyBydW50aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciBwYWNrYWdlcykgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgdGhlIHBhY2thZ2UgdG8gYmUgYnVpbHQuIFRoZXkgbXVzdCBiZSB0aGUgbmFtZXMgb2Ygb3RoZXIgcGFja2FnZXMgYXMgbGlzdGVkIGluIHRoZSBQQUNLQUdFUyB2YXJpYWJsZSwgbm90IHJlY2lwZSBuYW1lcyAoUE4pLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKQorICAgICAgICAgICAgICAgICAgICB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGluIG9yZGVyIGZvciB0aGUgYnVpbHQgcGFja2FnZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgICAgICBJZiBhIHBhY2thZ2UgaW4gdGhpcyBsaXN0IGNhbm5vdCBiZSBmb3VuZCBkdXJpbmcgdGhlIGJ1aWxkLAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2lsbCBnZXQgYSBidWlsZCBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiBhIHJlY2lwZSwgeW91IGFyZSBlc3NlbnRpYWxseSBzdGF0aW5nIHRoYXQgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1idWlsZCc+PGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZGVwZW5kcyBvbiB0aGUgZXhpc3RlbmNlIG9mIGEgc3BlY2lmaWMgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAorICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBJUEsgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBhcHBlYXJzIGluIHRoZSAiYSIgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gImIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIGZvciByZWNpcGUgImEiIGRlcGVuZHMKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2lwayc+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfaXBrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyB0aGUgcGFja2FnZSBmaWxlIGZvciAiYiIgbXVzdCBiZSBhdmFpbGFibGUgd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGUgb3V0cHV0IGZvciByZWNpcGUgImEiIGhhcyBiZWVuIGNvbXBsZXRlbHkgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIE1vcmUgaW1wb3J0YW50bHksIHBhY2thZ2UgImEiIHdpbGwgYmUgbWFya2VkIGFzIGRlcGVuZGluZworICAgICAgICAgICAgICAgICAgICBvbiBwYWNrYWdlICJiIiBpbiBhIG1hbm5lciB0aGF0IGlzIHVuZGVyc3Rvb2QgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWVzIG9mIHRoZSBwYWNrYWdlcyB5b3UgbGlzdCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gbXVzdCBiZSB0aGUgbmFtZXMgb2Ygb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgLSB0aGV5IGNhbm5vdCBiZSByZWNpcGUgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHBhY2thZ2UgbmFtZXMgYW5kIHJlY2lwZSBuYW1lcyB1c3VhbGx5IG1hdGNoLAorICAgICAgICAgICAgICAgICAgICB0aGUgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhhdCB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGluZyBwYWNrYWdlIG5hbWVzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIHRoZSBkZWZhdWx0IGxpc3Qgb2YgcGFja2FnZXMgY3JlYXRlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIHRvIHBhY2thZ2VzIGJlaW5nIGJ1aWx0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB3aXRoIGFuIGF0dGFjaGVkIHBhY2thZ2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfS1kZXYgKz0gInBlcmwiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBkZXZlbG9wbWVudCBwYWNrYWdlIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgbmFtZSBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgbmFtZSB5b3UgYXR0YWNoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBtdXN0IGFwcGVhcgorICAgICAgICAgICAgICAgICAgICBhcyBpdCB3b3VsZCBpbiB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlIGJlZm9yZSBhbnkgcmVuYW1pbmcgb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ5CisgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgbGlrZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG1hbnkgY2FzZXMgeW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkCisgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHNpbmNlIHNvbWUgYXV0b21hdGljCisgICAgICAgICAgICAgICAgICAgIGhhbmRsaW5nIG9jY3VyczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNobGliZGVwczwvZmlsZW5hbWU+PC9lbXBoYXNpcz46ICBJZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcnVudGltZSBwYWNrYWdlIGNvbnRhaW5zIGEgc2hhcmVkIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+KSwgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIGRldGVybWluZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyB0byB3aGljaCBpdCBpcyBkeW5hbWljYWxseSBsaW5rZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgYWRkcyB0aGVzZSBsaWJyYXJpZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB3aGVuIGNyZWF0aW5nIHRoZSBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBjZGVwczwvZmlsZW5hbWU+PC9lbXBoYXNpcz46ICBJZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIHNoaXBzIGEgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZpbGUsIHRoZSBidWlsZCBwcm9jZXNzIHVzZXMgdGhpcyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWRkIGl0ZW1zIHRvIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGNyZWF0ZSB0aGUgcnVudGltZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4gKDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+b3BlcmF0b3I8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPQorICAgICAmbHQ7CisgICAgICZndDsKKyAgICAgJmx0Oz0KKyAgICAgJmd0Oz0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgZGVwZW5kZW5jeSBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMnPjxnbG9zc3Rlcm0+UkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCBtdXN0IGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0cm9fZmVhdHVyZXNfY2hlY2snPjxmaWxlbmFtZT5kaXN0cm9fZmVhdHVyZXNfY2hlY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCBtdXN0CisgICAgICAgICAgICAgICAgICAgIGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFUVVJUkVEX0RJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGxpc3RzIGEgZmVhdHVyZSB0aGF0IGRvZXMgbm90IGFwcGVhciBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGFuIGVycm9yIG9jY3VycyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN0b3BzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJNX09MRF9JTUFHRSc+PGdsb3NzdGVybT5STV9PTERfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJNX09MRF9JTUFHRVtkb2NdID0gIlJlY2xhaW1zIGRpc2sgc3BhY2UgYnkgcmVtb3ZpbmcgcHJldmlvdXNseSBidWlsdCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBpbWFnZSBmcm9tIHRoZSBpbWFnZXMgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlIERFUExPWV9ESVIgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMSIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gcmVtb3ZlIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1STV9XT1JLX0VYQ0xVREUnPjxnbG9zc3Rlcm0+Uk1fV09SS19FWENMVURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSTV9XT1JLX0VYQ0xVREVbZG9jXSA9ICJXaXRoIHJtX3dvcmsgZW5hYmxlZCwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhY2thZ2VzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdpdGggPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiBlbmFibGVkLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcmVjaXBlcyB3aG9zZSB3b3JrIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcm0td29yayc+PGZpbGVuYW1lPnJtX3dvcmsuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RfSE9NRSc+PGdsb3NzdGVybT5ST09UX0hPTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RfSE9NRVtkb2NdID0gIkRlZmluZXMgdGhlIHJvb3QgaG9tZSBkaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgcm9vdCBob21lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgaXMgc2V0IGFzIGZvbGxvd3MgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RfSE9NRSA/Pz0gIi9ob21lL3Jvb3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgdmFsdWUgaXMgbGlrZWx5IHVzZWQgYmVjYXVzZSBzb21lCisgICAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2x1dGlvbnMgcHJlZmVyIHRvIGhhdmUgYSByZWFkLW9ubHkgcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBhbmQgcHJlZmVyIHRvIGtlZXAgd3JpdGVhYmxlIGRhdGEgaW4gb25lCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGFueSBsYXllciBvciBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBkZWZhdWx0IGlzIHNldCB1c2luZyBhICJ3ZWFrIiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICAgIChpLmUuICI/Pz0iKSwgeW91IGNhbiB1c2UgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXMKKyAgICAgICAgICAgICAgICAgICAgdG8gZGVmaW5lIHlvdXIgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVF9IT01FID0gIi9yb290IgorICAgICBST09UX0hPTUUgPz0gIi9yb290IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG92ZXJyaWRlIGV4YW1wbGVzIHVzZSA8ZmlsZW5hbWU+L3Jvb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgcHJvYmFibHkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ST09URlMnPjxnbG9zc3Rlcm0+Uk9PVEZTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNbZG9jXSA9ICJJbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ST09URlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBhbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPjxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EJz48Z2xvc3N0ZXJtPlJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNfUE9TVElOU1RBTExfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgaW5zdGFsbGluZyBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBpbnN0YWxsZWQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EJz48Z2xvc3N0ZXJtPlJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0lNQUdFX1JPT1RGU308L2ZpbGVuYW1lPiwgd2hpY2ggcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgdGhhdCBiZWNvbWVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGUyc+PGZpbGVuYW1lPklNQUdFX1JPT1RGUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EJz48Z2xvc3N0ZXJtPlJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHJlbW92YWwgb2YgdW5uZWVkZWQgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgcmVtb3ZlZCB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBkaXNhYmxlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UsIHNldmVyYWwgcGFja2FnZXMgYXJlIHJlbW92ZWQgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLXBhc3N3ZDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hhZG93PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSByb290IGZpbGVzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBST09URlNfUFJFUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSByb290IGZpbGVzeXN0ZW0gcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0lNQUdFX1JPT1RGU308L2ZpbGVuYW1lPiwgd2hpY2ggcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgdGhhdCBiZWNvbWVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGUyc+PGZpbGVuYW1lPklNQUdFX1JPT1RGUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUFJPVklERVMnPjxnbG9zc3Rlcm0+UlBST1ZJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAoYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHBhY2thZ2UncyBvd24gbmFtZSBpcyBpbXBsaWNpdGx5IGFscmVhZHkgaW4gaXRzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCBhbHdheXMKKyAgICAgICAgICAgICAgICAgICB1c2UgdGhlIHZhcmlhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlBST1ZJREVTXyR7UE59ID0gIndpZGdldC1hYmktMiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlJFQ09NTUVORFMnPjxnbG9zc3Rlcm0+UlJFQ09NTUVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mIGEgcGFja2FnZSBiZWluZyBidWlsdC4gVGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgbGlzdCBvZiBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCBuZWVkcyB0aGVtIGZvciB0aGUgZXh0ZW5kZWQgdXNhYmlsaXR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGlzIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGJ1aWxkLCBidXQgcmF0aGVyCisgICAgICAgICAgICAgICAgICAgIHVzZXMgdGhlbSBmb3IgZXh0ZW5kZWQgdXNhYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUbyBzcGVjaWZ5IHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgbWFuYWdlciB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gbGlzdCBvZiBwYWNrYWdlcyB3aGVuCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgdGhlIGJ1aWx0IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gcHJldmVudCBsaXN0ZWQgcGFja2FnZXMgZnJvbSBiZWluZworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYQ0xVREUnPjxmaWxlbmFtZT5QQUNLQUdFX0VYQ0xVREU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gbmVlZCBub3QgYWN0dWFsbHkgYmUKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGEgcmVjaXBlIG11c3QgZXhpc3QgdGhhdCBwcm92aWRlcyBlYWNoIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGZpbGVuYW1lPlBBQ0tBR0VTX0RZTkFNSUM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBvciBhbiBlcnJvciB3aWxsIG9jY3VyIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIElmIHN1Y2ggYSByZWNpcGUgZG9lcyBleGlzdCBhbmQgdGhlIHBhY2thZ2UgaXMgbm90IHByb2R1Y2VkLAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgY29udGludWVzIHdpdGhvdXQgZXJyb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gcGFja2FnZXMgYmVpbmcgYnVpbHQsIHlvdSBzaG91bGQgYWx3YXlzIGF0dGFjaAorICAgICAgICAgICAgICAgICAgICBhbiBvdmVycmlkZSB0byB0aGUgdmFyaWFibGUgdG8gc3BlY2lmeSB0aGUgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHdob3NlIHVzYWJpbGl0eSBpcyBiZWluZyBleHRlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBleHRlbmRlZCB0byBzdXBwb3J0IHdpcmVsZXNzIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRUNPTU1FTkRTXyR7UE59LWRldiArPSAiPHJlcGxhY2VhYmxlPndpcmVsZXNzX3BhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBleGFtcGxlLCB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPn0tZGV2PC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIG11c3QgYXBwZWFyIGFzIGl0IHdvdWxkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgYmVmb3JlIGFueSByZW5hbWluZyBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnkKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBzdWNoIGFzIDxmaWxlbmFtZT5kZWJpYW4uYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLCB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzLCBzdXBwb3J0cworICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5aW5nIHZlcnNpb25lZCByZWNvbW1lbmRzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSByZWNvbW1lbmQgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlJFUExBQ0VTJz48Z2xvc3N0ZXJtPlJSRVBMQUNFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUlJFUExBQ0VTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIHJlcGxhY2VkIGJ5IGEgcGFja2FnZS4gVGhlIHBhY2thZ2UgbWFuYWdlciB1c2VzIHRoaXMgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCB0byByZXBsYWNlIG90aGVyIHBhY2thZ2UocykgZHVyaW5nIGFuIHVwZ3JhZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHBhY2thZ2VzIHJlcGxhY2VkIGJ5IGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgbWFuYWdlciB1c2VzIHRoaXMgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCB0byByZXBsYWNlIG90aGVyIHBhY2thZ2UocykKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGFuIHVwZ3JhZGUuCisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGFsc28gaGF2ZSB0aGUgb3RoZXIgcGFja2FnZShzKSByZW1vdmVkIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIHRpbWUsIHlvdSBtdXN0IGFkZCB0aGUgbmFtZSBvZiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SQ09ORkxJQ1RTJz5SQ09ORkxJQ1RTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCB1c2UKKyAgICAgICAgICAgICAgICAgICB0aGlzIHZhcmlhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVQTEFDRVNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPm90aGVyX3BhY2thZ2VfYmVpbmdfcmVwbGFjZWQ8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIHJlcGxhY2VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggdGhlIHN5bnRheCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBCaXRCYWtlIGhpZGVzIHRoZXNlIGRpZmZlcmVuY2VzIGZyb20geW91LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheCB0byBzcGVjaWZ5IHZlcnNpb25zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVQTEFDRVNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSByZXBsYWNlbWVudCB1c2luZworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVQTEFDRVNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlNVR0dFU1RTJz48Z2xvc3N0ZXJtPlJTVUdHRVNUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUlNVR0dFU1RTW2RvY10gPSAiQSBsaXN0IG9mIGFkZGl0aW9uYWwgcGFja2FnZXMgdGhhdCB5b3UgY2FuIHN1Z2dlc3QgZm9yIGluc3RhbGxhdGlvbiBieSB0aGUgcGFja2FnZSBtYW5hZ2VyIGF0IHRoZSB0aW1lIGEgcGFja2FnZSBpcyBpbnN0YWxsZWQuIE5vdCBhbGwgcGFja2FnZSBtYW5hZ2VycyBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgYWRkaXRpb25hbCBwYWNrYWdlcyB0aGF0IHlvdSBjYW4gc3VnZ2VzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYXQgdGhlIHRpbWUgYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgTm90IGFsbCBwYWNrYWdlIG1hbmFnZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHBhY2thZ2UtY29udHJvbGxpbmcgdmFyaWFibGVzLCB5b3UgbXVzdCBhbHdheXMKKyAgICAgICAgICAgICAgICAgICB1c2UgdGhpcyB2YXJpYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIGEgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlNVR0dFU1RTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT51c2VmdWxfcGFja2FnZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5hbm90aGVyX3BhY2thZ2U8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXMnPjx0aXRsZT5TPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVMnPjxnbG9zc3Rlcm0+UzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZXJlIHVucGFja2VkIHBhY2thZ2Ugc291cmNlIGNvZGUgcmVzaWRlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgdW5wYWNrZWQgcmVjaXBlIHNvdXJjZSBjb2RlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gaXMgd2l0aGluIHRoZSB3b3JrIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHN0YXRpYy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHVucGFja2VkIHNvdXJjZSBsb2NhdGlvbiBkZXBlbmRzIG9uIHRoZSByZWNpcGUgbmFtZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+PC9maWxlbmFtZT4pIGFuZAorICAgICAgICAgICAgICAgICAgICByZWNpcGUgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+UFY8L2xpbms+PC9maWxlbmFtZT4pIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS8ke1BOfS0ke1BWfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0b3AtbGV2ZWwgZm9sZGVyIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBCdWlsZCBEaXJlY3RvcnkgYXQgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIGtlZXAgdGhlIHVucGFja2VkIHJlY2lwZSBmb3IgPGZpbGVuYW1lPmRiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9kYi81LjEuMTktcjMvZGItNS4xLjE5CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTJz48Z2xvc3N0ZXJtPlNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGNvbW1hbmQtbGluZSB1dGlsaXRpZXMgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBmb3IgZHVyaW5nIHRoZSBpbml0aWFsIHNhbml0eSBjaGVja2luZyBwcm9jZXNzIHdoZW4gcnVubmluZyBCaXRCYWtlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIHV0aWxpdGllcyB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICBjaGVja2VkIGZvciBkdXJpbmcgdGhlIGluaXRpYWwgc2FuaXR5IGNoZWNraW5nIHByb2Nlc3Mgd2hlbgorICAgICAgICAgICAgICAgICAgICBydW5uaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIElmIGFueSBvZiB0aGUgdXRpbGl0aWVzIGFyZSBub3QgaW5zdGFsbGVkIG9uIHRoZSBidWlsZCBob3N0LAorICAgICAgICAgICAgICAgICAgICB0aGVuIEJpdEJha2UgaW1tZWRpYXRlbHkgZXhpdHMgd2l0aCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TQU5JVFlfVEVTVEVEX0RJU1RST1MnPjxnbG9zc3Rlcm0+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTQU5JVFlfVEVTVEVEX0RJU1RST1NbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0aW9uIGlkZW50aWZpZXJzIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0aW9uIGlkZW50aWZpZXJzIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdC4KKyAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcnMgY29uc2lzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRvciBJRAorICAgICAgICAgICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgcmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgYXMgcmVwb3J0ZWQgYnkgdGhlIDxmaWxlbmFtZT5sc2JfcmVsZWFzZTwvZmlsZW5hbWU+IHRvb2wKKyAgICAgICAgICAgICAgICAgICAgb3IgYXMgcmVhZCBmcm9tIDxmaWxlbmFtZT4vZXRjL2xzYi1yZWxlYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlIHRoZSBsaXN0IGl0ZW1zIHdpdGggZXhwbGljaXQgbmV3bGluZQorICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzICg8ZmlsZW5hbWU+XG48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2ZpbGVuYW1lPiBpcyBub3QgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OQVRJVkVMU0JTVFJJTkcnPjxmaWxlbmFtZT5OQVRJVkVMU0JTVFJJTkc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LCB0aGVuIHRoZSBidWlsZCBzeXN0ZW0gcmVwb3J0cworICAgICAgICAgICAgICAgICAgICBhIHdhcm5pbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgaG9zdCBkaXN0cmlidXRpb24gaGFzCisgICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIHRlc3RlZCBhcyBhIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX0FSQ0gnPjxnbG9zc3Rlcm0+U0RLX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19BUkNIW2RvY10gPSAiVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGRvIG5vdCBkaXJlY3RseSBzZXQgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgdXNlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfREVQTE9ZJz48Z2xvc3N0ZXJtPlNES19ERVBMT1k8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19ERVBMT1lbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHNldCB1cCBhbmQgdXNlZCBieSB0aGUgcG9wdWxhdGVfc2RrX2Jhc2UgdG8gd2hpY2ggdGhlIFNESyBpcyBkZXBsb3llZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHNldCB1cCBhbmQgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdG8gd2hpY2ggdGhlIFNESyBpcyBkZXBsb3llZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+IGNsYXNzIGRlZmluZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNES19ERVBMT1k8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19ERVBMT1kgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz5UTVBESVI8L2xpbms+fS9kZXBsb3kvc2RrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX0RJUic+PGdsb3NzdGVybT5TREtfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfRElSW2RvY10gPSAiVGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGRlZmluZXMgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX0RJUiA9ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPn0vc2RrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBkaXJlY3RvcnkgYXMgaXQgaXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBvdXRwdXQgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RFUExPWSc+PGZpbGVuYW1lPlNES19ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfSE9TVF9NQU5JRkVTVCc+PGdsb3NzdGVybT5TREtfSE9TVF9NQU5JRkVTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX0hPU1RfTUFOSUZFU1RbZG9jXSA9ICJUaGUgbWFuaWZlc3QgZmlsZSBmb3IgdGhlIGhvc3QgcGFydCBvZiB0aGUgU0RLLiBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSBob3N0IHBhcnQgb2YgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFuaWZlc3QgZmlsZSBmb3IgdGhlIGhvc3QgcGFydCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwCisgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0IHBhcnQgb2YgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBjb250YWlucyBwYWNrYWdlIGluZm9ybWF0aW9uIG9uIGEgbGluZS1wZXItcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiYXNpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYWNrYWdlbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlYXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSBtYW5pZmVzdCBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX0hPU1RfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5ob3N0Lm1hbmlmZXN0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBkZXJpdmVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RFUExPWSc+PGZpbGVuYW1lPlNES19ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UT09MQ0hBSU5fT1VUUFVUTkFNRSc+PGZpbGVuYW1lPlRPT0xDSEFJTl9PVVRQVVROQU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfTkFNRSc+PGdsb3NzdGVybT5TREtfTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIGZvciBTREsgb3V0cHV0IGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIG5hbWUgZm9yIFNESyBvdXRwdXQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+PGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRDTElCQyc+PGZpbGVuYW1lPlRDTElCQzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19BUkNIJz48ZmlsZW5hbWU+U0RLX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9CQVNFTkFNRSc+PGZpbGVuYW1lPklNQUdFX0JBU0VOQU1FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX05BTUUgPSAiJHtESVNUUk99LSR7VENMSUJDfS0ke1NES19BUkNIfS0ke0lNQUdFX0JBU0VOQU1FfS0ke1RVTkVfUEtHQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfT1MnPjxnbG9zc3Rlcm0+U0RLX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfT1NbZG9jXSA9ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSBmb3Igd2hpY2ggdGhlIFNESyB3aWxsIGJlIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmb3Igd2hpY2ggdGhlIFNESworICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX09TJz48ZmlsZW5hbWU+QlVJTERfT1M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX09VVFBVVCc+PGdsb3NzdGVybT5TREtfT1VUUFVUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfT1VUUFVUW2RvY10gPSAiVGhlIGxvY2F0aW9uIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlbiBjcmVhdGluZyBTREsgb3V0cHV0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZGVmaW5lcyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfT1VUUFVUID0gIiR7PGxpbmsgbGlua2VuZD0ndmFyLVNES19ESVInPlNES19ESVI8L2xpbms+fS9pbWFnZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U0RLX09VVFBVVDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFzIGl0IGlzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gYnkgd2F5IG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIG91dHB1dCBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19QQUNLQUdFX0FSQ0hTJz48Z2xvc3N0ZXJtPlNES19QQUNLQUdFX0FSQ0hTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfUEFDS0FHRV9BUkNIU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIFNESyBtYWNoaW5lLiBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGFuZCBzaG91bGQgbm90IG5vcm1hbGx5IGJlIGhhbmQtZWRpdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNESyBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGFuZCBzaG91bGQgbm90CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IGJlIGhhbmQtZWRpdGVkLgorICAgICAgICAgICAgICAgICAgICBFbnRyaWVzIGFyZSBzZXBhcmF0ZWQgdXNpbmcgc3BhY2VzIGFuZCBsaXN0ZWQgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX1BBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPiBpcyAiYWxsIGFueSBub2FyY2gKKyAgICAgICAgICAgICAgICAgICAgJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfUE9TVFBST0NFU1NfQ09NTUFORCc+PGdsb3NzdGVybT5TREtfUE9TVFBST0NFU1NfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfUE9TVFBST0NFU1NfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyBhbiBTREsgcGF0aCB0byBhIGNvbW1hbmQgd2l0aGluIGEKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NES19ESVJ9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+PGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1BSRUZJWCc+PGdsb3NzdGVybT5TREtfUFJFRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfUFJFRklYW2RvY10gPSAiVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IHVzZWQgZm9yIG5hdGl2ZXNkayByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmVzZGsgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNES19QUkVGSVg8L2ZpbGVuYW1lPiB2YWx1ZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfUFJFRklYJz48ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtTREtfU1lTfS0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19TWVMnPjxnbG9zc3Rlcm0+U0RLX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1NZU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aGljaCB0aGUgU0RLIHdpbGwgYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSwgZm9yIHdoaWNoIHRoZSBTREsgd2lsbCBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19BUkNIJz48ZmlsZW5hbWU+U0RLX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfVkVORE9SJz48ZmlsZW5hbWU+U0RLX1ZFTkRPUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfT1MnPjxmaWxlbmFtZT5TREtfT1M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBzZXQgdGhlIDxmaWxlbmFtZT5TREtfU1lTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1RBUkdFVF9NQU5JRkVTVCc+PGdsb3NzdGVybT5TREtfVEFSR0VUX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfVEFSR0VUX01BTklGRVNUW2RvY10gPSAiVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLiBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgdGFyZ2V0IHBhcnQgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGxpc3RzIGFsbCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIHRoYXQgbWFrZSB1cAorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHBhcnQgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgY29udGFpbnMgcGFja2FnZSBpbmZvcm1hdGlvbiBvbiBhIGxpbmUtcGVyLXBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgYmFzaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZWFyY2g8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZGVmaW5lcyB0aGUgbWFuaWZlc3QgZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXJnZXQubWFuaWZlc3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGlzIGRlcml2ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9PVVRQVVROQU1FJz48ZmlsZW5hbWU+VE9PTENIQUlOX09VVFBVVE5BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19WRU5ET1InPjxnbG9zc3Rlcm0+U0RLX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1ZFTkRPUltkb2NdID0gIlNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgU0RLIHZlbmRvci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIFNESyB2ZW5kb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1ZFUlNJT04nPjxnbG9zc3Rlcm0+U0RLX1ZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19WRVJTSU9OW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS5jb25mPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIDxmaWxlbmFtZT5TREtfVkVSU0lPTjwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX1ZFUlNJT04gOj0gIiR7QCcke0RJU1RST19WRVJTSU9OfScucmVwbGFjZSgnc25hcHNob3QtJHtEQVRFfScsJ3NuYXBzaG90Jyl9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fVkVSU0lPTic+PGZpbGVuYW1lPkRJU1RST19WRVJTSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREFURSc+PGZpbGVuYW1lPkRBVEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES0lNQUdFX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPlNES0lNQUdFX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtJTUFHRV9GRUFUVVJFU1tkb2NdID0gIkVxdWl2YWxlbnQgdG8gSU1BR0VfRkVBVFVSRVMuIEhvd2V2ZXIsIHRoaXMgdmFyaWFibGUgYXBwbGllcyB0byB0aGUgU0RLIGdlbmVyYXRlZCBmcm9tIGFuIGltYWdlIHVzaW5nIHRoZSBjb21tYW5kICdiaXRiYWtlIC1jIHBvcHVsYXRlX3NkayBpbWFnZW5hbWUnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+SU1BR0VfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgdmFyaWFibGUgYXBwbGllcyB0byB0aGUgU0RLIGdlbmVyYXRlZCBmcm9tIGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgcG9wdWxhdGVfc2RrIDxyZXBsYWNlYWJsZT5pbWFnZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLTUFDSElORSc+PGdsb3NzdGVybT5TREtNQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtNQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFjaGluZSBmb3Igd2hpY2ggdGhlIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQKKyAgICAgICAgICAgICAgICAgICAgKEFEVCkgb3IgU0RLIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIFNESyBvciBBRFQgaXMgYnVpbHQgc3VjaCB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgIHJ1bnMgb24gdGhlIHRhcmdldCB5b3Ugc3BlY2lmeSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgcG9pbnRzIHRvIGEgY29ycmVzcG9uZGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHVuZGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL21hY2hpbmUtc2RrLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgImk2ODYiIGFuZCAieDg2XzY0IiBhcyBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHZhcmlhYmxlLiBUaGUgdmFyaWFibGUgZGVmYXVsdHMgdG8gImk2ODYiCisgICAgICAgICAgICAgICAgICAgICBhbmQgaXMgc2V0IGluIHRoZSBsb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLTUFDSElORSA/PSAiaTY4NiIKKyAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3Qgc2V0IHRoZSA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4geW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbywgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBub3QgdGFrZSBhZmZlY3QuCisgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLUEFUSCc+PGdsb3NzdGVybT5TREtQQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtQQVRIW2RvY10gPSAiRGVmaW5lcyB0aGUgcGF0aCBvZmZlcmVkIHRvIHRoZSB1c2VyIGZvciBpbnN0YWxsYXRpb24gb2YgdGhlIFNESyB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBwYXRoIG9mZmVyZWQgdG8gdGhlIHVzZXIgZm9yIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBpbnN0YWxsaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBTREsgd2hlbiB5b3UgcnVuIHRoZSBTREsncyBpbnN0YWxsYXRpb24gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBvZmZlcmVkIHBhdGggd2hlbiB5b3UgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICBzY3JpcHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLVEFSR0VUU1lTUk9PVCc+PGdsb3NzdGVybT5TREtUQVJHRVRTWVNST09UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtUQVJHRVRTWVNST09UW2RvY10gPSAiRnVsbCBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIHdpdGhpbiBhbiBTREsgYXMgaXQgd2lsbCBiZSB3aGVuIGluc3RhbGxlZCBpbnRvIHRoZSBkZWZhdWx0IFNES1BBVEguIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bGwgcGF0aCB0byB0aGUgc3lzcm9vdCB1c2VkIGZvciBjcm9zcy1jb21waWxhdGlvbgorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYW4gU0RLIGFzIGl0IHdpbGwgYmUgd2hlbiBpbnN0YWxsZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLUEFUSCc+PGZpbGVuYW1lPlNES1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VDVElPTic+PGdsb3NzdGVybT5TRUNUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRUNUSU9OW2RvY10gPSAiVGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLiBQYWNrYWdlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBtYWtlIHVzZSBvZiB0aGlzIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWN0aW9uIGluIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBjYXRlZ29yaXplZC4KKyAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBtYW5hZ2VtZW50IHV0aWxpdGllcyBjYW4gbWFrZSB1c2Ugb2YgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TRUxFQ1RFRF9PUFRJTUlaQVRJT04nPjxnbG9zc3Rlcm0+U0VMRUNURURfT1BUSU1JWkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRUxFQ1RFRF9PUFRJTUlaQVRJT05bZG9jXSA9ICJUaGUgdmFyaWFibGUgdGFrZXMgdGhlIHZhbHVlIG9mIEZVTExfT1BUSU1JWkFUSU9OIHVubGVzcyBERUJVR19CVUlMRCA9ICcxJy4gSW4gdGhpcyBjYXNlLCB0aGUgdmFsdWUgb2YgREVCVUdfT1BUSU1JWkFUSU9OIGlzIHVzZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFncyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0ZMQUdTJz48ZmlsZW5hbWU+VEFSR0VUX0NGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0YWtlcyB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1GVUxMX09QVElNSVpBVElPTic+RlVMTF9PUFRJTUlaQVRJT048L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdW5sZXNzIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVCVUdfQlVJTEQnPkRFQlVHX0JVSUxEPC9saW5rPjwvZmlsZW5hbWU+ID0gIjEiLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERUJVR19PUFRJTUlaQVRJT04nPkRFQlVHX09QVElNSVpBVElPTjwvbGluaz48L2ZpbGVuYW1lPiBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFUklBTF9DT05TT0xFJz48Z2xvc3N0ZXJtPlNFUklBTF9DT05TT0xFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRVJJQUxfQ09OU09MRVtkb2NdID0gIlRoZSBzcGVlZCBhbmQgZGV2aWNlIGZvciB0aGUgc2VyaWFsIHBvcnQgdXNlZCB0byBhdHRhY2ggdGhlIHNlcmlhbCBjb25zb2xlLiBUaGlzIHZhcmlhYmxlIGlzIGdpdmVuIHRvIHRoZSBrZXJuZWwgYXMgdGhlICdjb25zb2xlJyBwYXJhbWV0ZXIuIEFmdGVyIGJvb3Rpbmcgb2NjdXJzLCBnZXR0eSBpcyBzdGFydGVkIG9uIHRoYXQgcG9ydCBzbyByZW1vdGUgbG9naW4gaXMgcG9zc2libGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBhIHNlcmlhbCBjb25zb2xlIChUVFkpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHRoZSBiYXVkIHJhdGUgZm9sbG93ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIFRUWSBkZXZpY2UgbmFtZSBzZXBhcmF0ZWQgYnkgYSBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgVFRZIGRldmljZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNFUklBTF9DT05TT0xFPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGRlcHJlY2F0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFUklBTF9DT05TT0xFUyc+PGZpbGVuYW1lPlNFUklBTF9DT05TT0xFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TRVJJQUxfQ09OU09MRVMnPjxnbG9zc3Rlcm0+U0VSSUFMX0NPTlNPTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTRVJJQUxfQ09OU09MRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzZXJpYWwgY29uc29sZXMgKFRUWXMpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzZXJpYWwgY29uc29sZXMgKFRUWXMpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHRoZSBiYXVkIHJhdGUgZm9sbG93ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIFRUWSBkZXZpY2UgbmFtZSBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24uCisgICAgICAgICAgICAgICAgICAgIFVzZSBzcGFjZXMgdG8gc2VwYXJhdGUgbXVsdGlwbGUgZGV2aWNlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFUklBTF9DT05TT0xFU19DSEVDSyc+PGdsb3NzdGVybT5TRVJJQUxfQ09OU09MRVNfQ0hFQ0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFUklBTF9DT05TT0xFU19DSEVDS1tkb2NdID0gIlNpbWlsYXIgdG8gU0VSSUFMX0NPTlNPTEVTIGV4Y2VwdCB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbmFibGUgaXQuIFN1cHBvcnRlZCBvbmx5IGJ5IFN5c1Zpbml0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNpbWlsYXIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFUklBTF9DT05TT0xFUyc+PGZpbGVuYW1lPlNFUklBTF9DT05TT0xFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgdGhlIGRldmljZSBpcyBjaGVja2VkIGZvciBleGlzdGVuY2UgYmVmb3JlIGF0dGVtcHRpbmcKKyAgICAgICAgICAgICAgICAgICAgdG8gZW5hYmxlIGl0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCB3aXRoIFN5c1Zpbml0CisgICAgICAgICAgICAgICAgICAgIChpLmUuIG5vdCB3aXRoIHN5c3RlbWQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMnPjxnbG9zc3Rlcm0+U0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQU1tkb2NdID0gIkEgbGlzdCBvZiByZWNpcGUgZGVwZW5kZW5jaWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGRldGVybWluZSBzaWduYXR1cmVzIG9mIHRhc2tzIGZyb20gb25lIHJlY2lwZSB3aGVuIHRoZXkgZGVwZW5kIG9uIHRhc2tzIGZyb20gYW5vdGhlciByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY2lwZSBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHNpZ25hdHVyZXMgb2YgdGFza3MgZnJvbSBvbmUgcmVjaXBlIHdoZW4gdGhleQorICAgICAgICAgICAgICAgICAgICBkZXBlbmQgb24gdGFza3MgZnJvbSBhbm90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTICs9ICJpbnRvbmUtPm1wbGF5ZXIyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPmludG9uZTwvZmlsZW5hbWU+IGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1wbGF5ZXIyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVzZSBvZiB0aGlzIHZhcmlhYmxlIGlzIG9uZSBtZWNoYW5pc20gdG8gcmVtb3ZlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICB0aGF0IGFmZmVjdCB0YXNrIHNpZ25hdHVyZXMgYW5kIHRodXMgZm9yY2UgcmVidWlsZHMgd2hlbiBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Q2F1dGlvbjwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYWRkIGFuIGluYXBwcm9wcmlhdGUgZGVwZW5kZW5jeSBmb3IgYSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcCwgdGhlIHNvZnR3YXJlIG1pZ2h0IGJyZWFrIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSBpZiB0aGUgaW50ZXJmYWNlIG9mIHRoZSBzZWNvbmQgcmVjaXBlIHdhcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBhZnRlciB0aGUgZmlyc3QgcmVjaXBlIGhhZCBiZWVuIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUnPjxnbG9zc3Rlcm0+U0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNJR0dFTl9FWENMVURFUkVDSVBFU19BQklTQUZFW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdGhhdCBhcmUgY29tcGxldGVseSBzdGFibGUgYW5kIHdpbGwgbmV2ZXIgY2hhbmdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiByZWNpcGVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgc3RhYmxlIGFuZCB3aWxsCisgICAgICAgICAgICAgICAgICAgIG5ldmVyIGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEFCSSBmb3IgdGhlIHJlY2lwZXMgaW4gdGhlIGxpc3QgYXJlIHByZXNlbnRlZCBieQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZnJvbSB0aGUgdGFza3MgcnVuIHRvIGJ1aWxkIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFVzZSBvZiB0aGlzIHZhcmlhYmxlIGlzIG9uZSB3YXkgdG8gcmVtb3ZlIGRlcGVuZGVuY2llcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIG9uZSByZWNpcGUgb24gYW5vdGhlciB0aGF0IGFmZmVjdCB0YXNrIHNpZ25hdHVyZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRodXMgZm9yY2UgcmVidWlsZHMgd2hlbiB0aGUgcmVjaXBlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5DYXV0aW9uPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhZGQgYW4gaW5hcHByb3ByaWF0ZSB2YXJpYWJsZSB0byB0aGlzIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc29mdHdhcmUgbWlnaHQgYnJlYWsgYXQgcnVudGltZSBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBvZiB0aGUgcmVjaXBlIHdhcyBjaGFuZ2VkIGFmdGVyIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgaGFkIGJlZW4gYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TSVRFSU5GT19CSVRTJz48Z2xvc3N0ZXJtPlNJVEVJTkZPX0JJVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNJVEVJTkZPX0JJVFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSBDUFUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0gQ1BVLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAiMzIiIG9yICI2NCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0lURUlORk9fRU5ESUFOTkVTUyc+PGdsb3NzdGVybT5TSVRFSU5GT19FTkRJQU5ORVNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTSVRFSU5GT19FTkRJQU5ORVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbmRpYW4gYnl0ZSBvcmRlciBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhlIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgJ2xlJyBmb3IgJ2xpdHRsZS1lbmRpYW4nIG9yICdiZScgZm9yICdiaWctZW5kaWFuJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGVuZGlhbiBieXRlIG9yZGVyIG9mIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAibGUiIGZvciBsaXR0bGUtZW5kaWFuIG9yICJiZSIgZm9yIGJpZy1lbmRpYW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09DX0ZBTUlMWSc+PGdsb3NzdGVybT5TT0NfRkFNSUxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTT0NfRkFNSUxZW2RvY10gPSAiR3JvdXBzIHRvZ2V0aGVyIG1hY2hpbmVzIGJhc2VkIHVwb24gdGhlIHNhbWUgZmFtaWx5IG9mIFNPQyAoU3lzdGVtIE9uIENoaXApLiBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29tbW9uIC5pbmMgZmlsZSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9mIGFsbCB0aGUgbWFjaGluZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgR3JvdXBzIHRvZ2V0aGVyIG1hY2hpbmVzIGJhc2VkIHVwb24gdGhlIHNhbWUgZmFtaWx5CisgICAgICAgICAgICAgICAgICAgIG9mIFNPQyAoU3lzdGVtIE9uIENoaXApLgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29tbW9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4gZmlsZSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIG9mIGFsbCB0aGUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHZhcmlhYmxlIHRvIGFwcGVhciBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVPVkVSUklERVMnPjxmaWxlbmFtZT5NQUNISU5FT1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09MSUJTJz48Z2xvc3N0ZXJtPlNPTElCUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU09MSUJTW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciBzaGFyZWQgbGlicmFyaWVzIHVzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHNoYXJlZCBsaWJyYXJpZXMgdXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHBsYXRmb3JtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHN1ZmZpeCBpcyAiLnNvLioiIGZvciBhbGwgTGludXgtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyBhbmQgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHNlZSB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZWQgaW4gdGhlIGRlZmF1bHQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNPTElCU0RFVic+PGdsb3NzdGVybT5TT0xJQlNERVY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPTElCU0RFVltkb2NdID0gIkRlZmluZXMgdGhlIHN1ZmZpeCBmb3IgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgc3VmZml4IGZvciB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgICAgICAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBzdWZmaXggaXMgIi5zbyIgZm9yIExpbnV4LWJhc2VkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgYW5kIGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBzZWUgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VkIGluIHRoZSBkZWZhdWx0IHZhbHVlcworICAgICAgICAgICAgICAgICAgICBvZiA8ZmlsZW5hbWU+RklMRVNfJHtQTn0tZGV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09VUkNFX01JUlJPUl9GRVRDSCc+PGdsb3NzdGVybT5TT1VSQ0VfTUlSUk9SX0ZFVENIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTT1VSQ0VfTUlSUk9SX0ZFVENIW2RvY10gPSAiU2V0IGFzIHBhcnQgb2YgYSBzb3VyY2UgbWlycm9yIGdlbmVyYXRpb24gc2NyaXB0IHRvIHNraXAgQ09NUEFUSUJMRV9NQUNISU5FIGFuZCBDT01QQVRJQkxFX0hPU1QgY2hlY2tzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGFyZSBmZXRjaGluZyBmaWxlcyB0byBjcmVhdGUgYSBtaXJyb3Igb2Ygc291cmNlcworICAgICAgICAgICAgICAgICAgICAoaS5lLiBjcmVhdGluZyBhIHNvdXJjZSBtaXJyb3IpLCBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX0ZFVENIPC9maWxlbmFtZT4gdG8gIjEiIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgZW5zdXJlcworICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGZvciBhbGwgcmVjaXBlcyBhcmUgZmV0Y2hlZCByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IGEgcmVjaXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQSByZWNpcGUgaXMgY29uc2lkZXJlZCBpbmNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgbWFjaGluZSB3aGVuIGVpdGhlciBvciBib3RoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09NUEFUSUJMRV9IT1NUJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9IT1NUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBzcGVjaWZ5IGNvbXBhdGliaWxpdHkgd2l0aCBhIG1hY2hpbmUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiB0aGF0IG9mIHRoZSBjdXJyZW50IG1hY2hpbmUgb3IgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPldhcm5pbmc8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX0ZFVENIPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubGVzcyB5b3UgYXJlIGNyZWF0aW5nIGEgc291cmNlIG1pcnJvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBkbyBub3Qgc2V0IHRoZSB2YXJpYWJsZSBkdXJpbmcgYQorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09VUkNFX01JUlJPUl9VUkwnPjxnbG9zc3Rlcm0+U09VUkNFX01JUlJPUl9VUkw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPVVJDRV9NSVJST1JfVVJMW2RvY10gPSAiVVJMIHRvIHNvdXJjZSBtaXJyb3IgdGhhdCB3aWxsIGJlIHVzZWQgYmVmb3JlIGZldGNoaW5nIGZyb20gb3JpZ2luYWwgU1JDX1VSSS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHRvIGZpcnN0IGZldGNoIHNvdXJjZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBmZXRjaAorICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSB1cHN0cmVhbSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhpcyB2YXJpYWJsZSwgeW91IG11c3QgZ2xvYmFsbHkgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtb3duLW1pcnJvcnMnPjxmaWxlbmFtZT5vd24tbWlycm9yczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgdGhlbiBwcm92aWRlIHRoZSBVUkwgdG8geW91ciBtaXJyb3JzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJvd24tbWlycm9ycyIKKyAgICAgU09VUkNFX01JUlJPUl9VUkwgPSAiaHR0cDovLzxyZXBsYWNlYWJsZT5leGFtcGxlPC9yZXBsYWNlYWJsZT4uY29tLzxyZXBsYWNlYWJsZT5teV9zb3VyY2VfbWlycm9yPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgb25seSBhIHNpbmdsZSBVUkwgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX1VSTDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1BEWExJQ0VOU0VNQVAnPjxnbG9zc3Rlcm0+U1BEWExJQ0VOU0VNQVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNQRFhMSUNFTlNFTUFQW2RvY10gPSAiTWFwcyBjb21tb25seSB1c2VkIGxpY2Vuc2UgbmFtZXMgdG8gdGhlaXIgU1BEWCBjb3VudGVycGFydHMgZm91bmQgaW4gbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIE1hcHMgY29tbW9ubHkgdXNlZCBsaWNlbnNlIG5hbWVzIHRvIHRoZWlyIFNQRFggY291bnRlcnBhcnRzCisgICAgICAgICAgICAgICAgICAgIGZvdW5kIGluIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5TUERYTElDRU5TRU1BUDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbGljZW5zZXMuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUEVDSUFMX1BLR1NVRkZJWCc+PGdsb3NzdGVybT5TUEVDSUFMX1BLR1NVRkZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1BFQ0lBTF9QS0dTVUZGSVhbZG9jXSA9ICJBIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIFBOIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIHZhcmlhbnRzIG9mIHJlY2lwZXMgb3IgcGFja2FnZXMuIFRoZSBsaXN0IHNwZWNpZmllcyB0aGUgcHJlZml4ZXMgdG8gc3RyaXAgb2ZmIGR1cmluZyBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQlBOIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwcmVmaXhlcyBmb3IgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgdmFyaWFudHMgb2YgcmVjaXBlcyBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgc3BlY2lmaWVzIHRoZSBwcmVmaXhlcyB0byBzdHJpcCBvZmYgZHVyaW5nIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSA8bGluayBsaW5rZW5kPSd2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ19VUkknPjxnbG9zc3Rlcm0+U1JDX1VSSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1JDX1VSSVtkb2NdID0gIlRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4gVGhpcyB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGF0IGJpdHMgdG8gcHVsbCBpbiBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtIGluLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGljaCBiaXRzCisgICAgICAgICAgICAgICAgICAgIHRvIHB1bGwgaW4gZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbSBpbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgb25seSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBmZXRjaCBhIHRhcmJhbGwgZnJvbSB0aGUgSW50ZXJuZXQsIHRoZSByZWNpcGUgb3IKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUgdXNlcyBhIHNpbmdsZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LgorICAgICAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBmZXRjaCBhIHRhcmJhbGwsIGFwcGx5IHR3byBwYXRjaGVzLCBhbmQgaW5jbHVkZSBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICBmaWxlLCB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIHdvdWxkIGluY2x1ZGUgZm91cgorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZXhwbGFpbnMgdGhlIGF2YWlsYWJsZSBVUkkgcHJvdG9jb2xzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoZXMgZmlsZXMsIHdoaWNoIGFyZSB1c3VhbGx5IGZpbGVzIHNoaXBwZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMsIGluIG9yZGVyLCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBkaXJlY3Rvcmllcywgd2hpY2ggYXJlIGFzc3VtZWQgdG8gYmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2lkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+JHtCUE59PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSByZWNpcGUgbmFtZSB3aXRob3V0IGFueSBzcGVjaWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXggb3IgdmVyc2lvbiBudW1iZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPiR7QlB9PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItQlBOJz5CUE48L2xpbms+fS0ke1BWfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBzcGVjaWFsIHBhY2thZ2UgbmFtZSBzdWZmaXguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5maWxlcyAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVzIHdpdGhpbiBhIGRpcmVjdG9yeSwgd2hpY2ggaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlczwvZmlsZW5hbWU+IGFuZCBpcyBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbG9uZ3NpZGUgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGUgYnVpbGQgc3lzdGVtIHRvIHBpY2sgdXAgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHRocm91Z2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBmcm9tIHlvdXIgYXBwZW5kIGZpbGUsIHlvdSBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cmUgdG8gZXh0ZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYnkgYWxzbyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmcm9tIHdpdGhpbiB5b3VyIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhemFhciByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+b3NjOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIE9TQyAoT3BlblNVU0UgQnVpbGQgc2VydmljZSkgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cmVwbzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcG8gKEdpdCkgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNjcmM6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGZXRjaGVzIGZpbGVzIGZyb20gYSBDbGVhckNhc2UgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEludGVybmV0IHVzaW5nIDxmaWxlbmFtZT5odHRwPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5odHRwczovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgPGZpbGVuYW1lPmh0dHBzPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5mdHA6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIEludGVybmV0IHVzaW5nIDxmaWxlbmFtZT5mdHA8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmN2czovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIENWUyByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5oZzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIE1lcmN1cmlhbCAoPGZpbGVuYW1lPmhnPC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnA0Oi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgUGVyZm9yY2UgKDxmaWxlbmFtZT5wNDwvZmlsZW5hbWU+KSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zc2g6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzZWN1cmUgc2hlbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdm46Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBTdWJ2ZXJzaW9uICg8ZmlsZW5hbWU+c3ZuPC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIGFuZCByZWNpcGUtc3BlY2lmaWMgb3B0aW9ucyBmb3IgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBleGlzdC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc3RhbmRhcmQgb3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmFwcGx5PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFdoZXRoZXIgdG8gYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGF0Y2ggb3Igbm90LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byBhcHBseSB0aGUgcGF0Y2guPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdHJpcGxldmVsPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBsZXZlbCB0byB1c2Ugd2hlbiBhcHBseWluZyB0aGUgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgbGV2ZWwgaXMgMS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBhdGNoZGlyPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHBhdGNoIHNob3VsZCBiZSBhcHBsaWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIG9wdGlvbnMgc3BlY2lmaWMgdG8gcmVjaXBlcyBidWlsZGluZyBjb2RlIGZyb20gYSByZXZpc2lvbiBjb250cm9sIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1pbmRhdGU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBseSB0aGUgcGF0Y2ggb25seSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNEQVRFJz48ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA8ZmlsZW5hbWU+bWluZGF0ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWF4ZGF0ZTwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgbGF0ZXIgdGhhbiA8ZmlsZW5hbWU+bWluZGF0ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWlucmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDxmaWxlbmFtZT5taW5yZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1heHJldjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBsYXRlciB0aGFuIDxmaWxlbmFtZT5tYXhyZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJldjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGVxdWFsIHRvIDxmaWxlbmFtZT5yZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm5vdHJldjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBlcXVhbCB0byA8ZmlsZW5hbWU+cmV2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgb3B0aW9ucyB3b3J0aCBtZW50aW9uaW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IENvbnRyb2xzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgdG8gdW5wYWNrIHRoZSBmaWxlIGlmIGl0IGlzIGFuIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHVucGFjayB0aGUgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN1YmRpcjwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBQbGFjZXMgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgZXh0cmFjdHMgaXRzIGNvbnRlbnRzKSBpbnRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgdW51c3VhbCB0YXJiYWxscyBvciBvdGhlciBhcmNoaXZlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGhhdmUgdGhlaXIgZmlsZXMgYWxyZWFkeSBpbiBhIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSB0byBiZSB1c2VkIGZvciBhc3NvY2lhdGlvbiB3aXRoIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gY2hlY2tzdW1zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGZpbGUgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb3dubG9hZGZpbGVuYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlbmFtZSB1c2VkIHdoZW4gc3RvcmluZyB0aGUgZG93bmxvYWRlZCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0gnPjxnbG9zc3Rlcm0+U1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0hbZG9jXSA9ICJCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlciBTUkNfVVJJIGNvbnRhaW5zIGZpbGVzIHRoYXQgYXJlIG1hY2hpbmUtc3BlY2lmaWMuIElmIHNvLCB0aGUgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBQQUNLQUdFX0FSQ0guIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAnMCcgZGlzYWJsZXMgdGhpcyBiZWhhdmlvci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPlNSQ19VUkk8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgZmlsZXMgdGhhdCBhcmUgbWFjaGluZS1zcGVjaWZpYy4KKyAgICAgICAgICAgICAgICAgICAgSWYgc28sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9BUkNIJz5QQUNLQUdFX0FSQ0g8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAiMCIgZGlzYWJsZXMgdGhpcyBiZWhhdmlvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNEQVRFJz48Z2xvc3N0ZXJtPlNSQ0RBVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNSQ0RBVEVbZG9jXSA9ICJUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNQVic+PGdsb3NzdGVybT5TUkNQVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1JDUFZbZG9jXSA9ICJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIGhlbHAgZGVmaW5lIHRoZSB2YWx1ZSBvZiBQVi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgY3VycmVudCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIGhlbHAgZGVmaW5lIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNQViA9ICIke0BiYi5mZXRjaDIuZ2V0X3NyY3JldihkKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyB0aGF0IG5lZWQgdG8gZGVmaW5lIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGRvIHNvCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGhlbHAgb2YgdGhlIDxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5vZm9ubzwvZmlsZW5hbWU+IHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm9mb25vX2dpdC5iYjwvZmlsZW5hbWU+KSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5PC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgZGVmaW5lcyA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gIjAuMTItZ2l0JHtTUkNQVn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNSRVYnPjxnbG9zc3Rlcm0+U1JDUkVWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNSRVZbZG9jXSA9ICJUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyB0byBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQgQmF6YWFyIG9ubHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgdG8gU3VidmVyc2lvbiwgR2l0LCBNZXJjdXJpYWwgYW5kCisgICAgICAgICAgICAgICAgICAgIEJhemFhciBvbmx5LgorICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBmaXhlZCByZXZpc2lvbiBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gYXZvaWQgcGVyZm9ybWluZyBhIHF1ZXJ5IG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICBldmVyeSB0aW1lIEJpdEJha2UgcGFyc2VzIHlvdXIgcmVjaXBlLCB5b3Ugc2hvdWxkIHNwZWNpZnkKKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdGhhdCBpcyBhCisgICAgICAgICAgICAgICAgICAgIGZ1bGwgcmV2aXNpb24gaWRlbnRpZmllciBhbmQgbm90IGp1c3QgYSB0YWcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBsaW1pdGF0aW9ucyB3aGVuIGluaGVyaXRpbmcgdGhlIGxhdGVzdAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiBvZiBzb2Z0d2FyZSB1c2luZyA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFVVE9SRVYnPjxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNTVEFURV9ESVInPjxnbG9zc3Rlcm0+U1NUQVRFX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1NUQVRFX0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUksnPjxnbG9zc3Rlcm0+U1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUktbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBhbGxvd3MgZmV0Y2hlcyBmcm9tIG1pcnJvcnMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIFNTVEFURV9NSVJST1JTIHRvIHdvcmsgZXZlbiB3aGVuIGZldGNoaW5nIGZyb20gdGhlIG5ldHdvcmsgaGFzIGJlZW4gZGlzYWJsZWQgYnkgc2V0dGluZyBCQl9OT19ORVRXT1JLIHRvICIxIi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCBhbGxvd3MgZmV0Y2hlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcnMgdGhhdCBhcmUgc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfTUlSUk9SUyc+PGZpbGVuYW1lPlNTVEFURV9NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRvIHdvcmsgZXZlbiB3aGVuIGZldGNoaW5nIGZyb20gdGhlIG5ldHdvcmsgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgYnkgc2V0dGluZyA8ZmlsZW5hbWU+QkJfTk9fTkVUV09SSzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvICIxIi4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUks8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyB1c2VmdWwgaWYgeW91IGhhdmUgc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgIGludGVybmFsIHNlcnZlciBmb3IgeW91ciBzaGFyZWQgc3RhdGUgY2FjaGUsIGJ1dAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBkaXNhYmxlIGFueSBvdGhlciBmZXRjaGluZyBmcm9tIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNTVEFURV9NSVJST1JTJz48Z2xvc3N0ZXJtPlNTVEFURV9NSVJST1JTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTU1RBVEVfTUlSUk9SU1tkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2VhcmNoIG90aGVyIG1pcnJvciBsb2NhdGlvbnMgZm9yIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyBiZWZvcmUgYnVpbGRpbmcgb3V0IHRoZSBkYXRhLiBZb3UgY2FuIHNwZWNpZnkgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSBvciBhIHJlbW90ZSBVUkwgc3VjaCBhcyBIVFRQIG9yIEZUUC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNlYXJjaCBvdGhlcgorICAgICAgICAgICAgICAgICAgICBtaXJyb3IgbG9jYXRpb25zIGZvciBwcmVidWlsdCBjYWNoZSBkYXRhIG9iamVjdHMgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIG91dCB0aGUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB3b3JrcyBsaWtlIGZldGNoZXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHBvaW50cyB0byB0aGUgY2FjaGUgbG9jYXRpb25zIHRvIGNoZWNrIGZvciB0aGUgc2hhcmVkCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5IG9yIGEgcmVtb3RlIFVSTCBzdWNoCisgICAgICAgICAgICAgICAgICAgIGFzIEhUVFAgb3IgRlRQLgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb25zIHlvdSBzcGVjaWZ5IG5lZWQgdG8gY29udGFpbiB0aGUgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAgICAgICAgIGNhY2hlIChzc3RhdGUtY2FjaGUpIHJlc3VsdHMgZnJvbSBwcmV2aW91cyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzc3RhdGUtY2FjaGUgeW91IHBvaW50IHRvIGNhbiBhbHNvIGJlIGZyb20gYnVpbGRzIG9uCisgICAgICAgICAgICAgICAgICAgIG90aGVyIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBhIG1pcnJvciB1c2VzIHRoZSBzYW1lIHN0cnVjdHVyZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgICAgICAiUEFUSCIgYXQgdGhlIGVuZCBhcyBzaG93biBpbiB0aGUgZXhhbXBsZXMgYmVsb3cuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gc3Vic3RpdHV0ZXMgdGhlIGNvcnJlY3QgcGF0aCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1NUQVRFX01JUlJPUlMgPz0gIlwKKyAgICAgZmlsZTovLy4qIGh0dHA6Ly88cmVwbGFjZWFibGU+c29tZXNlcnZlcjwvcmVwbGFjZWFibGU+LnRsZC9zaGFyZS9zc3RhdGUvUEFUSCBcbiBcCisgICAgIGZpbGU6Ly8uKiBmaWxlOi8vLzxyZXBsYWNlYWJsZT5zb21lLWxvY2FsLWRpcjwvcmVwbGFjZWFibGU+L3NzdGF0ZS9QQVRIIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvbGliIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0JBU0VMSUJESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19CQVNFTElCRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0JBU0VMSUJESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQklORElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfQklORElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0JJTkRJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9iaW4gc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2JpbjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBpcyBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0JJTkRJUl9DUk9TUyc+PGdsb3NzdGVybT5TVEFHSU5HX0JJTkRJUl9DUk9TUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19CSU5ESVJfQ1JPU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMuIFRoZXNlIHNjcmlwdHMgcHJvdmlkZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBvdGhlciBzb2Z0d2FyZSB0aGF0IHdhbnRzIHRvIG1ha2UgdXNlIG9mIGxpYnJhcmllcyBvciBpbmNsdWRlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBzb2Z0d2FyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNjcmlwdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGJpbmFyeQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwdHMgcHJvdmlkZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBvdGhlciBzb2Z0d2FyZSB0aGF0IHdhbnRzIHRvIG1ha2UgdXNlIG9mIGxpYnJhcmllcyBvcgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGZpbGVzIHByb3ZpZGVkIGJ5IHRoZSBzb2Z0d2FyZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0eWxlIG9mIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gbGFyZ2VseQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgYnkgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaXMgc3VwcG9ydGVkIGJ5IHRoZSBsaWJyYXJ5IHRvIHdoaWNoIHlvdSBhcmUgbGlua2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIHJlY29tbWVuZGVkIHlvdSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaW5zdGVhZCBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBjb25maWd1cmF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQklORElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0JJTkRJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQklORElSX05BVElWRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9iaW4gc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW48L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RBVEFESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19EQVRBRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RBVEFESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3Ivc2hhcmUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc2hhcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19EQVRBRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0RBVEFESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RBVEFESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL3NoYXJlIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc2hhcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUic+PGdsb3NzdGVybT5TVEFHSU5HX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHRvcC1sZXZlbCBzeXNyb290cyBkaXJlY3RvcnkgKGkuZS4gJHtUTVBESVJ9L3N5c3Jvb3RzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHRvcC1sZXZlbCBzeXNyb290cyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vc3lzcm9vdHM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBzaG91bGQgbmV2ZXIgd3JpdGUgZmlsZXMgZGlyZWN0bHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZGlyZWN0b3J5IGJlY2F1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXMgdGhlIGRpcmVjdG9yeSBhdXRvbWF0aWNhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgZmlsZXMgc2hvdWxkIGJlIGluc3RhbGxlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4geW91ciByZWNpcGUncworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIGFuZCB0aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlIGEgc3Vic2V0IG9mIHRob3NlIGZpbGVzIGludG8gdGhlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSX0hPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfRElSX0hPU1RbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHByaW1hcnkgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHdoaWNoIHRoZSB0YXJnZXQgaXMgYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBwcmltYXJ5IHN5c3Jvb3QgZGlyZWN0b3J5IGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgdGFyZ2V0IGlzIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgcmVjaXBlIGFuZCB0aGUgYnVpbGQgdGFyZ2V0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgdmFsdWUgaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgcmVjaXBlcyBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSwgdGhlIHZhbHVlIGlzICIke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdCwgdGhlIHZhbHVlIGlzIGVtcHR5IGdpdmVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzdW1wdGlvbiB0aGF0IHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGhvc3QncyBvd24gZGlyZWN0b3JpZXMgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIHRoYXQgYnVpbGQgZm9yIHRoZSBTREssIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19ESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19ESVJfVEFSR0VUJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSX1RBUkdFVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgSW4gbW9zdCBjYXNlcywgdGhpcyBwYXRoIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNvbWUgcmVjaXBlcyBidWlsZCBiaW5hcmllcyB0aGF0IGNhbiBydW4gb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYnV0IHRob3NlIGJpbmFyaWVzIGluIHR1cm4gZ2VuZXJhdGUgY29kZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgYW5vdGhlciBkaWZmZXJlbnQgc3lzdGVtIChlLmcuIGNyb3NzLWNhbmFkaWFuIHJlY2lwZXMpLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0ZXJtaW5vbG9neSBmcm9tIEdOVSwgdGhlIHByaW1hcnkgc3lzdGVtIGlzIHJlZmVycmVkCisgICAgICAgICAgICAgICAgICAgIHRvIGFzIHRoZSAiSE9TVCIgYW5kIHRoZSBzZWNvbmRhcnksIG9yIGRpZmZlcmVudCwgc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgICAgIHJlZmVycmVkIHRvIGFzIHRoZSAiVEFSR0VUIi4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGJpbmFyaWVzIHJ1biBvbiB0aGUgIkhPU1QiIHN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYW5kIGdlbmVyYXRlIGJpbmFyaWVzIGZvciB0aGUgIlRBUkdFVCIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19ESVJfVEFSR0VUPC9maWxlbmFtZT4gcG9pbnRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IHVzZWQgZm9yIHRoZSAiVEFSR0VUIiBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19FVENESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRVRDRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19FVENESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvZXRjIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9ldGM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0VYRUNQUkVGSVhESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19FWEVDUFJFRklYRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0VYRUNQUkVGSVhESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3Igc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfSU5DRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfSU5DRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0lOQ0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9pbmNsdWRlIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBiZWluZyBidWlsdCAoU1RBR0lOR19ESVJfSE9TVCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfSU5DRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0lOQ0RJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfSU5DRElSX05BVElWRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9pbmNsdWRlIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3IvaW5jbHVkZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+PGdsb3NzdGVybT5TVEFHSU5HX0tFUk5FTF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfS0VSTkVMX0RJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2l0aCBrZXJuZWwgaGVhZGVycyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCBvdXQtb2YtdHJlZSBtb2R1bGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2l0aCBrZXJuZWwgaGVhZGVycyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCBvdXQtb2YtdHJlZQorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfTElCRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfTElCRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0xJQkRJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIDxmaWxlbmFtZT4vdXNyL2xpYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSB0YXJnZXQgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0xJQkRJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19MSUJESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0xJQkRJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3IvbGliIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBTVAnPjxnbG9zc3Rlcm0+U1RBTVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQU1QW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLiBUaGUgcGF0aCB0byBhbiBhY3R1YWwgc3RhbXAgZmlsZSBpcyBjb25zdHJ1Y3RlZCBieSBldmFsdWF0aW5nIHRoaXMgc3RyaW5nIGFuZCB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gYW4gYWN0dWFsIHN0YW1wIGZpbGUgaXMgY29uc3RydWN0ZWQgYnkgZXZhbHVhdGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBhbmQgdGhlbiBhcHBlbmRpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGZvciA8ZmlsZW5hbWU+U1RBTVA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBzZXQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVEFNUCA9ICIke1NUQU1QU19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUFNfRElSJz48ZmlsZW5hbWU+U1RBTVBTX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX1RBUkdFVF9TWVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhURU5EUEUnPjxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiBmb3IgcmVsYXRlZCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUFNfRElSJz48Z2xvc3N0ZXJtPlNUQU1QU19ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQU1QU19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBzdGFtcHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBwbGFjZXMgc3RhbXBzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7VE1QRElSfS9zdGFtcHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVFJJUCc+PGdsb3NzdGVybT5TVFJJUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RSSVBbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3N0cmlwJyAoc3RyaXAgc3ltYm9scykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RyaXA8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdXNlZCB0byBzdHJpcAorICAgICAgICAgICAgICAgICAgICBzeW1ib2xzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNVTU1BUlknPjxnbG9zc3Rlcm0+U1VNTUFSWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1VNTUFSWVtkb2NdID0gIlRoZSBzaG9ydCAoODAgY2hhcmFjdGVycyBvciBsZXNzKSBzdW1tYXJ5IG9mIHRoZSBiaW5hcnkgcGFja2FnZSBmb3IgcGFja2FnaW5nIHN5c3RlbXMgc3VjaCBhcyBvcGtnLCBycG0gb3IgZHBrZy4gQnkgZGVmYXVsdCwgU1VNTUFSWSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgREVTQ1JJUFRJT04gdmFyaWFibGUgaWYgREVTQ1JJUFRJT04gaXMgbm90IHNldCBpbiB0aGUgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaG9ydCAoNzIgY2hhcmFjdGVycyBvciBsZXNzKSBzdW1tYXJ5IG9mIHRoZSBiaW5hcnkgcGFja2FnZSBmb3IgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgc3VjaCBhcyA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cnBtPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRwa2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlNVTU1BUlk8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIGRlZmluZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLURFU0NSSVBUSU9OJz48ZmlsZW5hbWU+REVTQ1JJUFRJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaWYgPGZpbGVuYW1lPkRFU0NSSVBUSU9OPC9maWxlbmFtZT4gaXMgbm90IHNldAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNWTkRJUic+PGdsb3NzdGVybT5TVk5ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNWTkRJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgU3VidmVyc2lvbiBjaGVja291dHMgd2lsbCBiZSBzdG9yZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIFN1YnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfREVGQVVMVF9DT05TT0xFJz48Z2xvc3N0ZXJtPlNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTTElOVVhfREVGQVVMVF9DT05TT0xFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBrZXJuZWwgYm9vdCBkZWZhdWx0IGNvbnNvbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBrZXJuZWwgYm9vdCBkZWZhdWx0IGNvbnNvbGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSBhIGNvbnNvbGUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUgYXMgZm9sbG93cyB3aGVyZSAiWCIgaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnNvbGUgbnVtYmVyIHlvdSB3YW50IHRvIHVzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUgPSAiY29uc29sZT10dHlYIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGluaXRpYWxseSBzZXRzIHRoaXMgdmFyaWFibGUgdG8gbnVsbCBidXQgdGhlbiBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgdmFsdWUgbGF0ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfT1BUUyc+PGdsb3NzdGVybT5TWVNMSU5VWF9PUFRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9PUFRTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgc3lzbGludXggZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbGlzdCBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGUgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICB3aXRoIGEgc2VtaWNvbG9uIGNoYXJhY3RlciAoPGZpbGVuYW1lPjs8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBjcmVhdGUgYSBzZXQgb2Ygb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9TRVJJQUwnPjxnbG9zc3Rlcm0+U1lTTElOVVhfU0VSSUFMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9TRVJJQUxbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJucyBpdCBvZmYuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgc2VyaWFsIHBvcnQgb3IgdHVybnMgaXQgb2ZmLgorICAgICAgICAgICAgICAgICAgICBUbyB0dXJuIG9mZiBzZXJpYWwsIHNldCB0aGlzIHZhcmlhYmxlIHRvIGFuIGVtcHR5IHN0cmluZworICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9TRVJJQUwgPz0gIjAgMTE1MjAwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBjaGVja3MgZm9yIGFuZCB1c2VzIHRoZSB2YXJpYWJsZSBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfU1BMQVNIJz48Z2xvc3N0ZXJtPlNZU0xJTlVYX1NQTEFTSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTTElOVVhfU1BMQVNIW2RvY10gPSAiQW4gLkxTUyBmaWxlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUgYm9vdCBtZW51LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIDxmaWxlbmFtZT4uTFNTPC9maWxlbmFtZT4gZmlsZSB1c2VkIGFzIHRoZSBiYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgVkdBIGJvb3QgbWVudSB3aGVuIHlvdSBhcmUgdXNpbmcgdGhlIGJvb3QgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGNoZWNrcyBmb3IgdGhpcyB2YXJpYWJsZSBhbmQgaWYgZm91bmQsIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluc3RhbGxzIHRoZSBzcGxhc2ggc2NyZWVuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU0xJTlVYX1NFUklBTF9UVFknPjxnbG9zc3Rlcm0+U1lTTElOVVhfU0VSSUFMX1RUWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTTElOVVhfU0VSSUFMX1RUWVtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyBkZWZhdWx0IHZhbHVlIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzbGludXgnPjxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU0xJTlVYX1NFUklBTF9UVFkgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBjaGVja3MgZm9yIGFuZCB1c2VzIHRoZSB2YXJpYWJsZSBhcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTJz48Z2xvc3N0ZXJtPlNZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTW2RvY10gPSAiQSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIGFmdGVyIGZpbGVzIGFyZSBzdGFnZWQgaW50byB0aGUgc3lzcm9vdC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IHVzZWQgdG8gYXBwbHkgYWRkaXRpb25hbCBwcm9jZXNzaW5nIG9uIHRoZSBzdGFnZWQgZmlsZXMsIG9yIHRvIHN0YWdlIGFkZGl0aW9uYWwgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIGFmdGVyIGZpbGVzIGFyZSBzdGFnZWQgaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IHVzZWQgdG8gYXBwbHkgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIG9uIHRoZSBzdGFnZWQgZmlsZXMsIG9yIHRvIHN0YWdlIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTVEVNRF9BVVRPX0VOQUJMRSc+PGdsb3NzdGVybT5TWVNURU1EX0FVVE9fRU5BQkxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNURU1EX0FVVE9fRU5BQkxFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHlvdSBoYXZlIHNwZWNpZmllZCBpbiBTWVNURU1EX1NFUlZJQ0Ugc2hvdWxkIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBvciBub3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz48ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgc2VydmljZSB5b3UgaGF2ZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1RFTURfU0VSVklDRSc+PGZpbGVuYW1lPlNZU1RFTURfU0VSVklDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IG9yIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHNlcnZpY2UgaXMgZW5hYmxlZCB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIGF0IGJvb3QgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgc2V0dGluZyBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNURU1EX0FVVE9fRU5BQkxFID8/PSAiZW5hYmxlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGUgc2VydmljZSBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTVEVNRF9QQUNLQUdFUyc+PGdsb3NzdGVybT5TWVNURU1EX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNURU1EX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGxvY2F0ZXMgdGhlIHN5c3RlbWQgdW5pdCBmaWxlcyB3aGVuIHRoZXkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWFpbiByZWNpcGUncyBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgbG9jYXRlcyB0aGUgc3lzdGVtZCB1bml0IGZpbGVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhleSBhcmUgbm90IGZvdW5kIGluIHRoZSBtYWluIHJlY2lwZSdzIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1lTVEVNRF9QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldAorICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgdGhlIHN5c3RlbWQgdW5pdCBmaWxlcyBhcmUgYXNzdW1lZCB0byByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlY2lwZXMgbWFpbiBwYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfUEFDS0FHRVMgPz0gIiR7UE59IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHRoZXNlIHVuaXQgZmlsZXMgYXJlIG5vdCBpbiB0aGlzIHJlY2lwZSdzIG1haW4KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgeW91IG5lZWQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TWVNURU1EX1BBQ0tBR0VTPC9maWxlbmFtZT4gdG8gbGlzdCB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBvciBwYWNrYWdlcyBpbiB3aGljaCB0aGUgYnVpbGQgc3lzdGVtIGNhbiBmaW5kIHRoZSBzeXN0ZW1kCisgICAgICAgICAgICAgICAgICAgIHVuaXQgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTVEVNRF9TRVJWSUNFJz48Z2xvc3N0ZXJtPlNZU1RFTURfU0VSVklDRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTVEVNRF9TRVJWSUNFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgc3lzdGVtZCBzZXJ2aWNlIG5hbWUgZm9yIGEgcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c3RlbWQnPjxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgc3lzdGVtZCBzZXJ2aWNlIG5hbWUgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3BlY2lmeSB0aGlzIGZpbGUgaW4geW91ciByZWNpcGUsIHVzZSBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgbmFtZSBvdmVycmlkZSB0byBpbmRpY2F0ZSB0aGUgcGFja2FnZSB0byB3aGljaCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIGNvbm5tYW4gcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjb25ubWFuLnNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNWSU5JVF9FTkFCTEVEX0dFVFRZUyc+PGdsb3NzdGVybT5TWVNWSU5JVF9FTkFCTEVEX0dFVFRZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1lTVklOSVRfRU5BQkxFRF9HRVRUWVNbZG9jXSA9ICJTcGVjaWZpZXMgd2hpY2ggdmlydHVhbCB0ZXJtaW5hbHMgc2hvdWxkIGJlIHJ1bm5pbmcgYSBnZXR0eSwgdGhlIGRlZmF1bHQgaXMgJzEnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS1lbmFibGluZy1zeXN0ZW0tc2VydmljZXMnPlN5c1Zpbml0PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSB2aXJ0dWFsIHRlcm1pbmFscworICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZXR0eV8lMjhVbml4JTI5Jz5nZXR0eTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIChhbGxvd2luZyBsb2dpbiksIGFzc3VtaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VfVlQnPjxmaWxlbmFtZT5VU0VfVlQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgbm90IHNldCB0byAiMCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1lTVklOSVRfRU5BQkxFRF9HRVRUWVM8L2ZpbGVuYW1lPiBpcyAiMSIKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gb25seSBydW4gYSBnZXR0eSBvbiB0aGUgZmlyc3QgdmlydHVhbCB0ZXJtaW5hbCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXQnPjx0aXRsZT5UPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVQnPjxnbG9zc3Rlcm0+VDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFtkb2NdID0gIlRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdlcmUgQml0QmFrZSBwbGFjZXMgdGVtcG9yYXJ5IGZpbGVzLCB3aGljaCBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3ZXJlIEJpdEJha2UgcGxhY2VzCisgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggY29uc2lzdCBtb3N0bHkgb2YgdGFzayBsb2dzIGFuZAorICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLCB3aGVuIGJ1aWxkaW5nIGEgcGFydGljdWxhciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyB0eXBpY2FsbHkgc2V0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVCA9ICIke1dPUktESVJ9L3RlbXAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggQml0QmFrZSB1bnBhY2tzIGFuZCBidWlsZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgc2V0cyB0aGlzIHZhcmlhYmxlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5UPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHBvaW50cyB0byB0aGUgcm9vdCBvZiB0aGUgZGlyZWN0b3J5IHRyZWUgd2hlcmUgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICBwbGFjZXMgdGhlIG91dHB1dCBvZiBhbiBlbnRpcmUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0FSQ0gnPjxnbG9zc3Rlcm0+VEFSR0VUX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9BUkNIW2RvY10gPSAiVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgZGV2aWNlIGJlaW5nIGJ1aWx0LiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFyY2hpdGVjdHVyZXM6IGFybSwgbWlwcywgcHBjLCB4ODYsIHg4Ni02NC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IG1hY2hpbmUncyBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIG1hbnkKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBpcyBieSBubyBtZWFucyBjb21wbGV0ZSBhcyB0aGUgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgICAgIGlzIGNvbmZpZ3VyYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhcm0KKyAgICAgaTU4NgorICAgICB4ODZfNjQKKyAgICAgcG93ZXJwYworICAgICBwb3dlcnBjNjQKKyAgICAgbWlwcworICAgICBtaXBzZWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBtYWNoaW5lIGFyY2hpdGVjdHVyZXMsIHNlZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfQVJDSCc+PGZpbGVuYW1lPlRVTkVfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfQVNfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfQVNfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0FTX0FSQ0hbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFzc2VtYmxlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJsZXIgZmxhZ3MgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0FTX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbml0aWFsaXplZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0FTQVJHUyc+PGZpbGVuYW1lPlRVTkVfQVNBUkdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gdGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+KToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUQVJHRVRfQVNfQVJDSCA9ICIke1RVTkVfQVNBUkdTfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DQ19BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9DQ19BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfQ0NfQVJDSFtkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQyBjb21waWxlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9DQ19BUkNIPC9maWxlbmFtZT4gaXMgaW5pdGlhbGl6ZWQgZnJvbQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9DQ0FSR1MnPjxmaWxlbmFtZT5UVU5FX0NDQVJHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGEgY29tbW9uIHdvcmthcm91bmQgdG8gYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5UQVJHRVRfQ0NfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiByZWNpcGVzIHRoYXQgYnVpbGQgc29mdHdhcmUgZm9yIHRoZSB0YXJnZXQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgd291bGQgbm90IG90aGVyd2lzZSByZXNwZWN0IHRoZSBleHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DQ19LRVJORUxfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfQ0NfS0VSTkVMX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DQ19LRVJORUxfQVJDSFtkb2NdID0gIlRoaXMgaXMgYSBzcGVjaWZpYyBrZXJuZWwgY29tcGlsZXIgZmxhZyBmb3IgYSBDUFUgb3IgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBzcGVjaWZpYyBrZXJuZWwgY29tcGlsZXIgZmxhZyBmb3IgYSBDUFUgb3IKKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmxhZyBpcyB1c2VkIHJhcmVseSBhbmQgb25seSBmb3IgY2FzZXMgd2hlcmUgYQorICAgICAgICAgICAgICAgICAgICB1c2Vyc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfQ0NBUkdTJz48ZmlsZW5hbWU+VFVORV9DQ0FSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlRBUkdFVF9DQ19LRVJORUxfQVJDSDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFsbG93cyB0aGUga2VybmVsIChhbmQgYXNzb2NpYXRlZCBtb2R1bGVzKSB0byB1c2UgYQorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DRkxBR1MnPjxnbG9zc3Rlcm0+VEFSR0VUX0NGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NGTEFHU1tkb2NdID0gIkZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRoZSBzYW1lIGFzIENGTEFHUy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgdGFyZ2V0IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIFNESydzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBzZXRzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9DRkxBR1M8L2ZpbGVuYW1lPiB2YWx1ZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGJ1aWx0IHVzaW5nIHRoZSBTREsgYWxzbyBoYXZlIHRoZSBmbGFncworICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DUFBGTEFHUyc+PGdsb3NzdGVybT5UQVJHRVRfQ1BQRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DUFBGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBwcmUtcHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRvIGJvdGggdGhlIEMgYW5kIHRoZSBDKysgY29tcGlsZXJzKSB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNQUEZMQUdTJz48ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIFNESydzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBzZXRzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1BQRkxBR1MnPjxmaWxlbmFtZT5DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQ1BQRkxBR1M8L2ZpbGVuYW1lPiB2YWx1ZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGJ1aWx0IHVzaW5nIHRoZSBTREsgYWxzbyBoYXZlIHRoZSBmbGFncworICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9DWFhGTEFHUyc+PGdsb3NzdGVybT5UQVJHRVRfQ1hYRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgdGFyZ2V0IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DWFhGTEFHUyc+PGZpbGVuYW1lPkNYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBTREsncyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgc2V0cworICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNYWEZMQUdTJz48ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIGVudmlyb25tZW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0NYWEZMQUdTPC9maWxlbmFtZT4gdmFsdWUgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBidWlsdCB1c2luZyB0aGUgU0RLIGFsc28gaGF2ZSB0aGUgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfRlBVJz48Z2xvc3N0ZXJtPlRBUkdFVF9GUFU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9GUFVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIG1ldGhvZCBmb3IgaGFuZGxpbmcgRlBVIGNvZGUuIEZvciBGUFUtbGVzcyB0YXJnZXRzLCB3aGljaCBpbmNsdWRlIG1vc3QgQVJNIENQVXMsIHRoZSB2YXJpYWJsZSBtdXN0IGJlIHNldCB0byAnc29mdCcuIElmIG5vdCwgdGhlIGtlcm5lbCBlbXVsYXRpb24gZ2V0cyB1c2VkLCB3aGljaCByZXN1bHRzIGluIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1ldGhvZCBmb3IgaGFuZGxpbmcgRlBVIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBGUFUtbGVzcyB0YXJnZXRzLCB3aGljaCBpbmNsdWRlIG1vc3QgQVJNIENQVXMsIHRoZSB2YXJpYWJsZSBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgIHNldCB0byAic29mdCIuCisgICAgICAgICAgICAgICAgICAgIElmIG5vdCwgdGhlIGtlcm5lbCBlbXVsYXRpb24gZ2V0cyB1c2VkLCB3aGljaCByZXN1bHRzIGluIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfTERfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfTERfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0xEX0FSQ0hbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxpbmtlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0xEX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbml0aWFsaXplZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0xEQVJHUyc+PGZpbGVuYW1lPlRVTkVfTERBUkdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gdGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+KToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUQVJHRVRfTERfQVJDSCA9ICIke1RVTkVfTERBUkdTfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9MREZMQUdTJz48Z2xvc3N0ZXJtPlRBUkdFVF9MREZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfTERGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgdGFyZ2V0IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgU0RLJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHNldHMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfTERGTEFHUzwvZmlsZW5hbWU+IHZhbHVlIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMgYnVpbHQgdXNpbmcgdGhlIFNESyBhbHNvIGhhdmUgdGhlIGZsYWdzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX09TJz48Z2xvc3N0ZXJtPlRBUkdFVF9PUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX09TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQncyBvcGVyYXRpbmcgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0J3Mgb3BlcmF0aW5nIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gImxpbnV4IiBmb3IgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4tYmFzZWQgc3lzdGVtcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gImxpbnV4LXVjbGliYyIgZm9yIDxmaWxlbmFtZT51Y2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIEFSTS9FQUJJIHRhcmdldHMsIHRoZXJlIGFyZSBhbHNvICJsaW51eC1nbnVlYWJpIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgImxpbnV4LXVjbGliYy1nbnVlYWJpIiB2YWx1ZXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX1BSRUZJWCc+PGdsb3NzdGVybT5UQVJHRVRfUFJFRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCB1c2VkIGZvciB0aGUgdG9vbGNoYWluIGJpbmFyeSB0YXJnZXQgdG9vbHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwcmVmaXggdXNlZCBmb3IgdGhlIHRvb2xjaGFpbiBiaW5hcnkgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHRvb2xzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgcmVjaXBlIGFuZCB0aGUgYnVpbGQgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX1BSRUZJWDwvZmlsZW5hbWU+IGlzIHNldCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0IG1hY2hpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9TWVMnPlRBUkdFVF9TWVM8L2xpbms+fS0iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gcmVjaXBlcywgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHNldHMgdGhlIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9QUkVGSVg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBzZXRzIHRoZSB2YXJpYWJsZSB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX1BSRUZJWDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfU1lTJz48Z2xvc3N0ZXJtPlRBUkdFVF9TWVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9TWVNbZG9jXSA9ICJUaGUgdGFyZ2V0IHN5c3RlbSBpcyBjb21wcmlzZWQgb2YgVEFSR0VUX0FSQ0gsVEFSR0VUX1ZFTkRPUiBhbmQgVEFSR0VUX09TLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aGljaCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9BUkNIJz48ZmlsZW5hbWU+VEFSR0VUX0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfVkVORE9SJz48ZmlsZW5hbWU+VEFSR0VUX1ZFTkRPUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPjxmaWxlbmFtZT5UQVJHRVRfT1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX1NZUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZXNlIHR3byBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXZlbiBhIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiByZWNpcGUgb24gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCwgeDg2IG1hY2hpbmUgcnVubmluZyBMaW51eCwgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYtbGludXgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgcmVjaXBlIGJlaW5nIGJ1aWx0IGZvciBhIGxpdHRsZS1lbmRpYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlQUyB0YXJnZXQgcnVubmluZyBMaW51eCwgdGhlIHZhbHVlIG1pZ2h0IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbC1saW51eCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9WRU5ET1InPjxnbG9zc3Rlcm0+VEFSR0VUX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX1ZFTkRPUltkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgdmVuZG9yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHZlbmRvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQ0xJQkNBUFBFTkQnPjxnbG9zc3Rlcm0+VENMSUJDQVBQRU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQ0xJQkNBUFBFTkRbZG9jXSA9ICJTcGVjaWZpZXMgYSBzdWZmaXggYXBwZW5kZWQgdG8gVE1QRElSIHRoYXQgaWRlbnRpZmllcyB0aGUgbGliYyB2YXJpYW50IGZvciB0aGUgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIG9udG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzdWZmaXggaWRlbnRpZmllcyB0aGUgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiB2YXJpYW50CisgICAgICAgICAgICAgICAgICAgIGZvciBidWlsZGluZy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGJ1aWxkaW5nIGZvciBtdWx0aXBsZSB2YXJpYW50cyB3aXRoIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHRoaXMgbWVjaGFuaXNtIGVuc3VyZXMgdGhhdCBvdXRwdXQgZm9yIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+IHZhcmlhbnRzIGlzIGtlcHQgc2VwYXJhdGUgdG8KKyAgICAgICAgICAgICAgICAgICAgYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIDxmaWxlbmFtZT5kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5UQ0xJQkNBUFBFTkQ8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICAiLSR7VENMSUJDfSIuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGRpc3Ryb3Mgc3VjaCBhcyBwb2t5LCB3aGljaCBub3JtYWxseSBvbmx5IHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgb25lIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4gdmFyaWFudCwgc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQ0xJQkNBUFBFTkQ8L2ZpbGVuYW1lPiB0byAiIiBpbiB0aGVpciBkaXN0cm8KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHJlc3VsdGluZyBpbiBubyBzdWZmaXggYmVpbmcgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQ0xJQkMnPjxnbG9zc3Rlcm0+VENMSUJDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQ0xJQkNbZG9jXSA9ICJTcGVjaWZpZXMgR05VIHN0YW5kYXJkIEMgbGlicmFyeSAobGliYykgdmFyaWFudCB0byB1c2UgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBZb3UgY2FuIHNlbGVjdCAnZ2xpYmMnIG9yICd1Y2xpYmMnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgR05VIHN0YW5kYXJkIEMgbGlicmFyeSAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudCB0byB1c2UgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHJlcGxhY2VzIDxmaWxlbmFtZT5QT0tZTElCQzwvZmlsZW5hbWU+LCB3aGljaCBpcyBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlbGVjdCAiZ2xpYmMiIG9yICJ1Y2xpYmMiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRDTU9ERSc+PGdsb3NzdGVybT5UQ01PREU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRDTU9ERVtkb2NdID0gIkVuYWJsZXMgYW4gZXh0ZXJuYWwgdG9vbGNoYWluICh3aGVyZSBwcm92aWRlZCBieSBhbiBhZGRpdGlvbmFsIGxheWVyKSBpZiBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuICdkZWZhdWx0Jy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRvb2xjaGFpbiBzZWxlY3Rvci4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRDTU9ERTwvZmlsZW5hbWU+IGNvbnRyb2xzIHRoZSBjaGFyYWN0ZXJpc3RpY3MKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGdlbmVyYXRlZCBwYWNrYWdlcyBhbmQgaW1hZ2VzIGJ5IHRlbGxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hpY2ggdG9vbGNoYWluIHByb2ZpbGUgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgaXRzIG93bgorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSdzIGRlZmF1bHQgdmFsdWUgaXMgImRlZmF1bHQiLCB3aGljaCB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgaW50ZXJuYWwgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5UQ01PREU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gYSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiAiZGVmYXVsdCIsIHRoZW4gaXQgaXMgeW91ciByZXNwb25zaWJpbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgdGhlIHRvb2xjaGFpbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIG9sZGVyIG9yIG5ld2VyIHZlcnNpb25zIG9mIHRoZXNlIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGNhdXNlIGJ1aWxkIHByb2JsZW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3BlY2lmaWMgY29tcG9uZW50cyB3aXRoIHdoaWNoIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgY29tcGF0aWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlRDTU9ERTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNpbWlsYXIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRDTElCQyc+PGZpbGVuYW1lPlRDTElCQzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggY29udHJvbHMgdGhlIHZhcmlhbnQgb2YgdGhlIEdOVSBzdGFuZGFyZCBDIGxpYnJhcnkKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4pIHVzZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzOgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+dWNsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdpdGggYWRkaXRpb25hbCBsYXllcnMsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhIHByZS1jb21waWxlZAorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIE9uZSBleGFtcGxlIGlzIHRoZSBTb3VyY2VyeSBHKysgVG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3VwcG9ydCBmb3IgdGhpcyB0b29sY2hhaW4gcmVzaWRlcyBpbiB0aGUgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+TWVudG9yIEdyYXBoaWNzPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXNvdXJjZXJ5PC9maWxlbmFtZT4gbGF5ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20vTWVudG9yRW1iZWRkZWQvbWV0YS1zb3VyY2VyeS8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGF5ZXIncyA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBTb3VyY2VyeSBHKysgVG9vbGNoYWluIGFzCisgICAgICAgICAgICAgICAgICAgIGFuIGV4dGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgSW4gc3VtbWFyeSwgeW91IG11c3QgYmUgc3VyZSB0byBhZGQgdGhlIGxheWVyIHRvIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIGZyb250IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGxheWVyIGFuZCB0aGVuIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYVEVSTkFMX1RPT0xDSEFJTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsb2NhdGlvbiBpbiB3aGljaCB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5kYW1lbnRhbHMgdXNlZCBmb3IgdGhpcyBleGFtcGxlIGFwcGx5IHRvIGFueQorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5tZXRhLXNvdXJjZXJ5PC9maWxlbmFtZT4gYXMgYQorICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIG90aGVyIGV4dGVybmFsIHRvb2xjaGFpbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9FWFBPUlRfRElSJz48Z2xvc3N0ZXJtPlRFU1RfRVhQT1JUX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9FWFBPUlRfRElSW2RvY10gPSAiVGhlIGxvY2F0aW9uIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gZXhwb3J0IHRlc3RzIHdoZW4gdGhlIFRFU1RfRVhQT1JUX09OTFkgdmFyaWFibGUgaXMgc2V0IHRvICIxIi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBleHBvcnQKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfRVhQT1JUX09OTFknPjxmaWxlbmFtZT5URVNUX0VYUE9SVF9PTkxZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9FWFBPUlRfRElSPC9maWxlbmFtZT4gdmFyaWFibGUgZGVmYXVsdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiIke1RNUERJUn0vdGVzdGltYWdlLyR7UE59IjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfRVhQT1JUX09OTFknPjxnbG9zc3Rlcm0+VEVTVF9FWFBPUlRfT05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9FWFBPUlRfT05MWVtkb2NdID0gIlNwZWNpZmllcyB0byBleHBvcnQgdGhlIHRlc3RzIG9ubHkuIFNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpZiB5b3UgZG8gbm90IHdhbnQgdG8gcnVuIHRoZSB0ZXN0cyBidXQgeW91IHdhbnQgdGhlbSB0byBiZSBleHBvcnRlZCBpbiBhIG1hbm5lciB0aGF0IHlvdSB0byBydW4gdGhlbSBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRvIGV4cG9ydCB0aGUgdGVzdHMgb25seS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHRlc3RzIGJ1dCB5b3Ugd2FudCB0aGVtIHRvIGJlIGV4cG9ydGVkIGluIGEgbWFubmVyIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgeW91IHRvIHJ1biB0aGVtIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX0lNQUdFJz48Z2xvc3N0ZXJtPlRFU1RfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfSU1BR0VbZG9jXSA9ICJFbmFibGVzIHRlc3QgYm9vdGluZyBvZiB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHRoZSBRRU1VIGVtdWxhdG9yIGFmdGVyIGFueSByb290IGZpbGVzeXN0ZW1zIGFyZSBjcmVhdGVkIGFuZCBydW5zIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEF1dG9tYXRpY2FsbHkgcnVucyB0aGUgc2VyaWVzIG9mIGF1dG9tYXRlZCB0ZXN0cyBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIHdoZW4gYW4gaW1hZ2UgaXMgc3VjY2Vzc2Z1bGx5IGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0ZXN0cyBhcmUgd3JpdHRlbiBpbiBQeXRob24gbWFraW5nIHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVuaXR0ZXN0PC9maWxlbmFtZT4gbW9kdWxlLCBhbmQgdGhlIG1ham9yaXR5IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZW0gcnVuIGNvbW1hbmRzIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0byBoYXZlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgcnVuCisgICAgICAgICAgICAgICAgICAgIHRoZXNlIHRlc3RzIGFmdGVyIGFuIGltYWdlIHN1Y2Nlc3NmdWxseSBidWlsZHM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9JTUFHRSA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nLCBydW5uaW5nLCBhbmQgd3JpdGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSB0ZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdGVzdGltYWdlJz48ZmlsZW5hbWU+dGVzdGltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9MT0dfRElSJz48Z2xvc3N0ZXJtPlRFU1RfTE9HX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9MT0dfRElSW2RvY10gPSAiSG9sZHMgdGhlIFNTSCBsb2cgYW5kIHRoZSBib290IGxvZyBmb3IgUUVNVSBtYWNoaW5lcy4gVGhlIDxmaWxlbmFtZT5URVNUX0xPR19ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cyB0byAiJHtXT1JLRElSfS90ZXN0aW1hZ2UiLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEhvbGRzIHRoZSBTU0ggbG9nIGFuZCB0aGUgYm9vdCBsb2cgZm9yIFFFTVUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9MT0dfRElSPC9maWxlbmFtZT4gdmFyaWFibGUgZGVmYXVsdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiIke1dPUktESVJ9L3Rlc3RpbWFnZSI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBBY3R1YWwgdGVzdCByZXN1bHRzIHJlc2lkZSBpbiB0aGUgdGFzayBsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bG9nLmRvX3Rlc3RpbWFnZTwvZmlsZW5hbWU+KSwgd2hpY2ggaXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfUE9XRVJDT05UUk9MX0NNRCc+PGdsb3NzdGVybT5URVNUX1BPV0VSQ09OVFJPTF9DTUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfUE9XRVJDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb250cm9sIHRoZSBwb3dlciBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdCIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgICAgIHVzZSB0byBjb250cm9sIHRoZSBwb3dlciBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB0aGlzIGNvbW1hbmQgd291bGQgcG9pbnQgdG8gYSBzY3JpcHQgdGhhdAorICAgICAgICAgICAgICAgICAgICBwZXJmb3JtcyB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIChlLmcuIGludGVyYWN0aW5nCisgICAgICAgICAgICAgICAgICAgIHdpdGggYSB3ZWItZW5hYmxlZCBwb3dlciBzdHJpcCkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgY29tbWFuZCBzaG91bGQgZXhwZWN0IHRvIHJlY2VpdmUgYXMgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgIm9mZiIsICJvbiIgb3IgImN5Y2xlIiBzcGVjaWZ5aW5nIHRvIHBvd2VyIG9mZiwKKyAgICAgICAgICAgICAgICAgICAgb24sIG9yIGN5Y2xlIChwb3dlciBvZmYgYW5kIHRoZW4gcG93ZXIgb24pIHRoZSBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTJz48Z2xvc3N0ZXJtPlRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfUE9XRVJDT05UUk9MX0NNRCIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfUE9XRVJDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBpdCBpZiB5b3Ugd2lzaCwgZm9yIGV4YW1wbGUsIHRvIHNlcGFyYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGFuZCBub24tbWFjaGluZS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfUUVNVUJPT1RfVElNRU9VVCc+PGdsb3NzdGVybT5URVNUX1FFTVVCT09UX1RJTUVPVVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfUUVNVUJPT1RfVElNRU9VVFtkb2NdID0gIlRoZSB0aW1lIGluIHNlY29uZHMgYWxsb3dlZCBmb3IgYW4gaW1hZ2UgdG8gYm9vdCBiZWZvcmUgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdHMgYmVnaW4gdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRpbWUgaW4gc2Vjb25kcyBhbGxvd2VkIGZvciBhbiBpbWFnZSB0byBib290IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0cyBiZWdpbiB0byBydW4gYWdhaW5zdCBhbgorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdGltZW91dCBwZXJpb2QgdG8gYWxsb3cgdGhlIGJvb3QgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgICAgICByZWFjaCB0aGUgbG9naW4gcHJvbXB0IGlzIDUwMCBzZWNvbmRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgdmFsdWUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9DTUQnPjxnbG9zc3Rlcm0+VEVTVF9TRVJJQUxDT05UUk9MX0NNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUgb2YgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIHVuZGVyIHRlc3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzaW1wbHkgbmVlZHMgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGZvcndhcmQgdGhhdCBjb25uZWN0aW9uIHRvIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgYXMgYW55IG5vcm1hbCB0ZXJtaW5hbCBwcm9ncmFtIGRvZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byB1c2UgdGhlIFBpY29jb20gdGVybWluYWwgcHJvZ3JhbSBvbgorICAgICAgICAgICAgICAgICAgICBzZXJpYWwgZGV2aWNlIDxmaWxlbmFtZT4vZGV2L3R0eVVTQjA8L2ZpbGVuYW1lPiBhdAorICAgICAgICAgICAgICAgICAgICAxMTUyMDBicHMsIHlvdSB3b3VsZCBzZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCA9ICJwaWNvY29tIC9kZXYvdHR5VVNCMCAtYiAxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUyc+PGdsb3NzdGVybT5URVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBjb21tYW5kIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9TRVJJQUxDT05UUk9MX0NNRCc+PGZpbGVuYW1lPlRFU1RfU0VSSUFMQ09OVFJPTF9DTUQ8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPlRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgb3B0aW9uYWwuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGl0IGlmIHlvdSB3aXNoLCBmb3IgZXhhbXBsZSwgdG8gc2VwYXJhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgYW5kIG5vbi1tYWNoaW5lLXNwZWNpZmljIHBhcnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU0VSVkVSX0lQJz48Z2xvc3N0ZXJtPlRFU1RfU0VSVkVSX0lQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NFUlZFUl9JUFtkb2NdID0gIlRoZSBJUCBhZGRyZXNzIG9mIHRoZSBidWlsZCBtYWNoaW5lIChob3N0IG1hY2hpbmUpLiBUaGlzIElQIGFkZHJlc3MgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSBidWlsZCBtYWNoaW5lIChob3N0IG1hY2hpbmUpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIElQIGFkZHJlc3MgaXMgdXN1YWxseSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiBkZXRlY3Rpb24gZmFpbHMsIHRoaXMgdmFyaWFibGUgbmVlZHMgdG8gYmUgc2V0CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBidWlsZCBtYWNoaW5lIChpLmUuIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBpcyB0YWtpbmcgcGxhY2UpLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9TRVJWRVJfSVA8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgb25seSB1c2VkIGZvciBhIHNtYWxsIG51bWJlciBvZiB0ZXN0cyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgInNtYXJ0IiB0ZXN0IHN1aXRlLCB3aGljaCBuZWVkcyB0byBkb3dubG9hZAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgZnJvbSA8ZmlsZW5hbWU+REVQTE9ZX0RJUi9ycG08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfVEFSR0VUJz48Z2xvc3N0ZXJtPlRFU1RfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1RBUkdFVFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIG1ldGhvZCBvZiBkZXBsb3lpbmcgdGhlIGltYWdlIGFuZCBydW5uaW5nIHRlc3RzIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRhcmdldCBjb250cm9sbGVyIHRvIHVzZSB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgYWdhaW5zdCBhIHRlc3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGNvbnRyb2xsZXIgdG8gdXNlIGlzICJxZW11IjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1RBUkdFVCA9ICJxZW11IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgdGFyZ2V0IGNvbnRyb2xsZXIgaXMgYSBjbGFzcyB0aGF0IGRlZmluZXMgaG93IGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGdldHMgZGVwbG95ZWQgb24gYSB0YXJnZXQgYW5kIGhvdyBhIHRhcmdldCBpcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBBIGxheWVyIGNhbiBleHRlbmQgdGhlIGNvbnRyb2xsZXJzIGJ5IGFkZGluZyBhIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbGF5ZXIncyA8ZmlsZW5hbWU+L2xpYi9vZXFhL2NvbnRyb2xsZXJzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBieSBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QmFzZVRhcmdldDwvZmlsZW5hbWU+IGNsYXNzLCB3aGljaCBpcyBhbiBhYnN0cmFjdAorICAgICAgICAgICAgICAgICAgICBjbGFzcyB0aGF0IGNhbm5vdCBiZSB1c2VkIGFzIGEgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icWVtdSIgYW5kICJRZW11VGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb3RzIGEgUUVNVSBpbWFnZSBhbmQgcnVucyB0aGUgdGVzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNxZW11LWltYWdlLWVuYWJsaW5nLXRlc3RzJz5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIFFFTVU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ic2ltcGxlcmVtb3RlIiBhbmQgIlNpbXBsZVJlbW90ZVRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW5zIHRoZSB0ZXN0cyBvbiB0YXJnZXQgaGFyZHdhcmUgdGhhdCBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgYW5kIHJ1bm5pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGhhcmR3YXJlIGNhbiBiZSBvbiB0aGUgbmV0d29yayBvciBpdCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGRldmljZSBydW5uaW5nIGFuIGltYWdlIG9uIFFFTVUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9UQVJHRVRfSVAnPjxmaWxlbmFtZT5URVNUX1RBUkdFVF9JUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4geW91IHVzZSAic2ltcGxlcmVtb3RlIiBvciAiU2ltcGxlUmVtb3RlVGFyZ2V0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmd1bWVudCBpcyBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3RhcmdldGNvbnRyb2wucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNtYWxsIGNhcHMgbmFtZXMgYXJlIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJHdW1taWJvb3RUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljYWxseSBkZXBsb3lzIGFuZCBydW5zIHRlc3RzIG9uIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJLWVuYWJsZWQgbWFjaGluZSB0aGF0IGhhcyBhIG1hc3RlciBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmd1bWVudCBpcyBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgdGVzdHMgb24gaGFyZHdhcmUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2hhcmR3YXJlLWltYWdlLWVuYWJsaW5nLXRlc3RzJz5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIEhhcmR3YXJlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfVEFSR0VUX0lQJz48Z2xvc3N0ZXJtPlRFU1RfVEFSR0VUX0lQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1RBUkdFVF9JUFtkb2NdID0gIlRoZSBJUCBhZGRyZXNzIG9mIHlvdXIgaGFyZHdhcmUgdW5kZXIgdGVzdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgSVAgYWRkcmVzcyBvZiB5b3VyIGhhcmR3YXJlIHVuZGVyIHRlc3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVTVF9UQVJHRVRfSVA8L2ZpbGVuYW1lPiB2YXJpYWJsZSBoYXMgbm8KKyAgICAgICAgICAgICAgICAgICAgZWZmZWN0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRFU1RfVEFSR0VUJz48ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJxZW11Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3BlY2lmeSB0aGUgSVAgYWRkcmVzcywgeW91IGNhbiBhbHNvIGluY2x1ZGUgYQorICAgICAgICAgICAgICAgICAgICBwb3J0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC4xLjQ6MjIwMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGEgcG9ydCBpcyB1c2VmdWwgd2hlbiBTU0ggaXMgc3RhcnRlZCBvbiBhCisgICAgICAgICAgICAgICAgICAgIG5vbi1zdGFuZGFyZCBwb3J0IG9yIGluIGNhc2VzIHdoZW4geW91ciBoYXJkd2FyZSB1bmRlciB0ZXN0CisgICAgICAgICAgICAgICAgICAgIGlzIGJlaGluZCBhIGZpcmV3YWxsIG9yIG5ldHdvcmsgdGhhdCBpcyBub3QgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzaWJsZSBmcm9tIHlvdXIgaG9zdCBhbmQgeW91IG5lZWQgdG8gZG8gcG9ydCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU1VJVEVTJz48Z2xvc3N0ZXJtPlRFU1RfU1VJVEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NVSVRFU1tkb2NdID0gIkFuIG9yZGVyZWQgbGlzdCBvZiB0ZXN0cyAobW9kdWxlcykgdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2Ugd2hlbiBwZXJmb3JtaW5nIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQW4gb3JkZXJlZCBsaXN0IG9mIHRlc3RzIChtb2R1bGVzKSB0byBydW4gYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICBhbiBpbWFnZSB3aGVuIHBlcmZvcm1pbmcgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMgYSBjb3JlIHNldCBvZiB0ZXN0cworICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGFnYWluc3QgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlcmUgaXMgb25seSBzdXBwb3J0IGZvciBydW5uaW5nIHRoZXNlIHRlc3RzCisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBRRU1VLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIFRlc3RzIGluY2x1ZGUgPGZpbGVuYW1lPnBpbmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZGY8L2ZpbGVuYW1lPiBhbW9uZworICAgICAgICAgICAgICAgICAgICBvdGhlcnMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWRkIHlvdXIgb3duIHRlc3RzIHRvIHRoZSBsaXN0IG9mIHRlc3RzIGJ5CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZGluZyA8ZmlsZW5hbWU+VEVTVF9TVUlURVM8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTX2FwcGVuZCA9ICIgPHJlcGxhY2VhYmxlPm15dGVzdDwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSB0aGUgImF1dG8iIG9wdGlvbiB0bworICAgICAgICAgICAgICAgICAgICBoYXZlIGFsbCBhcHBsaWNhYmxlIHRlc3RzIHJ1biBhZ2FpbnN0IHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NVSVRFU19hcHBlbmQgPSAiIGF1dG8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBydW4gdGVzdHMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRlc3RzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIGFyZSBza2lwcGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgb3JkZXIgaW4gd2hpY2ggdGVzdHMgYXJlIHJ1biBpcyBpbXBvcnRhbnQuCisgICAgICAgICAgICAgICAgICAgIFRlc3RzIHRoYXQgZGVwZW5kIG9uIGFub3RoZXIgdGVzdCBtdXN0IGFwcGVhciBsYXRlciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGlzdCB0aGFuIHRoZSB0ZXN0IG9uIHdoaWNoIHRoZXkgZGVwZW5kLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFwcGVuZCB0aGUgbGlzdCBvZiB0ZXN0cyB3aXRoIHR3bworICAgICAgICAgICAgICAgICAgICB0ZXN0cyAoPGZpbGVuYW1lPnRlc3RfQTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdF9CPC9maWxlbmFtZT4pIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZXN0X0I8L2ZpbGVuYW1lPiBpcyBkZXBlbmRlbnQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3RfQTwvZmlsZW5hbWU+LCB0aGVuIHlvdSBtdXN0IG9yZGVyIHRoZSB0ZXN0cworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTID0gIiB0ZXN0X0EgdGVzdF9CIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRlc3RpbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1USElTRElSJz48Z2xvc3N0ZXJtPlRISVNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRISVNESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIEJpdEJha2UgaXMgY3VycmVudGx5IHBhcnNpbmcgaXMgbG9jYXRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIEJpdEJha2UgaXMgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIHBhcnNpbmcgaXMgbG9jYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IG1hbnVhbGx5IHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRJTUUnPjxnbG9zc3Rlcm0+VElNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVElNRVtkb2NdID0gIlRoZSB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZCB1c2luZyBITVMgZm9ybWF0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGltZXMgYXBwZWFyIHVzaW5nIHRoZSBob3VyLCBtaW51dGUsIGFuZCBzZWNvbmQgKEhNUykKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0IChlLmcuICIxNDAxNTkiIGZvciBvbmUgbWludXRlIGFuZCBmaWZ0eS1uaW5lCisgICAgICAgICAgICAgICAgICAgIHNlY29uZHMgcGFzdCAxNDAwIGhvdXJzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UTVBESVInPjxnbG9zc3Rlcm0+VE1QRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUTVBESVJbZG9jXSA9ICJUaGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgZG9lcyBpdHMgd29yayBidWlsZGluZyBpbWFnZXMuIEJ5IGRlZmF1bHQsIHRoZSBUTVBESVIgdmFyaWFibGUgaXMgbmFtZWQgdG1wIHdpdGhpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdGhlIGJhc2UgZGlyZWN0b3J5IHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHVzZXMgZm9yIGFsbCBidWlsZCBvdXRwdXQgYW5kIGludGVybWVkaWF0ZQorICAgICAgICAgICAgICAgICAgICBmaWxlcyAob3RoZXIgdGhhbiB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlKS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBwb2ludHMKKyAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZXN0YWJsaXNoIHRoaXMgZGlyZWN0b3J5IGluIGEgbG9jYXRpb24gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiB0aGUgZGVmYXVsdCwgeW91IGNhbiB1bmNvbW1lbnQgYW5kIGVkaXQgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI1RNUERJUiA9ICIke1RPUERJUn0vdG1wIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgdXNlIGZvciB0aGlzIHNjZW5hcmlvIGlzIHRvIHNldAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gdG8gYSBsb2NhbCBkaXNrLCB3aGljaCBkb2VzCisgICAgICAgICAgICAgICAgICAgIG5vdCB1c2UgTkZTLCB3aGlsZSBoYXZpbmcgdGhlIEJ1aWxkIERpcmVjdG9yeSB1c2UgTkZTLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXN5c3RlbSB1c2VkIGJ5IDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBtdXN0CisgICAgICAgICAgICAgICAgICAgIGhhdmUgc3RhbmRhcmQgZmlsZXN5c3RlbSBzZW1hbnRpY3MgKGkuZS4gbWl4ZWQtY2FzZSBmaWxlcworICAgICAgICAgICAgICAgICAgICBhcmUgdW5pcXVlLCBQT1NJWCBmaWxlIGxvY2tpbmcsIGFuZCBwZXJzaXN0ZW50IGlub2RlcykuCisgICAgICAgICAgICAgICAgICAgIER1ZSB0byB2YXJpb3VzIGlzc3VlcyB3aXRoIE5GUyBhbmQgYnVncyBpbiBzb21lCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucywgTkZTIGRvZXMgbm90IG1lZXQgdGhpcyBtaW5pbXVtCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVtZW50LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBjYW5ub3QgYmUgb24KKyAgICAgICAgICAgICAgICAgICAgTkZTLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPT0xDSEFJTl9IT1NUX1RBU0snPjxnbG9zc3Rlcm0+VE9PTENIQUlOX0hPU1RfVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVE9PTENIQUlOX0hPU1RfVEFTS1tkb2NdID0gIlRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGJ1aWxkaW5nIGFuIFNESywgd2hpY2ggY29udGFpbnMgYSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGxpc3RzIHBhY2thZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgd2hlbiBidWlsZGluZyBhbiBTREssIHdoaWNoIGNvbnRhaW5zIGEKKyAgICAgICAgICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlcyBzcGVjaWZpZWQgYnkgdGhpcyB2YXJpYWJsZSBhcmUgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIHNldCB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGVhY2ggcGFja2FnZSBzaG91bGQgdXN1YWxseSBoYXZlIHRoZSBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgIm5hdGl2ZXNkay0iLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGFuIFNESyB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgJmx0O2ltYWdlbmFtZSZndDs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYSBkZWZhdWx0IGxpc3Qgb2YgcGFja2FnZXMgaXMgc2V0IGluIHRoaXMgdmFyaWFibGUsIGJ1dAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFkZCBhZGRpdGlvbmFsIHBhY2thZ2VzIHRvIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNpbnN0YWxsaW5nLXRoZS1hZHQnPkluc3RhbGxpbmcgdGhlIEFEVCBhbmQgVG9vbGNoYWluczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPT0xDSEFJTl9PVVRQVVROQU1FJz48Z2xvc3N0ZXJtPlRPT0xDSEFJTl9PVVRQVVROQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUT09MQ0hBSU5fT1VUUFVUTkFNRVtkb2NdID0gIkRlZmluZXMgdGhlIG5hbWUgdXNlZCBmb3IgdGhlIHRvb2xjaGFpbiBvdXRwdXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSB0b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE9PTENIQUlOX09VVFBVVE5BTUU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcworICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS10b29sY2hhaW4tJHtTREtfVkVSU0lPTn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX05BTUUnPjxmaWxlbmFtZT5TREtfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19WRVJTSU9OJz48ZmlsZW5hbWU+U0RLX1ZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGdsb3NzdGVybT5UT09MQ0hBSU5fVEFSR0VUX1RBU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRPT0xDSEFJTl9UQVJHRVRfVEFTS1tkb2NdID0gIlRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGl0IGNyZWF0ZXMgdGhlIHRhcmdldCBwYXJ0IG9mIGFuIFNESywgd2hpY2ggaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdXNlcyB3aGVuIGl0IGNyZWF0ZXMgdGhlIHRhcmdldCBwYXJ0IG9mIGFuIFNESworICAgICAgICAgICAgICAgICAgICAoaS5lLiB0aGUgcGFydCBidWlsdCBmb3IgdGhlIHRhcmdldCBoYXJkd2FyZSksIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIGxpYnJhcmllcyBhbmQgaGVhZGVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucworICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjaW5zdGFsbGluZy10aGUtYWR0Jz5JbnN0YWxsaW5nIHRoZSBBRFQgYW5kIFRvb2xjaGFpbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UT1BESVInPjxnbG9zc3Rlcm0+VE9QRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUT1BESVJbZG9jXSA9ICJUaGUgQnVpbGQgRGlyZWN0b3J5LiBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlLiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlbiBidWlsZGluZyBpbWFnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlIHdoZW4geW91CisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgeW91ciBidWlsZCBlbnZpcm9ubWVudCB1c2luZyBlaXRoZXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UUkFOU0xBVEVEX1RBUkdFVF9BUkNIJz48Z2xvc3N0ZXJtPlRSQU5TTEFURURfVEFSR0VUX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRSQU5TTEFURURfVEFSR0VUX0FSQ0hbZG9jXSA9ICJBIHNhbml0aXplZCB2ZXJzaW9uIG9mIFRBUkdFVF9BUkNILiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBpcyBuZWVkZWQgaW4gYSB2YWx1ZSB3aGVyZSB1bmRlcnNjb3JlcyBhcmUgbm90IGFsbG93ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzYW5pdGl6ZWQgdmVyc2lvbiBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmUgaXMgbmVlZGVkIGluCisgICAgICAgICAgICAgICAgICAgIGEgdmFsdWUgd2hlcmUgdW5kZXJzY29yZXMgYXJlIG5vdCBhbGxvd2VkLCBmb3IgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gcGFja2FnZSBmaWxlbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgZGFzaCBjaGFyYWN0ZXJzIHJlcGxhY2UgYW55IHVuZGVyc2NvcmUKKyAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyB1c2VkIGluIFRBUkdFVF9BUkNILgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgZWRpdCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfQVJDSCc+PGdsb3NzdGVybT5UVU5FX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfQVJDSFtkb2NdID0gIlRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgKGkuZS4gYXJtLCBhcm1lYiwgbWlwcywgbWlwczY0LCBhbmQgc28gZm9ydGgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPmFybTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXJtZWI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1pcHM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1pcHM2NDwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhpcyB2YWx1ZSB0byBzZXR1cCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT4gZGVmaW5pdGlvbnMgYXJlIHNwZWNpZmljIHRvCisgICAgICAgICAgICAgICAgICAgIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmaW5pdGlvbnMgY2FuIGJlIGEgc2luZ2xlIHN0YXRpYyBkZWZpbml0aW9uLCBvcgorICAgICAgICAgICAgICAgICAgICBjYW4gYmUgZHluYW1pY2FsbHkgYWRqdXN0ZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIGRldGFpbHMgZm9yIGEgZ2l2ZW4gQ1BVIGZhbWlseSBieSBsb29raW5nIGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUncyA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgPGZpbGVuYW1lPlRVTkVfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIHRoZSA8ZmlsZW5hbWU+bWlwczwvZmlsZW5hbWU+IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfQVJDSDwvZmlsZW5hbWU+IGlzIHRpZWQgY2xvc2VseSB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggZGVmaW5lcyB0aGUgdGFyZ2V0IG1hY2hpbmUncyBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPikgc2V0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0FSQ0g8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9BUkNIID0gIiR7VFVORV9BUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QsIHdoaWNoIGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlIHNpbmNlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgYXJlIGNvbmZpZ3VyYWJsZSwgc2hvd3Mgc3VwcG9ydGVkIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhcm0KKyAgICAgaTU4NgorICAgICB4ODZfNjQKKyAgICAgcG93ZXJwYworICAgICBwb3dlcnBjNjQKKyAgICAgbWlwcworICAgICBtaXBzZWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfQVNBUkdTJz48Z2xvc3N0ZXJtPlRVTkVfQVNBUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX0FTQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFzc2VtYmxlciBmbGFncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZmxhZ3MgaXMgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHR1bmUgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FX0FTQVJHUzwvZmlsZW5hbWU+IGlzIHNldCB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgdHVuZSBpbmNsdWRlIGZpbGVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlLzwvZmlsZW5hbWU+IGFuZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgaW5mbHVlbmNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+VFVORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBkZWZpbmVzIHRoZSBmbGFncyBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FX0FTQVJHUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIteDMyIiwgIiIsIGQpfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpIHNlbGVjdCB0aGUgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWxlY3RlZCB0dW5lLCBpbiB0dXJuLCBhZmZlY3RzIHRoZSB0dW5lIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcyAoaS5lLiB0aGUgdHVuZSBjYW4gc3VwcGx5IGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCBvZiBmbGFncykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX0NDQVJHUyc+PGdsb3NzdGVybT5UVU5FX0NDQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORV9DQ0FSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEMgY29tcGlsZXIgZmxhZ3MgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQyBjb21waWxlciBmbGFncyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZmxhZ3MgaXMgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHR1bmUgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FX0NDQVJHUzwvZmlsZW5hbWU+IGlzIHNldCB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgdHVuZSBpbmNsdWRlIGZpbGVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlLzwvZmlsZW5hbWU+IGFuZCBhcmUKKyAgICAgICAgICAgICAgICAgICAgaW5mbHVlbmNlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+VFVORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKSBzZWxlY3QgdGhlIHR1bmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2VsZWN0ZWQgdHVuZSwgaW4gdHVybiwgYWZmZWN0cyB0aGUgdHVuZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1zZWx2ZXMgKGkuZS4gdGhlIHR1bmUgY2FuIHN1cHBseSBpdHMgb3duCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgb2YgZmxhZ3MpLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9MREFSR1MnPjxnbG9zc3Rlcm0+VFVORV9MREFSR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfTERBUkdTW2RvY10gPSAiU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbGlua2VyIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBmbGFncyBpcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgdHVuZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfTERBUkdTPC9maWxlbmFtZT4gaXMgc2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0dW5lIGluY2x1ZGUgZmlsZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvPC9maWxlbmFtZT4gYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICBpbmZsdWVuY2VkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGRlZmluZXMgdGhlIGZsYWdzIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfTERBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi1tIGVsZjMyX3g4Nl82NCIsICIiLCBkKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKSBzZWxlY3QgdGhlIHR1bmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2VsZWN0ZWQgdHVuZSwgaW4gdHVybiwgYWZmZWN0cyB0aGUgdHVuZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1zZWx2ZXMgKGkuZS4gdGhlIHR1bmUgY2FuIHN1cHBseSBpdHMgb3duCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgb2YgZmxhZ3MpLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9GRUFUVVJFUyc+PGdsb3NzdGVybT5UVU5FX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX0ZFQVRVUkVTW2RvY10gPSAiRmVhdHVyZXMgdXNlZCB0byAidHVuZSIgYSBjb21waWxlciBmb3Igb3B0aW1hbCB1c2UgZ2l2ZW4gYSBzcGVjaWZpYyBwcm9jZXNzb3IuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZXMgdXNlZCB0byAidHVuZSIgYSBjb21waWxlciBmb3Igb3B0aW1hbCB1c2UKKyAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gYSBzcGVjaWZpYyBwcm9jZXNzb3IuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmZWF0dXJlcyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIHR1bmUgZmlsZXMgYW5kIGFsbG93CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyAoaS5lLiA8ZmlsZW5hbWU+VFVORV8qQVJHUzwvZmlsZW5hbWU+KSB0byBiZQorICAgICAgICAgICAgICAgICAgICBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB2ZXJpZmllcyB0aGUgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgc3VyZSB0aGV5IGFyZSBub3QgY29uZmxpY3RpbmcgYW5kIHRoYXQgdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4pIGRlZmluZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfRkVBVFVSRVMgPz89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVGQVVMVFRVTkUnPjxmaWxlbmFtZT5ERUZBVUxUVFVORTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxnbG9zc3Rlcm0+VFVORV9QS0dBUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX1BLR0FSQ0hbZG9jXSA9ICJUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdW5kZXJzdG9vZCBieSB0aGUgcGFja2FnaW5nIHN5c3RlbSB0byBkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSwgQUJJLCBhbmQgdHVuaW5nIG9mIG91dHB1dCBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdW5kZXJzdG9vZCBieSB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB0byBkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSwgQUJJLCBhbmQgdHVuaW5nIG9mCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmljIHR1bmUgaXMgZGVmaW5lZCB1c2luZyB0aGUgIl90dW5lIiBvdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfUEtHQVJDSF90dW5lLTxyZXBsYWNlYWJsZT50dW5lPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnR1bmU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0dW5lLXNwZWNpZmljIHBhY2thZ2UgYXJjaGl0ZWN0dXJlcyBhcmUgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgbWFjaGluZSBpbmNsdWRlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhlICJjb3JlMi0zMiIgdHVuaW5nIGFzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi0zMiA9ICJjb3JlMi0zMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVBQkknPjxnbG9zc3Rlcm0+VFVORUFCSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORUFCSVtkb2NdID0gIkFuIHVuZGVybHlpbmcgQUJJIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIHR1bmluZyBpbiBhIGdpdmVuIHRvb2xjaGFpbiBsYXllci4gVGhpcyBmZWF0dXJlIGFsbG93cyBwcm92aWRlcnMgdXNpbmcgcHJlYnVpbHQgbGlicmFyaWVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgYSB0dW5pbmcgYWdhaW5zdCB0aGVpciBzZWxlY3Rpb24gb2YgbGlicmFyaWVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIHVuZGVybHlpbmcgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB1c2VkIGJ5CisgICAgICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciB0dW5pbmcgaW4gYSBnaXZlbiB0b29sY2hhaW4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVycyB0aGF0IHVzZSBwcmVidWlsdCBsaWJyYXJpZXMgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfT1ZFUlJJREUnPjxmaWxlbmFtZT5UVU5FQUJJX09WRVJSSURFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfV0hJVEVMSVNUJz48ZmlsZW5hbWU+VFVORUFCSV9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgdHVuaW5ncyBhZ2FpbnN0IHRoZWlyCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiBvZiBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5UVU5FQUJJPC9maWxlbmFtZT4gaXMgdW5kZWZpbmVkLCB0aGVuIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgIHR1bmluZyBpcyBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNhbml0eSc+PGZpbGVuYW1lPnNhbml0eTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB0byBzZWUgaG93IHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVBQklfT1ZFUlJJREUnPjxnbG9zc3Rlcm0+VFVORUFCSV9PVkVSUklERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORUFCSV9PVkVSUklERVtkb2NdID0gIklmIHNldCwgaWdub3JlcyBUVU5FQUJJX1dISVRFTElTVC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIHRoZSBPcGVuRW1iZWRkZWQgc3lzdGVtIGlnbm9yZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FQUJJX1dISVRFTElTVCc+PGZpbGVuYW1lPlRVTkVBQklfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcnMgdGhhdCB1c2UgcHJlYnVpbHQgbGlicmFyaWVzIGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FQUJJX09WRVJSSURFPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQkknPjxmaWxlbmFtZT5UVU5FQUJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBjaGVjayBjb21wYXRpYmlsaXR5IG9mIGEgdHVuaW5nIGFnYWluc3QgdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uIG9mIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zYW5pdHknPjxmaWxlbmFtZT5zYW5pdHk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdG8gc2VlIGhvdyB0aGUgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FQUJJX1dISVRFTElTVCc+PGdsb3NzdGVybT5UVU5FQUJJX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORUFCSV9XSElURUxJU1RbZG9jXSA9ICJBIHdoaXRlbGlzdCBvZiBwZXJtaXNzaWJsZSBUVU5FQUJJIHZhbHVlcy4gIElmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhbGwgdmFsdWVzIGFyZSBhbGxvd2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgd2hpdGVsaXN0IG9mIHBlcm1pc3NpYmxlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FQUJJJz48ZmlsZW5hbWU+VFVORUFCSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgICAgIGFsbCB0dW5lcyBhcmUgYWxsb3dlZC4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJzIHRoYXQgdXNlIHByZWJ1aWx0IGxpYnJhcmllcyBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORUFCSV9XSElURUxJU1Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfT1ZFUlJJREUnPjxmaWxlbmFtZT5UVU5FQUJJX09WRVJSSURFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgdG8gY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eSBvZiBhIHR1bmluZyBhZ2FpbnN0IHRoZWlyIHNlbGVjdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2FuaXR5Jz48ZmlsZW5hbWU+c2FuaXR5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRvIHNlZSBob3cgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORUNPTkZMSUNUUyc+PGdsb3NzdGVybT5UVU5FQ09ORkxJQ1RTWzxyZXBsYWNlYWJsZT5mZWF0dXJlPC9yZXBsYWNlYWJsZT5dPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQ09ORkxJQ1RTW2RvY10gPSAiU3BlY2lmaWVzIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmluZyBmZWF0dXJlcyB0aGF0IGNvbmZsaWN0IHdpdGggc3BlY2lmaWVkIGZlYXR1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIHR1bmluZyBmZWF0dXJlcyB0aGF0IGNvbmZsaWN0IHdpdGggPHJlcGxhY2VhYmxlPmZlYXR1cmU8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgS25vd24gdHVuaW5nIGNvbmZsaWN0cyBhcmUgc3BlY2lmaWVkIGluIHRoZSBtYWNoaW5lIGluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZSB0aGF0IGxpc3RzIHRoZSAibzMyIiBhbmQgIm42NCIgZmVhdHVyZXMgYXMKKyAgICAgICAgICAgICAgICAgICAgY29uZmxpY3Rpbmcgd2l0aCB0aGUgIm4zMiIgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FQ09ORkxJQ1RTW24zMl0gPSAibzMyIG42NCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVWQUxJRCc+PGdsb3NzdGVybT5UVU5FVkFMSURbPHJlcGxhY2VhYmxlPmZlYXR1cmU8L3JlcGxhY2VhYmxlPl08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVFVORVZBTElEW2RvY10gPSAiRGVzY3JpcHRpb25zLCBzdG9yZWQgYXMgZmxhZ3MsIG9mIHZhbGlkIHR1bmluZyBmZWF0dXJlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB2YWxpZCBDUFUgb3IgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKQorICAgICAgICAgICAgICAgICAgICB0dW5pbmcgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBmZWF0dXJlIGlzIHN0b3JlZCBhcyBhIGZsYWcuCisgICAgICAgICAgICAgICAgICAgIFZhbGlkIGZlYXR1cmVzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGF0IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlIGJpZy1lbmRpYW4gbW9kZS4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBtYWNoaW5lIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlc2UgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXUnPjx0aXRsZT5VPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX0NPTkZJRyc+PGdsb3NzdGVybT5VQk9PVF9DT05GSUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfQ09ORklHW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgVUJPT1RfTUFDSElORSBhbmQgY2FuIGFsc28gZGVmaW5lIElNQUdFX0ZTVFlQRVMgZm9yIGluZGl2aWR1YWwgY2FzZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVCT09UX01BQ0hJTkUnPjxmaWxlbmFtZT5VQk9PVF9NQUNISU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBjYW4gYWxzbyBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBpbmRpdmlkdWFsIGNhc2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1mc2wtYXJtPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfQ09ORklHID8/PSAic2QiCisgICAgIFVCT09UX0NPTkZJR1tzZF0gPSAibXg2cXNhYnJlYXV0b19jb25maWcsc2RjYXJkIgorICAgICBVQk9PVF9DT05GSUdbZWltbm9yXSA9ICJteDZxc2FicmVhdXRvX2VpbW5vcl9jb25maWciCisgICAgIFVCT09UX0NPTkZJR1tuYW5kXSA9ICJteDZxc2FicmVhdXRvX25hbmRfY29uZmlnLHViaWZzIgorICAgICBVQk9PVF9DT05GSUdbc3Bpbm9yXSA9ICJteDZxc2FicmVhdXRvX3NwaW5vcl9jb25maWciCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCAic2QiIGlzIHNlbGVjdGVkIGFzIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwb3NzaWJsZSBmb3VyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVCT09UX01BQ0hJTkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJzZCIgY29uZmlndXJhdGlvbiBkZWZpbmVzICJteDZxc2FicmVhdXRvX2NvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHZhbHVlIGZvciA8ZmlsZW5hbWU+VUJPT1RfTUFDSElORTwvZmlsZW5hbWU+LCB3aGlsZQorICAgICAgICAgICAgICAgICAgICB0aGUgInNkY2FyZCIgc3BlY2lmaWVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+IHRvIHVzZSBmb3IgdGhlIFUtYm9vdAorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VUJPT1RfQ09ORklHPC9maWxlbmFtZT4gaXMgaGFuZGxlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L3RyZWUvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzJz48ZmlsZW5hbWU+dWJvb3QtY29uZmlnPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9FTlRSWVBPSU5UJz48Z2xvc3N0ZXJtPlVCT09UX0VOVFJZUE9JTlQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfRU5UUllQT0lOVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFUtQm9vdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIFUtQm9vdCBpbWFnZSBjcmVhdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5VQk9PVF9FTlRSWVBPSU5UPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIGFzIGEgY29tbWFuZC1saW5lIHBhcmFtZXRlciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVib290LW1raW1hZ2U8L2ZpbGVuYW1lPiB1dGlsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX0xPQURBRERSRVNTJz48Z2xvc3N0ZXJtPlVCT09UX0xPQURBRERSRVNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX0xPQURBRERSRVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIER1cmluZyBVLUJvb3QgaW1hZ2UgY3JlYXRpb24sIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VUJPT1RfTE9BREFERFJFU1M8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgYXMgYSBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWJvb3QtbWtpbWFnZTwvZmlsZW5hbWU+IHV0aWxpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTE9DQUxWRVJTSU9OJz48Z2xvc3N0ZXJtPlVCT09UX0xPQ0FMVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9MT0NBTFZFUlNJT05bZG9jXSA9ICJBcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQXBwZW5kcyBhIHN0cmluZyB0byB0aGUgbmFtZSBvZiB0aGUgbG9jYWwgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgVS1Cb290IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgdGhlIHZlcnNpb24gb2YgdGhlIFUtQm9vdCBpbWFnZQorICAgICAgICAgICAgICAgICAgICBidWlsdCB3YXMgIjIwMTMuMTAsIHRoZSBmdWxsIHZlcnNpb24gc3RyaW5nIHJlcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIFUtQm9vdCB3b3VsZCBiZSAiMjAxMy4xMC15b2N0byIgZ2l2ZW4gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfTE9DQUxWRVJTSU9OID0gIi15b2N0byIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX01BQ0hJTkUnPjxnbG9zc3Rlcm0+VUJPT1RfTUFDSElORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9NQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB2YWx1ZSBwYXNzZWQgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lIHdoZW4gYnVpbGRpbmcgYSBVLUJvb3QgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB2YWx1ZSBwYXNzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgYSBVLUJvb3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHRhcmdldCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGZyb20gdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL21hY2hpbmUvPHJlcGxhY2VhYmxlPm1hY2hpbmVfbmFtZTwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWUgdGhlICJTZWxlY3Rpb24gb2YgUHJvY2Vzc29yIEFyY2hpdGVjdHVyZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgQm9hcmQgVHlwZSIgc2VjdGlvbiBpbiB0aGUgVS1Cb290IFJFQURNRSBmb3IgdmFsaWQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX01BS0VfVEFSR0VUJz48Z2xvc3N0ZXJtPlVCT09UX01BS0VfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX01BS0VfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQgY2FsbGVkIGluIHRoZSBNYWtlZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRhcmdldCBjYWxsZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXJnZXQgaXMgImFsbCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfU1VGRklYJz48Z2xvc3N0ZXJtPlVCT09UX1NVRkZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9TVUZGSVhbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYXRlZCBVLUJvb3QgZXh0ZW5zaW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgZ2VuZXJhdGVkIFUtQm9vdCBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCA8ZmlsZW5hbWU+dS1ib290LnNiPC9maWxlbmFtZT4gaGFzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zYjwvZmlsZW5hbWU+IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgVS1Cb290IGV4dGVuc2lvbiBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfVEFSR0VUJz48Z2xvc3N0ZXJtPlVCT09UX1RBUkdFVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCB1c2VkIGZvciBidWlsZGluZyBVLUJvb3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQgdXNlZCBmb3IgYnVpbGRpbmcgVS1Cb290LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGlzIHBhc3NlZCBkaXJlY3RseSBhcyBwYXJ0IG9mIHRoZSAibWFrZSIgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAoZS5nLiBTUEwgYW5kIEFJUykuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHByb2Nlc3MgcGFzc2VzIGFuZCB1c2VzICJhbGwiIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGR1cmluZyB0aGUgVS1Cb290IGJ1aWxkaW5nIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1RbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIG9wdGlvbnMgdGhhdCwgaWYgcmVwb3J0ZWQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYXMgYmVpbmcgaW52YWxpZCwgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhIHdhcm5pbmcgZHVyaW5nIHRoZSBkb19jb25maWd1cmUgdGFzay4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIG9wdGlvbnMgdGhhdCwgaWYgcmVwb3J0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgYXMgYmVpbmcgaW52YWxpZCwgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIE5vcm1hbGx5LCBpbnZhbGlkIGNvbmZpZ3VyZSBvcHRpb25zIGFyZSBzaW1wbHkgbm90IHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgY29uZmlndXJlIHNjcmlwdCAoZS5nLiBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBjb21tb24gb3B0aW9ucywgZm9yIGV4YW1wbGUsIGV4aXN0IHRoYXQgYXJlIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byBhbGwgY29uZmlndXJlIHNjcmlwdHMgYXQgYSBjbGFzcyBsZXZlbCB0aGF0IG1pZ2h0IG5vdAorICAgICAgICAgICAgICAgICAgICBiZSB2YWxpZCBmb3Igc29tZSBjb25maWd1cmUgc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgSXQgZm9sbG93cyB0aGF0IG5vIGJlbmVmaXQgZXhpc3RzIGluIHNlZWluZyBhIHdhcm5pbmcgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgdGhlc2Ugb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB0aGUgb3B0aW9ucyBhcmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJlIGFyZ3VtZW50cyBjaGVjayB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVDwvZmlsZW5hbWU+IGlzIHBhcnQKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgaXMgb25seSBlbmFibGVkIGlmIHRoZSByZWNpcGUgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VUERBVEVSQ1BOJz48Z2xvc3N0ZXJtPlVQREFURVJDUE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVBEQVRFUkNQTltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBpbml0c2NyaXB0IHRoYXQgaXMgdG8gYmUgZW5hYmxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgcmVjaXBlcyBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtcmMuZCc+PGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCA8ZmlsZW5hbWU+VVBEQVRFUkNQTjwvZmlsZW5hbWU+IHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBpbml0c2NyaXB0IHRoYXQgaXMgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIiR7UE59Ii4KKyAgICAgICAgICAgICAgICAgICAgR2l2ZW4gdGhhdCBhbG1vc3QgYWxsIHJlY2lwZXMgdGhhdCBpbnN0YWxsIGluaXRzY3JpcHRzCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgdGhlbSBpbiB0aGUgbWFpbiBwYWNrYWdlIGZvciB0aGUgcmVjaXBlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgcmFyZWx5IG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUgaW4gaW5kaXZpZHVhbCByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRV9ERVZGUyc+PGdsb3NzdGVybT5VU0VfREVWRlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFX0RFVkZTW2RvY10gPSAiRGV0ZXJtaW5lcyBpZiBkZXZ0bXBmcyBpcyB1c2VkIGZvciAvZGV2IHBvcHVsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBpZiA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPiBpcyB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IHBvcHVsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgZm9yIDxmaWxlbmFtZT5VU0VfREVWRlM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyAiMSIgd2hlbiBubyB2YWx1ZSBpcyBzcGVjaWZpY2FsbHkgc2V0LgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3b3VsZCBzZXQgPGZpbGVuYW1lPlVTRV9ERVZGUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvICIwIiBmb3IgYSBzdGF0aWNhbGx5IHBvcHVsYXRlZCA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc2VsZWN0aW5nLWRldi1tYW5hZ2VyJz5TZWxlY3RpbmcgYSBEZXZpY2UgTWFuYWdlcjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRV9WVCc+PGdsb3NzdGVybT5VU0VfVlQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFX1ZUW2RvY10gPSAiV2hlbiB1c2luZyBTeXNWaW5pdCwgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBydW4gYSBnZXR0eSBvbiBhbnkgdmlydHVhbCB0ZXJtaW5hbHMgaW4gb3JkZXIgdG8gZW5hYmxlIGxvZ2dpbmcgaW4gdGhyb3VnaCB0aG9zZSB0ZXJtaW5hbHMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctcmVjaXBlLWVuYWJsaW5nLXN5c3RlbS1zZXJ2aWNlcyc+U3lzVmluaXQ8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBydW4gYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dldHR5XyUyOFVuaXglMjknPmdldHR5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb24gYW55IHZpcnR1YWwgdGVybWluYWxzIGluIG9yZGVyIHRvIGVuYWJsZSBsb2dnaW5nIGluCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhvc2UgdGVybWluYWxzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSB1c2VkIGZvciA8ZmlsZW5hbWU+VVNFX1ZUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgIjEiIHdoZW4gbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpY2FsbHkgc2V0LgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3b3VsZCBzZXQgPGZpbGVuYW1lPlVTRV9WVDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvICIwIiBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIG1hY2hpbmVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZG8gbm90IGhhdmUgYSBncmFwaGljYWwgZGlzcGxheSBhdHRhY2hlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIGRvIG5vdCBuZWVkIHZpcnR1YWwgdGVybWluYWwgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSX0NMQVNTRVMnPjxnbG9zc3Rlcm0+VVNFUl9DTEFTU0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJfQ0xBU1NFU1tkb2NdID0gIkxpc3Qgb2YgYWRkaXRpb25hbCBjbGFzc2VzIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGltYWdlcyB0aGF0IGVuYWJsZSBleHRyYSBmZWF0dXJlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY2xhc3NlcyB0byBnbG9iYWxseSBpbmhlcml0LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIGVuYWJsZSBleHRyYSBmZWF0dXJlcyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRzdGF0czwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW1hZ2UtbWtsaWJzPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGxpc3QgaXMgc2V0IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJBRERfRVJST1JfRFlOQU1JQyc+PGdsb3NzdGVybT5VU0VSQUREX0VSUk9SX0RZTkFNSUM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9FUlJPUl9EWU5BTUlDW2RvY10gPSAiRm9yY2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHByb2R1Y2UgYW4gZXJyb3IgaWYgdGhlIHVzZXIgaWRlbnRpZmljYXRpb24gKHVpZCkgYW5kIGdyb3VwIGlkZW50aWZpY2F0aW9uIChnaWQpIHZhbHVlcyBhcmUgbm90IGRlZmluZWQgaW4gZmlsZXMvcGFzc3dkIGFuZCBmaWxlcy9ncm91cCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3JjZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcHJvZHVjZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICBpZiB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KSBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgaWRlbnRpZmljYXRpb24gKDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPikgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+ZmlsZXMvcGFzc3dkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5maWxlcy9ncm91cDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbSBpcyB0byBkeW5hbWljYWxseQorICAgICAgICAgICAgICAgICAgICBhcHBseSA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIDxmaWxlbmFtZT5VU0VSQUREX0VSUk9SX0RZTkFNSUM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBieSBkZWZhdWx0IG5vdCBzZXQuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBwbGFuIG9uIHVzaW5nIHN0YXRpY2FsbHkgYXNzaWduZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCB5b3Ugc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+IHZhcmlhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFERF9FUlJPUl9EWU5BTUlDID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpbXBsaWVzIHlvdSBhcmUgZ29pbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgYWxzbyB0YWtlIHN0ZXBzIHRvIHNldCBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzIHRocm91Z2ggdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGZpbGVuYW1lPlVTRVJBRERFWFRFTlNJT048L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX1VJRF9UQUJMRVMnPjxmaWxlbmFtZT5VU0VSQUREX1VJRF9UQUJMRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9HSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9HSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX0dJRF9UQUJMRVMnPjxnbG9zc3Rlcm0+VVNFUkFERF9HSURfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfR0lEX1RBQkxFU1tkb2NdID0gIlNwZWNpZmllcyBhIHBhc3N3b3JkIGZpbGUgdG8gdXNlIGZvciBvYnRhaW5pbmcgc3RhdGljIGdyb3VwIGlkZW50aWZpY2F0aW9uIChnaWQpIHZhbHVlcyB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFkZHMgYSBncm91cCB0byB0aGUgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBwYXNzd29yZCBmaWxlIHRvIHVzZSBmb3Igb2J0YWluaW5nIHN0YXRpYworICAgICAgICAgICAgICAgICAgICBncm91cCBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+KSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhZGRzIGEgZ3JvdXAgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYXBwbHlpbmcgc3RhdGljIGdyb3VwIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pIHZhbHVlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gbG9va3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYSA8ZmlsZW5hbWU+ZmlsZXMvZ3JvdXA8L2ZpbGVuYW1lPiBmaWxlIGFuZCB0aGVuIGFwcGxpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhvc2UgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERfR0lEX1RBQkxFUyA9ICJmaWxlcy9ncm91cCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGZpbGVuYW1lPlVTRVJBRERFWFRFTlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gInVzZXJhZGQtc3RhdGljaWRzIiBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB0byB1c2Ugc3RhdGljIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFERF9QQUNLQUdFUyc+PGdsb3NzdGVybT5VU0VSQUREX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB3aXRoaW4gdGhlIHJlY2lwZSB0aGF0IHJlcXVpcmUgdXNlcnMgYW5kL29yIGdyb3VwcyB0byBiZSBhZGRlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB3aXRoaW4gdGhlIHJlY2lwZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUgdXNlcnMgYW5kL29yIGdyb3VwcyB0byBiZSBhZGRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaWYgdGhlIHJlY2lwZSBpbmhlcml0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGVuYWJsZXMgYWRkaW5nIGEgdXNlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIG1haW4gcGFja2FnZSBpbiBhIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgZm9sbG93cyB0aGF0IGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVTRVJBRERfUEFDS0FHRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHNldCBvbmUgb3IgbW9yZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX1BBUkFNJz48ZmlsZW5hbWU+VVNFUkFERF9QQVJBTTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUEFERF9QQVJBTSc+PGZpbGVuYW1lPkdST1VQQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUE1FTVNfUEFSQU0nPjxmaWxlbmFtZT5HUk9VUE1FTVNfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFERF9QQVJBTSc+PGdsb3NzdGVybT5VU0VSQUREX1BBUkFNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSB1c2VyYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgdXNlciB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+PGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaCB0byBhZGQgYSB1c2VyIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kYnVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIG1lc3NhZ2VidXMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFuZGFyZCBMaW51eCBzaGVsbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vOC91c2VyYWRkJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX1VJRF9UQUJMRVMnPjxnbG9zc3Rlcm0+VVNFUkFERF9VSURfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERfVUlEX1RBQkxFU1tkb2NdID0gIlNwZWNpZmllcyBhIHBhc3N3b3JkIGZpbGUgdG8gdXNlIGZvciBvYnRhaW5pbmcgc3RhdGljIHVzZXIgaWRlbnRpZmljYXRpb24gKHVpZCkgdmFsdWVzIHdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWRkcyBhIHVzZXIgdG8gdGhlIHN5c3RlbSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgcGFzc3dvcmQgZmlsZSB0byB1c2UgZm9yIG9idGFpbmluZyBzdGF0aWMKKyAgICAgICAgICAgICAgICAgICAgdXNlciBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhZGRzIGEgdXNlciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBhcHBseWluZyBzdGF0aWMgdXNlciBpZGVudGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KSB2YWx1ZXMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGxvb2tzIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgPGZpbGVuYW1lPmZpbGVzL3Bhc3N3ZDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4gYXBwbGllcworICAgICAgICAgICAgICAgICAgICB0aG9zZSA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3MgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFERF9VSURfVEFCTEVTID0gImZpbGVzL3Bhc3N3ZCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGZpbGVuYW1lPlVTRVJBRERFWFRFTlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gInVzZXJhZGQtc3RhdGljaWRzIiBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB0byB1c2Ugc3RhdGljIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFEREVYVEVOU0lPTic+PGdsb3NzdGVybT5VU0VSQURERVhURU5TSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVTRVJBRERFWFRFTlNJT05bZG9jXSA9ICJXaGVuIHNldCB0byAidXNlcmFkZC1zdGF0aWNpZHMiLCBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYmFzZSBhbGwgdXNlciBhbmQgZ3JvdXAgYWRkaXRpb25zIG9uIGEgc3RhdGljIHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgZm91bmQgaW4gQkJQQVRILiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IHRvICJ1c2VyYWRkLXN0YXRpY2lkcyIsIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBiYXNlIGFsbCB1c2VyIGFuZCBncm91cAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbnMgb24gYSBzdGF0aWMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhc3N3ZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JvdXA8L2ZpbGVuYW1lPiBmaWxlcyBmb3VuZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2Ugc3RhdGljIHVzZXIgaWRlbnRpZmljYXRpb24gKDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgYW5kIGdyb3VwIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcywgc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERFWFRFTlNJT04gPSAidXNlcmFkZC1zdGF0aWNpZHMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gdXNlIHN0YXRpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZW1wbG95CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQtc3RhdGljaWRzJz48ZmlsZW5hbWU+dXNlcmFkZC1zdGF0aWNpZHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2Ugc3RhdGljIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IGluZm9ybWF0aW9uLCB5b3UgbXVzdCBhbHNvCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIDxmaWxlbmFtZT5maWxlcy9wYXNzd2Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGVzL2dyb3VwPC9maWxlbmFtZT4gZmlsZXMgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfVUlEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfR0lEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfR0lEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IHNob3VsZCBhbHNvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfRVJST1JfRFlOQU1JQyc+PGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tICAgICAgICAgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktdic+PHRpdGxlPlY8L3RpdGxlPi0tPgorPCEtLSAgICAgICAgICAgIDwvZ2xvc3NkaXY+LS0+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS13Jz48dGl0bGU+VzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1XQVJOX1FBJz48Z2xvc3N0ZXJtPldBUk5fUUE8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgV0FSTl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyB3YXJuaW5ncyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgd2FybmluZ3MgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGNoZWNrcyB5b3UgY2FuIGNvbnRyb2wgd2l0aCB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1XT1JLRElSJz48Z2xvc3N0ZXJtPldPUktESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgV09SS0RJUltkb2NdID0gIlRoZSBwYXRobmFtZSBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIGEgcmVjaXBlLiBUaGlzIGRpcmVjdG9yeSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgVE1QRElSIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGNoYW5nZXMgYXMgZGlmZmVyZW50IHBhY2thZ2VzIGFyZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aG5hbWUgb2YgdGhlIHdvcmsgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGJ1aWxkcyBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaXMgbG9jYXRlZCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgaXMgc3BlY2lmaWMgdG8gdGhlIHJlY2lwZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBhbmQgdGhlIHN5c3RlbSBmb3Igd2hpY2ggaXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBkZWZpbmVkIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtUTVBESVJ9L3dvcmsvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBhY3R1YWwgZGlyZWN0b3J5IGRlcGVuZHMgb24gc2V2ZXJhbCB0aGluZ3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIGJ1aWxkIG91dHB1dCBkaXJlY3Rvcnk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxsaW5rIGxpbmtlbmQ9J3Zhci1NVUxUSU1BQ0hfVEFSR0VUX1NZUyc+PGZpbGVuYW1lPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgc3lzdGVtIGlkZW50aWZpZXI8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgbmFtZTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLUVYVEVORFBFJz48ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIC0gKGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc3BlY2lmaWVkLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvciBtb3N0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcywgdGhlbiA8ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPiBpcyBibGFuayk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSByZXZpc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBhc3N1bWUgYSBTb3VyY2UgRGlyZWN0b3J5IHRvcC1sZXZlbCBmb2xkZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkPC9maWxlbmFtZT4sIGFuZCBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXBva3ktbGludXg8L2ZpbGVuYW1lPiBtYWNoaW5lIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBzdXBwb3NlIHlvdXIgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4zLjAtcjAuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgd29yayBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRvCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSBwYWNrYWdlIHdvdWxkIGJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvZm9vLzEuMy4wLXIwCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnkteCc+PHRpdGxlPlg8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItWFNFUlZFUic+PGdsb3NzdGVybT5YU0VSVkVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFhTRVJWRVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgdG8gcHJvdmlkZSBhbiBYIHNlcnZlciBhbmQgZHJpdmVycyBmb3IgdGhlIGN1cnJlbnQgbWFjaGluZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZCB0bworICAgICAgICAgICAgICAgICAgICBwcm92aWRlIGFuIFggc2VydmVyIGFuZCBkcml2ZXJzIGZvciB0aGUgY3VycmVudCBtYWNoaW5lLAorICAgICAgICAgICAgICAgICAgICBhc3N1bWluZyB5b3VyIGltYWdlIGRpcmVjdGx5IGluY2x1ZGVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlcjwvZmlsZW5hbWU+IG9yLAorICAgICAgICAgICAgICAgICAgICBwZXJoYXBzIGluZGlyZWN0bHksIGluY2x1ZGVzICJ4MTEtYmFzZSIgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDxmaWxlbmFtZT5YU0VSVkVSPC9maWxlbmFtZT4sIGlmIG5vdAorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiwgaXMKKyAgICAgICAgICAgICAgICAgICAgInhzZXJ2ZXIteG9yZyB4Zjg2LXZpZGVvLWZiZGV2IHhmODYtaW5wdXQtZXZkZXYiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0gICAgICAgICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS15Jz48dGl0bGU+WTwvdGl0bGU+LS0+Cis8IS0tICAgICAgICAgICAgPC9nbG9zc2Rpdj4tLT4KKworPCEtLSAgICAgICAgICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXonPjx0aXRsZT5aPC90aXRsZT4tLT4KKzwhLS0gICAgICAgICAgICA8L2dsb3NzZGl2Pi0tPgorCis8L2dsb3NzYXJ5PgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFybG9jYWxpdHkueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y4NzMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmxvY2FsaXR5LnhtbApAQCAtMCwwICsxLDE5NiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi12YXJsb2NhbGl0eSc+CisgICAgPHRpdGxlPlZhcmlhYmxlIENvbnRleHQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoaWxlIHlvdSBjYW4gdXNlIG1vc3QgdmFyaWFibGVzIGluIGFsbW9zdCBhbnkgY29udGV4dCBzdWNoIGFzCisgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcywKKyAgICAgICAgc29tZSB2YXJpYWJsZXMgYXJlIG9mdGVuIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgbG9jYWxpdHkgb3IgY29udGV4dC4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBzb21lIGNvbW1vbiBhc3NvY2lhdGlvbnMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1jb25maWd1cmF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBwcm92aWRlIGxpc3RzIG9mIHZhcmlhYmxlcyB3aG9zZSBjb250ZXh0IGlzCisgICAgICAgICAgICBjb25maWd1cmF0aW9uOiBkaXN0cmlidXRpb24sIG1hY2hpbmUsIGFuZCBsb2NhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktY29uZmlnLWRpc3Rybyc+CisgICAgICAgICAgICA8dGl0bGU+RGlzdHJpYnV0aW9uIChEaXN0cm8pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHdob3NlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyB0aGUKKyAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgb3IgZGlzdHJvLgorICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPkRJU1RSTzwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19OQU1FJz5ESVNUUk9fTkFNRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fVkVSU0lPTic+RElTVFJPX1ZFUlNJT048L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFJTlRBSU5FUic+TUFJTlRBSU5FUjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPlBBQ0tBR0VfQ0xBU1NFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPlRBUkdFVF9PUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfRlBVJz5UQVJHRVRfRlBVPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRDTU9ERSc+VENNT0RFPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRDTElCQyc+VENMSUJDPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1jb25maWctbWFjaGluZSc+CisgICAgICAgICAgICA8dGl0bGU+TWFjaGluZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgd2hvc2UgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIHRoZQorICAgICAgICAgICAgICAgIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPlRBUkdFVF9BUkNIPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0VSSUFMX0NPTlNPTEVTJz5TRVJJQUxfQ09OU09MRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0VYVFJBX0FSQ0hTJz5QQUNLQUdFX0VYVFJBX0FSQ0hTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+SU1BR0VfRlNUWVBFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VYVFJBX1JERVBFTkRTJz5NQUNISU5FX0VYVFJBX1JERVBFTkRTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUworICAgICAgICAgICAgICAgICAgICAgICAgPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUworICAgICAgICAgICAgICAgICAgICAgICAgPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTJz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LWNvbmZpZy1sb2NhbCc+CisgICAgICAgICAgICA8dGl0bGU+TG9jYWw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHdob3NlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBjb25maWd1cmF0aW9uIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+RElTVFJPPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TUFDSElORTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+RExfRElSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+QkJGSUxFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz5FWFRSQV9JTUFHRV9GRUFUVVJFUworICAgICAgICAgICAgICAgICAgICAgICAgPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+UEFDS0FHRV9DTEFTU0VTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPkJCX05VTUJFUl9USFJFQURTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQkJJTkNMVURFTE9HUyc+QkJJTkNMVURFTE9HUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04nPgorICAgICAgICAgICAgICAgICAgICAgICAgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTjwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGVzJz4KKyAgICAgICAgPHRpdGxlPlJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBwcm92aWRlIGxpc3RzIG9mIHZhcmlhYmxlcyB3aG9zZSBjb250ZXh0IGlzCisgICAgICAgICAgICByZWNpcGVzOiByZXF1aXJlZCwgZGVwZW5kZW5jaWVzLCBwYXRoLCBhbmQgZXh0cmEgYnVpbGQgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1yZXF1aXJlZCc+CisgICAgICAgICAgICA8dGl0bGU+UmVxdWlyZWQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPkxJQ0VOU0U8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz5MSUNfRklMRVNfQ0hLU1VNPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+U1JDX1VSSTwvbGluaz48L2ZpbGVuYW1lPiAtIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHJlY2lwZXMgdGhhdCBmZXRjaCBsb2NhbCBvciByZW1vdGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktcmVjaXBlLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB0aGF0IGRlZmluZSByZWNpcGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+UlJFQ09NTUVORFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SQ09ORkxJQ1RTJz5SQ09ORkxJQ1RTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz5SUkVQTEFDRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtcGF0aHMnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGhzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB0aGF0IGRlZmluZSByZWNpcGUgcGF0aHMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVMnPlM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+RklMRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtYnVpbGQnPgorICAgICAgICAgICAgPHRpdGxlPkV4dHJhIEJ1aWxkIEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBleHRyYSBidWlsZCBpbmZvcm1hdGlvbiBmb3IgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNNQUtFJz5FWFRSQV9PRUNNQUtFPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz5FWFRSQV9PRUNPTkY8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRU1BS0UnPkVYVFJBX09FTUFLRTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+REVGQVVMVF9QUkVGRVJFTkNFCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQgc3BlbGwgc3BlbGxsYW5nPWVuX2diCistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZXNvdXJjZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTlmOWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZXNvdXJjZXMueG1sCkBAIC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVzb3VyY2VzJz4KKzx0aXRsZT5Db250cmlidXRpbmcgdG8gdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWludHJvJz4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBpcyBoYXBweSBmb3IgcGVvcGxlIHRvIGV4cGVyaW1lbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgQSBudW1iZXIgb2YgcGxhY2VzIGV4aXN0IHRvIGZpbmQgaGVscCBpZiB5b3UgcnVuIGludG8gZGlmZmljdWx0aWVzIG9yIGZpbmQgYnVncy4KKyAgICAgICAgVG8gZmluZCBvdXQgaG93IHRvIGRvd25sb2FkIHNvdXJjZSBjb2RlLAorICAgICAgICBzZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC15cC1yZWxlYXNlJz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWJ1Z3RyYWNrZXInPgorICAgIDx0aXRsZT5UcmFja2luZyBCdWdzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LCB5b3Ugc2hvdWxkIHJlcG9ydCB0aGVtIHVzaW5nIHRoZQorICAgICAgICBCdWd6aWxsYSBhcHBsaWNhdGlvbiBhdCA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+PC91bGluaz4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLW1haWxpbmdsaXN0Jz4KKyAgICA8dGl0bGU+TWFpbGluZyBsaXN0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBudW1iZXIgb2YgbWFpbGluZyBsaXN0cyBtYWludGFpbmVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGV4aXN0CisgICAgICAgIGFzIHdlbGwgYXMgcmVsYXRlZCBPcGVuRW1iZWRkZWQgbWFpbGluZyBsaXN0cyBmb3IgZGlzY3Vzc2lvbiwKKyAgICAgICAgcGF0Y2ggc3VibWlzc2lvbiBhbmQgYW5ub3VuY2VtZW50cy4KKyAgICAgICAgVG8gc3Vic2NyaWJlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIG1haWxpbmcgbGlzdHMsIGNsaWNrIG9uIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBVUkwgaW4gdGhlIGZvbGxvd2luZyBsaXN0IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9uczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIEdlbmVyYWwgWW9jdG8gUHJvamVjdCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdC4gPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJk9FX0xJU1RTX1VSTDsvbGlzdGluZm8vb3BlbmVtYmVkZGVkLWNvcmUnPjwvdWxpbms+IC0KKyAgICAgICAgICAgICAgICBEaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCBPcGVuRW1iZWRkZWQtQ29yZSAodGhlIGNvcmUgbWV0YWRhdGEpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL29wZW5lbWJlZGRlZC1kZXZlbCc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0IE9wZW5FbWJlZGRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9iaXRiYWtlLWRldmVsJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgRGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QgYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgICAgICBidWlsZCB0b29sLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3Bva3knPjwvdWxpbms+IC0KKyAgICAgICAgICAgICAgICBEaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0by1hbm5vdW5jZSc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIE1haWxpbmcgbGlzdCB0byByZWNlaXZlIG9mZmljaWFsIFlvY3RvIFByb2plY3QgcmVsZWFzZSBhbmQgbWlsZXN0b25lCisgICAgICAgICAgICAgICAgYW5ub3VuY2VtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorICAgIEZvciBtb3JlIFlvY3RvIFByb2plY3QtcmVsYXRlZCBtYWlsaW5nIGxpc3RzLCBzZWUgdGhlIFlvY3RvIFByb2plY3QgY29tbXVuaXR5IG1haWxpbmcgbGlzdHMgcGFnZQorICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL2NvbW11bml0eS9tYWlsaW5nLWxpc3RzJz5oZXJlPC91bGluaz4uCis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtaXJjJz4KKyAgICA8dGl0bGU+SW50ZXJuZXQgUmVsYXkgQ2hhdCAoSVJDKTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVHdvIElSQyBjaGFubmVscyBvbiBmcmVlbm9kZSBhcmUgYXZhaWxhYmxlIGZvciB0aGUgWW9jdG8gUHJvamVjdCBhbmQgUG9reSBkaXNjdXNzaW9uczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+I3lvY3RvPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+I3Bva3k8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtbGlua3MnPgorICAgIDx0aXRsZT5MaW5rczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgcmVzb3VyY2VzIHlvdSB3aWxsIGZpbmQgaGVscGZ1bDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+VGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDwvZW1waGFzaXM+IFRoZSBob21lIHNpdGUgZm9yIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+Cis8IS0tCisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuaW50ZWwuY29tLyc+SW50ZWwgQ29ycG9yYXRpb248L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBjb21wYW55IHRoYXQgYWNxdWlyZWQgT3BlbmVkSGFuZCBpbiAyMDA4IGFuZCBiZWdhbgorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IG9uIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorLS0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIHVwc3RyZWFtLCBnZW5lcmljLCBlbWJlZGRlZCBkaXN0cmlidXRpb24gdXNlZCBhcyB0aGUgYmFzaXMKKyAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIHN5c3RlbSBpbiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBQb2t5IGRlcml2ZXMgZnJvbSBhbmQgY29udHJpYnV0ZXMgYmFjayB0byB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgcHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnL3dpa2kvQml0QmFrZSc+CisgICAgICAgICAgICAgICAgQml0QmFrZTwvdWxpbms+OjwvZW1waGFzaXM+IFRoZSB0b29sIHVzZWQgdG8gcHJvY2VzcyBtZXRhZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIEZvciBtb3JlIGxpbmtzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNvdGhlci1pbmZvcm1hdGlvbic+T3RoZXIgSW5mb3JtYXRpb248L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVzb3VyY2VzLWNvbnRyaWJ1dGlvbnMnPgorICAgIDx0aXRsZT5Db250cmlidXRpb25zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBnbGFkbHkgYWNjZXB0cyBjb250cmlidXRpb25zLgorICAgICAgICBZb3UgY2FuIHN1Ym1pdCBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IGVpdGhlciBieSBjcmVhdGluZyBhbmQgc2VuZGluZworICAgICAgICBwdWxsIHJlcXVlc3RzLAorICAgICAgICBvciBieSBzdWJtaXR0aW5nIHBhdGNoZXMgdGhyb3VnaCBlbWFpbC4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyBib3RoIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb24gaG93CisgICAgICAgIHRvIGlkZW50aWZ5IHRoZSBtYWludGFpbmVyIGZvciBlYWNoIGFyZWEgb2YgY29kZSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdGVjaG5pY2FsLWRldGFpbHMueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdGVjaG5pY2FsLWRldGFpbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjM2NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwKQEAgLTAsMCArMSwxNDIxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndGVjaG5pY2FsLWRldGFpbHMnPgorPHRpdGxlPlRlY2huaWNhbCBEZXRhaWxzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgdGVjaG5pY2FsIGRldGFpbHMgZm9yIHZhcmlvdXMgcGFydHMgb2YgdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QuCisgICAgICAgIEN1cnJlbnRseSwgdG9waWNzIGluY2x1ZGUgWW9jdG8gUHJvamVjdCBjb21wb25lbnRzLAorICAgICAgICBjcm9zcy10b29sY2hhaW4gZ2VuZXJhdGlvbiwgc2hhcmVkIHN0YXRlIChzc3RhdGUpIGNhY2hlLAorICAgICAgICB4MzIsIFdheWxhbmQgc3VwcG9ydCwgYW5kIExpY2Vuc2VzLgorICAgIDwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1jb21wb25lbnRzJz4KKyAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBDb21wb25lbnRzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgdGFzayBleGVjdXRvciB0b2dldGhlciB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBmb3JtCisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgQ29yZS4KKyAgICAgICAgVGhpcyBzZWN0aW9uIG92ZXJ2aWV3cyB0aGVzZSBjb21wb25lbnRzIGJ5IGRlc2NyaWJpbmcgdGhlaXIgdXNlIGFuZAorICAgICAgICBob3cgdGhleSBpbnRlcmFjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0QmFrZSBoYW5kbGVzIHRoZSBwYXJzaW5nIGFuZCBleGVjdXRpb24gb2YgdGhlIGRhdGEgZmlsZXMuCisgICAgICAgIFRoZSBkYXRhIGl0c2VsZiBpcyBvZiB2YXJpb3VzIHR5cGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGVzOjwvZW1waGFzaXM+IFByb3ZpZGVzIGRldGFpbHMKKyAgICAgICAgICAgICAgICBhYm91dCBwYXJ0aWN1bGFyIHBpZWNlcyBvZiBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xhc3MgRGF0YTo8L2VtcGhhc2lzPiBBYnN0cmFjdHMKKyAgICAgICAgICAgICAgICBjb21tb24gYnVpbGQgaW5mb3JtYXRpb24gKGUuZy4gaG93IHRvIGJ1aWxkIGEgTGludXgga2VybmVsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBEYXRhOjwvZW1waGFzaXM+IERlZmluZXMKKyAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIHNldHRpbmdzLCBwb2xpY3kgZGVjaXNpb25zLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIGFjdHMgYXMgdGhlIGdsdWUgdG8gYmluZCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgdG9nZXRoZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCaXRCYWtlIGtub3dzIGhvdyB0byBjb21iaW5lIG11bHRpcGxlIGRhdGEgc291cmNlcyB0b2dldGhlciBhbmQgcmVmZXJzCisgICAgICAgIHRvIGVhY2ggZGF0YSBzb3VyY2UgYXMgYSBsYXllci4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGxheWVycywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZAorICAgICAgICBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBicmllZiBkZXRhaWxzIG9uIHRoZXNlIGNvcmUgY29tcG9uZW50cy4KKyAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QgZHVyaW5nCisgICAgICAgIGEgYnVpbGQsIHNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nsb3Nlci1sb29rJz5BIENsb3NlciBMb29rIGF0IHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPiIKKyAgICAgICAgQ2hhcHRlci4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5CaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgaXMgdGhlIHRvb2wgYXQgdGhlIGhlYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiwKKyAgICAgICAgICAgIGdlbmVyYXRpbmcgYSBsaXN0IG9mIHRhc2tzIGZyb20gaXQsIGFuZCB0aGVuIGV4ZWN1dGluZyB0aG9zZSB0YXNrcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGJyaWVmbHkgaW50cm9kdWNlcyBCaXRCYWtlLgorICAgICAgICAgICAgSWYgeW91IHdhbnQgbW9yZSBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gc2VlIGEgbGlzdCBvZiB0aGUgb3B0aW9ucyBCaXRCYWtlIHN1cHBvcnRzLCB1c2UgZWl0aGVyIG9mCisgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWgKKyAgICAgJCBiaXRiYWtlIC0taGVscAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2UgZm9yIEJpdEJha2UgaXMgPGZpbGVuYW1lPmJpdGJha2UgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiwgd2hlcmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlbmFtZTwvZmlsZW5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHlvdSB3YW50IHRvIGJ1aWxkCisgICAgICAgICAgICAocmVmZXJyZWQgdG8gYXMgdGhlICJ0YXJnZXQiIGluIHRoaXMgbWFudWFsKS4KKyAgICAgICAgICAgIFRoZSB0YXJnZXQgb2Z0ZW4gZXF1YXRlcyB0byB0aGUgZmlyc3QgcGFydCBvZiBhIHJlY2lwZSdzIGZpbGVuYW1lCisgICAgICAgICAgICAoZS5nLiAiZm9vIiBmb3IgYSByZWNpcGUgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4zLjAtcjAuYmI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBTbywgdG8gcHJvY2VzcyB0aGUgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3BfMS4yLjMuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZSwgeW91CisgICAgICAgICAgICBtaWdodCB0eXBlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBTZXZlcmFsIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+IG1pZ2h0IGV4aXN0LgorICAgICAgICAgICAgQml0QmFrZSBjaG9vc2VzIHRoZSBvbmUgc2VsZWN0ZWQgYnkgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgWW91IGNhbiBnZXQgbW9yZSBkZXRhaWxzIGFib3V0IGhvdyBCaXRCYWtlIGNob29zZXMgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgICAgIHRhcmdldCB2ZXJzaW9ucyBhbmQgcHJvdmlkZXJzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYmItYml0YmFrZS1wcmVmZXJlbmNlcyc+UHJlZmVyZW5jZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgYWxzbyB0cmllcyB0byBleGVjdXRlIGFueSBkZXBlbmRlbnQgdGFza3MgZmlyc3QuCisgICAgICAgICAgICBTbyBmb3IgZXhhbXBsZSwgYmVmb3JlIGJ1aWxkaW5nIDxmaWxlbmFtZT5tYXRjaGJveC1kZXNrdG9wPC9maWxlbmFtZT4sIEJpdEJha2UKKyAgICAgICAgICAgIHdvdWxkIGJ1aWxkIGEgY3Jvc3MgY29tcGlsZXIgYW5kIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IGlmIHRoZXkgaGFkIG5vdCBhbHJlYWR5CisgICAgICAgICAgICBiZWVuIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIHVzZWZ1bCBCaXRCYWtlIG9wdGlvbiB0byBjb25zaWRlciBpcyB0aGUgPGZpbGVuYW1lPi1rPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT4tLWNvbnRpbnVlPC9maWxlbmFtZT4gb3B0aW9uLgorICAgICAgICAgICAgVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIEJpdEJha2UgdG8gdHJ5IGFuZCBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBqb2IKKyAgICAgICAgICAgIGFzIGxvbmcgYXMgcG9zc2libGUgZXZlbiBhZnRlciBlbmNvdW50ZXJpbmcgYW4gZXJyb3IuCisgICAgICAgICAgICBXaGVuIGFuIGVycm9yIG9jY3VycywgdGhlIHRhcmdldCB0aGF0CisgICAgICAgICAgICBmYWlsZWQgYW5kIHRob3NlIHRoYXQgZGVwZW5kIG9uIGl0IGNhbm5vdCBiZSByZW1hZGUuCisgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHlvdSB1c2UgdGhpcyBvcHRpb24gb3RoZXIgZGVwZW5kZW5jaWVzIGNhbiBzdGlsbCBiZQorICAgICAgICAgICAgcHJvY2Vzc2VkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1jb21wb25lbnRzLW1ldGFkYXRhJz4KKyAgICAgICAgPHRpdGxlPk1ldGFkYXRhIChSZWNpcGVzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaWxlcyB0aGF0IGhhdmUgdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBzdWZmaXggYXJlICJyZWNpcGVzIgorICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhIHJlY2lwZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwaWVjZSBvZgorICAgICAgICAgICAgc29mdHdhcmUuCisgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRvIGRvd25sb2FkIHRoZQorICAgICAgICAgICAgdW5hbHRlcmVkIHNvdXJjZSwgYW55IHNvdXJjZSBwYXRjaGVzIHRvIGJlIGFwcGxpZWQgdG8gdGhhdCBzb3VyY2UKKyAgICAgICAgICAgIChpZiBuZWVkZWQpLCB3aGljaCBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBhcHBseSwKKyAgICAgICAgICAgIGhvdyB0byBjb21waWxlIHRoZSBzb3VyY2UgZmlsZXMsIGFuZCBob3cgdG8gcGFja2FnZSB0aGUgY29tcGlsZWQKKyAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRlcm0gInBhY2thZ2UiIGlzIHNvbWV0aW1lcyB1c2VkIHRvIHJlZmVyIHRvIHJlY2lwZXMuIEhvd2V2ZXIsCisgICAgICAgICAgICBzaW5jZSB0aGUgd29yZCAicGFja2FnZSIgaXMgdXNlZCBmb3IgdGhlIHBhY2thZ2VkIG91dHB1dCBmcm9tIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSAoaS5lLiA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gZmlsZXMpLAorICAgICAgICAgICAgdGhpcyBkb2N1bWVudCBhdm9pZHMgdXNpbmcgdGhlIHRlcm0gInBhY2thZ2UiIHdoZW4gcmVmZXJyaW5nIHRvIHJlY2lwZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtY2xhc3Nlcyc+CisgICAgICAgIDx0aXRsZT5DbGFzc2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgY29udGFpbiBpbmZvcm1hdGlvbiB0aGF0CisgICAgICAgICAgICBpcyB1c2VmdWwgdG8gc2hhcmUgYmV0d2VlbgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gZmlsZXMuCisgICAgICAgICAgICBBbiBleGFtcGxlIGlzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcywgd2hpY2ggY29udGFpbnMgY29tbW9uIHNldHRpbmdzIGZvciBhbnkgYXBwbGljYXRpb24gdGhhdAorICAgICAgICAgICAgQXV0b3Rvb2xzIHVzZXMuCisgICAgICAgICAgICBUaGUgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzJz5DbGFzc2VzPC9saW5rPiIgY2hhcHRlciBwcm92aWRlcworICAgICAgICAgICAgZGV0YWlscyBhYm91dCBjbGFzc2VzIGFuZCBob3cgdG8gdXNlIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGVzICg8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPikgZGVmaW5lIHZhcmlvdXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgICAgICAgICAgIHRoYXQgZ292ZXJuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGZhbGwgaW50byBzZXZlcmFsIGFyZWFzIHRoYXQgZGVmaW5lIG1hY2hpbmUgY29uZmlndXJhdGlvbiBvcHRpb25zLAorICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgY29tcGlsZXIgdHVuaW5nIG9wdGlvbnMsIGdlbmVyYWwgY29tbW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIG9wdGlvbnMsIGFuZCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LCB3aGljaCBpcyBmb3VuZAorICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0iY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24iPgorICAgIDx0aXRsZT5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZG9lcyBtb3N0IG9mIHRoZSB3b3JrIGZvciB5b3Ugd2hlbiBpdCBjb21lcyB0bworICAgICAgICBjcmVhdGluZworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPmNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnM8L3VsaW5rPi4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgdGVjaG5pY2FsIGJhY2tncm91bmQgb24gaG93CisgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgYXJlIGNyZWF0ZWQgYW5kIHVzZWQuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRvb2xjaGFpbnMsIHlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICB0b29sY2hhaW5zIGFyZSB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZSBhbmQgYXBwbGljYXRpb25zIHRoYXQgcnVuIG9uIHRoZQorICAgICAgICB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgIFdpdGgganVzdCBhIGZldyBjb21tYW5kcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcworICAgICAgICB0aGVzZSBuZWNlc3NhcnkgdG9vbGNoYWlucyBmb3IgeW91LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyBhIGhpZ2gtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQgcmVnYXJkaW5nCisgICAgICAgIHRvb2xjaGFpbiBjb25zdHJ1Y3Rpb24gYW5kIHVzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nIiB3aWR0aD0iOGluIiBkZXB0aD0iNmluIiBhbGlnbj0iY2VudGVyIiAvPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBNb3N0IG9mIHRoZSB3b3JrIG9jY3VycyBvbiB0aGUgQnVpbGQgSG9zdC4KKyAgICAgICAgVGhpcyBpcyB0aGUgbWFjaGluZSB1c2VkIHRvIGJ1aWxkIGltYWdlcyBhbmQgZ2VuZXJhbGx5IHdvcmsgd2l0aGluIHRoZQorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudC4KKyAgICAgICAgV2hlbiB5b3UgcnVuIEJpdEJha2UgdG8gY3JlYXRlIGFuIGltYWdlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB1c2VzIHRoZSBob3N0IDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPiBjb21waWxlciB0byBib290c3RyYXAgYQorICAgICAgICBjcm9zcy1jb21waWxlciBuYW1lZCA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4uCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4gY29tcGlsZXIgaXMgd2hhdCBCaXRCYWtlIHVzZXMgdG8KKyAgICAgICAgY29tcGlsZSBzb3VyY2UgZmlsZXMgd2hlbiBjcmVhdGluZyB0aGUgdGFyZ2V0IGltYWdlLgorICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiBzaW1wbHkgYXMgYW4KKyAgICAgICAgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY3Jvc3MtY29tcGlsZXIgdGhhdCBpcyB1c2VkIGludGVybmFsbHkgd2l0aGluCisgICAgICAgIEJpdEJha2Ugb25seS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNoYWluIG9mIGV2ZW50cyB0aGF0IG9jY3VycyB3aGVuIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiBpcworICAgICAgICBib290c3RyYXBwZWQgaXMgYXMgZm9sbG93czoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBnY2MgLT4gYmludXRpbHMtY3Jvc3MgLT4gZ2NjLWNyb3NzLWluaXRpYWwgLT4gbGludXgtbGliYy1oZWFkZXJzIC0+IGdsaWJjLWluaXRpYWwgLT4gZ2xpYmMgLT4gZ2NjLWNyb3NzIC0+IGdjYy1ydW50aW1lCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhvc3QncyBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmludXRpbHMtY3Jvc3M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgYmFyZSBtaW5pbXVtIGJpbmFyeSB1dGlsaXRpZXMgbmVlZGVkIGluIG9yZGVyIHRvIHJ1bgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzLWluaXRpYWw8L2ZpbGVuYW1lPiBwaGFzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBib290c3RyYXAgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MtY3Jvc3MtaW5pdGlhbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGVhcmx5IHN0YWdlIG9mIHRoZSBib290c3RyYXAgcHJvY2VzcyBmb3IgY3JlYXRpbmcKKyAgICAgICAgICAgICAgICB0aGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgVGhpcyBzdGFnZSBidWlsZHMgZW5vdWdoIG9mIHRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgdGhlIEMgbGlicmFyeSwgYW5kIG90aGVyIHBpZWNlcyBuZWVkZWQgdG8gZmluaXNoIGJ1aWxkaW5nIHRoZQorICAgICAgICAgICAgICAgIGZpbmFsIGNyb3NzLWNvbXBpbGVyIGluIGxhdGVyIHN0YWdlcy4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgaXMgYSAibmF0aXZlIiBwYWNrYWdlIChpLmUuIGl0IGlzIGRlc2lnbmVkIHRvIHJ1biBvbgorICAgICAgICAgICAgICAgIHRoZSBidWlsZCBob3N0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bGludXgtbGliYy1oZWFkZXJzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgSGVhZGVycyBuZWVkZWQgZm9yIHRoZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2xpYmMtaW5pdGlhbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgRW1iZWRkZWQgR0xJQkMgbmVlZGVkIHRvIGJvb3RzdHJhcAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgZmluYWwgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciB0aGUKKyAgICAgICAgICAgICAgICBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YWdlIHJlc3VsdHMgaW4gdGhlIGFjdHVhbCBjcm9zcy1jb21waWxlciB0aGF0CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHdoZW4gaXQgYnVpbGRzIGFuIGltYWdlIGZvciBhIHRhcmdldGVkCisgICAgICAgICAgICAgICAgZGV2aWNlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJlcGxhY2luZyB0aGlzIGNyb3NzIGNvbXBpbGVyIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICB3aXRoIGEgY3VzdG9tIHZlcnNpb24sIHlvdSBtdXN0IHJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgaXMgYWxzbyBhICJuYXRpdmUiIHBhY2thZ2UgKGkuZS4gaXQgaXMKKyAgICAgICAgICAgICAgICBkZXNpZ25lZCB0byBydW4gb24gdGhlIGJ1aWxkIGhvc3QpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MtcnVudGltZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFJ1bnRpbWUgbGlicmFyaWVzIHJlc3VsdGluZyBmcm9tIHRoZSB0b29sY2hhaW4gYm9vdHN0cmFwcGluZworICAgICAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhpcyB0b29sIHByb2R1Y2VzIGEgYmluYXJ5IHRoYXQgY29uc2lzdHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcnVudGltZSBsaWJyYXJpZXMgbmVlZCBmb3IgdGhlIHRhcmdldGVkIGRldmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIGFuIGluc3RhbGxlciBmb3IKKyAgICAgICAgdGhlIHJlbG9jYXRhYmxlIFNESyB1c2VkIHRvIGRldmVsb3AgYXBwbGljYXRpb25zLgorICAgICAgICBXaGVuIHlvdSBydW4gdGhlIGluc3RhbGxlciwgaXQgaW5zdGFsbHMgdGhlIHRvb2xjaGFpbiwgd2hpY2ggY29udGFpbnMKKyAgICAgICAgdGhlIGRldmVsb3BtZW50IHRvb2xzIChlLmcuLCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmdjYy1jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+KSwKKyAgICAgICAgPGZpbGVuYW1lPmJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4sIGFuZCBvdGhlcgorICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLSo8L2ZpbGVuYW1lPiB0b29scyB5b3UgbmVlZCB0byBjcm9zcy1jb21waWxlIGFuZAorICAgICAgICB0ZXN0IHlvdXIgc29mdHdhcmUuCisgICAgICAgIFRoZSBmaWd1cmUgc2hvd3MgdGhlIGNvbW1hbmRzIHlvdSB1c2UgdG8gZWFzaWx5IGJ1aWxkIG91dCB0aGlzCisgICAgICAgIHRvb2xjaGFpbi4KKyAgICAgICAgVGhpcyBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaXMgYnVpbHQgdG8gZXhlY3V0ZSBvbiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICB3aGljaCBtaWdodCBvciBtaWdodCBub3QgYmUgdGhlIHNhbWUKKyAgICAgICAgbWFjaGluZSBhcyB0aGUgQnVpbGQgSG9zdC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBJZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgeW91IGNhbiB0YWtlIGFkdmFudGFnZSBvZiBwcmUtYnVpbHQgaW1hZ2VzIHRoYXQgc2hpcCB3aXRoIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBhbmQgYWxyZWFkeSBjb250YWluIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbgorICAgICAgICAgICAgaW5zdGFsbGVycy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIHRoZSBib290c3RyYXAgcHJvY2VzcyBmb3IgdGhlIHJlbG9jYXRhYmxlIHRvb2xjaGFpbjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBnY2MgLT4gYmludXRpbHMtY3Jvc3NzZGsgLT4gZ2NjLWNyb3Nzc2RrLWluaXRpYWwgLT4gbGludXgtbGliYy1oZWFkZXJzIC0+CisgICAgICAgIGdsaWJjLWluaXRpYWwgLT4gbmF0aXZlc2RrLWdsaWJjIC0+IGdjYy1jcm9zc3NkayAtPiBnY2MtY3Jvc3MtY2FuYWRpYW4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaG9zdCdzIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iaW51dGlscy1jcm9zc3NkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBiYXJlIG1pbmltdW0gYmluYXJ5IHV0aWxpdGllcyBuZWVkZWQgaW4gb3JkZXIgdG8gcnVuCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3NzZGstaW5pdGlhbDwvZmlsZW5hbWU+IHBoYXNlIG9mIHRoZQorICAgICAgICAgICAgICAgIGJvb3RzdHJhcCBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zc3Nkay1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gZWFybHkgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciBjcmVhdGluZworICAgICAgICAgICAgICAgIHRoZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YWdlIGJ1aWxkcyBlbm91Z2ggb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdjYy1jcm9zc3NkazwvZmlsZW5hbWU+IGFuZCBzdXBwb3J0aW5nIHBpZWNlcyBzbyB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGZpbmFsIHN0YWdlIG9mIHRoZSBib290c3RyYXAgcHJvY2VzcyBjYW4gcHJvZHVjZSB0aGUKKyAgICAgICAgICAgICAgICBmaW5pc2hlZCBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgaXMgYSAibmF0aXZlIiBiaW5hcnkgdGhhdCBydW5zIG9uIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC1saWJjLWhlYWRlcnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBIZWFkZXJzIG5lZWRlZCBmb3IgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBFbWJlZGRlZCBHTElCQyBuZWVkZWQgdG8gYm9vdHN0cmFwCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay1nbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5uYXRpdmVzZGstZ2xpYmM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgRW1iZWRkZWQgR0xJQkMgbmVlZGVkIHRvIGJvb3RzdHJhcCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zc3NkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBzdGFnZSBvZiB0aGUgYm9vdHN0cmFwIHByb2Nlc3MgZm9yIHRoZQorICAgICAgICAgICAgICAgIHJlbG9jYXRhYmxlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT4gaXMgYSB0cmFuc2l0b3J5IGNvbXBpbGVyCisgICAgICAgICAgICAgICAgYW5kIG5ldmVyIGxlYXZlcyB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICBJdHMgcHVycG9zZSBpcyB0byBoZWxwIGluIHRoZSBib290c3RyYXAgcHJvY2VzcyB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgZXZlbnR1YWwgcmVsb2NhdGFibGUgPGZpbGVuYW1lPmdjYy1jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tcGlsZXIsIHdoaWNoIGlzIHJlbG9jYXRhYmxlLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhbHNvIGEgIm5hdGl2ZSIgcGFja2FnZSAoaS5lLiBpdCBpcworICAgICAgICAgICAgICAgIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zcy1jYW5hZGlhbjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCByZWxvY2F0YWJsZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBXaGVuIHJ1biBvbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgdGhpcyB0b29sCisgICAgICAgICAgICAgICAgcHJvZHVjZXMgZXhlY3V0YWJsZSBjb2RlIHRoYXQgcnVucyBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBPbmx5IG9uZSBjcm9zcy1jYW5hZGlhbiBjb21waWxlciBpcyBwcm9kdWNlZCBwZXIgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgc2luY2UgdGhleSBjYW4gYmUgdGFyZ2V0ZWQgYXQgZGlmZmVyZW50IHByb2Nlc3NvciBvcHRpbWl6YXRpb25zCisgICAgICAgICAgICAgICAgdXNpbmcgY29uZmlndXJhdGlvbnMgcGFzc2VkIHRvIHRoZSBjb21waWxlciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIGNvbXBpbGUgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgVGhpcyBjaXJjdW12ZW50cyB0aGUgbmVlZCBmb3IgbXVsdGlwbGUgY29tcGlsZXJzIGFuZCB0aHVzCisgICAgICAgICAgICAgICAgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgdG9vbGNoYWlucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGluc3RhbGxlciwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ic2hhcmVkLXN0YXRlLWNhY2hlIj4KKyAgICA8dGl0bGU+U2hhcmVkIFN0YXRlIENhY2hlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZXNpZ24sIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGJ1aWxkcyBldmVyeXRoaW5nIGZyb20gc2NyYXRjaCB1bmxlc3MKKyAgICAgICAgQml0QmFrZSBjYW4gZGV0ZXJtaW5lIHRoYXQgcGFydHMgZG8gbm90IG5lZWQgdG8gYmUgcmVidWlsdC4KKyAgICAgICAgRnVuZGFtZW50YWxseSwgYnVpbGRpbmcgZnJvbSBzY3JhdGNoIGlzIGF0dHJhY3RpdmUgYXMgaXQgbWVhbnMgYWxsIHBhcnRzIGFyZQorICAgICAgICBidWlsdCBmcmVzaCBhbmQgdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkgb2Ygc3RhbGUgZGF0YSBjYXVzaW5nIHByb2JsZW1zLgorICAgICAgICBXaGVuIGRldmVsb3BlcnMgaGl0IHByb2JsZW1zLCB0aGV5IHR5cGljYWxseSBkZWZhdWx0IGJhY2sgdG8gYnVpbGRpbmcgZnJvbSBzY3JhdGNoCisgICAgICAgIHNvIHRoZXkga25vdyB0aGUgc3RhdGUgb2YgdGhpbmdzIGZyb20gdGhlIHN0YXJ0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSBmcm9tIHNjcmF0Y2ggaXMgYm90aCBhbiBhZHZhbnRhZ2UgYW5kIGEgZGlzYWR2YW50YWdlIHRvIHRoZSBwcm9jZXNzLgorICAgICAgICBBcyBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgYnVpbGRpbmcgZnJvbSBzY3JhdGNoIGVuc3VyZXMgdGhhdAorICAgICAgICBldmVyeXRoaW5nIGlzIGN1cnJlbnQgYW5kIHN0YXJ0cyBmcm9tIGEga25vd24gc3RhdGUuCisgICAgICAgIEhvd2V2ZXIsIGJ1aWxkaW5nIGZyb20gc2NyYXRjaCBhbHNvIHRha2VzIG11Y2ggbG9uZ2VyIGFzIGl0IGdlbmVyYWxseSBtZWFucworICAgICAgICByZWJ1aWxkaW5nIHRoaW5ncyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSBuZWVkIHRvIGJlIHJlYnVpbHQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGltcGxlbWVudHMgc2hhcmVkIHN0YXRlIGNvZGUgdGhhdCBzdXBwb3J0cyBpbmNyZW1lbnRhbCBidWlsZHMuCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgYW5zd2VycyB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucyB0aGF0CisgICAgICAgIHdlcmUgZnVuZGFtZW50YWwgcm9hZGJsb2NrcyB3aXRoaW4gdGhlIE9wZW5FbWJlZGRlZCBpbmNyZW1lbnRhbCBidWlsZCBzdXBwb3J0IHN5c3RlbToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGF0IHBpZWNlcyBvZiB0aGUgc3lzdGVtIGhhdmUgY2hhbmdlZCBhbmQgd2hhdCBwaWVjZXMgaGF2ZQorICAgICAgICAgICAgICAgIG5vdCBjaGFuZ2VkPzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyBhcmUgY2hhbmdlZCBwaWVjZXMgb2Ygc29mdHdhcmUgcmVtb3ZlZCBhbmQgcmVwbGFjZWQ/PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IGFyZSBwcmUtYnVpbHQgY29tcG9uZW50cyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIHJlYnVpbHQgZnJvbSBzY3JhdGNoCisgICAgICAgICAgICAgICAgdXNlZCB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZT88L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciB0aGUgZmlyc3QgcXVlc3Rpb24sIHRoZSBidWlsZCBzeXN0ZW0gZGV0ZWN0cyBjaGFuZ2VzIGluIHRoZSAiaW5wdXRzIiB0byBhIGdpdmVuIHRhc2sgYnkKKyAgICAgICAgY3JlYXRpbmcgYSBjaGVja3N1bSAob3Igc2lnbmF0dXJlKSBvZiB0aGUgdGFzaydzIGlucHV0cy4KKyAgICAgICAgSWYgdGhlIGNoZWNrc3VtIGNoYW5nZXMsIHRoZSBzeXN0ZW0gYXNzdW1lcyB0aGUgaW5wdXRzIGhhdmUgY2hhbmdlZCBhbmQgdGhlIHRhc2sgbmVlZHMgdG8gYmUKKyAgICAgICAgcmVydW4uCisgICAgICAgIEZvciB0aGUgc2Vjb25kIHF1ZXN0aW9uLCB0aGUgc2hhcmVkIHN0YXRlIChzc3RhdGUpIGNvZGUgdHJhY2tzIHdoaWNoIHRhc2tzIGFkZCB3aGljaCBvdXRwdXQKKyAgICAgICAgdG8gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIFRoaXMgbWVhbnMgdGhlIG91dHB1dCBmcm9tIGEgZ2l2ZW4gdGFzayBjYW4gYmUgcmVtb3ZlZCwgdXBncmFkZWQgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGVkLgorICAgICAgICBUaGUgdGhpcmQgcXVlc3Rpb24gaXMgcGFydGx5IGFkZHJlc3NlZCBieSB0aGUgc29sdXRpb24gZm9yIHRoZSBzZWNvbmQgcXVlc3Rpb24KKyAgICAgICAgYXNzdW1pbmcgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gZmV0Y2ggdGhlIHNzdGF0ZSBvYmplY3RzIGZyb20gcmVtb3RlIGxvY2F0aW9ucyBhbmQKKyAgICAgICAgaW5zdGFsbCB0aGVtIGlmIHRoZXkgYXJlIGRlZW1lZCB0byBiZSB2YWxpZC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3QgbWFpbnRhaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4gaW5mb3JtYXRpb24KKyAgICAgICAgYXMgcGFydCBvZiB0aGUgc2hhcmVkIHN0YXRlIHBhY2thZ2VzLgorICAgICAgICBDb25zZXF1ZW50bHksIGNvbnNpZGVyYXRpb25zIGV4aXN0IHRoYXQgYWZmZWN0IG1haW50YWluaW5nIHNoYXJlZAorICAgICAgICBzdGF0ZSBmZWVkcy4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB3b3JrcyB3aXRoIHBhY2thZ2VzIGFuZCBjYW4KKyAgICAgICAgdHJhY2sgaW5jcmVtZW50aW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNpbmNyZW1lbnRpbmctYS1wYWNrYWdlLXJldmlzaW9uLW51bWJlcic+SW5jcmVtZW50aW5nIGEgUGFja2FnZSBSZXZpc2lvbiBOdW1iZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIGdvZXMgaW50byBkZXRhaWwgYWJvdXQgdGhlIG92ZXJhbGwgaW5jcmVtZW50YWwgYnVpbGQKKyAgICAgICAgYXJjaGl0ZWN0dXJlLCB0aGUgY2hlY2tzdW1zIChzaWduYXR1cmVzKSwgc2hhcmVkIHN0YXRlLCBhbmQgc29tZSB0aXBzIGFuZCB0cmlja3MuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J292ZXJhbGwtYXJjaGl0ZWN0dXJlJz4KKyAgICAgICAgPHRpdGxlPk92ZXJhbGwgQXJjaGl0ZWN0dXJlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gZGV0ZXJtaW5pbmcgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIG5lZWQgdG8gYmUgYnVpbHQsIEJpdEJha2UKKyAgICAgICAgICAgIHdvcmtzIG9uIGEgcGVyLXRhc2sgYmFzaXMgcmF0aGVyIHRoYW4gYSBwZXItcmVjaXBlIGJhc2lzLgorICAgICAgICAgICAgWW91IG1pZ2h0IHdvbmRlciB3aHkgdXNpbmcgYSBwZXItdGFzayBiYXNpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHBlci1yZWNpcGUgYmFzaXMuCisgICAgICAgICAgICBUbyBoZWxwIGV4cGxhaW4sIGNvbnNpZGVyIGhhdmluZyB0aGUgSVBLIHBhY2thZ2luZyBiYWNrZW5kIGVuYWJsZWQgYW5kIHRoZW4gc3dpdGNoaW5nIHRvIERFQi4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIG91dHB1dHMgYXJlIHN0aWxsIHZhbGlkLgorICAgICAgICAgICAgSG93ZXZlciwgd2l0aCBhIHBlci1yZWNpcGUgYXBwcm9hY2gsIHRoZSBidWlsZCB3b3VsZCBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSB3b3VsZCBoYXZlIHRvIGludmFsaWRhdGUgdGhlIHdob2xlIGJ1aWxkIGFuZCByZXJ1biBpdC4KKyAgICAgICAgICAgIFJlcnVubmluZyBldmVyeXRoaW5nIGlzIG5vdCB0aGUgYmVzdCBzb2x1dGlvbi4KKyAgICAgICAgICAgIEFsc28sIGluIHRoaXMgY2FzZSwgdGhlIGNvcmUgbXVzdCBiZSAidGF1Z2h0IiBtdWNoIGFib3V0IHNwZWNpZmljIHRhc2tzLgorICAgICAgICAgICAgVGhpcyBtZXRob2RvbG9neSBkb2VzIG5vdCBzY2FsZSB3ZWxsIGFuZCBkb2VzIG5vdCBhbGxvdyB1c2VycyB0byBlYXNpbHkgYWRkIG5ldyB0YXNrcworICAgICAgICAgICAgaW4gbGF5ZXJzIG9yIGFzIGV4dGVybmFsIHJlY2lwZXMgd2l0aG91dCB0b3VjaGluZyB0aGUgcGFja2FnZWQtc3RhZ2luZyBjb3JlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NoZWNrc3Vtcyc+CisgICAgICAgIDx0aXRsZT5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY29kZSB1c2VzIGEgY2hlY2tzdW0sIHdoaWNoIGlzIGEgdW5pcXVlIHNpZ25hdHVyZSBvZiBhIHRhc2sncworICAgICAgICAgICAgaW5wdXRzLCB0byBkZXRlcm1pbmUgaWYgYSB0YXNrIG5lZWRzIHRvIGJlIHJ1biBhZ2Fpbi4KKyAgICAgICAgICAgIEJlY2F1c2UgaXQgaXMgYSBjaGFuZ2UgaW4gYSB0YXNrJ3MgaW5wdXRzIHRoYXQgdHJpZ2dlcnMgYSByZXJ1biwgdGhlIHByb2Nlc3MKKyAgICAgICAgICAgIG5lZWRzIHRvIGRldGVjdCBhbGwgdGhlIGlucHV0cyB0byBhIGdpdmVuIHRhc2suCisgICAgICAgICAgICBGb3Igc2hlbGwgdGFza3MsIHRoaXMgdHVybnMgb3V0IHRvIGJlIGZhaXJseSBlYXN5IGJlY2F1c2UKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBhICJydW4iIHNoZWxsIHNjcmlwdCBmb3IgZWFjaCB0YXNrIGFuZAorICAgICAgICAgICAgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgY2hlY2tzdW0gdGhhdCBnaXZlcyB5b3UgYSBnb29kIGlkZWEgb2Ygd2hlbgorICAgICAgICAgICAgdGhlIHRhc2sncyBkYXRhIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNvbXBsaWNhdGUgdGhlIHByb2JsZW0sIHRoZXJlIGFyZSB0aGluZ3MgdGhhdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluCisgICAgICAgICAgICB0aGUgY2hlY2tzdW0uCisgICAgICAgICAgICBGaXJzdCwgdGhlcmUgaXMgdGhlIGFjdHVhbCBzcGVjaWZpYyBidWlsZCBwYXRoIG9mIGEgZ2l2ZW4gdGFzayAtCisgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgSXQgZG9lcyBub3QgbWF0dGVyIGlmIHRoZSB3b3JrIGRpcmVjdG9yeSBjaGFuZ2VzIGJlY2F1c2UgaXQgc2hvdWxkIG5vdAorICAgICAgICAgICAgYWZmZWN0IHRoZSBvdXRwdXQgZm9yIHRhcmdldCBwYWNrYWdlcy4KKyAgICAgICAgICAgIEFsc28sIHRoZSBidWlsZCBwcm9jZXNzIGhhcyB0aGUgb2JqZWN0aXZlIG9mIG1ha2luZyBuYXRpdmUgb3IgY3Jvc3MgcGFja2FnZXMgcmVsb2NhdGFibGUuCisgICAgICAgICAgICBUaGUgY2hlY2tzdW0gdGhlcmVmb3JlIG5lZWRzIHRvIGV4Y2x1ZGUgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBzaW1wbGlzdGljIGFwcHJvYWNoIGZvciBleGNsdWRpbmcgdGhlIHdvcmsgZGlyZWN0b3J5IGlzIHRvIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPiB0byBzb21lIGZpeGVkIHZhbHVlIGFuZCBjcmVhdGUgdGhlIGNoZWNrc3VtCisgICAgICAgICAgICBmb3IgdGhlICJydW4iIHNjcmlwdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBwcm9ibGVtIHJlc3VsdHMgZnJvbSB0aGUgInJ1biIgc2NyaXB0cyBjb250YWluaW5nIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgICAgICBtaWdodCBvciBtaWdodCBub3QgZ2V0IGNhbGxlZC4KKyAgICAgICAgICAgIFRoZSBpbmNyZW1lbnRhbCBidWlsZCBzb2x1dGlvbiBjb250YWlucyBjb2RlIHRoYXQgZmlndXJlcyBvdXQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBiZXR3ZWVuIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgY29kZSBpcyB1c2VkIHRvIHBydW5lIHRoZSAicnVuIiBzY3JpcHRzIGRvd24gdG8gdGhlIG1pbmltdW0gc2V0LAorICAgICAgICAgICAgdGhlcmVieSBhbGxldmlhdGluZyB0aGlzIHByb2JsZW0gYW5kIG1ha2luZyB0aGUgInJ1biIgc2NyaXB0cyBtdWNoIG1vcmUKKyAgICAgICAgICAgIHJlYWRhYmxlIGFzIGEgYm9udXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvIGZhciB3ZSBoYXZlIHNvbHV0aW9ucyBmb3Igc2hlbGwgc2NyaXB0cy4KKyAgICAgICAgICAgIFdoYXQgYWJvdXQgUHl0aG9uIHRhc2tzPworICAgICAgICAgICAgVGhlIHNhbWUgYXBwcm9hY2ggYXBwbGllcyBldmVuIHRob3VnaCB0aGVzZSB0YXNrcyBhcmUgbW9yZSBkaWZmaWN1bHQuCisgICAgICAgICAgICBUaGUgcHJvY2VzcyBuZWVkcyB0byBmaWd1cmUgb3V0IHdoYXQgdmFyaWFibGVzIGEgUHl0aG9uIGZ1bmN0aW9uIGFjY2Vzc2VzCisgICAgICAgICAgICBhbmQgd2hhdCBmdW5jdGlvbnMgaXQgY2FsbHMuCisgICAgICAgICAgICBBZ2FpbiwgdGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaXJzdCBmaWd1cmVzIG91dAorICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGNyZWF0ZXMgYSBjaGVja3N1bSBmb3IgdGhlIGRhdGEKKyAgICAgICAgICAgIHVzZWQgYXMgdGhlIGlucHV0IHRvIHRoZSB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaWtlIHRoZSA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+IGNhc2UsIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBzaG91bGQgYmUgaWdub3JlZC4KKyAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91IGNhbiBpbnN0cnVjdCB0aGUgYnVpbGQgcHJvY2VzcyB0byBpZ25vcmUgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuc3VyZXMgdGhhdCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0FSQ0hTJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZG9lcyBub3QKKyAgICAgICAgICAgIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIGV2ZW4gaWYgaXQgZG9lcyByZWZlcmVuY2UgaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVxdWFsbHksIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIGFkZCBkZXBlbmRlbmNpZXMgQml0QmFrZSBpcyBub3QgYWJsZSB0byBmaW5kLgorICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc10gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBleHBsaWNpdGx5IGFkZHMgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgYQorICAgICAgICAgICAgZGVwZW5kZW5jeSBmb3IgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uc2lkZXIgYSBjYXNlIHdpdGggaW4tbGluZSBQeXRob24sIGZvciBleGFtcGxlLCB3aGVyZSBCaXRCYWtlIGlzIG5vdAorICAgICAgICAgICAgYWJsZSB0byBmaWd1cmUgb3V0IGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIFdoZW4gcnVubmluZyBpbiBkZWJ1ZyBtb2RlIChpLmUuIHVzaW5nIDxmaWxlbmFtZT4tREREPC9maWxlbmFtZT4pLCBCaXRCYWtlCisgICAgICAgICAgICBwcm9kdWNlcyBvdXRwdXQgd2hlbiBpdCBkaXNjb3ZlcnMgc29tZXRoaW5nIGZvciB3aGljaCBpdCBjYW5ub3QgZmlndXJlIG91dAorICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBoYXMgY3VycmVudGx5IG5vdCBtYW5hZ2VkIHRvIGNvdmVyIHRob3NlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaW4gZGV0YWlsIGFuZCBpcyBhd2FyZSBvZiB0aGUgbmVlZCB0byBmaXggdGhpcyBzaXR1YXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRodXMgZmFyLCB0aGlzIHNlY3Rpb24gaGFzIGxpbWl0ZWQgZGlzY3Vzc2lvbiB0byB0aGUgZGlyZWN0IGlucHV0cyBpbnRvIGEgdGFzay4KKyAgICAgICAgICAgIEluZm9ybWF0aW9uIGJhc2VkIG9uIGRpcmVjdCBpbnB1dHMgaXMgcmVmZXJyZWQgdG8gYXMgdGhlICJiYXNlaGFzaCIgaW4gdGhlCisgICAgICAgICAgICBjb2RlLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgdGhlIHF1ZXN0aW9uIG9mIGEgdGFzaydzIGluZGlyZWN0IGlucHV0cyAtIHRoZQorICAgICAgICAgICAgdGhpbmdzIHRoYXQgd2VyZSBhbHJlYWR5IGJ1aWx0IGFuZCBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZSBjaGVja3N1bSAob3Igc2lnbmF0dXJlKSBmb3IgYSBwYXJ0aWN1bGFyIHRhc2sgbmVlZHMgdG8gYWRkIHRoZSBoYXNoZXMKKyAgICAgICAgICAgIG9mIGFsbCB0aGUgdGFza3Mgb24gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdGFzayBkZXBlbmRzLgorICAgICAgICAgICAgQ2hvb3Npbmcgd2hpY2ggZGVwZW5kZW5jaWVzIHRvIGFkZCBpcyBhIHBvbGljeSBkZWNpc2lvbi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBlZmZlY3QgaXMgdG8gZ2VuZXJhdGUgYSBtYXN0ZXIgY2hlY2tzdW0gdGhhdCBjb21iaW5lcyB0aGUgYmFzZWhhc2gKKyAgICAgICAgICAgIGFuZCB0aGUgaGFzaGVzIG9mIHRoZSB0YXNrJ3MgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdCB0aGUgY29kZSBsZXZlbCwgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZiB3YXlzIGJvdGggdGhlIGJhc2VoYXNoIGFuZCB0aGUKKyAgICAgICAgICAgIGRlcGVuZGVudCB0YXNrIGhhc2hlcyBjYW4gYmUgaW5mbHVlbmNlZC4KKyAgICAgICAgICAgIFdpdGhpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUsIHdlIGNhbiBnaXZlIEJpdEJha2Ugc29tZSBleHRyYSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgdG8gaGVscCBpdCBjb25zdHJ1Y3QgdGhlIGJhc2VoYXNoLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZWZmZWN0aXZlbHkgcmVzdWx0cyBpbiBhIGxpc3Qgb2YgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgICAgICBkZXBlbmRlbmN5IGV4Y2x1ZGVzIC0gdmFyaWFibGVzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBjaGVja3N1bToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfSEFTSEJBU0VfV0hJVEVMSVNUID89ICJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFwKKyAgICAgICAgIFNTVEFURV9ESVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhPTUUgTE9HTkFNRSBTSEVMTCBURVJNIFwKKyAgICAgICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKKyAgICAgICAgIFBSU0VSVl9EVU1QRElSIFBSU0VSVl9EVU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBcCisgICAgICAgICBDQ0FDSEVfRElSIEVYVEVSTkFMX1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX0RJU0FCTEUgTElDRU5TRV9QQVRIIFNES1BLR1NVRkZJWCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGV4Y2x1ZGVzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHNpbmNlIHRoYXQgdmFyaWFibGUgaXMgYWN0dWFsbHkgY29uc3RydWN0ZWQgYXMgYSBwYXRoIHdpdGhpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiwgd2hpY2ggaXMgb24KKyAgICAgICAgICAgIHRoZSB3aGl0ZWxpc3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBydWxlcyBmb3IgZGVjaWRpbmcgd2hpY2ggaGFzaGVzIG9mIGRlcGVuZGVudCB0YXNrcyB0byBpbmNsdWRlIHRocm91Z2gKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgY2hhaW5zIGFyZSBtb3JlIGNvbXBsZXggYW5kIGFyZSBnZW5lcmFsbHkgYWNjb21wbGlzaGVkIHdpdGggYQorICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9uLgorICAgICAgICAgICAgVGhlIGNvZGUgaW4gPGZpbGVuYW1lPm1ldGEvbGliL29lL3NzdGF0ZXNpZy5weTwvZmlsZW5hbWU+IHNob3dzIHR3byBleGFtcGxlcworICAgICAgICAgICAgb2YgdGhpcyBhbmQgYWxzbyBpbGx1c3RyYXRlcyBob3cgeW91IGNhbiBpbnNlcnQgeW91ciBvd24gcG9saWN5IGludG8gdGhlIHN5c3RlbQorICAgICAgICAgICAgaWYgc28gZGVzaXJlZC4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0d28gYmFzaWMgc2lnbmF0dXJlIGdlbmVyYXRvcnMgPGZpbGVuYW1lPk9FLUNvcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdXNlczogICJPRUJhc2ljIiBhbmQgIk9FQmFzaWNIYXNoIi4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZXJlIGlzIGEgZHVtbXkgIm5vb3AiIHNpZ25hdHVyZSBoYW5kbGVyIGVuYWJsZWQgaW4gQml0QmFrZS4KKyAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PRS1Db3JlPC9maWxlbmFtZT4gdXNlcyB0aGUgIk9FQmFzaWNIYXNoIiBzaWduYXR1cmUgaGFuZGxlciBieSBkZWZhdWx0CisgICAgICAgICAgICB0aHJvdWdoIHRoaXMgc2V0dGluZyBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAiT0VCYXNpY0hhc2giIDxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+IGlzIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgIk9FQmFzaWMiIHZlcnNpb24gYnV0IGFkZHMgdGhlIHRhc2sgaGFzaCB0byB0aGUgc3RhbXAgZmlsZXMuCisgICAgICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYW55CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgY2hhbmdlIHRoYXQgY2hhbmdlcyB0aGUgdGFzayBoYXNoLCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICBjYXVzaW5nIHRoZSB0YXNrIHRvIGJlIHJ1biBhZ2Fpbi4KKyAgICAgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCB0byBidW1wIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YWx1ZXMsIGFuZCBjaGFuZ2VzIHRvIE1ldGFkYXRhIGF1dG9tYXRpY2FsbHkgcmlwcGxlIGFjcm9zcyB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgdGhlIGVuZCByZXN1bHQgb2YgdGhlc2Ugc2lnbmF0dXJlIGdlbmVyYXRvcnMgaXMgdG8KKyAgICAgICAgICAgIG1ha2Ugc29tZSBkZXBlbmRlbmN5IGFuZCBoYXNoIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byB0aGUgYnVpbGQuCisgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIX3Rhc2stPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgaGFzaGVzIGZvciBlYWNoIHRhc2sgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9CQVNFSEFTSF88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggZGVwZW5kZW50IHRhc2suCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJIQVNIREVQU188L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPjo8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFzayBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQl9UQVNLSEFTSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgaGFzaCBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzaGFyZWQtc3RhdGUnPgorICAgICAgICA8dGl0bGU+U2hhcmVkIFN0YXRlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENoZWNrc3VtcyBhbmQgZGVwZW5kZW5jaWVzLCBhcyBkaXNjdXNzZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHNvbHZlIGhhbGYgdGhlCisgICAgICAgICAgICBwcm9ibGVtIG9mIHN1cHBvcnRpbmcgYSBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICBUaGUgb3RoZXIgcGFydCBvZiB0aGUgcHJvYmxlbSBpcyBiZWluZyBhYmxlIHRvIHVzZSBjaGVja3N1bSBpbmZvcm1hdGlvbiBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICBhbmQgYmVpbmcgYWJsZSB0byByZXVzZSBvciByZWJ1aWxkIHNwZWNpZmljIGNvbXBvbmVudHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3N0YXRlJz48ZmlsZW5hbWU+c3N0YXRlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBpcyBhIHJlbGF0aXZlbHkgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBob3cgdG8gImNhcHR1cmUiCisgICAgICAgICAgICBhIHNuYXBzaG90IG9mIGEgZ2l2ZW4gdGFzay4KKyAgICAgICAgICAgIFRoZSBpZGVhIGlzIHRoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgc291cmNlIG9mIGEgdGFzaydzIG91dHB1dC4KKyAgICAgICAgICAgIE91dHB1dCBjb3VsZCBiZSBmcmVzaGx5IGJ1aWx0IG9yIGl0IGNvdWxkIGJlIGRvd25sb2FkZWQgYW5kIHVucGFja2VkIGZyb20KKyAgICAgICAgICAgIHNvbWV3aGVyZSAtIHRoZSBidWlsZCBwcm9jZXNzIGRvZXMgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgaXRzIG9yaWdpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvdXRwdXQsIG9uZSBpcyBqdXN0IGFib3V0IGNyZWF0aW5nIGEgZGlyZWN0b3J5CisgICAgICAgICAgICBpbiA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBpcyB0aGUgb3V0cHV0IG9mIGVpdGhlcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgVGhlIG90aGVyIHR5cGUgb2Ygb3V0cHV0IG9jY3VycyB3aGVuIGEgc2V0IG9mIGRhdGEgaXMgbWVyZ2VkIGludG8gYSBzaGFyZWQgZGlyZWN0b3J5CisgICAgICAgICAgICB0cmVlIHN1Y2ggYXMgdGhlIHN5c3Jvb3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gaGFzIHRyaWVkIHRvIGtlZXAgdGhlIGRldGFpbHMgb2YgdGhlCisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBoaWRkZW4gaW4gPGZpbGVuYW1lPnNzdGF0ZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgRnJvbSBhIHVzZXIncyBwZXJzcGVjdGl2ZSwgYWRkaW5nIHNoYXJlZCBzdGF0ZSB3cmFwcGluZyB0byBhIHRhc2sKKyAgICAgICAgICAgIGlzIGFzIHNpbXBsZSBhcyB0aGlzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZGVwbG95Jz48ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBleGFtcGxlIHRha2VuIGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZXBsb3knPjxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0iCisgICAgIFNTVEFURVRBU0tTICs9ICJkb19kZXBsb3kiCisgICAgIGRvX2RlcGxveVtzc3RhdGUtbmFtZV0gPSAiZGVwbG95IgorICAgICBkb19kZXBsb3lbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtERVBMT1lESVJ9IgorICAgICBkb19kZXBsb3lbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0iCisKKyAgICAgcHl0aG9uIGRvX2RlcGxveV9zZXRzY2VuZSAoKSB7CisgICAgICAgICBzc3RhdGVfc2V0c2NlbmUoZCkKKyAgICAgfQorICAgICBhZGR0YXNrIGRvX2RlcGxveV9zZXRzY2VuZQorICAgICBkb19kZXBsb3lbZGlyc10gPSAiJHtERVBMT1lESVJ9ICR7Qn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHdlIGFkZCBzb21lIGV4dHJhIGZsYWdzIHRvIHRoZSB0YXNrLCBhIG5hbWUgZmllbGQgKCJkZXBsb3kiKSwgYW4KKyAgICAgICAgICAgIGlucHV0IGRpcmVjdG9yeSB3aGVyZSB0aGUgdGFzayBzZW5kcyBkYXRhLCBhbmQgdGhlIG91dHB1dAorICAgICAgICAgICAgZGlyZWN0b3J5IHdoZXJlIHRoZSBkYXRhIGZyb20gdGhlIHRhc2sgc2hvdWxkIGV2ZW50dWFsbHkgYmUgY29waWVkLgorICAgICAgICAgICAgV2UgYWxzbyBhZGQgYSA8ZmlsZW5hbWU+X3NldHNjZW5lPC9maWxlbmFtZT4gdmFyaWFudCBvZiB0aGUgdGFzayBhbmQgYWRkIHRoZSB0YXNrCisgICAgICAgICAgICBuYW1lIHRvIHRoZSA8ZmlsZW5hbWU+U1NUQVRFVEFTS1M8L2ZpbGVuYW1lPiBsaXN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIGRpcmVjdG9yeSB3aG9zZSBjb250ZW50cyB5b3UgbmVlZCB0byBwcmVzZXJ2ZSwgeW91IGNhbiBkbyB0aGlzIHdpdGgKKyAgICAgICAgICAgIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLXBsYWluZGlyc10gPSAiJHtQS0dEfSAke1BLR0RFU1R9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBtZXRob2QsIGFzIHdlbGwgYXMgdGhlIGZvbGxvd2luZyBleGFtcGxlLCBhbHNvIHdvcmtzIGZvciBtdWx0aXBsZSBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fcGFja2FnZVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR0RFU1RXT1JLfSAke1NITElCU1dPUktESVJ9IgorICAgICBkb19wYWNrYWdlW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1BLR0RBVEFfRElSfSAke1NITElCU0RJUn0iCisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLWxvY2tmaWxlXSA9ICIke1BBQ0tBR0VMT0NLfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZXNlIG1ldGhvZHMgYWxzbyBpbmNsdWRlIHRoZSBhYmlsaXR5IHRvIHRha2UgYSBsb2NrZmlsZSB3aGVuIG1hbmlwdWxhdGluZworICAgICAgICAgICAgc2hhcmVkIHN0YXRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzIHNpbmNlIHNvbWUgY2FzZXMgYXJlIHNlbnNpdGl2ZSB0byBmaWxlCisgICAgICAgICAgICBhZGRpdGlvbnMgb3IgcmVtb3ZhbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlaGluZCB0aGUgc2NlbmVzLCB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgd29ya3MgYnkgbG9va2luZyBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGZvciBzaGFyZWQgc3RhdGUgZmlsZXMuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNTVEFURV9NSVJST1JTID89ICJcCisgICAgIGZpbGU6Ly8uKiBodHRwOi8vc29tZXNlcnZlci50bGQvc2hhcmUvc3N0YXRlL1BBVEggXG4gXAorICAgICBmaWxlOi8vLiogZmlsZTovLy9zb21lL2xvY2FsL2Rpci9zc3RhdGUvUEFUSCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgZGlyZWN0b3J5ICg8ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+KSBpcworICAgICAgICAgICAgICAgIG9yZ2FuaXplZCBpbnRvIHR3by1jaGFyYWN0ZXIgc3ViZGlyZWN0b3JpZXMsIHdoZXJlIHRoZSBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBuYW1lcyBhcmUgYmFzZWQgb24gdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBoYXNoLgorICAgICAgICAgICAgICAgIElmIHRoZSBzaGFyZWQgc3RhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgYSBtaXJyb3IgaGFzIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgc3RydWN0dXJlIGFzIDxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT4sIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgc3BlY2lmeSAiUEFUSCIgYXMgcGFydCBvZiB0aGUgVVJJIHRvIGVuYWJsZSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgdG8gbWFwIHRvIHRoZSBhcHByb3ByaWF0ZSBzdWJkaXJlY3RvcnkuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgcGFja2FnZSB2YWxpZGl0eSBjYW4gYmUgZGV0ZWN0ZWQganVzdCBieSBsb29raW5nIGF0IHRoZQorICAgICAgICAgICAgZmlsZW5hbWUgc2luY2UgdGhlIGZpbGVuYW1lIGNvbnRhaW5zIHRoZSB0YXNrIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIGFzCisgICAgICAgICAgICBkZXNjcmliZWQgZWFybGllciBpbiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBJZiBhIHZhbGlkIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIGlzIGZvdW5kLCB0aGUgYnVpbGQgcHJvY2VzcyBkb3dubG9hZHMgaXQKKyAgICAgICAgICAgIGFuZCB1c2VzIGl0IHRvIGFjY2VsZXJhdGUgdGhlIHRhc2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzZXMgdXNlIHRoZSA8ZmlsZW5hbWU+Kl9zZXRzY2VuZTwvZmlsZW5hbWU+IHRhc2tzCisgICAgICAgICAgICBmb3IgdGhlIHRhc2sgYWNjZWxlcmF0aW9uIHBoYXNlLgorICAgICAgICAgICAgQml0QmFrZSBnb2VzIHRocm91Z2ggdGhpcyBwaGFzZSBiZWZvcmUgdGhlIG1haW4gZXhlY3V0aW9uIGNvZGUgYW5kIHRyaWVzCisgICAgICAgICAgICB0byBhY2NlbGVyYXRlIGFueSB0YXNrcyBmb3Igd2hpY2ggaXQgY2FuIGZpbmQgc2hhcmVkIHN0YXRlIHBhY2thZ2VzLgorICAgICAgICAgICAgSWYgYSBzaGFyZWQgc3RhdGUgcGFja2FnZSBmb3IgYSB0YXNrIGlzIGF2YWlsYWJsZSwgdGhlIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgcGFja2FnZSBpcyB1c2VkLgorICAgICAgICAgICAgVGhpcyBtZWFucyB0aGUgdGFzayBhbmQgYW55IHRhc2tzIG9uIHdoaWNoIGl0IGlzIGRlcGVuZGVudCBhcmUgbm90CisgICAgICAgICAgICBleGVjdXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgYSByZWFsIHdvcmxkIGV4YW1wbGUsIHRoZSBhaW0gaXMgd2hlbiBidWlsZGluZyBhbiBJUEstYmFzZWQgaW1hZ2UsCisgICAgICAgICAgICBvbmx5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2tzIHdvdWxkIGhhdmUgdGhlaXIKKyAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBwYWNrYWdlcyBmZXRjaGVkIGFuZCBleHRyYWN0ZWQuCisgICAgICAgICAgICBTaW5jZSB0aGUgc3lzcm9vdCBpcyBub3QgdXNlZCwgaXQgd291bGQgbmV2ZXIgZ2V0IGV4dHJhY3RlZC4KKyAgICAgICAgICAgIFRoaXMgaXMgYW5vdGhlciByZWFzb24gd2h5IGEgdGFzay1iYXNlZCBhcHByb2FjaCBpcyBwcmVmZXJyZWQgb3ZlciBhCisgICAgICAgICAgICByZWNpcGUtYmFzZWQgYXBwcm9hY2gsIHdoaWNoIHdvdWxkIGhhdmUgdG8gaW5zdGFsbCB0aGUgb3V0cHV0IGZyb20gZXZlcnkgdGFzay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0aXBzLWFuZC10cmlja3MnPgorICAgICAgICA8dGl0bGU+VGlwcyBhbmQgVHJpY2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb2RlIGluIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCBzdXBwb3J0cyBpbmNyZW1lbnRhbCBidWlsZHMgaXMgbm90CisgICAgICAgICAgICBzaW1wbGUgY29kZS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzb21lIHRpcHMgYW5kIHRyaWNrcyB0aGF0IGhlbHAgeW91IHdvcmsgYXJvdW5kCisgICAgICAgICAgICBpc3N1ZXMgcmVsYXRlZCB0byBzaGFyZWQgc3RhdGUgY29kZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZWJ1Z2dpbmcnPgorICAgICAgICAgICAgPHRpdGxlPkRlYnVnZ2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gdGhpbmdzIGdvIHdyb25nLCBkZWJ1Z2dpbmcgbmVlZHMgdG8gYmUgc3RyYWlnaHRmb3J3YXJkLgorICAgICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIFlvY3RvIFByb2plY3QgaW5jbHVkZXMgc3Ryb25nIGRlYnVnZ2luZworICAgICAgICAgICAgICAgIHRvb2xzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuZXZlciBhIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIGlzIHdyaXR0ZW4gb3V0LCBzbyBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIDxmaWxlbmFtZT4uc2lnaW5mbzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIHJlc3VsdHMgaW4gYSBwaWNrbGVkIFB5dGhvbiBkYXRhYmFzZSBvZiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZXRhZGF0YSB0aGF0IHdlbnQgaW50byBjcmVhdGluZyB0aGUgaGFzaCBmb3IgYSBnaXZlbiBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3UgcnVuIEJpdEJha2Ugd2l0aCB0aGUgPGZpbGVuYW1lPi0tZHVtcC1zaWduYXR1cmVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChvciA8ZmlsZW5hbWU+LVM8L2ZpbGVuYW1lPikgb3B0aW9uLCBCaXRCYWtlIGR1bXBzIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zaWdpbmZvPC9maWxlbmFtZT4gZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFtcCBkaXJlY3RvcnkgZm9yIGV2ZXJ5IHRhc2sgaXQgd291bGQgaGF2ZSBleGVjdXRlZCBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGluZyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYWNrYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlcmUgaXMgYSA8ZmlsZW5hbWU+Yml0YmFrZS1kaWZmc2lnczwvZmlsZW5hbWU+IGNvbW1hbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHByb2Nlc3MgPGZpbGVuYW1lPi5zaWdpbmZvPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugc3BlY2lmeSBvbmUgb2YgdGhlc2UgZmlsZXMsIEJpdEJha2UgZHVtcHMgb3V0IHRoZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IHR3byBmaWxlcywgQml0QmFrZSBjb21wYXJlcyB0aGUgdHdvIGZpbGVzIGFuZCBkdW1wcyBvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1vcmUgZWFzaWx5IGhlbHBzIGFuc3dlciB0aGUgcXVlc3Rpb24gb2YgIldoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgYmV0d2VlbiBYIGFuZCBZPyI8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbnZhbGlkYXRpbmctc2hhcmVkLXN0YXRlJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnZhbGlkYXRpbmcgU2hhcmVkIFN0YXRlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyBjaGVja3N1bXMgYW5kIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgICAgIGNhY2hlIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcmVidWlsZGluZyB0YXNrcy4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHRoaXMgc2NoZW1lIGlzIGtub3duIGFzICJzaGFyZWQgc3RhdGUgY29kZS4iCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHNjaGVtZXMsIHRoaXMgb25lIGhhcyBzb21lIGRyYXdiYWNrcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0aGF0IHlvdSBjb3VsZCBtYWtlIGltcGxpY2l0IGNoYW5nZXMgdG8geW91cgorICAgICAgICAgICAgICAgIGNvZGUgdGhhdCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGRvIG5vdCB0YWtlIGludG8KKyAgICAgICAgICAgICAgICBhY2NvdW50LgorICAgICAgICAgICAgICAgIFRoZXNlIGltcGxpY2l0IGNoYW5nZXMgYWZmZWN0IGEgdGFzaydzIG91dHB1dCBidXQgZG8gbm90IHRyaWdnZXIKKyAgICAgICAgICAgICAgICB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgaW50byByZWJ1aWxkaW5nIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgIENvbnNpZGVyIGFuIGV4YW1wbGUgZHVyaW5nIHdoaWNoIGEgdG9vbCBjaGFuZ2VzIGl0cyBvdXRwdXQuCisgICAgICAgICAgICAgICAgQXNzdW1lIHRoYXQgdGhlIG91dHB1dCBvZiA8ZmlsZW5hbWU+cnBtZGVwczwvZmlsZW5hbWU+IGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgY2hhbmdlIHNob3VsZCBiZSB0aGF0IGFsbCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlX3dyaXRlX3JwbTwvZmlsZW5hbWU+IHNoYXJlZCBzdGF0ZSBjYWNoZQorICAgICAgICAgICAgICAgIGl0ZW1zIGJlY29tZSBpbnZhbGlkLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGJlY2F1c2UgdGhlIGNoYW5nZSB0byB0aGUgb3V0cHV0IGlzCisgICAgICAgICAgICAgICAgZXh0ZXJuYWwgdG8gdGhlIGNvZGUgYW5kIHRoZXJlZm9yZSBpbXBsaWNpdCwKKyAgICAgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBzaGFyZWQgc3RhdGUgY2FjaGUgaXRlbXMgZG8gbm90IGJlY29tZQorICAgICAgICAgICAgICAgIGludmFsaWRhdGVkLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGUgY2FjaGVkIGl0ZW1zIHJhdGhlcgorICAgICAgICAgICAgICAgIHRoYW4gcnVubmluZyB0aGUgdGFzayBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBPYnZpb3VzbHksIHRoZXNlIHR5cGVzIG9mIGltcGxpY2l0IGNoYW5nZXMgY2FuIGNhdXNlIHByb2JsZW1zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBhdm9pZCB0aGVzZSBwcm9ibGVtcyBkdXJpbmcgdGhlIGJ1aWxkLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHVuZGVyc3RhbmQgdGhlIGVmZmVjdHMgb2YgYW55IGNoYW5nZXMgeW91IG1ha2UuCisgICAgICAgICAgICAgICAgUmVhbGl6ZSB0aGF0IGNoYW5nZXMgeW91IG1ha2UgZGlyZWN0bHkgdG8gYSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFyZSBhdXRvbWF0aWNhbGx5IGZhY3RvcmVkIGludG8gdGhlIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgorICAgICAgICAgICAgICAgIFRodXMsIHRoZXNlIGV4cGxpY2l0IGNoYW5nZXMgaW52YWxpZGF0ZSB0aGUgYXNzb2NpYXRlZCBhcmVhIG9mCisgICAgICAgICAgICAgICAgc2hhcmVkIHN0YXRlIGNhY2hlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBpbXBsaWNpdCBjaGFuZ2VzIHRoYXQKKyAgICAgICAgICAgICAgICBhcmUgbm90IG9idmlvdXMgY2hhbmdlcyB0byB0aGUgY29kZSBhbmQgY291bGQgYWZmZWN0IHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICBvZiBhIGdpdmVuIHRhc2suCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IGlkZW50aWZ5IGFuIGltcGxpY2l0IGNoYW5nZSwgeW91IGNhbiBlYXNpbHkgdGFrZSBzdGVwcworICAgICAgICAgICAgICAgIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIGFuZCBmb3JjZSB0aGUgdGFza3MgdG8gcnVuLgorICAgICAgICAgICAgICAgIFRoZSBzdGVwcyB5b3UgY2FuIHRha2UgYXJlIGFzIHNpbXBsZSBhcyBjaGFuZ2luZyBhIGZ1bmN0aW9uJ3MKKyAgICAgICAgICAgICAgICBjb21tZW50cyBpbiB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGludmFsaWRhdGUgcGFja2FnZSBzaGFyZWQgc3RhdGUgZmlsZXMsIGNoYW5nZQorICAgICAgICAgICAgICAgIHRoZSBjb21tZW50IHN0YXRlbWVudHMgb2YKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvciB0aGUgY29tbWVudHMgb2Ygb25lIG9mIHRoZSBmdW5jdGlvbnMgaXQgY2FsbHMuCisgICAgICAgICAgICAgICAgRXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBpcyBwdXJlbHkgY29zbWV0aWMsIGl0IGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICBjaGVja3N1bSB0byBiZSByZWNhbGN1bGF0ZWQgYW5kIGZvcmNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHRvIHJ1biB0aGUgdGFzayBhZ2Fpbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgYSBjb21taXQgdGhhdCBtYWtlcyBhIGNvc21ldGljIGNoYW5nZSB0bworICAgICAgICAgICAgICAgIGludmFsaWRhdGUgc2hhcmVkIHN0YXRlLCBzZWUgdGhpcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L2NvbW1pdC9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzP2lkPTczN2Y4YmJiNGYyN2I0ODM3MDQ3Y2I5YjRmYmZlMDFkZmRlMzZkNTQnPmNvbW1pdDwvdWxpbms+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0neDMyJz4KKyAgICA8dGl0bGU+eDMyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICB4MzIgaXMgYSBwcm9jZXNzb3Itc3BlY2lmaWMgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAocHNBQkkpIGZvciB4ODZfNjQuCisgICAgICAgIEFuIEFCSSBkZWZpbmVzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGJldHdlZW4gZnVuY3Rpb25zIGluIGEgcHJvY2Vzc2luZyBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIGludGVyZmFjZSBkZXRlcm1pbmVzIHdoYXQgcmVnaXN0ZXJzIGFyZSB1c2VkIGFuZCB3aGF0IHRoZSBzaXplcyBhcmUgZm9yIHZhcmlvdXMgQyBkYXRhIHR5cGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBTb21lIHByb2Nlc3NpbmcgZW52aXJvbm1lbnRzIHByZWZlciB1c2luZyAzMi1iaXQgYXBwbGljYXRpb25zIGV2ZW4gd2hlbiBydW5uaW5nCisgICAgICAgIG9uIEludGVsIDY0LWJpdCBwbGF0Zm9ybXMuCisgICAgICAgIENvbnNpZGVyIHRoZSBpMzg2IHBzQUJJLCB3aGljaCBpcyBhIHZlcnkgb2xkIDMyLWJpdCBBQkkgZm9yIEludGVsIDY0LWJpdCBwbGF0Zm9ybXMuCisgICAgICAgIFRoZSBpMzg2IHBzQUJJIGRvZXMgbm90IHByb3ZpZGUgZWZmaWNpZW50IHVzZSBhbmQgYWNjZXNzIG9mIHRoZSBJbnRlbCA2NC1iaXQgcHJvY2Vzc29yIHJlc291cmNlcywKKyAgICAgICAgbGVhdmluZyB0aGUgc3lzdGVtIHVuZGVydXRpbGl6ZWQuCisgICAgICAgIE5vdyBjb25zaWRlciB0aGUgeDg2XzY0IHBzQUJJLgorICAgICAgICBUaGlzIEFCSSBpcyBuZXdlciBhbmQgdXNlcyA2NC1iaXRzIGZvciBkYXRhIHNpemVzIGFuZCBwcm9ncmFtIHBvaW50ZXJzLgorICAgICAgICBUaGUgZXh0cmEgYml0cyBpbmNyZWFzZSB0aGUgZm9vdHByaW50IHNpemUgb2YgdGhlIHByb2dyYW1zLCBsaWJyYXJpZXMsCisgICAgICAgIGFuZCBhbHNvIGluY3JlYXNlcyB0aGUgbWVtb3J5IGFuZCBmaWxlIHN5c3RlbSBzaXplIHJlcXVpcmVtZW50cy4KKyAgICAgICAgRXhlY3V0aW5nIHVuZGVyIHRoZSB4MzIgcHNBQkkgZW5hYmxlcyB1c2VyIHByb2dyYW1zIHRvIHV0aWxpemUgQ1BVIGFuZCBzeXN0ZW0gcmVzb3VyY2VzCisgICAgICAgIG1vcmUgZWZmaWNpZW50bHkgd2hpbGUga2VlcGluZyB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0aGUgYXBwbGljYXRpb25zIGxvdy4KKyAgICAgICAgRXh0cmEgYml0cyBhcmUgdXNlZCBmb3IgcmVnaXN0ZXJzIGJ1dCBub3QgZm9yIGFkZHJlc3NpbmcgbWVjaGFuaXNtcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc3VwcG9ydCc+CisgICAgICAgIDx0aXRsZT5TdXBwb3J0PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgWW9jdG8gUHJvamVjdCByZWxlYXNlIHN1cHBvcnRzIHRoZSBmaW5hbCBzcGVjaWZpY2F0aW9ucyBvZiB4MzIKKyAgICAgICAgICAgIHBzQUJJLgorICAgICAgICAgICAgU3VwcG9ydCBmb3IgeDMyIHBzQUJJIGV4aXN0cyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBjcmVhdGUgcGFja2FnZXMgYW5kIGltYWdlcyBpbiB4MzIgcHNBQkkgZm9ybWF0IG9uIHg4Nl82NCBhcmNoaXRlY3R1cmUgdGFyZ2V0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc3VjY2Vzc2Z1bGx5IGJ1aWxkIG1hbnkgcmVjaXBlcyB3aXRoIHRoZSB4MzIgdG9vbGNoYWluLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIGNyZWF0ZSBhbmQgYm9vdCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb21wbGV0aW5nLXgzMic+CisgICAgICAgIDx0aXRsZT5Db21wbGV0aW5nIHgzMjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGdXR1cmUgUGxhbnMgZm9yIHRoZSB4MzIgcHNBQkkgaW4gdGhlIFlvY3RvIFByb2plY3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5oYW5jZSBhbmQgZml4IHRoZSBmZXcgcmVtYWluaW5nIHJlY2lwZXMgc28gdGhleQorICAgICAgICAgICAgICAgICAgICB3b3JrIHdpdGggYW5kIHN1cHBvcnQgeDMyIHRvb2xjaGFpbnMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuaGFuY2UgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBzdXBwb3J0IGZvciB4MzIgYmluYXJpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN1cHBvcnQgbGFyZ2VyIGltYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXgzMi1yaWdodC1ub3cnPgorICAgICAgICA8dGl0bGU+VXNpbmcgeDMyIFJpZ2h0IE5vdzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gdXNlIHRoZSB4MzIgc3BBQkk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgdGhlIHgzMiBwc0FCSSB0dW5pbmcgZmlsZSBmb3IgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVzIGJ5IGVkaXRpbmcgdGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBsaWtlIHRoaXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIE1BQ0hJTkUgPSAicWVtdXg4Ni02NCIKKyAgICAgIERFRkFVTFRUVU5FID0gIng4Ni02NC14MzIiCisgICAgICBiYXNlbGliID0gIiR7QGQuZ2V0VmFyKCdCQVNFX0xJQl90dW5lLScgKyAoZC5nZXRWYXIoJ0RFRkFVTFRUVU5FJywgVHJ1ZSkgXAorICAgICAgICAgb3IgJ0lOVkFMSUQnKSwgVHJ1ZSkgb3IgJ2xpYid9IgorICAgICAgI01BQ0hJTkUgPSAiZ2VuZXJpY3g4NiIKKyAgICAgICNERUZBVUxUVFVORSA9ICJjb3JlMi02NC14MzIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QXMgdXN1YWwsIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIGFuIGltYWdlIHRoYXQgc3VwcG9ydHMgdGhlIHgzMiBwc0FCSS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcyB1c3VhbCwgcnVuIHlvdXIgaW1hZ2UgdXNpbmcgUUVNVToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4Ni02NCBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ3YXlsYW5kIj4KKyAgICA8dGl0bGU+V2F5bGFuZDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XYXlsYW5kXyhkaXNwbGF5X3NlcnZlcl9wcm90b2NvbCknPldheWxhbmQ8L3VsaW5rPgorICAgICAgICBpcyBhIGNvbXB1dGVyIGRpc3BsYXkgc2VydmVyIHByb3RvY29sIHRoYXQKKyAgICAgICAgcHJvdmlkZXMgYSBtZXRob2QgZm9yIGNvbXBvc2l0aW5nIHdpbmRvdyBtYW5hZ2VycyB0byBjb21tdW5pY2F0ZQorICAgICAgICBkaXJlY3RseSB3aXRoIGFwcGxpY2F0aW9ucyBhbmQgdmlkZW8gaGFyZHdhcmUgYW5kIGV4cGVjdHMgdGhlbSB0bworICAgICAgICBjb21tdW5pY2F0ZSB3aXRoIGlucHV0IGhhcmR3YXJlIHVzaW5nIG90aGVyIGxpYnJhcmllcy4KKyAgICAgICAgVXNpbmcgV2F5bGFuZCB3aXRoIHN1cHBvcnRpbmcgdGFyZ2V0cyBjYW4gcmVzdWx0IGluIGJldHRlciBjb250cm9sCisgICAgICAgIG92ZXIgZ3JhcGhpY3MgZnJhbWUgcmVuZGVyaW5nIHRoYW4gYW4gYXBwbGljYXRpb24gbWlnaHQgb3RoZXJ3aXNlCisgICAgICAgIGFjaGlldmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIHRoZSBXYXlsYW5kIHByb3RvY29sIGxpYnJhcmllcyBhbmQgdGhlCisgICAgICAgIHJlZmVyZW5jZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dheWxhbmRfKGRpc3BsYXlfc2VydmVyX3Byb3RvY29sKSNXZXN0b24nPldlc3RvbjwvdWxpbms+CisgICAgICAgIGNvbXBvc2l0b3IgYXMgcGFydCBvZiBpdHMgcmVsZWFzZS4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB3aGF0IHlvdSBuZWVkIHRvIGRvIHRvIGltcGxlbWVudCBXYXlsYW5kIGFuZAorICAgICAgICB1c2UgdGhlIGNvbXBvc2l0b3Igd2hlbiBidWlsZGluZyBhbiBpbWFnZSBmb3IgYSBzdXBwb3J0aW5nIHRhcmdldC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0id2F5bGFuZC1zdXBwb3J0Ij4KKyAgICAgICAgPHRpdGxlPlN1cHBvcnQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFdheWxhbmQgcHJvdG9jb2wgbGlicmFyaWVzIGFuZCB0aGUgcmVmZXJlbmNlIFdlc3RvbiBjb21wb3NpdG9yCisgICAgICAgICAgICBzaGlwIGFzIGludGVncmF0ZWQgcGFja2FnZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgIG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgU3BlY2lmaWNhbGx5LCB5b3UgY2FuIGZpbmQgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCBib3RoIFdheWxhbmQKKyAgICAgICAgICAgIGFuZCBXZXN0b24gYXQgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gYnVpbGQgYm90aCB0aGUgV2F5bGFuZCBhbmQgV2VzdG9uIHBhY2thZ2VzIGZvciB1c2Ugb25seQorICAgICAgICAgICAgd2l0aCB0YXJnZXRzIHRoYXQgYWNjZXB0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2RyaS5mcmVlZGVza3RvcC5vcmcvd2lraS8nPk1lc2EgM0QgYW5kIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmU8L3VsaW5rPiwKKyAgICAgICAgICAgIHdoaWNoIGlzIGFsc28ga25vd24gYXMgTWVzYSBEUkkuCisgICAgICAgICAgICBUaGlzIGltcGxpZXMgdGhhdCB5b3UgY2Fubm90IGJ1aWxkIGFuZCB1c2UgdGhlIHBhY2thZ2VzIGlmIHlvdXIKKyAgICAgICAgICAgIHRhcmdldCB1c2VzLCBmb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPiBFbWJlZGRlZCBNZWRpYSBhbmQKKyAgICAgICAgICAgIEdyYXBoaWNzIERyaXZlciAoPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+SW50ZWw8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgIEVNR0QpIHRoYXQgb3ZlcnJpZGVzIE1lc2EgRFJJLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBEdWUgdG8gbGFjayBvZiBFR0wgc3VwcG9ydCwgV2VzdG9uIDEuMC4zIHdpbGwgbm90IHJ1biBkaXJlY3RseSBvbgorICAgICAgICAgICAgdGhlIGVtdWxhdGVkIFFFTVUgaGFyZHdhcmUuCisgICAgICAgICAgICBIb3dldmVyLCB0aGlzIHZlcnNpb24gb2YgV2VzdG9uIHdpbGwgcnVuIHVuZGVyIFggZW11bGF0aW9uIHdpdGhvdXQKKyAgICAgICAgICAgIGlzc3Vlcy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJlbmFibGluZy13YXlsYW5kLWluLWFuLWltYWdlIj4KKyAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFdheWxhbmQgaW4gYW4gSW1hZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZW5hYmxlIFdheWxhbmQsIHlvdSBuZWVkIHRvIGVuYWJsZSBpdCB0byBiZSBidWlsdCBhbmQgZW5hYmxlCisgICAgICAgICAgICBpdCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0iZW5hYmxlLWJ1aWxkaW5nIj4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNhdXNlIE1lc2EgdG8gYnVpbGQgdGhlIDxmaWxlbmFtZT53YXlsYW5kLWVnbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcGxhdGZvcm0gYW5kIFdlc3RvbiB0byBidWlsZCBXYXlsYW5kIHdpdGggS2VybmVsIE1vZGUKKyAgICAgICAgICAgICAgICBTZXR0aW5nCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS5hcmNobGludXgub3JnL2luZGV4LnBocC9LZXJuZWxfTW9kZV9TZXR0aW5nJz5LTVM8L3VsaW5rPikKKyAgICAgICAgICAgICAgICBzdXBwb3J0LCBpbmNsdWRlIHRoZSAid2F5bGFuZCIgZmxhZyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJ2YXItRElTVFJPX0ZFQVRVUkVTIj48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgd2F5bGFuZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIFgxMSBoYXMgYmVlbiBlbmFibGVkIGVsc2V3aGVyZSwgV2VzdG9uIHdpbGwgYnVpbGQgV2F5bGFuZAorICAgICAgICAgICAgICAgIHdpdGggWDExIHN1cHBvcnQKKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJlbmFibGUtaW5zdGFsbGF0aW9uLWluLWFuLWltYWdlIj4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgV2F5bGFuZCBmZWF0dXJlIGludG8gYW4gaW1hZ2UsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCc+PGZpbGVuYW1lPkNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAid2F5bGFuZCB3ZXN0b24iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InJ1bm5pbmctd2VzdG9uIj4KKyAgICAgICAgPHRpdGxlPlJ1bm5pbmcgV2VzdG9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHJ1biBXZXN0b24gaW5zaWRlIFgxMSwgZW5hYmxpbmcgaXQgYXMgZGVzY3JpYmVkIGVhcmxpZXIgYW5kCisgICAgICAgICAgICBidWlsZGluZyBhIFNhdG8gaW1hZ2UgaXMgc3VmZmljaWVudC4KKyAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyB5b3VyIGltYWdlIHVuZGVyIFNhdG8sIGEgV2VzdG9uIExhdW5jaGVyIGFwcGVhcnMKKyAgICAgICAgICAgIGluIHRoZSAiVXRpbGl0eSIgY2F0ZWdvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcnVuIFdlc3RvbiB0aHJvdWdoIHRoZSBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgIGludGVycHJldG9yIChDTEkpLCB3aGljaCBpcyBiZXR0ZXIgc3VpdGVkIGZvciBkZXZlbG9wbWVudCB3b3JrLgorICAgICAgICAgICAgVG8gcnVuIFdlc3RvbiB1bmRlciB0aGUgQ0xJLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIGFmdGVyCisgICAgICAgICAgICB5b3VyIGltYWdlIGlzIGJ1aWx0OgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gdGhlc2UgY29tbWFuZHMgdG8gZXhwb3J0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5YREdfUlVOVElNRV9ESVI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBta2RpciAtcCAvdG1wLyRVU0VSLXdlc3RvbgorICAgICBjaG1vZCAwNzAwIC90bXAvJFVTRVItd2VzdG9uCisgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVI9L3RtcC8kVVNFUi13ZXN0b24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MYXVuY2ggV2VzdG9uIGluIHRoZSBzaGVsbDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB3ZXN0b24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImxpY2Vuc2VzIj4KKyAgICA8dGl0bGU+TGljZW5zZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICB0cmFja3MgY2hhbmdlcyB0byBsaWNlbnNpbmcgdGV4dC4KKyAgICAgICAgVGhlIHNlY3Rpb24gYWxzbyBkZXNjcmliZXMgaG93IHRvIGVuYWJsZSBjb21tZXJjaWFsbHkgbGljZW5zZWQgcmVjaXBlcywKKyAgICAgICAgd2hpY2ggYnkgZGVmYXVsdCBhcmUgZGlzYWJsZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiB0aGF0IGNhbiBoZWxwIHlvdSBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cyBvcGVuCisgICAgICAgIHNvdXJjZSBsaWNlbnNpbmcgZHVyaW5nIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHByb2R1Y3QsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9qZWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSJ1c2luZ3Bva3ktY29uZmlndXJpbmctTElDX0ZJTEVTX0NIS1NVTSI+CisgICAgICAgIDx0aXRsZT5UcmFja2luZyBMaWNlbnNlIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGxpY2Vuc2Ugb2YgYW4gdXBzdHJlYW0gcHJvamVjdCBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIHByZXZlbnQgdGhlc2UgY2hhbmdlcyBnb2luZyB1bm5vdGljZWQsIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz5MSUNfRklMRVNfQ0hLU1VNPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZSB0cmFja3MgY2hhbmdlcyB0byB0aGUgbGljZW5zZSB0ZXh0LiBUaGUgY2hlY2tzdW1zIGFyZSB2YWxpZGF0ZWQgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgIGNvbmZpZ3VyZSBzdGVwLCBhbmQgaWYgdGhlIGNoZWNrc3VtcyBkbyBub3QgbWF0Y2gsIHRoZSBidWlsZCB3aWxsIGZhaWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0idXNpbmdwb2t5LXNwZWNpZnlpbmctTElDX0ZJTEVTX0NIS1NVTSI+CisgICAgICAgICAgICA8dGl0bGU+U3BlY2lmeWluZyB0aGUgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiBWYXJpYWJsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgY29udGFpbnMgY2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byBzcGVjaWZ5IDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT14eHh4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGljZmlsZTEudHh0O2JlZ2lubGluZT01O2VuZGxpbmU9Mjk7bWQ1PXl5eXkgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWNmaWxlMi50eHQ7ZW5kbGluZT01MDttZDU9enp6eiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4uIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUyc+UzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcworICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSB3aGVuIHNlYXJjaGluZyBmaWxlcyBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGVtcGxveXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25zaWRlciB0aGlzIG5leHQgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9scy5jO2JlZ2lubGluZT01O2VuZGxpbmU9MTY7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZDU9YmIxNGVkM2M0Y2RhNTgzYWJjODU0MDEzMDRiNWNkNGUiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vbGljZW5zZS5odG1sO21kNT01Yzk0NzY3Y2VkYjVkNjk4N2M5MDJhYzg1MGRlZDJjNiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBsaW5lIGxvY2F0ZXMgYSBmaWxlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U30vc3JjL2xzLmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIGxpbmUgcmVmZXJzIHRvIGEgZmlsZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+V09SS0RJUjwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5IGZvciBhbGwgcmVjaXBlcywgdW5sZXNzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IHRvICJDTE9TRUQiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InVzaW5ncG9reS1MSUNfRklMRVNfQ0hLU1VNLWV4cGxhbmF0aW9uLW9mLXN5bnRheCI+CisgICAgICAgICAgICA8dGl0bGU+RXhwbGFuYXRpb24gb2YgU3ludGF4PC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSBsaXN0cyBhbGwgdGhlCisgICAgICAgICAgICAgICAgaW1wb3J0YW50IGZpbGVzIHRoYXQgY29udGFpbiB0aGUgbGljZW5zZSB0ZXh0IGZvciB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhIGNoZWNrc3VtIGZvciBhbiBlbnRpcmUgZmlsZSwgb3IgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIGEKKyAgICAgICAgICAgICAgICBmaWxlIChzcGVjaWZpZWQgYnkgYmVnaW5uaW5nIGFuZCBlbmRpbmcgbGluZSBudW1iZXJzIHdpdGggdGhlICJiZWdpbmxpbmUiIGFuZCAiZW5kbGluZSIKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLCByZXNwZWN0aXZlbHkpLgorICAgICAgICAgICAgICAgIFRoZSBsYXR0ZXIgaXMgdXNlZnVsIGZvciBzb3VyY2UgZmlsZXMgd2l0aCBhIGxpY2Vuc2Ugbm90aWNlIGhlYWRlciwKKyAgICAgICAgICAgICAgICBSRUFETUUgZG9jdW1lbnRzLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB1c2UgdGhlICJiZWdpbmxpbmUiIHBhcmFtZXRlciwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHRleHQgYmVnaW5zIG9uIHRoZQorICAgICAgICAgICAgICAgIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCBpZiB5b3UgZG8gbm90IHVzZSB0aGUgImVuZGxpbmUiIHBhcmFtZXRlciwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsaWNlbnNlIHRleHQKKyAgICAgICAgICAgICAgICBlbmRzIHdpdGggdGhlIGxhc3QgbGluZSBvZiB0aGUgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICJtZDUiIHBhcmFtZXRlciBzdG9yZXMgdGhlIG1kNSBjaGVja3N1bSBvZiB0aGUgbGljZW5zZSB0ZXh0LgorICAgICAgICAgICAgICAgIElmIHRoZSBsaWNlbnNlIHRleHQgY2hhbmdlcyBpbiBhbnkgd2F5IGFzIGNvbXBhcmVkIHRvIHRoaXMgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgdGhlbiBhIG1pc21hdGNoIG9jY3Vycy4KKyAgICAgICAgICAgICAgICBUaGlzIG1pc21hdGNoIHRyaWdnZXJzIGEgYnVpbGQgZmFpbHVyZSBhbmQgbm90aWZpZXMgdGhlIGRldmVsb3Blci4KKyAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24gYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gcmV2aWV3IGFuZCBhZGRyZXNzIHRoZSBsaWNlbnNlIHRleHQgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBBbHNvIG5vdGUgdGhhdCBpZiBhIG1pc21hdGNoIG9jY3VycyBkdXJpbmcgdGhlIGJ1aWxkLCB0aGUgY29ycmVjdCBtZDUKKyAgICAgICAgICAgICAgICBjaGVja3N1bSBpcyBwbGFjZWQgaW4gdGhlIGJ1aWxkIGxvZyBhbmQgY2FuIGJlIGVhc2lseSBjb3BpZWQgdG8gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgaXMgbm8gbGltaXQgdG8gaG93IG1hbnkgZmlsZXMgeW91IGNhbiBzcGVjaWZ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgR2VuZXJhbGx5LCBob3dldmVyLCBldmVyeSBwcm9qZWN0IHJlcXVpcmVzIGEgZmV3IHNwZWNpZmljYXRpb25zIGZvciBsaWNlbnNlIHRyYWNraW5nLgorICAgICAgICAgICAgICAgIE1hbnkgcHJvamVjdHMgaGF2ZSBhICJDT1BZSU5HIiBmaWxlIHRoYXQgc3RvcmVzIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciBhbGwgdGhlIHNvdXJjZQorICAgICAgICAgICAgICAgIGNvZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBhbGxvd3MgeW91IHRvIGp1c3QgdHJhY2sgdGhlICJDT1BZSU5HIiBmaWxlIGFzIGxvbmcgYXMgaXQgaXMga2VwdCB1cCB0byBkYXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGFuIGVtcHR5IG9yIGludmFsaWQgIm1kNSIgcGFyYW1ldGVyLCBCaXRCYWtlIHJldHVybnMgYW4gbWQ1IG1pcy1tYXRjaAorICAgICAgICAgICAgICAgIGVycm9yIGFuZCBkaXNwbGF5cyB0aGUgY29ycmVjdCAibWQ1IiBwYXJhbWV0ZXIgdmFsdWUgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGUgY29ycmVjdCBwYXJhbWV0ZXIgaXMgYWxzbyBjYXB0dXJlZCBpbiB0aGUgYnVpbGQgbG9nLgorICAgICAgICAgICAgPC90aXA+CisKKyAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgSWYgdGhlIHdob2xlIGZpbGUgY29udGFpbnMgb25seSBsaWNlbnNlIHRleHQsIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhlICJiZWdpbmxpbmUiIGFuZAorICAgICAgICAgICAgICAgICJlbmRsaW5lIiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgPC90aXA+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZW5hYmxpbmctY29tbWVyY2lhbGx5LWxpY2Vuc2VkLXJlY2lwZXMiPgorICAgICAgICA8dGl0bGU+RW5hYmxpbmcgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGlzYWJsZXMKKyAgICAgICAgICAgIGNvbXBvbmVudHMgdGhhdCBoYXZlIGNvbW1lcmNpYWwgb3Igb3RoZXIgc3BlY2lhbCBsaWNlbnNpbmcKKyAgICAgICAgICAgIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIFN1Y2ggcmVxdWlyZW1lbnRzIGFyZSBkZWZpbmVkIG9uIGEKKyAgICAgICAgICAgIHJlY2lwZS1ieS1yZWNpcGUgYmFzaXMgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgZGVmaW5pdGlvbiBpbiB0aGUgYWZmZWN0ZWQgcmVjaXBlLgorICAgICAgICAgICAgRm9yIGluc3RhbmNlLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy11Z2x5PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHJlY2lwZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSGVyZSBpcyBhIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgZXhhbXBsZSB0aGF0IGNvbnRhaW5zIGJvdGggYW4KKyAgICAgICAgICAgIGV4cGxpY2l0IHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uIChhZnRlciB2YXJpYWJsZSBleHBhbnNpb24pOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTID0gImxpY2Vuc2VfJHtQTn1fJHtQVn0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICBJbiBvcmRlciBmb3IgYSBjb21wb25lbnQgcmVzdHJpY3RlZCBieSBhIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT4KKwkgICAgICAgIGRlZmluaXRpb24gdG8gYmUgZW5hYmxlZCBhbmQgaW5jbHVkZWQgaW4gYW4gaW1hZ2UsIGl0CisJICAgICAgICBuZWVkcyB0byBoYXZlIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIGdsb2JhbAorCSAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBhIHZhcmlhYmxlCisJICAgICAgICB0eXBpY2FsbHkgZGVmaW5lZCBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBlbmFibGUKKwkgICAgICAgIHRoZSA8ZmlsZW5hbWU+cG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtdWdseTwvZmlsZW5hbWU+CisJICAgICAgICBwYWNrYWdlLCB5b3UgY291bGQgYWRkIGVpdGhlciB0aGUgc3RyaW5nCisJICAgICAgICAiY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IiBvciB0aGUgbW9yZSBnZW5lcmFsIHN0cmluZworCSAgICAgICAgImNvbW1lcmNpYWwiIHRvIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2xpY2Vuc2UtZmxhZy1tYXRjaGluZyc+TGljZW5zZSBGbGFnIE1hdGNoaW5nPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgZm9yIGEgZnVsbCBleHBsYW5hdGlvbiBvZiBob3cgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPiBtYXRjaGluZyB3b3Jrcy4KKyAgICAgICAgICAgIEhlcmUgaXMgdGhlIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtdWdseSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgIExpa2V3aXNlLCB0byBhZGRpdGlvbmFsbHkgZW5hYmxlIHRoZSBwYWNrYWdlIGJ1aWx0IGZyb20gdGhlIHJlY2lwZSBjb250YWluaW5nCisJICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUyA9ICJsaWNlbnNlXyR7UE59XyR7UFZ9IjwvZmlsZW5hbWU+LCBhbmQgYXNzdW1pbmcKKwkgICAgICAgIHRoYXQgdGhlIGFjdHVhbCByZWNpcGUgbmFtZSB3YXMgPGZpbGVuYW1lPmVtZ2RfMS4xMC5iYjwvZmlsZW5hbWU+LAorCSAgICAgICAgdGhlIGZvbGxvd2luZyBzdHJpbmcgd291bGQgZW5hYmxlIHRoYXQgcGFja2FnZSBhcyB3ZWxsIGFzCisJICAgICAgICB0aGUgb3JpZ2luYWwgPGZpbGVuYW1lPmdzdC1wbHVnaW5zLXVnbHk8L2ZpbGVuYW1lPiBwYWNrYWdlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCA9ICJjb21tZXJjaWFsX2dzdC1wbHVnaW5zLXVnbHkgbGljZW5zZV9lbWdkXzEuMTAiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICBBcyBhIGNvbnZlbmllbmNlLCB5b3UgZG8gbm90IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29tcGxldGUgbGljZW5zZSBzdHJpbmcKKwkgICAgICAgIGluIHRoZSB3aGl0ZWxpc3QgZm9yIGV2ZXJ5IHBhY2thZ2UuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbiBhYmJyZXZpYXRlZCBmb3JtLCB3aGljaCBjb25zaXN0cworCSAgICAgICAgb2YganVzdCB0aGUgZmlyc3QgcG9ydGlvbiBvciBwb3J0aW9ucyBvZiB0aGUgbGljZW5zZSBzdHJpbmcgYmVmb3JlCisJICAgICAgICB0aGUgaW5pdGlhbCB1bmRlcnNjb3JlIGNoYXJhY3RlciBvciBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgQSBwYXJ0aWFsIHN0cmluZyB3aWxsIG1hdGNoCisJICAgICAgICBhbnkgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcgYXMgdGhlIGZpcnN0CisJICAgICAgICBwb3J0aW9uIG9mIGl0cyBsaWNlbnNlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcKKwkgICAgICAgIHdoaXRlbGlzdCBzdHJpbmcgd2lsbCBhbHNvIG1hdGNoIGJvdGggb2YgdGhlIHBhY2thZ2VzCisJICAgICAgICBwcmV2aW91c2x5IG1lbnRpb25lZCBhcyB3ZWxsIGFzIGFueSBvdGhlciBwYWNrYWdlcyB0aGF0IGhhdmUKKwkgICAgICAgIGxpY2Vuc2VzIHN0YXJ0aW5nIHdpdGggImNvbW1lcmNpYWwiIG9yICJsaWNlbnNlIi4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbCBsaWNlbnNlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImxpY2Vuc2UtZmxhZy1tYXRjaGluZyI+CisgICAgICAgICAgICA8dGl0bGU+TGljZW5zZSBGbGFnIE1hdGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisJCSAgICAgICAgTGljZW5zZSBmbGFnIG1hdGNoaW5nIGFsbG93cyB5b3UgdG8gY29udHJvbCB3aGF0IHJlY2lwZXMgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbmNsdWRlcyBpbiB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgRnVuZGFtZW50YWxseSwgdGhlIGJ1aWxkIHN5c3RlbSBhdHRlbXB0cyB0byBtYXRjaAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHN0cmluZ3MgZm91bmQgaW4gcmVjaXBlcyBhZ2FpbnN0CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBzdHJpbmdzIGZvdW5kIGluIHRoZSB3aGl0ZWxpc3QuCisgICAgICAgICAgICAgICAgQSBtYXRjaCBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbmNsdWRlIGEgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkLCB3aGlsZSBmYWlsdXJlIHRvIGZpbmQgYSBtYXRjaCBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgIGV4Y2x1ZGUgYSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGxpY2Vuc2UgZmxhZyBtYXRjaGluZyBpcyBzaW1wbGUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdW5kZXJzdGFuZGluZyBzb21lIGNvbmNlcHRzIHdpbGwgaGVscCB5b3UKKyAgICAgICAgICAgICAgICBjb3JyZWN0bHkgYW5kIGVmZmVjdGl2ZWx5IHVzZSBtYXRjaGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIGEgZmxhZworICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIHJlY2lwZSBpcyB0ZXN0ZWQgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICBjb250ZW50cyBvZiB0aGUgd2hpdGVsaXN0LCB0aGUgZXhwYW5kZWQgc3RyaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl8ke1BOfTwvZmlsZW5hbWU+IGlzIGFwcGVuZGVkIHRvIHRoZSBmbGFnLgorICAgICAgICAgICAgICAgIFRoaXMgZXhwYW5zaW9uIG1ha2VzIGVhY2ggPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhbHVlIHJlY2lwZS1zcGVjaWZpYy4KKyAgICAgICAgICAgICAgICBBZnRlciBleHBhbnNpb24sIHRoZSBzdHJpbmcgaXMgdGhlbiBtYXRjaGVkIGFnYWluc3QgdGhlCisgICAgICAgICAgICAgICAgd2hpdGVsaXN0LgorICAgICAgICAgICAgICAgIFRodXMsIHNwZWNpZnlpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gcmVjaXBlICJmb28iLCBmb3IgZXhhbXBsZSwgcmVzdWx0cyBpbiB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiJjb21tZXJjaWFsX2ZvbyI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBBbmQsIHRvIGNyZWF0ZSBhIG1hdGNoLCB0aGF0IHN0cmluZyBtdXN0IGFwcGVhciBpbiB0aGUKKyAgICAgICAgICAgICAgICB3aGl0ZWxpc3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEp1ZGljaW91cyB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzdHJpbmdzIGFuZCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICBhbGxvd3MgeW91IGEgbG90IG9mIGZsZXhpYmlsaXR5IGZvciBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlcyBiYXNlZCBvbiBsaWNlbnNpbmcuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gYnJvYWRlbiB0aGUgbWF0Y2hpbmcgY2FwYWJpbGl0aWVzIGJ5CisgICAgICAgICAgICAgICAgdXNpbmcgbGljZW5zZSBmbGFncyBzdHJpbmcgc3Vic2V0cyBpbiB0aGUgd2hpdGVsaXN0LgorICAgICAgICAgICAgICAgIDxub3RlPldoZW4gdXNpbmcgYSBzdHJpbmcgc3Vic2V0LCBiZSBzdXJlIHRvIHVzZSB0aGUgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgZXhwYW5kZWQgc3RyaW5nIHRoYXQgcHJlY2VkZXMgdGhlIGFwcGVuZGVkIHVuZGVyc2NvcmUKKyAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIChlLmcuIDxmaWxlbmFtZT51c2V0aGlzcGFydF8xLjM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXRoaXNwYXJ0XzEuNDwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2ltcGx5IHNwZWNpZnlpbmcgdGhlIHN0cmluZyAiY29tbWVyY2lhbCIgaW4KKyAgICAgICAgICAgICAgICB0aGUgd2hpdGVsaXN0IG1hdGNoZXMgYW55IGV4cGFuZGVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPiBkZWZpbml0aW9uIHRoYXQgc3RhcnRzIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgc3RyaW5nICJjb21tZXJjaWFsIiBzdWNoIGFzICJjb21tZXJjaWFsX2ZvbyIgYW5kCisgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfYmFyIiwgd2hpY2ggYXJlIHRoZSBzdHJpbmdzIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBmb3IgaHlwb3RoZXRpY2FsIHJlY2lwZXMgbmFtZWQKKyAgICAgICAgICAgICAgICAiZm9vIiBhbmQgImJhciIgYXNzdW1pbmcgdGhvc2UgcmVjaXBlcyBzaW1wbHkgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRodXMsIHlvdSBjYW4gY2hvb3NlIHRvIGV4aGF1c3RpdmVseQorICAgICAgICAgICAgICAgIGVudW1lcmF0ZSBlYWNoIGxpY2Vuc2UgZmxhZyBpbiB0aGUgd2hpdGVsaXN0IGFuZAorICAgICAgICAgICAgICAgIGFsbG93IG9ubHkgc3BlY2lmaWMgcmVjaXBlcyBpbnRvIHRoZSBpbWFnZSwgb3IKKyAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSBhIHN0cmluZyBzdWJzZXQgdGhhdCBjYXVzZXMgYSBicm9hZGVyIHJhbmdlIG9mCisgICAgICAgICAgICAgICAgbWF0Y2hlcyB0byBhbGxvdyBhIHJhbmdlIG9mIHJlY2lwZXMgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NoZW1lIHdvcmtzIGV2ZW4gaWYgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPiBzdHJpbmcgYWxyZWFkeQorICAgICAgICAgICAgICAgIGhhcyA8ZmlsZW5hbWU+XyR7UE59PC9maWxlbmFtZT4gYXBwZW5kZWQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gdHVybnMgdGhlIGxpY2Vuc2UgZmxhZworICAgICAgICAgICAgICAgICJjb21tZXJjaWFsXzEuMl9mb28iIGludG8gImNvbW1lcmNpYWxfMS4yX2Zvb19mb28iIGFuZCB3b3VsZAorICAgICAgICAgICAgICAgIG1hdGNoIGJvdGggdGhlIGdlbmVyYWwgImNvbW1lcmNpYWwiIGFuZCB0aGUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAiY29tbWVyY2lhbF8xLjJfZm9vIiBzdHJpbmdzIGZvdW5kIGluIHRoZSB3aGl0ZWxpc3QsIGFzCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgb3RoZXIgc2NlbmFyaW9zOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIHNwZWNpZnkgYSB2ZXJzaW9uZWQgc3RyaW5nIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHN1Y2ggYXMgImNvbW1lcmNpYWxfZm9vXzEuMiIgaW4gYSAiZm9vIiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGV4cGFuZHMgdGhpcyBzdHJpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsX2Zvb18xLjJfZm9vIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmUgdGhpcyBsaWNlbnNlIGZsYWcgd2l0aCBhIHdoaXRlbGlzdCB0aGF0IGhhcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0cmluZyAiY29tbWVyY2lhbCIgYW5kIHlvdSBtYXRjaCB0aGUgZmxhZyBhbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbnkgb3RoZXIgZmxhZyB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsIi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVuZGVyIHRoZSBzYW1lIGNpcmN1bXN0YW5jZXMsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZSAiY29tbWVyY2lhbF9mb28iIGluIHRoZSB3aGl0ZWxpc3QgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIG5vdCBvbmx5IG1hdGNoZXMgImNvbW1lcmNpYWxfZm9vXzEuMiIgYnV0CisgICAgICAgICAgICAgICAgICAgICAgICBhbHNvIG1hdGNoZXMgYW55IGxpY2Vuc2UgZmxhZyB3aXRoIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsX2ZvbyIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gYmUgdmVyeSBzcGVjaWZpYyBhbmQgdXNlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGFuZCB2ZXJzaW9uIHBhcnRzIGluIHRoZSB3aGl0ZWxpc3QgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21tZXJjaWFsX2Zvb18xLjIiKSB0byBzcGVjaWZpY2FsbHkgbWF0Y2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmVkIHJlY2lwZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJvdGhlci12YXJpYWJsZXMtcmVsYXRlZC10by1jb21tZXJjaWFsLWxpY2Vuc2VzIj4KKyAgICAgICAgICAgIDx0aXRsZT5PdGhlciBWYXJpYWJsZXMgUmVsYXRlZCB0byBDb21tZXJjaWFsIExpY2Vuc2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT3RoZXIgaGVscGZ1bCB2YXJpYWJsZXMgcmVsYXRlZCB0byBjb21tZXJjaWFsCisgICAgICAgICAgICAgICAgbGljZW5zZSBoYW5kbGluZyBleGlzdCBhbmQgYXJlIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmM8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NTUVSQ0lBTF9BVURJT19QTFVHSU5TID89ICIiCisgICAgIENPTU1FUkNJQUxfVklERU9fUExVR0lOUyA/PSAiIgorICAgICBDT01NRVJDSUFMX1FUID0gIiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZXNlIGNvbXBvbmVudHMsIHlvdSBjYW4gZG8gc28gYnkgbWFraW5nIHN1cmUgeW91IGhhdmUKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPSAiZ3N0LXBsdWdpbnMtdWdseS1tYWQgXAorICAgICAgICBnc3QtcGx1Z2lucy11Z2x5LW1wZWdhdWRpb3BhcnNlIgorICAgICBDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlMgPSAiZ3N0LXBsdWdpbnMtdWdseS1tcGVnMmRlYyBcCisgICAgICAgIGdzdC1wbHVnaW5zLXVnbHktbXBlZ3N0cmVhbSBnc3QtcGx1Z2lucy1iYWQtbXBlZ3ZpZGVvcGFyc2UiCisgICAgIENPTU1FUkNJQUxfUVQgPz0gInFtbXAiCisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtdWdseSBjb21tZXJjaWFsX2dzdC1wbHVnaW5zLWJhZCBjb21tZXJjaWFsX3FtbXAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgeW91IGNvdWxkIGFsc28gY3JlYXRlIGEgbWF0Y2hpbmcgd2hpdGVsaXN0CisgICAgICAgICAgICAgICAgZm9yIHRob3NlIGNvbXBvbmVudHMgdXNpbmcgdGhlIG1vcmUgZ2VuZXJhbCAiY29tbWVyY2lhbCIKKyAgICAgICAgICAgICAgICBpbiB0aGUgd2hpdGVsaXN0LCBidXQgdGhhdCB3b3VsZCBhbHNvIGVuYWJsZSBhbGwgdGhlCisgICAgICAgICAgICAgICAgb3RoZXIgcGFja2FnZXMgd2l0aAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgImNvbW1lcmNpYWwiLCB3aGljaCB5b3UgbWF5IG9yIG1heSBub3Qgd2FudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWwiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGF1ZGlvIGFuZCB2aWRlbyBwbHVnLWlucyBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01NRVJDSUFMX0FVRElPX1BMVUdJTlM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09NTUVSQ0lBTF9WSURFT19QTFVHSU5TPC9maWxlbmFtZT4gc3RhdGVtZW50cworICAgICAgICAgICAgICAgIG9yIGNvbW1lcmNpYWwgUXQgY29tcG9uZW50cyBhcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5DT01NRVJDSUFMX1FUPC9maWxlbmFtZT4gc3RhdGVtZW50IChhbG9uZworICAgICAgICAgICAgICAgIHdpdGggdGhlIGVuYWJsaW5nIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+KSBpbmNsdWRlcyB0aGUKKyAgICAgICAgICAgICAgICBwbHVnLWlucyBvciBjb21wb25lbnRzIGludG8gYnVpbHQgaW1hZ2VzLCB0aHVzIGFkZGluZworICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIG1lZGlhIGZvcm1hdHMgb3IgY29tcG9uZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3VzaW5ncG9reS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4Nzk2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3VzaW5ncG9reS54bWwKQEAgLTAsMCArMSwxMDg4IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndXNpbmdwb2t5Jz4KKzx0aXRsZT5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBjb21tb24gdXNhZ2UgZm9yIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgaW50cm9kdWN0b3J5IGluIG5hdHVyZSBhcyBvdGhlciBtYW51YWxzIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIGRvY3VtZW50YXRpb24gc2V0IHByb3ZpZGUgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWJ1aWxkJz4KKyAgICA8dGl0bGU+UnVubmluZyBhIEJ1aWxkPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBzdW1tYXJ5IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBwcm92aWRlcyBpbmZvcm1hdGlvbgorICAgICAgICBmb3IgbGVzcyBvYnZpb3VzIGFzcGVjdHMgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBidWlsZCBhbiBpbWFnZSB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdidWlsZC1vdmVydmlldyc+CisgICAgICAgIDx0aXRsZT5CdWlsZCBPdmVydmlldzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgeW91IHdpbGwgbmVlZCB0byBidWlsZCBhbiBpbWFnZSB3aGVuZXZlciB5b3UgY2hhbmdlIGhhcmR3YXJlCisgICAgICAgICAgICBzdXBwb3J0LCBhZGQgb3IgY2hhbmdlIHN5c3RlbSBsaWJyYXJpZXMsIG9yIGFkZCBvciBjaGFuZ2Ugc2VydmljZXMgdGhhdCBoYXZlIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nIiBmb3JtYXQ9IlBORyIgYWxpZ249J2NlbnRlcicgc2NhbGVmaXQ9JzEnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8Y2FwdGlvbj4KKyAgICAgICAgICAgICAgICA8cGFyYT5CdWlsZGluZyBhbiBJbWFnZTwvcGFyYT4KKyAgICAgICAgICAgIDwvY2FwdGlvbj4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaXJzdCB0aGluZyB5b3UgbmVlZCB0byBkbyBpcyBzZXQgdXAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgZW52aXJvbm1lbnQgYnkgc291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsgWzxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPl0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT5idWlsZF9kaXI8L3JlcGxhY2VhYmxlPiBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgZm9yIHRoZSBidWlsZCAtCisgICAgICAgICAgICB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEJ1aWxkIERpcmVjdG9yeSwgaXQgZGVmYXVsdHMgdG8gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGluIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEEgY29tbW9uIHByYWN0aWNlIGlzIHRvIHVzZSBhIGRpZmZlcmVudCBCdWlsZCBEaXJlY3RvcnkgZm9yIGRpZmZlcmVudCB0YXJnZXRzLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5+L2J1aWxkL3g4NjwvZmlsZW5hbWU+IGZvciBhIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRhcmdldCwgYW5kIDxmaWxlbmFtZT5+L2J1aWxkL2FybTwvZmlsZW5hbWU+IGZvciBhIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4gdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzZXQgdXAsIHlvdSBjYW4gYnVpbGQgYSB0YXJnZXQgdXNpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgbmFtZSBvZiB0aGUgcmVjaXBlIHlvdSB3YW50IHRvIGJ1aWxkLgorICAgICAgICAgICAgQ29tbW9uIHRhcmdldHMgYXJlIHRoZSBpbWFnZXMgaW4gPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL2ltYWdlczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1zYXRvL2ltYWdlczwvZmlsZW5hbWU+LCBldGMuIGFsbCBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIE9yLCB0aGUgdGFyZ2V0IGNhbiBiZSB0aGUgbmFtZSBvZiBhIHJlY2lwZSBmb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBzb2Z0d2FyZSBzdWNoIGFzCisgICAgICAgICAgICBCdXN5Qm94LgorICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgaW1hZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0icmVmLWltYWdlcyI+SW1hZ2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQnVpbGRpbmcgYW4gaW1hZ2Ugd2l0aG91dCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgICAgICAgICAgICAzIChHUEx2MyksIG9yIHNpbWlsYXJseSBsaWNlbnNlZCwgY29tcG9uZW50cyBpcyBzdXBwb3J0ZWQgZm9yCisgICAgICAgICAgICBvbmx5IG1pbmltYWwgYW5kIGJhc2UgaW1hZ2VzLgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPiIgY2hhcHRlciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdidWlsZGluZy1hbi1pbWFnZS11c2luZy1ncGwtY29tcG9uZW50cyc+CisgICAgICAgIDx0aXRsZT5CdWlsZGluZyBhbiBJbWFnZSBVc2luZyBHUEwgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGFuIGltYWdlIHVzaW5nIEdQTCBjb21wb25lbnRzLCB5b3UgbmVlZCB0byBtYWludGFpbiB5b3VyIG9yaWdpbmFsCisgICAgICAgICAgICBzZXR0aW5ncyBhbmQgbm90IHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBhcHBseWluZyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIEdOVQorICAgICAgICAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAgICAgICAgICAgIElmIHlvdSByZWJ1aWxkIHVzaW5nIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBHUEwsIGRlcGVuZGVuY3kgZXJyb3JzIG1pZ2h0IG9jY3VyCisgICAgICAgICAgICBkdWUgdG8gc29tZSBjb21wb25lbnRzIG5vdCBiZWluZyByZWJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWluc3RhbGwnPgorICAgIDx0aXRsZT5JbnN0YWxsaW5nIGFuZCBVc2luZyB0aGUgUmVzdWx0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBPbmNlIGFuIGltYWdlIGhhcyBiZWVuIGJ1aWx0LCBpdCBvZnRlbiBuZWVkcyB0byBiZSBpbnN0YWxsZWQuCisgICAgICAgIFRoZSBpbWFnZXMgYW5kIGtlcm5lbHMgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXJlIHBsYWNlZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiBpbgorICAgICAgICA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+dG1wL2RlcGxveS9pbWFnZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBydW4gcHJlLWJ1aWx0IGltYWdlcyBzdWNoIGFzIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5xZW11YXJtPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdXNpbmctcHJlLWJ1aWx0Jz5FeGFtcGxlIFVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGluc3RhbGwgdGhlc2UgaW1hZ2VzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIKKyAgICAgICAgcGFydGljdWxhciBib2FyZCBvciBtYWNoaW5lLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmcnPgorICAgIDx0aXRsZT5EZWJ1Z2dpbmcgQnVpbGQgRmFpbHVyZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBleGFjdCBtZXRob2QgZm9yIGRlYnVnZ2luZyBidWlsZCBmYWlsdXJlcyBkZXBlbmRzIG9uIHRoZSBuYXR1cmUgb2YKKyAgICAgICAgdGhlIHByb2JsZW0gYW5kIG9uIHRoZSBzeXN0ZW0ncyBhcmVhIGZyb20gd2hpY2ggdGhlIGJ1ZyBvcmlnaW5hdGVzLgorICAgICAgICBTdGFuZGFyZCBkZWJ1Z2dpbmcgcHJhY3RpY2VzIHN1Y2ggYXMgY29tcGFyaXNvbiBhZ2FpbnN0IHRoZSBsYXN0CisgICAgICAgIGtub3duIHdvcmtpbmcgdmVyc2lvbiB3aXRoIGV4YW1pbmF0aW9uIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUKKyAgICAgICAgcmUtYXBwbGljYXRpb24gb2Ygc3RlcHMgdG8gaWRlbnRpZnkgdGhlIG9uZSBjYXVzaW5nIHRoZSBwcm9ibGVtIGFyZQorICAgICAgICB2YWxpZCBmb3IgdGhlIFlvY3RvIFByb2plY3QganVzdCBhcyB0aGV5IGFyZSBmb3IgYW55IG90aGVyIHN5c3RlbS4KKyAgICAgICAgRXZlbiB0aG91Z2ggaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRhaWwgZXZlcnkgcG9zc2libGUgcG90ZW50aWFsIGZhaWx1cmUsCisgICAgICAgIHRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGdlbmVyYWwgdGlwcyB0byBhaWQgaW4gZGVidWdnaW5nLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBIHVzZWZ1bCBmZWF0dXJlIGZvciBkZWJ1Z2dpbmcgaXMgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sLgorICAgICAgICBDb25maWd1cmluZyB0aGUgWW9jdG8gUHJvamVjdCB0byB1c2UgdGhpcyB0b29sIGNhdXNlcyB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwcm9kdWNlIGVycm9yIHJlcG9ydGluZyBjb21tYW5kcyBhcworICAgICAgICBwYXJ0IG9mIHRoZSBjb25zb2xlIG91dHB1dC4KKyAgICAgICAgWW91IGNhbiBlbnRlciB0aGUgY29tbWFuZHMgYWZ0ZXIgdGhlIGJ1aWxkIGNvbXBsZXRlcworICAgICAgICB0byBsb2cgZXJyb3IgaW5mb3JtYXRpb24KKyAgICAgICAgaW50byBhIGNvbW1vbiBkYXRhYmFzZSwgdGhhdCBjYW4gaGVscCB5b3UgZmlndXJlIG91dCB3aGF0IG1pZ2h0IGJlCisgICAgICAgIGdvaW5nIHdyb25nLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGVuYWJsZSBhbmQgdXNlIHRoaXMgZmVhdHVyZSwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctdGhlLWVycm9yLXJlcG9ydGluZy10b29sJz5Vc2luZyB0aGUgRXJyb3IgUmVwb3J0aW5nIFRvb2w8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBkaXNjdXNzaW9ucyBvbiBkZWJ1Z2dpbmcsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnJz5EZWJ1Z2dpbmcgV2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikgUmVtb3RlbHk8L3VsaW5rPiIKKyAgICAgICAgYW5kCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNhZHQtZWNsaXBzZSc+V29ya2luZyB3aXRoaW4gRWNsaXBzZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9ucyBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIG1hbnkgZXhhbXBsZXMgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgWW91IGNhbiBsZWFybiBhYm91dCBCaXRCYWtlIGJ5IHJlYWRpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbCc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgIDwvbm90ZT4KKworCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctdGFza2ZhaWx1cmVzJz4KKyAgICAgICAgPHRpdGxlPlRhc2sgRmFpbHVyZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPlRoZSBsb2cgZmlsZSBmb3Igc2hlbGwgdGFza3MgaXMgYXZhaWxhYmxlIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb188cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPi5waWQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiB0YXNrIGZvciB0aGUgUUVNVSBtaW5pbWFsIGltYWdlIGZvciB0aGUgeDg2CisgICAgICAgICAgICBtYWNoaW5lICg8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+KSBtaWdodCBiZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3RlbXAvbG9nLmRvX2NvbXBpbGUuMjA4MzA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRvIHNlZSB3aGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgcnVucyB0byBnZW5lcmF0ZSB0aGF0IGxvZywgbG9vayBhdCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi5kb188cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPi5waWQ8L2ZpbGVuYW1lPiBmaWxlIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQcmVzZW50bHksIHRoZSBvdXRwdXQgZnJvbSBQeXRob24gdGFza3MgaXMgc2VudCBkaXJlY3RseSB0byB0aGUgY29uc29sZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLXRhc2tydW5uaW5nJz4KKyAgICAgICAgPHRpdGxlPlJ1bm5pbmcgU3BlY2lmaWMgVGFza3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW55IGdpdmVuIHBhY2thZ2UgY29uc2lzdHMgb2YgYSBzZXQgb2YgdGFza3MuCisgICAgICAgICAgICBUaGUgc3RhbmRhcmQgQml0QmFrZSBiZWhhdmlvciBpbiBtb3N0IGNhc2VzIGlzOgorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV8qPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgZGVmYXVsdCB0YXNrIGlzIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IGFuZCBhbnkgdGFza3MKKyAgICAgICAgICAgIG9uIHdoaWNoIGl0IGRlcGVuZHMgYnVpbGQgZmlyc3QuCisgICAgICAgICAgICBTb21lIHRhc2tzLCBzdWNoIGFzIDxmaWxlbmFtZT5kb19kZXZzaGVsbDwvZmlsZW5hbWU+LCBhcmUgbm90IHBhcnQKKyAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IGJ1aWxkIGNoYWluLgorICAgICAgICAgICAgSWYgeW91IHdpc2ggdG8gcnVuIGEgdGFzayB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkCisgICAgICAgICAgICBjaGFpbiwgeW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT4tYzwvZmlsZW5hbWU+IG9wdGlvbiBpbiBCaXRCYWtlLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBkZXZzaGVsbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byByZXJ1biBhIHRhc2ssIHVzZSB0aGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gZm9yY2UKKyAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIGZvcmNlcyByZWNvbXBpbGF0aW9uIGFmdGVyCisgICAgICAgICAgICBjaGFuZ2luZyBmaWxlcyBpbiB0aGUgd29yayBkaXJlY3RvcnkuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCisgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAuCisgICAgICAgIDxyZXBsYWNlYWJsZT5tYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhlIHdvcmsgZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AgLWMgY29tcGlsZSAtZgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlcXVlbmNlIGZpcnN0IGJ1aWxkcyBhbmQgdGhlbiByZWNvbXBpbGVzCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGxhc3QgY29tbWFuZCByZXJ1bnMgYWxsIHRhc2tzIChiYXNpY2FsbHkgdGhlIHBhY2thZ2luZyB0YXNrcykKKyAgICAgICAgICAgIGFmdGVyIHRoZSBjb21waWxlLgorICAgICAgICAgICAgQml0QmFrZSByZWNvZ25pemVzIHRoYXQgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRhc2sgd2FzIHJlcnVuIGFuZCB0aGVyZWZvcmUgdW5kZXJzdGFuZHMgdGhhdCB0aGUgb3RoZXIgdGFza3MKKyAgICAgICAgICAgIGFsc28gbmVlZCB0byBiZSBydW4gYWdhaW4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gdmlldyBhIGxpc3Qgb2YgdGFza3MgaW4gYSBnaXZlbiBwYWNrYWdlIGJ5IHJ1bm5pbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT4gdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBsaXN0dGFza3MKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSByZXN1bHRzIGFwcGVhciBhcyBvdXRwdXQgdG8gdGhlIGNvbnNvbGUgYW5kIGFyZSBhbHNvIGluIHRoZQorICAgICAgICAgICAgZmlsZSA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb19saXN0dGFza3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5EZXBlbmRlbmN5IEdyYXBoczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgaXQgY2FuIGJlIGhhcmQgdG8gc2VlIHdoeSBCaXRCYWtlIHdhbnRzIHRvIGJ1aWxkCisgICAgICAgICAgICBvdGhlciBwYWNrYWdlcyBiZWZvcmUgYnVpbGRpbmcgYSBnaXZlbiBwYWNrYWdlIHlvdSBoYXZlIHNwZWNpZmllZC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZSAtZyA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgY3JlYXRlcyB0aGUgPGZpbGVuYW1lPnBuLWJ1aWxkbGlzdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnBuLWRlcGVuZHMuZG90PC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZS1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT50YXNrLWRlcGVuZHMuZG90PC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIHNob3cgd2hhdCB3aWxsIGJlIGJ1aWx0IGFuZCB0aGUgcGFja2FnZSBhbmQgdGFzaworICAgICAgICAgICAgZGVwZW5kZW5jaWVzLCB3aGljaCBhcmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHJvYmxlbXMuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1nIC11IGRlcGV4cCA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbW1hbmQgdG8gZGlzcGxheSB0aGUgcmVzdWx0cyBpbiBhIG1vcmUgaHVtYW4tcmVhZGFibGUgZm9ybS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+R2VuZXJhbCBCaXRCYWtlIFByb2JsZW1zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIGRlYnVnIG91dHB1dCBmcm9tIEJpdEJha2UgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT4tRDwvZmlsZW5hbWU+IG9wdGlvbi4KKyAgICAgICAgICAgIFRoZSBkZWJ1ZyBvdXRwdXQgZ2l2ZXMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IEJpdEJha2UKKyAgICAgICAgICAgIGlzIGRvaW5nIGFuZCB0aGUgcmVhc29uIGJlaGluZCBpdC4KKyAgICAgICAgICAgIEVhY2ggPGZpbGVuYW1lPi1EPC9maWxlbmFtZT4gb3B0aW9uIHlvdSB1c2UgaW5jcmVhc2VzIHRoZSBsb2dnaW5nIGxldmVsLgorICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHVzYWdlIGlzIDxmaWxlbmFtZT4tREREPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvdXRwdXQgZnJvbSA8ZmlsZW5hbWU+Yml0YmFrZSAtREREIC12PC9maWxlbmFtZT4gPHJlcGxhY2VhYmxlPnRhcmdldG5hbWU8L3JlcGxhY2VhYmxlPiBjYW4gcmV2ZWFsIHdoeQorICAgICAgICAgICAgQml0QmFrZSBjaG9zZSBhIGNlcnRhaW4gdmVyc2lvbiBvZiBhIHBhY2thZ2Ugb3Igd2h5IEJpdEJha2UKKyAgICAgICAgICAgIHBpY2tlZCBhIGNlcnRhaW4gcHJvdmlkZXIuCisgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY291bGQgYWxzbyBoZWxwIHlvdSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB5b3UgdGhpbmsgQml0QmFrZSBkaWQgc29tZXRoaW5nCisgICAgICAgICAgICB1bmV4cGVjdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2RldmVsb3BtZW50LWhvc3Qtc3lzdGVtLWlzc3Vlcyc+CisgICAgICAgIDx0aXRsZT5EZXZlbG9wbWVudCBIb3N0IFN5c3RlbSBJc3N1ZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZXRpbWVzIGlzc3VlcyBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gY2FuIGNhdXNlIHlvdXIKKyAgICAgICAgICAgIGJ1aWxkIHRvIGZhaWwuCisgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGtub3duLCBob3N0LXNwZWNpZmljIHByb2JsZW1zLgorICAgICAgICAgICAgQmUgc3VyZSB0byBhbHdheXMgY29uc3VsdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19SRUxFQVNFX05PVEVTOyc+UmVsZWFzZSBOb3RlczwvdWxpbms+CisgICAgICAgICAgICBmb3IgYSBsb29rIGF0IGFsbCByZWxlYXNlLXJlbGF0ZWQgaXNzdWVzLgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT4gZmFpbHMgdG8gYnVpbGQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBkZXZlbG9wbWVudCBob3N0IHN5c3RlbSBoYXMgdGhlIHVucGF0Y2hlZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R05VIE1ha2UgMy44MjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZmFpbHMgZm9yIDxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT4gZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlR5cGljYWxseSwgZXZlcnkgZGlzdHJpYnV0aW9uIHRoYXQgc2hpcHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdOVSBNYWtlIDMuODI8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBhbHJlYWR5IGhhcyB0aGUgcGF0Y2hlZCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBzb21lIGRpc3RyaWJ1dGlvbnMsIHN1Y2ggYXMgRGViaWFuLCBoYXZlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HTlUgTWFrZSAzLjgyPC9maWxlbmFtZT4gYXMgYW4gb3B0aW9uLCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyB1bnBhdGNoZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHNlZSB0aGlzIGVycm9yIG9uIHRoZXNlIHR5cGVzIG9mIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFN3aXRjaCB0byA8ZmlsZW5hbWU+R05VIE1ha2UgMy44MTwvZmlsZW5hbWU+IG9yIHBhdGNoCisgICAgICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB0byBzb2x2ZSB0aGUgcHJvYmxlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLWJ1aWxkZmlsZSc+CisgICAgICAgIDx0aXRsZT5CdWlsZGluZyB3aXRoIE5vIERlcGVuZGVuY2llczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gYnVpbGQgYSBzcGVjaWZpYyByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlKSwKKyAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWIgPHJlcGxhY2VhYmxlPnNvbWVwYXRoPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnNvbWVyZWNpcGU8L3JlcGxhY2VhYmxlPi5iYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBjb21tYW5kIGZvcm0gZG9lcyBub3QgY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCB1c2UgaXQKKyAgICAgICAgICAgIG9ubHkgd2hlbiB5b3Uga25vdyBleGlzdGluZyBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIG1ldC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGZyYWdtZW50cyBvZiB0aGUgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBCaXRCYWtlIGNoZWNrcyBmb3IgYSB1bmlxdWUgbWF0Y2guCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZy12YXJpYWJsZXMnPgorICAgICAgICA8dGl0bGU+VmFyaWFibGVzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPi1lPC9maWxlbmFtZT4gQml0QmFrZSBvcHRpb24gdG8KKyAgICAgICAgICAgIGRpc3BsYXkgdGhlIHBhcnNpbmcgZW52aXJvbm1lbnQgZm9yIGEgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZGlzcGxheXMgdGhlIGdlbmVyYWwgcGFyc2luZyBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1lCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBzaG93cyB0aGUgcGFyc2luZyBlbnZpcm9ubWVudCBmb3IgYSBzcGVjaWZpYworICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUgPHJlcGxhY2VhYmxlPnJlY2lwZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlY2lwZS1sb2dnaW5nLW1lY2hhbmlzbXMnPgorICAgICAgICA8dGl0bGU+UmVjaXBlIExvZ2dpbmcgTWVjaGFuaXNtczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZXhpc3Qgd2hpbGUgd3JpdGluZyByZWNpcGVzIHRoYXQgYm90aCBsb2cgYnVpbGQgcHJvZ3Jlc3MgYW5kCisgICAgICAgICAgICBhY3Qgb24gYnVpbGQgY29uZGl0aW9ucyBzdWNoIGFzIHdhcm5pbmdzIGFuZCBlcnJvcnMuCisgICAgICAgICAgICBCb3RoIFB5dGhvbiBhbmQgQmFzaCBsYW5ndWFnZSBiaW5kaW5ncyBleGlzdCBmb3IgdGhlIGxvZ2dpbmcgbWVjaGFuaXNtOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlB5dGhvbjo8L2VtcGhhc2lzPiBGb3IgUHl0aG9uIGZ1bmN0aW9ucywgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyBzZXZlcmFsIGxvZ2xldmVsczogPGZpbGVuYW1lPmJiLmZhdGFsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5lcnJvcjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmIud2FybjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIubm90ZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmIucGxhaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5iYi5kZWJ1ZzwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmFzaDo8L2VtcGhhc2lzPiBGb3IgQmFzaCBmdW5jdGlvbnMsIHRoZSBzYW1lIHNldAorICAgICAgICAgICAgICAgICAgICBvZiBsb2dsZXZlbHMgZXhpc3QgYW5kIGFyZSBhY2Nlc3NlZCB3aXRoIGEgc2ltaWxhciBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmZhdGFsPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYmVycm9yPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYndhcm48L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJibm90ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJwbGFpbjwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPmJiZGVidWc8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZ3VpZGFuY2Ugb24gaG93IGxvZ2dpbmcgaXMgaGFuZGxlZCBpbiBib3RoIFB5dGhvbiBhbmQgQmFzaCByZWNpcGVzLCBzZWUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9nZ2luZy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBmb2xkZXIgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9nZ2luZy13aXRoLXB5dGhvbic+CisgICAgICAgICAgICA8dGl0bGU+TG9nZ2luZyBXaXRoIFB5dGhvbjwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIHJlY2lwZXMgdXNpbmcgUHl0aG9uIGFuZCBpbnNlcnRpbmcgY29kZSB0aGF0IGhhbmRsZXMgYnVpbGQgbG9ncywKKyAgICAgICAgICAgICAgICBrZWVwIGluIG1pbmQgdGhlIGdvYWwgaXMgdG8gaGF2ZSBpbmZvcm1hdGl2ZSBsb2dzIHdoaWxlIGtlZXBpbmcgdGhlIGNvbnNvbGUgYXMKKyAgICAgICAgICAgICAgICAic2lsZW50IiBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICBBbHNvLCBpZiB5b3Ugd2FudCBzdGF0dXMgbWVzc2FnZXMgaW4gdGhlIGxvZywgdXNlIHRoZSAiZGVidWciIGxvZ2xldmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB3cml0dGVuIGluIFB5dGhvbi4KKyAgICAgICAgICAgICAgICBUaGUgY29kZSBoYW5kbGVzIGxvZ2dpbmcgZm9yIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHRoZQorICAgICAgICAgICAgICAgIG51bWJlciBvZiB0YXNrcyBuZWVkZWQgdG8gYmUgcnVuLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWxpc3R0YXNrcyc+PGZpbGVuYW1lPmRvX2xpc3R0YXNrczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIGRvX2xpc3R0YXNrcygpIHsKKyAgICAgICAgIGJiLmRlYnVnKDIsICJTdGFydGluZyB0byBmaWd1cmUgb3V0IHRoZSB0YXNrIGxpc3QiKQorICAgICAgICAgaWYgbm90ZXdvcnRoeV9jb25kaXRpb246CisgICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIDQ3IHRhc2tzIHRvIHJ1biIpCisgICAgICAgICBiYi5kZWJ1ZygyLCAiR290IHRvIHBvaW50IHh5eiIpCisgICAgICAgICBpZiB3YXJuaW5nX3RyaWdnZXI6CisgICAgICAgICAgICAgYmIud2FybigiRGV0ZWN0ZWQgd2FybmluZ190cmlnZ2VyLCB0aGlzIG1pZ2h0IGJlIGEgcHJvYmxlbSBsYXRlci4iKQorICAgICAgICAgaWYgcmVjb3ZlcmFibGVfZXJyb3I6CisgICAgICAgICAgICAgYmIuZXJyb3IoIkhpdCByZWNvdmVyYWJsZV9lcnJvciwgeW91IHJlYWxseSBuZWVkIHRvIGZpeCB0aGlzISIpCisgICAgICAgICBpZiBmYXRhbF9lcnJvcjoKKyAgICAgICAgICAgICBiYi5mYXRhbCgiZmF0YWxfZXJyb3IgZGV0ZWN0ZWQsIHVuYWJsZSB0byBwcmludCB0aGUgdGFzayBsaXN0IikKKyAgICAgICAgIGJiLnBsYWluKCJUaGUgdGFza3MgcHJlc2VudCBhcmUgYWJjIikKKyAgICAgICAgIGJiLmRlYnVnKDIsICJGaW5pc2hlZCBmaWd1cmluZyBvdXQgdGhlIHRhc2tsaXN0IikKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb2dnaW5nLXdpdGgtYmFzaCc+CisgICAgICAgICAgICA8dGl0bGU+TG9nZ2luZyBXaXRoIEJhc2g8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyByZWNpcGVzIHVzaW5nIEJhc2ggYW5kIGluc2VydGluZyBjb2RlIHRoYXQgaGFuZGxlcyBidWlsZAorICAgICAgICAgICAgICAgIGxvZ3MsIHlvdSBoYXZlIHRoZSBzYW1lIGdvYWxzIC0gaW5mb3JtYXRpdmUgd2l0aCBtaW5pbWFsIGNvbnNvbGUgb3V0cHV0LgorICAgICAgICAgICAgICAgIFRoZSBzeW50YXggeW91IHVzZSBmb3IgcmVjaXBlcyB3cml0dGVuIGluIEJhc2ggaXMgc2ltaWxhciB0byB0aGF0IG9mCisgICAgICAgICAgICAgICAgcmVjaXBlcyB3cml0dGVuIGluIFB5dGhvbiBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHdyaXR0ZW4gaW4gQmFzaC4KKyAgICAgICAgICAgICAgICBUaGUgY29kZSBsb2dzIHRoZSBwcm9ncmVzcyBvZiB0aGUgPGZpbGVuYW1lPmRvX215X2Z1bmN0aW9uPC9maWxlbmFtZT4gZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19teV9mdW5jdGlvbigpIHsKKyAgICAgICAgIGJiZGVidWcgMiAiUnVubmluZyBkb19teV9mdW5jdGlvbiIKKyAgICAgICAgIGlmIFsgZXhjZXB0aW9uYWxfY29uZGl0aW9uIF07IHRoZW4KKyAgICAgICAgICAgICBiYm5vdGUgIkhpdCBleGNlcHRpb25hbF9jb25kaXRpb24iCisgICAgICAgICBmaQorICAgICAgICAgYmJkZWJ1ZyAyICAiR290IHRvIHBvaW50IHh5eiIKKyAgICAgICAgIGlmIFsgd2FybmluZ190cmlnZ2VyIF07IHRoZW4KKyAgICAgICAgICAgICBiYndhcm4gIkRldGVjdGVkIHdhcm5pbmdfdHJpZ2dlciwgdGhpcyBtaWdodCBjYXVzZSBhIHByb2JsZW0gbGF0ZXIuIgorICAgICAgICAgZmkKKyAgICAgICAgIGlmIFsgcmVjb3ZlcmFibGVfZXJyb3IgXTsgdGhlbgorICAgICAgICAgICAgIGJiZXJyb3IgIkhpdCByZWNvdmVyYWJsZV9lcnJvciwgY29ycmVjdGluZyIKKyAgICAgICAgIGZpCisgICAgICAgICBpZiBbIGZhdGFsX2Vycm9yIF07IHRoZW4KKyAgICAgICAgICAgICBiYmZhdGFsICJmYXRhbF9lcnJvciBkZXRlY3RlZCIKKyAgICAgICAgIGZpCisgICAgICAgICBiYmRlYnVnIDIgIkNvbXBsZXRlZCBkb19teV9mdW5jdGlvbiIKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLW90aGVycyc+CisgICAgICAgIDx0aXRsZT5PdGhlciBUaXBzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgb3RoZXIgdGlwcyB0aGF0IHlvdSBtaWdodCBmaW5kIHVzZWZ1bDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gYWRkaW5nIG5ldyBwYWNrYWdlcywgaXQgaXMgd29ydGggd2F0Y2hpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgIHVuZGVzaXJhYmxlIGl0ZW1zIG1ha2luZyB0aGVpciB3YXkgaW50byBjb21waWxlciBjb21tYW5kIGxpbmVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGRvIG5vdCB3YW50IHJlZmVyZW5jZXMgdG8gbG9jYWwgc3lzdGVtIGZpbGVzIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliLzwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4vdXNyL2luY2x1ZGUvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIDxmaWxlbmFtZT5wc3BsYXNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYm9vdCBzcGxhc2hzY3JlZW4sCisgICAgICAgICAgICAgICAgICAgIGFkZCA8ZmlsZW5hbWU+cHNwbGFzaD1mYWxzZTwvZmlsZW5hbWU+IHRvICB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gcHJldmVudHMgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPiBmcm9tIGxvYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRodXMgYWxsb3dzIHlvdSB0byBzZWUgdGhlIGNvbnNvbGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3dpdGNoIG91dCBvZiB0aGUgc3BsYXNoc2NyZWVuIGJ5CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaGluZyB0aGUgdmlydHVhbCBjb25zb2xlIChlLmcuIEZuK0xlZnQgb3IgRm4rUmlnaHQgb24gYSBaYXVydXMpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPgorICAgIDx0aXRsZT5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgTWFueSBmYWN0b3JzIGNhbiBpbmZsdWVuY2UgdGhlIHF1YWxpdHkgb2YgYSBidWlsZC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB1cGdyYWRlIGEgcmVjaXBlIHRvIHVzZSBhIG5ldyB2ZXJzaW9uIG9mIGFuIHVwc3RyZWFtIHNvZnR3YXJlCisgICAgICAgIHBhY2thZ2Ugb3IgeW91IGV4cGVyaW1lbnQgd2l0aCBzb21lIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHN1YnRsZSBjaGFuZ2VzCisgICAgICAgIGNhbiBvY2N1ciB0aGF0IHlvdSBtaWdodCBub3QgZGV0ZWN0IHVudGlsIGxhdGVyLgorICAgICAgICBDb25zaWRlciB0aGUgY2FzZSB3aGVyZSB5b3VyIHJlY2lwZSBpcyB1c2luZyBhIG5ld2VyIHZlcnNpb24gb2YgYW4gdXBzdHJlYW0gcGFja2FnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBhIG5ldyB2ZXJzaW9uIG9mIGEgcGllY2Ugb2Ygc29mdHdhcmUgbWlnaHQgaW50cm9kdWNlIGFuIG9wdGlvbmFsCisgICAgICAgIGRlcGVuZGVuY3kgb24gYW5vdGhlciBsaWJyYXJ5LCB3aGljaCBpcyBhdXRvLWRldGVjdGVkLgorICAgICAgICBJZiB0aGF0IGxpYnJhcnkgaGFzIGFscmVhZHkgYmVlbiBidWlsdCB3aGVuIHRoZSBzb2Z0d2FyZSBpcyBidWlsZGluZywKKyAgICAgICAgdGhlIHNvZnR3YXJlIHdpbGwgbGluayB0byB0aGUgYnVpbHQgbGlicmFyeSBhbmQgdGhhdCBsaWJyYXJ5IHdpbGwgYmUgcHVsbGVkCisgICAgICAgIGludG8geW91ciBpbWFnZSBhbG9uZyB3aXRoIHRoZSBuZXcgc29mdHdhcmUgZXZlbiBpZiB5b3UgZGlkIG5vdCB3YW50IHRoZQorICAgICAgICBsaWJyYXJ5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGV4aXN0cyB0byBoZWxwIHlvdSBtYWludGFpbgorICAgICAgICB0aGUgcXVhbGl0eSBvZiB5b3VyIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIGNsYXNzIHRvIGhpZ2hsaWdodCB1bmV4cGVjdGVkIGFuZCBwb3NzaWJseSB1bndhbnRlZAorICAgICAgICBjaGFuZ2VzIGluIHRoZSBidWlsZCBvdXRwdXQuCisgICAgICAgIFdoZW4geW91IGVuYWJsZSBidWlsZCBoaXN0b3J5LCBpdCByZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZgorICAgICAgICBlYWNoIHBhY2thZ2UgYW5kIGltYWdlIGFuZCB0aGVuIGNvbW1pdHMgdGhhdCBpbmZvcm1hdGlvbiB0byBhIGxvY2FsIEdpdAorICAgICAgICByZXBvc2l0b3J5IHdoZXJlIHlvdSBjYW4gZXhhbWluZSB0aGUgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IHlvdSBjYW4gZW5hYmxlIGFuZCBkaXNhYmxlCisgICAgICAgICAgICAgICBidWlsZCBoaXN0b3J5PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBidWlsZCBoaXN0b3J5IGNvbnRhaW5zCisgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byBsaW1pdCB0aGUgaW5mb3JtYXRpb24gdXNlZCBmb3IgYnVpbGQgaGlzdG9yeQorICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgdG8gZXhhbWluZSB0aGUgYnVpbGQgaGlzdG9yeSBmcm9tIGJvdGggYQorICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIGFuZCB3ZWIgaW50ZXJmYWNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2VuYWJsaW5nLWFuZC1kaXNhYmxpbmctYnVpbGQtaGlzdG9yeSc+CisgICAgICAgIDx0aXRsZT5FbmFibGluZyBhbmQgRGlzYWJsaW5nIEJ1aWxkIEhpc3Rvcnk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnVpbGQgaGlzdG9yeSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgVG8gZW5hYmxlIGl0LCBhZGQgdGhlIGZvbGxvd2luZyA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+CisgICAgICAgICAgICBzdGF0ZW1lbnQgYW5kIHNldCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiIGF0IHRoZSBlbmQgb2YgeW91cgorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJidWlsZGhpc3RvcnkiCisgICAgIEJVSUxESElTVE9SWV9DT01NSVQgPSAiMSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEVuYWJsaW5nIGJ1aWxkIGhpc3RvcnkgYXMgcHJldmlvdXNseSBkZXNjcmliZWQKKyAgICAgICAgICAgIGNhdXNlcyB0aGUgYnVpbGQgcHJvY2VzcyB0byBjb2xsZWN0IGJ1aWxkCisgICAgICAgICAgICBvdXRwdXQgaW5mb3JtYXRpb24gYW5kIGNvbW1pdCBpdCB0byBhIGxvY2FsCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHJlcG9zaXRvcnkuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBFbmFibGluZyBidWlsZCBoaXN0b3J5IGluY3JlYXNlcyB5b3VyIGJ1aWxkIHRpbWVzIHNsaWdodGx5LAorICAgICAgICAgICAgICAgIHBhcnRpY3VsYXJseSBmb3IgaW1hZ2VzLCBhbmQgaW5jcmVhc2VzIHRoZSBhbW91bnQgb2YgZGlzaworICAgICAgICAgICAgICAgIHNwYWNlIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIGJ1aWxkIGhpc3RvcnkgYnkgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIHN0YXRlbWVudHMKKyAgICAgICAgICAgIGZyb20geW91ciA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kaW5nLXdoYXQtdGhlLWJ1aWxkLWhpc3RvcnktY29udGFpbnMnPgorICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBXaGF0IHRoZSBCdWlsZCBIaXN0b3J5IENvbnRhaW5zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ1aWxkIGhpc3RvcnkgaW5mb3JtYXRpb24gaXMga2VwdCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVE9QRElSJz48ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vYnVpbGRoaXN0b3J5PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgYXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfRElSJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgYWJicmV2aWF0ZWQgbGlzdGluZzoKKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdCB0aGUgdG9wIGxldmVsLCB0aGVyZSBpcyBhIDxmaWxlbmFtZT5tZXRhZGF0YS1yZXZzPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgdGhhdCBsaXN0cyB0aGUgcmV2aXNpb25zIG9mIHRoZSByZXBvc2l0b3JpZXMgZm9yIHRoZSBsYXllcnMgZW5hYmxlZAorICAgICAgICAgICAgd2hlbiB0aGUgYnVpbGQgd2FzIHByb2R1Y2VkLgorICAgICAgICAgICAgVGhlIHJlc3Qgb2YgdGhlIGRhdGEgc3BsaXRzIGludG8gc2VwYXJhdGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aW1hZ2VzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2RrPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmUKKyAgICAgICAgICAgIGRlc2NyaWJlZCBiZWxvdy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1oaXN0b3J5LXBhY2thZ2UtaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3RvcnkgUGFja2FnZSBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBoaXN0b3J5IGZvciBlYWNoIHBhY2thZ2UgY29udGFpbnMgYSB0ZXh0IGZpbGUgdGhhdCBoYXMKKyAgICAgICAgICAgICAgICBuYW1lLXZhbHVlIHBhaXJzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkvcGFja2FnZXMvaTU4Ni1wb2t5LWxpbnV4L2J1c3lib3gvYnVzeWJveC9sYXRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQViA9IDEuMjIuMQorICAgICBQUiA9IHIzMgorICAgICBSUFJPVklERVMgPQorICAgICBSREVQRU5EUyA9IGdsaWJjICg+PSAyLjIwKSB1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cKKyAgICAgUlJFQ09NTUVORFMgPSBidXN5Ym94LXN5c2xvZyBidXN5Ym94LXVkaGNwYyB1cGRhdGUtcmMuZAorICAgICBQS0dTSVpFID0gNTQwMTY4CisgICAgIEZJTEVTID0gL3Vzci9iaW4vKiAvdXNyL3NiaW4vKiAvdXNyL2xpYi9idXN5Ym94LyogL3Vzci9saWIvbGliKi5zby4qIFwKKyAgICAgICAgL2V0YyAvY29tIC92YXIgL2Jpbi8qIC9zYmluLyogL2xpYi8qLnNvLiogL2xpYi91ZGV2L3J1bGVzLmQgXAorICAgICAgICAvdXNyL2xpYi91ZGV2L3J1bGVzLmQgL3Vzci9zaGFyZS9idXN5Ym94IC91c3IvbGliL2J1c3lib3gvKiBcCisgICAgICAgIC91c3Ivc2hhcmUvcGl4bWFwcyAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucyAvdXNyL3NoYXJlL2lkbCBcCisgICAgICAgIC91c3Ivc2hhcmUvb21mIC91c3Ivc2hhcmUvc291bmRzIC91c3IvbGliL2Jvbm9iby9zZXJ2ZXJzCisgICAgIEZJTEVMSVNUID0gL2Jpbi9idXN5Ym94IC9iaW4vYnVzeWJveC5ub3N1aWQgL2Jpbi9idXN5Ym94LnN1aWQgL2Jpbi9zaCBcCisgICAgICAgIC9ldGMvYnVzeWJveC5saW5rcy5ub3N1aWQgL2V0Yy9idXN5Ym94LmxpbmtzLnN1aWQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTW9zdCBvZiB0aGVzZSBuYW1lLXZhbHVlIHBhaXJzIGNvcnJlc3BvbmQgdG8gdmFyaWFibGVzIHVzZWQKKyAgICAgICAgICAgICAgICB0byBwcm9kdWNlIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIFRoZSBleGNlcHRpb25zIGFyZSA8ZmlsZW5hbWU+RklMRUxJU1Q8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlCisgICAgICAgICAgICAgICAgYWN0dWFsIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIHBhY2thZ2UsIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QS0dTSVpFPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSB0b3RhbCBzaXplIG9mIGZpbGVzCisgICAgICAgICAgICAgICAgaW4gdGhlIHBhY2thZ2UgaW4gYnl0ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXJlIGlzIGFsc28gYSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlY2lwZSBmcm9tIHdoaWNoIHRoZQorICAgICAgICAgICAgICAgIHBhY2thZ2UgY2FtZSAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkvcGFja2FnZXMvaTU4Ni1wb2t5LWxpbnV4L2J1c3lib3gvbGF0ZXN0PC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFYgPSAxLjIyLjEKKyAgICAgUFIgPSByMzIKKyAgICAgREVQRU5EUyA9IGluaXRzY3JpcHRzIGtlcm4tdG9vbHMtbmF0aXZlIHVwZGF0ZS1yYy5kLW5hdGl2ZSBcCisgICAgICAgIHZpcnR1YWwvaTU4Ni1wb2t5LWxpbnV4LWNvbXBpbGVybGlicyB2aXJ0dWFsL2k1ODYtcG9reS1saW51eC1nY2MgXAorICAgICAgICB2aXJ0dWFsL2xpYmMgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzCisgICAgIFBBQ0tBR0VTID0gYnVzeWJveC1wdGVzdCBidXN5Ym94LWh0dHBkIGJ1c3lib3gtdWRoY3BkIGJ1c3lib3gtdWRoY3BjIFwKKyAgICAgICAgYnVzeWJveC1zeXNsb2cgYnVzeWJveC1tZGV2IGJ1c3lib3gtaHdjbG9jayBidXN5Ym94LWRiZyBcCisgICAgICAgIGJ1c3lib3gtc3RhdGljZGV2IGJ1c3lib3gtZGV2IGJ1c3lib3gtZG9jIGJ1c3lib3gtbG9jYWxlIGJ1c3lib3gKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpbmFsbHksIGZvciB0aG9zZSByZWNpcGVzIGZldGNoZWQgZnJvbSBhIHZlcnNpb24gY29udHJvbAorICAgICAgICAgICAgICAgIHN5c3RlbSAoZS5nLiwgR2l0KSwgYSBmaWxlIGV4aXN0cyB0aGF0IGxpc3RzIHNvdXJjZSByZXZpc2lvbnMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHJlY2lwZSBhbmQgbGlzdHMgdGhlIGFjdHVhbCByZXZpc2lvbnMKKyAgICAgICAgICAgICAgICB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgTGlzdGVkIGFuZCBhY3R1YWwgcmV2aXNpb25zIG1pZ2h0IGRpZmZlciB3aGVuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGlzIHNldCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezxsaW5rIGxpbmtlbmQ9J3Zhci1BVVRPUkVWJz5BVVRPUkVWPC9saW5rPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgYXNzdW1pbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5L3BhY2thZ2VzL3FlbXV4ODYtcG9reS1saW51eC9saW51eC15b2N0by9sYXRlc3Rfc3JjcmV2PC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBTUkNSRVZfbWFjaGluZSA9ICIzOGNkNTYwZDUwMjJlZDJkYmQxYWIwZGNhOTY0MmU0N2M5OGEwYWExIgorICAgICBTUkNSRVZfbWFjaGluZSA9ICIzOGNkNTYwZDUwMjJlZDJkYmQxYWIwZGNhOTY0MmU0N2M5OGEwYWExIgorICAgICAjIFNSQ1JFVl9tZXRhID0gImEyMjdmMjBlZmYwNTZlNTExZDUwNGIyZTQ5MGYzNzc0YWIyNjBkNmYiCisgICAgIFNSQ1JFVl9tZXRhID0gImEyMjdmMjBlZmYwNTZlNTExZDUwNGIyZTQ5MGYzNzc0YWIyNjBkNmYiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCB3aXRoIHRoZSA8ZmlsZW5hbWU+LWE8L2ZpbGVuYW1lPiBvcHRpb24gdG8KKyAgICAgICAgICAgICAgICBjb2xsZWN0IHRoZSBzdG9yZWQgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHZhbHVlcworICAgICAgICAgICAgICAgIGZyb20gYnVpbGQgaGlzdG9yeSBhbmQgcmVwb3J0IHRoZW0gaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yCisgICAgICAgICAgICAgICAgdXNlIGluIGdsb2JhbCBjb25maWd1cmF0aW9uIChlLmcuLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgYSBkaXN0cm8gaW5jbHVkZSBmaWxlKSB0bworICAgICAgICAgICAgICAgIG92ZXJyaWRlIGZsb2F0aW5nIDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4gdmFsdWVzIHRvIGEKKyAgICAgICAgICAgICAgICBmaXhlZCBzZXQgb2YgcmV2aXNpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgc29tZSBleGFtcGxlIG91dHB1dCBmcm9tIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2cyAtYQorICAgICAjIGk1ODYtcG9reS1saW51eAorICAgICBTUkNSRVZfcG4tZ2xpYmMgPSAiYjgwNzlkZDBkMzYwNjQ4ZTRlOGRlNDg2NTZjNWMzODk3MjYyMTA3MiIKKyAgICAgU1JDUkVWX3BuLWdsaWJjLWluaXRpYWwgPSAiYjgwNzlkZDBkMzYwNjQ4ZTRlOGRlNDg2NTZjNWMzODk3MjYyMTA3MiIKKyAgICAgU1JDUkVWX3BuLW9wa2ctdXRpbHMgPSAiNTMyNzRmMDg3NTY1ZmQ0NWQ4NDUyYzUzNjc5OTdiYTZhNjgyYTM3YSIKKyAgICAgU1JDUkVWX3BuLWttb2QgPSAiZmQ1NjYzOGFlZDNmZTE0NzAxNWJmYTEwZWQ0YTVmNzQ5MTMwM2NiNCIKKyAgICAgIyB4ODZfNjQtbGludXgKKyAgICAgU1JDUkVWX3BuLWd0ay1kb2Mtc3R1Yi1uYXRpdmUgPSAiMWRlYTI2NjU5M2VkYjc2NmQ2ZDg5OGM3OTQ1MWVmMTkzZWIxN2NmYSIKKyAgICAgU1JDUkVWX3BuLWR0Yy1uYXRpdmUgPSAiNjVjYzRkMjc0OGEyYzJlNmYyN2YxY2YzOWUwN2E1ZGJhYmQ4MGViZiIKKyAgICAgU1JDUkVWX3BuLXVwZGF0ZS1yYy5kLW5hdGl2ZSA9ICJlY2E2ODBkZGYyOGQwMjQ5NTQ4OTVmNTlhMjQxYTYyMmRkNTc1YzExIgorICAgICBTUkNSRVZfZ2xpYmNfcG4tY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSA9ICJiODA3OWRkMGQzNjA2NDhlNGU4ZGU0ODY1NmM1YzM4OTcyNjIxMDcyIgorICAgICBTUkNSRVZfbG9jYWxlZGVmX3BuLWNyb3NzLWxvY2FsZWRlZi1uYXRpdmUgPSAiYzgzMzM2NzM0OGQzOWRhZDdiYTAxODk5MGJmZGFmZmFlYzhlOWVkMyIKKyAgICAgU1JDUkVWX3BuLXByZWxpbmstbmF0aXZlID0gImZhYTA2OWRlZWM5OWJmNjE0MThkMGJhYjgzMWM4M2Q3YzFiNzk3Y2EiCisgICAgIFNSQ1JFVl9wbi1vcGtnLXV0aWxzLW5hdGl2ZSA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgorICAgICBTUkNSRVZfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiMjMzNDViODg0NmZlNGJkMTY3ZWZkZjFiZDhhMTIyNGIyYmE5YTVmZiIKKyAgICAgU1JDUkVWX3BuLWttb2QtbmF0aXZlID0gImZkNTY2MzhhZWQzZmUxNDcwMTViZmExMGVkNGE1Zjc0OTEzMDNjYjQiCisgICAgICMgcWVtdXg4Ni1wb2t5LWxpbnV4CisgICAgIFNSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvID0gIjM4Y2Q1NjBkNTAyMmVkMmRiZDFhYjBkY2E5NjQyZTQ3Yzk4YTBhYTEiCisgICAgIFNSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvID0gImEyMjdmMjBlZmYwNTZlNTExZDUwNGIyZTQ5MGYzNzc0YWIyNjBkNmYiCisgICAgICMgYWxsLXBva3ktbGludXgKKyAgICAgU1JDUkVWX3BuLXVwZGF0ZS1yYy5kID0gImVjYTY4MGRkZjI4ZDAyNDk1NDg5NWY1OWEyNDFhNjIyZGQ1NzVjMTEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIG5vdGVzIG9uIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWNvbGxlY3Qtc3JjcmV2czwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnkgZGVmYXVsdCwgb25seSB2YWx1ZXMgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHdhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXJkY29kZWQgKHVzdWFsbHkgd2hlbiA8ZmlsZW5hbWU+QVVUT1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIHVzZWQpIGFyZSByZXBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4tYTwvZmlsZW5hbWU+IG9wdGlvbiB0byBzZWUgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgb3V0cHV0IHN0YXRlbWVudHMgbWlnaHQgbm90IGhhdmUgYW55IGVmZmVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG92ZXJyaWRlcyBhcmUgYXBwbGllZCBlbHNld2hlcmUgaW4gdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBvcHRpb24gdG8gYWRkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JjZXZhcmlhYmxlPC9maWxlbmFtZT4gb3ZlcnJpZGUgdG8gZWFjaCBvdXRwdXQgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHlvdSBuZWVkIHRvIHdvcmsgYXJvdW5kIHRoaXMgcmVzdHJpY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHNjcmlwdCBkb2VzIGFwcGx5IHNwZWNpYWwgaGFuZGxpbmcgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIGZvciBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgc2NyaXB0IGRvZXMgcGxhY2UgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgYmVmb3JlIGVhY2ggc2V0IG9mIHZhbHVlcyB0aGF0IHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRyaXBsZXQgdG8gd2hpY2ggdGhleSBiZWxvbmcgYXMgc2hvd24gYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiwgPGZpbGVuYW1lPmk1ODYtcG9reS1saW51eDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLWhpc3RvcnktaW1hZ2UtaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3RvcnkgSW1hZ2UgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZXMgcHJvZHVjZWQgZm9yIGVhY2ggaW1hZ2UgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbWFnZS1maWxlczo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBkaXJlY3RvcnkgY29udGFpbmluZyBzZWxlY3RlZCBmaWxlcyBmcm9tIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzIGFyZSBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YnVpbGQtaWQudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBIdW1hbi1yZWFkYWJsZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1ldGFkYXRhIHNvdXJjZSByZXZpc2lvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bGwgYnVpbGQgaGVhZGVyIGFzIHByaW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IEJpdEJha2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ki5kb3Q6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3kgZ3JhcGhzIGZvciB0aGUgaW1hZ2UgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCA8ZmlsZW5hbWU+Z3JhcGh2aXo8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmZpbGVzLWluLWltYWdlLnR4dDo8L2ZpbGVuYW1lPgorIAkgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBmaWxlcyBpbiB0aGUgaW1hZ2Ugd2l0aCBwZXJtaXNzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyLCBncm91cCwgc2l6ZSwgYW5kIHN5bWxpbmsgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbWFnZS1pbmZvLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSB0ZXh0IGZpbGUgY29udGFpbmluZyBuYW1lLXZhbHVlIHBhaXJzIHdpdGggaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFib3V0IHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZm9sbG93aW5nIGxpc3RpbmcgZXhhbXBsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBieSBuYW1lIG9ubHkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIG9yZGVyZWQgYnkgc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlcy50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgd2l0aCBmdWxsIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbGVkIHBhY2thZ2UgaW5mb3JtYXRpb24gaXMgYWJsZSB0byBiZSBnYXRoZXJlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQgZXZlbiBpZiBwYWNrYWdlIG1hbmFnZW1lbnQgaXMgZGlzYWJsZWQgZm9yIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiA8ZmlsZW5hbWU+aW1hZ2UtaW5mby50eHQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RSTyA9IHBva3kKKyAgICAgRElTVFJPX1ZFUlNJT04gPSAxLjcKKyAgICAgVVNFUl9DTEFTU0VTID0gYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluaworICAgICBJTUFHRV9DTEFTU0VTID0gaW1hZ2VfdHlwZXMKKyAgICAgSU1BR0VfRkVBVFVSRVMgPSBkZWJ1Zy10d2Vha3MKKyAgICAgSU1BR0VfTElOR1VBUyA9CisgICAgIElNQUdFX0lOU1RBTEwgPSBwYWNrYWdlZ3JvdXAtY29yZS1ib290IHJ1bi1wb3N0aW5zdHMKKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OUyA9CisgICAgIE5PX1JFQ09NTUVOREFUSU9OUyA9CisgICAgIFBBQ0tBR0VfRVhDTFVERSA9CisgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EID0gd3JpdGVfcGFja2FnZV9tYW5pZmVzdDsgbGljZW5zZV9jcmVhdGVfbWFuaWZlc3Q7IFwKKyAgICAgICAgd3JpdGVfaW1hZ2VfbWFuaWZlc3QgOyBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UgOyBcCisgICAgICAgIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2VfaW5zdGFsbGVkIDsgc3NoX2FsbG93X2VtcHR5X3Bhc3N3b3JkOyAgXAorICAgICAgICBwb3N0aW5zdF9lbmFibGVfbG9nZ2luZzsgcm9vdGZzX3VwZGF0ZV90aW1lc3RhbXAgOyBzc2hfZGlzYWJsZV9kbnNfbG9va3VwIDsKKyAgICAgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCA9ICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZWluZm8gOworICAgICBJTUFHRVNJWkUgPSA2OTAwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE90aGVyIHRoYW4gPGZpbGVuYW1lPklNQUdFU0laRTwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUKKyAgICAgICAgICAgICAgICB0b3RhbCBzaXplIG9mIHRoZSBmaWxlcyBpbiB0aGUgaW1hZ2UgaW4gS2J5dGVzLCB0aGUKKyAgICAgICAgICAgICAgICBuYW1lLXZhbHVlIHBhaXJzIGFyZSB2YXJpYWJsZXMgdGhhdCBtYXkgaGF2ZSBpbmZsdWVuY2VkIHRoZQorICAgICAgICAgICAgICAgIGNvbnRlbnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgb2Z0ZW4gdXNlZnVsIHdoZW4geW91IGFyZSB0cnlpbmcgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgd2h5IGEgY2hhbmdlIGluIHRoZSBwYWNrYWdlIG9yIGZpbGUgbGlzdGluZ3MgaGFzIG9jY3VycmVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWJ1aWxkLWhpc3RvcnktdG8tZ2F0aGVyLWltYWdlLWluZm9ybWF0aW9uLW9ubHknPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIEJ1aWxkIEhpc3RvcnkgdG8gR2F0aGVyIEltYWdlIEluZm9ybWF0aW9uIE9ubHk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB5b3UgY2FuIHNlZSwgYnVpbGQgaGlzdG9yeSBwcm9kdWNlcyBpbWFnZSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICBpbmNsdWRpbmcgZGVwZW5kZW5jeSBncmFwaHMsIHNvIHlvdSBjYW4gc2VlIHdoeSBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICB3YXMgcHVsbGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUganVzdCBpbnRlcmVzdGVkIGluIHRoaXMgaW5mb3JtYXRpb24gYW5kIG5vdAorICAgICAgICAgICAgICAgIGludGVyZXN0ZWQgaW4gY29sbGVjdGluZyBzcGVjaWZpYyBwYWNrYWdlIG9yIFNESyBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGVuYWJsZSB3cml0aW5nIG9ubHkgaW1hZ2UgaW5mb3JtYXRpb24gd2l0aG91dAorICAgICAgICAgICAgICAgIGFueSBoaXN0b3J5IGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IgorICAgICBCVUlMREhJU1RPUllfQ09NTUlUID0gIjAiCisgICAgIEJVSUxESElTVE9SWV9GRUFUVVJFUyA9ICJpbWFnZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSGVyZSwgeW91IHNldCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0ZFQVRVUkVTJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gdXNlIHRoZSBpbWFnZSBmZWF0dXJlIG9ubHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtaGlzdG9yeS1zZGstaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3RvcnkgU0RLIEluZm9ybWF0aW9uPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ1aWxkIGhpc3RvcnkgY29sbGVjdHMgc2ltaWxhciBpbmZvcm1hdGlvbiBvbiB0aGUgY29udGVudHMKKyAgICAgICAgICAgICAgICBvZiBTREtzIChlLmcuIDxmaWxlbmFtZT5tZXRhLXRvb2xjaGFpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPmJpdGJha2UgLWMgcG9wdWxhdGVfc2RrIGltYWdlbmFtZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIGFzIGNvbXBhcmVkIHRvIGluZm9ybWF0aW9uIGl0IGNvbGxlY3RzIGZvciBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSBmaWxlcyBwcm9kdWNlZCBmb3IgZWFjaCBTREs6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5maWxlcy1pbi1zZGsudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIFNESyB3aXRoIHBlcm1pc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIsIGdyb3VwLCBzaXplLCBhbmQgc3ltbGluayBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBpbmNsdWRlcyBib3RoIHRoZSBob3N0IGFuZCB0YXJnZXQgcGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zZGstaW5mby50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgdGV4dCBmaWxlIGNvbnRhaW5pbmcgbmFtZS12YWx1ZSBwYWlycyB3aXRoIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhYm91dCB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBmb2xsb3dpbmcgbGlzdGluZyBleGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFwcGVhcnMgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggb2YgdGhlIDxmaWxlbmFtZT5ob3N0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+dGFyZ2V0PC9maWxlbmFtZT4gZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcG9ydGlvbnMgb2YgdGhlIFNESyB0aGF0IHJ1biBvbiB0aGUgaG9zdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQsIHJlc3BlY3RpdmVseToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5kZXBlbmRzLmRvdDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXBlbmRlbmN5IGdyYXBoIGZvciB0aGUgU0RLIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIDxmaWxlbmFtZT5ncmFwaHZpejwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IG5hbWUgb25seS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBvcmRlcmVkIGJ5IHNpemUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2VzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIHdpdGggZnVsbCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgPGZpbGVuYW1lPnNkay1pbmZvLnR4dDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPID0gcG9reQorICAgICBESVNUUk9fVkVSU0lPTiA9IDEuMytzbmFwc2hvdC0yMDEzMDMyNworICAgICBTREtfTkFNRSA9IHBva3ktZ2xpYmMtaTY4Ni1hcm0KKyAgICAgU0RLX1ZFUlNJT04gPSAxLjMrc25hcHNob3QKKyAgICAgU0RLTUFDSElORSA9CisgICAgIFNES0lNQUdFX0ZFQVRVUkVTID0gZGV2LXBrZ3MgZGJnLXBrZ3MKKyAgICAgQkFEX1JFQ09NTUVOREFUSU9OUyA9CisgICAgIFNES1NJWkUgPSAzNTI3MTIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT3RoZXIgdGhhbiA8ZmlsZW5hbWU+U0RLU0laRTwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUKKyAgICAgICAgICAgICAgICB0b3RhbCBzaXplIG9mIHRoZSBmaWxlcyBpbiB0aGUgU0RLIGluIEtieXRlcywgdGhlCisgICAgICAgICAgICAgICAgbmFtZS12YWx1ZSBwYWlycyBhcmUgdmFyaWFibGVzIHRoYXQgbWlnaHQgaGF2ZSBpbmZsdWVuY2VkIHRoZQorICAgICAgICAgICAgICAgIGNvbnRlbnQgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGlzIG9mdGVuIHVzZWZ1bCB3aGVuIHlvdSBhcmUgdHJ5aW5nIHRvCisgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHdoeSBhIGNoYW5nZSBpbiB0aGUgcGFja2FnZSBvciBmaWxlIGxpc3RpbmdzCisgICAgICAgICAgICAgICAgaGFzIG9jY3VycmVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2V4YW1pbmluZy1idWlsZC1oaXN0b3J5LWluZm9ybWF0aW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtaW5pbmcgQnVpbGQgSGlzdG9yeSBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhhbWluZSBidWlsZCBoaXN0b3J5IG91dHB1dCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgb3IKKyAgICAgICAgICAgICAgICBmcm9tIGEgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBvY2N1cnJlZCAoYXNzdW1pbmcgeW91IGhhdmUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0NPTU1JVCc+PGZpbGVuYW1lPkJVSUxESElTVE9SWV9DT01NSVQgPSAiMSI8L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gc2ltcGx5CisgICAgICAgICAgICAgICAgdXNlIGFueSBHaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gdmlldyB0aGUgaGlzdG9yeSBvZgorICAgICAgICAgICAgICAgIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIG9uZSBtZXRob2Q6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgJCBnaXQgbG9nIC1wCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBzaG93CisgICAgICAgICAgICAgICAgY2hhbmdlcyB0aGF0IGFyZSBub3Qgc2lnbmlmaWNhbnQgKGUuZy4gYSBwYWNrYWdlJ3Mgc2l6ZQorICAgICAgICAgICAgICAgIGNoYW5naW5nIGJ5IGEgZmV3IGJ5dGVzKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb21tYW5kLWxpbmUgdG9vbCBjYWxsZWQgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS1kaWZmPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkb2VzIGV4aXN0LCB0aG91Z2gsIHRoYXQgcXVlcmllcyB0aGUgR2l0IHJlcG9zaXRvcnkgYW5kIHByaW50cyBqdXN0CisgICAgICAgICAgICAgICAgdGhlIGRpZmZlcmVuY2VzIHRoYXQgbWlnaHQgYmUgc2lnbmlmaWNhbnQgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIH4vcG9reS9wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYgLiBIRUFEXgorICAgICBDaGFuZ2VzIHRvIGltYWdlcy9xZW11eDg2XzY0L2dsaWJjL2NvcmUtaW1hZ2UtbWluaW1hbCAoZmlsZXMtaW4taW1hZ2UudHh0KToKKyAgICAgICAgL2V0Yy9hbm90aGVycGtnLmNvbmYgd2FzIGFkZGVkCisgICAgICAgIC9zYmluL2Fub3RoZXJwa2cgd2FzIGFkZGVkCisgICAgICAgICogKGluc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCk6CisgICAgICAgICogICBhbm90aGVycGtnIHdhcyBhZGRlZAorICAgICBDaGFuZ2VzIHRvIGltYWdlcy9xZW11eDg2XzY0L2dsaWJjL2NvcmUtaW1hZ2UtbWluaW1hbCAoaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0KToKKyAgICAgICAgYW5vdGhlcnBrZyB3YXMgYWRkZWQKKyAgICAgcGFja2FnZXMvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L3Y4NmQ6IFBBQ0tBR0VTOiBhZGRlZCAidjg2ZC1leHRyYXMiCisgICAgICAgICogUFIgY2hhbmdlZCBmcm9tICJyMCIgdG8gInIxIgorICAgICAgICAqIFBWIGNoYW5nZWQgZnJvbSAiMC4xLjEwIiB0byAiMC4xLjEyIgorICAgICBwYWNrYWdlcy9xZW11eDg2XzY0LXBva3ktbGludXgvdjg2ZC92ODZkOiBQS0dTSVpFIGNoYW5nZWQgZnJvbSAxMTA1NzkgdG8gMTQ0MzgxICgrMzAlKQorICAgICAgICAqIFBSIGNoYW5nZWQgZnJvbSAicjAiIHRvICJyMSIKKyAgICAgICAgKiBQViBjaGFuZ2VkIGZyb20gIjAuMS4xMCIgdG8gIjAuMS4xMiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNlZSBjaGFuZ2VzIHRvIHRoZSBidWlsZCBoaXN0b3J5IHVzaW5nIGEgd2ViIGludGVyZmFjZSwgZm9sbG93CisgICAgICAgICAgICAgICAgdGhlIGluc3RydWN0aW9uIGluIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBoZXJlLgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2J1aWxkaGlzdG9yeS13ZWIvJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhIHNhbXBsZSBzY3JlZW5zaG90IG9mIHRoZSBpbnRlcmZhY2U6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgd2lkdGg9IjEzMCUiIGNvbnRlbnRkZXB0aD0iMTMwJSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3NwZWVkaW5nLXVwLXRoZS1idWlsZCc+CisgICAgPHRpdGxlPlNwZWVkaW5nIFVwIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnVpbGQgdGltZSBjYW4gYmUgYW4gaXNzdWUuCisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBzeXN0ZW0gdXNlcyBzaW1wbGUgY29udHJvbHMgdG8gdHJ5IGFuZCBtYXhpbWl6ZQorICAgICAgICBidWlsZCBlZmZpY2llbmN5LgorICAgICAgICBJbiBnZW5lcmFsLCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzCisgICAgICAgIHJlc3VsdCBpbiB0aGUgbW9zdCBlZmZpY2llbnQgYnVpbGQgdGltZXMgd2hlbiBkZWFsaW5nIHdpdGggc2luZ2xlCisgICAgICAgIHNvY2tldCBzeXN0ZW1zIChpLmUuIGEgc2luZ2xlIENQVSkuCisgICAgICAgIElmIHlvdSBoYXZlIG11bHRpcGxlIENQVXMsIHlvdSBtaWdodCB0cnkgaW5jcmVhc2luZyB0aGUgZGVmYXVsdAorICAgICAgICB2YWx1ZXMgdG8gZ2FpbiBtb3JlIHNwZWVkLgorICAgICAgICBTZWUgdGhlIGRlc2NyaXB0aW9ucyBpbiB0aGUgZ2xvc3NhcnkgZm9yIGVhY2ggdmFyaWFibGUgZm9yIG1vcmUKKyAgICAgICAgaW5mb3JtYXRpb246CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjo8L2xpbms+CisgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgQml0QmFrZSBzaW11bHRhbmVvdXNseSBleGVjdXRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I3Zhci1CQl9OVU1CRVJfUEFSU0VfVEhSRUFEUyc+PGZpbGVuYW1lPkJCX05VTUJFUl9QQVJTRV9USFJFQURTPC9maWxlbmFtZT46PC91bGluaz4KKyAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHRocmVhZHMgQml0QmFrZSB1c2VzIGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+OjwvbGluaz4KKyAgICAgICAgICAgICAgICBFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT46PC9saW5rPgorICAgICAgICAgICAgICAgIEV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbiBvcmRlciB0byBzcGVjaWZ5IHBhcmFsbGVsIGluc3RhbGxhdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgQXMgbWVudGlvbmVkLCB0aGVzZSB2YXJpYWJsZXMgYWxsIHNjYWxlIHRvIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29yCisgICAgICAgIGNvcmVzIGF2YWlsYWJsZSBvbiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICBGb3Igc2luZ2xlIHNvY2tldCBzeXN0ZW1zLCB0aGlzIGF1dG8tc2NhbGluZyBlbnN1cmVzIHRoYXQgdGhlIGJ1aWxkCisgICAgICAgIHN5c3RlbSBmdW5kYW1lbnRhbGx5IHRha2VzIGFkdmFudGFnZSBvZiBwb3RlbnRpYWwgcGFyYWxsZWwgb3BlcmF0aW9ucworICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZSBidWlsZCBtYWNoaW5lJ3MgY2FwYWJpbGl0aWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgYXJlIGFkZGl0aW9uYWwgZmFjdG9ycyB0aGF0IGNhbiBhZmZlY3QgYnVpbGQgc3BlZWQ6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgRmlsZSBzeXN0ZW0gdHlwZToKKyAgICAgICAgICAgICAgICBUaGUgZmlsZSBzeXN0ZW0gdHlwZSB0aGF0IHRoZSBidWlsZCBpcyBiZWluZyBwZXJmb3JtZWQgb24gY2FuCisgICAgICAgICAgICAgICAgYWxzbyBpbmZsdWVuY2UgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPmV4dDQ8L2ZpbGVuYW1lPiBpcyByZWNvbW1lbmRlZCBhcyBjb21wYXJlZAorICAgICAgICAgICAgICAgIHRvIDxmaWxlbmFtZT5leHQyPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkdWUgdG8gPGZpbGVuYW1lPmV4dDQ8L2ZpbGVuYW1lPiBpbXByb3ZlZCBmZWF0dXJlcworICAgICAgICAgICAgICAgIHN1Y2ggYXMgZXh0ZW50cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBEaXNhYmxpbmcgdGhlIHVwZGF0aW5nIG9mIGFjY2VzcyB0aW1lIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5vYXRpbWU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm5vYXRpbWU8L2ZpbGVuYW1lPiBtb3VudCBvcHRpb24gcHJldmVudHMgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGZyb20gdXBkYXRpbmcgZmlsZSBhbmQgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIGEgbG9uZ2VyIGNvbW1pdDoKKyAgICAgICAgICAgICAgICBVc2luZyB0aGUgImNvbW1pdD0iIG1vdW50IG9wdGlvbiBpbmNyZWFzZXMgdGhlIGludGVydmFsCisgICAgICAgICAgICAgICAgaW4gc2Vjb25kcyBiZXR3ZWVuIGRpc2sgY2FjaGUgd3JpdGVzLgorICAgICAgICAgICAgICAgIENoYW5naW5nIHRoaXMgaW50ZXJ2YWwgZnJvbSB0aGUgZml2ZSBzZWNvbmQgZGVmYXVsdCB0bworICAgICAgICAgICAgICAgIHNvbWV0aGluZyBsb25nZXIgaW5jcmVhc2VzIHRoZSByaXNrIG9mIGRhdGEgbG9zcyBidXQgZGVjcmVhc2VzCisgICAgICAgICAgICAgICAgdGhlIG5lZWQgdG8gd3JpdGUgdG8gdGhlIGRpc2ssIHRodXMgaW5jcmVhc2luZyB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDaG9vc2luZyB0aGUgcGFja2FnaW5nIGJhY2tlbmQ6CisgICAgICAgICAgICAgICAgT2YgdGhlIGF2YWlsYWJsZSBwYWNrYWdpbmcgYmFja2VuZHMsIElQSyBpcyB0aGUgZmFzdGVzdC4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHNlbGVjdGluZyBhIHNpbmd1bGFyIHBhY2thZ2luZyBiYWNrZW5kIGFsc28KKyAgICAgICAgICAgICAgICBoZWxwcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+dG1wZnM8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYXMgYSB0ZW1wb3JhcnkgZmlsZSBzeXN0ZW06CisgICAgICAgICAgICAgICAgV2hpbGUgdGhpcyBjYW4gaGVscCBzcGVlZCB1cCB0aGUgYnVpbGQsIHRoZSBiZW5lZml0cyBhcmUKKyAgICAgICAgICAgICAgICBsaW1pdGVkIGR1ZSB0byB0aGUgY29tcGlsZXIgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXBpcGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGdvZXMgdG8gc29tZSBsZW5ndGhzIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5bmMoKTwvZmlsZW5hbWU+IGNhbGxzIGludG8gdGhlCisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0gb24gdGhlIHByaW5jaXBsZSB0aGF0IGlmIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50CisgICAgICAgICAgICAgICAgZmFpbHVyZSwgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGNvbnRlbnRzIGNvdWxkIGVhc2lseSBiZSByZWJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcm0td29yayc+PGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjbGFzczoKKyAgICAgICAgICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgaGFzIHNob3duIHRvIHNwZWVkIHVwIGJ1aWxkcyBkdWUgdG8KKyAgICAgICAgICAgICAgICBzaWduaWZpY2FudGx5IGxvd2VyIGFtb3VudHMgb2YgZGF0YSBzdG9yZWQgaW4gdGhlIGRhdGEKKyAgICAgICAgICAgICAgICBjYWNoZSBhcyB3ZWxsIGFzIG9uIGRpc2suCisgICAgICAgICAgICAgICAgSW5oZXJpdGluZyB0aGlzIGNsYXNzIGFsc28gbWFrZXMgY2xlYW51cCBvZgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBmYXN0ZXIsIGF0IHRoZSBleHBlbnNlIG9mIGJlaW5nIGVhc2lseSBhYmxlIHRvIGRpdmUgaW50byB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBGaWxlIHN5c3RlbSBtYWludGFpbmVycyBoYXZlIHJlY29tbWVuZGVkIHRoYXQgdGhlIGZhc3Rlc3Qgd2F5CisgICAgICAgICAgICAgICAgdG8gY2xlYW4gdXAgbGFyZ2UgbnVtYmVycyBvZiBmaWxlcyBpcyB0byByZWZvcm1hdCBwYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gZGVsZXRlIGZpbGVzIGR1ZSB0byB0aGUgbGluZWFyIG5hdHVyZSBvZiBwYXJ0aXRpb25zLgorICAgICAgICAgICAgICAgIFRoaXMsIG9mIGNvdXJzZSwgYXNzdW1lcyB5b3Ugc3RydWN0dXJlIHRoZSBkaXNrIHBhcnRpdGlvbnMgYW5kCisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW1zIGluIGEgd2F5IHRoYXQgdGhpcyBpcyBwcmFjdGljYWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBBc2lkZSBmcm9tIHRoZSBwcmV2aW91cyBsaXN0LCB5b3Ugc2hvdWxkIGtlZXAgc29tZSB0cmFkZSBvZmZzIGluCisgICAgICAgIG1pbmQgdGhhdCBjYW4gaGVscCB5b3Ugc3BlZWQgdXAgdGhlIGJ1aWxkOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFJlbW92ZSBpdGVtcyBmcm9tCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRoYXQgeW91IG1pZ2h0IG5vdCBuZWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEV4Y2x1ZGUgZGVidWcgc3ltYm9scyBhbmQgb3RoZXIgZGVidWcgaW5mb3JtYXRpb246CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBuZWVkIHRoZXNlIHN5bWJvbHMgYW5kIG90aGVyIGRlYnVnIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgIGRpc2FibGluZyB0aGUgPGZpbGVuYW1lPiotZGJnPC9maWxlbmFtZT4gcGFja2FnZSBnZW5lcmF0aW9uCisgICAgICAgICAgICAgICAgY2FuIHNwZWVkIHVwIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRpc2FibGUgdGhpcyBnZW5lcmF0aW9uIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCc+PGZpbGVuYW1lPklOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBEaXNhYmxlIHN0YXRpYyBsaWJyYXJ5IGdlbmVyYXRpb24gZm9yIHJlY2lwZXMgZGVyaXZlZCBmcm9tCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBzaG93aW5nIGhvdyB0byBkaXNhYmxlIHN0YXRpYworICAgICAgICAgICAgICAgIGxpYnJhcmllcyBhbmQgc3RpbGwgcHJvdmlkZSBhbiBvdmVycmlkZSB0byBoYW5kbGUgZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNUQVRJQ0xJQkNPTkYgPSAiLS1kaXNhYmxlLXN0YXRpYyIKKyAgICAgU1RBVElDTElCQ09ORl9zcWxpdGUzLW5hdGl2ZSA9ICIiCisgICAgIEVYVFJBX09FQ09ORiArPSAiJHtTVEFUSUNMSUJDT05GfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHJlY2lwZXMgbmVlZCBzdGF0aWMgbGlicmFyaWVzIGluIG9yZGVyIHRvIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkgKGUuZy4gPGZpbGVuYW1lPnBzZXVkby1uYXRpdmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIDxmaWxlbmFtZT5zcWxpdGUzLW5hdGl2ZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZXMsIGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBhY2NvdW50IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGtpbmRzIG9mIGV4Y2VwdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBwYWNrYWdlcyBoYXZlIHBhY2thZ2luZyBjb2RlIHRoYXQgYXNzdW1lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW5jZSBvZiB0aGUgc3RhdGljIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBzbywgeW91IG1pZ2h0IG5lZWQgdG8gZXhjbHVkZSB0aGVtIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnR0ZiBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGNkNmI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzgyMDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmEueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2FuczwvZm9udC1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj45Mjg8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTIzNTwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xODM8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjEyODc8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zMjwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAwIi8+PHd4IHc9IjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDU5Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iOTUwIi8+PHd4IHc9Ijc3OSIvPjx3eCB3PSIyNzQiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjM5MCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MzAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg2Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI3NzAiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjU3NSIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNzUxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNjU1Ii8+PHd4IHc9IjU1NyIvPjx3eCB3PSI4NjIiLz48d3ggdz0iNzQ4Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI2MDMiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjY5NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjczMSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iOTg4Ii8+PHd4IHc9IjY4NSIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjM5MCIvPjx3eCB3PSIzMzYiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MTUiLz48d3ggdz0iMzUyIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI1NzkiLz48d3ggdz0iMjc3Ii8+PHd4IHc9Ijk3NCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNDExIi8+PHd4IHc9IjUyMCIvPjx3eCB3PSIzOTIiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI4MTciLz48d3ggdz0iNTkxIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI1MjQiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI3NDgiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjczMSIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1ODkiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI5NzQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjgzMyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUxNyIvPjx3eCB3PSI2NzMiLz48d3ggdz0iNzU2Ii8+PHd4IHc9IjU4OCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNDcxIi8+PHd4IHc9IjQ3MSIvPjx3eCB3PSI3NjQiLz48d3ggdz0iOTgxIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI1MzAiLz48d3ggdz0iNDAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2NjgiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSIxMDY5Ii8+PHd4IHc9IjEwMjIiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjUxOCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI0OTQiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSIxNjYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjM5OSIvPjx3eCB3PSIzOTkiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSI1MDAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI1MTgiLz48d3ggdz0iMTM0MSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzg3Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjczMSIvPjx3eCB3PSIyNzciLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjU2MiIvPjx3eCB3PSIyODQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iNTI0Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNjA0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDAwIi8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI5NjkiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PGtlcm5pbmcga3B4MT0iMjQ2Ij48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNSI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDMiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTYiPjxwYWlyIGtlcm49IjM2IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIzNiIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iMzYiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSI1NSIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMjYiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTEyIj48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMyI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjUxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4NyI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTQ0Ij48cGFpciBrZXJuPSItNDAiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTkiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTUiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzMiPjxwYWlyIGtlcm49IjMxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTYwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0OSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjQiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE2OSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49IjczIiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjAxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNjAiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODUiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iNDEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI2MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzQiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTAwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMiI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yNjIiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjEyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iNTciLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1OCI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgyIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODYiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3NSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEwMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMjkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NyI+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTg2IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTgxIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDkiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIwIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjQ5Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIyNyI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xNjAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTA0Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTk5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTQiPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTgwIj48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MyIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xODgiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjUxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI1MyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMjM2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MyI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNDAiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMzciPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzMiPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjExIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzAiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUyIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTI1Ij48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MiI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItODYiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExNSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MCI+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTEwNCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTUiPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9Ijg2Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjI1MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjIyOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE1Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyOSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NSI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3MyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE5NyI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii05NSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzYiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTIiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijg5Ij48cGFpciBrZXJuPSItNzciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMTA0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjEzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTA0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC50dGYgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTY1NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzMxMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vQmQueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyBtZXRyaWNzLXZlcnNpb249IjIiIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zTW9uby1Cb2xkPC9mb250LW5hbWU+PGZ1bGwtbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8gQm9sZDwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xOTwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+NjA1PC9yaWdodD48dG9wPjkyODwvdG9wPjwvYmJveD48ZmxhZ3M+MzQ8L2ZsYWdzPjxzdGVtdj4wPC9zdGVtdj48aXRhbGljYW5nbGU+MDwvaXRhbGljYW5nbGU+PHN1YnR5cGU+VFlQRTA8L3N1YnR5cGU+PG11bHRpYnl0ZS1leHRyYXM+PGNpZC10eXBlPkNJREZvbnRUeXBlMjwvY2lkLXR5cGU+PGRlZmF1bHQtd2lkdGg+MDwvZGVmYXVsdC13aWR0aD48YmZyYW5nZXM+PGJmIGdpPSIzIiB1ZT0iMTI2IiB1cz0iMzIiLz48YmYgZ2k9IjE3MiIgdWU9IjE2MCIgdXM9IjE2MCIvPjxiZiBnaT0iMTYzIiB1ZT0iMTYxIiB1cz0iMTYxIi8+PGJmIGdpPSIxMzIiIHVlPSIxNjMiIHVzPSIxNjIiLz48YmYgZ2k9IjE4OSIgdWU9IjE2NCIgdXM9IjE2NCIvPjxiZiBnaT0iMTUwIiB1ZT0iMTY1IiB1cz0iMTY1Ii8+PGJmIGdpPSIyMzEiIHVlPSIxNjYiIHVzPSIxNjYiLz48YmYgZ2k9IjEzNCIgdWU9IjE2NyIgdXM9IjE2NyIvPjxiZiBnaT0iMTQyIiB1ZT0iMTY4IiB1cz0iMTY4Ii8+PGJmIGdpPSIxMzkiIHVlPSIxNjkiIHVzPSIxNjkiLz48YmYgZ2k9IjE1NyIgdWU9IjE3MCIgdXM9IjE3MCIvPjxiZiBnaT0iMTY5IiB1ZT0iMTcxIiB1cz0iMTcxIi8+PGJmIGdpPSIxNjQiIHVlPSIxNzIiIHVzPSIxNzIiLz48YmYgZ2k9IjI1NiIgdWU9IjE3MyIgdXM9IjE3MyIvPjxiZiBnaT0iMTM4IiB1ZT0iMTc0IiB1cz0iMTc0Ii8+PGJmIGdpPSIyMTciIHVlPSIxNzUiIHVzPSIxNzUiLz48YmYgZ2k9IjEzMSIgdWU9IjE3NiIgdXM9IjE3NiIvPjxiZiBnaT0iMTQ3IiB1ZT0iMTc3IiB1cz0iMTc3Ii8+PGJmIGdpPSIyNDEiIHVlPSIxNzkiIHVzPSIxNzgiLz48YmYgZ2k9IjE0MSIgdWU9IjE4MCIgdXM9IjE4MCIvPjxiZiBnaT0iMTUxIiB1ZT0iMTgxIiB1cz0iMTgxIi8+PGJmIGdpPSIxMzYiIHVlPSIxODIiIHVzPSIxODIiLz48YmYgZ2k9IjE5NSIgdWU9IjE4MyIgdXM9IjE4MyIvPjxiZiBnaT0iMjIxIiB1ZT0iMTg0IiB1cz0iMTg0Ii8+PGJmIGdpPSIyNDAiIHVlPSIxODUiIHVzPSIxODUiLz48YmYgZ2k9IjE1OCIgdWU9IjE4NiIgdXM9IjE4NiIvPjxiZiBnaT0iMTcwIiB1ZT0iMTg3IiB1cz0iMTg3Ii8+PGJmIGdpPSIyNDMiIHVlPSIxOTAiIHVzPSIxODgiLz48YmYgZ2k9IjE2MiIgdWU9IjE5MSIgdXM9IjE5MSIvPjxiZiBnaT0iMTczIiB1ZT0iMTkyIiB1cz0iMTkyIi8+PGJmIGdpPSIyMDEiIHVlPSIxOTMiIHVzPSIxOTMiLz48YmYgZ2k9IjE5OSIgdWU9IjE5NCIgdXM9IjE5NCIvPjxiZiBnaT0iMTc0IiB1ZT0iMTk1IiB1cz0iMTk1Ii8+PGJmIGdpPSI5OCIgdWU9IjE5NyIgdXM9IjE5NiIvPjxiZiBnaT0iMTQ0IiB1ZT0iMTk4IiB1cz0iMTk4Ii8+PGJmIGdpPSIxMDAiIHVlPSIxOTkiIHVzPSIxOTkiLz48YmYgZ2k9IjIwMyIgdWU9IjIwMCIgdXM9IjIwMCIvPjxiZiBnaT0iMTAxIiB1ZT0iMjAxIiB1cz0iMjAxIi8+PGJmIGdpPSIyMDAiIHVlPSIyMDIiIHVzPSIyMDIiLz48YmYgZ2k9IjIwMiIgdWU9IjIwMyIgdXM9IjIwMyIvPjxiZiBnaT0iMjA3IiB1ZT0iMjA0IiB1cz0iMjA0Ii8+PGJmIGdpPSIyMDQiIHVlPSIyMDciIHVzPSIyMDUiLz48YmYgZ2k9IjIzMiIgdWU9IjIwOCIgdXM9IjIwOCIvPjxiZiBnaT0iMTAyIiB1ZT0iMjA5IiB1cz0iMjA5Ii8+PGJmIGdpPSIyMTAiIHVlPSIyMTAiIHVzPSIyMTAiLz48YmYgZ2k9IjIwOCIgdWU9IjIxMiIgdXM9IjIxMSIvPjxiZiBnaT0iMTc1IiB1ZT0iMjEzIiB1cz0iMjEzIi8+PGJmIGdpPSIxMDMiIHVlPSIyMTQiIHVzPSIyMTQiLz48YmYgZ2k9IjIzOSIgdWU9IjIxNSIgdXM9IjIxNSIvPjxiZiBnaT0iMTQ1IiB1ZT0iMjE2IiB1cz0iMjE2Ii8+PGJmIGdpPSIyMTMiIHVlPSIyMTciIHVzPSIyMTciLz48YmYgZ2k9IjIxMSIgdWU9IjIxOSIgdXM9IjIxOCIvPjxiZiBnaT0iMTA0IiB1ZT0iMjIwIiB1cz0iMjIwIi8+PGJmIGdpPSIyMzQiIHVlPSIyMjEiIHVzPSIyMjEiLz48YmYgZ2k9IjIzNiIgdWU9IjIyMiIgdXM9IjIyMiIvPjxiZiBnaT0iMTM3IiB1ZT0iMjIzIiB1cz0iMjIzIi8+PGJmIGdpPSIxMDYiIHVlPSIyMjQiIHVzPSIyMjQiLz48YmYgZ2k9IjEwNSIgdWU9IjIyNSIgdXM9IjIyNSIvPjxiZiBnaT0iMTA3IiB1ZT0iMjI2IiB1cz0iMjI2Ii8+PGJmIGdpPSIxMDkiIHVlPSIyMjciIHVzPSIyMjciLz48YmYgZ2k9IjEwOCIgdWU9IjIyOCIgdXM9IjIyOCIvPjxiZiBnaT0iMTEwIiB1ZT0iMjI5IiB1cz0iMjI5Ii8+PGJmIGdpPSIxNjAiIHVlPSIyMzAiIHVzPSIyMzAiLz48YmYgZ2k9IjExMSIgdWU9IjIzMSIgdXM9IjIzMSIvPjxiZiBnaT0iMTEzIiB1ZT0iMjMyIiB1cz0iMjMyIi8+PGJmIGdpPSIxMTIiIHVlPSIyMzMiIHVzPSIyMzMiLz48YmYgZ2k9IjExNCIgdWU9IjIzNSIgdXM9IjIzNCIvPjxiZiBnaT0iMTE3IiB1ZT0iMjM2IiB1cz0iMjM2Ii8+PGJmIGdpPSIxMTYiIHVlPSIyMzciIHVzPSIyMzciLz48YmYgZ2k9IjExOCIgdWU9IjIzOSIgdXM9IjIzOCIvPjxiZiBnaT0iMjMzIiB1ZT0iMjQwIiB1cz0iMjQwIi8+PGJmIGdpPSIxMjAiIHVlPSIyNDEiIHVzPSIyNDEiLz48YmYgZ2k9IjEyMiIgdWU9IjI0MiIgdXM9IjI0MiIvPjxiZiBnaT0iMTIxIiB1ZT0iMjQzIiB1cz0iMjQzIi8+PGJmIGdpPSIxMjMiIHVlPSIyNDQiIHVzPSIyNDQiLz48YmYgZ2k9IjEyNSIgdWU9IjI0NSIgdXM9IjI0NSIvPjxiZiBnaT0iMTI0IiB1ZT0iMjQ2IiB1cz0iMjQ2Ii8+PGJmIGdpPSIxODQiIHVlPSIyNDciIHVzPSIyNDciLz48YmYgZ2k9IjE2MSIgdWU9IjI0OCIgdXM9IjI0OCIvPjxiZiBnaT0iMTI3IiB1ZT0iMjQ5IiB1cz0iMjQ5Ii8+PGJmIGdpPSIxMjYiIHVlPSIyNTAiIHVzPSIyNTAiLz48YmYgZ2k9IjEyOCIgdWU9IjI1MiIgdXM9IjI1MSIvPjxiZiBnaT0iMjM1IiB1ZT0iMjUzIiB1cz0iMjUzIi8+PGJmIGdpPSIyMzciIHVlPSIyNTQiIHVzPSIyNTQiLz48YmYgZ2k9IjE4NiIgdWU9IjI1NSIgdXM9IjI1NSIvPjxiZiBnaT0iMjUxIiB1ZT0iMjYzIiB1cz0iMjYyIi8+PGJmIGdpPSIyNTMiIHVlPSIyNjkiIHVzPSIyNjgiLz48YmYgZ2k9IjAiIHVlPSIyNzAiIHVzPSIyNzAiLz48YmYgZ2k9IjAiIHVlPSIyNzEiIHVzPSIyNzEiLz48YmYgZ2k9IjAiIHVlPSIyNzIiIHVzPSIyNzIiLz48YmYgZ2k9IjI1NSIgdWU9IjI3MyIgdXM9IjI3MyIvPjxiZiBnaT0iMjQ2IiB1ZT0iMjg3IiB1cz0iMjg2Ii8+PGJmIGdpPSIyNDgiIHVlPSIzMDQiIHVzPSIzMDQiLz48YmYgZ2k9IjIxNCIgdWU9IjMwNSIgdXM9IjMwNSIvPjxiZiBnaT0iMjI1IiB1ZT0iMzIyIiB1cz0iMzIxIi8+PGJmIGdpPSIxNzYiIHVlPSIzMzkiIHVzPSIzMzgiLz48YmYgZ2k9IjI0OSIgdWU9IjM1MSIgdXM9IjM1MCIvPjxiZiBnaT0iMjI3IiB1ZT0iMzUzIiB1cz0iMzUyIi8+PGJmIGdpPSIxODciIHVlPSIzNzYiIHVzPSIzNzYiLz48YmYgZ2k9IjIyOSIgdWU9IjM4MiIgdXM9IjM4MSIvPjxiZiBnaT0iMTY2IiB1ZT0iNDAyIiB1cz0iNDAyIi8+PGJmIGdpPSIyMTUiIHVlPSI3MTAiIHVzPSI3MTAiLz48YmYgZ2k9IjIyNCIgdWU9IjcxMSIgdXM9IjcxMSIvPjxiZiBnaT0iMjE4IiB1ZT0iNzMwIiB1cz0iNzI4Ii8+PGJmIGdpPSIyMjMiIHVlPSI3MzEiIHVzPSI3MzEiLz48YmYgZ2k9IjIxNiIgdWU9IjczMiIgdXM9IjczMiIvPjxiZiBnaT0iMjIyIiB1ZT0iNzMzIiB1cz0iNzMzIi8+PGJmIGdpPSIxNTkiIHVlPSI5MzciIHVzPSI5MzciLz48YmYgZ2k9IjE1NSIgdWU9Ijk2MCIgdXM9Ijk2MCIvPjxiZiBnaT0iMTc4IiB1ZT0iODIxMiIgdXM9IjgyMTEiLz48YmYgZ2k9IjAiIHVlPSI4MjEzIiB1cz0iODIxMyIvPjxiZiBnaT0iMCIgdWU9IjgyMTQiIHVzPSI4MjE0Ii8+PGJmIGdpPSIwIiB1ZT0iODIxNSIgdXM9IjgyMTUiLz48YmYgZ2k9IjE4MiIgdWU9IjgyMTciIHVzPSI4MjE2Ii8+PGJmIGdpPSIxOTYiIHVlPSI4MjE4IiB1cz0iODIxOCIvPjxiZiBnaT0iMCIgdWU9IjgyMTkiIHVzPSI4MjE5Ii8+PGJmIGdpPSIxODAiIHVlPSI4MjIxIiB1cz0iODIyMCIvPjxiZiBnaT0iMTk3IiB1ZT0iODIyMiIgdXM9IjgyMjIiLz48YmYgZ2k9IjAiIHVlPSI4MjIzIiB1cz0iODIyMyIvPjxiZiBnaT0iMTMwIiB1ZT0iODIyNCIgdXM9IjgyMjQiLz48YmYgZ2k9IjE5NCIgdWU9IjgyMjUiIHVzPSI4MjI1Ii8+PGJmIGdpPSIxMzUiIHVlPSI4MjI2IiB1cz0iODIyNiIvPjxiZiBnaT0iMCIgdWU9IjgyMjciIHVzPSI4MjI3Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOCIgdXM9IjgyMjgiLz48YmYgZ2k9IjAiIHVlPSI4MjI5IiB1cz0iODIyOSIvPjxiZiBnaT0iMTcxIiB1ZT0iODIzMCIgdXM9IjgyMzAiLz48YmYgZ2k9IjE5OCIgdWU9IjgyNDAiIHVzPSI4MjQwIi8+PGJmIGdpPSIxOTAiIHVlPSI4MjUwIiB1cz0iODI0OSIvPjxiZiBnaT0iMjU4IiB1ZT0iODM2NCIgdXM9IjgzNjQiLz48YmYgZ2k9IjE0MCIgdWU9Ijg0ODIiIHVzPSI4NDgyIi8+PGJmIGdpPSIxNTIiIHVlPSI4NzA2IiB1cz0iODcwNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MDciIHVzPSI4NzA3Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOCIgdXM9Ijg3MDgiLz48YmYgZ2k9IjAiIHVlPSI4NzA5IiB1cz0iODcwOSIvPjxiZiBnaT0iMTY4IiB1ZT0iODcxMCIgdXM9Ijg3MTAiLz48YmYgZ2k9IjE1NCIgdWU9Ijg3MTkiIHVzPSI4NzE5Ii8+PGJmIGdpPSIwIiB1ZT0iODcyMCIgdXM9Ijg3MjAiLz48YmYgZ2k9IjE1MyIgdWU9Ijg3MjEiIHVzPSI4NzIxIi8+PGJmIGdpPSIyMzgiIHVlPSI4NzIyIiB1cz0iODcyMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjMiIHVzPSI4NzIzIi8+PGJmIGdpPSIwIiB1ZT0iODcyNCIgdXM9Ijg3MjQiLz48YmYgZ2k9IjE4OCIgdWU9Ijg3MjUiIHVzPSI4NzI1Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNiIgdXM9Ijg3MjYiLz48YmYgZ2k9IjAiIHVlPSI4NzI3IiB1cz0iODcyNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjgiIHVzPSI4NzI4Ii8+PGJmIGdpPSIyNTciIHVlPSI4NzI5IiB1cz0iODcyOSIvPjxiZiBnaT0iMTY1IiB1ZT0iODczMCIgdXM9Ijg3MzAiLz48YmYgZ2k9IjAiIHVlPSI4NzMxIiB1cz0iODczMSIvPjxiZiBnaT0iMCIgdWU9Ijg3MzIiIHVzPSI4NzMyIi8+PGJmIGdpPSIwIiB1ZT0iODczMyIgdXM9Ijg3MzMiLz48YmYgZ2k9IjE0NiIgdWU9Ijg3MzQiIHVzPSI4NzM0Ii8+PGJmIGdpPSIxNTYiIHVlPSI4NzQ3IiB1cz0iODc0NyIvPjxiZiBnaT0iMTY3IiB1ZT0iODc3NiIgdXM9Ijg3NzYiLz48YmYgZ2k9IjE0MyIgdWU9Ijg4MDAiIHVzPSI4ODAwIi8+PGJmIGdpPSIwIiB1ZT0iODgwMSIgdXM9Ijg4MDEiLz48YmYgZ2k9IjAiIHVlPSI4ODAyIiB1cz0iODgwMiIvPjxiZiBnaT0iMCIgdWU9Ijg4MDMiIHVzPSI4ODAzIi8+PGJmIGdpPSIxNDgiIHVlPSI4ODA1IiB1cz0iODgwNCIvPjxiZiBnaT0iMTg1IiB1ZT0iOTY3NCIgdXM9Ijk2NzQiLz48YmYgZ2k9IjE5MiIgdWU9IjY0MjU4IiB1cz0iNjQyNTciLz48YmYgZ2k9IjAiIHVlPSI2NTUzNSIgdXM9IjY1NTM1Ii8+PC9iZnJhbmdlcz48Y2lkLXdpZHRocyBzdGFydC1pbmRleD0iMCI+PHd4IHc9IjYwMiIvPjx3eCB3PSIwIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48L2ZvbnQtbWV0cmljcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8udHRmIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzlmMGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8ueG1sIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBhODY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxmb250LW1ldHJpY3MgbWV0cmljcy12ZXJzaW9uPSIyIiB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2Fuc01vbm8tUm9tYW48L2ZvbnQtbmFtZT48ZnVsbC1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi00PC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD42MDU8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zNDwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAyIi8+PHd4IHc9IjAiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyMWQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsCkBAIC0wLDAgKzEsMzkgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKworICA8eHNsOnRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9Ii4iLz4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6ZDpzZWN0aW9uIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoYW5jZXN0b3I6OmQ6c2VjdGlvbikrMSIvPgorICAgICAgICA8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3Q1Ij42PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpzZWN0NCI+NTwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6c2VjdDMiPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3QyIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpzZWN0MSI+MjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDplbGVtZW50IG5hbWU9Imh7JGxldmVsKzF9IiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPnRpdGxlPC94c2w6YXR0cmlidXRlPgorICAgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyA9IDAiPgorICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYW5jaG9yIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb25kaXRpb25hbCIgc2VsZWN0PSIwIi8+CisgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8L3hzbDppZj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG5vZGUiIG1vZGU9Im9iamVjdC50aXRsZS5tYXJrdXAiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC94c2w6ZWxlbWVudD4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyNjU5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wKQEAgLTAsMCArMSwyNCBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorICAKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkaXZpc2lvbi50aXRsZSI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9Ii4iLz4KKyAgICAKKyAgICA8aDE+CisgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+dGl0bGU8L3hzbDphdHRyaWJ1dGU+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYW5jaG9yIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNvbmRpdGlvbmFsIiBzZWxlY3Q9IjAiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRub2RlIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwvaDE+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kcmFmdC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZHJhZnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMDUxYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZHJhZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9lbWJlZGRlZF92aWRlby54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZW1iZWRkZWRfdmlkZW8ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjMzYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZW1iZWRkZWRfdmlkZW8ueHNsCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayI+CisKKyAgIDx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIgLz4KKworICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Q6Y2hhcHRlci9kOnNlY3Rpb24vZDptZWRpYW9iamVjdCI+CisgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iLiI+CisgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZpZF91cmwiPgorICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZDp2aWRlb29iamVjdC9kOnZpZGVvZGF0YS9AZmlsZXJlZiIgLz4KKyAgICAgICAgIDwveHNsOnZhcmlhYmxlPgorICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IGF1dG8iPgorICAgICAgICAgICAgPG9iamVjdCB0eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIgd2lkdGg9IjY0MCIgaGVpZ2h0PSI0MjAiIGRhdGE9InskdmlkX3VybH0/Y29sb3IyPUZCRTlFQyZhbXA7c2hvd3NlYXJjaD0wJmFtcDt2ZXJzaW9uPTMmYW1wO21vZGVzdGJyYW5kaW5nPTEmYW1wO2ZzPTEiPgorICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0ieyR2aWRfdXJsfT9jb2xvcjI9RkJFOUVDJmFtcDtzaG93c2VhcmNoPTAmYW1wO3ZlcnNpb249MyZhbXA7bW9kZXN0YnJhbmRpbmc9MSZhbXA7ZnM9MSIgLz4KKyAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhbGxvd0Z1bGxTY3JlZW4iIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFsbG93c2NyaXB0YWNjZXNzIiB2YWx1ZT0iYWx3YXlzIiAvPgorICAgICAgICAgICAgPC9vYmplY3Q+CisgICAgICAgICA8L2Rpdj4KKyAgICAgIDwveHNsOmZvci1lYWNoPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljYzVjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9mb3AtY29uZmlnLnhtbApAQCAtMCwwICsxLDU4IEBACis8Zm9wIHZlcnNpb249IjEuMCI+CisKKyAgPCEtLSBTdHJpY3QgdXNlciBjb25maWd1cmF0aW9uIC0tPgorICA8c3RyaWN0LWNvbmZpZ3VyYXRpb24+dHJ1ZTwvc3RyaWN0LWNvbmZpZ3VyYXRpb24+CisKKyAgPCEtLSBTdHJpY3QgRk8gdmFsaWRhdGlvbiAtLT4KKyAgPHN0cmljdC12YWxpZGF0aW9uPnRydWU8L3N0cmljdC12YWxpZGF0aW9uPgorCisgICA8IS0tCisgICAgU2V0IHRoZSBiYXNlRGlyIHNvIGNvbW1vbi9vcGVuZWRoYW5kLnN2ZyByZWZlcmVuY2VzIGluIHBsYW5zIHN0aWxsCisgICAgd29yayBvay4gTm90ZSwgcmVsYXRpdmUgZmlsZSByZWZlcmVuY2VzIHRvIGN1cnJlbnQgZGlyIHNob3VsZCBzdGlsbCB3b3JrLgorICAgIC0tPgkKKyAgPGJhc2U+Li4vdGVtcGxhdGU8L2Jhc2U+CisgIDxmb250LWJhc2U+Li4vdGVtcGxhdGU8L2ZvbnQtYmFzZT4KKyAKKyAgPCEtLSBTb3VyY2UgcmVzb2x1dGlvbiBpbiBkcGkgKGRvdHMvcGl4ZWxzIHBlciBpbmNoKSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICAgc2l6ZSBvZiBwaXhlbHMgaW4gU1ZHIGFuZCBiaXRtYXAgaW1hZ2VzLCBkZWZhdWx0OiA3MmRwaSAtLT4KKyAgPCEtLSA8c291cmNlLXJlc29sdXRpb24+NzI8L3NvdXJjZS1yZXNvbHV0aW9uPiAtLT4KKyAgPCEtLSBUYXJnZXQgcmVzb2x1dGlvbiBpbiBkcGkgKGRvdHMvcGl4ZWxzIHBlciBpbmNoKSBmb3Igc3BlY2lmeWluZyB0aGUKKyAgICAgICB0YXJnZXQgcmVzb2x1dGlvbiBmb3IgZ2VuZXJhdGVkIGJpdG1hcHMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDx0YXJnZXQtcmVzb2x1dGlvbj43MjwvdGFyZ2V0LXJlc29sdXRpb24+IC0tPgorIAorICA8IS0tIGRlZmF1bHQgcGFnZS1oZWlnaHQgYW5kIHBhZ2Utd2lkdGgsIGluIGNhc2UKKyAgICAgICB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYXV0byAtLT4KKyAgPGRlZmF1bHQtcGFnZS1zZXR0aW5ncyBoZWlnaHQ9IjExaW4iIHdpZHRoPSI4LjI2aW4iLz4gCisgCisgIDwhLS0gPHVzZS1jYWNoZT5mYWxzZTwvdXNlLWNhY2hlPiAtLT4KKyAKKyAgPHJlbmRlcmVycz4KKyAgICA8cmVuZGVyZXIgbWltZT0iYXBwbGljYXRpb24vcGRmIj4KKyAgICAgIDxmb250cz4KKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYU1vbm8ueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYU1vbm8udHRmIj4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFtb25vIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYU1vQmQueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYU1vQmQudHRmIj4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFtb25vIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgPC9mb250PgorCisgICAgICAgIDxmb250ICBtZXRyaWNzLWZpbGU9IlZlcmEueG1sIgorICAgICAgICAgICAgICAga2VybmluZz0ieWVzIiAKKyAgICAgICAgICAgICAgIGVtYmVkLXVybD0iVmVyYS50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJib2xkIi8+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Iml0YWxpYyIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgPC9mb250PgorICAgICAgICAKKyAgICAgICAgPGF1dG8tZGV0ZWN0Lz4KKyAgICAgIDwvZm9udHM+CisgICAgPC9yZW5kZXJlcj4KKyAgPC9yZW5kZXJlcnM+Cis8L2ZvcD4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTVlNjk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wKQEAgLTAsMCArMSwyMSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorICAKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYWwub2JqZWN0LmhlYWRpbmciPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ib2JqZWN0IiBzZWxlY3Q9Ii4iLz4KKyAgICA8eHNsOnBhcmFtIG5hbWU9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG9iamVjdCIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICA8L3hzbDpwYXJhbT4KKyAgICA8cCBjbGFzcz0idGl0bGUiPgorICAgICAgPGI+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHRpdGxlIi8+PC9iPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRvYmplY3QiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9wPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmNTgxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApAQCAtMCwwICsxLDE0IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIg0KKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayINCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCisNCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Imdsb3NzZW50cnkvZ2xvc3N0ZXJtIj4NCisgICAgPHhzbDphcHBseS1pbXBvcnRzLz4NCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9IDAiPg0KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPg0KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLi4iLz4NCisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICA8L3hzbDppZj4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL29oYW5kLWNvbG9yLnN2ZyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9vaGFuZC1jb2xvci5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyZmY5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9vaGFuZC1jb2xvci5zdmcKQEAgLTAsMCArMSwxNTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cis8c3ZnCisgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCisgICB4bWxuczpjYz0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvIgorICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgorICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKKyAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgorICAgd2lkdGg9IjE0MS4xNzk5OSIKKyAgIGhlaWdodD0iNTUuMzQiCisgICBpZD0ic3ZnMjIwNyIKKyAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCisgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ1IgorICAgdmVyc2lvbj0iMS4wIgorICAgc29kaXBvZGk6ZG9jbmFtZT0ib2hhbmQtY29sb3Iuc3ZnIgorICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiCisgICBzb2RpcG9kaTpkb2NiYXNlPSIvaG9tZS9tYWxsdW0vUHJvamVjdHMvYWRtaW4vb2gtZG9jLXRvb2xzL2NvbW1vbiIKKyAgIHNvZGlwb2RpOm1vZGlmaWVkPSJ0cnVlIj4KKyAgPGRlZnMKKyAgICAgaWQ9ImRlZnMzIiAvPgorICA8c29kaXBvZGk6bmFtZWR2aWV3CisgICAgIGlkPSJiYXNlIgorICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCisgICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgorICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCisgICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCisgICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCisgICAgIGlua3NjYXBlOnpvb209IjEuMiIKKyAgICAgaW5rc2NhcGU6Y3g9IjE2MCIKKyAgICAgaW5rc2NhcGU6Y3k9IjE0Ni4yMTE4OSIKKyAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgorICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCisgICAgIGhlaWdodD0iNTUuMzRweCIKKyAgICAgd2lkdGg9IjE0MS4xOHB4IgorICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9Ijc3MiIKKyAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNTgxIgorICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNSIKKyAgICAgaW5rc2NhcGU6d2luZG93LXk9IjQ4IiAvPgorICA8bWV0YWRhdGEKKyAgICAgaWQ9Im1ldGFkYXRhMjIxMSI+CisgICAgPHJkZjpSREY+CisgICAgICA8Y2M6V29yaworICAgICAgICAgcmRmOmFib3V0PSIiPgorICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KKyAgICAgICAgPGRjOnR5cGUKKyAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KKyAgICAgIDwvY2M6V29yaz4KKyAgICA8L3JkZjpSREY+CisgIDwvbWV0YWRhdGE+CisgIDxnCisgICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgorICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgorICAgICBpZD0ibGF5ZXIxIj4KKyAgICA8ZworICAgICAgIGlkPSJnMjA5NCIKKyAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvbWFsbHVtL0Rlc2t0b3AvZzIxMjYucG5nIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIzMTIuNzE4NDEiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjMxMi43MTg0MSIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjU5NTQ3NjcsMCwwLDAuNTk1NDc2NywzMS43OTMwNTgsLTE4LjQ3MTA1MikiPgorICAgICAgPGcKKyAgICAgICAgIGlkPSJnMTkiCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIj4KKyAgICAgICAgPHBhdGgKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgICAgaWQ9InBhdGgyMSIKKyAgICAgICAgICAgZD0iTSA0OC42OTMsNTAuNjMzIEMgNDAuMjgyLDUwLjYzMyAzMy40MzksNTcuNDc3IDMzLjQzOSw2NS44ODggTCAzMy40MzksODEuMTQyIEwgNDEuMDY2LDgxLjE0MiBMIDQxLjA2Niw2NS44ODggQyA0MS4wNjYsNjEuNjg0IDQ0LjQ4Niw1OC4yNjEgNDguNjkyLDU4LjI2MSBDIDUyLjg5Nyw1OC4yNjEgNTYuMzIsNjEuNjg0IDU2LjMyLDY1Ljg4OCBDIDU2LjMyLDcwLjA5MyA1Mi44OTcsNzMuNTE2IDQ4LjY5Miw3My41MTYgQyA0NS42NzcsNzMuNTE2IDQzLjA2NSw3MS43NTYgNDEuODI4LDY5LjIxMSBMIDQxLjgyOCw3OS41MDQgQyA0My44OTIsODAuNTQ5IDQ2LjIyNCw4MS4xNDIgNDguNjkyLDgxLjE0MiBDIDU3LjEwMyw4MS4xNDIgNjMuOTQ3LDc0LjMgNjMuOTQ3LDY1Ljg4OCBDIDYzLjk0OCw1Ny40NzcgNTcuMTA0LDUwLjYzMyA0OC42OTMsNTAuNjMzIHogIiAvPgorICAgICAgPC9nPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDIzIgorICAgICAgICAgZD0iTSAxOC40ODYsNTAuNTU3IEMgMjYuOTQyLDUwLjU1NyAzMy44MTksNTcuNDM1IDMzLjgxOSw2NS44ODggQyAzMy44MTksNzQuMzQ0IDI2Ljk0Miw4MS4yMjMgMTguNDg2LDgxLjIyMyBDIDEwLjAzMiw4MS4yMjMgMy4xNTIsNzQuMzQ0IDMuMTUyLDY1Ljg4OCBDIDMuMTUyLDU3LjQzNSAxMC4wMzIsNTAuNTU3IDE4LjQ4Niw1MC41NTcgeiBNIDE4LjQ4Niw3My41NTYgQyAyMi43MTMsNzMuNTU2IDI2LjE1Myw3MC4xMTggMjYuMTUzLDY1Ljg4OCBDIDI2LjE1Myw2MS42NjEgMjIuNzEzLDU4LjIyMiAxOC40ODYsNTguMjIyIEMgMTQuMjU4LDU4LjIyMiAxMC44MTksNjEuNjYxIDEwLjgxOSw2NS44ODggQyAxMC44Miw3MC4xMTcgMTQuMjU5LDczLjU1NiAxOC40ODYsNzMuNTU2IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDI1IgorICAgICAgICAgZD0iTSA5NC4wNzQsMTA3LjQ2NSBMIDk0LjA3NCw5Ni4wMTYgQyA5NC4wNzQsODcuNjA1IDg3LjIzMyw4MC43NjMgNzguODIyLDgwLjc2MyBDIDcwLjQxLDgwLjc2MyA2My41NjcsODcuNjA1IDYzLjU2Nyw5Ni4wMTYgQyA2My41NjcsMTA0LjQyNyA3MC40MSwxMTEuMjY5IDc4LjgyMiwxMTEuMjY5IEMgODEuMjg5LDExMS4yNjkgODMuNjIxLDExMC42NzYgODUuNjg1LDEwOS42MzEgTCA4NS42ODUsOTkuMzM5IEMgODQuNDQ4LDEwMS44ODUgODEuODM2LDEwMy42NDQgNzguODIyLDEwMy42NDQgQyA3NC42MTUsMTAzLjY0NCA3MS4xOTQsMTAwLjIyMSA3MS4xOTQsOTYuMDE2IEMgNzEuMTk0LDkxLjgxIDc0LjYxNSw4OC4zODggNzguODIyLDg4LjM4OCBDIDgzLjAyNiw4OC4zODggODYuNDQ4LDkxLjgxIDg2LjQ0OCw5Ni4wMTYgTCA4Ni40NDgsMTA3LjQ1NiBDIDg2LjQ0OCwxMDkuNTYyIDg4LjE1NiwxMTEuMjY4IDkwLjI2MiwxMTEuMjY4IEMgOTIuMzY0LDExMS4yNjkgOTQuMDY4LDEwOS41NjYgOTQuMDc0LDEwNy40NjUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjciCisgICAgICAgICBkPSJNIDEyNC4xOTcsOTUuODE0IEMgMTI0LjA4OCw4Ny40OTYgMTE3LjI5Myw4MC43NjIgMTA4Ljk0OSw4MC43NjIgQyAxMDAuNTksODAuNzYyIDkzLjc4Myw4Ny41MiA5My42OTcsOTUuODU2IEwgOTMuNjkzLDk1Ljg1NiBMIDkzLjY5NSwxMDcuNDU2IEMgOTMuNjk1LDEwOS41NjIgOTUuNDAyLDExMS4yNjggOTcuNTA5LDExMS4yNjggQyA5OS42MTEsMTExLjI2OCAxMDEuMzE2LDEwOS41NjYgMTAxLjMyMSwxMDcuNDY0IEwgMTAxLjMyMSw5NS45OTQgTCAxMDEuMzIxLDk1Ljk5NCBDIDEwMS4zMzMsOTEuNzk4IDEwNC43NDcsODguMzg4IDEwOC45NDgsODguMzg4IEMgMTEzLjE0Nyw4OC4zODggMTE2LjU2Myw5MS43OTggMTE2LjU3NSw5NS45OTQgTCAxMTYuNTc1LDEwNy40NTYgQyAxMTYuNTc1LDEwOS41NjIgMTE4LjI4MiwxMTEuMjY4IDEyMC4zODcsMTExLjI2OCBDIDEyMi40OTIsMTExLjI2OCAxMjQuMjAxLDEwOS41NjIgMTI0LjIwMSwxMDcuNDU2IEwgMTI0LjIwMSw5NS44MTQgTCAxMjQuMTk3LDk1LjgxNCB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgyOSIKKyAgICAgICAgIGQ9Ik0gNjMuOTQ2LDk2LjAwNSBMIDYzLjk0Niw5NS44NTQgTCA2My45NDMsOTUuODU0IEwgNjMuOTQzLDk1LjgxNSBMIDYzLjk0Miw5NS44MTUgQyA2My44MzMsODcuNDk3IDU3LjAzNyw4MC43NjEgNDguNjkzLDgwLjc2MSBDIDQ4LjY4Miw4MC43NjEgNDguNjcxLDgwLjc2MyA0OC42NTgsODAuNzYzIEMgNDguMzgyLDgwLjc2MyA0OC4xMDcsODAuNzcyIDQ3LjgzMyw4MC43ODYgQyA0Ny43NSw4MC43OTEgNDcuNjY4LDgwLjc5OSA0Ny41ODYsODAuODA2IEMgNDcuMzc4LDgwLjgyMiA0Ny4xNzIsODAuODM4IDQ2Ljk2OCw4MC44NjIgQyA0Ni44ODQsODAuODczIDQ2LjgwMSw4MC44ODIgNDYuNzE5LDgwLjg5MyBDIDQ2LjUwOCw4MC45MiA0Ni4yOTgsODAuOTUyIDQ2LjA5MSw4MC45ODcgQyA0Ni4wMjQsODAuOTk5IDQ1Ljk1OCw4MS4wMSA0NS44OTEsODEuMDI0IEMgNDUuNjQ5LDgxLjA2OCA0NS40MDYsODEuMTE5IDQ1LjE2OCw4MS4xNzUgQyA0NS4xNCw4MS4xODMgNDUuMTEyLDgxLjE4OSA0NS4wODUsODEuMTk1IEMgNDMuNjU2LDgxLjU0MiA0Mi4zMDYsODIuMDkyIDQxLjA2NSw4Mi44MTIgTCA0MS4wNjUsODAuNzYxIEwgMzMuNDM4LDgwLjc2MSBMIDMzLjQzOCw5NS44NTcgTCAzMy40MzUsOTUuODU3IEwgMzMuNDM1LDEwNy40NTcgQyAzMy40MzUsMTA5LjU2MyAzNS4xNDIsMTExLjI2OSAzNy4yNDgsMTExLjI2OSBDIDM5LjA5MywxMTEuMjY5IDQwLjYzMiwxMDkuOTU4IDQwLjk4NCwxMDguMjE3IEMgNDEuMDM2LDEwNy45NjMgNDEuMDY1LDEwNy43MDIgNDEuMDY1LDEwNy40MzUgTCA0MS4wNjUsOTUuODczIEMgNDEuMDg2LDk0LjczMiA0MS4zNTcsOTMuNjUgNDEuODI4LDkyLjY4NSBMIDQxLjgyOCw5Mi42OTMgQyA0Mi41OTgsOTEuMTA2IDQzLjkwNSw4OS44MjQgNDUuNTExLDg5LjA4NSBDIDQ1LjUxOSw4OS4wOCA0NS41MjksODkuMDc2IDQ1LjUzNiw4OS4wNzMgQyA0NS44NDksODguOTI4IDQ2LjE3NCw4OC44MDcgNDYuNTA4LDg4LjcwNyBDIDQ2LjUyMyw4OC43MDQgNDYuNTM2LDg4LjY5OSA0Ni41NSw4OC42OTYgQyA0Ni42OTksODguNjUxIDQ2Ljg1LDg4LjYxNCA0Ny4wMDQsODguNTc2IEMgNDcuMDI1LDg4LjU3NSA0Ny4wNDYsODguNTY3IDQ3LjA2OSw4OC41NjIgQyA0Ny4yMzQsODguNTI3IDQ3LjQwMiw4OC40OTUgNDcuNTcyLDg4LjQ2OSBDIDQ3LjU4Niw4OC40NjggNDcuNiw4OC40NjYgNDcuNjE1LDg4LjQ2MyBDIDQ3Ljc2Myw4OC40NDMgNDcuOTE2LDg4LjQyNyA0OC4wNjcsODguNDE1IEMgNDguMTA2LDg4LjQxIDQ4LjE0NSw4OC40MDcgNDguMTg2LDg4LjQwNCBDIDQ4LjM1Miw4OC4zOTMgNDguNTIsODguMzg2IDQ4LjY5MSw4OC4zODYgQyA1Mi44ODgsODguMzg3IDU2LjMwNCw5MS43OTcgNTYuMzE2LDk1Ljk5MiBMIDU2LjMxNiwxMDcuNDU0IEMgNTYuMzE2LDEwOS41NiA1OC4wMjMsMTExLjI2NiA2MC4xMywxMTEuMjY2IEMgNjEuOTc2LDExMS4yNjYgNjMuNTE2LDEwOS45NTQgNjMuODY3LDEwOC4yMTEgQyA2My45MTksMTA3Ljk2MyA2My45NDYsMTA3LjcwNiA2My45NDYsMTA3LjQ0MiBMIDYzLjk0Niw5Ni4wMjQgQyA2My45NDYsOTYuMDIxIDYzLjk0Nyw5Ni4wMTggNjMuOTQ3LDk2LjAxNSBDIDYzLjk0OCw5Ni4wMTEgNjMuOTQ2LDk2LjAwOCA2My45NDYsOTYuMDA1IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDMxIgorICAgICAgICAgZD0iTSAxODAuNjQ0LDUwLjYzMyBDIDE3OC41MzksNTAuNjMzIDE3Ni44MzIsNTIuMzQxIDE3Ni44MzIsNTQuNDQ3IEwgMTc2LjgzMiw2NS44ODcgQyAxNzYuODMyLDcwLjA5MiAxNzMuNDEsNzMuNTEzIDE2OS4yMDMsNzMuNTEzIEMgMTY0Ljk5OCw3My41MTMgMTYxLjU3Niw3MC4wOTIgMTYxLjU3Niw2NS44ODcgQyAxNjEuNTc2LDYxLjY4MyAxNjQuOTk4LDU4LjI2IDE2OS4yMDMsNTguMjYgQyAxNzIuMjE5LDU4LjI2IDE3NC44Myw2MC4wMTkgMTc2LjA2OCw2Mi41NjUgTCAxNzYuMDY4LDUyLjI3MSBDIDE3NC4wMDQsNTEuMjI1IDE3MS42NzMsNTAuNjMyIDE2OS4yMDMsNTAuNjMyIEMgMTYwLjc5Myw1MC42MzIgMTUzLjk1MSw1Ny40NzYgMTUzLjk1MSw2NS44ODcgQyAxNTMuOTUxLDc0LjI5OCAxNjAuNzkzLDgxLjE0MSAxNjkuMjAzLDgxLjE0MSBDIDE3Ny42MTUsODEuMTQxIDE4NC40NTksNzQuMjk4IDE4NC40NTksNjUuODg3IEwgMTg0LjQ1OSw1NC40NDcgQyAxODQuNDU4LDUyLjM0MSAxODIuNzUxLDUwLjYzMyAxODAuNjQ0LDUwLjYzMyB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzMyIKKyAgICAgICAgIGQ9Ik0gMTI0LjIwMyw3Ny4zMzkgTCAxMjQuMjAzLDY1LjY4NyBMIDEyNC4xOTcsNjUuNjg3IEMgMTI0LjA4OCw1Ny4zNzEgMTE3LjI5Myw1MC42MzMgMTA4Ljk0OSw1MC42MzMgQyAxMDAuNTkyLDUwLjYzMyA5My43ODMsNTcuMzkzIDkzLjY5Nyw2NS43MzEgTCA5My42OTUsNjUuNzMxIEwgOTMuNjk1LDY1Ljg3NyBDIDkzLjY5NSw2NS44ODIgOTMuNjkzLDY1Ljg4NSA5My42OTMsNjUuODg4IEMgOTMuNjkzLDY1Ljg5MSA5My42OTUsNjUuODk2IDkzLjY5NSw2NS44OTkgTCA5My42OTUsNzcuMzMgQyA5My42OTUsNzkuNDM1IDk1LjQwMiw4MS4xNDIgOTcuNTA5LDgxLjE0MiBDIDk5LjYxNCw4MS4xNDIgMTAxLjMyMSw3OS40MzUgMTAxLjMyMSw3Ny4zMyBMIDEwMS4zMjEsNjUuODY4IEMgMTAxLjMzMyw2MS42NzIgMTA0Ljc0Nyw1OC4yNjEgMTA4Ljk0OCw1OC4yNjEgQyAxMTMuMTQ3LDU4LjI2MSAxMTYuNTYzLDYxLjY3MiAxMTYuNTc1LDY1Ljg2OCBMIDExNi41NzUsNjUuODY4IEwgMTE2LjU3NSw3Ny4zMjkgQyAxMTYuNTc1LDc5LjQzNCAxMTguMjgyLDgxLjE0MSAxMjAuMzg5LDgxLjE0MSBDIDEyMi40OTIsODEuMTQyIDEyNC4xOTcsNzkuNDQgMTI0LjIwMyw3Ny4zMzkgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMzUiCisgICAgICAgICBkPSJNIDE1MC41MTcsODAuNzYxIEMgMTQ4LjQxLDgwLjc2MSAxNDYuNzAzLDgyLjQ2OSAxNDYuNzAzLDg0LjU3NSBMIDE0Ni43MDMsOTYuMDE1IEMgMTQ2LjcwMywxMDAuMjIgMTQzLjI4MywxMDMuNjQzIDEzOS4wNzYsMTAzLjY0MyBDIDEzNC44NzEsMTAzLjY0MyAxMzEuNDQ5LDEwMC4yMiAxMzEuNDQ5LDk2LjAxNSBDIDEzMS40NDksOTEuODA4IDEzNC44NzEsODguMzg3IDEzOS4wNzYsODguMzg3IEMgMTQyLjA5Miw4OC4zODcgMTQ0LjcwMyw5MC4xNDUgMTQ1Ljk0MSw5Mi42OTIgTCAxNDUuOTQxLDgyLjM5NyBDIDE0My44NzUsODEuMzUzIDE0MS41NDUsODAuNzYgMTM5LjA3Niw4MC43NiBDIDEzMC42NjYsODAuNzYgMTIzLjgyMiw4Ny42MDQgMTIzLjgyMiw5Ni4wMTUgQyAxMjMuODIyLDEwNC40MjYgMTMwLjY2NiwxMTEuMjY4IDEzOS4wNzYsMTExLjI2OCBDIDE0Ny40ODYsMTExLjI2OCAxNTQuMzMsMTA0LjQyNiAxNTQuMzMsOTYuMDE1IEwgMTU0LjMzLDg0LjU3NSBDIDE1NC4zMyw4Mi40NjkgMTUyLjYyMyw4MC43NjEgMTUwLjUxNyw4MC43NjEgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMzciCisgICAgICAgICBkPSJNIDgyLjYyNSw3Ny4zNDUgQyA4Mi42MjUsNzUuMjQ3IDgwLjkyMyw3My41NDcgNzguODI2LDczLjU0NyBMIDc4LjgyNiw4MS4xNDIgQyA4MC45MjIsODEuMTQyIDgyLjYyNSw3OS40NDIgODIuNjI1LDc3LjM0NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzOSIKKyAgICAgICAgIGQ9Ik0gOTAuMjUyLDY5LjY4NSBDIDkyLjM1LDY5LjY4NSA5NC4wNDgsNjcuOTg3IDk0LjA0OCw2NS44ODggTCA4Ni40NTMsNjUuODg4IEMgODYuNDUzLDY3Ljk4NiA4OC4xNTQsNjkuNjg1IDkwLjI1Miw2OS42ODUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoNDEiCisgICAgICAgICBkPSJNIDkzLjgzMiw3Ny4zMjkgQyA5My44MzIsNzUuMjIzIDkyLjEyNSw3My41MTYgOTAuMDE4LDczLjUxNiBMIDc4LjgyNSw3My41MTYgQyA3NC42MTksNzMuNTE2IDcxLjE5OSw3MC4wOTMgNzEuMTk5LDY1Ljg4OCBDIDcxLjE5OSw2MS42ODQgNzQuNjE5LDU4LjI2MSA3OC44MjUsNTguMjYxIEMgODMuMDMyLDU4LjI2MSA4Ni40NTMsNjEuNjg0IDg2LjQ1Myw2NS44ODggQyA4Ni40NTMsNjguOTA0IDg0LjY5NCw3MS41MTQgODIuMTQ5LDcyLjc1MiBMIDkyLjQ0Miw3Mi43NTIgQyA5My40ODgsNzAuNjg5IDk0LjA4LDY4LjM1NiA5NC4wOCw2NS44ODggQyA5NC4wOCw1Ny40NzcgODcuMjM3LDUwLjYzMyA3OC44MjYsNTAuNjMzIEMgNzAuNDE1LDUwLjYzMyA2My41NzEsNTcuNDc3IDYzLjU3MSw2NS44ODggQyA2My41NzEsNzQuMyA3MC40MTUsODEuMTQyIDc4LjgyNiw4MS4xNDIgTCA5MC4wMTgsODEuMTQyIEMgOTIuMTI1LDgxLjE0MiA5My44MzIsNzkuNDM1IDkzLjgzMiw3Ny4zMjkgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoNDMiCisgICAgICAgICBkPSJNIDE0Mi44NjksNzcuMzQ1IEMgMTQyLjg2OSw3NS4yNDcgMTQxLjE2OCw3My41NDcgMTM5LjA3LDczLjU0NyBMIDEzOS4wNyw4MS4xNDIgQyAxNDEuMTY3LDgxLjE0MiAxNDIuODY5LDc5LjQ0MiAxNDIuODY5LDc3LjM0NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0NSIKKyAgICAgICAgIGQ9Ik0gMTUwLjQ5Niw2OS42ODUgQyAxNTIuNTk0LDY5LjY4NSAxNTQuMjkzLDY3Ljk4NyAxNTQuMjkzLDY1Ljg4OCBMIDE0Ni42OTksNjUuODg4IEMgMTQ2LjY5OSw2Ny45ODYgMTQ4LjM5OCw2OS42ODUgMTUwLjQ5Niw2OS42ODUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoNDciCisgICAgICAgICBkPSJNIDE1NC4wNzYsNzcuMzI5IEMgMTU0LjA3Niw3NS4yMjMgMTUyLjM2Nyw3My41MTYgMTUwLjI2Miw3My41MTYgTCAxMzkuMDcsNzMuNTE2IEMgMTM0Ljg2NSw3My41MTYgMTMxLjQ0Myw3MC4wOTMgMTMxLjQ0Myw2NS44ODggQyAxMzEuNDQzLDYxLjY4NCAxMzQuODY1LDU4LjI2MSAxMzkuMDcsNTguMjYxIEMgMTQzLjI3NSw1OC4yNjEgMTQ2LjY5OSw2MS42ODQgMTQ2LjY5OSw2NS44ODggQyAxNDYuNjk5LDY4LjkwNCAxNDQuOTM5LDcxLjUxNCAxNDIuMzkyLDcyLjc1MiBMIDE1Mi42ODcsNzIuNzUyIEMgMTUzLjczLDcwLjY4OSAxNTQuMzI0LDY4LjM1NiAxNTQuMzI0LDY1Ljg4OCBDIDE1NC4zMjQsNTcuNDc3IDE0Ny40OCw1MC42MzMgMTM5LjA3LDUwLjYzMyBDIDEzMC42Niw1MC42MzMgMTIzLjgxNiw1Ny40NzcgMTIzLjgxNiw2NS44ODggQyAxMjMuODE2LDc0LjMgMTMwLjY2LDgxLjE0MiAxMzkuMDcsODEuMTQyIEwgMTUwLjI2MSw4MS4xNDIgQyAxNTIuMzY3LDgxLjE0MiAxNTQuMDc2LDc5LjQzNSAxNTQuMDc2LDc3LjMyOSB6ICIgLz4KKyAgICA8L2c+CisgICAgPGcKKyAgICAgICBpZD0iZzIxMjYiCisgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43Njc5NTY0LDAsMCwwLjc2Nzk1NjQsLTY2LjUyMDYzMSwxMS40MjkwMykiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMxMi43MTg0MSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzEyLjcxODQxIgorICAgICAgIHN0eWxlPSJmaWxsOiMzNTk5MmE7ZmlsbC1vcGFjaXR5OjEiPgorICAgICAgPGcKKyAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg2LjMzOTc1LDQuMjM5ODVlLTIpIgorICAgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJnMjExNCI+CisgICAgICAgIDxnCisgICAgICAgICAgIHN0eWxlPSJmaWxsOiMzNTk5MmE7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICAgIGlkPSJnMjExNiI+CisgICAgICAgICAgPHBhdGgKKyAgICAgICAgICAgICBpZD0icGF0aDIxMTgiCisgICAgICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTg2LjMzOTc1LC00LjIzOTkzNGUtMikiCisgICAgICAgICAgICAgZD0iTSA4OS45Njg3NSwwLjAzMTI1IEMgODcuOTYyNzQ4LDAuMDMxMjUwMDAxIDg2LjM0Mzc1LDEuNjgxNTAwMSA4Ni4zNDM3NSwzLjY4NzUgTCA4Ni4zNDM3NSwxNy43MTg3NSBMIDg2LjM0Mzc1LDE5LjY4NzUgTCA4Ni4zNDM3NSwyOC45MDYyNSBDIDg2LjM0Mzc1MiwzOS4wNjgyNSA5NC42MTkyNSw0Ny4zNDM3NSAxMDQuNzgxMjUsNDcuMzQzNzUgTCAxMTMuMzc1LDQ3LjM0Mzc1IEwgMTIzLjE4NzUsNDcuMzQzNzUgTCAxMjcuMTU2MjUsNDcuMzQzNzUgQyAxMjkuMTYzMjUsNDcuMzQzNzQ5IDEzMC44MTI1LDQ1LjcyNDc1IDEzMC44MTI1LDQzLjcxODc1IEMgMTMwLjgxMjUsNDEuNzEyNzUgMTI5LjE2MzI1LDQwLjA5Mzc1IDEyNy4xNTYyNSw0MC4wOTM3NSBMIDEyMy4xODc1LDQwLjA5Mzc1IEwgMTIzLjE4NzUsMTkuNjg3NSBMIDEyMy4xODc1LDE0LjY1NjI1IEwgMTIzLjE4NzUsMy42ODc1IEMgMTIzLjE4NzUsMS42ODE1IDEyMS41Njc1LDAuMDMxMjUgMTE5LjU2MjUsMC4wMzEyNSBDIDExNy41NTU1LDAuMDMxMjUwMDAxIDExNS45Mzc1LDEuNjgxNTAwMSAxMTUuOTM3NSwzLjY4NzUgTCAxMTUuOTM3NSwxNC4yODEyNSBDIDExNS4xMTg1LDEzLjY1NDI1IDExNC4yNjI3NSwxMy4xMDkgMTEzLjM0Mzc1LDEyLjYyNSBMIDExMy4zNDM3NSwzLjY4NzUgQyAxMTMuMzQ0NzUsMS42ODE1IDExMS42OTI1LDAuMDMxMjUgMTA5LjY4NzUsMC4wMzEyNSBDIDEwNy42ODI1LDAuMDMxMjUwMDAxIDEwNi4wNjI1LDEuNjgxNTAwMSAxMDYuMDYyNSwzLjY4NzUgTCAxMDYuMDYyNSwxMC41NjI1IEMgMTA1LjYzMDUsMTAuNTMyNSAxMDUuMjIwMjUsMTAuNSAxMDQuNzgxMjUsMTAuNSBDIDEwNC4zNDEyNSwxMC41IDEwMy45MDA3NSwxMC41MzI1IDEwMy40Njg3NSwxMC41NjI1IEwgMTAzLjQ2ODc1LDMuNjg3NSBDIDEwMy40Njk3NSwxLjY4MTUgMTAxLjg0OTc1LDAuMDMxMjUgOTkuODQzNzUsMC4wMzEyNSBDIDk3LjgzNzc0OSwwLjAzMTI1MDAwMSA5Ni4yMTg3NSwxLjY4MTUwMDEgOTYuMjE4NzUsMy42ODc1IEwgOTYuMjE4NzUsMTIuNjI1IEMgOTUuMjk5NzU0LDEzLjEwOSA5NC40MTM3NSwxMy42NTQyNSA5My41OTM3NSwxNC4yODEyNSBMIDkzLjU5Mzc1LDMuNjg3NSBDIDkzLjU5NDc1LDEuNjgxNSA5MS45NzQ3NSwwLjAzMTI1IDg5Ljk2ODc1LDAuMDMxMjUgeiBNIDEwNC43ODEyNSwxNC4zNDM3NSBDIDExMi44MDgyNSwxNC4zNDM3NSAxMTkuMzEyNSwyMC44NzkyNSAxMTkuMzEyNSwyOC45MDYyNSBDIDExOS4zMTI1LDM2LjkzMzI1IDExMi44MDgyNSw0My40Njg3NSAxMDQuNzgxMjUsNDMuNDY4NzUgQyA5Ni43NTQyNTQsNDMuNDY4NzUgOTAuMjE4NzUsMzYuOTM0MjUgOTAuMjE4NzUsMjguOTA2MjUgQyA5MC4yMTg3NTIsMjAuODc4MjUgOTYuNzUzMjUzLDE0LjM0Mzc1IDEwNC43ODEyNSwxNC4zNDM3NSB6ICIKKyAgICAgICAgICAgICBzdHlsZT0iZmlsbDojMzU5OTJhO2ZpbGwtb3BhY2l0eToxIiAvPgorICAgICAgICA8L2c+CisgICAgICA8L2c+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjEyMiIKKyAgICAgICAgIGQ9Ik0gMTEyLjA0ODc1LDI4LjkxMzM5OSBDIDExMi4wNDg3NSwyNC44OTkzOTkgMTA4Ljc4Mjc1LDIxLjYzNDM5OSAxMDQuNzY5NzUsMjEuNjM0Mzk5IEMgMTAwLjc1Njc1LDIxLjYzNDM5OSA5Ny40OTA3NTMsMjQuOTAwMzk5IDk3LjQ5MDc1MywyOC45MTMzOTkgQyA5Ny40OTA3NTMsMzIuOTI2Mzk5IDEwMC43NTY3NSwzNi4xOTIzOTkgMTA0Ljc2OTc1LDM2LjE5MjM5OSBDIDEwOC43ODI3NSwzNi4xOTIzOTkgMTEyLjA0ODc1LDMyLjkyNzM5OSAxMTIuMDQ4NzUsMjguOTEzMzk5IHogIiAvPgorICAgIDwvZz4KKyAgPC9nPgorPC9zdmc+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMWMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KKworICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLnBlcm1hbGluayIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0icGVybWFsaW5rLnRleHQiPsK2PC94c2w6cGFyYW0+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZSIvPgorCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9ICcwJyI+CisgICAgICA8c3BhbiBjbGFzcz0icGVybWFsaW5rIj4KKyAgICAgICAgPGEgYWx0PSJQZXJtYWxpbmsiIHRpdGxlPSJQZXJtYWxpbmsiPgorICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImhyZWYiPgorICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImhyZWYudGFyZ2V0Ij4KKyAgICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im9iamVjdCIgIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgICAgPC94c2w6YXR0cmlidXRlPgorICAgICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9IiRwZXJtYWxpbmsudGV4dCIvPgorICAgICAgICA8L2E+CisgICAgICA8L3NwYW4+CisgICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LWRiLXBkZi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1kYi1wZGYueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTNkZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1kYi1wZGYueHNsCkBAIC0wLDAgKzEsNjQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9mby9kb2Nib29rLnhzbCIgLz4KKworICA8IS0tIGNoZWNrIHByb2plY3QtcGxhbi5zaCBmb3IgaG93IHRoaXMgaXMgZ2VuZXJhdGVkLCBuZWVkZWQgdG8gdHdlYWsKKyAgICAgICB0aGUgY292ZXIgcGFnZQorICAgIC0tPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iL3RtcC90aXRsZXBhZ2UueHNsIi8+CisKKyAgPCEtLSBUbyBmb3JjZSBhIHBhZ2UgYnJlYWsgaW4gZG9jdW1lbnQsIGkuZSBwZXIgc2VjdGlvbiBhZGQgYQorICAgICAgPD9oYXJkLXBhZ2VicmVhaz8+IHRhZy4KKyAgLS0+CisgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHJvY2Vzc2luZy1pbnN0cnVjdGlvbignaGFyZC1wYWdlYnJlYWsnKSI+CisgICA8Zm86YmxvY2sgYnJlYWstYmVmb3JlPSdwYWdlJyAvPgorIDwveHNsOnRlbXBsYXRlPgorCisgIDwhLS1GaXggZm9yIGRlZnVhbHQgaW5kZW50IGdldHRpbmcgVE9DIGFsbCB3aWVyZC4uCisgICAgICBTZWUgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9tbC9kb2Nib29rLWFwcHMvMjAwNS1xMS9tc2cwMDQ1NS5odG1sCisgICAgICBGSVhNRTogbXVzdCBiZSBhIGJldHRlciBmaXgKKyAgICAtLT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJib2R5LnN0YXJ0LmluZGVudCIgc2VsZWN0PSInMCciLz4KKyAgPCEtLTx4c2w6cGFyYW0gbmFtZT0idGl0bGUubWFyZ2luLmxlZnQiIHNlbGVjdD0iJzAnIi8+LS0+CisKKyAgPCEtLSBzdG9wIGxvbmctaXNoIGhlYWRlciB0aXRsZXMgZ2V0dGluZyB3cmFwcGVkIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImhlYWRlci5jb2x1bW4ud2lkdGhzIj4xIDEwIDE8L3hzbDpwYXJhbT4KKworICA8IS0tIGN1c3RvbWlzZSBoZWFkZXJzIGFuZCBmb290ZXJzIGEgbGl0dGxlIC0tPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iaGVhZC5zZXAucnVsZSI+CisgICA8eHNsOmlmIHRlc3Q9IiRoZWFkZXIucnVsZSAhPSAwIj4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS13aWR0aCI+MC41cHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20tc3R5bGUiPnNvbGlkPC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLWNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZm9vdC5zZXAucnVsZSI+CisgICAgPHhzbDppZiB0ZXN0PSIkZm9vdGVyLnJ1bGUgIT0gMCI+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3Atd2lkdGgiPjAuNXB0PC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLXN0eWxlIj5zb2xpZDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC1jb2xvciI+Izk5OTk5OTwveHNsOmF0dHJpYnV0ZT4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImhlYWRlci5jb250ZW50LnByb3BlcnRpZXMiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICA8L3hzbDphdHRyaWJ1dGUtc2V0PgorCisgIDx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJmb290ZXIuY29udGVudC5wcm9wZXJ0aWVzIj4KKyAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+Izk5OTk5OTwveHNsOmF0dHJpYnV0ZT4KKyAgPC94c2w6YXR0cmlidXRlLXNldD4KKworCisgIDwhLS0gZ2VuZXJhbCBzZXR0aW5ncyAtLT4KKworICA8eHNsOnBhcmFtIG5hbWU9ImZvcDEuZXh0ZW5zaW9ucyIgc2VsZWN0PSIxIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwYXBlci50eXBlIiBzZWxlY3Q9IidBNCciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9ImJvZHkuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3ZlcmFzYW5zJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3ZlcmFzYW5zJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ibW9ub3NwYWNlLmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhbW9ubyciPjwveHNsOnBhcmFtPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktcmVmLW1hbnVhbC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1yZWYtbWFudWFsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDg1ZWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktcmVmLW1hbnVhbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3kuc3ZnIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3kuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZWE1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS5zdmcKQEAgLTAsMCArMSwxNjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cis8c3ZnCisgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgdmVyc2lvbj0iMS4wIgorICAgd2lkdGg9IjE1OC41NjA3NiIKKyAgIGhlaWdodD0iNzkuMjg0NDI0IgorICAgdmlld0JveD0iLTQwLjk4MSAtOTIuNTkyIDMwMCAzMDAiCisgICBpZD0ic3ZnMiIKKyAgIHhtbDpzcGFjZT0icHJlc2VydmUiPgorPGRlZnMKKyAgIGlkPSJkZWZzNCI+Cis8L2RlZnM+Cis8cGF0aAorICAgZD0iTSAtMzYuNTg1Mzc5LDU0LjQxMjU3NiBMIC0zNi41ODUzNzksNTQuNDIxMzA1IEwgLTM2LjU4MjQ2OSw1NC40MjEzMDUgTCAtMzYuNTgyNDY5LDU0LjI0MzgyOSBDIC0zNi41Nzk1Niw1NC4zMDIwMTggLTM2LjU4NTM3OSw1NC4zNTcyOTcgLTM2LjU4NTM3OSw1NC40MTI1NzYgeiAiCisgICBzdHlsZT0iZmlsbDojNmFjN2JkIgorICAgaWQ9InBhdGg2IiAvPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc4Ij4KKwk8ZworICAgaWQ9ImcxMCI+CisJCTxwYXRoCisgICBkPSJNIDI0LjQ4MiwyMy45OTggTCAyNC40ODIsMjMuOTk1IEMgMTAuOTYxLDIzLjk5NCAwLDM0Ljk1NSAwLDQ4LjQ3NiBMIDAuMDAxLDQ4LjQ3OSBMIDAuMDAxLDQ4LjQ4MiBDIDAuMDAzLDYyLjAwMSAxMC45NjIsNzIuOTYgMjQuNDgyLDcyLjk2IEwgMjQuNDgyLDcyLjk2IEwgMCw3Mi45NiBMIDAsOTcuNDQyIEwgMC4wMDMsOTcuNDQyIEMgMTMuNTIzLDk3LjQ0IDI0LjQ4Miw4Ni40OCAyNC40ODIsNzIuOTYxIEwgMjQuNDg1LDcyLjk2MSBDIDM4LjAwNSw3Mi45NTkgNDguOTYzLDYyIDQ4Ljk2Myw0OC40NzkgTCA0OC45NjMsNDguNDc2IEMgNDguOTYyLDM0Ljk1NyAzOC4wMDEsMjMuOTk4IDI0LjQ4MiwyMy45OTggeiBNIDI0LjQ4Miw1MC45MjggQyAyMy4xMyw1MC45MjggMjIuMDM0LDQ5LjgzMiAyMi4wMzQsNDguNDggQyAyMi4wMzQsNDcuMTI4IDIzLjEzLDQ2LjAzMiAyNC40ODIsNDYuMDMyIEMgMjUuODM0LDQ2LjAzMiAyNi45Myw0Ny4xMjggMjYuOTMsNDguNDggQyAyNi45Myw0OS44MzIgMjUuODM0LDUwLjkyOCAyNC40ODIsNTAuOTI4IHogIgorICAgc3R5bGU9ImZpbGw6I2VmNDEyYSIKKyAgIGlkPSJwYXRoMTIiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImcxNCI+CisJPGcKKyAgIGlkPSJnMTYiPgorCQk8cGF0aAorICAgZD0iTSAxMTkuOTYsNDguODQyIEMgMTIwLjAyNCw0Ny41NDggMTIxLjA4Niw0Ni41MTYgMTIyLjM5Nyw0Ni41MTYgQyAxMjMuNzA3LDQ2LjUxNiAxMjQuNzY4LDQ3LjU0OCAxMjQuODMzLDQ4Ljg0MyBDIDEzNy4yMTEsNDcuNjIgMTQ2Ljg3OSwzNy4xODEgMTQ2Ljg3OSwyNC40ODMgTCAxMjIuMzk3LDI0LjQ4MyBDIDEyMi4zOTYsMTAuOTYxIDExMS40MzUsMCA5Ny45MTUsMCBMIDk3LjkxNSwyNC40ODUgQyA5Ny45MTcsMzcuMTgzIDEwNy41ODQsNDcuNjE5IDExOS45Niw0OC44NDIgeiBNIDEyNC44MzMsNDkuMDg0IEMgMTI0Ljc2OSw1MC4zNzkgMTIzLjcwNyw1MS40MTEgMTIyLjM5Nyw1MS40MTEgTCAxMjIuMzk2LDUxLjQxMSBMIDEyMi4zOTYsNzMuNDQ0IEwgMTQ2Ljg3OCw3My40NDQgTCAxNDYuODc4LDczLjQ0MSBDIDE0Ni44NzYsNjAuNzQ1IDEzNy4yMDgsNTAuMzA4IDEyNC44MzMsNDkuMDg0IHogTSAxMTkuOTQ5LDQ4Ljk2MyBMIDk3LjkxNSw0OC45NjMgTCA5Ny45MTUsNzMuNDQyIEwgOTcuOTE1LDczLjQ0MiBDIDExMC42MTMsNzMuNDQyIDEyMS4wNTIsNjMuNzc0IDEyMi4yNzUsNTEuMzk5IEMgMTIwLjk4MSw1MS4zMzQgMTE5Ljk0OSw1MC4yNzQgMTE5Ljk0OSw0OC45NjMgeiAiCisgICBzdHlsZT0iZmlsbDojYTljNTQyIgorICAgaWQ9InBhdGgxOCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzIwIj4KKwk8ZworICAgaWQ9ImcyMiI+CisJCTxwYXRoCisgICBkPSJNIDE2OC45MTIsNDguOTY3IEMgMTY4LjkxMiw0Ny42NTYgMTY5Ljk0NSw0Ni41OTYgMTcxLjI0LDQ2LjUzMSBDIDE3MC4wMTgsMzQuMTUyIDE1OS41NzksMjQuNDgyIDE0Ni44NzksMjQuNDgyIEwgMTQ2Ljg3OSw0OC45NjMgQyAxNDYuODc5LDYyLjQ4NCAxNTcuODQsNzMuNDQ0IDE3MS4zNjEsNzMuNDQ0IEwgMTcxLjM2MSw1MS40MTQgQyAxNzAuMDA3LDUxLjQxNSAxNjguOTEyLDUwLjMxOSAxNjguOTEyLDQ4Ljk2NyB6IE0gMTk1Ljg0MSw0OC45NzggQyAxOTUuODQxLDQ4Ljk3MyAxOTUuODQyLDQ4Ljk2OSAxOTUuODQyLDQ4Ljk2NCBMIDE5NS44NDIsMjQuNDgyIEwgMTk1LjgzOCwyNC40ODIgQyAxODMuMTQsMjQuNDg0IDE3Mi43MDIsMzQuMTU0IDE3MS40ODIsNDYuNTMxIEMgMTcyLjc3Niw0Ni41OTUgMTczLjgwOCw0Ny42NTYgMTczLjgwOCw0OC45NjcgQyAxNzMuODA4LDUwLjI3OCAxNzIuNzc2LDUxLjMzOSAxNzEuNDgxLDUxLjQwMyBDIDE3Mi42NzksNjMuNTkgMTgyLjgxNCw3My4xNDYgMTk1LjI0NCw3My40NDUgTCAxNzEuMzYxLDczLjQ0NSBMIDE3MS4zNjEsOTcuOTI3IEwgMTcxLjM2NCw5Ny45MjcgQyAxODQuODc5LDk3LjkyNSAxOTUuODM0LDg2Ljk3MyAxOTUuODQyLDczLjQ2IEwgMTk1Ljg0NCw3My40NiBMIDE5NS44NDQsNDguOTc5IEwgMTk1Ljg0MSw0OC45NzggeiBNIDE5NS44MzIsNDguOTY0IEwgMTk1Ljg0Miw0OC45NjQgTCAxOTUuODQyLDQ4Ljk3OCBMIDE5NS44MzIsNDguOTY0IHogIgorICAgc3R5bGU9ImZpbGw6I2Y5Yzc1OSIKKyAgIGlkPSJwYXRoMjQiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImcyNiI+CisJPGcKKyAgIGlkPSJnMjgiPgorCQk8cGF0aAorICAgZD0iTSA3MC45OTQsNDguNDc5IEwgNDguOTYyLDQ4LjQ3OSBMIDQ4Ljk2Miw0OC40ODEgTCA3MC45OTUsNDguNDgxIEMgNzAuOTk1LDQ4LjQ4MSA3MC45OTQsNDguNDggNzAuOTk0LDQ4LjQ3OSB6IE0gNzMuNDQsMjQuMDAxIEwgNzMuNDM3LDI0LjAwMSBMIDczLjQzNyw0Ni4wMzIgQyA3My40MzksNDYuMDMyIDczLjQ0LDQ2LjAzMiA3My40NDIsNDYuMDMyIEMgNzQuNzk0LDQ2LjAzMiA3NS44OSw0Ny4xMjggNzUuODksNDguNDggQyA3NS44OSw0OS44MzIgNzQuNzk0LDUwLjkyOCA3My40NDIsNTAuOTI4IEMgNzIuMDkxLDUwLjkyOCA3MC45OTYsNDkuODM0IDcwLjk5NCw0OC40ODMgTCA0OC45NTgsNDguNDgzIEwgNDguOTU4LDQ4LjQ4NiBDIDQ4Ljk2LDYyLjAwNSA1OS45MTksNzIuOTY0IDczLjQzNyw3Mi45NjQgQyA4Ni45NTUsNzIuOTY0IDk3LjkxNCw2Mi4wMDUgOTcuOTE2LDQ4LjQ4NiBMIDk3LjkxNiw0OC40ODMgQyA5Ny45MTYsMzQuOTYzIDg2Ljk1OCwyNC4wMDMgNzMuNDQsMjQuMDAxIHogIgorICAgc3R5bGU9ImZpbGw6IzZhYzdiZCIKKyAgIGlkPSJwYXRoMzAiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImczMiI+CisJPGcKKyAgIGlkPSJnMzQiPgorCQk8cGF0aAorICAgZD0iTSAyNC40ODIsMjMuOTk4IEwgMjQuNDgyLDIzLjk5NSBDIDEwLjk2MSwyMy45OTQgMCwzNC45NTUgMCw0OC40NzYgTCAyMi4wMzQsNDguNDc2IEMgMjIuMDM2LDQ3LjEyNSAyMy4xMzEsNDYuMDMxIDI0LjQ4Miw0Ni4wMzEgQyAyNS44MzQsNDYuMDMxIDI2LjkzLDQ3LjEyNyAyNi45Myw0OC40NzkgQyAyNi45Myw0OS44MzEgMjUuODM0LDUwLjkyNyAyNC40ODIsNTAuOTI3IEwgMjQuNDgyLDcyLjkzNyBDIDI0LjQ2OSw1OS40MjcgMTMuNTE0LDQ4LjQ3OSAwLDQ4LjQ3OSBMIDAsNzIuOTYgTCAyNC40ODEsNzIuOTYgTCAyNC40ODEsNzIuOTYgTCAwLDcyLjk2IEwgMCw5Ny40NDIgTCAwLjAwMyw5Ny40NDIgQyAxMy41MjMsOTcuNDQgMjQuNDgyLDg2LjQ4IDI0LjQ4Miw3Mi45NjEgTCAyNC40ODUsNzIuOTYxIEMgMzguMDA1LDcyLjk1OSA0OC45NjMsNjIgNDguOTYzLDQ4LjQ3OSBMIDQ4Ljk2Myw0OC40NzYgQyA0OC45NjIsMzQuOTU3IDM4LjAwMSwyMy45OTggMjQuNDgyLDIzLjk5OCB6ICIKKyAgIHN0eWxlPSJmaWxsOiNlZjQxMmEiCisgICBpZD0icGF0aDM2IiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnMzgiPgorCTxnCisgICBpZD0iZzQwIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gMTIyLjM5Nyw0Ni41MTYgQyAxMjMuNzA3LDQ2LjUxNiAxMjQuNzY4LDQ3LjU0OCAxMjQuODMzLDQ4Ljg0MyBDIDEzNy4yMTEsNDcuNjIgMTQ2Ljg3OSwzNy4xODEgMTQ2Ljg3OSwyNC40ODMgTCAxMjIuMzk3LDI0LjQ4MyBMIDEyMi4zOTcsNDYuNTE2IEwgMTIyLjM5Nyw0Ni41MTYgeiBNIDk3LjkxNSwwIEwgOTcuOTE1LDI0LjQ4MiBMIDEyMi4zOTYsMjQuNDgyIEMgMTIyLjM5NiwxMC45NjEgMTExLjQzNSwwIDk3LjkxNSwwIHogTSAxMjIuMjc1LDQ2LjUyOCBDIDEyMS4wNTIsMzQuMTUxIDExMC42MTMsMjQuNDgyIDk3LjkxNCwyNC40ODIgTCA5Ny45MTQsNDguOTY0IEwgOTcuOTE0LDQ4Ljk2NCBMIDk3LjkxNCw3My40NDMgTCA5Ny45MTQsNzMuNDQzIEMgMTEwLjYxMiw3My40NDMgMTIxLjA1MSw2My43NzUgMTIyLjI3NCw1MS40IEMgMTIwLjk4LDUxLjMzNSAxMTkuOTQ4LDUwLjI3NSAxMTkuOTQ4LDQ4Ljk2NCBDIDExOS45NDksNDcuNjUzIDEyMC45OCw0Ni41OTMgMTIyLjI3NSw0Ni41MjggeiBNIDEyNC44MzMsNDkuMDg0IEMgMTI0Ljc2OSw1MC4zNzkgMTIzLjcwNyw1MS40MTEgMTIyLjM5Nyw1MS40MTEgTCAxMjIuMzk2LDUxLjQxMSBMIDEyMi4zOTYsNzMuNDQ0IEwgMTQ2Ljg3OCw3My40NDQgTCAxNDYuODc4LDczLjQ0MSBDIDE0Ni44NzYsNjAuNzQ1IDEzNy4yMDgsNTAuMzA4IDEyNC44MzMsNDkuMDg0IHogIgorICAgc3R5bGU9ImZpbGw6I2E5YzU0MiIKKyAgIGlkPSJwYXRoNDIiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc0NCI+CisJPGcKKyAgIGlkPSJnNDYiPgorCQk8cGF0aAorICAgZD0iTSAxNzMuNzk1LDQ5LjEgQyAxNzMuNzI0LDUwLjM4OSAxNzIuNjY2LDUxLjQxNSAxNzEuMzYsNTEuNDE1IEMgMTcwLjAwNiw1MS40MTUgMTY4LjkxMSw1MC4zMTkgMTY4LjkxMSw0OC45NjcgQyAxNjguOTExLDQ3LjY1NiAxNjkuOTQ0LDQ2LjU5NiAxNzEuMjM5LDQ2LjUzMSBDIDE3MC4wMTcsMzQuMTUyIDE1OS41NzgsMjQuNDgyIDE0Ni44NzgsMjQuNDgyIEwgMTQ2Ljg3OCw0OC45NjMgQyAxNDYuODc4LDYyLjQ4NCAxNTcuODM5LDczLjQ0NCAxNzEuMzYsNzMuNDQ0IEwgMTcxLjM2LDk3LjkyNiBMIDE3MS4zNjMsOTcuOTI2IEMgMTg0Ljg3OCw5Ny45MjQgMTk1LjgzMyw4Ni45NzIgMTk1Ljg0MSw3My40NTkgTCAxOTUuODQyLDczLjQ1OSBMIDE5NS44NDIsNzMuNDQzIEwgMTk1Ljg0MSw3My40NDMgQyAxOTUuODMzLDYwLjc1MyAxODYuMTY3LDUwLjMyMiAxNzMuNzk1LDQ5LjEgeiBNIDE5NS44MzgsMjQuNDgyIEMgMTgzLjE0LDI0LjQ4NCAxNzIuNzAyLDM0LjE1NCAxNzEuNDgyLDQ2LjUzMSBDIDE3Mi43NzUsNDYuNTk1IDE3My44MDYsNDcuNjU1IDE3My44MDgsNDguOTY0IEwgMTk1Ljg0MSw0OC45NjQgTCAxOTUuODQxLDQ4Ljk3OSBDIDE5NS44NDEsNDguOTc0IDE5NS44NDIsNDguOTY5IDE5NS44NDIsNDguOTY0IEwgMTk1Ljg0MiwyNC40ODIgTCAxOTUuODM4LDI0LjQ4MiB6ICIKKyAgIHN0eWxlPSJmaWxsOiNmOWM3NTkiCisgICBpZD0icGF0aDQ4IiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnNTAiPgorCTxnCisgICBpZD0iZzUyIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gNzEuMDA3LDQ4LjM0NyBDIDcxLjA3NSw0Ny4xMDUgNzIuMDYyLDQ2LjExNyA3My4zMDQsNDYuMDQ2IEMgNzIuNTA5LDM4LjAyIDY3Ljg1LDMxLjEzMyA2MS4yMDEsMjcuMjg0IEMgNTcuNjAxLDI1LjIgNTMuNDI0LDI0IDQ4Ljk2NSwyNCBMIDQ4Ljk2MiwyNCBDIDQ4Ljk2MiwyOC40NiA1MC4xNjEsMzIuNjM4IDUyLjI0NSwzNi4yNCBDIDU2LjA5Myw0Mi44OTEgNjIuOTgsNDcuNTUyIDcxLjAwNyw0OC4zNDcgeiBNIDQ4Ljk2Miw0OC40MTggQyA0OC45NjIsNDguNDM4IDQ4Ljk2MSw0OC40NTYgNDguOTYxLDQ4LjQ3NiBMIDQ4Ljk2MSw0OC40NzkgTCA0OC45NjIsNDguNDc5IEwgNDguOTYyLDQ4LjQxOCB6IE0gNzAuOTk1LDQ4LjQ4MiBDIDcwLjk5NSw0OC40ODEgNzAuOTk1LDQ4LjQ4MSA3MC45OTUsNDguNDggTCA0OC45NjIsNDguNDggTCA0OC45NjIsNDguNDgyIEwgNzAuOTk1LDQ4LjQ4MiB6IE0gNzMuNDQsMjQuMDAxIEwgNzMuNDM3LDI0LjAwMSBMIDczLjQzNyw0Ni4wMzIgQyA3My40MzksNDYuMDMyIDczLjQ0LDQ2LjAzMiA3My40NDIsNDYuMDMyIEMgNzQuNzk0LDQ2LjAzMiA3NS44OSw0Ny4xMjggNzUuODksNDguNDggQyA3NS44OSw0OS44MzIgNzQuNzk0LDUwLjkyOCA3My40NDIsNTAuOTI4IEMgNzIuMDkxLDUwLjkyOCA3MC45OTYsNDkuODM0IDcwLjk5NCw0OC40ODMgTCA0OC45NTgsNDguNDgzIEwgNDguOTU4LDQ4LjQ4NiBDIDQ4Ljk2LDYyLjAwNSA1OS45MTksNzIuOTY0IDczLjQzNyw3Mi45NjQgQyA4Ni45NTUsNzIuOTY0IDk3LjkxNCw2Mi4wMDUgOTcuOTE2LDQ4LjQ4NiBMIDk3LjkxNiw0OC40ODMgQyA5Ny45MTYsMzQuOTYzIDg2Ljk1OCwyNC4wMDMgNzMuNDQsMjQuMDAxIHogIgorICAgc3R5bGU9ImZpbGw6IzZhYzdiZCIKKyAgIGlkPSJwYXRoNTQiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc1NiI+CisJPGcKKyAgIGlkPSJnNTgiPgorCQk8cGF0aAorICAgZD0iTSAyNC40ODIsMjMuOTk4IEwgMjQuNDgyLDIzLjk5NSBDIDEwLjk2MSwyMy45OTQgMCwzNC45NTUgMCw0OC40NzYgTCAyMi4wMzQsNDguNDc2IEMgMjIuMDM2LDQ3LjEyNSAyMy4xMzEsNDYuMDMxIDI0LjQ4Miw0Ni4wMzEgQyAyNS44MzQsNDYuMDMxIDI2LjkzLDQ3LjEyNyAyNi45Myw0OC40NzkgQyAyNi45Myw0OS44MzEgMjUuODM0LDUwLjkyNyAyNC40ODIsNTAuOTI3IEMgMjMuMTcxLDUwLjkyNyAyMi4xMSw0OS44OTQgMjIuMDQ2LDQ4LjYgQyA5LjY2OSw0OS44MjQgMC4wMDEsNjAuMjYyIDAuMDAxLDcyLjk2IEwgMCw3Mi45NiBMIDAsOTcuNDQyIEwgMC4wMDMsOTcuNDQyIEMgMTMuNTIzLDk3LjQ0IDI0LjQ4Miw4Ni40OCAyNC40ODIsNzIuOTYxIEwgMjQuNDg1LDcyLjk2MSBDIDM4LjAwNSw3Mi45NTkgNDguOTYzLDYyIDQ4Ljk2Myw0OC40NzkgTCA0OC45NjMsNDguNDc2IEMgNDguOTYyLDM0Ljk1NyAzOC4wMDEsMjMuOTk4IDI0LjQ4MiwyMy45OTggeiAiCisgICBzdHlsZT0iZmlsbDojZWY0MTJhIgorICAgaWQ9InBhdGg2MCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzYyIj4KKwk8ZworICAgaWQ9Imc2NCI+CisJCTxwYXRoCisgICBkPSJNIDExOS45NDksNDguOTYzIEMgMTE5Ljk0OSw0Ny42MTEgMTIxLjA0NSw0Ni41MTUgMTIyLjM5Nyw0Ni41MTUgQyAxMjMuNzA3LDQ2LjUxNSAxMjQuNzY4LDQ3LjU0NyAxMjQuODMzLDQ4Ljg0MiBDIDEzNy4yMTEsNDcuNjE5IDE0Ni44NzksMzcuMTggMTQ2Ljg3OSwyNC40ODIgTCAxMjIuMzk3LDI0LjQ4MiBDIDEyMi4zOTYsMTAuOTYxIDExMS40MzUsMCA5Ny45MTUsMCBMIDk3LjkxNSwyNC40ODIgTCAxMjIuMzk0LDI0LjQ4MiBDIDEwOC44NzQsMjQuNDg0IDk3LjkxNiwzNS40NDQgOTcuOTE2LDQ4Ljk2MyBMIDk3LjkxNiw0OC45NjMgTCA5Ny45MTYsNzMuNDQyIEwgOTcuOTE2LDczLjQ0MiBDIDExMC42MTQsNzMuNDQyIDEyMS4wNTMsNjMuNzc0IDEyMi4yNzYsNTEuMzk5IEMgMTIwLjk4MSw1MS4zMzQgMTE5Ljk0OSw1MC4yNzQgMTE5Ljk0OSw0OC45NjMgeiBNIDEyNC44MzMsNDkuMDg0IEMgMTI0Ljc2OSw1MC4zNzkgMTIzLjcwNyw1MS40MTEgMTIyLjM5Nyw1MS40MTEgTCAxMjIuMzk2LDUxLjQxMSBMIDEyMi4zOTYsNzMuNDQ0IEwgMTQ2Ljg3OCw3My40NDQgTCAxNDYuODc4LDczLjQ0MSBDIDE0Ni44NzYsNjAuNzQ1IDEzNy4yMDgsNTAuMzA4IDEyNC44MzMsNDkuMDg0IHogIgorICAgc3R5bGU9ImZpbGw6I2E5YzU0MiIKKyAgIGlkPSJwYXRoNjYiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc2OCI+CisJPGcKKyAgIGlkPSJnNzAiPgorCQk8cGF0aAorICAgZD0iTSAxOTUuODQxLDQ4Ljk3OSBMIDE5NS44MzUsNDguOTY0IEwgMTk1Ljg0MSw0OC45NjQgTCAxOTUuODQxLDQ4Ljk3OSBDIDE5NS44NDEsNDguOTc0IDE5NS44NDIsNDguOTY5IDE5NS44NDIsNDguOTY0IEwgMTk1Ljg0MiwyNC40ODIgTCAxOTUuODM4LDI0LjQ4MiBDIDE4My4xNCwyNC40ODQgMTcyLjcwMiwzNC4xNTQgMTcxLjQ4Miw0Ni41MzEgQyAxNzIuNzc2LDQ2LjU5NSAxNzMuODA4LDQ3LjY1NiAxNzMuODA4LDQ4Ljk2NyBDIDE3My44MDgsNTAuMzE5IDE3Mi43MTIsNTEuNDE1IDE3MS4zNjEsNTEuNDE1IEMgMTcwLjAwNyw1MS40MTUgMTY4LjkxMiw1MC4zMTkgMTY4LjkxMiw0OC45NjcgQyAxNjguOTEyLDQ3LjY1NiAxNjkuOTQ1LDQ2LjU5NiAxNzEuMjQsNDYuNTMxIEMgMTcwLjAxOCwzNC4xNTIgMTU5LjU3OSwyNC40ODIgMTQ2Ljg3OSwyNC40ODIgTCAxNDYuODc5LDQ4Ljk2MyBDIDE0Ni44NzksNjIuNDg0IDE1Ny44NCw3My40NDQgMTcxLjM2MSw3My40NDQgTCAxNzEuMzYxLDk3LjkyNiBMIDE3MS4zNjQsOTcuOTI2IEMgMTg0Ljg4Myw5Ny45MjQgMTk1Ljg0Myw4Ni45NjMgMTk1Ljg0Myw3My40NDQgTCAxNzEuOTU5LDczLjQ0NCBDIDE4NS4yMDMsNzMuMTI2IDE5NS44NDEsNjIuMjk5IDE5NS44NDEsNDguOTc5IHogIgorICAgc3R5bGU9ImZpbGw6I2Y5Yzc1OSIKKyAgIGlkPSJwYXRoNzIiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc3NCI+CisJPGcKKyAgIGlkPSJnNzYiPgorCQk8cGF0aAorICAgZD0iTSA3My40NCwyNC4wMDEgTCA3My40MzcsMjQuMDAxIEMgNTkuOTE5LDI0LjAwMyA0OC45NiwzNC45NTkgNDguOTU4LDQ4LjQ3NiBMIDQ4Ljk1OCw0OC40NzkgTCA0OC45NjEsNDguNDc5IEwgNDguOTYxLDQ4LjQ4MSBMIDQ4Ljk1Nyw0OC40ODIgTCA0OC45NTcsNDguNDg1IEMgNDguOTU5LDYyLjAwNCA1OS45MTgsNzIuOTYzIDczLjQzNiw3Mi45NjMgQyA4Ni45NTQsNzIuOTYzIDk3LjkxMyw2Mi4wMDQgOTcuOTE1LDQ4LjQ4NSBMIDk3LjkxNSw0OC40ODIgQyA5Ny45MTYsMzQuOTYzIDg2Ljk1OCwyNC4wMDMgNzMuNDQsMjQuMDAxIHogTSA3My40NDIsNTAuOTI4IEMgNzIuMDksNTAuOTI4IDcwLjk5NCw0OS44MzIgNzAuOTk0LDQ4LjQ4IEMgNzAuOTk0LDQ3LjEyOCA3Mi4wOSw0Ni4wMzIgNzMuNDQyLDQ2LjAzMiBDIDc0Ljc5NCw0Ni4wMzIgNzUuODksNDcuMTI4IDc1Ljg5LDQ4LjQ4IEMgNzUuODksNDkuODMyIDc0Ljc5NCw1MC45MjggNzMuNDQyLDUwLjkyOCB6ICIKKyAgIHN0eWxlPSJmaWxsOiM2YWM3YmQiCisgICBpZD0icGF0aDc4IiAvPgorCTwvZz4KKzwvZz4KKzwvc3ZnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3FhLWNvZGUtcGVybWFsaW5rcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwOTA5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsCkBAIC0wLDAgKzEsMjMgQEAKKzwhLS0NCitUaGlzIFhTTCBzaGVldCBlbmFibGVzIGNyZWF0aW9uIG9mIHBlcm1hbGlua3MgZm9yIDxwYXJhPjxjb2RlPg0KK2NvbnN0cnVjdHMuICBSaWdodCBub3csIHRoaXMgY29uc3RydWN0IG9jY3VycyBvbmx5IGluIHRoZSByZWYtbWFudWFsDQorYm9vaydzIHFhIGlzc3VlcyBhbmQgd2FybmluZ3MgY2hhcHRlci4gIEhvd2V2ZXIsIGlmIHRoZSBjb25zdHJ1Y3QNCit3ZXJlIHRvIGFwcGVhciBhbnl3aGVyZSBpbiB0aGF0IHJlZi1tYW51YWwsIGEgcGVybWFsaW5rIHdvdWxkIGJlDQorZ2VuZXJhdGVkLiAgSSBkb24ndCBmb3Jlc2VlIGFueSA8cGFyYT48Y29kZT4gY29uc3RydWN0cyBiZWluZyB1c2VkDQoraW4gdGhlIGZ1dHVyZSBidXQgaWYgdGhleSBhcmUgdGhlbiBhIHBlcm1hbGluayB3aXRoIGEgZ2VuZXJpY2FsbHkNCitudW1iZXJlZCBwZXJtYWxpbmsgd291bGQgYmUgZ2VuZXJhdGVkLg0KKy0tPg0KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiDQorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIg0KKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KKw0KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icGFyYS9jb2RlIj4NCisgICAgPHhzbDphcHBseS1pbXBvcnRzLz4NCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9IDAiPg0KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPg0KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLi4iLz4NCisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICA8L3hzbDppZj4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNmZmOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wKQEAgLTAsMCArMSw1NSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJzZWN0aW9uIgorICAgICAgc2VsZWN0PSIoYW5jZXN0b3I6OnNlY3Rpb24gfAorICAgICAgICAgICAgICAgYW5jZXN0b3I6OnNpbXBsZXNlY3R8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDF8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDJ8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDN8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDR8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2VjdDUpW2xhc3QoKV0iLz4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVuZGVyYXMiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDEnIj4xPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MiciPjI8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QzJyI+MzwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDQnIj40PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NSciPjU8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJyciLz48L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImxldmVsIj4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHJlbmRlcmFzICE9ICcnIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHJlbmRlcmFzIi8+CisgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgorICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLmxldmVsIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorCisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24uaGVhZGluZyI+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic2VjdGlvbiIgc2VsZWN0PSIkc2VjdGlvbiIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImxldmVsIiBzZWxlY3Q9IiRsZXZlbCIvPgorICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRpdGxlIj4KKyAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkc2VjdGlvbiIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICAgIDx4c2w6aWYgdGVzdD0iJGxldmVsICZndDsgMCI+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkc2VjdGlvbiIvPgorICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgICAgIDwveHNsOmlmPgorICAgICAgPC94c2w6d2l0aC1wYXJhbT4KKyAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbApAQCAtMCwwICsxLDEyMjcgQEAKKzwhRE9DVFlQRSB0OnRlbXBsYXRlcyBbCis8IUVOVElUWSBoc2l6ZTAgIjEwcHQiPgorPCFFTlRJVFkgaHNpemUxICIxMnB0Ij4KKzwhRU5USVRZIGhzaXplMiAiMTQuNHB0Ij4KKzwhRU5USVRZIGhzaXplMyAiMTcuMjhwdCI+Cis8IUVOVElUWSBoc2l6ZTQgIjIwLjczNnB0Ij4KKzwhRU5USVRZIGhzaXplNSAiMjQuODgzMnB0Ij4KKzwhRU5USVRZIGhzaXplMHNwYWNlICI3LjVwdCI+IDwhLS0gMC43NSAqIGhzaXplMCAtLT4KKzwhRU5USVRZIGhzaXplMXNwYWNlICI5cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTEgLS0+Cis8IUVOVElUWSBoc2l6ZTJzcGFjZSAiMTAuOHB0Ij4gPCEtLSAwLjc1ICogaHNpemUyIC0tPgorPCFFTlRJVFkgaHNpemUzc3BhY2UgIjEyLjk2cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTMgLS0+Cis8IUVOVElUWSBoc2l6ZTRzcGFjZSAiMTUuNTUycHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTQgLS0+Cis8IUVOVElUWSBoc2l6ZTVzcGFjZSAiMTguNjYyNHB0Ij4gPCEtLSAwLjc1ICogaHNpemU1IC0tPgorXT4KKzx0OnRlbXBsYXRlcyB4bWxuczp0PSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAiCisJICAgICB4bWxuczpwYXJhbT0iaHR0cDovL253YWxzaC5jb20vZG9jYm9vay94c2wvdGVtcGxhdGUvMS4wL3BhcmFtIgorICAgICAgICAgICAgIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisgICAgICAgICAgICAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgorCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICRJZDogdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwsdiAxLjIzIDIwMDMvMTIvMTYgMDA6MzA6NDkgYm9ic3RheXRvbiBFeHAgJAorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEb2NCb29rIFhTTCBTdHlsZXNoZWV0IGRpc3RyaWJ1dGlvbi4KKyAgICAgU2VlIC4uL1JFQURNRSBvciBodHRwOi8vZG9jYm9vay5zZi5uZXQvIGZvciBjb3B5cmlnaHQKKyAgICAgYW5kIG90aGVyIGluZm9ybWF0aW9uLgorCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJhcnRpY2xlIiB0OndyYXBwZXI9ImZvOmJsb2NrIgorICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ij4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIgorICAgICAgICAgICAgIHRleHQtYWxpZ249ImNlbnRlciI+CisKKyAgICA8bWVkaWFvYmplY3QvPgkgICAgIAorCisgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjphcnRpY2xlWzFdIgorCSAgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICBmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgPHN1YnRpdGxlIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIgorICAgICAgIHNwYWNlLWFmdGVyPSIwLjhlbSIvPgorCisgICAgPGNvcnBhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTM7Ii8+CisgICAgPGF1dGhvcmdyb3VwIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKyAgICA8YXV0aG9yIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7IiAKKyAgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjhlbSIvPgorCisgICAgPGVtYWlsIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgIDxvdGhlcmNyZWRpdCBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPHJlbGVhc2VpbmZvIHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8Y29weXJpZ2h0IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8bGVnYWxub3RpY2UgdGV4dC1hbGlnbj0ic3RhcnQiCisgICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0PSIwLjVpbiIKKyAgICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0PSIwLjVpbiIKKyAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskYm9keS5mb250c2V0fSIvPgorICAgIDxwdWJkYXRlIHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKwk8cGFyYT48L3BhcmE+CisgICAgPHJldmlzaW9uIHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8cmV2aGlzdG9yeSBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGFic3RyYWN0IHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgdGV4dC1hbGlnbj0ic3RhcnQiCisJICAgICAgbWFyZ2luLWxlZnQ9IjAuNWluIgorICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ9IjAuNWluIgorICAgICAgICAgICAgICBmb250LWZhbWlseT0ieyRib2R5LmZvbnRzZXR9Ii8+CisKKyAgICA8cGFyYT48L3BhcmE+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2V0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImRpdmlzaW9uLnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6c2V0WzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImJvb2siIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorCisgICAgICA8bWVkaWFvYmplY3QvPgkgICAgIAorCisgICAgICA8c3VidGl0bGUKKwkJdGV4dC1hbGlnbj0iY2VudGVyIgorCQlmb250LXNpemU9IiZoc2l6ZTQ7IgorCQlzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCQkgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJCSAgc3BhY2UtYmVmb3JlPSIyaW4iLz4KKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjJpbiIvPgorICAgICAgPGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplMnNwYWNlOyIKKwkgICAgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIi8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwIHQ6bmFtZWQtdGVtcGxhdGU9InZlcnNvLmF1dGhvcmdyb3VwIi8+CisgICAgICA8YXV0aG9yLz4KKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cHViZGF0ZSBzcGFjZS1iZWZvcmU9IjFlbSIvPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8YWJzdHJhY3QvPgorICAgICAgPGxlZ2Fsbm90aWNlIGZvbnQtc2l6ZT0iOHB0Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgICAgPGZvOmJsb2NrIGJyZWFrLWFmdGVyPSJwYWdlIi8+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgICA8Zm86YmxvY2sgYnJlYWstYWZ0ZXI9InBhZ2UiLz4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwYXJ0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImRpdmlzaW9uLnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6cGFydFsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU0c3BhY2U7IgorCSAgICAgIGZvbnQtd2VpZ2h0PSdib2xkJworCSAgICAgIGZvbnQtc3R5bGU9J2l0YWxpYycKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InBhcnRpbnRybyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgIHNwYWNlLWJlZm9yZT0iMWVtIgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisJICAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICAgZm9udC1zdHlsZT0iaXRhbGljIgorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmZXJlbmNlIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImRpdmlzaW9uLnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6cmVmZXJlbmNlWzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzeW5vcHNpc2RpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdGlvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDEiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QyIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJkZWRpY2F0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmRlZGljYXRpb25bMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InByZWZhY2UiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6cHJlZmFjZVsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cC8+CisgICAgICA8YXV0aG9yLz4KKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cmVsZWFzZWluZm8vPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8bGVnYWxub3RpY2UvPgorICAgICAgPHB1YmRhdGUvPgorICAgICAgPHJldmlzaW9uLz4KKyAgICAgIDxyZXZoaXN0b3J5Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImNoYXB0ZXIiIHQ6d3JhcHBlcj0iZm86YmxvY2siCisgICAgICAgICAgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byIgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9Ij4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpjaGFwdGVyWzFdIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICAgIDxzdWJ0aXRsZSBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCQlmb250LXN0eWxlPSJpdGFsaWMiCisJCWZvbnQtc2l6ZT0iJmhzaXplMjsiCisJCWZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICAgIDxjb3JwYXV0aG9yICBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPGF1dGhvcmdyb3VwIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8YXV0aG9yICAgICAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cmVsZWFzZWluZm8vPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8bGVnYWxub3RpY2UvPgorICAgICAgPHB1YmRhdGUvPgorICAgICAgPHJldmlzaW9uLz4KKyAgICAgIDxyZXZoaXN0b3J5Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImFwcGVuZGl4IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YXBwZW5kaXhbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdGlvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDEiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QyIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Q1IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzaW1wbGVzZWN0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImJpYmxpb2dyYXBoeSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpiaWJsaW9ncmFwaHlbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImJpYmxpb2RpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YmlibGlvZGl2WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU0OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJnbG9zc2FyeSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpnbG9zc2FyeVsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZ2xvc3NkaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6Omdsb3NzZGl2WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU0OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJpbmRleCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjppbmRleFsxXSIKKyAgICAgICAgICAgICBwYXJhbTpwYWdld2lkZT0iMSIKKwkgICAgIG1hcmdpbi1sZWZ0PSIwcHQiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDwhLS0gVGhlIGluZGV4ZGl2LnRpdGxlIHRlbXBsYXRlIGlzIHVzZWQgc28gdGhhdCBtYW51YWwgYW5kIC0tPgorICA8IS0tIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGluZGV4ZGl2IHRpdGxlcyBnZXQgdGhlIHNhbWUgLS0+CisgIDwhLS0gZm9ybWF0dGluZy4gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iaW5kZXhkaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJpbmRleGRpdi50aXRsZSIKKwkgICAgIHBhcmFtOnRpdGxlPSJ0aXRsZSIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNldGluZGV4IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnNldGluZGV4WzFdIgorICAgICAgICAgICAgIHBhcmFtOnBhZ2V3aWRlPSIxIgorCSAgICAgbWFyZ2luLWxlZnQ9IjBwdCIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iY29sb3Bob24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Y29sb3Bob25bMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InRhYmxlLm9mLmNvbnRlbnRzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidUYWJsZW9mQ29udGVudHMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnRhYmxlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mVGFibGVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5maWd1cmVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZGaWd1cmVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5leGFtcGxlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mRXhhbXBsZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmVxdWF0aW9ucyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mRXF1YXRpb25zJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5wcm9jZWR1cmVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZQcm9jZWR1cmVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi51bmtub3ducyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mVW5rbm93biciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8L3Q6dGVtcGxhdGVzPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3lvY3RvLXByb2plY3QtcXMucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3lvY3RvLXByb2plY3QtcXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzQ0MmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdGVtcGxhdGUveW9jdG8tcHJvamVjdC1xcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmVhN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZmNlMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2VhMzljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODY5NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2VtYmVkZGVkX3ZpZGVvLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iid0b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOWUwOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtaW50cm8ueG1sCkBAIC0wLDAgKzEsMTcyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndG9hc3Rlci1tYW51YWwtaW50cm8nPgorPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG9hc3RlciBpcyBhIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgorICAgICAgICBUaGUgaW50ZXJmYWNlIGVuYWJsZXMgeW91IHRvIGNvbmZpZ3VyZSBhbmQgcnVuIHlvdXIgYnVpbGRzLgorICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBidWlsZHMgaXMgY29sbGVjdGVkIGFuZCBzdG9yZWQgaW4gYSBkYXRhYmFzZS4KKyAgICAgICAgWW91IGNhbiB1c2UgVG9hc3RlciB0byBjb25maWd1cmUgYW5kIHN0YXJ0IGJ1aWxkcyBvbiBtdWx0aXBsZQorICAgICAgICByZW1vdGUgYnVpbGQgc2VydmVycy4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHJlbGVhc2Ugb2YgVG9hc3RlciBkb2VzIGFsbG93IHlvdSB0byBjb25maWd1cmUgYW5kIGluaXRpYXRlCisgICAgICAgICAgICBidWlsZHMuCisgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2Fubm90IHVzZSBUb2FzdGVyIHRvIGN1c3RvbWl6ZSBpbWFnZSByZWNpcGVzLCB3aGljaAorICAgICAgICAgICAgc3RpbGwgbXVzdCBlaXRoZXIgYmUgZG9uZSBieSBoYW5kIG9yIHRocm91Z2gKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgICAgICBBcyBUb2FzdGVyIG1hdHVyZXMsIGl0IGV2ZW50dWFsbHkgd2lsbCBlcXVhbCBhbmQgc3VycGFzcyBIb2IKKyAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIGF0IHdoaWNoIHRpbWUgSG9iIHdpbGwgYmUgZGVwcmVjYXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gSG9iLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2ltYWdlLWRldmVsb3BtZW50LXVzaW5nLWhvYic+SW1hZ2UgRGV2ZWxvcG1lbnQgVXNpbmcgSG9iPC91bGluaz4iCisgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorCisgICAgPHNlY3Rpb24gaWQ9J2ludHJvLW1vZGVzJz4KKyAgICAgICAgPHRpdGxlPlRvYXN0ZXIgT3BlcmF0aW9uYWwgTW9kZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB1c2UgVG9hc3RlciBpbiBBbmFseXNpcyBNb2RlIG9yIEJ1aWxkIE1vZGU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QW5hbHlzaXMgTW9kZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbiBBbmFseXNpcyBNb2RlLCB5b3UgY2FuIHJlY29yZCBidWlsZHMgYW5kIHN0YXRpc3RpY3MuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgTW9kZSwgeW91IGRpcmVjdGx5IGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCB3aGljaCB5b3UgdGhlbiB1c2UgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaW1hZ2VzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QW5hbHlzaXMgTW9kZSByZXF1aXJlcyB5b3UgdG8gaGF2ZSBmaXJzdCBzdGFydGVkCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYW5kIHRoZW4gdG8gaW5pdGlhdGUgeW91ciBidWlsZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGZyb20gdGhlIHNoZWxsLgorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIG11c3QgYmUgc3RhcnRlZCBiZWZvcmUgdGhlIGJ1aWxkIG9yIGl0IHdpbGwgbm90CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3QgYnVpbGQgZGF0YS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvYXN0ZXIgaGFzIHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIGluCisgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIE1vZGU6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHdoYXQgd2FzIGJ1aWx0IChyZWNpcGVzIGFuZCBwYWNrYWdlcykgYW5kIHdoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB3ZXJlIGluc3RhbGxlZCBpbnRvIHlvdXIgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJvd3NlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSB2YWx1ZSBvZiBhbGwgdmFyaWFibGVzIGluIHlvdXIgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBhbmQgd2hpY2ggZmlsZXMgc2V0IGVhY2ggdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbWluZSBlcnJvciwgd2FybmluZyBhbmQgdHJhY2UgbWVzc2FnZXMgdG8gYWlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gZGVidWdnaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQml0QmFrZSB0YXNrcyBleGVjdXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXVzZWQgZHVyaW5nIHlvdXIgYnVpbGQsIGluY2x1ZGluZyB0aG9zZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHJlY2lwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgYW5kIHRhc2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgYnVpbGQgdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIHRpbWUsIENQVSB1c2FnZSwgYW5kIGRpc2sgSS9PLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIEJ1aWxkIE1vZGUsIFRvYXN0ZXIgaGFuZGxlcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGluZyBhbmQgZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIG1vZGUsIGFsbCB5b3VyIGludGVyYWN0aW9uIHdpdGggdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyB0aGlzIG1vZGUsIHlvdSBjb25maWd1cmUgYW5kIHN0YXJ0IHlvdXIgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBUb2FzdGVyJ3MgR1VJLgorICAgICAgICAgICAgICAgICAgICBFYWNoIHByb2plY3QgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGEgc3BlY2lmaWMgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIHN1cHBvcnRzIFlvY3RvIFByb2plY3QgUmVsZWFzZXMgMS43IGFuZAorICAgICAgICAgICAgICAgICAgICBiZXlvbmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Ub2FzdGVyIGhhcyBhbGwgdGhlIHNhbWUgY2FwYWJpbGl0aWVzIGluIEJ1aWxkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgYXMgaXQgZG9lcyBpbiBBbmFseXNpcyBNb2RlIHBsdXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcm93c2UgbGF5ZXJzIGxpc3RlZCBpbiB0aGUgdmFyaW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xheWVyLXNvdXJjZSc+bGF5ZXIgc291cmNlczwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFyZSBhdmFpbGFibGUgaW4geW91ciBwcm9qZWN0IChlLmcuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4Lyc+PC91bGluaz4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltcG9ydCB5b3VyIG93biBsYXllcnMgZm9yIGJ1aWxkaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBhbmQgcmVtb3ZlIGxheWVycyBmcm9tIHlvdXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IGEgdGFyZ2V0IG9yIG11bHRpcGxlIHRhcmdldHMgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgeW91ciBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItaW5zdGFsbGF0aW9uLW9wdGlvbnMnPgorICAgICAgICA8dGl0bGU+SW5zdGFsbGF0aW9uIE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBzZXQgVG9hc3RlciB1cCB0byBydW4gYXMgYSBsb2NhbCBpbnN0YW5jZSBvciBhcyBhIHNoYXJlZAorICAgICAgICAgICAgaG9zdGVkIHNlcnZpY2UuCisgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIGhvdyB5b3Ugc2V0IHVwIFRvYXN0ZXIsIGJvdGggQW5hbHlzaXMgYW5kIEJ1aWxkCisgICAgICAgICAgICBNb2RlcyBhcmUgYXZhaWxhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIFRvYXN0ZXIgaXMgc2V0IHVwIGFzIGEgbG9jYWwgaW5zdGFuY2UsIGFsbCB0aGUgY29tcG9uZW50cworICAgICAgICAgICAgcmVzaWRlIG9uIGEgc2luZ2xlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICBGdW5kYW1lbnRhbGx5LCBhIGxvY2FsIGluc3RhbmNlIG9mIFRvYXN0ZXIgaXMgc3VpdGVkIGZvciBhIHNpbmdsZQorICAgICAgICAgICAgdXNlciBkZXZlbG9waW5nIG9uIGEgc2luZ2xlIGJ1aWxkIGhvc3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSIxLjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG9hc3RlciBhcyBhIGhvc3RlZCBzZXJ2aWNlIGlzIHN1aXRlZCBmb3IgbXVsdGlwbGUgdXNlcnMKKyAgICAgICAgICAgIGRldmVsb3BpbmcgYWNyb3NzIHNldmVyYWwgYnVpbGQgaG9zdHMuCisgICAgICAgICAgICBXaGVuIFRvYXN0ZXIgaXMgc2V0IHVwIGFzIGEgaG9zdGVkIHNlcnZpY2UsIGl0cyBjb21wb25lbnRzIGNhbgorICAgICAgICAgICAgYmUgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIG1hY2hpbmVzOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iMy41aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKzwhLS1USElTIEVYVFJBIElORk9STUFUSU9OIFBST0JBQkxZIFdJTEwgR08gQVdBWQorICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBpbnN0YWxsaW5nIGFuZCBydW5uaW5nIFRvYXN0ZXIsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVG9hc3RlciNJbnN0YWxsYXRpb25fYW5kX1J1bm5pbmcnPkluc3RhbGxhdGlvbiBhbmQgUnVubmluZzwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIG9mIHRoZSAiVG9hc3RlciIgd2lraSBwYWdlLgorICAgICAgICBGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gdGhlIEFQSSBhbmQgaXRzIHNlYXJjaCBvcGVyYXRpb24KKyAgICAgICAgVVJJLCBwYXJhbWV0ZXJzLCBhbmQgcmVzcG9uc2VzLCBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvUkVTVF9BUElfQ29udHJhY3RzJz5SRVNUIEFQSSBDb250cmFjdHM8L3VsaW5rPgorICAgICAgICBXaWtpIHBhZ2UuCisgICAgPC9wYXJhPgorLS0+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTQwMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbApAQCAtMCwwICsxLDEwNzggQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UnPgorCis8dGl0bGU+Q29uY2VwdHMgYW5kIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gb3JkZXIgdG8gY29uZmlndXJlIGFuZCB1c2UgVG9hc3RlciwgeW91IHNob3VsZCB1bmRlcnN0YW5kIHNvbWUKKyAgICAgICAgY29uY2VwdHMgYW5kIGhhdmUgc29tZSBiYXNpYyBjb21tYW5kIHJlZmVyZW5jZSBtYXRlcmlhbCBhdmFpbGFibGUuCisgICAgICAgIFRoaXMgZmluYWwgY2hhcHRlciBwcm92aWRlcyBjb25jZXB0dWFsIGluZm9ybWF0aW9uIG9uIGxheWVyIHNvdXJjZXMsCisgICAgICAgIHJlbGVhc2VzLCBhbmQgSlNPTiBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICBBbHNvIHByb3ZpZGVkIGlzIGEgcXVpY2sgbG9vayBhdCBzb21lIHVzZWZ1bAorICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgdGhhdCBhcmUgVG9hc3Rlci1zcGVjaWZpYy4KKyAgICAgICAgSW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGRvZXMgZXhpc3QKKyAgICAgICAgYWNyb3NzIHRoZSBXZWIgYW5kIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIG1hbnVhbCBieSBubyBtZWFucworICAgICAgICBhdHRlbXB0cyB0byBwcm92aWRlIGEgY29tbWFuZCBjb21wcmVoZW5zaXZlIHJlZmVyZW5jZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbGF5ZXItc291cmNlJz4KKyAgICAgICAgPHRpdGxlPkxheWVyIFNvdXJjZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhICJsYXllciBzb3VyY2UiIGlzIGEgc291cmNlIG9mIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgICBleGlzdGluZyBsYXllcnMuCisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB3ZSBhcmUgY29uY2VybmVkIHdpdGggbGF5ZXJzIHRoYXQgeW91IGNhbiB1c2UKKyAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYW5kIFRvYXN0ZXIuCisgICAgICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGEgcGFydGljdWxhciB0eXBlIG9mIGxheWVyIHNvdXJjZSBjYWxsZWQKKyAgICAgICAgICAgIGEgImxheWVyIGluZGV4LiIKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBsYXllciBpbmRleCBpcyBhIHdlYiBhcHBsaWNhdGlvbiB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uCisgICAgICAgICAgICBhYm91dCBhIHNldCBvZiBjdXN0b20gbGF5ZXJzLgorICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgaW5kZXggaXMgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgTWV0YWRhdGEgSW5kZXguCisgICAgICAgICAgICBBIHB1YmxpYyBpbnN0YW5jZSBvZiB0aGlzIGxheWVyIGluZGV4IGV4aXN0cyBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnJz48L3VsaW5rPi4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgY29kZSBmb3IgdGhpcyBsYXllciBpbmRleCdzIHdlYiBhcHBsaWNhdGlvbiBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbGF5ZXJpbmRleC13ZWIvJz48L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgdGllIGEgbGF5ZXIgc291cmNlIGludG8gVG9hc3RlciwgaXQgY2FuIHF1ZXJ5IHRoZSBsYXllcgorICAgICAgICAgICAgc291cmNlIHRocm91Z2ggYQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZXByZXNlbnRhdGlvbmFsX3N0YXRlX3RyYW5zZmVyJz5SRVNUPC91bGluaz4KKyAgICAgICAgICAgIEFQSSwgc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXllcnMgaW4gdGhlIFRvYXN0ZXIKKyAgICAgICAgICAgIGRhdGFiYXNlLCBhbmQgdGhlbiBzaG93IHRoZSBpbmZvcm1hdGlvbiB0byB1c2Vycy4KKyAgICAgICAgICAgIFVzZXJzIGFyZSB0aGVuIGFibGUgdG8gdmlldyB0aGF0IGluZm9ybWF0aW9uIGFuZCBidWlsZCBsYXllcnMKKyAgICAgICAgICAgIGZyb20gVG9hc3RlciBpdHNlbGYgd2l0aG91dCB3b3JyeWluZyBhYm91dCBjbG9uaW5nIG9yIGVkaXRpbmcKKyAgICAgICAgICAgIHRoZSBCaXRCYWtlIGxheWVycyBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFR5aW5nIGEgbGF5ZXIgc291cmNlIGludG8gVG9hc3RlciBpcyBjb252ZW5pZW50IHdoZW4geW91IGhhdmUKKyAgICAgICAgICAgIG1hbnkgY3VzdG9tIGxheWVycyB0aGF0IG5lZWQgdG8gYmUgYnVpbHQgb24gYSByZWd1bGFyIGJhc2lzIGJ5CisgICAgICAgICAgICBhIGNvbW11bml0eSBvZiBkZXZlbG9wZXJzLgorICAgICAgICAgICAgSW4gZmFjdCwgVG9hc3RlciBjb21lcyBwcmUtY29uZmlndXJlZCB3aXRoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIE1ldGFkYXRhIEluZGV4LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIHVzZSBhIGxheWVyIHNvdXJjZSB0byB1c2UgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICBUeWluZyBpbnRvIGEgbGF5ZXIgc291cmNlIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xheWVyLXNvdXJjZS11c2luZy13aXRoLXRvYXN0ZXInPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgYW5kIFVzaW5nIGEgTGF5ZXIgU291cmNlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gdXNlIHlvdXIgb3duIGxheWVyIHNvdXJjZSwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBsYXllcgorICAgICAgICAgICAgICAgIHNvdXJjZSBhbmQgdGhlbiB0aWUgaXQgaW50byBUb2FzdGVyLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIHRpZSBpbnRvIGEgbGF5ZXIgaW5kZXggaW4gYSBtYW5uZXIKKyAgICAgICAgICAgICAgICBzaW1pbGFyIHRvIHRoZSB3YXkgVG9hc3RlciB0aWVzIGludG8gdGhlIE9wZW5FbWJlZGRlZCBNZXRhZGF0YQorICAgICAgICAgICAgICAgIEluZGV4LgorICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kaW5nLXlvdXItbGF5ZXJzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VW5kZXJzdGFuZGluZyBZb3VyIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBmb3IgdXNpbmcgYSBsYXllciBpbmRleCBpcyB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIHNldmVyYWwgY3VzdG9tIGxheWVycyB0aGF0IGRldmVsb3BlcnMgYnVpbGQgYW5kIGFjY2VzcyB1c2luZworICAgICAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBvbiBhIHJlZ3VsYXIgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2V0IG9mIGxheWVycyBuZWVkcyB0byBleGlzdCBhbmQgeW91IG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgZmFtaWxpYXIgd2l0aCB3aGVyZSB0aGV5IHJlc2lkZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgbmVlZCB0aGF0IGluZm9ybWF0aW9uIHdoZW4geW91IHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29kZSBmb3IgdGhlIHdlYiBhcHBsaWNhdGlvbiB0aGF0ICJob29rcyIgaW50byB5b3VyIHNldCBvZgorICAgICAgICAgICAgICAgICAgICBsYXllcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIGxheWVycywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I3VzaW5nLXRoZS15b2N0by1wcm9qZWN0cy1ic3AtdG9vbHMnPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0J3MgQlNQIFRvb2xzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10b2FzdGVyLXRvLWhvb2staW50by15b3VyLWxheWVyLXNvdXJjZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIFRvYXN0ZXIgdG8gSG9vayBJbnRvIFlvdXIgTGF5ZXIgSW5kZXg8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IFRvYXN0ZXIgdG8gdXNlIHlvdXIgbGF5ZXIgaW5kZXgsIHlvdSBtdXN0IGhvc3QKKyAgICAgICAgICAgICAgICAgICAgdGhlIHdlYiBhcHBsaWNhdGlvbiBpbiBhIHNlcnZlciB0byB3aGljaCBUb2FzdGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBjb25uZWN0LgorICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIHRvIGdpdmUgVG9hc3RlciB0aGUgaW5mb3JtYXRpb24gYWJvdXQgeW91cgorICAgICAgICAgICAgICAgICAgICBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBoYXZlIHRvIGNvbmZpZ3VyZSBUb2FzdGVyIHRvIHVzZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGluZGV4LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHR3byBtZXRob2RzIGJ5IHdoaWNoIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGFuZCB1c2UgeW91ciBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoZSBjb2RlIGZvciB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIE1ldGFkYXRhIEluZGV4IChpLmUuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZyc+PC91bGluaz4pIHdhcworICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIGNvZGUsIHdoaWNoIGlzIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL2xheWVyaW5kZXgtd2ViLyc+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFzIGEgYmFzZSB0byBjcmVhdGUgeW91ciBvd24gbGF5ZXIgaW5kZXguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3VzZS10aGUtYWRtaW5pc3RyYXRpb24taW50ZXJmYWNlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzZSB0aGUgQWRtaW5pc3RyYXRpb24gSW50ZXJmYWNlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlIHRocm91Z2ggYQorICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciBieSBlbnRlcmluZyB0aGUgVVJMIG9mIHlvdXIgVG9hc3RlciBpbnN0YW5jZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGluZyAiPGZpbGVuYW1lPi9hZG1pbjwvZmlsZW5hbWU+IiB0byB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVVJMLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGFyZSBydW5uaW5nIFRvYXN0ZXIgbG9jYWxseSwgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIFVSTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cDovLzEyNy4wLjAuMTo4MDAwL2FkbWluCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UgaGFzIGEgIkxheWVyIHNvdXJjZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIHRoYXQgaW5jbHVkZXMgYW4gIkFkZCBsYXllciBzb3VyY2UiIGJ1dHRvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoYXQgYnV0dG9uIGFuZCBwcm92aWRlIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB5b3Ugc2VsZWN0ICJsYXllcmluZGV4IiBhcyB0aGUgbGF5ZXIgc291cmNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2VsZWN0LXRoZS10b2FzdGVyY29uZi1qc29uLWZpbGUnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNlIHRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRvIHVzZSB0aGUgQWRtaW5pc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZSwgeW91IGNhbiBlZGl0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1qc29uLWZpbGVzJz48ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgcmVsb2FkIGl0IHRvIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNldCB1cCBUb2FzdGVyIGluIEJ1aWxkIE1vZGUsIHlvdSBhcmUgcHJvbXB0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNlbGVjdCBhIFRvYXN0ZXIgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgdXNlZCB0byBzZXQgdXAgdGhlIGluaXRpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHdpdGhpbiB0aGUgVG9hc3RlciBkYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBsYXllciBzb3VyY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWUgdmVyc2lvbnMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIHByb21wdGVkIHRvIHNlbGVjdCB0aGlzIGZpbGUgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIHNldCB1cCBwcm9jZXNzIGlmIHlvdSBoYWQgY2xvbmVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPm1ldGEvY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvbXB0ZWQgdG8gc2VsZWN0IHRoaXMgZmlsZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgc2V0IHVwIHByb2Nlc3MgaWYgeW91IGhhZCBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0aGlyZCB2ZXJzaW9uIGlzIGEgc2FtcGxlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvIHNldCB1cCBhIGhvc3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGluIEJ1aWxkIE1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIHZlcnNpb24gb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvRmlsZTpUb2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaCc+RmlsZTpUb2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdlZGl0LXRoZS1jb25maWd1cmF0aW9uLWZpbGUnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+RWRpdCB0aGUgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgdGhlIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIHNldCB1cCB5b3VyIFRvYXN0ZXIgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZmlsZSwgeW91IHdpbGwgZmluZCBhIHNlY3Rpb24gZm9yIGxheWVyIHNvdXJjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJMb2NhbCBZb2N0byBQcm9qZWN0IiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdLAorICAgICAgICAgICAgICJsYXllcnMiOiBbCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm9wZW5lbWJlZGRlZC1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8tYnNwIgorICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICBdCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibGF5ZXJpbmRleCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0KKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiLCAiSEVBRCJdCisKKyAgICAgICAgIH0KKyAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWRkIHlvdXIgb3duIGxheWVyIHNvdXJjZSB0byB0aGlzIHNlY3Rpb24gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyB0aGUgc2FtZSBmb3JtYXQgdXNlZCBmb3IgdGhlICJPcGVuRW1iZWRkZWQiCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBzb3VyY2Ugc2hvd24gYWJvdmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdmUgeW91ciBsYXllciBzb3VyY2UgYSBuYW1lLCBwcm92aWRlIHRoZSBVUkwgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgc291cmNlIEFQSSwgdXNlIHRoZSBzb3VyY2UgdHlwZSAibGF5ZXJpbmRleCIsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGUgd2hpY2ggYnJhbmNoZXMgZnJvbSB5b3VyIGxheWVyIHNvdXJjZSB5b3Ugd2FudAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gbWFrZSBhdmFpbGFibGUgdGhyb3VnaCBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBPcGVuRW1iZWRkZWQgbGF5ZXIgc291cmNlIG1ha2VzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgb25seSBpdHMgIm1hc3RlciIsICJmaWRvIiwgYW5kICJkaXp6eSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnJhbmNoZXMgbXVzdCBtYXRjaCB0aGUgYnJhbmNoIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gY29uZmlndXJpbmcgeW91ciByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgY29uZmlndXJlIG9uZSByZWxlYXNlIGluIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHNldHRpbmcgaXRzIGJyYW5jaCB0byAiYnJhbmNoLW9uZSIgYW5kIHlvdSBjb25maWd1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFub3RoZXIgcmVsZWFzZSBpbiBUb2FzdGVyIGJ5IHNldHRpbmcgaXRzIGJyYW5jaCB0bworICAgICAgICAgICAgICAgICAgICAgICAgImJyYW5jaC10d28iLCB0aGUgYnJhbmNoZXMgaW4geW91ciBsYXllciBzb3VyY2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICBiZSAiYnJhbmNoLW9uZSIgYW5kICJicmFuY2gtdHdvIiBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gY3JlYXRlcyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVsZWFzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgbGF5ZXIgaW5mb3JtYXRpb24gZnJvbSB5b3VyIGxheWVyIHNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIHdoZW4gdXNlcnMgY3JlYXRlIGEgcHJvamVjdCB3aXRoIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UsIHRoZXkgd2lsbCBzZWUgdGhlIGFwcHJvcHJpYXRlIGxheWVycyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGxheWVyIHNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29ubmVjdGlvbiBlbnN1cmVzIHRoYXQgb25seSBsYXllcnMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgc2VsZWN0ZWQgcHJvamVjdCByZWxlYXNlIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZm9yIGJ1aWxkaW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGFkZGVkIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUsIHNhdmUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gYSB0ZXJtaW5hbCB3aW5kb3csIG5hdmlnYXRlIHRvIHRoZSBkaXJlY3RvcnkgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIFRvYXN0ZXIgZGF0YWJhc2UsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByb290IG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgbG9jYXRlZCBpbiB0aGF0IGRpcmVjdG9yeSwgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+IiBjb21tYW5kLCB3aGljaCB0YWtlcyBhcworICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJndW1lbnQgdGhlIGZ1bGwgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSB5b3UganVzdCBlZGl0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGNsb25lZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBhbmQgeW91IGVkaXRlZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvdG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugd291bGQgdHlwZSBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIGVudGVyaW5nIHRoaXMgY29tbWFuZCwgeW91IG5lZWQgdG8gdXBkYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBkYXRhYmFzZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBjb21pbmcgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhhdCwgeW91IHNob3VsZCBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmxzdXBkYXRlczwvZmlsZW5hbWU+IiBjb21tYW5kIGZyb20gdGhlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgVG9hc3RlciBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIFRvYXN0ZXIgY2FuIHJlYWNoIHRoZSBBUEkgVVJMLCB5b3Ugc2hvdWxkIHNlZSBhIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbGxpbmcgeW91IHRoYXQgVG9hc3RlciBpcyB1cGRhdGluZyB0aGUgbGF5ZXIgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgaW5mb3JtYXRpb24gaGFzIGJlZW4gdXBkYXRlZCwgdmVyaWZ5IHRoZSBuZXcgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBieSB1c2luZyB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhhdCwgdmlzaXQgdGhlICJBbGwgY29tcGF0aWJsZSBsYXllcnMiIHBhZ2UgaW5zaWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsYXllcnMgZnJvbSB5b3VyIGxheWVyIHNvdXJjZSBzaG91bGQgYmUgbGlzdGVkIHRoZXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItcmVsZWFzZXMnPgorICAgICAgICA8dGl0bGU+UmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgVG9hc3RlciBwcm9qZWN0IHVzaW5nIHRoZSB3ZWIgaW50ZXJmYWNlLAorICAgICAgICAgICAgeW91IGFyZSBhc2tlZCB0byBjaG9vc2UgYSAiUmVsZWFzZS4iCisgICAgICAgICAgICBJbiB0aGUgY29udGV4dCBvZiBUb2FzdGVyLCB0aGUgdGVybSAiUmVsZWFzZSIgcmVmZXJzIHRvIGEgc2V0IG9mCisgICAgICAgICAgICBsYXllcnMgYW5kIGEgQml0QmFrZSB2ZXJzaW9uIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgIHRvIGJ1aWxkIHNvbWV0aGluZy4KKyAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgaXMgcHJlLWNvbmZpZ3VyZWQgd2l0aCByZWxlYXNlcyB0aGF0CisgICAgICAgICAgICBjb3JyZXNwb25kIHRvIFlvY3RvIFByb2plY3QgcmVsZWFzZSBicmFuY2hlcy4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gbW9kaWZ5LCBkZWxldGUsIGFuZCBjcmVhdGUgbmV3IHJlbGVhc2VzCisgICAgICAgICAgICBhY2NvcmRpbmcgdG8geW91ciBuZWVkcy4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gcmVsZWFzZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1yZWxlYXNlcy1zdXBwb3J0ZWQnPgorICAgICAgICAgICAgPHRpdGxlPlByZS1Db25maWd1cmVkIFJlbGVhc2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBjb25maWd1cmVkIHRvIHVzZSBhIHNwZWNpZmljIHNldCBvZgorICAgICAgICAgICAgICAgIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgeW91IGNhbiBhbHdheXMgY29uZmlndXJlIFRvYXN0ZXIgdG8gdXNlIGFueQorICAgICAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBtaWdodCB3YW50IHlvdXIgcHJvamVjdCB0byBidWlsZCBhZ2FpbnN0IGEKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBjb21taXQgb2YgYW55IG9mIHRoZSAib3V0LW9mLXRoZS1ib3giIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIE9yLCB5b3UgbWlnaHQgd2FudCB5b3VyIHByb2plY3QgdG8gYnVpbGQgYWdhaW5zdCBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICByZXZpc2lvbnMgb2YgT3BlbkVtYmVkZGVkIGFuZCBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gd29yayB3aXRoIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICByZWxlYXNlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgMS43ICJEaXp6eSIgb3IgT3BlbkVtYmVkZGVkICJEaXp6eSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIHByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSBkaXp6eSBicmFuY2ggYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWRpenp5Jz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2g9ZGl6enknPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCAxLjggIkZpZG8iIG9yIE9wZW5FbWJlZGRlZCAiRmlkbyI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIHByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSBmaWRvIGJyYW5jaCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9Zmlkbyc+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvY29tbWl0Lz9oPWZpZG8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCAiTWFzdGVyIiBvciBPcGVuRW1iZWRkZWQgIk1hc3RlciI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIFByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSBtYXN0ZXIgYnJhbmNoLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxvY2FsIFlvY3RvIFByb2plY3Qgb3IgTG9jYWwgT3BlbkVtYmVkZGVkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHJlbGVhc2UgY2F1c2VzIHlvdXIgVG9hc3RlciBQcm9qZWN0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYWdhaW5zdCB0aGUgaGVhZCBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4gY2xvbmUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGxvY2FsIHRvIHRoZSBtYWNoaW5lIHJ1bm5pbmcgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItcmVsZWFzZXMtY29tcHJpc2VkLW9mJz4KKyAgICAgICAgICAgIDx0aXRsZT5XaGF0IE1ha2VzIFVwIGEgUmVsZWFzZT88L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHJlbGVhc2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5hbWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZWxlYXNlICg8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBuYW1lIG5ldmVyIGFwcGVhcnMgaW4gdGhlIHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBhIHVzZXIgbmV2ZXIgc2VlcyB0aGUgcmVsZWFzZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVzY3JpcHRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmRlc2NyaXB0aW9uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkZXNjcmlwdGlvbiBpcyB3aGF0IHVzZXJzIGVuY291bnRlciB3aGVuIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0cyB3aXRoIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBjb25maWd1cmUgeW91ciByZWxlYXNlLCBiZSBzdXJlIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBkZXNjcmlwdGlvbiB0aGF0IHN1ZmZpY2llbnRseSBkZXNjcmliZXMgYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcnN0YW5kYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIFRvYXN0ZXIgaGFzIG1vcmUgdGhhbiBvbmUgcmVsZWFzZSBjb25maWd1cmVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgZGVzY3JpcHRpb25zIGFwcGVhciBsaXN0ZWQgaW4gYSBkcm9wIGRvd24gbWVudQorICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBhIHVzZXIgY3JlYXRlcyBhIG5ldyBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG9hc3RlciBoYXMgb25seSBvbmUgcmVsZWFzZSBjb25maWd1cmVkLCBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RzIGNyZWF0ZWQgdXNpbmcgdGhlIHdlYiBpbnRlcmZhY2UgdGFrZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlIGFuZCB0aGUgZHJvcCBkb3duIG1lbnUgZG9lcyBub3QgZGlzcGxheSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRiYWtlIHZlcnNpb24gKDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIGxheWVycyBzZXQgaW4gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBpcyBkZXNjcmliZWQgYnkgYSBuYW1lLCBhIEdpdCBVUkwsIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBpbiB0aGUgR2l0IFVSTCwgYW5kIGEgZGlyZWN0b3J5IHBhdGggaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc25pcHBldCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICBhIFRvYXN0ZXIgSlNPTiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEJpdEJha2UgdmVyc2lvbiB1c2VzIHRoZSBtYXN0ZXIgYnJhbmNoIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImJpdGJha2UiIDogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICAgfQorICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIG1vcmUgZGV0YWlsIG9uIGVhY2ggb2YgdGhlIGl0ZW1zIHRoYXQgY29tcHJpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCaXRCYWtlIHZlcnNpb246CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPikgdXNlZCB0byByZWZlciB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBvZiBCaXRCYWtlIHlvdSBhcmUgdXNpbmcgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5hbWUgaXMgbmV2ZXIgZXhwb3NlZCB0aHJvdWdoIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2l0IFVSTDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgVVJMICg8ZmlsZW5hbWU+Z2l0dXJsPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgQml0QmFrZSBHaXQgcmVwb3NpdG9yeSBjbG9uZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFRvYXN0ZXIgcHJvamVjdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBHaXQgYnJhbmNoLCBvciByZXZpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPikgb2YgdGhlIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB1c2VkIHdpdGggVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EaXJlY3RvcnkgUGF0aDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3ViLWRpcmVjdG9yeSBvZiB0aGUgQml0QmFrZSByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGlycGF0aDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIEdpdCBVUkwgaW5jbHVkZXMgbW9yZSB0aGFuIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LCB5b3UgbmVlZCB0byBzZXQgdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBVUkwgZG9lcyBub3QgaW5jbHVkZSBtb3JlIHRoYW4gYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSwgeW91IGNhbiBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcnBhdGg8L2ZpbGVuYW1lPiB0byBhIG51bGwgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuICIiKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJyYW5jaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJyYW5jaCBmb3IgdGhlIGxheWVyIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPikgdXNlZCB3aXRoIHRoZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGZvciB0aGUgT3BlbkVtYmVkZGVkIGxheWVyIHNvdXJjZSwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAibWFzdGVyIiwgImZpZG8iLCBhbmQgImRpenp5IiBicmFuY2hlcyBhcmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVmYXVsdCBMYXllcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgZGVmYXVsdCBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGVmYXVsdGxheWVyczwvZmlsZW5hbWU+KSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgcHJvamVjdCBjb25maWd1cmF0aW9uIHdoZW4gYSBwcm9qZWN0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGF5ZXIgU291cmNlIFByaW9yaXRpZXM8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBzcGVjaWZpY2F0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdsYXllci1zb3VyY2UnPmxheWVyIHNvdXJjZTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXRpZXMgKDxmaWxlbmFtZT5sYXllcnNvdXJjZXByaW9yaXR5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIFRvYXN0ZXIgdG8gd29yayBhcyBpbnRlbmRlZCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiSW1wb3J0ZWQgbGF5ZXJzIiBsYXllciBzb3VyY2Ugc2hvdWxkIGhhdmUgdGhlIGhpZ2hlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5LCB3aGljaCBtZWFucyB0aGF0IGxheWVycyBtYW51YWxseSBpbXBvcnRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMgd2l0aCB0aGUgIkltcG9ydCBsYXllciIgZnVuY3Rpb25hbGl0eSB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhbHdheXMgYmUgdmlzaWJsZSBhbmQgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5IZWxwIFRleHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlbHAgdGV4dCAoPGZpbGVuYW1lPmhlbHB0ZXh0PC9maWxlbmFtZT4pIHRoYXQgZXhwbGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgdGhlIHJlbGVhc2UgZG9lcyB3aGVuIHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBoZWxwIHRleHQgYXBwZWFycyBiZWxvdyB0aGUgcmVsZWFzZSBkcm9wLWRvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgd2hlbiB5b3UgY3JlYXRlIGEgVG9hc3RlciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGhlbHAgdGV4dCBzaG91bGQgYXNzaXN0IHVzZXJzIGluIG1ha2luZyB0aGUgY29ycmVjdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVjaXNpb24gcmVnYXJkaW5nIHRoZSByZWxlYXNlIHRvIHVzZSBmb3IgYSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBzdW1tYXJpemUgd2hhdCBjb21wcmlzZXMgYSByZWxlYXNlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgZXhhbXBsZSBmcm9tIGEgVG9hc3RlciBKU09OIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gbmFtZXMgdGhlIHJlbGVhc2UgIm1hc3RlciIgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgIm1hc3RlciIgYnJhbmNoIHByb3ZpZGVkIGJ5IHRoZSBsYXllciBzb3VyY2Ugb2YgdHlwZQorICAgICAgICAgICAgICAgICJsYXllcmluZGV4Iiwgd2hpY2ggaXMgY2FsbGVkICJPcGVuRW1iZWRkZWQiLCBhbmQgc2V0cworICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiBsYXllciBhcyB0aGUgb25lCisgICAgICAgICAgICAgICAgdG8gYmUgYWRkZWQgYnkgZGVmYXVsdCB0byBhbnkgcHJvamVjdHMgY3JlYXRlZCBpbiBUb2FzdGVyLgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIHZlcnNpb24gdXNlZCB3b3VsZCBiZSBkZWZpbmVkIGFzIHNob3duIGVhcmxpZXIKKyAgICAgICAgICAgICAgICBpbiB0aGUgcHJldmlvdXMgbGlzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgbWFzdGVyIiwKKyAgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIG1hc3RlciBicmFuY2gsIHdoZXJlIGFjdGl2ZSBkZXZlbG9wbWVudCB0YWtlcyBwbGFjZS4gVGhpcyBpcyBub3QgYSBzdGFibGUgYnJhbmNoLCBzbyB5b3VyIGJ1aWxkcyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZC4iCisgICAgICAgICB9CisgICAgIF0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1qc29uLWZpbGVzJz4KKyAgICAgICAgPHRpdGxlPkpTT04gRmlsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyBUb2FzdGVyIGluIEJ1aWxkIE1vZGUsIGl0IG11c3QKKyAgICAgICAgICAgIGJlIGluaXRpYWxseSBjb25maWd1cmVkIGJlZm9yZSB1c2UuCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIGN1c3RvbWl6ZXMgbGF5ZXIgc291cmNlIHNldHRpbmdzIGFuZCBUb2FzdGVyIGRlZmF1bHRzCisgICAgICAgICAgICBmb3IgYWxsIHVzZXJzIGFuZCBpcyBwZXJmb3JtZWQgYnkgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IKKyAgICAgICAgICAgIFRvYXN0ZXIgQ29uZmlndXJhdGlvbiAoaS5lICB0aGUgVG9hc3RlciBBZG1pbmlzdHJhdG9yKS4KKyAgICAgICAgICAgIFRoZSBUb2FzdGVyIEFkbWluaXN0cmF0b3IgcGVyZm9ybXMgdGhpcyBjb25maWd1cmF0aW9uIHRocm91Z2ggdGhlCisgICAgICAgICAgICBEamFuZ28gYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byBpbml0aWFsbHkgc3RhcnQgVG9hc3RlciwgeW91IGNhbiBpbXBvcnQgYQorICAgICAgICAgICAgcHJlLWRlZmluZWQgY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1jb21tYW5kLWxvYWRjb25mJz48ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIGEgSlNPTi1mb3JtYXR0ZWQgdGV4dCBmaWxlIHdpdGgKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBmaWVsZHMgdGhhdCBUb2FzdGVyIHJlY29nbml6ZXMuCisgICAgICAgICAgICAgICAgSXQgaXMgbm90IGEgZGF0YSBkdW1wIGZyb20gdGhlIGRhdGFiYXNlLCBzbyBpdCBjYW5ub3QgYmUKKyAgICAgICAgICAgICAgICBsb2FkZWQgZGlyZWN0bHkgaW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBjb252ZW50aW9uLCB0aGUgc3VwcGxpZWQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgVG9hc3RlciBBZG1pbmlzdHJhdG9yIGNhbiBjdXN0b21pemUgdGhlIGZpbGUgcHJpb3IgdG8gbG9hZGluZworICAgICAgICAgICAgaXQgaW50byBUb2FzdGVyLgorICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHVwIFRvYXN0ZXIgbG9jYWxseSB0byBydW4gaW4gQnVpbGQgTW9kZSwgdGhlIHN5c3RlbQorICAgICAgICAgICAgc3RhcnR1cCBzY3JpcHQgYWN0aXZlbHkgbG9va3MgZm9yIGNvbXBhdGlibGUgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgYW5kIHByb21wdHMgeW91IHRvIHNlbGVjdCBhIGZpbGUgdG8gbG9hZCBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlCisgICAgICAgICAgICBkYXRhYmFzZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWZpbGUtY2hvaWNlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBGaWxlIENob2ljZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaHJlZSB2ZXJzaW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QncyA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGNvbnRhaW5zIHRoZSBkZWZhdWx0IFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIHByb21wdGVkIHRvIHNlbGVjdCB0aGlzIGZpbGUgZHVyaW5nIHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdXAgcHJvY2VzcyBpZiB5b3UgY2xvbmVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX0dJVF9VUkw7L3Bva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQncyA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBwcm9tcHRlZCB0byBzZWxlY3QgdGhpcyBmaWxlIGR1cmluZyB0aGUgVG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHVwIHByb2Nlc3MgaWYgeW91IGhhZCBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5Ub2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoJz5GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyB1c2VmdWwgYXMgYSBzYW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIFRvYXN0ZXIgYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdGVkIHNlcnZpY2UgaW4gQnVpbGQgTW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tc3RydWN0dXJlJz4KKyAgICAgICAgICAgIDx0aXRsZT5GaWxlIFN0cnVjdHVyZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUgY29uc2lzdHMgb2YKKyAgICAgICAgICAgICAgICBlYXNpbHkgcmVhZGFibGUgYXJlYXM6IGNvbmZpZ3VyYXRpb24sIGxheWVyIHNvdXJjZXMsIEJpdEJha2UsCisgICAgICAgICAgICAgICAgZGVmYXVsdCByZWxlYXNlLCBhbmQgcmVsZWFzZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWNvbmZpZy1hcmVhJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBzZXRzIHdoaWNoIHZhcmlhYmxlcyBhcmUgZXhwb3NlZAorICAgICAgICAgICAgICAgICAgICB0byB1c2VycyB0aHJvdWdoIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgIFVzZXJzIGNhbiBlYXNpbHkgZWRpdCB0aGVzZSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZXMgeW91IHNldCBoZXJlIGFyZSBkaXNwbGF5ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyIgcGFnZSBpbiBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICBNaW5pbWFsbHksIHlvdSBzaG91bGQgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBhcHBlYXJzIHRvIHVzZXJzIGFzIHBhcnQgb2YgdGhlIHByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgcGFnZSBpbiBUb2FzdGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5jb25maWc8L2ZpbGVuYW1lPiBhcmVhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJjb25maWciOiB7CisgICAgICAgICAiTUFDSElORSIgICAgICA6ICJxZW11eDg2IiwKKyAgICAgICAgICJESVNUUk8iICAgICAgIDogInBva3kiLAorICAgICAgICAgIklNQUdFX0ZTVFlQRVMiOiAiZXh0MyBqZmZzMiB0YXIuYnoyIiwKKyAgICAgICAgICJJTUFHRV9JTlNUQUxMX2FwcGVuZCI6ICIiLAorICAgICAgICAgIlBBQ0tBR0VfQ0xBU1NFUyI6ICJwYWNrYWdlX3JwbSIsCisgICAgICAgICAiU0RLTUFDSElORSIgICA6ICJ4ODZfNjQiCisgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWxheWVyc291cmNlcy1hcmVhJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+TGF5ZXIgU291cmNlcyBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBkZWZpbmVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdsYXllci1zb3VyY2UnPmxheWVyIHNvdXJjZXM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciByZWFkcyBsYXllciBpbmZvcm1hdGlvbiBmcm9tIGxheWVyIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIFRocmVlIHR5cGVzIG9mIGxheWVyIHNvdXJjZXMgZXhpc3QgdGhhdCBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXM6IExvY2FsLCBMYXllckluZGV4LCBhbmQgSW1wb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBMb2NhbCBsYXllciBzb3VyY2UgcmVhZHMgbGF5ZXJzIGZyb20gR2l0IGNsb25lcworICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgb24geW91ciBsb2NhbCBkcml2ZS4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgYSBsb2NhbCBsYXllciBzb3VyY2UgZW5hYmxlcyB5b3UgdG8gZWFzaWx5IHRlc3QKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHNldHRpbmcgdXAgYSBob3N0ZWQgdmVyc2lvbiBvZiBUb2FzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBoYXZlIGEgbG9jYWwgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBMYXllckluZGV4IGxheWVyIHNvdXJjZSB1c2VzIGEgUkVTVCBBUEkgZXhwb3NlZCBieQorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMgb2YgdGhlIExheWVyIEluZGV4IGFwcGxpY2F0aW9uIChlLmcgdGhlIHB1YmxpYworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvJz48L3VsaW5rPikKKyAgICAgICAgICAgICAgICAgICAgdG8gcmVhZCBsYXllciBkYXRhLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgSW1wb3J0ZWQgbGF5ZXIgc291cmNlIGlzIHJlc2VydmVkIGZvciBsYXllciBkYXRhCisgICAgICAgICAgICAgICAgICAgIG1hbnVhbGx5IGludHJvZHVjZWQgYnkgdGhlIHVzZXIgb3IgVG9hc3RlciBBZG1pbmlzdHJhdG9yCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIEdVSS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsYXllciBzb3VyY2UgbGV0cyB1c2VycyBpbXBvcnQgdGhlaXIgb3duIGxheWVycworICAgICAgICAgICAgICAgICAgICBhbmQgYnVpbGQgdGhlbSB3aXRoIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IHJlbW92ZSB0aGUgaW1wb3J0ZWQgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5sYXllcnNvdXJjZXM8L2ZpbGVuYW1lPiBhcmVhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJsYXllcnNvdXJjZXMiOiBbCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibG9jYWwiLAorICAgICAgICAgICAgICJhcGl1cmwiOiAiLi4vLi4vIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIkhFQUQiLCAibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXSwKKyAgICAgICAgICAgICAibGF5ZXJzIjogWworICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJvcGVuZW1iZWRkZWQtY29yZSIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhIiwKKyAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YSIKKyAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0byIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0byIKKyAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIKKyAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgXQorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJPcGVuRW1iZWRkZWQiLAorICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAorICAgICAgICAgICAgICJhcGl1cmwiOiAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYXBpLyIsCisgICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIkltcG9ydGVkIGxheWVycyIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAiaW1wb3J0ZWQiLAorICAgICAgICAgICAgICJhcGl1cmwiOiAiIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5IiwgIkhFQUQiXQorCisgICAgICAgICB9CisgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWJpdGJha2UtYXJlYSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJpdEJha2UgQXJlYTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmVhIG9mIHRoZSBKU09OIGZpbGUgZGVmaW5lcyB0aGUgdmVyc2lvbiBvZgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIFRvYXN0ZXIgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBjb25maWd1cmVkIHRvIHJlY29nbml6ZSBmb3VyCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIEJpdEJha2U6IG1hc3RlciwgZmlkbywgZGl6enksIGFuZCBIRUFELgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhFQUQgaXMgYSBzcGVjaWFsIG9wdGlvbiB0aGF0IGJ1aWxkcyB3aGF0ZXZlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIG9uIGRpc2ssIHdpdGhvdXQgY2hlY2tpbmcgb3V0IGFueSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZGVmYXVsdCA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImJpdGJha2UiIDogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICJicmFuY2giOiAiZGl6enkiLAorICAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIkhFQUQiLAorICAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICAgfQorICAgICBdLAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nanNvbi1kZWZhdWx0LWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5EZWZhdWx0IEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGVzdGFibGlzaGVzIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICByZWxlYXNlIHVzZWQgYnkgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciB1c2VzIHRoZSAibWFzdGVyIiByZWxlYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBzdGF0ZW1lbnQgaW4gdGhlIEpTT04gZmlsZSB0aGF0IGVzdGFibGlzaGVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHJlbGVhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImRlZmF1bHRyZWxlYXNlIjogIm1hc3RlciIsCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLXJlbGVhc2VzLWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SZWxlYXNlcyBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBkZWZpbmVzIHRoZSB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBUb2FzdGVyIHJlY29nbml6ZXMuCisgICAgICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgaXMgY29uZmlndXJlZCB0byB3b3JrIHdpdGggdGhlIGZvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1yZWxlYXNlcy1zdXBwb3J0ZWQnPlByZS1Db25maWd1cmVkIFJlbGVhc2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZGVmYXVsdCA8ZmlsZW5hbWU+cmVsZWFzZXM8L2ZpbGVuYW1lPiBhcmVhOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IG1hc3RlciIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvXCImZ3Q7WW9jdG8gUHJvamVjdCBtYXN0ZXIgYnJhbmNoJmx0Oy9hJmd0Oywgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgMS44IEZpZG8iLAorICAgICAgICAgICAgICJiaXRiYWtlIjogImZpZG8iLAorICAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlICZsdDthIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1maWRvXCImZ3Q7WW9jdG8gUHJvamVjdCAxLjggXCJGaWRvXCImbHQ7L2EmZ3Q7IGJyYW5jaC4iCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjcgRGl6enkiLAorICAgICAgICAgICAgICJiaXRiYWtlIjogImRpenp5IiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgJmx0O2EgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWRpenp5XCImZ3Q7WW9jdG8gUHJvamVjdCAxLjcgXCJEaXp6eVwiJmx0Oy9hJmd0OyBicmFuY2guIgorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgICJiaXRiYWtlIjogIkhFQUQiLAorICAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuIgorICAgICAgICAgfQorICAgICBdCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPgorICAgICAgICA8dGl0bGU+VXNlZnVsIENvbW1hbmRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSB3ZWIgdXNlciBpbnRlcmZhY2UgYW5kIHRoZSBzY3JpcHRzIHRoYXQgc3RhcnQKKyAgICAgICAgICAgIGFuZCBzdG9wIFRvYXN0ZXIsIGNvbW1hbmQtbGluZSBjb21tYW5kcyBleGlzdCB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IG1hbmFnZW1lbnQgc2NyaXB0LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgZG9jdW1lbnRhdGlvbiBvbgorICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGF0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy90b3BpY3Mvc2V0dGluZ3MvJz5EamFuZ288L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHNldmVyYWwgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGhhdmUgYmVlbgorICAgICAgICAgICAgY3JlYXRlZCB0aGF0IGFyZSBzcGVjaWZpYyB0byBUb2FzdGVyIGFuZCBhcmUgdXNlZCB0byBjb250cm9sCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGFuZCBiYWNrLWVuZCB0YXNrcy4KKyAgICAgICAgICAgIFlvdSBjYW4gbG9jYXRlIHRoZXNlIGNvbW1hbmRzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSBhdAorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvbGliL21hbmFnZS5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRvY3VtZW50cyB0aG9zZSBjb21tYW5kcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyBnaXZlbgorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgeW91IG11c3QgYmUgc3VyZSB0aGF0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkgaXMgc2V0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5IGFsbG93cyBUb2FzdGVyIHRvIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyLnNxbGl0ZTwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG5vbi1kZWZhdWx0IGRhdGFiYXNlIGNvbmZpZ3VyYXRpb25zLCBpdCBpcyBwb3NzaWJsZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBjYW4gdXNlIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcworICAgICAgICAgICAgICAgICAgICBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIEJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVG8gZG8gc28sIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3Rlcm1haW4vc2V0dGluZ3MucHk8L2ZpbGVuYW1lPiBmaWxlIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB0byBwb2ludCB0byB0aGUgY29ycmVjdCBkYXRhYmFzZSBiYWNrZW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtYnVpbGRzbGlzdCc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YnVpbGRzbGlzdDwvZmlsZW5hbWU+IGNvbW1hbmQgbGlzdHMgYWxsIGJ1aWxkcworICAgICAgICAgICAgICAgIHRoYXQgVG9hc3RlciBoYXMgcmVjb3JkZWQuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGJ1aWxkc2xpc3QKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgcmV0dXJucyBhIGxpc3QsIHdoaWNoIGluY2x1ZGVzIG51bWVyaWMKKyAgICAgICAgICAgICAgICBpZGVudGlmaWNhdGlvbnMsIG9mIHRoZSBidWlsZHMgdGhhdCBUb2FzdGVyIGhhcyByZWNvcmRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IGRhdGFiYXNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBydW4gdGhlIDxmaWxlbmFtZT5idWlsZHNsaXN0PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgIGZpcnN0IHRvIGlkZW50aWZ5IGV4aXN0aW5nIGJ1aWxkcyBpbiB0aGUgZGF0YWJhc2UgYmVmb3JlCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1jb21tYW5kLWJ1aWxkZGVsZXRlJz48ZmlsZW5hbWU+YnVpbGRkZWxldGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGFzc3VtZXMgZGVmYXVsdCByZXBvc2l0b3J5IGFuZCBidWlsZAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L2J1aWxkCisgICAgICQgcHl0aG9uIC4uL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGJ1aWxkc2xpc3QKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91ciBUb2FzdGVyIGRhdGFiYXNlIGhhZCBvbmx5IG9uZSBidWlsZCwgdGhlIGFib3ZlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPiBjb21tYW5kIHdvdWxkIHJldHVybiBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAxOiBxZW11eDg2IHBva3kgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1idWlsZGRlbGV0ZSc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkZGVsZXRlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkZGVsZXRlPC9maWxlbmFtZT4gY29tbWFuZCBkZWxldGVzIGRhdGEKKyAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBidWlsZC4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhlIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYnVpbGRkZWxldGUgPHJlcGxhY2VhYmxlPmJ1aWxkX2lkPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgZGVsZXRlcyBhbGwgdGhlIGJ1aWxkIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnVpbGRfaWQ8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIGZvciByZW1vdmluZyBvbGQgYW5kIHVudXNlZCBkYXRhIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIHJ1bm5pbmcgdGhlIDxmaWxlbmFtZT5idWlsZGRlbGV0ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCwgeW91IG5lZWQgdG8gZ2V0IHRoZSBJRCBhc3NvY2lhdGVkIHdpdGggYnVpbGRzCisgICAgICAgICAgICAgICAgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1jb21tYW5kLWJ1aWxkc2xpc3QnPjxmaWxlbmFtZT5idWlsZHNsaXN0PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtcGVyZic+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnBlcmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGVyZjwvZmlsZW5hbWU+IGNvbW1hbmQgbWVhc3VyZXMgVG9hc3RlcgorICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBwZXJmCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIGlzIGEgc2FuaXR5IGNoZWNrIHRoYXQgcmV0dXJucyBwYWdlIGxvYWRpbmcKKyAgICAgICAgICAgICAgICB0aW1lcyBpbiBvcmRlciB0byBpZGVudGlmeSBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtY2hlY2tzZXR0aW5ncyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmNoZWNrc2V0dGluZ3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQgdmVyaWZpZXMKKyAgICAgICAgICAgICAgICBleGlzdGluZyBUb2FzdGVyIHNldHRpbmdzLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBjaGVja3NldHRpbmdzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIEJ1aWxkIE1vZGUsIFRvYXN0ZXIgdXNlcyBzZXR0aW5ncyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICBkYXRhYmFzZSB0byBjb25maWd1cmUgdGhlIGJ1aWxkaW5nIHRhc2tzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQgdmVyaWZpZXMgdGhhdAorICAgICAgICAgICAgICAgIHRoZSBkYXRhYmFzZSBzZXR0aW5ncyBhcmUgdmFsaWQgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBoYXZlCisgICAgICAgICAgICAgICAgdGhlIG1pbmltYWwgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHN0YXJ0IGEgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGUgPGZpbGVuYW1lPmNoZWNrc2V0dGluZ3M8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgdG8gd29yaywgdGhlIGRhdGFiYXNlIG11c3QgYmUgY29ycmVjdGx5IHNldCB1cCBhbmQgbm90IGhhdmUKKyAgICAgICAgICAgICAgICBleGlzdGluZyBkYXRhLgorICAgICAgICAgICAgICAgIFRvIGJlIHN1cmUgdGhlIGRhdGFiYXNlIGlzIHJlYWR5LCB5b3UgY2FuIHJ1biB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmHigItnZS5weSBzeW5jZGIKKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmHigItnZS5weSBtaWdyYXRlIG9ybQorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYeKAi2dlLnB5IG1pZ3JhdGUgYmxkY29udHJvbAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZXNlIGNvbW1hbmRzLCB5b3UgY2FuIHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1jb21tYW5kLWxvYWRjb25mJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGxvYWRzIGFuCisgICAgICAgICAgICAgICAgZXhpc3RpbmcgVG9hc3RlciBjb25maWd1cmF0aW9uIGZpbGUgKEpTT04gZmlsZSkuCisgICAgICAgICAgICAgICAgWW91IG11c3QgcnVuIHRoaXMgb24gYSBuZXcgZGF0YWJhc2UgdGhhdCBkb2VzIG5vdCBoYXZlIGFueQorICAgICAgICAgICAgICAgIGRhdGEuCisgICAgICAgICAgICAgICAgUnVubmluZyB0aGlzIGNvbW1hbmQgb24gYW4gZXhpc3RpbmcgZGF0YWJhc2UgdGhhdCBoYXMgZGF0YQorICAgICAgICAgICAgICAgIHJlc3VsdHMgaW4gZXJyb3JzLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsb2FkY29uZiA8cmVwbGFjZWFibGU+ZmlsZXBhdGg8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvYWRjb25mPC9maWxlbmFtZT4gY29tbWFuZCBjb25maWd1cmVzIGEgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1qc29uLWZpbGVzJz5KU09OIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1ydW5idWlsZHMnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5ydW5idWlsZHM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cnVuYnVpbGRzPC9maWxlbmFtZT4gY29tbWFuZCBsYXVuY2hlcworICAgICAgICAgICAgICAgIHNjaGVkdWxlZCBidWlsZHMuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHJ1bmJ1aWxkcworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJ1bmJ1aWxkczwvZmlsZW5hbWU+IGNvbW1hbmQgY2hlY2tzIGlmCisgICAgICAgICAgICAgICAgc2NoZWR1bGVkIGJ1aWxkcyBleGlzdCBpbiB0aGUgZGF0YWJhc2UgYW5kIHRoZW4gbGF1bmNoZXMgdGhlbQorICAgICAgICAgICAgICAgIHBlciBzY2hlZHVsZS4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCByZXR1cm5zIGFmdGVyIHRoZSBidWlsZHMgc3RhcnQgYnV0IGJlZm9yZSB0aGV5CisgICAgICAgICAgICAgICAgY29tcGxldGUuCisgICAgICAgICAgICAgICAgVGhlIFRvYXN0ZXIgTG9nZ2luZyBJbnRlcmZhY2UgcmVjb3JkcyBhbmQgdXBkYXRlcyB0aGUgZGF0YWJhc2UKKyAgICAgICAgICAgICAgICB3aGVuIHRoZSBidWlsZHMgY29tcGxldGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5ZDI0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbApAQCAtMCwwICsxLDEwMjQgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlJz4KKworPHRpdGxlPlNldHRpbmcgVXAgYW5kIFVzaW5nIFRvYXN0ZXI8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXRvYXN0ZXItaW4tYW5hbHlzaXMtbW9kZSc+CisgICAgICAgIDx0aXRsZT5Vc2luZyBUb2FzdGVyIGluIEFuYWx5c2lzIE1vZGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gdXNlIFRvYXN0ZXIgaW4gQW5hbHlzaXMgTW9kZQorICAgICAgICAgICAgYWZ0ZXIgc2V0dGluZyBUb2FzdGVyIHVwIGFzIGEgbG9jYWwgaW5zdGFuY2Ugb3IgYXMgYSBob3N0ZWQKKyAgICAgICAgICAgIHNlcnZpY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC1sb2NhbGx5LWFuZC1ydW5uaW5nLWluLWFuYWx5c2lzLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgTG9jYWxseSBhbmQgUnVubmluZyBpbiBBbmFseXNpcyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIHNldCB1cCBhIGxvY2FsIGluc3RhbmNlIG9mIFRvYXN0ZXIgYW5kCisgICAgICAgICAgICAgICAgdGhlbiBydW4gaW4gQW5hbHlzaXMgTW9kZToKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSB5b3VyIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3VyIHN5c3RlbSBoYXMgdGhlIFRvYXN0ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBieSBmb2xsb3dpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+RXN0YWJsaXNoaW5nIFRvYXN0ZXIgU3lzdGVtIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IFNldCBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdldCB0aGUgcmVxdWlyZW1lbnRzIHNldCB1cCBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSB5b3VyIEJ1aWxkIEVudmlyb25tZW50IFNldHVwIFNjcmlwdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5L2J1aWxkPC9maWxlbmFtZT4pLCBzb3VyY2UgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgVG9hc3Rlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCBUb2FzdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSB0b2FzdGVyIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBZb3VyIEJ1aWxkIFVzaW5nIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIHN0YXJ0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYnVpbGRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuIFlvdXIgQnJvd3Nlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT3BlbiB5b3VyIGJyb3dzZXIgYW5kIHZpc2l0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cDovL2hvc3Q6cG9ydC90b2FzdGVyZ3VpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaG9zdCBhbmQgcG9ydCB2YWx1ZXMsIHNlZSB0aGUgb3V0cHV0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvdXJjZSB0b2FzdGVyIHN0YXJ0PC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIFRvYXN0ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy10aGUtdG9hc3Rlci13ZWItaW50ZXJmYWNlJz5Vc2luZyB0aGUgVG9hc3RlciBXZWIgSW50ZXJmYWNlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtYS1ob3N0ZWQtc2VydmljZS1hbmQtcnVubmluZy1pbi1hbmFseXNpcy1tb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIGEgSG9zdGVkIFNlcnZpY2UgYW5kIFJ1bm5pbmcgaW4gQW5hbHlzaXMgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgaG9zdGVkIHNlcnZpY2UgcmVzaWRlcyBvbiBhIHNoYXJlZCBzZXJ2ZXIgYW5kIGFsbG93cworICAgICAgICAgICAgICAgIG11bHRpcGxlIHVzZXJzIHRvIHRha2UgYWR2YW50YWdlIG9mIFRvYXN0ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZQorICAgICAgICAgICAgICAgIGxvY2FsIGluc3RhbmNlcyBvZiB0aGUgVG9hc3RlciBMb2dnaW5nIEludGVyZmFjZSBydW5uaW5nIG9uCisgICAgICAgICAgICAgICAgdmFyaW91cyByZW1vdGUgYnVpbGQgbWFjaGluZXMsIGFuZCBoYXZlIHRob3NlIGxvY2FsIGluc3RhbmNlcworICAgICAgICAgICAgICAgIGFjY2VzcyBhbmQgdXNlIGEgc2luZ2xlIHdlYiBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBNYWludGFpbiBhIGNvbW1vbiBTUUwgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHVwIHNlcGFyYXRlIGluc3RhbmNlcyBvZiBCaXRCYWtlIHNlcnZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBUb2FzdGVyIExvZ2dpbmcgSW50ZXJmYWNlcyBmb3IgZWFjaCBvZiB0aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUgQml0QmFrZSBzZXJ2ZXJzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjb21tb24gU1FMIGRhdGFiYXNlIGFsbG93cyB0aGUgV2ViIHNlcnZlciB0byBzaG93IGRhdGEgZnJvbQorICAgICAgICAgICAgICAgIGFsbCB0aGUgdmFyaW91cyBCaXRCYWtlIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSBTUUwgZGF0YWJhc2Ugb3V0c2lkZSBvZiBhbnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFpbnRhaW5zIGEgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSB2YXJpb3VzIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBzZXJ2ZXJzLCB0aGUgU1FMIHNlcnZlciwgYW5kIHRoZSBXZWIgc2VydmVyIG9yCisgICAgICAgICAgICAgICAgc2VydmVycyBjYW4gYmUgcnVuIG9uIHNlcGFyYXRlIG1hY2hpbmVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGFuZCBydW4gYSBob3N0ZWQgc2VydmljZSBhbmQgcnVuCisgICAgICAgICAgICAgICAgVG9hc3RlciBpbiBBbmFseXNpcyBNb2RlOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RlcHMgYXNzdW1lIGEgVG9hc3RlciBpbnN0YWxsYXRpb24gcGF0aCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdC9iaXRiYWtlLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSB5b3VyIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3VyIHN5c3RlbSBoYXMgdGhlIFRvYXN0ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBieSBmb2xsb3dpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+RXN0YWJsaXNoaW5nIFRvYXN0ZXIgU3lzdGVtIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IFNldCBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdldCB0aGUgcmVxdWlyZW1lbnRzIHNldCB1cCBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCB1cCB0aGUgRGF0YWJhc2UgU2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbnkgU1FMIHNlcnZlciBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+IGJlY2F1c2UgaXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWR2YW50YWdlcyBvZiBhZHZhbmNlZCBTUUwgZmVhdHVyZXMgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0IGFuZCByZWxpYWJsZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNldHRpbmcgdXAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3JlIGNvbXBsZXggYW5kIG1pZ2h0IHJlcXVpcmUgYSBEYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgQWRtaW5pc3RyYXRvciB0byB0dW5lIGl0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgc3VwcG9ydGVkIGRhdGFiYXNlIGJhY2tlbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4sIHlvdSBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW50YWdlIG9mIG5vIGNvbmZpZ3VyYXRpb24gYW5kIGFuIGVhc3kgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgVG9hc3RlciBzdGlsbCByZXF1aXJlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3FsaXRlPC9maWxlbmFtZT4gYmFja2VuZCBpcyBhbHNvIHNsb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBubyB0cmFuc2FjdGlvbmFsIHN1cHBvcnQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHNob3VsZCBzZXQgdXAgcHJvcGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIG9uIHRoZSBzaGFyZWQgZGF0YWJhc2UgZm9yIGV2ZXJ5b25lIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNpbmcgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcmlnaHRzIGZvciB0aGUgcm9vdCBhY2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIHRoaW5nIGFzIHJvb3QgYWNjZXNzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGluc3RhbGxzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYW5kIHNldHMgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgdXNlciBhY2NvdW50cyBhbmQgdGhlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBteXNxbC1zZXJ2ZXIKKyAgICAgJCBteXNxbCAtdSByb290CisgICAgIG15c3FsPiBDUkVBVEUgVVNFUiAnbmV3dXNlcidAJ2xvY2FsaG9zdCcgSURFTlRJRklFRCBCWSAncGFzc3dvcmQnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gQ1JFQVRFIERBVEFCQVNFICd0b2FzdGVyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGEgc2VwYXJhdGUgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjbG9uZSBpcyBvbmx5IHVzZWQgZm9yIGdldHRpbmcgdGhlIGxhdGVzdCBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdXAgdXNpbmcgdGhlIGZvbGxvd2luZyBHaXQgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gc2V0IHVwIHRoZSBkaXJlY3Rvcnkgb3V0c2lkZSBvZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgc2VwYXJhdGVseSBjbG9uZWQgdHJlZSBmb3IgdGhlIERhdGFiYXNlIFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNvIHRoYXQgdGhlIDxmaWxlbmFtZT5EQVRBQkFTRVM8L2ZpbGVuYW1lPiB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgZGF0YWJhc2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2F0IC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQorICAgICAgICAuLi4KKyAgICAgREFUQUJBU0VTID0geworICAgICAgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMubXlzcWwnLAorICAgICAgICAgICAgICdOQU1FJzogJ3RvYXN0ZXInLAorICAgICAgICAgICAgICdVU0VSJzogJ25ld3VzZXInLAorICAgICAgICAgICAgICdQQVNTV09SRCc6ICdwYXNzd29yZCcsCisgICAgICAgICAgICAgJ0hPU1QnOiAnMTkyLjE2OC4wLjI1JywKKyAgICAgICAgICAgICAnUE9SVCc6ICczMzA2JywKKyAgICAgICAgIH0KKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIGFuZCBTZXQgVXAgdGhlIFdlYiBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBpbnN0YWxsIGFuZCBzZXQgdXAgYSBmcm9udC1lbmQgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VydmVyIGFsbG93cyBmb3IgbG9hZCBiYWxhbmNpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS10aHJlYWRpbmcgb3ZlciBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy9ob3d0by9kZXBsb3ltZW50L3dzZ2kvJz48ZmlsZW5hbWU+ZGphbmdvPC9maWxlbmFtZT4gV1NHSTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyBBcGFjaGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhcHQtZ2V0IGluc3RhbGwgYXBhY2hlMiBsaWJhcGFjaGUyLW1vZC13c2dpCisgICAgICQgYTJlbm1vZCB3c2dpCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgdGhlIFdTR0lQeXRob25QYXRoIGlzIGdsb2JhbAorICAgICBXU0dJUHl0aG9uUGF0aCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvCisKKyAgICAgICAgLi4uCisKKyAgICAgI3NuaXAgLSBpbiBWaXJ0dWFsSG9zdAorICAgICBXU0dJU2NyaXB0QWxpYXMgLyAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vd3NnaS5weQorCisgICAgICZsdDtEaXJlY3RvcnkgLy9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi8mZ3Q7CisgICAgICAgICAmbHQ7RmlsZXMgd3NnaS5weSZndDsKKyAgICAgICAgICAgICBSZXF1aXJlIGFsbCBncmFudGVkCisgICAgICAgICAmbHQ7L0ZpbGVzJmd0OworICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNvbGxlY3Qgc3RhdGljIG1lZGlhIGZyb20gVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbmZpZ3VyaW5nIEFwYWNoZSB0byBzZXJ2ZSB0aGF0IHN0YXRpYworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgL3Zhci93d3cuaHRtbC9zdGF0aWMgJmFtcDsmYW1wOyBjZCAvdmFyL3d3dy5odG1sL3N0YXRpYworICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY29sbGVjdHN0YXRpYworICAgICAkIGNhdCAvZXRjL2FwYWNoZTIvc2l0ZXMtYXZhaWxhYmxlLzAwMC1kZWZhdWx0LmNvbmYKKworICAgICAgICAuLi4KKworICAgICAjIGluIFZpcnR1YWxIb3N0LCBBSEVBRCBvZiB0aGUgV1NHSVNjcmlwdEFsaWFzIGRlZmluaXRpb24KKyAgICAgQWxpYXMgL3N0YXRpYy8gL3Zhci93d3cuaHRtbC9zdGF0aWMvCisKKyAgICAgJmx0O0RpcmVjdG9yeSAvdmFyL3d3dy5odG1sL3N0YXRpYy8mZ3Q7CisgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgJmx0Oy9EaXJlY3RvcnkmZ3Q7CisKKyAgICAgICAgLi4uCisKKyAgICAgV1NHSVNjcmlwdCBBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSB0aGUgZGF0YWJhc2VzIGZvciB0b2FzdGVyLCBhbmQgdGhlbiBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgdXAgdGhlIHdlYiBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb250aW51ZXMgd2l0aCB0aGUgYXNzdW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cyBmcm9tIHRoZSBwcmV2aW91cyBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHN5bmNkYgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgYmxkY29udHJvbAorCisgICAgICQgc2VydmljZSBhcGFjaGUyIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBnZW5lcmFsIGRvY3VtZW50YXRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjcvcmVmL2RqYW5nby1hZG1pbi8nPkRqYW5nbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzaXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RW5hYmxlIEJ1aWxkIExvZ2dpbmcgdG8gdGhlIENvbW1vbiBTUUwgU2VydmVyIGZvciBFYWNoIEJ1aWxkIERpcmVjdG9yeSB5b3UgYXJlIFVzaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXRvYXN0ZXInPjxmaWxlbmFtZT50b2FzdGVyPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIGJ1aWxkIGhpc3RvcnkgYXJlIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGRvbmUgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSB0b2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhcnQ8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoYXQgbGl2ZXMgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi9jb25mL3RvYXN0ZXIuY29uZjwvZmlsZW5hbWU+LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoYXQgZmlsZSBzaG91bGQgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gInRvYXN0ZXIgYnVpbGRoaXN0b3J5IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGJ1aWxkIGhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbnVhbC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgYWxzbyBuZWVkIHRvIHBvaW50IHRvIHRoZSBkYXRhYmFzZSB0aGF0IHlvdSBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwIGluIHN0ZXAgMy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSBleHBvcnRpbmcgdGhlIDxmaWxlbmFtZT5EQVRBQkFTRV9VUkw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IERBVEFCQVNFX1VSTD1teXNxbDovL25ld3VzZXI6cGFzc3dvcmRAMTkyLjE2OC4wLjI1OjMzMDYvdG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFzc3VtZXMgdGhhdCB5b3UgYXJlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgSVAgYWRkcmVzcyBzaG91bGQgYmUgdGhlIElQIGFkZHJlc3Mgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U291cmNlIHlvdXIgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb24gZWFjaCBvZiB0aGUgYnVpbGQgc3lzdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5L2J1aWxkPC9maWxlbmFtZT4pLCBzb3VyY2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IHRoZSBCaXRCYWtlIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdGhlIEJpdEJha2Ugc2VydmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC0tcG9zdHJlYWQgY29uZi90b2FzdGVyLmNvbmYgLS1zZXJ2ZXItb25seSAtdCB4bWxycGMgLUIgbG9jYWxob3N0OjAgJmFtcDsmYW1wOyBleHBvcnQgQkJTRVJWRVI9bG9jYWxob3N0Oi0xCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCB0aGUgTG9nZ2luZyBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IHRoZSBUb2FzdGVyIExvZ2dpbmcgSW50ZXJmYWNlIHVzaW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbm9odXAgYml0YmFrZSAtLW9ic2VydmUtb25seSAtdSB0b2FzdGVydWkgPnRvYXN0ZXJfdWkubG9nICZhbXA7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBoYXJkLWNvZGVkIHBvcnRzIGFyZSB1c2VkIGluIHRoZSBCaXRCYWtlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB0aGVyZSBpcyBlbm91Z2ggY29kZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2Rpc2NvdmVyeTwvZmlsZW5hbWU+IGZvciBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gcHJldmVudHMgY29sbGlzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IEJ1aWxkcyBVc2luZyBCaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB0byBzdGFydCBhCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBvbiBhIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGJ1aWxkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggYSBidWlsZCBpbiBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnksIGJlIHN1cmUgdG8gPGZpbGVuYW1lPmtpbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJpdEJha2Ugc2VydmVyIGZvciB0aGF0IGJ1aWxkIGFyZWE6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtbQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLXRoZS10b2FzdGVyLXdlYi1pbnRlcmZhY2UnPlVzaW5nIHRoZSBUb2FzdGVyIFdlYiBJbnRlcmZhY2U8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdG9hc3Rlci1pbi1idWlsZC1tb2RlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFRvYXN0ZXIgaW4gQnVpbGQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byB1c2UgVG9hc3RlciBpbiBCdWlsZCBNb2RlCisgICAgICAgICAgICBhZnRlciBzZXR0aW5nIFRvYXN0ZXIgdXAgYXMgYSBsb2NhbCBpbnN0YW5jZSBvciBhcyBhIGhvc3RlZAorICAgICAgICAgICAgc2VydmljZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWxvY2FsbHktYW5kLXJ1bm5pbmctaW4tYnVpbGQtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBMb2NhbGx5IGFuZCBSdW5uaW5nIGluIEJ1aWxkIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGEgbG9jYWwgaW5zdGFuY2Ugb2YgVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICB0aGVuIHJ1biBpbiBCdWlsZCBNb2RlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgVG9hc3Rlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSB0aGUgcm9vdCBvZiB0aGUgc291cmNlIGRpcmVjdG9yeSAoZS5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS88L2ZpbGVuYW1lPiksIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9iaW4vdG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgU3VwZXJ1c2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBEamFuZ28gd2lsbCBhc2sgeW91IGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIHN1cGVydXNlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc3VwZXJ1c2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHN1cGVydXNlciB0byBhY2Nlc3MgdGhlIERqYW5nbworICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlIGFuZCBtYWtlIGNoYW5nZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3QgdGhlIEJ1aWxkIExvZyBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYXNrcyB5b3UgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byBzdG9yZSB0aGUgYnVpbGQgbG9nIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NpbmcgYSBkaXJlY3RvcnkgZm9yIHRoZXNlIGZpbGVzIG1ha2VzIHN1cmUgdGhleQorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGFsd2F5cyBhdmFpbGFibGUgdG8geW91LgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBjaG9vc2UgYSBkaXJlY3RvcnksIHRoZSBsb2dzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzYXBwZWFyIChlLmcuIGRlbGV0aW5nIHRoZSBCdWlsZCBEaXJlY3RvcnkpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gVG9hc3RlciBwcm9tcHRzIHlvdSBmb3IgdGhlIEJ1aWxkIExvZworICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB5b3UgY2FuIHNlbGVjdCB0aGUgc3VnZ2VzdGVkIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIHByb3ZpZGUgYSBwYXRoIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNwZWNpZnkgdGhlIExheWVyIENoZWNrb3V0IERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3RvcnkgaW50byB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzIGFyZSBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgY2xvbmVzIGFueSBsYXllcnMgbmVlZGVkIGZvciB5b3VyIGJ1aWxkcworICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoaXMgZGlyZWN0b3J5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gVG9hc3RlciBwcm9tcHRzIHlvdSBmb3IgdGhlIExheWVyCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja291dCBkaXJlY3RvcnksIHlvdSBjYW4gc2VsZWN0IHRoZSBzdWdnZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgb3IgcHJvdmlkZSBhIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3BlY2lmeSB0aGUgQnVpbGQgRGlyZWN0b3J5IFBhdGg6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYXNrcyB5b3UgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VsZWN0IHRoZSBzdWdnZXN0ZWQgZGVmYXVsdCBvciBwcm92aWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hvb3NlIFdoZXRoZXIgb3Igbm90IHRvIEltcG9ydCBhIERlZmF1bHQgVG9hc3RlciBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgYXNrcyB5b3UgaWYgeW91IHdhbnQgdG8gaW1wb3J0IGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEpTT04gZmlsZXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEpTT04gZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLWpzb24tZmlsZXMnPkpTT04gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIHNraXAgaW1wb3J0aW5nIGEgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBieSBlbnRlcmluZyAiMCIgYXQgdGhlIHByb21wdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGltcG9ydCBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGxpc3RlZCBkdXJpbmcgdGhpcyBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHdheXMgYW1lbmQgdGhlIGltcG9ydGVkIGNvbmZpZ3VyYXRpb24gZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhIGxhdGVyIHN0YWdlIHRocm91Z2ggdGhlIERqYW5nbyBhZG1pbmlzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIERqYW5nbywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43Lyc+ZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgaW5mb3JtYXRpb24gb24gVG9hc3Rlci1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW4gdGhlIEJyb3dzZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGJyb3dzZXIgd2luZG93IGFwcGVhcnMsIG9wZW4geW91ciBmYXZvcml0ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlciBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3RvYXN0ZXJndWkKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHVzZSB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWEtaG9zdGVkLXNlcnZpY2UtYW5kLXJ1bm5pbmctaW4tYnVpbGQtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBhIEhvc3RlZCBTZXJ2aWNlIGFuZCBSdW5uaW5nIGluIEJ1aWxkIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGEgaG9zdGVkIHNlcnZpY2UgYW5kIHJ1biBUb2FzdGVyCisgICAgICAgICAgICAgICAgaW4gQnVpbGQgTW9kZToKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSB5b3VyIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3VyIHN5c3RlbSBoYXMgdGhlIFRvYXN0ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICBieSBmb2xsb3dpbmcgdGhlIHN0ZXBzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+RXN0YWJsaXNoaW5nIFRvYXN0ZXIgU3lzdGVtIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R2V0IFNldCBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdldCB0aGUgcmVxdWlyZW1lbnRzIHNldCB1cCBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBidWlsZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJlIFN1cmUgTWFuYWdlbWVudCBpcyBFbmFibGVkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJ1bm5pbmcgVG9hc3RlciB1bmRlciBBcGFjaGUsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBiZSBzdXJlIG1hbmFnZW1lbnQgaXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBtYW5hZ2VtZW50LCBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NQU5BR0VEPC9maWxlbmFtZT4gdG8gIlRydWUiIGJ5IGFkZGluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi90b2FzdGVyL3NldHRpbmdzLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BTkFHRUQ9IlRydWUiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgVXAgVG9hc3RlciBmb3IgTm9ybWFsIFVzYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjb25maWd1cmUgZWFjaCBidWlsZCBlbnZpcm9ubWVudCwgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMsIGFuZCBCaXRCYWtlIHZlcnNpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlZlcmlmeSB0aGF0IHlvdXIgcmVsZWFzZXMgaGF2ZSBiZWVuIGxvYWRlZCBjb3JyZWN0bHkgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UgdG8gY3JlYXRlIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2sgdGhlICJSZWxlYXNlcyIgZHJvcGRvd24gbWVudSB0byBiZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2x5IHNwZWNpZmllZCByZWxlYXNlcyBleGlzdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgc3RlcCwgaGVyZSBpcyBhIHNldCBvZiBleGFtcGxlIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNvbWUgZGVzY3JpcHRpb25zIGFzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgQ3JlYXRlIHRoZSB1c2VyIHVuZGVyIHdoaWNoIHRoZSBidWlsZHMgd2lsbCBydW4KKyAgICAgJCBhZGR1c2VyIHBva3kKKworICAgICAjIEJyaW5nIHVwIHRoZSBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UKKyAgICAgJHhkZy1vcGVuIGh0dHA6Ly88cmVwbGFjZWFibGU+c2VydmVyLWFkZHJlc3M8L3JlcGxhY2VhYmxlPi9hZG1pbi8KKworICAgICAjIExvZ2luIHdpdGggdGhlIGFkbWluIHVzZXIgcHJldmlvdXNseSBjcmVhdGVkCisKKyAgICAgIyBHbyB0byB0aGUgQnVpbGRFbnZpcm9ubWVudCBvYmplY3QgaW4gQnVpbGQgRW52aXJvbm1lbnRzIGFuZAorICAgICAjIHNldCBhZGRyZXNzIHRvIGxvY2FsIGhvc3QsIHNvdXJjZWRpciB0byAvaG9tZS9wb2t5LCBhbmQKKyAgICAgIyBidWlsZGRpciB0byAvaG9tZS9wb2t5YnVpbGQuCisgICAgICMKKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgTGF5ZXIgU291cmNlcyBhbmQgc2VsZWN0IGFkZCBMYXllciBTb3VyY2UKKyAgICAgIyBOYW1lOiBPcGVuRW1iZWRkZWQsIFNvdXJjZXR5cGU6IGxheWVyaW5kZXgsCisgICAgICMgQXBpdXJsOiBodHRwOi8vbGF5ZXJzIG9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKworICAgICAjIEdvIHRvIEhvbWUsIEJpdGJha2UgVmVyc2lvbnMsIEFkZCBiaXRiYWtlIHZlcnNpb247CisgICAgICMgVGFrZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb206IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3JlZnMvaGVhZHMsCisgICAgICMgVGhpcyBleGFtcGxlIGFzc3VtZXMgIm1hc3RlciIgdmVyc2lvbi4KKyAgICAgIyBzZXQgTmFtZTogbWFzdGVyLCBHaXR1cmwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorICAgICAjIGJyYW5jaCBtYXN0ZXIsIGRpcnBhdGggLworICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgcHJvamVjdCByZWxlYXNlcywgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHZhcmlhYmxlcywgYW5kIHVwZGF0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaW5kZXguCisgICAgICAgICAgICAgICAgICAgICAgICBDb250aW51aW5nIHdpdGggdGhlIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgR28gdG8gSG9tZSwgUmVsZWFzZXMsIEFkZCByZWxlYXNlCisgICAgICMgc2V0IE5hbWU6IG1hc3RlciwgRGVzY3JpcHRpb246IEN1cnJlbnQgbWFzdGVyIHJlbGVhc2UsIHNlbGVjdCBCaXRiYWtlIFZlcnNpb24sCisgICAgICMgYW5kIEJyYW5jaDogbWFzdGVyCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKworICAgICAjIEdvIHRvIEhvbWUsIFRvYXN0ZXIgU2V0dGluZ3MsIHNlbGVjdCB0aGUgU2V0dGluZyBmb3IgREVGQVVMVF9SRUxFQVNFCisgICAgICMgc2V0IEhlbHB0ZXh0OiBUaGlzIHNlbGVjdHMgdGhlIGRlZmF1bHQgcmVsZWFzZS4sIFZhbHVlOiBtYXN0ZXIKKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgQml0YmFrZSBWZXJzaW9ucywgQWRkIGJpdGJha2UgdmVyc2lvbjsKKyAgICAgIyB0YWtlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSA6IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3JlZnMvaGVhZHMsCisgICAgICMgdGhpcyBtYW51YWwgYXNzdW1lcyB0aGUgbWFzdGVyIHZlcnNpb24KKyAgICAgIyBzZXQgTmFtZTogbWFzdGVyLCBHaXR1cmwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorICAgICAjIGJyYW5jaCBtYXN0ZXIsIGRpcnBhdGggLworICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisKKyAgICAgIyBVcGRhdGUgdGhlIGluZm9ybWF0aW9uCisgICAgICMgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbHN1cGRhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCB1cCB0aGUgRGF0YWJhc2UgU2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhbnkgU1FMIHNlcnZlciBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+IGJlY2F1c2UgaXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWR2YW50YWdlcyBvZiBhZHZhbmNlZCBTUUwgZmVhdHVyZXMgYWxvbmcgd2l0aCBhCisgICAgICAgICAgICAgICAgICAgICAgICBmYXN0IGFuZCByZWxpYWJsZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNldHRpbmcgdXAgPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3JlIGNvbXBsZXggYW5kIG1pZ2h0IHJlcXVpcmUgYSBEYXRhYmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgQWRtaW5pc3RyYXRvciB0byB0dW5lIGl0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgc3VwcG9ydGVkIGRhdGFiYXNlIGJhY2tlbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIDxmaWxlbmFtZT5zcWxpdGUzPC9maWxlbmFtZT4sIHlvdSBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW50YWdlIG9mIG5vIGNvbmZpZ3VyYXRpb24gYW5kIGFuIGVhc3kgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgVG9hc3RlciBzdGlsbCByZXF1aXJlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3FsaXRlPC9maWxlbmFtZT4gYmFja2VuZCBpcyBhbHNvIHNsb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gPGZpbGVuYW1lPm15c3FsLXNlcnZlcjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBubyB0cmFuc2FjdGlvbmFsIHN1cHBvcnQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHNob3VsZCBzZXQgdXAgcHJvcGVyIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIG9uIHRoZSBzaGFyZWQgZGF0YWJhc2UgZm9yIGV2ZXJ5b25lIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNpbmcgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcmlnaHRzIGZvciB0aGUgcm9vdCBhY2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIHRoaW5nIGFzIHJvb3QgYWNjZXNzIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGluc3RhbGxzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYW5kIHNldHMgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgdXNlciBhY2NvdW50cyBhbmQgdGhlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBteXNxbC1zZXJ2ZXIKKyAgICAgJCBteXNxbCAtdSByb290CisgICAgIG15c3FsPiBDUkVBVEUgVVNFUiAnbmV3dXNlcidAJ2xvY2FsaG9zdCcgSURFTlRJRklFRCBCWSAncGFzc3dvcmQnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKiAuICogVE8gJ25ld3VzZXInQCdsb2NhbGhvc3QnOworICAgICBteXNxbD4gQ1JFQVRFIERBVEFCQVNFICd0b2FzdGVyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIGEgc2VwYXJhdGUgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjbG9uZSBpcyBvbmx5IHVzZWQgZm9yIGdldHRpbmcgdGhlIGxhdGVzdCBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdXAgdXNpbmcgdGhlIGZvbGxvd2luZyBHaXQgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gc2V0IHVwIHRoZSBkaXJlY3Rvcnkgb3V0c2lkZSBvZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgc2VwYXJhdGVseSBjbG9uZWQgdHJlZSBmb3IgdGhlIERhdGFiYXNlIFNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHNvIHRoYXQgdGhlIDxmaWxlbmFtZT5EQVRBQkFTRVM8L2ZpbGVuYW1lPiB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgZGF0YWJhc2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2F0IC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQorICAgICAgICAuLi4KKyAgICAgREFUQUJBU0VTID0geworICAgICAgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMubXlzcWwnLAorICAgICAgICAgICAgICdOQU1FJzogJ3RvYXN0ZXInLAorICAgICAgICAgICAgICdVU0VSJzogJ25ld3VzZXInLAorICAgICAgICAgICAgICdQQVNTV09SRCc6ICdwYXNzd29yZCcsCisgICAgICAgICAgICAgJ0hPU1QnOiAnMTkyLjE2OC4wLjI1JywKKyAgICAgICAgICAgICAnUE9SVCc6ICczMzA2JywKKyAgICAgICAgIH0KKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgdGhlIERhdGFiYXNlPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2Ugc3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHN5bmNkYgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtCisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaW50ZXJmYWNlIGFza3MgeW91IGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcnVzZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2tpcCB0aGlzIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCB1c2UgdGhlIHN1cGVydXNlciBhY2NvdW50IHRvIGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZSBhbmQgbWFrZSBjaGFuZ2VzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2VsZWN0IFdoZXJlIHRoZSBCdWlsZCBQcm9jZXNzIFRha2VzIFBsYWNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgdGhyZWUgZGlyZWN0b3JpZXMgZm9yIHN0b3JpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFydGlmYWN0cywgZG93bmxvYWRpbmcgc291cmNlcywgYW5kIHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCB0aHJlZSBkaXJlY3RvcmllcyBuZWVkIHRvIGJlIHdyaXRhYmxlIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdXNlciwgd2hpY2ggaXMgInBva3kiIGluIHRoaXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBhcnRpZmFjdHMgZGlyZWN0b3J5IG5lZWRzIHRvIHJlYWRhYmxlIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBhY2hlIHVzZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIGZyZWUgZGlzayBzcGFjZSBpbiB0aGUgcmFuZ2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDEwMCBHYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHRocmVlIHN1Z2dlc3RlZCBkaXJlY3RvcmllczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgL2hvbWUvcG9reS9idWlsZGFydGlmYWN0cy8KKyAgICAgL2hvbWUvcG9reS9idWlsZC8KKyAgICAgL2hvbWUvcG9reS9zb3VyY2VzLworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IFVwIHRoZSA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvRmlsZTpUb2FzdGVyY29uZi5qc29uLnR4dC5wYXRjaCc+RG93bmxvYWQgdGhlIGhvc3RlZCA8ZmlsZW5hbWU+dG9hc3RlcmNvbmYuanNvbjwvZmlsZW5hbWU+IGZpbGU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3aWtpIGFuZCBlZGl0IGl0IHRvIHN1aXQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItanNvbi1maWxlcyc+SlNPTiBGaWxlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFmdGVyIGVkaXRpbmcgdGhlIGZpbGUsIGxvYWQgaXQgYnkgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsb2FkY29uZiBwYXRoLXRvLXRvYXN0ZXJjb25mLmpzb24tZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+VXNlZnVsIENvbW1hbmRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayB0aGUgVG9hc3RlciBTZXR0aW5nczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBieSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcHJvbXB0ZWQsIHBhc3RlIGluIHRoZSBkaXJlY3RvcnkgcGF0aHMgY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBkdXJpbmcgU3RlcCA3LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+VXNlZnVsIENvbW1hbmRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIGFuZCBTZXQgVXAgdGhlIFdlYiBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBpbnN0YWxsIGFuZCBzZXQgdXAgYSBmcm9udC1lbmQgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VydmVyIGFsbG93cyBmb3IgbG9hZCBiYWxhbmNpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aS10aHJlYWRpbmcgb3ZlciBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy9ob3d0by9kZXBsb3ltZW50L3dzZ2kvJz48ZmlsZW5hbWU+ZGphbmdvPC9maWxlbmFtZT4gV1NHSTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyBBcGFjaGUgd2ViIHNlcnZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhcHQtZ2V0IGluc3RhbGwgYXBhY2hlMiBsaWJhcGFjaGUyLW1vZC13c2dpCisgICAgICQgYTJlbm1vZCB3c2dpCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgdGhlIFdTR0lQeXRob25QYXRoIGlzIGdsb2JhbAorICAgICBXU0dJUHl0aG9uUGF0aCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvCisKKyAgICAgICAgLi4uCisKKyAgICAgI3NuaXAgLSBpbiBWaXJ0dWFsSG9zdAorICAgICBXU0dJU2NyaXB0QWxpYXMgLyAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vd3NnaS5weQorCisgICAgICZsdDtEaXJlY3RvcnkgLy9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi8mZ3Q7CisgICAgICAgICAmbHQ7RmlsZXMgd3NnaS5weSZndDsKKyAgICAgICAgICAgICBSZXF1aXJlIGFsbCBncmFudGVkCisgICAgICAgICAmbHQ7L0ZpbGVzJmd0OworICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNvbGxlY3Qgc3RhdGljIG1lZGlhIGZyb20gVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGNvbmZpZ3VyaW5nIEFwYWNoZSB0byBzZXJ2ZSB0aGF0IHN0YXRpYworICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgL3Zhci93d3cuaHRtbC9zdGF0aWMgJmFtcDsmYW1wOyBjZCAvdmFyL3d3dy5odG1sL3N0YXRpYworICAgICAkIC9vcHQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY29sbGVjdHN0YXRpYworICAgICAkIGNhdCAvZXRjL2FwYWNoZTIvc2l0ZXMtYXZhaWxhYmxlLzAwMC1kZWZhdWx0LmNvbmYKKworICAgICAgICAuLi4KKworICAgICAjIGluIFZpcnR1YWxIb3N0LCBBSEVBRCBvZiB0aGUgV1NHSVNjcmlwdEFsaWFzIGRlZmluaXRpb24KKyAgICAgQWxpYXMgL3N0YXRpYy8gL3Zhci93d3cuaHRtbC9zdGF0aWMvCisKKyAgICAgJmx0O0RpcmVjdG9yeSAvdmFyL3d3dy5odG1sL3N0YXRpYy8mZ3Q7CisgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgJmx0Oy9EaXJlY3RvcnkmZ3Q7CisKKyAgICAgICAgLi4uCisKKyAgICAgV1NHSVNjcmlwdCBBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSB0aGUgZGF0YWJhc2VzIGZvciBUb2FzdGVyLCBhbmQgdGhlbiBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgdXAgdGhlIHdlYiBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb250aW51ZXMgd2l0aCB0aGUgYXNzdW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cyBmcm9tIHRoZSBwcmV2aW91cyBzdGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHN5bmNkYgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0KKyAgICAgJCAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgYmxkY29udHJvbAorCisgICAgICQgc2VydmljZSBhcGFjaGUyIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgdXNlZCBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCBCdWlsZCBDb250cm9sIGFuZCBPcGVuIHRoZSBXZWIgSW50ZXJmYWNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBydW4gdGhlIGJ1aWxkIGNvbnRyb2wgbWFuYWdlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgYXMgdGhlICJwb2t5IiB1c2VyLCBzdGFydCB0aGUgcnVuYnVpbGRzIGNvbW1hbmQgaW4gYSBsb29wIChvciBwdXQgaXQgaW4gY3JvbnRhYiEpCisgICAgICQgc3VkbyAtaSAtdSBwb2t5CisgICAgICQgd2hpbGUgdHJ1ZTsgZG8gL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5idWlsZHM7IHNsZWVwIDEwOyBkb25lCisKKyAgICAgIyBvcGVuIHVwIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICQgeGRnLW9wZW4gaHR0cDovL1tzZXJ2ZXItYWRkcmVzc10vdG9hc3Rlcmd1aS8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHlvdSBlbmFibGUgYnVpbGQgY29udHJvbCBieQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyA8ZmlsZW5hbWU+cnVuYnVpbGRzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3JvbnRhYjwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY3JvbnRhYiAtbAorICAgICAqICogKiAqICogIC9vcHQvYml0YmFrZS9saXQvdG9hc3Rlci9tYW5hZ2UucHkgcnVuYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuIHRoZSBCcm93c2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBBcGFjaGUgc2VydmVyIGlzIHJ1bm5pbmcsIGNvbm5lY3QgdG8gaXQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBmYXZvcml0ZSBicm93c2VyIGFuZCB2ZXJpZnkgdGhhdCB0aGUgVG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGNvbWVzIHVwOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vbG9jYWxob3N0OjgwMDAvdG9hc3Rlcmd1aQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0cmFjayBhY2Nlc3NlcyBhbmQgZXJyb3JzIGluIHRoZSBBcGFjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgbG9ncy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdGhlLXRvYXN0ZXItd2ViLWludGVyZmFjZSc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgVG9hc3RlciBXZWIgSW50ZXJmYWNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UgYWxsb3dzIHlvdSB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJyb3dzZSBwdWJsaXNoZWQgbGF5ZXJzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcnPk9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgeW91ciBzZWxlY3RlZCB2ZXJzaW9uIG9mIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW1wb3J0IHlvdXIgb3duIGxheWVycyBmb3IgYnVpbGRpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkIGFuZCByZW1vdmUgbGF5ZXJzIGZyb20geW91ciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSB0YXJnZXQgb3IgbXVsdGlwbGUgdGFyZ2V0cyB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdGFydCB5b3VyIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgd2hhdCB3YXMgYnVpbHQgKHJlY2lwZXMgYW5kIHBhY2thZ2VzKSBhbmQgd2hhdAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB3ZXJlIGluc3RhbGxlZCBpbnRvIHlvdXIgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnJvd3NlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSB2YWx1ZSBvZiBhbGwgdmFyaWFibGVzIGluIHlvdXIgYnVpbGQgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHdoaWNoIGZpbGVzIHNldCBlYWNoIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEV4YW1pbmUgZXJyb3IsIHdhcm5pbmcgYW5kIHRyYWNlIG1lc3NhZ2VzIHRvIGFpZCBpbgorICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCaXRCYWtlIHRhc2tzIGV4ZWN1dGVkIGFuZAorICAgICAgICAgICAgICAgICAgICByZXVzZWQgZHVyaW5nIHlvdXIgYnVpbGQsIGluY2x1ZGluZyB0aG9zZSB0aGF0IHVzZWQKKyAgICAgICAgICAgICAgICAgICAgc2hhcmVkIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSBkZXBlbmRlbmN5IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiByZWNpcGVzLCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhbmQgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uIHN1Y2ggYXMgYnVpbGQgdGltZSwgdGFzayB0aW1lLAorICAgICAgICAgICAgICAgICAgICBDUFUgdXNhZ2UsIGFuZCBkaXNrIEkvTy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc2V2ZXJhbCB2aWRlb3MgdGhhdCBzaG93IGhvdyB0byB1c2UgdGhlIFRvYXN0ZXIgR1VJOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIENvbmZpZ3VyYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXFZZ0RaOFl6VjZ3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG92ZXJ2aWV3cyBhbmQgZGVtb25zdHJhdGVzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VG9hc3RlciBIb21lcGFnZSBhbmQgVGFibGUgQ29udHJvbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVFFQVJEbnJSMVh3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGdvZXMgb3ZlciB0aGUgVG9hc3RlciBlbnRyeSBwYWdlLCBhbmQgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgYW4gb3ZlcnZpZXcgb2YgdGhlIGRhdGEgbWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcyBvZgorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLCB3aGljaCBpbmNsdWRlIHNlYXJjaCwgc29ydGluZyBhbmQgZmlsdGVyaW5nIGJ5CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjcml0ZXJpYS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBEYXNoYm9hcmQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUtLcUhZY25wMmdFJz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHlvdSB0aGUgYnVpbGQgZGFzaGJvYXJkLCBhIHBhZ2UgcHJvdmlkaW5nIGFuCisgICAgICAgICAgICAgICAgICAgIG92ZXJ2aWV3IG9mIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgZm9yIGEgc2VsZWN0ZWQgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1hZ2UgSW5mb3JtYXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVhxWUdGc21BMFJ3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdhbGtzIHRocm91Z2ggdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgYWJvdXQgaW1hZ2VzOiBwYWNrYWdlcyBpbnN0YWxsZWQgYW5kIHJvb3QgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9VVctai1UMlR6SWcnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgVG9hc3RlciBidWlsZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhc2tzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1ENC05dkdTeFF0dyc+dmlkZW88L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgcnVuIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlcyBhbmQgUGFja2FnZXMgQnVpbHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXgtNmR4NGh1Tm53Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzIGFib3V0IHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHBhY2thZ2VzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBlcmZvcm1hbmNlIERhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXFXR01ySm9xdXNRJz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHRoZSBidWlsZCBwZXJmb3JtYW5jZSBkYXRhIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKzwhLS0KKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtMSc+CisgICAgICAgICAgICA8dGl0bGU+VG9hc3RlciBIb21lcGFnZSBhbmQgVGFibGUgQ29udHJvbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIGdvZXMgb3ZlciB0aGUgVG9hc3RlciBlbnRyeSBwYWdlLCBhbmQgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICBhbiBvdmVydmlldyBvZiB0aGUgZGF0YSBtYW5pcHVsYXRpb24gY2FwYWJpbGl0aWVzIG9mIFRvYXN0ZXIsCisgICAgICAgICAgICAgICAgd2hpY2ggaW5jbHVkZSBzZWFyY2gsIHNvcnRpbmcgYW5kIGZpbHRlcmluZyBieSBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICBjcml0ZXJpYS4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MCIgaGVpZ2h0PSI0ODAiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9RRUFSRG5yUjFYdyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTInPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIERhc2hib2FyZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gc2hvd3MgeW91IHRoZSBidWlsZCBkYXNoYm9hcmQsIGEgcGFnZSBwcm92aWRpbmcgYW4KKyAgICAgICAgICAgICAgICBvdmVydmlldyBvZiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZvciBhIHNlbGVjdGVkIGJ1aWxkLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9LS3FIWWNucDJnRSI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTMnPgorICAgICAgICAgICAgPHRpdGxlPkltYWdlIEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyB3YWxrcyB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzCisgICAgICAgICAgICAgICAgYWJvdXQgaW1hZ2VzOiBwYWNrYWdlcyBpbnN0YWxsZWQgYW5kIHJvb3QgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L1hxWUdGc21BMFJ3Ij48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtNCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gc2hvd3MgdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMgYWJvdXQgYnVpbGQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9VVy1qLVQyVHpJZyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTUnPgorICAgICAgICAgICAgPHRpdGxlPlRhc2tzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICB0YXNrcyBydW4gYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YvRDQtOXZHU3hRdHciPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy02Jz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWNpcGVzIGFuZCBQYWNrYWdlcyBCdWlsdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gc2hvd3MgdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMgYWJvdXQgcmVjaXBlcworICAgICAgICAgICAgICAgIGFuZCBwYWNrYWdlcyBidWlsdC4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YveC02ZHg0aHVObnciPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+cVlnRFo4WXpWNncKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy03Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QZXJmb3JtYW5jZSBEYXRhPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgYnVpbGQgcGVyZm9ybWFuY2UgZGF0YSBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L3FXR01ySm9xdXNRIj48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CistLT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZGI1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3RhcnQueG1sCkBAIC0wLDAgKzEsMTQxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ndG9hc3Rlci1tYW51YWwtc3RhcnQnPgorCis8dGl0bGU+UHJlcGFyaW5nIHRvIFVzZSBUb2FzdGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGhvdyB5b3UgbmVlZCB0byBwcmVwYXJlIHlvdXIgc3lzdGVtIGluIG9yZGVyIHRvCisgICAgICAgIHVzZSBUb2FzdGVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLXNldHRpbmctdXAtdGhlLWJhc2ljLXN5c3RlbS1yZXF1aXJlbWVudHMnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgQmFzaWMgU3lzdGVtIFJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgZmlyc3QgbmVlZCB0byBiZSBzdXJlIHlvdXIgYnVpbGQgc3lzdGVtIGlzIHNldCB1cCB0byBydW4KKyAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjeXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgaW5mb3JtYXRpb24gb24gaG93CisgICAgICAgICAgICB0byBzZXQgdXAgeW91ciBzeXN0ZW0gZm9yIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZXN0YWJsaXNoaW5nLXRvYXN0ZXItc3lzdGVtLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvYXN0ZXIgcmVxdWlyZXMgZXh0cmEgUHl0aG9uIGRlcGVuZGVuY2llcyBpbiBvcmRlciB0byBydW4uCisgICAgICAgICAgICBBIFRvYXN0ZXIgcmVxdWlyZW1lbnRzIGZpbGUgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyLXJlcXVpcmVtZW50cy50eHQ8L2ZpbGVuYW1lPiBkZWZpbmVzIHRoZQorICAgICAgICAgICAgUHl0aG9uIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIFRoZSByZXF1aXJlbWVudHMgZmlsZSBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBkaXJlY3RvcnksIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICByb290IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3kvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGUgZGVwZW5kZW5jaWVzIGFwcGVhciBpbiBhIDxmaWxlbmFtZT5waXA8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGluc3RhbGwtY29tcGF0aWJsZSBmb3JtYXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1vcHRpb25hbC12aXJ0dWFsLWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PcHRpb25hbGx5IFNldHRpbmcgVXAgYSBQeXRob24gVmlydHVhbCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSBQeXRob24gdmlydHVhbAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHRoYXQgYWxsb3dzIHlvdSB0byBtYWludGFpbiBhIGRlZGljYXRlZCBQeXRob24KKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlIGFuZCBpdHMgb3duIHNldCBvZiBpbnN0YWxsZWQgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBzZXBhcmF0ZXMgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgUHl0aG9uIGFuZCBtb2R1bGVzCisgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZXJlZm9yZSBhdm9pZHMgYW55CisgICAgICAgICAgICAgICAgdmVyc2lvbiBjb25mbGljdHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgeW91ciB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGFzc3VtZSBhIFVidW50dSBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgPGZpbGVuYW1lPnZpcnR1YWxlbnY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbCB0aGUgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cHl0aG9uLXZpcnR1YWxlbnY8L2ZpbGVuYW1lPiBwYWNrYWdlIGZyb20geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIHJhdGhlciB0aGFuIHVzaW5nIDxmaWxlbmFtZT5waXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBweXRob24tdmlydHVhbGVudgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGFuZCBBY3RpdmF0ZSBhIFZpcnR1YWwgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB2aXJ0dWFsZW52IHZlbnYKKyAgICAgJCBzb3VyY2UgdmVudi9iaW4vYWN0aXZhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBjaG9vc2UgdG8gc2V0IHVwIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpbgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBydW4gVG9hc3RlciwgeW91IG11c3QgaW5pdGlhbGl6ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQgZWFjaCB0aW1lIHlvdSB3YW50IHRvIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIHRvIGluaXRpYWxpemUgdGhlIGVudmlyb25tZW50IGp1c3QKKyAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHlvdSBzdGFydCBUb2FzdGVyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIHZlbnYvYmluL2FjdGl2YXRlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1sb2FkLXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsIFRvYXN0ZXIgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlcyB0aGF0IFRvYXN0ZXIgcmVxdWlyZXMuCisgICAgICAgICAgICAgICAgVXNlIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcGlwIGluc3RhbGwgLXIgYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworPCEtLSBDb21tZW50aW5nIHRoaXMgc2VjdGlvbiBvdXQgZm9yIG5vdyBpbiBjYXNlIGl0IG5lZWRzIHRvIGJlIHVzZWQgYWdhaW4uCisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItaW5zdGFsbC1kYWVtb24nPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGwgPGZpbGVuYW1lPmRhZW1vbjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG9hc3RlciBkZXBlbmRzIG9uCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5saWJzbGFjay5vcmcvZGFlbW9uLyc+PGZpbGVuYW1lPmRhZW1vbjwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJpYnV0aW9uLCBob3cgeW91IGluc3RhbGwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT4gZGlmZmVyczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlYmlhbi1CYXNlZCBTeXN0ZW1zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBEZWJpYW4tYmFzZWQgZGlzdHJpYnV0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCA8ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBkYWVtb27igIsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5vbi1EZWJpYW4tQmFzZWQgU3lzdGVtczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBub3QgcnVubmluZyBhIERlYmlhbi1iYXNlZCBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIChSZWRoYXQtYmFzZWQgZGlzdHJpYnV0aW9uIHN1Y2ggYXMgRmVkb3JhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGRvd25sb2FkIOKAi3RoZSBmaWxlIHJlbGV2YW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIGFuZCB0aGVuIGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYWVtb248L2ZpbGVuYW1lPiBtYW51YWxseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgdGhlIGNvbW1hbmRzIGZvciA2NC1iaXQgZGlzdHJpYnV0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3Z2V0IGh0dHA6Ly9saWJzbGFjay5vcmcvZGFlbW9uL2Rvd25sb2FkL2RhZW1vbi0wLjYuNC0xLng4Nl82NC5ycG0KKyAgICAgJCBzdWRvIHJwbSAtaSBkYWVtb24tMC42LjQtMS54ODZfNjQucnBtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgY29tbWFuZHMgZm9yIGEgMzItYml0IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3Z2V0IGh0dHA6Ly9saWJzbGFjay5vcmcvZGFlbW9uL2Rvd25sb2FkL2RhZW1vbi0wLjYuNC0xLmk2ODYucnBtCisgICAgICQgc3VkbyBycG0gLWkg4oCLZGFlbW9uLTAuNi40LTEuaTY4Ni5ycG3igIsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+IC0tPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNmI5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwueG1sCkBAIC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxib29rIGlkPSd0b2FzdGVyLW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorICAgICAgICAgICAgVG9hc3RlciBVc2VyIE1hbnVhbAorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5TY290dDwvZmlyc3RuYW1lPiA8c3VybmFtZT5SaWZlbmJhcms8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5JbnRlbCBDb3Jwb3JhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5zY290dC5tLnJpZmVuYmFya0BpbnRlbC5jb208L2VtYWlsPgorICAgICAgICAgICAgPC9hdXRob3I+CisgICAgICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+JkNPUFlSSUdIVF9ZRUFSOzwveWVhcj4KKyAgICAgIDxob2xkZXI+TGludXggRm91bmRhdGlvbjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgPHBhcmE+CisgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfVE9BU1RfVVJMOyc+VG9hc3RlciBVc2VyIE1hbnVhbDwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorCisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ0b2FzdGVyLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InRvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InRvYXN0ZXItbWFudWFsLXJlZmVyZW5jZS54bWwiLz4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvZWNsaXBzZS1oZWxwLnNlZCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9lY2xpcHNlLWhlbHAuc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjkwYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvZWNsaXBzZS1oZWxwLnNlZApAQCAtMCwwICsxLDE4IEBACisjIFByb2Nlc3NlcyBwb2t5LXJlZi1tYW51YWwgYW5kIHlvY3RvLXByb2plY3QtcXMgbWFudWFsICg8d29yZD4tPHdvcmQ+LTx3b3JkPiBzdHlsZSkKKyMgRm9yIGV4YW1wbGU6CisjICAgInVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjMvcG9reS1yZWYtbWFudWFsL3Bva3ktcmVmLW1hbnVhbC5odG1sI2ZhcSIKKyMgICAtPiAibGluayIgaHJlZj0iLi4vcG9reS1yZWYtbWFudWFsL2ZhcS5odG1sIgorcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKi1bYS16XSpcKVwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbCNcKFteXCJdKlwpXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9cMi5odG1sXCIvZworCisjIFByb2Nlc3NlcyBhbGwgb3RoZXIgbWFudWFscyAoPHdvcmQ+LTx3b3JkPiBzdHlsZSkKKyMgRm9yIGV4YW1wbGU6CisjICAgInVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjMva2VybmVsLW1hbnVhbC9rZXJuZWwtbWFudWFsLmh0bWwjZmFxIgorIyAgIC0+ICJsaW5rIiBocmVmPSIuLi9rZXJuZWwtbWFudWFsL2ZhcS5odG1sIgorcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLmh0bWwjXChbXlwiXSpcKVwiL1wibGlua1wiIGhyZWY9XCJcLlwuXC9cMVwvXDIuaHRtbFwiL2cKKworIyBQcm9jZXNzIGNhc2VzIHdoZXJlIGp1c3QgYW4gZXh0ZXJuYWwgbWFudWFsIGlzIHJlZmVyZW5jZWQgd2l0aG91dCBhbiBpZCBhbmNob3IKKyMgRm9yIGV4YW1wbGU6CisjICAgInVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjMva2VybmVsLW1hbnVhbC9rZXJuZWwtbWFudWFsLmh0bWwKKyMgICAtPiAibGluayIgaHJlZj0iLi4va2VybmVsLW1hbnVhbC9pbmRleC5odG1sIgorcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKi1bYS16XSpcKVwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbFwiL1wibGlua1wiIGhyZWY9XCJcLlwuXC9cMVwvaW5kZXguaHRtbFwiL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvW15cL10qXC9cKFthLXpdKi1bYS16XSpcKVwvW2Etel0qLVthLXpdKi5odG1sXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9pbmRleC5odG1sXCIvZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9tZWdhLW1hbnVhbC5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjNDBiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9tZWdhLW1hbnVhbC5zZWQKQEAgLTAsMCArMSwzMyBAQAorIyBQcm9jZXNzZXMgcG9reS1yZWYtbWFudWFsIGFuZCB5b2N0by1wcm9qZWN0LXFzIG1hbnVhbCAoPHdvcmQ+LTx3b3JkPi08d29yZD4gc3R5bGUpLgorIyBUaGlzIHN0eWxlIGlzIGZvciBtYW51YWwgZm9sZGVycyBsaWtlICJ5b2N0by1wcm9qZWN0LXFzIiBhbmQgInBva3ktcmVmLW1hbnVhbCIuCisjIFRoaXMgaXMgdGhlIG9sZCB3YXkgdGhhdCBkaWQgaXQuICBDYW4ndCBkbyB0aGF0IG5vdyB0aGF0IHdlIGhhdmUgImJpdGJha2UtdXNlci1tYW51YWwiIHN0cmluZ3MKKyMgaW4gdGhlIG1lZ2EtbWFudWFsLgorIyBzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvW2Etel0qLVthLXpdKi1bYS16XSpcL1thLXpdKi1bYS16XSotW2Etel0qLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9wb2t5LXJlZi1tYW51YWxcL3Bva3ktcmVmLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCisKKyMgUHJvY2Vzc2VzIGFsbCBvdGhlciBtYW51YWxzICg8d29yZD4tPHdvcmQ+IHN0eWxlKSBleGNlcHQgZm9yIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsIGJlY2F1c2UKKyMgaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBtZWdhLW1hbnVhbC4KKyMgVGhpcyBzdHlsZSBpcyBmb3IgbWFudWFsIGZvbGRlcnMgdGhhdCB1c2UgdHdvIHdvcmQsIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBub3cgKGUuZy4gInJlZi1tYW51YWwiKS4KKyMgVGhpcyB3YXMgdGhlIG9uZS1saW5lciB0aGF0IHdvcmtlZCBiZWZvcmUgd2UgaW50cm9kdWNlZCB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbCwgd2hpY2ggaXMKKyMgbm90IGluIHRoZSBtZWdhLW1hbnVhbC4KKyMgcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL1thLXpdKi1bYS16XSpcL1thLXpdKi1bYS16XSouaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvYWR0LW1hbnVhbFwvYWR0LW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvYnNwLWd1aWRlXC9ic3AtZ3VpZGUuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2Rldi1tYW51YWxcL2Rldi1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2tlcm5lbC1kZXZcL2tlcm5lbC1kZXYuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3Byb2ZpbGUtbWFudWFsXC9wcm9maWxlLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvcmVmLW1hbnVhbFwvcmVmLW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvdG9hc3Rlci1tYW51YWxcL3RvYXN0ZXItbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKKworIyBQcm9jZXNzIGNhc2VzIHdoZXJlIGp1c3QgYW4gZXh0ZXJuYWwgbWFudWFsIGlzIHJlZmVyZW5jZWQgd2l0aG91dCBhbiBpZCBhbmNob3IKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC95b2N0by1wcm9qZWN0LXFzXC95b2N0by1wcm9qZWN0LXFzLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDxcL2E+L1lvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2Rldi1tYW51YWxcL2Rldi1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDxcL2E+L1lvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9hZHQtbWFudWFsXC9hZHQtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTxcL2E+L1lvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2JzcC1ndWlkZVwvYnNwLWd1aWRlLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8XC9hPi9Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvcHJvZmlsZS1tYW51YWxcL3Byb2ZpbGUtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9rZXJuZWwtZGV2XC9rZXJuZWwtZGV2Lmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWxcIiB0YXJnZXQ9XCJfdG9wXCI+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC90b2FzdGVyLW1hbnVhbFwvdG9hc3Rlci1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Ub2FzdGVyIFVzZXIgTWFudWFsPFwvYT4vVG9hc3RlciBVc2VyIE1hbnVhbC9nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvcG9reS1kb2Nib29rLXRvLXBkZiBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi90b29scy9wb2t5LWRvY2Jvb2stdG8tcGRmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NWZkMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvcG9reS1kb2Nib29rLXRvLXBkZgpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwkKK2lmIFsgLXogIiQxIiAtbyAteiAiJDIiIF07IHRoZW4KKyAgIGVjaG8gInVzYWdlOiBbLXZdICQwIDxkb2Nib29rIGZpbGU+IDx0ZW1wbGF0ZWRpcj4iCisgICBlY2hvCisgICBlY2hvICIqTk9URSogeW91IG5lZWQgeHNsdHByb2MsIGZvcCBhbmQgbndhbHNoIGRvY2Jvb2sgc3R5bGVzaGVldHMiIAorICAgZWNobyAiICAgICAgIGluc3RhbGxlZCBmb3IgdGhpcyB0byB3b3JrISIKKyAgIGVjaG8KKyAgIGV4aXQgMAorZmkKKworRk89YGVjaG8gJDEgfCBzZWQgcy8ueG1sLy5mby9gIHx8IGV4aXQgMQorUERGPWBlY2hvICQxIHwgc2VkIHMvLnhtbC8ucGRmL2AgfHwgZXhpdCAxCitURU1QTEFURURJUj0kMgorCisjIworIyBUaGVzZSBVUkkgc2hvdWxkIGJlIHJld3JpdHRlbiBieSB5b3VyIGRpc3RyaWJ1dGlvbidzIHhtbCBjYXRhbG9nIHRvCisjIG1hdGNoIHlvdXIgbG9jYWx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkk9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50IgorCisjIENyZWF0ZXMgYSB0ZW1wb3JhcnkgWFNMIHN0eWxlc2hlZXQgYmFzZWQgb24gdGl0bGVwYWdlLnhzbAoreHNsdHByb2MgLW8gL3RtcC90aXRsZXBhZ2UueHNsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRYU0xfQkFTRV9VUkkvdGVtcGxhdGUvdGl0bGVwYWdlLnhzbCBcCisgICAgICAgICAkVEVNUExBVEVESVIvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgfHwgZXhpdCAxCisKKyMgQ3JlYXRlcyB0aGUgZmlsZSBuZWVkZWQgZm9yIEZPUAoreHNsdHByb2MgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgXAorCSAtLXN0cmluZ3BhcmFtIGh5cGhlbmF0ZSBmYWxzZSBcCisJIC0tc3RyaW5ncGFyYW0gZm9ybWFsLnRpdGxlLnBsYWNlbWVudCAiZmlndXJlIGFmdGVyIiBcCisJIC0tc3RyaW5ncGFyYW0gdWxpbmsuc2hvdyAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGJvZHkuZm9udC5tYXN0ZXIgIDkgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgdGl0bGUuZm9udC5tYXN0ZXIgIDExIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gZHJhZnQud2F0ZXJtYXJrLmltYWdlICIkVEVNUExBVEVESVIvZHJhZnQucG5nIiBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGFwcGVuZGl4LmF1dG9sYWJlbCBBIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24uYXV0b2xhYmVsIDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAtLW91dHB1dCAkRk8gICAgICAgICAgICAgICBcCisgICAgICAgICAkVEVNUExBVEVESVIvcG9reS1kYi1wZGYueHNsICAgIFwKKwkgJDEgICAgICAgICAgICAgICAgIHx8IGV4aXQgMQorCisjIEludm9rZXMgdGhlIEphdmEgdmVyc2lvbiBvZiBGT1AuICBVc2VzIHRoZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBjb21tb24vZm9wLWNvbmZpZy54bWwKK2ZvcCAtYyAkVEVNUExBVEVESVIvZm9wLWNvbmZpZy54bWwgLWZvICRGTyAtcGRmICRQREYgICAgICAgfHwgZXhpdCAxCisKK3JtIC1mICRGTworcm0gLWYgIC90bXAvdGl0bGVwYWdlLnhzbAorCitlY2hvCitlY2hvICIgIyMjIyBTdWNjZXNzISAkUERGIHJlYWR5LiAjIyMjIgorZWNobwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL3VwZGF0ZS1kb2N1bWVudGF0aW9uLWNvbmYgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24vdG9vbHMvdXBkYXRlLWRvY3VtZW50YXRpb24tY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhkMjgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3Rvb2xzL3VwZGF0ZS1kb2N1bWVudGF0aW9uLWNvbmYKQEAgLTAsMCArMSwxNjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIGRvY3VtZW50YXRpb24uY29uZiB1cGRhdGUgc2NyaXB0CisjCisjIEF1dGhvcjogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHJlCitmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCitpbXBvcnQgbG9nZ2luZworCitkZWYgbG9nZ2VyX2NyZWF0ZShuYW1lKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihuYW1lKQorICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICByZXR1cm4gbG9nZ2VyCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCdkb2Njb25mdXBkYXRlcicpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ImRvY3VtZW50YXRpb24uY29uZiB1cGRhdGVyIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXNlcGF0aCcsIGhlbHA9J1BhdGggdG8gT0UtQ29yZSBiYXNlIGRpcmVjdG9yeScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgd2FybmluZ3MvZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLnF1aWV0OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOKQorCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJncy5iYXNlcGF0aCk6CisgICAgICAgIGxvZ2dlci5lcnJvcignU3BlY2lmaWVkIGJhc2UgcGF0aCAlcyBub3QgZm91bmQnKQorICAgICAgICByZXR1cm4gMQorCisgICAgZG9jX2NvbmYgPSBvcy5wYXRoLmpvaW4oYXJncy5iYXNlcGF0aCwgJ21ldGEnLCAnY29uZicsICdkb2N1bWVudGF0aW9uLmNvbmYnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkb2NfY29uZik6CisgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgJXMnICUgZG9jX2NvbmYpCisgICAgICAgIHJldHVybiAxCisKKyAgICBhbGxvd2VkX2ZsYWdzID0gWydkb2MnXQorICAgIGZsYWdfcmUgPSByZS5jb21waWxlKHInXFsoLis/KVxdJykKKworICAgIGluZm9zID0ge30KKyAgICB0cmVlID0gZXRyZWUucGFyc2UoJ3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwnKQorICAgIHJvb3QgPSB0cmVlLmdldHJvb3QoKQorICAgIGZvciBnbG9zc2FyeSBpbiByb290LmZpbmRhbGwoJ2dsb3NzYXJ5Jyk6CisgICAgICAgIGZvciBnbG9zc2RpdiBpbiBnbG9zc2FyeS5maW5kYWxsKCdnbG9zc2RpdicpOgorICAgICAgICAgICAgZm9yIGdsb3NzZW50cnkgaW4gZ2xvc3NkaXYuZmluZGFsbCgnZ2xvc3NlbnRyeScpOgorICAgICAgICAgICAgICAgIGluZm8gPSBnbG9zc2VudHJ5LmZpbmQoJ2luZm8nKQorICAgICAgICAgICAgICAgIGlmIGluZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGluZm9saW5lID0gJyAnLmpvaW4oaW5mby50ZXh0LnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGluZm9saW5lc3BsaXQgPSBpbmZvbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihpbmZvbGluZSkgPCAyOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ludmFsaWQgaW5mbyBsaW5lIChubyA9IGNoYXJhY3RlciksIGlnbm9yaW5nOiAlcycgJSBpbmZvbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gZmxhZ19yZS5maW5kYWxsKGluZm9saW5lc3BsaXRbMF0pCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdJbnZhbGlkIGluZm8gbGluZSAobm8gdmFyZmxhZyksIGlnbm9yaW5nOiAlcycgJSBpbmZvbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGZvciBmbGFnIGluIGZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmxhZyBub3QgaW4gYWxsb3dlZF9mbGFnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBpbmZvIGxpbmUgKHZhcmZsYWcgJXMgbm90IGluIGFsbG93ZWQgbGlzdCksIGlnbm9yaW5nOiAlcycgJSAoZmxhZywgaW5mb2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGluZm9zW2luZm9saW5lc3BsaXRbMF0ucnN0cmlwKCldID0gaW5mb2xpbmVzcGxpdFsxXS5sc3RyaXAoKQorCisgICAgaWYgbm90IGluZm9zOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ0VSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgaW5mbyB0YWdzIGluIHRoZSBnbG9zc2FyeScpCisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgc29ydGtleShrZXkpOgorICAgICAgICAjIFVuZGVyc2NvcmVzIHNvcnQgdW5kZXNpcmFibHksIHNvIHJlcGxhY2UgdGhlbQorICAgICAgICByZXR1cm4ga2V5LnNwbGl0KCdbJylbMF0ucmVwbGFjZSgnXycsICctJykKKworICAgIGNoYW5nZWQgPSBGYWxzZQorICAgIGxpbmVzID0gW10KKyAgICBpbnZhcnMgPSBGYWxzZQorICAgIGxhc3RsZXR0ZXIgPSBOb25lCisgICAgYWRkZWQgPSBbXQorICAgIHdpdGggb3Blbihkb2NfY29uZiwgJ3InKSBhcyBkY2Y6CisgICAgICAgIGZvciBsaW5lIGluIGRjZjoKKyAgICAgICAgICAgIGlmIG5vdCBpbnZhcnM6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJykgYW5kICdERVNDUklQVElPTlMgRk9SIFZBUklBQkxFUycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgaW52YXJzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBub3QgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzcGxpdCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBsaW5lc3BsaXRbMF0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgbGFzdGxldHRlciA9IGtleVswXQorICAgICAgICAgICAgICAgICAgICAjIEZpbmQgYW55dGhpbmcgaW4gdGhlIGRpY3QgdGhhdCBzaG91bGQgY29tZSBiZWZvcmUgdGhlIGN1cnJlbnQga2V5CisgICAgICAgICAgICAgICAgICAgIGZvciBka2V5IGluIHNvcnRlZChpbmZvcy5rZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc29ydGtleShka2V5KSA8IHNvcnRrZXkoa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzID0gJXNcbicgJSAoZGtleSwgaW5mb3NbZGtleV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkLmFwcGVuZChka2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvc1tka2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gaW5mb3MuZ2V0KGtleSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgaW5mb3Nba2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV3dmFsdWUgIT0gbGluZXNwbGl0WzFdLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyA9ICVzXG4nICUgKGtleSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkgaW4gYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkgYWRkZWQgYSBuZXcgdmFsdWUgZm9yIHRoaXMga2V5LCBzbyBza2lwIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgbGFzdGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUgd2Ugd3JpdGUgb3V0IGFueXRoaW5nIGFueXRoaW5nIGxlZnQgb3ZlciBmb3IgdGhpcyBsZXR0ZXIKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRrZXkgaW4gc29ydGVkKGluZm9zLmtleXMoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBka2V5WzBdID09IGxhc3RsZXR0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyA9ICVzXG4nICUgKGRrZXksIGluZm9zW2RrZXldKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgaW5mb3NbZGtleV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBka2V5WzBdID4gbGFzdGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExpc3QgaXMgc29ydGVkLCBzbyB3ZSdyZSBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGFzdGxldHRlciA9IE5vbmUKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorCisgICAgaWYgbm90IGludmFyczoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdFUlJPUjogVW5hYmxlIHRvIGZpbmQgdmFyaWFibGVzIHNlY3Rpb24gaW4gZG9jdW1lbnRhdGlvbi5jb25mJykKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGlmIGluZm9zOgorICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAjIFdyaXRlIG91dCBhbnl0aGluZyBsZWZ0IG92ZXIKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJykKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoaW5mb3Mua2V5cygpKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgPSAlc1xuJyAlIChrZXksIGluZm9zW2tleV0pKQorCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZGF0aW5nICVzJyAlIGRvY19jb25mKQorICAgICAgICB3aXRoIG9wZW4oZG9jX2NvbmYsICd3JykgYXMgZGNmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgZGNmLndyaXRlKGxpbmUpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ05vIGNoYW5nZXMgcmVxdWlyZWQnKQorCisgICAgcmV0dXJuIDAKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI3YTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWQyYjE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNWM4NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9xcy1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODMgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDUwcHg7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgd2lkdGg6IDYwMHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWN1c3RvbWl6YXRpb24ueHNsIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MwMmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9InlvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbCIvPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIiBzZWxlY3Q9IidhcnRpY2xlIG5vcCciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSIncXMtc3R5bGUuY3NzJyIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlNjgzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9InlvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idXNlLmlkLmFzLmZpbGVuYW1lIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1bGluay50YXJnZXQiIHNlbGVjdD0iJ19zZWxmJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJiYXNlLmRpciIgc2VsZWN0PSInaHRtbC95b2N0by1wcm9qZWN0LXFzLyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5zZWN0aW9uLmRlcHRoIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJy4uL2Jvb2suY3NzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImVjbGlwc2UubWFuaWZlc3QiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNyZWF0ZS5wbHVnaW4ueG1sIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pbmRleCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIiBzZWxlY3Q9IidhcnRpY2xlIG5vcCciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInc3R5bGUuY3NzJyIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLXRpdGxlcGFnZS54c2wgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLXRpdGxlcGFnZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQzNWFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtdGl0bGVwYWdlLnhzbApAQCAtMCwwICsxLDM4MjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorCis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zOmV4c2w9Imh0dHA6Ly9leHNsdC5vcmcvY29tbW9uIiB2ZXJzaW9uPSIxLjAiIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJleHNsIj4KKworPCEtLSBUaGlzIHN0eWxlc2hlZXQgd2FzIGNyZWF0ZWQgYnkgdGVtcGxhdGUvdGl0bGVwYWdlLnhzbC0tPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFydGljbGVpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFydGhlYWRlci90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aWNsZWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aGVhZGVyL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRpY2xlaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjxoci8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYW5jaG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKzwhLS0gb3JpZ25hbGx5IGdlbmVyYXRlZCBjb250ZW50IC0tPgorPCEtLSA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4gLS0+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZXRpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2V0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjxoci8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJib29raW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJib29raW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjxoci8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkaXZpc2lvbi50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjpwYXJ0WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icGFydGluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icGFydC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InBhcnRpbnRyb2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGludHJvaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJwYXJ0aW50cm9pbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlIj4KKyAgPGRpdj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InJlZmVyZW5jZWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icmVmZXJlbmNlaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJyZWZlcmVuY2VpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJyZWZlbnRyeS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InJlZmVudHJ5LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjpkZWRpY2F0aW9uWzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iZGVkaWNhdGlvbmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRlZGljYXRpb25pbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OmFja25vd2xlZGdlbWVudHNbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhY2tub3dsZWRnZW1lbnRzaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYWNrbm93bGVkZ2VtZW50c2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icHJlZmFjZWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InByZWZhY2VpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iY2hhcHRlcmluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImNoYXB0ZXJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFwcGVuZGl4aW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhcHBlbmRpeGluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdGlvbmluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdGlvbmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2Uuc2VwYXJhdG9yIj48eHNsOmlmIHRlc3Q9ImNvdW50KHBhcmVudDo6Kik9JzAnIj48aHIvPjwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0MWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QxaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0MmluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QyaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0M2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QzaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0NGluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0NWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q1aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNpbXBsZXNlY3RpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzaW1wbGVzZWN0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2dyYXBoeVsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImJpYmxpb2dyYXBoeWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYmlibGlvZ3JhcGh5aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6Omdsb3NzYXJ5WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iZ2xvc3NhcnlpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZ2xvc3NhcnlpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJnbG9zc2FyeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6aW5kZXhbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmRleGluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmRleGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjpzZXRpbmRleFsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNldGluZGV4aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZGV4aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0aW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzaWRlYmFyaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2lkZWJhcmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2lkZWJhcmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpZGViYXJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImZvcm1hbC5vYmplY3QuaGVhZGluZyI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ib2JqZWN0IiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OnNpZGViYXJbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbCBiL3lvY3RvLXBva3kvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTczMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbApAQCAtMCwwICsxLDc5NSBAQAorPCFET0NUWVBFIGFydGljbGUgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGFydGljbGUgaWQ9J3lvY3RvLXByb2plY3QtcXMtaW50cm8nPgorICAgIDxhcnRpY2xlaW5mbz4KKyAgICAgICAgPHRpdGxlPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3RpdGxlPgorCisgICAgICAgIDxjb3B5cmlnaHQ+CisgICAgICAgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgICAgIDwvY29weXJpZ2h0PgorCisgICAgICAgIDxsZWdhbG5vdGljZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4KKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvbGVnYWxub3RpY2U+CisKKworICAgICAgICA8YWJzdHJhY3Q+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nIgorICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjFpbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPSJyaWdodCIgc2NhbGU9IjI1IiAvPgorICAgICAgICA8L2Fic3RyYWN0PgorICAgIDwvYXJ0aWNsZWluZm8+CisKKyAgICA8c2VjdGlvbiBpZD0nd2VsY29tZSc+CisgICAgICAgIDx0aXRsZT5XZWxjb21lITwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2VsY29tZSB0byB0aGUgWW9jdG8gUHJvamVjdCEKKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGlzIGFuIG9wZW4tc291cmNlIGNvbGxhYm9yYXRpb24gcHJvamVjdCB3aG9zZQorICAgICAgICAgICAgZm9jdXMgaXMgZGV2ZWxvcGVycyBvZiBlbWJlZGRlZCBMaW51eCBzeXN0ZW1zLgorICAgICAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEgYnVpbGQgaG9zdCBiYXNlZAorICAgICAgICAgICAgb24gdGhlIE9wZW5FbWJlZGRlZCAoT0UpIHByb2plY3QsIHdoaWNoIHVzZXMgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgdG9vbCwgdG8gY29uc3RydWN0IGNvbXBsZXRlIExpbnV4IGltYWdlcy4KKyAgICAgICAgICAgIFRoZSBCaXRCYWtlIGFuZCBPRSBjb21wb25lbnRzIGFyZSBjb21iaW5lZCB0b2dldGhlciB0byBmb3JtCisgICAgICAgICAgICBhIHJlZmVyZW5jZSBidWlsZCBob3N0LCBoaXN0b3JpY2FsbHkga25vd24gYXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgc3lzdGVtIHRoYXQgcnVucyBMaW51eCBhbmQgeW91IHdhbnQgdG8gZ2l2ZQorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgYSB0ZXN0IHJ1biwgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIHRoZSBZb2N0bworICAgICAgICAgICAgUHJvamVjdCBCdWlsZCBBcHBsaWFuY2UuCisgICAgICAgICAgICBUaGUgQnVpbGQgQXBwbGlhbmNlIGFsbG93cyB5b3UgdG8gYnVpbGQgYW5kIGJvb3QgYSBjdXN0b20gZW1iZWRkZWQKKyAgICAgICAgICAgIExpbnV4IGltYWdlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgYSBub24tTGludXggZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2J1aWxkLWFwcGxpYW5jZSc+WW9jdG8gUHJvamVjdCBCdWlsZCBBcHBsaWFuY2U8L3VsaW5rPgorICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgcXVpY2sgc3RhcnQgaXMgd3JpdHRlbiBzbyB0aGF0IHlvdSBjYW4gcXVpY2tseSBnZXQgYSBob3N0CisgICAgICAgICAgICBidWlsZCBob3N0IHNldCB1cCB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QgYW5kIHRoZW4gYnVpbGQgc29tZQorICAgICAgICAgICAgTGludXggaW1hZ2VzLgorICAgICAgICAgICAgUmF0aGVyIHRoYW4gZ28gaW50byBncmVhdCBkZXRhaWwgYWJvdXQgdGhlIFlvY3RvIFByb2plY3QgYW5kIGl0cworICAgICAgICAgICAgbWFueSBjYXBhYmlsaXRpZXMsIHRoaXMgcXVpY2sgc3RhcnQgcHJvdmlkZXMgdGhlIG1pbmltYWwKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHlvdSBuZWVkIHRvIHRyeSBvdXQgdGhlIFlvY3RvIFByb2plY3QgdXNpbmcgYQorICAgICAgICAgICAgc3VwcG9ydGVkIExpbnV4IGJ1aWxkIGhvc3QuCisgICAgICAgICAgICBSZWFkaW5nIGFuZCB1c2luZyB0aGUgcXVpY2sgc3RhcnQgc2hvdWxkIHJlc3VsdCBpbiB5b3UgaGF2aW5nIGEKKyAgICAgICAgICAgIGJhc2ljIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGUgWW9jdG8gUHJvamVjdCBpcyBhbmQgaG93IHRvIHVzZQorICAgICAgICAgICAgc29tZSBvZiBpdHMgY29yZSBjb21wb25lbnRzLgorICAgICAgICAgICAgWW91IHdpbGwgYWxzbyBoYXZlIHdvcmtlZCB0aHJvdWdoIHN0ZXBzIHRvIHByb2R1Y2UgdHdvIGltYWdlczoKKyAgICAgICAgICAgIG9uZSBzdWl0YWJsZSBmb3IgZW11bGF0aW9uIGFuZCBvbmUgdGhhdCBjYW4gYmUgdXNlZCBvbiBhY3R1YWwKKyAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGhpZ2hsaWdodCB0aGUgZWFzZSB3aXRoIHdoaWNoIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0byBjcmVhdGUgaW1hZ2VzIGZvciBtdWx0aXBsZSB0eXBlcyBvZiBoYXJkd2FyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIFByb2plY3QsIHlvdSBjYW4KKyAgICAgICAgICAgIHJlZmVyZW5jZSB0aGVzZSByZXNvdXJjZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+V2Vic2l0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCBXZWJzaXRlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgdGhlIGxhdGVzdCBidWlsZHMsIGJyZWFraW5nIG5ld3MsIGZ1bGwgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgYW5kIGFjY2VzcyB0byBhIHJpY2ggWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBDb21tdW5pdHkgaW50byB3aGljaCB5b3UgY2FuIHRhcC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GQVFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGNvbW1vbmx5IGFza2VkIFlvY3RvIFByb2plY3QgcXVlc3Rpb25zIGFuZCBhbnN3ZXJzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdHdvIEZBUXM6CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9GQVEnPllvY3RvIFByb2plY3QgRkFRPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb24gYSB3aWtpLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNmYXEnPkZBUTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGV2ZWxvcGVyIFNjcmVlbmNhc3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly92aW1lby5jb20vMzY0NTAzMjEnPkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IC0gTmV3IERldmVsb3BlciBTY3JlZW5jYXN0IFR1dG9yaWFsPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgYSAzMC1taW51dGUgdmlkZW8gY3JlYXRlZCBmb3IgdXNlcnMgdW5mYW1pbGlhcgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGJ1dCBmYW1pbGlhciB3aXRoIExpbnV4IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3RzLgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGlzIHNjcmVlbmNhc3QgaXMgc29tZXdoYXQgZGF0ZWQsIHRoZSBpbnRyb2R1Y3RvcnkKKyAgICAgICAgICAgICAgICAgICAgYW5kIGZ1bmRhbWVudGFsIGNvbmNlcHRzIGFyZSB1c2VmdWwgZm9yIHRoZSBiZWdpbm5lci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd5cC1pbnRybyc+CisgICAgICAgIDx0aXRsZT5JbnRyb2R1Y2luZyB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0aHJvdWdoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIGFuCisgICAgICAgICAgICBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB0YXJnZXRpbmcgdGhlIEFSTSwgTUlQUywKKyAgICAgICAgICAgIFBvd2VyUEMsIGFuZCB4ODYgYXJjaGl0ZWN0dXJlcyBmb3IgYSB2YXJpZXR5IG9mIHBsYXRmb3JtcworICAgICAgICAgICAgaW5jbHVkaW5nIHg4Ni02NCBhbmQgZW11bGF0ZWQgb25lcy4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIGNvbXBvbmVudHMgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB0byBkZXNpZ24sIGRldmVsb3AsCisgICAgICAgICAgICBidWlsZCwgZGVidWcsIHNpbXVsYXRlLCBhbmQgdGVzdCB0aGUgY29tcGxldGUgc29mdHdhcmUgc3RhY2sgdXNpbmcKKyAgICAgICAgICAgIExpbnV4LCB0aGUgWCBXaW5kb3cgU3lzdGVtLCBHVEsrIGZyYW1ld29ya3MsIGFuZCBRdCBmcmFtZXdvcmtzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmciCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iUE5HIiBhbGlnbj0nY2VudGVyJyBzY2FsZWZpdD0nMScgd2lkdGg9IjEwMCUiLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8Y2FwdGlvbj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvcGFyYT4KKyAgICAgICAgICAgIDwvY2FwdGlvbj4KKyAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGhpZ2hsaWdodHMgZm9yIHRoZSBZb2N0byBQcm9qZWN0OgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBQcm92aWRlcyBhIHJlY2VudCBMaW51eCBrZXJuZWwgYWxvbmcgd2l0aCBhIHNldCBvZiBzeXN0ZW0KKyAgICAgICAgICAgICAgICBjb21tYW5kcyBhbmQgbGlicmFyaWVzIHN1aXRhYmxlIGZvciB0aGUgZW1iZWRkZWQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBNYWtlcyBhdmFpbGFibGUgc3lzdGVtIGNvbXBvbmVudHMgc3VjaCBhcyBYMTEsIEdUSyssIFF0LAorICAgICAgICAgICAgICAgIENsdXR0ZXIsIGFuZCBTREwgKGFtb25nIG90aGVycykgc28geW91IGNhbiBjcmVhdGUgYSByaWNoIHVzZXIKKyAgICAgICAgICAgICAgICBleHBlcmllbmNlIG9uIGRldmljZXMgdGhhdCBoYXZlIGRpc3BsYXkgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgRm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBhIGRpc3BsYXkgb3Igd2hlcmUgeW91IHdpc2ggdG8KKyAgICAgICAgICAgICAgICB1c2UgYWx0ZXJuYXRpdmUgVUkgZnJhbWV3b3JrcywgdGhlc2UgY29tcG9uZW50cyBuZWVkIG5vdCBiZQorICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBDcmVhdGVzIGEgZm9jdXNlZCBhbmQgc3RhYmxlIGNvcmUgY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBwcm9qZWN0IHdpdGggd2hpY2ggeW91IGNhbiBlYXNpbHkgYW5kIHJlbGlhYmx5CisgICAgICAgICAgICAgICAgYnVpbGQgYW5kIGRldmVsb3AuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgRnVsbHkgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9mIGhhcmR3YXJlIGFuZCBkZXZpY2UgZW11bGF0aW9uCisgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGF5ZXIgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIHlvdSB0byBlYXNpbHkgZXh0ZW5kCisgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSwgbWFrZSBjdXN0b21pemF0aW9ucywgYW5kIGtlZXAgdGhlbSBvcmdhbml6ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QgdG8gZ2VuZXJhdGUgaW1hZ2VzIGZvciBtYW55IGtpbmRzCisgICAgICAgICAgICBvZiBkZXZpY2VzLgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIGNyZWF0aW9uIG9mCisgICAgICAgICAgICByZWZlcmVuY2UgaW1hZ2VzIHRoYXQgeW91IGNhbiBib290IHdpdGhpbiBhbmQgZW11bGF0ZSB1c2luZyBRRU1VLgorICAgICAgICAgICAgVGhlIHN0YW5kYXJkIGV4YW1wbGUgbWFjaGluZXMgdGFyZ2V0IFFFTVUgZnVsbC1zeXN0ZW0KKyAgICAgICAgICAgIGVtdWxhdGlvbiBmb3IgMzItYml0IGFuZCA2NC1iaXQgdmFyaWFudHMgb2YgeDg2LCBBUk0sIE1JUFMsIGFuZAorICAgICAgICAgICAgUG93ZXJQQyBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgQmV5b25kIGVtdWxhdGlvbiwgeW91IGNhbiB1c2UgdGhlIGxheWVyIG1lY2hhbmlzbSB0byBleHRlbmQKKyAgICAgICAgICAgIHN1cHBvcnQgdG8ganVzdCBhYm91dCBhbnkgcGxhdGZvcm0gdGhhdCBMaW51eCBjYW4gcnVuIG9uIGFuZCB0aGF0CisgICAgICAgICAgICBhIHRvb2xjaGFpbiBjYW4gdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbm90aGVyIFlvY3RvIFByb2plY3QgZmVhdHVyZSBpcyB0aGUgU2F0byByZWZlcmVuY2UgVXNlcgorICAgICAgICAgICAgSW50ZXJmYWNlLgorICAgICAgICAgICAgVGhpcyBvcHRpb25hbCBVSSB0aGF0IGlzIGJhc2VkIG9uIEdUSysgaXMgaW50ZW5kZWQgZm9yIGRldmljZXMgd2l0aAorICAgICAgICAgICAgcmVzdHJpY3RlZCBzY3JlZW4gc2l6ZXMgYW5kIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICBPcGVuRW1iZWRkZWQgQ29yZSBsYXllciBzbyB0aGF0IGRldmVsb3BlcnMgY2FuIHRlc3QgcGFydHMgb2YgdGhlCisgICAgICAgICAgICBzb2Z0d2FyZSBzdGFjay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd5cC1yZXNvdXJjZXMnPgorICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHdoYXQgeW91IG5lZWQgaW4gb3JkZXIgdG8gdXNlIGEKKyAgICAgICAgICAgIExpbnV4LWJhc2VkIGJ1aWxkIGhvc3QgdG8gdXNlIHRoZSBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlczoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIEhvc3Q8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgYnVpbGQgaG9zdCB3aXRoIGEgbWluaW11bSBvZiA1MCBHYnl0ZXMgb2YgZnJlZSBkaXNrCisgICAgICAgICAgICAgICAgc3BhY2UgdGhhdCBpcyBydW5uaW5nIGEgc3VwcG9ydGVkIExpbnV4IGRpc3RyaWJ1dGlvbiAoaS5lLgorICAgICAgICAgICAgICAgIHJlY2VudCByZWxlYXNlcyBvZiBGZWRvcmEsIG9wZW5TVVNFLCBDZW50T1MsIERlYmlhbiwgb3IKKyAgICAgICAgICAgICAgICBVYnVudHUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBIb3N0IFBhY2thZ2VzPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBcHByb3ByaWF0ZSBwYWNrYWdlcyBpbnN0YWxsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHJlbGVhc2Ugb2YgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0aGUtbGludXgtZGlzdHJvJz4KKyAgICAgICAgICAgIDx0aXRsZT5UaGUgTGludXggRGlzdHJpYnV0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSB2ZXJpZmllcyBlYWNoIHJlbGVhc2UgYWdhaW5zdCByZWNlbnQKKyAgICAgICAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgbW9zdCBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIHByb3ZpZGUgc3RhYmxlIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIGlmIHlvdSBoYXZlIHRoZSBjdXJyZW50IHJlbGVhc2UgbWludXMgb25lIG9mIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBkaXN0cmlidXRpb25zLCB5b3Ugc2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVWJ1bnR1CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRmVkb3JhCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgb3BlblNVU0UKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBEZWJpYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEZvciBhIG1vcmUgZGV0YWlsZWQgbGlzdCBvZiBkaXN0cmlidXRpb25zIHRoYXQgc3VwcG9ydCB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gcnVuIG9uIGFueQorICAgICAgICAgICAgICAgIG1vZGVybiBkaXN0cmlidXRpb24gdGhhdCBoYXMgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBmb3IKKyAgICAgICAgICAgICAgICBHaXQsIHRhciwgYW5kIFB5dGhvbi4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBHaXQgMS43Ljggb3IgZ3JlYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhciAxLjI0IG9yIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gMi43LjMgb3IgZ3JlYXRlciBleGNsdWRpbmcgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgICAgICAzLngsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIGhvc3QgZG9lcyBub3QgbWVldCBhbnkgb2YgdGhlc2UgdGhyZWUgbGlzdGVkCisgICAgICAgICAgICAgICAgdmVyc2lvbiByZXF1aXJlbWVudHMsIHlvdSBjYW4gdGFrZSBzdGVwcyB0byBwcmVwYXJlIHRoZQorICAgICAgICAgICAgICAgIHN5c3RlbSBzbyB0aGF0IHlvdSBjYW4gc3RpbGwgdXNlIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVxdWlyZWQtZ2l0LXRhci1hbmQtcHl0aG9uLXZlcnNpb25zJz5SZXF1aXJlZCBHaXQsIHRhciwgYW5kIFB5dGhvbiBWZXJzaW9uczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVxdWlyZWQgYnVpbGQgaG9zdCBwYWNrYWdlcyB2YXJ5IGRlcGVuZGluZyBvbiB5b3VyCisgICAgICAgICAgICAgICAgYnVpbGQgbWFjaGluZSBhbmQgd2hhdCB5b3Ugd2FudCB0byBkbyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBidWlsZCBhbiBpbWFnZSB0aGF0IGNhbiBydW4KKyAgICAgICAgICAgICAgICBvbiBRRU1VIGluIGdyYXBoaWNhbCBtb2RlIChhIG1pbmltYWwsIGJhc2ljIGJ1aWxkCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQpLCB0aGVuIHRoZSBidWlsZCBob3N0IHBhY2thZ2UgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICAgICAgYXJlIGRpZmZlcmVudCB0aGFuIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGFuIGltYWdlIG9uIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICBzeXN0ZW0gb3IgYnVpbGQgb3V0IHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gc2V0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgcGFja2FnZXMgaXMgbGFyZ2UKKyAgICAgICAgICAgICAgICBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGNvdmVyIGFsbCBjYXNlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgeW91IG5lZWQgdG8gaGF2ZSByb290IGFjY2VzcyBhbmQgdGhlbiBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIHRoZSByZXF1aXJlZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGNvbW1hbmRzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBtYXkgb3IgbWF5CisgICAgICAgICAgICAgICAgICAgIG5vdCB3b3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB5b3VyIExpbnV4CisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBoYXMgPGZpbGVuYW1lPnN1ZG88L2ZpbGVuYW1lPiBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIG5lZWRlZCB0byBidWlsZAorICAgICAgICAgICAgICAgIGFuIGltYWdlIHRoYXQgcnVucyBvbiBRRU1VIGluIGdyYXBoaWNhbCBtb2RlIChlLmcuIGVzc2VudGlhbAorICAgICAgICAgICAgICAgIHBsdXMgZ3JhcGhpY3Mgc3VwcG9ydCkuCisgICAgICAgICAgICAgICAgRm9yIGxpc3RzIG9mIHJlcXVpcmVkIHBhY2thZ2VzIGZvciBvdGhlciBzY2VuYXJpb3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVxdWlyZWQtcGFja2FnZXMtZm9yLXRoZS1ob3N0LWRldmVsb3BtZW50LXN5c3RlbSc+UmVxdWlyZWQgUGFja2FnZXMgZm9yIHRoZSBIb3N0IERldmVsb3BtZW50IFN5c3RlbTwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVidW50dSBhbmQgRGViaWFuPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCAmVUJVTlRVX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOyBsaWJzZGwxLjItZGV2IHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GZWRvcmE8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgJkZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsgU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuU1VTRTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB6eXBwZXIgaW5zdGFsbCAmT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7IGxpYlNETC1kZXZlbCB4dGVybQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2VudE9TPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsICZDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7IFNETC1kZXZlbCB4dGVybQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2VudE9TIDYueCB1c2VycyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIEdpdCwgdGFyIGFuZCBQeXRob24gYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZGV0YWlscywgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVsZWFzZXMnPgorICAgICAgICAgICAgPHRpdGxlPllvY3RvIFByb2plY3QgUmVsZWFzZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBsYXN0IHJlcXVpcmVtZW50IHlvdSBuZWVkIHRvIG1lZXQgYmVmb3JlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgaXMgZ2V0dGluZyBhIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBnZXQgdGhlIGxhdGVzdCBZb2N0byBQcm9qZWN0IHJlbGVhc2UKKyAgICAgICAgICAgICAgICBieSBzZXR0aW5nIHVwIChjbG9uaW5nIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiB0ZXJtcykgYQorICAgICAgICAgICAgICAgIGxvY2FsIGNvcHkgb2YgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgb24KKyAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkIGhvc3QgYW5kIHRoZW4gY2hlY2tpbmcgb3V0IHRoZSBsYXRlc3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBhbGxvd3MgeW91IHRvIGVhc2lseSB1cGRhdGUgdG8gbmV3ZXIgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2VzIGFzIHdlbGwgYXMgY29udHJpYnV0ZSBiYWNrIHRvIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSBhbiBVYnVudHUgYnVpbGQgaG9zdCB0aGF0IGNsb25lcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgYW5kIHRoZW4gY2hlY2tzIG91dCB0aGUKKyAgICAgICAgICAgICAgICBsYXRlc3QgWW9jdG8gUHJvamVjdCBSZWxlYXNlIChpLmUuICZESVNUUk87KToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgQ2xvbmluZyBpbnRvICdwb2t5Jy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDIyNjc5MCwgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg1NzQ2NS81NzQ2NSksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgMjI2NzkwIChkZWx0YSAxNjUyMTIpLCByZXVzZWQgMjI1ODg3IChkZWx0YSAxNjQzMjcpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgyMjY3OTAvMjI2NzkwKSwgMTAwLjk4IE1pQiB8IDI2MyBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMTY1MjEyLzE2NTIxMiksIGRvbmUuCisgICAgICQgZ2l0IGNoZWNrb3V0ICZESVNUUk9fTkFNRTsKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGdldCB0aGUgWW9jdG8gUHJvamVjdCBGaWxlcyBieSBkb3dubG9hZGluZworICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fSE9NRV9VUkw7Ij5Zb2N0byBQcm9qZWN0IHdlYnNpdGU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZ2V0dGluZyBzZXQgdXAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwteXAtcmVsZWFzZSc+WW9jdG8gUHJvamVjdCBSZWxlYXNlPC91bGluaz4iCisgICAgICAgICAgICAgICAgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncXMtYnVpbGRpbmctaW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIEltYWdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOb3cgdGhhdCB5b3UgaGF2ZSB5b3VyIHN5c3RlbSByZXF1aXJlbWVudHMgaW4gb3JkZXIsIHlvdSBjYW4gZ2l2ZQorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgYSB0cnkuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc3RlcHMgdGhhdCBsZXQgeW91IGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgYSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IHJlZmVyZW5jZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIGl0IGluIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEVhc2lseSBjaGFuZ2UgY29uZmlndXJhdGlvbnMgc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc2Vjb25kIGltYWdlLCB3aGljaCB3b3VsZCBiZSBmb3IgTWlubm93Qm9hcmQKKyAgICAgICAgICAgICAgICAgICAgTUFYLWNvbXBhdGlibGUgYm9hcmRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIHN0ZXBzIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgcHJvdmlkZSBkZXRhaWwsIGJ1dCByYXRoZXIKKyAgICAgICAgICAgICAgICBwcm92aWRlIG1pbmltYWwsIHdvcmtpbmcgY29tbWFuZHMgYW5kIGV4YW1wbGVzIGRlc2lnbmVkIHRvCisgICAgICAgICAgICAgICAganVzdCBnZXQgeW91IHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBhcHByb3ByaWF0ZSBtYW51YWxzIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvZG9jdW1lbnRhdGlvbic+WW9jdG8gUHJvamVjdCBtYW51YWwgc2V0PC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGJ1aWxkIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGFuIGVudGlyZSBMaW51eAorICAgICAgICAgICAgZGlzdHJpYnV0aW9uLCBpbmNsdWRpbmcgdGhlIHRvb2xjaGFpbiwgZnJvbSBzb3VyY2UuCisgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZSBhYm91dCBOZXR3b3JrIFByb3hpZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgcHJvY2VzcyBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgYSBwcmUtZGV0ZXJtaW5lZCBvcmRlciB0aHJvdWdoIGEgc2V0IG9mCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB3b3JraW5nIGJlaGluZCBhIGZpcmV3YWxsIGFuZCB5b3VyIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3QgaXMgbm90IHNldCB1cCBmb3IgcHJveGllcywgeW91IGNvdWxkIGVuY291bnRlcgorICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcyB3aXRoIHRoZSBidWlsZCBwcm9jZXNzIHdoZW4gZmV0Y2hpbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgKGUuZy4gZmV0Y2hlciBmYWlsdXJlcyBvciBHaXQgZmFpbHVyZXMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGtub3cgeW91ciBwcm94eSBzZXR0aW5ncywgY29uc3VsdCB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgcmVzb3VyY2VzIGFuZCBnZXQgdGhhdAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIHN0YXJ0aW5nIHBvaW50IGNvdWxkIGFsc28gYmUgdG8gY2hlY2sgeW91ciB3ZWIKKyAgICAgICAgICAgICAgICAgICAgYnJvd3NlciBzZXR0aW5ncy4KKyAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgYmVoaW5kIGEgZmlyZXdhbGwgaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIE1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNob3ctZG9lcy10aGUteW9jdG8tcHJvamVjdC1vYnRhaW4tc291cmNlLWNvZGUtYW5kLXdpbGwtaXQtd29yay1iZWhpbmQtbXktZmlyZXdhbGwtb3ItcHJveHktc2VydmVyJz5GQVE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1dvcmtpbmdfQmVoaW5kX2FfTmV0d29ya19Qcm94eSc+V29ya2luZyBCZWhpbmQgYSBOZXR3b3JrIFByb3h5PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJlIFN1cmUgWW91ciBCdWlsZCBIb3N0IGlzIFNldCBVcDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RlcHMgdG8gYnVpbGQgYW4gaW1hZ2UgaW4gdGhpcyBzZWN0aW9uIGRlcGVuZCBvbgorICAgICAgICAgICAgICAgICAgICB5b3VyIGJ1aWxkIGhvc3QgYmVpbmcgcHJvcGVybHkgc2V0IHVwLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIHdvcmtlZCB0aHJvdWdoIHRoZSByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0neXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hlY2sgT3V0IFlvdXIgQnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGFyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGFuZCB0aGVuIGNoZWNrIG91dAorICAgICAgICAgICAgICAgICAgICB0aGUgYnJhbmNoIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGF0ZXN0IFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIGdpdCBjaGVja291dCAtYiAmRElTVFJPX05BTUU7IG9yaWdpbi8mRElTVFJPX05BTUU7CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgR2l0J3MgPGZpbGVuYW1lPmNoZWNrb3V0PC9maWxlbmFtZT4gY29tbWFuZCBjaGVja3Mgb3V0CisgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IFlvY3RvIFByb2plY3QgcmVsZWFzZSBpbnRvIGEgbG9jYWwgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUgcmVsZWFzZSAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkRJU1RST19OQU1FOzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2FsIGJyYW5jaCB0cmFja3MgdGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyB5b3VyIG93biBicmFuY2ggYmFzZWQgb24gdGhlIHJlbGVhc2VkCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBlbnN1cmVzIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBmaWxlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhhdCByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluaXRpYWxpemUgdGhlIEJ1aWxkIEVudmlyb25tZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0byBkZWZpbmUgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBvbiB5b3VyIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBzY3JpcHQgcnVucywgeW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBMYXRlciwgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCB0aGUgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGFsbCB0aGUgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIGEgbWVtb3J5LXJlc2lkZW50CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz5CaXRCYWtlPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhhbWluZSBZb3VyIExvY2FsIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50LCBhIGxvY2FsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGJlY29tZXMgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIHVzaW5nIEJpdEJha2UgdG8gc3RhcnQgdGhlIGJ1aWxkLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhpcyBmaWxlIGFuZCBiZSBzdXJlIHlvdXIgZ2VuZXJhbAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBhcmUgaG93IHlvdSB3YW50IHRoZW06CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gaGVscCBjb25zZXJ2ZSBkaXNrIHNwYWNlIGR1cmluZyBidWlsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgdG8geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QncyBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGZvciB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5L2J1aWxkL2NvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGlzIHN0YXRlbWVudCBkZWxldGVzIHRoZSB3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHVzZWQgZm9yIGJ1aWxkaW5nIGEgcmVjaXBlIG9uY2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAicm1fd29yayIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHRhcmdldCBtYWNoaW5lIGZvciB0aGUgYnVpbGQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHByb2R1Y2VzIGFuIGltYWdlIHRoYXQgY2FuIGJlIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUUVNVSBlbXVsYXRvciBhbmQgaXMgdGFyZ2V0ZWQgYXQgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBiYXNlZCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVydGhlciBvbiBpbiB0aGlzIGV4YW1wbGUsIHRoaXMgZGVmYXVsdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc2lseSBjaGFuZ2VkIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNvIHRoYXQgeW91IGNhbiBxdWlja2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYW4gaW1hZ2UgZm9yIGEgZGlmZmVyZW50IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBjb25zaWRlcmF0aW9uIGJlZm9yZSB5b3UgYnVpbGQgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VyIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc2VsZWN0cyB0aGUgUlBNIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhpcyBjb25maWd1cmF0aW9uIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlNlbGVjdGlvbiBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyIGlzIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGV0aGVyIHBhY2thZ2UgbWFuYWdlbWVudCBpcyB1c2VkIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgdGFyZ2V0IGltYWdlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgYWRkaXRpb25hbCBwYWNrYWdlIG1hbmFnZXIgc2VsZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2UqLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgdGhlIEJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJ1aWxkIGFuIE9TIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW4gdGhpcyBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgYW5kIGNvcmVzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBSQU0sIHRoZSBzcGVlZCBvZiB5b3VyIEludGVybmV0IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBmYWN0b3JzLCB0aGUgYnVpbGQgcHJvY2VzcyBjb3VsZCB0YWtlIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzIHRoZSBmaXJzdCB0aW1lIHlvdSBydW4gaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IGJ1aWxkcyBydW4gbXVjaCBmYXN0ZXIgc2luY2UgcGFydHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhcmUgY2FjaGVkLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz5CaXRCYWtlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCwgb3Igc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsLWNvbW1hbmQnPkJpdEJha2UgQ29tbWFuZDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gb3RoZXIgdGFyZ2V0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaW11bGF0ZSBZb3VyIEltYWdlIFVzaW5nIFFFTVU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGlzIHBhcnRpY3VsYXIgaW1hZ2UgaXMgYnVpbHQsIHlvdSBjYW4gc3RhcnQgUUVNVQorICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGxlYXJuIG1vcmUgYWJvdXQgcnVubmluZyBRRU1VLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSImWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLXFlbXUiPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhpdCBRRU1VOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEV4aXQgUUVNVSBieSBlaXRoZXIgY2xpY2tpbmcgb24gdGhlIHNodXRkb3duIGljb24gb3IgYnkKKyAgICAgICAgICAgICAgICAgICAgb3BlbmluZyBhIHRlcm1pbmFsLCB0eXBpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBvd2Vyb2ZmPC9maWxlbmFtZT4sIGFuZCB0aGVuIHByZXNzaW5nICJFbnRlciIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBzaG93IGhvdyBlYXN5IGl0IGlzIHRvIHNldCB1cCB0byBidWlsZCBhbgorICAgICAgICAgICAgaW1hZ2UgZm9yIGEgbmV3IG1hY2hpbmUuCisgICAgICAgICAgICBUaGVzZSBzdGVwcyBidWlsZCBhbiBpbWFnZSBmb3IgdGhlIE1pbm5vd0JvYXJkIE1BWCwgd2hpY2ggaXMKKyAgICAgICAgICAgIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBhbmQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IDxmaWxlbmFtZT5pbnRlbC1jb3JlaTctNjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5pbnRlbC1jb3JlMi0zMjwvZmlsZW5hbWU+IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMKKyAgICAgICAgICAgIChCU1BzKS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBNaW5ub3dCb2FyZCBNQVggc2hpcHMgd2l0aCA2NC1iaXQgZmlybXdhcmUuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBib2FyZCBpbiAzMi1iaXQgbW9kZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBkb3dubG9hZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZmlybXdhcmUuaW50ZWwuY29tL3Byb2plY3RzL21pbm5vd2JvYXJkLW1heCc+MzItYml0IGZpcm13YXJlPC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIExvY2FsIENvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gUmVwb3NpdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSBmb3IgdGhlIE1pbm5vd0JvYXJkIE1BWCByZXF1aXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGNsb25lPC9maWxlbmFtZT4gY29tbWFuZCB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgYSBsb2NhbCBjb3B5IG9mIHRoZSByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtaW50ZWwKKyAgICAgQ2xvbmluZyBpbnRvICdtZXRhLWludGVsJy4uLgorICAgICByZW1vdGU6IENvdW50aW5nIG9iamVjdHM6IDEwODI0LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDM1MDgvMzUwOCksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgMTA4MjQgKGRlbHRhIDYyMTkpLCByZXVzZWQgMTA1ODAgKGRlbHRhIDU5NzUpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgxMDgyNC8xMDgyNCksIDIuNzIgTWlCIHwgNDgyLjAwIEtpQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICg2MjE5LzYyMTkpLCBkb25lLgorICAgICBDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gZG9uZS4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmZpZ3VyZSB0aGUgQnVpbGQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVG8gY29uZmlndXJlIHRoZSBidWlsZCwgeW91IGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZXMsIGJvdGggb2Ygd2hpY2ggYXJlCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlIDxmaWxlbmFtZT5idWlsZC9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhIHF1aWNrIHdheSB0byBtYWtlIHRoZSBlZGl0cy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGNvbW1hbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzIGFkZC1sYXllcjwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgdG8gYWRkIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLCB3aGljaCBjb250YWlucyB0aGUgPGZpbGVuYW1lPmludGVsLWNvcmUqPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgQlNQcyB0byB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgY29tbWFuZCBzZWxlY3RzIHRoZSBCU1AgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAiJEhPTUUvc291cmNlL3Bva3kvbWV0YS1pbnRlbCIKKyAgICAgJCBlY2hvICdNQUNISU5FID0gImludGVsLWNvcmVpNy02NCInID4+IGNvbmYvbG9jYWwuY29uZgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgYSA2NC1iaXQgYnVpbGQsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGVjaG8gJ01BQ0hJTkUgPSAiaW50ZWwtY29yZWk3LTY0IicgPj4gY29uZi9sb2NhbC5jb25mCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IDMyLWJpdCBpbWFnZXMsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGVjaG8gJ01BQ0hJTkUgPSAiaW50ZWwtY29yZTItMzIiJyA+PiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgYSBNaW5pbWFsIEltYWdlIGZvciBNaW5ub3dCb2FyZCBNQVg6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBidWlsZCB0aGUgbWluaW1hbCBpbWFnZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgTWlubm93Qm9hcmQgTUFYLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhcmUgbWluaW1hbCB0byBzZXQgdXAgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoaXMgc2Vjb25kIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4KKyAgICAgICAgICAgICAgICAgICAgcmUtdXNlIGZpbGVzIGZyb20gcHJldmlvdXMgYnVpbGRzIGFzIG11Y2ggYXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIFJlLXVzaW5nIGZpbGVzIG1lYW5zIHRoaXMgc2Vjb25kIGJ1aWxkIHdpbGwgYmUgbXVjaCBmYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgdGhhbiBhbiBpbml0aWFsIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSByZXN1bHRpbmcgYmFzaWMgY29uc29sZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB0bXAvZGVwbG95L2ltYWdlcy9pbnRlbC1jb3JlaTctNjQvY29yZS1pbWFnZS1taW5pbWFsLWludGVsLWNvcmVpNy02NC5oZGRpbWcKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPldyaXRlIHRoZSBJbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHdyaXRlIHRoZSBpbWFnZSB0byBhIFVTQiBrZXksIFNBVEEgZHJpdmUsIG9yIFNECisgICAgICAgICAgICAgICAgICAgIGNhcmQgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPiBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGluY2x1ZGVkIGluIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2g8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gJEhPTUUvc291cmNlL3Bva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaCA8cmVwbGFjZWFibGU+SE9TVF9ERVZJQ0U8L3JlcGxhY2VhYmxlPiBcCisgICAgICAgIHRtcC9kZXBsb3kvaW1hZ2VzL2ludGVsLWNvcmVpNy02NC9jb3JlLWltYWdlLW1pbmltYWwtaW50ZWwtY29yZWk3LTY0LmhkZGltZyA8cmVwbGFjZWFibGU+VEFSR0VUX0RFVklDRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5IT1NUX0RFVklDRTwvcmVwbGFjZWFibGU+IGlzIHRoZSBkZXZpY2Ugbm9kZQorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYnVpbGQgaG9zdCAoZS5nLiA8ZmlsZW5hbWU+L2Rldi9zZGM8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9tbWNibGswPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+VEFSR0VUX0RFVklDRTwvcmVwbGFjZWFibGU+IGlzIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBkZXZpY2UgYXMgdGhlIE1pbm5vd0JvYXJkIE1BWCBzZWVzIGl0IChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L3NkYTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L21tY2JsazA8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qm9vdCB0aGUgSGFyZHdhcmU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGUgYm9vdCBkZXZpY2UgcHJvdmlzaW9uZWQsIHlvdSBjYW4gaW5zZXJ0IHRoZQorICAgICAgICAgICAgICAgICAgICBtZWRpYSBpbnRvIHRoZSBNaW5ub3dCb2FyZCBNQVggYW5kIGJvb3QgdGhlIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgYm9hcmQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBtZWRpYSBhbmQgYm9vdCB0bworICAgICAgICAgICAgICAgICAgICB0aGUgYm9vdGxvYWRlciBhbmQgc3Vic2VxdWVudGx5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgdGhlIGJvYXJkIGRvZXMgbm90IGJvb3QgYXV0b21hdGljYWxseSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBib290IGl0IG1hbnVhbGx5IGZyb20gdGhlIEVGSSBzaGVsbCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNoZWxsPiBjb25uZWN0IC1yCisgICAgIFNoZWxsPiBtYXAgLXIKKyAgICAgU2hlbGw+IGZzMDoKKyAgICAgU2hlbGw+IGJvb3R4NjQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIDMyLWJpdCBpbWFnZSB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU2hlbGw+IGJvb3RpYTMyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3FzLW5leHQtc3RlcHMnPgorICAgICAgICA8dGl0bGU+TmV4dCBTdGVwczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgY29tcGxldGVkIGFsbCB0aGUgc3RlcHMgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gdGhlbgorICAgICAgICAgICAgY29uZ3JhdHVsYXRpb25zIHRvIHlvdSEKKyAgICAgICAgICAgIFdoYXQgbm93PworICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hhdCB5b3UgcHJpbWFyeSBpbnRlcmVzdHMgYXJlIHdpdGggdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICB5b3UgY291bGQgY29uc2lkZXIgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VmlzaXQgdGhlIFlvY3RvIFByb2plY3QgV2ViIFNpdGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9mZmljaWFsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB3ZWIgc2l0ZSBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgZW50aXJlIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFZpc2l0aW5nIHRoaXMgc2l0ZSBpcyBhIGdvb2Qgd2F5IHRvIGZhbWlsaWFyaXplIHlvdXJzZWxmCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIG92ZXJhbGwgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHBsb3JlIERldmVsb3BtZW50IE1vZGVsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtbW9kZWwnPkNvbW1vbiBEZXZlbG9wbWVudCBNb2RlbHM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHRoZSB2YXJpb3VzIHdheXMgYnkgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3QgdG8gZGV2ZWxvcCBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MZWFybiBTb21lIE9wZW4gU291cmNlIEJhc2ljczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5ldyB0byB0aGUgb3BlbiBzb3VyY2UgZW52aXJvbm1lbnQsIHlvdSBtaWdodAorICAgICAgICAgICAgICAgICAgICByZWFkIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1uZXdiaWUnPlRoZSBZb2N0byBQcm9qZWN0IE9wZW4gU291cmNlIERldmVsb3BtZW50IEVudmlyb25tZW50PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNoYXB0ZXIgcHJlc2VudHMgb3ZlcnZpZXcgbWF0ZXJpYWwgZm9yIG9wZW4gc291cmNlCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IEFwcGxpY2F0aW9uIERldmVsb3BtZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgcHJpbWFyeSBpbnRlcmVzdHMgbGllIGluIGRldmVsb3BpbmcgYXBwbGljYXRpb25zLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjYWR0LW1hbnVhbC1pbnRybyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGxlYXJuIGFib3V0IEJTUHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwJz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MZWFybiBBYm91dCBVc2luZyBFY2xpcHNlIFdpdGggdGhlIFlvY3RvIFByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhbiBFY2xpcHNlIHVzZXIsIHlvdSBjYW4gbGVhcm4gYWJvdXQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgaW4gdGhhdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBieSByZWFkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2Zsb3ctdXNpbmctdGhlLWFkdC1hbmQtZWNsaXBzZSc+V29ya2Zsb3cgVXNpbmcgdGhlIEFEVCBhbmQgRWNsaXBzZeKEojwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MZWFybiBBYm91dCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgaXMgYSB3ZWIgaW50ZXJmYWNlIHRvIHRoZSBZb2N0byBQcm9qZWN0J3MKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHVzaW5nIHRoaXMgdHlwZSBvZiBpbnRlcmZhY2UgdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGltYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7I3RvYXN0ZXItbWFudWFsLWludHJvJz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhwbG9yZSBZb2N0byBQcm9qZWN0IENvbW1vbiBUYXNrcyBhbmQgVGVjaG5pY2FsIERldGFpbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGEgbWl4IG9mIGNvbW1vbiB0YXNrcyB0aGF0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgZG8gd2l0aCBwcm9qZWN0IGRldmVsb3AgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2V4dGVuZHBva3knPkNvbW1vbiBUYXNrczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgbW9yZSBkZXRhaWwsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLW1hbnVhbC1pbnRybyc+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2FydGljbGU+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9DT1BZSU5HLk1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWRlMzU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhNmZlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9SRUFETUUKQEAgLTAsMCArMSwzIEBACitUaGlzIGxheWVyIGlzIGludGVuZGVkIGFzIHRlc3QgbGF5ZXIsIHVzZWQgYnkgc2NyaXB0cy9vZS1zZWxmdGVzdAorYW5kIGl0J3MgcHJvYmFibHkgYSBtaXN0YWtlIHRvIGluY2x1ZGUgaXQgaW4geW91ciBidWlsZHMgKHVubGVzcyB5b3UKK3dhbnQgdG8gcnVuIHRoZSBzY3JpcHQpLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NsYXNzZXMvdGVzdF9ldmVudHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jbGFzc2VzL3Rlc3RfZXZlbnRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzMjRlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jbGFzc2VzL3Rlc3RfZXZlbnRzLmJiY2xhc3MKQEAgLTAsMCArMSwxNiBAQAorcHl0aG9uIHRlc3QxX2V2ZW50aGFuZGxlcigpIHsKKyAgICBiYi5ub3RlKCJUZXN0IGZvciBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiKQorfQorcHl0aG9uIHRlc3QyX2V2ZW50aGFuZGxlcigpIHsKKyAgICBiYi5ub3RlKCJUZXN0IGZvciBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIpCit9CitweXRob24gdGVzdDNfZXZlbnRoYW5kbGVyKCkgeworICAgIGJiLm5vdGUoIlRlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudCIpCit9CisKK2FkZGhhbmRsZXIgdGVzdDFfZXZlbnRoYW5kbGVyCit0ZXN0MV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCithZGRoYW5kbGVyIHRlc3QyX2V2ZW50aGFuZGxlcgordGVzdDJfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCithZGRoYW5kbGVyIHRlc3QzX2V2ZW50aGFuZGxlcgordGVzdDNfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuSW52YWxpZEV2ZW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0N2I3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMCBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJzZWxmdGVzdCIKK0JCRklMRV9QQVRURVJOX3NlbGZ0ZXN0ID0gIl4ke0xBWUVSRElSfS8iCitCQkZJTEVfUFJJT1JJVFlfc2VsZnRlc3QgPSAiNSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjAuMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuMC4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhMGFiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjAuMC4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKKyMgVGhpcyByZWNpcGUgaXMgYSBjb3B5IGZyb20gdGhlIG9lLWNvcmUgb25lLgorIyBJdCBoYXMgYSBsb3dlciBhbmQgaW52YWxpZCB2ZXJzaW9uIG51bWJlciBpbiBvcmRlciBub3QgdG8gYmUgYWNjaWRlbnRhbGx5IHVzZWQgYnkgYml0YmFrZS4KKyMgSXQgaXMgdXNlZCBmb3IgdGVzdHMgdGhhdCByZXF1aXJlIG92ZXJsYXllZCByZWNpcGUgZmlsZXMuCisKK1NVTU1BUlkgPSAiR05VIEFzcGVsbCBzcGVsbC1jaGVja2VyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkxHUEx2MiB8IExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXNwZWxsL2FzcGVsbC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiZTY2YTljOWFmNmE2MGRjNDYxMzRmZGFjZjZjZTk3ZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjUyNTgzYTgzYTYzNjMzNzAxYzVmNzFkYjNkYzQwYWFiODdiN2Y3NmIyOTcyM2FlYjI3OTQxZWZmNDJkZjZlMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbY3Vyc2VzXSA9ICItLWVuYWJsZS1jdXJzZXMsLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzIgorCitQQUNLQUdFUyArPSAibGliYXNwZWxsIGxpYnBzcGVsbCBsaWJwc3BlbGwtZGV2IGFzcGVsbC11dGlscyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXNwZWxsLTAuNjAvLmRlYnUqIgorRklMRVNfbGliYXNwZWxsID0gIiR7bGliZGlyfS9saWJhc3BlbGwuc28uKiAke2xpYmRpcn0vYXNwZWxsKiIKK0ZJTEVTX2FzcGVsbC11dGlscyA9ICIke2JpbmRpcn0vd29yZC1saXN0LWNvbXByZXNzICR7YmluZGlyfS9hc3BlbGwtaW1wb3J0ICR7YmluZGlyfS9ydW4td2l0aC1hc3BlbGwgJHtiaW5kaXJ9L3ByZSoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYXNwZWxsIgorRklMRVNfbGlicHNwZWxsID0gIiR7bGliZGlyfS9saWJwc3BlbGwuc28uKiIKK0ZJTEVTX2xpYnBzcGVsbC1kZXYgPSAiJHtsaWJkaXJ9L2xpYnBzcGVsbCogJHtiaW5kaXJ9L3BzcGVsbC1jb25maWcgJHtpbmNsdWRlZGlyfS9wc3BlbGwiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgoraW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTcyMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGVfMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZV8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZmM4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGVfMC4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKKyMKKyMgVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gdGhlICdIZWxsbyBXb3JsZCEnIGV4YW1wbGUgcmVjaXBlIGluIHRoZQorIyBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyMKKworREVTQ1JJUFRJT04gPSAiU2ltcGxlIGhlbGxvd29ybGQgYXBwbGljYXRpb24gdXNlZCB0byB0ZXN0IHRoZSBkZXZ0b29sIHVwZ3JhZGUgZmVhdHVyZSIKK1NFQ1RJT04gPSAiZGV2dG9vbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCitQUiA9ICJyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vJHtUSElTRElSfS9maWxlcy8ke1B9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWhlbGxvd29yZC5jLWV4aXQtd2l0aC1FWElUX1NVQ0NFU1MtaW5zdGVhZC1vZi1hLW1hZ2kucGF0Y2ggXAorICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS8ke1B9IgorCitkb19jb21waWxlKCkgeworCSAgICAgJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwkgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCSAgICAgaW5zdGFsbCAtbSAwNzU1IGhlbGxvd29ybGQgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy8wMDAxLWhlbGxvd29yZC5jLWV4aXQtd2l0aC1FWElUX1NVQ0NFU1MtaW5zdGVhZC1vZi1hLW1hZ2kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5NGEwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy8wMDAxLWhlbGxvd29yZC5jLWV4aXQtd2l0aC1FWElUX1NVQ0NFU1MtaW5zdGVhZC1vZi1hLW1hZ2kucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSAwZjM3YWZmYmM2ZTZjNzE2ODczMDFkOTlkNzI1OWYxOTY4ZTU3YzQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTI6NDI6MjMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gaGVsbG93b3JkLmM6IGV4aXQgd2l0aCBFWElUX1NVQ0NFU1MgaW5zdGVhZCBvZiBhIG1hZ2ljIG51bWJlcgorCistLS0KKyBoZWxsb3dvcmxkLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2hlbGxvd29ybGQuYyBiL2hlbGxvd29ybGQuYworaW5kZXggNzFmMmU0Ni4uNTRiZjUwYiAxMDA2NDQKKy0tLSBhL2hlbGxvd29ybGQuYworKysrIGIvaGVsbG93b3JsZC5jCitAQCAtMSw4ICsxLDkgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKyAgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOworIAorLSAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyB9CistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjEudGFyLmd6IGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjEudGFyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTFjNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMS50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjIudGFyLmd6IGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjIudGFyLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGRjZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvZGV2dG9vbC11cGdyYWRlLTAuMi50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9lbXB0eXRlc3QvZW1wdHl0ZXN0LmJiIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9lbXB0eXRlc3QvZW1wdHl0ZXN0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2Y0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2VtcHR5dGVzdC9lbXB0eXRlc3QuYmIKQEAgLTAsMCArMSw1IEBACitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYworCisjIFNldCBMSUNFTlNFIHRvIHNvbWV0aGluZyBzbyB0aGF0IGJpdGJha2UgLXAgdGhhdCBpcyByYW4gYXQgdGhlIGJlZ2lubmluZworIyBpcyBzdWNjZXNzZnVsIHNpbmNlIHRlc3RfcmVjaXBlLmluYyBoYXMgbm90IHlldCBiZWVuIG1vZGlmaWVkLgorTElDRU5TRSA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy9vZS1zZWxmdGVzdC1pbWFnZS5iYiBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL29lLXNlbGZ0ZXN0LWltYWdlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzA5NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy9vZS1zZWxmdGVzdC1pbWFnZS5iYgpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiQW4gaW1hZ2UgdXNlZCBkdXJpbmcgb2Utc2VsZnRlc3QgdGVzdHMiCisKK0lNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCAke1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQfSBkcm9wYmVhciIKK0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyIKKworSU1BR0VfTElOR1VBUyA9ICIgIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNjNTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJBbiBleGFtcGxlIG9mIHBhcnRpdGlvbmVkIGltYWdlLiIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IgorCitJTUFHRV9GU1RZUEVTID0gIndpYy5iejIiCitSTV9PTERfSU1BR0UgPSAiMSIKKworIyBjb3JlLWltYWdlLW1pbmltYWwgaXMgcmVmZXJlbmNlZCBpbiAud2tzLCBzbyB3ZSBuZWVkIGl0cyByb290ZnMKKyMgdG8gYmUgcmVhZHkgYmVmb3JlIG91ciByb290ZnMKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiY29yZS1pbWFnZS1taW5pbWFsOmRvX3Jvb3RmcyIKKworSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID0gIjIwMDAiCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWNkOGYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IEV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2Ugd2l0aCBjb21wbGV4IGxheW91dAorIyBsb25nLWRlc2NyaXB0aW9uOiBUaGlzIGltYWdlIGNvbnRhaW5zIGJvb3QgcGFydGl0aW9uIGFuZCAzIHJvb3RmcyBwYXJ0aXRpb25zCisjIGNyZWF0ZWQgZnJvbSBjb3JlLWltYWdlLW1pbmltYWwgYW5kIHdpYy1pbWFnZS1taW5pbWFsIGltYWdlIHJlY2lwZXMuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgL2NvcmUgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj1jb3JlLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBjb3JlIC0tYWxpZ24gMTAyNAorcGFydCAvYmFja3VwIC0tc291cmNlIHJvb3RmcyAtLXJvb3Rmcy1kaXI9d2ljLWltYWdlLW1pbmltYWwgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDIgLS1sYWJlbCBiYWNrdXAgLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgY29uc29sZT10dHkwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tNC9tNF8xLjQuMTcuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L200L200XzEuNC4xNy5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU3MjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tNC9tNF8xLjQuMTcuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQ1OWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuL21hbi0xLjVoMS1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgcGF0Y2ggaGVyZSEKK1RoaXMgaXMgaW52YWxpZCBwYXRjaCB1c2VkIGJ5IHRlc3RzIGluIHNjcmlwdHMvbGliL3NlbGZ0ZXN0cy4KKworLS0tIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbi5taWtlCUZyaSBBcHIgIDkgMTM6MzU6NTQgMTk5OQorKysrIG1hbi0xLjVnL21hbi9NYWtlZmlsZS5pbglGcmkgQXByICA5IDEzOjM2OjQ1IDE5OTkKK0BAIC0xLDggKzEsOCBAQAorICNNQUtFIFRISVMgUEFUQ0ggSU5WQUxJRAorIE1BTjEgPSBtYW4gd2hhdGlzIGFwcm9wb3MKKy1NQU41ID0gbWFuLmNvbmYKKytNQU41ID0gbWFuLmNvbmZpZworIE1BTjggPSBtYWtld2hhdGlzCistQUxMID0gbWFuLjEgd2hhdGlzLjEgYXByb3Bvcy4xIG1hbi5jb25mLjUKKytBTEwgPSBtYW4uMSB3aGF0aXMuMSBhcHJvcG9zLjEgbWFuLmNvbmZpZy41CisgTUFZQkU4ID0gbWFrZXdoYXRpcworIAorIC5TVUZGSVhFUzogLm1hbiAuMSAuNSAuOApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuXzEuNmcuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW5fMS42Zy5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU3MjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuXzEuNmcuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9hZGQtZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9hZGQtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGM5OWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2FkZC1maWxlLnBhdGNoCkBAIC0wLDAgKzEsOCBAQAorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wNDliNDJlCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwyIEBACisrVGVzdCBmaWxlIDIKKys0NTYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9maWxlMSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9maWxlMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTcxYWE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2ZpbGUxCkBAIC0wLDAgKzEsMiBAQAorRmlyc3QgdGVzdCBmaWxlCisxMjMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9pbnN0YWxsc2NyaXB0LnNoIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2luc3RhbGxzY3JpcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMzBkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9pbnN0YWxsc2NyaXB0LnNoCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCitlY2hvICJUaGlyZCBmaWxlIiA+ICQxL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zY3JpcHRlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDJiYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYwpAQCAtMCwwICsxIEBACitBIGZpbGUgaW5zdGFsbGVkIGJ5IGEgZnVuY3Rpb24gY2FsbGVkIGJ5IGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYyOThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBtYXRjaGVkIGJ5IGEgZ2xvYiBpbiBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1YWUzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZQpAQCAtMCwwICsxIEBACitBIGZpbGUgbWF0Y2hlZCBieSBhIGdsb2IgaW4gZG9faW5zdGFsbCB0byBhIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2Q2YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcKQEAgLTAsMCArMSBAQAorU3RyYWlnaHQgdGhyb3VnaCB3aXRoIHNhbWUgbmFtCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZSBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjBhMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZQpAQCAtMCwwICsxIEBACitBIGZpbGUgbWF0Y2hlZCBieSBhIGdsb2IgaW4gU1JDX1VSSQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZDVlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIKQEAgLTAsMCArMSBAQAorRmlsZSBpbiBTUkNfVVJJIGluc3RhbGxlZCBqdXN0IHRvIGRpcmVjdG9yeSBwYXRoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc3ViZGlyL2ZpbGVpbnN1YmRpciBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zdWJkaXIvZmlsZWluc3ViZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTZiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc3ViZGlyL2ZpbGVpbnN1YmRpcgpAQCAtMCwwICsxIEBACitBIGZpbGUgaW4gYSBzdWJkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUuYmIgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMGEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiVGVzdCByZWNpcGUgZm9yIHJlY2lwZXRvb2wgYXBwZW5kZmlsZSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NSQ19VUkkgPSAiZmlsZTovL2luc3RhbGxzY3JpcHQuc2ggXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcgXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLXRvZGlyIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGUxIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1maWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N1YmRpciBcCisgICAgICAgICAgIGZpbGU6Ly9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2IqIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMiCisKK2luc3RhbGxfZXh0cmFmdW5jKCkgeworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLW9yaWcKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIgJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9maWxlMSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcmVuYW1lZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N1YmRpci9maWxlaW5zdWJkaXIgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXN1YmRpcgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGUgJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZQorCWNwICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYiogJHtEfSR7ZGF0YWRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUKKwljcCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2IqICR7RH0ke2RhdGFkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1N9L2ZpbGUyICR7RH0ke3N5c2NvbmZkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wYXRjaGVkCisJc2ggJHtXT1JLRElSfS9pbnN0YWxsc2NyaXB0LnNoICR7RH0ke2RhdGFkaXJ9CisJaW5zdGFsbF9leHRyYWZ1bmMKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwllY2hvICJUZXN0IGZpbGUgaW5zdGFsbGVkIGJ5IHBvc3RpbnN0IiA+ICREJHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1NzIwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorIyBUaGlzIGJiYXBwZW5kIGlzIHVzZWQgdG8gYWx0ZXIgdGhlIHJlY2lwZSB1c2luZyB0aGUgdGVzdF9yZWNpcGUuaW5jIGZpbGUgY3JlYXRlZCBieSB0ZXN0cy4KK2luY2x1ZGUgdGVzdF9yZWNpcGUuaW5jCmRpZmYgLS1naXQgYS9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9DT1BZSU5HLk1JVApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIENPUFlJTkcuTUlUCmNvcHkgdG8geW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL0NPUFlJTkcuTUlUCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ExNjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDE1IEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAic2tlbGV0b24iCitCQkZJTEVfUEFUVEVSTl9za2VsZXRvbiA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3NrZWxldG9uID0gIjEiCisKKyMgVGhpcyBzaG91bGQgb25seSBiZSBpbmNyZW1lbnRlZCBvbiBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgd2lsbAorIyBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIG90aGVyIGxheWVycworTEFZRVJWRVJTSU9OX3NrZWxldG9uID0gIjEiCisKK0xBWUVSREVQRU5EU19za2VsZXRvbiA9ICJjb3JlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZS5jb25mIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNmRhN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorIworIyBTYW1wbGUgbXVsdGlsaWIgY29uZmlndXJhdGlvbiB3aGljaCB0aGUgdXNlciBjYW4gZWl0aGVyIGFkZCBpbiBsb2NhbC5jb25mCisjIG9yIHNwZWNpZmljIGluIGFuIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIHRoaXMsIHRoZW4gcmVxdWlyZSBpdC4KKyMKKyMgVGhpcyBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBhbiB4ODYgNjQgYml0IG1hY2hpbmUgYXMgdGhlIG1haW4gbWFjaGluZQorIyB0eXBlIGFuZCB0aGVuIGFkZHMgYSBtdWx0aWxpYiBpbiB0aGUgImxpYjMyIiBkaXJlY3Rvcnkgd2hlcmUgdGhvc2UKKyMgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSAieDg2IiB0dW5lLgorIworCitNQUNISU5FID0gInFlbXV4ODYtNjQiCityZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgorTVVMVElMSUJTID0gIm11bHRpbGliOmxpYjMyIgorREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLWxpYjMyID0gIng4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9jb25mL211bHRpbGliLWV4YW1wbGUyLmNvbmYgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTZmNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgU2FtcGxlIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gd2hpY2ggdGhlIHVzZXIgY2FuIGVpdGhlciBhZGQgaW4gbG9jYWwuY29uZgorIyBvciBzcGVjaWZpYyBpbiBhbiBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSB0aGlzLCB0aGVuIHJlcXVpcmUgaXQuCisjCisjIFRoaXMgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgYW4geDg2IDY0IGJpdCBtYWNoaW5lIGFzIHRoZSBtYWluIG1hY2hpbmUKKyMgdHlwZSBhbmQgdGhlbiBhZGRzIGEgbXVsdGlsaWIgaW4gdGhlICJsaWJ4MzIiIGRpcmVjdG9yeSB3aGVyZSB0aG9zZQorIyBsaWJyYXJpZXMgYXJlIGNvbXBpbGVkIHdpdGggdGhlICJ4ODYtNjQteDMyIiB0dW5lLgorIworCitNQUNISU5FID0gInFlbXV4ODYtNjQiCityZXF1aXJlIGNvbmYvbXVsdGlsaWIuY29uZgorTVVMVElMSUJTID0gIm11bHRpbGliOmxpYngzMiIKK0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWJ4MzIgPSAieDg2LTY0LXgzMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L25vX3Jma2lsbC5jZmcgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9ub19yZmtpbGwuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDBlY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9ub19yZmtpbGwuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8lLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGNkZWZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZApAQCAtMCwwICsxLDEyIEBACisjIEV4YW1wbGUgdXNlIG9mIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGZvciBidXN5Ym94LCB3aGljaCB1c2VzIHRoZSBzYW1lCisjIG1lY2hhbmlzbSBhcyB0aGUgbGludXgteW9jdG8ga2VybmVsIHJlY2lwZS4KKyMKKyMgVGhlIGVudHJpZXMgaGVyZSB3aWxsIG92ZXJyaWRlIGFueSBlbnRyaWVzIGluIHRoZSBiYXNlIGJ1c3lib3ggcmVjaXBlCisjCisjIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIEtlcm5lbCBEZXYgTWFudWFsCisjIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQva2VybmVsLWRldi9rZXJuZWwtZGV2Lmh0bWwjY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24KK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKworU1JDX1VSSSArPSAiIFwKKwkgICAgZmlsZTovL25vX3Jma2lsbC5jZmcgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL0NPUFlJTkcgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NTUxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvQ09QWUlORwpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvTWFrZWZpbGUgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZWQzNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK29iai1tIDo9IGhlbGxvLm8KKworU1JDIDo9ICQoc2hlbGwgcHdkKQorCithbGw6CisJJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpCisKK21vZHVsZXNfaW5zdGFsbDoKKwkkKE1BS0UpIC1DICQoS0VSTkVMX1NSQykgTT0kKFNSQykgbW9kdWxlc19pbnN0YWxsCisKK2NsZWFuOgorCXJtIC1mICoubyAqfiBjb3JlIC5kZXBlbmQgLiouY21kICoua28gKi5tb2QuYworCXJtIC1mIE1vZHVsZS5tYXJrZXJzIE1vZHVsZS5zeW12ZXJzIG1vZHVsZXMub3JkZXIKKwlybSAtcmYgLnRtcF92ZXJzaW9ucyBNb2R1bGVzLnN5bXZlcnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvaGVsbG8uYyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvaGVsbG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2MwZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9oZWxsby5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMSAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworaW50IGluaXRfbW9kdWxlKHZvaWQpCit7CisJcHJpbnRrKCJIZWxsbyBXb3JsZCFcbiIpOworCXJldHVybiAwOworfQorCit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcHJpbnRrKCJHb29kYnllIENydWVsIFdvcmxkIVxuIik7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvaGVsbG8tbW9kXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvaGVsbG8tbW9kXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQwYjBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9oZWxsby1tb2RfMC4xLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiRXhhbXBsZSBvZiBob3cgdG8gYnVpbGQgYW4gZXh0ZXJuYWwgTGludXgga2VybmVsIG1vZHVsZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSIKKworaW5oZXJpdCBtb2R1bGUKKworU1JDX1VSSSA9ICJmaWxlOi8vTWFrZWZpbGUgXAorICAgICAgICAgICBmaWxlOi8vaGVsbG8uYyBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBUaGUgaW5oZXJpdCBvZiBtb2R1bGUuYmJjbGFzcyB3aWxsIGF1dG9tYXRpY2FsbHkgbmFtZSBtb2R1bGUgcGFja2FnZXMgd2l0aAorIyAia2VybmVsLW1vZHVsZS0iIHByZWZpeCBhcyByZXF1aXJlZCBieSB0aGUgb2UtY29yZSBidWlsZCBlbnZpcm9ubWVudC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZTQ0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiCkBAIC0wLDAgKzEsNzIgQEAKKyMgbGludXgteW9jdG8tY3VzdG9tLmJiOgorIworIyAgIEFuIGV4YW1wbGUga2VybmVsIHJlY2lwZSB0aGF0IHVzZXMgdGhlIGxpbnV4LXlvY3RvIGFuZCBvZS1jb3JlCisjICAga2VybmVsIGNsYXNzZXMgdG8gYXBwbHkgYSBzdWJzZXQgb2YgeW9jdG8ga2VybmVsIG1hbmFnZW1lbnQgdG8gZ2l0CisjICAgbWFuYWdlZCBrZXJuZWwgcmVwb3NpdG9yaWVzLgorIworIyAgIFRvIHVzZSBsaW51eC15b2N0by1jdXN0b20gaW4geW91ciBsYXllciwgY29weSB0aGlzIHJlY2lwZSAob3B0aW9uYWxseQorIyAgIHJlbmFtZSBpdCBhcyB3ZWxsKSBhbmQgbW9kaWZ5IGl0IGFwcHJvcHJpYXRlbHkgZm9yIHlvdXIgbWFjaGluZS4gaS5lLjoKKyMKKyMgICAgIENPTVBBVElCTEVfTUFDSElORV95b3VybWFjaGluZSA9ICJ5b3VybWFjaGluZSIKKyMKKyMgICBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgYSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIG1vc3QgZGlyZWN0CisjICAgbWV0aG9kIGlzIHRvIGNvcHkgeW91ciAuY29uZmlnIHRvIGZpbGVzL2RlZmNvbmZpZyBpbiB5b3VyIGxheWVyLAorIyAgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29weSAoYW5kIHJlbmFtZSkgb2YgdGhpcyByZWNpcGUgYW5kCisjICAgYWRkIGZpbGU6Ly9kZWZjb25maWcgdG8geW91ciBTUkNfVVJJLgorIworIyAgIFRvIHVzZSB0aGUgeW9jdG8ga2VybmVsIHRvb2xpbmcgdG8gZ2VuZXJhdGUgYSBCU1AgY29uZmlndXJhdGlvbgorIyAgIHVzaW5nIG1vZHVsYXIgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHNlZSB0aGUgeW9jdG8tYnNwIGFuZAorIyAgIHlvY3RvLWtlcm5lbCB0b29scyBkb2N1bWVudGF0aW9uLgorIworIyBXYXJuaW5nOgorIworIyAgIEJ1aWxkaW5nIHRoaXMgZXhhbXBsZSB3aXRob3V0IHByb3ZpZGluZyBhIGRlZmNvbmZpZyBvciBCU1AKKyMgICBjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIGJ1aWxkIG9yIGJvb3QgZXJyb3JzLiBUaGlzIGlzIG5vdCBhCisjICAgYnVnLgorIworIworIyBOb3RlczoKKyMKKyMgICBwYXRjaGVzOiBwYXRjaGVzIGNhbiBiZSBtZXJnZWQgaW50byB0byB0aGUgc291cmNlIGdpdCB0cmVlIGl0c2VsZiwKKyMgICAgICAgICAgICBhZGRlZCB2aWEgdGhlIFNSQ19VUkksIG9yIGNvbnRyb2xsZWQgdmlhIGEgQlNQCisjICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyMKKyMgICBkZWZjb25maWc6IFdoZW4gYSBkZWZjb25maWcgaXMgcHJvdmlkZWQsIHRoZSBsaW51eC15b2N0byBjb25maWd1cmF0aW9uCisjICAgICAgICAgICAgICB1c2VzIHRoZSBmaWxlbmFtZSBhcyBhIHRyaWdnZXIgdG8gdXNlIGEgJ2FsbG5vY29uZmlnJyBiYXNlbGluZQorIyAgICAgICAgICAgICAgYmVmb3JlIG1lcmdpbmcgdGhlIGRlZmNvbmZpZyBpbnRvIHRoZSBidWlsZC4gCisjCisjICAgICAgICAgICAgICBJZiB0aGUgZGVmY29uZmlnIGZpbGUgd2FzIGNyZWF0ZWQgd2l0aCBtYWtlX3NhdmVkZWZjb25maWcsIAorIyAgICAgICAgICAgICAgbm90IGFsbCBvcHRpb25zIGFyZSBzcGVjaWZpZWQsIGFuZCBzaG91bGQgYmUgcmVzdG9yZWQgd2l0aCB0aGVpcgorIyAgICAgICAgICAgICAgZGVmYXVsdHMsIG5vdCBzZXQgdG8gJ24nLiBUbyBwcm9wZXJseSBleHBhbmQgYSBkZWZjb25maWcgbGlrZQorIyAgICAgICAgICAgICAgdGhpcywgc3BlY2lmeTogS0NPTkZJR19NT0RFPSItLWFsbGRlZmNvbmZpZyIgaW4gdGhlIGtlcm5lbAorIyAgICAgICAgICAgICAgcmVjaXBlLgorIyAgIAorIyAgIGV4YW1wbGUgY29uZmlndXJhdGlvbiBhZGRpdGlvbjoKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vc21wLmNmZyIKKyMgICBleGFtcGxlIHBhdGNoIGFkZGl0aW9uIChmb3Iga2VybmVsIHYzLjQgb25seSk6CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaAorIyAgIGV4YW1wbGUgZmVhdHVyZSBhZGRpdGlvbiAoZm9yIGtlcm5lbCB2My40IG9ubHkpOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9mZWF0dXJlLnNjYyIKKyMKKworaW5oZXJpdCBrZXJuZWwKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgT3ZlcnJpZGUgU1JDX1VSSSBpbiBhIGNvcHkgb2YgdGhpcyByZWNpcGUgdG8gcG9pbnQgYXQgYSBkaWZmZXJlbnQgc291cmNlCisjIHRyZWUgaWYgeW91IGRvIG5vdCB3YW50IHRvIGJ1aWxkIGZyb20gTGludXMnIHRyZWUuCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQ7cHJvdG9jb2w9Z2l0O25vY2hlY2tvdXQ9MTtuYW1lPW1hY2hpbmUiCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuNCIKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICItY3VzdG9tIgorCisjIE1vZGlmeSBTUkNSRVYgdG8gYSBkaWZmZXJlbnQgY29tbWl0IGhhc2ggaW4gYSBjb3B5IG9mIHRoaXMgcmVjaXBlIHRvCisjIGJ1aWxkIGEgZGlmZmVyZW50IHJlbGVhc2Ugb2YgdGhlIExpbnV4IGtlcm5lbC4KKyMgdGFnOiB2My40IDc2ZTEwZDE1OGVmYjZkNDUxNjAxODg0NmY2MGMyYWI1NTAxOTAwYmMKK1NSQ1JFVl9tYWNoaW5lPSI3NmUxMGQxNThlZmI2ZDQ1MTYwMTg4NDZmNjBjMmFiNTUwMTkwMGJjIgorCitQUiA9ICJyMSIKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKKyMgT3ZlcnJpZGUgQ09NUEFUSUJMRV9NQUNISU5FIHRvIGluY2x1ZGUgeW91ciBtYWNoaW5lIGluIGEgY29weSBvZiB0aGlzIHJlY2lwZQorIyBmaWxlLiBMZWF2aW5nIGl0IGVtcHR5IGhlcmUgZW5zdXJlcyBhbiBlYXJseSBleHBsaWNpdCBidWlsZCBmYWlsdXJlLgorQ09NUEFUSUJMRV9NQUNISU5FID0gIiheJCkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTYyZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLzAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaApAQCAtMCwwICsxLDI2IEBACitGcm9tIDVhNTU5NDNhNmJiYjEwYTc5OTk0YTBiMTgwNzFiMjQyN2RmZmIxNWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTEgSnVuIDIwMTIgMTU6MzE6NDIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGludXg6IHZlcnNpb24gdHdlYWsKKworU2lnbmVkLW9mZi1ieTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGE2ODc5NjMuLmY1YjFhYzMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yLDcgKzIsNyBAQCBWRVJTSU9OID0gMworIFBBVENITEVWRUwgPSA0CisgU1VCTEVWRUwgPSAwCisgRVhUUkFWRVJTSU9OID0KKy1OQU1FID0gU2FiZXItdG9vdGhlZCBTcXVpcnJlbAorK05BTUUgPSBTYWJlci10b290aGVkIFNxdWlycmVsLWN1c3RvbQorIAorICMgKkRPQ1VNRU5UQVRJT04qCisgIyBUbyBzZWUgYSBsaXN0IG9mIHR5cGljYWwgdGFyZ2V0cyBleGVjdXRlICJtYWtlIGhlbHAiCistLSAKKzEuNy41LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9mZWF0dXJlLnNjYyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZmVhdHVyZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkNWFmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZmVhdHVyZS5zY2MKQEAgLTAsMCArMSBAQAorcGF0Y2ggMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL3NtcC5jZmcgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL3NtcC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyNmE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vc21wLmNmZwpAQCAtMCwwICsxIEBACisjIENPTkZJR19TTVAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtbXVsdGlsaWIvaW1hZ2VzL2NvcmUtaW1hZ2UtbXVsdGlsaWItZXhhbXBsZS5iYiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLW11bHRpbGliL2ltYWdlcy9jb3JlLWltYWdlLW11bHRpbGliLWV4YW1wbGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMTg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLW11bHRpbGliL2ltYWdlcy9jb3JlLWltYWdlLW11bHRpbGliLWV4YW1wbGUuYmIKQEAgLTAsMCArMSwxMyBAQAorIworIyBBbiBleGFtcGxlIG9mIGEgbXVsdGlsaWIgaW1hZ2UKKyMKKyMgVGhpcyBleGFtcGxlIGluY2x1ZGVzIGEgbGliMzIgdmVyc2lvbiBvZiBiYXNoIGludG8gYW4gb3RoZXJ3aXNlIHN0YW5kYXJkCisjIHNhdG8gaW1hZ2UuIEl0IGFzc3VtZXMgYSAibGliMzIiIG11bHRpbGliIGhhcyBiZWVuIGVuYWJsZWQgaW4gdGhlIHVzZXIncworIyBjb25maWd1cmF0aW9uIChzZWUgdGhlIGV4YW1wbGUgY29uZiBmaWxlcyBmb3IgZXhhbXBsZXMgb2YgdGhpcy4pCisjCisKKyMgRmlyc3QgaW5jbHVkZSBhIGJhc2UgaW1hZ2UgdG8gYmFzZSB0aGluZ3Mgb2ZmCityZXF1aXJlIHJlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiCisKKyMgTm93IGFkZCB0aGUgbXVsdGlsaWIgcGFja2FnZXMgd2Ugd2FudCB0byBpbnN0YWxsCitJTUFHRV9JTlNUQUxMICs9ICJsaWIzMi1iYXNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL0NPUFlSSUdIVCBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9DT1BZUklHSFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzZTE3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9DT1BZUklHSFQKQEAgLTAsMCArMSwxNSBAQAorU3lzdmluaXQgaXMgQ29weXJpZ2h0IChDKSAxOTkxLTIwMDQgTWlxdWVsIHZhbiBTbW9vcmVuYnVyZworCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWRjOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b24KQEAgLTAsMCArMSwxOTMgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNrZWxldG9uCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbG9jYWxfZnMKKyMgU2hvdWxkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIFNob3VsZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEV4YW1wbGUgaW5pdHNjcmlwdAorIyBEZXNjcmlwdGlvbjogICAgICAgVGhpcyBmaWxlIHNob3VsZCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBzY3JpcHRzIHRvIGJlCisjICAgICAgICAgICAgICAgICAgICBwbGFjZWQgaW4gL2V0Yy9pbml0LmQKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgVGhlIGRlZmluaXRpb24gb2YgYWN0aW9uczogKEZyb20gTFNCIDMuMS4wKQorIyBzdGFydCAgICAgICAgIHN0YXJ0IHRoZSBzZXJ2aWNlCisjIHN0b3AgICAgICAgICAgc3RvcCB0aGUgc2VydmljZQorIyByZXN0YXJ0ICAgICAgIHN0b3AgYW5kIHJlc3RhcnQgdGhlIHNlcnZpY2UgaWYgdGhlIHNlcnZpY2UgaXMgYWxyZWFkeSBydW5uaW5nLAorIyAgICAgICAgICAgICAgIG90aGVyd2lzZSBzdGFydCB0aGUgc2VydmljZQorIyB0cnktcmVzdGFydAlyZXN0YXJ0IHRoZSBzZXJ2aWNlIGlmIHRoZSBzZXJ2aWNlIGlzIGFscmVhZHkgcnVubmluZworIyByZWxvYWQJY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlcnZpY2UgdG8gYmUgcmVsb2FkZWQgd2l0aG91dAorIyAgICAgICAgICAgICAgIGFjdHVhbGx5IHN0b3BwaW5nIGFuZCByZXN0YXJ0aW5nIHRoZSBzZXJ2aWNlCisjIGZvcmNlLXJlbG9hZAljYXVzZSB0aGUgY29uZmlndXJhdGlvbiB0byBiZSByZWxvYWRlZCBpZiB0aGUgc2VydmljZSBzdXBwb3J0cworIyAgICAgICAgICAgICAgIHRoaXMsIG90aGVyd2lzZSByZXN0YXJ0IHRoZSBzZXJ2aWNlIGlmIGl0IGlzIHJ1bm5pbmcKKyMgc3RhdHVzCXByaW50IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgc2VydmljZQorCisjIFRoZSBzdGFydCwgc3RvcCwgcmVzdGFydCwgZm9yY2UtcmVsb2FkLCBhbmQgc3RhdHVzIGFjdGlvbnMgc2hhbGwgYmUgc3VwcG9ydGVkCisjIGJ5IGFsbCBpbml0IHNjcmlwdHM7IHRoZSByZWxvYWQgYW5kIHRoZSB0cnktcmVzdGFydCBhY3Rpb25zIGFyZSBvcHRpb25hbAorCisjIENvbW1vbiBzdGVwcyB0byBjb252ZXJ0IHRoaXMgc2tlbGV0b24gaW50byBhIHJlYWwgaW5pdCBzY3JpcHQKKyMgMSkgY3Agc2tlbGV0b24gPHRoZV9yZWFsX25hbWU+CisjIDIpIFNldCBERVNDIGFuZCBOQU1FCisjIDMpIENoZWNrIHdoZXRoZXIgdGhlIGRhZW1vbiBhcHAgaXMgL3Vzci9zYmluLyROQU1FLCBpZiBub3QsIHNldCBpdC4KKyMgNCkgU2V0IERBRU1PTl9BUkdTIGlmIHRoZXJlIGlzIGFueQorIyA1KSBSZW1vdmUgdGhlIHVzZWxlc3MgY29kZQorCisjIE5PVEU6IFRoZSBza2VsZXRvbiBkb2Vzbid0IHN1cHBvcnQgdGhlIGRhZW1vbiB3aGljaCBpcyBhIHNjcmlwdCB1bmxlc3MgdGhlCisjICAgICAgIHBpZG9mIHN1cHBvcnRzICIteCIgb3B0aW9uLCBwbGVhc2Ugc2VlIG1vcmUgY29tbWVudHMgZm9yIHBpZG9mcHJvYyAoKQorIyAgICAgICBpbiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworIyBQQVRIIHNob3VsZCBvbmx5IGluY2x1ZGUgL3Vzci8qIGlmIGl0IHJ1bnMgYWZ0ZXIgdGhlIG1vdW50bmZzLnNoIHNjcmlwdAorUEFUSD0vc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbgorCitERVNDPSJza2VsZXRvbiIKK05BTUU9InNrZWxldG9uLXRlc3QiCitEQUVNT049L3Vzci9zYmluLyROQU1FCitEQUVNT05fQVJHUz0iIgorUElERklMRT0vdmFyL3J1bi8kTkFNRS5waWQKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMgfHwgZXhpdCAxCisKKyMgRXhpdCBpZiB0aGUgcGFja2FnZSBpcyBub3QgaW5zdGFsbGVkCitbIC14ICIkREFFTU9OIiBdIHx8IGV4aXQgMAorCisjIFJlYWQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmaWxlIGlmIGl0IGlzIHByZXNlbnQKK1sgLXIgL2V0Yy9kZWZhdWx0LyROQU1FIF0gJiYgLiAvZXRjL2RlZmF1bHQvJE5BTUUKKworIworIyBGdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgZGFlbW9uL3NlcnZpY2UKKyMKK2RvX3N0YXJ0KCkgeworCWxvY2FsIHN0YXR1cyBwaWQKKworCXN0YXR1cz0wCisJcGlkPWBwaWRvZnByb2MgJE5BTUVgIHx8IHN0YXR1cz0kPworCWNhc2UgJHN0YXR1cyBpbgorCTApCisJCWVjaG8gIiRERVNDIGFscmVhZHkgcnVubmluZyAoJHBpZCkuIgorCQlleGl0IDEKKwkJOzsKKwkqKQorCQllY2hvICJTdGFydGluZyAkREVTQyAuLi4iCisJCWV4ZWMgJERBRU1PTiAkREFFTU9OX0FSR1MgPi9kZXYvbnVsbCAyPiYxIHx8IHN0YXR1cz0kPworCQllY2hvICJFUlJPUjogRmFpbGVkIHRvIHN0YXJ0ICRERVNDLiIKKwkJZXhpdCAkc3RhdHVzCisJCTs7CisJZXNhYworCisJIyBBZGQgY29kZSBoZXJlLCBpZiBuZWNlc3NhcnksIHRoYXQgd2FpdHMgZm9yIHRoZSBwcm9jZXNzIHRvIGJlIHJlYWR5CisJIyB0byBoYW5kbGUgcmVxdWVzdHMgZnJvbSBzZXJ2aWNlcyBzdGFydGVkIHN1YnNlcXVlbnRseSB3aGljaCBkZXBlbmQKKwkjIG9uIHRoaXMgb25lLiAgQXMgYSBsYXN0IHJlc29ydCwgc2xlZXAgZm9yIHNvbWUgdGltZS4KK30KKworIworIyBGdW5jdGlvbiB0aGF0IHN0b3BzIHRoZSBkYWVtb24vc2VydmljZQorIworZG9fc3RvcCgpIHsKKwlsb2NhbCBwaWQgc3RhdHVzCisKKwlzdGF0dXM9MAorCXBpZD1gcGlkb2Zwcm9jICROQU1FYCB8fCBzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQkjIEV4aXQgd2hlbiBmYWlsIHRvIHN0b3AsIHRoZSBraWxsIHdvdWxkIGNvbXBsYWluIHdoZW4gZmFpbAorCQlraWxsIC1zIDE1ICRwaWQgPi9kZXYvbnVsbCAmJiBybSAtZiAkUElERklMRSAmJiBcCisJCQllY2hvICJTdG9wcGVkICRERVNDICgkcGlkKS4iIHx8IGV4aXQgJD8KKwkJOzsKKwkqKQorCQllY2hvICIkREVTQyBpcyBub3QgcnVubmluZzsgbm9uZSBraWxsZWQuIiA+JjIKKwkJOzsKKwllc2FjCisKKwkjIFdhaXQgZm9yIGNoaWxkcmVuIHRvIGZpbmlzaCB0b28gaWYgdGhpcyBpcyBhIGRhZW1vbiB0aGF0IGZvcmtzCisJIyBhbmQgaWYgdGhlIGRhZW1vbiBpcyBvbmx5IGV2ZXIgcnVuIGZyb20gdGhpcyBpbml0c2NyaXB0LgorCSMgSWYgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgdGhlbiBhZGQgc29tZSBvdGhlciBjb2RlCisJIyB0aGF0IHdhaXRzIGZvciB0aGUgcHJvY2VzcyB0byBkcm9wIGFsbCByZXNvdXJjZXMgdGhhdCBjb3VsZCBiZQorCSMgbmVlZGVkIGJ5IHNlcnZpY2VzIHN0YXJ0ZWQgc3Vic2VxdWVudGx5LiAgQSBsYXN0IHJlc29ydCBpcyB0bworCSMgc2xlZXAgZm9yIHNvbWUgdGltZS4KKwlyZXR1cm4gJHN0YXR1cworfQorCisjCisjIEZ1bmN0aW9uIHRoYXQgc2VuZHMgYSBTSUdIVVAgdG8gdGhlIGRhZW1vbi9zZXJ2aWNlCisjCitkb19yZWxvYWQoKSB7CisJbG9jYWwgcGlkIHN0YXR1cworCisJc3RhdHVzPTAKKyAgICAgICAgIyBJZiB0aGUgZGFlbW9uIGNhbiByZWxvYWQgaXRzIGNvbmZpZ3VyYXRpb24gd2l0aG91dAorICAgICAgICAjIHJlc3RhcnRpbmcgKGZvciBleGFtcGxlLCB3aGVuIGl0IGlzIHNlbnQgYSBTSUdIVVApLAorICAgICAgICAjIHRoZW4gaW1wbGVtZW50IHRoYXQgaGVyZS4KKwlwaWQ9YHBpZG9mcHJvYyAkTkFNRWAgfHwgc3RhdHVzPSQ/CisJY2FzZSAkc3RhdHVzIGluCisJMCkKKwkJZWNobyAiUmVsb2FkaW5nICRERVNDIC4uLiIKKwkJa2lsbCAtcyAxICRwaWQgfHwgZXhpdCAkPworCQk7OworCSopCisJCWVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nOyBub25lIHJlbG9hZGVkLiIgPiYyCisJCTs7CisJZXNhYworCWV4aXQgJHN0YXR1cworfQorCisKKyMKKyMgRnVuY3Rpb24gdGhhdCBzaG93cyB0aGUgZGFlbW9uL3NlcnZpY2Ugc3RhdHVzCisjCitzdGF0dXNfb2ZfcHJvYyAoKSB7CisJbG9jYWwgcGlkIHN0YXR1cworCisJc3RhdHVzPTAKKwkjIHBpZG9mIG91dHB1dCBudWxsIHdoZW4gbm8gcHJvZ3JhbSBpcyBydW5uaW5nLCBzbyBubyAiMj4vZGV2L251bGwiLgorCXBpZD1gcGlkb2Zwcm9jICROQU1FYCB8fCBzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICIkREVTQyBpcyBydW5uaW5nICgkcGlkKS4iCisJCWV4aXQgMAorCQk7OworCSopCisJCWVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nLiIgPiYyCisJCWV4aXQgJHN0YXR1cworCQk7OworCWVzYWMKK30KKworY2FzZSAiJDEiIGluCitzdGFydCkKKwlkb19zdGFydAorCTs7CitzdG9wKQorCWRvX3N0b3AgfHwgZXhpdCAkPworCTs7CitzdGF0dXMpCisJc3RhdHVzX29mX3Byb2MKKwk7OworcmVzdGFydCkKKwkjIEFsd2F5cyBzdGFydCB0aGUgc2VydmljZSByZWdhcmRsZXNzIHRoZSBzdGF0dXMgb2YgZG9fc3RvcAorCWRvX3N0b3AKKwlkb19zdGFydAorCTs7Cit0cnktcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJIyBmb3JjZS1yZWxvYWQgaXMgdGhlIHNhbWUgYXMgcmVsb2FkIG9yIHRyeS1yZXN0YXJ0IGFjY29yZGluZworCSMgdG8gaXRzIGRlZmluaXRpb24sIHRoZSByZWxvYWQgaXMgbm90IGltcGxlbWVudGVkIGhlcmUsIHNvCisJIyBmb3JjZS1yZWxvYWQgaXMgdGhlIGFsaWFzIG9mIHRyeS1yZXN0YXJ0IGhlcmUsIGJ1dCBpdCBzaG91bGQKKwkjIGJlIHRoZSBhbGlhcyBvZiByZWxvYWQgaWYgcmVsb2FkIGlzIGltcGxlbWVudGVkLgorCSMKKwkjIE9ubHkgc3RhcnQgdGhlIHNlcnZpY2Ugd2hlbiBkb19zdG9wIHN1Y2NlZWRzCisJZG9fc3RvcCAmJiBkb19zdGFydAorCTs7CisjcmVsb2FkKQorCSMgSWYgdGhlICJyZWxvYWQiIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBwcm9wZXJseSwgdGhlbiBsZXQgdGhlCisJIyBmb3JjZS1yZWxvYWQgYmUgdGhlIGFsaWFzIG9mIHJlbG9hZCwgYW5kIHJlbW92ZSBpdCBmcm9tCisJIyB0cnktcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJIworCSNkb19yZWxvYWQKKwkjOzsKKyopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fHRyeS1yZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMworCTs7Citlc2FjCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9za2VsZXRvbl90ZXN0LmMgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b25fdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzY3YWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b25fdGVzdC5jCkBAIC0wLDAgKzEsMTIgQEAKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogVGhpcyBkZW1vIGRvZXMgbm90aGluZyBleGNlcHQgZm9yIHRlc3RpbmcgL2V0Yy9pbml0LmQvc2tlbGV0b24gKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlkYWVtb24oMCwgMCk7CisJd2hpbGUgKDEpIHsKKwkJc2xlZXAoMSk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZV8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjZDdhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZV8wLjEuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJUaGUgY2Fub25pY2FsIGV4YW1wbGUgb2YgaW5pdCBzY3JpcHRzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vQ09QWVJJR0hUO21kNT0zNDljODcyZTAwNjYxNTVlMTgxOGI3ODY5Mzg4NzZhNCIKKworU1JDX1VSSSA9ICJmaWxlOi8vc2tlbGV0b24gXAorCSAgIGZpbGU6Ly9za2VsZXRvbl90ZXN0LmMgXAorCSAgIGZpbGU6Ly9DT1BZUklHSFQgXAorCSAgICIKKworZG9fY29tcGlsZSAoKSB7CisJJHtDQ30gJHtXT1JLRElSfS9za2VsZXRvbl90ZXN0LmMgLW8gJHtXT1JLRElSfS9za2VsZXRvbi10ZXN0Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJY2F0ICR7V09SS0RJUn0vc2tlbGV0b24gfCBcCisJICBzZWQgLWUgJ3MsL2V0Yywke3N5c2NvbmZkaXJ9LGcnIFwKKwkgICAgICAtZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnJyBcCisJICAgICAgLWUgJ3MsL3Zhciwke2xvY2Fsc3RhdGVkaXJ9LGcnIFwKKwkgICAgICAtZSAncywvdXNyL2Jpbiwke2JpbmRpcn0sZycgXAorCSAgICAgIC1lICdzLC91c3IsJHtwcmVmaXh9LGcnID4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3NrZWxldG9uCisJY2htb2QgYSt4ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9za2VsZXRvbgorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NrZWxldG9uLXRlc3QgJHtEfSR7c2JpbmRpcn0vCit9CisKK1JERVBFTkRTXyR7UE59ID0gImluaXRzY3JpcHRzIgorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3NrZWxldG9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUuYmIgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2MwMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUuYmIKQEAgLTAsMCArMSw3NiBAQAorU1VNTUFSWSA9ICJFeGFtcGxlIHJlY2lwZSBmb3IgdXNpbmcgaW5oZXJpdCB1c2VyYWRkIgorREVTQ1JJUFRJT04gPSAiVGhpcyByZWNpcGUgc2VydmVzIGFzIGFuIGV4YW1wbGUgZm9yIHVzaW5nIGZlYXR1cmVzIGZyb20gdXNlcmFkZC5iYmNsYXNzIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK1BSID0gInIxIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vZmlsZTEgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTIgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTMgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXVzZXIzIgorCitpbmhlcml0IHVzZXJhZGQKKworIyBZb3UgbXVzdCBzZXQgVVNFUkFERF9QQUNLQUdFUyB3aGVuIHlvdSBpbmhlcml0IHVzZXJhZGQuIFRoaXMKKyMgbGlzdHMgd2hpY2ggb3V0cHV0IHBhY2thZ2VzIHdpbGwgaW5jbHVkZSB0aGUgdXNlci9ncm91cAorIyBjcmVhdGlvbiBjb2RlLgorVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSAke1BOfS11c2VyMyIKKworIyBZb3UgbXVzdCBhbHNvIHNldCBVU0VSQUREX1BBUkFNIGFuZC9vciBHUk9VUEFERF9QQVJBTSB3aGVuCisjIHlvdSBpbmhlcml0IHVzZXJhZGQuCisKKyMgVVNFUkFERF9QQVJBTSBzcGVjaWZpZXMgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUKKyMgdXNlcmFkZCBjb21tYW5kLiBNdWx0aXBsZSB1c2VycyBjYW4gYmUgY3JlYXRlZCBieSBzZXBhcmF0aW5nCisjIHRoZSBjb21tYW5kcyB3aXRoIGEgc2VtaWNvbG9uLiBIZXJlIHdlJ2xsIGNyZWF0ZSB0d28gdXNlcnMsCisjIHVzZXIxIGFuZCB1c2VyMjoKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLXUgMTIwMCAtZCAvaG9tZS91c2VyMSAtciAtcyAvYmluL2Jhc2ggdXNlcjE7IC11IDEyMDEgLWQgL2hvbWUvdXNlcjIgLXIgLXMgL2Jpbi9iYXNoIHVzZXIyIgorCisjIHVzZXIzIHdpbGwgYmUgbWFuYWdlZCBpbiB0aGUgdXNlcmFkZC1leGFtcGxlLXVzZXIzIHBhY2FrZ2U6CisjIEFzIGFuIGV4YW1wbGUsIHdlIHVzZSB0aGUgLVAgb3B0aW9uIHRvIHNldCBjbGVhciB0ZXh0IHBhc3N3b3JkIGZvciB1c2VyMworVVNFUkFERF9QQVJBTV8ke1BOfS11c2VyMyA9ICItdSAxMjAyIC1kIC9ob21lL3VzZXIzIC1yIC1zIC9iaW4vYmFzaCAtUCAndXNlcjMnIHVzZXIzIgorCisjIEdST1VQQUREX1BBUkFNIHdvcmtzIHRoZSBzYW1lIHdheSwgd2hpY2ggeW91IHNldCB0byB0aGUgb3B0aW9ucworIyB5b3UnZCBub3JtYWxseSBwYXNzIHRvIHRoZSBncm91cGFkZCBjb21tYW5kLiBUaGlzIHdpbGwgY3JlYXRlCisjIGdyb3VwcyBncm91cDEgYW5kIGdyb3VwMjoKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1nIDg4MCBncm91cDE7IC1nIDg5MCBncm91cDIiCisKKyMgTGlrZXdpc2UsIHdlJ2xsIG1hbmFnZSBncm91cDMgaW4gdGhlIHVzZXJhZGQtZXhhbXBsZS11c2VyMyBwYWNrYWdlOgorR1JPVVBBRERfUEFSQU1fJHtQTn0tdXNlcjMgPSAiLWcgOTAwIGdyb3VwMyIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZGF0YWRpcn0vdXNlcjEKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS91c2VyMgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3VzZXIzCisKKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMSAke0R9JHtkYXRhZGlyfS91c2VyMS8KKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMiAke0R9JHtkYXRhZGlyfS91c2VyMS8KKworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGUyICR7RH0ke2RhdGFkaXJ9L3VzZXIyLworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGUzICR7RH0ke2RhdGFkaXJ9L3VzZXIyLworCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTMgJHtEfSR7ZGF0YWRpcn0vdXNlcjMvCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTQgJHtEfSR7ZGF0YWRpcn0vdXNlcjMvCisKKwkjIFRoZSBuZXcgdXNlcnMgYW5kIGdyb3VwcyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIGRvX2luc3RhbGwKKwkjIHN0ZXAsIHNvIHlvdSBhcmUgbm93IGZyZWUgdG8gbWFrZSB1c2Ugb2YgdGhlbToKKwljaG93biAtUiB1c2VyMSAke0R9JHtkYXRhZGlyfS91c2VyMQorCWNob3duIC1SIHVzZXIyICR7RH0ke2RhdGFkaXJ9L3VzZXIyCisJY2hvd24gLVIgdXNlcjMgJHtEfSR7ZGF0YWRpcn0vdXNlcjMKKworCWNoZ3JwIC1SIGdyb3VwMSAke0R9JHtkYXRhZGlyfS91c2VyMQorCWNoZ3JwIC1SIGdyb3VwMiAke0R9JHtkYXRhZGlyfS91c2VyMgorCWNoZ3JwIC1SIGdyb3VwMyAke0R9JHtkYXRhZGlyfS91c2VyMworfQorCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L3VzZXIxLyogJHtkYXRhZGlyfS91c2VyMi8qIgorRklMRVNfJHtQTn0tdXNlcjMgPSAiJHtkYXRhZGlyfS91c2VyMy8qIgorCisjIFByZXZlbnRzIGRvX3BhY2thZ2UgZmFpbHVyZXMgd2l0aDoKKyMgZGVidWdzb3VyY2VzLmxpc3Q6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6CitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUxIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMiBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTMgYi95b2N0by1wb2t5L21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGU0IGIveW9jdG8tcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGU0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGJjYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDExIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAieW9jdG9ic3AiCitCQkZJTEVfUEFUVEVSTl95b2N0b2JzcCA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3lvY3RvYnNwID0gIjUiCitMQVlFUlZFUlNJT05feW9jdG9ic3AgPSAiMyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGFlYmYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvYmVhZ2xlYm9uZS5jb25mCkBAIC0wLDAgKzEsMzkgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBCZWFnbGVib25lIG1hY2hpbmUKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgaHR0cDovL2JlYWdsZWJvYXJkLm9yZy9ib25lIGFuZCBodHRwOi8vYmVhZ2xlYm9hcmQub3JnL2JsYWNrIGJvYXJkcworCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyBrZXJuZWwtZGV2aWNldHJlZSIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJ1LWJvb3QiCisKK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhhOGhmLW5lb24iCitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCisKK0lNQUdFX0ZTVFlQRVMgKz0gInRhci5iejIgamZmczIiCitFWFRSQV9JTUFHRUNNRF9qZmZzMiA9ICItbG5wICIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eU8wIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTklIgorCitLRVJORUxfSU1BR0VUWVBFID0gInpJbWFnZSIKK0tFUk5FTF9ERVZJQ0VUUkVFID0gImFtMzM1eC1ib25lLmR0YiBhbTMzNXgtYm9uZWJsYWNrLmR0YiIKK0tFUk5FTF9FWFRSQV9BUkdTICs9ICJMT0FEQUREUj0ke1VCT09UX0VOVFJZUE9JTlR9IgorCitTUExfQklOQVJZID0gIk1MTyIKK1VCT09UX1NVRkZJWCA9ICJpbWciCitVQk9PVF9NQUNISU5FID0gImFtMzM1eF9ldm1fY29uZmlnIgorVUJPT1RfRU5UUllQT0lOVCA9ICIweDgwMDA4MDAwIgorVUJPT1RfTE9BREFERFJFU1MgPSAiMHg4MDAwODAwMCIKKworTUFDSElORV9GRUFUVVJFUyA9ICJ1c2JnYWRnZXQgdXNiaG9zdCB2ZmF0IGFsc2EiCisKK0lNQUdFX0JPT1RfRklMRVMgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0gTUxPIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZWYyMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9lZGdlcm91dGVyLmNvbmYKQEAgLTAsMCArMSwyMiBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IEVkZ2Vyb3V0ZXIKKyNAREVTQ1JJUFRJT046IEVkZ2Vyb3V0ZXIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKKworTUFDSElORV9GRUFUVVJFUyA9ICJwY2kgZXh0MiBleHQzIHNlcmlhbCIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCitLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlMgID0gIi5jb21tZW50IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTklIgorCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCitVU0VfVlQgPz0gIjAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDEwMDAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmUzNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LTY0LmNvbmYKQEAgLTAsMCArMSw4IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogR2VuZXJpYyBYODZfNjQuCisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgZ2VuZXJpYyBYODZfNjQgKDY0LWJpdCkgUENzIGFuZCBzZXJ2ZXJzLiBTdXBwb3J0cyBhIG1vZGVyYXRlbHkgd2lkZSByYW5nZSBvZiBkcml2ZXJzIHRoYXQgc2hvdWxkIGJvb3QgYW5kIGJlIHVzYWJsZSBvbiAidHlwaWNhbCIgaGFyZHdhcmUuCisKK0RFRkFVTFRUVU5FID89ICJjb3JlMi02NCIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0MmNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZgpAQCAtMCwwICsxLDggQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBHZW5lcmljIFg4Ni4KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBnZW5lcmljIFg4NiAoMzItYml0KSBQQ3MuIFN1cHBvcnRzIGEgbW9kZXJhdGVseSB3aWRlIHJhbmdlIG9mIGRyaXZlcnMgdGhhdCBzaG91bGQgYm9vdCBhbmQgYmUgdXNhYmxlIG9uICJ0eXBpY2FsIiBoYXJkd2FyZS4KKworREVGQVVMVFRVTkUgPz0gImNvcmUyLTMyIgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxMGI1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCkBAIC0wLDAgKzEsMjAgQEAKK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ3aWZpIGVmaSBwY2Jpb3MiCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAibGludXgteW9jdG8iCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC4xJSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gIiR7WFNFUlZFUl9YODZfQkFTRX0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9FWFR9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTkxNX0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9JOTY1fSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X0ZCREVWfSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X1ZFU0F9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfTU9ERVNFVFRJTkd9IFwKKyAgICAgICAgICAgIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJsaW51eC1maXJtd2FyZSB2ODZkIGVlZS1hY3BpLXNjcmlwdHMiCisKK0dMSUJDX0FERE9OUyA9ICJucHRsIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiIC0td2l0aC1iYXR0ZXJ5PWFjcGkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9tcGM4MzE1ZS1yZGIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL21wYzgzMTVlLXJkYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWVmNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9tcGM4MzE1ZS1yZGIuY29uZgpAQCAtMCwwICsxLDMzIEBACisjQFRZUEU6IE1hY2hpbmUKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyAKKworVEFSR0VUX0ZQVSA9ICIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzMuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidUltYWdlIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInUtYm9vdCIKK1VCT09UX01BQ0hJTkVfbXBjODMxNWUtcmRiID0gIk1QQzgzMTVFUkRCX2NvbmZpZyIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorCitNQUNISU5FX0ZFQVRVUkVTID0gImtleWJvYXJkIHBjaSBleHQyIGV4dDMgc2VyaWFsIgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiMy4xOSUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8iCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCisKK1BSRUZFUlJFRF9WRVJTSU9OX3UtYm9vdCA/PSAidjIwMTMuMDclIgorVUJPT1RfRU5UUllQT0lOVCA9ICIweDAwMDAwMDAwIgorCitLRVJORUxfREVWSUNFVFJFRSA9ICJtcGM4MzE1ZXJkYi5kdGIiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDQwMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2JlYWdsZWJvbmV0YXJnZXQucHkKQEAgLTAsMCArMSw5OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyBvbiBhIEJlYWdsZUJvbmUgKG9yaWdpbmFsICJ3aGl0ZSIgb3IgQmxhY2sgbW9kZWxzKS4gVGhlIGRldmljZSBtdXN0CisjIGJlIHNldCB1cCBhcyBwZXIgUkVBRE1FLmhhcmR3YXJlIGFuZCB0aGUgbWFzdGVyIGltYWdlIHNob3VsZCBiZSBkZXBsb3llZAorIyBvbnRvIHRoZSBjYXJkIHNvIHRoYXQgaXQgYm9vdHMgaW50byBpdCBieSBkZWZhdWx0LiBGb3IgYm9vdGluZyBpbnRvIHRoZQorIyBpbWFnZSB1bmRlciB0ZXN0IHdlIGludGVyYWN0IHdpdGggdS1ib290IG92ZXIgc2VyaWFsLCBzbyBmb3IgdGhlCisjIEJlYWdsZUJvbmUgQmxhY2sgeW91IHdpbGwgbmVlZCBhbiBhZGRpdGlvbmFsIFRUTCBzZXJpYWwgY2FibGUgc2luY2UgYQorIyBzZXJpYWwgaW50ZXJmYWNlIGlzbid0IGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgb3ZlciB0aGUgVVNCIGNvbm5lY3Rpb24gYXMKKyMgaXQgaXMgb24gdGhlIG9yaWdpbmFsIEJlYWdsZUJvbmUgKCJ3aGl0ZSIpIHZlcnNpb24uIFRoZSBzZXBhcmF0ZSBleHQzCisjIHBhcnRpdGlvbiB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIG11c3QgYmUgbGFiZWxsZWQKKyMgInRlc3Ryb290ZnMiIHNvIHRoYXQgdGhlIGRlcGxveW1lbnQgY29kZSBiZWxvdyBjYW4gZmluZCBpdC4KKyMKKyMgTk9URTogZm9yIHRoZSBCZWFnbGVCb25lICJ3aGl0ZSIgKG9yaWdpbmFsIHZlcnNpb24pIHlvdSBtYXkgbmVlZCB0byB1c2UKKyMgYSBzY3JpcHQgd2hpY2ggaGFuZGxlcyB0aGUgc2VyaWFsIGRldmljZSBkaXNhcHBlYXJpbmcgb24gcG93ZXIgZG93biwgc3VjaAorIyBhcyBzY3JpcHRzL2NvbnRyaWIvc2VyZGV2dHJ5IGluIE9FLUNvcmUuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgdGltZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBwZXhwZWN0CisKK2ltcG9ydCBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgYXMgc3NoY29udHJvbAorZnJvbSBvZXFhLmNvbnRyb2xsZXJzLm1hc3RlcmltYWdlIGltcG9ydCBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0CisKKworY2xhc3MgQmVhZ2xlQm9uZVRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGR0YnMgPSB7J3VJbWFnZS1hbTMzNXgtYm9uZS5kdGInOiAnYW0zMzV4LWJvbmUuZHRiJywgJ3VJbWFnZS1hbTMzNXgtYm9uZWJsYWNrLmR0Yic6ICdhbTMzNXgtYm9uZWJsYWNrLmR0Yid9CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2V4dHJhX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmR0YnMua2V5cygpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihCZWFnbGVCb25lVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBbCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAncm0gLXJmIC9tbnQvdGVzdHJvb3Rmcy8qJywKKyAgICAgICAgICAgICAgICAndGFyIHh2ZiB+L3Rlc3Qtcm9vdGZzLiVzIC1DIC9tbnQvdGVzdHJvb3RmcycgJSBzZWxmLmltYWdlX2ZzdHlwZSwKKyAgICAgICAgICAgICAgICAnWyAtZSAvbW50L3Rlc3Ryb290ZnMvYm9vdC91SW1hZ2UgXSB8fCBbIC1MIC9tbnQvdGVzdHJvb3Rmcy9ib290L3VJbWFnZSBdIHx8IGNwIH4vdGVzdC1rZXJuZWwgL21udC90ZXN0cm9vdGZzL2Jvb3QvdUltYWdlJywKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgZm9yIF8sIGR0YmZuIGluIHNlbGYuZHRicy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICMgS2VybmVsIGFuZCBkdGIgZmlsZXMgbWF5IG5vdCBiZSBpbiB0aGUgaW1hZ2UsIHNvIGNvcHkgdGhlbSBpZiBub3QKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2NtZHMuYXBwZW5kKCdbIC1lIC9tbnQvdGVzdHJvb3Rmcy9ib290L3swfSBdIHx8IGNwIH4vezB9IC9tbnQvdGVzdHJvb3Rmcy9ib290LycuZm9ybWF0KGR0YmZuKSkKKworICAgICAgICBpZiBub3Qgc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGlzIFRFU1RfVEFSR0VUIG5lZWRzIGEgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCBkZWZpbmVkIGluIGxvY2FsLmNvbmYuIikKKworCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgIHNlbGYubWFzdGVyLnJ1bigidW1vdW50IC9ib290OyB1bW91bnQgL21udC90ZXN0cm9vdGZzOyIpCisgICAgICAgIHNlbGYubWFzdGVyLmlnbm9yZV9zdGF0dXMgPSBGYWxzZQorICAgICAgICAjIEtlcm5lbCBhbmQgZHRiIGZpbGVzIG1heSBub3QgYmUgaW4gdGhlIGltYWdlLCBzbyBjb3B5IHRoZW0ganVzdCBpbiBjYXNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5rZXJuZWwsICJ+L3Rlc3Qta2VybmVsIikKKyAgICAgICAga2VybmVscGF0aCA9IG9zLnBhdGguZGlybmFtZShzZWxmLmtlcm5lbCkKKyAgICAgICAgZm9yIGR0Ym9yaWcsIGR0YmZuIGluIHNlbGYuZHRicy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGR0YmZpbGUgPSBvcy5wYXRoLmpvaW4oa2VybmVscGF0aCwgZHRib3JpZykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGR0YmZpbGUpOgorICAgICAgICAgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oZHRiZmlsZSwgIn4vJXMiICUgZHRiZm4pCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5yb290ZnMsICJ+L3Rlc3Qtcm9vdGZzLiVzIiAlIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBmb3IgY21kIGluIHNlbGYuZGVwbG95X2NtZHM6CisgICAgICAgICAgICBzZWxmLm1hc3Rlci5ydW4oY21kKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgICMgV2UnZCB3YWl0IGZvciAiVS1Cb290IiBoZXJlIGJ1dCBzb21ldGltZXMgd2UgY29ubmVjdCB0b28gbGF0ZSBvbiBCZWFnbGVCb25lIHdoaXRlIHRvIHNlZSBpdAorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIk5BTkQ6IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJNTUM6IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoImEiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgic2V0ZW52IGJvb3RwYXJ0IDA6MyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiVS1Cb290IyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJzZXRlbnYgbW1jcm9vdCAvZGV2L21tY2JsazBwMyBybyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiVS1Cb290IyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJib290IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQorCisgICAgZGVmIF93YWl0X3VudGlsX2Jvb3RlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2VkZ2Vyb3V0ZXJ0YXJnZXQucHkgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2VkZ2Vyb3V0ZXJ0YXJnZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzMzhjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZWRnZXJvdXRlcnRhcmdldC5weQpAQCAtMCwwICsxLDkwIEBACisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgdG8gdGVzdGltYWdlLmJiY2xhc3MgdG8gZGVwbG95IGltYWdlcyBhbmQgcnVuCisjIHRlc3RzIG9uIGEgVWJpcXVpdGkgTmV0d29ya3MgRWRnZVJvdXRlciBMaXRlLiBUaGUgZGV2aWNlIG11c3QgYmUgc2V0IHVwCisjIHRvIGJvb3QgaW50byB0aGUgbWFzdGVyIGltYWdlIGFscmVhZHkgLSB0aGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBpcyBhcworIyBmb2xsb3dzOgorIworIyAxLiBUYWtlIG91dCB0aGUgaW50ZXJuYWwgVVNCIGRyaXZlIGFuZCBwbHVnIGl0IGludG8geW91ciBQQworIyAyLiBSZXBhcnRpdGlvbiB0aGUgVVNCIGRyaXZlIHNvIHRoYXQgeW91IGhhdmUgdGhyZWUgcGFydGl0aW9ucyBpbiB0aGlzCisjICAgIG9yZGVyOgorIyAgICAgIDE6IHZmYXQsIGxhYmVsbGVkICJib290IiAoaXQgd2lsbCBuZWVkIHRvIGJlIGZvcm1hdHRlZCB3aXRoIG1rZnMudmZhdAorIyAgICAgICAgIGZvciB0aGlzIHRvIGJlIHBvc3NpYmxlLCBzaW5jZSBGQVQgcGFydGl0aW9ucyBmb3JtYXR0ZWQgdW5kZXIKKyMgICAgICAgICBET1MvV2luZG93cyB3aWxsIG9ubHkgc3VwcG9ydCB1cHBlcmNhc2UgbGFiZWxzKQorIyAgICAgIDI6IGV4dDMgKGZvciBtYXN0ZXIgaW1hZ2UpIGxhYmVsbGVkICJ0ZXN0bWFzdGVyIgorIyAgICAgIDM6IGV4dDMgKGZvciBpbWFnZSB1bmRlciB0ZXN0KSBsYWJlbGxlZCAidGVzdHJvb3RmcyIKKyMgMy4gQ29weSB0aGUga2VybmVsIHRvIGJlIHVzZWQgYnkgdGhlIG1hc3RlciBpbWFnZSB0byB0aGUgRkFUIHBhcnRpdGlvbgorIyAgICAoaXQgc2hvdWxkIGJlIG5hbWVkICJ2bWxpbnV4LjY0IiB3aXRoIHRoZSBmYWN0b3J5IHUtYm9vdCBjb25maWd1cmF0aW9uKQorIyA0LiBJbnN0YWxsIHRoZSBtYXN0ZXIgaW1hZ2Ugb250byB0aGUgInRlc3RtYXN0ZXIiIGV4dDMgcGFydGl0aW9uLiBJZgorIyAgICB5b3UgZG8gdGhpcyBieSBqdXN0IGV4dHJhY3RpbmcgdGhlIGNvbnRlbnRzIG9mIGFuIGltYWdlIG9udG8gdGhlCisjICAgIHBhcnRpdGlvbiwgeW91IHdpbGwgYWxzbyBsaWtlbHkgbmVlZCB0byBjcmVhdGUgdGhlIG1hc3RlciBpbWFnZSBtYXJrZXIKKyMgICAgZmlsZSAvZXRjL21hc3RlcmltYWdlIHdpdGhpbiB0aGlzIHBhcnRpdGlvbiBzbyB0aGF0IHdlIGNhbiB0ZWxsIHdoZW4KKyMgICAgd2UncmUgYm9vdGVkIGludG8gaXQgdGhhdCBpdCBpcyB0aGUgbWFzdGVyIGltYWdlLgorIyA1LiBQdXQgdGhlIFVTQiBkcml2ZSBiYWNrIGludG8gdGhlIGRldmljZSwgYW5kIGVuc3VyZSB0aGUgY29uc29sZSBwb3J0CisjICAgIGFuZCBmaXJzdCBldGhlcm5ldCBwb3J0IGFyZSBjb25uZWN0ZWQgYmVmb3JlIHBvd2VyaW5nIG9uCisjCisjIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgd2lsbCBuZWVkIHRvIGJlIHNldCBpbiBsb2NhbC5jb25mIHNvIHRoYXQgd2UgY2FuCisjIGludGVyYWN0IHdpdGggdS1ib290IG92ZXIgdGhlIHNlcmlhbCBjb25zb2xlIHBvcnQuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgdGltZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBwZXhwZWN0CisKK2ltcG9ydCBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgYXMgc3NoY29udHJvbAorZnJvbSBvZXFhLmNvbnRyb2xsZXJzLm1hc3RlcmltYWdlIGltcG9ydCBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0CisKKworY2xhc3MgRWRnZVJvdXRlclRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoRWRnZVJvdXRlclRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKworCXNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBbCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIGJvb3QgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdta2RpciAtcCAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtTCB0ZXN0cm9vdGZzIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ2NwIH4vdGVzdC1rZXJuZWwgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdybSAtcmYgL21udC90ZXN0cm9vdGZzLyonLAorICAgICAgICAgICAgICAgICd0YXIgeHZmIH4vdGVzdC1yb290ZnMuJXMgLUMgL21udC90ZXN0cm9vdGZzJyAlIHNlbGYuaW1hZ2VfZnN0eXBlCisgICAgICAgICAgICAgICAgXQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGlzIFRFU1RfVEFSR0VUIG5lZWRzIGEgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCBkZWZpbmVkIGluIGxvY2FsLmNvbmYuIikKKworCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgIHNlbGYubWFzdGVyLnJ1bigidW1vdW50IC9tbnQvdGVzdHJvb3RmczsiKQorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLmtlcm5lbCwgIn4vdGVzdC1rZXJuZWwiKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYucm9vdGZzLCAifi90ZXN0LXJvb3Rmcy4lcyIgJSBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmRlcGxveV9jbWRzOgorICAgICAgICAgICAgc2VsZi5tYXN0ZXIucnVuKGNtZCkKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYubWFzdGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiVS1Cb290IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoImEiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIk9jdGVvbiB1Ym50X2UxMDAjIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoImZhdGxvYWQgdXNiIDA6MSAkbG9hZGFkZHIgdGVzdC1rZXJuZWwiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIiBieXRlcyByZWFkIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJPY3Rlb24gdWJudF9lMTAwIyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJib290b2N0bGludXggJGxvYWRhZGRyIGNvcmVtYXNrPTB4MyByb290PS9kZXYvc2RhMyBydyByb290d2FpdCBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKSIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKKworICAgIGRlZiBfd2FpdF91bnRpbF9ib290ZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzgwN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2dydWJ0YXJnZXQucHkKQEAgLTAsMCArMSw3MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyBvbiBhIEdlbmVyaWMgUEMgdGhhdCBib290cyB1c2luZyBncnViIGJvb3Rsb2FkZXIuIFRoZSBkZXZpY2UgbXVzdAorIyBiZSBzZXQgdXAgYXMgcGVyIFJFQURNRS5oYXJkd2FyZSBhbmQgdGhlIG1hc3RlciBpbWFnZSBzaG91bGQgYmUgZGVwbG95ZWQKKyMgb250byB0aGUgaGFyZGRpc2sgc28gdGhhdCBpdCBib290cyBpbnRvIGl0IGJ5IGRlZmF1bHQuRm9yIGJvb3RpbmcgaW50byB0aGUKKyMgaW1hZ2UgdW5kZXIgdGVzdCB3ZSBpbnRlcmFjdCB3aXRoIGdydWIgb3ZlciBzZXJpYWwsIHNvIGZvciB0aGUKKyMgR2VuZXJpYyBQQyB5b3Ugd2lsbCBuZWVkIGFuIGFkZGl0aW9uYWwgc2VyaWFsIGNhYmxlIGFuZCBkZXZpY2UgdW5kZXIgdGVzdAorIyBuZWVkcyB0byBoYXZlIGEgc2VyaWFsIGludGVyZmFjZS4gVGhlIHNlcGFyYXRlIGV4dDMKKyMgcGFydGl0aW9uIHRoYXQgd2lsbCBjb250YWluIHRoZSBpbWFnZSB0byBiZSB0ZXN0ZWQgbXVzdCBiZSBsYWJlbGxlZAorIyAidGVzdHJvb3RmcyIgc28gdGhhdCB0aGUgZGVwbG95bWVudCBjb2RlIGJlbG93IGNhbiBmaW5kIGl0LgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgcGV4cGVjdAorCitpbXBvcnQgb2VxYS51dGlscy5zc2hjb250cm9sIGFzIHNzaGNvbnRyb2wKK2Zyb20gb2VxYS5jb250cm9sbGVycy5tYXN0ZXJpbWFnZSBpbXBvcnQgTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldAorCitjbGFzcyBHcnViVGFyZ2V0KE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihHcnViVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLmRlcGxveV9jbWRzID0gWworICAgICAgICAgICAgICAgICdtb3VudCAtTCBib290IC9ib290JywKKyAgICAgICAgICAgICAgICAnbWtkaXIgLXAgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgdGVzdHJvb3RmcyAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdjcCB+L3Rlc3Qta2VybmVsIC9ib290JywKKyAgICAgICAgICAgICAgICAncm0gLXJmIC9tbnQvdGVzdHJvb3Rmcy8qJywKKyAgICAgICAgICAgICAgICAndGFyIHh2ZiB+L3Rlc3Qtcm9vdGZzLiVzIC1DIC9tbnQvdGVzdHJvb3RmcycgJSBzZWxmLmltYWdlX2ZzdHlwZSwKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhpcyBURVNUX1RBUkdFVCBuZWVkcyBhIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgZGVmaW5lZCBpbiBsb2NhbC5jb25mLiIpCisKKworICAgIGRlZiBfZGVwbG95KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGVzZSBhcmVuJ3QgbW91bnRlZAorICAgICAgICBzZWxmLm1hc3Rlci5ydW4oInVtb3VudCAvYm9vdDsgdW1vdW50IC9tbnQvdGVzdHJvb3RmczsiKQorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgIyBLZXJuZWwgZmlsZXMgbWF5IG5vdCBiZSBpbiB0aGUgaW1hZ2UsIHNvIGNvcHkgdGhlbSBqdXN0IGluIGNhc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuIiArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIkdOVSBHUlVCICB2ZXJzaW9uIDIuMDAiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIkxpbnV4IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoIngiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCisKKyAgICBkZWYgX3dhaXRfdW50aWxfYm9vdGVkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvZ3VtbWlib290LnB5IGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9ndW1taWJvb3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhYTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvZ3VtbWlib290LnB5CkBAIC0wLDAgKzEsODMgQEAKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgcnVucWVtdQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCitpbXBvcnQgcmUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworCitjbGFzcyBHdW1taWJvb3Qob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgX2NvbW1vbl9zZXR1cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbW1vbiBzZXR1cCBmb3IgdGVzdCBjYXNlczogMTEwMSwgMTEwMworICAgICAgICAiIiIKKworICAgICAgICAjIFNldCBFRklfUFJPVklERVIgPSAiZ3VtbWlib290IiBhbmQgTUFDSElORSA9ICJnZW5lcmljeDg2LTY0IiBpbiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgZmVhdHVyZXMgPSAnRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ01BQ0hJTkUgPSAiZ2VuZXJpY3g4Ni02NCInCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgIGRlZiBfY29tbW9uX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tbW9uIGJ1aWxkIGZvciB0ZXN0IGNhc2VzOiAxMTAxLCAxMTAzCisgICAgICAgICIiIgorCisgICAgICAgICMgQnVpbGQgYSBnZW5lcmljeDg2LTY0L2VmaSBndW1taWJvb3QgaW1hZ2UKKyAgICAgICAgYml0YmFrZSgnc3lzbGludXggc3lzbGludXgtbmF0aXZlIHBhcnRlZC1uYXRpdmUgZG9zZnN0b29scy1uYXRpdmUgbXRvb2xzLW5hdGl2ZSBjb3JlLWltYWdlLW1pbmltYWwnKQorCisKKyAgICBAdGVzdGNhc2UoMTEwMSkKKyAgICBkZWYgdGVzdF9lZmlfZ3VtbWlib290X2ltYWdlc19jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgZWZpL2d1bW1pYm9vdCBpbWFnZXMgY2FuIGJlIGJ1aWx0CisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBGaWxlIGd1bW1pYm9vdHg2NC5lZmkgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiBidWlsZC90bXAvZGVwbG95L2ltYWdlcy9nZW5lcmljeDg2LTY0CisgICAgICAgICAgICAgICAgICAgICAyLiBFZmkvZ3VtbWlib290IGltYWdlcyBjYW4gYmUgYnVpbHQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIFdlJ2QgdXNlIERFUExPWV9ESVJfSU1BR0UgaGVyZSwgZXhjZXB0IHRoYXQgd2UgbmVlZCBpdHMgdmFsdWUgZm9yCisgICAgICAgICMgTUFDSElORT0iZ2VuZXJpY3g4Ni02NCB3aGljaCBpcyBwcm9iYWJseSBub3QgdGhlIG9uZSBjb25maWd1cmVkCisgICAgICAgIGd1bW1pYm9vdGZpbGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignREVQTE9ZX0RJUicpLCAnaW1hZ2VzJywgJ2dlbmVyaWN4ODYtNjQnLCAnZ3VtbWlib290eDY0LmVmaScpCisKKyAgICAgICAgc2VsZi5fY29tbW9uX3NldHVwKCkKKworICAgICAgICAjIEVuc3VyZSB3ZSdyZSBhY3R1YWxseSB0ZXN0aW5nIHRoYXQgdGhpcyBnZXRzIGJ1aWx0IGFuZCBub3QgdGhhdAorICAgICAgICAjIGl0IHdhcyBhcm91bmQgZnJvbSBhbiBlYXJsaWVyIGJ1aWxkCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuc3N0YXRlIGd1bW1pYm9vdCcpCisgICAgICAgIHJ1bkNtZCgncm0gLWYgJXMnICUgZ3VtbWlib290ZmlsZSkKKworICAgICAgICBzZWxmLl9jb21tb25fYnVpbGQoKQorCisgICAgICAgIGZvdW5kID0gb3MucGF0aC5pc2ZpbGUoZ3VtbWlib290ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnR3VtbWlib290IGZpbGUgJXMgbm90IGZvdW5kJyAlIGd1bW1pYm9vdGZpbGUpCisKKyAgICBAdGVzdGNhc2UoMTEwMykKKyAgICBkZWYgdGVzdF93aWNfY29tbWFuZF9jYW5fY3JlYXRlX2VmaV9ndW1taWJvb3RfaW5zdGFsbGF0aW9uX2ltYWdlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayB0aGF0IHdpYyBjb21tYW5kIGNhbiBjcmVhdGUgZWZpL2d1bW1pYm9vdCBpbnN0YWxsYXRpb24gaW1hZ2VzCisgICAgICAgIEV4cGVjdGVkOiAgICBBIC5kaXJlY3QgZmlsZSBpbiBmb2xkZXIgL3Zhci90bXAvd2ljLyBtdXN0IGJlIGNyZWF0ZWQuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fY29tbW9uX3NldHVwKCkKKyAgICAgICAgc2VsZi5fY29tbW9uX2J1aWxkKCkKKworICAgICAgICAjIENyZWF0ZSBlZmkvZ3VtbWlib290IGluc3RhbGxhdGlvbiBpbWFnZXMKKyAgICAgICAgd2ljX2NyZWF0ZV9jbWQgPSAnd2ljIGNyZWF0ZSBta2d1bW1pZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCh3aWNfY3JlYXRlX2NtZCkKKworICAgICAgICAjIEZpbmQgZmlsZSB3cml0dGVuIGJ5IHdpYyBmcm9tIG91dHB1dAorICAgICAgICByZXMgPSByZS5zZWFyY2goJygvdmFyL3RtcC93aWMvLipcLmRpcmVjdCknLCByZXN1bHQub3V0cHV0KQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBkaXJlY3RfZmlsZSA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgIyBDaGVjayBpdCBhY3R1YWxseSBleGlzdHMKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RfZmlsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd3aWMgcmVwb3J0ZWQgZGlyZWN0IGZpbGUgIiVzIiBkb2VzIG5vdCBleGlzdDsgd2ljIG91dHB1dDpcbiVzJyAlIChkaXJlY3RfZmlsZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ05vIC5kaXJlY3QgZmlsZSByZXBvcnRlZCBpbiB3aWMgb3V0cHV0OlxuJXMnICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2JlYWdsZWJvYXJkL2Fzb3VuZC5zdGF0ZSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2JlYWdsZWJvYXJkL2Fzb3VuZC5zdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTI0NDkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYmVhZ2xlYm9hcmQvYXNvdW5kLnN0YXRlCkBAIC0wLDAgKzEsNjU2IEBACitzdGF0ZS5vbWFwM2JlYWdsZSB7CisJY29udHJvbC4xIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCAnT3B0aW9uIDIgKHZvaWNlL2F1ZGlvKScKKwkJY29tbWVudC5pdGVtLjEgJ09wdGlvbiAxIChhdWRpbyknCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NvZGVjIE9wZXJhdGlvbiBNb2RlJworCQl2YWx1ZSAnT3B0aW9uIDEgKGF1ZGlvKScKKwl9CisJY29udHJvbC4yIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gNjMnCisJCWNvbW1lbnQuZGJtaW4gLTYzMDAKKwkJY29tbWVudC5kYm1heCAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzEgRGlnaXRhbCBGaW5lIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA2MycKKwkJY29tbWVudC5kYm1pbiAtNjMwMAorCQljb21tZW50LmRibWF4IDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMiBEaWdpdGFsIEZpbmUgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDUwCisJCXZhbHVlLjEgNTAKKwl9CisJY29udHJvbC40IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMicKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMxIERpZ2l0YWwgQ29hcnNlIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAyJworCQljb21tZW50LmRibWluIDAKKwkJY29tbWVudC5kYm1heCAxMjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzIgRGlnaXRhbCBDb2Fyc2UgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDIKKwkJdmFsdWUuMSAyCisJfQorCWNvbnRyb2wuNiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDE4JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMxIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC43IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMTgnCisJCWNvbW1lbnQuZGJtaW4gLTI0MDAKKwkJY29tbWVudC5kYm1heCAxMjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAxNQorCQl2YWx1ZS4xIDE1CisJfQorCWNvbnRyb2wuOCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMSBBbmFsb2cgUGxheWJhY2sgU3dpdGNoJworCQl2YWx1ZS4wIGZhbHNlCisJCXZhbHVlLjEgZmFsc2UKKwl9CisJY29udHJvbC45IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMgorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMyIEFuYWxvZyBQbGF5YmFjayBTd2l0Y2gnCisJCXZhbHVlLjAgdHJ1ZQorCQl2YWx1ZS4xIHRydWUKKwl9CisJY29udHJvbC4xMCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDQ5JworCQljb21tZW50LmRibWluIC0zNzAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMgVm9pY2UgRGlnaXRhbCBEb3dubGluayBWb2x1bWUnCisJCXZhbHVlIDAKKwl9CisJY29udHJvbC4xMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDE4JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMgVm9pY2UgQW5hbG9nIERvd25saW5rIFZvbHVtZScKKwkJdmFsdWUgMTgKKwl9CisJY29udHJvbC4xMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDIFZvaWNlIEFuYWxvZyBEb3dubGluayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMTMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC0xMjAwCisJCWNvbW1lbnQuZGJtYXggNjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZURyaXYgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuMTQgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC0xMjAwCisJCWNvbW1lbnQuZGJtYXggNjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXQgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDMKKwkJdmFsdWUuMSAzCisJfQorCWNvbnRyb2wuMTUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC0xMjAwCisJCWNvbW1lbnQuZGJtYXggNjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdCBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4xNiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDMnCisJCWNvbW1lbnQuZGJtaW4gLTYwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnRWFycGllY2UgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZSAwCisJfQorCWNvbnRyb2wuMTcgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzMScKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMzEwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDEgRGlnaXRhbCBDYXB0dXJlIFZvbHVtZScKKwkJdmFsdWUuMCAxMgorCQl2YWx1ZS4xIDEyCisJfQorCWNvbnRyb2wuMTggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzMScKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMzEwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDIgRGlnaXRhbCBDYXB0dXJlIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjE5IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gNScKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMzAwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgQ2FwdHVyZSBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4yMCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ1ZvaWNlIGhpZ2ggcHJpb3JpdHknCisJCWNvbW1lbnQuaXRlbS4xICdIaUZpIGhpZ2ggcHJpb3JpdHknCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FWQURDIENsb2NrIFByaW9yaXR5JworCQl2YWx1ZSAnVm9pY2UgaGlnaCBwcmlvcml0eScKKwl9CisJY29udHJvbC4yMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJzI3LzIwLzE0IG1zJworCQljb21tZW50Lml0ZW0uMSAnNTUvNDAvMjcgbXMnCisJCWNvbW1lbnQuaXRlbS4yICcxMDkvODEvNTUgbXMnCisJCWNvbW1lbnQuaXRlbS4zICcyMTgvMTYxLzEwOSBtcycKKwkJY29tbWVudC5pdGVtLjQgJzQzNy8zMjMvMjE4IG1zJworCQljb21tZW50Lml0ZW0uNSAnODc0LzY0NS80MzcgbXMnCisJCWNvbW1lbnQuaXRlbS42ICcxNzQ4LzEyOTEvODc0IG1zJworCQljb21tZW50Lml0ZW0uNyAnMzQ5NS8yNTgxLzE3NDggbXMnCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hTIHJhbXAgZGVsYXknCisJCXZhbHVlICcyNy8yMC8xNCBtcycKKwl9CisJY29udHJvbC4yMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ1ZpYnJhIEgtYnJpZGdlIGRpcmVjdGlvbicKKwkJY29tbWVudC5pdGVtLjEgJ0F1ZGlvIGRhdGEgTVNCJworCQlpZmFjZSBNSVhFUgorCQluYW1lICdWaWJyYSBILWJyaWRnZSBtb2RlJworCQl2YWx1ZSAnVmlicmEgSC1icmlkZ2UgZGlyZWN0aW9uJworCX0KKwljb250cm9sLjIzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCAnUG9zaXRpdmUgcG9sYXJpdHknCisJCWNvbW1lbnQuaXRlbS4xICdOZWdhdGl2ZSBwb2xhcml0eScKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVmlicmEgSC1icmlkZ2UgZGlyZWN0aW9uJworCQl2YWx1ZSAnUG9zaXRpdmUgcG9sYXJpdHknCisJfQorCWNvbnRyb2wuMjQgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBSaWdodCBTdWIgTWljIENhcHR1cmUgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjI1IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgUmlnaHQgQVVYUiBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgdHJ1ZQorCX0KKwljb250cm9sLjI2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgTGVmdCBNYWluIE1pYyBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4yNyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIExlZnQgSGVhZHNldCBNaWMgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMjggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBMZWZ0IEFVWEwgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC4yOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIExlZnQgQ2Fya2l0IE1pYyBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zMCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgQW5hbG9nCisJCWNvbW1lbnQuaXRlbS4xIERpZ2ltaWMxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1RYMiBDYXB0dXJlIFJvdXRlJworCQl2YWx1ZSBBbmFsb2cKKwl9CisJY29udHJvbC4zMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgQW5hbG9nCisJCWNvbW1lbnQuaXRlbS4xIERpZ2ltaWMwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1RYMSBDYXB0dXJlIFJvdXRlJworCQl2YWx1ZSBBbmFsb2cKKwl9CisJY29udHJvbC4zMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ0xvY2FsIHZpYnJhdG9yJworCQljb21tZW50Lml0ZW0uMSBBdWRpbworCQlpZmFjZSBNSVhFUgorCQluYW1lICdWaWJyYSBSb3V0ZScKKwkJdmFsdWUgJ0xvY2FsIHZpYnJhdG9yJworCX0KKwljb250cm9sLjMzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCBBdWRpb0wxCisJCWNvbW1lbnQuaXRlbS4xIEF1ZGlvUjEKKwkJY29tbWVudC5pdGVtLjIgQXVkaW9MMgorCQljb21tZW50Lml0ZW0uMyBBdWRpb1IyCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ZpYnJhIE11eCcKKwkJdmFsdWUgQXVkaW9MMQorCX0KKwljb250cm9sLjM0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIYW5kc2ZyZWVSIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zNSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgVm9pY2UKKwkJY29tbWVudC5pdGVtLjEgQXVkaW9SMQorCQljb21tZW50Lml0ZW0uMiBBdWRpb1IyCisJCWNvbW1lbnQuaXRlbS4zIEF1ZGlvTDIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGFuZHNmcmVlUiBNdXgnCisJCXZhbHVlIFZvaWNlCisJfQorCWNvbnRyb2wuMzYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hhbmRzZnJlZUwgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjM3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBFTlVNRVJBVEVECisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50Lml0ZW0uMCBWb2ljZQorCQljb21tZW50Lml0ZW0uMSBBdWRpb0wxCisJCWNvbW1lbnQuaXRlbS4yIEF1ZGlvTDIKKwkJY29tbWVudC5pdGVtLjMgQXVkaW9SMgorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIYW5kc2ZyZWVMIE11eCcKKwkJdmFsdWUgVm9pY2UKKwl9CisJY29udHJvbC4zOCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0UiBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0UiBNaXhlciBBdWRpb1IxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQwIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXRSIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdEwgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdEwgTWl4ZXIgQXVkaW9MMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40MyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0TCBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQ0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIZWFkc2V0UiBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40NSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldFIgTWl4ZXIgQXVkaW9SMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40NiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldFIgTWl4ZXIgQXVkaW9SMicKKwkJdmFsdWUgdHJ1ZQorCX0KKwljb250cm9sLjQ3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIZWFkc2V0TCBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40OCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldEwgTWl4ZXIgQXVkaW9MMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40OSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldEwgTWl4ZXIgQXVkaW9MMicKKwkJdmFsdWUgdHJ1ZQorCX0KKwljb250cm9sLjUwIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZVIgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlUiBNaXhlciBBdWRpb1IxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjUyIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZVIgTWl4ZXIgQXVkaW9SMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41MyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVSIE1peGVyIEF1ZGlvTDInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTQgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlTCBNaXhlciBWb2ljZScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41NSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVMIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlTCBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZUwgTWl4ZXIgQXVkaW9SMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41OCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnRWFycGllY2UgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIEF1ZGlvTDInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIEF1ZGlvUjEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA0MScKKwkJY29tbWVudC5kYm1pbiAtNTEwMAorCQljb21tZW50LmRibWF4IC0xMDAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ZvaWNlIERpZ2l0YWwgTG9vcGJhY2sgVm9sdW1lJworCQl2YWx1ZSAwCisJfQorCWNvbnRyb2wuNjMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA3JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdSaWdodCBEaWdpdGFsIExvb3BiYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjY0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50LnJhbmdlICcwIC0gNycKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnTGVmdCBEaWdpdGFsIExvb3BiYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjY1IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdWb2ljZSBBbmFsb2cgTG9vcGJhY2sgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjY2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdMZWZ0MiBBbmFsb2cgTG9vcGJhY2sgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjY3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdSaWdodDIgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42OCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnTGVmdDEgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42OSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUmlnaHQxIEFuYWxvZyBMb29wYmFjayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvYmVhZ2xlYm9hcmQvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2JlYWdsZWJvYXJkL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ2ODU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2JlYWdsZWJvYXJkL21hY2hjb25maWcKQEAgLTAsMCArMSwzIEBACisjIEFzc3VtZSBhIFVTQiBtb3VzZSBhbmQgdG91Y2hzY3JlZW4gYXJlIGNvbm5lY3RlZAorSEFWRV9UT1VDSFNDUkVFTj0wCitIQVZFX0tFWUJPQVJEPTEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYtNjQvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYtNjQvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODFhMjNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZ2VuZXJpY3g4Ni02NC9tYWNoY29uZmlnCkBAIC0wLDAgKzEsNiBAQAorSEFWRV9UT1VDSFNDUkVFTj0wCitIQVZFX0tFWUJPQVJEPTEKKworRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorRElTUExBWV9EUEk9MTMzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxYTIzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDYgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MAorSEFWRV9LRVlCT0FSRD0xCisKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKK0RJU1BMQVlfRFBJPTEzMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQKQEAgLTAsMCArMSBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjU5NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACitSREVQRU5EU18ke1BOfV9hcHBlbmRfZ2VuZXJpY3g4NiA9ICIgbHR0bmctdXN0IHN5c3RlbXRhcCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWRjNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYtNjQvdUNsaWJjLm1hY2hpbmUKQEAgLTAsMCArMSw2OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBGcmkgTm92IDIzIDE1OjQ5OjMzIDIwMDcKKyMKKyMgVEFSR0VUX2FscGhhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2FybSBpcyBub3Qgc2V0CisjIFRBUkdFVF9iZmluIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2NyaXMgaXMgbm90IHNldAorIyBUQVJHRVRfZTEgaXMgbm90IHNldAorIyBUQVJHRVRfZnJ2IGlzIG5vdCBzZXQKKyMgVEFSR0VUX2g4MzAwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2hwcGEgaXMgbm90IHNldAorIyBUQVJHRVRfaTM4Nj15CisjIFRBUkdFVF9pOTYwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2lhNjQgaXMgbm90IHNldAorIyBUQVJHRVRfbTY4ayBpcyBub3Qgc2V0CisjIFRBUkdFVF9taWNyb2JsYXplIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pcHMgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoNjQgaXMgbm90IHNldAorIyBUQVJHRVRfc3BhcmMgaXMgbm90IHNldAorIyBUQVJHRVRfdjg1MCBpcyBub3Qgc2V0CisjIFRBUkdFVF92YXggaXMgbm90IHNldAorVEFSR0VUX3g4Nl82ND15CisKKyMKKyMgVGFyZ2V0IEFyY2hpdGVjdHVyZSBGZWF0dXJlcyBhbmQgT3B0aW9ucworIworVEFSR0VUX0FSQ0g9Ing4Nl82NCIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorIyBDT05GSUdfR0VORVJJQ18zODYgaXMgbm90IHNldAorIyBDT05GSUdfMzg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR181ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2TU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY4NiBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJSSBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNNCBpcyBub3Qgc2V0CisjIENPTkZJR19LNiBpcyBub3Qgc2V0CisjIENPTkZJR19LNyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSVVNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5DSElQQzYgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1lSSVhJSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVIRU1JQUggaXMgbm90IHNldAorVEFSR0VUX1NVQkFSQ0g9IiIKKworIworIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKKyMKK0FSQ0hfTElUVExFX0VORElBTj15CisKKyMKKyMgVXNpbmcgTGl0dGxlIEVuZGlhbgorIworQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CitVQ0xJQkNfSEFTX0ZQVT15CitET19DOTlfTUFUSD15CitLRVJORUxfSEVBREVSUz0iL3Vzci9pbmNsdWRlIgorSEFWRV9ET1RfQ09ORklHPXkKKworVUNMSUJDX0hBU19GRU5WPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZSBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGYxNWY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2L3VDbGliYy5tYWNoaW5lCkBAIC0wLDAgKzEsNjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgRnJpIE5vdiAyMyAxNTo0OTozMyAyMDA3CisjCisjIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hcm0gaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKK1RBUkdFVF9pMzg2PXkKKyMgVEFSR0VUX2k5NjAgaXMgbm90IHNldAorIyBUQVJHRVRfaWE2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9tNjhrIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pY3JvYmxhemUgaXMgbm90IHNldAorIyBUQVJHRVRfbWlwcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MyIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Bvd2VycGMgaXMgbm90IHNldAorIyBUQVJHRVRfc2ggaXMgbm90IHNldAorIyBUQVJHRVRfc2g2NCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zcGFyYyBpcyBub3Qgc2V0CisjIFRBUkdFVF92ODUwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3ZheCBpcyBub3Qgc2V0CisjIFRBUkdFVF94ODZfNjQgaXMgbm90IHNldAorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJpMzg2IgorRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15CitDT05GSUdfR0VORVJJQ18zODY9eQorIyBDT05GSUdfMzg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR181ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2TU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHXzY4NiBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJSSBpcyBub3Qgc2V0CisjIENPTkZJR19QRU5USVVNNCBpcyBub3Qgc2V0CisjIENPTkZJR19LNiBpcyBub3Qgc2V0CisjIENPTkZJR19LNyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSVVNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5DSElQQzYgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1lSSVhJSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVIRU1JQUggaXMgbm90IHNldAorVEFSR0VUX1NVQkFSQ0g9IiIKKworIworIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKKyMKK0FSQ0hfTElUVExFX0VORElBTj15CisKKyMKKyMgVXNpbmcgTGl0dGxlIEVuZGlhbgorIworQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CitVQ0xJQkNfSEFTX0ZQVT15CitET19DOTlfTUFUSD15CitLRVJORUxfSEVBREVSUz0iL3Vzci9pbmNsdWRlIgorSEFWRV9ET1RfQ09ORklHPXkKKworVUNMSUJDX0hBU19GRU5WPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2LTY0L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2LTY0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL2dlbmVyaWN4ODYtNjQveG9yZy5jb25mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2L3hvcmcuY29uZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKQEAgLTAsMCArMSBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmQwN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwxMSBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKK0tCUkFOQ0hfZ2VuZXJpY3g4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiYmRhMTc1OTY2MDA5ZDVhOTQxMDM1NTllNmU2YWU1MTI3OTk1MmYzOSIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gImJkYTE3NTk2NjAwOWQ1YTk0MTAzNTU5ZTZlNmFlNTEyNzk5NTJmMzkiCisKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA9ICJnZW5lcmljeDg2LTY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWVjZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwyMCBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKK0tCUkFOQ0hfZ2VuZXJpY3g4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCitLQlJBTkNIX2VkZ2Vyb3V0ZXIgPSAic3RhbmRhcmQvZWRnZXJvdXRlciIKK0tCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgorS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKKworS01BQ0hJTkVfZ2VuZXJpY3g4NiA/PSAiY29tbW9uLXBjIgorS01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA/PSAiY29tbW9uLXBjLTY0IgorCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ID89ICJhZjFmN2Y1ODZiZDMyZDM5YzA1N2YxNzYwNjk5MWI4ODdlYWRiMzg5IgorU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWFjaGluZV9iZWFnbGVib25lID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICIxY2IxYmJhZjYzY2VjYzkxOGNmMzZjODk4MTlhNzQ2NGFmNGM0YjEzIgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKK0NPTVBBVElCTEVfTUFDSElORV9lZGdlcm91dGVyID0gImVkZ2Vyb3V0ZXIiCitDT01QQVRJQkxFX01BQ0hJTkVfYmVhZ2xlYm9uZSA9ICJiZWFnbGVib25lIgorQ09NUEFUSUJMRV9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJtcGM4MzE1ZS1yZGIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3Zjg0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDIwIEBACitLQlJBTkNIX2dlbmVyaWN4ODYgID0gInN0YW5kYXJkL2NvbW1vbi1wYyIKK0tCUkFOQ0hfZ2VuZXJpY3g4Ni02NCAgPSAic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiCitLQlJBTkNIX2VkZ2Vyb3V0ZXIgPSAic3RhbmRhcmQvZWRnZXJvdXRlciIKK0tCUkFOQ0hfYmVhZ2xlYm9uZSA9ICJzdGFuZGFyZC9iZWFnbGVib25lIgorS0JSQU5DSF9tcGM4MzE1ZS1yZGIgPSAic3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYiIKKworS01BQ0hJTkVfZ2VuZXJpY3g4NiA/PSAiY29tbW9uLXBjIgorS01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA/PSAiY29tbW9uLXBjLTY0IgorCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4Ni02NCA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX2VkZ2Vyb3V0ZXIgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9iZWFnbGVib25lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfbXBjODMxNWUtcmRiID89ICIyODkzZjNlOGVjZTcyZjZmNDczMjk3MTRkNmFmZTRjOWM1NDViYmY5IgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKK0NPTVBBVElCTEVfTUFDSElORV9lZGdlcm91dGVyID0gImVkZ2Vyb3V0ZXIiCitDT01QQVRJQkxFX01BQ0hJTkVfYmVhZ2xlYm9uZSA9ICJiZWFnbGVib25lIgorQ09NUEFUSUJMRV9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJtcGM4MzE1ZS1yZGIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmUwZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYmFwcGVuZApAQCAtMCwwICsxLDExIEBACitLQlJBTkNIX2dlbmVyaWN4ODYgID0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2Jhc2UiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiNGUzMGU2NGM0NGRmOWU1OWJkMTMyMzk5NTFiYjhkMmI1YjI3NmU2ZiIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gIjRlMzBlNjRjNDRkZjllNTliZDEzMjM5OTUxYmI4ZDJiNWIyNzZlNmYiCisKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2ID0gImdlbmVyaWN4ODYiCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4Ni02NCA9ICJnZW5lcmljeDg2LTY0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NsYXNzZXMvcG9reS1zYW5pdHkuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jbGFzc2VzL3Bva3ktc2FuaXR5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjMjY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jbGFzc2VzL3Bva3ktc2FuaXR5LmJiY2xhc3MKQEAgLTAsMCArMSwyOCBAQAorIyBQcm92aWRlIHNvbWUgZXh0ZW5zaW9ucyB0byBzYW5pdHkuYmJjbGFzcyB0byBoYW5kbGUgcG9reS1zcGVjaWZpYyBjb25mIGZpbGUgdXBncmFkZXMKKworcHl0aG9uIHBva3lfdXBkYXRlX2JibGF5ZXJzY29uZigpIHsKKyAgICBjdXJyZW50X3ZlcnNpb24gPSBpbnQoZC5nZXRWYXIoJ0xDT05GX1ZFUlNJT04nLCBUcnVlKSBvciAtMSkKKyAgICBsYXRlc3RfdmVyc2lvbiA9IGludChkLmdldFZhcignTEFZRVJfQ09ORl9WRVJTSU9OJywgVHJ1ZSkgb3IgLTEpCisKKyAgICBiYmxheWVyc19mbiA9IGJibGF5ZXJzX2NvbmZfZmlsZShkKQorICAgIGxpbmVzID0gc2FuaXR5X2NvbmZfcmVhZChiYmxheWVyc19mbikKKworICAgIGlmIGN1cnJlbnRfdmVyc2lvbiA9PSA1IGFuZCBsYXRlc3RfdmVyc2lvbiA+IDU6CisgICAgICAgICMgSGFuZGxlIHNwbGl0IG91dCBvZiBtZXRhLXlvY3RvLWJzcCBmcm9tIG1ldGEteW9jdG8KKyAgICAgICAgaWYgJy9tZXRhLXlvY3RvLWJzcCcgbm90IGluIGQuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpOgorICAgICAgICAgICAgaW5kZXgsIG1ldGFfeW9jdG9fbGluZSA9IHNhbml0eV9jb25mX2ZpbmRfbGluZSgnbWV0YS15b2N0b1xzKlxcXFxcXG4nLCBsaW5lcykKKyAgICAgICAgICAgIGlmIG1ldGFfeW9jdG9fbGluZToKKyAgICAgICAgICAgICAgICBsaW5lcy5pbnNlcnQoaW5kZXggKyAxLCBtZXRhX3lvY3RvX2xpbmUucmVwbGFjZSgnbWV0YS15b2N0bycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGEteW9jdG8tYnNwJykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKworICAgICAgICBjdXJyZW50X3ZlcnNpb24gKz0gMQorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfdmVyc2lvbikKKyAgICAgICAgcmV0dXJuCisKKyAgICBzeXMuZXhpdCgpCit9CisKKyMgUHJlcGVuZCB0byBlbnN1cmUgb3VyIGZ1bmN0aW9uIHJ1bnMgYmVmb3JlIHRoZSBPRS1Db3JlIG9uZQorQkJMQVlFUlNfQ09ORl9VUERBVEVfRlVOQ1MgPSsgInBva3lfdXBkYXRlX2JibGF5ZXJzY29uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkYTU2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlCkBAIC0wLDAgKzEsMTYgQEAKKyMgTEFZRVJfQ09ORl9WRVJTSU9OIGlzIGluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi9iYmxheWVycy5jb25mCisjIGNoYW5nZXMgaW5jb21wYXRpYmx5CitMQ09ORl9WRVJTSU9OID0gIjYiCisKK0JCUEFUSCA9ICIke1RPUERJUn0iCitCQkZJTEVTID89ICIiCisKK0JCTEFZRVJTID89ICIgXAorICAjI09FUk9PVCMjL21ldGEgXAorICAjI09FUk9PVCMjL21ldGEteW9jdG8gXAorICAjI09FUk9PVCMjL21ldGEteW9jdG8tYnNwIFwKKyAgIgorQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvIFwKKyAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvY29uZi1ub3Rlcy50eHQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9jb25mLW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU2MzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvY29uZi1ub3Rlcy50eHQKQEAgLTAsMCArMSw4IEBACitDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgY29yZS1pbWFnZS1taW5pbWFsCisgICAgY29yZS1pbWFnZS1zYXRvCisgICAgbWV0YS10b29sY2hhaW4KKyAgICBhZHQtaW5zdGFsbGVyCisgICAgbWV0YS1pZGUtc3VwcG9ydAorCitZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YjY0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYwpAQCAtMCwwICsxLDc2MSBAQAorIyBZb2N0byBQcm9qZWN0IC8gT3BlbkVtYmVkZGVkLUNvcmUgKE9FLUNvcmUpIE1haW50YWluZXJzIEZpbGUKKyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiByZWNpcGUgbWFpbnRhaW5lcnMuCisjCisjIFBsZWFzZSBzdWJtaXQgYW55IHBhdGNoZXMgYWdhaW5zdCByZWNpcGVzIGluIG1ldGEgdG8gdGhlIAorIyBPRS1Db3JlIG1haWwgbGlzdCAob3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZykKKyMgRm9yIHJlY2lwZXMgaW4gbWV0YS15b2N0byBwbGVhc2UgdXNlIHRoZSBQb2t5IGxpc3QgKHBva3lAeW9jdG9wcm9qZWN0Lm9yZykKKyMKKyMgSWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCBvciBxdWVzdGlvbnMgYWJvdXQgYSBwYXJ0aWN1bGFyIHJlY2lwZSwgZmVlbAorIyBmcmVlIHRvIGNvbnRhY3QgdGhlIG1haW50YWluZXIgZGlyZWN0bHkgKGNjOmluZyB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0CisjIHB1dHMgaXQgaW4gdGhlIGFyY2hpdmUgYW5kIGhlbHBzIG90aGVyIHBlb3BsZSB3aG8gbWlnaHQgaGF2ZSB0aGUgc2FtZQorIyBxdWVzdGlvbnMgaW4gdGhlIGZ1dHVyZSksIGJ1dCBwbGVhc2UgdHJ5IHRvIGRvIHRoZSBmb2xsb3dpbmcgZmlyc3Q6CisjCisjICAtIGxvb2sgaW4gdGhlIFlvY3RvIFByb2plY3QgQnVnemlsbGEKKyMgICAgKGh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLykgdG8gc2VlIGlmIGEgcHJvYmxlbSBoYXMKKyMgICAgYWxyZWFkeSBiZWVuIHJlcG9ydGVkCisjCisjIC0gbG9vayB0aHJvdWdoIHJlY2VudCBlbnRyaWVzIG9mIHRoZSBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMKKyMgICAoaHR0cDovL2xpc3RzLmxpbnV4dG9nby5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlIG9yCisjICAgIGh0dHBzOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZy9waXBlcm1haWwvcG9reS8pIHRvIHNlZSBpZiBvdGhlcgorIyAgIHBlb3BsZSBoYXZlIHJ1biBpbnRvIHNpbWlsYXIgcHJvYmxlbXMgb3IgaGFkIHNpbWlsYXIgcXVlc3Rpb25zCisjICAgYW5zd2VyZWQuCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIwlSRUNJUEVfTUFJTlRBSU5FUl9wbi08cmVjaXBlIG5hbWU+ID0gIkZ1bGwgTmFtZSA8YWRkcmVzc0Bkb21haW4+IgorIworIyBQbGVhc2Uga2VlcCB0aGlzIGxpc3QgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorIworUkVDSVBFX01BSU5UQUlORVJfcG4tYWNsID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hY3BpZCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hZHQtaW5zdGFsbGVyID0gIkplc3NpY2EgWmhhbmcgPGplc3NpY2EuemhhbmdAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFkd2FpdGEtaWNvbi10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtbGliID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtcGx1Z2lucyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXN0YXRlID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdG9vbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWxzYS11dGlscyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXV0aWxzLXNjcmlwdHMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXBtZCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwciA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXByLXV0aWwgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwdCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hc3BlbGwgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXRrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0LXNwaTItYXRrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXQtc3BpMi1jb3JlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXR0ciA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXVnZWFzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9jb25mID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9nZW4gPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXV0b21ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXZhaGktdWkgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXZhaGkgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmFiZWx0cmFjZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhc2UtZmlsZXMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNlLXBhc3N3ZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhc2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJjID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJkd2djID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJlZWNyeXB0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaWdyZXFzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW5kID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpbnV0aWxzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJpc29uID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ibGt0b29sID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJsa3RyYWNlID0gIlRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmx1ZXo1ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYm9vc3QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idHJmcy10b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idWlsZC1hcHBsaWFuY2UtaW1hZ2UgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idWlsZC1jb21wYXJlID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGRlciA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1c3lib3ggPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ5YWNjID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iemlwMiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2EtY2VydGlmaWNhdGVzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2Fpcm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jYWxpYnJhdGVwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNjYWNoZSA9ICJXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jZHJ0b29scyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jaGtjb25maWcgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2hrY29uZmlnLWFsdGVybmF0aXZlcy1uYXRpdmUgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2hycGF0aCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLWdzdC0zLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLWd0ay0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbHV0dGVyLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNtYWtlLW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbWFrZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb2dsLTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbXBvc2l0ZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29ubm1hbiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbm5tYW4tZ25vbWUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25zb2xla2l0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25zb2xlLXRvb2xzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWJhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWNsdXR0ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWRpcmVjdGZiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWxzYi1kZXYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWxzYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1kZXYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1ydCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtcnQtc2RrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1zYXRvLWRldiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0byA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXgxMSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmV1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3BpbyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3JhY2tsaWIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyZWF0ZXJlcG8gPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyb25pZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcm9zcy1sb2NhbGVkZWYtbmF0aXZlID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3VwcyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3VybCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3dhdXRvbWFjcm9zID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGFtYWdlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMtZ2xpYiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cy10ZXN0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzLXdhaXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaGNwID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaWZmc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlmZnV0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXJlY3RmYi1leGFtcGxlcyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlyZWN0ZmIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpc3RjYyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlzdGNjLWNvbmZpZyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kbXhwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzLW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXNnbWwtZHRkID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stdXRpbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9zZnN0b29scyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcGtnID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyaTJwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyaTNwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRyb3BiZWFyID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWR0YyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWUyZnNwcm9ncyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVlZS1hY3BpLXNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lbGZ1dGlscyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZW5jaGFudCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVuY29kaW5ncyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVwaXBoYW55ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZXRodG9vbCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWV4cGF0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZpbGUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmluZHV0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1maXhlc3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmxhYyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mbGV4ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250LWFsaWFzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udGNvbmZpZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvbnRzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250LXV0aWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb29tYXRpYy1maWx0ZXJzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb3JtZmFjdG9yID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm90b3dhbGwgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZnJlZXR5cGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mc3Rlc3RzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdha3UgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nYXdrID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjLXNvdXJjZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2NtYWtlZGVwID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1ydW50aW1lID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjb25mID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NyID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RiID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdkYm0gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGstcGl4YnVmID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2VuZXh0MmZzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdldHRleHQtbWluaW1hbC1uYXRpdmUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdldHRleHQgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2hvc3RzY3JpcHQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdpZmxpYiA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdpdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGV3ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYi0yLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbGliLW5ldHdvcmtpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ21wID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWNvbW1vbiA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1kZXNrdG9wID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AtdGVzdGluZyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRlc2t0b3AzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtZG9jLXV0aWxzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLW1pbWUtZGF0YSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnUtY29uZmlnID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudS1lZmkgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ251cGcgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudXRscyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdwZXJmID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3BnbWUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3JlcCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3JvZmYgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdydWIgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtbGliYXYgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3QtcGxheWVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWRvYy1zdHViID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWRvYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1lbmdpbmVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLXNhdG8tZW5naW5lID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLXRoZW1lLXRvcnR1cmVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrLWljb24tdXRpbHMtbmF0aXZlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3RrKyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ayszID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3VpbGUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3VpbHQtbmF0aXZlID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1bW1pYm9vdCA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nemlwID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oYXJmYnV6eiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhkcGFybSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oZWxwMm1hbi1uYXRpdmUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhpY29sb3ItaWNvbi10aGVtZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhvc3RhcC1jb25mID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taG9zdGFwLXV0aWxzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taHdsYXRkZXRlY3QgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taWNlY2MtY3JlYXRlLWVudi1uYXRpdmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pY3UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1mcmFtZXdvcmsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1ib290ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmkgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbnB1dHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5zc2VydiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbnRsdG9vbCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pcHJvdXRlMiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlwdGFibGVzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXB1dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pcmRhLXV0aWxzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXNvLWNvZGVzID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tanBlZyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1qc29uLWdsaWIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rYmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rYnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2NvbmZpZy1mcm9udGVuZHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXJuZWxzaGFyayA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXJuLXRvb2xzLW5hdGl2ZSA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXhlYy10b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1rZXltYXBzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta21vZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGFtZSA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sYXRlbmN5dG9wID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxkY29uZmlnLW5hdGl2ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxlYWZwYWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sZXNzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmE1MiA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhY3BpID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFpbyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFyY2hpdmUgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhcnQtbGdwbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmFzc3VhbiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmF0b21pY3Mtb3BzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYXYgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYnNkID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNhcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjZ3JvdXAgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjaGVjayA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjbGFzcy1pc2EtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNvbnZlcnQtYXNuMS1wZXJsID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY3JvY28gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkYWVtb24gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkbXggPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJkcm0gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZHVtcHZhbHVlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlbnYtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVwb3h5ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZXJhdGlvbi1mb250cyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV2ZGV2ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV2ZW50ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmV4aWYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmYWtla2V5ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmZpICA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmbSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZvbnRlbmMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnY2MgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2NyeXB0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnZm9ydHJhbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnbGFkZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdsdSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdwZy1lcnJvciA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpMThuLWNvbGxhdGUtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmljYWwgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpY2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpY29udiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmlkM3RhZyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpZG4gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpbnB1dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmpzb24gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlia3NiYSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1hZCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtYXRjaGJveCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm1wYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuZXd0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuZXd0LXB5dGhvbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmZzaWRtYXAgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJubCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5vdGlmeSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5zcy1tZG5zID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib2dnID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib2lsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib214aWwgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJvd2wtYXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJvd2wgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwYW0gPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwY2FwID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGNpYWNjZXNzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBjcmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGZtNCA9ICJNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBuZyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBuZzEyID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicG9kLXBsYWluZXItcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnByb3h5ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicHRocmVhZC1zdHVicyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnJzdmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzYW1wbGVyYXRlMCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZGwgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2RsMiA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzZWNyZXQgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzbSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNuZGZpbGUxID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNvdXAtMi40ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGFzbjEgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0ZWxlcGF0aHkgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aGVvcmEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0aW1lZGF0ZS1wZXJsID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGlycGMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ0b29sID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVuaXN0cmluZyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVyY3UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1cmktcGVybCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2IxID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzYi1jb21wYXQgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXNlciA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ2b3JiaXMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlid2VicCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnduY2szID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExLWRpZXQgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieDExID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGF1ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGNhbGlicmF0ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjb21wb3NpdGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y3Vyc29yID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGRhbWFnZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhkbWNwID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGV4dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhmaXhlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhmb250ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGZ0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGluZXJhbWEgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4aSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhrYmNvbW1vbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhrYmZpbGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwyID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXBhcnNlci1wZXJsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1zYXgtcGVybCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtc2ltcGxlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bXUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cG0gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhyYW5kciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhyZW5kZXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNjcm5zYXZlciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzZXR0aW5ncy1jbGllbnQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2htZmVuY2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2x0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4dHN0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHZtYyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHhmODZkZ2EgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4eGY4Nm1pc2MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4eGY4NnZtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieWFtbCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpZ2h0dHBkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXhkb2MtdG9vbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtZHVtbXkgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1maXJtd2FyZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LWxpYmMtaGVhZGVycyA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1saWJjLWhlYWRlcnMteW9jdG8gPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgteW9jdG8gPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgteW9jdG8tZGV2ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXJ0ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbG9ncm90YXRlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxyenN6ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNiaW5pdHNjcmlwdHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2J0ZXN0ID0gIllpIFpoYW8gPHlpLnpoYW9Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc2IgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzb2YgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHRwID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0dG5nLW1vZHVsZXMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctdG9vbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHR0bmctdXN0ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx6b3AgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sem8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sejQgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tNCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWlseCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ha2VkZXBlbmQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFrZWRldnMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hbi1wYWdlcyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFuID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1jb25maWctZ3RrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtZGVza3RvcC1zYXRvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtZGVza3RvcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWtleWJvYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtcGFuZWwtMiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXNlc3Npb24tc2F0byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXNlc3Npb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC10ZXJtaW5hbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC13bSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1jID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1kYWRtID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVudS1jYWNoZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lc2EgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXNhLWRlbW9zID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVzYS1nbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtaWRlLXN1cHBvcnQgPSAiSmVzc2ljYSBaaGFuZyA8amVzc2ljYS56aGFuZ0BpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWV0YS10b29sY2hhaW4tcXRlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtdG9vbGNoYWluID0gIkplc3NpY2EgWmhhbmcgPGplc3NpY2EuemhhbmdAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1pbmdldHR5ID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1pbmljb20gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5pLXgtc2Vzc2lvbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rZWxmaW1hZ2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2ZvbnRkaXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2ZvbnRzY2FsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rbGlicy1uYXRpdmUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWt0ZW1wID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1vZHV0aWxzLWluaXRzY3JpcHRzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZWcyZGVjID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXBmciA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tc210cCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXRkLXV0aWxzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXRvb2xzID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXgtMS4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmFzbSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcWVtdS1oZWxwZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uYXRpdmVzZGstcXQ0LXRvb2xzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5jdXJzZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lYXJkID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmVvbiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5ldGJhc2UgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXR0bGUgPSAiQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXQtdG9vbHMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZnMtZXhwb3J0LXJvb3QgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmZzLXV0aWxzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5wdGggPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uc3ByID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbnNzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2NmLWxpbnV4ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2Zvbm8gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vaC1wdXp6bGVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbmphZGUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNwID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zc2ggPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BlbnNzbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctY29sbGF0ZXJhbCA9ICJQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctY29uZmlnLWJhc2UgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnID0gIlBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZy11dGlscyA9ICJQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxlID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxldWkgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3Byb2ZpbGV1aS1zZXJ2ZXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vc3NwLXV1aWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vd2wtdmlkZW8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wMTEta2l0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWJhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1ib290ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1sc2IgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1uZnMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1xdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2UtaW5kZXggPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYW5nbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhcnRlZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGF0Y2ggPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBheC11dGlscyA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGF4ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wY2l1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGNtYW5mbSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wY21jaWF1dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wZXJmID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBlcmwgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpZ2xpdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpZ3ogPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpbmVudHJ5ID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGl4bWFuID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGtnY29uZmlnID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBtLXV0aWxzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcG9pbnRlcmNhbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvbmctY2xvY2sgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3B0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvcnRtYXAgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcG93ZXJ0b3AgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHBwID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcHAtZGlhbGluID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcmVsaW5rID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcmVzZW50cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wcm9jcHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc2V1ZG8gPSAiTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBzbWlzYyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBzcGxhc2ggPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHRoID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHVsc2VhdWRpbyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wdXp6bGVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1hc3luYyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1kYnVzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1kb2N1dGlscyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZ2l0ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1naXRkYiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24taW1hZ2luZyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbWFrbyA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1ub3NlID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW51bXB5ID0gIktoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Y2Fpcm8gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Y3VybCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlnb2JqZWN0ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWd0ayA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlyZXggPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXNjb25zID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zZXR1cHRvb2xzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zbWFydHBtID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zbW1hcCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbjMtZGlzdHJpYnV0ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXFlbXUtaGVscGVyLW5hdGl2ZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXFlbXUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xbW1wID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdDRlLWRlbW8taW1hZ2UgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0LWVtYmVkZGVkID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0NC1ncmFwaGljcy1zeXN0ZW0gPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0LW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdDQteDExLWZyZWUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQtZGVtby1pbml0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF1aWNreSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdWlsdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdW90YSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJhbmRycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZWFkbGluZSA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVjb3JkcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZW1ha2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVuZGVycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZXNvbHZjb25mID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yZXNvdXJjZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmdiID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBjYmluZCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBtID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ycG1yZXNvbHZlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJzeW5jID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ0LXRlc3RzID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ1YnkgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydW4tcG9zdGluc3RzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnh2dC11bmljb2RlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2F0by1pY29uLXRoZW1lID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNhdG8tc2NyZWVuc2hvdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNiYyA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zY3JlZW4gPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2NybnNhdmVycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZWQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNldHNlcmlhbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXR0aW5ncy1kYWVtb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZ21sLWNvbW1vbiA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZ21sc3BsID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2hhZG93LXNlY3VyZXR0eSA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2hhZG93LXN5c3Jvb3QgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYXJlZC1taW1lLWluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaHV0ZG93bi1kZXNrdG9wID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2xhbmcgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc29jYXQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNwZWV4ID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNwZWV4ZHNwID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNxbGl0ZTMgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3F1YXNoZnMtdG9vbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3RhcnR1cC1ub3RpZmljYXRpb24gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdGF0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdHJhY2UgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3VidmVyc2lvbiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zdWRvID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zd2FiYmVyLW5hdGl2ZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c2ZzdXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c2tsb2dkID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNsaW51eCA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNwcm9mID0gIlRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdGVtdGFwLXVwcm9iZXMgPSAiVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXN2aW5pdC1pbml0dGFiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdmluaXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10YWdsaWIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10YXItcmVwbGFjZW1lbnQtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRhciA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGNmLWFnZW50ID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGNsID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjcC13cmFwcGVycyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10Y3Atd3JhcHBlcnMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZWxlcGF0aHktZ2xpYiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlbGVwYXRoeS1pZGxlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGVsZXBhdGh5LW1pc3Npb24tY29udHJvbCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlbGVwYXRoeS1weXRob24gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZXhpMmh0bWwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGV4aW5mbyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10aWZmID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGltZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10aW55LWluaXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10cmFjZS1jbWQgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHJlbW9yID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRzbGliID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXR0Zi1iaXRzdHJlYW0tdmVyYSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10emNvZGUtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXR6ZGF0YSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11LWJvb3QgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11LWJvb3QtZnctdXRpbHMgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11LWJvb3QtbWtpbWFnZSA9ICJEZW55cyBEbXl0cml5ZW5rbyA8ZGVuaXNAZGVuaXgub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVib290Y2hhcnQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11Y2xpYmMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11ZGV2LWV4dHJhY29uZiA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11ZGV2ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuaWZkZWYgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdW56aXAgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXBkYXRlLXJjLmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11c2Jpbml0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXNidXRpbHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11bmZzMyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXV0aWwtbGludXggPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXV0aWwtbWFjcm9zID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdjg2ZCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi12YWxhID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmFsZ3JpbmQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi12aWRlb3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdnRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2FmZmxlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2F0Y2hkb2cgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13YXlsYW5kID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2Via2l0Z3RrID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2ViLXdlYmtpdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlc3RvbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdnZXQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2hpY2ggPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2lyZWxlc3MtdG9vbHMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13cGEtc3VwcGxpY2FudCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXgxMS1jb21tb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTFwZXJmID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXgxMXZuYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MjY0ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhhdXRoID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwtaW1hZ2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItdXRpbC1rZXlzeW1zID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y2ItdXRpbC1yZW5kZXJ1dGlsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwtd20gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y21pc2Nwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZGctdXRpbHMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZHB5aW5mbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhleHRwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhleWVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NmRnYXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NmRyaXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1ldmRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LW1vdXNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LXZtbW91c2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2bWlzY3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1jaXJydXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1pbnRlbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLW9tYXBmYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tb21hcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tdmVzYSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tdm13YXJlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4NnZpZG1vZGVwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhob3N0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGluZXJhbWFwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbmV0ZCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5pdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbnB1dCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbnB1dC1jYWxpYnJhdG9yID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGtiY29tcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhrZXlib2FyZC1jb25maWcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14bWx0byA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teG1vZG1hcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhvcmctbWluaW1hbC1mb250cyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhwcm9wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHJhbmRyID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhyZXN0b3AgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLW5vZG0taW5pdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhzZXJ2ZXIteGY4Ni1jb25maWcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLXhvcmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2V0ID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh0cmFucyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh0c2NhbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh2aWRlby10ZXN0cyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh2aW5mbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh3aW5pbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHogPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXlhc20gPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4temF1cnVzZCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi16aXAgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXpsaWIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTFmMmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jCkBAIC0wLDAgKzEsNzMgQEAKKyMKKyMgUGFja2FnZSBWZXJzaW9ucyBmb3IgY3V0dGluZyBlZGdlIHRlc3Rpbmc6CisjCisKKyNTUkNSRVZfcG4tb3BrZy1uYXRpdmUgPz0gIiR7QVVUT1JFVn0iCisjU1JDUkVWX3BuLW9wa2ctc2RrID89ICIke0FVVE9SRVZ9IgorI1NSQ1JFVl9wbi1vcGtnID89ICIke0FVVE9SRVZ9IgorI1NSQ1JFVl9wbi1vcGtnLXV0aWxzLW5haXR2ZSA/PSAiJHtBVVRPUkVWfSIKKyNTUkNSRVZfcG4tb3BrZy11dGlscyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1nY29uZi1kYnVzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWNvbW1vbiA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1jb25maWctZ3RrID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWRlc2t0b3AgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtcGFuZWwgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtcGFuZWwtMiA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC10aGVtZXMtZXh0cmEgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGVybWluYWwgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtd20gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtd20tMiA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1zZXR0aW5ncy1kYWVtb24gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tc2NyZWVuc2hvdCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1saWJmYWtla2V5ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW9wcm9maWxldWkgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4temF1cnVzZCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1saWJvd2wtYXYgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tb3dsLXZpZGVvID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXBzcGxhc2ggPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZXhtYXAtY29uc29sZSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1ndGstc2F0by1lbmdpbmUgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGhlbWUtc2F0byA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC10aGVtZS1zYXRvLTIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tc2F0by1pY29uLXRoZW1lID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWRlc2t0b3Atc2F0byA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1vaC1wdXp6bGVzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWxpYm93bCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1hcHBsZXQtbGlnaHQgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZnN0ZXN0cyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi14dmlkZW8tdGVzdHMgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tY2x1dHRlciA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1jbHV0dGVyLWdzdCA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1nYWt1ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWd5cHN5ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWFhaW5hID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWNsdXR0ZXItY2Fpcm8gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tdGFibGUgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbGlibWF0Y2hib3ggPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tdGFza3MgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tb2Zvbm8gPz0gIiR7QVVUT1JFVn0iCisKK1NSQ1JFVl9wbi1kcmkycHJvdG8gPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9kcmkycHJvdG8gPz0gIjEuOTkuMStnaXQlIgorU1JDUkVWX3BuLWxpYmRybSA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX2xpYmRybSA/PSAiMi40LjArZ2l0JSIKK1NSQ1JFVl9wbi1saWJ4Y2IgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9saWJ4Y2IgPz0gIjEuMS45MC4xK2dpdHIlIgorU1JDUkVWX3BuLWxpYi1wcm90byA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hjYi1wcm90byA/PSAiMS4yK2dpdHIlIgorU1JDUkVWX3BuLWxpYnhjYi1zZGsgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9saWJ4Y2Itc2RrID89ICIxLjEuOTAuMStnaXRyJSIKK1NSQ1JFVl9wbi14Zjg2LWlucHV0LWV2ZGV2ID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05feGY4Ni1pbnB1dC1ldmRldiA/PSAiMi4wLjQiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1tb3VzZSA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hmODYtaW5wdXQtbW91c2UgPz0gIjEuMy4wK2dpdCUiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1rZXlib2FyZCA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hmODYtaW5wdXQta2V5Ym9hcmQgPz0gIjEuMy4xK2dpdCUiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Zjg2LWlucHV0LXN5bmFwdGljcyA/PSAiMC4xNS4yK2dpdCUiCisKKyNTUkNEQVRFX29wcm9maWxlID89ICIke0RBVEV9IgorCitQUkVGRVJSRURfVkVSU0lPTl9vcHJvZmlsZSA/PSAiMC45LjQrY3ZzJHtTUkNEQVRFX29wcm9maWxlfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktYmxlZWRpbmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWJsZWVkaW5nLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzZTA0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWJsZWVkaW5nLmNvbmYKQEAgLTAsMCArMSwxMSBAQAorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYi0yLjAgPz0gIjIuMTcuNCIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWItMi4wLW5hdGl2ZSA/PSAiMi4xNy40IgorUFJFRkVSUkVEX1ZFUlNJT05fYXRrID89ICIxLjIyLjAiCitQUkVGRVJSRURfVkVSU0lPTl9wYW5nbyA/PSAiMS4yMS4yIgorUFJFRkVSUkVEX1ZFUlNJT05fZ3RrKyA/PSAiMi4xMy4zIgorCityZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jCityZXF1aXJlIGNvbmYvZGlzdHJvL3Bva3kuY29uZgorCitESVNUUk8gPSAicG9reS1ibGVlZGluZyIKK0RJU1RST09WRVJSSURFUyA9ICJwb2t5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktbHNiLmNvbmYgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1sc2IuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJiZTgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktbHNiLmNvbmYKQEAgLTAsMCArMSwxNSBAQAorCityZXF1aXJlIGNvbmYvZGlzdHJvL3Bva3kuY29uZgorcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYworCitESVNUUk8gPSAicG9reS1sc2IiCitESVNUUk9PVkVSUklERVMgPSAicG9reTpsaW51eHN0ZGJhc2UiCisKK0RJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHBhbSBsYXJnZWZpbGUgb3BlbmdsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGlieDExID0gImxpYngxMSIKKworIyBFbnN1cmUgdGhlIGtlcm5lbCBuZnMgc2VydmVyIGlzIGVuYWJsZWQKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcG4tbGludXgteW9jdG8gPSAiIGZlYXR1cmVzL25mc2QvbmZzZC1lbmFibGUuc2NjIgorCisjIFVzZSB0aGUgTFRTSSBLZXJuZWwgZm9yIExTQiBUZXN0aW5nCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19saW51eHN0ZGJhc2UgPz0gIjMuMTQlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjI3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS10aW55LmNvbmYKQEAgLTAsMCArMSwxNDQgQEAKKyMgRGlzdHJpYnV0aW9uIGRlZmluaXRpb24gZm9yOiBwb2t5LXRpbnkKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBhcyBkZXNjcmliZWQgaW4KKyMgLi4vbWV0YS9DT1BZSU5HLk1JVC4KKyMKKyMgUG9reS10aW55IGlzIGludGVuZGVkIHRvIGRlZmluZSBhIHRpbnkgTGludXggc3lzdGVtIGNvbXByaXNlZCBvZiBhCisjIExpbnV4IGtlcm5lbCB0YWlsb3JlZCB0byBzdXBwb3J0IGVhY2ggc3BlY2lmaWMgTUFDSElORSBhbmQgYnVzeWJveC4KKyMgUG9reS10aW55IHNldHMgc29tZSBiYXNpYyBwb2xpY3kgdG8gZW5zdXJlIGEgdXNhYmxlIHN5c3RlbSB3aGlsZSBzdGlsbAorIyBrZWVwaW5nIHRoZSByb290ZnMgYW5kIGtlcm5lbCBpbWFnZSBhcyBzbWFsbCBhcyBwb3NzaWJsZS4KKyMKKyMgVGhlIHBvbGljaWVzIGRlZmluZWQgYXJlIGludGVuZGVkIHRvIG1lZXQgdGhlIGZvbGxvd2luZyBnb2FsczoKKyMgbyBTZXJpYWwgY29uc29sZXMgb25seSAobm8gZnJhbWVidWZmZXIgb3IgVkdBIGNvbnNvbGUpCisjIG8gQmFzaWMgc3VwcG9ydCBmb3IgSVBWNCBuZXR3b3JraW5nCisjIG8gU2luZ2xlIHVzZXIgYXNoIHNoZWxsCisjIG8gU3RhdGljIGltYWdlcyAobm8gc3VwcG9ydCBmb3IgYWRkaW5nIHBhY2thZ2VzIG9yIGxpYnJhcmllcyBsYXRlcikKKyMgbyBSZWFkLW9ubHkgb3IgUkFNRlMgcm9vdCBmaWxlc3lzdGVtCisjIG8gQ29tYmluZWQgTGludXgga2VybmVsICsgcm9vdGZzIGluIHVuZGVyIDRNQgorIyBvIEFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBiZXR3ZWVuIGVnbGliYyBvciB1Y2xpYmMgd2l0aCB0aGUgVENMSUJDIHZhcmlhYmxlCisjCisjIFRoaXMgaXMgY3VycmVudGx5IGEgcGFydGlhbCBkZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIHRhc2tzIHJlbWFpbjoKKyMgWyBdIEludGVncmF0ZSBsaW51eC15b2N0by10aW55IGt0eXBlIGludG8gbGludXgteW9jdG8KKyMgWyBdIERlZmluZSBsaW51eC15b2N0by10aW55IGNvbmZpZ3MgZm9yIGFsbCBzdXBwb3J0ZWQgQlNQcworIyBbIF0gRHJvcCBsZGNvbmZpZyBmcm9tIHRoZSBpbnN0YWxsYXRpb24KKyMgWyBdIE1vZGlmeSB0aGUgcnVucWVtdSBzY3JpcHRzIHRvIHdvcmsgd2l0aCBleHQyIHBhcmFtZXRlcjoKKyMgICAgIHJ1bnFlbXUgcWVtdXg4NiBxZW11cGFyYW1zPSItbm9ncmFwaGljIiBib290cGFyYW1zPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PTA4MDAiIAorIyBbIF0gTW9kaWZ5IGJ1c3lib3ggdG8gYWxsb3cgZm9yIERJU1RST19GRUFUVVJFUy1saWtlIGNvbmZpcnVyYXRpb24KKworcmVxdWlyZSBjb25mL2Rpc3Ryby9wb2t5LmNvbmYKK0RJU1RSTyA9ICJwb2t5LXRpbnkiCisKKyMgRklYTUU6IGNvbnNpZGVyIGFkZGluZyBhIG5ldyAidGlueSIgZmVhdHVyZQorI0RJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHRpbnkiCisKKyMgRGlzdHJvIGNvbmZpZyBpcyBldmFsdWF0ZWQgYWZ0ZXIgdGhlIG1hY2hpbmUgY29uZmlnLCBzbyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkKKyMgc2V0IHRoZSBrZXJuZWwgcHJvdmlkZXIgdG8gb3ZlcnJpZGUgYSBtYWNoaW5lIGNvbmZpZy4KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0by10aW55IgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8tdGlueSA/PSAiMy4xOSUiCisKKyMgV2UgY2FuIHVzZSBwYWNrYWdlZ3JvdXAtY29yZS1ib290LCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgbmVlZCBhIG5ldyBwYWNrYWdlZ3JvdXAtY29yZS10aW55CisjUE9LWV9ERUZBVUxUX0VYVFJBX1JERVBFTkRTICs9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IgorIyBEcm9wIGtlcm5lbC1tb2R1bGUtYWYtcGFja2V0IGZyb20gUlJFQ09NTUVORFMKK1BPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EUyA9ICIiCisKKyMgRklYTUU6IHdoYXQgc2hvdWxkIHdlIGRvIHdpdGggdGhpcz8KK1RDTElCQ0FQUEVORCA9ICIiCisKKyMgRGlzYWJsZSB3aWRlIGNoYXIgc3VwcG9ydCBmb3IgbmN1cnNlcyBhcyB3ZSBkb24ndCBpbmNsdWRlIGl0IGluCisjIGluIHRoZSBMSUJDIGZlYXR1cmVzIGJlbG93LgorIyBMZWF2ZSBuYXRpdmUgZW5hYmxlIHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzCitFTkFCTEVfV0lERUMgPSAiZmFsc2UiCitFTkFCTEVfV0lERUNfY2xhc3MtbmF0aXZlID0gInRydWUiCisKKyMgRHJvcCBuYXRpdmUgbGFuZ3VhZ2Ugc3VwcG9ydC4gVGhpcyByZW1vdmVzIHRoZQorIyBlZ2xpYmMtPmJhc2gtPmdldHRleHQtPmxpYmMtcG9zaXgtY2xhbmctd2NoYXIgZGVwZW5kZW5jeS4KK1VTRV9OTFM9Im5vIgorCisjIFJlY29uZmlndXJlIGVnbGliYyBmb3IgYSBzbWFsbGVyIGluc3RhbGxhdGlvbgorIyBDb21tZW50IG91dCBhbnkgb2YgdGhlIGxpbmVzIGJlbG93IHRvIGRpc2FibGUgdGhlbSBpbiB0aGUgYnVpbGQKK0RJU1RST19GRUFUVVJFU19MSUJDX1RJTlkgPSAibGliYy1saWJtIGxpYmMtY3J5cHQiCitESVNUUk9fRkVBVFVSRVNfTElCQ19USU5ZX2FwcGVuZF94ODYtNjQgPSAiIGxpYmMtbGlibS1iaWciCisKKyMgUmVxdWlyZWQgZm9yICJ3aG8iCitESVNUUk9fRkVBVFVSRVNfTElCQ19NSU5JTUFMID0gImxpYmMtdXRtcCBsaWJjLXV0bXB4IGxpYmMtZ2V0bG9naW4iCitESVNUUk9fRkVBVFVSRVNfTElCQ19SRUdFWCA9ICJsaWJjLXBvc2l4LXJlZ2V4cCIKK0RJU1RST19GRUFUVVJFU19MSUJDX05FVCA9ICJsaWJjLWluZXQgbGliYy1uaXMiCisKK0RJU1RST19GRUFUVVJFU19MSUJDID0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfVElOWX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTElCQ19NSU5JTUFMfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke0RJU1RST19GRUFUVVJFU19MSUJDX1JFR0VYfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke0RJU1RST19GRUFUVVJFU19MSUJDX05FVH0gXAorICAgICAgICAgICAgICAgICAgICAgICAiCisKKyMgQ29tbWVudCBvdXQgYW55IG9mIHRoZSBsaW5lcyBiZWxvdyB0byBkaXNhYmxlIHRoZW0gaW4gdGhlIGJ1aWxkCisjIERJU1RST19GRUFUVVJFUyBvcHRpb25zOgorIyBhbHNhIGJsdWV0b290aCBleHQyIGlyZGEgcGNtY2lhIHVzYmdhZGdldCB1c2Job3N0IHdpZmkgbmZzIHplcm9jb25mIHBjaQorRElTVFJPX0ZFQVRVUkVTX1RJTlkgPSAicGNpIgorRElTVFJPX0ZFQVRVUkVTX05FVCA9ICJpcHY0IgorRElTVFJPX0ZFQVRVUkVTX1VTQiA9ICJ1c2Job3N0IgorI0RJU1RST19GRUFUVVJFU19VU0JHQURHRVQgPSAidXNiZ2FkZ2V0IgorI0RJU1RST19GRUFUVVJFU19XSUZJID0gIndpZmkiCisKK0RJU1RST19GRUFUVVJFUyA9ICIke0RJU1RST19GRUFUVVJFU19USU5ZfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTkVUfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfVVNCfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfVVNCR0FER0VUfSBcCisgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfV0lGSX0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IFwKKyAgICAgICAgICAgICAgICAgICIKKworIyBFbmFibGUgTEZTIC0gc2VlIGJ1ZyBZT0NUTyAjNTg2NQorRElTVFJPX0ZFQVRVUkVTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgbGFyZ2VmaWxlIgorCitESVNUUk9fRkVBVFVSRVNfY2xhc3MtbmF0aXZlID0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9ICR7UE9LWV9ERUZBVUxUX0RJU1RST19GRUFUVVJFU30iCisKKyMgVXNlIHRtcGRldmZzIGFuZCB0aGUgYnVzeWJveCBydW50aW1lIHNlcnZpY2VzCitWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAiIgorVklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXIgPSAiIgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA9ICJ0aW55LWluaXQiCitWSVJUVUFMLVJVTlRJTUVfa2V5bWFwcyA9ICIiCisKKyMgRklYTUU6IENvbnNpZGVyIGFkZGluZyAibW9kdWxlcyIgdG8gTUFDSElORV9GRUFUVVJFUyBhbmQgdXNpbmcgdGhhdCBpbgorIyBwYWNrYWdlZ3JvdXAtY29yZS1iYXNlIHRvIHNlbGVjdCBtb2R1dGlscy1pbml0c2NyaXB0cyBvciBub3QuICBTaW1pbGFyIHdpdGggIm5ldCIgYW5kCisjIG5ldGJhc2UuCisKKyMgQnkgZGVmYXVsdCB3ZSBvbmx5IHN1cHBvcnQgaW5pdHJhbWZzLiBXZSBkb24ndCBidWlsZCBsaXZlIGFzIHRoYXQKKyMgcHVsbHMgaW4gYSBsb3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB0aGUgbGl2ZSBpbWFnZSBhbmQgdGhlIGluc3RhbGxlciwgbGlrZQorIyB1ZGV2LCBncnViLCBldGMuICBUaGVzZSBwdWxsIGluIGdldHRleHQsIHdoaWNoIGZhaWxzIHRvIGJ1aWxkIHdpdGggd2lkZQorIyBjaGFyYWN0ZXIgc3VwcG9ydC4KK0lNQUdFX0ZTVFlQRVMgPSAiY3Bpby5neiIKKworIyBEcm9wIHY4NmQgZnJvbSBxZW11IGRlcGVuZGVuY3kgbGlzdCAod2Ugc3VwcG9ydCBzZXJpYWwpCisjIERyb3AgZ3J1YiBmcm9tIG1ldGEtaW50ZWwgQlNQcworIyBGSVhNRTogQSBkaWZmZXJlbnQgbWVjaGFuaXNtIGlzIG5lZWRlZCBoZXJlLiBXZSBjb3VsZCBkZWZpbmUgLXRpbnkKKyMgICAgICAgIHZhcmlhbnRzIG9mIGFsbCBjb21wYXRpYmxlIG1hY2hpbmVzLCBidXQgdGhhdCBsZWFkcyB0byBhIGxvdAorIyAgICAgICAgbW9yZSBtYWNoaW5lIGNvbmZpZ3MgdG8gbWFpbnRhaW4gbG9uZyB0ZXJtLgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgPSAiIgorCisjIFRoZSBtdHJhY2Ugc2NyaXB0IGluY2x1ZGVkIGJ5IGVnbGliYyBpcyBhIHBlcmwgc2NyaXB0LiBUaGlzIG1lYW5zIHRoZSBzeXN0ZW0KKyMgd2lsbCBidWlsZCBwZXJsIGluIGNhc2UgdGhpcyBwYWNrYWdlIGlzIGluc3RhbGxlZC4gU2luY2Ugd2UgZG9uJ3QgY2FyZSBhYm91dAorIyB0aGlzIHNjcmlwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRpbnksIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBmcm9tIGhlcmUuCitSREVQRU5EU18ke1BOfS1tdHJhY2VfcG4tZWdsaWJjID0gIiIKKworUE5CTEFDS0xJU1RbYnVpbGQtYXBwbGlhbmNlLWltYWdlXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1iYXNlXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1jbHV0dGVyXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1kaXJlY3RmYl0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1sc2JdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLWxzYi1kZXZdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLWxzYi1zZGtdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXJ0XSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1ydC1zZGtdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXNhdG9dID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXNhdG8tZGV2XSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1zYXRvLXNka10gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UteDExXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbcXQ0ZS1kZW1vLWltYWdlXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS13ZXN0b25dID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCisKKyMgRGlzYWJsZSBweXRob24gdXNhZ2UgaW4gb3BrZy11dGlscyBzaW5jZSBpdCB3b24ndCBidWlsZCB3aXRoIHRpbnkgY29uZmlnCitQQUNLQUdFQ09ORklHX3BuLW9wa2ctdXRpbHMgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3kuY29uZiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMTdmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKQEAgLTAsMCArMSwxMDQgQEAKK0RJU1RSTyA9ICJwb2t5IgorRElTVFJPX05BTUUgPSAiUG9reSAoWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgRGlzdHJvKSIKK0RJU1RST19WRVJTSU9OID0gIjEuOCtzbmFwc2hvdC0ke0RBVEV9IgorRElTVFJPX0NPREVOQU1FID0gIm1hc3RlciIKK1NES19WRU5ET1IgPSAiLXBva3lzZGsiCitTREtfVkVSU0lPTiA6PSAiJHtAJyR7RElTVFJPX1ZFUlNJT059Jy5yZXBsYWNlKCdzbmFwc2hvdC0ke0RBVEV9Jywnc25hcHNob3QnKX0iCisKK01BSU5UQUlORVIgPSAiUG9reSA8cG9reUB5b2N0b3Byb2plY3Qub3JnPiIKKworVEFSR0VUX1ZFTkRPUiA9ICItcG9reSIKKworTE9DQUxDT05GX1ZFUlNJT04gPSAiMSIKKworIyBPdmVycmlkZSB0aGVzZSBpbiBwb2t5IGJhc2VkIGRpc3Ryb3MKK1BPS1lfREVGQVVMVF9ESVNUUk9fRkVBVFVSRVMgPSAibGFyZ2VmaWxlIG9wZW5nbCBwdGVzdCBtdWx0aWFyY2ggd2F5bGFuZCIKK1BPS1lfREVGQVVMVF9FWFRSQV9SREVQRU5EUyA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IgorUE9LWV9ERUZBVUxUX0VYVFJBX1JSRUNPTU1FTkRTID0gImtlcm5lbC1tb2R1bGUtYWYtcGFja2V0IgorCitESVNUUk9fRkVBVFVSRVMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9ICR7UE9LWV9ERUZBVUxUX0RJU1RST19GRUFUVVJFU30iCisKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXg4NiA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYtNjQgPz0gIjQuMSUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11YXJtID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHMgPz0gIjQuMSUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11bWlwczY0ID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdXBwYyA/PSAiNC4xJSIKKworU0RLX05BTUUgPSAiJHtESVNUUk99LSR7VENMSUJDfS0ke1NES19BUkNIfS0ke0lNQUdFX0JBU0VOQU1FfS0ke1RVTkVfUEtHQVJDSH0iCitTREtQQVRIID0gIi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IgorCitESVNUUk9fRVhUUkFfUkRFUEVORFMgKz0gIiAke1BPS1lfREVGQVVMVF9FWFRSQV9SREVQRU5EU30iCitESVNUUk9fRVhUUkFfUlJFQ09NTUVORFMgKz0gIiAke1BPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EU30iCisKK1BPS1lRRU1VREVQUyA9ICIke0BiYi51dGlscy5jb250YWlucygiSU5DT01QQVRJQkxFX0xJQ0VOU0UiLCAiR1BMLTMuMCIsICIiLCAicGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsIixkKX0iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVhcm0gPSAiICR7UE9LWVFFTVVERVBTfSIKK0RJU1RST19FWFRSQV9SREVQRU5EU19hcHBlbmRfcWVtdWFybTY0ID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVtaXBzID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVwcGMgPSAiICR7UE9LWVFFTVVERVBTfSIKK0RJU1RST19FWFRSQV9SREVQRU5EU19hcHBlbmRfcWVtdXg4NiA9ICIgJHtQT0tZUUVNVURFUFN9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11eDg2LTY0ID0gIiAke1BPS1lRRU1VREVQU30iCisKK1RDTElCQ0FQUEVORCA9ICIiCisKK1FFTVVfVEFSR0VUUyA/PSAiYXJtIGFhcmNoNjQgaTM4NiBtaXBzIG1pcHNlbCBtaXBzNjQgcHBjIHg4Nl82NCIKKyMgT3RoZXIgUUVNVV9UQVJHRVRTICJtaXBzNjRlbCBzaDQiCisKK1BSRU1JUlJPUlMgPz89ICJcCitienI6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorY3ZzOi8vLiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2dpdDovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitnaXRzbTovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraGc6Ly8uKi8uKiAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK29zYzovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitwNDovLy4qLy4qICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorc3ZuOi8vLiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIgorCitNSVJST1JTID0rICJcCitmdHA6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraHR0cDovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2h0dHBzOi8vLiovLiogICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiIKKworIyBUaGUgQ09OTkVDVElWSVRZX0NIRUNLX1VSSSdzIGFyZSB1c2VkIHRvIHRlc3Qgd2hldGhlciB3ZSBjYW4gc3VjY2VzZnVsbHkKKyMgZmV0Y2ggZnJvbSB0aGUgbmV0d29yayAoYW5kIHdhcm4geW91IGlmIG5vdCkuIFRvIGRpc2FibGUgdGhlIHRlc3Qgc2V0CisjIHRoZSB2YXJpYWJsZSB0byBiZSBlbXB0eS4KKyMgR2l0IGV4YW1wbGUgdXJsOiBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1maXJld2FsbC10ZXN0O3Byb3RvY29sPWdpdDtyZXY9bWFzdGVyCisKK0NPTk5FQ1RJVklUWV9DSEVDS19VUklTID89ICIgXAorICAgICAgICAgICAgIGh0dHBzOi8vZXVsYS1kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9pbmRleC5waHAgXAorICAgICAgICAgICAgIGh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3JlcG9ydC5jZ2kiCisKK1NBTklUWV9URVNURURfRElTVFJPUyA/PSAiIFwKKyAgICAgICAgICAgIHBva3ktMS43IFxuIFwKKyAgICAgICAgICAgIHBva3ktMS44IFxuIFwKKyAgICAgICAgICAgIFVidW50dS0xNC4wNCBcbiBcCisgICAgICAgICAgICBVYnVudHUtMTQuMTAgXG4gXAorICAgICAgICAgICAgVWJ1bnR1LTE1LjA0IFxuIFwKKyAgICAgICAgICAgIEZlZG9yYS0yMSBcbiBcCisgICAgICAgICAgICBDZW50T1MtNi4qIFxuIFwKKyAgICAgICAgICAgIENlbnRPUy03LiogXG4gXAorICAgICAgICAgICAgRGViaWFuLTcuKiBcbiBcCisgICAgICAgICAgICBEZWJpYW4tOC4qIFxuIFwKKyAgICAgICAgICAgIG9wZW5TVVNFLXByb2plY3QtMTMuMiBcbiBcCisgICAgICAgICAgICAiCisKKyMgRGVmYXVsdCBoYXNoIHBvbGljeSBmb3IgZGlzdHJvCitCQl9TSUdOQVRVUkVfSEFORExFUiA/PSAnT0VCYXNpY0hhc2gnCisjCisjIE9FTEFZT1VUX0FCSSBhbGxvd3MgdXMgdG8gbm90aWZ5IHVzZXJzIHdoZW4gdGhlIGZvcm1hdCBvZiBUTVBESVIgY2hhbmdlcyBpbiAKKyMgYW4gaW5jb21wYXRpYmxlIHdheS4gU3VjaCBjaGFuZ2VzIHNob3VsZCB1c3VhbGx5IGJlIGRldGFpbGVkIGluIHRoZSBjb21taXQKKyMgdGhhdCBicmVha3MgdGhlIGZvcm1hdCBhbmQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGlzY3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QgCisjIHdpdGggZ2VuZXJhbCBhZ3JlZW1lbnQgZnJvbSB0aGUgY29yZSB0ZWFtLgorIworT0VMQVlPVVRfQUJJID0gIjExIgorCisjIGFkZCBwb2t5IHNhbml0eSBiYmNsYXNzCitJTkhFUklUICs9ICJwb2t5LXNhbml0eSIKKworIyBRQSBjaGVjayBzZXR0aW5ncyAtIGEgbGl0dGxlIHN0cmljdGVyIHRoYW4gdGhlIE9FLUNvcmUgZGVmYXVsdHMKK1dBUk5fVE9fRVJST1JfUUEgPSAiYWxyZWFkeS1zdHJpcHBlZCBjb21waWxlLWhvc3QtcGF0aCBpbnN0YWxsLWhvc3QtcGF0aCBcCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC12cy1zaGlwcGVkIGxkZmxhZ3MgcG4tb3ZlcnJpZGVzIHJwYXRocyBzdGF0aWNkZXYgXAorICAgICAgICAgICAgICAgICAgICB1c2VsZXNzLXJwYXRocyIKK1dBUk5fUUFfcmVtb3ZlID0gIiR7V0FSTl9UT19FUlJPUl9RQX0iCitFUlJPUl9RQV9hcHBlbmQgPSAiICR7V0FSTl9UT19FUlJPUl9RQX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQyYjUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIID0uICIke0xBWUVSRElSfToiCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmJhcHBlbmQiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAieW9jdG8iCitCQkZJTEVfUEFUVEVSTl95b2N0byA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3lvY3RvID0gIjUiCisKKyMgVGhpcyBzaG91bGQgb25seSBiZSBpbmNyZW1lbnRlZCBvbiBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgd2lsbAorIyBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIG90aGVyIGxheWVycworTEFZRVJWRVJTSU9OX3lvY3RvID0gIjIiCisKK0xBWUVSREVQRU5EU195b2N0byA9ICJjb3JlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzEzNDlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUKQEAgLTAsMCArMSwyMzYgQEAKKyMKKyMgVGhpcyBmaWxlIGlzIHlvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBpcyB3aGVyZSBhbGwgbG9jYWwgdXNlciBzZXR0aW5ncworIyBhcmUgcGxhY2VkLiBUaGUgY29tbWVudHMgaW4gdGhpcyBmaWxlIGdpdmUgc29tZSBndWlkZSB0byB0aGUgb3B0aW9ucyBhIG5ldyB1c2VyCisjIHRvIHRoZSBzeXN0ZW0gbWlnaHQgd2FudCB0byBjaGFuZ2UgYnV0IHByZXR0eSBtdWNoIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4KKyMgYmUgc2V0IGluIHRoaXMgZmlsZS4gTW9yZSBhZHZlbnR1cm91cyB1c2VycyBjYW4gbG9vayBhdCBsb2NhbC5jb25mLmV4dGVuZGVkIAorIyB3aGljaCBjb250YWlucyBvdGhlciBleGFtcGxlcyBvZiBjb25maWd1cmF0aW9uIHdoaWNoIGNhbiBiZSBwbGFjZWQgaW4gdGhpcyBmaWxlCisjIGJ1dCBuZXcgdXNlcnMgbGlrZWx5IHdvbid0IG5lZWQgYW55IG9mIHRoZW0gaW5pdGlhbGx5LgorIworIyBMaW5lcyBzdGFydGluZyB3aXRoIHRoZSAnIycgY2hhcmFjdGVyIGFyZSBjb21tZW50ZWQgb3V0IGFuZCBpbiBzb21lIGNhc2VzIHRoZSAKKyMgZGVmYXVsdCB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGNvbW1lbnRzIHRvIHNob3cgcGVvcGxlIGV4YW1wbGUgc3ludGF4LiBFbmFibGluZworIyB0aGUgb3B0aW9uIGlzIGEgcXVlc3Rpb24gb2YgcmVtb3ZpbmcgdGhlICMgY2hhcmFjdGVyIGFuZCBtYWtpbmcgYW55IGNoYW5nZSB0byB0aGUKKyMgdmFyaWFibGUgYXMgcmVxdWlyZWQuCisKKyMKKyMgTWFjaGluZSBTZWxlY3Rpb24KKyMKKyMgWW91IG5lZWQgdG8gc2VsZWN0IGEgc3BlY2lmaWMgbWFjaGluZSB0byB0YXJnZXQgdGhlIGJ1aWxkIHdpdGguIFRoZXJlIGFyZSBhIHNlbGVjdGlvbgorIyBvZiBlbXVsYXRlZCBtYWNoaW5lcyBhdmFpbGFibGUgd2hpY2ggY2FuIGJvb3QgYW5kIHJ1biBpbiB0aGUgUUVNVSBlbXVsYXRvcjoKKyMKKyNNQUNISU5FID89ICJxZW11YXJtIgorI01BQ0hJTkUgPz0gInFlbXVhcm02NCIKKyNNQUNISU5FID89ICJxZW11bWlwcyIKKyNNQUNISU5FID89ICJxZW11cHBjIgorI01BQ0hJTkUgPz0gInFlbXV4ODYiCisjTUFDSElORSA/PSAicWVtdXg4Ni02NCIKKyMKKyMgVGhlcmUgYXJlIGFsc28gdGhlIGZvbGxvd2luZyBoYXJkd2FyZSBib2FyZCB0YXJnZXQgbWFjaGluZXMgaW5jbHVkZWQgZm9yIAorIyBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzOgorIworI01BQ0hJTkUgPz0gImJlYWdsZWJvbmUiCisjTUFDSElORSA/PSAiZ2VuZXJpY3g4NiIKKyNNQUNISU5FID89ICJnZW5lcmljeDg2LTY0IgorI01BQ0hJTkUgPz0gIm1wYzgzMTVlLXJkYiIKKyNNQUNISU5FID89ICJlZGdlcm91dGVyIgorIworIyBUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFjaGluZSB0byBiZSBxZW11eDg2IGlmIG5vIG90aGVyIG1hY2hpbmUgaXMgc2VsZWN0ZWQ6CitNQUNISU5FID8/PSAicWVtdXg4NiIKKworIworIyBXaGVyZSB0byBwbGFjZSBkb3dubG9hZHMKKyMKKyMgRHVyaW5nIGEgZmlyc3QgYnVpbGQgdGhlIHN5c3RlbSB3aWxsIGRvd25sb2FkIG1hbnkgZGlmZmVyZW50IHNvdXJjZSBjb2RlIHRhcmJhbGxzCisjIGZyb20gdmFyaW91cyB1cHN0cmVhbSBwcm9qZWN0cy4gVGhpcyBjYW4gdGFrZSBhIHdoaWxlLCBwYXJ0aWN1bGFybHkgaWYgeW91ciBuZXR3b3JrCisjIGNvbm5lY3Rpb24gaXMgc2xvdy4gVGhlc2UgYXJlIGFsbCBzdG9yZWQgaW4gRExfRElSLiBXaGVuIHdpcGluZyBhbmQgcmVidWlsZGluZyB5b3UKKyMgY2FuIHByZXNlcnZlIHRoaXMgZGlyZWN0b3J5IHRvIHNwZWVkIHVwIHRoaXMgcGFydCBvZiBzdWJzZXF1ZW50IGJ1aWxkcy4gVGhpcyBkaXJlY3RvcnkKKyMgaXMgc2FmZSB0byBzaGFyZSBiZXR3ZWVuIG11bHRpcGxlIGJ1aWxkcyBvbiB0aGUgc2FtZSBtYWNoaW5lIHRvby4KKyMKKyMgVGhlIGRlZmF1bHQgaXMgYSBkb3dubG9hZHMgZGlyZWN0b3J5IHVuZGVyIFRPUERJUiB3aGljaCBpcyB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIworI0RMX0RJUiA/PSAiJHtUT1BESVJ9L2Rvd25sb2FkcyIKKworIworIyBXaGVyZSB0byBwbGFjZSBzaGFyZWQtc3RhdGUgZmlsZXMKKyMKKyMgQml0QmFrZSBoYXMgdGhlIGNhcGFiaWxpdHkgdG8gYWNjZWxlcmF0ZSBidWlsZHMgYmFzZWQgb24gcHJldmlvdXNseSBidWlsdCBvdXRwdXQuCisjIFRoaXMgaXMgZG9uZSB1c2luZyAic2hhcmVkIHN0YXRlIiBmaWxlcyB3aGljaCBjYW4gYmUgdGhvdWdodCBvZiBhcyBjYWNoZSBvYmplY3RzCisjIGFuZCB0aGlzIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXJlIHRob3NlIGZpbGVzIGFyZSBwbGFjZWQuCisjCisjIFlvdSBjYW4gd2lwZSBvdXQgVE1QRElSIGxlYXZpbmcgdGhpcyBkaXJlY3RvcnkgaW50YWN0IGFuZCB0aGUgYnVpbGQgd291bGQgcmVnZW5lcmF0ZQorIyBmcm9tIHRoZXNlIGZpbGVzIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBjb25maWd1cmF0aW9uLiBJZiBjaGFuZ2VzIHdlcmUgbWFkZQorIyB0byB0aGUgY29uZmlndXJhdGlvbiwgb25seSBzaGFyZWQgc3RhdGUgZmlsZXMgd2hlcmUgdGhlIHN0YXRlIHdhcyBzdGlsbCB2YWxpZCB3b3VsZAorIyBiZSB1c2VkIChkb25lIHVzaW5nIGNoZWNrc3VtcykuCisjCisjIFRoZSBkZWZhdWx0IGlzIGEgc3N0YXRlLWNhY2hlIGRpcmVjdG9yeSB1bmRlciBUT1BESVIuCisjCisjU1NUQVRFX0RJUiA/PSAiJHtUT1BESVJ9L3NzdGF0ZS1jYWNoZSIKKworIworIyBXaGVyZSB0byBwbGFjZSB0aGUgYnVpbGQgb3V0cHV0CisjCisjIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGVyZSB0aGUgYnVsayBvZiB0aGUgYnVpbGRpbmcgd29yayBzaG91bGQgYmUgZG9uZSBhbmQKKyMgd2hlcmUgQml0QmFrZSBzaG91bGQgcGxhY2UgaXRzIHRlbXBvcmFyeSBmaWxlcyBhbmQgb3V0cHV0LiBLZWVwIGluIG1pbmQgdGhhdAorIyB0aGlzIGluY2x1ZGVzIHRoZSBleHRyYWN0aW9uIGFuZCBjb21waWxhdGlvbiBvZiBtYW55IGFwcGxpY2F0aW9ucyBhbmQgdGhlIHRvb2xjaGFpbgorIyB3aGljaCBjYW4gdXNlIEdpZ2FieXRlcyBvZiBoYXJkIGRpc2sgc3BhY2UuCisjCisjIFRoZSBkZWZhdWx0IGlzIGEgdG1wIGRpcmVjdG9yeSB1bmRlciBUT1BESVIuCisjCisjVE1QRElSID0gIiR7VE9QRElSfS90bXAiCisKKyMKKyMgRGVmYXVsdCBwb2xpY3kgY29uZmlnCisjCisjIFRoZSBkaXN0cmlidXRpb24gc2V0dGluZyBjb250cm9scyB3aGljaCBwb2xpY3kgc2V0dGluZ3MgYXJlIHVzZWQgYXMgZGVmYXVsdHMuCisjIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZpbmUgZm9yIGdlbmVyYWwgWW9jdG8gcHJvamVjdCB1c2UsIGF0IGxlYXN0IGluaXRpYWxseS4KKyMgVWx0aW1hdGVseSB3aGVuIGNyZWF0aW5nIGN1c3RvbSBwb2xpY3ksIHBlb3BsZSB3aWxsIGxpa2VseSBlbmQgdXAgc3ViY2xhc3NpbmcgCisjIHRoZXNlIGRlZmF1bHRzLgorIworRElTVFJPID89ICJwb2t5IgorIyBBcyBhbiBleGFtcGxlIG9mIGEgc3ViY2xhc3MgdGhlcmUgaXMgYSAiYmxlZWRpbmciIGVkZ2UgcG9saWN5IGNvbmZpZ3VyYXRpb24KKyMgd2hlcmUgbWFueSB2ZXJzaW9ucyBhcmUgc2V0IHRvIHRoZSBhYnNvbHV0ZSBsYXRlc3QgY29kZSBmcm9tIHRoZSB1cHN0cmVhbSAKKyMgc291cmNlIGNvbnRyb2wgc3lzdGVtcy4gVGhpcyBpcyBqdXN0IG1lbnRpb25lZCBoZXJlIGFzIGFuIGV4YW1wbGUsIGl0cyBub3QKKyMgdXNlZnVsIHRvIG1vc3QgbmV3IHVzZXJzLgorIyBESVNUUk8gPz0gInBva3ktYmxlZWRpbmciCisKKyMKKyMgUGFja2FnZSBNYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24KKyMKKyMgVGhpcyB2YXJpYWJsZSBsaXN0cyB3aGljaCBwYWNrYWdpbmcgZm9ybWF0cyB0byBlbmFibGUuIE11bHRpcGxlIHBhY2thZ2UgYmFja2VuZHMgCisjIGNhbiBiZSBlbmFibGVkIGF0IG9uY2UgYW5kIHRoZSBmaXJzdCBpdGVtIGxpc3RlZCBpbiB0aGUgdmFyaWFibGUgd2lsbCBiZSB1c2VkIAorIyB0byBnZW5lcmF0ZSB0aGUgcm9vdCBmaWxlc3lzdGVtcy4KKyMgT3B0aW9ucyBhcmU6CisjICAtICdwYWNrYWdlX2RlYicgZm9yIGRlYmlhbiBzdHlsZSBkZWIgZmlsZXMKKyMgIC0gJ3BhY2thZ2VfaXBrJyBmb3IgaXBrIGZpbGVzIGFyZSB1c2VkIGJ5IG9wa2cgKGEgZGViaWFuIHN0eWxlIGVtYmVkZGVkIHBhY2thZ2UgbWFuYWdlcikKKyMgIC0gJ3BhY2thZ2VfcnBtJyBmb3IgcnBtIHN0eWxlIHBhY2thZ2VzCisjIEUuZy46IFBBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9ycG0gcGFja2FnZV9kZWIgcGFja2FnZV9pcGsiCisjIFdlIGRlZmF1bHQgdG8gcnBtOgorUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX3JwbSIKKworIworIyBTREsvQURUIHRhcmdldCBhcmNoaXRlY3R1cmUKKyMKKyMgVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSB0byBidWlsZCBTREsvQURUIGl0ZW1zIGZvciBhbmQgbWVhbnMKKyMgeW91IGNhbiBidWlsZCB0aGUgU0RLIHBhY2thZ2VzIGZvciBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIG1hY2hpbmUgeW91IGFyZSAKKyMgcnVubmluZyB0aGUgYnVpbGQgb24gKGkuZS4gYnVpbGRpbmcgaTY4NiBwYWNrYWdlcyBvbiBhbiB4ODZfNjQgaG9zdCkuCisjIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGk2ODYgYW5kIHg4Nl82NAorI1NES01BQ0hJTkUgPz0gImk2ODYiCisKKyMKKyMgRXh0cmEgaW1hZ2UgY29uZmlndXJhdGlvbiBkZWZhdWx0cworIworIyBUaGUgRVhUUkFfSU1BR0VfRkVBVFVSRVMgdmFyaWFibGUgYWxsb3dzIGV4dHJhIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgCisjIGltYWdlcy4gU29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSBhZGRlZCB0byBjZXJ0YWluIGltYWdlIHR5cGVzIGF1dG9tYXRpY2FsbHkuIFRoZQorIyB2YXJpYWJsZSBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisjICAiZGJnLXBrZ3MiICAgICAgIC0gYWRkIC1kYmcgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAoYWRkcyBzeW1ib2wgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy9wcm9maWxpbmcpCisjICAiZGV2LXBrZ3MiICAgICAgIC0gYWRkIC1kZXYgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAodXNlZnVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AgYWdhaW5zdCBsaWJzIGluIHRoZSBpbWFnZSkKKyMgICJwdGVzdC1wa2dzIiAgICAgLSBhZGQgLXB0ZXN0IHBhY2thZ2VzIGZvciBhbGwgcHRlc3QtZW5hYmxlZCBwYWNrYWdlcworIyAgICAgICAgICAgICAgICAgICAgICh1c2VmdWwgaWYgeW91IHdhbnQgdG8gcnVuIHRoZSBwYWNrYWdlIHRlc3Qgc3VpdGVzKQorIyAgInRvb2xzLXNkayIgICAgICAtIGFkZCBkZXZlbG9wbWVudCB0b29scyAoZ2NjLCBtYWtlLCBwa2djb25maWcgZXRjLikKKyMgICJ0b29scy1kZWJ1ZyIgICAgLSBhZGQgZGVidWdnaW5nIHRvb2xzIChnZGIsIHN0cmFjZSkKKyMgICJlY2xpcHNlLWRlYnVnIiAgLSBhZGQgRWNsaXBzZSByZW1vdGUgZGVidWdnaW5nIHN1cHBvcnQKKyMgICJ0b29scy1wcm9maWxlIiAgLSBhZGQgcHJvZmlsaW5nIHRvb2xzIChvcHJvZmlsZSwgZXhtYXAsIGx0dG5nLCB2YWxncmluZCkKKyMgICJ0b29scy10ZXN0YXBwcyIgLSBhZGQgdXNlZnVsIHRlc3RpbmcgdG9vbHMgKHRzX3ByaW50LCBhcGxheSwgYXJlY29yZCBldGMuKQorIyAgImRlYnVnLXR3ZWFrcyIgICAtIG1ha2UgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50CisjICAgICAgICAgICAgICAgICAgICAgZS5nLiBzc2ggcm9vdCBhY2Nlc3MgaGFzIGEgYmxhbmsgcGFzc3dvcmQKKyMgVGhlcmUgYXJlIG90aGVyIGFwcGxpY2F0aW9uIHRhcmdldHMgdGhhdCBjYW4gYmUgdXNlZCBoZXJlIHRvbywgc2VlCisjIG1ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGFuZCBtZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGZvciBtb3JlIGRldGFpbHMuCisjIFdlIGRlZmF1bHQgdG8gZW5hYmxpbmcgdGhlIGRlYnVnZ2luZyB0d2Vha3MuCitFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJkZWJ1Zy10d2Vha3MiCisKKyMKKyMgQWRkaXRpb25hbCBpbWFnZSBmZWF0dXJlcworIworIyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHdoaWNoCisjIGVuYWJsZSBleHRyYSBmZWF0dXJlcy4gU29tZSBhdmFpbGFibGUgb3B0aW9ucyB3aGljaCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhpcyB2YXJpYWJsZSAKKyMgYXJlOgorIyAgIC0gJ2J1aWxkc3RhdHMnIGNvbGxlY3QgYnVpbGQgc3RhdGlzdGljcworIyAgIC0gJ2ltYWdlLW1rbGlicycgdG8gcmVkdWNlIHNoYXJlZCBsaWJyYXJ5IGZpbGVzIHNpemUgZm9yIGFuIGltYWdlCisjICAgLSAnaW1hZ2UtcHJlbGluaycgaW4gb3JkZXIgdG8gcHJlbGluayB0aGUgZmlsZXN5c3RlbSBpbWFnZQorIyAgIC0gJ2ltYWdlLXN3YWInIHRvIHBlcmZvcm0gaG9zdCBzeXN0ZW0gaW50cnVzaW9uIGRldGVjdGlvbgorIyBOT1RFOiBpZiBsaXN0aW5nIG1rbGlicyAmIHByZWxpbmsgYm90aCwgdGhlbiBtYWtlIHN1cmUgbWtsaWJzIGlzIGJlZm9yZSBwcmVsaW5rCisjIE5PVEU6IG1rbGlicyBhbHNvIG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBmb3IgYSBnaXZlbiBpbWFnZSwgc2VlIGxvY2FsLmNvbmYuZXh0ZW5kZWQKK1VTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyBpbWFnZS1ta2xpYnMgaW1hZ2UtcHJlbGluayIKKworIworIyBSdW50aW1lIHRlc3Rpbmcgb2YgaW1hZ2VzCisjCisjIFRoZSBidWlsZCBzeXN0ZW0gY2FuIHRlc3QgYm9vdGluZyB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHFlbXUgKGFuIGVtdWxhdG9yKQorIyBhZnRlciBhbnkgcm9vdCBmaWxlc3lzdGVtcyBhcmUgY3JlYXRlZCBhbmQgcnVuIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiBUbworIyBlbmFibGUgdGhpcyB1bmNvbW1lbnQgdGhpcyBsaW5lLiBTZWUgY2xhc3Nlcy90ZXN0aW1hZ2UoLWF1dG8pLmJiY2xhc3MgZm9yCisjIGZ1cnRoZXIgZGV0YWlscy4KKyNURVNUX0lNQUdFID0gIjEiCisjCisjIEludGVyYWN0aXZlIHNoZWxsIGNvbmZpZ3VyYXRpb24KKyMKKyMgVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoZSBzeXN0ZW0gbWF5IG5lZWQgaW5wdXQgZnJvbSB5b3UgYW5kIHRvIGRvIHRoaXMgaXQgCisjIGNhbiBsYXVuY2ggYW4gaW50ZXJhY3RpdmUgc2hlbGwuIEl0IG5lZWRzIHRvIGRvIHRoaXMgc2luY2UgdGhlIGJ1aWxkIGlzIAorIyBtdWx0aXRocmVhZGVkIGFuZCBuZWVkcyB0byBiZSBhYmxlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIHBhcmFsbGVsCisjIHByb2Nlc3MgbWF5IHJlcXVpcmUgdGhlIHVzZXIncyBhdHRlbnRpb24uIFRoZSBkZWZhdWx0IGlzIGl0ZXJhdGUgb3ZlciB0aGUgYXZhaWxhYmxlCisjIHRlcm1pbmFsIHR5cGVzIHRvIGZpbmQgb25lIHRoYXQgd29ya3MuCisjCisjIEV4YW1wbGVzIG9mIHRoZSBvY2Nhc2lvbnMgdGhpcyBtYXkgaGFwcGVuIGFyZSB3aGVuIHJlc29sdmluZyBwYXRjaGVzIHdoaWNoIGNhbm5vdAorIyBiZSBhcHBsaWVkLCB0byB1c2UgdGhlIGRldnNoZWxsIG9yIHRoZSBrZXJuZWwgbWVudWNvbmZpZworIworIyBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBhdXRvLCBnbm9tZSwgeGZjZSwgcnh2dCwgc2NyZWVuLCBrb25zb2xlIChLREUgMy54IG9ubHkpLCBub25lCisjIE5vdGU6IGN1cnJlbnRseSwgS29uc29sZSBzdXBwb3J0IG9ubHkgd29ya3MgZm9yIEtERSAzLnggZHVlIHRvIHRoZSB3YXkKKyMgbmV3ZXIgS29uc29sZSB2ZXJzaW9ucyBiZWhhdmUKKyNPRV9URVJNSU5BTCA9ICJhdXRvIgorIyBCeSBkZWZhdWx0IGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbiAodGFza3Mgd2lsbCBqdXN0IGZhaWwgaW5zdGVhZCk6CitQQVRDSFJFU09MVkUgPSAibm9vcCIKKworIworIyBEaXNrIFNwYWNlIE1vbml0b3JpbmcgZHVyaW5nIHRoZSBidWlsZAorIworIyBNb25pdG9yIHRoZSBkaXNrIHNwYWNlIGR1cmluZyB0aGUgYnVpbGQuIElmIHRoZXJlIGlzIGxlc3MgdGhhdCAxR0Igb2Ygc3BhY2Ugb3IgbGVzcworIyB0aGFuIDEwMEsgaW5vZGVzIGluIGFueSBrZXkgYnVpbGQgbG9jYXRpb24gKFRNUERJUiwgRExfRElSLCBTU1RBVEVfRElSKSwgZ3JhY2VmdWxseQorIyBzaHV0ZG93biB0aGUgYnVpbGQuIElmIHRoZXJlIGlzIGxlc3MgdGhhdCAxMDBNQiBvciAxSyBpbm9kZXMsIHBlcmZvcm0gYSBoYXJkIGFib3J0CisjIG9mIHRoZSBidWlsZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHJ1bm5pbmcgY29tcGxldGVseSBvdXQgb2Ygc3BhY2UgY2FuIGNvcnJ1cHQKKyMgZmlsZXMgYW5kIGRhbWFnZXMgdGhlIGJ1aWxkIGluIHdheXMgd2hpY2ggbWF5IG5vdCBiZSBlYXNpbHkgcmVjb3ZlcmFibGUuCisjIEl0J3MgbmVjZXNhcnkgdG8gbW9uaXRvciAvdG1wLCBpZiB0aGVyZSBpcyBubyBzcGFjZSBsZWZ0IHRoZSBidWlsZCB3aWxsIGZhaWwKKyMgd2l0aCB2ZXJ5IGV4b3RpYyBlcnJvcnMuCitCQl9ESVNLTU9OX0RJUlMgPSAiXAorICAgIFNUT1BUQVNLUywke1RNUERJUn0sMUcsMTAwSyBcCisgICAgU1RPUFRBU0tTLCR7RExfRElSfSwxRywxMDBLIFwKKyAgICBTVE9QVEFTS1MsJHtTU1RBVEVfRElSfSwxRywxMDBLIFwKKyAgICBTVE9QVEFTS1MsL3RtcCwxMDBNLDEwMEsgXAorICAgIEFCT1JULCR7VE1QRElSfSwxMDBNLDFLIFwKKyAgICBBQk9SVCwke0RMX0RJUn0sMTAwTSwxSyBcCisgICAgQUJPUlQsJHtTU1RBVEVfRElSfSwxMDBNLDFLIFwKKyAgICBBQk9SVCwvdG1wLDEwTSwxSyIKKworIworIyBTaGFyZWQtc3RhdGUgZmlsZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMKKyMKKyMgQXMgbWVudGlvbmVkIGFib3ZlLCBzaGFyZWQgc3RhdGUgZmlsZXMgYXJlIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyB3aGljaCBjYW4gCisjIHVzZWQgdG8gYWNjZWxlcmF0ZSBidWlsZCB0aW1lLiBUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc3lzdGVtCisjIHRvIHNlYXJjaCBvdGhlciBtaXJyb3IgbG9jYXRpb25zIGZvciB0aGVzZSBvYmplY3RzIGJlZm9yZSBpdCBidWlsZHMgdGhlIGRhdGEgaXRzZWxmLgorIworIyBUaGlzIGNhbiBiZSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5LCBvciBhIHJlbW90ZSB1cmwgc3VjaCBhcyBodHRwIG9yIGZ0cC4gVGhlc2UKKyMgd291bGQgY29udGFpbiB0aGUgc3N0YXRlLWNhY2hlIHJlc3VsdHMgZnJvbSBwcmV2aW91cyBidWlsZHMgKHBvc3NpYmx5IGZyb20gb3RoZXIgCisjIG1hY2hpbmVzKS4gVGhpcyB2YXJpYWJsZSB3b3JrcyBsaWtlIGZldGNoZXIgTUlSUk9SUy9QUkVNSVJST1JTIGFuZCBwb2ludHMgdG8gdGhlIAorIyBjYWNoZSBsb2NhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBzaGFyZWQgb2JqZWN0cy4KKyMgTk9URTogaWYgdGhlIG1pcnJvciB1c2VzIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBTU1RBVEVfRElSLCB5b3UgbmVlZCB0byBhZGQgUEFUSAorIyBhdCB0aGUgZW5kIGFzIHNob3duIGluIHRoZSBleGFtcGxlcyBiZWxvdy4gVGhpcyB3aWxsIGJlIHN1YnN0aXR1dGVkIHdpdGggdGhlCisjIGNvcnJlY3QgcGF0aCB3aXRoaW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisjU1NUQVRFX01JUlJPUlMgPz0gIlwKKyNmaWxlOi8vLiogaHR0cDovL3NvbWVzZXJ2ZXIudGxkL3NoYXJlL3NzdGF0ZS9QQVRIO2Rvd25sb2FkZmlsZW5hbWU9UEFUSCBcbiBcCisjZmlsZTovLy4qIGZpbGU6Ly8vc29tZS9sb2NhbC9kaXIvc3N0YXRlL1BBVEgiCisKKworIworIyBRZW11IGNvbmZpZ3VyYXRpb24KKyMKKyMgQnkgZGVmYXVsdCBxZW11IHdpbGwgYnVpbGQgd2l0aCBhIGJ1aWx0aW4gVk5DIHNlcnZlciB3aGVyZSBncmFwaGljYWwgb3V0cHV0IGNhbiBiZQorIyBzZWVuLiBUaGUgdHdvIGxpbmVzIGJlbG93IGVuYWJsZSB0aGUgU0RMIGJhY2tlbmQgdG9vLiBUaGlzIGFzc3VtZXMgdGhlcmUgaXMgYQorIyBsaWJzZGwgbGlicmFyeSBhdmFpbGFibGUgb24geW91ciBidWlsZCBzeXN0ZW0uCitQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1xZW11LW5hdGl2ZSA9ICIgc2RsIgorUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tbmF0aXZlc2RrLXFlbXUgPSAiIHNkbCIKK0FTU1VNRV9QUk9WSURFRCArPSAibGlic2RsLW5hdGl2ZSIKKworCisjIENPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvIGNoYW5nZXMgaW5jb21wYXRpYmx5IGFuZCBpcyB1c2VkIHRvCisjIHRyYWNrIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB3aGVuIGl0IHdhcyBnZW5lcmF0ZWQuIFRoaXMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGlmCisjIHRoaXMgZG9lc24ndCBtZWFuIGFueXRoaW5nIHRvIHlvdS4KK0NPTkZfVkVSU0lPTiA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RkMzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQKQEAgLTAsMCArMSwzNzQgQEAKKyMgQkJNQVNLIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZQorIyBjZXJ0YWluIHJlY2lwZXMuCisjQkJNQVNLID0gIiIKKworIworIyBQYXJhbGxlbGlzbSBPcHRpb25zCisjCisjIFRoZXNlIHR3byBvcHRpb25zIGNvbnRyb2wgaG93IG11Y2ggcGFyYWxsZWxpc20gQml0QmFrZSBzaG91bGQgdXNlLiBUaGUgZmlyc3QKKyMgb3B0aW9uIGRldGVybWluZXMgaG93IG1hbnkgdGFza3MgYml0YmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsOgorIworI0JCX05VTUJFUl9USFJFQURTID89ICI0IgorIworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKKyNCQl9OVU1CRVJfVEhSRUFEUyA/PSAiJHtAb2UudXRpbHMuY3B1X2NvdW50KCl9IgorIworIyBUaGUgc2Vjb25kIG9wdGlvbiBjb250cm9scyBob3cgbWFueSBwcm9jZXNzZXMgbWFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsIHdoZW4KKyMgcnVubmluZyBjb21waWxlIHRhc2tzOgorIworI1BBUkFMTEVMX01BS0UgPz0gIi1qIDQiCisjCisjIERlZmF1bHQgdG8gc2V0dGluZyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGNwdSBjb3VudAorI1BBUkFMTEVMX01BS0UgPz0gIi1qICR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKyMKKyMgRm9yIGEgcXVhZC1jb3JlIG1hY2hpbmUsIEJCX05VTUJFUl9USFJFQURTID0gIjQiLCBQQVJBTExFTF9NQUtFID0gIi1qIDQiIHdvdWxkCisjIGJlIGFwcHJvcHJpYXRlIGZvciBleGFtcGxlLgorCisKKyMgZ2xpYmMgY29uZmlndXJhYmlsaXR5IGlzIHVzZWQgdG8gcmVkdWNlIG1pbmltYWwgaW1hZ2UncyBzaXplLgorIyB0aGUgYWxsIHN1cHBvcnRlZCBnbGliYyBvcHRpb25zIGFyZSBsaXN0ZWQgaW4gRElTVFJPX0ZFQVRVUkVTX0xJQkMKKyMgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFVuY29tbWVudCBhbmQgY29weSB0aGUgRElTVFJPX0ZFQVRVUkVTX0xJQkMKKyMgYW5kIERJU1RST19GRUFUVVJFUyBkZWZpbml0aW9ucyB0byBsb2NhbC5jb25mIHRvIGVuYWJsZSB0aGUgb3B0aW9ucy4KKyNESVNUUk9fRkVBVFVSRVNfTElCQyA9ICJpcHY2IGxpYmMtYmFja3RyYWNlIGxpYmMtYmlnLW1hY3JvcyBsaWJjLWJzZCBsaWJjLWN4eC10ZXN0cyBsaWJjLWNhdGdldHMgbGliYy1jaGFyc2V0cyBsaWJjLWNyeXB0IFwKKyMgICAgICAgICAgICAgICBsaWJjLWNyeXB0LXVmYyBsaWJjLWRiLWFsaWFzZXMgbGliYy1lbnZ6IGxpYmMtZmN2dCBsaWJjLWZtdG1zZyBsaWJjLWZzdGFiIGxpYmMtZnRyYXZlcnNlIFwKKyMgICAgICAgICAgICAgICBsaWJjLWdldGxvZ2luIGxpYmMtaWRuIGxpYmMtaW5ldCBsaWJjLWluZXQtYW5sIGxpYmMtbGlibSBsaWJjLWxvY2FsZXMgbGliYy1sb2NhbGUtY29kZSBcCisjICAgICAgICAgICAgICAgbGliYy1tZW11c2FnZSBsaWJjLW5pcyBsaWJjLW5zc3dpdGNoIGxpYmMtcmNtZCBsaWJjLXJ0bGQtZGVidWcgbGliYy1zcGF3biBsaWJjLXN0cmVhbXMgbGliYy1zdW5ycGMgXAorIyAgICAgICAgICAgICAgIGxpYmMtdXRtcCBsaWJjLXV0bXB4IGxpYmMtd29yZGV4cCBsaWJjLXBvc2l4LWNsYW5nLXdjaGFyIGxpYmMtcG9zaXgtcmVnZXhwIGxpYmMtcG9zaXgtcmVnZXhwLWdsaWJjIFwKKyMgICAgICAgICAgICAgICBsaWJjLXBvc2l4LXdjaGFyLWlvIgorCisjRElTVFJPX0ZFQVRVUkVTID0gImFsc2EgYmx1ZXRvb3RoIGV4dDIgaXJkYSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSBuZnMgemVyb2NvbmYgcGNpICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IgorCisjIElmIHlvdSB3YW50IHRvIGdldCBhbiBpbWFnZSBiYXNlZCBvbiBkaXJlY3RmYiB3aXRob3V0IHgxMSwgUGxlYXNlIGNvcHkgdGhpcyB2YXJpYWJsZSB0byBidWlsZC9jb25mL2xvY2FsLmNvbmYKKyNESVNUUk9fRkVBVFVSRVMgPSAiYWxzYSBhcmdwIGJsdWV0b290aCBleHQyIGlyZGEgbGFyZ2VmaWxlIHBjbWNpYSB1c2JnYWRnZXQgdXNiaG9zdCB3aWZpIHhhdHRyIG5mcyB6ZXJvY29uZiBwY2kgM2cgZGlyZWN0ZmIgJHtESVNUUk9fRkVBVFVSRVNfTElCQ30iCisKKyMgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiBjb250cm9scyB0aGUgZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlCisjIHBhY2thZ2VzIGF0IGJ1aWxkIHRpbWUgdXNpbmcgcWVtdS1uYXRpdmUuIERpc2FibGluZyBpdCAoYnkgc2V0dGluZyBpdCB0byAwKQorIyB3aWxsIHNhdmUgc29tZSBidWlsZCB0aW1lIGF0IHRoZSBleHBlbnNlIG9mIGJyZWFraW5nIGkxOG4gb24gZGV2aWNlcyB3aXRoCisjIGxlc3MgdGhhbiAxMjhNQiBSQU0uCisjRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiA9ICIxIgorCisjIFNldCBHTElCQ19HRU5FUkFURV9MT0NBTEVTIHRvIHRoZSBsb2NhbGVzIHlvdSB3aXNoIHRvIGdlbmVyYXRlIHNob3VsZCB5b3Ugbm90CisjIHdpc2ggdG8gcGVyZm9ybSB0aGUgdGltZS1jb25zdW1pbmcgc3RlcCBvZiBnZW5lcmF0aW5nIGFsbCBMSUJDIGxvY2FsZXMuCisjIE5PVEU6IElmIHJlbW92aW5nIGVuX1VTLlVURi04IHlvdSB3aWxsIGFsc28gbmVlZCB0byB1bmNvbW1lbnQsIGFuZCBzZXQKKyMgYXBwcm9wcmlhdGUgdmFsdWUgZm9yIElNQUdFX0xJTkdVQVMuCisjIFdBUk5JTkc6IHRoaXMgbWF5IGJyZWFrIGxvY2FsaXNhdGlvbiEKKyNHTElCQ19HRU5FUkFURV9MT0NBTEVTID0gImVuX0dCLlVURi04IGVuX1VTLlVURi04IgorI0lNQUdFX0xJTkdVQVMgPz0gImVuLWdiIgorCisjIFRoZSBmb2xsb3dpbmcgYXJlIHVzZWQgdG8gY29udHJvbCBvcHRpb25zIHJlbGF0ZWQgdG8gZGVidWdnaW5nLgorIworIyBVbmNvbW1lbnQgdGhpcyB0byBjaGFuZ2UgdGhlIG9wdGltaXphdGlvbiB0byBtYWtlIGRlYnVnZ2luZyBlYXNlciwgYXQgdGhlIAorIyBwb3NzaWJsZSBjb3N0IG9mIHBlcmZvcm1hbmNlLgorIyBERUJVR19CVUlMRCA9ICIxIgorIworIyBVbmNvbW1lbnQgdGhpcyB0byBkaXNhYmxlIHRoZSBzdHJpcHBpbmcgb2YgdGhlIGluc3RhbGxlZCBiaW5hcmllcworIyBJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKyMKKyMgVW5jb21tZW50IHRoaXMgdG8gZGlzYWJsZSB0aGUgc3BsaXQgb2YgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGludG8gLWRiZyBmaWxlcworIyBJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKyMKKyMgV2hlbiBzcGxpdHRpbmcgZGVidWcgaW5mb3JtYXRpb24sIHRoZSBmb2xsb3dpbmcgY29udHJvbHMgdGhlIHJlc3VsdHMgb2YgdGhlCisjIGZpbGUgc3BsaXR0aW5nLgorIworIyAgLmRlYnVnIChkZWZhdWx0KToKKyMgICAgV2hlbiBzcGxpdHRpbmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkIGludG8KKyMgICAgYSAuZGVidWcgZGlyZWN0b3J5IGluIHRoZSBzYW1lIGRpcm5hbWUgb2YgdGhlIGJpbmFyeSBwcm9kdWNlZDoKKyMgICAgICAvYmluL2ZvbyAtPiAvYmluLy5kZWJ1Zy9mb28KKyMKKyMgIGRlYnVnLWZpbGUtZGlyZWN0b3J5OgorIyAgICBXaGVuIHNwbGl0dGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24gd2lsbCBiZSBwbGFjZWQgaW50bworIyAgICBhIGNlbnRyYWwgZGVidWctZmlsZS1kaXJlY3RvcnksIC91c3IvbGliL2RlYnVnOgorIyAgICAgIC9iaW4vZm9vIC0+IC91c3IvbGliL2RlYnVnL2Jpbi9mb28uZGVidWcKKyMKKyMgICAgQW55IHNvdXJjZSBjb2RlIHJlZmVyZW5jZWQgaW4gdGhlIGRlYnVnIHN5bWJvbHMgd2lsbCBiZSBjb3BpZWQKKyMgICAgYW5kIG1hZGUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgL3Vzci9zcmMvZGVidWcgZGlyZWN0b3J5CisjCisjUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRSA9ICcuZGVidWcnCisjIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnZGVidWctZmlsZS1kaXJlY3RvcnknCisKKyMgVW5jb21tZW50IHRoZXNlIHRvIGJ1aWxkIGEgcGFja2FnZSBzdWNoIHRoYXQgeW91IGNhbiB1c2UgZ3Byb2YgdG8gcHJvZmlsZSBpdC4KKyMgTk9URTogVGhpcyB3aWxsIG9ubHkgd29yayB3aXRoICdsaW51eCcgdGFyZ2V0cywgbm90CisjICdsaW51eC11Y2xpYmMnLCBhcyB1Q2xpYmMgZG9lc24ndCBwcm92aWRlIHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0IGZpbGVzLiAgQWxzbywgZG9uJ3QgYnVpbGQgZ2xpYmMgaXRzZWxmIHdpdGggdGhlc2UKKyMgZmxhZ3MsIG9yIGl0J2xsIGZhaWwgdG8gYnVpbGQuCisjCisjIFBST0ZJTEVfT1BUSU1JWkFUSU9OID0gIi1wZyIKKyMgU0VMRUNURURfT1BUSU1JWkFUSU9OID0gIiR7UFJPRklMRV9PUFRJTUlaQVRJT059IgorIyBMREZMQUdTID0rICItcGciCisKKyMgVENNT0RFIGNvbnRyb2xzIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGdlbmVyYXRlZCBwYWNrYWdlcy9pbWFnZXMgYnkKKyMgdGVsbGluZyBwb2t5IHdoaWNoIHRvb2xjaGFpbiAncHJvZmlsZScgdG8gdXNlLgorIworIyBUaGUgZGVmYXVsdCBpcyAiZGVmYXVsdCIgd2hpY2ggdXNlcyB0aGUgaW50ZXJuYWwgdG9vbGNoYWluLiBXaXRoCisjIGFkZGl0aW9uYWwgbGF5ZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgdGhpcyB0byB1c2UgYSBwcmVjb21waWxlZAorIyBleHRlcm5hbCB0b29sY2hhaW4uIE9uZSBleGFtcGxlIGlzIHRoZSBTb3VyY2VyeSBHKysgVG9vbGNoYWluLCBzdXBwb3J0CisjIGZvciB3aGljaCBpcyBub3cgaW4gdGhlIHNlcGFyYXRlIG1ldGEtc291cmNlcnkgbGF5ZXI6CisjCisjICBodHRwOi8vZ2l0aHViLmNvbS9NZW50b3JFbWJlZGRlZC9tZXRhLXNvdXJjZXJ5LworIworIyBtZXRhLXNvdXJjZXJ5IGNhbiBiZSB1c2VkIGFzIGEgdGVtcGxhdGUgZm9yIGFkZGluZyBzdXBwb3J0IGZvciBvdGhlcgorIyBleHRlcm5hbCB0b29sY2hhaW5zLiBTZWUgdGhlIGxpbmsgYWJvdmUgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyMKKyMgVENNT0RFIHBvaW50cyB0aGUgc3lzdGVtIHRvIGEgZmlsZSBpbiBjb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS0ke1RDTU9ERX0uaW5jLAorIyBzbyBmb3IgbWV0YS1zb3VyY2VyeSB3aGljaCBoYXMgY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZXh0ZXJuYWwtc291cmNlcnkuaW5jCisjIHlvdSB3b3VsZCBzZXQgaXQgYXMgZm9sbG93czoKKyMKKyMgVENNT0RFID89ICJleHRlcm5hbC1zb3VyY2VyeSIKKworIyBta2xpYnMgbGlicmFyeSBzaXplIG9wdGltaXphdGlvbiBpcyBtb3JlIHVzZWZ1bCB0byBzbWFsbGVyIGltYWdlcywKKyMgYW5kIGxlc3MgdXNlZnVsIGZvciBiaWdnZXIgaW1hZ2VzLiBBbHNvIG1rbGlicyBsaWJyYXJ5IG9wdGltaXphdGlvbgorIyBjYW4gYnJlYWsgdGhlIEFCSSBjb21wYXRpYmlsaXR5LCBzbyBzaG91bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhlCisjIGltYWdlcyB3aGljaCBhcmUgdG8gYmUgZXh0ZW5kZWQgb3IgdXBncmFkZWQgbGF0ZXIuCisjVGhpcyBlbmFibGVkIG1rbGlicyBsaWJyYXJ5IHNpemUgb3B0aW1pemF0aW9uIGp1c3QgZm9yIHRoZSBzcGVjaWZpZWQgaW1hZ2UuCisjTUtMSUJTX09QVElNSVpFRF9JTUFHRVMgPz0gImNvcmUtaW1hZ2UtbWluaW1hbCIKKyNUaGlzIGVuYWJsZSBta2xpYnMgbGlicmFyeSBzaXplIG9wdGltaXphdGlvbiB3aWxsIGJlIGZvciBhbGwgdGhlIGltYWdlcy4KKyNNS0xJQlNfT1BUSU1JWkVEX0lNQUdFUyA/PSAiYWxsIgorCisjIFVuY29tbWVudCB0aGlzIGlmIHlvdXIgaG9zdCBkaXN0cmlidXRpb24gcHJvdmlkZXMgdGhlIGhlbHAybWFuIHRvb2wuCisjQVNTVU1FX1BST1ZJREVEICs9ICJoZWxwMm1hbi1uYXRpdmUiCisKKyMgVGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkgdXNlZCBieSBwc2V1ZG8gdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWNpcGUgc2hvdWxkCisjIGJ1aWxkIGJvdGggdGhlIDMyLWJpdCBhbmQgNjQtYml0IHdyYXBwZXIgbGlicmFyaWVzIG9uIGEgNjQtYml0IGJ1aWxkIHN5c3RlbS4KKyMKKyMgUHNldWRvIHdpbGwgYXR0ZW1wdCB0byBkZXRlcm1pbmUgaWYgYSAzMi1iaXQgd3JhcHBlciBpcyBuZWNlc3NhcnksIGJ1dAorIyBpdCBkb2Vzbid0IGFsd2F5cyBndWVzcyBwcm9wZXJseS4gIElmIHlvdSBoYXZlIDMyLWJpdCBleGVjdXRhYmxlcyBvbiAKKyMgeW91ciA2NC1iaXQgYnVpbGQgc3lzdGVtLCB5b3UgbGlrZWx5IHdhbnQgdG8gc2V0IHRoaXMgdG8gIjAiLCAKKyMgb3RoZXJ3aXNlIHlvdSBjb3VsZCBlbmQgdXAgd2l0aCBpbmNvcnJlY3QgZmlsZSBhdHRyaWJ1dGVzIG9uIHRoZSAKKyMgdGFyZ2V0IGZpbGVzeXN0ZW0uCisjCisjIERlZmF1bHQgaXMgdG8gbm90IGJ1aWxkIDMyIGJpdCBsaWJzIG9uIDY0IGJpdCBzeXN0ZW1zLCB1bmNvbW1lbnQgdGhpcworIyBpZiB5b3UgbmVlZCB0aGUgMzIgYml0cyBsaWJzCisjTk8zMkxJQlMgPSAiMCIKKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBlbmFibGUgbXVsdGlsaWIgYnVpbGRzCisjcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKKyNNVUxUSUxJQlMgPSAibXVsdGlsaWI6bGliMzIiCisjREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLWxpYjMyID0gIng4NiIKKworIyBTZXQgUlBNX1BSRUZFUl9FTEZfQVJDSCB0byBjb25maWd1cmUgcHJlZmVycmVkIEFCSSB3aGVuIHVzaW5nIHJwbSBwYWNrYWdpbmcKKyMgYmFja2VuZCB0byBnZW5lcmF0ZSBhIHJvb3RmcywgY2hvaWNlcyBhcmU6CisjIDE6IEVMRjMyIHdpbnMKKyMgMjogRUxGNjQgd2lucworIyA0OiBFTEY2NCBOMzIgd2lucyAoZm9yIG1pcHM2NCBvciBtaXBzNjRlbCBvbmx5KQorI1JQTV9QUkVGRVJfRUxGX0FSQ0ggPz0gIjIiCisKKyMgVGhlIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSBob3N0IGFuZCBwb3J0CisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIGVuYWJsZSBQUnNlcnZpY2UuCisjIFNldCBQUlNFUlZfSE9TVCB0byAnbG9jYWxob3N0OjAnIHRvIGF1dG9tYXRpY2FsbHkKKyMgc3RhcnQgbG9jYWwgUFJTZXJ2aWNlLgorIyBTZXQgdG8gb3RoZXIgdmFsdWVzIHRvIHVzZSByZW1vdGUgUFJTZXJ2aWNlLgorI1BSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorCisjIEFkZGl0aW9uYWwgaW1hZ2UgZ2VuZXJhdGlvbiBmZWF0dXJlcworIworIyBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBjbGFzc2VzIHRvIGltcG9ydCB0byB1c2UgaW4gdGhlIGdlbmVyYXRpb24gb2YgaW1hZ2VzCisjIGN1cnJlbnRseSBhbiBleGFtcGxlIGNsYXNzIGlzIGltYWdlX3R5cGVzX3Vib290CisjIElNQUdFX0NMQVNTRVMgPSAiIGltYWdlX3R5cGVzX3Vib290IgorCisjIEluY3JlbWVudGFsIHJwbSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgcm9vdGZzIHdvdWxkIGJlIHRvdGFsbHkgcmVtb3ZlZAorIyBhbmQgcmUtY3JlYXRlZCBpbiB0aGUgc2Vjb25kIGdlbmVyYXRpb24gYnkgZGVmYXVsdCwgYnV0IHdpdGgKKyMgSU5DX1JQTV9JTUFHRV9HRU4gPSAiMSIsIHRoZSBycG0gYmFzZWQgcm9vdGZzIHdvdWxkIGJlIGtlcHQsIGFuZCB3aWxsCisjIGRvIHVwZGF0ZShyZW1vdmUvYWRkIHNvbWUgcGtncykgb24gaXQuICBOT1RFOiBUaGlzIGlzIG5vdCBzdWdnZXN0ZWQKKyMgd2hlbiB5b3Ugd2FudCB0byBjcmVhdGUgYSBwcm9kdWN0aXZlIHJvb3RmcworI0lOQ19SUE1fSU1BR0VfR0VOID0gIjEiCisKKyMgVGhpcyBpcyBhIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCByZXF1aXJlIGEgY29tbWVyY2lhbCBsaWNlbnNlIHRvIHNoaXAKKyMgcHJvZHVjdC4gSWYgc2hpcHBlZCBhcyBwYXJ0IG9mIGFuIGltYWdlIHRoZXNlIHBhY2thZ2VzIG1heSBoYXZlCisjIGltcGxpY2F0aW9ucyBzbyB0aGV5IGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sCisjIHVuLWNvbW1lbnQgdGhlIGJlbG93IGFzIGFwcHJvcHJpYXRlLgorI0xJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LWZsdWVuZG8tbXAzIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2dzdC1vcGVubWF4IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2dzdC1wbHVnaW5zLXVnbHkgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbGFtZSBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVyY2lhbF9saWJtYWQgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbGlib214aWwgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbXBlZzJkZWMgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfcW1tcCIKKworCisjCisjIERpc2sgc3BhY2UgbW9uaXRvciwgdGFrZSBhY3Rpb24gd2hlbiB0aGUgZGlzayBzcGFjZSBvciB0aGUgYW1vdW50IG9mCisjIGlub2RlIGlzIHJ1bm5pbmcgbG93LCBpdCBpcyBlbmFibGVkIHdoZW4gQkJfRElTS01PTl9ESVJTIGlzIHNldC4KKyMKKyMgU2V0IHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBtb25pdG9yLCB0aGUgZm9ybWF0IGlzOgorIyAiYWN0aW9uLGRpcmVjdG9yeSxtaW5pbXVtX3NwYWNlLG1pbmltdW1fZnJlZV9pbm9kZSIKKyMKKyMgVGhlICJhY3Rpb24iIG11c3QgYmUgc2V0IGFuZCBzaG91bGQgYmUgb25lIG9mOgorIyBBQk9SVDogSW1tZWRpYXRlbHkgYWJvcnQKKyMgU1RPUFRBU0tTOiBUaGUgbmV3IHRhc2tzIGNhbid0IGJlIGV4ZWN1dGVkIGFueSBtb3JlLCB3aWxsIHN0b3AgdGhlIGJ1aWxkCisjICAgICAgICAgICB3aGVuIHRoZSBydW5uaW5nIHRhc2tzIGhhdmUgYmVlbiBkb25lLgorIyBXQVJOOiBzaG93IHdhcm5pbmdzIChzZWUgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgZm9yIG1vcmUgaW5mb3JtYXRpb24pCisjCisjIFRoZSAiZGlyZWN0b3J5IiBtdXN0IGJlIHNldCwgYW55IGRpcmVjdG9yeSBpcyBPSy4KKyMKKyMgRWl0aGVyICJtaW5pbXVtX3NwYWNlIiBvciAibWluaW11bV9mcmVlX2lub2RlIiAob3IgYm90aCBvZiB0aGVtKQorIyBzaG91bGQgYmUgc2V0LCBvdGhlcndpc2UgdGhlIG1vbml0b3Igd291bGQgbm90IGJlIGVuYWJsZWQsCisjIHRoZSB1bml0IGNhbiBiZSBHLCBNLCBLIG9yIG5vbmUsIGJ1dCBkbyBOT1QgdXNlIEdCLCBNQiBvciBLQgorIyAoQiBpcyBub3QgbmVlZGVkKS4KKyNCQl9ESVNLTU9OX0RJUlMgPSAiU1RPUFRBU0tTLCR7VE1QRElSfSwxRywxMDBLIFdBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorIworIyBTZXQgZGlzayBzcGFjZSBhbmQgaW5vZGUgaW50ZXJ2YWwgKG9ubHkgd29ya3Mgd2hlbiB0aGUgYWN0aW9uIGlzICJXQVJOIiwKKyMgdGhlIHVuaXQgY2FuIGJlIEcsIE0sIG9yIEssIGJ1dCBkbyBOT1QgdXNlIHRoZSBHQiwgTUIgb3IgS0IKKyMgKEIgaXMgbm90IG5lZWRlZCksIHRoZSBmb3JtYXQgaXM6CisjICJkaXNrX3NwYWNlX2ludGVydmFsLGRpc2tfaW5vZGVfaW50ZXJ2YWwiLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcworIyAiNTBNLDVLIiB3aGljaCBtZWFucyB0aGF0IGl0IHdvdWxkIHdhcm4gd2hlbiB0aGUgZnJlZSBzcGFjZSBpcworIyBsb3dlciB0aGFuIHRoZSBtaW5pbXVtIHNwYWNlKG9yIGlub2RlKSwgYW5kIHdvdWxkIHJlcGVhdCB0aGUgd2FybmluZworIyB3aGVuIHRoZSBkaXNrIHNwYWNlIHJlZHVjZXMgNTBNIChvciB0aGUgYW1vdW50IG9mIGlub2RlIHJlZHVjZXMgNWspLgorI0JCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKworIyBBcmNoaXZlIHRoZSBzb3VyY2UgYW5kIHB1dCB0aGVtIHRvICR7REVQTE9ZX0RJUn0vc291cmNlcy8uCisjCisjSU5IRVJJVCArPSAiYXJjaGl2ZXIiCisjCisjIFRoZSB0YXJiYWxsIGZvciB0aGUgcGF0Y2hlZCBzb3VyY2Ugd2lsbCBiZSBjcmVhdGVkIGJ5IGRlZmF1bHQsIGFuZCB5b3UKKyMgY2FuIGNvbmZpZ3VyZSB0aGUgYXJjaGl2ZXIgYXMgZm9sbG93OgorIworIyBDcmVhdGUgYXJjaGl2ZSBmb3I6CisjIDEpIG9yaWdpbmFsIChvciB1bnBhY2tlZCkgc291cmNlOgorI0FSQ0hJVkVSX01PREVbc3JjXSA9ICJvcmlnaW5hbCIKKyMgMikgcGF0Y2hlZCBzb3VyY2U6IChkZWZhdWx0KQorI0FSQ0hJVkVSX01PREVbc3JjXSA9ICJwYXRjaGVkIgorIyAzKSBjb25maWd1cmVkIHNvdXJjZToKKyNBUkNISVZFUl9NT0RFW3NyY10gPSAiY29uZmlndXJlZCIKKyMKKyMgNCkgdGhlIHBhdGNoZXMgYmV0d2VlbiBkb191bnBhY2sgYW5kIGRvX3BhdGNoOgorI0FSQ0hJVkVSX01PREVbZGlmZl0gPSAiMSIKKyMgc2V0IHRoZSBmaWxlcyB0aGF0IHlvdSdkIGxpa2UgdG8gZXhjbHVkZSBmcm9tIHRoZSBkaWZmOgorI0FSQ0hJVkVSX01PREVbZGlmZi1leGNsdWRlXSA/PSAiLnBjIGF1dG9tNHRlLmNhY2hlIHBhdGNoZXMiCisjCisjIDUpIHRoZSBlbnZpcm9ubWVudCBkYXRhLCBzaW1pbGFyIHRvICdiaXRiYWtlIC1lIHJlY2lwZSc6CisjQVJDSElWRVJfTU9ERVtkdW1wZGF0YV0gPSAiMSIKKyMKKyMgNikgdGhlIHJlY2lwZSAoLmJiIGFuZCAuaW5jKToKKyNBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIKKyMKKyMgNykgV2hldGhlciBvdXRwdXQgdGhlIC5zcmMucnBtIHBhY2thZ2U6CisjQVJDSElWRVJfTU9ERVtzcnBtXSA9ICIxIgorIworIyA4KSBGaWx0ZXIgdGhlIGxpY2Vuc2UsIHRoZSByZWNpcGUgd2hvc2UgbGljZW5zZSBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgd2lsbCBiZSBpbmNsdWRlZCwgYW5kIGluCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSB3aWxsIGJlIGV4Y2x1ZGVkLgorI0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSA9ICdHUEwqIExHUEwqJworI0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA9ICdDTE9TRUQgUHJvcHJpZXRhcnknCisjCisjIDkpIENvbmZpZyB0aGUgcmVjaXBlIHR5cGUgdGhhdCB3aWxsIGJlIGFyY2hpdmVkLCB0aGUgdHlwZSBjYW4gYmUKKyMgICAgdGFyZ2V0LCBuYXRpdmUsIG5hdGl2ZXNkaywgY3Jvc3MsIGNyb3Nzc2RrIGFuZCBjcm9zcy1jYW5hZGlhbiwKKyMgICAgeW91IGNhbiBzZXQgb25lIG9yIG1vcmUgdHlwZXMuIEFyY2hpdmUgYWxsIHR5cGVzIGJ5IGRlZmF1bHQuCisjQ09QWUxFRlRfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCcKKyMKKworIyBSZW1vdmUgdGhlIG9sZCBpbWFnZSBiZWZvcmUgdGhlIG5ldyBvbmUgZ2VuZXJhdGVkIHRvIHNhdmUgZGlzayBzcGFjZQorI1JNX09MRF9JTUFHRSA9ICIxIgorCisjCisjIEdDQy9MRCBGTEFHUyB0byBlbmFibGUgbW9yZSBzZWN1cmUgY29kZSBnZW5lcmF0aW9uCisjIAorIyBCeSBpbmNsdWRpbmcgdGhlIHNlY3VyaXR5X2ZsYWdzIGluY2x1ZGUgZmlsZSB5b3UgZW5hYmxlIGZsYWdzCisjIHRvIHRoZSBjb21waWxlciBhbmQgbGlua2VyIHRoYXQgY2F1c2UgdGhlbSB0byBnZW5lcmF0ZSBtb3JlIHNlY3VyZQorIyBjb2RlLCB0aGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgcG9reS1sc2IgZGlzdHJvLgorIyBUaGlzIGRvZXMgYWZmZWN0IGNvbXBpbGUgc3BlZWQgc2xpZ2h0bHkuCisjCisjIFVzZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIHRoZSBzZWN1cml0eSBjb21waWxlciBhbmQgbGlua2VyIGZsYWdzIHRvIHlvdXIgYnVpbGQKKyNyZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCisKKyMgSW1hZ2UgbGV2ZWwgdXNlci9ncm91cCBjb25maWd1cmF0aW9uLgorIyBJbmhlcml0IGV4dHJhdXNlcnMgdG8gbWFrZSB0aGUgc2V0dGluZyBvZiBFWFRSQV9VU0VSU19QQVJBTVMgZWZmZWN0aXZlLgorI0lOSEVSSVQgKz0gImV4dHJhdXNlcnMiCisjIFVzZXIgLyBncm91cCBzZXR0aW5ncworIyBUaGUgc2V0dGluZ3MgYXJlIHNwZXJhdGVkIGJ5IHRoZSA7IGNoYXJhY3Rlci4KKyMgRWFjaCBzZXR0aW5nIGlzIGFjdHVhbGx5IGEgY29tbWFuZC4gVGhlIHN1cHBvcnRlZCBjb21tYW5kcyBhcmUgdXNlcmFkZCwKKyMgZ3JvdXBhZGQsIHVzZXJkZWwsIGdyb3VwZGVsLCB1c2VybW9kIGFuZCBncm91cG1vZC4KKyNFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorI3VzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisjZ3JvdXBhZGQgZGV2ZWxvcGVyczsgXAorI3VzZXJkZWwgbm9ib2R5OyBcCisjZ3JvdXBkZWwgdmlkZW87IFwKKyNncm91cG1vZCAtZyAxMDIwIGRldmVsb3BlcnM7IFwKKyN1c2VybW9kIC1zIC9iaW4vc2ggdGVzdGVyOyBcCisjIgorCisjIFZhcmlvdXMgcGFja2FnZXMgZHluYW1pY2FsbHkgYWRkIHVzZXJzIGFuZCBncm91cHMgdG8gdGhlIHN5c3RlbSBhdCBwYWNrYWdlCisjIGluc3RhbGwgdGltZS4gIEZvciBwcm9ncmFtcyB0aGF0IGRvIG5vdCBjYXJlIHdoYXQgdGhlIHVpZC9naWQgaXMgb2YgdGhlCisjIHJlc3VsdGluZyB1c2Vycy9ncm91cHMsIHRoZSBvcmRlciBvZiB0aGUgaW5zdGFsbCB3aWxsIGRldGVybWluZSB0aGUgZmluYWwKKyMgdWlkL2dpZC4gIFRoaXMgY2FuIGxlYWQgdG8gbm9uLWRldGVybWluaXN0aWMgdWlkL2dpZCB2YWx1ZXMgZnJvbSBvbmUgYnVpbGQKKyMgdG8gYW5vdGhlci4gIFVzZSB0aGUgZm9sbG93aW5nIHNldHRpbmdzIHRvIHNwZWNpZnkgdGhhdCBhbGwgdXNlci9ncm91cCBhZGRzCisjIHNob3VsZCBiZSBjcmVhdGVkIGJhc2VkIG9uIGEgc3RhdGljIHBhc3N3ZC9ncm91cCBmaWxlLgorIworIyBOb3RlLCBpZiB5b3UgZW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZXJhZGQtc3RhdGljaWRzIGluIGEgY29uZmlndXJlZCBzeXN0ZW0sCisjIHRoZSBUTVBESVIgbWF5IGNvbnRhaW4gaW5jb3JyZWN0IHVpZC9naWQgdmFsdWVzLiAgQ2xlYXJpbmcgdGhlIFRNUERJUgorIyB3aWxsIGNvcnJlY3QgdGhpcyBjb25kaXRpb24uCisjCisjIEJ5IGRlZmF1bHQgdGhlIHN5c3RlbSBsb29rcyBpbiB0aGUgQkJQQVRIIGZvciBmaWxlcy9wYXNzd2QgYW5kIGZpbGVzL2dyb3VwCisjIHRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZW4gYnkgc3BlZnlpbmcgVVNFUkFERF9VSUQvR0lEX1RBQkxFUy4KKyMKKyNVU0VSQURERVhURU5TSU9OID0gInVzZXJhZGQtc3RhdGljaWRzIgorI1VTRVJBRERfVUlEX1RBQkxFUyA9ICJmaWxlcy9wYXNzd2QiCisjVVNFUkFERF9HSURfVEFCTEVTID0gImZpbGVzL2dyb3VwIgorIworIyBJbiBvcmRlciB0byBwcmV2ZW50IGdlbmVyYXRpbmcgYSBzeXN0ZW0gd2hlcmUgYSBkeW5hbWljbHkgYXNzaWduZWQgdWlkL2dpZAorIyBjYW4gZXhpc3QsIHlvdSBzaG91bGQgZW5hYmxlIHRoZSBmb2xsb3dpbmcgc2V0dGluZy4gIFRoaXMgd2lsbCBmb3JjZSB0aGUKKyMgc3lzdGVtIHRvIGVycm9yIG91dCBpZiB0aGUgdXNlci9ncm91cCBuYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZQorIyBmaWxlcy9wYXNzd2Qgb3IgZmlsZXMvZ3JvdXAgKG9yIHNwZWNpZmllZCByZXBsYWNlbWVudHMuKQorI1VTRVJBRERfRVJST1JfRFlOQU1JQyA9ICIxIgorCisjIEVuYWJsaW5nIEZPUlRSQU4KKyMgTm90ZSB0aGlzIGlzIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBhbmQgaXMganVzdCBpbGx1c3RyYXRlZCBoZXJlIHRvCisjIHNob3cgYW4gZXhhbXBsZSBvZiBob3cgaXQgY2FuIGJlIGRvbmUKKyMgWW91J2xsIGFsc28gbmVlZCB5b3VyIGZvcnRyYW4gcmVjaXBlIHRvIGRlcGVuZCBvbiBsaWJnZm9ydHJhbgorI0ZPUlRSQU5fZm9yY2V2YXJpYWJsZSA9ICIsZm9ydHJhbiIKKyNSVU5USU1FVEFSR0VUX2FwcGVuZF9wbi1nY2MtcnVudGltZSA9ICIgbGlicXVhZG1hdGgiCisKKyMKKyMgS2VybmVsIGltYWdlIGZlYXR1cmVzCisjCisjIFRoZSBJTklUUkFNRlNfSU1BR0UgaW1hZ2UgdmFyaWFibGUgd2lsbCBjYXVzZSBhbiBhZGRpdGlvbmFsIHJlY2lwZSB0bworIyBiZSBidWlsdCBhcyBhIGRlcGVuZGVuY3kgdG8gdGhlIHdoYXQgZXZlciByb290ZnMgcmVjaXBlIHlvdSBtaWdodCBiZQorIyB1c2luZyBzdWNoIGFzIGNvcmUtaW1hZ2Utc2F0by4gIFRoZSBpbml0cmFtZnMgbWlnaHQgYmUgbmVlZGVkIGZvcgorIyB0aGUgaW5pdGlhbCBib290IG9mIG9mIHRoZSB0YXJnZXQgc3lzdGVtIHN1Y2ggYXMgdG8gbG9hZCBrZXJuZWwKKyMgbW9kdWxlcyBwcmlvciB0byBtb3VudGluZyB0aGUgcm9vdCBmaWxlIHN5c3RlbS4KKyMKKyMgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSB2YXJpYWJsZSBjb250cm9scyBpZiB0aGUgaW1hZ2UgcmVjaXBlCisjIHNwZWNpZmllZCBieSB0aGUgSU5JVFJBTUZTX0lNQUdFIHdpbGwgYmUgcnVuIHRocm91Z2ggYW4gZXh0cmEgcGFzcworIyB0aHJvdWdoIHRoZSBrZXJuZWwgY29tcGlsYXRpb24gaW4gb3JkZXIgdG8gYnVpbGQgYSBzaW5nbGUgYmluYXJ5CisjIHdoaWNoIGNvbnRhaW5zIGJvdGggdGhlIGtlcm5lbCBpbWFnZSBhbmQgdGhlIGluaXRyYW1mcy4gIFRoZQorIyBjb21iaW5lZCBiaW5hcnkgd2lsbCBiZSBkZXBvc2l0ZWQgaW50byB0aGUgdG1wL2RlcGxveSBkaXJlY3RvcnkuCisjIE5PVEU6IFlvdSBjYW4gc2V0IElOSVRSQU1GU19JTUFHRSBpbiBhbiBpbWFnZSByZWNpcGUsIGJ1dAorIyAgICAgICBJTklUUkFNRlNfSU1BR0VfQlVORExFIGNhbiBvbmx5IGJlIHNldCBpbiBhIGNvbmYgZmlsZS4KKyMKKyNJTklUUkFNRlNfSU1BR0UgPSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIKKyNJTklUUkFNRlNfSU1BR0VfQlVORExFID0gIjEiCisKKyMKKyMgSVBLIEhpZXJhcmNoaWNhbCBmZWVkCisjCisjIEluIHNvbWUgY2FzZXMgaXQgbWF5IGJlIGRlc2lyYWJsZSBub3QgdG8gaGF2ZSBhbGwgcGFja2FnZSBmaWxlcyBpbiB0aGUgc2FtZQorIyBkaXJlY3RvcnkuIEFuIGV4YW1wbGUgd291bGQgYmUgd2hlbiBwYWNrYWdlIGZlZWRzIGFyZSB0byBiZSB1cGxvYWRlZCB0byBhCisjIHNoYXJlZCB3ZWJob3N0aW5nIHNlcnZpY2Ugb3IgdHJhbnNmZXJyZWQgdG8gYSBXaW5kb3dzIG1hY2hpbmUgd2hpY2ggbWF5IGhhdmUKKyMgcHJvYmxlbXMgd2l0aCBkaXJlY3RvcmllcyBjb250YWluaW5nIG11bHRpcGxlIHRob3VzYW5kcyBvZiBmaWxlcy4KKyMKKyMgSWYgdGhlIElQS19ISUVSQVJDSElDQUxfRkVFRCB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLCBwYWNrYWdlcyB3aWxsIGJlIHNwbGl0CisjIGJldHdlZW4gc3ViZGlyZWN0b3JpZXMgaW4gYSBzaW1pbGFyIHdheSB0byBob3cgRGViaWFuIHBhY2thZ2UgZmVlZHMgYXJlCisjIG9yZ2FuaXNlZC4gSW4gdGhlIGhpZXJhcmNoaWNhbCBmZWVkLCBwYWNrYWdlIGZpbGVzIGFyZSB3cml0dGVuIHRvCisjIDxvdXRkaXI+LzxhcmNoPi88cGtnX3ByZWZpeD4vPHBrZ19zdWJkaXI+LCB3aGVyZSBwa2dfcHJlZml4IGlzIHRoZSBmaXJzdAorIyBsZXR0ZXIgb2YgdGhlIHBhY2thZ2UgZmlsZSBuYW1lIGZvciBub24tbGliIHBhY2thZ2VzIG9yICJsaWIiIHBsdXMgdGhlIDR0aAorIyBsZXR0ZXIgb2YgdGhlIHBhY2thZ2UgZmlsZSBuYW1lIGZvciBsaWIgcGFja2FnZXMgKGVnLCAnbCcgZm9yIGxlc3MsICdsaWJjJyBmb3IKKyMgbGliYzYpLiAgcGtnX3N1YmRpciBpcyB0aGUgcm9vdCBvZiB0aGUgcGFja2FnZSBmaWxlIG5hbWUsIGRpc2NhcmRpbmcgdGhlCisjIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZSBwYXJ0cyBhbmQgdGhlIGNvbW1vbiBzdWZmaXhlcyAnLWRiZycsICctZGV2JywgJy1kb2MnLAorIyAnLXN0YXRpY2RldicsICctbG9jYWxlJyBhbmQgJy1sb2NhbGUtKicgd2hpY2ggYXJlIGxpc3RlZCBpbgorIyBtZXRhL2NvbmYvYml0YmFrZS5jb25mLgorIworIyBJZiBJUEtfSElFUkFSQ0hJQ0FMX0ZFRUQgaXMgdW5zZXQgb3Igc2V0IHRvIGFueSBvdGhlciB2YWx1ZSwgdGhlIHRyYWRpdGlvbmFsCisjIGZlZWQgbGF5b3V0IGlzIHVzZWQgd2hlcmUgcGFja2FnZSBmaWxlcyBhcmUgcGxhY2VkIGluIDxvdXRkaXI+LzxhcmNoPi8uCisjCisjSVBLX0hJRVJBUkNISUNBTF9GRUVEID0gIjEiCisjCisKKyMgVXNpbmcgUlBNNAorIworIyBDdXJyZW50bHkgdGhlIHJvb3Rmc19ycG0gY29kZSBoYXMgYSBoYXJkIGRlcGVuZHMgb24gcnBtcmVzb2x2ZTpkb19wb3B1bGF0ZV9zeXNyb290LAorIyB3aGVuIHVzaW5nIHJwbTQgdGhlIHJwbXJlc29sdmUgY29kZSB3aWxsIG5vdCBjb21waWxlIGR1ZSB0byBhIG1pc3NpbmcgaGVhZGVyIGZpbGUuCisjIFRoYXQgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSByZW1vdmVkIHdoZW4gdXNpbmcgUlBNNCwgYWxzbyB0aGUgUFJFRlJSRURfVkVSU0lPTiBuZWVkcworIyB0byBiZSBzZXQuIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gZW5hYmxlIHJwbTQKKyMgUFJFRkVSUkVEX1ZFUlNJT05fcnBtID0gIjQuMTEuMiIKKyMgUFJFRkVSUkVEX1ZFUlNJT05fcnBtLW5hdGl2ZSA9ICI0LjExLjIiCisjIFJQTVJPT1RGU0RFUEVORFNfcmVtb3ZlID0gInJwbXJlc29sdmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vY29uZi9zaXRlLmNvbmYuc2FtcGxlIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTUxZThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZQpAQCAtMCwwICsxLDMxIEBACisjCisjIGxvY2FsLmNvbmYgY292ZXJzIHVzZXIgc2V0dGluZ3MsIHNpdGUuY29uZiBjb3ZlcnMgc2l0ZSBzcGVjaWZpYyBpbmZvcm1hdGlvbgorIyBzdWNoIGFzIHByb3h5IHNlcnZlciBhZGRyZXNzZXMgYW5kIG9wdGlvbmFsbHkgYW55IHNoYXJlZCBkb3dubG9hZCBsb2NhdGlvbgorIworIyBTSVRFX0NPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvc2l0ZS5jb25mCisjIGNoYW5nZXMgaW5jb21wYXRpYmx5CitTQ09ORl9WRVJTSU9OID0gIjEiCisKKyMgVW5jb21tZW50IHRvIGNhdXNlIENWUyB0byB1c2UgdGhlIHByb3h5IGhvc3Qgc3BlY2lmaWVkCisjQ1ZTX1BST1hZX0hPU1QgPSAicHJveHkuZXhhbXBsZS5jb20iCisjQ1ZTX1BST1hZX1BPUlQgPSAiODEiCisKKyMgRm9yIHN2biwgeW91IG5lZWQgdG8gY3JlYXRlIH4vLnN1YnZlcnNpb24vc2VydmVycyBjb250YWluaW5nOgorI1tnbG9iYWxdCisjaHR0cC1wcm94eS1ob3N0ID0gcHJveHkuZXhhbXBsZS5jb20KKyNodHRwLXByb3h5LXBvcnQgPSA4MQorIworCisjIFRvIHVzZSBnaXQgd2l0aCBhIHByb3h5LCB5b3UgbXVzdCB1c2UgYW4gZXh0ZXJuYWwgZ2l0IHByb3h5IGNvbW1hbmQsIHN1Y2ggYXMKKyMgdGhlIG9uZSBwcm92aWRlZCBieSBzY3JpcHRzL29lLWdpdC1wcm94eS5zaC4gVG8gdXNlIHRoaXMgc2NyaXB0LCBjb3B5IGl0IHRvCisjIHlvdXIgUEFUSCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmc6CisjR0lUX1BST1hZX0NPTU1BTkQgPz0gIm9lLWdpdC1wcm94eSIKKyNBTExfUFJPWFkgPz0gInNvY2tzOi8vc29ja3MuZXhhbXBsZS5jb206MTA4MCIKKyNvcgorI0FMTF9QUk9YWSA/PSAiaHR0cHM6Ly9wcm94eS5leGFtcGxlLmNvbTo4MDgwIgorIyBJZiB5b3Ugd2lzaCB0byB1c2UgY2VydGFpbiBob3N0cyB3aXRob3V0IHRoZSBwcm94eSwgc3BlY2lmeSB0aGVtIGluIE5PX1BST1hZLgorIyBTZWUgdGhlIHNjcmlwdCBmb3IgZGV0YWlscyBvbiBzeW50YXguCisKKyMgVW5jb21tZW50IHRoaXMgdG8gdXNlIGEgc2hhcmVkIGRvd25sb2FkIGRpcmVjdG9yeQorI0RMX0RJUiA9ICIvc29tZS9zaGFyZWQvZG93bmxvYWQvZGlyZWN0b3J5LyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL2NvbmYvdG9hc3RlcmNvbmYuanNvbiBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NTI3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24KQEAgLTAsMCArMSwxMTkgQEAKK3sKKyAgICAiY29uZmlnIjogeworICAgICAgICAiTUFDSElORSIgICAgICA6ICJxZW11eDg2IiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCisgICAgICAgICJJTUFHRV9GU1RZUEVTIjogImV4dDMgamZmczIgdGFyLmJ6MiIsCisgICAgICAgICJJTUFHRV9JTlNUQUxMX2FwcGVuZCI6ICIiLAorICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKKyAgICAgICAgIlNES01BQ0hJTkUiICAgOiAieDg2XzY0IgorICAgIH0sCisgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAiYXBpdXJsIjogIi4uLy4uLyIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIkhFQUQiLCAibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXSwKKyAgICAgICAgICAgICJsYXllcnMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJvcGVuZW1iZWRkZWQtY29yZSIsCisgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAorICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YSIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0byIsCisgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0byIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAorICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCBsYXllcnMiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAiaW1wb3J0ZWQiLAorICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSIsICJIRUFEIl0KKworICAgICAgICB9CisgICAgXSwKKyAgICAiYml0YmFrZSIgOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgImJyYW5jaCI6ICJmaWRvIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkhFQUQiLAorICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9CisgICAgXSwKKworICAgICJkZWZhdWx0cmVsZWFzZSI6ICJtYXN0ZXIiLAorCisgICAgInJlbGVhc2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgbWFzdGVyIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCisgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvXCI+WW9jdG8gUHJvamVjdCBtYXN0ZXIgYnJhbmNoPC9hPiwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjggRmlkbyIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1maWRvXCI+WW9jdG8gUHJvamVjdCAxLjggXCJGaWRvXCI8L2E+IGJyYW5jaC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IDEuNyBEaXp6eSIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiLCAibWV0YS15b2N0byIsICJtZXRhLXlvY3RvLWJzcCJdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIFlvY3RvIFByb2plY3QiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWRpenp5XCI+WW9jdG8gUHJvamVjdCAxLjcgXCJEaXp6eVwiPC9hPiBicmFuY2guIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcG9reS10aW55L2RlZmNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3Bva3ktdGlueS9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZDVjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3Bva3ktdGlueS9kZWZjb25maWcKQEAgLTAsMCArMSwxMDA5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIEJ1c3lib3ggdmVyc2lvbjogMS4xOS4zCisjIFdlZCBOb3YgMzAgMDk6MzM6MTYgMjAxMQorIworQ09ORklHX0hBVkVfRE9UX0NPTkZJRz15CisKKyMKKyMgQnVzeWJveCBTZXR0aW5ncworIworCisjCisjIEdlbmVyYWwgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfREVTS1RPUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFRSQV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5DTFVERV9TVVN2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfUE9SVEFCTEVfQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfUExBVEZPUk1fTElOVVg9eQorQ09ORklHX0ZFQVRVUkVfQlVGRkVSU19VU0VfTUFMTE9DPXkKKyMgQ09ORklHX0ZFQVRVUkVfQlVGRkVSU19HT19PTl9TVEFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fSU5fQlNTIGlzIG5vdCBzZXQKK0NPTkZJR19TSE9XX1VTQUdFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVkVSQk9TRV9VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT01QUkVTU19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX0lOU1RBTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX05PX1VTUiBpcyBub3Qgc2V0CitDT05GSUdfTE9DQUxFX1NVUFBPUlQ9eQorIyBDT05GSUdfVU5JQ09ERV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfVVNJTkdfTE9DQUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVU5JQ09ERV9JTl9FTlYgaXMgbm90IHNldAorQ09ORklHX1NVQlNUX1dDSEFSPTAKK0NPTkZJR19MQVNUX1NVUFBPUlRFRF9XQ0hBUj0wCisjIENPTkZJR19VTklDT0RFX0NPTUJJTklOR19XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9XSURFX1dDSEFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX0JJRElfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX05FVVRSQUxfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9QUkVTRVJWRV9CUk9LRU4gaXMgbm90IHNldAorQ09ORklHX0xPTkdfT1BUUz15CitDT05GSUdfRkVBVFVSRV9ERVZQVFM9eQorIyBDT05GSUdfRkVBVFVSRV9DTEVBTl9VUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9VVE1QPXkKKyMgQ09ORklHX0ZFQVRVUkVfV1RNUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9QSURGSUxFPXkKK0NPTkZJR19GRUFUVVJFX1NVSUQ9eQorQ09ORklHX0ZFQVRVUkVfU1VJRF9DT05GSUc9eQorQ09ORklHX0ZFQVRVUkVfU1VJRF9DT05GSUdfUVVJRVQ9eQorIyBDT05GSUdfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BSRUZFUl9BUFBMRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19CVVNZQk9YX0VYRUNfUEFUSD0iL3Byb2Mvc2VsZi9leGUiCitDT05GSUdfRkVBVFVSRV9TWVNMT0c9eQorQ09ORklHX0ZFQVRVUkVfSEFWRV9SUEM9eQorCisjCisjIEJ1aWxkIE9wdGlvbnMKKyMKKyMgQ09ORklHX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSUUgaXMgbm90IHNldAorIyBDT05GSUdfTk9NTVUgaXMgbm90IHNldAorIyBDT05GSUdfQlVJTERfTElCQlVTWUJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORElWSURVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFSRURfQlVTWUJPWCBpcyBub3Qgc2V0CitDT05GSUdfTEZTPXkKK0NPTkZJR19DUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK0NPTkZJR19FWFRSQV9DRkxBR1M9IiIKKworIworIyBEZWJ1Z2dpbmcgT3B0aW9ucworIworIyBDT05GSUdfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVTU0lNSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfTk9fREVCVUdfTElCPXkKKyMgQ09ORklHX0RNQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfRUZFTkNFIGlzIG5vdCBzZXQKKworIworIyBJbnN0YWxsYXRpb24gT3B0aW9ucyAoIm1ha2UgaW5zdGFsbCIgYmVoYXZpb3IpCisjCitDT05GSUdfSU5TVEFMTF9BUFBMRVRfU1lNTElOS1M9eQorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfSEFSRExJTktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX1NDUklQVF9XUkFQUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9ET05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NZTUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9TSF9BUFBMRVRfSEFSRExJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9TSF9BUFBMRVRfU0NSSVBUX1dSQVBQRVIgaXMgbm90IHNldAorQ09ORklHX1BSRUZJWD0iLi9faW5zdGFsbCIKKworIworIyBCdXN5Ym94IExpYnJhcnkgVHVuaW5nCisjCitDT05GSUdfRkVBVFVSRV9TWVNURU1EPXkKK0NPTkZJR19GRUFUVVJFX1JUTUlOTUFYPXkKK0NPTkZJR19QQVNTV09SRF9NSU5MRU49NgorQ09ORklHX01ENV9TSVpFX1ZTX1NQRUVEPTIKK0NPTkZJR19GRUFUVVJFX0ZBU1RfVE9QPXkKKyMgQ09ORklHX0ZFQVRVUkVfRVRDX05FVFdPUktTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VTRV9URVJNSU9TPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkc9eQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19NQVhfTEVOPTEwMjQKKyMgQ09ORklHX0ZFQVRVUkVfRURJVElOR19WSSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0hJU1RPUlk9MTUKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfU0FWRUhJU1RPUlk9eQorIyBDT05GSUdfRkVBVFVSRV9SRVZFUlNFX1NFQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQUJfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9VU0VSTkFNRV9DT01QTEVUSU9OPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfRkFOQ1lfUFJPTVBUPXkKKyMgQ09ORklHX0ZFQVRVUkVfRURJVElOR19BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTk9OX1BPU0lYX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfVkVSQk9TRV9DUF9NRVNTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NPUFlCVUZfS0I9NAorQ09ORklHX0ZFQVRVUkVfU0tJUF9ST09URlM9eQorQ09ORklHX01PTk9UT05JQ19TWVNDQUxMPXkKK0NPTkZJR19JT0NUTF9IRVgyU1RSX0VSUk9SPXkKK0NPTkZJR19GRUFUVVJFX0hXSUI9eQorCisjCisjIEFwcGxldHMKKyMKKworIworIyBBcmNoaXZhbCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfWFogaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfTFpNQT15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19CWjI9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfR1o9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfWj15CitDT05GSUdfQVI9eQorIyBDT05GSUdfRkVBVFVSRV9BUl9MT05HX0ZJTEVOQU1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FSX0NSRUFURSBpcyBub3Qgc2V0CitDT05GSUdfQlVOWklQMj15CisjIENPTkZJR19CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfQ1BJTz15CisjIENPTkZJR19GRUFUVVJFX0NQSU9fTyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NQSU9fUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUEtHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQS0dfREVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRFBLR19ERUJfRVhUUkFDVF9PTkxZIGlzIG5vdCBzZXQKK0NPTkZJR19HVU5aSVA9eQorQ09ORklHX0daSVA9eQorIyBDT05GSUdfRkVBVFVSRV9HWklQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19MWk9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaT1BfQ09NUFJfSElHSCBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0yQ1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0gaXMgbm90IHNldAorQ09ORklHX1RBUj15CitDT05GSUdfRkVBVFVSRV9UQVJfQ1JFQVRFPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9BVVRPREVURUNUPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9GUk9NPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9PTERHTlVfQ09NUEFUSUJJTElUWT15CisjIENPTkZJR19GRUFUVVJFX1RBUl9PTERTVU5fQ09NUEFUSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQVJfR05VX0VYVEVOU0lPTlM9eQorIyBDT05GSUdfRkVBVFVSRV9UQVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1RPX0NPTU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfVU5BTUVfR05BTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfTk9QUkVTRVJWRV9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfVU5DT01QUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTkxaTUEgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MWk1BX0ZBU1QgaXMgbm90IHNldAorIyBDT05GSUdfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlhaIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haIGlzIG5vdCBzZXQKK0NPTkZJR19VTlpJUD15CisKKyMKKyMgQ29yZXV0aWxzCisjCitDT05GSUdfQkFTRU5BTUU9eQorQ09ORklHX0NBVD15CitDT05GSUdfREFURT15CisjIENPTkZJR19GRUFUVVJFX0RBVEVfSVNPRk1UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREFURV9OQU5PIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0RBVEVfQ09NUEFUPXkKK0NPTkZJR19JRD15CitDT05GSUdfR1JPVVBTPXkKK0NPTkZJR19URVNUPXkKK0NPTkZJR19GRUFUVVJFX1RFU1RfNjQ9eQorQ09ORklHX1RPVUNIPXkKK0NPTkZJR19UUj15CitDT05GSUdfRkVBVFVSRV9UUl9DTEFTU0VTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVFJfRVFVSVYgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRTY0IGlzIG5vdCBzZXQKK0NPTkZJR19XSE89eQorQ09ORklHX1VTRVJTPXkKKyMgQ09ORklHX0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVRWIGlzIG5vdCBzZXQKK0NPTkZJR19DSEdSUD15CitDT05GSUdfQ0hNT0Q9eQorQ09ORklHX0NIT1dOPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0hPV05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJPT1Q9eQorIyBDT05GSUdfQ0tTVU0gaXMgbm90IHNldAorIyBDT05GSUdfQ09NTSBpcyBub3Qgc2V0CitDT05GSUdfQ1A9eQorIyBDT05GSUdfRkVBVFVSRV9DUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0NVVD15CitDT05GSUdfREQ9eQorQ09ORklHX0ZFQVRVUkVfRERfU0lHTkFMX0hBTkRMSU5HPXkKKyMgQ09ORklHX0ZFQVRVUkVfRERfVEhJUkRfU1RBVFVTX0xJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERF9JQlNfT0JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERj15CisjIENPTkZJR19GRUFUVVJFX0RGX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19ESVJOQU1FPXkKKyMgQ09ORklHX0RPUzJVTklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVgyRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19EVT15CitDT05GSUdfRkVBVFVSRV9EVV9ERUZBVUxUX0JMT0NLU0laRV8xSz15CitDT05GSUdfRUNITz15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9FQ0hPPXkKK0NPTkZJR19FTlY9eQorQ09ORklHX0ZFQVRVUkVfRU5WX0xPTkdfT1BUSU9OUz15CisjIENPTkZJR19FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FWFBBTkRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19FWFBSPXkKK0NPTkZJR19FWFBSX01BVEhfU1VQUE9SVF82ND15CitDT05GSUdfRkFMU0U9eQorIyBDT05GSUdfRk9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19GU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfSEVBRD15CisjIENPTkZJR19GRUFUVVJFX0ZBTkNZX0hFQUQgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTE49eQorQ09ORklHX0xPR05BTUU9eQorQ09ORklHX0xTPXkKK0NPTkZJR19GRUFUVVJFX0xTX0ZJTEVUWVBFUz15CitDT05GSUdfRkVBVFVSRV9MU19GT0xMT1dMSU5LUz15CitDT05GSUdfRkVBVFVSRV9MU19SRUNVUlNJVkU9eQorQ09ORklHX0ZFQVRVUkVfTFNfU09SVEZJTEVTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1RJTUVTVEFNUFM9eQorQ09ORklHX0ZFQVRVUkVfTFNfVVNFUk5BTUU9eQorQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1I9eQorIyBDT05GSUdfRkVBVFVSRV9MU19DT0xPUl9JU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19NRDVTVU09eQorQ09ORklHX01LRElSPXkKK0NPTkZJR19GRUFUVVJFX01LRElSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfTUtGSUZPPXkKK0NPTkZJR19NS05PRD15CitDT05GSUdfTVY9eQorIyBDT05GSUdfRkVBVFVSRV9NVl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTklDRSBpcyBub3Qgc2V0CitDT05GSUdfTk9IVVA9eQorQ09ORklHX09EPXkKKyMgQ09ORklHX1BSSU5URU5WIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEY9eQorQ09ORklHX1BXRD15CitDT05GSUdfUkVBRExJTks9eQorQ09ORklHX0ZFQVRVUkVfUkVBRExJTktfRk9MTE9XPXkKK0NPTkZJR19SRUFMUEFUSD15CitDT05GSUdfUk09eQorQ09ORklHX1JNRElSPXkKKyMgQ09ORklHX0ZFQVRVUkVfUk1ESVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVE9eQorIyBDT05GSUdfU0hBMVNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEEyNTZTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBNTEyU1VNIGlzIG5vdCBzZXQKK0NPTkZJR19TTEVFUD15CitDT05GSUdfRkVBVFVSRV9GQU5DWV9TTEVFUD15CisjIENPTkZJR19GRUFUVVJFX0ZMT0FUX1NMRUVQIGlzIG5vdCBzZXQKK0NPTkZJR19TT1JUPXkKK0NPTkZJR19GRUFUVVJFX1NPUlRfQklHPXkKKyMgQ09ORklHX1NQTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU1BMSVRfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NUQVRfRk9STUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TVFRZPXkKKyMgQ09ORklHX1NVTSBpcyBub3Qgc2V0CitDT05GSUdfU1lOQz15CisjIENPTkZJR19UQUMgaXMgbm90IHNldAorQ09ORklHX1RBSUw9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfVEFJTD15CitDT05GSUdfVEVFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEVFX1VTRV9CTE9DS19JTyBpcyBub3Qgc2V0CitDT05GSUdfVFJVRT15CitDT05GSUdfVFRZPXkKK0NPTkZJR19VTkFNRT15CisjIENPTkZJR19VTkVYUEFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VORVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfVU5JUT15CitDT05GSUdfVVNMRUVQPXkKKyMgQ09ORklHX1VVREVDT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VVRU5DT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19XQz15CisjIENPTkZJR19GRUFUVVJFX1dDX0xBUkdFIGlzIG5vdCBzZXQKK0NPTkZJR19XSE9BTUk9eQorQ09ORklHX1lFUz15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGNwIGFuZCBtdgorIworIyBDT05GSUdfRkVBVFVSRV9QUkVTRVJWRV9IQVJETElOS1MgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBscywgbW9yZSBhbmQgdGVsbmV0CisjCitDT05GSUdfRkVBVFVSRV9BVVRPV0lEVEg9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBkZiwgZHUsIGxzCisjCitDT05GSUdfRkVBVFVSRV9IVU1BTl9SRUFEQUJMRT15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIG1kNXN1bSwgc2hhMXN1bSwgc2hhMjU2c3VtLCBzaGE1MTJzdW0KKyMKK0NPTkZJR19GRUFUVVJFX01ENV9TSEExX1NVTV9DSEVDSz15CisKKyMKKyMgQ29uc29sZSBVdGlsaXRpZXMKKyMKK0NPTkZJR19DSFZUPXkKKyMgQ09ORklHX0ZHQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfQ0xFQVI9eQorQ09ORklHX0RFQUxMT0NWVD15CitDT05GSUdfRFVNUEtNQVA9eQorIyBDT05GSUdfS0JEX01PREUgaXMgbm90IHNldAorQ09ORklHX0xPQURGT05UPXkKK0NPTkZJR19MT0FES01BUD15CitDT05GSUdfT1BFTlZUPXkKK0NPTkZJR19SRVNFVD15CisjIENPTkZJR19SRVNJWkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRVNJWkVfUFJJTlQgaXMgbm90IHNldAorQ09ORklHX1NFVENPTlNPTEU9eQorIyBDT05GSUdfRkVBVFVSRV9TRVRDT05TT0xFX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGT05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0VURk9OVF9URVhUVUFMX01BUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRVRGT05UX0RJUj0iIgorIyBDT05GSUdfU0VUS0VZQ09ERVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VUTE9HQ09OUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSE9XS0VZIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbG9hZGZvbnQgYW5kIHNldGZvbnQKKyMKKyMgQ09ORklHX0ZFQVRVUkVfTE9BREZPTlRfUFNGMiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xPQURGT05UX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgRGViaWFuIFV0aWxpdGllcworIworQ09ORklHX01LVEVNUD15CisjIENPTkZJR19QSVBFX1BST0dSRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVU5fUEFSVFM9eQorQ09ORklHX0ZFQVRVUkVfUlVOX1BBUlRTX0xPTkdfT1BUSU9OUz15CisjIENPTkZJR19GRUFUVVJFX1JVTl9QQVJUU19GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfU1RBUlRfU1RPUF9EQUVNT049eQorQ09ORklHX0ZFQVRVUkVfU1RBUlRfU1RPUF9EQUVNT05fRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfU1RBUlRfU1RPUF9EQUVNT05fTE9OR19PUFRJT05TPXkKK0NPTkZJR19XSElDSD15CisKKyMKKyMgRWRpdG9ycworIworQ09ORklHX1BBVENIPXkKK0NPTkZJR19WST15CitDT05GSUdfRkVBVFVSRV9WSV9NQVhfTEVOPTEwMjQKK0NPTkZJR19GRUFUVVJFX1ZJXzhCSVQ9eQorQ09ORklHX0ZFQVRVUkVfVklfQ09MT049eQorQ09ORklHX0ZFQVRVUkVfVklfWUFOS01BUks9eQorQ09ORklHX0ZFQVRVUkVfVklfU0VBUkNIPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfUkVHRVhfU0VBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1VTRV9TSUdOQUxTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfRE9UX0NNRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1JFQURPTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfU0VUT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1NFVCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9XSU5fUkVTSVpFPXkKKyMgQ09ORklHX0ZFQVRVUkVfVklfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX09QVElNSVpFX0NVUlNPUj15CitDT05GSUdfQVdLPXkKKyMgQ09ORklHX0ZFQVRVUkVfQVdLX0xJQk0gaXMgbm90IHNldAorQ09ORklHX0NNUD15CitDT05GSUdfRElGRj15CisjIENPTkZJR19GRUFUVVJFX0RJRkZfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0RJRkZfRElSPXkKKyMgQ09ORklHX0VEIGlzIG5vdCBzZXQKK0NPTkZJR19TRUQ9eQorQ09ORklHX0ZFQVRVUkVfQUxMT1dfRVhFQz15CisKKyMKKyMgRmluZGluZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19GSU5EPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUFJJTlQwPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTVRJTUU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NTUlOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEVSTT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1RZUEU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9YREVWPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTUFYREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ORVdFUj15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfSU5VTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GSU5EX0VYRUM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9VU0VSPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfR1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfRklORF9OT1Q9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ERVBUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BBUkVOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfU0laRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSVU5FPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9ERUxFVEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9QQVRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUkVHRVg9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0NPTlRFWFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0xJTktTIGlzIG5vdCBzZXQKK0NPTkZJR19HUkVQPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRUdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9GR1JFUF9BTElBUz15CitDT05GSUdfRkVBVFVSRV9HUkVQX0NPTlRFWFQ9eQorQ09ORklHX1hBUkdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9DT05GSVJNQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1FVT1RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfVEVSTU9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfWkVST19URVJNIGlzIG5vdCBzZXQKKworIworIyBJbml0IFV0aWxpdGllcworIworIyBDT05GSUdfQk9PVENIQVJURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JPT1RDSEFSVERfQkxPQVRFRF9IRUFERVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CT09UQ0hBUlREX0NPTkZJR19GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQUxUPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0FMTF9URUxJTklUIGlzIG5vdCBzZXQKK0NPTkZJR19URUxJTklUX1BBVEg9IiIKKyMgQ09ORklHX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VU0VfSU5JVFRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0tJTExfUkVNT1ZFRCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9LSUxMX0RFTEFZPTAKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9TQ1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRfU1lTTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhUUkFfUVVJRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUX0NPUkVEVU1QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5JVF9URVJNSU5BTF9UWVBFPSIiCisjIENPTkZJR19NRVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUVTR19FTkFCTEVfT05MWV9HUk9VUCBpcyBub3Qgc2V0CisKKyMKKyMgTG9naW4vUGFzc3dvcmQgTWFuYWdlbWVudCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0FERF9TSEVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRU1PVkVfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFET1dQQVNTV0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9QV0RfR1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9TSEFET1cgaXMgbm90IHNldAorQ09ORklHX1VTRV9CQl9DUllQVD15CisjIENPTkZJR19VU0VfQkJfQ1JZUFRfU0hBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FERFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX05BTUVTIGlzIG5vdCBzZXQKK0NPTkZJR19GSVJTVF9TWVNURU1fSUQ9MAorQ09ORklHX0xBU1RfU1lTVEVNX0lEPTAKKyMgQ09ORklHX0FEREdST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQURER1JPVVBfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQUREVVNFUl9UT19HUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUxVU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTEdST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREVMX1VTRVJfRlJPTV9HUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRUWSBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQU0gaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU5fU0NSSVBUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05PTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRUNVUkVUVFkgaXMgbm90IHNldAorIyBDT05GSUdfUEFTU1dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUEFTU1dEX1dFQUtfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRQVyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFBBU1NXRCBpcyBub3Qgc2V0CisjIENPTkZJR19TVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX0NIRUNLU19TSEVMTFMgaXMgbm90IHNldAorIyBDT05GSUdfU1VMT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggRXh0MiBGUyBQcm9ncworIworQ09ORklHX0NIQVRUUj15CitDT05GSUdfRlNDSz15CisjIENPTkZJR19MU0FUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVFVORTJGUyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggTW9kdWxlIFV0aWxpdGllcworIworIyBDT05GSUdfTU9ESU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RQUk9CRV9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX09QVElPTlNfT05fQ01ETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX0NIRUNLX0FMUkVBRFlfTE9BREVEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNNT0Q9eQorQ09ORklHX1JNTU9EPXkKK0NPTkZJR19MU01PRD15CisjIENPTkZJR19GRUFUVVJFX0xTTU9EX1BSRVRUWV8yXzZfT1VUUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RQUk9CRT15CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX0JMQUNLTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBNT0QgaXMgbm90IHNldAorCisjCisjIE9wdGlvbnMgY29tbW9uIHRvIG11bHRpcGxlIG1vZHV0aWxzCisjCisjIENPTkZJR19GRUFUVVJFXzJfNF9NT0RVTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX1RSWV9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX1ZFUlNJT05fQ0hFQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfS1NZTU9PUFNfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FESU5LTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0xPQURfTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0xPQURfTUFQX0ZVTEwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVEFJTlRFRF9NT0RVTEU9eQorQ09ORklHX0ZFQVRVUkVfTU9EVVRJTFNfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfTU9EVVRJTFNfU1lNQk9MUz15CitDT05GSUdfREVGQVVMVF9NT0RVTEVTX0RJUj0iL2xpYi9tb2R1bGVzIgorQ09ORklHX0RFRkFVTFRfREVQTU9EX0ZJTEU9Im1vZHVsZXMuZGVwIgorCisjCisjIExpbnV4IFN5c3RlbSBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0JMT0NLREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFViBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FDUElEX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JMS0lEX1RZUEUgaXMgbm90IHNldAorQ09ORklHX0RNRVNHPXkKK0NPTkZJR19GRUFUVVJFX0RNRVNHX1BSRVRUWT15CitDT05GSUdfRkJTRVQ9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfUkVBRE1PREU9eQorIyBDT05GSUdfRkRGTFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GREZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfRkRJU0s9eQorIyBDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GRElTS19XUklUQUJMRT15CisjIENPTkZJR19GRUFUVVJFX0FJWF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NHSV9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVTl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX09TRl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dQVF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZESVNLX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJTkRGUyBpcyBub3Qgc2V0CitDT05GSUdfRkxPQ0s9eQorIyBDT05GSUdfRlJFRVJBTURJU0sgaXMgbm90IHNldAorQ09ORklHX0ZTQ0tfTUlOSVg9eQorIyBDT05GSUdfTUtGU19FWFQyIGlzIG5vdCBzZXQKK0NPTkZJR19NS0ZTX01JTklYPXkKK0NPTkZJR19GRUFUVVJFX01JTklYMj15CisjIENPTkZJR19NS0ZTX1JFSVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1ZGQVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VUT1BUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkcgaXMgbm90IHNldAorQ09ORklHX0hFWERVTVA9eQorIyBDT05GSUdfRkVBVFVSRV9IRVhEVU1QX1JFVkVSU0UgaXMgbm90IHNldAorIyBDT05GSUdfSEQgaXMgbm90IHNldAorQ09ORklHX0hXQ0xPQ0s9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19BREpUSU1FX0ZIUz15CisjIENPTkZJR19JUENSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENTIGlzIG5vdCBzZXQKK0NPTkZJR19MT1NFVFVQPXkKKyMgQ09ORklHX0xTUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0NPTkYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX1JFTkFNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfUkVOQU1FX1JFR0VYUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfTE9BRF9GSVJNV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfTUtTV0FQPXkKKyMgQ09ORklHX0ZFQVRVUkVfTUtTV0FQX1VVSUQgaXMgbm90IHNldAorQ09ORklHX01PUkU9eQorQ09ORklHX01PVU5UPXkKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfRkFLRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfTEFCRUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTU9VTlRfTkZTPXkKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NT1VOVF9GTEFHUz15CitDT05GSUdfRkVBVFVSRV9NT1VOVF9GU1RBQj15CitDT05GSUdfUElWT1RfUk9PVD15CitDT05GSUdfUkRBVEU9eQorIyBDT05GSUdfUkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFEUFJPRklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENXQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUklQVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1JJUFRSRVBMQVkgaXMgbm90IHNldAorIyBDT05GSUdfU0VUQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfU1dBUE9OT0ZGPXkKKyMgQ09ORklHX0ZFQVRVUkVfU1dBUE9OX1BSSSBpcyBub3Qgc2V0CitDT05GSUdfU1dJVENIX1JPT1Q9eQorQ09ORklHX1VNT1VOVD15CitDT05GSUdfRkVBVFVSRV9VTU9VTlRfQUxMPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbW91bnQvdW1vdW50CisjCitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xPT1BfQ1JFQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVRBQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPTFVNRUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQlRSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9SRUlTRVJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0ZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0pGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX05URlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9JU085NjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfVURGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTFVLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xJTlVYU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1JPTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1lTViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX09DRlMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhSQUlEIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFV0aWxpdGllcworIworIyBDT05GSUdfQ09OU1BZIGlzIG5vdCBzZXQKK0NPTkZJR19MRVNTPXkKK0NPTkZJR19GRUFUVVJFX0xFU1NfTUFYTElORVM9OTk5OTk5OQorQ09ORklHX0ZFQVRVUkVfTEVTU19CUkFDS0VUUz15CitDT05GSUdfRkVBVFVSRV9MRVNTX0ZMQUdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19NQVJLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfUkVHRVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19XSU5DSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19EQVNIQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19MSU5FTlVNUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQU5EV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkFORERVTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUFUVEFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklERVRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJTUtWT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJUk1WT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJUlNWT0wgaXMgbm90IHNldAorIyBDT05GSUdfVUJJVVBEQVRFVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESlRJTUVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfQkJDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfQkVFUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9CRUVQX0ZSRVE9MAorQ09ORklHX0ZFQVRVUkVfQkVFUF9MRU5HVEhfTVM9MAorIyBDT05GSUdfQ0hBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfTk9GQUlMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9UVFlfSElGSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfSU1QTElDSVRfQ1IgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NXQUxMT1dfT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfU0VORF9FU0NBUEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9WQVJfQUJPUlRfTEVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9DTFJfQUJPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NST05EX0QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9DQUxMX1NFTkRNQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NST05EX0RJUj0iIgorIyBDT05GSUdfQ1JPTlRBQiBpcyBub3Qgc2V0CitDT05GSUdfREM9eQorIyBDT05GSUdfRkVBVFVSRV9EQ19MSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfTU9ETE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfRkdfTlAgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERVZGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZNRU0gaXMgbm90IHNldAorIyBDT05GSUdfRUpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FSkVDVF9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCU1BMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfRVJBU0VBTEwgaXMgbm90IHNldAorIyBDT05GSUdfSU9OSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MQVNUX1NNQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEFTVF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19IRFBBUk0gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fR0VUX0lERU5USVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fU0NBTl9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fVU5SRUdJU1RFUl9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fRFJJVkVfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19UUklTVEFURV9IV0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fR0VUU0VUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUtFREVWUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01BS0VERVZTX0xFQUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NQUtFREVWU19UQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQU4gaXMgbm90IHNldAorQ09ORklHX01JQ1JPQ09NPXkKKyMgQ09ORklHX01PVU5UUE9JTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVQgaXMgbm90IHNldAorIyBDT05GSUdfUkFJREFVVE9SVU4gaXMgbm90IHNldAorIyBDT05GSUdfUkVBREFIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5MRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19SWCBpcyBub3Qgc2V0CitDT05GSUdfU0VUU0lEPXkKK0NPTkZJR19TVFJJTkdTPXkKKyMgQ09ORklHX1RBU0tTRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVNLU0VUX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19USU1FPXkKKyMgQ09ORklHX1RJTUVPVVQgaXMgbm90IHNldAorIyBDT05GSUdfVFRZU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTEwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcgVXRpbGl0aWVzCisjCisjIENPTkZJR19OQU1FSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OQU1FSUZfRVhURU5ERUQgaXMgbm90IHNldAorIyBDT05GSUdfTkJEQ0xJRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19OQz15CisjIENPTkZJR19OQ19TRVJWRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkNfRVhUUkEgaXMgbm90IHNldAorIyBDT05GSUdfTkNfMTEwX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfUElORz15CitDT05GSUdfUElORzY9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfUElORz15CisjIENPTkZJR19XSE9JUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JUFY2PXkKKyMgQ09ORklHX0ZFQVRVUkVfVU5JWF9MT0NBTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9QUkVGRVJfSVBWNF9BRERSRVNTPXkKKyMgQ09ORklHX1ZFUkJPU0VfUkVTT0xVVElPTl9FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUElORyBpcyBub3Qgc2V0CisjIENPTkZJR19CUkNUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQlJDVExfU0hPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ETlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSX1dBS0UgaXMgbm90IHNldAorIyBDT05GSUdfRkFLRUlERU5URCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQRF9BQ0NFUFRfQlJPS0VOX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRQR0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUFBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUEdFVFBVVF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0hPU1ROQU1FPXkKKyMgQ09ORklHX0hUVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfUkFOR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfVVNFX1NFTkRGSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUVUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQkFTSUNfQVVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0FVVEhfTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQ0dJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfQ09ORklHX1dJVEhfU0NSSVBUX0lOVEVSUFIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9TRVRfUkVNT1RFX1BPUlRfVE9fRU5WIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRU5DT0RFX1VSTF9TVFIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9FUlJPUl9QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1BST1hZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfR1pJUCBpcyBub3Qgc2V0CitDT05GSUdfSUZDT05GSUc9eQorQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfU1RBVFVTPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX01FTVNUQVJUX0lPQUREUl9JUlEgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfSFc9eQorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19CUk9BRENBU1RfUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JRkVOU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSUZQTFVHRCBpcyBub3Qgc2V0CitDT05GSUdfSUZVUERPV049eQorQ09ORklHX0lGVVBET1dOX0lGU1RBVEVfUEFUSD0iL3Zhci9ydW4vaWZzdGF0ZSIKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUF9CVUlMVElOIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lGQ09ORklHX0JVSUxUSU49eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWND15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JUFY2PXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX01BUFBJTkc9eQorIyBDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9FWFRFUk5BTF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fRElTQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0RBWVRJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fQ0hBUkdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1JQQyBpcyBub3Qgc2V0CitDT05GSUdfSVA9eQorQ09ORklHX0ZFQVRVUkVfSVBfQUREUkVTUz15CitDT05GSUdfRkVBVFVSRV9JUF9MSU5LPXkKK0NPTkZJR19GRUFUVVJFX0lQX1JPVVRFPXkKK0NPTkZJR19GRUFUVVJFX0lQX1RVTk5FTD15CisjIENPTkZJR19GRUFUVVJFX0lQX1JVTEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUF9TSE9SVF9GT1JNUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQX1JBUkVfUFJPVE9DT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQUREUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUExJTksgaXMgbm90IHNldAorIyBDT05GSUdfSVBST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFRVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFJVTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBDQUxDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBDQUxDX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBDQUxDX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUU1RBVD15CisjIENPTkZJR19GRUFUVVJFX05FVFNUQVRfV0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05FVFNUQVRfUFJHIGlzIG5vdCBzZXQKK0NPTkZJR19OU0xPT0tVUD15CisjIENPTkZJR19OVFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTlRQRF9TRVJWRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFNDQU4gaXMgbm90IHNldAorQ09ORklHX1JPVVRFPXkKKyMgQ09ORklHX1NMQVRUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUFNWRCBpcyBub3Qgc2V0CitDT05GSUdfVEVMTkVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVUX1RUWVBFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RFTE5FVF9BVVRPTE9HSU49eQorIyBDT05GSUdfVEVMTkVURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVERfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVERfSU5FVERfV0FJVCBpcyBub3Qgc2V0CitDT05GSUdfVEZUUD15CisjIENPTkZJR19URlRQRCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIHRmdHAvdGZ0cGQKKyMKK0NPTkZJR19GRUFUVVJFX1RGVFBfR0VUPXkKK0NPTkZJR19GRUFUVVJFX1RGVFBfUFVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEZUUF9CTE9DS1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URlRQX1BST0dSRVNTX0JBUiBpcyBub3Qgc2V0CisjIENPTkZJR19URlRQX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVJPVVRFPXkKKyMgQ09ORklHX1RSQUNFUk9VVEU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9TT1VSQ0VfUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1VTRV9JQ01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkNUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RVTkNUTF9VRyBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BEPXkKKyMgQ09ORklHX0RIQ1BSRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfRFVNUExFQVNFUz15CisjIENPTkZJR19GRUFUVVJFX1VESENQRF9XUklURV9MRUFTRVNfRUFSTFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfQkFTRV9JUF9PTl9NQUMgaXMgbm90IHNldAorQ09ORklHX0RIQ1BEX0xFQVNFU19GSUxFPSIvdmFyL2xpYi9taXNjL3VkaGNwZC5sZWFzZXMiCitDT05GSUdfVURIQ1BDPXkKK0NPTkZJR19GRUFUVVJFX1VESENQQ19BUlBJTkc9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUF9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUF9ERUJVRz0wCisjIENPTkZJR19GRUFUVVJFX1VESENQX1JGQzMzOTcgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VREhDUF84MDIxUSBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BDX0RFRkFVTFRfU0NSSVBUPSIvdXNyL3NoYXJlL3VkaGNwYy9kZWZhdWx0LnNjcmlwdCIKK0NPTkZJR19VREhDUENfU0xBQ0tfRk9SX0JVR0dZX1NFUlZFUlM9ODAKK0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1uIgorIyBDT05GSUdfVURQU1ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZDT05GSUcgaXMgbm90IHNldAorQ09ORklHX1dHRVQ9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9TVEFUVVNCQVI9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9BVVRIRU5USUNBVElPTj15CitDT05GSUdfRkVBVFVSRV9XR0VUX0xPTkdfT1BUSU9OUz15CitDT05GSUdfRkVBVFVSRV9XR0VUX1RJTUVPVVQ9eQorIyBDT05GSUdfWkNJUCBpcyBub3Qgc2V0CisKKyMKKyMgUHJpbnQgVXRpbGl0aWVzCisjCisjIENPTkZJR19MUEQgaXMgbm90IHNldAorIyBDT05GSUdfTFBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQUSBpcyBub3Qgc2V0CisKKyMKKyMgTWFpbCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX01BS0VNSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01JTUVfQ0hBUlNFVD0iIgorIyBDT05GSUdfUE9QTUFJTERJUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BPUE1BSUxESVJfREVMSVZFUlkgaXMgbm90IHNldAorIyBDT05GSUdfUkVGT1JNSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVGT1JNSU1FX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5ETUFJTCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2VzcyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0lPU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NUFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfTk1FVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQVAgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUFNUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BXRFggaXMgbm90IHNldAorIyBDT05GSUdfU01FTUNBUCBpcyBub3Qgc2V0CitDT05GSUdfVVBUSU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVVBUSU1FX1VUTVBfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRlJFRT15CitDT05GSUdfRlVTRVI9eQorQ09ORklHX0tJTEw9eQorQ09ORklHX0tJTExBTEw9eQorIyBDT05GSUdfS0lMTEFMTDUgaXMgbm90IHNldAorIyBDT05GSUdfUEdSRVAgaXMgbm90IHNldAorQ09ORklHX1BJRE9GPXkKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfU0lOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfT01JVCBpcyBub3Qgc2V0CisjIENPTkZJR19QS0lMTCBpcyBub3Qgc2V0CitDT05GSUdfUFM9eQorQ09ORklHX0ZFQVRVUkVfUFNfV0lERT15CisjIENPTkZJR19GRUFUVVJFX1BTX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QU19BRERJVElPTkFMX0NPTFVNTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QU19VTlVTVUFMX1NZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX1JFTklDRT15CitDT05GSUdfQkJfU1lTQ1RMPXkKK0NPTkZJR19UT1A9eQorQ09ORklHX0ZFQVRVUkVfVE9QX0NQVV9VU0FHRV9QRVJDRU5UQUdFPXkKK0NPTkZJR19GRUFUVVJFX1RPUF9DUFVfR0xPQkFMX1BFUkNFTlRTPXkKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX1NNUF9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BfREVDSU1BTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BfU01QX1BST0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UT1BNRU0gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSE9XX1RIUkVBRFMgaXMgbm90IHNldAorQ09ORklHX1dBVENIPXkKKworIworIyBSdW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX1JVTlNWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlNWRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUlVOU1ZESVJfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NWIGlzIG5vdCBzZXQKK0NPTkZJR19TVl9ERUZBVUxUX1NFUlZJQ0VfRElSPSIiCisjIENPTkZJR19TVkxPR0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0VUVUlER0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVlVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZESVIgaXMgbm90IHNldAorIyBDT05GSUdfU09GVExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hDT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfR0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQURfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVENIUEFUSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNUT1JFQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTkNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTkNPTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VMSU5VWEVOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VURU5GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZJTEVTX0NIRUNLX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRTRUJPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0VTVEFUVVMgaXMgbm90IHNldAorCisjCisjIFNoZWxscworIworQ09ORklHX0FTSD15CitDT05GSUdfQVNIX0JBU0hfQ09NUEFUPXkKKyMgQ09ORklHX0FTSF9JRExFX1RJTUVPVVQgaXMgbm90IHNldAorQ09ORklHX0FTSF9KT0JfQ09OVFJPTD15CitDT05GSUdfQVNIX0FMSUFTPXkKK0NPTkZJR19BU0hfR0VUT1BUUz15CitDT05GSUdfQVNIX0JVSUxUSU5fRUNITz15CitDT05GSUdfQVNIX0JVSUxUSU5fUFJJTlRGPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9URVNUPXkKKyMgQ09ORklHX0FTSF9DTURDTUQgaXMgbm90IHNldAorIyBDT05GSUdfQVNIX01BSUwgaXMgbm90IHNldAorQ09ORklHX0FTSF9PUFRJTUlaRV9GT1JfU0laRT15CisjIENPTkZJR19BU0hfUkFORE9NX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0FTSF9FWFBBTkRfUFJNVD15CitDT05GSUdfQ1RUWUhBQ0s9eQorIyBDT05GSUdfSFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JBU0hfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQlJBQ0VfRVhQQU5TSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSEVMUCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lOVEVSQUNUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfU0FWRUhJU1RPUlkgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9KT0IgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9USUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSUYgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0NBU0UgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9GVU5DVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRVhQT1JUX04gaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9NT0RFX1ggaXMgbm90IHNldAorIyBDT05GSUdfTVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15CisjIENPTkZJR19GRUFUVVJFX1NIX0lTX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19BU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CQVNIX0lTX0hVU0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19OT05FPXkKK0NPTkZJR19TSF9NQVRIX1NVUFBPUlQ9eQorIyBDT05GSUdfU0hfTUFUSF9TVVBQT1JUXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0VYVFJBX1FVSUVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIX05PRk9SSyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9ISVNURklMRVNJWkU9eQorCisjCisjIFN5c3RlbSBMb2dnaW5nIFV0aWxpdGllcworIworQ09ORklHX1NZU0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEU9eQorQ09ORklHX0ZFQVRVUkVfUkVNT1RFX0xPRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0RVUD15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX1JFQURfQlVGRkVSX1NJWkU9MjU2CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0dfQlVGRkVSX1NJWkU9MTYKK0NPTkZJR19MT0dSRUFEPXkKK0NPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HPXkKK0NPTkZJR19LTE9HRD15CitDT05GSUdfRkVBVFVSRV9LTE9HRF9LTE9HQ1RMPXkKK0NPTkZJR19MT0dHRVI9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwNTc4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke0JQTn06IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRkYWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApAQCAtMCwwICsxLDkxNCBAQAorLyogWW9jdG8gUHJvamVjdCBsb2dvIGZvciBwc3BsYXNoCisgKgorICogQ3JlYXRlZCB1c2luZyBtYWtlLWltYWdlLWhlYWRlci5zaCAoZGlzdHJpYnV0ZWQgd2l0aCBwc3BsYXNoKQorICovCisKKy8qIEdka1BpeGJ1ZiBSR0JBIEMtU291cmNlIGltYWdlIGR1bXAgMS1ieXRlLXJ1bi1sZW5ndGgtZW5jb2RlZCAqLworCisjZGVmaW5lIFBPS1lfSU1HX1JPV1NUUklERSAoMTcwOCkKKyNkZWZpbmUgUE9LWV9JTUdfV0lEVEggKDQyNykKKyNkZWZpbmUgUE9LWV9JTUdfSEVJR0hUICgyMTQpCisjZGVmaW5lIFBPS1lfSU1HX0JZVEVTX1BFUl9QSVhFTCAoNCkgLyogMzpSR0IsIDQ6UkdCQSAqLworI2RlZmluZSBQT0tZX0lNR19STEVfUElYRUxfREFUQSAoKHVpbnQ4KikgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMjM3XDM1MFwzNTRcMzQwXDM3N1wxXDM1MFwzNTRcMzQyXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMlwyNDFcMjQzIiBcCisgICJcMjQ0XDM3NztBQ1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDJcMjc1XDI3N1wyNzdcMzc3TFFSXDM3N1wyMDIuNDZcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjUwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDJcMzIxXDMyMlwzMjNcMzc3XWFjXDM3N1wyMDQuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wzXDM0NlwzNDdcMzQ3XDM3NyIgXAorICAid3t8XDM3Ny81N1wzNzdcMjA1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMlwyMjNcMjI2XDIyN1wzNzc1Oz1cMzc3XDIwNy40NiIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDMiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwyNTNcMjU1XDI1NlwzNzdCSEpcMzc3XDIxMS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDJcMzA0IiBcCisgICJcMzA2XDMwNlwzNzdQVVdcMzc3XDIxMy40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzA2XDMxMFwzMTFcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDMiIFwKKyAgIlwzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwMyIgXAorICAiXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMwNVwzNTBcMzU0XDM0MFwzNzdcMVwzNDZcMzQ3IiBcCisgICJcMzQ3XDM3N1wyNTZcMzUwXDM1NFwzNDBcMzc3XDFcMzQxXDM0MlwzNDNcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjUyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDQiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcM1wyMjBcMjIzXDIyNFwzNzc1Oz1cMzc3XDI0NFwyNDdcMjUwXDM3N1wyNTRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcNFwzMDJcMzAzXDMwNFwzNzcxNzlcMzc3XDIwNVwyMTBcMjEyXDM3N1wzNTBcMzU0XDM0MlwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wyXDI1MFwyNTNcMjUzXDM3Nz5ERlwzNzdcMjAyLjQ2IiBcCisgICJcMzc3XDFARkdcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVleYFwzNzdcMjAyLjQ2XDM3N1wyO0FDXDM3N1wyNDFcMjQzIiBcCisgICJcMjQ0XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAwXDM1MFwzNTRcMzQwXDM3N1wyXDMwM1wzMDVcMzA1XDM3N1BVVyIgXAorICAiXDM3N1wyMDUuNDZcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwzMDNcMzA1XDMwNVwzNzciIFwKKyAgIlwyMDUuNDZcMzc3XDJMUVJcMzc3XDI3NVwyNzdcMjc3XDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDE2XDM1MFwzNTJcMzUxIiBcCisgICJcMzc3XDMxM1wzMTRcMzE1XDM3N1wyNTRcMjU3XDI1N1wzNzdcMjI0XDIyN1wyMzBcMzc3XDIxNFwyMjBcMjIxXDM3NyIgXAorICAiXDIwMlwyMDVcMjA2XDM3N3d7fFwzNzd1eXtcMzc3XDIwMlwyMDVcMjA2XDM3N1wyMTNcMjE2XDIxN1wzNzdcMjIzXDIyNiIgXAorICAiXDIyN1wzNzdcMjUzXDI1NVwyNTZcMzc3XDMxMFwzMTJcMzEyXDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzYyXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjY3XDM1MFwzNTRcMzQwXDM3N1wxNlwzNTJcMzU0IiBcCisgICJcMzQ1XDM3N1wzMTVcMzE2XDMxN1wzNzdcMjU3XDI2MlwyNjNcMzc3XDIyNVwyMzBcMjMxXDM3N1wyMTZcMjIxXDIyMiIgXAorICAiXDM3N1wyMDJcMjA1XDIwNlwzNzd4fH1cMzc3dHh5XDM3N1wyMDJcMjA1XDIwNlwzNzdcMjExXDIxNFwyMTVcMzc3XDIyMSIgXAorICAiXDIyNFwyMjVcMzc3XDI0N1wyNTJcMjUzXDM3N1wzMDVcMzA2XDMwN1wzNzdcMzQyXDM0M1wzNDNcMzc3XDM3MFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMyN1wzMzBcMzMwXDM3N2JnaFwzNzdcMjA3LjQ2XDM3N1wxIiI5XDc3QVwzNzdcMjUyXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFdYWNcMzc3XDIwNy40NlwzNzdcMmJnaFwzNzdcMzI3XDMzMFwzMzBcMzc3XDIzNlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1w0XDMyM1wzMjRcMzI0XDM3N1wyMzdcMjQyXDI0M1wzNzdrb3BcMzc3OT5AXDM3N1wyMTYuNDZcMzc3XDQiIFwKKyAgIjc9XDc3XDM3N2ZqbFwzNzdcMjMyXDIzNVwyMzZcMzc3XDMxNlwzMTdcMzIwXDM3N1wzMDNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcN1wzNTJcMzU0XDM0NlwzNzdcMzMyXDMzM1wzMzRcMzc3XDMwM1wzMDVcMzA1XDM3N1wyNzFcMjczXDI3NFwzNzdcMjYzIiBcCisgICJcMjY1XDI2NlwzNzdcMjUzXDI1NlwyNTdcMzc3XDI0N1wyNTJcMjUzXDM3N1wyNDRcMjM1XDI0MFwyNDFcMzc3XDF9XDIwMCIgXAorICAiXDIwMlwzNzdcMjE1LjQ2XDM3N1wxXDIyN1wyMzJcMjMzXDM3N1wyMjFcMjM1XDI0MFwyNDFcMzc3XDFcMzM1XDMzNlwzMzYiIFwKKyAgIlwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1w0XDMzMFwzMzJcMzMyXDM3N1wyNDRcMjQ3XDI1MFwzNzdwdHVcMzc3PkNFIiBcCisgICJcMzc3XDIxNi40NlwzNzdcNCIiNDo8XDM3N19kZVwzNzdcMjI0XDIzMFwyMzFcMzc3XDMxMVwzMTJcMzEzXDM3N1wzNjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcM1wzNTJcMzUzXDM0N1wzNzd+XDIwMlwyMDNcMzc3MDY4XDM3N1wyMTEuNDZcMzc3XDFcMjE2IiBcCisgICJcMjIxXDIyMlwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wxXDMwNlwzMTBcMzExXDM3N1wyMTEuNDZcMzc3XDMiIjA2OCIgXAorICAiXDM3N35cMjAyXDIwM1wzNzdcMzUyXDM1M1wzNDdcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcM1wzMzJcMzMzXDMzNFwzNzciIFwKKyAgIlwyMTRcMjIwXDIyMVwzNzdDSUpcMzc3XDIyNi40NlwzNzdcMz5DRVwzNzdcMjA3XDIxMlwyMTNcMzc3XDMyMVwzMjJcMzIzIiBcCisgICJcMzc3XDI3MlwzNTBcMzU0XDM0MFwzNzdcNlwzMjRcMzI1XDMyNVwzNzdcMjU3XDI2MVwyNjJcMzc3XDIxM1wyMTdcMjIwIiBcCisgICJcMzc3Z2tsXDM3N0ZLTVwzNzcyODpcMzc3XDMxMy40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjM1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDNcMzQxXDM0MlwzNDJcMzc3XDIyNFwyMzBcMjMxXDM3N0pPUVwzNzdcMjI2LjQ2XDM3N1wzIiI5XDc3QVwzNzciIFwKKyAgIn1cMjAwXDIwMlwzNzdcMzEyXDMxM1wzMTRcMzc3XDM1NlwzNTBcMzU0XDM0MFwzNzdcMlwyMjVcMjMwXDIzMVwzNzc4IiBcCisgICI+XDc3XDM3N1wyMTMuNDZcMzc3XDIiIjU7PVwzNzdcMzUwXDM1MlwzNTFcMzc3XDI0N1wzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiX2RlXDM3N1wyMTMuNDZcMzc3XDIiIjg+XDc3XDM3N1wyMzJcMjM1XDIzNlwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wyIiBcCisgICJcMjY0XDI2NlwyNjZcMzc3VltdXDM3N1wyMzQuNDZcMzc3XDJQVVZcMzc3XDI1M1wyNTZcMjU3XDM3N1wyNjRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcNFwzMjJcMzIzXDMyNFwzNzdcMjM1XDIzN1wyNDBcMzc3Z2tsXDM3NzY8PlwzNzdcMzIxLjQ2XDM3N1wxIiBcCisgICJcMjY1XDI2N1wyNzBcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyNzdcMzAxXDMwMlwzNzdgZWZcMzc3XDIzNC40NiIgXAorICAiXDM3N1wyR01OXDM3N1wyNDBcMjQzXDI0NFwzNzdcMzU0XDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMVwyMDJcMjA1XDIwNlwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxXDMxMVwzMTJcMzEzXDM3N1wyMTUuNDZcMzc3XDEiIFwKKyAgIkNJSlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDI0MVwyNDNcMjQ0XDM3N0ZLTVwzNzdcMjQwLjQ2XDM3N1wyQEZHIiBcCisgICJcMzc3XDIzMVwyMzNcMjM0XDM3N1wyNTdcMzUwXDM1NFwzNDBcMzc3XDNcMzI1XDMyNlwzMjdcMzc3XDIxNFwyMjBcMjIxIiBcCisgICJcMzc3RUpMXDM3N1wzMjUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMlwyNTVcMjU3IiBcCisgICJcMjYwXDM3N05TVVwzNzdcMjQwLjQ2XDM3N1wzIiI5XDc3QVwzNzdcMjIwXDIyM1wyMjRcMzc3XDM1MFwzNTRcMzQyXDM3NyIgXAorICAiXDM1MVwzNTBcMzU0XDM0MFwzNzdcMVwyNTFcMjUzXDI1NFwzNzdcMjE1LjQ2XDM3N1wyIiIxNzlcMzc3XDM0MVwzNDIiIFwKKyAgIlwzNDNcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMWJmaFwzNzdcMjE1LjQ2XDM3N1wxXDI0NFwyNDdcMjUwXDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwyNzVcMjc3XDI3N1wzNzdMUVJcMzc3XDI0NC40NlwzNzdcMkJISlwzNzdcMjY0XDI2NyIgXAorICAiXDI2N1wzNzdcMjUzXDM1MFwzNTRcMzQwXDM3N1wyXDI1M1wyNTZcMjU3XDM3N1BVVlwzNzdcMzMwLjQ2XDM3N1wxXDI2NSIgXAorICAiXDI2N1wyNzBcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwzMTNcMzE0XDMxNVwzNzdVWVtcMzc3XDI0NC40NlwzNzciIFwKKyAgIlwyO0FDXDM3N1wyNDdcMjUyXDI1M1wzNzdcMzUxXDM1MFwzNTRcMzQwXDM3N1wxTFFTXDM3N1wyMTUuNDZcMzc3XDF4IiBcCisgICJ8fVwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wxXDMxNFwzMTZcMzE2XDM3N1wyMTUuNDZcMzc3XDFCR0lcMzc3XDIyMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM0NlwzNDdcMzQ3XDM3N2htblwzNzdcMjUwLjQ2XDM3N1wyXWFjXDM3N1wzNDBcMzQxIiBcCisgICJcMzQxXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDJcMjM1XDIzN1wyNDBcMzc3QkdJXDM3N1wzMzIuNDZcMzc3XDFcMjY1IiBcCisgICJcMjY3XDI3MFwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3N3R4elwzNzdcMjUwLjQ2XDM3NyIgXAorICAiXDJQVVdcMzc3XDMyNFwzMjZcMzI2XDM3N1wzNDdcMzUwXDM1NFwzNDBcMzc3XDFcMjcwXDI3MlwyNzJcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wyIiIwNjhcMzc3XDMzMFwzMzJcMzMyXDM3N1wyNDNcMzUwXDM1NFwzNDBcMzc3XDFlaWtcMzc3XDIxNS40IiBcCisgICI2XDM3N1wxXDI0MlwyNDRcMjQ1XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDJcMjc1XDI3N1wyNzdcMzc3PUJEXDM3NyIgXAorICAiXDI1Mi40NlwzNzdcMiIiOD5cNzdcMzc3XDI2MVwyNjNcMjY0XDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDJcMjY1XDI2NyIgXAorICAiXDI3MFwzNzdCSEpcMzc3XDMzNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMxMyIgXAorICAiXDMxNVwzMTVcMzc3RUpMXDM3N1wyNTIuNDZcMzc3XDIiIjI4OlwzNzdcMjQwXDI0M1wyNDRcMzc3XDM0N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxVltdXDM3N1wyMTUuNDZcMzc3XDFrcHFcMzc3XDI0MlwzNTBcMzU0XDM0MFwzNzdcMVwzMTZcMzE3XDMyMCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjU2LjQiIFwKKyAgIjZcMzc3XDF5fVwxNzdcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzdcMlwzMzZcMzM3XDMzN1wzNzdhZWdcMzc3XDMzNi40IiBcCisgICI2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMjMxXDIzNFwyMzVcMzc3MDY4XDM3NyIgXAorICAiXDI1NS40NlwzNzdcMWltb1wzNzdcMzQ2XDM1MFwzNTRcMzQwXDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMVwzMTdcMzIxXDMyMVwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wxZ2xtXDM3N1wyMTUuNDZcMzc3XDFcMjM2XDI0MSIgXAorICAiXDI0MlwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxcHR1XDM3N1wyNjAuNDZcMzc3XDFjaGlcMzc3XDIzN1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyXDI2NFwyNjdcMjY3XDM3Nzg+XDc3XDM3N1wzMzcuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIwMlwyMDVcMjA2XDM3N1wyNjAuNDZcMzc3XDJUWVpcMzc3XDM1MlwzNTNcMzQ3XDM3NyIgXAorICAiXDM0NVwzNTBcMzU0XDM0MFwzNzdcMWNoaVwzNzdcMjE1LjQ2XDM3N1wxYmZoXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMjFcMzIyXDMyM1wzNzdcMjE1LjQ2XDM3N1wxPkRGXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDI2MiIgXAorICAiLjQ2XDM3N1wyVFlaXDM3N1wzNTJcMzUzXDM0N1wzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDIwMlwyMDVcMjA2XDM3NyIgXAorICAiXDM0MS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxcHR2XDM3N1wyNjIuNDZcMzc3IiBcCisgICJcMkhNT1wzNzdcMzM3XDM0MFwzNDBcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMjJcMzIzXDMyNFwzNzcvNTdcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMzdcMzUwXDM1NFwzNDBcMzc3XDFrb3BcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDIzNFwyMzdcMjQwXDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFhZWdcMzc3XDI2NC40NlwzNzdcMVNYWVwzNzdcMjMzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFmamxcMzc3XDM0Mi40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFwdHVcMzc3XDI2NC40NlwzNzdcMkVKTFwzNzdcMzUwXDM1MVwzNTFcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxcHR2XDM3N1wyMTUuNDZcMzc3XDFWW11cMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI2XDMyNlwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDE9QkRcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMW5yc1wzNzdcMjI2LjQ2XDM3N1wxMj1CRFwzNzdgZSIgXAorICAiZlwzNzdcMjAwXDIwNFwyMDVcMzc3XDIyMFwyMjNcMjI0XDM3N1wyMzNcMjM2XDIzN1wzNzdcMjM0XDIzN1wyNDBcMzc3IiBcCisgICJcMjIwXDIyM1wyMjRcMzc3XDIwMlwyMDVcMjA2XDM3N2JnaFwzNzc+REZcMzc3XDIyNi40NlwzNzdcMWRpalwzNzdcMjMxIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDIzMS40NlwzNzdcMyIiMzk7XDM3N0VKTFwzNzdZXmBcMzc3XDIwMmZqbCIgXAorICAiXDM3N1wxc3d4XDM3N1wyNDR0eHlcMzc3XDFfZGVcMzc3XDIxNS40NlwzNzdcMXB0dVwzNzdcMjIxdHh5XDM3N1wxXDMxNiIgXAorICAiXDMxN1wzMjBcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjI2LjQ2XDM3N1wxMiIiOVw3NyIgXAorICAiQVwzNzdbYGFcMzc3fVwyMDBcMjAyXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjMxXDIzNFwyMzVcMzc3XDIzNVwyNDBcMjQxIiBcCisgICJcMzc3XDIyMFwyMjNcMjI0XDM3N1wyMDVcMjEwXDIxMlwzNzdmamxcMzc3QkhKXDM3N1wyMjYuNDZcMzc3XDFTWFlcMzc3IiBcCisgICJcMzQ0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM2XDM3NzA2OFwzNzdcMjE1LjQ2XDM3N1wxXDI3MVwyNzNcMjc0IiBcCisgICJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMWxxclwzNzdcMjE1LjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyMTVcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMDdcMjEzXDIxNFwzNzdcMjI0LjQ2XDM3N1wzUFVXXDM3N1wyMzRcMjM3XDI0MFwzNzdcMzI3IiBcCisgICJcMzMwXDMzMFwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1wzXDMzMlwzMzNcMzM0XDM3N1wyMzZcMjQxXDI0MlwzNzdQVSIgXAorICAiVlwzNzdcMjI0LjQ2XDM3N1wxeHx9XDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDFbYGFcMzc3XDIyNS40NlwzNzdcNUsiIFwKKyAgIlBSXDM3N1wxNzdcMjAzXDIwNFwzNzdcMjQ3XDI1MlwyNTNcMzc3XDMxMVwzMTJcMzEzXDM3N1wzNTJcMzU0XDM0NlwzNzciIFwKKyAgIlwyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjM3XDI0MlwyNDNcMzc3XDIyNC40NlwzNzdcM0pPUVwzNzdcMjI2XDIzMVwyMzJcMzc3XDMyMFwzMjJcMzIyXDM3NyIgXAorICAiXDIxMlwzNTBcMzU0XDM0MFwzNzdcM1wzMzZcMzM3XDMzN1wzNzdcMjQyXDI0NVwyNDZcMzc3WV1fXDM3N1wyMjQuNDYiIFwKKyAgIlwzNzdcMWVpa1wzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3N1wxflwyMDFcMjAyXDM3N1wyMTUuNDZcMzc3XDFPVFZcMzc3IiBcCisgICJcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDMyNlwzMjdcMzMwXDM3Ny81N1wzNzdcMjE0LjQ2XDM3N1wxO0FDXDM3N1wyMTUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjIyLjQ2XDM3N1wzLzU3XDM3N3B0dVwzNzdcMzE0XDMxNiIgXAorICAiXDMxNlwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wyXDMxMlwzMTNcMzE0XDM3N2pucFwzNzdcMjIzLjQ2XDM3N1wxXDI1NCIgXAorICAiXDI1N1wyNTdcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMXl8flwzNzdcMjIyLjQ2XDM3N1w0LzU3XDM3N11hY1wzNzciIFwKKyAgIlwyNDdcMjUyXDI1M1wzNzdcMzQ2XDM0N1wzNDdcMzc3XDI1N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMlwzMTZcMzE3XDMyMFwzNzcwNjhcMzc3XDIyMi40NlwzNzdcMiIgXAorICAiZmpsXDM3N1wzMDVcMzA2XDMwN1wzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wzXDMyM1wzMjRcMzI0XDM3N3R4eVwzNzciIFwKKyAgIjA2OFwzNzdcMjIyLjQ2XDM3N1wxXDIyNVwyMzBcMjMxXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDJcMzQ3XDM1MFwzNTAiIFwKKyAgIlwzNzc1OjxcMzc3XDIxNS40NlwzNzdcMVwyNTZcMjYwXDI2MVwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxcHR1XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwyMjZcMjMxXDIzMlwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wyXDM0NFwzNDVcMzQ1XDM3NzoiIFwKKyAgIkBCXDM3N1wyMjEuNDZcMzc3XDJna2xcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzI0IiBcCisgICJcMzI2XDMyNlwzNzdeY2VcMzc3XDIyMS40NlwzNzdcMiIiNjw+XDM3N1wzMzVcMzM2XDMzN1wzNzdcMjIzXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjM1XDI0MFwyNDFcMzc3XDIyMS40NlwzNzdcMyIiMzk7XDM3N1wxNzdcMjAzXDIwNFwzNzdcMzQxIiBcCisgICJcMzQyXDM0MlwzNzdcMjYyXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzN1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3N0ZLTVwzNzdcMjIxLjQ2XDM3N1wyW2BhXDM3N1wzMjFcMzIyXDMyMyIgXAorICAiXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzM1XDMzNlwzMzdcMzc3a29wXDM3N1wyMjEuNDZcMzc3XDIiIjA2OFwzNzciIFwKKyAgIlwzMTRcMzE2XDMxNlwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDIxM1wyMTdcMjIwXDM3N1wyMTUuNDZcMzc3XDFGIiBcCisgICJLTVwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDMzMVwzMzJcMzMzXDM3Ny81N1wzNzdcMjE0LjQ2XDM3N1wxOkBCXDM3NyIgXAorICAiXDIxNVwzNTBcMzU0XDM0MFwzNzdcMV5jZVwzNzdcMjIwLjQ2XDM3N1wyO0FDXDM3N1wyNjVcMjY3XDI3MFwzNzdcMjMwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjUxXDI1M1wyNTRcMzc3NTs9XDM3N1wyMjAuNDZcMzc3XDFZXV9cMzc3XDIyMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMyNVwzMjZcMzI3XDM3NzA2OFwzNzdcMjIwLjQ2XDM3N1wycHR1XDM3N1wzNDZcMzQ2XDM0NyIgXAorICAiXDM3N1wyNjRcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDF0eHpcMzc3XDIyMC40NlwzNzdcMiIiNjw+XDM3N1wyNTBcMjUzXDI1M1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMjcwXDI3MlwyNzJcMzc3PEJDXDM3N1wyMjAuNDZcMzc3XDFHTU5cMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMlwzNTAiIFwKKyAgIlwzNTRcMzQyXDM3NzlcNzdBXDM3N1wyMTUuNDZcMzc3XDFcMjQ0XDI0N1wyNTBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxcnZ3XDM3N1wyMTUuNDZcMzc3XDFcMjIzXDIyNlwyMjdcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNjFcMjYzIiBcCisgICJcMjY0XDM3N1wyMjAuNDZcMzc3XDJYXV5cMzc3XDM0NFwzNDVcMzQ1XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDJcMzI3IiBcCisgICJcMzMwXDMzMFwzNzdITU9cMzc3XDIyMC40NlwzNzdcMVwyNTVcMjU3XDI2MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFVWVtcMzc3XDIxNy40NlwzNzdcMjxCQ1wzNzdcMjc0XDI3NlwyNzZcMzc3XDI2NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjIwLjQ2IiBcCisgICJcMzc3XDJMUVNcMzc3XDMzMFwzMzJcMzMyXDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDJcMzQyXDM0M1wzNDNcMzc3UyIgXAorICAiWFlcMzc3XDIyMC40NlwzNzdcMVwyMjRcMjMwXDIzMVwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDIzMFwyMzNcMjM0IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMUBGR1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyXDMzMlwzMzNcMzM0XDM3NzA2OFwzNzciIFwKKyAgIlwyMTQuNDZcMzc3XDEiIjk+QFwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxQUZIXDM3N1wyMTcuNDZcMzc3XDFna2xcMzc3IiBcCisgICJcMjM1XDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTNcMzQ3XDM3N09UVlwzNzdcMjE3LjQ2XDM3N1wxXDc3RUdcMzc3XDIyMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIzMlwyMzVcMjM2XDM3N1wyMTcuNDZcMzc3XDJNUlRcMzc3XDM0MFwzNDFcMzQxXDM3NyIgXAorICAiXDI2N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMU9UVlwzNzdcMjE3LjQ2XDM3N1wyV1xcXVwzNzdcMzUwXDM1NFwzNDJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiXFxhYlwzNzdcMjE3LjQ2XDM3N1wyIiI1OjxcMzc3XDM0NlwzNDZcMzQ3XDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkFGSFwzNzdcMjE1LjQ2XDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDF1eXtcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIyMFwyMjRcMjI1XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjE3XDIyMlwyMjNcMzc3XDIxNy4iIFwKKyAgIjQ2XDM3N1wxaW1vXDM3N1wyMzdcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNDZcMzc3TFFSXDM3N1wyMTcuNDZcMzc3IiBcCisgICJcMVwyMjBcMjI0XDIyNVwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxIiI5PkBcMzc3XDIxNi40NlwzNzdcMk9UVlwzNzciIFwKKyAgIlwzNTFcMzU0XDM0M1wzNzdcMjcwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzNSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDI0NlwyNTFcMjUyXDM3N1wyMTcuNDZcMzc3XDFbYGFcMzc3XDI0MFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxW2BhXDM3N1wyMTcuNDZcMzc3XDF7XDE3N1wyMDBcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxIiBcCisgICJcMjUyXDM3N1wyMTUuNDZcMzc3XDIiIjlcNzdBXDM3N1wzNTBcMzU0XDM0MlwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMzM1XDMzNlwzMzdcMzc3MDY4XDM3N1wyMTQuNDZcMzc3XDIiIjg+XDc3XDM3N1wzNTFcMzU0XDM0M1wzNzdcMjE0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDEiIjk+QFwzNzdcMjE2LjQ2XDM3N1wxUVZYXDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDIiIFwKKyAgIlwzNDFcMzQyXDM0M1wzNzdcNzdFR1wzNzdcMjE2LjQ2XDM3N1wxO0FDXDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjI0IiBcCisgICJcMjMwXDIzMVwzNzdcMjE2LjQ2XDM3N1wyR0xOXDM3N1wzNTBcMzUxXDM1MVwzNzdcMjcxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM1XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMkVKTFwzNzdcMzUwXDM1MVwzNTFcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzdKT1FcMzc3IiBcCisgICJcMjE2LjQ2XDM3N1wyIiIxNzlcMzc3XDM0NlwzNDdcMzQ3XDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIxNlwyMjFcMjIyXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIxNS40NlwzNzdcMVwyMTYiIFwKKyAgIlwyMjFcMjIyXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDIxNi40NlwzNzdcMiIiNz1cNzciIFwKKyAgIlwzNzdcMzM3XDM0MFwzNDBcMzc3XDI0MlwzNTBcMzU0XDM0MFwzNzdcMlwzMTJcMzEzXDMxNFwzNzcwNjhcMzc3XDIxNiIgXAorICAiLjQ2XDM3N1wxXDI0MlwyNDRcMjQ1XDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDE7QUNcMzc3XDIxNS40NlwzNzdcMiIiMCIgXAorICAiNjhcMzc3XDMxNlwzMTdcMzIwXDM3N1wyNzJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwyMzRcMzUwXDM1NFwzNDBcMzc3XDFcMjU3XDI2MVwyNjJcMzc3XDIxNi40NlwzNzdcMiIiMDY4XDM3N1wzMTdcMzIwIiBcCisgICJcMzIwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzMwXDMzMlwzMzJcMzc3NTo8XDM3N1wyMTYuNDZcMzc3XDFcMjEzIiBcCisgICJcMjE2XDIxN1wzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDI2NFwyNjZcMjY2XDM3N1wyMTUuNDZcMzc3XDIiIjU7PSIgXAorICAiXDM3N1wzNTBcMzUyXDM1MVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wyXDMzN1wzNDBcMzQwXDM3NzA2OFwzNzdcMjE0IiBcCisgICIuNDZcMzc3XDIiIjY8PlwzNzdcMzUyXDM1NFwzNDZcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMT5ERlwzNzdcMjE2LiIgXAorICAiNDZcMzc3XDFcMjQ2XDI1MFwyNTFcMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcMVwyMTZcMjIxXDIyMlwzNzdcMjE2LjQiIFwKKyAgIjZcMzc3XDFHTE5cMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzdcMjE2LjQ2XDM3N1wxXDIyMyIgXAorICAiXDIyNlwyMjdcMzc3XDI3M1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMU9UVlwzNzdcMjE2LjQ2XDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNDRcMjQ3XDI1MFwzNzdcMjE2LjQ2XDM3N1wxIiI4Plw3N1wzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3N1wxVVlbXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwyMDJcMjA1XDIwNlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxen5cMTc3XDM3N1wyMTUuNDYiIFwKKyAgIlwzNzdcMVwyMTNcMjE2XDIxN1wzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxXDI3MVwyNzNcMjc0XDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMVpfYVwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxSk9RXDM3N1wyMTYuNDZcMzc3XDFcMzEwXDMxMlwzMTJcMzc3XDIxMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxW2BhXDM3N1wyMTUuNDZcMzc3XDFCSEpcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMVwzMjBcMzIyXDMyMlwzNzdcMjE2LjQ2IiBcCisgICJcMzc3XDFITU9cMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMVxcYWJcMzc3XDIxNi40NlwzNzdcMVwyNjBcMjYzXDI2MyIgXAorICAiXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMiIiMTc5XDM3N1wzNDEiIFwKKyAgIlwzNDJcMzQyXDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDJcMzQxXDM0MlwzNDNcMzc3MTc5XDM3N1wyMTQuNDZcMzc3IiBcCisgICJcMiIiNTs9XDM3N1wzNTJcMzUzXDM0N1wzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxbnJzXDM3N1wyMTYuNDZcMzc3XDEiIFwKKyAgIlwzMTZcMzE3XDMyMFwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxXDI3M1wyNzVcMjc2XDM3N1wyMTYuNDZcMzc3XDF8IiBcCisgICJcMjAwXDIwMVwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTYuNDZcMzc3XDFcMjUzXDI1NSIgXAorICAiXDI1NlwzNzdcMjc0XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMTYuNDZcMzc3XDFcMjcwXDI3MlwyNzJcMzc3XDI0NlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDMyMVwzMjJcMzIzXDM3Ny81N1wzNzdcMjE1LjQ2XDM3N1wxZWlrXDM3N1wzNDRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMV9kZVwzNzdcMjE1LjQ2XDM3N1wxeHx9XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDF+XDIwMVwyMDJcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIxMFwyMTRcMjE1XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3Mjg6XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMWhtblwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wxWF1eXDM3N1wyMTUuNDZcMzc3XDEiIjk+QFwzNzciIFwKKyAgIlwyMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzNFwyMzVcMzc3XDIxNS40NlwzNzdcMTtBQ1wzNzdcMjc1XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxPUJEXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVBVV1wzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wxb3N0XDM3N1wyMTUuNDZcMzc3XDIiIjA2OFwzNzdcMzUxIiBcCisgICJcMzUyXDM1MFwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDMxNlwzMTdcMzIwXDM3N1wyMTUuNDZcMzc3XDIiIjA2OCIgXAorICAiXDM3N1wzMzBcMzMyXDMzMlwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wyXDM0M1wzNDRcMzQ0XDM3NzE3OVwzNzdcMjE0IiBcCisgICIuNDZcMzc3XDIiIjQ6PFwzNzdcMzUwXDM1MlwzNTFcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNjVcMjY3XDI3MCIgXAorICAiXDM3N1wyMTYuNDZcMzc3XDFcMzA1XDMwNlwzMDdcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3M1wzNzciIFwKKyAgIlwyMTYuNDZcMzc3XDFcMzAzXDMwNVwzMDVcMzc3XDIxMVwzNTBcMzU0XDM0MFwzNzdcMWVpa1wzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDFcMjA3XDIxMlwyMTNcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwzMTNcMzE0XDMxNVwzNzdcMjE2LjQ2XDM3N1wxXDI2MFwyNjNcMjYzXDM3N1wyNTBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMTdcMzIwXDMyMFwzNzdcMjE2LjQ2XDM3N1wxXDI1NFwyNTdcMjU3XDM3N1wzNDRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMW5yc1wzNzdcMjE1LjQ2XDM3N1wxa3BxXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFcMjAwXDIwNFwyMDUiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFcMjAxXDIwNFwyMDZcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxTVJUXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFCSEpcMzc3XDIxNS40NlwzNzdcMVwyMTdcMjIyIiBcCisgICJcMjIzXDM3N1wyMTFcMzUwXDM1NFwzNDBcMzc3XDEiIjY8PlwzNzdcMjE1LjQ2XDM3N1wxXDMxMlwzMTNcMzE0XDM3NyIgXAorICAiXDI3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyMjZcMjMxXDIzMlwzNzdcMjE1LjQ2XDM3N1wxPUJEXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFXXFxdXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMXh8fVwzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3N1wyXDMzM1wzMzRcMzM0XDM3NzA2OFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMzE3XDMyMFwzMjBcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMlwzNDVcMzQ2XDM0NlwzNzczOTtcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wyIiIzOTtcMzc3XDM0N1wzNTBcMzUwXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFMUVJcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIyNVwyMzBcMjMxXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjExXDIxNFwyMTVcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxXFxhYlwzNzdcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyMTUuNDZcMzc3XDE6IiBcCisgICJAQlwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxYmdoXDM3N1wyMTUuNDZcMzc3XDFcMTc3XDIwM1wyMDRcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwyMzciIFwKKyAgIlwyNDJcMjQzXDM3N1wyMTUuNDZcMzc3XDFESUtcMzc3XDM0NVwzNTBcMzU0XDM0MFwzNzdcMXp+XDE3N1wzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFiZmhcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMVwyMDNcMjA3XDIxMFwzNzdcMjE1LjQ2XDM3N1wxXDIwMyIgXAorICAiXDIwN1wyMTBcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMVwzNTJcMzU0XDM0NlwzNzdcMjE2LjQ2XDM3N1wxXDMzNVwzMzYiIFwKKyAgIlwzMzZcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjE1LjQ2XDM3N1wxIiIxNzlcMzc3IiBcCisgICJcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDI0NlwyNTFcMjUyXDM3N1wyMTUuNDZcMzc3XDFpbW9cMzc3XDI3NlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMSIiNTo8XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwzMDZcMzEwXDMxMVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDM0NFwzNDVcMzQ1XDM3N1wyMTYiIFwKKyAgIi40NlwzNzdcMVwzNDRcMzQ1XDM0NVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1w1XDMwNFwzMzZcMzczXDM3N1wyMzZcMzExIiBcCisgICJcMzcwXDM3N1wyMjBcMzAxXDM2N1wzNzdcMjM0XDMxMFwzNzBcMzc3XDI3M1wzMzFcMzcyXDM3N1wyNjVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwzNDRcMzQ1XDM0NVwzNzczOTtcMzc3XDIxNS40NlwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjEzXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQ3XDM1MFwzNTBcMzc3Mzk7XDM3N1wyMTQuNDZcMzc3XDIiIjI4OlwzNzdcMzQ1XDM0NlwzNDYiIFwKKyAgIlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxXDMxM1wzMTVcMzE1XDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDI1NFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxIiI2PD5cMzc3XDIxNS40NlwzNzdcMVwzMzFcMzMyXDMzM1wzNzdcMjA3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjEyXDIxNVwyMTZcMzc3XDIxNS40NlwzNzdcMVwyMjJcMjI1XDIyNlwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMSIiMjg6XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFITU9cMzc3XDIxNS40NlwzNzdcMVwzMDJcMzA0IiBcCisgICJcMzA1XDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDJcMjYyXDMyNFwzNzFcMzc3W1wyNDRcMzYzXDM3N1wyMDVPXDIzNSIgXAorICAiXDM2MlwzNzdcMlVcMjQwXDM2MlwzNzdcMjM2XDMxMVwzNzBcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMVwyMTFcMjE0IiBcCisgICJcMjE1XDM3N1wyMTUuNDZcMzc3XDFWW11cMzc3XDIxM1wzNTBcMzU0XDM0MFwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMjAwXDIwNFwyMDVcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyNTNcMjU2XDI1N1wzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFxdXdcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMWNoaVwzNzdcMjE1LjQ2XDM3N1wxXDI3NVwyNzdcMjc3IiBcCisgICJcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMW1xc1wzNzdcMjE1LjQ2XDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyNzZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwNCIgXAorICAiXDMwNVwzNzdcMjE1LjQ2XDM3N1wxW2BhXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDF5fVwxNzdcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDI0NlwyNTBcMjUxXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDFcMjE0XDI3N1wzNjZcMzc3XDIxMU9cMjM1XDM2MiIgXAorICAiXDM3N1wxdVwyNjJcMzY1XDM3N1wyNjNcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNDVcMzc3OT5AXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyNzFcMjczXDI3M1wzNzdcMjExXDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTJcMzUxXDM3NzU6PFwzNzciIFwKKyAgIlwyMTQuNDZcMzc3XDIiIjE3OVwzNzdcMzQzXDM0NFwzNDRcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyMTdcMjIyIiBcCisgICJcMjIzXDM3N1wyMTUuNDZcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwyMTJcMjE1XDIxNiIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFcMjM1XDI0MFwyNDFcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMVFWWFwzNzdcMjE1LjQiIFwKKyAgIjZcMzc3XDFcMzIwXDMyMlwzMjJcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2IiBcCisgICJcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUwXDI1MVwzNzdcMjE1LjQ2XDM3N1wxXDIwMlwyMDVcMjA2XDM3NyIgXAorICAiXDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwyMzdcMjQyXDI0M1wzNzdcMjE1LjQ2XDM3N1wxXDIwN1wyMTJcMjEzXDM3N1wyNDYiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzZcMzExXDM3MFwzNzdcMjEzT1wyMzVcMzYyXDM3N1wxXDE3N1wyNzBcMzY2XDM3NyIgXAorICAiXDI2M1wzNTBcMzU0XDM0MFwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMjE1LjQ2XDM3N1wxT1RWXDM3N1wyMTFcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjE1LjQ2XDM3N1wxfVwyMDBcMjAyXDM3N1wyMTdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMXl8flwzNzdcMjE1LjQ2XDM3N1wxXDI2NFwyNjdcMjY3XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2IiBcCisgICJcMjUxXDI1MlwzNzdcMjE1LjQ2XDM3N1wxXDIwNlwyMTFcMjEyXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDE7QUNcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDM0N1wzNTBcMzUwXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjE2XDIyMVwyMjJcMzc3XDIxNS40NlwzNzdcMVwyMzVcMjQwXDI0MSIgXAorICAiXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjc0XDI3NlwyNzZcMzc3XDIxNS40NlwzNzdcMW5yc1wzNzdcMjQ1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQyXDM1N1wzNzVcMzc3UVwyMzZcMzYyXDM3N1wyMTRPXDIzNVwzNjJcMzc3XDFcMzA0XDMzNiIgXAorICAiXDM3M1wzNzdcMjYzXDM1MFwzNTRcMzQwXDM3N1wxPkRGXDM3N1wyMTUuNDZcMzc3XDFcMjU2XDI2MFwyNjFcMzc3XDIwNyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTNcMzQ3XDM3NzU7PVwzNzdcMjE0LjQ2XDM3N1wyIiIxNzlcMzc3XDM0MVwzNDIiIFwKKyAgIlwzNDJcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjE1LjQ2XDM3N1wxXDMxM1wzMTVcMzE1XDM3N1wyNTQiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNzZcMzAwXDMwMVwzNzdcMjE1LjQ2XDM3N1wxe1wxNzdcMjAwXDM3N1wyMDdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMSIiMTc5XDM3N1wyMTUuNDZcMzc3XDI3N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjE1LjQ2XDM3N1wxXDI2NyIgXAorICAiXDI3MVwyNzJcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMjZcMzI3XDMzMFwzNzdcMjE1LjQ2XDM3N1wxZWlrXDM3NyIgXAorICAiXDI0NVwzNTBcMzU0XDM0MFwzNzdcMVwyMzJcMzA3XDM3MFwzNzdcMjE1T1wyMzVcMzYyXDM3N1wxelwyNjVcMzY1XDM3NyIgXAorICAiXDI2M1wzNTBcMzU0XDM0MFwzNzdcMVwyNDNcMjQ2XDI0N1wzNzdcMjE1LjQ2XDM3N1wxRktNXDM3N1wyMDdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMTNcMjE2XDIxN1wzNzdcMjE1LjQ2XDM3N1wxeX1cMTc3XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWJnaFwzNzdcMjE1LjQ2XDM3N1wxXDMzMlwzMzNcMzM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzE0XDMxNiIgXAorICAiXDMxNlwzNzdcMjE1LjQ2XDM3N1wxcXV3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDIxNi40NlwzNzdcMjc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxeXx+XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTUuIiBcCisgICI0NlwzNzdcMVtgYVwzNzdcMjQ1XDM1MFwzNTRcMzQwXDM3N1wxaVwyNTRcMzY0XDM3N1wyMTVPXDIzNVwzNjJcMzc3XDEiIFwKKyAgIlFcMjM2XDM2MlwzNzdcMjY0XDM1MFwzNTRcMzQwXDM3N1wxR01OXDM3N1wyMTUuNDZcMzc3XDFcMjQzXDI0NlwyNDdcMzc3IiBcCisgICJcMjA1XDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTRcMzQ2XDM3NzY8PlwzNzdcMjE0LjQ2XDM3N1wyIiIwNjhcMzc3XDMzNyIgXAorICAiXDM0MFwzNDBcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVleYFwzNzdcMjE1LjQ2XDM3N1wxXDM0MVwzNDJcMzQzXDM3NyIgXAorICAiXDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI2XDMyNlwzNzdcMjE1LjQ2XDM3N1wxaG1uXDM3N1wyMDdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMjE1LjQ2XDM3N1wxIiI4Plw3N1wzNzdcMjc3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxcHR1XDM3N1wyMTUuNDZcMzc3XDFcMzE0XDMxNlwzMTZcMzc3IiBcCisgICJcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDM1MVwzNTJcMzUwXDM3N1wyMTUuNDZcMzc3XDFRVlhcMzc3XDI0NVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxVVwyNDBcMzYyXDM3N1wyMTZPXDIzNVwzNjJcMzc3XDFcMzQ0XDM2MFwzNzVcMzc3XDI2M1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI2MFwyNjNcMjYzXDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiXDIxNlwyMjFcMjIyXDM3N1wyMTUuNDZcMzc3XDF3e3xcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMVldX1wzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMzQyXDM0M1wzNDNcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMjVcMzI2XDMyN1wzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFnbG1cMzc3XDIwNlwzNTBcMzU0XDM0MFwzNzdcMVwzNTFcMzUyXDM1MFwzNzdcMjE1LjQ2XDM3N1wxIiI1IiBcCisgICI7PVwzNzdcMjc3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxcHR1XDM3N1wyMTUuNDZcMzc3XDFcMzE1XDMxNlwzMTdcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzNTIiIFwKKyAgIlwzNTNcMzQ3XDM3N1wyMTUuNDZcMzc3XDFRVlhcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMVVcMjQwXDM2MlwzNzdcMjE2IiBcCisgICJPXDIzNVwzNjJcMzc3XDFcMzQ1XDM2MVwzNzVcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMVBVV1wzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDFcMjMwXDIzM1wyMzRcMzc3XDIwM1wzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzc4Plw3N1wzNzdcMjE0IiBcCisgICIuNDZcMzc3XDIiIjA2OFwzNzdcMzM1XDMzNlwzMzZcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMWJmaFwzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFcMzMyXDMzM1wzMzRcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzMTRcMzE2XDMxNlwzNzdcMjE1LjQiIFwKKyAgIjZcMzc3XDFxdXdcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMjE2LjQ2XDM3N1wyNzdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIxNS40NlwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzQxXDM0MlwzNDNcMzc3XDIxNS40NlwzNzdcMVpfYVwzNzciIFwKKyAgIlwyNDVcMzUwXDM1NFwzNDBcMzc3XDFsXDI1NVwzNjRcMzc3XDIxNU9cMjM1XDM2MlwzNzdcMVJcMjM3XDM2MlwzNzdcMjY1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjc1XDI3N1wzMDBcMzc3XDIxNS40NlwzNzdcMiIiOVw3N0FcMzc3XDM1MFwzNTRcMzQyIiBcCisgICJcMzc3XDIwMlwzNTBcMzU0XDM0MFwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjE1LjQ2XDM3N1wxdHh6XDM3N1wyMjJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjE1LjQ2XDM3N1wxXDMxNFwzMTZcMzE2XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNzdcMzAxXDMwMlwzNzdcMjE1LjQ2XDM3N1wxen5cMTc3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDIxNi40NiIgXAorICAiXDM3N1wxXDM1MlwzNTRcMzQ1XDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIxNS40NlwzNzdcMVwyNzFcMjczXDI3M1wzNzdcMjU0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzI3XDMzMFwzMzBcMzc3XDIxNS40NlwzNzdcMWRpalwzNzdcMjQ1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjM2XDMxMVwzNzBcMzc3XDIxNU9cMjM1XDM2MlwzNzdcMVwxNzdcMjcwXDM2NlwzNzdcMjY2XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFdYWNcMzc3XDIxNS40NlwzNzdcNFwyMTVcMjIwXDIyMVwzNzdcMzUwXDM1NFwzNDBcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDJcMzc3OT5AXDM3N1wyMTQuNDZcMzc3XDIvNTdcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMXd7fFwzNzdcMjE1LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjUwXDI1MyIgXAorICAiXDI1M1wzNzdcMjE1LjQ2XDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDEiIjA2OFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwyMTVcMjIwXDIyMVwzNzdcMjE1LjQ2XDM3N1wxXDIzN1wyNDJcMjQzIiBcCisgICJcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwyNzZcMzAwXDMwMVwzNzdcMjE1LjQ2XDM3N1wxbXFzXDM3N1wyNDVcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNTBcMzYyXDM3NVwzNzdTXDIzN1wzNjJcMzc3XDIxNE9cMjM1XDM2MlwzNzdcMVwzMTVcMzQzIiBcCisgICJcMzczXDM3N1wyNjZcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNVwzMTVcMzc3XDIxNS40NlwzNzdcMyIiNTs9XDM3NyIgXAorICAiXDM1MFwzNTJcMzUxXDM3N1wyMjNcMjI2XDIyN1wzNzdcMjE1LjQ2XDM3N1wxcXV3XDM3N1wyMjNcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyMTZcMjIxXDIyMlwzNzdcMjE1LjQ2XDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyMTRcMjIwXDIyMVwzNzdcMjE1LjQ2XDM3N1wxXDIzNFwyMzdcMjQwXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkFGSFwzNzdcMjE1LjQ2XDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDQiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjQ0XDI0N1wyNTBcMzc3XDIxNS40NlwzNzdcMVwyMDMiIFwKKyAgIlwyMDdcMjEwXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjQxXDI0M1wyNDRcMzc3XDIxNS40NlwzNzdcMVwyMDVcMjEwIiBcCisgICJcMjEyXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDFcMjUzXDMyMFwzNzFcMzc3XDIxM09cMjM1XDM2MlwzNzdcMVwyMTQiIFwKKyAgIlwyNzdcMzY2XDM3N1wyNzBcMzUwXDM1NFwzNDBcMzc3XDFpbW9cMzc3XDIxNS40NlwzNzdcMnV5e1wzNzc6QEJcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wyLzU3XDM3N1wzMzBcMzMyXDMzMlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxXDI1MlwyNTRcMjU1IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMXR4eVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxZ2tsXDM3N1wyMTUuNDZcMzc3XDFcMjcyIiBcCisgICJcMjc0XDI3NVwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxV1xcXVwzNzdcMjE1LjQ2XDM3N1wxXDI1MVwyNTNcMjU0XDM3NyIgXAorICAiXDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMDFcMzAyXDMwM1wzNzdcMjE1LjQ2XDM3N1wxXmNlXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDF9XDIwMFwyMDIiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDI0M1wyNDZcMjQ3XDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDMwNlwzNjdcMzc3IiBcCisgICJcMjExT1wyMzVcMzYyXDM3N1wxXDIwMFwyNzBcMzY2XDM3N1wyNzFcMzUwXDM1NFwzNDBcMzc3XDJcMzI3XDMzMFwzMzAiIFwKKyAgIlwzNzcwNjhcMzc3XDIzMi40NlwzNzdcMW5yc1wzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDMxMVwzMTJcMzEzXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMUNJSlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxIiI4Plw3N1wzNzdcMjE1LjQ2XDM3N1wxXDMzMCIgXAorICAiXDMzMVwzMzFcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjE1LjQ2XDM3N1wxXDE3N1wyMDNcMjA0XDM3NyIgXAorICAiXDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMzdcMzQwXDM0MFwzNzdcMjE1LjQ2XDM3N1wxIiI0OjxcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMUxRUlwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMzAxXDMwMlwzMDNcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMlwzMDNcMzM2XDM3M1wzNzdkIiBcCisgICJcMjUxXDM2NFwzNzdcMjA1T1wyMzVcMzYyXDM3N1wyWlwyNDNcMzYzXDM3N1wyNjBcMzIzXDM3MVwzNzdcMjczXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIzMS40NlwzNzdcMi81N1wzNzdcMzI1XDMyNlwzMjdcMzc3XDIyNFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDM1MVwzNTJcMzUwXDM3N1wyMTYuNDZcMzc3XDFcMzQwXDM0MVwzNDFcMzc3XDI1MlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyMTUuNDZcMzc3XDEiIjA2OFwzNzdcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDIxMyIgXAorICAiXDIxN1wyMjBcMzc3XDIxNS40NlwzNzdcMVZbXVwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxIiIzOTtcMzc3XDIxNS40NlwzNzdcMVwzMTJcMzEzXDMxNFwzNzciIFwKKyAgIlwyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzUwXDM1MVwzNTFcMzc3XDIxNi40NlwzNzdcMVwzNDFcMzQyXDM0MlwzNzdcMjUyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDVcMzIzXDM0NlwzNzRcMzc3XDI1NVwzMjFcMzcxXDM3N1wyMzZcMzExXDM3MFwzNzdcMjUxIiBcCisgICJcMzE3XDM3MVwzNzdcMzEzXDM0MlwzNzNcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzdcMlwzNDJcMzQzXDM0M1wzNzcyOCIgXAorICAiOlwzNzdcMjMwLjQ2XDM3N1wxa3BxXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIxNS40NlwzNzdcMVwyMzIiIFwKKyAgIlwyMzVcMjM2XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjE0XDIyMFwyMjFcMzc3XDIxNS40NlwzNzdcMVhdXlwzNzciIFwKKyAgIlwyMTBcMzUwXDM1NFwzNDBcMzc3XDFcMjYxXDI2M1wyNjRcMzc3XDIxNS40NlwzNzdcMSIiMTc5XDM3N1wyNzZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxQkdJXDM3N1wzNTZcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIzMC40NlwzNzdcMVwzMjMiIFwKKyAgIlwzMjRcMzI0XDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDF9XDIwMFwyMDJcMzc3XDIxNS40NlwzNzdcMVFWWFwzNzdcMjUyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNS40NlwzNzdcMVwyMTRcMjIwXDIyMVwzNzdcMjEwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMzMwXDMzMVwzMzFcMzc3XDIxNi40NlwzNzdcMVwyNTNcMjU2XDI1N1wzNzdcMjc1XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVw3N0VHXDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFbYGFcMzc3XDIxNS40NlwzNzdcMXR4elwzNzdcMzU2IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1M1wzNDdcMzc3Njw+XDM3N1wyMjYuNDZcMzc3XDFpbW9cMzc3XDIyN1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDI2MlwyNjRcMjY1XDM3N1wyMTYuNDZcMzc3XDFcMzEzXDMxNFwzMTVcMzc3XDI1MFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI3NlwzMDBcMzAxXDM3N1wyMTYuNDZcMzc3XDFcMzAwXDMwMlwzMDJcMzc3XDIxMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxO0FDXDM3N1wyMTUuNDZcMzc3XDFfZGVcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwzMDZcMzEwXDMxMVwzNzdcMjE2LjQ2XDM3N1wxXDI2NVwyNjciIFwKKyAgIlwyNzBcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI1XDMyNVwzNzdcMjE2LjQ2XDM3N1wxXDI1MVwyNTNcMjU0IiBcCisgICJcMzc3XDM1N1wzNTBcMzU0XDM0MFwzNzdcMVwyMjNcMjI2XDIyN1wzNzdcMjI2LjQ2XDM3N1wxXDMyMFwzMjJcMzIyXDM3NyIgXAorICAiXDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzU0XDM1MFwzNzcxNzlcMzc3XDIxNS40NlwzNzdcMW9zdFwzNzdcMjUwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFdYWNcMzc3XDIxNS40NlwzNzdcMSIiNjw+XDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIm1xc1wzNzdcMjE1LjQ2XDM3N1wyLzU3XDM3N1wzNDFcMzQyXDM0M1wzNzdcMjc0XDM1MFwzNTRcMzQwXDM3N1wxXDMwMiIgXAorICAiXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxIiI5XDc3QVwzNzdcMjE1LjQ2XDM3N1wxIiBcCisgICJWW11cMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMXR4elwzNzdcMjE1LjQ2XDM3N1wyLzU3XDM3N1wzNDZcMzQ2XDM0NyIgXAorICAiXDM3N1wzNjBcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIyNC40NlwzNzdcMWZqbFwzNzdcMjMxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFpbW9cMzc3XDIxNS40NlwzNzdcMi81N1wzNzdcMzI0XDMyNVwzMjVcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwM1wzMDVcMzA1XDM3N1wyMTYuNDZcMzc3XDF4fH1cMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxIiBcCisgICJcMjUyXDM3N1wyMTYuNDZcMzc3XDF5fVwxNzdcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMVwyMDBcMjA0XDIwNVwzNzdcMjE2LjQ2XDM3N1wxXDI3NlwzMDAiIFwKKyAgIlwzMDFcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMlwzMzBcMzMxXDMzMVwzNzcwNjhcMzc3XDIxNS40NlwzNzdcMWBlIiBcCisgICJmXDM3N1wzNjFcMzUwXDM1NFwzNDBcMzc3XDFcMjM3XDI0MlwyNDNcMzc3XDIyNC40NlwzNzdcMVwzMTZcMzE3XDMyMCIgXAorICAiXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjY0XDI2N1wyNjdcMzc3XDIxNi40NlwzNzdcMWFlZ1wzNzdcMjQ2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFPVFZcMzc3XDIxNi40NlwzNzdcMVwzMDNcMzA1XDMwNVwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMzUxXDM1MlwzNTBcMzc3MDY4XDM3N1wyMTUuNDZcMzc3XDIvNTdcMzc3XDMyM1wzMjRcMzI0XDM3N1wyNzNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNSIgXAorICAiXDMxNVwzNzdcMjE2LjQ2XDM3N1wxTlNVXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDFjaGlcMzc3XDIxNi40NlwzNzciIFwKKyAgIlwxXDI1M1wyNTZcMjU3XDM3N1wzNjJcMzUwXDM1NFwzNDBcMzc3XDFESUtcMzc3XDIyMi40NlwzNzdcMWNoaVwzNzdcMjMzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDE7QUNcMzc3XDIxNi40NlwzNzdcMVwyNTdcMjYyXDI2M1wzNzdcMjQ0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDIxNi40NlwzNzdcMUJISlwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxYWVnXDM3NyIgXAorICAiXDIxNi40NlwzNzdcMV1hY1wzNzdcMjczXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMjM0XDM1MFwzNTRcMzQwXDM3N1wxSk9RXDM3N1wyMTYuNDZcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDI0NFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI1NlwyNjBcMjYxXDM3N1wyMTYuNDZcMzc3XDEiIjU7PVwzNzdcMzYzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjU2XDI2MFwyNjFcMzc3XDIyMi40NlwzNzdcMVwzMTNcMzE0XDMxNVwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMjI0XDIyN1wyMzBcMzc3XDIxNi40NlwzNzdcMjpAQlwzNzdcMzQ2XDM0NlwzNDdcMzc3XDI0MlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDMyMlwzMjNcMzI0XDM3NzE3OVwzNzdcMjE2LjQ2XDM3N1wxXDIzNVwyNDBcMjQxXDM3N1wyMTRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNjJcMjY0XDI2NVwzNzdcMjE3LjQ2XDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyNzJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDFcMjUyXDI1NFwyNTVcMzc3IiBcCisgICJcMjE2LjQ2XDM3N1wyIiIzOTtcMzc3XDMyNlwzMjdcMzMwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzQwXDM0MSIgXAorICAiXDM0MVwzNzc4Plw3N1wzNzdcMjE2LjQ2XDM3N1wxXDIwN1wyMTJcMjEzXDM3N1wzNjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIk9UVlwzNzdcMjIwLjQ2XDM3N1wxYGVmXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3OD5cNzciIFwKKyAgIlwzNzdcMjE2LjQ2XDM3N1wxWV1fXDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1MVwzNTFcMzc3RUpMXDM3NyIgXAorICAiXDIxNi40NlwzNzdcMTtBQ1wzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMTYuNDZcMzc3XDIvNTdcMzc3IiBcCisgICJcMjY0XDI2N1wyNjdcMzc3XDI3MVwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMUVKTFwzNzdcMjE2LjQ2XDM3N1wyS1BSXDM3N1wzNTFcMzU0XDM0M1wzNzdcMjQxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFOU1VcMzc3XDIxNi40NlwzNzdcMiIiMTc5XDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzY0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjcyXDI3NFwyNzVcMzc3XDIyMC40NlwzNzdcMVwzMDdcMzExXDMxMVwzNzdcMjM1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjIwXDIyM1wyMjRcMzc3XDIxNy40NlwzNzdcMXN3eFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3NyIgXAorICAiXDIxNy40NlwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxXDIzM1wyMzZcMjM3XDM3N1wyMTciIFwKKyAgIi40NlwzNzdcMiIiNjw+XDM3N1wzMDFcMzAyXDMwM1wzNzdcMjcwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwzNTJcMzU0XDM1MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDI0NlwyNTFcMjUyXDM3NyIgXAorICAiXDIxNy40NlwzNzdcMWJmaFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxY2hpXDM3N1wyMTcuNDZcMzc3XDF6flwxNzciIFwKKyAgIlwzNzdcMzY2XDM1MFwzNTRcMzQwXDM3N1wxWV1fXDM3N1wyMTYuNDZcMzc3XDFeY2VcMzc3XDIzN1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxQkdJXDM3N1wyMTcuNDZcMzc3XDFscXJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzU0XDM1MFwzNzciIFwKKyAgIlNYWVwzNzdcMjE3LjQ2XDM3N1wxQkdJXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFARkdcMzc3XDIxNy40NlwzNzdcMiIgXAorICAiMDY4XDM3N1wyNDZcMjUxXDI1MlwzNzdcMjY3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDYiIFwKKyAgIlwzNzdcMVwzMzVcMzM2XDMzN1wzNzdcMjM1XDM1MFwzNTRcMzQwXDM3N1wxUVZYXDM3N1wyMTcuNDZcMzc3XDFcXGFiIiBcCisgICJcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMV9kZVwzNzdcMjE3LjQ2XDM3N1wyIiI2PD5cMzc3XDM0NlwzNDdcMzQ3XDM3NyIgXAorICAiXDM2NlwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjE2LjQ2XDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIwLjQ2XDM3N1wyV1xcXVwzNzdcMzQ0XDM0NVwzNDVcMzc3IiBcCisgICJcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDMyNlwzMjdcMzMwXDM3N0hNT1wzNzdcMjIwLjQ2XDM3N1wxXDI2MVwyNjNcMjY0IiBcCisgICJcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyNDdcMjUyXDI1M1wzNzdcMjIxLjQ2XDM3N1wxXDIwMlwyMDZcMjA3XDM3NyIgXAorICAiXDI0MlwzNTBcMzU0XDM0MFwzNzdcMlwyNjRcMjY3XDI2N1wzNzdcMjc2XDMwMFwzMDFcMzc3XDIyMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMxMFwzMTJcMzEyXDM3N1wyMTUuNDZcMzc3XDFcMjY3XDI3MVwyNzJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDMxNFwzMTZcMzE2XDM3Ny81N1wzNzdcMjE3LjQ2XDM3N1wyTFFTXDM3N1wzMzBcMzMxXDMzMVwzNzdcMjMyXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQxXDM0MlwzNDJcMzc3U1hZXDM3N1wyMjAuNDZcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDM2NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQzXDM3NzA2OFwzNzdcMjE0LjQ2XDM3N1wxW2BhXDM3N1wyNDFcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWVpa1wzNzdcMjIwLjQ2XDM3N1wyO0FDXDM3N1wyNjNcMjY1XDI2NlwzNzdcMjMwXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDJcMjQ2XDI1MVwyNTJcMzc3NTo8XDM3N1wyMjAuNDZcMzc3XDFdYWNcMzc3XDIyMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxWV1fXDM3N1wyMjEuNDZcMzc3XDJCSEpcMzc3XDI2NFwyNjdcMjY3XDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcNVwzMzFcMzMyXDMzM1wzNzdcMjA3XDIxM1wyMTRcMzc3PUJEXDM3Ny40NlwzNzdGS01cMzc3XDIyMlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMyN1wzMzBcMzMwXDM3N1wyMTUuNDZcMzc3XDF1eXtcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwzNTAiIFwKKyAgIlwzNTRcMzQyXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDF8XDIwMFwyMDFcMzc3XDIyMC40NlwzNzdcMiIiNTo8XDM3NyIgXAorICAiXDI0NVwyNDdcMjUwXDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDJcMjY1XDI2N1wyNzBcMzc3O0FDXDM3N1wyMjAuNDYiIFwKKyAgIlwzNzdcMUtQUlwzNzdcMzcwXDM1MFwzNTRcMzQwXDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMTUuNDZcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTFcMzUxXDM3Nz5ERlwzNzdcMjIxLjQ2XDM3NyIgXAorICAiXDJmamxcMzc3XDMzNVwzMzZcMzM2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzI3XDMzMFwzMzBcMzc3XmJkXDM3NyIgXAorICAiXDIyMS40NlwzNzdcMiIiOVw3N0FcMzc3XDM0MlwzNDNcMzQzXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDJcMzMyXDMzMyIgXAorICAiXDMzNFwzNzczOTtcMzc3XDIyMi40NlwzNzdcMldcXF1cMzc3XDI1N1wyNjJcMjYzXDM3N1wyMzBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcM1wzMjBcMzIyXDMyMlwzNzdcMjE3XDIyMlwyMjNcMzc3TVJUXDM3N1wyMDUuNDZcMzc3XDFcMjQ2XDI1MFwyNTEiIFwKKyAgIlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDM0N1wzNTBcMzUwXDM3N1wyMTUuNDZcMzc3XDIiIjE3OVwzNzdcMzI0IiBcCisgICJcMzI2XDMyNlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wzXDIzNVwyNDBcMjQxXDM3N0NJSlwzNzd0eHpcMzc3XDIxNiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxS1BSXDM3N1wyMjEuNDZcMzc3XDJbYGFcMzc3XDMyNFwzMjVcMzI1XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNDFcMzQyXDM0MlwzNzdrb3BcMzc3XDIyMS40NlwzNzdcMiIiMzk7XDM3N1wzMjNcMzI0XDMyNCIgXAorICAiXDM3N1wzNjdcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3NTs9XDM3N1wyMTQuNDZcMzc3XDFZXV9cMzc3IiBcCisgICJcMjQzXDM1MFwzNTRcMzQwXDM3N1wyXDMwM1wzMDVcMzA1XDM3Ny81N1wzNzdcMjIxLjQ2XDM3N1wzIiIwNjhcMzc3eyIgXAorICAiXDE3N1wyMDBcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDNcMzI1XDMyNlwzMjdcMzc3dHgiIFwKKyAgInpcMzc3LzU3XDM3N1wyMjIuNDZcMzc3XDFcMjcwXDI3MlwyNzJcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVwyNDRcMjQ3IiBcCisgICJcMjUwXDM3N1wyMjQuNDZcMzc3XDM+REZcMzc3XDIwNlwyMTFcMjEyXDM3N1wyNzdcMzAxXDMwMlwzNzdcMjIxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDRcMzI1XDMyNlwzMjdcMzc3XDI0NVwyNDdcMjUwXDM3N3R4eVwzNzdCR0lcMzc3XDIxMC40NlwzNzciIFwKKyAgIlwxQkdJXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDEvNTdcMzc3XDIxNS40NlwzNzdcMkNJSlwzNzdcMzMwXDMzMlwzMzIiIFwKKyAgIlwzNzdcMjExXDM1MFwzNTRcMzQwXDM3N1wzXDMwMlwzMDRcMzA1XDM3N3xcMjAwXDIwMVwzNzc3PVw3N1wzNzdcMjAyIiBcCisgICIuNDZcMzc3XDIiIjA2OFwzNzdcMzMyXDMzM1wzMzRcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMlwzMjZcMzI3XDMzMCIgXAorICAiXDM3NzQ6PFwzNzdcMjIxLjQ2XDM3N1wzLzU3XDM3N3B0dlwzNzdcMzIwXDMyMlwzMjJcMzc3XDIyMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzXDMzNlwzMzdcMzM3XDM3N1wyMDFcMjA0XDIwNlwzNzcxNzlcMzc3XDIyMi40NlwzNzdcMVwyMzdcMjQyXDI0MyIgXAorICAiXDM3N1wzNzBcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIyN1wyMzBcMzc3XDIxNS40NlwzNzdcMVwyNzdcMzAxXDMwMlwzNzciIFwKKyAgIlwyNDRcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIyN1wyMzBcMzc3XDIyNC40NlwzNzdcM1RZWlwzNzdcMjMyXDIzNVwyMzYiIFwKKyAgIlwzNzdcMzE3XDMyMFwzMjBcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcM1wzMjFcMzIyXDMyM1wzNzdcMjMyXDIzNVwyMzYiIFwKKyAgIlwzNzdTWFlcMzc3XDIyNC40NlwzNzdcMVwyMDdcMjEyXDIxM1wzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxdnp7XDM3NyIgXAorICAiXDIyNi40NlwzNzdcMjEiIjE3OVwzNzdcXGFiXDM3N35cMjAxXDIwMlwzNzdcMjMzXDIzNlwyMzdcMzc3XDI3MlwyNzQiIFwKKyAgIlwyNzVcMzc3XDMxM1wzMTVcMzE1XDM3N1wzMjVcMzI2XDMyN1wzNzdcMzMzXDMzNFwzMzRcMzc3XDM0M1wzNDRcMzQ0IiBcCisgICJcMzc3XDMzMVwzMzJcMzMzXDM3N1wzMTVcMzE2XDMxN1wzNzdcMzAxXDMwMlwzMDNcMzc3XDI2NFwyNjZcMjY2XDM3NyIgXAorICAiXDIyNFwyMzBcMjMxXDM3N3V5e1wzNzdWW11cMzc3Njw+XDM3N1wyMTUuNDZcMzc3XDFcMjM2XDI0MVwyNDJcMzc3XDIyMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxUFVXXDM3N1wyMTYuNDZcMzc3XDEyIiIxNzlcMzc3eX1cMTc3XDM3N1wyNzRcMjc2XDI3NiIgXAorICAiXDM3N1wzMzdcMzQwXDM0MFwzNzdcMzQzXDM0NFwzNDRcMzc3XDMzMlwzMzNcMzM0XDM3N1wzMDVcMzA2XDMwN1wzNzciIFwKKyAgIlwyMzVcMjM3XDI0MFwzNzdydndcMzc3PEJDXDM3N1wyMDYuNDZcMzc3XDFxdXdcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDI1M1wyNTZcMjU3XDM3N1wyMjQuNDZcMzc3XDNOU1VcMzc3XDIyM1wyMjZcMjI3XDM3N1wzMTJcMzEzXDMxNFwzNzciIFwKKyAgIlwyMTJcMzUwXDM1NFwzNDBcMzc3XDNcMzI3XDMzMFwzMzBcMzc3XDI0MVwyNDNcMjQ0XDM3N11hY1wzNzdcMjI0LjQ2IiBcCisgICJcMzc3XDFwdHVcMzc3XDM3MVwzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjE0LjQ2XDM3N1wxVltdXDM3N1wyNDZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMXxcMjAwXDIwMVwzNzdcMjI2LjQ2XDM3N1wxMiIiMzk7XDM3N1BVVlwzNzducnNcMzc3flwyMDEiIFwKKyAgIlwyMDJcMzc3XDIwN1wyMTJcMjEzXDM3N1wyMTBcMjE0XDIxNVwzNzd+XDIwMlwyMDNcMzc3b3N0XDM3N1JXWVwzNzc0IiBcCisgICI6PFwzNzdcMjI2LjQ2XDM3N1wxbnJzXDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDFhZWdcMzc3XDI2My40NlwzNzdcMSIgXAorICAiPkNFXDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIzNi40NlwzNzdcMi81N1wzNzdcMzMwIiBcCisgICJcMzMxXDMzMVwzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxXDIyMFwyMjRcMjI1XDM3N1wyMjYuNDZcMzc3XDEyIiIyOCIgXAorICAiOlwzNzdMUVNcMzc3a29wXDM3N3xcMjAwXDIwMVwzNzdcMjA1XDIxMFwyMTJcMzc3XDIxMVwyMTRcMjE1XDM3N1wyMDAiIFwKKyAgIlwyMDRcMjA1XDM3N3B0dlwzNzdVWlxcXDM3NzY8PlwzNzdcMjI2LjQ2XDM3N1wxW2BhXDM3N1wzNzFcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMjE1LjQ2XDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMW5yc1wzNzdcMjY0LjQ2XDM3N1wxW2BhXDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFVWlxcXDM3N1wyNjMuNDZcMzc3IiBcCisgICJcMVwyMzFcMjMzXDIzNFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyMzcuNDZcMzc3XDEiIFwKKyAgIm9zdFwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyNjQuNDZcMzc3XDJQVVdcMzc3XDM1MSIgXAorICAiXDM1NFwzNDNcMzc3XDM3MFwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzc5PkBcMzc3XDIxNC40NlwzNzciIFwKKyAgIlwxVFlaXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDFucnNcMzc3XDI2Mi40NlwzNzdcMWJmaFwzNzdcMjM0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFfZGVcMzc3XDI2Mi40NlwzNzdcMTpAQlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMzYiIFwKKyAgIi40NlwzNzdcMi81N1wzNzdcMzI2XDMyN1wzMzBcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMVwxNzdcMjAzXDIwNFwzNzciIFwKKyAgIlwyNjIuNDZcMzc3XDJTWFlcMzc3XDM1MVwzNTJcMzUwXDM3N1wzNzFcMzUwXDM1NFwzNDBcMzc3XDFcMjEzXDIxN1wyMjAiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDI3MVwyNzNcMjc0XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMTc3XDIwM1wyMDRcMzc3IiBcCisgICJcMjYwLjQ2XDM3N1wxcXV3XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFydndcMzc3XDI2Mi40NlwzNzdcMVwyMjJcMjI1IiBcCisgICJcMjI2XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzNFwyMzVcMzc3XDIzNy40NlwzNzdcMW1xc1wzNzdcMjIwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIyN1wyMzBcMzc3XDI2MC40NlwzNzdcMWJmaFwzNzdcMzcyXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDJcMzUwXDM1MlwzNTFcMzc3NTo8XDM3N1wyMTQuNDZcMzc3XDFRVlhcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDIzMVwyMzNcMjM0XDM3NzA2OFwzNzdcMjU0LjQ2XDM3N1wyLzU3XDM3N1wyMTRcMjIwXDIyMVwzNzdcMjQwXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMjM3XDI0MlwyNDNcMzc3MDY4XDM3N1wyNjAuNDZcMzc3XDIiIjc9XDc3XDM3N1wzNTJcMzU0IiBcCisgICJcMzQ1XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFCSEpcMzc3XDIzNy40NlwzNzdcMVwzMjNcMzI0XDMyNFwzNzdcMjIwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjUzXDI1NlwyNTdcMzc3NDo8XDM3N1wyNTUuNDZcMzc3XDF5fH5cMzc3XDM3M1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDIwMlwyMDVcMjA2XDM3N1wyMTUuNDZcMzc3XDFcMjY2XDI3MFwyNzFcMzc3XDI1NVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyXDMxMlwzMTNcMzE0XDM3N0NJSlwzNzdcMjUyLjQ2XDM3N1wyPkNFXDM3N1wyNzdcMzAxXDMwMlwzNzciIFwKKyAgIlwyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzIyXDMyM1wzMjRcMzc3UFVWXDM3N1wyNjAuNDZcMzc3XDFcMjEzXDIxNlwyMTciIFwKKyAgIlwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wyXDMwN1wzMTFcMzExXDM3Ny81N1wzNzdcMjM2LjQ2XDM3N1wxam5wXDM3NyIgXAorICAiXDIyMVwzNTBcMzU0XDM0MFwzNzdcMlwzMzBcMzMxXDMzMVwzNzdMUVNcMzc3XDI1Mi40NlwzNzdcMiIiNjw+XDM3N1wyNTciIFwKKyAgIlwyNjJcMjYzXDM3N1wzNzNcMzUwXDM1NFwzNDBcMzc3XDJcMzQyXDM0M1wzNDNcMzc3MTc5XDM3N1wyMTQuNDZcMzc3IiBcCisgICJcMU5TVVwzNzdcMjU3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MVwzNTRcMzQzXDM3N3F1d1wzNzdcMjUwLjQ2XDM3N1wyZiIgXAorICAiamxcMzc3XDM0NlwzNDdcMzQ3XDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDJcMjI0XDIzMFwyMzFcMzc3NTs9XDM3N1wyNTUiIFwKKyAgIi40NlwzNzdcMldcXF1cMzc3XDI2NVwyNjdcMjcwXDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFcMjI3XDIzMlwyMzNcMzc3IiBcCisgICJcMjM3LjQ2XDM3N1wxXDMyMVwzMjJcMzIzXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDJcMjAwXDIwNFwyMDVcMzc3LyIgXAorICAiNTdcMzc3XDI0Ny40NlwzNzdcMlleYFwzNzdcMzM1XDMzNlwzMzZcMzc3XDM3NFwzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMjY0XDI2N1wyNjdcMzc3XDI2MVwzNTBcMzU0XDM0MFwzNzdcMlwzMDRcMzA2XDMwNlwzNzdMIiBcCisgICJRUlwzNzdcMjQ0LjQ2XDM3N1wyRktNXDM3N1wyNzFcMjczXDI3NFwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wzXDM0NiIgXAorICAiXDM0N1wzNDdcMzc3fFwyMDBcMjAxXDM3NzI4OlwzNzdcMjUwLjQ2XDM3N1wzIiIyODpcMzc3dnp7XDM3N1wzMTdcMzIxIiBcCisgICJcMzIxXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIzNC40NlwzNzdcMy81N1wzNzdxdSIgXAorICAid1wzNzdcMzQxXDM0MlwzNDJcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMlwzMjFcMzIyXDMyM1wzNzdWW11cMzc3XDI0NCIgXAorICAiLjQ2XDM3N1wyPkRGXDM3N1wyNTNcMjU2XDI1N1wzNzdcMzc1XDM1MFwzNTRcMzQwXDM3N1wxXDMwNlwzMDdcMzEwXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMU1SVFwzNzdcMjY0XDM1MFwzNTRcMzQwXDM3N1wyXDI0MlwyNDVcMjQ2XDM3N0NJSlwzNzdcMjQwIiBcCisgICIuNDZcMzc3XDI+Q0VcMzc3XDIzMVwyMzNcMjM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDNcMzQ2XDM0NlwzNDdcMzc3IiBcCisgICJcMjA3XDIxM1wyMTRcMzc3OkBCXDM3N1wyNDMuNDZcMzc3XDQvNTdcMzc3WV5gXDM3N1wyMzVcMjQwXDI0MVwzNzdcMzUyIiBcCisgICJcMzUzXDM0N1wzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wyXDI2NlwyNzBcMjcxXDM3Nz5DRVwzNzdcMjMwLjQ2XDM3NyIgXAorICAiXDMiIjE3OVwzNzdxdXdcMzc3XDMyNFwzMjZcMzI2XDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMjU1XDI1N1wyNjAiIFwKKyAgIlwzNzdLUFJcMzc3XDI0MC40NlwzNzdcMyIiOT5AXDM3N1wyMTVcMjIwXDIyMVwzNzdcMzUwXDM1NFwzNDJcMzc3XDM3NiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxT1RWXDM3N1wyMTUuNDZcMzc3XDFcMjYyXDI2NFwyNjVcMzc3XDI2NlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDI1MlwyNTRcMjU1XDM3N0tQUlwzNzdcMjM0LjQ2XDM3N1wyRElLXDM3N1wyNDJcMjQ0XDI0NVwzNzdcMjYxIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDNcMjU2XDI2MFwyNjFcMzc3ZGlqXDM3NzA2OFwzNzdcMjM1LjQ2XDM3N1w0IiIwNjhcMzc3IiBcCisgICJgZWZcMzc3XDI0M1wyNDZcMjQ3XDM3N1wzNDZcMzQ3XDM0N1wzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wzXDM1MlwzNTQiIFwKKyAgIlwzNDVcMzc3en5cMTc3XDM3NzI4OlwzNzdcMjI0LjQ2XDM3N1wzSE1PXDM3N1wyMjRcMjMwXDIzMVwzNzdcMzUwXDM1MSIgXAorICAiXDM1MVwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDI2NVwyNjdcMjcwXDM3N1NYWVwzNzdcMjM0LjQ2XDM3N1wyPkMiIFwKKyAgIkVcMzc3XDIyNlwyMzFcMjMyXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDBcMzc3XDIyN1wyMzJcMjMzIiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVBVV1wzNzdcMjcxXDM1MFwzNTRcMzQwXDM3N1wzXDMxN1wzMjBcMzIwXDM3N1wyMTBcMjE0IiBcCisgICJcMjE1XDM3N0JISlwzNzdcMjI2LjQ2XDM3N1wzPkNFXDM3N1wyMDFcMjA0XDIwNlwzNzdcMzEyXDMxM1wzMTRcMzc3XDI2NSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1w0XDM1MFwzNTRcMzQyXDM3N1wyNTdcMjYxXDI2MlwzNzd4fH1cMzc3QkhKXDM3N1wyMjYiIFwKKyAgIi40NlwzNzdcNSIiNjw+XDM3N2BlZlwzNzdcMjIwXDIyM1wyMjRcMzc3XDI3N1wzMDFcMzAyXDM3N1wzNTBcMzU0XDM0MiIgXAorICAiXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDNcMzQ3XDM1MFwzNTBcMzc3XDIyMFwyMjNcMjI0XDM3N0hNT1wzNzdcMjE2IiBcCisgICIuNDZcMzc3XDQiIjE3OVwzNzdbYGFcMzc3XDIyNFwyMjdcMjMwXDM3N1wzMjZcMzI3XDMzMFwzNzdcMjQwXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDNcMzMwXDMzMVwzMzFcMzc3XDIyMFwyMjNcMjI0XDM3N0hNT1wzNzdcMjI2LjQ2XDM3N1wzIiI5PkBcMzc3IiBcCisgICJ6flwxNzdcMzc3XDMwMVwzMDJcMzAzXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIwMlwzNTBcMzU0XDM0MFwzNzdcMiIgXAorICAiXDMzMlwzMzNcMzM0XDM3NzM5O1wzNzdcMjE1LjQ2XDM3N1wxXDI3NVwyNzdcMjc3XDM3N1wyNzRcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcNFwzMjZcMzI3XDMzMFwzNzdcMjQ0XDI0N1wyNTBcMzc3c3d4XDM3N0NJSlwzNzdcMjE2LjQ2XDM3N1w0QEZHIiBcCisgICJcMzc3bnJzXDM3N1wyNDBcMjQzXDI0NFwzNzdcMzIxXDMyMlwzMjNcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcN1wzNTAiIFwKKyAgIlwzNTJcMzUxXDM3N1wzMDZcMzA3XDMxMFwzNzdcMjQyXDI0NFwyNDVcMzc3XDE3N1wyMDNcMjA0XDM3N1leYFwzNzdCIiBcCisgICJISlwzNzc1Oz1cMzc3XDIxMS40NlwzNzdcNkNJSlwzNzdfZGVcMzc3en5cMTc3XDM3N1wyMjZcMjMxXDIzMlwzNzdcMjYyIiBcCisgICJcMjY0XDI2NVwzNzdcMzI1XDMyNlwzMjdcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcNlwzMzZcMzM3XDMzN1wzNzdcMjQ2IiBcCisgICJcMjUxXDI1MlwzNzdcMjA1XDIxMFwyMTJcMzc3ZmpsXDM3N0xRU1wzNzdESUtcMzc3XDIwMjxCQ1wzNzdcNkdMTlwzNzciIFwKKyAgIlNYWVwzNzdlaWtcMzc3XDIwNFwyMTBcMjExXDM3N1wyNDJcMjQ1XDI0NlwzNzdcMzExXDMxMlwzMTNcMzc3XDI0N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1w0XDMzM1wzMzRcMzM0XDM3N1wyNTFcMjUzXDI1NFwzNzd4fH1cMzc3SE1PXDM3N1wyMTYuNDZcMzc3IiBcCisgICJcNDtBQ1wzNzdpbW9cMzc3XDIzMlwyMzVcMjM2XDM3N1wzMTRcMzE2XDMxNlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIwNVwzNTBcMzU0XDM0MFwzNzdcMVVaXFxcMzc3XDIxNS40NlwzNzdcMVxcYWJcMzc3XDMwMlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxNFwzMzBcMzMxXDMzMVwzNzdcMjc0XDI3NlwyNzZcMzc3XDI0NFwyNDdcMjUwXDM3N1wyMzVcMjM3XDI0MFwzNzdcMjIwIiBcCisgICJcMjIzXDIyNFwzNzdcMjEwXDIxNFwyMTVcMzc3XDIwN1wyMTJcMjEzXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjM0XDIzNyIgXAorICAiXDI0MFwzNzdcMjQzXDI0NlwyNDdcMzc3XDI3MVwyNzNcMjczXDM3N1wzMjZcMzI3XDMzMFwzNzdcMzExXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDVcMzUyXDM1NFwzNDVcMzc3XDM0MFwzNDFcMzQxXDM3N1wzMjVcMzI2XDMyN1wzNzdcMzQxXDM0MlwzNDIiIFwKKyAgIlwzNzdcMzQzXDM0NFwzNDRcMzc3XDM1M1wzNTBcMzU0XDM0MFwzNzdcMTVcMzMzXDMzNFwzMzRcMzc3XDI3NlwzMDBcMzAxIiBcCisgICJcMzc3XDI0NlwyNTBcMjUxXDM3N1wyMzVcMjQwXDI0MVwzNzdcMjIwXDIyNFwyMjVcMzc3XDIxMVwyMTRcMjE1XDM3NyIgXAorICAiXDIwNVwyMTBcMjEyXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjMyXDIzNVwyMzZcMzc3XDI0MlwyNDRcMjQ1XDM3N1wyNjUiIFwKKyAgIlwyNjdcMjcwXDM3N1wzMjNcMzI0XDMyNFwzNzdcMzUwXDM1NFwzNDJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjEwIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjA1XDIxMFwyMTJcMzc3XDIxNi40NlwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyNjRcMjY3XDI2N1wzNzdcMjE2LjQ2XDM3N1wxdHh6XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMlwzMjJcMzIzXDMyNFwzNzciIFwKKyAgIjU6PFwzNzdcMjE1LjQ2XDM3N1wyIiI5PkBcMzc3XDM1MFwzNTJcMzUxXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMzRcMzM1XDMzNSIgXAorICAiXDM3N1w3N0VHXDM3N1wyMTYuNDZcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM3XDM3NyIgXAorICAiQEZHXDM3N1wyMTYuNDZcMzc3XDFWW11cMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNlwzMzdcMzM3XDM3N0JHSVwzNzdcMjE2LjQ2IiBcCisgICJcMzc3XDIiIjY8PlwzNzdcMzM1XDMzNlwzMzZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDMzM1wzMzRcMzM0XDM3N0JISlwzNzdcMjE3IiBcCisgICIuNDZcMzc3XDFcMjUyXDI1NFwyNTVcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDI3N1wzMDFcMzAyXDM3Nzk+QFwzNzdcMjE3LjQ2IiBcCisgICJcMzc3XDFwdHVcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyXDIxNVwyMjBcMjIxXDM3Ny81N1wzNzdcMjE3LjQ2XDM3N1wxTFFTXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMwNFwzMDZcMzA2XDM3N1BVV1wzNzdcMjIwLjQ2XDM3N1wyXDc3RUdcMzc3XDM0MVwzNDJcMzQzIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM2XDM3N2ltb1wzNzdcMjIxLjQ2XDM3N1wyIiI1OjxcMzc3XDMyMlwzMjMiIFwKKyAgIlwzMjRcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjI3XDM1MFwzNTRcMzQwXDM3N1wzXDMxMlwzMTNcMzE0XDM3N3Z6e1wzNzcxNzlcMzc3XDIyMS40NlwzNzdcMiIiMiIgXAorICAiODpcMzc3XDI3NVwyNzdcMjc3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcM1wzNDFcMzQyXDM0M1wzNzdcMjM3XDI0MlwyNDNcMzc3TVIiIFwKKyAgIlRcMzc3XDIyMy40NlwzNzdcMiIiMDY4XDM3N1wyNzFcMjczXDI3NFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDNcMzEwXDMxMlwzMTJcMzc3IiBcCisgICJcMjE1XDIyMFwyMjFcMzc3T1RWXDM3N1wyMjUuNDZcMzc3XDIiIjA2OFwzNzdcMjY0XDI2N1wyNjdcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjIxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDNcMjE3XDIyMlwyMjNcMzc3WV5gXDM3NzE3OVwzNzdcMjI3LjQ2XDM3N1wyIiI1OjxcMzc3XDI3NVwyNzdcMzAwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIwMVwyMDRcMjA2XDM3N1wyMzAuNDZcMzc3XDI7QUNcMzc3XDMxM1wzMTVcMzE1XDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyM1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQzXDM3NzE3OVwzNzdcMjI2LjQ2XDM3N1wyTlNVXDM3N1wzMzVcMzM2XDMzNyIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMXh8fVwzNzdcMjI1LjQ2XDM3N1wxcHR1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwzMzNcMzM0XDMzNCIgXAorICAiXDM3Ny81N1wzNzdcMjIyLjQ2XDM3N1wyIiI5PkBcMzc3XDI1MlwyNTRcMjU1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzciIFwKKyAgIlwyMjEuNDZcMzc3XDJlaWtcMzc3XDM0NFwzNDVcMzQ1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwzMjRcMzI1XDMyNVwzNzdcMjE3IiBcCisgICIuNDZcMzc3XDJQVVdcMzc3XDI3NVwyNzdcMjc3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMWdrbFwzNzdcMjE0LjQ2XDM3N1wyTFEiIFwKKyAgIlNcMzc3XDI2MFwyNjNcMjYzXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDIzN1wzNTBcMzU0XDM0MFwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMjExLjQ2XDM3N1wzIiIwNjgiIFwKKyAgIlwzNzdqbnBcMzc3XDI3NVwyNzdcMjc3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDI0MlwzNTBcMzU0XDM0MFwzNzdcMV5jZVwzNzdcMjA1LjQ2XDM3N1w0IiI4Plw3N1wzNzciIFwKKyAgImtwcVwzNzdcMjUzXDI1NVwyNTZcMzc3XDM1MFwzNTJcMzUxXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcNlwzMDJcMzA0XDMwNVwzNzcuNCIgXAorICAiNlwzNzc7QUNcMzc3YmdoXDM3N1wyMjRcMjMwXDIzMVwzNzdcMzE0XDMxNlwzMTZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wxXDM0NVwzNDYiIFwKKyAgIlwzNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzM3XDM1MFwzNTRcMzQwXDM3N1wxXDM1MlwzNTRcMzUwXDM3N1wyMTBcMzI1XDMyNlwzMjdcMzc3XDFcMzQxIiBcCisgICJcMzQyXDM0MlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMDdcMzI1XDMyNlwzMjdcMzc3IiBcCisgICJcMVwzNDNcMzQ0XDM0NFwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wyXDMxNFwzMTZcMzE2XDM3N1wyNjdcMjcxXDI3MiIgXAorICAiXDM3N1wyMDJcMjQ0XDI0N1wyNTBcMzc3XDJcMjY3XDI3MVwyNzJcMzc3XDMxNVwzMTZcMzE3XDM3N1wyMzZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzNTBcMzUxXDM1MVwzNzdcMjA0XDM0M1wzNDRcMzQ0XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwzMzJcMzMzXDMzNFwzNzdcMjE3XDMyNVwzMjZcMzI3XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDNcMzAwXDMwMlwzMDIiIFwKKyAgIlwzNzdcMjM1XDIzN1wyNDBcMzc3XDIwNlwyMTFcMjEyXDM3N1wyMDJcMjAyXDIwNVwyMDZcMzc3XDNcMjEyXDIxNVwyMTYiIFwKKyAgIlwzNzdcMjQyXDI0NVwyNDZcMzc3XDMwN1wzMTFcMzExXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFcMzQ0XDM0NVwzNDUiIFwKKyAgIlwzNzdcMjIzXDMyNVwzMjZcMzI3XDM3N1wxXDMzNVwzMzZcMzM2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMwMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMTIuNDZcMzc3XDNLUFJcMzc3XDIxM1wyMTZcMjE3XDM3N1wzMzUiIFwKKyAgIlwzMzZcMzM3XDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxMS40NlwzNzdcM0JHSVwzNzd0eHlcMzc3IiBcCisgICJcMjcxXDI3M1wyNzNcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcM1wyNjVcMjY3XDI3MFwzNzdscXJcMzc3Njw+XDM3NyIgXAorICAiXDIwNi40NlwzNzdcMyIiNjw+XDM3N25yc1wzNzdcMjcwXDI3MlwyNzJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMVMiIFwKKyAgIlhZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE3LjQ2XDM3N1wxXDMzMVwzMzJcMzMzIiBcCisgICJcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcM1wyNjdcMjcxXDI3MlwzNzdmamxcMzc3MDY4XDM3N1wyMTAuNDZcMzc3XDQiIFwKKyAgIjA2OFwzNzdhZWdcMzc3XDI0NlwyNTFcMjUyXDM3N1wzNTBcMzU0XDM0MlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJ4fH1cMzc3XDIyMy40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwyMzVcMjM3XDI0MFwzNzdcMjE0LjQ2XDM3N1wyIiIxNzlcMzc3XDIxM1wyMTdcMjIwXDM3N1wyMjVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMWtwcVwzNzdcMjE0LjQ2XDM3N1wyUFVXXDM3N1wzMjZcMzI3XDMzMFwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMjc1XDI3N1wzMDBcMzc3UFVWXDM3N1wyMTQuNDZcMzc3XDJSV1lcMzc3XDI3N1wzMDFcMzAyXDM3N1wyMzFcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NiIgXAorICAiXDM3N1wxXDMzMlwzMzNcMzM0XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDJcMzEyXDMxM1wzMTRcMzc3UVZYXDM3N1wyMTYiIFwKKyAgIi40NlwzNzdcMiIiNjw+XDM3N1wyMDdcMjEzXDIxNFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxdHh6XDM3N1wyMjMuIiBcCisgICI0NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDAiIFwKKyAgIlwzNzdcMjE2LjQ2XDM3N1wxc3d4XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMiIiNyIgXAorICAiPVw3N1wzNzdcMzE3XDMyMVwzMjFcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjIwLjQiIFwKKyAgIjZcMzc3XDFcMjExXDIxNFwyMTVcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE3LjQ2XDM3N1wxXDMzNFwzMzVcMzM1XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwyMjVcMjMwXDIzMVwzNzcwNjhcMzc3XDIyMC40NlwzNzdcMUpPUVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxayIgXAorICAicHFcMzc3XDIyMy40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxQEZHXDM3N1wyMDJKT1FcMzc3XDJGS01cMzc3MDY4XDM3N1wyMDYuIiBcCisgICI0NlwzNzdcMVwyNTdcMjYxXDI2MlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFHTCIgXAorICAiTlwzNzdcMjAySk9RXDM3N1wxQUZIXDM3N1wyMDYuNDZcMzc3XDFHTU5cMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMWciIFwKKyAgImxtXDM3N1wyMDcuNDZcMzc3XDQ8QkNcMzc3UVZYXDM3N1JXWVwzNzc+Q0VcMzc3XDIwNy40NlwzNzdcMWdsbVwzNzdcMjI3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMiIFwKKyAgIi40NlwzNzdcMS81N1wzNzdcMjEzPEJDXDM3N1wxXDM1MFwzNTFcMzUxXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFcMjA0IiBcCisgICJcMjEwXDIxMVwzNzdcMjA3LjQ2XDM3N1w2SU5QXDM3N2ZqbFwzNzd0eHlcMzc3aW1vXDM3N1FWWFwzNzcyODpcMzc3XDIwNSIgXAorICAiLjQ2XDM3N1wxXDI1NVwyNTdcMjYwXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDF1eXtcMzc3XDIwNjxCQ1wzNzdcMTsiIFwKKyAgIkFDXDM3N1wyMDQuNDZcMzc3XDEiIjA2OFwzNzdcMjA3PEJDXDM3N1wxXmNlXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzAyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIwNCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDI1MFwyNTNcMjUzXDM3NzY8PlwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wyMjNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwzNTJcMzU0XDM0NVwzNzdcMjA3XDIxM1wyMTRcMzc3XDIwNS40NlwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDF6flwxNzdcMzc3XDIwNS40NlwzNzdcMyIiNTs9XDM3N1wyMTNcMjE3XDIyMFwzNzdcMzI3XDMzMCIgXAorICAiXDMzMFwzNzdcMjA0XDM1MFwzNTRcMzQwXDM3N1wzXDMzNFwzMzVcMzM1XDM3N1wyMjNcMjI2XDIyN1wzNzc4Plw3N1wzNzciIFwKKyAgIlwyMDUuNDZcMzc3XDF5fH5cMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFcMjQwXDI0MyIgXAorICAiXDI0NFwzNzdcMjA1LjQ2XDM3N1wzOkBCXDM3N1wyMjRcMjMwXDIzMVwzNzdcMzQ0XDM0NVwzNDVcMzc3XDIwNlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1w1XDMwNlwzMDdcMzEwXDM3N1wyMDJcMjA1XDIwNlwzNzc6QEJcMzc3LjQ2XDM3N0dNTlwzNzdcMjMxIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyNTVcMjU3XDI2MFwzNzdcMjA1LjQ2XDM3N1wxXDM1MVwzNTRcMzQzXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDF6flwxNzdcMzc3IiBcCisgICJcMjA0LjQ2XDM3N1wxXDIxMFwyMTRcMjE1XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFcMjU3XDI2MlwyNjNcMzc3XDIwNSIgXAorICAiLjQ2XDM3N1wyXmJkXDM3N1wzNTBcMzUyXDM1MVwzNzdcMjEwXDM1MFwzNTRcMzQwXDM3N1wyXDM1MVwzNTRcMzQzXDM3NyIgXAorICAiZ2xtXDM3N1wyMDUuNDZcMzc3XDFcMjUzXDI1NlwyNTdcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0IiBcCisgICIuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwzMzJcMzMzXDMzNFwzNzcyODpcMzc3XDIwNC40NlwzNzdcMltgYVwzNzdcMzQ3XDM1MFwzNTBcMzc3IiBcCisgICJcMjEzXDM1MFwzNTRcMzQwXDM3N1wyXDIzN1wyNDJcMjQzXDM3N1wyNjRcMjY2XDI2NlwzNzdcMjMxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1IiBcCisgICJcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDZcMzUwXDM1NFwzNDBcMzc3XDIwNS40NiIgXAorICAiXDM3N1wxXDMzMFwzMzFcMzMxXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFcMzEwXDMxMlwzMTJcMzc3XDIwNC40NlwzNzdcMXF1d1wzNzciIFwKKyAgIlwyMjNcMzUwXDM1NFwzNDBcMzc3XDFCR0lcMzc3XDIwNC40NlwzNzdcMWdrbFwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDF0eHlcMzc3XDIwNC40NlwzNzdcMUFGSFwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxam5wXDM3N1wyMDQuNDZcMzc3XDFVWlxcXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMjY1XDI2N1wyNzBcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMVwzNTJcMzU0XDM0NVwzNzdcMjA1LjQ2XDM3N1wxIiBcCisgICJcMzQwXDM0MVwzNDFcMzc3XDIyMlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3IiBcCisgICJcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3M1wzNzdcMjA0LjQ2XDM3N1wxXDIwMVwyMDRcMjA2XDM3NyIgXAorICAiXDIyMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzRcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxQ0lKXDM3N1wyMTZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVBVVlwzNzdcMjA0LjQ2XDM3N1wxXDIzM1wyMzZcMjM3XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDIwNC40NlwzNzdcMiIiMTc5XDM3N1wzMzVcMzM2XDMzNyIgXAorICAiXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDVcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMjJcMjI1XDIyNlwzNzdcMjA0LjQ2XDM3N1wxIiIwNjhcMzc3XDIyM1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNVwzNTBcMzU0XDM0MFwzNzdcMWJmaFwzNzciIFwKKyAgIlwyMDQuNDZcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIyMlwzNTBcMzU0XDM0MFwzNzdcMVZbXVwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMjUzXDI1NlwyNTdcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyNzNcMjc1XDI3NlwzNzdcMjA0LjQ2XDM3N1wxIiBcCisgICJUWVpcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzM1wyMzRcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxeX1cMTc3XDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwIiBcCisgICJcMzc3XDIwM1wzNTBcMzU0XDM0MFwzNzdcM1wzNDVcMzQ2XDM0NlwzNzdcMjA2XDIxMVwyMTJcMzc3LzU3XDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMVtgYVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDciIFwKKyAgIlwzNzdcMjAzXDM1MFwzNTRcMzQwXDM3N1wyXDMyM1wzMjRcMzI0XDM3N2ZqbFwzNzdcMjA0LjQ2XDM3N1wyLzU3XDM3NyIgXAorICAiXDMzNlwzMzdcMzM3XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFcMzQ1XDM0NlwzNDZcMzc3XDIwNC40NlwzNzdcMSIiOSIgXAorICAiXDc3QVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMDQuNDZcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDIyMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzIiBcCisgICIuNDZcMzc3XDE6QEJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMWdrbFwzNzdcMjA0LjQ2XDM3N1wxXDMwMFwzMDJcMzAyIiBcCisgICJcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDEiIjc9XDc3XDM3N1wyMDM8QkNcMzc3IiBcCisgICJcMS81N1wzNzdcMjA2LjQ2XDM3N1wxXDI1N1wyNjJcMjYzXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxOkBCXDM3N1wyMDI8QkNcMzc3XDEiIjk+QFwzNzdcMjA2LjQ2XDM3N1wxXDIwMFwyMDRcMjA1XDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjA0LjQ2XDM3N1wxcnZ3XDM3N1wyMjBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMX5cMjAyXDIwM1wzNzdcMjA0LjQ2XDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMSIiMTc5XDM3NyIgXAorICAiXDIxMWZqbFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxQEZHXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMVwzNTJcMzU0XDM0NVwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIxNi40NlwzNzdcMWVpa1wzNzdcMjI0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMXB0dlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxXDI1NiIgXAorICAiXDI2MFwyNjFcMzc3XDIwNC40NlwzNzdcMVwyMTdcMjIyXDIyM1wzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzciIFwKKyAgIlwyNDBcMzc3XDIwNC40NlwzNzdcMVwyNDZcMjUwXDI1MVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxIiIxNzlcMzc3XDIwMy40NlwzNzdcMSIiMzk7XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3IiBcCisgICJcMjQwXDM3N1wyMTUuNDZcMzc3XDFwdHVcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjEzLjQ2XDM3NyIgXAorICAiXDI6QEJcMzc3XDI1NVwyNTdcMjYwXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjM2XDI0MVwyNDJcMzc3XDIwNC4iIFwKKyAgIjQ2XDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjUxXDI1M1wyNTRcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIwNC40NlwzNzdcMTpAQlwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIxMi40NlwzNzdcMyIiOD5cNzciIFwKKyAgIlwzNzdvc3RcMzc3XDMxMFwzMTJcMzEyXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxMy40NlwzNzdcMiIgXAorICAiNz1cNzdcMzc3XDM1MlwzNTRcMzUwXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjU3XDI2MlwyNjNcMzc3XDIwNC4iIFwKKyAgIjQ2XDM3N1wxXDIxNFwyMjBcMjIxXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjMxXDIzNFwyMzVcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDEiIjU7PVwzNzdcMjAzLjQ2XDM3N1wxIiIwNjhcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1giIFwKKyAgIllcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMXh8fVwzNzdcMjAyXDI1M1wyNTZcMjU3XDM3N1wzXDI1NFwyNTdcMjU3XDM3N1wzMDBcMzAyXDMwMlwzNzciIFwKKyAgIlwzMjZcMzI3XDMzMFwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzAyXDMwM1wzMDQiIFwKKyAgIlwzNzdcMjAyXDMyNVwzMjZcMzI3XDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMDQuNDZcMzc3XDFcMjAyXDIwNlwyMDdcMzc3IiBcCisgICJcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDMwNFwzMDZcMzA2XDM3N1wyMDQuNDZcMzc3XDFrcHFcMzc3XDIyMFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxen5cMTc3XDM3N1wyMDQuNDZcMzc3XDFcMjc1XDI3N1wyNzdcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxIiI2PD5cMzc3IiBcCisgICJcMjExXDI3MVwyNzNcMjc0XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxXDMzMVwzMzJcMzMzXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI1MSIgXAorICAiXDI1M1wyNTRcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3NyIgXAorICAiXDIwMlwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzc5XDc3QVwzNzdcMjAzLjQ2XDM3N1wyIiIxNzlcMzc3IiBcCisgICJcMzM2XDMzN1wzMzdcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzUyXDM1MFwzNzcwNjhcMzc3XDIwMy40NiIgXAorICAiXDM3N1wxIiI1Oz1cMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjAzLjQ2XDM3N1wyLzU3XDM3N1wzNDciIFwKKyAgIlwzNTBcMzUwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxc3d4XDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVwyMzVcMjQwXDI0MVwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTFcMjUzIiBcCisgICJcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjAzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjI0XDIzMFwyMzFcMzc3XDIwNC40NlwzNzdcMXB0dVwzNzdcMjI0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcXGFiXDM3N1wyMDQuNDZcMzc3XDFcMjQyXDI0NFwyNDVcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyNjAiIFwKKyAgIlwyNjNcMjYzXDM3N1wyMDQuNDZcMzc3XDFZXmBcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2IiBcCisgICJcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzNcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwyNTBcMjUzXDI1M1wzNzdcMjA0LjQ2XDM3N1wxSE1PXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFcMjUxXDI1M1wyNTRcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQiIFwKKyAgIjZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNFwzNTBcMzU0XDM0MFwzNzdcMTxCQ1wzNzdcMjA0LjQ2XDM3N1wxXDMxNyIgXAorICAiXDMyMFwzMjBcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVwyNDVcMjQ3XDI1MFwzNzdcMjA0LjQ2XDM3N1wyPEJDXDM3NyIgXAorICAiXDM0NlwzNDdcMzQ3XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1NFwzNDNcMzc3RktNXDM3N1wyMDQuNDYiIFwKKyAgIlwzNzdcMVwyNDNcMjQ2XDI0N1wzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMSIiNTo8IiBcCisgICJcMzc3XDIwNC40NlwzNzdcMVwyMzBcMjMzXDIzNFwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWCIgXAorICAiWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC4iIFwKKyAgIjQ2XDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N1wyMDRcMzUwXDM1NFwzNDBcMzc3XDFcMjMzXDIzNlwyMzdcMzc3XDIwNC40NlwzNzdcMV5iZFwzNzciIFwKKyAgIlwyMjRcMzUwXDM1NFwzNDBcMzc3XDFJTlBcMzc3XDIwNC40NlwzNzdcMVdcXF1cMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxY2hpXDM3N1wyMDQuNDZcMzc3XDFITU9cMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyMDVcMjEwXDIxMlwzNzdcMjA0LjQ2XDM3N1wyIiIwNjhcMzc3XDI2N1wyNzFcMjcyXDM3N1wyMTVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzMzBcMzMyXDMzMlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTEiIFwKKyAgIlwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwyMDVcMzUwXDM1NFwzNDBcMzc3XDFARkdcMzc3XDIwNC40NlwzNzdcMVwyNzRcMjc2XDI3NlwzNzdcMjIzXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjc0XDI3NlwyNzZcMzc3XDIwNS40NlwzNzdcMk1SVFwzNzdcMzI3XDMzMFwzMzBcMzc3XDIxMFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM2XDM3N1VZW1wzNzdcMjA1LjQ2XDM3N1wxXDI3MlwyNzRcMjc1XDM3N1wyMjUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjAzLjQ2XDM3N1wxIiI2PD5cMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMUFGSFwzNzdcMjA0LjQ2XDM3N1wyIiBcCisgICIvNTdcMzc3XDIxN1wyMjJcMjIzXDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDRcMjc0XDI3NlwyNzZcMzc3YmdoXDM3NyIgXAorICAiLjQ2XDM3N1wzMjdcMzMwXDMzMFwzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTFcMjUzIiBcCisgICJcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjA1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjQwXDI0M1wyNDRcMzc3XDIwNC40NlwzNzdcMU1SVFwzNzdcMjI0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjIwXDIyNFwyMjVcMzc3XDIwNS40NlwzNzdcMyIiMDY4XDM3N3l9XDE3N1wzNzdcMzAyXDMwNFwzMDVcMzc3IiBcCisgICJcMjA0XDM1MFwzNTRcMzQwXDM3N1wzXDMwNlwzMDdcMzEwXDM3N1wyMDBcMjA0XDIwNVwzNzcxNzlcMzc3XDIwNS40NiIgXAorICAiXDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDNcMzA2XDMwN1wzMTBcMzc3XDI1N1wyNjEiIFwKKyAgIlwyNjJcMzc3aG1uXDM3N1wyMDQuNDZcMzc3XDFfZGVcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzIiBcCisgICIuNDZcMzc3XDEiIjk+QFwzNzdcMjEzXDM0M1wzNDRcMzQ0XDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDJcMzEzXDMxNSIgXAorICAiXDMxNVwzNzczOTtcMzc3XDIwNS40NlwzNzdcMTJARkdcMzc3XDIxMlwyMTVcMjE2XDM3N1wzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwzNDFcMzQyXDM0MlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM0N1wzNTBcMzUwXDM3N1wzMjBcMzIyXDMyMlwzNzdcMjUzIiBcCisgICJcMjU2XDI1N1wzNzd3e3xcMzc3PUJEXDM3N1wyMDMuNDZcMzc3XDFcMjEyXDIxNVwyMTZcMzc3XDIzMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNSIgXAorICAiXDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjRcMjY2XDI2NlwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3NyIgXAorICAiXDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjA2XDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMVwyNTFcMjUzXDI1NFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxdHh6XDM3N1wyMTAuNDZcMzc3XDIiIjc9XDc3XDM3NyIgXAorICAiOD5cNzdcMzc3XDIxMC40NlwzNzdcMXR4elwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDYuNDZcMzc3IiBcCisgICJcMVwyNTFcMjUzXDI1NFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNDZcMzc3XDFcMzIwXDMyMiIgXAorICAiXDMyMlwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDI3NlwzMDBcMzAxXDM3NzU7PVwzNzdcMjIxLjQ2XDM3N1wxQEYiIFwKKyAgIkdcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIzNlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDI0NlwyNTFcMjUyXDM3N1wyMDQuNDZcMzc3XDFBRkhcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMlwyMzJcMjM1IiBcCisgICJcMjM2XDM3NzA2OFwzNzdcMjE2LjQ2XDM3N1wyIiIwNjhcMzc3XDIzMlwyMzVcMjM2XDM3N1wyMjVcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVhdXlwzNzdcMjA1LjQ2XDM3N1wxTFFTXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40IiBcCisgICI2XDM3N1wxXDMxNlwzMTdcMzIwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMzI0XDMyNVwzMjVcMzc3TlNVXDM3NyIgXAorICAiXDIyMC40NlwzNzdcMiIiMDY4XDM3N1wzMjFcMzIyXDMyM1wzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3IiBcCisgICJcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwNC40NlwzNzdcMVwyMjZcMjMxXDIzMlwzNzciIFwKKyAgIlwyMjVcMzUwXDM1NFwzNDBcMzc3XDJcMzE3XDMyMFwzMjBcMzc3YGVmXDM3N1wyMTQuNDZcMzc3XDJiZ2hcMzc3XDMxNyIgXAorICAiXDMyMVwzMjFcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMV9kZVwzNzdcMjA0LjQ2XDM3N1wyOkBCXDM3N1wzMzJcMzMzIiBcCisgICJcMzM0XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NlwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjI1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjM2XDI0MVwyNDJcMzc3QkdJXDM3N1wyMTQuNDZcMzc3XDMiIjg+XDc3XDM3N35cMjAxIiBcCisgICJcMjAyXDM3N1wzMzVcMzM2XDMzN1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjUiIFwKKyAgIlwyNjdcMjcwXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwyMDdcMzUwXDM1NFwzNDBcMzc3XDFcMjU0XDI1N1wyNTdcMzc3XDIwNC40NlwzNzdcMiIiOD5cNzdcMzc3XDM1MlwzNTQiIFwKKyAgIlwzNTBcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcM1wzMTFcMzEyXDMxM1wzNzdcMjAwXDIwNFwyMDVcMzc3RUpMXDM3NyIgXAorICAiXDIwNi40NlwzNzdcM0VKTFwzNzdcMjAzXDIwN1wyMTBcMzc3XDMxM1wzMTRcMzE1XDM3N1wyMzBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMV9kZVwzNzdcMjAyLjQ2XDM3N1wzLzU3XDM3N2ZqbFwzNzdcMzQyXDM0M1wzNDNcMzc3XDIyNlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxU1hZXDM3N1wyMTc8QkNcMzc3XDFcMzA3XDMxMVwzMTFcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcNCIgXAorICAiXDI3NVwyNzdcMzAwXDM3N35cMjAxXDIwMlwzNzdPVFZcMzc3MDY4XDM3N1wyMDQuNDZcMzc3XDQiIjM5O1wzNzdRVlgiIFwKKyAgIlwzNzdcMjAxXDIwNFwyMDZcMzc3XDI3MFwyNzJcMjcyXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMSIgXAorICAiU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyIiBcCisgICJcMzQ1XDM0NlwzNDZcMzc3XDMxN1wzMjFcMzIxXDM3N1wyMDJcMjc1XDI3N1wzMDBcMzc3XDJcMzE3XDMyMVwzMjFcMzc3IiBcCisgICJcMzQ1XDM0NlwzNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcNFwzMDJcMzA0XDMwNVwzNzdcMjU1XDI1N1wyNjBcMzc3IiBcCisgICJcMzAxXDMwMlwzMDNcMzc3XDM0NlwzNDZcMzQ3XDM3N1wzMDRcMzUwXDM1NFwzNDBcMzc3XDRcMzQ2XDM0N1wzNDdcMzc3IiBcCisgICJcMzI3XDMzMFwzMzBcMzc3XDMzNVwzMzZcMzM3XDM3N1wzNDdcMzUwXDM1MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzciKQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNlZjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmRfcG9reSA6PSAiJHtUSElTRElSfS9maWxlczoiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvdGlueS1pbml0L2ZpbGVzL2luaXQgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDBlOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9pbml0CkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjIE1vdW50IHRoZSBMaW51eCBrZXJuZWwgdmlydHVhbCBmaWxlc3lzdGVtcworbW91bnQgbm9uZSAtdCBwcm9jIC9wcm9jCittb3VudCBub25lIC10IHN5c2ZzIC9zeXMKKworIyBFbnN1cmUgZGV2dG1wZnMgaXMgbW91bnRlZCwgaXQgbXVzdCBiZSBkb25lIG1hbnVhbGx5IHdpdGggaW5pdHJhbWZzCittb3VudCBub25lIC10IGRldnRtcGZzIC9kZXYKKworIyBTZXR1cCBQVFkgaW5mcmFzdHJ1Y3R1cmUKK21rZGlyIC9kZXYvcHRzCittb3VudCBub25lIC10IGRldnB0cyAvZGV2L3B0cworCitpZnVwIGxvCisKKyMgQWxsb3cgZm9yIGRpc3RybyBvciBsb2NhbCBjdXN0b21pemF0aW9ucworaWYgWyAtZiAvZXRjL3JjLmxvY2FsIF0gOyB0aGVuCisJLiAvZXRjL3JjLmxvY2FsCitmaQorCisjIEJlY29tZSBzZXNzaW9uIGxlYWRlciBhbmQgdHJ5IHRvIGZpbmQgYSByZWFsIHR0eSAoZS5nLiB0dHlTMCkKK3doaWxlIHRydWU7IGRvCisJc2V0c2lkIGN0dHloYWNrIHNoCisJZWNobyAiQ29uc29sZSBzaCBleGl0ZWQgd2l0aCAkPywgcmVzcGF3bmluZy4uLiIKKwlzbGVlcCAxCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9yYy5sb2NhbC5zYW1wbGUgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9yYy5sb2NhbC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMTk4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvdGlueS1pbml0L2ZpbGVzL3JjLmxvY2FsLnNhbXBsZQpAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKworIyBTdGFydCBzZXJ2aWNlcyBhbmQgY3VzdG9taXplIHRoZSBib290IHByb2Nlc3MgaGVyZS4KK2VjaG8gIlJ1bm5pbmcgL2V0Yy9yYy5sb2NhbC4uLiIKKworIyBVc2UgaW5pdCBzY3JpcHRzIGluY2x1ZGVkIHdpdGggcGFja2FnZXMgc3VjaCBhcyBkcm9wYmVhcgorIy9ldGMvaW5pdC5kL2Ryb3BiZWFyIHN0YXJ0CisKKyMgU3Bhd24gYSBnZXR0eSBtYW51YWxseQorI3NldHNpZCAvc2Jpbi9nZXR0eSAxMTUyMDAgdHR5UzIKKworIyBQcmludCBhIGJhbm5lcgorI2VjaG8gIllvdSBhcmUgcnVubmluZyBhIHBva3ktdGlueSBpbWFnZSBicm91Z2h0IHRvIHlvdSBieSB0aGUgWW9jdG8gUHJvamVjdC4iCisKKyMgU2V0dXAgYSBkZWJ1Z2dpbmcgZW52aXJvbm1lbnQKKyNta2RpciAvZGVidWdmcworI21vdW50IG5vbmUgLXQgZGVidWdmcyAvZGVidWdmcworCisjIExvYWQgbW9kdWxlcyAobm90ZTogbGludXgteW9jdG8tdGlueSBkb2VzIG5vdCBoYXZlIG1vZHVsZSBzdXBwb3J0IGJ5IGRlZmF1bHQpCisjbW9kcHJvYmUgeW91cmRyaXZlcgorCisjIERPIE5PVCBydW4gYW55IGxvbmcgcnVubmluZyB0YXNrcyBvciBsb29wcyBhcyB0aGVzZSB3aWxsIGRlbGF5CisjIHRoZSAvaW5pdCBzY3JpcHQgYW5kIHRoZSBjb25zb2xlIHNoZWxsLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvdGlueS1pbml0LmJiIGIveW9jdG8tcG9reS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvdGlueS1pbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC90aW55LWluaXQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJQb2t5LXRpbnkgaW5pdCIKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGluaXQgc3lzdGVtIGZvciBwb2t5LXRpbnkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyMiIKKworUkRFUEVORFNfJHtQTn0gPSAiYnVzeWJveCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdCBcCisJICAgZmlsZTovL3JjLmxvY2FsLnNhbXBsZSBcCisJICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29uZmlndXJlKCkgeworCToKK30KKworZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JjLmxvY2FsLnNhbXBsZSAke0R9JHtzeXNjb25mZGlyfQorfQorCitGSUxFU18ke1BOfSA9ICIvaW5pdCAke3N5c2NvbmZkaXJ9L3JjLmxvY2FsLnNhbXBsZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9DT1BZSU5HLkdQTHYyIGIveW9jdG8tcG9reS9tZXRhL0NPUFlJTkcuR1BMdjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9DT1BZSU5HLkdQTHYyCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL0NPUFlJTkcuTUlUIGIveW9jdG8tcG9reS9tZXRhL0NPUFlJTkcuTUlUCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gQ09QWUlORy5NSVQKY29weSB0byB5b2N0by1wb2t5L21ldGEvQ09QWUlORy5NSVQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVhN2MwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgcmVjaXBlcy9kYXRhIGZpbGVzICh1c2FsbHkgc2NyaXB0cykKKyMKKworIyBFeHBhbmQgU1RBR0lOR19ESVJfSE9TVCBzaW5jZSBmb3IgY3Jvc3MtY2FuYWRpYW4vbmF0aXZlL25hdGl2ZXNkaywgdGhpcyB3aWxsCisjIHBvaW50IGVsc2V3aGVyZSBhZnRlciB0aGVzZSBjaGFuZ2VzLgorU1RBR0lOR19ESVJfSE9TVCA6PSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworUEFDS0FHRV9BUkNIID0gImFsbCIKKworcHl0aG9uICgpIHsKKyAgICAjIEFsbG93IHRoaXMgY2xhc3MgdG8gYmUgaW5jbHVkZWQgYnV0IG92ZXJyaWRkZW4gLSBvbmx5IHNldAorICAgICMgdGhlIHZhbHVlcyBpZiB3ZSdyZSBzdGlsbCAiYWxsIiBwYWNrYWdlIGFyY2guCisgICAgaWYgZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIFRydWUpID09ICJhbGwiOgorICAgICAgICAjIE5vIG5lZWQgZm9yIHZpcnR1YWwvbGliYyBvciBhIGNyb3NzIGNvbXBpbGVyCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX0RFRkFVTFRfREVQUyIsIjEiKQorCisgICAgICAgICMgU2V0IHRoZXNlIHRvIGEgY29tbW9uIHNldCBvZiB2YWx1ZXMsIHdlIHNob3VsZG4ndCBiZSB1c2luZyB0aGVtIG90aGVyIHRoYXQgZm9yIFdPUktESVIgZGlyZWN0b3J5CisgICAgICAgICMgbmFtaW5nIGFueXdheQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0FSQ0giLCAiYWxsYXJjaCIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0NDX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfTERfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9BU19BUkNIIiwgIm5vbmUiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0ZQVSIsICIiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1BSRUZJWCIsICIiKQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9FWFRSQV9BUkNIUyIsICIiKQorICAgICAgICBkLnNldFZhcigiU0RLX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJTREtfQ0NfQVJDSCIsICJub25lIikKKworICAgICAgICAjIEF2b2lkIHRoaXMgYmVpbmcgdW5uZWNlc3NhcmlseSBkaWZmZXJlbnQgZHVlIHRvIG51YW5jZXMgb2YKKyAgICAgICAgIyB0aGUgdGFyZ2V0IG1hY2hpbmUgdGhhdCBhcmVuJ3QgaW1wb3J0YW50IGZvciAiYWxsIiBhcmNoCisgICAgICAgICMgcGFja2FnZXMuCisgICAgICAgIGQuc2V0VmFyKCJMREZMQUdTIiwgIiIpCisKKyAgICAgICAgIyBObyBuZWVkIHRvIGRvIHNoYXJlZCBsaWJyYXJ5IHByb2Nlc3Npbmcgb3IgZGVidWcgc3ltYm9sIGhhbmRsaW5nCisgICAgICAgIGQuc2V0VmFyKCJFWENMVURFX0ZST01fU0hMSUJTIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX1NUUklQIiwgIjEiKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgYmIuZXJyb3IoIlBsZWFzZSBlbnN1cmUgcmVjaXBlICVzIHNldHMgUEFDS0FHRV9BUkNIIGJlZm9yZSBpbmhlcml0IHBhY2thZ2Vncm91cCIgJSBkLmdldFZhcigiRklMRSIsIFRydWUpKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODlkNzA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDM4NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBiYmNsYXNzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIGFyY2hpdmUgZm9yOgorIyAxKSBvcmlnaW5hbCAob3IgdW5wYWNrZWQpIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIgorIyAyKSBwYXRjaGVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gInBhdGNoZWQiIChkZWZhdWx0KQorIyAzKSBjb25maWd1cmVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiCisjIDQpIFRoZSBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaDoKKyMgICAgQVJDSElWRVJfTU9ERVtkaWZmXSA9ICIxIgorIyAgICBBbmQgeW91IGNhbiBzZXQgdGhlIG9uZSB0aGF0IHlvdSdkIGxpa2UgdG8gZXhjbHVkZSBmcm9tIHRoZSBkaWZmOgorIyAgICBBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorIyA1KSBUaGUgZW52aXJvbm1lbnQgZGF0YSwgc2ltaWxhciB0byAnYml0YmFrZSAtZSByZWNpcGUnOgorIyAgICBBUkNISVZFUl9NT0RFW2R1bXBkYXRhXSA9ICIxIgorIyA2KSBUaGUgcmVjaXBlICguYmIgYW5kIC5pbmMpOiBBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIKKyMgNykgV2hldGhlciBvdXRwdXQgdGhlIC5zcmMucnBtIHBhY2thZ2U6CisjICAgIEFSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIKKyMgOCkgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgcmVjaXBlIHdob3NlIGxpY2Vuc2UgaW4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgd2lsbCBiZSBleGNsdWRlZC4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID0gJ0dQTCogTEdQTConCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA9ICdDTE9TRUQgUHJvcHJpZXRhcnknCisjIDkpIFRoZSByZWNpcGUgdHlwZSB0aGF0IHdpbGwgYmUgYXJjaGl2ZWQ6CisjICAgIENPUFlMRUZUX1JFQ0lQRV9UWVBFUyA9ICd0YXJnZXQnCisjCisKKyMgRG9uJ3QgZmlsdGVyIHRoZSBsaWNlbnNlIGJ5IGRlZmF1bHQKK0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSA/PSAnJworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFID89ICcnCisjIENyZWF0ZSBhcmNoaXZlIGZvciBhbGwgdGhlIHJlY2lwZSB0eXBlcworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQgbmF0aXZlIG5hdGl2ZXNkayBjcm9zcyBjcm9zc3NkayBjcm9zcy1jYW5hZGlhbicKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0FSQ0hJVkVSX01PREVbc3JwbV0gPz0gIjAiCitBUkNISVZFUl9NT0RFW3NyY10gPz0gInBhdGNoZWQiCitBUkNISVZFUl9NT0RFW2RpZmZdID89ICIwIgorQVJDSElWRVJfTU9ERVtkaWZmLWV4Y2x1ZGVdID89ICIucGMgYXV0b200dGUuY2FjaGUgcGF0Y2hlcyIKK0FSQ0hJVkVSX01PREVbZHVtcGRhdGFdID89ICIwIgorQVJDSElWRVJfTU9ERVtyZWNpcGVdID89ICIwIgorCitERVBMT1lfRElSX1NSQyA/PSAiJHtERVBMT1lfRElSfS9zb3VyY2VzIgorQVJDSElWRVJfVE9QRElSID89ICIke1dPUktESVJ9L2RlcGxveS1zb3VyY2VzIgorQVJDSElWRVJfT1VURElSID0gIiR7QVJDSElWRVJfVE9QRElSfS8ke1RBUkdFVF9TWVN9LyR7UEZ9LyIKK0FSQ0hJVkVSX1dPUktESVIgPSAiJHtXT1JLRElSfS9hcmNoaXZlci13b3JrLyIKKworZG9fZHVtcGRhdGFbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9IgorZG9fYXJfcmVjaXBlW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSIKK2RvX2FyX29yaWdpbmFsW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSAke0FSQ0hJVkVSX1dPUktESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCitkb19kZXBsb3lfYWxsX2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCisKKyMgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZvciB0aGUgc2hlbGwgc2NyaXB0IHRvIHVzZSBpdAorCisKK3B5dGhvbiAoKSB7CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaW5jbHVkZWQsIHJlYXNvbiA9IGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpCisgICAgaWYgbm90IGluY2x1ZGVkOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYXJjaGl2ZXI6ICVzIGlzIGV4Y2x1ZGVkOiAlcycgJSAocG4sIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdhcmNoaXZlcjogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwbiwgcmVhc29uKSkKKworICAgIGFyX3NyYyA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKQorICAgIGFyX2R1bXBkYXRhID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2R1bXBkYXRhJywgVHJ1ZSkKKyAgICBhcl9yZWNpcGUgPSBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAncmVjaXBlJywgVHJ1ZSkKKworICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9vcmlnaW5hbCcgJSBwbikKKyAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3BhdGNoZWQnICUgcG4pCisgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAjIFdlIGNhbid0IHVzZSAiYWRkdGFzayBkb19hcl9jb25maWd1cmVkIGFmdGVyIGRvX2NvbmZpZ3VyZSIgc2luY2UgaXQKKyAgICAgICAgIyB3aWxsIGNhdXNlIHRoZSBkZXB0YXNrIG9mIGRvX3BvcHVsYXRlX3N5c3Jvb3QgdG8gcnVuIG5vdCBtYXR0ZXIgd2hhdAorICAgICAgICAjIGFyY2hpdmVzIHdlIG5lZWQsIHNvIHdlIGFkZCB0aGUgZGVwZW5kcyBoZXJlLgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2FyX2NvbmZpZ3VyZWQnLCAnZGVwZW5kcycsICcgJXM6ZG9fY29uZmlndXJlJyAlIHBuKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9jb25maWd1cmVkJyAlIHBuKQorICAgIGVsaWYgYXJfc3JjOgorICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBBUkNISVZFUl9NT0RFW3NyY106ICVzIiAlIGFyX3NyYykKKworICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXBsb3lfYXJjaGl2ZXMnLCAnZGVwZW5kcycsICcgJXM6ZG9fZHVtcGRhdGEnICUgcG4pCisKKyAgICBpZiBhcl9yZWNpcGUgPT0gIjEiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9yZWNpcGUnICUgcG4pCisKKyAgICAjIE91dHB1dCB0aGUgc3JwbSBwYWNrYWdlCisgICAgYXJfc3JwbSA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkKKyAgICBpZiBhcl9zcnBtID09ICIxIjoKKyAgICAgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJycgYW5kIGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkgPT0gJ3JwbSc6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19wYWNrYWdlX3dyaXRlX3JwbScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2R1bXBkYXRhJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfcmVjaXBlID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3JlY2lwZScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfb3JpZ2luYWwnICUgcG4pCisgICAgICAgICAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9wYXRjaGVkJyAlIHBuKQorICAgICAgICAgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfY29uZmlndXJlZCcgJSBwbikKKworICAgICMgVGhlIGdjYyBzdGFmZiB1c2VzIHNoYXJlZCBzb3VyY2UKKyAgICBmbGFnID0gZC5nZXRWYXJGbGFnKCJkb191bnBhY2siLCAic3RhbXAtYmFzZSIsIFRydWUpCisgICAgaWYgZmxhZzoKKyAgICAgICAgaWYgYXJfc3JjIGluIFsgJ29yaWdpbmFsJywgJ3BhdGNoZWQnIF06CisgICAgICAgICAgICBhcl9vdXRkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX1RPUERJUicsIFRydWUpLCAnd29yay1zaGFyZWQnKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIGFyX291dGRpcikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlJywgZmxhZykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9wYXRjaGVkJywgJ3N0YW1wLWJhc2UnLCBmbGFnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAnc3RhbXAtYmFzZScsIGZsYWcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfb3JpZ2luYWwnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX3BhdGNoZWQnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2NyZWF0ZV9kaWZmX2d6JywgJ3ZhcmRlcHNleGNsdWRlJywgJ1BGJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdjcmVhdGVfdGFyYmFsbCcsICd2YXJkZXBzZXhjbHVkZScsICdQRicpCisKKyAgICAgICAgZmxhZ19jbGVhbiA9IGQuZ2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBUcnVlKQorICAgICAgICBpZiBmbGFnX2NsZWFuOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfcGF0Y2hlZCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKK30KKworIyBUYWtlIGFsbCB0aGUgc291cmNlcyBmb3IgYSByZWNpcGUgYW5kIHB1dHMgdGhlbSBpbiBXT1JLRElSL2FyY2hpdmVyLXdvcmsvLgorIyBGaWxlcyBpbiBTUkNfVVJJIGFyZSBjb3BpZWQgZGlyZWN0bHksIGFueXRoaW5nIHRoYXQncyBhIGRpcmVjdG9yeQorIyAoZS5nLiBnaXQgcmVwb3NpdG9yaWVzKSBpcyAidW5wYWNrZWQiIGFuZCB0aGVuIHB1dCBpbnRvIGEgdGFyYmFsbC4KK3B5dGhvbiBkb19hcl9vcmlnaW5hbCgpIHsKKworICAgIGltcG9ydCBzaHV0aWwsIHRhcmZpbGUsIHRlbXBmaWxlCisKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JjJywgVHJ1ZSkgIT0gIm9yaWdpbmFsIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS4uLicpCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpLnJzdHJpcCgiLyIpOworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbCk6CisgICAgICAgICAgICBzaHV0aWwuY29weShsb2NhbCwgYXJfb3V0ZGlyKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIobG9jYWwpOgorICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKQorCisgICAgICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1kLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorICAgICAgICAgICAgZmV0Y2gudW5wYWNrKHRtcGRpciwgKHVybCwpKQorCisgICAgICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgICAgICAjIFdlIGVsaW1pbmF0ZSBhbnkgQVVUT0lOQysgaW4gdGhlIHJldmlzaW9uLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNyY19yZXYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihkKS5yZXBsYWNlKCdBVVRPSU5DKycsJycpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3JjX3JldiA9ICdOT1JFVicKKyAgICAgICAgICAgIHRhcm5hbWUgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCBiYXNlbmFtZSArICcuJyArIHNyY19yZXYgKyAnLnRhci5neicpCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgJ3c6Z3onKQorICAgICAgICAgICAgdGFyLmFkZCgnLicpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgIyBFbWl0IHBhdGNoIHNlcmllcyBmaWxlcyBmb3IgJ29yaWdpbmFsJworICAgIGJiLm5vdGUoJ1dyaXRpbmcgcGF0Y2ggc2VyaWVzIGZpbGVzLi4uJykKKyAgICBmb3IgcGF0Y2ggaW4gc3JjX3BhdGNoZXMoZCk6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBwYXRjaGRpciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCisgICAgICAgIGlmIHBhdGNoZGlyOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJ3Nlcmllcy5zdWJkaXIuJXMnICUgcGF0Y2hkaXIucmVwbGFjZSgnLycsICdfJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXJpZXMgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCitweXRob24gZG9fYXJfcGF0Y2hlZCgpIHsKKworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSAhPSAncGF0Y2hlZCc6CisgICAgICAgIHJldHVybgorCisgICAgIyBHZXQgdGhlIEFSQ0hJVkVSX09VVERJUiBiZWZvcmUgd2UgcmVzZXQgdGhlIFdPUktESVIKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIHBhdGNoZWQgc291cmNlLi4uJykKKyAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgIyBUaGUgZ2NjIHN0YWZmIHVzZXMgc2hhcmVkIHNvdXJjZQorICAgIGZsYWcgPSBkLmdldFZhckZsYWcoJ2RvX3VucGFjaycsICdzdGFtcC1iYXNlJywgVHJ1ZSkKKyAgICBpZiBmbGFnOgorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBkLmdldFZhcignUycsIFRydWUpLCAncGF0Y2hlZCcsIGFyX291dGRpciwgJ2djYycpCisgICAgZWxzZToKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgJ3BhdGNoZWQnLCBhcl9vdXRkaXIpCit9CisKK3B5dGhvbiBkb19hcl9jb25maWd1cmVkKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSA9PSAnY29uZmlndXJlZCc6CisgICAgICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgY29uZmlndXJlZCBzb3VyY2UuLi4nKQorICAgICAgICAjIFRoZSBsaWJ0b29sLW5hdGl2ZSdzIGRvX2NvbmZpZ3VyZSB3aWxsIHJlbW92ZSB0aGUKKyAgICAgICAgIyAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9saWJ0b29sLm00LCBzbyB3ZSBjYW4ndCByZS1ydW4gdGhlCisgICAgICAgICMgZG9fY29uZmlndXJlLCB3ZSBhcmNoaXZlIHRoZSBhbHJlYWR5IGNvbmZpZ3VyZWQgJHtTfSB0bworICAgICAgICAjIGluc3RlYWQgb2YuCisgICAgICAgIGlmIGQuZ2V0VmFyKCdQTicsIFRydWUpICE9ICdsaWJ0b29sLW5hdGl2ZSc6CisgICAgICAgICAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX2NvbmZpZ3VyZSBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgICAgICAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2tlcm5lbF9jb25maWdtZScsIGQpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjbWFrZScsIGQpOgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZ2VuZXJhdGVfdG9vbGNoYWluX2ZpbGUnLCBkKQorICAgICAgICAgICAgcHJlZnVuY3MgPSBkLmdldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdwcmVmdW5jcycsIFRydWUpCisgICAgICAgICAgICBmb3IgZnVuYyBpbiAocHJlZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAic3lzcm9vdF9jbGVhbnNzdGF0ZSI6CisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmdW5jLCBkKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19jb25maWd1cmUnLCBkKQorICAgICAgICAgICAgcG9zdGZ1bmNzID0gZC5nZXRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAncG9zdGZ1bmNzJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBmdW5jIGluIChwb3N0ZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAiZG9fcWFfY29uZmlndXJlIjoKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQpCisgICAgICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAgICAgYnVpbGRkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgICAgIGlmIHNyY2RpciAhPSBidWlsZGRpcjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJ1aWxkZGlyKToKKyAgICAgICAgICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKGJ1aWxkZGlyLCBvcy5wYXRoLmpvaW4oc3JjZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICdidWlsZC4lcy5hcl9jb25maWd1cmVkJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKSkKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgc3JjZGlyLCAnY29uZmlndXJlZCcsIGFyX291dGRpcikKK30KKworZGVmIGNyZWF0ZV90YXJiYWxsKGQsIHNyY2Rpciwgc3VmZml4LCBhcl9vdXRkaXIsIHBmPU5vbmUpOgorICAgICIiIgorICAgIGNyZWF0ZSB0aGUgdGFyYmFsbCBmcm9tIHNyY2RpcgorICAgICIiIgorICAgIGltcG9ydCB0YXJmaWxlCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYXJfb3V0ZGlyKQorICAgIGlmIHBmOgorICAgICAgICB0YXJuYW1lID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLSVzLnRhci5neicgJSAocGYsIHN1ZmZpeCkpCisgICAgZWxzZToKKyAgICAgICAgdGFybmFtZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy0lcy50YXIuZ3onICUgXAorICAgICAgICAgICAgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBzdWZmaXgpKQorCisgICAgc3JjZGlyID0gc3JjZGlyLnJzdHJpcCgnLycpCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShzcmNkaXIpCisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyY2RpcikKKyAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgIGJiLm5vdGUoJ0NyZWF0aW5nICVzJyAlIHRhcm5hbWUpCisgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsICd3Omd6JykKKyAgICB0YXIuYWRkKGJhc2VuYW1lKQorICAgIHRhci5jbG9zZSgpCisKKyMgY3JlYXRpbmcgLmRpZmYuZ3ogYmV0d2VlbiBzb3VyY2Uub3JpZyBhbmQgc291cmNlCitkZWYgY3JlYXRlX2RpZmZfZ3ooZCwgc3JjX29yaWcsIHNyYywgYXJfb3V0ZGlyKToKKworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcmMpIG9yIG5vdCBvcy5wYXRoLmlzZGlyKHNyY19vcmlnKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIFRoZSBkaWZmIC0tZXhjbHVkZSBjYW4ndCBleGNsdWRlIHRoZSBmaWxlIHdpdGggcGF0aCwgc28gd2UgY29weQorICAgICMgdGhlIHBhdGNoZWQgc291cmNlLCBhbmQgcmVtb3ZlIHRoZSBmaWxlcyB0aGF0IHdlJ2QgbGlrZSB0bworICAgICMgZXhjbHVkZS4KKyAgICBzcmNfcGF0Y2hlZCA9IHNyYyArICcucGF0Y2hlZCcKKyAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3JjLCBzcmNfcGF0Y2hlZCkKKyAgICBmb3IgaSBpbiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZi1leGNsdWRlJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfb3JpZywgaSksIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfcGF0Y2hlZCwgaSksIHJlY3Vyc2U9VHJ1ZSkKKworICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoc3JjKQorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzcmMpCisgICAgb3MuY2hkaXIoZGlybmFtZSkKKyAgICBvdXRfZmlsZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy1kaWZmLmd6JyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGRpZmZfY21kID0gJ2RpZmYgLU5hdXIgJXMub3JpZyAlcy5wYXRjaGVkIHwgZ3ppcCAtYyA+ICVzJyAlIChiYXNlbmFtZSwgYmFzZW5hbWUsIG91dF9maWxlKQorICAgIHN1YnByb2Nlc3MuY2FsbChkaWZmX2NtZCwgc2hlbGw9VHJ1ZSkKKyAgICBiYi51dGlscy5yZW1vdmUoc3JjX3BhdGNoZWQsIHJlY3Vyc2U9VHJ1ZSkKKworIyBSdW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaAorcHl0aG9uIGRvX3VucGFja19hbmRfcGF0Y2goKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpIG5vdCBpbiBcCisgICAgICAgICAgICBbICdwYXRjaGVkJywgJ2NvbmZpZ3VyZWQnXSBhbmQgXAorICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2RpZmYnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybgorCisgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCisKKyAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX3VucGFjayBkb19wYXRjaCBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgZC5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorCisgICAgIyBUaGUgY2hhbmdlZCAnV09SS0RJUicgYWxzbyBjYXN1ZWQgJ0InIGNoYW5nZWQsIGNyZWF0ZSBkaXIgJ0InIGZvciB0aGUKKyAgICAjIHBvc3NpYmx5IHJlcXVpcmluZyBvZiB0aGUgZm9sbG93aW5nIHRhc2tzIChzdWNoIGFzIHNvbWUgcmVjaXBlcydzCisgICAgIyBkb19wYXRjaCByZXF1aXJlZCAnQicgZXhpc3RlZCkuCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCdCJywgVHJ1ZSkpCisKKyAgICAjIFRoZSBrZXJuZWwgc291cmNlIGlzIHJlYWR5IGFmdGVyIGRvX3ZhbGlkYXRlX2JyYW5jaGVzCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgZCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdW5wYWNrJywgZCkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19rZXJuZWxfY2hlY2tvdXQnLCBkKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3ZhbGlkYXRlX2JyYW5jaGVzJywgZCkKKyAgICBlbHNlOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3VucGFjaycsIGQpCisKKyAgICAjIFNhdmUgdGhlIG9yaWdpbmFsIHNvdXJjZSBmb3IgY3JlYXRpbmcgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgc3JjID0gZC5nZXRWYXIoJ1MnLCBUcnVlKS5yc3RyaXAoJy8nKQorICAgICAgICBzcmNfb3JpZyA9ICclcy5vcmlnJyAlIHNyYworICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKHNyYywgc3JjX29yaWcpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19wYXRjaCcsIGQpCisgICAgIyBDcmVhdGUgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgYmIubm90ZSgnQ3JlYXRpbmcgZGlmZiBnei4uLicpCisgICAgICAgIGNyZWF0ZV9kaWZmX2d6KGQsIHNyY19vcmlnLCBzcmMsIGFyX291dGRpcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNyY19vcmlnLCByZWN1cnNlPVRydWUpCit9CisKK3B5dGhvbiBkb19hcl9yZWNpcGUgKCkgeworICAgICIiIgorICAgIGFyY2hpdmUgdGhlIHJlY2lwZSwgaW5jbHVkaW5nIC5iYiBhbmQgLmluYy4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICByZXF1aXJlX3JlID0gcmUuY29tcGlsZSggciJyZXF1aXJlXHMrKC4rKSIgKQorICAgIGluY2x1ZGVfcmUgPSByZS5jb21waWxlKCByImluY2x1ZGVccysoLispIiApCisgICAgYmJmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIG91dGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCBcCisgICAgICAgICAgICAnJXMtcmVjaXBlJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRkaXIpCisgICAgc2h1dGlsLmNvcHkoYmJmaWxlLCBvdXRkaXIpCisKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGJiZmlsZSkKKyAgICBiYnBhdGggPSAnJXM6JXMnICUgKGRpcm5hbWUsIGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICBmID0gb3BlbihiYmZpbGUsICdyJykKKyAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICBpbmNmaWxlID0gTm9uZQorICAgICAgICBpZiByZXF1aXJlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IHJlcXVpcmVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgZWxpZiBpbmNsdWRlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IGluY2x1ZGVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgaWYgaW5jZmlsZToKKyAgICAgICAgICAgIGluY2ZpbGUgPSBiYi5kYXRhLmV4cGFuZChpbmNmaWxlLCBkKQorICAgICAgICAgICAgaW5jZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgaW5jZmlsZSkKKyAgICAgICAgICAgIGlmIGluY2ZpbGU6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkoaW5jZmlsZSwgb3V0ZGlyKQorCisgICAgY3JlYXRlX3RhcmJhbGwoZCwgb3V0ZGlyLCAncmVjaXBlJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpKQorICAgIGJiLnV0aWxzLnJlbW92ZShvdXRkaXIsIHJlY3Vyc2U9VHJ1ZSkKK30KKworcHl0aG9uIGRvX2R1bXBkYXRhICgpIHsKKyAgICAiIiIKKyAgICBkdW1wIGVudmlyb25tZW50IGRhdGEgdG8gJHtQRn0tc2hvd2RhdGEuZHVtcAorICAgICIiIgorCisgICAgZHVtcGZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpLCBcCisgICAgICAgICclcy1zaG93ZGF0YS5kdW1wJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLm5vdGUoJ0R1bXBpbmcgbWV0YWRhdGEgaW50byAlcycgJSBkdW1wZmlsZSkKKyAgICBmID0gb3BlbihkdW1wZmlsZSwgJ3cnKQorICAgICMgZW1pdCB2YXJpYWJsZXMgYW5kIHNoZWxsIGZ1bmN0aW9ucworICAgIGJiLmRhdGEuZW1pdF9lbnYoZiwgZCwgVHJ1ZSkKKyAgICAjIGVtaXQgdGhlIG1ldGFkYXRhIHdoaWNoIGlzbid0IHZhbGlkIHNoZWxsCisgICAgZm9yIGUgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIGJiLmRhdGEuZ2V0VmFyRmxhZyhlLCAncHl0aG9uJywgZCk6CisgICAgICAgICAgICBmLndyaXRlKCJcbnB5dGhvbiAlcyAoKSB7XG4lc31cbiIgJSAoZSwgYmIuZGF0YS5nZXRWYXIoZSwgZCwgVHJ1ZSkpKQorICAgIGYuY2xvc2UoKQorfQorCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95X2FyY2hpdmVzIgorZG9fZGVwbG95X2FyY2hpdmVzICgpIHsKKyAgICBlY2hvICJEZXBsb3lpbmcgc291cmNlIGFyY2hpdmUgZmlsZXMgLi4uIgorfQorcHl0aG9uIGRvX2RlcGxveV9hcmNoaXZlc19zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9Citkb19kZXBsb3lfYXJjaGl2ZXNbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtBUkNISVZFUl9UT1BESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfU1JDfSIKKworYWRkdGFzayBkb19hcl9vcmlnaW5hbCBhZnRlciBkb191bnBhY2sKK2FkZHRhc2sgZG9fdW5wYWNrX2FuZF9wYXRjaCBhZnRlciBkb19wYXRjaAorYWRkdGFzayBkb19hcl9wYXRjaGVkIGFmdGVyIGRvX3VucGFja19hbmRfcGF0Y2gKK2FkZHRhc2sgZG9fYXJfY29uZmlndXJlZCBhZnRlciBkb191bnBhY2tfYW5kX3BhdGNoCithZGR0YXNrIGRvX2R1bXBkYXRhCithZGR0YXNrIGRvX2FyX3JlY2lwZQorYWRkdGFzayBkb19kZXBsb3lfYXJjaGl2ZXMgYmVmb3JlIGRvX2J1aWxkCisKK2FkZHRhc2sgZG9fZGVwbG95X2FsbF9hcmNoaXZlcyBhZnRlciBkb19kZXBsb3lfYXJjaGl2ZXMKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjcmRlcHRhc2tdID0gImRvX2RlcGxveV9hcmNoaXZlcyIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXMoKSB7CisgICAgICAgIDoKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWNmOTdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLWJyb2tlbnNlcC5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorIyBBdXRvdG9vbHMgY2xhc3MgZm9yIHJlY2lwZXMgd2hlcmUgc2VwYXJhdGUgYnVpbGQgZGlyIGRvZXNuJ3Qgd29yaworIyBJZGVhbGx5IHdlIHNob3VsZCBmaXggc29mdHdhcmUgc28gaXQgZG9lcyB3b3JrLiBTdGFuZGFyZCBhdXRvdG9vbHMgc3VwcG9ydHMKKyMgdGhpcy4KK2luaGVyaXQgYXV0b3Rvb2xzCitCID0gIiR7U30iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTA0NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpAQCAtMCwwICsxLDMxMiBAQAorZGVmIGF1dG90b29sc19kZXBfcHJlcGVuZChkKToKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9BVVRPVE9PTFNfREVQUycsIFRydWUpOgorICAgICAgICByZXR1cm4gJycKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZXBzID0gJycKKworICAgIGlmIHBuIGluIFsnYXV0b2NvbmYtbmF0aXZlJywgJ2F1dG9tYWtlLW5hdGl2ZScsICdoZWxwMm1hbi1uYXRpdmUnXToKKyAgICAgICAgcmV0dXJuIGRlcHMKKyAgICBkZXBzICs9ICdhdXRvY29uZi1uYXRpdmUgYXV0b21ha2UtbmF0aXZlICcKKworICAgIGlmIG5vdCBwbiBpbiBbJ2xpYnRvb2wnLCAnbGlidG9vbC1uYXRpdmUnXSBhbmQgbm90IHBuLmVuZHN3aXRoKCJsaWJ0b29sLWNyb3NzIik6CisgICAgICAgIGRlcHMgKz0gJ2xpYnRvb2wtbmF0aXZlICcKKyAgICAgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgVHJ1ZSk6CisgICAgICAgICAgICBkZXBzICs9ICdsaWJ0b29sLWNyb3NzICcKKworICAgIHJldHVybiBkZXBzICsgJ2dudS1jb25maWctbmF0aXZlICcKKworRVhUUkFfT0VNQUtFID0gIiIKKworREVQRU5EU19wcmVwZW5kID0gIiR7QGF1dG90b29sc19kZXBfcHJlcGVuZChkKX0gIgorCitpbmhlcml0IHNpdGVpbmZvCisKKyMgU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2Ygc2hlbGwgc2NyaXB0cyB3aXRoIHZhcmlhYmxlcyBkZWZpbmVkIHRvIHN1cHBseSB0ZXN0CisjIHJlc3VsdHMgZm9yIGF1dG9jb25mIHRlc3RzIHdlIGNhbm5vdCBydW4gYXQgYnVpbGQgdGltZS4KK2V4cG9ydCBDT05GSUdfU0lURSA9ICIke0BzaXRlaW5mb19nZXRfZmlsZXMoZCwgRmFsc2UpfSIKKworYWNwYXRocyA9ICJkZWZhdWx0IgorRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50IgorCitleHBvcnQgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgPSAiJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IgorCisjIFdoZW4gYnVpbGRpbmcgdG9vbHMgZm9yIHVzZSBhdCBidWlsZC10aW1lIGl0J3MgcmVjb21tZW5kZWQgZm9yIHRoZSBidWlsZAorIyBzeXN0ZW0gdG8gdXNlIHRoZXNlIHZhcmlhYmxlcyB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyMgKGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYXV0b2Jvb2svYXV0b2Jvb2svYXV0b2Jvb2tfMjcwLmh0bWwpCitleHBvcnQgQ1BQX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NQUH0iCitleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DRkxBR1N9IgorCitleHBvcnQgQ1hYX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKworZXhwb3J0IExEX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xEfSIKK2V4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xERkxBR1N9IgorCitkZWYgYXBwZW5kX2xpYnRvb2xfc3lzcm9vdChkKToKKyAgICAjIE9ubHkgc3VwcGx5IGxpYnRvb2wgc3lzcm9vdCBvcHRpb24gZm9yIG5vbi1uYXRpdmUgcGFja2FnZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHJldHVybiAnLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9JworICAgIHJldHVybiAiIgorCitDT05GSUdVUkVPUFRTID0gIiAtLWJ1aWxkPSR7QlVJTERfU1lTfSBcCisJCSAgLS1ob3N0PSR7SE9TVF9TWVN9IFwKKwkJICAtLXRhcmdldD0ke1RBUkdFVF9TWVN9IFwKKwkJICAtLXByZWZpeD0ke3ByZWZpeH0gXAorCQkgIC0tZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAorCQkgIC0tYmluZGlyPSR7YmluZGlyfSBcCisJCSAgLS1zYmluZGlyPSR7c2JpbmRpcn0gXAorCQkgIC0tbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKKwkJICAtLWRhdGFkaXI9JHtkYXRhZGlyfSBcCisJCSAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQkgIC0tc2hhcmVkc3RhdGVkaXI9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCQkgIC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkJICAtLWxpYmRpcj0ke2xpYmRpcn0gXAorCQkgIC0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9IFwKKwkJICAtLW9sZGluY2x1ZGVkaXI9JHtvbGRpbmNsdWRlZGlyfSBcCisJCSAgLS1pbmZvZGlyPSR7aW5mb2Rpcn0gXAorCQkgIC0tbWFuZGlyPSR7bWFuZGlyfSBcCisJCSAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyBcCisJCSAgJHtDT05GSUdVUkVPUFRfREVQVFJBQ0t9IFwKKwkJICAke0BhcHBlbmRfbGlidG9vbF9zeXNyb290KGQpfSIKK0NPTkZJR1VSRU9QVF9ERVBUUkFDSyA/PSAiLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmciCisKKworb2VfcnVuY29uZiAoKSB7CisJY2Znc2NyaXB0PSIke1N9L2NvbmZpZ3VyZSIKKwlpZiBbIC14ICIkY2Znc2NyaXB0IiBdIDsgdGhlbgorCQliYm5vdGUgIlJ1bm5pbmcgJGNmZ3NjcmlwdCAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfSAkQCIKKwkJc2V0ICtlCisJCSR7Q0FDSEVEX0NPTkZJR1VSRVZBUlN9ICRjZmdzY3JpcHQgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0gIiRAIgorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWVjaG8gIkNvbmZpZ3VyZSBmYWlsZWQuIFRoZSBjb250ZW50cyBvZiBhbGwgY29uZmlnLmxvZyBmaWxlcyBmb2xsb3dzIHRvIGFpZCBkZWJ1Z2dpbmciCisJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgY29uZmlnLmxvZyAtcHJpbnQgLWV4ZWMgY2F0IHt9IFw7CisJCQlkaWUgIm9lX3J1bmNvbmYgZmFpbGVkIgorCQlmaQorCQlzZXQgLWUKKwllbHNlCisJCWJiZmF0YWwgIm5vIGNvbmZpZ3VyZSBzY3JpcHQgZm91bmQgYXQgJGNmZ3NjcmlwdCIKKwlmaQorfQorCitBVVRPVE9PTFNfQVVYRElSID89ICIke1N9IgorCitDT05GSUdVUkVTVEFNUEZJTEUgPSAiJHtXT1JLRElSfS9jb25maWd1cmUuc3N0YXRlIgorCithdXRvdG9vbHNfcHJlY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF07IHRoZW4KKwkJCQllY2hvICJQcmV2aW91c2x5IGNvbmZpZ3VyZWQgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGRldGVjdGVkLCBjbGVhbmluZyAke0J9IgorCQkJCXJtIC1yZiAke0J9CisJCQkJbWtkaXIgLXAgJHtCfQorCQkJZWxzZQorCQkJCSMgQXQgbGVhc3QgcmVtb3ZlIHRoZSAubGEgZmlsZXMgc2luY2UgYXV0b21ha2Ugd29uJ3QgYXV0b21hdGljYWxseQorCQkJCSMgcmVnZW5lcmF0ZSB0aGVtIGV2ZW4gaWYgQ0ZMQUdTL0xERkxBR1MgYXJlIGRpZmZlcmVudAorCQkJCWNkICR7U30KKwkJCQlpZiBbICIke0NMRUFOQlJPS0VOfSIgIT0gIjEiIC1hIFwoIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIFwpIF07IHRoZW4KKwkJCQkJZWNobyAiUnVubmluZyBcIiR7TUFLRX0gY2xlYW5cIiBpbiAke1N9IgorCQkJCQkke01BS0V9IGNsZWFuCisJCQkJZmkKKwkJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgXCoubGEgLWRlbGV0ZQorCQkJZmkKKwkJZmkKKwlmaQorfQorCithdXRvdG9vbHNfcG9zdGNvbmZpZ3VyZSgpeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKK30KKworRVhUUkFDT05GRlVOQ1MgPz89ICIiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImF1dG90b29sc19wcmVjb25maWd1cmUgYXV0b3Rvb2xzX2NvcHlfYWNsb2NhbHMgJHtFWFRSQUNPTkZGVU5DU30iCitkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiYXV0b3Rvb2xzX3Bvc3Rjb25maWd1cmUiCisKK0FDTE9DQUxESVIgPSAiJHtCfS9hY2xvY2FsLWNvcHkiCisKK3B5dGhvbiBhdXRvdG9vbHNfY29weV9hY2xvY2FscyAoKSB7CisgICAgcyA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocyArICIvY29uZmlndXJlLmluIikgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzICsgIi9jb25maWd1cmUuYWMiKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJBVVRPVE9PTFNfQ09QWUFDTE9DQUwiLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgIHRhc2tkZXBkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCisgICAgI2JiLndhcm4oc3RyKHRhc2tkZXBkYXRhKSkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYWNsb2NhbGRpciA9IGQuZ2V0VmFyKCJBQ0xPQ0FMRElSIiwgVHJ1ZSkKKyAgICBvZS5wYXRoLnJlbW92ZShhY2xvY2FsZGlyKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihhY2xvY2FsZGlyKQorICAgIHN0YXJ0ID0gTm9uZQorICAgIGNvbmZpZ3VyZWRlcHMgPSBbXQorCisgICAgZm9yIGRlcCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAgICAgaWYgZGF0YVsxXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgZGF0YVswXSA9PSBwbjoKKyAgICAgICAgICAgIHN0YXJ0ID0gZGVwCisgICAgICAgICAgICBicmVhaworICAgIGlmIHN0YXJ0IGlzIE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCJDb3VsZG4ndCBmaW5kIG91cnNlbGYgaW4gQkJfVEFTS0RFUERBVEE/IikKKworICAgICMgV2UgbmVlZCB0byBmaW5kIGNvbmZpZ3VyZSB0YXNrcyB3aGljaCBhcmUgZWl0aGVyIGZyb20gPHRhcmdldD4gLT4gPHRhcmdldD4KKyAgICAjIG9yIDxuYXRpdmU+IC0+IDxuYXRpdmU+IGJ1dCBub3QgPHRhcmdldD4gLT4gPG5hdGl2ZT4gdW5sZXNzIHRoZXkncmUgZGlyZWN0CisgICAgIyBkZXBlbmRlbmNpZXMuIFRoaXMgbWlycm9ycyB3aGF0IHdvdWxkIGdldCByZXN0b3JlZCBmcm9tIHNzdGF0ZS4KKyAgICBkb25lID0gW2RlcF0KKyAgICBuZXh0ID0gW2RlcF0KKyAgICB3aGlsZSBuZXh0OgorICAgICAgICBuZXcgPSBbXQorICAgICAgICBmb3IgZGVwIGluIG5leHQ6CisgICAgICAgICAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICAgICAgICAgZm9yIGRhdGFkZXAgaW4gZGF0YVszXToKKyAgICAgICAgICAgICAgICBpZiBkYXRhZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoZGF0YWRlcCkKKyAgICAgICAgICAgICAgICBpZiAobm90IGRhdGFbMF0uZW5kc3dpdGgoIi1uYXRpdmUiKSkgYW5kIHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdLmVuZHN3aXRoKCItbmF0aXZlIikgYW5kIGRlcCAhPSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXcuYXBwZW5kKGRhdGFkZXApCisgICAgICAgICAgICAgICAgaWYgdGFza2RlcGRhdGFbZGF0YWRlcF1bMV0gPT0gImRvX2NvbmZpZ3VyZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWRlcHMuYXBwZW5kKHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdKQorICAgICAgICBuZXh0ID0gbmV3CisKKyAgICAjY29uZmlndXJlZGVwczIgPSBbXQorICAgICNmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICMgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAjICAgIGlmIGRhdGFbMV0gPT0gImRvX2NvbmZpZ3VyZSIgYW5kIGRhdGFbMF0gIT0gcG46CisgICAgIyAgICAgICAgY29uZmlndXJlZGVwczIuYXBwZW5kKGRhdGFbMF0pCisgICAgI2NvbmZpZ3VyZWRlcHMuc29ydCgpCisgICAgI2NvbmZpZ3VyZWRlcHMyLnNvcnQoKQorICAgICNiYi53YXJuKHN0cihjb25maWd1cmVkZXBzKSkKKyAgICAjYmIud2FybihzdHIoY29uZmlndXJlZGVwczIpKQorCisgICAgY3AgPSBbXQorICAgIHNpdGVjb25mID0gW10gICAgCisgICAgZm9yIGMgaW4gY29uZmlndXJlZGVwczoKKyAgICAgICAgaWYgYy5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke0JVSUxEX0FSQ0h9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiBjLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtTREtfQVJDSH1fJHtTREtfT1N9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiAiLWNyb3NzLSIgaW4gYyBvciAiLWNyb3Nzc2RrIiBpbiBjOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtNQUNISU5FfS0lcy5wb3B1bGF0ZV9zeXNyb290IiAlIGMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKG1hbmlmZXN0LCAiciIpCisgICAgICAgICAgICBmb3IgbCBpbiBmOgorICAgICAgICAgICAgICAgIGlmICIvYWNsb2NhbC8iIGluIGwgYW5kIGwuc3RyaXAoKS5lbmRzd2l0aCgiLm00Iik6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxpZiAiY29uZmlnX3NpdGUuZC8iIGluIGw6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIG5vdCBmb3VuZCIgJSBtYW5pZmVzdCkKKworICAgIGZvciBjIGluIGNwOgorICAgICAgICB0ID0gb3MucGF0aC5qb2luKGFjbG9jYWxkaXIsIG9zLnBhdGguYmFzZW5hbWUoYykpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoYywgdCkKKyAgICAgICAgICAgIAorICAgIGQuc2V0VmFyKCJDT05GSUdfU0lURSIsIHNpdGVpbmZvX2dldF9maWxlcyhkLCBGYWxzZSkpCit9CithdXRvdG9vbHNfY29weV9hY2xvY2Fsc1t2YXJkZXBzZXhjbHVkZV0gKz0gIk1BQ0hJTkUgU0RLX0FSQ0ggQlVJTERfQVJDSCBTREtfT1MgQkJfVEFTS0RFUERBVEEiCisKK2F1dG90b29sc19kb19jb25maWd1cmUoKSB7CisJIyBXQVJOSU5HOiBncm9zcyBoYWNrIGZvbGxvd3M6CisJIyBBbiBhdXRvdG9vbHMgYnVpbHQgcGFja2FnZSBnZW5lcmFsbHkgbmVlZHMgdGhlc2Ugc2NyaXB0cywgaG93ZXZlciBvbmx5CisJIyBhdXRvbWFrZSBvciBsaWJ0b29saXplIGFjdHVhbGx5IGluc3RhbGwgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlbS4KKwkjIFRoaXMgaXMgYSBwcm9ibGVtIGluIGJ1aWxkcyB0aGF0IGRvIG5vdCB1c2UgbGlidG9vbCBvciBhdXRvbWFrZSwgaW4gdGhlIGNhc2UKKwkjIHdoZXJlIHdlIC1uZWVkLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlc2Ugc2NyaXB0cy4gIGUuZy4gcnVubmluZyBhIGJ1aWxkCisJIyBmb3IgYSBwYWNrYWdlIHdob3NlIGF1dG90b29scyBhcmUgb2xkLCBvbiBhbiB4ODZfNjQgbWFjaGluZSwgd2hpY2ggdGhlIG9sZAorCSMgY29uZmlnLnN1YiBkb2VzIG5vdCBzdXBwb3J0LiAgV29yayBhcm91bmQgdGhpcyBieSBpbnN0YWxsaW5nIHRoZW0gbWFudWFsbHkKKwkjIHJlZ2FyZGxlc3MuCisJKCBmb3IgYWMgaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBjb25maWd1cmUuaW4gLW8gLW5hbWUgY29uZmlndXJlLmFjYDsgZG8KKwkJcm0gLWYgYGRpcm5hbWUgJGFjYC9jb25maWd1cmUKKwkJZG9uZSApCisJaWYgWyAtZSAke1N9L2NvbmZpZ3VyZS5pbiAtbyAtZSAke1N9L2NvbmZpZ3VyZS5hYyBdOyB0aGVuCisJCW9sZGRpcj1gcHdkYAorCQljZCAke1N9CisJCUFDTE9DQUw9ImFjbG9jYWwgLS1zeXN0ZW0tYWNkaXI9JHtBQ0xPQ0FMRElSfS8iCisJCWlmIFsgeCIke2FjcGF0aHN9IiA9IHhkZWZhdWx0IF07IHRoZW4KKwkJCWFjcGF0aHM9CisJCQlmb3IgaSBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1tYXhkZXB0aCAyIC1uYW1lIFwqLm00fGdyZXAgLXYgJ2FjbG9jYWwubTQnfCBcCisJCQkJZ3JlcCAtdiAnYWNpbmNsdWRlLm00JyB8IGdyZXAgLXYgJ2FjbG9jYWwtY29weScgfCBzZWQgLWUgJ3MsXCguKi9cKS4qJCxcMSwnfHNvcnQgLXVgOyBkbworCQkJCWFjcGF0aHM9IiRhY3BhdGhzIC1JICRpIgorCQkJZG9uZQorCQllbHNlCisJCQlhY3BhdGhzPSIke2FjcGF0aHN9IgorCQlmaQorCQlBVVRPVj1gYXV0b21ha2UgLS12ZXJzaW9uIHwgc2VkIC1lICcxe3MvLiogLy87cy9cLlswLTldXCskLy99O3EnYAorCQlhdXRvbWFrZSAtLXZlcnNpb24KKwkJZWNobyAiQVVUT1YgaXMgJEFVVE9WIgorCQlpZiBbIC1kICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC0kQVVUT1YgXTsgdGhlbgorCQkJQUNMT0NBTD0iJEFDTE9DQUwgLS1hdXRvbWFrZS1hY2Rpcj0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2FjbG9jYWwtJEFVVE9WIgorCQlmaQorCQkjIGF1dG9yZWNvbmYgaXMgdG9vIHNoeSB0byBvdmVyd3JpdGUgYWNsb2NhbC5tNCBpZiBpdCBkb2Vzbid0IGxvb2sKKwkJIyBsaWtlIGl0IHdhcyBhdXRvLWdlbmVyYXRlZC4gIFdvcmsgYXJvdW5kIHRoaXMgYnkgYmxvd2luZyBpdCBhd2F5CisJCSMgYnkgaGFuZCwgdW5sZXNzIHRoZSBwYWNrYWdlIHNwZWNpZmljYWxseSBhc2tlZCBub3QgdG8gcnVuIGFjbG9jYWwuCisJCWlmICEgZWNobyAke0VYVFJBX0FVVE9SRUNPTkZ9IHwgZ3JlcCAtcSAiYWNsb2NhbCI7IHRoZW4KKwkJCXJtIC1mIGFjbG9jYWwubTQKKwkJZmkKKwkJaWYgWyAtZSBjb25maWd1cmUuaW4gXTsgdGhlbgorCQkJQ09ORklHVVJFX0FDPWNvbmZpZ3VyZS5pbgorCQllbHNlCisJCQlDT05GSUdVUkVfQUM9Y29uZmlndXJlLmFjCisJCWZpCisJCWlmIGdyZXAgIl5bWzpzcGFjZTpdXSpBTV9HTElCX0dOVV9HRVRURVhUIiAkQ09ORklHVVJFX0FDID4vZGV2L251bGw7IHRoZW4KKwkJCWlmIGdyZXAgInNlZC4qUE9URklMRVMiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJCTogZG8gbm90aGluZyAtLSB3ZSBzdGlsbCBoYXZlIGFuIG9sZCB1bm1vZGlmaWVkIGNvbmZpZ3VyZS5hYworCSAgICAJCWVsc2UKKwkJCQliYm5vdGUgRXhlY3V0aW5nIGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJCWVjaG8gIm5vIiB8IGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJZmkKKwkJZWxzZSBpZiBncmVwICJeW1s6c3BhY2U6XV0qQU1fR05VX0dFVFRFWFQiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJIyBXZSdkIGNhbGwgZ2V0dGV4dGl6ZSBoZXJlIGlmIGl0IHdhc24ndCBzbyBicm9rZW4uLi4KKwkJCQljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvY29uZmlnLnJwYXRoICR7QVVUT1RPT0xTX0FVWERJUn0vCisJCQkJaWYgWyAtZCAke1N9L3BvLyBdOyB0aGVuCisJCQkJCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvLworCQkJCQlpZiBbICEgLWUgJHtTfS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIF07IHRoZW4KKwkJCQkJCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9yZW1vdmUtcG90Y2RhdGUuc2luICR7U30vcG8vCisJCQkJCWZpCisJCQkJZmkKKwkJCQlmb3IgaSBpbiBnZXR0ZXh0Lm00IGljb252Lm00IGxpYi1sZC5tNCBsaWItbGluay5tNCBsaWItcHJlZml4Lm00IG5scy5tNCBwby5tNCBwcm9ndGVzdC5tNDsgZG8KKwkJCQkJZm9yIGogaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSAkaSB8IGdyZXAgLXYgYWNsb2NhbC1jb3B5YDsgZG8KKwkJCQkJCXJtICRqCisJCQkJCWRvbmUKKwkJCQlkb25lCisJCQlmaQorCQlmaQorCQlta2RpciAtcCBtNAorCQlpZiBncmVwICJeW1s6c3BhY2U6XV0qW0FJXVtDVF1fUFJPR19JTlRMVE9PTCIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQliYm5vdGUgRXhlY3V0aW5nIGludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJCWludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJZmkKKwkJYmJub3RlIEV4ZWN1dGluZyBBQ0xPQ0FMPVwiJEFDTE9DQUxcIiBhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAke0VYVFJBX0FVVE9SRUNPTkZ9ICRhY3BhdGhzCisJCUFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorCQljZCAkb2xkZGlyCisJZmkKKwlpZiBbIC1lICR7U30vY29uZmlndXJlIF07IHRoZW4KKwkJb2VfcnVuY29uZgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbmZpZ3VyZSIKKwlmaQorfQorCithdXRvdG9vbHNfZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQorCitpbmhlcml0IHNpdGVjb25maWcKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9faW5zdGFsbAorCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2F1dG90b29sc19zdGFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzQxZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKK2luaGVyaXQgYXV0b3Rvb2xzCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDc4MDAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNjI5IEBACitCQl9ERUZBVUxUX1RBU0sgPz0gImJ1aWxkIgorQ0xBU1NPVkVSUklERSA/PSAiY2xhc3MtdGFyZ2V0IgorCitpbmhlcml0IHBhdGNoCitpbmhlcml0IHN0YWdpbmcKKworaW5oZXJpdCBtaXJyb3JzCitpbmhlcml0IHV0aWxzCitpbmhlcml0IHV0aWxpdHktdGFza3MKK2luaGVyaXQgbWV0YWRhdGFfc2NtCitpbmhlcml0IGxvZ2dpbmcKKworT0VfSU1QT1JUUyArPSAib3Mgc3lzIHRpbWUgb2UucGF0aCBvZS51dGlscyBvZS5kYXRhIG9lLnBhY2thZ2Ugb2UucGFja2FnZWdyb3VwIG9lLnNzdGF0ZXNpZyBvZS5sc2Igb2UuY2FjaGVkcGF0aCIKK09FX0lNUE9SVFNbdHlwZV0gPSAibGlzdCIKKworZGVmIG9lX2ltcG9ydChkKToKKyAgICBpbXBvcnQgc3lzCisKKyAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIHN5cy5wYXRoWzA6MF0gPSBbb3MucGF0aC5qb2luKGRpciwgImxpYiIpIGZvciBkaXIgaW4gYmJwYXRoXQorCisgICAgZGVmIGluamVjdChuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIk1ha2UgYSBweXRob24gb2JqZWN0IGFjY2Vzc2libGUgZnJvbSB0aGUgbWV0YWRhdGEiIiIKKyAgICAgICAgaWYgaGFzYXR0cihiYi51dGlscywgIl9jb250ZXh0Iik6CisgICAgICAgICAgICBiYi51dGlscy5fY29udGV4dFtuYW1lXSA9IHZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfX2J1aWx0aW5zX19bbmFtZV0gPSB2YWx1ZQorCisgICAgaW1wb3J0IG9lLmRhdGEKKyAgICBmb3IgdG9pbXBvcnQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgiT0VfSU1QT1JUUyIsIGQpOgorICAgICAgICBpbXBvcnRlZCA9IF9faW1wb3J0X18odG9pbXBvcnQpCisgICAgICAgIGluamVjdCh0b2ltcG9ydC5zcGxpdCgiLiIsIDEpWzBdLCBpbXBvcnRlZCkKKworICAgIHJldHVybiAiIgorCisjIFdlIG5lZWQgdGhlIG9lIG1vZHVsZSBuYW1lIHNwYWNlIGVhcmx5IChiZWZvcmUgSU5IRVJJVHMgZ2V0IGFkZGVkKQorT0VfSU1QT1JURUQgOj0gIiR7QG9lX2ltcG9ydChkKX0iCisKK2RlZiBsc2JfZGlzdHJvX2lkZW50aWZpZXIoZCk6CisgICAgYWRqdXN0ID0gZC5nZXRWYXIoJ0xTQl9ESVNUUk9fQURKVVNUJywgVHJ1ZSkKKyAgICBhZGp1c3RfZnVuYyA9IE5vbmUKKyAgICBpZiBhZGp1c3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFkanVzdF9mdW5jID0gZ2xvYmFscygpW2FkanVzdF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBvZS5sc2IuZGlzdHJvX2lkZW50aWZpZXIoYWRqdXN0X2Z1bmMpCisKK2RpZSgpIHsKKwliYmZhdGFsX2xvZyAiJCoiCit9CisKK29lX3J1bm1ha2VfY2FsbCgpIHsKKwliYm5vdGUgJHtNQUtFfSAke0VYVFJBX09FTUFLRX0gIiRAIgorCSR7TUFLRX0gJHtFWFRSQV9PRU1BS0V9ICIkQCIKK30KKworb2VfcnVubWFrZSgpIHsKKwlvZV9ydW5tYWtlX2NhbGwgIiRAIiB8fCBkaWUgIm9lX3J1bm1ha2UgZmFpbGVkIgorfQorCisKK2RlZiBiYXNlX2RlcF9wcmVwZW5kKGQpOgorICAgICMKKyAgICAjIElkZWFsbHkgdGhpcyB3aWxsIGNoZWNrIGEgZmxhZyBzbyB3ZSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgaW4KKyAgICAjIHRoZSBjYXNlIHdoZXJlIGhvc3QgPT0gYnVpbGQgPT0gdGFyZ2V0LCBmb3Igbm93IHdlIGRvbid0IHdvcmsgaW4KKyAgICAjIHRoYXQgY2FzZSB0aG91Z2guCisgICAgIworCisgICAgZGVwcyA9ICIiCisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICBpZiAoZC5nZXRWYXIoJ0hPU1RfU1lTJywgVHJ1ZSkgIT0gZC5nZXRWYXIoJ0JVSUxEX1NZUycsIFRydWUpKToKKyAgICAgICAgICAgIGRlcHMgKz0gIiB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIHZpcnR1YWwvbGliYyAiCisgICAgcmV0dXJuIGRlcHMKKworQkFTRURFUEVORFMgPSAiJHtAYmFzZV9kZXBfcHJlcGVuZChkKX0iCisKK0RFUEVORFNfcHJlcGVuZD0iJHtCQVNFREVQRU5EU30gIgorCitGSUxFU1BBVEggPSAiJHtAYmFzZV9zZXRfZmlsZXNwYXRoKFsiJHtGSUxFX0RJUk5BTUV9LyR7QlB9IiwgIiR7RklMRV9ESVJOQU1FfS8ke0JQTn0iLCAiJHtGSUxFX0RJUk5BTUV9L2ZpbGVzIl0sIGQpfSIKKyMgVEhJU0RJUiBvbmx5IHdvcmtzIHByb3Blcmx5IHdpdGggaW1lZGlhdGUgZXhwYW5zaW9uIGFzIGl0IGhhcyB0byBydW4KKyMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvY2F0aW9uIGl0cyB1c2VkICg6PSkKK1RISVNESVIgPSAiJHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpfSIKKworZGVmIGV4dHJhX3BhdGhfZWxlbWVudHMoZCk6CisgICAgcGF0aCA9ICIiCisgICAgZWxlbWVudHMgPSAoZC5nZXRWYXIoJ0VYVFJBTkFUSVZFUEFUSCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIGUgaW4gZWxlbWVudHM6CisgICAgICAgIHBhdGggPSBwYXRoICsgIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8iICsgZSArICI6IgorICAgIHJldHVybiBwYXRoCisKK1BBVEhfcHJlcGVuZCA9ICIke0BleHRyYV9wYXRoX2VsZW1lbnRzKGQpfSIKKworZGVmIGdldF9saWNfY2hlY2tzdW1fZmlsZV9saXN0KGQpOgorICAgIGZpbGVsaXN0ID0gW10KKyAgICBsaWNfZmlsZXMgPSBkLmdldFZhcigiTElDX0ZJTEVTX0NIS1NVTSIsIFRydWUpIG9yICcnCisgICAgdG1wZGlyID0gZC5nZXRWYXIoIlRNUERJUiIsIFRydWUpCisKKyAgICB1cmxzID0gbGljX2ZpbGVzLnNwbGl0KCkKKyAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICMgV2Ugb25seSBjYXJlIGFib3V0IGl0ZW1zIHRoYXQgYXJlIGFic29sdXRlIHBhdGhzIHNpbmNlCisgICAgICAgICMgYW55IG90aGVycyBzaG91bGQgYmUgY292ZXJlZCBieSBTUkNfVVJJLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybClbMl0KKyAgICAgICAgICAgIGlmIHBhdGhbMF0gPT0gJy8nOgorICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChwYXRoICsgIjoiICsgc3RyKG9zLnBhdGguZXhpc3RzKHBhdGgpKSkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKyAiOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAiICsgdXJsKQorICAgIHJldHVybiAiICIuam9pbihmaWxlbGlzdCkKKworYWRkdGFzayBmZXRjaAorZG9fZmV0Y2hbZGlyc10gPSAiJHtETF9ESVJ9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdID0gIiR7QGJiLmZldGNoLmdldF9jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdICs9ICIgJHtAZ2V0X2xpY19jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbdmFyZGVwc10gKz0gIlNSQ1JFViIKK3B5dGhvbiBiYXNlX2RvX2ZldGNoKCkgeworCisgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHNyY191cmkpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2FkZHRhc2sgdW5wYWNrIGFmdGVyIGRvX2ZldGNoCitkb191bnBhY2tbZGlyc10gPSAiJHtXT1JLRElSfSIKK3B5dGhvbiBiYXNlX2RvX3VucGFjaygpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICByb290ZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgIyBFbnN1cmUgdGhhdCB3ZSBjbGVhbnVwICR7U30vcGF0Y2hlcworICAgICMgVE9ETzogSW52ZXN0aWdhdGUgaWYgd2UgY2FuIHJlbW92ZQorICAgICMgdGhlIGVudGlyZSAke1N9IGluIHRoaXMgY2FzZS4KKyAgICBzX2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBwX2RpciA9IG9zLnBhdGguam9pbihzX2RpciwgJ3BhdGNoZXMnKQorICAgIGJiLnV0aWxzLnJlbW92ZShwX2RpciwgVHJ1ZSkKKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICAgICBmZXRjaGVyLnVucGFjayhyb290ZGlyKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2RlZiBwa2dhcmNoX21hcHBpbmcoZCk6CisgICAgIyBDb21wYXRpYmlsaXR5IG1hcHBpbmdzIG9mIFRVTkVfUEtHQVJDSCAob3B0IGluKQorICAgIGlmIGQuZ2V0VmFyKCJQS0dBUkNIQ09NUEFUX0FSTVY3QSIsIFRydWUpOgorICAgICAgICBpZiBkLmdldFZhcigiVFVORV9QS0dBUkNIIiwgVHJ1ZSkgPT0gImFybXY3YS12ZnAtbmVvbiI6CisgICAgICAgICAgICBkLnNldFZhcigiVFVORV9QS0dBUkNIIiwgImFybXY3YSIpCisKK2RlZiBnZXRfbGF5ZXJzX2JyYW5jaF9yZXYoZCk6CisgICAgbGF5ZXJzID0gKGQuZ2V0VmFyKCJCQkxBWUVSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbGF5ZXJzX2JyYW5jaF9yZXYgPSBbIiUtMTdzID0gXCIlczolc1wiIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICBpID0gbGVuKGxheWVyc19icmFuY2hfcmV2KS0xCisgICAgcDEgPSBsYXllcnNfYnJhbmNoX3JldltpXS5maW5kKCI9IikKKyAgICBzMSA9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICB3aGlsZSBpID4gMDoKKyAgICAgICAgcDIgPSBsYXllcnNfYnJhbmNoX3JldltpLTFdLmZpbmQoIj0iKQorICAgICAgICBzMj0gbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXVtwMjpdCisgICAgICAgIGlmIHMxID09IHMyOgorICAgICAgICAgICAgbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXSA9IGxheWVyc19icmFuY2hfcmV2W2ktMV1bMDpwMl0KKyAgICAgICAgICAgIGkgLT0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaSAtPSAxCisgICAgICAgICAgICBwMSA9IGxheWVyc19icmFuY2hfcmV2W2ldLmZpbmQoIj0iKQorICAgICAgICAgICAgczE9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICByZXR1cm4gbGF5ZXJzX2JyYW5jaF9yZXYKKworCitCVUlMRENGR19GVU5DUyA/Pz0gImJ1aWxkY2ZnX3ZhcnMgZ2V0X2xheWVyc19icmFuY2hfcmV2IGJ1aWxkY2ZnX25lZWRlZHZhcnMiCitCVUlMRENGR19GVU5DU1t0eXBlXSA9ICJsaXN0IgorCitkZWYgYnVpbGRjZmdfdmFycyhkKToKKyAgICBzdGF0dXN2YXJzID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnQlVJTERDRkdfVkFSUycsIGQpCisgICAgZm9yIHZhciBpbiBzdGF0dXN2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCAnJS0xN3MgPSAiJXMiJyAlICh2YXIsIHZhbHVlKQorCitkZWYgYnVpbGRjZmdfbmVlZGVkdmFycyhkKToKKyAgICBuZWVkZWRfdmFycyA9IG9lLmRhdGEudHlwZWRfdmFsdWUoIkJVSUxEQ0ZHX05FRURFRFZBUlMiLCBkKQorICAgIHBlc3RlcnVzZXIgPSBbXQorICAgIGZvciB2IGluIG5lZWRlZF92YXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2LCBUcnVlKQorICAgICAgICBpZiBub3QgdmFsIG9yIHZhbCA9PSAnSU5WQUxJRCc6CisgICAgICAgICAgICBwZXN0ZXJ1c2VyLmFwcGVuZCh2KQorCisgICAgaWYgcGVzdGVydXNlcjoKKyAgICAgICAgYmIuZmF0YWwoJ1RoZSBmb2xsb3dpbmcgdmFyaWFibGUocykgd2VyZSBub3Qgc2V0OiAlc1xuUGxlYXNlIHNldCB0aGVtIGRpcmVjdGx5LCBvciBjaG9vc2UgYSBNQUNISU5FIG9yIERJU1RSTyB0aGF0IHNldHMgdGhlbS4nICUgJywgJy5qb2luKHBlc3RlcnVzZXIpKQorCithZGRoYW5kbGVyIGJhc2VfZXZlbnRoYW5kbGVyCitiYXNlX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UgYmIucnVucXVldWUuc2NlbmVRdWV1ZUNvbXBsZXRlIgorcHl0aG9uIGJhc2VfZXZlbnRoYW5kbGVyKCkgeworICAgIGltcG9ydCBiYi5ydW5xdWV1ZQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICBpZiBub3QgZS5kYXRhLmdldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgRmFsc2UpOgorICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgbHNiX2Rpc3Ryb19pZGVudGlmaWVyKGUuZGF0YSkpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoJ0JCX1ZFUlNJT04nLCBiYi5fX3ZlcnNpb25fXykKKyAgICAgICAgcGtnYXJjaF9tYXBwaW5nKGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIkRJU1RST19GRUFUVVJFUyIsIGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIk1BQ0hJTkVfRkVBVFVSRVMiLCBlLmRhdGEpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBzdGF0dXNsaW5lcyA9IFtdCisgICAgICAgIGZvciBmdW5jIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0JVSUxEQ0ZHX0ZVTkNTJywgbG9jYWxkYXRhKToKKyAgICAgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgICAgIGlmIGZ1bmMgbm90IGluIGc6CisgICAgICAgICAgICAgICAgYmIud2FybigiQnVpbGQgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIGZ1bmMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZsaW5lcyA9IGdbZnVuY10obG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGlmIGZsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgICAgICBzdGF0dXNoZWFkZXIgPSBlLmRhdGEuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgICAgICBiYi5wbGFpbignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworICAgICMgVGhpcyBjb2RlIGlzIHRvIHNpbGVuY2Ugd2FybmluZ3Mgd2hlcmUgdGhlIFNESyB2YXJpYWJsZXMgb3ZlcndyaXRlIHRoZSAKKyAgICAjIHRhcmdldCBvbmVzIGFuZCB3ZSdkIHNlZSBkdWxwaWNhdGUga2V5IG5hbWVzIG92ZXJ3cml0aW5nIGVhY2ggb3RoZXIKKyAgICAjIGZvciB2YXJpb3VzIFBSRUZFUlJFRF9QUk9WSURFUlMKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiVEFSR0VUX1BSRUZJWCIsIFRydWUpID09IGUuZGF0YS5nZXRWYXIoIlNES19QUkVGSVgiLCBUcnVlKToKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiKQorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiKQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlQ29tcGxldGUpOgorICAgICAgICBjb21wbGV0aW9ucyA9IGUuZGF0YS5leHBhbmQoIiR7U1RBR0lOR19ESVJ9L3NzdGF0ZWNvbXBsZXRpb25zIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGxldGlvbnMpOgorICAgICAgICAgICAgY21kcyA9IHNldCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oY29tcGxldGlvbnMsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBjbWRzID0gc2V0KGYpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJjb21wbGV0aW9uX2Z1bmN0aW9uIiwgIlxuIi5qb2luKGNtZHMpKQorICAgICAgICAgICAgZS5kYXRhLnNldFZhckZsYWcoImNvbXBsZXRpb25fZnVuY3Rpb24iLCAiZnVuYyIsICIxIikKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJFeGVjdXRpbmcgU2NlbmVRdWV1ZSBDb21wbGV0aW9uIGNvbW1hbmRzOiAlcyIgJSAiXG4iLmpvaW4oY21kcykpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNvbXBsZXRpb25fZnVuY3Rpb24iLCBlLmRhdGEpCisgICAgICAgICAgICBvcy5yZW1vdmUoY29tcGxldGlvbnMpCit9CisKK0NPTkZJR1VSRVNUQU1QRklMRSA9ICIke1dPUktESVJ9L2NvbmZpZ3VyZS5zc3RhdGUiCitDTEVBTkJST0tFTiA9ICIwIgorCithZGR0YXNrIGNvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorZG9fY29uZmlndXJlW2RpcnNdID0gIiR7Qn0iCitkb19jb25maWd1cmVbZGVwdGFza10gPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2Jhc2VfZG9fY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJY2QgJHtCfQorCQkJaWYgWyAiJHtDTEVBTkJST0tFTn0iICE9ICIxIiAtYSBcKCAtZSBNYWtlZmlsZSAtbyAtZSBtYWtlZmlsZSAtbyAtZSBHTlVtYWtlZmlsZSBcKSBdOyB0aGVuCisJCQkJb2VfcnVubWFrZSBjbGVhbgorCQkJZmkKKwkJCWZpbmQgJHtCfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBcKi5sYSAtZGVsZXRlCisJCWZpCisJZmkKKwlpZiBbIC1uICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIF07IHRoZW4KKwkJZWNobyAke0JCX1RBU0tIQVNIfSA+ICR7Q09ORklHVVJFU1RBTVBGSUxFfQorCWZpCit9CisKK2FkZHRhc2sgY29tcGlsZSBhZnRlciBkb19jb25maWd1cmUKK2RvX2NvbXBpbGVbZGlyc10gPSAiJHtCfSIKK2Jhc2VfZG9fY29tcGlsZSgpIHsKKwlpZiBbIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIF07IHRoZW4KKwkJb2VfcnVubWFrZSB8fCBkaWUgIm1ha2UgZmFpbGVkIgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbXBpbGUiCisJZmkKK30KKworYWRkdGFzayBpbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKK2RvX2luc3RhbGxbZGlyc10gPSAiJHtEfSAke0J9IgorIyBSZW1vdmUgYW5kIHJlLWNyZWF0ZSAke0R9IHNvIHRoYXQgaXMgaXQgZ3VhcmFudGVlZCB0byBiZSBlbXB0eQorZG9faW5zdGFsbFtjbGVhbmRpcnNdID0gIiR7RH0iCisKK2Jhc2VfZG9faW5zdGFsbCgpIHsKKwk6Cit9CisKK2Jhc2VfZG9fcGFja2FnZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgYnVpbGQgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAorZG9fYnVpbGRbbm9leGVjXSA9ICIxIgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19kZXBsb3kiCitkb19idWlsZCAoKSB7CisJOgorfQorCitkZWYgc2V0X3BhY2thZ2V0cmlwbGV0KGQpOgorICAgIGFyY2hzID0gW10KKyAgICB0b3MgPSBbXQorICAgIHR2cyA9IFtdCisKKyAgICBhcmNocy5hcHBlbmQoZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpKQorICAgIHRvcy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpKQorICAgIHR2cy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBUcnVlKSkKKworICAgIGRlZiBzZXR0cmlwbGV0KGQsIHZhcm5hbWUsIGFyY2hzLCB0b3MsIHR2cyk6CisgICAgICAgIHRyaXBsZXRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyY2hzKSk6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoc1tpXToKKyAgICAgICAgICAgICAgICB0cmlwbGV0cy5hcHBlbmQoYXJjaCArIHR2c1tpXSArICItIiArIHRvc1tpXSkKKyAgICAgICAgdHJpcGxldHMucmV2ZXJzZSgpCisgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsICIgIi5qb2luKHRyaXBsZXRzKSkKKworICAgIHNldHRyaXBsZXQoZCwgIlBLR1RSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGFyY2hzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkuc3BsaXQoKSkKKyAgICAgICAgdG9zLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKSkKKyAgICAgICAgdHZzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgVHJ1ZSkpCisKKyAgICBzZXR0cmlwbGV0KGQsICJQS0dNTFRSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCitweXRob24gKCkgeworICAgIGltcG9ydCBzdHJpbmcsIHJlCisKKyAgICAjIEhhbmRsZSBQQUNLQUdFQ09ORklHCisgICAgIworICAgICMgVGhlc2UgdGFrZSB0aGUgZm9ybToKKyAgICAjCisgICAgIyBQQUNLQUdFQ09ORklHID8/PSAiPGRlZmF1bHQgb3B0aW9ucz4iCisgICAgIyBQQUNLQUdFQ09ORklHW2Zvb10gPSAiLS1lbmFibGUtZm9vLC0tZGlzYWJsZS1mb28sZm9vX2RlcGVuZHMsZm9vX3J1bnRpbWVfZGVwZW5kcyIKKyAgICBwa2djb25maWdmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKSBvciB7fQorICAgIGlmIHBrZ2NvbmZpZ2ZsYWdzOgorICAgICAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorCisgICAgICAgIGRlZiBleHBhbmRGaWx0ZXIoYXBwZW5kcywgZXh0ZW5zaW9uLCBwcmVmaXgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmV4cGFuZCgiICIuam9pbihhcHBlbmRzKSkpCisgICAgICAgICAgICBuZXdhcHBlbmRzID0gW10KKyAgICAgICAgICAgIGZvciBhIGluIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgYS5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICgiLWNyb3NzLSIgaW4gYSk6CisgICAgICAgICAgICAgICAgICAgIG5ld2FwcGVuZHMuYXBwZW5kKGEpCisgICAgICAgICAgICAgICAgZWxpZiBhLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICAgICAgICAgIHN1YnMgPSBhLnNwbGl0KCIvIiwgMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQoInZpcnR1YWwvIiArIHByZWZpeCArIHN1YnMgKyBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgYS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZChhICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQocHJlZml4ICsgYSArIGV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBuZXdhcHBlbmRzCisKKyAgICAgICAgZGVmIGFwcGVuZFZhcih2YXJuYW1lLCBhcHBlbmRzKToKKyAgICAgICAgICAgIGlmIG5vdCBhcHBlbmRzOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgdmFybmFtZS5maW5kKCJERVBFTkRTIikgIT0gLTE6CisgICAgICAgICAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCAibmF0aXZlc2RrLSIpCisgICAgICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kcyA9IGV4cGFuZEZpbHRlcihhcHBlbmRzLCAiLW5hdGl2ZSIsICIiKQorICAgICAgICAgICAgICAgIGlmIG1scHJlZml4OgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCBtbHByZWZpeCkKKyAgICAgICAgICAgIHZhcm5hbWUgPSBkLmV4cGFuZCh2YXJuYW1lKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIodmFybmFtZSwgIiAiICsgIiAiLmpvaW4oYXBwZW5kcykpCisKKyAgICAgICAgZXh0cmFkZXBzID0gW10KKyAgICAgICAgZXh0cmFyZGVwcyA9IFtdCisgICAgICAgIGV4dHJhY29uZiA9IFtdCisgICAgICAgIGZvciBmbGFnLCBmbGFndmFsIGluIHNvcnRlZChwa2djb25maWdmbGFncy5pdGVtcygpKToKKyAgICAgICAgICAgIGl0ZW1zID0gZmxhZ3ZhbC5zcGxpdCgiLCIpCisgICAgICAgICAgICBudW0gPSBsZW4oaXRlbXMpCisgICAgICAgICAgICBpZiBudW0gPiA0OgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJPbmx5IGVuYWJsZSxkaXNhYmxlLGRlcGVuZCxyZGVwZW5kIGNhbiBiZSBzcGVjaWZpZWQhIikKKworICAgICAgICAgICAgaWYgZmxhZyBpbiBwa2djb25maWc6CisgICAgICAgICAgICAgICAgaWYgbnVtID49IDMgYW5kIGl0ZW1zWzJdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWRlcHMuYXBwZW5kKGl0ZW1zWzJdKQorICAgICAgICAgICAgICAgIGlmIG51bSA+PSA0IGFuZCBpdGVtc1szXToKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFyZGVwcy5hcHBlbmQoaXRlbXNbM10pCisgICAgICAgICAgICAgICAgaWYgbnVtID49IDEgYW5kIGl0ZW1zWzBdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWNvbmYuYXBwZW5kKGl0ZW1zWzBdKQorICAgICAgICAgICAgZWxpZiBudW0gPj0gMiBhbmQgaXRlbXNbMV06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY29uZi5hcHBlbmQoaXRlbXNbMV0pCisgICAgICAgIGFwcGVuZFZhcignREVQRU5EUycsIGV4dHJhZGVwcykKKyAgICAgICAgYXBwZW5kVmFyKCdSREVQRU5EU18ke1BOfScsIGV4dHJhcmRlcHMpCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2NtYWtlJywgZCk6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ01BS0UnLCBleHRyYWNvbmYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ09ORicsIGV4dHJhY29uZikKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIGlmIGxpY2Vuc2UgPT0gIklOVkFMSUQiOgorICAgICAgICBiYi5mYXRhbCgnVGhpcyByZWNpcGUgZG9lcyBub3QgaGF2ZSB0aGUgTElDRU5TRSBmaWVsZCBzZXQgKCVzKScgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2xpY2Vuc2UnLCBkKToKKyAgICAgICAgY2hlY2tfbGljZW5zZV9mb3JtYXQoZCkKKyAgICAgICAgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZyA9IGNoZWNrX2xpY2Vuc2VfZmxhZ3MoZCkKKyAgICAgICAgaWYgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZzoKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTa2lwcGluZyAlcyBiZWNhdXNlIGl0IGhhcyBhIHJlc3RyaWN0ZWQgbGljZW5zZSBub3QiCisgICAgICAgICAgICAgICAgICIgd2hpdGVsaXN0ZWQgaW4gTElDRU5TRV9GTEFHU19XSElURUxJU1QiICUgcG4pCisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiYmVjYXVzZSBpdCBoYXMgYSByZXN0cmljdGVkIGxpY2Vuc2Ugbm90IgorICAgICAgICAgICAgICAgICAiIHdoaXRlbGlzdGVkIGluIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIikKKworICAgICMgSWYgd2UncmUgYnVpbGRpbmcgYSB0YXJnZXQgcGFja2FnZSB3ZSBuZWVkIHRvIHVzZSBmYWtlcm9vdCAocHNldWRvKQorICAgICMgaW4gb3JkZXIgdG8gY2FwdHVyZSBwZXJtaXNzaW9ucywgb3duZXJzLCBncm91cHMgYW5kIHNwZWNpYWwgZmlsZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFjaycsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbnN0YWxsJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2RldnNoZWxsJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXZzaGVsbCcsICdkZXBlbmRzJywgJyB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICBzb3VyY2VfbWlycm9yX2ZldGNoID0gZC5nZXRWYXIoJ1NPVVJDRV9NSVJST1JfRkVUQ0gnLCAwKQorICAgIGlmIG5vdCBzb3VyY2VfbWlycm9yX2ZldGNoOgorICAgICAgICBuZWVkX2hvc3QgPSBkLmdldFZhcignQ09NUEFUSUJMRV9IT1NUJywgVHJ1ZSkKKyAgICAgICAgaWYgbmVlZF9ob3N0OgorICAgICAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICAgICB0aGlzX2hvc3QgPSBkLmdldFZhcignSE9TVF9TWVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHJlLm1hdGNoKG5lZWRfaG9zdCwgdGhpc19ob3N0KToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggaG9zdCAlcyAobm90IGluIENPTVBBVElCTEVfSE9TVCkiICUgdGhpc19ob3N0KQorCisgICAgICAgIG5lZWRfbWFjaGluZSA9IGQuZ2V0VmFyKCdDT01QQVRJQkxFX01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBpZiBuZWVkX21hY2hpbmU6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIGNvbXBhdF9tYWNoaW5lcyA9IChkLmdldFZhcignTUFDSElORU9WRVJSSURFUycsIFRydWUpIG9yICIiKS5zcGxpdCgiOiIpCisgICAgICAgICAgICBmb3IgbSBpbiBjb21wYXRfbWFjaGluZXM6CisgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gobmVlZF9tYWNoaW5lLCBtKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIG1hY2hpbmUgJXMgKG5vdCBpbiBDT01QQVRJQkxFX01BQ0hJTkUpIiAlIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpCisKKworICAgICAgICBiYWRfbGljZW5zZXMgPSAoZC5nZXRWYXIoJ0lOQ09NUEFUSUJMRV9MSUNFTlNFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBjaGVja19saWNlbnNlID0gRmFsc2UgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpIGVsc2UgVHJ1ZQorICAgICAgICBmb3IgdCBpbiBbIi1uYXRpdmUiLCAiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IiwgIi1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IiwKKyAgICAgICAgICAgICAgIi1jcm9zc3Nkay0ke1NES19BUkNIfSIsICItY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIsCisgICAgICAgICAgICAgICItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSJdOgorICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoZC5leHBhbmQodCkpOgorICAgICAgICAgICAgICAgIGNoZWNrX2xpY2Vuc2UgPSBGYWxzZQorICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJnY2Mtc291cmNlLSIpOgorICAgICAgICAgICAgY2hlY2tfbGljZW5zZSA9IEZhbHNlCisKKyAgICAgICAgaWYgY2hlY2tfbGljZW5zZSBhbmQgYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKworICAgICAgICAgICAgd2hpdGVsaXN0ID0gW10KKyAgICAgICAgICAgIGluY29tcGF0d2wgPSBbXQorICAgICAgICAgICAgaHRpbmNvbXBhdHdsID0gW10KKyAgICAgICAgICAgIGZvciBsaWMgaW4gYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgIHNwZHhfbGljZW5zZSA9IHJldHVybl9zcGR4KGQsIGxpYykKKyAgICAgICAgICAgICAgICBmb3IgdyBpbiBbIkhPU1RUT09MU19XSElURUxJU1RfIiwgIkxHUEx2Ml9XSElURUxJU1RfIiwgIldISVRFTElTVF8iXToKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0LmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNwZHhfbGljZW5zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgV2UgbmVlZCB0byB0cmFjayB3aGF0IHdlIGFyZSB3aGl0ZWxpc3RpbmcgYW5kIHdoeS4gSWYgcG4gaXMgCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJsZSBhbmQgaXMgbm90IEhPU1RUT09MU19XSElURUxJU1RfIHdlIG5lZWQgdG8gYmUgCisgICAgICAgICAgICAgICAgICAgIGFibGUgdG8gbm90ZSB0aGF0IHRoZSBpbWFnZSB0aGF0IGlzIGNyZWF0ZWQgbWF5IGluZmFjdCAKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbiBpbmNvbXBhdGlibGUgbGljZW5zZXMgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSAKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgc2V0LgorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgaWYgIkhPU1RUT09MUyIgaW4gdzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tcGF0d2wuZXh0ZW5kKChkLmdldFZhcih3ICsgc3BkeF9saWNlbnNlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgICAgICAgICAgaWYgbm90IHBuIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICByZWNpcGVfbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgICAgIHNraXBwZWRfcGtncyA9IFtdCisgICAgICAgICAgICAgICAgdW5za2lwcGVkX3BrZ3MgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgYmFkX2xpY2Vuc2VzLCBwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNraXBwZWRfcGtncy5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgIGFsbF9za2lwcGVkID0gc2tpcHBlZF9wa2dzIGFuZCBub3QgdW5za2lwcGVkX3BrZ3MKKyAgICAgICAgICAgICAgICBpZiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBza2lwcGVkX3BrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiU0tJUFBJTkcgdGhlIHBhY2thZ2UgIiArIHBrZyArICIgYXQgZG9fcm9vdGZzIGJlY2F1c2UgaXQncyAiICsgcmVjaXBlX2xpY2Vuc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignTElDRU5TRV9FWENMVVNJT04tJyArIHBrZywgMSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJJTkNMVURJTkcgdGhlIHBhY2thZ2UgIiArIHBrZykKKyAgICAgICAgICAgICAgICBlbGlmIGFsbF9za2lwcGVkIG9yIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGJhZF9saWNlbnNlcyk6CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTS0lQUElORyByZWNpcGUgJXMgYmVjYXVzZSBpdCdzICVzIiAlIChwbiwgcmVjaXBlX2xpY2Vuc2UpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggbGljZW5zZSAlcyIgJSByZWNpcGVfbGljZW5zZSkKKyAgICAgICAgICAgIGVsaWYgcG4gaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIHBuIGluIGluY29tcGF0d2w6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklOQ0xVRElORyAiICsgcG4gKyAiIGFzIGJ1aWxkYWJsZSBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIGJlY2F1c2UgaXQgaGFzIGJlZW4gd2hpdGVsaXN0ZWQiKQorICAgICAgICAgICAgICAgIGVsaWYgcG4gaW4gaHRpbmNvbXBhdHdsOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJTkNMVURJTkcgIiArIHBuICsgIiBhcyBidWlsZGFibGUgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSBiZWNhdXNlIGl0IGhhcyBiZWVuIHdoaXRlbGlzdGVkIGZvciBIT1NUVE9PTFMiKQorCisgICAgc3JjdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICMgU3ZuIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gc3VidmVyc2lvbi1uYXRpdmUKKyAgICBpZiAic3ZuOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgc3VidmVyc2lvbi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIEdpdCBwYWNrYWdlcyBzaG91bGQgREVQRU5EIG9uIGdpdC1uYXRpdmUKKyAgICBpZiAiZ2l0Oi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgZ2l0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgTWVyY3VyaWFsIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gbWVyY3VyaWFsLW5hdGl2ZQorICAgIGVsaWYgImhnOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgbWVyY3VyaWFsLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgT1NDIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gb3NjLW5hdGl2ZQorICAgIGVsaWYgIm9zYzovLyIgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2ZldGNoJywgJ2RlcGVuZHMnLCAnIG9zYy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjICoubHo0IHNob3VsZCBkZXBlbmRzIG9uIGx6NC1uYXRpdmUgZm9yIHVucGFja2luZworICAgICMgTm90IGVuZHN3aXRoIGJlY2F1c2Ugb2YgIioucGF0Y2gubHo0O3BhdGNoPTEiLiBOZWVkIGJiLmZldGNoLmRlY29kZXVybCBpbiBmdXR1cmUKKyAgICBpZiAnLmx6NCcgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyBsejQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyAqLnh6IHNob3VsZCBkZXBlbmRzIG9uIHh6LW5hdGl2ZSBmb3IgdW5wYWNraW5nCisgICAgIyBOb3QgZW5kc3dpdGggYmVjYXVzZSBvZiAiKi5wYXRjaC54ejtwYXRjaD0xIi4gTmVlZCBiYi5mZXRjaC5kZWNvZGV1cmwgaW4gZnV0dXJlCisgICAgaWYgJy54eicgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyB4ei1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIHVuemlwLW5hdGl2ZSBzaG91bGQgYWxyZWFkeSBiZSBzdGFnZWQgYmVmb3JlIHVucGFja2luZyBaSVAgcmVjaXBlcworICAgIGlmICIuemlwIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIHVuemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgZmlsZSBpcyBuZWVkZWQgYnkgcnBtMmNwaW8uc2gKKyAgICBpZiAiLnNyYy5ycG0iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgZmlsZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICBzZXRfcGFja2FnZXRyaXBsZXQoZCkKKworICAgICMgJ211bHRpbWFjaGluZScgaGFuZGxpbmcKKyAgICBtYWNoX2FyY2ggPSBkLmdldFZhcignTUFDSElORV9BUkNIJywgVHJ1ZSkKKyAgICBwa2dfYXJjaCA9IGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKQorCisgICAgaWYgKHBrZ19hcmNoID09IG1hY2hfYXJjaCk6CisgICAgICAgICMgQWxyZWFkeSBtYWNoaW5lIHNwZWNpZmljIC0gbm90aGluZyBmdXJ0aGVyIHRvIGRvCisgICAgICAgIHJldHVybgorCisgICAgIworICAgICMgV2UgYWx3YXlzIHRyeSB0byBzY2FuIFNSQ19VUkkgZm9yIHVybHMgd2l0aCBtYWNoaW5lIG92ZXJyaWRlcworICAgICMgdW5sZXNzIHRoZSBwYWNrYWdlIHNldHMgU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIPTAKKyAgICAjCisgICAgb3ZlcnJpZGUgPSBkLmdldFZhcignU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKyAgICBpZiBvdmVycmlkZSAhPSAnMCc6CisgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgZnBhdGhzID0gKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKQorICAgICAgICBtYWNoaW5lID0gZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBmb3IgcCBpbiBmcGF0aHM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHApID09IG1hY2hpbmUgYW5kIG9zLnBhdGguaXNkaXIocCk6CisgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHApCisKKyAgICAgICAgaWYgbGVuKHBhdGhzKSAhPSAwOgorICAgICAgICAgICAgZm9yIHMgaW4gc3JjdXJpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHMuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NdLCBkKQorICAgICAgICAgICAgICAgIGxvY2FsID0gZmV0Y2hlci5sb2NhbHBhdGgocykKKyAgICAgICAgICAgICAgICBmb3IgbXAgaW4gcGF0aHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsLnN0YXJ0c3dpdGgobXApOgorICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIm92ZXJyaWRpbmcgUEFDS0FHRV9BUkNIIGZyb20gJXMgdG8gJXMgZm9yICVzIiAlIChwa2dfYXJjaCwgbWFjaF9hcmNoLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2FyY2ggPSBkLmdldFZhcigiUEFDS0FHRV9BUkNIXyVzIiAlIHBrZywgVHJ1ZSkKKworICAgICAgICAjIFdlIGNvdWxkIGxvb2sgZm9yICE9IFBBQ0tBR0VfQVJDSCBoZXJlIGJ1dCBob3cgdG8gY2hvb3NlCisgICAgICAgICMgaWYgbXVsdGlwbGUgZGlmZmVyZW5jZXMgYXJlIHByZXNlbnQ/CisgICAgICAgICMgTG9vayB0aHJvdWdoIFBBQ0tBR0VfQVJDSFMgZm9yIHRoZSBwcmlvcml0eSBvcmRlcj8KKyAgICAgICAgaWYgcGtnYXJjaCBhbmQgcGtnYXJjaCA9PSBtYWNoX2FyY2g6CisgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICBiYi53YXJuKCJSZWNpcGUgJXMgaXMgbWFya2VkIGFzIG9ubHkgYmVpbmcgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJ1dCBzZWVtcyB0byBoYXZlIG1hY2hpbmUgc3BlY2lmaWMgcGFja2FnZXM/ISBUaGUgcmVjaXBlIG1heSBhcyB3ZWxsIG1hcmsgaXRzZWxmIGFzIG1hY2hpbmUgc3BlY2lmaWMgZGlyZWN0bHkuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorfQorCithZGR0YXNrIGNsZWFuc3N0YXRlIGFmdGVyIGRvX2NsZWFuCitweXRob24gZG9fY2xlYW5zc3RhdGUoKSB7CisgICAgICAgIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGVzKGQpCit9CisKK2FkZHRhc2sgY2xlYW5hbGwgYWZ0ZXIgZG9fY2xlYW5zc3RhdGUKK3B5dGhvbiBkb19jbGVhbmFsbCgpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgICAgZmV0Y2hlci5jbGVhbigpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9Citkb19jbGVhbmFsbFtub3N0YW1wXSA9ICIxIgorCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX2luc3RhbGwgZG9fcGFja2FnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUyYjc1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29tbW9uIHZhcmlhYmxlIGFuZCB0YXNrIGZvciB0aGUgYmluYXJ5IHBhY2thZ2UgcmVjaXBlLgorIyBCYXNpYyBwcmluY2lwbGU6CisjICogVGhlIGZpbGVzIGhhdmUgYmVlbiB1bnBhY2tlZCB0byAke1N9IGJ5IGJhc2UuYmJjbGFzcworIyAqIFNraXAgZG9fY29uZmlndXJlIGFuZCBkb19jb21waWxlCisjICogVXNlIGRvX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgZmlsZXMgdG8gJHtEfQorIworIyBOb3RlOgorIyBUaGUgInN1YmRpciIgcGFyYW1ldGVyIGluIHRoZSBTUkNfVVJJIGlzIHVzZWZ1bCB3aGVuIHRoZSBpbnB1dCBwYWNrYWdlCisjIGlzIHJwbSwgaXBrLCBkZWIgYW5kIHNvIG9uLCBmb3IgZXhhbXBsZToKKyMKKyMgU1JDX1VSSSA9ICJodHRwOi8vZm9vLmNvbS9mb28tMS4wLXIxLmk1ODYucnBtO3N1YmRpcj1mb28tMS4wIgorIworIyBUaGVuIHRoZSBmaWxlcyB3b3VsZCBiZSB1bnBhY2tlZCB0byAke1dPUktESVJ9L2Zvby0xLjAsIG90aGVyd2lzZQorIyB0aGV5IHdvdWxkIGJlIGluICR7V09SS0RJUn0uCisjCisKKyMgU2tpcCB0aGUgdW53YW50ZWQgc3RlcHMKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworIyBJbnN0YWxsIHRoZSBmaWxlcyB0byAke0R9CitiaW5fcGFja2FnZV9kb19pbnN0YWxsICgpIHsKKyAgICAjIERvIGl0IGNhcmVmdWxseQorICAgIFsgLWQgIiR7U30iIF0gfHwgZXhpdCAxCisgICAgY2QgJHtTfSB8fCBleGl0IDEKKyAgICB0YXIgLS1uby1zYW1lLW93bmVyIC0tZXhjbHVkZT0nLi9wYXRjaGVzJyAtLWV4Y2x1ZGU9Jy4vLnBjJyAtY3BmIC0gLiBcCisgICAgICAgIHwgdGFyIC0tbm8tc2FtZS1vd25lciAteHBmIC0gLUMgJHtEfQorfQorCitGSUxFU18ke1BOfSA9ICIvIgorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyYTY2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzCkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMgQ2xhc3MgdG8gZGlzYWJsZSBiaW5jb25maWcgZmlsZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIHRoZW0KKyMKKworIyBUaGUgbGlzdCBvZiBzY3JpcHRzIHdoaWNoIHNob3VsZCBiZSBkaXNhYmxlZC4KK0JJTkNPTkZJRyA/PSAiIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS8qLWNvbmZpZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJIyBNYWtlIHRoZSBkaXNhYmxlZCBzY3JpcHQgZW1pdCBpbnZhbGlkIHBhcmFtZXRlcnMgZm9yIHRob3NlIGNvbmZpZ3VyZQorCQkjIHNjcmlwdHMgd2hpY2ggY2FsbCBpdCB3aXRob3V0IGNoZWNraW5nIHRoZSByZXR1cm4gY29kZS4KKwkJZWNobyAiIyEvYmluL3NoIiA+ICR7RH0keAorCQllY2hvICJlY2hvICdFUlJPUjogJHggc2hvdWxkIG5vdCBiZSB1c2VkLCB1c2UgYW4gYWx0ZXJuYXRpdmUgc3VjaCBhcyBwa2ctY29uZmlnJyA+JjIiID4+ICR7RH0keAorCQllY2hvICJlY2hvICctLXNob3VsZC1ub3QtaGF2ZS11c2VkLSR4JyIgPj4gJHtEfSR4CisJCWVjaG8gImV4aXQgMSIgPj4gJHtEfSR4CisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImJpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2JpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJY29uZmlnbmFtZT1gYmFzZW5hbWUgJHhgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlpbnN0YWxsICR7RH0keCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9iaW5jb25maWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM0MTczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSw2MyBAQAorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vKi1jb25maWciCisgCisjIFRoZSBuYW1lc3BhY2VzIGNhbiBjbGFzaCBoZXJlIGhlbmNlIHRoZSB0d28gc3RlcCByZXBsYWNlCitkZWYgZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCk6CisgICAgcyA9ICItZSAnJyIKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIG9wdGlvbmFsX3F1b3RlID0gciJcKFwiXD9cKSIKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7YmFzZV9saWJkaXJ9Oj1cXDFPRUJBU0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7bGliZGlyfTo9XFwxT0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7aW5jbHVkZWRpcn06PVxcMU9FSU5DRElSOjsnIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczo9JXMke2RhdGFkaXJ9Oj1cXDFPRURBVEFESVI6JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtwcmVmaXh9Lzo9XFwxT0VQUkVGSVgvOiciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7ZXhlY19wcmVmaXh9Lzo9XFwxT0VFWEVDUFJFRklYLzonIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7bGliZGlyfTotTE9FTElCRElSOjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6LUkke2luY2x1ZGVkaXJ9Oi1JT0VJTkNESVI6OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUJBU0VMSUJESVI6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VMSUJESVI6JHtTVEFHSU5HX0xJQkRJUn06OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUlOQ0RJUjoke1NUQUdJTkdfSU5DRElSfTo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FREFUQURJUjoke1NUQUdJTkdfREFUQURJUn06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FUFJFRklYOiR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FRVhFQ1BSRUZJWDoke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOi1JJHtXT1JLRElSfTotSSR7U1RBR0lOR19JTkNESVJ9OiciCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7V09SS0RJUn06LUwke1NUQUdJTkdfTElCRElSfTonIgorICAgICAgICBpZiBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpOgorICAgICAgICAgICAgcyArPSBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpCisKKyAgICByZXR1cm4gcworCitCSU5DT05GSUdfR0xPQiA/PSAiKi1jb25maWciCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1BLR0R9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisgICAgICAgICAgICAgICAgICAgICRjb25maWcKKwlkb25lCisJZm9yIGxhZmlsZSBpbiBgZmluZCAke1BLR0R9IC1uYW1lICIqLmxhImAgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisJCSAgICAkbGFmaWxlCisJZG9uZQkgICAgCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1N9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgIGBmaW5kICR7Qn0gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2A7IGRvCisJCWNvbmZpZ25hbWU9YGJhc2VuYW1lICRjb25maWdgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlzZWQgJHtAZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCl9ICRjb25maWcgPiAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJCWNobW9kIHUreCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibGFja2xpc3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE0MWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MKQEAgLTAsMCArMSw0NSBAQAorIyBhbm9ueW1vdXMgc3VwcG9ydCBjbGFzcyBmcm9tIG9yaWdpbmFsbHkgZnJvbSBhbmdzdHJvbQorIyAKKyMgVG8gdXNlIHRoZSBibGFja2xpc3QsIGEgZGlzdHJpYnV0aW9uIHNob3VsZCBpbmNsdWRlIHRoaXMKKyMgY2xhc3MgaW4gdGhlIElOSEVSSVRfRElTVFJPCisjCisjIE5vIGxvbmdlciB1c2UgQU5HU1RST01fQkxBQ0tMSVNULCBpbnN0ZWFkIHVzZSBhIHRhYmxlIG9mCisjIHJlY2lwZXMgaW4gUE5CTEFDS0xJU1QKKyMKKyMgRmVhdHVyZXM6CisjCisjICogVG8gYWRkIGEgcGFja2FnZSB0byB0aGUgYmxhY2tsaXN0LCBzZXQ6CisjICAgUE5CTEFDS0xJU1RbcG5dID0gIm1lc3NhZ2UiCisjCisKKyMgQ29wZSB3aXRoIFBOQkxBQ0tMSVNUIGZsYWdzIGZvciBtdWx0aWxpYiBjYXNlCithZGRoYW5kbGVyIGJsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXIKK2JsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCitweXRob24gYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcigpIHsKKyAgICBtdWx0aWxpYnMgPSBlLmRhdGEuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKQorICAgIGlmIG5vdCBtdWx0aWxpYnM6CisgICAgICAgIHJldHVybgorCisgICAgIyB0aGlzIGJsb2NrIGhhcyBiZWVuIGNvcGllZCBmcm9tIGJhc2UuYmJjbGFzcyBzbyBrZWVwIGl0IGluIHN5bmMKKyAgICBwcmVmaXhlcyA9IFtdCisgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChlZXh0WzFdKQorCisgICAgYmxhY2tsaXN0cyA9IGUuZGF0YS5nZXRWYXJGbGFncygnUE5CTEFDS0xJU1QnKSBvciB7fQorICAgIGZvciBwa2csIHJlYXNvbiBpbiBibGFja2xpc3RzLml0ZW1zKCk6CisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgoIi1uYXRpdmUiLCAiLWNyb3Nzc2RrIikpIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSkgb3IgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBwa2c6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIG5ld3BrZyA9IHAgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgIGlmIG5vdCBlLmRhdGEuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBuZXdwa2csIFRydWUpOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIG5ld3BrZywgcmVhc29uKQorfQorCitweXRob24gKCkgeworICAgIGJsYWNrbGlzdCA9IGQuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgVHJ1ZSkKKworICAgIGlmIGJsYWNrbGlzdDoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlJlY2lwZSBpcyBibGFja2xpc3RlZDogJXMiICUgKGJsYWNrbGlzdCkpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2JsdWV0b290aC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OGI0YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACisjIEF2b2lkIGNvZGUgZHVwbGljYXRpb24gaW4gYmx1ZXRvb3RoLWRlcGVuZGVudCByZWNpcGVzLgorCisjIERlZmluZSBhIHZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byB0aGUgcmVjaXBlIChwYWNrYWdlKSBwcm92aWRpbmcgY29yZQorIyBibHVldG9vdGggc3VwcG9ydCBvbiB0aGUgcGxhdGZvcm06CisjICIiIGlmIGJsdWV0b290aCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisjIGVsc2UgImJsdWV6NSIgaWYgYmx1ZXo1IGlzIGluIERJU1RST19GRUFUVVJFUworIyBlbHNlICJibHVlejQiCisKKyMgVXNlIHRoaXMgd2l0aDoKKyMgIGluaGVyaXQgYmx1ZXRvb3RoCisjICBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9CisjICBQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXo0LC0tZGlzYWJsZS1ibHVlejQsYmx1ZXo0IgorCitCTFVFWiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV6NScsICdibHVlejUnLCAnYmx1ZXo0JywgZCksICcnLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3QtZGlyZWN0ZGlzay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMGUyMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcwpAQCAtMCwwICsxLDE5NCBAQAorIyBib290LWRpcmVjdGRpc2suYmJjbGFzcworIyAobG9vc2x5IGJhc2VkIG9mZiBib290aW1nLmJiY2xhc3MgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuKQorIworIyBDcmVhdGUgYW4gaW1hZ2Ugd2hpY2ggY2FuIGJlIHBsYWNlZCBkaXJlY3RseSBvbnRvIGEgaGFyZGRpc2sgdXNpbmcgZGQgYW5kIHRoZW4KKyMgYm9vdGVkLgorIworIyBUaGlzIHVzZXMgc3lzbGludXguIGV4dGxpbnV4IHdvdWxkIGhhdmUgYmVlbiBuaWNlIGJ1dCByZXF1aXJlZCB0aGUgZXh0Mi8zIAorIyBwYXJ0aXRpb24gdG8gYmUgbW91bnRlZC4gZ3J1YiByZXF1aXJlcyB0byBydW4gaXRzZWxmIGFzIHBhcnQgb2YgdGhlIGluc3RhbGwgCisjIHByb2Nlc3MuCisjCisjIFRoZSBlbmQgcmVzdWx0IGlzIGEgNTEyIGJvb3Qgc2VjdG9yIHBvcHVsYXRlZCB3aXRoIGFuIE1CUiBhbmQgcGFydGl0aW9uIHRhYmxlCisjIGZvbGxvd2VkIGJ5IGFuIG1zZG9zIGZhdDE2IHBhcnRpdGlvbiBjb250YWluaW5nIHN5c2xpbnV4IGFuZCBhIGxpbnV4IGtlcm5lbAorIyBjb21wbGV0ZWQgYnkgdGhlIGV4dDIvMyByb290ZnMuCisjCisjIFdlIGhhdmUgdG8gcHVzaCB0aGUgbXNkb3MgcGFyaXRpb24gdGFibGUgc2l6ZSA+IDE2TUIgc28gZmF0IDE2IGlzIHVzZWQgYXMgcGFydGVkCisjIHdvbid0IHRvdWNoIGZhdDEyIHBhcnRpdGlvbnMuCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzIG5lZWRlZAorCisjICR7Uk9PVEZTfSAtIHRoZSByb290ZnMgaW1hZ2UgdG8gaW5jb3Jwb3JhdGUKKworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gImRvc2ZzdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwva2VybmVsOmRvX2RlcGxveSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXg6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRlZC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290ICIKKworUEFDS0FHRVMgPSAiICIKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitCT09URERfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09URERfRVhUUkFfU1BBQ0UgPz0gIjE2Mzg0IgorCitFRkkgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIjEiLCAiMCIsIGQpfSIKK0VGSV9QUk9WSURFUiA/PSAiZ3J1Yi1lZmkiCitFRklfQ0xBU1MgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIiR7RUZJX1BST1ZJREVSfSIsICIiLCBkKX0iCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK2RlZiBwY2Jpb3NfY2xhc3MoZCk6CisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgcmV0dXJuICJzeXNsaW51eCIKKyAgICByZXR1cm4gIiIKKworUENCSU9TID0gIiR7QHBjYmlvcyhkKX0iCitQQ0JJT1NfQ0xBU1MgPSAiJHtAcGNiaW9zX2NsYXNzKGQpfSIKKworaW5oZXJpdCAke1BDQklPU19DTEFTU30KK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKKyMgR2V0IHRoZSBidWlsZF9zeXNsaW51eF9jZmcoKSBmdW5jdGlvbiBmcm9tIHRoZSBzeXNsaW51eCBjbGFzcworCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitESVNLX1NJR05BVFVSRSA/PSAiJHtESVNLX1NJR05BVFVSRV9HRU5FUkFURUR9IgorU1lTTElOVVhfUk9PVCA/PSAicm9vdD0vZGV2L3NkYTIiCitTWVNMSU5VWF9USU1FT1VUID89ICIxMCIKKworSVNfVk0gPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GU1RZUEVTIiwgWyJ2bWRrIiwgInZkaSIsICJxY293MiJdLCAidHJ1ZSIsICJmYWxzZSIsIGQpfScKKworYm9vdF9kaXJlY3RfcG9wdWxhdGUoKSB7CisJZGVzdD0kMQorCWluc3RhbGwgLWQgJGRlc3QKKworCSMgSW5zdGFsbCBiekltYWdlLCBpbml0cmQsIGFuZCByb290ZnMuaW1nIGluIERFU1QgZm9yIGFsbCBsb2FkZXJzIHRvIHVzZS4KKwlpZiBbIC1lICR7REVQTE9ZX0RJUl9JTUFHRX0vYnpJbWFnZSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9L2J6SW1hZ2UgJGRlc3Qvdm1saW51egorCWZpCisKKwkjIGluaXRyZCBpcyBtYWRlIG9mIGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlpZiBbIC1uICIke0lOSVRSRH0iIF07IHRoZW4KKwkJcm0gLWYgJGRlc3QvaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICRkZXN0L2luaXRyZAorCQkJZWxzZQorCQkJCWJiZmF0YWwgIiR7ZnN9IGlzIGludmFsaWQuIGluaXRyZCBpbWFnZSBjcmVhdGlvbiBmYWlsZWQuIgorCQkJZmkKKwkJZG9uZQorCQljaG1vZCAwNjQ0ICRkZXN0L2luaXRyZAorCWZpCit9CisKK2J1aWxkX2Jvb3RfZGQoKSB7CisJSERERElSPSIke1N9L2hkZC9ib290IgorCUhERElNRz0iJHtTfS9oZGQuaW1hZ2UiCisJSU1BR0U9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdAorCisJYm9vdF9kaXJlY3RfcG9wdWxhdGUgJEhERERJUgorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKwlpZiBbICIke0VGSX0iID0gIjEiIF07IHRoZW4KKwkJZWZpX2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKworCWlmIFsgIiR7SVNfVk19IiA9ICJ0cnVlIiBdOyB0aGVuCisJCWlmIFsgIngke0FVVE9fU1lTTElOVVhNRU5VfSIgPSAieDEiIF0gOyB0aGVuCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfS91c3Ivc2hhcmUvc3lzbGludXgvdmVzYW1lbnUuYzMyICRIRERESVIvJHtTWVNMSU5VWERJUn0vCisJCQlpZiBbICJ4JHtTWVNMSU5VWF9TUExBU0h9IiAhPSAieCIgXSA7IHRoZW4KKwkJCQlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWF9TUExBU0h9ICRIRERESVIvJHtTWVNMSU5VWERJUn0vc3BsYXNoLmxzcworCQkJZmkKKwkJZmkKKwlmaQorCisJQkxPQ0tTPWBkdSAtYmtzICRIRERESVIgfCBjdXQgLWYgMWAKKwlCTE9DS1M9YGV4cHIgJEJMT0NLUyArICR7Qk9PVEREX0VYVFJBX1NQQUNFfWAKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwlta2Rvc2ZzIC1uICR7Qk9PVEREX1ZPTFVNRV9JRH0gLVMgNTEyIC1DICRIRERJTUcgJEJMT0NLUyAKKwltY29weSAtaSAkSERESU1HIC1zICRIRERESVIvKiA6Oi8KKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlzeXNsaW51eF9oZGRkaXJlY3RfaW5zdGFsbCAkSERESU1HCisJZmkJCisJY2htb2QgNjQ0ICRIRERJTUcKKworCVJPT1RGU0JMT0NLUz1gZHUgLUxia3MgJHtST09URlN9IHwgY3V0IC1mIDFgCisJVE9UQUxTSVpFPWBleHByICRCTE9DS1MgKyAkUk9PVEZTQkxPQ0tTYAorCUVORDE9YGV4cHIgJEJMT0NLUyBcKiAxMDI0YAorCUVORDI9YGV4cHIgJEVORDEgKyA1MTJgCisJRU5EMz1gZXhwciBcKCAkUk9PVEZTQkxPQ0tTIFwqIDEwMjQgXCkgKyAkRU5EMWAKKworCWVjaG8gJFJPT1RGU0JMT0NLUyAkVE9UQUxTSVpFICRFTkQxICRFTkQyICRFTkQzCisJcm0gLXJmICRJTUFHRQorCWRkIGlmPS9kZXYvemVybyBvZj0kSU1BR0UgYnM9MTAyNCBzZWVrPSRUT1RBTFNJWkUgY291bnQ9MQorCisJcGFydGVkICRJTUFHRSBta2xhYmVsIG1zZG9zCisJcGFydGVkICRJTUFHRSBta3BhcnQgcHJpbWFyeSBmYXQxNiAwICR7RU5EMX1CCisJcGFydGVkICRJTUFHRSB1bml0IEIgbWtwYXJ0IHByaW1hcnkgZXh0MiAke0VORDJ9QiAke0VORDN9QgorCXBhcnRlZCAkSU1BR0Ugc2V0IDEgYm9vdCBvbiAKKworCXBhcnRlZCAkSU1BR0UgcHJpbnQKKworCWF3ayAiQkVHSU4geyBwcmludGYgXCIkKGVjaG8gJHtESVNLX1NJR05BVFVSRX0gfCBmb2xkIC13IDIgfCB0YWMgfCBwYXN0ZSAtc2QgJycgfCBzZWQgJ3MvXCguLlwpL1xceCYvZycpXCIgfSIgfCBcCisJCWRkIG9mPSRJTUFHRSBicz0xIHNlZWs9NDQwIGNvbnY9bm90cnVuYworCisJT0ZGU0VUPWBleHByICRFTkQyIC8gNTEyYAorCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlkZCBpZj0ke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbWJyLmJpbiBvZj0kSU1BR0UgY29udj1ub3RydW5jCisJZmkKKworCWRkIGlmPSRIRERJTUcgb2Y9JElNQUdFIGNvbnY9bm90cnVuYyBzZWVrPTEgYnM9NTEyCisJZGQgaWY9JHtST09URlN9IG9mPSRJTUFHRSBjb252PW5vdHJ1bmMgc2Vlaz0kT0ZGU0VUIGJzPTUxMgorCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorCWxuIC1zICR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorfSAKKworcHl0aG9uIGRvX2Jvb3RkaXJlY3RkaXNrKCkgeworICAgIHZhbGlkYXRlX2Rpc2tfc2lnbmF0dXJlKGQpCisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9zeXNsaW51eF9jZmcnLCBkKQorICAgIGlmIGQuZ2V0VmFyKCJFRkkiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfZWZpX2NmZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9ib290X2RkJywgZCkKK30KKworZGVmIGdlbmVyYXRlX2Rpc2tfc2lnbmF0dXJlKCk6CisgICAgaW1wb3J0IHV1aWQKKworICAgIHNpZ25hdHVyZSA9IHN0cih1dWlkLnV1aWQ0KCkpWzo4XQorCisgICAgaWYgc2lnbmF0dXJlICE9ICcwMDAwMDAwMCc6CisgICAgICAgIHJldHVybiBzaWduYXR1cmUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJ2ZmZmZmZmZmJworCitkZWYgdmFsaWRhdGVfZGlza19zaWduYXR1cmUoZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBkaXNrX3NpZ25hdHVyZSA9IGQuZ2V0VmFyKCJESVNLX1NJR05BVFVSRSIsIFRydWUpCisKKyAgICBpZiBub3QgcmUubWF0Y2gocideWzAtOWEtZkEtRl17OH0kJywgZGlza19zaWduYXR1cmUpOgorICAgICAgICBiYi5mYXRhbCgiRElTS19TSUdOQVRVUkUgJyVzJyBtdXN0IGJlIGFuIDggZGlnaXQgaGV4IHN0cmluZyIgJSBkaXNrX3NpZ25hdHVyZSkKKworRElTS19TSUdOQVRVUkVfR0VORVJBVEVEIDo9ICIke0BnZW5lcmF0ZV9kaXNrX3NpZ25hdHVyZSgpfSIKKworYWRkdGFzayBib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzlkMGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYm9vdGltZy5iYmNsYXNzCkBAIC0wLDAgKzEsMzAzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCisjIENyZWF0ZXMgYSBib290YWJsZSBpbWFnZSB1c2luZyBzeXNsaW51eCwgeW91ciBrZXJuZWwgYW5kIGFuIG9wdGlvbmFsCisjIGluaXRyZAorCisjCisjIEVuZCByZXN1bHQgaXMgdHdvIHRoaW5nczoKKyMKKyMgMS4gQSAuaGRkaW1nIGZpbGUgd2hpY2ggaXMgYW4gbXNkb3MgZmlsZXN5c3RlbSBjb250YWluaW5nIHN5c2xpbnV4LCBhIGtlcm5lbCwKKyMgYW4gaW5pdHJkIGFuZCBhIHJvb3RmcyBpbWFnZS4gVGhlc2UgY2FuIGJlIHdyaXR0ZW4gdG8gaGFyZGRpc2tzIGRpcmVjdGx5IGFuZAorIyBhbHNvIGJvb3RlZCBvbiBVU0IgZmxhc2ggZGlza3MgKHdyaXRlIHRoZW0gdGhlcmUgd2l0aCBkZCkuCisjCisjIDIuIEEgQ0QgLmlzbyBpbWFnZQorCisjIEJvb3QgcHJvY2VzcyBpcyB0aGF0IHRoZSBpbml0cmQgd2lsbCBib290IGFuZCBwcm9jZXNzIHdoaWNoIGxhYmVsIHdhcyBzZWxlY3RlZAorIyBpbiBzeXNsaW51eC4gQWN0aW9ucyBiYXNlZCBvbiB0aGUgbGFiZWwgYXJlIHRoZW4gcGVyZm9ybWVkIChlLmcuIGluc3RhbGxpbmcgdG8KKyMgYW4gaGRkKQorCisjIEV4dGVybmFsIHZhcmlhYmxlcyAoYWxzbyB1c2VkIGJ5IHN5c2xpbnV4LmJiY2xhc3MpCisjICR7SU5JVFJEfSAtIGluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0cmQgKG9wdGlvbmFsKQorIyAke0NPTVBSRVNTSVNPfSAtIFRyYW5zcGFyZW50IGNvbXByZXNzIElTTywgcmVkdWNlIHNpemUgfjQwJSBpZiBzZXQgdG8gMQorIyAke05PSVNPfSAgLSBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UgaWYgc2V0IHRvIDEKKyMgJHtOT0hERH0gIC0gc2tpcCBidWlsZGluZyB0aGUgSEREIGltYWdlIGlmIHNldCB0byAxCisjICR7SERESU1HX0lEfSAtIEZBVCBpbWFnZSB2b2x1bWUtaWQKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICJkb3Nmc3Rvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICBjZHJ0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsL2tlcm5lbDpkb19kZXBsb3kgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtAb2UudXRpbHMuaWZlbHNlKGQuZ2V0VmFyKCdDT01QUkVTU0lTTycsIEZhbHNlKSwnemlzb2ZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywnJyl9IgorCitQQUNLQUdFUyA9ICIgIgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0hERERJUiA9ICIke1N9L2hkZGltZyIKK0lTT0RJUiA9ICIke1N9L2lzbyIKK0VGSUlNR0RJUiA9ICIke1N9L2VmaV9pbWciCitDT01QQUNUX0lTT0RJUiA9ICIke1N9L2lzby56IgorQ09NUFJFU1NJU08gPz0gIjAiCisKK0JPT1RJTUdfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09USU1HX0VYVFJBX1NQQUNFID89ICI1MTIiCisKK0VGSSA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMSIsICIwIiwgZCl9IgorRUZJX1BST1ZJREVSID89ICJncnViLWVmaSIKK0VGSV9DTEFTUyA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiJHtFRklfUFJPVklERVJ9IiwgIiIsIGQpfSIKKworS0VSTkVMX0lNQUdFVFlQRSA/Pz0gImJ6SW1hZ2UiCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK1BDQklPUyA9ICIke0BwY2Jpb3MoZCl9IgorCisjIFRoZSBzeXNsaW51eCBpcyByZXF1aXJlZCBmb3IgdGhlIGlzb2h5YnJpZCBjb21tYW5kIGFuZCBib290IGNhdGFsb2cKK2luaGVyaXQgc3lzbGludXgKK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKK3BvcHVsYXRlKCkgeworCURFU1Q9JDEKKwlpbnN0YWxsIC1kICR7REVTVH0KKworCSMgSW5zdGFsbCBrZXJuZWwsIGluaXRyZCwgYW5kIHJvb3Rmcy5pbWcgaW4gREVTVCBmb3IgYWxsIGxvYWRlcnMgdG8gdXNlLgorCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9LyR7S0VSTkVMX0lNQUdFVFlQRX0gJHtERVNUfS92bWxpbnV6CisJCisJIyBpbml0cmQgaXMgbWFkZSBvZiBjb25jYXRlbmF0aW9uIG9mIG11bHRpcGxlIGZpbGVzeXN0ZW0gaW1hZ2VzCisJaWYgWyAtbiAiJHtJTklUUkR9IiBdOyB0aGVuCisJCXJtIC1mICR7REVTVH0vaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICR7REVTVH0vaW5pdHJkCisJCQllbHNlCisJCQkJYmJmYXRhbCAiJHtmc30gaXMgaW52YWxpZC4gaW5pdHJkIGltYWdlIGNyZWF0aW9uIGZhaWxlZC4iCisJCQlmaQorCQlkb25lCisJCWNobW9kIDA2NDQgJHtERVNUfS9pbml0cmQKKwlmaQorCisJaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtST09URlN9ICR7REVTVH0vcm9vdGZzLmltZworCWZpCisKK30KKworYnVpbGRfaXNvKCkgeworCSMgT25seSBjcmVhdGUgYW4gSVNPIGlmIHdlIGhhdmUgYW4gSU5JVFJEIGFuZCBOT0lTTyB3YXMgbm90IHNldAorCWlmIFsgLXogIiR7SU5JVFJEfSIgXSB8fCBbICIke05PSVNPfSIgPSAiMSIgXTsgdGhlbgorCQliYm5vdGUgIklTTyBpbWFnZSB3aWxsIG5vdCBiZSBjcmVhdGVkLiIKKwkJcmV0dXJuCisJZmkKKwkjICR7SU5JVFJEfSBpcyBhIGxpc3Qgb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlmb3IgZnMgaW4gJHtJTklUUkR9CisJZG8KKwkJaWYgWyAhIC1zICIke2ZzfSIgXTsgdGhlbgorCQkJYmJub3RlICJJU08gaW1hZ2Ugd2lsbCBub3QgYmUgY3JlYXRlZC4gJHtmc30gaXMgaW52YWxpZC4iCisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisKKworCXBvcHVsYXRlICR7SVNPRElSfQorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2lzb19wb3B1bGF0ZSAke0lTT0RJUn0KKwlmaQorCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQllZmlfaXNvX3BvcHVsYXRlICR7SVNPRElSfQorCQlidWlsZF9mYXRfaW1nICR7RUZJSU1HRElSfSAke0lTT0RJUn0vZWZpLmltZworCWZpCisKKwkjIEVGSSBvbmx5CisJaWYgWyAiJHtQQ0JJT1N9IiAhPSAiMSIgXSAmJiBbICIke0VGSX0iID0gIjEiIF0gOyB0aGVuCisJCSMgV29yayBhcm91bmQgYnVnIGluIGlzb2h5YnJpZCB3aGVyZSBpdCByZXF1aXJlcyBpc29saW51eC5iaW4KKwkJIyBJbiB0aGUgYm9vdCBjYXRhbG9nLCBldmVuIHRob3VnaCBpdCBpcyBub3QgdXNlZAorCQlta2RpciAtcCAke0lTT0RJUn0vJHtJU09MSU5VWERJUn0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9pc29saW51eC5iaW4gJHtJU09ESVJ9JHtJU09MSU5VWERJUn0KKwlmaQorCisJaWYgWyAiJHtDT01QUkVTU0lTT30iID0gIjEiIF0gOyB0aGVuCisJCSMgY3JlYXRlIGNvbXBhY3QgZGlyZWN0b3J5LCBjb21wcmVzcyBpc28KKwkJbWtkaXIgLXAgJHtDT01QQUNUX0lTT0RJUn0KKwkJbWt6ZnRyZWUgLXogOSAtcCA0IC1GICR7SVNPRElSfS9yb290ZnMuaW1nICR7Q09NUEFDVF9JU09ESVJ9L3Jvb3Rmcy5pbWcKKworCQkjIG1vdmUgY29tcGFjdCBpc28gdG8gaXNvLCB0aGVuIHJlbW92ZSBjb21wYWN0IGRpcmVjdG9yeQorCQltdiAke0NPTVBBQ1RfSVNPRElSfS9yb290ZnMuaW1nICR7SVNPRElSfS9yb290ZnMuaW1nCisJCXJtIC1SZiAke0NPTVBBQ1RfSVNPRElSfQorCQlta2lzb2ZzX2NvbXByZXNzX29wdHM9Ii1SIC16IC1EIC1sIgorCWVsc2UKKwkJbWtpc29mc19jb21wcmVzc19vcHRzPSItciIKKwlmaQorCisJIyBDaGVjayB0aGUgc2l6ZSBvZiAke0lTT0RJUn0vcm9vdGZzLmltZywgdXNlIG1raXNvZnMgLWlzby1sZXZlbCAzCisJIyB3aGVuIGl0IGV4Y2VlZHMgMy44R0IsIHRoZSBzcGVjaWZpY2F0aW9uIGlzIDRHIC0gMSBieXRlcywgd2UgbmVlZAorCSMgbGVhdmUgYSBmZXcgc3BhY2UgZm9yIG90aGVyIGZpbGVzLgorCW1raXNvZnNfaXNvX2xldmVsPSIiCisKKyAgICAgICAgaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlyb290ZnNfaW1nX3NpemU9YHN0YXQgLWMgJyVzJyAke0lTT0RJUn0vcm9vdGZzLmltZ2AKKwkJIyA0MDgwMjE4OTMxID0gMy44ICogMTAyNCAqIDEwMjQgKiAxMDI0CisJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgNDA4MDIxODkzMSBdOyB0aGVuCisJCQliYm5vdGUgIiR7SVNPRElSfS9yb290ZnMuaW1nIGV4ZWNlZWRzIDMuOEdCLCB1c2luZyAnLWlzby1sZXZlbCAzJyBmb3IgbWtpc29mcyIKKwkJCW1raXNvZnNfaXNvX2xldmVsPSItaXNvLWxldmVsIDMiCisJCWZpCisJZmkKKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXSAmJiBbICIke0VGSX0iICE9ICIxIiBdIDsgdGhlbgorCQkjIFBDQklPUyBvbmx5IG1lZGlhCisJCW1raXNvZnMgLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyBcCisJCQkke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsICR7SVNPRElSfQorCWVsc2UKKwkJIyBFRkkgb25seSBPUiBFRkkrUENCSU9TCisJCW1raXNvZnMgLUEgJHtCT09USU1HX1ZPTFVNRV9JRH0gLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyAke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsIFwKKwkJCS1lbHRvcml0by1hbHQtYm9vdCAtZWx0b3JpdG8tcGxhdGZvcm0gZWZpIFwKKwkJCS1iIGVmaS5pbWcgLW5vLWVtdWwtYm9vdCBcCisJCQkke0lTT0RJUn0KKwkJaXNvaHlicmlkX2FyZ3M9Ii11IgorCWZpCisKKwlpc29oeWJyaWQgJGlzb2h5YnJpZF9hcmdzICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28KKworCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwlybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KKwlsbiAtcyAke0lNQUdFX05BTUV9LmlzbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KK30KKworYnVpbGRfZmF0X2ltZygpIHsKKwlGQVRTT1VSQ0VESVI9JDEKKwlGQVRJTUc9JDIKKworCSMgQ2FsY3VsYXRlIHRoZSBzaXplIHJlcXVpcmVkIGZvciB0aGUgZmluYWwgaW1hZ2UgaW5jbHVkaW5nIHRoZQorCSMgZGF0YSBhbmQgZmlsZXN5c3RlbSBvdmVyaGVhZC4KKwkjIFNlY3RvcnM6IDUxMiBieXRlcworCSMgIEJsb2NrczogMTAyNCBieXRlcworCisJIyBEZXRlcm1pbmUgdGhlIHNlY3RvciBjb3VudCBqdXN0IGZvciB0aGUgZGF0YQorCVNFQ1RPUlM9JChleHByICQoZHUgLS1hcHBhcmVudC1zaXplIC1rcyAke0ZBVFNPVVJDRURJUn0gfCBjdXQgLWYgMSkgXCogMikKKworCSMgQWNjb3VudCBmb3IgdGhlIGZpbGVzeXN0ZW0gb3ZlcmhlYWQuIFRoaXMgaW5jbHVkZXMgZGlyZWN0b3J5CisJIyBlbnRyaWVzIGluIHRoZSBjbHVzdGVycyBhcyB3ZWxsIGFzIHRoZSBGQVQgaXRzZWxmLgorCSMgQXNzdW1wdGlvbnM6CisJIyAgIEZBVDMyICgxMiBvciAxNiBtYXkgYmUgc2VsZWN0ZWQgYnkgbWtkb3NmcywgYnV0IHRoZSBleHRyYQorCSMgICBwYWRkaW5nIHdpbGwgYmUgbWluaW1hbCBvbiB0aG9zZSBzbWFsbGVyIGltYWdlcyBhbmQgbm90CisJIyAgIHdvcnRoIHRoZSBsb2dpYyBoZXJlIHRvIGNhY2x1bGF0ZSB0aGUgc21hbGxlciBGQVQgc2l6ZXMpCisJIyAgIDwgMTYgZW50cmllcyBwZXIgZGlyZWN0b3J5CisJIyAgIDguMyBmaWxlbmFtZXMgb25seQorCisJIyAzMiBieXRlcyBwZXIgZGlyIGVudHJ5CisJRElSX0JZVEVTPSQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiAzMikKKwkjIDMyIGJ5dGVzIGZvciBldmVyeSBlbmQtb2YtZGlyZWN0b3J5IGRpciBlbnRyeQorCURJUl9CWVRFUz0kKGV4cHIgJERJUl9CWVRFUyArICQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IC10eXBlIGQgfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDMyKSkKKwkjIDQgYnl0ZXMgcGVyIEZBVCBlbnRyeSBwZXIgc2VjdG9yIG9mIGRhdGEKKwlGQVRfQllURVM9JChleHByICRTRUNUT1JTIFwqIDQpCisJIyA0IGJ5dGVzIHBlciBGQVQgZW50cnkgcGVyIGVuZC1vZi1jbHVzdGVyIGxpc3QKKwlGQVRfQllURVM9JChleHByICRGQVRfQllURVMgKyAkKGV4cHIgJChmaW5kICR7RkFUU09VUkNFRElSfSAtdHlwZSBkIHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiA0KSkKKworCSMgVXNlIGEgY2VpbGluZyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgRlMgb3ZlcmhlYWQgaW4gc2VjdG9ycworCURJUl9TRUNUT1JTPSQoZXhwciAkKGV4cHIgJERJUl9CWVRFUyArIDUxMSkgLyA1MTIpCisJIyBUaGVyZSBhcmUgdHdvIEZBVHMgb24gdGhlIGltYWdlCisJRkFUX1NFQ1RPUlM9JChleHByICQoZXhwciAkKGV4cHIgJEZBVF9CWVRFUyArIDUxMSkgLyA1MTIpIFwqIDIpCisJU0VDVE9SUz0kKGV4cHIgJFNFQ1RPUlMgKyAkKGV4cHIgJERJUl9TRUNUT1JTICsgJEZBVF9TRUNUT1JTKSkKKworCSMgRGV0ZXJtaW5lIHRoZSBmaW5hbCBzaXplIGluIGJsb2NrcyBhY2NvdW50aW5nIGZvciBzb21lIHBhZGRpbmcKKwlCTE9DS1M9JChleHByICQoZXhwciAkU0VDVE9SUyAvIDIpICsgJHtCT09USU1HX0VYVFJBX1NQQUNFfSkKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwkjIG1rZG9zZnMgd2lsbCBzb21ldGltZXMgdXNlIEZBVDE2IHdoZW4gaXQgaXMgbm90IGFwcHJvcHJpYXRlLAorCSMgcmVzdWx0aW5nIGluIGEgYm9vdCBmYWlsdXJlIGZyb20gU1lTTElOVVguIFVzZSBGQVQzMiBmb3IKKwkjIGltYWdlcyBsYXJnZXIgdGhhbiA1MTJNQiwgb3RoZXJ3aXNlIGxldCBta2Rvc2ZzIGRlY2lkZS4KKwlpZiBbICQoZXhwciAkQkxPQ0tTIC8gMTAyNCkgLWd0IDUxMiBdOyB0aGVuCisJCUZBVFNJWkU9Ii1GIDMyIgorCWZpCisKKwkjIG1rZG9zZnMgd2lsbCBmYWlsIGlmICR7RkFUSU1HfSBleGlzdHMuIFNpbmNlIHdlIGFyZSBjcmVhdGluZyBhbgorCSMgbmV3IGltYWdlLCBpdCBpcyBzYWZlIHRvIGRlbGV0ZSBhbnkgcHJldmlvdXMgaW1hZ2UuCisJaWYgWyAtZSAke0ZBVElNR30gXTsgdGhlbgorCQlybSAke0ZBVElNR30KKwlmaQorCisJaWYgWyAteiAiJHtIRERJTUdfSUR9IiBdOyB0aGVuCisJCW1rZG9zZnMgJHtGQVRTSVpFfSAtbiAke0JPT1RJTUdfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJHtGQVRJTUd9IFwKKwkJCSR7QkxPQ0tTfQorCWVsc2UKKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9IC1TIDUxMiAtQyAke0ZBVElNR30gXAorCQkke0JMT0NLU30gLWkgJHtIRERJTUdfSUR9CisJZmkKKworCSMgQ29weSBGQVRTT1VSQ0VESVIgcmVjdXJzaXZlbHkgaW50byB0aGUgaW1hZ2UgZmlsZSBkaXJlY3RseQorCW1jb3B5IC1pICR7RkFUSU1HfSAtcyAke0ZBVFNPVVJDRURJUn0vKiA6Oi8KK30KKworYnVpbGRfaGRkaW1nKCkgeworCSMgQ3JlYXRlIGFuIEhERCBpbWFnZQorCWlmIFsgIiR7Tk9IRER9IiAhPSAiMSIgXSA7IHRoZW4KKwkJcG9wdWxhdGUgJHtIRERESVJ9CisKKwkJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCQlzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUgJHtIRERESVJ9CisJCWZpCisJCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQkJZWZpX2hkZGltZ19wb3B1bGF0ZSAke0hERERJUn0KKwkJZmkKKworCQkjIENoZWNrIHRoZSBzaXplIG9mICR7SERERElSfS9yb290ZnMuaW1nLCBlcnJvciBvdXQgaWYgaXQKKwkJIyBleGNlZWRzIDRHQiwgaXQgaXMgdGhlIHNpbmdsZSBmaWxlJ3MgbWF4IHNpemUgb2YgRkFUIGZzLgorCQlpZiBbIC1mICR7SERERElSfS9yb290ZnMuaW1nIF07IHRoZW4KKwkJCXJvb3Rmc19pbWdfc2l6ZT1gc3RhdCAtYyAnJXMnICR7SERERElSfS9yb290ZnMuaW1nYAorCQkJbWF4X3NpemU9YGV4cHIgNCBcKiAxMDI0IFwqIDEwMjQgXCogMTAyNGAKKwkJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgJG1heF9zaXplIF07IHRoZW4KKwkJCQliYmVycm9yICIke0hERERJUn0vcm9vdGZzLmltZyBleGVjZWVkcyA0R0IsIgorCQkJCWJiZXJyb3IgInRoaXMgZG9lc24ndCB3b3JrIG9uIEZBVCBmaWxlc3lzdGVtLCB5b3UgY2FuIHRyeSBlaXRoZXIgb2Y6IgorCQkJCWJiZXJyb3IgIjEpIFJlZHVjZSB0aGUgc2l6ZSBvZiByb290ZnMuaW1nIgorCQkJCWJiZmF0YWwgIjIpIFVzZSBpc28sIHZtZGsgb3IgdmRpIHRvIGluc3RlYWQgb2YgaGRkaW1nXG4iCisJCQlmaQorCQlmaQorCisJCWJ1aWxkX2ZhdF9pbWcgJHtIRERESVJ9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJCXN5c2xpbnV4X2hkZGltZ19pbnN0YWxsCisJCWZpCisKKwkJY2htb2QgNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQljZCAke0RFUExPWV9ESVJfSU1BR0V9CisJCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGltZworCQlsbiAtcyAke0lNQUdFX05BTUV9LmhkZGltZyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5oZGRpbWcKKwlmaQorfQorCitweXRob24gZG9fYm9vdGltZygpIHsKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX3N5c2xpbnV4X2NmZycsIGQpCisgICAgaWYgZC5nZXRWYXIoIkVGSSIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9lZmlfY2ZnJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2hkZGltZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9pc28nLCBkKQorfQorCitJTUFHRV9UWVBFREVQX2lzbyA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF9oZGRpbWcgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAiaXNvIGhkZGltZyIKKworYWRkdGFzayBib290aW1nIGJlZm9yZSBkb19idWlsZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjODk1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MKQEAgLTAsMCArMSwxODcgQEAKKyMKKyMgU21hbGwgZXZlbnQgaGFuZGxlciB0byBhdXRvbWF0aWNhbGx5IG9wZW4gVVJMcyBhbmQgZmlsZQorIyBidWcgcmVwb3J0cyBhdCBhIGJ1Z3ppbGxhIG9mIHlvdXIgY2hvaWNoZQorIyBpdCB1c2VzIFhNTC1SUEMgaW50ZXJmYWNlLCBzbyB5b3UgbXVzdCBoYXZlIGl0IGVuYWJsZWQKKyMKKyMgQmVmb3JlIHVzaW5nIHlvdSBtdXN0IGRlZmluZSBCVUdaSUxMQV9VU0VSLCBCVUdaSUxMQV9QQVNTIGNyZWRlbnRpYWxzLAorIyBCVUdaSUxMQV9YTUxSUEMgLSB1cmkgb2YgeG1scnBjLmNnaSwKKyMgQlVHWklMTEFfUFJPRFVDVCwgQlVHWklMTEFfQ09NUE9ORU5UIC0gYSBwbGFjZSBpbiBCVFMgZm9yIGJ1aWxkIGJ1Z3MKKyMgQlVHWklMTEFfVkVSU0lPTiAtIHZlcnNpb24gYWdhaW5zdCB3aGljaCB0byByZXBvcnQgbmV3IGJ1Z3MKKyMKKworZGVmIGJ1Z3ppbGxhX2ZpbmRfYnVnX3JlcG9ydChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z25hbWUpOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGJ1Z25hbWUKKyAgICBidWdzID0gc2VydmVyLkJ1Zy5zZWFyY2goYXJncykKKyAgICBpZiBsZW4oYnVnc1snYnVncyddKSA9PSAwOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQnVncyBub3QgZm91bmQiCisgICAgICAgIHJldHVybiAoRmFsc2UsTm9uZSkKKyAgICBlbHNlOiAjIHNpbGVudGx5IHBpY2sgdGhlIGZpcnN0IHJlc3VsdAorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiUmVzdWx0IG9mIGJ1ZyBzZWFyY2ggaXMgIgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCBidWdzCisgICAgICAgIHN0YXR1cyA9IGJ1Z3NbJ2J1Z3MnXVswXVsnc3RhdHVzJ10KKyAgICAgICAgaWQgPSBidWdzWydidWdzJ11bMF1bJ2lkJ10KKyAgICAgICAgcmV0dXJuIChub3Qgc3RhdHVzIGluIFsiQ0xPU0VEIiwgIlJFU09MVkVEIiwgIlZFUklGSUVEIl0saWQpCisKK2RlZiBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIG5hbWUsIHRleHQsIHZlcnNpb24pOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IG5hbWUKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgYXJnc1sndmVyc2lvbiddID0gdmVyc2lvbgorICAgIGFyZ3NbJ29wX3N5cyddID0gJ0xpbnV4JworICAgIGFyZ3NbJ3BsYXRmb3JtJ10gPSAnT3RoZXInCisgICAgYXJnc1snc2V2ZXJpdHknXSA9ICdub3JtYWwnCisgICAgYXJnc1sncHJpb3JpdHknXSA9ICdOb3JtYWwnCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc2VydmVyLkJ1Zy5jcmVhdGUoYXJncylbJ2lkJ10KKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBidWd6aWxsYV9yZW9wZW5fYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlcik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydzdGF0dXMnXSA9ICJDT05GSVJNRUQiCisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLnVwZGF0ZShhcmdzKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIHJlcHIoZSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z19udW1iZXIsIHRleHQsIGZpbGVfbmFtZSwgbG9nLCBsb2dkZXNjcmlwdGlvbik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydmaWxlX25hbWUnXSA9IGZpbGVfbmFtZQorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGxvZ2Rlc2NyaXB0aW9uCisgICAgYXJnc1snY29udGVudF90eXBlJ10gPSAidGV4dC9wbGFpbiIKKyAgICBhcmdzWydkYXRhJ10gPSBsb2cKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9hdHRhY2htZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlciwgdGV4dCk6CisgICAgYXJnc1snaWQnXSA9IGJ1Z19udW1iZXIKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9jb21tZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworYWRkaGFuZGxlciBidWd6aWxsYV9ldmVudGhhbmRsZXIKK2J1Z3ppbGxhX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50Lk1zZ05vdGUgYmIuYnVpbGQuVGFza0ZhaWxlZCIKK3B5dGhvbiBidWd6aWxsYV9ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQgeG1scnBjbGliLCBodHRwbGliCisKKyAgICBjbGFzcyBQcm94aWVkVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJveHksIHVzZV9kYXRldGltZSA9IDApOgorICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5fX2luaXRfXyhzZWxmLCB1c2VfZGF0ZXRpbWUpCisgICAgICAgICAgICBzZWxmLnByb3h5ID0gcHJveHkKKyAgICAgICAgICAgIHNlbGYudXNlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCisKKyAgICAgICAgZGVmIHNldF91c2VyKHNlbGYsIHVzZXIpOgorICAgICAgICAgICAgc2VsZi51c2VyID0gdXNlcgorCisgICAgICAgIGRlZiBzZXRfcGFzc3dvcmQoc2VsZiwgcGFzc3dvcmQpOgorICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkCisKKyAgICAgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgICAgIHNlbGYucmVhbGhvc3QgPSBob3N0CisgICAgICAgICAgICByZXR1cm4gaHR0cGxpYi5IVFRQKHNlbGYucHJveHkpCisKKyAgICAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBjb25uZWN0aW9uLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHkpOgorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCJQT1NUIiwgJ2h0dHA6Ly8lcyVzJyAlIChzZWxmLnJlYWxob3N0LCBoYW5kbGVyKSkKKyAgICAgICAgICAgIGlmIHNlbGYudXNlciAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucGFzc3dvcmQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYXV0aCA9ICIlczolcyIgJSAoc2VsZi51c2VyLCBzZWxmLnBhc3N3b3JkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGF1dGggPSBzZWxmLnVzZXIKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcigiUHJveHktYXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgYmFzZTY0LmVuY29kZXN0cmluZyhhdXRoKSkKKworICAgIGV2ZW50ID0gZQorICAgIGRhdGEgPSBlLmRhdGEKKyAgICBuYW1lID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICBpZiBuYW1lID09ICJNc2dOb3RlIjoKKyAgICAgICAgIyBhdm9pZCByZWN1cnNpb24KKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBuYW1lID09ICJUYXNrRmFpbGVkIjoKKyAgICAgICAgeG1scnBjICA9IGRhdGEuZ2V0VmFyKCJCVUdaSUxMQV9YTUxSUEMiLCBUcnVlKQorICAgICAgICB1c2VyICAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1VTRVIiLCBUcnVlKQorICAgICAgICBwYXNzdyAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BBU1MiLCBUcnVlKQorICAgICAgICBwcm9kdWN0ID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BST0RVQ1QiLCBUcnVlKQorICAgICAgICBjb21wb24gID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX0NPTVBPTkVOVCIsIFRydWUpCisgICAgICAgIHZlcnNpb24gPSBkYXRhLmdldFZhcigiQlVHWklMTEFfVkVSU0lPTiIsIFRydWUpCisKKyAgICAgICAgcHJveHkgICA9IGRhdGEuZ2V0VmFyKCdodHRwX3Byb3h5JywgVHJ1ZSApCisgICAgICAgIGlmIChwcm94eSk6CisgICAgICAgICAgICBpbXBvcnQgdXJsbGliMgorICAgICAgICAgICAgcywgdSwgcCwgaG9zdHBvcnQgPSB1cmxsaWIyLl9wYXJzZV9wcm94eShwcm94eSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IFByb3hpZWRUcmFuc3BvcnQoaG9zdHBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KHhtbHJwYywgdHJhbnNwb3J0PXRyYW5zcG9ydCwgdmVyYm9zZT0wKQorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ0J1Z3ppbGxhX2xvZ2luJzogdXNlciwKKyAgICAgICAgICAgICdCdWd6aWxsYV9wYXNzd29yZCc6IHBhc3N3LAorICAgICAgICAgICAgJ3Byb2R1Y3QnOiBwcm9kdWN0LAorICAgICAgICAgICAgJ2NvbXBvbmVudCc6IGNvbXBvbn0KKworICAgICAgICAjIGV2aWwgaGFjayB0byBmaWd1cmUgb3V0IHdoYXQgaXMgZ29pbmcgb24KKyAgICAgICAgZGVidWdfZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwiLi4iLCJidWd6aWxsYS1sb2ciKSwiYSIpCisKKyAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgYnVnbmFtZSA9ICIlKHBhY2thZ2Upcy0lKHB2KXMtYXV0b2J1aWxkIiAlIHsgInBhY2thZ2UiIDogZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdiIgICAgICA6IGRhdGEuZ2V0VmFyKCJQViIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGxvZ19maWxlID0gZ2xvYi5nbG9iKCIlcy9sb2cuJXMuKiIgJSAoZXZlbnQuZGF0YS5nZXRWYXIoJ1QnLCBUcnVlKSwgZXZlbnQudGFzaykpCisgICAgICAgIHRleHQgICAgID0gIlRoZSAlcyBzdGVwIGluICVzIGZhaWxlZCBhdCAlcyBmb3IgbWFjaGluZSAlcyIgJSAoZS50YXNrLCBkYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSksIGRhdGEuZ2V0VmFyKCAnTUFDSElORScsIFRydWUgKSApCisgICAgICAgIGlmIGxlbihsb2dfZmlsZSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJBZGRpbmcgbG9nIGZpbGUgJXMiICUgbG9nX2ZpbGVbMF0KKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKGxvZ19maWxlWzBdLCAncicpCisgICAgICAgICAgICBsb2cgPSBmaWxlLnJlYWQoKQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpOworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vIGxvZyBmaWxlIGZvdW5kIGZvciB0aGUgZ2xvYiIKKyAgICAgICAgICAgIGxvZyA9IE5vbmUKKworICAgICAgICAoYnVnX29wZW4sIGJ1Z19udW1iZXIpID0gYnVnemlsbGFfZmluZF9idWdfcmVwb3J0KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z25hbWUpCisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJCdWcgaXMgb3BlbjogJXMgYW5kIGJ1ZyBudW1iZXI6ICVzIiAlIChidWdfb3BlbiwgYnVnX251bWJlcikKKworICAgICAgICAjIFRoZSBidWcgaXMgcHJlc2VudCBhbmQgc3RpbGwgb3BlbiwgYXR0YWNoIGFuIGVycm9yIGxvZworICAgICAgICBpZiBub3QgYnVnX251bWJlcjoKKyAgICAgICAgICAgIGJ1Z19udW1iZXIgPSBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWduYW1lLCB0ZXh0LCB2ZXJzaW9uKQorICAgICAgICAgICAgaWYgbm90IGJ1Z19udW1iZXI6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkNvdWxkbid0IGFjcXVpcmUgYSBuZXcgYnVnX251bWVyLCBmaWxpbmcgYSBidWdyZXBvcnQgZmFpbGVkIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiVGhlIG5ldyBidWdfbnVtYmVyOiAnJXMnIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgZWxpZiBub3QgYnVnX29wZW46CisgICAgICAgICAgICBpZiBub3QgYnVnemlsbGFfcmVvcGVuX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyKToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiRmFpbGVkIHRvIHJlb3BlbiB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJSZW9wZW5lZCB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisKKyAgICAgICAgaWYgYnVnX251bWJlciBhbmQgbG9nOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIlRoZSBidWcgaXMga25vd24gYXMgJyVzJyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBkZXNjID0gIkJ1aWxkIGxvZyBmb3IgbWFjaGluZSAlcyIgJSAoZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSkKKyAgICAgICAgICAgIGlmIG5vdCBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyLCB0ZXh0LCBsb2dfZmlsZVswXSwgbG9nLCBkZXNjKToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkZhaWxlZCB0byBhdHRhY2ggdGhlIGJ1aWxkIGxvZyBmb3IgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQ3JlYXRlZCBhbiBhdHRhY2htZW50IGZvciAnJXMnICclcycgJyVzJyIgJSAocHJvZHVjdCwgY29tcG9uLCBidWdfbnVtYmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vdCB0cnlpbmcgdG8gY3JlYXRlIGFuIGF0dGFjaG1lbnQgZm9yIGJ1ZyAjJXMiICUgYnVnX251bWJlcgorICAgICAgICAgICAgaWYgbm90IGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIsIHRleHQsICk6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJGYWlsZWQgdG8gY3JlYXRlIGEgY29tbWVudCB0aGUgYnVpbGQgbG9nIGZvciBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJDcmVhdGVkIGFuIGF0dGFjaG1lbnQgZm9yICclcycgJyVzJyAnJXMnIiAlIChwcm9kdWN0LCBjb21wb24sIGJ1Z19udW1iZXIpCisKKyAgICAgICAgIyBzdG9yZSBidWcgbnVtYmVyIGZvciBvZXN0YXRzLWNsaWVudAorICAgICAgICBpZiBidWdfbnVtYmVyOgorICAgICAgICAgICAgZGF0YS5zZXRWYXIoJ09FU1RBVFNfQlVHX05VTUJFUicsIGJ1Z19udW1iZXIpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiMDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCkBAIC0wLDAgKzEsNzY1IEBACisjCisjIFJlY29yZHMgaGlzdG9yeSBvZiBidWlsZCBvdXRwdXQgaW4gb3JkZXIgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zCisjCisjIEJhc2VkIGluIHBhcnQgb24gdGVzdGxhYi5iYmNsYXNzIGFuZCBwYWNrYWdlaGlzdG9yeS5iYmNsYXNzCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEtvZW4gS29vaSA8a29lbkBvcGVuZW1iZWRkZWQub3JnPgorIworCitCVUlMREhJU1RPUllfRkVBVFVSRVMgPz0gImltYWdlIHBhY2thZ2Ugc2RrIgorQlVJTERISVNUT1JZX0RJUiA/PSAiJHtUT1BESVJ9L2J1aWxkaGlzdG9yeSIKK0JVSUxESElTVE9SWV9ESVJfSU1BR0UgPSAiJHtCVUlMREhJU1RPUllfRElSfS9pbWFnZXMvJHtNQUNISU5FX0FSQ0h9LyR7VENMSUJDfS8ke0lNQUdFX0JBU0VOQU1FfSIKK0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRSA9ICIke0JVSUxESElTVE9SWV9ESVJ9L3BhY2thZ2VzLyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59IgorQlVJTERISVNUT1JZX0RJUl9TREsgPSAiJHtCVUlMREhJU1RPUllfRElSfS9zZGsvJHtTREtfTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0iCitCVUlMREhJU1RPUllfSU1BR0VfRklMRVMgPz0gIi9ldGMvcGFzc3dkIC9ldGMvZ3JvdXAiCitCVUlMREhJU1RPUllfQ09NTUlUID89ICIwIgorQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1IgPz0gImJ1aWxkaGlzdG9yeSA8YnVpbGRoaXN0b3J5QCR7RElTVFJPfT4iCitCVUlMREhJU1RPUllfUFVTSF9SRVBPID89ICIiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyBXZSB3YW50IHRvIGF2b2lkIGluZmx1ZW5jZSB0aGUgc2lnbmF0dXJlcyBvZiBzc3RhdGUgdGFza3MgLSBmaXJzdCB0aGUgZnVuY3Rpb24gaXRzZWxmOgorc3N0YXRlX2luc3RhbGxbdmFyZGVwc2V4Y2x1ZGVdICs9ICJidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyB0aGVuIHRoZSB2YWx1ZSBhZGRlZCB0byBTU1RBVEVQT1NUSU5TVEZVTkNTOgorU1NUQVRFUE9TVElOU1RGVU5DU1t2YXJkZXB2YWx1ZWV4Y2x1ZGVdIC49ICJ8IGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisKKyMKKyMgV3JpdGUgb3V0IG1ldGFkYXRhIGFib3V0IHRoaXMgcGFja2FnZSBmb3IgY29tcGFyaXNpb24gd2hlbiB3cml0aW5nIGZ1dHVyZSBwYWNrYWdlcworIworcHl0aG9uIGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkoKSB7CisgICAgaWYgbm90IGQuZ2V0VmFyKCdCQl9DVVJSRU5UVEFTSycsIFRydWUpIGluIFsncGFja2FnZWRhdGEnLCAncGFja2FnZWRhdGFfc2V0c2NlbmUnXToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGlmIG5vdCAicGFja2FnZSIgaW4gKGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGVycm5vCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBjbGFzcyBSZWNpcGVJbmZvOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLnBlID0gIjAiCisgICAgICAgICAgICBzZWxmLnB2ID0gIjAiCisgICAgICAgICAgICBzZWxmLnByID0gInIwIgorICAgICAgICAgICAgc2VsZi5kZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucGFja2FnZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5zcmNyZXYgPSAiIgorCisKKyAgICBjbGFzcyBQYWNrYWdlSW5mbzoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5wZSA9ICIwIgorICAgICAgICAgICAgc2VsZi5wdiA9ICIwIgorICAgICAgICAgICAgc2VsZi5wciA9ICJyMCIKKyAgICAgICAgICAgICMgcGtnL3BrZ2UvcGtndi9wa2dyIHNob3VsZCBiZSBlbXB0eSBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZhdWx0IHRoZW0KKyAgICAgICAgICAgIHNlbGYucGtnID0gIiIKKyAgICAgICAgICAgIHNlbGYucGtnZSA9ICIiCisgICAgICAgICAgICBzZWxmLnBrZ3YgPSAiIgorICAgICAgICAgICAgc2VsZi5wa2dyID0gIiIKKyAgICAgICAgICAgIHNlbGYuc2l6ZSA9IDAKKyAgICAgICAgICAgIHNlbGYuZGVwZW5kcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJkZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucnJlY29tbWVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5yc3VnZ2VzdHMgPSAiIgorICAgICAgICAgICAgc2VsZi5ycmVwbGFjZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5yY29uZmxpY3RzID0gIiIKKyAgICAgICAgICAgIHNlbGYuZmlsZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5maWxlbGlzdCA9ICIiCisgICAgICAgICAgICAjIFZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgd3JpdHRlbiB0byB0aGVpciBvd24gc2VwYXJhdGUgZmlsZQorICAgICAgICAgICAgc2VsZi5maWxldmFycyA9IGRpY3QuZnJvbWtleXMoWydwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nXSkKKworICAgICMgU2hvdWxkIGNoZWNrIFBBQ0tBR0VTIGhlcmUgdG8gc2VlIGlmIGFueXRoaW5nIHJlbW92ZWQKKworICAgIGRlZiByZWFkUGFja2FnZUluZm8ocGtnLCBoaXN0ZmlsZSk6CisgICAgICAgIHBrZ2luZm8gPSBQYWNrYWdlSW5mbyhwa2cpCisgICAgICAgIHdpdGggb3BlbihoaXN0ZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBsbnMgPSBsaW5lLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBuYW1lID0gbG5zWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxuc1sxXS5zdHJpcCgiIFx0XHJcbiIpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJQRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUFYiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnB2ID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBSIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0ciOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLR1YiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZ3YgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHUiI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtnciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSUFJPVklERVMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSREVQRU5EUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucmRlcGVuZHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlJFQ09NTUVORFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJTVUdHRVNUUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJSRVBMQUNFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnJlcGxhY2VzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJDT05GTElDVFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJjb25mbGljdHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHU0laRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uc2l6ZSA9IGxvbmcodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJGSUxFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uZmlsZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiRklMRUxJU1QiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gdmFsdWUKKyAgICAgICAgIyBBcHBseSBkZWZhdWx0cworICAgICAgICBpZiBub3QgcGtnaW5mby5wa2c6CisgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHBrZ2luZm8ubmFtZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dlOgorICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gcGtnaW5mby5wZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2d2OgorICAgICAgICAgICAgcGtnaW5mby5wa2d2ID0gcGtnaW5mby5wdgorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dyOgorICAgICAgICAgICAgcGtnaW5mby5wa2dyID0gcGtnaW5mby5wcgorICAgICAgICByZXR1cm4gcGtnaW5mbworCisgICAgZGVmIGdldGxhc3Rwa2d2ZXJzaW9uKHBrZyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZywgImxhdGVzdCIpCisgICAgICAgICAgICByZXR1cm4gcmVhZFBhY2thZ2VJbmZvKHBrZywgaGlzdGZpbGUpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzb3J0cGtnbGlzdChzdHJpbmcpOgorICAgICAgICBwa2dpdGVyID0gcmUuZmluZGl0ZXIocidbYS16QS1aMC05ListXSsoIFwoWz48PV0rIFteICldK1wpKT8nLCBzdHJpbmcsIDApCisgICAgICAgIHBrZ2xpc3QgPSBbcC5ncm91cCgwKSBmb3IgcCBpbiBwa2dpdGVyXQorICAgICAgICBwa2dsaXN0LnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4ocGtnbGlzdCkKKworICAgIGRlZiBzb3J0bGlzdChzdHJpbmcpOgorICAgICAgICBpdGVtcyA9IHN0cmluZy5zcGxpdCgnICcpCisgICAgICAgIGl0ZW1zLnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4oaXRlbXMpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcGUgPSBkLmdldFZhcignUEUnLCBUcnVlKSBvciAiMCIKKyAgICBwdiA9IGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgcHIgPSBkLmdldFZhcignUFInLCBUcnVlKQorCisgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgIHBhY2thZ2VzID0gIiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsIHBuKSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQUNLQUdFUzogJyk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKGxpbmUuc3BsaXQoJzogJywgMSlbMV0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAjIFByb2JhYmx5IGEgLWNyb3NzIHJlY2lwZSwganVzdCBpZ25vcmUKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCisgICAgcGFja2FnZWxpc3QgPSBwYWNrYWdlcy5zcGxpdCgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnaGlzdGRpcikKKyAgICBlbHNlOgorICAgICAgICAjIFJlbW92ZSBmaWxlcyBmb3IgcGFja2FnZXMgdGhhdCBubyBsb25nZXIgZXhpc3QKKyAgICAgICAgZm9yIGl0ZW0gaW4gb3MubGlzdGRpcihwa2doaXN0ZGlyKToKKyAgICAgICAgICAgIGlmIGl0ZW0gIT0gImxhdGVzdCIgYW5kIGl0ZW0gIT0gImxhdGVzdF9zcmNyZXYiOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgICAgICAgICBpdGVtcGF0aCA9IG9zLnBhdGguam9pbihwa2doaXN0ZGlyLCBpdGVtKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGl0ZW1wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJmaWxlIGluIG9zLmxpc3RkaXIoaXRlbXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oaXRlbXBhdGgsIHN1YmZpbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoaXRlbXBhdGgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoaXRlbXBhdGgpCisKKyAgICByY3BpbmZvID0gUmVjaXBlSW5mbyhwbikKKyAgICByY3BpbmZvLnBlID0gcGUKKyAgICByY3BpbmZvLnB2ID0gcHYKKyAgICByY3BpbmZvLnByID0gcHIKKyAgICByY3BpbmZvLmRlcGVuZHMgPSBzb3J0bGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIikpCisgICAgcmNwaW5mby5wYWNrYWdlcyA9IHBhY2thZ2VzCisgICAgd3JpdGVfcmVjaXBlaGlzdG9yeShyY3BpbmZvLCBkKQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VsaXN0OgorICAgICAgICBwa2dkYXRhID0ge30KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwa2cpKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpdGVtID0gbGluZS5yc3RyaXAoJ1xuJykuc3BsaXQoJzogJywgMSkKKyAgICAgICAgICAgICAgICBrZXkgPSBpdGVtWzBdCisgICAgICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKCdfJyArIHBrZyk6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleVs6LWxlbihwa2cpLTFdCisgICAgICAgICAgICAgICAgcGtnZGF0YVtrZXldID0gaXRlbVsxXS5kZWNvZGUoJ3V0Zi04JykuZGVjb2RlKCdzdHJpbmdfZXNjYXBlJykKKworICAgICAgICBwa2dlID0gcGtnZGF0YS5nZXQoJ1BLR0UnLCAnMCcpCisgICAgICAgIHBrZ3YgPSBwa2dkYXRhWydQS0dWJ10KKyAgICAgICAgcGtnciA9IHBrZ2RhdGFbJ1BLR1InXQorICAgICAgICAjCisgICAgICAgICMgRmluZCBvdXQgd2hhdCB0aGUgbGFzdCB2ZXJzaW9uIHdhcworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgdmVyc2lvbiBkaWQgbm90IGRlY3JlYXNlCisgICAgICAgICMKKyAgICAgICAgbGFzdHZlcnNpb24gPSBnZXRsYXN0cGtndmVyc2lvbihwa2cpCisgICAgICAgIGlmIGxhc3R2ZXJzaW9uOgorICAgICAgICAgICAgbGFzdF9wa2dlID0gbGFzdHZlcnNpb24ucGtnZQorICAgICAgICAgICAgbGFzdF9wa2d2ID0gbGFzdHZlcnNpb24ucGtndgorICAgICAgICAgICAgbGFzdF9wa2dyID0gbGFzdHZlcnNpb24ucGtncgorICAgICAgICAgICAgciA9IGJiLnV0aWxzLnZlcmNtcCgocGtnZSwgcGtndiwgcGtnciksIChsYXN0X3BrZ2UsIGxhc3RfcGtndiwgbGFzdF9wa2dyKSkKKyAgICAgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgICAgIG1zZyA9ICJQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICglczolcy0lcyB0byAlczolcy0lcykiICUgKHBrZywgbGFzdF9wa2dlLCBsYXN0X3BrZ3YsIGxhc3RfcGtnciwgcGtnZSwgcGtndiwgcGtncikKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiLCBtc2csIGQpCisKKyAgICAgICAgcGtnaW5mbyA9IFBhY2thZ2VJbmZvKHBrZykKKyAgICAgICAgIyBBcHBhcmVudGx5IHRoZSB2ZXJzaW9uIGNhbiBiZSBkaWZmZXJlbnQgb24gYSBwZXItcGFja2FnZSBiYXNpcyAoc2VlIFB5dGhvbikKKyAgICAgICAgcGtnaW5mby5wZSA9IHBrZ2RhdGEuZ2V0KCdQRScsICcwJykKKyAgICAgICAgcGtnaW5mby5wdiA9IHBrZ2RhdGFbJ1BWJ10KKyAgICAgICAgcGtnaW5mby5wciA9IHBrZ2RhdGFbJ1BSJ10KKyAgICAgICAgcGtnaW5mby5wa2cgPSBwa2dkYXRhWydQS0cnXQorICAgICAgICBwa2dpbmZvLnBrZ2UgPSBwa2dlCisgICAgICAgIHBrZ2luZm8ucGtndiA9IHBrZ3YKKyAgICAgICAgcGtnaW5mby5wa2dyID0gcGtncgorICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlBST1ZJREVTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yZGVwZW5kcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUkRFUEVORFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUkVDT01NRU5EUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSU1VHR0VTVFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZXBsYWNlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlJFUExBQ0VTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yY29uZmxpY3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSQ09ORkxJQ1RTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5maWxlcyA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnRklMRVMnLCAiIikpCisgICAgICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgICAgICBwa2dpbmZvLmZpbGV2YXJzW2ZpbGV2YXJdID0gcGtnZGF0YS5nZXQoZmlsZXZhciwgIiIpCisKKyAgICAgICAgIyBHYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZWQgZmlsZXMKKyAgICAgICAgdmFsID0gcGtnZGF0YS5nZXQoJ0ZJTEVTX0lORk8nLCAnJykKKyAgICAgICAgZGljdHZhbCA9IGpzb24ubG9hZHModmFsKQorICAgICAgICBmaWxlbGlzdCA9IGRpY3R2YWwua2V5cygpCisgICAgICAgIGZpbGVsaXN0LnNvcnQoKQorICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gIiAiLmpvaW4oZmlsZWxpc3QpCisKKyAgICAgICAgcGtnaW5mby5zaXplID0gaW50KHBrZ2RhdGFbJ1BLR1NJWkUnXSkKKworICAgICAgICB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpCisKKyAgICAjIENyZWF0ZSBmaWxlcy1pbi08cGFja2FnZS1uYW1lPi50eHQgZmlsZXMgY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZXMgb2YgZWFjaCByZWNpcGUncyBwYWNrYWdlCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJidWlsZGhpc3RvcnlfbGlzdF9wa2dfZmlsZXMiLCBkKQorfQorCisKK2RlZiB3cml0ZV9yZWNpcGVoaXN0b3J5KHJjcGluZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHJlY2lwZSBoaXN0b3J5IikKKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIGluZm9maWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICJsYXRlc3QiKQorICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb2ZpbGUsICJ3IiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgICAgICBpZiByY3BpbmZvLnBlICE9ICIwIjoKKyAgICAgICAgICAgIGYud3JpdGUodSJQRSA9ICVzXG4iICUgIHJjcGluZm8ucGUpCisgICAgICAgIGYud3JpdGUodSJQViA9ICVzXG4iICUgIHJjcGluZm8ucHYpCisgICAgICAgIGYud3JpdGUodSJQUiA9ICVzXG4iICUgIHJjcGluZm8ucHIpCisgICAgICAgIGYud3JpdGUodSJERVBFTkRTID0gJXNcbiIgJSAgcmNwaW5mby5kZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUEFDS0FHRVMgPSAlc1xuIiAlICByY3BpbmZvLnBhY2thZ2VzKQorCisKK2RlZiB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHBhY2thZ2UgaGlzdG9yeSBmb3IgcGFja2FnZSAlcyIgJSBwa2dpbmZvLm5hbWUpCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBwa2dwYXRoID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZ2luZm8ubmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtncGF0aCk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dwYXRoKQorCisgICAgaW5mb2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtncGF0aCwgImxhdGVzdCIpCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvZmlsZSwgInciLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgICAgIGlmIHBrZ2luZm8ucGUgIT0gIjAiOgorICAgICAgICAgICAgZi53cml0ZSh1IlBFID0gJXNcbiIgJSAgcGtnaW5mby5wZSkKKyAgICAgICAgZi53cml0ZSh1IlBWID0gJXNcbiIgJSAgcGtnaW5mby5wdikKKyAgICAgICAgZi53cml0ZSh1IlBSID0gJXNcbiIgJSAgcGtnaW5mby5wcikKKworICAgICAgICBwa2d2YXJzID0ge30KKyAgICAgICAgcGtndmFyc1snUEtHJ10gPSBwa2dpbmZvLnBrZyBpZiBwa2dpbmZvLnBrZyAhPSBwa2dpbmZvLm5hbWUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dFJ10gPSBwa2dpbmZvLnBrZ2UgaWYgcGtnaW5mby5wa2dlICE9IHBrZ2luZm8ucGUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dWJ10gPSBwa2dpbmZvLnBrZ3YgaWYgcGtnaW5mby5wa2d2ICE9IHBrZ2luZm8ucHYgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dSJ10gPSBwa2dpbmZvLnBrZ3IgaWYgcGtnaW5mby5wa2dyICE9IHBrZ2luZm8ucHIgZWxzZSAnJworICAgICAgICBmb3IgcGtndmFyIGluIHBrZ3ZhcnM6CisgICAgICAgICAgICB2YWwgPSBwa2d2YXJzW3BrZ3Zhcl0KKyAgICAgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHUiJXMgPSAlc1xuIiAlIChwa2d2YXIsIHZhbCkpCisKKyAgICAgICAgZi53cml0ZSh1IlJQUk9WSURFUyA9ICVzXG4iICUgIHBrZ2luZm8ucnByb3ZpZGVzKQorICAgICAgICBmLndyaXRlKHUiUkRFUEVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJkZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUlJFQ09NTUVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJyZWNvbW1lbmRzKQorICAgICAgICBpZiBwa2dpbmZvLnJzdWdnZXN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSU1VHR0VTVFMgPSAlc1xuIiAlICBwa2dpbmZvLnJzdWdnZXN0cykKKyAgICAgICAgaWYgcGtnaW5mby5ycmVwbGFjZXM6CisgICAgICAgICAgICBmLndyaXRlKHUiUlJFUExBQ0VTID0gJXNcbiIgJSAgcGtnaW5mby5ycmVwbGFjZXMpCisgICAgICAgIGlmIHBrZ2luZm8ucmNvbmZsaWN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSQ09ORkxJQ1RTID0gJXNcbiIgJSAgcGtnaW5mby5yY29uZmxpY3RzKQorICAgICAgICBmLndyaXRlKHUiUEtHU0laRSA9ICVkXG4iICUgIHBrZ2luZm8uc2l6ZSkKKyAgICAgICAgZi53cml0ZSh1IkZJTEVTID0gJXNcbiIgJSAgcGtnaW5mby5maWxlcykKKyAgICAgICAgZi53cml0ZSh1IkZJTEVMSVNUID0gJXNcbiIgJSAgcGtnaW5mby5maWxlbGlzdCkKKworICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgIGZpbGV2YXJwYXRoID0gb3MucGF0aC5qb2luKHBrZ3BhdGgsICJsYXRlc3QuJXMiICUgZmlsZXZhcikKKyAgICAgICAgdmFsID0gcGtnaW5mby5maWxldmFyc1tmaWxldmFyXQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGV2YXJwYXRoLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHZhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGV2YXJwYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZXZhcnBhdGgpCisKKyMKKyMgcm9vdGZzX3R5cGUgY2FuIGJlOiBpbWFnZSwgc2RrX3RhcmdldCwgc2RrX2hvc3QKKyMKK2RlZiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgcm9vdGZzX3R5cGU9ImltYWdlIik6CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworCisgICAgcHJvY2Vzc19saXN0ID0gWygnZmlsZScsICdiaF9pbnN0YWxsZWRfcGtncy50eHQnKSxcCisgICAgICAgICAgICAgICAgICAgICgnZGVwcycsICdiaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dCcpXQorCisgICAgZm9yIG91dHB1dF90eXBlLCBvdXRwdXRfZmlsZSBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgIG91dHB1dF9maWxlX2Z1bGwgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgb3V0cHV0X2ZpbGUpCisKKyAgICAgICAgd2l0aCBvcGVuKG91dHB1dF9maWxlX2Z1bGwsICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgaWYgcm9vdGZzX3R5cGUgPT0gImltYWdlIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgb3V0cHV0X3R5cGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIHJvb3Rmc190eXBlID09ICJzZGtfdGFyZ2V0Iiwgb3V0cHV0X3R5cGUpKQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX2ltYWdlKCkgeworICAgIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkKQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka190YXJnZXQoKSB7CisgICAgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkKGQsICJzZGtfdGFyZ2V0IikKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9zZGtfaG9zdCgpIHsKKyAgICBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgInNka19ob3N0IikKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQoKSB7CisJbWtkaXIgLXAgJDEKKworCSMgR2V0IGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzCisJcGtnY2FjaGU9IiQxL2luc3RhbGxlZC1wYWNrYWdlcy50bXAiCisJY2F0ICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3MudHh0IHwgc29ydCA+ICRwa2djYWNoZSAmJiBybSAke1dPUktESVJ9L2JoX2luc3RhbGxlZF9wa2dzLnR4dAorCisJY2F0ICRwa2djYWNoZSB8IGF3ayAneyBwcmludCAkMSB9JyA+ICQxL2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dAorCWlmIFsgLXMgJHBrZ2NhY2hlIF0gOyB0aGVuCisJCWNhdCAkcGtnY2FjaGUgfCBhd2sgJ3sgcHJpbnQgJDIgfScgfCB4YXJncyAtbjEgYmFzZW5hbWUgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZWxzZQorCQlwcmludGYgIiIgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZmkKKworCSMgUHJvZHVjZSBkZXBlbmRlbmN5IGdyYXBoCisJIyBGaXJzdCwgcXVvdGUgZWFjaCBuYW1lIHRvIGhhbmRsZSBjaGFyYWN0ZXJzIHRoYXQgY2F1c2UgaXNzdWVzIGZvciBkb3QKKwlzZWQgJ3M6XChbXnwgXSpcKToiXDEiOmcnICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQgPiAkMS9kZXBlbmRzLnRtcCAmJiBcCisJCXJtICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQKKwkjIENoYW5nZSBkZWxpbWl0ZXIgZnJvbSBwaXBlIHRvIC0+IGFuZCBzZXQgc3R5bGUgZm9yIHJlY29tbWVuZCBsaW5lcworCXNlZCAtaSAtZSAnczp8OiAtPiA6JyAtZSAnczoiXFtSRUNcXSI6W3N0eWxlPWRvdHRlZF06JyAtZSAnczokOjs6JyAkMS9kZXBlbmRzLnRtcAorCSMgQWRkIGhlYWRlciwgc29ydGVkIGFuZCBkZS1kdXBlZCBjb250ZW50cyBhbmQgZm9vdGVyIGFuZCB0aGVuIGRlbGV0ZSB0aGUgdGVtcCBmaWxlCisJcHJpbnRmICJkaWdyYXBoIGRlcGVuZHMge1xuICAgIG5vZGUgW3NoYXBlPXBsYWludGV4dF1cbiIgPiAkMS9kZXBlbmRzLmRvdAorCWNhdCAkMS9kZXBlbmRzLnRtcCB8IHNvcnQgfCB1bmlxID4+ICQxL2RlcGVuZHMuZG90CisJZWNobyAifSIgPj4gICQxL2RlcGVuZHMuZG90CisJcm0gJDEvZGVwZW5kcy50bXAKKworCSMgUHJvZHVjZSBpbnN0YWxsZWQgcGFja2FnZSBzaXplcyBsaXN0CisJcHJpbnRmICIiID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisJY2F0ICRwa2djYWNoZSB8IHdoaWxlIHJlYWQgcGtnIHBrZ2ZpbGUgcGtnYXJjaAorCWRvCisJCXNpemU9YG9lLXBrZ2RhdGEtdXRpbCAtcCAke1BLR0RBVEFfRElSfSByZWFkLXZhbHVlICJQS0dTSVpFIiAke3BrZ31fJHtwa2dhcmNofWAKKwkJaWYgWyAiJHNpemUiICE9ICIiIF0gOyB0aGVuCisJCQllY2hvICIkc2l6ZSAkcGtnIiA+PiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKwkJZmkKKwlkb25lCisJY2F0ICQxL2luc3RhbGxlZC1wYWNrYWdlLXNpemVzLnRtcCB8IHNvcnQgLW4gLXIgfCBhd2sgJ3twcmludCAkMSAiXHRLaUIgIiAkMn0nID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0CisJcm0gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisKKwkjIFdlJ3JlIG5vdyBkb25lIHdpdGggdGhlIGNhY2hlLCBkZWxldGUgaXQKKwlybSAkcGtnY2FjaGUKKworCWlmIFsgIiQyIiAhPSAic2RrIiBdIDsgdGhlbgorCQkjIFByb2R1Y2Ugc29tZSBjdXQtZG93biBncmFwaHMgKGZvciByZWFkYWJpbGl0eSkKKwkJZ3JlcCAtdiBrZXJuZWxfaW1hZ2UgJDEvZGVwZW5kcy5kb3QgfCBncmVwIC12IGtlcm5lbC0yIHwgZ3JlcCAtdiBrZXJuZWwtMyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwuZG90CisJCWdyZXAgLXYgbGliYzYgJDEvZGVwZW5kcy1ub2tlcm5lbC5kb3QgfCBncmVwIC12IGxpYmdjYyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLmRvdAorCQlncmVwIC12IHVwZGF0ZS0gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMuZG90ID4gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMtbm91cGRhdGUuZG90CisJCWdyZXAgLXYga2VybmVsLW1vZHVsZSAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS5kb3QgPiAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS1ub21vZHVsZXMuZG90CisJZmkKKworCSMgYWRkIGNvbXBsZW1lbnRhcnkgcGFja2FnZSBpbmZvcm1hdGlvbgorCWlmIFsgLWUgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0IF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0ICQxCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgaW1hZ2UKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCAnaW1hZ2UnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfQorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgU0RLCisKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ3NkaycsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCAke0JVSUxESElTVE9SWV9ESVJfU0RLfS8kMSBzZGsKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX2hvc3QoKSB7CisJYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkIGhvc3QKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX3RhcmdldCgpIHsKKwlidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQgdGFyZ2V0Cit9CisKK2J1aWxkaGlzdG9yeV9saXN0X2ZpbGVzKCkgeworCSMgTGlzdCB0aGUgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIGJ1dCBleGNsdWRlIGRhdGUvdGltZSBldGMuCisJIyBUaGlzIGF3ayBzY3JpcHQgaXMgc29tZXdoYXQgbWVzc3ksIGJ1dCBoYW5kbGVzIHdoZXJlIHRoZSBzaXplIGlzIG5vdCBwcmludGVkIGZvciBkZXZpY2UgZmlsZXMgdW5kZXIgcHNldWRvCisJaWYgWyAiJDMiID0gImZha2Vyb290IiBdIDsgdGhlbgorCQkoIGNkICQxICYmICR7RkFLRVJPT1RFTlZ9ICR7RkFLRVJPT1RDTUR9IGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZWxzZQorCQkoIGNkICQxICYmIGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2xpc3RfcGtnX2ZpbGVzKCkgeworCSMgQ3JlYXRlIGluZGl2aWR1YWwgZmlsZXMtaW4tcGFja2FnZSBmb3IgZWFjaCByZWNpcGUncyBwYWNrYWdlCisJZm9yIHBrZ2RpciBpbiAkKGZpbmQgJHtQS0dERVNUfS8qIC1tYXhkZXB0aCAwIC10eXBlIGQpOyBkbworCQlwa2duYW1lPSQoYmFzZW5hbWUgJHBrZ2RpcikKKwkJb3V0Zm9sZGVyPSIke0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRX0vJHBrZ25hbWUiCisJCW91dGZpbGU9IiRvdXRmb2xkZXIvZmlsZXMtaW4tcGFja2FnZS50eHQiCisJCSMgTWFrZSBzdXJlIHRoZSBvdXRwdXQgZm9sZGVyIGV4aXN0cyBzbyB3ZSBjYW4gY3JlYXRlIHRoZSBmaWxlCisJCWlmIFsgISAtZCAkb3V0Zm9sZGVyIF0gOyB0aGVuCisJCQliYmRlYnVnIDIgIkZvbGRlciAkb3V0Zm9sZGVyIGRvZXMgbm90IGV4aXN0LCBmaWxlICRvdXRmaWxlIG5vdCBjcmVhdGVkIgorCQkJY29udGludWUKKwkJZmkKKwkJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHBrZ2RpciAkb3V0ZmlsZSBmYWtlcm9vdAorCWRvbmUKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZWluZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdpbWFnZScsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAke0lNQUdFX1JPT1RGU30gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9maWxlcy1pbi1pbWFnZS50eHQKKworCSMgQ29sbGVjdCBmaWxlcyByZXF1ZXN0ZWQgaW4gQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTCisJcm0gLXJmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMKKwlmb3IgZiBpbiAke0JVSUxESElTVE9SWV9JTUFHRV9GSUxFU307IGRvCisJCWlmIFsgLWYgJHtJTUFHRV9ST09URlN9LyRmIF0gOyB0aGVuCisJCQlta2RpciAtcCAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWZpbGVzL2BkaXJuYW1lICRmYAorCQkJY3AgJHtJTUFHRV9ST09URlN9LyRmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMvJGYKKwkJZmkKKwlkb25lCisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgaW1hZ2UKKwlwcmludGYgIiIgID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0IDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X2ltYWdldmFycyhkKX0KK0VORAorCWltYWdlc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAneyBwcmludCAkMSB9J2AKKwllY2hvICJJTUFHRVNJWkUgPSAkaW1hZ2VzaXplIiA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0CisKKwkjIEFkZCBzb21lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKwllY2hvICIke01BQ0hJTkV9OiAke0lNQUdFX0JBU0VOQU1FfSBjb25maWd1cmVkIGZvciAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0iID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9idWlsZC1pZC50eHQKKworCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2J1aWxkLWlkLnR4dCA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9idWlsZF9pZChkKX0KK0VORAorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka2luZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdzZGsnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHtTREtfT1VUUFVUfSAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9maWxlcy1pbi1zZGsudHh0CisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgU0RLCisJcHJpbnRmICIiICA+ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L3Nkay1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9zZGstaW5mby50eHQgPDxFTkQKKyR7QGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKX0KK0VORAorCXNka3NpemU9YGR1IC1rcyAke1NES19PVVRQVVR9IHwgYXdrICd7IHByaW50ICQxIH0nYAorCWVjaG8gIlNES1NJWkUgPSAkc2Rrc2l6ZSIgPj4gJHtCVUlMREhJU1RPUllfRElSX1NES30vc2RrLWluZm8udHh0Cit9CisKKyMgQnkgdXNpbmcgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCB3ZSBnZXQgaW4gYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YKKyMgdW5uZWVkZWQgcGFja2FnZXMgYnV0IGJlZm9yZSB0aGUgcmVtb3ZhbCBvZiBwYWNrYWdpbmcgZmlsZXMKK1JPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UgO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQgOyAiCisKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbyA7ICIKKworIyBXZSB3YW50IHRoZXNlIHRvIGJlIHRoZSBsYXN0IHJ1biBzbyB0aGF0IHdlIGdldCBjYWxsZWQgYWZ0ZXIgY29tcGxlbWVudGFyeSBwYWNrYWdlIGluc3RhbGxhdGlvbgorUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkRfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX3RhcmdldCA7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfdGFyZ2V0IDsgIgorUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EX2FwcGVuZCA9ICIgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka19ob3N0IDtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfaG9zdCA7ICIKKworU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gImJ1aWxkaGlzdG9yeV9nZXRfc2RraW5mbyA7ICIKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfYnVpbGRfaWQoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybiAiIgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHN0YXR1c2xpbmVzID0gW10KKyAgICBmb3IgZnVuYyBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdCVUlMRENGR19GVU5DUycsIGxvY2FsZGF0YSk6CisgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgaWYgZnVuYyBub3QgaW4gZzoKKyAgICAgICAgICAgIGJiLndhcm4oIkJ1aWxkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gJyVzJyBkb2VzIG5vdCBleGlzdCIgJSBmdW5jKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmxpbmVzID0gZ1tmdW5jXShsb2NhbGRhdGEpCisgICAgICAgICAgICBpZiBmbGluZXM6CisgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgIHN0YXR1c2hlYWRlciA9IGQuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgIHJldHVybignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfbWV0YWRhdGFfcmV2cyhkKToKKyAgICAjIFdlIHdhbnQgYW4gZWFzaWx5IG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IGhlcmUsIHNvIGdldF9sYXllcnNfYnJhbmNoX3JldiBpc24ndCBxdWl0ZSB3aGF0IHdlIHdhbnQKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBvdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKToKKyAgICB2YXJzID0gdmFycy5zcGxpdCgpCisgICAgbGlzdHZhcnMgPSBsaXN0dmFycy5zcGxpdCgpCisgICAgcmV0ID0gIiIKKyAgICBmb3IgdmFyIGluIHZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiB2YXIgaW4gbGlzdHZhcnM6CisgICAgICAgICAgICAjIFNxdWFzaCBvdXQgc3BhY2VzCisgICAgICAgICAgICB2YWx1ZSA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyh2YWx1ZSkKKyAgICAgICAgcmV0ICs9ICIlcyA9ICVzXG4iICUgKHZhciwgdmFsdWUpCisgICAgcmV0dXJuIHJldC5yc3RyaXAoJ1xuJykKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2V2YXJzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICByZXR1cm4gIiIKKyAgICBpbWFnZXZhcnMgPSAiRElTVFJPIERJU1RST19WRVJTSU9OIFVTRVJfQ0xBU1NFUyBJTUFHRV9DTEFTU0VTIElNQUdFX0ZFQVRVUkVTIElNQUdFX0xJTkdVQVMgSU1BR0VfSU5TVEFMTCBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCIKKyAgICBsaXN0dmFycyA9ICJVU0VSX0NMQVNTRVMgSU1BR0VfQ0xBU1NFUyBJTUFHRV9GRUFUVVJFUyBJTUFHRV9MSU5HVUFTIElNQUdFX0lOU1RBTEwgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoaW1hZ2V2YXJzLCBsaXN0dmFycywgZCkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKToKKyAgICBpZiBkLmdldFZhcignQkJfV09SS0VSQ09OVEVYVCcsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuICIiCisgICAgc2RrdmFycyA9ICJESVNUUk8gRElTVFJPX1ZFUlNJT04gU0RLX05BTUUgU0RLX1ZFUlNJT04gU0RLTUFDSElORSBTREtJTUFHRV9GRUFUVVJFUyBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgbGlzdHZhcnMgPSAiU0RLSU1BR0VfRkVBVFVSRVMgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoc2RrdmFycywgbGlzdHZhcnMsIGQpCisKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfY21kbGluZShkKToKKyAgICBpZiBzeXMuYXJndlswXS5lbmRzd2l0aCgnYmluL2JpdGJha2UnKToKKyAgICAgICAgYmluY21kID0gJ2JpdGJha2UnCisgICAgZWxzZToKKyAgICAgICAgYmluY21kID0gc3lzLmFyZ3ZbMF0KKyAgICByZXR1cm4gJyVzICVzJyAlIChiaW5jbWQsICcgJy5qb2luKHN5cy5hcmd2WzE6XSkpCisKKworYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQoKSB7CisJaWYgWyAiJDMiID0gIiIgXSA7IHRoZW4KKwkJY29tbWl0b3B0cz0iJHtCVUlMREhJU1RPUllfRElSfS8gLS1hbGxvdy1lbXB0eSIKKwkJaXRlbT0iTm8gY2hhbmdlcyIKKwllbHNlCisJCWNvbW1pdG9wdHM9IiQzIG1ldGFkYXRhLXJldnMiCisJCWl0ZW09IiQzIgorCWZpCisJaWYgWyAiJHtCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVN9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXN1bHQ9InN1Y2NlZWRlZCIKKwllbHNlCisJCXJlc3VsdD0iZmFpbGVkIgorCWZpCisJY2FzZSAke0JVSUxESElTVE9SWV9CVUlMRF9JTlRFUlJVUFRFRH0gaW4KKwkJMSkKKwkJCXJlc3VsdD0iJHJlc3VsdCAoaW50ZXJydXB0ZWQpIgorCQkJOzsKKwkJMikKKwkJCXJlc3VsdD0iJHJlc3VsdCAoZm9yY2UgaW50ZXJydXB0ZWQpIgorCQkJOzsKKwllc2FjCisJY29tbWl0bXNnZmlsZT1gbWt0ZW1wYAorCWNhdCA+ICRjb21taXRtc2dmaWxlIDw8IEVORAorJGl0ZW06IEJ1aWxkICR7QlVJTEROQU1FfSBvZiAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0gZm9yIG1hY2hpbmUgJHtNQUNISU5FfSBvbiAkMgorCitjbWQ6ICQxCisKK3Jlc3VsdDogJHJlc3VsdAorCittZXRhZGF0YSByZXZpc2lvbnM6CitFTkQKKwljYXQgJHtCVUlMREhJU1RPUllfRElSfS9tZXRhZGF0YS1yZXZzID4+ICRjb21taXRtc2dmaWxlCisJZ2l0IGNvbW1pdCAkY29tbWl0b3B0cyAtRiAkY29tbWl0bXNnZmlsZSAtLWF1dGhvciAiJHtCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUn0iID4gL2Rldi9udWxsCisJcm0gJGNvbW1pdG1zZ2ZpbGUKK30KKworYnVpbGRoaXN0b3J5X2NvbW1pdCgpIHsKKwlpZiBbICEgLWQgJHtCVUlMREhJU1RPUllfRElSfSBdIDsgdGhlbgorCQkjIENvZGUgYWJvdmUgdGhhdCBjcmVhdGVzIHRoaXMgZGlyIG5ldmVyIGV4ZWN1dGVkLCBzbyB0aGVyZSBjYW4ndCBiZSBhbnl0aGluZyB0byBjb21taXQKKwkJcmV0dXJuCisJZmkKKworCSMgQ3JlYXRlIGEgbWFjaGluZS1yZWFkYWJsZSBsaXN0IG9mIG1ldGFkYXRhIHJldmlzaW9ucyBmb3IgZWFjaCBsYXllcgorCWNhdCA+ICR7QlVJTERISVNUT1JZX0RJUn0vbWV0YWRhdGEtcmV2cyA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9tZXRhZGF0YV9yZXZzKGQpfQorRU5ECisKKwkoIGNkICR7QlVJTERISVNUT1JZX0RJUn0vCisJCSMgSW5pdGlhbGlzZSB0aGUgcmVwbyBpZiBuZWNlc3NhcnkKKwkJaWYgWyAhIC1kIC5naXQgXSA7IHRoZW4KKwkJCWdpdCBpbml0IC1xCisJCWVsc2UKKwkJCWdpdCB0YWcgLWYgYnVpbGQtbWludXMtMyBidWlsZC1taW51cy0yID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorCQkJZ2l0IHRhZyAtZiBidWlsZC1taW51cy0yIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCQlnaXQgdGFnIC1mIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCWZpCisJCSMgSWYgdGhlIHVzZXIgaGFzbid0IHNldCB1cCB0aGVpciBuYW1lL2VtYWlsLCBzZXQgc29tZSBkZWZhdWx0cworCQkjIGp1c3QgZm9yIHRoaXMgcmVwbyAob3RoZXJ3aXNlIHRoZSBjb21taXQgd2lsbCBmYWlsIHdpdGggb2xkZXIKKwkJIyB2ZXJzaW9ucyBvZiBnaXQpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsID4gL2Rldi9udWxsIDsgdGhlbgorCQkJZ2l0IGNvbmZpZyAtLWxvY2FsIHVzZXIuZW1haWwgImJ1aWxkaGlzdG9yeUAke0RJU1RST30iCisJCWZpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLm5hbWUgPiAvZGV2L251bGwgOyB0aGVuCisJCQlnaXQgY29uZmlnIC0tbG9jYWwgdXNlci5uYW1lICJidWlsZGhpc3RvcnkiCisJCWZpCisJCSMgQ2hlY2sgaWYgdGhlcmUgYXJlIG5ldy9jaGFuZ2VkIGZpbGVzIHRvIGNvbW1pdCAob3RoZXIgdGhhbiBtZXRhZGF0YS1yZXZzKQorCQlyZXBvc3RhdHVzPWBnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgZ3JlcCAtdiAiIG1ldGFkYXRhLXJldnMkImAKKwkJSE9TVE5BTUU9YGhvc3RuYW1lIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKwkJQ01ETElORT0iJHtAYnVpbGRoaXN0b3J5X2dldF9jbWRsaW5lKGQpfSIKKwkJaWYgWyAiJHJlcG9zdGF0dXMiICE9ICIiIF0gOyB0aGVuCisJCQlnaXQgYWRkIC1BIC4KKwkJCSMgcG9yY2VsYWluIG91dHB1dCBsb29rcyBsaWtlICI/PyBwYWNrYWdlcy9mb28vYmFyIgorCQkJIyBFbnN1cmUgd2UgY29tbWl0IG1ldGFkYXRhLXJldnMgd2l0aCB0aGUgZmlyc3QgY29tbWl0CisJCQlmb3IgZW50cnkgaW4gYGVjaG8gIiRyZXBvc3RhdHVzIiB8IGF3ayAne3ByaW50ICQyfScgfCBhd2sgLUYvICd7cHJpbnQgJDF9JyB8IHNvcnQgfCB1bmlxYCA7IGRvCisJCQkJYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIiAiJGVudHJ5IgorCQkJZG9uZQorCQkJZ2l0IGdjIC0tYXV0byAtLXF1aWV0CisJCWVsc2UKKwkJCWJ1aWxkaGlzdG9yeV9zaW5nbGVfY29tbWl0ICIkQ01ETElORSIgIiRIT1NUTkFNRSIKKwkJZmkKKwkJaWYgWyAiJHtCVUlMREhJU1RPUllfUFVTSF9SRVBPfSIgIT0gIiIgXSA7IHRoZW4KKwkJCWdpdCBwdXNoIC1xICR7QlVJTERISVNUT1JZX1BVU0hfUkVQT30KKwkJZmkpIHx8IHRydWUKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgZS5kYXRhLmdldFZhcignQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgVHJ1ZSkuc3RyaXAoKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiQlVJTERISVNUT1JZX0NPTU1JVCIsIFRydWUpID09ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIldyaXRpbmcgYnVpbGRoaXN0b3J5IikKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVMnLCBzdHIoZS5fZmFpbHVyZXMpKQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBnZXRhdHRyKGUsICdfaW50ZXJydXB0ZWQnLCAwKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignQlVJTERISVNUT1JZX0JVSUxEX0lOVEVSUlVQVEVEJywgc3RyKGludGVycnVwdGVkKSkKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiYnVpbGRoaXN0b3J5X2NvbW1pdCIsIGxvY2FsZGF0YSkKK30KKworYWRkaGFuZGxlciBidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyCitidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCisKKworIyBGSVhNRSB0aGlzIG91Z2h0IHRvIGJlIG1vdmVkIGludG8gdGhlIGZldGNoZXIKK2RlZiBfZ2V0X3NyY3Jldl92YWx1ZXMoZCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB2ZXJzaW9uIHN0cmluZ3MgZm9yIHRoZSBjdXJyZW50IHJlY2lwZQorICAgICIiIgorCisgICAgc2NtcyA9IFtdCisgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKSwgZCkKKyAgICB1cmxkYXRhID0gZmV0Y2hlci51ZAorICAgIGZvciB1IGluIHVybGRhdGE6CisgICAgICAgIGlmIHVybGRhdGFbdV0ubWV0aG9kLnN1cHBvcnRzX3NyY3JldigpOgorICAgICAgICAgICAgc2Ntcy5hcHBlbmQodSkKKworICAgIGF1dG9pbmNfdGVtcGwgPSAnQVVUT0lOQysnCisgICAgZGljdF9zcmNyZXZzID0ge30KKyAgICBkaWN0X3RhZ19zcmNyZXZzID0ge30KKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHVkID0gdXJsZGF0YVtzY21dCisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldiA9IHVkLm1ldGhvZC5zb3J0YWJsZV9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBzdXBwb3J0IG9sZCBiaXRiYWtlIHZlcnNpb25zCisgICAgICAgICAgICAgICAgcmV2ID0gdWQubWV0aG9kLnNvcnRhYmxlX3JldmlzaW9uKHNjbSwgdWQsIGQsIG5hbWUpCisgICAgICAgICAgICAjIENsZWFuIHRoaXMgdXAgd2hlbiB3ZSBuZXh0IGJ1bXAgYml0YmFrZSB2ZXJzaW9uCisgICAgICAgICAgICBpZiB0eXBlKHJldikgIT0gc3RyOgorICAgICAgICAgICAgICAgIGF1dG9pbmMsIHJldiA9IHJldgorICAgICAgICAgICAgZWxpZiByZXYuc3RhcnRzd2l0aChhdXRvaW5jX3RlbXBsKToKKyAgICAgICAgICAgICAgICByZXYgPSByZXZbbGVuKGF1dG9pbmNfdGVtcGwpOl0KKyAgICAgICAgICAgIGRpY3Rfc3JjcmV2c1tuYW1lXSA9IHJldgorICAgICAgICAgICAgaWYgJ3RhZycgaW4gdWQucGFybToKKyAgICAgICAgICAgICAgICB0YWcgPSB1ZC5wYXJtWyd0YWcnXTsKKyAgICAgICAgICAgICAgICBrZXkgPSBuYW1lKydfJyt0YWcKKyAgICAgICAgICAgICAgICBkaWN0X3RhZ19zcmNyZXZzW2tleV0gPSByZXYKKyAgICByZXR1cm4gKGRpY3Rfc3JjcmV2cywgZGljdF90YWdfc3JjcmV2cykKKworZG9fZmV0Y2hbcG9zdGZ1bmNzXSArPSAid3JpdGVfc3JjcmV2IgorZG9fZmV0Y2hbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ3cml0ZV9zcmNyZXYiCitweXRob24gd3JpdGVfc3JjcmV2KCkgeworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKyAgICBzcmNyZXZmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICdsYXRlc3Rfc3JjcmV2JykKKworICAgIHNyY3JldnMsIHRhZ19zcmNyZXZzID0gX2dldF9zcmNyZXZfdmFsdWVzKGQpCisgICAgaWYgc3JjcmV2czoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ2hpc3RkaXIpCisgICAgICAgIG9sZF90YWdfc3JjcmV2cyA9IHt9CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3JldmZpbGUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjIHRhZ18nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKCcjIHRhZ18nLCAnJykuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCciJywgJycpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF90YWdfc3JjcmV2c1trZXldID0gdmFsdWUKKyAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIEZhbHNlKSBvciAnSU5WQUxJRCcKKyAgICAgICAgICAgIGlmIG9yaWdfc3JjcmV2ICE9ICdJTlZBTElEJzoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFViA9ICIlcyJcbicgJSBvcmlnX3NyY3JldikKKyAgICAgICAgICAgIGlmIGxlbihzcmNyZXZzKSA+IDE6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHNyY3JldiBpbiBzcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVl8lcycgJSBuYW1lLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3JpZ19zcmNyZXY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFVl8lcyA9ICIlcyJcbicgJSAobmFtZSwgb3JpZ19zcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNSRVZfJXMgPSAiJXMiXG4nICUgKG5hbWUsIHNyY3JldikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1JFViA9ICIlcyJcbicgJSBzcmNyZXZzLml0ZXJ2YWx1ZXMoKS5uZXh0KCkpCisgICAgICAgICAgICBpZiBsZW4odGFnX3NyY3JldnMpID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgc3JjcmV2IGluIHRhZ19zcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgdGFnXyVzID0gIiVzIlxuJyAlIChuYW1lLCBzcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIG9sZF90YWdfc3JjcmV2cyBhbmQgb2xkX3RhZ19zcmNyZXZzW25hbWVdICE9IHNyY3JldjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJSZXZpc2lvbiBmb3IgdGFnICVzIGluIHBhY2thZ2UgJXMgd2FzIGNoYW5nZWQgc2luY2UgbGFzdCBidWlsZCAoZnJvbSAlcyB0byAlcykiICUgKG5hbWUsIHBrZywgb2xkX3RhZ19zcmNyZXZzW25hbWVdLCBzcmNyZXYpKQorCisgICAgZWxzZToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjcmV2ZmlsZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc3JjcmV2ZmlsZSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlYWQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzCkBAIC0wLDAgKzEsMzcgQEAKKyMgU3VtbWFyaXplIHNzdGF0ZSB1c2FnZSBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZAorcHl0aG9uIGJ1aWxkc3RhdHNfc3VtbWFyeSAoKSB7CisgICAgaW1wb3J0IGNvbGxlY3Rpb25zCisgICAgaW1wb3J0IG9zLnBhdGgKKworICAgIGJuID0gZ2V0X2JuKGUpCisgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhic2Rpcik6CisgICAgICAgIHJldHVybgorCisgICAgc3N0YXRldGFza3MgPSAoZS5kYXRhLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGJ1aWx0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBbc2V0KCksIHNldCgpXSkKKyAgICBmb3IgcGYgaW4gb3MubGlzdGRpcihic2Rpcik6CisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIHBmKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0YXNrZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdGFza3MgPSBvcy5saXN0ZGlyKHRhc2tkaXIpCisgICAgICAgIGZvciB0IGluIHNzdGF0ZXRhc2tzOgorICAgICAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICAgICAgaWYgdCBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBub19zc3RhdGUuYWRkKHBmKQorICAgICAgICAgICAgZWxpZiB0ICsgJ19zZXRzY2VuZScgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgc3N0YXRlLmFkZChwZikKKworICAgIGhlYWRlcl9wcmludGVkID0gRmFsc2UKKyAgICBmb3IgdCBpbiBzc3RhdGV0YXNrczoKKyAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICBpZiBub19zc3RhdGUgfCBzc3RhdGU6CisgICAgICAgICAgICBpZiBub3QgaGVhZGVyX3ByaW50ZWQ6CisgICAgICAgICAgICAgICAgaGVhZGVyX3ByaW50ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYmIubm90ZSgiQnVpbGQgY29tcGxldGlvbiBzdW1tYXJ5OiIpCisKKyAgICAgICAgICAgIGJiLm5vdGUoIiAgezB9OiB7MX0lIHNzdGF0ZSByZXVzZSAoezJ9IHNldHNjZW5lLCB7M30gc2NyYXRjaCkiLmZvcm1hdCh0LCAxMDAqbGVuKHNzdGF0ZSkvKGxlbihzc3RhdGUpK2xlbihub19zc3RhdGUpKSwgbGVuKHNzdGF0ZSksIGxlbihub19zc3RhdGUpKSkKK30KK2FkZGhhbmRsZXIgYnVpbGRzdGF0c19zdW1tYXJ5CitidWlsZHN0YXRzX3N1bW1hcnlbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVjNTcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy5iYmNsYXNzCkBAIC0wLDAgKzEsMjcwIEBACitCVUlMRFNUQVRTX0JBU0UgPSAiJHtUTVBESVJ9L2J1aWxkc3RhdHMvIgorQlVJTERTVEFUU19CTkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5idWlsZG5hbWUiCitCVUlMRFNUQVRTX0RFVkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5kZXZpY2UiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgorIworIyBUaGUgQ1BVIGFuZCBUaW1lIGdhdGhlcmluZy90cmFja2luZyBmdW5jdGlvbnMgYW5kIGJiZXZlbnQgaW5zcGlyYXRpb24KKyMgd2VyZSB3cml0dGVuIGJ5IENocmlzdG9waGVyIExhcnNvbiBhbmQgY2FuIGJlIHNlZW4gaGVyZToKKyMgaHR0cDovL2tlcmdvdGgucGFzdGV5Lm5ldC8xNDI4MTMKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBnZXRfcHJvY2Vzc19jcHV0aW1lKHBpZCk6CisgICAgd2l0aCBvcGVuKCIvcHJvYy8lZC9zdGF0IiAlIHBpZCwgInIiKSBhcyBmOgorICAgICAgICBmaWVsZHMgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKQorICAgICMgMTM6IHV0aW1lLCAxNDogc3RpbWUsIDE1OiBjdXRpbWUsIDE2OiBjc3RpbWUKKyAgICByZXR1cm4gc3VtKGludChmaWVsZCkgZm9yIGZpZWxkIGluIGZpZWxkc1sxMzoxNl0pCisKK2RlZiBnZXRfY3B1dGltZSgpOgorICAgIHdpdGggb3BlbigiL3Byb2Mvc3RhdCIsICJyIikgYXMgZjoKKyAgICAgICAgZmllbGRzID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLnNwbGl0KClbMTpdCisgICAgcmV0dXJuIHN1bShpbnQoZmllbGQpIGZvciBmaWVsZCBpbiBmaWVsZHMpCisKK2RlZiBzZXRfYm4oZSk6CisgICAgYm4gPSBlLmdldFBrZ3MoKVswXSArICItIiArIGUuZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSkpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSksICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShvcy5wYXRoLmpvaW4oYm4sIGUuZGF0YS5nZXRWYXIoJ0JVSUxETkFNRScsIFRydWUpKSkKKworZGVmIGdldF9ibihlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSkgYXMgZjoKKyAgICAgICAgYm4gPSBmLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gYm4KKworZGVmIHNldF9kZXZpY2UoZSk6CisgICAgdG1wZGlyID0gZS5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkZXZmaWxlID0gZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShkZXZmaWxlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFdlIGxvb2sgZm9yIHRoZSB2b2x1bWUgVE1QRElSIGxpdmVzIG9uLiBUbyBkbyBhbGwgZGlza3Mgd291bGQgbWFrZSBsaXR0bGUKKyAgICAjIHNlbnNlIGFuZCBub3QgZ2l2ZSB1cyBhbnkgcGFydGljdWxhcmx5IHVzZWZ1bCBkYXRhLiBJbiB0aGVvcnkgd2UgY291bGQgZG8KKyAgICAjIHNvbWV0aGluZyBsaWtlIHN0aWNrIERMX0RJUiBvbiBhIGRpZmZlcmVudCBwYXJ0aXRpb24gYW5kIHRoaXMgd291bGQKKyAgICAjIHRocm93IHN0YXRzIGdhdGhlcmluZyBvZmYuIFRoZSBzYW1lIGdvZXMgd2l0aCBTU1RBVEVfRElSLiBIb3dldmVyLCBsZXQncworICAgICMgZ2V0IHRoZSBiYXNpY3MgaW4gaGVyZSBhbmQgd29yayBvbiB0aGUgY29ybmVyY2FzZXMgbGF0ZXIuCisgICAgIyBBIG5vdGUuIC9wcm9jL2Rpc2tzdGF0cyBkb2VzIG5vdCBjb250YWluIGluZm8gb24gZW5jcnlwdGZzLCB0bXBmcywgZXRjLgorICAgICMgSWYgd2UgZW5kIHVwIGhpdHRpbmcgb25lIG9mIHRoZXNlIGZzLCB3ZSdsbCBqdXN0IHNraXAgZGlza3N0YXRzIGNvbGxlY3Rpb24uCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIGRldmljZSA9IG9zLnN0YXQodG1wZGlyKQorICAgIG1ham9yZGV2ID0gb3MubWFqb3IobG9uZyhkZXZpY2Uuc3RfZGV2KSkKKyAgICBtaW5vcmRldiA9IG9zLm1pbm9yKGxvbmcoZGV2aWNlLnN0X2RldikpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQnVnIDE3MDA6CisgICAgIyBCZWNhdXNlIHRtcGZzL2VuY3J5cHRmcy9yYW1mcyBldGMgaW5zZXJ0cyBubyBlbnRyeSBpbiAvcHJvYy9kaXNrc3RhdHMKKyAgICAjIHdlIHNldCByZGV2IHRvIE5vTG9naWNhbERldmljZSBhbmQgc2VhcmNoIGZvciBpdCBsYXRlci4gSWYgd2UgZmluZCBOTEQKKyAgICAjIHdlIGRvIG5vdCBjb2xsZWN0IGRpc2tzdGF0cyBhcyB0aGUgbWV0aG9kIHRvIGNvbGxlY3QgbWVhbmluZ2Z1bCBzdGF0aXN0aWNzCisgICAgIyBmb3IgdGhlc2UgZnMgdHlwZXMgcmVxdWlyZXMgYSBiaXQgbW9yZSByZXNlYXJjaC4KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgcmRldiA9ICJOb0xvZ2ljYWxEZXZpY2UiCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIi9wcm9jL2Rpc2tzdGF0cyIsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbWFqb3JkZXYgPT0gaW50KGxpbmUuc3BsaXQoKVswXSkgYW5kIG1pbm9yZGV2ID09IGludChsaW5lLnNwbGl0KClbMV0pOgorICAgICAgICAgICAgICAgICAgICByZGV2ID0gbGluZS5zcGxpdCgpWzJdCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGRldmZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShyZGV2KQorCitkZWYgZ2V0X2RldmljZShlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkpIGFzIGY6CisgICAgICAgIGRldmljZSA9IGYucmVhZGxpbmUoKQorICAgIHJldHVybiBkZXZpY2UKKworZGVmIGdldF9kaXNrc3RhdHMoZGV2KToKKyAgICBpbXBvcnQgaXRlcnRvb2xzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgRm9yIGluZm8gb24gd2hhdCB0aGVzZSBhcmUsIHNlZSBrZXJuZWwgZG9jIGZpbGUgaW9zdGF0cy50eHQKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgRFNUQVRfS0VZUyA9IFsnUmVhZHNDb21wJywgJ1JlYWRzTWVyZ2VkJywgJ1NlY3RSZWFkJywgJ1RpbWVSZWFkcycsICdXcml0ZXNDb21wJywgJ1NlY3RXcml0ZScsICdUaW1lV3JpdGUnLCAnSU9pblByb2dyZXNzJywgJ1RpbWVJTycsICdXVGltZUlPJ10KKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvZGlza3N0YXRzIiwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIHggaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBkZXYgaW4geDoKKyAgICAgICAgICAgICAgICAgICAgZGlza3N0YXRzX3ZhbCA9IHgucnN0cmlwKCkuc3BsaXQoKVs0Ol0KKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICByZXR1cm4KKyAgICBkaXNrc3RhdHMgPSBkaWN0KGl0ZXJ0b29scy5pemlwKERTVEFUX0tFWVMsIGRpc2tzdGF0c192YWwpKQorICAgIHJldHVybiBkaXNrc3RhdHMKKworZGVmIHNldF9kaXNrZGF0YSh2YXIsIGRldiwgZGF0YSk6CisgICAgZGF0YS5zZXRWYXIodmFyLCBnZXRfZGlza3N0YXRzKGRldikpCisKK2RlZiBnZXRfZGlza2RhdGEodmFyLCBkZXYsIGRhdGEpOgorICAgIG9sZGRpc2tkYXRhID0gZGF0YS5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICBkaXNrZGF0YSA9IHt9CisgICAgaWYgb2xkZGlza2RhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgbmV3ZGlza2RhdGEgPSBnZXRfZGlza3N0YXRzKGRldikKKyAgICBmb3Iga2V5IGluIG9sZGRpc2tkYXRhLml0ZXJrZXlzKCk6CisgICAgICAgIGRpc2tkYXRhWyJTdGFydCIra2V5XSA9IHN0cihpbnQob2xkZGlza2RhdGFba2V5XSkpCisgICAgICAgIGRpc2tkYXRhWyJFbmQiK2tleV0gPSBzdHIoaW50KG5ld2Rpc2tkYXRhW2tleV0pKQorICAgIHJldHVybiBkaXNrZGF0YQorCitkZWYgc2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICBpZiBzZXJ2ZXJfdGltZToKKyAgICAgICAgdGltZSA9IHNlcnZlcl90aW1lCisgICAgZWxzZToKKyAgICAgICAgdGltZSA9IHRpbWUudGltZSgpCisgICAgY3B1dGltZSA9IGdldF9jcHV0aW1lKCkKKyAgICBwcm9jdGltZSA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpCisgICAgZGF0YS5zZXRWYXIodmFyLCAodGltZSwgY3B1dGltZSwgcHJvY3RpbWUpKQorCitkZWYgZ2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICB0aW1lZGF0YSA9IGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpCisgICAgaWYgdGltZWRhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgb2xkdGltZSwgb2xkY3B1LCBvbGRwcm9jID0gdGltZWRhdGEKKyAgICBwcm9jZGlmZiA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpIC0gb2xkcHJvYworICAgIGNwdWRpZmYgPSBnZXRfY3B1dGltZSgpIC0gb2xkY3B1CisgICAgaWYgc2VydmVyX3RpbWU6CisgICAgICAgIGVuZF90aW1lID0gc2VydmVyX3RpbWUKKyAgICBlbHNlOgorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCisgICAgdGltZWRpZmYgPSBlbmRfdGltZSAtIG9sZHRpbWUKKyAgICBpZiBjcHVkaWZmID4gMDoKKyAgICAgICAgY3B1cGVyYyA9IGZsb2F0KHByb2NkaWZmKSAqIDEwMCAvIGNwdWRpZmYKKyAgICBlbHNlOgorICAgICAgICBjcHVwZXJjID0gTm9uZQorICAgIHJldHVybiB0aW1lZGlmZiwgY3B1cGVyYworCitkZWYgd3JpdGVfdGFza19kYXRhKHN0YXR1cywgbG9nZmlsZSwgZGV2LCBlKToKKyAgICBibiA9IGdldF9ibihlKQorICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGxvZ2ZpbGUpLCAiYSIpIGFzIGY6CisgICAgICAgIHRpbWVkYXRhID0gZ2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgaWYgdGltZWRhdGE6CisgICAgICAgICAgICBlbGFwc2VkdGltZSwgY3B1ID0gdGltZWRhdGEKKyAgICAgICAgICAgIGYud3JpdGUoYmIuZGF0YS5leHBhbmQoIiR7UEZ9OiAlczogRWxhcHNlZCB0aW1lOiAlMC4yZiBzZWNvbmRzIFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS50YXNrLCBlbGFwc2VkdGltZSksIGUuZGF0YSkpCisgICAgICAgICAgICBpZiBjcHU6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIEhlcmUgd2UgZ2F0aGVyIHVwIGRpc2sgZGF0YS4gSW4gYW4gZWZmb3J0IHRvIGF2b2lkIGx5aW5nIHdpdGggc3RhdHMKKyAgICAgICAgIyBJIGRvIGEgYmFyZSBtaW5pbXVtIG9mIGFuYWx5c2lzIG9mIGNvbGxlY3RlZCBkYXRhLgorICAgICAgICAjIFRoZSBzaW1wbGUgZmFjdCBpcywgZG9pbmcgZGlzayBpbyBjb2xsZWN0aW9uIG9uIGEgcGVyIHByb2Nlc3MgYmFzaXMKKyAgICAgICAgIyB3aXRob3V0IGVmZmVjdGluZyBidWlsZCB0aW1lIHdvdWxkIGJlIGRpZmZpY3VsdC4KKyAgICAgICAgIyBGb3IgdGhlIGJlc3QgaW5mb3JtYXRpb24sIHJ1bm5pbmcgdGhpbmdzIHdpdGggQkJfVE9UQUxfVEhSRUFEUyA9ICIxIgorICAgICAgICAjIHdvdWxkIHJldHVybiBhY2N1cmF0ZSBwZXIgdGFzayByZXN1bHRzLgorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGlmIGRldiAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIGRpc2tkYXRhID0gZ2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXYsIGUuZGF0YSkKKyAgICAgICAgICAgIGlmIGRpc2tkYXRhOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tkYXRhLml0ZXJrZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGtleSArICI6ICIgKyBkaXNrZGF0YVtrZXldICsgIlxuIikKKyAgICAgICAgaWYgc3RhdHVzIGlzICJwYXNzZWQiOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBQQVNTRUQgXG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBGQUlMRUQgXG4iKQorICAgICAgICBmLndyaXRlKCJFbmRlZDogJTAuMmYgXG4iICUgZS50aW1lKQorCitweXRob24gcnVuX2J1aWxkc3RhdHMgKCkgeworICAgIGltcG9ydCBiYi5idWlsZAorICAgIGltcG9ydCBiYi5ldmVudAorICAgIGltcG9ydCBiYi5kYXRhCisgICAgaW1wb3J0IHRpbWUsIHN1YnByb2Nlc3MsIHBsYXRmb3JtCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIGF0IGZpcnN0IHBhc3MgbWFrZSB0aGUgYnVpbGRzdGF0cyBoZXJpYXJjaHkgYW5kIHRoZW4KKyAgICAgICAgIyBzZXQgdGhlIGJ1aWxkbmFtZQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpKQorICAgICAgICBzZXRfYm4oZSkKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgc2V0X2RldmljZShlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYnNkaXIpCisgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIHNldF9kaXNrZGF0YSgiX19kaXNrZGF0YV9idWlsZCIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICBzZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgIGJ1aWxkX3RpbWUgPSBvcy5wYXRoLmpvaW4oYnNkaXIsICJidWlsZF9zdGF0cyIpCisgICAgICAgICMgd3JpdGUgc3RhcnQgb2YgYnVpbGQgaW50byBidWlsZF90aW1lCisgICAgICAgIHdpdGggb3BlbihidWlsZF90aW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBob3N0X2luZm8gPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICBmLndyaXRlKCJIb3N0IEluZm86ICIpCisgICAgICAgICAgICBmb3IgeCBpbiBob3N0X2luZm86CisgICAgICAgICAgICAgICAgaWYgeDoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSh4ICsgIiAiKQorICAgICAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICAgICAgZi53cml0ZSgiQnVpbGQgU3RhcnRlZDogJTAuMmYgXG4iICUgdGltZS50aW1lKCkpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgYnVpbGRfdGltZSA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3RpbWUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgIyBXcml0ZSBidWlsZCBzdGF0aXN0aWNzIGZvciB0aGUgYnVpbGQKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgdGltZWRhdGEgPSBnZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgICAgICBpZiB0aW1lZGF0YToKKyAgICAgICAgICAgICAgICB0aW1lLCBjcHUgPSB0aW1lZGF0YQorICAgICAgICAgICAgICAgICMgd3JpdGUgZW5kIG9mIGJ1aWxkIGFuZCBjcHUgdXNlZCBpbnRvIGJ1aWxkX3RpbWUKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJFbGFwc2VkIHRpbWU6ICUwLjJmIHNlY29uZHMgXG4iICUgKHRpbWUpKQorICAgICAgICAgICAgICAgIGlmIGNwdToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgICAgICBkaXNraW8gPSBnZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfYnVpbGQiLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBkaXNraW86CisgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tpby5pdGVya2V5cygpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIGRpc2tpb1trZXldICsgIlxuIikKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N0YXJ0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmdldFZhcignUEYnLCBUcnVlKSkKKyAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgc2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgc2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRhc2tkaXIpCisgICAgICAgICMgd3JpdGUgaW50byB0aGUgdGFzayBldmVudCBmaWxlIHRoZSBuYW1lIGFuZCBzdGFydCB0aW1lCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiRXZlbnQ6ICVzIFxuIiAlIGJiLmV2ZW50LmdldE5hbWUoZSkpCisgICAgICAgICAgICBmLndyaXRlKCJTdGFydGVkOiAlMC4yZiBcbiIgJSBlLnRpbWUpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgICAgICB3cml0ZV90YXNrX2RhdGEoInBhc3NlZCIsIG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2spLCBkZXZpY2UsIGUpCisgICAgICAgIGlmIGUudGFzayA9PSAiZG9fcm9vdGZzIjoKKyAgICAgICAgICAgIGJzID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGJzLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgcm9vdGZzID0gZS5kYXRhLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICByb290ZnNfc2l6ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWyJkdSIsICItc2giLCByb290ZnNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiVW5jb21wcmVzc2VkIFJvb3RmcyBzaXplOiAlcyIgJSByb290ZnNfc2l6ZSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQorICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgICAgIHdyaXRlX3Rhc2tfZGF0YSgiZmFpbGVkIiwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGRldmljZSwgZSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgTGV0cyBtYWtlIHRoaW5ncyBlYXNpZXIgYW5kIHRlbGwgcGVvcGxlIHdoZXJlIHRoZSBidWlsZCBmYWlsZWQgaW4KKyAgICAgICAgIyBidWlsZF9zdGF0dXMuIFdlIGRvIHRoaXMgaGVyZSBiZWNhdXNlIEJ1aWxkQ29tcGxldGVkIHRyaWdnZXJzIG5vCisgICAgICAgICMgbWF0dGVyIHdoYXQgdGhlIHN0YXR1cyBvZiB0aGUgYnVpbGQgYWN0dWFsbHkgaXMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGJ1aWxkX3N0YXR1cyA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3N0YXR1cywgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShlLmRhdGEuZXhwYW5kKCJGYWlsZWQgYXQ6ICR7UEZ9IGF0IHRhc2s6ICVzIFxuIiAlIGUudGFzaykpCit9CisKK2FkZGhhbmRsZXIgcnVuX2J1aWxkc3RhdHMKK3J1bl9idWlsZHN0YXRzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tTdGFydGVkIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RjZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitDQ0FDSEUgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgJ2NjYWNoZScpIGFuZCAnY2NhY2hlICd9IgorZXhwb3J0IENDQUNIRV9ESVIgPz0gIiR7VE1QRElSfS9jY2FjaGUvJHtNVUxUSU1BQ0hfSE9TVF9TWVN9LyR7UE59IgorQ0NBQ0hFX0RJU0FCTEVbdW5leHBvcnRdID0gIjEiCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKK2RvX2tlcm5lbF9jb25maWdtZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKKworZG9fY2xlYW5bY2xlYW5kaXJzXSArPSAiJHtDQ0FDSEVfRElSfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE2MGFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2hycGF0aC5iYmNsYXNzCkBAIC0wLDAgKzEsMTE3IEBACitDSFJQQVRIX0JJTiA/PSAiY2hycGF0aCIKK1BSRVBST0NFU1NfUkVMT0NBVEVfRElSUyA/PSAiIgorCitkZWYgcHJvY2Vzc19maWxlX2xpbnV4KGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBwID0gc3ViLlBvcGVuKFtjbWQsICctbCcsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICBpZiBwLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEhhbmRsZSBSVU5QQVRIIGFzIHdlbGwgYXMgUlBBVEgKKyAgICBlcnIgPSBlcnIucmVwbGFjZSgiUlVOUEFUSD0iLCJSUEFUSD0iKQorICAgICMgVGhyb3cgYXdheSBldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIHJwYXRoIGxpc3QKKyAgICBjdXJyX3JwYXRoID0gZXJyLnBhcnRpdGlvbigiUlBBVEg9IilbMl0KKyAgICAjYmIubm90ZSgiQ3VycmVudCBycGF0aCBmb3IgJXMgaXMgJXMiICUgKGZwYXRoLCBjdXJyX3JwYXRoLnN0cmlwKCkpKQorICAgIHJwYXRocyA9IGN1cnJfcnBhdGguc3BsaXQoIjoiKQorICAgIG5ld19ycGF0aHMgPSBbXQorICAgIG1vZGlmaWVkID0gRmFsc2UKKyAgICBmb3IgcnBhdGggaW4gcnBhdGhzOgorICAgICAgICAjIElmIHJwYXRoIGlzIGFscmVhZHkgZHluYW1pYyBjb3B5IGl0IHRvIG5ld19ycGF0aCBhbmQgY29udGludWUKKyAgICAgICAgaWYgcnBhdGguZmluZCgiJE9SSUdJTiIpICE9IC0xOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJwYXRoID0gIG9zLnBhdGgubm9ybXBhdGgocnBhdGgpCisgICAgICAgIGlmIGJhc2VwcmVmaXggbm90IGluIHJwYXRoIGFuZCB0bXBkaXIgbm90IGluIHJwYXRoOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG5ld19ycGF0aHMuYXBwZW5kKCIkT1JJR0lOLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGguc3RyaXAoKSwgb3MucGF0aC5kaXJuYW1lKGZwYXRoLnJlcGxhY2Uocm9vdGRpciwgIi8iKSkpKQorICAgICAgICBtb2RpZmllZCA9IFRydWUKKworICAgICMgaWYgd2UgaGF2ZSBtb2RpZmllZCBzb21lIHJwYXRocyBjYWxsIGNocnBhdGggdG8gdXBkYXRlIHRoZSBiaW5hcnkKKyAgICBpZiBtb2RpZmllZDoKKyAgICAgICAgYXJncyA9ICI6Ii5qb2luKG5ld19ycGF0aHMpCisgICAgICAgICNiYi5ub3RlKCJTZXR0aW5nIHJwYXRoIGZvciAlcyB0byAlcyIgJShmcGF0aCwgYXJncykpCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1yJywgYXJncywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgYmIuZXJyb3IoIiVzOiBjaHJwYXRoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkOlxuJXMlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHAucmV0dXJuY29kZSwgb3V0LCBlcnIpKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZAorCitkZWYgcHJvY2Vzc19maWxlX2RhcndpbihjbWQsIGZwYXRoLCByb290ZGlyLCBiYXNlcHJlZml4LCB0bXBkaXIsIGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorCisgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1MJywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgIGlmICIoY29tcGF0aWJpbGl0eSIgbm90IGluIGw6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBycGF0aCA9IGwucGFydGl0aW9uKCIoY29tcGF0aWJpbGl0eSIpWzBdLnN0cmlwKCkKKyAgICAgICAgaWYgYmFzZXByZWZpeCBub3QgaW4gcnBhdGg6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5ld3BhdGggPSAiQGxvYWRlcl9wYXRoLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGgsIG9zLnBhdGguZGlybmFtZShmcGF0aC5yZXBsYWNlKHJvb3RkaXIsICIvIikpKQorICAgICAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1pbnN0YWxsX25hbWVfdG9vbCIpLCAnLWNoYW5nZScsIHJwYXRoLCBuZXdwYXRoLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKworZGVmIHByb2Nlc3NfZGlyIChyb290ZGlyLCBkaXJlY3RvcnksIGQpOgorICAgIGltcG9ydCBzdGF0CisKKyAgICByb290ZGlyID0gb3MucGF0aC5ub3JtcGF0aChyb290ZGlyKQorICAgIGNtZCA9IGQuZXhwYW5kKCcke0NIUlBBVEhfQklOfScpCisgICAgdG1wZGlyID0gb3MucGF0aC5ub3JtcGF0aChkLmdldFZhcignVE1QRElSJywgRmFsc2UpKQorICAgIGJhc2VwcmVmaXggPSBvcy5wYXRoLm5vcm1wYXRoKGQuZXhwYW5kKCcke2Jhc2VfcHJlZml4fScpKQorICAgIGhvc3RvcyA9IGQuZ2V0VmFyKCJIT1NUX09TIiwgVHJ1ZSkKKworICAgICNiYi5kZWJ1ZygiQ2hlY2tpbmcgJXMgZm9yIGJpbmFyaWVzIHRvIHByb2Nlc3MiICUgZGlyZWN0b3J5KQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgorICAgICAgICByZXR1cm4KKworICAgIGlmICJsaW51eCIgaW4gaG9zdG9zOgorICAgICAgICBwcm9jZXNzX2ZpbGUgPSBwcm9jZXNzX2ZpbGVfbGludXgKKyAgICBlbGlmICJkYXJ3aW4iIGluIGhvc3RvczoKKyAgICAgICAgcHJvY2Vzc19maWxlID0gcHJvY2Vzc19maWxlX2RhcndpbgorICAgIGVsc2U6CisgICAgICAgICMgUmVsb2NhdGlvbnMgbm90IHN1cHBvcnRlZAorICAgICAgICByZXR1cm4KKworICAgIGRpcnMgPSBvcy5saXN0ZGlyKGRpcmVjdG9yeSkKKyAgICBmb3IgZmlsZSBpbiBkaXJzOgorICAgICAgICBmcGF0aCA9IGRpcmVjdG9yeSArICIvIiArIGZpbGUKKyAgICAgICAgZnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZwYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmcGF0aCk6CisgICAgICAgICAgICAjIFNraXAgc3ltbGlua3MKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcGF0aCk6CisgICAgICAgICAgICBwcm9jZXNzX2Rpcihyb290ZGlyLCBmcGF0aCwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNiYi5ub3RlKCJUZXN0aW5nICVzIGZvciByZWxvY2F0YWJpbGl0eSIgJSBmcGF0aCkKKworICAgICAgICAgICAgIyBXZSBuZWVkIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciBjaHJwYXRoLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAjIHRoZW0gdGhlbiBzZXQgdGhlbSB0ZW1wb3JhcmlseS4gVGFrZSBhIGNvcHkgb2YgdGhlIGZpbGVzCisgICAgICAgICAgICAjIHBlcm1pc3Npb25zIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUgdGhlbSBhZnRlcndhcmRzLgorICAgICAgICAgICAgcGVybXMgPSBvcy5zdGF0KGZwYXRoKVtzdGF0LlNUX01PREVdCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZnBhdGgsIG9zLldfT0t8b3MuUl9PSyk6CisgICAgICAgICAgICAgICAgcGVybXMgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGVtcG9yYXJpbHkgbWFrZSB0aGUgZmlsZSB3cml0ZWFibGUgc28gd2UgY2FuIGNocnBhdGggaXQKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChmcGF0aCwgcGVybXN8c3RhdC5TX0lSV1hVKQorICAgICAgICAgICAgcHJvY2Vzc19maWxlKGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHBlcm1zOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBwZXJtcykKKworZGVmIHJwYXRoX3JlcGxhY2UgKHBhdGgsIGQpOgorICAgIGJpbmRpcnMgPSBkLmV4cGFuZCgiJHtiaW5kaXJ9ICR7c2JpbmRpcn0gJHtiYXNlX3NiaW5kaXJ9ICR7YmFzZV9iaW5kaXJ9ICR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSAke2xpYmV4ZWNkaXJ9ICR7UFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTfSIpLnNwbGl0KCkKKworICAgIGZvciBiaW5kaXIgaW4gYmluZGlyczoKKyAgICAgICAgI2JiLm5vdGUgKCJQcm9jZXNzaW5nIGRpcmVjdG9yeSAiICsgYmluZGlyKQorICAgICAgICBkaXJlY3RvcnkgPSBwYXRoICsgIi8iICsgYmluZGlyCisgICAgICAgIHByb2Nlc3NfZGlyIChwYXRoLCBkaXJlY3RvcnksIGQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc0MDdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY2x1dHRlci5iYmNsYXNzCkBAIC0wLDAgKzEsMjIgQEAKKworZGVmIGdldF9taW5vcl9kaXIodik6CisgICAgaW1wb3J0IHJlCisgICAgbSA9IHJlLm1hdGNoKCJeKFswLTldKylcLihbMC05XSspIiwgdikKKyAgICByZXR1cm4gIiVzLiVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQorCitkZWYgZ2V0X3JlYWxfbmFtZShuKToKKyAgICBpbXBvcnQgcmUKKyAgICBtID0gcmUubWF0Y2goIl4oW2Etel0rKC1bYS16XSspPykoLVswLTldK1wuWzAtOV0rKT8iLCBuKQorICAgIHJldHVybiAiJXMiICUgKG0uZ3JvdXAoMSkpCisKK1ZFUk1JTk9SID0gIiR7QGdldF9taW5vcl9kaXIoIiR7UFZ9Iil9IgorUkVBTE5BTUUgPSAiJHtAZ2V0X3JlYWxfbmFtZSgiJHtCUE59Iil9IgorCitDTFVUVEVSX1NSQ19GVFAgPSAiJHtHTk9NRV9NSVJST1J9LyR7UkVBTE5BTUV9LyR7VkVSTUlOT1J9LyR7UkVBTE5BTUV9LSR7UFZ9LnRhci54ejtuYW1lPWFyY2hpdmUiCisKK0NMVVRURVJfU1JDX0dJVCA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7UkVBTE5BTUV9IgorCitTUkNfVVJJID0gIiR7Q0xVVFRFUl9TUkNfRlRQfSIKK1MgPSAiJHtXT1JLRElSfS8ke1JFQUxOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgZ2V0dGV4dApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzY2MwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKQEAgLTAsMCArMSwxMzggQEAKKyMgUGF0aCB0byB0aGUgQ01ha2UgZmlsZSB0byBwcm9jZXNzLgorT0VDTUFLRV9TT1VSQ0VQQVRIID89ICIke1N9IgorCitERVBFTkRTX3ByZXBlbmQgPSAiY21ha2UtbmF0aXZlICIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKKworIyBXZSBuZWVkIHRvIHVuc2V0IENDQUNIRSBvdGhlcndpc2UgY21ha2UgZ2V0cyB0b28gY29uZnVzZWQKK0NDQUNIRSA9ICIiCisKKyMgV2Ugd2FudCB0aGUgc3RhZ2luZyBhbmQgaW5zdGFsbGluZyBmdW5jdGlvbnMgZnJvbSBhdXRvdG9vbHMKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgQy9DKysgQ29tcGlsZXIgKHdpdGhvdXQgY3B1IGFyY2gvdHVuZSBhcmd1bWVudHMpCitPRUNNQUtFX0NfQ09NUElMRVIgPz0gImBlY2hvICR7Q0N9IHwgc2VkICdzL15cKFteIF0qXCkuKi9cMS8nYCIKK09FQ01BS0VfQ1hYX0NPTVBJTEVSID89ICJgZWNobyAke0NYWH0gfCBzZWQgJ3MvXlwoW14gXSpcKS4qL1wxLydgIgorT0VDTUFLRV9BUiA/PSAiJHtBUn0iCisKKyMgQ29tcGlsZXIgZmxhZ3MKK09FQ01BS0VfQ19GTEFHUyA/PSAiJHtIT1NUX0NDX0FSQ0h9ICR7VE9PTENIQUlOX09QVElPTlN9ICR7Q0ZMQUdTfSIKK09FQ01BS0VfQ1hYX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDWFhGTEFHU30iCitPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRSA/PSAiJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059ICR7Q0ZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0UgPz0gIiR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSAke0NYWEZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ19MSU5LX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDUFBGTEFHU30gJHtMREZMQUdTfSIKK09FQ01BS0VfQ1hYX0xJTktfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NYWEZMQUdTfSAke0xERkxBR1N9IgorCitPRUNNQUtFX1JQQVRIID89ICIiCitPRUNNQUtFX1BFUkxOQVRJVkVfRElSID8/PSAiIgorT0VDTUFLRV9FWFRSQV9ST09UX1BBVEggPz0gIiIKKworT0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gPSAiT05MWSIKK09FQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNX2NsYXNzLW5hdGl2ZSA9ICJCT1RIIgorCisjIENNYWtlIGV4cGVjdHMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMgaW4gdGhlIGZvcm1hdCBvZiB1bmFtZSgyKSwKKyMgd2hpY2ggZG8gbm90IGFsd2F5cyBtYXRjaCBUQVJHRVRfQVJDSCwgc28gYWxsIHRoZSBuZWNlc3NhcnkKKyMgY29udmVyc2lvbnMgc2hvdWxkIGhhcHBlbiBoZXJlLgorZGVmIG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKHRhcmdldF9hcmNoKToKKyAgICBpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgIHJldHVybiAicHBjIgorICAgIGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICByZXR1cm4gInBwYzY0IgorICAgIHJldHVybiB0YXJnZXRfYXJjaAorCitjbWFrZV9kb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZSgpIHsKKwljYXQgPiAke1dPUktESVJ9L3Rvb2xjaGFpbi5jbWFrZSA8PEVPRgorIyBDTWFrZSBzeXN0ZW0gbmFtZSBtdXN0IGJlIHNvbWV0aGluZyBsaWtlICJMaW51eCIuCisjIFRoaXMgaXMgaW1wb3J0YW50IGZvciBjcm9zcy1jb21waWxpbmcuCitzZXQoIENNQUtFX1NZU1RFTV9OQU1FIGBlY2hvICR7VEFSR0VUX09TfSB8IHNlZCAtZSAncy9eLi9cdSYvJyAtZSAncy9eXChMaW51eFwpLiovXDEvJ2AgKQorc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICR7QG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpKX0gKQorc2V0KCBDTUFLRV9DX0NPTVBJTEVSICR7T0VDTUFLRV9DX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAke09FQ01BS0VfQ1hYX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0FTTV9DT01QSUxFUiAke09FQ01BS0VfQ19DT01QSUxFUn0gKQorc2V0KCBDTUFLRV9BUiAke09FQ01BS0VfQVJ9IENBQ0hFIEZJTEVQQVRIICJBcmNoaXZlciIgKQorc2V0KCBDTUFLRV9DX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9GTEFHUyAiJHtPRUNNQUtFX0NYWF9GTEFHU30iIENBQ0hFIFNUUklORyAiQ1hYRkxBR1MiICkKK3NldCggQ01BS0VfQVNNX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQVNNIEZMQUdTIiApCitzZXQoIENNQUtFX0NfRkxBR1NfUkVMRUFTRSAiJHtPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRX0iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0NYWF9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0V9IiBDQUNIRSBTVFJJTkcgIkNYWEZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0FTTV9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ19GTEFHU19SRUxFQVNFfSIgQ0FDSEUgU1RSSU5HICJBU00gRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQ19MSU5LX0ZMQUdTICIke09FQ01BS0VfQ19MSU5LX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJMREZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9MSU5LX0ZMQUdTICIke09FQ01BS0VfQ1hYX0xJTktfRkxBR1N9IiBDQUNIRSBTVFJJTkcgIkxERkxBR1MiICkKKworIyBvbmx5IHNlYXJjaCBpbiB0aGUgcGF0aHMgcHJvdmlkZWQgc28gY21ha2UgZG9lc250IHBpY2sKKyMgdXAgbGlicmFyaWVzIGFuZCB0b29scyBmcm9tIHRoZSBuYXRpdmUgYnVpbGQgbWFjaGluZQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAke1NUQUdJTkdfRElSX0hPU1R9ICR7U1RBR0lOR19ESVJfTkFUSVZFfSAke0NST1NTX0RJUn0gJHtPRUNNQUtFX1BFUkxOQVRJVkVfRElSfSAke09FQ01BS0VfRVhUUkFfUk9PVF9QQVRIfSAke0VYVEVSTkFMX1RPT0xDSEFJTn0pCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUEFDS0FHRSBPTkxZICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNICR7T0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU19ICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCisKKyMgVXNlIHF0LmNvbmYgc2V0dGluZ3MKK3NldCggRU5We1FUX0NPTkZfUEFUSH0gJHtXT1JLRElSfS9xdC5jb25mICkKKworIyBXZSBuZWVkIHRvIHNldCB0aGUgcnBhdGggdG8gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IGFzIGNtYWtlIGRvZXMgbm90IHByb3ZpZGUgYW55CisjIGRpcmVjdG9yeSBhcyBycGF0aCBieSBkZWZhdWx0CitzZXQoIENNQUtFX0lOU1RBTExfUlBBVEggJHtPRUNNQUtFX1JQQVRIfSApCisKKyMgVXNlIG5hdGl2ZSBjbWFrZSBtb2R1bGVzCitsaXN0KEFQUEVORCBDTUFLRV9NT0RVTEVfUEFUSCAiJHtTVEFHSU5HX0RBVEFESVJ9L2NtYWtlL01vZHVsZXMvIikKKworIyBhZGQgZm9yIG5vbiAvdXNyL2xpYiBsaWJkaXIsIGUuZy4gL3Vzci9saWI2NAorc2V0KCBDTUFLRV9MSUJSQVJZX1BBVEggJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9KQorCitFT0YKK30KKworYWRkdGFzayBnZW5lcmF0ZV90b29sY2hhaW5fZmlsZSBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2NtYWtlX2RvX2NvbmZpZ3VyZSgpIHsKKwlpZiBbICIke09FQ01BS0VfQlVJTERQQVRIfSIgXTsgdGhlbgorCQliYm5vdGUgImNtYWtlLmJiY2xhc3Mgbm8gbG9uZ2VyIHVzZXMgT0VDTUFLRV9CVUlMRFBBVEguICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm93IG91dC1vZi10cmVlIGJ1aWxkcyB3aXRoIEI9V09SS0RJUi9idWlsZC4iCisJZmkKKworCWlmIFsgIiR7U30iICE9ICIke0J9IiBdOyB0aGVuCisJCXJtIC1yZiAke0J9CisJCW1rZGlyIC1wICR7Qn0KKwkJY2QgJHtCfQorCWVsc2UKKwkJZmluZCAke0J9IC1uYW1lIENNYWtlRmlsZXMgLW9yIC1uYW1lIE1ha2VmaWxlIC1vciAtbmFtZSBjbWFrZV9pbnN0YWxsLmNtYWtlIC1vciAtbmFtZSBDTWFrZUNhY2hlLnR4dCAtZGVsZXRlCisJZmkKKworCSMgSnVzdCBsaWtlIGF1dG90b29scyBjbWFrZSBjYW4gdXNlIGEgc2l0ZSBmaWxlIHRvIGNhY2hlIHJlc3VsdCB0aGF0IG5lZWQgZ2VuZXJhdGVkIGJpbmFyaWVzIHRvIHJ1bgorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlLWZpbGUuY21ha2UgXSA7IHRoZW4KKwkJT0VDTUFLRV9TSVRFRklMRT0iIC1DICR7V09SS0RJUn0vc2l0ZS1maWxlLmNtYWtlIgorCWVsc2UKKwkJT0VDTUFLRV9TSVRFRklMRT0iIgorCWZpCisKKwljbWFrZSBcCisJICAke09FQ01BS0VfU0lURUZJTEV9IFwKKwkgICR7T0VDTUFLRV9TT1VSQ0VQQVRIfSBcCisJICAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9JHtwcmVmaXh9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9CSU5ESVI6UEFUSD0ke2JpbmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NCSU5ESVI6UEFUSD0ke3NiaW5kaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJFWEVDRElSOlBBVEg9JHtsaWJleGVjZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU1lTQ09ORkRJUjpQQVRIPSR7c3lzY29uZmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NIQVJFRFNUQVRFRElSOlBBVEg9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xPQ0FMU1RBVEVESVI6UEFUSD0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJESVI6UEFUSD0ke2xpYmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVI6UEFUSD0ke2luY2x1ZGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUjpQQVRIPSR7ZGF0YWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NPX05PX0VYRT0wIFwKKwkgIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9JHtXT1JLRElSfS90b29sY2hhaW4uY21ha2UgXAorCSAgLURDTUFLRV9WRVJCT1NFX01BS0VGSUxFPTEgXAorCSAgJHtFWFRSQV9PRUNNQUtFfSBcCisJICAtV25vLWRldgorfQorCitjbWFrZV9kb19jb21waWxlKCkgIHsKKwljZCAke0J9CisJYmFzZV9kb19jb21waWxlCit9CisKK2NtYWtlX2RvX2luc3RhbGwoKSB7CisJY2QgJHtCfQorCWF1dG90b29sc19kb19pbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2Y1ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKQEAgLTAsMCArMSw3NSBAQAorY21sMV9kb19jb25maWd1cmUoKSB7CisJc2V0IC1lCisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIG9sZGNvbmZpZworfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZQorYWRkdGFzayBjb25maWd1cmUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCisKK2luaGVyaXQgdGVybWluYWwKKworT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAiSE9TVF9FWFRSQUNGTEFHUyBIT1NUTERGTEFHUyBURVJNSU5GTyBDUk9TU19DVVJTRVNfTElCIENST1NTX0NVUlNFU19JTkMiCitIT1NUX0VYVFJBQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IgorSE9TVExERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0NST1NTX0NVUlNFU19MSUIgPSAiLWxuY3Vyc2VzIC1sdGluZm8iCitDUk9TU19DVVJTRVNfSU5DID0gJy1EQ1VSU0VTX0xPQz0iPGN1cnNlcy5oPiInCitURVJNSU5GTyA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3Rlcm1pbmZvIgorCitLQ09ORklHX0NPTkZJR19DT01NQU5EID8/PSAibWVudWNvbmZpZyIKK3B5dGhvbiBkb19tZW51Y29uZmlnKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIHRyeToKKyAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgc2h1dGlsLmNvcHkoIi5jb25maWciLCAiLmNvbmZpZy5vcmlnIikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbXRpbWUgPSAwCisKKyAgICBvZV90ZXJtaW5hbCgiJHtTSEVMTH0gLWMgXCJtYWtlICR7S0NPTkZJR19DT05GSUdfQ09NTUFORH07IGlmIFsgXCQ/IC1uZSAwIF07IHRoZW4gZWNobyAnQ29tbWFuZCBmYWlsZWQuJzsgcHJpbnRmICdQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uICc7IHJlYWQgcjsgZmlcIiIsICcke1BOfSBDb25maWd1cmF0aW9uJywgZCkKKworICAgICMgRklYTUUgdGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBtaW5pbXVtIGJpdGJha2UgdmVyc2lvbiBoYXMgYmVlbiBidW1wZWQKKyAgICBpZiBoYXNhdHRyKGJiLmJ1aWxkLCAnd3JpdGVfdGFpbnQnKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV3bXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBuZXdtdGltZSA9IDAKKworICAgICAgICBpZiBuZXdtdGltZSA+IG10aW1lOgorICAgICAgICAgICAgYmIubm90ZSgiQ29uZmlndXJhdGlvbiBjaGFuZ2VkLCByZWNvbXBpbGUgd2lsbCBiZSBmb3JjZWQiKQorICAgICAgICAgICAgYmIuYnVpbGQud3JpdGVfdGFpbnQoJ2RvX2NvbXBpbGUnLCBkKQorfQorZG9fbWVudWNvbmZpZ1tkZXBlbmRzXSArPSAibmN1cnNlcy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX21lbnVjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgbWVudWNvbmZpZyBhZnRlciBkb19jb25maWd1cmUKKworcHl0aG9uIGRvX2RpZmZjb25maWcoKSB7CisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGZyYWdtZW50ID0gd29ya2RpciArICcvZnJhZ21lbnQuY2ZnJworICAgIGNvbmZpZ29yaWcgPSAnLmNvbmZpZy5vcmlnJworICAgIGNvbmZpZyA9ICcuY29uZmlnJworCisgICAgdHJ5OgorICAgICAgICBtZDVuZXdjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWdvcmlnKQorICAgICAgICBtZDVjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWcpCisgICAgICAgIGlzZGlmZiA9IG1kNW5ld2NvbmZpZyAhPSBtZDVjb25maWcKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiTm8gY29uZmlnIGZpbGVzIGZvdW5kLiBEaWQgeW91IGRvIG1lbnVjb25maWcgP1xuJXMiICUgZSkKKworICAgIGlmIGlzZGlmZjoKKyAgICAgICAgc3RhdGVtZW50ID0gJ2RpZmYgLS11bmNoYW5nZWQtbGluZS1mb3JtYXQ9IC0tb2xkLWxpbmUtZm9ybWF0PSAtLW5ldy1saW5lLWZvcm1hdD0iJUwiICcgKyBjb25maWdvcmlnICsgJyAnICsgY29uZmlnICsgJz4nICsgZnJhZ21lbnQKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weShjb25maWdvcmlnLCBjb25maWcpCisKKyAgICAgICAgYmIucGxhaW4oIkNvbmZpZyBmcmFnbWVudCBoYXMgYmVlbiBkdW1wZWQgaW50bzpcbiAlcyIgJSBmcmFnbWVudCkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmcmFnbWVudCk6CisgICAgICAgICAgICBvcy51bmxpbmsoZnJhZ21lbnQpCit9CisKK2RvX2RpZmZjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgZGlmZmNvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb21wcmVzc19kb2MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNjAgQEAKKyMgQ29tcHJlc3MgbWFuIHBhZ2VzIGluICR7bWFuZGlyfSBhbmQgaW5mbyBwYWdlcyBpbiAke2luZm9kaXJ9CisjCisjIDEuIFRoZSBkb2Mgd2lsbCBiZSBjb21wcmVzc2VkIHRvIGd6IGZvcm1hdCBieSBkZWZhdWx0LgorIworIyAyLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgY29ycmVjdCB0aGUgY29tcHJlc3NlZCBkb2Mgd2hpY2ggaXMgbm90CisjIGluICR7RE9DX0NPTVBSRVNTfSBidXQgaW4gJHtET0NfQ09NUFJFU1NfTElTVH0gdG8gdGhlIGZvcm1hdAorIyBvZiAke0RPQ19DT01QUkVTU30gcG9saWN5CisjCisjIDMuIEl0IGlzIGVhc3kgdG8gYWRkIGEgbmV3IHR5cGUgY29tcHJlc3Npb24gYnkgZWRpdGluZworIyBsb2NhbC5jb25mLCBzdWNoIGFzOgorIyBET0NfQ09NUFJFU1NfTElTVF9hcHBlbmQgPSAnIGFiYycKKyMgRE9DX0NPTVBSRVNTID0gJ2FiYycKKyMgRE9DX0NPTVBSRVNTX0NNRFthYmNdID0gJ2FiYyBjb21wcmVzcyBjbWQgKioqJworIyBET0NfREVDT01QUkVTU19DTURbYWJjXSA9ICdhYmMgZGVjb21wcmVzcyBjbWQgKioqJworCisjIEFsbCBzdXBwb3J0ZWQgY29tcHJlc3Npb24gcG9saWN5CitET0NfQ09NUFJFU1NfTElTVCA/PSAiZ3ogeHogYnoyIgorCisjIENvbXByZXNzaW9uIHBvbGljeSwgbXVzdCBiZSBvbmUgb2YgJHtET0NfQ09NUFJFU1NfTElTVH0KK0RPQ19DT01QUkVTUyA/PSAiZ3oiCisKKyMgQ29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0NPTVBSRVNTX0NNRFtnel0gPz0gJ2d6aXAgLXYgLTkgLW4nCitET0NfQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ6aXAyIC12IC05IgorRE9DX0NPTVBSRVNTX0NNRFt4el0gPz0gInh6IC12IgorCisjIERlY29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0RFQ09NUFJFU1NfQ01EW2d6XSA/PSAnZ3VuemlwIC12JworRE9DX0RFQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ1bnppcDIgLXYiCitET0NfREVDT01QUkVTU19DTURbeHpdID89ICJ1bnh6IC12IgorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInBhY2thZ2VfZG9fY29tcHJlc3NfZG9jIGNvbXByZXNzX2RvY191cGRhdGVhbHRlcm5hdGl2ZXMiCitweXRob24gcGFja2FnZV9kb19jb21wcmVzc19kb2MoKSB7CisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGNvbXByZXNzX2xpc3QgPSAoZC5nZXRWYXIoJ0RPQ19DT01QUkVTU19MSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBpZiBjb21wcmVzc19tb2RlIG5vdCBpbiBjb21wcmVzc19saXN0OgorICAgICAgICBiYi5mYXRhbCgnQ29tcHJlc3Npb24gcG9saWN5ICVzIG5vdCBzdXBwb3J0ZWQgKG5vdCBsaXN0ZWQgaW4gJXMpXG4nICUgKGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2xpc3QpKQorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBjb21wcmVzc19jbWRzID0ge30KKyAgICBkZWNvbXByZXNzX2NtZHMgPSB7fQorICAgIGZvciBtb2RlIGluIGNvbXByZXNzX2xpc3Q6CisgICAgICAgIGNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19DT01QUkVTU19DTUQnLCBtb2RlKQorICAgICAgICBkZWNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19ERUNPTVBSRVNTX0NNRCcsIG1vZGUpCisKKyAgICBtYW5kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5kaXIpOgorICAgICAgICAjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorICAgICAgICBkZWNvbXByZXNzX2RvYyhtYW5kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKG1hbmRpciwgY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfY21kcykKKworICAgIGluZm9kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJpbmZvZGlyIiwgVHJ1ZSkpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5mb2Rpcik6CisgICAgICAgICMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCisgICAgICAgIGRlY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpCit9CisKK2RlZiBfZ2V0X2NvbXByZXNzX2Zvcm1hdChmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgZm9yIGNvbXByZXNzX2Zvcm1hdCBpbiBjb21wcmVzc19mb3JtYXRfbGlzdDoKKyAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoY29tcHJlc3Nfc3VmZml4KToKKyAgICAgICAgICAgIHJldHVybiBjb21wcmVzc19mb3JtYXQKKworICAgIHJldHVybiAnJworCisjIENvbGxlY3QgaGFyZGxpbmtzIHRvIGRpY3QsIGVhY2ggZWxlbWVudCBpbiBkaWN0IGxpc3RzIGhhcmRsaW5rcworIyB3aGljaCBwb2ludHMgdG8gdGhlIHNhbWUgZG9jIGZpbGUuCisjIHtoYXJkbGluazEwOiBbaGFyZGxpbmsxMSwgaGFyZGxpbmsxMl0sLCx9CisjIFRoZSBoYXJkbGluazEwLCBoYXJkbGluazExIGFuZCBoYXJkbGluazEyIGFyZSB0aGUgc2FtZSBmaWxlLgorZGVmIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpOgorICAgIGZvciBoYXJkbGluayBpbiBoYXJkbGlua19kaWN0OgorICAgICAgICAjIEFkZCB0byB0aGUgZXhpc3RlZCBoYXJkbGluaworICAgICAgICBpZiBvcy5wYXRoLnNhbWVmaWxlKGhhcmRsaW5rLCBmaWxlKToKKyAgICAgICAgICAgIGhhcmRsaW5rX2RpY3RbaGFyZGxpbmtdLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgcmV0dXJuIGhhcmRsaW5rX2RpY3QKKworICAgIGhhcmRsaW5rX2RpY3RbZmlsZV0gPSBbXQorICAgIHJldHVybiBoYXJkbGlua19kaWN0CisKK2RlZiBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBzaGVsbF9jbWRzLCBkZWNvbXByZXNzPUZhbHNlKToKKyAgICBmb3IgdGFyZ2V0IGluIGhhcmRsaW5rX2RpY3Q6CisgICAgICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICAgICBjb21wcmVzc19mb3JtYXQgPSBfZ2V0X2NvbXByZXNzX2Zvcm1hdCh0YXJnZXQsIHNoZWxsX2NtZHMua2V5cygpKQorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIHRhcmdldCkKKyAgICAgICAgICAgIGJiLm5vdGUoJ2RlY29tcHJlc3MgaGFyZGxpbmsgJXMnICUgdGFyZ2V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX21vZGVdLCB0YXJnZXQpCisgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBoYXJkbGluayAlcycgJSB0YXJnZXQpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi53YXJuKCJkZS9jb21wcmVzcyBmaWxlIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGhhcmRsaW5rX2R1cCBpbiBoYXJkbGlua19kaWN0W3RhcmdldF06CisgICAgICAgICAgICBpZiBkZWNvbXByZXNzOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICAgICAgICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cFs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXRbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBcHBlbmQgY29tcHJlc3Mgc3VmZml4CisgICAgICAgICAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cCArIGNvbXByZXNzX3N1ZmZpeAorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXQgKyBjb21wcmVzc19zdWZmaXgKKworICAgICAgICAgICAgYmIubm90ZSgnaGFyZGxpbmsgJXMtLT4lcycgJSAobmV3X2hhcmRsaW5rLCBuZXdfdGFyZ2V0KSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfaGFyZGxpbmspOgorICAgICAgICAgICAgICAgIG9zLmxpbmsobmV3X3RhcmdldCwgbmV3X2hhcmRsaW5rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaGFyZGxpbmtfZHVwKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoaGFyZGxpbmtfZHVwKQorCitkZWYgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19mb3JtYXQsIGRlY29tcHJlc3M9RmFsc2UpOgorICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKVs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgIGVsc2U6CisgICAgICAgICMgQXBwZW5kIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlICsgY29tcHJlc3Nfc3VmZml4CisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKSArIGNvbXByZXNzX3N1ZmZpeAorCisgICAgYmIubm90ZSgnc3ltbGluayAlcy0tPiVzJyAlIChuZXdfbGlua25hbWUsIG5ld19zb3VyY2UpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfbGlua25hbWUpOgorICAgICAgICBvcy5zeW1saW5rKG5ld19zb3VyY2UsIG5ld19saW5rbmFtZSkKKworICAgIG9zLnVubGluayhmaWxlKQorCitkZWYgX2lzX2luZm8oZmlsZSk6CisgICAgZmxhZ3MgPSAnLmluZm8gLmluZm8tJy5zcGxpdCgpCisgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisgICAgICAgIGlmIGZsYWcgaW4gb3MucGF0aC5iYXNlbmFtZShmaWxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIF9pc19tYW4oZmlsZSk6CisgICAgaW1wb3J0IHJlCisKKyAgICAjIEl0IHJlZmVycyBNQU5TRUNULXZhciBpbiBtYW4oMS42ZykncyBtYW4uY29uZmlnCisgICAgIyAiLjE6LjFwOi44Oi4yOi4zOi4zcDouNDouNTouNjouNzouOTouMHA6LnRjbDoubjoubDoucDoubyIKKyAgICAjIE5vdCBzdGFydCB3aXRoICcuJywgYW5kIGNvbnRhaW4gdGhlIGFib3ZlIGNvbG9uLXNlcGVyYXRlIGVsZW1lbnQKKyAgICBwID0gcmUuY29tcGlsZShyJ1teXC5dK1wuKFsxLTlsbm9wXXwwcHx0Y2wpJykKKyAgICBpZiBwLnNlYXJjaChmaWxlKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitkZWYgX2lzX2NvbXByZXNzX2RvYyhmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgY29tcHJlc3NfZm9ybWF0ID0gX2dldF9jb21wcmVzc19mb3JtYXQoZmlsZSwgY29tcHJlc3NfZm9ybWF0X2xpc3QpCisgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgaWYgZmlsZS5lbmRzd2l0aChjb21wcmVzc19zdWZmaXgpOgorICAgICAgICAjIFJlbW92ZSB0aGUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIHVuY29tcHJlc3NfZmlsZSA9IGZpbGVbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgaWYgX2lzX2luZm8odW5jb21wcmVzc19maWxlKSBvciBfaXNfbWFuKHVuY29tcHJlc3NfZmlsZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgY29tcHJlc3NfZm9ybWF0CisKKyAgICByZXR1cm4gRmFsc2UsICcnCisKK2RlZiBjb21wcmVzc19kb2ModG9wZGlyLCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3BkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgX2lzX2luZm8oZmlsZSkgb3IgX2lzX21hbihmaWxlKToKKyAgICAgICAgICAgICAgICAjIFN5bWxpbmsKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19tb2RlKQorICAgICAgICAgICAgICAgICMgSGFyZGxpbmsKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmxzdGF0KGZpbGUpLnN0X25saW5rID4gMToKKyAgICAgICAgICAgICAgICAgICAgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBmaWxlCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChjb21wcmVzc19jbWRzW2NvbXByZXNzX21vZGVdLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiY29tcHJlc3MgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKQorCisjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorZGVmIGRlY29tcHJlc3NfZG9jKHRvcGRpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBkZWNvbXByZXNzID0gVHJ1ZQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXMsIGNvbXByZXNzX2Zvcm1hdCA9IF9pc19jb21wcmVzc19kb2MoZmlsZSwgZGVjb21wcmVzc19jbWRzLmtleXMoKSkKKyAgICAgICAgICAgICMgRGVjb21wcmVzcyBmaWxlcyB3aGljaCBmb3JtYXQgaXMgbm90IGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgIGlmIHJlcyBhbmQgY29tcHJlc3NfbW9kZSE9Y29tcHJlc3NfZm9ybWF0OgorICAgICAgICAgICAgICAgICMgU3ltbGluaworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX2Zvcm1hdCwgZGVjb21wcmVzcykKKyAgICAgICAgICAgICAgICAjIEhhcmRsaW5rCisgICAgICAgICAgICAgICAgZWxpZiBvcy5sc3RhdChmaWxlKS5zdF9ubGluayA+IDE6CisgICAgICAgICAgICAgICAgICAgIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpCisgICAgICAgICAgICAgICAgIyBOb3JtYWwgZmlsZQorICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoZGVjb21wcmVzc19jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJkZWNvbXByZXNzIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnZGVjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBkZWNvbXByZXNzX2NtZHMsIGRlY29tcHJlc3MpCisKK3B5dGhvbiBjb21wcmVzc19kb2NfdXBkYXRlYWx0ZXJuYXRpdmVzICgpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygndXBkYXRlLWFsdGVybmF0aXZlcycsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIG1hbmRpciA9IGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKQorICAgIGluZm9kaXIgPSBkLmdldFZhcigiaW5mb2RpciIsIFRydWUpCisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBvbGRfbmFtZXMgPSAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgbmV3X25hbWVzID0gW10KKyAgICAgICAgZm9yIG9sZF9uYW1lIGluIG9sZF9uYW1lczoKKyAgICAgICAgICAgIG9sZF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUsIFRydWUpCisgICAgICAgICAgICBvbGRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG9sZF9uYW1lLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSwgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBvbGRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgb2xkX3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIG9sZF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob2xkX2xpbmspLCBvbGRfdGFyZ2V0KQorCisgICAgICAgICAgICAjIFRoZSB1cGRhdGVhbHRlcm5hdGl2ZXMgdXNlZCBmb3IgY29tcHJlc3MgZG9jCisgICAgICAgICAgICBpZiBtYW5kaXIgaW4gb2xkX3RhcmdldCBvciBpbmZvZGlyIGluIG9sZF90YXJnZXQ6CisgICAgICAgICAgICAgICAgbmV3X25hbWUgPSBvbGRfbmFtZSArICcuJyArIGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgICAgICBuZXdfbGluayA9IG9sZF9saW5rICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSBvbGRfdGFyZ2V0ICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBuZXdfbmFtZSwgbmV3X2xpbmspCisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBvbGRfbmFtZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgbmV3X25hbWUsIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBuZXdfbmFtZSwgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgb2xkX25hbWUsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgbmV3X3RhcmdldCkKKworICAgICAgICAgICAgICAgIG5ld19uYW1lcy5hcHBlbmQobmV3X25hbWUpCisKKyAgICAgICAgaWYgbmV3X25hbWVzOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgJyAnLmpvaW4obmV3X25hbWVzKSkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwN2MxODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9jb21wbGlhbmNlLmJiY2xhc3MKQEAgLTAsMCArMSw2NCBAQAorIyBEZXBsb3kgc291cmNlcyBmb3IgcmVjaXBlcyBmb3IgY29tcGxpYW5jZSB3aXRoIGNvcHlsZWZ0LXN0eWxlIGxpY2Vuc2VzCisjIERlZmF1bHRzIHRvIHVzaW5nIHN5bWxpbmtzLCBhcyBpdCdzIGEgcXVpY2sgb3BlcmF0aW9uLCBhbmQgb25lIGNhbiBlYXNpbHkKKyMgZm9sbG93IHRoZSBsaW5rcyB3aGVuIG1ha2luZyB1c2Ugb2YgdGhlIGZpbGVzIChlLmcuIHRhciB3aXRoIHRoZSAtaCBhcmcpLgorIworIyB2aTpzdHM9NDpzdz00OmV0CisKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0NPUFlMRUZUX1NPVVJDRVNfRElSID89ICcke0RFUExPWV9ESVJ9L2NvcHlsZWZ0X3NvdXJjZXMnCisKK3B5dGhvbiBkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMgKCkgeworICAgICIiIlBvcHVsYXRlIGEgdHJlZSBvZiB0aGUgcmVjaXBlIHNvdXJjZXMgYW5kIGVtaXQgcGF0Y2ggc2VyaWVzIGZpbGVzIiIiCisgICAgaW1wb3J0IG9zLnBhdGgKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBwID0gZC5nZXRWYXIoJ1AnLCBUcnVlKQorICAgIGluY2x1ZGVkLCByZWFzb24gPSBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKQorICAgIGlmIG5vdCBpbmNsdWRlZDoKKyAgICAgICAgYmIuZGVidWcoMSwgJ2NvcHlsZWZ0OiAlcyBpcyBleGNsdWRlZDogJXMnICUgKHAsIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdjb3B5bGVmdDogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwLCByZWFzb24pKQorCisgICAgc291cmNlc19kaXIgPSBkLmdldFZhcignQ09QWUxFRlRfU09VUkNFU19ESVInLCBUcnVlKQorICAgIGRsX2RpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgIHVkID0gZmV0Y2gudWQKKworICAgIHBmID0gZC5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBkZXN0ID0gb3MucGF0aC5qb2luKHNvdXJjZXNfZGlyLCBwZikKKyAgICBzaHV0aWwucm10cmVlKGRlc3QsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdCkKKworICAgIGZvciB1IGluIHVkLnZhbHVlcygpOgorICAgICAgICBsb2NhbCA9IG9zLnBhdGgubm9ybXBhdGgoZmV0Y2gubG9jYWxwYXRoKHUudXJsKSkKKyAgICAgICAgaWYgbG9jYWwuZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZiBsb2NhbC5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgbG9jYWwgPSBsb2NhbFs6LTFdCisKKyAgICAgICAgaWYgdS5taXJyb3J0YXJiYWxsOgorICAgICAgICAgICAgdGFyYmFsbF9wYXRoID0gb3MucGF0aC5qb2luKGRsX2RpciwgdS5taXJyb3J0YXJiYWxsKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyYmFsbF9wYXRoKToKKyAgICAgICAgICAgICAgICBsb2NhbCA9IHRhcmJhbGxfcGF0aAorCisgICAgICAgIG9lLnBhdGguc3ltbGluayhsb2NhbCwgb3MucGF0aC5qb2luKGRlc3QsIG9zLnBhdGguYmFzZW5hbWUobG9jYWwpKSwgZm9yY2U9VHJ1ZSkKKworICAgIHBhdGNoZXMgPSBzcmNfcGF0Y2hlcyhkKQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgcGF0Y2hkaXIgPSBwYXJtLmdldCgncGF0Y2hkaXInKQorICAgICAgICBpZiBwYXRjaGRpcjoKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzLnN1YmRpci4lcycgJSBwYXRjaGRpci5yZXBsYWNlKCcvJywgJ18nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCithZGR0YXNrIHByZXBhcmVfY29weWxlZnRfc291cmNlcyBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKK2RvX3ByZXBhcmVfY29weWxlZnRfc291cmNlc1tkaXJzXSA9ICIke1dPUktESVJ9IgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICdkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2ZpbHRlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YmU3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDc5IEBACisjIEZpbHRlciB0aGUgbGljZW5zZSwgdGhlIGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlIHJldHVybnMgVHJ1ZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSByZWNpcGUsIGFuZCBGYWxzZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERS4KKyMKKyMgQnkgZGVmYXVsdCwgaW5jbHVkZXMgYWxsIEdQTCBhbmQgTEdQTCwgYW5kIGV4Y2x1ZGVzIENMT1NFRCBhbmQgUHJvcHJpZXRhcnkuCisjCisjIHZpOnN0cz00OnN3PTQ6ZXQKKworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID89ICdHUEwqIExHUEwqJworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBnbG9icyB3aGljaCBpbmNsdWRlIGxpY2Vuc2VzJworCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPz0gJ0NMT1NFRCBQcm9wcmlldGFyeScKK0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYnMgd2hpY2ggZXhjbHVkZSBsaWNlbnNlcycKKworQ09QWUxFRlRfUkVDSVBFX1RZUEUgPz0gJyR7QGNvcHlsZWZ0X3JlY2lwZV90eXBlKGQpfScKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFW2RvY10gPSAnVGhlICJ0eXBlIiBvZiB0aGUgY3VycmVudCByZWNpcGUgKGUuZy4gdGFyZ2V0LCBuYXRpdmUsIGNyb3NzKScKKworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQnCitDT1BZTEVGVF9SRUNJUEVfVFlQRVNbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSB0eXBlcyB0byBpbmNsdWRlJworCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCBuYXRpdmUgbmF0aXZlc2RrIGNyb3NzIGNyb3Nzc2RrIGNyb3NzLWNhbmFkaWFuJworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1t0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSByZWNpcGUgdHlwZXMnCisKK0NPUFlMRUZUX1BOX0lOQ0xVREUgPz0gJycKK0NPUFlMRUZUX1BOX0lOQ0xVREVbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1BOX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWNpcGUgbmFtZXMgdG8gaW5jbHVkZScKKworQ09QWUxFRlRfUE5fRVhDTFVERSA/PSAnJworQ09QWUxFRlRfUE5fRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUE5fRVhDTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSBuYW1lcyB0byBleGNsdWRlJworCitkZWYgY29weWxlZnRfcmVjaXBlX3R5cGUoZCk6CisgICAgZm9yIHJlY2lwZV90eXBlIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0FWQUlMQUJMRV9SRUNJUEVfVFlQRVMnLCBkKToKKyAgICAgICAgaWYgb2UudXRpbHMuaW5oZXJpdHMoZCwgcmVjaXBlX3R5cGUpOgorICAgICAgICAgICAgcmV0dXJuIHJlY2lwZV90eXBlCisgICAgcmV0dXJuICd0YXJnZXQnCisKK2RlZiBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgaWYgdGhpcyByZWNpcGUncyBzb3VyY2VzIHNob3VsZCBiZSBkZXBsb3llZCBmb3IgY29tcGxpYW5jZQorICAgICIiIgorICAgIGltcG9ydCBhc3QKKyAgICBpbXBvcnQgb2UubGljZW5zZQorICAgIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UgYXMgZm5tYXRjaAorCisgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRpZCBub3QgbWF0Y2ggYW55dGhpbmcnCisKKyAgICByZWNpcGVfdHlwZSA9IGQuZ2V0VmFyKCdDT1BZTEVGVF9SRUNJUEVfVFlQRScsIFRydWUpCisgICAgaWYgcmVjaXBlX3R5cGUgbm90IGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX1JFQ0lQRV9UWVBFUycsIGQpOgorICAgICAgICBpbmNsdWRlLCBtb3RpdmUgPSBGYWxzZSwgJ3JlY2lwZSB0eXBlICIlcyIgaXMgZXhjbHVkZWQnICUgcmVjaXBlX3R5cGUKKworICAgIGluY2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUnLCBkKQorICAgIGV4Y2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUnLCBkKQorCisgICAgdHJ5OgorICAgICAgICBpc19pbmNsdWRlZCwgcmVhc29uID0gb2UubGljZW5zZS5pc19pbmNsdWRlZChkLmdldFZhcignTElDRU5TRScsIFRydWUpLCBpbmNsdWRlLCBleGNsdWRlKQorICAgIGV4Y2VwdCBvZS5saWNlbnNlLkxpY2Vuc2VFcnJvciBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBleGMpKQorICAgIGVsc2U6CisgICAgICAgIGlmIGlzX2luY2x1ZGVkOgorICAgICAgICAgICAgaWYgcmVhc29uOgorICAgICAgICAgICAgICAgIGluY2x1ZGVkLCBtb3RpdmUgPSBUcnVlLCAncmVjaXBlIGhhcyBpbmNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRvZXMgbm90IGluY2x1ZGUgYSBjb3B5bGVmdCBsaWNlbnNlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGhhcyBleGNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKworICAgIGlmIGFueShmbm1hdGNoKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBuYW1lKSBcCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9QTl9JTkNMVURFJywgZCkpOgorICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gIFRydWUsICdyZWNpcGUgaW5jbHVkZWQgYnkgbmFtZScKKyAgICBpZiBhbnkoZm5tYXRjaChkLmdldFZhcignUE4nLCBUcnVlKSwgbmFtZSkgXAorICAgICAgICAgICAgZm9yIG5hbWUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfUE5fRVhDTFVERScsIGQpKToKKyAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGV4Y2x1ZGVkIGJ5IG5hbWUnCisKKyAgICByZXR1cm4gaW5jbHVkZWQsIG1vdGl2ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzQwZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw3MyBAQAorIyBDb21tb24gY29kZSBmb3IgZ2VuZXJhdGluZyBjb3JlIHJlZmVyZW5jZSBpbWFnZXMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTGludXggRm91bmRhdGlvbgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworIyBJTUFHRV9GRUFUVVJFUyBjb250cm9sIGNvbnRlbnQgb2YgdGhlIGNvcmUgcmVmZXJlbmNlIGltYWdlcworIyAKKyMgQnkgZGVmYXVsdCB3ZSBpbnN0YWxsIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgYW5kIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIHBhY2thZ2VzOworIyB0aGlzIGdpdmVzIHVzIHdvcmtpbmcgKGNvbnNvbGUgb25seSkgcm9vdGZzLgorIworIyBBdmFpbGFibGUgSU1BR0VfRkVBVFVSRVM6CisjCisjIC0geDExICAgICAgICAgICAgICAgICAtIFggc2VydmVyCisjIC0geDExLWJhc2UgICAgICAgICAgICAtIFggc2VydmVyIHdpdGggbWluaW1hbCBlbnZpcm9ubWVudAorIyAtIHgxMS1zYXRvICAgICAgICAgICAgLSBPcGVuZWRIYW5kIFNhdG8gZW52aXJvbm1lbnQKKyMgLSB0b29scy1kZWJ1ZyAgICAgICAgIC0gZGVidWdnaW5nIHRvb2xzCisjIC0gZWNsaXBzZS1kZWJ1ZyAgICAgICAtIEVjbGlwc2UgcmVtb3RlIGRlYnVnZ2luZyBzdXBwb3J0CisjIC0gdG9vbHMtcHJvZmlsZSAgICAgICAtIHByb2ZpbGluZyB0b29scworIyAtIHRvb2xzLXRlc3RhcHBzICAgICAgLSB0b29scyB1c2FibGUgdG8gbWFrZSBzb21lIGRldmljZSB0ZXN0cworIyAtIHRvb2xzLXNkayAgICAgICAgICAgLSBTREsgKEMvQysrIGNvbXBpbGVyLCBhdXRvdG9vbHMsIGV0Yy4pCisjIC0gbmZzLXNlcnZlciAgICAgICAgICAtIE5GUyBzZXJ2ZXIKKyMgLSBuZnMtY2xpZW50ICAgICAgICAgIC0gTkZTIGNsaWVudAorIyAtIHNzaC1zZXJ2ZXItZHJvcGJlYXIgLSBTU0ggc2VydmVyIChkcm9wYmVhcikKKyMgLSBzc2gtc2VydmVyLW9wZW5zc2ggIC0gU1NIIHNlcnZlciAob3BlbnNzaCkKKyMgLSBxdDQtcGtncyAgICAgICAgICAgIC0gUXQ0L1gxMSBhbmQgZGVtbyBhcHBsaWNhdGlvbnMKKyMgLSBod2NvZGVjcyAgICAgICAgICAgIC0gSW5zdGFsbCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gY29kZWNzCisjIC0gcGFja2FnZS1tYW5hZ2VtZW50ICAtIGluc3RhbGxzIHBhY2thZ2UgbWFuYWdlbWVudCB0b29scyBhbmQgcHJlc2VydmVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgZGF0YWJhc2UKKyMgLSBkZWJ1Zy10d2Vha3MgICAgICAgIC0gbWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50LCBlLmcuIGFsbG93aW5nIHBhc3N3b3JkbGVzcyByb290IGxvZ2lucworIyAtIGRldi1wa2dzICAgICAgICAgICAgLSBkZXZlbG9wbWVudCBwYWNrYWdlcyAoaGVhZGVycywgZXRjLikgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRiZy1wa2dzICAgICAgICAgICAgLSBkZWJ1ZyBzeW1ib2wgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRvYy1wa2dzICAgICAgICAgICAgLSBkb2N1bWVudGF0aW9uIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGluIHRoZSByb290ZnMKKyMgLSBwdGVzdC1wa2dzICAgICAgICAgIC0gcHRlc3QgcGFja2FnZXMgZm9yIGFsbCBwdGVzdC1lbmFibGVkIHJlY2lwZXMKKyMgLSByZWFkLW9ubHktcm9vdGZzICAgIC0gdHdlYWtzIGFuIGltYWdlIHRvIHN1cHBvcnQgcmVhZC1vbmx5IHJvb3RmcworIworRkVBVFVSRV9QQUNLQUdFU194MTEgPSAicGFja2FnZWdyb3VwLWNvcmUteDExIgorRkVBVFVSRV9QQUNLQUdFU194MTEtYmFzZSA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSIKK0ZFQVRVUkVfUEFDS0FHRVNfeDExLXNhdG8gPSAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8iCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnIgorRkVBVFVSRV9QQUNLQUdFU19lY2xpcHNlLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWciCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXByb2ZpbGUgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtdGVzdGFwcHMgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXNkayA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zZGsgcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0IgorRkVBVFVSRV9QQUNLQUdFU19uZnMtc2VydmVyID0gInBhY2thZ2Vncm91cC1jb3JlLW5mcy1zZXJ2ZXIiCitGRUFUVVJFX1BBQ0tBR0VTX25mcy1jbGllbnQgPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLWNsaWVudCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3NoLXNlcnZlci1kcm9wYmVhciA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIiCitGRUFUVVJFX1BBQ0tBR0VTX3NzaC1zZXJ2ZXItb3BlbnNzaCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfcXQ0LXBrZ3MgPSAicGFja2FnZWdyb3VwLWNvcmUtcXQtZGVtb2FwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX2h3Y29kZWNzID0gIiR7TUFDSElORV9IV0NPREVDU30iCisKKworIyBJTUFHRV9GRUFUVVJFU19SRVBMQUNFU19mb28gPSAnYmFyMSBiYXIyJworIyBJbmNsdWRpbmcgaW1hZ2UgZmVhdHVyZSBmb28gd291bGQgcmVwbGFjZSB0aGUgaW1hZ2UgZmVhdHVyZXMgYmFyMSBhbmQgYmFyMgorSU1BR0VfRkVBVFVSRVNfUkVQTEFDRVNfc3NoLXNlcnZlci1vcGVuc3NoID0gInNzaC1zZXJ2ZXItZHJvcGJlYXIiCisKKyMgSU1BR0VfRkVBVFVSRVNfQ09ORkxJQ1RTX2ZvbyA9ICdiYXIxIGJhcjInCisjIEFuIGVycm9yIGV4Y2VwdGlvbiB3b3VsZCBiZSByYWlzZWQgaWYgYm90aCBpbWFnZSBmZWF0dXJlcyBmb28gYW5kIGJhcjEob3IgYmFyMikgYXJlIGluY2x1ZGVkCisKK01BQ0hJTkVfSFdDT0RFQ1MgPz89ICIiCisKK0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMID0gJ1wKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1ib290IFwKKyAgICBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCBcCisgICAgXAorICAgICR7Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMfSBcCisgICAgJworCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgPz0gIiIKKworSU1BR0VfSU5TVEFMTCA/PSAiJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0iCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Bhbi1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk4MTdiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgY3Bhbi1iYXNlIHByb3ZpZGVycyB2YXJpb3VzIHBlcmwgcmVsYXRlZCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGJ1aWxkaW5nCisjIGNwYW4gbW9kdWxlcworIworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9wZXJsICR7ZGF0YWRpcn0vcGVybCIKKworREVQRU5EUyAgKz0gIiR7QFsicGVybCIsICJwZXJsLW5hdGl2ZSJdWyhiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbInBlcmwiLCAiIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCitQRVJMX09XTl9ESVIgPSAiJHtAWyIiLCAiL3BlcmwtbmF0aXZlIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCisjIERldGVybWluZSB0aGUgc3RhZ2VkIHZlcnNpb24gb2YgcGVybCBmcm9tIHRoZSBwZXJsIGNvbmZpZ3VyYXRpb24gZmlsZQorIyBBc3NpZ24gdmFyZGVwdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHNpZ25hdHVyZSBpcyBjaGFuZ2VkIGJlZm9yZSBhbmQgYWZ0ZXIKKyMgcGVybCBpcyBidWlsdCAoZnJvbSBOb25lIHRvIHJlYWwgdmVyc2lvbiBpbiBjb25maWcuc2gpLgorZ2V0X3BlcmxfdmVyc2lvblt2YXJkZXB2YWx1ZV0gPSAiJHtQRVJMX09XTl9ESVJ9IgorZGVmIGdldF9wZXJsX3ZlcnNpb24oZCk6CisgICAgaW1wb3J0IHJlCisgICAgY2ZnID0gZC5leHBhbmQoJyR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvY29uZmlnLnNoJykKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGNmZywgJ3InKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGwgPSBmLnJlYWRsaW5lcygpOworICAgIGYuY2xvc2UoKTsKKyAgICByID0gcmUuY29tcGlsZSgiXnZlcnNpb249JyhcZCpcLlxkKlwuXGQqKSciKQorICAgIGZvciBzIGluIGw6CisgICAgICAgIG0gPSByLm1hdGNoKHMpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKyMgRGV0ZXJtaW5lIHdoZXJlIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFyZQorZGVmIHBlcmxfZ2V0X2xpYmRpcnMoZCk6CisgICAgbGliZGlyID0gZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisgICAgaWYgaXNfdGFyZ2V0KGQpID09ICJubyI6CisgICAgICAgIGxpYmRpciArPSAnL3BlcmwtbmF0aXZlJworICAgIGxpYmRpciArPSAnL3BlcmwnCisgICAgcmV0dXJuIGxpYmRpcgorCitkZWYgaXNfdGFyZ2V0KGQpOgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisgICAgcmV0dXJuICJubyIKKworUEVSTExJQkRJUlMgOj0gIiR7QHBlcmxfZ2V0X2xpYmRpcnMoZCl9IgorUEVSTFZFUlNJT04gOj0gIiR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorUEVSTFZFUlNJT05bdmFyZGVwdmFsdWVdID0gIiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BFUkxMSUJESVJTfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiYmQyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW4uYmJjbGFzcwpAQCAtMCwwICsxLDU1IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgb2xkIE1ha2VmaWxlLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFORkxBR1MgPz0gIiIKK0VYVFJBX1BFUkxGTEFHUyA/PSAiIgorCisjIEVudiB2YXIgd2hpY2ggdGVsbHMgcGVybCBpZiBpdCBzaG91bGQgdXNlIGhvc3QgKG5vKSBvciB0YXJnZXQgKHllcykgc2V0dGluZ3MKK2V4cG9ydCBQRVJMQ09ORklHVEFSR0VUID0gIiR7QGlzX3RhcmdldChkKX0iCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIHdoZXJlIHRoZSBwZXJsIGluY2x1ZGUgZmlsZXMgYXJlCitleHBvcnQgUEVSTF9JTkMgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS9DT1JFIgorZXhwb3J0IFBFUkxfTElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTF9BUkNITElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTEhPU1RMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0vIgorCitjcGFuX2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IFBFUkw1TElCPSIke1BFUkxfQVJDSExJQn0iCisJeWVzICcnIHwgcGVybCAke0VYVFJBX1BFUkxGTEFHU30gTWFrZWZpbGUuUEwgJHtFWFRSQV9DUEFORkxBR1N9CisKKwkjIE1ha2VmaWxlLlBMcyBjYW4gZXhpdCB3aXRoIHN1Y2Nlc3Mgd2l0aG91dCBnZW5lcmF0aW5nIGEKKwkjIE1ha2VmaWxlLCBlLmcuIGluIGNhc2VzIG9mIG1pc3NpbmcgY29uZmlndXJlIHRpbWUKKwkjIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBjb25zaWRlcmVkIGEgYmVzdCBwcmFjdGljZSBieQorCSMgY3BhbnRlc3RlcnMub3JnLiBTZWU6CisJIyAgKiBodHRwOi8vd2lraS5jcGFudGVzdGVycy5vcmcvd2lraS9DUEFOQXV0aG9yTm90ZXMKKwkjICAqIGh0dHA6Ly93d3cubm50cC5wZXJsLm9yZy9ncm91cC9wZXJsLnFhLzIwMDgvMDgvbXNnMTEyMzYuaHRtbAorCVsgLWUgTWFrZWZpbGUgXSB8fCBiYmZhdGFsICJObyBNYWtlZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IE1ha2VmaWxlLlBMIgorCisJaWYgWyAiJHtCVUlMRF9TWVN9IiAhPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJLiAke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsL2NvbmZpZy5zaAorCQkjIFVzZSBmaW5kIHNpbmNlIHRoZXJlIGNhbiBiZSBhIE1ha2VmaWxlIGdlbmVyYXRlZCBmb3IgZWFjaCBNYWtlZmlsZS5QTAorCQlmb3IgZiBpbiBgZmluZCAtbmFtZSBNYWtlZmlsZS5QTGA7IGRvCisJCQlmMj1gZWNobyAkZiB8IHNlZCAtZSAncy8uUEwvLydgCisJCQl0ZXN0IC1mICRmMiB8fCBjb250aW51ZQorCQkJc2VkIC1pIC1lICJzOlwoUEVSTF9BUkNITElCID0gXCkuKjpcMSR7UEVSTF9BUkNITElCfToiIFwKKwkJCQktZSAncy9wZXJsLnJlYWwvcGVybC8nIFwKKwkJCQktZSAic3xeXChDQ0ZMQUdTID0uKlwpfFwxICR7Q0ZMQUdTfXwiIFwKKwkJCQkkZjIKKwkJZG9uZQorCWZpCit9CisKK2NwYW5fZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBQQVNUSFJVX0lOQz0iJHtDRkxBR1N9IiBMRD0iJHtDQ0xEfSIKK30KKworY3Bhbl9kb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGxfdmVuZG9yCisJZm9yIFBFUkxTQ1JJUFQgaW4gYGdyZXAgLXJJRWwgJyMhICoke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsJyAke0R9YDsgZG8KKwkJc2VkIC1pIC1lICdzfCR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3Blcmx8L3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAkUEVSTFNDUklQVAorCWRvbmUKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2NDhhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2NwYW5fYnVpbGQuYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgbmV3IEJ1aWxkLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTID89ICIiCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBMRCA9ICIke0NDTER9IgorCitjcGFuX2J1aWxkX2RvX2NvbmZpZ3VyZSAoKSB7CisJaWYgWyAiJHtAaXNfdGFyZ2V0KGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCSMgYnVpbGQgZm9yIHRhcmdldAorCQkuICR7U1RBR0lOR19MSUJESVJ9L3BlcmwvY29uZmlnLnNoCisJZmkKKworCXBlcmwgQnVpbGQuUEwgLS1pbnN0YWxsZGlycyB2ZW5kb3IgXAorCQkJCS0tZGVzdGRpciAke0R9IFwKKwkJCQktLWluc3RhbGxfcGF0aCBhcmNoPSIke2xpYmRpcn0vcGVybCIgXAorCQkJCS0taW5zdGFsbF9wYXRoIHNjcmlwdD0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbj0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbmRvYz0ke21hbmRpcn0vbWFuMSBcCisJCQkJLS1pbnN0YWxsX3BhdGggbGliZG9jPSR7bWFuZGlyfS9tYW4zIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTfQorfQorCitjcGFuX2J1aWxkX2RvX2NvbXBpbGUgKCkgeworICAgICAgICBwZXJsIEJ1aWxkCit9CisKK2NwYW5fYnVpbGRfZG9faW5zdGFsbCAoKSB7CisJcGVybCBCdWlsZCBpbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYTE2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxODUgQEAKKyMKKyMgTk9URSAtIFdoZW4gdXNpbmcgdGhpcyBjbGFzcyB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAorIyBUUkFOU0xBVEVEX1RBUkdFVF9BUkNIIGlzIGFkZGVkIGludG8gUE4uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHRoZSBUQVJHRVRfQVJDSAorIyBpcyBjaGFuZ2VkLCBhbm90aGVyIG5hdGl2ZXNkayB4eHgtY2FuYWRpYW4tY3Jvc3MgY2FuIGJlIGluc3RhbGxlZAorIworCisKKyMgU0RLIHBhY2thZ2VzIGFyZSBidWlsdCBlaXRoZXIgZXhwbGljaXRseSBieSB0aGUgdXNlciwKKyMgb3IgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeS4gIE5vIG5lZWQgdG8gYmUgaW4gJ3dvcmxkJy4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zcy1jYW5hZGlhbiIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7U0RLX0FSQ0h9JHtTREtfVkVORE9SfS0ke1NES19PU306JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCisjCisjIFVwZGF0ZSBCQVNFX1BBQ0tBR0VfQVJDSCBhbmQgUEFDS0FHRV9BUkNIUworIworUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKK0NBTkFESUFORVhUUkFPUyA9ICJsaW51eC11Y2xpYmMgbGludXgtbXVzbCIKK0NBTkFESUFORVhUUkFWRU5ET1IgPSAiIgorTU9ESUZZVE9TID8/PSAiMSIKK3B5dGhvbiAoKSB7CisgICAgYXJjaHMgPSBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnNwbGl0KCkKKyAgICBzZGthcmNocyA9IFtdCisgICAgZm9yIGFyY2ggaW4gYXJjaHM6CisgICAgICAgIHNka2FyY2hzLmFwcGVuZChhcmNoICsgJy0ke1NES1BLR1NVRkZJWH0nKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgIiAiLmpvaW4oc2RrYXJjaHMpKQorCisgICAgIyBBbGxvdyB0aGUgZm9sbG93aW5nIGNvZGUgc2VnbWVudCB0byBiZSBkaXNhYmxlZCwgZS5nLiBtZXRhLWVudmlyb25tZW50CisgICAgaWYgZC5nZXRWYXIoIk1PRElGWVRPUyIsIFRydWUpICE9ICIxIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImJhcmVtZXRhbCI6CisgICAgICAgIHJldHVybgorCisgICAgdG9zID0gZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpCisgICAgd2hpdGVsaXN0ID0gW10KKyAgICBmb3IgdmFyaWFudCBpbiBbIiIsICJzcGUiLCAieDMyIiwgImVhYmkiLCAibjMyIl06CisgICAgICAgIGZvciBsaWJjIGluIFsiIiwgInVjbGliYyIsICJtdXNsIl06CisgICAgICAgICAgICBlbnRyeSA9ICJsaW51eCIKKyAgICAgICAgICAgIGlmIHZhcmlhbnQgYW5kIGxpYmM6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItIiArIGxpYmMgKyB2YXJpYW50CisgICAgICAgICAgICBlbGlmIHZhcmlhbnQ6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItZ251IiArIHZhcmlhbnQKKyAgICAgICAgICAgIGVsaWYgbGliYzoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi0iICsgbGliYworICAgICAgICAgICAgd2hpdGVsaXN0LmFwcGVuZChlbnRyeSkKKyAgICBpZiB0b3Mgbm90IGluIHdoaXRlbGlzdDoKKyAgICAgICAgYmIuZmF0YWwoIkJ1aWxkaW5nIGNyb3NzLWNhbmRpYW4gZm9yIGFuIHVua25vd24gVEFSR0VUX1NZUyAoJXMpLCBwbGVhc2UgdXBkYXRlIGNyb3NzLWNhbmFkaWFuLmJiY2xhc3MiICUgZC5nZXRWYXIoIlRBUkdFVF9TWVMiLCBUcnVlKSkKKworICAgIGZvciBuIGluIFsiUFJPVklERVMiLCAiREVQRU5EUyJdOgorICAgICAgICBkLnNldFZhcihuLCBkLmdldFZhcihuLCBUcnVlKSkKKyAgICBkLnNldFZhcigiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIiwgZC5nZXRWYXIoIlNUQUdJTkdfQklORElSX1RPT0xDSEFJTiIsIFRydWUpKQorICAgIGZvciBwcmVmaXggaW4gWyJBUiIsICJBUyIsICJETExUT09MIiwgIkNDIiwgIkNYWCIsICJHQ0MiLCAiTEQiLCAiTElQTyIsICJOTSIsICJPQkpEVU1QIiwgIlJBTkxJQiIsICJTVFJJUCIsICJXSU5EUkVTIl06CisgICAgICAgIG4gPSBwcmVmaXggKyAiX0ZPUl9UQVJHRVQiCisgICAgICAgIGQuc2V0VmFyKG4sIGQuZ2V0VmFyKG4sIFRydWUpKQorICAgICMgVGhpcyBpcyBhIGJpdCB1Z2x5LiBXZSBuZWVkIHRvIHplcm8gTElCQy9BQkkgZXh0ZW5zaW9uIHdoaWNoIHdpbGwgY2hhbmdlIFRBUkdFVF9PUworICAgICMgaG93ZXZlciB3ZSBuZWVkIHRoZSBvbGQgdmFsdWUgaW4gc29tZSB2YXJpYWJsZXMuIFdlIGV4cGFuZCB0aG9zZSBoZXJlIGZpcnN0LgorICAgIHRhcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiB0YXJjaCA9PSAieDg2XzY0IjoKKyAgICAgICAgZC5zZXRWYXIoIkxJQkNFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5zZXRWYXIoIkFCSUVYVEVOU0lPTiIsICIiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnV4MzIgbGludXgtdWNsaWJjeDMyIGxpbnV4LW11c2x4MzIiKQorICAgIGVsaWYgdGFyY2ggPT0gInBvd2VycGMiOgorICAgICAgICAjIFBvd2VyUEMgY2FuIGJ1aWxkICJsaW51eCIgYW5kICJsaW51eC1nbnVzcGUiCisgICAgICAgIGQuc2V0VmFyKCJMSUJDRVhURU5TSU9OIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJBQklFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIkNBTkFESUFORVhUUkFPUyIsICIgbGludXgtZ251c3BlIGxpbnV4LXVjbGliY3NwZSBsaW51eC1tdXNsc3BlIikKKyAgICBlbGlmIHRhcmNoID09ICJtaXBzNjQiOgorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVuMzIgbGludXgtdWNsaWJjbjMyIGxpbnV4LW11c2xuMzIiKQorICAgIGlmIHRhcmNoID09ICJhcm0iOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX09TIiwgImxpbnV4LWdudWVhYmkiKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorCisgICAgIyBBbHNvIG5lZWQgdG8gaGFuZGxlIG11bHRpbGliIHRhcmdldCB2ZW5kb3JzCisgICAgdmVuZG9ycyA9IGQuZ2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgVHJ1ZSkKKyAgICBpZiBub3QgdmVuZG9yczoKKyAgICAgICAgdmVuZG9ycyA9IGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnVEFSR0VUX1ZFTkRPUicpCisgICAgb3JpZ3ZlbmRvciA9IGQuZ2V0VmFyKCJUQVJHRVRfVkVORE9SX01VTFRJTElCX09SSUdJTkFMIiwgVHJ1ZSkKKyAgICBpZiBvcmlndmVuZG9yOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1ZFTkRPUiIsIG9yaWd2ZW5kb3IpCisgICAgICAgIGlmIG9yaWd2ZW5kb3Igbm90IGluIHZlbmRvcnMuc3BsaXQoKToKKyAgICAgICAgICAgIHZlbmRvcnMgPSBvcmlndmVuZG9yICsgIiAiICsgdmVuZG9ycworICAgIGQuc2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgdmVuZG9ycykKK30KK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBVEhfYXBwZW5kID0gIjoke1RNUERJUn0vc3lzcm9vdHMvJHtIT1NUX0FSQ0h9LyR7YmluZGlyX2Nyb3NzfSIKK1BLR0hJU1RfRElSID0gIiR7VE1QRElSfS9wa2doaXN0b3J5LyR7SE9TVF9BUkNIfS0ke1NES1BLR1NVRkZJWH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9LyIKKworSE9TVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorSE9TVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtTREtfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKKworI2Fzc2lnbiBEUEtHX0FSQ0gKK0RQS0dfQVJDSCA9ICIke1NES19BUkNIfSIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEU0RLX0xERkxBR1N9IFwKKyAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUgbmF0aXZlc2RrLWdldHRleHQiCisKKyMKKyMgV2UgbmVlZCBjaHJwYXRoID49IDAuMTQgdG8gZW5zdXJlIHdlIGNhbiBkZWFsIHdpdGggMzIgYW5kIDY0IGJpdAorIyBiaW5hcmllcworIworREVQRU5EU19hcHBlbmQgPSAiIGNocnBhdGgtcmVwbGFjZW1lbnQtbmF0aXZlIgorRVhUUkFOQVRJVkVQQVRIICs9ICJjaHJwYXRoLW5hdGl2ZSIKKworIyBQYXRoIG1hbmdsaW5nIG5lZWRlZCBieSB0aGUgY3Jvc3MgcGFja2FnaW5nCisjIE5vdGUgdGhhdCB3ZSB1c2UgOj0gaGVyZSB0byBlbnN1cmUgdGhhdCBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgYXJlCisjIHRhcmdldCBwYXRocy4KK3RhcmdldF9iYXNlX3ByZWZpeCA6PSAiJHtiYXNlX3ByZWZpeH0iCit0YXJnZXRfcHJlZml4IDo9ICIke3ByZWZpeH0iCit0YXJnZXRfZXhlY19wcmVmaXggOj0gIiR7ZXhlY19wcmVmaXh9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7dGFyZ2V0X2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2xpYmRpciA9ICIke3RhcmdldF9leGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9pbmNsdWRlZGlyIDo9ICIke2luY2x1ZGVkaXJ9IgorCisjIENoYW5nZSB0byBwbGFjZSBmaWxlcyBpbiBTREtQQVRICitiYXNlX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9IgorcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitzYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2VfYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2Vfc2JpbmRpciA9ICIke2JpbmRpcn0iCitsaWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L2Jpbi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9saWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitVU0VfTkxTID0gIiR7U0RLVVNFX05MU30iCisKKyMgV2UgaGF2ZSB0byB1cyBUQVJHRVRfQVJDSCBidXQgd2UgY2FyZSBhYm91dCB0aGUgYWJzb2x1dGUgdmFsdWUKKyMgYW5kIG5vdCBhbnkgcGFydGljdWxhciB0dW5lIHRoYXQgaXMgZW5hYmxlZC4KK1RBUkdFVF9BUkNIW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX0FSQ0giCisKKyMgSWYgTUxQUkVGSVggaXMgc2V0IGJ5IG11bHRpbGliIGNvZGUsIHNobGlicworIyBwb2ludHMgdG8gdGhlIHdyb25nIHBsYWNlIHNvIGZvcmNlIGl0CitTSExJQlNESVJTID0gIiR7UEtHREFUQV9ESVJ9L25hdGl2ZXNkay1zaGxpYnMyIgorU0hMSUJTV09SS0RJUiA9ICIke1BLR0RBVEFfRElSfS9uYXRpdmVzZGstc2hsaWJzMiIKKworY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MgKCkgeworCWZvciBpIGluIGxpbnV4ICR7Q0FOQURJQU5FWFRSQU9TfQorCWRvCisJCWZvciB2IGluICR7Q0FOQURJQU5FWFRSQVZFTkRPUn0KKwkJZG8KKwkJCWQ9JHtEfSR7YmluZGlyfS8uLi8ke1RBUkdFVF9BUkNIfSR2LSRpCisJCQlpZiBbIC1kICRkIF07CisJCQl0aGVuCisJCQkgICAgY29udGludWUKKwkJCWZpCisJCQlpbnN0YWxsIC1kICRkCisJCQlmb3IgaiBpbiBgbHMgJHtEfSR7YmluZGlyfWAKKwkJCWRvCisJCQkJcD0ke1RBUkdFVF9BUkNIfSR2LSRpLWBlY2hvICRqIHwgc2VkIC1lIHMsJHtUQVJHRVRfUFJFRklYfSwsYAorCQkJCWxuIC1zIC4uLyR7VEFSR0VUX1NZU30vJGogJGQvJHAKKwkJCWRvbmUKKwkJZG9uZQorICAgICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYWI1YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK2luaGVyaXQgcmVsb2NhdGFibGUKKworIyBDcm9zcyBwYWNrYWdlcyBhcmUgYnVpbHQgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeSwKKyMgbm8gbmVlZCBmb3IgdGhlbSB0byBiZSBhIGRpcmVjdCB0YXJnZXQgb2YgJ3dvcmxkJworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0NMQVNTT1ZFUlJJREUgPSAiY2xhc3MtY3Jvc3MiCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKKworSE9TVF9BUkNIID0gIiR7QlVJTERfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitIT1NUX09TID0gIiR7QlVJTERfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtCVUlMRF9QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7SE9TVF9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBQ0tBR0VfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorCitNVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1BBQ0tBR0VfQVJDSH0ke0JVSUxEX1ZFTkRPUn0tJHtCVUlMRF9PU30iCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke2V4ZWNfcHJlZml4fS9saWIvcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiIgorCitDUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERfTERGTEFHU30iCitMREZMQUdTX2J1aWxkLWRhcndpbiA9ICItTCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUiCisKKyMgUGF0aCBtYW5nbGluZyBuZWVkZWQgYnkgdGhlIGNyb3NzIHBhY2thZ2luZworIyBOb3RlIHRoYXQgd2UgdXNlIDo9IGhlcmUgdG8gZW5zdXJlIHRoYXQgbGliZGlyIGFuZCBpbmNsdWRlZGlyIGFyZQorIyB0YXJnZXQgcGF0aHMuCit0YXJnZXRfYmFzZV9wcmVmaXggOj0gIiR7YmFzZV9wcmVmaXh9IgordGFyZ2V0X3ByZWZpeCA6PSAiJHtwcmVmaXh9IgordGFyZ2V0X2V4ZWNfcHJlZml4IDo9ICIke2V4ZWNfcHJlZml4fSIKK3RhcmdldF9iYXNlX2xpYmRpciA9ICIke3RhcmdldF9iYXNlX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9saWJkaXIgPSAiJHt0YXJnZXRfZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0iCit0YXJnZXRfaW5jbHVkZWRpciA6PSAiJHtpbmNsdWRlZGlyfSIKKworIyBPdmVycmlkZXMgZm9yIHBhdGhzCitDUk9TU19UQVJHRVRfU1lTX0RJUiA9ICIke1RBUkdFVF9TWVN9IgorcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCitiYXNlX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0iCitleGVjX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L2Jpbi8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9iaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9zYmluZGlyID0gIiR7YmluZGlyfSIKK2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK1VTRV9OTFMgPSAibm8iCisKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwYWNrYWdlX3FhCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZDVjZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKK2luaGVyaXQgY3Jvc3MKKworQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zc3NkayIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9IgorcHl0aG9uICgpIHsKKwkjIHNldCBUVU5FX1BLR0FSQ0ggdG8gU0RLX0FSQ0gKKwlkLnNldFZhcignVFVORV9QS0dBUkNIJywgZC5nZXRWYXIoJ1NES19BUkNIJywgVHJ1ZSkpCit9CisKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0ke1NES19WRU5ET1J9LSR7U0RLX09TfSIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKK1RBUkdFVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorVEFSR0VUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorVEFSR0VUX09TID0gIiR7U0RLX09TfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKK1RBUkdFVF9GUFUgPSAiIgorCit0YXJnZXRfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2xpYmRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2luY2x1ZGVkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7aW5jbHVkZWRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30iCit0YXJnZXRfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgordGFyZ2V0X2V4ZWNfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorYmFzZWxpYiA9ICJsaWIiCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCisjIE5lZWQgdG8gZm9yY2UgdGhpcyB0byBlbnN1cmUgY29uc2l0ZW5jeSBhY2Nyb3NzIGFyY2hpdGVjdHVyZXMKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiIgorCitVU0VfTkxTID0gIm5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZWJpYW4uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjY5NzlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxNDEgQEAKKyMgRGViaWFuIHBhY2thZ2UgcmVuYW1pbmcgb25seSBvY2N1cnMgd2hlbiBhIHBhY2thZ2UgaXMgYnVpbHQKKyMgV2UgdGhlcmVmb3JlIGhhdmUgdG8gbWFrZSBzdXJlIHdlIGJ1aWxkIGFsbCBydW50aW1lIHBhY2thZ2VzCisjIGJlZm9yZSBidWlsZGluZyB0aGUgY3VycmVudCBwYWNrYWdlIHRvIG1ha2UgdGhlIHBhY2thZ2VzIHJ1bnRpbWUKKyMgZGVwZW5kcyBhcmUgY29ycmVjdAorIworIyBDdXN0b20gbGlicmFyeSBwYWNrYWdlIG5hbWVzIGNhbiBiZSBkZWZpbmVkIHNldHRpbmcKKyMgREVCSUFOTkFNRV8gKyBwa2duYW1lIHRvIHRoZSBkZXNpcmVkIG5hbWUuCisjCisjIEJldHRlciBleHByZXNzZWQgYXMgZW5zdXJlIGFsbCBSREVQRU5EUyBwYWNrYWdlIGJlZm9yZSB3ZSBwYWNrYWdlCisjIFRoaXMgbWVhbnMgd2UgY2FuJ3QgaGF2ZSBjaXJjdWxhciBSREVQRU5EUy9SUkVDT01NRU5EUworCitBVVRPX0xJQk5BTUVfUEtHUyA9ICIke1BBQ0tBR0VTfSIKKworaW5oZXJpdCBwYWNrYWdlCisKK0RFQklBTlJERVAgPSAiZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorZG9fcGFja2FnZV93cml0ZV90YXJbcmRlcHRhc2tdID0gIiR7REVCSUFOUkRFUH0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5SREVQIiwgIiIpCit9CisKK3B5dGhvbiBkZWJpYW5fcGFja2FnZV9uYW1lX2hvb2sgKCkgeworICAgIGltcG9ydCBnbG9iLCBjb3B5LCBzdGF0LCBlcnJubywgcmUKKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGJpbl9yZSA9IHJlLmNvbXBpbGUoIi4qL3M/IiArIG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoImJpbmRpciIsIFRydWUpKSArICIkIikKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCIuKi8iICsgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpICsgIiQiKQorICAgIHNvX3JlID0gcmUuY29tcGlsZSgibGliLipcLnNvIikKKworICAgIGRlZiBzb2NydW5jaChzKToKKyAgICAgICAgcyA9IHMubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICBtID0gcmUubWF0Y2goIl4oLiopKC4pXC5zb1wuKC4qKSQiLCBzKQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBtLmdyb3VwKDIpIGluICcwMTIzNDU2Nzg5JzoKKyAgICAgICAgICAgIGJpbiA9ICclcyVzLSVzJyAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpLCBtLmdyb3VwKDMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmluID0gbS5ncm91cCgxKSArIG0uZ3JvdXAoMikgKyBtLmdyb3VwKDMpCisgICAgICAgIGRldiA9IG0uZ3JvdXAoMSkgKyBtLmdyb3VwKDIpCisgICAgICAgIHJldHVybiAoYmluLCBkZXYpCisKKyAgICBkZWYgaXNleGVjKHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gb3Muc3RhdChwYXRoKQorICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JRVhFQykKKworICAgIGRlZiBhZGRfcnByb3ZpZGVzKHBrZywgZCk6CisgICAgICAgIG5ld3BrZyA9IGQuZ2V0VmFyKCdQS0dfJyArIHBrZywgRmFsc2UpCisgICAgICAgIGlmIG5ld3BrZyBhbmQgbmV3cGtnICE9IHBrZzoKKyAgICAgICAgICAgIHByb3ZzID0gKGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gcHJvdnM6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCAiICIgKyBwa2cgKyAiICg9IiArIGQuZ2V0VmFyKCJQS0dWIiwgVHJ1ZSkgKyAiKSIpCisKKyAgICBkZWYgYXV0b19saWJuYW1lKHBhY2thZ2VzLCBvcmlnX3BrZyk6CisgICAgICAgIHNvbmFtZXMgPSBbXQorICAgICAgICBoYXNfYmlucyA9IDAKKyAgICAgICAgaGFzX2xpYnMgPSAwCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW29yaWdfcGtnXToKKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICAgICAgICAgIGlmIGJpbl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfYmlucyA9IDEKKyAgICAgICAgICAgIGlmIGxpYl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfbGlicyA9IDEKKyAgICAgICAgICAgICAgICBpZiBzb19yZS5tYXRjaChvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gKGQuZ2V0VmFyKCdUQVJHRVRfUFJFRklYJywgVHJ1ZSkgb3IgIiIpICsgIm9iamR1bXAgLXAgIiArIGZpbGUgKyAiIDI+L2Rldi9udWxsIgorICAgICAgICAgICAgICAgICAgICBmZCA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytTT05BTUVccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGFuZCBub3QgbS5ncm91cCgxKSBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyAgICAgICAgYmIuZGVidWcoMSwgJ0xJQk5BTUVTOiBwa2cgJXMgbGlicyAlZCBiaW5zICVkIHNvbmFtZXMgJXMnICUgKG9yaWdfcGtnLCBoYXNfbGlicywgaGFzX2JpbnMsIHNvbmFtZXMpKQorICAgICAgICBzb25hbWUgPSBOb25lCisgICAgICAgIGlmIGxlbihzb25hbWVzKSA9PSAxOgorICAgICAgICAgICAgc29uYW1lID0gc29uYW1lc1swXQorICAgICAgICBlbGlmIGxlbihzb25hbWVzKSA+IDE6CisgICAgICAgICAgICBsZWFkID0gZC5nZXRWYXIoJ0xFQURfU09OQU1FJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxlYWQ6CisgICAgICAgICAgICAgICAgciA9IHJlLmNvbXBpbGUobGVhZCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgci5tYXRjaChzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLmFwcGVuZChzKQorICAgICAgICAgICAgICAgIGlmIGxlbihmaWx0ZXJlZCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgc29uYW1lID0gZmlsdGVyZWRbMF0KKyAgICAgICAgICAgICAgICBlbGlmIGxlbihmaWx0ZXJlZCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBtYXRjaGVzICglcykgZm9yIExFQURfU09OQU1FICclcyciICUgKCIsICIuam9pbihmaWx0ZXJlZCksIGxlYWQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIGxpYnJhcmllcyAoJXMpIGZvdW5kLCBidXQgTEVBRF9TT05BTUUgJyVzJyBkb2Vzbid0IG1hdGNoIGFueSBvZiB0aGVtIiAlICgiLCAiLmpvaW4oc29uYW1lcyksIGxlYWQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBsaWJyYXJpZXMgKCVzKSBmb3VuZCBhbmQgTEVBRF9TT05BTUUgbm90IGRlZmluZWQiICUgIiwgIi5qb2luKHNvbmFtZXMpKQorCisgICAgICAgIGlmIGhhc19saWJzIGFuZCBub3QgaGFzX2JpbnMgYW5kIHNvbmFtZToKKyAgICAgICAgICAgIHNvbmFtZV9yZXN1bHQgPSBzb2NydW5jaChzb25hbWUpCisgICAgICAgICAgICBpZiBzb25hbWVfcmVzdWx0OgorICAgICAgICAgICAgICAgIChwa2duYW1lLCBkZXZuYW1lKSA9IHNvbmFtZV9yZXN1bHQKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIChkLmdldFZhcignUEtHXycgKyBwa2csIEZhbHNlKSBvciBkLmdldFZhcignREVCSUFOX05PQVVUT05BTUVfJyArIHBrZywgRmFsc2UpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMocGtnLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGViaWFuX3BuID0gZC5nZXRWYXIoJ0RFQklBTk5BTUVfJyArIHBrZywgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlYmlhbl9wbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IGRlYmlhbl9wbgorICAgICAgICAgICAgICAgICAgICBlbGlmIHBrZyA9PSBvcmlnX3BrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZy5yZXBsYWNlKG9yaWdfcGtnLCBkZXZuYW1lLCAxKQorICAgICAgICAgICAgICAgICAgICBtbHByZT1kLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBtbHByZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdwa2cuZmluZChtbHByZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBtbHByZSArIG5ld3BrZworICAgICAgICAgICAgICAgICAgICBpZiBuZXdwa2cgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18nICsgcGtnLCBuZXdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfcnByb3ZpZGVzKHBrZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMob3JpZ19wa2csIGQpCisKKyAgICAjIHJldmVyc2VkIHNvcnQgaXMgbmVlZGVkIHdoZW4gc29tZSBwYWNrYWdlIGlzIHN1YnN0cmluZyBvZiBhbm90aGVyCisgICAgIyBpZSBpbiBuY3Vyc2VzIHdlIGdldCB3aXRob3V0IHJldmVyc2Ugc29ydDogCisgICAgIyBERUJVRzogTElCTkFNRVM6IHBrZ25hbWUgbGlidGljNSBkZXZuYW1lIGxpYnRpYyBwa2cgbmN1cnNlcy1saWJ0aWMgb3JpZ19wa2cgbmN1cnNlcy1saWJ0aWMgZGViaWFuX3BuIE5vbmUgbmV3cGtnIGxpYnRpYzUKKyAgICAjIGFuZCBsYXRlcgorICAgICMgREVCVUc6IExJQk5BTUVTOiBwa2duYW1lIGxpYnRpYzUgZGV2bmFtZSBsaWJ0aWMgcGtnIG5jdXJzZXMtbGlidGljdyBvcmlnX3BrZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4gTm9uZSBuZXdwa2cgbGlidGljdworICAgICMgc28gd2UgbmVlZCB0byBoYW5kbGUgbmN1cnNlcy1saWJ0aWN3LT5saWJ0aWN3NSBiZWZvcmUgbmN1cnNlcy1saWJ0aWMtPmxpYnRpYzUKKyAgICBmb3IgcGtnIGluIHNvcnRlZCgoZC5nZXRWYXIoJ0FVVE9fTElCTkFNRV9QS0dTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCksIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgIGF1dG9fbGlibmFtZShwYWNrYWdlcywgcGtnKQorfQorCitFWFBPUlRfRlVOQ1RJT05TIHBhY2thZ2VfbmFtZV9ob29rCisKK0RFQklBTl9OQU1FUyA9ICIxIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RlcGxveS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjVlNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcwpAQCAtMCwwICsxLDEwIEBACitERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0iCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95IgorZG9fZGVwbG95W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7REVQTE9ZRElSfSIKK2RvX2RlcGxveVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lNQUdFfSIKKworcHl0aG9uIGRvX2RlcGxveV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX2RlcGxveV9zZXRzY2VuZQorZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MTQzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKQEAgLTAsMCArMSwxNTYgQEAKK2luaGVyaXQgdGVybWluYWwKKworREVWU0hFTEwgPSAiJHtTSEVMTH0iCisKK3B5dGhvbiBkb19kZXZzaGVsbCAoKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJtYW51YWxmYWtlcm9vdCIpOgorICAgICAgIGQucHJlcGVuZFZhcigiREVWU0hFTEwiLCAicHNldWRvICIpCisgICAgICAgZmFrZWVudiA9IGQuZ2V0VmFyKCJGQUtFUk9PVEVOViIsIFRydWUpLnNwbGl0KCkKKyAgICAgICBmb3IgZiBpbiBmYWtlZW52OgorICAgICAgICAgICAgayA9IGYuc3BsaXQoIj0iKQorICAgICAgICAgICAgZC5zZXRWYXIoa1swXSwga1sxXSkgICAgICAgICAgIAorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIk9FX1RFUk1JTkFMX0VYUE9SVFMiLCAiICIgKyBrWzBdKQorICAgICAgIGQuZGVsVmFyRmxhZygiZG9fZGV2c2hlbGwiLCAiZmFrZXJvb3QiKQorCisgICAgb2VfdGVybWluYWwoZC5nZXRWYXIoJ0RFVlNIRUxMJywgVHJ1ZSksICdPcGVuRW1iZWRkZWQgRGV2ZWxvcGVyIFNoZWxsJywgZCkKK30KKworYWRkdGFzayBkZXZzaGVsbCBhZnRlciBkb19wYXRjaAorCisjIFRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgdGVybWluYWwgc3RhcnRzIGluCitERVZTSEVMTF9TVEFSVERJUiA/PSAiJHtTfSIKK2RvX2RldnNoZWxsW2RpcnNdID0gIiR7REVWU0hFTExfU1RBUlRESVJ9IgorZG9fZGV2c2hlbGxbbm9zdGFtcF0gPSAiMSIKKworIyBkZXZzaGVsbCBhbmQgZmFrZXJvb3QvcHNldWRvIG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBzaW5jZSBvbmx5IHRoZSBmaW5hbAorIyBjb21tYW5kIHNob3VsZCBydW4gdW5kZXIgZmFrZXJvb3QgZW11bGF0aW9uLCBhbnkgWCBjb25uZWN0aW9uIHNob3VsZAorIyBiZSBkb25lIGFzIHRoZSBub3JtYWwgdXNlci4gV2UgdGhlcmZvcmUgY2FyZWZ1bGx5IGNvbnN0cnVjdCB0aGUgZW52aW9ubWVudAorIyBtYW51YWxseQorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoImRvX2RldnNoZWxsIiwgImZha2Vyb290Iik6CisgICAgICAgIyBXZSBuZWVkIHRvIHNpZ25hbCBvdXIgY29kZSB0aGF0IHdlIHdhbnQgZmFrZXJvb3QgaG93ZXZlciB3ZQorICAgICAgICMgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgZW52aXJvbm1lbnQgYW5kIHZhcmlhYmxlcyBoZXJlIHlldCAoc2VlIFlPQ1RPICM0Nzk1KQorICAgICAgIGQuc2V0VmFyRmxhZygiZG9fZGV2c2hlbGwiLCAibWFudWFsZmFrZXJvb3QiLCAiMSIpCisgICAgICAgZC5kZWxWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJmYWtlcm9vdCIpCit9IAorCitkZWYgZGV2cHlzaGVsbChkKToKKworICAgIGltcG9ydCBjb2RlCisgICAgaW1wb3J0IHNlbGVjdAorICAgIGltcG9ydCBzaWduYWwKKyAgICBpbXBvcnQgdGVybWlvcworCisgICAgbSwgcyA9IG9zLm9wZW5wdHkoKQorICAgIHNuYW1lID0gb3MudHR5bmFtZShzKQorCisgICAgZGVmIG5vZWNob2ljYW5vbihmZCk6CisgICAgICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgICAgICBvbGRbM10gPSBvbGRbM10gJn4gdGVybWlvcy5FQ0hPICZ+IHRlcm1pb3MuSUNBTk9OCisgICAgICAgICMgJn4gdGVybWlvcy5JU0lHCisgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQorICAgIAorICAgICMgTm8gZWNobyBvciBidWZmZXJpbmcgb3ZlciB0aGUgcHR5CisgICAgbm9lY2hvaWNhbm9uKHMpCisKKyAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICBpZiBwaWQ6CisgICAgICAgIG9zLmNsb3NlKG0pCisgICAgICAgIG9lX3Rlcm1pbmFsKCJvZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkgJXMgJWQiICUgKHNuYW1lLCBwaWQpLCAnT3BlbkVtYmVkZGVkIERldmVsb3BlciBQeVNoZWxsJywgZCkKKyAgICAgICAgb3MuX2V4aXQoMCkKKyAgICBlbHNlOgorICAgICAgICBvcy5jbG9zZShzKQorCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICBvcy5kdXAyKG0sIHN5cy5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGVyci5maWxlbm8oKSkKKworICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKKyAgICAgICAgc3lzLnN0ZGluID0gb3MuZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3InLCAwKQorCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc3lzLnN0ZG91dCkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzeXMuc3RkZXJyKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHN5cy5zdGRpbikKKworICAgICAgICBfY29udGV4dCA9IHsKKyAgICAgICAgICAgICJvcyI6IG9zLAorICAgICAgICAgICAgImJiIjogYmIsCisgICAgICAgICAgICAidGltZSI6IHRpbWUsCisgICAgICAgICAgICAiZCI6IGQsCisgICAgICAgIH0KKworICAgICAgICBwczEgPSAicHlkZXZzaGVsbD4gIgorICAgICAgICBwczIgPSAiLi4uICIKKyAgICAgICAgYnVmID0gW10KKyAgICAgICAgbW9yZSA9IEZhbHNlCisKKyAgICAgICAgaSA9IGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlcihsb2NhbHM9X2NvbnRleHQpCisgICAgICAgIHByaW50KCJPRSBQeVNoZWxsIChQTiA9ICVzKVxuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorCisgICAgICAgIGRlZiBwcm9tcHQobW9yZSk6CisgICAgICAgICAgICBpZiBtb3JlOgorICAgICAgICAgICAgICAgIHByb21wdCA9IHBzMgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9tcHQgPSBwczEKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocHJvbXB0KQorCisgICAgICAgICMgUmVzdG9yZSBDdHJsK0Mgc2luY2UgYml0YmFrZSBtYXNrcyB0aGlzCisgICAgICAgIGRlZiBzaWduYWxfaGFuZGxlcihzaWduYWwsIGZyYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsX2hhbmRsZXIpCisKKyAgICAgICAgY2hpbGQgPSBOb25lCisKKyAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAociwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtzeXMuc3RkaW5dLCBbXSwgW10sIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMTE6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGludChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSAiXG4iLmpvaW4oYnVmKQorICAgICAgICAgICAgICAgICAgICBtb3JlID0gaS5ydW5zb3VyY2Uoc291cmNlLCAiPHB5c2hlbGw+IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vcmU6CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBbXQorICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBpLndyaXRlKCJcbktleWJvYXJkSW50ZXJydXB0XG4iKQorICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgICAgICAgICAgbW9yZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICAjIEVhc2llc3Qgd2F5IHRvIGVuc3VyZSBldmVyeXRoaW5nIGV4aXRzCisgICAgICAgICAgICAgICAgb3Mua2lsbChjaGlsZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgYnJlYWsKKworcHl0aG9uIGRvX2RldnB5c2hlbGwoKSB7CisgICAgaW1wb3J0IHNpZ25hbAorCisgICAgdHJ5OgorICAgICAgICBkZXZweXNoZWxsKGQpCisgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICMgU3RvcCB0aGUgU0lHVEVSTSBhYm92ZSBjYXVzaW5nIGFuIGVycm9yIGV4aXQgY29kZSAgICAKKyAgICAgICAgcmV0dXJuCisgICAgZmluYWxseToKKyAgICAgICAgcmV0dXJuCit9CithZGR0YXNrIGRldnB5c2hlbGwgYWZ0ZXIgZG9fcGF0Y2gKKworZG9fZGV2cHlzaGVsbFtub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9fZmVhdHVyZXNfY2hlY2suYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTkxZGJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBbGxvdyBjaGVja2luZyBvZiByZXF1aXJlZCBhbmQgY29uZmxpY3RpbmcgRElTVFJPX0ZFQVRVUkVTCisjCisjIEFOWV9PRl9ESVNUUk9fRkVBVFVSRVM6ICAgZW5zdXJlIGF0IGxlYXN0IG9uZSBpdGVtIG9uIHRoaXMgbGlzdCBpcyBpbmNsdWRlZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERJU1RST19GRUFUVVJFUy4KKyMgUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTOiBlbnN1cmUgZXZlcnkgaXRlbSBvbiB0aGlzIGxpc3QgaXMgaW5jbHVkZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBESVNUUk9fRkVBVFVSRVMuCisjIENPTkZMSUNUX0RJU1RST19GRUFUVVJFUzogZW5zdXJlIG5vIGl0ZW0gaW4gdGhpcyBsaXN0IGlzIGluY2x1ZGVkIGluCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTLgorIworIyBDb3B5cmlnaHQgMjAxMyAoQykgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK3B5dGhvbiAoKSB7CisgICAgIyBBc3N1bWUgYXQgbGVhc3Qgb25lIHZhciBpcyBzZXQuCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gKGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgYW55X29mX2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdBTllfT0ZfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzID0gYW55X29mX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGlmIHNldC5pc2Rpc2pvaW50KHNldChhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzKSxzZXQoZGlzdHJvX2ZlYXR1cmVzKSk6CisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgib25lIG9mICclcycgbmVlZHMgdG8gYmUgaW4gRElTVFJPX0ZFQVRVUkVTIiAlIGFueV9vZl9kaXN0cm9fZmVhdHVyZXMpCisKKyAgICByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcyA9IHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJtaXNzaW5nIHJlcXVpcmVkIGRpc3RybyBmZWF0dXJlICclcycgKG5vdCBpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCisKKyAgICBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcyA9IGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJjb25mbGljdGluZyBkaXN0cm8gZmVhdHVyZSAnJXMnIChpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2OGU0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3Ryb2RhdGEuYmJjbGFzcwpAQCAtMCwwICsxLDQ3NCBAQAoraW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYworCithZGRoYW5kbGVyIGRpc3Ryb19ldmVudGhhbmRsZXIKK2Rpc3Ryb19ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCitweXRob24gZGlzdHJvX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRjCisgICAgaW1wb3J0IGNzdgorICAgIGxvZ2ZpbGUgPSBkYy5jcmVhdGVfbG9nX2ZpbGUoZS5kYXRhLCAiZGlzdHJvZGF0YS5jc3YiKQorCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgd3JpdGVyLndyaXRlcm93KFsnUGFja2FnZScsICdEZXNjcmlwdGlvbicsICdPd25lcicsICdMaWNlbnNlJywgCisgICAgICAgICAgICAnVmVyTWF0Y2gnLCAnVmVyc2lvbicsICdVcHN0cmVhbScsICdSZWFzb24nLCAnUmVjaXBlIFN0YXR1cycsCisgICAgICAgICAgICAnRGlzdHJvIDEnLCAnRGlzdHJvIDInLCAnRGlzdHJvIDMnXSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb2RhdGFfbnAKK2RvX2Rpc3Ryb2RhdGFfbnBbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhX25wKCkgeworICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGlzdF9jaGVjaworICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItbmF0aXZlIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZSBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zcyIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3MiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItY3Jvc3NzZGsiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWNyb3Nzc2RrIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnJlcGxhY2UoIm5hdGl2ZXNkay0iLCAiIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZVNESyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZCArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICAgICAgYmIubm90ZSgiaW5pdGlhbCBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgcGN1cnZlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGRlc2MgPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpCisgICAgICAgIGlmIHBkZXNjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBkZXNjID0gcGRlc2MucmVwbGFjZSgnLCcsJycpCisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCdcbicsJycpCisKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwbGljZW5zZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKS5yZXBsYWNlKCcsJywnXycpCisKKyAgICAgICAgcnN0YXR1cyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9DT0xPUicsIFRydWUpCisgICAgICAgIGlmIHJzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcnN0YXR1cyA9IHJzdGF0dXMucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgcHVwdmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBpZiBwY3VydmVyID09IHB1cHZlcjoKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMCIKKyAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBpZiBub3VwZGF0ZV9yZWFzb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMSIKKyAgICAgICAgICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBub3VwZGF0ZV9yZWFzb24ucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICAgICAgcmxyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9EQVRFJywgVHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBiYi5ub3RlKCJESVNUUk86ICVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzXG4iICUgXAorICAgICAgICAgICAgICAgICAgKHBuYW1lLCBwZGVzYywgbWFpbnRhaW5lciwgcGxpY2Vuc2UsIHZlcm1hdGNoLCBwY3VydmVyLCBwdXB2ZXIsIG5vdXBkYXRlX3JlYXNvbiwgcnN0YXR1cykpCisgICAgICAgIGxpbmUgPSBwbgorICAgICAgICBmb3IgaSBpbiByZXN1bHQ6CisgICAgICAgICAgICBsaW5lID0gbGluZSArICIsIiArIGkKKyAgICAgICAgYmIubm90ZSgiJXNcbiIgJSBsaW5lKQorfQorCithZGR0YXNrIGRpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhKCkgeworICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJkaXN0cm9kYXRhLmNzdiIpCisKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkaXN0X2NoZWNrCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1uYXRpdmUiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmUgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4ucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zc3NkayIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3NzZGsiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItaW5pdGlhbCIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgICAgICBiYi5ub3RlKCJpbml0aWFsIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gbG9jYWxkYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwY3VydmVyID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGRlc2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCcsJywnJykKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJ1xuJywnJykKKworICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHBsaWNlbnNlID0gbG9jYWxkYXRhLmdldFZhcignTElDRU5TRScsIFRydWUpLnJlcGxhY2UoJywnLCdfJykKKworICAgICAgICByc3RhdHVzID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX0NPTE9SJywgVHJ1ZSkKKyAgICAgICAgaWYgcnN0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByc3RhdHVzID0gcnN0YXR1cy5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBwdXB2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIHBjdXJ2ZXIgPT0gcHVwdmVyOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIxIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIwIgorCisgICAgICAgIG5vdXBkYXRlX3JlYXNvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9OT19VUERBVEVfUkVBU09OJywgVHJ1ZSkKKyAgICAgICAgaWYgbm91cGRhdGVfcmVhc29uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjEiCisgICAgICAgICAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbm91cGRhdGVfcmVhc29uLnJlcGxhY2UoJywnLCcnKQorCisgICAgICAgIG1haW50YWluZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfTUFJTlRBSU5FUicsIFRydWUpCisgICAgICAgIHJscmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fREFURScsIFRydWUpCisgICAgICAgICMgZG8gdGhlIGNvbXBhcmlzb24KKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICByb3cgPSBbcG5hbWUsIHBkZXNjLCBtYWludGFpbmVyLCBwbGljZW5zZSwgdmVybWF0Y2gsIHBjdXJ2ZXIsIHB1cHZlciwgbm91cGRhdGVfcmVhc29uLCByc3RhdHVzXQorICAgICAgICAgICAgcm93LmV4dGVuZChyZXN1bHQpCisKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhyb3cpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKworYWRkdGFzayBkaXN0cm9kYXRhYWxsIGFmdGVyIGRvX2Rpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjcmRlcHRhc2tdID0gImRvX2Rpc3Ryb2RhdGFhbGwgZG9fZGlzdHJvZGF0YSIKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2Rpc3Ryb2RhdGFhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2Rpc3Ryb2RhdGFhbGwoKSB7CisgICAgICAgIDoKK30KKworYWRkaGFuZGxlciBjaGVja3BrZ19ldmVudGhhbmRsZXIKK2NoZWNrcGtnX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK3B5dGhvbiBjaGVja3BrZ19ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGNzdgorCisgICAgZGVmIHBhcnNlX2Nzdl9maWxlKGZpbGVuYW1lKToKKyAgICAgICAgcGFja2FnZV9kaWN0ID0ge30KKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5yZWFkZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKKyAgICAgICAgICAgICAgICBwbiA9IHJvd1swXQorCisgICAgICAgICAgICAgICAgaWYgcmVhZGVyLmxpbmVfbnVtID09IDE6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IHJvdworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IHBuIGluIHBhY2thZ2VfZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfZGljdFtwbl0gPSByb3cKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXIpCisgICAgICAgICAgICBmb3IgcG4gaW4gcGFja2FnZV9kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3cocGFja2FnZV9kaWN0W3BuXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGRlbCBwYWNrYWdlX2RpY3QKKworICAgIGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIkJ1aWxkU3RhcnRlZCI6CisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICAgICAgbG9nZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBoZWFkZXJzID0gWydQYWNrYWdlJywgJ1ZlcnNpb24nLCAnVXB2ZXInLCAnTGljZW5zZScsICdTZWN0aW9uJywKKyAgICAgICAgICAgICAgICAnSG9tZScsICdSZWxlYXNlJywgJ0RlcGVuZHMnLCAnQnVnVHJhY2tlcicsICdQRScsICdEZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgJ1N0YXR1cycsICdUcmFja2luZycsICdVUkknLCAnTUFJTlRBSU5FUicsICdOb1VwUmVhc29uJ10KKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXJzKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJCdWlsZENvbXBsZXRlZCI6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBmaWxlbmFtZSA9ICJ0bXAvbG9nL2NoZWNrcGtnLmNzdiIKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIlZmlsZW5hbWUpCisgICAgICAgICAgICBwYXJzZV9jc3ZfZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2twa2cKK2RvX2NoZWNrcGtnW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2twa2coKSB7CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgICAgIGZyb20gYmIudXRpbHMgaW1wb3J0IHZlcmNtcF9zdHJpbmcKKyAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IsIE5vTWV0aG9kRXJyb3IsIGRlY29kZXVybAorCisgICAgICAgICIiImZpcnN0IGNoZWNrIHdoZXRoZXIgYSB1cmkgaXMgcHJvdmlkZWQiIiIKKyAgICAgICAgc3JjX3VyaSA9IGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNyY191cmk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHVyaV90eXBlLCBfLCBfLCBfLCBfLCBfID0gZGVjb2RldXJsKHNyY191cmkpCisKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuYW1lLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1pbml0aWFsIikKKyAgICAgICAgICAgIGJiLm5vdGUoImluaXRpYWwgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwdmVyc2lvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGxpY2Vuc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgcHNlY3Rpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGhvbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpCisgICAgICAgIHByZWxlYXNlID0gbG9jYWxkYXRhLmdldFZhcignUFInLCBUcnVlKQorICAgICAgICBwZGVwZW5kcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKQorICAgICAgICBwYnVndHJhY2tlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ0JVR1RSQUNLRVInLCBUcnVlKQorICAgICAgICBwcGUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQRScsIFRydWUpCisgICAgICAgIHBzcmN1cmkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKworICAgICAgICAiIiIgR2V0IHVwc3RyZWFtIHZlcnNpb24gdmVyc2lvbiAiIiIKKyAgICAgICAgcHVwdmVyID0gIiIKKyAgICAgICAgcHN0YXR1cyA9ICIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXYgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24obG9jYWxkYXRhKQorCisgICAgICAgICAgICBwdXB2ZXIgPSB1dlsndmVyc2lvbiddCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGlmIGUgaXMgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIkVyckFjY2VzcyIKKyAgICAgICAgICAgIGVsaWYgZSBpcyBOb01ldGhvZEVycm9yOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiRXJyVW5zdXBwb3J0ZWRQcm90byIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJFcnJVbmtub3duIgorCisgICAgICAgICIiIlNldCB1cHN0cmVhbSB2ZXJzaW9uIHN0YXR1cyIiIgorICAgICAgICBpZiBub3QgcHVwdmVyOgorICAgICAgICAgICAgcHVwdmVyID0gIk4vQSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2ZXJzaW9uLCB1cmlfdHlwZSkKKyAgICAgICAgICAgIHVwdiwgXywgXyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdXB2ZXIsIHVyaV90eXBlKQorCisgICAgICAgICAgICBjbXAgPSB2ZXJjbXBfc3RyaW5nKHB2LCB1cHYpCisgICAgICAgICAgICBpZiBjbXAgPT0gLTE6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJVUERBVEUiCisgICAgICAgICAgICBlbGlmIGNtcCA9PSAwOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiTUFUQ0giCisKKyAgICAgICAgcHNyY3VyaSA9IHBzcmN1cmkuc3BsaXQoKVswXQorICAgICAgICBwZGVwZW5kcyA9ICIiLmpvaW4ocGRlcGVuZHMuc3BsaXQoIlx0IikpCisgICAgICAgIHBkZXNjID0gIiIuam9pbihwZGVzYy5zcGxpdCgiXHQiKSkKKyAgICAgICAgbm9fdXBncl9yZWFzb24gPSBkLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFtwbmFtZSwgcHZlcnNpb24sIHB1cHZlciwgcGxpY2Vuc2UsIHBzZWN0aW9uLCBwaG9tZSwgCisgICAgICAgICAgICAgICAgcHJlbGVhc2UsIHBkZXBlbmRzLCBwYnVndHJhY2tlciwgcHBlLCBwZGVzYywgcHN0YXR1cywgcHVwdmVyLAorICAgICAgICAgICAgICAgIHBzcmN1cmksIG1haW50YWluZXIsIG5vX3VwZ3JfcmVhc29uXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCithZGR0YXNrIGNoZWNrcGtnYWxsIGFmdGVyIGRvX2NoZWNrcGtnCitkb19jaGVja3BrZ2FsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2twa2dhbGwgZG9fY2hlY2twa2ciCitkb19jaGVja3BrZ2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2twa2dhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2NoZWNrcGtnYWxsKCkgeworICAgICAgICA6Cit9CisKK2FkZGhhbmRsZXIgZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcgorZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK3B5dGhvbiBkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyKCkgeworICAgICIiImluaXRpYWxpemUgbG9nIGZpbGVzLiIiIgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICByZXN1bHRfZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJkaXN0cm9jaGVjay5jc3YiKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb19jaGVjaworZG9fZGlzdHJvX2NoZWNrW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fZGlzdHJvX2NoZWNrKCkgeworICAgICIiImNoZWNrcyBpZiB0aGUgcGFja2FnZSBpcyBwcmVzZW50IGluIG90aGVyIHB1YmxpYyBMaW51eCBkaXN0cm9zIiIiCisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJyxkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICByZXN1bHRfZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiZGlzdHJvY2hlY2suY3N2IikKKyAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICBkYy51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAjIGRvIHRoZSBjb21wYXJpc29uCisgICAgcmVzdWx0ID0gZGMuY29tcGFyZV9pbl9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyLCBkKQorCisgICAgIyBzYXZlIHRoZSByZXN1bHRzCisgICAgZGMuc2F2ZV9kaXN0cm9fY2hlY2tfcmVzdWx0KHJlc3VsdCwgZGF0ZXRpbWUsIHJlc3VsdF9maWxlLCBkKQorfQorCithZGR0YXNrIGRpc3Ryb19jaGVja2FsbCBhZnRlciBkb19kaXN0cm9fY2hlY2sKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNyZGVwdGFza10gPSAiZG9fZGlzdHJvX2NoZWNrYWxsIGRvX2Rpc3Ryb19jaGVjayIKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGlzdHJvX2NoZWNrYWxsW25vc3RhbXBdID0gIjEiCitkb19kaXN0cm9fY2hlY2thbGwoKSB7CisgICAgICAgIDoKK30KKyMKKyNDaGVjayBNaXNzaW5nIExpY2Vuc2UgVGV4dC4KKyNVc2UgdGhpcyB0YXNrIHRvIGdlbmVyYXRlIHRoZSBtaXNzaW5nIGxpY2Vuc2UgdGV4dCBkYXRhIGZvciBwa2ctcmVwb3J0IHN5c3RlbSwKKyN0aGVuIHdlIGNhbiBzZWFyY2ggdGhvc2UgcmVjaXBlcyB3aGljaCBsaWNlbnNlIHRleHQgaXNuJ3QgZXhzaXQgaW4gY29tbW9uLWxpY2Vuc2VzIGRpcmVjdG9yeQorIworYWRkaGFuZGxlciBjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyCitjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorcHl0aG9uIGNoZWNrbGljZW5zZV9ldmVudGhhbmRsZXIoKSB7CisgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgaW1wb3J0IGNzdgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICBsb2dmaWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgIm1pc3NpbmdsaWNlbnNlLmNzdiIpCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgIHdyaXRlci53cml0ZXJvdyhbJ1BhY2thZ2UnLCAnTGljZW5zZScsICdNaXNzaW5nTGljZW5zZSddKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZQorZG9fY2hlY2tsaWNlbnNlW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2tsaWNlbnNlKCkgeworICAgIGltcG9ydCBjc3YKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAibWlzc2luZ2xpY2Vuc2UuY3N2IikKKyAgICBnZW5lcmljX2RpcmVjdG9yeSA9IGQuZ2V0VmFyKCdDT01NT05fTElDRU5TRV9ESVInLCBUcnVlKQorICAgIGxpY2Vuc2VfdHlwZXMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgZm9yIGxpY2Vuc2VfdHlwZSBpbiAoKGxpY2Vuc2VfdHlwZXMucmVwbGFjZSgnKycsICcnKS5yZXBsYWNlKCd8JywgJyYnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnKCcsICcnKS5yZXBsYWNlKCcpJywgJycpLnJlcGxhY2UoJzsnLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnJykucmVwbGFjZSgiICIsICIiKS5zcGxpdCgiJiIpKSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZ2VuZXJpY19kaXJlY3RvcnksIGxpY2Vuc2VfdHlwZSkpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbcG4sIGxpY2Vuc2VfdHlwZXMsIGxpY2Vuc2VfdHlwZV0pCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZWFsbCBhZnRlciBkb19jaGVja2xpY2Vuc2UKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2tsaWNlbnNlYWxsIGRvX2NoZWNrbGljZW5zZSIKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2tsaWNlbnNlYWxsW25vc3RhbXBdID0gIjEiCitkb19jaGVja2xpY2Vuc2VhbGwoKSB7CisgICAgICAgIDoKK30KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTE4ZThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUgJHtQWVRIT05fUE59IiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsICcke1BZVEhPTl9QTn0tY29yZSddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IgorCitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWNvbW1vbi1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3Mjc1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjQgQEAKK2luaGVyaXQgcHl0aG9uLWRpcgorCitFWFRSQV9PRU1BS0UgPSAiIgorCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitQQUNLQUdFUyA9ICIke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRiZyAke1BOfS1kb2MgJHtQTn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKiAke2xpYmRpcn0vJHtQWVRIT05fRElSfS8qIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIlwKKyAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIFwKKyIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAke2RhdGFkaXJ9L3BrZ2NvbmZpZyBcCisgICR7bGliZGlyfS9wa2djb25maWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmxhIFwKKyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLy5kZWJ1ZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyovKi8uZGVidWcgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtbmF0aXZlLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDljYjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZQorCitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlIiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLXRvb2xzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzNDUwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsc19kb19jb21waWxlKCkgeworICAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkX2V4dCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGVjaG8gIkJlZ2lubmluZyAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgZWNobyAiU3RlcCAyIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgZWNobyAiU3RlcCAzIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICAjIHN1cHBvcnQgZmlsZW5hbWVzIHdpdGggKnNwYWNlcyoKKyAgICAgICAgZmluZCAke0R9IC1uYW1lICIqLnB5IiAtcHJpbnQwIHwgd2hpbGUgcmVhZCAtZCAkJ1wwJyBpIDsgZG8gXAorICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtEfTo6ZyAkaQorICAgICAgICBkb25lCisKKyAgICAgICAgZWNobyAiU3RlcCA0IG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGVjaG8gIlN0ZXAgNCBvZiAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBlY2hvICJTdGVwIDUgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIAorICAgICAgICAjCisgICAgICAgICMgRklYTUU6IEJhbmRhaWQgYWdhaW5zdCB3cm9uZyBkYXRhZGlyIGNvbXB1dGF0aW9uCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtkYXRhZGlyfS9zaGFyZTsgdGhlbgorICAgICAgICAgICAgbXYgLWYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8KKyAgICAgICAgZmkKK30KKworI0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2NzEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MKQEAgLTAsMCArMSw4NiBAQAoraW5oZXJpdCBkaXN0dXRpbHMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHUyA/PSAiLS1pbnN0YWxsLWRpcj0ke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorRElTVFVUSUxTX1NUQUdFX0FMTF9BUkdTID89ICItLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke1NUQUdJTkdfREFUQURJUn0iCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID89ICItLXByZWZpeD0ke0R9LyR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtEfS8ke2RhdGFkaXJ9IgorCitkaXN0dXRpbHNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKKyAgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAtLWluc3RhbGwtbGliPSR7RH0vJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gJHtESVNUVVRJTFNfSU5TVEFMTF9BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgorCisgICAgICAgICMgc3VwcG9ydCBmaWxlbmFtZXMgd2l0aCAqc3BhY2VzKgorICAgICAgICAjIG9ubHkgbW9kaWZ5IGZpbGUgaWYgaXQgY29udGFpbnMgcGF0aCAgYW5kIHJlY29tcGlsZSBpdAorICAgICAgICBmaW5kICR7RH0gLW5hbWUgIioucHkiIC1leGVjIGdyZXAgLXEgJHtEfSB7fSBcOyAtZXhlYyBzZWQgLWkgLWUgczoke0R9OjpnIHt9IFw7IC1leGVjICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiAtbWNvbXBpbGVhbGwge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIGlmIFsgJHtQTn0gIT0gIiR7QlBOfS1uYXRpdmUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAJc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uOiR7YmluZGlyfS9lbnZcIHB5dGhvbjpnICRpCisJCWZpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBpZiBbICR7UE59ICE9ICIke0JQTn0tbmF0aXZlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgCXNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbjoke2JpbmRpcn0vZW52XCBweXRob246ZyAkaQorCQlmaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zaXRlLnB5KgorICAgICAgICAKKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiBCYW5kYWlkIGFnYWluc3Qgd3JvbmcgZGF0YWRpciBjb21wdXRhdGlvbgorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7ZGF0YWRpcn0vc2hhcmU7IHRoZW4KKyAgICAgICAgICAgIG12IC1mICR7RH0ke2RhdGFkaXJ9L3NoYXJlLyogJHtEfSR7ZGF0YWRpcn0vCisgICAgICAgICAgICBybWRpciAke0R9JHtkYXRhZGlyfS9zaGFyZQorICAgICAgICBmaQorCisJIyBGaXggYmFja3BvcnQgbW9kdWxlcworCWlmIHRlc3QgLWUgJHtTVEFHSU5HX0xJQkRJUn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL2JhY2twb3J0cy9fX2luaXRfXy5weSAmJiB0ZXN0IC1lICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHk7IHRoZW4KKwkgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYmFja3BvcnRzL19faW5pdF9fLnB5OworCSAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHljOworCWZpCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNhYTAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlICR7UFlUSE9OX1BOfSIsICIiXVsoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJycpXX0iCitSREVQRU5EU18ke1BOfSArPSAiJHtAWycnLCAnJHtQWVRIT05fUE59LWNvcmUnXVsnJHtDTEFTU09WRVJSSURFfScgPT0gJ2NsYXNzLXRhcmdldCddfSIKKworUFlUSE9OX0JBU0VWRVJTSU9OID0gIjMuNCIKK1BZVEhPTl9BQkkgPSAibSIKKworaW5oZXJpdCBkaXN0dXRpbHMtY29tbW9uLWJhc2UgcHl0aG9uM25hdGl2ZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTExNzEwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtbmF0aXZlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjQiCitQWVRIT05fQUJJID0gIm0iCisKK2luaGVyaXQgZGlzdHV0aWxzLW5hdGl2ZS1iYXNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwOWVmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMuYmJjbGFzcwpAQCAtMCwwICsxLDk2IEBACitpbmhlcml0IGRpc3R1dGlsczMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX0JVSUxEX0VYVF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsczNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IFwKKyAgICAgICAgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGRfZXh0IGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyAke0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19zdGFnZV9hbGwoKSB7CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19kb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCisgICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQorICAgICAgICBmaQorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7U1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgIyBzdXBwb3J0IGZpbGVuYW1lcyB3aXRoICpzcGFjZXMqCisgICAgICAgIGZpbmQgJHtEfSAtbmFtZSAiKi5weSIgLWV4ZWMgZ3JlcCAtcSAke0R9IHt9IFw7IC1leGVjIHNlZCAtaSAtZSBzOiR7RH06Omcge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfToke2JpbmRpcn0vZW52XCAke1BZVEhPTl9QTn06ZyAkaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7c2JpbmRpcn07IHRoZW4KKyAgICAgICAgICAgIGZvciBpIGluICR7RH0ke3NiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi0ke1BZVEhPTl9QTn0vJHtQWVRIT05fUE59OiR7YmluZGlyfS9lbnZcICR7UFlUSE9OX1BOfTpnICRpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgCisgICAgICAgICMKKyAgICAgICAgIyBGSVhNRTogQmFuZGFpZCBhZ2FpbnN0IHdyb25nIGRhdGFkaXIgY29tcHV0YXRpb24KKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2RhdGFkaXJ9L3NoYXJlOyB0aGVuCisgICAgICAgICAgICBtdiAtZiAke0R9JHtkYXRhZGlyfS9zaGFyZS8qICR7RH0ke2RhdGFkaXJ9LworICAgICAgICAgICAgcm1kaXIgJHtEfSR7ZGF0YWRpcn0vc2hhcmUKKyAgICAgICAgZmkKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE1ODE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpAQCAtMCwwICsxLDkyIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBMaW51eCBGb3VuZGF0aW9uCisjIEF1dGhvcjogUmljaGFyZCBQdXJkaWUKKyMgU29tZSBjb2RlIGFuZCBpbmZsdWVuY2UgdGFrZW4gZnJvbSBzcmN0cmVlLmJiY2xhc3M6CisjIENvcHlyaWdodCAoQykgMjAwOSBDaHJpcyBMYXJzb24gPGNsYXJzb25Aa2VyZ290aC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisjCisjIGV4dGVybmFsc3JjLmJiY2xhc3MgZW5hYmxlcyB1c2Ugb2YgYW4gZXhpc3Rpbmcgc291cmNlIHRyZWUsIHVzdWFsbHkgZXh0ZXJuYWwgdG8gCisjIHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYSBwaWVjZSBvZiBzb2Z0d2FyZSByYXRoZXIgdGhhbiB0aGUgdXN1YWwgZmV0Y2gvdW5wYWNrL3BhdGNoCisjIHByb2Nlc3MuCisjCisjIFRvIHVzZSwgYWRkIGV4dGVybmFsc3JjIHRvIHRoZSBnbG9iYWwgaW5oZXJpdCBhbmQgc2V0IEVYVEVSTkFMU1JDIHRvIHBvaW50IGF0IHRoZQorIyBkaXJlY3RvcnkgeW91IHdhbnQgdG8gdXNlIGNvbnRhaW5pbmcgdGhlIHNvdXJjZXMgZS5nLiBmcm9tIGxvY2FsLmNvbmYgZm9yIGEgcmVjaXBlCisjIGNhbGxlZCAibXlyZWNpcGUiIHlvdSB3b3VsZCBkbzoKKyMKKyMgSU5IRVJJVCArPSAiZXh0ZXJuYWxzcmMiCisjIEVYVEVSTkFMU1JDX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworIyBJbiBvcmRlciB0byBtYWtlIHRoaXMgY2xhc3Mgd29yayBmb3IgYm90aCB0YXJnZXQgYW5kIG5hdGl2ZSB2ZXJzaW9ucyAob3Igd2l0aAorIyBtdWx0aWxpYnMvY3Jvc3Mgb3Igb3RoZXIgQkJDTEFTU0VYVEVORCB2YXJpYW50cyksIEIgaXMgc2V0IHRvIHBvaW50IHRvIGEgc2VwYXJhdGUKKyMgZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3JrIGRpcmVjdG9yeSAoc3BsaXQgc291cmNlIGFuZCBidWlsZCBkaXJlY3RvcmllcykuIFRoaXMgaXMKKyMgdGhlIGRlZmF1bHQsIGJ1dCB0aGUgYnVpbGQgZGlyZWN0b3J5IGNhbiBiZSBzZXQgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaWYKKyMgY2lyY3Vtc3RhbmNlcyBkaWN0YXRlIGJ5IHNldHRpbmcgRVhURVJOQUxTUkNfQlVJTEQgdG8gdGhlIHNhbWUgdmFsdWUsIGUuZy46CisjCisjIEVYVEVSTkFMU1JDX0JVSUxEX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworCitTUkNUUkVFQ09WRVJFRFRBU0tTID89ICJkb19wYXRjaCBkb191bnBhY2sgZG9fZmV0Y2giCisKK3B5dGhvbiAoKSB7CisgICAgZXh0ZXJuYWxzcmMgPSBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKQorICAgIGlmIGV4dGVybmFsc3JjOgorICAgICAgICBkLnNldFZhcignUycsIGV4dGVybmFsc3JjKQorICAgICAgICBleHRlcm5hbHNyY2J1aWxkID0gZC5nZXRWYXIoJ0VYVEVSTkFMU1JDX0JVSUxEJywgVHJ1ZSkKKyAgICAgICAgaWYgZXh0ZXJuYWxzcmNidWlsZDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgZXh0ZXJuYWxzcmNidWlsZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgJyR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LycpCisKKyAgICAgICAgbG9jYWxfc3JjdXJpID0gW10KKyAgICAgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCksIGQpCisgICAgICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgICAgIHVybF9kYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICAgICAgcGFybSA9IHVybF9kYXRhLnBhcm0KKyAgICAgICAgICAgIGlmICh1cmxfZGF0YS50eXBlID09ICdmaWxlJyBvcgorICAgICAgICAgICAgICAgICAgICAndHlwZScgaW4gcGFybSBhbmQgcGFybVsndHlwZSddID09ICdrbWV0YScpOgorICAgICAgICAgICAgICAgIGxvY2FsX3NyY3VyaS5hcHBlbmQodXJsKQorCisgICAgICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyAnLmpvaW4obG9jYWxfc3JjdXJpKSkKKworICAgICAgICBpZiAne1NSQ1BWfScgaW4gZC5nZXRWYXIoJ1BWJywgRmFsc2UpOgorICAgICAgICAgICAgIyBEdW1teSB2YWx1ZSBiZWNhdXNlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIGNhbid0IGJlIGNhbGxlZCB3aXRoIGJsYW5rIFNSQ19VUkkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTUkNQVicsICc5OTknKQorCisgICAgICAgIHRhc2tzID0gZmlsdGVyKGxhbWJkYSBrOiBkLmdldFZhckZsYWcoaywgInRhc2siKSwgZC5rZXlzKCkpCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiB0YXNrLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgICAgICAjIHNzdGF0ZSBpcyBuZXZlciBnb2luZyB0byB3b3JrIGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZXMsIGRpc2FibGUgaXQKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2luY2UgY29uZmlndXJlIHdpbGwgbGlrZWx5IHRvdWNoICR7U30sIGVuc3VyZSBvbmx5IHdlIGxvY2sgc28gb25lIHRhc2sgaGFzIGFjY2VzcyBhdCBhIHRpbWUKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcodGFzaywgImxvY2tmaWxlcyIsICIgJHtTfS9zaW5nbGV0YXNrLmxvY2siKQorCisgICAgICAgICAgICAjIFdlIGRvIG5vdCB3YW50IG91ciBzb3VyY2UgdG8gYmUgd2lwZWQgb3V0LCBldmVyIChrZXJuZWwuYmJjbGFzcyBkb2VzIHRoaXMgZm9yIGRvX2NsZWFuKQorICAgICAgICAgICAgY2xlYW5kaXJzID0gKGQuZ2V0VmFyRmxhZyh0YXNrLCAnY2xlYW5kaXJzJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBzZXR2YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgY2xlYW5kaXIgaW4gY2xlYW5kaXJzWzpdOgorICAgICAgICAgICAgICAgIGlmIGQuZXhwYW5kKGNsZWFuZGlyKSA9PSBleHRlcm5hbHNyYzoKKyAgICAgICAgICAgICAgICAgICAgY2xlYW5kaXJzLnJlbW92ZShjbGVhbmRpcikKKyAgICAgICAgICAgICAgICAgICAgc2V0dmFsdWUgPSBUcnVlCisgICAgICAgICAgICBpZiBzZXR2YWx1ZToKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcodGFzaywgJ2NsZWFuZGlycycsICcgJy5qb2luKGNsZWFuZGlycykpCisKKyAgICAgICAgZmV0Y2hfdGFza3MgPSBbJ2RvX2ZldGNoJywgJ2RvX3VucGFjayddCisgICAgICAgICMgSWYgd2UgZGVsdGFzayBkb19wYXRjaCwgdGhlcmUncyBubyBkZXBlbmRlbmN5IHRvIGVuc3VyZSBkb191bnBhY2sgZ2V0cyBydW4sIHNvIGFkZCBvbmUKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwcycsIFsnZG9fdW5wYWNrJ10pCisKKyAgICAgICAgZm9yIHRhc2sgaW4gZC5nZXRWYXIoIlNSQ1RSRUVDT1ZFUkVEVEFTS1MiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgbG9jYWxfc3JjdXJpIGFuZCB0YXNrIGluIGZldGNoX3Rhc2tzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisKKyAgICAgICAgZC5wcmVwZW5kVmFyRmxhZygnZG9fY29tcGlsZScsICdwcmVmdW5jcycsICJleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMgIikKKworICAgICAgICAjIEVuc3VyZSBjb21waWxhdGlvbiBoYXBwZW5zIGV2ZXJ5IHRpbWUKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19jb21waWxlJywgJ25vc3RhbXAnLCAnMScpCit9CisKK3B5dGhvbiBleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMoKSB7CisgICAgIyBNYWtlIGl0IG9idmlvdXMgdGhhdCB0aGlzIGlzIGhhcHBlbmluZywgc2luY2UgZm9yZ2V0dGluZyBhYm91dCBpdCBjb3VsZCBsZWFkIHRvIG11Y2ggY29uZnVzaW9uCisgICAgYmIud2FybignQ29tcGlsaW5nICVzIGZyb20gZXh0ZXJuYWwgc291cmNlICVzJyAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ0VYVEVSTkFMU1JDJywgVHJ1ZSkpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZjU3YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9leHRyYXVzZXJzLmJiY2xhc3MKQEAgLTAsMCArMSw2NSBAQAorIyBUaGlzIGJiY2xhc3MgaXMgbWFpbmx5IHVzZWQgZm9yIGltYWdlIGxldmVsIHVzZXIvZ3JvdXAgY29uZmlndXJhdGlvbi4KKyMgSW5oZXJpdCB0aGlzIGNsYXNzIGlmIHlvdSB3YW50IHRvIG1ha2UgRVhUUkFfVVNFUlNfUEFSQU1TIGVmZmVjdGl2ZS4KKworIyBCZWxvdyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisjIElOSEVSSVQgKz0gImV4dHJhdXNlcnMiCisjIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisjIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisjIGdyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyMgdXNlcmRlbCBub2JvZHk7IFwKKyMgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyMgZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisjIHVzZXJtb2QgLXMgL2Jpbi9zaCB0ZXN0ZXI7IFwKKyMgIgorCisKK2luaGVyaXQgdXNlcmFkZF9iYXNlCisKK0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiAke0BbJycsICdiYXNlLXBhc3N3ZCBzaGFkb3cnXVtib29sKGQuZ2V0VmFyKCdFWFRSQV9VU0VSU19QQVJBTVMnLCBUcnVlKSldfSIKKworIyBJbWFnZSBsZXZlbCB1c2VyIC8gZ3JvdXAgc2V0dGluZ3MKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZCA9ICIgc2V0X3VzZXJfZ3JvdXA7IgorCisjIEltYWdlIGxldmVsIHVzZXIgLyBncm91cCBzZXR0aW5ncworc2V0X3VzZXJfZ3JvdXAgKCkgeworCXVzZXJfZ3JvdXBfc2V0dGluZ3M9IiR7RVhUUkFfVVNFUlNfUEFSQU1TfSIKKwlleHBvcnQgUFNFVURPPSIke0ZBS0VST09URU5WfSAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcn0vcHNldWRvIgorCXNldHRpbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMWAKKwlyZW1haW5pbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMi1gCisJd2hpbGUgdGVzdCAieCRzZXR0aW5nIiAhPSAieCI7IGRvCisJCWNtZD1gZWNobyAkc2V0dGluZyB8IGN1dCAtZCAnICcgLWYxYAorCQlvcHRzPWBlY2hvICRzZXR0aW5nIHwgY3V0IC1kICcgJyAtZjItYAorCQkjIERpZmZlcmVudCBmcm9tIHVzZXJhZGQuYmJjbGFzcywgdGhlcmUncyBubyBmaWxlIGxvY2tpbmcgaXNzdWUgaGVyZSwgYXMKKwkJIyB0aGlzIHNldHRpbmcgaXMgYWN0dWFsbHkgYSBzZXJpYWwgcHJvY2Vzcy4gU28gd2Ugb25seSByZXRyeSBvbmNlLgorCQljYXNlICRjbWQgaW4KKwkJCXVzZXJhZGQpCisJCQkJcGVyZm9ybV91c2VyYWRkICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBhZGQpCisJCQkJcGVyZm9ybV9ncm91cGFkZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJkZWwpCisJCQkJcGVyZm9ybV91c2VyZGVsICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBkZWwpCisJCQkJcGVyZm9ybV9ncm91cGRlbCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJtb2QpCisJCQkJcGVyZm9ybV91c2VybW9kICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBtb2QpCisJCQkJcGVyZm9ybV9ncm91cG1vZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCSopCisJCQkJYmJmYXRhbCAiSW52YWxpZCBjb21tYW5kIGluIEVYVFJBX1VTRVJTX1BBUkFNUzogJGNtZCIKKwkJCQk7OworCQllc2FjCisJCSMgQXZvaWQgaW5maW5pdGUgbG9vcCBpZiB0aGUgbGFzdCBwYXJhbWV0ZXIgZG9lc24ndCBlbmQgd2l0aCAnOycKKwkJaWYgWyAiJHNldHRpbmciID0gIiRyZW1haW5pbmciIF07IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCSMgaXRlcmF0ZSB0byB0aGUgbmV4dCBzZXR0aW5nCisJCXNldHRpbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYxYAorCQlyZW1haW5pbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYyLWAKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ZvbnRjYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjIzODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDQ1IEBACisjCisjIFRoaXMgY2xhc3Mgd2lsbCBnZW5lcmF0ZSB0aGUgcHJvcGVyIHBvc3RpbnN0L3Bvc3RybSBzY3JpcHRsZXRzIGZvciBmb250CisjIHBhY2thZ2VzLgorIworCitERVBFTkRTICs9ICJxZW11LW5hdGl2ZSIKK2luaGVyaXQgcWVtdQorCitGT05UX1BBQ0tBR0VTID8/PSAiJHtQTn0iCitGT05UX0VYVFJBX1JERVBFTkRTID89ICJmb250Y29uZmlnLXV0aWxzIgorRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKK2ZvbnRjYWNoZV9jb21tb24oKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdIDsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfZm9udF9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gYmluZGlyPSR7YmluZGlyfSBcCisJCWxpYmRpcj0ke2xpYmRpcn0gYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0gZm9udGNvbmZpZ2NhY2hlZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9CitlbHNlCisJZmMtY2FjaGUKK2ZpCit9CisKK3B5dGhvbiAoKSB7CisgICAgZm9udF9wa2dzID0gZC5nZXRWYXIoJ0ZPTlRfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZGVwcyA9IGQuZ2V0VmFyKCJGT05UX0VYVFJBX1JERVBFTkRTIiwgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gZm9udF9wa2dzOgorICAgICAgICBpZiBkZXBzOiBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgJyAnK2RlcHMpCit9CisKK3B5dGhvbiBhZGRfZm9udGNhY2hlX3Bvc3RpbnN0cygpIHsKKyAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdGT05UX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGZvbnRzIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2ZvbnRjYWNoZV9jb21tb24nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignZm9udGNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCitQQUNLQUdFRlVOQ1MgPSsgImFkZF9mb250Y2FjaGVfcG9zdGluc3RzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjYxM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9mcy11dWlkLmJiY2xhc3MKQEAgLTAsMCArMSwyNCBAQAorIyBFeHRyYWN0IFVVSUQgZnJvbSAke1JPT1RGU30sIHdoaWNoIG11c3QgaGF2ZSBiZWVuIGJ1aWx0CisjIGJ5IHRoZSB0aW1lIHRoYXQgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gT25seSB3b3JrcworIyBvbiBleHQgZmlsZSBzeXN0ZW1zIGFuZCBkZXBlbmRzIG9uIHR1bmUyZnMuCitkZWYgZ2V0X3Jvb3Rmc191dWlkKGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgcm9vdGZzID0gZC5nZXRWYXIoJ1JPT1RGUycsIFRydWUpCisgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd0dW5lMmZzJywgJy1sJywgcm9vdGZzXSkKKyAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRmlsZXN5c3RlbSBVVUlEOicpOgorICAgICAgICAgICAgdXVpZCA9IGxpbmUuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGJiLm5vdGUoJ1VVSUQgb2YgJXM6ICVzJyAlIChyb290ZnMsIHV1aWQpKQorICAgICAgICAgICAgcmV0dXJuIHV1aWQKKyAgICBiYi5mYXRhbCgnQ291bGQgbm90IGRldGVybWluZSBmaWxlc3lzdGVtIFVVSUQgb2YgJXMnICUgcm9vdGZzKQorCisjIFJlcGxhY2UgdGhlIHNwZWNpYWwgPDx1dWlkLW9mLXJvb3Rmcz4+IGluc2lkZSBhIHN0cmluZyAobGlrZSB0aGUKKyMgcm9vdD0gQVBQRU5EIHN0cmluZyBpbiBhIHN5c2xpbnV4LmNmZyBvciBndW1taWJvb3QgZW50cnkpIHdpdGggdGhlCisjIGFjdHVhbCBVVUlEIG9mIHRoZSByb290ZnMuIERvZXMgbm90aGluZyBpZiB0aGUgc3BlY2lhbCBzdHJpbmcKKyMgaXMgbm90IHVzZWQuCitkZWYgcmVwbGFjZV9yb290ZnNfdXVpZChkLCBzdHJpbmcpOgorICAgIFVVSURfUExBQ0VIT0xERVIgPSAnPDx1dWlkLW9mLXJvb3Rmcz4+JworICAgIGlmIFVVSURfUExBQ0VIT0xERVIgaW4gc3RyaW5nOgorICAgICAgICB1dWlkID0gZ2V0X3Jvb3Rmc191dWlkKGQpCisgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKFVVSURfUExBQ0VIT0xERVIsIHV1aWQpCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhZmE3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MKQEAgLTAsMCArMSw3MCBAQAorREVQRU5EUyArPSAiZ2NvbmYgZ2NvbmYtbmF0aXZlIgorCisjIFRoZXNlIGFyZSBmb3Igd2hlbiBnY29uZnRvb2wgaXMgdXNlZCBuYXRpdmVseSBhbmQgdGhlIHByZWZpeCBpc24ndCBuZWNlc3NhcmlseQorIyB0aGUgc3lzcm9vdC4gIFRPRE86IHJlcGxpY2F0ZSB0aGUgcG9zdGluc3QgbG9naWMgZm9yIC1uYXRpdmUgcGFja2FnZXMgZ29pbmcKKyMgaW50byBzeXNyb290IGFzIHRoZXkgd29uJ3QgYmUgcnVubmluZyB0aGVpciBvd24gaW5zdGFsbC10aW1lIHNjaGVtYQorIyByZWdpc3RyYXRpb24gKGRpc2FibGVkIGJlbG93KSBub3IgdGhlIHBvc3RpbnN0IHNjcmlwdCAoYXMgdGhleSBkb24ndCBoYXBwZW4pLgorZXhwb3J0IEdDT05GX1NDSEVNQV9JTlNUQUxMX1NPVVJDRSA9ICJ4bWw6bWVyZ2VkOiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLmRlZmF1bHRzIgorZXhwb3J0IEdDT05GX0JBQ0tFTkRfRElSID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9HQ29uZi8yIgorCisjIERpc2FibGUgaW5zdGFsbC10aW1lIHNjaGVtYSByZWdpc3RyYXRpb24gYXMgd2UncmUgYSBwYWNrYWdpbmcgc3lzdGVtIHNvIHRoaXMKKyMgaGFwcGVucyBpbiB0aGUgcG9zdGluc3Qgc2NyaXB0LCBub3QgYXQgaW5zdGFsbCB0aW1lLiAgU2V0IGJvdGggdGhlIGNvbmZpZ3VyZQorIyBzY3JpcHQgb3B0aW9uIGFuZCB0aGUgdHJhZGl0aW9uYWwgZW52aW9ubWVudCB2YXJpYWJsZSBqdXN0IHRvIG1ha2Ugc3VyZS4KK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjaGVtYXMtaW5zdGFsbCIKK2V4cG9ydCBHQ09ORl9ESVNBQkxFX01BS0VGSUxFX1NDSEVNQV9JTlNUQUxMID0gIjEiCisKK2djb25mX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCWV4cG9ydCBHQ09ORl9DT05GSUdfU09VUkNFPSJ4bWw6OiREJHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMiCitlbHNlCisJZXhwb3J0IEdDT05GX0NPTkZJR19TT1VSQ0U9YGdjb25mdG9vbC0yIC0tZ2V0LWRlZmF1bHQtc291cmNlYAorZmkKKworU0NIRU1BX0xPQ0FUSU9OPSREL2V0Yy9nY29uZi9zY2hlbWFzCitmb3IgU0NIRU1BIGluICR7U0NIRU1BX0ZJTEVTfTsgZG8KKwlpZiBbIC1lICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSBdOyB0aGVuCisJCUhPTUU9JEQvcm9vdCBnY29uZnRvb2wtMiBcCisJCQktLW1ha2VmaWxlLWluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitnY29uZl9wcmVybSgpIHsKK1NDSEVNQV9MT0NBVElPTj0vZXRjL2djb25mL3NjaGVtYXMKK2ZvciBTQ0hFTUEgaW4gJHtTQ0hFTUFfRklMRVN9OyBkbworCWlmIFsgLWUgJFNDSEVNQV9MT0NBVElPTi8kU0NIRU1BIF07IHRoZW4KKwkJSE9NRT0vcm9vdCBHQ09ORl9DT05GSUdfU09VUkNFPWBnY29uZnRvb2wtMiAtLWdldC1kZWZhdWx0LXNvdXJjZWAgXAorCQkJZ2NvbmZ0b29sLTIgXAorCQkJLS1tYWtlZmlsZS11bmluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBzY2hlbWFfZGlyID0gJyVzLyVzL2V0Yy9nY29uZi9zY2hlbWFzJyAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIHNjaGVtYXMgPSBbXQorICAgICAgICBzY2hlbWFfcmUgPSByZS5jb21waWxlKCIuKlwuc2NoZW1hcyQiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzY2hlbWFfZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc2NoZW1hX2Rpcik6CisgICAgICAgICAgICAgICAgaWYgc2NoZW1hX3JlLm1hdGNoKGYpOgorICAgICAgICAgICAgICAgICAgICBzY2hlbWFzLmFwcGVuZChmKQorICAgICAgICBpZiBzY2hlbWFzICE9IFtdOgorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIGdjb25mIHBvc3RpbnN0IGFuZCBwcmVybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTQ0hFTUFfRklMRVMnLCAiICIuam9pbihzY2hlbWFzKSkKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ2NvbmZfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwcmVybToKKyAgICAgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHByZXJtICs9IGQuZ2V0VmFyKCdnY29uZl9wcmVybScsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnZ2NvbmYnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjg5YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKQEAgLTAsMCArMSwxOSBAQAorZGVmIGdldHRleHRfZGVwZW5kZW5jaWVzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIFRydWUpIGFuZCBub3Qgb2UudXRpbHMuaW5oZXJpdHMoZCwgJ2Nyb3NzLWNhbmFkaWFuJyk6CisgICAgICAgIHJldHVybiAiIgorICAgIGlmIGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJzoKKyAgICAgICAgcmV0dXJuICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorICAgIHJldHVybiBkLmdldFZhcignREVQRU5EU19HRVRURVhUJywgRmFsc2UpCisKK2RlZiBnZXR0ZXh0X29lY29uZihkKToKKyAgICBpZiBkLmdldFZhcignVVNFX05MUycsIFRydWUpID09ICdubyc6CisgICAgICAgIHJldHVybiAnLS1kaXNhYmxlLW5scycKKyAgICAjIFJlbW92ZSB0aGUgTkxTIGJpdHMgaWYgVVNFX05MUyBpcyBubyBvciBJTkhJQklUX0RFRkFVTFRfREVQUyBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBUcnVlKSBhbmQgbm90IG9lLnV0aWxzLmluaGVyaXRzKGQsICdjcm9zcy1jYW5hZGlhbicpOgorICAgICAgICByZXR1cm4gJy0tZGlzYWJsZS1ubHMnCisgICAgcmV0dXJuICItLWVuYWJsZS1ubHMiCisKK0RFUEVORFNfR0VUVEVYVCA/Pz0gInZpcnR1YWwvZ2V0dGV4dCBnZXR0ZXh0LW5hdGl2ZSIKKworQkFTRURFUEVORFMgPSsgIiR7QGdldHRleHRfZGVwZW5kZW5jaWVzKGQpfSIKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiICR7QGdldHRleHRfb2Vjb25mKGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MjAyYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzCkBAIC0wLDAgKzEgQEAKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGdjb25mIG1pbWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ25vbWViYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYmE1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RlZiBnbm9tZV92ZXJkaXIodik6CisgICAgcmV0dXJuIG9lLnV0aWxzLnRyaW1fdmVyc2lvbih2LCAyKQorCitHTk9NRV9DT01QUkVTU19UWVBFID89ICJ4eiIKK1NFQ1RJT04gPz0gIngxMS9nbm9tZSIKK0dOT01FQk4gPz0gIiR7QlBOfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7R05PTUVCTn0vJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS8ke0dOT01FQk59LSR7UFZ9LnRhci4ke0dOT01FX0NPTVBSRVNTX1RZUEV9O25hbWU9YXJjaGl2ZSIKKworREVQRU5EUyArPSAiZ25vbWUtY29tbW9uLW5hdGl2ZSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb24tcmVnaXN0cnkgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUtaW5mbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9taW1lL3BhY2thZ2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUvYXBwbGljYXRpb24gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ25vbWUtMi4wIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdCogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vR0NvbmYgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9zY3JvbGxrZWVwZXIvKgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zY3JvbGxrZWVwZXIvKgorCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmNhY2hlCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRjMmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwpAQCAtMCwwICsxLDE0NSBAQAorIyBncnViLWVmaS5iYmNsYXNzCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKKyMgUHJvdmlkZSBncnViLWVmaSBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKworIyBFeHRlcm5hbCB2YXJpYWJsZXMKKyMgJHtJTklUUkR9IC0gaW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpCisjICR7Uk9PVEZTfSAtIGluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChvcHRpb25hbCkKKyMgJHtHUlVCX0dGWFNFUklBTH0gLSBzZXQgdGhpcyB0byAxIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51CisjICR7TEFCRUxTfSAtIGEgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgYXV0b21hdGljIGNvbmZpZworIyAke0FQUEVORH0gLSBhbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIGxhYmVsCisjICR7R1JVQl9PUFRTfSAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIGNvbmZpZywgJzsnIGRlbGltaXRlZCAjIChvcHRpb25hbCkKKyMgJHtHUlVCX1RJTUVPVVR9IC0gdGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWF1bHQgbGFiZWwgKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKKworR1JVQl9TRVJJQUwgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorR1JVQkNGRyA9ICIke1N9L2dydWIuY2ZnIgorR1JVQl9USU1FT1VUID89ICIxMCIKKyNGSVhNRTogYnVpbGQgdGhpcyBmcm9tIHRoZSBtYWNoaW5lIGNvbmZpZworR1JVQl9PUFRTID89ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggLS1wYXJpdHk9bm8gLS1zdG9wPTEiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKKyMgTmVlZCBVVUlEIHV0aWxpdHkgY29kZS4KK2luaGVyaXQgZnMtdXVpZAorCitlZmlfcG9wdWxhdGUoKSB7CisJIyBERVNUIG11c3QgYmUgdGhlIHJvb3Qgb2YgdGhlIGltYWdlIHNvIHRoYXQgRUZJRElSIGlzIG5vdAorCSMgbmVzdGVkIHVuZGVyIGEgdG9wIGxldmVsIGRpcmVjdG9yeS4KKwlERVNUPSQxCisKKwlpbnN0YWxsIC1kICR7REVTVH0ke0VGSURJUn0KKworCUdSVUJfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdOyB0aGVuCisJCUdSVUJfSU1BR0U9ImJvb3R4NjQuZWZpIgorCWZpCisJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtHUlVCX0lNQUdFfSAke0RFU1R9JHtFRklESVJ9CisKKwlpbnN0YWxsIC1tIDA2NDQgJHtHUlVCQ0ZHfSAke0RFU1R9JHtFRklESVJ9L2dydWIuY2ZnCit9CisKK2VmaV9pc29fcG9wdWxhdGUoKSB7CisJaXNvX2Rpcj0kMQorCWVmaV9wb3B1bGF0ZSAkaXNvX2RpcgorCSMgQnVpbGQgYSBFRkkgZGlyZWN0b3J5IHRvIGNyZWF0ZSBlZmkuaW1nCisJbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorCWNwICRpc29fZGlyLyR7RUZJRElSfS8qICR7RUZJSU1HRElSfSR7RUZJRElSfQorCWNwICRpc29fZGlyL3ZtbGludXogJHtFRklJTUdESVJ9CisJZWNobyAiJHtHUlVCX0lNQUdFfSIgPiAke0VGSUlNR0RJUn0vc3RhcnR1cC5uc2gKKwlpZiBbIC1mICIkaXNvX2Rpci9pbml0cmQiIF0gOyB0aGVuCisJCWNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKwlmaQorfQorCitlZmlfaGRkaW1nX3BvcHVsYXRlKCkgeworCWVmaV9wb3B1bGF0ZSAkMQorfQorCitweXRob24gYnVpbGRfZWZpX2NmZygpIHsKKyAgICBpbXBvcnQgc3lzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGdmeHNlcmlhbCA9IGQuZ2V0VmFyKCdHUlVCX0dGWFNFUklBTCcsIFRydWUpIG9yICIiCisKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ0dSVUJDRkcnLCBUcnVlKQorICAgIGlmIG5vdCBjZmlsZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnVW5hYmxlIHRvIHJlYWQgR1JVQkNGRycpCisKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gZmlsZShjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisKKyAgICBvcHRzID0gZC5nZXRWYXIoJ0dSVUJfT1BUUycsIFRydWUpCisgICAgaWYgb3B0czoKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRzLnNwbGl0KCc7Jyk6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclc1xuJyAlIG9wdCkKKworICAgIGNmZ2ZpbGUud3JpdGUoJ2RlZmF1bHQ9JXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHUlVCX1RJTUVPVVQnLCBUcnVlKQorICAgIGlmIHRpbWVvdXQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9JXNcbicgJSB0aW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9NTBcbicpCisKKyAgICBpZiBnZnhzZXJpYWwgPT0gIjEiOgorICAgICAgICBidHlwZXMgPSBbIFsgIiBncmFwaGljcyBjb25zb2xlIiwgIiIgXSwKKyAgICAgICAgICAgIFsgIiBzZXJpYWwgY29uc29sZSIsIGQuZ2V0VmFyKCdHUlVCX1NFUklBTCcsIFRydWUpIG9yICIiIF0gXQorICAgIGVsc2U6CisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIiwgIiIgXSBdCisKKyAgICBmb3IgbGFiZWwgaW4gbGFiZWxzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG92ZXJyaWRlczoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ09WRVJSSURFUyBub3QgZGVmaW5lZCcpCisKKyAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xubWVudWVudHJ5IFwnJXMlc1wne1xuJyAlIChsYWJlbCwgYnR5cGVbMF0pKQorICAgICAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICAgICAgaWYgbGFiZWwgPT0gImluc3RhbGwiOgorICAgICAgICAgICAgICAgIGxiID0gImluc3RhbGwtZWZpIgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnbGludXggL3ZtbGludXogTEFCRUw9JXMnICUgKGxiKSkKKworICAgICAgICAgICAgYXBwZW5kID0gbG9jYWxkYXRhLmdldFZhcignQVBQRU5EJywgVHJ1ZSkKKyAgICAgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcycgJSAoYXBwZW5kKSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyAlcycgJSBidHlwZVsxXSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xuJykKKworICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ2luaXRyZCAvaW5pdHJkJykKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xufVxuJykKKworICAgIGNmZ2ZpbGUuY2xvc2UoKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9nc2V0dGluZ3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWM1YWJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBIGJiY2xhc3MgdG8gaGFuZGxlIGluc3RhbGxlZCBHU2V0dGluZ3MgKGdsaWIpIHNjaGVtYXMsIHVwZGF0ZWQgdGhlIGNvbXBpbGVkCisjIGZvcm0gb24gcGFja2FnZSBpbnN0YWxsIGFuZCByZW1vdmUuCisjCisjIFRoZSBjb21waWxlZCBzY2hlbWFzIGFyZSBwbGF0Zm9ybS1hZ25vc3RpYywgc28gd2UgY2FuIGRlcGVuZCBvbgorIyBnbGliLTIuMC1uYXRpdmUgZm9yIHRoZSBuYXRpdmUgdG9vbCBhbmQgcnVuIHRoZSBwb3N0aW5zdCBzY3JpcHQgd2hlbiB0aGUKKyMgcm9vdGZzIGJ1aWxkcyB0byBzYXZlIGEgbGl0dGxlIHRpbWUgb24gZmlyc3QgYm9vdC4KKworIyBUT0RPIHVzZSBhIHRyaWdnZXIgc28gdGhhdCB0aGlzIHJ1bnMgb25jZSBwZXIgcGFja2FnZSBvcGVyYXRpb24gcnVuCisKK0RFUEVORFMgKz0gImdsaWItMi4wLW5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn0gKz0gImdsaWItMi4wLXV0aWxzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIgorCitnc2V0dGluZ3NfcG9zdGluc3RybSAoKSB7CisJZ2xpYi1jb21waWxlLXNjaGVtYXMgJEQke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCJhZGRpbmcgZ3NldHRpbmdzIHBvc3RpbnN0IHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgIGJiLm5vdGUoImFkZGluZyBnc2V0dGluZ3MgcG9zdHJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgIHBvc3RybSArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMmY5OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNSBAQAorIyBIZWxwZXIgY2xhc3MgdG8gcHVsbCBpbiB0aGUgcmlnaHQgZ3RrLWRvYyBkZXBlbmRlbmNpZXMgYW5kIGRpc2FibGUKKyMgZ3RrLWRvYy4KKyMKKyMgTG9uZy10ZXJtIGl0IHdvdWxkIGJlIGdyZWF0IGlmIHRoaXMgY2xhc3MgY291bGQgYmUgdG9nZ2xlZCBiZXR3ZWVuCisjIGd0ay1kb2Mtc3R1Yi1uYXRpdmUgYW5kIHRoZSByZWFsIGd0ay1kb2MtbmF0aXZlLCB3aGljaCB3b3VsZCBlbmFibGUKKyMgcmUtZ2VuZXJhdGlvbiBvZiBkb2N1bWVudGF0aW9uLiAgRm9yIG5vdywgd2UnbGwgbWFrZSBkbyB3aXRoIHRoaXMgd2hpY2gKKyMgcGFja2FnZXMgdXAgYW55IGV4aXN0aW5nIGRvY3VtZW50YXRpb24gKHNvIGZyb20gdGFyYmFsbCBidWlsZHMpLgorCisjIFRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSwgd2hlcmUgdGhlIGluZnJhc3RydWN0dXJlIHdpbGwgYmUgY29waWVkLgorIyBndGtkb2NpemUgaGFzIGEgZGVmYXVsdCBvZiAiLiIgc28gdG8gaGFuZGxlIG91dC1vZi10cmVlIGJ1aWxkcyBzZXQgdGhpcyB0byAkUy4KK0dUS0RPQ19ET0NESVIgPz0gIiR7U30iCisKK0RFUEVORFNfYXBwZW5kID0gIiBndGstZG9jLXN0dWItbmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIlwKKyAgLS1kaXNhYmxlLWd0ay1kb2MgXAorICAtLWRpc2FibGUtZ3RrLWRvYy1odG1sIFwKKyAgLS1kaXNhYmxlLWd0ay1kb2MtcGRmIFwKKyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgZ3RrZG9jaXplIC0tZG9jZGlyICR7R1RLRE9DX0RPQ0RJUn0gKQorfQorCitpbmhlcml0IHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNThlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw2MiBAQAorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvciIKKworREVQRU5EUyArPSAiJHtAWydoaWNvbG9yLWljb24tdGhlbWUnLCAnJ11bJyR7QlBOfScgPT0gJ2hpY29sb3ItaWNvbi10aGVtZSddfSBndGstaWNvbi11dGlscy1uYXRpdmUiCisKK2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfaWNvbl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJhc2VfbGliZGlyPSR7YmFzZV9saWJkaXJ9CitlbHNlCisKKwkjIFVwZGF0ZSB0aGUgcGl4YnVmIGxvYWRlcnMgaW4gY2FzZSB0aGV5IGhhdmVuJ3QgYmVlbiByZWdpc3RlcmVkIHlldAorCUdES19QSVhCVUZfTU9EVUxFRElSPSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycyBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUKKworCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtZnF0ICAkaWNvbmRpcgorCQlmaQorCWRvbmUKK2ZpCit9CisKK2d0a19pY29uX2NhY2hlX3Bvc3RybSgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkkSU5URVJDRVBUX0RJUi9wb3N0aW5zdF9pbnRlcmNlcHQgdXBkYXRlX2ljb25fY2FjaGUgJHtQS0d9IG1scHJlZml4PSR7TUxQUkVGSVh9IGxpYmRpcj0ke2xpYmRpcn0gXAorCQliYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfQorZWxzZQorCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtcXQgICRpY29uZGlyCisJCWZpCisJZG9uZQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9ICBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgaWNvbl9kaXIgPSAnJXMvJXMvJXMvaWNvbnMnICUgKHBrZ2Rlc3QsIHBrZywgZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGljb25fZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGhpY29sb3ItaWNvbi10aGVtZSBkZXBlbmRlbmN5IHRvICVzIiAlIHBrZykKKyAgICAgICAgcmRlcGVuZHMgPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAiaGljb2xvci1pY29uLXRoZW1lIgorICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgcGtnLCByZGVwZW5kcykKKyAgICAKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGd0ay1pY29uLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIAorICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdndGtfaWNvbl9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4MyBAQAorIyBUaGlzIGNsYXNzIHdpbGwgdXBkYXRlIHRoZSBpbnB1dG1ldGhvZCBtb2R1bGUgY2FjaGUgZm9yIHZpcnR1YWwga2V5Ym9hcmRzCisjCisjIFVzYWdlOiBTZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIHRvIHRoZSBwYWNrYWdlcyB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgaW5wdXRtZXRob2QgbW9kdWxlcworCitERVBFTkRTID0rICJxZW11LW5hdGl2ZSIKKworaW5oZXJpdCBxZW11CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA/PSAiJHtQTn0iCisKK2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0aW5zdCgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgICBmb3IgbWFqX3ZlciBpbiAyIDM7IGRvCisgICAgICAgIGlmIFsgLXggJEQke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wIF07IHRoZW4KKyAgICAgICAgICAgIElNRklMRVM9JChscyAkRCR7bGliZGlyfS9ndGstJG1hal92ZXIuMC8qL2ltbW9kdWxlcy8qLnNvKQorICAgICAgICAgICAgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wJyl9IFwKKyAgICAgICAgICAgICAgICAkSU1GSUxFUyA+ICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzIDI+L2Rldi9udWxsICYmCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzOiREOjoiICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzCisKKyAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0IDAKK2ZpCitpZiBbICEgLXogYHdoaWNoIGd0ay1xdWVyeS1pbW1vZHVsZXMtMi4wYCBdOyB0aGVuCisgICAgZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjAgPiAvZXRjL2d0ay0yLjAvZ3RrLmltbW9kdWxlcworZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTMuMCA+IC9ldGMvZ3RrLTMuMC9ndGsuaW1tb2R1bGVzCitmaQorfQorCitndGtfaW1tb2R1bGVfY2FjaGVfcG9zdHJtKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICAgIGZvciBtYWpfdmVyIGluIDIgMzsgZG8KKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAgXTsgdGhlbgorICAgICAgICAgICAgSU1GSUxFUz0kKGxzICREJHtsaWJkaXJ9L2d0ay0kbWFqX3Zlci4wLyovaW1tb2R1bGVzLyouc28pCisgICAgICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAnKX0gXAorICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMgMj4vZGV2L251bGwgJiYKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInM6JEQ6OiIgJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMKKworICAgICAgICAgICAgWyAkPyAtbmUgMCBdICYmIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgMAorZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTIuMCA+IC9ldGMvZ3RrLTIuMC9ndGsuaW1tb2R1bGVzCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTMuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wID4gL2V0Yy9ndGstMy4wL2d0ay5pbW1vZHVsZXMKK2ZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQgKCkgeworICAgIGd0a2ltbW9kdWxlc19wa2dzID0gZC5nZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKworICAgIGZvciBwa2cgaW4gZ3RraW1tb2R1bGVzX3BrZ3M6CisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ3RrLWltbW9kdWxlLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBndGtpbW1vZHVsZXNfY2hlY2sgPSBkLmdldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgRmFsc2UpCisgICAgICAgIGlmIG5vdCBndGtpbW1vZHVsZXNfY2hlY2s6CisgICAgICAgICAgICBiYl9maWxlbmFtZSA9IGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJFUlJPUjogJXMgaW5oZXJpdHMgZ3RrLWltbW9kdWxlcy1jYWNoZSBidXQgZG9lc24ndCBzZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIiAlIGJiX2ZpbGVuYW1lKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d1bW1pYm9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOWMwOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDExOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgZ3VtbWlib290LmJiY2xhc3MgLSBlcXVpdmFsZW50IG9mIGdydWItZWZpLmJiY2xhc3MKKyMgU2V0IEVGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiIHRvIHVzZSBndW1taWJvb3Qgb24geW91ciBsaXZlIGltYWdlcyBpbnN0ZWFkIG9mIGdydWItZWZpCisjIChpbWFnZXMgYnVpbHQgYnkgYm9vdGltYWdlLmJiY2xhc3Mgb3IgYm9vdC1kaXJlY3RkaXNrLmJiY2xhc3MpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3VtbWlib290OmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWd1bW1pYm9vdDpkb19kZXBsb3kiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKK0dVTU1JQk9PVF9DRkcgPz0gIiR7U30vbG9hZGVyLmNvbmYiCitHVU1NSUJPT1RfRU5UUklFUyA/PSAiIgorR1VNTUlCT09UX1RJTUVPVVQgPz0gIjEwIgorCisjIE5lZWQgVVVJRCB1dGlsaXR5IGNvZGUuCitpbmhlcml0IGZzLXV1aWQKKworZWZpX3BvcHVsYXRlKCkgeworICAgICAgICBERVNUPSQxCisKKyAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3RpYTMyLmVmaSIKKyAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKyAgICAgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgorICAgICAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3R4NjQuZWZpIgorICAgICAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3R4NjQuZWZpIgorICAgICAgICBmaQorCisgICAgICAgIGluc3RhbGwgLWQgJHtERVNUfSR7RUZJRElSfQorICAgICAgICAjIGd1bW1pYm9vdCByZXF1aXJlcyB0aGVzZSBwYXRocyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAjIHRoZXkgYXJlIG5vdCBjdXN0b21pemFibGUgc28gbm8gcG9pbnQgaW4gbmV3IHZhcnMKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9L2xvYWRlcgorICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0vbG9hZGVyL2VudHJpZXMKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtFRklfSU1BR0V9ICR7REVTVH0ke0VGSURJUn0vJHtERVNUX0VGSV9JTUFHRX0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7R1VNTUlCT09UX0NGR30gJHtERVNUfS9sb2FkZXIvbG9hZGVyLmNvbmYKKyAgICAgICAgZm9yIGkgaW4gJHtHVU1NSUJPT1RfRU5UUklFU307IGRvCisgICAgICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtpfSAke0RFU1R9L2xvYWRlci9lbnRyaWVzCisgICAgICAgIGRvbmUKK30KKworZWZpX2lzb19wb3B1bGF0ZSgpIHsKKyAgICAgICAgaXNvX2Rpcj0kMQorICAgICAgICBlZmlfcG9wdWxhdGUgJGlzb19kaXIKKyAgICAgICAgbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorICAgICAgICBjcCAkaXNvX2Rpci8ke0VGSURJUn0vKiAke0VGSUlNR0RJUn0ke0VGSURJUn0KKyAgICAgICAgY3AgJGlzb19kaXIvdm1saW51eiAke0VGSUlNR0RJUn0KKyAgICAgICAgZWNobyAiJHtERVNUX0VGSV9JTUFHRX0iID4gJHtFRklJTUdESVJ9L3N0YXJ0dXAubnNoCisgICAgICAgIGlmIFsgLWYgIiRpc29fZGlyL2luaXRyZCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKyAgICAgICAgZmkKK30KKworZWZpX2hkZGltZ19wb3B1bGF0ZSgpIHsKKyAgICAgICAgZWZpX3BvcHVsYXRlICQxCit9CisKK3B5dGhvbiBidWlsZF9lZmlfY2ZnKCkgeworICAgIHMgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgbGFiZWxzID0gZC5nZXRWYXIoJ0xBQkVMUycsIFRydWUpCisgICAgaWYgbm90IGxhYmVsczoKKyAgICAgICAgYmIuZGVidWcoMSwgIkxBQkVMUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfQ0ZHJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gb3BlbihjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisgICAgY2ZnZmlsZS53cml0ZSgnZGVmYXVsdCAlc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfVElNRU9VVCcsIFRydWUpCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAlc1xuJyAlIHRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAxMFxuJykKKyAgICBjZmdmaWxlLmNsb3NlKCkKKworICAgIGZvciBsYWJlbCBpbiBsYWJlbHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBlbnRyeWZpbGUgPSAiJXMvJXMuY29uZiIgJSAocywgbGFiZWwpCisgICAgICAgIGQuYXBwZW5kVmFyKCJHVU1NSUJPT1RfRU5UUklFUyIsICIgIiArIGVudHJ5ZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnljZmcgPSBvcGVuKGVudHJ5ZmlsZSwgInciKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChlbnRyeWZpbGUpKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ3RpdGxlICVzXG4nICUgbGFiZWwpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdsaW51eCAvdm1saW51elxuJykKKworICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICBpbml0cmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdJTklUUkQnLCBUcnVlKQorCisgICAgICAgIGlmIGluaXRyZDoKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdpbml0cmQgL2luaXRyZFxuJykKKyAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICBpZiBsYWJlbCA9PSAiaW5zdGFsbCI6CisgICAgICAgICAgICBsYiA9ICJpbnN0YWxsLWVmaSIKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ29wdGlvbnMgTEFCRUw9JXMgJyAlIGxiKQorICAgICAgICBpZiBhcHBlbmQ6CisgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCclcycgJSBhcHBlbmQpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdcbicpCisgICAgICAgIGVudHJ5Y2ZnLmNsb3NlKCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjZjYmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvZ3ppcG5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorRVhUUkFOQVRJVkVQQVRIICs9ICJwaWd6LW5hdGl2ZSBnemlwLW5hdGl2ZSIKK0RFUEVORFMgKz0gImd6aXAtbmF0aXZlIgorCisjIHRhciBtYXkgZ2V0IHJ1biBieSBkb191bnBhY2sgb3IgZG9fcG9wdWxhdGVfbGljIHdoaWNoIGNvdWxkIGNhbGwgZ3ppcAorZG9fdW5wYWNrW2RlcGVuZHNdICs9ICJnemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiOGJiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKQEAgLTAsMCArMSwzMzMgQEAKKyMgSWNlQ3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsaW5nIHN1cHBvcnQKKyMKKyMgU3RhZ2VzIGRpcmVjdG9yaWVzIHdpdGggc3ltbGlua3MgZnJvbSBnY2MvZysrIHRvIGljZWNjLCBmb3IgYm90aAorIyBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGVycy4gRGVwZW5kaW5nIG9uIGVhY2ggY29uZmlndXJlIG9yIGNvbXBpbGUsCisjIHRoZSBkaXJlY3RvcmllcyBhcmUgYWRkZWQgYXQgdGhlIGhlYWQgb2YgdGhlIFBBVEggbGlzdCBhbmQgSUNFQ0NfQ1hYCisjIGFuZCBJQ0VDX0NDIGFyZSBzZXQuCisjCisjIEZvciB0aGUgY3Jvc3MgY29tcGlsZXIsIGNyZWF0ZXMgYSB0YXIuZ3ogb2Ygb3VyIHRvb2xjaGFpbiBhbmQgc2V0cworIyBJQ0VDQ19WRVJTSU9OIGFjY29yZGluZ2x5LgorIworIyBUaGUgY2xhc3Mgbm93IGhhbmRsZXMgYWxsIDMgZGlmZmVyZW50IGNvbXBpbGUgJ3N0YWdlcycgKGkuZSBuYXRpdmUgLGNyb3NzLWtlcm5lbCBhbmQgdGFyZ2V0KSBjcmVhdGluZyB0aGUKKyMgbmVjZXNzYXJ5IGVudmlyb25tZW50IHRhci5neiBmaWxlIHRvIGJlIHVzZWQgYnkgdGhlIHJlbW90ZSBtYWNoaW5lcy4KKyMgSXQgYWxzbyBzdXBwb3J0cyBtZXRhLXRvb2xjaGFpbiBnZW5lcmF0aW9uCisjCisjIElmIElDRUNDX1BBVEggaXMgbm90IHNldCBpbiBsb2NhbC5jb25mIHRoZW4gdGhlIGNsYXNzIHdpbGwgdHJ5IHRvIGxvY2F0ZSBpdCB1c2luZyAnYmIudXRpbHMud2hpY2gnCisjIGJ1dCBub3RoaW5nIGlzIHN1cmUgOykKKyMKKyMgSWYgSUNFQ0NfRU5WX0VYRUMgaXMgc2V0IGluIGxvY2FsLmNvbmYsIHRoZW4gaXQgc2hvdWxkIHBvaW50IHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCBwcm92aWRlZCBieSB0aGUgdXNlcgorIyBvciB0aGUgZGVmYXVsdCBvbmUgcHJvdmlkZWQgYnkgaWNlY2MtY3JlYXRlLWVudi5iYiB3aWxsIGJlIHVzZWQKKyMgKE5PVEUgdGhhdCB0aGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgc2NyaXB0IG5lZWQgaXQgYW5kICpub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGggaWNlY2MqCisjCisjIFVzZXIgY2FuIHNwZWNpZnkgaWYgc3BlY2lmaWMgcGFja2FnZXMgb3IgcGFja2FnZXMgYmVsb25naW5nIHRvIGNsYXNzIHNob3VsZCBub3QgdXNlIGljZWNjIHRvIGRpc3RyaWJ1dGUKKyMgY29tcGlsZSBqb2JzIHRvIHJlbW90ZSBtYWNoaW5lcywgYnV0IGhhbmRsZWQgbG9jYWxseSwgYnkgZGVmaW5pbmcgSUNFQ0NfVVNFUl9DTEFTU19CTCBhbmQgSUNFQ0NfVVNFUl9QQUNLQUdFX0JMCisjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBpbiBsb2NhbC5jb25mLiBJbiBhZGRpdGlvbiB0aGUgdXNlciBjYW4gZm9yY2UgdG8gZW5hYmxlIGljZWNjIGZvciBwYWNrYWdlcworIyB3aGljaCBzZXQgYW4gZW1wdHkgUEFSQUxMRUxfTUFLRSB2YXJpYWJsZSBieSBkZWZpbmluZyBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0Vycm9yIGNoZWNraW5nIGlzIGtlcHQgdG8gbWluaW11bSBzbyBkb3VibGUgY2hlY2sgYW55IHBhcmFtZXRlcnMgeW91IHBhc3MgdG8gdGhlIGNsYXNzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JCX0hBU0hCQVNFX1dISVRFTElTVCArPSAiSUNFQ0NfUEFSQUxMRUxfTUFLRSBJQ0VDQ19ESVNBQkxFRCBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkwgSUNFQ0NfVVNFUl9DTEFTU19CTCBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wgSUNFQ0NfUEFUSCBJQ0VDQ19FTlZfRVhFQyIKKworSUNFQ0NfRU5WX0VYRUMgPz0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pY2VjYy1jcmVhdGUtZW52IgorCitkZWYgaWNlY2NfZGVwX3ByZXBlbmQoZCk6CisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gImljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlIgorICAgIHJldHVybiAiIgorCitERVBFTkRTX3ByZXBlbmQgKz0gIiR7QGljZWNjX2RlcF9wcmVwZW5kKGQpfSAiCisKK2RlZiBnZXRfY3Jvc3Nfa2VybmVsX2NjKGJiLGQpOgorICAgIGtlcm5lbF9jYyA9IGQuZ2V0VmFyKCdLRVJORUxfQ0MnLCBGYWxzZSkKKworICAgICMgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYnkgdGhlIHNoZWxsIGlmIG5lY2Vzc2FyeQorICAgIGlmICdgJyBpbiBrZXJuZWxfY2Mgb3IgJyQoJyBpbiBrZXJuZWxfY2M6CisgICAgICAgIGtlcm5lbF9jYyA9IG9zLnBvcGVuKCJlY2hvICVzIiAlIGtlcm5lbF9jYykucmVhZCgpWzotMV0KKworICAgIGtlcm5lbF9jYyA9IGQuZXhwYW5kKGtlcm5lbF9jYykKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2MucmVwbGFjZSgnY2NhY2hlJywgJycpLnN0cmlwKCkKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2Muc3BsaXQoJyAnKVswXQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5zdHJpcCgpCisgICAgcmV0dXJuIGtlcm5lbF9jYworCitkZWYgZ2V0X2ljZWNjKGQpOgorICAgIHJldHVybiBkLmdldFZhcignSUNFQ0NfUEFUSCcsIEZhbHNlKSBvciBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgImljZWNjIikKKworZGVmIGNyZWF0ZV9wYXRoKGNvbXBpbGVycywgYmIsIGQpOgorICAgICIiIgorICAgIENyZWF0ZSBTeW1saW5rcyBmb3IgdGhlIGljZWNjIGluIHRoZSBzdGFnaW5nIGRpcmVjdG9yeQorICAgICIiIgorICAgIHN0YWdpbmcgPSBvcy5wYXRoLmpvaW4oZC5leHBhbmQoJyR7U1RBR0lOR19CSU5ESVJ9JyksICJpY2UiKQorICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICBzdGFnaW5nICs9ICIta2VybmVsIgorCisgICAgI2NoZWNrIGlmIHRoZSBpY2VjYyBwYXRoIGlzIHNldCBieSB0aGUgdXNlcgorICAgIGljZWNjID0gZ2V0X2ljZWNjKGQpCisKKyAgICAjIENyZWF0ZSB0aGUgZGlyIGlmIG5lY2Vzc2FyeQorICAgIHRyeToKKyAgICAgICAgb3Muc3RhdChzdGFnaW5nKQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc3RhZ2luZykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZm9yIGNvbXBpbGVyIGluIGNvbXBpbGVyczoKKyAgICAgICAgZ2NjX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhZ2luZywgY29tcGlsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN0YXQoZ2NjX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGljZWNjLCBnY2NfcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gc3RhZ2luZworCitkZWYgdXNlX2ljYyhiYixkKToKKyAgICBpZiBkLmdldFZhcignSUNFQ0NfRElTQUJMRUQnLCBGYWxzZSkgPT0gIjEiOgorICAgICAgICAjIGRvbid0IGV2ZW4gdHJ5IGl0LCB3aGVuIGV4cGxpY2l0bHkgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgICMgYWxsYXJjaCByZWNpcGVzIGRvbid0IHVzZSBjb21waWxlcgorICAgIGlmIGljY19pc19hbGxhcmNoKGJiLCBkKToKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIHN5c3RlbV9jbGFzc19ibGFja2xpc3QgPSBbXQorICAgIHVzZXJfY2xhc3NfYmxhY2tsaXN0ID0gKGQuZ2V0VmFyKCdJQ0VDQ19VU0VSX0NMQVNTX0JMJywgRmFsc2UpIG9yICJub25lIikuc3BsaXQoKQorICAgIHBhY2thZ2VfY2xhc3NfYmxhY2tsaXN0ID0gc3lzdGVtX2NsYXNzX2JsYWNrbGlzdCArIHVzZXJfY2xhc3NfYmxhY2tsaXN0CisKKyAgICBmb3IgYmxhY2sgaW4gcGFja2FnZV9jbGFzc19ibGFja2xpc3Q6CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoYmxhY2ssIGQpOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBjbGFzcyAlcyBmb3VuZCBpbiBibGFja2xpc3QsIGRpc2FibGUgaWNlY2MiICUgKHBuLCBibGFjaykpCisgICAgICAgICAgICByZXR1cm4gIm5vIgorCisgICAgIyAic3lzdGVtIiByZWNpcGUgYmxhY2tsaXN0IGNvbnRhaW5zIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNhbiBub3QgZGlzdHJpYnV0ZSBjb21waWxlIHRhc2tzCisgICAgIyBmb3Igb25lIHJlYXNvbiBvciB0aGUgb3RoZXIKKyAgICAjIHRoaXMgaXMgdGhlIG9sZCBsaXN0ICh3aGljaCBkb2Vzbid0IHNlZW0gdG8gYmUgdmFsaWQgYW55bW9yZSwgYmVjYXVzZSBJIHdhcyBhYmxlIHRvIGJ1aWxkCisgICAgIyBhbGwgdGhlc2Ugd2l0aCBpY2VjYyBlbmFibGVkKQorICAgICMgc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ID0gWyAidWNsaWJjIiwgImdsaWJjIiwgImdjYyIsICJiaW5kIiwgInUtYm9vdCIsICJkaGNwLWZvcndhcmRlciIsICJlbmNoYW50IiwgImNvbm5tYW4iLCAib3JiaXQyIiBdCisgICAgIyB3aGVuIGFkZGluZyBuZXcgZW50cnksIHBsZWFzZSBkb2N1bWVudCB3aHkgKGhvdyBpdCBmYWlsZWQpIHNvIHRoYXQgd2UgY2FuIHJlLWV2YWx1YXRlIGl0IGxhdGVyCisgICAgIyBlLmcuIHdoZW4gdGhlcmUgaXMgbmV3IHZlcnNpb24KKyAgICAjIGJ1aWxkaW5nIGxpYmdjYy1pbml0aWFsIHdpdGggaWNlY2MgZmFpbHMgd2l0aCBDUFAgc2FuaXR5IGNoZWNrIGVycm9yIGlmIGhvc3Qgc3lzcm9vdCBjb250YWlucyBjcm9zcyBnY2MgYnVpbHQgZm9yIGFub3RoZXIgdGFyZ2V0IHR1bmUvdmFyaWFudAorICAgIHN5c3RlbV9wYWNrYWdlX2JsYWNrbGlzdCA9IFsibGliZ2NjLWluaXRpYWwiXQorICAgIHVzZXJfcGFja2FnZV9ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9CTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHVzZXJfcGFja2FnZV93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9XTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHBhY2thZ2VfYmxhY2tsaXN0ID0gc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ICsgdXNlcl9wYWNrYWdlX2JsYWNrbGlzdAorCisgICAgaWYgcG4gaW4gcGFja2FnZV9ibGFja2xpc3Q6CisgICAgICAgIGJiLmRlYnVnKDEsICIlczogZm91bmQgaW4gYmxhY2tsaXN0LCBkaXNhYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgaWYgcG4gaW4gdXNlcl9wYWNrYWdlX3doaXRlbGlzdDoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBmb3VuZCBpbiB3aGl0ZWxpc3QsIGVuYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisKKyAgICBpZiBkLmdldFZhcignUEFSQUxMRUxfTUFLRScsIEZhbHNlKSA9PSAiIjoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBoYXMgZW1wdHkgUEFSQUxMRUxfTUFLRSwgZGlzYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHJldHVybiAieWVzIgorCitkZWYgaWNjX2lzX2FsbGFyY2goYmIsIGQpOgorICAgIHJldHVybiBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgRmFsc2UpID09ICJhbGwiCisKK2RlZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICByZXR1cm4gXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJrZXJuZWwiLCBkKTsKKworZGVmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgIHJldHVybiBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCkgb3IgXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKTsKKworIyBEb24ndCBwb2xsdXRlIGFsbGFyY2ggc2lnbmF0dXJlcyB3aXRoIFRBUkdFVF9GUFUKK2ljY192ZXJzaW9uW3ZhcmRlcHNleGNsdWRlXSArPSAiVEFSR0VUX0ZQVSIKK2RlZiBpY2NfdmVyc2lvbihiYiwgZCk6CisgICAgaWYgdXNlX2ljYyhiYiwgZCkgPT0gIm5vIjoKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBwYXJhbGxlbCA9IGQuZ2V0VmFyKCdJQ0VDQ19QQVJBTExFTF9NQUtFJywgRmFsc2UpIG9yICIiCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgRmFsc2UpID09ICIiIGFuZCBwYXJhbGxlbDoKKyAgICAgICAgZC5zZXRWYXIoIlBBUkFMTEVMX01BS0UiLCBwYXJhbGxlbCkKKworICAgIGlmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgICAgICBhcmNoaXZlX25hbWUgPSAibG9jYWwtaG9zdC1lbnYiCisgICAgZWxpZiBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKSA9PSAiIjoKKyAgICAgICAgYmIuZmF0YWwoZC5leHBhbmQoIiR7UE59IiksICIgTlVMTCBwcmVmaXgiKQorICAgIGVsc2U6CisgICAgICAgIHByZWZpeCA9IGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScgKQorICAgICAgICBkaXN0cm8gPSBkLmV4cGFuZCgnJHtESVNUUk99JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgZmxvYXQgPSBkLmdldFZhcignVEFSR0VUX0ZQVScsIEZhbHNlKSBvciAiaGFyZCIKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gcHJlZml4ICsgZGlzdHJvICsgIi0iICAgICAgICArIHRhcmdldF9zeXMgKyAiLSIgKyBmbG9hdAorICAgICAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSArPSAiLWtlcm5lbCIKKworICAgIGltcG9ydCBzb2NrZXQKKyAgICBpY2VfZGlyID0gZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0nKQorICAgIHRhcl9maWxlID0gb3MucGF0aC5qb2luKGljZV9kaXIsICdpY2UnLCBhcmNoaXZlX25hbWUgKyAiLUBWRVJTSU9OQC0iICsgc29ja2V0LmdldGhvc3RuYW1lKCkgKyAnLnRhci5neicpCisKKyAgICByZXR1cm4gdGFyX2ZpbGUKKworZGVmIGljY19wYXRoKGJiLGQpOgorICAgIGlmIHVzZV9pY2MoYmIsIGQpID09ICJubyI6CisgICAgICAgICMgZG9uJ3QgY3JlYXRlIHVubmVjZXNzYXJ5IGRpcmVjdG9yaWVzIHdoZW4gaWNlY2MgaXMgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZV9wYXRoKCBbZ2V0X2Nyb3NzX2tlcm5lbF9jYyhiYixkKSwgXSwgYmIsIGQpCisKKyAgICBlbHNlOgorICAgICAgICBwcmVmaXggPSBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKQorICAgICAgICByZXR1cm4gY3JlYXRlX3BhdGgoIFtwcmVmaXgrImdjYyIsIHByZWZpeCsiZysrIl0sIGJiLCBkKQorCitkZWYgaWNjX2dldF9leHRlcm5hbF90b29sKGJiLCBkLCB0b29sKToKKyAgICBleHRlcm5hbF90b29sY2hhaW5fYmluZGlyID0gZC5leHBhbmQoJyR7RVhURVJOQUxfVE9PTENIQUlOfSR7YmluZGlyX2Nyb3NzfScpCisgICAgdGFyZ2V0X3ByZWZpeCA9IGQuZXhwYW5kKCcke1RBUkdFVF9QUkVGSVh9JykKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGV4dGVybmFsX3Rvb2xjaGFpbl9iaW5kaXIsICclcyVzJyAlICh0YXJnZXRfcHJlZml4LCB0b29sKSkKKworIyBEb24ndCBwb2xsdXRlIG5hdGl2ZSBzaWduYXR1cmVzIHdpdGggdGFyZ2V0IFRVTkVfUEtHQVJDSCB0aHJvdWdoIFNUQUdJTkdfQklORElSX1RPT0xDSEFJTgoraWNjX2dldF90b29sW3ZhcmRlcHNleGNsdWRlXSArPSAiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIgorZGVmIGljY19nZXRfdG9vbChiYiwgZCwgdG9vbCk6CisgICAgaWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgICAgIHJldHVybiBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgdG9vbCkKKyAgICBlbGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICByZXR1cm4gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCJQQVRIIiksIGdldF9jcm9zc19rZXJuZWxfY2MoYmIsIGQpKQorICAgIGVsc2U6CisgICAgICAgIGljZV9kaXIgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgdG9vbF9iaW4gPSBvcy5wYXRoLmpvaW4oaWNlX2RpciwgIiVzLSVzIiAlICh0YXJnZXRfc3lzLCB0b29sKSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodG9vbF9iaW4pOgorICAgICAgICAgICAgcmV0dXJuIHRvb2xfYmluCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRlcm5hbF90b29sX2JpbiA9IGljY19nZXRfZXh0ZXJuYWxfdG9vbChiYiwgZCwgdG9vbCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGV4dGVybmFsX3Rvb2xfYmluKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXh0ZXJuYWxfdG9vbF9iaW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisKK2RlZiBpY2NfZ2V0X2FuZF9jaGVja190b29sKGJiLCBkLCB0b29sKToKKyAgICAjIENoZWNrIHRoYXQgZysrIG9yIGdjYyBpcyBub3QgYSBzeW1ib2xpYyBsaW5rIHRvIGljZWNjIGJpbmFyeSBpbgorICAgICMgUEFUSCBvciBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB3aWxsIHNpbGVudGx5IGNyZWF0ZSBhbiBpbnZhbGlkCisgICAgIyBjb21waWxlciBlbnZpcm9ubWVudCBwYWNrYWdlLgorICAgIHQgPSBpY2NfZ2V0X3Rvb2woYmIsIGQsIHRvb2wpCisgICAgaWYgdCBhbmQgb3MucG9wZW4oInJlYWRsaW5rIC1mICVzIiAlIHQpLnJlYWQoKVs6LTFdID09IGdldF9pY2VjYyhkKToKKyAgICAgICAgYmIuZXJyb3IoIiVzIGlzIGEgc3ltbGluayB0byAlcyBpbiBQQVRIIGFuZCB0aGlzIHByZXZlbnRzIGljZWNjIGZyb20gd29ya2luZyIgJSAodCwgZ2V0X2ljZWNjKGQpKSkKKyAgICAgICAgcmV0dXJuICIiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHQKKword2FpdF9mb3JfZmlsZSgpIHsKKyAgICBsb2NhbCBUSU1FX0VMQVBTRUQ9MAorICAgIGxvY2FsIEZJTEVfVE9fVEVTVD0kMQorICAgIGxvY2FsIFRJTUVPVVQ9JDIKKyAgICB1bnRpbCBbIC1mICIkRklMRV9UT19URVNUIiBdCisgICAgZG8KKyAgICAgICAgVElNRV9FTEFQU0VEPWBleHByICRUSU1FX0VMQVBTRUQgKyAxYAorICAgICAgICBpZiBbICRUSU1FX0VMQVBTRUQgLWd0ICRUSU1FT1VUIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgc2xlZXAgMQorICAgIGRvbmUKK30KKworZGVmIHNldF9pY2VjY19lbnYoKToKKyAgICAjIGR1bW15IHB5dGhvbiB2ZXJzaW9uIG9mIHNldF9pY2VjY19lbnYKKyAgICByZXR1cm4KKworc2V0X2ljZWNjX2VudigpIHsKKyAgICBpZiBbICIke0B1c2VfaWNjKGJiLCBkKX0iID0gIm5vIiBdCisgICAgdGhlbgorICAgICAgICByZXR1cm4KKyAgICBmaQorICAgIElDRUNDX1ZFUlNJT049IiR7QGljY192ZXJzaW9uKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFQ0NfVkVSU0lPTn0iID0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogY291bGQgbm90IGdldCBJQ0VDQ19WRVJTSU9OIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFX1BBVEg9IiR7QGljY19wYXRoKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFX1BBVEh9IiA9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBiYndhcm4gIkNhbm5vdCB1c2UgaWNlY2M6IGNvdWxkIG5vdCBnZXQgSUNFX1BBVEgiCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBJQ0VDQ19DQz0iJHtAaWNjX2dldF9hbmRfY2hlY2tfdG9vbChiYiwgZCwgImdjYyIpfSIKKyAgICBJQ0VDQ19DWFg9IiR7QGljY19nZXRfYW5kX2NoZWNrX3Rvb2woYmIsIGQsICJnKysiKX0iCisgICAgIyBjYW5ub3QgdXNlIGljY19nZXRfYW5kX2NoZWNrX3Rvb2wgaGVyZSBiZWNhdXNlIGl0IGFzc3VtZXMgYXMgd2l0aG91dCB0YXJnZXRfc3lzIHByZWZpeAorICAgIElDRUNDX1dISUNIX0FTPSIke0BiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ2FzJyl9IgorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19DQ30iIC1vICEgLXggIiR7SUNFQ0NfQ1hYfSIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBjb3VsZCBub3QgZ2V0IElDRUNDX0NDIG9yIElDRUNDX0NYWCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRV9WRVJTSU9OPWAkSUNFQ0NfQ0MgLWR1bXB2ZXJzaW9uYAorICAgIElDRUNDX1ZFUlNJT049YGVjaG8gJHtJQ0VDQ19WRVJTSU9OfSB8IHNlZCAtZSAicy9AVkVSU0lPTkAvJElDRV9WRVJTSU9OL2ciYAorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19FTlZfRVhFQ30iIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogaW52YWxpZCBJQ0VDQ19FTlZfRVhFQyIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRUNDX0FTPSJgJHtJQ0VDQ19DQ30gLXByaW50LXByb2ctbmFtZT1hc2AiCisgICAgIyBmb3IgdGFyZ2V0IHJlY2lwZXMgc2hvdWxkIHJldHVybiBzb21ldGhpbmcgbGlrZToKKyAgICAjIC9PRS90bXAtZWdsaWJjL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9hcm05MjB0dC1vZS1saW51eC1nbnVlYWJpL2djYy9hcm0tb2UtbGludXgtZ251ZWFiaS80LjguMi9hcworICAgICMgYW5kIGp1c3QgImFzIiBmb3IgbmF0aXZlLCBpZiBpdCByZXR1cm5zICJhcyIgaW4gY3VycmVudCBkaXJlY3RvcnkgKGZvciB3aGF0ZXZlciByZWFzb24pIHVzZSAiYXMiIGZyb20gUEFUSAorICAgIGlmIFsgImBkaXJuYW1lICIke0lDRUNDX0FTfSJgIiA9ICIuIiBdCisgICAgdGhlbgorICAgICAgICBJQ0VDQ19BUz0iJHtJQ0VDQ19XSElDSF9BU30iCisgICAgZmkKKworICAgIGlmIFsgISAtZiAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIiBdCisgICAgdGhlbgorICAgICAgICBta2RpciAtcCAiYGRpcm5hbWUgIiR7SUNFQ0NfVkVSU0lPTn0iYCIKKworICAgICAgICAjIHRoZSBJQ0VDQ19WRVJTSU9OIGdlbmVyYXRpb24gc3RlcCBtdXN0IGJlIGxvY2tlZCBieSBhIG11dGV4CisgICAgICAgICMgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaWYgZmxvY2sgLW4gIiR7SUNFQ0NfVkVSU0lPTn0ubG9jayIgXAorICAgICAgICAgICAgJHtJQ0VDQ19FTlZfRVhFQ30gIiR7SUNFQ0NfQ0N9IiAiJHtJQ0VDQ19DWFh9IiAiJHtJQ0VDQ19BU30iICIke0lDRUNDX1ZFUlNJT059IgorICAgICAgICB0aGVuCisgICAgICAgICAgICB0b3VjaCAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICBlbGlmIFsgISB3YWl0X2Zvcl9maWxlICIke0lDRUNDX1ZFUlNJT059LmRvbmUiIDMwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBsb2NraW5nIGZhaWxlZCBzbyB3YWl0IGZvciAke0lDRUNDX1ZFUlNJT059LmRvbmUgdG8gYXBwZWFyCisgICAgICAgICAgICBiYndhcm4gIlRpbWVvdXQgd2FpdGluZyBmb3IgJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGV4cG9ydCBJQ0VDQ19WRVJTSU9OIElDRUNDX0NDIElDRUNDX0NYWAorICAgIGV4cG9ydCBQQVRIPSIkSUNFX1BBVEg6JFBBVEgiCisgICAgZXhwb3J0IENDQUNIRV9QQVRIPSIkUEFUSCIKKworICAgIGJibm90ZSAiVXNpbmcgaWNlY2MiCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1idWlsZGluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTE3Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAorIworIyBXcml0ZXMgYnVpbGQgaW5mb3JtYXRpb24gdG8gdGFyZ2V0IGZpbGVzeXN0ZW0gb24gL2V0Yy9idWlsZAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbGVqYW5kcm8gRW5lZGlubyBIZXJuYW5kZXogU2FtYW5pZWdvIDxhbGVqYW5kcm8uaGVybmFuZGV6QGludGVsLmNvbT4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMKKyMKKyMgVXNhZ2U6IGFkZCBJTkhFUklUICs9ICJpbWFnZS1idWlsZGluZm8iIHRvIHlvdXIgY29uZiBmaWxlCisjCisKKyMgRGVzaXJlZCB2YXJpYWJsZXMgdG8gZGlzcGxheSAKK0lNQUdFX0JVSUxESU5GT19WQVJTID89ICJESVNUUk8gRElTVFJPX1ZFUlNJT04iCisKKyMgRnJvbSBidWlsZGhpc3RvcnkuYmJjbGFzcworZGVmIGltYWdlX2J1aWxkaW5mb19vdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKTogCisgICAgdmFycyA9IHZhcnMuc3BsaXQoKQorICAgIGxpc3R2YXJzID0gbGlzdHZhcnMuc3BsaXQoKQorICAgIHJldCA9ICIiCisgICAgZm9yIHZhciBpbiB2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgKGQuZ2V0VmFyRmxhZyh2YXIsICd0eXBlJykgPT0gImxpc3QiKToKKyAgICAgICAgICAgIHZhbHVlID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHZhbHVlKQorICAgICAgICByZXQgKz0gIiVzID0gJXNcbiIgJSAodmFyLCB2YWx1ZSkKKyAgICByZXR1cm4gcmV0LnJzdHJpcCgnXG4nKQorCisjIEdldHMgZ2l0IGJyYW5jaCdzIHN0YXR1cyAoY2xlYW4gb3IgZGlydHkpCitkZWYgZ2V0X2xheWVyX2dpdF9zdGF0dXMocGF0aCk6CisgICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0IGRpZmYgLS1zdGF0IDI+JjEgfCB0YWlsIC1uIDEiICUgcGF0aCkKKyAgICBkYXRhID0gZi5yZWFkKCkKKyAgICBpZiBmLmNsb3NlKCkgaXMgTm9uZToKKyAgICAgICAgaWYgbGVuKGRhdGEpICE9IDA6CisgICAgICAgICAgICByZXR1cm4gIi0tIG1vZGlmaWVkIgorICAgIHJldHVybiAiIgorCisjIFJldHVybnMgbGF5ZXIgcmV2aXNpb25zIGFsb25nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBzdGF0dXMKK2RlZiBnZXRfbGF5ZXJfcmV2cyhkKToKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzICVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSksIFwKKyAgICAgICAgZ2V0X2xheWVyX2dpdF9zdGF0dXMoaSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBidWlsZGluZm9fdGFyZ2V0KGQpOgorICAgICAgICAjIEdldCBjb250ZXh0CisgICAgICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAjIFNpbmdsZSBhbmQgbGlzdCB2YXJpYWJsZXMgdG8gYmUgcmVhZAorICAgICAgICB2YXJzID0gKGQuZ2V0VmFyKCJJTUFHRV9CVUlMRElORk9fVkFSUyIsIFRydWUpIG9yICIiKQorICAgICAgICBsaXN0dmFycyA9IChkLmdldFZhcigiSU1BR0VfQlVJTERJTkZPX0xWQVJTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHJldHVybiBpbWFnZV9idWlsZGluZm9fb3V0cHV0dmFycyh2YXJzLCBsaXN0dmFycywgZCkKKworIyBXcml0ZSBidWlsZCBpbmZvcm1hdGlvbiB0byB0YXJnZXQgZmlsZXN5c3RlbQorYnVpbGRpbmZvICgpIHsKK2NhdCA+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vYnVpbGQgPDwgRU5ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQnVpbGQgQ29uZmlndXJhdGlvbjogIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiske0BidWlsZGluZm9fdGFyZ2V0KGQpfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xheWVyIFJldmlzaW9uczogICAgICB8ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJHtAZ2V0X2xheWVyX3JldnMoZCl9CitFTkQKK30KKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJidWlsZGluZm87IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2ExMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKQEAgLTAsMCArMSwxOCBAQAorCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitJTklUUkRfSU1BR0UgPz0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTklUUkQgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0V9LSR7TUFDSElORX0uY3Bpby5neiIKK1NZU0xJTlVYX1JPT1QgPSAicm9vdD0vZGV2L3JhbTAiCitTWVNMSU5VWF9USU1FT1VUID89ICI1MCIKK1NZU0xJTlVYX0xBQkVMUyA/PSAiYm9vdCBpbnN0YWxsIgorTEFCRUxTX2FwcGVuZCA9ICIgJHtTWVNMSU5VWF9MQUJFTFN9ICIKKworUk9PVEZTID89ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0uZXh0NCIKKworZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtJTklUUkRfSU1BR0V9OmRvX3Jvb3RmcyIKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKKworaW5oZXJpdCBib290aW1nCisKK0lNQUdFX1RZUEVERVBfbGl2ZSA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJsaXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1ta2xpYnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDU1YThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MKQEAgLTAsMCArMSw3MSBAQAorZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJta2xpYnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORCArPSAibWtsaWJzX29wdGltaXplX2ltYWdlOyAiCisKK21rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0KCkgeworCXJtIC1yZiAke1dPUktESVJ9L21rbGlicworCW1rZGlyIC1wICR7V09SS0RJUn0vbWtsaWJzL2Rlc3QKKwljZCAke0lNQUdFX1JPT1RGU30KKwlkdSAtYnMgPiAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dAorCWZvciBpIGluIGBmaW5kIC5gOyBkbyBmaWxlICRpOyBkb25lIFwKKwkJfCBncmVwIEVMRiBcCisJCXwgZ3JlcCAiTFNCICpleGVjdXRhYmxlIiBcCisJCXwgZ3JlcCAiZHluYW1pY2FsbHkgbGlua2VkIiBcCisJCXwgc2VkICJzLzouKi8vIiBcCisJCXwgc2VkICJzK15cLi8rKyIgXAorCQk+ICR7V09SS0RJUn0vbWtsaWJzL2V4ZWN1dGFibGVzLmxpc3QKKworCWNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKwkJcG93ZXJwYyB8IG1pcHMgfCBtaXBzZWwgfCBtaWNyb2JsYXplICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC5zby4xIgorCQkJOzsKKwkJcG93ZXJwYzY0KQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkNjQuc28uMSIKKwkJCTs7CisJCXg4Nl82NCkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC1saW51eC14ODYtNjQuc28uMiIKKwkJCTs7CisJCWk1ODYgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjIiCisJCQk7OworCQlhcm0gKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjMiCisJCQk7OworCQkqICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIvdW5rbm93bl9keW5hbWljX2xpbmtlciIKKwkJCTs7CisJZXNhYworCisJbWtsaWJzIC12IFwKKwkJLS1sZGxpYiAke2R5bmFtaWNfbG9hZGVyfSBcCisJCS0tbGliZGlyICR7YmFzZWxpYn0gXAorCQktLXN5c3Jvb3QgJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSBcCisJCS0tZ2NjLW9wdGlvbnMgIi0tc3lzcm9vdD0ke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9IiBcCisJCS0tcm9vdCAke0lNQUdFX1JPT1RGU30gXAorCQktLXRhcmdldCBgZWNobyAke1RBUkdFVF9QUkVGSVh9IHwgc2VkICdzLy0kLy8nIGAgXAorCQktZCAke1dPUktESVJ9L21rbGlicy9kZXN0IFwKKwkJYGNhdCAke1dPUktESVJ9L21rbGlicy9leGVjdXRhYmxlcy5saXN0YAorCisJY2QgJHtXT1JLRElSfS9ta2xpYnMvZGVzdAorCWZvciBpIGluICoKKwlkbworCQljcCAkaSBgZmluZCAke0lNQUdFX1JPT1RGU30gLW5hbWUgJGlgCisJZG9uZQorCisJY2QgJHtJTUFHRV9ST09URlN9CisJZHUgLWJzID4gJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dAorCisJZWNobyByb290ZnMgc2l6ZSBiZWZvcmUgbWtsaWJzIG9wdGltaXphdGlvbjogYGNhdCAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dGAKKwllY2hvIHJvb3RmcyBzaXplIGFmdGVyIG1rbGlicyBvcHRpbWl6YXRpb246IGBjYXQgJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dGAKK30KKworbWtsaWJzX29wdGltaXplX2ltYWdlKCkgeworCWZvciBpbWcgaW4gJHtNS0xJQlNfT1BUSU1JWkVEX0lNQUdFU30KKwlkbworCQlpZiBbICIke2ltZ30iID0gIiR7UE59IiBdIHx8IFsgIiR7aW1nfSIgPSAiYWxsIiBdCisJCXRoZW4KKwkJCW1rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0CisJCQlicmVhaworCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJiM2FlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAicHJlbGluay1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJwcmVsaW5rX2ltYWdlOyAiCisKK3ByZWxpbmtfaW1hZ2UgKCkgeworIwlleHBvcnQgUFNFVURPX0RFQlVHPTQKKyMJL2Jpbi9lbnYgfCAvYmluL2dyZXAgUFNFVURPCisjCWVjaG8gIkxEX0xJQlJBUllfUEFUSD0kTERfTElCUkFSWV9QQVRIIgorIwllY2hvICJMRF9QUkVMT0FEPSRMRF9QUkVMT0FEIgorCisJcHJlX3ByZWxpbmtfc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAne3NpemUgPSAkMSA7IHByaW50IHNpemUgfSdgCisJZWNobyAiU2l6ZSBiZWZvcmUgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCisKKwkjIFdlIG5lZWQgYSBwcmVsaW5rIGNvbmYgb24gdGhlIGZpbGVzeXN0ZW0sIGFkZCBvbmUgaWYgaXQncyBtaXNzaW5nCisJaWYgWyAhIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mIF07IHRoZW4KKwkJY3AgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0vcHJlbGluay5jb25mIFwKKwkJCSR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJCWR1bW15X3ByZWxpbmtfY29uZj10cnVlOworCWVsc2UKKwkJZHVtbXlfcHJlbGlua19jb25mPWZhbHNlOworCWZpCisKKwkjIHByZWxpbmshCisJJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0vcHJlbGluayAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC1hbVIgLU4gLWMgJHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKworCSMgUmVtb3ZlIHRoZSBwcmVsaW5rLmNvbmYgaWYgd2UgaGFkIHRvIGFkZCBpdC4KKwlpZiBbICIkZHVtbXlfcHJlbGlua19jb25mIiA9ICJ0cnVlIiBdOyB0aGVuCisJCXJtIC1mICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJZmkKKworCXByZV9wcmVsaW5rX3NpemU9YGR1IC1rcyAke0lNQUdFX1JPT1RGU30gfCBhd2sgJ3tzaXplID0gJDEgOyBwcmludCBzaXplIH0nYAorCWVjaG8gIlNpemUgYWZ0ZXIgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzMTg1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXN3YWIuYmJjbGFzcwpAQCAtMCwwICsxLDk0IEBACitIT1NUX0RBVEEgPz0gIiR7VE1QRElSfS9ob3N0LWNvbnRhbWluYXRpb24tZGF0YS8iCitTV0FCQkVSX1JFUE9SVCA/PSAiJHtMT0dfRElSfS9zd2FiYmVyLyIKK1NXQUJCRVJfTE9HUyA/PSAiJHtMT0dfRElSfS9jb250YW1pbmF0aW9uLWxvZ3MiCitUUkFDRV9MT0dESVIgPz0gIiR7U1dBQkJFUl9MT0dTfS8ke1BBQ0tBR0VfQVJDSH0iCitUUkFDRV9MT0dGSUxFID0gIiR7VFJBQ0VfTE9HRElSfS8ke1BOfS0ke1BWfSIKKworU1dBQl9PUklHX1RBU0sgOj0gIiR7QkJfREVGQVVMVF9UQVNLfSIKK0JCX0RFRkFVTFRfVEFTSyA9ICJnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCIKKworIyBTZXZlcmFsIHJlY2lwZXMgZG9uJ3QgYnVpbGQgd2l0aCBwYXJhbGxlbCBtYWtlIHdoZW4gcnVuIHVuZGVyIHN0cmFjZQorIyBJZGVhbGx5IHRoZXNlIHNob3VsZCBiZSBmaXhlZCBidXQgYXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBkaXNhYmxlIHBhcmFsbGVsCisjIGJ1aWxkcyBmb3IgdHJvdWJsZXNvbWUgcmVjaXBlcworUEFSQUxMRUxfTUFLRV9wbi1vcGVuc3NsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2xpYmMgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbGliLTIuMCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhtbDIgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1yZWFkbGluZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXV0aWwtbGludXggPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1iaW51dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJpc29uID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY21ha2UgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1lbGZ1dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYy1ydW50aW1lID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbTQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1vcGtnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcGtnY29uZmlnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcHJlbGluayA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXJwbSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXRjbCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJlZWNyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY3VybCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdtcCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYm1wYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhzbHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1sem8gPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wb3B0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGludXgtd3JzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGliZ2NyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ3BnbWUgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi11ZGV2ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ251dGxzID0gIiIKKworcHl0aG9uKCkgeworICAgICMgTk9URTogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIGRldGVjdCBob3N0IGluZmVjdGlvbiBvbiBuYXRpdmUgYW5kIGNyb3NzCisgICAgIyBwYWNrYWdlcyBidXQgYXMgaXQgdHVybnMgb3V0IHRvIGJlIHByZXR0eSBoYXJkIHRvIGRvIHRoaXMgZm9yIGFsbCBuYXRpdmUKKyAgICAjIGFuZCBjcm9zcyBwYWNrYWdlcyB3aGljaCBhcmVuJ3Qgc3dhYmJlci1uYXRpdmUgb3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMKKyAgICAjIEkgaGF2ZSBpZ25vcmVkIHRoZW0gZm9yIG5vdy4uLgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZGVwcyA9IChkLmdldFZhckZsYWcoJ2RvX3NldHNjZW5lJywgJ2RlcGVuZHMnKSBvciAiIikuc3BsaXQoKQorICAgICAgICBkZXBzLmFwcGVuZCgnc3RyYWNlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19zZXRzY2VuZScsICdkZXBlbmRzJywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGxvZ2RpciA9IGQuZXhwYW5kKCIke1RSQUNFX0xPR0RJUn0iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobG9nZGlyKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdTVFJBQ0VGVU5DJywgJycpCit9CisKK1NUUkFDRVBJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCitTVFJBQ0VGVU5DID0gImltYWdlc3dhYl9hdHRhY2hzdHJhY2UiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiR7U1RSQUNFRlVOQ30iCitkb19jb21waWxlW3ByZWZ1bmNzXSArPSAiJHtTVFJBQ0VGVU5DfSIKKworaW1hZ2Vzd2FiX2F0dGFjaHN0cmFjZSAoKSB7CisJU1RSQUNFPWB3aGljaCBzdHJhY2VgCisKKwlpZiBbIC14ICIkU1RSQUNFIiBdOyB0aGVuCisJCXN3YWJiZXItc3RyYWNlLWF0dGFjaCAiJFNUUkFDRSAtZiAtbyAke1RSQUNFX0xPR0ZJTEV9LSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyAtZSB0cmFjZT1vcGVuLGV4ZWN2ZSAtcCAke1NUUkFDRVBJRH0iICIke1RSQUNFX0xPR0ZJTEV9LXRyYWNlYXR0YWNoLSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyIKKwlmaQorfQorCitkb19nZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCAoKSB7CisKKwl1cGRhdGVfZGlzdHJvICR7SE9TVF9EQVRBfQorCisJIyBTd2FiYmVyIGNhbid0IGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB1cworCW1rZGlyIC1wICR7U1dBQkJFUl9SRVBPUlR9CisKKwlSRVBPUlRTVEFNUD0ke1NXQUJfT1JJR19UQVNLfS1gZGF0ZSArJTJtJTJkJTJIJTJNJVlgCisKKwlpZiBbIGB3aGljaCBjY2FjaGVgIF0gOyB0aGVuCisJCUNDQUNIRV9ESVI9YCggY2NhY2hlIC1zIHwgZ3JlcCAiY2FjaGUgZGlyZWN0b3J5IiB8IGdyZXAgLW8gJ1teIF0qJCcgMj4gL2Rldi9udWxsIClgCisgCWZpCisKKwlpZiBbICIkKGxzIC1BICR7SE9TVF9EQVRBfSkiIF07IHRoZW4KKwkJZWNobyAiR2VuZXJhdGluZyBzd2FiYmVyIHJlcG9ydCIKKwkJc3dhYmJlciAtZCAke0hPU1RfREFUQX0gLWwgJHtTV0FCQkVSX0xPR1N9IC1vICR7U1dBQkJFUl9SRVBPUlR9L3JlcG9ydC0ke1JFUE9SVFNUQU1QfS50eHQgLXIgJHtTV0FCQkVSX1JFUE9SVH0vZXh0cmFfcmVwb3J0LSR7UkVQT1JUU1RBTVB9LnR4dCAtYyBhbGwgLXAgJHtUT1BESVJ9IC1mICR7T0VST09UfS9tZXRhL2NvbmYvc3dhYmJlciAke1RPUERJUn0gJHtPRVJPT1R9ICR7Q0NBQ0hFX0RJUn0KKwllbHNlCisJCWVjaG8gIk5vIGhvc3QgZGF0YSwgY2Fubm90IGdlbmVyYXRlIHN3YWJiZXIgcmVwb3J0LiIKKwlmaQorfQorYWRkdGFzayBnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCBhZnRlciBkb18ke1NXQUJfT1JJR19UQVNLfQorZG9fZ2VuZXJhdGVfc3dhYmJlcl9yZXBvcnRbZGVwZW5kc10gPSAic3dhYmJlci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzI2NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCkBAIC0wLDAgKzEsNDkgQEAKKworU1lTTElOVVhfUFJPTVBUID89ICIwIgorU1lTTElOVVhfTEFCRUxTID0gImJvb3QiCitMQUJFTFNfYXBwZW5kID0gIiAke1NZU0xJTlVYX0xBQkVMU30gIgorCisjIFVzaW5nIGFuIGluaXRyYW1mcyBpcyBvcHRpb25hbC4gRW5hYmxlIGl0IGJ5IHNldHRpbmcgSU5JVFJEX0lNQUdFLgorSU5JVFJEX0lNQUdFID89ICIiCitJTklUUkQgPz0gIiR7QCcke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJEX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8uZ3onIGlmICcke0lOSVRSRF9JTUFHRX0nIGVsc2UgJyd9IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7QCcke0lOSVRSRF9JTUFHRX06ZG9fcm9vdGZzJyBpZiAnJHtJTklUUkRfSU1BR0V9JyBlbHNlICcnfSIKKworIyBuZWVkIHRvIGRlZmluZSB0aGUgZGVwZW5kZW5jeSBhbmQgdGhlIFJPT1RGUyBmb3IgZGlyZWN0ZGlzaworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKK1JPT1RGUyA/PSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9LmV4dDQiCisKKyMgY3JlYXRpbmcgVk0gaW1hZ2VzIHJlbGllcyBvbiBoYXZpbmcgYSBoZGRpbWcgc28gZW5zdXJlIHdlIGluaGVyaXQgaXQgaGVyZS4KK2luaGVyaXQgYm9vdC1kaXJlY3RkaXNrCisKK0lNQUdFX1RZUEVERVBfdm1kayA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF92ZGkgPSAiZXh0NCIKK0lNQUdFX1RZUEVERVBfcWNvdzIgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAidm1kayB2ZGkgcWNvdzIiCisKK2NyZWF0ZV92bWRrX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0udm1kaworICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udm1kaworfQorCitjcmVhdGVfdmRpX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZkaSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS52ZGkKKyAgICBsbiAtc2YgJHtJTUFHRV9OQU1FfS52ZGkgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udmRpCit9CisKK2NyZWF0ZV9xY293Ml9pbWFnZSAoKSB7CisgICAgcWVtdS1pbWcgY29udmVydCAtTyBxY293MiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5xY293MgorICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnFjb3cyICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LnFjb3cyCit9CisKK3B5dGhvbiBkb192bWltZygpIHsKKyAgICBpZiAndm1kaycgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdm1ka19pbWFnZScsIGQpCisgICAgaWYgJ3ZkaScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdmRpX2ltYWdlJywgZCkKKyAgICBpZiAncWNvdzInIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX3Fjb3cyX2ltYWdlJywgZCkKK30KKworYWRkdGFzayB2bWltZyBhZnRlciBkb19ib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKK2RvX3ZtaW1nW2RlcGVuZHNdICs9ICJxZW11LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmE5OGJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDUyMCBAQAoraW5oZXJpdCByb290ZnNfJHtJTUFHRV9QS0dUWVBFfQorCitpbmhlcml0IHBvcHVsYXRlX3Nka19leHQKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLICs9ICIke1BBQ0tBR0VfSU5TVEFMTH0iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkgKz0gIiR7UEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZfSIKK1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EICs9ICJyb290ZnNfc3lzcm9vdF9yZWxhdGl2ZWxpbmtzOyAiCisKK2luaGVyaXQgZ3ppcG5hdGl2ZQorCitMSUNFTlNFID0gIk1JVCIKK1BBQ0tBR0VTID0gIiIKK0RFUEVORFMgKz0gIiR7TUxQUkVGSVh9cWVtdXdyYXBwZXItY3Jvc3MgJHtNTFBSRUZJWH1kZXBtb2R3cmFwcGVyLWNyb3NzIgorUkRFUEVORFMgKz0gIiR7UEFDS0FHRV9JTlNUQUxMfSAke0xJTkdVQVNfSU5TVEFMTH0iCitSUkVDT01NRU5EUyArPSAiJHtQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFl9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitURVNUSU1BR0VDTEFTUyA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdURVNUX0lNQUdFJywgJzEnLCAndGVzdGltYWdlLWF1dG8nLCAnJywgZCl9IgoraW5oZXJpdCAke1RFU1RJTUFHRUNMQVNTfQorCisjIElNQUdFX0ZFQVRVUkVTIG1heSBjb250YWluIGFueSBhdmFpbGFibGUgcGFja2FnZSBncm91cAorSU1BR0VfRkVBVFVSRVMgPz0gIiIKK0lNQUdFX0ZFQVRVUkVTW3R5cGVdID0gImxpc3QiCitJTUFHRV9GRUFUVVJFU1t2YWxpZGl0ZW1zXSArPSAiZGVidWctdHdlYWtzIHJlYWQtb25seS1yb290ZnMgZW1wdHktcm9vdC1wYXNzd29yZCBhbGxvdy1lbXB0eS1wYXNzd29yZCBwb3N0LWluc3RhbGwtbG9nZ2luZyIKKworIyBHZW5lcmF0ZSBjb21wYW5pb24gZGVidWdmcz8KK0lNQUdFX0dFTl9ERUJVR0ZTID89ICIwIgorCisjIHJvb3RmcyBib290c3RyYXAgaW5zdGFsbAorUk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLCAiIiwgIiR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IixkKX0iCisKKyMgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tIGZlYXR1cmVzCitGRUFUVVJFX0lOU1RBTEwgPSAiJHtAJyAnLmpvaW4ob2UucGFja2FnZWdyb3VwLnJlcXVpcmVkX3BhY2thZ2VzKG9lLmRhdGEudHlwZWRfdmFsdWUoJ0lNQUdFX0ZFQVRVUkVTJywgZCksIGQpKX0iCitGRUFUVVJFX0lOU1RBTExbdmFyZGVwdmFsdWVdID0gIiR7RkVBVFVSRV9JTlNUQUxMfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTCA9ICIke0AnICcuam9pbihvZS5wYWNrYWdlZ3JvdXAub3B0aW9uYWxfcGFja2FnZXMob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSwgZCkpfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTFt2YXJkZXB2YWx1ZV0gPSAiJHtGRUFUVVJFX0lOU1RBTExfT1BUSU9OQUx9IgorCisjIERlZmluZSBzb21lIHZlcnkgYmFzaWMgZmVhdHVyZSBwYWNrYWdlIGdyb3VwcworRkVBVFVSRV9QQUNLQUdFU19wYWNrYWdlLW1hbmFnZW1lbnQgPSAiJHtST09URlNfUEtHTUFOQUdFfSIKK1NQTEFTSCA/PSAicHNwbGFzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3BsYXNoID0gIiR7U1BMQVNIfSIKKworSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZID0gJyR7QGNvbXBsZW1lbnRhcnlfZ2xvYnMoIklNQUdFX0ZFQVRVUkVTIiwgZCl9JworCitkZWYgY2hlY2tfaW1hZ2VfZmVhdHVyZXMoZCk6CisgICAgdmFsaWRfZmVhdHVyZXMgPSAoZC5nZXRWYXJGbGFnKCdJTUFHRV9GRUFUVVJFUycsICd2YWxpZGl0ZW1zJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YWxpZF9mZWF0dXJlcyArPSBkLmdldFZhckZsYWdzKCdDT01QTEVNRU5UQVJZX0dMT0InKS5rZXlzKCkKKyAgICBmb3IgdmFyIGluIGQ6CisgICAgICAgaWYgdmFyLnN0YXJ0c3dpdGgoIlBBQ0tBR0VfR1JPVVBfIik6CisgICAgICAgICAgIGJiLndhcm4oIlBBQ0tBR0VfR1JPVVAgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBGRUFUVVJFX1BBQ0tBR0VTIGluc3RlYWQiKQorICAgICAgICAgICB2YWxpZF9mZWF0dXJlcy5hcHBlbmQodmFyWzE0Ol0pCisgICAgICAgZWxpZiB2YXIuc3RhcnRzd2l0aCgiRkVBVFVSRV9QQUNLQUdFU18iKToKKyAgICAgICAgICAgdmFsaWRfZmVhdHVyZXMuYXBwZW5kKHZhclsxNzpdKQorICAgIHZhbGlkX2ZlYXR1cmVzLnNvcnQoKQorCisgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZmVhdHVyZSBub3QgaW4gdmFsaWRfZmVhdHVyZXM6CisgICAgICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygnRVhUUkFfSU1BR0VfRkVBVFVSRVMnLCBmZWF0dXJlLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgiJyVzJyBpbiBJTUFHRV9GRUFUVVJFUyAoYWRkZWQgdmlhIEVYVFJBX0lNQUdFX0ZFQVRVUkVTKSBpcyBub3QgYSB2YWxpZCBpbWFnZSBmZWF0dXJlLiBWYWxpZCBmZWF0dXJlczogJXMiICUgKGZlYXR1cmUsICcgJy5qb2luKHZhbGlkX2ZlYXR1cmVzKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBSZWNpcGUoIiclcycgaW4gSU1BR0VfRkVBVFVSRVMgaXMgbm90IGEgdmFsaWQgaW1hZ2UgZmVhdHVyZS4gVmFsaWQgZmVhdHVyZXM6ICVzIiAlIChmZWF0dXJlLCAnICcuam9pbih2YWxpZF9mZWF0dXJlcykpKQorCitJTUFHRV9JTlNUQUxMID89ICIiCitJTUFHRV9JTlNUQUxMW3R5cGVdID0gImxpc3QiCitleHBvcnQgUEFDS0FHRV9JTlNUQUxMID89ICIke0lNQUdFX0lOU1RBTEx9ICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSAke0ZFQVRVUkVfSU5TVEFMTH0iCitQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkgPz0gIiR7RkVBVFVSRV9JTlNUQUxMX09QVElPTkFMfSIKKworIyBJbWFnZXMgYXJlIGdlbmVyYWxseSBidWlsdCBleHBsaWNpdGx5LCBkbyBub3QgbmVlZCB0byBiZSBwYXJ0IG9mIHdvcmxkLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1VTRV9ERVZGUyA/PSAiMSIKK1VTRV9ERVBNT0QgPz0gIjEiCisKK1BJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0xEQ09ORklHREVQRU5EID89ICJsZGNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0xEQ09ORklHREVQRU5EX2xpYmMtdWNsaWJjID0gIiIKK0xEQ09ORklHREVQRU5EX2xpYmMtbXVzbCA9ICIiCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gaGF2ZSBkZXBtb2QgZGF0YSBpbiBQS0dEQVRBX0RJUiwKKyMgYnV0IGlmIHlvdSdyZSBidWlsZGluZyBzbWFsbCBpbml0cmFtZnMgaW1hZ2UKKyMgZS5nLiB0byBpbmNsdWRlIGl0IGluIHlvdXIga2VybmVsLCB5b3UgcHJvYmFibHkKKyMgZG9uJ3Qgd2FudCB0aGlzIGRlcGVuZGVuY3ksIHdoaWNoIGlzIGNhdXNpbmcgZGVwZW5kZW5jeSBsb29wCitLRVJORUxERVBNT0RERVBFTkQgPz0gInZpcnR1YWwva2VybmVsOmRvX3BhY2thZ2VkYXRhIgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gIiBcCisgICAgbWFrZWRldnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCAke0xEQ09ORklHREVQRU5EfSBcCisgICAgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHVwZGF0ZS1yYy5kLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAke0tFUk5FTERFUE1PRERFUEVORH0gXAorIgorZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZWRhdGEiCisKK2RlZiBjb21tYW5kX3ZhcmlhYmxlcyhkKToKKyAgICByZXR1cm4gWydST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVElOU1RBTExfQ09NTUFORCcsJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCdJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJywKKyAgICAgICAgICAgICdJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EJywnU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsICAgICAgICAgCisgICAgICAgICAgICAnUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJ10KKworcHl0aG9uICgpIHsKKyAgICB2YXJpYWJsZXMgPSBjb21tYW5kX3ZhcmlhYmxlcyhkKQorICAgIGZvciB2YXIgaW4gdmFyaWFibGVzOgorICAgICAgICBpZiBkLmdldFZhcih2YXIsIEZhbHNlKToKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyh2YXIsICdmdW5jJywgJzEnKQorfQorCitkZWYgZnN0eXBlX3ZhcmlhYmxlcyhkKToKKyAgICBpbXBvcnQgb2UuaW1hZ2UKKworICAgIGltYWdlID0gb2UuaW1hZ2UuSW1hZ2UoZCkKKyAgICBhbGx0eXBlcywgZnN0eXBlX2dyb3VwcywgY2ltYWdlcyA9IGltYWdlLl9nZXRfaW1hZ2VfdHlwZXMoKQorICAgIGZzdHlwZV92YXJzID0gc2V0KCkKKyAgICBmb3IgZnN0eXBlX2dyb3VwIGluIGZzdHlwZV9ncm91cHM6CisgICAgICAgIGZvciBmc3R5cGUgaW4gZnN0eXBlX2dyb3VwOgorICAgICAgICAgICAgZnN0eXBlX3ZhcnMuYWRkKCdJTUFHRV9DTURfJyArIGZzdHlwZSkKKyAgICAgICAgICAgIGlmIGZzdHlwZSBpbiBjaW1hZ2VzOgorICAgICAgICAgICAgICAgIGZvciBjdHlwZSBpbiBjaW1hZ2VzW2ZzdHlwZV06CisgICAgICAgICAgICAgICAgICAgIGZzdHlwZV92YXJzLmFkZCgnQ09NUFJFU1NfQ01EXycgKyBjdHlwZSkKKworICAgIHJldHVybiBzb3J0ZWQoZnN0eXBlX3ZhcnMpCisKK2RlZiByb290ZnNfdmFyaWFibGVzKGQpOgorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCB2YXJpYWJsZV9kZXBlbmRzCisgICAgdmFyaWFibGVzID0gWydJTUFHRV9ERVZJQ0VfVEFCTEVTJywnQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCdJTUFHRV9UWVBFU19NQVNLRUQnLCdJTUFHRV9ST09URlNfQUxJR05NRU5UJywnSU1BR0VfT1ZFUkhFQURfRkFDVE9SJywnSU1BR0VfUk9PVEZTX1NJWkUnLCdJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnLAorICAgICAgICAgICAgICAgICAnSU1BR0VfUk9PVEZTX01BWFNJWkUnLCdJTUFHRV9OQU1FJywnSU1BR0VfTElOS19OQU1FJywnSU1BR0VfTUFOSUZFU1QnLCdERVBMT1lfRElSX0lNQUdFJywnUk1fT0xEX0lNQUdFJywnSU1BR0VfRlNUWVBFUycsJ0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsJ0lNQUdFX0xJTkdVQVMnLCdTREtfT1MnLAorICAgICAgICAgICAgICAgICAnU0RLX09VVFBVVCcsJ1NES1BBVEhOQVRJVkUnLCdTREtUQVJHRVRTWVNST09UJywnU0RLX0RJUicsJ1NES19WRU5ET1InLCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCdTREtfUEFDS0FHRV9BUkNIUycsJ1NES19PVVRQVVQnLCdTREtUQVJHRVRTWVNST09UJywnTVVMVElMSUJSRV9BTExPV19SRVAnLAorICAgICAgICAgICAgICAgICAnTVVMVElMSUJfVEVNUF9ST09URlMnLCdNVUxUSUxJQl9WQVJJQU5UUycsJ01VTFRJTElCUycsJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywnTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywnQkFEX1JFQ09NTUVOREFUSU9OUycsJ05PX1JFQ09NTUVOREFUSU9OUycsJ1BBQ0tBR0VfQVJDSFMnLAorICAgICAgICAgICAgICAgICAnUEFDS0FHRV9DTEFTU0VTJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9WRU5ET1InLCdUQVJHRVRfQVJDSCcsJ1RBUkdFVF9PUycsJ09WRVJSSURFUycsJ0JCRVhURU5EVkFSSUFOVCcsJ0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJJywnSU5URVJDRVBUX0RJUicsJ1VTRV9ERVZGUycsCisgICAgICAgICAgICAgICAgICdDT01QUkVTU0lPTlRZUEVTJywgJ0lNQUdFX0dFTl9ERUJVR0ZTJ10KKyAgICB2YXJpYWJsZXMuZXh0ZW5kKGZzdHlwZV92YXJpYWJsZXMoZCkpCisgICAgdmFyaWFibGVzLmV4dGVuZChjb21tYW5kX3ZhcmlhYmxlcyhkKSkKKyAgICB2YXJpYWJsZXMuZXh0ZW5kKHZhcmlhYmxlX2RlcGVuZHMoZCkpCisgICAgcmV0dXJuICIgIi5qb2luKHZhcmlhYmxlcykKKworZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICIke0Byb290ZnNfdmFyaWFibGVzKGQpfSIKKworZG9fYnVpbGRbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX2RlcGxveSIKKworZGVmIGJ1aWxkX2xpdmUoZCk6CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZTVFlQRVMiLCAibGl2ZSIsICJsaXZlIiwgIjAiLCBkKSA9PSAiMCI6ICMgbGl2ZSBpcyBub3Qgc2V0IGJ1dCBob2IgbWlnaHQgc2V0IGlzbyBvciBoZGRpbWcKKyAgICAgICAgZC5zZXRWYXIoJ05PSVNPJywgYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX0ZTVFlQRVMnLCAiaXNvIiwgIjAiLCAiMSIsIGQpKQorICAgICAgICBkLnNldFZhcignTk9IREQnLCBiYi51dGlscy5jb250YWlucygnSU1BR0VfRlNUWVBFUycsICJoZGRpbWciLCAiMCIsICIxIiwgZCkpCisgICAgICAgIGlmIGQuZ2V0VmFyKCdOT0lTTycsIFRydWUpID09ICIwIiBvciBkLmdldFZhcignTk9IREQnLCBUcnVlKSA9PSAiMCI6CisgICAgICAgICAgICByZXR1cm4gImltYWdlLWxpdmUiCisgICAgICAgIHJldHVybiAiIgorICAgIHJldHVybiAiaW1hZ2UtbGl2ZSIKKworSU1BR0VfVFlQRV9saXZlID0gIiR7QGJ1aWxkX2xpdmUoZCl9IgoraW5oZXJpdCAke0lNQUdFX1RZUEVfbGl2ZX0KKworSU1BR0VfVFlQRV92bSA9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZTVFlQRVMiLCBbInZtZGsiLCAidmRpIiwgInFjb3cyIl0sICJpbWFnZS12bSIsICIiLCBkKX0nCitpbmhlcml0ICR7SU1BR0VfVFlQRV92bX0KKworcHl0aG9uICgpIHsKKyAgICBkZXBzID0gIiAiICsgaW1hZ2V0eXBlc19nZXRkZXBlbmRzKGQpCisgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19yb290ZnMnLCAnZGVwZW5kcycsIGRlcHMpCisKKyAgICBkZXBzID0gIiIKKyAgICBmb3IgZGVwIGluIChkLmdldFZhcignRVhUUkFfSU1BR0VERVBFTkRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcAorICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYnVpbGQnLCAnZGVwZW5kcycsIGRlcHMpCisKKyAgICAjcHJvY2VzcyBJTUFHRV9GRUFUVVJFUywgd2UgbXVzdCBkbyB0aGlzIGJlZm9yZSBydW50aW1lX21hcHBpbmdfcmVuYW1lCisgICAgI0NoZWNrIGZvciByZXBsYWNlcyBpbWFnZSBmZWF0dXJlcworICAgIGZlYXR1cmVzID0gc2V0KG9lLmRhdGEudHlwZWRfdmFsdWUoJ0lNQUdFX0ZFQVRVUkVTJywgZCkpCisgICAgcmVtYWluX2ZlYXR1cmVzID0gZmVhdHVyZXMuY29weSgpCisgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIHJlcGxhY2VzID0gc2V0KChkLmdldFZhcigiSU1BR0VfRkVBVFVSRVNfUkVQTEFDRVNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIHJlbWFpbl9mZWF0dXJlcyAtPSByZXBsYWNlcworCisgICAgI0NoZWNrIGZvciBjb25mbGljdCBpbWFnZSBmZWF0dXJlcworICAgIGZvciBmZWF0dXJlIGluIHJlbWFpbl9mZWF0dXJlczoKKyAgICAgICAgY29uZmxpY3RzID0gc2V0KChkLmdldFZhcigiSU1BR0VfRkVBVFVSRVNfQ09ORkxJQ1RTXyVzIiAlIGZlYXR1cmUsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICB0ZW1wID0gY29uZmxpY3RzICYgcmVtYWluX2ZlYXR1cmVzCisgICAgICAgIGlmIHRlbXA6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgY29udGFpbnMgY29uZmxpY3RpbmcgSU1BR0VfRkVBVFVSRVMgJXMgJXMiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBmZWF0dXJlLCAnICcuam9pbihsaXN0KHRlbXApKSkpCisKKyAgICBkLnNldFZhcignSU1BR0VfRkVBVFVSRVMnLCAnICcuam9pbihsaXN0KHJlbWFpbl9mZWF0dXJlcykpKQorCisgICAgY2hlY2tfaW1hZ2VfZmVhdHVyZXMoZCkKKyAgICBpbml0cmFtZnNfaW1hZ2UgPSBkLmdldFZhcignSU5JVFJBTUZTX0lNQUdFJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiBpbml0cmFtZnNfaW1hZ2UgIT0gIiI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYnVpbGQnLCAnZGVwZW5kcycsICIgJXM6ZG9fYnVuZGxlX2luaXRyYW1mcyIgJSAgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYnVuZGxlX2luaXRyYW1mcycsICdkZXBlbmRzJywgIiAlczpkb19yb290ZnMiICUgaW5pdHJhbWZzX2ltYWdlKQorfQorCitJTUFHRV9DTEFTU0VTICs9ICJpbWFnZV90eXBlcyIKK2luaGVyaXQgJHtJTUFHRV9DTEFTU0VTfQorCitJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EID89ICIiCisKKyMgWmFwIHRoZSByb290IHBhc3N3b3JkIGlmIGRlYnVnLXR3ZWFrcyBmZWF0dXJlIGlzIG5vdCBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GRUFUVVJFUyIsIFsgJ2RlYnVnLXR3ZWFrcycsICdlbXB0eS1yb290LXBhc3N3b3JkJyBdLCAiIiwgInphcF9lbXB0eV9yb290X3Bhc3N3b3JkIDsgIixkKX0nCisKKyMgQWxsb3cgZHJvcGJlYXIvb3BlbnNzaCB0byBhY2NlcHQgbG9naW5zIGZyb20gYWNjb3VudHMgd2l0aCBhbiBlbXB0eSBwYXNzd29yZCBzdHJpbmcgaWYgZGVidWctdHdlYWtzIGlzIGVuYWJsZWQKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZFQVRVUkVTIiwgWyAnZGVidWctdHdlYWtzJywgJ2FsbG93LWVtcHR5LXBhc3N3b3JkJyBdLCAic3NoX2FsbG93X2VtcHR5X3Bhc3N3b3JkOyAiLCAiIixkKX0nCisKKyMgRW5hYmxlIHBvc3RpbnN0IGxvZ2dpbmcgaWYgZGVidWctdHdlYWtzIGlzIGVuYWJsZWQKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZFQVRVUkVTIiwgWyAnZGVidWctdHdlYWtzJywgJ3Bvc3QtaW5zdGFsbC1sb2dnaW5nJyBdLCAicG9zdGluc3RfZW5hYmxlX2xvZ2dpbmc7ICIsICIiLGQpfScKKworIyBDcmVhdGUgL2V0Yy90aW1lc3RhbXAgZHVyaW5nIGltYWdlIGNvbnN0cnVjdGlvbiB0byBnaXZlIGEgcmVhc29uYWJseSBzYW5lIGRlZmF1bHQgdGltZSBzZXR0aW5nCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAicm9vdGZzX3VwZGF0ZV90aW1lc3RhbXAgOyAiCisKKyMgVHdlYWsgdGhlIG1vdW50IG9wdGlvbnMgZm9yIHJvb3RmcyBpbiAvZXRjL2ZzdGFiIGlmIHJlYWQtb25seS1yb290ZnMgaXMgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJyZWFkLW9ubHktcm9vdGZzIiwgInJlYWRfb25seV9yb290ZnNfaG9vazsgIiwgIiIsZCl9JworCisjIFdyaXRlIG1hbmlmZXN0CitJTUFHRV9NQU5JRkVTVCA9ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLm1hbmlmZXN0IgorUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCA9KyAid3JpdGVfaW1hZ2VfbWFuaWZlc3QgOyAiCisjIFNldCBkZWZhdWx0IHBvc3RpbnN0IGxvZyBmaWxlCitQT1NUSU5TVF9MT0dGSUxFID89ICIke2xvY2Fsc3RhdGVkaXJ9L2xvZy9wb3N0aW5zdGFsbC5sb2ciCisjIFNldCBkZWZhdWx0IHRhcmdldCBmb3Igc3lzdGVtZCBpbWFnZXMKK1NZU1RFTURfREVGQVVMVF9UQVJHRVQgPz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJ4MTEtYmFzZSIsICJncmFwaGljYWwudGFyZ2V0IiwgIm11bHRpLXVzZXIudGFyZ2V0IiwgZCl9JworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdGVtZCIsICJzZXRfc3lzdGVtZF9kZWZhdWx0X3RhcmdldDsgIiwgIiIsIGQpfScKKworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJ2VtcHR5X3Zhcl92b2xhdGlsZTsnCisKKyMgc29tZSBkZWZhdWx0IGxvY2FsZXMKK0lNQUdFX0xJTkdVQVMgPz0gImRlLWRlIGZyLWZyIGVuLWdiIgorCitMSU5HVUFTX0lOU1RBTEwgPz0gIiR7QCIgIi5qb2luKG1hcChsYW1iZGEgczogImxvY2FsZS1iYXNlLSVzIiAlIHMsIGQuZ2V0VmFyKCdJTUFHRV9MSU5HVUFTJywgVHJ1ZSkuc3BsaXQoKSkpfSIKKworIyBQcmVmZXIgaW1hZ2UsIGJ1dCB1c2UgdGhlIGZhbGxiYWNrIGZpbGVzIGZvciBsb29rdXBzIGlmIHRoZSBpbWFnZSBvbmVzCisjIGFyZW4ndCB5ZXQgYXZhaWxhYmxlLgorUFNFVURPX1BBU1NXRCA9ICIke0lNQUdFX1JPT1RGU306JHtTVEFHSU5HX0RJUl9OQVRJVkV9IgorCitkb19yb290ZnNbZGlyc10gPSAiJHtUT1BESVJ9IgorZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7SU1BR0VfUk9PVEZTfS5sb2NrIgorZG9fcm9vdGZzW2NsZWFuZGlyc10gKz0gIiR7U30iCisKKyMgTXVzdCBjYWxsIHJlYWxfZG9fcm9vdGZzKCkgZnJvbSBpbnNpZGUgaGVyZSwgcmF0aGVyIHRoYW4gYXMgYSBzZXBhcmF0ZQorIyB0YXNrLCBzbyB0aGF0IHdlIGhhdmUgYSBzaW5nbGUgZmFrZXJvb3QgY29udGV4dCBmb3IgdGhlIHdob2xlIHByb2Nlc3MuCitkb19yb290ZnNbdW1hc2tdID0gIjAyMiIKKworIyBBIGhvb2sgZnVuY3Rpb24gdG8gc3VwcG9ydCByZWFkLW9ubHktcm9vdGZzIElNQUdFX0ZFQVRVUkVTCityZWFkX29ubHlfcm9vdGZzX2hvb2sgKCkgeworCSMgVHdlYWsgdGhlIG1vdW50IG9wdGlvbiBhbmQgZnNfcGFzc25vIGZvciByb290ZnMgaW4gZnN0YWIKKwlzZWQgLWkgLWUgJy9eWyNbOnNwYWNlOl1dKlwvZGV2XC9yb290L3tzL2RlZmF1bHRzL3JvLztzL1woW1s6c3BhY2U6XV0qW1s6ZGlnaXQ6XV1cKVwoW1s6c3BhY2U6XV0qXClbWzpkaWdpdDpdXSQvXDFcMjAvfScgJHtJTUFHRV9ST09URlN9L2V0Yy9mc3RhYgorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN2aW5pdCIsICJ0cnVlIiwgImZhbHNlIiwgZCl9OyB0aGVuCisJCSMgQ2hhbmdlIHRoZSB2YWx1ZSBvZiBST09URlNfUkVBRF9PTkxZIGluIC9ldGMvZGVmYXVsdC9yY1MgdG8geWVzCisJCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3JjUyBdOyB0aGVuCisJCQlzZWQgLWkgJ3MvUk9PVEZTX1JFQURfT05MWT1uby9ST09URlNfUkVBRF9PTkxZPXllcy8nICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9yY1MKKwkJZmkKKwkJIyBSdW4gcG9wdWxhdGUtdm9sYXRpbGUuc2ggYXQgcm9vdGZzIHRpbWUgdG8gc2V0IHVwIGJhc2ljIGZpbGVzCisJCSMgYW5kIGRpcmVjdG9yaWVzIHRvIHN1cHBvcnQgcmVhZC1vbmx5IHJvb3Rmcy4KKwkJaWYgWyAteCAke0lNQUdFX1JPT1RGU30vZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdOyB0aGVuCisJCQkke0lNQUdFX1JPT1RGU30vZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaAorCQlmaQorCQkjIElmIHdlJ3JlIHVzaW5nIG9wZW5zc2ggYW5kIHRoZSAvZXRjL3NzaCBkaXJlY3RvcnkgaGFzIG5vIHByZS1nZW5lcmF0ZWQga2V5cywKKwkJIyB3ZSBzaG91bGQgY29uZmlndXJlIG9wZW5zc2ggdG8gdXNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgL2V0Yy9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKwkJIyBhbmQgdGhlIGtleXMgdW5kZXIgL3Zhci9ydW4vc3NoLgorCQlpZiBbIC1kICR7SU1BR0VfUk9PVEZTfS9ldGMvc3NoIF07IHRoZW4KKwkJCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9L2V0Yy9zc2gvc3NoX2hvc3RfcnNhX2tleSBdOyB0aGVuCisJCQkJZWNobyAiU1lTQ09ORkRJUj0vZXRjL3NzaCIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3NzaAorCQkJCWVjaG8gIlNTSERfT1BUUz0iID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCWVsc2UKKwkJCQllY2hvICJTWVNDT05GRElSPS92YXIvcnVuL3NzaCIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3NzaAorCQkJCWVjaG8gIlNTSERfT1BUUz0nLWYgL2V0Yy9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHknIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQlmaQorCQlmaQorCWZpCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3RlbWQiLCAidHJ1ZSIsICJmYWxzZSIsIGQpfTsgdGhlbgorCSAgICAjIFVwZGF0ZSB1c2VyIGRhdGFiYXNlIGZpbGVzIHNvIHRoYXQgc2VydmljZXMgZG9uJ3QgZmFpbCBmb3IgYSByZWFkLW9ubHkgc3lzdGVtZCBzeXN0ZW0KKwkgICAgZm9yIGNvbmZmaWxlIGluICR7SU1BR0VfUk9PVEZTfS91c3IvbGliL3N5c3VzZXJzLmQvc3lzdGVtZC5jb25mICR7SU1BR0VfUk9PVEZTfS91c3IvbGliL3N5c3VzZXJzLmQvc3lzdGVtZC1yZW1vdGUuY29uZjsgZG8KKwkJWyAtZSAkY29uZmZpbGUgXSB8fCBjb250aW51ZQorCQlncmVwIC12ICJeIyIgJGNvbmZmaWxlIHwgc2VkIC1lICcvXiQvZCcgfCB3aGlsZSByZWFkIHR5cGUgbmFtZSBpZCBjb21tZW50OyBkbworCQkgICAgaWYgWyAiJHR5cGUiID0gInUiIF07IHRoZW4KKwkJCXVzZXJhZGRfcGFyYW1zPSIiCisJCQlbICIkaWQiICE9ICItIiBdICYmIHVzZXJhZGRfcGFyYW1zPSIkdXNlcmFkZF9wYXJhbXMgLS11aWQgJGlkIgorCQkJWyAiJGNvbW1lbnQiICE9ICItIiBdICYmIHVzZXJhZGRfcGFyYW1zPSIkdXNlcmFkZF9wYXJhbXMgLS1jb21tZW50ICRjb21tZW50IgorCQkJdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLXN5c3RlbSAkbmFtZSIKKwkJCWV2YWwgdXNlcmFkZCAtLXJvb3QgJHtJTUFHRV9ST09URlN9ICR1c2VyYWRkX3BhcmFtcyB8fCB0cnVlCisJCSAgICBlbGlmIFsgIiR0eXBlIiA9ICJnIiBdOyB0aGVuCisJCQlncm91cGFkZF9wYXJhbXM9IiIKKwkJCVsgIiRpZCIgIT0gIi0iIF0gJiYgZ3JvdXBhZGRfcGFyYW1zPSIkZ3JvdXBhZGRfcGFyYW1zIC0tZ2lkICRpZCIKKwkJCWdyb3VwYWRkX3BhcmFtcz0iJGdyb3VwYWRkX3BhcmFtcyAtLXN5c3RlbSAkbmFtZSIKKwkJCWV2YWwgZ3JvdXBhZGQgLS1yb290ICR7SU1BR0VfUk9PVEZTfSAkZ3JvdXBhZGRfcGFyYW1zIHx8IHRydWUKKwkJICAgIGZpCisJCWRvbmUKKwkgICAgZG9uZQorCWZpCit9CisKK1BBQ0tBR0VfRVhDTFVERSA/Pz0gIiIKK1BBQ0tBR0VfRVhDTFVERVt0eXBlXSA9ICJsaXN0IgorCitweXRob24gcm9vdGZzX3Byb2Nlc3NfaWdub3JlKCkgeworICAgIGV4Y2xfcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFX0VYQ0xVREUiLCBUcnVlKS5zcGxpdCgpCisgICAgaW5zdF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsIFRydWUpLnNwbGl0KCkKKyAgICBpbnN0X2F0dGVtcHRfcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiLCBUcnVlKS5zcGxpdCgpCisKKyAgICBkLnNldFZhcignUEFDS0FHRV9JTlNUQUxMX09SSUcnLCAnICcuam9pbihpbnN0X3BrZ3MpKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFknLCAnICcuam9pbihpbnN0X2F0dGVtcHRfcGtncykpCisKKyAgICBmb3IgcGtnIGluIGV4Y2xfcGtnczoKKyAgICAgICAgaWYgcGtnIGluIGluc3RfcGtnczoKKyAgICAgICAgICAgIGJiLndhcm4oIlBhY2thZ2UgJXMsIHNldCB0byBiZSBleGNsdWRlZCwgaXMgaW4gJXMgUEFDS0FHRV9JTlNUQUxMICglcykuICBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4iICUgKHBrZywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGluc3RfcGtncykpCisgICAgICAgICAgICBpbnN0X3BrZ3MucmVtb3ZlKHBrZykKKworICAgICAgICBpZiBwa2cgaW4gaW5zdF9hdHRlbXB0X3BrZ3M6CisgICAgICAgICAgICBiYi53YXJuKCJQYWNrYWdlICVzLCBzZXQgdG8gYmUgZXhjbHVkZWQsIGlzIGluICVzIFBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSAoJXMpLiAgSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QuIiAlIChwa2csIGQuZ2V0VmFyKCdQTicsIFRydWUpLCBpbnN0X3BrZ3MpKQorICAgICAgICAgICAgaW5zdF9hdHRlbXB0X3BrZ3MucmVtb3ZlKHBrZykKKworICAgIGQuc2V0VmFyKCJQQUNLQUdFX0lOU1RBTEwiLCAnICcuam9pbihpbnN0X3BrZ3MpKQorICAgIGQuc2V0VmFyKCJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiLCAnICcuam9pbihpbnN0X2F0dGVtcHRfcGtncykpCit9Citkb19yb290ZnNbcHJlZnVuY3NdICs9ICJyb290ZnNfcHJvY2Vzc19pZ25vcmUiCisKKyMgV2UgaGF2ZSB0byBkZWxheSB0aGUgcnVudGltZV9tYXBwaW5nX3JlbmFtZSB1bnRpbCBqdXN0IGJlZm9yZSByb290ZnMgcnVucworIyBvdGhlcndpc2UsIHRoZSBtdWx0aWxpYiByZW5hbWluZyBjb3VsZCBzdGVwIGluIGFuZCBzcXVhc2ggYW55IGZpeHVwcyB0aGF0CisjIG1heSBoYXZlIG9jY3VycmVkLgorcHl0aG9uIHJvb3Rmc19ydW50aW1lX21hcHBpbmcoKSB7CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlBBQ0tBR0VfSU5TVEFMTCIsIHBuLCBkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsIHBuLCBkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIkJBRF9SRUNPTU1FTkRBVElPTlMiLCBwbiwgZCkKK30KK2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gInJvb3Rmc19ydW50aW1lX21hcHBpbmciCisKK2Zha2Vyb290IHB5dGhvbiBkb19yb290ZnMgKCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBjcmVhdGVfcm9vdGZzCisgICAgZnJvbSBvZS5pbWFnZSBpbXBvcnQgY3JlYXRlX2ltYWdlCisgICAgZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgY3JlYXRlX21hbmlmZXN0CisKKyAgICAjIGdlbmVyYXRlIHRoZSBpbml0aWFsIG1hbmlmZXN0CisgICAgY3JlYXRlX21hbmlmZXN0KGQpCisKKyAgICAjIGdlbmVyYXRlIHJvb3RmcworICAgIGNyZWF0ZV9yb290ZnMoZCkKKworICAgICMgZ2VuZXJhdGUgZmluYWwgaW1hZ2VzCisgICAgY3JlYXRlX2ltYWdlKGQpCit9CisKK2luc2VydF9mZWVkX3VyaXMgKCkgeworCQorCWVjaG8gIkJ1aWxkaW5nIGZlZWRzIGZvciBbJHtESVNUUk99XS4uIgorCisJZm9yIGxpbmUgaW4gJHtGRUVEX1VSSVN9CisJZG8KKwkJIyBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMvdGFicywgdGhlbiBzcGxpdCBpbnRvIG5hbWUgYW5kIHVyaQorCQlsaW5lX2NsZWFuPSJgZWNobyAiJGxpbmUifHNlZCAncy9eWyBcdF0qLy87cy9bIFx0XSokLy8nYCIKKwkJZmVlZF9uYW1lPSJgZWNobyAiJGxpbmVfY2xlYW4iIHwgc2VkIC1uICdzL1woLipcKSMjXCguKlwpL1wxL3AnYCIKKwkJZmVlZF91cmk9ImBlY2hvICIkbGluZV9jbGVhbiIgfCBzZWQgLW4gJ3MvXCguKlwpIyNcKC4qXCkvXDIvcCdgIgorCQkKKwkJZWNobyAiQWRkZWQgJGZlZWRfbmFtZSBmZWVkIHdpdGggVVJMICRmZWVkX3VyaSIKKwkJCisJCSMgaW5zZXJ0IG5ldyBmZWVkLXNvdXJjZXMKKwkJZWNobyAic3JjL2d6ICRmZWVkX25hbWUgJGZlZWRfdXJpIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL29wa2cvJHtmZWVkX25hbWV9LWZlZWQuY29uZgorCWRvbmUKK30KKworTVVMVElMSUJSRV9BTExPV19SRVAgPS4gIiR7YmFzZV9iaW5kaXJ9fCR7YmFzZV9zYmluZGlyfXwke2JpbmRpcn18JHtzYmluZGlyfXwke2xpYmV4ZWNkaXJ9fCR7c3lzY29uZmRpcn18JHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2fC9saWIvbW9kdWxlcy9bXi9dKi9tb2R1bGVzLip8IgorTVVMVElMSUJfQ0hFQ0tfRklMRSA9ICIke1dPUktESVJ9L211bHRpbGliX2NoZWNrLnB5IgorTVVMVElMSUJfVEVNUF9ST09URlMgPSAiJHtXT1JLRElSfS9tdWx0aWxpYiIKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGRpc2FsbG93IGVtcHR5IHJvb3QgcGFzc3dvcmQgaWYgJ2RlYnVnLXR3ZWFrcycgaXMgbm90IGluIElNQUdFX0ZFQVRVUkVTLgoremFwX2VtcHR5X3Jvb3RfcGFzc3dvcmQgKCkgeworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9L2V0Yy9zaGFkb3cgXTsgdGhlbgorCQlzZWQgLWkgJ3MlXnJvb3Q6OiVyb290Oio6JScgJHtJTUFHRV9ST09URlN9L2V0Yy9zaGFkb3cKKyAgICAgICAgZmkKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvcGFzc3dkIF07IHRoZW4KKwkJc2VkIC1pICdzJV5yb290Ojolcm9vdDoqOiUnICR7SU1BR0VfUk9PVEZTfS9ldGMvcGFzc3dkCisJZmkKK30gCisKKyMgYWxsb3cgZHJvcGJlYXIvb3BlbnNzaCB0byBhY2NlcHQgcm9vdCBsb2dpbnMgYW5kIGxvZ2lucyBmcm9tIGFjY291bnRzIHdpdGggYW4gZW1wdHkgcGFzc3dvcmQgc3RyaW5nCitzc2hfYWxsb3dfZW1wdHlfcGFzc3dvcmQgKCkgeworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgXTsgdGhlbgorCQlzZWQgLWkgJ3MvXlsjWzpzcGFjZTpdXSpQZXJtaXRSb290TG9naW4uKi9QZXJtaXRSb290TG9naW4geWVzLycgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwkJc2VkIC1pICdzL15bI1s6c3BhY2U6XV0qUGVybWl0RW1wdHlQYXNzd29yZHMuKi9QZXJtaXRFbXB0eVBhc3N3b3JkcyB5ZXMvJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCWZpCisKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfSR7c2JpbmRpcn0vZHJvcGJlYXIgXSA7IHRoZW4KKwkJaWYgZ3JlcCAtcSBEUk9QQkVBUl9FWFRSQV9BUkdTICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kcm9wYmVhciAyPi9kZXYvbnVsbCA7IHRoZW4KKwkJCWlmICEgZ3JlcCAtcSAiRFJPUEJFQVJfRVhUUkFfQVJHUz0uKi1CIiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIgOyB0aGVuCisJCQkJc2VkIC1pICdzL15EUk9QQkVBUl9FWFRSQV9BUkdTPSIqXChbXiJdKlwpIiovRFJPUEJFQVJfRVhUUkFfQVJHUz0iXDEgLUIiLycgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyCisJCQlmaQorCQllbHNlCisJCQlwcmludGYgJ1xuRFJPUEJFQVJfRVhUUkFfQVJHUz0iLUIiXG4nID4+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kcm9wYmVhcgorCQlmaQorCWZpCisKKwlpZiBbIC1kICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcGFtLmQgXSA7IHRoZW4KKwkJc2VkIC1pICdzL251bGxva19zZWN1cmUvbnVsbG9rLycgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wYW0uZC8qCisJZmkKK30KKworIyBEaXNhYmxlIEROUyBsb29rdXBzLCB0aGUgU1NIX0RJU0FCTEVfRE5TX0xPT0tVUCBjYW4gYmUgb3ZlcnJpZGRlbiB0byBhbGxvdworIyBkaXN0cm9zIHRvIGNob29zZSBub3QgdG8gdGFrZSB0aGlzIGNoYW5nZQorU1NIX0RJU0FCTEVfRE5TX0xPT0tVUCA/PSAiIHNzaF9kaXNhYmxlX2Ruc19sb29rdXAgOyAiCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORF9hcHBlbmRfcWVtdWFsbCA9ICIke1NTSF9ESVNBQkxFX0ROU19MT09LVVB9Igorc3NoX2Rpc2FibGVfZG5zX2xvb2t1cCAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyBdOyB0aGVuCisJCXNlZCAtaSAtZSAnczojVXNlRE5TIHllczpVc2VETlMgbm86JyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCWZpCit9CisKKyMgRW5hYmxlIHBvc3RpbnN0IGxvZ2dpbmcgaWYgZGVidWctdHdlYWtzIGlzIGVuYWJsZWQKK3Bvc3RpbnN0X2VuYWJsZV9sb2dnaW5nICgpIHsKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwllY2hvICJQT1NUSU5TVF9MT0dHSU5HPTEiID4+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9wb3N0aW5zdAorCWVjaG8gIkxPR0ZJTEU9JHtQT1NUSU5TVF9MT0dGSUxFfSIgPj4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3Bvc3RpbnN0Cit9CisKKyMgTW9kaWZ5IHN5c3RlbWQgZGVmYXVsdCB0YXJnZXQKK3NldF9zeXN0ZW1kX2RlZmF1bHRfdGFyZ2V0ICgpIHsKKwlpZiBbIC1kICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0gLWEgLWUgJHtJTUFHRV9ST09URlN9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8ke1NZU1RFTURfREVGQVVMVF9UQVJHRVR9IF07IHRoZW4KKwkJbG4gLXNmICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJHtTWVNURU1EX0RFRkFVTFRfVEFSR0VUfSAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtL2RlZmF1bHQudGFyZ2V0CisJZmkKK30KKworIyBJZiAvdmFyL3ZvbGF0aWxlIGlzIG5vdCBlbXB0eSwgd2UgaGF2ZSBzZWVuIHByb2JsZW1zIHdoZXJlIHByb2dyYW1zIHN1Y2ggYXMgdGhlCisjIGpvdXJuYWwgbWFrZSBhc3N1bXB0aW9ucyBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgL3Zhci92b2xhdGlsZS4gVGhlIGpvdXJuYWwKKyMgd291bGQgdGhlbiB3cml0ZSB0byAvdmFyL3ZvbGF0aWxlIGJlZm9yZSBpdCB3YXMgbW91bnRlZCwgdGh1cyBoaWRpbmcgdGhlCisjIGl0ZW1zIHByZXZpb3VzbHkgd3JpdHRlbi4KKyMKKyMgVGhpcyBjaGFuZ2UgaXMgdG8gYXR0ZW1wdCB0byBmaXggdGhvc2UgdHlwZXMgb2YgaXNzdWVzIGluIGEgd2F5IHRoYXQgZG9lc24ndAorIyBhZmZlY3QgdXNlcnMgdGhhdCBtYXkgbm90IGJlIHVzaW5nIC92YXIvdm9sYXRpbGUuCitlbXB0eV92YXJfdm9sYXRpbGUgKCkgeworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9L2V0Yy9mc3RhYiBdOyB0aGVuCisJCW1hdGNoPWBhd2sgJyQxICF+ICIjIiAmJiAkMiB+IC9cL3Zhclwvdm9sYXRpbGUve3ByaW50ICQyfScgJHtJTUFHRV9ST09URlN9L2V0Yy9mc3RhYiAyPiAvZGV2L251bGxgCisJCWlmIFsgLW4gIiRtYXRjaCIgXTsgdGhlbgorCQkJZmluZCAke0lNQUdFX1JPT1RGU30vdmFyL3ZvbGF0aWxlIC1taW5kZXB0aCAxIC1kZWxldGUKKwkJZmkKKwlmaQorfQorCisjIFR1cm4gYW55IHN5bWJvbGljIC9zYmluL2luaXQgbGluayBpbnRvIGEgZmlsZQorcmVtb3ZlX2luaXRfbGluayAoKSB7CisJaWYgWyAtaCAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0IF07IHRoZW4KKwkJTElOS0ZJTEU9JHtJTUFHRV9ST09URlN9YHJlYWRsaW5rICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXRgCisJCXJtICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQKKwkJY3AgJExJTktGSUxFICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQKKwlmaQorfQorCittYWtlX3ppbWFnZV9zeW1saW5rX3JlbGF0aXZlICgpIHsKKwlpZiBbIC1MICR7SU1BR0VfUk9PVEZTfS9ib290L3pJbWFnZSBdOyB0aGVuCisJCShjZCAke0lNQUdFX1JPT1RGU30vYm9vdC8gJiYgZm9yIGkgaW4gYGxzIHpJbWFnZS0qIHwgc29ydGA7IGRvIGxuIC1zZiAkaSB6SW1hZ2U7IGRvbmUpCisJZmkKK30KKworcHl0aG9uIHdyaXRlX2ltYWdlX21hbmlmZXN0ICgpIHsKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKKyAgICB3aXRoIG9wZW4oZC5nZXRWYXIoJ0lNQUdFX01BTklGRVNUJywgVHJ1ZSksICd3KycpIGFzIGltYWdlX21hbmlmZXN0OgorICAgICAgICBpbWFnZV9tYW5pZmVzdC53cml0ZShpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCAndmVyJykpCisgICAgICAgIGltYWdlX21hbmlmZXN0LndyaXRlKCJcbiIpCit9CisKKyMgQ2FuIGJlIHVzZSB0byBjcmVhdGUgL2V0Yy90aW1lc3RhbXAgZHVyaW5nIGltYWdlIGNvbnN0cnVjdGlvbiB0byBnaXZlIGEgcmVhc29uYWJseSAKKyMgc2FuZSBkZWZhdWx0IHRpbWUgc2V0dGluZworcm9vdGZzX3VwZGF0ZV90aW1lc3RhbXAgKCkgeworCWRhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyUyA+JHtJTUFHRV9ST09URlN9L2V0Yy90aW1lc3RhbXAKK30KKworIyBQcmV2ZW50IFggZnJvbSBiZWluZyBzdGFydGVkCityb290ZnNfbm9feF9zdGFydHVwICgpIHsKKwlpZiBbIC1mICR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3hzZXJ2ZXItbm9kbSBdOyB0aGVuCisJCWNobW9kIGEteCAke0lNQUdFX1JPT1RGU30vZXRjL2luaXQuZC94c2VydmVyLW5vZG0KKwlmaQorfQorCityb290ZnNfdHJpbV9zY2hlbWFzICgpIHsKKwlmb3Igc2NoZW1hIGluICR7SU1BR0VfUk9PVEZTfS9ldGMvZ2NvbmYvc2NoZW1hcy8qLnNjaGVtYXMKKwlkbworCQkjIE5lZWQgdGhpcyBpbiBjYXNlIG5vIGZpbGVzIGV4aXN0CisJCWlmIFsgLWUgJHNjaGVtYSBdOyB0aGVuCisJCQlvZS10cmltLXNjaGVtYXMgJHNjaGVtYSA+ICRzY2hlbWEubmV3CisJCQltdiAkc2NoZW1hLm5ldyAkc2NoZW1hCisJCWZpCisJZG9uZQorfQorCityb290ZnNfY2hlY2tfaG9zdF91c2VyX2NvbnRhbWluYXRlZCAoKSB7CisJY29udGFtaW5hdGVkPSIke1dPUktESVJ9L2hvc3QtdXNlci1jb250YW1pbmF0ZWQudHh0IgorCUhPU1RfVVNFUl9VSUQ9IiQoUFNFVURPX1VOTE9BRD0xIGlkIC11KSIKKwlIT1NUX1VTRVJfR0lEPSIkKFBTRVVET19VTkxPQUQ9MSBpZCAtZykiCisKKwlmaW5kICIke0lNQUdFX1JPT1RGU30iIC13aG9sZW5hbWUgIiR7SU1BR0VfUk9PVEZTfS9ob21lIiAtcHJ1bmUgXAorCSAgICAtdXNlciAiJEhPU1RfVVNFUl9VSUQiIC1vIC1ncm91cCAiJEhPU1RfVVNFUl9HSUQiID4iJGNvbnRhbWluYXRlZCIKKworCWlmIFsgLXMgIiRjb250YW1pbmF0ZWQiIF07IHRoZW4KKwkJZWNobyAiV0FSTklORzogUGF0aHMgaW4gdGhlIHJvb3RmcyBhcmUgb3duZWQgYnkgdGhlIHNhbWUgdXNlciBvciBncm91cCBhcyB0aGUgdXNlciBydW5uaW5nIGJpdGJha2UuIFNlZSB0aGUgbG9nZmlsZSBmb3IgdGhlIHNwZWNpZmljIHBhdGhzLiIKKwkJY2F0ICIkY29udGFtaW5hdGVkIiB8IHNlZCAicyxeLCAgLCIKKwlmaQorfQorCisjIE1ha2UgYW55IGFic29sdXRlIGxpbmtzIGluIGEgc3lzcm9vdCByZWxhdGl2ZQorcm9vdGZzX3N5c3Jvb3RfcmVsYXRpdmVsaW5rcyAoKSB7CisJc3lzcm9vdC1yZWxhdGl2ZWxpbmtzLnB5ICR7U0RLX09VVFBVVH0vJHtTREtUQVJHRVRTWVNST09UfQorfQorCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9faW5zdGFsbFtub2V4ZWNdID0gIjEiCitkb19wb3B1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV9xYVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlZGF0YVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtub2V4ZWNdID0gIjEiCisKK2FkZHRhc2sgcm9vdGZzIGJlZm9yZSBkb19idWlsZAorIyBBbGxvdyB0aGUga2VybmVsIHRvIGJlIHJlcGFja2VkIHdpdGggdGhlIGluaXRyYW1mcyBhbmQgYm9vdCBpbWFnZSBmaWxlIGFzIGEgc2luZ2xlIGZpbGUKK2RvX2J1bmRsZV9pbml0cmFtZnNbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX2J1bmRsZV9pbml0cmFtZnMiCitkb19idW5kbGVfaW5pdHJhbWZzW25vc3RhbXBdID0gIjEiCitkb19idW5kbGVfaW5pdHJhbWZzW25vZXhlY10gPSAiMSIKK2RvX2J1bmRsZV9pbml0cmFtZnMgKCkgeworCToKK30KK2FkZHRhc2sgYnVuZGxlX2luaXRyYW1mcyBhZnRlciBkb19yb290ZnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjQwM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzCkBAIC0wLDAgKzEsMjYwIEBACisKKyMgVGhlIGRlZmF1bHQgYWxpZ21lbnQgb2YgdGhlIHNpemUgb2YgdGhlIHJvb3RmcyBpcyBzZXQgdG8gMUtpQi4gSW4gY2FzZQorIyB5b3UncmUgdXNpbmcgdGhlIFNEIGNhcmQgZW11bGF0aW9uIG9mIGEgUUVNVSBzeXN0ZW0gc2ltdWxhdG9yIHlvdSBtYXkKKyMgc2V0IHRoaXMgdmFsdWUgdG8gMjA0OCAoMk1pQiBhbGlnbm1lbnQpLgorSU1BR0VfUk9PVEZTX0FMSUdOTUVOVCA/PSAiMSIKKworZGVmIGltYWdldHlwZXNfZ2V0ZGVwZW5kcyhkKToKKyAgICBkZWYgYWRkZGVwKGRlcHN0ciwgZGVwcyk6CisgICAgICAgIGZvciBpIGluIChkZXBzdHIgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBpIG5vdCBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGkpCisKKyAgICBkZXBzID0gW10KKyAgICBjdHlwZXMgPSBkLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgdHlwZSBpbiAoZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgaWYgdHlwZSBpbiBbInZtZGsiLCAidmRpIiwgInFjb3cyIiwgImxpdmUiLCAiaXNvIiwgImhkZGltZyJdOgorICAgICAgICAgICAgdHlwZSA9ICJleHQ0IgorICAgICAgICBiYXNldHlwZSA9IHR5cGUKKyAgICAgICAgZm9yIGN0eXBlIGluIGN0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cGUuZW5kc3dpdGgoIi4iICsgY3R5cGUpOgorICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gdHlwZVs6LWxlbigiLiIgKyBjdHlwZSldCisgICAgICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCJDT01QUkVTU19ERVBFTkRTXyVzIiAlIGN0eXBlLCBUcnVlKSwgZGVwcykKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmb3IgdHlwZWRlcGVuZHMgaW4gKGQuZ2V0VmFyKCJJTUFHRV9UWVBFREVQXyVzIiAlIGJhc2V0eXBlLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFkZGRlcChkLmdldFZhcignSU1BR0VfREVQRU5EU18lcycgJSB0eXBlZGVwZW5kcywgVHJ1ZSkgLCBkZXBzKQorICAgICAgICBhZGRkZXAoZC5nZXRWYXIoJ0lNQUdFX0RFUEVORFNfJXMnICUgYmFzZXR5cGUsIFRydWUpICwgZGVwcykKKworICAgIGRlcHN0ciA9ICIiCisgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICBkZXBzdHIgKz0gIiAiICsgZGVwICsgIjpkb19wb3B1bGF0ZV9zeXNyb290IgorICAgIHJldHVybiBkZXBzdHIKKworCitYWl9DT01QUkVTU0lPTl9MRVZFTCA/PSAiLWUgLTYiCitYWl9JTlRFR1JJVFlfQ0hFQ0sgPz0gImNyYzMyIgorWFpfVEhSRUFEUyA/PSAiLVQgMCIKKworSkZGUzJfU1VNX0VYVFJBX0FSR1MgPz0gIiIKK0lNQUdFX0NNRF9qZmZzMiA9ICJta2ZzLmpmZnMyIC0tcm9vdD0ke0lNQUdFX1JPT1RGU30gLS1mYWtldGltZSAtLW91dHB1dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmpmZnMyICR7RVhUUkFfSU1BR0VDTUR9IgorCitJTUFHRV9DTURfY3JhbWZzID0gIm1rZnMuY3JhbWZzICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNyYW1mcyAke0VYVFJBX0lNQUdFQ01EfSIKKworb2VfbWtleHQyMzRmcyAoKSB7CisJZnN0eXBlPSQxCisJZXh0cmFfaW1hZ2VjbWQ9IiIKKworCWlmIFsgJCMgLWd0IDEgXTsgdGhlbgorCQlzaGlmdAorCQlleHRyYV9pbWFnZWNtZD0kQAorCWZpCisKKwkjIElmIGdlbmVyYXRpbmcgYW4gZW1wdHkgaW1hZ2UgdGhlIHNpemUgb2YgdGhlIHNwYXJzZSBibG9jayBzaG91bGQgYmUgbGFyZ2UKKwkjIGVub3VnaCB0byBhbGxvY2F0ZSBhbiBleHQ0IGZpbGVzeXN0ZW0gdXNpbmcgNDA5NiBieXRlcyBwZXIgaW5vZGUsIHRoaXMgaXMKKwkjIGFib3V0IDYwSywgc28gZGQgbmVlZHMgYSBtaW5pbXVtIGNvdW50IG9mIDYwLCB3aXRoIGJzPTEwMjQgKGJ5dGVzIHBlciBJTykKKwlldmFsIGxvY2FsIENPVU5UPVwiMFwiCisJZXZhbCBsb2NhbCBNSU5fQ09VTlQ9XCI2MFwiCisJaWYgWyAkUk9PVEZTX1NJWkUgLWx0ICRNSU5fQ09VTlQgXTsgdGhlbgorCQlldmFsIENPVU5UPVwiJE1JTl9DT1VOVFwiCisJZmkKKwkjIENyZWF0ZSBhIHNwYXJzZSBpbWFnZSBibG9jaworCWRkIGlmPS9kZXYvemVybyBvZj0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLiRmc3R5cGUgc2Vlaz0kUk9PVEZTX1NJWkUgY291bnQ9JENPVU5UIGJzPTEwMjQKKwlta2ZzLiRmc3R5cGUgLUYgJGV4dHJhX2ltYWdlY21kICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuJGZzdHlwZSAtZCAke0lNQUdFX1JPT1RGU30KK30KKworSU1BR0VfQ01EX2V4dDIgPSAib2VfbWtleHQyMzRmcyBleHQyICR7RVhUUkFfSU1BR0VDTUR9IgorSU1BR0VfQ01EX2V4dDMgPSAib2VfbWtleHQyMzRmcyBleHQzICR7RVhUUkFfSU1BR0VDTUR9IgorSU1BR0VfQ01EX2V4dDQgPSAib2VfbWtleHQyMzRmcyBleHQ0ICR7RVhUUkFfSU1BR0VDTUR9IgorCitNSU5fQlRSRlNfU0laRSA/PSAiMTYzODQiCitJTUFHRV9DTURfYnRyZnMgKCkgeworCWlmIFsgJHtST09URlNfU0laRX0gLWd0ICR7TUlOX0JUUkZTX1NJWkV9IF07IHRoZW4KKwkJZGQgaWY9L2Rldi96ZXJvIG9mPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuYnRyZnMgY291bnQ9JHtST09URlNfU0laRX0gYnM9MTAyNAorCQlta2ZzLmJ0cmZzICR7RVhUUkFfSU1BR0VDTUR9IC1yICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmJ0cmZzCisJZWxzZQorCQliYmZhdGFsICJSb290ZnMgaXMgdG9vIHNtYWxsIGZvciBCVFJGUyAoUm9vdGZzIEFjdHVhbCBTaXplOiAke1JPT1RGU19TSVpFfSwgQlRSRlMgTWluaW11bSBTaXplOiAke01JTl9CVFJGU19TSVpFfSkiCisJZmkKK30KKworSU1BR0VfQ01EX3NxdWFzaGZzID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuc3F1YXNoZnMgJHtFWFRSQV9JTUFHRUNNRH0gLW5vYXBwZW5kIgorSU1BR0VfQ01EX3NxdWFzaGZzLXh6ID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuc3F1YXNoZnMteHogJHtFWFRSQV9JTUFHRUNNRH0gLW5vYXBwZW5kIC1jb21wIHh6IgorSU1BR0VfQ01EX3NxdWFzaGZzLWx6byA9ICJta3NxdWFzaGZzICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnNxdWFzaGZzLWx6byAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQgLWNvbXAgbHpvIgorCisjIEJ5IGRlZmF1bHQsIHRhciBmcm9tIHRoZSBob3N0IGlzIHVzZWQsIHdoaWNoIGNhbiBiZSBxdWl0ZSBvbGQuIElmCisjIHlvdSBuZWVkIHNwZWNpYWwgcGFyYW1ldGVycyAobGlrZSAtLXhhdHRycykgd2hpY2ggYXJlIG9ubHkgc3VwcG9ydGVkCisjIGJ5IEdOVSB0YXIgdXBzdHJlYW0gPj0gMS4yNywgdGhlbiBvdmVycmlkZSB0aGF0IGRlZmF1bHQ6CisjIElNQUdFX0NNRF9UQVIgPSAidGFyIC0teGF0dHJzIC0teGF0dHJzLWluY2x1ZGU9KiIKKyMgSU1BR0VfREVQRU5EU190YXJfYXBwZW5kID0gIiB0YXItcmVwbGFjZW1lbnQtbmF0aXZlIgorIyBFWFRSQU5BVElWRVBBVEggKz0gInRhci1uYXRpdmUiCisjCisjIFRoZSBHTlUgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IHdoZXRoZXIgLS14YXR0cnMtaW5jbHVkZSBpcyBuZWNlc3NhcnkuCisjIEluIHByYWN0aWNlLCBpdCB0dXJuZWQgb3V0IHRvIGJlIG5vdCBuZWVkZWQgd2hlbiBjcmVhdGluZyBhcmNoaXZlcyBhbmQKKyMgcmVxdWlyZWQgd2hlbiBleHRyYWN0aW5nLCBidXQgaXQgc2VlbXMgcHJ1ZGVudCB0byB1c2UgaXQgaW4gYm90aCBjYXNlcy4KK0lNQUdFX0NNRF9UQVIgPz0gInRhciIKK0lNQUdFX0NNRF90YXIgPSAiJHtJTUFHRV9DTURfVEFSfSAtY3ZmICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMudGFyIC1DICR7SU1BR0VfUk9PVEZTfSAuIgorCitkb19yb290ZnNbY2xlYW5kaXJzXSArPSAiJHtXT1JLRElSfS9jcGlvX2FwcGVuZCIKK0lNQUdFX0NNRF9jcGlvICgpIHsKKwkoY2QgJHtJTUFHRV9ST09URlN9ICYmIGZpbmQgLiB8IGNwaW8gLW8gLUggbmV3YyA+JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5jcGlvKQorCWlmIFsgISAtTCAke0lNQUdFX1JPT1RGU30vaW5pdCAtYSAhIC1lICR7SU1BR0VfUk9PVEZTfS9pbml0IF07IHRoZW4KKwkJaWYgWyAtTCAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0IC1vIC1lICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgXTsgdGhlbgorCQkJbG4gLXNmIC9zYmluL2luaXQgJHtXT1JLRElSfS9jcGlvX2FwcGVuZC9pbml0CisJCWVsc2UKKwkJCXRvdWNoICR7V09SS0RJUn0vY3Bpb19hcHBlbmQvaW5pdAorCQlmaQorCQkoY2QgICR7V09SS0RJUn0vY3Bpb19hcHBlbmQgJiYgZWNobyAuL2luaXQgfCBjcGlvIC1vQSAtSCBuZXdjIC1GICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3BpbykKKwlmaQorfQorCitFTEZfS0VSTkVMID89ICIke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9zcmMva2VybmVsLyR7S0VSTkVMX0lNQUdFVFlQRX0iCitFTEZfQVBQRU5EID89ICJyYW1kaXNrX3NpemU9MzI3Njggcm9vdD0vZGV2L3JhbTAgcncgY29uc29sZT0iCisKK0lNQUdFX0NNRF9lbGYgKCkgeworCXRlc3QgLWYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5lbGYgJiYgcm0gLWYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5lbGYKKwlta2VsZkltYWdlIC0ta2VybmVsPSR7RUxGX0tFUk5FTH0gLS1pbml0cmQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5jcGlvLmd6IC0tb3V0cHV0PSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZWxmIC0tYXBwZW5kPScke0VMRl9BUFBFTkR9JyAke0VYVFJBX0lNQUdFQ01EfQorfQorSU1BR0VfVFlQRURFUF9lbGYgPSAiY3Bpby5neiIKKworVUJJX1ZPTE5BTUUgPz0gIiR7TUFDSElORX0tcm9vdGZzIgorCittdWx0aXViaV9ta2ZzKCkgeworCWxvY2FsIG1rdWJpZnNfYXJncz0iJDEiCisJbG9jYWwgdWJpbml6ZV9hcmdzPSIkMiIKKwlpZiBbIC16ICIkMyIgXTsgdGhlbgorCQlsb2NhbCB2bmFtZT0iIgorCWVsc2UKKwkJbG9jYWwgdm5hbWU9Il8kMyIKKwlmaQorCisJZWNobyBcW3ViaWZzXF0gPiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyBtb2RlPXViaSA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyBpbWFnZT0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gdm9sX2lkPTAgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gdm9sX3R5cGU9ZHluYW1pYyA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfbmFtZT0ke1VCSV9WT0xOQU1FfSA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfZmxhZ3M9YXV0b3Jlc2l6ZSA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJbWtmcy51YmlmcyAtciAke0lNQUdFX1JPT1RGU30gLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaWZzICR7bWt1Ymlmc19hcmdzfQorCXViaW5pemUgLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaSAke3ViaW5pemVfYXJnc30gdWJpbml6ZSR7dm5hbWV9LmNmZworCisJIyBDbGVhbnVwIGNmZyBmaWxlCisJbXYgdWJpbml6ZSR7dm5hbWV9LmNmZyAke0RFUExPWV9ESVJfSU1BR0V9LworCisJIyBDcmVhdGUgb3duIHN5bWxpbmsKKwljZCAke0RFUExPWV9ESVJfSU1BR0V9CisJaWYgWyAtZSAke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaWZzIF07IHRoZW4KKwkJbG4gLXNmICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgXAorCQkke0lNQUdFX0xJTktfTkFNRX0ke3ZuYW1lfS51YmlmcworCWZpCisJaWYgWyAtZSAke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaSBdOyB0aGVuCisJCWxuIC1zZiAke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaSBcCisJCSR7SU1BR0VfTElOS19OQU1FfSR7dm5hbWV9LnViaQorCWZpCisJY2QgLQorfQorCitJTUFHRV9DTURfbXVsdGl1YmkgKCkgeworCSMgU3BsaXQgTUtVQklGU19BUkdTXzxuYW1lPiBhbmQgVUJJTklaRV9BUkdTXzxuYW1lPgorCWZvciBuYW1lIGluICR7TVVMVElVQklfQlVJTER9OyBkbworCQlldmFsIGxvY2FsIG1rdWJpZnNfYXJncz1cIlwkTUtVQklGU19BUkdTXyR7bmFtZX1cIgorCQlldmFsIGxvY2FsIHViaW5pemVfYXJncz1cIlwkVUJJTklaRV9BUkdTXyR7bmFtZX1cIgorCisJCW11bHRpdWJpX21rZnMgIiR7bWt1Ymlmc19hcmdzfSIgIiR7dWJpbml6ZV9hcmdzfSIgIiR7bmFtZX0iCisJZG9uZQorfQorCitJTUFHRV9DTURfdWJpICgpIHsKKwltdWx0aXViaV9ta2ZzICIke01LVUJJRlNfQVJHU30iICIke1VCSU5JWkVfQVJHU30iCit9CisKK0lNQUdFX0NNRF91YmlmcyA9ICJta2ZzLnViaWZzIC1yICR7SU1BR0VfUk9PVEZTfSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnViaWZzICR7TUtVQklGU19BUkdTfSIKKworSU1BR0VfQ01EX3dpYyAoKSB7CisJb3V0PSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfQorCXdrcz0ke0ZJTEVfRElSTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0uJHtNQUNISU5FfS53a3MKKwlbIC1lICR3a3MgXSB8fCB3a3M9JHtGSUxFX0RJUk5BTUV9LyR7SU1BR0VfQkFTRU5BTUV9LndrcworCVsgLWUgJHdrcyBdIHx8IGJiZmF0YWwgIktpc2tzdGFydCBmaWxlICR3a3MgZG9lc24ndCBleGlzdCIKKwlCVUlMRERJUj0ke1RPUERJUn0gd2ljIGNyZWF0ZSAkd2tzIC0tdmFycyAke1NUQUdJTkdfRElSX1RBUkdFVH0vaW1nZGF0YS8gLWUgJHtJTUFHRV9CQVNFTkFNRX0gLW8gJG91dC8KKwltdiAkb3V0L2J1aWxkLyR7SU1BR0VfQkFTRU5BTUV9Ki5kaXJlY3QgJG91dC5yb290ZnMud2ljCisJcm0gLXJmICRvdXQvCit9CisKK0VYVFJBX0lNQUdFQ01EID0gIiIKKworaW5oZXJpdCBzaXRlaW5mbworSkZGUzJfRU5ESUFOTkVTUyA/PSAiJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctbCcsICctYicsIGQpfSIKK0pGRlMyX0VSQVNFQkxPQ0sgPz0gIjB4NDAwMDAiCitFWFRSQV9JTUFHRUNNRF9qZmZzMiA/PSAiLS1wYWQgJHtKRkZTMl9FTkRJQU5ORVNTfSAtLWVyYXNlYmxvY2s9JHtKRkZTMl9FUkFTRUJMT0NLfSAtLW5vLWNsZWFubWFya2VycyIKKworIyBDaGFuZ2UgdGhlc2UgaWYgeW91IHdhbnQgZGVmYXVsdCBta2ZzIGJlaGF2aW9yIChpLmUuIGNyZWF0ZSBtaW5pbWFsIGlub2RlIG51bWJlcikKK0VYVFJBX0lNQUdFQ01EX2V4dDIgPz0gIi1pIDQwOTYiCitFWFRSQV9JTUFHRUNNRF9leHQzID89ICItaSA0MDk2IgorRVhUUkFfSU1BR0VDTURfZXh0NCA/PSAiLWkgNDA5NiIKK0VYVFJBX0lNQUdFQ01EX2J0cmZzID89ICIiCitFWFRSQV9JTUFHRUNNRF9lbGYgPz0gIiIKKworSU1BR0VfREVQRU5EUyA9ICIiCitJTUFHRV9ERVBFTkRTX2pmZnMyID0gIm10ZC11dGlscy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2NyYW1mcyA9ICJ1dGlsLWxpbnV4LW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfZXh0MiA9ICJlMmZzcHJvZ3MtbmF0aXZlIgorSU1BR0VfREVQRU5EU19leHQzID0gImUyZnNwcm9ncy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2V4dDQgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfYnRyZnMgPSAiYnRyZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19zcXVhc2hmcyA9ICJzcXVhc2hmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3NxdWFzaGZzLXh6ID0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfc3F1YXNoZnMtbHpvID0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfZWxmID0gInZpcnR1YWwva2VybmVsIG1rZWxmaW1hZ2UtbmF0aXZlIgorSU1BR0VfREVQRU5EU191YmkgPSAibXRkLXV0aWxzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfdWJpZnMgPSAibXRkLXV0aWxzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfbXVsdGl1YmkgPSAibXRkLXV0aWxzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfd2ljID0gInBhcnRlZC1uYXRpdmUiCisKKyMgVGhpcyB2YXJpYWJsZSBpcyBhdmFpbGFibGUgdG8gcmVxdWVzdCB3aGljaCB2YWx1ZXMgYXJlIHN1aXRhYmxlIGZvciBJTUFHRV9GU1RZUEVTCitJTUFHRV9UWVBFUyA9ICIgXAorICAgIGpmZnMyIGpmZnMyLnN1bSBcCisgICAgY3JhbWZzIFwKKyAgICBleHQyIGV4dDIuZ3ogZXh0Mi5iejIgZXh0Mi5sem1hIFwKKyAgICBleHQzIGV4dDMuZ3ogXAorICAgIGV4dDQgZXh0NC5neiBcCisgICAgYnRyZnMgXAorICAgIGlzbyBcCisgICAgaGRkaW1nIFwKKyAgICBzcXVhc2hmcyBzcXVhc2hmcy14eiBzcXVhc2hmcy1sem8gXAorICAgIHViaSB1YmlmcyBtdWx0aXViaSBcCisgICAgdGFyIHRhci5neiB0YXIuYnoyIHRhci54eiB0YXIubHo0IFwKKyAgICBjcGlvIGNwaW8uZ3ogY3Bpby54eiBjcGlvLmx6bWEgY3Bpby5sejQgXAorICAgIHZtZGsgXAorICAgIHZkaSBcCisgICAgcWNvdzIgXAorICAgIGVsZiBcCisgICAgd2ljIHdpYy5neiB3aWMuYnoyIHdpYy5sem1hIFwKKyIKKworQ09NUFJFU1NJT05UWVBFUyA9ICJneiBiejIgbHptYSB4eiBsejQgc3VtIgorQ09NUFJFU1NfQ01EX2x6bWEgPSAibHptYSAtayAtZiAtNyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IgorQ09NUFJFU1NfQ01EX2d6ID0gImd6aXAgLWYgLTkgLWMgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uZ3oiCitDT01QUkVTU19DTURfYnoyID0gInBiemlwMiAtZiAtayAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IgorQ09NUFJFU1NfQ01EX3h6ID0gInh6IC1mIC1rIC1jICR7WFpfQ09NUFJFU1NJT05fTEVWRUx9ICR7WFpfVEhSRUFEU30gLS1jaGVjaz0ke1haX0lOVEVHUklUWV9DSEVDS30gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0ueHoiCitDT01QUkVTU19DTURfbHo0ID0gImx6NGMgLTkgLWMgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSA+ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0ubHo0IgorQ09NUFJFU1NfQ01EX3N1bSA9ICJzdW10b29sIC1pICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gLW8gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5zdW0gJHtKRkZTMl9TVU1fRVhUUkFfQVJHU30iCitDT01QUkVTU19ERVBFTkRTX2x6bWEgPSAieHotbmF0aXZlIgorQ09NUFJFU1NfREVQRU5EU19neiA9ICIiCitDT01QUkVTU19ERVBFTkRTX2J6MiA9ICJwYnppcDItbmF0aXZlIgorQ09NUFJFU1NfREVQRU5EU194eiA9ICJ4ei1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX2x6NCA9ICJsejQtbmF0aXZlIgorQ09NUFJFU1NfREVQRU5EU19zdW0gPSAibXRkLXV0aWxzLW5hdGl2ZSIKKworUlVOTkFCTEVfSU1BR0VfVFlQRVMgPz0gImV4dDIgZXh0MyBleHQ0IgorUlVOTkFCTEVfTUFDSElORV9QQVRURVJOUyA/PSAicWVtdSIKKworREVQTE9ZQUJMRV9JTUFHRV9UWVBFUyA/PSAiaGRkaW1nIGlzbyIgCisKKyMgVXNlIElNQUdFX0VYVEVOU0lPTl94eHggdG8gbWFwIGltYWdlIHR5cGUgJ3h4eCcgd2l0aCByZWFsIGltYWdlIGZpbGUgZXh0ZW5zaW9uIG5hbWUocykgZm9yIEhvYgorSU1BR0VfRVhURU5TSU9OX2xpdmUgPSAiaGRkaW1nIGlzbyIKKworIyBUaGUgSU1BR0VfVFlQRVNfTUFTS0VEIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCB0byBtYXNrIG91dCBmcm9tIHRoZSBJTUFHRV9GU1RZUEVTLAorIyBpbWFnZXMgdGhhdCB3aWxsIG5vdCBiZSBidWlsdCBhdCBkb19yb290ZnMgdGltZTogdm1kaywgdmRpLCBxY293MiwgaGRkaW1nLCBpc28sIGV0Yy4KK0lNQUdFX1RZUEVTX01BU0tFRCA/PSAiIgorCisjIFRoZSBXSUNWQVJTIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGVmaW5lIGxpc3Qgb2YgYml0YmFrZSB2YXJpYWJsZXMgdXNlZCBpbiB3aWMgY29kZQorIyB2YXJpYWJsZXMgZnJvbSB0aGlzIGxpc3QgaXMgd3JpdHRlbiB0byA8aW1hZ2U+LmVudiBmaWxlCitXSUNWQVJTID89ICJCQkxBWUVSUyBERVBMT1lfRElSX0lNQUdFIEhERERJUiBJTUFHRV9CQVNFTkFNRSBJTUFHRV9CT09UX0ZJTEVTIElNQUdFX0xJTktfTkFNRSBJTUFHRV9ST09URlMgSU5JVFJBTUZTX0ZTVFlQRVMgSU5JVFJEIElTT0RJUiBNQUNISU5FX0FSQ0ggUk9PVEZTX1NJWkUgU1RBR0lOR19EQVRBRElSIFNUQUdJTkdfRElSX05BVElWRSBTVEFHSU5HX0xJQkRJUiBUQVJHRVRfU1lTIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzX3Vib290LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxYmNhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzX3Vib290LmJiY2xhc3MKQEAgLTAsMCArMSwyNiBAQAoraW5oZXJpdCBpbWFnZV90eXBlcyBrZXJuZWwtYXJjaAorCitvZV9ta2ltYWdlICgpIHsKKyAgICBta2ltYWdlIC1BICR7VUJPT1RfQVJDSH0gLU8gbGludXggLVQgcmFtZGlzayAtQyAkMiAtbiAke0lNQUdFX05BTUV9IFwKKyAgICAgICAgLWQgJHtERVBMT1lfRElSX0lNQUdFfS8kMSAke0RFUExPWV9ESVJfSU1BR0V9LyQxLnUtYm9vdAorICAgIGlmIFsgeCQzID0geCJjbGVhbiIgXTsgdGhlbgorICAgICAgICBybSAkMQorICAgIGZpCit9CisKK0NPTVBSRVNTSU9OVFlQRVMgKz0gImd6LnUtYm9vdCBiejIudS1ib290IGx6bWEudS1ib290IHUtYm9vdCIKKworQ09NUFJFU1NfREVQRU5EU191LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX3UtYm9vdCAgICAgID0gIm9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSBub25lIgorCitDT01QUkVTU19ERVBFTkRTX2d6LnUtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT01QUkVTU19DTURfZ3oudS1ib290ICAgICAgPSAiJHtDT01QUkVTU19DTURfZ3p9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uZ3ogZ3ppcCBjbGVhbiIKKworQ09NUFJFU1NfREVQRU5EU19iejIudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF9iejIudS1ib290ICAgICAgPSAiJHtDT01QUkVTU19DTURfYnoyfTsgb2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9LmJ6MiBiemlwMiBjbGVhbiIKKworQ09NUFJFU1NfREVQRU5EU19sem1hLnUtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT01QUkVTU19DTURfbHptYS51LWJvb3QgICAgICA9ICIke0NPTVBSRVNTX0NNRF9sem1hfTsgb2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmx6bWEgbHptYSBjbGVhbiIKKworSU1BR0VfVFlQRVMgKz0gImV4dDIudS1ib290IGV4dDIuZ3oudS1ib290IGV4dDIuYnoyLnUtYm9vdCBleHQyLmx6bWEudS1ib290IGV4dDMuZ3oudS1ib290IGV4dDQuZ3oudS1ib290IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbnNhbmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9pbnNhbmUuYmJjbGFzcwpAQCAtMCwwICsxLDEyODAgQEAKKyMgQkIgQ2xhc3MgaW5zcGlyZWQgYnkgZWJ1aWxkLnNoCisjCisjIFRoaXMgY2xhc3Mgd2lsbCB0ZXN0IGZpbGVzIGFmdGVyIGluc3RhbGxhdGlvbiBmb3IgY2VydGFpbgorIyBzZWN1cml0eSBpc3N1ZXMgYW5kIG90aGVyIGtpbmQgb2YgaXNzdWVzLgorIworIyBDaGVja3Mgd2UgZG86CisjICAtQ2hlY2sgdGhlIG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMKKyMgIC1DaGVjayB0aGUgUlVOVElNRSBwYXRoIGZvciB0aGUgJFRNUERJUgorIyAgLUNoZWNrIGlmIC5sYSBmaWxlcyB3cm9uZ2x5IHBvaW50IHRvIHdvcmtkaXIKKyMgIC1DaGVjayBpZiAucGMgZmlsZXMgd3JvbmdseSBwb2ludCB0byB3b3JrZGlyCisjICAtQ2hlY2sgaWYgcGFja2FnZXMgY29udGFpbnMgLmRlYnVnIGRpcmVjdG9yaWVzIG9yIC5zbyBmaWxlcworIyAgIHdoZXJlIHRoZXkgc2hvdWxkIGJlIGluIC1kZXYgb3IgLWRiZworIyAgLUNoZWNrIGlmIGNvbmZpZy5sb2cgY29udGFpbnMgdHJhY2VzIHRvIGJyb2tlbiBhdXRvY29uZiB0ZXN0cworIyAgLUNoZWNrIGludmFsaWQgY2hhcmFjdGVycyAobm9uLXV0ZjgpIG9uIHNvbWUgcGFja2FnZSBtZXRhZGF0YQorIyAgLUVuc3VyZSB0aGF0IGJpbmFyaWVzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gZG8gbm90IGxpbmsKKyMgICBpbnRvIGV4ZWNfcHJlZml4CisjICAtQ2hlY2sgdGhhdCBzY3JpcHRzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gZG8gbm90IHJlZmVyZW5jZQorIyAgIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4CisKKworIyB1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyByZXF1aXJlcyBwcmVsaW5rLXJ0bGQgZnJvbQorIyBwcmVsaW5rLW5hdGl2ZSwgYnV0IHdlIGRvbid0IHdhbnQgdGhpcyBERVBFTkRTIGZvciAtbmF0aXZlIGJ1aWxkcworUUFERVBFTkRTID0gInByZWxpbmstbmF0aXZlIgorUUFERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitRQURFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1FBX1NBTkUgPSAiVHJ1ZSIKKworIyBFbGVjdCB3aGV0aGVyIGEgZ2l2ZW4gdHlwZSBvZiBlcnJvciBpcyBhIHdhcm5pbmcgb3IgZXJyb3IsIHRoZXkgbWF5CisjIGhhdmUgYmVlbiBzZXQgYnkgb3RoZXIgZmlsZXMuCitXQVJOX1FBID89ICJsZGZsYWdzIHVzZWxlc3MtcnBhdGhzIHJwYXRocyBzdGF0aWNkZXYgbGliZGlyIHhvcmctZHJpdmVyLWFiaSBcCisgICAgICAgICAgICB0ZXh0cmVsIGFscmVhZHktc3RyaXBwZWQgaW5jb21wYXRpYmxlLWxpY2Vuc2UgZmlsZXMtaW52YWxpZCBcCisgICAgICAgICAgICBpbnN0YWxsZWQtdnMtc2hpcHBlZCBjb21waWxlLWhvc3QtcGF0aCBpbnN0YWxsLWhvc3QtcGF0aCBcCisgICAgICAgICAgICBwbi1vdmVycmlkZXMgaW5mb2RpciBidWlsZC1kZXBzIGZpbGUtcmRlcHMgXAorICAgICAgICAgICAgdW5rbm93bi1jb25maWd1cmUtb3B0aW9uIHN5bWxpbmstdG8tc3lzcm9vdCBtdWx0aWxpYiBcCisgICAgICAgICAgICBpbnZhbGlkLXBrZ2NvbmZpZyBob3N0LXVzZXItY29udGFtaW5hdGVkIFwKKyAgICAgICAgICAgICIKK0VSUk9SX1FBID89ICJkZXYtc28gZGVidWctZGVwcyBkZXYtZGVwcyBkZWJ1Zy1maWxlcyBhcmNoIHBrZ2NvbmZpZyBsYSBcCisgICAgICAgICAgICBwZXJtcyBkZXAtY21wIHBrZ3ZhcmNoZWNrIHBlcm0tY29uZmlnIHBlcm0tbGluZSBwZXJtLWxpbmsgXAorICAgICAgICAgICAgc3BsaXQtc3RyaXAgcGFja2FnZXMtbGlzdCBwa2d2LXVuZGVmaW5lZCB2YXItdW5kZWZpbmVkIFwKKyAgICAgICAgICAgIHZlcnNpb24tZ29pbmctYmFja3dhcmRzIGV4cGFuZGVkLWQgaW52YWxpZC1jaGFycyBcCisgICAgICAgICAgICAiCitGQUtFUk9PVF9RQSA9ICJob3N0LXVzZXItY29udGFtaW5hdGVkIgorRkFLRVJPT1RfUUFbZG9jXSA9ICJRQSB0ZXN0cyB3aGljaCBuZWVkIHRvIHJ1biB1bmRlciBmYWtlcm9vdC4gSWYgYW55IFwKK2VuYWJsZWQgdGVzdHMgYXJlIGxpc3RlZCBoZXJlLCB0aGUgZG9fcGFja2FnZV9xYSB0YXNrIHdpbGwgcnVuIHVuZGVyIGZha2Vyb290LiIKKworQUxMX1FBID0gIiR7V0FSTl9RQX0gJHtFUlJPUl9RQX0iCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCA/PSAiLS1lbmFibGUtbmxzIC0tZGlzYWJsZS1ubHMgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAtLXdpdGgtbGlidG9vbC1zeXNyb290IgorCisjCisjIGRpY3Rpb25hcnkgZm9yIGVsZiBoZWFkZXJzCisjCisjIGZlZWwgZnJlZSB0byBhZGQgYW5kIGNvcnJlY3QuCisjCisjICAgICAgICAgICBUQVJHRVRfT1MgIFRBUkdFVF9BUkNIICAgTUFDSElORSwgT1NBQkksIEFCSVZFUlNJT04sIExpdHRsZSBFbmRpYW4sIDMyYml0PworZGVmIHBhY2thZ2VfcWFfZ2V0X21hY2hpbmVfZGljdCgpOgorICAgIHJldHVybiB7CisgICAgICAgICAgICAiZGFyd2luOSIgOiB7IAorICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJlYWJpIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiZWxmIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IiA6ICAgICAgKDMsICAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiZXBpcGhhbnkiOiAgICg0NjQzLCAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4IiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NCIgOiAgICgxODMsICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0X2JlIiA6KDE4MywgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICAgICg0MCwgICAgOTcsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGM2NCI6ICAoMjEsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTM4NiI6ICAgICAgICggMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNDg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICAgICggMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImlhNjQiOiAgICAgICAoNTAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGEiOiAgICAgICgzNjkwMiwgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJocHBhIjogICAgICAgKDE1LCAgICAgMywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm02OGsiOiAgICAgICAoIDQsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwcyI6ICAgICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzZWwiOiAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzMzkwIjogICAgICAgKDIyLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNoNCI6ICAgICAgICAoNDIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic3BhcmMiOiAgICAgICggMiwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JsYXplIjogICgxODksICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemVlYiI6KDE4OSwgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9ibGF6ZWVsIjooMTg5LCAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LXVjbGliYyIgOiB7IAorICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICggIDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImkzODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNDg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKCAgNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwcyI6ICAgICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImF2cjMyIjogICAgICAoNjMxNywgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaDQiOiAgICAgICAgKDQyLCAgICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LW11c2wiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0IiA6ICAgKDE4MywgICAgMCwgICAgMCwgICAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NF9iZSIgOigxODMsICAgIDAsICAgIDAsICAgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICggIDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImkzODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNDg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKCAgNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwcyI6ICAgICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAidWNsaW51eC11Y2xpYmMiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImJmaW4iOiAgICAgICAoIDEwNiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sIAorICAgICAgICAgICAgImxpbnV4LWdudWVhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiIDogICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LW11c2xlYWJpIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIiA6ICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC11Y2xpYmNlYWJpIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIiA6ICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1nbnVzcGUiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1tdXNsc3BlIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtdWNsaWJjc3BlIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtZ251IiA6ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNoNCI6ICAgICAgICAoNDIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1nbnV4MzIiIDogICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1nbnVuMzIiIDogICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgfQorCisKK2RlZiBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKToKKyAgICAiIiIgUmVtb3ZlIHRoZSBjb21tb24gcHJlZml4IGZyb20gdGhlIHBhdGguIEluIHRoaXMgY2FzZSBpdCBpcyB0aGUgVE1QRElSIiIiCisgICAgcmV0dXJuIHBhdGgucmVwbGFjZShkLmdldFZhcignVE1QRElSJyxUcnVlKSwiIikKKworZGVmIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IodHlwZSwgZXJyb3IsIGQpOgorICAgIGxvZ2ZpbGUgPSBkLmdldFZhcignUUFfTE9HRklMRScsIFRydWUpCisgICAgaWYgbG9nZmlsZToKKyAgICAgICAgcCA9IGQuZ2V0VmFyKCdQJywgVHJ1ZSkKKyAgICAgICAgZiA9IGZpbGUoIGxvZ2ZpbGUsICJhKyIpCisgICAgICAgIHByaW50ID4+IGYsICIlczogJXMgWyVzXSIgJSAocCwgZXJyb3IsIHR5cGUpCisgICAgICAgIGYuY2xvc2UoKQorCitkZWYgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoZXJyb3JfY2xhc3MsIGVycm9yX21zZywgZCk6CisgICAgcGFja2FnZV9xYV93cml0ZV9lcnJvcihlcnJvcl9jbGFzcywgZXJyb3JfbXNnLCBkKQorICAgIGlmIGVycm9yX2NsYXNzIGluIChkLmdldFZhcigiRVJST1JfUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgYmIuZXJyb3IoIlFBIElzc3VlOiAlcyBbJXNdIiAlIChlcnJvcl9tc2csIGVycm9yX2NsYXNzKSkKKyAgICAgICAgZC5zZXRWYXIoIlFBX1NBTkUiLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxpZiBlcnJvcl9jbGFzcyBpbiAoZC5nZXRWYXIoIldBUk5fUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgYmIud2FybigiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQorICAgIGVsc2U6CisgICAgICAgIGJiLm5vdGUoIlFBIElzc3VlOiAlcyBbJXNdIiAlIChlcnJvcl9tc2csIGVycm9yX2NsYXNzKSkKKyAgICByZXR1cm4gVHJ1ZQorCitRQVBBVEhURVNUW2xpYmV4ZWNdID0gInBhY2thZ2VfcWFfY2hlY2tfbGliZXhlYyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2xpYmV4ZWMocGF0aCxuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKworICAgICMgU2tpcCB0aGUgY2FzZSB3aGVyZSB0aGUgZGVmYXVsdCBpcyBleHBsaWNpdGx5IC91c3IvbGliZXhlYworICAgIGxpYmV4ZWMgPSBkLmdldFZhcignbGliZXhlY2RpcicsIFRydWUpCisgICAgaWYgbGliZXhlYyA9PSAiL3Vzci9saWJleGVjIjoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmICdsaWJleGVjJyBpbiBwYXRoLnNwbGl0KG9zLnBhdGguc2VwKToKKyAgICAgICAgbWVzc2FnZXNbImxpYmV4ZWMiXSA9ICIlczogJXMgaXMgdXNpbmcgbGliZXhlYyBwbGVhc2UgcmVsb2NhdGUgdG8gJXMiICUgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLCBkKSwgbGliZXhlYykKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCitRQVBBVEhURVNUW3JwYXRoc10gPSAicGFja2FnZV9xYV9jaGVja19ycGF0aCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3JwYXRoKGZpbGUsbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIGRhbmdlcm91cyBSUEFUSHMKKyAgICAiIiIKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICByZXR1cm4KKworICAgIGJhZF9kaXJzID0gW2QuZ2V0VmFyKCdCQVNFX1dPUktESVInLCBUcnVlKSwgZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpXQorCisgICAgcGhkcnMgPSBlbGYucnVuX29iamR1bXAoIi1wIiwgZCkKKworICAgIGltcG9ydCByZQorICAgIHJwYXRoX3JlID0gcmUuY29tcGlsZSgiXHMrUlBBVEhccysoLiopIikKKyAgICBmb3IgbGluZSBpbiBwaGRycy5zcGxpdCgiXG4iKToKKyAgICAgICAgbSA9IHJwYXRoX3JlLm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBycGF0aCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgIGZvciBkaXIgaW4gYmFkX2RpcnM6CisgICAgICAgICAgICAgICAgaWYgZGlyIGluIHJwYXRoOgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1sicnBhdGhzIl0gPSAicGFja2FnZSAlcyBjb250YWlucyBiYWQgUlBBVEggJXMgaW4gZmlsZSAlcyIgJSAobmFtZSwgcnBhdGgsIGZpbGUpCisKK1FBUEFUSFRFU1RbdXNlbGVzcy1ycGF0aHNdID0gInBhY2thZ2VfcWFfY2hlY2tfdXNlbGVzc19ycGF0aHMiCitkZWYgcGFja2FnZV9xYV9jaGVja191c2VsZXNzX3JwYXRocyhmaWxlLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgUlBBVEhzIHRoYXQgYXJlIHVzZWxlc3MgYnV0IG5vdCBkYW5nZXJvdXMKKyAgICAiIiIKKyAgICBkZWYgcnBhdGhfZXEoYSwgYik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKGEpID09IG9zLnBhdGgubm9ybXBhdGgoYikKKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgIHJldHVybgorCisgICAgbGliZGlyID0gZC5nZXRWYXIoImxpYmRpciIsIFRydWUpCisgICAgYmFzZV9saWJkaXIgPSBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKQorCisgICAgcGhkcnMgPSBlbGYucnVuX29iamR1bXAoIi1wIiwgZCkKKworICAgIGltcG9ydCByZQorICAgIHJwYXRoX3JlID0gcmUuY29tcGlsZSgiXHMrUlBBVEhccysoLiopIikKKyAgICBmb3IgbGluZSBpbiBwaGRycy5zcGxpdCgiXG4iKToKKyAgICAgICAgbSA9IHJwYXRoX3JlLm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBycGF0aCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgIGlmIHJwYXRoX2VxKHJwYXRoLCBsaWJkaXIpIG9yIHJwYXRoX2VxKHJwYXRoLCBiYXNlX2xpYmRpcik6CisgICAgICAgICAgICAgICAgIyBUaGUgZHluYW1pYyBsaW5rZXIgc2VhcmNoZXMgYm90aCB0aGVzZSBwbGFjZXMgYW55d2F5LiAgVGhlcmUgaXMgbm8gcG9pbnQgaW4KKyAgICAgICAgICAgICAgICAjIGxvb2tpbmcgdGhlcmUgYWdhaW4uCisgICAgICAgICAgICAgICAgbWVzc2FnZXNbInVzZWxlc3MtcnBhdGhzIl0gPSAiJXM6ICVzIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAlcyIgJSAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKGZpbGUsIGQpLCBycGF0aCkKKworUUFQQVRIVEVTVFtkZXYtc29dID0gInBhY2thZ2VfcWFfY2hlY2tfZGV2IgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGV2KHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciAiLnNvIiBsaWJyYXJ5IHN5bWxpbmtzIGluIG5vbi1kZXYgcGFja2FnZXMKKyAgICAiIiIKKworICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCItZGV2IikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItZGJnIikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItcHRlc3QiKSBhbmQgbm90IG5hbWUuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpIGFuZCBwYXRoLmVuZHN3aXRoKCIuc28iKSBhbmQgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIG1lc3NhZ2VzWyJkZXYtc28iXSA9ICJub24gLWRldi8tZGJnL25hdGl2ZXNkay0gcGFja2FnZSBjb250YWlucyBzeW1saW5rIC5zbzogJXMgcGF0aCAnJXMnIiAlIFwKKyAgICAgICAgICAgICAgICAgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitRQVBBVEhURVNUW3N0YXRpY2Rldl0gPSAicGFja2FnZV9xYV9jaGVja19zdGF0aWNkZXYiCitkZWYgcGFja2FnZV9xYV9jaGVja19zdGF0aWNkZXYocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yICIuYSIgbGlicmFyeSBpbiBub24tc3RhdGljZGV2IHBhY2thZ2VzCisgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlLCAtcGljIHBhY2thZ2VzIGNhbiBjb250YWluCisgICAgc3RhdGljIGxpYnJhcmllcywgdGhlIF9ub25zaGFyZWQuYSBiZWxvbmcgd2l0aCB0aGVpciAtZGV2IHBhY2thZ2VzIGFuZAorICAgIGxpYmdjYy5hLCBsaWJnY292LmEgd2lsbCBiZSBza2lwcGVkIGluIHRoZWlyIHBhY2thZ2VzCisgICAgIiIiCisKKyAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgiLXBpYyIpIGFuZCBub3QgbmFtZS5lbmRzd2l0aCgiLXN0YXRpY2RldiIpIGFuZCBub3QgbmFtZS5lbmRzd2l0aCgiLXB0ZXN0IikgYW5kIHBhdGguZW5kc3dpdGgoIi5hIikgYW5kIG5vdCBwYXRoLmVuZHN3aXRoKCJfbm9uc2hhcmVkLmEiKToKKyAgICAgICAgbWVzc2FnZXNbInN0YXRpY2RldiJdID0gIm5vbiAtc3RhdGljZGV2IHBhY2thZ2UgY29udGFpbnMgc3RhdGljIC5hIGxpYnJhcnk6ICVzIHBhdGggJyVzJyIgJSBcCisgICAgICAgICAgICAgICAgIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfbGliZGlyKGQpOgorICAgICIiIgorICAgIENoZWNrIGZvciB3cm9uZyBsaWJyYXJ5IGluc3RhbGxhdGlvbiBwYXRocy4gRm9yIGluc3RhbmNlLCBjYXRjaAorICAgIHJlY2lwZXMgaW5zdGFsbGluZyAvbGliL2Jhci5zbyB3aGVuICR7YmFzZV9saWJkaXJ9PSJsaWIzMiIgb3IKKyAgICBpbnN0YWxsaW5nIGluIC91c3IvbGliNjQgd2hlbiAke2xpYmRpcn09Ii91c3IvbGliIgorICAgICIiIgorICAgIGltcG9ydCByZQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBiYXNlX2xpYmRpciA9IGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsVHJ1ZSkgKyBvcy5zZXAKKyAgICBsaWJkaXIgPSBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkgKyBvcy5zZXAKKyAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCJleGVjX3ByZWZpeCIsIFRydWUpICsgb3Muc2VwCisKKyAgICBtZXNzYWdlcyA9IFtdCisKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCJeL2xpYi4rXC5zbyhcLi4rKT8kIikKKyAgICBleGVjX3JlID0gcmUuY29tcGlsZSgiXiVzLiovbGliLitcLnNvKFwuLispPyQiICUgZXhlY19wcmVmaXgpCisKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhwa2dkZXN0KToKKyAgICAgICAgaWYgcm9vdCA9PSBwa2dkZXN0OgorICAgICAgICAgICAgIyBTa2lwIHN1YmRpcmVjdG9yaWVzIGZvciBhbnkgcGFja2FnZXMgd2l0aCBsaWJkaXIgaW4gSU5TQU5FX1NLSVAKKyAgICAgICAgICAgIHNraXBwYWNrYWdlcyA9IFtdCisgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBkaXJzOgorICAgICAgICAgICAgICAgIGlmICdsaWJkaXInIGluIChkLmdldFZhcignSU5TQU5FX1NLSVBfJyArIHBhY2thZ2UsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJQYWNrYWdlICVzIHNraXBwaW5nIGxpYmRpciBRQSB0ZXN0IiAlIChwYWNrYWdlKSkKKyAgICAgICAgICAgICAgICAgICAgc2tpcHBhY2thZ2VzLmFwcGVuZChwYWNrYWdlKQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2tpcHBhY2thZ2VzOgorICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKHBhY2thZ2UpCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnBhdGgucmVscGF0aChmdWxsX3BhdGgsIHBrZ2Rlc3QpCisgICAgICAgICAgICBpZiBvcy5zZXAgaW4gcmVsX3BhdGg6CisgICAgICAgICAgICAgICAgcGFja2FnZSwgcmVsX3BhdGggPSByZWxfcGF0aC5zcGxpdChvcy5zZXAsIDEpCisgICAgICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5zZXAgKyByZWxfcGF0aAorICAgICAgICAgICAgICAgIGlmIGxpYl9yZS5tYXRjaChyZWxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGJhc2VfbGliZGlyIG5vdCBpbiByZWxfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgiJXM6IGZvdW5kIGxpYnJhcnkgaW4gd3JvbmcgbG9jYXRpb246ICVzIiAlIChwYWNrYWdlLCByZWxfcGF0aCkpCisgICAgICAgICAgICAgICAgaWYgZXhlY19yZS5tYXRjaChyZWxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpYmRpciBub3QgaW4gcmVsX3BhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQoIiVzOiBmb3VuZCBsaWJyYXJ5IGluIHdyb25nIGxvY2F0aW9uOiAlcyIgJSAocGFja2FnZSwgcmVsX3BhdGgpKQorCisgICAgaWYgbWVzc2FnZXM6CisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJsaWJkaXIiLCAiXG4iLmpvaW4obWVzc2FnZXMpLCBkKQorCitRQVBBVEhURVNUW2RlYnVnLWZpbGVzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2RiZyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2RiZyhwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgIi5kZWJ1ZyIgZmlsZXMgb3IgZGlyZWN0b3JpZXMgb3V0c2lkZSBvZiB0aGUgZGJnIHBhY2thZ2UKKyAgICAiIiIKKworICAgIGlmIG5vdCAiLWRiZyIgaW4gbmFtZSBhbmQgbm90ICItcHRlc3QiIGluIG5hbWU6CisgICAgICAgIGlmICcuZGVidWcnIGluIHBhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICAgICAgbWVzc2FnZXNbImRlYnVnLWZpbGVzIl0gPSAibm9uIGRlYnVnIHBhY2thZ2UgY29udGFpbnMgLmRlYnVnIGRpcmVjdG9yeTogJXMgcGF0aCAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisKK1FBUEFUSFRFU1RbcGVybXNdID0gInBhY2thZ2VfcWFfY2hlY2tfcGVybSIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Blcm0ocGF0aCxuYW1lLGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIHRoZSBwZXJtaXNzaW9uIG9mIGZpbGVzCisgICAgIiIiCisgICAgcmV0dXJuCisKK1FBUEFUSFRFU1RbdW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXNdID0gInBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fYmluYXJpZXMiCitkZWYgcGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9iaW5hcmllcyhwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBFbnN1cmUgYmluYXJpZXMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgbGluayB0byBmaWxlcyB1bmRlciBleGVjX3ByZWZpeAorICAgICIiIgorICAgIGlmIHVuc2FmZV9yZWZlcmVuY2VzX3NraXBwYWJsZShwYXRoLCBuYW1lLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBlbGY6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhlY19wcmVmaXgnLCBUcnVlKQorICAgICAgICBzeXNyb290X3BhdGggPSBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSkKKyAgICAgICAgc3lzcm9vdF9wYXRoX3VzciA9IHN5c3Jvb3RfcGF0aCArIGV4ZWNfcHJlZml4CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGRkX291dHB1dCA9IGJiLnByb2Nlc3MuUG9wZW4oWyJwcmVsaW5rLXJ0bGQiLCAiLS1yb290Iiwgc3lzcm9vdF9wYXRoLCBwYXRoXSwgc3Rkb3V0PXN1Yi5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yOgorICAgICAgICAgICAgZXJyb3JfbXNnID0gcG4gKyAiOiBwcmVsaW5rLXJ0bGQgYWJvcnRlZCB3aGVuIHByb2Nlc3NpbmcgJXMiICUgcGF0aAorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc3lzcm9vdF9wYXRoX3VzciBpbiBsZGRfb3V0cHV0OgorICAgICAgICAgICAgbGRkX291dHB1dCA9IGxkZF9vdXRwdXQucmVwbGFjZShzeXNyb290X3BhdGgsICIiKQorCisgICAgICAgICAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgICAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorCisgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNob3J0X3BhdGggPSBwYXRoLnJlcGxhY2UoJyVzLyVzJyAlIChwa2dkZXN0LCBwYWNrYWdlKSwgIiIsIDEpCisgICAgICAgICAgICAgICAgaWYgKHNob3J0X3BhdGggIT0gcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGJhc2VfZXJyID0gcG4gKyAiOiAlcywgaW5zdGFsbGVkIGluIHRoZSBiYXNlX3ByZWZpeCwgcmVxdWlyZXMgYSBzaGFyZWQgbGlicmFyeSB1bmRlciBleGVjX3ByZWZpeCAoJXMpIiAlIChzaG9ydF9wYXRoLCBleGVjX3ByZWZpeCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxkZF9vdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgaWYgZXhlY19wcmVmaXggaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzOiAlcyIgJSAoYmFzZV9lcnIsIGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIiwgZXJyb3JfbXNnLCBkKQorCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworUUFQQVRIVEVTVFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX3NjcmlwdHMiCitkZWYgcGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9zY3JpcHRzKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIFdhcm4gaWYgc2NyaXB0cyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIHJlZmVyZW5jZSBmaWxlcyB1bmRlciBleGVjX3ByZWZpeAorICAgICIiIgorICAgIGlmIHVuc2FmZV9yZWZlcmVuY2VzX3NraXBwYWJsZShwYXRoLCBuYW1lLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBub3QgZWxmOgorICAgICAgICBpbXBvcnQgc3RhdAorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAgICAgIyBFbnN1cmUgd2UncmUgY2hlY2tpbmcgYW4gZXhlY3V0YWJsZSBzY3JpcHQKKyAgICAgICAgc3RhdGluZm8gPSBvcy5zdGF0KHBhdGgpCisgICAgICAgIGlmIGJvb2woc3RhdGluZm8uc3RfbW9kZSAmIHN0YXQuU19JWFVTUik6CisgICAgICAgICAgICAjIGdyZXAgc2hlbGwgc2NyaXB0cyBmb3IgcG9zc2libGUgcmVmZXJlbmNlcyB0byAvZXhlY19wcmVmaXgvCisgICAgICAgICAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCdleGVjX3ByZWZpeCcsIFRydWUpCisgICAgICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnJXMvJyAlcyA+IC9kZXYvbnVsbCIgJSAoZXhlY19wcmVmaXgsIHBhdGgpCisgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9IHBuICsgIjogRm91bmQgYSByZWZlcmVuY2UgdG8gJXMvIGluICVzIiAlIChleGVjX3ByZWZpeCwgcGF0aCkKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0cyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiU2hlbGwgc2NyaXB0cyBpbiBiYXNlX2JpbmRpciBhbmQgYmFzZV9zYmluZGlyIHNob3VsZCBub3QgcmVmZXJlbmNlIGFueXRoaW5nIGluIGV4ZWNfcHJlZml4IgorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIiwgZXJyb3JfbXNnLCBkKQorCitkZWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgIi1kYmciIGluIG5hbWUgb3IgIi1kZXYiIGluIG5hbWU6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIE90aGVyIHBhY2thZ2UgbmFtZXMgdG8gc2tpcDoKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImtlcm5lbC1tb2R1bGUtIik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFNraXAgc3ltbGlua3MKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgU2tpcCB1bnVzdWFsIHJvb3RmcyBsYXlvdXRzIHdoaWNoIG1ha2UgdGhlc2UgdGVzdHMgaXJyZWxldmFudAorICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JywgVHJ1ZSkKKyAgICBpZiBleGVjX3ByZWZpeCA9PSAiIjoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGtnZGVzdCA9IHBrZ2Rlc3QgKyAiLyIgKyBuYW1lCisgICAgcGtnZGVzdCA9IG9zLnBhdGguYWJzcGF0aChwa2dkZXN0KQorICAgIGJhc2VfYmluZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpCisgICAgYmFzZV9zYmluZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXInLCBUcnVlKQorICAgIGJhc2VfbGliZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdiYXNlX2xpYmRpcicsIFRydWUpCisgICAgYmluZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKQorICAgIHNiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ3NiaW5kaXInLCBUcnVlKQorICAgIGxpYmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKworICAgIGlmIGJhc2VfYmluZGlyID09IGJpbmRpciBhbmQgYmFzZV9zYmluZGlyID09IHNiaW5kaXIgYW5kIGJhc2VfbGliZGlyID09IGxpYmRpcjoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgU2tpcCBmaWxlcyBub3QgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXQorICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgocGF0aCkKKyAgICBpZiBub3QgKGJhc2VfYmluZGlyIGluIHBhdGggb3IgYmFzZV9zYmluZGlyIGluIHBhdGggb3IgYmFzZV9saWJkaXIgaW4gcGF0aCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworUUFQQVRIVEVTVFthcmNoXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2FyY2giCitkZWYgcGFja2FnZV9xYV9jaGVja19hcmNoKHBhdGgsbmFtZSxkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBpZiBhcmNocyBhcmUgY29tcGF0aWJsZQorICAgICIiIgorICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgdGFyZ2V0X29zICAgPSBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkKKyAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgcHJvdmlkZXMgPSBkLmdldFZhcignUFJPVklERVMnLCBUcnVlKQorICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorCisgICAgaWYgdGFyZ2V0X2FyY2ggPT0gImFsbGFyY2giOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIG1lc3NhZ2VzWyJhcmNoIl0gPSBwbiArICI6IFJlY2lwZSBpbmhlcml0cyB0aGUgYWxsYXJjaCBjbGFzcywgYnV0IGhhcyBwYWNrYWdlZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYmluYXJpZXMiCisgICAgICAgIHJldHVybgorCisgICAgIyBGSVhNRTogQ3Jvc3MgcGFja2FnZSBjb25mdXNlIHRoaXMgY2hlY2ssIHNvIGp1c3Qgc2tpcCB0aGVtCisgICAgZm9yIHMgaW4gWydjcm9zcycsICduYXRpdmVzZGsnLCAnY3Jvc3MtY2FuYWRpYW4nXToKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcyhzLCBkKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgIyBhdm9pZCBmb2xsb3dpbmcgbGlua3MgdG8gL3Vzci9iaW4gKGUuZy4gb24gdWRldiBidWlsZHMpCisgICAgIyB3ZSB3aWxsIGNoZWNrIHRoZSBmaWxlcyBwb2ludGVkIHRvIGFueXdheS4uLgorICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgICNpZiB0aGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLCB0aGVuIGZpeCB0aGUgZGljdCBhYm92ZQorICAgIChtYWNoaW5lLCBvc2FiaSwgYWJpdmVyc2lvbiwgbGl0dGxlZW5kaWFuLCBiaXRzKSBcCisgICAgICAgID0gcGFja2FnZV9xYV9nZXRfbWFjaGluZV9kaWN0KClbdGFyZ2V0X29zXVt0YXJnZXRfYXJjaF0KKworICAgICMgQ2hlY2sgdGhlIGFyY2hpdGVjdHVyZSBhbmQgZW5kaWFubmVzIG9mIHRoZSBiaW5hcnkKKyAgICBpZiBub3QgKChtYWNoaW5lID09IGVsZi5tYWNoaW5lKCkpIG9yIFwKKyAgICAgICAgKCgoInZpcnR1YWwva2VybmVsIiBpbiBwcm92aWRlcykgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibW9kdWxlIiwgZCkgKSBhbmQgKHRhcmdldF9vcyA9PSAibGludXgtZ251eDMyIiBvciB0YXJnZXRfb3MgPT0gImxpbnV4LWdudW4zMiIpKSk6CisgICAgICAgIG1lc3NhZ2VzWyJhcmNoIl0gPSAiQXJjaGl0ZWN0dXJlIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSBvbiAlcyIgJSBcCisgICAgICAgICAgICAgICAgIChtYWNoaW5lLCBlbGYubWFjaGluZSgpLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKyAgICBlbGlmIG5vdCAoKGJpdHMgPT0gZWxmLmFiaVNpemUoKSkgb3IgIFwKKyAgICAgICAgKCgoInZpcnR1YWwva2VybmVsIiBpbiBwcm92aWRlcykgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibW9kdWxlIiwgZCkgKSBhbmQgKHRhcmdldF9vcyA9PSAibGludXgtZ251eDMyIiBvciB0YXJnZXRfb3MgPT0gImxpbnV4LWdudW4zMiIpKSk6CisgICAgICAgIG1lc3NhZ2VzWyJhcmNoIl0gPSAiQml0IHNpemUgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpICVzIG9uICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgKGJpdHMsIGVsZi5hYmlTaXplKCksIGJwbiwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisgICAgZWxpZiBub3QgbGl0dGxlZW5kaWFuID09IGVsZi5pc0xpdHRsZUVuZGlhbigpOgorICAgICAgICBtZXNzYWdlc1siYXJjaCJdID0gIkVuZGlhbm5lcyBkaWQgbm90IG1hdGNoICglZCB0byAlZCkgb24gJXMiICUgXAorICAgICAgICAgICAgICAgICAobGl0dGxlZW5kaWFuLCBlbGYuaXNMaXR0bGVFbmRpYW4oKSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisKK1FBUEFUSFRFU1RbZGVza3RvcF0gPSAicGFja2FnZV9xYV9jaGVja19kZXNrdG9wIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGVza3RvcChwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBSdW4gYWxsIGRlc2t0b3AgZmlsZXMgdGhyb3VnaCBkZXNrdG9wLWZpbGUtdmFsaWRhdGUuCisgICAgIiIiCisgICAgaWYgcGF0aC5lbmRzd2l0aCgiLmRlc2t0b3AiKToKKyAgICAgICAgZGVza3RvcF9maWxlX3ZhbGlkYXRlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLFRydWUpLCdkZXNrdG9wLWZpbGUtdmFsaWRhdGUnKQorICAgICAgICBvdXRwdXQgPSBvcy5wb3BlbigiJXMgJXMiICUgKGRlc2t0b3BfZmlsZV92YWxpZGF0ZSwgcGF0aCkpCisgICAgICAgICMgVGhpcyBvbmx5IHByb2R1Y2VzIG91dHB1dCBvbiBlcnJvcnMKKyAgICAgICAgZm9yIGwgaW4gb3V0cHV0OgorICAgICAgICAgICAgbWVzc2FnZXNbImRlc2t0b3AiXSA9ICJEZXNrdG9wIGZpbGUgaXNzdWU6ICIgKyBsLnN0cmlwKCkKKworUUFQQVRIVEVTVFt0ZXh0cmVsXSA9ICJwYWNrYWdlX3FhX3RleHRyZWwiCitkZWYgcGFja2FnZV9xYV90ZXh0cmVsKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGlmIHRoZSBiaW5hcnkgY29udGFpbnMgcmVsb2NhdGlvbnMgaW4gLnRleHQKKyAgICAiIiIKKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgcGhkcnMgPSBlbGYucnVuX29iamR1bXAoIi1wIiwgZCkKKyAgICBzYW5lID0gVHJ1ZQorCisgICAgaW1wb3J0IHJlCisgICAgdGV4dHJlbF9yZSA9IHJlLmNvbXBpbGUoIlxzK1RFWFRSRUxccysiKQorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBpZiB0ZXh0cmVsX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisKKyAgICBpZiBub3Qgc2FuZToKKyAgICAgICAgbWVzc2FnZXNbInRleHRyZWwiXSA9ICJFTEYgYmluYXJ5ICclcycgaGFzIHJlbG9jYXRpb25zIGluIC50ZXh0IiAlIHBhdGgKKworUUFQQVRIVEVTVFtsZGZsYWdzXSA9ICJwYWNrYWdlX3FhX2hhc2hfc3R5bGUiCitkZWYgcGFja2FnZV9xYV9oYXNoX3N0eWxlKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGlmIHRoZSBiaW5hcnkgaGFzIHRoZSByaWdodCBoYXNoIHN0eWxlLi4uCisgICAgIiIiCisKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIGdudV9oYXNoID0gIi0taGFzaC1zdHlsZT1nbnUiIGluIGQuZ2V0VmFyKCdMREZMQUdTJywgVHJ1ZSkKKyAgICBpZiBub3QgZ251X2hhc2g6CisgICAgICAgIGdudV9oYXNoID0gIi0taGFzaC1zdHlsZT1ib3RoIiBpbiBkLmdldFZhcignTERGTEFHUycsIFRydWUpCisgICAgaWYgbm90IGdudV9oYXNoOgorICAgICAgICByZXR1cm4KKworICAgIHNhbmUgPSBGYWxzZQorICAgIGhhc19zeW1zID0gRmFsc2UKKworICAgIHBoZHJzID0gZWxmLnJ1bl9vYmpkdW1wKCItcCIsIGQpCisKKyAgICAjIElmIHRoaXMgYmluYXJ5IGhhcyBzeW1ib2xzLCB3ZSBleHBlY3QgaXQgdG8gaGF2ZSBHTlVfSEFTSCB0b28uCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIGlmICJTWU1UQUIiIGluIGxpbmU6CisgICAgICAgICAgICBoYXNfc3ltcyA9IFRydWUKKyAgICAgICAgaWYgIkdOVV9IQVNIIiBpbiBsaW5lOgorICAgICAgICAgICAgc2FuZSA9IFRydWUKKyAgICAgICAgaWYgIlttaXBzMzJdIiBpbiBsaW5lIG9yICJbbWlwczY0XSIgaW4gbGluZToKKyAgICAgICAgICAgIHNhbmUgPSBUcnVlCisKKyAgICBpZiBoYXNfc3ltcyBhbmQgbm90IHNhbmU6CisgICAgICAgIG1lc3NhZ2VzWyJsZGZsYWdzIl0gPSAiTm8gR05VX0hBU0ggaW4gdGhlIGVsZiBiaW5hcnk6ICclcyciICUgcGF0aAorCisKK1FBUEFUSFRFU1RbYnVpbGRwYXRoc10gPSAicGFja2FnZV9xYV9jaGVja19idWlsZHBhdGhzIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfYnVpbGRwYXRocyhwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgYnVpbGQgcGF0aHMgaW5zaWRlIHRhcmdldCBmaWxlcyBhbmQgZXJyb3IgaWYgbm90IGZvdW5kIGluIHRoZSB3aGl0ZWxpc3QKKyAgICAiIiIKKyAgICAjIElnbm9yZSAuZGVidWcgZmlsZXMsIG5vdCBpbnRlcmVzdGluZworICAgIGlmIHBhdGguZmluZCgiLmRlYnVnIikgIT0gLTE6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZ25vcmUgc3ltbGlua3MKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgZmlsZV9jb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgaWYgdG1wZGlyIGluIGZpbGVfY29udGVudDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJidWlsZHBhdGhzIl0gPSAiRmlsZSAlcyBpbiBwYWNrYWdlIGNvbnRhaW5lZCByZWZlcmVuY2UgdG8gdG1wZGlyIiAlIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpCisKKworUUFQQVRIVEVTVFt4b3JnLWRyaXZlci1hYmldID0gInBhY2thZ2VfcWFfY2hlY2tfeG9yZ19kcml2ZXJfYWJpIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfeG9yZ19kcml2ZXJfYWJpKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIHRoYXQgYWxsIHBhY2thZ2VzIGNvbnRhaW5pbmcgWG9yZyBkcml2ZXJzIGhhdmUgQUJJIGRlcGVuZGVuY2llcworICAgICIiIgorCisgICAgIyBTa2lwIGRldiwgZGJnIG9yIG5hdGl2ZXNkayBwYWNrYWdlcworICAgIGlmIG5hbWUuZW5kc3dpdGgoIi1kZXYiKSBvciBuYW1lLmVuZHN3aXRoKCItZGJnIikgb3IgbmFtZS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgIHJldHVybgorCisgICAgZHJpdmVyZGlyID0gZC5leHBhbmQoIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy8iKQorICAgIGlmIGRyaXZlcmRpciBpbiBwYXRoIGFuZCBwYXRoLmVuZHN3aXRoKCIuc28iKToKKyAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgICAgICBmb3IgcmRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBuYW1lLCBUcnVlKSBvciAiIik6CisgICAgICAgICAgICBpZiByZGVwLnN0YXJ0c3dpdGgoIiVzeG9yZy1hYmktIiAlIG1scHJlZml4KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbWVzc2FnZXNbInhvcmctZHJpdmVyLWFiaSJdID0gIlBhY2thZ2UgJXMgY29udGFpbnMgWG9yZyBkcml2ZXIgKCVzKSBidXQgbm8geG9yZy1hYmktIGRlcGVuZGVuY2llcyIgJSAobmFtZSwgb3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKworUUFQQVRIVEVTVFtpbmZvZGlyXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2luZm9kaXIiCitkZWYgcGFja2FnZV9xYV9jaGVja19pbmZvZGlyKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIHRoYXQgL3Vzci9zaGFyZS9pbmZvL2RpciBpc24ndCBzaGlwcGVkIGluIGEgcGFydGljdWxhciBwYWNrYWdlCisgICAgIiIiCisgICAgaW5mb2RpciA9IGQuZXhwYW5kKCIke2luZm9kaXJ9L2RpciIpCisKKyAgICBpZiBpbmZvZGlyIGluIHBhdGg6CisgICAgICAgIG1lc3NhZ2VzWyJpbmZvZGlyIl0gPSAiVGhlIC91c3Ivc2hhcmUvaW5mby9kaXIgZmlsZSBpcyBub3QgbWVhbnQgdG8gYmUgc2hpcHBlZCBpbiBhIHBhcnRpY3VsYXIgcGFja2FnZS4iCisKK1FBUEFUSFRFU1Rbc3ltbGluay10by1zeXNyb290XSA9ICJwYWNrYWdlX3FhX2NoZWNrX3N5bWxpbmtfdG9fc3lzcm9vdCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3N5bWxpbmtfdG9fc3lzcm9vdChwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGF0IHRoZSBwYWNrYWdlIGRvZXNuJ3QgY29udGFpbiBhbnkgYWJzb2x1dGUgc3ltbGlua3MgdG8gdGhlIHN5c3Jvb3QuCisgICAgIiIiCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKHBhdGgpCisgICAgICAgIGlmIG9zLnBhdGguaXNhYnModGFyZ2V0KToKKyAgICAgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgICAgICAgICAgaWYgdGFyZ2V0LnN0YXJ0c3dpdGgodG1wZGlyKToKKyAgICAgICAgICAgICAgICB0cmltbWVkID0gcGF0aC5yZXBsYWNlKG9zLnBhdGguam9pbiAoZC5nZXRWYXIoIlBLR0RFU1QiLCBUcnVlKSwgbmFtZSksICIiKQorICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJzeW1saW5rLXRvLXN5c3Jvb3QiXSA9ICJTeW1saW5rICVzIGluICVzIHBvaW50cyB0byBUTVBESVIiICUgKHRyaW1tZWQsIG5hbWUpCitkZWYgcGFja2FnZV9xYV9jaGVja19saWNlbnNlKHdvcmtkaXIsIGQpOgorICAgICIiIgorICAgIENoZWNrIGZvciBjaGFuZ2VzIGluIHRoZSBsaWNlbnNlIGZpbGVzIAorICAgICIiIgorICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIHNhbmUgPSBUcnVlCisKKyAgICBsaWNfZmlsZXMgPSBkLmdldFZhcignTElDX0ZJTEVTX0NIS1NVTScsIFRydWUpCisgICAgbGljID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIGlmIGxpYyA9PSAiQ0xPU0VEIjoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIG5vdCBsaWNfZmlsZXM6CisgICAgICAgIGJiLmVycm9yKHBuICsgIjogUmVjaXBlIGZpbGUgZG9lcyBub3QgaGF2ZSBsaWNlbnNlIGZpbGUgaW5mb3JtYXRpb24gKExJQ19GSUxFU19DSEtTVU0pIikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBzcmNkaXIgPSBkLmdldFZhcignUycsIFRydWUpCisKKyAgICBmb3IgdXJsIGluIGxpY19maWxlcy5zcGxpdCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCggcG4gKyAiOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAiICsgdXJsKQorICAgICAgICBzcmNsaWNmaWxlID0gb3MucGF0aC5qb2luKHNyY2RpciwgcGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNyY2xpY2ZpbGUpOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCggcG4gKyAiOiBMSUNfRklMRVNfQ0hLU1VNIHBvaW50cyB0byBhbiBpbnZhbGlkIGZpbGU6ICIgKyBzcmNsaWNmaWxlKQorCisgICAgICAgIHJlY2lwZW1kNSA9IHBhcm0uZ2V0KCdtZDUnLCAnJykKKyAgICAgICAgYmVnaW5saW5lLCBlbmRsaW5lID0gMCwgMAorICAgICAgICBpZiAnYmVnaW5saW5lJyBpbiBwYXJtOgorICAgICAgICAgICAgYmVnaW5saW5lID0gaW50KHBhcm1bJ2JlZ2lubGluZSddKQorICAgICAgICBpZiAnZW5kbGluZScgaW4gcGFybToKKyAgICAgICAgICAgIGVuZGxpbmUgPSBpbnQocGFybVsnZW5kbGluZSddKQorCisgICAgICAgIGlmIChub3QgYmVnaW5saW5lKSBhbmQgKG5vdCBlbmRsaW5lKToKKyAgICAgICAgICAgIG1kNWNoa3N1bSA9IGJiLnV0aWxzLm1kNV9maWxlKHNyY2xpY2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaSA9IG9wZW4oc3JjbGljZmlsZSwgJ3JiJykKKyAgICAgICAgICAgIGZvID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3diJywgcHJlZml4PSdwb2t5LicsIHN1ZmZpeD0nLnRtcCcsIGRlbGV0ZT1GYWxzZSkKKyAgICAgICAgICAgIHRtcGxpY2ZpbGUgPSBmby5uYW1lOworICAgICAgICAgICAgbGluZW5vID0gMAorICAgICAgICAgICAgbGluZXNvdXQgPSAwCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaToKKyAgICAgICAgICAgICAgICBsaW5lbm8gKz0gMQorICAgICAgICAgICAgICAgIGlmIChsaW5lbm8gPj0gYmVnaW5saW5lKTogCisgICAgICAgICAgICAgICAgICAgIGlmICgobGluZW5vIDw9IGVuZGxpbmUpIG9yIG5vdCBlbmRsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvLndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc291dCArPSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZm8uZmx1c2goKQorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgZmkuY2xvc2UoKQorICAgICAgICAgICAgbWQ1Y2hrc3VtID0gYmIudXRpbHMubWQ1X2ZpbGUodG1wbGljZmlsZSkKKyAgICAgICAgICAgIG9zLnVubGluayh0bXBsaWNmaWxlKQorCisgICAgICAgIGlmIHJlY2lwZW1kNSA9PSBtZDVjaGtzdW06CisgICAgICAgICAgICBiYi5ub3RlIChwbiArICI6IG1kNSBjaGVja3N1bSBtYXRjaGVkIGZvciAiLCB1cmwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiByZWNpcGVtZDU6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBtZDUgZGF0YSBpcyBub3QgbWF0Y2hpbmcgZm9yICIsIHVybCkKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IFRoZSBuZXcgbWQ1IGNoZWNrc3VtIGlzICIsIG1kNWNoa3N1bSkKKyAgICAgICAgICAgICAgICBpZiBiZWdpbmxpbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGVuZGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9ICIlcyAobGluZXMgJWQgdGhyb3VnaCB0byAlZCkiICUgKHNyY2xpY2ZpbGUsIGJlZ2lubGluZSwgZW5kbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGVkZXNjID0gIiVzIChiZWdpbm5pbmcgb24gbGluZSAlZCkiICUgKHNyY2xpY2ZpbGUsIGJlZ2lubGluZSkKKyAgICAgICAgICAgICAgICBlbGlmIGVuZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGVkZXNjID0gIiVzIChlbmRpbmcgb24gbGluZSAlZCkiICUgKHNyY2xpY2ZpbGUsIGVuZGxpbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSBzcmNsaWNmaWxlCisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBDaGVjayBpZiB0aGUgbGljZW5zZSBpbmZvcm1hdGlvbiBoYXMgY2hhbmdlZCBpbiAlcyB0byB2ZXJpZnkgdGhhdCB0aGUgTElDRU5TRSB2YWx1ZSBcIiVzXCIgcmVtYWlucyB2YWxpZCIgJSAoc3JjZmlsZWRlc2MsIGxpYykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogbWQ1IGNoZWNrc3VtIGlzIG5vdCBzcGVjaWZpZWQgZm9yICIsIHVybCkKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IFRoZSBtZDUgY2hlY2tzdW0gaXMgIiwgbWQ1Y2hrc3VtKQorICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisKKyAgICByZXR1cm4gc2FuZQorCitkZWYgcGFja2FnZV9xYV9jaGVja19zdGFnZWQocGF0aCxkKToKKyAgICAiIiIKKyAgICBDaGVjayBzdGFnZWQgbGEgYW5kIHBjIGZpbGVzIGZvciBzYW5pdHkKKyAgICAgIC1lLmcuIGluc3RhbGxlZCBiZWluZyBmYWxzZQorCisgICAgICAgIEFzIHRoaXMgaXMgcnVuIGFmdGVyIGV2ZXJ5IHN0YWdlIHdlIHNob3VsZCBiZSBhYmxlCisgICAgICAgIHRvIGZpbmQgdGhlIG9uZSByZXNwb25zaWJsZSBmb3IgdGhlIGVycm9ycyBlYXNpbHkgZXZlbgorICAgICAgICBpZiB3ZSBsb29rIGF0IGV2ZXJ5IC5wYyBhbmQgLmxhIGZpbGUKKyAgICAiIiIKKworICAgIHNhbmUgPSBUcnVlCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgd29ya2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJ3b3JrIikKKworICAgIGluc3RhbGxlZCA9ICJpbnN0YWxsZWQ9eWVzIgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm5hdGl2ZSIsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCk6CisgICAgICAgIHBrZ2NvbmZpZ2NoZWNrID0gd29ya2RpcgorICAgIGVsc2U6CisgICAgICAgIHBrZ2NvbmZpZ2NoZWNrID0gdG1wZGlyCisKKyAgICAjIGZpbmQgYWxsIC5sYSBhbmQgLnBjIGZpbGVzCisgICAgIyByZWFkIHRoZSBjb250ZW50CisgICAgIyBhbmQgY2hlY2sgZm9yIHN0dWZmIHRoYXQgbG9va3Mgd3JvbmcKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsZmlsZSkKKyAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIi5sYSIpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmaWxlX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBpZiB3b3JrZGlyIGluIGZpbGVfY29udGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBmYWlsZWQgc2FuaXR5IHRlc3QgKHdvcmtkaXIpIGluIHBhdGggJXMiICUgKGZpbGUscm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigibGEiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoIi5wYyIpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmaWxlX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBpZiBwa2djb25maWdjaGVjayBpbiBmaWxlX2NvbnRlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgZmFpbGVkIHNhbml0eSB0ZXN0ICh0bXBkaXIpIGluIHBhdGggJXMiICUgKGZpbGUscm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGtnY29uZmlnIiwgZXJyb3JfbXNnLCBkKQorCisgICAgcmV0dXJuIHNhbmUKKworIyBXYWxrIG92ZXIgYWxsIGZpbGVzIGluIGEgZGlyZWN0b3J5IGFuZCBjYWxsIGZ1bmMKK2RlZiBwYWNrYWdlX3FhX3dhbGsocGF0aCwgd2FybmZ1bmNzLCBlcnJvcmZ1bmNzLCBza2lwLCBwYWNrYWdlLCBkKToKKyAgICBpbXBvcnQgb2UucWEKKworICAgICNpZiB0aGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLCB0aGVuIGZpeCB0aGUgZGljdCBhYm92ZQorICAgIHRhcmdldF9vcyAgID0gZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpCisgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorCisgICAgd2FybmluZ3MgPSB7fQorICAgIGVycm9ycyA9IHt9CisgICAgZm9yIHBhdGggaW4gcGtnZmlsZXNbcGFja2FnZV06CisgICAgICAgICAgICBlbGYgPSBvZS5xYS5FTEZGaWxlKHBhdGgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZWxmLm9wZW4oKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGVsZiA9IE5vbmUKKyAgICAgICAgICAgIGZvciBmdW5jIGluIHdhcm5mdW5jczoKKyAgICAgICAgICAgICAgICBmdW5jKHBhdGgsIHBhY2thZ2UsIGQsIGVsZiwgd2FybmluZ3MpCisgICAgICAgICAgICBmb3IgZnVuYyBpbiBlcnJvcmZ1bmNzOgorICAgICAgICAgICAgICAgIGZ1bmMocGF0aCwgcGFja2FnZSwgZCwgZWxmLCBlcnJvcnMpCisKKyAgICBmb3IgdyBpbiB3YXJuaW5nczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3Iodywgd2FybmluZ3Nbd10sIGQpCisgICAgZm9yIGUgaW4gZXJyb3JzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcihlLCBlcnJvcnNbZV0sIGQpCisKKyAgICByZXR1cm4gbGVuKGVycm9ycykgPT0gMAorCitkZWYgcGFja2FnZV9xYV9jaGVja19yZGVwZW5kcyhwa2csIHBrZ2Rlc3QsIHNraXAsIHRhc2tkZXBzLCBwYWNrYWdlcywgZCk6CisgICAgIyBEb24ndCBkbyB0aGlzIGNoZWNrIGZvciBrZXJuZWwvbW9kdWxlIHJlY2lwZXMsIHRoZXJlIGFyZW4ndCB0b28gbWFueSBkZWJ1Zy9kZXZlbG9wbWVudAorICAgICMgcGFja2FnZXMgYW5kIHlvdSBjYW4gZ2V0IGZhbHNlIHBvc2l0aXZlcyBlLmcuIG9uIGtlcm5lbC1tb2R1bGUtbGlyYy1kZXYKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJrZXJuZWwiLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUtYmFzZSIsIGQpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgc2FuZSA9IFRydWUKKyAgICBpZiBub3QgIi1kYmciIGluIHBrZyBhbmQgbm90ICJwYWNrYWdlZ3JvdXAtIiBpbiBwa2cgYW5kIG5vdCAiLWltYWdlIiBpbiBwa2c6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBwa2cpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgICMgTm93IGNoZWNrIHRoZSBSREVQRU5EUworICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSREVQRU5EUycsIFRydWUpIG9yICIiKQorCisgICAgICAgICMgTm93IGRvIHRoZSBzYW5pdHkgY2hlY2shISEKKyAgICAgICAgaWYgImJ1aWxkLWRlcHMiIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgIi1kYmciIGluIHJkZXBlbmQgYW5kICJkZWJ1Zy1kZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIHJkZXBlbmRzIG9uICVzIiAlIChwa2cscmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJkZWJ1Zy1kZXBzIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgICAgIGlmIChub3QgIi1kZXYiIGluIHBrZyBhbmQgbm90ICItc3RhdGljZGV2IiBpbiBwa2cpIGFuZCByZGVwZW5kLmVuZHN3aXRoKCItZGV2IikgYW5kICJkZXYtZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyByZGVwZW5kcyBvbiAlcyIgJSAocGtnLCByZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImRldi1kZXBzIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgICAgIGlmIHJkZXBlbmQgbm90IGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocmRlcGVuZCwgZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmRlcF9kYXRhIGFuZCAnUE4nIGluIHJkZXBfZGF0YSBhbmQgcmRlcF9kYXRhWydQTiddIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJkZXBfZGF0YSBvciBub3QgJ1BOJyBpbiByZGVwX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dkYXRhX2RpciA9IGQuZ2V0VmFyKCJQS0dEQVRBX0RJUiIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVzID0gb3MubGlzdGRpcigiJXMvcnVudGltZS1ycHJvdmlkZXMvJXMvIiAlIChwa2dkYXRhX2RpciwgcmRlcGVuZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcG9zc2libGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJkZXBfZGF0YSBhbmQgJ1BOJyBpbiByZGVwX2RhdGEgYW5kIHJkZXBfZGF0YVsnUE4nXSBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgcmRlcF9kYXRhIGFuZCAnUE4nIGluIHJkZXBfZGF0YSBhbmQgcmRlcF9kYXRhWydQTiddIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIHJkZXBlbmRzIG9uICVzLCBidXQgaXQgaXNuJ3QgYSBidWlsZCBkZXBlbmRlbmN5PyIgJSAocGtnLCByZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImJ1aWxkLWRlcHMiLCBlcnJvcl9tc2csIGQpCisKKyAgICAgICAgaWYgImZpbGUtcmRlcHMiIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgaWdub3JlZF9maWxlX3JkZXBzID0gc2V0KFsnL2Jpbi9zaCcsICcvdXNyL2Jpbi9lbnYnLCAncnRsZChHTlVfSEFTSCknXSkKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICAgICAgICAgIGlnbm9yZWRfZmlsZV9yZGVwcyB8PSBzZXQoWycvYmluL2Jhc2gnLCAnL3Vzci9iaW4vcGVybCddKQorICAgICAgICAgICAgIyBGb3IgU2F2aW5nIHRoZSBGSUxFUkRFUEVORFMKKyAgICAgICAgICAgIGZpbGVyZGVwZW5kcyA9IHt9CisgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocGtnLCBkKQorICAgICAgICAgICAgZm9yIGtleSBpbiByZGVwX2RhdGE6CisgICAgICAgICAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIkZJTEVSREVQRU5EU18iKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmtleSBpbiByZGVwX2RhdGFba2V5XS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3Via2V5IG5vdCBpbiBpZ25vcmVkX2ZpbGVfcmRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgaXQgc3RhcnRzIHdpdGggRklMRVJERVBFTkRTXworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVyZGVwZW5kc1tzdWJrZXldID0ga2V5WzEzOl0KKworICAgICAgICAgICAgaWYgZmlsZXJkZXBlbmRzOgorICAgICAgICAgICAgICAgIG5leHQgPSByZGVwZW5kcworICAgICAgICAgICAgICAgIGRvbmUgPSByZGVwZW5kc1s6XQorICAgICAgICAgICAgICAgICMgRmluZCBhbGwgdGhlIHJkZXBlbmRzIG9uIHRoZSBkZXBlbmRlbmN5IGNoYWluCisgICAgICAgICAgICAgICAgd2hpbGUgbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgbmV3ID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHJkZXAgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShyZGVwLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgc3ViX3JkZXBzID0gcmRlcF9kYXRhLmdldCgiUkRFUEVORFNfIiArIHJkZXApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3ViX3JkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3ViX3JkZXAgaW4gc3ViX3JkZXBzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3ViX3JkZXAgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3ViX3JkZXAuc3RhcnRzd2l0aCgnKCcpIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZS5wYWNrYWdlZGF0YS5oYXNfc3VicGtnZGF0YShzdWJfcmRlcCwgZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSXQncyBhIG5ldyByZGVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKHN1Yl9yZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcuYXBwZW5kKHN1Yl9yZGVwKQorICAgICAgICAgICAgICAgICAgICBuZXh0ID0gbmV3CisKKyAgICAgICAgICAgICAgICAjIEFkZCB0aGUgcnByb3ZpZGVzIG9mIGl0c2VsZgorICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZS5pbnNlcnQoMCwgcGtnKQorCisgICAgICAgICAgICAgICAgIyBUaGUgcHl0aG9uIGlzIG5vdCBhIHBhY2thZ2UsIGJ1dCBweXRob24tY29yZSBwcm92aWRlcyBpdCwgc28KKyAgICAgICAgICAgICAgICAjIHNraXAgY2hlY2tpbmcgL3Vzci9iaW4vcHl0aG9uIGlmIHB5dGhvbiBpcyBpbiB0aGUgcmRlcHMsIGluCisgICAgICAgICAgICAgICAgIyBjYXNlIHRoZXJlIGlzIGEgUkRFUEVORFNfcGtnID0gInB5dGhvbiIgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBmb3IgcHkgaW4gWyBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSArICJweXRob24iLCAicHl0aG9uIiBdOgorICAgICAgICAgICAgICAgICAgICBpZiBweSBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzLnBvcCgiL3Vzci9iaW4vcHl0aG9uIixOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5yZW1vdmUocHkpCisgICAgICAgICAgICAgICAgZm9yIHJkZXAgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBGb3IgU2F2aW5nIHRoZSBGSUxFUlBST1ZJREVTLCBSUFJPVklERVMgYW5kIEZJTEVTX0lORk8KKyAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHJkZXAsIGQpCisgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gcmRlcF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIkZJTEVSUFJPVklERVNfIikgb3Iga2V5LnN0YXJ0c3dpdGgoIlJQUk9WSURFU18iKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3Via2V5IGluIHJkZXBfZGF0YVtrZXldLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVyZGVwZW5kcy5wb3Aoc3Via2V5LE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCB0aGUgZmlsZXMgbGlzdCB0byB0aGUgcnByb3ZpZGVzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkgPT0gIkZJTEVTX0lORk8iOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlIGV2YWwoKSB0byBtYWtlIGl0IGFzIGEgZGljdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJrZXkgaW4gZXZhbChyZGVwX2RhdGFba2V5XSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVyZGVwZW5kcy5wb3Aoc3Via2V5LE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEJyZWFrIGlmIGFsbCB0aGUgZmlsZSByZGVwZW5kcyBhcmUgbWV0CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZmlsZXJkZXBlbmRzOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gZmlsZXJkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgY29udGFpbmVkIGluIHBhY2thZ2UgJXMgcmVxdWlyZXMgJXMsIGJ1dCBubyBwcm92aWRlcnMgZm91bmQgaW4gaXRzIFJERVBFTkRTIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZXJkZXBlbmRzW2tleV0scGtnLCBrZXkpCisgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJmaWxlLXJkZXBzIiwgZXJyb3JfbXNnLCBkKQorCisgICAgcmV0dXJuIHNhbmUKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGVwcyhwa2csIHBrZ2Rlc3QsIHNraXAsIGQpOgorICAgIHNhbmUgPSBUcnVlCisKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBwa2cpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICBkZWYgY2hlY2tfdmFsaWRfZGVwcyh2YXIpOgorICAgICAgICBzYW5lID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBydmFyID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIodmFyLCBUcnVlKSBvciAiIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCIlc18lczogJXMiICUgKHZhciwgcGtnLCBlKSkKKyAgICAgICAgZm9yIGRlcCBpbiBydmFyOgorICAgICAgICAgICAgZm9yIHYgaW4gcnZhcltkZXBdOgorICAgICAgICAgICAgICAgIGlmIHYgYW5kIG5vdCB2LnN0YXJ0c3dpdGgoKCc8ICcsICc9ICcsICc+ICcsICc8PSAnLCAnPj0nKSk6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlc18lcyBpcyBpbnZhbGlkOiAlcyAoJXMpICAgb25seSBjb21wYXJpc29ucyA8LCA9LCA+LCA8PSwgYW5kID49IGFyZSBhbGxvd2VkIiAlICh2YXIsIHBrZywgZGVwLCB2KQorICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImRlcC1jbXAiLCBlcnJvcl9tc2csIGQpCisgICAgICAgIHJldHVybiBzYW5lCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSREVQRU5EUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlJFQ09NTUVORFMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JTVUdHRVNUUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlBST1ZJREVTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSUkVQTEFDRVMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JDT05GTElDVFMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisKKyAgICByZXR1cm4gc2FuZQorCitRQVBBVEhURVNUW2V4cGFuZGVkLWRdID0gInBhY2thZ2VfcWFfY2hlY2tfZXhwYW5kZWRfZCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2V4cGFuZGVkX2QocGF0aCxuYW1lLGQsZWxmLG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgdGhlIGV4cGFuZGVkIEQgKCR7RH0pIHZhbHVlIGluIHBrZ18qIGFuZCBGSUxFUworICAgIHZhcmlhYmxlcywgd2FybiB0aGUgdXNlciB0byB1c2UgaXQgY29ycmVjdGx5LgorICAgICIiIgorCisgICAgc2FuZSA9IFRydWUKKyAgICBleHBhbmRlZF9kID0gZC5nZXRWYXIoJ0QnLFRydWUpCisKKyAgICAjIEdldCBwYWNrYWdlcyBmb3IgY3VycmVudCByZWNpcGUgYW5kIGl0ZXJhdGUKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCIgIikKKyAgICBmb3IgcGFrIGluIHBhY2thZ2VzOgorICAgICMgR28gdGhyb3VnaCBhbGwgdmFyaWFibGVzIGFuZCBjaGVjayBpZiBleHBhbmRlZCBEIGlzIGZvdW5kLCB3YXJuIHRoZSB1c2VyIGFjY29yZGluZ2x5CisgICAgICAgIGZvciB2YXIgaW4gJ0ZJTEVTJywncGtnX3ByZWluc3QnLCAncGtnX3Bvc3RpbnN0JywgJ3BrZ19wcmVybScsICdwa2dfcG9zdHJtJzoKKyAgICAgICAgICAgIGJidmFyID0gZC5nZXRWYXIodmFyICsgIl8iICsgcGFrLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIGJidmFyOgorICAgICAgICAgICAgICAgICMgQml0YmFrZSBleHBhbmRzICR7RH0gd2l0aGluIGJidmFyIGR1cmluZyB0aGUgcHJldmlvdXMgc3RlcCwgc28gd2UgY2hlY2sgZm9yIGl0cyBleHBhbmRlZCB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIGV4cGFuZGVkX2QgaW4gYmJ2YXI6CisgICAgICAgICAgICAgICAgICAgIGlmIHZhciA9PSAnRklMRVMnOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbImV4cGFuZGVkLWQiXSA9ICJGSUxFUyBpbiAlcyByZWNpcGUgc2hvdWxkIG5vdCBjb250YWluIHRoZSAke0R9IHZhcmlhYmxlIGFzIGl0IHJlZmVyZW5jZXMgdGhlIGxvY2FsIGJ1aWxkIGRpcmVjdG9yeSBub3QgdGhlIHRhcmdldCBmaWxlc3lzdGVtLCBiZXN0IHNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGUgJHtEfSByZWZlcmVuY2UiICUgcGFrCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5lID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJleHBhbmRlZC1kIl0gPSAiJXMgaW4gJXMgcmVjaXBlIGNvbnRhaW5zICR7RH0sIGl0IHNob3VsZCBiZSByZXBsYWNlZCBieSAkRCBpbnN0ZWFkIiAlICh2YXIsIHBhaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIHJldHVybiBzYW5lCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2VuY29kaW5nKGtleXMsIGVuY29kZSwgZCk6CisgICAgZGVmIGNoZWNrX2VuY29kaW5nKGtleSxlbmMpOgorICAgICAgICBzYW5lID0gVHJ1ZQorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IHVuaWNvZGUodmFsdWUsIGVuYykKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgaGFzIG5vbiAlcyBjaGFyYWN0ZXJzIiAlIChrZXksZW5jKQorICAgICAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbnZhbGlkLWNoYXJzIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICByZXR1cm4gc2FuZQorCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICBzYW5lID0gY2hlY2tfZW5jb2Rpbmcoa2V5LCBlbmNvZGUpCisgICAgICAgIGlmIG5vdCBzYW5lOgorICAgICAgICAgICAgYnJlYWsKKworSE9TVF9VU0VSX1VJRCA6PSAiJHtAb3MuZ2V0dWlkKCl9IgorSE9TVF9VU0VSX0dJRCA6PSAiJHtAb3MuZ2V0Z2lkKCl9IgorCitRQVBBVEhURVNUW2hvc3QtdXNlci1jb250YW1pbmF0ZWRdID0gInBhY2thZ2VfcWFfY2hlY2tfaG9zdF91c2VyIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfaG9zdF91c2VyKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIkNoZWNrIGZvciBwYXRocyBvdXRzaWRlIG9mIC9ob21lIHdoaWNoIGFyZSBvd25lZCBieSB0aGUgdXNlciBydW5uaW5nIGJpdGJha2UuIiIiCisKKyAgICBpZiBub3Qgb3MucGF0aC5sZXhpc3RzKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIGRlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgaG9tZSA9IG9zLnBhdGguam9pbihkZXN0LCAnaG9tZScpCisgICAgaWYgcGF0aCA9PSBob21lIG9yIHBhdGguc3RhcnRzd2l0aChob21lICsgb3Muc2VwKToKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIHN0YXQgPSBvcy5sc3RhdChwYXRoKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGlmIGV4Yy5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByYWlzZQorICAgIGVsc2U6CisgICAgICAgIGNoZWNrX3VpZCA9IGludChkLmdldFZhcignSE9TVF9VU0VSX1VJRCcsIFRydWUpKQorICAgICAgICBpZiBzdGF0LnN0X3VpZCA9PSBjaGVja191aWQ6CisgICAgICAgICAgICBtZXNzYWdlc1siaG9zdC11c2VyLWNvbnRhbWluYXRlZCJdID0gIiVzIGlzIG93bmVkIGJ5IHVpZCAlZCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiBUaGlzIG1heSBiZSBkdWUgdG8gaG9zdCBjb250YW1pbmF0aW9uIiAlIChwYXRoLCBjaGVja191aWQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBjaGVja19naWQgPSBpbnQoZC5nZXRWYXIoJ0hPU1RfVVNFUl9HSUQnLCBUcnVlKSkKKyAgICAgICAgaWYgc3RhdC5zdF9naWQgPT0gY2hlY2tfZ2lkOgorICAgICAgICAgICAgbWVzc2FnZXNbImhvc3QtdXNlci1jb250YW1pbmF0ZWQiXSA9ICIlcyBpcyBvd25lZCBieSBnaWQgJWQsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4gVGhpcyBtYXkgYmUgZHVlIHRvIGhvc3QgY29udGFtaW5hdGlvbiIgJSAocGF0aCwgY2hlY2tfZ2lkKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworIyBUaGUgUEFDS0FHRSBGVU5DIHRvIHNjYW4gZWFjaCBwYWNrYWdlCitweXRob24gZG9fcGFja2FnZV9xYSAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKworICAgIGJiLm5vdGUoIkRPIFBBQ0tBR0UgUUEiKQorCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorCisgICAgIyBDaGVjayBub24gVVRGLTggY2hhcmFjdGVycyBvbiByZWNpcGUncyBtZXRhZGF0YQorICAgIHBhY2thZ2VfcWFfY2hlY2tfZW5jb2RpbmcoWydERVNDUklQVElPTicsICdTVU1NQVJZJywgJ0xJQ0VOU0UnLCAnU0VDVElPTiddLCAndXRmLTgnLCBkKQorCisgICAgbG9nZGlyID0gZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAjIENoZWNrIHRoZSBjb21waWxlIGxvZyBmb3IgaG9zdCBjb250YW1pbmF0aW9uCisgICAgY29tcGlsZWxvZyA9IG9zLnBhdGguam9pbihsb2dkaXIsImxvZy5kb19jb21waWxlIikKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbXBpbGVsb2cpOgorICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnQ1JPU1MgQ09NUElMRSBCYWRuZXNzOicgLWUgJ2lzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24nICVzID4gL2Rldi9udWxsIiAlIGNvbXBpbGVsb2cKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgIG1zZyA9ICIlczogVGhlIGNvbXBpbGUgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuXG4gXAorICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvZyAnJXMnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgJSAocGtnLCBjb21waWxlbG9nKQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImNvbXBpbGUtaG9zdC1wYXRoIiwgbXNnLCBkKQorCisgICAgIyBDaGVjayB0aGUgaW5zdGFsbCBsb2cgZm9yIGhvc3QgY29udGFtaW5hdGlvbgorICAgIGluc3RhbGxsb2cgPSBvcy5wYXRoLmpvaW4obG9nZGlyLCJsb2cuZG9faW5zdGFsbCIpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbnN0YWxsbG9nKToKKyAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLWUgJ0NST1NTIENPTVBJTEUgQmFkbmVzczonIC1lICdpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uJyAlcyA+IC9kZXYvbnVsbCIgJSBpbnN0YWxsbG9nCisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICBtc2cgPSAiJXM6IFRoZSBpbnN0YWxsIGxvZyBpbmRpY2F0ZXMgdGhhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2VyZSB1c2VkLlxuIFwKKyAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb2cgJyVzJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICUgKHBrZywgaW5zdGFsbGxvZykKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbnN0YWxsLWhvc3QtcGF0aCIsIG1zZywgZCkKKworICAgICMgU2NhbiB0aGUgcGFja2FnZXMuLi4KKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBhY2thZ2VzID0gc2V0KChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAnJykuc3BsaXQoKSkKKworICAgIGNwYXRoID0gb2UuY2FjaGVkcGF0aC5DYWNoZWRQYXRoKCkKKyAgICBnbG9iYWwgcGtnZmlsZXMKKyAgICBwa2dmaWxlcyA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnZmlsZXNbcGtnXSA9IFtdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2Fsayhwa2dkZXN0ICsgIi8iICsgcGtnKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHBrZ2ZpbGVzW3BrZ10uYXBwZW5kKHdhbGtyb290ICsgb3Muc2VwICsgZmlsZSkKKworICAgICMgbm8gcGFja2FnZXMgc2hvdWxkIGJlIHNjYW5uZWQKKyAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgIHJldHVybgorCisgICAgdGVzdG1hdHJpeCA9IGQuZ2V0VmFyRmxhZ3MoIlFBUEFUSFRFU1QiKQorICAgIGltcG9ydCByZQorICAgICMgVGhlIHBhY2thZ2UgbmFtZSBtYXRjaGVzIHRoZSBbYS16MC05ListXSsgcmVndWxhciBleHByZXNzaW9uCisgICAgcGtnbmFtZV9wYXR0ZXJuID0gcmUuY29tcGlsZSgiXlthLXowLTkuKy1dKyQiKQorCisgICAgdGFza2RlcGRhdGEgPSBkLmdldFZhcigiQkJfVEFTS0RFUERBVEEiLCBGYWxzZSkKKyAgICB0YXNrZGVwcyA9IHNldCgpCisgICAgZm9yIGRlcCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgdGFza2RlcHMuYWRkKHRhc2tkZXBkYXRhW2RlcF1bMF0pCisKKyAgICBnID0gZ2xvYmFscygpCisgICAgd2Fsa19zYW5lID0gVHJ1ZQorICAgIHJkZXBlbmRzX3NhbmUgPSBUcnVlCisgICAgZGVwc19zYW5lID0gVHJ1ZQorICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICBza2lwID0gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcGFja2FnZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgaWYgc2tpcDoKKyAgICAgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgJXMgc2tpcHBpbmcgUUEgdGVzdHM6ICVzIiAlIChwYWNrYWdlLCBzdHIoc2tpcCkpKQorICAgICAgICB3YXJuY2hlY2tzID0gW10KKyAgICAgICAgZm9yIHcgaW4gKGQuZ2V0VmFyKCJXQVJOX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiB3IGluIHNraXA6CisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgdyBpbiB0ZXN0bWF0cml4IGFuZCB0ZXN0bWF0cml4W3ddIGluIGc6CisgICAgICAgICAgICAgICAgd2FybmNoZWNrcy5hcHBlbmQoZ1t0ZXN0bWF0cml4W3ddXSkKKyAgICAgICAgZXJyb3JjaGVja3MgPSBbXQorICAgICAgICBmb3IgZSBpbiAoZC5nZXRWYXIoIkVSUk9SX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBlIGluIHNraXA6CisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZSBpbiB0ZXN0bWF0cml4IGFuZCB0ZXN0bWF0cml4W2VdIGluIGc6CisgICAgICAgICAgICAgICAgZXJyb3JjaGVja3MuYXBwZW5kKGdbdGVzdG1hdHJpeFtlXV0pCisKKyAgICAgICAgYmIubm90ZSgiQ2hlY2tpbmcgUGFja2FnZTogJXMiICUgcGFja2FnZSkKKyAgICAgICAgIyBDaGVjayBwYWNrYWdlIG5hbWUKKyAgICAgICAgaWYgbm90IHBrZ25hbWVfcGF0dGVybi5tYXRjaChwYWNrYWdlKToKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwa2duYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgIiVzIGRvZXNuJ3QgbWF0Y2ggdGhlIFthLXowLTkuKy1dKyByZWdleFxuIiAlIHBhY2thZ2UsIGQpCisKKyAgICAgICAgcGF0aCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGFja2FnZSkKKyAgICAgICAgaWYgbm90IHBhY2thZ2VfcWFfd2FsayhwYXRoLCB3YXJuY2hlY2tzLCBlcnJvcmNoZWNrcywgc2tpcCwgcGFja2FnZSwgZCk6CisgICAgICAgICAgICB3YWxrX3NhbmUgID0gRmFsc2UKKyAgICAgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfcmRlcGVuZHMocGFja2FnZSwgcGtnZGVzdCwgc2tpcCwgdGFza2RlcHMsIHBhY2thZ2VzLCBkKToKKyAgICAgICAgICAgIHJkZXBlbmRzX3NhbmUgPSBGYWxzZQorICAgICAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19kZXBzKHBhY2thZ2UsIHBrZ2Rlc3QsIHNraXAsIGQpOgorICAgICAgICAgICAgZGVwc19zYW5lID0gRmFsc2UKKworCisgICAgaWYgJ2xpYmRpcicgaW4gZC5nZXRWYXIoIkFMTF9RQSIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHBhY2thZ2VfcWFfY2hlY2tfbGliZGlyKGQpCisKKyAgICBxYV9zYW5lID0gZC5nZXRWYXIoIlFBX1NBTkUiLCBUcnVlKQorICAgIGlmIG5vdCB3YWxrX3NhbmUgb3Igbm90IHJkZXBlbmRzX3NhbmUgb3Igbm90IGRlcHNfc2FuZSBvciBub3QgcWFfc2FuZToKKyAgICAgICAgYmIuZmF0YWwoIlFBIHJ1biBmb3VuZCBmYXRhbCBlcnJvcnMuIFBsZWFzZSBjb25zaWRlciBmaXhpbmcgdGhlbS4iKQorICAgIGJiLm5vdGUoIkRPTkUgd2l0aCBQQUNLQUdFIFFBIikKK30KKworZG9fcGFja2FnZV9xYVtyZGVwdGFza10gPSAiZG9fcGFja2FnZWRhdGEiCithZGR0YXNrIGRvX3BhY2thZ2VfcWEgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZSBiZWZvcmUgZG9fYnVpbGQKKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2VfcWEiCitkb19wYWNrYWdlX3FhW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiIKK2RvX3BhY2thZ2VfcWFbc3N0YXRlLW91dHB1dGRpcnNdID0gIiIKK3B5dGhvbiBkb19wYWNrYWdlX3FhX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV9xYV9zZXRzY2VuZQorCitweXRob24gZG9fcWFfc3RhZ2luZygpIHsKKyAgICBiYi5ub3RlKCJRQSBjaGVja2luZyBzdGFnaW5nIikKKworICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX3N0YWdlZChkLmV4cGFuZCgnJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0xJQkRJUn0nKSwgZCk6CisgICAgICAgIGJiLmZhdGFsKCJRQSBzdGFnaW5nIHdhcyBicm9rZW4gYnkgdGhlIHBhY2thZ2UgYnVpbHQgYWJvdmUiKQorfQorCitweXRob24gZG9fcWFfY29uZmlndXJlKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIGNvbmZpZy5sb2cgZm9yIGNyb3NzIGNvbXBpbGUgaXNzdWVzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBjb25maWdzID0gW10KKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGJiLm5vdGUoIkNoZWNraW5nIGF1dG90b29scyBlbnZpcm9ubWVudCBmb3IgY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24iKQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdvcmtkaXIpOgorICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnQ1JPU1MgQ09NUElMRSBCYWRuZXNzOicgLWUgJ2lzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24nICVzID4gL2Rldi9udWxsIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHJvb3QsImNvbmZpZy5sb2ciKQorICAgICAgICBpZiAiY29uZmlnLmxvZyIgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIiIlRoaXMgYXV0b2NvbmYgbG9nIGluZGljYXRlcyBlcnJvcnMsIGl0IGxvb2tlZCBhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2hpbGUgZGV0ZXJtaW5pbmcgc3lzdGVtIGNhcGFiaWxpdGllcy4KK1JlcnVuIGNvbmZpZ3VyZSB0YXNrIGFmdGVyIGZpeGluZyB0aGlzLiBUaGUgcGF0aCB3YXMgJyVzJyIiIiAlIHJvb3QpCisKKyAgICAgICAgaWYgImNvbmZpZ3VyZS5hYyIgaW4gZmlsZXM6CisgICAgICAgICAgICBjb25maWdzLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwiY29uZmlndXJlLmFjIikpCisgICAgICAgIGlmICJjb25maWd1cmUuaW4iIGluIGZpbGVzOgorICAgICAgICAgICAgY29uZmlncy5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsICJjb25maWd1cmUuaW4iKSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgZ2V0dGV4dCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGNvcnJlY3QKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGNuZiA9IGQuZ2V0VmFyKCdFWFRSQV9PRUNPTkYnLCBUcnVlKSBvciAiIgorICAgIGlmICJnZXR0ZXh0IiBub3QgaW4gZC5nZXRWYXIoJ1AnLCBUcnVlKSBhbmQgImdjYy1ydW50aW1lIiBub3QgaW4gZC5nZXRWYXIoJ1AnLCBUcnVlKSBhbmQgIi0tZGlzYWJsZS1ubHMiIG5vdCBpbiBjbmY6CisgICAgICAgIG1sID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICAgICAgZ3QgPSAiZ2V0dGV4dC1uYXRpdmUiCisgICAgICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgICAgIGd0ID0gIm5hdGl2ZXNkay1nZXR0ZXh0IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3QgPSAidmlydHVhbC8iICsgbWwgKyAiZ2V0dGV4dCIKKyAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpIG9yICIiKQorICAgICAgICBpZiBndCBub3QgaW4gZGVwczoKKyAgICAgICAgICAgIGZvciBjb25maWcgaW4gY29uZmlnczoKKyAgICAgICAgICAgICAgICBnbnUgPSAiZ3JlcCBcIl5bWzpzcGFjZTpdXSpBTV9HTlVfR0VUVEVYVFwiICVzID4vZGV2L251bGwiICUgY29uZmlnCisgICAgICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKGdudSwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiIiJXMgcmVxdWlyZWQgYnV0IG5vdCBpbiBERVBFTkRTIGZvciBmaWxlICVzLgorTWlzc2luZyBpbmhlcml0IGdldHRleHQ/IiIiICUgKGd0LCBjb25maWcpKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBsaWNlbnNlIHZhcmlhYmxlcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfbGljZW5zZSh3b3JrZGlyLCBkKToKKyAgICAgICAgYmIuZmF0YWwoIkxpY2Vuc2luZyBFcnJvcjogTElDX0ZJTEVTX0NIS1NVTSBkb2VzIG5vdCBtYXRjaCwgcGxlYXNlIGZpeCIpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIHVucmVjb2duaXNlZCBjb25maWd1cmUgb3B0aW9ucyAod2l0aCBhIHdoaXRlIGxpc3QpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiYXV0b3Rvb2xzIiwgZCk6CisgICAgICAgIGJiLm5vdGUoIkNoZWNraW5nIGNvbmZpZ3VyZSBvdXRwdXQgZm9yIHVucmVjb2duaXNlZCBvcHRpb25zIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmxhZyA9ICJXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczoiCisgICAgICAgICAgICBsb2cgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0InLCBUcnVlKSwgJ2NvbmZpZy5sb2cnKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydncmVwJywgJy1GJywgZmxhZywgbG9nXSkucmVwbGFjZSgnLCAnLCAnICcpCisgICAgICAgICAgICBvcHRpb25zID0gc2V0KCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBzZXQobGluZS5wYXJ0aXRpb24oZmxhZylbMl0uc3BsaXQoKSkKKyAgICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChkLmdldFZhcigiVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUIiwgVHJ1ZSkuc3BsaXQoKSkKKyAgICAgICAgICAgIG9wdGlvbnMgLT0gd2hpdGVsaXN0CisgICAgICAgICAgICBpZiBvcHRpb25zOgorICAgICAgICAgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSBwbiArICI6IGNvbmZpZ3VyZSB3YXMgcGFzc2VkIHVucmVjb2duaXNlZCBvcHRpb25zOiAiICsgIiAiLmpvaW4ob3B0aW9ucykKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5rbm93bi1jb25maWd1cmUtb3B0aW9uIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIENoZWNrIGludmFsaWQgUEFDS0FHRUNPTkZJRworICAgIHBrZ2NvbmZpZyA9IChkLmdldFZhcigiUEFDS0FHRUNPTkZJRyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgcGtnY29uZmlnOgorICAgICAgICBwa2djb25maWdmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKSBvciB7fQorICAgICAgICBmb3IgcGNvbmZpZyBpbiBwa2djb25maWc6CisgICAgICAgICAgICBpZiBwY29uZmlnIG5vdCBpbiBwa2djb25maWdmbGFnczoKKyAgICAgICAgICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzOiBpbnZhbGlkIFBBQ0tBR0VDT05GSUc6ICVzIiAlIChwbiwgcGNvbmZpZykKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW52YWxpZC1wa2djb25maWciLCBlcnJvcl9tc2csIGQpCit9CisKK3B5dGhvbiBkb19xYV91bnBhY2soKSB7CisgICAgYmIubm90ZSgiQ2hlY2tpbmcgaGFzICR7U30gYmVlbiBjcmVhdGVkIikKKworICAgIHNfZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzX2Rpcik6CisgICAgICAgIGJiLndhcm4oJyVzOiB0aGUgZGlyZWN0b3J5ICVzICglcykgcG9pbnRlZCB0byBieSB0aGUgUyB2YXJpYWJsZSBkb2VzblwndCBleGlzdCAtIHBsZWFzZSBzZXQgUyB3aXRoaW4gdGhlIHJlY2lwZSB0byBwb2ludCB0byB3aGVyZSB0aGUgc291cmNlIGhhcyBiZWVuIHVucGFja2VkIHRvJyAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ1MnLCBGYWxzZSksIHNfZGlyKSkKK30KKworIyBUaGUgU3RhZ2luZyBGdW5jLCB0byBjaGVjayBhbGwgc3RhZ2luZworI2FkZHRhc2sgcWFfc3RhZ2luZyBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290IGJlZm9yZSBkb19idWlsZAorZG9fcG9wdWxhdGVfc3lzcm9vdFtwb3N0ZnVuY3NdICs9ICJkb19xYV9zdGFnaW5nICIKKworIyBDaGVjayBicm9rZW4gY29uZmlnLmxvZyBmaWxlcywgZm9yIHBhY2thZ2VzIHJlcXVpcmluZyBHZXR0ZXh0IHdoaWNoIGRvbid0CisjIGhhdmUgaXQgaW4gREVQRU5EUyBhbmQgZm9yIGNvcnJlY3QgTElDX0ZJTEVTX0NIS1NVTQorI2FkZHRhc2sgcWFfY29uZmlndXJlIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQorZG9fY29uZmlndXJlW3Bvc3RmdW5jc10gKz0gImRvX3FhX2NvbmZpZ3VyZSAiCisKKyMgQ2hlY2sgZG9lcyBTIGV4aXN0LgorZG9fdW5wYWNrW3Bvc3RmdW5jc10gKz0gImRvX3FhX3VucGFjayIKKworcHl0aG9uICgpIHsKKyAgICB0ZXN0cyA9IGQuZ2V0VmFyKCdBTExfUUEnLCBUcnVlKS5zcGxpdCgpCisgICAgaWYgImRlc2t0b3AiIGluIHRlc3RzOgorICAgICAgICBkLmFwcGVuZFZhcigiUEFDS0FHRV9ERVBFTkRTIiwgIiBkZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlIikKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgdmFyaW91cyB2YXJpYWJsZXMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgQ2hlY2tpbmcgJHtGSUxFU0VYVFJBUEFUSFN9CisgICAgZXh0cmFwYXRocyA9IChkLmdldFZhcigiRklMRVNFWFRSQVBBVEhTIiwgVHJ1ZSkgb3IgIiIpCisgICAgaWYgJ19fZGVmYXVsdCcgbm90IGluIGV4dHJhcGF0aHMuc3BsaXQoIjoiKToKKyAgICAgICAgbXNnID0gIkZJTEVTRVhUUkFQQVRIUy12YXJpYWJsZSwgbXVzdCBhbHdheXMgdXNlIF9wcmVwZW5kIChvciBfYXBwZW5kKVxuIgorICAgICAgICBtc2cgKz0gInR5cGUgb2YgYXNzaWdubWVudCwgYW5kIGRvbid0IGZvcmdldCB0aGUgY29sb24uXG4iCisgICAgICAgIG1zZyArPSAiUGxlYXNlIGFzc2lnbiBpdCB3aXRoIHRoZSBmb3JtYXQgb2Y6XG4iCisgICAgICAgIG1zZyArPSAiICBGSUxFU0VYVFJBUEFUSFNfYXBwZW5kIDo9IFwiOiR7VEhJU0RJUn0vWW91cl9GaWxlc19QYXRoXCIgb3JcbiIKKyAgICAgICAgbXNnICs9ICIgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9IFwiJHtUSElTRElSfS9Zb3VyX0ZpbGVzX1BhdGg6XCJcbiIKKyAgICAgICAgbXNnICs9ICJpbiB5b3VyIGJiYXBwZW5kIGZpbGVcblxuIgorICAgICAgICBtc2cgKz0gIllvdXIgaW5jb3JyZWN0IGFzc2lnbm1lbnQgaXM6XG4iCisgICAgICAgIG1zZyArPSAiJXNcbiIgJSBleHRyYXBhdGhzCisgICAgICAgIGJiLndhcm4obXNnKQorCisgICAgaWYgZC5nZXRWYXIoJ2RvX3N0YWdlJywgVHJ1ZSkgaXMgbm90IE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCJMZWdhY3kgc3RhZ2luZyBmb3VuZCBmb3IgJXMgYXMgaXQgaGFzIGEgZG9fc3RhZ2UgZnVuY3Rpb24uIFRoaXMgd2lsbCBuZWVkIGNvbnZlcnNpb24gdG8gYSBkb19pbnN0YWxsIG9yIG9mdGVuIHNpbXBseSByZW1vdmFsIHRvIHdvcmsgd2l0aCBPRS1jb3JlIiAlIGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSkpCisKKyAgICBvdmVycmlkZXMgPSBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkuc3BsaXQoJzonKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBpZiBwbiBpbiBvdmVycmlkZXM6CisgICAgICAgIG1zZyA9ICdSZWNpcGUgJXMgaGFzIFBOIG9mICIlcyIgd2hpY2ggaXMgaW4gT1ZFUlJJREVTLCB0aGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvdXIuJyAlIChkLmdldFZhcigiRklMRSIsIFRydWUpLCBwbikKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBuLW92ZXJyaWRlcyIsIG1zZywgZCkKKworICAgIGlzc3VlcyA9IFtdCisgICAgaWYgKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBmb3IgZGVwIGluIChkLmdldFZhcignUUFERVBFTkRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2VfcWEnLCAnZGVwZW5kcycsICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXApCisgICAgICAgIGZvciB2YXIgaW4gJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSQ09ORkxJQ1RTJywgJ1JQUk9WSURFUycsICdSUkVQTEFDRVMnLCAnRklMRVMnLCAncGtnX3ByZWluc3QnLCAncGtnX3Bvc3RpbnN0JywgJ3BrZ19wcmVybScsICdwa2dfcG9zdHJtJywgJ0FMTE9XX0VNUFRZJzoKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyKHZhciwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGlzc3Vlcy5hcHBlbmQodmFyKQorCisgICAgICAgIGZha2Vyb290X3Rlc3RzID0gZC5nZXRWYXIoJ0ZBS0VST09UX1FBJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBpZiBzZXQodGVzdHMpICYgc2V0KGZha2Vyb290X3Rlc3RzKToKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdmYWtlcm9vdCcsICcxJykKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdkZXBlbmRzJywgJyB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2VfcWEnLCAncmRlcHRhc2snLCAnJykKKyAgICBmb3IgaSBpbiBpc3N1ZXM6CisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwa2d2YXJjaGVjayIsICIlczogVmFyaWFibGUgJXMgaXMgc2V0IGFzIG5vdCBiZWluZyBwYWNrYWdlIHNwZWNpZmljLCBwbGVhc2UgZml4IHRoaXMuIiAlIChkLmdldFZhcigiRklMRSIsIFRydWUpLCBpKSwgZCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtYXJjaC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWI3MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtYXJjaC5iYmNsYXNzCkBAIC0wLDAgKzEsNTkgQEAKKyMKKyMgc2V0IHRoZSBBUkNIIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBrZXJuZWwgY29tcGlsYXRpb24gKGluY2x1ZGluZworIyBtb2R1bGVzKS4gcmV0dXJuIHZhbHVlIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBhcmNoaXRlY3R1cmUgZGlyZWN0b3JpZXMKKyMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgImFyY2giIGRpcmVjdG9yeQorIworCit2YWxpZF9hcmNocyA9ICJhbHBoYSBjcmlzIGlhNjQgXAorICAgICAgICAgICAgICAgaTM4NiB4ODYgXAorICAgICAgICAgICAgICAgbTY4a25vbW11IG02OGsgcHBjIHBvd2VycGMgcG93ZXJwYzY0IHBwYzY0ICBcCisgICAgICAgICAgICAgICBzcGFyYyBzcGFyYzY0IFwKKyAgICAgICAgICAgICAgIGFybSBhYXJjaDY0IFwKKyAgICAgICAgICAgICAgIG0zMnIgbWlwcyBcCisgICAgICAgICAgICAgICBzaCBzaDY0IHVtIGg4MzAwICAgXAorICAgICAgICAgICAgICAgcGFyaXNjIHMzOTAgIHY4NTAgXAorICAgICAgICAgICAgICAgYXZyMzIgYmxhY2tmaW4gXAorICAgICAgICAgICAgICAgbWljcm9ibGF6ZSIKKworZGVmIG1hcF9rZXJuZWxfYXJjaChhLCBkKToKKyAgICBpbXBvcnQgcmUKKworICAgIHZhbGlkX2FyY2hzID0gZC5nZXRWYXIoJ3ZhbGlkX2FyY2hzJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgaWYgICByZS5tYXRjaCgnKGkuODZ8YXRobG9ufHg4Ni42NCkkJywgYSk6ICByZXR1cm4gJ3g4NicKKyAgICBlbGlmIHJlLm1hdGNoKCdhcm1lYiQnLCBhKTogICAgICAgICAgICAgICAgIHJldHVybiAnYXJtJworICAgIGVsaWYgcmUubWF0Y2goJ2FhcmNoNjQkJywgYSk6ICAgICAgICAgICAgICAgcmV0dXJuICdhcm02NCcKKyAgICBlbGlmIHJlLm1hdGNoKCdhYXJjaDY0X2JlJCcsIGEpOiAgICAgICAgICAgIHJldHVybiAnYXJtNjQnCisgICAgZWxpZiByZS5tYXRjaCgnbWlwcyhlbHw2NHw2NGVsKSQnLCBhKTogICAgICByZXR1cm4gJ21pcHMnCisgICAgZWxpZiByZS5tYXRjaCgncChwY3xvd2VycGMpKHw2NCknLCBhKTogICAgICByZXR1cm4gJ3Bvd2VycGMnCisgICAgZWxpZiByZS5tYXRjaCgnc2goM3w0KSQnLCBhKTogICAgICAgICAgICAgICByZXR1cm4gJ3NoJworICAgIGVsaWYgcmUubWF0Y2goJ2JmaW4nLCBhKTogICAgICAgICAgICAgICAgICAgcmV0dXJuICdibGFja2ZpbicKKyAgICBlbGlmIHJlLm1hdGNoKCdtaWNyb2JsYXplZVtibF0nLCBhKTogICAgICAgIHJldHVybiAnbWljcm9ibGF6ZScKKyAgICBlbGlmIGEgaW4gdmFsaWRfYXJjaHM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhCisgICAgZWxzZToKKyAgICAgICAgYmIuZXJyb3IoImNhbm5vdCBtYXAgJyVzJyB0byBhIGxpbnV4IGtlcm5lbCBhcmNoaXRlY3R1cmUiICUgYSkKKworZXhwb3J0IEFSQ0ggPSAiJHtAbWFwX2tlcm5lbF9hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKX0iCisKK2RlZiBtYXBfdWJvb3RfYXJjaChhLCBkKToKKyAgICBpbXBvcnQgcmUKKworICAgIGlmICAgcmUubWF0Y2goJ3AocGN8b3dlcnBjKSh8NjQpJywgYSk6IHJldHVybiAncHBjJworICAgIGVsaWYgcmUubWF0Y2goJ2kuODYkJywgYSk6IHJldHVybiAneDg2JworICAgIHJldHVybiBhCisKK2V4cG9ydCBVQk9PVF9BUkNIID0gIiR7QG1hcF91Ym9vdF9hcmNoKGQuZ2V0VmFyKCdBUkNIJywgVHJ1ZSksIGQpfSIKKworIyBTZXQgVEFSR0VUXz8/X0tFUk5FTF9BUkNIIGluIHRoZSBtYWNoaW5lIC5jb25mIHRvIHNldCBhcmNoaXRlY3R1cmUKKyMgc3BlY2lmaWMgb3B0aW9ucyBuZWNlc3NhcnkgZm9yIGJ1aWxkaW5nIHRoZSBrZXJuZWwgYW5kIG1vZHVsZXMuCitUQVJHRVRfQ0NfS0VSTkVMX0FSQ0ggPz0gIiIKK0hPU1RfQ0NfS0VSTkVMX0FSQ0ggPz0gIiR7VEFSR0VUX0NDX0tFUk5FTF9BUkNIfSIKK1RBUkdFVF9MRF9LRVJORUxfQVJDSCA/PSAiIgorSE9TVF9MRF9LRVJORUxfQVJDSCA/PSAiJHtUQVJHRVRfTERfS0VSTkVMX0FSQ0h9IgorVEFSR0VUX0FSX0tFUk5FTF9BUkNIID89ICIiCitIT1NUX0FSX0tFUk5FTF9BUkNIID89ICIke1RBUkdFVF9BUl9LRVJORUxfQVJDSH0iCisKK0tFUk5FTF9DQyA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdjYyAke0hPU1RfQ0NfS0VSTkVMX0FSQ0h9IC1mdXNlLWxkPWJmZCIKK0tFUk5FTF9MRCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWxkLmJmZCAke0hPU1RfTERfS0VSTkVMX0FSQ0h9IgorS0VSTkVMX0FSID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9YXIgJHtIT1NUX0FSX0tFUk5FTF9BUkNIfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTU2YTU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwyMzQgQEAKK2luaGVyaXQga2VybmVsLXVib290CisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAga2VybmVsdHlwZSA9IGQuZ2V0VmFyKCdLRVJORUxfSU1BR0VUWVBFJywgVHJ1ZSkKKyAgICBpZiBrZXJuZWx0eXBlID09ICdmaXRJbWFnZSc6CisgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcigiREVQRU5EUyIsIFRydWUpCisgICAgICAgIGRlcGVuZHMgPSAiJXMgdS1ib290LW1raW1hZ2UtbmF0aXZlIGR0Yy1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICBkLnNldFZhcigiREVQRU5EUyIsIGRlcGVuZHMpCisKKwkjIE92ZXJyaWRlIEtFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UgdmFyaWFibGUsIHdoaWNoIGlzIGludGVybmFsCisJIyB0byBrZXJuZWwuYmJjbGFzcyAuIFdlIGhhdmUgdG8gb3ZlcnJpZGUgaXQsIHNpbmNlIHdlIHBhY2sgekltYWdlCisJIyAoYXQgbGVhc3QgZm9yIG5vdykgaW50byB0aGUgZml0SW1hZ2UgLgorICAgICAgICBkLnNldFZhcigiS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSIsICJ6SW1hZ2UiKQorCisgICAgICAgIGltYWdlID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19JTUFHRScsIFRydWUpCisgICAgICAgIGlmIGltYWdlOgorICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19hc3NlbWJsZV9maXRpbWFnZScsICdkZXBlbmRzJywgJyAke0lOSVRSQU1GU19JTUFHRX06ZG9fcm9vdGZzJykKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMgaGVhZGVyCisjCitmaXRpbWFnZV9lbWl0X2ZpdF9oZWFkZXIoKSB7CisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisvZHRzLXYxLzsKKworLyB7CisgICAgICAgIGRlc2NyaXB0aW9uID0gIlUtQm9vdCBmaXRJbWFnZSBmb3IgJHtESVNUUk9fTkFNRX0vJHtQVn0vJHtNQUNISU5FfSI7CisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworRU9GCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2Ugc2VjdGlvbiBiaXRzCisjCisjICQxIC4uLiBTZWN0aW9uIGJpdCB0eXBlOiBpbWFnZXN0YXJ0IC0gaW1hZ2Ugc2VjdGlvbiBzdGFydAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZnN0YXJ0ICAtIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBzdGFydAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGVuZCAgICAtIHNlY3Rpb24gZW5kCisjICAgICAgICAgICAgICAgICAgICAgICAgICBmaXRlbmQgICAgIC0gZml0aW1hZ2UgZW5kCisjCitmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQoKSB7CisJY2FzZSAkMSBpbgorCWltYWdlc3RhcnQpCisJCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworCisgICAgICAgIGltYWdlcyB7CitFT0YKKwk7OworCWNvbmZzdGFydCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisKKyAgICAgICAgY29uZmlndXJhdGlvbnMgeworRU9GCisJOzsKKwlzZWN0ZW5kKQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKwl9OworRU9GCisJOzsKKwlmaXRlbmQpCisJCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworfTsKK0VPRgorCTs7CisJZXNhYworfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIElUUyBrZXJuZWwgc2VjdGlvbgorIworIyAkMSAuLi4gSW1hZ2UgY291bnRlcgorIyAkMiAuLi4gUGF0aCB0byBrZXJuZWwgaW1hZ2UKKyMgJDMgLi4uIENvbXByZXNzaW9uIHR5cGUKK2ZpdGltYWdlX2VtaXRfc2VjdGlvbl9rZXJuZWwoKSB7CisKKwlrZXJuZWxfY3N1bT0ic2hhMSIKKworCUVOVFJZUE9JTlQ9JHtVQk9PVF9FTlRSWVBPSU5UfQorCWlmIHRlc3QgLW4gIiR7VUJPT1RfRU5UUllTWU1CT0x9IjsgdGhlbgorCQlFTlRSWVBPSU5UPWAke0hPU1RfUFJFRklYfW5tICR7U30vdm1saW51eCB8IFwKKwkJCWF3ayAnJDM9PSIke1VCT09UX0VOVFJZU1lNQk9MfSIge3ByaW50ICQxfSdgCisJZmkKKworCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworICAgICAgICAgICAgICAgIGtlcm5lbEAkezF9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIkxpbnV4IGtlcm5lbCI7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gL2luY2Jpbi8oIiR7Mn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAia2VybmVsIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2ggPSAiJHtVQk9PVF9BUkNIfSI7CisgICAgICAgICAgICAgICAgICAgICAgICBvcyA9ICJsaW51eCI7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiA9ICIkezN9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgPSA8JHtVQk9PVF9MT0FEQUREUkVTU30+OworICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgPSA8JHtFTlRSWVBPSU5UfT47CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQDEgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvID0gIiR7a2VybmVsX2NzdW19IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKK0VPRgorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIElUUyBEVEIgc2VjdGlvbgorIworIyAkMSAuLi4gSW1hZ2UgY291bnRlcgorIyAkMiAuLi4gUGF0aCB0byBEVEIgaW1hZ2UKK2ZpdGltYWdlX2VtaXRfc2VjdGlvbl9kdGIoKSB7CisKKwlkdGJfY3N1bT0ic2hhMSIKKworCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworICAgICAgICAgICAgICAgIGZkdEAkezF9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIkZsYXR0ZW5lZCBEZXZpY2UgVHJlZSBibG9iIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAvaW5jYmluLygiJHsyfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJmbGF0X2R0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2ggPSAiJHtVQk9PVF9BUkNIfSI7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiA9ICJub25lIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtkdGJfY3N1bX0iOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworRU9GCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIGNvbmZpZ3VyYXRpb24gc2VjdGlvbgorIworIyAkMSAuLi4gTGludXgga2VybmVsIElECisjICQyIC4uLiBEVEIgaW1hZ2UgSUQKK2ZpdGltYWdlX2VtaXRfc2VjdGlvbl9jb25maWcoKSB7CisKKwljb25mX2NzdW09InNoYTEiCisKKwkjIFRlc3QgaWYgd2UgaGF2ZSBhbnkgRFRCcyBhdCBhbGwKKwlpZiBbIC16ICIkezJ9IiBdIDsgdGhlbgorCQljb25mX2Rlc2M9IkJvb3QgTGludXgga2VybmVsIgorCQlmZHRfbGluZT0iIgorCWVsc2UKKwkJY29uZl9kZXNjPSJCb290IExpbnV4IGtlcm5lbCB3aXRoIEZEVCBibG9iIgorCQlmZHRfbGluZT0iZmR0ID0gXCJmZHRAJHsyfVwiOyIKKwlmaQorCWtlcm5lbF9saW5lPSJrZXJuZWwgPSBcImtlcm5lbEAkezF9XCI7IgorCisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisgICAgICAgICAgICAgICAgZGVmYXVsdCA9ICJjb25mQDEiOworICAgICAgICAgICAgICAgIGNvbmZAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICIke2NvbmZfZGVzY30iOworCQkJJHtrZXJuZWxfbGluZX0KKwkJCSR7ZmR0X2xpbmV9CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQDEgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvID0gIiR7Y29uZl9jc3VtfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CitFT0YKK30KKworZG9fYXNzZW1ibGVfZml0aW1hZ2UoKSB7CisJaWYgdGVzdCAieCR7S0VSTkVMX0lNQUdFVFlQRX0iID0gInhmaXRJbWFnZSIgOyB0aGVuCisJCWtlcm5lbGNvdW50PTEKKwkJZHRiY291bnQ9IiIKKwkJcm0gLWYgZml0LWltYWdlLml0cworCisJCWZpdGltYWdlX2VtaXRfZml0X2hlYWRlcgorCisJCSMKKwkJIyBTdGVwIDE6IFByZXBhcmUgYSBrZXJuZWwgaW1hZ2Ugc2VjdGlvbi4KKwkJIworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgaW1hZ2VzdGFydAorCisJCXVib290X3ByZXBfa2ltYWdlCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9rZXJuZWwgIiR7a2VybmVsY291bnR9IiBsaW51eC5iaW4gIiR7bGludXhfY29tcH0iCisKKwkJIworCQkjIFN0ZXAgMjogUHJlcGFyZSBhIERUQiBpbWFnZSBzZWN0aW9uCisJCSMKKwkJaWYgdGVzdCAtbiAiJHtLRVJORUxfREVWSUNFVFJFRX0iOyB0aGVuCisJCQlkdGJjb3VudD0xCisJCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJCWlmIGVjaG8gJHtEVEJ9IHwgZ3JlcCAtcSAnL2R0cy8nOyB0aGVuCisJCQkJCWJid2FybiAiJHtEVEJ9IGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIHRoZSBkdHMgZmlsZSwgYnV0IG9ubHkgdGhlIGR0YiBuYW1lIHNob3VsZCBiZSB1c2VkLiIKKwkJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQkJZmkKKwkJCQlEVEJfUEFUSD0iYXJjaC8ke0FSQ0h9L2Jvb3QvZHRzLyR7RFRCfSIKKwkJCQlpZiBbICEgLWUgIiR7RFRCX1BBVEh9IiBdOyB0aGVuCisJCQkJCURUQl9QQVRIPSJhcmNoLyR7QVJDSH0vYm9vdC8ke0RUQn0iCisJCQkJZmkKKworCQkJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9kdGIgJHtkdGJjb3VudH0gJHtEVEJfUEFUSH0KKwkJCQlkdGJjb3VudD1gZXhwciAke2R0YmNvdW50fSArIDFgCisJCQlkb25lCisJCWZpCisKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IHNlY3RlbmQKKworCQkjIEZvcmNlIHRoZSBmaXJzdCBLZXJuZWwgYW5kIERUQiBpbiB0aGUgZGVmYXVsdCBjb25maWcKKwkJa2VybmVsY291bnQ9MQorCQlkdGJjb3VudD0xCisKKwkJIworCQkjIFN0ZXAgMzogUHJlcGFyZSBhIGNvbmZpZ3VyYXRpb25zIHNlY3Rpb24KKwkJIworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgY29uZnN0YXJ0CisKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2NvbmZpZyAke2tlcm5lbGNvdW50fSAke2R0YmNvdW50fQorCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBzZWN0ZW5kCisKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IGZpdGVuZAorCisJCSMKKwkJIyBTdGVwIDQ6IEFzc2VtYmxlIHRoZSBpbWFnZQorCQkjCisJCXVib290LW1raW1hZ2UgLWYgZml0LWltYWdlLml0cyBhcmNoLyR7QVJDSH0vYm9vdC9maXRJbWFnZQorCWZpCit9CisKK2FkZHRhc2sgYXNzZW1ibGVfZml0aW1hZ2UgYmVmb3JlIGRvX2luc3RhbGwgYWZ0ZXIgZG9fY29tcGlsZQorCitrZXJuZWxfZG9fZGVwbG95X2FwcGVuZCgpIHsKKwkjIFVwZGF0ZSBkZXBsb3kgZGlyZWN0b3J5CisJaWYgdGVzdCAieCR7S0VSTkVMX0lNQUdFVFlQRX0iID0gInhmaXRJbWFnZSIgOyB0aGVuCisJCWNkICR7Qn0KKwkJZWNobyAiQ29weWluZyBmaXQtaW1hZ2UuaXRzIHNvdXJjZSBmaWxlLi4uIgorCQlpdHNfYmFzZV9uYW1lPSIke0tFUk5FTF9JTUFHRVRZUEV9LWl0cy0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorCQlpdHNfc3ltbGlua19uYW1lPSR7S0VSTkVMX0lNQUdFVFlQRX0taXRzLSR7TUFDSElORX0KKwkJaW5zdGFsbCAtbSAwNjQ0IGZpdC1pbWFnZS5pdHMgJHtERVBMT1lESVJ9LyR7aXRzX2Jhc2VfbmFtZX0uaXRzCisJCWxpbnV4X2Jpbl9iYXNlX25hbWU9IiR7S0VSTkVMX0lNQUdFVFlQRX0tbGludXguYmluLSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisJCWxpbnV4X2Jpbl9zeW1saW5rX25hbWU9JHtLRVJORUxfSU1BR0VUWVBFfS1saW51eC5iaW4tJHtNQUNISU5FfQorCQlpbnN0YWxsIC1tIDA2NDQgbGludXguYmluICR7REVQTE9ZRElSfS8ke2xpbnV4X2Jpbl9iYXNlX25hbWV9LmJpbgorCisJCWNkICR7REVQTE9ZRElSfQorCQlsbiAtc2YgJHtpdHNfYmFzZV9uYW1lfS5pdHMgJHtpdHNfc3ltbGlua19uYW1lfS5pdHMKKwkJbG4gLXNmICR7bGludXhfYmluX2Jhc2VfbmFtZX0uYmluICR7bGludXhfYmluX3N5bWxpbmtfbmFtZX0uYmluCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1ncnViLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZ3J1Yi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2Y0ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtZ3J1Yi5iYmNsYXNzCkBAIC0wLDAgKzEsOTEgQEAKKyMKKyMgV2hpbGUgaW5zdGFsbGluZyBhIHJwbSB0byB1cGRhdGUga2VybmVsIG9uIGEgZGVwbG95ZWQgdGFyZ2V0LCBpdCB3aWxsIHVwZGF0ZQorIyB0aGUgYm9vdCBhcmVhIGFuZCB0aGUgYm9vdCBtZW51IHdpdGggdGhlIGtlcm5lbCBhcyB0aGUgcHJpb3JpdHkgYnV0IGFsbG93CisjIHlvdSB0byBmYWxsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGtlcm5lbCBhcyB3ZWxsLgorIworIyAtIEluIGtlcm5lbC1pbWFnZSdzIHByZWluc3RhbGwgc2NyaXB0bGV0LCBpdCBiYWNrcyB1cCBvcmlnaW5hbCBrZXJuZWwgdG8gYXZvaWQKKyMgICBwcm9iYWJsZSBjb25mbGljdGlvbiB3aXRoIHRoZSBuZXcgb25lLgorIworIyAtIEluIGtlcm5lbC1pbWFnZSdzIHBvc3RpbnN0YWxsIHNjcmlwdGxldCwgaXQgbW9kaWZpZXMgZ3J1YidzIGNvbmZpZyBmaWxlIHRvCisjICAgdXBkYXRlcyB0aGUgbmV3IGtlcm5lbCBhcyB0aGUgYm9vdCBwcmlvcml0eS4KKyMKKworcGtnX3ByZWluc3Rfa2VybmVsLWltYWdlX2FwcGVuZCAoKSB7CisJIyBQYXJzaW5nIGNvbmZsaWN0aW9uCisJWyAtZiAiJEQvYm9vdC9ncnViL21lbnUubGlzdCIgXSAmJiBncnViY2ZnPSIkRC9ib290L2dydWIvbWVudS5saXN0IgorCVsgLWYgIiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIgXSAmJiBncnViY2ZnPSIkRC9ib290L2dydWIvZ3J1Yi5jZmciCisJaWYgWyAtbiAiJGdydWJjZmciIF07IHRoZW4KKwkJIyBEZXJlZmVyZW5jZSBzeW1saW5rIHRvIGF2b2lkIGNvbmZsaWN0aW9uIHdpdGggbmV3IGtlcm5lbCBuYW1lLgorCQlpZiBncmVwIC1xICIvJHtLRVJORUxfSU1BR0VUWVBFfSBcK3Jvb3Q9IiAkZ3J1YmNmZzsgdGhlbgorCQkJaWYgWyAtTCAiJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9IiBdOyB0aGVuCisJCQkJa2ltYWdlPWByZWFscGF0aCAkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0gMj4vZGV2L251bGxgCisJCQkJaWYgWyAtZiAiJEQka2ltYWdlIiBdOyB0aGVuCisJCQkJCXNlZCAtaSAiczoke0tFUk5FTF9JTUFHRVRZUEV9IFwrcm9vdD06JHtraW1hZ2UjIyovfSByb290PToiICRncnViY2ZnCisJCQkJZmkKKwkJCWZpCisJCWZpCisKKwkJIyBSZW5hbWUgb2xkIGtlcm5lbCBpZiBpdCBjb25mbGljdHMgd2l0aCBuZXcga2VybmVsIG5hbWUuCisJCWlmIGdyZXAgLXEgIi8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IFwrcm9vdD0iICRncnViY2ZnOyB0aGVuCisJCQlpZiBbIC1mICIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0iIF07IHRoZW4KKwkJCQl0aW1lc3RhbXA9YGRhdGUgKyVzYAorCQkJCWtpbWFnZT0iJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059LSR0aW1lc3RhbXAtYmFjayIKKwkJCQlzZWQgLWkgInM6JHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSBcK3Jvb3Q9OiR7a2ltYWdlIyMqL30gcm9vdD06IiAkZ3J1YmNmZworCQkJCW12ICIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0iICIka2ltYWdlIgorCQkJZmkKKwkJZmkKKwlmaQorfQorCitwa2dfcG9zdGluc3Rfa2VybmVsLWltYWdlX3ByZXBlbmQgKCkgeworCWdldF9uZXdfZ3J1Yl9jZmcoKSB7CisJCWdydWJjZmc9IiQxIgorCQlvbGRfaW1hZ2U9IiQyIgorCQl0aXRsZT0iVXBkYXRlICR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0tJHtQVn0iCisJCWlmIFsgIiR7Z3J1YmNmZyMjKi99IiA9ICJncnViLmNmZyIgXTsgdGhlbgorCQkJcm9vdGZzPWBncmVwICIgKmxpbnV4IFwrW14gXVwrIFwrcm9vdD0iICRncnViY2ZnIC1tIDEgfCBcCisJCQkJIHNlZCAicyMke29sZF9pbWFnZX0jJHtvbGRfaW1hZ2UlLyp9LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0jImAKKworCQkJZWNobyAibWVudWVudHJ5IFwiJHRpdGxlXCIgeyIKKwkJCWVjaG8gIiAgICBzZXQgcm9vdD0oaGQwLDEpIgorCQkJZWNobyAiJHJvb3RmcyIKKwkJCWVjaG8gIn0iCisJCWVsaWYgWyAiJHtncnViY2ZnIyMqL30iID0gIm1lbnUubGlzdCIgXTsgdGhlbgorCQkJcm9vdGZzPWBncmVwICJrZXJuZWwgXCtbXiBdXCsgXCtyb290PSIgJGdydWJjZmcgLW0gMSB8IFwKKwkJCQkgc2VkICJzIyR7b2xkX2ltYWdlfSMke29sZF9pbWFnZSUvKn0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSMiYAorCisJCQllY2hvICJkZWZhdWx0IDAiCisJCQllY2hvICJ0aW1lb3V0IDMwIgorCQkJZWNobyAidGl0bGUgJHRpdGxlIgorCQkJZWNobyAicm9vdCAgKGhkMCwwKSIKKwkJCWVjaG8gIiRyb290ZnMiCisJCWZpCisJfQorCisJZ2V0X29sZF9ncnViX2NmZygpIHsKKwkJZ3J1YmNmZz0iJDEiCisJCWlmIFsgIiR7Z3J1YmNmZyMjKi99IiA9ICJncnViLmNmZyIgXTsgdGhlbgorCQkJY2F0ICIkZ3J1YmNmZyIKKwkJZWxpZiBbICIke2dydWJjZmcjIyovfSIgPSAibWVudS5saXN0IiBdOyB0aGVuCisJCQlzZWQgLWUgJy9eZGVmYXVsdC9kJyAtZSAnL150aW1lb3V0L2QnICIkZ3J1YmNmZyIKKwkJZmkKKwl9CisKKwlpZiBbIC1mICIkRC9ib290L2dydWIvZ3J1Yi5jZmciIF07IHRoZW4KKwkJZ3J1YmNmZz0iJEQvYm9vdC9ncnViL2dydWIuY2ZnIgorCQlvbGRfaW1hZ2U9YGdyZXAgJyAqbGludXggXCtbXiBdXCsgXCtyb290PScgLW0gMSAiJGdydWJjZmciIHwgYXdrICd7cHJpbnQgJDJ9J2AKKwllbGlmIFsgLWYgIiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiIF07IHRoZW4KKwkJZ3J1YmNmZz0iJEQvYm9vdC9ncnViL21lbnUubGlzdCIKKwkJb2xkX2ltYWdlPWBncmVwICdea2VybmVsIFwrW14gXVwrIFwrcm9vdD0nIC1tIDEgIiRncnViY2ZnIiB8IGF3ayAne3ByaW50ICQyfSdgCisJZmkKKworCSMgRG9uJ3QgdXBkYXRlIGdydWJjZmcgYXQgZmlyc3QgaW5zdGFsbCB3aGlsZSBvbGQgYnpJbWFnZSBkb2Vzbid0IGV4aXN0LgorCWlmIFsgLWYgIiREL2Jvb3QvJHtvbGRfaW1hZ2UjIyovfSIgXTsgdGhlbgorCQlncnViY2ZndG1wPSIkZ3J1YmNmZy50bXAiCisJCWdldF9uZXdfZ3J1Yl9jZmcgIiRncnViY2ZnIiAiJG9sZF9pbWFnZSIgID4gJGdydWJjZmd0bXAKKwkJZ2V0X29sZF9ncnViX2NmZyAiJGdydWJjZmciID4+ICRncnViY2ZndG1wCisJCW12ICRncnViY2ZndG1wICRncnViY2ZnCisJCWVjaG8gIkNhdXRpb24hIFVwZGF0ZSBrZXJuZWwgbWF5IGFmZmVjdCBrZXJuZWwtbW9kdWxlISIKKwlmaQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtbW9kdWxlLXNwbGl0LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtbW9kdWxlLXNwbGl0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhNzBlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcwpAQCAtMCwwICsxLDIwMyBAQAorcGtnX3Bvc3RpbnN0X21vZHVsZXMgKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwlkZXBtb2QgLWEgJHtLRVJORUxfVkVSU0lPTn0KK2Vsc2UKKwkjIGltYWdlLmJiY2xhc3Mgd2lsbCBjYWxsIGRlcG1vZHdyYXBwZXIgYWZ0ZXIgZXZlcnl0aGluZyBpcyBpbnN0YWxsZWQsCisJIyBubyBuZWVkIHRvIGRvIGl0IGhlcmUgYXMgd2VsbAorCToKK2ZpCit9CisKK3BrZ19wb3N0cm1fbW9kdWxlcyAoKSB7CitpZiBbIC16ICIkRCIgXTsgdGhlbgorCWRlcG1vZCAtYSAke0tFUk5FTF9WRVJTSU9OfQorZWxzZQorCWRlcG1vZHdyYXBwZXIgLWEgLWIgJEQgJHtLRVJORUxfVkVSU0lPTn0KK2ZpCit9CisKK2F1dG9sb2FkX3Bvc3RpbnN0X2ZyYWdtZW50KCkgeworaWYgWyB4IiREIiA9ICJ4IiBdOyB0aGVuCisJbW9kcHJvYmUgJXMgfHwgdHJ1ZQorZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC8gJHtEfSR7c3lzY29uZmRpcn0vbW9kcHJvYmUuZC8KK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJzcGxpdF9rZXJuZWxfbW9kdWxlX3BhY2thZ2VzICIKKworS0VSTkVMX01PRFVMRVNfTUVUQV9QQUNLQUdFID89ICJrZXJuZWwtbW9kdWxlcyIKKworcHl0aG9uIHNwbGl0X2tlcm5lbF9tb2R1bGVfcGFja2FnZXMgKCkgeworICAgIGltcG9ydCByZQorCisgICAgbW9kaW5mb2V4cCA9IHJlLmNvbXBpbGUoIihbXj1dKyk9KC4qKSIpCisgICAga2VydmVycmV4cCA9IHJlLmNvbXBpbGUoJ14oLiotaGguKilbXC5cK10uKiQnKQorICAgIGRlcG1vZHBhdDAgPSByZS5jb21waWxlKCJeKC4qXC5rP28pOi4uKiQiKQorICAgIGRlcG1vZHBhdDEgPSByZS5jb21waWxlKCJeKC4qXC5rP28pOlxzKiguKlwuaz9vKVxzKiQiKQorICAgIGRlcG1vZHBhdDIgPSByZS5jb21waWxlKCJeKC4qXC5rP28pOlxzKiguKlwuaz9vKVxzKlxcXCQiKQorICAgIGRlcG1vZHBhdDMgPSByZS5jb21waWxlKCJeXHQoLipcLms/bylccypcXFwkIikKKyAgICBkZXBtb2RwYXQ0ID0gcmUuY29tcGlsZSgiXlx0KC4qXC5rP28pXHMqJCIpCisKKyAgICBkZWYgZXh0cmFjdF9tb2RpbmZvKGZpbGUpOgorICAgICAgICBpbXBvcnQgdGVtcGZpbGUsIHN1YnByb2Nlc3MKKyAgICAgICAgdGVtcGZpbGUudGVtcGRpciA9IGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSkKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgdG1wZmlsZSA9IHRmWzFdCisgICAgICAgIGNtZCA9ICIlc29iamNvcHkgLWogLm1vZGluZm8gLU8gYmluYXJ5ICVzICVzIiAlIChkLmdldFZhcigiSE9TVF9QUkVGSVgiLCBUcnVlKSBvciAiIiwgZmlsZSwgdG1wZmlsZSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZiA9IG9wZW4odG1wZmlsZSkKKyAgICAgICAgbCA9IGYucmVhZCgpLnNwbGl0KCJcMDAwIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLmNsb3NlKHRmWzBdKQorICAgICAgICBvcy51bmxpbmsodG1wZmlsZSkKKyAgICAgICAgdmFscyA9IHt9CisgICAgICAgIGZvciBpIGluIGw6CisgICAgICAgICAgICBtID0gbW9kaW5mb2V4cC5tYXRjaChpKQorICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHZhbHNbbS5ncm91cCgxKV0gPSBtLmdyb3VwKDIpCisgICAgICAgIHJldHVybiB2YWxzCisKKyAgICBkZWYgcGFyc2VfZGVwbW9kKCk6CisKKyAgICAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICAgICBrZXJuZWx2ZXIgPSBkLmdldFZhcignS0VSTkVMX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBrZXJuZWx2ZXJfc3RyaXBwZWQgPSBrZXJuZWx2ZXIKKyAgICAgICAgbSA9IGtlcnZlcnJleHAubWF0Y2goa2VybmVsdmVyKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAga2VybmVsdmVyX3N0cmlwcGVkID0gbS5ncm91cCgxKQorICAgICAgICBzdGFnaW5nX2tlcm5lbF9kaXIgPSBkLmdldFZhcigiU1RBR0lOR19LRVJORUxfQlVJTERESVIiLCBUcnVlKQorICAgICAgICBzeXN0ZW1fbWFwX2ZpbGUgPSAiJXMvYm9vdC9TeXN0ZW0ubWFwLSVzIiAlIChkdmFyLCBrZXJuZWx2ZXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzeXN0ZW1fbWFwX2ZpbGUpOgorICAgICAgICAgICAgc3lzdGVtX21hcF9maWxlID0gIiVzL1N5c3RlbS5tYXAtJXMiICUgKHN0YWdpbmdfa2VybmVsX2Rpciwga2VybmVsdmVyKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN5c3RlbV9tYXBfZmlsZSk6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlN5c3RlbS5tYXAtJXMgZG9lcyBub3QgZXhpc3QgaW4gJyVzL2Jvb3QnIG5vciBTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiAnJXMnIiAlIChrZXJuZWx2ZXIsIGR2YXIsIHN0YWdpbmdfa2VybmVsX2RpcikpCisKKyAgICAgICAgY21kID0gImRlcG1vZCAtbiAtYSAtYiAlcyAtRiAlcyAlcyIgJSAoZHZhciwgc3lzdGVtX21hcF9maWxlLCBrZXJuZWx2ZXJfc3RyaXBwZWQpCisgICAgICAgIGYgPSBvcy5wb3BlbihjbWQsICdyJykKKworICAgICAgICBkZXBzID0ge30KKyAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgaWYgbm90IGRlcG1vZHBhdDAubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBtMSA9IGRlcG1vZHBhdDEubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG0xOgorICAgICAgICAgICAgICAgIGRlcHNbbTEuZ3JvdXAoMSldID0gbTEuZ3JvdXAoMikuc3BsaXQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtMiA9IGRlcG1vZHBhdDIubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtMjoKKyAgICAgICAgICAgICAgICAgICAgZGVwc1ttMi5ncm91cCgxKV0gPSBtMi5ncm91cCgyKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgbTMgPSBkZXBtb2RwYXQzLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIG0zOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwc1ttMi5ncm91cCgxKV0uZXh0ZW5kKG0zLmdyb3VwKDEpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBtMyA9IGRlcG1vZHBhdDMubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgbTQgPSBkZXBtb2RwYXQ0Lm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGRlcHNbbTIuZ3JvdXAoMSldLmV4dGVuZChtNC5ncm91cCgxKS5zcGxpdCgpKQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGRlcHMKKworICAgIGRlZiBnZXRfZGVwZW5kZW5jaWVzKGZpbGUsIHBhdHRlcm4sIGZvcm1hdCk6CisgICAgICAgICMgZmlsZSBubyBsb25nZXIgaW5jbHVkZXMgUEtHRAorICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkgb3IgJycsICcnLCAxKQorICAgICAgICAjIGluc3RlYWQgaXMgcHJlZml4ZWQgd2l0aCAvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0KKyAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiL2xpYi9tb2R1bGVzLyVzLyIgJSBkLmdldFZhcignS0VSTkVMX1ZFUlNJT04nLCBUcnVlKSBvciAnJywgJycsIDEpCisKKyAgICAgICAgaWYgZmlsZSBpbiBtb2R1bGVfZGVwczoKKyAgICAgICAgICAgIGRlcGVuZGVuY2llcyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiBtb2R1bGVfZGVwc1tmaWxlXToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgb3MucGF0aC5iYXNlbmFtZShpKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBvbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeV9wa2cgPSBmb3JtYXQgJSBvbgorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoZGVwZW5kZW5jeV9wa2cpCisgICAgICAgICAgICByZXR1cm4gZGVwZW5kZW5jaWVzCisgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIGZyb2JfbWV0YWRhdGEoZmlsZSwgcGtnLCBwYXR0ZXJuLCBmb3JtYXQsIGJhc2VuYW1lKToKKyAgICAgICAgdmFscyA9IGV4dHJhY3RfbW9kaW5mbyhmaWxlKQorCisgICAgICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICAgICAgIyBJZiBhdXRvbG9hZGluZyBpcyByZXF1ZXN0ZWQsIG91dHB1dCAvZXRjL21vZHVsZXMtbG9hZC5kLzxuYW1lPi5jb25mIGFuZCBhcHBlbmQKKyAgICAgICAgIyBhcHByb3ByaWF0ZSBtb2Rwcm9iZSBjb21tYW5kcyB0byB0aGUgcG9zdGluc3QKKyAgICAgICAgYXV0b2xvYWRsaXN0ID0gKGQuZ2V0VmFyKCJLRVJORUxfTU9EVUxFX0FVVE9MT0FEIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgYXV0b2xvYWQgPSBkLmdldFZhcignbW9kdWxlX2F1dG9sb2FkXyVzJyAlIGJhc2VuYW1lLCBUcnVlKQorICAgICAgICBpZiBhdXRvbG9hZCBhbmQgYXV0b2xvYWQgPT0gYmFzZW5hbWU6CisgICAgICAgICAgICBiYi53YXJuKCJtb2R1bGVfYXV0b2xvYWRfJXMgd2FzIHJlcGxhY2VkIGJ5IEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQgZm9yIGNhc2VzIHdoZXJlIGJhc2VuYW1lID09IG1vZHVsZSBuYW1lLCBwbGVhc2UgZHJvcCBpdCIgJSBiYXNlbmFtZSkKKyAgICAgICAgaWYgYXV0b2xvYWQgYW5kIGJhc2VuYW1lIG5vdCBpbiBhdXRvbG9hZGxpc3Q6CisgICAgICAgICAgICBiYi53YXJuKCJtb2R1bGVfYXV0b2xvYWRfJXMgaXMgZGVmaW5lZCBidXQgJyVzJyBpc24ndCBpbmNsdWRlZCBpbiBLRVJORUxfTU9EVUxFX0FVVE9MT0FELCBwbGVhc2UgYWRkIGl0IHRoZXJlIiAlIChiYXNlbmFtZSwgYmFzZW5hbWUpKQorICAgICAgICBpZiBiYXNlbmFtZSBpbiBhdXRvbG9hZGxpc3Q6CisgICAgICAgICAgICBuYW1lID0gJyVzL2V0Yy9tb2R1bGVzLWxvYWQuZC8lcy5jb25mJyAlIChkdmFyLCBiYXNlbmFtZSkKKyAgICAgICAgICAgIGYgPSBvcGVuKG5hbWUsICd3JykKKyAgICAgICAgICAgIGlmIGF1dG9sb2FkOgorICAgICAgICAgICAgICAgIGZvciBtIGluIGF1dG9sb2FkLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzXG4nICUgbSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBiYXNlbmFtZSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgicGtnX3Bvc3RpbnN0XyVzIG5vdCBkZWZpbmVkIiAlIHBrZykKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdhdXRvbG9hZF9wb3N0aW5zdF9mcmFnbWVudCcsIFRydWUpICUgKGF1dG9sb2FkIG9yIGJhc2VuYW1lKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgICMgV3JpdGUgb3V0IGFueSBtb2Rjb25mIGZyYWdtZW50CisgICAgICAgIG1vZGNvbmZsaXN0ID0gKGQuZ2V0VmFyKCJLRVJORUxfTU9EVUxFX1BST0JFQ09ORiIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIG1vZGNvbmYgPSBkLmdldFZhcignbW9kdWxlX2NvbmZfJXMnICUgYmFzZW5hbWUsIFRydWUpCisgICAgICAgIGlmIG1vZGNvbmYgYW5kIGJhc2VuYW1lIGluIG1vZGNvbmZsaXN0OgorICAgICAgICAgICAgbmFtZSA9ICclcy9ldGMvbW9kcHJvYmUuZC8lcy5jb25mJyAlIChkdmFyLCBiYXNlbmFtZSkKKyAgICAgICAgICAgIGYgPSBvcGVuKG5hbWUsICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbW9kY29uZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBlbGlmIG1vZGNvbmY6CisgICAgICAgICAgICBiYi5lcnJvcigiUGxlYXNlIGVuc3VyZSBtb2R1bGUgJXMgaXMgbGlzdGVkIGluIEtFUk5FTF9NT0RVTEVfUFJPQkVDT05GIHNpbmNlIG1vZHVsZV9jb25mXyVzIGlzIHNldCIgJSAoYmFzZW5hbWUsIGJhc2VuYW1lKSkKKworICAgICAgICBmaWxlcyA9IGQuZ2V0VmFyKCdGSUxFU18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGZpbGVzID0gIiVzIC9ldGMvbW9kdWxlcy1sb2FkLmQvJXMuY29uZiAvZXRjL21vZHByb2JlLmQvJXMuY29uZiIgJSAoZmlsZXMsIGJhc2VuYW1lLCBiYXNlbmFtZSkKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXyVzJyAlIHBrZywgZmlsZXMpCisKKyAgICAgICAgaWYgImRlc2NyaXB0aW9uIiBpbiB2YWxzOgorICAgICAgICAgICAgb2xkX2Rlc2MgPSBkLmdldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBvbGRfZGVzYyArICI7ICIgKyB2YWxzWyJkZXNjcmlwdGlvbiJdKQorCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKyAgICAgICAgZm9yIGRlcCBpbiBnZXRfZGVwZW5kZW5jaWVzKGZpbGUsIHBhdHRlcm4sIGZvcm1hdCk6CisgICAgICAgICAgICBpZiBub3QgZGVwIGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIHJkZXBlbmRzW2RlcF0gPSBbXQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCisKKyAgICAgICAgIyBBdm9pZCBhdXRvbWF0aWMgLWRldiByZWNvbW1lbmRhdGlvbnMgZm9yIG1vZHVsZXMgZW5kaW5nIHdpdGggLWRldi4KKyAgICAgICAgZC5zZXRWYXJGbGFnKCdSUkVDT01NRU5EU18nICsgcGtnLCAnbm9kZXBycmVjcycsIDEpCisKKyAgICBtb2R1bGVfZGVwcyA9IHBhcnNlX2RlcG1vZCgpCisgICAgbW9kdWxlX3JlZ2V4ID0gJ14oLiopXC5rP28kJworICAgIG1vZHVsZV9wYXR0ZXJuID0gJ2tlcm5lbC1tb2R1bGUtJXMnCisKKyAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfbW9kdWxlcycsIFRydWUpCisgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fbW9kdWxlcycsIFRydWUpCisKKyAgICBtb2R1bGVzID0gZG9fc3BsaXRfcGFja2FnZXMoZCwgcm9vdD0nL2xpYi9tb2R1bGVzJywgZmlsZV9yZWdleD1tb2R1bGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuPW1vZHVsZV9wYXR0ZXJuLCBkZXNjcmlwdGlvbj0nJXMga2VybmVsIG1vZHVsZScsIHBvc3RpbnN0PXBvc3RpbnN0LCBwb3N0cm09cG9zdHJtLCByZWN1cnNpdmU9VHJ1ZSwgaG9vaz1mcm9iX21ldGFkYXRhLCBleHRyYV9kZXBlbmRzPSdrZXJuZWwtJXMnICUgKGQuZ2V0VmFyKCJLRVJORUxfVkVSU0lPTiIsIFRydWUpKSkKKyAgICBpZiBtb2R1bGVzOgorICAgICAgICBtZXRhcGtnID0gZC5nZXRWYXIoJ0tFUk5FTF9NT0RVTEVTX01FVEFfUEFDS0FHRScsIFRydWUpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgbWV0YXBrZywgJyAnKycgJy5qb2luKG1vZHVsZXMpKQorCisgICAgIyBJZiBtb2R1bGVzLWxvYWQuZCBhbmQgbW9kcHJvYmUuZCBhcmUgZW1wdHkgYXQgdGhpcyBwb2ludCwgcmVtb3ZlIHRoZW0gdG8KKyAgICAjIGF2b2lkIHdhcm5pbmdzLiByZW1vdmVkaXJzIG9ubHkgcmFpc2VzIGFuIE9TRXJyb3IgaWYgYW4gZW1wdHkKKyAgICAjIGRpcmVjdG9yeSBjYW5ub3QgYmUgcmVtb3ZlZC4KKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIGZvciBkaXIgaW4gWyIlcy9ldGMvbW9kcHJvYmUuZCIgJSAoZHZhciksICIlcy9ldGMvbW9kdWxlcy1sb2FkLmQiICUgKGR2YXIpLCAiJXMvZXRjIiAlIChkdmFyKV06CisgICAgICAgIGlmIGxlbihvcy5saXN0ZGlyKGRpcikpID09IDA6CisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCit9CisKK2RvX3BhY2thZ2VbdmFyZGVwc10gKz0gJyR7QCIgIi5qb2luKG1hcChsYW1iZGEgczogIm1vZHVsZV9jb25mXyIgKyBzLCAoZC5nZXRWYXIoIktFUk5FTF9NT0RVTEVfUFJPQkVDT05GIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpKX0nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtdWJvb3QuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWU3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtdWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDIwIEBACit1Ym9vdF9wcmVwX2tpbWFnZSgpIHsKKwlpZiB0ZXN0IC1lIGFyY2gvJHtBUkNIfS9ib290L2NvbXByZXNzZWQvdm1saW51eCA7IHRoZW4KKwkJdm1saW51eF9wYXRoPSJhcmNoLyR7QVJDSH0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgiCisJCWxpbnV4X3N1ZmZpeD0iIgorCQlsaW51eF9jb21wPSJub25lIgorCWVsc2UKKwkJdm1saW51eF9wYXRoPSJ2bWxpbnV4IgorCQlsaW51eF9zdWZmaXg9Ii5neiIKKwkJbGludXhfY29tcD0iZ3ppcCIKKwlmaQorCisJJHtPQkpDT1BZfSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVMgIiR7dm1saW51eF9wYXRofSIgbGludXguYmluCisKKwlpZiBbICIke2xpbnV4X2NvbXB9IiAhPSAibm9uZSIgXSA7IHRoZW4KKwkJZ3ppcCAtOSBsaW51eC5iaW4KKwkJbXYgLWYgImxpbnV4LmJpbiR7bGludXhfc3VmZml4fSIgbGludXguYmluCisJZmkKKworCWVjaG8gIiR7bGludXhfY29tcH0iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtdWltYWdlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwtdWltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczOTY1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDM2IEBACitpbmhlcml0IGtlcm5lbC11Ym9vdAorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGtlcm5lbHR5cGUgPSBkLmdldFZhcignS0VSTkVMX0lNQUdFVFlQRScsIFRydWUpCisgICAgaWYga2VybmVsdHlwZSA9PSAndUltYWdlJzoKKyAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKCJERVBFTkRTIiwgVHJ1ZSkKKyAgICAgICAgZGVwZW5kcyA9ICIlcyB1LWJvb3QtbWtpbWFnZS1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICBkLnNldFZhcigiREVQRU5EUyIsIGRlcGVuZHMpCisKKwkjIE92ZXJyaWRlIEtFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UgdmFyaWFibGUsIHdoaWNoIGlzIGludGVybmFsCisJIyB0byBrZXJuZWwuYmJjbGFzcyAuIFdlIG92ZXJyaWRlIHRoZSB2YXJpYWJsZSBoZXJlLCBzaW5jZSB3ZSBuZWVkCisJIyB0byBidWlsZCB1SW1hZ2UgdXNpbmcgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaWYgYW5kIG9ubHkgaWYKKwkjIEtFRVBVSU1BR0UgPT0geWVzLiBPdGhlcndpc2UsIHdlIHBhY2sgY29tcHJlc3NlZCB2bWxpbnV4IGludG8KKwkjIHRoZSB1SW1hZ2UgLgorCWlmIGQuZ2V0VmFyKCJLRUVQVUlNQUdFIiwgVHJ1ZSkgIT0gJ3llcyc6CisgICAgICAgICAgICBkLnNldFZhcigiS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSIsICJ6SW1hZ2UiKQorfQorCitkb191Ym9vdF9ta2ltYWdlKCkgeworCWlmIHRlc3QgIngke0tFUk5FTF9JTUFHRVRZUEV9IiA9ICJ4dUltYWdlIiA7IHRoZW4KKwkJaWYgdGVzdCAieCR7S0VFUFVJTUFHRX0iICE9ICJ4eWVzIiA7IHRoZW4KKwkJCXVib290X3ByZXBfa2ltYWdlCisKKwkJCUVOVFJZUE9JTlQ9JHtVQk9PVF9FTlRSWVBPSU5UfQorCQkJaWYgdGVzdCAtbiAiJHtVQk9PVF9FTlRSWVNZTUJPTH0iOyB0aGVuCisJCQkJRU5UUllQT0lOVD1gJHtIT1NUX1BSRUZJWH1ubSAke1N9L3ZtbGludXggfCBcCisJCQkJCWF3ayAnJDM9PSIke1VCT09UX0VOVFJZU1lNQk9MfSIge3ByaW50ICQxfSdgCisJCQlmaQorCisJCQl1Ym9vdC1ta2ltYWdlIC1BICR7VUJPT1RfQVJDSH0gLU8gbGludXggLVQga2VybmVsIC1DICIke2xpbnV4X2NvbXB9IiAtYSAke1VCT09UX0xPQURBRERSRVNTfSAtZSAkRU5UUllQT0lOVCAtbiAiJHtESVNUUk9fTkFNRX0vJHtQVn0vJHtNQUNISU5FfSIgLWQgbGludXguYmluIGFyY2gvJHtBUkNIfS9ib290L3VJbWFnZQorCQkJcm0gLWYgbGludXguYmluCisJCWZpCisJZmkKK30KKworYWRkdGFzayB1Ym9vdF9ta2ltYWdlIGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC15b2N0by5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1Zjk0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbC15b2N0by5iYmNsYXNzCkBAIC0wLDAgKzEsMzY4IEBACisjIHJlbW92ZSB0YXNrcyB0aGF0IG1vZGlmeSB0aGUgc291cmNlIHRyZWUgaW4gY2FzZSBleHRlcm5hbHNyYyBpcyBpbmhlcml0ZWQKK1NSQ1RSRUVDT1ZFUkVEVEFTS1MgKz0gImRvX2tlcm5lbF9saW5rX3ZtbGludXggZG9fa2VybmVsX2NvbmZpZ21lIGRvX3ZhbGlkYXRlX2JyYW5jaGVzIGRvX2tlcm5lbF9jb25maWdjaGVjayBkb19rZXJuZWxfY2hlY2tvdXQgZG9fc2hhcmVkX3dvcmtkaXIgZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX3BhdGNoIgorCisjIHJldHVybnMgbG9jYWwgKGFic29sdXRlKSBwYXRoIG5hbWVzIGZvciBhbGwgdmFsaWQgcGF0Y2hlcyBpbiB0aGUKKyMgc3JjX3VyaQorZGVmIGZpbmRfcGF0Y2hlcyhkKToKKyAgICBwYXRjaGVzID0gc3JjX3BhdGNoZXMoZCkKKyAgICBwYXRjaF9saXN0PVtdCisgICAgZm9yIHAgaW4gcGF0Y2hlczoKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIF8gPSBiYi5mZXRjaC5kZWNvZGV1cmwocCkKKyAgICAgICAgcGF0Y2hfbGlzdC5hcHBlbmQobG9jYWwpCisKKyAgICByZXR1cm4gcGF0Y2hfbGlzdAorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5zY2MgZmlsZXMKK2RlZiBmaW5kX3NjY3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShzKSkKKyAgICAgICAgaWYgZXh0IGFuZCBleHQgaW4gWyIuc2NjIiwgIi5jZmciXToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKyAgICAgICAgZWxpZiBiYXNlIGFuZCBiYXNlIGluICdkZWZjb25maWcnOgorICAgICAgICAgICAgc291cmNlc19saXN0LmFwcGVuZChzKQorCisgICAgcmV0dXJuIHNvdXJjZXNfbGlzdAorCisjIGNoZWNrIHRoZSBTUkNfVVJJIGZvciAia21ldGEiIHR5cGUnZCBnaXQgcmVwb3NpdG9yaWVzLiBSZXR1cm4gdGhlIG5hbWUgb2YKKyMgdGhlIHJlcG9zaXRvcnkgYXMgaXQgd2lsbCBiZSBmb3VuZCBpbiBXT1JLRElSCitkZWYgZmluZF9rZXJuZWxfZmVhdHVyZV9kaXJzKGQpOgorICAgIGZlYXR1cmVfZGlycz1bXQorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKFtdLCBkKQorICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICAgICAgcGFybSA9IHVybGRhdGEucGFybQorICAgICAgICB0eXBlPSIiCisgICAgICAgIGlmICJ0eXBlIiBpbiBwYXJtOgorICAgICAgICAgICAgdHlwZSA9IHBhcm1bInR5cGUiXQorICAgICAgICBpZiAiZGVzdHN1ZmZpeCIgaW4gcGFybToKKyAgICAgICAgICAgIGRlc3RkaXIgPSBwYXJtWyJkZXN0c3VmZml4Il0KKyAgICAgICAgICAgIGlmIHR5cGUgPT0gImttZXRhIjoKKyAgICAgICAgICAgICAgICBmZWF0dXJlX2RpcnMuYXBwZW5kKGRlc3RkaXIpCisJICAgIAorICAgIHJldHVybiBmZWF0dXJlX2RpcnMKKworIyBmaW5kIHRoZSBtYXN0ZXIvbWFjaGluZSBzb3VyY2UgYnJhbmNoLiBJbiB0aGUgc2FtZSB3YXkgdGhhdCB0aGUgZmV0Y2hlciBwcm9jZXNlcworIyBnaXQgcmVwb3NpdG9yaWVzIGluIHRoZSBTUkNfVVJJIHdlIHRha2UgdGhlIGZpcnN0IHJlcG8gZm91bmQsIGZpcnN0IGJyYW5jaC4KK2RlZiBnZXRfbWFjaGluZV9icmFuY2goZCwgZGVmYXVsdCk6CisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICBwYXJtID0gdXJsZGF0YS5wYXJtCisgICAgICAgIGlmICJicmFuY2giIGluIHBhcm06CisgICAgICAgICAgICBicmFuY2hlcyA9IHVybGRhdGEucGFybS5nZXQoImJyYW5jaCIpLnNwbGl0KCcsJykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hlc1swXQorCSAgICAKKyAgICByZXR1cm4gZGVmYXVsdAorCitkb19rZXJuZWxfbWV0YWRhdGEoKSB7CisJc2V0ICtlCisJY2QgJHtTfQorCWV4cG9ydCBLTUVUQT0ke0tNRVRBfQorCisJIyBpZiBrZXJuZWwgdG9vbHMgYXJlIGF2YWlsYWJsZSBpbi10cmVlLCB0aGV5IGFyZSBwcmVmZXJyZWQKKwkjIGFuZCBhcmUgcGxhY2VkIG9uIHRoZSBwYXRoIGJlZm9yZSBhbnkgZXh0ZXJuYWwgdG9vbHMuIFVubGVzcworCSMgdGhlIGV4dGVybmFsIHRvb2xzIGZsYWcgaXMgc2V0LCBpbiB0aGF0IGNhc2Ugd2UgZG8gbm90aGluZy4KKwlpZiBbIC1mICIke1N9L3NjcmlwdHMvdXRpbC9jb25maWdtZSIgXTsgdGhlbgorCQlpZiBbIC16ICIke0VYVEVSTkFMX0tFUk5FTF9UT09MU30iIF07IHRoZW4KKwkJCVBBVEg9JHtTfS9zY3JpcHRzL3V0aWw6JHtQQVRIfQorCQlmaQorCWZpCisKKwltYWNoaW5lX2JyYW5jaD0iJHtAIGdldF9tYWNoaW5lX2JyYW5jaChkLCAiJHtLQlJBTkNIfSIgKX0iCisJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWX21hY2hpbmV9IgorCWlmIFsgLXogIiR7bWFjaGluZV9zcmNyZXZ9IiBdOyB0aGVuCisJCSMgZmFsbGJhY2sgdG8gU1JDUkVWIGlmIGEgbm9uIG1hY2hpbmVfbWV0YSB0cmVlIGlzIGJlaW5nIGJ1aWx0CisJCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVn0iCisJZmkKKworCSMgSW4gYSBzaW1pbGFyIG1hbm5lciB0byB0aGUga2VybmVsIGl0c2VsZjoKKwkjCisJIyAgIGRlZmNvbmZpZzogJChvYmopL2NvbmYKKwkjICAgaWZlcSAoJChLQlVJTERfREVGQ09ORklHKSwpCisJIwkkPCAtLWRlZmNvbmZpZyAkKEtjb25maWcpCisJIyAgIGVsc2UKKwkjCUBlY2hvICIqKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGJhc2VkIG9uICckKEtCVUlMRF9ERUZDT05GSUcpJyIKKwkjCSQoUSkkPCAtLWRlZmNvbmZpZz1hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kKEtCVUlMRF9ERUZDT05GSUcpICQoS2NvbmZpZykKKwkjICAgZW5kaWYKKwkjCisJIyBJZiBhIGRlZmNvbmZpZyBpcyBzcGVjaWZpZWQgdmlhIHRoZSBLQlVJTERfREVGQ09ORklHIHZhcmlhYmxlLCB3ZSBjb3B5IGl0CisJIyBmcm9tIHRoZSBzb3VyY2UgdHJlZSwgaW50byBhIGNvbW1vbiBsb2NhdGlvbiBhbmQgbm9ybWFsaXplZCAiZGVmY29uZmlnIiBuYW1lLAorCSMgd2hlcmUgdGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3Mgd2lsbCBpbmNsdWRlIGFuZCBpbmNvcm9wb3JhdGUgaXQgaW50byB0aGUgYnVpbGQKKwkjCisJIyBJZiB0aGUgZmV0Y2hlciBoYXMgYWxyZWFkeSBwbGFjZWQgYSBkZWZjb25maWcgaW4gV09SS0RJUiAoZnJvbSB0aGUgU1JDX1VSSSksCisJIyB3ZSBkb24ndCBvdmVyd3JpdGUgaXQsIGJ1dCBpbnN0ZWFkIHdhcm4gdGhlIHVzZXIgdGhhdCBTUkNfVVJJIGRlZmNvbmZpZ3MgdGFrZQorCSMgcHJlY2VuZGVuY2UuCisJIworCWlmIFsgLW4gIiR7S0JVSUxEX0RFRkNPTkZJR30iIF07IHRoZW4KKwkJaWYgWyAtZiAiJHtTfS9hcmNoLyR7QVJDSH0vY29uZmlncy8ke0tCVUlMRF9ERUZDT05GSUd9IiBdOyB0aGVuCisJCQlpZiBbIC1mICIke1dPUktESVJ9L2RlZmNvbmZpZyIgXTsgdGhlbgorCQkJCSMgSWYgdGhlIHR3byBkZWZjb25maWcncyBhcmUgZGlmZmVyZW50LCB3YXJuIHRoYXQgd2UgZGlkbid0IG92ZXJ3cml0ZSB0aGUKKwkJCQkjIG9uZSBhbHJlYWR5IHBsYWNlZCBpbiBXT1JLRElSIGJ5IHRoZSBmZXRjaGVyLgorCQkJCWNtcCAiJHtXT1JLRElSfS9kZWZjb25maWciICIke1N9L2FyY2gvJHtBUkNIfS9jb25maWdzLyR7S0JVSUxEX0RFRkNPTkZJR30iCisJCQkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkJCWJid2FybiAiZGVmY29uZmlnIGRldGVjdGVkIGluIFdPUktESVIuICR7S0JVSUxEX0RFRkNPTkZJR30gc2tpcHBlZCIKKwkJCQlmaQorCQkJZWxzZQorCQkJCWNwIC1mICR7U30vYXJjaC8ke0FSQ0h9L2NvbmZpZ3MvJHtLQlVJTERfREVGQ09ORklHfSAke1dPUktESVJ9L2RlZmNvbmZpZworCQkJCXNjY3M9IiR7V09SS0RJUn0vZGVmY29uZmlnIgorCQkJZmkKKwkJZWxzZQorCQkJYmJmYXRhbCAiQSBLQlVJTERfREVDT05GSUcgJyR7S0JVSUxEX0RFRkNPTkZJR30nIHdhcyBzcGVjaWZpZWQsIGJ1dCBub3QgcHJlc2VudCBpbiB0aGUgc291cmNlIHRyZWUiCisJCWZpCisJZmkKKworCXNjY3M9IiRzY2NzICR7QCIgIi5qb2luKGZpbmRfc2NjcyhkKSl9IgorCXBhdGNoZXM9IiR7QCIgIi5qb2luKGZpbmRfcGF0Y2hlcyhkKSl9IgorCWZlYXRfZGlycz0iJHtAIiAiLmpvaW4oZmluZF9rZXJuZWxfZmVhdHVyZV9kaXJzKGQpKX0iCisKKwkjIGFkZCBhbnkgZXhwbGljaXRseSByZWZlcmVuY2VkIGZlYXR1cmVzIG9udG8gdGhlIGVuZCBvZiB0aGUgZmVhdHVyZQorCSMgbGlzdCB0aGF0IGlzIHBhc3NlZCB0byB0aGUga2VybmVsIGJ1aWxkIHNjcmlwdHMuCisJaWYgWyAtbiAiJHtLRVJORUxfRkVBVFVSRVN9IiBdOyB0aGVuCisJCWZvciBmZWF0IGluICR7S0VSTkVMX0ZFQVRVUkVTfTsgZG8KKwkJCWFkZG9uX2ZlYXR1cmVzPSIkYWRkb25fZmVhdHVyZXMgLS1mZWF0dXJlICRmZWF0IgorCQlkb25lCisJZmkKKworCSMgY2hlY2sgZm9yIGZlYXR1cmUgZGlyZWN0b3JpZXMvcmVwb3MvYnJhbmNoZXMgdGhhdCB3ZXJlIHBhcnQgb2YgdGhlCisJIyBTUkNfVVJJLiBJZiB0aGV5IHdlcmUgc3VwcGxpZWQsIHdlIGNvbnZlcnQgdGhlbSBpbnRvIGluY2x1ZGUgZGlyZWN0aXZlcworCSMgZm9yIHRoZSB1cGRhdGUgcGFydCBvZiB0aGUgcHJvY2VzcworCWlmIFsgLW4gIiR7ZmVhdF9kaXJzfSIgXTsgdGhlbgorCSAgICBmb3IgZiBpbiAke2ZlYXRfZGlyc307IGRvCisJCWlmIFsgLWQgIiR7V09SS0RJUn0vJGYvbWV0YSIgXTsgdGhlbgorCQkgICAgaW5jbHVkZXM9IiRpbmNsdWRlcyAtSSR7V09SS0RJUn0vJGYvbWV0YSIKKwkJZWxpZiBbIC1kICIke1dPUktESVJ9LyRmIiBdOyB0aGVuCisJCSAgICBpbmNsdWRlcz0iJGluY2x1ZGVzIC1JJHtXT1JLRElSfS8kZiIKKwkJZmkKKwkgICAgZG9uZQorCWZpCisKKwkjIHVwZGF0ZXMgb3IgZ2VuZXJhdGVzIHRoZSB0YXJnZXQgZGVzY3JpcHRpb24KKwl1cGRhdGVtZSAke3VwZGF0ZW1lX2ZsYWdzfSAtREtERVNDPSR7S01BQ0hJTkV9OiR7TElOVVhfS0VSTkVMX1RZUEV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVzfSAke2FkZG9uX2ZlYXR1cmVzfSAke0FSQ0h9ICR7S01BQ0hJTkV9ICR7c2Njc30gJHtwYXRjaGVzfQorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQliYmZhdGFsX2xvZyAiQ291bGQgbm90IHVwZGF0ZSAke21hY2hpbmVfYnJhbmNofSIKKwlmaQorfQorCitkb19wYXRjaCgpIHsKKwljZCAke1N9CisKKwkjIGV4ZWN1dGVzIGFuZCBtb2RpZmllcyB0aGUgc291cmNlIHRyZWUgYXMgcmVxdWlyZWQKKwlwYXRjaG1lICR7S01BQ0hJTkV9CisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWJiZXJyb3IgIkNvdWxkIG5vdCBhcHBseSBwYXRjaGVzIGZvciAke0tNQUNISU5FfS4iCisJCWJiZmF0YWxfbG9nICJQYXRjaCBmYWlsdXJlcyBjYW4gYmUgcmVzb2x2ZWQgaW4gdGhlIGxpbnV4IHNvdXJjZSBkaXJlY3RvcnkgJHtTfSkiCisJZmkKKworCSMgY2hlY2sgdG8gc2VlIGlmIHRoZSBzcGVjaWZpZWQgU1JDUkVWIGlzIHJlYWNoYWJsZSBmcm9tIHRoZSBmaW5hbCBicmFuY2guCisJIyBpZiBpdCB3YXNuJ3Qgc29tZXRoaW5nIHdyb25nIGhhcyBoYXBwZW5lZCwgYW5kIHdlIHNob3VsZCBlcnJvci4KKwltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZfbWFjaGluZX0iCisJaWYgWyAteiAiJHttYWNoaW5lX3NyY3Jldn0iIF07IHRoZW4KKwkJIyBmYWxsYmFjayB0byBTUkNSRVYgaWYgYSBub24gbWFjaGluZV9tZXRhIHRyZWUgaXMgYmVpbmcgYnVpbHQKKwkJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWfSIKKwkJIyBpZiBTUkNSRVYgY2Fubm90IGJlIHJlYWNoZWQgc29tZXRoaW5nIGlzIHdyb25nLgorCQlpZiBbIC16ICIke21hY2hpbmVfc3JjcmV2fSIgXTsgdGhlbgorCQkJYmJmYXRhbCAiTmVpdGhlciBTUkNSRVZfbWFjaGluZSBvciBTUkNSRVYgd2FzIHNwZWNpZmllZCEiCisJCWZpCisJZmkKKworCWlmIFsgIiR7bWFjaGluZV9zcmNyZXZ9IiAhPSAiQVVUT0lOQyIgXTsgdGhlbgorCQlpZiAhIFsgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAke21hY2hpbmVfc3JjcmV2fX4wKSIgPSAiJChnaXQgbWVyZ2UtYmFzZSAke21hY2hpbmVfc3JjcmV2fSBIRUFEKSIgXTsgdGhlbgorCQkJYmJlcnJvciAiU1JDUkVWICR7bWFjaGluZV9zcmNyZXZ9IHdhcyBzcGVjaWZpZWQsIGJ1dCBpcyBub3QgcmVhY2hhYmxlIgorCQkJYmJmYXRhbCAiQ2hlY2sgdGhlIEJTUCBkZXNjcmlwdGlvbiBmb3IgaW5jb3JyZWN0IGJyYW5jaCBzZWxlY3Rpb24sIG9yIG90aGVyIGVycm9ycy4iCisJCWZpCisJZmkKK30KKworZG9fa2VybmVsX2NoZWNrb3V0KCkgeworCXNldCArZQorCisJc291cmNlX2Rpcj1gZWNobyAke1N9IHwgc2VkICdzJS8kJSUnYAorCXNvdXJjZV93b3JrZGlyPSIke1dPUktESVJ9L2dpdCIKKwlpZiBbIC1kICIke1dPUktESVJ9L2dpdC8iIF07IHRoZW4KKwkJIyBjYXNlOiBnaXQgcmVwb3NpdG9yeSAoYmFyZSBvciBub24tYmFyZSkKKwkJIyBpZiBTIGlzIFdPUktESVIvZ2l0LCB0aGVuIHdlIHNob3VsZG4ndCBiZSBtb3Zpbmcgb3IgZGVsZXRpbmcgdGhlIHRyZWUuCisJCWlmIFsgIiR7c291cmNlX2Rpcn0iICE9ICIke3NvdXJjZV93b3JrZGlyfSIgXTsgdGhlbgorCQkJcm0gLXJmICR7U30KKwkJCW12ICR7V09SS0RJUn0vZ2l0ICR7U30KKwkJZmkKKwkJY2QgJHtTfQorCWVsc2UKKwkJIyBjYXNlOiB3ZSBoYXZlIG5vIGdpdCByZXBvc2l0b3J5IGF0IGFsbC4gCisJCSMgVG8gc3VwcG9ydCBsb3cgYmFuZHdpZHRoIG9wdGlvbnMgZm9yIGJ1aWxkaW5nIHRoZSBrZXJuZWwsIHdlJ2xsIGp1c3QgCisJCSMgY29udmVydCB0aGUgdHJlZSB0byBhIGdpdCByZXBvIGFuZCBsZXQgdGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3Mgd29yayB1bmNoYW5nZWQKKwkJCisJCSMgaWYgJHtTfSBoYXNuJ3QgYmVlbiBzZXQgdG8gdGhlIHByb3BlciBzdWJkaXJlY3RvcnkgYSBkZWZhdWx0IG9mICJsaW51eCIgaXMgCisJCSMgdXNlZCwgYnV0IHdlIGNhbid0IGluaXRpYWxpemUgdGhhdCBlbXB0eSBkaXJlY3RvcnkuIFNvIGNoZWNrIGl0IGFuZCB0aHJvdyBhCisJCSMgY2xlYXIgZXJyb3IKKworCSAgICAgICAgY2QgJHtTfQorCQlpZiBbICEgLWYgIk1ha2VmaWxlIiBdOyB0aGVuCisJCQliYmVycm9yICJTIGlzIG5vdCBzZXQgdG8gdGhlIGxpbnV4IHNvdXJjZSBkaXJlY3RvcnkuIENoZWNrICIKKwkJCWJiZmF0YWwgInRoZSByZWNpcGUgYW5kIHNldCBTIHRvIHRoZSBwcm9wZXIgZXh0cmFjdGVkIHN1YmRpcmVjdG9yeSIKKwkJZmkKKwkJcm0gLWYgLmdpdGlnbm9yZQorCQlnaXQgaW5pdAorCQlnaXQgYWRkIC4KKwkJZ2l0IGNvbW1pdCAtcSAtbSAiYmFzZWxpbmUgY29tbWl0OiBjcmVhdGluZyByZXBvIGZvciAke1BOfS0ke1BWfSIKKwkJZ2l0IGNsZWFuIC1kIC1mCisJZmkKKworCSMgY29udmVydCBhbnkgcmVtb3RlIGJyYW5jaGVzIHRvIGxvY2FsIHRyYWNraW5nIG9uZXMKKwlmb3IgaSBpbiBgZ2l0IGJyYW5jaCAtYSAtLW5vLWNvbG9yIHwgZ3JlcCByZW1vdGVzIHwgZ3JlcCAtdiBIRUFEYDsgZG8KKwkJYj1gZWNobyAkaSB8IGN1dCAtZCcgJyAtZjIgfCBzZWQgJ3MlcmVtb3Rlcy9vcmlnaW4vJSUnYDsKKwkJZ2l0IHNob3ctcmVmIC0tcXVpZXQgLS12ZXJpZnkgLS0gInJlZnMvaGVhZHMvJGIiCisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJZ2l0IGJyYW5jaCAkYiAkaSA+IC9kZXYvbnVsbAorCQlmaQorCWRvbmUKKworCSMgQ3JlYXRlIGEgd29ya2luZyB0cmVlIGNvcHkgb2YgdGhlIGtlcm5lbCBieSBjaGVja2luZyBvdXQgYSBicmFuY2gKKwltYWNoaW5lX2JyYW5jaD0iJHtAIGdldF9tYWNoaW5lX2JyYW5jaChkLCAiJHtLQlJBTkNIfSIgKX0iCisKKwkjIGNoZWNrb3V0IGFuZCBjbG9iYmVyIGFueSB1bmltcG9ydGFudCBmaWxlcworCWdpdCBjaGVja291dCAtZiAke21hY2hpbmVfYnJhbmNofQorfQorZG9fa2VybmVsX2NoZWNrb3V0W2RpcnNdID0gIiR7U30iCisKK2FkZHRhc2sga2VybmVsX2NoZWNrb3V0IGJlZm9yZSBkb19rZXJuZWxfbWV0YWRhdGEgYWZ0ZXIgZG9fdW5wYWNrCithZGR0YXNrIGtlcm5lbF9tZXRhZGF0YSBhZnRlciBkb192YWxpZGF0ZV9icmFuY2hlcyBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCitkb19rZXJuZWxfbWV0YWRhdGFbZGVwZW5kc10gPSAia2Vybi10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fa2VybmVsX2NvbmZpZ21lW2RpcnNdICs9ICIke1N9ICR7Qn0iCitkb19rZXJuZWxfY29uZmlnbWUoKSB7CisJYmJub3RlICJrZXJuZWwgY29uZmlnbWUiCisJZXhwb3J0IEtNRVRBPSR7S01FVEF9CisKKwlpZiBbIC1uICIke0tDT05GSUdfTU9ERX0iIF07IHRoZW4KKwkJY29uZmlnbWVmbGFncz0ke0tDT05GSUdfTU9ERX0KKwllbHNlCisJCSMgSWYgYSBkZWZjb25maWcgd2FzIHBhc3NlZCwgdXNlID1uIGFzIHRoZSBiYXNlbGluZSwgd2hpY2ggaXMgYWNoaWV2ZWQKKwkJIyB2aWEgLS1hbGxub2NvbmZpZworCQlpZiBbIC1mICR7V09SS0RJUn0vZGVmY29uZmlnIF07IHRoZW4KKwkJCWNvbmZpZ21lZmxhZ3M9Ii0tYWxsbm9jb25maWciCisJCWZpCisJZmkKKworCWNkICR7U30KKwlQQVRIPSR7UEFUSH06JHtTfS9zY3JpcHRzL3V0aWwKKwljb25maWdtZSAke2NvbmZpZ21lZmxhZ3N9IC0tcmVjb25maWcgLS1vdXRwdXQgJHtCfSAke0xJTlVYX0tFUk5FTF9UWVBFfSAke0tNQUNISU5FfQorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQliYmZhdGFsX2xvZyAiQ291bGQgbm90IGNvbmZpZ3VyZSAke0tNQUNISU5FfS0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKKwlmaQorCQorCWVjaG8gIiMgR2xvYmFsIHNldHRpbmdzIGZyb20gbGludXggcmVjaXBlIiA+PiAke0J9Ly5jb25maWcKKwllY2hvICJDT05GSUdfTE9DQUxWRVJTSU9OPSJcIiR7TElOVVhfVkVSU0lPTl9FWFRFTlNJT059XCIgPj4gJHtCfS8uY29uZmlnCit9CisKK2FkZHRhc2sga2VybmVsX2NvbmZpZ21lIGJlZm9yZSBkb19jb25maWd1cmUgYWZ0ZXIgZG9fcGF0Y2gKKworcHl0aG9uIGRvX2tlcm5lbF9jb25maWdjaGVjaygpIHsKKyAgICBpbXBvcnQgcmUsIHN0cmluZywgc3lzCisKKyAgICAjIGlmIEtNRVRBIGlzbid0IHNldCBnbG9iYWxseSBieSBhIHJlY2lwZSB1c2luZyB0aGlzIHJvdXRpbmUsIHdlIG5lZWQgdG8KKyAgICAjIHNldCB0aGUgZGVmYXVsdCB0byAnbWV0YScuIE90aGVyd2lzZSwga2NvbmZfY2hlY2sgaXMgbm90IHBhc3NlZCBhIHZhbGlkCisgICAgIyBtZXRhLXNlcmllcyBmb3IgcHJvY2Vzc2luZworICAgIGttZXRhID0gZC5nZXRWYXIoICJLTUVUQSIsIFRydWUgKSBvciAibWV0YSIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoa21ldGEpOgorICAgICAgICBrbWV0YSA9ICIuIiArIGttZXRhCisKKyAgICBwYXRocHJlZml4ID0gImV4cG9ydCBQQVRIPSVzOiVzOyAiICUgKGQuZ2V0VmFyKCdQQVRIJywgVHJ1ZSksICIke1N9L3NjcmlwdHMvdXRpbC8iKQorICAgIGNtZCA9IGQuZXhwYW5kKCJjZCAke1N9OyBrY29uZl9jaGVjayAtY29uZmlnICVzL21ldGEtc2VyaWVzICR7U30gJHtCfSIgJSBrbWV0YSkKKyAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJXMlcyIgJSAocGF0aHByZWZpeCwgY21kKSkKKworICAgIGNvbmZpZ19jaGVja192aXNpYmlsaXR5ID0gaW50KGQuZ2V0VmFyKCAiS0NPTkZfQVVESVRfTEVWRUwiLCBUcnVlICkgb3IgMCkKKyAgICBic3BfY2hlY2tfdmlzaWJpbGl0eSA9IGludChkLmdldFZhciggIktDT05GX0JTUF9BVURJVF9MRVZFTCIsIFRydWUgKSBvciAwKQorCisgICAgIyBpZiBjb25maWcgY2hlY2sgdmlzaWJpbGl0eSBpcyBub24temVybywgcmVwb3J0IGRyb3BwZWQgY29uZmlndXJhdGlvbiB2YWx1ZXMKKyAgICBtaXNtYXRjaF9maWxlID0gIiR7U30vIiArIGttZXRhICsgIi8iICsgIm1pc21hdGNoLmNmZyIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtaXNtYXRjaF9maWxlKToKKyAgICAgICAgaWYgY29uZmlnX2NoZWNrX3Zpc2liaWxpdHk6CisgICAgICAgICAgICB3aXRoIG9wZW4gKG1pc21hdGNoX2ZpbGUsICJyIikgYXMgbXlmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBteWZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgYmIud2FybiggIltrZXJuZWwgY29uZmlnXTogc3BlY2lmaWVkIHZhbHVlcyBkaWQgbm90IG1ha2UgaXQgaW50byB0aGUga2VybmVsJ3MgZmluYWwgY29uZmlndXJhdGlvbjpcblxuJXMiICUgcmVzdWx0cykKKworICAgICMgaWYgY29uZmlnIGNoZWNrIHZpc2liaWxpdHkgaXMgbGV2ZWwgMiBvciBoaWdoZXIsIHJlcG9ydCBub24taGFyZHdhcmUgb3B0aW9ucworICAgIG5vbmh3X2ZpbGUgPSAiJHtTfS8iICsga21ldGEgKyAiLyIgKyAibm9uaHdfcmVwb3J0LmNmZyIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhub25od19maWxlKToKKyAgICAgICAgaWYgY29uZmlnX2NoZWNrX3Zpc2liaWxpdHkgPiAxOgorICAgICAgICAgICAgd2l0aCBvcGVuIChub25od19maWxlLCAiciIpIGFzIG15ZmlsZToKKyAgICAgICAgICAgICAgICByZXN1bHRzID0gbXlmaWxlLnJlYWQoKQorICAgICAgICAgICAgICAgIGJiLndhcm4oICJba2VybmVsIGNvbmZpZ106IEJTUCBzcGVjaWZpZWQgbm9uLWh3IGNvbmZpZ3VyYXRpb246XG5cbiVzIiAlIHJlc3VsdHMpCisKKyAgICBic3BfZGVzYyA9ICIke1N9LyIgKyBrbWV0YSArICIvIiArICJ0b3BfdGd0IgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGJzcF9kZXNjKSBhbmQgYnNwX2NoZWNrX3Zpc2liaWxpdHkgPiAxOgorICAgICAgICB3aXRoIG9wZW4gKGJzcF9kZXNjLCAiciIpIGFzIG15ZmlsZToKKyAgICAgICAgICAgIGJzcF90Z3QgPSBteWZpbGUucmVhZCgpCisgICAgICAgICAgICBtID0gcmUubWF0Y2goIl4oLiopc2NyYXRjaC5vYmooLiopJCIsIGJzcF90Z3QpCisgICAgICAgICAgICBpZiBub3QgbSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJiLndhcm4oICJba2VybmVsXTogQW4gYXV0byBnZW5lcmF0ZWQgQlNQIGRlc2NyaXB0aW9uIHdhcyB1c2VkLCB0aGlzIG5vcm1hbGx5IGluZGljYXRlcyBhIG1pc2NvbmZpZ3VyYXRpb24uXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hlY2sgdGhhdCB5b3VyIG1hY2hpbmUgKCVzKSBoYXMgYW4gYXNzb2NpYXRlZCBrZXJuZWwgZGVzY3JpcHRpb24uIiAlICIke01BQ0hJTkV9IiApCit9CisKKyMgRW5zdXJlIHRoYXQgdGhlIGJyYW5jaGVzIChCU1AgYW5kIG1ldGEpIGFyZSBvbiB0aGUgbG9jYXRpb25zIHNwZWNpZmllZCBieQorIyB0aGVpciBTUkNSRVYgdmFsdWVzLiBJZiB0aGV5IGFyZSBOT1Qgb24gdGhlIHJpZ2h0IGNvbW1pdHMsIHRoZSBicmFuY2hlcworIyBhcmUgY29ycmVjdGVkIHRvIHRoZSBwcm9wZXIgY29tbWl0LgorZG9fdmFsaWRhdGVfYnJhbmNoZXMoKSB7CisJc2V0ICtlCisJY2QgJHtTfQorCisJbWFjaGluZV9icmFuY2g9IiR7QCBnZXRfbWFjaGluZV9icmFuY2goZCwgIiR7S0JSQU5DSH0iICl9IgorCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVl9tYWNoaW5lfSIKKworCSMgaWYgU1JDUkVWIGlzIEFVVE9SRVYgaXQgc2hvd3MgdXAgYXMgQVVUT0lOQyB0aGVyZSdzIG5vdGhpbmcgdG8KKwkjIGNoZWNrIGFuZCB3ZSBjYW4gZXhpdCBlYXJseQorCWlmIFsgIiR7bWFjaGluZV9zcmNyZXZ9IiA9ICJBVVRPSU5DIiBdOyB0aGVuCisJCWJibm90ZSAiU1JDUkVWIHZhbGlkYXRpb24gaXMgbm90IHJlcXVpcmVkIGZvciBBVVRPUkVWIgorCWVsaWYgWyAiJHttYWNoaW5lX3NyY3Jldn0iID0gIiIgXTsgdGhlbgorCQlpZiBbICIke1NSQ1JFVn0iICE9ICJBVVRPSU5DIiBdICYmIFsgIiR7U1JDUkVWfSIgIT0gIklOVkFMSUQiIF07IHRoZW4KKwkJICAgICAgICMgU1JDUkVWX21hY2hpbmVfPE1BQ0hJTkU+IHdhcyBub3Qgc2V0LiBUaGlzIG1lYW5zIHRoYXQgYSBjdXN0b20gcmVjaXBlCisJCSAgICAgICAjIHRoYXQgZG9lc24ndCB1c2UgdGhlIFNSQ1JFVl9GT1JNQVQgIm1hY2hpbmVfbWV0YSIgaXMgYmVpbmcgYnVpbHQuIEluCisJCSAgICAgICAjIHRoaXMgY2FzZSwgd2UgbmVlZCB0byByZXNldCB0byB0aGUgZ2l2ZSBTUkNSRVYgYmVmb3JlIGhlYWRpbmcgdG8gcGF0Y2hpbmcKKwkJICAgICAgIGJibm90ZSAiY3VzdG9tIHJlY2lwZSBpcyBiZWluZyBidWlsdCwgZm9yY2luZyBTUkNSRVYgdG8gJHtTUkNSRVZ9IgorCQkgICAgICAgZm9yY2Vfc3JjcmV2PSIke1NSQ1JFVn0iCisJCWZpCisJZWxzZQorCQlnaXQgY2F0LWZpbGUgLXQgJHttYWNoaW5lX3NyY3Jldn0gPiAvZGV2L251bGwKKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQliYmVycm9yICIke21hY2hpbmVfc3JjcmV2fSBpcyBub3QgYSB2YWxpZCBjb21taXQgSUQuIgorCQkJYmJmYXRhbF9sb2cgIlRoZSBrZXJuZWwgc291cmNlIHRyZWUgbWF5IGJlIG91dCBvZiBzeW5jIgorCQlmaQorCQlmb3JjZV9zcmNyZXY9JHttYWNoaW5lX3NyY3Jldn0KKwlmaQorCisJZ2l0IGNoZWNrb3V0IC1xIC1mICR7bWFjaGluZV9icmFuY2h9CisJaWYgWyAtbiAiJHtmb3JjZV9zcmNyZXZ9IiBdOyB0aGVuCisJCSMgc2VlIGlmIHRoZSBicmFuY2ggd2UgYXJlIGFib3V0IHRvIHBhdGNoIGhhcyBiZWVuIHByb3Blcmx5IHJlc2V0IHRvIHRoZSBkZWZpbmVkCisJCSMgU1JDUkVWIC4uIGlmIG5vdCwgd2UgcmVzZXQgaXQuCisJCWJyYW5jaF9oZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgCisJCWlmIFsgIiR7Zm9yY2Vfc3JjcmV2fSIgIT0gIiR7YnJhbmNoX2hlYWR9IiBdOyB0aGVuCisJCQljdXJyZW50X2JyYW5jaD1gZ2l0IHJldi1wYXJzZSAtLWFiYnJldi1yZWYgSEVBRGAKKwkJCWdpdCBicmFuY2ggIiRjdXJyZW50X2JyYW5jaC1vcmlnIgorCQkJZ2l0IHJlc2V0IC0taGFyZCAke2ZvcmNlX3NyY3Jldn0KKwkJZmkKKwlmaQorfQorCisjIE1hbnkgc2NyaXB0cyB3YW50IHRvIGxvb2sgaW4gYXJjaC8kYXJjaC9ib290IGZvciB0aGUgYm9vdGFibGUKKyMgaW1hZ2UuIFRoaXMgcG9zZXMgYSBwcm9ibGVtIGZvciB2bWxpbnV4IGJhc2VkIGJvb3RpbmcuIFRoaXMgCisjIHRhc2sgYXJyYW5nZXMgdG8gaGF2ZSB2bWxpbnV4IGFwcGVhciBpbiB0aGUgbm9ybWFsaXplZCBkaXJlY3RvcnkKKyMgbG9jYXRpb24uCitkb19rZXJuZWxfbGlua192bWxpbnV4KCkgeworCWlmIFsgISAtZCAiJHtCfS9hcmNoLyR7QVJDSH0vYm9vdCIgXTsgdGhlbgorCQlta2RpciAke0J9L2FyY2gvJHtBUkNIfS9ib290CisJZmkKKwljZCAke0J9L2FyY2gvJHtBUkNIfS9ib290CisJbG4gLXNmIC4uLy4uLy4uL3ZtbGludXgKK30KKworT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAiS0JVSUxEX09VVFBVVCIKK0tCVUlMRF9PVVRQVVQgPSAiJHtCfSIKKworcHl0aG9uICgpIHsKKyAgICAjIElmIGRpZmZjb25maWcgaXMgYXZhaWxhYmxlLCBlbnN1cmUgaXQgcnVucyBhZnRlciBrZXJuZWxfY29uZmlnbWUKKyAgICBpZiAnZG9fZGlmZmNvbmZpZycgaW4gZDoKKyAgICAgICAgYmIuYnVpbGQuYWRkdGFzaygnZG9fZGlmZmNvbmZpZycsIE5vbmUsICdkb19rZXJuZWxfY29uZmlnbWUnLCBkKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJkZmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MKQEAgLTAsMCArMSw0OTAgQEAKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2Uga2VybmVsLW1vZHVsZS1zcGxpdAorCitQUk9WSURFUyArPSAidmlydHVhbC9rZXJuZWwiCitERVBFTkRTICs9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2Mga21vZC1uYXRpdmUgZGVwbW9kd3JhcHBlci1jcm9zcyBiYy1uYXRpdmUiCisKK1MgPSAiJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorQiA9ICIke1dPUktESVJ9L2J1aWxkIgorS0JVSUxEX09VVFBVVCA9ICIke0J9IgorT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAiS0JVSUxEX09VVFBVVCIKKworIyB3ZSBpbmNsdWRlIGdjYyBhYm92ZSwgd2UgZG9udCBuZWVkIHZpcnR1YWwvbGliYworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworS0VSTkVMX0lNQUdFVFlQRSA/PSAiekltYWdlIgorSU5JVFJBTUZTX0lNQUdFID89ICIiCitJTklUUkFNRlNfVEFTSyA/PSAiIgorSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA/PSAiIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCByZQorCisgICAga2VybmVsdHlwZSA9IGQuZ2V0VmFyKCdLRVJORUxfSU1BR0VUWVBFJywgVHJ1ZSkKKworICAgIGQuc2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgcmUuc3ViKHInXC5neiQnLCAnJywga2VybmVsdHlwZSkpCisKKyAgICBpbWFnZSA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfSU1BR0UnLCBUcnVlKQorICAgIGlmIGltYWdlOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1bmRsZV9pbml0cmFtZnMnLCAnZGVwZW5kcycsICcgJHtJTklUUkFNRlNfSU1BR0V9OmRvX3Jvb3RmcycpCisKKyAgICAjIE5PVEU6IHNldHRpbmcgSU5JVFJBTUZTX1RBU0sgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAgICAjICAgICAgIFRoZSBwcmVmZXJyZWQgbWV0aG9kIGlzIHRvIHNldCBJTklUUkFNRlNfSU1BR0UsIGJlY2F1c2UKKyAgICAjICAgICAgIHRoaXMgSU5JVFJBTUZTX1RBU0sgaGFzIGNpcmN1bGFyIGRlcGVuZGVuY3kgcHJvYmxlbXMKKyAgICAjICAgICAgIGlmIHRoZSBpbml0cmFtZnMgcmVxdWlyZXMga2VybmVsIG1vZHVsZXMKKyAgICBpbWFnZV90YXNrID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19UQVNLJywgVHJ1ZSkKKyAgICBpZiBpbWFnZV90YXNrOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdkZXBlbmRzJywgJyAke0lOSVRSQU1GU19UQVNLfScpCit9CisKKyMgSGVyZSB3ZSBwdWxsIGluIGFsbCB2YXJpb3VzIGtlcm5lbCBpbWFnZSB0eXBlcyB3aGljaCB3ZSBzdXBwb3J0LgorIworIyBJbiBjYXNlIHlvdSdyZSB3b25kZXJpbmcgd2h5IGtlcm5lbC5iYmNsYXNzIGluaGVyaXRzIHRoZSBvdGhlciBpbWFnZQorIyB0eXBlcyBpbnN0ZWFkIG9mIHRoZSBvdGhlciB3YXkgYXJvdW5kLCB0aGUgcmVhc29uIGZvciB0aGF0IGlzIHRvCisjIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCB2YXJpb3VzIGN1cnJlbnRseSBleGlzdGluZyBtZXRhLWxheWVycy4KKyMgQnkgcHVsbGluZyBpbiB0aGUgdmFyaW91cyBrZXJuZWwgaW1hZ2UgdHlwZXMgaGVyZSwgd2UgcmV0YWluIHRoZQorIyBvcmlnaW5hbCBiZWhhdmlvciBvZiBrZXJuZWwuYmJjbGFzcywgc28gbm8gbWV0YS1sYXllcnMgc2hvdWxkIGdldAorIyBicm9rZW4uCisjCisjIEtFUk5FTF9DTEFTU0VTIGJ5IGRlZmF1bHQgcHVsbHMgaW4ga2VybmVsLXVpbWFnZS5iYmNsYXNzLCBzaW5jZSB0aGlzCisjIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBvbmx5IHVJbWFnZSB3YXMgc3VwcG9ydGVkLiBUaGlzCisjIHZhcmlhYmxlIGNhbiBiZSBhcHBlbmRlZCBieSB1c2VycyB3aG8gaW1wbGVtZW50IHN1cHBvcnQgZm9yIG5ldyBrZXJuZWwKKyMgaW1hZ2UgdHlwZXMuCisKK0tFUk5FTF9DTEFTU0VTID89ICIga2VybmVsLXVpbWFnZSAiCitpbmhlcml0ICR7S0VSTkVMX0NMQVNTRVN9CisKKyMgT2xkIHN0eWxlIGtlcm5lbHMgbWF5IHNldCAke1N9ID0gJHtXT1JLRElSfS9naXQgZm9yIGV4YW1wbGUKKyMgV2UgbmVlZCB0byBtb3ZlIHRoZXNlIG92ZXIgdG8gU1RBR0lOR19LRVJORUxfRElSLiBXZSBjYW4ndCBqdXN0CisjIGNyZWF0ZSB0aGUgc3ltbGluayBpbiBhZHZhbmNlIGFzIHRoZSBnaXQgZmV0Y2hlciBjYW4ndCBjb3BlIHdpdGgKKyMgdGhlIHN5bWxpbmsuCitkb191bnBhY2tbY2xlYW5kaXJzXSArPSAiICR7U30gJHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICR7Qn0gJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0iCitkb19jbGVhbltjbGVhbmRpcnNdICs9ICIgJHtTfSAke1NUQUdJTkdfS0VSTkVMX0RJUn0gJHtCfSAke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKK2Jhc2VfZG9fdW5wYWNrX2FwcGVuZCAoKSB7CisgICAgcyA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICBpZiBzWy0xXSA9PSAnLyc6CisgICAgICAgICMgZHJvcCB0cmFpbGluZyBzbGFzaCwgc28gdGhhdCBvcy5zeW1saW5rKGtlcm5zcmMsIHMpIGRvZXNuJ3QgdXNlIHMgYXMgZGlyZWN0b3J5IG5hbWUgYW5kIGZhaWwKKyAgICAgICAgcz1zWzotMV0KKyAgICBrZXJuc3JjID0gZC5nZXRWYXIoIlNUQUdJTkdfS0VSTkVMX0RJUiIsIFRydWUpCisgICAgaWYgcyAhPSBrZXJuc3JjOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoa2VybnNyYykKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGtlcm5zcmMsIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgaWYgZC5nZXRWYXIoIkVYVEVSTkFMU1JDIiwgVHJ1ZSk6CisgICAgICAgICAgICAjIFdpdGggRVhURVJOQUxTUkMgUyB3aWxsIG5vdCBiZSB3aXBlZCBzbyB3ZSBjYW4gc3ltbGluayB0byBpdAorICAgICAgICAgICAgb3Muc3ltbGluayhzLCBrZXJuc3JjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW1wb3J0IHNodXRpbAorICAgICAgICAgICAgc2h1dGlsLm1vdmUocywga2VybnNyYykKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoa2VybnNyYywgcykKK30KKworaW5oZXJpdCBrZXJuZWwtYXJjaCBkZXBsb3kKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1tb2R1bGUtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWltYWdlLS4qIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1maXJtd2FyZS0uKiIKKworZXhwb3J0IE9TID0gIiR7VEFSR0VUX09TfSIKK2V4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCisKK0tFUk5FTF9QUklPUklUWSA/PSAiJHtAaW50KGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbMF0pICogMTAwMDAgKyBcCisgICAgICAgICAgICAgICAgICAgICAgIGludChkLmdldFZhcignUFYnLDEpLnNwbGl0KCctJylbMF0uc3BsaXQoJysnKVswXS5zcGxpdCgnLicpWzFdKSAqIDEwMCArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbLTFdKX0iCisKK0tFUk5FTF9SRUxFQVNFID89ICIke0tFUk5FTF9WRVJTSU9OfSIKKworIyBXaGVyZSBidWlsdCBrZXJuZWwgbGllcyBpbiB0aGUga2VybmVsIHRyZWUKK0tFUk5FTF9PVVRQVVQgPz0gImFyY2gvJHtBUkNIfS9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0iCitLRVJORUxfSU1BR0VERVNUID0gImJvb3QiCisKKyMKKyMgY29uZmlndXJhdGlvbgorIworZXhwb3J0IENNRExJTkVfQ09OU09MRSA9ICJjb25zb2xlPSR7QGQuZ2V0VmFyKCJLRVJORUxfQ09OU09MRSIsMSkgb3IgInR0eVMwIn0iCisKK0tFUk5FTF9WRVJTSU9OID0gIiR7QGdldF9rZXJuZWx2ZXJzaW9uX2hlYWRlcnMoJyR7Qn0nKX0iCisKK0tFUk5FTF9MT0NBTFZFUlNJT04gPz0gIiIKKworIyBrZXJuZWxzIGFyZSBnZW5lcmFsbHkgbWFjaGluZSBzcGVjaWZpYworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBVLUJvb3Qgc3VwcG9ydAorVUJPT1RfRU5UUllQT0lOVCA/PSAiMjAwMDgwMDAiCitVQk9PVF9MT0FEQUREUkVTUyA/PSAiJHtVQk9PVF9FTlRSWVBPSU5UfSIKKworIyBTb21lIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBvbiB0aGUgY29tbWFuZCBsaW5lCitLRVJORUxfRVhUUkFfQVJHUyA/PSAiIgorCisjIEZvciB0aGUga2VybmVsLCB3ZSBkb24ndCB3YW50IHRoZSAnLWUgTUFLRUZMQUdTPScgaW4gRVhUUkFfT0VNQUtFLgorIyBXZSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIGtlcm5lbCBNYWtlZmlsZSB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQKK0VYVFJBX09FTUFLRSA9ICIiCisKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID8/PSAiIgorCisjIERlZmluZSB3aGVyZSB0aGUga2VybmVsIGhlYWRlcnMgYXJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0IGFzIHdlbGwgYXMgd2hlcmUKKyMgdGhleSBhcmUgc3RhZ2VkLgorS0VSTkVMX1NSQ19QQVRIID0gIi91c3Ivc3JjL2tlcm5lbCIKKworY29weV9pbml0cmFtZnMoKSB7CisJZWNobyAiQ29weWluZyBpbml0cmFtZnMgaW50byAuL3VzciAuLi4iCisJIyBJbiBjYXNlIHRoZSBkaXJlY3RvcnkgaXMgbm90IGNyZWF0ZWQgeWV0IGZyb20gdGhlIGZpcnN0IHBhc3MgY29tcGlsZToKKwlta2RpciAtcCAke0J9L3VzcgorCSMgRmluZCBhbmQgdXNlIHRoZSBmaXJzdCBpbml0cmFtZnMgaW1hZ2UgYXJjaGl2ZSB0eXBlIHdlIGZpbmQKKwlybSAtZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS5jcGlvCisJZm9yIGltZyBpbiBjcGlvLmd6IGNwaW8ubHo0IGNwaW8ubHpvIGNwaW8ubHptYSBjcGlvLnh6OyBkbworCQlpZiBbIC1lICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWciIF07IHRoZW4KKwkJCWNwICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZyAke0J9L3Vzci8uCisJCQljYXNlICRpbWcgaW4KKwkJCSpneikKKwkJCQllY2hvICJnemlwIGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJZ3VuemlwIC1mICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqbHo0KQorCQkJCWVjaG8gImx6NCBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWx6NCAtZGYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCSpsem8pCisJCQkJZWNobyAibHpvIGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJbHpvcCAtZGYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCSpsem1hKQorCQkJCWVjaG8gImx6bWEgZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlsem1hIC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKnh6KQorCQkJCWVjaG8gInh6IGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJeHogLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQllc2FjCisJCWZpCisJZG9uZQorCWVjaG8gIkZpbmlzaGVkIGNvcHkgb2YgaW5pdHJhbWZzIGludG8gLi91c3IiCit9CisKK0lOSVRSQU1GU19CQVNFX05BTUUgPSAiJHtLRVJORUxfSU1BR0VUWVBFfS1pbml0cmFtZnMtJHtQVn0tJHtQUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKK0lOSVRSQU1GU19CQVNFX05BTUVbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorZG9fYnVuZGxlX2luaXRyYW1mcyAoKSB7CisJaWYgWyAhIC16ICIke0lOSVRSQU1GU19JTUFHRX0iIC1hIHgiJHtJTklUUkFNRlNfSU1BR0VfQlVORExFfSIgPSB4MSBdOyB0aGVuCisJCWVjaG8gIkNyZWF0aW5nIGEga2VybmVsIGltYWdlIHdpdGggYSBidW5kbGVkIGluaXRyYW1mcy4uLiIKKwkJY29weV9pbml0cmFtZnMKKwkJaWYgWyAtZSAke0tFUk5FTF9PVVRQVVR9IF0gOyB0aGVuCisJCQltdiAtZiAke0tFUk5FTF9PVVRQVVR9ICR7S0VSTkVMX09VVFBVVH0uYmFrCisJCWZpCisJCXVzZV9hbHRlcm5hdGVfaW5pdHJkPUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8KKwkJa2VybmVsX2RvX2NvbXBpbGUKKwkJbXYgLWYgJHtLRVJORUxfT1VUUFVUfSAke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcworCQltdiAtZiAke0tFUk5FTF9PVVRQVVR9LmJhayAke0tFUk5FTF9PVVRQVVR9CisJCSMgVXBkYXRlIGluc3RhbGwgYXJlYQorCQllY2hvICJUaGVyZSBpcyBrZXJuZWwgaW1hZ2UgYnVuZGxlZCB3aXRoIGluaXRyYW1mczogJHtCfS8ke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyIKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMgJHtEfS9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0taW5pdHJhbWZzLSR7TUFDSElORX0uYmluCisJCWVjaG8gIiR7Qn0vJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMiCisJZmkKK30KKworcHl0aG9uIGRvX2RldnNoZWxsX3ByZXBlbmQgKCkgeworICAgIG9zLmVudmlyb25bIkxERkxBR1MiXSA9ICcnCit9CisKK2FkZHRhc2sgYnVuZGxlX2luaXRyYW1mcyBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19kZXBsb3kKKwora2VybmVsX2RvX2NvbXBpbGUoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCSMgVGhlICR1c2VfYWx0ZXJuYXRlX2luaXRyZCBpcyBvbmx5IHNldCBmcm9tCisJIyBkb19idW5kbGVfaW5pdHJhbWZzKCkgVGhpcyB2YXJpYWJsZSBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoZQorCSMgY2FzZSB3aGVyZSB3ZSBhcmUgbWFraW5nIGEgc2Vjb25kIHBhc3MgYXQgdGhlIGtlcm5lbAorCSMgY29tcGlsYXRpb24gYW5kIHdlIHdhbnQgdG8gZm9yY2UgdGhlIGtlcm5lbCBidWlsZCB0byB1c2UgYQorCSMgZGlmZmVyZW50IGluaXRyYW1mcyBpbWFnZS4gIFRoZSB3YXkgdG8gZG8gdGhhdCBpbiB0aGUga2VybmVsCisJIyBpcyB0byBzcGVjaWZ5OgorCSMgbWFrZSAuLi5hcmdzLi4uIENPTkZJR19JTklUUkFNRlNfU09VUkNFPXNvbWVfb3RoZXJfaW5pdHJhbWZzLmNwaW8KKwlpZiBbICIkdXNlX2FsdGVybmF0ZV9pbml0cmQiID0gIiIgXSAmJiBbICIke0lOSVRSQU1GU19UQVNLfSIgIT0gIiIgXSA7IHRoZW4KKwkJIyBUaGUgb2xkIHN0eWxlIHdheSBvZiBjb3B5aW5nIGFuIHByZWJ1aWx0IGltYWdlIGFuZCBidWlsZGluZyBpdAorCQkjIGlzIHR1cm5lZCBvbiB2aWEgSU5USVJBTUZTX1RBU0sgIT0gIiIKKwkJY29weV9pbml0cmFtZnMKKwkJdXNlX2FsdGVybmF0ZV9pbml0cmQ9Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U9JHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uY3BpbworCWZpCisJb2VfcnVubWFrZSAke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9ICR7S0VSTkVMX0FMVF9JTUFHRVRZUEV9IENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iICR7S0VSTkVMX0VYVFJBX0FSR1N9ICR1c2VfYWx0ZXJuYXRlX2luaXRyZAorCWlmIHRlc3QgIiR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX0uZ3oiID0gIiR7S0VSTkVMX0lNQUdFVFlQRX0iOyB0aGVuCisJCWd6aXAgLTljIDwgIiR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX0iID4gIiR7S0VSTkVMX09VVFBVVH0iCisJZmkKK30KKworZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTIE1BQ0hJTkUKKwlpZiAoZ3JlcCAtcSAtaSAtZSAnXkNPTkZJR19NT0RVTEVTPXkkJyAke0J9Ly5jb25maWcpOyB0aGVuCisJCW9lX3J1bm1ha2UgLUMgJHtCfSAke1BBUkFMTEVMX01BS0V9IG1vZHVsZXMgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgJHtLRVJORUxfRVhUUkFfQVJHU30KKwllbHNlCisJCWJibm90ZSAibm8gbW9kdWxlcyB0byBjb21waWxlIgorCWZpCit9CithZGR0YXNrIGNvbXBpbGVfa2VybmVsbW9kdWxlcyBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19zdHJpcAorCitrZXJuZWxfZG9faW5zdGFsbCgpIHsKKwkjCisJIyBGaXJzdCBpbnN0YWxsIHRoZSBtb2R1bGVzCisJIworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTIE1BQ0hJTkUKKwlpZiAoZ3JlcCAtcSAtaSAtZSAnXkNPTkZJR19NT0RVTEVTPXkkJyAuY29uZmlnKTsgdGhlbgorCQlvZV9ydW5tYWtlIERFUE1PRD1lY2hvIElOU1RBTExfTU9EX1BBVEg9IiR7RH0iIG1vZHVsZXNfaW5zdGFsbAorCQlybSAiJHtEfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9idWlsZCIKKwkJcm0gIiR7RH0vbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vc291cmNlIgorCQkjIElmIHRoZSBrZXJuZWwvIGRpcmVjdG9yeSBpcyBlbXB0eSByZW1vdmUgaXQgdG8gcHJldmVudCBRQSBpc3N1ZXMKKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgIiR7RH0vbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0va2VybmVsIgorCWVsc2UKKwkJYmJub3RlICJubyBtb2R1bGVzIHRvIGluc3RhbGwiCisJZmkKKworCSMKKwkjIEluc3RhbGwgdmFyaW91cyBrZXJuZWwgb3V0cHV0ICh6SW1hZ2UsIG1hcCBmaWxlLCBjb25maWcsIG1vZHVsZSBzdXBwb3J0IGZpbGVzKQorCSMKKwlpbnN0YWxsIC1kICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfQorCWluc3RhbGwgLWQgJHtEfS9ib290CisJaW5zdGFsbCAtbSAwNjQ0ICR7S0VSTkVMX09VVFBVVH0gJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0KKwlpbnN0YWxsIC1tIDA2NDQgU3lzdGVtLm1hcCAke0R9L2Jvb3QvU3lzdGVtLm1hcC0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLW0gMDY0NCAuY29uZmlnICR7RH0vYm9vdC9jb25maWctJHtLRVJORUxfVkVSU0lPTn0KKwlpbnN0YWxsIC1tIDA2NDQgdm1saW51eCAke0R9L2Jvb3Qvdm1saW51eC0ke0tFUk5FTF9WRVJTSU9OfQorCVsgLWUgTW9kdWxlLnN5bXZlcnMgXSAmJiBpbnN0YWxsIC1tIDA2NDQgTW9kdWxlLnN5bXZlcnMgJHtEfS9ib290L01vZHVsZS5zeW12ZXJzLSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kcHJvYmUuZAorfQorZG9faW5zdGFsbFtwcmVmdW5jc10gKz0gInBhY2thZ2VfZ2V0X2F1dG9fcHIiCisKK2FkZHRhc2sgc2hhcmVkX3dvcmtkaXIgYWZ0ZXIgZG9fY29tcGlsZSBiZWZvcmUgZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzCithZGR0YXNrIHNoYXJlZF93b3JrZGlyX3NldHNjZW5lCisKK2RvX3NoYXJlZF93b3JrZGlyX3NldHNjZW5lICgpIHsKKwlleGl0IDEKK30KKworZW1pdF9kZXBtb2RfcGtnZGF0YSgpIHsKKwkjIFN0YXNoIGRhdGEgZm9yIGRlcG1vZAorCWluc3RhbGwgLWQgJHtQS0dERVNUV09SS30va2VybmVsLWRlcG1vZC8KKwllY2hvICIke0tFUk5FTF9WRVJTSU9OfSIgPiAke1BLR0RFU1RXT1JLfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uCisJY3AgJHtCfS9TeXN0ZW0ubWFwICR7UEtHREVTVFdPUkt9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC0ke0tFUk5FTF9WRVJTSU9OfQorfQorCitQQUNLQUdFRlVOQ1MgKz0gImVtaXRfZGVwbW9kX3BrZ2RhdGEiCisKK2RvX3NoYXJlZF93b3JrZGlyICgpIHsKKwljZCAke0J9CisKKwlrZXJuZWxkaXI9JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0KKwlpbnN0YWxsIC1kICRrZXJuZWxkaXIKKworCSMKKwkjIFN0b3JlIHRoZSBrZXJuZWwgdmVyc2lvbiBpbiBzeXNyb290cyBmb3IgbW9kdWxlLWJhc2UuYmJjbGFzcworCSMKKworCWVjaG8gIiR7S0VSTkVMX1ZFUlNJT059IiA+ICRrZXJuZWxkaXIva2VybmVsLWFiaXZlcnNpb24KKworCSMgQ29weSBmaWxlcyByZXF1aXJlZCBmb3IgbW9kdWxlIGJ1aWxkcworCWNwIFN5c3RlbS5tYXAgJGtlcm5lbGRpci9TeXN0ZW0ubWFwLSR7S0VSTkVMX1ZFUlNJT059CisJY3AgTW9kdWxlLnN5bXZlcnMgJGtlcm5lbGRpci8KKwljcCAuY29uZmlnICRrZXJuZWxkaXIvCisJbWtkaXIgLXAgJGtlcm5lbGRpci9pbmNsdWRlL2NvbmZpZworCWNwIGluY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlICRrZXJuZWxkaXIvaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UKKworCSMgV2UgY2FuIGFsc28gY29weSBvdmVyIGFsbCB0aGUgZ2VuZXJhdGVkIGZpbGVzIGFuZCBhdm9pZCBzcGVjaWFsIGNhc2VzCisJIyBsaWtlIHZlcnNpb24uaCwgYnV0IHdlJ3ZlIG9wdGVkIHRvIGtlZXAgdGhpcyBzbWFsbCB1bnRpbCBmaWxlIGNyZWVwIHN0YXJ0cworCSMgdG8gaGFwcGVuCisJaWYgWyAtZSBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBdOyB0aGVuCisJCW1rZGlyIC1wICRrZXJuZWxkaXIvaW5jbHVkZS9saW51eAorCQljcCBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCAka2VybmVsZGlyL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oCisJZmkKKworCSMgQXMgb2YgTGludXgga2VybmVsIHZlcnNpb24gMy4wLjEsIHRoZSBjbGVhbiB0YXJnZXQgcmVtb3ZlcworCSMgYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubyB3aGljaCBpcyBwcmVzZW50IGluCisJIyBLQlVJTERfTERGTEFHU19NT0RVTEUsIG1ha2luZyBpdCByZXF1aXJlZCB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzLgorCWlmIFsgJHtBUkNIfSA9ICJwb3dlcnBjIiBdOyB0aGVuCisJCW1rZGlyIC1wICRrZXJuZWxkaXIvYXJjaC9wb3dlcnBjL2xpYi8KKwkJY3AgYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubyAka2VybmVsZGlyL2FyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8KKwlmaQorCisJaWYgWyAtZCBpbmNsdWRlL2dlbmVyYXRlZCBdOyB0aGVuCisJCW1rZGlyIC1wICRrZXJuZWxkaXIvaW5jbHVkZS9nZW5lcmF0ZWQvCisJCWNwIC1mUiBpbmNsdWRlL2dlbmVyYXRlZC8qICRrZXJuZWxkaXIvaW5jbHVkZS9nZW5lcmF0ZWQvCisJZmkKKworCWlmIFsgLWQgYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9hcmNoLyR7QVJDSH0vaW5jbHVkZS9nZW5lcmF0ZWQvCisJCWNwIC1mUiBhcmNoLyR7QVJDSH0vaW5jbHVkZS9nZW5lcmF0ZWQvKiAka2VybmVsZGlyL2FyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZC8KKwlmaQorfQorCisjIFdlIGRvbid0IG5lZWQgdG8gc3RhZ2UgYW55dGhpbmcsIG5vdCB0aGUgbW9kdWxlcy9maXJtd2FyZSBzaW5jZSB0aG9zZSB3b3VsZCBjbGFzaCB3aXRoIGxpbnV4LWZpcm13YXJlCitzeXNyb290X3N0YWdlX2FsbCAoKSB7CisJOgorfQorCitLRVJORUxfQ09ORklHX0NPTU1BTkQgPz0gIm9lX3J1bm1ha2VfY2FsbCAtQyAke1N9IE89JHtCfSBvbGRub2NvbmZpZyB8fCB5ZXMgJycgfCBvZV9ydW5tYWtlIC1DICR7U30gTz0ke0J9IG9sZGNvbmZpZyIKKwora2VybmVsX2RvX2NvbmZpZ3VyZSgpIHsKKwkjIGZpeGVzIGV4dHJhICsgaW4gL2xpYi9tb2R1bGVzLzIuNi4zNysKKwkjICQgc2NyaXB0cy9zZXRsb2NhbHZlcnNpb24gLiA9PiArCisJIyAkIG1ha2Uga2VybmVsdmVyc2lvbiA9PiAyLjYuMzcKKwkjICQgbWFrZSBrZXJuZWxyZWxlYXNlID0+IDIuNi4zNysKKwl0b3VjaCAke0J9Ly5zY212ZXJzaW9uICR7U30vLnNjbXZlcnNpb24KKworCWlmIFsgIiR7U30iICE9ICIke0J9IiBdICYmIFsgLWYgIiR7U30vLmNvbmZpZyIgXSAmJiBbICEgLWYgIiR7Qn0vLmNvbmZpZyIgXTsgdGhlbgorCQltdiAiJHtTfS8uY29uZmlnIiAiJHtCfS8uY29uZmlnIgorCWZpCisKKwkjIENvcHkgZGVmY29uZmlnIHRvIC5jb25maWcgaWYgLmNvbmZpZyBkb2VzIG5vdCBleGlzdC4gVGhpcyBhbGxvd3MKKwkjIHJlY2lwZXMgdG8gbWFuYWdlIHRoZSAuY29uZmlnIHRoZW1zZWx2ZXMgaW4gZG9fY29uZmlndXJlX3ByZXBlbmQoKS4KKwlpZiBbIC1mICIke1dPUktESVJ9L2RlZmNvbmZpZyIgXSAmJiBbICEgLWYgIiR7Qn0vLmNvbmZpZyIgXTsgdGhlbgorCQljcCAiJHtXT1JLRElSfS9kZWZjb25maWciICIke0J9Ly5jb25maWciCisJZmkKKwlldmFsICR7S0VSTkVMX0NPTkZJR19DT01NQU5EfQorfQorCitkb19zYXZlZGVmY29uZmlnKCkgeworCW9lX3J1bm1ha2UgLUMgJHtCfSBzYXZlZGVmY29uZmlnCit9Citkb19zYXZlZGVmY29uZmlnW25vc3RhbXBdID0gIjEiCithZGR0YXNrIHNhdmVkZWZjb25maWcgYWZ0ZXIgZG9fY29uZmlndXJlCisKK2luaGVyaXQgY21sMQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19jb25maWd1cmUKKworIyBrZXJuZWwtYmFzZSBiZWNvbWVzIGtlcm5lbC0ke0tFUk5FTF9WRVJTSU9OfQorIyBrZXJuZWwtaW1hZ2UgYmVjb21lcyBrZXJuZWwtaW1hZ2UtJHtLRVJORUxfVkVSSVNPTn0KK1BBQ0tBR0VTID0gImtlcm5lbCBrZXJuZWwtYmFzZSBrZXJuZWwtdm1saW51eCBrZXJuZWwtaW1hZ2Uga2VybmVsLWRldiBrZXJuZWwtbW9kdWxlcyIKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTX2tlcm5lbC1iYXNlID0gIi9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9tb2R1bGVzLm9yZGVyIC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9tb2R1bGVzLmJ1aWx0aW4iCitGSUxFU19rZXJuZWwtaW1hZ2UgPSAiL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSoiCitGSUxFU19rZXJuZWwtZGV2ID0gIi9ib290L1N5c3RlbS5tYXAqIC9ib290L01vZHVsZS5zeW12ZXJzKiAvYm9vdC9jb25maWcqICR7S0VSTkVMX1NSQ19QQVRIfSAvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vYnVpbGQiCitGSUxFU19rZXJuZWwtdm1saW51eCA9ICIvYm9vdC92bWxpbnV4KiIKK0ZJTEVTX2tlcm5lbC1tb2R1bGVzID0gIiIKK1JERVBFTkRTX2tlcm5lbCA9ICJrZXJuZWwtYmFzZSIKKyMgQWxsb3cgbWFjaGluZXMgdG8gb3ZlcnJpZGUgdGhpcyBkZXBlbmRlbmN5IGlmIGtlcm5lbCBpbWFnZSBmaWxlcyBhcmUgCisjIG5vdCB3YW50ZWQgaW4gaW1hZ2VzIGFzIHN0YW5kYXJkCitSREVQRU5EU19rZXJuZWwtYmFzZSA/PSAia2VybmVsLWltYWdlIgorUEtHX2tlcm5lbC1pbWFnZSA9ICJrZXJuZWwtaW1hZ2UtJHtAbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyR7S0VSTkVMX1ZFUlNJT059Jyl9IgorUkRFUEVORFNfa2VybmVsLWltYWdlICs9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdLRVJORUxfSU1BR0VUWVBFJywgJ3ZtbGludXgnLCAna2VybmVsLXZtbGludXgnLCAnJywgZCl9IgorUEtHX2tlcm5lbC1iYXNlID0gImtlcm5lbC0ke0BsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJHtLRVJORUxfVkVSU0lPTn0nKX0iCitSUFJPVklERVNfa2VybmVsLWJhc2UgKz0gImtlcm5lbC0ke0tFUk5FTF9WRVJTSU9OfSIKK0FMTE9XX0VNUFRZX2tlcm5lbCA9ICIxIgorQUxMT1dfRU1QVFlfa2VybmVsLWJhc2UgPSAiMSIKK0FMTE9XX0VNUFRZX2tlcm5lbC1pbWFnZSA9ICIxIgorQUxMT1dfRU1QVFlfa2VybmVsLW1vZHVsZXMgPSAiMSIKK0RFU0NSSVBUSU9OX2tlcm5lbC1tb2R1bGVzID0gIktlcm5lbCBtb2R1bGVzIG1ldGEgcGFja2FnZSIKKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1iYXNlICgpIHsKKwlpZiBbICEgLWUgIiREL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059IiBdOyB0aGVuCisJCW1rZGlyIC1wICREL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059CisJZmkKKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlkZXBtb2R3cmFwcGVyIC1hIC1iICREICR7S0VSTkVMX1ZFUlNJT059CisJZWxzZQorCQlkZXBtb2QgLWEgJHtLRVJORUxfVkVSU0lPTn0KKwlmaQorfQorCitwa2dfcG9zdGluc3Rfa2VybmVsLWltYWdlICgpIHsKKwl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0tFUk5FTF9JTUFHRVRZUEV9ICR7S0VSTkVMX0lNQUdFVFlQRX0gLyR7S0VSTkVMX0lNQUdFREVTVH0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQorfQorCitwa2dfcG9zdHJtX2tlcm5lbC1pbWFnZSAoKSB7CisJdXBkYXRlLWFsdGVybmF0aXZlcyAtLXJlbW92ZSAke0tFUk5FTF9JTUFHRVRZUEV9ICR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gfHwgdHJ1ZQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInNwbGl0X2tlcm5lbF9wYWNrYWdlcyAiCisKK3B5dGhvbiBzcGxpdF9rZXJuZWxfcGFja2FnZXMgKCkgeworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHJvb3Q9Jy9saWIvZmlybXdhcmUnLCBmaWxlX3JlZ2V4PSdeKC4qKVwuKGJpbnxmd3xjaXN8ZHNwKSQnLCBvdXRwdXRfcGF0dGVybj0na2VybmVsLWZpcm13YXJlLSVzJywgZGVzY3JpcHRpb249J0Zpcm13YXJlIGZvciAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBleHRyYV9kZXBlbmRzPScnKQorfQorCitkb19zdHJpcCgpIHsKKwlpZiBbIC1uICIke0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OU30iIF07IHRoZW4KKwkJaWYgWyAiJHtLRVJORUxfSU1BR0VUWVBFfSIgIT0gInZtbGludXgiIF07IHRoZW4KKwkJCWJid2FybiAiaW1hZ2UgdHlwZSB3aWxsIG5vdCBiZSBzdHJpcHBlZCAobm90IHN1cHBvcnRlZCk6ICR7S0VSTkVMX0lNQUdFVFlQRX0iCisJCQlyZXR1cm4KKwkJZmkKKworCQljZCAke0J9CisJCWhlYWRlcnM9YCIkQ1JPU1NfQ09NUElMRSJyZWFkZWxmIC1TICR7S0VSTkVMX09VVFBVVH0gfCBcCisJCQkgIGdyZXAgIl4gXHsxLFx9XFtbMC05IF1cezEsXH1cXSBbXiBdIiB8IFwKKwkJCSAgc2VkICJzL14gXHsxLFx9XFtbMC05IF1cezEsXH1cXSAvLyIgfCBcCisJCQkgIGdhd2sgJ3twcmludCAkMX0nYAorCisJCWZvciBzdHIgaW4gJHtLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlN9OyBkbyB7CisJCQlpZiBbICIkaGVhZGVycyIgIT0gKiIkc3RyIiogXTsgdGhlbgorCQkJCWJid2FybiAiU2VjdGlvbiBub3QgZm91bmQ6ICRzdHIiOworCQkJZmkKKworCQkJIiRDUk9TU19DT01QSUxFInN0cmlwIC1zIC1SICRzdHIgJHtLRVJORUxfT1VUUFVUfQorCQl9OyBkb25lCisKKwkJYmJub3RlICJLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlMgaXMgc2V0LCBzdHJpcHBpbmcgc2VjdGlvbnM6IiBcCisJCQkiJHtLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlN9IgorCWZpOworfQorZG9fc3RyaXBbZGlyc10gPSAiJHtCfSIKKworYWRkdGFzayBkb19zdHJpcCBiZWZvcmUgZG9fc2l6ZWNoZWNrIGFmdGVyIGRvX2tlcm5lbF9saW5rX3ZtbGludXgKKworIyBTdXBwb3J0IGNoZWNraW5nIHRoZSBrZXJuZWwgc2l6ZSBzaW5jZSBzb21lIGtlcm5lbHMgbmVlZCB0byByZXNpZGUgaW4gcGFydGl0aW9ucworIyB3aXRoIGEgZml4ZWQgbGVuZ3RoIG9yIHRoZXJlIGlzIGEgbGltaXQgaW4gdHJhbnNmZXJyaW5nIHRoZSBrZXJuZWwgdG8gbWVtb3J5Citkb19zaXplY2hlY2soKSB7CisJaWYgWyAhIC16ICIke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSIgXTsgdGhlbgorCQlpbnZhbGlkPWBlY2hvICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IHwgc2VkICdzL1swLTldLy9nJ2AKKwkJaWYgWyAtbiAiJGludmFsaWQiIF07IHRoZW4KKwkJCWRpZSAiSW52YWxpZCBLRVJORUxfSU1BR0VfTUFYU0laRTogJHtLRVJORUxfSU1BR0VfTUFYU0laRX0sIHNob3VsZCBiZSBhbiBpbnRlZ2VyeCAoVGhlIHVuaXQgaXMgS2J5dGVzKSIKKwkJZmkKKwkJc2l6ZT1gZHUgLWtzICR7Qn0vJHtLRVJORUxfT1VUUFVUfSB8IGF3ayAneyBwcmludCAkMX0nYAorCQlpZiBbICRzaXplIC1nZSAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSBdOyB0aGVuCisJCQlkaWUgIlRoaXMga2VybmVsIChzaXplPSRzaXplKEspID4gJHtLRVJORUxfSU1BR0VfTUFYU0laRX0oSykpIGlzIHRvbyBiaWcgZm9yIHlvdXIgZGV2aWNlLiBQbGVhc2UgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgbWFraW5nIG1vcmUgb2YgaXQgbW9kdWxhci4iCisJCWZpCisJZmkKK30KK2RvX3NpemVjaGVja1tkaXJzXSA9ICIke0J9IgorCithZGR0YXNrIHNpemVjaGVjayBiZWZvcmUgZG9faW5zdGFsbCBhZnRlciBkb19zdHJpcAorCitLRVJORUxfSU1BR0VfQkFTRV9OQU1FID89ICIke0tFUk5FTF9JTUFHRVRZUEV9LSR7UEtHRX0tJHtQS0dWfS0ke1BLR1J9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisjIERvbid0IGluY2x1ZGUgdGhlIERBVEVUSU1FIHZhcmlhYmxlIGluIHRoZSBzc3RhdGUgcGFja2FnZSBzaWduYXR1cmVzCitLRVJORUxfSU1BR0VfQkFTRV9OQU1FW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKK0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUUgPz0gIiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtNQUNISU5FfSIKK01PRFVMRV9JTUFHRV9CQVNFX05BTUUgPz0gIm1vZHVsZXMtJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKK01PRFVMRV9JTUFHRV9CQVNFX05BTUVbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorTU9EVUxFX1RBUkJBTExfQkFTRV9OQU1FID89ICIke01PRFVMRV9JTUFHRV9CQVNFX05BTUV9LnRneiIKKyMgRG9uJ3QgaW5jbHVkZSB0aGUgREFURVRJTUUgdmFyaWFibGUgaW4gdGhlIHNzdGF0ZSBwYWNrYWdlIHNpZ25hdHVyZXMKK01PRFVMRV9UQVJCQUxMX1NZTUxJTktfTkFNRSA/PSAibW9kdWxlcy0ke01BQ0hJTkV9LnRneiIKK01PRFVMRV9UQVJCQUxMX0RFUExPWSA/PSAiMSIKKwora2VybmVsX2RvX2RlcGxveSgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtLRVJORUxfT1VUUFVUfSAke0RFUExPWURJUn0vJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfS5iaW4KKwlpZiBbICR7TU9EVUxFX1RBUkJBTExfREVQTE9ZfSA9ICIxIiBdICYmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnIC5jb25maWcpOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vbGliCisJCXRhciAtY3Z6ZiAke0RFUExPWURJUn0vJHtNT0RVTEVfVEFSQkFMTF9CQVNFX05BTUV9IC1DICR7RH0gbGliCisJCWxuIC1zZiAke01PRFVMRV9UQVJCQUxMX0JBU0VfTkFNRX0gJHtERVBMT1lESVJ9LyR7TU9EVUxFX1RBUkJBTExfU1lNTElOS19OQU1FfQorCWZpCisKKwlsbiAtc2YgJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfS5iaW4gJHtERVBMT1lESVJ9LyR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0uYmluCisJbG4gLXNmICR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0uYmluICR7REVQTE9ZRElSfS8ke0tFUk5FTF9JTUFHRVRZUEV9CisKKwljcCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0ICR7REVQTE9ZRElSfS9SRUFETUVfLV9ET19OT1RfREVMRVRFX0ZJTEVTX0lOX1RISVNfRElSRUNUT1JZLnR4dAorCisJY2QgJHtCfQorCSMgVXBkYXRlIGRlcGxveSBkaXJlY3RvcnkKKwlpZiBbIC1lICIke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyIgXTsgdGhlbgorCQllY2hvICJDb3B5aW5nIGRlcGxveSBrZXJuZWwtaW5pdHJhbWZzIGltYWdlIGFuZCBzZXR0aW5nIHVwIGxpbmtzLi4uIgorCQlpbml0cmFtZnNfYmFzZV9uYW1lPSR7SU5JVFJBTUZTX0JBU0VfTkFNRX0KKwkJaW5pdHJhbWZzX3N5bWxpbmtfbmFtZT0ke0tFUk5FTF9JTUFHRVRZUEV9LWluaXRyYW1mcy0ke01BQ0hJTkV9CisJCWluc3RhbGwgLW0gMDY0NCAke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyAke0RFUExPWURJUn0vJHtpbml0cmFtZnNfYmFzZV9uYW1lfS5iaW4KKwkJY2QgJHtERVBMT1lESVJ9CisJCWxuIC1zZiAke2luaXRyYW1mc19iYXNlX25hbWV9LmJpbiAke2luaXRyYW1mc19zeW1saW5rX25hbWV9LmJpbgorCWZpCit9Citkb19kZXBsb3lbZGlyc10gPSAiJHtERVBMT1lESVJ9ICR7Qn0iCitkb19kZXBsb3lbcHJlZnVuY3NdICs9ICJwYWNrYWdlX2dldF9hdXRvX3ByIgorCithZGR0YXNrIGRlcGxveSBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fZGVwbG95CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbHNyYy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmZDQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2tlcm5lbHNyYy5iYmNsYXNzCkBAIC0wLDAgKzEsMTAgQEAKK1MgPSAiJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19wYXRjaCIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19wb3B1bGF0ZV9zeXNyb290IgorS0VSTkVMX1ZFUlNJT04gPSAiJHtAZ2V0X2tlcm5lbHZlcnNpb25fZmlsZSgiJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0iKX0iCisKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2UKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGliX3BhY2thZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYl9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0OWY1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYl9wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACisjCisjICR7UE59LWJpbiBpcyBkZWZpbmVkIGluIGJpdGJha2UuY29uZgorIworIyBXZSBuZWVkIHRvIGFsbG93IHRoZSBvdGhlciBwYWNrYWdlcyB0byBiZSBncmVlZHkgd2l0aCB3aGF0IHRoZXkKKyMgd2FudCBvdXQgb2YgL3Vzci9iaW4gYW5kIC91c3Ivc2JpbiBiZWZvcmUgJHtQTn0tYmluIGdldHMgZ3JlZWR5LgorIyAKK1BBQ0tBR0VfQkVGT1JFX1BOID0gIiR7UE59LWJpbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJjLWNvbW1vbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzgwMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJjLWNvbW1vbi5iYmNsYXNzCkBAIC0wLDAgKzEsNDMgQEAKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsX3Jvb3Q9JHtEfSBpbnN0YWxsCisJZm9yIHIgaW4gJHtycGNzdmN9OyBkbworCQloPWBlY2hvICRyfHNlZCAtZSdzLFwueCQsLmgsJ2AKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vc3VucnBjL3JwY3N2Yy8kaCAke0R9LyR7aW5jbHVkZWRpcn0vcnBjc3ZjLworCWRvbmUKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS8gCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZXRjL2xkLnNvLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9LworCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxlZGlyfQorCW1ha2UgLWYgJHtXT1JLRElSfS9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsgSU49IiR7U30vbG9jYWxlZGF0YS9TVVBQT1JURUQiIE9VVD0iJHtXT1JLRElSfS9TVVBQT1JURUQiCisJIyBnZXQgcmlkIG9mIHNvbWUgYnJva2VuIGZpbGVzLi4uCisJZm9yIGkgaW4gJHtHTElCQ19CUk9LRU5fTE9DQUxFU307IGRvCisJCWdyZXAgLXYgJGkgJHtXT1JLRElSfS9TVVBQT1JURUQgPiAke1dPUktESVJ9L1NVUFBPUlRFRC50bXAKKwkJbXYgJHtXT1JLRElSfS9TVVBQT1JURUQudG1wICR7V09SS0RJUn0vU1VQUE9SVEVECisJZG9uZQorCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L3JwYworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS96b25laW5mbworCXJtIC1yZiAke0R9JHtsaWJleGVjZGlyfS9nZXRjb25mCit9CisKK2RlZiBnZXRfbGliY19mcHVfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JywgJ3BwYy1lZmQnIF06CisgICAgICAgIHJldHVybiAiLS13aXRob3V0LWZwIgorICAgIHJldHVybiAiIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpOgorICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBicG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKyAgICAgICAgcHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgIyBTZXQgdGhlIGJhc2UgcGFja2FnZS4uLgorICAgICAgICBkLnNldFZhcignUEtHXycgKyBwcmVmaXggKyBicG4sIHByZWZpeCArICdsaWJjNicpCisgICAgICAgIGxpYmNwcmVmaXggPSBwcmVmaXggKyBicG4gKyAnLScKKyAgICAgICAgZm9yIHAgaW4gcGtnczoKKyAgICAgICAgICAgICMgQW5kIGFsbCB0aGUgc3VicGFja2FnZXMuCisgICAgICAgICAgICBpZiBwLnN0YXJ0c3dpdGgobGliY3ByZWZpeCk6CisgICAgICAgICAgICAgICAgcmVuYW1lZCA9IHAucmVwbGFjZShicG4sICdsaWJjNicsIDEpCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18nICsgcCwgcmVuYW1lZCkKKyAgICAgICAgIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCAtZGJnIHBhY2thZ2UKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JQUk9WSURFU18nICsgbGliY3ByZWZpeCArICdkYmcnLCAnICcgKyBwcmVmaXggKyAnbGliYy1kYmcnKQorICAgICAgICBkLmFwcGVuZFZhcignUkNPTkZMSUNUU18nICsgbGliY3ByZWZpeCArICdkYmcnLCAnICcgKyBwcmVmaXggKyAnbGliYy1kYmcnKQorICAgICAgICBkLmFwcGVuZFZhcignUlJFUExBQ0VTXycgKyBsaWJjcHJlZml4ICsgJ2RiZycsICcgJyArIHByZWZpeCArICdsaWJjLWRiZycpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJjLXBhY2thZ2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YmU2OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWJjLXBhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDM4OCBAQAorIworIyBUaGlzIGNsYXNzIGtub3dzIGhvdyB0byBwYWNrYWdlIHVwIFtlXWdsaWJjLiBJdHMgc2hhcmVkIHNpbmNlIHByZWJ1aWxkIGJpbmFyeSB0b29sY2hhaW5zCisjIG1heSBuZWVkIHBhY2thZ2luZyBhbmQgaXRzIHBvaW50bGVzcyB0byBkdXBsaWNhdGUgdGhpcyBjb2RlLgorIworIyBDYWxsZXIgc2hvdWxkIHNldCBHTElCQ19JTlRFUk5BTF9VU0VfQklOQVJZX0xPQ0FMRSB0byBvbmUgb2Y6CisjICAiY29tcGlsZSIgLSBVc2UgUUVNVSB0byBnZW5lcmF0ZSB0aGUgYmluYXJ5IGxvY2FsZSBmaWxlcworIyAgInByZWNvbXBpbGVkIiAtIFRoZSBiaW5hcnkgbG9jYWxlIGZpbGVzIGFyZSBwcmVnZW5lcmF0ZWQgYW5kIGFscmVhZHkgcHJlc2VudAorIyAgIm9uZGV2aWNlIiAtIFRoZSBkZXZpY2Ugd2lsbCBidWlsZCB0aGUgbG9jYWxlIGZpbGVzIHVwb24gZmlyc3QgYm9vdCB0aHJvdWdoIHRoZSBwb3N0aW5zdAorCitHTElCQ19JTlRFUk5BTF9VU0VfQklOQVJZX0xPQ0FMRSA/PSAib25kZXZpY2UiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgZW5hYmxlZCA9IGQuZ2V0VmFyKCJFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OIiwgVHJ1ZSkKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBwbi5lbmRzd2l0aCgiLWluaXRpYWwiKToKKyAgICAgICAgZW5hYmxlZCA9IEZhbHNlCisKKyAgICBpZiBlbmFibGVkIGFuZCBpbnQoZW5hYmxlZCk6CisgICAgICAgIGltcG9ydCByZQorCisgICAgICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICAgICAgYmluYXJ5X2FyY2hlcyA9IGQuZ2V0VmFyKCJCSU5BUllfTE9DQUxFX0FSQ0hFUyIsIFRydWUpIG9yICIiCisgICAgICAgIHVzZV9jcm9zc19sb2NhbGVkZWYgPSBkLmdldFZhcigiTE9DQUxFX0dFTkVSQVRJT05fV0lUSF9DUk9TUy1MT0NBTEVERUYiLCBUcnVlKSBvciAiIgorCisgICAgICAgIGZvciByZWdleHAgaW4gYmluYXJ5X2FyY2hlcy5zcGxpdCgiICIpOgorICAgICAgICAgICAgciA9IHJlLmNvbXBpbGUocmVnZXhwKQorCisgICAgICAgICAgICBpZiByLm1hdGNoKHRhcmdldF9hcmNoKToKKyAgICAgICAgICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIoIkRFUEVORFMiLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHVzZV9jcm9zc19sb2NhbGVkZWYgPT0gIjEiIDoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9ICIlcyBjcm9zcy1sb2NhbGVkZWYtbmF0aXZlIiAlIGRlcGVuZHMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0gIiVzIHFlbXUtbmF0aXZlIiAlIGRlcGVuZHMKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiREVQRU5EUyIsIGRlcGVuZHMpCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFIiwgImNvbXBpbGUiKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAjIHRyeSB0byBmaXggZGlzYWJsZSBjaGFyc2V0cy9sb2NhbGVzL2xvY2FsZS1jb2RlIGNvbXBpbGUgZmFpbAorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jaGFyc2V0cycsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICAgICAgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZXMnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGUtY29kZScsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfTk9fR0NPTlYnLCAnMCcpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfTk9fR0NPTlYnLCAnMScpCit9CisKK09WRVJSSURFU19hcHBlbmQgPSAiOiR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIGlmIFsgLWUgJHtTfS9lbGYvbGRkLmJhc2guaW4gXTsgdGhlbgorICAgICAgICAgICAgICAgIHNlZCAtZSAicyNAQkFTSEAjL2Jpbi9zaCMiIC1pICR7U30vZWxmL2xkZC5iYXNoLmluCisgICAgICAgIGZpCit9CisKKworCisjIGluZGVudGF0aW9uIHJlbW92ZWQgb24gcHVycG9zZQorbG9jYWxlX2Jhc2VfcG9zdGluc3QoKSB7CisjIS9iaW4vc2gKKworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCWV4aXQgMQorZmkKKworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK21rZGlyIC1wICR7VE1QX0xPQ0FMRX0KK2lmIFsgLWYgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlIF07IHRoZW4KKyAgICAgICAgY3AgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlICR7VE1QX0xPQ0FMRX0vCitmaQorbG9jYWxlZGVmIC0taW5wdXRmaWxlPSR7ZGF0YWRpcn0vaTE4bi9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAtLXByZWZpeD0vdG1wL2xvY2FsZSAlcworbWtkaXIgLXAgJHtsb2NhbGVkaXJ9LworbXYgJHtUTVBfTE9DQUxFfS9sb2NhbGUtYXJjaGl2ZSAke2xvY2FsZWRpcn0vCitybSAtcmYgJHtUTVBfTE9DQUxFfQorfQorCisjIGluZGVudGF0aW9uIHJlbW92ZWQgb24gcHVycG9zZQorbG9jYWxlX2Jhc2VfcG9zdHJtKCkgeworIyEvYmluL3NoCisKK3JtIC1yZiAke1RNUF9MT0NBTEV9Citta2RpciAtcCAke1RNUF9MT0NBTEV9CitpZiBbIC1mICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSBdOyB0aGVuCisJY3AgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlICR7VE1QX0xPQ0FMRX0vCitmaQorbG9jYWxlZGVmIC0tZGVsZXRlLWZyb20tYXJjaGl2ZSAtLWlucHV0ZmlsZT0ke2RhdGFkaXJ9L2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzIC0tcHJlZml4PS90bXAvbG9jYWxlICVzCittdiAke1RNUF9MT0NBTEV9L2xvY2FsZS1hcmNoaXZlICR7bG9jYWxlZGlyfS8KK3JtIC1yZiAke1RNUF9MT0NBTEV9Cit9CisKKworVE1QX0xPQ0FMRT0iL3RtcC9sb2NhbGUke2xvY2FsZWRpcn0iCitMT0NBTEVUUkVFU1JDID89ICIke1BLR0R9IgorCitkb19wcmVwX2xvY2FsZV90cmVlKCkgeworCXRyZWVkaXI9JHtXT1JLRElSfS9sb2NhbGUtdHJlZQorCXJtIC1yZiAkdHJlZWRpcgorCW1rZGlyIC1wICR0cmVlZGlyLyR7YmFzZV9iaW5kaXJ9ICR0cmVlZGlyLyR7YmFzZV9saWJkaXJ9ICR0cmVlZGlyLyR7ZGF0YWRpcn0gJHRyZWVkaXIvJHtsb2NhbGVkaXJ9CisJdGFyIC1jZiAtIC1DICR7TE9DQUxFVFJFRVNSQ30ke2RhdGFkaXJ9IC1wIGkxOG4gfCB0YXIgLXhmIC0gLUMgJHRyZWVkaXIvJHtkYXRhZGlyfQorCSMgdW56aXAgdG8gYXZvaWQgcGFyc2luZyBlcnJvcnMKKwlmb3IgaSBpbiAkdHJlZWRpci8ke2RhdGFkaXJ9L2kxOG4vY2hhcm1hcHMvKmd6OyBkbyAKKwkJZ3VuemlwICRpCisJZG9uZQorCXRhciAtY2YgLSAtQyAke0xPQ0FMRVRSRUVTUkN9JHtiYXNlX2xpYmRpcn0gLXAgLiB8IHRhciAteGYgLSAtQyAkdHJlZWRpci8ke2Jhc2VfbGliZGlyfQorCWlmIFsgLWYgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9saWIvbGliZ2NjX3MuKiBdOyB0aGVuCisJCXRhciAtY2YgLSAtQyAke1NUQUdJTkdfRElSX05BVElWRX0vJHtwcmVmaXhfbmF0aXZlfS8ke2Jhc2VfbGliZGlyfSAtcCBsaWJnY2Nfcy4qIHwgdGFyIC14ZiAtIC1DICR0cmVlZGlyLyR7YmFzZV9saWJkaXJ9CisJZmkKKwlpbnN0YWxsIC1tIDA3NTUgJHtMT0NBTEVUUkVFU1JDfSR7YmluZGlyfS9sb2NhbGVkZWYgJHRyZWVkaXIvJHtiYXNlX2JpbmRpcn0KK30KKworZG9fY29sbGVjdF9iaW5zX2Zyb21fbG9jYWxlX3RyZWUoKSB7CisJdHJlZWRpcj0ke1dPUktESVJ9L2xvY2FsZS10cmVlCisKKwlwYXJlbnQ9JChkaXJuYW1lICR7bG9jYWxlZGlyfSkKKwlta2RpciAtcCAke1BLR0R9LyRwYXJlbnQKKwl0YXIgLWNmIC0gLUMgJHRyZWVkaXIvJHBhcmVudCAtcCAkKGJhc2VuYW1lICR7bG9jYWxlZGlyfSkgfCB0YXIgLXhmIC0gLUMgJHtQS0dEfSRwYXJlbnQKK30KKworaW5oZXJpdCBxZW11CisKK3B5dGhvbiBwYWNrYWdlX2RvX3NwbGl0X2djb252cyAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgaWYgKGQuZ2V0VmFyKCdQQUNLQUdFX05PX0dDT05WJywgVHJ1ZSkgPT0gJzEnKToKKyAgICAgICAgYmIubm90ZSgicGFja2FnZSByZXF1ZXN0ZWQgbm90IHNwbGl0dGluZyBnY29udnMiKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiCisKKyAgICBicG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKyAgICBsaWJkaXIgPSBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKyAgICBpZiBub3QgbGliZGlyOgorICAgICAgICBiYi5lcnJvcigibGliZGlyIG5vdCBkZWZpbmVkIikKKyAgICAgICAgcmV0dXJuCisgICAgZGF0YWRpciA9IGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSkKKyAgICBpZiBub3QgZGF0YWRpcjoKKyAgICAgICAgYmIuZXJyb3IoImRhdGFkaXIgbm90IGRlZmluZWQiKQorICAgICAgICByZXR1cm4KKworICAgIGdjb252X2xpYmRpciA9IGJhc2VfcGF0aF9qb2luKGxpYmRpciwgImdjb252IikKKyAgICBjaGFybWFwX2RpciA9IGJhc2VfcGF0aF9qb2luKGRhdGFkaXIsICJpMThuIiwgImNoYXJtYXBzIikKKyAgICBsb2NhbGVzX2RpciA9IGJhc2VfcGF0aF9qb2luKGRhdGFkaXIsICJpMThuIiwgImxvY2FsZXMiKQorICAgIGJpbmFyeV9sb2NhbGVzX2RpciA9IGQuZ2V0VmFyKCdsb2NhbGVkaXInLCBUcnVlKQorCisgICAgZGVmIGNhbGNfZ2NvbnZfZGVwcyhmbiwgcGtnLCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgZ3JvdXApOgorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZiA9IG9wZW4oZm4sICJyYiIpCisgICAgICAgIGNfcmUgPSByZS5jb21waWxlKCdeY29weSAiKC4qKSInKQorICAgICAgICBpX3JlID0gcmUuY29tcGlsZSgnXmluY2x1ZGUgIihcdyspIi4qJykKKyAgICAgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIG0gPSBjX3JlLm1hdGNoKGwpIG9yIGlfcmUubWF0Y2gobCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgZHAgPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJXMlcy1nY29udi0lcycgJSAobWxwcmVmaXgsIGJwbiwgbS5ncm91cCgxKSkpCisgICAgICAgICAgICAgICAgaWYgbm90IGRwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRwKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgaWYgZGVwcyAhPSBbXToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18lcycgJSBwa2csICIgIi5qb2luKGRlcHMpKQorICAgICAgICBpZiBicG4gIT0gJ2dsaWJjJzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJXMnICUgcGtnLCBwa2cucmVwbGFjZShicG4sICdnbGliYycpKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ2NvbnZfbGliZGlyLCBmaWxlX3JlZ2V4PSdeKC4qKVwuc28kJywgb3V0cHV0X3BhdHRlcm49YnBuKyctZ2NvbnYtJXMnLCBcCisgICAgICAgIGRlc2NyaXB0aW9uPSdnY29udiBtb2R1bGUgZm9yIGNoYXJhY3RlciBzZXQgJXMnLCBob29rPWNhbGNfZ2NvbnZfZGVwcywgXAorICAgICAgICBleHRyYV9kZXBlbmRzPWJwbisnLWdjb252JykKKworICAgIGRlZiBjYWxjX2NoYXJtYXBfZGVwcyhmbiwgcGtnLCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgZ3JvdXApOgorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZiA9IG9wZW4oZm4sICJyYiIpCisgICAgICAgIGNfcmUgPSByZS5jb21waWxlKCdeY29weSAiKC4qKSInKQorICAgICAgICBpX3JlID0gcmUuY29tcGlsZSgnXmluY2x1ZGUgIihcdyspIi4qJykKKyAgICAgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIG0gPSBjX3JlLm1hdGNoKGwpIG9yIGlfcmUubWF0Y2gobCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgZHAgPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJXMlcy1jaGFybWFwLSVzJyAlIChtbHByZWZpeCwgYnBuLCBtLmdyb3VwKDEpKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZHApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBkZXBzICE9IFtdOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGlmIGJwbiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2csIHBrZy5yZXBsYWNlKGJwbiwgJ2dsaWJjJykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBjaGFybWFwX2RpciwgZmlsZV9yZWdleD0nXiguKilcLmd6JCcsIG91dHB1dF9wYXR0ZXJuPWJwbisnLWNoYXJtYXAtJXMnLCBcCisgICAgICAgIGRlc2NyaXB0aW9uPSdjaGFyYWN0ZXIgbWFwIGZvciAlcyBlbmNvZGluZycsIGhvb2s9Y2FsY19jaGFybWFwX2RlcHMsIGV4dHJhX2RlcGVuZHM9JycpCisKKyAgICBkZWYgY2FsY19sb2NhbGVfZGVwcyhmbiwgcGtnLCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgZ3JvdXApOgorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZiA9IG9wZW4oZm4sICJyYiIpCisgICAgICAgIGNfcmUgPSByZS5jb21waWxlKCdeY29weSAiKC4qKSInKQorICAgICAgICBpX3JlID0gcmUuY29tcGlsZSgnXmluY2x1ZGUgIihcdyspIi4qJykKKyAgICAgICAgZm9yIGwgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIG0gPSBjX3JlLm1hdGNoKGwpIG9yIGlfcmUubWF0Y2gobCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgZHAgPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtbHByZWZpeCticG4rJy1sb2NhbGVkYXRhLSVzJyAlIG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgaWYgbm90IGRwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRwKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgaWYgZGVwcyAhPSBbXToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18lcycgJSBwa2csICIgIi5qb2luKGRlcHMpKQorICAgICAgICBpZiBicG4gIT0gJ2dsaWJjJzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJXMnICUgcGtnLCBwa2cucmVwbGFjZShicG4sICdnbGliYycpKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbG9jYWxlc19kaXIsIGZpbGVfcmVnZXg9JyguKiknLCBvdXRwdXRfcGF0dGVybj1icG4rJy1sb2NhbGVkYXRhLSVzJywgXAorICAgICAgICBkZXNjcmlwdGlvbj0nbG9jYWxlIGRlZmluaXRpb24gZm9yICVzJywgaG9vaz1jYWxjX2xvY2FsZV9kZXBzLCBleHRyYV9kZXBlbmRzPScnKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsIGQuZ2V0VmFyKCdQQUNLQUdFUycsIEZhbHNlKSArICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArIGJwbiArICctZ2NvbnYnKQorCisgICAgdXNlX2JpbiA9IGQuZ2V0VmFyKCJHTElCQ19JTlRFUk5BTF9VU0VfQklOQVJZX0xPQ0FMRSIsIFRydWUpCisKKyAgICBkb3RfcmUgPSByZS5jb21waWxlKCIoLiopXC4oLiopIikKKworICAgICMgUmVhZCBpbiBzdXBwb3J0ZWQgbG9jYWxlcyBhbmQgYXNzb2NpYXRlZCBlbmNvZGluZ3MKKyAgICBzdXBwb3J0ZWQgPSB7fQorICAgIHdpdGggb3BlbihiYXNlX3BhdGhfam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCAiU1VQUE9SVEVEIikpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYWxlLCBjaGFyc2V0ID0gbGluZS5yc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3VwcG9ydGVkW2xvY2FsZV0gPSBjaGFyc2V0CisKKyAgICAjIEdMSUJDX0dFTkVSQVRFX0xPQ0FMRVMgdmFyIHNwZWNpZmllcyB3aGljaCBsb2NhbGVzIHRvIGJlIGdlbmVyYXRlZC4gZW1wdHkgb3IgImFsbCIgbWVhbnMgYWxsIGxvY2FsZXMKKyAgICB0b19nZW5lcmF0ZSA9IGQuZ2V0VmFyKCdHTElCQ19HRU5FUkFURV9MT0NBTEVTJywgVHJ1ZSkKKyAgICBpZiBub3QgdG9fZ2VuZXJhdGUgb3IgdG9fZ2VuZXJhdGUgPT0gJ2FsbCc6CisgICAgICAgIHRvX2dlbmVyYXRlID0gc3VwcG9ydGVkLmtleXMoKQorICAgIGVsc2U6CisgICAgICAgIHRvX2dlbmVyYXRlID0gdG9fZ2VuZXJhdGUuc3BsaXQoKQorICAgICAgICBmb3IgbG9jYWxlIGluIHRvX2dlbmVyYXRlOgorICAgICAgICAgICAgaWYgbG9jYWxlIG5vdCBpbiBzdXBwb3J0ZWQ6CisgICAgICAgICAgICAgICAgaWYgJy4nIGluIGxvY2FsZToKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IGxvY2FsZS5zcGxpdCgnLicpWzFdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICdVVEYtOCcKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVW5zdXBwb3J0ZWQgbG9jYWxlICclcycsIGFzc3VtaW5nIGVuY29kaW5nICclcyciICUgKGxvY2FsZSwgY2hhcnNldCkpCisgICAgICAgICAgICAgICAgc3VwcG9ydGVkW2xvY2FsZV0gPSBjaGFyc2V0CisKKyAgICBkZWYgb3V0cHV0X2xvY2FsZV9zb3VyY2UobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZyk6CisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18lcycgJSBwa2duYW1lLCAnbG9jYWxlZGVmICVzLWxvY2FsZWRhdGEtJXMgJXMtY2hhcm1hcC0lcycgJSBcCisgICAgICAgIChtbHByZWZpeCticG4sIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKGxvY2FsZSksIG1scHJlZml4K2JwbiwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoZW5jb2RpbmcpKSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2duYW1lLCBkLmdldFZhcignbG9jYWxlX2Jhc2VfcG9zdGluc3QnLCBUcnVlKSBcCisgICAgICAgICUgKGxvY2FsZSwgZW5jb2RpbmcsIGxvY2FsZSkpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZ25hbWUsIGQuZ2V0VmFyKCdsb2NhbGVfYmFzZV9wb3N0cm0nLCBUcnVlKSAlIFwKKyAgICAgICAgKGxvY2FsZSwgZW5jb2RpbmcsIGxvY2FsZSkpCisKKyAgICBkZWYgb3V0cHV0X2xvY2FsZV9iaW5hcnlfcmRlcGVuZHMobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZyk6CisgICAgICAgIG0gPSByZS5tYXRjaCgiKC4qKVwuKC4qKSIsIG5hbWUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBsaWJjX25hbWUgPSAiJXMuJXMiICUgKG0uZ3JvdXAoMSksIG0uZ3JvdXAoMikubG93ZXIoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpYmNfbmFtZSA9IG5hbWUKKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZ25hbWUsIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCclcy1iaW5hcnktbG9jYWxlZGF0YS0lcycgXAorICAgICAgICAgICAgJSAobWxwcmVmaXgrYnBuLCBsaWJjX25hbWUpKSkKKworICAgIGNvbW1hbmRzID0ge30KKworICAgIGRlZiBvdXRwdXRfbG9jYWxlX2JpbmFyeShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgdHJlZWRpciA9IGJhc2VfcGF0aF9qb2luKGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSksICJsb2NhbGUtdHJlZSIpCisgICAgICAgIGxkbGliZGlyID0gYmFzZV9wYXRoX2pvaW4odHJlZWRpciwgZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkpCisgICAgICAgIHBhdGggPSBkLmdldFZhcigiUEFUSCIsIFRydWUpCisgICAgICAgIGkxOG5wYXRoID0gYmFzZV9wYXRoX2pvaW4odHJlZWRpciwgZGF0YWRpciwgImkxOG4iKQorICAgICAgICBnY29udnBhdGggPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCAiaWNvbnZkYXRhIikKKyAgICAgICAgb3V0cHV0cGF0aCA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsIGJpbmFyeV9sb2NhbGVzX2RpcikKKworICAgICAgICB1c2VfY3Jvc3NfbG9jYWxlZGVmID0gZC5nZXRWYXIoIkxPQ0FMRV9HRU5FUkFUSU9OX1dJVEhfQ1JPU1MtTE9DQUxFREVGIiwgVHJ1ZSkgb3IgIjAiCisgICAgICAgIGlmIHVzZV9jcm9zc19sb2NhbGVkZWYgPT0gIjEiOgorICAgICAgICAgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgICAgICAgICAgbG9jYWxlX2FyY2hfb3B0aW9ucyA9IHsgXAorICAgICAgICAgICAgICAgICJhcm0iOiAgICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgImFybWViIjogICAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAiYWFyY2g2NCI6ICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJhYXJjaDY0X2JlIjogIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgInNoNCI6ICAgICAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJwb3dlcnBjNjQiOiAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICBcCisgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAibWlwczY0IjogICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJtaXBzZWwiOiAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjoiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJpNjg2IjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIgIH0KKworICAgICAgICAgICAgaWYgdGFyZ2V0X2FyY2ggaW4gbG9jYWxlX2FyY2hfb3B0aW9uczoKKyAgICAgICAgICAgICAgICBsb2NhbGVkZWZfb3B0cyA9IGxvY2FsZV9hcmNoX29wdGlvbnNbdGFyZ2V0X2FyY2hdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJsb2NhbGVfYXJjaF9vcHRpb25zIG5vdCBmb3VuZCBmb3IgdGFyZ2V0X2FyY2g9IiArIHRhcmdldF9hcmNoKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVua25vd24gYXJjaDoiICsgdGFyZ2V0X2FyY2ggKyAiIGZvciBsb2NhbGVfYXJjaF9vcHRpb25zIikKKworICAgICAgICAgICAgbG9jYWxlZGVmX29wdHMgKz0gIiAtLWZvcmNlIC0tb2xkLXN0eWxlIC0tbm8tYXJjaGl2ZSAtLXByZWZpeD0lcyBcCisgICAgICAgICAgICAgICAgLS1pbnB1dGZpbGU9JXMvJXMvaTE4bi9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAlcy8lcyIgXAorICAgICAgICAgICAgICAgICUgKHRyZWVkaXIsIHRyZWVkaXIsIGRhdGFkaXIsIGxvY2FsZSwgZW5jb2RpbmcsIG91dHB1dHBhdGgsIG5hbWUpCisKKyAgICAgICAgICAgIGNtZCA9ICJQQVRIPVwiJXNcIiBJMThOUEFUSD1cIiVzXCIgR0NPTlZfUEFUSD1cIiVzXCIgY3Jvc3MtbG9jYWxlZGVmICVzIiAlIFwKKyAgICAgICAgICAgICAgICAocGF0aCwgaTE4bnBhdGgsIGdjb252cGF0aCwgbG9jYWxlZGVmX29wdHMpCisgICAgICAgIGVsc2U6ICMgZWFybGllciBzbG93ZXIgcWVtdSB3YXkgCisgICAgICAgICAgICBxZW11ID0gcWVtdV90YXJnZXRfYmluYXJ5KGQpIAorICAgICAgICAgICAgbG9jYWxlZGVmX29wdHMgPSAiLS1mb3JjZSAtLW9sZC1zdHlsZSAtLW5vLWFyY2hpdmUgLS1wcmVmaXg9JXMgXAorICAgICAgICAgICAgICAgIC0taW5wdXRmaWxlPSVzL2kxOG4vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgJXMiIFwKKyAgICAgICAgICAgICAgICAlICh0cmVlZGlyLCBkYXRhZGlyLCBsb2NhbGUsIGVuY29kaW5nLCBuYW1lKQorCisgICAgICAgICAgICBxZW11X29wdGlvbnMgPSBkLmdldFZhcignUUVNVV9PUFRJT05TJywgVHJ1ZSkKKworICAgICAgICAgICAgY21kID0gIlBTRVVET19SRUxPQURFRD1ZRVMgUEFUSD1cIiVzXCIgSTE4TlBBVEg9XCIlc1wiICVzIC1MICVzIFwKKyAgICAgICAgICAgICAgICAtRSBMRF9MSUJSQVJZX1BBVEg9JXMgJXMgJXMvYmluL2xvY2FsZWRlZiAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHBhdGgsIGkxOG5wYXRoLCBxZW11LCB0cmVlZGlyLCBsZGxpYmRpciwgcWVtdV9vcHRpb25zLCB0cmVlZGlyLCBsb2NhbGVkZWZfb3B0cykKKworICAgICAgICBjb21tYW5kc1siJXMvJXMiICUgKG91dHB1dHBhdGgsIG5hbWUpXSA9IGNtZAorCisgICAgICAgIGJiLm5vdGUoImdlbmVyYXRpbmcgbG9jYWxlICVzICglcykiICUgKGxvY2FsZSwgZW5jb2RpbmcpKQorCisgICAgZGVmIG91dHB1dF9sb2NhbGUobmFtZSwgbG9jYWxlLCBlbmNvZGluZyk6CisgICAgICAgIHBrZ25hbWUgPSBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnbG9jYWxlLWJhc2UtJyArIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG5hbWUpCisgICAgICAgIGQuc2V0VmFyKCdBTExPV19FTVBUWV8lcycgJSBwa2duYW1lLCAnMScpCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICclcyAlcycgJSAocGtnbmFtZSwgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkpKQorICAgICAgICBycHJvdmlkZXMgPSAnICVzdmlydHVhbC1sb2NhbGUtJXMnICUgKG1scHJlZml4LCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShuYW1lKSkKKyAgICAgICAgbSA9IHJlLm1hdGNoKCIoLiopXyguKikiLCBuYW1lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcnByb3ZpZGVzICs9ICcgJXN2aXJ0dWFsLWxvY2FsZS0lcycgJSAobWxwcmVmaXgsIG0uZ3JvdXAoMSkpCisgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJXMnICUgcGtnbmFtZSwgcnByb3ZpZGVzKQorCisgICAgICAgIGlmIHVzZV9iaW4gPT0gImNvbXBpbGUiOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9iaW5hcnlfcmRlcGVuZHMobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKyAgICAgICAgICAgIG91dHB1dF9sb2NhbGVfYmluYXJ5KG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpCisgICAgICAgIGVsaWYgdXNlX2JpbiA9PSAicHJlY29tcGlsZWQiOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9iaW5hcnlfcmRlcGVuZHMobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dF9sb2NhbGVfc291cmNlKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpCisKKyAgICBpZiB1c2VfYmluID09ICJjb21waWxlIjoKKyAgICAgICAgYmIubm90ZSgicHJlcGFyaW5nIHRyZWUgZm9yIGJpbmFyeSBsb2NhbGUgZ2VuZXJhdGlvbiIpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcHJlcF9sb2NhbGVfdHJlZSIsIGQpCisKKyAgICB1dGY4X29ubHkgPSBpbnQoZC5nZXRWYXIoJ0xPQ0FMRV9VVEY4X09OTFknLCBUcnVlKSBvciAwKQorICAgIGVuY29kaW5ncyA9IHt9CisgICAgZm9yIGxvY2FsZSBpbiB0b19nZW5lcmF0ZToKKyAgICAgICAgY2hhcnNldCA9IHN1cHBvcnRlZFtsb2NhbGVdCisgICAgICAgIGlmIHV0Zjhfb25seSBhbmQgY2hhcnNldCAhPSAnVVRGLTgnOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBtID0gZG90X3JlLm1hdGNoKGxvY2FsZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGJhc2UgPSBtLmdyb3VwKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlID0gbG9jYWxlCisKKyAgICAgICAgIyBQcmVjb21waWxlZCBsb2NhbGVzIGFyZSBrZXB0IGFzIGlzLCBvYmV5aW5nIFNVUFBPUlRFRCwgd2hpbGUKKyAgICAgICAgIyBvdGhlcnMgYXJlIGFkanVzdGVkLCBlbnN1cmluZyB0aGF0IHRoZSBub24tc3VmZml4ZWQgbG9jYWxlcworICAgICAgICAjIGFyZSB1dGYtOCwgd2hpbGUgdGhlIHN1ZmZpeGVkIGFyZSBub3QuCisgICAgICAgIGlmIHVzZV9iaW4gPT0gInByZWNvbXBpbGVkIjoKKyAgICAgICAgICAgIG91dHB1dF9sb2NhbGUobG9jYWxlLCBiYXNlLCBjaGFyc2V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgY2hhcnNldCA9PSAnVVRGLTgnOgorICAgICAgICAgICAgICAgIG91dHB1dF9sb2NhbGUoYmFzZSwgYmFzZSwgY2hhcnNldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0X2xvY2FsZSgnJXMuJXMnICUgKGJhc2UsIGNoYXJzZXQpLCBiYXNlLCBjaGFyc2V0KQorCisgICAgaWYgdXNlX2JpbiA9PSAiY29tcGlsZSI6CisgICAgICAgIG1ha2VmaWxlID0gYmFzZV9wYXRoX2pvaW4oZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSwgImxvY2FsZS10cmVlIiwgIk1ha2VmaWxlIikKKyAgICAgICAgbSA9IG9wZW4obWFrZWZpbGUsICJ3IikKKyAgICAgICAgbS53cml0ZSgiYWxsOiAlc1xuXG4iICUgIiAiLmpvaW4oY29tbWFuZHMua2V5cygpKSkKKyAgICAgICAgZm9yIGNtZCBpbiBjb21tYW5kczoKKyAgICAgICAgICAgIG0ud3JpdGUoY21kICsgIjpcbiIpCisgICAgICAgICAgICBtLndyaXRlKCJcdCIgKyBjb21tYW5kc1tjbWRdICsgIlxuXG4iKQorICAgICAgICBtLmNsb3NlKCkKKyAgICAgICAgZC5zZXRWYXIoIkVYVFJBX09FTUFLRSIsICItQyAlcyAke1BBUkFMTEVMX01BS0V9IiAlIChvcy5wYXRoLmRpcm5hbWUobWFrZWZpbGUpKSkKKyAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nIGJpbmFyeSBsb2NhbGUgZ2VuZXJhdGlvbiBtYWtlZmlsZSIpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygib2VfcnVubWFrZSIsIGQpCisgICAgICAgIGJiLm5vdGUoImNvbGxlY3RpbmcgYmluYXJ5IGxvY2FsZXMgZnJvbSBsb2NhbGUgdHJlZSIpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fY29sbGVjdF9iaW5zX2Zyb21fbG9jYWxlX3RyZWUiLCBkKQorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBiaW5hcnlfbG9jYWxlc19kaXIsIGZpbGVfcmVnZXg9JyguKiknLCBcCisgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj1icG4rJy1iaW5hcnktbG9jYWxlZGF0YS0lcycsIFwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdiaW5hcnkgbG9jYWxlIGRlZmluaXRpb24gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfZGlycz1UcnVlKQorICAgIGVsaWYgdXNlX2JpbiA9PSAicHJlY29tcGlsZWQiOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBiaW5hcnlfbG9jYWxlc19kaXIsIGZpbGVfcmVnZXg9JyguKiknLCBcCisgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj1icG4rJy1iaW5hcnktbG9jYWxlZGF0YS0lcycsIFwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdiaW5hcnkgbG9jYWxlIGRlZmluaXRpb24gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfZGlycz1UcnVlKQorICAgIGVsc2U6CisgICAgICAgIGJiLm5vdGUoImdlbmVyYXRpb24gb2YgYmluYXJ5IGxvY2FsZXMgZGlzYWJsZWQuIHRoaXMgbWF5IGJyZWFrIGkxOG4hIikKKworfQorCisjIFdlIHdhbnQgdG8gZG8gdGhpcyBpbmRpcmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBzYWZlbHkgJ3JldHVybicKKyMgZnJvbSB0aGUgY2FsbGVkIGZ1bmN0aW9uIGV2ZW4gdGhvdWdoIHdlJ3JlIHByZXBlbmRpbmcKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ3BhY2thZ2VfZG9fc3BsaXRfZ2NvbnZzJywgZCkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTZhMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MKQEAgLTAsMCArMSw0ODMgQEAKKyMgUG9wdWxhdGVzIExJQ0VOU0VfRElSRUNUT1JZIGFzIHNldCBpbiBkaXN0cm8gY29uZmlnIHdpdGggdGhlIGxpY2Vuc2UgZmlsZXMgYXMgc2V0IGJ5CisjIExJQ19GSUxFU19DSEtTVU0uCisjIFRPRE86CisjIC0gVGhlcmUgaXMgYSByZWFsIGlzc3VlIHJldm9sdmluZyBhcm91bmQgbGljZW5zZSBuYW1pbmcgc3RhbmRhcmRzLgorCitMSUNFTlNFX0RJUkVDVE9SWSA/Pz0gIiR7REVQTE9ZX0RJUn0vbGljZW5zZXMiCitMSUNTU1RBVEVESVIgPSAiJHtXT1JLRElSfS9saWNlbnNlLWRlc3RkaXIvIgorCisjIENyZWF0ZSBleHRyYSBwYWNrYWdlIHdpdGggbGljZW5zZSB0ZXh0cyBhbmQgYWRkIGl0IHRvIFJSRUNPTU1FTkRTXyR7UE59CitMSUNFTlNFX0NSRUFURV9QQUNLQUdFW3R5cGVdID0gImJvb2xlYW4iCitMSUNFTlNFX0NSRUFURV9QQUNLQUdFID8/PSAiMCIKK0xJQ0VOU0VfUEFDS0FHRV9TVUZGSVggPz89ICItbGljIgorTElDRU5TRV9GSUxFU19ESVJFQ1RPUlkgPz89ICIke2RhdGFkaXJ9L2xpY2Vuc2VzLyIKKworYWRkdGFzayBwb3B1bGF0ZV9saWMgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2J1aWxkCitkb19wb3B1bGF0ZV9saWNbZGlyc10gPSAiJHtMSUNTU1RBVEVESVJ9LyR7UE59IgorZG9fcG9wdWxhdGVfbGljW2NsZWFuZGlyc10gPSAiJHtMSUNTU1RBVEVESVJ9IgorCitweXRob24gd3JpdGVfcGFja2FnZV9tYW5pZmVzdCgpIHsKKyAgICAjIEdldCBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcworICAgIGxpY2Vuc2VfaW1hZ2VfZGlyID0gZC5leHBhbmQoJyR7TElDRU5TRV9ESVJFQ1RPUll9LyR7SU1BR0VfTkFNRX0nKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsaWNlbnNlX2ltYWdlX2RpcikKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKKyAgICBvcGVuKG9zLnBhdGguam9pbihsaWNlbnNlX2ltYWdlX2RpciwgJ3BhY2thZ2UubWFuaWZlc3QnKSwKKyAgICAgICAgJ3crJykud3JpdGUoaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCkpCit9CisKK3B5dGhvbiBsaWNlbnNlX2NyZWF0ZV9tYW5pZmVzdCgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKKworICAgIGJhZF9saWNlbnNlcyA9IChkLmdldFZhcigiSU5DT01QQVRJQkxFX0xJQ0VOU0UiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGJhZF9saWNlbnNlcyA9IG1hcChsYW1iZGEgbDogY2Fub25pY2FsX2xpY2Vuc2UoZCwgbCksIGJhZF9saWNlbnNlcykKKyAgICBiYWRfbGljZW5zZXMgPSBleHBhbmRfd2lsZGNhcmRfbGljZW5zZXMoZCwgYmFkX2xpY2Vuc2VzKQorCisgICAgYnVpbGRfaW1hZ2VzX2Zyb21fZmVlZHMgPSBkLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKQorICAgIGlmIGJ1aWxkX2ltYWdlc19mcm9tX2ZlZWRzID09ICIxIjoKKyAgICAgICAgcmV0dXJuIDAKKworICAgIHBrZ19kaWMgPSB7fQorICAgIGZvciBwa2cgaW4gaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCkuc3BsaXRsaW5lcygpOgorICAgICAgICBwa2dfaW5mbyA9IG9zLnBhdGguam9pbihkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bnRpbWUtcmV2ZXJzZScsIHBrZykKKyAgICAgICAgcGtnX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHBrZ19pbmZvKSkKKworICAgICAgICBwa2dfZGljW3BrZ19uYW1lXSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfcGtnZGF0YWZpbGUocGtnX2luZm8pCisgICAgICAgIGlmIG5vdCAiTElDRU5TRSIgaW4gcGtnX2RpY1twa2dfbmFtZV0ua2V5cygpOgorICAgICAgICAgICAgcGtnX2xpY19uYW1lID0gIkxJQ0VOU0VfIiArIHBrZ19uYW1lCisgICAgICAgICAgICBwa2dfZGljW3BrZ19uYW1lXVsiTElDRU5TRSJdID0gcGtnX2RpY1twa2dfbmFtZV1bcGtnX2xpY19uYW1lXQorCisgICAgbGljZW5zZV9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDRU5TRV9ESVJFQ1RPUlknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSksICdsaWNlbnNlLm1hbmlmZXN0JykKKyAgICB3aXRoIG9wZW4obGljZW5zZV9tYW5pZmVzdCwgInciKSBhcyBsaWNlbnNlX2ZpbGU6CisgICAgICAgIGZvciBwa2cgaW4gc29ydGVkKHBrZ19kaWMpOgorICAgICAgICAgICAgaWYgYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgKHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdLCBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0pID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgb2UubGljZW5zZS5tYW5pZmVzdF9saWNlbnNlcyhwa2dfZGljW3BrZ11bIkxJQ0VOU0UiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhZF9saWNlbnNlcywgY2Fub25pY2FsX2xpY2Vuc2UsIGQpCisgICAgICAgICAgICAgICAgZXhjZXB0IG9lLmxpY2Vuc2UuTGljZW5zZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1AnLCBUcnVlKSwgZXhjKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdID0gcmUuc3ViKCdbfCYoKSpdJywgJycsIHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdKQorICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSA9IHJlLnN1YignICAqJywgJyAnLCBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0pCisgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdID0gcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdLnNwbGl0KCkKKworICAgICAgICAgICAgbGljZW5zZV9maWxlLndyaXRlKCJQQUNLQUdFIE5BTUU6ICVzXG4iICUgcGtnKQorICAgICAgICAgICAgbGljZW5zZV9maWxlLndyaXRlKCJQQUNLQUdFIFZFUlNJT046ICVzXG4iICUgcGtnX2RpY1twa2ddWyJQViJdKQorICAgICAgICAgICAgbGljZW5zZV9maWxlLndyaXRlKCJSRUNJUEUgTkFNRTogJXNcbiIgJSBwa2dfZGljW3BrZ11bIlBOIl0pCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIkxJQ0VOU0U6ICVzXG5cbiIgJSBwa2dfZGljW3BrZ11bIkxJQ0VOU0UiXSkKKworICAgICAgICAgICAgIyBJZiB0aGUgcGFja2FnZSBkb2Vzbid0IGNvbnRhaW4gYW55IGZpbGUsIHRoYXQgaXMsIGl0cyBzaXplIGlzIDAsIHRoZSBsaWNlbnNlCisgICAgICAgICAgICAjIGlzbid0IHJlbGV2YW50IGFzIGZhciBhcyB0aGUgZmluYWwgaW1hZ2UgaXMgY29uY2VybmVkLiBTbyBkb2luZyBsaWNlbnNlIGNoZWNrCisgICAgICAgICAgICAjIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLCBza2lwIGl0LgorICAgICAgICAgICAgaWYgcGtnX2RpY1twa2ddWyJQS0dTSVpFXyVzIiAlIHBrZ10gPT0gIjAiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBsaWMgaW4gcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdOgorICAgICAgICAgICAgICAgIGxpY19maWxlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiUE4iXSwgImdlbmVyaWNfJXMiICUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuc3ViKCdcKycsICcnLCBsaWMpKQorICAgICAgICAgICAgICAgICMgYWRkIGV4cGxpY2l0eSBhdm9pZCBvZiBDTE9TRUQgbGljZW5zZSBiZWNhdXNlIGlzbid0IGdlbmVyaWMKKyAgICAgICAgICAgICAgICBpZiBsaWMgPT0gIkNMT1NFRCI6CisgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsaWNfZmlsZSk6CisgICAgICAgICAgICAgICAgICAgYmIud2FybigiVGhlIGxpY2Vuc2UgbGlzdGVkICVzIHdhcyBub3QgaW4gdGhlICJcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWNlbnNlcyBjb2xsZWN0ZWQgZm9yIHJlY2lwZSAlcyIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGljLCBwa2dfZGljW3BrZ11bIlBOIl0pKQorCisgICAgIyBUd28gb3B0aW9ucyBoZXJlOgorICAgICMgLSBKdXN0IGNvcHkgdGhlIG1hbmlmZXN0CisgICAgIyAtIENvcHkgdGhlIG1hbmlmZXN0IGFuZCB0aGUgbGljZW5zZSBkaXJlY3RvcmllcworICAgICMgV2l0aCBib3RoIG9wdGlvbnMgc2V0IHdlIHNlZSBhIC41IE0gaW5jcmVhc2UgaW4gY29yZS1pbWFnZS1taW5pbWFsCisgICAgY29weV9saWNfbWFuaWZlc3QgPSBkLmdldFZhcignQ09QWV9MSUNfTUFOSUZFU1QnLCBUcnVlKQorICAgIGNvcHlfbGljX2RpcnMgPSBkLmdldFZhcignQ09QWV9MSUNfRElSUycsIFRydWUpCisgICAgaWYgY29weV9saWNfbWFuaWZlc3QgPT0gIjEiOgorICAgICAgICByb290ZnNfbGljZW5zZV9kaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsICdUcnVlJyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNyJywgJ3NoYXJlJywgJ2NvbW1vbi1saWNlbnNlcycpCisgICAgICAgIG9zLm1ha2VkaXJzKHJvb3Rmc19saWNlbnNlX2RpcikKKyAgICAgICAgcm9vdGZzX2xpY2Vuc2VfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4ocm9vdGZzX2xpY2Vuc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpY2Vuc2UubWFuaWZlc3QnKQorICAgICAgICBvcy5saW5rKGxpY2Vuc2VfbWFuaWZlc3QsIHJvb3Rmc19saWNlbnNlX21hbmlmZXN0KQorCisgICAgICAgIGlmIGNvcHlfbGljX2RpcnMgPT0gIjEiOgorICAgICAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQocGtnX2RpYyk6CisgICAgICAgICAgICAgICAgcGtnX3Jvb3Rmc19saWNlbnNlX2RpciA9IG9zLnBhdGguam9pbihyb290ZnNfbGljZW5zZV9kaXIsIHBrZykKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhwa2dfcm9vdGZzX2xpY2Vuc2VfZGlyKQorICAgICAgICAgICAgICAgIHBrZ19saWNlbnNlX2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDRU5TRV9ESVJFQ1RPUlknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJQTiJdKSAKKyAgICAgICAgICAgICAgICBsaWNlbnNlcyA9IG9zLmxpc3RkaXIocGtnX2xpY2Vuc2VfZGlyKQorICAgICAgICAgICAgICAgIGZvciBsaWMgaW4gbGljZW5zZXM6CisgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19saWNlbnNlID0gb3MucGF0aC5qb2luKHJvb3Rmc19saWNlbnNlX2RpciwgbGljKQorICAgICAgICAgICAgICAgICAgICBwa2dfbGljZW5zZSA9IG9zLnBhdGguam9pbihwa2dfbGljZW5zZV9kaXIsIGxpYykKKyAgICAgICAgICAgICAgICAgICAgcGtnX3Jvb3Rmc19saWNlbnNlID0gb3MucGF0aC5qb2luKHBrZ19yb290ZnNfbGljZW5zZV9kaXIsIGxpYykKKworICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgiXmdlbmVyaWNfLiokIiwgbGljKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNfbGljID0gcmUuc2VhcmNoKCJeZ2VuZXJpY18oLiopJCIsIGxpYykuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNfbGljKSwgYmFkX2xpY2Vuc2VzKSA9PSBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocm9vdGZzX2xpY2Vuc2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsocGtnX2xpY2Vuc2UsIHJvb3Rmc19saWNlbnNlKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguam9pbignLi4nLCBsaWMpLCBwa2dfcm9vdGZzX2xpY2Vuc2UpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvZS5saWNlbnNlLmxpY2Vuc2Vfb2soY2Fub25pY2FsX2xpY2Vuc2UoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWMpLCBiYWRfbGljZW5zZXMpID09IEZhbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsocGtnX2xpY2Vuc2UsIHBrZ19yb290ZnNfbGljZW5zZSkKK30KKworcHl0aG9uIGRvX3BvcHVsYXRlX2xpYygpIHsKKyAgICAiIiIKKyAgICBQb3B1bGF0ZSBMSUNFTlNFX0RJUkVDVE9SWSB3aXRoIGxpY2Vuc2VzLgorICAgICIiIgorICAgIGxpY19maWxlc19wYXRocyA9IGZpbmRfbGljZW5zZV9maWxlcyhkKQorCisgICAgIyBUaGUgYmFzZSBkaXJlY3Rvcnkgd2Ugd3JhbmdsZSBsaWNlbnNlcyB0bworICAgIGRlc3RkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ1NTVEFURURJUicsIFRydWUpLCBkLmdldFZhcignUE4nLCBUcnVlKSkKKyAgICBjb3B5X2xpY2Vuc2VfZmlsZXMobGljX2ZpbGVzX3BhdGhzLCBkZXN0ZGlyKQorfQorCisjIGl0IHdvdWxkIGJlIGJldHRlciB0byBjb3B5IHRoZW0gaW4gZG9faW5zdGFsbF9hcHBlbmQsIGJ1dCBmaW5kX2xpY2Vuc2VfZmlsZXNhIGlzIHB5dGhvbgorcHl0aG9uIHBlcmZvcm1fcGFja2FnZWNvcHlfcHJlcGVuZCAoKSB7CisgICAgZW5hYmxlZCA9IG9lLmRhdGEudHlwZWRfdmFsdWUoJ0xJQ0VOU0VfQ1JFQVRFX1BBQ0tBR0UnLCBkKQorICAgIGlmIGQuZ2V0VmFyKCdDTEFTU09WRVJSSURFJywgVHJ1ZSkgPT0gJ2NsYXNzLXRhcmdldCcgYW5kIGVuYWJsZWQ6CisgICAgICAgIGxpY19maWxlc19wYXRocyA9IGZpbmRfbGljZW5zZV9maWxlcyhkKQorCisgICAgICAgICMgTElDRU5TRV9GSUxFU19ESVJFQ1RPUlkgc3RhcnRzIHdpdGggJy8nIHNvIG9zLnBhdGguam9pbiBjYW5ub3QgYmUgdXNlZCB0byBqb2luIEQgYW5kIExJQ0VOU0VfRklMRVNfRElSRUNUT1JZCisgICAgICAgIGRlc3RkaXIgPSBkLmdldFZhcignRCcsIFRydWUpICsgb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWScsIFRydWUpLCBkLmdldFZhcignUE4nLCBUcnVlKSkKKyAgICAgICAgY29weV9saWNlbnNlX2ZpbGVzKGxpY19maWxlc19wYXRocywgZGVzdGRpcikKKyAgICAgICAgYWRkX3BhY2thZ2VfYW5kX2ZpbGVzKGQpCit9CisKK2RlZiBhZGRfcGFja2FnZV9hbmRfZmlsZXMoZCk6CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGZpbGVzID0gZC5nZXRWYXIoJ0xJQ0VOU0VfRklMRVNfRElSRUNUT1JZJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcG5fbGljID0gIiVzJXMiICUgKHBuLCBkLmdldFZhcignTElDRU5TRV9QQUNLQUdFX1NVRkZJWCcsIEZhbHNlKSkKKyAgICBpZiBwbl9saWMgaW4gcGFja2FnZXM6CisgICAgICAgIGJiLndhcm4oIiVzIHBhY2thZ2UgYWxyZWFkeSBleGlzdGVkIGluICVzLiIgJSAocG5fbGljLCBwbikpCisgICAgZWxzZToKKyAgICAgICAgIyBmaXJzdCBpbiBQQUNLQUdFUyB0byBiZSBzdXJlIHRoYXQgbm90aGluZyBlbHNlIGdldHMgTElDRU5TRV9GSUxFU19ESVJFQ1RPUlkKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgIiVzICVzIiAlIChwbl9saWMsIHBhY2thZ2VzKSkKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwbl9saWMsIGZpbGVzKQorICAgICAgICBycmVjb21tZW5kc19wbiA9IGQuZ2V0VmFyKCdSUkVDT01NRU5EU18nICsgcG4sIFRydWUpCisgICAgICAgIGlmIHJyZWNvbW1lbmRzX3BuOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwbiwgIiVzICVzIiAlIChwbl9saWMsIHJyZWNvbW1lbmRzX3BuKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18nICsgcG4sICIlcyIgJSAocG5fbGljKSkKKworZGVmIGNvcHlfbGljZW5zZV9maWxlcyhsaWNfZmlsZXNfcGF0aHMsIGRlc3RkaXIpOgorICAgIGltcG9ydCBzaHV0aWwKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQorICAgIGZvciAoYmFzZW5hbWUsIHBhdGgpIGluIGxpY19maWxlc19wYXRoczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3JjID0gcGF0aAorICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKGRlc3RkaXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0KToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQorICAgICAgICAgICAgaWYgb3MuYWNjZXNzKHNyYywgb3MuV19PSykgYW5kIChvcy5zdGF0KHNyYykuc3RfZGV2ID09IG9zLnN0YXQoZGVzdGRpcikuc3RfZGV2KToKKyAgICAgICAgICAgICAgICBvcy5saW5rKHNyYywgZHN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkc3QpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLndhcm4oIkNvdWxkIG5vdCBjb3B5IGxpY2Vuc2UgZmlsZSAlcyB0byAlczogJXMiICUgKHNyYywgZHN0LCBlKSkKKworZGVmIGZpbmRfbGljZW5zZV9maWxlcyhkKToKKyAgICAiIiIKKyAgICBDcmVhdGVzIGxpc3Qgb2YgZmlsZXMgdXNlZCBpbiBMSUNfRklMRVNfQ0hLU1VNIGFuZCBnZW5lcmljIExJQ0VOU0UgZmlsZXMuCisgICAgIiIiCisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBvZS5saWNlbnNlCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgZm9yIHBhY2thZ2UgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCdMSUNFTlNFXycgKyBwYWNrYWdlLCBUcnVlKToKKyAgICAgICAgICAgIGxpY2Vuc2VfdHlwZXMgPSBsaWNlbnNlX3R5cGVzICsgJyAmICcgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0xJQ0VOU0VfJyArIHBhY2thZ2UsIFRydWUpCisKKyAgICAjSWYgd2UgZ2V0IGhlcmUgd2l0aCBubyBsaWNlbnNlIHR5cGVzLCB0aGVuIHRoYXQgbWVhbnMgd2UgaGF2ZSBhIHJlY2lwZSAKKyAgICAjbGV2ZWwgbGljZW5zZS4gSWYgc28sIHdlIGdyYWIgb25seSB0aG9zZS4KKyAgICB0cnk6CisgICAgICAgIGxpY2Vuc2VfdHlwZXMKKyAgICBleGNlcHQgTmFtZUVycm9yOiAgICAgICAgCisgICAgICAgICMgQWxsIHRoZSBsaWNlbnNlIHR5cGVzIGF0IHRoZSByZWNpcGUgbGV2ZWwKKyAgICAgICAgbGljZW5zZV90eXBlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAKKyAgICAjIEFsbCB0aGUgbGljZW5zZSBmaWxlcyBmb3IgdGhlIHBhY2thZ2UKKyAgICBsaWNfZmlsZXMgPSBkLmdldFZhcignTElDX0ZJTEVTX0NIS1NVTScsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICMgVGhlIGxpY2Vuc2UgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gUy9MSUNfRklMRV9DSEVDS1NVTS4KKyAgICBzcmNkaXIgPSBkLmdldFZhcignUycsIFRydWUpCisgICAgIyBEaXJlY3Rvcnkgd2Ugc3RvcmUgdGhlIGdlbmVyaWMgbGljZW5zZXMgYXMgc2V0IGluIHRoZSBkaXN0cm8gY29uZmlndXJhdGlvbgorICAgIGdlbmVyaWNfZGlyZWN0b3J5ID0gZC5nZXRWYXIoJ0NPTU1PTl9MSUNFTlNFX0RJUicsIFRydWUpCisgICAgIyBMaXN0IG9mIGJhc2VuYW1lLCBwYXRoIHR1cGxlcworICAgIGxpY19maWxlc19wYXRocyA9IFtdCisgICAgbGljZW5zZV9zb3VyY2VfZGlycyA9IFtdCisgICAgbGljZW5zZV9zb3VyY2VfZGlycy5hcHBlbmQoZ2VuZXJpY19kaXJlY3RvcnkpCisgICAgdHJ5OgorICAgICAgICBhZGRpdGlvbmFsX2xpY19kaXJzID0gZC5nZXRWYXIoJ0xJQ0VOU0VfUEFUSCcsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgZm9yIGxpY19kaXIgaW4gYWRkaXRpb25hbF9saWNfZGlyczoKKyAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMuYXBwZW5kKGxpY19kaXIpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBGaW5kVmlzaXRvcihvZS5saWNlbnNlLkxpY2Vuc2VWaXNpdG9yKToKKyAgICAgICAgZGVmIHZpc2l0X1N0cihzZWxmLCBub2RlKToKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVW50aWwgSSBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aAorICAgICAgICAgICAgIyB0aGUgdHdvIG1vZGlmaWVycyBJIHN1cHBvcnQgKG9yIGdyZWF0ZXIgPSArCisgICAgICAgICAgICAjIGFuZCAid2l0aCBleGNlcHRpb25zIiBiZWluZyAqCisgICAgICAgICAgICAjIHdlJ2xsIGp1c3Qgc3RyaXAgb3V0IHRoZSBtb2RpZmllciBhbmQgcHV0CisgICAgICAgICAgICAjIHRoZSBiYXNlIGxpY2Vuc2UuCisgICAgICAgICAgICBmaW5kX2xpY2Vuc2Uobm9kZS5zLnJlcGxhY2UoIisiLCAiIikucmVwbGFjZSgiKiIsICIiKSkKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJpY192aXNpdChub2RlKQorCisgICAgZGVmIGZpbmRfbGljZW5zZShsaWNlbnNlX3R5cGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZ2VuX2xpY19kZXN0KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNwZHhfZ2VuZXJpYyA9IE5vbmUKKyAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBOb25lCisgICAgICAgICMgSWYgdGhlIGdlbmVyaWMgZG9lcyBub3QgZXhpc3Qgd2UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU1BEWCBtYXBwaW5nIHRvIGl0LAorICAgICAgICAjIHVubGVzcyBOT19HRU5FUklDX0xJQ0VOU0UgaXMgc2V0LgorCisgICAgICAgIGZvciBsaWNfZGlyIGluIGxpY2Vuc2Vfc291cmNlX2RpcnM6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGxpY19kaXIsIGxpY2Vuc2VfdHlwZSkpOgorICAgICAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlX3R5cGUpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgR3JlYXQsIHRoZXJlIGlzIGFuIFNQRFhMSUNFTlNFTUFQLiBXZSBjYW4gY29weSEKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIldlIG5lZWQgdG8gdXNlIGEgU1BEWExJQ0VOU0VNQVAgZm9yICVzIiAlIChsaWNlbnNlX3R5cGUpKQorICAgICAgICAgICAgICAgICAgICBzcGR4X2dlbmVyaWMgPSBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZV90eXBlKQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlX3NvdXJjZSA9IGxpY19kaXIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGxpY19kaXIsIGxpY2Vuc2VfdHlwZSkpOgorICAgICAgICAgICAgICAgIHNwZHhfZ2VuZXJpYyA9IGxpY2Vuc2VfdHlwZQorICAgICAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gbGljX2RpcgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgc3BkeF9nZW5lcmljIGFuZCBsaWNlbnNlX3NvdXJjZToKKyAgICAgICAgICAgICMgd2UgcmVhbGx5IHNob3VsZCBjb3B5IHRvIGdlbmVyaWNfICsgc3BkeF9nZW5lcmljLCBob3dldmVyLCB0aGF0IGVuZHMgdXAgbWVzc2luZyB0aGUgbWFuaWZlc3QKKyAgICAgICAgICAgICMgYXVkaXQgdXAuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGluIGVtaXRfcGtnZGF0YSAob3IsIHdlIGFjdHVhbGx5IGdvdCBhbmQgZml4IGFsbCB0aGUgcmVjaXBlcykKKworICAgICAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgoImdlbmVyaWNfIiArIGxpY2Vuc2VfdHlwZSwgb3MucGF0aC5qb2luKGxpY2Vuc2Vfc291cmNlLCBzcGR4X2dlbmVyaWMpKSkKKworICAgICAgICAgICAgIyBUaGUgdXNlciBtYXkgYXR0ZW1wdCB0byB1c2UgTk9fR0VORVJJQ19MSUNFTlNFIGZvciBhIGdlbmVyaWMgbGljZW5zZSB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UKKyAgICAgICAgICAgICMgYW5kIHNob3VsZCBub3QgYmUgYWxsb3dlZCwgd2FybiB0aGUgdXNlciBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ05PX0dFTkVSSUNfTElDRU5TRScsIGxpY2Vuc2VfdHlwZSk6CisgICAgICAgICAgICAgICAgYmIud2FybigiJXM6ICVzIGlzIGEgZ2VuZXJpYyBsaWNlbnNlLCBwbGVhc2UgZG9uJ3QgdXNlIE5PX0dFTkVSSUNfTElDRU5TRSBmb3IgaXQuIiAlIChwbiwgbGljZW5zZV90eXBlKSkKKworICAgICAgICBlbGlmIGQuZ2V0VmFyRmxhZygnTk9fR0VORVJJQ19MSUNFTlNFJywgbGljZW5zZV90eXBlKToKKyAgICAgICAgICAgICMgaWYgTk9fR0VORVJJQ19MSUNFTlNFIGlzIHNldCwgd2UgY29weSB0aGUgbGljZW5zZSBmaWxlcyBmcm9tIHRoZSBmZXRjaGVkIHNvdXJjZQorICAgICAgICAgICAgIyBvZiB0aGUgcGFja2FnZSByYXRoZXIgdGhhbiB0aGUgbGljZW5zZV9zb3VyY2VfZGlycy4KKyAgICAgICAgICAgIGZvciAoYmFzZW5hbWUsIHBhdGgpIGluIGxpY19maWxlc19wYXRoczoKKyAgICAgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ05PX0dFTkVSSUNfTElDRU5TRScsIGxpY2Vuc2VfdHlwZSkgPT0gYmFzZW5hbWU6CisgICAgICAgICAgICAgICAgICAgIGxpY19maWxlc19wYXRocy5hcHBlbmQoKCJnZW5lcmljXyIgKyBsaWNlbnNlX3R5cGUsIHBhdGgpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBZGQgZXhwbGljaXR5IGF2b2lkIG9mIENMT1NFRCBsaWNlbnNlIGJlY2F1c2UgdGhpcyBpc24ndCBnZW5lcmljCisgICAgICAgICAgICBpZiBsaWNlbnNlX3R5cGUgIT0gJ0NMT1NFRCc6CisgICAgICAgICAgICAgICAgIyBBbmQgaGVyZSBpcyB3aGVyZSB3ZSB3YXJuIHBlb3BsZSB0aGF0IHRoZWlyIGxpY2Vuc2VzIGFyZSBsb3VzeQorICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBObyBnZW5lcmljIGxpY2Vuc2UgZmlsZSBleGlzdHMgZm9yOiAlcyBpbiBhbnkgcHJvdmlkZXIiICUgKHBuLCBsaWNlbnNlX3R5cGUpKQorICAgICAgICAgICAgcGFzcworCisgICAgaWYgbm90IGdlbmVyaWNfZGlyZWN0b3J5OgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJDT01NT05fTElDRU5TRV9ESVIgaXMgdW5zZXQuIFBsZWFzZSBzZXQgdGhpcyBpbiB5b3VyIGRpc3RybyBjb25maWciKQorCisgICAgaWYgbm90IGxpY19maWxlczoKKyAgICAgICAgIyBObyByZWNpcGUgc2hvdWxkIGhhdmUgYW4gaW52YWxpZCBsaWNlbnNlIGZpbGUuIFRoaXMgaXMgY2hlY2tlZCBlbHNlCisgICAgICAgICMgd2hlcmUsIGJ1dCBsZXQncyBiZSBwZWRhbnRpYworICAgICAgICBiYi5ub3RlKHBuICsgIjogUmVjaXBlIGZpbGUgZG9lcyBub3QgaGF2ZSBsaWNlbnNlIGZpbGUgaW5mb3JtYXRpb24uIikKKyAgICAgICAgcmV0dXJuIGxpY19maWxlc19wYXRocworCisgICAgZm9yIHVybCBpbiBsaWNfZmlsZXMuc3BsaXQoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgKHR5cGUsIGhvc3QsIHBhdGgsIHVzZXIsIHBzd2QsIHBhcm0pID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAgJXMiICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCB1cmwpKQorICAgICAgICAjIFdlIHdhbnQgdGhlIGxpY2Vuc2UgZmlsZW5hbWUgYW5kIHBhdGgKKyAgICAgICAgc3JjbGljZmlsZSA9IG9zLnBhdGguam9pbihzcmNkaXIsIHBhdGgpCisgICAgICAgIGxpY19maWxlc19wYXRocy5hcHBlbmQoKG9zLnBhdGguYmFzZW5hbWUocGF0aCksIHNyY2xpY2ZpbGUpKQorCisgICAgdiA9IEZpbmRWaXNpdG9yKCkKKyAgICB0cnk6CisgICAgICAgIHYudmlzaXRfc3RyaW5nKGxpY2Vuc2VfdHlwZXMpCisgICAgZXhjZXB0IG9lLmxpY2Vuc2UuSW52YWxpZExpY2Vuc2UgYXMgZXhjOgorICAgICAgICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUEYnLCBUcnVlKSwgZXhjKSkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgIGJiLndhcm4oIiVzOiBGYWlsZWQgdG8gcGFyc2UgaXQncyBMSUNFTlNFIGZpZWxkLiIgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpKQorCisgICAgcmV0dXJuIGxpY19maWxlc19wYXRocworCitkZWYgcmV0dXJuX3NwZHgoZCwgbGljZW5zZSk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzcGR4IG1hcHBpbmcgb2YgYSBsaWNlbnNlIGlmIGl0IGV4aXN0cy4KKyAgICAgIiIiCisgICAgcmV0dXJuIGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlLCBUcnVlKQorCitkZWYgY2Fub25pY2FsX2xpY2Vuc2UoZCwgbGljZW5zZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBjYW5vbmljYWwgKFNQRFgpIGZvcm0gb2YgdGhlIGxpY2Vuc2UgaWYgYXZhaWxhYmxlIChzbyBHUEx2MworICAgIGJlY29tZXMgR1BMLTMuMCksIGZvciB0aGUgbGljZW5zZSBuYW1lZCAnWCsnLCByZXR1cm4gY2Fub25pY2FsIGZvcm0gb2YKKyAgICAnWCcgaWYgYXZhaWxhYmVsIGFuZCB0aGUgdGFpbGluZyAnKycgKHNvIEdQTHYzKyBiZWNvbWVzIEdQTC0zLjArKSwgCisgICAgb3IgdGhlIHBhc3NlZCBsaWNlbnNlIGlmIHRoZXJlIGlzIG5vIGNhbm9uaWNhbCBmb3JtLgorICAgICIiIgorICAgIGxpYyA9IGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlLCBUcnVlKSBvciAiIgorICAgIGlmIG5vdCBsaWMgYW5kIGxpY2Vuc2UuZW5kc3dpdGgoJysnKToKKyAgICAgICAgbGljID0gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2UucnN0cmlwKCcrJyksIFRydWUpCisgICAgICAgIGlmIGxpYzoKKyAgICAgICAgICAgIGxpYyArPSAnKycKKyAgICByZXR1cm4gbGljIG9yIGxpY2Vuc2UKKworZGVmIGV4cGFuZF93aWxkY2FyZF9saWNlbnNlcyhkLCB3aWxkY2FyZF9saWNlbnNlcyk6CisgICAgIiIiCisgICAgUmV0dXJuIGFjdHVhbCBzcGR4IGZvcm1hdCBsaWNlbnNlIG5hbWVzIGlmIHdpbGRjYXJkIHVzZWQuIFdlIGV4cGFuZAorICAgIHdpbGRjYXJkcyBmcm9tIFNQRFhMSUNFTlNFTUFQIGZsYWdzIGFuZCBTUkNfRElTVFJJQlVURV9MSUNFTlNFUyB2YWx1ZXMuCisgICAgIiIiCisgICAgaW1wb3J0IGZubWF0Y2gKKyAgICBsaWNlbnNlcyA9IFtdCisgICAgc3BkeG1hcGtleXMgPSBkLmdldFZhckZsYWdzKCdTUERYTElDRU5TRU1BUCcpLmtleXMoKQorICAgIGZvciB3bGRfbGljIGluIHdpbGRjYXJkX2xpY2Vuc2VzOgorICAgICAgICBzcGR4ZmxhZ3MgPSBmbm1hdGNoLmZpbHRlcihzcGR4bWFwa2V5cywgd2xkX2xpYykKKyAgICAgICAgbGljZW5zZXMgKz0gW2QuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBmbGFnKSBmb3IgZmxhZyBpbiBzcGR4ZmxhZ3NdCisKKyAgICBzcGR4X2xpY3MgPSAoZC5nZXRWYXIoJ1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgZm9yIHdsZF9saWMgaW4gd2lsZGNhcmRfbGljZW5zZXM6CisgICAgICAgIGxpY2Vuc2VzICs9IGZubWF0Y2guZmlsdGVyKHNwZHhfbGljcywgd2xkX2xpYykKKworICAgIGxpY2Vuc2VzID0gbGlzdChzZXQobGljZW5zZXMpKQorICAgIHJldHVybiBsaWNlbnNlcworCitkZWYgaW5jb21wYXRpYmxlX2xpY2Vuc2VfY29udGFpbnMobGljZW5zZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICBsaWNlbnNlID0gY2Fub25pY2FsX2xpY2Vuc2UoZCwgbGljZW5zZSkKKyAgICBiYWRfbGljZW5zZXMgPSAoZC5nZXRWYXIoJ0lOQ09NUEFUSUJMRV9MSUNFTlNFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBiYWRfbGljZW5zZXMgPSBleHBhbmRfd2lsZGNhcmRfbGljZW5zZXMoZCwgYmFkX2xpY2Vuc2VzKQorICAgIHJldHVybiB0cnVldmFsdWUgaWYgbGljZW5zZSBpbiBiYWRfbGljZW5zZXMgZWxzZSBmYWxzZXZhbHVlCisKK2RlZiBpbmNvbXBhdGlibGVfbGljZW5zZShkLCBkb250X3dhbnRfbGljZW5zZXMsIHBhY2thZ2U9Tm9uZSk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSByZWNpcGUgaGFzIG9ubHkgaW5jb21wYXRpYmxlIGxpY2Vuc2VzLiBJdCBhbHNvCisgICAgdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gJ29yJyBvcGVyYW5kLiAgZG9udF93YW50X2xpY2Vuc2VzIHNob3VsZCBiZSBwYXNzZWQKKyAgICBhcyBjYW5vbmljYWwgKFNQRFgpIG5hbWVzLgorICAgICIiIgorICAgIGltcG9ydCBvZS5saWNlbnNlCisgICAgbGljZW5zZSA9IGQuZ2V0VmFyKCJMSUNFTlNFXyVzIiAlIHBhY2thZ2UsIFRydWUpIGlmIHBhY2thZ2UgZWxzZSBOb25lCisgICAgaWYgbm90IGxpY2Vuc2U6CisgICAgICAgIGxpY2Vuc2UgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisKKyAgICAjIEhhbmRsZXMgYW4gIm9yIiBvciB0d28gbGljZW5zZSBzZXRzIHByb3ZpZGVkIGJ5CisgICAgIyBmbGF0dGVuZWRfbGljZW5zZXMoKSwgcGljayBvbmUgdGhhdCB3b3JrcyBpZiBwb3NzaWJsZS4KKyAgICBkZWYgY2hvb3NlX2xpY19zZXQoYSwgYik6CisgICAgICAgIHJldHVybiBhIGlmIGFsbChvZS5saWNlbnNlLmxpY2Vuc2Vfb2soY2Fub25pY2FsX2xpY2Vuc2UoZCwgbGljKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF93YW50X2xpY2Vuc2VzKSBmb3IgbGljIGluIGEpIGVsc2UgYgorCisgICAgdHJ5OgorICAgICAgICBsaWNlbnNlcyA9IG9lLmxpY2Vuc2UuZmxhdHRlbmVkX2xpY2Vuc2VzKGxpY2Vuc2UsIGNob29zZV9saWNfc2V0KQorICAgIGV4Y2VwdCBvZS5saWNlbnNlLkxpY2Vuc2VFcnJvciBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQJywgVHJ1ZSksIGV4YykpCisgICAgcmV0dXJuIGFueShub3Qgb2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsIGwpLCBcCisJCWRvbnRfd2FudF9saWNlbnNlcykgZm9yIGwgaW4gbGljZW5zZXMpCisKK2RlZiBjaGVja19saWNlbnNlX2ZsYWdzKGQpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgcmVjaXBlIGhhcyBhbnkgTElDRU5TRV9GTEFHUyB0aGF0CisgICAgYXJlbid0IHdoaXRlbGlzdGVkLgorCisgICAgSWYgaXQgZG9lcywgaXQgcmV0dXJucyB0aGUgZmlyc3QgTElDRU5TRV9GTEFHUyBpdGVtIG1pc3NpbmcgZnJvbSB0aGUKKyAgICB3aGl0ZWxpc3QsIG9yIGFsbCBvZiB0aGUgTElDRU5TRV9GTEFHUyBpZiB0aGVyZSBpcyBubyB3aGl0ZWxpc3QuCisKKyAgICBJZiBldmVyeXRoaW5nIGlzIGlzIHByb3Blcmx5IHdoaXRlbGlzdGVkLCBpdCByZXR1cm5zIE5vbmUuCisgICAgIiIiCisKKyAgICBkZWYgbGljZW5zZV9mbGFnX21hdGNoZXMoZmxhZywgd2hpdGVsaXN0LCBwbik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gVHJ1ZSBpZiBmbGFnIG1hdGNoZXMgc29tZXRoaW5nIGluIHdoaXRlbGlzdCwgTm9uZSBpZiBub3QuCisKKyAgICAgICAgQmVmb3JlIHdlIHRlc3QgYSBmbGFnIGFnYWluc3QgdGhlIHdoaXRlbGlzdCwgd2UgYXBwZW5kIF8ke1BOfQorICAgICAgICB0byBpdC4gIFdlIHRoZW4gdHJ5IHRvIG1hdGNoIHRoYXQgc3RyaW5nIGFnYWluc3QgdGhlCisgICAgICAgIHdoaXRlbGlzdC4gIFRoaXMgY292ZXJzIHRoZSBub3JtYWwgY2FzZSwgd2hlcmUgd2UgZXhwZWN0CisgICAgICAgIExJQ0VOU0VfRkxBR1MgdG8gYmUgYSBzaW1wbGUgc3RyaW5nIGxpa2UgJ2NvbW1lcmNpYWwnLCB3aGljaAorICAgICAgICB0aGUgdXNlciB0eXBpY2FsbHkgbWF0Y2hlcyBleGFjdGx5IGluIHRoZSB3aGl0ZWxpc3QgYnkKKyAgICAgICAgZXhwbGljaXRseSBhcHBlbmRpbmcgdGhlIHBhY2thZ2UgbmFtZSBlLmcgJ2NvbW1lcmNpYWxfZm9vJy4KKyAgICAgICAgSWYgd2UgZmFpbCB0aGUgbWF0Y2ggaG93ZXZlciwgd2UgdGhlbiBzcGxpdCB0aGUgZmxhZyBhY3Jvc3MKKyAgICAgICAgJ18nIGFuZCBhcHBlbmQgZWFjaCBmcmFnbWVudCBhbmQgdGVzdCB1bnRpbCB3ZSBlaXRoZXIgbWF0Y2ggb3IKKyAgICAgICAgcnVuIG91dCBvZiBmcmFnbWVudHMuCisgICAgICAgICIiIgorICAgICAgICBmbGFnX3BuID0gKCIlc18lcyIgJSAoZmxhZywgcG4pKQorICAgICAgICBmb3IgY2FuZGlkYXRlIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgIGlmIGZsYWdfcG4gPT0gY2FuZGlkYXRlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZsYWdfY3VyID0gIiIKKyAgICAgICAgZmxhZ21lbnRzID0gZmxhZ19wbi5zcGxpdCgiXyIpCisgICAgICAgIGZsYWdtZW50cy5wb3AoKSAjIHdlJ3ZlIGFscmVhZHkgdGVzdGVkIHRoZSBmdWxsIHN0cmluZworICAgICAgICBmb3IgZmxhZ21lbnQgaW4gZmxhZ21lbnRzOgorICAgICAgICAgICAgaWYgZmxhZ19jdXI6CisgICAgICAgICAgICAgICAgZmxhZ19jdXIgKz0gIl8iCisgICAgICAgICAgICBmbGFnX2N1ciArPSBmbGFnbWVudAorICAgICAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgZmxhZ19jdXIgPT0gY2FuZGlkYXRlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhbGxfbGljZW5zZV9mbGFnc19tYXRjaChsaWNlbnNlX2ZsYWdzLCB3aGl0ZWxpc3QpOgorICAgICAgICAiIiIgUmV0dXJuIGZpcnN0IHVubWF0Y2hlZCBmbGFnLCBOb25lIGlmIGFsbCBmbGFncyBtYXRjaCAiIiIKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBzcGxpdF93aGl0ZWxpc3QgPSB3aGl0ZWxpc3Quc3BsaXQoKQorICAgICAgICBmb3IgZmxhZyBpbiBsaWNlbnNlX2ZsYWdzLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBub3QgbGljZW5zZV9mbGFnX21hdGNoZXMoZmxhZywgc3BsaXRfd2hpdGVsaXN0LCBwbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWcKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGxpY2Vuc2VfZmxhZ3MgPSBkLmdldFZhcignTElDRU5TRV9GTEFHUycsIFRydWUpCisgICAgaWYgbGljZW5zZV9mbGFnczoKKyAgICAgICAgd2hpdGVsaXN0ID0gZC5nZXRWYXIoJ0xJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHdoaXRlbGlzdDoKKyAgICAgICAgICAgIHJldHVybiBsaWNlbnNlX2ZsYWdzCisgICAgICAgIHVubWF0Y2hlZF9mbGFnID0gYWxsX2xpY2Vuc2VfZmxhZ3NfbWF0Y2gobGljZW5zZV9mbGFncywgd2hpdGVsaXN0KQorICAgICAgICBpZiB1bm1hdGNoZWRfZmxhZzoKKyAgICAgICAgICAgIHJldHVybiB1bm1hdGNoZWRfZmxhZworICAgIHJldHVybiBOb25lCisKK2RlZiBjaGVja19saWNlbnNlX2Zvcm1hdChkKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBMSUNFTlNFIGlzIHdlbGwgZGVmaW5lZCwKKyAgICAgICAgVmFsaWRhdGUgb3BlcmF0b3JzIGluIExJQ0VOU0VTLgorICAgICAgICBObyBzcGFjZXMgYXJlIGFsbG93ZWQgYmV0d2VlbiBMSUNFTlNFUy4KKyAgICAiIiIKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbGljZW5zZXMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgZnJvbSBvZS5saWNlbnNlIGltcG9ydCBsaWNlbnNlX29wZXJhdG9yLCBsaWNlbnNlX29wZXJhdG9yX2NoYXJzLCBsaWNlbnNlX3BhdHRlcm4KKworICAgIGVsZW1lbnRzID0gZmlsdGVyKGxhbWJkYSB4OiB4LnN0cmlwKCksIGxpY2Vuc2Vfb3BlcmF0b3Iuc3BsaXQobGljZW5zZXMpKQorICAgIGZvciBwb3MsIGVsZW1lbnQgaW4gZW51bWVyYXRlKGVsZW1lbnRzKToKKyAgICAgICAgaWYgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgaWYgcG9zID4gMCBhbmQgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnRzW3BvcyAtIDFdKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCclczogTElDRU5TRSB2YWx1ZSAiJXMiIGhhcyBhbiBpbnZhbGlkIGZvcm1hdCAtIGxpY2Vuc2UgbmFtZXMgJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBzZXBhcmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIHRvIGluZGljYXRlICcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBsaWNlbnNlIHNlbGVjdGlvbjogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChwbiwgbGljZW5zZXMsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMpKQorICAgICAgICBlbGlmIG5vdCBsaWNlbnNlX29wZXJhdG9yLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgYmIud2FybignJXM6IExJQ0VOU0UgdmFsdWUgIiVzIiBoYXMgYW4gaW52YWxpZCBzZXBhcmF0b3IgIiVzIiB0aGF0IGlzIG5vdCAnIFwKKyAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSB2YWxpZCBsaXN0IG9mIHNlcGFyYXRvcnMgKCVzKScgJQorICAgICAgICAgICAgICAgICAgICAocG4sIGxpY2Vuc2VzLCBlbGVtZW50LCBsaWNlbnNlX29wZXJhdG9yX2NoYXJzKSkKKworU1NUQVRFVEFTS1MgKz0gImRvX3BvcHVsYXRlX2xpYyIKK2RvX3BvcHVsYXRlX2xpY1tzc3RhdGUtaW5wdXRkaXJzXSA9ICIke0xJQ1NTVEFURURJUn0iCitkb19wb3B1bGF0ZV9saWNbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7TElDRU5TRV9ESVJFQ1RPUll9LyIKKworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRfcHJlcGVuZCA9ICJ3cml0ZV9wYWNrYWdlX21hbmlmZXN0OyBsaWNlbnNlX2NyZWF0ZV9tYW5pZmVzdDsgIgorCitkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmVbZGlyc10gPSAiJHtMSUNTU1RBVEVESVJ9LyR7UE59IgorZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lW2NsZWFuZGlyc10gPSAiJHtMSUNTU1RBVEVESVJ9IgorcHl0aG9uIGRvX3BvcHVsYXRlX2xpY19zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BvcHVsYXRlX2xpY19zZXRzY2VuZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZTcxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL2xpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw0MSBAQAorIyBwYXJzZSBrZXJuZWwgQUJJIHZlcnNpb24gb3V0IG9mIDxsaW51eC92ZXJzaW9uLmg+CitkZWYgZ2V0X2tlcm5lbHZlcnNpb25faGVhZGVycyhwKToKKyAgICBpbXBvcnQgcmUKKworICAgIGZuID0gcCArICcvaW5jbHVkZS9saW51eC91dHNyZWxlYXNlLmgnCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgIyBhZnRlciAyLjYuMzMtcmMxCisgICAgICAgIGZuID0gcCArICcvaW5jbHVkZS9nZW5lcmF0ZWQvdXRzcmVsZWFzZS5oJworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgIGZuID0gcCArICcvaW5jbHVkZS9saW51eC92ZXJzaW9uLmgnCisKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGZuLCAncicpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBsID0gZi5yZWFkbGluZXMoKQorICAgIGYuY2xvc2UoKQorICAgIHIgPSByZS5jb21waWxlKCIjZGVmaW5lIFVUU19SRUxFQVNFIFwiKC4qKVwiIikKKyAgICBmb3IgcyBpbiBsOgorICAgICAgICBtID0gci5tYXRjaChzKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBnZXRfa2VybmVsdmVyc2lvbl9maWxlKHApOgorICAgIGZuID0gcCArICcva2VybmVsLWFiaXZlcnNpb24nCisKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIGYucmVhZGxpbmVzKClbMF0uc3RyaXAoKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgbGludXhfbW9kdWxlX3BhY2thZ2VzKHMsIGQpOgorCXN1ZmZpeCA9ICIiCisJcmV0dXJuICIgIi5qb2luKG1hcChsYW1iZGEgczogImtlcm5lbC1tb2R1bGUtJXMlcyIgJSAocy5sb3dlcigpLnJlcGxhY2UoJ18nLCAnLScpLnJlcGxhY2UoJ0AnLCAnKycpLCBzdWZmaXgpLCBzLnNwbGl0KCkpKQorCisjIHRoYXQncyBhbGwKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzdjMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9sb2dnaW5nLmJiY2xhc3MKQEAgLTAsMCArMSwxMDEgQEAKKyMgVGhlIGZvbGxvd2luZyBsb2dnaW5nIG1lY2hhbmlzbXMgYXJlIHRvIGJlIHVzZWQgaW4gYmFzaCBmdW5jdGlvbnMgb2YgcmVjaXBlcy4KKyMgVGhleSBhcmUgaW50ZW5kZWQgdG8gbWFwIG9uZSB0byBvbmUgaW4gaW50ZW50aW9uIGFuZCBvdXRwdXQgZm9ybWF0IHdpdGggdGhlCisjIHB5dGhvbiByZWNpcGUgbG9nZ2luZyBmdW5jdGlvbnMgb2YgYSBzaW1pbGFyIG5hbWluZyBjb252ZW50aW9uOiBiYi5wbGFpbigpLAorIyBiYi5ub3RlKCksIGV0Yy4KKworTE9HRklGTyA9ICIke1R9L2ZpZm8uJHtAb3MuZ2V0cGlkKCl9IgorCisjIFByaW50IHRoZSBvdXRwdXQgZXhhY3RseSBhcyBpdCBpcyBwYXNzZWQgaW4uIFR5cGljYWxseSB1c2VkIGZvciBvdXRwdXQgb2YKKyMgdGFza3MgdGhhdCBzaG91bGQgYmUgc2VlbiBvbiB0aGUgY29uc29sZS4gVXNlIHNwYXJpbmdseS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2JicGxhaW4oKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJicGxhaW4gJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiJCoiCisJZmkKK30KKworIyBOb3RpZnkgdGhlIHVzZXIgb2YgYSBub3Rld29ydGh5IGNvbmRpdGlvbi4gCisjIE91dHB1dDogbG9ncworYmJub3RlKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYm5vdGUgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiTk9URTogJCoiCisJZmkKK30KKworIyBQcmludCBhIHdhcm5pbmcgdG8gdGhlIGxvZy4gV2FybmluZ3MgYXJlIG5vbi1mYXRhbCwgYW5kIGRvIG5vdAorIyBpbmRpY2F0ZSBhIGJ1aWxkIGZhaWx1cmUuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYndhcm4oKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJid2FybiAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJXQVJOSU5HOiAkKiIKKwlmaQorfQorCisjIFByaW50IGFuIGVycm9yIHRvIHRoZSBsb2cuIEVycm9ycyBhcmUgbm9uLWZhdGFsIGluIHRoYXQgdGhlIGJ1aWxkIGNhbgorIyBjb250aW51ZSwgYnV0IHRoZXkgZG8gaW5kaWNhdGUgYSBidWlsZCBmYWlsdXJlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJlcnJvcigpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJlcnJvciAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJFUlJPUjogJCoiCisJZmkKK30KKworIyBQcmludCBhIGZhdGFsIGVycm9yIHRvIHRoZSBsb2cuIEZhdGFsIGVycm9ycyBpbmRpY2F0ZSBidWlsZCBmYWlsdXJlCisjIGFuZCBoYWx0IHRoZSBidWlsZCwgZXhpdGluZyB3aXRoIGFuIGVycm9yIGNvZGUuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYmZhdGFsKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYmZhdGFsICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkVSUk9SOiAkKiIKKwlmaQorCWV4aXQgMQorfQorCisjIExpa2UgYmJmYXRhbCwgZXhjZXB0IHByZXZlbnRzIHRoZSBzdXBwcmVzc2lvbiBvZiB0aGUgZXJyb3IgbG9nIGJ5CisjIGJpdGJha2UncyBVSS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2JiZmF0YWxfbG9nKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYmZhdGFsX2xvZyAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJFUlJPUjogJCoiCisJZmkKKwlleGl0IDEKK30KKworIyBQcmludCBkZWJ1ZyBtZXNzYWdlcy4gVGhlc2UgYXJlIGFwcHJvcHJpYXRlIGZvciBwcm9ncmVzcyBjaGVja3BvaW50CisjIG1lc3NhZ2VzIHRvIHRoZSBsb2dzLiBEZXBlbmRpbmcgb24gdGhlIGRlYnVnIGxvZyBsZXZlbCwgdGhleSBtYXkgYWxzbworIyBnbyB0byB0aGUgY29uc29sZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKKyMgVXNhZ2U6IGJiZGVidWcgMSAiZmlyc3QgbGV2ZWwgZGVidWcgbWVzc2FnZSIKKyMgICAgICAgIGJiZGVidWcgMiAic2Vjb25kIGxldmVsIGRlYnVnIG1lc3NhZ2UiCitiYmRlYnVnKCkgeworCVVTQUdFPSdVc2FnZTogYmJkZWJ1ZyBbMTIzXSAibWVzc2FnZSInCisJaWYgWyAkIyAtbHQgMiBdOyB0aGVuCisJCWJiZmF0YWwgIiRVU0FHRSIKKwlmaQorCQorCSMgU3RyaXAgb2ZmIHRoZSBkZWJ1ZyBsZXZlbCBhbmQgZW5zdXJlIGl0IGlzIGFuIGludGVnZXIKKwlEQkdMVkw9JDE7IHNoaWZ0CisJTk9ORElHSVRTPSQoZWNobyAiJERCR0xWTCIgfCB0ciAtZCBbOmRpZ2l0Ol0pCisJaWYgWyAiJE5PTkRJR0lUUyIgXTsgdGhlbgorCQliYmZhdGFsICIkVVNBR0UiCisJZmkKKworCSMgQWxsIGRlYnVnIG91dHB1dCBpcyBwcmludGVkIHRvIHRoZSBsb2dzCisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZGVidWcgJERCR0xWTCAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJERUJVRzogJCoiCisJZmkKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWV0YS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWV0YS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjg5MDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhLmJiY2xhc3MKQEAgLTAsMCArMSw0IEBACisKK1BBQ0tBR0VTID0gIiIKKworZG9fYnVpbGRbcmVjcmRlcHRhc2tdID0gImRvX2J1aWxkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWV0YWRhdGFfc2NtLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdlNjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWV0YWRhdGFfc2NtLmJiY2xhc3MKQEAgLTAsMCArMSw4MiBAQAorTUVUQURBVEFfQlJBTkNIID89ICIke0BiYXNlX2RldGVjdF9icmFuY2goZCl9IgorTUVUQURBVEFfUkVWSVNJT04gPz0gIiR7QGJhc2VfZGV0ZWN0X3JldmlzaW9uKGQpfSIKKworZGVmIGJhc2VfZGV0ZWN0X3JldmlzaW9uKGQpOgorICAgIHBhdGggPSBiYXNlX2dldF9zY21iYXNlcGF0aChkKQorCisgICAgc2NtcyA9IFtiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24sIFwKKyAgICAgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX3N2bl9yZXZpc2lvbl0KKworICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgcmV2ID0gc2NtKHBhdGgsIGQpCisgICAgICAgIGlmIHJldiAhPSAiPHVua25vd24+IjoKKyAgICAgICAgICAgIHJldHVybiByZXYKKworICAgIHJldHVybiAiPHVua25vd24+IgorCitkZWYgYmFzZV9kZXRlY3RfYnJhbmNoKGQpOgorICAgIHBhdGggPSBiYXNlX2dldF9zY21iYXNlcGF0aChkKQorCisgICAgc2NtcyA9IFtiYXNlX2dldF9tZXRhZGF0YV9naXRfYnJhbmNoXQorCisgICAgZm9yIHNjbSBpbiBzY21zOgorICAgICAgICByZXYgPSBzY20ocGF0aCwgZCkKKyAgICAgICAgaWYgcmV2ICE9ICI8dW5rbm93bj4iOgorICAgICAgICAgICAgcmV0dXJuIHJldi5zdHJpcCgpCisKKyAgICByZXR1cm4gIjx1bmtub3duPiIKKworZGVmIGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpOgorICAgIHJldHVybiBkLmdldFZhciggJ0NPUkVCQVNFJywgVHJ1ZSkKKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX21vbm90b25lX2JyYW5jaChwYXRoLCBkKToKKyAgICBtb25vdG9uZV9icmFuY2ggPSAiPHVua25vd24+IgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIlcy9fTVROL29wdGlvbnMiICUgcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIG1vbm90b25lX2JyYW5jaCA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG1vbm90b25lX2JyYW5jaC5zdGFydHN3aXRoKCAiZGF0YWJhc2UiICk6CisgICAgICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoX3dvcmRzID0gbW9ub3RvbmVfYnJhbmNoLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9icmFuY2ggPSBtb25vdG9uZV9icmFuY2hfd29yZHNbIG1vbm90b25lX2JyYW5jaF93b3Jkcy5pbmRleCggImJyYW5jaCIgKSsxXVsxOi0xXQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworICAgIHJldHVybiBtb25vdG9uZV9icmFuY2gKKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX21vbm90b25lX3JldmlzaW9uKHBhdGgsIGQpOgorICAgIG1vbm90b25lX3JldmlzaW9uID0gIjx1bmtub3duPiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiJXMvX01UTi9yZXZpc2lvbiIgJSBwYXRoKSBhcyBmOgorICAgICAgICAgICAgbW9ub3RvbmVfcmV2aXNpb24gPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBtb25vdG9uZV9yZXZpc2lvbi5zdGFydHN3aXRoKCAiZm9ybWF0X3ZlcnNpb24iICk6CisgICAgICAgICAgICAgICAgbW9ub3RvbmVfcmV2aXNpb25fd29yZHMgPSBtb25vdG9uZV9yZXZpc2lvbi5zcGxpdCgpCisgICAgICAgICAgICAgICAgbW9ub3RvbmVfcmV2aXNpb24gPSBtb25vdG9uZV9yZXZpc2lvbl93b3Jkc1sgbW9ub3RvbmVfcmV2aXNpb25fd29yZHMuaW5kZXgoICJvbGRfcmV2aXNpb24iICkrMV1bMTotMV0KKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworICAgIHJldHVybiBtb25vdG9uZV9yZXZpc2lvbgorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfc3ZuX3JldmlzaW9uKHBhdGgsIGQpOgorICAgICMgVGhpcyBvbmx5IHdvcmtzIHdpdGggb2xkZXIgc3VidmVyc2lvbi4gRm9yIG5ld2VyIHZlcnNpb25zIAorICAgICMgdGhpcyBmdW5jdGlvbiB3aWxsIG5lZWQgdG8gYmUgZml4ZWQgYnkgc29tZW9uZSBpbnRlcmVzdGVkCisgICAgcmV2aXNpb24gPSAiPHVua25vd24+IgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIlcy8uc3ZuL2VudHJpZXMiICUgcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIHJldmlzaW9uID0gZi5yZWFkbGluZXMoKVszXS5zdHJpcCgpCisgICAgZXhjZXB0IChJT0Vycm9yLCBJbmRleEVycm9yKToKKyAgICAgICAgcGFzcworICAgIHJldHVybiByZXZpc2lvbgorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChwYXRoLCBkKToKKyAgICBicmFuY2ggPSBvcy5wb3BlbignY2QgJXM7IGdpdCBicmFuY2ggMj4mMSB8IGdyZXAgIl4qICIgfCB0ciAtZCAiKiAiJyAlIHBhdGgpLnJlYWQoKQorCisgICAgaWYgbGVuKGJyYW5jaCkgIT0gMDoKKyAgICAgICAgcmV0dXJuIGJyYW5jaAorICAgIHJldHVybiAiPHVua25vd24+IgorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X3JldmlzaW9uKHBhdGgsIGQpOgorICAgIGYgPSBvcy5wb3BlbigiY2QgJXM7IGdpdCBsb2cgLW4gMSAtLXByZXR0eT1vbmVsaW5lIC0tIDI+JjEiICUgcGF0aCkKKyAgICBkYXRhID0gZi5yZWFkKCkKKyAgICBpZiBmLmNsb3NlKCkgaXMgTm9uZTogICAgICAgIAorICAgICAgICByZXYgPSBkYXRhLnNwbGl0KCIgIilbMF0KKyAgICAgICAgaWYgbGVuKHJldikgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiByZXYKKyAgICByZXR1cm4gIjx1bmtub3duPiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlncmF0ZV9sb2NhbGNvdW50LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTBkZjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlncmF0ZV9sb2NhbGNvdW50LmJiY2xhc3MKQEAgLTAsMCArMSw0NiBAQAorUFJTRVJWX0RVTVBESVIgPz89ICIke0xPR19ESVJ9L2RiIgorTE9DQUxDT1VOVF9EVU1QRklMRSA/Pz0gIiR7UFJTRVJWX0RVTVBESVJ9L3Byc2Vydi1sb2NhbGNvdW50LWV4cG9ydHMuaW5jIgorCitweXRob24gbWlncmF0ZV9sb2NhbGNvdW50X2hhbmRsZXIgKCkgeworICAgIGltcG9ydCBiYi5ldmVudAorICAgIGlmIG5vdCBlLmRhdGE6CisgICAgICAgIHJldHVybgorCisgICAgcHYgPSBlLmRhdGEuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgaWYgbm90ICdBVVRPSU5DJyBpbiBwdjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGNvdW50cyA9IGJiLnBlcnNpc3RfZGF0YS5wZXJzaXN0KCdCQl9VUklfTE9DQUxDT1VOVCcsIGUuZGF0YSkKKyAgICBwbiA9IGUuZGF0YS5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICByZXZzID0gbG9jYWxjb3VudHMuZ2V0X2J5X3BhdHRlcm4oJyUlLSVzX3JldicgJSBwbikKKyAgICBjb3VudHMgPSBsb2NhbGNvdW50cy5nZXRfYnlfcGF0dGVybignJSUtJXNfY291bnQnICUgcG4pCisgICAgaWYgbm90IHJldnMgb3Igbm90IGNvdW50czoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBsZW4ocmV2cykgIT0gbGVuKGNvdW50cyk6CisgICAgICAgIGJiLndhcm4oIlRoZSBudW1iZXIgb2YgcmV2cyBhbmQgbG9jYWxjb3VudHMgZG9uJ3QgbWF0Y2ggaW4gJXMiICUgcG4pCisgICAgICAgIHJldHVybgorCisgICAgdmVyc2lvbiA9IGUuZGF0YS5nZXRWYXIoJ1BSQVVUT0lOWCcsIFRydWUpCisgICAgc3JjcmV2ID0gYmIuZmV0Y2gyLmdldF9zcmNyZXYoZS5kYXRhKQorICAgIGJhc2VfdmVyID0gJ0FVVE9JTkMtJXMnICUgdmVyc2lvbls6dmVyc2lvbi5maW5kKHNyY3JldildCisgICAgcGtnYXJjaCA9IGUuZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpCisgICAgdmFsdWUgPSBtYXgoaW50KGNvdW50KSBmb3IgY291bnQgaW4gY291bnRzKQorCisgICAgaWYgbGVuKHJldnMpID09IDE6CisgICAgICAgIGlmIHNyY3JldiAhPSAoJ0FVVE9JTkMrJXMnICUgcmV2c1swXSk6CisgICAgICAgICAgICB2YWx1ZSArPSAxCisgICAgZWxzZToKKyAgICAgICAgdmFsdWUgKz0gMQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGUuZGF0YS5nZXRWYXIoJ1BSU0VSVl9EVU1QRElSJywgVHJ1ZSkpCisgICAgZGYgPSBlLmRhdGEuZ2V0VmFyKCdMT0NBTENPVU5UX0RVTVBGSUxFJywgVHJ1ZSkKKyAgICBmbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGRmKQorICAgIHdpdGggb3BlbihkZiwgJ2EnKSBhcyBmZDoKKyAgICAgICAgZmQud3JpdGUoJ1BSQVVUTyQlcyQlcyQlcyA9ICIlcyJcbicgJQorICAgICAgICAgICAgICAgIChiYXNlX3ZlciwgcGtnYXJjaCwgc3JjcmV2LCBzdHIodmFsdWUpKSkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGZsb2NrKQorfQorCithZGRoYW5kbGVyIG1pZ3JhdGVfbG9jYWxjb3VudF9oYW5kbGVyCittaWdyYXRlX2xvY2FsY291bnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVBhcnNlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21pbWUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21pbWUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFjNzNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWltZS5iYmNsYXNzCkBAIC0wLDAgKzEsNTYgQEAKK0RFUEVORFMgKz0gInNoYXJlZC1taW1lLWluZm8tbmF0aXZlIHNoYXJlZC1taW1lLWluZm8iCisKK21pbWVfcG9zdGluc3QoKSB7CitpZiBbICIkMSIgPSBjb25maWd1cmUgXTsgdGhlbgorCVVQREFURU1JTUVEQj1gd2hpY2ggdXBkYXRlLW1pbWUtZGF0YWJhc2VgCisJaWYgWyAteCAiJFVQREFURU1JTUVEQiIgXSA7IHRoZW4KKwkJZWNobyAiVXBkYXRpbmcgTUlNRSBkYXRhYmFzZS4uLiB0aGlzIG1heSB0YWtlIGEgd2hpbGUuIgorCQkkVVBEQVRFTUlNRURCICREJHtkYXRhZGlyfS9taW1lCisJZWxzZQorCQllY2hvICJNaXNzaW5nIHVwZGF0ZS1taW1lLWRhdGFiYXNlLCB1cGRhdGUgb2YgbWltZSBkYXRhYmFzZSBmYWlsZWQhIgorCQlleGl0IDEKKwlmaQorZmkKK30KKworbWltZV9wb3N0cm0oKSB7CitpZiBbICIkMSIgPSByZW1vdmUgXSB8fCBbICIkMSIgPSB1cGdyYWRlIF07IHRoZW4KKwlVUERBVEVNSU1FREI9YHdoaWNoIHVwZGF0ZS1taW1lLWRhdGFiYXNlYAorCWlmIFsgLXggIiRVUERBVEVNSU1FREIiIF0gOyB0aGVuCisJCWVjaG8gIlVwZGF0aW5nIE1JTUUgZGF0YWJhc2UuLi4gdGhpcyBtYXkgdGFrZSBhIHdoaWxlLiIKKwkJJFVQREFURU1JTUVEQiAkRCR7ZGF0YWRpcn0vbWltZQorCWVsc2UKKwkJZWNobyAiTWlzc2luZyB1cGRhdGUtbWltZS1kYXRhYmFzZSwgdXBkYXRlIG9mIG1pbWUgZGF0YWJhc2UgZmFpbGVkISIKKwkJZXhpdCAxCisJZmkKK2ZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQgKCkgeworICAgIGltcG9ydCByZQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ2Rlc3QgPSAgZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgbWltZV9kaXIgPSAnJXMvJXMvdXNyL3NoYXJlL21pbWUvcGFja2FnZXMnICUgKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgbWltZXMgPSBbXQorICAgICAgICBtaW1lX3JlID0gcmUuY29tcGlsZSgiLipcLnhtbCQiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtaW1lX2Rpcik6CisgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKG1pbWVfZGlyKToKKyAgICAgICAgICAgICAgICBpZiBtaW1lX3JlLm1hdGNoKGYpOgorICAgICAgICAgICAgICAgICAgICBtaW1lcy5hcHBlbmQoZikKKyAgICAgICAgaWYgbWltZXM6CisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgbWltZSBwb3N0aW5zdCBhbmQgcG9zdHJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdtaW1lX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKyAgICAgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdtaW1lX3Bvc3RybScsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKKyAgICAgICAgICAgIGJiLm5vdGUoImFkZGluZyBzaGFyZWQtbWltZS1pbmZvLWRhdGEgZGVwZW5kZW5jeSB0byAlcyIgJSBwa2cpCisgICAgICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgIiBzaGFyZWQtbWltZS1pbmZvLWRhdGEiKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NmMwNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MKQEAgLTAsMCArMSw2NyBAQAorTUlSUk9SUyArPSAiXAorJHtERUJJQU5fTUlSUk9SfQlodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi1hcmNoaXZlLzIwMTIwMzI4VDA5Mjc1MlovZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi1hcmNoaXZlLzIwMTEwMTI3VDA4NDI1N1ovZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi1hcmNoaXZlLzIwMDkwODAyVDAwNDE1M1ovZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5hdS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmNsLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaHIuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5maS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmhrLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaHUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5pZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLml0LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuanAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5uby5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnBsLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAucm8uZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5zaS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmVzLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuc2UuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC50ci5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7R05VX01JUlJPUn0JZnRwOi8vbWlycm9ycy5rZXJuZWwub3JnL2dudSBcbiBcCiske0tFUk5FTE9SR19NSVJST1J9CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIgXG4gXAorZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvICAgICBmdHA6Ly9mdHAuZnJhbmtlbi5kZS9wdWIvY3J5cHQvbWlycm9yL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyBcbiBcCitmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGZ0cDovL2Z0cC5zdXJmbmV0Lm5sL3B1Yi9zZWN1cml0eS9nbnVwZy8gXG4gXAorZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvICAgICBodHRwOi8vZ3VsdXMuVVNoZXJicm9va2UuY2EvcHViL2FwcGwvR251UEcvIFxuIFwKK2Z0cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGZ0cDovL2Z0cC5mdS1iZXJsaW4uZGUvdGV4L0NUQU4gXG4gXAorZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgaHR0cDovL3N1bnNpdGUuc3V0LmFjLmpwL3B1Yi9hcmNoaXZlcy9jdGFuLyBcbiBcCitmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJjaGl2ZSBodHRwOi8vY3Rhbi51bnN3LmVkdS5hdS8gXG4gXAorZnRwOi8vZnRwLmdudXRscy5vcmcvZ2NyeXB0L2dudXRscyBmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9nbnV0bHMvIFxuIFwKK2h0dHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy8gaHR0cDovL21pcnJvci5zd2l0Y2guY2gvZnRwL21pcnJvci9pbmZvemlwL3NyYy8gXG4gXAoraHR0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjLyBmdHA6Ly9zdW5zaXRlLmljbS5lZHUucGwvcHViL3VuaXgvYXJjaGl2aW5nL2luZm8temlwL3NyYy8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5jZXJpYXMucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9zeXN1dGlscy9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLnRhdS5hYy5pbC9wdWIvdW5peC9hZG1pbi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5jZXJ0LmRmbi5kZS9wdWIvdG9vbHMvYWRtaW4vbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5mdS1iZXJsaW4uZGUvcHViL3VuaXgvdG9vbHMvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC5rYWl6by5vcmcvcHViL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudHUtZGFybXN0YWR0LmRlL3B1Yi9zeXNhZG1pbi9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLnR1eC5vcmcvcHViL3NpdGVzL3ZpYy5jYy5wdXJkdWUuZWR1L3Rvb2xzL3VuaXgvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2dkLnR1d2llbi5hYy5hdC91dGlscy9hZG1pbi10b29scy9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vc3Vuc2l0ZS51YWxiZXJ0YS5jYS9wdWIvTWlycm9yL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly90aGUud2lyZXRhcHBlZC5uZXQvcHViL3NlY3VyaXR5L2hvc3Qtc2VjdXJpdHkvbHNvZi8gXG4gXAoraHR0cDovL3d3dy5hcGFjaGUub3JnL2Rpc3QgIGh0dHA6Ly9hcmNoaXZlLmFwYWNoZS5vcmcvZGlzdCBcbiBcCitodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC93YXRjaGRvZy8gaHR0cDovL2Zvc3NpZXMub3JnL2xpbnV4L21pc2MvIFxuIFwKKyR7U0FWQU5OQUhfR05VX01JUlJPUn0gaHR0cDovL2Rvd25sb2FkLW1pcnJvci5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzIFxuIFwKKyR7U0FWQU5OQUhfTk9OR05VX01JUlJPUn0gaHR0cDovL2Rvd25sb2FkLW1pcnJvci5zYXZhbm5haC5ub25nbnUub3JnL3JlbGVhc2VzIFxuIFwKK2N2czovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK3N2bjovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2dpdDovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2hnOi8vLiovLiogICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2J6cjovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK3A0Oi8vLiovLiogICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK29zYzovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2h0dHBzPyQ6Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2Z0cDovLy4qLy4qICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2N2czovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitzdm46Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorZ2l0Oi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2hnOi8vLiovLiogICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitienI6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorcDQ6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK29zYzovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitodHRwcz8kOi8vLiovLiogaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorZnRwOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKKyR7Q1BBTl9NSVJST1J9ICBodHRwOi8vY3Bhbi5tZXRhY3Bhbi5vcmcvIFxuIFwKKyR7Q1BBTl9NSVJST1J9ICBodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vIFxuIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL21vZHVsZS1iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTI2YzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjcgQEAKK2luaGVyaXQga2VybmVsLWFyY2gKKworIyBUaGlzIGlzIGluc3RlYWQgb2YgREVQRU5EUyA9ICJ2aXJ0dWFsL2tlcm5lbCIKK2RvX2NvbmZpZ3VyZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisKK2V4cG9ydCBPUyA9ICIke1RBUkdFVF9PU30iCitleHBvcnQgQ1JPU1NfQ09NUElMRSA9ICIke1RBUkdFVF9QUkVGSVh9IgorCisjIFRoaXMgcG9pbnRzIHRvIHRoZSBidWlsZCBhcnRlZmFjdHMgZnJvbSB0aGUgbWFpbiBrZXJuZWwgYnVpbGQKKyMgc3VjaCBhcyAuY29uZmlnIGFuZCBTeXN0ZW0ubWFwCisjIENvbmZ1c2luZ2x5IGl0IGlzIG5vdCB0aGUgbW9kdWxlIGJ1aWxkIG91dHB1dCAod2hpY2ggaXMgJHtCfSkgYnV0CisjIHdlIGRpZG4ndCBwaWNrIHRoZSBuYW1lLgorZXhwb3J0IEtCVUlMRF9PVVRQVVQgPSAiJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0iCisKK2V4cG9ydCBLRVJORUxfVkVSU0lPTiA9ICIke0BiYXNlX3JlYWRfZmlsZSgnJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0va2VybmVsLWFiaXZlcnNpb24nKX0iCitLRVJORUxfT0JKRUNUX1NVRkZJWCA9ICIua28iCisKKyMga2VybmVsIG1vZHVsZXMgYXJlIGdlbmVyYWxseSBtYWNoaW5lIHNwZWNpZmljCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisjIEZ1bmN0aW9uIHRvIGVuc3VyZSB0aGUga2VybmVsIHNjcmlwdHMgYXJlIGNyZWF0ZWQuIEV4cGVjdGVkIHRvCisjIGJlIGNhbGxlZCBiZWZvcmUgZG9fY29tcGlsZS4gU2VlIG1vZHVsZS5iYmNsYXNzIGZvciBhbiBleG1hcGxlLgorZG9fbWFrZV9zY3JpcHRzKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTIAorCW1ha2UgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgQVI9IiR7S0VSTkVMX0FSfSIgXAorCSAgICAgICAgICAgLUMgJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gc2NyaXB0cworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbW9kdWxlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTUyYzBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbW9kdWxlLmJiY2xhc3MKQEAgLTAsMCArMSwzMiBAQAoraW5oZXJpdCBtb2R1bGUtYmFzZSBrZXJuZWwtbW9kdWxlLXNwbGl0CisKK2FkZHRhc2sgbWFrZV9zY3JpcHRzIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCitkb19tYWtlX3NjcmlwdHNbbG9ja2ZpbGVzXSA9ICIke1RNUERJUn0va2VybmVsLXNjcmlwdHMubG9jayIKK2RvX21ha2Vfc2NyaXB0c1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisKK0VYVFJBX09FTUFLRSArPSAiS0VSTkVMX1NSQz0ke1NUQUdJTkdfS0VSTkVMX0RJUn0iCisKK21vZHVsZV9kb19jb21waWxlKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTCisJb2VfcnVubWFrZSBLRVJORUxfUEFUSD0ke1NUQUdJTkdfS0VSTkVMX0RJUn0gICBcCisJCSAgIEtFUk5FTF9WRVJTSU9OPSR7S0VSTkVMX1ZFUlNJT059ICAgIFwKKwkJICAgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgXAorCQkgICBBUj0iJHtLRVJORUxfQVJ9IiBcCisJICAgICAgICAgICBPPSR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IFwKKwkJICAgJHtNQUtFX1RBUkdFVFN9Cit9CisKK21vZHVsZV9kb19pbnN0YWxsKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTCisJb2VfcnVubWFrZSBERVBNT0Q9ZWNobyBJTlNUQUxMX01PRF9QQVRIPSIke0R9IiBcCisJICAgICAgICAgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJICAgICAgICAgICBPPSR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IFwKKwkgICAgICAgICAgIG1vZHVsZXNfaW5zdGFsbAorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbXBpbGUgZG9faW5zdGFsbAorCisjIGFkZCBhbGwgc3BsaXR0ZWQgbW9kdWxlcyB0byBQTiBSREVQRU5EUywgUE4gY2FuIGJlIGVtcHR5IG5vdworS0VSTkVMX01PRFVMRVNfTUVUQV9QQUNLQUdFID0gIiR7UE59IgorRklMRVNfJHtQTn0gPSAiIgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjFkOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYi5iYmNsYXNzCkBAIC0wLDAgKzEsMTUxIEBACitweXRob24gbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXIgKCkgeworICAgIGNscyA9IGUuZGF0YS5nZXRWYXIoIkJCRVhURU5EQ1VSUiIsIFRydWUpCisgICAgdmFyaWFudCA9IGUuZGF0YS5nZXRWYXIoIkJCRVhURU5EVkFSSUFOVCIsIFRydWUpCisgICAgaWYgY2xzICE9ICJtdWx0aWxpYiIgb3Igbm90IHZhcmlhbnQ6CisgICAgICAgIHJldHVybgorCisgICAgZS5kYXRhLnNldFZhcignU1RBR0lOR19LRVJORUxfRElSJywgZS5kYXRhLmdldFZhcignU1RBR0lOR19LRVJORUxfRElSJywgVHJ1ZSkpCisKKyAgICAjIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBrZXJuZWwgaW4gbXVsdGlsaWIgY29uZmlncworICAgICMgV2UgYWxzbyBza2lwIG11bHRpbGliIHNldHVwIGZvciBtb2R1bGUgcGFja2FnZXMuCisgICAgcHJvdmlkZXMgPSAoZS5kYXRhLmdldFZhcigiUFJPVklERVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmICJ2aXJ0dWFsL2tlcm5lbCIgaW4gcHJvdmlkZXMgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBlLmRhdGEpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiV2Ugc2hvdWxkbid0IGhhdmUgbXVsdGlsaWIgdmFyaWFudHMgZm9yIHRoZSBrZXJuZWwiKQorCisgICAgc2F2ZV92YXJfbmFtZT1lLmRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9TQVZFX1ZBUk5BTUUiLCBUcnVlKSBvciAiIgorICAgIGZvciBuYW1lIGluIHNhdmVfdmFyX25hbWUuc3BsaXQoKToKKyAgICAgICAgdmFsPWUuZGF0YS5nZXRWYXIobmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgZS5kYXRhLnNldFZhcihuYW1lICsgIl9NVUxUSUxJQl9PUklHSU5BTCIsIHZhbCkKKworICAgIG92ZXJyaWRlcyA9IGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKQorICAgIHBuID0gZS5kYXRhLmdldFZhcigiUE4iLCBGYWxzZSkKKyAgICBvdmVycmlkZXMgPSBvdmVycmlkZXMucmVwbGFjZSgicG4tJHtQTn0iLCAicG4tJHtQTn06cG4tIiArIHBuKQorICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZS5kYXRhKToKKyAgICAgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCB2YXJpYW50ICsgIi0iKQorICAgICAgICBlLmRhdGEuc2V0VmFyKCJQTiIsIHZhcmlhbnQgKyAiLSIgKyBlLmRhdGEuZ2V0VmFyKCJQTiIsIEZhbHNlKSkKKyAgICAgICAgdGFyZ2V0X3ZlbmRvciA9IGUuZGF0YS5nZXRWYXIoIlRBUkdFVF9WRU5ET1JfIiArICJ2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHZhcmlhbnQsIEZhbHNlKQorICAgICAgICBpZiB0YXJnZXRfdmVuZG9yOgorICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiVEFSR0VUX1ZFTkRPUiIsIHRhcmdldF92ZW5kb3IpCisgICAgICAgIHJldHVybgorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBlLmRhdGEpOgorICAgICAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIHZhcmlhbnQgKyAiLSIpCisgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHZhcmlhbnQKKyAgICAgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZS5kYXRhKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJXZSBjYW4ndCBleHRlbmQgbmF0aXZlIHJlY2lwZXMiKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZS5kYXRhKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJXZSBjYW4ndCBleHRlbmQgbmF0aXZlc2RrIHJlY2lwZXMiKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGUuZGF0YSkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBlLmRhdGEpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiRG9uJ3QgZXh0ZW5kIGFsbGFyY2ggcmVjaXBlcyB3aGljaCBhcmUgbm90IHBhY2thZ2Vncm91cHMiKQorCisKKyAgICAjIEV4cGFuZCB0aGlzIHNpbmNlIHRoaXMgd29uJ3Qgd29yayBjb3JyZWN0bHkgb25jZSB3ZSBzZXQgYSBtdWx0aWxpYiBpbnRvIHBsYWNlCisgICAgZS5kYXRhLnNldFZhcigiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLCBlLmRhdGEuZ2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIFRydWUpKQorIAorICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHZhcmlhbnQKKworICAgIGUuZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgdmFyaWFudCArICItIikKKyAgICBlLmRhdGEuc2V0VmFyKCJQTiIsIHZhcmlhbnQgKyAiLSIgKyBlLmRhdGEuZ2V0VmFyKCJQTiIsIEZhbHNlKSkKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKworICAgICMgRXhwYW5kIHRoZSBXSElURUxJU1RzIHdpdGggbXVsdGlsaWIgcHJlZml4CisgICAgZm9yIHdoaXRlbGlzdCBpbiBbIkhPU1RUT09MU19XSElURUxJU1RfR1BMLTMuMCIsICJXSElURUxJU1RfR1BMLTMuMCIsICJMR1BMdjJfV0hJVEVMSVNUX0dQTC0zLjAiXToKKyAgICAgICAgcGtncyA9IGUuZGF0YS5nZXRWYXIod2hpdGVsaXN0LCBUcnVlKQorICAgICAgICBmb3IgcGtnIGluIHBrZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIHBrZ3MgKz0gIiAiICsgdmFyaWFudCArICItIiArIHBrZworICAgICAgICBlLmRhdGEuc2V0VmFyKHdoaXRlbGlzdCwgcGtncykKKworICAgICMgREVGQVVMVFRVTkUgY2FuIGNoYW5nZSBUQVJHRVRfQVJDSCBvdmVycmlkZSBzbyBleHBhbmQgdGhpcyBub3cgYmVmb3JlIHVwZGF0ZV9kYXRhCisgICAgbmV3dHVuZSA9IGUuZGF0YS5nZXRWYXIoIkRFRkFVTFRUVU5FXyIgKyAidmlydGNsYXNzLW11bHRpbGliLSIgKyB2YXJpYW50LCBGYWxzZSkKKyAgICBpZiBuZXd0dW5lOgorICAgICAgICBlLmRhdGEuc2V0VmFyKCJERUZBVUxUVFVORSIsIG5ld3R1bmUpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoJ0RFRkFVTFRUVU5FX01MXyVzJyAlIHZhcmlhbnQsIG5ld3R1bmUpCit9CisKK2FkZGhhbmRsZXIgbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXIKK211bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UiCisKK1NUQUdJTkdDQ19wcmVwZW5kID0gIiR7QkJFWFRFTkRWQVJJQU5UfS0iCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgdmFyaWFudCA9IGQuZ2V0VmFyKCJCQkVYVEVORFZBUklBTlQiLCBUcnVlKQorCisgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCisKKyAgICBjbHNleHRlbmQgPSBvZS5jbGFzc2V4dGVuZC5DbGFzc0V4dGVuZGVyKHZhcmlhbnQsIGQpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdpbWFnZScsIGQpOgorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlBBQ0tBR0VfSU5TVEFMTCIpCisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiTElOR1VBU19JTlNUQUxMIikKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSREVQRU5EUyIpCisgICAgICAgIHBpbnN0YWxsID0gZC5nZXRWYXIoIkxJTkdVQVNfSU5TVEFMTCIsIFRydWUpICsgIiAiICsgZC5nZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFX0lOU1RBTEwiLCBwaW5zdGFsbCkKKyAgICAgICAgZC5zZXRWYXIoIkxJTkdVQVNfSU5TVEFMTCIsICIiKQorICAgICAgICAjIEZJWE1FLCB3ZSBuZWVkIHRvIG1hcCB0aGlzIHRvIHNvbWV0aGluZywgbm90IGRlbGV0ZSBpdCEKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsICIiKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncG9wdWxhdGVfc2RrX2Jhc2UnLCBkKToKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0siKQorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdpbWFnZScsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiREVQRU5EUyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUFJPVklERVMiKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VzKCkKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VfdmFyaWFibGVzKChkLmdldFZhcigiUEFDS0FHRVZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgIGNsc2V4dGVuZC5tYXBfcGFja2FnZXZhcnMoKQorICAgIGNsc2V4dGVuZC5tYXBfcmVnZXhwX3ZhcmlhYmxlKCJQQUNLQUdFU19EWU5BTUlDIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQQUNLQUdFX0lOU1RBTEwiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIklOSVRTQ1JJUFRfUEFDS0FHRVMiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlVTRVJBRERfUEFDS0FHRVMiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlNZU1RFTURfUEFDS0FHRVMiKQorfQorCitQQUNLQUdFRlVOQ1NfYXBwZW5kID0gIiBkb19wYWNrYWdlX3FhX211bHRpbGliIgorCitweXRob24gZG9fcGFja2FnZV9xYV9tdWx0aWxpYigpIHsKKworICAgIGRlZiBjaGVja19tbHByZWZpeChwa2csIHZhciwgbWxwcmVmaXgpOgorICAgICAgICB2YWx1ZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJyVzXyVzJyAlICh2YXIsIHBrZyksIFRydWUpIG9yIGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGNhbmRpZGF0ZXMgPSBbXQorICAgICAgICBmb3IgaSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBpZiBpLnN0YXJ0c3dpdGgoJ3ZpcnR1YWwvJyk6CisgICAgICAgICAgICAgICAgaSA9IGlbbGVuKCd2aXJ0dWFsLycpOl0KKyAgICAgICAgICAgIGlmIChub3QgaS5zdGFydHN3aXRoKCdrZXJuZWwtbW9kdWxlJykpIGFuZCAobm90IGkuc3RhcnRzd2l0aChtbHByZWZpeCkpIGFuZCBcCisgICAgICAgICAgICAgICAgKG5vdCAnY3Jvc3MtY2FuYWRpYW4nIGluIGkpIGFuZCAobm90IGkuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpKSBhbmQgXAorICAgICAgICAgICAgICAgIChub3QgaS5zdGFydHN3aXRoKCJydGxkIikpIGFuZCAobm90IGkuc3RhcnRzd2l0aCgna2VybmVsLXZtbGludXgnKSk6CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoaSkKKyAgICAgICAgaWYgbGVuKGNhbmRpZGF0ZXMpID4gMDoKKyAgICAgICAgICAgIG1zZyA9ICIlcyBwYWNrYWdlICVzIC0gc3VzcGljaW91cyB2YWx1ZXMgJyVzJyBpbiAlcyIgXAorICAgICAgICAgICAgICAgICAgICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csICcgJy5qb2luKGNhbmRpZGF0ZXMpLCB2YXIpCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigibXVsdGlsaWIiLCBtc2csIGQpCisKKyAgICBtbCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpCisgICAgaWYgbm90IG1sOgorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JERVBFTkRTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JQUk9WSURFUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSUkVDT01NRU5EUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSU1VHR0VTVFMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlJFUExBQ0VTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JDT05GTElDVFMnLCBtbCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2dsb2JhbC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyY2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2dsb2JhbC5iYmNsYXNzCkBAIC0wLDAgKzEsMTYyIEBACitkZWYgcHJlZmVycmVkX21sX3VwZGF0ZXMoZCk6CisgICAgIyBJZiBhbnkgUFJFRkVSUkVEX1BST1ZJREVSIG9yIFBSRUZFUlJFRF9WRVJTSU9OIGFyZSBzZXQsCisgICAgIyB3ZSBuZWVkIHRvIG1pcnJvciB0aGVzZSB2YXJpYWJsZXMgaW4gdGhlIG11bHRpbGliIGNhc2U7CisgICAgbXVsdGlsaWJzID0gZC5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpIG9yICIiCisgICAgaWYgbm90IG11bHRpbGliczoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwcmVmaXhlcyA9IFtdCisgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChlZXh0WzFdKQorCisgICAgdmVyc2lvbnMgPSBbXQorICAgIHByb3ZpZGVycyA9IFtdCisgICAgZm9yIHYgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIHYuc3RhcnRzd2l0aCgiUFJFRkVSUkVEX1ZFUlNJT05fIik6CisgICAgICAgICAgICB2ZXJzaW9ucy5hcHBlbmQodikKKyAgICAgICAgaWYgdi5zdGFydHN3aXRoKCJQUkVGRVJSRURfUFJPVklERVJfIik6CisgICAgICAgICAgICBwcm92aWRlcnMuYXBwZW5kKHYpCisKKyAgICBmb3IgdiBpbiB2ZXJzaW9uczoKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodiwgRmFsc2UpCisgICAgICAgIHBrZyA9IHYucmVwbGFjZSgiUFJFRkVSUkVEX1ZFUlNJT05fIiwgIiIpCisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3NzZGstIiBpbiBwa2cgb3IgcGtnLnN0YXJ0c3dpdGgoKCJuYXRpdmVzZGstIiwgInZpcnR1YWwvbmF0aXZlc2RrLSIpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmICctY3Jvc3MtJyBpbiBwa2cgYW5kICckeycgaW4gcGtnOgorICAgICAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgcAorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGlmICItY2FuYWRpYW4tIiBpbiBwa2c6CisgICAgICAgICAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKHYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQodikucmVwbGFjZSgiUFJFRkVSUkVEX1ZFUlNJT05fIiwgIlBSRUZFUlJFRF9WRVJTSU9OXyIgKyBwICsgJy0nKQorICAgICAgICAgICAgICAgIGlmIG5ld25hbWUgIT0gdjoKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsID0gbG9jYWxkYXRhLmV4cGFuZCh2YWwpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIG5ld3ZhbCkKKyAgICAgICAgICAgICMgQXZvaWQgZnV0dXJlIHZhcmlhYmxlIGtleSBleHBhbnNpb24KKyAgICAgICAgICAgIHZleHAgPSBkLmV4cGFuZCh2KQorICAgICAgICAgICAgaWYgdiAhPSB2ZXhwIGFuZCBkLmdldFZhcih2LCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5yZW5hbWVWYXIodiwgdmV4cCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgbmV3bmFtZSA9ICJQUkVGRVJSRURfVkVSU0lPTl8iICsgcCArICItIiArIHBrZworICAgICAgICAgICAgaWYgbm90IGQuZ2V0VmFyKG5ld25hbWUsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihuZXduYW1lLCB2YWwpCisKKyAgICBmb3IgcHJvdiBpbiBwcm92aWRlcnM6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHByb3YsIEZhbHNlKQorICAgICAgICBwa2cgPSBwcm92LnJlcGxhY2UoIlBSRUZFUlJFRF9QUk9WSURFUl8iLCAiIikKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zc3Nkay0iIGluIHBrZyBvciBwa2cuc3RhcnRzd2l0aCgoIm5hdGl2ZXNkay0iLCAidmlydHVhbC9uYXRpdmVzZGstIikpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBwa2c6CisgICAgICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBwCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQocHJvdikKKyAgICAgICAgICAgICAgICBpZiBuZXduYW1lICE9IHByb3Y6CisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCA9IGxvY2FsZGF0YS5leHBhbmQodmFsKQorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcihuZXduYW1lLCBuZXd2YWwpCisgICAgICAgICAgICAjIEF2b2lkIGZ1dHVyZSB2YXJpYWJsZSBrZXkgZXhwYW5zaW9uCisgICAgICAgICAgICBwcm92ZXhwID0gZC5leHBhbmQocHJvdikKKyAgICAgICAgICAgIGlmIHByb3YgIT0gcHJvdmV4cCBhbmQgZC5nZXRWYXIocHJvdiwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQucmVuYW1lVmFyKHByb3YsIHByb3ZleHApCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB2aXJ0ID0gIiIKKyAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICBwa2cgPSBwa2cucmVwbGFjZSgidmlydHVhbC8iLCAiIikKKyAgICAgICAgICAgIHZpcnQgPSAidmlydHVhbC8iCisgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgaWYgcGtnICE9ICJrZXJuZWwiOgorICAgICAgICAgICAgICAgIG5ld3ZhbCA9IHAgKyAiLSIgKyB2YWwKKworICAgICAgICAgICAgIyBpbXBsZW1lbnQgdmFyaWFibGUga2V5cworICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgICAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBwCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQocHJvdikKKyAgICAgICAgICAgIGlmIG5ld25hbWUgIT0gcHJvdiBhbmQgbm90IGQuZ2V0VmFyKG5ld25hbWUsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihuZXduYW1lLCBsb2NhbGRhdGEuZXhwYW5kKG5ld3ZhbCkpCisKKyAgICAgICAgICAgICMgaW1wbGVtZW50IGFsdGVybmF0aXZlIG11bHRpbGliIG5hbWUKKyAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKCJQUkVGRVJSRURfUFJPVklERVJfIiArIHZpcnQgKyBwICsgIi0iICsgcGtnKQorICAgICAgICAgICAgaWYgbm90IGQuZ2V0VmFyKG5ld25hbWUsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihuZXduYW1lLCBsb2NhbGRhdGEuZXhwYW5kKG5ld3ZhbCkpCisgICAgICAgICMgQXZvaWQgZnV0dXJlIHZhcmlhYmxlIGtleSBleHBhbnNpb24KKyAgICAgICAgcHJvdmV4cCA9IGQuZXhwYW5kKHByb3YpCisgICAgICAgIGlmIHByb3YgIT0gcHJvdmV4cCBhbmQgZC5nZXRWYXIocHJvdiwgRmFsc2UpOgorICAgICAgICAgICAgZC5yZW5hbWVWYXIocHJvdiwgcHJvdmV4cCkKKworCisgICAgbXAgPSAoZC5nZXRWYXIoIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZXh0cmFtcCA9IFtdCisgICAgZm9yIHAgaW4gbXA6CisgICAgICAgIGlmIHAuZW5kc3dpdGgoIi1uYXRpdmUiKSBvciAiLWNyb3Nzc2RrLSIgaW4gcCBvciBwLnN0YXJ0c3dpdGgoKCJuYXRpdmVzZGstIiwgInZpcnR1YWwvbmF0aXZlc2RrLSIpKSBvciAnY3Jvc3MtY2FuYWRpYW4nIGluIHA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB2aXJ0ID0gIiIKKyAgICAgICAgaWYgcC5zdGFydHN3aXRoKCJ2aXJ0dWFsLyIpOgorICAgICAgICAgICAgcCA9IHAucmVwbGFjZSgidmlydHVhbC8iLCAiIikKKyAgICAgICAgICAgIHZpcnQgPSAidmlydHVhbC8iCisgICAgICAgIGZvciBwcmVmIGluIHByZWZpeGVzOgorICAgICAgICAgICAgZXh0cmFtcC5hcHBlbmQodmlydCArIHByZWYgKyAiLSIgKyBwKQorICAgIGQuc2V0VmFyKCJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiLCAiICIuam9pbihtcCArIGV4dHJhbXApKQorCitweXRob24gbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfdmVuZG9yICgpIHsKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCk6CisgICAgICAgIGZvciB2IGluIGUuZGF0YS5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGUuZGF0YS5nZXRWYXIoIlRBUkdFVF9WRU5ET1JfdmlydGNsYXNzLW11bHRpbGliLSIgKyB2LCBGYWxzZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJUQVJHRVRfVkVORE9SX3ZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdiwgZS5kYXRhLmdldFZhcigiVEFSR0VUX1ZFTkRPUiIsIEZhbHNlKSArICJtbCIgKyB2KQorICAgICAgICBwcmVmZXJyZWRfbWxfdXBkYXRlcyhlLmRhdGEpCit9CithZGRoYW5kbGVyIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX3ZlbmRvcgorbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfdmVuZG9yW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgorCitweXRob24gbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfZ2xvYmFsICgpIHsKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIHZhcmlhbnQgPSBlLmRhdGEuZ2V0VmFyKCJCQkVYVEVORFZBUklBTlQiLCBUcnVlKQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5SZWNpcGVQYXJzZWQpIGFuZCBub3QgdmFyaWFudDoKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZS5kYXRhKSBvciBcCisgICAgICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGUuZGF0YSkgb3IgXAorICAgICAgICAgICAgKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBlLmRhdGEpIGFuZFwKKyAgICAgICAgICAgICBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZS5kYXRhKSk6CisgICAgICAgICAgICB2YXJpYW50cyA9IChlLmRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorICAgICAgICAgICAgY2xzZXh0ZW5kcyA9IFtdCisgICAgICAgICAgICBmb3IgdmFyaWFudCBpbiB2YXJpYW50czoKKyAgICAgICAgICAgICAgICBjbHNleHRlbmRzLmFwcGVuZChvZS5jbGFzc2V4dGVuZC5DbGFzc0V4dGVuZGVyKHZhcmlhbnQsIGUuZGF0YSkpCisKKyAgICAgICAgICAgICMgUHJvY2VzcyBQUk9WSURFUworICAgICAgICAgICAgb3JpZ3Byb3ZzID0gcHJvdnMgPSBlLmRhdGEuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgY2xzZXh0ZW5kIGluIGNsc2V4dGVuZHM6CisgICAgICAgICAgICAgICAgcHJvdnMgPSBwcm92cyArICIgIiArIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlBST1ZJREVTIiwgc2V0dmFyPUZhbHNlKQorICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiUFJPVklERVMiLCBwcm92cykKKworICAgICAgICAgICAgIyBQcm9jZXNzIFJQUk9WSURFUworICAgICAgICAgICAgb3JpZ3Jwcm92cyA9IHJwcm92cyA9IGUuZGF0YS5nZXRWYXIoIlJQUk9WSURFUyIsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgY2xzZXh0ZW5kIGluIGNsc2V4dGVuZHM6CisgICAgICAgICAgICAgICAgcnByb3ZzID0gcnByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUlBST1ZJREVTIiwgc2V0dmFyPUZhbHNlKQorICAgICAgICAgICAgaWYgcnByb3ZzLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiUlBST1ZJREVTIiwgcnByb3ZzKQorCisJICAgICMgUHJvY2VzcyBSUFJPVklERVNfJHtQTn0uLi4KKyAgICAgICAgICAgIGZvciBwa2cgaW4gKGUuZGF0YS5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgb3JpZ3Jwcm92cyA9IHJwcm92cyA9IGUuZGF0YS5nZXRWYXIoIlJQUk9WSURFU18lcyIgJSBwa2csIFRydWUpIG9yICIiCisgICAgICAgICAgICAgICAgZm9yIGNsc2V4dGVuZCBpbiBjbHNleHRlbmRzOgorICAgICAgICAgICAgICAgICAgICBycHJvdnMgPSBycHJvdnMgKyAiICIgKyBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJSUFJPVklERVNfJXMiICUgcGtnLCBzZXR2YXI9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJwcm92cyA9IHJwcm92cyArICIgIiArIGNsc2V4dGVuZC5leHRuYW1lICsgIi0iICsgcGtnCisgICAgICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgcnByb3ZzKQorfQorCithZGRoYW5kbGVyIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX2dsb2JhbAorbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfZ2xvYmFsW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UgYmIuZXZlbnQuUmVjaXBlUGFyc2VkIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9oZWFkZXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTBhMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9oZWFkZXIuYmJjbGFzcwpAQCAtMCwwICsxLDU0IEBACitpbmhlcml0IHNpdGVpbmZvCisKKyMgSWYgYXBwbGljYWJsZSBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGlzIHJvdXRpbmUgd2lsbCByZW5hbWUgdGhlIGhlYWRlciBhbmQKKyMgYWRkIGEgdW5pcXVlIGlkZW50aWZpZXIgdG8gdGhlIG5hbWUgZm9yIHRoZSBBQkkvYml0c2l6ZSB0aGF0IGlzIGJlaW5nIHVzZWQuCisjIEEgd3JhcHBlciB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IGtub3dzIGhvdyB0byBjYWxsCisjIGFsbCBvZiB0aGUgQUJJIHZhcmlhbnRzIGZvciB0aGF0IGdpdmVuIGFyY2hpdGVjdHVyZS4KKyMKK29lX211bHRpbGliX2hlYWRlcigpIHsKKworCWNhc2UgJHtIT1NUX09TfSBpbgorCSotbXVzbCopCisJCXJldHVybgorCQk7OworCSopCisJZXNhYworICAgICAgICAjIFdlIHVzZQorICAgICAgICAjIEZvciBBUk06IFdlIGRvbid0IHN1cHBvcnQgbXVsdGlsaWIgYnVpbGRzLgorICAgICAgICAjIEZvciBNSVBTOiAibjMyIiBpcyBhIHNwZWNpYWwgY2FzZSwgd2hpY2ggbmVlZHMgdG8gYmUKKyAgICAgICAgIyBkaXN0aW5jdCBmcm9tIGJvdGggNjQtYml0IGFuZCAzMi1iaXQuCisgICAgICAgIGNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKyAgICAgICAgYXJtKikgICByZXR1cm4KKyAgICAgICAgICAgICAgICA7OworICAgICAgICBtaXBzKikgIGNhc2UgIiR7TUlQU1BLR1NGWF9BQkl9IiBpbgorICAgICAgICAgICAgICAgICItbjMyIikKKyAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQ9bjMyICAgCisgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikgICAgIAorICAgICAgICAgICAgICAgICAgICAgICBpZGVudD0ke1NJVEVJTkZPX0JJVFN9CisgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICopICAgICAgaWRlbnQ9JHtTSVRFSU5GT19CSVRTfQorICAgICAgICBlc2FjCisJaWYgZWNobyAke1RBUkdFVF9BUkNIfSB8IGdyZXAgLXEgYXJtOyB0aGVuCisJICAgIHJldHVybgorCWZpCisJZm9yIGVhY2hfaGVhZGVyIGluICIkQCIgOyBkbworCSAgIGlmIFsgISAtZiAiJHtEfS8ke2luY2x1ZGVkaXJ9LyRlYWNoX2hlYWRlciIgXTsgdGhlbgorCSAgICAgIGJiZXJyb3IgIm9lX211bHRpbGliX2hlYWRlcjogVW5hYmxlIHRvIGZpbmQgaGVhZGVyICRlYWNoX2hlYWRlci4iCisJICAgICAgY29udGludWUKKwkgICBmaQorCSAgIHN0ZW09JChlY2hvICRlYWNoX2hlYWRlciB8IHNlZCAncyNcLmgkIyMnKQorCSAgICMgaWYgbWlwczY0L24zMiBzZXQgaWRlbnQgdG8gbjMyCisJICAgbXYgJHtEfS8ke2luY2x1ZGVkaXJ9LyRlYWNoX2hlYWRlciAke0R9LyR7aW5jbHVkZWRpcn0vJHtzdGVtfS0ke2lkZW50fS5oCisKKwkgICBzZWQgLWUgInMjRU5URVJfSEVBREVSX0ZJTEVOQU1FX0hFUkUjJHtzdGVtfSNnIiAke0NPUkVCQVNFfS9zY3JpcHRzL211bHRpbGliX2hlYWRlcl93cmFwcGVyLmggPiAke0R9LyR7aW5jbHVkZWRpcn0vJGVhY2hfaGVhZGVyCisJZG9uZQorfQorCisjIERlcGVuZGVuY2llcyBvbiBhcmNoIHZhcmlhYmxlcyBsaWtlIE1JUFNQS0dTRlhfQUJJIGNhbiBiZSBwcm9ibGVtYXRpYy4KKyMgV2UgZG9uJ3QgbmVlZCBtdWx0aWxpYiBoZWFkZXJzIGZvciBuYXRpdmUgYnVpbGRzIHNvIGJydXRlIGZvcmNlIHRoaW5ncy4KK29lX211bHRpbGliX2hlYWRlcl9jbGFzcy1uYXRpdmUgKCkgeworCXJldHVybgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2JjZDYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSwxODMgQEAKKyMgV2Ugd2FudCBuYXRpdmUgcGFja2FnZXMgdG8gYmUgcmVsb2NhdGFibGUKK2luaGVyaXQgcmVsb2NhdGFibGUKKworIyBOYXRpdmUgcGFja2FnZXMgYXJlIGJ1aWx0IGluZGlyZWN0bHkgdmlhIGRlcGVuZGVuY3ksCisjIG5vIG5lZWQgZm9yIHRoZW0gdG8gYmUgYSBkaXJlY3QgdGFyZ2V0IG9mICd3b3JsZCcKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRVNfRFlOQU1JQyA9ICIiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKKworIyB1c2VkIGJ5IGNtYWtlIGNsYXNzCitPRUNNQUtFX1JQQVRIID0gIiR7bGliZGlyfSIKK09FQ01BS0VfUlBBVEhfY2xhc3MtbmF0aXZlID0gIiR7bGliZGlyfSIKKworIyBXaGVuIHRoaXMgY2xhc3MgaGFzIHBhY2thZ2luZyBlbmFibGVkLCBzZXR0aW5nIAorIyBSUFJPVklERVMgYmVjb21lcyB1bm5lY2Vzc2FyeS4KK1JQUk9WSURFUyA9ICIke1BOfSIKKworVEFSR0VUX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK1RBUkdFVF9PUyA9ICIke0JVSUxEX09TfSIKK1RBUkdFVF9WRU5ET1IgPSAiJHtCVUlMRF9WRU5ET1J9IgorVEFSR0VUX1BSRUZJWCA9ICIke0JVSUxEX1BSRUZJWH0iCitUQVJHRVRfQ0NfQVJDSCA9ICIke0JVSUxEX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKK1RBUkdFVF9BU19BUkNIID0gIiR7QlVJTERfQVNfQVJDSH0iCitUQVJHRVRfQ1BQRkxBR1MgPSAiJHtCVUlMRF9DUFBGTEFHU30iCitUQVJHRVRfQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK1RBUkdFVF9DWFhGTEFHUyA9ICIke0JVSUxEX0NYWEZMQUdTfSIKK1RBUkdFVF9MREZMQUdTID0gIiR7QlVJTERfTERGTEFHU30iCitUQVJHRVRfRlBVID0gIiIKKworSE9TVF9BUkNIID0gIiR7QlVJTERfQVJDSH0iCitIT1NUX09TID0gIiR7QlVJTERfT1N9IgorSE9TVF9WRU5ET1IgPSAiJHtCVUlMRF9WRU5ET1J9IgorSE9TVF9QUkVGSVggPSAiJHtCVUlMRF9QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorCitDUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERfTERGTEFHU30iCitMREZMQUdTX2J1aWxkLWRhcndpbiA9ICItTCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSAiCisKK1NUQUdJTkdfQklORElSID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSIKK1NUQUdJTkdfQklORElSX0NST1NTID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSIKKworIyBuYXRpdmUgcGtnIGRvZXNuJ3QgbmVlZCB0aGUgVE9PTENIQUlOX09QVElPTlMuCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIiCisKK0RFUEVORFNfR0VUVEVYVCA9ICJnZXR0ZXh0LW5hdGl2ZSIKKworIyBEb24ndCBidWlsZCBwdGVzdCBuYXRpdmVseQorUFRFU1RfRU5BQkxFRCA9ICIwIgorCisjIERvbid0IHVzZSBzaXRlIGZpbGVzIGZvciBuYXRpdmUgYnVpbGRzCitleHBvcnQgQ09ORklHX1NJVEUgPSAiJHtDT1JFQkFTRX0vbWV0YS9zaXRlL25hdGl2ZSIKKworIyBzZXQgdGhlIGNvbXBpbGVyIGFzIHdlbGwuIEl0IGNvdWxkIGhhdmUgYmVlbiBzZXQgdG8gc29tZXRoaW5nIGVsc2UKK2V4cG9ydCBDQyA9ICIke0JVSUxEX0NDfSIKK2V4cG9ydCBDWFggPSAiJHtCVUlMRF9DWFh9IgorZXhwb3J0IEZDID0gIiR7QlVJTERfRkN9IgorZXhwb3J0IENQUCA9ICIke0JVSUxEX0NQUH0iCitleHBvcnQgTEQgPSAiJHtCVUlMRF9MRH0iCitleHBvcnQgQ0NMRCA9ICIke0JVSUxEX0NDTER9IgorZXhwb3J0IEFSID0gIiR7QlVJTERfQVJ9IgorZXhwb3J0IEFTID0gIiR7QlVJTERfQVN9IgorZXhwb3J0IFJBTkxJQiA9ICIke0JVSUxEX1JBTkxJQn0iCitleHBvcnQgU1RSSVAgPSAiJHtCVUlMRF9TVFJJUH0iCitleHBvcnQgTk0gPSAiJHtCVUlMRF9OTX0iCisKKyMgUGF0aCBwcmVmaXhlcworYmFzZV9wcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9IgorcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCitleGVjX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorCitiaW5kaXIgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9Igorc2JpbmRpciA9ICIke1NUQUdJTkdfU0JJTkRJUl9OQVRJVkV9IgorbGliZGlyID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSIKK2luY2x1ZGVkaXIgPSAiJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9Igorc3lzY29uZmRpciA9ICIke1NUQUdJTkdfRVRDRElSX05BVElWRX0iCitkYXRhZGlyID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0iCisKK2Jhc2VsaWIgPSAibGliIgorCisjIExpYnRvb2wncyBkZWZhdWx0IHBhdGhzIGFyZSBjb3JyZWN0IGZvciB0aGUgbmF0aXZlIG1hY2hpbmUKK2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjW3VuZXhwb3J0XSA9ICIxIgorCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA/PSAiIgorYmluZGlyIC49ICIke05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYfSIKK2xpYmRpciAuPSAiJHtOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWH0iCitsaWJleGVjZGlyIC49ICIke05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYfSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCisKKyMgU2luY2Ugd2UgYWN0dWFsbHkgaW5zdGFsbCB0aGVzZSBpbnRvIHNpdHUgdGhlcmUgaXMgbm8gc3RhZ2luZyBwcmVmaXgKK1NUQUdJTkdfRElSX0hPU1QgPSAiIgorU1RBR0lOR19ESVJfVEFSR0VUID0gIiIKK1BLR19DT05GSUdfRElSID0gIiR7bGliZGlyfS9wa2djb25maWciCisKK0VYVFJBX05BVElWRV9QS0dDT05GSUdfUEFUSCA/PSAiIgorUEtHX0NPTkZJR19QQVRIIC49ICIke0VYVFJBX05BVElWRV9QS0dDT05GSUdfUEFUSH0iCitQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiIKKworIyB3ZSBkb250IHdhbnQgbGliYy11Y2xpYmMgb3IgbGliYy1nbGliYyB0byBraWNrIGluIGZvciBuYXRpdmUgcmVjaXBlcworTElCQ09WRVJSSURFID0gIiIKK0NMQVNTT1ZFUlJJREUgPSAiY2xhc3MtbmF0aXZlIgorTUFDSElORU9WRVJSSURFUyA9ICIiCisKK1BBVEhfcHJlcGVuZCA9ICIke0NPUkVCQVNFfS9zY3JpcHRzL25hdGl2ZS1pbnRlcmNlcHQ6IgorCitweXRob24gbmF0aXZlX3ZpcnRjbGFzc19oYW5kbGVyICgpIHsKKyAgICBjbGFzc2V4dGVuZCA9IGUuZGF0YS5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKSBvciAiIgorICAgIGlmICJuYXRpdmUiIG5vdCBpbiBjbGFzc2V4dGVuZDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwbiA9IGUuZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgbWFwX2RlcGVuZGVuY2llcyh2YXJuYW1lLCBkLCBzdWZmaXggPSAiIik6CisgICAgICAgIGlmIHN1ZmZpeDoKKyAgICAgICAgICAgIHZhcm5hbWUgPSB2YXJuYW1lICsgIl8iICsgc3VmZml4CisgICAgICAgIGRlcHMgPSBkLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBub3QgZGVwczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGRlcHMpCisgICAgICAgIG5ld2RlcHMgPSBbXQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBpZiBkZXAgPT0gcG46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgIi1jcm9zcy0iIGluIGRlcDoKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXAucmVwbGFjZSgiLWNyb3NzIiwgIi1uYXRpdmUiKSkKKyAgICAgICAgICAgIGVsaWYgbm90IGRlcC5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKGRlcCArICItbmF0aXZlIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICBkLnNldFZhcih2YXJuYW1lLCAiICIuam9pbihuZXdkZXBzKSkKKworICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW5hdGl2ZSIpCisKKyAgICBtYXBfZGVwZW5kZW5jaWVzKCJERVBFTkRTIiwgZS5kYXRhKQorICAgIGZvciBwa2cgaW4gW2UuZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSksICIiLCAiJHtQTn0iXToKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUkRFUEVORFMiLCBlLmRhdGEsIHBrZykKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUlJFQ09NTUVORFMiLCBlLmRhdGEsIHBrZykKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUlNVR0dFU1RTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJQUk9WSURFUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSUkVQTEFDRVMiLCBlLmRhdGEsIHBrZykKKworICAgIHByb3ZpZGVzID0gZS5kYXRhLmdldFZhcigiUFJPVklERVMiLCBUcnVlKQorICAgIG5wcm92aWRlcyA9IFtdCisgICAgZm9yIHByb3YgaW4gcHJvdmlkZXMuc3BsaXQoKToKKyAgICAgICAgaWYgcHJvdi5maW5kKHBuKSAhPSAtMToKKyAgICAgICAgICAgIG5wcm92aWRlcy5hcHBlbmQocHJvdikKKyAgICAgICAgZWxpZiBub3QgcHJvdi5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgbnByb3ZpZGVzLmFwcGVuZChwcm92LnJlcGxhY2UocHJvdiwgcHJvdiArICItbmF0aXZlIikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBucHJvdmlkZXMuYXBwZW5kKHByb3YpCisgICAgZS5kYXRhLnNldFZhcigiUFJPVklERVMiLCAnICcuam9pbihucHJvdmlkZXMpKQorCisKK30KKworYWRkaGFuZGxlciBuYXRpdmVfdmlydGNsYXNzX2hhbmRsZXIKK25hdGl2ZV92aXJ0Y2xhc3NfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIgorCitkZWx0YXNrIHBhY2thZ2UKK2RlbHRhc2sgcGFja2FnZWRhdGEKK2RlbHRhc2sgcGFja2FnZV9xYQorZGVsdGFzayBwYWNrYWdlX3dyaXRlX2lwaworZGVsdGFzayBwYWNrYWdlX3dyaXRlX2RlYgorZGVsdGFzayBwYWNrYWdlX3dyaXRlX3JwbQorZGVsdGFzayBwYWNrYWdlX3dyaXRlCisKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitVU0VfTkxTID0gIm5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlc2RrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzRkYTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvbmF0aXZlc2RrLmJiY2xhc3MKQEAgLTAsMCArMSw5NyBAQAorIyBTREsgcGFja2FnZXMgYXJlIGJ1aWx0IGVpdGhlciBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyLAorIyBvciBpbmRpcmVjdGx5IHZpYSBkZXBlbmRlbmN5LiAgTm8gbmVlZCB0byBiZSBpbiAnd29ybGQnLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7U0RLX0FSQ0h9JHtTREtfVkVORE9SfS0ke1NES19PU30iCisKKyMgbGliYyBmb3IgdGhlIFNESyBjYW4gYmUgZGlmZmVyZW50IHRvIHRoYXQgb2YgdGhlIHRhcmdldAorTkFUSVZFU0RLTElCQyA/PSAibGliYy1nbGliYyIKK0xJQkNPVkVSUklERSA9ICI6JHtOQVRJVkVTREtMSUJDfSIKK0NMQVNTT1ZFUlJJREUgPSAiY2xhc3MtbmF0aXZlc2RrIgorTUFDSElORU9WRVJSSURFUyA9ICIiCisKKyMKKyMgVXBkYXRlIFBBQ0tBR0VfQVJDSCBhbmQgUEFDS0FHRV9BUkNIUworIworUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKK1BBQ0tBR0VfQVJDSFMgPSAiJHtTREtfUEFDS0FHRV9BUkNIU30iCisKKyMKKyMgV2UgbmVlZCBjaHJwYXRoID49IDAuMTQgdG8gZW5zdXJlIHdlIGNhbiBkZWFsIHdpdGggMzIgYW5kIDY0IGJpdAorIyBiaW5hcmllcworIworREVQRU5EU19hcHBlbmQgPSAiIGNocnBhdGgtcmVwbGFjZW1lbnQtbmF0aXZlIgorRVhUUkFOQVRJVkVQQVRIICs9ICJjaHJwYXRoLW5hdGl2ZSIKKworU1RBR0lOR19ESVJfSE9TVCA9ICIke1NUQUdJTkdfRElSfS8ke01VTFRJTUFDSF9IT1NUX1NZU30iCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiJHtTVEFHSU5HX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCitQS0dEQVRBX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9L3BrZ2RhdGEiCisKK0hPU1RfQVJDSCA9ICIke1NES19BUkNIfSIKK0hPU1RfVkVORE9SID0gIiR7U0RLX1ZFTkRPUn0iCitIT1NUX09TID0gIiR7U0RLX09TfSIKK0hPU1RfUFJFRklYID0gIiR7U0RLX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtTREtfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitIT1NUX0FTX0FSQ0ggPSAiJHtTREtfQVNfQVJDSH0iCisjSE9TVF9TWVMgPSAiJHtIT1NUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke0hPU1RfT1N9IgorCitUQVJHRVRfQVJDSCA9ICIke1NES19BUkNIfSIKK1RBUkdFVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK1RBUkdFVF9PUyA9ICIke1NES19PU30iCitUQVJHRVRfUFJFRklYID0gIiR7U0RLX1BSRUZJWH0iCitUQVJHRVRfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK1RBUkdFVF9MRF9BUkNIID0gIiR7U0RLX0xEX0FSQ0h9IgorVEFSR0VUX0FTX0FSQ0ggPSAiJHtTREtfQVNfQVJDSH0iCitUQVJHRVRfRlBVID0gIiIKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiIgorCitDUFBGTEFHUyA9ICIke0JVSUxEU0RLX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERTREtfTERGTEFHU30iCisKKyMgQ2hhbmdlIHRvIHBsYWNlIGZpbGVzIGluIFNES1BBVEgKK2Jhc2VfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0iCitwcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitleGVjX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfSIKK2Jhc2VsaWIgPSAibGliIgorc2JpbmRpciA9ICIke2JpbmRpcn0iCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCisKK3B5dGhvbiBuYXRpdmVzZGtfdmlydGNsYXNzX2hhbmRsZXIgKCkgeworICAgIHBuID0gZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIG5vdCAocG4uZW5kc3dpdGgoIi1uYXRpdmVzZGsiKSBvciBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikpOgorICAgICAgICByZXR1cm4KKworICAgIGUuZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgIm5hdGl2ZXNkay0iKQorICAgIGUuZGF0YS5zZXRWYXIoIlBOIiwgIm5hdGl2ZXNkay0iICsgZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKS5yZXBsYWNlKCItbmF0aXZlc2RrIiwgIiIpLnJlcGxhY2UoIm5hdGl2ZXNkay0iLCAiIikpCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbmF0aXZlc2RrIikKK30KKworcHl0aG9uICgpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgbm90IHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKworICAgIGNsc2V4dGVuZCA9IG9lLmNsYXNzZXh0ZW5kLk5hdGl2ZXNka0NsYXNzRXh0ZW5kZXIoIm5hdGl2ZXNkayIsIGQpCisgICAgY2xzZXh0ZW5kLnJlbmFtZV9wYWNrYWdlcygpCisgICAgY2xzZXh0ZW5kLnJlbmFtZV9wYWNrYWdlX3ZhcmlhYmxlcygoZC5nZXRWYXIoIlBBQ0tBR0VWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisKKyAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIkRFUEVORFMiKQorICAgIGNsc2V4dGVuZC5tYXBfcGFja2FnZXZhcnMoKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlBST1ZJREVTIikKKyAgICBjbHNleHRlbmQubWFwX3JlZ2V4cF92YXJpYWJsZSgiUEFDS0FHRVNfRFlOQU1JQyIpCit9CisKK2FkZGhhbmRsZXIgbmF0aXZlc2RrX3ZpcnRjbGFzc19oYW5kbGVyCituYXRpdmVzZGtfdmlydGNsYXNzX2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKK1VTRV9OTFMgPSAiJHtTREtVU0VfTkxTfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL29lbGludC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwNTFjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL29lbGludC5iYmNsYXNzCkBAIC0wLDAgKzEsODQgQEAKK2FkZHRhc2sgbGludCBiZWZvcmUgZG9fYnVpbGQKK2RvX2xpbnRbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19saW50KCkgeworICAgIHBrZ25hbWUgPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBUZXN0IHRoYXQgREVTQ1JJUFRJT04gZXhpc3RzCisgICAgIworICAgIGRlc2NyaXB0aW9uID0gZC5nZXRWYXIoIkRFU0NSSVBUSU9OIiwgRmFsc2UpCisgICAgaWYgZGVzY3JpcHRpb25bMToxMF0gPT0gJ3tTVU1NQVJZfSc6CisgICAgICAgIGJiLndhcm4oIiVzOiBERVNDUklQVElPTiBpcyBub3Qgc2V0IiAlIHBrZ25hbWUpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgVGVzdCB0aGF0IEhPTUVQQUdFIGV4aXN0cworICAgICMKKyAgICBob21lcGFnZSA9IGQuZ2V0VmFyKCJIT01FUEFHRSIsIEZhbHNlKQorICAgIGlmIGhvbWVwYWdlID09ICcnOgorICAgICAgICBiYi53YXJuKCIlczogSE9NRVBBR0UgaXMgbm90IHNldCIgJSBwa2duYW1lKQorICAgIGVsaWYgbm90IGhvbWVwYWdlLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKSBhbmQgbm90IGhvbWVwYWdlLnN0YXJ0c3dpdGgoImh0dHBzOi8vIik6CisgICAgICAgIGJiLndhcm4oIiVzOiBIT01FUEFHRSBkb2Vzbid0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLyIgJSBwa2duYW1lKQorCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFRlc3QgZm9yIHZhbGlkIFNFQ1RJT04KKyAgICAjCisgICAgc2VjdGlvbiA9IGQuZ2V0VmFyKCJTRUNUSU9OIiwgRmFsc2UpCisgICAgaWYgc2VjdGlvbiA9PSAnJzoKKyAgICAgICAgYmIud2FybigiJXM6IFNFQ1RJT04gaXMgbm90IHNldCIgJSBwa2duYW1lKQorICAgIGVsaWYgbm90IHNlY3Rpb24uaXNsb3dlcigpOgorICAgICAgICBiYi53YXJuKCIlczogU0VDVElPTiBzaG91bGQgb25seSB1c2UgbG93ZXIgY2FzZSIgJSBwa2duYW1lKQorCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIHRoYXQgYWxsIHBhdGNoZXMgaGF2ZSBTaWduZWQtb2ZmLWJ5IGFuZCBVcHN0cmVhbS1TdGF0dXMKKyAgICAjCisgICAgc3JjdXJpID0gZC5nZXRWYXIoIlNSQ19VUkkiLCBGYWxzZSkuc3BsaXQoKQorICAgIGZwYXRocyA9IChkLmdldFZhcignRklMRVNQQVRIJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykKKworICAgIGRlZiBmaW5kUGF0Y2gocGF0Y2huYW1lKToKKyAgICAgICAgZm9yIGRpciBpbiBmcGF0aHM6CisgICAgICAgICAgICBwYXRjaHBhdGggPSBkaXIgKyBwYXRjaG5hbWUKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGNocGF0aCk6CisgICAgICAgICAgICAgICAgIHJldHVybiBwYXRjaHBhdGgKKworICAgIGRlZiBmaW5kS2V5KHBhdGgsIGtleSk6CisgICAgICAgIHJldCA9IFRydWUKKyAgICAgICAgZiA9IGZpbGUoJyVzJyAlIHBhdGgsIG1vZGUgPSAncicpCisgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgIGlmIGxpbmUuZmluZChrZXkpICE9IC0xOgorICAgICAgICAgICAgICAgIHJldCA9IEZhbHNlCisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgY2hlY2tQTihwa2duYW1lLCB2YXJuYW1lLCBzdHIpOgorICAgICAgICBpZiBzdHIuZmluZCgie1BOfSIpICE9IC0xOgorICAgICAgICAgICAgYmIud2FybigiJXM6IHNob3VsZCB1c2UgQlBOIGluc3RlYWQgb2YgUE4gaW4gJXMiICUgKHBrZ25hbWUsIHZhcm5hbWUpKQorICAgICAgICBpZiBzdHIuZmluZCgie1B9IikgIT0gLTE6CisgICAgICAgICAgICBiYi53YXJuKCIlczogc2hvdWxkIHVzZSBCUCBpbnN0ZWFkIG9mIFAgaW4gJXMiICUgKHBrZ25hbWUsIHZhcm5hbWUpKQorCisgICAgbGVuZ3RoID0gbGVuKCJmaWxlOi8vIikKKyAgICBmb3IgaXRlbSBpbiBzcmN1cmk6CisgICAgICAgIGlmIGl0ZW0uc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgaXRlbSA9IGl0ZW1bbGVuZ3RoOl0KKyAgICAgICAgICAgIGlmIGl0ZW0uZW5kc3dpdGgoIi5wYXRjaCIpIG9yIGl0ZW0uZW5kc3dpdGgoIi5kaWZmIik6CisgICAgICAgICAgICAgICAgcGF0aCA9IGZpbmRQYXRjaChpdGVtKQorICAgICAgICAgICAgICAgIGlmIGZpbmRLZXkocGF0aCwgIlNpZ25lZC1vZmYtYnkiKToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXM6ICVzIGRvZXNuJ3QgaGF2ZSBTaWduZWQtb2ZmLWJ5IiAlIChwa2duYW1lLCBpdGVtKSkKKyAgICAgICAgICAgICAgICBpZiBmaW5kS2V5KHBhdGgsICJVcHN0cmVhbS1TdGF0dXMiKToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXM6ICVzIGRvZXNuJ3QgaGF2ZSBVcHN0cmVhbS1TdGF0dXMiICUgKHBrZ25hbWUsIGl0ZW0pKQorCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIGZvciAke1BOfSBvciAke1B9IHVzYWdlIGluIFNSQ19VUkkgb3IgUworICAgICMgU2hvdWxkIHVzZSAke0JQTn0gb3IgJHtCUH0gaW5zdGVhZCB0byBhdm9pZCBicmVha2luZyBtdWx0aWxpYgorICAgICMKKyAgICBmb3IgcyBpbiBzcmN1cmk6CisgICAgICAgIGlmIG5vdCBzLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgIGNoZWNrUE4ocGtnbmFtZSwgJ1NSQ19VUkknLCBzKQorCisgICAgY2hlY2tQTihwa2duYW1lLCAnUycsIGQuZ2V0VmFyKCdTJywgRmFsc2UpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL293bi1taXJyb3JzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzNTIyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL293bi1taXJyb3JzLmJiY2xhc3MKQEAgLTAsMCArMSwxMiBAQAorUFJFTUlSUk9SUygpIHsKK2N2czovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorc3ZuOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9CitnaXQ6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2dpdHNtOi8vLiovLiogICAke1NPVVJDRV9NSVJST1JfVVJMfQoraGc6Ly8uKi8uKiAgICAgICR7U09VUkNFX01JUlJPUl9VUkx9CitienI6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK3A0Oi8vLiovLiogICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorb3NjOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9CitodHRwcz8kOi8vLiovLiogJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2Z0cDovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTJiZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwyMDg2IEBACisjCisjIFBhY2thZ2luZyBwcm9jZXNzCisjCisjIEV4ZWN1dGl2ZSBzdW1tYXJ5OiBUaGlzIGNsYXNzIGl0ZXJhdGVzIG92ZXIgdGhlIGZ1bmN0aW9ucyBsaXN0ZWQgaW4gUEFDS0FHRUZVTkNTCisjIFRha2luZyBEIGFuZCBzcGxpdHRpbmcgaXQgdXAgaW50byB0aGUgcGFja2FnZXMgbGlzdGVkIGluIFBBQ0tBR0VTLCBwbGFjaW5nIHRoZQorIyByZXN1bHRpbmcgb3V0cHV0IGluIFBLR0RFU1QuCisjCisjIFRoZXJlIGFyZSB0aGUgZm9sbG93aW5nIGRlZmF1bHQgc3RlcHMgYnV0IFBBQ0tBR0VGVU5DUyBjYW4gYmUgZXh0ZW5kZWQ6CisjCisjIGEpIHBhY2thZ2VfZ2V0X2F1dG9fcHIgLSBnZXQgUFJBVVRPIGZyb20gcmVtb3RlIFBSIHNlcnZpY2UKKyMKKyMgYikgcGVyZm9ybV9wYWNrYWdlY29weSAtIENvcHkgRCBpbnRvIFBLR0QKKyMKKyMgYykgcGFja2FnZV9kb19zcGxpdF9sb2NhbGVzIC0gU3BsaXQgb3V0IHRoZSBsb2NhbGUgZmlsZXMsIHVwZGF0ZXMgRklMRVMgYW5kIFBBQ0tBR0VTCisjCisjIGQpIHNwbGl0X2FuZF9zdHJpcF9maWxlcyAtIHNwbGl0IHRoZSBmaWxlcyBpbnRvIHJ1bnRpbWUgYW5kIGRlYnVnIGFuZCBzdHJpcCB0aGVtLgorIyAgICBEZWJ1ZyBmaWxlcyBpbmNsdWRlIGRlYnVnIGluZm8gc3BsaXQsIGFuZCBhc3NvY2lhdGVkIHNvdXJjZXMgdGhhdCBlbmQgdXAgaW4gLWRiZyBwYWNrYWdlcworIworIyBlKSBmaXh1cF9wZXJtcyAtIEZpeCB1cCBwZXJtaXNzaW9ucyBpbiB0aGUgcGFja2FnZSBiZWZvcmUgd2Ugc3BsaXQgaXQuCisjCisjIGYpIHBvcHVsYXRlX3BhY2thZ2VzIC0gU3BsaXQgdGhlIGZpbGVzIGluIFBLR0QgaW50byBzZXBhcmF0ZSBwYWNrYWdlcyBpbiBQS0dERVNULzxwa2duYW1lPgorIyAgICBBbHNvIHRyaWdnZXJzIHRoZSBiaW5hcnkgc3RyaXBwaW5nIGNvZGUgdG8gcHV0IGZpbGVzIGluIC1kYmcgcGFja2FnZXMuCisjCisjIGcpIHBhY2thZ2VfZG9fZmlsZWRlcHMgLSBDb2xsZWN0IHBlcmZpbGUgcnVuLXRpbWUgZGVwZW5kZW5jeSBtZXRhZGF0YQorIyAgICBUaGUgZGF0YSBpcyBzdG9yZXMgaW4gRklMRVJ7UFJPVklERVMsREVQRU5EU31fZmlsZV9wa2cgdmFyaWFibGVzIHdpdGgKKyMgICAgYSBsaXN0IG9mIGFmZmVjdGVkIGZpbGVzIGluIEZJTEVSe1BST1ZJREVTLERFUEVORFN9RkxJU1RfcGtnCisjCisjIGgpIHBhY2thZ2VfZG9fc2hsaWJzIC0gTG9vayBhdCB0aGUgc2hhcmVkIGxpYnJhcmllcyBnZW5lcmF0ZWQgYW5kIGF1dG90bWF0aWNhbGx5IGFkZCBhbnkKKyMgICAgZGVwZW5lZGVuY2llcyBmb3VuZC4gQWxzbyBzdG9yZXMgdGhlIHBhY2thZ2UgbmFtZSBzbyBhbnlvbmUgZWxzZSB1c2luZyB0aGlzIGxpYnJhcnkKKyMgICAga25vd3Mgd2hpY2ggcGFja2FnZSB0byBkZXBlbmQgb24uCisjCisjIGkpIHBhY2thZ2VfZG9fcGtnY29uZmlnIC0gS2VlcCB0cmFjayBvZiB3aGljaCBwYWNrYWdlcyBuZWVkIGFuZCBwcm92aWRlIHdoaWNoIC5wYyBmaWxlcworIworIyBqKSByZWFkX3NobGliZGVwcyAtIFJlYWRzIHRoZSBzdG9yZWQgc2hsaWJzIGluZm9ybWF0aW9uIGludG8gdGhlIG1ldGFkYXRhCisjCisjIGspIHBhY2thZ2VfZGVwY2hhaW5zIC0gQWRkcyBhdXRvbWF0aWMgZGVwZW5kZW5jaWVzIHRvIC1kYmcgYW5kIC1kZXYgcGFja2FnZXMKKyMKKyMgbCkgZW1pdF9wa2dkYXRhIC0gc2F2ZXMgdGhlIHBhY2thZ2luZyBkYXRhIGludG8gUEtHREFUQV9ESVIgZm9yIHVzZSBpbiBsYXRlcgorIyAgICBwYWNrYWdpbmcgc3RlcHMKKworaW5oZXJpdCBwYWNrYWdlZGF0YQoraW5oZXJpdCBwcnNlcnYKK2luaGVyaXQgY2hycGF0aAorCisjIE5lZWQgdGhlIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCkgaW4gaW5zYW5lLmJiY2xhc3MKK2luaGVyaXQgaW5zYW5lCisKK1BLR0QgICAgPSAiJHtXT1JLRElSfS9wYWNrYWdlIgorUEtHREVTVCA9ICIke1dPUktESVJ9L3BhY2thZ2VzLXNwbGl0IgorCitMT0NBTEVfU0VDVElPTiA/PSAnJworCitBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyA9ICIke0BhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgJ1BBQ0tBR0VfQVJDSFMnKX0iCisKKyMgcnBtIGlzIHVzZWQgZm9yIHRoZSBwZXItZmlsZSBkZXBlbmRlbmN5IGlkZW50aWZpY2F0aW9uCitQQUNLQUdFX0RFUEVORFMgKz0gInJwbS1uYXRpdmUiCisKK2RlZiBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShzKToKKyAgICAiIiIKKyAgICBNYWtlIHN1cmUgcGFja2FnZSBuYW1lcyBhcmUgbGVnaXRpbWF0ZSBzdHJpbmdzCisgICAgIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICBkZWYgZml4dXRmKG0pOgorICAgICAgICBjcCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgaWYgY3A6CisgICAgICAgICAgICByZXR1cm4gKCdcdSVzJyAlIGNwKS5kZWNvZGUoJ3VuaWNvZGVfZXNjYXBlJykuZW5jb2RlKCd1dGYtOCcpCisKKyAgICAjIEhhbmRsZSB1bmljb2RlIGNvZGVwb2ludHMgZW5jb2RlZCBhcyA8VTAxMjM+LCBhcyBpbiBnbGliYyBsb2NhbGUgZmlsZXMuCisgICAgcyA9IHJlLnN1YignPFUoWzAtOUEtRmEtZl17MSw0fSk+JywgZml4dXRmLCBzKQorCisgICAgIyBSZW1haW5pbmcgcGFja2FnZSBuYW1lIHZhbGlkaXR5IGZpeGVzCisgICAgcmV0dXJuIHMubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKS5yZXBsYWNlKCdAJywgJysnKS5yZXBsYWNlKCcsJywgJysnKS5yZXBsYWNlKCcvJywgJy0nKQorCitkZWYgZG9fc3BsaXRfcGFja2FnZXMoZCwgcm9vdCwgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGRlc2NyaXB0aW9uLCBwb3N0aW5zdD1Ob25lLCByZWN1cnNpdmU9RmFsc2UsIGhvb2s9Tm9uZSwgZXh0cmFfZGVwZW5kcz1Ob25lLCBhdXhfZmlsZXNfcGF0dGVybj1Ob25lLCBwb3N0cm09Tm9uZSwgYWxsb3dfZGlycz1GYWxzZSwgcHJlcGVuZD1GYWxzZSwgbWF0Y2hfcGF0aD1GYWxzZSwgYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW09Tm9uZSwgYWxsb3dfbGlua3M9RmFsc2UsIHN1bW1hcnk9Tm9uZSk6CisgICAgIiIiCisgICAgVXNlZCBpbiAuYmIgZmlsZXMgdG8gc3BsaXQgdXAgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN1YnBhY2thZ2VzIG9mIGEKKyAgICBnaXZlbiBwYWNrYWdlLCB1c3VhbGx5IHBsdWdpbnMgb3IgbW9kdWxlcy4KKworICAgIEFyZ3VtZW50czoKKyAgICByb290ICAgICAgICAgICAtLSB0aGUgcGF0aCBpbiB3aGljaCB0byBzZWFyY2gKKyAgICBmaWxlX3JlZ2V4ICAgICAtLSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggc2VhcmNoZWQgZmlsZXMuIFVzZQorICAgICAgICAgICAgICAgICAgICAgIHBhcmVudGhlc2VzICgpIHRvIG1hcmsgdGhlIHBhcnQgb2YgdGhpcyBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBkZXJpdmUgdGhlIG1vZHVsZSBuYW1lICh0byBiZQorICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGVkIHdoZXJlICVzIGlzIHVzZWQgaW4gb3RoZXIgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgYXMgbm90ZWQgYmVsb3cpCisgICAgb3V0cHV0X3BhdHRlcm4gLS0gcGF0dGVybiB0byB1c2UgZm9yIHRoZSBwYWNrYWdlIG5hbWVzLiBNdXN0IGluY2x1ZGUgJXMuCisgICAgZGVzY3JpcHRpb24gICAgLS0gZGVzY3JpcHRpb24gdG8gc2V0IGZvciBlYWNoIHBhY2thZ2UuIE11c3QgaW5jbHVkZSAlcy4KKyAgICBwb3N0aW5zdCAgICAgICAtLSBwb3N0aW5zdGFsbCBzY3JpcHQgdG8gdXNlIGZvciBhbGwgcGFja2FnZXMgKGFzIGEKKyAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpCisgICAgcmVjdXJzaXZlICAgICAgLS0gVHJ1ZSB0byBwZXJmb3JtIGEgcmVjdXJzaXZlIHNlYXJjaCAtIGRlZmF1bHQgRmFsc2UKKyAgICBob29rICAgICAgICAgICAtLSBhIGhvb2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBldmVyeSBtYXRjaC4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cworICAgICAgICAgICAgICAgICAgICAgIChpbiB0aGUgb3JkZXIgbGlzdGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGY6IGZ1bGwgcGF0aCB0byB0aGUgZmlsZS9kaXJlY3RvcnkgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZzogdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9yZWdleDogYXMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuOiBhcyBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlbmFtZTogdGhlIG1vZHVsZSBuYW1lIGRlcml2ZWQgdXNpbmcgZmlsZV9yZWdleAorICAgIGV4dHJhX2RlcGVuZHMgIC0tIGV4dHJhIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChSREVQRU5EUykgdG8gYmUgc2V0IGZvcgorICAgICAgICAgICAgICAgICAgICAgIGFsbCBwYWNrYWdlcy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgTm9uZSBjYXVzZXMgYQorICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb24gdGhlIG1haW4gcGFja2FnZSAoJHtQTn0pIC0gaWYgeW91IGRvCisgICAgICAgICAgICAgICAgICAgICAgbm90IHdhbnQgdGhpcywgcGFzcyAnJyBmb3IgdGhpcyBwYXJhbWV0ZXIuCisgICAgYXV4X2ZpbGVzX3BhdHRlcm4gLS0gZXh0cmEgaXRlbShzKSB0byBiZSBhZGRlZCB0byBGSUxFUyBmb3IgZWFjaAorICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuIENhbiBiZSBhIHNpbmdsZSBzdHJpbmcgaXRlbSBvciBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gIE11c3QgaW5jbHVkZSAlcy4KKyAgICBwb3N0cm0gICAgICAgICAtLSBwb3N0cm0gc2NyaXB0IHRvIHVzZSBmb3IgYWxsIHBhY2thZ2VzIChhcyBhIHN0cmluZykKKyAgICBhbGxvd19kaXJzICAgICAtLSBUcnVlIGFsbG93IGRpcmVjdG9yaWVzIHRvIGJlIG1hdGNoZWQgLSBkZWZhdWx0IEZhbHNlCisgICAgcHJlcGVuZCAgICAgICAgLS0gaWYgVHJ1ZSwgcHJlcGVuZCBjcmVhdGVkIHBhY2thZ2VzIHRvIFBBQ0tBR0VTIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZGVmYXVsdCBGYWxzZSB3aGljaCBhcHBlbmRzIHRoZW0KKyAgICBtYXRjaF9wYXRoICAgICAtLSBtYXRjaCBmaWxlX3JlZ2V4IG9uIHRoZSB3aG9sZSByZWxhdGl2ZSBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgIHJvb3QgcmF0aGVyIHRoYW4ganVzdCB0aGUgZmlsZSBuYW1lCisgICAgYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0gLS0gZXh0cmEgaXRlbShzKSB0byBiZSBhZGRlZCB0byBGSUxFUyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICBlYWNoIHBhY2thZ2UsIHVzaW5nIHRoZSBhY3R1YWwgZGVyaXZlZCBtb2R1bGUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGNvbnZlcnRpbmcgaXQgdG8gc29tZXRoaW5nIGxlZ2FsIGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBuYW1lLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0gb3IgYSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgb2Ygc3RyaW5ncyBmb3IgbXVsdGlwbGUgaXRlbXMuIE11c3QgaW5jbHVkZSAlcy4KKyAgICBhbGxvd19saW5rcyAgICAtLSBUcnVlIHRvIGFsbG93IHN5bWxpbmtzIHRvIGJlIG1hdGNoZWQgLSBkZWZhdWx0IEZhbHNlCisgICAgc3VtbWFyeSAgICAgICAgLS0gU3VtbWFyeSB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdCBpbmNsdWRlICVzOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIGRlc2NyaXB0aW9uIGlmIG5vdCBzZXQuCisKKyAgICAiIiIKKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICAjIElmIHRoZSByb290IGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBkb24ndCBlcnJvciBvdXQgbGF0ZXIgYnV0IHNpbGVudGx5IGRvCisgICAgIyBubyBzcGxpdHRpbmcuCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGR2YXIgKyByb290KToKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisgICAgaWYgbWw6CisgICAgICAgIGlmIG5vdCBvdXRwdXRfcGF0dGVybi5zdGFydHN3aXRoKG1sKToKKyAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuID0gbWwgKyBvdXRwdXRfcGF0dGVybgorCisgICAgICAgIG5ld2RlcHMgPSBbXQorICAgICAgICBmb3IgZGVwIGluIChleHRyYV9kZXBlbmRzIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgobWwpOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKGRlcCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQobWwgKyBkZXApCisgICAgICAgIGlmIG5ld2RlcHM6CisgICAgICAgICAgICBleHRyYV9kZXBlbmRzID0gIiAiLmpvaW4obmV3ZGVwcykKKworCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgc3BsaXRfcGFja2FnZXMgPSBbXQorCisgICAgaWYgcG9zdGluc3Q6CisgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJyArIHBvc3RpbnN0ICsgJ1xuJworICAgIGlmIHBvc3RybToKKyAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJyArIHBvc3RybSArICdcbicKKyAgICBpZiBub3QgcmVjdXJzaXZlOgorICAgICAgICBvYmpzID0gb3MubGlzdGRpcihkdmFyICsgcm9vdCkKKyAgICBlbHNlOgorICAgICAgICBvYmpzID0gW10KKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGR2YXIgKyByb290KToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpLnJlcGxhY2UoZHZhciArIHJvb3QgKyAnLycsICcnLCAxKQorICAgICAgICAgICAgICAgIGlmIHJlbHBhdGg6CisgICAgICAgICAgICAgICAgICAgIG9ianMuYXBwZW5kKHJlbHBhdGgpCisKKyAgICBpZiBleHRyYV9kZXBlbmRzID09IE5vbmU6CisgICAgICAgIGV4dHJhX2RlcGVuZHMgPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgaWYgbm90IHN1bW1hcnk6CisgICAgICAgIHN1bW1hcnkgPSBkZXNjcmlwdGlvbgorCisgICAgZm9yIG8gaW4gc29ydGVkKG9ianMpOgorICAgICAgICBpbXBvcnQgcmUsIHN0YXQKKyAgICAgICAgaWYgbWF0Y2hfcGF0aDoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChmaWxlX3JlZ2V4LCBvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKGZpbGVfcmVnZXgsIG9zLnBhdGguYmFzZW5hbWUobykpCisKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmID0gb3MucGF0aC5qb2luKGR2YXIgKyByb290LCBvKQorICAgICAgICBtb2RlID0gb3MubHN0YXQoZikuc3RfbW9kZQorICAgICAgICBpZiBub3QgKHN0YXQuU19JU1JFRyhtb2RlKSBvciAoYWxsb3dfbGlua3MgYW5kIHN0YXQuU19JU0xOSyhtb2RlKSkgb3IgKGFsbG93X2RpcnMgYW5kIHN0YXQuU19JU0RJUihtb2RlKSkpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgb24gPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtLmdyb3VwKDEpKQorICAgICAgICBwa2cgPSBvdXRwdXRfcGF0dGVybiAlIG9uCisgICAgICAgIHNwbGl0X3BhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGlmIG5vdCBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiBwcmVwZW5kOgorICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gW3BrZ10gKyBwYWNrYWdlcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBvbGRmaWxlcyA9IGQuZ2V0VmFyKCdGSUxFU18nICsgcGtnLCBUcnVlKQorICAgICAgICBuZXdmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIG8pCisgICAgICAgICMgVGhlc2UgbmFtZXMgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCBnbG9iKCkgc28gaWYgdGhlIGZpbGVuYW1lIGFjdHVhbGx5CisgICAgICAgICMgY29udGFpbnMgKiBvciA/IChyYXJlLCBidXQgcG9zc2libGUpIHdlIG5lZWQgdG8gaGFuZGxlIHRoYXQgc3BlY2lhbGx5CisgICAgICAgIG5ld2ZpbGUgPSBuZXdmaWxlLnJlcGxhY2UoJyonLCAnWypdJykKKyAgICAgICAgbmV3ZmlsZSA9IG5ld2ZpbGUucmVwbGFjZSgnPycsICdbP10nKQorICAgICAgICBpZiBub3Qgb2xkZmlsZXM6CisgICAgICAgICAgICB0aGVfZmlsZXMgPSBbbmV3ZmlsZV0KKyAgICAgICAgICAgIGlmIGF1eF9maWxlc19wYXR0ZXJuOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoYXV4X2ZpbGVzX3BhdHRlcm4pIGlzIGxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGZvciBmcCBpbiBhdXhfZmlsZXNfcGF0dGVybjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoZnAgJSBvbikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0aGVfZmlsZXMuYXBwZW5kKGF1eF9maWxlc19wYXR0ZXJuICUgb24pCisgICAgICAgICAgICBpZiBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltKSBpcyBsaXN0OgorICAgICAgICAgICAgICAgICAgICBmb3IgZnAgaW4gYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW06CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVfZmlsZXMuYXBwZW5kKGZwICUgbS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0aGVfZmlsZXMuYXBwZW5kKGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltICUgbS5ncm91cCgxKSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcGtnLCAiICIuam9pbih0aGVfZmlsZXMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwa2csIG9sZGZpbGVzICsgIiAiICsgbmV3ZmlsZSkKKyAgICAgICAgaWYgZXh0cmFfZGVwZW5kcyAhPSAnJzoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAnICcgKyBleHRyYV9kZXBlbmRzKQorICAgICAgICBpZiBub3QgZC5nZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csIGRlc2NyaXB0aW9uICUgb24pCisgICAgICAgIGlmIG5vdCBkLmdldFZhcignU1VNTUFSWV8nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTVU1NQVJZXycgKyBwa2csIHN1bW1hcnkgJSBvbikKKyAgICAgICAgaWYgcG9zdGluc3Q6CisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XycgKyBwa2csIHBvc3RpbnN0KQorICAgICAgICBpZiBwb3N0cm06CisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8nICsgcGtnLCBwb3N0cm0pCisgICAgICAgIGlmIGNhbGxhYmxlKGhvb2spOgorICAgICAgICAgICAgaG9vayhmLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBtLmdyb3VwKDEpKQorCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZXMpKQorICAgIHJldHVybiBzcGxpdF9wYWNrYWdlcworCitQQUNLQUdFX0RFUEVORFMgKz0gImZpbGUtbmF0aXZlIgorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gIiIKKyAgICAgICAgZm9yIGRlcCBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VfREVQRU5EUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZScsICdkZXBlbmRzJywgZGVwcykKKworICAgICAgICAjIHNobGlicyByZXF1aXJlcyBhbnkgREVQRU5EUyB0byBoYXZlIGFscmVhZHkgcGFja2FnZWQgZm9yIHRoZSAqLmxpc3QgZmlsZXMKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcHRhc2snLCAiIGRvX3BhY2thZ2VkYXRhIikKK30KKworIyBHZXQgYSBsaXN0IG9mIGZpbGVzIGZyb20gZmlsZSB2YXJzIGJ5IHNlYXJjaGluZyBmaWxlcyB1bmRlciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisjIFRoZSBsaXN0IGNvbnRhaW5zIHN5bWxpbmtzLCBkaXJlY3RvcmllcyBhbmQgbm9ybWFsIGZpbGVzLgorZGVmIGZpbGVzX2Zyb21fZmlsZXZhcnMoZmlsZXZhcnMpOgorICAgIGltcG9ydCBvcyxnbG9iCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorICAgIGZpbGVzID0gW10KKyAgICBmb3IgZiBpbiBmaWxldmFyczoKKyAgICAgICAgaWYgb3MucGF0aC5pc2FicyhmKToKKyAgICAgICAgICAgIGYgPSAnLicgKyBmCisgICAgICAgIGlmIG5vdCBmLnN0YXJ0c3dpdGgoIi4vIik6CisgICAgICAgICAgICBmID0gJy4vJyArIGYKKyAgICAgICAgZ2xvYmJlZCA9IGdsb2IuZ2xvYihmKQorICAgICAgICBpZiBnbG9iYmVkOgorICAgICAgICAgICAgaWYgWyBmIF0gIT0gZ2xvYmJlZDoKKyAgICAgICAgICAgICAgICBmaWxlcyArPSBnbG9iYmVkCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZmlsZXMuYXBwZW5kKGYpCisKKyAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgaWYgbm90IGNwYXRoLmlzbGluayhmKToKKyAgICAgICAgICAgIGlmIGNwYXRoLmlzZGlyKGYpOgorICAgICAgICAgICAgICAgIG5ld2ZpbGVzID0gWyBvcy5wYXRoLmpvaW4oZix4KSBmb3IgeCBpbiBvcy5saXN0ZGlyKGYpIF0KKyAgICAgICAgICAgICAgICBpZiBuZXdmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgKz0gbmV3ZmlsZXMKKworICAgIHJldHVybiBmaWxlcworCisjIENhbGxlZCBpbiBwYWNrYWdlXzxycG0saXBrLGRlYj4uYmJjbGFzcyB0byBnZXQgdGhlIGNvcnJlY3QgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzCitkZWYgZ2V0X2NvbmZmaWxlcyhwa2csIGQpOgorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcm9vdCA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCisgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICBvcy5jaGRpcihyb290KQorCisgICAgY29uZmZpbGVzID0gZC5nZXRWYXIoJ0NPTkZGSUxFU18lcycgJSBwa2csIFRydWUpOworICAgIGlmIGNvbmZmaWxlcyA9PSBOb25lOgorICAgICAgICBjb25mZmlsZXMgPSBkLmdldFZhcignQ09ORkZJTEVTJywgVHJ1ZSkKKyAgICBpZiBjb25mZmlsZXMgPT0gTm9uZToKKyAgICAgICAgY29uZmZpbGVzID0gIiIKKyAgICBjb25mZmlsZXMgPSBjb25mZmlsZXMuc3BsaXQoKQorICAgIGNvbmZfb3JpZ19saXN0ID0gZmlsZXNfZnJvbV9maWxldmFycyhjb25mZmlsZXMpCisKKyAgICAjIFJlbW92ZSBsaW5rcyBhbmQgZGlyZWN0b3JpZXMgZnJvbSBjb25mX29yaWdfbGlzdCB0byBnZXQgY29uZl9saXN0IHdoaWNoIG9ubHkgY29udGFpbnMgbm9ybWFsIGZpbGVzCisgICAgY29uZl9saXN0ID0gW10KKyAgICBmb3IgZiBpbiBjb25mX29yaWdfbGlzdDoKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGYpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgY29uZl9saXN0LmFwcGVuZChmKQorCisgICAgIyBSZW1vdmUgdGhlIGxlYWRpbmcgJy4vJworICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjb25mX2xpc3QpKToKKyAgICAgICAgY29uZl9saXN0W2ldID0gY29uZl9saXN0W2ldWzE6XQorCisgICAgb3MuY2hkaXIoY3dkKQorICAgIHJldHVybiBjb25mX2xpc3QKKworZGVmIHNwbGl0ZGVidWdpbmZvKGZpbGUsIGRlYnVnZmlsZSwgZGVidWdzcmNkaXIsIHNvdXJjZWZpbGUsIGQpOgorICAgICMgRnVuY3Rpb24gdG8gc3BsaXQgYSBzaW5nbGUgZmlsZSBpbnRvIHR3byBjb21wb25lbnRzLCBvbmUgaXMgdGhlIHN0cmlwcGVkCisgICAgIyB0YXJnZXQgc3lzdGVtIGJpbmFyeSwgdGhlIG90aGVyIGNvbnRhaW5zIGFueSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uIFRoZQorICAgICMgdHdvIGZpbGVzIGFyZSBsaW5rZWQgdG8gcmVmZXJlbmNlIGVhY2ggb3RoZXIuCisgICAgIworICAgICMgc291cmNlZmlsZSBpcyBhbHNvIGdlbmVyYXRlZCBjb250YWluaW5nIGEgbGlzdCBvZiBkZWJ1Z3NvdXJjZXMKKworICAgIGltcG9ydCBzdGF0CisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIG9iamNvcHkgPSBkLmdldFZhcigiT0JKQ09QWSIsIFRydWUpCisgICAgZGVidWdlZGl0ID0gZC5leHBhbmQoIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vYmluL2RlYnVnZWRpdCIpCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSkKKyAgICB3b3JrcGFyZW50ZGlyID0gZC5nZXRWYXIoIkRFQlVHU1JDX09WRVJSSURFX1BBVEgiLCBUcnVlKSBvciBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpKQorCisgICAgIyBXZSBpZ25vcmUga2VybmVsIG1vZHVsZXMsIHdlIGRvbid0IGdlbmVyYXRlIGRlYnVnIGluZm8gZmlsZXMuCisgICAgaWYgZmlsZS5maW5kKCIvbGliL21vZHVsZXMvIikgIT0gLTEgYW5kIGZpbGUuZW5kc3dpdGgoIi5rbyIpOgorICAgICAgICByZXR1cm4gMQorCisgICAgbmV3bW9kZSA9IE5vbmUKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGZpbGUsIG9zLldfT0spIG9yIG9zLmFjY2VzcyhmaWxlLCBvcy5SX09LKToKKyAgICAgICAgb3JpZ21vZGUgPSBvcy5zdGF0KGZpbGUpW3N0YXQuU1RfTU9ERV0KKyAgICAgICAgbmV3bW9kZSA9IG9yaWdtb2RlIHwgc3RhdC5TX0lXUklURSB8IHN0YXQuU19JUkVBRAorICAgICAgICBvcy5jaG1vZChmaWxlLCBuZXdtb2RlKQorCisgICAgIyBXZSBuZWVkIHRvIGV4dHJhY3QgdGhlIGRlYnVnIHNyYyBpbmZvcm1hdGlvbiBoZXJlLi4uCisgICAgaWYgZGVidWdzcmNkaXI6CisgICAgICAgIGNtZCA9ICInJXMnIC1iICclcycgLWQgJyVzJyAtaSAtbCAnJXMnICclcyciICUgKGRlYnVnZWRpdCwgd29ya3BhcmVudGRpciwgZGVidWdzcmNkaXIsIHNvdXJjZWZpbGUsIGZpbGUpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi5mYXRhbCgiZGVidWdlZGl0IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShkZWJ1Z2ZpbGUpKQorCisgICAgY21kID0gIiclcycgLS1vbmx5LWtlZXAtZGVidWcgJyVzJyAnJXMnIiAlIChvYmpjb3B5LCBmaWxlLCBkZWJ1Z2ZpbGUpCisgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgaWYgcmV0dmFsOgorICAgICAgICBiYi5mYXRhbCgib2JqY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgICMgU2V0IHRoZSBkZWJ1Z2xpbmsgdG8gaGF2ZSB0aGUgdmlldyBvZiB0aGUgZmlsZSBwYXRoIG9uIHRoZSB0YXJnZXQKKyAgICBjbWQgPSAiJyVzJyAtLWFkZC1nbnUtZGVidWdsaW5rPSclcycgJyVzJyIgJSAob2JqY29weSwgZGVidWdmaWxlLCBmaWxlKQorICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgYmIuZmF0YWwoIm9iamNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICBpZiBuZXdtb2RlOgorICAgICAgICBvcy5jaG1vZChmaWxlLCBvcmlnbW9kZSkKKworICAgIHJldHVybiAwCisKK2RlZiBjb3B5ZGVidWdzb3VyY2VzKGRlYnVnc3JjZGlyLCBkKToKKyAgICAjIFRoZSBkZWJ1ZyBzcmMgaW5mb3JtYXRpb24gd3JpdHRlbiBvdXQgdG8gc291cmNlZmlsZSBpcyBmdXJ0aGVyIHByb2NlY2Vzc2VkCisgICAgIyBhbmQgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbiBoZXJlLgorCisgICAgaW1wb3J0IHN0YXQKKworICAgIHNvdXJjZWZpbGUgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9kZWJ1Z3NvdXJjZXMubGlzdCIpCisgICAgaWYgZGVidWdzcmNkaXIgYW5kIG9zLnBhdGguaXNmaWxlKHNvdXJjZWZpbGUpOgorICAgICAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgICAgICBzdHJpcCA9IGQuZ2V0VmFyKCJTVFJJUCIsIFRydWUpCisgICAgICAgIG9iamNvcHkgPSBkLmdldFZhcigiT0JKQ09QWSIsIFRydWUpCisgICAgICAgIGRlYnVnZWRpdCA9IGQuZXhwYW5kKCIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL2Jpbi9kZWJ1Z2VkaXQiKQorICAgICAgICB3b3JrZGlyID0gZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKQorICAgICAgICB3b3JrcGFyZW50ZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh3b3JrZGlyKSkKKyAgICAgICAgd29ya2Jhc2VkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZSh3b3JrZGlyKSkgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHdvcmtkaXIpCisKKyAgICAgICAgbm9zdWNoZGlyID0gW10KKyAgICAgICAgYmFzZXBhdGggPSBkdmFyCisgICAgICAgIGZvciBwIGluIGRlYnVnc3JjZGlyLnNwbGl0KCIvIik6CisgICAgICAgICAgICBiYXNlcGF0aCA9IGJhc2VwYXRoICsgIi8iICsgcAorICAgICAgICAgICAgaWYgbm90IGNwYXRoLmV4aXN0cyhiYXNlcGF0aCk6CisgICAgICAgICAgICAgICAgbm9zdWNoZGlyLmFwcGVuZChiYXNlcGF0aCkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGJhc2VwYXRoKQorICAgICAgICBjcGF0aC51cGRhdGVjYWNoZShiYXNlcGF0aCkKKworICAgICAgICBwcm9jZXNzZGVidWdzcmMgPSAgIkxDX0FMTD1DIDsgc29ydCAteiAtdSAnJXMnIHwgZWdyZXAgLXYgLXogJyg8aW50ZXJuYWw+fDxidWlsdC1pbj4pJCcgfCAiCisgICAgICAgICMgV2UgbmVlZCB0byBpZ25vcmUgZmlsZXMgdGhhdCBhcmUgbm90IGFjdHVhbGx5IG91cnMKKyAgICAgICAgIyB3ZSBkbyB0aGlzIGJ5IG9ubHkgcGF5aW5nIGF0dGVudGlvbiB0byBpdGVtcyBmcm9tIHRoaXMgcGFja2FnZQorICAgICAgICBwcm9jZXNzZGVidWdzcmMgKz0gImZncmVwIC16dyAnJXMnIHwgIgorICAgICAgICBwcm9jZXNzZGVidWdzcmMgKz0gIihjZCAnJXMnIDsgY3BpbyAtcGQwbWxMIC0tbm8tcHJlc2VydmUtb3duZXIgJyVzJXMnIDI+L2Rldi9udWxsKSIKKworICAgICAgICBjbWQgPSBwcm9jZXNzZGVidWdzcmMgJSAoc291cmNlZmlsZSwgd29ya2Jhc2VkaXIsIHdvcmtwYXJlbnRkaXIsIGR2YXIsIGRlYnVnc3JjZGlyKQorICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgIyBDYW4gImZhaWwiIGlmIGludGVybmFsIGhlYWRlcnMvdHJhbnNpZW50IHNvdXJjZXMgYXJlIGF0dGVtcHRlZAorICAgICAgICAjaWYgcmV0dmFsOgorICAgICAgICAjICAgIGJiLmZhdGFsKCJkZWJ1ZyBzb3VyY2UgY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpIiAlIChyZXR2YWwsIGNtZCkpCisKKyAgICAgICAgIyBjcGlvIHNlZW1zIHRvIGhhdmUgYSBidWcgd2l0aCAtbEwgdG9nZXRoZXIgYW5kIHN5bWJvbGljIGxpbmtzIGFyZSBqdXN0IGNvcGllZCwgbm90IGRlcmVmZXJlbmNlZC4KKyAgICAgICAgIyBXb3JrIGFyb3VuZCB0aGlzIGJ5IG1hbnVhbGx5IGZpbmRpbmcgYW5kIGNvcHlpbmcgYW55IHN5bWJvbGljIGxpbmtzIHRoYXQgbWFkZSBpdCB0aHJvdWdoLgorICAgICAgICBjbWQgPSAiZmluZCAlcyVzIC10eXBlIGwgLXByaW50MCAtZGVsZXRlIHwgc2VkIHMjJXMlcy8jI2cgfCAoY2QgJyVzJyA7IGNwaW8gLXBkMG1MIC0tbm8tcHJlc2VydmUtb3duZXIgJyVzJXMnIDI+L2Rldi9udWxsKSIgJSAoZHZhciwgZGVidWdzcmNkaXIsIGR2YXIsIGRlYnVnc3JjZGlyLCB3b3JrcGFyZW50ZGlyLCBkdmFyLCBkZWJ1Z3NyY2RpcikKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJkZWJ1Z3NyYyBzeW1saW5rIGZpeHVwIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcykiICUgKHJldHZhbCwgY21kKSkKKworICAgICAgICAjIFRoZSBjb3B5IGJ5IGNwaW8gbWF5IGhhdmUgcmVzdWx0ZWQgaW4gc29tZSBlbXB0eSBkaXJlY3RvcmllcyEgIFJlbW92ZSB0aGVzZQorICAgICAgICBjbWQgPSAiZmluZCAlcyVzIC1lbXB0eSAtdHlwZSBkIC1kZWxldGUiICUgKGR2YXIsIGRlYnVnc3JjZGlyKQorICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoImVtcHR5IGRpcmVjdG9yeSByZW1vdmFsIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgICAgICMgQWxzbyByZW1vdmUgZGVidWdzcmNkaXIgaWYgaXRzIGVtcHR5CisgICAgICAgIGZvciBwIGluIG5vc3VjaGRpcls6Oi0xXToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHApIGFuZCBub3Qgb3MubGlzdGRpcihwKToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihwKQorCisjCisjIFBhY2thZ2UgZGF0YSBoYW5kbGluZyByb3V0aW5lcworIworCitkZWYgZ2V0X3BhY2thZ2VfbWFwcGluZyAocGtnLCBiYXNlcGtnLCBkKToKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKworICAgIGRhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocGtnLCBkKQorICAgIGtleSA9ICJQS0dfJXMiICUgcGtnCisKKyAgICBpZiBrZXkgaW4gZGF0YToKKyAgICAgICAgIyBIYXZlIHRvIGF2b2lkIHVuZG9pbmcgdGhlIHdyaXRlX2V4dHJhX3BrZ3MoZ2xvYmFsX3ZhcmlhbnRzLi4uKQorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZCkgYW5kIGRhdGFba2V5XSA9PSBiYXNlcGtnOgorICAgICAgICAgICAgcmV0dXJuIHBrZworICAgICAgICByZXR1cm4gZGF0YVtrZXldCisKKyAgICByZXR1cm4gcGtnCisKK2RlZiBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhIChwa2dfdHlwZSwgZCk6CisgICAgYmFzZV9rZXkgPSAiUEFDS0FHRV9BRERfTUVUQURBVEEiCisgICAgZm9yIGtleSBpbiAoIiVzXyVzIiAlIChiYXNlX2tleSwgcGtnX3R5cGUudXBwZXIoKSksIGJhc2Vfa2V5KToKKyAgICAgICAgaWYgZC5nZXRWYXIoa2V5LCBGYWxzZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGQuc2V0VmFyRmxhZyhrZXksICJ0eXBlIiwgImxpc3QiKQorICAgICAgICBpZiBkLmdldFZhckZsYWcoa2V5LCAic2VwYXJhdG9yIikgaXMgTm9uZToKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyhrZXksICJzZXBhcmF0b3IiLCAiXFxuIikKKyAgICAgICAgbWV0YWRhdGFfZmllbGRzID0gW2ZpZWxkLnN0cmlwKCkgZm9yIGZpZWxkIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoa2V5LCBkKV0KKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihtZXRhZGF0YV9maWVsZHMpLnN0cmlwKCkKKworZGVmIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUgKHZhcm5hbWUsIHBrZywgZCk6CisgICAgI2JiLm5vdGUoIiVzIGJlZm9yZTogJXMiICUgKHZhcm5hbWUsIGQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpKSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIG5ld19kZXBlbmRzID0ge30KKyAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpIG9yICIiKQorICAgIGZvciBkZXBlbmQgaW4gZGVwczoKKyAgICAgICAgbmV3X2RlcGVuZCA9IGdldF9wYWNrYWdlX21hcHBpbmcoZGVwZW5kLCBwa2csIGQpCisgICAgICAgIG5ld19kZXBlbmRzW25ld19kZXBlbmRdID0gZGVwc1tkZXBlbmRdCisKKyAgICBkLnNldFZhcih2YXJuYW1lLCBiYi51dGlscy5qb2luX2RlcHMobmV3X2RlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgICNiYi5ub3RlKCIlcyBhZnRlcjogJXMiICUgKHZhcm5hbWUsIGQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpKSkKKworIworIyBQYWNrYWdlIGZ1bmN0aW9ucyBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uIGluIFBBQ0tBR0VGVU5DUworIworCitweXRob24gcGFja2FnZV9nZXRfYXV0b19wcigpIHsKKyAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgaW1wb3J0IHJlCisKKyAgICAjIFN1cHBvcnQgcGVyIHJlY2lwZSBQUlNFUlZfSE9TVAorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBob3N0ID0gZC5nZXRWYXIoIlBSU0VSVl9IT1NUXyIgKyBwbiwgVHJ1ZSkKKyAgICBpZiBub3QgKGhvc3QgaXMgTm9uZSk6CisgICAgICAgIGQuc2V0VmFyKCJQUlNFUlZfSE9TVCIsIGhvc3QpCisKKyAgICBwa2d2ID0gZC5nZXRWYXIoIlBLR1YiLCBUcnVlKQorCisgICAgIyBQUiBTZXJ2ZXIgbm90IGFjdGl2ZSwgaGFuZGxlIEFVVE9JTkMKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSk6CisgICAgICAgIGlmICdBVVRPSU5DJyBpbiBwa2d2OgorICAgICAgICAgICAgZC5zZXRWYXIoIlBLR1YiLCBwa2d2LnJlcGxhY2UoIkFVVE9JTkMiLCAiMCIpKQorICAgICAgICByZXR1cm4KKworICAgIGF1dG9fcHIgPSBOb25lCisgICAgcHYgPSBkLmdldFZhcigiUFYiLCBUcnVlKQorICAgIHZlcnNpb24gPSBkLmdldFZhcigiUFJBVVRPSU5YIiwgVHJ1ZSkKKyAgICBwa2dhcmNoID0gZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIFRydWUpCisgICAgY2hlY2tzdW0gPSBkLmdldFZhcigiQkJfVEFTS0hBU0giLCBUcnVlKQorCisgICAgaWYgZC5nZXRWYXIoJ1BSU0VSVl9MT0NLRE9XTicsIFRydWUpOgorICAgICAgICBhdXRvX3ByID0gZC5nZXRWYXIoJ1BSQVVUT18nICsgdmVyc2lvbiArICdfJyArIHBrZ2FyY2gsIFRydWUpIG9yIGQuZ2V0VmFyKCdQUkFVVE9fJyArIHZlcnNpb24sIFRydWUpIG9yIE5vbmUKKyAgICAgICAgaWYgYXV0b19wciBpcyBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0IFBSQVVUTyBmcm9tIGxvY2tkb3duIGV4cG9ydGVkIGZpbGUiKQorICAgICAgICBkLnNldFZhcignUFJBVVRPJyxzdHIoYXV0b19wcikpCisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBjb25uID0gZC5nZXRWYXIoIl9fUFJTRVJWX0NPTk4iLCBUcnVlKQorICAgICAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgICAgICBjb25uID0gb2UucHJzZXJ2aWNlLnByc2Vydl9tYWtlX2Nvbm4oZCkKKyAgICAgICAgaWYgY29ubiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmICJBVVRPSU5DIiBpbiBwa2d2OgorICAgICAgICAgICAgICAgIHNyY3B2ID0gYmIuZmV0Y2gyLmdldF9zcmNyZXYoZCkKKyAgICAgICAgICAgICAgICBiYXNlX3ZlciA9ICJBVVRPSU5DLSVzIiAlIHZlcnNpb25bOnZlcnNpb24uZmluZChzcmNwdildCisgICAgICAgICAgICAgICAgdmFsdWUgPSBjb25uLmdldFBSKGJhc2VfdmVyLCBwa2dhcmNoLCBzcmNwdikKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiUEtHViIsIHBrZ3YucmVwbGFjZSgiQVVUT0lOQyIsIHN0cih2YWx1ZSkpKQorCisgICAgICAgICAgICBhdXRvX3ByID0gY29ubi5nZXRQUih2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGJiLmZhdGFsKCJDYW4gTk9UIGdldCBQUkFVVE8sIGV4Y2VwdGlvbiAlcyIgJSAgc3RyKGUpKQorICAgIGlmIGF1dG9fcHIgaXMgTm9uZToKKyAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0IFBSQVVUTyBmcm9tIHJlbW90ZSBQUiBzZXJ2aWNlIikKKyAgICBkLnNldFZhcignUFJBVVRPJyxzdHIoYXV0b19wcikpCit9CisKK0xPQ0FMRUJBU0VQTiA/Pz0gIiR7UE59IgorCitweXRob24gcGFja2FnZV9kb19zcGxpdF9sb2NhbGVzKCkgeworICAgIGlmIChkLmdldFZhcignUEFDS0FHRV9OT19MT0NBTEUnLCBUcnVlKSA9PSAnMScpOgorICAgICAgICBiYi5kZWJ1ZygxLCAicGFja2FnZSByZXF1ZXN0ZWQgbm90IHNwbGl0dGluZyBsb2NhbGVzIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgZGF0YWRpciA9IGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSkKKyAgICBpZiBub3QgZGF0YWRpcjoKKyAgICAgICAgYmIubm90ZSgiZGF0YWRpciBub3QgZGVmaW5lZCIpCisgICAgICAgIHJldHVybgorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdMT0NBTEVCQVNFUE4nLCBUcnVlKQorCisgICAgaWYgcG4gKyAnLWxvY2FsZScgaW4gcGFja2FnZXM6CisgICAgICAgIHBhY2thZ2VzLnJlbW92ZShwbiArICctbG9jYWxlJykKKworICAgIGxvY2FsZWRpciA9IG9zLnBhdGguam9pbihkdmFyICsgZGF0YWRpciwgJ2xvY2FsZScpCisKKyAgICBpZiBub3QgY3BhdGguaXNkaXIobG9jYWxlZGlyKToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIGxvY2FsZSBmaWxlcyBpbiB0aGlzIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsZXMgPSBvcy5saXN0ZGlyKGxvY2FsZWRpcikKKworICAgIHN1bW1hcnkgPSBkLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIHBuCisgICAgZGVzY3JpcHRpb24gPSBkLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiIgorICAgIGxvY2FsZV9zZWN0aW9uID0gZC5nZXRWYXIoJ0xPQ0FMRV9TRUNUSU9OJywgVHJ1ZSkKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICIiCisgICAgZm9yIGwgaW4gc29ydGVkKGxvY2FsZXMpOgorICAgICAgICBsbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKGwpCisgICAgICAgIHBrZyA9IHBuICsgJy1sb2NhbGUtJyArIGxuCisgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcGtnLCBvcy5wYXRoLmpvaW4oZGF0YWRpciwgJ2xvY2FsZScsIGwpKQorICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJyArIHBrZywgJyVzdmlydHVhbC1sb2NhbGUtJXMnICUgKG1scHJlZml4LCBsbikpCisgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgJyVzLWxvY2FsZSAlcyVzLXRyYW5zbGF0aW9uJyAlIChwbiwgbWxwcmVmaXgsIGxuKSkKKyAgICAgICAgZC5zZXRWYXIoJ1NVTU1BUllfJyArIHBrZywgJyVzIC0gJXMgdHJhbnNsYXRpb25zJyAlIChzdW1tYXJ5LCBsKSkKKyAgICAgICAgZC5zZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csICclcyAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGxhbmd1YWdlIHRyYW5zbGF0aW9uIGZpbGVzIGZvciB0aGUgJXMgbG9jYWxlLicgJSAoZGVzY3JpcHRpb24sIGwpKQorICAgICAgICBpZiBsb2NhbGVfc2VjdGlvbjoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTRUNUSU9OXycgKyBwa2csIGxvY2FsZV9zZWN0aW9uKQorCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZXMpKQorCisgICAgIyBEaXNhYmxlZCBieSBSUCAxOC8wNi8wNworICAgICMgV2lsZGNhcmRzIGFyZW4ndCBzdXBwb3J0ZWQgaW4gZGViaWFuCisgICAgIyBUaGV5IGJyZWFrIHdpdGggaXBrZyBzaW5jZSBnbGliYy1sb2NhbGUqIHdpbGwgbWVhbiB0aGF0CisgICAgIyBnbGliYy1sb2NhbGVkYXRhLXRyYW5zbGl0KiB3b24ndCBpbnN0YWxsIGFzIGEgZGVwZW5kZW5jeQorICAgICMgZm9yIHNvbWUgb3RoZXIgcGFja2FnZSB3aGljaCBicmVha3MgbWV0YS10b29sY2hhaW4KKyAgICAjIFByb2JhYmx5IGJyZWFrcyBzaW5jZSB2aXJ0dWFsLWxvY2FsZS0gaXNuJ3QgcHJvdmlkZWQgYW55d2hlcmUKKyAgICAjcmRlcCA9IChkLmdldFZhcignUkRFUEVORFNfJXMnICUgcG4sIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgI3JkZXAuYXBwZW5kKCclcy1sb2NhbGUqJyAlIHBuKQorICAgICNkLnNldFZhcignUkRFUEVORFNfJXMnICUgcG4sICcgJy5qb2luKHJkZXApKQorfQorCitweXRob24gcGVyZm9ybV9wYWNrYWdlY29weSAoKSB7CisgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgIyBTdGFydCBieSBwYWNrYWdlIHBvcHVsYXRpb24gYnkgdGFraW5nIGEgY29weSBvZiB0aGUgaW5zdGFsbGVkCisgICAgIyBmaWxlcyB0byBvcGVyYXRlIG9uCisgICAgIyBQcmVzZXJ2ZSBzcGFyc2UgZmlsZXMgYW5kIGhhcmQgbGlua3MKKyAgICBjbWQgPSAndGFyIC1jZiAtIC1DICVzIC1wIC4gfCB0YXIgLXhmIC0gLUMgJXMnICUgKGRlc3QsIGR2YXIpCisgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgaWYgcmV0dmFsOgorICAgICAgICBiYi5mYXRhbCgiZmlsZSBjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgIyByZXBsYWNlIFJQQVRIcyBmb3IgdGhlIG5hdGl2ZXNkayBiaW5hcmllcywgdG8gbWFrZSB0aGVtIHJlbG9jYXRhYmxlCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgcnBhdGhfcmVwbGFjZSAoZHZhciwgZCkKK30KK3BlcmZvcm1fcGFja2FnZWNvcHlbY2xlYW5kaXJzXSA9ICIke1BLR0R9IgorcGVyZm9ybV9wYWNrYWdlY29weVtkaXJzXSA9ICIke1BLR0R9IgorCisjIFdlIGdlbmVyYXRlIGEgbWFzdGVyIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gcHJvY2Vzcywgd2Ugc3RhcnQgYnkKKyMgc2VlZGluZyB0aGlzIGxpc3Qgd2l0aCByZWFzb25hYmxlIGRlZmF1bHRzLCB0aGVuIGxvYWQgZnJvbQorIyB0aGUgZnMtcGVybXMudHh0IGZpbGVzCitweXRob24gZml4dXBfcGVybXMgKCkgeworICAgIGltcG9ydCBwd2QsIGdycAorCisgICAgIyBpbml0IHVzaW5nIGEgc3RyaW5nIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGEgbGluZSBhcyBkb2N1bWVudGVkIGluCisgICAgIyB0aGUgZnMtcGVybXMudHh0IGZpbGUKKyAgICAjIDxwYXRoPiA8bW9kZT4gPHVpZD4gPGdpZD4gPHdhbGs+IDxmbW9kZT4gPGZ1aWQ+IDxmZ2lkPgorICAgICMgPHBhdGg+IGxpbmsgPGxpbmsgdGFyZ2V0PgorICAgICMKKyAgICAjIF9fc3RyX18gY2FuIGJlIHVzZWQgdG8gcHJpbnQgb3V0IGFuIGVudHJ5IGluIHRoZSBpbnB1dCBmb3JtYXQKKyAgICAjCisgICAgIyBpZiBmc19wZXJtc19lbnRyeS5wYXRoIGlzIE5vbmU6CisgICAgIyAgICBhbiBlcnJvciBvY2N1cmVkCisgICAgIyBpZiBmc19wZXJtc19lbnRyeS5saW5rLCB5b3UgY2FuIHJldHJpZXZlOgorICAgICMgICAgZnNfcGVybXNfZW50cnkucGF0aCA9IHBhdGgKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmxpbmsgPSB0YXJnZXQgb2YgbGluaworICAgICMgaWYgbm90IGZzX3Blcm1zX2VudHJ5LmxpbmssIHlvdSBjYW4gcmV0cmlldmU6CisgICAgIyAgICBmc19wZXJtc19lbnRyeS5wYXRoID0gcGF0aAorICAgICMgICAgZnNfcGVybXNfZW50cnkubW9kZSA9IGV4cGVjdGVkIGRpciBtb2RlIG9yIE5vbmUKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LnVpZCA9IGV4cGVjdGVkIHVpZCBvciAtMQorICAgICMgICAgZnNfcGVybXNfZW50cnkuZ2lkID0gZXhwZWN0ZWQgZ2lkIG9yIC0xCisgICAgIyAgICBmc19wZXJtc19lbnRyeS53YWxrID0gJ3RydWUnIG9yIHNvbWV0aGluZyBlbHNlCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5mbW9kZSA9IGV4cGVjdGVkIGZpbGUgbW9kZSBvciBOb25lCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5mdWlkID0gZXhwZWN0ZWQgZmlsZSB1aWQgb3IgLTEKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5X2ZnaWQgPSBleHBlY3RlZCBmaWxlIGdpZCBvciAtMQorICAgIGNsYXNzIGZzX3Blcm1zX2VudHJ5KCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgICAgIGxzcGxpdCA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgaWYgbGVuKGxzcGxpdCkgPT0gMyBhbmQgbHNwbGl0WzFdLmxvd2VyKCkgPT0gImxpbmsiOgorICAgICAgICAgICAgICAgIHNlbGYuX3NldGxpbmsobHNwbGl0WzBdLCBsc3BsaXRbMl0pCisgICAgICAgICAgICBlbGlmIGxlbihsc3BsaXQpID09IDg6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0ZGlyKGxzcGxpdFswXSwgbHNwbGl0WzFdLCBsc3BsaXRbMl0sIGxzcGxpdFszXSwgbHNwbGl0WzRdLCBsc3BsaXRbNV0sIGxzcGxpdFs2XSwgbHNwbGl0WzddKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSAiRml4dXAgUGVybXM6IGludmFsaWQgY29uZmlnIGxpbmUgJXMiICUgbGluZQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwZXJtLWNvbmZpZyIsIG1zZywgZCkKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGggPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5saW5rID0gTm9uZQorCisgICAgICAgIGRlZiBfc2V0ZGlyKHNlbGYsIHBhdGgsIG1vZGUsIHVpZCwgZ2lkLCB3YWxrLCBmbW9kZSwgZnVpZCwgZmdpZCk6CisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgICAgICBzZWxmLmxpbmsgPSBOb25lCisgICAgICAgICAgICBzZWxmLm1vZGUgPSBzZWxmLl9wcm9jbW9kZShtb2RlKQorICAgICAgICAgICAgc2VsZi51aWQgID0gc2VsZi5fcHJvY3VpZCh1aWQpCisgICAgICAgICAgICBzZWxmLmdpZCAgPSBzZWxmLl9wcm9jZ2lkKGdpZCkKKyAgICAgICAgICAgIHNlbGYud2FsayA9IHdhbGsubG93ZXIoKQorICAgICAgICAgICAgc2VsZi5mbW9kZSA9IHNlbGYuX3Byb2Ntb2RlKGZtb2RlKQorICAgICAgICAgICAgc2VsZi5mdWlkID0gc2VsZi5fcHJvY3VpZChmdWlkKQorICAgICAgICAgICAgc2VsZi5mZ2lkID0gc2VsZi5fcHJvY2dpZChmZ2lkKQorCisgICAgICAgIGRlZiBfc2V0bGluayhzZWxmLCBwYXRoLCBsaW5rKToKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKKyAgICAgICAgICAgIHNlbGYubGluayA9IGxpbmsKKworICAgICAgICBkZWYgX3Byb2Ntb2RlKHNlbGYsIG1vZGUpOgorICAgICAgICAgICAgaWYgbm90IG1vZGUgb3IgKG1vZGUgYW5kIG1vZGUgPT0gIi0iKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KG1vZGUsOCkKKworICAgICAgICAjIE5vdGUgdWlkL2dpZCAtMSBoYXMgc3BlY2lhbCBzaWduaWZpY2FuY2UgaW4gb3MubGNob3duCisgICAgICAgIGRlZiBfcHJvY3VpZChzZWxmLCB1aWQpOgorICAgICAgICAgICAgaWYgdWlkIGlzIE5vbmUgb3IgdWlkID09ICItIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgICAgIGVsaWYgdWlkLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHVpZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB3ZC5nZXRwd25hbSh1aWQpLnB3X3VpZAorCisgICAgICAgIGRlZiBfcHJvY2dpZChzZWxmLCBnaWQpOgorICAgICAgICAgICAgaWYgZ2lkIGlzIE5vbmUgb3IgZ2lkID09ICItIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgICAgIGVsaWYgZ2lkLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KGdpZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdycC5nZXRncm5hbShnaWQpLmdyX2dpZAorCisgICAgICAgICMgVXNlIGZvciBkZWJ1Z2dpbmcgdGhlIGVudHJpZXMKKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLmxpbms6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlcyBsaW5rICVzIiAlIChzZWxmLnBhdGgsIHNlbGYubGluaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kZSA9ICItIgorICAgICAgICAgICAgICAgIGlmIHNlbGYubW9kZToKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICIwJW8iICUgc2VsZi5tb2RlCisgICAgICAgICAgICAgICAgZm1vZGUgPSAiLSIKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZtb2RlOgorICAgICAgICAgICAgICAgICAgICBmbW9kZSA9ICIwJW8iICUgc2VsZi5mbW9kZQorICAgICAgICAgICAgICAgIHVpZCA9IHNlbGYuX21hcHVnaWQoc2VsZi51aWQpCisgICAgICAgICAgICAgICAgZ2lkID0gc2VsZi5fbWFwdWdpZChzZWxmLmdpZCkKKyAgICAgICAgICAgICAgICBmdWlkID0gc2VsZi5fbWFwdWdpZChzZWxmLmZ1aWQpCisgICAgICAgICAgICAgICAgZmdpZCA9IHNlbGYuX21hcHVnaWQoc2VsZi5mZ2lkKQorICAgICAgICAgICAgICAgIHJldHVybiAiJXMgJXMgJXMgJXMgJXMgJXMgJXMgJXMiICUgKHNlbGYucGF0aCwgbW9kZSwgdWlkLCBnaWQsIHNlbGYud2FsaywgZm1vZGUsIGZ1aWQsIGZnaWQpCisKKyAgICAgICAgZGVmIF9tYXB1Z2lkKHNlbGYsIGlkKToKKyAgICAgICAgICAgIGlmIGlkIGlzIE5vbmUgb3IgaWQgPT0gLTE6CisgICAgICAgICAgICAgICAgcmV0dXJuICItIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVkIiAlIGlkCisKKyAgICAjIEZpeCB0aGUgcGVybWlzc2lvbiwgb3duZXIgYW5kIGdyb3VwIG9mIHBhdGgKKyAgICBkZWYgZml4X3Blcm1zKHBhdGgsIG1vZGUsIHVpZCwgZ2lkLCBkaXIpOgorICAgICAgICBpZiBtb2RlIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IGNobW9kIDAlbyAlcyIgJSAobW9kZSwgZGlyKSkKKyAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIG1vZGUpCisgICAgICAgICMgLTEgaXMgYSBzcGVjaWFsIHZhbHVlIHRoYXQgbWVhbnMgZG9uJ3QgY2hhbmdlIHRoZSB1aWQvZ2lkCisgICAgICAgICMgaWYgdGhleSBhcmUgQk9USCAtMSwgZG9uJ3QgYm90aGVyIHRvIGxjaG93bgorICAgICAgICBpZiBub3QgKHVpZCA9PSAtMSBhbmQgZ2lkID09IC0xKToKKyAgICAgICAgICAgICNiYi5ub3RlKCJGaXh1cCBQZXJtczogbGNob3duICVkOiVkICVzIiAlICh1aWQsIGdpZCwgZGlyKSkKKyAgICAgICAgICAgIG9zLmxjaG93bihwYXRoLCB1aWQsIGdpZCkKKworICAgICMgUmV0dXJuIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9uIGVpdGhlciB0aGUgZGVmYXVsdAorICAgICMgZmlsZXMvZnMtcGVybXMudHh0IG9yIHRoZSBjb250ZW50cyBvZiBGSUxFU1lTVEVNX1BFUk1TX1RBQkxFUworICAgICMgcGF0aHMgYXJlIHJlc29sdmVkIHZpYSBCQlBBVEgKKyAgICBkZWYgZ2V0X2ZzX3Blcm1zX2xpc3QoZCk6CisgICAgICAgIHN0ciA9ICIiCisgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgICAgICBmc19wZXJtc190YWJsZXMgPSBkLmdldFZhcignRklMRVNZU1RFTV9QRVJNU19UQUJMRVMnLCBUcnVlKQorICAgICAgICBpZiBub3QgZnNfcGVybXNfdGFibGVzOgorICAgICAgICAgICAgZnNfcGVybXNfdGFibGVzID0gJ2ZpbGVzL2ZzLXBlcm1zLnR4dCcKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBmc19wZXJtc190YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQorICAgICAgICByZXR1cm4gc3RyCisKKworCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgIGZzX3Blcm1zX3RhYmxlID0ge30KKworICAgICMgQnkgZGVmYXVsdCBhbGwgb2YgdGhlIHN0YW5kYXJkIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbgorICAgICMgYml0YmFrZS5jb25mIHdpbGwgZ2V0IDA3NTUgcm9vdDpyb290LgorICAgIHRhcmdldF9wYXRoX3ZhcnMgPSBbICAgICdiYXNlX3ByZWZpeCcsCisgICAgICAgICAgICAgICAgJ3ByZWZpeCcsCisgICAgICAgICAgICAgICAgJ2V4ZWNfcHJlZml4JywKKyAgICAgICAgICAgICAgICAnYmFzZV9iaW5kaXInLAorICAgICAgICAgICAgICAgICdiYXNlX3NiaW5kaXInLAorICAgICAgICAgICAgICAgICdiYXNlX2xpYmRpcicsCisgICAgICAgICAgICAgICAgJ2RhdGFkaXInLAorICAgICAgICAgICAgICAgICdzeXNjb25mZGlyJywKKyAgICAgICAgICAgICAgICAnc2VydmljZWRpcicsCisgICAgICAgICAgICAgICAgJ3NoYXJlZHN0YXRlZGlyJywKKyAgICAgICAgICAgICAgICAnbG9jYWxzdGF0ZWRpcicsCisgICAgICAgICAgICAgICAgJ2luZm9kaXInLAorICAgICAgICAgICAgICAgICdtYW5kaXInLAorICAgICAgICAgICAgICAgICdkb2NkaXInLAorICAgICAgICAgICAgICAgICdiaW5kaXInLAorICAgICAgICAgICAgICAgICdzYmluZGlyJywKKyAgICAgICAgICAgICAgICAnbGliZXhlY2RpcicsCisgICAgICAgICAgICAgICAgJ2xpYmRpcicsCisgICAgICAgICAgICAgICAgJ2luY2x1ZGVkaXInLAorICAgICAgICAgICAgICAgICdvbGRpbmNsdWRlZGlyJyBdCisKKyAgICBmb3IgcGF0aCBpbiB0YXJnZXRfcGF0aF92YXJzOgorICAgICAgICBkaXIgPSBkLmdldFZhcihwYXRoLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBkaXIgPT0gIiI6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmc19wZXJtc190YWJsZVtkaXJdID0gZnNfcGVybXNfZW50cnkoYmIuZGF0YS5leHBhbmQoIiVzIDA3NTUgcm9vdCByb290IGZhbHNlIC0gLSAtIiAlIChkaXIpLCBkKSkKKworICAgICMgTm93IHdlIGFjdHVhbGx5IGxvYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcworICAgIGZvciBjb25mIGluIGdldF9mc19wZXJtc19saXN0KGQpLnNwbGl0KCk6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmYpOgorICAgICAgICAgICAgZiA9IG9wZW4oY29uZikKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbHNwbGl0ID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKGxzcGxpdCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBsZW4obHNwbGl0KSAhPSA4IGFuZCBub3QgKGxlbihsc3BsaXQpID09IDMgYW5kIGxzcGxpdFsxXS5sb3dlcigpID09ICJsaW5rIik6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJGaXh1cCBwZXJtczogJXMgaW52YWxpZCBsaW5lOiAlcyIgJSAoY29uZiwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBlcm0tbGluZSIsIG1zZywgZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGZzX3Blcm1zX2VudHJ5KGQuZXhwYW5kKGxpbmUpKQorICAgICAgICAgICAgICAgIGlmIGVudHJ5IGFuZCBlbnRyeS5wYXRoOgorICAgICAgICAgICAgICAgICAgICBmc19wZXJtc190YWJsZVtlbnRyeS5wYXRoXSA9IGVudHJ5CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICMgRGVidWcgLS0gbGlzdCBvdXQgaW4tbWVtb3J5IHRhYmxlCisgICAgI2ZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CisgICAgIyAgICBiYi5ub3RlKCJGaXh1cCBQZXJtczogJXM6ICVzIiAlIChkaXIsIHN0cihmc19wZXJtc190YWJsZVtkaXJdKSkpCisKKyAgICAjIFdlIHByb2Nlc3MgbGlua3MgZmlyc3QsIHNvIHdlIGNhbiBnbyBiYWNrIGFuZCBmaXh1cCBkaXJlY3Rvcnkgb3duZXJzaGlwCisgICAgIyBmb3IgYW55IG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3JpZXMKKyAgICBmb3IgZGlyIGluIGZzX3Blcm1zX3RhYmxlOgorICAgICAgICBpZiBub3QgZnNfcGVybXNfdGFibGVbZGlyXS5saW5rOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBvcmlnaW4gPSBkdmFyICsgZGlyCisgICAgICAgIGlmIG5vdCAoY3BhdGguZXhpc3RzKG9yaWdpbikgYW5kIGNwYXRoLmlzZGlyKG9yaWdpbikgYW5kIG5vdCBjcGF0aC5pc2xpbmsob3JpZ2luKSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGxpbmsgPSBmc19wZXJtc190YWJsZVtkaXJdLmxpbmsKKyAgICAgICAgaWYgbGlua1swXSA9PSAiLyI6CisgICAgICAgICAgICB0YXJnZXQgPSBkdmFyICsgbGluaworICAgICAgICAgICAgcHRhcmdldCA9IGxpbmsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3JpZ2luKSwgbGluaykKKyAgICAgICAgICAgIHB0YXJnZXQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGRpciksIGxpbmspCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRhcmdldCk6CisgICAgICAgICAgICBtc2cgPSAiRml4dXAgUGVybXM6IFVuYWJsZSB0byBjb3JyZWN0IGRpcmVjdG9yeSBsaW5rLCB0YXJnZXQgYWxyZWFkeSBleGlzdHM6ICVzIC0+ICVzIiAlIChkaXIsIHB0YXJnZXQpCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGVybS1saW5rIiwgbXNnLCBkKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIENyZWF0ZSBwYXRoIHRvIG1vdmUgZGlyZWN0b3J5IHRvLCBtb3ZlIGl0LCBhbmQgdGhlbiBzZXR1cCB0aGUgc3ltbGluaworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHRhcmdldCkpCisgICAgICAgICNiYi5ub3RlKCJGaXh1cCBQZXJtczogUmVuYW1lICVzIC0+ICVzIiAlIChkaXIsIHB0YXJnZXQpKQorICAgICAgICBvcy5yZW5hbWUob3JpZ2luLCB0YXJnZXQpCisgICAgICAgICNiYi5ub3RlKCJGaXh1cCBQZXJtczogTGluayAlcyAtPiAlcyIgJSAoZGlyLCBsaW5rKSkKKyAgICAgICAgb3Muc3ltbGluayhsaW5rLCBvcmlnaW4pCisKKyAgICBmb3IgZGlyIGluIGZzX3Blcm1zX3RhYmxlOgorICAgICAgICBpZiBmc19wZXJtc190YWJsZVtkaXJdLmxpbms6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG9yaWdpbiA9IGR2YXIgKyBkaXIKKyAgICAgICAgaWYgbm90IChjcGF0aC5leGlzdHMob3JpZ2luKSBhbmQgY3BhdGguaXNkaXIob3JpZ2luKSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGZpeF9wZXJtcyhvcmlnaW4sIGZzX3Blcm1zX3RhYmxlW2Rpcl0ubW9kZSwgZnNfcGVybXNfdGFibGVbZGlyXS51aWQsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZ2lkLCBkaXIpCisKKyAgICAgICAgaWYgZnNfcGVybXNfdGFibGVbZGlyXS53YWxrID09ICd0cnVlJzoKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9yaWdpbik6CisgICAgICAgICAgICAgICAgZm9yIGRyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGVhY2hfZGlyID0gb3MucGF0aC5qb2luKHJvb3QsIGRyKQorICAgICAgICAgICAgICAgICAgICBmaXhfcGVybXMoZWFjaF9kaXIsIGZzX3Blcm1zX3RhYmxlW2Rpcl0ubW9kZSwgZnNfcGVybXNfdGFibGVbZGlyXS51aWQsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZ2lkLCBkaXIpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGVhY2hfZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgICAgICAgICBmaXhfcGVybXMoZWFjaF9maWxlLCBmc19wZXJtc190YWJsZVtkaXJdLmZtb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLmZ1aWQsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZmdpZCwgZGlyKQorfQorCitweXRob24gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzICgpIHsKKyAgICBpbXBvcnQgc3RhdCwgZXJybm8KKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgIyBXZSBkZWZhdWx0IHRvICcuZGVidWcnIHN0eWxlCisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnLCBUcnVlKSA9PSAnZGVidWctZmlsZS1kaXJlY3RvcnknOgorICAgICAgICAjIFNpbmdsZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBzdHlsZSBkZWJ1ZyBpbmZvCisgICAgICAgIGRlYnVnYXBwZW5kID0gIi5kZWJ1ZyIKKyAgICAgICAgZGVidWdkaXIgPSAiIgorICAgICAgICBkZWJ1Z2xpYmRpciA9ICIvdXNyL2xpYi9kZWJ1ZyIKKyAgICAgICAgZGVidWdzcmNkaXIgPSAiL3Vzci9zcmMvZGVidWciCisgICAgZWxpZiBkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy13aXRob3V0LXNyYyc6CisgICAgICAgICMgT3JpZ2luYWwgT0UtY29yZSwgYS5rLmEuICIuZGVidWciLCBzdHlsZSBkZWJ1ZyBpbmZvLCBidXQgd2l0aG91dCBzb3VyY2VzIGluIC91c3Ivc3JjL2RlYnVnCisgICAgICAgIGRlYnVnYXBwZW5kID0gIiIKKyAgICAgICAgZGVidWdkaXIgPSAiLy5kZWJ1ZyIKKyAgICAgICAgZGVidWdsaWJkaXIgPSAiIgorICAgICAgICBkZWJ1Z3NyY2RpciA9ICIiCisgICAgZWxzZToKKyAgICAgICAgIyBPcmlnaW5hbCBPRS1jb3JlLCBhLmsuYS4gIi5kZWJ1ZyIsIHN0eWxlIGRlYnVnIGluZm8KKyAgICAgICAgZGVidWdhcHBlbmQgPSAiIgorICAgICAgICBkZWJ1Z2RpciA9ICIvLmRlYnVnIgorICAgICAgICBkZWJ1Z2xpYmRpciA9ICIiCisgICAgICAgIGRlYnVnc3JjZGlyID0gIi91c3Ivc3JjL2RlYnVnIgorCisgICAgc291cmNlZmlsZSA9IGQuZXhwYW5kKCIke1dPUktESVJ9L2RlYnVnc291cmNlcy5saXN0IikKKyAgICBiYi51dGlscy5yZW1vdmUoc291cmNlZmlsZSkKKworICAgIG9zLmNoZGlyKGR2YXIpCisKKyAgICAjIFJldHVybiB0eXBlIChiaXRzKToKKyAgICAjIDAgLSBub3QgZWxmCisgICAgIyAxIC0gRUxGCisgICAgIyAyIC0gc3RyaXBwZWQKKyAgICAjIDQgLSBleGVjdXRhYmxlCisgICAgIyA4IC0gc2hhcmVkIGxpYnJhcnkKKyAgICAjIDE2IC0ga2VybmVsIG1vZHVsZQorICAgIGRlZiBpc0VMRihwYXRoKToKKyAgICAgICAgdHlwZSA9IDAKKyAgICAgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoImZpbGUgXCIlc1wiIiAlIHBhdGgucmVwbGFjZSgiXCIiLCAiXFxcIiIpKQorCisgICAgICAgIGlmIHJldDoKKyAgICAgICAgICAgIG1zZyA9ICJzcGxpdF9hbmRfc3RyaXBfZmlsZXM6ICdmaWxlICVzJyBmYWlsZWQiICUgcGF0aAorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInNwbGl0LXN0cmlwIiwgbXNnLCBkKQorICAgICAgICAgICAgcmV0dXJuIHR5cGUKKworICAgICAgICAjIE5vdCBzdHJpcHBlZAorICAgICAgICBpZiAiRUxGIiBpbiByZXN1bHQ6CisgICAgICAgICAgICB0eXBlIHw9IDEKKyAgICAgICAgICAgIGlmICJub3Qgc3RyaXBwZWQiIG5vdCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSAyCisgICAgICAgICAgICBpZiAiZXhlY3V0YWJsZSIgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gNAorICAgICAgICAgICAgaWYgInNoYXJlZCIgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gOAorICAgICAgICByZXR1cm4gdHlwZQorCisKKyAgICAjCisgICAgIyBGaXJzdCBsZXRzIGZpZ3VyZSBvdXQgYWxsIG9mIHRoZSBmaWxlcyB3ZSBtYXkgaGF2ZSB0byBwcm9jZXNzIC4uLiBkbyB0aGlzIG9ubHkgb25jZSEKKyAgICAjCisgICAgZWxmZmlsZXMgPSB7fQorICAgIHN5bWxpbmtzID0ge30KKyAgICBrZXJubW9kcyA9IFtdCisgICAgaW5vZGVzID0ge30KKyAgICBsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSkKKyAgICBiYXNlbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGR2YXIgKyBvcy5zZXAgKyBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSkKKyAgICBpZiAoZC5nZXRWYXIoJ0lOSElCSVRfUEFDS0FHRV9TVFJJUCcsIFRydWUpICE9ICcxJyk6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKGR2YXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIi5rbyIpIGFuZCBmaWxlLmZpbmQoIi9saWIvbW9kdWxlcy8iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAga2Vybm1vZHMuYXBwZW5kKGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIFNraXAgZGVidWcgZmlsZXMKKyAgICAgICAgICAgICAgICBpZiBkZWJ1Z2FwcGVuZCBhbmQgZmlsZS5lbmRzd2l0aChkZWJ1Z2FwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZGVidWdkaXIgYW5kIGRlYnVnZGlyIGluIG9zLnBhdGguZGlybmFtZShmaWxlW2xlbihkdmFyKTpdKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbHRhcmdldCA9IGNwYXRoLnJlYWxwYXRoKGZpbGUsIGR2YXIsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzID0gY3BhdGgubHN0YXQobHRhcmdldCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAoZXJyLCBzdHJlcnJvcikgPSBlLmFyZ3MKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICMgU2tpcCBicm9rZW4gc3ltbGlua3MKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIENoZWNrIGl0cyBhbiBleGN1dGFibGUKKyAgICAgICAgICAgICAgICBpZiAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYVVNSKSBvciAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYR1JQKSBvciAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYT1RIKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBvciAoKGZpbGUuc3RhcnRzd2l0aChsaWJkaXIpIG9yIGZpbGUuc3RhcnRzd2l0aChiYXNlbGliZGlyKSkgYW5kICIuc28iIGluIGYpOgorICAgICAgICAgICAgICAgICAgICAjIElmIGl0J3MgYSBzeW1saW5rLCBhbmQgcG9pbnRzIHRvIGFuIEVMRiBmaWxlLCB3ZSBjYXB0dXJlIHRoZSByZWFkbGluayB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgaWYgY3BhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gb3MucmVhZGxpbmsoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzRUxGKGx0YXJnZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNiYi5ub3RlKCJTeW06ICVzICglZCkiICUgKGx0YXJnZXQsIGlzRUxGKGx0YXJnZXQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rc1tmaWxlXSA9IHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAjIEl0J3MgYSBmaWxlIChvciBoYXJkbGluayksIG5vdCBhIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgIyAuLi5idXQgaXMgaXQgRUxGLCBhbmQgaXMgaXQgYWxyZWFkeSBzdHJpcHBlZD8KKyAgICAgICAgICAgICAgICAgICAgZWxmX2ZpbGUgPSBpc0VMRihmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBlbGZfZmlsZSAmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbGZfZmlsZSAmIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2FscmVhZHktc3RyaXBwZWQnIGluIChkLmdldFZhcignSU5TQU5FX1NLSVBfJyArIHBuLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiU2tpcHBpbmcgZmlsZSAlcyBmcm9tICVzIGZvciBhbHJlYWR5LXN0cmlwcGVkIFFBIHRlc3QiICUgKGZpbGVbbGVuKGR2YXIpOl0sIHBuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRmlsZSAnJXMnIGZyb20gJXMgd2FzIGFscmVhZHkgc3RyaXBwZWQsIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchIiAlIChmaWxlW2xlbihkdmFyKTpdLCBwbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImFscmVhZHktc3RyaXBwZWQiLCBtc2csIGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gdW5zdHJpcHBlZCBlbGYgZmlsZS4gV2UgbmVlZCB0bzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIGEpIE1ha2Ugc3VyZSBhbnkgZmlsZSB3ZSBzdHJpcCBpcyBub3QgaGFyZGxpbmtlZCB0byBhbnl0aGluZyBlbHNlIG91dHNpZGUgdGhpcyB0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICBiKSBPbmx5IHN0cmlwIGFueSBoYXJkbGlua2VkIGZpbGUgb25jZSAobm8gcmFjZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAjICBjKSBUcmFjayBhbnkgaGFyZGxpbmtzIGJldHdlZW4gZmlsZXMgc28gdGhhdCB3ZSBjYW4gcmVjb25zdHJ1Y3QgbWF0Y2hpbmcgZGVidWcgZmlsZSBoYXJkbGlua3MKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2UgYSByZWZlcmVuY2Ugb2YgZGV2aWNlIElEIGFuZCBpbm9kZSBudW1iZXIgdG8gaW5kZW50aWZ5IGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3JlZmVyZW5jZSA9ICIlZF8lZCIgJSAocy5zdF9kZXYsIHMuc3RfaW5vKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmlsZV9yZWZlcmVuY2UgaW4gaW5vZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsoaW5vZGVzW2ZpbGVfcmVmZXJlbmNlXVswXSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZXNbZmlsZV9yZWZlcmVuY2VdLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZXNbZmlsZV9yZWZlcmVuY2VdID0gW2ZpbGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBicmVhayBoYXJkbGluaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxmZmlsZXNbZmlsZV0gPSBlbGZfZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBNb2RpZmllZCB0aGUgZmlsZSBzbyBjbGVhciB0aGUgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwYXRoLnVwZGF0ZWNhY2hlKGZpbGUpCisKKyAgICAjCisgICAgIyBGaXJzdCBsZXRzIHByb2Nlc3MgZGVidWcgc3BsaXR0aW5nCisgICAgIworICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgZm9yIGZpbGUgaW4gZWxmZmlsZXM6CisgICAgICAgICAgICBzcmMgPSBmaWxlW2xlbihkdmFyKTpdCisgICAgICAgICAgICBkZXN0ID0gZGVidWdsaWJkaXIgKyBvcy5wYXRoLmRpcm5hbWUoc3JjKSArIGRlYnVnZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZShzcmMpICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgIGZwYXRoID0gZHZhciArIGRlc3QKKworICAgICAgICAgICAgIyBTcGxpdCB0aGUgZmlsZS4uLgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmcGF0aCkpCisgICAgICAgICAgICAjYmIubm90ZSgiU3BsaXQgJXMgLT4gJXMiICUgKGZpbGUsIGZwYXRoKSkKKyAgICAgICAgICAgICMgT25seSBzdG9yZSBvZmYgdGhlIGhhcmQgbGluayByZWZlcmVuY2UgaWYgd2Ugc3VjY2Vzc2Z1bGx5IHNwbGl0IQorICAgICAgICAgICAgc3BsaXRkZWJ1Z2luZm8oZmlsZSwgZnBhdGgsIGRlYnVnc3JjZGlyLCBzb3VyY2VmaWxlLCBkKQorCisgICAgICAgICMgSGFyZGxpbmsgb3VyIGRlYnVnIHN5bWJvbHMgdG8gdGhlIG90aGVyIGhhcmRsaW5rIGNvcGllcworICAgICAgICBmb3IgcmVmIGluIGlub2RlczoKKyAgICAgICAgICAgIGlmIGxlbihpbm9kZXNbcmVmXSkgPT0gMToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIGZpbGUgaW4gaW5vZGVzW3JlZl1bMTpdOgorICAgICAgICAgICAgICAgIHNyYyA9IGZpbGVbbGVuKGR2YXIpOl0KKyAgICAgICAgICAgICAgICBkZXN0ID0gZGVidWdsaWJkaXIgKyBvcy5wYXRoLmRpcm5hbWUoc3JjKSArIGRlYnVnZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZShzcmMpICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgICAgICBmcGF0aCA9IGR2YXIgKyBkZXN0CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gaW5vZGVzW3JlZl1bMF1bbGVuKGR2YXIpOl0KKyAgICAgICAgICAgICAgICBmdGFyZ2V0ID0gZHZhciArIGRlYnVnbGliZGlyICsgb3MucGF0aC5kaXJuYW1lKHRhcmdldCkgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUodGFyZ2V0KSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmcGF0aCkpCisgICAgICAgICAgICAgICAgI2JiLm5vdGUoIkxpbmsgJXMgLT4gJXMiICUgKGZwYXRoLCBmdGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBvcy5saW5rKGZ0YXJnZXQsIGZwYXRoKQorCisgICAgICAgICMgQ3JlYXRlIHN5bWxpbmtzIGZvciBhbGwgY2FzZXMgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHN5bWJvbHMKKyAgICAgICAgZm9yIGZpbGUgaW4gc3ltbGlua3M6CisgICAgICAgICAgICBzcmMgPSBmaWxlW2xlbihkdmFyKTpdCisgICAgICAgICAgICBkZXN0ID0gZGVidWdsaWJkaXIgKyBvcy5wYXRoLmRpcm5hbWUoc3JjKSArIGRlYnVnZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZShzcmMpICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgIGZwYXRoID0gZHZhciArIGRlc3QKKyAgICAgICAgICAgICMgU2tpcCBpdCBpZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gb3Muc3RhdChmcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgKGVyciwgc3RyZXJyb3IpID0gZS5hcmdzCisgICAgICAgICAgICAgICAgaWYgZXJyICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsdGFyZ2V0ID0gc3ltbGlua3NbZmlsZV0KKyAgICAgICAgICAgIGxwYXRoID0gb3MucGF0aC5kaXJuYW1lKGx0YXJnZXQpCisgICAgICAgICAgICBsYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUobHRhcmdldCkKKyAgICAgICAgICAgIGZ0YXJnZXQgPSAiIgorICAgICAgICAgICAgaWYgbHBhdGggYW5kIGxwYXRoICE9ICIuIjoKKyAgICAgICAgICAgICAgICBmdGFyZ2V0ICs9IGxwYXRoICsgZGVidWdkaXIgKyAiLyIKKyAgICAgICAgICAgIGZ0YXJnZXQgKz0gbGJhc2UgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgaWYgbHBhdGguc3RhcnRzd2l0aCgiLi4iKToKKyAgICAgICAgICAgICAgICBmdGFyZ2V0ID0gb3MucGF0aC5qb2luKCIuLiIsIGZ0YXJnZXQpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZwYXRoKSkKKyAgICAgICAgICAgICNiYi5ub3RlKCJTeW1saW5rICVzIC0+ICVzIiAlIChmcGF0aCwgZnRhcmdldCkpCisgICAgICAgICAgICBvcy5zeW1saW5rKGZ0YXJnZXQsIGZwYXRoKQorCisgICAgICAgICMgUHJvY2VzcyB0aGUgZGVidWdzcmNkaXIgaWYgcmVxdWVzdGVkLi4uCisgICAgICAgICMgVGhpcyBjb3BpZXMgYW5kIHBsYWNlcyB0aGUgcmVmZXJlbmNlZCBzb3VyY2VzIGZvciBsYXRlciBkZWJ1Z2dpbmcuLi4KKyAgICAgICAgY29weWRlYnVnc291cmNlcyhkZWJ1Z3NyY2RpciwgZCkKKyAgICAjCisgICAgIyBFbmQgb2YgZGVidWcgc3BsaXR0aW5nCisgICAgIworCisgICAgIworICAgICMgTm93IGxldHMgZ28gYmFjayBvdmVyIHRoaW5ncyBhbmQgc3RyaXAgdGhlbQorICAgICMKKyAgICBpZiAoZC5nZXRWYXIoJ0lOSElCSVRfUEFDS0FHRV9TVFJJUCcsIFRydWUpICE9ICcxJyk6CisgICAgICAgIHN0cmlwID0gZC5nZXRWYXIoIlNUUklQIiwgVHJ1ZSkKKyAgICAgICAgc2ZpbGVzID0gW10KKyAgICAgICAgZm9yIGZpbGUgaW4gZWxmZmlsZXM6CisgICAgICAgICAgICBlbGZfZmlsZSA9IGludChlbGZmaWxlc1tmaWxlXSkKKyAgICAgICAgICAgICNiYi5ub3RlKCJTdHJpcCAlcyIgJSBmaWxlKQorICAgICAgICAgICAgc2ZpbGVzLmFwcGVuZCgoZmlsZSwgZWxmX2ZpbGUsIHN0cmlwKSkKKyAgICAgICAgZm9yIGYgaW4ga2Vybm1vZHM6CisgICAgICAgICAgICBzZmlsZXMuYXBwZW5kKChmLCAxNiwgc3RyaXApKQorCisgICAgICAgIG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHNmaWxlcywgb2UucGFja2FnZS5ydW5zdHJpcCkKKworICAgICMKKyAgICAjIEVuZCBvZiBzdHJpcAorICAgICMKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzICgpIHsKKyAgICBpbXBvcnQgZ2xvYiwgcmUKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKQorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRkaXIpCisgICAgb3MuY2hkaXIoZHZhcikKKworICAgICMgU2FuaXR5IGNoZWNrIFBBQ0tBR0VTIGZvciBkdXBsaWNhdGVzCisgICAgIyBTYW5pdHkgc2hvdWxkIGJlIG1vdmVkIHRvIHNhbml0eS5iYmNsYXNzIG9uY2Ugd2UgaGF2ZSB0aGUgaW5mcmFzdHVjdHVyZQorICAgIHBhY2thZ2VfbGlzdCA9IFtdCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIHBrZyBpbiBwYWNrYWdlX2xpc3Q6CisgICAgICAgICAgICBtc2cgPSAiJXMgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIiAlIHBrZworICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBhY2thZ2VzLWxpc3QiLCBtc2csIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlX2xpc3QuYXBwZW5kKHBrZykKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlX2xpc3QpKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBzZWVuID0gW10KKworICAgICMgb3MubWtkaXIgbWFza3MgdGhlIHBlcm1pc3Npb25zIHdpdGggdW1hc2sgc28gd2UgaGF2ZSB0byB1bnNldCBpdCBmaXJzdAorICAgIG9sZHVtYXNrID0gb3MudW1hc2soMCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZV9saXN0OgorICAgICAgICByb290ID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJvb3QpCisKKyAgICAgICAgZmlsZXN2YXIgPSBkLmdldFZhcignRklMRVNfJXMnICUgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICBpZiAiLy8iIGluIGZpbGVzdmFyOgorICAgICAgICAgICAgbXNnID0gIkZJTEVTIHZhcmlhYmxlIGZvciBwYWNrYWdlICVzIGNvbnRhaW5zICcvLycgd2hpY2ggaXMgaW52YWxpZC4gQXR0ZW1wdGluZyB0byBmaXggdGhpcyBidXQgeW91IHNob3VsZCBjb3JyZWN0IHRoZSBtZXRhZGF0YS5cbiIgJSBwa2cKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJmaWxlcy1pbnZhbGlkIiwgbXNnLCBkKQorICAgICAgICAgICAgZmlsZXN2YXIucmVwbGFjZSgiLy8iLCAiLyIpCisKKyAgICAgICAgb3JpZ2ZpbGVzID0gZmlsZXN2YXIuc3BsaXQoKQorICAgICAgICBmaWxlcyA9IGZpbGVzX2Zyb21fZmlsZXZhcnMob3JpZ2ZpbGVzKQorCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgKG5vdCBjcGF0aC5pc2xpbmsoZmlsZSkpIGFuZCAobm90IGNwYXRoLmV4aXN0cyhmaWxlKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpbGUgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2Vlbi5hcHBlbmQoZmlsZSkKKworICAgICAgICAgICAgZGVmIG1rZGlyKHNyYywgZGVzdCwgcCk6CisgICAgICAgICAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKHNyYywgcCkKKyAgICAgICAgICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKGRlc3QsIHApCisgICAgICAgICAgICAgICAgZnN0YXQgPSBjcGF0aC5zdGF0KHNyYykKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihkZXN0LCBmc3RhdC5zdF9tb2RlKQorICAgICAgICAgICAgICAgIG9zLmNob3duKGRlc3QsIGZzdGF0LnN0X3VpZCwgZnN0YXQuc3RfZ2lkKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHNlZW46CisgICAgICAgICAgICAgICAgICAgIHNlZW4uYXBwZW5kKHApCisgICAgICAgICAgICAgICAgY3BhdGgudXBkYXRlY2FjaGUoZGVzdCkKKworICAgICAgICAgICAgZGVmIG1rZGlyX3JlY3Vyc2Uoc3JjLCBkZXN0LCBwYXRocyk6CisgICAgICAgICAgICAgICAgaWYgY3BhdGguZXhpc3RzKGRlc3QgKyAnLycgKyBwYXRocyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHdoaWxlIHBhdGhzLnN0YXJ0c3dpdGgoIi4vIik6CisgICAgICAgICAgICAgICAgICAgIHBhdGhzID0gcGF0aHNbMjpdCisgICAgICAgICAgICAgICAgcCA9ICIuIgorICAgICAgICAgICAgICAgIGZvciBjIGluIHBhdGhzLnNwbGl0KCIvIik6CisgICAgICAgICAgICAgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4ocCwgYykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNwYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGVzdCwgcCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoc3JjLCBkZXN0LCBwKQorCisgICAgICAgICAgICBpZiBjcGF0aC5pc2RpcihmaWxlKSBhbmQgbm90IGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICBta2Rpcl9yZWN1cnNlKGR2YXIsIHJvb3QsIGZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbWtkaXJfcmVjdXJzZShkdmFyLCByb290LCBvcy5wYXRoLmRpcm5hbWUoZmlsZSkpCisgICAgICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihyb290LGZpbGUpCisgICAgICAgICAgICBpZiBub3QgY3BhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgIG9zLmxpbmsoZmlsZSwgZnBhdGgpCisgICAgICAgICAgICAgICAgZnN0YXQgPSBjcGF0aC5zdGF0KGZpbGUpCisgICAgICAgICAgICAgICAgb3MuY2htb2QoZnBhdGgsIGZzdGF0LnN0X21vZGUpCisgICAgICAgICAgICAgICAgb3MuY2hvd24oZnBhdGgsIGZzdGF0LnN0X3VpZCwgZnN0YXQuc3RfZ2lkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXQgPSBiYi51dGlscy5jb3B5ZmlsZShmaWxlLCBmcGF0aCkKKyAgICAgICAgICAgIGlmIHJldCBpcyBGYWxzZSBvciByZXQgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJGaWxlIHBvcHVsYXRpb24gZmFpbGVkIikKKworICAgIG9zLnVtYXNrKG9sZHVtYXNrKQorICAgIG9zLmNoZGlyKHdvcmtkaXIpCisKKyAgICAjIEhhbmRsZSBMSUNFTlNFX0VYQ0xVU0lPTgorICAgIHBhY2thZ2VfbGlzdCA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBkLmdldFZhcignTElDRU5TRV9FWENMVVNJT04tJyArIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBtc2cgPSAiJXMgaGFzIGFuIGluY29tcGF0aWJsZSBsaWNlbnNlLiBFeGNsdWRpbmcgZnJvbSBwYWNrYWdpbmcuIiAlIHBrZworICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluY29tcGF0aWJsZS1saWNlbnNlIiwgbXNnLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZV9saXN0LmFwcGVuZChwa2cpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZV9saXN0KSkKKworICAgIHVuc2hpcHBlZCA9IFtdCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsoZHZhcik6CisgICAgICAgIGRpciA9IHJvb3RbbGVuKGR2YXIpOl0KKyAgICAgICAgaWYgbm90IGRpcjoKKyAgICAgICAgICAgIGRpciA9IG9zLnNlcAorICAgICAgICBmb3IgZiBpbiAoZmlsZXMgKyBkaXJzKToKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGlyLCBmKQorICAgICAgICAgICAgaWYgKCcuJyArIHBhdGgpIG5vdCBpbiBzZWVuOgorICAgICAgICAgICAgICAgIHVuc2hpcHBlZC5hcHBlbmQocGF0aCkKKworICAgIGlmIHVuc2hpcHBlZCAhPSBbXToKKyAgICAgICAgbXNnID0gcG4gKyAiOiBGaWxlcy9kaXJlY3RvcmllcyB3ZXJlIGluc3RhbGxlZCBidXQgbm90IHNoaXBwZWQgaW4gYW55IHBhY2thZ2U6IgorICAgICAgICBpZiAiaW5zdGFsbGVkLXZzLXNoaXBwZWQiIGluIChkLmdldFZhcignSU5TQU5FX1NLSVBfJyArIHBuLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgJXMgc2tpcHBpbmcgUUEgdGVzdHM6IGluc3RhbGxlZC12cy1zaGlwcGVkIiAlIHBuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGYgaW4gdW5zaGlwcGVkOgorICAgICAgICAgICAgICAgIG1zZyA9IG1zZyArICJcbiAgIiArIGYKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJcblBsZWFzZSBzZXQgRklMRVMgc3VjaCB0aGF0IHRoZXNlIGl0ZW1zIGFyZSBwYWNrYWdlZC4gQWx0ZXJuYXRpdmVseSBpZiB0aGV5IGFyZSB1bm5lZWRlZCwgYXZvaWQgaW5zdGFsbGluZyB0aGVtIG9yIGRlbGV0ZSB0aGVtIHdpdGhpbiBkb19pbnN0YWxsLiIKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbnN0YWxsZWQtdnMtc2hpcHBlZCIsIG1zZywgZCkKK30KK3BvcHVsYXRlX3BhY2thZ2VzW2RpcnNdID0gIiR7RH0iCisKK3B5dGhvbiBwYWNrYWdlX2ZpeHN5bWxpbmtzICgpIHsKKyAgICBpbXBvcnQgZXJybm8KKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIlBBQ0tBR0VTIiwgRmFsc2UpLnNwbGl0KCkKKworICAgIGRhbmdsaW5nX2xpbmtzID0ge30KKyAgICBwa2dfZmlsZXMgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIGRhbmdsaW5nX2xpbmtzW3BrZ10gPSBbXQorICAgICAgICBwa2dfZmlsZXNbcGtnXSA9IFtdCisgICAgICAgIGluc3Rfcm9vdCA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCisgICAgICAgIGZvciBwYXRoIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICAgICAgcnBhdGggPSBwYXRoW2xlbihpbnN0X3Jvb3QpOl0KKyAgICAgICAgICAgICAgICBwa2dfZmlsZXNbcGtnXS5hcHBlbmQocnBhdGgpCisgICAgICAgICAgICAgICAgcnRhcmdldCA9IGNwYXRoLnJlYWxwYXRoKHBhdGgsIGluc3Rfcm9vdCwgVHJ1ZSwgYXNzdW1lX2RpciA9IFRydWUpCisgICAgICAgICAgICAgICAgaWYgbm90IGNwYXRoLmxleGlzdHMocnRhcmdldCk6CisgICAgICAgICAgICAgICAgICAgIGRhbmdsaW5nX2xpbmtzW3BrZ10uYXBwZW5kKG9zLnBhdGgubm9ybXBhdGgocnRhcmdldFtsZW4oaW5zdF9yb290KTpdKSkKKworICAgIG5ld3JkZXBlbmRzID0ge30KKyAgICBmb3IgcGtnIGluIGRhbmdsaW5nX2xpbmtzOgorICAgICAgICBmb3IgbCBpbiBkYW5nbGluZ19saW5rc1twa2ddOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgYmIuZGVidWcoMSwgIiVzIGNvbnRhaW5zIGRhbmdsaW5nIGxpbmsgJXMiICUgKHBrZywgbCkpCisgICAgICAgICAgICBmb3IgcCBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICBpZiBsIGluIHBrZ19maWxlc1twXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgInRhcmdldCBmb3VuZCBpbiAlcyIgJSBwKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcCA9PSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gbmV3cmRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmRlcGVuZHNbcGtnXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZGVwZW5kc1twa2ddLmFwcGVuZChwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGZvdW5kID09IEZhbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIiVzIGNvbnRhaW5zIGRhbmdsaW5nIHN5bWxpbmsgdG8gJXMiICUgKHBrZywgbCkpCisKKyAgICBmb3IgcGtnIGluIG5ld3JkZXBlbmRzOgorICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGZvciBwIGluIG5ld3JkZXBlbmRzW3BrZ106CisgICAgICAgICAgICBpZiBwIG5vdCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICByZGVwZW5kc1twXSA9IFtdCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKK30KKworCitweXRob24gcGFja2FnZV9wYWNrYWdlX25hbWVfaG9vaygpIHsKKyAgICAiIiIKKyAgICBBIHBhY2thZ2VfbmFtZV9ob29rIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJld3JpdGUgdGhlIHBhY2thZ2UgbmFtZXMgYnkKKyAgICBjaGFuZ2luZyBQS0cuICBGb3IgYW4gZXhhbXBsZSwgc2VlIGRlYmlhbi5iYmNsYXNzLgorICAgICIiIgorICAgIHBhc3MKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBwYWNrYWdlX25hbWVfaG9vaworCisKK1BLR0RFU1RXT1JLID0gIiR7V09SS0RJUn0vcGtnZGF0YSIKKworcHl0aG9uIGVtaXRfcGtnZGF0YSgpIHsKKyAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQganNvbgorCisgICAgZGVmIHdyaXRlX2lmX2V4aXN0cyhmLCBwa2csIHZhcik6CisgICAgICAgIGRlZiBlbmNvZGUoc3RyKToKKyAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0ZW5jb2Rlcigic3RyaW5nX2VzY2FwZSIpCisgICAgICAgICAgICByZXR1cm4gYyhzdHIpWzBdCisKKyAgICAgICAgdmFsID0gZC5nZXRWYXIoJyVzXyVzJyAlICh2YXIsIHBrZyksIFRydWUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGYud3JpdGUoJyVzXyVzOiAlc1xuJyAlICh2YXIsIHBrZywgZW5jb2RlKHZhbCkpKQorICAgICAgICAgICAgcmV0dXJuIHZhbAorICAgICAgICB2YWwgPSBkLmdldFZhcignJXMnICUgKHZhciksIFRydWUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGYud3JpdGUoJyVzOiAlc1xuJyAlICh2YXIsIGVuY29kZSh2YWwpKSkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIHdyaXRlX2V4dHJhX3BrZ3ModmFyaWFudHMsIHBuLCBwYWNrYWdlcywgcGtnZGF0YWRpcik6CisgICAgICAgIGZvciB2YXJpYW50IGluIHZhcmlhbnRzOgorICAgICAgICAgICAgd2l0aCBvcGVuKCIlcy8lcy0lcyIgJSAocGtnZGF0YWRpciwgdmFyaWFudCwgcG4pLCAndycpIGFzIGZkOgorICAgICAgICAgICAgICAgIGZkLndyaXRlKCJQQUNLQUdFUzogJXNcbiIgJSAnICcuam9pbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAobGFtYmRhIHBrZzogJyVzLSVzJyAlICh2YXJpYW50LCBwa2cpLCBwYWNrYWdlcy5zcGxpdCgpKSkpCisKKyAgICBkZWYgd3JpdGVfZXh0cmFfcnVudGltZV9wa2dzKHZhcmlhbnRzLCBwYWNrYWdlcywgcGtnZGF0YWRpcik6CisgICAgICAgIGZvciB2YXJpYW50IGluIHZhcmlhbnRzOgorICAgICAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIG1sX3BrZyA9ICIlcy0lcyIgJSAodmFyaWFudCwgcGtnKQorICAgICAgICAgICAgICAgIHN1YmRhdGFfZmlsZSA9ICIlcy9ydW50aW1lLyVzIiAlIChwa2dkYXRhZGlyLCBtbF9wa2cpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHN1YmRhdGFfZmlsZSwgJ3cnKSBhcyBmZDoKKyAgICAgICAgICAgICAgICAgICAgZmQud3JpdGUoIlBLR18lczogJXMiICUgKG1sX3BrZywgcGtnKSkKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcignUEtHREVTVFdPUksnLCBUcnVlKQorCisgICAgIyBUYWtlIHNoYXJlZCBsb2NrIHNpbmNlIHdlJ3JlIG9ubHkgcmVhZGluZywgbm90IHdyaXRpbmcKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKGQuZXhwYW5kKCIke1BBQ0tBR0VMT0NLfSIpLCBUcnVlKQorCisgICAgZGF0YV9maWxlID0gcGtnZGF0YWRpciArIGQuZXhwYW5kKCIvJHtQTn0iICkKKyAgICBmID0gb3BlbihkYXRhX2ZpbGUsICd3JykKKyAgICBmLndyaXRlKCJQQUNLQUdFUzogJXNcbiIgJSBwYWNrYWdlcykKKyAgICBmLmNsb3NlKCkKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBnbG9iYWxfdmFyaWFudHMgPSAoZC5nZXRWYXIoJ01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgdmFyaWFudHMgPSAoZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21vZHVsZS1iYXNlJywgZCk6CisgICAgICAgIHdyaXRlX2V4dHJhX3BrZ3ModmFyaWFudHMsIHBuLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIGlmIChiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKSk6CisgICAgICAgIHdyaXRlX2V4dHJhX3BrZ3MoZ2xvYmFsX3ZhcmlhbnRzLCBwbiwgcGFja2FnZXMsIHBrZ2RhdGFkaXIpCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwa2d2YWwgPSBkLmdldFZhcignUEtHXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcGtndmFsIGlzIE5vbmU6CisgICAgICAgICAgICBwa2d2YWwgPSBwa2cKKyAgICAgICAgICAgIGQuc2V0VmFyKCdQS0dfJXMnICUgcGtnLCBwa2cpCisKKyAgICAgICAgcGtnZGVzdHBrZyA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCisgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgdG90YWxfc2l6ZSA9IDAKKyAgICAgICAgZm9yIGYgaW4gcGtnZmlsZXNbcGtnXToKKyAgICAgICAgICAgIHJlbHB0aCA9IG9zLnBhdGgucmVscGF0aChmLCBwa2dkZXN0cGtnKQorICAgICAgICAgICAgZnN0YXQgPSBvcy5sc3RhdChmKQorICAgICAgICAgICAgdG90YWxfc2l6ZSArPSBmc3RhdC5zdF9zaXplCisgICAgICAgICAgICBmaWxlc1tvcy5zZXAgKyByZWxwdGhdID0gZnN0YXQuc3Rfc2l6ZQorICAgICAgICBkLnNldFZhcignRklMRVNfSU5GTycsIGpzb24uZHVtcHMoZmlsZXMpKQorCisgICAgICAgIHN1YmRhdGFfZmlsZSA9IHBrZ2RhdGFkaXIgKyAiL3J1bnRpbWUvJXMiICUgcGtnCisgICAgICAgIHNmID0gb3BlbihzdWJkYXRhX2ZpbGUsICd3JykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQTicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUEUnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BWJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQUicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUEtHRScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUEtHVicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUEtHUicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnTElDRU5TRScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnREVTQ1JJUFRJT04nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1NVTU1BUlknKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JERVBFTkRTJykKKyAgICAgICAgcnByb3YgPSB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JQUk9WSURFUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlJFQ09NTUVORFMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JTVUdHRVNUUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlJFUExBQ0VTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSQ09ORkxJQ1RTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdTRUNUSU9OJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0cnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0FMTE9XX0VNUFRZJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAncGtnX3Bvc3RpbnN0JykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcG9zdHJtJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcHJlaW5zdCcpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAncGtnX3ByZXJtJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUlBST1ZJREVTRkxJU1QnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVTX0lORk8nKQorICAgICAgICBmb3IgZGZpbGUgaW4gKGQuZ2V0VmFyKCdGSUxFUlBST1ZJREVTRkxJU1RfJyArIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSUFJPVklERVNfJyArIGRmaWxlKQorCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVJERVBFTkRTRkxJU1QnKQorICAgICAgICBmb3IgZGZpbGUgaW4gKGQuZ2V0VmFyKCdGSUxFUkRFUEVORFNGTElTVF8nICsgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVJERVBFTkRTXycgKyBkZmlsZSkKKworICAgICAgICBzZi53cml0ZSgnJXNfJXM6ICVkXG4nICUgKCdQS0dTSVpFJywgcGtnLCB0b3RhbF9zaXplKSkKKyAgICAgICAgc2YuY2xvc2UoKQorCisgICAgICAgICMgU3ltbGlua3MgbmVlZGVkIGZvciBycHJvdmlkZXMgbG9va3VwCisgICAgICAgIGlmIHJwcm92OgorICAgICAgICAgICAgZm9yIHAgaW4gcnByb3Yuc3RyaXAoKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHN1YmRhdGFfc3ltID0gcGtnZGF0YWRpciArICIvcnVudGltZS1ycHJvdmlkZXMvJXMvJXMiICUgKHAsIHBrZykKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHN1YmRhdGFfc3ltKSkKKyAgICAgICAgICAgICAgICBvZS5wYXRoLnN5bWxpbmsoIi4uLy4uL3J1bnRpbWUvJXMiICUgcGtnLCBzdWJkYXRhX3N5bSwgVHJ1ZSkKKworICAgICAgICBhbGxvd19lbXB0eSA9IGQuZ2V0VmFyKCdBTExPV19FTVBUWV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBhbGxvd19lbXB0eToKKyAgICAgICAgICAgIGFsbG93X2VtcHR5ID0gZC5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgVHJ1ZSkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBnID0gZ2xvYignKicpCisgICAgICAgIGlmIGcgb3IgYWxsb3dfZW1wdHkgPT0gIjEiOgorICAgICAgICAgICAgIyBTeW1saW5rcyBuZWVkZWQgZm9yIHJldmVyc2UgbG9va3VwcyAoZnJvbSB0aGUgZmluYWwgcGFja2FnZSBuYW1lKQorICAgICAgICAgICAgc3ViZGF0YV9zeW0gPSBwa2dkYXRhZGlyICsgIi9ydW50aW1lLXJldmVyc2UvJXMiICUgcGtndmFsCisgICAgICAgICAgICBvZS5wYXRoLnN5bWxpbmsoIi4uL3J1bnRpbWUvJXMiICUgcGtnLCBzdWJkYXRhX3N5bSwgVHJ1ZSkKKworICAgICAgICAgICAgcGFja2FnZWRmaWxlID0gcGtnZGF0YWRpciArICcvcnVudGltZS8lcy5wYWNrYWdlZCcgJSBwa2cKKyAgICAgICAgICAgIG9wZW4ocGFja2FnZWRmaWxlLCAndycpLmNsb3NlKCkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21vZHVsZS1iYXNlJywgZCk6CisgICAgICAgIHdyaXRlX2V4dHJhX3J1bnRpbWVfcGtncyh2YXJpYW50cywgcGFja2FnZXMsIHBrZ2RhdGFkaXIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcnVudGltZV9wa2dzKGdsb2JhbF92YXJpYW50cywgcGFja2FnZXMsIHBrZ2RhdGFkaXIpCisKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorZW1pdF9wa2dkYXRhW2RpcnNdID0gIiR7UEtHREVTVFdPUkt9L3J1bnRpbWUgJHtQS0dERVNUV09SS30vcnVudGltZS1yZXZlcnNlICR7UEtHREVTVFdPUkt9L3J1bnRpbWUtcnByb3ZpZGVzIgorCitsZGNvbmZpZ19wb3N0aW5zdF9mcmFnbWVudCgpIHsKK2lmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorCWlmIFsgLXggL3NiaW4vbGRjb25maWcgXTsgdGhlbiAvc2Jpbi9sZGNvbmZpZyA7IGZpCitmaQorfQorCitSUE1ERVBTID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIC0tbWFjcm9zICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vbWFjcm9zIC0tZGVmaW5lICdfcnBtZmNfbWFnaWNfcGF0aCAke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfS9taXNjL21hZ2ljLm1nYycgLS1ycG1wb3B0ICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vcnBtcG9wdCIKKworIyBDb2xsZWN0IHBlcmZpbGUgcnVuLXRpbWUgZGVwZW5kZW5jeSBtZXRhZGF0YQorIyBPdXRwdXQ6CisjICBGSUxFUlBST1ZJREVTRkxJU1RfcGtnIC0gbGlzdCBvZiBhbGwgZmlsZXMgdy8gZGVwcworIyAgRklMRVJQUk9WSURFU19maWxlcGF0aF9wa2cgLSBwZXIgZmlsZSBkZXAKKyMKKyMgIEZJTEVSREVQRU5EU0ZMSVNUX3BrZyAtIGxpc3Qgb2YgYWxsIGZpbGVzIHcvIGRlcHMKKyMgIEZJTEVSREVQRU5EU19maWxlcGF0aF9wa2cgLSBwZXIgZmlsZSBkZXAKKworcHl0aG9uIHBhY2thZ2VfZG9fZmlsZWRlcHMoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1NLSVBfRklMRURFUFMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcnBtZGVwcyA9IGQuZ2V0VmFyKCdSUE1ERVBTJywgVHJ1ZSkKKworICAgIGRlZiBjaHVua3MoZmlsZXMsIG4pOgorICAgICAgICByZXR1cm4gW2ZpbGVzW2k6aStuXSBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZmlsZXMpLCBuKV0KKworICAgIHBrZ2xpc3QgPSBbXQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ1NLSVBfRklMRURFUFNfJyArIHBrZywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCctZGJnJykgb3IgcGtnLmVuZHN3aXRoKCctZG9jJykgb3IgcGtnLmZpbmQoJy1sb2NhbGUtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1sb2NhbGVkYXRhLScpICE9IC0xIG9yIHBrZy5maW5kKCctZ2NvbnYtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1jaGFybWFwLScpICE9IC0xIG9yIHBrZy5zdGFydHN3aXRoKCdrZXJuZWwtbW9kdWxlLScpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIGZpbGVzIGluIGNodW5rcyhwa2dmaWxlc1twa2ddLCAxMDApOgorICAgICAgICAgICAgcGtnbGlzdC5hcHBlbmQoKHBrZywgZmlsZXMsIHJwbWRlcHMsIHBrZ2Rlc3QpKQorCisgICAgcHJvY2Vzc2VkID0gb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoIHBrZ2xpc3QsIG9lLnBhY2thZ2UuZmlsZWRlcHJ1bm5lcikKKworICAgIHByb3ZpZGVzX2ZpbGVzID0ge30KKyAgICByZXF1aXJlc19maWxlcyA9IHt9CisKKyAgICBmb3IgcmVzdWx0IGluIHByb2Nlc3NlZDoKKyAgICAgICAgKHBrZywgcHJvdmlkZXMsIHJlcXVpcmVzKSA9IHJlc3VsdAorCisgICAgICAgIGlmIHBrZyBub3QgaW4gcHJvdmlkZXNfZmlsZXM6CisgICAgICAgICAgICBwcm92aWRlc19maWxlc1twa2ddID0gW10KKyAgICAgICAgaWYgcGtnIG5vdCBpbiByZXF1aXJlc19maWxlczoKKyAgICAgICAgICAgIHJlcXVpcmVzX2ZpbGVzW3BrZ10gPSBbXQorCisgICAgICAgIGZvciBmaWxlIGluIHByb3ZpZGVzOgorICAgICAgICAgICAgcHJvdmlkZXNfZmlsZXNbcGtnXS5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgIGtleSA9ICJGSUxFUlBST1ZJREVTXyIgKyBmaWxlICsgIl8iICsgcGtnCisgICAgICAgICAgICBkLnNldFZhcihrZXksICIgIi5qb2luKHByb3ZpZGVzW2ZpbGVdKSkKKworICAgICAgICBmb3IgZmlsZSBpbiByZXF1aXJlczoKKyAgICAgICAgICAgIHJlcXVpcmVzX2ZpbGVzW3BrZ10uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICBrZXkgPSAiRklMRVJERVBFTkRTXyIgKyBmaWxlICsgIl8iICsgcGtnCisgICAgICAgICAgICBkLnNldFZhcihrZXksICIgIi5qb2luKHJlcXVpcmVzW2ZpbGVdKSkKKworICAgIGZvciBwa2cgaW4gcmVxdWlyZXNfZmlsZXM6CisgICAgICAgIGQuc2V0VmFyKCJGSUxFUkRFUEVORFNGTElTVF8iICsgcGtnLCAiICIuam9pbihyZXF1aXJlc19maWxlc1twa2ddKSkKKyAgICBmb3IgcGtnIGluIHByb3ZpZGVzX2ZpbGVzOgorICAgICAgICBkLnNldFZhcigiRklMRVJQUk9WSURFU0ZMSVNUXyIgKyBwa2csICIgIi5qb2luKHByb3ZpZGVzX2ZpbGVzW3BrZ10pKQorfQorCitTSExJQlNESVJTID0gIiR7UEtHREFUQV9ESVJ9LyR7TUxQUkVGSVh9c2hsaWJzMiIKK1NITElCU1dPUktESVIgPSAiJHtQS0dERVNUV09SS30vJHtNTFBSRUZJWH1zaGxpYnMyIgorCitweXRob24gcGFja2FnZV9kb19zaGxpYnMoKSB7CisgICAgaW1wb3J0IHJlLCBwaXBlcworICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorCisgICAgZXhjbHVkZV9zaGxpYnMgPSBkLmdldFZhcignRVhDTFVERV9GUk9NX1NITElCUycsIDApCisgICAgaWYgZXhjbHVkZV9zaGxpYnM6CisgICAgICAgIGJiLm5vdGUoIm5vdCBnZW5lcmF0aW5nIHNobGlicyIpCisgICAgICAgIHJldHVybgorCisgICAgbGliX3JlID0gcmUuY29tcGlsZSgiXi4qXC5zbyIpCisgICAgbGliZGlyX3JlID0gcmUuY29tcGlsZSgiLiovJXMkIiAlIGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgdGFyZ2V0b3MgPSBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisKKyAgICB2ZXIgPSBkLmdldFZhcignUEtHVicsIFRydWUpCisgICAgaWYgbm90IHZlcjoKKyAgICAgICAgbXNnID0gIlBLR1Ygbm90IGRlZmluZWQiCisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwa2d2LXVuZGVmaW5lZCIsIG1zZywgZCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgc2hsaWJzd29ya19kaXIgPSBkLmdldFZhcignU0hMSUJTV09SS0RJUicsIFRydWUpCisKKyAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2UncmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZworICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoZC5leHBhbmQoIiR7UEFDS0FHRUxPQ0t9IikpCisKKyAgICBkZWYgbGludXhfc28oZmlsZSwgbmVlZGVkLCBzb25hbWVzLCByZW5hbWVzLCBwa2d2ZXIpOgorICAgICAgICBuZWVkc19sZGNvbmZpZyA9IEZhbHNlCisgICAgICAgIGxkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkucmVwbGFjZShwa2dkZXN0ICsgIi8iICsgcGtnLCAnJykKKyAgICAgICAgY21kID0gZC5nZXRWYXIoJ09CSkRVTVAnLCBUcnVlKSArICIgLXAgIiArIHBpcGVzLnF1b3RlKGZpbGUpICsgIiAyPi9kZXYvbnVsbCIKKyAgICAgICAgZmQgPSBvcy5wb3BlbihjbWQpCisgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKKyAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICBycGF0aCA9IFtdCisgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytSUEFUSFxzKyhbXlxzXSopIiwgbCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgcnBhdGhzID0gbS5ncm91cCgxKS5yZXBsYWNlKCIkT1JJR0lOIiwgbGRpcikuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIHJwYXRoID0gbWFwKG9zLnBhdGgubm9ybXBhdGgsIHJwYXRocykKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goIlxzK05FRURFRFxzKyhbXlxzXSopIiwgbCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgZGVwID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gbmVlZGVkW3BrZ106CisgICAgICAgICAgICAgICAgICAgIG5lZWRlZFtwa2ddLmFwcGVuZCgoZGVwLCBmaWxlLCBycGF0aCkpCisgICAgICAgICAgICBtID0gcmUubWF0Y2goIlxzK1NPTkFNRVxzKyhbXlxzXSopIiwgbCkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgdGhpc19zb25hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgcHJvdiA9ICh0aGlzX3NvbmFtZSwgbGRpciwgcGtndmVyKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwcm92IGluIHNvbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICMgaWYgbGlicmFyeSBpcyBwcml2YXRlIChvbmx5IHVzZWQgYnkgcGFja2FnZSkgdGhlbiBkbyBub3QgYnVpbGQgc2hsaWIgZm9yIGl0CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwcml2YXRlX2xpYnMgb3IgdGhpc19zb25hbWUgbm90IGluIHByaXZhdGVfbGliczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKHByb3YpCisgICAgICAgICAgICAgICAgaWYgbGliZGlyX3JlLm1hdGNoKG9zLnBhdGguZGlybmFtZShmaWxlKSk6CisgICAgICAgICAgICAgICAgICAgIG5lZWRzX2xkY29uZmlnID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIHNuYXBfc3ltbGlua3MgYW5kIChvcy5wYXRoLmJhc2VuYW1lKGZpbGUpICE9IHRoaXNfc29uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVuYW1lcy5hcHBlbmQoKGZpbGUsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZmlsZSksIHRoaXNfc29uYW1lKSkpCisgICAgICAgIHJldHVybiBuZWVkc19sZGNvbmZpZworCisgICAgZGVmIGRhcndpbl9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3Zlcik6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBsZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpLnJlcGxhY2UocGtnZGVzdCArICIvIiArIHBrZywgJycpCisKKyAgICAgICAgZGVmIGdldF9jb21iaW5hdGlvbnMoYmFzZSk6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEdpdmVuIGEgYmFzZSBsaWJyYXJ5IG5hbWUsIGZpbmQgYWxsIGNvbWJpbmF0aW9ucyBvZiB0aGlzIHNwbGl0IGJ5ICIuIiBhbmQgIi0iCisgICAgICAgICAgICAjCisgICAgICAgICAgICBjb21ib3MgPSBbXQorICAgICAgICAgICAgb3B0aW9ucyA9IGJhc2Uuc3BsaXQoIi4iKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG9wdGlvbnMpICsgMSk6CisgICAgICAgICAgICAgICAgY29tYm9zLmFwcGVuZCgiLiIuam9pbihvcHRpb25zWzA6aV0pKQorICAgICAgICAgICAgb3B0aW9ucyA9IGJhc2Uuc3BsaXQoIi0iKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG9wdGlvbnMpICsgMSk6CisgICAgICAgICAgICAgICAgY29tYm9zLmFwcGVuZCgiLSIuam9pbihvcHRpb25zWzA6aV0pKQorICAgICAgICAgICAgcmV0dXJuIGNvbWJvcworCisgICAgICAgIGlmIChmaWxlLmVuZHN3aXRoKCcuZHlsaWInKSBvciBmaWxlLmVuZHN3aXRoKCcuc28nKSkgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kZXYnKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRiZycpOgorICAgICAgICAgICAgIyBEcm9wIHN1ZmZpeAorICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZSkucnNwbGl0KCIuIiwxKVswXQorICAgICAgICAgICAgIyBGaW5kIGFsbCBjb21iaW5hdGlvbnMKKyAgICAgICAgICAgIGNvbWJvcyA9IGdldF9jb21iaW5hdGlvbnMobmFtZSkKKyAgICAgICAgICAgIGZvciBjb21ibyBpbiBjb21ib3M6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbWJvIGluIHNvbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHByb3YgPSAoY29tYm8sIGxkaXIsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICAgICAgc29uYW1lcy5hcHBlbmQocHJvdikKKyAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgnLmR5bGliJykgb3IgZmlsZS5lbmRzd2l0aCgnLnNvJyk6CisgICAgICAgICAgICBycGF0aCA9IFtdCisgICAgICAgICAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1vdG9vbCIpLCAnLWwnLCBmaWxlXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2VzZnVsbHksIHByb2Nlc3Mgc3RkZXJyIGZvciByZXN1bHRzCisgICAgICAgICAgICBpZiBwLnJldHVybmNvZGUgPT0gMDoKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbC5zdGFydHN3aXRoKCdwYXRoICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGguYXBwZW5kKGwuc3BsaXQoKVsxXSkKKworICAgICAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1vdG9vbCIpLCAnLUwnLCBmaWxlXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgICAgICBpZiBwLnJldHVybmNvZGUgPT0gMDoKKyAgICAgICAgICAgIGZvciBsIGluIGVyci5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICBsID0gbC5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGwgb3IgbC5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmICJpcyBub3QgYW4gb2JqZWN0IGZpbGUiIGluIGw6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUobC5zcGxpdCgpWzBdKS5yc3BsaXQoIi4iLCAxKVswXQorICAgICAgICAgICAgICAgIGlmIG5hbWUgYW5kIG5hbWUgbm90IGluIG5lZWRlZFtwa2ddOgorICAgICAgICAgICAgICAgICAgICAgbmVlZGVkW3BrZ10uYXBwZW5kKChuYW1lLCBmaWxlLCBbXSkpCisKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRV9TTkFQX0xJQl9TWU1MSU5LUycsIFRydWUpID09ICIxIjoKKyAgICAgICAgc25hcF9zeW1saW5rcyA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBzbmFwX3N5bWxpbmtzID0gRmFsc2UKKworICAgIGlmIChkLmdldFZhcignVVNFX0xEQ09ORklHJywgVHJ1ZSkgb3IgIjEiKSA9PSAiMSI6CisgICAgICAgIHVzZV9sZGNvbmZpZyA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICB1c2VfbGRjb25maWcgPSBGYWxzZQorCisgICAgbmVlZGVkID0ge30KKyAgICBzaGxpYl9wcm92aWRlciA9IG9lLnBhY2thZ2UucmVhZF9zaGxpYl9wcm92aWRlcnMoZCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcHJpdmF0ZV9saWJzID0gZC5nZXRWYXIoJ1BSSVZBVEVfTElCU18nICsgcGtnLCBUcnVlKSBvciBkLmdldFZhcignUFJJVkFURV9MSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgcHJpdmF0ZV9saWJzID0gcHJpdmF0ZV9saWJzLnNwbGl0KCkKKyAgICAgICAgbmVlZHNfbGRjb25maWcgPSBGYWxzZQorICAgICAgICBiYi5kZWJ1ZygyLCAiY2FsY3VsYXRpbmcgc2hsaWIgcHJvdmlkZXMgZm9yICVzIiAlIHBrZykKKworICAgICAgICBwa2d2ZXIgPSBkLmdldFZhcignUEtHVl8nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtndmVyOgorICAgICAgICAgICAgcGtndmVyID0gZC5nZXRWYXIoJ1BWXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2d2ZXI6CisgICAgICAgICAgICBwa2d2ZXIgPSB2ZXIKKworICAgICAgICBuZWVkZWRbcGtnXSA9IFtdCisgICAgICAgIHNvbmFtZXMgPSBsaXN0KCkKKyAgICAgICAgcmVuYW1lcyA9IGxpc3QoKQorICAgICAgICBmb3IgZmlsZSBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgICAgIHNvbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgdGFyZ2V0b3MgPT0gImRhcndpbiIgb3IgdGFyZ2V0b3MgPT0gImRhcndpbjgiOgorICAgICAgICAgICAgICAgICAgICBkYXJ3aW5fc28oZmlsZSwgbmVlZGVkLCBzb25hbWVzLCByZW5hbWVzLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgZWxpZiBvcy5hY2Nlc3MoZmlsZSwgb3MuWF9PSykgb3IgbGliX3JlLm1hdGNoKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBsZGNvbmZpZyA9IGxpbnV4X3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKQorICAgICAgICAgICAgICAgICAgICBuZWVkc19sZGNvbmZpZyA9IG5lZWRzX2xkY29uZmlnIG9yIGxkY29uZmlnCisgICAgICAgIGZvciAob2xkLCBuZXcpIGluIHJlbmFtZXM6CisgICAgICAgICAgICBiYi5ub3RlKCJSZW5hbWluZyAlcyB0byAlcyIgJSAob2xkLCBuZXcpKQorICAgICAgICAgICAgb3MucmVuYW1lKG9sZCwgbmV3KQorICAgICAgICAgICAgcGtnZmlsZXNbcGtnXS5yZW1vdmUob2xkKQorCSAgICAKKyAgICAgICAgc2hsaWJzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2hsaWJzd29ya19kaXIsIHBrZyArICIubGlzdCIpCisgICAgICAgIGlmIGxlbihzb25hbWVzKToKKyAgICAgICAgICAgIGZkID0gb3BlbihzaGxpYnNfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIHMgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICBpZiBzWzBdIGluIHNobGliX3Byb3ZpZGVyIGFuZCBzWzFdIGluIHNobGliX3Byb3ZpZGVyW3NbMF1dOgorICAgICAgICAgICAgICAgICAgICAob2xkX3BrZywgb2xkX3BrZ3ZlcikgPSBzaGxpYl9wcm92aWRlcltzWzBdXVtzWzFdXQorICAgICAgICAgICAgICAgICAgICBpZiBvbGRfcGtnICE9IHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzLSVzIHdhcyByZWdpc3RlcmVkIGFzIHNobGliIHByb3ZpZGVyIGZvciAlcywgY2hhbmdpbmcgaXQgdG8gJXMtJXMgYmVjYXVzZSBpdCB3YXMgYnVpbHQgbGF0ZXInICUgKG9sZF9wa2csIG9sZF9wa2d2ZXIsIHNbMF0sIHBrZywgcGtndmVyKSkKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAncmVnaXN0ZXJpbmcgJXMtJXMgYXMgc2hsaWIgcHJvdmlkZXIgZm9yICVzJyAlIChwa2csIHBrZ3Zlciwgc1swXSkpCisgICAgICAgICAgICAgICAgZmQud3JpdGUoc1swXSArICc6JyArIHNbMV0gKyAnOicgKyBzWzJdICsgJ1xuJykKKyAgICAgICAgICAgICAgICBpZiBzWzBdIG5vdCBpbiBzaGxpYl9wcm92aWRlcjoKKyAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbc1swXV0gPSB7fQorICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW3NbMF1dW3NbMV1dID0gKHBrZywgcGtndmVyKQorICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICBpZiBuZWVkc19sZGNvbmZpZyBhbmQgdXNlX2xkY29uZmlnOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyBsZGNvbmZpZyBjYWxsIHRvIHBvc3RpbnN0IGZvciAlcycgJSBwa2cpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2xkY29uZmlnX3Bvc3RpbnN0X2ZyYWdtZW50JywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKyAgICAgICAgYmIuZGVidWcoMSwgJ0xJQk5BTUVTOiBwa2cgJXMgc29uYW1lcyAlcycgJSAocGtnLCBzb25hbWVzKSkKKworICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKKyAgICBhc3N1bWVkX2xpYnMgPSBkLmdldFZhcignQVNTVU1FX1NITElCUycsIFRydWUpCisgICAgaWYgYXNzdW1lZF9saWJzOgorICAgICAgICBsaWJkaXIgPSBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkKKyAgICAgICAgZm9yIGUgaW4gYXNzdW1lZF9saWJzLnNwbGl0KCk6CisgICAgICAgICAgICBsLCBkZXBfcGtnID0gZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBsaWJfdmVyID0gTm9uZQorICAgICAgICAgICAgZGVwX3BrZyA9IGRlcF9wa2cucnNwbGl0KCJfIiwgMSkKKyAgICAgICAgICAgIGlmIGxlbihkZXBfcGtnKSA9PSAyOgorICAgICAgICAgICAgICAgIGxpYl92ZXIgPSBkZXBfcGtnWzFdCisgICAgICAgICAgICBkZXBfcGtnID0gZGVwX3BrZ1swXQorICAgICAgICAgICAgaWYgbCBub3QgaW4gc2hsaWJfcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbbF0gPSB7fQorICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbbF1bbGliZGlyXSA9IChkZXBfcGtnLCBsaWJfdmVyKQorCisgICAgbGlic2VhcmNocGF0aCA9IFtkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiYXNlX2xpYmRpcicsIFRydWUpXQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBiYi5kZWJ1ZygyLCAiY2FsY3VsYXRpbmcgc2hsaWIgcmVxdWlyZW1lbnRzIGZvciAlcyIgJSBwa2cpCisKKyAgICAgICAgZGVwcyA9IGxpc3QoKQorICAgICAgICBmb3IgbiBpbiBuZWVkZWRbcGtnXToKKyAgICAgICAgICAgICMgaWYgbiBpcyBpbiBwcml2YXRlIGxpYnJhcmllcywgZG9uJ3QgdHJ5IHRvIHNlYXJjaCBwcm92aWRlciBmb3IgaXQKKyAgICAgICAgICAgICMgdGhpcyBjb3VsZCBjYXVzZSBwcm9ibGVtIGluIGNhc2Ugc29tZSBhYmMuYmIgcHJvdmlkZXMgcHJpdmF0ZQorICAgICAgICAgICAgIyAvb3B0L2FiYy9saWIvbGliZm9vLnNvLjEgYW5kIGNvbnRhaW5zIC91c3IvYmluL2FiYyBkZXBlbmRpbmcgb24gc3lzdGVtIGxpYnJhcnkgbGliZm9vLnNvLjEKKyAgICAgICAgICAgICMgYnV0IHNraXBwaW5nIGl0IGlzIHN0aWxsIGJldHRlciBhbHRlcm5hdGl2ZSB0aGFuIHByb3ZpZGluZyBvd24KKyAgICAgICAgICAgICMgdmVyc2lvbiBhbmQgdGhlbiBhZGRpbmcgcnVudGltZSBkZXBlbmRlbmN5IGZvciB0aGUgc2FtZSBzeXN0ZW0gbGlicmFyeQorICAgICAgICAgICAgaWYgcHJpdmF0ZV9saWJzIGFuZCBuWzBdIGluIHByaXZhdGVfbGliczoKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnJXM6IERlcGVuZGVuY3kgJXMgY292ZXJlZCBieSBQUklWQVRFX0xJQlMnICUgKHBrZywgblswXSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5bMF0gaW4gc2hsaWJfcHJvdmlkZXIua2V5cygpOgorICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyX3BhdGggPSBsaXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgayBpbiBzaGxpYl9wcm92aWRlcltuWzBdXS5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyX3BhdGguYXBwZW5kKGspCisgICAgICAgICAgICAgICAgbWF0Y2ggPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gblsyXSArIHNobGliX3Byb3ZpZGVyX3BhdGggKyBsaWJzZWFyY2hwYXRoOgorICAgICAgICAgICAgICAgICAgICBpZiBwIGluIHNobGliX3Byb3ZpZGVyW25bMF1dOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBwCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICAoZGVwX3BrZywgdmVyX25lZWRlZCkgPSBzaGxpYl9wcm92aWRlcltuWzBdXVttYXRjaF0KKworICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnJXM6IERlcGVuZGVuY3kgJXMgcmVxdWlyZXMgcGFja2FnZSAlcyAodXNlZCBieSBmaWxlczogJXMpJyAlIChwa2csIG5bMF0sIGRlcF9wa2csIG5bMV0pKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcF9wa2cgPT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBpZiB2ZXJfbmVlZGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gIiVzICg+PSAlcykiICUgKGRlcF9wa2csIHZlcl9uZWVkZWQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBkZXBfcGtnCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRlcCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvdWxkbid0IGZpbmQgc2hhcmVkIGxpYnJhcnkgcHJvdmlkZXIgZm9yICVzLCB1c2VkIGJ5IGZpbGVzOiAlcyIgJSAoblswXSwgblsxXSkpCisKKyAgICAgICAgZGVwc19maWxlID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZyArICIuc2hsaWJkZXBzIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVwc19maWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShkZXBzX2ZpbGUpCisgICAgICAgIGlmIGxlbihkZXBzKToKKyAgICAgICAgICAgIGZkID0gb3BlbihkZXBzX2ZpbGUsICd3JykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBmZC53cml0ZShkZXAgKyAnXG4nKQorICAgICAgICAgICAgZmQuY2xvc2UoKQorfQorCitweXRob24gcGFja2FnZV9kb19wa2djb25maWcgKCkgeworICAgIGltcG9ydCByZQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHNobGlic19kaXJzID0gZC5nZXRWYXIoJ1NITElCU0RJUlMnLCBUcnVlKS5zcGxpdCgpCisgICAgc2hsaWJzd29ya19kaXIgPSBkLmdldFZhcignU0hMSUJTV09SS0RJUicsIFRydWUpCisKKyAgICBwY19yZSA9IHJlLmNvbXBpbGUoJyguKilcLnBjJCcpCisgICAgdmFyX3JlID0gcmUuY29tcGlsZSgnKC4qKT0oLiopJykKKyAgICBmaWVsZF9yZSA9IHJlLmNvbXBpbGUoJyguKik6ICguKiknKQorCisgICAgcGtnY29uZmlnX3Byb3ZpZGVkID0ge30KKyAgICBwa2djb25maWdfbmVlZGVkID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddID0gW10KKyAgICAgICAgcGtnY29uZmlnX25lZWRlZFtwa2ddID0gW10KKyAgICAgICAgZm9yIGZpbGUgaW4gcGtnZmlsZXNbcGtnXToKKyAgICAgICAgICAgICAgICBtID0gcGNfcmUubWF0Y2goZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBwZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKGZpbGUsIG9zLlJfT0spOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3InKQorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHZhcl9yZS5tYXRjaChsKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IG0uZ3JvdXAoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZC5zZXRWYXIobmFtZSwgcGQuZXhwYW5kKHZhbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBmaWVsZF9yZS5tYXRjaChsKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZHIgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwID0gYmIuZGF0YS5leHBhbmQobS5ncm91cCgyKSwgcGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGRyID09ICdSZXF1aXJlcyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2NvbmZpZ19uZWVkZWRbcGtnXSArPSBleHAucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKQorCisgICAgIyBUYWtlIHNoYXJlZCBsb2NrIHNpbmNlIHdlJ3JlIG9ubHkgcmVhZGluZywgbm90IHdyaXRpbmcKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKGQuZXhwYW5kKCIke1BBQ0tBR0VMT0NLfSIpKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2hsaWJzd29ya19kaXIsIHBrZyArICIucGNsaXN0IikKKyAgICAgICAgaWYgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gIT0gW106CisgICAgICAgICAgICBmID0gb3Blbihwa2dzX2ZpbGUsICd3JykKKyAgICAgICAgICAgIGZvciBwIGluIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzXG4nICUgcCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgIyBHbyBmcm9tIGxlYXN0IHRvIG1vc3Qgc3BlY2lmaWMgc2luY2UgdGhlIGxhc3Qgb25lIGZvdW5kIHdpbnMKKyAgICBmb3IgZGlyIGluIHJldmVyc2VkKHNobGlic19kaXJzKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKGRpcik6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJ14oLiopXC5wY2xpc3QkJywgZmlsZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgcGtnID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGZkID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmaWxlKSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgICAgIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddID0gW10KKyAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10uYXBwZW5kKGwucnN0cmlwKCkpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmb3IgbiBpbiBwa2djb25maWdfbmVlZGVkW3BrZ106CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgayBpbiBwa2djb25maWdfcHJvdmlkZWQua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIG4gaW4gcGtnY29uZmlnX3Byb3ZpZGVkW2tdOgorICAgICAgICAgICAgICAgICAgICBpZiBrICE9IHBrZyBhbmQgbm90IChrIGluIGRlcHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoaykKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICBpZiBmb3VuZCA9PSBGYWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJjb3VsZG4ndCBmaW5kIHBrZ2NvbmZpZyBtb2R1bGUgJyVzJyBpbiBhbnkgcGFja2FnZSIgJSBuKQorICAgICAgICBkZXBzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnICsgIi5wY2RlcHMiKQorICAgICAgICBpZiBsZW4oZGVwcyk6CisgICAgICAgICAgICBmZCA9IG9wZW4oZGVwc19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgZmQud3JpdGUoZGVwICsgJ1xuJykKKyAgICAgICAgICAgIGZkLmNsb3NlKCkKKworICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCit9CisKK2RlZiByZWFkX2xpYmRlcF9maWxlcyhkKToKKyAgICBwa2dsaWJkZXBzID0ge30KKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBwa2dsaWJkZXBzW3BrZ10gPSB7fQorICAgICAgICBmb3IgZXh0ZW5zaW9uIGluICIuc2hsaWJkZXBzIiwgIi5wY2RlcHMiLCAiLmNsaWxpYmRlcHMiOgorICAgICAgICAgICAgZGVwc2ZpbGUgPSBkLmV4cGFuZCgiJHtQS0dERVNUfS8iICsgcGtnICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgaWYgb3MuYWNjZXNzKGRlcHNmaWxlLCBvcy5SX09LKToKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4oZGVwc2ZpbGUpCisgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgbC5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGwpCisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcGtnbGliZGVwc1twa2ddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2xpYmRlcHNbcGtnXVtkZXBdID0gZGVwc1tkZXBdCisgICAgcmV0dXJuIHBrZ2xpYmRlcHMKKworcHl0aG9uIHJlYWRfc2hsaWJkZXBzICgpIHsKKyAgICBwa2dsaWJkZXBzID0gcmVhZF9saWJkZXBfZmlsZXMoZCkKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKyAgICAgICAgZm9yIGRlcCBpbiBwa2dsaWJkZXBzW3BrZ106CisgICAgICAgICAgICAjIEFkZCB0aGUgZGVwIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUsIG9yIGlmIG5vIGNvbXBhcmlzb24gaXMgc2V0CisgICAgICAgICAgICBpZiBkZXAgbm90IGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIHJkZXBlbmRzW2RlcF0gPSBbXQorICAgICAgICAgICAgZm9yIHYgaW4gcGtnbGliZGVwc1twa2ddW2RlcF06CisgICAgICAgICAgICAgICAgaWYgdiBub3QgaW4gcmRlcGVuZHNbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgcmRlcGVuZHNbZGVwXS5hcHBlbmQodikKKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorfQorCitweXRob24gcGFja2FnZV9kZXBjaGFpbnMoKSB7CisgICAgIiIiCisgICAgRm9yIGEgZ2l2ZW4gc2V0IG9mIHByZWZpeCBhbmQgcG9zdGZpeCBtb2RpZmllcnMsIG1ha2UgdGhvc2UgcGFja2FnZXMKKyAgICBSUkVDT01NRU5EUyBvbiB0aGUgY29ycmVzcG9uZGluZyBwYWNrYWdlcyBmb3IgaXRzIFJERVBFTkRTLgorCisgICAgRXhhbXBsZTogIElmIHBhY2thZ2UgQSBkZXBlbmRzIHVwb24gcGFja2FnZSBCLCBhbmQgQSdzIC5iYiBlbWl0cyBhbgorICAgIEEtZGV2IHBhY2thZ2UsIHRoaXMgd291bGQgbWFrZSBBLWRldiBSZWNvbW1lbmRzOiBCLWRldi4KKworICAgIElmIG9ubHkgb25lIG9mIGEgZ2l2ZW4gc3VmZml4IGlzIHNwZWNpZmllZCwgaXQgd2lsbCB0YWtlIHRoZSBSUkVDT01NRU5EUworICAgIGJhc2VkIG9uIHRoZSBSREVQRU5EUyBvZiAqYWxsKiBvdGhlciBwYWNrYWdlcy4gSWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuCisgICAgc3VmZml4IGlzIHNwZWNpZmllZCwgaXRzIHdpbGwgb25seSB1c2UgdGhlIFJERVBFTkRTIG9mIHRoZSBzaW5nbGUgcGFyZW50CisgICAgcGFja2FnZS4KKyAgICAiIiIKKworICAgIHBhY2thZ2VzICA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcG9zdGZpeGVzID0gKGQuZ2V0VmFyKCdERVBDSEFJTl9QT1NUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBwcmVmaXhlcyAgPSAoZC5nZXRWYXIoJ0RFUENIQUlOX1BSRScsIFRydWUpIG9yICcnKS5zcGxpdCgpCisKKyAgICBkZWYgcGtnX2FkZGRlcHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBnZXRuYW1lLCBkZXBlbmRzLCBkKToKKworICAgICAgICAjYmIubm90ZSgnZGVwZW5kcyBmb3IgJXMgaXMgJXMnICUgKGJhc2UsIGRlcGVuZHMpKQorICAgICAgICBycmVjbGlzdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUlJFQ09NTUVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCisKKyAgICAgICAgZm9yIGRlcGVuZCBpbiBkZXBlbmRzOgorICAgICAgICAgICAgaWYgZGVwZW5kLmZpbmQoJy1uYXRpdmUnKSAhPSAtMSBvciBkZXBlbmQuZmluZCgnLWNyb3NzJykgIT0gLTEgb3IgZGVwZW5kLnN0YXJ0c3dpdGgoJ3ZpcnR1YWwvJyk6CisgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlNraXBwaW5nICVzIiAlIGRlcGVuZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGV2Jyk6CisgICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5kWzotNF0KKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRiZycpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBwa2duYW1lID0gZ2V0bmFtZShkZXBlbmQsIHN1ZmZpeCkKKyAgICAgICAgICAgICNiYi5ub3RlKCJBZGRpbmcgJXMgZm9yICVzIiAlIChwa2duYW1lLCBkZXBlbmQpKQorICAgICAgICAgICAgaWYgcGtnbmFtZSBub3QgaW4gcnJlY2xpc3QgYW5kIHBrZ25hbWUgIT0gcGtnOgorICAgICAgICAgICAgICAgIHJyZWNsaXN0W3BrZ25hbWVdID0gW10KKworICAgICAgICAjYmIubm90ZSgnc2V0dGluZzogUlJFQ09NTUVORFNfJXM9JXMnICUgKHBrZywgJyAnLmpvaW4ocnJlY2xpc3QpKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJyZWNsaXN0LCBjb21tYXNlcD1GYWxzZSkpCisKKyAgICBkZWYgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBnZXRuYW1lLCByZGVwZW5kcywgZCk6CisKKyAgICAgICAgI2JiLm5vdGUoJ3JkZXBlbmRzIGZvciAlcyBpcyAlcycgJSAoYmFzZSwgcmRlcGVuZHMpKQorICAgICAgICBycmVjbGlzdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUlJFQ09NTUVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCisKKyAgICAgICAgZm9yIGRlcGVuZCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgIGlmIGRlcGVuZC5maW5kKCd2aXJ0dWFsLWxvY2FsZS0nKSAhPSAtMToKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiU2tpcHBpbmcgJXMiICUgZGVwZW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kZXYnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5kWzotNF0KKyAgICAgICAgICAgIHBrZ25hbWUgPSBnZXRuYW1lKGRlcGVuZCwgc3VmZml4KQorICAgICAgICAgICAgI2JiLm5vdGUoIkFkZGluZyAlcyBmb3IgJXMiICUgKHBrZ25hbWUsIGRlcGVuZCkpCisgICAgICAgICAgICBpZiBwa2duYW1lIG5vdCBpbiBycmVjbGlzdCBhbmQgcGtnbmFtZSAhPSBwa2c6CisgICAgICAgICAgICAgICAgcnJlY2xpc3RbcGtnbmFtZV0gPSBbXQorCisgICAgICAgICNiYi5ub3RlKCdzZXR0aW5nOiBSUkVDT01NRU5EU18lcz0lcycgJSAocGtnLCAnICcuam9pbihycmVjbGlzdCkpKQorICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJXMnICUgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocnJlY2xpc3QsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgIGRlZiBhZGRfZGVwKGxpc3QsIGRlcCk6CisgICAgICAgIGlmIGRlcCBub3QgaW4gbGlzdDoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGRlcCkKKworICAgIGRlcGVuZHMgPSBbXQorICAgIGZvciBkZXAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSkgb3IgIiIpOgorICAgICAgICBhZGRfZGVwKGRlcGVuZHMsIGRlcCkKKworICAgIHJkZXBlbmRzID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGZvciBkZXAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIik6CisgICAgICAgICAgICBhZGRfZGVwKHJkZXBlbmRzLCBkZXApCisKKyAgICAjYmIubm90ZSgncmRlcGVuZHMgaXMgJXMnICUgcmRlcGVuZHMpCisKKyAgICBkZWYgcG9zdF9nZXRuYW1lKG5hbWUsIHN1ZmZpeCk6CisgICAgICAgIHJldHVybiAnJXMlcycgJSAobmFtZSwgc3VmZml4KQorICAgIGRlZiBwcmVfZ2V0bmFtZShuYW1lLCBzdWZmaXgpOgorICAgICAgICByZXR1cm4gJyVzJXMnICUgKHN1ZmZpeCwgbmFtZSkKKworICAgIHBrZ3MgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZm9yIHBvc3RmaXggaW4gcG9zdGZpeGVzOgorICAgICAgICAgICAgaWYgcGtnLmVuZHN3aXRoKHBvc3RmaXgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwb3N0Zml4IGluIHBrZ3M6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NbcG9zdGZpeF0gPSB7fQorICAgICAgICAgICAgICAgIHBrZ3NbcG9zdGZpeF1bcGtnXSA9IChwa2dbOi1sZW4ocG9zdGZpeCldLCBwb3N0X2dldG5hbWUpCisKKyAgICAgICAgZm9yIHByZWZpeCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHByZWZpeCBpbiBwa2dzOgorICAgICAgICAgICAgICAgICAgICBwa2dzW3ByZWZpeF0gPSB7fQorICAgICAgICAgICAgICAgIHBrZ3NbcHJlZml4XVtwa2ddID0gKHBrZ1s6LWxlbihwcmVmaXgpXSwgcHJlX2dldG5hbWUpCisKKyAgICBpZiAiLWRiZyIgaW4gcGtnczoKKyAgICAgICAgcGtnbGliZGVwcyA9IHJlYWRfbGliZGVwX2ZpbGVzKGQpCisgICAgICAgIHBrZ2xpYmRlcGxpc3QgPSBbXQorICAgICAgICBmb3IgcGtnIGluIHBrZ2xpYmRlcHM6CisgICAgICAgICAgICBmb3IgayBpbiBwa2dsaWJkZXBzW3BrZ106CisgICAgICAgICAgICAgICAgYWRkX2RlcChwa2dsaWJkZXBsaXN0LCBrKQorICAgICAgICAjIEZJWE1FIHRoaXMgc2hvdWxkIG5vdCBsb29rIGF0IFBOIG9uY2UgYWxsIHRhc2sgcmVjaXBlcyBpbmhlcml0IGZyb20gdGFzay5iYmNsYXNzCisgICAgICAgIGRiZ2RlZmF1bHRkZXBzID0gKChkLmdldFZhcignREVQQ0hBSU5fREJHREVGQVVMVERFUFMnLCBUcnVlKSA9PSAnMScpIG9yIChkLmdldFZhcignUE4nLCBUcnVlKSBvciAnJykuc3RhcnRzd2l0aCgncGFja2FnZWdyb3VwLScpKQorCisgICAgZm9yIHN1ZmZpeCBpbiBwa2dzOgorICAgICAgICBmb3IgcGtnIGluIHBrZ3Nbc3VmZml4XToKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnUlJFQ09NTUVORFNfJyArIHBrZywgJ25vZGVwcnJlY3MnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgKGJhc2UsIGZ1bmMpID0gcGtnc1tzdWZmaXhdW3BrZ10KKyAgICAgICAgICAgIGlmIHN1ZmZpeCA9PSAiLWRldiI6CisgICAgICAgICAgICAgICAgcGtnX2FkZGRlcHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBmdW5jLCBkZXBlbmRzLCBkKQorICAgICAgICAgICAgZWxpZiBzdWZmaXggPT0gIi1kYmciOgorICAgICAgICAgICAgICAgIGlmIG5vdCBkYmdkZWZhdWx0ZGVwczoKKyAgICAgICAgICAgICAgICAgICAgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBmdW5jLCBwa2dsaWJkZXBsaXN0LCBkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGVuKHBrZ3Nbc3VmZml4XSkgPT0gMToKKyAgICAgICAgICAgICAgICBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIHJkZXBlbmRzLCBkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZGVwcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBiYXNlLCBUcnVlKSBvciAiIik6CisgICAgICAgICAgICAgICAgICAgIGFkZF9kZXAocmRlcHMsIGRlcCkKKyAgICAgICAgICAgICAgICBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIHJkZXBzLCBkKQorfQorCisjIFNpbmNlIGJpdGJha2UgY2FuJ3QgZGV0ZXJtaW5lIHdoaWNoIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgZHVyaW5nIHBhY2thZ2UKKyMgaXRlcmF0aW9uLCB3ZSBuZWVkIHRvIGxpc3QgdGhlbSBoZXJlOgorUEFDS0FHRVZBUlMgPSAiRklMRVMgUkRFUEVORFMgUlJFQ09NTUVORFMgU1VNTUFSWSBERVNDUklQVElPTiBSU1VHR0VTVFMgUlBST1ZJREVTIFJDT05GTElDVFMgUEtHIEFMTE9XX0VNUFRZIHBrZ19wb3N0aW5zdCBwa2dfcG9zdHJtIElOSVRTQ1JJUFRfTkFNRSBJTklUU0NSSVBUX1BBUkFNUyBERUJJQU5fTk9BVVRPTkFNRSBBTFRFUk5BVElWRSBQS0dFIFBLR1YgUEtHUiBVU0VSQUREX1BBUkFNIEdST1VQQUREX1BBUkFNIENPTkZGSUxFUyBTWVNURU1EX1NFUlZJQ0UgTElDRU5TRSBTRUNUSU9OIHBrZ19wcmVpbnN0IHBrZ19wcmVybSBSUkVQTEFDRVMgR1JPVVBNRU1TX1BBUkFNIFNZU1RFTURfQVVUT19FTkFCTEUiCisKK2RlZiBnZW5fcGFja2FnZXZhcihkKToKKyAgICByZXQgPSBbXQorICAgIHBrZ3MgPSAoZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJzID0gKGQuZ2V0VmFyKCJQQUNLQUdFVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIHAgaW4gcGtnczoKKyAgICAgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgICAgIHJldC5hcHBlbmQodiArICJfIiArIHApCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBjaGFuZ2VzIHRvIElOQ09NUEFUSUJMRV9MSUNFTlNFIHJlLXJ1biBkb19wYWNrYWdlIGZvcgorICAgICAgICAjIGFmZmVjdGVkIHJlY2lwZXMuCisgICAgICAgIHJldC5hcHBlbmQoJ0xJQ0VOU0VfRVhDTFVTSU9OLSVzJyAlIHApCisgICAgcmV0dXJuICIgIi5qb2luKHJldCkKKworUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTID89ICIiCisjIEZ1bmN0aW9ucyBmb3Igc2V0dGluZyB1cCBQS0dECitQQUNLQUdFQlVJTERQS0dEID89ICIgXAorICAgICAgICAgICAgICAgIHBlcmZvcm1fcGFja2FnZWNvcHkgXAorICAgICAgICAgICAgICAgICR7UEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTfSBcCisgICAgICAgICAgICAgICAgc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIFwKKyAgICAgICAgICAgICAgICBmaXh1cF9wZXJtcyBcCisgICAgICAgICAgICAgICAgIgorIyBGdW5jdGlvbnMgd2hpY2ggc3BsaXQgUEtHRCB1cCBpbnRvIHNlcGFyYXRlIHBhY2thZ2VzCitQQUNLQUdFU1BMSVRGVU5DUyA/PSAiIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2RvX3NwbGl0X2xvY2FsZXMgXAorICAgICAgICAgICAgICAgIHBvcHVsYXRlX3BhY2thZ2VzIgorIyBGdW5jdGlvbnMgd2hpY2ggcHJvY2VzcyBtZXRhZGF0YSBiYXNlZCBvbiBzcGxpdCBwYWNrYWdlcworUEFDS0FHRUZVTkNTICs9ICIgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZml4c3ltbGlua3MgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfbmFtZV9ob29rIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2RvX2ZpbGVkZXBzIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2RvX3NobGlicyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kb19wa2djb25maWcgXAorICAgICAgICAgICAgICAgIHJlYWRfc2hsaWJkZXBzIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2RlcGNoYWlucyBcCisgICAgICAgICAgICAgICAgZW1pdF9wa2dkYXRhIgorCitweXRob24gZG9fcGFja2FnZSAoKSB7CisgICAgIyBDaGFuZ2UgdGhlIGZvbGxvd2luZyB2ZXJzaW9uIHRvIGNhdXNlIHNzdGF0ZSB0byBpbnZhbGlkYXRlIHRoZSBwYWNrYWdlCisgICAgIyBjYWNoZS4gIFRoaXMgaXMgdXNlZnVsIGlmIGFuIGl0ZW0gdGhpcyBjbGFzcyBkZXBlbmRzIG9uIGNoYW5nZXMgaW4gYQorICAgICMgd2F5IHRoYXQgdGhlIG91dHB1dCBvZiB0aGlzIGNsYXNzIGNoYW5nZXMuICBycG1kZXBzIGlzIGEgZ29vZCBleGFtcGxlCisgICAgIyBhcyBhbnkgY2hhbmdlIHRvIHJwbWRlcHMgcmVxdWlyZXMgdGhpcyB0byBiZSByZXJ1bi4KKyAgICAjIFBBQ0tBR0VfQkJDTEFTU19WRVJTSU9OID0gIjEiCisKKyAgICAjIEluaXQgY2FjaGVkcGF0aAorICAgIGdsb2JhbCBjcGF0aAorICAgIGNwYXRoID0gb2UuY2FjaGVkcGF0aC5DYWNoZWRQYXRoKCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgU2FuaXR5IHRlc3QgdGhlIHNldHVwCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBwYWNrYWdlcyA9IChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihwYWNrYWdlcykgPCAxOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXMgdG8gYnVpbGQsIHNraXBwaW5nIGRvX3BhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKQorICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBpZiBub3Qgd29ya2RpciBvciBub3Qgb3V0ZGlyIG9yIG5vdCBkZXN0IG9yIG5vdCBkdmFyIG9yIG5vdCBwbjoKKyAgICAgICAgbXNnID0gIldPUktESVIsIERFUExPWV9ESVIsIEQsIFBOIGFuZCBQS0dEIGFsbCBtdXN0IGJlIGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidmFyLXVuZGVmaW5lZCIsIG1zZywgZCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInBhY2thZ2VfZ2V0X2F1dG9fcHIiLCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBPcHRpbWlzYXRpb25zCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIENvbnRpbnVhbGx5IGV4cGFuZGluZyBjb21wbGV4IGV4cHJlc3Npb25zIGlzIGluZWZmaWNpZW50LCBwYXJ0aWN1bGFybHkKKyAgICAjIHdoZW4gd2Ugd3JpdGUgdG8gdGhlIGRhdGFzdG9yZSBhbmQgaW52YWxpZGF0ZSB0aGUgZXhwYW5zaW9uIGNhY2hlLiBUaGlzCisgICAgIyBjb2RlIHByZS1leHBhbmRzIHNvbWUgZnJlcXVlbnRseSB1c2VkIHZhcmlhYmxlcworCisgICAgZGVmIGV4cGFuZFZhcih4LCBkKToKKyAgICAgICAgZC5zZXRWYXIoeCwgZC5nZXRWYXIoeCwgVHJ1ZSkpCisKKyAgICBmb3IgeCBpbiAnUE4nLCAnUFYnLCAnQlBOJywgJ1RBUkdFVF9TWVMnLCAnRVhURU5EUFJBVVRPJzoKKyAgICAgICAgZXhwYW5kVmFyKHgsIGQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFNldHVwIFBLR0QgKGZyb20gRCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGZvciBmIGluIChkLmdldFZhcignUEFDS0FHRUJVSUxEUEtHRCcsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgU3BsaXQgdXAgUEtHRCBpbnRvIFBLR0RFU1QKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGNwYXRoID0gb2UuY2FjaGVkcGF0aC5DYWNoZWRQYXRoKCkKKworICAgIGZvciBmIGluIChkLmdldFZhcignUEFDS0FHRVNQTElURlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFByb2Nlc3MgUEtHREVTVAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBCdWlsZCBnbG9iYWwgbGlzdCBvZiBmaWxlcyBpbiBlYWNoIHNwbGl0IHBhY2thZ2UKKyAgICBnbG9iYWwgcGtnZmlsZXMKKyAgICBwa2dmaWxlcyA9IHt9CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBwa2dmaWxlc1twa2ddID0gW10KKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKHBrZ2Rlc3QgKyAiLyIgKyBwa2cpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcGtnZmlsZXNbcGtnXS5hcHBlbmQod2Fsa3Jvb3QgKyBvcy5zZXAgKyBmaWxlKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCit9CisKK2RvX3BhY2thZ2VbZGlyc10gPSAiJHtTSExJQlNXT1JLRElSfSAke1BLR0RFU1RXT1JLfSAke0R9IgorZG9fcGFja2FnZVt2YXJkZXBzXSArPSAiJHtQQUNLQUdFQlVJTERQS0dEfSAke1BBQ0tBR0VTUExJVEZVTkNTfSAke1BBQ0tBR0VGVU5DU30gJHtAZ2VuX3BhY2thZ2V2YXIoZCl9IgorYWRkdGFzayBwYWNrYWdlIGFmdGVyIGRvX2luc3RhbGwKKworUEFDS0FHRUxPQ0sgPSAiJHtTVEFHSU5HX0RJUn0vcGFja2FnZS1vdXRwdXQubG9jayIKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlIgorZG9fcGFja2FnZVtjbGVhbmRpcnNdID0gIiR7UEtHREVTVH0gJHtQS0dERVNUV09SS30iCitkb19wYWNrYWdlW3NzdGF0ZS1wbGFpbmRpcnNdID0gIiR7UEtHRH0gJHtQS0dERVNUfSAke1BLR0RFU1RXT1JLfSIKK2RvX3BhY2thZ2Vbc3N0YXRlLWxvY2tmaWxlLXNoYXJlZF0gPSAiJHtQQUNLQUdFTE9DS30iCitkb19wYWNrYWdlX3NldHNjZW5lW2RpcnNdID0gIiR7U1RBR0lOR19ESVJ9IgorCitweXRob24gZG9fcGFja2FnZV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2Vfc2V0c2NlbmUKKworZG9fcGFja2FnZWRhdGEgKCkgeworCToKK30KKworYWRkdGFzayBwYWNrYWdlZGF0YSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fcGFja2FnZQorCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlZGF0YVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR0RFU1RXT1JLfSIKK2RvX3BhY2thZ2VkYXRhW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1BLR0RBVEFfRElSfSIKK2RvX3BhY2thZ2VkYXRhW3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWRdID0gIiR7UEFDS0FHRUxPQ0t9IgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiJHtNQUNISU5FfSIKKworcHl0aG9uIGRvX3BhY2thZ2VkYXRhX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZWRhdGFfc2V0c2NlbmUKKworIworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgcGFja2FnZSB3cml0aW5nIGNsYXNzZXMKKyMKKworZGVmIG1hcHBpbmdfcmVuYW1lX2hvb2soZCk6CisgICAgIiIiCisgICAgUmV3cml0ZSB2YXJpYWJsZXMgdG8gYWNjb3VudCBmb3IgcGFja2FnZSByZW5hbWluZyBpbiB0aGluZ3MKKyAgICBsaWtlIGRlYmlhbi5iYmNsYXNzIG9yIG1hbnVhbCBQS0cgdmFyaWFibGUgbmFtZSBjaGFuZ2VzCisgICAgIiIiCisgICAgcGtnID0gZC5nZXRWYXIoIlBLRyIsIFRydWUpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUkRFUEVORFMiLCBwa2csIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUlJFQ09NTUVORFMiLCBwa2csIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUlNVR0dFU1RTIiwgcGtnLCBkKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9kZWIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmZlYTRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9kZWIuYmJjbGFzcwpAQCAtMCwwICsxLDMzOCBAQAorIworIyBDb3B5cmlnaHQgMjAwNi0yMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAiZGViIgorCitEUEtHX0FSQ0ggPz0gIiR7VEFSR0VUX0FSQ0h9IiAKKworUEtHV1JJVEVESVJERUIgPSAiJHtXT1JLRElSfS9kZXBsb3ktZGVicyIKKworQVBUQ09ORl9UQVJHRVQgPSAiJHtXT1JLRElSfSIKKworQVBUX0FSR1MgPSAiJHtAWycnLCAnLS1uby1pbnN0YWxsLXJlY29tbWVuZHMnXVtkLmdldFZhcigiTk9fUkVDT01NRU5EQVRJT05TIiwgVHJ1ZSkgPT0gIjEiXX0iCisKKyMKKyMgaW5zdGFsbCBhIGJ1bmNoIG9mIHBhY2thZ2VzIHVzaW5nIGFwdAorIyB0aGUgZm9sbG93aW5nIHNoZWxsIHZhcmlhYmxlcyBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jOgorIyBJTlNUQUxMX1JPT1RGU19ERUIgLSBpbnN0YWxsIHJvb3QgZGlyCisjIElOU1RBTExfQkFTRUFSQ0hfREVCIC0gaW5zdGFsbCBiYXNlIGFyY2hpdGVjdXRyZQorIyBJTlNUQUxMX0FSQ0hTX0RFQiAtIGxpc3Qgb2YgYXZhaWxhYmxlIGFyY2hzCisjIElOU1RBTExfUEFDS0FHRVNfTk9STUFMX0RFQiAtIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZAorIyBJTlNUQUxMX1BBQ0tBR0VTX0FUVEVNUFRPTkxZX0RFQiAtIHBhY2thZ2VzIGF0dGVtcGVkIHRvIGJlIGluc3RhbGxlZCBvbmx5CisjIElOU1RBTExfUEFDS0FHRVNfTElOR1VBU19ERUIgLSBhZGRpdGlvbmFsIHBhY2thZ2VzIGZvciB1Y2xpYmMKKyMgSU5TVEFMTF9UQVNLX0RFQiAtIHRhc2sgbmFtZQorCitweXRob24gZG9fcGFja2FnZV9kZWIgKCkgeworICAgIGltcG9ydCByZSwgY29weQorICAgIGltcG9ydCB0ZXh0d3JhcAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIG91dGRpciA9IGQuZ2V0VmFyKCdQS0dXUklURURJUkRFQicsIFRydWUpCisgICAgaWYgbm90IG91dGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIlBLR1dSSVRFRElSREVCIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgYmIuZGVidWcoMSwgIlBBQ0tBR0VTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorCisgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiREVCX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSxvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiREVCX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIGlmIHBhY2thZ2VzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBkZWYgY2xlYW51cGNvbnRyb2wocm9vdCk6CisgICAgICAgIGZvciBwIGluIFsnQ09OVFJPTCcsICdERUJJQU4nXToKKyAgICAgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4ocm9vdCwgcCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHApOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHApCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisKKyAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShyb290ICsgIi5sb2NrIikKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UJywgJycpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1RfJXMnICUgcGtnLCByb290KQorICAgICAgICBwa2duYW1lID0gbG9jYWxkYXRhLmdldFZhcignUEtHXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ25hbWU6CisgICAgICAgICAgICBwa2duYW1lID0gcGtnCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BLRycsIHBrZ25hbWUpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgZC5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6IiArIHBrZykKKworICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocm9vdCkpCisKKyAgICAgICAgcGtnb3V0ZGlyID0gb3MucGF0aC5qb2luKG91dGRpciwgbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dvdXRkaXIpCisKKyAgICAgICAgb3MuY2hkaXIocm9vdCkKKyAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKKyAgICAgICAgZnJvbSBnbG9iIGltcG9ydCBnbG9iCisgICAgICAgIGcgPSBnbG9iKCcqJykKKyAgICAgICAgaWYgbm90IGcgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBhcmNoaXZlIGZvciAlcy0lcy0lcyIgJSAocGtnLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dWJywgVHJ1ZSksIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1InLCBUcnVlKSkpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBjb250cm9sZGlyID0gb3MucGF0aC5qb2luKHJvb3QsICdERUJJQU4nKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY29udHJvbGRpcikKKyAgICAgICAgb3MuY2htb2QoY29udHJvbGRpciwgMDc1NSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNvZGVjcworICAgICAgICAgICAgY3RybGZpbGUgPSBjb2RlY3Mub3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgJ2NvbnRyb2wnKSwgJ3cnLCAndXRmLTgnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb250cm9sIGZpbGUgZm9yIHdyaXRpbmcuIikKKworICAgICAgICBmaWVsZHMgPSBbXQorICAgICAgICBwZSA9IGQuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkKKyAgICAgICAgaWYgcGUgYW5kIGludChwZSkgPiAwOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIlZlcnNpb246ICVzOiVzLSVzXG4iLCBbJ1BLR0UnLCAnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIlZlcnNpb246ICVzLSVzXG4iLCBbJ1BLR1YnLCAnUEtHUiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIkRlc2NyaXB0aW9uOiAlc1xuIiwgWydERVNDUklQVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlNlY3Rpb246ICVzXG4iLCBbJ1NFQ1RJT04nXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJQcmlvcml0eTogJXNcbiIsIFsnUFJJT1JJVFknXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJNYWludGFpbmVyOiAlc1xuIiwgWydNQUlOVEFJTkVSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiQXJjaGl0ZWN0dXJlOiAlc1xuIiwgWydEUEtHX0FSQ0gnXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJPRTogJXNcbiIsIFsnUE4nXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJQYWNrYWdlQXJjaDogJXNcbiIsIFsnUEFDS0FHRV9BUkNIJ11dKQorICAgICAgICBpZiBkLmdldFZhcignSE9NRVBBR0UnLCBUcnVlKToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJIb21lcGFnZTogJXNcbiIsIFsnSE9NRVBBR0UnXV0pCisKKyAgICAgICAgIyBQYWNrYWdlLCBWZXJzaW9uLCBNYWludGFpbmVyLCBEZXNjcmlwdGlvbiAtIG1hbmRhdG9yeQorICAgICAgICAjIFNlY3Rpb24sIFByaW9yaXR5LCBFc3NlbnRpYWwsIEFyY2hpdGVjdHVyZSwgU291cmNlLCBEZXBlbmRzLCBQcmUtRGVwZW5kcywgUmVjb21tZW5kcywgU3VnZ2VzdHMsIENvbmZsaWN0cywgUmVwbGFjZXMsIFByb3ZpZGVzIC0gT3B0aW9uYWwKKworCisgICAgICAgIGRlZiBwdWxsRGF0YShsLCBkKToKKyAgICAgICAgICAgIGwyID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIGw6CisgICAgICAgICAgICAgICAgZGF0YSA9IGQuZ2V0VmFyKGksIFRydWUpCisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihmKQorICAgICAgICAgICAgICAgIGlmIGkgPT0gJ0RQS0dfQVJDSCcgYW5kIGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKSA9PSAnYWxsJzoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICdhbGwnCisgICAgICAgICAgICAgICAgZWxpZiBpID09ICdQQUNLQUdFX0FSQ0gnIG9yIGkgPT0gJ0RQS0dfQVJDSCc6CisgICAgICAgICAgICAgICAgICAgIyBUaGUgcGFyYW1zIGluIGRlYiBwYWNrYWdlIGNvbnRyb2wgZG9uJ3QgYWxsb3cgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgIyBgXycsIHNvIGNoYW5nZSB0aGUgYXJjaCdzIGBfJyB0byBgLScuIFN1Y2ggYXMgYHg4Nl82NCcKKyAgICAgICAgICAgICAgICAgICAjIC0tPmB4ODYtNjQnCisgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnXycsICctJykKKyAgICAgICAgICAgICAgICBsMi5hcHBlbmQoZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBsMgorCisgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQYWNrYWdlOiAlc1xuIiAlIHBrZ25hbWUpCisgICAgICAgICMgY2hlY2sgZm9yIHJlcXVpcmVkIGZpZWxkcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgKGMsIGZzKSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZnM6CisgICAgICAgICAgICAgICAgICAgICBpZiBsb2NhbGRhdGEuZ2V0VmFyKGYsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGYpCisgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGJlaGF2aW9yIGZvciBkZXNjcmlwdGlvbi4uLgorICAgICAgICAgICAgICAgIGlmICdERVNDUklQVElPTicgaW4gZnM6CisgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gbG9jYWxkYXRhLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnRGVzY3JpcHRpb246ICVzXG4nICUgdW5pY29kZShzdW1tYXJ5LCd1dGYtOCcpKQorICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgorICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXh0d3JhcC5kZWRlbnQoZGVzY3JpcHRpb24pLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgIGlmICdcXG4nIGluIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFudWFsbHkgaW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gZGVzY3JpcHRpb24uc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGxpbWl0IHRoZSB3aWR0aCB3aGVuIG1hbnVhbGx5IGluZGVudCwgYnV0IHdlIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbmVlZCB0aGUgdGV4dHdyYXAuZmlsbCgpIHRvIHNldCB0aGUgaW5pdGlhbF9pbmRlbnQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3Vic2VxdWVudF9pbmRlbnQsIHNvIHNldCBhIGxhcmdlIHdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHVuaWNvZGUodGV4dHdyYXAuZmlsbCh0LCB3aWR0aD0xMDAwMDAsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSwndXRmLTgnKSkKKyAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBBdXRvIGluZGVudAorICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHVuaWNvZGUodGV4dHdyYXAuZmlsbChkZXNjcmlwdGlvbi5zdHJpcCgpLCB3aWR0aD03NCwgaW5pdGlhbF9pbmRlbnQ9JyAnLCBzdWJzZXF1ZW50X2luZGVudD0nICcpLCd1dGYtOCcpKQorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKHVuaWNvZGUoYyAlIHR1cGxlKHB1bGxEYXRhKGZzLCBsb2NhbGRhdGEpKSwndXRmLTgnKSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJNaXNzaW5nIGZpZWxkIGZvciBkZWIgZ2VuZXJhdGlvbjogJXMiICUgdmFsdWUpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiTm9uIFVURi04IGNoYXJhY3RlcnMgZm91bmQgaW4gb25lIG9mIHRoZSBmaWVsZHMiKQorCisgICAgICAgICMgbW9yZSBmaWVsZHMKKworICAgICAgICBjdXN0b21fZmllbGRzX2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgiZGViIiwgbG9jYWxkYXRhKQorICAgICAgICBpZiBjdXN0b21fZmllbGRzX2NodW5rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUodW5pY29kZShjdXN0b21fZmllbGRzX2NodW5rKSkKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJcbiIpCisKKyAgICAgICAgbWFwcGluZ19yZW5hbWVfaG9vayhsb2NhbGRhdGEpCisKKyAgICAgICAgZGVmIGRlYmlhbl9jbXBfcmVtYXAodmFyKToKKyAgICAgICAgICAgICMgZHBrZyBkb2VzIG5vdCBhbGxvdyBmb3IgJygnIG9yICcpJyBpbiBhIGRlcGVuZGVuY3kgbmFtZQorICAgICAgICAgICAgIyByZXBsYWNlIHRoZXNlIGluc3RhbmNlcyB3aXRoICdfXycgYW5kICdfXycKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSW4gZGViaWFuICc+JyBhbmQgJzwnIGRvIG5vdCBtZWFuIHdoYXQgaXQgYXBwZWFycyB0aGV5IG1lYW4KKyAgICAgICAgICAgICMgICAnPCcgPSBsZXNzIG9yIGVxdWFsCisgICAgICAgICAgICAjICAgJz4nID0gZ3JlYXRlciBvciBlcXVhbAorICAgICAgICAgICAgIyBhZGp1c3QgdGhlc2UgdG8gdGhlICc8PCcgYW5kICc+PicgZXF1aXZhbGVudHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGZvciBkZXAgaW4gdmFyOgorICAgICAgICAgICAgICAgIGlmICcoJyBpbiBkZXA6CisgICAgICAgICAgICAgICAgICAgIG5ld2RlcCA9IGRlcC5yZXBsYWNlKCcoJywgJ19fJykKKyAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gbmV3ZGVwLnJlcGxhY2UoJyknLCAnX18nKQorICAgICAgICAgICAgICAgICAgICBpZiBuZXdkZXAgIT0gZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW25ld2RlcF0gPSB2YXJbZGVwXQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHZhcltkZXBdCisgICAgICAgICAgICBmb3IgZGVwIGluIHZhcjoKKyAgICAgICAgICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUodmFyW2RlcF0pOgorICAgICAgICAgICAgICAgICAgICBpZiAodiBvciAiIikuc3RhcnRzd2l0aCgiPCAiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcltkZXBdW2ldID0gdmFyW2RlcF1baV0ucmVwbGFjZSgiPCAiLCAiPDwgIikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAodiBvciAiIikuc3RhcnRzd2l0aCgiPiAiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcltkZXBdW2ldID0gdmFyW2RlcF1baV0ucmVwbGFjZSgiPiAiLCAiPj4gIikKKworICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSREVQRU5EUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJkZXBlbmRzKQorICAgICAgICBmb3IgZGVwIGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmICcqJyBpbiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcmRlcGVuZHNbZGVwXQorICAgICAgICBycmVjb21tZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJyZWNvbW1lbmRzKQorICAgICAgICBmb3IgZGVwIGluIHJyZWNvbW1lbmRzOgorICAgICAgICAgICAgICAgIGlmICcqJyBpbiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcnJlY29tbWVuZHNbZGVwXQorICAgICAgICByc3VnZ2VzdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlNVR0dFU1RTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnN1Z2dlc3RzKQorICAgICAgICAjIERlbGliZXJhdGVseSBkcm9wIHZlcnNpb24gaW5mb3JtYXRpb24gaGVyZSwgbm90IHdhbnRlZC9zdXBwb3J0ZWQgYnkgZGViCisgICAgICAgIHJwcm92aWRlcyA9IGRpY3QuZnJvbWtleXMoYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJQUk9WSURFUyIsIFRydWUpIG9yICIiKSwgW10pCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnByb3ZpZGVzKQorICAgICAgICBycmVwbGFjZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFUExBQ0VTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlcGxhY2VzKQorICAgICAgICByY29uZmxpY3RzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJDT05GTElDVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyY29uZmxpY3RzKQorICAgICAgICBpZiByZGVwZW5kczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJEZXBlbmRzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzKSkpCisgICAgICAgIGlmIHJzdWdnZXN0czoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJTdWdnZXN0czogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhyc3VnZ2VzdHMpKSkKKyAgICAgICAgaWYgcnJlY29tbWVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVjb21tZW5kczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjb21tZW5kcykpKQorICAgICAgICBpZiBycHJvdmlkZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUHJvdmlkZXM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnByb3ZpZGVzKSkpCisgICAgICAgIGlmIHJyZXBsYWNlczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJSZXBsYWNlczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhycmVwbGFjZXMpKSkKKyAgICAgICAgaWYgcmNvbmZsaWN0czoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJDb25mbGljdHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocmNvbmZsaWN0cykpKQorICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisKKyAgICAgICAgZm9yIHNjcmlwdCBpbiBbInByZWluc3QiLCAicG9zdGluc3QiLCAicHJlcm0iLCAicG9zdHJtIl06CisgICAgICAgICAgICBzY3JpcHR2YXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfJXMnICUgc2NyaXB0LCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHNjcmlwdHZhcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2NyaXB0dmFyID0gc2NyaXB0dmFyLnN0cmlwKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgJ3cnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiAlcyBzY3JpcHQgZmlsZSBmb3Igd3JpdGluZy4iICUgc2NyaXB0KQorCisgICAgICAgICAgICBpZiBzY3JpcHR2YXIuc3RhcnRzd2l0aCgiIyEiKToKKyAgICAgICAgICAgICAgICBwb3MgPSBzY3JpcHR2YXIuZmluZCgiXG4iKSArIDEKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcls6cG9zXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG9zID0gMAorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoIiMhL2Jpbi9zaFxuIikKKworICAgICAgICAgICAgIyBQcmV2ZW50IHRoZSBwcmVybS9wb3N0cm0gc2NyaXB0cyBmcm9tIGJlaW5nIHJ1biBkdXJpbmcgYW4gdXBncmFkZQorICAgICAgICAgICAgaWYgc2NyaXB0IGluICgncHJlcm0nLCAncG9zdHJtJyk6CisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZSgnWyAiJDEiICE9ICJ1cGdyYWRlIiBdIHx8IGV4aXQgMFxuJykKKworICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZShzY3JpcHR2YXJbcG9zOl0pCisgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKCdcbicpCisgICAgICAgICAgICBzY3JpcHRmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAwNzU1KQorCisgICAgICAgIGNvbmZmaWxlc19zdHIgPSAnICcuam9pbihnZXRfY29uZmZpbGVzKHBrZywgZCkpCisgICAgICAgIGlmIGNvbmZmaWxlc19zdHI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29uZmZpbGVzID0gb3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgJ2NvbmZmaWxlcycpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbmZmaWxlcyBmb3Igd3JpdGluZy4iKQorICAgICAgICAgICAgZm9yIGYgaW4gY29uZmZpbGVzX3N0ci5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9lLnBhdGguam9pbihyb290LCBmKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmZmaWxlcy53cml0ZSgnJXNcbicgJSBmKQorICAgICAgICAgICAgY29uZmZpbGVzLmNsb3NlKCkKKworICAgICAgICBvcy5jaGRpcihiYXNlZGlyKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIlBBVEg9XCIlc1wiIGRwa2ctZGViIC1iICVzICVzIiAlIChsb2NhbGRhdGEuZ2V0VmFyKCJQQVRIIiwgVHJ1ZSksIHJvb3QsIHBrZ291dGRpciksIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoImRwa2ctZGViIGV4ZWN1dGlvbiBmYWlsZWQiKQorCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCit9CisjIE90aGVyd2lzZSBhbGxhcmNoIHBhY2thZ2VzIG1heSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KK2RvX3BhY2thZ2VfZGViW3ZhcmRlcHNleGNsdWRlXSA9ICJPVkVSUklERVMiCisKKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIgorZG9fcGFja2FnZV93cml0ZV9kZWJbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dXUklURURJUkRFQn0iCitkb19wYWNrYWdlX3dyaXRlX2RlYltzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0RFQn0iCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2RlYl9zZXRzY2VuZSAoKSB7CisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfZGViX3NldHNjZW5lCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAnIGRwa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkZXBlbmRzJywgZGVwcykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX2RlYicsICdmYWtlcm9vdCcsICIxIikKKworICAgICMgTWFwIFRBUkdFVF9BUkNIIHRvIERlYmlhbidzIGlkZWFzIGFib3V0IGFyY2hpdGVjdHVyZXMKKyAgICBkYXJjaCA9IGQuZ2V0VmFyKCdEUEtHX0FSQ0gnLCBUcnVlKQorICAgIGlmIGRhcmNoIGluIFsieDg2IiwgImk0ODYiLCAiaTU4NiIsICJpNjg2IiwgInBlbnRpdW0iXToKKyAgICAgICAgIGQuc2V0VmFyKCdEUEtHX0FSQ0gnLCAnaTM4NicpCisgICAgZWxpZiBkYXJjaCA9PSAieDg2XzY0IjoKKyAgICAgICAgIGQuc2V0VmFyKCdEUEtHX0FSQ0gnLCAnYW1kNjQnKQorICAgIGVsaWYgZGFyY2ggPT0gImFybSI6CisgICAgICAgICBkLnNldFZhcignRFBLR19BUkNIJywgJ2FybWVsJykKK30KKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfZGViICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wYWNrYWdlX2RlYiIsIGQpCit9Citkb19wYWNrYWdlX3dyaXRlX2RlYltkaXJzXSA9ICIke1BLR1dSSVRFRElSREVCfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2NsZWFuZGlyc10gPSAiJHtQS0dXUklURURJUkRFQn0iCitkb19wYWNrYWdlX3dyaXRlX2RlYlt1bWFza10gPSAiMDIyIgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX2RlYiBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlCisKKworUEFDS0FHRUlOREVYREVQUyArPSAiZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK1BBQ0tBR0VJTkRFWERFUFMgKz0gImFwdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2lway5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDdhN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX2lway5iYmNsYXNzCkBAIC0wLDAgKzEsMjg5IEBACitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAiaXBrIgorCitJUEtHQ09ORl9UQVJHRVQgPSAiJHtXT1JLRElSfS9vcGtnLmNvbmYiCitJUEtHQ09ORl9TREsgPSAgIiR7V09SS0RJUn0vb3BrZy1zZGsuY29uZiIKKworUEtHV1JJVEVESVJJUEsgPSAiJHtXT1JLRElSfS9kZXBsb3ktaXBrcyIKKworIyBQcm9ncmFtIHRvIGJlIHVzZWQgdG8gYnVpbGQgb3BrZyBwYWNrYWdlcworT1BLR0JVSUxEQ01EID8/PSAib3BrZy1idWlsZCIKKworT1BLR19BUkdTID0gIi0tZm9yY2VfcG9zdGluc3RhbGwgLS1wcmVmZXItYXJjaC10by12ZXJzaW9uIgorT1BLR19BUkdTICs9ICIke0BbJycsICctLW5vLWluc3RhbGwtcmVjb21tZW5kcyddW2QuZ2V0VmFyKCJOT19SRUNPTU1FTkRBVElPTlMiLCBUcnVlKSA9PSAiMSJdfSIKK09QS0dfQVJHUyArPSAiJHtAWycnLCAnLS1hZGQtZXhjbHVkZSAnICsgJyAtLWFkZC1leGNsdWRlICcuam9pbigoZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScsIFRydWUpIG9yICIiKS5zcGxpdCgpKV1bKGQuZ2V0VmFyKCJQQUNLQUdFX0VYQ0xVREUiLCBUcnVlKSBvciAiIikgIT0gIiJdfSIKKworT1BLR0xJQkRJUiA9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYiIKKworcHl0aG9uIGRvX3BhY2thZ2VfaXBrICgpIHsKKyAgICBpbXBvcnQgcmUsIGNvcHkKKyAgICBpbXBvcnQgdGV4dHdyYXAKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBvdXRkaXIgPSBkLmdldFZhcignUEtHV1JJVEVESVJJUEsnLCBUcnVlKQorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXIgb3Igbm90IG91dGRpciBvciBub3QgdG1wZGlyOgorICAgICAgICBiYi5lcnJvcigiVmFyaWFibGVzIGluY29ycmVjdGx5IHNldCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBpZiBub3QgcGFja2FnZXMgb3IgcGFja2FnZXMgPT0gJyc6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlczsgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgIyBXZSdyZSBhYm91dCB0byBhZGQgbmV3IHBhY2thZ2VzIHNvIHRoZSBpbmRleCBuZWVkcyB0byBiZSBjaGVja2VkCisgICAgIyBzbyByZW1vdmUgdGhlIGFwcHJvcHJpYXRlIHN0YW1wIGZpbGUuCisgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSwgb3MuUl9PSyk6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIklQS19QQUNLQUdFX0lOREVYX0NMRUFOIikpCisKKyAgICBkZWYgY2xlYW51cGNvbnRyb2wocm9vdCk6CisgICAgICAgIGZvciBwIGluIFsnQ09OVFJPTCcsICdERUJJQU4nXToKKyAgICAgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4ocm9vdCwgcCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHApOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnBydW5lZGlyKHApCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisKKyAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShyb290ICsgIi5sb2NrIikKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UJywgJycpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1RfJXMnICUgcGtnLCByb290KQorICAgICAgICBwa2duYW1lID0gbG9jYWxkYXRhLmdldFZhcignUEtHXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ25hbWU6CisgICAgICAgICAgICBwa2duYW1lID0gcGtnCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BLRycsIHBrZ25hbWUpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgZC5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6IiArIHBrZykKKworICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocm9vdCkpCisgICAgICAgIGFyY2ggPSBsb2NhbGRhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKQorCisgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoJ0lQS19ISUVSQVJDSElDQUxfRkVFRCcsIEZhbHNlKSA9PSAiMSI6CisgICAgICAgICAgICAjIFNwcmVhZCBwYWNrYWdlcyBhY3Jvc3Mgc3ViZGlyZWN0b3JpZXMgc28gZWFjaCBpc24ndCB0b28gY3Jvd2RlZAorICAgICAgICAgICAgaWYgcGtnbmFtZS5zdGFydHN3aXRoKCdsaWInKToKKyAgICAgICAgICAgICAgICBwa2dfcHJlZml4ID0gJ2xpYicgKyBwa2duYW1lWzNdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ19wcmVmaXggPSBwa2duYW1lWzBdCisKKyAgICAgICAgICAgICMgS2VlcCAtZGJnLCAtZGV2LCAtZG9jLCAtc3RhdGljZGV2LCAtbG9jYWxlIGFuZCAtbG9jYWxlLSogcGFja2FnZXMKKyAgICAgICAgICAgICMgdG9nZXRoZXIuIFRoZXNlIHBhY2thZ2Ugc3VmZml4ZXMgYXJlIHRha2VuIGZyb20gdGhlIGRlZmluaXRpb25zIG9mCisgICAgICAgICAgICAjIFBBQ0tBR0VTIGFuZCBQQUNLQUdFU19EWU5BTUlDIGluIG1ldGEvY29uZi9iaXRiYWtlLmNvbmYKKyAgICAgICAgICAgIGlmIHBrZ25hbWVbLTQ6XSBpbiAoJy1kYmcnLCAnLWRldicsICctZG9jJyk6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOi00XQorICAgICAgICAgICAgZWxpZiBwa2duYW1lLmVuZHN3aXRoKCctc3RhdGljZGV2Jyk6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOi0xMF0KKyAgICAgICAgICAgIGVsaWYgcGtnbmFtZS5lbmRzd2l0aCgnLWxvY2FsZScpOgorICAgICAgICAgICAgICAgIHBrZ19zdWJkaXIgPSBwa2duYW1lWzotN10KKyAgICAgICAgICAgIGVsaWYgJy1sb2NhbGUtJyBpbiBwa2duYW1lOgorICAgICAgICAgICAgICAgIHBrZ19zdWJkaXIgPSBwa2duYW1lWzpwa2duYW1lLmZpbmQoJy1sb2NhbGUtJyldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ19zdWJkaXIgPSBwa2duYW1lCisKKyAgICAgICAgICAgIHBrZ291dGRpciA9ICIlcy8lcy8lcy8lcyIgJSAob3V0ZGlyLCBhcmNoLCBwa2dfcHJlZml4LCBwa2dfc3ViZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnb3V0ZGlyID0gIiVzLyVzIiAlIChvdXRkaXIsIGFyY2gpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ291dGRpcikKKyAgICAgICAgb3MuY2hkaXIocm9vdCkKKyAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKKyAgICAgICAgZnJvbSBnbG9iIGltcG9ydCBnbG9iCisgICAgICAgIGcgPSBnbG9iKCcqJykKKyAgICAgICAgaWYgbm90IGcgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBhcmNoaXZlIGZvciAlcy0lcy0lcyIgJSAocGtnLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dWJywgVHJ1ZSksIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1InLCBUcnVlKSkpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBjb250cm9sZGlyID0gb3MucGF0aC5qb2luKHJvb3QsICdDT05UUk9MJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNvbnRyb2xkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN0cmxmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgJ2NvbnRyb2wnKSwgJ3cnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb250cm9sIGZpbGUgZm9yIHdyaXRpbmcuIikKKworICAgICAgICBmaWVsZHMgPSBbXQorICAgICAgICBwZSA9IGQuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkKKyAgICAgICAgaWYgcGUgYW5kIGludChwZSkgPiAwOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIlZlcnNpb246ICVzOiVzLSVzXG4iLCBbJ1BLR0UnLCAnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIlZlcnNpb246ICVzLSVzXG4iLCBbJ1BLR1YnLCAnUEtHUiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIkRlc2NyaXB0aW9uOiAlc1xuIiwgWydERVNDUklQVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlNlY3Rpb246ICVzXG4iLCBbJ1NFQ1RJT04nXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJQcmlvcml0eTogJXNcbiIsIFsnUFJJT1JJVFknXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJNYWludGFpbmVyOiAlc1xuIiwgWydNQUlOVEFJTkVSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiTGljZW5zZTogJXNcbiIsIFsnTElDRU5TRSddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIkFyY2hpdGVjdHVyZTogJXNcbiIsIFsnUEFDS0FHRV9BUkNIJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiT0U6ICVzXG4iLCBbJ1BOJ11dKQorICAgICAgICBpZiBkLmdldFZhcignSE9NRVBBR0UnLCBUcnVlKToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJIb21lcGFnZTogJXNcbiIsIFsnSE9NRVBBR0UnXV0pCisKKyAgICAgICAgZGVmIHB1bGxEYXRhKGwsIGQpOgorICAgICAgICAgICAgbDIgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgICAgICAgICBsMi5hcHBlbmQoZC5nZXRWYXIoaSwgVHJ1ZSkpCisgICAgICAgICAgICByZXR1cm4gbDIKKworICAgICAgICBjdHJsZmlsZS53cml0ZSgiUGFja2FnZTogJXNcbiIgJSBwa2duYW1lKQorICAgICAgICAjIGNoZWNrIGZvciByZXF1aXJlZCBmaWVsZHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIChjLCBmcykgaW4gZmllbGRzOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZzOgorICAgICAgICAgICAgICAgICAgICBpZiBsb2NhbGRhdGEuZ2V0VmFyKGYsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoZikKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgYmVoYXZpb3IgZm9yIGRlc2NyaXB0aW9uLi4uCisgICAgICAgICAgICAgICAgaWYgJ0RFU0NSSVBUSU9OJyBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgorICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnRGVzY3JpcHRpb246ICVzXG4nICUgc3VtbWFyeSkKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRleHR3cmFwLmRlZGVudChkZXNjcmlwdGlvbikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiAnXFxuJyBpbiBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTWFudWFsbHkgaW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBkZXNjcmlwdGlvbi5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBsaW1pdCB0aGUgd2lkdGggd2hlbiBtYW51YWxseSBpbmRlbnQsIGJ1dCB3ZSBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbmVlZCB0aGUgdGV4dHdyYXAuZmlsbCgpIHRvIHNldCB0aGUgaW5pdGlhbF9pbmRlbnQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdWJzZXF1ZW50X2luZGVudCwgc28gc2V0IGEgbGFyZ2Ugd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB0ZXh0d3JhcC5maWxsKHQuc3RyaXAoKSwgd2lkdGg9MTAwMDAwLCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJykpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEF1dG8gaW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB0ZXh0d3JhcC5maWxsKGRlc2NyaXB0aW9uLCB3aWR0aD03NCwgaW5pdGlhbF9pbmRlbnQ9JyAnLCBzdWJzZXF1ZW50X2luZGVudD0nICcpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKGMgJSB0dXBsZShwdWxsRGF0YShmcywgbG9jYWxkYXRhKSkpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiTWlzc2luZyBmaWVsZCBmb3IgaXBrIGdlbmVyYXRpb246ICVzIiAlIHZhbHVlKQorICAgICAgICAjIG1vcmUgZmllbGRzCisKKyAgICAgICAgY3VzdG9tX2ZpZWxkc19jaHVuayA9IGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEoImlwayIsIGxvY2FsZGF0YSkKKyAgICAgICAgaWYgY3VzdG9tX2ZpZWxkc19jaHVuayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKGN1c3RvbV9maWVsZHNfY2h1bmspCisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiXG4iKQorCisgICAgICAgIG1hcHBpbmdfcmVuYW1lX2hvb2sobG9jYWxkYXRhKQorCisgICAgICAgIGRlZiBkZWJpYW5fY21wX3JlbWFwKHZhcik6CisgICAgICAgICAgICAjIEluIGRlYmlhbiAnPicgYW5kICc8JyBkbyBub3QgbWVhbiB3aGF0IGl0IGFwcGVhcnMgdGhleSBtZWFuCisgICAgICAgICAgICAjICAgJzwnID0gbGVzcyBvciBlcXVhbAorICAgICAgICAgICAgIyAgICc+JyA9IGdyZWF0ZXIgb3IgZXF1YWwKKyAgICAgICAgICAgICMgYWRqdXN0IHRoZXNlIHRvIHRoZSAnPDwnIGFuZCAnPj4nIGVxdWl2YWxlbnRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBmb3IgZGVwIGluIHZhcjoKKyAgICAgICAgICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUodmFyW2RlcF0pOgorICAgICAgICAgICAgICAgICAgICBpZiAodiBvciAiIikuc3RhcnRzd2l0aCgiPCAiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcltkZXBdW2ldID0gdmFyW2RlcF1baV0ucmVwbGFjZSgiPCAiLCAiPDwgIikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAodiBvciAiIikuc3RhcnRzd2l0aCgiPiAiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcltkZXBdW2ldID0gdmFyW2RlcF1baV0ucmVwbGFjZSgiPiAiLCAiPj4gIikKKworICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSREVQRU5EUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJkZXBlbmRzKQorICAgICAgICBycmVjb21tZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJyZWNvbW1lbmRzKQorICAgICAgICByc3VnZ2VzdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlNVR0dFU1RTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnN1Z2dlc3RzKQorICAgICAgICAjIERlbGliZXJhdGVseSBkcm9wIHZlcnNpb24gaW5mb3JtYXRpb24gaGVyZSwgbm90IHdhbnRlZC9zdXBwb3J0ZWQgYnkgaXBrCisgICAgICAgIHJwcm92aWRlcyA9IGRpY3QuZnJvbWtleXMoYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJQUk9WSURFUyIsIFRydWUpIG9yICIiKSwgW10pCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnByb3ZpZGVzKQorICAgICAgICBycmVwbGFjZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFUExBQ0VTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlcGxhY2VzKQorICAgICAgICByY29uZmxpY3RzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJDT05GTElDVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyY29uZmxpY3RzKQorCisgICAgICAgIGlmIHJkZXBlbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkRlcGVuZHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzKSkKKyAgICAgICAgaWYgcnN1Z2dlc3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlN1Z2dlc3RzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhyc3VnZ2VzdHMpKQorICAgICAgICBpZiBycmVjb21tZW5kczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJSZWNvbW1lbmRzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjb21tZW5kcykpCisgICAgICAgIGlmIHJwcm92aWRlczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQcm92aWRlczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnByb3ZpZGVzKSkKKyAgICAgICAgaWYgcnJlcGxhY2VzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlcGxhY2VzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhycmVwbGFjZXMpKQorICAgICAgICBpZiByY29uZmxpY3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkNvbmZsaWN0czogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocmNvbmZsaWN0cykpCisgICAgICAgIHNyY191cmkgPSBsb2NhbGRhdGEuZ2V0VmFyKCJTUkNfVVJJIiwgVHJ1ZSkuc3RyaXAoKSBvciAiTm9uZSIKKyAgICAgICAgaWYgc3JjX3VyaToKKyAgICAgICAgICAgIHNyY191cmkgPSByZS5zdWIoIlxzKyIsICIgIiwgc3JjX3VyaSkKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJTb3VyY2U6ICVzXG4iICUgIiAiLmpvaW4oc3JjX3VyaS5zcGxpdCgpKSkKKyAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorCisgICAgICAgIGZvciBzY3JpcHQgaW4gWyJwcmVpbnN0IiwgInBvc3RpbnN0IiwgInByZXJtIiwgInBvc3RybSJdOgorICAgICAgICAgICAgc2NyaXB0dmFyID0gbG9jYWxkYXRhLmdldFZhcigncGtnXyVzJyAlIHNjcmlwdCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBzY3JpcHR2YXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgJ3cnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiAlcyBzY3JpcHQgZmlsZSBmb3Igd3JpdGluZy4iICUgc2NyaXB0KQorICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZShzY3JpcHR2YXIpCisgICAgICAgICAgICBzY3JpcHRmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAwNzU1KQorCisgICAgICAgIGNvbmZmaWxlc19zdHIgPSAnICcuam9pbihnZXRfY29uZmZpbGVzKHBrZywgZCkpCisgICAgICAgIGlmIGNvbmZmaWxlc19zdHI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29uZmZpbGVzID0gb3Blbihvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgJ2NvbmZmaWxlcycpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbmZmaWxlcyBmb3Igd3JpdGluZy4iKQorICAgICAgICAgICAgZm9yIGYgaW4gY29uZmZpbGVzX3N0ci5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9lLnBhdGguam9pbihyb290LCBmKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmZmaWxlcy53cml0ZSgnJXNcbicgJSBmKQorICAgICAgICAgICAgY29uZmZpbGVzLmNsb3NlKCkKKworICAgICAgICBvcy5jaGRpcihiYXNlZGlyKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIlBBVEg9XCIlc1wiICVzICVzICVzIiAlIChsb2NhbGRhdGEuZ2V0VmFyKCJQQVRIIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIk9QS0dCVUlMRENNRCIsMSksIHBrZywgcGtnb3V0ZGlyKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgib3BrZy1idWlsZCBleGVjdXRpb24gZmFpbGVkIikKKworICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCit9CisjIE90aGVyd2lzZSBhbGxhcmNoIHBhY2thZ2VzIG1heSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KK2RvX3BhY2thZ2VfaXBrW3ZhcmRlcHNleGNsdWRlXSA9ICJPVkVSUklERVMiCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJJUEt9IgorZG9fcGFja2FnZV93cml0ZV9pcGtbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9JUEt9IgorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9pcGtfc2V0c2NlbmUgKCkgeworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorCisgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSwgb3MuUl9PSyk6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIklQS19QQUNLQUdFX0lOREVYX0NMRUFOIikpCisKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV93cml0ZV9pcGtfc2V0c2NlbmUKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9ICcgb3BrZy11dGlscy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RlcGVuZHMnLCBkZXBzKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2Zha2Vyb290JywgIjEiKQorfQorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9pcGsgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BhY2thZ2VfaXBrIiwgZCkKK30KK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RpcnNdID0gIiR7UEtHV1JJVEVESVJJUEt9IgorZG9fcGFja2FnZV93cml0ZV9pcGtbY2xlYW5kaXJzXSA9ICIke1BLR1dSSVRFRElSSVBLfSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW3VtYXNrXSA9ICIwMjIiCithZGR0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKKworUEFDS0FHRUlOREVYREVQUyArPSAib3BrZy11dGlscy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK1BBQ0tBR0VJTkRFWERFUFMgKz0gIm9wa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9pcGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9ycG0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmExNjM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV9ycG0uYmJjbGFzcwpAQCAtMCwwICsxLDc3NCBAQAoraW5oZXJpdCBwYWNrYWdlCisKK0lNQUdFX1BLR1RZUEUgPz0gInJwbSIKKworUlBNPSJycG0iCitSUE1CVUlMRD0icnBtYnVpbGQiCisKK1BLR1dSSVRFRElSUlBNID0gIiR7V09SS0RJUn0vZGVwbG95LXJwbXMiCisKKyMgTWFpbnRhaW5pbmcgdGhlIHBlcmZpbGUgZGVwZW5kZW5jaWVzIGhhcyBzaW5naWZpY2FudCBvdmVyaGVhZCB3aGVuIHdyaXRpbmcgdGhlIAorIyBwYWNrYWdlcy4gV2hlbiBzZXQsIHRoaXMgdmFsdWUgbWVyZ2VzIHRoZW0gZm9yIGVmZmljaWVuY3kuCitNRVJHRVBFUkZJTEVERVBTID0gIjEiCisKKyMgQ29uc3RydWN0IHBlciBmaWxlIGRlcGVuZGVuY2llcyBmaWxlCitkZWYgd3JpdGVfcnBtX3BlcmZpbGVkYXRhKHNyY25hbWUsIGQpOgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBrZ2QgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICBkZWYgZHVtcF9maWxlcmRlcHModmFybmFtZSwgb3V0ZmlsZSwgZCk6CisgICAgICAgIG91dGZpbGUud3JpdGUoIiMhL3Vzci9iaW4vZW52IHB5dGhvblxuXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCIjIERlcGVuZGVuY3kgdGFibGVcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoJ2RlcHMgPSB7XG4nKQorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBkZXBlbmRzZmxpc3Rfa2V5ID0gJ0ZJTEUnICsgdmFybmFtZSArICdGTElTVCcgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGRlcGVuZHNmbGlzdCA9IChkLmdldFZhcihkZXBlbmRzZmxpc3Rfa2V5LCBUcnVlKSBvciAiIikKKyAgICAgICAgICAgIGZvciBkZmlsZSBpbiBkZXBlbmRzZmxpc3Quc3BsaXQoKToKKyAgICAgICAgICAgICAgICBrZXkgPSAiRklMRSIgKyB2YXJuYW1lICsgIl8iICsgZGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9ucyhkLmdldFZhcihrZXksIFRydWUpIG9yICIiKQorICAgICAgICAgICAgICAgIGZpbGUgPSBkZmlsZS5yZXBsYWNlKCJAdW5kZXJzY29yZUAiLCAiXyIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQGNsb3NlYnJhY2VAIiwgIl0iKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkBvcGVuYnJhY2VAIiwgIlsiKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkB0YWJAIiwgIlx0IikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAc3BhY2VAIiwgIiAiKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkBhdEAiLCAiQCIpCisgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSgnIicgKyBwa2dkICsgZmlsZSArICciIDogIicpCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzX2RpY3Q6CisgICAgICAgICAgICAgICAgICAgIHZlciA9IGRlcGVuZHNfZGljdFtkZXBdCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBhbmQgdmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoIigiLCIiKQorICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoIikiLCIiKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZShkZXAgKyAiICIgKyB2ZXIgKyAiICIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGRlcCArICIgIikKKyAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKCciLFxuJykKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgnfVxuXG4nKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJpbXBvcnQgc3lzXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJ3aGlsZSAxOlxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkuc3RyaXAoKVxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRpZiBub3QgbGluZTpcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0XHRzeXMuZXhpdCgwKVxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRpZiBsaW5lIGluIGRlcHM6XG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdFx0cHJpbnQoZGVwc1tsaW5lXSArICdcXG4nKVxuIikKKworICAgICMgT0UtY29yZSBkZXBlbmRlbmNpZXMgYS5rLmEuIFJQTSByZXF1aXJlcworICAgIG91dGRlcGVuZHMgPSB3b3JrZGlyICsgIi8iICsgc3JjbmFtZSArICIucmVxdWlyZXMiCisKKyAgICB0cnk6CisgICAgICAgIGRlcGVuZHNmaWxlID0gb3BlbihvdXRkZXBlbmRzLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgZHVtcF9maWxlcmRlcHMoJ1JERVBFTkRTJywgZGVwZW5kc2ZpbGUsIGQpCisKKyAgICBkZXBlbmRzZmlsZS5jbG9zZSgpCisgICAgb3MuY2htb2Qob3V0ZGVwZW5kcywgMDc1NSkKKworICAgICMgT0UtY29yZSAvIFJQTSBQcm92aWRlcworICAgIG91dHByb3ZpZGVzID0gd29ya2RpciArICIvIiArIHNyY25hbWUgKyAiLnByb3ZpZGVzIgorCisgICAgdHJ5OgorICAgICAgICBwcm92aWRlc2ZpbGUgPSBvcGVuKG91dHByb3ZpZGVzLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgZHVtcF9maWxlcmRlcHMoJ1JQUk9WSURFUycsIHByb3ZpZGVzZmlsZSwgZCkKKworICAgIHByb3ZpZGVzZmlsZS5jbG9zZSgpCisgICAgb3MuY2htb2Qob3V0cHJvdmlkZXMsIDA3NTUpCisKKyAgICByZXR1cm4gKG91dGRlcGVuZHMsIG91dHByb3ZpZGVzKQorCisKK3B5dGhvbiB3cml0ZV9zcGVjZmlsZSAoKSB7CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICAjIGFwcGVuZCBpbmZvcm1hdGlvbiBmb3IgbG9ncyBhbmQgcGF0Y2hlcyB0byAlcHJlcAorICAgIGRlZiBhZGRfcHJlcChkLHNwZWNfZmlsZXNfYm90dG9tKToKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKSA9PSAnMScgYW5kIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FyY2hpdmVyJywgZCk6CisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJyUlcHJlcCAtbiAlcycgJSBkLmdldFZhcignUE4nLCBUcnVlKSApCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJyVzJyAlICJlY2hvIFwiaW5jbHVkZSBsb2dzIGFuZCBwYXRjaGVzLCBQbGVhc2UgY2hlY2sgdGhlbSBpbiBTT1VSQ0VTXCIiKQorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCcnKQorCisgICAgIyBhcHBlbmQgdGhlIG5hbWUgb2YgdGFyYmFsbCB0byBrZXkgd29yZCAnU09VUkNFJyBpbiB4eHguc3BlYy4KKyAgICBkZWYgdGFpbF9zb3VyY2UoZCk6CisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkgPT0gJzEnIGFuZCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhcmNoaXZlcicsIGQpOgorICAgICAgICAgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJfb3V0ZGlyKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNvdXJjZV9saXN0ID0gb3MubGlzdGRpcihhcl9vdXRkaXIpCisgICAgICAgICAgICBzb3VyY2VfbnVtYmVyID0gMAorICAgICAgICAgICAgZm9yIHNvdXJjZSBpbiBzb3VyY2VfbGlzdDoKKyAgICAgICAgICAgICAgICAjIFRoZSBycG1idWlsZCBkb2Vzbid0IG5lZWQgdGhlIHJvb3QgcGVybWlzc2lvbiwgYnV0IGl0IG5lZWRzCisgICAgICAgICAgICAgICAgIyB0byBrbm93IHRoZSBmaWxlJ3MgdXNlciBhbmQgZ3JvdXAgbmFtZSwgdGhlIG9ubHkgdXNlciBhbmQKKyAgICAgICAgICAgICAgICAjIGdyb3VwIGluIGZha2Vyb290IGlzICJyb290IiB3aGVuIHdvcmtpbmcgaW4gZmFrZXJvb3QuCisgICAgICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsIHNvdXJjZSkKKyAgICAgICAgICAgICAgICBvcy5jaG93bihmLCAwLCAwKQorICAgICAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnU291cmNlJXM6ICVzJyAlIChzb3VyY2VfbnVtYmVyLCBzb3VyY2UpKQorICAgICAgICAgICAgICAgIHNvdXJjZV9udW1iZXIgKz0gMQorICAgICMgV2UgbmVlZCBhIHNpbXBsZSB3YXkgdG8gcmVtb3ZlIHRoZSBNTFBSRUZJWCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUsCisgICAgIyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4uLgorICAgIGRlZiBzdHJpcF9tdWx0aWxpYihuYW1lLCBkKToKKyAgICAgICAgbXVsdGlsaWJzID0gZC5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBleHQgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgICAgICBlZXh0ID0gZXh0LnNwbGl0KCc6JykKKyAgICAgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJyBhbmQgbmFtZSBhbmQgbmFtZS5maW5kKGVleHRbMV0gKyAnLScpID49IDA6CisgICAgICAgICAgICAgICAgbmFtZSA9ICIiLmpvaW4obmFtZS5zcGxpdChlZXh0WzFdICsgJy0nKSkKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIGRlZiBzdHJpcF9tdWx0aWxpYl9kZXBzKGRlcHMsIGQpOgorICAgICAgICBkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcHMgb3IgIiIpCisgICAgICAgIG5ld2RlcHMgPSB7fQorICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHM6CisgICAgICAgICAgICBuZXdkZXBzW3N0cmlwX211bHRpbGliKGRlcCwgZCldID0gZGVwZW5kc1tkZXBdCisgICAgICAgIHJldHVybiBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwcykKKworIyAgICAgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorIyAgICAgICAgaWYgbWwgYW5kIG5hbWUgYW5kIGxlbihtbCkgIT0gMCBhbmQgbmFtZS5maW5kKG1sKSA9PSAwOgorIyAgICAgICAgICAgIHJldHVybiBtbC5qb2luKG5hbWUuc3BsaXQobWwsIDEpWzE6XSkKKyMgICAgICAgIHJldHVybiBuYW1lCisKKyAgICAjIEluIFJQTSwgZGVwZW5kZW5jaWVzIGFyZSBvZiB0aGUgZm9ybWF0OiBwa2cgPD49IEVwb2NoOlZlcnNpb24tUmVsZWFzZQorICAgICMgVGhpcyBmb3JtYXQgaXMgc2ltaWxhciB0byBPRSwgaG93ZXZlciB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zIG9uIHRoZQorICAgICMgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSBpbiBhIGZpZWxkLiAgSW4gdGhlIFZlcnNpb24gZmllbGQsICItIgorICAgICMgY2hhcmFjdGVycyBhcmUgbm90IGFsbG93ZWQuICAiLSIgaXMgYWxsb3dlZCBpbiB0aGUgUmVsZWFzZSBmaWVsZC4KKyAgICAjCisgICAgIyBXZSB0cmFuc2xhdGUgdGhlICItIiBpbiB0aGUgdmVyc2lvbiB0byBhICIrIiwgYnkgbG9hZGluZyB0aGUgUEtHVgorICAgICMgZnJvbSB0aGUgZGVwZW5kZW50IHJlY2lwZSwgcmVwbGFjaW5nIHRoZSAtIHdpdGggYSArLCBhbmQgdGhlbiB1c2luZworICAgICMgdGhhdCB2YWx1ZSB0byBkbyBhIHJlcGxhY2UgaW5zaWRlIG9mIHRoaXMgcmVjaXBlJ3MgZGVwZW5kZW5jaWVzLgorICAgICMgVGhpcyBwcmVzZXJ2ZXMgdGhlICItIiBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdmVyc2lvbiBhbmQgcmVsZWFzZSwgYXMKKyAgICAjIHdlbGwgYXMgYW55ICItIiBjaGFyYWN0ZXJzIGluc2lkZSBvZiB0aGUgcmVsZWFzZSBmaWVsZC4KKyAgICAjCisgICAgIyBBbGwgb2YgdGhpcyBoYXMgdG8gaGFwcGVuIEJFRk9SRSB0aGUgbWFwcGluZ19yZW5hbWVfaG9vayBhcworICAgICMgYWZ0ZXIgcmVuYW1pbmcgd2UgY2Fubm90IGxvb2sgdXAgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgcGFja2FnZWRhdGEKKyAgICAjIHN0b3JlLgorICAgIGRlZiB0cmFuc2xhdGVfdmVycyh2YXJuYW1lLCBkKToKKyAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwZW5kcykKKyAgICAgICAgICAgIG5ld2RlcHNfZGljdCA9IHt9CisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICB2ZXJsaXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgdmVyIGluIGRlcGVuZHNfZGljdFtkZXBdOgorICAgICAgICAgICAgICAgICAgICBpZiAnLScgaW4gdmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgc3ViZCA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YV9kaWN0KGRlcCwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdQS0dWJyBpbiBzdWJkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB2ID0gc3ViZFsnUFYnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3YgPSBzdWJkWydQS0dWJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBwdiA9IHBrZ3YucmVwbGFjZSgnLScsICcrJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZShwdiwgcmVwcHYpLnJlcGxhY2UocGtndiwgcmVwcHYpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnUEtHUicgaW4gc3ViZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSBQS0dSIHJhdGhlciB0aGFuIFBSIGluIHZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByID0gJy0nICsgc3ViZFsnUFInXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3IgPSAnLScgKyBzdWJkWydQS0dSJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2dyIG5vdCBpbiB2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKHByLCBwa2dyKQorICAgICAgICAgICAgICAgICAgICAgICAgdmVybGlzdC5hcHBlbmQodmVyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVybGlzdC5hcHBlbmQodmVyKQorICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0gdmVybGlzdAorICAgICAgICAgICAgZGVwZW5kcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzX2RpY3QpCisgICAgICAgICAgICBkLnNldFZhcih2YXJuYW1lLCBkZXBlbmRzLnN0cmlwKCkpCisKKyAgICAjIFdlIG5lZWQgdG8gY2hhbmdlIHRoZSBzdHlsZSB0aGUgZGVwZW5kZW5jeSBmcm9tIEJCIHRvIFJQTQorICAgICMgVGhpcyBuZWVkcyB0byBoYXBwZW4gQUZURVIgdGhlIG1hcHBpbmdfcmVuYW1lX2hvb2sKKyAgICBkZWYgcHJpbnRfZGVwcyh2YXJpYWJsZSwgdGFnLCBhcnJheSwgZCk6CisgICAgICAgIGRlcGVuZHMgPSB2YXJpYWJsZQorICAgICAgICBpZiBkZXBlbmRzOgorICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcGVuZHMpCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICBmb3IgdmVyIGluIGRlcGVuZHNfZGljdFtkZXBdOgorICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgnKCcsICcnKQorICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgnKScsICcnKQorICAgICAgICAgICAgICAgICAgICBhcnJheS5hcHBlbmQoIiVzOiAlcyAlcyIgJSAodGFnLCBkZXAsIHZlcikpCisgICAgICAgICAgICAgICAgaWYgbm90IGxlbihkZXBlbmRzX2RpY3RbZGVwXSk6CisgICAgICAgICAgICAgICAgICAgIGFycmF5LmFwcGVuZCgiJXM6ICVzIiAlICh0YWcsIGRlcCkpCisKKyAgICBkZWYgd2Fsa19maWxlcyh3YWxrcGF0aCwgdGFyZ2V0LCBjb25mZmlsZXMsIGRpcmZpbGVzKToKKyAgICAgICAgIyBXZSBjYW4gcmFjZSBhZ2FpbnN0IHRoZSBpcGsvZGViIGJhY2tlbmRzIHdoaWNoIGNyZWF0ZSBDT05UUk9MIG9yIERFQklBTiBkaXJlY3RvcmllcworICAgICAgICAjIHdoZW4gcGFja2FnaW5nLiBXZSBqdXN0IGlnbm9yZSB0aGVzZSBmaWxlcyB3aGljaCBhcmUgY3JlYXRlZCBpbiAKKyAgICAgICAgIyBwYWNrYWdlcy1zcGxpdC8gYW5kIG5vdCBwYWNrYWdlLworICAgICAgICAjIFdlIGhhdmUgdGhlIG9kZCBzaXR1YXRpb24gd2hlcmUgdGhlIENPTlRST0wvREVCSUFOIGRpcmVjdG9yeSBjYW4gYmUgcmVtb3ZlZCBpbiB0aGUgbWlkZGxlIG9mCisgICAgICAgICMgb2YgdGhlIHdhbGssIHRoZSBpc2RpcigpIHRlc3Qgd291bGQgdGhlbiBmYWlsIGFuZCB0aGUgd2FsayBjb2RlIHdvdWxkIGFzc3VtZSBpdHMgYSBmaWxlCisgICAgICAgICMgaGVuY2Ugd2UgY2hlY2sgZm9yIHRoZSBuYW1lcyBpbiBmaWxlcyB0b28uCisgICAgICAgIGZvciByb290cGF0aCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3YWxrcGF0aCk6CisgICAgICAgICAgICBwYXRoID0gcm9vdHBhdGgucmVwbGFjZSh3YWxrcGF0aCwgIiIpCisgICAgICAgICAgICBpZiBwYXRoLmVuZHN3aXRoKCJERUJJQU4iKSBvciBwYXRoLmVuZHN3aXRoKCJDT05UUk9MIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIiUiLCAiJSUlJSUlJSUiKQorCisgICAgICAgICAgICAjIFRyZWF0IGFsbCBzeW1saW5rcyB0byBkaXJlY3RvcmllcyBhcyBub3JtYWwgZmlsZXMuCisgICAgICAgICAgICAjIG9zLndhbGsoKSBsaXN0cyB0aGVtIGFzIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgZGVmIG1vdmVfdG9fZmlsZXMoZGlyKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhvcy5wYXRoLmpvaW4ocm9vdHBhdGgsIGRpcikpOgorICAgICAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQoZGlyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGlyc1s6XSA9IFtkaXIgZm9yIGRpciBpbiBkaXJzIGlmIG5vdCBtb3ZlX3RvX2ZpbGVzKGRpcildCisKKyAgICAgICAgICAgICMgRGlyZWN0b3J5IGhhbmRsaW5nIGNhbiBoYXBwZW4gaW4gdHdvIHdheXMsIGVpdGhlciBESVJGSUxFUyBpcyBub3Qgc2V0IGF0IGFsbAorICAgICAgICAgICAgIyBpbiB3aGljaCBjYXNlIHdlIGZhbGwgYmFjayB0byB0aGUgb2xkZXIgYmVoYXZpb3VyIG9mIHBhY2thZ2VzIG93bmluZyBhbGwgdGhlaXIKKyAgICAgICAgICAgICMgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGlmIGRpcmZpbGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBkaXIgPT0gIkNPTlRST0wiIG9yIGRpciA9PSAiREVCSUFOIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGRpciA9IGRpci5yZXBsYWNlKCIlIiwgIiUlJSUlJSUlIikKKyAgICAgICAgICAgICAgICAgICAgIyBBbGwgcGFja2FnZXMgb3duIHRoZSBkaXJlY3RvcmllcyB0aGVpciBmaWxlcyBhcmUgaW4uLi4KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWRpciAiJyArIHBhdGggKyAnLycgKyBkaXIgKyAnIicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgcGFja2FnZXMgb3duIG9ubHkgZW1wdHkgZGlyZWN0b3JpZXMgb3IgZXhwbGljdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgcHJldmVudCB0aGUgb3ZlcmxhcHBpbmcgb2Ygc2VjdXJpdHkgcGVybWlzc2lvbi4KKyAgICAgICAgICAgICAgICBpZiBwYXRoIGFuZCBub3QgZmlsZXMgYW5kIG5vdCBkaXJzOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclZGlyICInICsgcGF0aCArICciJykKKyAgICAgICAgICAgICAgICBlbGlmIHBhdGggYW5kIHBhdGggaW4gZGlyZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVkaXIgIicgKyBwYXRoICsgJyInKQorCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmaWxlID09ICJDT05UUk9MIiBvciBmaWxlID09ICJERUJJQU4iOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIiUiLCAiJSUlJSUlJSUiKQorICAgICAgICAgICAgICAgIGlmIGNvbmZmaWxlcy5jb3VudChwYXRoICsgJy8nICsgZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVjb25maWcgIicgKyBwYXRoICsgJy8nICsgZmlsZSArICciJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCciJyArIHBhdGggKyAnLycgKyBmaWxlICsgJyInKQorCisgICAgIyBQcmV2ZW50IHRoZSBwcmVybS9wb3N0cm0gc2NyaXB0cyBmcm9tIGJlaW5nIHJ1biBkdXJpbmcgYW4gdXBncmFkZQorICAgIGRlZiB3cmFwX3VuaW5zdGFsbChzY3JpcHR2YXIpOgorICAgICAgICBzY3IgPSBzY3JpcHR2YXIuc3RyaXAoKQorICAgICAgICBpZiBzY3Iuc3RhcnRzd2l0aCgiIyEiKToKKyAgICAgICAgICAgIHBvcyA9IHNjci5maW5kKCJcbiIpICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG9zID0gMAorICAgICAgICBzY3IgPSBzY3JbOnBvc10gKyAnaWYgWyAiJDEiID0gIjAiIF0gOyB0aGVuXG4nICsgc2NyW3BvczpdICsgJ1xuZmknCisgICAgICAgIHJldHVybiBzY3IKKworICAgIGRlZiBnZXRfcGVyZmlsZSh2YXJuYW1lLCBwa2csIGQpOgorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZGVwZW5kc2ZsaXN0X2tleSA9ICdGSUxFJyArIHZhcm5hbWUgKyAnRkxJU1QnICsgIl8iICsgcGtnCisgICAgICAgIGRlcGVuZHNmbGlzdCA9IChkLmdldFZhcihkZXBlbmRzZmxpc3Rfa2V5LCBUcnVlKSBvciAiIikKKyAgICAgICAgZm9yIGRmaWxlIGluIGRlcGVuZHNmbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAga2V5ID0gIkZJTEUiICsgdmFybmFtZSArICJfIiArIGRmaWxlICsgIl8iICsgcGtnCisgICAgICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICAgICAgaWYgZGVwZW5kczoKKyAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkZXBlbmRzKQorICAgICAgICByZXR1cm4gIiAiLmpvaW4oZGVwcykKKworICAgIGRlZiBhcHBlbmRfZGVzY3JpcHRpb24oc3BlY19wcmVhbWJsZSwgdGV4dCk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGhlIGRlc2NyaXB0aW9uIHRvIHRoZSBzcGVjIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgdGV4dHdyYXAKKyAgICAgICAgZGVkZW50X3RleHQgPSB0ZXh0d3JhcC5kZWRlbnQodGV4dCkuc3RyaXAoKQorICAgICAgICAjIEJpdGJha2Ugc2F2ZXMgIlxuIiBhcyAiXFxuIgorICAgICAgICBpZiAnXFxuJyBpbiBkZWRlbnRfdGV4dDoKKyAgICAgICAgICAgIGZvciB0IGluIGRlZGVudF90ZXh0LnNwbGl0KCdcXG4nKToKKyAgICAgICAgICAgICAgICBzcGVjX3ByZWFtYmxlLmFwcGVuZCh0LnN0cmlwKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlLmFwcGVuZCgnJXMnICUgdGV4dHdyYXAuZmlsbChkZWRlbnRfdGV4dCwgd2lkdGg9NzUpKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAnJzoKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGlmIG5vdCBwa2dkZXN0OgorICAgICAgICBiYi5mYXRhbCgiTm8gUEtHREVTVCIpCisKKyAgICBvdXRzcGVjZmlsZSA9IGQuZ2V0VmFyKCdPVVRTUEVDRklMRScsIFRydWUpCisgICAgaWYgbm90IG91dHNwZWNmaWxlOgorICAgICAgICBiYi5mYXRhbCgiTm8gT1VUU1BFQ0ZJTEUiKQorCisgICAgIyBDb25zdHJ1Y3QgdGhlIFNQRUMgZmlsZS4uLgorICAgIHNyY25hbWUgICAgPSBzdHJpcF9tdWx0aWxpYihkLmdldFZhcignUE4nLCBUcnVlKSwgZCkKKyAgICBzcmNzdW1tYXJ5ID0gKGQuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iKQorICAgIHNyY3ZlcnNpb24gPSBkLmdldFZhcignUEtHVicsIFRydWUpLnJlcGxhY2UoJy0nLCAnKycpCisgICAgc3JjcmVsZWFzZSA9IGQuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkKKyAgICBzcmNlcG9jaCAgID0gKGQuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkgb3IgIiIpCisgICAgc3JjbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBzcmNzZWN0aW9uID0gZC5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgIHNyY21haW50YWluZXIgID0gZC5nZXRWYXIoJ01BSU5UQUlORVInLCBUcnVlKQorICAgIHNyY2hvbWVwYWdlICAgID0gZC5nZXRWYXIoJ0hPTUVQQUdFJywgVHJ1ZSkKKyAgICBzcmNkZXNjcmlwdGlvbiA9IGQuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgorICAgIHNyY2N1c3RvbXRhZ3NjaHVuayA9IGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEoInJwbSIsIGQpCisKKyAgICBzcmNkZXBlbmRzICAgICA9IHN0cmlwX211bHRpbGliX2RlcHMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSwgZCkKKyAgICBzcmNyZGVwZW5kcyAgICA9IFtdCisgICAgc3JjcnJlY29tbWVuZHMgPSBbXQorICAgIHNyY3JzdWdnZXN0cyAgID0gW10KKyAgICBzcmNycHJvdmlkZXMgICA9IFtdCisgICAgc3JjcnJlcGxhY2VzICAgPSBbXQorICAgIHNyY3Jjb25mbGljdHMgID0gW10KKyAgICBzcmNyb2Jzb2xldGVzICA9IFtdCisKKyAgICBzcmNycHJlaW5zdCAgPSBbXQorICAgIHNyY3Jwb3N0aW5zdCA9IFtdCisgICAgc3JjcnByZXJtICAgID0gW10KKyAgICBzcmNycG9zdHJtICAgPSBbXQorCisgICAgc3BlY19wcmVhbWJsZV90b3AgPSBbXQorICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tID0gW10KKworICAgIHNwZWNfc2NyaXB0bGV0c190b3AgPSBbXQorICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20gPSBbXQorCisgICAgc3BlY19maWxlc190b3AgPSBbXQorICAgIHNwZWNfZmlsZXNfYm90dG9tID0gW10KKworICAgIHBlcmZpbGVkZXBzID0gKGQuZ2V0VmFyKCJNRVJHRVBFUkZJTEVERVBTIiwgVHJ1ZSkgb3IgIjAiKSA9PSAiMCIKKyAgICBleHRyYV9wa2dkYXRhID0gKGQuZ2V0VmFyKCJSUE1fRVhUUkFfUEtHREFUQSIsIFRydWUpIG9yICIwIikgPT0gIjEiCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UJywgJycpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1RfJXMnICUgcGtnLCByb290KQorICAgICAgICBwa2duYW1lID0gbG9jYWxkYXRhLmdldFZhcignUEtHXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ25hbWU6CisgICAgICAgICAgICBwa2duYW1lID0gcGtnCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BLRycsIHBrZ25hbWUpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgZC5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6IiArIHBrZykKKworICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBjb25mZmlsZXMgPSBnZXRfY29uZmZpbGVzKHBrZywgZCkKKyAgICAgICAgZGlyZmlsZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdESVJGSUxFUycsIFRydWUpCisgICAgICAgIGlmIGRpcmZpbGVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGlyZmlsZXMgPSBkaXJmaWxlcy5zcGxpdCgpCisKKyAgICAgICAgc3BsaXRuYW1lICAgID0gc3RyaXBfbXVsdGlsaWIocGtnbmFtZSwgZCkKKworICAgICAgICBzcGxpdHN1bW1hcnkgPSAobG9jYWxkYXRhLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iKQorICAgICAgICBzcGxpdHZlcnNpb24gPSAobG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJysnKQorICAgICAgICBzcGxpdHJlbGVhc2UgPSAobG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpIG9yICIiKQorICAgICAgICBzcGxpdGVwb2NoICAgPSAobG9jYWxkYXRhLmdldFZhcignUEtHRScsIFRydWUpIG9yICIiKQorICAgICAgICBzcGxpdGxpY2Vuc2UgPSAobG9jYWxkYXRhLmdldFZhcignTElDRU5TRScsIFRydWUpIG9yICIiKQorICAgICAgICBzcGxpdHNlY3Rpb24gPSAobG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpIG9yICIiKQorICAgICAgICBzcGxpdGRlc2NyaXB0aW9uID0gKGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iKQorICAgICAgICBzcGxpdGN1c3RvbXRhZ3NjaHVuayA9IGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEoInJwbSIsIGxvY2FsZGF0YSkKKworICAgICAgICB0cmFuc2xhdGVfdmVycygnUkRFUEVORFMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSUkVDT01NRU5EUycsIGxvY2FsZGF0YSkKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JTVUdHRVNUUycsIGxvY2FsZGF0YSkKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JQUk9WSURFUycsIGxvY2FsZGF0YSkKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JSRVBMQUNFUycsIGxvY2FsZGF0YSkKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JDT05GTElDVFMnLCBsb2NhbGRhdGEpCisKKyAgICAgICAgIyBNYXAgdGhlIGRlcGVuZGVuY2llcyBpbnRvIHRoZWlyIGZpbmFsIGZvcm0KKyAgICAgICAgbWFwcGluZ19yZW5hbWVfaG9vayhsb2NhbGRhdGEpCisKKyAgICAgICAgc3BsaXRyZGVwZW5kcyAgICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUkRFUEVORFMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRycmVjb21tZW5kcyA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUlJFQ09NTUVORFMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRyc3VnZ2VzdHMgICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUlNVR0dFU1RTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnByb3ZpZGVzICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JQUk9WSURFUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJyZXBsYWNlcyAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSUkVQTEFDRVMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRyY29uZmxpY3RzICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUkNPTkZMSUNUUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJvYnNvbGV0ZXMgID0gW10KKworICAgICAgICBzcGxpdHJwcmVpbnN0ICA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ19wcmVpbnN0JywgVHJ1ZSkKKyAgICAgICAgc3BsaXRycG9zdGluc3QgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBzcGxpdHJwcmVybSAgICA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ19wcmVybScsIFRydWUpCisgICAgICAgIHNwbGl0cnBvc3RybSAgID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisKKworICAgICAgICBpZiBub3QgcGVyZmlsZWRlcHM6CisgICAgICAgICAgICAjIEFkZCBpbiBzdW1tYXJ5IG9mIHBlciBmaWxlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgc3BsaXRyZGVwZW5kcyA9IHNwbGl0cmRlcGVuZHMgKyAiICIgKyBnZXRfcGVyZmlsZSgnUkRFUEVORFMnLCBwa2csIGQpCisgICAgICAgICAgICBzcGxpdHJwcm92aWRlcyA9IHNwbGl0cnByb3ZpZGVzICsgIiAiICsgZ2V0X3BlcmZpbGUoJ1JQUk9WSURFUycsIHBrZywgZCkKKworICAgICAgICAjIEdhdGhlciBzcGVjaWFsIHNyYy9maXJzdCBwYWNrYWdlIGRhdGEKKyAgICAgICAgaWYgc3JjbmFtZSA9PSBzcGxpdG5hbWU6CisgICAgICAgICAgICBzcmNyZGVwZW5kcyAgICA9IHNwbGl0cmRlcGVuZHMKKyAgICAgICAgICAgIHNyY3JyZWNvbW1lbmRzID0gc3BsaXRycmVjb21tZW5kcworICAgICAgICAgICAgc3JjcnN1Z2dlc3RzICAgPSBzcGxpdHJzdWdnZXN0cworICAgICAgICAgICAgc3JjcnByb3ZpZGVzICAgPSBzcGxpdHJwcm92aWRlcworICAgICAgICAgICAgc3JjcnJlcGxhY2VzICAgPSBzcGxpdHJyZXBsYWNlcworICAgICAgICAgICAgc3JjcmNvbmZsaWN0cyAgPSBzcGxpdHJjb25mbGljdHMKKworICAgICAgICAgICAgc3JjcnByZWluc3QgICAgPSBzcGxpdHJwcmVpbnN0CisgICAgICAgICAgICBzcmNycG9zdGluc3QgICA9IHNwbGl0cnBvc3RpbnN0CisgICAgICAgICAgICBzcmNycHJlcm0gICAgICA9IHNwbGl0cnByZXJtCisgICAgICAgICAgICBzcmNycG9zdHJtICAgICA9IHNwbGl0cnBvc3RybQorCisgICAgICAgICAgICBmaWxlX2xpc3QgPSBbXQorICAgICAgICAgICAgd2Fsa19maWxlcyhyb290LCBmaWxlX2xpc3QsIGNvbmZmaWxlcywgZGlyZmlsZXMpCisgICAgICAgICAgICBpZiBub3QgZmlsZV9saXN0IGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdBTExPV19FTVBUWScsIEZhbHNlKSAhPSAiMSI6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuYXBwZW5kKCclZmlsZXMnKQorICAgICAgICAgICAgICAgIGlmIGV4dHJhX3BrZ2RhdGE6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcnBtX2V4dHJhX3BrZ2RhdGEoc3BsaXRuYW1lLCBzcGVjX2ZpbGVzX3RvcCwgbG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmFwcGVuZCgnJWRlZmF0dHIoLSwtLC0sLSknKQorICAgICAgICAgICAgICAgIGlmIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuZXh0ZW5kKGZpbGVfbGlzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBFTVBUWSBSUE0gUGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBQcm9jZXNzIHN1YnBhY2thZ2UgZGF0YQorICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJyUlcGFja2FnZSAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnU3VtbWFyeTogJXMnICUgc3BsaXRzdW1tYXJ5KQorICAgICAgICBpZiBzcmN2ZXJzaW9uICE9IHNwbGl0dmVyc2lvbjoKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnVmVyc2lvbjogJXMnICUgc3BsaXR2ZXJzaW9uKQorICAgICAgICBpZiBzcmNyZWxlYXNlICE9IHNwbGl0cmVsZWFzZToKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnUmVsZWFzZTogJXMnICUgc3BsaXRyZWxlYXNlKQorICAgICAgICBpZiBzcmNlcG9jaCAhPSBzcGxpdGVwb2NoOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdFcG9jaDogJXMnICUgc3BsaXRlcG9jaCkKKyAgICAgICAgaWYgc3JjbGljZW5zZSAhPSBzcGxpdGxpY2Vuc2U6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0xpY2Vuc2U6ICVzJyAlIHNwbGl0bGljZW5zZSkKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdHcm91cDogJXMnICUgc3BsaXRzZWN0aW9uKQorCisgICAgICAgIGlmIHNyY2N1c3RvbXRhZ3NjaHVuayAhPSBzcGxpdGN1c3RvbXRhZ3NjaHVuazoKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZChzcGxpdGN1c3RvbXRhZ3NjaHVuaykKKworICAgICAgICAjIFJlcGxhY2VzID09IE9ic29sZXRlcyAmJiBQcm92aWRlcworICAgICAgICByb2Jzb2xldGVzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cm9ic29sZXRlcyBvciAiIikKKyAgICAgICAgcnByb3ZpZGVzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cnByb3ZpZGVzIG9yICIiKQorICAgICAgICBycmVwbGFjZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRycmVwbGFjZXMgb3IgIiIpCisgICAgICAgIGZvciBkZXAgaW4gcnJlcGxhY2VzOgorICAgICAgICAgICAgaWYgbm90IGRlcCBpbiByb2Jzb2xldGVzOgorICAgICAgICAgICAgICAgIHJvYnNvbGV0ZXNbZGVwXSA9IHJyZXBsYWNlc1tkZXBdCisgICAgICAgICAgICBpZiBub3QgZGVwIGluIHJwcm92aWRlczoKKyAgICAgICAgICAgICAgICBycHJvdmlkZXNbZGVwXSA9IHJyZXBsYWNlc1tkZXBdCisgICAgICAgIHNwbGl0cm9ic29sZXRlcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhyb2Jzb2xldGVzLCBjb21tYXNlcD1GYWxzZSkKKyAgICAgICAgc3BsaXRycHJvdmlkZXMgPSBiYi51dGlscy5qb2luX2RlcHMocnByb3ZpZGVzLCBjb21tYXNlcD1GYWxzZSkKKworICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBpZiBzcGxpdHJwcmVpbnN0OgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocHJlKSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBpZiBzcGxpdHJwb3N0aW5zdDoKKyAgICAgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzKHBvc3QpIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnByZXJtOgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocHJldW4pIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnBvc3RybToKKyAgICAgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzKHBvc3R1bikiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKworICAgICAgICAjIFN1Z2dlc3RzIGluIFJQTSBhcmUgbGlrZSByZWNvbW1lbmRzIGluIE9FLWNvcmUhCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRycmVjb21tZW5kcywgIlN1Z2dlc3RzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgICMgV2hpbGUgdGhlcmUgaXMgbm8gYW5hbG9nIGZvciBzdWdnZXN0cy4uLiAoU28gY2FsbCB0aGVtIHJlY29tbWVuZHMgZm9yIG5vdykKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJzdWdnZXN0cywgICJSZWNvbW1lbmRzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRycHJvdmlkZXMsICAiUHJvdmlkZXMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJvYnNvbGV0ZXMsICJPYnNvbGV0ZXMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKworICAgICAgICAjIGNvbmZsaWN0cyBjYW4gbm90IGJlIGluIGEgcHJvdmlkZSEgIFdlIHdpbGwgbmVlZCB0byBmaWx0ZXIgaXQuCisgICAgICAgIGlmIHNwbGl0cmNvbmZsaWN0czoKKyAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJjb25mbGljdHMpCisgICAgICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzX2RpY3Q6CisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBzcGxpdHJwcm92aWRlczoKKyAgICAgICAgICAgICAgICAgICAgbmV3ZGVwc19kaWN0W2RlcF0gPSBkZXBlbmRzX2RpY3RbZGVwXQorICAgICAgICAgICAgaWYgbmV3ZGVwc19kaWN0OgorICAgICAgICAgICAgICAgIHNwbGl0cmNvbmZsaWN0cyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzX2RpY3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwbGl0cmNvbmZsaWN0cyA9ICIiCisKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJjb25mbGljdHMsICAiQ29uZmxpY3RzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCcnKQorCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJSVkZXNjcmlwdGlvbiAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgIGFwcGVuZF9kZXNjcmlwdGlvbihzcGVjX3ByZWFtYmxlX2JvdHRvbSwgc3BsaXRkZXNjcmlwdGlvbikKKworICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgIyBOb3cgcHJvY2VzcyBzY3JpcHRsZXRzCisgICAgICAgIGlmIHNwbGl0cnByZWluc3Q6CisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJSVwcmUgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwcmVpbnN0JyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNwbGl0cnByZWluc3QpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJykKKyAgICAgICAgaWYgc3BsaXRycG9zdGluc3Q6CisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJSVwb3N0IC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcG9zdGluc3QnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc3BsaXRycG9zdGluc3QpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJykKKyAgICAgICAgaWYgc3BsaXRycHJlcm06CisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJSVwcmV1biAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnIyAlcyAtIHByZXJtJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IHdyYXBfdW5pbnN0YWxsKHNwbGl0cnByZXJtKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc2NyaXB0dmFyKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJycpCisgICAgICAgIGlmIHNwbGl0cnBvc3RybToKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXBvc3R1biAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnIyAlcyAtIHBvc3RybScgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3VuaW5zdGFsbChzcGxpdHJwb3N0cm0pCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICAjIE5vdyBwcm9jZXNzIGZpbGVzCisgICAgICAgIGZpbGVfbGlzdCA9IFtdCisgICAgICAgIHdhbGtfZmlsZXMocm9vdCwgZmlsZV9saXN0LCBjb25mZmlsZXMsIGRpcmZpbGVzKQorICAgICAgICBpZiBub3QgZmlsZV9saXN0IGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdBTExPV19FTVBUWScsIEZhbHNlKSAhPSAiMSI6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJSVmaWxlcyAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBpZiBleHRyYV9wa2dkYXRhOgorICAgICAgICAgICAgICAgIHBhY2thZ2VfcnBtX2V4dHJhX3BrZ2RhdGEoc3BsaXRuYW1lLCBzcGVjX2ZpbGVzX2JvdHRvbSwgbG9jYWxkYXRhKQorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclZGVmYXR0cigtLC0sLSwtKScpCisgICAgICAgICAgICBpZiBmaWxlX2xpc3Q6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5leHRlbmQoZmlsZV9saXN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBFTVBUWSBSUE0gUGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCcnKQorCisgICAgICAgIGRlbCBsb2NhbGRhdGEKKyAgICAKKyAgICBhZGRfcHJlcChkLHNwZWNfZmlsZXNfYm90dG9tKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnU3VtbWFyeTogJXMnICUgc3Jjc3VtbWFyeSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ05hbWU6ICVzJyAlIHNyY25hbWUpCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdWZXJzaW9uOiAlcycgJSBzcmN2ZXJzaW9uKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnUmVsZWFzZTogJXMnICUgc3JjcmVsZWFzZSkKKyAgICBpZiBzcmNlcG9jaCBhbmQgc3JjZXBvY2guc3RyaXAoKSAhPSAiIjoKKyAgICAgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdFcG9jaDogJXMnICUgc3JjZXBvY2gpCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdMaWNlbnNlOiAlcycgJSBzcmNsaWNlbnNlKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnR3JvdXA6ICVzJyAlIHNyY3NlY3Rpb24pCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdQYWNrYWdlcjogJXMnICUgc3JjbWFpbnRhaW5lcikKKyAgICBpZiBzcmNob21lcGFnZToKKyAgICAgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdVUkw6ICVzJyAlIHNyY2hvbWVwYWdlKQorICAgIGlmIHNyY2N1c3RvbXRhZ3NjaHVuazoKKyAgICAgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKHNyY2N1c3RvbXRhZ3NjaHVuaykKKyAgICB0YWlsX3NvdXJjZShkKQorCisgICAgIyBSZXBsYWNlcyA9PSBPYnNvbGV0ZXMgJiYgUHJvdmlkZXMKKyAgICByb2Jzb2xldGVzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNyY3JvYnNvbGV0ZXMgb3IgIiIpCisgICAgcnByb3ZpZGVzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNyY3Jwcm92aWRlcyBvciAiIikKKyAgICBycmVwbGFjZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3JjcnJlcGxhY2VzIG9yICIiKQorICAgIGZvciBkZXAgaW4gcnJlcGxhY2VzOgorICAgICAgICBpZiBub3QgZGVwIGluIHJvYnNvbGV0ZXM6CisgICAgICAgICAgICByb2Jzb2xldGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgICAgICBpZiBub3QgZGVwIGluIHJwcm92aWRlczoKKyAgICAgICAgICAgIHJwcm92aWRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICBzcmNyb2Jzb2xldGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJvYnNvbGV0ZXMsIGNvbW1hc2VwPUZhbHNlKQorICAgIHNyY3Jwcm92aWRlcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMsIGNvbW1hc2VwPUZhbHNlKQorCisgICAgcHJpbnRfZGVwcyhzcmNkZXBlbmRzLCAiQnVpbGRSZXF1aXJlcyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIGlmIHNyY3JwcmVpbnN0OgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocHJlKSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIGlmIHNyY3Jwb3N0aW5zdDoKKyAgICAgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzKHBvc3QpIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnByZXJtOgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocHJldW4pIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnBvc3RybToKKyAgICAgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzKHBvc3R1bikiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKworICAgICMgU3VnZ2VzdHMgaW4gUlBNIGFyZSBsaWtlIHJlY29tbWVuZHMgaW4gT0UtY29yZSEKKyAgICBwcmludF9kZXBzKHNyY3JyZWNvbW1lbmRzLCAiU3VnZ2VzdHMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICAjIFdoaWxlIHRoZXJlIGlzIG5vIGFuYWxvZyBmb3Igc3VnZ2VzdHMuLi4gKFNvIGNhbGwgdGhlbSByZWNvbW1lbmRzIGZvciBub3cpCisgICAgcHJpbnRfZGVwcyhzcmNyc3VnZ2VzdHMsICJSZWNvbW1lbmRzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgcHJpbnRfZGVwcyhzcmNycHJvdmlkZXMsICJQcm92aWRlcyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIHByaW50X2RlcHMoc3Jjcm9ic29sZXRlcywgIk9ic29sZXRlcyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIAorICAgICMgY29uZmxpY3RzIGNhbiBub3QgYmUgaW4gYSBwcm92aWRlISAgV2Ugd2lsbCBuZWVkIHRvIGZpbHRlciBpdC4KKyAgICBpZiBzcmNyY29uZmxpY3RzOgorICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3JjcmNvbmZsaWN0cykKKyAgICAgICAgbmV3ZGVwc19kaWN0ID0ge30KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzX2RpY3Q6CisgICAgICAgICAgICBpZiBkZXAgbm90IGluIHNyY3Jwcm92aWRlczoKKyAgICAgICAgICAgICAgICBuZXdkZXBzX2RpY3RbZGVwXSA9IGRlcGVuZHNfZGljdFtkZXBdCisgICAgICAgIGlmIG5ld2RlcHNfZGljdDoKKyAgICAgICAgICAgIHNyY3Jjb25mbGljdHMgPSBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwc19kaWN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3JjcmNvbmZsaWN0cyA9ICIiCisKKyAgICBwcmludF9kZXBzKHNyY3Jjb25mbGljdHMsICJDb25mbGljdHMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKworICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnJykKKworICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnJWRlc2NyaXB0aW9uJykKKyAgICBhcHBlbmRfZGVzY3JpcHRpb24oc3BlY19wcmVhbWJsZV90b3AsIHNyY2Rlc2NyaXB0aW9uKQorCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCcnKQorCisgICAgaWYgc3JjcnByZWluc3Q6CisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCclcHJlJykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwcmVpbnN0JyAlIHNyY25hbWUpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNyY3JwcmVpbnN0KQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJykKKyAgICBpZiBzcmNycG9zdGluc3Q6CisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCclcG9zdCcpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcG9zdGluc3QnICUgc3JjbmFtZSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc3JjcnBvc3RpbnN0KQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJykKKyAgICBpZiBzcmNycHJlcm06CisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCclcHJldW4nKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHByZXJtJyAlIHNyY25hbWUpCisgICAgICAgIHNjcmlwdHZhciA9IHdyYXBfdW5pbnN0YWxsKHNyY3JwcmVybSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc2NyaXB0dmFyKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJykKKyAgICBpZiBzcmNycG9zdHJtOgorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXBvc3R1bicpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcG9zdHJtJyAlIHNyY25hbWUpCisgICAgICAgIHNjcmlwdHZhciA9IHdyYXBfdW5pbnN0YWxsKHNyY3Jwb3N0cm0pCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCisKKyAgICAjIFdyaXRlIHRoZSBTUEVDIGZpbGUKKyAgICB0cnk6CisgICAgICAgIHNwZWNmaWxlID0gb3BlbihvdXRzcGVjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikKKworICAgICMgUlBNU1BFQ19QUkVBTUJMRSBpcyBhIHdheSB0byBhZGQgYXJiaXRyYXJ5IHRleHQgdG8gdGhlIHRvcAorICAgICMgb2YgdGhlIGdlbmVyYXRlZCBzcGVjIGZpbGUKKyAgICBleHRlcm5hbF9wcmVhbWJsZSA9IGQuZ2V0VmFyKCJSUE1TUEVDX1BSRUFNQkxFIiwgVHJ1ZSkKKyAgICBpZiBleHRlcm5hbF9wcmVhbWJsZToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUoZXh0ZXJuYWxfcHJlYW1ibGUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19wcmVhbWJsZV90b3A6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19wcmVhbWJsZV9ib3R0b206CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19zY3JpcHRsZXRzX3RvcDoKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3NjcmlwdGxldHNfYm90dG9tOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfZmlsZXNfdG9wOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfZmlsZXNfYm90dG9tOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIHNwZWNmaWxlLmNsb3NlKCkKK30KKyMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgord3JpdGVfc3BlY2ZpbGVbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKworcHl0aG9uIGRvX3BhY2thZ2VfcnBtICgpIHsKKyAgICAjIFdlIG5lZWQgYSBzaW1wbGUgd2F5IHRvIHJlbW92ZSB0aGUgTUxQUkVGSVggZnJvbSB0aGUgcGFja2FnZSBuYW1lLAorICAgICMgYW5kIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24uLi4KKyAgICBkZWYgc3RyaXBfbXVsdGlsaWIobmFtZSwgZCk6CisgICAgICAgIG1sID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyAgICAgICAgaWYgbWwgYW5kIG5hbWUgYW5kIGxlbihtbCkgIT0gMCBhbmQgbmFtZS5maW5kKG1sKSA+PSAwOgorICAgICAgICAgICAgcmV0dXJuICIiLmpvaW4obmFtZS5zcGxpdChtbCkpCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHBrZ2QgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpciBvciBub3QgcGtnZCBvciBub3QgdG1wZGlyOgorICAgICAgICBiYi5lcnJvcigiVmFyaWFibGVzIGluY29ycmVjdGx5IHNldCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBpZiBub3QgcGFja2FnZXMgb3IgcGFja2FnZXMgPT0gJyc6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlczsgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgIyBDb25zdHJ1Y3QgdGhlIHNwZWMgZmlsZS4uLgorICAgICMgSWYgdGhlIHNwZWMgZmlsZSBhbHJlYWR5IGV4aXN0LCBhbmQgaGFzIG5vdCBiZWVuIHN0b3JlZCBpbnRvIAorICAgICMgcHNldWRvJ3MgZmlsZXMuZGIsIGl0IG1heWJlIGNhdXNlIHJwbWJ1aWxkIHNyYy5ycG0gZmFpbCwKKyAgICAjIHNvIHJlbW92ZSBpdCBiZWZvcmUgZG9pbmcgcnBtYnVpbGQgc3JjLnJwbS4KKyAgICBzcmNuYW1lICAgID0gc3RyaXBfbXVsdGlsaWIoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGQpCisgICAgb3V0c3BlY2ZpbGUgPSB3b3JrZGlyICsgIi8iICsgc3JjbmFtZSArICIuc3BlYyIKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShvdXRzcGVjZmlsZSk6CisgICAgICAgIG9zLnJlbW92ZShvdXRzcGVjZmlsZSkKKyAgICBkLnNldFZhcignT1VUU1BFQ0ZJTEUnLCBvdXRzcGVjZmlsZSkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ3dyaXRlX3NwZWNmaWxlJywgZCkKKworICAgIHBlcmZpbGVkZXBzID0gKGQuZ2V0VmFyKCJNRVJHRVBFUkZJTEVERVBTIiwgVHJ1ZSkgb3IgIjAiKSA9PSAiMCIKKyAgICBpZiBwZXJmaWxlZGVwczoKKyAgICAgICAgb3V0ZGVwZW5kcywgb3V0cHJvdmlkZXMgPSB3cml0ZV9ycG1fcGVyZmlsZWRhdGEoc3JjbmFtZSwgZCkKKworICAgICMgU2V0dXAgdGhlIHJwbWJ1aWxkIGFyZ3VtZW50cy4uLgorICAgIHJwbWJ1aWxkID0gZC5nZXRWYXIoJ1JQTUJVSUxEJywgVHJ1ZSkKKyAgICB0YXJnZXRzeXMgPSBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpCisgICAgdGFyZ2V0dmVuZG9yID0gZC5nZXRWYXIoJ0hPU1RfVkVORE9SJywgVHJ1ZSkKKyAgICBwYWNrYWdlX2FyY2ggPSAoZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpIG9yICIiKS5yZXBsYWNlKCItIiwgIl8iKQorICAgIHNka3BrZ3N1ZmZpeCA9IChkLmdldFZhcignU0RLUEtHU1VGRklYJywgVHJ1ZSkgb3IgIm5hdGl2ZXNkayIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgaWYgcGFja2FnZV9hcmNoIG5vdCBpbiAiYWxsIGFueSBub2FyY2giLnNwbGl0KCkgYW5kIG5vdCBwYWNrYWdlX2FyY2guZW5kc3dpdGgoc2RrcGtnc3VmZml4KToKKyAgICAgICAgbWxfcHJlZml4ID0gKGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICIiKS5yZXBsYWNlKCItIiwgIl8iKQorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIX0VYVEVORCcsIG1sX3ByZWZpeCArIHBhY2thZ2VfYXJjaCkKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIX0VYVEVORCcsIHBhY2thZ2VfYXJjaCkKKyAgICBwa2d3cml0ZWRpciA9IGQuZXhwYW5kKCcke1BLR1dSSVRFRElSUlBNfS8ke1BBQ0tBR0VfQVJDSF9FWFRFTkR9JykKKyAgICBkLnNldFZhcignUlBNX1BLR1dSSVRFRElSJywgcGtnd3JpdGVkaXIpCisgICAgYmIuZGVidWcoMSwgJ1BLR1dSSVRFRElSOiAlcycgJSBkLmdldFZhcignUlBNX1BLR1dSSVRFRElSJywgVHJ1ZSkpCisgICAgcGtnYXJjaCA9IGQuZXhwYW5kKCcke1BBQ0tBR0VfQVJDSF9FWFRFTkR9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfScpCisgICAgbWFnaWNmaWxlID0gZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L21pc2MvbWFnaWMubWdjJykKKyAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnd3JpdGVkaXIpCisgICAgb3MuY2htb2QocGtnd3JpdGVkaXIsIDA3NTUpCisKKyAgICBjbWQgPSBycG1idWlsZAorICAgIGNtZCA9IGNtZCArICIgLS1ub2RlcHMgLS1zaG9ydC1jaXJjdWl0IC0tdGFyZ2V0ICIgKyBwa2dhcmNoICsgIiAtLWJ1aWxkcm9vdCAiICsgcGtnZAorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ190b3BkaXIgIiArIHdvcmtkaXIgKyAiJyAtLWRlZmluZSAnX3JwbWRpciAiICsgcGtnd3JpdGVkaXIgKyAiJyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfYnVpbGRkaXIgIiArIGQuZ2V0VmFyKCdTJywgVHJ1ZSkgKyAiJyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfYnVpbGRfbmFtZV9mbXQgJSV7TkFNRX0tJSV7VkVSU0lPTn0tJSV7UkVMRUFTRX0uJSV7QVJDSH0ucnBtJyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfdXNlX2ludGVybmFsX2RlcGVuZGVuY3lfZ2VuZXJhdG9yIDAnIgorICAgIGlmIHBlcmZpbGVkZXBzOgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcmVxdWlyZXMgIiArIG91dGRlcGVuZHMgKyAiJyIKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3Byb3ZpZGVzICIgKyBvdXRwcm92aWRlcyArICInIgorICAgIGVsc2U6CisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9yZXF1aXJlcyAle25pbH0nIgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcHJvdmlkZXMgJXtuaWx9JyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfdW5wYWNrYWdlZF9maWxlc190ZXJtaW5hdGVfYnVpbGQgMCciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnZGVidWdfcGFja2FnZSAle25pbH0nIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19ycG1mY19tYWdpY19wYXRoICIgKyBtYWdpY2ZpbGUgKyAiJyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfdG1wcGF0aCAiICsgd29ya2RpciArICInIgorICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkgPT0gJzEnIGFuZCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhcmNoaXZlcicsIGQpOgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfc291cmNlZGlyICIgKyBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkgKyAiJyIKKyAgICAgICAgY21kc3JwbSA9IGNtZCArICIgLS1kZWZpbmUgJ19zcmNycG1kaXIgIiArIGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKSArICInIgorICAgICAgICBjbWRzcnBtID0gY21kc3JwbSArICIgLWJzICIgKyBvdXRzcGVjZmlsZQorICAgICAgICAjIEJ1aWxkIHRoZSAuc3JjLnJwbQorICAgICAgICBkLnNldFZhcignU0JVSUxEU1BFQycsIGNtZHNycG0gKyAiXG4iKQorICAgICAgICBkLnNldFZhckZsYWcoJ1NCVUlMRFNQRUMnLCAnZnVuYycsICcxJykKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdTQlVJTERTUEVDJywgZCkKKyAgICBjbWQgPSBjbWQgKyAiIC1iYiAiICsgb3V0c3BlY2ZpbGUKKworICAgICMgQnVpbGQgdGhlIHJwbSBwYWNrYWdlIQorICAgIGQuc2V0VmFyKCdCVUlMRFNQRUMnLCBjbWQgKyAiXG4iKQorICAgIGQuc2V0VmFyRmxhZygnQlVJTERTUEVDJywgJ2Z1bmMnLCAnMScpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdCVUlMRFNQRUMnLCBkKQorCisgICAgaWYgZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoInNpZ25fcnBtIiwgZCkKK30KKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9ICcgcnBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsIGRlcHMpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZmFrZXJvb3QnLCAxKQorfQorCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV93cml0ZV9ycG0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR1dSSVRFRElSUlBNfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfUlBNfSIKKyMgVGFrZSBhIHNoYXJlZCBsb2NrLCB3ZSBjYW4gd3JpdGUgbXVsdGlwbGUgcGFja2FnZXMgYXQgdGhlIHNhbWUgdGltZS4uLgorIyBidXQgd2UgbmVlZCB0byBzdG9wIHRoZSByb290ZnMvc29sdmVyIGZyb20gcnVubmluZyB3aGlsZSB3ZSBkby4uLgorZG9fcGFja2FnZV93cml0ZV9ycG1bc3N0YXRlLWxvY2tmaWxlLXNoYXJlZF0gKz0gIiR7REVQTE9ZX0RJUl9SUE19L3JwbS5sb2NrIgorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9ycG1fc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3dyaXRlX3JwbV9zZXRzY2VuZQorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9ycG0gKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BhY2thZ2VfcnBtIiwgZCkKK30KKworZG9fcGFja2FnZV93cml0ZV9ycG1bZGlyc10gPSAiJHtQS0dXUklURURJUlJQTX0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtjbGVhbmRpcnNdID0gIiR7UEtHV1JJVEVESVJSUE19IgorZG9fcGFja2FnZV93cml0ZV9ycG1bdW1hc2tdID0gIjAyMiIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV9ycG0gYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQorCitQQUNLQUdFSU5ERVhERVBTICs9ICJycG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitQQUNLQUdFSU5ERVhERVBTICs9ICJjcmVhdGVyZXBvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfcnBtIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfdGFyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllMjI5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VfdGFyLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAoraW5oZXJpdCBwYWNrYWdlCisKK0lNQUdFX1BLR1RZUEUgPz0gInRhciIKKworcHl0aG9uIGRvX3BhY2thZ2VfdGFyICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ0RFUExPWV9ESVJfVEFSJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3V0ZGlyOgorICAgICAgICBiYi5lcnJvcigiREVQTE9ZX0RJUl9UQVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIGlmIG5vdCBkdmFyOgorICAgICAgICBiYi5lcnJvcigiRCBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgIGJiLmRlYnVnKDEsICJQQUNLQUdFUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG91dGRpcikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZHZhcikKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBGYWxzZSkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgJyVzOiVzJyAlIChvdmVycmlkZXMsIHBrZykpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihyb290KQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5kaXJuYW1lKHJvb3QpCisgICAgICAgIHRhcmZuID0gbG9jYWxkYXRhLmV4cGFuZCgiJHtERVBMT1lfRElSX1RBUn0vJHtQS0d9LSR7UEtHVn0tJHtQS0dSfS50YXIuZ3oiKQorICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBkbGlzdCA9IG9zLmxpc3RkaXIocm9vdCkKKyAgICAgICAgaWYgbm90IGRsaXN0OgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGFyZ3MgPSAidGFyIC1jeiAtLWV4Y2x1ZGU9Q09OVFJPTCAtLWV4Y2x1ZGU9REVCSUFOIC1mIi5zcGxpdCgpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChhcmdzICsgW3RhcmZuXSArIGRsaXN0KQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGJiLmVycm9yKCJDcmVhdGlvbiBvZiB0YXIgJXMgZmFpbGVkLiIgJSB0YXJmbikKK30KKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9IChkLmdldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfdGFyJywgJ2RlcGVuZHMnKSBvciAiIikuc3BsaXQoKQorICAgICAgICBkZXBzLmFwcGVuZCgndGFyLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICAgICAgZGVwcy5hcHBlbmQoJ3ZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfdGFyJywgJ2RlcGVuZHMnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3RhcicsICdmYWtlcm9vdCcsICIxIikKK30KKworCitweXRob24gZG9fcGFja2FnZV93cml0ZV90YXIgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BhY2thZ2VfdGFyIiwgZCkKK30KK2RvX3BhY2thZ2Vfd3JpdGVfdGFyW2RpcnNdID0gIiR7RH0iCithZGR0YXNrIHBhY2thZ2Vfd3JpdGVfdGFyIGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZGF0YS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWRhdGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk3ZjFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWRhdGEuYmJjbGFzcwpAQCAtMCwwICsxLDM0IEBACitweXRob24gcmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhICgpIHsKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKworICAgIHZhcnMgPSB7CisgICAgICAgICJQTiIgOiBkLmdldFZhcignUE4nLCBUcnVlKSwgCisgICAgICAgICJQRSIgOiBkLmdldFZhcignUEUnLCBUcnVlKSwgCisgICAgICAgICJQViIgOiBkLmdldFZhcignUFYnLCBUcnVlKSwKKyAgICAgICAgIlBSIiA6IGQuZ2V0VmFyKCdQUicsIFRydWUpLAorICAgIH0KKworICAgIGRhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3BrZ2RhdGEodmFyc1siUE4iXSwgZCkKKworICAgIGZvciBrZXkgaW4gZGF0YS5rZXlzKCk6CisgICAgICAgIGQuc2V0VmFyKGtleSwgZGF0YVtrZXldKQorCisgICAgZm9yIHBrZyBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBzZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCisgICAgICAgIGZvciBrZXkgaW4gc2RhdGEua2V5cygpOgorICAgICAgICAgICAgaWYga2V5IGluIHZhcnM6CisgICAgICAgICAgICAgICAgaWYgc2RhdGFba2V5XSAhPSB2YXJzW2tleV06CisgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9PSAiUE4iOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlJlY2lwZSAlcyBpcyB0cnlpbmcgdG8gY3JlYXRlIHBhY2thZ2UgJXMgd2hpY2ggd2FzIGFscmVhZHkgd3JpdHRlbiBieSByZWNpcGUgJXMuIFRoaXMgd2lsbCBjYXVzZSBjb3JydXB0aW9uLCBwbGVhc2UgcmVzb2x2ZSB0aGlzIGFuZCBvbmx5IHByb3ZpZGUgdGhlIHBhY2thZ2UgZnJvbSBvbmUgcmVjaXBlIG9yIHRoZSBvdGhlciBvciBvbmx5IGJ1aWxkIG9uZSBvZiB0aGUgcmVjaXBlcy4iICUgKHZhcnNba2V5XSwgcGtnLCBzZGF0YVtrZXldKSkKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlJlY2lwZSAlcyBpcyB0cnlpbmcgdG8gY2hhbmdlICVzIGZyb20gJyVzJyB0byAnJXMnLiBUaGlzIHdpbGwgY2F1c2UgZG9fcGFja2FnZV93cml0ZV8qIGZhaWx1cmVzIHNpbmNlIHRoZSBpbmNvcnJlY3QgZGF0YSB3aWxsIGJlIHVzZWQgYW5kIHRoZXkgd2lsbCBiZSB1bmFibGUgdG8gZmluZCB0aGUgcmlnaHQgd29ya2Rpci4iICUgKHZhcnNbIlBOIl0sIGtleSwgdmFyc1trZXldLCBzZGF0YVtrZXldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJZiB3ZSBzZXQgdW5zdWZmaXhlZCB2YXJpYWJsZXMgaGVyZSB0aGVyZSBpcyBhIGNoYW5jZSB0aGV5IGNvdWxkIGNsb2JiZXIgb3ZlcnJpZGUgdmVyc2lvbnMKKyAgICAgICAgICAgICMgb2YgdGhhdCB2YXJpYWJsZSwgZS5nLiBERVNDUklQVElPTiBjb3VsZCBjbG9iYmVyIERFU0NSSVBUSU9OXzxwa2duYW1lPgorICAgICAgICAgICAgIyBXZSB0aGVyZWZvcmUgZG9uJ3QgY2xvYmJlciBmb3IgdGhlIHVuc3VmZml4ZWQgdmFyaWFibGUgdmVyc2lvbnMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGlmIGtleS5lbmRzd2l0aCgiXyIgKyBwa2cpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgc2RhdGFba2V5XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCBzZGF0YVtrZXldLCBwYXJzaW5nPVRydWUpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZ3JvdXAuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2ZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYWNrYWdlZ3JvdXAuYmJjbGFzcwpAQCAtMCwwICsxLDUyIEBACisjIENsYXNzIGZvciBwYWNrYWdlZ3JvdXAgKHBhY2thZ2UgZ3JvdXApIHJlY2lwZXMKKworIyBCeSBkZWZhdWx0LCBvbmx5IHRoZSBwYWNrYWdlZ3JvdXAgcGFja2FnZSBpdHNlbGYgaXMgaW4gUEFDS0FHRVMuCisjIC1kYmcgYW5kIC1kZXYgZmxhdm91cnMgYXJlIGhhbmRsZWQgYnkgdGhlIGFub25mdW5jIGJlbG93LgorIyBUaGlzIG1lYW5zIHRoYXQgcGFja2FnZWdyb3VwIHJlY2lwZXMgdXNlZCB0byBidWlsZCBtdWx0aXBsZSBwYWNrYWdlZ3JvdXAKKyMgcGFja2FnZXMgaGF2ZSB0byBtb2RpZnkgUEFDS0FHRVMgYWZ0ZXIgaW5oZXJpdGluZyBwYWNrYWdlZ3JvdXAuYmJjbGFzcy4KK1BBQ0tBR0VTID0gIiR7UE59IgorCisjIEJ5IGRlZmF1bHQsIHBhY2thZ2Vncm91cCBwYWNrYWdlcyBkbyBub3QgZGVwZW5kIG9uIGEgY2VydGFpbiBhcmNoaXRlY3R1cmUuCisjIE9ubHkgaWYgZGVwZW5kZW5jaWVzIGFyZSBtb2RpZmllZCBieSBNQUNISU5FX0ZFQVRVUkVTLCBwYWNrYWdlcworIyBuZWVkIHRvIGJlIHNldCB0byBNQUNISU5FX0FSQ0ggYWZ0ZXIgaW5oZXJpdGluZyBwYWNrYWdlZ3JvdXAuYmJjbGFzcworUEFDS0FHRV9BUkNIID89ICJhbGwiCisKKyMgRnVsbHkgZXhwYW5kZWQgLSBzbyBpdCBhcHBsaWVzIHRoZSBvdmVycmlkZXMgYXMgd2VsbAorUEFDS0FHRV9BUkNIX0VYUEFOREVEIDo9ICIke1BBQ0tBR0VfQVJDSH0iCisKK2luaGVyaXQgJHtAb2UudXRpbHMuaWZlbHNlKGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhQQU5ERUQnLCBUcnVlKSA9PSAnYWxsJywgJ2FsbGFyY2gnLCAnJyl9CisKKyMgVGhpcyBhdXRvbWF0aWNhbGx5IGFkZHMgLWRiZyBhbmQgLWRldiBmbGF2b3VycyBvZiBhbGwgUEFDS0FHRVMKKyMgdG8gdGhlIGxpc3QuIFRoZWlyIGRlcGVuZGVuY2llcyAoUlJFQ09NTUVORFMpIGFyZSBoYW5kbGVkIGFzIHVzdWFsCisjIGJ5IHBhY2thZ2VfZGVwY2hhaW5zIGluIGEgZm9sbG93aW5nIHN0ZXAuCisjIEFsc28gbWFyayBhbGwgcGFja2FnZXMgYXMgQUxMT1dfRU1QVFkKK3B5dGhvbiAoKSB7CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZ2VucGFja2FnZXMgPSBbXQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIGQuc2V0VmFyKCJBTExPV19FTVBUWV8lcyIgJSBwa2csICIxIikKKyAgICAgICAgZm9yIHBvc3RmaXggaW4gWyctZGJnJywgJy1kZXYnLCAnLXB0ZXN0J106CisgICAgICAgICAgICBnZW5wYWNrYWdlcy5hcHBlbmQocGtnK3Bvc3RmaXgpCisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlknLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VzK2dlbnBhY2thZ2VzKSkKK30KKworIyBXZSBkb24ndCB3YW50IHRvIGxvb2sgYXQgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZvciB0aGUKKyMgZGJnIHBhY2thZ2VzCitERVBDSEFJTl9EQkdERUZBVUxUREVQUyA9ICIxIgorCisjIFdlIG9ubHkgbmVlZCB0aGUgcGFja2FnaW5nIHRhc2tzIC0gZGlzYWJsZSB0aGUgcmVzdAorZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX2luc3RhbGxbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKK3B5dGhvbiAoKSB7CisgICAgaW5pdG1hbiA9IGQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSkKKyAgICBpZiBpbml0bWFuIGFuZCBpbml0bWFuIGluIFsnc3lzdmluaXQnLCAnc3lzdGVtZCddIGFuZCBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsIGluaXRtYW4sIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgYmIuZmF0YWwoIlBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIHNldHRpbmcgb2YgVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciAoJXMpIG1hdGNoZXMgdGhlIGVudHJpZXMgZW5hYmxlZCBpbiBESVNUUk9fRkVBVFVSRVMiICUgaW5pdG1hbikKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGFja2FnZWluZm8uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2MGFjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BhY2thZ2VpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSwyMiBAQAorcHl0aG9uIHBhY2thZ2VpbmZvX2hhbmRsZXIgKCkgeworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorICAgIHBrZ2luZm9saXN0ID0gW10KKworICAgIHBrZ2RhdGFfZGlyID0gZS5kYXRhLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKSArICcvcnVudGltZS8nCisgICAgaWYgb3MucGF0aC5leGlzdHMocGtnZGF0YV9kaXIpOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhwa2dkYXRhX2Rpcik6CisgICAgICAgICAgICBmb3IgcGtnbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBwa2duYW1lLmVuZHN3aXRoKCcucGFja2FnZWQnKToKKyAgICAgICAgICAgICAgICAgICAgcGtnbmFtZSA9IHBrZ25hbWVbOi05XQorICAgICAgICAgICAgICAgICAgICBwa2dkYXRhZmlsZSA9IHJvb3QgKyBwa2duYW1lCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9wa2dkYXRhZmlsZShwa2dkYXRhZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYXRhWydQS0cnXSA9IHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2luZm9saXN0LmFwcGVuZChzZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiRmFpbGVkIHRvIHJlYWQgcGtnZGF0YSBmaWxlICVzOiAlczogJXMiICUgKHBrZ2RhdGFmaWxlLCBlLl9fY2xhc3NfXywgc3RyKGUpKSkKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlBhY2thZ2VJbmZvKHBrZ2luZm9saXN0KSwgZS5kYXRhKQorfQorCithZGRoYW5kbGVyIHBhY2thZ2VpbmZvX2hhbmRsZXIKK3BhY2thZ2VpbmZvX2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZXF1ZXN0UGFja2FnZUluZm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGF0Y2guYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTJhYWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGF0Y2guYmJjbGFzcwpAQCAtMCwwICsxLDE4OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgIE9wZW5lZEhhbmQgTFRECisKKyMgUG9pbnQgdG8gYW4gZW1wdHkgZmlsZSBzbyBhbnkgdXNlcidzIGN1c3RvbSBzZXR0aW5ncyBkb24ndCBicmVhayB0aGluZ3MKK1FVSUxUUkNGSUxFID89ICIke1NUQUdJTkdfRVRDRElSX05BVElWRX0vcXVpbHRyYyIKKworUEFUQ0hERVBFTkRFTkNZID0gIiR7UEFUQ0hUT09MfS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworaW5oZXJpdCB0ZXJtaW5hbAorCitkZWYgc3JjX3BhdGNoZXMoZCwgYWxsID0gRmFsc2UgKToKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKFtdLCBkKQorICAgIHBhdGNoZXMgPSBbXQorICAgIHNvdXJjZXMgPSBbXQorICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgbG9jYWwgPSBwYXRjaF9wYXRoKHVybCwgZmV0Y2gsIHdvcmtkaXIpCisgICAgICAgIGlmIG5vdCBsb2NhbDoKKyAgICAgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgICAgICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpCisgICAgICAgICAgICAgICAgc291cmNlcy5hcHBlbmQobG9jYWwpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHVybGRhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgIHBhcm0gPSB1cmxkYXRhLnBhcm0KKyAgICAgICAgcGF0Y2huYW1lID0gcGFybS5nZXQoJ3BuYW1lJykgb3Igb3MucGF0aC5iYXNlbmFtZShsb2NhbCkKKworICAgICAgICBhcHBseSwgcmVhc29uID0gc2hvdWxkX2FwcGx5KHBhcm0sIGQpCisgICAgICAgIGlmIG5vdCBhcHBseToKKyAgICAgICAgICAgIGlmIHJlYXNvbjoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJQYXRjaCAlcyAlcyIgJSAocGF0Y2huYW1lLCByZWFzb24pKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBwYXRjaHBhcm0gPSB7J3BhdGNobmFtZSc6IHBhdGNobmFtZX0KKyAgICAgICAgaWYgInN0cmlwbGV2ZWwiIGluIHBhcm06CisgICAgICAgICAgICBzdHJpcGxldmVsID0gcGFybVsic3RyaXBsZXZlbCJdCisgICAgICAgIGVsaWYgInBudW0iIGluIHBhcm06CisgICAgICAgICAgICAjYmIubXNnLndhcm4oTm9uZSwgIkRlcHJlY2F0ZWQgdXNhZ2Ugb2YgJ3BudW0nIHVybCBwYXJhbWV0ZXIgaW4gJyVzJywgcGxlYXNlIHVzZSAnc3RyaXBsZXZlbCciICUgdXJsKQorICAgICAgICAgICAgc3RyaXBsZXZlbCA9IHBhcm1bInBudW0iXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyaXBsZXZlbCA9ICcxJworICAgICAgICBwYXRjaHBhcm1bJ3N0cmlwbGV2ZWwnXSA9IHN0cmlwbGV2ZWwKKworICAgICAgICBwYXRjaGRpciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCisgICAgICAgIGlmIHBhdGNoZGlyOgorICAgICAgICAgICAgcGF0Y2hwYXJtWydwYXRjaGRpciddID0gcGF0Y2hkaXIKKworICAgICAgICBsb2NhbHVybCA9IGJiLmZldGNoLmVuY29kZXVybCgoJ2ZpbGUnLCAnJywgbG9jYWwsICcnLCAnJywgcGF0Y2hwYXJtKSkKKyAgICAgICAgcGF0Y2hlcy5hcHBlbmQobG9jYWx1cmwpCisKKyAgICBpZiBhbGw6CisgICAgICAgIHJldHVybiBzb3VyY2VzCisKKyAgICByZXR1cm4gcGF0Y2hlcworCitkZWYgcGF0Y2hfcGF0aCh1cmwsIGZldGNoLCB3b3JrZGlyKToKKyAgICAiIiJSZXR1cm4gdGhlIGxvY2FsIHBhdGggb2YgYSBwYXRjaCwgb3IgTm9uZSBpZiB0aGlzIGlzbid0IGEgcGF0Y2giIiIKKworICAgIGxvY2FsID0gZmV0Y2gubG9jYWxwYXRoKHVybCkKKyAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobG9jYWwpKQorICAgIGlmIGV4dCBpbiAoJy5neicsICcuYnoyJywgJy5aJyk6CisgICAgICAgIGxvY2FsID0gb3MucGF0aC5qb2luKHdvcmtkaXIsIGJhc2UpCisgICAgICAgIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoYmFzZSlbMV0KKworICAgIHVybGRhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgaWYgImFwcGx5IiBpbiB1cmxkYXRhLnBhcm06CisgICAgICAgIGFwcGx5ID0gb2UudHlwZXMuYm9vbGVhbih1cmxkYXRhLnBhcm1bImFwcGx5Il0pCisgICAgICAgIGlmIG5vdCBhcHBseToKKyAgICAgICAgICAgIHJldHVybgorICAgIGVsaWYgZXh0IG5vdCBpbiAoIi5kaWZmIiwgIi5wYXRjaCIpOgorICAgICAgICByZXR1cm4KKworICAgIHJldHVybiBsb2NhbAorCitkZWYgc2hvdWxkX2FwcGx5KHBhcm0sIGQpOgorICAgICIiIkRldGVybWluZSBpZiB3ZSBzaG91bGQgYXBwbHkgdGhlIGdpdmVuIHBhdGNoIiIiCisKKyAgICBpZiAibWluZGF0ZSIgaW4gcGFybSBvciAibWF4ZGF0ZSIgaW4gcGFybToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ1NSQ0RBVEVfJXMnICUgcG4sIFRydWUpCisgICAgICAgIGlmIG5vdCBzcmNkYXRlOgorICAgICAgICAgICAgc3JjZGF0ZSA9IGQuZ2V0VmFyKCdTUkNEQVRFJywgVHJ1ZSkKKworICAgICAgICBpZiBzcmNkYXRlID09ICJub3ciOgorICAgICAgICAgICAgc3JjZGF0ZSA9IGQuZ2V0VmFyKCdEQVRFJywgVHJ1ZSkKKworICAgICAgICBpZiAibWF4ZGF0ZSIgaW4gcGFybSBhbmQgcGFybVsibWF4ZGF0ZSJdIDwgc3JjZGF0ZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgJ2lzIG91dGRhdGVkJworCisgICAgICAgIGlmICJtaW5kYXRlIiBpbiBwYXJtIGFuZCBwYXJtWyJtaW5kYXRlIl0gPiBzcmNkYXRlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnaXMgcHJlZGF0ZWQnCisKKworICAgIGlmICJtaW5yZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHNyY3JldiA8IHBhcm1bIm1pbnJldiJdOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnYXBwbGllcyB0byBsYXRlciByZXZpc2lvbnMnCisKKyAgICBpZiAibWF4cmV2IiBpbiBwYXJtOgorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBzcmNyZXYgPiBwYXJtWyJtYXhyZXYiXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgJ2FwcGxpZXMgdG8gZWFybGllciByZXZpc2lvbnMnCisKKyAgICBpZiAicmV2IiBpbiBwYXJtOgorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBwYXJtWyJyZXYiXSBub3QgaW4gc3JjcmV2OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiZG9lc24ndCBhcHBseSB0byByZXZpc2lvbiIKKworICAgIGlmICJub3RyZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHBhcm1bIm5vdHJldiJdIGluIHNyY3JldjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgImRvZXNuJ3QgYXBwbHkgdG8gcmV2aXNpb24iCisKKyAgICByZXR1cm4gVHJ1ZSwgTm9uZQorCitzaG91bGRfYXBwbHlbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEUgU1JDREFURSIKKworcHl0aG9uIHBhdGNoX2RvX3BhdGNoKCkgeworICAgIGltcG9ydCBvZS5wYXRjaAorCisgICAgcGF0Y2hzZXRtYXAgPSB7CisgICAgICAgICJwYXRjaCI6IG9lLnBhdGNoLlBhdGNoVHJlZSwKKyAgICAgICAgInF1aWx0Ijogb2UucGF0Y2guUXVpbHRUcmVlLAorICAgICAgICAiZ2l0Ijogb2UucGF0Y2guR2l0QXBwbHlUcmVlLAorICAgIH0KKworICAgIGNscyA9IHBhdGNoc2V0bWFwW2QuZ2V0VmFyKCdQQVRDSFRPT0wnLCBUcnVlKSBvciAncXVpbHQnXQorCisgICAgcmVzb2x2ZXJtYXAgPSB7CisgICAgICAgICJub29wIjogb2UucGF0Y2guTk9PUFJlc29sdmVyLAorICAgICAgICAidXNlciI6IG9lLnBhdGNoLlVzZXJSZXNvbHZlciwKKyAgICB9CisKKyAgICByY2xzID0gcmVzb2x2ZXJtYXBbZC5nZXRWYXIoJ1BBVENIUkVTT0xWRScsIFRydWUpIG9yICd1c2VyJ10KKworICAgIGNsYXNzZXMgPSB7fQorCisgICAgcyA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKworICAgIHBhdGggPSBvcy5nZXRlbnYoJ1BBVEgnKQorICAgIG9zLnB1dGVudignUEFUSCcsIGQuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkpCisKKyAgICAjIFdlIG11c3QgdXNlIG9uZSBUTVBESVIgcGVyIHByb2Nlc3Mgc28gdGhhdCB0aGUgInBhdGNoIiBwcm9jZXNzZXMKKyAgICAjIGRvbid0IGdlbmVyYXRlIHRoZSBzYW1lIHRlbXAgZmlsZSBuYW1lLgorCisgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgcHJvY2Vzc190bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICBvcy5lbnZpcm9uWydUTVBESVInXSA9IHByb2Nlc3NfdG1wZGlyCisKKyAgICBmb3IgcGF0Y2ggaW4gc3JjX3BhdGNoZXMoZCk6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorCisgICAgICAgIGlmICJwYXRjaGRpciIgaW4gcGFybToKKyAgICAgICAgICAgIHBhdGNoZGlyID0gcGFybVsicGF0Y2hkaXIiXQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMocGF0Y2hkaXIpOgorICAgICAgICAgICAgICAgIHBhdGNoZGlyID0gb3MucGF0aC5qb2luKHMsIHBhdGNoZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0Y2hkaXIgPSBzCisKKyAgICAgICAgaWYgbm90IHBhdGNoZGlyIGluIGNsYXNzZXM6CisgICAgICAgICAgICBwYXRjaHNldCA9IGNscyhwYXRjaGRpciwgZCkKKyAgICAgICAgICAgIHJlc29sdmVyID0gcmNscyhwYXRjaHNldCwgb2VfdGVybWluYWwpCisgICAgICAgICAgICBjbGFzc2VzW3BhdGNoZGlyXSA9IChwYXRjaHNldCwgcmVzb2x2ZXIpCisgICAgICAgICAgICBwYXRjaHNldC5DbGVhbigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRjaHNldCwgcmVzb2x2ZXIgPSBjbGFzc2VzW3BhdGNoZGlyXQorCisgICAgICAgIGJiLm5vdGUoIkFwcGx5aW5nIHBhdGNoICclcycgKCVzKSIgJSAocGFybVsncGF0Y2huYW1lJ10sIG9lLnBhdGguZm9ybWF0X2Rpc3BsYXkobG9jYWwsIGQpKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0Y2hzZXQuSW1wb3J0KHsiZmlsZSI6bG9jYWwsICJzdHJpcHBhdGgiOiBwYXJtWydzdHJpcGxldmVsJ119LCBUcnVlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShwcm9jZXNzX3RtcGRpciwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLmZhdGFsKHN0cihleGMpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNvbHZlci5SZXNvbHZlKCkKKyAgICAgICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQorICAgICAgICAgICAgYmIuZmF0YWwoc3RyKGUpKQorCisgICAgYmIudXRpbHMucmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQorICAgIGRlbCBvcy5lbnZpcm9uWydUTVBESVInXQorfQorcGF0Y2hfZG9fcGF0Y2hbdmFyZGVwc2V4Y2x1ZGVdID0gIlBBVENIUkVTT0xWRSIKKworYWRkdGFzayBwYXRjaCBhZnRlciBkb191bnBhY2sKK2RvX3BhdGNoW2RpcnNdID0gIiR7V09SS0RJUn0iCitkb19wYXRjaFtkZXBlbmRzXSA9ICIke1BBVENIREVQRU5ERU5DWX0iCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fcGF0Y2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BlcmxuYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BlcmxuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzhkZThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGVybG5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsMyBAQAorRVhUUkFOQVRJVkVQQVRIICs9ICJwZXJsLW5hdGl2ZSIKK0RFUEVORFMgKz0gInBlcmwtbmF0aXZlIgorT0VDTUFLRV9QRVJMTkFUSVZFX0RJUiA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGl4YnVmY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk5NjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGl4YnVmY2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDY3IEBACisjCisjIFRoaXMgY2xhc3Mgd2lsbCBnZW5lcmF0ZSB0aGUgcHJvcGVyIHBvc3RpbnN0L3Bvc3RybSBzY3JpcHRsZXRzIGZvciBwaXhidWYKKyMgcGFja2FnZXMuCisjCisKK0RFUEVORFMgKz0gInFlbXUtbmF0aXZlIgoraW5oZXJpdCBxZW11CisKK1BJWEJVRl9QQUNLQUdFUyA/Pz0gIiR7UE59IgorCitwaXhidWZjYWNoZV9jb21tb24oKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJJElOVEVSQ0VQVF9ESVIvcG9zdGluc3RfaW50ZXJjZXB0IHVwZGF0ZV9waXhidWZfY2FjaGUgJHtQS0d9IG1scHJlZml4PSR7TUxQUkVGSVh9IGxpYmRpcj0ke2xpYmRpcn0gXAorCQliaW5kaXI9JHtiaW5kaXJ9IGJhc2VfbGliZGlyPSR7YmFzZV9saWJkaXJ9CitlbHNlCisKKwkjIFVwZGF0ZSB0aGUgcGl4YnVmIGxvYWRlcnMgaW4gY2FzZSB0aGV5IGhhdmVuJ3QgYmVlbiByZWdpc3RlcmVkIHlldAorCUdES19QSVhCVUZfTU9EVUxFRElSPSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycyBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUKKworCWlmIFsgLXggJHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSBdICYmIFsgLWQgJHtkYXRhZGlyfS9pY29ucyBdOyB0aGVuCisJCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKjsgZG8KKwkJCWlmIFsgLWQgJHtpY29uZGlyfSBdOyB0aGVuCisJCQkJZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIC10IC1xICR7aWNvbmRpcn0KKwkJCWZpCisJCWRvbmUKKwlmaQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCgpIHsKKyAgICBwaXhidWZfcGtncyA9IGQuZ2V0VmFyKCdQSVhCVUZfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICBmb3IgcGtnIGluIHBpeGJ1Zl9wa2dzOgorICAgICAgICBiYi5ub3RlKCJhZGRpbmcgcGl4YnVmIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ3BpeGJ1ZmNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdwaXhidWZjYWNoZV9jb21tb24nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKK30KKworZ2RrcGl4YnVmX2NvbXBsZXRlKCkgeworCUdES19QSVhCVUZfRkFUQUxfTE9BREVSPTEgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZSB8fCBleGl0IDEKK30KKworIworIyBBZGQgYW4gc3N0YXRlIHBvc3RpbnN0IGhvb2sgdG8gdXBkYXRlIHRoZSBjYWNoZSBmb3IgbmF0aXZlIHBhY2thZ2VzLgorIyBBbiBlcnJvciBleGl0IGR1cmluZyBwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIGFsbG93cyBiaXRiYWtlIHRvCisjIHRyeSB0byByZWNvdmVyIGJ5IHJlLWJ1aWxkaW5nIHRoZSBwYWNrYWdlLgorIworU1NUQVRFUE9TVElOU1RGVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBwaXhidWZjYWNoZV9zc3RhdGVfcG9zdGluc3QiCisKKyMgU2VlIGJhc2UuYmJjbGFzcyBmb3IgdGhlIG90aGVyIGhhbGYgb2YgdGhpcworcGl4YnVmY2FjaGVfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiBdOyB0aGVuCisJCSR7Z2RrcGl4YnVmX2NvbXBsZXRlfQorCWVsaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF07IHRoZW4KKwkJZWNobyAiJHtnZGtwaXhidWZfY29tcGxldGV9IiA+PiAke1NUQUdJTkdfRElSfS9zc3RhdGVjb21wbGV0aW9ucworCWZpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BrZ2NvbmZpZy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxZjg0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BrZ2NvbmZpZy5iYmNsYXNzCkBAIC0wLDAgKzEsMiBAQAorREVQRU5EU19wcmVwZW5kID0gInBrZ2NvbmZpZy1uYXRpdmUgIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGsuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NGE5MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGsuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKKyMgVGhlIG1ham9yaXR5IG9mIHBvcHVsYXRlX3NkayBpcyBsb2NhdGVkIGluIHBvcHVsYXRlX3Nka19iYXNlCisjIFRoaXMgY2h1bmsgc2ltcGx5IGZhY2lsaXRhdGVzIGNvbXBhdGliaWxpdHkgd2l0aCBTREsgb25seSByZWNpcGVzLgorCitpbmhlcml0IHBvcHVsYXRlX3Nka19iYXNlCisKK2FkZHRhc2sgcG9wdWxhdGVfc2RrIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2J1aWxkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2E5YTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjAzIEBACitpbmhlcml0IG1ldGEKKworIyBXaWxkY2FyZHMgc3BlY2lmeWluZyBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIHRvIGluc3RhbGwgZm9yIGV2ZXJ5IHBhY2thZ2UgdGhhdCBoYXMgYmVlbiBleHBsaWNpdGx5CisjIGluc3RhbGxlZCBpbnRvIHRoZSByb290ZnMKK0NPTVBMRU1FTlRBUllfR0xPQltkZXYtcGtnc10gPSAnKi1kZXYnCitDT01QTEVNRU5UQVJZX0dMT0Jbc3RhdGljZGV2LXBrZ3NdID0gJyotc3RhdGljZGV2JworQ09NUExFTUVOVEFSWV9HTE9CW2RvYy1wa2dzXSA9ICcqLWRvYycKK0NPTVBMRU1FTlRBUllfR0xPQltkYmctcGtnc10gPSAnKi1kYmcnCitDT01QTEVNRU5UQVJZX0dMT0JbcHRlc3QtcGtnc10gPSAnKi1wdGVzdCcKKworZGVmIGNvbXBsZW1lbnRhcnlfZ2xvYnMoZmVhdHVyZXZhciwgZCk6CisgICAgYWxsX2dsb2JzID0gZC5nZXRWYXJGbGFncygnQ09NUExFTUVOVEFSWV9HTE9CJykKKyAgICBnbG9icyA9IFtdCisgICAgZmVhdHVyZXMgPSBzZXQoKGQuZ2V0VmFyKGZlYXR1cmV2YXIsIFRydWUpIG9yICcnKS5zcGxpdCgpKQorICAgIGZvciBuYW1lLCBnbG9iIGluIGFsbF9nbG9icy5pdGVtcygpOgorICAgICAgICBpZiBuYW1lIGluIGZlYXR1cmVzOgorICAgICAgICAgICAgZ2xvYnMuYXBwZW5kKGdsb2IpCisgICAgcmV0dXJuICcgJy5qb2luKGdsb2JzKQorCitTREtJTUFHRV9GRUFUVVJFUyA/Pz0gImRldi1wa2dzIGRiZy1wa2dzIgorU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZID0gJyR7QGNvbXBsZW1lbnRhcnlfZ2xvYnMoIlNES0lNQUdFX0ZFQVRVUkVTIiwgZCl9JworCitpbmhlcml0IHJvb3Rmc18ke0lNQUdFX1BLR1RZUEV9CisKK1NES19ESVIgPSAiJHtXT1JLRElSfS9zZGsiCitTREtfT1VUUFVUID0gIiR7U0RLX0RJUn0vaW1hZ2UiCitTREtfREVQTE9ZID0gIiR7REVQTE9ZX0RJUn0vc2RrIgorCitCX3Rhc2stcG9wdWxhdGUtc2RrID0gIiR7U0RLX0RJUn0iCisKK1NES1RBUkdFVFNZU1JPT1QgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID89ICJuYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0IHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSA/PSAiIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLID89ICIgXAorICAgICR7QG11bHRpbGliX3BrZ19leHRlbmQoZCwgJ3BhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCcpfSBcCisgICAgJHtAbXVsdGlsaWJfcGtnX2V4dGVuZChkLCAncGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LWRiZycpfSBcCisgICAgIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZID89ICIiCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtTREtfTkFNRX0tdG9vbGNoYWluLSR7U0RLX1ZFUlNJT059IgorCitTREtfUkRFUEVORFMgPSAiJHtUT09MQ0hBSU5fVEFSR0VUX1RBU0t9ICR7VE9PTENIQUlOX0hPU1RfVEFTS30iCitTREtfREVQRU5EUyA9ICJ2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZSBwYnppcDItbmF0aXZlIgorCisjIFdlIHdhbnQgdGhlIE1VTFRJQVJDSF9UQVJHRVRfU1lTIHRvIHBvaW50IHRvIHRoZSBUVU5FX1BLR0FSQ0gsIG5vdCBQQUNLQUdFX0FSQ0ggYXMgaXQKKyMgY291bGQgYmUgc2V0IHRvIHRoZSBNQUNISU5FX0FSQ0gKK1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAiJHtUVU5FX1BLR0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKK1BJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitTREtfUEFDS0FHSU5HX0ZVTkMgPz0gImNyZWF0ZV9zaGFyIgorU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkQgPz0gIiIKK1NES19QT1NUX0lOU1RBTExfQ09NTUFORCA/PSAiIgorU0RLX1JFTE9DQVRFX0FGVEVSX0lOU1RBTEwgPz0gIjEiCisKK1NES0VYVFBBVEggPz0gIn4vJHtAZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpfV9zZGsiCitTREtfVElUTEUgPz0gIiR7QGQuZ2V0VmFyKCdESVNUUk9fTkFNRScsIFRydWUpIG9yIGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX0gU0RLIgorCitTREtfVEFSR0VUX01BTklGRVNUID0gIiR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyZ2V0Lm1hbmlmZXN0IgorU0RLX0hPU1RfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5ob3N0Lm1hbmlmZXN0IgorcHl0aG9uIHdyaXRlX3RhcmdldF9zZGtfbWFuaWZlc3QgKCkgeworICAgIGZyb20gb2Uuc2RrIGltcG9ydCBzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKKyAgICBzZGttYW5pZmVzdGRpciA9IG9zLnBhdGguZGlybmFtZShkLmdldFZhcigiU0RLX1RBUkdFVF9NQU5JRkVTVCIsIFRydWUpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZGttYW5pZmVzdGRpcik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZGttYW5pZmVzdGRpcikKKyAgICB3aXRoIG9wZW4oZC5nZXRWYXIoJ1NES19UQVJHRVRfTUFOSUZFU1QnLCBUcnVlKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgIG91dHB1dC53cml0ZShzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgVHJ1ZSwgJ3ZlcicpKQorfQorCitweXRob24gd3JpdGVfaG9zdF9zZGtfbWFuaWZlc3QgKCkgeworICAgIGZyb20gb2Uuc2RrIGltcG9ydCBzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKKyAgICBzZGttYW5pZmVzdGRpciA9IG9zLnBhdGguZGlybmFtZShkLmdldFZhcigiU0RLX0hPU1RfTUFOSUZFU1QiLCBUcnVlKSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2RrbWFuaWZlc3RkaXIpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2RrbWFuaWZlc3RkaXIpCisgICAgd2l0aCBvcGVuKGQuZ2V0VmFyKCdTREtfSE9TVF9NQU5JRkVTVCcsIFRydWUpLCAndycpIGFzIG91dHB1dDoKKyAgICAgICAgb3V0cHV0LndyaXRlKHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBGYWxzZSwgJ3ZlcicpKQorfQorCitQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORF9hcHBlbmQgPSAiIHdyaXRlX3RhcmdldF9zZGtfbWFuaWZlc3QgOyAiCitQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkRfYXBwZW5kID0gIiB3cml0ZV9ob3N0X3Nka19tYW5pZmVzdDsgIgorCisjIFNvbWUgYXJjaHMgb3ZlcnJpZGUgdGhpcywgd2UgbmVlZCB0aGUgbmF0aXZlc2RrIHZlcnNpb24KKyMgdHVybnMgb3V0IHRoaXMgaXMgaGFyZCB0byBnZXQgZnJvbSB0aGUgZGF0YXN0b3JlIGR1ZSB0byBUUkFOU0xBVEVEX1RBUkdFVF9BUkNICisjIG1hbmlwdWxhdGlvbi4KK1NES19PTERFU1RfS0VSTkVMID0gIjIuNi4zMiIKKworZmFrZXJvb3QgcHl0aG9uIGRvX3BvcHVsYXRlX3NkaygpIHsKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgcG9wdWxhdGVfc2RrCisgICAgZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgY3JlYXRlX21hbmlmZXN0LCBNYW5pZmVzdAorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyIsIHBuLCBkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSIsIHBuLCBkKQorCisgICAgbGQgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsZC5zZXRWYXIoIlBLR0RBVEFfRElSIiwgIiR7U1RBR0lOR19ESVJ9LyR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7U0RLX1ZFTkRPUn0tJHtTREtfT1N9L3BrZ2RhdGEiKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9IT1NUX1RBU0siLCBwbiwgbGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIHBuLCBsZCkKKyAgICBkLnNldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTSyIsIGxkLmdldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTSyIsIFRydWUpKQorICAgIGQuc2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZIiwgbGQuZ2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZIiwgVHJ1ZSkpCisgICAgCisgICAgIyBjcmVhdGUgdGFyZ2V0L2hvc3QgU0RLIG1hbmlmZXN0cworICAgIGNyZWF0ZV9tYW5pZmVzdChkLCBtYW5pZmVzdF9kaXI9ZC5nZXRWYXIoJ1NES19ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdHlwZT1NYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorICAgIGNyZWF0ZV9tYW5pZmVzdChkLCBtYW5pZmVzdF9kaXI9ZC5nZXRWYXIoJ1NES19ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdHlwZT1NYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisKKyAgICBwb3B1bGF0ZV9zZGsoZCkKKworICAgICMgUHJvY2VzcyBERUZBVUxUVFVORQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY3JlYXRlX3Nka19maWxlcyIsIGQpCisKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInRhcl9zZGsiLCBkKQorCisgICAgc2RrX3BhY2thZ2luZ19mdW5jID0gZC5nZXRWYXIoIlNES19QQUNLQUdJTkdfRlVOQyIsIFRydWUpIG9yICIiCisgICAgaWYgc2RrX3BhY2thZ2luZ19mdW5jLnN0cmlwKCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhkLmdldFZhcigiU0RLX1BBQ0tBR0lOR19GVU5DIiwgVHJ1ZSksIGQpCit9CisKK2Zha2Vyb290IGNyZWF0ZV9zZGtfZmlsZXMoKSB7CisJY3AgJHtDT1JFQkFTRX0vc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9LworCisJIyBSZXBsYWNlIHRoZSAjI0RFRkFVTFRfSU5TVEFMTF9ESVIjIyB3aXRoIHRoZSBjb3JyZWN0IHBhdHRlcm4uCisJIyBFc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgJysnIGFuZCAnLicgaW4gdGhlIFNES1BBVEgKKwllc2NhcGVkX3Nka3BhdGg9JChlY2hvICR7U0RLUEFUSH0gfHNlZCAtZSAiczpbXCtcLl06XFxcXFxcXFxcMDpnIikKKwlzZWQgLWkgLWUgInM6IyNERUZBVUxUX0lOU1RBTExfRElSIyM6JGVzY2FwZWRfc2RrcGF0aDoiICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9yZWxvY2F0ZV9zZGsucHkKK30KKworU0RLVEFST1BUUyA9ICItLW93bmVyPXJvb3QgLS1ncm91cD1yb290IgorCitmYWtlcm9vdCB0YXJfc2RrKCkgeworCSMgUGFja2FnZSBpdCB1cAorCW1rZGlyIC1wICR7U0RLX0RFUExPWX0KKwljZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KKwl0YXIgJHtTREtUQVJPUFRTfSAtY2YgLSAuIHwgcGJ6aXAyID4gJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyCit9CisKK2Zha2Vyb290IGNyZWF0ZV9zaGFyKCkgeworCSMgY29weSBpbiB0aGUgdGVtcGxhdGUgc2hhciBleHRyYWN0b3Igc2NyaXB0CisJY3AgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1leHRyYWN0LnNoICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCXJtIC1mICR7VH0vcHJlX2luc3RhbGxfY29tbWFuZCAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kCisKKwlpZiBbICR7U0RLX1JFTE9DQVRFX0FGVEVSX0lOU1RBTEx9IC1lcSAxIF0gOyB0aGVuCisJCWNwICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2ggJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZAorCWZpCisJY2F0IDw8ICJFT0YiID4+ICR7VH0vcHJlX2luc3RhbGxfY29tbWFuZAorJHtTREtfUFJFX0lOU1RBTExfQ09NTUFORH0KK0VPRgorCisJY2F0IDw8ICJFT0YiID4+ICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQKKyR7U0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EfQorRU9GCisJc2VkIC1pIC1lICcvQFNES19QUkVfSU5TVEFMTF9DT01NQU5EQC9yICR7VH0vcHJlX2luc3RhbGxfY29tbWFuZCcgXAorCQktZSAnL0BTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRAL3IgJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZCcgXAorCQkke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwkjIHN1YnN0aXR1dGUgdmFyaWFibGVzCisJc2VkIC1pIC1lICdzI0BTREtfQVJDSEAjJHtTREtfQVJDSH0jZycgXAorCQktZSAncyNAU0RLUEFUSEAjJHtTREtQQVRIfSNnJyBcCisJCS1lICdzI0BTREtFWFRQQVRIQCMke1NES0VYVFBBVEh9I2cnIFwKKwkJLWUgJ3MjQE9MREVTVF9LRVJORUxAIyR7U0RLX09MREVTVF9LRVJORUx9I2cnIFwKKwkJLWUgJ3MjQFJFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVNAIyR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30jZycgXAorCQktZSAncyNAU0RLX1RJVExFQCMke1NES19USVRMRX0jZycgXAorCQktZSAncyNAU0RLX1ZFUlNJT05AIyR7U0RLX1ZFUlNJT059I2cnIFwKKwkJLWUgJy9AU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRAL2QnIFwKKwkJLWUgJy9AU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQC9kJyBcCisJCSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgYWRkIGV4ZWN1dGlvbiBwZXJtaXNzaW9uCisJY2htb2QgK3ggJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBhcHBlbmQgdGhlIFNESyB0YXJiYWxsCisJY2F0ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MiA+PiAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwkjIGRlbGV0ZSB0aGUgb2xkIHRhcmJhbGwsIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZQorCXJtICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MgorfQorCitwb3B1bGF0ZV9zZGtfbG9nX2NoZWNrKCkgeworCWZvciB0YXJnZXQgaW4gJCoKKwlkbworCQlsZl9wYXRoPSJgZGlybmFtZSAke0JCX0xPR0ZJTEV9YC9sb2cuZG9fJHRhcmdldC4ke1BJRH0iCisKKwkJZWNobyAibG9nX2NoZWNrOiBVc2luZyAkbGZfcGF0aCBhcyBsb2dmaWxlIgorCisJCWlmIHRlc3QgLWUgIiRsZl9wYXRoIgorCQl0aGVuCisJCQkke0lNQUdFX1BLR1RZUEV9X2xvZ19jaGVjayAkdGFyZ2V0ICRsZl9wYXRoCisJCWVsc2UKKwkJCWVjaG8gIkNhbm5vdCBmaW5kIGxvZ2ZpbGUgWyRsZl9wYXRoXSIKKwkJZmkKKwkJZWNobyAiTG9nZmlsZSBpcyBjbGVhbiIKKwlkb25lCit9CisKK2RvX3BvcHVsYXRlX3Nka1tkaXJzXSA9ICIke1RPUERJUn0iCitkb19wb3B1bGF0ZV9zZGtbZGVwZW5kc10gKz0gIiR7QCcgJy5qb2luKFt4ICsgJzpkb19wb3B1bGF0ZV9zeXNyb290JyBmb3IgeCBpbiBkLmdldFZhcignU0RLX0RFUEVORFMnLCBUcnVlKS5zcGxpdCgpXSl9ICAke0BkLmdldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdkZXBlbmRzJywgRmFsc2UpfSIKK2RvX3BvcHVsYXRlX3Nka1tyZGVwZW5kc10gPSAiJHtAJyAnLmpvaW4oW3ggKyAnOmRvX3BvcHVsYXRlX3N5c3Jvb3QnIGZvciB4IGluIGQuZ2V0VmFyKCdTREtfUkRFUEVORFMnLCBUcnVlKS5zcGxpdCgpXSl9IgorZG9fcG9wdWxhdGVfc2RrW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZV93cml0ZV9ycG0gZG9fcGFja2FnZV93cml0ZV9pcGsgZG9fcGFja2FnZV93cml0ZV9kZWIiCithZGR0YXNrIHBvcHVsYXRlX3NkawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjg4MzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MKQEAgLTAsMCArMSwyNzUgQEAKKyMgRXh0ZW5zaWJsZSBTREsKKworaW5oZXJpdCBwb3B1bGF0ZV9zZGtfYmFzZQorCisjIE5PVEU6IG5vcm1hbGx5IHlvdSBjYW5ub3QgdXNlIHRhc2sgb3ZlcnJpZGVzIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcgLSB0aGlzCisjIG9ubHkgd29ya3MgYmVjYXVzZSBvZiBnZXRfc2RrX2V4dF9yZGVwZW5kcygpCisKK1RPT0xDSEFJTl9IT1NUX1RBU0tfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiBcCisgICAgbWV0YS1lbnZpcm9ubWVudC1leHRzZGstJHtNQUNISU5FfSBcCisgICAgIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiIKKworU0RLX1JERVBFTkRTX2FwcGVuZF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiICR7U0RLX1RBUkdFVFN9IgorCitTREtfUkVMT0NBVEVfQUZURVJfSU5TVEFMTF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiMCIKKworU0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUID89ICIiCitTREtfTE9DQUxfQ09ORl9CTEFDS0xJU1QgPz0gIkNPTkZfVkVSU0lPTiBCQl9OVU1CRVJfVEhSRUFEUyBQQVJBTExFTF9NQUtFIFBSU0VSVl9IT1NUIgorU0RLX0lOSEVSSVRfQkxBQ0tMSVNUID89ICJidWlsZGhpc3RvcnkgaWNlY2MiCitTREtfVVBEQVRFX1VSTCA/PSAiIgorCitTREtfVEFSR0VUUyA/PSAiJHtQTn0iCitPRV9JTklUX0VOVl9TQ1JJUFQgPz0gIm9lLWluaXQtYnVpbGQtZW52IgorCisjIFRoZSBmaWxlcyBmcm9tIENPUkVCQVNFIHRoYXQgeW91IHdhbnQgcHJlc2VydmVkIGluIHRoZSBDT1JFQkFTRSBjb3BpZWQKKyMgaW50byB0aGUgc2RrLiBUaGlzIGFsbG93cyBzb21lb25lIHRvIGhhdmUgdGhlaXIgb3duIHNldHVwIHNjcmlwdHMgaW4KKyMgQ09SRUJBU0UgYmUgcHJlc2VydmVkIGFzIHdlbGwgYXMgdW50cmFja2VkIGZpbGVzLgorQ09SRUJBU0VfRklMRVMgPz0gIiBcCisgICAgb2UtaW5pdC1idWlsZC1lbnYgXAorICAgIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcyBcCisgICAgc2NyaXB0cyBcCisgICAgTElDRU5TRSBcCisgICAgLnRlbXBsYXRlY29uZiBcCisiCisKK1NES19ESVJfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7V09SS0RJUn0vc2RrLWV4dCIKK0JfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7U0RLX0RJUn0iCitUT09MQ0hBSU5fT1VUUFVUTkFNRV90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtTREtfTkFNRX0tdG9vbGNoYWluLWV4dC0ke1NES19WRVJTSU9OfSIKKworU0RLX1RJVExFX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke0BkLmdldFZhcignRElTVFJPX05BTUUnLCBUcnVlKSBvciBkLmdldFZhcignRElTVFJPJywgVHJ1ZSl9IEV4dGVuc2libGUgU0RLIgorCitweXRob24gY29weV9idWlsZHN5c3RlbSAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IG9lLmNvcHlfYnVpbGRzeXN0ZW0KKworICAgIG9lX2luaXRfZW52X3NjcmlwdCA9IGQuZ2V0VmFyKCdPRV9JTklUX0VOVl9TQ1JJUFQnLCBUcnVlKQorCisgICAgY29uZl9iYnBhdGggPSAnJworICAgIGNvbmZfaW5pdHBhdGggPSAnJworICAgIGNvcmVfbWV0YV9zdWJkaXIgPSAnJworCisgICAgIyBDb3B5IGluIGFsbCBtZXRhZGF0YSBsYXllcnMgKyBiaXRiYWtlIChhcyByZXBvc2l0b3JpZXMpCisgICAgYnVpbGRzeXN0ZW0gPSBvZS5jb3B5X2J1aWxkc3lzdGVtLkJ1aWxkU3lzdGVtKGQpCisgICAgYmFzZW91dHBhdGggPSBkLmdldFZhcignU0RLX09VVFBVVCcsIFRydWUpICsgJy8nICsgZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKQorICAgIGxheWVyc19jb3BpZWQgPSBidWlsZHN5c3RlbS5jb3B5X2JpdGJha2VfYW5kX2xheWVycyhiYXNlb3V0cGF0aCArICcvbGF5ZXJzJykKKworICAgIHNka2JibGF5ZXJzID0gW10KKyAgICBjb3JlYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoJ0NPUkVCQVNFJywgVHJ1ZSkpCisgICAgZm9yIGxheWVyIGluIGxheWVyc19jb3BpZWQ6CisgICAgICAgIGlmIGNvcmViYXNlID09IG9zLnBhdGguYmFzZW5hbWUobGF5ZXIpOgorICAgICAgICAgICAgY29uZl9iYnBhdGggPSBvcy5wYXRoLmpvaW4oJ2xheWVycycsIGxheWVyLCAnYml0YmFrZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZGtiYmxheWVycy5hcHBlbmQobGF5ZXIpCisKKyAgICBmb3IgcGF0aCBpbiBvcy5saXN0ZGlyKGJhc2VvdXRwYXRoICsgJy9sYXllcnMnKToKKyAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgcGF0aCwgb2VfaW5pdF9lbnZfc2NyaXB0KQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsIHJlbHBhdGgpKToKKyAgICAgICAgICAgIGNvbmZfaW5pdHBhdGggPSByZWxwYXRoCisKKyAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgcGF0aCwgJ3NjcmlwdHMnLCAnZGV2dG9vbCcpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgcmVscGF0aCkpOgorICAgICAgICAgICAgc2NyaXB0cmVscGF0aCA9IG9zLnBhdGguZGlybmFtZShyZWxwYXRoKQorCisgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLmpvaW4oJ2xheWVycycsIHBhdGgsICdtZXRhJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCByZWxwYXRoLCAnbGliJywgJ29lJykpOgorICAgICAgICAgICAgY29yZV9tZXRhX3N1YmRpciA9IHJlbHBhdGgKKworICAgIGQuc2V0VmFyKCdvZV9pbml0X2J1aWxkX2Vudl9wYXRoJywgY29uZl9pbml0cGF0aCkKKyAgICBkLnNldFZhcignc2NyaXB0cmVscGF0aCcsIHNjcmlwdHJlbHBhdGgpCisKKyAgICAjIFdyaXRlIG91dCBjb25maWcgZmlsZSBmb3IgZGV2dG9vbAorICAgIGltcG9ydCBDb25maWdQYXJzZXIKKyAgICBjb25maWcgPSBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCisgICAgY29uZmlnLmFkZF9zZWN0aW9uKCdHZW5lcmFsJykKKyAgICBjb25maWcuc2V0KCdHZW5lcmFsJywgJ2JpdGJha2Vfc3ViZGlyJywgY29uZl9iYnBhdGgpCisgICAgY29uZmlnLnNldCgnR2VuZXJhbCcsICdpbml0X3BhdGgnLCBjb25mX2luaXRwYXRoKQorICAgIGNvbmZpZy5zZXQoJ0dlbmVyYWwnLCAnY29yZV9tZXRhX3N1YmRpcicsIGNvcmVfbWV0YV9zdWJkaXIpCisgICAgY29uZmlnLmFkZF9zZWN0aW9uKCdTREsnKQorICAgIGNvbmZpZy5zZXQoJ1NESycsICdzZGtfdGFyZ2V0cycsIGQuZ2V0VmFyKCdTREtfVEFSR0VUUycsIFRydWUpKQorICAgIHVwZGF0ZXVybCA9IGQuZ2V0VmFyKCdTREtfVVBEQVRFX1VSTCcsIFRydWUpCisgICAgaWYgdXBkYXRldXJsOgorICAgICAgICBjb25maWcuc2V0KCdTREsnLCAndXBkYXRlc2VydmVyJywgdXBkYXRldXJsKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsICdjb25mJykpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgJ2NvbmYnLCAnZGV2dG9vbC5jb25mJyksICd3JykgYXMgZjoKKyAgICAgICAgY29uZmlnLndyaXRlKGYpCisKKyAgICAjIENyZWF0ZSBhIGxheWVyIGZvciBuZXcgcmVjaXBlcyAvIGFwcGVuZHMKKyAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICBiYi5wcm9jZXNzLnJ1bihbJ2RldnRvb2wnLCAnLS1iYnBhdGgnLCBiYnBhdGgsICctLWJhc2VwYXRoJywgYmFzZW91dHBhdGgsICdjcmVhdGUtd29ya3NwYWNlJywgJy0tY3JlYXRlLW9ubHknLCBvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsICd3b3Jrc3BhY2UnKV0pCisKKyAgICAjIENyZWF0ZSBiYmxheWVycy5jb25mCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGJhc2VvdXRwYXRoICsgJy9jb25mJykKKyAgICB3aXRoIG9wZW4oYmFzZW91dHBhdGggKyAnL2NvbmYvYmJsYXllcnMuY29uZicsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnIyBXQVJOSU5HOiB0aGlzIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5kIGluXG4nKQorICAgICAgICBmLndyaXRlKCcjIG1vc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBlZGl0ZWQuIElmIHlvdSBuZWVkIG1vcmUgZmxleGliaWxpdHkgdGhhblxuJykKKyAgICAgICAgZi53cml0ZSgnIyB0aGlzIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMsIGl0IGlzIHN0cm9uZ2x5IHN1Z2dlc3RlZCB0aGF0IHlvdSBzZXRcbicpCisgICAgICAgIGYud3JpdGUoJyMgdXAgYSBwcm9wZXIgaW5zdGFuY2Ugb2YgdGhlIGZ1bGwgYnVpbGQgc3lzdGVtIGFuZCB1c2UgdGhhdCBpbnN0ZWFkLlxuXG4nKQorCisgICAgICAgIGYud3JpdGUoJ0xDT05GX1ZFUlNJT04gPSAiJXMiXG5cbicgJSBkLmdldFZhcignTENPTkZfVkVSU0lPTicsIEZhbHNlKSkKKyAgICAgICAgZi53cml0ZSgnQkJQQVRIID0gIiQnICsgJ3tUT1BESVJ9IlxuJykKKyAgICAgICAgZi53cml0ZSgnU0RLQkFTRU1FVEFQQVRIID0gIiQnICsgJ3tUT1BESVJ9IlxuJykKKyAgICAgICAgZi53cml0ZSgnQkJMQVlFUlMgOj0gIiBcXFxuJykKKyAgICAgICAgZm9yIGxheWVycmVscGF0aCBpbiBzZGtiYmxheWVyczoKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAkJyArICd7U0RLQkFTRU1FVEFQQVRIfS9sYXllcnMvJXMgXFxcbicgJSBsYXllcnJlbHBhdGgpCisgICAgICAgIGYud3JpdGUoJyAgICAkJyArICd7U0RLQkFTRU1FVEFQQVRIfS93b3Jrc3BhY2UgXFxcbicpCisgICAgICAgIGYud3JpdGUoJyAgICAiXG4nKQorCisgICAgIyBDcmVhdGUgbG9jYWwuY29uZgorICAgIGxvY2FsX2NvbmZfd2hpdGVsaXN0ID0gKGQuZ2V0VmFyKCdTREtfTE9DQUxfQ09ORl9XSElURUxJU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGxvY2FsX2NvbmZfYmxhY2tsaXN0ID0gKGQuZ2V0VmFyKCdTREtfTE9DQUxfQ09ORl9CTEFDS0xJU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGRlZiBoYW5kbGVfdmFyKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgaWYgdmFybmFtZSBpbiBsb2NhbF9jb25mX2JsYWNrbGlzdCBvciAob3JpZ3ZhbHVlLnN0cmlwKCkuc3RhcnRzd2l0aCgnLycpIGFuZCBub3QgdmFybmFtZSBpbiBsb2NhbF9jb25mX3doaXRlbGlzdCk6CisgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyMgUmVtb3ZlZCBvcmlnaW5hbCBzZXR0aW5nIG9mICVzXG4nICUgdmFybmFtZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBvcCwgMCwgVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG9yaWd2YWx1ZSwgb3AsIDAsIFRydWUKKyAgICB2YXJsaXN0ID0gWydbXiM9KyBdKiddCisgICAgYnVpbGRkaXIgPSBkLmdldFZhcignVE9QRElSJywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4oYnVpbGRkaXIgKyAnL2NvbmYvbG9jYWwuY29uZicsICdyJykgYXMgZjoKKyAgICAgICAgb2xkbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgKHVwZGF0ZWQsIG5ld2xpbmVzKSA9IGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEob2xkbGluZXMsIHZhcmxpc3QsIGhhbmRsZV92YXIpCisKKyAgICB3aXRoIG9wZW4oYmFzZW91dHBhdGggKyAnL2NvbmYvbG9jYWwuY29uZicsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnIyBXQVJOSU5HOiB0aGlzIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5kIGluXG4nKQorICAgICAgICBmLndyaXRlKCcjIG1vc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBlZGl0ZWQuIElmIHlvdSBuZWVkIG1vcmUgZmxleGliaWxpdHkgdGhhblxuJykKKyAgICAgICAgZi53cml0ZSgnIyB0aGlzIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMsIGl0IGlzIHN0cm9uZ2x5IHN1Z2dlc3RlZCB0aGF0IHlvdSBzZXRcbicpCisgICAgICAgIGYud3JpdGUoJyMgdXAgYSBwcm9wZXIgaW5zdGFuY2Ugb2YgdGhlIGZ1bGwgYnVpbGQgc3lzdGVtIGFuZCB1c2UgdGhhdCBpbnN0ZWFkLlxuXG4nKQorICAgICAgICBmb3IgbGluZSBpbiBuZXdsaW5lczoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKSBhbmQgbm90IGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKworICAgICAgICBmLndyaXRlKCdJTkhFUklUICs9ICIlcyJcblxuJyAlICd1bmluYXRpdmUnKQorICAgICAgICBmLndyaXRlKCdDT05GX1ZFUlNJT04gPSAiJXMiXG5cbicgJSBkLmdldFZhcignQ09ORl9WRVJTSU9OJywgRmFsc2UpKQorCisgICAgICAgICMgU29tZSBjbGFzc2VzIGFyZSBub3Qgc3VpdGFibGUgZm9yIFNESywgcmVtb3ZlIHRoZW0gZnJvbSBJTkhFUklUCisgICAgICAgIGYud3JpdGUoJ0lOSEVSSVRfcmVtb3ZlID0gIiVzIlxuJyAlIGQuZ2V0VmFyKCdTREtfSU5IRVJJVF9CTEFDS0xJU1QnKSkKKworICAgICAgICAjIEJ5cGFzcyB0aGUgZGVmYXVsdCBjb25uZWN0aXZpdHkgY2hlY2sgaWYgYW55CisgICAgICAgIGYud3JpdGUoJ0NPTk5FQ1RJVklUWV9DSEVDS19VUklTID0gIiJcblxuJykKKworICAgICAgICAjIEFub3RoZXIgaGFjaywgYnV0IHdlIHdhbnQgdGhlIG5hdGl2ZSBwYXJ0IG9mIHNzdGF0ZSB0byBiZSBrZXB0IHRoZSBzYW1lCisgICAgICAgICMgcmVnYXJkbGVzcyBvZiB0aGUgaG9zdCBkaXN0cm8KKyAgICAgICAgZml4ZWRsc2JzdHJpbmcgPSAnU0RLLUZpeGVkJworICAgICAgICBmLndyaXRlKCdOQVRJVkVMU0JTVFJJTkdfZm9yY2V2YXJpYWJsZSA9ICIlcyJcblxuJyAlIGZpeGVkbHNic3RyaW5nKQorCisgICAgICAgICMgRW5zdXJlIGxvY2tlZCBzc3RhdGUgY2FjaGUgb2JqZWN0cyBhcmUgcmUtdXNlZCB3aXRob3V0IGVycm9yCisgICAgICAgIGYud3JpdGUoJ1NJR0dFTl9MT0NLRURTSUdTX0NIRUNLX0xFVkVMID0gIndhcm4iXG5cbicpCisKKyAgICAgICAgZi53cml0ZSgncmVxdWlyZSBjb25mL2xvY2tlZC1zaWdzLmluY1xuJykKKyAgICAgICAgZi53cml0ZSgncmVxdWlyZSBjb25mL3dvcmstY29uZmlnLmluY1xuJykKKworICAgIHNpZ2ZpbGUgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpICsgJy9sb2NrZWQtc2lncy5pbmMnCisgICAgb2UuY29weV9idWlsZHN5c3RlbS5nZW5lcmF0ZV9sb2NrZWRfc2lncyhzaWdmaWxlLCBkKQorCisgICAgIyBGaWx0ZXIgdGhlIGxvY2tlZCBzaWduYXR1cmVzIGZpbGUgdG8ganVzdCB0aGUgc3N0YXRlIHRhc2tzIHdlIGFyZSBpbnRlcmVzdGVkIGluCisgICAgYWxsb3dlZF90YXNrcyA9IFsnZG9fcG9wdWxhdGVfbGljJywgJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnLCAnZG9fcGFja2FnZWRhdGEnLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV9xYScsICdkb19kZXBsb3knXQorICAgIGV4Y2x1ZGVkX3RhcmdldHMgPSBkLmdldFZhcignU0RLX1RBUkdFVFMnLCBUcnVlKQorICAgIGxvY2tlZHNpZ3NfcHJ1bmVkID0gYmFzZW91dHBhdGggKyAnL2NvbmYvbG9ja2VkLXNpZ3MuaW5jJworICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0ucHJ1bmVfbG9ja2Vkc2lncyhhbGxvd2VkX3Rhc2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlZF90YXJnZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRzaWdzX3BydW5lZCkKKworICAgIHNzdGF0ZV9vdXQgPSBiYXNlb3V0cGF0aCArICcvc3N0YXRlLWNhY2hlJworICAgIGJiLnV0aWxzLnJlbW92ZShzc3RhdGVfb3V0LCBUcnVlKQorICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0uY3JlYXRlX2xvY2tlZF9zc3RhdGVfY2FjaGUobG9ja2Vkc2lnc19wcnVuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignU1NUQVRFX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3N0YXRlX291dCwgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkbHNic3RyaW5nKQorCisgICAgIyBDcmVhdGUgYSBkdW1teSBjb25maWcgZmlsZSBmb3IgYWRkaXRpb25hbCBzZXR0aW5ncworICAgIHdpdGggb3BlbihiYXNlb3V0cGF0aCArICcvY29uZi93b3JrLWNvbmZpZy5pbmMnLCAndycpIGFzIGY6CisgICAgICAgIHBhc3MKK30KKworZGVmIGV4dHNka19nZXRfYnVpbGR0b29sc19maWxlbmFtZShkKToKKyAgICAjIFRoaXMgaXMgc29tZXdoYXQgb2YgYSBoYWNrCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbG9jYWxkYXRhLnNldFZhcignUE4nLCAnYnVpbGR0b29scy10YXJiYWxsJykKKyAgICByZXR1cm4gbG9jYWxkYXRhLmV4cGFuZCgnJHtTREtfTkFNRX0tYnVpbGR0b29scy1uYXRpdmVzZGstc3RhbmRhbG9uZS0qLnNoJykKKworaW5zdGFsbF90b29scygpIHsKKwlpbnN0YWxsIC1kICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30KKwlsbnIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9LyR7c2NyaXB0cmVscGF0aH0vZGV2dG9vbCAke1NES19PVVRQVVR9LyR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9L2RldnRvb2wKKwlsbnIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9LyR7c2NyaXB0cmVscGF0aH0vcmVjaXBldG9vbCAke1NES19PVVRQVVR9LyR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9L3JlY2lwZXRvb2wKKwl0b3VjaCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vLmRldnRvb2xiYXNlCisKKwkjIGZpbmQgbGF0ZXN0IGJ1aWxkdG9vbHMtdGFyYmFsbCBhbmQgaW5zdGFsbCBpdAorCWJ1aWxkdG9vbHNfcGF0aD1gbHMgLXQxICR7U0RLX0RFUExPWX0vJHtAZXh0c2RrX2dldF9idWlsZHRvb2xzX2ZpbGVuYW1lKGQpfSB8IGhlYWQgLW4xYAorCWluc3RhbGwgJGJ1aWxkdG9vbHNfcGF0aCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KKworCWluc3RhbGwgJHtTREtfREVQTE9ZfS8ke0JVSUxEX0FSQ0h9LW5hdGl2ZXNkay1saWJjLnRhci5iejIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9Cit9CisKKyMgU2luY2UgYml0YmFrZSB3b24ndCBydW4gYXMgcm9vdCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gdHJ5IGFuZCBpbnN0YWxsCisjIHRoZSBleHRlbnNpYmxlIHNkayBhcyByb290Lgorc2RrX2V4dF9wcmVpbnN0KCkgeworCWlmIFsgImBpZCAtdWAiID0gIjAiIF07IHRoZW4KKwkJZWNobyAiRVJST1I6IFRoZSBleHRlbnNpYmxlIHNkayBjYW5ub3QgYmUgaW5zdGFsbGVkIGFzIHJvb3QuIgorCQlleGl0IDEKKwlmaQorCVNES19FWFRFTlNJQkxFPSIxIgorfQorU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7c2RrX2V4dF9wcmVpbnN0fSIKKworIyBGSVhNRSB0aGlzIHByZXBhcmF0aW9uIHNob3VsZCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIFNESyBjb25zdHJ1Y3Rpb24KK3Nka19leHRfcG9zdGluc3QoKSB7CisJcHJpbnRmICJcbkV4dHJhY3RpbmcgYnVpbGR0b29scy4uLlxuIgorCWNkICR0YXJnZXRfc2RrX2RpcgorCXByaW50ZiAiYnVpbGR0b29sc1xueSIgfCAuLypidWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lKiA+IC9kZXYvbnVsbAorCisJIyBNYWtlIHN1cmUgd2hlbiB0aGUgdXNlciBzZXRzIHVwIHRoZSBlbnZpcm9ubWVudCwgdGhleSBhbHNvIGdldAorCSMgdGhlIGJ1aWxkdG9vbHMtdGFyYmFsbCB0b29scyBpbiB0aGVpciBwYXRoLgorCWVjaG8gIi4gJHRhcmdldF9zZGtfZGlyL2J1aWxkdG9vbHMvZW52aXJvbm1lbnQtc2V0dXAqIiA+PiAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAqCisKKwkjIEFsbG93IGJpdGJha2UgZW52aXJvbm1lbnQgc2V0dXAgdG8gYmUgcmFuIGFzIHBhcnQgb2YgdGhpcyBzZGsuCisJZWNobyAiZXhwb3J0IE9FX1NLSVBfU0RLX0NIRUNLPTEiID4+ICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cCoKKworCSMgQSBiaXQgb2YgYW5vdGhlciBoYWNrLCBidXQgd2UgbmVlZCB0aGlzIGluIHRoZSBwYXRoIG9ubHkgZm9yIGRldnRvb2wKKwkjIHNvIHB1dCBpdCBhdCB0aGUgZW5kIG9mICRQQVRILgorCWVjaG8gImV4cG9ydCBQQVRIPVwkUEFUSDokdGFyZ2V0X3Nka19kaXIvc3lzcm9vdHMvJHtTREtfU1lTfS8ke2JpbmRpcl9uYXRpdmVzZGt9IiA+PiAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAqCisKKwkjIEZvciBub3cgdGhpcyBpcyB3aGVyZSB1bmluYXRpdmUuYmJjbGFzcyBleHBlY3RzIHRoZSB0YXJiYWxsCisJbXYgKi1uYXRpdmVzZGstbGliYy50YXIuKiAkdGFyZ2V0X3Nka19kaXIvYGRpcm5hbWUgJHtvZV9pbml0X2J1aWxkX2Vudl9wYXRofWAKKworCWlmIFsgIiRwcmVwYXJlX2J1aWxkc3lzdGVtIiAhPSAibm8iIF07IHRoZW4KKwkgICAgcHJpbnRmICJQcmVwYXJpbmcgYnVpbGQgc3lzdGVtLi4uXG4iCisJICAgICMgZGFzaCB3aGljaCBpcyAvYmluL3NoIG9uIFVidW50dSB3aWxsIG5vdCBwcmVzZXJ2ZSB0aGUKKwkgICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gZmlyc3QgcmFuLCBub3Igd2lsbCBpdCBzZXQgJDEgd2hlbgorCSAgICAjIHNvdXJjaW5nIGEgc2NyaXB0LiBUaGF0IGlzIHdoeSB0aGlzIGhhcyB0byBsb29rIHNvIHVnbHkuCisJICAgIHNoIC1jICIuIGJ1aWxkdG9vbHMvZW52aXJvbm1lbnQtc2V0dXAqID4gcHJlcGFyaW5nX2J1aWxkX3N5c3RlbS5sb2cgJiYgY2QgJHRhcmdldF9zZGtfZGlyL2BkaXJuYW1lICR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH1gICYmIHNldCAkdGFyZ2V0X3Nka19kaXIgJiYgLiAkdGFyZ2V0X3Nka19kaXIvJHtvZV9pbml0X2J1aWxkX2Vudl9wYXRofSAkdGFyZ2V0X3Nka19kaXIgPj4gcHJlcGFyaW5nX2J1aWxkX3N5c3RlbS5sb2cgJiYgYml0YmFrZSAke1NES19UQVJHRVRTfSA+PiBwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyIgfHwgeyBlY2hvICJTREsgcHJlcGFyYXRpb24gZmFpbGVkOiBzZWUgYHB3ZGAvcHJlcGFyaW5nX2J1aWxkX3N5c3RlbS5sb2ciIDsgZXhpdCAxIDsgfQorCWZpCisJZWNobyBkb25lCit9CisKK1NES19QT1NUX0lOU1RBTExfQ09NTUFORF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtzZGtfZXh0X3Bvc3RpbnN0fSIKKworU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkRfcHJlcGVuZF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiY29weV9idWlsZHN5c3RlbTsgaW5zdGFsbF90b29sczsgIgorCitmYWtlcm9vdCBweXRob24gZG9fcG9wdWxhdGVfc2RrX2V4dCgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BvcHVsYXRlX3NkayIsIGQpCit9CisKK2RlZiBnZXRfc2RrX2V4dF9yZGVwZW5kcyhkKToKKyAgICBsb2NhbGRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorICAgIGxvY2FsZGF0YS5hcHBlbmRWYXIoJ09WRVJSSURFUycsICc6dGFzay1wb3B1bGF0ZS1zZGstZXh0JykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICByZXR1cm4gbG9jYWxkYXRhLmdldFZhckZsYWcoJ2RvX3BvcHVsYXRlX3NkaycsICdyZGVwZW5kcycsIFRydWUpCisKK2RvX3BvcHVsYXRlX3Nka19leHRbZGlyc10gPSAiJHtAZC5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAnZGlycycsIEZhbHNlKX0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W2RlcGVuZHNdICs9ICIke0BkLmdldFZhckZsYWcoJ2RvX3BvcHVsYXRlX3NkaycsICdkZXBlbmRzJywgRmFsc2UpfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbcmRlcGVuZHNdID0gIiR7QGdldF9zZGtfZXh0X3JkZXBlbmRzKGQpfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbcmVjcmRlcHRhc2tdICs9ICIke0BkLmdldFZhckZsYWcoJ2RvX3BvcHVsYXRlX3NkaycsICdyZWNyZGVwdGFzaycsIEZhbHNlKX0iCisKKworZG9fcG9wdWxhdGVfc2RrX2V4dFtkZXBlbmRzXSArPSAiYnVpbGR0b29scy10YXJiYWxsOmRvX3BvcHVsYXRlX3NkayB1bmluYXRpdmUtdGFyYmFsbDpkb19wb3B1bGF0ZV9zZGsiCisKK2RvX3BvcHVsYXRlX3Nka19leHRbcmRlcGVuZHNdICs9ICIke0AnICcuam9pbihbeCArICc6ZG9fYnVpbGQnIGZvciB4IGluIGQuZ2V0VmFyKCdTREtfVEFSR0VUUycsIFRydWUpLnNwbGl0KCldKX0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W3JlY3JkZXB0YXNrXSArPSAiZG9fcG9wdWxhdGVfbGljIGRvX3BhY2thZ2VfcWEgZG9fcG9wdWxhdGVfc3lzcm9vdCBkb19kZXBsb3kiCisKKyMgTWFrZSBzdXJlIGNvZGVzIGNoYW5nZSBpbiBjb3B5X2J1aWxkc3lzdGVtIGNhbiByZXN1bHQgaW4gcmVidWlsdAorZG9fcG9wdWxhdGVfc2RrX2V4dFt2YXJkZXBzXSArPSAiY29weV9idWlsZHN5c3RlbSIKKworYWRkdGFzayBwb3B1bGF0ZV9zZGtfZXh0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcmV4cG9ydC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJleHBvcnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFjYjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJleHBvcnQuYmJjbGFzcwpAQCAtMCwwICsxLDU4IEBACitQUlNFUlZfRFVNUE9QVF9WRVJTSU9OID0gIiR7UFJBVVRPSU5YfSIKK1BSU0VSVl9EVU1QT1BUX1BLR0FSQ0ggID0gIiIKK1BSU0VSVl9EVU1QT1BUX0NIRUNLU1VNID0gIiIKK1BSU0VSVl9EVU1QT1BUX0NPTCA9ICIwIgorCitQUlNFUlZfRFVNUERJUiA/Pz0gIiR7TE9HX0RJUn0vZGIiCitQUlNFUlZfRFVNUEZJTEUgPz89ICIke1BSU0VSVl9EVU1QRElSfS9wcnNlcnYuaW5jIgorCitweXRob24gcHJleHBvcnRfaGFuZGxlciAoKSB7CisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCk6CisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgI2dldCBhbGwgUFIgdmFsdWVzIGZvciB0aGUgY3VycmVudCBQUkFVVE9JTlgKKyAgICAgICAgdmVyID0gZS5kYXRhLmdldFZhcignUFJTRVJWX0RVTVBPUFRfVkVSU0lPTicsIFRydWUpCisgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCclJywnLScpCisgICAgICAgIHJldHZhbCA9IG9lLnByc2VydmljZS5wcnNlcnZfZHVtcF9kYihlLmRhdGEpCisgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICBiYi5mYXRhbCgicHJleHBvcnRfaGFuZGxlcjogZXhwb3J0IGZhaWxlZCEiKQorICAgICAgICAobWV0YWluZm8sIGRhdGFpbmZvKSA9IHJldHZhbAorICAgICAgICBpZiBub3QgZGF0YWluZm86CisgICAgICAgICAgICBiYi53YXJuKCJwcmV4cG9ydF9oYW5kbGVyOiBObyBBVVRPUFIgdmFsdWVzIGZvdW5kIGZvciAlcyIgJSB2ZXIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9leHBvcnRfdG9maWxlKGUuZGF0YSwgTm9uZSwgZGF0YWluZm8sIEZhbHNlKQorICAgICAgICBpZiAnQVVUT0lOQycgaW4gdmVyOgorICAgICAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICAgICBzcmNwdiA9ICBiYi5mZXRjaDIuZ2V0X3NyY3JldihlLmRhdGEpCisgICAgICAgICAgICBiYXNlX3ZlciA9ICJBVVRPSU5DLSVzIiAlIHZlcls6dmVyLmZpbmQoc3JjcHYpXQorICAgICAgICAgICAgZS5kYXRhLnNldFZhcignUFJTRVJWX0RVTVBPUFRfVkVSU0lPTicsIGJhc2VfdmVyKQorICAgICAgICAgICAgcmV0dmFsID0gb2UucHJzZXJ2aWNlLnByc2Vydl9kdW1wX2RiKGUuZGF0YSkKKyAgICAgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoInByZXhwb3J0X2hhbmRsZXI6IGV4cG9ydCBmYWlsZWQhIikKKyAgICAgICAgICAgIChtZXRhaW5mbywgZGF0YWluZm8pID0gcmV0dmFsCisgICAgICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2V4cG9ydF90b2ZpbGUoZS5kYXRhLCBOb25lLCBkYXRhaW5mbywgRmFsc2UpCisgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgIGltcG9ydCBiYi51dGlscworICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfY2hlY2tfYXZhaWwoZS5kYXRhKQorICAgICAgICAjcmVtb3ZlIGR1bXBmaWxlCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShlLmRhdGEuZ2V0VmFyKCdQUlNFUlZfRFVNUEZJTEUnLCBUcnVlKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgICNkdW1wIG1ldGEgaW5mbyBvZiB0YWJsZXMKKyAgICAgICAgZCA9IGUuZGF0YS5jcmVhdGVDb3B5KCkKKyAgICAgICAgZC5zZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX0NPTCcsICIxIikKKyAgICAgICAgcmV0dmFsID0gb2UucHJzZXJ2aWNlLnByc2Vydl9kdW1wX2RiKGQpCisgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICBiYi5lcnJvcigicHJleHBvcnRfaGFuZGxlcjogZXhwb3J0IGZhaWxlZCEiKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIChtZXRhaW5mbywgZGF0YWluZm8pID0gcmV0dmFsCisgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfZXhwb3J0X3RvZmlsZShkLCBtZXRhaW5mbywgTm9uZSwgVHJ1ZSkKKworfQorCithZGRoYW5kbGVyIHByZXhwb3J0X2hhbmRsZXIKK3ByZXhwb3J0X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQYXJzZWQgYmIuZXZlbnQuUGFyc2VTdGFydGVkIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJpbXBvcnQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3ByaW1wb3J0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkNDVmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3ByaW1wb3J0LmJiY2xhc3MKQEAgLTAsMCArMSwyMSBAQAorcHl0aG9uIHByaW1wb3J0X2hhbmRsZXIgKCkgeworICAgIGltcG9ydCBiYi5ldmVudAorICAgIGlmIG5vdCBlLmRhdGE6CisgICAgICAgIHJldHVybgorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgI2ltcG9ydCBhbGwgZXhwb3J0ZWQgQVVUT1BSIHZhbHVlcworICAgICAgICBpbXBvcnRlZCA9IG9lLnByc2VydmljZS5wcnNlcnZfaW1wb3J0X2RiKGUuZGF0YSkKKyAgICAgICAgaWYgaW1wb3J0ZWQgaXMgTm9uZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJpbXBvcnQgZmFpbGVkISIpCisKKyAgICAgICAgZm9yICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpIGluIGltcG9ydGVkOgorICAgICAgICAgICAgYmIubm90ZSgiaW1wb3J0ZWQgKCVzLCVzLCVzLCVkKSIgJSAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2NoZWNrX2F2YWlsKGUuZGF0YSkKK30KKworYWRkaGFuZGxlciBwcmltcG9ydF9oYW5kbGVyCitwcmltcG9ydF9oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQgYmIuZXZlbnQuUGFyc2VTdGFydGVkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJzZXJ2LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzk1OTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHJzZXJ2LmJiY2xhc3MKQEAgLTAsMCArMSwyIEBACisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHRlc3QtZ25vbWUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B0ZXN0LWdub21lLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5NDlhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B0ZXN0LWdub21lLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitpbmhlcml0IHB0ZXN0CisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygnUFRFU1RfRU5BQkxFRCcsICcxJywgJy0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cycsICctLWRpc2FibGUtaW5zdGFsbGVkLXRlc3RzJywgZCl9IgorCitGSUxFU18ke1BOfS1wdGVzdCArPSAiJHtsaWJleGVjZGlyfS9pbnN0YWxsZWQtdGVzdHMvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2luc3RhbGxlZC10ZXN0cy8iCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJnbm9tZS1kZXNrdG9wLXRlc3RpbmciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9wdGVzdC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHRlc3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY0NzBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHRlc3QuYmJjbGFzcwpAQCAtMCwwICsxLDY3IEBACitTVU1NQVJZXyR7UE59LXB0ZXN0ID89ICIke1NVTU1BUll9IC0gUGFja2FnZSB0ZXN0IGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tcHRlc3QgPz0gIiR7REVTQ1JJUFRJT059ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgYSB0ZXN0IGRpcmVjdG9yeSAke1BURVNUX1BBVEh9IGZvciBwYWNrYWdlIHRlc3QgcHVycG9zZXMuIgorCitQVEVTVF9QQVRIID89ICIke2xpYmRpcn0vJHtQTn0vcHRlc3QiCitGSUxFU18ke1BOfS1wdGVzdCA9ICIke1BURVNUX1BBVEh9IgorU0VDVElPTl8ke1BOfS1wdGVzdCA9ICJkZXZlbCIKK0FMTE9XX0VNUFRZXyR7UE59LXB0ZXN0ID0gIjEiCitQVEVTVF9FTkFCTEVEID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnMScsICcwJywgZCl9IgorUFRFU1RfRU5BQkxFRF9jbGFzcy1uYXRpdmUgPSAiIgorUFRFU1RfRU5BQkxFRF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUFRFU1RfRU5BQkxFRF9jbGFzcy1jcm9zcy1jYW5hZGlhbiA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdF9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3RfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LXB0ZXN0ICs9ICJwdGVzdC1ydW5uZXIiCisKK1BBQ0tBR0VTID0rICIke0BiYi51dGlscy5jb250YWlucygnUFRFU1RfRU5BQkxFRCcsICcxJywgJyR7UE59LXB0ZXN0JywgJycsIGQpfSIKKworZG9fY29uZmlndXJlX3B0ZXN0KCkgeworICAgIDoKK30KKworZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2UoKSB7CisgICAgZG9fY29uZmlndXJlX3B0ZXN0Cit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgOgorfQorCitkb19jb21waWxlX3B0ZXN0X2Jhc2UoKSB7CisgICAgZG9fY29tcGlsZV9wdGVzdAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgIDoKK30KKworZG9faW5zdGFsbF9wdGVzdF9iYXNlKCkgeworICAgIGlmIFsgLWYgJHtXT1JLRElSfS9ydW4tcHRlc3QgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1EICR7V09SS0RJUn0vcnVuLXB0ZXN0ICR7RH0ke1BURVNUX1BBVEh9L3J1bi1wdGVzdAorICAgICAgICBpZiBncmVwIC1xIGluc3RhbGwtcHRlc3Q6IE1ha2VmaWxlOyB0aGVuCisgICAgICAgICAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gaW5zdGFsbC1wdGVzdAorICAgICAgICBmaQorICAgICAgICBkb19pbnN0YWxsX3B0ZXN0CisgICAgICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9JHtQVEVTVF9QQVRIfQorICAgIGZpCit9CisKK2RvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlW2RpcnNdID0gIiR7Qn0iCitkb19jb21waWxlX3B0ZXN0X2Jhc2VbZGlyc10gPSAiJHtCfSIKK2RvX2luc3RhbGxfcHRlc3RfYmFzZVtkaXJzXSA9ICIke0J9IgorZG9faW5zdGFsbF9wdGVzdF9iYXNlW2NsZWFuZGlyc10gPSAiJHtEfSR7UFRFU1RfUEFUSH0iCisKK2FkZHRhc2sgY29uZmlndXJlX3B0ZXN0X2Jhc2UgYWZ0ZXIgZG9fY29uZmlndXJlIGJlZm9yZSBkb19jb21waWxlCithZGR0YXNrIGNvbXBpbGVfcHRlc3RfYmFzZSAgIGFmdGVyIGRvX2NvbXBpbGUgICBiZWZvcmUgZG9faW5zdGFsbAorYWRkdGFzayBpbnN0YWxsX3B0ZXN0X2Jhc2UgICBhZnRlciBkb19pbnN0YWxsICAgYmVmb3JlIGRvX3BhY2thZ2UgZG9fcG9wdWxhdGVfc3lzcm9vdAorCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW5zdGFsbF9wdGVzdF9iYXNlJywgJ2Zha2Vyb290JywgMSkKKworICAgICMgUmVtb3ZlIGFsbCAnKnB0ZXN0X2Jhc2UnIHRhc2tzIHdoZW4gcHRlc3QgaXMgbm90IGVuYWJsZWQKKyAgICBpZiBub3QoZC5nZXRWYXIoJ1BURVNUX0VOQUJMRUQnLCBUcnVlKSA9PSAiMSIpOgorICAgICAgICBmb3IgaSBpbiBbJ2RvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlJywgJ2RvX2NvbXBpbGVfcHRlc3RfYmFzZScsICdkb19pbnN0YWxsX3B0ZXN0X2Jhc2UnXToKKyAgICAgICAgICAgIGJiLmJ1aWxkLmRlbHRhc2soaSwgZCkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmZhNGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorUFlUSE9OX0JBU0VWRVJTSU9OID89ICIyLjciCitQWVRIT05fQUJJID89ICIiCitQWVRIT05fRElSID0gInB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIKK1BZVEhPTl9QTiA9ICJweXRob24ke0AnJyBpZiAnJHtQWVRIT05fQkFTRVZFUlNJT059Jy5zdGFydHN3aXRoKCcyJykgZWxzZSAnMyd9IgorUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIgPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjgzMDE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNyBAQAorUFlUSE9OX0JBU0VWRVJTSU9OID0gIjMuNCIKKworaW5oZXJpdCBweXRob24tZGlyCisKK1BZVEhPTj0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IgorRVhUUkFOQVRJVkVQQVRIICs9ICIke1BZVEhPTl9QTn0tbmF0aXZlIgorREVQRU5EUyArPSAiICR7UFlUSE9OX1BOfS1uYXRpdmUgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9ubmF0aXZlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzAyOWRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcHl0aG9ubmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACisKK2luaGVyaXQgcHl0aG9uLWRpcgorCitQWVRIT049IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSIKKyMgUFlUSE9OX0VYRUNVVEFCTEUgaXMgdXNlZCBieSBjbWFrZQorUFlUSE9OX0VYRUNVVEFCTEU9IiR7UFlUSE9OfSIKK0VYVFJBTkFUSVZFUEFUSCArPSAiJHtQWVRIT05fUE59LW5hdGl2ZSIKK0RFUEVORFMgKz0gIiAke1BZVEhPTl9QTn0tbmF0aXZlICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FlbXUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FlbXUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgVGhpcyBjbGFzcyBjb250YWlucyBmdW5jdGlvbnMgZm9yIHJlY2lwZXMgdGhhdCBuZWVkIFFFTVUgb3IgdGVzdCBmb3IgaXRzCisjIGV4aXN0ZW5jZS4KKyMKKworZGVmIHFlbXVfdGFyZ2V0X2JpbmFyeShkYXRhKToKKyAgICB0YXJnZXRfYXJjaCA9IGRhdGEuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpCisgICAgaWYgdGFyZ2V0X2FyY2ggaW4gKCJpNDg2IiwgImk1ODYiLCAiaTY4NiIpOgorICAgICAgICB0YXJnZXRfYXJjaCA9ICJpMzg2IgorICAgIGVsaWYgdGFyZ2V0X2FyY2ggPT0gInBvd2VycGMiOgorICAgICAgICB0YXJnZXRfYXJjaCA9ICJwcGMiCisgICAgZWxpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYzY0IjoKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSAicHBjNjQiCisKKyAgICByZXR1cm4gInFlbXUtIiArIHRhcmdldF9hcmNoCisjCisjIE5leHQgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWFuZCB0aGF0IGlzIG5lZWRlZCB0bworIyB0byBydW4gYSBjZXJ0YWluIGJpbmFyeSB0aHJvdWdoIHFlbXUuIEZvciBleGFtcGxlLCBpbiBvcmRlciB0byBtYWtlIGEgY2VydGFpbgorIyBwb3N0aW5zdGFsbCBzY3JpcHRsZXQgcnVuIGF0IGRvX3Jvb3RmcyB0aW1lIGFuZCBydW5uaW5nIHRoZSBwb3N0aW5zdGFsbCBpcworIyBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LCB3ZSBjYW4gcnVuIGl0IHRocm91Z2ggcWVtdS4gRm9yIGV4YW1wbGUsIGluIHRoZQorIyBwb3N0aW5zdGFsbCBzY3JpcHRsZXQsIHdlIGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nOgorIworIyAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJy91c3IvYmluL3Rlc3RfYXBwJyl9IFt0ZXN0X2FwcCBhcmd1bWVudHNdCisjCitkZWYgcWVtdV9ydW5fYmluYXJ5KGRhdGEsIHJvb3Rmc19wYXRoLCBiaW5hcnkpOgorICAgIHFlbXVfYmluYXJ5ID0gcWVtdV90YXJnZXRfYmluYXJ5KGRhdGEpCisgICAgaWYgcWVtdV9iaW5hcnkgPT0gInFlbXUtYWxsYXJjaCI6CisgICAgICAgIHFlbXVfYmluYXJ5ID0gInFlbXV3cmFwcGVyIgorCisgICAgbGliZGlyID0gcm9vdGZzX3BhdGggKyBkYXRhLmdldFZhcigibGliZGlyIiwgRmFsc2UpCisgICAgYmFzZV9saWJkaXIgPSByb290ZnNfcGF0aCArIGRhdGEuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIEZhbHNlKQorICAgIHFlbXVfb3B0aW9ucyA9IGRhdGEuZ2V0VmFyKCJRRU1VX09QVElPTlMiLCBUcnVlKQorCisgICAgcmV0dXJuICJQU0VVRE9fVU5MT0FEPTEgIiArIHFlbXVfYmluYXJ5ICsgIiAiICsgcWVtdV9vcHRpb25zICsgIiAtTCAiICsgcm9vdGZzX3BhdGhcCisgICAgICAgICAgICArICIgLUUgTERfTElCUkFSWV9QQVRIPSIgKyBsaWJkaXIgKyAiOiIgKyBiYXNlX2xpYmRpciArICIgIlwKKyAgICAgICAgICAgICsgcm9vdGZzX3BhdGggKyBiaW5hcnkKKworIyBRRU1VX0VYVFJBT1BUSU9OUyBpcyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgdXNlZCwgdGhlIGV4dGVuc2lvbnMgYXJlIAorIyBQQUNLQUdFX0FSQ0gsIG5vdCBvdmVycmlkZXMgYW5kIGhlbmNlIGhhdmUgdG8gZG8gdGhpcyBkYW5jZS4gU2ltcGx5IGJlaW5nIGFyY2ggCisjIHNwZWNpZmljIGlzbid0IGdvb2QgZW5vdWdoLgorUUVNVV9PUFRJT05TID0gIi1yICR7T0xERVNUX0tFUk5FTH0gJHtAZC5nZXRWYXIoIlFFTVVfRVhUUkFPUFRJT05TXyVzIiAlIGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKSwgVHJ1ZSkgb3IgIiJ9IgorUUVNVV9FWFRSQU9QVElPTlNfaXdtbXh0ICAgID0gIiAtY3B1IHB4YTI3MC1jNSIKK1FFTVVfRVhUUkFPUFRJT05TX2FybXY2ICAgICA9ICIgLWNwdSBhcm0xMTM2IgorUUVNVV9FWFRSQU9QVElPTlNfYXJtdjdhICAgID0gIiAtY3B1IGNvcnRleC1hOCIKK1FFTVVfRVhUUkFPUFRJT05TX2U1MDB2MiAgICA9ICIgLWNwdSBlNTAwdjIiCitRRU1VX0VYVFJBT1BUSU9OU19lNTAwbWMgICAgPSAiIC1jcHUgZTUwMG1jIgorUUVNVV9FWFRSQU9QVElPTlNfZTU1MDAgICAgID0gIiAtY3B1IGU1NTAwIgorUUVNVV9FWFRSQU9QVElPTlNfZTU1MDAtNjRiID0gIiAtY3B1IGU1NTAwIgorUUVNVV9FWFRSQU9QVElPTlNfZTY1MDAgICAgID0gIiAtY3B1IGU2NTAwIgorUUVNVV9FWFRSQU9QVElPTlNfZTY1MDAtNjRiID0gIiAtY3B1IGU2NTAwIgorUUVNVV9FWFRSQU9QVElPTlNfcHBjNzQwMCAgID0gIiAtY3B1IDc0MDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xbWFrZTIuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzNhZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xbWFrZTIuYmJjbGFzcwpAQCAtMCwwICsxLDI3IEBACisjCisjIFFNYWtlIHZhcmlhYmxlcyBmb3IgUXQ0CisjCitpbmhlcml0IHFtYWtlX2Jhc2UKKworREVQRU5EU19wcmVwZW5kID0gInF0NC10b29scy1uYXRpdmUgIgorCitleHBvcnQgUU1BS0VTUEVDID0gIiR7U1RBR0lOR19EQVRBRElSfS9xdDQvbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIgorZXhwb3J0IE9FX1FNQUtFX1FUX0NPTkZJRyA9ICIke1NUQUdJTkdfREFUQURJUn0vcXQ0L21rc3BlY3MvcWNvbmZpZy5wcmkiCitleHBvcnQgT0VfUU1BS0VfVUlDID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS91aWM0IgorZXhwb3J0IE9FX1FNQUtFX1VJQzMgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3VpYzM0IgorZXhwb3J0IE9FX1FNQUtFX01PQyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbW9jNCIKK2V4cG9ydCBPRV9RTUFLRV9SQ0MgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3JjYzQiCitleHBvcnQgT0VfUU1BS0VfUURCVVNDUFAyWE1MID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xZGJ1c2NwcDJ4bWw0IgorZXhwb3J0IE9FX1FNQUtFX1FEQlVTWE1MMkNQUCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcWRidXN4bWwyY3BwNCIKK2V4cG9ydCBPRV9RTUFLRV9RTUFLRSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIgorZXhwb3J0IE9FX1FNQUtFX0xJTksgPSAiJHtDWFh9IgorZXhwb3J0IE9FX1FNQUtFX0NYWEZMQUdTID0gIiR7Q1hYRkxBR1N9IgorZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVCA9ICIke1NUQUdJTkdfSU5DRElSfS9xdDQiCitleHBvcnQgT0VfUU1BS0VfTElCRElSX1FUID0gIiR7U1RBR0lOR19MSUJESVJ9IgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfUVQgPSAicXQiCitleHBvcnQgT0VfUU1BS0VfTElCU19YMTEgPSAiLWxYZXh0IC1sWDExIC1sbSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1gxMVNNID0gIi1sU00gLWxJQ0UiCitleHBvcnQgT0VfUU1BS0VfTENPTlZFUlQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2xjb252ZXJ0NCIKK2V4cG9ydCBPRV9RTUFLRV9MUkVMRUFTRSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbHJlbGVhc2U0IgorZXhwb3J0IE9FX1FNQUtFX0xVUERBVEUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2x1cGRhdGU0IgorZXhwb3J0IE9FX1FNQUtFX1hNTFBBVFRFUk5TID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS94bWxwYXR0ZXJuczQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xbWFrZV9iYXNlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xbWFrZV9iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ODcxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3FtYWtlX2Jhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDExOSBAQAorUU1BS0VfTUtTUEVDX1BBVEggPz0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vcW1ha2UiCisKK09FX1FNQUtFX1BMQVRGT1JNID0gIiR7VEFSR0VUX09TfS1vZS1nKysiCitRTUFLRVNQRUMgOj0gIiR7UU1BS0VfTUtTUEVDX1BBVEh9LyR7T0VfUU1BS0VfUExBVEZPUk19IgorCisjIFdlIG92ZXJyaWRlIHRoaXMgY29tcGxldGVseSB0byBlbGltaW5hdGUgdGhlIC1lIG5vcm1hbGx5IHBhc3NlZCBpbgorRVhUUkFfT0VNQUtFID0gIiIKKworZXhwb3J0IE9FX1FNQUtFX0NDPSIke0NDfSIKK2V4cG9ydCBPRV9RTUFLRV9DRkxBR1M9IiR7Q0ZMQUdTfSIKK2V4cG9ydCBPRV9RTUFLRV9DWFg9IiR7Q1hYfSIKK2V4cG9ydCBPRV9RTUFLRV9MREZMQUdTPSIke0xERkxBR1N9IgorZXhwb3J0IE9FX1FNQUtFX0FSPSIke0FSfSIKK2V4cG9ydCBPRV9RTUFLRV9TVFJJUD0iZWNobyIKK2V4cG9ydCBPRV9RTUFLRV9SUEFUSD0iLVdsLC1ycGF0aC1saW5rLCIKKworIyBkZWZhdWx0IHRvIHF0ZTIgdmlhIGJiLmNvbmYsIGluaGVyaXQgcXQzeDExIHRvIGNvbmZpZ3VyZSBmb3IgcXQzeDExCisKK29lX3FtYWtlX21rc3BlY3MgKCkgeworICAgIG1rZGlyIC1wIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0KKyAgICBmb3IgZiBpbiAke1FNQUtFX01LU1BFQ19QQVRIfS8ke09FX1FNQUtFX1BMQVRGT1JNfS8qOyBkbworICAgICAgICBpZiBbIC1MICRmIF07IHRoZW4KKyAgICAgICAgICAgIGxuaz1gcmVhZGxpbmsgJGZgCisgICAgICAgICAgICBpZiBbIC1mIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vJGxuayBdOyB0aGVuCisgICAgICAgICAgICAgICAgbG4gLXMgJGxuayBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19L2BiYXNlbmFtZSAkZmAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjcCAkZiBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19LworICAgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3AgJGYgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS8KKyAgICAgICAgZmkKKyAgICBkb25lCit9CisKK2RvX2dlbmVyYXRlX3F0X2NvbmZpZ19maWxlKCkgeworCWV4cG9ydCBRVF9DT05GX1BBVEg9JHtXT1JLRElSfS9xdC5jb25mCisJY2F0ID4gJHtXT1JLRElSfS9xdC5jb25mIDw8RU9GCitbUGF0aHNdCitQcmVmaXggPQorQmluYXJpZXMgPSAke1NUQUdJTkdfQklORElSX05BVElWRX0KK0hlYWRlcnMgPSAke1NUQUdJTkdfSU5DRElSfS8ke1FUX0RJUl9OQU1FfQorUGx1Z2lucyA9ICR7U1RBR0lOR19MSUJESVJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvCitNa3NwZWNzID0gJHtTVEFHSU5HX0RBVEFESVJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvCitFT0YKK30KKworYWRkdGFzayBnZW5lcmF0ZV9xdF9jb25maWdfZmlsZSBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK3FtYWtlX2Jhc2VfZG9fY29uZmlndXJlKCkgeworCWNhc2UgJHtRTUFLRVNQRUN9IGluCisJKmxpbnV4LW9lLWcrK3wqbGludXgtdWNsaWJjLW9lLWcrK3wqbGludXgtZ251ZWFiaS1vZS1nKyt8KmxpbnV4LXVjbGliY2VhYmktb2UtZysrfCpsaW51eC1nbnVzcGUtb2UtZysrfCpsaW51eC11Y2xpYmNzcGUtb2UtZysrfCpsaW51eC1nbnVuMzItb2UtZysrKQorCQk7OworCSotb2UtZysrKQorCQlkaWUgVW5zdXBwb3J0ZWQgdGFyZ2V0ICR7VEFSR0VUX09TfSBmb3Igb2UtZysrIHFtYWtlIHNwZWMKKwkJOzsKKwkqKQorCQliYm5vdGUgU2VhcmNoaW5nIGZvciBxbWFrZSBzcGVjIGZpbGUKKwkJcGF0aHM9IiR7UU1BS0VfTUtTUEVDX1BBVEh9L3F3cy8ke1RBUkdFVF9PU30tJHtUQVJHRVRfQVJDSH0tZysrIgorCQlwYXRocz0iJHtRTUFLRV9NS1NQRUNfUEFUSH0vJHtUQVJHRVRfT1N9LWcrKyAkcGF0aHMiCisKKwkJaWYgKGVjaG8gIiR7VEFSR0VUX0FSQ0h9InxncmVwIC1xICdpLjg2Jyk7IHRoZW4KKwkJCXBhdGhzPSIke1FNQUtFX01LU1BFQ19QQVRIfS9xd3MvJHtUQVJHRVRfT1N9LXg4Ni1nKysgJHBhdGhzIgorCQlmaQorCQlmb3IgaSBpbiAkcGF0aHM7IGRvCisJCQlpZiB0ZXN0IC1lICRpOyB0aGVuCisJCQkJZXhwb3J0IFFNQUtFU1BFQz0kaQorCQkJCWJyZWFrCisJCQlmaQorCQlkb25lCisJCTs7CisJZXNhYworCisJYmJub3RlICJ1c2luZyBxbWFrZSBzcGVjIGluICR7UU1BS0VTUEVDfSwgdXNpbmcgcHJvZmlsZXMgJyR7UU1BS0VfUFJPRklMRVN9JyIKKworCWlmIFsgLXogIiR7UU1BS0VfUFJPRklMRVN9IiBdOyB0aGVuIAorCQlQUk9GSUxFUz0iYGxzICoucHJvYCIKKwllbHNlCisJCVBST0ZJTEVTPSIke1FNQUtFX1BST0ZJTEVTfSIKKwlmaQorCisJaWYgWyAteiAiJFBST0ZJTEVTIiBdOyB0aGVuCisJCWRpZSAiUU1BS0VfUFJPRklMRVMgbm90IHNldCBhbmQgbm8gcHJvZmlsZXMgZm91bmQgaW4gJFBXRCIKKyAgICAgICAgZmkKKworCWlmIFsgISAteiAiJHtFWFRSQV9RTUFLRVZBUlNfUE9TVH0iIF07IHRoZW4KKwkJQUZURVI9Ii1hZnRlciIKKwkJUU1BS0VfVkFSU1VCU1RfUE9TVD0iJHtFWFRSQV9RTUFLRVZBUlNfUE9TVH0iCisJCWJibm90ZSAicW1ha2UgcG9zdHZhciBzdWJzdGl0dXRpb246ICR7RVhUUkFfUU1BS0VWQVJTX1BPU1R9IgorCWZpCisKKwlpZiBbICEgLXogIiR7RVhUUkFfUU1BS0VWQVJTX1BSRX0iIF07IHRoZW4KKwkJUU1BS0VfVkFSU1VCU1RfUFJFPSIke0VYVFJBX1FNQUtFVkFSU19QUkV9IgorCQliYm5vdGUgInFtYWtlIHByZXZhciBzdWJzdGl0dXRpb246ICR7RVhUUkFfUU1BS0VWQVJTX1BSRX0iCisJZmkKKworCSMgSGFjayAucHJvIGZpbGVzIHRvIHVzZSBPRSB1dGlsaXRpZXMKKwlMQ09OVkVSVF9OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9MQ09OVkVSVH0pCisJTFJFTEVBU0VfTkFNRT0kKGJhc2VuYW1lICR7T0VfUU1BS0VfTFJFTEVBU0V9KQorCUxVUERBVEVfTkFNRT0kKGJhc2VuYW1lICR7T0VfUU1BS0VfTFVQREFURX0pCisJWE1MUEFUVEVSTlNfTkFNRT0kKGJhc2VuYW1lICR7T0VfUU1BS0VfWE1MUEFUVEVSTlN9KQorCWZpbmQgLW5hbWUgJyoucHJvJyBcCisJICAgICAtZXhlYyBzZWQgLWkgLWUgInN8XCg9XHMqLipcKS8kTENPTlZFUlRfTkFNRXxcMS9sY29udmVydHxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS8kTFJFTEVBU0VfTkFNRXxcMS9scmVsZWFzZXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS8kTFVQREFURV9OQU1FfFwxL2x1cGRhdGV8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvJFhNTFBBVFRFUk5TX05BTUV8XDEveG1scGF0dGVybnN8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvbGNvbnZlcnR8XDEvJExDT05WRVJUX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvbHJlbGVhc2V8XDEvJExSRUxFQVNFX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvbHVwZGF0ZXxcMS8kTFVQREFURV9OQU1FfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpL3htbHBhdHRlcm5zfFwxLyRYTUxQQVRURVJOU19OQU1FfGciIFwKKwkgICAgICAgICAgICAgICAgICAne30nICc7JworCisjYmJub3RlICJDYWxsaW5nICcke09FX1FNQUtFX1FNQUtFfSAtbWFrZWZpbGUgLXNwZWMgJHtRTUFLRVNQRUN9IC1vIE1ha2VmaWxlICRRTUFLRV9WQVJTVUJTVF9QUkUgJEFGVEVSICRQUk9GSUxFUyAkUU1BS0VfVkFSU1VCU1RfUE9TVCciCisJdW5zZXQgUU1BS0VTUEVDIHx8IHRydWUKKwkke09FX1FNQUtFX1FNQUtFfSAtbWFrZWZpbGUgLXNwZWMgJHtRTUFLRVNQRUN9IC1vIE1ha2VmaWxlICRRTUFLRV9WQVJTVUJTVF9QUkUgJEFGVEVSICRQUk9GSUxFUyAkUU1BS0VfVkFSU1VCU1RfUE9TVCB8fCBkaWUgIkVycm9yIGNhbGxpbmcgJHtPRV9RTUFLRV9RTUFLRX0gb24gJFBST0ZJTEVTIgorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZQorCithZGR0YXNrIGNvbmZpZ3VyZSBhZnRlciBkb191bnBhY2sgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3F0NGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3F0NGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2IxMDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcXQ0ZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjEgQEAKK1FUNEVERVBFTkRTID89ICJxdDQtZW1iZWRkZWQgIgorREVQRU5EU19wcmVwZW5kID0gIiR7UVQ0RURFUEVORFN9IgorCitpbmhlcml0IHFtYWtlMgorCitRVF9CQVNFX05BTUUgPSAicXQ0LWVtYmVkZGVkIgorUVRfRElSX05BTUUgPSAicXRvcGlhIgorUVRfTElCSU5GSVggPSAiRSIKKyMgb3ZlcnJpZGUgdmFyaWFibGVzIHNldCBieSBxbWFrZS1iYXNlIHRvIGNvbXBpbGUgUXQvRW1iZWRkZWQgYXBwcworIworZXhwb3J0IFFNQUtFU1BFQyA9ICIke1NUQUdJTkdfREFUQURJUn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIgorZXhwb3J0IE9FX1FNQUtFX1FUX0NPTkZJRyA9ICIke1NUQUdJTkdfREFUQURJUn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9xY29uZmlnLnByaSIKK2V4cG9ydCBPRV9RTUFLRV9JTkNESVJfUVQgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vJHtRVF9ESVJfTkFNRX0iCitleHBvcnQgT0VfUU1BS0VfTElCRElSX1FUID0gIiR7U1RBR0lOR19MSUJESVJ9IgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfUVQgPSAicXQiCitleHBvcnQgT0VfUU1BS0VfTElCU19YMTEgPSAiIgorZXhwb3J0IE9FX1FNQUtFX0VYVFJBX01PRFVMRVMgPSAibmV0d29yayIKK0VYVFJBX1FNQUtFVkFSU19QUkUgKz0gIiBRVF9MSUJJTkZJWD0ke1FUX0xJQklORklYfSAiCisKKyMgUXQ0IHVzZXMgYXRvbWljIGluc3RydWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRodW1iIG1vZGUKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcXQ0eDExLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA2ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcXQ0eDExLmJiY2xhc3MKQEAgLTAsMCArMSwxNCBAQAorUVQ0REVQRU5EUyA/PSAicXQ0LXgxMSAiCitERVBFTkRTX3ByZXBlbmQgPSAiJHtRVDRERVBFTkRTfSIKKworIyBkZXBlbmRzIG9uIHF0NC14MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyArPSAieDExIgorCitpbmhlcml0IHFtYWtlMiBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUVRfQkFTRV9OQU1FID0gInF0NCIKK1FUX0RJUl9OQU1FID0gInF0NCIKK1FUX0xJQklORklYID0gIiIKKworIyBRdDQgdXNlcyBhdG9taWMgaW5zdHJ1Y3Rpb25zIG5vdCBzdXBwb3J0ZWQgaW4gdGh1bWIgbW9kZQorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwNGUzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcwpAQCAtMCwwICsxLDE2NyBAQAorZGVmIF9fbm90ZShtc2csIGQpOgorICAgIGJiLm5vdGUoIiVzOiByZWNpcGVfc2FuaXR5OiAlcyIgJSAoZC5nZXRWYXIoIlAiLCBUcnVlKSwgbXNnKSkKKworX19yZWNpcGVfc2FuaXR5X2JhZHJ1bnRpbWV2YXJzID0gIlJERVBFTkRTIFJQUk9WSURFUyBSUkVDT01NRU5EUyBSQ09ORkxJQ1RTIgorZGVmIGJhZF9ydW50aW1lX3ZhcnMoY2ZnZGF0YSwgZCk6CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibmF0aXZlIiwgZCkgb3IgXAorICAgICAgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiY3Jvc3MiLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBmb3IgdmFyIGluIGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfYmFkcnVudGltZXZhcnMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIDApCisgICAgICAgIGlmIHZhbCBhbmQgdmFsICE9IGNmZ2RhdGEuZ2V0KHZhcik6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSAlc18ke1BOfSIgJSAodmFyLCB2YXIpLCBkKQorCitfX3JlY2lwZV9zYW5pdHlfcmVxdmFycyA9ICJERVNDUklQVElPTiIKK19fcmVjaXBlX3Nhbml0eV9yZXFkaWZmdmFycyA9ICIiCitkZWYgcmVxX3ZhcnMoY2ZnZGF0YSwgZCk6CisgICAgZm9yIHZhciBpbiBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlcXZhcnMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBub3QgZC5nZXRWYXIodmFyLCAwKToKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlIHNldCIgJSB2YXIsIGQpCisKKyAgICBmb3IgdmFyIGluIGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVxZGlmZnZhcnMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIDApCisgICAgICAgIGNmZ3ZhbCA9IGNmZ2RhdGEuZ2V0KHZhcikKKworICAgICAgICBpZiBub3QgdmFsOgorICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgc2V0IiAlIHZhciwgZCkKKyAgICAgICAgZWxpZiB2YWwgPT0gY2ZndmFsOgorICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgZGVmaW5lZCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBkZWZhdWx0ICglcykiICUgKHZhciwgY2ZndmFsKSwgZCkKKworZGVmIHZhcl9yZW5hbWVzX292ZXJ3cml0ZShjZmdkYXRhLCBkKToKKyAgICByZW5hbWVzID0gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZW5hbWVzIiwgMCkKKyAgICBpZiByZW5hbWVzOgorICAgICAgICBmb3IgKGtleSwgbmV3a2V5LCBvbGR2YWx1ZSwgbmV3dmFsdWUpIGluIHJlbmFtZXM6CisgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZSBhbmQgb2xkdmFsdWUgIT0gY2ZnZGF0YS5nZXQobmV3a2V5KToKKyAgICAgICAgICAgICAgICBfX25vdGUoInJlbmFtZSBvZiB2YXJpYWJsZSAnJXMnIHRvICclcycgb3Zlcndyb3RlIGV4aXN0aW5nIHZhbHVlICclcycgd2l0aCAnJXMnLiIgJSAoa2V5LCBuZXdrZXksIG9sZHZhbHVlLCBuZXd2YWx1ZSksIGQpCisKK2RlZiBpbmNvcnJlY3Rfbm9uZW1wdHlfUEFDS0FHRVMoY2ZnZGF0YSwgZCk6CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibmF0aXZlIiwgZCkgb3IgXAorICAgICAgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiY3Jvc3MiLCBkKToKKyAgICAgICAgaWYgZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2FuX3VzZV9hdXRvdG9vbHNfYmFzZShjZmdkYXRhLCBkKToKKyAgICBjZmcgPSBkLmdldFZhcigiZG9fY29uZmlndXJlIiwgVHJ1ZSkKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiYXV0b3Rvb2xzIiwgZCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZm9yIGkgaW4gWyJhdXRvcmVjb25mIl0gKyBbIiVzX2RvX2NvbmZpZ3VyZSIgJSBjbHMgZm9yIGNscyBpbiBbImdub21lYmFzZSIsICJnbm9tZSIsICJlIiwgImF1dG90b29scyIsICJlZmwiLCAiZ3BlcGhvbmUiLCAib3Blbm1va28iLCAib3Blbm1va28yIiwgInhmY2UiLCAieGxpYnMiXV06CisgICAgICAgIGlmIGNmZy5maW5kKGkpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBmb3IgY2xzZmlsZSBpbiBkLmdldFZhcigiX19pbmhlcml0X2NhY2hlIiwgMCk6CisgICAgICAgIChiYXNlLCBfKSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShjbHNmaWxlKSkKKyAgICAgICAgaWYgY2ZnLmZpbmQoIiVzX2RvX2NvbmZpZ3VyZSIgJSBiYXNlKSAhPSAtMToKKyAgICAgICAgICAgIF9fbm90ZSgiYXV0b3Rvb2xzX2Jhc2UgdXNhZ2UgbmVlZHMgdmVyaWZpY2F0aW9uLCBzcG90dGVkICVzX2RvX2NvbmZpZ3VyZSIgJSBiYXNlLCBkKQorCisgICAgcmV0dXJuIFRydWUKKworZGVmIGNhbl9kZWxldGVfRklMRVNQQVRIKGNmZ2RhdGEsIGQpOgorICAgIGV4cGVjdGVkID0gY2ZnZGF0YS5nZXQoIkZJTEVTUEFUSCIpCisgICAgZXhwZWN0ZWRwYXRocyA9IGQuZXhwYW5kKGV4cGVjdGVkKQorICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcigiRklMRVNQQVRIIiwgMCkKKyAgICBmaWxlc3BhdGggPSBkLmdldFZhcigiRklMRVNQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGZpbGVzcGF0aCA9IFtvcy5wYXRoLm5vcm1wYXRoKGYpIGZvciBmIGluIGZpbGVzcGF0aCBpZiBvcy5wYXRoLmV4aXN0cyhmKV0KKyAgICBmb3IgZnAgaW4gZmlsZXNwYXRoOgorICAgICAgICBpZiBub3QgZnAgaW4gZXhwZWN0ZWRwYXRoczoKKyAgICAgICAgICAgICMgX19ub3RlKCJQYXRoICVzIGluIEZJTEVTUEFUSCBub3QgaW4gdGhlIGV4cGVjdGVkIHBhdGhzICVzIiAlCisgICAgICAgICAgICAjIChmcCwgZXhwZWN0ZWRwYXRocyksIGQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gZXhwZWN0ZWQgIT0gdW5leHBhbmRlZAorCitkZWYgY2FuX2RlbGV0ZV9GSUxFU0RJUihjZmdkYXRhLCBkKToKKyAgICBleHBlY3RlZCA9IGNmZ2RhdGEuZ2V0KCJGSUxFU0RJUiIpCisgICAgI2V4cGVjdGVkID0gIiR7QGJiLnV0aWxzLndoaWNoKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSwgJy4nKX0iCisgICAgdW5leHBhbmRlZCA9IGQuZ2V0VmFyKCJGSUxFU0RJUiIsIDApCisgICAgaWYgdW5leHBhbmRlZCBpcyBOb25lOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGV4cGFuZGVkID0gb3MucGF0aC5ub3JtcGF0aChkLmdldFZhcigiRklMRVNESVIiLCBUcnVlKSkKKyAgICBmaWxlc3BhdGggPSBkLmdldFZhcigiRklMRVNQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGZpbGVzcGF0aCA9IFtvcy5wYXRoLm5vcm1wYXRoKGYpIGZvciBmIGluIGZpbGVzcGF0aCBpZiBvcy5wYXRoLmV4aXN0cyhmKV0KKworICAgIHJldHVybiB1bmV4cGFuZGVkICE9IGV4cGVjdGVkIGFuZCBcCisgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKGV4cGFuZGVkKSBhbmQgXAorICAgICAgICAgICAoZXhwYW5kZWQgaW4gZmlsZXNwYXRoIG9yCisgICAgICAgICAgICBleHBhbmRlZCA9PSBkLmV4cGFuZChleHBlY3RlZCkpCisKK2RlZiBjYW5fZGVsZXRlX290aGVycyhwLCBjZmdkYXRhLCBkKToKKyAgICBmb3IgayBpbiBbIlMiLCAiUFYiLCAiUE4iLCAiREVTQ1JJUFRJT04iLCAiREVQRU5EUyIsCisgICAgICAgICAgICAgICJTRUNUSU9OIiwgIlBBQ0tBR0VTIiwgIkVYVFJBX09FQ09ORiIsICJFWFRSQV9PRU1BS0UiXToKKyAgICAjZm9yIGsgaW4gY2ZnZGF0YToKKyAgICAgICAgdW5leHBhbmRlZCA9IGQuZ2V0VmFyKGssIDApCisgICAgICAgIGNmZ3VuZXhwYW5kZWQgPSBjZmdkYXRhLmdldChrKQorICAgICAgICBpZiBub3QgY2ZndW5leHBhbmRlZDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwYW5kZWQgPSBkLmdldFZhcihrLCBUcnVlKQorICAgICAgICAgICAgY2ZnZXhwYW5kZWQgPSBkLmV4cGFuZChjZmd1bmV4cGFuZGVkKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guUGFyYW1ldGVyRXJyb3I6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHVuZXhwYW5kZWQgIT0gY2ZndW5leHBhbmRlZCBhbmQgXAorICAgICAgICAgICBjZmdleHBhbmRlZCA9PSBleHBhbmRlZDoKKyAgICAgICAgICAgX19ub3RlKCJjYW5kaWRhdGUgZm9yIHJlbW92YWwgb2YgJXMiICUgaywgZCkKKyAgICAgICAgICAgYmIuZGVidWcoMSwgIiVzOiByZWNpcGVfc2FuaXR5OiAgIGNmZydzICclcycgYW5kIGQncyAnJXMnIGJvdGggZXhwYW5kIHRvICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgIChwLCBjZmd1bmV4cGFuZGVkLCB1bmV4cGFuZGVkLCBleHBhbmRlZCkpCisKK3B5dGhvbiBkb19yZWNpcGVfc2FuaXR5ICgpIHsKKyAgICBwID0gZC5nZXRWYXIoIlAiLCBUcnVlKQorICAgIHAgPSAiJXMgJXMgJXMiICUgKGQuZ2V0VmFyKCJQTiIsIFRydWUpLCBkLmdldFZhcigiUFYiLCBUcnVlKSwgZC5nZXRWYXIoIlBSIiwgVHJ1ZSkpCisKKyAgICBzYW5pdHljaGVja3MgPSBbCisgICAgICAgIChjYW5fZGVsZXRlX0ZJTEVTRElSLCAiY2FuZGlkYXRlIGZvciByZW1vdmFsIG9mIEZJTEVTRElSIiksCisgICAgICAgIChjYW5fZGVsZXRlX0ZJTEVTUEFUSCwgImNhbmRpZGF0ZSBmb3IgcmVtb3ZhbCBvZiBGSUxFU1BBVEgiKSwKKyAgICAgICAgIyhjYW5fdXNlX2F1dG90b29sc19iYXNlLCAiY2FuZGlkYXRlIGZvciB1c2Ugb2YgYXV0b3Rvb2xzX2Jhc2UiKSwKKyAgICAgICAgKGluY29ycmVjdF9ub25lbXB0eV9QQUNLQUdFUywgIm5hdGl2ZSBvciBjcm9zcyByZWNpcGUgd2l0aCBub24tZW1wdHkgUEFDS0FHRVMiKSwKKyAgICBdCisgICAgY2ZnZGF0YSA9IGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIDApCisKKyAgICBmb3IgKGZ1bmMsIG1zZykgaW4gc2FuaXR5Y2hlY2tzOgorICAgICAgICBpZiBmdW5jKGNmZ2RhdGEsIGQpOgorICAgICAgICAgICAgX19ub3RlKG1zZywgZCkKKworICAgIGNhbl9kZWxldGVfb3RoZXJzKHAsIGNmZ2RhdGEsIGQpCisgICAgdmFyX3JlbmFtZXNfb3ZlcndyaXRlKGNmZ2RhdGEsIGQpCisgICAgcmVxX3ZhcnMoY2ZnZGF0YSwgZCkKKyAgICBiYWRfcnVudGltZV92YXJzKGNmZ2RhdGEsIGQpCit9Citkb19yZWNpcGVfc2FuaXR5W25vc3RhbXBdID0gIjEiCithZGR0YXNrIHJlY2lwZV9zYW5pdHkKKworZG9fcmVjaXBlX3Nhbml0eV9hbGxbbm9zdGFtcF0gPSAiMSIKK2RvX3JlY2lwZV9zYW5pdHlfYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19yZWNpcGVfc2FuaXR5X2FsbCBkb19yZWNpcGVfc2FuaXR5IgorZG9fcmVjaXBlX3Nhbml0eV9hbGwgKCkgeworICAgIDoKK30KK2FkZHRhc2sgcmVjaXBlX3Nhbml0eV9hbGwgYWZ0ZXIgZG9fcmVjaXBlX3Nhbml0eQorCitweXRob24gcmVjaXBlX3Nhbml0eV9laCAoKSB7CisgICAgZCA9IGUuZGF0YQorCisgICAgY2ZnZGF0YSA9IHt9CisgICAgZm9yIGsgaW4gZC5rZXlzKCk6CisgICAgI2ZvciBrIGluIFsiUyIsICJQUiIsICJQViIsICJQTiIsICJERVNDUklQVElPTiIsICJMSUNFTlNFIiwgIkRFUEVORFMiLAorICAgICMgICAgICAgICAgIlNFQ1RJT04iXToKKyAgICAgICAgY2ZnZGF0YVtrXSA9IGQuZ2V0VmFyKGssIDApCisKKyAgICBkLnNldFZhcigiX19yZWNpcGVfc2FuaXR5X2NmZ2RhdGEiLCBjZmdkYXRhKQorICAgICNkLnNldFZhcigiX19yZWNpcGVfc2FuaXR5X2NmZ2RhdGEiLCBkKQorCisgICAgIyBTaWNrLCB2ZXJ5IHNpY2suLgorICAgIGZyb20gYmIuZGF0YV9zbWFydCBpbXBvcnQgRGF0YVNtYXJ0CisgICAgb2xkID0gRGF0YVNtYXJ0LnJlbmFtZVZhcgorICAgIGRlZiBteXJlbmFtZShzZWxmLCBrZXksIG5ld2tleSk6CisgICAgICAgIG9sZHZhbHVlID0gc2VsZi5nZXRWYXIobmV3a2V5LCAwKQorICAgICAgICBvbGQoc2VsZiwga2V5LCBuZXdrZXkpCisgICAgICAgIG5ld3ZhbHVlID0gc2VsZi5nZXRWYXIobmV3a2V5LCAwKQorICAgICAgICBpZiBvbGR2YWx1ZToKKyAgICAgICAgICAgIHJlbmFtZXMgPSBzZWxmLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCAwKSBvciBzZXQoKQorICAgICAgICAgICAgcmVuYW1lcy5hZGQoKGtleSwgbmV3a2V5LCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgc2VsZi5zZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZW5hbWVzIiwgcmVuYW1lcykKKyAgICBEYXRhU21hcnQucmVuYW1lVmFyID0gbXlyZW5hbWUKK30KK2FkZGhhbmRsZXIgcmVjaXBlX3Nhbml0eV9laAorcmVjaXBlX3Nhbml0eV9laFtldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlbG9jYXRhYmxlLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZWxvY2F0YWJsZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTk5ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZWxvY2F0YWJsZS5iYmNsYXNzCkBAIC0wLDAgKzEsNyBAQAoraW5oZXJpdCBjaHJwYXRoCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAicmVsb2NhdGFibGVfYmluYXJpZXNfcHJlcHJvY2VzcyIKKworcHl0aG9uIHJlbG9jYXRhYmxlX2JpbmFyaWVzX3ByZXByb2Nlc3MoKSB7CisgICAgcnBhdGhfcmVwbGFjZShkLmV4cGFuZCgnJHtTWVNST09UX0RFU1RESVJ9JyksIGQpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZXBvcnQtZXJyb3IuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MGMyOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yZXBvcnQtZXJyb3IuYmJjbGFzcwpAQCAtMCwwICsxLDkyIEBACisjCisjIENvbGxlY3RzIGRlYnVnIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGNyZWF0ZSBlcnJvciByZXBvcnQgZmlsZXMuCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3I6IEFuZHJlZWEgQnJhbmR1c2EgUHJvY2EgPGFuZHJlZWEuYi5wcm9jYUBpbnRlbC5jb20+CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIENPUFlJTkcuTUlUIGZvciBkZXRhaWxzCisKK0VSUl9SRVBPUlRfRElSID89ICIke0xPR19ESVJ9L2Vycm9yLXJlcG9ydCIKKworZGVmIGVycm9ycmVwb3J0X2dldGRhdGEoZSk6CisgICAgbG9ncGF0aCA9IGUuZGF0YS5nZXRWYXIoJ0VSUl9SRVBPUlRfRElSJywgVHJ1ZSkKKyAgICBkYXRhZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiZXJyb3ItcmVwb3J0LnR4dCIpCisgICAgd2l0aCBvcGVuKGRhdGFmaWxlKSBhcyBmOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICByZXR1cm4gZGF0YQorCitkZWYgZXJyb3JyZXBvcnRfc2F2ZWRhdGEoZSwgbmV3ZGF0YSwgZmlsZSk6CisgICAgaW1wb3J0IGpzb24KKyAgICBsb2dwYXRoID0gZS5kYXRhLmdldFZhcignRVJSX1JFUE9SVF9ESVInLCBUcnVlKQorICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsIGZpbGUpCisgICAgd2l0aCBvcGVuKGRhdGFmaWxlLCAidyIpIGFzIGY6CisgICAgICAgIGpzb24uZHVtcChuZXdkYXRhLCBmLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUpCisgICAgcmV0dXJuIGRhdGFmaWxlCisKK3B5dGhvbiBlcnJvcnJlcG9ydF9oYW5kbGVyICgpIHsKKyAgICAgICAgaW1wb3J0IGpzb24KKworICAgICAgICBsb2dwYXRoID0gZS5kYXRhLmdldFZhcignRVJSX1JFUE9SVF9ESVInLCBUcnVlKQorICAgICAgICBkYXRhZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiZXJyb3ItcmVwb3J0LnR4dCIpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGxvZ3BhdGgpCisgICAgICAgICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIG1hY2hpbmUgPSBlLmRhdGEuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKKyAgICAgICAgICAgIGRhdGFbJ21hY2hpbmUnXSA9IG1hY2hpbmUKKyAgICAgICAgICAgIGRhdGFbJ2J1aWxkX3N5cyddID0gZS5kYXRhLmdldFZhcigiQlVJTERfU1lTIiwgVHJ1ZSkKKyAgICAgICAgICAgIGRhdGFbJ25hdGl2ZWxzYiddID0gZS5kYXRhLmdldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgVHJ1ZSkKKyAgICAgICAgICAgIGRhdGFbJ2Rpc3RybyddID0gZS5kYXRhLmdldFZhcigiRElTVFJPIiwgVHJ1ZSkKKyAgICAgICAgICAgIGRhdGFbJ3RhcmdldF9zeXMnXSA9IGUuZGF0YS5nZXRWYXIoIlRBUkdFVF9TWVMiLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnZmFpbHVyZXMnXSA9IFtdCisgICAgICAgICAgICBkYXRhWydjb21wb25lbnQnXSA9IGUuZ2V0UGtncygpWzBdCisgICAgICAgICAgICBkYXRhWydicmFuY2hfY29tbWl0J10gPSBiYXNlX2RldGVjdF9icmFuY2goZS5kYXRhKSArICI6ICIgKyBiYXNlX2RldGVjdF9yZXZpc2lvbihlLmRhdGEpCisgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQorICAgICAgICAgICAgZXJyb3JyZXBvcnRfc2F2ZWRhdGEoZSwgZGF0YSwgImVycm9yLXJlcG9ydC50eHQiKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgIHRhc2sgPSBlLnRhc2sKKyAgICAgICAgICAgIHRhc2tkYXRhPXt9CisgICAgICAgICAgICBsb2cgPSBlLmRhdGEuZ2V0VmFyKCdCQl9MT0dGSUxFJywgVHJ1ZSkKKyAgICAgICAgICAgIHRhc2tkYXRhWydwYWNrYWdlJ10gPSBlLmRhdGEuZXhwYW5kKCIke1BGfSIpCisgICAgICAgICAgICB0YXNrZGF0YVsndGFzayddID0gdGFzaworICAgICAgICAgICAgaWYgbG9nOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbG9nRmlsZSA9IG9wZW4obG9nLCAncicpCisgICAgICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSBsb2dGaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICAgICAgICAgbG9nRmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBsb2dkYXRhID0gIlVuYWJsZSB0byByZWFkIGxvZyBmaWxlIgorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSAiTm8gTG9nIgorCisgICAgICAgICAgICAjIHNlcnZlciB3aWxsIHJlZnVzZSBmYWlsdXJlcyBsb25nZXIgdGhhbiBwYXJhbSBzcGVjaWZpZWQgaW4gcHJvamVjdC5zZXR0aW5ncy5weQorICAgICAgICAgICAgIyBNQVhfVVBMT0FEX1NJWkUgPSAiNTI0Mjg4MCIKKyAgICAgICAgICAgICMgdXNlIGxvd2VyIHZhbHVlLCBiZWNhdXNlIDY1MCBjaGFycyBjYW4gYmUgc3BlbnQgaW4gdGFzaywgcGFja2FnZSwgdmVyc2lvbgorICAgICAgICAgICAgbWF4X2xvZ2RhdGFfc2l6ZSA9IDUyNDIwMDAKKyAgICAgICAgICAgICMgdXBsb2FkIGxhc3QgbWF4X2xvZ2RhdGFfc2l6ZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICBpZiBsZW4obG9nZGF0YSkgPiBtYXhfbG9nZGF0YV9zaXplOgorICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSAiLi4uIiArIGxvZ2RhdGFbLW1heF9sb2dkYXRhX3NpemU6XQorICAgICAgICAgICAgdGFza2RhdGFbJ2xvZyddID0gbG9nZGF0YQorICAgICAgICAgICAgbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGRhdGFmaWxlICsgJy5sb2NrJykKKyAgICAgICAgICAgIGpzb25kYXRhID0ganNvbi5sb2FkcyhlcnJvcnJlcG9ydF9nZXRkYXRhKGUpKQorICAgICAgICAgICAganNvbmRhdGFbJ2ZhaWx1cmVzJ10uYXBwZW5kKHRhc2tkYXRhKQorICAgICAgICAgICAgZXJyb3JyZXBvcnRfc2F2ZWRhdGEoZSwganNvbmRhdGEsICJlcnJvci1yZXBvcnQudHh0IikKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpOgorICAgICAgICAgICAgbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGRhdGFmaWxlICsgJy5sb2NrJykKKyAgICAgICAgICAgIGpzb25kYXRhID0ganNvbi5sb2FkcyhlcnJvcnJlcG9ydF9nZXRkYXRhKGUpKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorICAgICAgICAgICAgZmFpbHVyZXMgPSBqc29uZGF0YVsnZmFpbHVyZXMnXQorICAgICAgICAgICAgaWYobGVuKGZhaWx1cmVzKSA+IDApOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gImVycm9yX3JlcG9ydF8iICsgZS5kYXRhLmdldFZhcigiQlVJTEROQU1FIiwgVHJ1ZSkrIi50eHQiCisgICAgICAgICAgICAgICAgZGF0YWZpbGUgPSBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBqc29uZGF0YSwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgYmIubm90ZSgiVGhlIGVycm9ycyBmb3IgdGhpcyBidWlsZCBhcmUgc3RvcmVkIGluICVzXG5Zb3UgY2FuIHNlbmQgdGhlIGVycm9ycyB0byBhIHJlcG9ydHMgc2VydmVyIGJ5IHJ1bm5pbmc6XG4gIHNlbmQtZXJyb3ItcmVwb3J0ICVzIFstcyBzZXJ2ZXJdIiAlIChkYXRhZmlsZSwgZGF0YWZpbGUpKQorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlRoZSBjb250ZW50cyBvZiB0aGVzZSBsb2dzIHdpbGwgYmUgcG9zdGVkIGluIHB1YmxpYyBpZiB5b3UgdXNlIHRoZSBhYm92ZSBjb21tYW5kIHdpdGggdGhlIGRlZmF1bHQgc2VydmVyLiBQbGVhc2UgZW5zdXJlIHlvdSByZW1vdmUgYW55IGlkZW50aWZ5aW5nIG9yIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIHdoZW4gcHJvbXB0ZWQgYmVmb3JlIHNlbmRpbmcuIikKK30KKworYWRkaGFuZGxlciBlcnJvcnJlcG9ydF9oYW5kbGVyCitlcnJvcnJlcG9ydF9oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tGYWlsZWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5ZWZjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcwpAQCAtMCwwICsxLDEyMCBAQAorIworIyBSZW1vdmVzIHNvdXJjZSBhZnRlciBidWlsZAorIworIyBUbyB1c2UgaXQgYWRkIHRoYXQgbGluZSB0byBjb25mL2xvY2FsLmNvbmY6CisjCisjIElOSEVSSVQgKz0gInJtX3dvcmsiCisjCisjIFRvIGluaGliaXQgcm1fd29yayBmb3Igc29tZSByZWNpcGVzLCBzcGVjaWZ5IHRoZW0gaW4gUk1fV09SS19FWENMVURFLgorIyBGb3IgZXhhbXBsZSwgaW4gY29uZi9sb2NhbC5jb25mOgorIworIyBSTV9XT1JLX0VYQ0xVREUgKz0gImljdS1uYXRpdmUgaWN1IGJ1c3lib3giCisjCisKKyMgVXNlIHRoZSBjb21wbGV0aW9uIHNjaGVkdWxlciBieSBkZWZhdWx0IHdoZW4gcm1fd29yayBpcyBhY3RpdmUKKyMgdG8gdHJ5IGFuZCByZWR1Y2UgZGlzayB1c2FnZQorQkJfU0NIRURVTEVSID89ICJjb21wbGV0aW9uIgorCitSTVdPUktfT1JJR19UQVNLIDo9ICIke0JCX0RFRkFVTFRfVEFTS30iCitCQl9ERUZBVUxUX1RBU0sgPSAicm1fd29ya19hbGwiCisKK2RvX3JtX3dvcmsgKCkgeworICAgICMgSWYgdGhlIHJlY2lwZSBuYW1lIGlzIGluIHRoZSBSTV9XT1JLX0VYQ0xVREUsIHNraXAgdGhlIHJlY2lwZS4KKyAgICBmb3IgcCBpbiAke1JNX1dPUktfRVhDTFVERX07IGRvCisgICAgICAgIGlmIFsgIiRwIiA9ICIke1BOfSIgXTsgdGhlbgorICAgICAgICAgICAgYmJub3RlICJybV93b3JrOiBTa2lwcGluZyAke1BOfSBzaW5jZSBpdCBpcyBpbiBSTV9XT1JLX0VYQ0xVREUiCisgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBjZCAke1dPUktESVJ9CisgICAgZm9yIGRpciBpbiAqCisgICAgZG8KKyAgICAgICAgIyBSZXRhaW4gb25seSBsb2dzIGFuZCBvdGhlciBmaWxlcyBpbiB0ZW1wLCBzYWZlbHkgaWdub3JlCisgICAgICAgICMgZmFpbHVyZXMgb2YgcmVtb3ZpbmcgcHNldWRvIGZvbGVycyBvbiBORlMyLzMgc2VydmVyLgorICAgICAgICBpZiBbICRkaXIgPSAncHNldWRvJyBdOyB0aGVuCisgICAgICAgICAgICBybSAtcmYgJGRpciAyPiAvZGV2L251bGwgfHwgdHJ1ZQorICAgICAgICBlbGlmIFsgJGRpciAhPSAndGVtcCcgXTsgdGhlbgorICAgICAgICAgICAgcm0gLXJmICRkaXIKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIE5lZWQgdG8gYWRkIHBzZXVkbyBiYWNrIG9yIHN1YnNxZXVlbnQgd29yayBpbiB0aGlzIHdvcmtkaXIKKyAgICAjIG1pZ2h0IGZhaWwgc2luY2Ugc2V0c2NlbmUgbWF5IG5vdCByZXJ1biB0byByZWNyZWF0ZSBpdAorICAgIG1rZGlyIC1wICR7V09SS0RJUn0vcHNldWRvLworCisgICAgIyBDaGFuZ2Ugbm9ybWFsIHN0YW1wcyBpbnRvIHNldHNjZW5lIHN0YW1wcyBhcyB0aGV5IGJldHRlciByZWZsZWN0IHRoZQorICAgICMgZmFjdCBXT1JLRElSIGlzIG5vdyBlbXB0eQorICAgICMgQWxzbyBsZWF2ZSBub2V4ZWMgc3RhbXBzIHNpbmNlIHNldHNjZW5lIHN0YW1wcyBkb24ndCBjb3ZlciB0aGVtCisgICAgY2QgYGRpcm5hbWUgJHtTVEFNUH1gCisgICAgZm9yIGkgaW4gYGJhc2VuYW1lICR7U1RBTVB9YCoKKyAgICBkbworICAgICAgICBmb3IgaiBpbiAke1NTVEFURVRBU0tTfSBkb19zaGFyZWRfd29ya2RpcgorICAgICAgICBkbworICAgICAgICAgICAgY2FzZSAkaSBpbgorICAgICAgICAgICAgKmRvX3NldHNjZW5lKikKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqc2lnZGF0YSopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpkb19wYWNrYWdlX3dyaXRlKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKmRvX2J1aWxkKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIyBXZSByZW1vdmUgZG9fcGFja2FnZSBlbnRpcmVseSwgaW5jbHVkaW5nIGFueQorICAgICAgICAgICAgIyBzc3RhdGUgdmVyc2lvbiBzaW5jZSBvdGhlcndpc2Ugd2UnZCBuZWVkIHRvIGxlYXZlICdwbGFpbmRpcnMnIGFyb3VuZAorICAgICAgICAgICAgIyBzdWNoIGFzICdwYWNrYWdlcycgYW5kICdwYWNrYWdlcy1zcGxpdCcgYW5kIHRoZXNlIGNhbiBiZSBsYXJnZS4gTm8gZW5kCisgICAgICAgICAgICAjIG9mIGNoYWluIHRhc2tzIGRlcGVuZCBkaXJlY3RseSBvbiBkb19wYWNrYWdlIGFueW1vcmUuCisgICAgICAgICAgICAqZG9fcGFja2FnZXwqZG9fcGFja2FnZS4qfCpkb19wYWNrYWdlX3NldHNjZW5lLiopCisgICAgICAgICAgICAgICAgcm0gLWYgJGk7CisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpfc2V0c2NlbmUqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqJGp8KiRqLiopCisgICAgICAgICAgICAgICAgbXYgJGkgYGVjaG8gJGkgfCBzZWQgLWUgInMjJHtqfSMke2p9X3NldHNjZW5lIyJgCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICBkb25lCisgICAgICAgIHJtIC1mICRpCisgICAgZG9uZQorfQorYWRkdGFzayBybV93b3JrIGFmdGVyIGRvXyR7Uk1XT1JLX09SSUdfVEFTS30KKworZG9fcm1fd29ya19hbGwgKCkgeworICAgIDoKK30KK2RvX3JtX3dvcmtfYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19ybV93b3JrIgorYWRkdGFzayBybV93b3JrX2FsbCBhZnRlciBkb19ybV93b3JrCisKK2RvX3BvcHVsYXRlX3Nka1twb3N0ZnVuY3NdICs9ICJybV93b3JrX3BvcHVsYXRlc2RrIgorcm1fd29ya19wb3B1bGF0ZXNkayAoKSB7CisgICAgOgorfQorcm1fd29ya19wb3B1bGF0ZXNka1tjbGVhbmRpcnNdID0gIiR7V09SS0RJUn0vc2RrIgorCitkb19yb290ZnNbcG9zdGZ1bmNzXSArPSAicm1fd29ya19yb290ZnMiCitybV93b3JrX3Jvb3RmcyAoKSB7CisgICAgOgorfQorcm1fd29ya19yb290ZnNbY2xlYW5kaXJzXSA9ICIke1dPUktESVJ9L3Jvb3RmcyIKKworcHl0aG9uICgpIHsKKyAgICAjIElmIHRoZSByZWNpcGUgbmFtZSBpcyBpbiB0aGUgUk1fV09SS19FWENMVURFLCBza2lwIHRoZSByZWNpcGUuCisgICAgZXhjbHVkZXMgPSAoZC5nZXRWYXIoIlJNX1dPUktfRVhDTFVERSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIHBuIGluIGV4Y2x1ZGVzOgorICAgICAgICBkLmRlbFZhckZsYWcoJ3JtX3dvcmtfcm9vdGZzJywgJ2NsZWFuZGlycycpCisgICAgICAgIGQuZGVsVmFyRmxhZygncm1fd29ya19wb3B1bGF0ZXNkaycsICdjbGVhbmRpcnMnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWI0NTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MKQEAgLTAsMCArMSwzOSBAQAorIworIyBDb3B5cmlnaHQgMjAwNi0yMDA3IE9wZW5lZGhhbmQgTHRkLgorIworCitST09URlNfUEtHTUFOQUdFID0gImRwa2cgYXB0IgorUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgID0gInJ1bi1wb3N0aW5zdHMiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBhcHQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19wb3B1bGF0ZV9zZGtbZGVwZW5kc10gKz0gImRwa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYXB0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGJ6aXAyLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9kZWIiCityb290ZnNfZGViX2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gIkJVSUxETkFNRSIKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCisKK2RvX3Jvb3Rmc1tsb2NrZmlsZXNdICs9ICIke0RFUExPWV9ESVJfREVCfS9kZWIubG9jayIKK2RvX3BvcHVsYXRlX3Nka1tsb2NrZmlsZXNdICs9ICIke0RFUExPWV9ESVJfREVCfS9kZWIubG9jayIKKworcHl0aG9uIHJvb3Rmc19kZWJfYmFkX3JlY29tbWVuZGF0aW9ucygpIHsKKyAgICBpZiBkLmdldFZhcigiQkFEX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpOgorICAgICAgICBiYi53YXJuKCJEZWJpYW4gcGFja2FnZSBpbnN0YWxsIGRvZXMgbm90IHN1cHBvcnQgQkFEX1JFQ09NTUVOREFUSU9OUyIpCit9Citkb19yb290ZnNbcHJlZnVuY3NdICs9ICJyb290ZnNfZGViX2JhZF9yZWNvbW1lbmRhdGlvbnMiCisKK0RFQl9QT1NUUFJPQ0VTU19DT01NQU5EUyA9ICIiCisKK29wa2dsaWJkaXIgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvb3BrZyIKKworcHl0aG9uICgpIHsKKyAgICAjIE1hcCBUQVJHRVRfQVJDSCB0byBEZWJpYW4ncyBpZGVhcyBhYm91dCBhcmNoaXRlY3R1cmVzCisgICAgZGFyY2ggPSBkLmdldFZhcignU0RLX0FSQ0gnLCBUcnVlKQorICAgIGlmIGRhcmNoIGluIFsieDg2IiwgImk0ODYiLCAiaTU4NiIsICJpNjg2IiwgInBlbnRpdW0iXToKKyAgICAgICAgIGQuc2V0VmFyKCdERUJfU0RLX0FSQ0gnLCAnaTM4NicpCisgICAgZWxpZiBkYXJjaCA9PSAieDg2XzY0IjoKKyAgICAgICAgIGQuc2V0VmFyKCdERUJfU0RLX0FSQ0gnLCAnYW1kNjQnKQorICAgIGVsaWYgZGFyY2ggPT0gImFybSI6CisgICAgICAgICBkLnNldFZhcignREVCX1NES19BUkNIJywgJ2FybWVsJykKK30KKworIyBUaGlzIHdpbGwgb2YgY291cnNlIG9ubHkgd29yayBhZnRlciByb290ZnNfZGViX2RvX3Jvb3RmcyBvciBwb3B1bGF0ZV9zZGtfZGViIGhhcyBiZWVuIGNhbGxlZAorRFBLR19RVUVSWV9DT01NQU5EID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9kcGtnLXF1ZXJ5IC0tYWRtaW5kaXI9JElOU1RBTExfUk9PVEZTX0RFQi92YXIvbGliL2Rwa2ciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfaXBrLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfaXBrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxNDRlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc19pcGsuYmJjbGFzcwpAQCAtMCwwICsxLDM5IEBACisjCisjIENyZWF0ZXMgYSByb290IGZpbGVzeXN0ZW0gb3V0IG9mIElQS3MKKyMKKyMgVGhpcyByb290ZnMgY2FuIGJlIG1vdW50ZWQgdmlhIHJvb3QtbmZzIG9yIGl0IGNhbiBiZSBwdXQgaW50byBhbiBjcmFtZnMvamZmcyBldGMuCisjIFNlZSBpbWFnZS5iYmNsYXNzIGZvciBhIHVzYWdlIG9mIHRoaXMuCisjCisKK0VYVFJBT1BLR0NPTkZJRyA/PSAiIgorUk9PVEZTX1BLR01BTkFHRSA9ICJvcGtnICR7RVhUUkFPUEtHQ09ORklHfSIKK1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQICA9ICJydW4tcG9zdGluc3RzIgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gIm9wa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Qgb3BrZy11dGlscy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAib3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9pcGsiCitkb19yb290ZnNbdmFyZGVwc10gKz0gIlBBQ0tBR0VfRkVFRF9VUklTIgorcm9vdGZzX2lwa19kb19yb290ZnNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJCVUlMRE5BTUUiCisKK2RvX3Jvb3Rmc1tsb2NrZmlsZXNdICs9ICIke1dPUktESVJ9L2lway5sb2NrIgorZG9fcG9wdWxhdGVfc2RrW2xvY2tmaWxlc10gKz0gIiR7V09SS0RJUn0vaXBrLmxvY2siCisKK09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUyA9ICIiCisKK09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMgPSAiIgorCitPUEtHTElCRElSID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliIgorCitNVUxUSUxJQlJFX0FMTE9XX1JFUCA9ICIke09QS0dMSUJESVJ9L29wa2d8L3Vzci9saWIvb3BrZyIKKworcHl0aG9uICgpIHsKKworICAgIGlmIGQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpOgorICAgICAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ3JlY3JkZXB0YXNrJykKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19wYWNrYWdlX3dyaXRlX2lwayIsICIiKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX2RlcGxveSIsICIiKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BvcHVsYXRlX3N5c3Jvb3QiLCAiIikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snLCBmbGFncykKKyAgICAgICAgZC5zZXRWYXIoJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsICIiKQorICAgICAgICBkLnNldFZhcignT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUycsICcnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NWQwMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MKQEAgLTAsMCArMSw0NyBAQAorIworIyBDcmVhdGVzIGEgcm9vdCBmaWxlc3lzdGVtIG91dCBvZiBycG0gcGFja2FnZXMKKyMKKworUk9PVEZTX1BLR01BTkFHRSA9ICJycG0gc21hcnRwbSIKK1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQID0gInJ1bi1wb3N0aW5zdHMiCisKKyMgQWRkIDUwTWVnIG9mIGV4dHJhIHNwYWNlIGZvciBTbWFydAorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFX2FwcGVuZCA9ICIke0BiYi51dGlscy5jb250YWlucygiUEFDS0FHRV9JTlNUQUxMIiwgInNtYXJ0cG0iLCAiICsgNTEyMDAiLCAiIiAsZCl9IgorCisjIFNtYXJ0IGlzIHB5dGhvbiBiYXNlZCwgc28gYmUgc3VyZSBweXRob24tbmF0aXZlIGlzIGF2YWlsYWJsZSB0byB1cy4KK0VYVFJBTkFUSVZFUEFUSCArPSAicHl0aG9uLW5hdGl2ZSIKKworIyBvcGtnIGlzIG5lZWRlZCBmb3IgdXBkYXRlLWFsdGVybmF0aXZlcworUlBNUk9PVEZTREVQRU5EUyA9ICJycG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIHJwbXJlc29sdmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIHB5dGhvbi1zbWFydHBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICBjcmVhdGVyZXBvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICBvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gIiR7UlBNUk9PVEZTREVQRU5EU30iCitkb19wb3B1bGF0ZV9zZGtbZGVwZW5kc10gKz0gIiR7UlBNUk9PVEZTREVQRU5EU30iCisKK2RvX3Jvb3Rmc1tyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfcnBtIgorcm9vdGZzX3JwbV9kb19yb290ZnNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJCVUlMRE5BTUUiCitkb19yb290ZnNbdmFyZGVwc10gKz0gIlBBQ0tBR0VfRkVFRF9VUklTIgorCisjIFJQTSBkb2Vzbid0IHdvcmsgd2l0aCBtdWx0aXBsZSByb290ZnMgZ2VuZXJhdGlvbiBhdCBvbmNlIGR1ZSB0byBjb2xsaXNpb25zIGluIHRoZSB1c2Ugb2YgZmlsZXMgCisjIGluICR7REVQTE9ZX0RJUl9SUE19LiBUaGlzIGNhbiBiZSByZW1vdmVkIGlmIHBhY2thZ2VfdXBkYXRlX2luZGV4X3JwbSBjYW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseQorZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9SUE19L3JwbS5sb2NrIgorZG9fcG9wdWxhdGVfc2RrW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9SUE19L3JwbS5sb2NrIgorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpOgorICAgICAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ3JlY3JkZXB0YXNrJykKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19wYWNrYWdlX3dyaXRlX3JwbSIsICIiKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX2RlcGxveSIsICIiKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BvcHVsYXRlX3N5c3Jvb3QiLCAiIikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snLCBmbGFncykKKyAgICAgICAgZC5zZXRWYXIoJ1JQTV9QUkVQUk9DRVNTX0NPTU1BTkRTJywgJycpCisgICAgICAgIGQuc2V0VmFyKCdSUE1fUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnJykKKworfQorIyBTbWFydCBpcyBweXRob24gYmFzZWQsIHNvIGJlIHN1cmUgcHl0aG9uLW5hdGl2ZSBpcyBhdmFpbGFibGUgdG8gdXMuCitFWFRSQU5BVElWRVBBVEggKz0gInB5dGhvbi1uYXRpdmUiCisKK3JwbWxpYmRpciA9ICIvdmFyL2xpYi9ycG0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1ODg3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcwpAQCAtMCwwICsxLDM2IEBACisjIFRoaXMgY2xhc3MgaW5zdGFsbHMgYWRkaXRpb25hbCBmaWxlcyBmb3VuZCBvbiB0aGUgYnVpbGQgaG9zdAorIyBkaXJlY3RseSBpbnRvIHRoZSByb290ZnMuCisjCisjIE9uZSB1c2UgY2FzZSBpcyB0byBpbnN0YWxsIGEgY29uc3RhbnQgc3NoIGhvc3Qga2V5IGluCisjIGFuIGltYWdlIHRoYXQgZ2V0cyBjcmVhdGVkIGZvciBqdXN0IG9uZSBtYWNoaW5lLiBUaGlzCisjIHNvbHZlcyB0d28gaXNzdWVzOgorIyAtIGhvc3Qga2V5IGdlbmVyYXRpb24gb24gdGhlIGRldmljZSBjYW4gc3RhbGwgd2hlbiB0aGUKKyMgICBrZXJuZWwgaGFzIG5vdCBnYXRoZXJlZCBlbm91Z2ggZW50cm9weSB5ZXQgKHNlZW4gaW4gcHJhY3RpY2UKKyMgICB1bmRlciBxZW11KQorIyAtIHNzaCBjb21wbGFpbnMgYnkgZGVmYXVsdCB3aGVuIHRoZSBob3N0IGtleSBjaGFuZ2VzCisjCisjIEZvciBkcm9wYmVhciwgd2l0aCB0aGUgc3NoIGhvc3Qga2V5IHN0b3JlIGFsb25nIHNpZGUgdGhlIGxvY2FsLmNvbmY6CisjIDEuIEV4dGVuZCBsb2NhbC5jb25mOgorIyAgICBJTkhFUklUICs9ICJyb290ZnNkZWJ1Z2ZpbGVzIgorIyAgICBST09URlNfREVCVUdfRklMRVMgKz0gIiR7VE9QRElSfS9jb25mL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSAke0lNQUdFX1JPT1RGU30vZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSA7IgorIyAyLiBCb290IHRoZSBpbWFnZSBvbmNlLCBjb3B5IHRoZSBkcm9wYmVhcl9yc2FfaG9zdF9rZXkgZnJvbQorIyAgICB0aGUgZGV2aWNlIGludG8geW91ciBidWlsZCBjb25mIGRpcmVjdG9yeS4KKyMKKyMgRG8gbm90IHVzZSBmb3IgcHJvZHVjdGlvbiBpbWFnZXMhIEl0IGJ5cGFzc2VzIHNldmVyYWwKKyMgY29yZSBidWlsZCBtZWNoYW5pc21zICh1cGRhdGluZyB0aGUgaW1hZ2Ugd2hlbiBvbmUKKyMgb2YgdGhlIGZpbGVzIGNoYW5nZXMsIGxpY2Vuc2UgdHJhY2tpbmcgaW4gdGhlIGltYWdlCisjIG1hbmlmZXN0LCAuLi4pLgorCitST09URlNfREVCVUdfRklMRVMgPz0gIiIKK1JPT1RGU19ERUJVR19GSUxFU1tkb2NdID0gIkxpc3RzIGFkZGl0aW9uYWwgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gYmUgaW5zdGFsbGVkIHdpdGggJ2NwIC1hJyBpbiB0aGUgZm9ybWF0ICdzb3VyY2UxIHRhcmdldDE7c291cmNlMiB0YXJnZXQyOy4uLiciCisKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICJyb290ZnNfZGVidWdfZmlsZXMgOyIKK3Jvb3Rmc19kZWJ1Z19maWxlcyAoKSB7CisgICAjIS9iaW4vc2ggLWUKKyAgIGVjaG8gIiR7Uk9PVEZTX0RFQlVHX0ZJTEVTfSIgfCBzZWQgLWUgJ3MvOy9cbi9nJyB8IHdoaWxlIHJlYWQgc291cmNlIHRhcmdldDsgZG8KKyAgICAgIGlmIFsgLWUgIiRzb3VyY2UiIF07IHRoZW4KKyAgICAgICAgIG1rZGlyIC1wICQoZGlybmFtZSAkdGFyZ2V0KQorICAgICAgICAgY3AgLWEgJHNvdXJjZSAkdGFyZ2V0CisgICAgICBmaQorICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2FuaXR5LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI3NDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2FuaXR5LmJiY2xhc3MKQEAgLTAsMCArMSw5NDUgQEAKKyMKKyMgU2FuaXR5IGNoZWNrIHRoZSB1c2VycyBzZXR1cCBmb3IgY29tbW9uIG1pc2NvbmZpZ3VyYXRpb25zCisjCisKK1NBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMgPz0gInBhdGNoIGRpZmZzdGF0IG1ha2VpbmZvIGdpdCBiemlwMiB0YXIgXAorICAgIGd6aXAgZ2F3ayBjaHJwYXRoIHdnZXQgY3BpbyBwZXJsIgorCitkZWYgYmJsYXllcnNfY29uZl9maWxlKGQpOgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpLCAnY29uZi9iYmxheWVycy5jb25mJykKKworZGVmIHNhbml0eV9jb25mX3JlYWQoZm4pOgorICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICByZXR1cm4gbGluZXMKKworZGVmIHNhbml0eV9jb25mX2ZpbmRfbGluZShwYXR0ZXJuLCBsaW5lcyk6CisgICAgaW1wb3J0IHJlCisgICAgcmV0dXJuIG5leHQoKChpbmRleCwgbGluZSkKKyAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcykKKyAgICAgICAgaWYgcmUuc2VhcmNoKHBhdHRlcm4sIGxpbmUpKSwgKE5vbmUsIE5vbmUpKQorCitkZWYgc2FuaXR5X2NvbmZfdXBkYXRlKGZuLCBsaW5lcywgdmVyc2lvbl92YXJfbmFtZSwgbmV3X3ZlcnNpb24pOgorICAgIGluZGV4LCBsaW5lID0gc2FuaXR5X2NvbmZfZmluZF9saW5lKHZlcnNpb25fdmFyX25hbWUsIGxpbmVzKQorICAgIGxpbmVzW2luZGV4XSA9ICclcyA9ICIlZCJcbicgJSAodmVyc2lvbl92YXJfbmFtZSwgbmV3X3ZlcnNpb24pCisgICAgd2l0aCBvcGVuKGZuLCAidyIpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJycuam9pbihsaW5lcykpCisKKyMgRnVuY3Rpb25zIGFkZGVkIHRvIHRoaXMgdmFyaWFibGUgTVVTVCB0aHJvdyBhbiBleGNlcHRpb24gKG9yIHN5cy5leGl0KCkpIHVubGVzcyB0aGV5CisjIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIExDT05GX1ZFUlNJT04gaW4gYmJsYXllcnMuY29uZgorQkJMQVlFUlNfQ09ORl9VUERBVEVfRlVOQ1MgKz0gIm9lY29yZV91cGRhdGVfYmJsYXllcnMiCisKK3B5dGhvbiBvZWNvcmVfdXBkYXRlX2JibGF5ZXJzKCkgeworICAgICMgYmJsYXllcnMuY29uZiBpcyBvdXQgb2YgZGF0ZSwgc28gc2VlIGlmIHdlIGNhbiByZXNvbHZlIHRoYXQKKworICAgIGN1cnJlbnRfbGNvbmYgPSBpbnQoZC5nZXRWYXIoJ0xDT05GX1ZFUlNJT04nLCBUcnVlKSkKKyAgICBpZiBub3QgY3VycmVudF9sY29uZjoKKyAgICAgICAgc3lzLmV4aXQoKQorICAgIGxjb25mX3ZlcnNpb24gPSBpbnQoZC5nZXRWYXIoJ0xBWUVSX0NPTkZfVkVSU0lPTicsIFRydWUpKQorICAgIGxpbmVzID0gW10KKworICAgIGlmIGN1cnJlbnRfbGNvbmYgPCA0OgorICAgICAgICBzeXMuZXhpdCgpCisKKyAgICBiYmxheWVyc19mbiA9IGJibGF5ZXJzX2NvbmZfZmlsZShkKQorICAgIGxpbmVzID0gc2FuaXR5X2NvbmZfcmVhZChiYmxheWVyc19mbikKKworICAgIGlmIGN1cnJlbnRfbGNvbmYgPT0gNCBhbmQgbGNvbmZfdmVyc2lvbiA+IDQ6CisgICAgICAgIHRvcGRpcl92YXIgPSAnJCcgKyAne1RPUERJUn0nCisgICAgICAgIGluZGV4LCBiYnBhdGhfbGluZSA9IHNhbml0eV9jb25mX2ZpbmRfbGluZSgnQkJQQVRIJywgbGluZXMpCisgICAgICAgIGlmIGJicGF0aF9saW5lOgorICAgICAgICAgICAgc3RhcnQgPSBiYnBhdGhfbGluZS5maW5kKCciJykKKyAgICAgICAgICAgIGlmIHN0YXJ0ICE9IC0xIGFuZCAobGVuKGJicGF0aF9saW5lKSAhPSAoc3RhcnQgKyAxKSk6CisgICAgICAgICAgICAgICAgaWYgYmJwYXRoX2xpbmVbc3RhcnQgKyAxXSA9PSAnIic6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzW2luZGV4XSA9IChiYnBhdGhfbGluZVs6c3RhcnQgKyAxXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BkaXJfdmFyICsgYmJwYXRoX2xpbmVbc3RhcnQgKyAxOl0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRvcGRpcl92YXIgaW4gYmJwYXRoX2xpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1tpbmRleF0gPSAoYmJwYXRoX2xpbmVbOnN0YXJ0ICsgMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wZGlyX3ZhciArICc6JyArIGJicGF0aF9saW5lW3N0YXJ0ICsgMTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmRleCwgYmJmaWxlc19saW5lID0gc2FuaXR5X2NvbmZfZmluZF9saW5lKCdCQkZJTEVTJywgbGluZXMpCisgICAgICAgICAgICBpZiBiYmZpbGVzX2xpbmU6CisgICAgICAgICAgICAgICAgbGluZXMuaW5zZXJ0KGluZGV4LCAnQkJQQVRIID0gIicgKyB0b3BkaXJfdmFyICsgJyJcbicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKworICAgICAgICBjdXJyZW50X2xjb25mICs9IDEKKyAgICAgICAgc2FuaXR5X2NvbmZfdXBkYXRlKGJibGF5ZXJzX2ZuLCBsaW5lcywgJ0xDT05GX1ZFUlNJT04nLCBjdXJyZW50X2xjb25mKQorICAgICAgICByZXR1cm4KKworICAgIGVsaWYgY3VycmVudF9sY29uZiA9PSA1IGFuZCBsY29uZl92ZXJzaW9uID4gNToKKyAgICAgICAgIyBOdWxsIHVwZGF0ZSwgdG8gYXZvaWQgaXNzdWVzIHdpdGggcGVvcGxlIHN3aXRjaGluZyBiZXR3ZWVuIHBva3kgYW5kIG90aGVyIGRpc3Ryb3MKKyAgICAgICAgY3VycmVudF9sY29uZiA9IDYKKyAgICAgICAgc2FuaXR5X2NvbmZfdXBkYXRlKGJibGF5ZXJzX2ZuLCBsaW5lcywgJ0xDT05GX1ZFUlNJT04nLCBjdXJyZW50X2xjb25mKQorICAgICAgICByZXR1cm4KKworICAgIHN5cy5leGl0KCkKK30KKworZGVmIHJhaXNlX3Nhbml0eV9lcnJvcihtc2csIGQsIG5ldHdvcmtfZXJyb3I9RmFsc2UpOgorICAgIGlmIGQuZ2V0VmFyKCJTQU5JVFlfVVNFX0VWRU5UUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVja0ZhaWxlZChtc2csIG5ldHdvcmtfZXJyb3IpLCBkKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVja0ZhaWxlZChtc2cpLCBkKQorICAgICAgICByZXR1cm4KKworICAgIGJiLmZhdGFsKCIiIiBPRS1jb3JlJ3MgY29uZmlnIHNhbml0eSBjaGVja2VyIGRldGVjdGVkIGEgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb24uCisgICAgRWl0aGVyIGZpeCB0aGUgY2F1c2Ugb2YgdGhpcyBlcnJvciBvciBhdCB5b3VyIG93biByaXNrIGRpc2FibGUgdGhlIGNoZWNrZXIgKHNlZSBzYW5pdHkuY29uZikuCisgICAgRm9sbG93aW5nIGlzIHRoZSBsaXN0IG9mIHBvdGVudGlhbCBwcm9ibGVtcyAvIGFkdmlzb3JpZXM6CisgICAgCisgICAgJXMiIiIgJSBtc2cpCisKKyMgQ2hlY2sgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIGEgdHVuaW5nLgorZGVmIGNoZWNrX3Rvb2xjaGFpbl90dW5lX2FyZ3MoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIGVycnMpOgorICAgIGZvdW5kX2Vycm9ycyA9IEZhbHNlCisgICAgaWYgY2hlY2tfdG9vbGNoYWluX2FyZ3NfcHJlc2VudChkYXRhLCB0dW5lLCBtdWx0aWxpYiwgZXJycywgJ0NDQVJHUycpOgorICAgICAgICBmb3VuZF9lcnJvcnMgPSBUcnVlCisgICAgaWYgY2hlY2tfdG9vbGNoYWluX2FyZ3NfcHJlc2VudChkYXRhLCB0dW5lLCBtdWx0aWxpYiwgZXJycywgJ0FTQVJHUycpOgorICAgICAgICBmb3VuZF9lcnJvcnMgPSBUcnVlCisgICAgaWYgY2hlY2tfdG9vbGNoYWluX2FyZ3NfcHJlc2VudChkYXRhLCB0dW5lLCBtdWx0aWxpYiwgZXJycywgJ0xEQVJHUycpOgorICAgICAgICBmb3VuZF9lcnJvcnMgPSBUcnVlCisKKyAgICByZXR1cm4gZm91bmRfZXJyb3JzCisKK2RlZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCB0dW5lX2Vycm9ycywgd2hpY2gpOgorICAgIGFyZ3Nfc2V0ID0gKGRhdGEuZ2V0VmFyKCJUVU5FXyVzIiAlIHdoaWNoLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGFyZ3Nfd2FudGVkID0gKGRhdGEuZ2V0VmFyKCJUVU5FQUJJX1JFUVVJUkVEXyVzX3R1bmUtJXMiICUgKHdoaWNoLCB0dW5lKSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBhcmdzX21pc3NpbmcgPSBbXQorCisgICAgIyBJZiBubyBhcmdzIGFyZSBsaXN0ZWQvcmVxdWlyZWQsIHdlIGFyZSBkb25lLgorICAgIGlmIG5vdCBhcmdzX3dhbnRlZDoKKyAgICAgICAgcmV0dXJuCisgICAgZm9yIGFyZyBpbiBhcmdzX3dhbnRlZDoKKyAgICAgICAgaWYgYXJnIG5vdCBpbiBhcmdzX3NldDoKKyAgICAgICAgICAgIGFyZ3NfbWlzc2luZy5hcHBlbmQoYXJnKQorCisgICAgZm91bmRfZXJyb3JzID0gRmFsc2UKKyAgICBpZiBhcmdzX21pc3Npbmc6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKyAgICAgICAgdHVuZV9lcnJvcnMuYXBwZW5kKCJUVU5FQUJJIGZvciAlcyByZXF1aXJlcyAnJXMnIGluIFRVTkVfJXMgKCVzKS4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHR1bmUsICcgJy5qb2luKGFyZ3NfbWlzc2luZyksIHdoaWNoLCAnICcuam9pbihhcmdzX3NldCkpKQorICAgIHJldHVybiBmb3VuZF9lcnJvcnMKKworIyBDaGVjayBhIHNpbmdsZSB0dW5lIGZvciB2YWxpZGl0eS4KK2RlZiBjaGVja190b29sY2hhaW5fdHVuZShkYXRhLCB0dW5lLCBtdWx0aWxpYik6CisgICAgdHVuZV9lcnJvcnMgPSBbXQorICAgIGlmIG5vdCB0dW5lOgorICAgICAgICByZXR1cm4gIk5vIHR1bmluZyBmb3VuZCBmb3IgJXMgbXVsdGlsaWIuIiAlIG11bHRpbGliCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGRhdGEpCisgICAgaWYgbXVsdGlsaWIgIT0gImRlZmF1bHQiOgorICAgICAgICAjIEFwcGx5IHRoZSBvdmVycmlkZXMgc28gd2UgY2FuIGxvb2sgYXQgdGhlIGRldGFpbHMuCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBtdWx0aWxpYgorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgYmIuZGVidWcoMiwgIlNhbml0eS1jaGVja2luZyB0dW5pbmcgJyVzJyAoJXMpIGZlYXR1cmVzOiIgJSAodHVuZSwgbXVsdGlsaWIpKQorICAgIGZlYXR1cmVzID0gKGxvY2FsZGF0YS5nZXRWYXIoIlRVTkVfRkVBVFVSRVNfdHVuZS0lcyIgJSB0dW5lLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIG5vdCBmZWF0dXJlczoKKyAgICAgICAgcmV0dXJuICJUdW5pbmcgJyVzJyBoYXMgbm8gZGVmaW5lZCBmZWF0dXJlcywgYW5kIGNhbm5vdCBiZSB1c2VkLiIgJSB0dW5lCisgICAgdmFsaWRfdHVuZXMgPSBsb2NhbGRhdGEuZ2V0VmFyRmxhZ3MoJ1RVTkVWQUxJRCcpIG9yIHt9CisgICAgY29uZmxpY3RzID0gbG9jYWxkYXRhLmdldFZhckZsYWdzKCdUVU5FQ09ORkxJQ1RTJykgb3Ige30KKyAgICAjIFtkb2NdIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgdmFyaWFibGUsIG5vdCBhIHJlYWwgZmVhdHVyZQorICAgIGlmICdkb2MnIGluIHZhbGlkX3R1bmVzOgorICAgICAgICBkZWwgdmFsaWRfdHVuZXNbJ2RvYyddCisgICAgaWYgJ2RvYycgaW4gY29uZmxpY3RzOgorICAgICAgICBkZWwgY29uZmxpY3RzWydkb2MnXQorICAgIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzOgorICAgICAgICBpZiBmZWF0dXJlIGluIGNvbmZsaWN0czoKKyAgICAgICAgICAgIGZvciBjb25mbGljdCBpbiBjb25mbGljdHNbZmVhdHVyZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBjb25mbGljdCBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgICAgICAgICAgdHVuZV9lcnJvcnMuYXBwZW5kKCJGZWF0dXJlICclcycgY29uZmxpY3RzIHdpdGggJyVzJy4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChmZWF0dXJlLCBjb25mbGljdCkpCisgICAgICAgIGlmIGZlYXR1cmUgaW4gdmFsaWRfdHVuZXM6CisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiICAlczogJXMiICUgKGZlYXR1cmUsIHZhbGlkX3R1bmVzW2ZlYXR1cmVdKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHR1bmVfZXJyb3JzLmFwcGVuZCgiRmVhdHVyZSAnJXMnIGlzIG5vdCBkZWZpbmVkLiIgJSBmZWF0dXJlKQorICAgIHdoaXRlbGlzdCA9IGxvY2FsZGF0YS5nZXRWYXIoIlRVTkVBQklfV0hJVEVMSVNUIiwgVHJ1ZSkKKyAgICBpZiB3aGl0ZWxpc3Q6CisgICAgICAgIHR1bmVhYmkgPSBsb2NhbGRhdGEuZ2V0VmFyKCJUVU5FQUJJX3R1bmUtJXMiICUgdHVuZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHR1bmVhYmk6CisgICAgICAgICAgICB0dW5lYWJpID0gdHVuZQorICAgICAgICBpZiBUcnVlIG5vdCBpbiBbeCBpbiB3aGl0ZWxpc3Quc3BsaXQoKSBmb3IgeCBpbiB0dW5lYWJpLnNwbGl0KCldOgorICAgICAgICAgICAgdHVuZV9lcnJvcnMuYXBwZW5kKCJUdW5pbmcgJyVzJyAoJXMpIGNhbm5vdCBiZSB1c2VkIHdpdGggYW55IHN1cHBvcnRlZCB0dW5pbmcvQUJJLiIgJQorICAgICAgICAgICAgICAgICh0dW5lLCB0dW5lYWJpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBjaGVja190b29sY2hhaW5fdHVuZV9hcmdzKGxvY2FsZGF0YSwgdHVuZWFiaSwgbXVsdGlsaWIsIHR1bmVfZXJyb3JzKToKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU2FuaXR5IGNoZWNrOiBDb21waWxlciBhcmdzIE9LIGZvciAlcy4iICUgdHVuZSkKKyAgICBpZiB0dW5lX2Vycm9yczoKKyAgICAgICAgcmV0dXJuICJUdW5pbmcgJyVzJyBoYXMgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4iICUgdHVuZSArICdcbicuam9pbih0dW5lX2Vycm9ycykKKworZGVmIGNoZWNrX3Rvb2xjaGFpbihkYXRhKToKKyAgICB0dW5lX2Vycm9yX3NldCA9IFtdCisgICAgZGVmdHVuZSA9IGRhdGEuZ2V0VmFyKCJERUZBVUxUVFVORSIsIFRydWUpCisgICAgdHVuZV9lcnJvcnMgPSBjaGVja190b29sY2hhaW5fdHVuZShkYXRhLCBkZWZ0dW5lLCAnZGVmYXVsdCcpCisgICAgaWYgdHVuZV9lcnJvcnM6CisgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCh0dW5lX2Vycm9ycykKKworICAgIG11bHRpbGlicyA9IChkYXRhLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGdsb2JhbF9tdWx0aWxpYnMgPSAoZGF0YS5nZXRWYXIoIk1VTFRJTElCX0dMT0JBTF9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBpZiBtdWx0aWxpYnM6CisgICAgICAgIHNlZW5fbGlicyA9IFtdCisgICAgICAgIHNlZW5fdHVuZXMgPSBbXQorICAgICAgICBmb3IgbGliIGluIG11bHRpbGliczoKKyAgICAgICAgICAgIGlmIGxpYiBpbiBzZWVuX2xpYnM6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJUaGUgbXVsdGlsaWIgJyVzJyBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlLiIgJSBsaWIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlZW5fbGlicy5hcHBlbmQobGliKQorICAgICAgICAgICAgaWYgbm90IGxpYiBpbiBnbG9iYWxfbXVsdGlsaWJzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiTXVsdGlsaWIgJXMgaXMgbm90IHByZXNlbnQgaW4gTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTIiAlIGxpYikKKyAgICAgICAgICAgIHR1bmUgPSBkYXRhLmdldFZhcigiREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLSVzIiAlIGxpYiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHR1bmUgaW4gc2Vlbl90dW5lczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIlRoZSB0dW5pbmcgJyVzJyBhcHBlYXJzIGluIG1vcmUgdGhhbiBvbmUgbXVsdGlsaWIuIiAlIHR1bmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlZW5fbGlicy5hcHBlbmQodHVuZSkKKyAgICAgICAgICAgIGlmIHR1bmUgPT0gZGVmdHVuZToKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIk11bHRpbGliICclcycgKCVzKSBpcyBhbHNvIHRoZSBkZWZhdWx0IHR1bmluZy4iICUgKGxpYiwgZGVmdHVuZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3JzID0gY2hlY2tfdG9vbGNoYWluX3R1bmUoZGF0YSwgdHVuZSwgbGliKQorICAgICAgICAgICAgaWYgdHVuZV9lcnJvcnM6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKHR1bmVfZXJyb3JzKQorICAgIGlmIHR1bmVfZXJyb3Jfc2V0OgorICAgICAgICByZXR1cm4gIlRvb2xjaGFpbiB0dW5pbmdzIGludmFsaWQ6XG4iICsgJ1xuJy5qb2luKHR1bmVfZXJyb3Jfc2V0KSArICJcbiIKKworICAgIHJldHVybiAiIgorCitkZWYgY2hlY2tfY29uZl9leGlzdHMoZm4sIGRhdGEpOgorICAgIGJicGF0aCA9IFtdCisgICAgZm4gPSBkYXRhLmV4cGFuZChmbikKKyAgICB2YmJwYXRoID0gZGF0YS5nZXRWYXIoIkJCUEFUSCIsIEZhbHNlKQorICAgIGlmIHZiYnBhdGg6CisgICAgICAgIGJicGF0aCArPSB2YmJwYXRoLnNwbGl0KCI6IikKKyAgICBmb3IgcCBpbiBiYnBhdGg6CisgICAgICAgIGN1cnJuYW1lID0gb3MucGF0aC5qb2luKGRhdGEuZXhwYW5kKHApLCBmbikKKyAgICAgICAgaWYgb3MuYWNjZXNzKGN1cnJuYW1lLCBvcy5SX09LKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZShmaWxlcGF0aCwgcGF0aG5hbWUpOgorICAgIGltcG9ydCBzdHJpbmcsIHJhbmRvbQorICAgIHRlc3RmaWxlID0gb3MucGF0aC5qb2luKGZpbGVwYXRoLCAnJy5qb2luKHJhbmRvbS5jaG9pY2Uoc3RyaW5nLmFzY2lpX2xldHRlcnMpIGZvciB4IGluIHJhbmdlKDIwMCkpKQorICAgIHRyeToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihmaWxlcGF0aCkKKyAgICAgICAgZiA9IG9wZW4odGVzdGZpbGUsICJ3IikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLnJlbW92ZSh0ZXN0ZmlsZSkKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgZXJyLCBzdHJlcnJvciA9IGUuYXJncworICAgICAgICBpZiBlcnIgPT0gZXJybm8uRU5BTUVUT09MT05HOgorICAgICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY3JlYXRlIGEgZmlsZSB3aXRoIGEgbG9uZyBuYW1lIGluICVzLiBQbGVhc2UgdXNlIGEgZmlsZXN5c3RlbSB0aGF0IGRvZXMgbm90IHVucmVhc29uYWJseSBsaW1pdCBmaWxlbmFtZSBsZW5ndGguXG4iICUgcGF0aG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiRmFpbGVkIHRvIGNyZWF0ZSBhIGZpbGUgaW4gJXM6ICVzLlxuIiAlIChwYXRobmFtZSwgc3RyZXJyb3IpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgZXJybm8sIHN0cmVycm9yID0gZS5hcmdzCisgICAgICAgIHJldHVybiAiRmFpbGVkIHRvIGNyZWF0ZSAlcyBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gcnVuIGxvbmcgbmFtZSBzYW5pdHkgY2hlY2s6ICVzLlxuIiAlIChwYXRobmFtZSwgc3RyZXJyb3IpCisgICAgcmV0dXJuICIiCisKK2RlZiBjaGVja19wYXRoX2xlbmd0aChmaWxlcGF0aCwgcGF0aG5hbWUsIGxpbWl0KToKKyAgICBpZiBsZW4oZmlsZXBhdGgpID4gbGltaXQ6CisgICAgICAgIHJldHVybiAiVGhlIGxlbmd0aCBvZiAlcyBpcyBsb25nZXIgdGhhbiA0MTAsIHRoaXMgd291bGQgY2F1c2UgdW5leHBlY3RlZCBlcnJvcnMsIHBsZWFzZSB1c2UgYSBzaG9ydGVyIHBhdGguXG4iICUgcGF0aG5hbWUKKyAgICByZXR1cm4gIiIKKworZGVmIGdldF9maWxlc3lzdGVtX2lkKHBhdGgpOgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJzdGF0IC1mIC1jICclcycgJXMiICUgKCIldCIsIHBhdGgpKQorICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgZWxzZToKKyAgICAgICAgYmIud2FybigiQ2FuJ3QgZ2V0IHRoZSBmaWxlc3lzdGVtIGlkIG9mOiAlcyIgJSBwYXRoKQorICAgICAgICByZXR1cm4gTm9uZQorCisjIENoZWNrIHRoYXQgdGhlIHBhdGggaXNuJ3QgbG9jYXRlZCBvbiBuZnMuCitkZWYgY2hlY2tfbm90X25mcyhwYXRoLCBuYW1lKToKKyAgICAjIFRoZSBuZnMnIGZpbGVzeXN0ZW0gaWQgaXMgNjk2OQorICAgIGlmIGdldF9maWxlc3lzdGVtX2lkKHBhdGgpID09ICI2OTY5IjoKKyAgICAgICAgcmV0dXJuICJUaGUgJXM6ICVzIGNhbid0IGJlIGxvY2F0ZWQgb24gbmZzLlxuIiAlIChuYW1lLCBwYXRoKQorICAgIHJldHVybiAiIgorCisjIENoZWNrIHRoYXQgcGF0aCBpc24ndCBhIGJyb2tlbiBzeW1saW5rCitkZWYgY2hlY2tfc3ltbGluayhsbmssIGRhdGEpOgorICAgIGlmIG9zLnBhdGguaXNsaW5rKGxuaykgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhsbmspOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIiVzIGlzIGEgYnJva2VuIHN5bWxpbmsuIiAlIGxuaywgZGF0YSkKKworZGVmIGNoZWNrX2Nvbm5lY3Rpdml0eShkKToKKyAgICAjIFVSSSdzIHRvIGNoZWNrIGNhbiBiZSBzZXQgaW4gdGhlIENPTk5FQ1RJVklUWV9DSEVDS19VUklTIHZhcmlhYmxlCisgICAgIyB1c2luZyB0aGUgc2FtZSBzeW50YXggYXMgZm9yIFNSQ19VUkkuIElmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0CisgICAgIyB0aGUgY2hlY2sgaXMgc2tpcHBlZAorICAgIHRlc3RfdXJpcyA9IChkLmdldFZhcignQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHJldHZhbCA9ICIiCisKKyAgICAjIE9ubHkgY2hlY2sgY29ubmVjdGl2aXR5IGlmIG5ldHdvcmsgZW5hYmxlZCBhbmQgdGhlCisgICAgIyBDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyBhcmUgc2V0CisgICAgbmV0d29ya19lbmFibGVkID0gbm90IGQuZ2V0VmFyKCdCQl9OT19ORVRXT1JLJywgVHJ1ZSkKKyAgICBjaGVja19lbmFibGVkID0gbGVuKHRlc3RfdXJpcykKKyAgICAjIFRha2UgYSBjb3B5IG9mIHRoZSBkYXRhIHN0b3JlIGFuZCB1bnNldCBNSVJST1JTIGFuZCBQUkVNSVJST1JTCisgICAgZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGRhdGEuZGVsVmFyKCdQUkVNSVJST1JTJykKKyAgICBkYXRhLmRlbFZhcignTUlSUk9SUycpCisgICAgaWYgY2hlY2tfZW5hYmxlZCBhbmQgbmV0d29ya19lbmFibGVkOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHRlc3RfdXJpcywgZGF0YSkKKyAgICAgICAgICAgIGZldGNoZXIuY2hlY2tzdGF0dXMoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICMgQWxsb3cgdGhlIG1lc3NhZ2UgdG8gYmUgY29uZmlndXJlZCBzbyB0aGF0IHVzZXJzIGNhbiBiZQorICAgICAgICAgICAgIyBwb2ludGVkIHRvIGEgc3VwcG9ydCBtZWNoYW5pc20uCisgICAgICAgICAgICBtc2cgPSBkYXRhLmdldFZhcignQ09OTkVDVElWSVRZX0NIRUNLX01TRycsIFRydWUpIG9yICIiCisgICAgICAgICAgICBpZiBsZW4obXNnKSA9PSAwOgorICAgICAgICAgICAgICAgIG1zZyA9ICIlcy4gUGxlYXNlIGVuc3VyZSB5b3VyIG5ldHdvcmsgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuXG4iICUgZXJyCisgICAgICAgICAgICByZXR2YWwgPSBtc2cKKworICAgIHJldHVybiByZXR2YWwKKworZGVmIGNoZWNrX3N1cHBvcnRlZF9kaXN0cm8oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaAorCisgICAgdGVzdGVkX2Rpc3Ryb3MgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1NBTklUWV9URVNURURfRElTVFJPUycsIFRydWUpCisgICAgaWYgbm90IHRlc3RlZF9kaXN0cm9zOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgZGlzdHJvID0gb2UubHNiLmRpc3Ryb19pZGVudGlmaWVyKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBkaXN0cm8gPSBOb25lCisKKyAgICBpZiBub3QgZGlzdHJvOgorICAgICAgICBiYi53YXJuKCdIb3N0IGRpc3RyaWJ1dGlvbiBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZDsgeW91IG1heSBwb3NzaWJseSBleHBlcmllbmNlIHVuZXhwZWN0ZWQgZmFpbHVyZXMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIHRlc3RlZCBkaXN0cmlidXRpb24uJykKKworICAgIGZvciBzdXBwb3J0ZWQgaW4gW3guc3RyaXAoKSBmb3IgeCBpbiB0ZXN0ZWRfZGlzdHJvcy5zcGxpdCgnXFxuJyldOgorICAgICAgICBpZiBmbm1hdGNoKGRpc3Rybywgc3VwcG9ydGVkKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgYmIud2FybignSG9zdCBkaXN0cmlidXRpb24gIiVzIiBoYXMgbm90IGJlZW4gdmFsaWRhdGVkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZSBidWlsZCBzeXN0ZW07IHlvdSBtYXkgcG9zc2libHkgZXhwZXJpZW5jZSB1bmV4cGVjdGVkIGZhaWx1cmVzLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSB0ZXN0ZWQgZGlzdHJpYnV0aW9uLicgJSBkaXN0cm8pCisKKyMgQ2hlY2tzIHdlIHNob3VsZCBvbmx5IG1ha2UgaWYgTUFDSElORSBpcyBzZXQgY29ycmVjdGx5CitkZWYgY2hlY2tfc2FuaXR5X3ZhbGlkbWFjaGluZShzYW5pdHlfZGF0YSk6CisgICAgbWVzc2FnZXMgPSAiIgorCisgICAgIyBDaGVjayBUVU5FX0FSQ0ggaXMgc2V0CisgICAgaWYgc2FuaXR5X2RhdGEuZ2V0VmFyKCdUVU5FX0FSQ0gnLCBUcnVlKSA9PSAnSU5WQUxJRCc6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAnVFVORV9BUkNIIGlzIHVuc2V0LiBQbGVhc2UgZW5zdXJlIHlvdXIgTUFDSElORSBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGEgdmFsaWQgdHVuZSBjb25maWd1cmF0aW9uIGZpbGUgd2hpY2ggd2lsbCBzZXQgdGhpcyBjb3JyZWN0bHkuXG4nCisKKyAgICAjIENoZWNrIFRBUkdFVF9PUyBpcyBzZXQKKyAgICBpZiBzYW5pdHlfZGF0YS5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpID09ICdJTlZBTElEJzoKKyAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICdQbGVhc2Ugc2V0IFRBUkdFVF9PUyBkaXJlY3RseSwgb3IgY2hvb3NlIGEgTUFDSElORSBvciBESVNUUk8gdGhhdCBkb2VzIHNvLlxuJworCisgICAgIyBDaGVjayB0aGF0IHdlIGRvbid0IGhhdmUgZHVwbGljYXRlIGVudHJpZXMgaW4gUEFDS0FHRV9BUkNIUyAmIHRoYXQgVFVORV9QS0dBUkNIIGlzIGluIFBBQ0tBR0VfQVJDSFMKKyAgICBwa2dhcmNocyA9IHNhbml0eV9kYXRhLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpCisgICAgdHVuZXBrZyA9IHNhbml0eV9kYXRhLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSkKKyAgICB0dW5lZm91bmQgPSBGYWxzZQorICAgIHNlZW4gPSB7fQorICAgIGR1cHMgPSBbXQorCisgICAgZm9yIHBhIGluIHBrZ2FyY2hzLnNwbGl0KCk6CisgICAgICAgIGlmIHNlZW4uZ2V0KHBhLCAwKSA9PSAxOgorICAgICAgICAgICAgZHVwcy5hcHBlbmQocGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWVuW3BhXSA9IDEKKyAgICAgICAgaWYgcGEgPT0gdHVuZXBrZzoKKyAgICAgICAgICAgIHR1bmVmb3VuZCA9IFRydWUKKworICAgIGlmIGxlbihkdXBzKToKKyAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICJFcnJvciwgdGhlIFBBQ0tBR0VfQVJDSFMgdmFyaWFibGUgY29udGFpbnMgZHVwbGljYXRlcy4gVGhlIGZvbGxvd2luZyBhcmNocyBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlOiAlcyIgJSAiICIuam9pbihkdXBzKQorCisgICAgaWYgdHVuZWZvdW5kID09IEZhbHNlOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIkVycm9yLCB0aGUgUEFDS0FHRV9BUkNIUyB2YXJpYWJsZSBkb2VzIG5vdCBjb250YWluIFRVTkVfUEtHQVJDSCAoJXMpLiIgJSB0dW5lcGtnCisKKyAgICByZXR1cm4gbWVzc2FnZXMKKworIyBDaGVja3MgaWYgbmVjZXNzYXJ5IHRvIGFkZCBvcHRpb24gbWFyY2ggdG8gaG9zdCBnY2MKK2RlZiBjaGVja19nY2NfbWFyY2goc2FuaXR5X2RhdGEpOgorICAgIHJlc3VsdCA9IFRydWUKKyAgICBtZXNzYWdlID0gIiIKKworICAgICMgQ2hlY2sgaWYgLW1hcmNoIG5vdCBpbiBCVUlMRF9DRkxBR1MKKyAgICBpZiBzYW5pdHlfZGF0YS5nZXRWYXIoIkJVSUxEX0NGTEFHUyIsVHJ1ZSkuZmluZCgiLW1hcmNoIikgPCAwOgorICAgICAgICByZXN1bHQgPSBGYWxzZQorCisgICAgICAgICMgQ29uc3RydWN0IGEgdGVzdCBmaWxlCisgICAgICAgIGYgPSBvcGVuKCJnY2NfdGVzdC5jIiwgInciKQorICAgICAgICBmLndyaXRlKCJpbnQgbWFpbiAoKXsgdm9sYXRpbGUgaW50IGF0b21pYyA9IDI7IF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKCZhdG9taWMsIDIsIDMpOyByZXR1cm4gMDsgfVxuIikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBDaGVjayBpZiBHQ0MgY291bGQgd29yayB3aXRob3V0IG1hcmNoCisgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBzdGF0dXMscmVzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIke0JVSUxEX1BSRUZJWH1nY2MgZ2NjX3Rlc3QuYyAtbyBnY2NfdGVzdCIpCisgICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBUcnVlOworCisgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBzdGF0dXMscmVzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIke0JVSUxEX1BSRUZJWH1nY2MgLW1hcmNoPW5hdGl2ZSBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IikKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiQlVJTERfQ0ZMQUdTX2FwcGVuZCA9IFwiIC1tYXJjaD1uYXRpdmVcIiIKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBUcnVlOworCisgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBidWlsZF9hcmNoID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdCVUlMRF9BUkNIJywgVHJ1ZSkKKyAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyAtbWFyY2g9JXMgZ2NjX3Rlc3QuYyAtbyBnY2NfdGVzdCIgJSBidWlsZF9hcmNoKQorICAgICAgICAgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJCVUlMRF9DRkxBR1NfYXBwZW5kID0gXCIgLW1hcmNoPSVzXCIiICUgYnVpbGRfYXJjaAorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CisKKyAgICAgICAgb3MucmVtb3ZlKCJnY2NfdGVzdC5jIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoImdjY190ZXN0Iik6CisgICAgICAgICAgICBvcy5yZW1vdmUoImdjY190ZXN0IikKKworICAgIHJldHVybiAocmVzdWx0LCBtZXNzYWdlKQorCisjIFVucGF0Y2hlZCB2ZXJzaW9ucyBvZiBtYWtlIDMuODIgYXJlIGtub3duIHRvIGJlIGJyb2tlbi4gIFNlZSBHTlUgU2F2YW5uYWggQnVnIDMwNjEyLgorIyBVc2UgYSBtb2RpZmllZCByZXByb2R1Y2VyIGZyb20gaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/MzA2MTIgdG8gdmFsaWRhdGUuCitkZWYgY2hlY2tfbWFrZV92ZXJzaW9uKHNhbml0eV9kYXRhKToKKyAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KKyAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgibWFrZSAtLXZlcnNpb24iKQorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBleGVjdXRlIG1ha2UgLS12ZXJzaW9uLCBleGl0IGNvZGUgJXNcbiIgJSBzdGF0dXMKKyAgICB2ZXJzaW9uID0gcmVzdWx0LnNwbGl0KClbMl0KKyAgICBpZiBMb29zZVZlcnNpb24odmVyc2lvbikgPT0gTG9vc2VWZXJzaW9uKCIzLjgyIik6CisgICAgICAgICMgQ29uc3RydWN0IGEgdGVzdCBmaWxlCisgICAgICAgIGYgPSBvcGVuKCJtYWtlZmlsZV90ZXN0IiwgInciKQorICAgICAgICBmLndyaXRlKCJtYWtlZmlsZV90ZXN0LmE6IG1ha2VmaWxlX3Rlc3RfYS5jIG1ha2VmaWxlX3Rlc3RfYi5jIG1ha2VmaWxlX3Rlc3QuYSggbWFrZWZpbGVfdGVzdF9hLmMgbWFrZWZpbGVfdGVzdF9iLmMpXG4iKQorICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgIGYud3JpdGUoIm1ha2VmaWxlX3Rlc3RfYS5jOlxuIikKKyAgICAgICAgZi53cml0ZSgiCXRvdWNoICRAXG4iKQorICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgIGYud3JpdGUoIm1ha2VmaWxlX3Rlc3RfYi5jOlxuIikKKyAgICAgICAgZi53cml0ZSgiCXRvdWNoICRAXG4iKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIENoZWNrIGlmIG1ha2UgMy44MiBoYXMgYmVlbiBwYXRjaGVkCisgICAgICAgIHN0YXR1cyxyZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIm1ha2UgLWYgbWFrZWZpbGVfdGVzdCIpCisKKyAgICAgICAgb3MucmVtb3ZlKCJtYWtlZmlsZV90ZXN0IikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIm1ha2VmaWxlX3Rlc3RfYS5jIik6CisgICAgICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3RfYS5jIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIm1ha2VmaWxlX3Rlc3RfYi5jIik6CisgICAgICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3RfYi5jIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIm1ha2VmaWxlX3Rlc3QuYSIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCJtYWtlZmlsZV90ZXN0LmEiKQorCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmV0dXJuICJZb3VyIHZlcnNpb24gb2YgbWFrZSAzLjgyIGlzIGJyb2tlbi4gUGxlYXNlIHJldmVydCB0byAzLjgxIG9yIGluc3RhbGwgYSBwYXRjaGVkIHZlcnNpb24uXG4iCisgICAgcmV0dXJuIE5vbmUKKworCisjIFRhciB2ZXJzaW9uIDEuMjQgYW5kIG9ud2FyZHMgaGFuZGxlIG92ZXJ3cml0aW5nIHN5bWxpbmtzIGNvcnJlY3RseQorIyBidXQgZWFybGllciB2ZXJzaW9ucyBkbyBub3Q7IHRoaXMgbmVlZHMgdG8gd29yayBwcm9wZXJseSBmb3Igc3N0YXRlCitkZWYgY2hlY2tfdGFyX3ZlcnNpb24oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJ0YXIgLS12ZXJzaW9uIikKKyAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gZXhlY3V0ZSB0YXIgLS12ZXJzaW9uLCBleGl0IGNvZGUgJXNcbiIgJSBzdGF0dXMKKyAgICB2ZXJzaW9uID0gcmVzdWx0LnNwbGl0KClbM10KKyAgICBpZiBMb29zZVZlcnNpb24odmVyc2lvbikgPCBMb29zZVZlcnNpb24oIjEuMjQiKToKKyAgICAgICAgcmV0dXJuICJZb3VyIHZlcnNpb24gb2YgdGFyIGlzIG9sZGVyIHRoYW4gMS4yNCBhbmQgaGFzIGJ1Z3Mgd2hpY2ggd2lsbCBicmVhayBidWlsZHMuIFBsZWFzZSBpbnN0YWxsIGEgbmV3ZXIgdmVyc2lvbiBvZiB0YXIuXG4iCisgICAgcmV0dXJuIE5vbmUKKworIyBXZSB1c2UgZ2l0IHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9uYWxpdHkgb25seSBmb3VuZCBpbiAxLjcuOCBvciBsYXRlcgorZGVmIGNoZWNrX2dpdF92ZXJzaW9uKHNhbml0eV9kYXRhKToKKyAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KKyAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiZ2l0IC0tdmVyc2lvbiAyPiAvZGV2L251bGwiKQorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBleGVjdXRlIGdpdCAtLXZlcnNpb24sIGV4aXQgY29kZSAlc1xuIiAlIHN0YXR1cworICAgIHZlcnNpb24gPSByZXN1bHQuc3BsaXQoKVsyXQorICAgIGlmIExvb3NlVmVyc2lvbih2ZXJzaW9uKSA8IExvb3NlVmVyc2lvbigiMS43LjgiKToKKyAgICAgICAgcmV0dXJuICJZb3VyIHZlcnNpb24gb2YgZ2l0IGlzIG9sZGVyIHRoYW4gMS43LjggYW5kIGhhcyBidWdzIHdoaWNoIHdpbGwgYnJlYWsgYnVpbGRzLiBQbGVhc2UgaW5zdGFsbCBhIG5ld2VyIHZlcnNpb24gb2YgZ2l0LlxuIgorICAgIHJldHVybiBOb25lCisKKyMgQ2hlY2sgdGhlIHJlcXVpcmVkIHBlcmwgbW9kdWxlcyB3aGljaCBtYXkgbm90IGJlIGluc3RhbGxlZCBieSBkZWZhdWx0CitkZWYgY2hlY2tfcGVybF9tb2R1bGVzKHNhbml0eV9kYXRhKToKKyAgICByZXQgPSAiIgorICAgIG1vZHVsZXMgPSAoICJUZXh0OjpQYXJzZVdvcmRzIiwgIlRocmVhZDo6UXVldWUiLCAiRGF0YTo6RHVtcGVyIiApCisgICAgZm9yIG0gaW4gbW9kdWxlczoKKyAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoInBlcmwgLWUgJ3VzZSAlcycgMj4gL2Rldi9udWxsIiAlIG0pCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmV0ICs9ICIlcyAiICUgbQorICAgIGlmIHJldDoKKyAgICAgICAgcmV0dXJuICJSZXF1aXJlZCBwZXJsIG1vZHVsZShzKSBub3QgZm91bmQ6ICVzXG4iICUgcmV0CisgICAgcmV0dXJuIE5vbmUKKworZGVmIHNhbml0eV9jaGVja19jb25mZmlsZXMoc3RhdHVzLCBkKToKKyAgICAjIENoZWNrIHdlIGFyZSB1c2luZyBhIHZhbGlkIGxvY2FsLmNvbmYKKyAgICBjdXJyZW50X2NvbmYgID0gZC5nZXRWYXIoJ0NPTkZfVkVSU0lPTicsIFRydWUpCisgICAgY29uZl92ZXJzaW9uID0gIGQuZ2V0VmFyKCdMT0NBTENPTkZfVkVSU0lPTicsIFRydWUpCisKKyAgICBpZiBjdXJyZW50X2NvbmYgIT0gY29uZl92ZXJzaW9uOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIHZlcnNpb24gb2YgbG9jYWwuY29uZiB3YXMgZ2VuZXJhdGVkIGZyb20gYW4gb2xkZXIvbmV3ZXIgdmVyc2lvbiBvZiBsb2NhbC5jb25mLnNhbXBsZSBhbmQgdGhlcmUgaGF2ZSBiZWVuIHVwZGF0ZXMgbWFkZSB0byB0aGlzIGZpbGUuIFBsZWFzZSBjb21wYXJlIHRoZSB0d28gZmlsZXMgYW5kIG1lcmdlIGFueSBjaGFuZ2VzIGJlZm9yZSBjb250aW51aW5nLlxuTWF0Y2hpbmcgdGhlIHZlcnNpb24gbnVtYmVycyB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuXG5cIm1lbGQgY29uZi9sb2NhbC5jb25mICR7Q09SRUJBU0V9L21ldGEqL2NvbmYvbG9jYWwuY29uZi5zYW1wbGVcIiBpcyBhIGdvb2Qgd2F5IHRvIHZpc3VhbGlzZSB0aGUgY2hhbmdlcy5cbiIpCisKKyAgICAjIENoZWNrIGJibGF5ZXJzLmNvbmYgaXMgdmFsaWQKKyAgICBjdXJyZW50X2xjb25mID0gZC5nZXRWYXIoJ0xDT05GX1ZFUlNJT04nLCBUcnVlKQorICAgIGxjb25mX3ZlcnNpb24gPSBkLmdldFZhcignTEFZRVJfQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICBpZiBjdXJyZW50X2xjb25mICE9IGxjb25mX3ZlcnNpb246CisgICAgICAgIGZ1bmNzID0gZC5nZXRWYXIoJ0JCTEFZRVJTX0NPTkZfVVBEQVRFX0ZVTkNTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBmb3IgZnVuYyBpbiBmdW5jczoKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgaWYgc3VjY2VzczoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJZb3VyIGNvbmYvYmJsYXllcnMuY29uZiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQuIikKKyAgICAgICAgICAgICAgICBzdGF0dXMucmVwYXJzZSA9IFRydWUKKyAgICAgICAgaWYgbm90IHN0YXR1cy5yZXBhcnNlOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciB2ZXJzaW9uIG9mIGJibGF5ZXJzLmNvbmYgaGFzIHRoZSB3cm9uZyBMQ09ORl9WRVJTSU9OIChoYXMgJXMsIGV4cGVjdGluZyAlcykuXG5QbGVhc2UgY29tcGFyZSB0aGUgeW91ciBmaWxlIGFnYWluc3QgYmJsYXllcnMuY29uZi5zYW1wbGUgYW5kIG1lcmdlIGFueSBjaGFuZ2VzIGJlZm9yZSBjb250aW51aW5nLlxuXCJtZWxkIGNvbmYvYmJsYXllcnMuY29uZiAke0NPUkVCQVNFfS9tZXRhKi9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlXCIgaXMgYSBnb29kIHdheSB0byB2aXN1YWxpc2UgdGhlIGNoYW5nZXMuXG4iICUgKGN1cnJlbnRfbGNvbmYsIGxjb25mX3ZlcnNpb24pKQorCisgICAgIyBJZiB3ZSBoYXZlIGEgc2l0ZS5jb25mLCBjaGVjayBpdCdzIHZhbGlkCisgICAgaWYgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvc2l0ZS5jb25mIiwgZCk6CisgICAgICAgIGN1cnJlbnRfc2NvbmYgPSBkLmdldFZhcignU0NPTkZfVkVSU0lPTicsIFRydWUpCisgICAgICAgIHNjb25mX3ZlcnNpb24gPSBkLmdldFZhcignU0lURV9DT05GX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBpZiBjdXJyZW50X3Njb25mICE9IHNjb25mX3ZlcnNpb246CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIHZlcnNpb24gb2Ygc2l0ZS5jb25mIHdhcyBnZW5lcmF0ZWQgZnJvbSBhbiBvbGRlciB2ZXJzaW9uIG9mIHNpdGUuY29uZi5zYW1wbGUgYW5kIHRoZXJlIGhhdmUgYmVlbiB1cGRhdGVzIG1hZGUgdG8gdGhpcyBmaWxlLiBQbGVhc2UgY29tcGFyZSB0aGUgdHdvIGZpbGVzIGFuZCBtZXJnZSBhbnkgY2hhbmdlcyBiZWZvcmUgY29udGludWluZy5cbk1hdGNoaW5nIHRoZSB2ZXJzaW9uIG51bWJlcnMgd2lsbCByZW1vdmUgdGhpcyBtZXNzYWdlLlxuXCJtZWxkIGNvbmYvc2l0ZS5jb25mICR7Q09SRUJBU0V9L21ldGEqL2NvbmYvc2l0ZS5jb25mLnNhbXBsZVwiIGlzIGEgZ29vZCB3YXkgdG8gdmlzdWFsaXNlIHRoZSBjaGFuZ2VzLlxuIikKKworCitkZWYgc2FuaXR5X2hhbmRsZV9hYmljaGFuZ2VzKHN0YXR1cywgZCk6CisgICAgIworICAgICMgQ2hlY2sgdGhlICdBQkknIG9mIFRNUERJUgorICAgICMKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgY3VycmVudF9hYmkgPSBkLmdldFZhcignT0VMQVlPVVRfQUJJJywgVHJ1ZSkKKyAgICBhYmlmaWxlID0gZC5nZXRWYXIoJ1NBTklUWV9BQklGSUxFJywgVHJ1ZSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhhYmlmaWxlKToKKyAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGFiaSA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IGFiaS5pc2RpZ2l0KCk6CisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICIyIiBhbmQgY3VycmVudF9hYmkgPT0gIjMiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGZyb20gbGF5b3V0IHZlcnNpb24gMiB0byBsYXlvdXQgdmVyc2lvbiAzIikKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibXYgJHtUTVBESVJ9L3N0YWdpbmcgJHtUTVBESVJ9L3N5c3Jvb3RzIiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoImxuIC1zIHN5c3Jvb3RzICR7VE1QRElSfS9zdGFnaW5nIiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoImNkICR7VE1QRElSfS9zdGFtcHM7IGZvciBpIGluICovKmRvX3BvcHVsYXRlX3N0YWdpbmc7IGRvIG5ldz1gZWNobyAkaSB8IHNlZCAtZSAncy9kb19wb3B1bGF0ZV9zdGFnaW5nL2RvX3BvcHVsYXRlX3N5c3Jvb3QvJ2A7IG12ICRpICRuZXc7IGRvbmUiKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjMiIGFuZCBjdXJyZW50X2FiaSA9PSAiNCI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiAzIHRvIGxheW91dCB2ZXJzaW9uIDQiKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZC5leHBhbmQoIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9IikpOgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibXYgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke01VTFRJTUFDSF9IT1NUX1NZU30gJHtTVEFHSU5HX0JJTkRJUl9DUk9TU30iKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoImxuIC1zICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9ICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9IiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICI0IjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlN0YWdpbmcgbGF5b3V0IGhhcyBjaGFuZ2VkLiBUaGUgY3Jvc3MgZGlyZWN0b3J5IGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGNyb3NzIHBhY2thZ2VzIGFyZSBub3cgYnVpbHQgdW5kZXIgdGhlIG5hdGl2ZSBzeXNyb290LlxuVGhpcyByZXF1aXJlcyBhIHJlYnVpbGQuXG4iKQorICAgICAgICBlbGlmIGFiaSA9PSAiNSIgYW5kIGN1cnJlbnRfYWJpID09ICI2IjoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBsYXlvdXQgZnJvbSB2ZXJzaW9uIDUgdG8gbGF5b3V0IHZlcnNpb24gNiIpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoIm12ICR7VE1QRElSfS9wc3RhZ2Vsb2dzICR7U1NUQVRFX01BTklGRVNUU30iKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjciIGFuZCBjdXJyZW50X2FiaSA9PSAiOCI6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIGNvbmZpZ3VyYXRpb24gaXMgdXNpbmcgc3RhbXAgZmlsZXMgaW5jbHVkaW5nIHRoZSBzc3RhdGUgaGFzaCBidXQgeW91ciBidWlsZCBkaXJlY3Rvcnkgd2FzIGJ1aWx0IHdpdGggc3RhbXAgZmlsZXMgdGhhdCBkbyBub3QgaW5jbHVkZSB0aGlzLlxuVG8gY29udGludWUsIGVpdGhlciByZWJ1aWxkIG9yIHN3aXRjaCBiYWNrIHRvIHRoZSBPRUJhc2ljIHNpZ25hdHVyZSBoYW5kbGVyIHdpdGggQkJfU0lHTkFUVVJFX0hBTkRMRVIgPSAnT0VCYXNpYycuXG4iKQorICAgICAgICBlbGlmIChhYmkgIT0gY3VycmVudF9hYmkgYW5kIGN1cnJlbnRfYWJpID09ICI5Iik6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJUaGUgbGF5b3V0IG9mIHRoZSBUTVBESVIgU1RBTVBTIGRpcmVjdG9yeSBoYXMgY2hhbmdlZC4gUGxlYXNlIGNsZWFuIG91dCBUTVBESVIgYW5kIHJlYnVpbGQgKHNzdGF0ZSB3aWxsIGJlIHN0aWxsIGJlIHZhbGlkIGFuZCByZXVzZWQpXG4iKQorICAgICAgICBlbGlmIChhYmkgIT0gY3VycmVudF9hYmkgYW5kIGN1cnJlbnRfYWJpID09ICIxMCIgYW5kIChhYmkgPT0gIjgiIG9yIGFiaSA9PSAiOSIpKToKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBsYXlvdXQgZnJvbSB2ZXJzaW9uIDgvOSB0byBsYXlvdXQgdmVyc2lvbiAxMCIpCisgICAgICAgICAgICBjbWQgPSBkLmV4cGFuZCgiZ3JlcCAtciAtbCBzeXNyb290LXByb3ZpZGVycy92aXJ0dWFsX2tlcm5lbCAke1NTVEFURV9NQU5JRkVTVFN9IikKKyAgICAgICAgICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zcGxpdCgpCisgICAgICAgICAgICBmb3IgZiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiVW5pbnN0YWxsaW5nIG1hbmlmZXN0IGZpbGUgJXMiICUgZikKKyAgICAgICAgICAgICAgICBzc3RhdGVfY2xlYW5fbWFuaWZlc3QoZiwgZCkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjEwIiBhbmQgY3VycmVudF9hYmkgPT0gIjExIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBsYXlvdXQgZnJvbSB2ZXJzaW9uIDEwIHRvIGxheW91dCB2ZXJzaW9uIDExIikKKyAgICAgICAgICAgICMgRmlsZXMgaW4geGY4Ni12aWRlby1tb2Rlc2V0dGluZyBtb3ZlZCB0byB4c2VydmVyLXhvcmcgYW5kIGJpdGJha2UgY2FuJ3QgY3VycmVudGx5IGhhbmRsZSB0aGF0OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJybSAke1RNUERJUn0vc3lzcm9vdHMvKi91c3IvbGliL3hvcmcvbW9kdWxlcy9kcml2ZXJzL21vZGVzZXR0aW5nX2Rydi5zbyAke1RNUERJUn0vc3lzcm9vdHMvKi9wa2dkYXRhL3J1bnRpbWUveGY4Ni12aWRlby1tb2Rlc2V0dGluZyogJHtUTVBESVJ9L3N5c3Jvb3RzLyovcGtnZGF0YS9ydW50aW1lLXJldmVyc2UveGY4Ni12aWRlby1tb2Rlc2V0dGluZyogJHtUTVBESVJ9L3N5c3Jvb3RzLyovcGtnZGF0YS9zaGxpYnMyL3hmODYtdmlkZW8tbW9kZXNldHRpbmcqIiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgKGFiaSAhPSBjdXJyZW50X2FiaSk6CisgICAgICAgICAgICAjIENvZGUgdG8gY29udmVydCBmcm9tIG9uZSBBQkkgdG8gYW5vdGhlciBjb3VsZCBnbyBoZXJlIGlmIHBvc3NpYmxlLgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIFRNUERJUiBoYXMgY2hhbmdlZCBpdHMgbGF5b3V0IHZlcnNpb24gbnVtYmVyICglcyB0byAlcykgYW5kIHlvdSBuZWVkIHRvIGVpdGhlciByZWJ1aWxkLCByZXZlcnQgb3IgYWRqdXN0IGl0IGF0IHlvdXIgb3duIHJpc2suXG4iICUgKGFiaSwgY3VycmVudF9hYmkpKQorICAgIGVsc2U6CisgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorCitkZWYgY2hlY2tfc2FuaXR5X3NzdGF0ZV9kaXJfY2hhbmdlKHNzdGF0ZV9kaXIsIGRhdGEpOgorICAgICMgU2FuaXR5IGNoZWNrcyB0byBiZSBkb25lIHdoZW4gdGhlIHZhbHVlIG9mIFNTVEFURV9ESVIgY2hhbmdlcworCisgICAgIyBDaGVjayB0aGF0IFNTVEFURV9ESVIgaXNuJ3Qgb24gYSBmaWxlc3lzdGVtIHdpdGggbGltaXRlZCBmaWxlbmFtZSBsZW5ndGggKGVnLiBlQ3J5cHRGUykKKyAgICB0ZXN0bXNnID0gIiIKKyAgICBpZiBzc3RhdGVfZGlyICE9ICIiOgorICAgICAgICB0ZXN0bXNnID0gY2hlY2tfY3JlYXRlX2xvbmdfZmlsZW5hbWUoc3N0YXRlX2RpciwgIlNTVEFURV9ESVIiKQorICAgICAgICAjIElmIHdlIGRvbid0IGhhdmUgcGVybWlzc2lvbnMgdG8gU1NUQVRFX0RJUiwgc3VnZ2VzdCB0aGUgdXNlciBzZXQgaXQgYXMgYW4gU1NUQVRFX01JUlJPUlMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXJyID0gdGVzdG1zZy5zcGxpdCgnOiAnKVsxXS5zdHJpcCgpCisgICAgICAgICAgICBpZiBlcnIgPT0gIlBlcm1pc3Npb24gZGVuaWVkLiI6CisgICAgICAgICAgICAgICAgdGVzdG1zZyA9IHRlc3Rtc2cgKyAiWW91IGNvdWxkIHRyeSB1c2luZyAlcyBpbiBTU1RBVEVfTUlSUk9SUyByYXRoZXIgdGhhbiBhcyBhbiBTU1RBVEVfQ0FDSEUuXG4iICUgKHNzdGF0ZV9kaXIpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiB0ZXN0bXNnCisgICAgICAgCitkZWYgY2hlY2tfc2FuaXR5X3ZlcnNpb25fY2hhbmdlKHN0YXR1cywgZCk6CisgICAgIyBTYW5pdHkgY2hlY2tzIHRvIGJlIGRvbmUgd2hlbiBTQU5JVFlfVkVSU0lPTiBjaGFuZ2VzCisgICAgIyBJbiBvdGhlciB3b3JkcywgdGhlc2UgdGVzdHMgcnVuIG9uY2UgaW4gYSBnaXZlbiBidWlsZCBkaXJlY3RvcnkgYW5kIHRoZW4gCisgICAgIyBuZXZlciBhZ2FpbiB1bnRpbCB0aGUgc2FuaXR5IHZlcnNpb24gY2hhbmdlcy4KKworICAgICMgQ2hlY2sgdGhlIHB5dGhvbiBpbnN0YWxsIGlzIGNvbXBsZXRlLiBnbGliLTIuMC1uYXRpdmVzIHJlcXVyaWVzCisgICAgIyB4bWwucGFyc2Vycy5leHBhdAorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHhtbC5wYXJzZXJzLmV4cGF0CisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdZb3VyIHB5dGhvbiBpcyBub3QgYSBmdWxsIGluc3RhbGwuIFBsZWFzZSBpbnN0YWxsIHRoZSBtb2R1bGUgeG1sLnBhcnNlcnMuZXhwYXQgKHB5dGhvbi14bWwgb24gb3BlblNVU0UgYW5kIFNVU0UgTGludXgpLlxuJykKKyAgICBpbXBvcnQgc3RhdAorCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19tYWtlX3ZlcnNpb24oZCkpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja190YXJfdmVyc2lvbihkKSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX2dpdF92ZXJzaW9uKGQpKQorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfcGVybF9tb2R1bGVzKGQpKQorCisgICAgbWlzc2luZyA9ICIiCisKKyAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygiJHtNQUtFfSIsIGQpOgorICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICJHTlUgbWFrZSwiCisKKyAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygnJHtCVUlMRF9QUkVGSVh9Z2NjJywgZCk6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIkMgQ29tcGlsZXIgKCVzZ2NjKSwiICUgZC5nZXRWYXIoIkJVSUxEX1BSRUZJWCIsIFRydWUpCisKKyAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygnJHtCVUlMRF9QUkVGSVh9ZysrJywgZCk6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIkMrKyBDb21waWxlciAoJXNnKyspLCIgJSBkLmdldFZhcigiQlVJTERfUFJFRklYIiwgVHJ1ZSkKKworICAgIHJlcXVpcmVkX3V0aWxpdGllcyA9IGQuZ2V0VmFyKCdTQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTJywgVHJ1ZSkKKworICAgIGZvciB1dGlsIGluIHJlcXVpcmVkX3V0aWxpdGllcy5zcGxpdCgpOgorICAgICAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cyh1dGlsLCBkKToKKyAgICAgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIiVzLCIgJSB1dGlsCisKKyAgICBpZiBtaXNzaW5nOgorICAgICAgICBtaXNzaW5nID0gbWlzc2luZy5yc3RyaXAoJywnKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJQbGVhc2UgaW5zdGFsbCB0aGUgZm9sbG93aW5nIG1pc3NpbmcgdXRpbGl0aWVzOiAlc1xuIiAlIG1pc3NpbmcpCisKKyAgICBhc3N1bWVfcHJvdmlkZWQgPSBkLmdldFZhcignQVNTVU1FX1BST1ZJREVEJywgVHJ1ZSkuc3BsaXQoKQorICAgICMgQ2hlY2sgdXNlciBkb2Vzbid0IGhhdmUgQVNTVU1FX1BST1ZJREVEID0gaW5zdGVhZCBvZiArPSBpbiBsb2NhbC5jb25mCisgICAgaWYgImRpZmZzdGF0LW5hdGl2ZSIgbm90IGluIGFzc3VtZV9wcm92aWRlZDoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnUGxlYXNlIHVzZSBBU1NVTUVfUFJPVklERUQgKz0sIG5vdCBBU1NVTUVfUFJPVklERUQgPSBpbiB5b3VyIGxvY2FsLmNvbmZcbicpCisKKyAgICBpZiAicWVtdS1uYXRpdmUiIGluIGFzc3VtZV9wcm92aWRlZDoKKyAgICAgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoInFlbXUtYXJtIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJxZW11LW5hdGl2ZSB3YXMgaW4gQVNTVU1FX1BST1ZJREVEIGJ1dCB0aGUgUUVNVSBiaW5hcmllcyAocWVtdS1hcm0pIGNhbid0IGJlIGZvdW5kIGluIFBBVEgiKQorCisgICAgaWYgImxpYnNkbC1uYXRpdmUiIGluIGFzc3VtZV9wcm92aWRlZDoKKyAgICAgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoInNkbC1jb25maWciLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoImxpYnNkbC1uYXRpdmUgaXMgc2V0IHRvIGJlIEFTU1VNRV9QUk9WSURFRCBidXQgc2RsLWNvbmZpZyBjYW4ndCBiZSBmb3VuZCBpbiBQQVRILiBQbGVhc2UgZWl0aGVyIGluc3RhbGwgaXQsIG9yIGNvbmZpZ3VyZSBxZW11IG5vdCB0byByZXF1aXJlIHNkbC4iKQorCisgICAgKHJlc3VsdCwgbWVzc2FnZSkgPSBjaGVja19nY2NfbWFyY2goZCkKKyAgICBpZiByZXN1bHQgYW5kIG1lc3NhZ2U6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgZ2NjIHZlcnNpb24gaXMgb2xkZXIgdGhhbiA0LjUsIHBsZWFzZSBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbSB0byBsb2NhbC5jb25mXG4gXAorICAgICAgICAlc1xuIiAlIG1lc3NhZ2UpCisgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciBnY2MgdmVyc2lvbiBpcyBvbGRlciB0aGFuIDQuNSBvciBpcyBub3Qgd29ya2luZyBwcm9wZXJseS4gIFBsZWFzZSB2ZXJpZnkgeW91IGNhbiBidWlsZCIpCisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIiBhbmQgbGluayBzb21ldGhpbmcgdGhhdCB1c2VzIGF0b21pYyBvcGVyYXRpb25zLCBzdWNoIGFzOiBcbiIpCisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIiAgICAgICAgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCAoJmF0b21pYywgMiwgMyk7XG4iKQorCisgICAgIyBDaGVjayB0aGF0IFRNUERJUiBpc24ndCBvbiBhIGZpbGVzeXN0ZW0gd2l0aCBsaW1pdGVkIGZpbGVuYW1lIGxlbmd0aCAoZWcuIGVDcnlwdEZTKQorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfY3JlYXRlX2xvbmdfZmlsZW5hbWUodG1wZGlyLCAiVE1QRElSIikpCisgICAgdG1wZGlybW9kZSA9IG9zLnN0YXQodG1wZGlyKS5zdF9tb2RlCisgICAgaWYgKHRtcGRpcm1vZGUgJiBzdGF0LlNfSVNHSUQpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJUTVBESVIgaXMgc2V0Z2lkLCBwbGVhc2UgZG9uJ3QgYnVpbGQgaW4gYSBzZXRnaWQgZGlyZWN0b3J5IikKKyAgICBpZiAodG1wZGlybW9kZSAmIHN0YXQuU19JU1VJRCk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlRNUERJUiBpcyBzZXR1aWQsIHBsZWFzZSBkb24ndCBidWlsZCBpbiBhIHNldHVpZCBkaXJlY3RvcnkiKQorCisgICAgIyBTb21lIHRoaXJkLXBhcnR5IHNvZnR3YXJlIGFwcGFyZW50bHkgcmVsaWVzIG9uIGNobW9kIGV0Yy4gYmVpbmcgc3VpZCByb290ICghISkKKyAgICBpbXBvcnQgc3RhdAorICAgIHN1aWRfY2hlY2tfYmlucyA9ICJjaG93biBjaG1vZCBta25vZCIuc3BsaXQoKQorICAgIGZvciBiaW5fY21kIGluIHN1aWRfY2hlY2tfYmluczoKKyAgICAgICAgYmluX3BhdGggPSBiYi51dGlscy53aGljaChvcy5lbnZpcm9uWyJQQVRIIl0sIGJpbl9jbWQpCisgICAgICAgIGlmIGJpbl9wYXRoOgorICAgICAgICAgICAgYmluX3N0YXQgPSBvcy5zdGF0KGJpbl9wYXRoKQorICAgICAgICAgICAgaWYgYmluX3N0YXQuc3RfdWlkID09IDAgYW5kIGJpbl9zdGF0LnN0X21vZGUgJiBzdGF0LlNfSVNVSUQ6CisgICAgICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnJXMgaGFzIHRoZSBzZXR1aWQgYml0IHNldC4gVGhpcyBpbnRlcmZlcmVzIHdpdGggcHNldWRvIGFuZCBtYXkgY2F1c2Ugb3RoZXIgaXNzdWVzIHRoYXQgYnJlYWsgdGhlIGJ1aWxkIHByb2Nlc3MuXG4nICUgYmluX3BhdGgpCisKKyAgICAjIENoZWNrIHRoYXQgd2UgY2FuIGZldGNoIGZyb20gdmFyaW91cyBuZXR3b3JrIHRyYW5zcG9ydHMKKyAgICBuZXRjaGVjayA9IGNoZWNrX2Nvbm5lY3Rpdml0eShkKQorICAgIHN0YXR1cy5hZGRyZXN1bHQobmV0Y2hlY2spCisgICAgaWYgbmV0Y2hlY2s6CisgICAgICAgIHN0YXR1cy5uZXR3b3JrX2Vycm9yID0gVHJ1ZQorCisgICAgbm9saWJzID0gZC5nZXRWYXIoJ05PMzJMSUJTJywgVHJ1ZSkKKyAgICBpZiBub3Qgbm9saWJzOgorICAgICAgICBsaWIzMnBhdGggPSAnL2xpYicKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJy9saWI2NCcpIGFuZCAoIG9zLnBhdGguaXNsaW5rKCcvbGliNjQnKSBvciBvcy5wYXRoLmlzbGluaygnL2xpYicpICk6CisgICAgICAgICAgIGxpYjMycGF0aCA9ICcvbGliMzInCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJyVzL2xpYmMuc28uNicgJSBsaWIzMnBhdGgpIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoJy91c3IvaW5jbHVkZS9nbnUvc3R1YnMtMzIuaCcpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91IGhhdmUgYSAzMi1iaXQgbGliYywgYnV0IG5vIDMyLWJpdCBoZWFkZXJzLiAgWW91IG11c3QgaW5zdGFsbCB0aGUgMzItYml0IGxpYmMgaGVhZGVycy5cbiIpCisKKyAgICBiYnBhdGhzID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLnNwbGl0KCI6IikKKyAgICBpZiAoIi4iIGluIGJicGF0aHMgb3IgIi4vIiBpbiBiYnBhdGhzIG9yICIiIGluIGJicGF0aHMpIGFuZCBub3Qgc3RhdHVzLnJlcGFyc2U6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkJCUEFUSCByZWZlcmVuY2VzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgZWl0aGVyIHRocm91Z2ggIiAgICBcCisgICAgICAgICAgICAgICAgImFuIGVtcHR5IGVudHJ5LCBhICcuLycgb3IgYSAnLicuXG5cdCBUaGlzIGlzIHVuc2FmZSBhbmQgbWVhbnMgeW91ciAiXAorICAgICAgICAgICAgICAgICJsYXllciBjb25maWd1cmF0aW9uIGlzIGFkZGluZyBlbXB0eSBlbGVtZW50cyB0byBCQlBBVEguXG5cdCAiXAorICAgICAgICAgICAgICAgICJQbGVhc2UgY2hlY2sgeW91ciBsYXllci5jb25mIGZpbGVzIGFuZCBvdGhlciBCQlBBVEggIiAgICAgICAgXAorICAgICAgICAgICAgICAgICJzZXR0aW5ncyB0byByZW1vdmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgIiAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICJyZWZlcmVuY2VzLlxuIiBcCisgICAgICAgICAgICAgICAgIlBhcnNlZCBCQlBBVEggaXMiICsgc3RyKGJicGF0aHMpKTsKKworICAgIG9lc19iYl9jb25mID0gZC5nZXRWYXIoICdPRVNfQklUQkFLRV9DT05GJywgVHJ1ZSkKKyAgICBpZiBub3Qgb2VzX2JiX2NvbmY6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1lvdSBhcmUgbm90IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgdmVyc2lvbiBvZiBjb25mL2JpdGJha2UuY29uZi4gVGhpcyBtZWFucyB5b3VyIGVudmlyb25tZW50IGlzIG1pc2NvbmZpZ3VyZWQsIGluIHBhcnRpY3VsYXIgY2hlY2sgQkJQQVRILlxuJykKKworICAgICMgVGhlIGxlbmd0aCBvZiBUTVBESVIgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gNDEwCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19wYXRoX2xlbmd0aCh0bXBkaXIsICJUTVBESVIiLCA0MTApKQorCisgICAgIyBDaGVjayB0aGF0IFRNUERJUiBpc24ndCBsb2NhdGVkIG9uIG5mcworICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfbm90X25mcyh0bXBkaXIsICJUTVBESVIiKSkKKworZGVmIGNoZWNrX3Nhbml0eV9ldmVyeWJ1aWxkKHN0YXR1cywgZCk6CisgICAgaW1wb3J0IG9zLCBzdGF0CisgICAgIyBTYW5pdHkgdGVzdHMgd2hpY2ggdGVzdCB0aGUgdXNlcnMgZW52aXJvbm1lbnQgc28gbmVlZCB0byBydW4gYXQgZWFjaCBidWlsZCAob3IgYXJlIHNvIGNoZWFwCisgICAgIyBpdCBtYWtlcyBzZW5zZSB0byBhbHdheXMgcnVuIHRoZW0uCisKKyAgICBpZiAwID09IG9zLmdldHVpZCgpOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIkRvIG5vdCB1c2UgQml0YmFrZSBhcyByb290LiIsIGQpCisKKyAgICAjIENoZWNrIHRoZSBQeXRob24gdmVyc2lvbiwgd2Ugbm93IGhhdmUgYSBtaW5pbXVtIG9mIFB5dGhvbiAyLjcuMworICAgIGltcG9ydCBzeXMKKyAgICBpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNzAzRjA6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1RoZSBzeXN0ZW0gcmVxdWlyZXMgYXQgbGVhc3QgUHl0aG9uIDIuNy4zIHRvIHJ1bi4gUGxlYXNlIHVwZGF0ZSB5b3VyIFB5dGhvbiBpbnRlcnByZXRlci5cbicpCisKKyAgICAjIENoZWNrIHRoZSBiaXRiYWtlIHZlcnNpb24gbWVldHMgbWluaW11bSByZXF1aXJlbWVudHMKKyAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KKyAgICBtaW52ZXJzaW9uID0gZC5nZXRWYXIoJ0JCX01JTl9WRVJTSU9OJywgVHJ1ZSkKKyAgICBpZiAoTG9vc2VWZXJzaW9uKGJiLl9fdmVyc2lvbl9fKSA8IExvb3NlVmVyc2lvbihtaW52ZXJzaW9uKSk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ0JpdGJha2UgdmVyc2lvbiAlcyBpcyByZXF1aXJlZCBhbmQgdmVyc2lvbiAlcyB3YXMgZm91bmRcbicgJSAobWludmVyc2lvbiwgYmIuX192ZXJzaW9uX18pKQorCisgICAgc2FuaXR5X2NoZWNrX2NvbmZmaWxlcyhzdGF0dXMsIGQpCisKKyAgICBwYXRocyA9IGQuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGlmICIuIiBpbiBwYXRocyBvciAiLi8iIGluIHBhdGhzIG9yICIiIGluIHBhdGhzOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJQQVRIIGNvbnRhaW5zICcuJywgJy4vJyBvciAnJyAoZW1wdHkgZWxlbWVudCksIHdoaWNoIHdpbGwgYnJlYWsgdGhlIGJ1aWxkLCBwbGVhc2UgcmVtb3ZlIHRoaXMuXG5QYXJzZWQgUEFUSCBpcyAiICsgc3RyKHBhdGhzKSArICJcbiIpCisKKyAgICAjIENoZWNrIHRoYXQgdGhlIERJU1RSTyBpcyB2YWxpZCwgaWYgc2V0CisgICAgIyBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IERJU1RSTyByZW5hbWluZyBESVNUUk8KKyAgICBkaXN0cm8gPSBkLmdldFZhcignRElTVFJPJywgVHJ1ZSkKKyAgICBpZiBkaXN0cm8gYW5kIGRpc3RybyAhPSAibm9kaXN0cm8iOgorICAgICAgICBpZiBub3QgKCBjaGVja19jb25mX2V4aXN0cygiY29uZi9kaXN0cm8vJHtESVNUUk99LmNvbmYiLCBkKSBvciBjaGVja19jb25mX2V4aXN0cygiY29uZi9kaXN0cm8vaW5jbHVkZS8ke0RJU1RST30uaW5jIiwgZCkgKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkRJU1RSTyAnJXMnIG5vdCBmb3VuZC4gUGxlYXNlIHNldCBhIHZhbGlkIERJU1RSTyBpbiB5b3VyIGxvY2FsLmNvbmZcbiIgJSBkLmdldFZhcigiRElTVFJPIiwgVHJ1ZSkpCisKKyAgICAjIENoZWNrIHRoYXQgRExfRElSIGlzIHNldCwgZXhpc3RzIGFuZCBpcyB3cml0YWJsZS4gSW4gdGhlb3J5LCB3ZSBzaG91bGQgbmV2ZXIgZXZlbiBoaXQgdGhlIGNoZWNrIGlmIERMX0RJUiBpc24ndCAKKyAgICAjIHNldCwgc2luY2Ugc28gbXVjaCByZWxpZXMgb24gaXQgYmVpbmcgc2V0LgorICAgIGRsZGlyID0gZC5nZXRWYXIoJ0RMX0RJUicsIFRydWUpCisgICAgaWYgbm90IGRsZGlyOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJETF9ESVIgaXMgbm90IHNldC4gWW91ciBlbnZpcm9ubWVudCBpcyBtaXNjb25maWd1cmVkLCBjaGVjayB0aGF0IERMX0RJUiBpcyBzZXQsIGFuZCBpZiB0aGUgZGlyZWN0b3J5IGV4aXN0cywgdGhhdCBpdCBpcyB3cml0YWJsZS4gXG4iKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGRsZGlyKSBhbmQgbm90IG9zLmFjY2VzcyhkbGRpciwgb3MuV19PSyk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkRMX0RJUjogJXMgZXhpc3RzIGJ1dCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIHdyaXRlIGFjY2VzcyB0byBpdC4gXG4iICUgZGxkaXIpCisgICAgY2hlY2tfc3ltbGluayhkbGRpciwgZCkKKworICAgICMgQ2hlY2sgdGhhdCB0aGUgTUFDSElORSBpcyB2YWxpZCwgaWYgaXQgaXMgc2V0CisgICAgbWFjaGluZXZhbGlkID0gVHJ1ZQorICAgIGlmIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSk6CisgICAgICAgIGlmIG5vdCBjaGVja19jb25mX2V4aXN0cygiY29uZi9tYWNoaW5lLyR7TUFDSElORX0uY29uZiIsIGQpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnUGxlYXNlIHNldCBhIHZhbGlkIE1BQ0hJTkUgaW4geW91ciBsb2NhbC5jb25mIG9yIGVudmlyb25tZW50XG4nKQorICAgICAgICAgICAgbWFjaGluZXZhbGlkID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfc2FuaXR5X3ZhbGlkbWFjaGluZShkKSkKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdQbGVhc2Ugc2V0IGEgTUFDSElORSBpbiB5b3VyIGxvY2FsLmNvbmYgb3IgZW52aXJvbm1lbnRcbicpCisgICAgICAgIG1hY2hpbmV2YWxpZCA9IEZhbHNlCisgICAgaWYgbWFjaGluZXZhbGlkOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Rvb2xjaGFpbihkKSkKKworICAgICMgQ2hlY2sgdGhhdCB0aGUgU0RLTUFDSElORSBpcyB2YWxpZCwgaWYgaXQgaXMgc2V0CisgICAgaWYgZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKToKKyAgICAgICAgaWYgbm90IGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL21hY2hpbmUtc2RrLyR7U0RLTUFDSElORX0uY29uZiIsIGQpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnU3BlY2lmaWVkIFNES01BQ0hJTkUgdmFsdWUgaXMgbm90IHZhbGlkXG4nKQorICAgICAgICBlbGlmIGQuZ2V0VmFyKCdTREtfQVJDSCcsIEZhbHNlKSA9PSAiJHtCVUlMRF9BUkNIfSI6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdTREtNQUNISU5FIGlzIHNldCwgYnV0IFNES19BUkNIIGhhcyBub3QgYmVlbiBjaGFuZ2VkIGFzIGEgcmVzdWx0IC0gU0RLTUFDSElORSBtYXkgaGF2ZSBiZWVuIHNldCB0b28gbGF0ZSAoZS5nLiBpbiB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24pXG4nKQorCisgICAgY2hlY2tfc3VwcG9ydGVkX2Rpc3RybyhkKQorCisgICAgIyBDaGVjayBpZiBESVNQTEFZIGlzIHNldCBpZiBURVNUX0lNQUdFIGlzIHNldAorICAgIGlmIGQuZ2V0VmFyKCdURVNUX0lNQUdFJywgVHJ1ZSkgPT0gJzEnIG9yIGQuZ2V0VmFyKCdERUZBVUxUX1RFU1RfU1VJVEVTJywgVHJ1ZSk6CisgICAgICAgIHRlc3R0YXJnZXQgPSBkLmdldFZhcignVEVTVF9UQVJHRVQnLCBUcnVlKQorICAgICAgICBpZiB0ZXN0dGFyZ2V0ID09ICdxZW11JyBvciB0ZXN0dGFyZ2V0ID09ICdRZW11VGFyZ2V0JzoKKyAgICAgICAgICAgIGRpc3BsYXkgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKS5nZXRWYXIoIkRJU1BMQVkiLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IGRpc3BsYXk6CisgICAgICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgndGVzdGltYWdlIG5lZWRzIGFuIFggZGVza3RvcCB0byBzdGFydCBxZW11LCBwbGVhc2Ugc2V0IERJU1BMQVkgY29ycmVjdGx5IChlLmcuIERJU1BMQVk9OjEuMClcbicpCisKKyAgICBvbWFzayA9IG9zLnVtYXNrKDAyMikKKyAgICBpZiBvbWFzayAmIDA3NTU6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBsZWFzZSB1c2UgYSB1bWFzayB3aGljaCBhbGxvd3MgYStyeCBhbmQgdStyd3hcbiIpCisgICAgb3MudW1hc2sob21hc2spCisKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSA9PSAiYXJtIjoKKyAgICAgICAgIyBUaGlzIHBhdGggaXMgbm8gbG9uZ2VyIHVzZXItcmVhZGFibGUgaW4gbW9kZXJuICh2ZXJ5IHJlY2VudCkgTGludXgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIi9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIik6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oIi9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIiwgInIiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGludChmLnJlYWQoKS5zdHJpcCgpKSA+IDY1NTM2KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIi9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIGlzIG5vdCA8PSA2NTUzNi4gVGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGggcWVtdSBzbyBwbGVhc2UgZml4IHRoZSB2YWx1ZSAoYXMgcm9vdCkuXG5cblRvIGZpeCB0aGlzIGluIGxhdGVyIHJlYm9vdHMsIHNldCB2bS5tbWFwX21pbl9hZGRyID0gNjU1MzYgaW4gL2V0Yy9zeXNjdGwuY29uZi5cbiIpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIG9lcm9vdCA9IGQuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpCisgICAgaWYgb2Vyb290LmZpbmQoJysnKSAhPSAtMToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIHlvdSBoYXZlIGFuIGludmFsaWQgY2hhcmFjdGVyICgrKSBpbiB5b3VyIENPUkVCQVNFIGRpcmVjdG9yeSBwYXRoLiBQbGVhc2UgbW92ZSB0aGUgaW5zdGFsbGF0aW9uIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgaW5jbHVkZSBhbnkgKyBjaGFyYWN0ZXJzLiIpCisgICAgaWYgb2Vyb290LmZpbmQoJ0AnKSAhPSAtMToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIHlvdSBoYXZlIGFuIGludmFsaWQgY2hhcmFjdGVyIChAKSBpbiB5b3VyIENPUkVCQVNFIGRpcmVjdG9yeSBwYXRoLiBQbGVhc2UgbW92ZSB0aGUgaW5zdGFsbGF0aW9uIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgaW5jbHVkZSBhbnkgQCBjaGFyYWN0ZXJzLiIpCisgICAgaWYgb2Vyb290LmZpbmQoJyAnKSAhPSAtMToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIHlvdSBoYXZlIGEgc3BhY2UgaW4geW91ciBDT1JFQkFTRSBkaXJlY3RvcnkgcGF0aC4gUGxlYXNlIG1vdmUgdGhlIGluc3RhbGxhdGlvbiB0byBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGluY2x1ZGUgYSBzcGFjZSBzaW5jZSBhdXRvdG9vbHMgZG9lc24ndCBzdXBwb3J0IHRoaXMuIikKKworICAgICMgQ2hlY2sgdGhlIGZvcm1hdCBvZiBNSVJST1JTLCBQUkVNSVJST1JTIGFuZCBTU1RBVEVfTUlSUk9SUworICAgIGltcG9ydCByZQorICAgIG1pcnJvcl92YXJzID0gWydNSVJST1JTJywgJ1BSRU1JUlJPUlMnLCAnU1NUQVRFX01JUlJPUlMnXQorICAgIHByb3RvY29scyA9IFsnaHR0cCcsICdmdHAnLCAnZmlsZScsICdodHRwcycsIFwKKyAgICAgICAgICAgICAgICAgJ2dpdCcsICdnaXRzbScsICdoZycsICdvc2MnLCAncDQnLCAnc3ZuJywgXAorICAgICAgICAgICAgICAgICAnYnpyJywgJ2N2cyddCisgICAgZm9yIG1pcnJvcl92YXIgaW4gbWlycm9yX3ZhcnM6CisgICAgICAgIG1pcnJvcnMgPSAoZC5nZXRWYXIobWlycm9yX3ZhciwgVHJ1ZSkgb3IgJycpLnJlcGxhY2UoJ1xcbicsICdcbicpLnNwbGl0KCdcbicpCisgICAgICAgIGZvciBtaXJyb3JfZW50cnkgaW4gbWlycm9yczoKKyAgICAgICAgICAgIG1pcnJvcl9lbnRyeSA9IG1pcnJvcl9lbnRyeS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgbWlycm9yX2VudHJ5OgorICAgICAgICAgICAgICAgICMgaWdub3JlIGJsYW5rIGxpbmVzCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhdHRlcm4sIG1pcnJvciA9IG1pcnJvcl9lbnRyeS5zcGxpdCgpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdJbnZhbGlkICVzOiAlcywgc2hvdWxkIGJlIDIgbWVtYmVycy4nICUgKG1pcnJvcl92YXIsIG1pcnJvcl9lbnRyeS5zdHJpcCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkZWNvZGVkID0gYmIuZmV0Y2gyLmRlY29kZXVybChwYXR0ZXJuKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhdHRlcm5fc2NoZW1lID0gcmUuY29tcGlsZShkZWNvZGVkWzBdKQorICAgICAgICAgICAgZXhjZXB0IHJlLmVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdJbnZhbGlkIHNjaGVtZSByZWdleCAoJXMpIGluICVzOyAlcycgJSAocGF0dGVybiwgbWlycm9yX3ZhciwgbWlycm9yX2VudHJ5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3QgYW55KHBhdHRlcm5fc2NoZW1lLm1hdGNoKHByb3RvY29sKSBmb3IgcHJvdG9jb2wgaW4gcHJvdG9jb2xzKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdJbnZhbGlkIHByb3RvY29sICglcykgaW4gJXM6ICVzJyAlIChkZWNvZGVkWzBdLCBtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCBhbnkobWlycm9yLnN0YXJ0c3dpdGgocHJvdG9jb2wgKyAnOi8vJykgZm9yIHByb3RvY29sIGluIHByb3RvY29scyk6CisgICAgICAgICAgICAgICAgYmIud2FybignSW52YWxpZCBwcm90b2NvbCBpbiAlczogJXMnICUgKG1pcnJvcl92YXIsIG1pcnJvcl9lbnRyeSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbWlycm9yLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKToKKyAgICAgICAgICAgICAgICBpbXBvcnQgdXJscGFyc2UKKyAgICAgICAgICAgICAgICBjaGVja19zeW1saW5rKHVybHBhcnNlLnVybHBhcnNlKG1pcnJvcikucGF0aCwgZCkKKyAgICAgICAgICAgICAgICAjIFNTVEFURV9NSVJST1IgZW5kcyB3aXRoIGEgL1BBVEggc3RyaW5nCisgICAgICAgICAgICAgICAgaWYgbWlycm9yLmVuZHN3aXRoKCcvUEFUSCcpOgorICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSAvUEFUSCQgZnJvbSBTU1RBVEVfTUlSUk9SIHRvIGdldCBhIHdvcmtpbmcKKyAgICAgICAgICAgICAgICAgICAgIyBiYXNlIGRpcmVjdG9yeSBwYXRoCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcl9iYXNlID0gdXJscGFyc2UudXJscGFyc2UobWlycm9yWzotMSpsZW4oJy9QQVRIJyldKS5wYXRoCisgICAgICAgICAgICAgICAgICAgIGNoZWNrX3N5bWxpbmsobWlycm9yX2Jhc2UsIGQpCisKKyAgICAjIENoZWNrIHRoYXQgVE1QRElSIGhhc24ndCBjaGFuZ2VkIGxvY2F0aW9uIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBydW4KKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBjaGVja2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAic2F2ZWRfdG1wZGlyIikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhjaGVja2ZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oY2hlY2tmaWxlLCAiciIpIGFzIGY6CisgICAgICAgICAgICBzYXZlZF90bXBkaXIgPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICBpZiAoc2F2ZWRfdG1wZGlyICE9IHRtcGRpcik6CisgICAgICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIFRNUERJUiBoYXMgY2hhbmdlZCBsb2NhdGlvbi4gWW91IG5lZWQgdG8gZWl0aGVyIG1vdmUgaXQgYmFjayB0byAlcyBvciByZWJ1aWxkXG4iICUgc2F2ZWRfdG1wZGlyKQorICAgIGVsc2U6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0bXBkaXIpCisgICAgICAgICMgUmVtb3ZlIHNldHVpZCwgc2V0Z2lkIGFuZCBzdGlja3kgYml0cyBmcm9tIFRNUERJUgorICAgICAgICBvcy5jaG1vZCh0bXBkaXIsIG9zLnN0YXQodG1wZGlyKS5zdF9tb2RlICYgfiBzdGF0LlNfSVNVSUQpCisgICAgICAgIG9zLmNobW9kKHRtcGRpciwgb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUgJiB+IHN0YXQuU19JU0dJRCkKKyAgICAgICAgb3MuY2htb2QodG1wZGlyLCBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZSAmIH4gc3RhdC5TX0lTVlRYKQorICAgICAgICB3aXRoIG9wZW4oY2hlY2tmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHRtcGRpcikKKworICAgICMgQ2hlY2sgdm1kayBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlci4KKyAgICBpZiAndm1kaycgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKSBhbmQgJ2xpdmUnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBJTUFHRV9GU1RZUEVTIHZtZGsgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXJcbiIpCisKKyAgICAjIENoZWNrIHZkaSBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlci4KKyAgICBpZiAndmRpJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIGFuZCAnbGl2ZScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIElNQUdFX0ZTVFlQRVMgdmRpIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyXG4iKQorCisgICAgIyBDaGVjayBxY293MiBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlci4KKyAgICBpZiAncWNvdzInIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgYW5kICdsaXZlJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgSU1BR0VfRlNUWVBFUyBxY293MiBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlclxuIikKKworICAgICMgQ2hlY2sgL2Jpbi9zaCBsaW5rcyB0byBkYXNoIG9yIGJhc2gKKyAgICByZWFsX3NoID0gb3MucGF0aC5yZWFscGF0aCgnL2Jpbi9zaCcpCisgICAgaWYgbm90IHJlYWxfc2guZW5kc3dpdGgoJy9kYXNoJykgYW5kIG5vdCByZWFsX3NoLmVuZHN3aXRoKCcvYmFzaCcpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgL2Jpbi9zaCBsaW5rcyB0byAlcywgbXVzdCBiZSBkYXNoIG9yIGJhc2hcbiIgJSByZWFsX3NoKQorCitkZWYgY2hlY2tfc2FuaXR5KHNhbml0eV9kYXRhKToKKyAgICBjbGFzcyBTYW5pdHlTdGF0dXMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlcyA9ICIiCisgICAgICAgICAgICBzZWxmLm5ldHdvcmtfZXJyb3IgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5yZXBhcnNlID0gRmFsc2UKKworICAgICAgICBkZWYgYWRkcmVzdWx0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2VzID0gc2VsZi5tZXNzYWdlcyArIG1lc3NhZ2UKKworICAgIHN0YXR1cyA9IFNhbml0eVN0YXR1cygpCisKKyAgICB0bXBkaXIgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgc3N0YXRlX2RpciA9IHNhbml0eV9kYXRhLmdldFZhcignU1NUQVRFX0RJUicsIFRydWUpCisKKyAgICBjaGVja19zeW1saW5rKHNzdGF0ZV9kaXIsIHNhbml0eV9kYXRhKQorCisgICAgIyBDaGVjayBzYXZlZCBzYW5pdHkgaW5mbworICAgIGxhc3Rfc2FuaXR5X3ZlcnNpb24gPSAwCisgICAgbGFzdF90bXBkaXIgPSAiIgorICAgIGxhc3Rfc3N0YXRlX2RpciA9ICIiCisgICAgc2FuaXR5dmVyZmlsZSA9IHNhbml0eV9kYXRhLmV4cGFuZCgiJHtUT1BESVJ9L2NvbmYvc2FuaXR5X2luZm8iKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHNhbml0eXZlcmZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oc2FuaXR5dmVyZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NBTklUWV9WRVJTSU9OJyk6CisgICAgICAgICAgICAgICAgICAgIGxhc3Rfc2FuaXR5X3ZlcnNpb24gPSBpbnQobGluZS5zcGxpdCgpWzFdKQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnVE1QRElSJyk6CisgICAgICAgICAgICAgICAgICAgIGxhc3RfdG1wZGlyID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTU1RBVEVfRElSJyk6CisgICAgICAgICAgICAgICAgICAgIGxhc3Rfc3N0YXRlX2RpciA9IGxpbmUuc3BsaXQoKVsxXQorCisgICAgY2hlY2tfc2FuaXR5X2V2ZXJ5YnVpbGQoc3RhdHVzLCBzYW5pdHlfZGF0YSkKKyAgICAKKyAgICBzYW5pdHlfdmVyc2lvbiA9IGludChzYW5pdHlfZGF0YS5nZXRWYXIoJ1NBTklUWV9WRVJTSU9OJywgVHJ1ZSkgb3IgMSkKKyAgICBuZXR3b3JrX2Vycm9yID0gRmFsc2UKKyAgICBpZiBsYXN0X3Nhbml0eV92ZXJzaW9uIDwgc2FuaXR5X3ZlcnNpb246IAorICAgICAgICBjaGVja19zYW5pdHlfdmVyc2lvbl9jaGFuZ2Uoc3RhdHVzLCBzYW5pdHlfZGF0YSkKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19zYW5pdHlfc3N0YXRlX2Rpcl9jaGFuZ2Uoc3N0YXRlX2Rpciwgc2FuaXR5X2RhdGEpKQorICAgIGVsc2U6IAorICAgICAgICBpZiBsYXN0X3NzdGF0ZV9kaXIgIT0gc3N0YXRlX2RpcjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfc2FuaXR5X3NzdGF0ZV9kaXJfY2hhbmdlKHNzdGF0ZV9kaXIsIHNhbml0eV9kYXRhKSkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguZGlybmFtZShzYW5pdHl2ZXJmaWxlKSkgYW5kIG5vdCBzdGF0dXMubWVzc2FnZXM6CisgICAgICAgIHdpdGggb3BlbihzYW5pdHl2ZXJmaWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJTQU5JVFlfVkVSU0lPTiAlc1xuIiAlIHNhbml0eV92ZXJzaW9uKSAKKyAgICAgICAgICAgIGYud3JpdGUoIlRNUERJUiAlc1xuIiAlIHRtcGRpcikgCisgICAgICAgICAgICBmLndyaXRlKCJTU1RBVEVfRElSICVzXG4iICUgc3N0YXRlX2RpcikgCisKKyAgICBzYW5pdHlfaGFuZGxlX2FiaWNoYW5nZXMoc3RhdHVzLCBzYW5pdHlfZGF0YSkKKworICAgIGlmIHN0YXR1cy5tZXNzYWdlcyAhPSAiIjoKKyAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKHNhbml0eV9kYXRhLmV4cGFuZChzdGF0dXMubWVzc2FnZXMpLCBzYW5pdHlfZGF0YSwgc3RhdHVzLm5ldHdvcmtfZXJyb3IpCisgICAgcmV0dXJuIHN0YXR1cy5yZXBhcnNlCisKKyMgQ3JlYXRlIGEgY29weSBvZiB0aGUgZGF0YXN0b3JlIGFuZCBmaW5hbGlzZSBpdCB0byBlbnN1cmUgYXBwZW5kcyBhbmQgCisjIG92ZXJyaWRlcyBhcmUgc2V0IC0gdGhlIGRhdGFzdG9yZSBoYXMgeWV0IHRvIGJlIGZpbmFsaXNlZCBhdCBDb25maWdQYXJzZWQKK2RlZiBjb3B5X2RhdGEoZSk6CisgICAgc2FuaXR5X2RhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZS5kYXRhKQorICAgIHNhbml0eV9kYXRhLmZpbmFsaXplKCkKKyAgICByZXR1cm4gc2FuaXR5X2RhdGEKKworYWRkaGFuZGxlciBjaGVja19zYW5pdHlfZXZlbnRoYW5kbGVyCitjaGVja19zYW5pdHlfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuU2FuaXR5Q2hlY2sgYmIuZXZlbnQuTmV0d29ya1Rlc3QiCitweXRob24gY2hlY2tfc2FuaXR5X2V2ZW50aGFuZGxlcigpIHsKKyAgICBpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJTYW5pdHlDaGVjayI6CisgICAgICAgIHNhbml0eV9kYXRhID0gY29weV9kYXRhKGUpCisgICAgICAgIGlmIGUuZ2VuZXJhdGVldmVudHM6CisgICAgICAgICAgICBzYW5pdHlfZGF0YS5zZXRWYXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgIjEiKQorICAgICAgICByZXBhcnNlID0gY2hlY2tfc2FuaXR5KHNhbml0eV9kYXRhKQorICAgICAgICBlLmRhdGEuc2V0VmFyKCJCQl9JTlZBTElEQ09ORiIsIHJlcGFyc2UpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQoKSwgZS5kYXRhKQorICAgIGVsaWYgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiTmV0d29ya1Rlc3QiOgorICAgICAgICBzYW5pdHlfZGF0YSA9IGNvcHlfZGF0YShlKQorICAgICAgICBpZiBlLmdlbmVyYXRlZXZlbnRzOgorICAgICAgICAgICAgc2FuaXR5X2RhdGEuc2V0VmFyKCJTQU5JVFlfVVNFX0VWRU5UUyIsICIxIikKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5OZXR3b3JrVGVzdEZhaWxlZCgpIGlmIGNoZWNrX2Nvbm5lY3Rpdml0eShzYW5pdHlfZGF0YSkgZWxzZSBiYi5ldmVudC5OZXR3b3JrVGVzdFBhc3NlZCgpLCBlLmRhdGEpCisKKyAgICByZXR1cm4KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zY29ucy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZGU4MjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zY29ucy5iYmNsYXNzCkBAIC0wLDAgKzEsMTUgQEAKK0RFUEVORFMgKz0gInB5dGhvbi1zY29ucy1uYXRpdmUiCisKK0VYVFJBX09FU0NPTlMgPz0gIiIKKworc2NvbnNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Njb25zICR7UEFSQUxMRUxfTUFLRX0gUFJFRklYPSR7cHJlZml4fSBwcmVmaXg9JHtwcmVmaXh9ICR7RVhUUkFfT0VTQ09OU30gfHwgXAorICAgICAgICBkaWUgInNjb25zIGJ1aWxkIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitzY29uc19kb19pbnN0YWxsKCkgeworICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgUFJFRklYPSR7RH0ke3ByZWZpeH0gcHJlZml4PSR7RH0ke3ByZWZpeH0gaW5zdGFsbCAke0VYVFJBX09FU0NPTlN9fHwgXAorICAgICAgICBkaWUgInNjb25zIGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZGwuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzEyODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZGwuYmJjbGFzcwpAQCAtMCwwICsxLDYgQEAKKyMKKyMgKEMpIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUBWYW5pbGxlLmRlPgorIworCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYnNkbCBsaWJzZGwtbWl4ZXIgbGlic2RsLWltYWdlIgorU0VDVElPTiA9ICJ4MTEvZ2FtZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzNDNiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK2luaGVyaXQgZGlzdHV0aWxzCisKK0RFUEVORFMgKz0gInB5dGhvbi1kaXN0cmlidXRlLW5hdGl2ZSIKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyA9ICItLXJvb3Q9JHtEfSBcCisgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtbGliPSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2V0dXB0b29sczMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ZGQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMzLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitpbmhlcml0IGRpc3R1dGlsczMKKworREVQRU5EUyArPSAicHl0aG9uMy1zZXR1cHRvb2xzLW5hdGl2ZSIKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyA9ICItLXJvb3Q9JHtEfSBcCisgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtbGliPSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpZ25fcnBtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNGNkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpZ25fcnBtLmJiY2xhc3MKQEAgLTAsMCArMSw3NSBAQAorIyBDbGFzcyBmb3IgZ2VuZXJhdGluZyBzaWduZWQgUlBNIHBhY2thZ2VzLgorIworIyBDb25maWd1cmF0aW9uIHZhcmlhYmxlcyB1c2VkIGJ5IHRoaXMgY2xhc3M6CisjIFJQTV9HUEdfUEFTU1BIUkFTRV9GSUxFCisjICAgICAgICAgICBQYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBwYXNzcGhyYXNlIG9mIHRoZSBzaWduaW5nIGtleS4KKyMgUlBNX0dQR19OQU1FCisjICAgICAgICAgICBOYW1lIG9mIHRoZSBrZXkgdG8gc2lnbiB3aXRoLiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gZGVmaW5lCisjICAgICAgICAgICAlX2dwZ19uYW1lIG1hY3JvIGluIHlvdXIgfi8ub2VycG1tYWNyb3MgZmlsZS4KKyMgUlBNX0dQR19QVUJLRVkKKyMgICAgICAgICAgIFBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHB1YmxpYyBrZXkgKGluICJhcm1vciIgZm9ybWF0KQorIyAgICAgICAgICAgY29ycmVzcG9uZGluZyB0aGUgc2lnbmluZyBrZXkuCisjIEdQR19CSU4KKyMgICAgICAgICAgIE9wdGlvbmFsIHZhcmlhYmxlIGZvciBzcGVjaWZ5aW5nIHRoZSBncGcgYmluYXJ5L3dyYXBwZXIgdG8gdXNlIGZvcgorIyAgICAgICAgICAgc2lnbmluZy4KKyMKK2luaGVyaXQgc2FuaXR5CisKK1JQTV9TSUdOX1BBQ0tBR0VTPScxJworCisKK19jaGVja19ncGdfbmFtZSAoKSB7CisgICAgbWFjcm9kZWY9YHJwbSAtRSAnJV9ncGdfbmFtZSdgCisgICAgWyAiJG1hY3JvZGVmIiA9PSAiJV9ncGdfbmFtZSIgXSAmJiByZXR1cm4gMSB8fCByZXR1cm4gMAorfQorCisKK2RlZiBycG1zaWduX3dyYXBwZXIoZCwgZmlsZXMsIHBhc3NwaHJhc2UsIGdwZ19uYW1lPU5vbmUpOgorICAgIGltcG9ydCBwZXhwZWN0CisKKyAgICAjIEZpbmQgdGhlIGNvcnJlY3QgcnBtIGJpbmFyeQorICAgIHJwbV9iaW5fcGF0aCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCBUcnVlKSArICcvcnBtJworICAgIGNtZCA9IHJwbV9iaW5fcGF0aCArICIgLS1hZGRzaWduICIKKyAgICBpZiBncGdfbmFtZToKKyAgICAgICAgY21kICs9ICItLWRlZmluZSAnJSVfZ3BnX25hbWUgJXMnICIgJSBncGdfbmFtZQorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnX2NoZWNrX2dwZ19uYW1lJywgZCkKKyAgICAgICAgZXhjZXB0IGJiLmJ1aWxkLkZ1bmNGYWlsZWQ6CisgICAgICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSBSUE1fR1BHX05BTUUgaW4gYml0YmFrZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpZyBvciB0aGUgJV9ncGdfbmFtZSBSUE0gbWFjcm8gZGVmaW5lZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihlLmcuIGluICB+Ly5vZXJwbW1hY3JvcyIsIGQpCisgICAgaWYgZC5nZXRWYXIoJ0dQR19CSU4nLCBUcnVlKToKKyAgICAgICAgY21kICs9ICItLWRlZmluZSAnJSVfX2dwZyAlcycgIiAlIGQuZ2V0VmFyKCdHUEdfQklOJywgVHJ1ZSkKKyAgICBjbWQgKz0gJyAnLmpvaW4oZmlsZXMpCisKKyAgICAjIE5lZWQgdG8gdXNlIHBleHBlY3QgZm9yIGZlZWRpbmcgdGhlIHBhc3NwaHJhc2UKKyAgICBwcm9jID0gcGV4cGVjdC5zcGF3bihjbWQpCisgICAgdHJ5OgorICAgICAgICBwcm9jLmV4cGVjdF9leGFjdCgnRW50ZXIgcGFzcyBwaHJhc2U6JywgdGltZW91dD0xNSkKKyAgICAgICAgcHJvYy5zZW5kbGluZShwYXNzcGhyYXNlKQorICAgICAgICBwcm9jLmV4cGVjdChwZXhwZWN0LkVPRiwgdGltZW91dD05MDApCisgICAgICAgIHByb2MuY2xvc2UoKQorICAgIGV4Y2VwdCBwZXhwZWN0LlRJTUVPVVQgYXMgZXJyOgorICAgICAgICBiYi5kZWJ1ZygncnBtc2lnbiB0aW1lb3V0OiAlcycgJSBlcnIpCisgICAgICAgIHByb2MudGVybWluYXRlKCkKKyAgICByZXR1cm4gcHJvYy5leGl0c3RhdHVzCisKKworcHl0aG9uIHNpZ25fcnBtICgpIHsKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgcnBtX2dwZ19wYXNzX2ZpbGUgPSAoZC5nZXRWYXIoIlJQTV9HUEdfUEFTU1BIUkFTRV9GSUxFIiwgVHJ1ZSkgb3IgIiIpCisgICAgaWYgcnBtX2dwZ19wYXNzX2ZpbGU6CisgICAgICAgIHdpdGggb3BlbihycG1fZ3BnX3Bhc3NfZmlsZSkgYXMgZm9iajoKKyAgICAgICAgICAgIHJwbV9ncGdfcGFzc3BocmFzZSA9IGZvYmoucmVhZGxpbmVzKClbMF0ucnN0cmlwKCdcbicpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgUlBNX0dQR19QQVNTUEhSQVNFX0ZJTEUgaW4gdGhlIGNvbmZpZyIsIGQpCisKKyAgICBycG1fZ3BnX25hbWUgPSAoZC5nZXRWYXIoIlJQTV9HUEdfTkFNRSIsIFRydWUpIG9yICIiKQorCisgICAgcnBtcyA9IGdsb2IuZ2xvYihkLmdldFZhcignUlBNX1BLR1dSSVRFRElSJywgVHJ1ZSkgKyAnLyonKQorCisgICAgaWYgcnBtc2lnbl93cmFwcGVyKGQsIHJwbXMsIHJwbV9ncGdfcGFzc3BocmFzZSwgcnBtX2dwZ19uYW1lKSAhPSAwOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJSUE0gc2lnbmluZyBmYWlsZWQiKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lwLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQyYTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2lwLmJiY2xhc3MKQEAgLTAsMCArMSw2MSBAQAorIyBCdWlsZCBDbGFzcyBmb3IgU2lwIGJhc2VkIFB5dGhvbiBCaW5kaW5ncworIyAoQykgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CisjCitTVEFHSU5HX1NJUERJUiA/PSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9zaXAiCisKK0RFUEVORFMgID0rICJzaXAtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1zaXAiCisKKyMgZGVmYXVsdCBzdHVmZiwgZG8gbm90IHVuY29tbWVudAorIyBFWFRSQV9TSVBUQUdTID0gIi10V1NfWDExIC10UXRfNF8zXzAiCisKKyMgZG9fZ2VuZXJhdGUgaXMgYmVmb3JlIGRvX2NvbmZpZ3VyZSBzbyBlbnN1cmUgdGhhdCBzaXBfbmF0aXZlIGlzIHBvcHVsYXRlZCBpbiBzeXNyb290IGJlZm9yZSBleGVjdXRpbmcgaXQKK2RvX2dlbmVyYXRlW2RlcGVuZHNdICs9ICJzaXAtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK3NpcF9kb19nZW5lcmF0ZSgpIHsKKwlpZiBbIC16ICIke1NJUF9NT0RVTEVTfSIgXTsgdGhlbiAKKwkJTU9EVUxFUz0iYGxzIHNpcC8qbW9kLnNpcGAiCisJZWxzZQorCQlNT0RVTEVTPSIke1NJUF9NT0RVTEVTfSIKKwlmaQorCisJaWYgWyAteiAiJE1PRFVMRVMiIF07IHRoZW4KKwkJZGllICJTSVBfTU9EVUxFUyBub3Qgc2V0IGFuZCBubyBtb2R1bGVzIGZvdW5kIGluICRQV0QiCisgICAgICAgIGVsc2UKKwkJYmJub3RlICJ1c2luZyBtb2R1bGVzICcke1NJUF9NT0RVTEVTfScgYW5kIHRhZ3MgJyR7RVhUUkFfU0lQVEFHU30nIgorCWZpCisKKwlpZiBbIC16ICIke0VYVFJBX1NJUFRBR1N9IiBdOyB0aGVuCisJCWRpZSAiRVhUUkFfU0lQVEFHUyBuZWVkcyB0byBiZSBzZXQhIgorCWVsc2UKKwkJU0lQVEFHUz0iJHtFWFRSQV9TSVBUQUdTfSIKKwlmaQorCisJaWYgWyAhIC16ICIke1NJUF9GRUFUVVJFU30iIF07IHRoZW4KKwkJRkVBVFVSRVM9Ii16ICR7U0lQX0ZFQVRVUkVTfSIKKwkJYmJub3RlICJzaXAgZmVhdHVyZSBmaWxlOiAke1NJUF9GRUFUVVJFU30iCisJZmkKKworCWZvciBtb2R1bGUgaW4gJE1PRFVMRVMKKwlkbworCQlpbnN0YWxsIC1kICR7bW9kdWxlfS8KKwkJZWNobyAiY2FsbGluZyAnc2lwNCAtSSBzaXAgLUkgJHtTVEFHSU5HX1NJUERJUn0gJHtTSVBUQUdTfSAke0ZFQVRVUkVTfSAtYyAke21vZHVsZX0gLWIgJHttb2R1bGV9LyR7bW9kdWxlfS5wcm8uaW4gc2lwLyR7bW9kdWxlfS8ke21vZHVsZX1tb2Quc2lwJyIKKwkJc2lwNCAtSSAke1NUQUdJTkdfU0lQRElSfSAtSSBzaXAgJHtTSVBUQUdTfSAke0ZFQVRVUkVTfSAtYyAke21vZHVsZX0gLWIgJHttb2R1bGV9LyR7bW9kdWxlfS5zYmYgXAorCQkJc2lwLyR7bW9kdWxlfS8ke21vZHVsZX1tb2Quc2lwIHx8IGRpZSAiRXJyb3IgY2FsbGluZyBzaXAgb24gJHttb2R1bGV9IgorCQlzZWQgLWUgJ3MsdGFyZ2V0LFRBUkdFVCwnIC1lICdzLHNvdXJjZXMsU09VUkNFUywnIC1lICdzLGhlYWRlcnMsSEVBREVSUywnIFwKKwkJCSR7bW9kdWxlfS8ke21vZHVsZX0uc2JmIHwgc2VkIHMsIm1vY19IRUFERVJTID0iLCJIRUFERVJTICs9IiwgXAorCQkJPiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCWVjaG8gIlRFTVBMQVRFPWxpYiIgPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0IiBdIAkJJiYgZWNobyAiIiAJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdGNhbnZhcyIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0dGFibGUiIF0gCSYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxd3QiIF0gCSYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdHBlIiBdICAgICAgICAmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXRwZSIgXSAgICAgICAgJiYgZWNobyAiTElCUys9LWxxcGUiCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJdHJ1ZQorCWRvbmUKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19nZW5lcmF0ZQorCithZGR0YXNrIGdlbmVyYXRlIGFmdGVyIGRvX3VucGFjayBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXRlY29uZmlnLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zaXRlY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkY2U0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVjb25maWcuYmJjbGFzcwpAQCAtMCwwICsxLDMzIEBACitweXRob24gc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnICgpIHsKKwlzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKwlpZiBzaGFyZWRfc3RhdGVbJ3Rhc2snXSAhPSAncG9wdWxhdGVfc3lzcm9vdCc6CisJCXJldHVybgorCWlmIG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihkLmdldFZhcignRklMRV9ESVJOQU1FJywgVHJ1ZSksICdzaXRlX2NvbmZpZycpKToKKwkJYmIuZGVidWcoMSwgIk5vIHNpdGVfY29uZmlnIGRpcmVjdG9yeSwgc2tpcHBpbmcgZG9fc2l0ZWNvbmZpZyIpCisJCXJldHVybgorCWJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZScsIGQpCisJc3N0YXRlX2NsZWFuKHNoYXJlZF9zdGF0ZSwgZCkKKwlzc3RhdGVfaW5zdGFsbChzaGFyZWRfc3RhdGUsIGQpCit9CisKK0VYVFJBU0lURUNPTkZJRyA/PSAiIgorCitzaXRlY29uZmlnX2RvX3NpdGVjb25maWdfZ2VuY2FjaGUgKCkgeworCW1rZGlyIC1wICR7V09SS0RJUn0vc2l0ZV9jb25maWdfJHtNQUNISU5FfQorCWdlbi1zaXRlLWNvbmZpZyAke0ZJTEVfRElSTkFNRX0vc2l0ZV9jb25maWcgXAorCQk+JHtXT1JLRElSfS9zaXRlX2NvbmZpZ18ke01BQ0hJTkV9L2NvbmZpZ3VyZS5hYworCWNkICR7V09SS0RJUn0vc2l0ZV9jb25maWdfJHtNQUNISU5FfQorCWF1dG9jb25mCisJcm0gLWYgJHtCUE59X2NhY2hlCisJQ09ORklHX1NJVEU9IiIgJHtFWFRSQVNJVEVDT05GSUd9IC4vY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gLS1jYWNoZS1maWxlICR7QlBOfV9jYWNoZQorCXNlZCAtbiAtZSAiL2FjX2N2X2NfYmlnZW5kaWFuL3AiIC1lICIvYWNfY3Zfc2l6ZW9mXy9wIiBcCisJCS1lICIvYWNfY3ZfdHlwZV8vcCIgLWUgIi9hY19jdl9oZWFkZXJfL3AiIC1lICIvYWNfY3ZfZnVuY18vcCIgXAorCQk8ICR7QlBOfV9jYWNoZSA+ICR7QlBOfV9jb25maWcKKwlta2RpciAtcCAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZAorCWNwICR7QlBOfV9jb25maWcgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS8ke1RBUkdFVF9TWVN9X2NvbmZpZ19zaXRlLmQKKworfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnRlcmNlcHRmdW5jc10gKz0gImRvX3NpdGVjb25maWcgIgorCitFWFBPUlRfRlVOQ1RJT05TIGRvX3NpdGVjb25maWcgZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2ZWFjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NpdGVpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSwxNzEgQEAKKyMgVGhpcyBjbGFzcyBleGlzdHMgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0cyB0aGF0CisjIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY2xhc3NlcyBhbmQvb3IgcmVjaXBlcy4gSWYgeW91IGFkZCBhIG5ldworIyB0YXJnZXQgdGhpcyB3aWxsIHByb2JhYmx5IG5lZWQgdG8gYmUgdXBkYXRlZC4KKworIworIyBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0ICd3aGF0JyBmb3IgdGhlIG5hbWVkIHRhcmdldCAndGFyZ2V0JworIyB3aGVyZSAndGFyZ2V0JyA9PSAiPGFyY2g+LTxvcz4iCisjCisjICd3aGF0JyBjYW4gYmUgb25lIG9mCisjICogdGFyZ2V0OiBSZXR1cm5zIHRoZSB0YXJnZXQgbmFtZSAoIjxhcmNoPi08b3M+IikKKyMgKiBlbmRpYW5lc3M6IFJldHVybiAiYmUiIGZvciBiaWcgZW5kaWFuIHRhcmdldHMsICJsZSIgZm9yIGxpdHRsZSBlbmRpYW4KKyMgKiBiaXRzOiBSZXR1cm5zIHRoZSBiaXQgc2l6ZSBvZiB0aGUgdGFyZ2V0LCBlaXRoZXIgIjMyIiBvciAiNjQiCisjICogbGliYzogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYyBsaWJyYXJ5IHVzZWQgYnkgdGhlIHRhcmdldAorIworIyBJdCBpcyBhbiBlcnJvciBmb3IgdGhlIHRhcmdldCBub3QgdG8gZXhpc3QuCisjIElmICd3aGF0JyBkb2Vzbid0IGV4aXN0IHRoZW4gYW4gZW1wdHkgdmFsdWUgaXMgcmV0dXJuZWQKKyMKK2RlZiBzaXRlaW5mb19kYXRhKGQpOgorICAgIGFyY2hpbmZvID0geworICAgICAgICAiYWxsYXJjaCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiIsICMgYm9ndXMsIGJ1dCBiZXR0ZXIgdGhhbiBzcGVjaWFsLWNhc2luZyB0aGUgY2hlY2tzIGJlbG93IGZvciBhbGxhcmNoCisgICAgICAgICJhYXJjaDY0IjogImVuZGlhbi1saXR0bGUgYml0LTY0IGFybS1jb21tb24gYXJtLTY0IiwKKyAgICAgICAgImFhcmNoNjRfYmUiOiAiZW5kaWFuLWJpZyBiaXQtNjQgYXJtLWNvbW1vbiBhcm0tNjQiLAorICAgICAgICAiYXJtIjogImVuZGlhbi1saXR0bGUgYml0LTMyIGFybS1jb21tb24gYXJtLTMyIiwKKyAgICAgICAgImFybWViIjogImVuZGlhbi1iaWcgYml0LTMyIGFybS1jb21tb24gYXJtLTMyIiwKKyAgICAgICAgImF2cjMyIjogImVuZGlhbi1iaWcgYml0LTMyIGF2cjMyLWNvbW1vbiIsCisgICAgICAgICJiZmluIjogImVuZGlhbi1saXR0bGUgYml0LTMyIGJmaW4tY29tbW9uIiwKKyAgICAgICAgImVwaXBoYW55IjogImVuZGlhbi1saXR0bGUgYml0LTMyIiwKKyAgICAgICAgImkzODYiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAiaTQ4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpNTg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImk2ODYiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAiaWE2NCI6ICJlbmRpYW4tbGl0dGxlIGJpdC02NCIsCisgICAgICAgICJtaWNyb2JsYXplIjogImVuZGlhbi1iaWcgYml0LTMyIG1pY3JvYmxhemUtY29tbW9uIiwKKyAgICAgICAgIm1pY3JvYmxhemVlYiI6ICJlbmRpYW4tYmlnIGJpdC0zMiBtaWNyb2JsYXplLWNvbW1vbiIsCisgICAgICAgICJtaWNyb2JsYXplZWwiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgbWljcm9ibGF6ZS1jb21tb24iLAorICAgICAgICAibWlwcyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBtaXBzLWNvbW1vbiIsCisgICAgICAgICJtaXBzNjQiOiAiZW5kaWFuLWJpZyBiaXQtNjQgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwczY0ZWwiOiAiZW5kaWFuLWxpdHRsZSBiaXQtNjQgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwc2VsIjogImVuZGlhbi1saXR0bGUgYml0LTMyIG1pcHMtY29tbW9uIiwKKyAgICAgICAgInBvd2VycGMiOiAiZW5kaWFuLWJpZyBiaXQtMzIgcG93ZXJwYy1jb21tb24iLAorICAgICAgICAibmlvczIiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgbmlvczItY29tbW9uIiwKKyAgICAgICAgInBvd2VycGM2NCI6ICJlbmRpYW4tYmlnIGJpdC02NCBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJwcGMiOiAiZW5kaWFuLWJpZyBiaXQtMzIgcG93ZXJwYy1jb21tb24iLAorICAgICAgICAicHBjNjQiOiAiZW5kaWFuLWJpZyBiaXQtNjQgcG93ZXJwYy1jb21tb24iLAorICAgICAgICAic2gzIjogImVuZGlhbi1saXR0bGUgYml0LTMyIHNoLWNvbW1vbiIsCisgICAgICAgICJzaDQiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgc2gtY29tbW9uIiwKKyAgICAgICAgInNwYXJjIjogImVuZGlhbi1iaWcgYml0LTMyIiwKKyAgICAgICAgInZpYWMzIjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgIng4Nl82NCI6ICJlbmRpYW4tbGl0dGxlIiwgIyBiaXRpbmZvIHNwZWNpZmllZCBpbiB0YXJnZXRpbmZvCisgICAgfQorICAgIG9zaW5mbyA9IHsKKyAgICAgICAgImRhcndpbiI6ICJjb21tb24tZGFyd2luIiwKKyAgICAgICAgImRhcndpbjkiOiAiY29tbW9uLWRhcndpbiIsCisgICAgICAgICJsaW51eCI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LWdudSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LWdudXgzMiI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LWdudW4zMiI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LWdudWVhYmkiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnVzcGUiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC11Y2xpYmMiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi11Y2xpYmMiLAorICAgICAgICAibGludXgtdWNsaWJjZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCisgICAgICAgICJsaW51eC11Y2xpYmNzcGUiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi11Y2xpYmMiLAorICAgICAgICAibGludXgtbXVzbCI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAorICAgICAgICAibGludXgtbXVzbGVhYmkiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1tdXNsIiwKKyAgICAgICAgImxpbnV4LW11c2xzcGUiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1tdXNsIiwKKyAgICAgICAgInVjbGludXgtdWNsaWJjIjogImNvbW1vbi11Y2xpYmMiLAorICAgICAgICAiY3lnd2luIjogImNvbW1vbi1jeWd3aW4iLAorICAgICAgICAibWluZ3czMiI6ICJjb21tb24tbWluZ3ciLAorICAgIH0KKyAgICB0YXJnZXRpbmZvID0geworICAgICAgICAiYWFyY2g2NC1saW51eC1nbnUiOiAiYWFyY2g2NC1saW51eCIsCisgICAgICAgICJhYXJjaDY0X2JlLWxpbnV4LWdudSI6ICJhYXJjaDY0X2JlLWxpbnV4IiwKKyAgICAgICAgImFybS1saW51eC1nbnVlYWJpIjogImFybS1saW51eCIsCisgICAgICAgICJhcm0tbGludXgtbXVzbGVhYmkiOiAiYXJtLWxpbnV4IiwKKyAgICAgICAgImFybS1saW51eC11Y2xpYmNlYWJpIjogImFybS1saW51eC11Y2xpYmMiLAorICAgICAgICAiYXJtZWItbGludXgtZ251ZWFiaSI6ICJhcm1lYi1saW51eCIsCisgICAgICAgICJhcm1lYi1saW51eC11Y2xpYmNlYWJpIjogImFybWViLWxpbnV4LXVjbGliYyIsCisgICAgICAgICJhcm1lYi1saW51eC1tdXNsZWFiaSI6ICJhcm1lYi1saW51eCIsCisgICAgICAgICJtaXBzLWxpbnV4LW11c2wiOiAibWlwcy1saW51eCIsCisgICAgICAgICJtaXBzZWwtbGludXgtbXVzbCI6ICJtaXBzZWwtbGludXgiLAorICAgICAgICAibWlwczY0LWxpbnV4LW11c2wiOiAibWlwcy1saW51eCIsCisgICAgICAgICJtaXBzNjRlbC1saW51eC1tdXNsIjogIm1pcHNlbC1saW51eCIsCisgICAgICAgICJtaXBzNjQtbGludXgtZ251bjMyIjogIm1pcHMtbGludXggYml0LTMyIiwKKyAgICAgICAgIm1pcHM2NGVsLWxpbnV4LWdudW4zMiI6ICJtaXBzZWwtbGludXggYml0LTMyIiwKKyAgICAgICAgInBvd2VycGMtbGludXgiOiAicG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtbXVzbCI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LXVjbGliYyI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LWdudXNwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LW11c2xzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC11Y2xpYmNzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXggcG93ZXJwYy1saW51eC11Y2xpYmMiLAorICAgICAgICAicG93ZXJwYzY0LWxpbnV4LWdudXNwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGM2NC1saW51eCIsCisgICAgICAgICJwb3dlcnBjNjQtbGludXgtbXVzbHNwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGM2NC1saW51eCIsCisgICAgICAgICJwb3dlcnBjNjQtbGludXgiOiAicG93ZXJwYy1saW51eCIsCisgICAgICAgICJ4ODZfNjQtY3lnd2luIjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtZGFyd2luIjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtZGFyd2luOSI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4IjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgtbXVzbCI6ICJ4ODZfNjQtbGludXggYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eC11Y2xpYmMiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1lbGYiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1nbnUiOiAiYml0LTY0IHg4Nl82NC1saW51eCIsCisgICAgICAgICJ4ODZfNjQtbGludXgtZ251eDMyIjogImJpdC0zMiBpeDg2LWNvbW1vbiB4MzItbGludXgiLAorICAgICAgICAieDg2XzY0LW1pbmd3MzIiOiAiYml0LTY0IiwKKyAgICB9CisKKyAgICBob3N0YXJjaCA9IGQuZ2V0VmFyKCJIT1NUX0FSQ0giLCBUcnVlKQorICAgIGhvc3RvcyA9IGQuZ2V0VmFyKCJIT1NUX09TIiwgVHJ1ZSkKKyAgICB0YXJnZXQgPSAiJXMtJXMiICUgKGhvc3RhcmNoLCBob3N0b3MpCisKKyAgICBzaXRlZGF0YSA9IFtdCisgICAgaWYgaG9zdGFyY2ggaW4gYXJjaGluZm86CisgICAgICAgIHNpdGVkYXRhLmV4dGVuZChhcmNoaW5mb1tob3N0YXJjaF0uc3BsaXQoKSkKKyAgICBpZiBob3N0b3MgaW4gb3NpbmZvOgorICAgICAgICBzaXRlZGF0YS5leHRlbmQob3NpbmZvW2hvc3Rvc10uc3BsaXQoKSkKKyAgICBpZiB0YXJnZXQgaW4gdGFyZ2V0aW5mbzoKKyAgICAgICAgc2l0ZWRhdGEuZXh0ZW5kKHRhcmdldGluZm9bdGFyZ2V0XS5zcGxpdCgpKQorICAgIHNpdGVkYXRhLmFwcGVuZCh0YXJnZXQpCisgICAgc2l0ZWRhdGEuYXBwZW5kKCJjb21tb24iKQorCisgICAgYmIuZGVidWcoMSwgIlNJVEUgZmlsZXMgJXMiICUgc2l0ZWRhdGEpOworICAgIHJldHVybiBzaXRlZGF0YQorCitweXRob24gKCkgeworICAgIHNpdGVkYXRhID0gc2V0KHNpdGVpbmZvX2RhdGEoZCkpCisgICAgaWYgImVuZGlhbi1saXR0bGUiIGluIHNpdGVkYXRhOgorICAgICAgICBkLnNldFZhcigiU0lURUlORk9fRU5ESUFOTkVTUyIsICJsZSIpCisgICAgZWxpZiAiZW5kaWFuLWJpZyIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19FTkRJQU5ORVNTIiwgImJlIikKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiVW5hYmxlIHRvIGRldGVybWluZSBlbmRpYW5uZXNzIGZvciBhcmNoaXRlY3R1cmUgJyVzJyIgJQorICAgICAgICAgICAgICAgICBkLmdldFZhcigiSE9TVF9BUkNIIiwgVHJ1ZSkpCisgICAgICAgIGJiLmZhdGFsKCJQbGVhc2UgYWRkIHlvdXIgYXJjaGl0ZWN0dXJlIHRvIHNpdGVpbmZvLmJiY2xhc3MiKQorCisgICAgaWYgImJpdC0zMiIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19CSVRTIiwgIjMyIikKKyAgICBlbGlmICJiaXQtNjQiIGluIHNpdGVkYXRhOgorICAgICAgICBkLnNldFZhcigiU0lURUlORk9fQklUUyIsICI2NCIpCisgICAgZWxzZToKKyAgICAgICAgYmIuZXJyb3IoIlVuYWJsZSB0byBkZXRlcm1pbmUgYml0IHNpemUgZm9yIGFyY2hpdGVjdHVyZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJIT1NUX0FSQ0giLCBUcnVlKSkKKyAgICAgICAgYmIuZmF0YWwoIlBsZWFzZSBhZGQgeW91ciBhcmNoaXRlY3R1cmUgdG8gc2l0ZWluZm8uYmJjbGFzcyIpCit9CisKK2RlZiBzaXRlaW5mb19nZXRfZmlsZXMoZCwgbm9fY2FjaGUgPSBGYWxzZSk6CisgICAgc2l0ZWRhdGEgPSBzaXRlaW5mb19kYXRhKGQpCisgICAgc2l0ZWZpbGVzID0gIiIKKyAgICBmb3IgcGF0aCBpbiBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKToKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gc2l0ZWRhdGE6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCAic2l0ZSIsIGVsZW1lbnQpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgc2l0ZWZpbGVzICs9IGZpbGVuYW1lICsgIiAiCisKKyAgICBpZiBub19jYWNoZTogcmV0dXJuIHNpdGVmaWxlcworCisgICAgIyBOb3cgY2hlY2sgZm9yIHNpdGVjb25maWcgY2FjaGUgZmlsZXMKKyAgICAjIFVzZSB0aGUgZmlsZXMgY29waWVkIHRvIHRoZSBhY2xvY2FsIGNhY2hlIGdlbmVyYXRlZCBieSBhdXRvdG9vbHMuYmJjbGFzcworICAgICMgdG8gYXZvaWQgcmFjZXMKKyAgICBwYXRoX3NpdGVjb25maWcgPSBkLmdldFZhcignQUNMT0NBTERJUicsIFRydWUpCisgICAgaWYgcGF0aF9zaXRlY29uZmlnIGFuZCBvcy5wYXRoLmlzZGlyKHBhdGhfc2l0ZWNvbmZpZyk6CisgICAgICAgIGZvciBpIGluIG9zLmxpc3RkaXIocGF0aF9zaXRlY29uZmlnKToKKyAgICAgICAgICAgIGlmIG5vdCBpLmVuZHN3aXRoKCJfY29uZmlnIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGhfc2l0ZWNvbmZpZywgaSkKKyAgICAgICAgICAgIHNpdGVmaWxlcyArPSBmaWxlbmFtZSArICIgIgorCisgICAgcmV0dXJuIHNpdGVmaWxlcworCisjCisjIE1ha2Ugc29tZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdmlhIHZhcmlhYmxlcworIworU0lURUNPTkZJR19TWVNST09UQ0FDSEUgPSAiJHtTVEFHSU5HX0RBVEFESVJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTRjNTNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzCkBAIC0wLDAgKzEsMzY1IEBACisjIFRoaXMgY2xhc3MgaW50ZWdyYXRlcyByZWFsLXRpbWUgbGljZW5zZSBzY2FubmluZywgZ2VuZXJhdGlvbiBvZiBTUERYIHN0YW5kYXJkCisjIG91dHB1dCBhbmQgdmVyaWZpeWluZyBsaWNlbnNlIGluZm8gZHVyaW5nIHRoZSBidWlsZGluZyBwcm9jZXNzLgorIyBJdCBpcyBhIGNvbWJpbmF0aW9uIG9mIGVmZm9ydHMgZnJvbSB0aGUgT0UtQ29yZSwgU1BEWCBhbmQgRm9zc29sb2d5IHByb2plY3RzLgorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBGT1NTb2xvZ3k6CisjICAgaHR0cDovL3d3dy5mb3Nzb2xvZ3kub3JnCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEZPU1NvbG9neVNQRFggY29tbWFuZGxpbmU6CisjICAgaHR0cHM6Ly9naXRodWIuY29tL3NwZHgtdG9vbHMvZm9zc29sb2d5LXNwZHgvd2lraS9Gb3Nzb2xvZ3ktU1BEWC1XZWItQVBJCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFNQRFg6CisjICAgaHR0cDovL3d3dy5zcGR4Lm9yZworIworCisjIFNQRFggZmlsZSB3aWxsIGJlIG91dHB1dCB0byB0aGUgcGF0aCB3aGljaCBpcyBkZWZpbmVkIGFzW1NQRFhfTUFOSUZFU1RfRElSXSAKKyMgaW4gLi9tZXRhL2NvbmYvbGljZW5zZXMuY29uZi4KKworU1BEWFNTVEFURURJUiA9ICIke1dPUktESVJ9L3NwZHhfc3N0YXRlX2RpciIKKworIyBJZiAke1N9IGlzbid0IGFjdHVhbGx5IHRoZSB0b3AtbGV2ZWwgc291cmNlIGRpcmVjdG9yeSwgc2V0IFNQRFhfUyB0byBwb2ludCBhdAorIyB0aGUgcmVhbCB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorU1BEWF9TID89ICIke1N9IgorCitweXRob24gZG9fc3BkeCAoKSB7CisgICAgaW1wb3J0IG9zLCBzeXMKKyAgICBpbXBvcnQganNvbiwgc2h1dGlsCisKKyAgICBpbmZvID0ge30gCisgICAgaW5mb1snd29ya2RpciddID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGluZm9bJ3NvdXJjZWRpciddID0gZC5nZXRWYXIoJ1NQRFhfUycsIFRydWUpCisgICAgaW5mb1sncG4nXSA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaW5mb1sncHYnXSA9IGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgaW5mb1snc3BkeF92ZXJzaW9uJ10gPSBkLmdldFZhcignU1BEWF9WRVJTSU9OJywgVHJ1ZSkKKyAgICBpbmZvWydkYXRhX2xpY2Vuc2UnXSA9IGQuZ2V0VmFyKCdEQVRBX0xJQ0VOU0UnLCBUcnVlKQorCisgICAgc3N0YXRlZGlyID0gZC5nZXRWYXIoJ1NQRFhTU1RBVEVESVInLCBUcnVlKQorICAgIHNzdGF0ZWZpbGUgPSBvcy5wYXRoLmpvaW4oc3N0YXRlZGlyLCBpbmZvWydwbiddICsgaW5mb1sncHYnXSArICIuc3BkeCIpCisKKyAgICBtYW5pZmVzdF9kaXIgPSBkLmdldFZhcignU1BEWF9NQU5JRkVTVF9ESVInLCBUcnVlKQorICAgIGluZm9bJ291dGZpbGUnXSA9IG9zLnBhdGguam9pbihtYW5pZmVzdF9kaXIsIGluZm9bJ3BuJ10gKyAiLnNwZHgiICkKKworICAgIGluZm9bJ3NwZHhfdGVtcF9kaXInXSA9IGQuZ2V0VmFyKCdTUERYX1RFTVBfRElSJywgVHJ1ZSkKKyAgICBpbmZvWyd0YXJfZmlsZSddID0gb3MucGF0aC5qb2luKGluZm9bJ3dvcmtkaXInXSwgaW5mb1sncG4nXSArICIudGFyLmd6IiApCisKKyAgICAjIE1ha2Ugc3VyZSBpbXBvcnRhbnQgZGlycyBleGlzdAorICAgIHRyeToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG1hbmlmZXN0X2RpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNzdGF0ZWRpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGluZm9bJ3NwZHhfdGVtcF9kaXInXSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBiYi5lcnJvcigiU1BEWDogQ291bGQgbm90IHNldCB1cCByZXF1aXJlZCBkaXJlY3RvcmllczogIiArIHN0cihlKSkKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIyBnZXQgZXZlcnl0aGluZyBmcm9tIGNhY2hlLiAgdXNlIGl0IHRvIGRlY2lkZSBpZiAKKyAgICAjIyBzb21ldGhpbmcgbmVlZHMgdG8gYmUgcmVydW4gCisgICAgY3VyX3Zlcl9jb2RlID0gZ2V0X3Zlcl9jb2RlKGluZm9bJ3NvdXJjZWRpciddKQorICAgIGNhY2hlX2N1ciA9IEZhbHNlCisgICAgaWYgb3MucGF0aC5leGlzdHMoc3N0YXRlZmlsZSk6CisgICAgICAgICMjIGNhY2hlIGZvciB0aGlzIHBhY2thZ2UgZXhpc3RzLiByZWFkIGl0IGluCisgICAgICAgIGNhY2hlZF9zcGR4ID0gZ2V0X2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUpCisKKyAgICAgICAgaWYgY2FjaGVkX3NwZHhbJ1BhY2thZ2VWZXJpZmljYXRpb25Db2RlJ10gPT0gY3VyX3Zlcl9jb2RlOgorICAgICAgICAgICAgYmIud2FybigiU1BEWDogVmVyaWZpY2F0aW9uIGNvZGUgZm9yICIgKyBpbmZvWydwbiddCisgICAgICAgICAgICAgICAgICArICJpcyBzYW1lIGFzIGNhY2hlJ3MuIGRvIG5vdGhpbmciKQorICAgICAgICAgICAgY2FjaGVfY3VyID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9jYWxfZmlsZV9pbmZvID0gc2V0dXBfZm9zc19zY2FuKGluZm8sIFRydWUsIGNhY2hlZF9zcGR4WydGaWxlcyddKQorICAgIGVsc2U6CisgICAgICAgIGxvY2FsX2ZpbGVfaW5mbyA9IHNldHVwX2Zvc3Nfc2NhbihpbmZvLCBGYWxzZSwgTm9uZSkKKworICAgIGlmIGNhY2hlX2N1cjoKKyAgICAgICAgc3BkeF9maWxlX2luZm8gPSBjYWNoZWRfc3BkeFsnRmlsZXMnXQorICAgICAgICBmb3NzX3BhY2thZ2VfaW5mbyA9IGNhY2hlZF9zcGR4WydQYWNrYWdlJ10KKyAgICAgICAgZm9zc19saWNlbnNlX2luZm8gPSBjYWNoZWRfc3BkeFsnTGljZW5zZXMnXQorICAgIGVsc2U6CisgICAgICAgICMjIHNldHVwIGZvc3NvbG9neSBjb21tYW5kCisgICAgICAgIGZvc3Nfc2VydmVyID0gZC5nZXRWYXIoJ0ZPU1NfU0VSVkVSJywgVHJ1ZSkKKyAgICAgICAgZm9zc19mbGFncyA9IGQuZ2V0VmFyKCdGT1NTX1dHRVRfRkxBR1MnLCBUcnVlKQorICAgICAgICBmb3NzX2Z1bGxfc3BkeCA9IGQuZ2V0VmFyKCdGT1NTX0ZVTExfU1BEWCcsIFRydWUpID09ICJ0cnVlIiBvciBGYWxzZQorICAgICAgICBmb3NzX2NvbW1hbmQgPSAid2dldCAlcyAtLXBvc3QtZmlsZT0lcyAlcyJcCisgICAgICAgICAgICAlIChmb3NzX2ZsYWdzLCBpbmZvWyd0YXJfZmlsZSddLCBmb3NzX3NlcnZlcikKKyAgICAgICAgCisgICAgICAgIGZvc3NfcmVzdWx0ID0gcnVuX2Zvc3NvbG9neShmb3NzX2NvbW1hbmQsIGZvc3NfZnVsbF9zcGR4KQorICAgICAgICBpZiBmb3NzX3Jlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIChmb3NzX3BhY2thZ2VfaW5mbywgZm9zc19maWxlX2luZm8sIGZvc3NfbGljZW5zZV9pbmZvKSA9IGZvc3NfcmVzdWx0CisgICAgICAgICAgICBzcGR4X2ZpbGVfaW5mbyA9IGNyZWF0ZV9zcGR4X2RvYyhsb2NhbF9maWxlX2luZm8sIGZvc3NfZmlsZV9pbmZvKQorICAgICAgICAgICAgIyMgd3JpdGUgdG8gY2FjaGUKKyAgICAgICAgICAgIHdyaXRlX2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUsIGN1cl92ZXJfY29kZSwgZm9zc19wYWNrYWdlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGR4X2ZpbGVfaW5mbywgZm9zc19saWNlbnNlX2luZm8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5lcnJvcigiU1BEWDogQ291bGQgbm90IGNvbW11bmljYXRlIHdpdGggRk9TU29sb2d5IHNlcnZlci4gQ29tbWFuZCB3YXM6ICIgKyBmb3NzX2NvbW1hbmQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAKKyAgICAjIyBHZXQgZG9jdW1lbnQgYW5kIHBhY2thZ2UgbGV2ZWwgaW5mb3JtYXRpb24KKyAgICBzcGR4X2hlYWRlcl9pbmZvID0gZ2V0X2hlYWRlcl9pbmZvKGluZm8sIGN1cl92ZXJfY29kZSwgZm9zc19wYWNrYWdlX2luZm8pCisgICAgCisgICAgIyMgQ1JFQVRFIE1BTklGRVNUCisgICAgY3JlYXRlX21hbmlmZXN0KGluZm8sIHNwZHhfaGVhZGVyX2luZm8sIHNwZHhfZmlsZV9pbmZvLCBmb3NzX2xpY2Vuc2VfaW5mbykKKworICAgICMjIGNsZWFuIHVwIHRoZSB0ZW1wIHN0dWZmCisgICAgc2h1dGlsLnJtdHJlZShpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmZvWyd0YXJfZmlsZSddKToKKyAgICAgICAgcmVtb3ZlX2ZpbGUoaW5mb1sndGFyX2ZpbGUnXSkKK30KK2FkZHRhc2sgc3BkeCBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2RlZiBjcmVhdGVfbWFuaWZlc3QoaW5mbywgaGVhZGVyLCBmaWxlcywgbGljZW5zZXMpOgorICAgIGltcG9ydCBjb2RlY3MKKyAgICB3aXRoIGNvZGVjcy5vcGVuKGluZm9bJ291dGZpbGUnXSwgbW9kZT0ndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CisgICAgICAgICMgV3JpdGUgaGVhZGVyCisgICAgICAgIGYud3JpdGUoaGVhZGVyICsgJ1xuJykKKworICAgICAgICAjIFdyaXRlIGZpbGUgZGF0YQorICAgICAgICBmb3IgY2hrc3VtLCBibG9jayBpbiBmaWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGYud3JpdGUoIkZpbGVOYW1lOiAiICsgYmxvY2tbJ0ZpbGVOYW1lJ10gKyAnXG4nKQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYmxvY2suaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGtleSA9PSAnRmlsZU5hbWUnOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGtleSArICI6ICIgKyB2YWx1ZSArICdcbicpCisgICAgICAgICAgICBmLndyaXRlKCdcbicpCisKKyAgICAgICAgIyBXcml0ZSBsaWNlbnNlIGRhdGEKKyAgICAgICAgZm9yIGlkLCBibG9jayBpbiBsaWNlbnNlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGYud3JpdGUoIkxpY2Vuc2VJRDogIiArIGlkICsgJ1xuJykKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGJsb2NrLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIHZhbHVlICsgJ1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKKworZGVmIGdldF9jYWNoZWRfc3BkeChzc3RhdGVmaWxlKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCBjb2RlY3MKKyAgICBjYWNoZWRfc3BkeF9pbmZvID0ge30KKyAgICB3aXRoIGNvZGVjcy5vcGVuKHNzdGF0ZWZpbGUsIG1vZGU9J3InLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWNoZWRfc3BkeF9pbmZvID0ganNvbi5sb2FkKGYpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBjYWNoZWRfc3BkeF9pbmZvID0gTm9uZQorICAgIHJldHVybiBjYWNoZWRfc3BkeF9pbmZvCisKK2RlZiB3cml0ZV9jYWNoZWRfc3BkeChzc3RhdGVmaWxlLCB2ZXJfY29kZSwgcGFja2FnZV9pbmZvLCBmaWxlcywgbGljZW5zZV9pbmZvKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCBjb2RlY3MKKyAgICBzcGR4X2RvYyA9IHt9CisgICAgc3BkeF9kb2NbJ1BhY2thZ2VWZXJpZmljYXRpb25Db2RlJ10gPSB2ZXJfY29kZQorICAgIHNwZHhfZG9jWydGaWxlcyddID0ge30KKyAgICBzcGR4X2RvY1snRmlsZXMnXSA9IGZpbGVzCisgICAgc3BkeF9kb2NbJ1BhY2thZ2UnXSA9IHt9CisgICAgc3BkeF9kb2NbJ1BhY2thZ2UnXSA9IHBhY2thZ2VfaW5mbworICAgIHNwZHhfZG9jWydMaWNlbnNlcyddID0ge30KKyAgICBzcGR4X2RvY1snTGljZW5zZXMnXSA9IGxpY2Vuc2VfaW5mbworICAgIHdpdGggY29kZWNzLm9wZW4oc3N0YXRlZmlsZSwgbW9kZT0ndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CisgICAgICAgIGYud3JpdGUoanNvbi5kdW1wcyhzcGR4X2RvYykpCisKK2RlZiBzZXR1cF9mb3NzX3NjYW4oaW5mbywgY2FjaGUsIGNhY2hlZF9maWxlcyk6CisgICAgaW1wb3J0IGVycm5vLCBzaHV0aWwKKyAgICBpbXBvcnQgdGFyZmlsZQorICAgIGZpbGVfaW5mbyA9IHt9CisgICAgY2FjaGVfZGljdCA9IHt9CisKKyAgICBmb3IgZl9kaXIsIGYgaW4gbGlzdF9maWxlcyhpbmZvWydzb3VyY2VkaXInXSk6CisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmX2RpciwgZikKKyAgICAgICAgYWJzX3BhdGggPSBvcy5wYXRoLmpvaW4oaW5mb1snc291cmNlZGlyJ10sIGZ1bGxfcGF0aCkKKyAgICAgICAgZGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oaW5mb1snc3BkeF90ZW1wX2RpciddLCBmX2RpcikKKyAgICAgICAgZGVzdF9wYXRoID0gb3MucGF0aC5qb2luKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgZnVsbF9wYXRoKQorCisgICAgICAgIGNoZWNrc3VtID0gaGFzaF9maWxlKGFic19wYXRoKQorICAgICAgICBpZiBub3QgY2hlY2tzdW0gaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGVja3N1bV0gPSB7fQorICAgICAgICAgICAgIyMgcmV0YWluIGNhY2hlIGluZm9ybWF0aW9uIGlmIGl0IGV4aXN0cworICAgICAgICAgICAgaWYgY2FjaGUgYW5kIGNoZWNrc3VtIGluIGNhY2hlZF9maWxlczoKKyAgICAgICAgICAgICAgICBmaWxlX2luZm9bY2hlY2tzdW1dID0gY2FjaGVkX2ZpbGVzW2NoZWNrc3VtXQorICAgICAgICAgICAgIyMgaGF2ZSB0aGUgZmlsZSBpbmNsdWRlZCBpbiB3aGF0J3Mgc2VudCB0byB0aGUgRk9TU29sb2d5IHNlcnZlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlX2luZm9bY2hlY2tzdW1dWydGaWxlTmFtZSddID0gZnVsbF9wYXRoCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdF9kaXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShhYnNfcGF0aCwgZGVzdF9wYXRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IG1rZGlyaGllciBmYWlsZWQ6ICIgKyBzdHIoZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNodXRpbC5FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBjb3B5ZmlsZSBmYWlsZWQ6ICIgKyBzdHIoZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU1BEWDogY29weWZpbGUgZmFpbGVkOiAiICsgc3RyKGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiU1BEWDogQ291bGQgbm90IGdldCBjaGVja3N1bSBmb3IgZmlsZTogIiArIGYpCisgICAgCisgICAgd2l0aCB0YXJmaWxlLm9wZW4oaW5mb1sndGFyX2ZpbGUnXSwgInc6Z3oiKSBhcyB0YXI6CisgICAgICAgIHRhci5hZGQoaW5mb1snc3BkeF90ZW1wX2RpciddLCBhcmNuYW1lPW9zLnBhdGguYmFzZW5hbWUoaW5mb1snc3BkeF90ZW1wX2RpciddKSkKKyAgICAKKyAgICByZXR1cm4gZmlsZV9pbmZvCisKK2RlZiByZW1vdmVfZmlsZShmaWxlX25hbWUpOgorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGZpbGVfbmFtZSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBwYXNzCisKK2RlZiBsaXN0X2ZpbGVzKGRpcik6CisgICAgZm9yIHJvb3QsIHN1YkZvbGRlcnMsIGZpbGVzIGluIG9zLndhbGsoZGlyKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICByZWxfcm9vdCA9IG9zLnBhdGgucmVscGF0aChyb290LCBkaXIpCisgICAgICAgICAgICB5aWVsZCByZWxfcm9vdCwgZgorICAgIHJldHVybgorCitkZWYgaGFzaF9maWxlKGZpbGVfbmFtZSk6CisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZV9uYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZGF0YV9zdHJpbmcgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2hhMSA9IGhhc2hfc3RyaW5nKGRhdGFfc3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIHNoYTEKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBoYXNoX3N0cmluZyhkYXRhKToKKyAgICBpbXBvcnQgaGFzaGxpYgorICAgIHNoYTEgPSBoYXNobGliLnNoYTEoKQorICAgIHNoYTEudXBkYXRlKGRhdGEpCisgICAgcmV0dXJuIHNoYTEuaGV4ZGlnZXN0KCkKKworZGVmIHJ1bl9mb3Nzb2xvZ3koZm9zc19jb21tYW5kLCBmdWxsX3NwZHgpOgorICAgIGltcG9ydCBzdHJpbmcsIHJlCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAKKyAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihmb3NzX2NvbW1hbmQuc3BsaXQoKSwKKyAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICBmb3NzX291dHB1dCwgZm9zc19lcnJvciA9IHAuY29tbXVuaWNhdGUoKQorICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZm9zc19vdXRwdXQgPSB1bmljb2RlKGZvc3Nfb3V0cHV0LCAidXRmLTgiKQorICAgIGZvc3Nfb3V0cHV0ID0gc3RyaW5nLnJlcGxhY2UoZm9zc19vdXRwdXQsICdccicsICcnKQorCisgICAgIyBQYWNrYWdlIGluZm8KKyAgICBwYWNrYWdlX2luZm8gPSB7fQorICAgIGlmIGZ1bGxfc3BkeDoKKyAgICAgICAgIyBBbGwgbWFuZGF0b3J5LCBvbmx5IG9uZSBvY2N1cmFuY2UKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlQ29weXJpZ2h0VGV4dCddID0gcmUuZmluZGFsbCgnUGFja2FnZUNvcHlyaWdodFRleHQ6ICguKj88L3RleHQ+KScsIGZvc3Nfb3V0cHV0LCByZS5TKVswXQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlRGVjbGFyZWQnXSA9IHJlLmZpbmRhbGwoJ1BhY2thZ2VMaWNlbnNlRGVjbGFyZWQ6ICguKiknLCBmb3NzX291dHB1dClbMF0KKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUNvbmNsdWRlZCddID0gcmUuZmluZGFsbCgnUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQ6ICguKiknLCBmb3NzX291dHB1dClbMF0KKyAgICAgICAgIyBUaGVzZSBtYXkgYmUgbW9yZSB0aGFuIG9uZQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlcyddID0gcmUuZmluZGFsbCgnUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzOiAoLiopJywgZm9zc19vdXRwdXQpCisgICAgZWxzZToKKyAgICAgICAgREVGQVVMVCA9ICJOT0FTU0VSVElPTiIKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlQ29weXJpZ2h0VGV4dCddID0gIjx0ZXh0PiIgKyBERUZBVUxUICsgIjwvdGV4dD4iCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VEZWNsYXJlZCddID0gREVGQVVMVAorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkJ10gPSBERUZBVUxUCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzJ10gPSBbXQorCisgICAgIyBGaWxlIGluZm8KKyAgICBmaWxlX2luZm8gPSB7fQorICAgIHJlY29yZHMgPSBbXQorICAgICMgRmlsZU5hbWUgaXMgYWxzbyBpbiBQYWNrYWdlRmlsZU5hbWUsIHNvIHdlIG1hdGNoIG9uIEZpbGVUeXBlIGFzIHdlbGwuCisgICAgcmVjb3JkcyA9IHJlLmZpbmRhbGwoJ0ZpbGVOYW1lOi4qP0ZpbGVUeXBlOi4qPzwvdGV4dD4nLCBmb3NzX291dHB1dCwgcmUuUykKKyAgICBmb3IgcmVjIGluIHJlY29yZHM6CisgICAgICAgIGNoa3N1bSA9IHJlLmZpbmRhbGwoJ0ZpbGVDaGVja3N1bTogU0hBMTogKC4qKVxuJywgcmVjKVswXQorICAgICAgICBmaWxlX2luZm9bY2hrc3VtXSA9IHt9CisgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydGaWxlQ29weXJpZ2h0VGV4dCddID0gcmUuZmluZGFsbCgnRmlsZUNvcHlyaWdodFRleHQ6ICcKKyAgICAgICAgICAgICsgJyguKj88L3RleHQ+KScsIHJlYywgcmUuUyApWzBdCisgICAgICAgIGZpZWxkcyA9IFsnRmlsZU5hbWUnLCAnRmlsZVR5cGUnLCAnTGljZW5zZUNvbmNsdWRlZCcsICdMaWNlbnNlSW5mb0luRmlsZSddCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVtmaWVsZF0gPSByZS5maW5kYWxsKGZpZWxkICsgJzogKC4qKScsIHJlYylbMF0KKworICAgICMgTGljZW5zZXMKKyAgICBsaWNlbnNlX2luZm8gPSB7fQorICAgIGxpY2Vuc2VzID0gW10KKyAgICBsaWNlbnNlcyA9IHJlLmZpbmRhbGwoJ0xpY2Vuc2VJRDouKj9MaWNlbnNlTmFtZTouKj9cbicsIGZvc3Nfb3V0cHV0LCByZS5TKQorICAgIGZvciBsaWMgaW4gbGljZW5zZXM6CisgICAgICAgIGxpY2Vuc2VfaWQgPSByZS5maW5kYWxsKCdMaWNlbnNlSUQ6ICguKilcbicsIGxpYylbMF0KKyAgICAgICAgbGljZW5zZV9pbmZvW2xpY2Vuc2VfaWRdID0ge30KKyAgICAgICAgbGljZW5zZV9pbmZvW2xpY2Vuc2VfaWRdWydFeHRyYWN0ZWRUZXh0J10gPSByZS5maW5kYWxsKCdFeHRyYWN0ZWRUZXh0OiAoLio/PC90ZXh0PiknLCBsaWMsIHJlLlMpWzBdCisgICAgICAgIGxpY2Vuc2VfaW5mb1tsaWNlbnNlX2lkXVsnTGljZW5zZU5hbWUnXSA9IHJlLmZpbmRhbGwoJ0xpY2Vuc2VOYW1lOiAoLiopJywgbGljKVswXQorCisgICAgcmV0dXJuIChwYWNrYWdlX2luZm8sIGZpbGVfaW5mbywgbGljZW5zZV9pbmZvKQorCitkZWYgY3JlYXRlX3NwZHhfZG9jKGZpbGVfaW5mbywgc2Nhbm5lZF9maWxlcyk6CisgICAgaW1wb3J0IGpzb24KKyAgICAjIyBwdXNoIGZvc3MgY2hhbmdlcyBiYWNrIGludG8gY2FjaGUKKyAgICBmb3IgY2hrc3VtLCBsaWNfaW5mbyBpbiBzY2FubmVkX2ZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBjaGtzdW0gaW4gZmlsZV9pbmZvOgorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0ZpbGVUeXBlJ10gPSBsaWNfaW5mb1snRmlsZVR5cGUnXQorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0ZpbGVDaGVja3N1bTogU0hBMSddID0gY2hrc3VtCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnTGljZW5zZUluZm9JbkZpbGUnXSA9IGxpY19pbmZvWydMaWNlbnNlSW5mb0luRmlsZSddCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnTGljZW5zZUNvbmNsdWRlZCddID0gbGljX2luZm9bJ0xpY2Vuc2VDb25jbHVkZWQnXQorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0ZpbGVDb3B5cmlnaHRUZXh0J10gPSBsaWNfaW5mb1snRmlsZUNvcHlyaWdodFRleHQnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiU1BEWDogIiArIGxpY19pbmZvWydGaWxlTmFtZSddICsgIiA6ICIgKyBjaGtzdW0KKyAgICAgICAgICAgICAgICArICIgOiBpcyBub3QgaW4gdGhlIGxvY2FsIGZpbGUgaW5mbzogIgorICAgICAgICAgICAgICAgICsganNvbi5kdW1wcyhsaWNfaW5mbywgaW5kZW50PTEpKQorICAgIHJldHVybiBmaWxlX2luZm8KKworZGVmIGdldF92ZXJfY29kZShkaXJuYW1lKToKKyAgICBjaGtzdW1zID0gW10KKyAgICBmb3IgZl9kaXIsIGYgaW4gbGlzdF9maWxlcyhkaXJuYW1lKToKKyAgICAgICAgaGFzaCA9IGhhc2hfZmlsZShvcy5wYXRoLmpvaW4oZGlybmFtZSwgZl9kaXIsIGYpKQorICAgICAgICBpZiBub3QgaGFzaCBpcyBOb25lOgorICAgICAgICAgICAgY2hrc3Vtcy5hcHBlbmQoaGFzaCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IENvdWxkIG5vdCBoYXNoIGZpbGU6ICIgKyBwYXRoKQorICAgIHZlcl9jb2RlX3N0cmluZyA9ICcnLmpvaW4oY2hrc3VtcykubG93ZXIoKQorICAgIHZlcl9jb2RlID0gaGFzaF9zdHJpbmcodmVyX2NvZGVfc3RyaW5nKQorICAgIHJldHVybiB2ZXJfY29kZQorCitkZWYgZ2V0X2hlYWRlcl9pbmZvKGluZm8sIHNwZHhfdmVyaWZpY2F0aW9uX2NvZGUsIHBhY2thZ2VfaW5mbyk6CisgICAgIiIiCisgICAgICAgIFB1dCB0b2dldGhlciB0aGUgaGVhZGVyIFNQRFggaW5mb3JtYXRpb24uCisgICAgICAgIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyB0byBiZWNvbWUgYSBsb3QgbGVzcworICAgICAgICBvZiBhIGhhcmRjb2RlZCB0aGluZy4KKyAgICAiIiIKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorICAgIGltcG9ydCBvcworICAgIGhlYWQgPSBbXQorICAgIERFRkFVTFQgPSAiTk9BU1NFUlRJT04iCisKKyAgICBwYWNrYWdlX2NoZWNrc3VtID0gaGFzaF9maWxlKGluZm9bJ3Rhcl9maWxlJ10pCisgICAgaWYgcGFja2FnZV9jaGVja3N1bSBpcyBOb25lOgorICAgICAgICBwYWNrYWdlX2NoZWNrc3VtID0gREVGQVVMVAorCisgICAgIyMgZG9jdW1lbnQgbGV2ZWwgaW5mb3JtYXRpb24KKyAgICBoZWFkLmFwcGVuZCgiIyMgU1BEWCBEb2N1bWVudCBJbmZvcm1hdGlvbiIpCisgICAgaGVhZC5hcHBlbmQoIlNQRFhWZXJzaW9uOiAiICsgaW5mb1snc3BkeF92ZXJzaW9uJ10pCisgICAgaGVhZC5hcHBlbmQoIkRhdGFMaWNlbnNlOiAiICsgaW5mb1snZGF0YV9saWNlbnNlJ10pCisgICAgaGVhZC5hcHBlbmQoIkRvY3VtZW50Q29tbWVudDogPHRleHQ+U1BEWCBmb3IgIgorICAgICAgICArIGluZm9bJ3BuJ10gKyAiIHZlcnNpb24gIiArIGluZm9bJ3B2J10gKyAiPC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisKKyAgICAjIyBDcmVhdG9yIGluZm9ybWF0aW9uCisgICAgIyMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZ2l2ZSB0aW1lIGluIFVUQy4KKyAgICBub3cgPSBkYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykKKyAgICBoZWFkLmFwcGVuZCgiIyMgQ3JlYXRpb24gSW5mb3JtYXRpb24iKQorICAgICMjIFRvb2xzIGFyZSBzdXBwb3NlZCB0byBoYXZlIGEgdmVyc2lvbiwgYnV0IEZPU1NvbG9neStTUERYIHByb3ZpZGVzIG5vbmUuCisgICAgaGVhZC5hcHBlbmQoIkNyZWF0b3I6IFRvb2w6IEZPU1NvbG9neStTUERYIikKKyAgICBoZWFkLmFwcGVuZCgiQ3JlYXRlZDogIiArIG5vdykKKyAgICBoZWFkLmFwcGVuZCgiQ3JlYXRvckNvbW1lbnQ6IDx0ZXh0PlVOTzwvdGV4dD4iKQorICAgIGhlYWQuYXBwZW5kKCIiKQorCisgICAgIyMgcGFja2FnZSBsZXZlbCBpbmZvcm1hdGlvbgorICAgIGhlYWQuYXBwZW5kKCIjIyBQYWNrYWdlIEluZm9ybWF0aW9uIikKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZU5hbWU6ICIgKyBpbmZvWydwbiddKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlVmVyc2lvbjogIiArIGluZm9bJ3B2J10pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VGaWxlTmFtZTogIiArIG9zLnBhdGguYmFzZW5hbWUoaW5mb1sndGFyX2ZpbGUnXSkpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VTdXBwbGllcjogUGVyc29uOiIgKyBERUZBVUxUKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlRG93bmxvYWRMb2NhdGlvbjogIiArIERFRkFVTFQpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VTdW1tYXJ5OiA8dGV4dD48L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZU9yaWdpbmF0b3I6IFBlcnNvbjoiICsgREVGQVVMVCkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUNoZWNrc3VtOiBTSEExOiAiICsgcGFja2FnZV9jaGVja3N1bSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVZlcmlmaWNhdGlvbkNvZGU6ICIgKyBzcGR4X3ZlcmlmaWNhdGlvbl9jb2RlKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlRGVzY3JpcHRpb246IDx0ZXh0PiIgKyBpbmZvWydwbiddCisgICAgICAgICsgIiB2ZXJzaW9uICIgKyBpbmZvWydwdiddICsgIjwvdGV4dD4iKQorICAgIGhlYWQuYXBwZW5kKCIiKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlQ29weXJpZ2h0VGV4dDogIgorICAgICAgICArIHBhY2thZ2VfaW5mb1snUGFja2FnZUNvcHlyaWdodFRleHQnXSkKKyAgICBoZWFkLmFwcGVuZCgiIikKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUxpY2Vuc2VEZWNsYXJlZDogIgorICAgICAgICArIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VEZWNsYXJlZCddKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTGljZW5zZUNvbmNsdWRlZDogIgorICAgICAgICArIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQnXSkKKworICAgIGZvciBsaWNyZWYgaW4gcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXMnXToKKyAgICAgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlczogIiArIGxpY3JlZikKKyAgICBoZWFkLmFwcGVuZCgiIikKKyAgICAKKyAgICAjIyBoZWFkZXIgZm9yIGZpbGUgbGV2ZWwKKyAgICBoZWFkLmFwcGVuZCgiIyMgRmlsZSBJbmZvcm1hdGlvbiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisKKyAgICByZXR1cm4gJ1xuJy5qb2luKGhlYWQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zc3RhdGUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YWQ2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zc3RhdGUuYmJjbGFzcwpAQCAtMCwwICsxLDk1MSBAQAorU1NUQVRFX1ZFUlNJT04gPSAiMyIKKworU1NUQVRFX01BTklGRVNUUyA/PSAiJHtUTVBESVJ9L3NzdGF0ZS1jb250cm9sIgorU1NUQVRFX01BTkZJTEVQUkVGSVggPSAiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke1NTVEFURV9NQU5NQUNIfS0ke1BOfSIKKworZGVmIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIGhhc2gsIGQpOgorICAgIGlmIG5vdCBoYXNoOgorICAgICAgICBoYXNoID0gIklOVkFMSUQiCisgICAgcmV0dXJuIGhhc2hbOjJdICsgIi8iICsgc3BlYyArIGhhc2gKKworU1NUQVRFX1BLR0FSQ0ggICAgPSAiJHtQQUNLQUdFX0FSQ0h9IgorU1NUQVRFX1BLR1NQRUMgICAgPSAic3N0YXRlOiR7UE59OiR7UEFDS0FHRV9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9OiR7UFZ9OiR7UFJ9OiR7U1NUQVRFX1BLR0FSQ0h9OiR7U1NUQVRFX1ZFUlNJT059OiIKK1NTVEFURV9TV1NQRUMgICAgID0gInNzdGF0ZToke0JQTn06OiR7UFZ9OiR7UFJ9Ojoke1NTVEFURV9WRVJTSU9OfToiCitTU1RBVEVfUEtHTkFNRSAgICA9ICIke1NTVEFURV9FWFRSQVBBVEh9JHtAZ2VuZXJhdGVfc3N0YXRlZm4oZC5nZXRWYXIoJ1NTVEFURV9QS0dTUEVDJywgVHJ1ZSksIGQuZ2V0VmFyKCdCQl9UQVNLSEFTSCcsIFRydWUpLCBkKX0iCitTU1RBVEVfUEtHICAgICAgICA9ICIke1NTVEFURV9ESVJ9LyR7U1NUQVRFX1BLR05BTUV9IgorU1NUQVRFX0VYVFJBUEFUSCAgID0gIiIKK1NTVEFURV9FWFRSQVBBVEhXSUxEQ0FSRCA9ICIiCitTU1RBVEVfUEFUSFNQRUMgICA9ICIke1NTVEFURV9ESVJ9LyR7U1NUQVRFX0VYVFJBUEFUSFdJTERDQVJEfSovJHtTU1RBVEVfUEtHU1BFQ30iCisKKyMgV2UgZG9uJ3Qgd2FudCB0aGUgc3N0YXRlIHRvIGRlcGVuZCBvbiB0aGluZ3MgbGlrZSB0aGUgZGlzdHJvIHN0cmluZworIyBvZiB0aGUgc3lzdGVtLCB3ZSBsZXQgdGhlIHNzdGF0ZSBwYXRocyB0YWtlIGNhcmUgb2YgdGhpcy4KK1NTVEFURV9FWFRSQVBBVEhbdmFyZGVwdmFsdWVdID0gIiIKKworIyBGb3IgbXVsdGlsaWIgcnBtIHRoZSBhbGxhcmNoIHBhY2thZ2Vncm91cCBmaWxlcyBjYW4gb3ZlcndyaXRlIChpbiB0aGVvcnkgdGhleSdyZSBpZGVudGljYWwpCitTU1RBVEVfRFVQV0hJVEVMSVNUID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vICR7REVQTE9ZX0RJUn0vbGljZW5zZXMvICR7REVQTE9ZX0RJUl9SUE19L2FsbC8iCisjIEF2b2lkIGRvY2Jvb2svc2dtbCBjYXRhbG9nIHdhcm5pbmdzIGZvciBub3cKK1NTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9zZ21sICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vc2dtbCIKKyMgQXJjaGl2ZSB0aGUgc291cmNlcyBmb3IgbWFueSBhcmNoaXRlY3R1cmVzIGluIG9uZSBkZXBsb3kgZm9sZGVyCitTU1RBVEVfRFVQV0hJVEVMSVNUICs9ICIke0RFUExPWV9ESVJfU1JDfSIKKworU1NUQVRFX1NDQU5fRklMRVMgPz0gIioubGEgKi1jb25maWcgKl9jb25maWciCitTU1RBVEVfU0NBTl9DTUQgPz0gJ2ZpbmQgJHtTU1RBVEVfQlVJTERESVJ9IFwoIC1uYW1lICIke0AiXCIgLW8gLW5hbWUgXCIiLmpvaW4oZC5nZXRWYXIoIlNTVEFURV9TQ0FOX0ZJTEVTIiwgVHJ1ZSkuc3BsaXQoKSl9IiBcKSAtdHlwZSBmJworCitCQl9IQVNIRklMRU5BTUUgPSAiJHtTU1RBVEVfRVhUUkFQQVRIfSAke1NTVEFURV9QS0dTUEVDfSAke1NTVEFURV9TV1NQRUN9IgorCitTU1RBVEVfQVJDSFMgPSAiIFwKKyAgICAke0JVSUxEX0FSQ0h9IFwKKyAgICAke0JVSUxEX0FSQ0h9XyR7U0RLX0FSQ0h9XyR7U0RLX09TfSBcCisgICAgJHtCVUlMRF9BUkNIfV8ke1RBUkdFVF9BUkNIfSBcCisgICAgJHtTREtfQVJDSH1fJHtTREtfT1N9IFwKKyAgICAke1NES19BUkNIfV8ke1BBQ0tBR0VfQVJDSH0gXAorICAgIGFsbGFyY2ggXAorICAgICR7UEFDS0FHRV9BUkNIfSBcCisgICAgJHtNQUNISU5FfSIKKworU1NUQVRFX01BTk1BQ0ggPz0gIiR7U1NUQVRFX1BLR0FSQ0h9IgorCitTU1RBVEVDUkVBVEVGVU5DUyA9ICJzc3RhdGVfaGFyZGNvZGVfcGF0aCIKK1NTVEFURVBPU1RDUkVBVEVGVU5DUyA9ICIiCitTU1RBVEVQUkVJTlNURlVOQ1MgPSAiIgorU1NUQVRFUE9TVFVOUEFDS0ZVTkNTID0gInNzdGF0ZV9oYXJkY29kZV9wYXRoX3VucGFjayIKK1NTVEFURVBPU1RJTlNURlVOQ1MgPSAiIgorRVhUUkFfU1RBR0lOR19GSVhNRVMgPz0gIiIKKworU0lHR0VOX0xPQ0tFRFNJR1NfQ0hFQ0tfTEVWRUwgPz0gJ2Vycm9yJworCisjIFRoZSBHbnVQRyBrZXkgSUQgYW5kIHBhc3NwaHJhc2UgdG8gdXNlIHRvIHNpZ24gc3N0YXRlIGFyY2hpdmVzIChvciB1bnNldCB0bworIyBub3Qgc2lnbikKK1NTVEFURV9TSUdfS0VZID89ICIiCitTU1RBVEVfU0lHX1BBU1NQSFJBU0UgPz0gIiIKKyMgV2hldGhlciB0byB2ZXJpZnkgdGhlIEduVVBHIHNpZ25hdHVyZXMgd2hlbiBleHRyYWN0aW5nIHNzdGF0ZSBhcmNoaXZlcworU1NUQVRFX1ZFUklGWV9TSUcgPz0gIjAiCisKKyMgU3BlY2lmeSBkaXJzIGluIHdoaWNoIHRoZSBzaGVsbCBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgZG9uJ3QgdXNlICR7Qn0KKyMgYXMgZGVmYXVsdCBkaXJzIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgYWJvdXQgJHtCfSB3aXRoIG90aGVyIHRhc2suCitzc3RhdGVfY3JlYXRlX3BhY2thZ2VbZGlyc10gPSAiJHtTU1RBVEVfQlVJTERESVJ9Igorc3N0YXRlX3VucGFja19wYWNrYWdlW2RpcnNdID0gIiR7U1NUQVRFX0lOU1RESVJ9IgorCisjIERvIG5vdCBydW4gc3N0YXRlX2hhcmRjb2RlX3BhdGgoKSBpbiAke0J9OgorIyB0aGUgJHtCfSBtYXliZSByZW1vdmVkIGJ5IGNtYWtlX2RvX2NvbmZpZ3VyZSgpIHdoaWxlCisjIHNzdGF0ZV9oYXJkY29kZV9wYXRoKCkgcnVubmluZy4KK3NzdGF0ZV9oYXJkY29kZV9wYXRoW2RpcnNdID0gIiR7U1NUQVRFX0JVSUxERElSfSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5nZXRWYXIoJ0JVSUxEX0FSQ0gnLCBGYWxzZSkpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtCVUlMRF9BUkNIfV8ke1NES19BUkNIfV8ke1NES19PU30iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke0JVSUxEX0FSQ0h9XyR7VEFSR0VUX0FSQ0h9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5leHBhbmQoIiR7U0RLX0FSQ0h9XyR7U0RLX09TfSIpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5leHBhbmQoIiR7U0RLX0FSQ0h9XyR7UEFDS0FHRV9BUkNIfSIpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGQpIGFuZCBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgVHJ1ZSkgPT0gImFsbCI6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsICJhbGxhcmNoIikKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX01BTk1BQ0gnLCBkLmV4cGFuZCgiJHtQQUNLQUdFX0FSQ0h9IikpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfRVhUUkFQQVRIJywgIiR7TkFUSVZFTFNCU1RSSU5HfS8iKQorICAgICAgICBkLnNldFZhcignU1NUQVRFX0VYVFJBUEFUSFdJTERDQVJEJywgIiovIikKKworICAgICMgVGhlc2UgY2xhc3NlcyBlbmNvZGUgc3RhZ2luZyBwYXRocyBpbnRvIHRoZWlyIHNjcmlwdHMgZGF0YSBzbyBjYW4gb25seSBiZQorICAgICMgcmV1c2VkIGlmIHdlIG1hbmlwdWxhdGUgdGhlIHBhdGhzCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpOgorICAgICAgICBzY2FuX2NtZCA9ICJncmVwIC1JcmwgJHtTVEFHSU5HX0RJUn0gJHtTU1RBVEVfQlVJTERESVJ9IgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1NDQU5fQ01EJywgc2Nhbl9jbWQpCisKKyAgICB1bmlxdWVfdGFza3MgPSBzZXQoKGQuZ2V0VmFyKCdTU1RBVEVUQVNLUycsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgIGQuc2V0VmFyKCdTU1RBVEVUQVNLUycsICIgIi5qb2luKHVuaXF1ZV90YXNrcykpCisgICAgZm9yIHRhc2sgaW4gdW5pcXVlX3Rhc2tzOgorICAgICAgICBkLnByZXBlbmRWYXJGbGFnKHRhc2ssICdwcmVmdW5jcycsICJzc3RhdGVfdGFza19wcmVmdW5jICIpCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZyh0YXNrLCAncG9zdGZ1bmNzJywgIiBzc3RhdGVfdGFza19wb3N0ZnVuYyIpCit9CisKK2RlZiBzc3RhdGVfaW5pdCh0YXNrLCBkKToKKyAgICBzcyA9IHt9CisgICAgc3NbJ3Rhc2snXSA9IHRhc2sKKyAgICBzc1snZGlycyddID0gW10KKyAgICBzc1sncGxhaW5kaXJzJ10gPSBbXQorICAgIHNzWydsb2NrZmlsZXMnXSA9IFtdCisgICAgc3NbJ2xvY2tmaWxlcy1zaGFyZWQnXSA9IFtdCisgICAgcmV0dXJuIHNzCisKK2RlZiBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCwgdGFzayA9IE5vbmUpOgorICAgIGlmIHRhc2sgaXMgTm9uZToKKyAgICAgICAgdGFzayA9IGQuZ2V0VmFyKCdCQl9DVVJSRU5UVEFTSycsIFRydWUpCisgICAgICAgIGlmIG5vdCB0YXNrOgorICAgICAgICAgICAgYmIuZmF0YWwoInNzdGF0ZSBjb2RlIHJ1bm5pbmcgd2l0aG91dCB0YXNrIGNvbnRleHQ/ISIpCisgICAgICAgIHRhc2sgPSB0YXNrLnJlcGxhY2UoIl9zZXRzY2VuZSIsICIiKQorCisgICAgaWYgdGFzay5zdGFydHN3aXRoKCJkb18iKToKKyAgICAgICAgdGFzayA9IHRhc2tbMzpdCisgICAgaW5wdXRzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtaW5wdXRkaXJzJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBvdXRwdXRzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtb3V0cHV0ZGlycycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgcGxhaW5kaXJzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtcGxhaW5kaXJzJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBsb2NrZmlsZXMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1sb2NrZmlsZScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbG9ja2ZpbGVzc2hhcmVkID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpbnRlcmNlcHRmdW5jcyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWludGVyY2VwdGZ1bmNzJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBub3QgdGFzayBvciBsZW4oaW5wdXRzKSAhPSBsZW4ob3V0cHV0cyk6CisgICAgICAgIGJiLmZhdGFsKCJzc3RhdGUgdmFyaWFibGVzIG5vdCBzZXR1cCBjb3JyZWN0bHk/ISIpCisKKyAgICBpZiB0YXNrID09ICJwb3B1bGF0ZV9saWMiOgorICAgICAgICBkLnNldFZhcigiU1NUQVRFX1BLR1NQRUMiLCAiJHtTU1RBVEVfU1dTUEVDfSIpCisgICAgICAgIGQuc2V0VmFyKCJTU1RBVEVfRVhUUkFQQVRIIiwgIiIpCisKKyAgICBzcyA9IHNzdGF0ZV9pbml0KHRhc2ssIGQpCisgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGlucHV0cykpOgorICAgICAgICBzc3RhdGVfYWRkKHNzLCBpbnB1dHNbaV0sIG91dHB1dHNbaV0sIGQpCisgICAgc3NbJ2xvY2tmaWxlcyddID0gbG9ja2ZpbGVzCisgICAgc3NbJ2xvY2tmaWxlcy1zaGFyZWQnXSA9IGxvY2tmaWxlc3NoYXJlZAorICAgIHNzWydwbGFpbmRpcnMnXSA9IHBsYWluZGlycworICAgIHNzWydpbnRlcmNlcHRmdW5jcyddID0gaW50ZXJjZXB0ZnVuY3MKKyAgICByZXR1cm4gc3MKKworZGVmIHNzdGF0ZV9hZGQoc3MsIHNvdXJjZSwgZGVzdCwgZCk6CisgICAgaWYgbm90IHNvdXJjZS5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgc291cmNlID0gc291cmNlICsgIi8iCisgICAgaWYgbm90IGRlc3QuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgIGRlc3QgPSBkZXN0ICsgIi8iCisgICAgc291cmNlID0gb3MucGF0aC5ub3JtcGF0aChzb3VyY2UpCisgICAgZGVzdCA9IG9zLnBhdGgubm9ybXBhdGgoZGVzdCkKKyAgICBzcmNiYXNlID0gb3MucGF0aC5iYXNlbmFtZShzb3VyY2UpCisgICAgc3NbJ2RpcnMnXS5hcHBlbmQoW3NyY2Jhc2UsIHNvdXJjZSwgZGVzdF0pCisgICAgcmV0dXJuIHNzCisKK2RlZiBzc3RhdGVfaW5zdGFsbChzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKyAgICBpbXBvcnQgb2Uuc3N0YXRlc2lnCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHNoYXJlZGZpbGVzID0gW10KKyAgICBzaGFyZWRkaXJzID0gW10KKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30iKSkKKworICAgIG1hbmlmZXN0LCBkMiA9IG9lLnNzdGF0ZXNpZy5zc3RhdGVfZ2V0X21hbmlmZXN0X2ZpbGVuYW1lKHNzWyd0YXNrJ10sIGQpCisKKyAgICBpZiBvcy5hY2Nlc3MobWFuaWZlc3QsIG9zLlJfT0spOgorICAgICAgICBiYi5mYXRhbCgiUGFja2FnZSBhbHJlYWR5IHN0YWdlZCAoJXMpPyEiICUgbWFuaWZlc3QpCisKKyAgICBsb2NrcyA9IFtdCisgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcy1zaGFyZWQnXToKKyAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2ssIFRydWUpKQorICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMnXToKKyAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2spKQorCisgICAgZm9yIHN0YXRlIGluIHNzWydkaXJzJ106CisgICAgICAgIGJiLmRlYnVnKDIsICJTdGFnaW5nIGZpbGVzIGZyb20gJXMgdG8gJXMiICUgKHN0YXRlWzFdLCBzdGF0ZVsyXSkpCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzdGF0ZVsxXSk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRoLnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQorICAgICAgICAgICAgICAgICNiYi5kZWJ1ZygyLCAiU3RhZ2luZyAlcyB0byAlcyIgJSAoc3JjcGF0aCwgZHN0cGF0aCkpCisgICAgICAgICAgICAgICAgc2hhcmVkZmlsZXMuYXBwZW5kKGRzdHBhdGgpCisgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBkaXIpCisgICAgICAgICAgICAgICAgZHN0ZGlyID0gc3JjZGlyLnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQorICAgICAgICAgICAgICAgICNiYi5kZWJ1ZygyLCAiU3RhZ2luZyAlcyB0byAlcyIgJSAoc3JjZGlyLCBkc3RkaXIpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkc3RkaXIuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgZHN0ZGlyID0gZHN0ZGlyICsgIi8iCisgICAgICAgICAgICAgICAgc2hhcmVkZGlycy5hcHBlbmQoZHN0ZGlyKQorCisgICAgIyBDaGVjayB0aGUgZmlsZSBsaXN0IGZvciBjb25mbGljdHMgYWdhaW5zdCBmaWxlcyB3aGljaCBhbHJlYWR5IGV4aXN0CisgICAgd2hpdGVsaXN0ID0gKGQuZ2V0VmFyKCJTU1RBVEVfRFVQV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtYXRjaCA9IFtdCisgICAgZm9yIGYgaW4gc2hhcmVkZmlsZXM6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgZiA9IG9zLnBhdGgubm9ybXBhdGgoZikKKyAgICAgICAgICAgIHJlYWxtYXRjaCA9IFRydWUKKyAgICAgICAgICAgIGZvciB3IGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmLnN0YXJ0c3dpdGgodyk6CisgICAgICAgICAgICAgICAgICAgIHJlYWxtYXRjaCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiByZWFsbWF0Y2g6CisgICAgICAgICAgICAgICAgbWF0Y2guYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgc3N0YXRlX3NlYXJjaF9jbWQgPSAiZ3JlcCAtcmwgJyVzJyAlcyAtLWV4Y2x1ZGU9bWFzdGVyLmxpc3QgfCBzZWQgLWUgJ3M6Xi4qLzo6JyAtZSAnczpcLnBvcHVsYXRlLXN5c3Jvb3Q6OiciICUgKGYsIGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9IikpCisgICAgICAgICAgICAgICAgc2VhcmNoX291dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oc3N0YXRlX3NlYXJjaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgICAgICBpZiBzZWFyY2hfb3V0cHV0ICE9ICIiOgorICAgICAgICAgICAgICAgICAgICBtYXRjaC5hcHBlbmQoIk1hdGNoZWQgaW4gJXMiICUgc2VhcmNoX291dHB1dC5yc3RyaXAoKSkKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgYmIuZXJyb3IoIlRoZSByZWNpcGUgJXMgaXMgdHJ5aW5nIHRvIGluc3RhbGwgZmlsZXMgaW50byBhIHNoYXJlZCAiIFwKKyAgICAgICAgICAiYXJlYSB3aGVuIHRob3NlIGZpbGVzIGFscmVhZHkgZXhpc3QuIFRob3NlIGZpbGVzIGFuZCB0aGVpciBtYW5pZmVzdCAiIFwKKyAgICAgICAgICAibG9jYXRpb24gYXJlOlxuICAgJXNcblBsZWFzZSB2ZXJpZnkgd2hpY2ggcmVjaXBlIHNob3VsZCBwcm92aWRlIHRoZSAiIFwKKyAgICAgICAgICAiYWJvdmUgZmlsZXMuXG5UaGUgYnVpbGQgaGFzIHN0b3BwZWQgYXMgY29udGludWluZyBpbiB0aGlzIHNjZW5hcmlvIFdJTEwgIiBcCisgICAgICAgICAgImJyZWFrIHRoaW5ncywgaWYgbm90IG5vdywgcG9zc2libHkgaW4gdGhlIGZ1dHVyZSAod2UndmUgc2VlbiBidWlsZHMgZmFpbCAiIFwKKyAgICAgICAgICAic2V2ZXJhbCBtb250aHMgbGF0ZXIpLiBJZiB0aGUgc3lzdGVtIGtuZXcgaG93IHRvIHJlY292ZXIgZnJvbSB0aGlzICIgXAorICAgICAgICAgICJhdXRvbWF0aWNhbGx5IGl0IHdvdWxkIGhvd2V2ZXIgdGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHNjZW5hcmlvcyAiIFwKKyAgICAgICAgICAid2hpY2ggY2FuIHJlc3VsdCBpbiB0aGlzIGFuZCB3ZSBkb24ndCBrbm93IHdoaWNoIG9uZSB0aGlzIGlzLiBJdCBtYXkgYmUgIiBcCisgICAgICAgICAgInlvdSBoYXZlIHN3aXRjaGVkIHByb3ZpZGVycyBvZiBzb21ldGhpbmcgbGlrZSB2aXJ0dWFsL2tlcm5lbCAoZS5nLiBmcm9tICIgXAorICAgICAgICAgICJsaW51eC15b2N0byB0byBsaW51eC15b2N0by1kZXYpLCBpbiB0aGF0IGNhc2UgeW91IG5lZWQgdG8gZXhlY3V0ZSB0aGUgIiBcCisgICAgICAgICAgImNsZWFuIHRhc2sgZm9yIGJvdGggcmVjaXBlcyBhbmQgaXQgd2lsbCByZXNvbHZlIHRoaXMgZXJyb3IuIEl0IG1heSBiZSAiIFwKKyAgICAgICAgICAieW91IGNoYW5nZWQgRElTVFJPX0ZFQVRVUkVTIGZyb20gc3lzdGVtZCB0byB1ZGV2IG9yIHZpY2UgdmVyc2EuIENsZWFuaW5nICIgXAorICAgICAgICAgICJ0aG9zZSByZWNpcGVzIHNob3VsZCBhZ2FpbiByZXNvbHZlIHRoaXMgZXJyb3IgaG93ZXZlciBzd2l0Y2hpbmcgIiBcCisgICAgICAgICAgIkRJU1RST19GRUFUVVJFUyBvbiBhbiBleGlzdGluZyBidWlsZCBkaXJlY3RvcnkgaXMgbm90IHN1cHBvcnRlZCwgeW91ICIgXAorICAgICAgICAgICJzaG91bGQgcmVhbGx5IGNsZWFuIG91dCB0bXAgYW5kIHJlYnVpbGQgKHJldXNpbmcgc3N0YXRlIHNob3VsZCBiZSBzYWZlKS4gIiBcCisgICAgICAgICAgIkl0IGNvdWxkIGJlIHRoZSBvdmVybGFwcGluZyBmaWxlcyBkZXRlY3RlZCBhcmUgaGFybWxlc3MgaW4gd2hpY2ggY2FzZSAiIFwKKyAgICAgICAgICAiYWRkaW5nIHRoZW0gdG8gU1NUQVRFX0RVUFdISVRFTElTVCBtYXkgYmUgdGhlIGNvcnJlY3Qgc29sdXRpb24uIEl0IGNvdWxkICIgXAorICAgICAgICAgICJhbHNvIGJlIHlvdXIgYnVpbGQgaXMgaW5jbHVkaW5nIHR3byBkaWZmZXJlbnQgY29uZmxpY3RpbmcgdmVyc2lvbnMgb2YgIiBcCisgICAgICAgICAgInRoaW5ncyAoZS5nLiBibHVleiA0IGFuZCBibHVleiA1IGFuZCB0aGUgY29ycmVjdCBzb2x1dGlvbiBmb3IgdGhhdCB3b3VsZCAiIFwKKyAgICAgICAgICAiYmUgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QuIElmIGluIGRvdWJ0LCBwbGVhc2UgYXNrIG9uIHRoZSBtYWlsaW5nIGxpc3QsICIgXAorICAgICAgICAgICJzaGFyaW5nIHRoZSBlcnJvciBhbmQgZmlsZWxpc3QgYWJvdmUuIiAlIFwKKyAgICAgICAgICAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksICJcbiAiLmpvaW4obWF0Y2gpKSkKKyAgICAgICAgYmIuZmF0YWwoIklmIHRoZSBhYm92ZSBtZXNzYWdlIGlzIHRvbyBtdWNoLCB0aGUgc2ltcGxlciB2ZXJzaW9uIGlzIHlvdSdyZSBhZHZpc2VkIHRvIHdpcGUgb3V0IHRtcCBhbmQgcmVidWlsZCAocmV1c2luZyBzc3RhdGUgaXMgZmluZSkuIFRoYXQgd2lsbCBsaWtlbHkgZml4IHRoaW5ncyBpbiBtb3N0IChidXQgbm90IGFsbCkgY2FzZXMuIikKKworICAgICMgV3JpdGUgb3V0IHRoZSBtYW5pZmVzdAorICAgIGYgPSBvcGVuKG1hbmlmZXN0LCAidyIpCisgICAgZm9yIGZpbGUgaW4gc2hhcmVkZmlsZXM6CisgICAgICAgIGYud3JpdGUoZmlsZSArICJcbiIpCisKKyAgICAjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgZGlyZWN0b3JpZXMgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIG1hbmlmZXN0CisgICAgIyBzbyB0aGF0IHdoZW4gd2UgdGVzdCB0byBzZWUgaWYgdGhleSBzaG91bGQgYmUgZGVsZXRlZCBhbnkgY29udGVudHMKKyAgICAjIGFkZGVkIGJ5IHRoZSB0YXNrIHdpbGwgaGF2ZSBiZWVuIHJlbW92ZWQgZmlyc3QuCisgICAgZGlycyA9IHNvcnRlZChzaGFyZWRkaXJzLCBrZXk9bGVuKQorICAgICMgTXVzdCByZW1vdmUgY2hpbGRyZW4gZmlyc3QsIHdoaWNoIHdpbGwgaGF2ZSBhIGxvbmdlciBwYXRoIHRoYW4gdGhlIHBhcmVudAorICAgIGZvciBkaSBpbiByZXZlcnNlZChkaXJzKToKKyAgICAgICAgZi53cml0ZShkaSArICJcbiIpCisgICAgZi5jbG9zZSgpCisKKyAgICAjIEFwcGVuZCB0byB0aGUgbGlzdCBvZiBtYW5pZmVzdHMgZm9yIHRoaXMgUEFDS0FHRV9BUkNICisKKyAgICBpID0gZDIuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9L2luZGV4LSR7U1NUQVRFX01BTk1BQ0h9IikKKyAgICBsID0gYmIudXRpbHMubG9ja2ZpbGUoaSArICIubG9jayIpCisgICAgZmlsZWRhdGEgPSBkLmdldFZhcigiU1RBTVAiLCBUcnVlKSArICIgIiArIGQyLmdldFZhcigiU1NUQVRFX01BTkZJTEVQUkVGSVgiLCBUcnVlKSArICIgIiArIGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSkgKyAiXG4iCisgICAgbWFuaWZlc3RzID0gW10KKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhpKToKKyAgICAgICAgd2l0aCBvcGVuKGksICJyIikgYXMgZjoKKyAgICAgICAgICAgIG1hbmlmZXN0cyA9IGYucmVhZGxpbmVzKCkKKyAgICBpZiBmaWxlZGF0YSBub3QgaW4gbWFuaWZlc3RzOgorICAgICAgICB3aXRoIG9wZW4oaSwgImErIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZmlsZWRhdGEpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsKQorCisgICAgIyBSdW4gdGhlIGFjdHVhbCBmaWxlIGluc3RhbGwKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdGVbMV0pOgorICAgICAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKworICAgIGZvciBwb3N0aW5zdCBpbiAoZC5nZXRWYXIoJ1NTVEFURVBPU1RJTlNURlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKHBvc3RpbnN0LCBkKQorCisgICAgZm9yIGxvY2sgaW4gbG9ja3M6CisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworc3N0YXRlX2luc3RhbGxbdmFyZGVwc2V4Y2x1ZGVdICs9ICJTU1RBVEVfRFVQV0hJVEVMSVNUIFNUQVRFX01BTk1BQ0ggU1NUQVRFX01BTkZJTEVQUkVGSVgiCitzc3RhdGVfaW5zdGFsbFt2YXJkZXBzXSArPSAiJHtTU1RBVEVQT1NUSU5TVEZVTkNTfSIKKworZGVmIHNzdGF0ZV9pbnN0YWxscGtnKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBkZWYgcHJlcGRpcihkaXIpOgorICAgICAgICAjIHJlbW92ZSBkaXIgaWYgaXQgZXhpc3RzLCBlbnN1cmUgYW55IHBhcmVudCBkaXJlY3RvcmllcyBkbyBleGlzdAorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGlyKQorICAgICAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisKKyAgICBzc3RhdGVpbnN0ID0gZC5leHBhbmQoIiR7V09SS0RJUn0vc3N0YXRlLWluc3RhbGwtJXMvIiAlIHNzWyd0YXNrJ10pCisgICAgc3N0YXRlZmV0Y2ggPSBkLmdldFZhcignU1NUQVRFX1BLR05BTUUnLCBUcnVlKSArICdfJyArIHNzWyd0YXNrJ10gKyAiLnRneiIKKyAgICBzc3RhdGVwa2cgPSBkLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpICsgJ18nICsgc3NbJ3Rhc2snXSArICIudGd6IgorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNzdGF0ZXBrZyk6CisgICAgICAgIHBzdGFnaW5nX2ZldGNoKHNzdGF0ZWZldGNoLCBzc3RhdGVwa2csIGQpCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3N0YXRlcGtnKToKKyAgICAgICAgYmIubm90ZSgiU3RhZ2luZyBwYWNrYWdlICVzIGRvZXMgbm90IGV4aXN0IiAlIHNzdGF0ZXBrZykKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBzc3RhdGVfY2xlYW4oc3MsIGQpCisKKyAgICBkLnNldFZhcignU1NUQVRFX0lOU1RESVInLCBzc3RhdGVpbnN0KQorICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHJywgc3N0YXRlcGtnKQorCisgICAgaWYgYmIudXRpbHMudG9fYm9vbGVhbihkLmdldFZhcigiU1NUQVRFX1ZFUklGWV9TSUciLCBUcnVlKSwgRmFsc2UpOgorICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoWyJncGciLCAiLS12ZXJpZnkiLCBzc3RhdGVwa2cgKyAiLnNpZyIsIHNzdGF0ZXBrZ10pICE9IDA6CisgICAgICAgICAgICBiYi53YXJuKCJDYW5ub3QgdmVyaWZ5IHNpZ25hdHVyZSBvbiBzc3RhdGUgcGFja2FnZSAlcyIgJSBzc3RhdGVwa2cpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1NTVEFURVBSRUlOU1RGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpICsgWydzc3RhdGVfdW5wYWNrX3BhY2thZ2UnXSArIChkLmdldFZhcignU1NUQVRFUE9TVFVOUEFDS0ZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorCisgICAgZm9yIHN0YXRlIGluIHNzWydkaXJzJ106CisgICAgICAgIHByZXBkaXIoc3RhdGVbMV0pCisgICAgICAgIG9zLnJlbmFtZShzc3RhdGVpbnN0ICsgc3RhdGVbMF0sIHN0YXRlWzFdKQorICAgIHNzdGF0ZV9pbnN0YWxsKHNzLCBkKQorCisgICAgZm9yIHBsYWluIGluIHNzWydwbGFpbmRpcnMnXToKKyAgICAgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgICAgc3JjID0gc3N0YXRlaW5zdCArICIvIiArIHBsYWluLnJlcGxhY2Uod29ya2RpciwgJycpCisgICAgICAgIGRlc3QgPSBwbGFpbgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3JjKQorICAgICAgICBwcmVwZGlyKGRlc3QpCisgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3QpCisKKyAgICByZXR1cm4gVHJ1ZQorCitweXRob24gc3N0YXRlX2hhcmRjb2RlX3BhdGhfdW5wYWNrICgpIHsKKyAgICAjIEZpeHVwIGhhcmRjb2RlZCBwYXRocworICAgICMKKyAgICAjIE5vdGU6IFRoZSBsb2dpYyBiZWxvdyBtdXN0IG1hdGNoIHRoZSByZXZlcnNlIGxvZ2ljIGluCisgICAgIyBzc3RhdGVfaGFyZGNvZGVfcGF0aChkKQorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBzc3RhdGVpbnN0ID0gZC5nZXRWYXIoJ1NTVEFURV9JTlNURElSJywgVHJ1ZSkKKyAgICBmaXhtZWZuID0gIHNzdGF0ZWluc3QgKyAiZml4bWVwYXRoIgorICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpeG1lZm4pOgorICAgICAgICBzdGFnaW5nID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSJywgVHJ1ZSkKKyAgICAgICAgc3RhZ2luZ190YXJnZXQgPSBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSkKKyAgICAgICAgc3RhZ2luZ19ob3N0ID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX0hPU1QnLCBUcnVlKQorCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczpGSVhNRVNUQUdJTkdESVI6JXM6ZyciICUgKHN0YWdpbmcpCisgICAgICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczpGSVhNRVNUQUdJTkdESVJUQVJHRVQ6JXM6ZzsgczpGSVhNRVNUQUdJTkdESVI6JXM6ZyciICUgKHN0YWdpbmdfdGFyZ2V0LCBzdGFnaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUkhPU1Q6JXM6ZyciICUgKHN0YWdpbmdfaG9zdCkKKworICAgICAgICBleHRyYV9zdGFnaW5nX2ZpeG1lcyA9IGQuZ2V0VmFyKCdFWFRSQV9TVEFHSU5HX0ZJWE1FUycsIFRydWUpIG9yICcnCisgICAgICAgIGZvciBmaXhtZXZhciBpbiBleHRyYV9zdGFnaW5nX2ZpeG1lcy5zcGxpdCgpOgorICAgICAgICAgICAgZml4bWVfcGF0aCA9IGQuZ2V0VmFyKGZpeG1ldmFyLCBUcnVlKQorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgKz0gIiAtZSAnczpGSVhNRV8lczolczpnJyIgJSAoZml4bWV2YXIsIGZpeG1lX3BhdGgpCisKKyAgICAgICAgIyBBZGQgc3N0YXRlaW5zdCB0byBlYWNoIGZpbGVuYW1lIGluIGZpeG1lcGF0aCwgdXNlIHhhcmdzIHRvIGVmZmljaWVudGx5IGNhbGwgc2VkCisgICAgICAgIHNzdGF0ZV9oYXJkY29kZV9jbWQgPSAic2VkIC1lICdzOl46JXM6ZycgJXMgfCB4YXJncyAlcyIgJSAoc3N0YXRlaW5zdCwgZml4bWVmbiwgc3N0YXRlX3NlZF9jbWQpCisKKyAgICAgICAgYmIubm90ZSgiUmVwbGFjaW5nIGZpeG1lIHBhdGhzIGluIHNzdGF0ZSBwYWNrYWdlOiAlcyIgJSAoc3N0YXRlX2hhcmRjb2RlX2NtZCkpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzc3RhdGVfaGFyZGNvZGVfY21kLCBzaGVsbD1UcnVlKQorCisgICAgICAgICMgTmVlZCB0byByZW1vdmUgdGhpcyBvciB3ZSdkIGNvcHkgaXQgaW50byB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgbWF5IAorICAgICAgICAjIGNvbmZsaWN0IHdpdGggYW5vdGhlciB3cml0ZXIKKyAgICAgICAgb3MucmVtb3ZlKGZpeG1lZm4pCit9CisKK2RlZiBzc3RhdGVfY2xlYW5fY2FjaGVmaWxlKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgc3N0YXRlcGtnZmlsZSA9IGQuZ2V0VmFyKCdTU1RBVEVfUEFUSFNQRUMnLCBUcnVlKSArICIqXyIgKyBzc1sndGFzayddICsgIi50Z3oqIgorICAgIGJiLm5vdGUoIlJlbW92aW5nICVzIiAlIHNzdGF0ZXBrZ2ZpbGUpCisgICAgb2UucGF0aC5yZW1vdmUoc3N0YXRlcGtnZmlsZSkKKworZGVmIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGVzKGQpOgorICAgIGZvciB0YXNrIGluIChkLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgbGQgPSBkLmNyZWF0ZUNvcHkoKQorICAgICAgICBzcyA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhsZCwgdGFzaykKKyAgICAgICAgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZShzcywgbGQpCisKK2RlZiBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobWFuaWZlc3QsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisKKyAgICBtZmlsZSA9IG9wZW4obWFuaWZlc3QpCisgICAgZW50cmllcyA9IG1maWxlLnJlYWRsaW5lcygpCisgICAgbWZpbGUuY2xvc2UoKQorCisgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6CisgICAgICAgIGVudHJ5ID0gZW50cnkuc3RyaXAoKQorICAgICAgICBiYi5kZWJ1ZygyLCAiUmVtb3ZpbmcgbWFuaWZlc3Q6ICVzIiAlIGVudHJ5KQorICAgICAgICAjIFdlIGNhbiByYWNlIGFnYWluc3QgYW5vdGhlciBwYWNrYWdlIHBvcHVsYXRpbmcgZGlyZWN0b3JpZXMgYXMgd2UncmUgcmVtb3ZpbmcgdGhlbQorICAgICAgICAjIHNvIHdlIGlnbm9yZSBlcnJvcnMgaGVyZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZW50cnkuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhlbnRyeVs6LTFdKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGVudHJ5WzotMV0pCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhlbnRyeSkgYW5kIGxlbihvcy5saXN0ZGlyKGVudHJ5KSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZW50cnlbOi0xXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUoZW50cnkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgb2UucGF0aC5yZW1vdmUobWFuaWZlc3QpCisKK2RlZiBzc3RhdGVfY2xlYW4oc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisgICAgaW1wb3J0IGdsb2IKKworICAgIGQyID0gZC5jcmVhdGVDb3B5KCkKKyAgICBzdGFtcF9jbGVhbiA9IGQuZ2V0VmFyKCJTVEFNUENMRUFOIiwgVHJ1ZSkKKyAgICBleHRyYWluZiA9IGQuZ2V0VmFyRmxhZygiZG9fIiArIHNzWyd0YXNrJ10sICdzdGFtcC1leHRyYS1pbmZvJywgVHJ1ZSkKKyAgICBpZiBleHRyYWluZjoKKyAgICAgICAgZDIuc2V0VmFyKCJTU1RBVEVfTUFOTUFDSCIsIGV4dHJhaW5mKQorICAgICAgICB3aWxkY2FyZF9zdGZpbGUgPSAiJXMuZG9fJXMqLiVzIiAlIChzdGFtcF9jbGVhbiwgc3NbJ3Rhc2snXSwgZXh0cmFpbmYpCisgICAgZWxzZToKKyAgICAgICAgd2lsZGNhcmRfc3RmaWxlID0gIiVzLmRvXyVzKiIgJSAoc3RhbXBfY2xlYW4sIHNzWyd0YXNrJ10pCisKKyAgICBtYW5pZmVzdCA9IGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFORklMRVBSRUZJWH0uJXMiICUgc3NbJ3Rhc2snXSkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0KToKKyAgICAgICAgbG9ja3MgPSBbXQorICAgICAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzLXNoYXJlZCddOgorICAgICAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2spKQorICAgICAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzJ106CisgICAgICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaykpCisKKyAgICAgICAgc3N0YXRlX2NsZWFuX21hbmlmZXN0KG1hbmlmZXN0LCBkKQorCisgICAgICAgIGZvciBsb2NrIGluIGxvY2tzOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCisgICAgIyBSZW1vdmUgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3VzIHN0YW1wcywgYnV0IGtlZXAgdGhlIHNpZ2RhdGEuCisgICAgIworICAgICMgVGhlIGdsb2IoKSBtYXRjaGVzIGRvX3Rhc2sqIHdoaWNoIG1heSBtYXRjaCBtdWx0aXBsZSB0YXNrcywgZm9yCisgICAgIyBleGFtcGxlOiBkb19wYWNrYWdlIGFuZCBkb19wYWNrYWdlX3dyaXRlX2lwaywgc28gd2UgbmVlZCB0bworICAgICMgZXhhY3RseSBtYXRjaCAqLmRvX3Rhc2suKiBhbmQgKi5kb190YXNrX3NldHNjZW5lLioKKyAgICBybV9zdGFtcCA9ICcuZG9fJXMuJyAlIHNzWyd0YXNrJ10KKyAgICBybV9zZXRzY2VuZSA9ICcuZG9fJXNfc2V0c2NlbmUuJyAlIHNzWyd0YXNrJ10KKyAgICAjIEZvciBCQl9TSUdOQVRVUkVfSEFORExFUiA9ICJub29wIgorICAgIHJtX25vaGFzaCA9ICIuZG9fJXMiICUgc3NbJ3Rhc2snXQorICAgIGZvciBzdGZpbGUgaW4gZ2xvYi5nbG9iKHdpbGRjYXJkX3N0ZmlsZSk6CisgICAgICAgICMgS2VlcCB0aGUgc2lnZGF0YQorICAgICAgICBpZiAiLnNpZ2RhdGEuIiBpbiBzdGZpbGU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIFByZXNlcnZlIHRhaW50IGZpbGVzIGluIHRoZSBzdGFtcHMgZGlyZWN0b3J5CisgICAgICAgIGlmIHN0ZmlsZS5lbmRzd2l0aCgnLnRhaW50Jyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBybV9zdGFtcCBpbiBzdGZpbGUgb3Igcm1fc2V0c2NlbmUgaW4gc3RmaWxlIG9yIFwKKyAgICAgICAgICAgICAgICBzdGZpbGUuZW5kc3dpdGgocm1fbm9oYXNoKToKKyAgICAgICAgICAgIG9lLnBhdGgucmVtb3ZlKHN0ZmlsZSkKKworc3N0YXRlX2NsZWFuW3ZhcmRlcHNleGNsdWRlXSA9ICJTU1RBVEVfTUFORklMRVBSRUZJWCIKKworQ0xFQU5GVU5DUyArPSAic3N0YXRlX2NsZWFuYWxsIgorCitweXRob24gc3N0YXRlX2NsZWFuYWxsKCkgeworICAgIGJiLm5vdGUoIlJlbW92aW5nIHNoYXJlZCBzdGF0ZSBmb3IgcGFja2FnZSAlcyIgJSBkLmdldFZhcignUE4nLCBUcnVlKSkKKworICAgIG1hbmlmZXN0X2RpciA9IGQuZ2V0VmFyKCdTU1RBVEVfTUFOSUZFU1RTJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWFuaWZlc3RfZGlyKToKKyAgICAgICAgcmV0dXJuCisKKyAgICB0YXNrcyA9IGQuZ2V0VmFyKCdTU1RBVEVUQVNLUycsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgbmFtZSBpbiB0YXNrczoKKyAgICAgICAgbGQgPSBkLmNyZWF0ZUNvcHkoKQorICAgICAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMobGQsIG5hbWUpCisgICAgICAgIHNzdGF0ZV9jbGVhbihzaGFyZWRfc3RhdGUsIGxkKQorfQorCitweXRob24gc3N0YXRlX2hhcmRjb2RlX3BhdGggKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzLCBwbGF0Zm9ybQorCisgICAgIyBOZWVkIHRvIHJlbW92ZSBoYXJkY29kZWQgcGF0aHMgYW5kIGZpeCB0aGVzZSB3aGVuIHdlIGluc3RhbGwgdGhlCisgICAgIyBzdGFnaW5nIHBhY2thZ2VzLgorICAgICMKKyAgICAjIE5vdGU6IHRoZSBsb2dpYyBpbiB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIG1hdGNoIHRoZSByZXZlcnNlIGxvZ2ljCisgICAgIyBpbiBzc3RhdGVfaW5zdGFsbHBrZyhzcywgZCkKKworICAgIHN0YWdpbmcgPSBkLmdldFZhcignU1RBR0lOR19ESVInLCBUcnVlKQorICAgIHN0YWdpbmdfdGFyZ2V0ID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgc3RhZ2luZ19ob3N0ID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX0hPU1QnLCBUcnVlKQorICAgIHNzdGF0ZV9idWlsZGRpciA9IGQuZ2V0VmFyKCdTU1RBVEVfQlVJTERESVInLCBUcnVlKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICBzc3RhdGVfZ3JlcF9jbWQgPSAiZ3JlcCAtbCAtZSAnJXMnIiAlIChzdGFnaW5nKQorICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6JXM6RklYTUVTVEFHSU5HRElSOmcnIiAlIChzdGFnaW5nKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgc3N0YXRlX2dyZXBfY21kID0gImdyZXAgLWwgLWUgJyVzJyAtZSAnJXMnIiAlIChzdGFnaW5nX3RhcmdldCwgc3RhZ2luZykKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOiVzOkZJWE1FU1RBR0lOR0RJUlRBUkdFVDpnOyBzOiVzOkZJWE1FU1RBR0lOR0RJUjpnJyIgJSAoc3RhZ2luZ190YXJnZXQsIHN0YWdpbmcpCisgICAgZWxzZToKKyAgICAgICAgc3N0YXRlX2dyZXBfY21kID0gImdyZXAgLWwgLWUgJyVzJyIgJSAoc3RhZ2luZ19ob3N0KQorICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6JXM6RklYTUVTVEFHSU5HRElSSE9TVDpnJyIgJSAoc3RhZ2luZ19ob3N0KQorCisgICAgZXh0cmFfc3RhZ2luZ19maXhtZXMgPSBkLmdldFZhcignRVhUUkFfU1RBR0lOR19GSVhNRVMnLCBUcnVlKSBvciAnJworICAgIGZvciBmaXhtZXZhciBpbiBleHRyYV9zdGFnaW5nX2ZpeG1lcy5zcGxpdCgpOgorICAgICAgICBmaXhtZV9wYXRoID0gZC5nZXRWYXIoZml4bWV2YXIsIFRydWUpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kICs9ICIgLWUgJ3M6JXM6RklYTUVfJXM6ZyciICUgKGZpeG1lX3BhdGgsIGZpeG1ldmFyKQorCisgICAgZml4bWVmbiA9ICBzc3RhdGVfYnVpbGRkaXIgKyAiZml4bWVwYXRoIgorCisgICAgc3N0YXRlX3NjYW5fY21kID0gZC5nZXRWYXIoJ1NTVEFURV9TQ0FOX0NNRCcsIFRydWUpCisgICAgc3N0YXRlX2ZpbGVsaXN0X2NtZCA9ICJ0ZWUgJXMiICUgKGZpeG1lZm4pCisKKyAgICAjIGZpeG1lcGF0aCBmaWxlIG5lZWRzIHJlbGF0aXZlIHBhdGhzLCBkcm9wIHNzdGF0ZV9idWlsZGRpciBwcmVmaXgKKyAgICBzc3RhdGVfZmlsZWxpc3RfcmVsYXRpdmVfY21kID0gInNlZCAtaSAtZSAnczpeJXM6OmcnICVzIiAlIChzc3RhdGVfYnVpbGRkaXIsIGZpeG1lZm4pCisKKyAgICB4YXJnc19ub19lbXB0eV9ydW5fY21kID0gJy0tbm8tcnVuLWlmLWVtcHR5JworICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdEYXJ3aW4nOgorICAgICAgICB4YXJnc19ub19lbXB0eV9ydW5fY21kID0gJycKKworICAgICMgTGltaXQgdGhlIGZpeHBhdGhzIGFuZCBzZWQgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGUgaW5pdGlhbCBncmVwIHNlYXJjaAorICAgICMgVGhpcyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIG1ha2luZyBzdXJlIHRoZSB2ZnMgY2FjaGUgaXMgaG90CisgICAgc3N0YXRlX2hhcmRjb2RlX2NtZCA9ICIlcyB8IHhhcmdzICVzIHwgJXMgfCB4YXJncyAlcyAlcyIgJSAoc3N0YXRlX3NjYW5fY21kLCBzc3RhdGVfZ3JlcF9jbWQsIHNzdGF0ZV9maWxlbGlzdF9jbWQsIHhhcmdzX25vX2VtcHR5X3J1bl9jbWQsIHNzdGF0ZV9zZWRfY21kKQorCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgaGFyZGNvZGVkIHBhdGhzIGZyb20gc3N0YXRlIHBhY2thZ2U6ICclcyciICUgKHNzdGF0ZV9oYXJkY29kZV9jbWQpKQorICAgIHN1YnByb2Nlc3MuY2FsbChzc3RhdGVfaGFyZGNvZGVfY21kLCBzaGVsbD1UcnVlKQorCisgICAgICAgICMgSWYgdGhlIGZpeG1lZm4gaXMgZW1wdHksIHJlbW92ZSBpdC4uCisgICAgaWYgb3Muc3RhdChmaXhtZWZuKS5zdF9zaXplID09IDA6CisgICAgICAgIG9zLnJlbW92ZShmaXhtZWZuKQorICAgIGVsc2U6CisgICAgICAgIGJiLm5vdGUoIlJlcGxhY2luZyBhYnNvbHV0ZSBwYXRocyBpbiBmaXhtZXBhdGggZmlsZTogJyVzJyIgJSAoc3N0YXRlX2ZpbGVsaXN0X3JlbGF0aXZlX2NtZCkpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzc3RhdGVfZmlsZWxpc3RfcmVsYXRpdmVfY21kLCBzaGVsbD1UcnVlKQorfQorCitkZWYgc3N0YXRlX3BhY2thZ2Uoc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisKKyAgICBkZWYgbWFrZV9yZWxhdGl2ZV9zeW1saW5rKHBhdGgsIG91dHB1dHBhdGgsIGQpOgorICAgICAgICAjIFJlcGxhY2Ugb3V0IGFic29sdXRlIFRNUERJUiBwYXRocyBpbiBzeW1saW5rcyB3aXRoIHJlbGF0aXZlIG9uZXMKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxpbmsgPSBvcy5yZWFkbGluayhwYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhsaW5rKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgbGluay5zdGFydHN3aXRoKHRtcGRpcik6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZXB0aCA9IG91dHB1dHBhdGgucnBhcnRpdGlvbih0bXBkaXIpWzJdLmNvdW50KCcvJykKKyAgICAgICAgYmFzZSA9IGxpbmsucGFydGl0aW9uKHRtcGRpcilbMl0uc3RyaXAoKQorICAgICAgICB3aGlsZSBkZXB0aCA+IDE6CisgICAgICAgICAgICBiYXNlID0gIi8uLiIgKyBiYXNlCisgICAgICAgICAgICBkZXB0aCAtPSAxCisgICAgICAgIGJhc2UgPSAiLiIgKyBiYXNlCisKKyAgICAgICAgYmIuZGVidWcoMiwgIlJlcGxhY2luZyBhYnNvbHV0ZSBwYXRoICVzIHdpdGggcmVsYXRpdmUgcGF0aCAlcyBmb3IgJXMiICUgKGxpbmssIGJhc2UsIG91dHB1dHBhdGgpKQorICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgb3Muc3ltbGluayhiYXNlLCBwYXRoKQorCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBzc3RhdGVidWlsZCA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3NzdGF0ZS1idWlsZC0lcy8iICUgc3NbJ3Rhc2snXSkKKyAgICBzc3RhdGVwa2cgPSBkLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpICsgJ18nKyBzc1sndGFzayddICsgIi50Z3oiCisgICAgYmIudXRpbHMucmVtb3ZlKHNzdGF0ZWJ1aWxkLCByZWN1cnNlPVRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHNzdGF0ZWJ1aWxkKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc3N0YXRlcGtnKSkKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN0YXRlWzFdKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHNyY2Jhc2UgPSBzdGF0ZVswXS5yc3RyaXAoIi8iKS5yc3BsaXQoJy8nLCAxKVswXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3RhdGVbMV0pOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICBtYWtlX3JlbGF0aXZlX3N5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgZCkKKyAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBkaXIpCisgICAgICAgICAgICAgICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgbWFrZV9yZWxhdGl2ZV9zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGQpCisgICAgICAgIGJiLmRlYnVnKDIsICJQcmVwYXJpbmcgdHJlZSAlcyBmb3IgcGFja2FnaW5nIGF0ICVzIiAlIChzdGF0ZVsxXSwgc3N0YXRlYnVpbGQgKyBzdGF0ZVswXSkpCisgICAgICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShzdGF0ZVsxXSwgc3N0YXRlYnVpbGQgKyBzdGF0ZVswXSkKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgZm9yIHBsYWluIGluIHNzWydwbGFpbmRpcnMnXToKKyAgICAgICAgcGRpciA9IHBsYWluLnJlcGxhY2Uod29ya2Rpciwgc3N0YXRlYnVpbGQpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwbGFpbikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBkaXIpCisgICAgICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShwbGFpbiwgcGRpcikKKworICAgIGQuc2V0VmFyKCdTU1RBVEVfQlVJTERESVInLCBzc3RhdGVidWlsZCkKKyAgICBkLnNldFZhcignU1NUQVRFX1BLRycsIHNzdGF0ZXBrZykKKworICAgIGZvciBmIGluIChkLmdldFZhcignU1NUQVRFQ1JFQVRFRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKSArIFsnc3N0YXRlX2NyZWF0ZV9wYWNrYWdlJ10gKyBcCisgICAgICAgICAgICAgKGQuZ2V0VmFyKCdTU1RBVEVQT1NUQ1JFQVRFRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisgIAorICAgIGJiLnNpZ2dlbi5kdW1wX3RoaXNfdGFzayhzc3RhdGVwa2cgKyAiLnNpZ2luZm8iLCBkKQorCisgICAgcmV0dXJuCisKK2RlZiBwc3RhZ2luZ19mZXRjaChzc3RhdGVmZXRjaCwgc3N0YXRlcGtnLCBkKToKKyAgICBpbXBvcnQgYmIuZmV0Y2gyCisKKyAgICAjIE9ubHkgdHJ5IGFuZCBmZXRjaCBpZiB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBhIG1pcnJvcgorICAgIG1pcnJvcnMgPSBkLmdldFZhcignU1NUQVRFX01JUlJPUlMnLCBUcnVlKQorICAgIGlmIG5vdCBtaXJyb3JzOgorICAgICAgICByZXR1cm4KKworICAgICMgQ29weSB0aGUgZGF0YSBvYmplY3QgYW5kIG92ZXJyaWRlIERMX0RJUiBhbmQgU1JDX1VSSQorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgZGxkaXIgPSBsb2NhbGRhdGEuZXhwYW5kKCIke1NTVEFURV9ESVJ9IikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGxkaXIpCisKKyAgICBsb2NhbGRhdGEuZGVsVmFyKCdNSVJST1JTJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdGSUxFU1BBVEgnLCBkbGRpcikKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdETF9ESVInLCBkbGRpcikKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUkVNSVJST1JTJywgbWlycm9ycykKKworICAgICMgaWYgQkJfTk9fTkVUV09SSyBpcyBzZXQgYnV0IHdlIGFsc28gaGF2ZSBTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUkssCisgICAgIyB3ZSdsbCB3YW50IHRvIGFsbG93IG5ldHdvcmsgYWNjZXNzIGZvciB0aGUgY3VycmVudCBzZXQgb2YgZmV0Y2hlcy4KKyAgICBpZiBsb2NhbGRhdGEuZ2V0VmFyKCdCQl9OT19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiIGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUksnLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ0JCX05PX05FVFdPUksnKQorCisgICAgIyBUcnkgYSBmZXRjaCBmcm9tIHRoZSBzc3RhdGUgbWlycm9yLCBpZiBpdCBmYWlscyBqdXN0IHJldHVybiBhbmQKKyAgICAjIHdlIHdpbGwgYnVpbGQgdGhlIHBhY2thZ2UKKyAgICB1cmlzID0gWydmaWxlOi8vezB9Jy5mb3JtYXQoc3N0YXRlZmV0Y2gpLAorICAgICAgICAgICAgJ2ZpbGU6Ly97MH0uc2lnaW5mbycuZm9ybWF0KHNzdGF0ZWZldGNoKV0KKyAgICBpZiBiYi51dGlscy50b19ib29sZWFuKGQuZ2V0VmFyKCJTU1RBVEVfVkVSSUZZX1NJRyIsIFRydWUpLCBGYWxzZSk6CisgICAgICAgIHVyaXMgKz0gWydmaWxlOi8vezB9LnNpZycuZm9ybWF0KHNzdGF0ZWZldGNoKV0KKworICAgIGZvciBzcmN1cmkgaW4gdXJpczoKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1JDX1VSSScsIHNyY3VyaSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbc3JjdXJpXSwgbG9jYWxkYXRhLCBjYWNoZT1GYWxzZSkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorCisgICAgICAgICAgICAjIE5lZWQgdG8gb3B0aW1pc2UgdGhpcywgaWYgdXNpbmcgZmlsZTovLyB1cmxzLCB0aGUgZmV0Y2hlciBqdXN0IGNoYW5nZXMgdGhlIGxvY2FsIHBhdGgKKyAgICAgICAgICAgICMgRm9yIG5vdyB3b3JrIGFyb3VuZCBieSBzeW1saW5raW5nCisgICAgICAgICAgICBsb2NhbHBhdGggPSBiYi5kYXRhLmV4cGFuZChmZXRjaGVyLmxvY2FscGF0aChzcmN1cmkpLCBsb2NhbGRhdGEpCisgICAgICAgICAgICBpZiBsb2NhbHBhdGggIT0gc3N0YXRlcGtnIGFuZCBvcy5wYXRoLmV4aXN0cyhsb2NhbHBhdGgpIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlcGtnKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxvY2FscGF0aCwgc3N0YXRlcGtnKQorCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGJyZWFrCisKK2RlZiBzc3RhdGVfc2V0c2NlbmUoZCk6CisgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCisgICAgYWNjZWxlcmF0ZSA9IHNzdGF0ZV9pbnN0YWxscGtnKHNoYXJlZF9zdGF0ZSwgZCkKKyAgICBpZiBub3QgYWNjZWxlcmF0ZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiTm8gc3VpdGFibGUgc3RhZ2luZyBwYWNrYWdlIGZvdW5kIikKKworcHl0aG9uIHNzdGF0ZV90YXNrX3ByZWZ1bmMgKCkgeworICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorICAgIHNzdGF0ZV9jbGVhbihzaGFyZWRfc3RhdGUsIGQpCit9CisKK3B5dGhvbiBzc3RhdGVfdGFza19wb3N0ZnVuYyAoKSB7CisgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCisgICAgc3N0YXRlX2luc3RhbGwoc2hhcmVkX3N0YXRlLCBkKQorICAgIGZvciBpbnRlcmNlcHQgaW4gc2hhcmVkX3N0YXRlWydpbnRlcmNlcHRmdW5jcyddOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoaW50ZXJjZXB0LCBkKQorICAgIG9tYXNrID0gb3MudW1hc2soMDAyKQorICAgIGlmIG9tYXNrICE9IDAwMjoKKyAgICAgICBiYi5ub3RlKCJVc2luZyB1bWFzayAwMDIgKG5vdCAlMG8pIGZvciBzc3RhdGUgcGFja2FnaW5nIiAlIG9tYXNrKQorICAgIHNzdGF0ZV9wYWNrYWdlKHNoYXJlZF9zdGF0ZSwgZCkKKyAgICBvcy51bWFzayhvbWFzaykKK30KKyAgCisKKyMKKyMgU2hlbGwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBzc3RhdGUgcGFja2FnZSBmcm9tIGEgZGlyZWN0b3J5CisjIHNldCBhcyBTU1RBVEVfQlVJTERESVIuIFdpbGwgYmUgcnVuIGZyb20gd2l0aGluIFNTVEFURV9CVUlMRERJUi4KKyMKK3NzdGF0ZV9jcmVhdGVfcGFja2FnZSAoKSB7CisJVEZJTEU9YG1rdGVtcCAke1NTVEFURV9QS0d9LlhYWFhYWFhYYAorCSMgTmVlZCB0byBoYW5kbGUgZW1wdHkgZGlyZWN0b3JpZXMKKwlpZiBbICIkKGxzIC1BKSIgXTsgdGhlbgorCQlzZXQgK2UKKwkJdGFyIC1jemYgJFRGSUxFICoKKwkJcmV0PSQ/CisJCWlmIFsgJHJldCAtbmUgMCBdICYmIFsgJHJldCAtbmUgMSBdOyB0aGVuCisJCQlleGl0IDEKKwkJZmkKKwkJc2V0IC1lCisJZWxzZQorCQl0YXIgLWN6IC0tZmlsZT0kVEZJTEUgLS1maWxlcy1mcm9tPS9kZXYvbnVsbAorCWZpCisJY2htb2QgMDY2NCAkVEZJTEUgCisJbXYgLWYgJFRGSUxFICR7U1NUQVRFX1BLR30KKworCWlmIFsgLW4gIiR7U1NUQVRFX1NJR19LRVl9IiBdOyB0aGVuCisJCXJtIC1mICR7U1NUQVRFX1BLR30uc2lnCisJCWVjaG8gJHtTU1RBVEVfU0lHX1BBU1NQSFJBU0V9IHwgZ3BnIC0tYmF0Y2ggLS1wYXNzcGhyYXNlLWZkIDAgLS1kZXRhY2gtc2lnbiAtLWxvY2FsLXVzZXIgJHtTU1RBVEVfU0lHX0tFWX0gLS1vdXRwdXQgJHtTU1RBVEVfUEtHfS5zaWcgJHtTU1RBVEVfUEtHfQorCWZpCisKKwljZCAke1dPUktESVJ9CisJcm0gLXJmICR7U1NUQVRFX0JVSUxERElSfQorfQorCisjCisjIFNoZWxsIGZ1bmN0aW9uIHRvIGRlY29tcHJlc3MgYW5kIHByZXBhcmUgYSBwYWNrYWdlIGZvciBpbnN0YWxsYXRpb24KKyMgV2lsbCBiZSBydW4gZnJvbSB3aXRoaW4gU1NUQVRFX0lOU1RESVIuCisjCitzc3RhdGVfdW5wYWNrX3BhY2thZ2UgKCkgeworCXRhciAteG12emYgJHtTU1RBVEVfUEtHfQorCSMgVXNlICIhIC13IHx8IiB0byByZXR1cm4gdHJ1ZSBmb3IgcmVhZCBvbmx5IGZpbGVzCisJWyAhIC13ICR7U1NUQVRFX1BLR30gXSB8fCB0b3VjaCAtLW5vLWRlcmVmZXJlbmNlICR7U1NUQVRFX1BLR30KK30KKworQkJfSEFTSENIRUNLX0ZVTkNUSU9OID0gInNzdGF0ZV9jaGVja2hhc2hlcyIKKworZGVmIHNzdGF0ZV9jaGVja2hhc2hlcyhzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkLCBzaWdpbmZvPUZhbHNlKToKKworICAgIHJldCA9IFtdCisgICAgbWlzc2VkID0gW10KKyAgICBleHRlbnNpb24gPSAiLnRneiIKKyAgICBpZiBzaWdpbmZvOgorICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb24gKyAiLnNpZ2luZm8iCisKKyAgICBkZWYgZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCk6CisgICAgICAgICMgTWFnaWMgZGF0YSBmcm9tIEJCX0hBU0hGSUxFTkFNRQorICAgICAgICBzcGxpdGhhc2hmbiA9IHNxX2hhc2hmblt0YXNrXS5zcGxpdCgiICIpCisgICAgICAgIHNwZWMgPSBzcGxpdGhhc2hmblsxXQorICAgICAgICBleHRyYXBhdGggPSBzcGxpdGhhc2hmblswXQorCisgICAgICAgIHRuYW1lID0gc3FfdGFza1t0YXNrXVszOl0KKworICAgICAgICBpZiB0bmFtZSBpbiBbImZldGNoIiwgInVucGFjayIsICJwYXRjaCIsICJwb3B1bGF0ZV9saWMiLCAicHJlY29uZmlndXJlIl0gYW5kIHNwbGl0aGFzaGZuWzJdOgorICAgICAgICAgICAgc3BlYyA9IHNwbGl0aGFzaGZuWzJdCisgICAgICAgICAgICBleHRyYXBhdGggPSAiIgorCisgICAgICAgIHJldHVybiBzcGVjLCBleHRyYXBhdGgsIHRuYW1lCisKKworICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgorCisgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorCisgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZCgiJHtTU1RBVEVfRElSfS8iICsgZXh0cmFwYXRoICsgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgc3FfaGFzaFt0YXNrXSwgZCkgKyAiXyIgKyB0bmFtZSArIGV4dGVuc2lvbikKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzc3RhdGVmaWxlKToKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IEZvdW5kIHZhbGlkIHNzdGF0ZSBmaWxlICVzIiAlIHNzdGF0ZWZpbGUpCisgICAgICAgICAgICByZXQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWlzc2VkLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogTG9va2VkIGZvciBidXQgZGlkbid0IGZpbmQgZmlsZSAlcyIgJSBzc3RhdGVmaWxlKQorCisgICAgbWlycm9ycyA9IGQuZ2V0VmFyKCJTU1RBVEVfTUlSUk9SUyIsIFRydWUpCisgICAgaWYgbWlycm9yczoKKyAgICAgICAgIyBDb3B5IHRoZSBkYXRhIG9iamVjdCBhbmQgb3ZlcnJpZGUgRExfRElSIGFuZCBTUkNfVVJJCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBkbGRpciA9IGxvY2FsZGF0YS5leHBhbmQoIiR7U1NUQVRFX0RJUn0iKQorICAgICAgICBsb2NhbGRhdGEuZGVsVmFyKCdNSVJST1JTJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignRklMRVNQQVRIJywgZGxkaXIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0RMX0RJUicsIGRsZGlyKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUkVNSVJST1JTJywgbWlycm9ycykKKworICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlIHVzaW5nIHByZW1pcnJvciBvZjogJXMiICUgbWlycm9ycykKKworICAgICAgICAjIGlmIEJCX05PX05FVFdPUksgaXMgc2V0IGJ1dCB3ZSBhbHNvIGhhdmUgU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLLAorICAgICAgICAjIHdlJ2xsIHdhbnQgdG8gYWxsb3cgbmV0d29yayBhY2Nlc3MgZm9yIHRoZSBjdXJyZW50IHNldCBvZiBmZXRjaGVzLgorICAgICAgICBpZiBsb2NhbGRhdGEuZ2V0VmFyKCdCQl9OT19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiIGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUksnLCBUcnVlKSA9PSAiMSI6CisgICAgICAgICAgICBsb2NhbGRhdGEuZGVsVmFyKCdCQl9OT19ORVRXT1JLJykKKworICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hDb25uZWN0aW9uQ2FjaGUKKyAgICAgICAgZGVmIGNoZWNrc3RhdHVzX2luaXQodGhyZWFkX3dvcmtlcik6CisgICAgICAgICAgICB0aHJlYWRfd29ya2VyLmNvbm5lY3Rpb25fY2FjaGUgPSBGZXRjaENvbm5lY3Rpb25DYWNoZSgpCisKKyAgICAgICAgZGVmIGNoZWNrc3RhdHVzX2VuZCh0aHJlYWRfd29ya2VyKToKKyAgICAgICAgICAgIHRocmVhZF93b3JrZXIuY29ubmVjdGlvbl9jYWNoZS5jbG9zZV9jb25uZWN0aW9ucygpCisKKyAgICAgICAgZGVmIGNoZWNrc3RhdHVzKHRocmVhZF93b3JrZXIsIGFyZyk6CisgICAgICAgICAgICAodGFzaywgc3N0YXRlZmlsZSkgPSBhcmcKKworICAgICAgICAgICAgbG9jYWxkYXRhMiA9IGJiLmRhdGEuY3JlYXRlQ29weShsb2NhbGRhdGEpCisgICAgICAgICAgICBzcmN1cmkgPSAiZmlsZTovLyIgKyBzc3RhdGVmaWxlCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNfVVJJJywgc3JjdXJpKQorICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogQXR0ZW1wdGluZyB0byBmZXRjaCAlcyIgJSBzcmN1cmkpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY3VyaS5zcGxpdCgpLCBsb2NhbGRhdGEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGU9dGhyZWFkX3dvcmtlci5jb25uZWN0aW9uX2NhY2hlKQorICAgICAgICAgICAgICAgIGZldGNoZXIuY2hlY2tzdGF0dXMoKQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IFN1Y2Nlc3NmdWwgZmV0Y2ggdGVzdCBmb3IgJXMiICUgc3JjdXJpKQorICAgICAgICAgICAgICAgIHJldC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICBpZiB0YXNrIGluIG1pc3NlZDoKKyAgICAgICAgICAgICAgICAgICAgbWlzc2VkLnJlbW92ZSh0YXNrKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG1pc3NlZC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBVbnN1Y2Nlc3NmdWwgZmV0Y2ggdGVzdCBmb3IgJXMiICUgc3JjdXJpKQorICAgICAgICAgICAgICAgIHBhc3MgICAgIAorCisgICAgICAgIHRhc2tsaXN0ID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CisgICAgICAgICAgICBpZiB0YXNrIGluIHJldDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3BlYywgZXh0cmFwYXRoLCB0bmFtZSA9IGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpCisgICAgICAgICAgICBzc3RhdGVmaWxlID0gZC5leHBhbmQoZXh0cmFwYXRoICsgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgc3FfaGFzaFt0YXNrXSwgZCkgKyAiXyIgKyB0bmFtZSArIGV4dGVuc2lvbikKKyAgICAgICAgICAgIHRhc2tsaXN0LmFwcGVuZCgodGFzaywgc3N0YXRlZmlsZSkpCisKKyAgICAgICAgaWYgdGFza2xpc3Q6CisgICAgICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBzc3RhdGUgbWlycm9yIG9iamVjdCBhdmFpbGFiaWxpdHkgKGZvciAlcyBvYmplY3RzKSIgJSBsZW4odGFza2xpc3QpKQorICAgICAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworICAgICAgICAgICAgbnByb2MgPSBtaW4obXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpLCBsZW4odGFza2xpc3QpKQorCisgICAgICAgICAgICBwb29sID0gb2UudXRpbHMuVGhyZWFkZWRQb29sKG5wcm9jLCBsZW4odGFza2xpc3QpLAorICAgICAgICAgICAgICAgICAgICB3b3JrZXJfaW5pdD1jaGVja3N0YXR1c19pbml0LCB3b3JrZXJfZW5kPWNoZWNrc3RhdHVzX2VuZCkKKyAgICAgICAgICAgIGZvciB0IGluIHRhc2tsaXN0OgorICAgICAgICAgICAgICAgIHBvb2wuYWRkX3Rhc2soY2hlY2tzdGF0dXMsIHQpCisgICAgICAgICAgICBwb29sLnN0YXJ0KCkKKyAgICAgICAgICAgIHBvb2wud2FpdF9jb21wbGV0aW9uKCkKKworICAgIGluaGVyaXRsaXN0ID0gZC5nZXRWYXIoIklOSEVSSVQiLCBUcnVlKQorICAgIGlmICJ0b2FzdGVyIiBpbiBpbmhlcml0bGlzdDoKKyAgICAgICAgZXZkYXRhID0geydtaXNzZWQnOiBbXSwgJ2ZvdW5kJzogW119OworICAgICAgICBmb3IgdGFzayBpbiBtaXNzZWQ6CisgICAgICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKyAgICAgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZChleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgIi50Z3oiKQorICAgICAgICAgICAgZXZkYXRhWydtaXNzZWQnXS5hcHBlbmQoIChzcV9mblt0YXNrXSwgc3FfdGFza1t0YXNrXSwgc3FfaGFzaFt0YXNrXSwgc3N0YXRlZmlsZSApICkKKyAgICAgICAgZm9yIHRhc2sgaW4gcmV0OgorICAgICAgICAgICAgc3BlYywgZXh0cmFwYXRoLCB0bmFtZSA9IGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpCisgICAgICAgICAgICBzc3RhdGVmaWxlID0gZC5leHBhbmQoZXh0cmFwYXRoICsgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgc3FfaGFzaFt0YXNrXSwgZCkgKyAiXyIgKyB0bmFtZSArICIudGd6IikKKyAgICAgICAgICAgIGV2ZGF0YVsnZm91bmQnXS5hcHBlbmQoIChzcV9mblt0YXNrXSwgc3FfdGFza1t0YXNrXSwgc3FfaGFzaFt0YXNrXSwgc3N0YXRlZmlsZSApICkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJNaXNzZWRTc3RhdGUiLCBldmRhdGEpLCBkKQorCisgICAgaWYgaGFzYXR0cihiYi5wYXJzZS5zaWdnZW4sICJjaGVja2hhc2hlcyIpOgorICAgICAgICBiYi5wYXJzZS5zaWdnZW4uY2hlY2toYXNoZXMobWlzc2VkLCByZXQsIHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQpCisKKyAgICByZXR1cm4gcmV0CisKK0JCX1NFVFNDRU5FX0RFUFZBTElEID0gInNldHNjZW5lX2RlcHZhbGlkIgorCitkZWYgc2V0c2NlbmVfZGVwdmFsaWQodGFzaywgdGFza2RlcGVuZGVlcywgbm90bmVlZGVkLCBkKToKKyAgICAjIHRhc2tkZXBlbmRlZXMgaXMgYSBkaWN0IG9mIHRhc2tzIHdoaWNoIGRlcGVuZCBvbiB0YXNrLCBlYWNoIGJlaW5nIGEgMyBpdGVtIGxpc3Qgb2YgW1BOLCBUQVNLTkFNRSwgRklMRU5BTUVdCisgICAgIyB0YXNrIGlzIGluY2x1ZGVkIGluIHRhc2tkZXBlbmRlZXMgdG9vCisKKyAgICBiYi5kZWJ1ZygyLCAiQ29uc2lkZXJpbmcgc2V0c2NlbmUgdGFzazogJXMiICUgKHN0cih0YXNrZGVwZW5kZWVzW3Rhc2tdKSkpCisKKyAgICBkZWYgaXNOYXRpdmVDcm9zcyh4KToKKyAgICAgICAgcmV0dXJuIHguZW5kc3dpdGgoIi1uYXRpdmUiKSBvciAiLWNyb3NzLSIgaW4geCBvciAiLWNyb3Nzc2RrIiBpbiB4CisKKyAgICBkZWYgaXNQb3N0SW5zdERlcCh4KToKKyAgICAgICAgaWYgeCBpbiBbInFlbXUtbmF0aXZlIiwgImdkay1waXhidWYtbmF0aXZlIiwgInFlbXV3cmFwcGVyLWNyb3NzIiwgImRlcG1vZHdyYXBwZXItY3Jvc3MiLCAic3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlIiwgImd0ay1pY29uLXV0aWxzLW5hdGl2ZSJdOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIFdlIG9ubHkgbmVlZCB0byB0cmlnZ2VyIHBvcHVsYXRlX2xpYyB0aHJvdWdoIGRpcmVjdCBkZXBlbmRlbmNpZXMKKyAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICJkb19wb3B1bGF0ZV9saWMiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZm9yIGRlcCBpbiB0YXNrZGVwZW5kZWVzOgorICAgICAgICBiYi5kZWJ1ZygyLCAiICBjb25zaWRlcmluZyBkZXBlbmRlbmN5OiAlcyIgJSAoc3RyKHRhc2tkZXBlbmRlZXNbZGVwXSkpKQorICAgICAgICBpZiB0YXNrID09IGRlcDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGRlcCBpbiBub3RuZWVkZWQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIGRvX3BhY2thZ2Vfd3JpdGVfKiBhbmQgZG9fcGFja2FnZSBkb2Vzbid0IG5lZWQgZG9fcGFja2FnZQorICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICJkb19wYWNrYWdlIiBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdIGluIFsnZG9fcGFja2FnZScsICdkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlX3FhJ106CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIGRvX3BhY2thZ2Vfd3JpdGVfKiBhbmQgZG9fcGFja2FnZSBkb2Vzbid0IG5lZWQgZG9fcG9wdWxhdGVfc3lzcm9vdCwgdW5sZXNzIGlzIGEgcG9zdGluc3RhbGwgZGVwZW5kZW5jeQorICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICJkb19wb3B1bGF0ZV9zeXNyb290IiBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdIGluIFsnZG9fcGFja2FnZScsICdkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlX3FhJ106CisgICAgICAgICAgICBpZiBpc1Bvc3RJbnN0RGVwKHRhc2tkZXBlbmRlZXNbdGFza11bMF0pIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbSddOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBOYXRpdmUvQ3Jvc3MgcGFja2FnZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBub2V4ZWMgYW55d2F5CisgICAgICAgIGlmIGlzTmF0aXZlQ3Jvc3ModGFza2RlcGVuZGVlc1tkZXBdWzBdKSBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdIGluIFsnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZG9fcGFja2FnZWRhdGEnLCAnZG9fcGFja2FnZScsICdkb19wYWNrYWdlX3FhJ106CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgQ29uc2lkZXIgc3lzcm9vdCBkZXBlbmRpbmcgb24gc3lzcm9vdCB0YXNrcworICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICdkb19wb3B1bGF0ZV9zeXNyb290JyBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdID09ICdkb19wb3B1bGF0ZV9zeXNyb290JzoKKyAgICAgICAgICAgICMgYmFzZS1wYXNzd2Qvc2hhZG93LXN5c3Jvb3QgZG9uJ3QgbmVlZCB0aGVpciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbZGVwXVswXS5lbmRzd2l0aCgoImJhc2UtcGFzc3dkIiwgInNoYWRvdy1zeXNyb290IikpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIE5vdGhpbmcgbmVlZCBkZXBlbmQgb24gbGliYy1pbml0aWFsL2djYy1jcm9zcy1pbml0aWFsCisgICAgICAgICAgICBpZiAiLWluaXRpYWwiIGluIHRhc2tkZXBlbmRlZXNbdGFza11bMF06CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgTmF0aXZlL0Nyb3NzIHBvcHVsYXRlX3N5c3Jvb3QgbmVlZCB0aGVpciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmIGlzTmF0aXZlQ3Jvc3ModGFza2RlcGVuZGVlc1t0YXNrXVswXSkgYW5kIGlzTmF0aXZlQ3Jvc3ModGFza2RlcGVuZGVlc1tkZXBdWzBdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICMgVGFyZ2V0IHBvcHVsYXRlX3N5c3Jvb3QgZGVwZW5kZWQgb24gYnkgY3Jvc3MgdG9vbHMgbmVlZCB0byBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgIGlmIGlzTmF0aXZlQ3Jvc3ModGFza2RlcGVuZGVlc1tkZXBdWzBdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICMgTmF0aXZlL2Nyb3NzIHRvb2xzIGRlcGVuZGVkIHVwb24gYnkgdGFyZ2V0IHN5c3Jvb3QgYXJlIG5vdCBuZWVkZWQKKyAgICAgICAgICAgIGlmIGlzTmF0aXZlQ3Jvc3ModGFza2RlcGVuZGVlc1t0YXNrXVswXSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgVGFyZ2V0IHBvcHVsYXRlX3N5c3Jvb3QgbmVlZCB0aGVpciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gJ2RvX3NoYXJlZF93b3JrZGlyJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBUaGlzIGlzIGR1ZSB0byB0aGUgW2RlcGVuZHNdIGluIHVzZXJhZGQuYmJjbGFzcyBjb21wbGljYXRpbmcgbWF0dGVycworICAgICAgICAjIFRoZSBsb2dpYyAqaXMqIHJldmVyc2VkIGhlcmUgZHVlIHRvIHRoZSB3YXkgaGFyZCBzZXRzY2VuZSBkZXBlbmRlbmNpZXMgYXJlIGluamVjdGVkCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gJ2RvX3BhY2thZ2UnIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMF0uZW5kc3dpdGgoKCdzaGFkb3ctbmF0aXZlJywgJ3NoYWRvdy1zeXNyb290JywgJ2Jhc2UtcGFzc3dkJywgJ3BzZXVkby1uYXRpdmUnKSkgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSA9PSAnZG9fcG9wdWxhdGVfc3lzcm9vdCc6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgU2FmZSBmYWxsdGhyb3VnaCBkZWZhdWx0CisgICAgICAgIGJiLmRlYnVnKDIsICIgRGVmYXVsdCBzZXRzY2VuZSBkZXBlbmRlbmN5IGZhbGwgdGhyb3VnaCBkdWUgdG8gZGVwZW5kZW5jeTogJXMiICUgKHN0cih0YXNrZGVwZW5kZWVzW2RlcF0pKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworYWRkaGFuZGxlciBzc3RhdGVfZXZlbnRoYW5kbGVyCitzc3RhdGVfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCIKK3B5dGhvbiBzc3RhdGVfZXZlbnRoYW5kbGVyKCkgeworICAgIGQgPSBlLmRhdGEKKyAgICAjIFdoZW4gd2Ugd3JpdGUgYW4gc3N0YXRlIHBhY2thZ2Ugd2UgcmV3cml0ZSB0aGUgU1NUQVRFX1BLRworICAgIHNwa2cgPSBkLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpCisgICAgaWYgbm90IHNwa2cuZW5kc3dpdGgoIi50Z3oiKToKKyAgICAgICAgdGFza25hbWUgPSBkLmdldFZhcigiQkJfUlVOVEFTSyIsIFRydWUpWzM6XQorICAgICAgICBzcGVjID0gZC5nZXRWYXIoJ1NTVEFURV9QS0dTUEVDJywgVHJ1ZSkKKyAgICAgICAgc3dzcGVjID0gZC5nZXRWYXIoJ1NTVEFURV9TV1NQRUMnLCBUcnVlKQorICAgICAgICBpZiB0YXNrbmFtZSBpbiBbImZldGNoIiwgInVucGFjayIsICJwYXRjaCIsICJwb3B1bGF0ZV9saWMiLCAicHJlY29uZmlndXJlIl0gYW5kIHN3c3BlYzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJTU1RBVEVfUEtHU1BFQyIsICIke1NTVEFURV9TV1NQRUN9IikKKyAgICAgICAgICAgIGQuc2V0VmFyKCJTU1RBVEVfRVhUUkFQQVRIIiwgIiIpCisgICAgICAgIHNzdGF0ZXBrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkKKyAgICAgICAgYmIuc2lnZ2VuLmR1bXBfdGhpc190YXNrKHNzdGF0ZXBrZyArICdfJyArIHRhc2tuYW1lICsgIi50Z3oiICIuc2lnaW5mbyIsIGQpCit9CisKK1NTVEFURV9QUlVORV9PQlNPTEVURVdPUktESVIgPSAiMSIKKworIyBFdmVudCBoYW5kbGVyIHdoaWNoIHJlbW92ZXMgbWFuaWZlc3RzIGFuZCBzdGFtcHMgZmlsZSBmb3IKKyMgcmVjaXBlcyB3aGljaCBhcmUgbm8gbG9uZ2VyIHJlYWNoYWJsZSBpbiBhIGJ1aWxkIHdoZXJlIHRoZXkKKyMgb25jZSB3ZXJlLgorIyBBbHNvIG9wdGlvbmFsbHkgcmVtb3ZlcyB0aGUgd29ya2RpciBvZiB0aG9zZSB0YXNrcy9yZWNpcGVzCisjCithZGRoYW5kbGVyIHNzdGF0ZV9ldmVudGhhbmRsZXIyCitzc3RhdGVfZXZlbnRoYW5kbGVyMltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlYWNoYWJsZVN0YW1wcyIKK3B5dGhvbiBzc3RhdGVfZXZlbnRoYW5kbGVyMigpIHsKKyAgICBpbXBvcnQgZ2xvYgorICAgIGQgPSBlLmRhdGEKKyAgICBzdGFtcHMgPSBlLnN0YW1wcy52YWx1ZXMoKQorICAgIHJlbW92ZXdvcmtkaXIgPSAoZC5nZXRWYXIoIlNTVEFURV9QUlVORV9PQlNPTEVURVdPUktESVIiLCBGYWxzZSkgPT0gIjEiKQorICAgIHNlZW4gPSBbXQorICAgIGZvciBhIGluIGQuZ2V0VmFyKCJTU1RBVEVfQVJDSFMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICB0b3JlbW92ZSA9IFtdCisgICAgICAgIGkgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9pbmRleC0iICsgYSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGkpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgd2l0aCBvcGVuKGksICJyIikgYXMgZjoKKyAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgKHN0YW1wLCBtYW5pZmVzdCwgd29ya2RpcikgPSBsLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBzdGFtcCBub3QgaW4gc3RhbXBzOgorICAgICAgICAgICAgICAgICAgICB0b3JlbW92ZS5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHNlZW46CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJTdGFtcCAlcyBpcyBub3QgcmVhY2hhYmxlLCByZW1vdmluZyByZWxhdGVkIG1hbmlmZXN0cyIgJSBzdGFtcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW4uYXBwZW5kKHN0YW1wKQorICAgICAgICBmb3IgciBpbiB0b3JlbW92ZToKKyAgICAgICAgICAgIChzdGFtcCwgbWFuaWZlc3QsIHdvcmtkaXIpID0gci5zcGxpdCgpCisgICAgICAgICAgICBmb3IgbSBpbiBnbG9iLmdsb2IobWFuaWZlc3QgKyAiLioiKToKKyAgICAgICAgICAgICAgICBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobSwgZCkKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCArICIqIikKKyAgICAgICAgICAgIGlmIHJlbW92ZXdvcmtkaXI6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHdvcmtkaXIsIHJlY3Vyc2UgPSBUcnVlKQorICAgICAgICAgICAgbGluZXMucmVtb3ZlKHIpCisgICAgICAgIHdpdGggb3BlbihpLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGwpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zdGFnaW5nLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zdGFnaW5nLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3ZWRkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcwpAQCAtMCwwICsxLDIxOCBAQAorCitzeXNyb290X3N0YWdlX2RpcigpIHsKKwlzcmM9IiQxIgorCWRlc3Q9IiQyIgorCSMgaWYgdGhlIHNyYyBkb2Vzbid0IGV4aXN0IGRvbid0IGRvIGFueXRoaW5nCisJaWYgWyAhIC1kICIkc3JjIiBdOyB0aGVuCisJCSByZXR1cm4KKwlmaQorCisJbWtkaXIgLXAgIiRkZXN0IgorCSgKKwkJY2QgJHNyYworCQlmaW5kIC4gLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICRkZXN0CisJKQorfQorCitzeXNyb290X3N0YWdlX2xpYmRpcigpIHsKKwlzcmM9IiQxIgorCWRlc3Q9IiQyIgorCisJc3lzcm9vdF9zdGFnZV9kaXIgJHNyYyAkZGVzdAorfQorCitzeXNyb290X3N0YWdlX2RpcnMoKSB7CisJZnJvbT0iJDEiCisJdG89IiQyIgorCisJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2luY2x1ZGVkaXJ9ICR0byR7aW5jbHVkZWRpcn0KKwlpZiBbICIke0JVSUxEX1NZU30iID0gIiR7SE9TVF9TWVN9IiBdOyB0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtiaW5kaXJ9ICR0byR7YmluZGlyfQorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7c2JpbmRpcn0gJHRvJHtzYmluZGlyfQorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7YmFzZV9iaW5kaXJ9ICR0byR7YmFzZV9iaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtiYXNlX3NiaW5kaXJ9ICR0byR7YmFzZV9zYmluZGlyfQorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7bGliZXhlY2Rpcn0gJHRvJHtsaWJleGVjZGlyfQorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7c3lzY29uZmRpcn0gJHRvJHtzeXNjb25mZGlyfQorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7bG9jYWxzdGF0ZWRpcn0gJHRvJHtsb2NhbHN0YXRlZGlyfQorCWZpCisJaWYgWyAtZCAkZnJvbSR7bGliZGlyfSBdCisJdGhlbgorCQlzeXNyb290X3N0YWdlX2xpYmRpciAkZnJvbSR7bGliZGlyfSAkdG8ke2xpYmRpcn0KKwlmaQorCWlmIFsgLWQgJGZyb20ke2Jhc2VfbGliZGlyfSBdCisJdGhlbgorCQlzeXNyb290X3N0YWdlX2xpYmRpciAkZnJvbSR7YmFzZV9saWJkaXJ9ICR0byR7YmFzZV9saWJkaXJ9CisJZmkKKwlpZiBbIC1kICRmcm9tJHtub25hcmNoX2Jhc2VfbGliZGlyfSBdCisJdGhlbgorCQlzeXNyb290X3N0YWdlX2xpYmRpciAkZnJvbSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0gJHRvJHtub25hcmNoX2Jhc2VfbGliZGlyfQorCWZpCisJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2RhdGFkaXJ9ICR0byR7ZGF0YWRpcn0KKwkjIFdlIGRvbid0IGNhcmUgYWJvdXQgZG9jcy9pbmZvL21hbnBhZ2VzL2xvY2FsZXMKKwlybSAtcmYgJHRvJHttYW5kaXJ9LyAkdG8ke2RvY2Rpcn0vICR0byR7aW5mb2Rpcn0vICR7dG99JHtkYXRhZGlyfS9sb2NhbGUvCisJcm0gLXJmICR0byR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyAkdG8ke2RhdGFkaXJ9L2ZvbnRzLyAkdG8ke2RhdGFkaXJ9L3BpeG1hcHMvCit9CisKK3N5c3Jvb3Rfc3RhZ2VfYWxsKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlycyAke0R9ICR7U1lTUk9PVF9ERVNURElSfQorfQorCitweXRob24gc3lzcm9vdF9zdHJpcCAoKSB7CisgICAgaW1wb3J0IHN0YXQsIGVycm5vCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1NZU1JPT1RfREVTVERJUicsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgb3MuY2hkaXIoZHZhcikKKworICAgICMgUmV0dXJuIHR5cGUgKGJpdHMpOgorICAgICMgMCAtIG5vdCBlbGYKKyAgICAjIDEgLSBFTEYKKyAgICAjIDIgLSBzdHJpcHBlZAorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisgICAgZGVmIGlzRUxGKHBhdGgpOgorICAgICAgICB0eXBlID0gMAorICAgICAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiZmlsZSBcIiVzXCIiICUgcGF0aC5yZXBsYWNlKCJcIiIsICJcXFwiIikpCisKKyAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgYmIuZXJyb3IoInNwbGl0X2FuZF9zdHJpcF9maWxlczogJ2ZpbGUgJXMnIGZhaWxlZCIgJSBwYXRoKQorICAgICAgICAgICAgcmV0dXJuIHR5cGUKKworICAgICAgICAjIE5vdCBzdHJpcHBlZAorICAgICAgICBpZiAiRUxGIiBpbiByZXN1bHQ6CisgICAgICAgICAgICB0eXBlIHw9IDEKKyAgICAgICAgICAgIGlmICJub3Qgc3RyaXBwZWQiIG5vdCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSAyCisgICAgICAgICAgICBpZiAiZXhlY3V0YWJsZSIgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gNAorICAgICAgICAgICAgaWYgInNoYXJlZCIgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gOAorICAgICAgICByZXR1cm4gdHlwZQorCisKKyAgICBlbGZmaWxlcyA9IHt9CisgICAgaW5vZGVzID0ge30KKyAgICBsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSkKKyAgICBiYXNlbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGR2YXIgKyBvcy5zZXAgKyBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSkKKyAgICBpZiAoZC5nZXRWYXIoJ0lOSElCSVRfU1lTUk9PVF9TVFJJUCcsIFRydWUpICE9ICcxJyk6CisgICAgICAgICMKKyAgICAgICAgIyBGaXJzdCBsZXRzIGZpZ3VyZSBvdXQgYWxsIG9mIHRoZSBmaWxlcyB3ZSBtYXkgaGF2ZSB0byBwcm9jZXNzCisgICAgICAgICMKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZHZhcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGx0YXJnZXQgPSBvZS5wYXRoLnJlYWxwYXRoKGZpbGUsIGR2YXIsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzID0gb3MubHN0YXQobHRhcmdldCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAoZXJyLCBzdHJlcnJvcikgPSBlLmFyZ3MKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICMgU2tpcCBicm9rZW4gc3ltbGlua3MKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIENoZWNrIGl0cyBhbiBleGN1dGFibGUKKyAgICAgICAgICAgICAgICBpZiAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYVVNSKSBvciAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYR1JQKSBvciAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYT1RIKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBvciAoKGZpbGUuc3RhcnRzd2l0aChsaWJkaXIpIG9yIGZpbGUuc3RhcnRzd2l0aChiYXNlbGliZGlyKSkgYW5kICIuc28iIGluIGYpOgorICAgICAgICAgICAgICAgICAgICAjIElmIGl0J3MgYSBzeW1saW5rLCBhbmQgcG9pbnRzIHRvIGFuIEVMRiBmaWxlLCB3ZSBjYXB0dXJlIHRoZSByZWFkbGluayB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICMgSXQncyBhIGZpbGUgKG9yIGhhcmRsaW5rKSwgbm90IGEgbGluaworICAgICAgICAgICAgICAgICAgICAjIC4uLmJ1dCBpcyBpdCBFTEYsIGFuZCBpcyBpdCBhbHJlYWR5IHN0cmlwcGVkPworICAgICAgICAgICAgICAgICAgICBlbGZfZmlsZSA9IGlzRUxGKGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJGaWxlICclcycgZnJvbSAlcyB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgdGhpcyB3aWxsIHByZXZlbnQgZnV0dXJlIGRlYnVnZ2luZyEiICUgKGZpbGVbbGVuKGR2YXIpOl0sIHBuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzLnN0X2lubyBpbiBpbm9kZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhpbm9kZXNbcy5zdF9pbm9dLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZXNbcy5zdF9pbm9dID0gZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnJlYWsgaGFyZGxpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmaWxlLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZmZpbGVzW2ZpbGVdID0gZWxmX2ZpbGUKKworICAgICAgICAjCisgICAgICAgICMgTm93IHN0cmlwIHRoZW0gKGluIHBhcmFsbGVsKQorICAgICAgICAjCisgICAgICAgIHN0cmlwID0gZC5nZXRWYXIoIlNUUklQIiwgVHJ1ZSkKKyAgICAgICAgc2ZpbGVzID0gW10KKyAgICAgICAgZm9yIGZpbGUgaW4gZWxmZmlsZXM6CisgICAgICAgICAgICBlbGZfZmlsZSA9IGludChlbGZmaWxlc1tmaWxlXSkKKyAgICAgICAgICAgICNiYi5ub3RlKCJTdHJpcCAlcyIgJSBmaWxlKQorICAgICAgICAgICAgc2ZpbGVzLmFwcGVuZCgoZmlsZSwgZWxmX2ZpbGUsIHN0cmlwKSkKKworICAgICAgICBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhzZmlsZXMsIG9lLnBhY2thZ2UucnVuc3RyaXApCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFt1bWFza10gPSAiMDIyIgorCithZGR0YXNrIHBvcHVsYXRlX3N5c3Jvb3QgYWZ0ZXIgZG9faW5zdGFsbAorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgPz0gIiIKK1NZU1JPT1RfREVTVERJUiA9ICIke1dPUktESVJ9L3N5c3Jvb3QtZGVzdGRpci8iCitTWVNST09UX0xPQ0sgPSAiJHtTVEFHSU5HX0RJUn0vc3RhZ2luZy5sb2NrIgorCisjIFdlIGNsZWFuIG91dCBhbnkgZXhpc3Rpbmcgc3N0YXRlIGZyb20gdGhlIHN5c3Jvb3QgaWYgd2UgcmVydW4gY29uZmlndXJlCitweXRob24gc3lzcm9vdF9jbGVhbnNzdGF0ZSAoKSB7CisgICAgc3MgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCwgInBvcHVsYXRlX3N5c3Jvb3QiKQorICAgIHNzdGF0ZV9jbGVhbihzcywgZCkKK30KK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gInN5c3Jvb3RfY2xlYW5zc3RhdGUiCisKKworQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OID0gInN5c3Jvb3RfY2hlY2toYXNoZXMiCisKK2RlZiBzeXNyb290X2NoZWNraGFzaGVzKGNvdmVyZWQsIHRhc2tuYW1lcywgZm5pZHMsIGZucywgZCwgaW52YWxpZHRhc2tzID0gTm9uZSk6CisgICAgcHJvYmxlbXMgPSBzZXQoKQorICAgIGNvbmZpZ3VyZWZuaWRzID0gc2V0KCkKKyAgICBpZiBub3QgaW52YWxpZHRhc2tzOgorICAgICAgICBpbnZhbGlkdGFza3MgPSB4cmFuZ2UobGVuKHRhc2tuYW1lcykpCisgICAgZm9yIHRhc2sgaW4gaW52YWxpZHRhc2tzOgorICAgICAgICBpZiB0YXNrbmFtZXNbdGFza10gPT0gImRvX2NvbmZpZ3VyZSIgYW5kIHRhc2sgbm90IGluIGNvdmVyZWQ6CisgICAgICAgICAgICBjb25maWd1cmVmbmlkcy5hZGQoZm5pZHNbdGFza10pCisgICAgZm9yIHRhc2sgaW4gY292ZXJlZDoKKyAgICAgICAgaWYgdGFza25hbWVzW3Rhc2tdID09ICJkb19wb3B1bGF0ZV9zeXNyb290IiBhbmQgZm5pZHNbdGFza10gaW4gY29uZmlndXJlZm5pZHM6CisgICAgICAgICAgICBwcm9ibGVtcy5hZGQodGFzaykKKyAgICByZXR1cm4gcHJvYmxlbXMKKworcHl0aG9uIGRvX3BvcHVsYXRlX3N5c3Jvb3QgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygic3lzcm9vdF9zdGFnZV9hbGwiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygic3lzcm9vdF9zdHJpcCIsIGQpCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIG11bHRpcHJvdiA9IGQuZ2V0VmFyKCJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiLCBUcnVlKS5zcGxpdCgpCisgICAgcHJvdmRpciA9IGQuZXhwYW5kKCIke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfcHJlZml4fS9zeXNyb290LXByb3ZpZGVycy8iKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihwcm92ZGlyKQorICAgIGZvciBwIGluIGQuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIHAgaW4gbXVsdGlwcm92OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcCA9IHAucmVwbGFjZSgiLyIsICJfIikKKyAgICAgICAgd2l0aCBvcGVuKHByb3ZkaXIgKyBwLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHBuKQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3ZhcmRlcHNdICs9ICIke1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU30iCitkb19wb3B1bGF0ZV9zeXNyb290W3ZhcmRlcHNleGNsdWRlXSArPSAiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIgorCitTU1RBVEVUQVNLUyArPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbY2xlYW5kaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIke01BQ0hJTkV9IgorCitweXRob24gZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzbGludXguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGVmOWE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzbGludXguYmJjbGFzcwpAQCAtMCwwICsxLDE5MCBAQAorIyBzeXNsaW51eC5iYmNsYXNzCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKKyMgUHJvdmlkZSBzeXNsaW51eCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKworIyBFeHRlcm5hbCB2YXJpYWJsZXMKKyMgJHtJTklUUkR9IC0gaW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpCisjICR7Uk9PVEZTfSAtIGluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChvcHRpb25hbCkKKyMgJHtBVVRPX1NZU0xJTlVYTUVOVX0gLSBzZXQgdGhpcyB0byAxIHRvIGVuYWJsZSBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudQorIyAke0xBQkVMU30gLSBhIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgdGhlIGF1dG9tYXRpYyBjb25maWcKKyMgJHtBUFBFTkR9IC0gYW4gb3ZlcnJpZGUgbGlzdCBvZiBhcHBlbmQgc3RyaW5ncyBmb3IgZWFjaCBsYWJlbAorIyAke1NZU0xJTlVYX09QVFN9IC0gYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgc3lzbGludXggZmlsZSAnOycgZGVsaW1pdGVkCisjICR7U1lTTElOVVhfU1BMQVNIfSAtIEEgYmFja2dyb3VuZCBmb3IgdGhlIHZnYSBib290IG1lbnUgaWYgdXNpbmcgdGhlIGJvb3QgbWVudQorIyAke1NZU0xJTlVYX0RFRkFVTFRfQ09OU09MRX0gLSBzZXQgdG8gImNvbnNvbGU9dHR5WCIgdG8gY2hhbmdlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZQorIyAke1NZU0xJTlVYX1NFUklBTH0gLSBTZXQgYW4gYWx0ZXJuYXRlIHNlcmlhbCBwb3J0IG9yIHR1cm4gb2ZmIHNlcmlhbCB3aXRoIGVtcHR5IHN0cmluZworIyAke1NZU0xJTlVYX1NFUklBTF9UVFl9IC0gU2V0IGFsdGVybmF0ZSBjb25zb2xlPXR0eS4uLiBrZXJuZWwgYm9vdCBhcmd1bWVudAorIyAke1NZU0xJTlVYX0tFUk5FTF9BUkdTfSAtIEFkZCBhZGRpdGlvbmFsIGtlcm5lbCBhcmd1bWVudHMKKworZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtNTFBSRUZJWH1zeXNsaW51eDpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c2xpbnV4LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitTWVNMSU5VWENGRyAgPSAiJHtTfS9zeXNsaW51eC5jZmciCisKK0lTT0xJTlVYRElSID0gIi9pc29saW51eCIKK1NZU0xJTlVYRElSID0gIi8iCisjIFRoZSBrZXJuZWwgaGFzIGFuIGludGVybmFsIGRlZmF1bHQgY29uc29sZSwgd2hpY2ggeW91IGNhbiBvdmVycmlkZSB3aXRoCisjIGEgY29uc29sZT0uLi5zb21lX3R0eS4uLgorU1lTTElOVVhfREVGQVVMVF9DT05TT0xFID89ICIiCitTWVNMSU5VWF9TRVJJQUwgPz0gIjAgMTE1MjAwIgorU1lTTElOVVhfU0VSSUFMX1RUWSA/PSAiY29uc29sZT10dHlTMCwxMTUyMDAiCitJU09fQk9PVElNRyA9ICJpc29saW51eC9pc29saW51eC5iaW4iCitJU09fQk9PVENBVCA9ICJpc29saW51eC9ib290LmNhdCIKK01LSVNPRlNfT1BUSU9OUyA9ICItbm8tZW11bC1ib290IC1ib290LWxvYWQtc2l6ZSA0IC1ib290LWluZm8tdGFibGUiCitBUFBFTkRfcHJlcGVuZCA9ICIgJHtTWVNMSU5VWF9ST09UfSAiCisKKyMgTmVlZCBVVUlEIHV0aWxpdHkgY29kZS4KK2luaGVyaXQgZnMtdXVpZAorCitzeXNsaW51eF9wb3B1bGF0ZSgpIHsKKwlERVNUPSQxCisJQk9PVERJUj0kMgorCUNGR05BTUU9JDMKKworCWluc3RhbGwgLWQgJHtERVNUfSR7Qk9PVERJUn0KKworCSMgSW5zdGFsbCB0aGUgY29uZmlnIGZpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7U1lTTElOVVhDRkd9ICR7REVTVH0ke0JPT1RESVJ9LyR7Q0ZHTkFNRX0KKwlpZiBbICIke0FVVE9fU1lTTElOVVhNRU5VfSIgPSAxIF0gOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvdmVzYW1lbnUuYzMyICR7REVTVH0ke0JPT1RESVJ9L3Zlc2FtZW51LmMzMgorCQlpbnN0YWxsIC1tIDA0NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2xpYmNvbTMyLmMzMiAke0RFU1R9JHtCT09URElSfS9saWJjb20zMi5jMzIKKwkJaW5zdGFsbCAtbSAwNDQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9saWJ1dGlsLmMzMiAke0RFU1R9JHtCT09URElSfS9saWJ1dGlsLmMzMgorCQlpZiBbICIke1NZU0xJTlVYX1NQTEFTSH0iICE9ICIiIF0gOyB0aGVuCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWF9TUExBU0h9ICR7REVTVH0ke0JPT1RESVJ9L3NwbGFzaC5sc3MKKwkJZmkKKwlmaQorfQorCitzeXNsaW51eF9pc29fcG9wdWxhdGUoKSB7CisJaXNvX2Rpcj0kMQorCXN5c2xpbnV4X3BvcHVsYXRlICRpc29fZGlyICR7SVNPTElOVVhESVJ9IGlzb2xpbnV4LmNmZworCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvaXNvbGludXguYmluICRpc29fZGlyJHtJU09MSU5VWERJUn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2xkbGludXguYzMyICRpc29fZGlyJHtJU09MSU5VWERJUn0KK30KKworc3lzbGludXhfaGRkaW1nX3BvcHVsYXRlKCkgeworCWhkZF9kaXI9JDEKKwlzeXNsaW51eF9wb3B1bGF0ZSAkaGRkX2RpciAke1NZU0xJTlVYRElSfSBzeXNsaW51eC5jZmcKKwlpbnN0YWxsIC1tIDA0NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2xkbGludXguc3lzICRoZGRfZGlyJHtTWVNMSU5VWERJUn0vbGRsaW51eC5zeXMKK30KKworc3lzbGludXhfaGRkaW1nX2luc3RhbGwoKSB7CisJc3lzbGludXggJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGltZworfQorCitzeXNsaW51eF9oZGRkaXJlY3RfaW5zdGFsbCgpIHsKKwlERVNUPSQxCisJc3lzbGludXggJERFU1QKK30KKworcHl0aG9uIGJ1aWxkX3N5c2xpbnV4X2NmZyAoKSB7CisgICAgaW1wb3J0IGNvcHkKKyAgICBpbXBvcnQgc3lzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKyAgICAgICAgCisgICAgbGFiZWxzID0gZC5nZXRWYXIoJ0xBQkVMUycsIFRydWUpCisgICAgaWYgbm90IGxhYmVsczoKKyAgICAgICAgYmIuZGVidWcoMSwgIkxBQkVMUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorICAgIAorICAgIGlmIGxhYmVscyA9PSBbXToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIGxhYmVscywgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgY2ZpbGUgPSBkLmdldFZhcignU1lTTElOVVhDRkcnLCBUcnVlKQorICAgIGlmIG5vdCBjZmlsZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnVW5hYmxlIHRvIHJlYWQgU1lTTElOVVhDRkcnKQorCisgICAgdHJ5OgorICAgICAgICBjZmdmaWxlID0gZmlsZShjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisKKyAgICBvcHRzID0gZC5nZXRWYXIoJ1NZU0xJTlVYX09QVFMnLCBUcnVlKQorCisgICAgaWYgb3B0czoKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRzLnNwbGl0KCc7Jyk6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclc1xuJyAlIG9wdCkKKworICAgIGNmZ2ZpbGUud3JpdGUoJ0FMTE9XT1BUSU9OUyAxXG4nKTsKKyAgICBzeXNsaW51eF9kZWZhdWx0X2NvbnNvbGUgPSBkLmdldFZhcignU1lTTElOVVhfREVGQVVMVF9DT05TT0xFJywgVHJ1ZSkKKyAgICBzeXNsaW51eF9zZXJpYWxfdHR5ID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1NFUklBTF9UVFknLCBUcnVlKQorICAgIHN5c2xpbnV4X3NlcmlhbCA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9TRVJJQUwnLCBUcnVlKQorICAgIGlmIHN5c2xpbnV4X3NlcmlhbDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnU0VSSUFMICVzXG4nICUgc3lzbGludXhfc2VyaWFsKQorCisgICAgbWVudSA9IGQuZ2V0VmFyKCdBVVRPX1NZU0xJTlVYTUVOVScsIFRydWUpCisKKyAgICBpZiBtZW51IGFuZCBzeXNsaW51eF9zZXJpYWw6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0RFRkFVTFQgR3JhcGhpY3MgY29uc29sZSAlc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnREVGQVVMVCAlc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisKKyAgICB0aW1lb3V0ID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1RJTUVPVVQnLCBUcnVlKQorCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnVElNRU9VVCAlc1xuJyAlIHRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnVElNRU9VVCA1MFxuJykKKworICAgIHByb21wdCA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9QUk9NUFQnLCBUcnVlKQorICAgIGlmIHByb21wdDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnUFJPTVBUICVzXG4nICUgcHJvbXB0KQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1BST01QVCAxXG4nKQorCisgICAgaWYgbWVudToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndWkgdmVzYW1lbnUuYzMyXG4nKQorICAgICAgICBjZmdmaWxlLndyaXRlKCdtZW51IHRpdGxlIFNlbGVjdCBrZXJuZWwgb3B0aW9ucyBhbmQgYm9vdCBrZXJuZWxcbicpCisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ21lbnUgdGFibXNnIFByZXNzIFtUYWJdIHRvIGVkaXQsIFtSZXR1cm5dIHRvIHNlbGVjdFxuJykKKyAgICAgICAgc3BsYXNoID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1NQTEFTSCcsIFRydWUpCisgICAgICAgIGlmIHNwbGFzaDoKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ21lbnUgYmFja2dyb3VuZCBzcGxhc2gubHNzXG4nKQorICAgIAorICAgIGZvciBsYWJlbCBpbiBsYWJlbHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG92ZXJyaWRlczoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ09WRVJSSURFUyBub3QgZGVmaW5lZCcpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgbGFiZWwgKyAnOicgKyBvdmVycmlkZXMpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIAorICAgICAgICBidHlwZXMgPSBbIFsgIiIsIHN5c2xpbnV4X2RlZmF1bHRfY29uc29sZSBdIF0KKyAgICAgICAgaWYgbWVudSBhbmQgc3lzbGludXhfc2VyaWFsOgorICAgICAgICAgICAgYnR5cGVzID0gWyBbICJHcmFwaGljcyBjb25zb2xlICIsIHN5c2xpbnV4X2RlZmF1bHRfY29uc29sZSAgXSwKKyAgICAgICAgICAgICAgICBbICJTZXJpYWwgY29uc29sZSAiLCBzeXNsaW51eF9zZXJpYWxfdHR5IF0gXQorCisgICAgICAgIGZvciBidHlwZSBpbiBidHlwZXM6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdMQUJFTCAlcyVzXG5LRVJORUwgL3ZtbGludXpcbicgJSAoYnR5cGVbMF0sIGxhYmVsKSkKKworICAgICAgICAgICAgZXhhcmdzID0gZC5nZXRWYXIoJ1NZU0xJTlVYX0tFUk5FTF9BUkdTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGV4YXJnczoKKyAgICAgICAgICAgICAgICBidHlwZVsxXSArPSAiICIgKyBleGFyZ3MKKworICAgICAgICAgICAgYXBwZW5kID0gbG9jYWxkYXRhLmdldFZhcignQVBQRU5EJywgVHJ1ZSkKKyAgICAgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdBUFBFTkQgJykKKworICAgICAgICAgICAgICAgIGlmIGluaXRyZDoKKyAgICAgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnaW5pdHJkPS9pbml0cmQgJykKKworICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0xBQkVMPSVzICclIChsYWJlbCkpCisgICAgICAgICAgICAgICAgYXBwZW5kID0gcmVwbGFjZV9yb290ZnNfdXVpZChkLCBhcHBlbmQpCisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnJXMgJXNcbicgJSAoYXBwZW5kLCBidHlwZVsxXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0FQUEVORCAlc1xuJyAlIGJ0eXBlWzFdKQorCisgICAgY2ZnZmlsZS5jbG9zZSgpCit9CitidWlsZF9zeXNsaW51eF9jZmdbdmFyZGVwc10gKz0gIkFQUEVORCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmU3MmM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvc3lzdGVtZC5iYmNsYXNzCkBAIC0wLDAgKzEsMTkzIEBACisjIFRoZSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGhhdmUgc3lzdGVtZCBwYWNrYWdpbmcgc2NyaXB0cyBhZGRlZC4gIEZvcgorIyBlYWNoIGVudHJ5LCBvcHRpb25hbGx5IGhhdmUgYSBTWVNURU1EX1NFUlZJQ0VfW3BhY2thZ2VdIHRoYXQgbGlzdHMgdGhlIHNlcnZpY2UKKyMgZmlsZXMgaW4gdGhpcyBwYWNrYWdlLiAgSWYgdGhpcyB2YXJpYWJsZSBpc24ndCBzZXQsIFtwYWNrYWdlXS5zZXJ2aWNlIGlzIHVzZWQuCitTWVNURU1EX1BBQ0tBR0VTID89ICIke1BOfSIKK1NZU1RFTURfUEFDS0FHRVNfY2xhc3MtbmF0aXZlID89ICIiCitTWVNURU1EX1BBQ0tBR0VTX2NsYXNzLW5hdGl2ZXNkayA/PSAiIgorCisjIFdoZXRoZXIgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHNlcnZpY2VzIG9uIGluc3RhbGxhdGlvbi4KK1NZU1RFTURfQVVUT19FTkFCTEUgPz89ICJlbmFibGUiCisKKyMgVGhpcyBjbGFzcyB3aWxsIGJlIGluY2x1ZGVkIGluIGFueSByZWNpcGUgdGhhdCBzdXBwb3J0cyBzeXN0ZW1kIGluaXQgc2NyaXB0cywKKyMgZXZlbiBpZiBzeXN0ZW1kIGlzIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMuICBBcyBzdWNoIGRvbid0IG1ha2UgYW55IGNoYW5nZXMKKyMgZGlyZWN0bHkgYnV0IGNoZWNrIHRoZSBESVNUUk9fRkVBVFVSRVMgZmlyc3QuCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgIyBJZiB0aGUgZGlzdHJvIGZlYXR1cmVzIGhhdmUgc3lzdGVtZCBidXQgbm90IHN5c3Zpbml0LCBpbmhpYml0IHVwZGF0ZS1yY2QKKyAgICAjIGZyb20gZG9pbmcgYW55IHdvcmsgc28gdGhhdCBwdXJlLXN5c3RlbWQgaW1hZ2VzIGRvbid0IGhhdmUgcmVkdW5kYW50IGluaXQKKyAgICAjIGZpbGVzLgorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5hcHBlbmRWYXIoIkRFUEVORFMiLCAiIHN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSIpCisgICAgICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK3N5c3RlbWRfcG9zdGluc3QoKSB7CitPUFRTPSIiCisKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgT1BUUz0iLS1yb290PSREIgorZmkKKworaWYgdHlwZSBzeXN0ZW1jdGwgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCXN5c3RlbWN0bCAkT1BUUyAke1NZU1RFTURfQVVUT19FTkFCTEV9ICR7U1lTVEVNRF9TRVJWSUNFfQorCisJaWYgWyAteiAiJEQiIC1hICIke1NZU1RFTURfQVVUT19FTkFCTEV9IiA9ICJlbmFibGUiIF07IHRoZW4KKwkJc3lzdGVtY3RsIHJlc3RhcnQgJHtTWVNURU1EX1NFUlZJQ0V9CisJZmkKK2ZpCit9CisKK3N5c3RlbWRfcHJlcm0oKSB7CitPUFRTPSIiCisKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgT1BUUz0iLS1yb290PSREIgorZmkKKworaWYgdHlwZSBzeXN0ZW1jdGwgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCXN5c3RlbWN0bCBzdG9wICR7U1lTVEVNRF9TRVJWSUNFfQorCWZpCisKKwlzeXN0ZW1jdGwgJE9QVFMgZGlzYWJsZSAke1NZU1RFTURfU0VSVklDRX0KK2ZpCit9CisKKworc3lzdGVtZF9wb3B1bGF0ZV9wYWNrYWdlc1t2YXJkZXBzXSArPSAic3lzdGVtZF9wcmVybSBzeXN0ZW1kX3Bvc3RpbnN0Igorc3lzdGVtZF9wb3B1bGF0ZV9wYWNrYWdlc1t2YXJkZXBzZXhjbHVkZV0gKz0gIk9WRVJSSURFUyIKKworCitweXRob24gc3lzdGVtZF9wb3B1bGF0ZV9wYWNrYWdlcygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBnZXRfcGFja2FnZV92YXIoZCwgdmFyLCBwa2cpOgorICAgICAgICB2YWwgPSAoZC5nZXRWYXIoJyVzXyVzJyAlICh2YXIsIHBrZyksIFRydWUpIG9yICIiKS5zdHJpcCgpCisgICAgICAgIGlmIHZhbCA9PSAiIjoKKyAgICAgICAgICAgIHZhbCA9IChkLmdldFZhcih2YXIsIFRydWUpIG9yICIiKS5zdHJpcCgpCisgICAgICAgIHJldHVybiB2YWwKKworICAgICMgQ2hlY2sgaWYgc3lzdGVtZC1wYWNrYWdlcyBhbHJlYWR5IGluY2x1ZGVkIGluIFBBQ0tBR0VTCisgICAgZGVmIHN5c3RlbWRfY2hlY2tfcGFja2FnZShwa2dfc3lzdGVtZCk6CisgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ19zeXN0ZW1kIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBiYi5lcnJvcignJXMgZG9lcyBub3QgYXBwZWFyIGluIHBhY2thZ2UgbGlzdCwgcGxlYXNlIGFkZCBpdCcgJSBwa2dfc3lzdGVtZCkKKworCisgICAgZGVmIHN5c3RlbWRfZ2VuZXJhdGVfcGFja2FnZV9zY3JpcHRzKHBrZyk6CisgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgc3lzdGVtZCBjYWxscyB0byBwb3N0aW5zdC9wb3N0cm0gZm9yICVzJyAlIHBrZykKKworICAgICAgICAjIEFkZCBwa2cgdG8gdGhlIG92ZXJyaWRlcyBzbyB0aGF0IGl0IGZpbmRzIHRoZSBTWVNURU1EX1NFUlZJQ0VfcGtnCisgICAgICAgICMgdmFyaWFibGUuCisgICAgICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgIGxvY2FsZGF0YS5wcmVwZW5kVmFyKCJPVkVSUklERVMiLCBwa2cgKyAiOiIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBsb2NhbGRhdGEuZ2V0VmFyKCdzeXN0ZW1kX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHByZXJtID0gZC5nZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwcmVybToKKyAgICAgICAgICAgIHByZXJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwcmVybSArPSBsb2NhbGRhdGEuZ2V0VmFyKCdzeXN0ZW1kX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIHByZXJtKQorCisKKyAgICAjIEFkZCBmaWxlcyB0byBGSUxFU18qLXN5c3RlbWQgaWYgZXhpc3RlbnQgYW5kIG5vdCBhbHJlYWR5IGRvbmUKKyAgICBkZWYgc3lzdGVtZF9hcHBlbmRfZmlsZShwa2dfc3lzdGVtZCwgZmlsZV9hcHBlbmQpOgorICAgICAgICBhcHBlbmRlZCA9IEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBmaWxlX2FwcGVuZCkpOgorICAgICAgICAgICAgdmFyX25hbWUgPSAiRklMRVNfIiArIHBrZ19zeXN0ZW1kCisgICAgICAgICAgICBmaWxlcyA9IGQuZ2V0VmFyKHZhcl9uYW1lLCBGYWxzZSkgb3IgIiIKKyAgICAgICAgICAgIGlmIGZpbGVfYXBwZW5kIG5vdCBpbiBmaWxlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKHZhcl9uYW1lLCAiICIgKyBmaWxlX2FwcGVuZCkKKyAgICAgICAgICAgICAgICBhcHBlbmRlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIGFwcGVuZGVkCisKKyAgICAjIEFkZCBzeXN0ZW1kIGZpbGVzIHRvIEZJTEVTXyotc3lzdGVtZCwgcGFyc2UgZm9yIEFsc289IGFuZCBmb2xsb3cgcmVjdXJzaXZlCisgICAgZGVmIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZSwga2V5cyk6CisgICAgICAgICMgYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uCisgICAgICAgIGlmIHN5c3RlbWRfYXBwZW5kX2ZpbGUocGtnX3N5c3RlbWQsIG9lLnBhdGguam9pbihwYXRoLCBzZXJ2aWNlKSk6CisgICAgICAgICAgICBmdWxscGF0aCA9IG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBwYXRoLCBzZXJ2aWNlKQorICAgICAgICAgICAgaWYgc2VydmljZS5maW5kKCcuc2VydmljZScpICE9IC0xOgorICAgICAgICAgICAgICAgICMgZm9yICouc2VydmljZSBhZGQgKkAuc2VydmljZQorICAgICAgICAgICAgICAgIHNlcnZpY2VfYmFzZSA9IHNlcnZpY2UucmVwbGFjZSgnLnNlcnZpY2UnLCAnJykKKyAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIHNlcnZpY2VfYmFzZSArICdALnNlcnZpY2UnLCBrZXlzKQorICAgICAgICAgICAgaWYgc2VydmljZS5maW5kKCcuc29ja2V0JykgIT0gLTE6CisgICAgICAgICAgICAgICAgIyBmb3IgKi5zb2NrZXQgYWRkICouc2VydmljZSBhbmQgKkAuc2VydmljZQorICAgICAgICAgICAgICAgIHNlcnZpY2VfYmFzZSA9IHNlcnZpY2UucmVwbGFjZSgnLnNvY2tldCcsICcnKQorICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZV9iYXNlICsgJy5zZXJ2aWNlJywga2V5cykKKyAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIHNlcnZpY2VfYmFzZSArICdALnNlcnZpY2UnLCBrZXlzKQorICAgICAgICAgICAgZm9yIGtleSBpbiBrZXlzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgIyByZWN1cnNlIGFsbCBkZXBlbmRlbmNpZXMgZm91bmQgaW4ga2V5cyAoJ0Fsc28nOydDb25mbGljdHMnOy4uKSBhbmQgYWRkIHRvIGZpbGVzCisgICAgICAgICAgICAgICAgY21kID0gImdyZXAgJXMgJXMgfCBzZWQgJ3MsJXM9LCxnJyB8IHRyICcsJyAnXFxuJyIgJSAoa2V5LCBmdWxscGF0aCwga2V5KQorICAgICAgICAgICAgICAgIHBpcGUgPSBvcy5wb3BlbihjbWQsICdyJykKKyAgICAgICAgICAgICAgICBsaW5lID0gcGlwZS5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgnXG4nLCAnJykKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBsaW5lLCBrZXlzKQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcGlwZS5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisKKyAgICAjIENoZWNrIHNlcnZpY2UtZmlsZXMgYW5kIGNhbGwgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlIGZvciBlYWNoIGVudHJ5CisgICAgZGVmIHN5c3RlbWRfY2hlY2tfc2VydmljZXMoKToKKyAgICAgICAgc2VhcmNocGF0aHMgPSBbb2UucGF0aC5qb2luKGQuZ2V0VmFyKCJzeXNjb25mZGlyIiwgVHJ1ZSksICJzeXN0ZW1kIiwgInN5c3RlbSIpLF0KKyAgICAgICAgc2VhcmNocGF0aHMuYXBwZW5kKGQuZ2V0VmFyKCJzeXN0ZW1kX3N5c3RlbV91bml0ZGlyIiwgVHJ1ZSkpCisgICAgICAgIHN5c3RlbWRfcGFja2FnZXMgPSBkLmdldFZhcignU1lTVEVNRF9QQUNLQUdFUycsIFRydWUpCisKKyAgICAgICAga2V5cyA9ICdBbHNvJworICAgICAgICAjIHNjYW4gZm9yIGFsbCBpbiBTWVNURU1EX1NFUlZJQ0VbXQorICAgICAgICBmb3IgcGtnX3N5c3RlbWQgaW4gc3lzdGVtZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgZm9yIHNlcnZpY2UgaW4gZ2V0X3BhY2thZ2VfdmFyKGQsICdTWVNURU1EX1NFUlZJQ0UnLCBwa2dfc3lzdGVtZCkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwYXRoX2ZvdW5kID0gJycKKyAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWFyY2hwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIHBhdGgsIHNlcnZpY2UpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfZm91bmQgPSBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIHBhdGhfZm91bmQgIT0gJyc6CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aF9mb3VuZCwgc2VydmljZSwga2V5cykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJTWVNURU1EX1NFUlZJQ0VfJXMgdmFsdWUgJXMgZG9lcyBub3QgZXhpc3QiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKHBrZ19zeXN0ZW1kLCBzZXJ2aWNlKSkKKworICAgICMgUnVuIGFsbCBtb2RpZmljYXRpb25zIG9uY2Ugd2hlbiBjcmVhdGluZyBwYWNrYWdlCisgICAgaWYgb3MucGF0aC5leGlzdHMoZC5nZXRWYXIoIkQiLCBUcnVlKSk6CisgICAgICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ1NZU1RFTURfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgc3lzdGVtZF9jaGVja19wYWNrYWdlKHBrZykKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdTWVNURU1EX1NFUlZJQ0VfJyArIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgc3lzdGVtZF9nZW5lcmF0ZV9wYWNrYWdlX3NjcmlwdHMocGtnKQorICAgICAgICBzeXN0ZW1kX2NoZWNrX3NlcnZpY2VzKCkKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzICIKKworcHl0aG9uIHJtX3N5c3RlbWRfdW5pdGRpciAoKXsKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgc3lzdGVtZF91bml0ZGlyID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIGQuZ2V0VmFyKCdzeXN0ZW1kX3VuaXRkaXInLCBUcnVlKSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3lzdGVtZF91bml0ZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc3lzdGVtZF91bml0ZGlyKQorICAgICAgICBzeXN0ZW1kX2xpYmRpciA9IG9zLnBhdGguZGlybmFtZShzeXN0ZW1kX3VuaXRkaXIpCisgICAgICAgIGlmIChvcy5wYXRoLmV4aXN0cyhzeXN0ZW1kX2xpYmRpcikgYW5kIG5vdCBvcy5saXN0ZGlyKHN5c3RlbWRfbGliZGlyKSk6CisgICAgICAgICAgICBvcy5ybWRpcihzeXN0ZW1kX2xpYmRpcikKK30KK2RvX2luc3RhbGxbcG9zdGZ1bmNzXSArPSAicm1fc3lzdGVtZF91bml0ZGlyICIKKworcHl0aG9uIHJtX3N5c3Zpbml0X2luaXRkZGlyICgpeworICAgIGltcG9ydCBzaHV0aWwKKyAgICBzeXN2X2luaXRkZGlyID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIChkLmdldFZhcignSU5JVF9EX0RJUicsIFRydWUpIG9yICIvZXRjL2luaXQuZCIpKQorCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpIGFuZCBcCisgICAgICAgIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpIGFuZCBcCisgICAgICAgIG9zLnBhdGguZXhpc3RzKHN5c3ZfaW5pdGRkaXIpOgorICAgICAgICBzeXN0ZW1kX3N5c3RlbV91bml0ZGlyID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIGQuZ2V0VmFyKCdzeXN0ZW1kX3N5c3RlbV91bml0ZGlyJywgVHJ1ZSkpCisKKyAgICAgICAgIyBJZiBzeXN0ZW1kX3N5c3RlbV91bml0ZGlyIGNvbnRhaW5zIGFueXRoaW5nLCBkZWxldGUgc3lzdl9pbml0ZGRpcgorICAgICAgICBpZiAob3MucGF0aC5leGlzdHMoc3lzdGVtZF9zeXN0ZW1fdW5pdGRpcikgYW5kIG9zLmxpc3RkaXIoc3lzdGVtZF9zeXN0ZW1fdW5pdGRpcikpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzeXN2X2luaXRkZGlyKQorfQorZG9faW5zdGFsbFtwb3N0ZnVuY3NdICs9ICJybV9zeXN2aW5pdF9pbml0ZGRpciAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVybWluYWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTc3YzZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVybWluYWwuYmJjbGFzcwpAQCAtMCwwICsxLDk0IEBACitPRV9URVJNSU5BTCA/PSAnYXV0bycKK09FX1RFUk1JTkFMW3R5cGVdID0gJ2Nob2ljZScKK09FX1RFUk1JTkFMW2Nob2ljZXNdID0gJ2F1dG8gbm9uZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke0AiICIuam9pbihvLm5hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG8gaW4gb2UudGVybWluYWwucHJpb3JpdGl6ZWQoKSl9JworCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICdFWFRSQV9PRU1BS0UnCitPRV9URVJNSU5BTF9FWFBPUlRTW3R5cGVdID0gJ2xpc3QnCisKK1hBVVRIT1JJVFkgPz0gIiR7SE9NRX0vLlhhdXRob3JpdHkiCitTSEVMTCA/PSAiYmFzaCIKKworCitkZWYgZW1pdF90ZXJtaW5hbF9mdW5jKGNvbW1hbmQsIGVudmRhdGEsIGQpOgorICAgIGNtZF9mdW5jID0gJ2RvX3Rlcm1pbmFsJworCisgICAgZW52ZGF0YS5zZXRWYXIoY21kX2Z1bmMsICdleGVjICcgKyBjb21tYW5kKQorICAgIGVudmRhdGEuc2V0VmFyRmxhZyhjbWRfZnVuYywgJ2Z1bmMnLCAxKQorCisgICAgcnVuZm10ID0gZC5nZXRWYXIoJ0JCX1JVTkZNVCcsIFRydWUpIG9yICJydW4ue2Z1bmN9LntwaWR9IgorICAgIHJ1bmZpbGUgPSBydW5mbXQuZm9ybWF0KGZ1bmM9Y21kX2Z1bmMsIHRhc2s9Y21kX2Z1bmMsIHRhc2tmdW5jPWNtZF9mdW5jLCBwaWQ9b3MuZ2V0cGlkKCkpCisgICAgcnVuZmlsZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignVCcsIFRydWUpLCBydW5maWxlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUocnVuZmlsZSkpCisKKyAgICB3aXRoIG9wZW4ocnVuZmlsZSwgJ3cnKSBhcyBzY3JpcHQ6CisgICAgICAgIHNjcmlwdC53cml0ZSgnIyEvYmluL3NoIC1lXG4nKQorICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYyhjbWRfZnVuYywgc2NyaXB0LCBlbnZkYXRhKQorICAgICAgICBzY3JpcHQud3JpdGUoY21kX2Z1bmMpCisgICAgICAgIHNjcmlwdC53cml0ZSgiXG4iKQorICAgIG9zLmNobW9kKHJ1bmZpbGUsIDA3NTUpCisKKyAgICByZXR1cm4gcnVuZmlsZQorCitkZWYgb2VfdGVybWluYWwoY29tbWFuZCwgdGl0bGUsIGQpOgorICAgIGltcG9ydCBvZS5kYXRhCisgICAgaW1wb3J0IG9lLnRlcm1pbmFsCisKKyAgICBlbnZkYXRhID0gYmIuZGF0YS5pbml0KCkKKworICAgIGZvciB2IGluIG9zLmVudmlyb246CisgICAgICAgIGVudmRhdGEuc2V0VmFyKHYsIG9zLmVudmlyb25bdl0pCisgICAgICAgIGVudmRhdGEuc2V0VmFyRmxhZyh2LCAnZXhwb3J0JywgMSkKKworICAgIGZvciBleHBvcnQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnT0VfVEVSTUlOQUxfRVhQT1JUUycsIGQpOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGV4cG9ydCwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcy5lbnZpcm9uW2V4cG9ydF0gPSBzdHIodmFsdWUpCisgICAgICAgICAgICBlbnZkYXRhLnNldFZhcihleHBvcnQsIHN0cih2YWx1ZSkpCisgICAgICAgICAgICBlbnZkYXRhLnNldFZhckZsYWcoZXhwb3J0LCAnZXhwb3J0JywgMSkKKyAgICAgICAgaWYgZXhwb3J0ID09ICJQU0VVRE9fRElTQUJMRUQiOgorICAgICAgICAgICAgaWYgIlBTRVVET19VTkxPQUQiIGluIG9zLmVudmlyb246CisgICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25bIlBTRVVET19VTkxPQUQiXQorICAgICAgICAgICAgZW52ZGF0YS5kZWxWYXIoIlBTRVVET19VTkxPQUQiKQorCisgICAgIyBBZGQgaW4gYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSB1c2VyJ3Mgb3JpZ2luYWwgZW52aXJvbm1lbnQgd2hpY2gKKyAgICAjIGhhdmVuJ3Qgc3Vic2VxdW50bHkgYmVlbiBzZXQvY2hhbmdlZAorICAgIG9yaWdiYmVudiA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpIG9yIHt9CisgICAgZm9yIGtleSBpbiBvcmlnYmJlbnY6CisgICAgICAgIGlmIGtleSBpbiBlbnZkYXRhOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdmFsdWUgPSBvcmlnYmJlbnYuZ2V0VmFyKGtleSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSBzdHIodmFsdWUpCisgICAgICAgICAgICBlbnZkYXRhLnNldFZhcihrZXksIHN0cih2YWx1ZSkpCisgICAgICAgICAgICBlbnZkYXRhLnNldFZhckZsYWcoa2V5LCAnZXhwb3J0JywgMSkKKworICAgICMgQSBjb21wbGV4IFBTMSBtaWdodCBuZWVkIG1vcmUgZXNjYXBpbmcgb2YgY2hhcnMuCisgICAgIyBMZXRzIG5vdCBleHBvcnQgUFMxIGluc3RlYWQuCisgICAgZW52ZGF0YS5kZWxWYXIoIlBTMSIpCisKKyAgICAjIFJlcGxhY2UgY29tbWFuZCB3aXRoIGFuIGV4ZWN1dGFibGUgd3JhcHBlciBzY3JpcHQKKyAgICBjb21tYW5kID0gZW1pdF90ZXJtaW5hbF9mdW5jKGNvbW1hbmQsIGVudmRhdGEsIGQpCisKKyAgICB0ZXJtaW5hbCA9IG9lLmRhdGEudHlwZWRfdmFsdWUoJ09FX1RFUk1JTkFMJywgZCkubG93ZXIoKQorICAgIGlmIHRlcm1pbmFsID09ICdub25lJzoKKyAgICAgICAgYmIuZmF0YWwoJ0RldnNoZWxsIHVzYWdlIGRpc2FibGVkIHdpdGggT0VfVEVSTUlOQUwnKQorICAgIGVsaWYgdGVybWluYWwgIT0gJ2F1dG8nOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvZS50ZXJtaW5hbC5zcGF3bih0ZXJtaW5hbCwgY29tbWFuZCwgdGl0bGUsIE5vbmUsIGQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IG9lLnRlcm1pbmFsLlVuc3VwcG9ydGVkVGVybWluYWw6CisgICAgICAgICAgICBiYi53YXJuKCdVbnN1cHBvcnRlZCB0ZXJtaW5hbCAiJXMiLCBkZWZhdWx0aW5nIHRvICJhdXRvIicgJQorICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCkKKyAgICAgICAgZXhjZXB0IG9lLnRlcm1pbmFsLkV4ZWN1dGlvbkVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGJiLmZhdGFsKCdVbmFibGUgdG8gc3Bhd24gdGVybWluYWwgJXM6ICVzJyAlICh0ZXJtaW5hbCwgZXhjKSkKKworICAgIHRyeToKKyAgICAgICAgb2UudGVybWluYWwuc3Bhd25fcHJlZmVycmVkKGNvbW1hbmQsIHRpdGxlLCBOb25lLCBkKQorICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5Ob1N1cHBvcnRlZFRlcm1pbmFsczoKKyAgICAgICAgYmIuZmF0YWwoJ05vIHZhbGlkIHRlcm1pbmFsIGZvdW5kLCB1bmFibGUgdG8gb3BlbiBkZXZzaGVsbCcpCisgICAgZXhjZXB0IG9lLnRlcm1pbmFsLkV4ZWN1dGlvbkVycm9yIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBzcGF3biB0ZXJtaW5hbCAlczogJXMnICUgKHRlcm1pbmFsLCBleGMpKQorCitvZV90ZXJtaW5hbFt2YXJkZXBzZXhjbHVkZV0gPSAiQkJfT1JJR0VOViIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS1hdXRvLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UtYXV0by5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDU5OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UtYXV0by5iYmNsYXNzCkBAIC0wLDAgKzEsMjMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisKKyMgUnVuIHRlc3RzIGF1dG9tYXRpY2FsbHkgb24gYW4gaW1hZ2UgYWZ0ZXIgdGhlIGltYWdlIGlzIGNvbnN0cnVjdGVkCisjIChhcyBvcHBvc2VkIHRvIHRlc3RpbWFnZS5iYmNsYXNzIGFsb25lIHdoZXJlIHRlc3RzIG11c3QgYmUgY2FsbGVkCisjIG1hbnVhbGx5IHVzaW5nIGJpdGJha2UgLWMgdGVzdGltYWdlIDxpbWFnZT4pLgorIworIyBOT1RFOiB0byB1c2UgdGhpcyBjbGFzcywgc2ltcGx5IHNldCBURVNUX0lNQUdFID0gIjEiIC0gbm8gbmVlZCB0bworIyBpbmhlcml0IGl0IHNpbmNlIHRoYXQgd2lsbCBiZSBkb25lIGluIGltYWdlLmJiY2xhc3Mgd2hlbiB0aGlzIHZhcmlhYmxlCisjIGhhcyBiZWVuIHNldC4KKyMKKyMgU2VlIHRlc3RpbWFnZS5iYmNsYXNzIGZvciB0aGUgdGVzdCBpbXBsZW1lbnRhdGlvbi4KKworaW5oZXJpdCB0ZXN0aW1hZ2UKKworcHl0aG9uIGRvX3Rlc3RpbWFnZV9hdXRvKCkgeworICAgIHRlc3RpbWFnZV9tYWluKGQpCit9CithZGR0YXNrIHRlc3RpbWFnZV9hdXRvIGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19yb290ZnMKK2RvX3Rlc3RpbWFnZV9hdXRvW2RlcGVuZHNdICs9ICIke1RFU1RJTUFHRURFUEVORFN9IgorZG9fdGVzdGltYWdlX2F1dG9bbG9ja2ZpbGVzXSArPSAiJHtURVNUSU1BR0VMT0NLfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5MThiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDIyIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworCisjIHRlc3RpbWFnZS5iYmNsYXNzIGVuYWJsZXMgdGVzdGluZyBvZiBxZW11IGltYWdlcyB1c2luZyBweXRob24gdW5pdHRlc3RzLgorIyBNb3N0IG9mIHRoZSB0ZXN0cyBhcmUgY29tbWFuZHMgcnVuIG9uIHRhcmdldCBpbWFnZSBvdmVyIHNzaC4KKyMgVG8gdXNlIGl0IGFkZCB0ZXN0aW1hZ2UgdG8gZ2xvYmFsIGluaGVyaXQgYW5kIGNhbGwgeW91ciB0YXJnZXQgaW1hZ2Ugd2l0aCAtYyB0ZXN0aW1hZ2UKKyMgWW91IGNhbiB0cnkgaXQgb3V0IGxpa2UgdGhpczoKKyMgLSBmaXJzdCBidWlsZCBhIHFlbXUgY29yZS1pbWFnZS1zYXRvCisjIC0gYWRkIElOSEVSSVQgKz0gInRlc3RpbWFnZSIgaW4gbG9jYWwuY29uZgorIyAtIHRoZW4gYml0YmFrZSBjb3JlLWltYWdlLXNhdG8gLWMgdGVzdGltYWdlLiBUaGF0IHdpbGwgcnVuIGEgc3RhbmRhcmQgc3VpdGUgb2YgdGVzdHMuCisKKyMgWW91IGNhbiBzZXQgKG9yIGFwcGVuZCB0bykgVEVTVF9TVUlURVMgaW4gbG9jYWwuY29uZiB0byBzZWxlY3QgdGhlIHRlc3RzCisjIHdoaWNoIHlvdSB3YW50IHRvIHJ1biBmb3IgeW91ciB0YXJnZXQuCisjIFRoZSB0ZXN0IG5hbWVzIGFyZSB0aGUgbW9kdWxlIG5hbWVzIGluIG1ldGEvbGliL29lcWEvcnVudGltZS4KKyMgRWFjaCBuYW1lIGluIFRFU1RfU1VJVEVTIHJlcHJlc2VudHMgYSByZXF1aXJlZCB0ZXN0IGZvciB0aGUgaW1hZ2UuIChubyBza2lwcGluZyBhbGxvd2VkKQorIyBBcHBlbmRpbmcgImF1dG8iIG1lYW5zIHRoYXQgaXQgd2lsbCB0cnkgdG8gcnVuIGFsbCB0ZXN0cyB0aGF0IGFyZSBzdWl0YWJsZSBmb3IgdGhlIGltYWdlIChlYWNoIHRlc3QgZGVjaWRlcyB0aGF0IG9uIGl0J3Mgb3duKS4KKyMgTm90ZSB0aGF0IG9yZGVyIGluIFRFU1RfU1VJVEVTIGlzIHJlbGV2YW50OiB0ZXN0cyBhcmUgcnVuIGluIGFuIG9yZGVyIHN1Y2ggdGhhdAorIyB0ZXN0cyBtZW50aW9uZWQgaW4gQHNraXBVbmxlc3NQYXNzZWQgcnVuIGJlZm9yZSB0aGUgdGVzdHMgdGhhdCBkZXBlbmQgb24gdGhlbSwKKyMgYnV0IHdpdGhvdXQgc3VjaCBkZXBlbmRlbmNpZXMsIHRlc3RzIHJ1biBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgbGlzdGVkCisjIGluIFRFU1RfU1VJVEVTLgorIworIyBBIGxheWVyIGNhbiBhZGQgaXRzIG93biB0ZXN0cyBpbiBsaWIvb2VxYS9ydW50aW1lLCBwcm92aWRlZCBpdCBleHRlbmRzIEJCUEFUSCBhcyBub3JtYWwgaW4gaXRzIGxheWVyLmNvbmYuCisKKyMgVEVTVF9MT0dfRElSIGNvbnRhaW5zIGEgY29tbWFuZCBzc2ggbG9nIGFuZCBtYXkgY29udGFpbiBpbmZyb21hdGlvbiBhYm91dCB3aGF0IGNvbW1hbmQgaXMgcnVubmluZywgb3V0cHV0IGFuZCByZXR1cm4gY29kZXMgYW5kIGZvciBxZW11IGEgYm9vdCBsb2cgdGlsbCBsb2dpbi4KKyMgQm9vdGluZyBpcyBoYW5kbGVkIGJ5IHRoaXMgY2xhc3MsIGFuZCBpdCdzIG5vdCBhIHRlc3QgaW4gaXRzZWxmLgorIyBURVNUX1FFTVVCT09UX1RJTUVPVVQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIHRpbWUgaW4gc2Vjb25kcyB0aGUgbGF1bmNoIGNvZGUgd2lsbCB3YWl0IGZvciB0aGUgbG9naW4gcHJvbXB0LgorCitURVNUX0xPR19ESVIgPz0gIiR7V09SS0RJUn0vdGVzdGltYWdlIgorCitURVNUX0VYUE9SVF9ESVIgPz0gIiR7VE1QRElSfS90ZXN0aW1hZ2UvJHtQTn0iCitURVNUX0VYUE9SVF9PTkxZID89ICIwIgorCitSUE1URVNUU1VJVEUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX1BLR1RZUEUnLCAncnBtJywgJ3NtYXJ0IHJwbScsICcnLCBkKX0iCisKK0RFRkFVTFRfVEVTVF9TVUlURVMgPSAicGluZyBhdXRvIgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLW1pbmltYWwgPSAicGluZyIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1zYXRvID0gInBpbmcgc3NoIGRmIGNvbm5tYW4gc3lzbG9nIHhvcmcgc2NwIHZuYyBkYXRlIGRtZXNnIHBhcnNlbG9ncyAke1JQTVRFU1RTVUlURX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9QS0dUWVBFJywgJ3JwbScsICdweXRob24nLCAnJywgZCl9IgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLXNhdG8tc2RrID0gInBpbmcgc3NoIGRmIGNvbm5tYW4gc3lzbG9nIHhvcmcgc2NwIHZuYyBkYXRlIHBlcmwgbGRkIGdjYyBrZXJuZWxtb2R1bGUgZG1lc2cgcHl0aG9uIHBhcnNlbG9ncyAke1JQTVRFU1RTVUlURX0iCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICJwaW5nIGJ1aWxkY3ZzIGJ1aWxkaXB0YWJsZXMgYnVpbGRzdWRva3UgY29ubm1hbiBkYXRlIGRmIGdjYyBrZXJuZWxtb2R1bGUgbGRkIHBhbSBwYXJzZWxvZ3MgcGVybCBweXRob24gc2NwICR7UlBNVEVTVFNVSVRFfSBzc2ggc3lzbG9nIGxvZ3JvdGF0ZSIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tbWV0YS10b29sY2hhaW4gPSAiYXV0byIKKworIyBhYXJjaDY0IGhhcyBubyBncmFwaGljcworREVGQVVMVF9URVNUX1NVSVRFU19yZW1vdmVfYWFyY2g2NCA9ICJ4b3JnIHZuYyIKKworI3FlbXVtaXBzIGlzIHRvbyBzbG93IGZvciBidWlsZHN1ZG9rdQorREVGQVVMVF9URVNUX1NVSVRFU19yZW1vdmVfcWVtdW1pcHMgPSAiYnVpbGRzdWRva3UiCisKK1RFU1RfU1VJVEVTID89ICIke0RFRkFVTFRfVEVTVF9TVUlURVN9IgorCitURVNUX1FFTVVCT09UX1RJTUVPVVQgPz0gIjEwMDAiCitURVNUX1RBUkdFVCA/PSAicWVtdSIKK1RFU1RfVEFSR0VUX0lQID89ICIiCitURVNUX1NFUlZFUl9JUCA/PSAiIgorCitURVNUSU1BR0VERVBFTkRTID0gIiIKK1RFU1RJTUFHRURFUEVORFNfcWVtdWFsbCA9ICJxZW11LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHFlbXUtaGVscGVyLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitURVNUSU1BR0VMT0NLID0gIiR7VE1QRElSfS90ZXN0aW1hZ2UubG9jayIKK1RFU1RJTUFHRUxPQ0tfcWVtdWFsbCA9ICIiCisKK1RFU1RJTUFHRV9EVU1QX0RJUiA/PSAiL3RtcC9vZS1zYXZlZC10ZXN0cy8iCisKK3Rlc3RpbWFnZV9kdW1wX3RhcmdldCAoKSB7CisgICAgdG9wIC1ibjEKKyAgICBwcworICAgIGZyZWUKKyAgICBkZgorICAgICMgVGhlIG5leHQgY29tbWFuZCB3aWxsIGV4cG9ydCB0aGUgZGVmYXVsdCBnYXRld2F5IElQCisgICAgZXhwb3J0IERFRkFVTFRfR0FURVdBWT0kKGlwIHJvdXRlIHwgYXdrICcvZGVmYXVsdC8geyBwcmludCAkM30nKQorICAgIHBpbmcgLWMzICRERUZBVUxUX0dBVEVXQVkKKyAgICBkbWVzZworICAgIG5ldHN0YXQgLWFuCisgICAgaXAgYWRkcmVzcworICAgICMgTmV4dCBjb21tYW5kIHdpbGwgZHVtcCBsb2dzIGZyb20gL3Zhci9sb2cvCisgICAgZmluZCAvdmFyL2xvZy8gLXR5cGUgZiAyPi9kZXYvbnVsbCAtZXhlYyBlY2hvICI9PT09PT09PT09PT09PT09PT09PSIgXDsgLWV4ZWMgZWNobyB7fSBcOyAtZXhlYyBlY2hvICI9PT09PT09PT09PT09PT09PT09PSIgXDsgLWV4ZWMgY2F0IHt9IFw7IC1leGVjIGVjaG8gIiIgXDsKK30KKwordGVzdGltYWdlX2R1bXBfaG9zdCAoKSB7CisgICAgdG9wIC1ibjEKKyAgICBwcyAtZWYKKyAgICBmcmVlCisgICAgZGYKKyAgICBtZW1zdGF0CisgICAgZG1lc2cKKyAgICBuZXRzdGF0IC1hbgorfQorCitweXRob24gZG9fdGVzdGltYWdlKCkgeworICAgIHRlc3RpbWFnZV9tYWluKGQpCit9CithZGR0YXNrIHRlc3RpbWFnZQorZG9fdGVzdGltYWdlW25vc3RhbXBdID0gIjEiCitkb190ZXN0aW1hZ2VbZGVwZW5kc10gKz0gIiR7VEVTVElNQUdFREVQRU5EU30iCitkb190ZXN0aW1hZ2VbbG9ja2ZpbGVzXSArPSAiJHtURVNUSU1BR0VMT0NLfSIKKworcHl0aG9uIGRvX3Rlc3RzZGsoKSB7CisgICAgdGVzdHNka19tYWluKGQpCit9CithZGR0YXNrIHRlc3RzZGsKK2RvX3Rlc3RzZGtbbm9zdGFtcF0gPSAiMSIKK2RvX3Rlc3RzZGtbZGVwZW5kc10gKz0gIiR7VEVTVElNQUdFREVQRU5EU30iCitkb190ZXN0c2RrW2xvY2tmaWxlc10gKz0gIiR7VEVTVElNQUdFTE9DS30iCisKKyMgZ2V0IHRlc3RjYXNlIGxpc3QgZnJvbSBzcGVjaWZpZWQgZmlsZQorIyBpZiBwYXRoIGlzIGEgcmVsYXRpdmUgcGF0aCwgdGhlbiByZWxhdGl2ZSB0byBidWlsZC9jb25mLworZGVmIHJlYWRfdGVzdGxpc3QoZCwgZnBhdGgpOgorICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZwYXRoKToKKyAgICAgICAgYnVpbGRkaXIgPSBkLmdldFZhcigiVE9QRElSIiwgVHJ1ZSkKKyAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mIiwgZnBhdGgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZwYXRoKToKKyAgICAgICAgYmIuZmF0YWwoIk5vIHN1Y2ggbWFuaWZlc3QgZmlsZTogIiwgZnBhdGgpCisgICAgdGNzID0gW10KKyAgICBmb3IgbGluZSBpbiBvcGVuKGZwYXRoKS5yZWFkbGluZXMoKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBsaW5lIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICB0Y3MuYXBwZW5kKGxpbmUpCisgICAgcmV0dXJuICIgIi5qb2luKHRjcykKKworZGVmIGdldF90ZXN0c19saXN0KGQsIHR5cGU9InJ1bnRpbWUiKToKKyAgICB0ZXN0c3VpdGVzID0gW10KKyAgICB0ZXN0c2xpc3QgPSBbXQorICAgIG1hbmlmZXN0cyA9IGQuZ2V0VmFyKCJURVNUX1NVSVRFU19NQU5JRkVTVCIsIFRydWUpCisgICAgaWYgbWFuaWZlc3RzIGlzIG5vdCBOb25lOgorICAgICAgICBtYW5pZmVzdHMgPSBtYW5pZmVzdHMuc3BsaXQoKQorICAgICAgICBmb3IgbWFuaWZlc3QgaW4gbWFuaWZlc3RzOgorICAgICAgICAgICAgdGVzdHN1aXRlcy5leHRlbmQocmVhZF90ZXN0bGlzdChkLCBtYW5pZmVzdCkuc3BsaXQoKSkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0c3VpdGVzID0gZC5nZXRWYXIoIlRFU1RfU1VJVEVTIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGlmIHR5cGUgPT0gInNkayI6CisgICAgICAgIHRlc3RzdWl0ZXMgPSAoZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1NESyIsIFRydWUpIG9yICJhdXRvIikuc3BsaXQoKQorICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgnOicpCisKKyAgICAjIFRoaXMgcmVsaWVzIG9uIGxpYi8gdW5kZXIgZWFjaCBkaXJlY3RvcnkgaW4gQkJQQVRIIGJlaW5nIGFkZGVkIHRvIHN5cy5wYXRoCisgICAgIyAoYXMgZG9uZSBieSBkZWZhdWx0IGluIGJhc2UuYmJjbGFzcykKKyAgICBmb3IgdGVzdG5hbWUgaW4gdGVzdHN1aXRlczoKKyAgICAgICAgaWYgdGVzdG5hbWUgIT0gImF1dG8iOgorICAgICAgICAgICAgaWYgdGVzdG5hbWUuc3RhcnRzd2l0aCgib2VxYS4iKToKKyAgICAgICAgICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKHRlc3RuYW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgcCBpbiBiYnBhdGg6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsIHR5cGUsIHRlc3RuYW1lICsgJy5weScpKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNsaXN0LmFwcGVuZCgib2VxYS4iICsgdHlwZSArICIuIiArIHRlc3RuYW1lKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgnVGVzdCAlcyBzcGVjaWZpZWQgaW4gVEVTVF9TVUlURVMgY291bGQgbm90IGJlIGZvdW5kIGluIGxpYi9vZXFhL3J1bnRpbWUgdW5kZXIgQkJQQVRIJyAlIHRlc3RuYW1lKQorCisgICAgaWYgImF1dG8iIGluIHRlc3RzdWl0ZXM6CisgICAgICAgIGRlZiBhZGRfYXV0b19saXN0KHBhdGgpOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ1Rlc3RzIGRpcmVjdG9yeSAlcyBleGlzdHMgYnV0IGlzIG1pc3NpbmcgX19pbml0X18ucHknICUgcGF0aCkKKyAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIocGF0aCkgaWYgZi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoJ18nKV0pCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSAnb2VxYS4nICsgdHlwZSArICcuJyArIGZbOi0zXQorICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gdGVzdHNsaXN0OgorICAgICAgICAgICAgICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKG1vZHVsZSkKKworICAgICAgICBmb3IgcCBpbiBiYnBhdGg6CisgICAgICAgICAgICB0ZXN0cGF0aCA9IG9zLnBhdGguam9pbihwLCAnbGliJywgJ29lcWEnLCB0eXBlKQorICAgICAgICAgICAgYmIuZGVidWcoMiwgJ1NlYXJjaGluZyBmb3IgdGVzdHMgaW4gJXMnICUgdGVzdHBhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZXN0cGF0aCk6CisgICAgICAgICAgICAgICAgYWRkX2F1dG9fbGlzdCh0ZXN0cGF0aCkKKworICAgIHJldHVybiB0ZXN0c2xpc3QKKworCitkZWYgZXhwb3J0VGVzdHMoZCx0Yyk6CisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IHBrZ3V0aWwKKworICAgIGV4cG9ydHBhdGggPSBkLmdldFZhcigiVEVTVF9FWFBPUlRfRElSIiwgVHJ1ZSkKKworICAgIHNhdmVkYXRhID0ge30KKyAgICBzYXZlZGF0YVsiZCJdID0ge30KKyAgICBzYXZlZGF0YVsidGFyZ2V0Il0gPSB7fQorICAgIHNhdmVkYXRhWyJob3N0X2R1bXBlciJdID0ge30KKyAgICBmb3Iga2V5IGluIHRjLl9fZGljdF9fOgorICAgICAgICAjIHNwZWNpYWwgY2FzZXMKKyAgICAgICAgaWYga2V5ICE9ICJkIiBhbmQga2V5ICE9ICJ0YXJnZXQiIGFuZCBrZXkgIT0gImhvc3RfZHVtcGVyIjoKKyAgICAgICAgICAgIHNhdmVkYXRhW2tleV0gPSBnZXRhdHRyKHRjLCBrZXkpCisgICAgc2F2ZWRhdGFbInRhcmdldCJdWyJpcCJdID0gdGMudGFyZ2V0LmlwIG9yIGQuZ2V0VmFyKCJURVNUX1RBUkdFVF9JUCIsIFRydWUpCisgICAgc2F2ZWRhdGFbInRhcmdldCJdWyJzZXJ2ZXJfaXAiXSA9IHRjLnRhcmdldC5zZXJ2ZXJfaXAgb3IgZC5nZXRWYXIoIlRFU1RfU0VSVkVSX0lQIiwgVHJ1ZSkKKworICAgIGtleXMgPSBbIGtleSBmb3Iga2V5IGluIGQua2V5cygpIGlmIG5vdCBrZXkuc3RhcnRzd2l0aCgiXyIpIGFuZCBub3Qga2V5LnN0YXJ0c3dpdGgoIkJCIikgXAorICAgICAgICAgICAgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiQl9wbiIpIGFuZCBub3Qga2V5LnN0YXJ0c3dpdGgoImRvXyIpIGFuZCBub3QgZC5nZXRWYXJGbGFnKGtleSwgImZ1bmMiKV0KKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNhdmVkYXRhWyJkIl1ba2V5XSA9IGQuZ2V0VmFyKGtleSwgVHJ1ZSkKKyAgICAgICAgZXhjZXB0IGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3I6CisgICAgICAgICAgICAjIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhvc2UgYW55d2F5CisgICAgICAgICAgICBwYXNzCisKKyAgICBzYXZlZGF0YVsiaG9zdF9kdW1wZXIiXVsicGFyZW50X2RpciJdID0gdGMuaG9zdF9kdW1wZXIucGFyZW50X2RpcgorICAgIHNhdmVkYXRhWyJob3N0X2R1bXBlciJdWyJjbWRzIl0gPSB0Yy5ob3N0X2R1bXBlci5jbWRzCisKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJ0ZXN0ZGF0YS5qc29uIiksICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGpzb24uZHVtcChzYXZlZGF0YSwgZiwgc2tpcGtleXM9VHJ1ZSwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKQorCisgICAgIyBub3cgc3RhcnQgY29weWluZyBmaWxlcworICAgICMgd2UnbGwgYmFzaWNhbGx5IGNvcHkgZXZlcnl0aGluZyB1bmRlciBtZXRhL2xpYi9vZXFhLCB3aXRoIHRoZXNlIGV4Y2VwdGlvbnMKKyAgICAjICAtIG9lcWEvdGFyZ2V0Y29udHJvbC5weSAtIG5vdCBuZWVkZWQKKyAgICAjICAtIG9lcWEvc2VsZnRlc3QgLSBzb21ldGhpbmcgZWxzZQorICAgICMgVGhhdCBtZWFuczoKKyAgICAjICAgLSBhbGwgdGVzdHMgZnJvbSBvZXFhL3J1bnRpbWUgZGVmaW5lZCBpbiBURVNUX1NVSVRFUyAoaW5jbHVkaW5nIGZyb20gb3RoZXIgbGF5ZXJzKQorICAgICMgICAtIHRoZSBjb250ZW50cyBvZiBvZXFhL3V0aWxzIGFuZCBvZXFhL3J1bnRpbWUvZmlsZXMKKyAgICAjICAgLSBvZXFhL29ldGVzdC5weSBhbmQgb2VxYS9ydW5leHBvcnQucHkgKHRoaXMgd2lsbCBnZXQgY29waWVkIHRvIGV4cG9ydHBhdGggbm90IGV4cG9ydHBhdGgvb2VxYSkKKyAgICAjICAgLSBfX2luaXRfXy5weSBmaWxlcworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZS9maWxlcyIpKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvdXRpbHMiKSkKKyAgICAjIGNvcHkgdGVzdCBtb2R1bGVzLCB0aGlzIHNob3VsZCBjb3ZlciB0ZXN0cyBpbiBvdGhlciBsYXllcnMgdG9vCisgICAgZm9yIHQgaW4gdGMudGVzdHNsaXN0OgorICAgICAgICBtb2QgPSBwa2d1dGlsLmdldF9sb2FkZXIodCkKKyAgICAgICAgc2h1dGlsLmNvcHkyKG1vZC5maWxlbmFtZSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUiKSkKKyAgICAjIGNvcHkgX19pbml0X18ucHkgZmlsZXMKKyAgICBvZXFhZGlyID0gcGtndXRpbC5nZXRfbG9hZGVyKCJvZXFhIikuZmlsZW5hbWUKKyAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJfX2luaXRfXy5weSIpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEiKSkKKyAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJydW50aW1lL19faW5pdF9fLnB5IiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lIikpCisgICAgIyBjb3B5IG9lcWEvb2V0ZXN0LnB5IGFuZCBvZXFhL3J1bmV4cG9ydGVkLnB5CisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAib2V0ZXN0LnB5IiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYSIpKQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bmV4cG9ydGVkLnB5IiksIGV4cG9ydHBhdGgpCisgICAgIyBjb3B5IG9lcWEvdXRpbHMvKi5weQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihvZXFhZGlyLCAidXRpbHMiKSk6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgiLnB5Iik6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihyb290LCBmKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3V0aWxzIikpCisgICAgIyBjb3B5IG9lcWEvcnVudGltZS9maWxlcy8qCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKG9lcWFkaXIsICJydW50aW1lL2ZpbGVzIikpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ocm9vdCwgZiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lL2ZpbGVzIikpCisKKyAgICBiYi5wbGFpbigiRXhwb3J0ZWQgdGVzdHMgdG86ICVzIiAlIGV4cG9ydHBhdGgpCisKKworZGVmIHRlc3RpbWFnZV9tYWluKGQpOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIGltcG9ydCBvcworICAgIGltcG9ydCBvZXFhLnJ1bnRpbWUKKyAgICBpbXBvcnQgdGltZQorICAgIGltcG9ydCBzaWduYWwKKyAgICBmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBsb2FkVGVzdHMsIHJ1blRlc3RzCisgICAgZnJvbSBvZXFhLnRhcmdldGNvbnRyb2wgaW1wb3J0IGdldF90YXJnZXRfY29udHJvbGxlcgorICAgIGZyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBnZXRfaG9zdF9kdW1wZXIKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBleHBvcnQgPSBvZS51dGlscy5jb25kaXRpb25hbCgiVEVTVF9FWFBPUlRfT05MWSIsICIxIiwgVHJ1ZSwgRmFsc2UsIGQpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKSkKKyAgICBpZiBleHBvcnQ6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShkLmdldFZhcigiVEVTVF9FWFBPUlRfRElSIiwgVHJ1ZSksIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSkKKworICAgICMgdGVzdHMgaW4gVEVTVF9TVUlURVMgYmVjb21lIHJlcXVpcmVkIHRlc3RzCisgICAgIyB0aGV5IHdvbid0IGJlIHNraXBwZWQgZXZlbiBpZiB0aGV5IGFyZW4ndCBzdWl0YWJsZSBmb3IgYSBpbWFnZSAobGlrZSB4b3JnIGZvciBtaW5pbWFsKQorICAgICMgdGVzdHNsaXN0IGlzIHdoYXQgd2UnbGwgYWN0dWFsbHkgcGFzcyB0byB0aGUgdW5pdHRlc3QgbG9hZGVyCisgICAgdGVzdHNsaXN0ID0gZ2V0X3Rlc3RzX2xpc3QoZCkKKyAgICB0ZXN0c3JlcXVpcmVkID0gW3QgZm9yIHQgaW4gZC5nZXRWYXIoIlRFU1RfU1VJVEVTIiwgVHJ1ZSkuc3BsaXQoKSBpZiB0ICE9ICJhdXRvIl0KKworICAgIHRhZ2V4cCA9IGQuZ2V0VmFyKCJURVNUX1NVSVRFU19UQUdTIiwgVHJ1ZSkKKworICAgICMgd2UgbmVlZCB0aGUgaG9zdCBkdW1wZXIgaW4gdGVzdCBjb250ZXh0CisgICAgaG9zdF9kdW1wZXIgPSBnZXRfaG9zdF9kdW1wZXIoZCkKKworICAgICMgdGhlIHJvYm90IGRhbmNlCisgICAgdGFyZ2V0ID0gZ2V0X3RhcmdldF9jb250cm9sbGVyKGQpCisKKyAgICBjbGFzcyBUZXN0Q29udGV4dChvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgICAgICBzZWxmLnRlc3RzbGlzdCA9IHRlc3RzbGlzdAorICAgICAgICAgICAgc2VsZi50YWdleHAgPSB0YWdleHAKKyAgICAgICAgICAgIHNlbGYudGVzdHNyZXF1aXJlZCA9IHRlc3RzcmVxdWlyZWQKKyAgICAgICAgICAgIHNlbGYuZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChvZXFhLnJ1bnRpbWUuX19maWxlX18pKSwiZmlsZXMiKQorICAgICAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIgPSBob3N0X2R1bXBlcgorICAgICAgICAgICAgc2VsZi5pbWFnZWZlYXR1cmVzID0gZC5nZXRWYXIoIklNQUdFX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5kaXN0cm9mZWF0dXJlcyA9IGQuZ2V0VmFyKCJESVNUUk9fRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBtYW5pZmVzdCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAiLm1hbmlmZXN0IikKKyAgICAgICAgICAgIHNlbGYuc2lndGVybSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLm9yaWdzaWd0ZXJtaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihtYW5pZmVzdCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dtYW5pZmVzdCA9IGYucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBwYWNrYWdlIG1hbmlmZXN0IGZpbGUgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIGltYWdlP1xuJXMiICUgZSkKKworICAgICAgICBkZWYgc2lndGVybV9leGNlcHRpb24oc2VsZiwgc2lnbnVtLCBzdGFja2ZyYW1lKToKKyAgICAgICAgICAgIGJiLndhcm4oIlRlc3RJbWFnZSByZWNlaXZlZCBTSUdURVJNLCBzaHV0dGluZyBkb3duLi4uIikKKyAgICAgICAgICAgIHNlbGYuc2lndGVybSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LnN0b3AoKQorCisgICAgIyB0ZXN0IGNvbnRleHQKKyAgICB0YyA9IFRlc3RDb250ZXh0KCkKKworICAgICMgdGhpcyBpcyBhIGR1bW15IGxvYWQgb2YgdGVzdHMKKyAgICAjIHdlIGFyZSBkb2luZyB0aGF0IHRvIGZpbmQgY29tcGlsZSBlcnJvcnMgaW4gdGhlIHRlc3RzIHRoZW1zZWx2ZXMKKyAgICAjIGJlZm9yZSBib290aW5nIHRoZSBpbWFnZQorICAgIHRyeToKKyAgICAgICAgbG9hZFRlc3RzKHRjKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICBiYi5mYXRhbCgiTG9hZGluZyB0ZXN0cyBmYWlsZWQ6XG4lcyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorCisgICAgdGFyZ2V0LmRlcGxveSgpCisKKyAgICB0cnk6CisgICAgICAgIHRhcmdldC5zdGFydCgpCisgICAgICAgIGlmIGV4cG9ydDoKKyAgICAgICAgICAgIGV4cG9ydFRlc3RzKGQsdGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGFydHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuVGVzdHModGMpCisgICAgICAgICAgICBzdG9wdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgICAgIGJiLnBsYWluKCIlcyAtIFJhbiAlZCB0ZXN0JXMgaW4gJS4zZnMiICUgKHBuLCByZXN1bHQudGVzdHNSdW4sIHJlc3VsdC50ZXN0c1J1biAhPSAxIGFuZCAicyIgb3IgIiIsIHN0b3B0aW1lIC0gc3RhcnR0aW1lKSkKKyAgICAgICAgICAgICAgICBtc2cgPSAiJXMgLSBPSyAtIEFsbCByZXF1aXJlZCB0ZXN0cyBwYXNzZWQiICUgcG4KKyAgICAgICAgICAgICAgICBza2lwcGVkID0gbGVuKHJlc3VsdC5za2lwcGVkKQorICAgICAgICAgICAgICAgIGlmIHNraXBwZWQ6CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiIChza2lwcGVkPSVkKSIgJSBza2lwcGVkCisgICAgICAgICAgICAgICAgYmIucGxhaW4obXNnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtIEZBSUxFRCAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIHNzaCBsb2ciICUgcG4gKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHRjLm9yaWdzaWd0ZXJtaGFuZGxlcikKKyAgICAgICAgdGFyZ2V0LnN0b3AoKQorCit0ZXN0aW1hZ2VfbWFpblt2YXJkZXBzZXhjbHVkZV0gPSsgIkJCX09SSUdFTlYiCisKKworZGVmIHRlc3RzZGtfbWFpbihkKToKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgZ2xvYgorICAgIGltcG9ydCBvZXFhLnJ1bnRpbWUKKyAgICBpbXBvcnQgb2VxYS5zZGsKKyAgICBpbXBvcnQgdGltZQorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgbG9hZFRlc3RzLCBydW5UZXN0cworCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkpCisKKyAgICAjIHRlc3RzIGluIFRFU1RfU1VJVEVTIGJlY29tZSByZXF1aXJlZCB0ZXN0cworICAgICMgdGhleSB3b24ndCBiZSBza2lwcGVkIGV2ZW4gaWYgdGhleSBhcmVuJ3Qgc3VpdGFibGUuCisgICAgIyB0ZXN0c2xpc3QgaXMgd2hhdCB3ZSdsbCBhY3R1YWxseSBwYXNzIHRvIHRoZSB1bml0dGVzdCBsb2FkZXIKKyAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHNfbGlzdChkLCAic2RrIikKKyAgICB0ZXN0c3JlcXVpcmVkID0gW3QgZm9yIHQgaW4gKGQuZ2V0VmFyKCJURVNUX1NVSVRFU19TREsiLCBUcnVlKSBvciAiYXV0byIpLnNwbGl0KCkgaWYgdCAhPSAiYXV0byJdCisKKyAgICB0Y25hbWUgPSBkLmV4cGFuZCgiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaCIpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRjbmFtZSk6CisgICAgICAgIGJiLmZhdGFsKCJUaGUgdG9vbGNoYWluIGlzIG5vdCBidWlsdC4gQnVpbGQgaXQgYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3RzOiAnYml0YmFrZSA8aW1hZ2U+IC1jIHBvcHVsYXRlX3NkaycgLiIpCisKKyAgICBjbGFzcyBUZXN0Q29udGV4dChvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgICAgICBzZWxmLnRlc3RzbGlzdCA9IHRlc3RzbGlzdAorICAgICAgICAgICAgc2VsZi50ZXN0c3JlcXVpcmVkID0gdGVzdHNyZXF1aXJlZAorICAgICAgICAgICAgc2VsZi5maWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKG9lcWEucnVudGltZS5fX2ZpbGVfXykpLCJmaWxlcyIpCisgICAgICAgICAgICBzZWxmLnNka3Rlc3RkaXIgPSBzZGt0ZXN0ZGlyCisgICAgICAgICAgICBzZWxmLnNka2VudiA9IHNka2VudgorICAgICAgICAgICAgc2VsZi5pbWFnZWZlYXR1cmVzID0gZC5nZXRWYXIoIklNQUdFX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5kaXN0cm9mZWF0dXJlcyA9IGQuZ2V0VmFyKCJESVNUUk9fRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBtYW5pZmVzdCA9IGQuZ2V0VmFyKCJTREtfVEFSR0VUX01BTklGRVNUIiwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3QpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnbWFuaWZlc3QgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiTm8gcGFja2FnZSBtYW5pZmVzdCBmaWxlIGZvdW5kLiBEaWQgeW91IGJ1aWxkIHRoZSBzZGsgaW1hZ2U/XG4lcyIgJSBlKQorICAgICAgICAgICAgaG9zdG1hbmlmZXN0ID0gZC5nZXRWYXIoIlNES19IT1NUX01BTklGRVNUIiwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oaG9zdG1hbmlmZXN0KSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhvc3Rwa2dtYW5pZmVzdCA9IGYucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBob3N0IHBhY2thZ2UgbWFuaWZlc3QgZmlsZSBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgc2RrIGltYWdlP1xuJXMiICUgZSkKKworICAgIHNka3Rlc3RkaXIgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS90ZXN0aW1hZ2Utc2RrLyIpCisgICAgYmIudXRpbHMucmVtb3ZlKHNka3Rlc3RkaXIsIFRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHNka3Rlc3RkaXIpCisgICAgdHJ5OgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgiY2QgJXM7ICVzIDw8RU9GXG4uL3RjXG5ZXG5FT0YiICUgKHNka3Rlc3RkaXIsIHRjbmFtZSksIHNoZWxsPVRydWUpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmZhdGFsKCJDb3VsZG4ndCBpbnN0YWxsIHRoZSBTREs6XG4lcyIgJSBlLm91dHB1dCkKKworICAgIHRyeToKKyAgICAgICAgdGFyZ2V0cyA9IGdsb2IuZ2xvYihkLmV4cGFuZChzZGt0ZXN0ZGlyICsgIi90Yy9lbnZpcm9ubWVudC1zZXR1cC0qIikpCisgICAgICAgIGJiLndhcm4oc3RyKHRhcmdldHMpKQorICAgICAgICBmb3Igc2RrZW52IGluIHRhcmdldHM6CisgICAgICAgICAgICBiYi5wbGFpbigiVGVzdGluZyAlcyIgJSBzZGtlbnYpCisgICAgICAgICAgICAjIHRlc3QgY29udGV4dAorICAgICAgICAgICAgdGMgPSBUZXN0Q29udGV4dCgpCisKKyAgICAgICAgICAgICMgdGhpcyBpcyBhIGR1bW15IGxvYWQgb2YgdGVzdHMKKyAgICAgICAgICAgICMgd2UgYXJlIGRvaW5nIHRoYXQgdG8gZmluZCBjb21waWxlIGVycm9ycyBpbiB0aGUgdGVzdHMgdGhlbXNlbHZlcworICAgICAgICAgICAgIyBiZWZvcmUgYm9vdGluZyB0aGUgaW1hZ2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2FkVGVzdHModGMsICJzZGsiKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiTG9hZGluZyB0ZXN0cyBmYWlsZWQ6XG4lcyIgJSB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorCisgICAgCisgICAgICAgICAgICBzdGFydHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuVGVzdHModGMsICJzZGsiKQorICAgICAgICAgICAgc3RvcHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgICAgICBiYi5wbGFpbigiJXMgU0RLKCVzKTolcyAtIFJhbiAlZCB0ZXN0JXMgaW4gJS4zZnMiICUgKHBuLCBvcy5wYXRoLmJhc2VuYW1lKHRjbmFtZSksIG9zLnBhdGguYmFzZW5hbWUoc2RrZW52KSxyZXN1bHQudGVzdHNSdW4sIHJlc3VsdC50ZXN0c1J1biAhPSAxIGFuZCAicyIgb3IgIiIsIHN0b3B0aW1lIC0gc3RhcnR0aW1lKSkKKyAgICAgICAgICAgICAgICBtc2cgPSAiJXMgLSBPSyAtIEFsbCByZXF1aXJlZCB0ZXN0cyBwYXNzZWQiICUgcG4KKyAgICAgICAgICAgICAgICBza2lwcGVkID0gbGVuKHJlc3VsdC5za2lwcGVkKQorICAgICAgICAgICAgICAgIGlmIHNraXBwZWQ6CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiIChza2lwcGVkPSVkKSIgJSBza2lwcGVkCisgICAgICAgICAgICAgICAgYmIucGxhaW4obXNnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtIEZBSUxFRCAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIGNvbW1hbmRzIGxvZyIgJSBwbiApCisgICAgZmluYWxseToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNka3Rlc3RkaXIsIFRydWUpCisKK3Rlc3RzZGtfbWFpblt2YXJkZXBzZXhjbHVkZV0gPSsgIkJCX09SSUdFTlYiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RleGluZm8uYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3RleGluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVmYmNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGV4aW5mby5iYmNsYXNzCkBAIC0wLDAgKzEsMTUgQEAKKyMgVGhpcyBjbGFzcyBpcyBpbmhlcml0ZWQgYnkgcmVjaXBlcyB3aG9zZSB1cHN0cmVhbSBwYWNrYWdlcyBpbnZva2UgdGhlCisjIHRleGluZm8gdXRpbGl0aWVzIGF0IGJ1aWxkLXRpbWUuIE5hdGl2ZSBhbmQgY3Jvc3MgcmVjaXBlcyBhcmUgbWFkZSB0byB1c2UgdGhlCisjIGR1bW15IHNjcmlwdHMgcHJvdmlkZWQgYnkgdGV4aW5mby1kdW1teS1uYXRpdmUsIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5jZS4gCisjIFRhcmdldCBhcmNoaXRlY3R1cmUgcmVjaXBlcyB1c2UgdGhlIGdlbnVpbmUgVGV4aW5mbyB1dGlsaXRpZXMuIEJ5IGRlZmF1bHQsIAorIyB0aGV5IHVzZSB0aGUgVGV4aW5mbyB1dGlsaXRpZXMgb24gdGhlIGhvc3Qgc3lzdGVtLiBJZiB5b3Ugd2FudCB0byB1c2UgdGhlCisjIFRleGluZm8gcmVjaXBlIHNoaXBwZWQgd2l0aCB5b2NvLCB5b3UgY2FuIHJlbW92ZSB0ZXhpbmZvLW5hdGl2ZSBmcm9tIAorIyBBU1NVTUVfUFJPVklERUQgYW5kIG1ha2VpbmZvIGZyb20gU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUy4KKworVEVYREVQID0gInRleGluZm8tbmF0aXZlIgorVEVYREVQX2NsYXNzLW5hdGl2ZSA9ICJ0ZXhpbmZvLWR1bW15LW5hdGl2ZSIKK1RFWERFUF9jbGFzcy1jcm9zcyA9ICJ0ZXhpbmZvLWR1bW15LW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kID0gIiAke1RFWERFUH0iCitQQVRIX3ByZXBlbmRfY2xhc3MtbmF0aXZlID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS90ZXhpbmZvLWR1bW15LW5hdGl2ZToiCitQQVRIX3ByZXBlbmRfY2xhc3MtY3Jvc3MgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3RleGluZm8tZHVtbXktbmF0aXZlOiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGluZGVyY2xpZW50LmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg0ZWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdGluZGVyY2xpZW50LmJiY2xhc3MKQEAgLTAsMCArMSwzNjggQEAKK2RlZiB0aW5kZXJfaHR0cF9wb3N0KHNlcnZlciwgc2VsZWN0b3IsIGNvbnRlbnRfdHlwZSwgYm9keSk6CisgICAgaW1wb3J0IGh0dHBsaWIKKyAgICAjIG5vdyBwb3N0IGl0CisgICAgZm9yIGkgaW4gcmFuZ2UoMCw1KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGh0dHBsaWIuSFRUUChzZXJ2ZXIpCisgICAgICAgICAgICBoLnB1dHJlcXVlc3QoJ1BPU1QnLCBzZWxlY3RvcikKKyAgICAgICAgICAgIGgucHV0aGVhZGVyKCdjb250ZW50LXR5cGUnLCBjb250ZW50X3R5cGUpCisgICAgICAgICAgICBoLnB1dGhlYWRlcignY29udGVudC1sZW5ndGgnLCBzdHIobGVuKGJvZHkpKSkKKyAgICAgICAgICAgIGguZW5kaGVhZGVycygpCisgICAgICAgICAgICBoLnNlbmQoYm9keSkKKyAgICAgICAgICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyA9IGguZ2V0cmVwbHkoKQorICAgICAgICAgICAgI3ByaW50IGVycmNvZGUsIGVycm1zZywgaGVhZGVycworICAgICAgICAgICAgcmV0dXJuIChlcnJjb2RlLGVycm1zZywgaGVhZGVycywgaC5maWxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwcmludCAiRXJyb3Igc2VuZGluZyB0aGUgcmVwb3J0ISIKKyAgICAgICAgICAgICMgdHJ5IGFnYWluCisgICAgICAgICAgICBwYXNzCisKKyAgICAjIHJldHVybiBzb21lIGdhcmJhZ2UKKyAgICByZXR1cm4gKC0xLCAidW5rbm93biIsICJ1bmtub3duIiwgTm9uZSkKKworZGVmIHRpbmRlcl9mb3JtX2RhdGEoYm91bmQsIGRpY3QsIGxvZyk6CisgICAgb3V0cHV0ID0gW10KKyAgICAjIGZvciBlYWNoIGtleSBpbiB0aGUgZGljdGlvbmFyeQorICAgIGZvciBuYW1lIGluIGRpY3Q6CisgICAgICAgIGFzc2VydCBkaWN0W25hbWVdCisgICAgICAgIG91dHB1dC5hcHBlbmQoICItLSIgKyBib3VuZCApCisgICAgICAgIG91dHB1dC5hcHBlbmQoICdDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IiVzIicgJSBuYW1lICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggIiIgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCBkaWN0W25hbWVdICkKKyAgICBpZiBsb2c6CisgICAgICAgIG91dHB1dC5hcHBlbmQoICItLSIgKyBib3VuZCApCisgICAgICAgIG91dHB1dC5hcHBlbmQoICdDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImxvZyI7IGZpbGVuYW1lPSJsb2cudHh0IicgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAnJyApCisgICAgICAgIG91dHB1dC5hcHBlbmQoIGxvZyApCisgICAgb3V0cHV0LmFwcGVuZCggJy0tJyArIGJvdW5kICsgJy0tJyApCisgICAgb3V0cHV0LmFwcGVuZCggJycgKQorCisgICAgcmV0dXJuICJcclxuIi5qb2luKG91dHB1dCkKKworZGVmIHRpbmRlcl90aW1lX3N0cmluZygpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgdGltZSBhcyBHTVQKKyAgICAiIiIKKyAgICByZXR1cm4gIiIKKworZGVmIHRpbmRlcl9mb3JtYXRfaHR0cF9wb3N0KGQsc3RhdHVzLGxvZyk6CisgICAgIiIiCisgICAgRm9ybWF0IHRoZSBUaW5kZXJib3ggSFRUUCBwb3N0IHdpdGggdGhlIGRhdGEgbmVlZGVkCisgICAgZm9yIHRoZSB0aW5kZXJib3ggdG8gYmUgaGFwcHkuCisgICAgIiIiCisKKyAgICBpbXBvcnQgcmFuZG9tCisKKyAgICAjIHRoZSB2YXJpYWJsZXMgd2Ugd2lsbCBuZWVkIHRvIHNlbmQgb24gdGhpcyBmb3JtIHBvc3QKKyAgICB2YXJpYWJsZXMgPSAgeworICAgICAgICAidHJlZSIgICAgICAgICA6IGQuZ2V0VmFyKCdUSU5ERVJfVFJFRScsIFRydWUpLAorICAgICAgICAibWFjaGluZV9uYW1lIiA6IGQuZ2V0VmFyKCdUSU5ERVJfTUFDSElORScsIFRydWUpLAorICAgICAgICAib3MiICAgICAgICAgICA6IG9zLnVuYW1lKClbMF0sCisgICAgICAgICJvc192ZXJzaW9uIiAgIDogb3MudW5hbWUoKVsyXSwKKyAgICAgICAgImNvbXBpbGVyIiAgICAgOiAiZ2NjIiwKKyAgICAgICAgImNsb2JiZXIiICAgICAgOiBkLmdldFZhcignVElOREVSX0NMT0JCRVInLCBUcnVlKSBvciAiMCIsCisgICAgICAgICJzcmNkYXRlIiAgICAgIDogZC5nZXRWYXIoJ1NSQ0RBVEUnLCBUcnVlKSwKKyAgICAgICAgIlBOIiAgICAgICAgICAgOiBkLmdldFZhcignUE4nLCBUcnVlKSwKKyAgICAgICAgIlBWIiAgICAgICAgICAgOiBkLmdldFZhcignUFYnLCBUcnVlKSwKKyAgICAgICAgIlBSIiAgICAgICAgICAgOiBkLmdldFZhcignUFInLCBUcnVlKSwKKyAgICAgICAgIkZJTEUiICAgICAgICAgOiBkLmdldFZhcignRklMRScsIFRydWUpIG9yICJOL0EiLAorICAgICAgICAiVEFSR0VUQVJDSCIgICA6IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLAorICAgICAgICAiVEFSR0VURlBVIiAgICA6IGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiVEFSR0VUT1MiICAgICA6IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSBvciAiVW5rbm93biIsCisgICAgICAgICJNQUNISU5FIiAgICAgIDogZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSBvciAiVW5rbm93biIsCisgICAgICAgICJESVNUUk8iICAgICAgIDogZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgInplY2tlLXJvY2tzIiAgOiAic3VyZSIsCisgICAgfQorCisgICAgIyBvcHRpb25hbGx5IGFkZCB0aGUgc3RhdHVzCisgICAgaWYgc3RhdHVzOgorICAgICAgICB2YXJpYWJsZXNbInN0YXR1cyJdID0gc3RyKHN0YXR1cykKKworICAgICMgdHJ5IHRvIGxvYWQgdGhlIG1hY2hpbmUgaWQKKyAgICAjIHdlIG9ubHkgbmVlZCBvbiBidWlsZF9zdGF0dXMucGwgYnV0IHNlbmRpbmcgaXQKKyAgICAjIGFsd2F5cyBkb2VzIG5vdCBodXJ0CisgICAgdHJ5OgorICAgICAgICBmID0gZmlsZShkLmdldFZhcignVE1QRElSJyxUcnVlKSsnL3RpbmRlci1tYWNoaW5lLmlkJywgJ3InKQorICAgICAgICBpZCA9IGYucmVhZCgpCisgICAgICAgIHZhcmlhYmxlc1snbWFjaGluZV9pZCddID0gaWQKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworICAgICMgdGhlIGJvdW5kYXJ5IHdlIHdpbGwgbmVlZAorICAgIGJvdW5kYXJ5ID0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lZCIgJSBpbnQocmFuZG9tLnJhbmRvbSgpKjEwMDAwMDAwMDAwMDApCisKKyAgICAjIG5vdyBmb3JtYXQgdGhlIGJvZHkKKyAgICBib2R5ID0gdGluZGVyX2Zvcm1fZGF0YSggYm91bmRhcnksIHZhcmlhYmxlcywgbG9nICkKKworICAgIHJldHVybiAoIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSVzIiAlIGJvdW5kYXJ5KSxib2R5CisKKworZGVmIHRpbmRlcl9idWlsZF9zdGFydChkKToKKyAgICAiIiIKKyAgICBJbmZvcm0gdGhlIHRpbmRlcmJveCB0aGF0IGEgYnVpbGQgaXMgc3RhcnRpbmcuIFdlIGRvIHRoaXMKKyAgICBieSBwb3N0aW5nIG91ciBuYW1lIGFuZCB0cmVlIHRvIHRoZSBidWlsZF9zdGFydC5wbCBzY3JpcHQKKyAgICBvbiB0aGUgc2VydmVyLgorICAgICIiIgorCisgICAgIyBnZXQgdGhlIGJvZHkgYW5kIHR5cGUKKyAgICBjb250ZW50X3R5cGUsIGJvZHkgPSB0aW5kZXJfZm9ybWF0X2h0dHBfcG9zdChkLE5vbmUsTm9uZSkKKyAgICBzZXJ2ZXIgPSBkLmdldFZhcignVElOREVSX0hPU1QnLCBUcnVlICkKKyAgICB1cmwgICAgPSBkLmdldFZhcignVElOREVSX1VSTCcsIFRydWUgKQorCisgICAgc2VsZWN0b3IgPSB1cmwgKyAiL3htbC9idWlsZF9zdGFydC5wbCIKKworICAgICNwcmludCAic2VsZWN0b3IgJXMgYW5kIHVybCAlcyIgJSAoc2VsZWN0b3IsIHVybCkKKworICAgICMgbm93IHBvc3QgaXQKKyAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIGhfZmlsZSA9IHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLHNlbGVjdG9yLGNvbnRlbnRfdHlwZSwgYm9keSkKKyAgICAjcHJpbnQgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzCisgICAgcmVwb3J0ID0gaF9maWxlLnJlYWQoKQorCisgICAgIyBub3cgbGV0IHVzIGZpbmQgdGhlIG1hY2hpbmUgaWQgdGhhdCB3YXMgYXNzaWduZWQgdG8gdXMKKyAgICBzZWFyY2ggPSAiPG1hY2hpbmUgaWQ9JyIKKyAgICByZXBvcnQgPSByZXBvcnRbcmVwb3J0LmZpbmQoc2VhcmNoKStsZW4oc2VhcmNoKTpdCisgICAgcmVwb3J0ID0gcmVwb3J0WzA6cmVwb3J0LmZpbmQoIiciKV0KKworICAgIGJiLm5vdGUoIk1hY2hpbmUgSUQgYXNzaWduZWQgYnkgdGluZGVyYm94OiAlcyIgJSByZXBvcnQgKQorCisgICAgIyBub3cgd2Ugd2lsbCBuZWVkIHRvIHNhdmUgdGhlIG1hY2hpbmUgbnVtYmVyCisgICAgIyB3ZSB3aWxsIG92ZXJyaWRlIGFueSBwcmV2aW91cyBudW1iZXJzCisgICAgZiA9IGZpbGUoZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLW1hY2hpbmUuaWQiLCAndycpCisgICAgZi53cml0ZShyZXBvcnQpCisKKworZGVmIHRpbmRlcl9zZW5kX2h0dHAoZCwgc3RhdHVzLCBfbG9nKToKKyAgICAiIiIKKyAgICBTZW5kIHRoaXMgbG9nIGFzIGJ1aWxkIHN0YXR1cworICAgICIiIgorCisgICAgIyBnZXQgdGhlIGJvZHkgYW5kIHR5cGUKKyAgICBzZXJ2ZXIgPSBkLmdldFZhcignVElOREVSX0hPU1QnLCBUcnVlKQorICAgIHVybCAgICA9IGQuZ2V0VmFyKCdUSU5ERVJfVVJMJywgVHJ1ZSkKKworICAgIHNlbGVjdG9yID0gdXJsICsgIi94bWwvYnVpbGRfc3RhdHVzLnBsIgorCisgICAgIyBub3cgcG9zdCBpdCAtIGluIGNodW5rcyBvZiAxMC4wMDAgY2hhcmFjaHRlcnMKKyAgICBuZXdfbG9nID0gX2xvZworICAgIHdoaWxlIGxlbihuZXdfbG9nKSA+IDA6CisgICAgICAgIGNvbnRlbnRfdHlwZSwgYm9keSA9IHRpbmRlcl9mb3JtYXRfaHR0cF9wb3N0KGQsc3RhdHVzLG5ld19sb2dbMDoxODAwMF0pCisgICAgICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycywgaF9maWxlID0gdGluZGVyX2h0dHBfcG9zdChzZXJ2ZXIsc2VsZWN0b3IsY29udGVudF90eXBlLCBib2R5KQorICAgICAgICAjcHJpbnQgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzCisgICAgICAgICNwcmludCBoLmZpbGUucmVhZCgpCisgICAgICAgIG5ld19sb2cgPSBuZXdfbG9nWzE4MDAwOl0KKworCitkZWYgdGluZGVyX3ByaW50X2luZm8oZCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIFRpbmRlckJveCBJbmZvCisgICAgICAgIEluY2x1ZGluZyBpbmZvcm1hdGlvbnMgb2YgdGhlIEJhc2VTeXN0ZW0gYW5kIHRoZSBUcmVlCisgICAgICAgIHdlIHVzZS4KKyAgICAiIiIKKworICAgICMgZ2V0IHRoZSBsb2NhbCB2YXJzCisgICAgdGltZSAgICA9IHRpbmRlcl90aW1lX3N0cmluZygpCisgICAgb3BzICAgICA9IG9zLnVuYW1lKClbMF0KKyAgICB2ZXJzaW9uID0gb3MudW5hbWUoKVsyXQorICAgIHVybCAgICAgPSBkLmdldFZhciggJ1RJTkRFUl9VUkwnICwgVHJ1ZSApCisgICAgdHJlZSAgICA9IGQuZ2V0VmFyKCAnVElOREVSX1RSRUUnLCBUcnVlICkKKyAgICBicmFuY2ggID0gZC5nZXRWYXIoICdUSU5ERVJfQlJBTkNIJywgVHJ1ZSApCisgICAgc3JjZGF0ZSA9IGQuZ2V0VmFyKCAnU1JDREFURScsIFRydWUgKQorICAgIG1hY2hpbmUgPSBkLmdldFZhciggJ01BQ0hJTkUnLCBUcnVlICkKKyAgICBkaXN0cm8gID0gZC5nZXRWYXIoICdESVNUUk8nLCBUcnVlICkKKyAgICBiYmZpbGVzID0gZC5nZXRWYXIoICdCQkZJTEVTJywgVHJ1ZSApCisgICAgdGFyY2ggICA9IGQuZ2V0VmFyKCAnVEFSR0VUX0FSQ0gnLCBUcnVlICkKKyAgICBmcHUgICAgID0gZC5nZXRWYXIoICdUQVJHRVRfRlBVJywgVHJ1ZSApCisgICAgb2VyZXYgICA9IGQuZ2V0VmFyKCAnT0VfUkVWSVNJT04nLCBUcnVlICkgb3IgInVua25vd24iCisKKyAgICAjIHRoZXJlIGlzIGEgYnVnIHdpdGggdGlwcGxlIHF1b3RlZCBzdHJpbmdzCisgICAgIyBpIHdpbGwgd29yayBhcm91bmQgYnV0IHdpbGwgZml4IHRoZSBvcmlnaW5hbAorICAgICMgYnVnIGFzIHdlbGwKKyAgICBvdXRwdXQgPSBbXQorICAgIG91dHB1dC5hcHBlbmQoIj09IFRpbmRlcmJveCBJbmZvIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGltZTogJSh0aW1lKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJPUzogJShvcHMpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIiUodmVyc2lvbilzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiQ29tcGlsZXI6IGdjYyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRpbmRlcmJveCBDbGllbnQ6IDAuMSIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRpbmRlcmJveCBDbGllbnQgTGFzdCBNb2RpZmllZDogeWVzdGVyZGF5IiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGluZGVyYm94IFByb3RvY29sOiAwLjEiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJVUkw6ICUodXJsKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUcmVlOiAlKHRyZWUpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkNvbmZpZzoiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJicmFuY2ggPSAnJShicmFuY2gpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUQVJHRVRfQVJDSCA9ICclKHRhcmNoKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVEFSR0VUX0ZQVSA9ICclKGZwdSlzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlNSQ0RBVEUgPSAnJShzcmNkYXRlKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiTUFDSElORSA9ICclKG1hY2hpbmUpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJESVNUUk8gPSAnJShkaXN0cm8pcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJCQkZJTEVTID0gJyUoYmJmaWxlcylzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIk9FUkVWID0gJyUob2VyZXYpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCI9PSBFbmQgVGluZGVyYm94IENsaWVudCBJbmZvIiApCisKKyAgICAjIG5vdyBjcmVhdGUgdGhlIHJlYWwgb3V0cHV0CisgICAgcmV0dXJuICJcbiIuam9pbihvdXRwdXQpICUgdmFycygpCisKKworZGVmIHRpbmRlcl9wcmludF9lbnYoKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoaXMgYnVpbGQKKyAgICAiIiIKKyAgICB0aW1lX3N0YXJ0ID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICB0aW1lX2VuZCAgID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKworICAgICMgYnVpbGQgdGhlIGVudmlyb25tZW50CisgICAgZW52ID0gIiIKKyAgICBmb3IgdmFyIGluIG9zLmVudmlyb246CisgICAgICAgIGVudiArPSAiJXM9JXNcbiIgJSAodmFyLCBvcy5lbnZpcm9uW3Zhcl0pCisKKyAgICBvdXRwdXQgPSBbXQorICAgIG91dHB1dC5hcHBlbmQoICItLS0+IFRJTkRFUkJPWCBSVU5OSU5HIGVudiAlKHRpbWVfc3RhcnQpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIGVudiApCisgICAgb3V0cHV0LmFwcGVuZCggIjwtLS0gVElOREVSQk9YIEZJTklTSEVEIChTVUNDRVNTKSAlKHRpbWVfZW5kKXMiICkKKworICAgIHJldHVybiAiXG4iLmpvaW4ob3V0cHV0KSAlIHZhcnMoKQorCitkZWYgdGluZGVyX3RpbmRlcl9zdGFydChkLCBldmVudCk6CisgICAgIiIiCisgICAgUFJJTlQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBidWlsZAorICAgICIiIgorCisgICAgdGltZV9zdGFydCA9IHRpbmRlcl90aW1lX3N0cmluZygpCisgICAgY29uZmlnID0gdGluZGVyX3ByaW50X2luZm8oZCkKKyAgICAjZW52ICAgID0gdGluZGVyX3ByaW50X2VudigpCisgICAgdGltZV9lbmQgICA9IHRpbmRlcl90aW1lX3N0cmluZygpCisgICAgcGFja2FnZXMgPSAiICIuam9pbiggZXZlbnQuZ2V0UGtncygpICkgCisKKyAgICBvdXRwdXQgPSBbXQorICAgIG91dHB1dC5hcHBlbmQoICItLS0+IFRJTkRFUkJPWCBQUklOVElORyBDT05GSUdVUkFUSU9OICUodGltZV9zdGFydClzIiApCisgICAgb3V0cHV0LmFwcGVuZCggY29uZmlnICkKKyAgICAjb3V0cHV0LmFwcGVuZCggZW52ICAgICkKKyAgICBvdXRwdXQuYXBwZW5kKCAiPC0tLSBUSU5ERVJCT1ggRklOSVNIRUQgUFJJTlRJTkcgQ09ORklHVVJBVElPTiAlKHRpbWVfZW5kKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCAiLS0tPiBUSU5ERVJCT1ggQlVJTERJTkcgJyUocGFja2FnZXMpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCAiPC0tLSBUSU5ERVJCT1ggU1RBUlRJTkcgQlVJTEQgTk9XIiApCisKKyAgICBvdXRwdXQuYXBwZW5kKCAiIiApCisKKyAgICByZXR1cm4gIlxuIi5qb2luKG91dHB1dCkgJSB2YXJzKCkKKworZGVmIHRpbmRlcl9kb190aW5kZXJfcmVwb3J0KGV2ZW50KToKKyAgICAiIiIKKyAgICBSZXBvcnQgdG8gdGhlIHRpbmRlcmJveDoKKyAgICAgICAgT24gdGhlIEJ1aWxkU3RhcnQgd2Ugd2lsbCBpbmZvcm0gdGhlIGJveCBkaXJlY3RseQorICAgICAgICBPbiB0aGUgb3RoZXIgZXZlbnRzIHdlIHdpbGwgd3JpdGUgdG8gdGhlIFRJTkRFUl9MT0cgYW5kCisgICAgICAgIHdoZW4gdGhlIFRhc2sgaXMgZmluaXNoZWQgd2Ugd2lsbCBzZW5kIHRoZSByZXBvcnQuCisKKyAgICBUaGUgYWJvdmUgaXMgbm90IHlldCBmdWxseSBpbXBsZW1lbnRlZC4gQ3VycmVudGx5IHdlIHNlbmQKKyAgICBpbmZvcm1hdGlvbiBpbW1lZGlhdGVseS4gVGhlIGNhY2hpbmcvcXVldWluZyBuZWVkcyB0byBiZQorICAgIGltcGxlbWVudGVkLiBBbHNvIHNlbmRpbmcgbW9yZSBvciBsZXNzIGluZm9ybWF0aW9uIGlzIG5vdAorICAgIGltcGxlbWVudGVkIHlldC4KKworICAgIFdlIGhhdmUgdHdvIHRlbXBvcmFyeSBmaWxlcyBzdG9yZWQgaW4gdGhlIFRNUCBkaXJlY3RvcnkuIE9uZSBmaWxlCisgICAgY29udGFpbnMgdGhlIGFzc2lnbmVkIG1hY2hpbmUgaWQgZm9yIHRoZSB0aW5kZXJjbGllbnQuIFRoaXMgaWQgZ2V0cworICAgIGFzc2lnbmVkIHdoZW4gd2UgY29ubmVjdCB0aGUgYm94IGFuZCBzdGFydCB0aGUgYnVpbGQgcHJvY2VzcyB0aGUgc2Vjb25kCisgICAgZmlsZSBpcyB1c2VkIHRvIHdvcmthcm91bmQgYW4gRXZlbnRIYW5kbGVyIGxpbWl0YXRpb24uIElmIEJpdEJha2UgaXMgcmFuCisgICAgd2l0aCB0aGUgY29udGludWUgb3B0aW9uIHdlIHdhbnQgdGhlIEJ1aWxkIHRvIGZhaWwgZXZlbiBpZiB3ZSBnZXQgdGhlCisgICAgQnVpbGRDb21wbGV0ZWQgRXZlbnQuIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGxvb2sgdXAgdGhlIHN0YXR1cyBhbmQKKyAgICBzZW5kIGl0IGluc3RlYWQgb2YgMTAwL3N1Y2Nlc3MuCisgICAgIiIiCisgICAgaW1wb3J0IGdsb2IKKworICAgICMgdmFyaWFibGVzCisgICAgbmFtZSA9IGJiLmV2ZW50LmdldE5hbWUoZXZlbnQpCisgICAgbG9nICA9ICIiCisgICAgc3RhdHVzID0gMQorICAgICMgQ2hlY2sgd2hhdCB3ZSBuZWVkIHRvIGRvIEJ1aWxkKiBzaG93cyB3ZSBzdGFydCBvciBhcmUgZG9uZQorICAgIGlmIG5hbWUgPT0gIkJ1aWxkU3RhcnRlZCI6CisgICAgICAgIHRpbmRlcl9idWlsZF9zdGFydChldmVudC5kYXRhKQorICAgICAgICBsb2cgPSB0aW5kZXJfdGluZGVyX3N0YXJ0KGV2ZW50LmRhdGEsZXZlbnQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB0cnVuY2F0ZSB0aGUgdGluZGVyIGxvZyBmaWxlCisgICAgICAgICAgICBmID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVElOREVSX0xPRycsIFRydWUpLCAndycpCisgICAgICAgICAgICBmLndyaXRlKCIiKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHdyaXRlIGEgc3RhdHVzIHRvIHRoZSBmaWxlLiBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIC1rIG9wdGlvbgorICAgICAgICAgICAgIyBvZiBCaXRCYWtlCisgICAgICAgICAgICBnID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItc3RhdHVzIiwgJ3cnKQorICAgICAgICAgICAgZy53cml0ZSgiIikKKyAgICAgICAgICAgIGcuY2xvc2UoKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgQXBwZW5kIHRoZSBUYXNrLUxvZyAoY29tcGlsZSxjb25maWd1cmUuLi4pIHRvIHRoZSBsb2cgZmlsZQorICAgICMgd2Ugd2lsbCBzZW5kIHRvIHRoZSBzZXJ2ZXIKKyAgICBpZiBuYW1lID09ICJUYXNrU3VjY2VlZGVkIiBvciBuYW1lID09ICJUYXNrRmFpbGVkIjoKKyAgICAgICAgbG9nX2ZpbGUgPSBnbG9iLmdsb2IoIiVzL2xvZy4lcy4qIiAlIChldmVudC5kYXRhLmdldFZhcignVCcsIFRydWUpLCBldmVudC50YXNrKSkKKworICAgICAgICBpZiBsZW4obG9nX2ZpbGUpICE9IDA6CisgICAgICAgICAgICB0b19maWxlICA9IGV2ZW50LmRhdGEuZ2V0VmFyKCdUSU5ERVJfTE9HJywgVHJ1ZSkKKyAgICAgICAgICAgIGxvZyAgICAgKz0gIiIuam9pbihvcGVuKGxvZ19maWxlWzBdLCAncicpLnJlYWRsaW5lcygpKQorCisgICAgIyBzZXQgdGhlIHJpZ2h0ICdIRUFERVInL1N1bW1hcnkgZm9yIHRoZSBUaW5kZXJCb3gKKyAgICBpZiBuYW1lID09ICJUYXNrU3RhcnRlZCI6CisgICAgICAgIGxvZyArPSAiLS0tPiBUSU5ERVJCT1ggVGFzayAlcyBzdGFydGVkXG4iICUgZXZlbnQudGFzaworICAgIGVsaWYgbmFtZSA9PSAiVGFza1N1Y2NlZWRlZCI6CisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggVGFzayAlcyBkb25lIChTVUNDRVNTKVxuIiAlIGV2ZW50LnRhc2sKKyAgICBlbGlmIG5hbWUgPT0gIlRhc2tGYWlsZWQiOgorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIFRhc2sgJXMgZmFpbGVkIChGQUlMVVJFKVxuIiAlIGV2ZW50LnRhc2sKKyAgICBlbGlmIG5hbWUgPT0gIlBrZ1N0YXJ0ZWQiOgorICAgICAgICBsb2cgKz0gIi0tLT4gVElOREVSQk9YIFBhY2thZ2UgJXMgc3RhcnRlZFxuIiAlIGV2ZW50LmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpCisgICAgZWxpZiBuYW1lID09ICJQa2dTdWNjZWVkZWQiOgorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIFBhY2thZ2UgJXMgZG9uZSAoU1VDQ0VTUylcbiIgJSBldmVudC5kYXRhLmdldFZhcignUEYnLCBUcnVlKQorICAgIGVsaWYgbmFtZSA9PSAiUGtnRmFpbGVkIjoKKyAgICAgICAgaWYgbm90IGV2ZW50LmRhdGEuZ2V0VmFyKCdUSU5ERVJfQVVUT0JVSUxEJywgVHJ1ZSkgPT0gIjAiOgorICAgICAgICAgICAgYnVpbGQuZXhlY190YXNrKCdkb19jbGVhbicsIGV2ZW50LmRhdGEpCisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggUGFja2FnZSAlcyBmYWlsZWQgKEZBSUxVUkUpXG4iICUgZXZlbnQuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICAgICAgc3RhdHVzID0gMjAwCisgICAgICAgICMgcmVtZW1iZXIgdGhlIGZhaWx1cmUgZm9yIHRoZSAtayBjYXNlCisgICAgICAgIGggPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1zdGF0dXMiLCAndycpCisgICAgICAgIGgud3JpdGUoIjIwMCIpCisgICAgZWxpZiBuYW1lID09ICJCdWlsZENvbXBsZXRlZCI6CisgICAgICAgIGxvZyArPSAiQnVpbGQgQ29tcGxldGVkXG4iCisgICAgICAgIHN0YXR1cyA9IDEwMAorICAgICAgICAjIENoZWNrIGlmIHdlIGhhdmUgYSBvbGQgc3RhdHVzLi4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUTVBESVInLFRydWUpKycvdGluZGVyLXN0YXR1cycsICdyJykKKyAgICAgICAgICAgIHN0YXR1cyA9IGludChoLnJlYWQoKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZWxpZiBuYW1lID09ICJNdWx0aXBsZVByb3ZpZGVycyI6CisgICAgICAgIGxvZyArPSAiLS0tPiBUSU5ERVJCT1ggTXVsdGlwbGUgUHJvdmlkZXJzXG4iCisgICAgICAgIGxvZyArPSAibXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgKCVzKTtcbiIgJSAiLCAiLmpvaW4oZXZlbnQuZ2V0Q2FuZGlkYXRlcygpKQorICAgICAgICBsb2cgKz0gImNvbnNpZGVyIGRlZmluaW5nIFBSRUZFUlJFRF9QUk9WSURFUl8lc1xuIiAlIGV2ZW50LmdldEl0ZW0oKQorICAgICAgICBsb2cgKz0gImlzIHJ1bnRpbWU6ICVkXG4iICUgZXZlbnQuaXNSdW50aW1lKCkKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBNdWx0aXBsZSBQcm92aWRlcnNcbiIKKyAgICBlbGlmIG5hbWUgPT0gIk5vUHJvdmlkZXIiOgorICAgICAgICBsb2cgKz0gIkVycm9yOiBObyBQcm92aWRlciBmb3I6ICVzXG4iICUgZXZlbnQuZ2V0SXRlbSgpCisgICAgICAgIGxvZyArPSAiRXJyb3I6V2FzIFJ1bnRpbWU6ICVkXG4iICUgZXZlbnQuaXNSdW50aW1lKCkKKyAgICAgICAgc3RhdHVzID0gMjAwCisgICAgICAgICMgcmVtZW1iZXIgdGhlIGZhaWx1cmUgZm9yIHRoZSAtayBjYXNlCisgICAgICAgIGggPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1zdGF0dXMiLCAndycpCisgICAgICAgIGgud3JpdGUoIjIwMCIpCisKKyAgICAjIG5vdyBwb3N0IHRoZSBsb2cKKyAgICBpZiBsZW4obG9nKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgICMgZm9yIG5vdyB3ZSB3aWxsIHVzZSB0aGUgaHR0cCBwb3N0IG1ldGhvZCBhcyBpdCBpcyB0aGUgb25seSBvbmUKKyAgICBsb2dfcG9zdF9tZXRob2QgPSB0aW5kZXJfc2VuZF9odHRwCisgICAgbG9nX3Bvc3RfbWV0aG9kKGV2ZW50LmRhdGEsIHN0YXR1cywgbG9nKQorCisKKyMgd2Ugd2FudCB0byBiZSBhbiBldmVudCBoYW5kbGVyCithZGRoYW5kbGVyIHRpbmRlcmNsaWVudF9ldmVudGhhbmRsZXIKK3B5dGhvbiB0aW5kZXJjbGllbnRfZXZlbnRoYW5kbGVyKCkgeworICAgIGlmIGUuZGF0YSBpcyBOb25lIG9yIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIk1zZ05vdGUiOgorICAgICAgICByZXR1cm4KKworICAgIGRvX3RpbmRlcl9yZXBvcnQgPSBlLmRhdGEuZ2V0VmFyKCdUSU5ERVJfUkVQT1JUJywgVHJ1ZSkKKyAgICBpZiBkb190aW5kZXJfcmVwb3J0IGFuZCBkb190aW5kZXJfcmVwb3J0ID09ICIxIjoKKyAgICAgICAgdGluZGVyX2RvX3RpbmRlcl9yZXBvcnQoZSkKKworICAgIHJldHVybgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9hc3Rlci5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdG9hc3Rlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2NmZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MKQEAgLTAsMCArMSwzNTUgQEAKKyMKKyMgVG9hc3RlciBoZWxwZXIgY2xhc3MKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorIworIyBUaGlzIGJiY2xhc3MgaXMgZGVzaWduZWQgdG8gZXh0cmFjdCBkYXRhIHVzZWQgYnkgT0UtQ29yZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MsCisjIGZvciByZWNvcmRpbmcgaW4gdGhlIFRvYXN0ZXIgc3lzdGVtLgorIyBUaGUgZGF0YSBhY2Nlc3MgaXMgc3luY2hyb25vdXMsIHByZXNlcnZpbmcgdGhlIGJ1aWxkIGRhdGEgaW50ZWdyaXR5IGFjcm9zcworIyBkaWZmZXJlbnQgYnVpbGRzLgorIworIyBUaGUgZGF0YSBpcyB0cmFuc2ZlcnJlZCB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0sIHVzaW5nIHRoZSBNZXRhZGF0YUV2ZW50IG9iamVjdHMuCisjCisjIFRoZSBtb2RlbCBpcyB0byBlbmFibGUgdGhlIGRhdGFkdW1wIGZ1bmN0aW9ucyBhcyBwb3N0ZnVuY3MsIGFuZCBoYXZlIHRoZSBkdW1wCisjIGV4ZWN1dGVkIGFmdGVyIHRoZSByZWFsIHRhc2tmdW5jIGhhcyBiZWVuIGV4ZWN1dGVkLiBUaGlzIHByZXZlbnRzIHRhc2sgc2lnbmF0dXJlIGNoYW5naW5nCisjIGlzIHRvYXN0ZXIgaXMgZW5hYmxlZCBvciBub3QuIEJ1aWxkIHBlcmZvcm1hbmNlIGlzIG5vdCBhZmZlY3RlZCBpZiBUb2FzdGVyIGlzIG5vdCBlbmFibGVkLgorIworIyBUbyBlbmFibGUsIHVzZSBJTkhFUklUIGluIGxvY2FsLmNvbmY6CisjCisjICAgICAgIElOSEVSSVQgKz0gInRvYXN0ZXIiCisjCisjCisjCisjCisKKyMgRmluZCBhbmQgZHVtcCBsYXllciBpbmZvIHdoZW4gd2UgZ290IHRoZSBsYXllcnMgcGFyc2VkCisKKworCitweXRob24gdG9hc3Rlcl9sYXllcmluZm9fZHVtcGRhdGEoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGRlZiBfZ2V0X2dpdF9icmFuY2gobGF5ZXJfcGF0aCk6CisgICAgICAgIGJyYW5jaCA9IHN1YnByb2Nlc3MuUG9wZW4oImdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCAiLCBjd2Q9bGF5ZXJfcGF0aCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBicmFuY2ggPSBicmFuY2gucmVwbGFjZSgncmVmcy9oZWFkcy8nLCAnJykucnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIGJyYW5jaAorCisgICAgZGVmIF9nZXRfZ2l0X3JldmlzaW9uKGxheWVyX3BhdGgpOgorICAgICAgICByZXZpc2lvbiA9IHN1YnByb2Nlc3MuUG9wZW4oImdpdCByZXYtcGFyc2UgSEVBRCAyPi9kZXYvbnVsbCAiLCBjd2Q9bGF5ZXJfcGF0aCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gcmV2aXNpb24KKworICAgIGRlZiBfZ2V0X3VybF9tYXBfbmFtZShsYXllcl9uYW1lKToKKyAgICAgICAgIiIiIFNvbWUgbGF5ZXJzIGhhdmUgYSBkaWZmZXJlbnQgbmFtZSBvbiBvcGVuZW1iZWRkZWQub3JnIHNpdGUsCisgICAgICAgICAgICB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjb3JyZWN0IG5hbWUgdG8gdXNlIGluIHRoZSBVUkwKKyAgICAgICAgIiIiCisKKyAgICAgICAgdXJsX25hbWUgPSBsYXllcl9uYW1lCisgICAgICAgIHVybF9tYXBwaW5nID0geydtZXRhJzogJ29wZW5lbWJlZGRlZC1jb3JlJ30KKworICAgICAgICBmb3Iga2V5IGluIHVybF9tYXBwaW5nLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSA9PSBsYXllcl9uYW1lOgorICAgICAgICAgICAgICAgIHVybF9uYW1lID0gdXJsX21hcHBpbmdba2V5XQorCisgICAgICAgIHJldHVybiB1cmxfbmFtZQorCisgICAgZGVmIF9nZXRfbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbihsYXllcl9wYXRoKToKKworICAgICAgICBsYXllcl92ZXJzaW9uX2luZm8gPSB7fQorICAgICAgICBsYXllcl92ZXJzaW9uX2luZm9bJ2JyYW5jaCddID0gX2dldF9naXRfYnJhbmNoKGxheWVyX3BhdGgpCisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mb1snY29tbWl0J10gPSBfZ2V0X2dpdF9yZXZpc2lvbihsYXllcl9wYXRoKQorICAgICAgICBsYXllcl92ZXJzaW9uX2luZm9bJ3ByaW9yaXR5J10gPSAwCisKKyAgICAgICAgcmV0dXJuIGxheWVyX3ZlcnNpb25faW5mbworCisKKyAgICBkZWYgX2dldF9sYXllcl9kaWN0KGxheWVyX3BhdGgpOgorCisgICAgICAgIGxheWVyX2luZm8gPSB7fQorICAgICAgICBsYXllcl9uYW1lID0gbGF5ZXJfcGF0aC5zcGxpdCgnLycpWy0xXQorICAgICAgICBsYXllcl91cmwgPSAnaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvbGF5ZXIve2xheWVyfS8nCisgICAgICAgIGxheWVyX3VybF9uYW1lID0gX2dldF91cmxfbWFwX25hbWUobGF5ZXJfbmFtZSkKKworICAgICAgICBsYXllcl9pbmZvWyduYW1lJ10gPSBsYXllcl91cmxfbmFtZQorICAgICAgICBsYXllcl9pbmZvWydsb2NhbF9wYXRoJ10gPSBsYXllcl9wYXRoCisgICAgICAgIGxheWVyX2luZm9bJ2xheWVyX2luZGV4X3VybCddID0gbGF5ZXJfdXJsLmZvcm1hdChsYXllcj1sYXllcl91cmxfbmFtZSkKKyAgICAgICAgbGF5ZXJfaW5mb1sndmVyc2lvbiddID0gX2dldF9sYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uKGxheWVyX3BhdGgpCisKKyAgICAgICAgcmV0dXJuIGxheWVyX2luZm8KKworCisgICAgYmJsYXllcnMgPSBlLmRhdGEuZ2V0VmFyKCJCQkxBWUVSUyIsIFRydWUpCisKKyAgICBsbGF5ZXJpbmZvID0ge30KKworICAgIGZvciBsYXllciBpbiB7IGwgZm9yIGwgaW4gYmJsYXllcnMuc3RyaXAoKS5zcGxpdCgiICIpIGlmIGxlbihsKSB9OgorICAgICAgICBsbGF5ZXJpbmZvW2xheWVyXSA9IF9nZXRfbGF5ZXJfZGljdChsYXllcikKKworCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJMYXllckluZm8iLCBsbGF5ZXJpbmZvKSwgZS5kYXRhKQorfQorCisjIER1bXAgcGFja2FnZSBmaWxlIGluZm8gZGF0YQorCitkZWYgX3RvYXN0ZXJfbG9hZF9wa2dkYXRhZmlsZShkaXJwYXRoLCBmaWxlcGF0aCk6CisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgcmUKKyAgICBwa2dkYXRhID0ge30KKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRpcnBhdGgsIGZpbGVwYXRoKSwgInIiKSBhcyBmaW46CisgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrbiwga3YgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIjogIiwgMSkKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2gociJeUEtHXyhbXkEtWjpdKikiLCBrbikKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBwa2dkYXRhWydPUEtHTiddID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGtuID0gIl8iLmpvaW4oW3ggZm9yIHggaW4ga24uc3BsaXQoIl8iKSBpZiB4LmlzdXBwZXIoKV0pCisgICAgICAgICAgICAgICAgcGtnZGF0YVtrbl0gPSBrdi5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYga24gPT0gJ0ZJTEVTX0lORk8nOgorICAgICAgICAgICAgICAgICAgICBwa2dkYXRhW2tuXSA9IGpzb24ubG9hZHMoa3YpCisKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgICAgIyBpZ25vcmUgbGluZXMgd2l0aG91dCB2YWxpZCBrZXk6IHZhbHVlIHBhaXJzCisgICAgcmV0dXJuIHBrZ2RhdGEKKworCitweXRob24gdG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhKCkgeworICAgICIiIgorICAgIER1bXBzIHRoZSBkYXRhIGNyZWF0ZWQgYnkgZW1pdF9wa2dkYXRhCisgICAgIiIiCisgICAgIyByZXBsaWNhdGUgdmFyaWFibGVzIGZyb20gdGhlIHBhY2thZ2UuYmJjbGFzcworCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBwa2dkYXRhZGlyID0gZC5nZXRWYXIoJ1BLR0RFU1RXT1JLJywgVHJ1ZSkKKworICAgICMgc2NhbiBhbmQgc2VuZCBkYXRhIGZvciBlYWNoIHBhY2thZ2UKKworICAgIGxwa2dkYXRhID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisKKyAgICAgICAgbHBrZ2RhdGEgPSBfdG9hc3Rlcl9sb2FkX3BrZ2RhdGFmaWxlKHBrZ2RhdGFkaXIgKyAiL3J1bnRpbWUvIiwgcGtnKQorCisgICAgICAgICMgRmlyZSBhbiBldmVudCBjb250YWluaW5nIHRoZSBwa2cgZGF0YQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIlNpbmdsZVBhY2thZ2VJbmZvIiwgbHBrZ2RhdGEpLCBkKQorfQorCisjIDIuIER1bXAgb3V0cHV0IGltYWdlIGZpbGVzIGluZm9ybWF0aW9uCisKK3B5dGhvbiB0b2FzdGVyX2ltYWdlX2R1bXBkYXRhKCkgeworICAgICIiIgorICAgIEltYWdlIGZpbGVuYW1lIGZvciBvdXRwdXQgaW1hZ2VzIGlzIG5vdCBzdGFuZGFyZGl6ZWQuCisgICAgaW1hZ2VfdHlwZXMuYmJjbGFzcyB3aWxsIHNwZWxsIG91dCBJTUFHRV9DTURfeHh4IHZhcmlhYmxlcyB0aGF0IGFjdHVhbGx5CisgICAgaGF2ZSBoYXJkY29kZWQgd2F5cyB0byBjcmVhdGUgaW1hZ2UgZmlsZSBuYW1lcyBpbiB0aGVtLgorICAgIFNvIHdlIGxvb2sgZm9yIGZpbGVzIHN0YXJ0aW5nIHdpdGggdGhlIHNldCBuYW1lLgorICAgICIiIgorCisgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSk7CisgICAgaW1hZ2VfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSk7CisKKyAgICBpbWFnZV9pbmZvX2RhdGEgPSB7fQorICAgIGFydGlmYWN0X2luZm9fZGF0YSA9IHt9CisKKyAgICAjIGNvbGxlY3QgYWxsIGFydGlmYWN0cworICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZGVwbG95X2Rpcl9pbWFnZSk6CisgICAgICAgIGZvciBmbiBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZm4uc3RhcnRzd2l0aChpbWFnZV9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2Vfb3V0cHV0ID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQorICAgICAgICAgICAgICAgICAgICBpbWFnZV9pbmZvX2RhdGFbaW1hZ2Vfb3V0cHV0XSA9IG9zLnN0YXQoaW1hZ2Vfb3V0cHV0KS5zdF9zaXplCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN0YXQKKyAgICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RfcGF0aCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbikKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN0YXQgPSBvcy5zdGF0KGFydGlmYWN0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhhcnRpZmFjdF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0X2luZm9fZGF0YVthcnRpZmFjdF9wYXRoXSA9IGZpbGVzdGF0LnN0X3NpemUKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJPU0Vycm9yRXhjZXB0aW9uIiwgZSksIGQpCisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkltYWdlRmlsZVNpemUiLGltYWdlX2luZm9fZGF0YSksIGQpCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJBcnRpZmFjdEZpbGVTaXplIixhcnRpZmFjdF9pbmZvX2RhdGEpLCBkKQorfQorCisKKworIyBjb2xsZWN0IGxpc3Qgb2YgYnVpbGRzdGF0cyBmaWxlcyBiYXNlZCBvbiBmaXJlZCBldmVudHM7IHdoZW4gdGhlIGJ1aWxkIGNvbXBsZXRlcywgY29sbGVjdCBhbGwgc3RhdHMgYW5kIGZpcmUgYW4gZXZlbnQgd2l0aCBjb2xsZWN0ZWQgZGF0YQorCitweXRob24gdG9hc3Rlcl9jb2xsZWN0X3Rhc2tfc3RhdHMoKSB7CisgICAgaW1wb3J0IGJiLmJ1aWxkCisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaW1wb3J0IGJiLmRhdGEKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICBpbXBvcnQgb3MKKworICAgIGlmIG5vdCBlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKToKKyAgICAgICAgcmV0dXJuICAjIGlmIHdlIGRvbid0IGhhdmUgYnVpbGRzdGF0cywgd2UgY2Fubm90IGNvbGxlY3Qgc3RhdHMKKworICAgIGRlZiBfYXBwZW5kX3JlYWRfbGlzdCh2KToKKyAgICAgICAgbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGUuZGF0YS5leHBhbmQoIiR7VE9QRElSfS90b2FzdGVyLmxvY2siKSwgRmFsc2UsIFRydWUpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgInRvYXN0ZXJzdGF0bGlzdCIpLCAiYSIpIGFzIGZvdXQ6CisgICAgICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmV4cGFuZCgiJHtQRn0iKSkKKyAgICAgICAgICAgIGZvdXQud3JpdGUoIiVzOjolczo6JXM6OiVzXG4iICUgKGUudGFza2ZpbGUsIGUudGFza25hbWUsIG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2spLCBlLmRhdGEuZXhwYW5kKCIke1BOfSIpKSkKKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICBkZWYgX3JlYWRfc3RhdHMoZmlsZW5hbWUpOgorICAgICAgICBjcHVfdXNhZ2UgPSAwCisgICAgICAgIGRpc2tfaW8gPSAwCisgICAgICAgIHN0YXJ0aW8gPSAnMCcKKyAgICAgICAgZW5kaW8gPSAnMCcKKyAgICAgICAgc3RhcnRlZCA9ICcwJworICAgICAgICBlbmRlZCA9ICcwJworICAgICAgICBwbiA9ICcnCisgICAgICAgIHRhc2tuYW1lID0gJycKKyAgICAgICAgc3RhdGluZm8gPSB7fQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyB0YXNrX2JzOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdGFza19icy5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBrLHYgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIjogIiwgMSkKKyAgICAgICAgICAgICAgICBzdGF0aW5mb1trXSA9IHYKKworICAgICAgICBpZiAiQ1BVIHVzYWdlIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIGNwdV91c2FnZSA9IHN0cihzdGF0aW5mb1siQ1BVIHVzYWdlIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJFbmRUaW1lSU8iIGluIHN0YXRpbmZvOgorICAgICAgICAgICAgZW5kaW8gPSBzdHIoc3RhdGluZm9bIkVuZFRpbWVJTyJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBpZiAiU3RhcnRUaW1lSU8iIGluIHN0YXRpbmZvOgorICAgICAgICAgICAgc3RhcnRpbyA9IHN0cihzdGF0aW5mb1siU3RhcnRUaW1lSU8iXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIlN0YXJ0ZWQiIGluIHN0YXRpbmZvOgorICAgICAgICAgICAgc3RhcnRlZCA9IHN0cihzdGF0aW5mb1siU3RhcnRlZCJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBpZiAiRW5kZWQiIGluIHN0YXRpbmZvOgorICAgICAgICAgICAgZW5kZWQgPSBzdHIoc3RhdGluZm9bIkVuZGVkIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGRpc2tfaW8gPSBpbnQoZW5kaW8pIC0gaW50KHN0YXJ0aW8pCisKKyAgICAgICAgZWxhcHNlZF90aW1lID0gZmxvYXQoZW5kZWQpIC0gZmxvYXQoc3RhcnRlZCkKKworICAgICAgICBjcHVfdXNhZ2UgPSBmbG9hdChjcHVfdXNhZ2UpCisKKyAgICAgICAgcmV0dXJuIHsnY3B1X3VzYWdlJzogY3B1X3VzYWdlLCAnZGlza19pbyc6IGRpc2tfaW8sICdlbGFwc2VkX3RpbWUnOiBlbGFwc2VkX3RpbWV9CisKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgKGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpKToKKyAgICAgICAgX2FwcGVuZF9yZWFkX2xpc3QoZSkKKyAgICAgICAgcGFzcworCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKSBhbmQgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IikpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IiksICJyIikgYXMgZmluOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICh0YXNrZmlsZSwgdGFza25hbWUsIGZpbGVuYW1lLCByZWNpcGVuYW1lKSA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiOjoiKQorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoKHRhc2tmaWxlLCB0YXNrbmFtZSwgX3JlYWRfc3RhdHMoZmlsZW5hbWUpLCByZWNpcGVuYW1lKSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJCdWlsZFN0YXRzTGlzdCIsIGV2ZW50cyksIGUuZGF0YSkKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgInRvYXN0ZXJzdGF0bGlzdCIpKQorfQorCisjIGR1bXAgcmVsZXZhbnQgYnVpbGQgaGlzdG9yeSBkYXRhIGFzIGFuIGV2ZW50IHdoZW4gdGhlIGJ1aWxkIGlzIGNvbXBsZXRlZAorCitweXRob24gdG9hc3Rlcl9idWlsZGhpc3RvcnlfZHVtcCgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBCVUlMREhJU1RPUllfRElSID0gZS5kYXRhLmV4cGFuZCgiJHtUT1BESVJ9L2J1aWxkaGlzdG9yeSIpCisgICAgQlVJTERISVNUT1JZX0RJUl9JTUFHRV9CQVNFID0gZS5kYXRhLmV4cGFuZCgiJXMvaW1hZ2VzLyR7TUFDSElORV9BUkNIfS8ke1RDTElCQ30vIiUgQlVJTERISVNUT1JZX0RJUikKKyAgICBwa2dkYXRhX2RpciA9IGUuZGF0YS5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkKKworCisgICAgIyBzY2FuIHRoZSBidWlsZCB0YXJnZXRzIGZvciB0aGlzIGJ1aWxkCisgICAgaW1hZ2VzID0ge30KKyAgICBhbGxwa2dzID0ge30KKyAgICBmaWxlcyA9IHt9CisgICAgZm9yIHRhcmdldCBpbiBlLl9wa2dzOgorICAgICAgICBpbnN0YWxsZWRfaW1nX3BhdGggPSBlLmRhdGEuZXhwYW5kKG9zLnBhdGguam9pbihCVUlMREhJU1RPUllfRElSX0lNQUdFX0JBU0UsIHRhcmdldCkpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGluc3RhbGxlZF9pbWdfcGF0aCk6CisgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XSA9IHt9CisgICAgICAgICAgICBmaWxlc1t0YXJnZXRdID0ge30KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ2RpcnMnXSA9IFtdCisgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydzeW1zJ10gPSBbXQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZmlsZXMnXSA9IFtdCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2luc3RhbGxlZC1wYWNrYWdlLXNpemVzLnR4dCIgJSBpbnN0YWxsZWRfaW1nX3BhdGgsICJyIikgYXMgZmluOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCI7IikKKyAgICAgICAgICAgICAgICAgICAgcHNpemUsIHB4ID0gbGluZS5zcGxpdCgiXHQiKQorICAgICAgICAgICAgICAgICAgICBwdW5pdCwgcG5hbWUgPSBweC5zcGxpdCgiICIpCisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBzaXplIGlzICJpbnN0YWxsZWQtc2l6ZSIgYXMgaXQgbWVhc3VyZXMgaG93IG11Y2ggc3BhY2UgaXQgdGFrZXMgb24gZGlzaworICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtwbmFtZS5zdHJpcCgpXSA9IHsnc2l6ZSc6aW50KHBzaXplKSoxMDI0LCAnZGVwZW5kcycgOiBbXX0KKworICAgICAgICAgICAgd2l0aCBvcGVuKCIlcy9kZXBlbmRzLmRvdCIgJSBpbnN0YWxsZWRfaW1nX3BhdGgsICJyIikgYXMgZmluOgorICAgICAgICAgICAgICAgIHAgPSByZS5jb21waWxlKHInIC0+ICcpCisgICAgICAgICAgICAgICAgZG90ID0gcmUuY29tcGlsZShyJy4qc3R5bGU9ZG90dGVkJykKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnOycpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzcGxpdCA9IHAuc3BsaXQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzcGxpdCkgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuYW1lID0gbGluZXNwbGl0WzBdLnJzdHJpcCgnIicpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHNuYW1lID0gbGluZXNwbGl0WzFdLnNwbGl0KCIgIilbMF0uc3RyaXAoKS5zdHJpcCgiOyIpLnN0cmlwKCciJykucnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHR5cGUgPSAiZGVwZW5kcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRvdC5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0eXBlID0gInJlY29tbWVuZHMiCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcG5hbWUgaW4gaW1hZ2VzW3RhcmdldF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF1bcG5hbWVdID0geydzaXplJzogMCwgJ2RlcGVuZHMnIDogW119CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGVwZW5kc25hbWUgaW4gaW1hZ2VzW3RhcmdldF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF1bZGVwZW5kc25hbWVdID0geydzaXplJzogMCwgJ2RlcGVuZHMnIDogW119CisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtwbmFtZV1bJ2RlcGVuZHMnXS5hcHBlbmQoKGRlcGVuZHNuYW1lLCBkZXB0eXBlKSkKKworICAgICAgICAgICAgd2l0aCBvcGVuKCIlcy9maWxlcy1pbi1pbWFnZS50eHQiICUgaW5zdGFsbGVkX2ltZ19wYXRoLCAiciIpIGFzIGZpbjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICAgICAgICAgIGxjID0gWyB4IGZvciB4IGluIGxpbmUuc3RyaXAoKS5zcGxpdCgiICIpIGlmIGxlbih4KSA+IDAgXQorICAgICAgICAgICAgICAgICAgICBpZiBsY1swXS5zdGFydHN3aXRoKCJsIik6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydzeW1zJ10uYXBwZW5kKGxjKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGxjWzBdLnN0YXJ0c3dpdGgoImQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ2RpcnMnXS5hcHBlbmQobGMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydmaWxlcyddLmFwcGVuZChsYykKKworICAgICAgICAgICAgZm9yIHBuYW1lIGluIGltYWdlc1t0YXJnZXRdOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwbmFtZSBpbiBhbGxwa2dzOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dkYXRhID0gX3RvYXN0ZXJfbG9hZF9wa2dkYXRhZmlsZSgiJXMvcnVudGltZS1yZXZlcnNlLyIgJSBwa2dkYXRhX2RpciwgcG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZXhwZWN0IHRoaXMgZS5nLiBmb3IgUlJFQ09NTUVORFMgdGhhdCBhcmUgdW5zYXRpc2ZpZWQgYXQgcnVudGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGFsbHBrZ3NbcG5hbWVdID0gcGtnZGF0YQorCisKKyAgICBkYXRhID0geyAncGtnZGF0YScgOiBhbGxwa2dzLCAnaW1nZGF0YScgOiBpbWFnZXMsICdmaWxlZGF0YScgOiBmaWxlcyB9CisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkltYWdlUGtnTGlzdCIsIGRhdGEpLCBlLmRhdGEpCisKK30KKworIyBkdW1wIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gbGljZW5zZSBtYW5pZmVzdCBwYXRoCisKK3B5dGhvbiB0b2FzdGVyX2xpY2Vuc2VtYW5pZmVzdF9kdW1wKCkgeworICAgIGRlcGxveV9kaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpOworICAgIGltYWdlX25hbWUgPSBkLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpOworCisgICAgZGF0YSA9IHsgJ2RlcGxveV9kaXInIDogZGVwbG95X2RpciwgJ2ltYWdlX25hbWUnIDogaW1hZ2VfbmFtZSB9CisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkxpY2Vuc2VNYW5pZmVzdFBhdGgiLCBkYXRhKSwgZCkKK30KKworIyBzZXQgZXZlbnQgaGFuZGxlcnMKK2FkZGhhbmRsZXIgdG9hc3Rlcl9sYXllcmluZm9fZHVtcGRhdGEKK3RvYXN0ZXJfbGF5ZXJpbmZvX2R1bXBkYXRhW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZCIKKworYWRkaGFuZGxlciB0b2FzdGVyX2NvbGxlY3RfdGFza19zdGF0cwordG9hc3Rlcl9jb2xsZWN0X3Rhc2tfc3RhdHNbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCBiYi5idWlsZC5UYXNrU3VjY2VlZGVkIGJiLmJ1aWxkLlRhc2tGYWlsZWQiCisKK2FkZGhhbmRsZXIgdG9hc3Rlcl9idWlsZGhpc3RvcnlfZHVtcAordG9hc3Rlcl9idWlsZGhpc3RvcnlfZHVtcFtldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIgorZG9fcGFja2FnZVtwb3N0ZnVuY3NdICs9ICJ0b2FzdGVyX3BhY2thZ2VfZHVtcGRhdGEgIgorZG9fcGFja2FnZVt2YXJkZXBzZXhjbHVkZV0gKz0gInRvYXN0ZXJfcGFja2FnZV9kdW1wZGF0YSAiCisKK2RvX3Jvb3Rmc1twb3N0ZnVuY3NdICs9ICJ0b2FzdGVyX2ltYWdlX2R1bXBkYXRhICIKK2RvX3Jvb3Rmc1twb3N0ZnVuY3NdICs9ICJ0b2FzdGVyX2xpY2Vuc2VtYW5pZmVzdF9kdW1wICIKK2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gInRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEgdG9hc3Rlcl9saWNlbnNlbWFuaWZlc3RfZHVtcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjJiOTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzCkBAIC0wLDAgKzEsMTU0IEBACitpbmhlcml0IHNpdGVpbmZvIGtlcm5lbC1hcmNoCisKKyMgV2Ugd2FudCB0byBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgTVVMVElNQUNIX1RBUkdFVF9TWVMsIGJlY2F1c2UgaXQKKyMgZG9lc24ndCBhbHdheXMgbWF0Y2ggb3VyIGV4cGVjdGF0aW9ucy4uLiBidXQgd2UgZGVmYXVsdCB0byB0aGUgc3RvY2sgdmFsdWUKK1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVMgPz0gIiR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbXVjbGliYyIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9saWJjLW11c2wgPSAiIC1tbXVzbCIKKworIyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZW52aXJvbm1lbnQtc2V0dXAtc2NyaXB0IGZvciB1c2UgaW4gYSBkZXBsb3lhYmxlIFNESwordG9vbGNoYWluX2NyZWF0ZV9zZGtfZW52X3NjcmlwdCAoKSB7CisJIyBDcmVhdGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisJc2RrcGF0aG5hdGl2ZT0kezc6LSR7U0RLUEFUSE5BVElWRX19CisJcHJlZml4PSR7NjotJHtwcmVmaXhfbmF0aXZlc2RrfX0KKwliaW5kaXI9JHs1Oi0ke2JpbmRpcl9uYXRpdmVzZGt9fQorCWxpYmRpcj0kezQ6LSR7bGliZGlyfX0KKwlzeXNyb290PSR7MzotJHtTREtUQVJHRVRTWVNST09UfX0KKwltdWx0aW1hY2hfdGFyZ2V0X3N5cz0kezI6LSR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU319CisJc2NyaXB0PSR7MTotJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSRtdWx0aW1hY2hfdGFyZ2V0X3N5c30KKwlybSAtZiAkc2NyaXB0CisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBTREtUQVJHRVRTWVNST09UPSciJHN5c3Jvb3QiID4+ICRzY3JpcHQKKwlFWFRSQVBBVEg9IiIKKwlmb3IgaSBpbiAke0NBTkFESUFORVhUUkFPU307IGRvCisJCUVYVFJBUEFUSD0iJEVYVFJBUEFUSDokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSRpIgorCWRvbmUKKwllY2hvICJleHBvcnQgUEFUSD0kc2RrcGF0aG5hdGl2ZSRiaW5kaXI6JHNka3BhdGhuYXRpdmUkYmluZGlyLy4uLyR7SE9TVF9TWVN9L2Jpbjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvJHtUQVJHRVRfU1lTfSIkRVhUUkFQQVRIJzokUEFUSCcgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBDQ0FDSEVfUEFUSD0kc2RrcGF0aG5hdGl2ZSRiaW5kaXI6JHNka3BhdGhuYXRpdmUkYmluZGlyLy4uLyR7SE9TVF9TWVN9L2Jpbjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvJHtUQVJHRVRfU1lTfSIkRVhUUkFQQVRIJzokQ0NBQ0hFX1BBVEgnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUj0kU0RLVEFSR0VUU1lTUk9PVCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1BBVEg9JFNES1RBUkdFVFNZU1JPT1QnIiRsaWJkaXIiJy9wa2djb25maWcnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ09ORklHX1NJVEU9JHtTREtQQVRIfS9zaXRlLWNvbmZpZy0nIiR7bXVsdGltYWNoX3RhcmdldF9zeXN9IiA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IE9FQ09SRV9OQVRJVkVfU1lTUk9PVD1cIiRzZGtwYXRobmF0aXZlXCIiID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX1RBUkdFVF9TWVNST09UPSIkU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICJleHBvcnQgT0VDT1JFX0FDTE9DQUxfT1BUUz1cIi1JICRzZGtwYXRobmF0aXZlL3Vzci9zaGFyZS9hY2xvY2FsXCIiID4+ICRzY3JpcHQKKwllY2hvICJleHBvcnQgUFlUSE9OSE9NRT0kc2RrcGF0aG5hdGl2ZSRwcmVmaXgiID4+ICRzY3JpcHQKKworCXRvb2xjaGFpbl9zaGFyZWRfZW52X3NjcmlwdAorfQorCisjIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQgaW4gdGhlIFRNUERJUiB3aGljaCBlbmFibGVzCisjIGEgT0UtY29yZSBJREUgdG8gaW50ZWdyYXRlIHdpdGggdGhlIGJ1aWxkIHRyZWUKK3Rvb2xjaGFpbl9jcmVhdGVfdHJlZV9lbnZfc2NyaXB0ICgpIHsKKwlzY3JpcHQ9JHtUTVBESVJ9L2Vudmlyb25tZW50LXNldHVwLSR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlybSAtZiAkc2NyaXB0CisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQQVRIPSR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3IvYmluOiR7UEFUSH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ0NBQ0hFX1BBVEg9JHtTVEFHSU5HX0RJUl9OQVRJVkV9L3Vzci9iaW46JHtDQ0FDSEVfUEFUSH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUj0ke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfUEFUSD0ke1BLR19DT05GSUdfUEFUSH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ09ORklHX1NJVEU9IiR7QHNpdGVpbmZvX2dldF9maWxlcyhkKX0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFNES1RBUkdFVFNZU1JPT1Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9OQVRJVkVfU1lTUk9PVD0iJHtTVEFHSU5HX0RJUl9OQVRJVkV9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfVEFSR0VUX1NZU1JPT1Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX0FDTE9DQUxfT1BUUz0iLUkgJHtTVEFHSU5HX0RJUl9OQVRJVkV9L3Vzci9zaGFyZS9hY2xvY2FsIicgPj4gJHNjcmlwdAorCisJdG9vbGNoYWluX3NoYXJlZF9lbnZfc2NyaXB0Cit9CisKK3Rvb2xjaGFpbl9zaGFyZWRfZW52X3NjcmlwdCAoKSB7CisJZWNobyAnZXhwb3J0IENDPSIke1RBUkdFVF9QUkVGSVh9Z2NjICR7VEFSR0VUX0NDX0FSQ0h9IC0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ1hYPSIke1RBUkdFVF9QUkVGSVh9ZysrICR7VEFSR0VUX0NDX0FSQ0h9IC0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ1BQPSIke1RBUkdFVF9QUkVGSVh9Z2NjIC1FICR7VEFSR0VUX0NDX0FSQ0h9IC0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQVM9IiR7VEFSR0VUX1BSRUZJWH1hcyAke1RBUkdFVF9BU19BUkNIfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTEQ9IiR7VEFSR0VUX1BSRUZJWH1sZCAke1RBUkdFVF9MRF9BUkNIfSAtLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEdEQj0ke1RBUkdFVF9QUkVGSVh9Z2RiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFNUUklQPSR7VEFSR0VUX1BSRUZJWH1zdHJpcCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBSQU5MSUI9JHtUQVJHRVRfUFJFRklYfXJhbmxpYicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPQkpDT1BZPSR7VEFSR0VUX1BSRUZJWH1vYmpjb3B5JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9CSkRVTVA9JHtUQVJHRVRfUFJFRklYfW9iamR1bXAnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQVI9JHtUQVJHRVRfUFJFRklYfWFyJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE5NPSR7VEFSR0VUX1BSRUZJWH1ubScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBNND1tNCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBUQVJHRVRfUFJFRklYPSR7VEFSR0VUX1BSRUZJWH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ09ORklHVVJFX0ZMQUdTPSItLXRhcmdldD0ke1RBUkdFVF9TWVN9IC0taG9zdD0ke1RBUkdFVF9TWVN9IC0tYnVpbGQ9JHtTREtfQVJDSH0tbGludXggLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ0ZMQUdTPSIke1RBUkdFVF9DRkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDWFhGTEFHUz0iJHtUQVJHRVRfQ1hYRkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBMREZMQUdTPSIke1RBUkdFVF9MREZMQUdTfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ1BQRkxBR1M9IiR7VEFSR0VUX0NQUEZMQUdTfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgS0NGTEFHUz0iLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfRElTVFJPX1ZFUlNJT049IiR7RElTVFJPX1ZFUlNJT059IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfU0RLX1ZFUlNJT049IiR7U0RLX1ZFUlNJT059IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBBUkNIPSR7QVJDSH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ1JPU1NfQ09NUElMRT0ke1RBUkdFVF9QUkVGSVh9JyA+PiAkc2NyaXB0CisKKyAgICBjYXQgPj4gJHNjcmlwdCA8PEVPRgorCisjIEFwcGVuZCBlbnZpcm9ubWVudCBzdWJzY3JpcHRzCitpZiBbIC1kICJcJE9FQ09SRV9UQVJHRVRfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kIiBdOyB0aGVuCisgICAgZm9yIGVudmZpbGUgaW4gXCRPRUNPUkVfVEFSR0VUX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZC8qLnNoOyBkbworCSAgICBzb3VyY2UgXCRlbnZmaWxlCisgICAgZG9uZQorZmkKK2lmIFsgLWQgIlwkT0VDT1JFX05BVElWRV9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQiIF07IHRoZW4KKyAgICBmb3IgZW52ZmlsZSBpbiBcJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kLyouc2g7IGRvCisJICAgIHNvdXJjZSBcJGVudmZpbGUKKyAgICBkb25lCitmaQorRU9GCit9CisKKyN3ZSBnZXQgdGhlIGNhY2hlZCBzaXRlIGNvbmZpZyBpbiB0aGUgcnVudGltZQorVE9PTENIQUlOX0NPTkZJR1NJVEVfTk9DQUNIRSA9ICIke0BzaXRlaW5mb19nZXRfZmlsZXMoZCwgVHJ1ZSl9IgorVE9PTENIQUlOX0NPTkZJR1NJVEVfU1lTUk9PVENBQ0hFID0gIiR7U1RBR0lOR19ESVJ9LyR7TUxQUkVGSVh9JHtNQUNISU5FfS8ke3RhcmdldF9kYXRhZGlyfS8ke1RBUkdFVF9TWVN9X2NvbmZpZ19zaXRlLmQiCitUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFID8/PSAidmlydHVhbC8ke01MUFJFRklYfWxpYmMgbmN1cnNlcyIKKworI1RoaXMgZnVuY3Rpb24gY3JlYXRlIGEgc2l0ZSBjb25maWcgZmlsZQordG9vbGNoYWluX2NyZWF0ZV9zZGtfc2l0ZWNvbmZpZyAoKSB7CisJbG9jYWwgc2l0ZWNvbmZpZz0kMQorCisJcm0gLWYgJHNpdGVjb25maWcKKwl0b3VjaCAkc2l0ZWNvbmZpZworCisJZm9yIHNpdGVmaWxlIGluICR7VE9PTENIQUlOX0NPTkZJR1NJVEVfTk9DQUNIRX0gOyBkbworCQljYXQgJHNpdGVmaWxlID4+ICRzaXRlY29uZmlnCisJZG9uZQorCisJI2dldCBjYWNoZWQgc2l0ZSBjb25maWcKKwlmb3Igc2l0ZWZpbGUgaW4gJHtUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFfTsgZG8KKwkJIyBSZXNvbHZlIHZpcnR1YWwvKiBuYW1lcyB0byB0aGUgcmVhbCByZWNpcGUgbmFtZSB1c2luZyBzeXNyb290LXByb3ZpZGVycyBpbmZvCisJCWNhc2UgJHNpdGVmaWxlIGluIHZpcnR1YWwvKikKKwkJCXNpdGVmaWxlPWBlY2hvICRzaXRlZmlsZSB8IHRyIC8gX2AKKwkJCXNpdGVmaWxlPWBjYXQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9L3N5c3Jvb3QtcHJvdmlkZXJzLyRzaXRlZmlsZWAKKwkJZXNhYworCisJCWlmIFsgLXIgJHtUT09MQ0hBSU5fQ09ORklHU0lURV9TWVNST09UQ0FDSEV9LyR7c2l0ZWZpbGV9X2NvbmZpZyBdOyB0aGVuCisJCQljYXQgJHtUT09MQ0hBSU5fQ09ORklHU0lURV9TWVNST09UQ0FDSEV9LyR7c2l0ZWZpbGV9X2NvbmZpZyA+PiAkc2l0ZWNvbmZpZworCQlmaQorCWRvbmUKK30KKyMgVGhlIGltbWVkaWF0ZSBleHBhbnNpb24gYWJvdmUgY2FuIHJlc3VsdCBpbiB1bndhbnRlZCBwYXRoIGRlcGVuZGVuY2llcyBoZXJlCit0b29sY2hhaW5fY3JlYXRlX3Nka19zaXRlY29uZmlnW3ZhcmRlcHNleGNsdWRlXSA9ICJUT09MQ0hBSU5fQ09ORklHU0lURV9TWVNST09UQ0FDSEUiCisKKyNUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIHZlcnNpb24gaW5mb3JtYXRpb24gZmlsZQordG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvbiAoKSB7CisJbG9jYWwgdmVyc2lvbmZpbGU9JDEKKwlybSAtZiAkdmVyc2lvbmZpbGUKKwl0b3VjaCAkdmVyc2lvbmZpbGUKKwllY2hvICdEaXN0cm86ICR7RElTVFJPfScgPj4gJHZlcnNpb25maWxlCisJZWNobyAnRGlzdHJvIFZlcnNpb246ICR7RElTVFJPX1ZFUlNJT059JyA+PiAkdmVyc2lvbmZpbGUKKwllY2hvICdNZXRhZGF0YSBSZXZpc2lvbjogJHtNRVRBREFUQV9SRVZJU0lPTn0nID4+ICR2ZXJzaW9uZmlsZQorCWVjaG8gJ1RpbWVzdGFtcDogJHtEQVRFVElNRX0nID4+ICR2ZXJzaW9uZmlsZQorfQordG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvblt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCisgICAgZGVwcyA9ICIiCisgICAgZm9yIGRlcCBpbiAoZC5nZXRWYXIoJ1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEUnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwCisgICAgICAgIGZvciB2YXJpYW50IGluIChkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGNsc2V4dGVuZCA9IG9lLmNsYXNzZXh0ZW5kLkNsYXNzRXh0ZW5kZXIodmFyaWFudCwgZCkKKyAgICAgICAgICAgIG5ld2RlcCA9IGNsc2V4dGVuZC5leHRlbmRfbmFtZShkZXApCisgICAgICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBuZXdkZXAKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdkZXBlbmRzJywgZGVwcykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3R5cGVjaGVjay5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkYTkzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3R5cGVjaGVjay5iYmNsYXNzCkBAIC0wLDAgKzEsMTIgQEAKKyMgQ2hlY2sgdHlwZXMgb2YgYml0YmFrZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIworIyBTZWUgb2UudHlwZXMgZm9yIGRldGFpbHMuCisKK3B5dGhvbiBjaGVja190eXBlcygpIHsKKyAgICBpbXBvcnQgb2UudHlwZXMKKyAgICBmb3Iga2V5IGluIGUuZGF0YS5rZXlzKCk6CisgICAgICAgIGlmIGUuZGF0YS5nZXRWYXJGbGFnKGtleSwgInR5cGUiKToKKyAgICAgICAgICAgIG9lLmRhdGEudHlwZWRfdmFsdWUoa2V5LCBlLmRhdGEpCit9CithZGRoYW5kbGVyIGNoZWNrX3R5cGVzCitjaGVja190eXBlc1tldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwNjFhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzCkBAIC0wLDAgKzEsNDkgQEAKKyMgSGFuZGxlIFUtQm9vdCBjb25maWcgZm9yIGEgbWFjaGluZQorIworIyBUaGUgZm9ybWF0IHRvIHNwZWNpZnkgaXQsIGluIHRoZSBtYWNoaW5lLCBpczoKKyMKKyMgVUJPT1RfQ09ORklHID8/PSA8ZGVmYXVsdD4KKyMgVUJPT1RfQ09ORklHW2Zvb10gPSAiY29uZmlnLGltYWdlcyIKKyMKKyMgb3IKKyMKKyMgVUJPT1RfTUFDSElORSA9ICJjb25maWciCisjCisjIENvcHlyaWdodCAyMDEzLCAyMDE0IChDKSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKworcHl0aG9uICgpIHsKKyAgICB1Ym9vdG1hY2hpbmUgPSBkLmdldFZhcigiVUJPT1RfTUFDSElORSIsIFRydWUpCisgICAgdWJvb3Rjb25maWdmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoJ1VCT09UX0NPTkZJRycpCisgICAgIyBUaGUgImRvYyIgdmFyZmxhZyBpcyBzcGVjaWFsLCB3ZSBkb24ndCB3YW50IHRvIHNlZSBpdCBoZXJlCisgICAgdWJvb3Rjb25maWdmbGFncy5wb3AoJ2RvYycsIE5vbmUpCisKKyAgICBpZiBub3QgdWJvb3RtYWNoaW5lIGFuZCBub3QgdWJvb3Rjb25maWdmbGFnczoKKyAgICAgICAgUE4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBGSUxFID0gb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigiRklMRSIsIFRydWUpKQorICAgICAgICBiYi5kZWJ1ZygxLCAiVG8gYnVpbGQgJXMsIHNlZSAlcyBmb3IgaW5zdHJ1Y3Rpb25zIG9uIFwKKyAgICAgICAgICAgICAgICAgc2V0dGluZyB1cCB5b3VyIG1hY2hpbmUgY29uZmlnIiAlIChQTiwgRklMRSkpCisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJFaXRoZXIgVUJPT1RfTUFDSElORSBvciBVQk9PVF9DT05GSUcgbXVzdCBiZSBzZXQgaW4gdGhlICVzIG1hY2hpbmUgY29uZmlndXJhdGlvbi4iICUgZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKSkKKworICAgIGlmIHVib290bWFjaGluZSBhbmQgdWJvb3Rjb25maWdmbGFnczoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIllvdSBjYW5ub3QgdXNlIFVCT09UX01BQ0hJTkUgYW5kIFVCT09UX0NPTkZJRyBhdCB0aGUgc2FtZSB0aW1lLiIpCisKKyAgICBpZiBub3QgdWJvb3Rjb25maWdmbGFnczoKKyAgICAgICAgcmV0dXJuCisKKyAgICB1Ym9vdGNvbmZpZyA9IChkLmdldFZhcignVUJPT1RfQ09ORklHJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4odWJvb3Rjb25maWcpID4gMDoKKyAgICAgICAgZm9yIGNvbmZpZyBpbiB1Ym9vdGNvbmZpZzoKKyAgICAgICAgICAgIGZvciBmLCB2IGluIHVib290Y29uZmlnZmxhZ3MuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBjb25maWcgPT0gZjogCisgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gdi5zcGxpdCgnLCcpCisgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1zWzBdIGFuZCBsZW4oaXRlbXMpID4gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCdPbmx5IGNvbmZpZyxpbWFnZXMgY2FuIGJlIHNwZWNpZmllZCEnKQorICAgICAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignVUJPT1RfTUFDSElORScsICcgJyArIGl0ZW1zWzBdKQorICAgICAgICAgICAgICAgICAgICAjIElNQUdFX0ZTVFlQRVMgYXBwZW5kaW5nCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihpdGVtcykgPiAxIGFuZCBpdGVtc1sxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJBcHBlbmRpbmcgJyVzJyB0byBJTUFHRV9GU1RZUEVTLiIgJSBpdGVtc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdJTUFHRV9GU1RZUEVTJywgJyAnICsgaXRlbXNbMV0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgZWxpZiBsZW4odWJvb3Rjb25maWcpID09IDA6CisgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoJ1lvdSBtdXN0IHNldCBhIGRlZmF1bHQgaW4gVUJPT1RfQ09ORklHLicpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91bmluYXRpdmUuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMzkxZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91bmluYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDQ0IEBACitOQVRJVkVMU0JTVFJJTkcgPSAidW5pdmVyc2FsIgorCitVTklOQVRJVkVfTE9BREVSID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfS9saWIvbGQtbGludXgteDg2LTY0LnNvLjIiCisKK2FkZGhhbmRsZXIgdW5pbmF0aXZlX2V2ZW50aGFuZGxlcgordW5pbmF0aXZlX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKKworcHl0aG9uIHVuaW5hdGl2ZV9ldmVudGhhbmRsZXIoKSB7CisgICAgbG9hZGVyID0gZS5kYXRhLmdldFZhcigiVU5JTkFUSVZFX0xPQURFUiIsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvYWRlcik6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGNtZCA9IGUuZGF0YS5leHBhbmQoIm1rZGlyIC1wICR7U1RBR0lOR19ESVJ9OyBjZCAke1NUQUdJTkdfRElSfTsgdGFyIC14amYgJHtDT1JFQkFTRX0vJHtCVUlMRF9BUkNIfS1uYXRpdmVzZGstbGliYy50YXIuYnoyOyAke1NUQUdJTkdfRElSfS9yZWxvY2F0ZV9zZGsucHkgJHtTVEFHSU5HX0RJUl9OQVRJVkV9ICR7VU5JTkFUSVZFX0xPQURFUn0gJHtVTklOQVRJVkVfTE9BREVSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcGF0Y2hlbGYtdW5pbmF0aXZlIikKKyAgICAgICAgI2JiLndhcm4oIm5hdGl2ZXNkayBsaWIgZXh0cmFjdGlvbjogIiArIGNtZCkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKK30KKworU1NUQVRFUE9TVFVOUEFDS0ZVTkNTX2FwcGVuZCA9ICIgdW5pbmF0aXZlX2NoYW5nZWludGVycCIKKworcHl0aG9uIHVuaW5hdGl2ZV9jaGFuZ2VpbnRlcnAgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IHN0YXQKKyAgICBpbXBvcnQgb2UucWEKKworICAgIGlmIG5vdCAoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBzc3RhdGVpbnN0ID0gZC5nZXRWYXIoJ1NTVEFURV9JTlNURElSJywgVHJ1ZSkKKyAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3N0YXRlaW5zdCk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZmlsZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGYpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzID0gb3Muc3RhdChmKQorICAgICAgICAgICAgaWYgbm90ICgoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYVVNSKSBvciAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYR1JQKSBvciAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lYT1RIKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsZiA9IG9lLnFhLkVMRkZpbGUoZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGYub3BlbigpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgI2JiLndhcm4oInBhdGNoZWxmLXVuaW5hdGl2ZSAtLXNldC1pbnRlcnByZXRlciAlcyAlcyIgJSAoZC5nZXRWYXIoIlVOSU5BVElWRV9MT0FERVIiLCBUcnVlKSwgZikpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoInBhdGNoZWxmLXVuaW5hdGl2ZSAtLXNldC1pbnRlcnByZXRlciAlcyAlcyIgJSAoZC5nZXRWYXIoIlVOSU5BVElWRV9MT0FERVIiLCBUcnVlKSwgZiksIHNoZWxsPVRydWUpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMTY1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcwpAQCAtMCwwICsxLDI2NyBAQAorIyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaGVscCB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB3aGljaCBpcyB1c2VmdWwgd2hlbgorIyBtdWx0aXBsZSBzb3VyY2VzIHByb3ZpZGUgc2FtZSBjb21tYW5kLiBZb3UgY2FuIHVzZSB1cGRhdGUtYWx0ZXJuYXRpdmVzCisjIGNvbW1hbmQgZGlyZWN0bHkgaW4geW91ciByZWNpcGUsIGJ1dCBpbiBtb3N0IGNhc2VzIHRoaXMgY2xhc3Mgc2ltcGxpZmllcworIyB0aGF0IGpvYi4KKyMKKyMgVG8gdXNlIHRoaXMgY2xhc3MgYSBudW1iZXIgb2YgdmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkOgorIworIyBMaXN0IGFsbCBvZiB0aGUgYWx0ZXJuYXRpdmVzIG5lZWRlZCBieSBhIHBhY2thZ2U6CisjIEFMVEVSTkFUSVZFXzxwa2c+ID0gIm5hbWUxIG5hbWUyIG5hbWUzIC4uLiIKKyMKKyMgICBpLmUuIEFMVEVSTkFUSVZFX2J1c3lib3ggPSAic2ggc2VkIHRlc3QgYnJhY2tldCIKKyMKKyMgVGhlIHBhdGhuYW1lIG9mIHRoZSBsaW5rCisjIEFMVEVSTkFUSVZFX0xJTktfTkFNRVtuYW1lXSA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IG9uY2UgaXQncyBiZWVuIGluc3RhbGxlZCBvbnRvIHRoZSBydW50aW1lLgorIyAgIFRoaXMgbmFtZSBpcyBnbG9iYWwgdG8gYWxsIHNwbGl0IHBhY2thZ2VzIGluIHRoaXMgcmVjaXBlLCBhbmQgc2hvdWxkIG1hdGNoCisjICAgb3RoZXIgcmVjaXBlcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuCisjICAgaS5lLiBBTFRFUk5BVElWRV9MSU5LX05BTUVbYnJhY2tldF0gPSAiL3Vzci9iaW4vWyIKKyMKKyMgTk9URTogSWYgQUxURVJOQVRJVkVfTElOS19OQU1FIGlzIG5vdCBkZWZpbmVkLCBpdCBkZWZhdWx0cyB0byAke2JpbmRpcn0vbmFtZQorIworIyBUaGUgZGVmYXVsdCBsaW5rIHRvIGNyZWF0ZSBmb3IgYWxsIHRhcmdldHMKKyMgQUxURVJOQVRJVkVfVEFSR0VUID0gInRhcmdldCIKKyMKKyMgICBUaGlzIGlzIHVzZWZ1bCBpbiBhIG11bHRpY2FsbCBiaW5hcnkgY2FzZQorIyAgIGkuZS4gQUxURVJOQVRJVkVfVEFSR0VUID0gIi9iaW4vYnVzeWJveCIKKyMKKyMgQSBub24tZGVmYXVsdCBsaW5rIHRvIGNyZWF0ZSBmb3IgYSB0YXJnZXQKKyMgQUxURVJOQVRJVkVfVEFSR0VUW25hbWVdID0gInRhcmdldCIKKyMKKyMgICBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgYXMgaXQncyBiZWVuIGluc3RhbGwgYnkgZG9faW5zdGFsbAorIyAgIGkuZS4gQUxURVJOQVRJVkVfVEFSR0VUW3NoXSA9ICIvYmluL2Jhc2giCisjCisjIEEgcGFja2FnZSBzcGVjaWZpYyBsaW5rIGZvciBhIHRhcmdldAorIyBBTFRFUk5BVElWRV9UQVJHRVRfPHBrZz5bbmFtZV0gPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSByZWNpcGUgcHJvdmlkZXMgbXVsdGlwbGUgYWx0ZXJuYXRpdmVzIGZvciB0aGUKKyMgICBzYW1lIGl0ZW0uCisjCisjIE5PVEU6IElmIEFMVEVSTkFUSVZFX1RBUkdFVCBpcyBub3QgZGVmaW5lZCwgaXQgd2lsbCBpbmhlcml0IHRoZSB2YWx1ZQorIyBmcm9tIEFMVEVSTkFUSVZFX0xJTktfTkFNRS4KKyMKKyMgTk9URTogSWYgdGhlIEFMVEVSTkFUSVZFX0xJTktfTkFNRSBhbmQgQUxURVJOQVRJVkVfVEFSR0VUIGFyZSB0aGUgc2FtZSwKKyMgQUxURVJOQVRJVkVfVEFSR0VUIHdpbGwgaGF2ZSAnLntCUE59JyBhcHBlbmRlZCB0byBpdC4gIElmIHRoZSBmaWxlCisjIHJlZmVyZW5jZWQgaGFzIG5vdCBiZWVuIHJlbmFtZWQsIGl0IHdpbGwgYWxzbyBiZSByZW5hbWVkLiAgKFRoaXMgYXZvaWRzCisjIHRoZSBuZWVkIHRvIHJlbmFtZSBhbHRlcm5hdGl2ZSBmaWxlcyBpbiB0aGUgZG9faW5zdGFsbCBzdGVwLCBidXQgc3RpbGwKKyMgc3VwcG9ydHMgaXQgaWYgbmVjZXNzYXJ5IGZvciBzb21lIHJlYXNvbi4pCisjCisjIFRoZSBkZWZhdWx0IHByaW9yaXR5IGZvciBhbnkgYWx0ZXJuYXRpdmVzCisjIEFMVEVSTkFUSVZFX1BSSU9SSVRZID0gInByaW9yaXR5IgorIworIyAgIGkuZS4gZGVmYXVsdCBpcyBBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMCIKKyMKKyMgVGhlIG5vbi1kZWZhdWx0IHByaW9yaXR5IGZvciBhIHNwZWNpZmljIHRhcmdldAorIyBBTFRFUk5BVElWRV9QUklPUklUWVtuYW1lXSA9ICJwcmlvcml0eSIKKyMKKyMgVGhlIHBhY2thZ2UgcHJpb3JpdHkgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1BSSU9SSVRZXzxwa2c+W25hbWVdID0gInByaW9yaXR5IgorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMCIKKworIyBXZSBuZWVkIHNwZWNpYWwgcHJvY2Vzc2luZyBmb3IgdmFyZGVwcyBiZWNhdXNlIGl0IGNhbiBub3Qgd29yayBvbgorIyBtb2RpZmllZCBmbGFnIHZhbHVlcy4gIFNvIHdlIGFncmVnYXRlIHRoZSBmbGFncyBpbnRvIGEgbmV3IHZhcmlhYmxlCisjIGFuZCBpbmNsdWRlIHRoYXQgdmFpcmFibGUgaW4gdGhlIHNldC4KK1VQREFMVFZBUlMgID0gIkFMVEVSTkFUSVZFIEFMVEVSTkFUSVZFX0xJTktfTkFNRSBBTFRFUk5BVElWRV9UQVJHRVQgQUxURVJOQVRJVkVfUFJJT1JJVFkiCisKK2RlZiBnZW5fdXBkYXRlYWx0ZXJuYXRpdmVzdmFyZGVwcyhkKToKKyAgICBwa2dzID0gKGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgdmFycyA9IChkLmdldFZhcigiVVBEQUxUVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICAjIEZpcnN0IGNvbXB1dGUgdGhlbSBmb3Igbm9uX3BrZyB2ZXJzaW9ucworICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgIGZvciBmbGFnIGluIChkLmdldFZhckZsYWdzKHYpIG9yIHt9KToKKyAgICAgICAgICAgIGlmIGZsYWcgPT0gImRvYyIgb3IgZmxhZyA9PSAidmFyZGVwcyIgb3IgZmxhZyA9PSAidmFyZGVwc2V4cCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCclc19WQVJERVBTJyAlICh2KSwgJyAlczolcycgJSAoZmxhZywgZC5nZXRWYXJGbGFnKHYsIGZsYWcsIEZhbHNlKSkpCisKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICAgICAgZm9yIGZsYWcgaW4gKGQuZ2V0VmFyRmxhZ3MoIiVzXyVzIiAlICh2LHApKSBvciB7fSk6CisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIiBvciBmbGFnID09ICJ2YXJkZXBzIiBvciBmbGFnID09ICJ2YXJkZXBzZXhwIjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignJXNfVkFSREVQU18lcycgJSAodixwKSwgJyAlczolcycgJSAoZmxhZywgZC5nZXRWYXJGbGFnKCclc18lcycgJSAodixwKSwgZmxhZywgRmFsc2UpKSkKKworZGVmIHVhX2V4dGVuZF9kZXBlbmRzKGQpOgorICAgIGlmIG5vdCAndmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzJyBpbiBkLmdldFZhcignUFJPVklERVMnLCBUcnVlKToKKyAgICAgICAgZC5hcHBlbmRWYXIoJ0RFUEVORFMnLCAnIHZpcnR1YWwvJHtNTFBSRUZJWH11cGRhdGUtYWx0ZXJuYXRpdmVzJykKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgICMgVXBkYXRlIEFsdGVybmF0aXZlcyBvbmx5IHdvcmtzIG9uIHRhcmdldCBwYWNrYWdlcy4uLgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIFwKKyAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgXAorICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgIyBjb21wdXRlIHNwZWNpYWwgdmFyZGVwcworICAgIGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJkZXBzKGQpCisKKyAgICAjIGV4dGVuZCB0aGUgZGVwZW5kcyB0byBpbmNsdWRlIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcworICAgIHVhX2V4dGVuZF9kZXBlbmRzKGQpCit9CisKK2RlZiBnZW5fdXBkYXRlYWx0ZXJuYXRpdmVzdmFycyhkKToKKyAgICByZXQgPSBbXQorICAgIHBrZ3MgPSAoZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJzID0gKGQuZ2V0VmFyKCJVUERBTFRWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgIHJldC5hcHBlbmQodiArICJfVkFSREVQUyIpCisKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl8iICsgcCkKKyAgICAgICAgICAgIHJldC5hcHBlbmQodiArICJfVkFSREVQU18iICsgcCkKKyAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQorCisjIE5vdyB0aGUgbmV3IHN0dWZmLCB3ZSB1c2UgYSBjdXN0b20gZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHJpZ2h0IHZhbHVlcworcG9wdWxhdGVfcGFja2FnZXNbdmFyZGVwc10gKz0gIiR7VVBEQUxUVkFSU30gJHtAZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcnMoZCl9IgorCisjIFdlIG5lZWQgdG8gZG8gdGhlIHJlbmFtZSBhZnRlciB0aGUgaW1hZ2UgY3JlYXRpb24gc3RlcCwgYnV0IGJlZm9yZQorIyB0aGUgc3BsaXQgYW5kIHN0cmlwIHN0ZXBzLi4gIHBhY2thZ2Vjb3B5IHNlZW1zIHRvIGJlIHRoZSBlYXJsaWVzdCByZWFzb25hYmxlCisjIHBsYWNlLgorcHl0aG9uIHBlcmZvcm1fcGFja2FnZWNvcHlfYXBwZW5kICgpIHsKKyAgICAjIENoZWNrIGZvciBkZXByZWNhdGVkIHVzYWdlLi4uCisgICAgcG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKyAgICBpZiBkLmdldFZhcignQUxURVJOQVRJVkVfTElOS1MnLCBUcnVlKSAhPSBOb25lOgorICAgICAgICBiYi5mYXRhbCgnJXM6IFVzZSBvZiBBTFRFUk5BVElWRV9MSU5LUy9BTFRFUk5BVElWRV9QQVRIL0FMVEVSTkFUSVZFX05BTUUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgcGxlYXNlIGNvbnZlcnQgdG8gdGhlIHVwZGF0ZWQgc3ludGF4LCBzZWUgdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzIGZvciBtb3JlIGluZm8uJyAlIHBuKQorCisgICAgIyBEbyBhY3R1YWwgdXBkYXRlIGFsdGVybmF0aXZlcyBwcm9jZXNzaW5nCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIyBJZiB0aGUgc3JjID09IGRlc3QsIHdlIGtub3cgd2UgbmVlZCB0byByZW5hbWUgdGhlIGRlc3QgYnkgYXBwZW5kaW5nICR7QlBOfQorICAgICAgICBsaW5rX3JlbmFtZSA9IHt9CisgICAgICAgIGZvciBhbHRfbmFtZSBpbiAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBhbHRfbGluayAgICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IGFsdF9saW5rOgorICAgICAgICAgICAgICAgIGFsdF9saW5rID0gIiVzLyVzIiAlIChkLmdldFZhcignYmluZGlyJywgVHJ1ZSksIGFsdF9uYW1lKQorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIGFsdF9saW5rKQorCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gYWx0X3RhcmdldCBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIGFsdF9saW5rCisgICAgICAgICAgICAjIFNvbWV0aW1lcyBhbHRfdGFyZ2V0IGlzIHNwZWNpZmllZCBhcyByZWxhdGl2ZSB0byB0aGUgbGluayBuYW1lLgorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShhbHRfbGluayksIGFsdF90YXJnZXQpCisKKyAgICAgICAgICAgICMgSWYgdGhlIGxpbmsgYW5kIHRhcmdldCBhcmUgdGhlIHNhbWUgbmFtZSwgd2UgbmVlZCB0byByZW5hbWUgdGhlIHRhcmdldC4KKyAgICAgICAgICAgIGlmIGFsdF9saW5rID09IGFsdF90YXJnZXQ6CisgICAgICAgICAgICAgICAgc3JjID0gJyVzLyVzJyAlIChwa2dkZXN0LCBhbHRfdGFyZ2V0KQorICAgICAgICAgICAgICAgIGFsdF90YXJnZXRfcmVuYW1lID0gJyVzLiVzJyAlIChhbHRfdGFyZ2V0LCBwbikKKyAgICAgICAgICAgICAgICBkZXN0ID0gJyVzLyVzJyAlIChwa2dkZXN0LCBhbHRfdGFyZ2V0X3JlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMoZGVzdCk6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJyVzOiBBbHJlYWR5IHJlbmFtZWQ6ICVzJyAlIChwbiwgYWx0X3RhcmdldF9yZW5hbWUpKQorICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5sZXhpc3RzKHNyYyk6CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHNyYyk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIERlbGF5IHJlbmFtZSBvZiBsaW5rcworICAgICAgICAgICAgICAgICAgICAgICAgbGlua19yZW5hbWVbYWx0X3RhcmdldF0gPSBhbHRfdGFyZ2V0X3JlbmFtZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IFJlbmFtZSAlcyAtPiAlcycgJSAocG4sIGFsdF90YXJnZXQsIGFsdF90YXJnZXRfcmVuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3QpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IGFsdGVybmF0aXZlIHRhcmdldCAoJXMgb3IgJXMpIGRvZXMgbm90IGV4aXN0LCBza2lwcGluZy4uLiIgJSAocG4sIGFsdF90YXJnZXQsIGFsdF90YXJnZXRfcmVuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIGFsdF9uYW1lLCBhbHRfdGFyZ2V0X3JlbmFtZSkKKworICAgICAgICAjIFByb2Nlc3MgZGVsYXllZCBsaW5rIG5hbWVzCisgICAgICAgICMgRG8gdGhlc2UgYWZ0ZXIgb3RoZXIgcmVuYW1lcyBzbyB3ZSBjYW4gY29ycmVjdCBicm9rZW4gbGlua3MKKyAgICAgICAgZm9yIGFsdF90YXJnZXQgaW4gbGlua19yZW5hbWU6CisgICAgICAgICAgICBzcmMgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXQpCisgICAgICAgICAgICBkZXN0ID0gJyVzLyVzJyAlIChwa2dkZXN0LCBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSkKKyAgICAgICAgICAgIGxpbmsgPSBvcy5yZWFkbGluayhzcmMpCisgICAgICAgICAgICBsaW5rX3RhcmdldCA9IG9lLnBhdGgucmVhbHBhdGgoc3JjLCBwa2dkZXN0LCBUcnVlKQorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMobGlua190YXJnZXQpOgorICAgICAgICAgICAgICAgICMgT2ssIHRoZSBsaW5rX3RhcmdldCBleGlzdHMsIHdlIGNhbiByZW5hbWUKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogUmVuYW1lIChsaW5rKSAlcyAtPiAlcycgJSAocG4sIGFsdF90YXJnZXQsIGxpbmtfcmVuYW1lW2FsdF90YXJnZXRdKSkKKyAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc3JjLCBkZXN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRyeSB0byByZXNvbHZlIHRoZSBicm9rZW4gbGluayB0byBsaW5rLiR7QlBOfQorICAgICAgICAgICAgICAgIGxpbmtfbWF5YmUgPSAnJXMuJXMnICUgKG9zLnJlYWRsaW5rKHNyYyksIHBuKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHNyYyksIGxpbmtfbWF5YmUpKToKKyAgICAgICAgICAgICAgICAgICAgIyBPaywgdGhlIHJlbmFtZWQgbGluayB0YXJnZXQgZXhpc3RzLi4gY3JlYXRlIGEgbmV3IGxpbmssIGFuZCByZW1vdmUgdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJyVzOiBDcmVhdGluZyBuZXcgbGluayAlcyAtPiAlcycgJSAocG4sIGxpbmtfcmVuYW1lW2FsdF90YXJnZXRdLCBsaW5rX21heWJlKSkKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhsaW5rX21heWJlLCBkZXN0KQorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzOiBVbmFibGUgdG8gcmVzb2x2ZSBkYW5nbGluZyBzeW1saW5rOiAlcycgJSAocG4sIGFsdF90YXJnZXQpKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZWFsdGVybmF0aXZlcyAiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVhbHRlcm5hdGl2ZXMgKCkgeworICAgIHBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisKKyAgICAjIERvIGFjdHVhbCB1cGRhdGUgYWx0ZXJuYXRpdmVzIHByb2Nlc3NpbmcKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAjIENyZWF0ZSBwb3N0IGluc3RhbGwvcmVtb3ZhbCBzY3JpcHRzCisgICAgICAgIGFsdF9zZXR1cF9saW5rcyA9ICIiCisgICAgICAgIGFsdF9yZW1vdmVfbGlua3MgPSAiIgorICAgICAgICBmb3IgYWx0X25hbWUgaW4gKGQuZ2V0VmFyKCdBTFRFUk5BVElWRV8lcycgJSBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWx0X2xpbmsgICAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBhbHRfdGFyZ2V0IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgYWx0X2xpbmsKKyAgICAgICAgICAgICMgU29tZXRpbWVzIGFsdF90YXJnZXQgaXMgc3BlY2lmaWVkIGFzIHJlbGF0aXZlIHRvIHRoZSBsaW5rIG5hbWUuCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGFsdF9saW5rKSwgYWx0X3RhcmdldCkKKworICAgICAgICAgICAgYWx0X3ByaW9yaXR5ID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9QUklPUklUWV8lcycgJSBwa2csICBhbHRfbmFtZSwgVHJ1ZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9QUklPUklUWScsICBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF9wcmlvcml0eSA9IGFsdF9wcmlvcml0eSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfUFJJT1JJVFlfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfUFJJT1JJVFknLCBUcnVlKQorCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IHRyaWdnZXIsIGFzIGl0IHNob3VsZCBoYXZlIGJlZW4gcmVzb2x2ZWQgZWFybGllciEKKyAgICAgICAgICAgIGlmIGFsdF9saW5rID09IGFsdF90YXJnZXQ6CisgICAgICAgICAgICAgICAgYmIubm90ZSgnYWx0X2xpbmsgPT0gYWx0X3RhcmdldDogJXMgPT0gJXMgLS0gY29ycmVjdGluZywgdGhpcyBzaG91bGQgbm90IGhhcHBlbiEnICUgKGFsdF9saW5rLCBhbHRfdGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBhbHRfdGFyZ2V0ID0gJyVzLiVzJyAlIChhbHRfdGFyZ2V0LCBwbikKKworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cygnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXQpKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCclczogTk9UIGFkZGluZyBhbHRlcm5hdGl2ZSBwcm92aWRlICVzOiAlcyBkb2VzIG5vdCBleGlzdCcgJSAocG4sIGFsdF9saW5rLCBhbHRfdGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIERlZmF1bHQgdG8gZ2VuZXJhdGUgc2hlbGwgc2NyaXB0Li4gZXZlbnR1YWxseSB3ZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcy4uLgorICAgICAgICAgICAgYWx0X3RhcmdldCA9IG9zLnBhdGgubm9ybXBhdGgoYWx0X3RhcmdldCkKKworICAgICAgICAgICAgYWx0X3NldHVwX2xpbmtzICArPSAnXHR1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAlcyAlcyAlcyAlc1xuJyAlIChhbHRfbGluaywgYWx0X25hbWUsIGFsdF90YXJnZXQsIGFsdF9wcmlvcml0eSkKKyAgICAgICAgICAgIGFsdF9yZW1vdmVfbGlua3MgKz0gJ1x0dXBkYXRlLWFsdGVybmF0aXZlcyAtLXJlbW92ZSAgJXMgJXNcbicgJSAoYWx0X25hbWUsIGFsdF90YXJnZXQpCisKKyAgICAgICAgaWYgYWx0X3NldHVwX2xpbmtzOgorICAgICAgICAgICAgIyBSREVQRU5EUyBzZXR1cAorICAgICAgICAgICAgcHJvdmlkZXIgPSBkLmdldFZhcignVklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXMnLCBUcnVlKQorICAgICAgICAgICAgaWYgcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgI2JiLm5vdGUoJ2FkZGluZyBydW50aW1lIHJlcXVpcmVtZW50IGZvciB1cGRhdGUtYWx0ZXJuYXRpdmVzIGZvciAlcycgJSBwa2cpCisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgcHJvdmlkZXIpCisKKyAgICAgICAgICAgIGJiLm5vdGUoJ2FkZGluZyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGNhbGxzIHRvIHBvc3RpbnN0L3ByZXJtIGZvciAlcycgJSBwa2cpCisgICAgICAgICAgICBiYi5ub3RlKCclcycgJSBhbHRfc2V0dXBfbGlua3MpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKSBvciAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBhbHRfc2V0dXBfbGlua3MKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICAgICAgYmIubm90ZSgnJXMnICUgYWx0X3JlbW92ZV9saW5rcykKKyAgICAgICAgICAgIHByZXJtID0gZC5nZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIFRydWUpIG9yICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHByZXJtICs9IGFsdF9yZW1vdmVfbGlua3MKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKK30KKworcHl0aG9uIHBhY2thZ2VfZG9fZmlsZWRlcHNfYXBwZW5kICgpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGZvciBhbHRfbmFtZSBpbiAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBhbHRfbGluayAgICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgVHJ1ZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGFsdF90YXJnZXQgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBUcnVlKSBvciBhbHRfbGluaworCisgICAgICAgICAgICBpZiBhbHRfbGluayA9PSBhbHRfdGFyZ2V0OgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ2FsdF9saW5rID09IGFsdF90YXJnZXQ6ICVzID09ICVzJyAlIChhbHRfbGluaywgYWx0X3RhcmdldCkpCisgICAgICAgICAgICAgICAgYWx0X3RhcmdldCA9ICclcy4lcycgJSAoYWx0X3RhcmdldCwgcG4pCisKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMoJyVzLyVzLyVzJyAlIChwa2dkZXN0LCBwa2csIGFsdF90YXJnZXQpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIEFkZCBmaWxlIHByb3ZpZGUKKyAgICAgICAgICAgIHRyYW5zX3RhcmdldCA9IG9lLnBhY2thZ2UuZmlsZV90cmFuc2xhdGUoYWx0X3RhcmdldCkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdGSUxFUlBST1ZJREVTXyVzXyVzJyAlICh0cmFuc190YXJnZXQsIHBrZyksICIgIiArIGFsdF9saW5rKQorICAgICAgICAgICAgaWYgbm90IHRyYW5zX3RhcmdldCBpbiAoZC5nZXRWYXIoJ0ZJTEVSUFJPVklERVNGTElTVF8lcycgJSBwa2csIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignRklMRVJQUk9WSURFU0ZMSVNUXyVzJyAlIHBrZywgIiAiICsgdHJhbnNfdGFyZ2V0KQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXBkYXRlLXJjLmQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTBhNzRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXBkYXRlLXJjLmQuYmJjbGFzcwpAQCAtMCwwICsxLDEzMyBAQAorVVBEQVRFUkNQTiA/PSAiJHtQTn0iCisKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgdXBkYXRlLXJjLmQtbmF0aXZlIHVwZGF0ZS1yYy5kIGluaXRzY3JpcHRzIgorVVBEQVRFUkNEID0gInVwZGF0ZS1yYy5kIgorVVBEQVRFUkNEX2NsYXNzLWNyb3NzID0gIiIKK1VQREFURVJDRF9jbGFzcy1uYXRpdmUgPSAiIgorVVBEQVRFUkNEX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0lOSVRTQ1JJUFRfUEFSQU1TID89ICJkZWZhdWx0cyIKKworSU5JVF9EX0RJUiA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZCIKKwordXBkYXRlcmNkX3ByZWluc3QoKSB7CitpZiBbIC16ICIkRCIgLWEgLWYgIiR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IiBdOyB0aGVuCisJJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0gc3RvcAorZmkKK2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVD0iLWYgLXIgJEQiCisJZWxzZQorCQlPUFQ9Ii1mIgorCWZpCisJdXBkYXRlLXJjLmQgJE9QVCAke0lOSVRTQ1JJUFRfTkFNRX0gcmVtb3ZlCitmaQorfQorCit1cGRhdGVyY2RfcG9zdGluc3QoKSB7CitpZiB0eXBlIHVwZGF0ZS1yYy5kID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFQ9Ii1yICREIgorCWVsc2UKKwkJT1BUPSItcyIKKwlmaQorCXVwZGF0ZS1yYy5kICRPUFQgJHtJTklUU0NSSVBUX05BTUV9ICR7SU5JVFNDUklQVF9QQVJBTVN9CitmaQorfQorCit1cGRhdGVyY2RfcHJlcm0oKSB7CitpZiBbIC16ICIkRCIgXTsgdGhlbgorCSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IHN0b3AKK2ZpCit9CisKK3VwZGF0ZXJjZF9wb3N0cm0oKSB7CitpZiB0eXBlIHVwZGF0ZS1yYy5kID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFQ9Ii1mIC1yICREIgorCWVsc2UKKwkJT1BUPSItZiIKKwlmaQorCXVwZGF0ZS1yYy5kICRPUFQgJHtJTklUU0NSSVBUX05BTUV9IHJlbW92ZQorZmkKK30KKworCitkZWYgdXBkYXRlX3JjX2FmdGVyX3BhcnNlKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJTklUU0NSSVBUX1BBQ0tBR0VTJywgRmFsc2UpID09IE5vbmU6CisgICAgICAgIGlmIGQuZ2V0VmFyKCdJTklUU0NSSVBUX05BTUUnLCBGYWxzZSkgPT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIGluaGVyaXRzIHVwZGF0ZS1yYy5kIGJ1dCBkb2Vzbid0IHNldCBJTklUU0NSSVBUX05BTUUiICUgZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpCisgICAgICAgIGlmIGQuZ2V0VmFyKCdJTklUU0NSSVBUX1BBUkFNUycsIEZhbHNlKSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXBkYXRlLXJjLmQgYnV0IGRvZXNuJ3Qgc2V0IElOSVRTQ1JJUFRfUEFSQU1TIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgdXBkYXRlX3JjX2FmdGVyX3BhcnNlKGQpCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAicG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkICIKK1BBQ0tBR0VTUExJVEZVTkNTX3JlbW92ZV9jbGFzcy1uYXRpdmVzZGsgPSAicG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkICIKKworcG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkW3ZhcmRlcHNdICs9ICJ1cGRhdGVyY2RfcHJlcm0gdXBkYXRlcmNkX3Bvc3RybSB1cGRhdGVyY2RfcHJlaW5zdCB1cGRhdGVyY2RfcG9zdGluc3QiCitwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2RbdmFyZGVwc2V4Y2x1ZGVdICs9ICJPVkVSUklERVMiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2QgKCkgeworICAgIGRlZiB1cGRhdGVfcmNkX2F1dG9fZGVwZW5kKHBrZyk6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGltcG9ydCBvcworICAgICAgICBwYXRoID0gZC5leHBhbmQoIiR7RH0ke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtcSAtdyAnL2V0Yy9pbml0LmQvZnVuY3Rpb25zJyAlcyIgJSBwYXRoCisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICIiCisgICAgICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgJyAlc2luaXRzY3JpcHRzLWZ1bmN0aW9ucycgJSAobWxwcmVmaXgpKQorCisgICAgZGVmIHVwZGF0ZV9yY2RfcGFja2FnZShwa2cpOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIHVwZGF0ZS1yYy5kIGNhbGxzIHRvIHByZWluc3QvcG9zdGluc3QvcHJlcm0vcG9zdHJtIGZvciAlcycgJSBwa2cpCisKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIFRydWUpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsICIlczolcyIgJSAocGtnLCBvdmVycmlkZXMpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICB1cGRhdGVfcmNkX2F1dG9fZGVwZW5kKHBrZykKKworICAgICAgICBwcmVpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wcmVpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZWluc3Q6CisgICAgICAgICAgICBwcmVpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwcmVpbnN0ICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wcmVpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyVzJyAlIHBrZywgcHJlaW5zdCkKKworICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHByZXJtID0gZC5nZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwcmVybToKKyAgICAgICAgICAgIHByZXJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwcmVybSArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcHJlcm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wb3N0cm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKKworICAgICAgICBkLmFwcGVuZFZhcignUlJFQ09NTUVORFNfJyArIHBrZywgIiAke01MUFJFRklYfSR7VVBEQVRFUkNEfSIpCisKKyAgICAjIENoZWNrIHRoYXQgdGhpcyBjbGFzcyBpc24ndCBiZWluZyBpbmhpYml0ZWQgKGdlbmVyYWxseSwgYnkKKyAgICAjIHN5c3RlbWQuYmJjbGFzcykgYmVmb3JlIGRvaW5nIGFueSB3b3JrLgorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCkgb3IgXAorICAgICAgIG5vdCBkLmdldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsIFRydWUpOgorICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFDS0FHRVMnLCBUcnVlKQorICAgICAgICBpZiBwa2dzID09IE5vbmU6CisgICAgICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1VQREFURVJDUE4nLCBUcnVlKQorICAgICAgICAgICAgcGFja2FnZXMgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5vdCBwa2dzIGluIHBhY2thZ2VzIGFuZCBwYWNrYWdlcyAhPSBbXToKKyAgICAgICAgICAgICAgICBwa2dzID0gcGFja2FnZXNbMF0KKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzLnNwbGl0KCk6CisgICAgICAgICAgICB1cGRhdGVfcmNkX3BhY2thZ2UocGtnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxYTcwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3MKQEAgLTAsMCArMSwyNzYgQEAKKyMgSW4gb3JkZXIgdG8gc3VwcG9ydCBhIGRldGVybWluaXN0aWMgc2V0IG9mICdkeW5hbWljJyB1c2Vycy9ncm91cHMsCisjIHdlIG5lZWQgYSBmdW5jdGlvbiB0byByZWZvcm1hdCB0aGUgcGFyYW1zIGJhc2VkIG9uIGEgc3RhdGljIGZpbGUKK2RlZiB1cGRhdGVfdXNlcmFkZF9zdGF0aWNfY29uZmlnKGQpOgorICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGltcG9ydCByZQorCisgICAgY2xhc3MgbXlBcmd1bWVudFBhcnNlciggYXJncGFyc2UuQXJndW1lbnRQYXJzZXIgKToKKyAgICAgICAgZGVmIF9wcmludF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGZpbGU9Tm9uZSk6CisgICAgICAgICAgICBiYi53YXJuKCIlcyAtICVzOiAlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgbWVzc2FnZSkpCisKKyAgICAgICAgIyBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQuLi4KKyAgICAgICAgZGVmIGV4aXQoc2VsZiwgc3RhdHVzPTAsIG1lc3NhZ2U9Tm9uZSk6CisgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSBvciAoIiVzIC0gJXM6IHVzZXJhZGQuYmJjbGFzczogQXJndW1lbnQgcGFyc2luZyBleGl0ZWQiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2cpKQorICAgICAgICAgICAgZXJyb3IobWVzc2FnZSkKKworICAgICAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKG1lc3NhZ2UpCisKKyAgICAjIFdlIHBhcnNlIGFuZCByZXdyaXRlIHRoZSB1c2VyYWRkIGNvbXBvbmVudHMKKyAgICBkZWYgcmV3cml0ZV91c2VyYWRkKHBhcmFtcyk6CisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb21lcyBmcm9tIC0taGVscCBvbiB1c2VyYWRkIGZyb20gc2hhZG93CisgICAgICAgIHBhcnNlciA9IG15QXJndW1lbnRQYXJzZXIocHJvZz0ndXNlcmFkZCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1iIiwgIi0tYmFzZS1kaXIiLCBtZXRhdmFyPSJCQVNFX0RJUiIsIGhlbHA9ImJhc2UgZGlyZWN0b3J5IGZvciB0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWMiLCAiLS1jb21tZW50IiwgbWV0YXZhcj0iQ09NTUVOVCIsIGhlbHA9IkdFQ09TIGZpZWxkIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1kIiwgIi0taG9tZS1kaXIiLCBtZXRhdmFyPSJIT01FX0RJUiIsIGhlbHA9ImhvbWUgZGlyZWN0b3J5IG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1EIiwgIi0tZGVmYXVsdHMiLCBoZWxwPSJwcmludCBvciBjaGFuZ2UgZGVmYXVsdCB1c2VyYWRkIGNvbmZpZ3VyYXRpb24iLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZSIsICItLWV4cGlyZWRhdGUiLCBtZXRhdmFyPSJFWFBJUkVfREFURSIsIGhlbHA9ImV4cGlyYXRpb24gZGF0ZSBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZiIsICItLWluYWN0aXZlIiwgbWV0YXZhcj0iSU5BQ1RJVkUiLCBoZWxwPSJwYXNzd29yZCBpbmFjdGl2aXR5IHBlcmlvZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZyIsICItLWdpZCIsIG1ldGF2YXI9IkdST1VQIiwgaGVscD0ibmFtZSBvciBJRCBvZiB0aGUgcHJpbWFyeSBncm91cCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItRyIsICItLWdyb3VwcyIsIG1ldGF2YXI9IkdST1VQUyIsIGhlbHA9Imxpc3Qgb2Ygc3VwcGxlbWVudGFyeSBncm91cHMgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWsiLCAiLS1za2VsIiwgbWV0YXZhcj0iU0tFTF9ESVIiLCBoZWxwPSJ1c2UgdGhpcyBhbHRlcm5hdGl2ZSBza2VsZXRvbiBkaXJlY3RvcnkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItSyIsICItLWtleSIsIG1ldGF2YXI9IktFWT1WQUxVRSIsIGhlbHA9Im92ZXJyaWRlIC9ldGMvbG9naW4uZGVmcyBkZWZhdWx0cyIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1sIiwgIi0tbm8tbG9nLWluaXQiLCBoZWxwPSJkbyBub3QgYWRkIHRoZSB1c2VyIHRvIHRoZSBsYXN0bG9nIGFuZCBmYWlsbG9nIGRhdGFiYXNlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1tIiwgIi0tY3JlYXRlLWhvbWUiLCBoZWxwPSJjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1NIiwgIi0tbm8tY3JlYXRlLWhvbWUiLCBoZWxwPSJkbyBub3QgY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItTiIsICItLW5vLXVzZXItZ3JvdXAiLCBoZWxwPSJkbyBub3QgY3JlYXRlIGEgZ3JvdXAgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB1c2VyIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1ub24tdW5pcXVlIiwgaGVscD0iYWxsb3cgdG8gY3JlYXRlIHVzZXJzIHdpdGggZHVwbGljYXRlIChub24tdW5pcXVlIFVJRCkiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItcCIsICItLXBhc3N3b3JkIiwgbWV0YXZhcj0iUEFTU1dPUkQiLCBoZWxwPSJlbmNyeXB0ZWQgcGFzc3dvcmQgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVIiLCAiLS1yb290IiwgbWV0YXZhcj0iQ0hST09UX0RJUiIsIGhlbHA9ImRpcmVjdG9yeSB0byBjaHJvb3QgaW50byIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1yIiwgIi0tc3lzdGVtIiwgaGVscD0iY3JlYXRlIGEgc3lzdGVtIGFjY291bnQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItcyIsICItLXNoZWxsIiwgbWV0YXZhcj0iU0hFTEwiLCBoZWxwPSJsb2dpbiBzaGVsbCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItdSIsICItLXVpZCIsIG1ldGF2YXI9IlVJRCIsIGhlbHA9InVzZXIgSUQgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVUiLCAiLS11c2VyLWdyb3VwIiwgaGVscD0iY3JlYXRlIGEgZ3JvdXAgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB1c2VyIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiTE9HSU4iLCBoZWxwPSJMb2dpbiBuYW1lIG9mIHRoZSBuZXcgdXNlciIpCisKKyAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0CisgICAgICAgICMgZmlsZXMvcGFzc3dkIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX1VJRF9UQUJMRVMKKyAgICAgICAgIyBwYXRocyBhcmUgcmVzdWx2ZWQgdmlhIEJCUEFUSAorICAgICAgICBkZWYgZ2V0X3Bhc3N3ZF9saXN0KGQpOgorICAgICAgICAgICAgc3RyID0gIiIKKyAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgICAgICAgICAgcGFzc3dkX3RhYmxlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1VJRF9UQUJMRVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBhc3N3ZF90YWJsZXM6CisgICAgICAgICAgICAgICAgcGFzc3dkX3RhYmxlcyA9ICdmaWxlcy9wYXNzd2QnCisgICAgICAgICAgICBmb3IgY29uZl9maWxlIGluIHBhc3N3ZF90YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzdHIgKz0gIiAlcyIgJSBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkKKyAgICAgICAgICAgIHJldHVybiBzdHIKKworICAgICAgICBuZXdwYXJhbXMgPSBbXQorICAgICAgICBmb3IgcGFyYW0gaW4gcmUuc3BsaXQoJycnWyBcdF0qO1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtcyk6CisgICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVhYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJlLnNwbGl0KCcnJ1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtKSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlczogVW5hYmxlIHRvIHBhcnNlIGFyZ3VtZW50cyBmb3IgVVNFUkFERF9QQVJBTV8lczogJyVzJyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgcGFyYW0pKQorCisgICAgICAgICAgICAjIGZpbGVzL3Bhc3N3ZCBvciB0aGUgY29udGVudHMgb2YgVVNFUkFERF9VSURfVEFCTEVTCisgICAgICAgICAgICAjIFVzZSB0aGUgc3RhbmRhcmQgcGFzc3dkIGxheW91dDoKKyAgICAgICAgICAgICMgIHVzZXJuYW1lOnBhc3N3b3JkOnVzZXJfaWQ6Z3JvdXBfaWQ6Y29tbWVudDpob21lX2RpcmVjdG9yeTpsb2dpbl9zaGVsbAorICAgICAgICAgICAgIyAod2Ugd2FudCB0byBwcm9jZXNzIGluIHJldmVyc2Ugb3JkZXIsIGFzICdsYXN0IGZvdW5kJyBpbiB0aGUgbGlzdCB3aW5zKQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJZiBhIGZpZWxkIGlzIGxlZnQgYmxhbmssIHRoZSBvcmlnaW5hbCB2YWx1ZSB3aWxsIGJlIHVzZWQuICBUaGUgJ3VzZXJuYW1lJworICAgICAgICAgICAgIyBmaWVsZCBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTm90ZTogd2UgaWdub3JlIHRoZSBwYXNzd29yZCBmaWVsZCwgYXMgaW5jbHVkaW5nIGV2ZW4gdGhlIGhhc2hlZCBwYXNzd29yZAorICAgICAgICAgICAgIyBpbiB0aGUgdXNlcmFkZCBjb21tYW5kIG1heSBpbnRyb2R1Y2UgYSBzZWN1cml0eSBob2xlLiAgSXQncyBhc3N1bWVkIHRoYXQKKyAgICAgICAgICAgICMgYWxsIG5ldyB1c2VycyBnZXQgdGhlIGRlZmF1bHQgKCcqJyB3aGljaCBwcmV2ZW50cyBsb2dpbikgdW50aWwgdGhlIHVzZXIgaXMKKyAgICAgICAgICAgICMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgYnkgdGhlIHN5c3RlbSBhZG1pbi4KKyAgICAgICAgICAgIGZvciBjb25mIGluIGdldF9wYXNzd2RfbGlzdChkKS5zcGxpdCgpWzo6LTFdOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmYpOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihjb25mLCAiciIpCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkWzBdID09IHVhYXJncy5MT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB1YWFyZ3MudWlkIGFuZCBmaWVsZFsyXSBhbmQgKHVhYXJncy51aWQgIT0gZmllbGRbMl0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgdXNlcm5hbWUgJXMncyB1aWQgZnJvbSAoJXMpIHRvICglcyksIHZlcmlmeSBjb25maWd1cmF0aW9uIGZpbGVzISIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHVhYXJncy5MT0dJTiwgdWFhcmdzLnVpZCwgZmllbGRbMl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy51aWQgPSBbZmllbGRbMl0sIHVhYXJncy51aWRdW25vdCBmaWVsZFsyXV0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBwb3NzaWJsZSBncm91cG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVubGVzcyB0aGUgZ3JvdXAgbmFtZSAob3IgZ2lkKSBpcyBzcGVjaWZpZWQsIHdlIGFzc3VtZSB0aGF0IHRoZSBMT0dJTiBpcyB0aGUgZ3JvdXBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnkgZGVmYXVsdCB0aGUgc3lzdGVtIGhhcyBjcmVhdGlvbiBvZiB0aGUgbWF0Y2hpbmcgZ3JvdXBzIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNvIGlmIHRoZSBpbXBsaWNpdCB1c2VybmFtZS1ncm91cCBjcmVhdGlvbiBpcyBvbiwgdGhlbiB0aGUgaW1wbGljaXQgZ3JvdXBuYW1lIChMT0dJTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlzIHVzZWQsIGFuZCB3ZSBkaXNhYmxlIHRoZSB1c2VyX2dyb3VwIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdyb3VwbmFtZSA9IFt1YWFyZ3MuZ2lkLCB1YWFyZ3MuTE9HSU5dW25vdCB1YWFyZ3MuZ2lkIG9yIHVhYXJncy51c2VyX2dyb3VwXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5ncm91cGlkID0gW3VhYXJncy5naWQsIHVhYXJncy5ncm91cG5hbWVdW25vdCB1YWFyZ3MuZ2lkXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5ncm91cGlkID0gW2ZpZWxkWzNdLCB1YWFyZ3MuZ3JvdXBpZF1bbm90IGZpZWxkWzNdXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHVhYXJncy5naWQgb3IgdWFhcmdzLmdpZCAhPSB1YWFyZ3MuZ3JvdXBpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVhYXJncy5ncm91cGlkIGFuZCB1YWFyZ3MuZ3JvdXBpZC5pc2RpZ2l0KCkpIGFuZCAodWFhcmdzLmdyb3VwbmFtZSBhbmQgdWFhcmdzLmdyb3VwbmFtZS5pc2RpZ2l0KCkpIGFuZCAodWFhcmdzLmdyb3VwaWQgIT0gdWFhcmdzLmdyb3VwbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIHdhbnQgdG8gYWRkIGEgZ3JvdXAsIGJ1dCB3ZSBkb24ndCBrbm93IGl0J3MgbmFtZS4uLiBzbyB3ZSBjYW4ndCBhZGQgdGhlIGdyb3VwLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgdG8gYXNzdW1lIHRoZSBncm91cCBoYXMgcHJldmlvdXNseSBiZWVuIGFkZGVkIG9yIHdlJ2xsIGZhaWwgb24gdGhlIGFkZHVzZXIuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90ZTogc3BlY2lmeWluZyB0aGUgYWN0dWFsIGdpZCBpcyB2ZXJ5IHJhcmUgaW4gT0UsIHVzdWFsbHkgdGhlIGdyb3VwIG5hbWUgaXMgc3BlY2lmaWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IENoYW5naW5nIGdpZCBmb3IgbG9naW4gJXMgZnJvbSAoJXMpIHRvICglcyksIHZlcmlmeSBjb25maWd1cmF0aW9uIGZpbGVzISIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHVhYXJncy5MT0dJTiwgdWFhcmdzLmdyb3VwbmFtZSwgdWFhcmdzLmdpZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgKHVhYXJncy5ncm91cGlkIGFuZCBub3QgdWFhcmdzLmdyb3VwaWQuaXNkaWdpdCgpKSBhbmQgdWFhcmdzLmdyb3VwaWQgPT0gdWFhcmdzLmdyb3VwbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgaGF2ZSBhIG51bWJlciwgc28gd2UgaGF2ZSB0byBhZGQgYSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiQWRkaW5nIGdyb3VwICVzISIgJSAodWFhcmdzLmdyb3VwbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ2lkID0gdWFhcmdzLmdyb3VwaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy51c2VyX2dyb3VwID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwYWRkID0gZC5nZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gIiVzICVzIiAlIChbJycsICcgLS1zeXN0ZW0nXVt1YWFyZ3Muc3lzdGVtXSwgdWFhcmdzLmdyb3VwbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwYWRkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csICIlcyA7ICVzIiAlIChncm91cGFkZCwgbmV3Z3JvdXApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCBuZXdncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiB1YWFyZ3MuZ3JvdXBuYW1lIGFuZCAodWFhcmdzLmdyb3VwaWQgYW5kIHVhYXJncy5ncm91cGlkLmlzZGlnaXQoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSBncm91cCBuYW1lIGFuZCBhIGdyb3VwIG51bWJlciB0byBhc3NpZ24gaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJBZGRpbmcgZ3JvdXAgJXMgIGdpZCAoJXMpISIgJSAodWFhcmdzLmdyb3VwbmFtZSwgdWFhcmdzLmdyb3VwaWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdpZCA9IHVhYXJncy5ncm91cGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MudXNlcl9ncm91cCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGFkZCA9IGQuZ2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9ICItZyAlcyAlcyIgJSAodWFhcmdzLmdpZCwgdWFhcmdzLmdyb3VwbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwYWRkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csICIlcyA7ICVzIiAlIChncm91cGFkZCwgbmV3Z3JvdXApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCBuZXdncm91cCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5jb21tZW50ID0gWyInJXMnIiAlIGZpZWxkWzRdLCB1YWFyZ3MuY29tbWVudF1bbm90IGZpZWxkWzRdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5ob21lX2RpciA9IFtmaWVsZFs1XSwgdWFhcmdzLmhvbWVfZGlyXVtub3QgZmllbGRbNV1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnNoZWxsID0gW2ZpZWxkWzZdLCB1YWFyZ3Muc2hlbGxdW25vdCBmaWVsZFs2XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIFNob3VsZCBiZSBhbiBlcnJvciBpZiBhIHNwZWNpZmljIG9wdGlvbiBpcyBzZXQuLi4KKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdVU0VSQUREX0VSUk9SX0RZTkFNSUMnLCBUcnVlKSA9PSAnMScgYW5kIG5vdCAoKHVhYXJncy51aWQgYW5kIHVhYXJncy51aWQuaXNkaWdpdCgpKSBhbmQgdWFhcmdzLmdpZCk6CisgICAgICAgICAgICAgICAgI2JiLmVycm9yKCJTa2lwcGluZyByZWNpcGUgJXMsIHBhY2thZ2UgJXMgd2hpY2ggYWRkcyB1c2VybmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIHVpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksICBwa2csIHVhYXJncy5MT0dJTikpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSAlczogVXNlcm5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyB1aWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIHVhYXJncy5MT0dJTikpCisKKyAgICAgICAgICAgICMgUmVjb25zdHJ1Y3QgdGhlIGFyZ3MuLi4KKyAgICAgICAgICAgIG5ld3BhcmFtICA9IFsnJywgJyAtLWRlZmF1bHRzJ11bdWFhcmdzLmRlZmF1bHRzXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tYmFzZS1kaXIgJXMnICUgdWFhcmdzLmJhc2VfZGlyXVt1YWFyZ3MuYmFzZV9kaXIgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWNvbW1lbnQgJXMnICUgdWFhcmdzLmNvbW1lbnRdW3VhYXJncy5jb21tZW50ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ob21lLWRpciAlcycgJSB1YWFyZ3MuaG9tZV9kaXJdW3VhYXJncy5ob21lX2RpciAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tZXhwaXJlZGF0YSAlcycgJSB1YWFyZ3MuZXhwaXJlZGF0ZV1bdWFhcmdzLmV4cGlyZWRhdGUgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWluYWN0aXZlICVzJyAlIHVhYXJncy5pbmFjdGl2ZV1bdWFhcmdzLmluYWN0aXZlICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1naWQgJXMnICUgdWFhcmdzLmdpZF1bdWFhcmdzLmdpZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tZ3JvdXBzICVzJyAlIHVhYXJncy5ncm91cHNdW3VhYXJncy5ncm91cHMgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXNrZWwgJXMnICUgdWFhcmdzLnNrZWxdW3VhYXJncy5za2VsICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1rZXkgJXMnICUgdWFhcmdzLmtleV1bdWFhcmdzLmtleSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm8tbG9nLWluaXQnXVt1YWFyZ3Mubm9fbG9nX2luaXRdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1jcmVhdGUtaG9tZSddW3VhYXJncy5jcmVhdGVfaG9tZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vLWNyZWF0ZS1ob21lJ11bdWFhcmdzLm5vX2NyZWF0ZV9ob21lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm8tdXNlci1ncm91cCddW3VhYXJncy5ub191c2VyX2dyb3VwXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm9uLXVuaXF1ZSddW3VhYXJncy5ub25fdW5pcXVlXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcGFzc3dvcmQgJXMnICUgdWFhcmdzLnBhc3N3b3JkXVt1YWFyZ3MucGFzc3dvcmQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXJvb3QgJXMnICUgdWFhcmdzLnJvb3RdW3VhYXJncy5yb290ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1zeXN0ZW0nXVt1YWFyZ3Muc3lzdGVtXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tc2hlbGwgJXMnICUgdWFhcmdzLnNoZWxsXVt1YWFyZ3Muc2hlbGwgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXVpZCAlcycgJSB1YWFyZ3MudWlkXVt1YWFyZ3MudWlkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS11c2VyLWdyb3VwJ11bdWFhcmdzLnVzZXJfZ3JvdXBdCisgICAgICAgICAgICBuZXdwYXJhbSArPSAnICVzJyAlIHVhYXJncy5MT0dJTgorCisgICAgICAgICAgICBuZXdwYXJhbXMuYXBwZW5kKG5ld3BhcmFtKQorCisgICAgICAgIHJldHVybiAiIDsiLmpvaW4obmV3cGFyYW1zKS5zdHJpcCgpCisKKyAgICAjIFdlIHBhcnNlIGFuZCByZXdyaXRlIHRoZSBncm91cGFkZCBjb21wb25lbnRzCisgICAgZGVmIHJld3JpdGVfZ3JvdXBhZGQocGFyYW1zKToKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvbWVzIGZyb20gLS1oZWxwIG9uIGdyb3VwYWRkIGZyb20gc2hhZG93CisgICAgICAgIHBhcnNlciA9IG15QXJndW1lbnRQYXJzZXIocHJvZz0nZ3JvdXBhZGQnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZiIsICItLWZvcmNlIiwgaGVscD0iZXhpdCBzdWNjZXNzZnVsbHkgaWYgdGhlIGdyb3VwIGFscmVhZHkgZXhpc3RzLCBhbmQgY2FuY2VsIC1nIGlmIHRoZSBHSUQgaXMgYWxyZWFkeSB1c2VkIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWciLCAiLS1naWQiLCBtZXRhdmFyPSJHSUQiLCBoZWxwPSJ1c2UgR0lEIGZvciB0aGUgbmV3IGdyb3VwIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUsiLCAiLS1rZXkiLCBtZXRhdmFyPSJLRVk9VkFMVUUiLCBoZWxwPSJvdmVycmlkZSAvZXRjL2xvZ2luLmRlZnMgZGVmYXVsdHMiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW5vbi11bmlxdWUiLCBoZWxwPSJhbGxvdyB0byBjcmVhdGUgZ3JvdXBzIHdpdGggZHVwbGljYXRlIChub24tdW5pcXVlKSBHSUQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItcCIsICItLXBhc3N3b3JkIiwgbWV0YXZhcj0iUEFTU1dPUkQiLCBoZWxwPSJ1c2UgdGhpcyBlbmNyeXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXcgZ3JvdXAiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItUiIsICItLXJvb3QiLCBtZXRhdmFyPSJDSFJPT1RfRElSIiwgaGVscD0iZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXIiLCAiLS1zeXN0ZW0iLCBoZWxwPSJjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIkdST1VQIiwgaGVscD0iR3JvdXAgbmFtZSBvZiB0aGUgbmV3IGdyb3VwIikKKworICAgICAgICAjIFJldHVybiBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlZmF1bHQKKyAgICAgICAgIyBmaWxlcy9ncm91cCBvciB0aGUgY29udGVudHMgb2YgVVNFUkFERF9HSURfVEFCTEVTCisgICAgICAgICMgcGF0aHMgYXJlIHJlc3VsdmVkIHZpYSBCQlBBVEgKKyAgICAgICAgZGVmIGdldF9ncm91cF9saXN0KGQpOgorICAgICAgICAgICAgc3RyID0gIiIKKyAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgICAgICAgICAgZ3JvdXBfdGFibGVzID0gZC5nZXRWYXIoJ1VTRVJBRERfR0lEX1RBQkxFUycsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgZ3JvdXBfdGFibGVzOgorICAgICAgICAgICAgICAgIGdyb3VwX3RhYmxlcyA9ICdmaWxlcy9ncm91cCcKKyAgICAgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gZ3JvdXBfdGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3RyICs9ICIgJXMiICUgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjb25mX2ZpbGUpCisgICAgICAgICAgICByZXR1cm4gc3RyCisKKyAgICAgICAgbmV3cGFyYW1zID0gW10KKyAgICAgICAgZm9yIHBhcmFtIGluIHJlLnNwbGl0KCcnJ1sgXHRdKjtbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbXMpOgorICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgcGFyYW06CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIHByb2Nlc3NpbmcgbXVsdGlwbGUgbGluZXMsIHdlIGNvdWxkIGhhdmUgbGVmdCBvdmVyIHZhbHVlcyBoZXJlLi4uCisgICAgICAgICAgICAgICAgZ2FhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmUuc3BsaXQoJycnWyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW0pKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzOiBVbmFibGUgdG8gcGFyc2UgYXJndW1lbnRzIGZvciBHUk9VUEFERF9QQVJBTV8lczogJyVzJyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgcGFyYW0pKQorCisgICAgICAgICAgICAjIE5lZWQgdG8gaXRlcmF0ZSBvdmVyIGxheWVycyBhbmQgb3BlbiB0aGUgcmlnaHQgZmlsZShzKQorICAgICAgICAgICAgIyBVc2UgdGhlIHN0YW5kYXJkIGdyb3VwIGxheW91dDoKKyAgICAgICAgICAgICMgIGdyb3VwbmFtZTpwYXNzd29yZDpncm91cF9pZDpncm91cF9tZW1iZXJzCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIGEgZmllbGQgaXMgbGVmdCBibGFuaywgdGhlIG9yaWdpbmFsIHZhbHVlIHdpbGwgYmUgdXNlZC4gVGhlICdncm91cG5hbWUnIGZpZWxkCisgICAgICAgICAgICAjIGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBOb3RlOiBzaW1pbGFyIHRvIHRoZSBwYXNzd2QgZmlsZSwgdGhlICdwYXNzd29yZCcgZmlsZWQgaXMgaWdub3JlZAorICAgICAgICAgICAgIyBOb3RlOiBncm91cF9tZW1iZXJzIGlzIGlnbm9yZWQsIGdyb3VwIG1lbWJlcnMgbXVzdCBiZSBjb25maWd1cmVkIHdpdGggdGhlIEdST1VQTUVNU19QQVJBTQorICAgICAgICAgICAgZm9yIGNvbmYgaW4gZ2V0X2dyb3VwX2xpc3QoZCkuc3BsaXQoKVs6Oi0xXToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25mKToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oY29uZiwgInIiKQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5yc3RyaXAoKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZFswXSA9PSBnYWFyZ3MuR1JPVVAgYW5kIGZpZWxkWzJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdhYXJncy5naWQgYW5kIChnYWFyZ3MuZ2lkICE9IGZpZWxkWzJdKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IENoYW5naW5nIGdyb3VwbmFtZSAlcydzIGdpZCBmcm9tICglcykgdG8gKCVzKSwgdmVyaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMhIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZ2FhcmdzLkdST1VQLCBnYWFyZ3MuZ2lkLCBmaWVsZFsyXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FhcmdzLmdpZCA9IGZpZWxkWzJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycsIFRydWUpID09ICcxJyBhbmQgbm90IChnYWFyZ3MuZ2lkIGFuZCBnYWFyZ3MuZ2lkLmlzZGlnaXQoKSk6CisgICAgICAgICAgICAgICAgI2JiLmVycm9yKCJTa2lwcGluZyByZWNpcGUgJXMsIHBhY2thZ2UgJXMgd2hpY2ggYWRkcyBncm91cG5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyBnaWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCAgcGtnLCBnYWFyZ3MuR1JPVVApKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gJXM6IEdyb3VwbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIGdpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgZ2FhcmdzLkdST1VQKSkKKworICAgICAgICAgICAgIyBSZWNvbnN0cnVjdCB0aGUgYXJncy4uLgorICAgICAgICAgICAgbmV3cGFyYW0gID0gWycnLCAnIC0tZm9yY2UnXVtnYWFyZ3MuZm9yY2VdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1naWQgJXMnICUgZ2FhcmdzLmdpZF1bZ2FhcmdzLmdpZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0ta2V5ICVzJyAlIGdhYXJncy5rZXldW2dhYXJncy5rZXkgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vbi11bmlxdWUnXVtnYWFyZ3Mubm9uX3VuaXF1ZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXBhc3N3b3JkICVzJyAlIGdhYXJncy5wYXNzd29yZF1bZ2FhcmdzLnBhc3N3b3JkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1yb290ICVzJyAlIGdhYXJncy5yb290XVtnYWFyZ3Mucm9vdCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tc3lzdGVtJ11bZ2FhcmdzLnN5c3RlbV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9ICcgJXMnICUgZ2FhcmdzLkdST1VQCisKKyAgICAgICAgICAgIG5ld3BhcmFtcy5hcHBlbmQobmV3cGFyYW0pCisKKyAgICAgICAgcmV0dXJuICIgOyIuam9pbihuZXdwYXJhbXMpLnN0cmlwKCkKKworICAgICMgTG9hZCBhbmQgcHJvY2VzcyB0aGUgdXNlcnMgYW5kIGdyb3VwcywgcmV3cml0aW5nIHRoZSBhZGR1c2VyL2FkZGdyb3VwIHBhcmFtcworICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHVzZXJhZGRfcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgIyBHcm91cG1lbXMgZG9lc24ndCBoYXZlIGFueXRoaW5nIHdlIG1pZ2h0IHdhbnQgdG8gY2hhbmdlLCBzbyBzaW1wbHkgdmFsaWRhdGluZworICAgICAgICAjIGlzIGEgYml0IG9mIGEgd2FzdGUgLS0gb25seSBwcm9jZXNzIHVzZXJhZGQvZ3JvdXBhZGQKKyAgICAgICAgdXNlcmFkZF9wYXJhbSA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgdXNlcmFkZF9wYXJhbToKKyAgICAgICAgICAgICNiYi53YXJuKCJCZWZvcmU6ICdVU0VSQUREX1BBUkFNXyVzJyAtICclcyciICUgKHBrZywgdXNlcmFkZF9wYXJhbSkpCisgICAgICAgICAgICBkLnNldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIHJld3JpdGVfdXNlcmFkZCh1c2VyYWRkX3BhcmFtKSkKKyAgICAgICAgICAgICNiYi53YXJuKCJBZnRlcjogICdVU0VSQUREX1BBUkFNXyVzJyAtICclcyciICUgKHBrZywgZC5nZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSkpCisKKyAgICAgICAgZ3JvdXBhZGRfcGFyYW0gPSBkLmdldFZhcignR1JPVVBBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBncm91cGFkZF9wYXJhbToKKyAgICAgICAgICAgICNiYi53YXJuKCJCZWZvcmU6ICdHUk9VUEFERF9QQVJBTV8lcycgLSAnJXMnIiAlIChwa2csIGdyb3VwYWRkX3BhcmFtKSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIHJld3JpdGVfZ3JvdXBhZGQoZ3JvdXBhZGRfcGFyYW0pKQorICAgICAgICAgICAgI2JiLndhcm4oIkFmdGVyOiAgJ0dST1VQQUREX1BBUkFNXyVzJyAtICclcyciICUgKHBrZywgZC5nZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkpKQorCisKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVwZGF0ZV91c2VyYWRkX3N0YXRpY19jb25maWcoZCkKKyAgICAgICAgZXhjZXB0IGJiLmJ1aWxkLkZ1bmNGYWlsZWQgYXMgZjoKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTa2lwcGluZyByZWNpcGUgJXM6ICVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZikpCisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZShmKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzdlNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MKQEAgLTAsMCArMSwyMjMgQEAKK2luaGVyaXQgdXNlcmFkZF9iYXNlCisKKyMgYmFzZS1wYXNzd2QtY3Jvc3MgcHJvdmlkZXMgdGhlIGRlZmF1bHQgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBpbiB0aGUKKyMgdGFyZ2V0IHN5c3Jvb3QsIGFuZCBzaGFkb3cgLW5hdGl2ZSBhbmQgLXN5c3Jvb3QgcHJvdmlkZSB0aGUgdXRpbGl0aWVzCisjIGFuZCBzdXBwb3J0IGZpbGVzIG5lZWRlZCB0byBhZGQgYW5kIG1vZGlmeSB1c2VyIGFuZCBncm91cCBhY2NvdW50cworREVQRU5EU19hcHBlbmQgPSAiJHtVU0VSQUREREVQRU5EU30iCitVU0VSQUREREVQRU5EUyA9ICIgYmFzZS1maWxlcyBzaGFkb3ctbmF0aXZlIHNoYWRvdy1zeXNyb290IHNoYWRvdyIKK1VTRVJBRERERVBFTkRTX2NsYXNzLWNyb3NzID0gIiIKK1VTRVJBRERERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitVU0VSQUREREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCisjIFRoaXMgcHJlaW5zdGFsbCBmdW5jdGlvbiBjYW4gYmUgcnVuIGluIGZvdXIgZGlmZmVyZW50IGNvbnRleHRzOgorIworIyBhKSBCZWZvcmUgZG9faW5zdGFsbAorIyBiKSBBdCBkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIHdoZW4gaW5zdGFsbGluZyBmcm9tIHNzdGF0ZSBwYWNrYWdlcworIyBjKSBBcyB0aGUgcHJlaW5zdCBzY3JpcHQgaW4gdGhlIHRhcmdldCBwYWNrYWdlIGF0IGRvX3Jvb3RmcyB0aW1lCisjIGQpIEFzIHRoZSBwcmVpbnN0IHNjcmlwdCBpbiB0aGUgdGFyZ2V0IHBhY2thZ2Ugb24gZGV2aWNlIGFzIGEgcGFja2FnZSB1cGdyYWRlCisjCit1c2VyYWRkX3ByZWluc3QgKCkgeworT1BUPSIiCitTWVNST09UPSIiCisKK2lmIHRlc3QgIngkRCIgIT0gIngiOyB0aGVuCisJIyBJbnN0YWxsaW5nIGludG8gYSBzeXNyb290CisJU1lTUk9PVD0iJEQiCisJT1BUPSItLXJvb3QgJEQiCisKKwkjIE1ha2Ugc3VyZSBsb2dpbi5kZWZzIGlzIHRoZXJlLCB0aGlzIGlzIHRvIG1ha2UgZGViaWFuIHBhY2thZ2UgYmFja2VuZCB3b3JrCisJIyBjb3JyZWN0bHkgd2hpbGUgZG9pbmcgcm9vdGZzLgorCSMgVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGlmIC9ldGMvbG9naW4uZGVmcyBpcyB0cmVhdGVkIGFzIGEgY29uZmlnIGZpbGUgZm9yCisJIyBzaGFkb3cgcGFja2FnZSwgdGhlbiB3aGlsZSBwZXJmb3JtaW5nIHByZWluc3RzIGZvciBwYWNrYWdlcyB0aGF0IGRlcGVuZCBvbgorCSMgc2hhZG93LCB0aGVyZSBtaWdodCBvbmx5IGJlIC9ldGMvbG9naW4uZGVmLmRwa2ctbmV3IHRoZXJlIGluIHJvb3QgZmlsZXN5c3RlbS4KKwlpZiBbICEgLWUgJEQke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMgLWEgLWUgJEQke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMuZHBrZy1uZXcgXTsgdGhlbgorCSAgICBjcCAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcy5kcGtnLW5ldyAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCWZpCisKKwkjIHVzZXIvZ3JvdXAgbG9va3VwcyBzaG91bGQgbWF0Y2ggdXNlcmFkZC9ncm91cGFkZCAtLXJvb3QKKwlleHBvcnQgUFNFVURPX1BBU1NXRD0iJFNZU1JPT1Q6JHtTVEFHSU5HX0RJUl9OQVRJVkV9IgorZmkKKworIyBJZiB3ZSdyZSBub3QgZG9pbmcgYSBzcGVjaWFsIFNTVEFURS9TWVNST09UIGluc3RhbGwKKyMgdGhlbiBzZXQgdGhlIHZhbHVlcywgb3RoZXJ3aXNlIHVzZSB0aGUgZW52aXJvbm1lbnQKK2lmIHRlc3QgIngkVUFfU1lTUk9PVCIgPSAieCI7IHRoZW4KKwkjIEluc3RhbGxpbmcgb250byBhIHRhcmdldAorCSMgQWRkIGdyb3VwcyBhbmQgdXNlcnMgZGVmaW5lZCBvbmx5IGZvciB0aGlzIHBhY2thZ2UKKwlHUk9VUEFERF9QQVJBTT0iJHtHUk9VUEFERF9QQVJBTX0iCisJVVNFUkFERF9QQVJBTT0iJHtVU0VSQUREX1BBUkFNfSIKKwlHUk9VUE1FTVNfUEFSQU09IiR7R1JPVVBNRU1TX1BBUkFNfSIKK2ZpCisKKyMgUGVyZm9ybSBncm91cCBhZGRpdGlvbnMgZmlyc3QsIHNpbmNlIHVzZXIgYWRkaXRpb25zIG1heSBkZXBlbmQKKyMgb24gdGhlc2UgZ3JvdXBzIGV4aXN0aW5nCitpZiB0ZXN0ICJ4JEdST1VQQUREX1BBUkFNIiAhPSAieCI7IHRoZW4KKwllY2hvICJSdW5uaW5nIGdyb3VwYWRkIGNvbW1hbmRzLi4uIgorCSMgSW52b2tlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBncm91cGFkZCBmb3IgcGFyYW1ldGVyIGxpc3RzCisJIyBzZXBhcmF0ZWQgYnkgJzsnCisJb3B0cz1gZWNobyAiJEdST1VQQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMWAKKwlyZW1haW5pbmc9YGVjaG8gIiRHUk9VUEFERF9QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDItYAorCXdoaWxlIHRlc3QgIngkb3B0cyIgIT0gIngiOyBkbworCQlwZXJmb3JtX2dyb3VwYWRkICIkU1lTUk9PVCIgIiRPUFQgJG9wdHMiIDEwCisJCWlmIHRlc3QgIngkb3B0cyIgPSAieCRyZW1haW5pbmciOyB0aGVuCisJCQlicmVhaworCQlmaQorCQlvcHRzPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMWAKKwkJcmVtYWluaW5nPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJZG9uZQorZmkgCisKK2lmIHRlc3QgIngkVVNFUkFERF9QQVJBTSIgIT0gIngiOyB0aGVuCisJZWNobyAiUnVubmluZyB1c2VyYWRkIGNvbW1hbmRzLi4uIgorCSMgSW52b2tlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2VyYWRkIGZvciBwYXJhbWV0ZXIgbGlzdHMKKwkjIHNlcGFyYXRlZCBieSAnOycKKwlvcHRzPWBlY2hvICIkVVNFUkFERF9QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDFgCisJcmVtYWluaW5nPWBlY2hvICIkVVNFUkFERF9QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDItYAorCXdoaWxlIHRlc3QgIngkb3B0cyIgIT0gIngiOyBkbworCQlwZXJmb3JtX3VzZXJhZGQgIiRTWVNST09UIiAiJE9QVCAkb3B0cyIgMTAKKwkJaWYgdGVzdCAieCRvcHRzIiA9ICJ4JHJlbWFpbmluZyI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlkb25lCitmaQorCitpZiB0ZXN0ICJ4JEdST1VQTUVNU19QQVJBTSIgIT0gIngiOyB0aGVuCisJZWNobyAiUnVubmluZyBncm91cG1lbXMgY29tbWFuZHMuLi4iCisJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGdyb3VwbWVtcyBmb3IgcGFyYW1ldGVyIGxpc3RzCisJIyBzZXBhcmF0ZWQgYnkgJzsnCisJb3B0cz1gZWNobyAiJEdST1VQTUVNU19QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDFgCisJcmVtYWluaW5nPWBlY2hvICIkR1JPVVBNRU1TX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJd2hpbGUgdGVzdCAieCRvcHRzIiAhPSAieCI7IGRvCisJCXBlcmZvcm1fZ3JvdXBtZW1zICIkU1lTUk9PVCIgIiRPUFQgJG9wdHMiIDEwCisJCWlmIHRlc3QgIngkb3B0cyIgPSAieCRyZW1haW5pbmciOyB0aGVuCisJCQlicmVhaworCQlmaQorCQlvcHRzPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMWAKKwkJcmVtYWluaW5nPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJZG9uZQorZmkKK30KKwordXNlcmFkZF9zeXNyb290ICgpIHsKKwkjIFBzZXVkbyBtYXkgKGRvX2luc3RhbGwpIG9yIG1heSBub3QgKGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUpIGJlIHJ1bm5pbmcgCisJIyBhdCB0aGlzIHBvaW50IHNvIHdlJ3JlIGV4cGxpY2l0IGFib3V0IHRoZSBlbnZpcm9ubWVudCBzbyBwc2V1ZG8gY2FuIGxvYWQgaWYgCisJIyBub3QgYWxyZWFkeSBwcmVzZW50LgorCWV4cG9ydCBQU0VVRE89IiR7RkFLRVJPT1RFTlZ9IFBTRVVET19MT0NBTFNUQVRFRElSPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bG9jYWxzdGF0ZWRpcn0vcHNldWRvICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyfS9wc2V1ZG8iCisKKwkjIEV4cGxpY2l0bHkgc2V0ICREIHNpbmNlIGl0IGlzbid0IHNldCB0byBhbnl0aGluZworCSMgYmVmb3JlIGRvX2luc3RhbGwKKwlEPSR7U1RBR0lOR19ESVJfVEFSR0VUfQorCisJIyBBZGQgZ3JvdXBzIGFuZCB1c2VycyBkZWZpbmVkIGZvciBhbGwgcmVjaXBlIHBhY2thZ2VzCisJR1JPVVBBRERfUEFSQU09IiR7QGdldF9hbGxfY21kX3BhcmFtcyhkLCAnZ3JvdXBhZGQnKX0iCisJVVNFUkFERF9QQVJBTT0iJHtAZ2V0X2FsbF9jbWRfcGFyYW1zKGQsICd1c2VyYWRkJyl9IgorCUdST1VQTUVNU19QQVJBTT0iJHtAZ2V0X2FsbF9jbWRfcGFyYW1zKGQsICdncm91cG1lbXMnKX0iCisKKwkjIFRlbGwgdGhlIHN5c3RlbSB0byB1c2UgdGhlIGVudmlyb25tZW50IHZhcnMKKwlVQV9TWVNST09UPTEKKworCXVzZXJhZGRfcHJlaW5zdAorfQorCit1c2VyYWRkX3N5c3Jvb3Rfc3N0YXRlICgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicGFja2FnZV9zZXRzY2VuZSIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQl1c2VyYWRkX3N5c3Jvb3QKKwlmaQorfQorCitkb19pbnN0YWxsW3ByZWZ1bmNzXSArPSAiJHtTWVNST09URlVOQ30iCitTWVNST09URlVOQyA9ICJ1c2VyYWRkX3N5c3Jvb3QiCitTWVNST09URlVOQ19jbGFzcy1jcm9zcyA9ICIiCitTWVNST09URlVOQ19jbGFzcy1uYXRpdmUgPSAiIgorU1lTUk9PVEZVTkNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1NTVEFURVBSRUlOU1RGVU5DUyArPSAiJHtTWVNST09UUE9TVEZVTkN9IgorU1lTUk9PVFBPU1RGVU5DID0gInVzZXJhZGRfc3lzcm9vdF9zc3RhdGUiCitTWVNST09UUE9TVEZVTkNfY2xhc3MtY3Jvc3MgPSAiIgorU1lTUk9PVFBPU1RGVU5DX2NsYXNzLW5hdGl2ZSA9ICIiCitTWVNST09UUE9TVEZVTkNfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworVVNFUkFERFNFVFNDRU5FREVQUyA9ICIke01MUFJFRklYfWJhc2UtcGFzc3dkOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgcHNldWRvLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIHNoYWRvdy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSAke01MUFJFRklYfXNoYWRvdy1zeXNyb290OmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiCitVU0VSQUREU0VUU0NFTkVERVBTX2NsYXNzLWNyb3NzID0gIiIKK1VTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtbmF0aXZlID0gIiIKK1VTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK2RvX3BhY2thZ2Vfc2V0c2NlbmVbZGVwZW5kc10gKz0gIiR7VVNFUkFERFNFVFNDRU5FREVQU30iCitkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lW2RlcGVuZHNdICs9ICIke1VTRVJBRERTRVRTQ0VORURFUFN9IgorCisjIFJlY2lwZSBwYXJzZS10aW1lIHNhbml0eSBjaGVja3MKK2RlZiB1cGRhdGVfdXNlcmFkZF9hZnRlcl9wYXJzZShkKToKKyAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKQorCisgICAgaWYgbm90IHVzZXJhZGRfcGFja2FnZXM6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIGluaGVyaXRzIHVzZXJhZGQgYnV0IGRvZXNuJ3Qgc2V0IFVTRVJBRERfUEFDS0FHRVMiICUgZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpCisKKyAgICBmb3IgcGtnIGluIHVzZXJhZGRfcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCdVU0VSQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkgYW5kIG5vdCBkLmdldFZhcignR1JPVVBBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSBhbmQgbm90IGQuZ2V0VmFyKCdHUk9VUE1FTVNfUEFSQU1fJXMnICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBpbmhlcml0cyB1c2VyYWRkIGJ1dCBkb2Vzbid0IHNldCBVU0VSQUREX1BBUkFNLCBHUk9VUEFERF9QQVJBTSBvciBHUk9VUE1FTVNfUEFSQU0gZm9yIHBhY2thZ2UgJXMiICUgKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLCBwa2cpKQorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIFwKKyAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgdXBkYXRlX3VzZXJhZGRfYWZ0ZXJfcGFyc2UoZCkKK30KKworIyBSZXR1cm4gYSBzaW5nbGUgW0dST1VQfFVTRVJdQUREX1BBUkFNIGZvcm1hdHRlZCBzdHJpbmcgd2hpY2ggaW5jbHVkZXMgdGhlCisjIFtncm91cHx1c2VyXWFkZCBwYXJhbWV0ZXJzIGZvciBhbGwgVVNFUkFERF9QQUNLQUdFUyBpbiB0aGlzIHJlY2lwZQorZGVmIGdldF9hbGxfY21kX3BhcmFtcyhkLCBjbWRfdHlwZSk6CisgICAgaW1wb3J0IHN0cmluZworICAgIAorICAgIHBhcmFtX3R5cGUgPSBjbWRfdHlwZS51cHBlcigpICsgIl9QQVJBTV8lcyIKKyAgICBwYXJhbXMgPSBbXQorCisgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgcGtnIGluIHVzZXJhZGRfcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGFyYW0gPSBkLmdldFZhcihwYXJhbV90eXBlICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBwYXJhbToKKyAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQocGFyYW0pCisKKyAgICByZXR1cm4gIjsgIi5qb2luKHBhcmFtcykKKworIyBBZGRzIHRoZSBwcmVpbnN0IHNjcmlwdCBpbnRvIGdlbmVyYXRlZCBwYWNrYWdlcworZmFrZXJvb3QgcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGRlZiB1cGRhdGVfdXNlcmFkZF9wYWNrYWdlKHBrZyk6CisgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgdXNlci9ncm91cCBjYWxscyB0byBwcmVpbnN0IGZvciAlcycgJSBwa2cpCisKKyAgICAgICAgIiIiCisgICAgICAgIHVzZXJhZGQgcHJlaW5zdCBpcyBhcHBlbmRlZCBoZXJlIGJlY2F1c2UgcGtnX3ByZWluc3QgbWF5IGJlCisgICAgICAgIHJlcXVpcmVkIHRvIGV4ZWN1dGUgb24gdGhlIHRhcmdldC4gTm90IGRvaW5nIHNvIG1heSBjYXVzZQorICAgICAgICB1c2VyYWRkIHByZWluc3QgdG8gYmUgaW52b2tlZCB0d2ljZSwgY2F1c2luZyB1bndhbnRlZCB3YXJuaW5ncy4KKyAgICAgICAgIiIiCisgICAgICAgIHByZWluc3QgPSBkLmdldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlaW5zdDoKKyAgICAgICAgICAgIHByZWluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZWluc3QgKz0gJ2Jibm90ZSAoKSB7XG5cdGVjaG8gIk5PVEU6ICQqIlxufVxuJworICAgICAgICBwcmVpbnN0ICs9ICdiYndhcm4gKCkge1xuXHRlY2hvICJXQVJOSU5HOiAkKiJcbn1cbicKKyAgICAgICAgcHJlaW5zdCArPSAnYmJmYXRhbCAoKSB7XG5cdGVjaG8gIkVSUk9SOiAkKiJcblx0ZXhpdCAxXG59XG4nCisgICAgICAgIHByZWluc3QgKz0gJ3BlcmZvcm1fZ3JvdXBhZGQgKCkge1xuJXN9XG4nICUgZC5nZXRWYXIoJ3BlcmZvcm1fZ3JvdXBhZGQnLCBUcnVlKQorICAgICAgICBwcmVpbnN0ICs9ICdwZXJmb3JtX3VzZXJhZGQgKCkge1xuJXN9XG4nICUgZC5nZXRWYXIoJ3BlcmZvcm1fdXNlcmFkZCcsIFRydWUpCisgICAgICAgIHByZWluc3QgKz0gJ3BlcmZvcm1fZ3JvdXBtZW1zICgpIHtcbiVzfVxuJyAlIGQuZ2V0VmFyKCdwZXJmb3JtX2dyb3VwbWVtcycsIFRydWUpCisgICAgICAgIHByZWluc3QgKz0gZC5nZXRWYXIoJ3VzZXJhZGRfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIHByZWluc3QpCisKKyAgICAgICAgIyBSREVQRU5EUyBzZXR1cAorICAgICAgICByZGVwZW5kcyA9IGQuZ2V0VmFyKCJSREVQRU5EU18lcyIgJSBwa2csIFRydWUpIG9yICIiCisgICAgICAgIHJkZXBlbmRzICs9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdiYXNlLXBhc3N3ZCcKKyAgICAgICAgcmRlcGVuZHMgKz0gJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ3NoYWRvdycKKyAgICAgICAgIyBiYXNlLWZpbGVzIGlzIHdoZXJlIHRoZSBkZWZhdWx0IC9ldGMvc2tlbCBpcyBwYWNrYWdlZAorICAgICAgICByZGVwZW5kcyArPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnYmFzZS1maWxlcycKKyAgICAgICAgZC5zZXRWYXIoIlJERVBFTkRTXyVzIiAlIHBrZywgcmRlcGVuZHMpCisKKyAgICAjIEFkZCB0aGUgdXNlci9ncm91cCBwcmVpbnN0YWxsIHNjcmlwdHMgYW5kIFJERVBFTkRTIHJlcXVpcmVtZW50cworICAgICMgdG8gcGFja2FnZXMgc3BlY2lmaWVkIGJ5IFVTRVJBRERfUEFDS0FHRVMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgcGtnIGluIHVzZXJhZGRfcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIHVwZGF0ZV91c2VyYWRkX3BhY2thZ2UocGtnKQorfQorCisjIFVzZSB0aGUgZm9sbG93aW5nIHRvIGV4dGVuZCB0aGUgdXNlcmFkZCB3aXRoIGN1c3RvbSBmdW5jdGlvbnMKK1VTRVJBRERFWFRFTlNJT04gPz0gIiIKKworaW5oZXJpdCAke1VTRVJBRERFWFRFTlNJT059CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkX2Jhc2UuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91c2VyYWRkX2Jhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDIzMCBAQAorIyBUaGlzIGJiY2xhc3MgcHJvdmlkZXMgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IgdXNlci9ncm91cCBzZXR0aW5ncy4KKyMgVGhpcyBiYmNsYXNzIGlzIGludGVuZGVkIHRvIGJlIGluaGVyaXRlZCBieSB1c2VyYWRkLmJiY2xhc3MgYW5kCisjIGV4dHJhdXNlcnMuYmJjbGFzcy4KKworIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBiYXNpY2FsbHkgaGF2ZSBzaW1pbGFyIGxvZ2ljLgorIyAqKSBQZXJmb3JtIG5lY2Vzc2FyeSBjaGVja3MgYmVmb3JlIGludm9raW5nIHRoZSBhY3R1YWwgY29tbWFuZAorIyAqKSBJbnZva2UgdGhlIGFjdHVhbCBjb21tYW5kLCBtYWtlIHJldHJpZXMgaWYgbmVjZXNzYXJ5CisjICopIEVycm9yIG91dCBpZiBhbiBlcnJvciBvY2N1cnMuCisKKyMgTm90ZSB0aGF0IGJlZm9yZSBpbnZva2luZyB0aGVzZSBmdW5jdGlvbnMsIG1ha2Ugc3VyZSB0aGUgZ2xvYmFsIHZhcmlhYmxlCisjIFBTRVVETyBpcyBzZXQgdXAgY29ycmVjdGx5LgorCitwZXJmb3JtX2dyb3VwYWRkICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwYWRkIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIGdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBhZGQgJG9wdHMgfHwgdHJ1ZQorCQkJZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJCQlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJCQliYndhcm4gIiR7UE59OiBncm91cGFkZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwYWRkIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJibm90ZSAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgYWxyZWFkeSBleGlzdHMsIG5vdCByZS1jcmVhdGluZyBpdCIKKwlmaQorfQorCitwZXJmb3JtX3VzZXJhZGQgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgdXNlcmFkZCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkgICAgICAgbG9jYWwgY291bnQ9MAorCSAgICAgICB3aGlsZSB0cnVlOyBkbworCQkgICAgICAgZXZhbCAkUFNFVURPIHVzZXJhZGQgJG9wdHMgfHwgdHJ1ZQorCQkgICAgICAgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwkJICAgICAgIGlmIHRlc3QgIngkdXNlcl9leGlzdHMiID0gIngiOyB0aGVuCisJCQkgICAgICAgYmJ3YXJuICIke1BOfTogdXNlcmFkZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCSAgICAgICBlbHNlCisJCQkgICAgICAgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBjb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkgICAgICAgaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIHVzZXJhZGQgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJICAgICAgIGZpCisJCSAgICAgICBzbGVlcCAkY291bnQKKwkgICAgICAgZG9uZQorCWVsc2UKKwkJYmJub3RlICIke1BOfTogdXNlciAkdXNlcm5hbWUgYWxyZWFkeSBleGlzdHMsIG5vdCByZS1jcmVhdGluZyBpdCIKKwlmaQorfQorCitwZXJmb3JtX2dyb3VwbWVtcyAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyBncm91cG1lbXMgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBmb3IgKGkgPSAxOyBpIDwgTkY7IGkrKykgaWYgKCRpID09ICItZyIgfHwgJGkgPT0gIi0tZ3JvdXAiKSBwcmludCAkKGkrMSkgfSdgCisJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBmb3IgKGkgPSAxOyBpIDwgTkY7IGkrKykgaWYgKCRpID09ICItYSIgfHwgJGkgPT0gIi0tYWRkIikgcHJpbnQgJChpKzEpIH0nYAorCWJibm90ZSAiJHtQTn06IFJ1bm5pbmcgZ3JvdXBtZW1zIGNvbW1hbmQgd2l0aCBncm91cCAkZ3JvdXBuYW1lIGFuZCB1c2VyICR1c2VybmFtZSIKKwkjIGdyb3VwbWVtcyBmYWlscyBpZiAvZXRjL2dzaGFkb3cgZG9lcyBub3QgZXhpc3QKKwlsb2NhbCBnc2hhZG93PSIiCisJaWYgWyAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdyBdOyB0aGVuCisJCWdzaGFkb3c9InllcyIKKwllbHNlCisJCWdzaGFkb3c9Im5vIgorCQl0b3VjaCAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdworCWZpCisJbG9jYWwgbWVtX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOlteOl0qOlteOl0qOlwoW14sXSosXCkqJHVzZXJuYW1lXCgsW14sXSpcKSoiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JG1lbV9leGlzdHMiID0gIngiOyB0aGVuCisJCWxvY2FsIGNvdW50PTAKKwkJd2hpbGUgdHJ1ZTsgZG8KKwkJCWV2YWwgJFBTRVVETyBncm91cG1lbXMgJG9wdHMgfHwgdHJ1ZQorCQkJbWVtX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOlteOl0qOlteOl0qOlwoW14sXSosXCkqJHVzZXJuYW1lXCgsW14sXSpcKSoiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwkJCWlmIHRlc3QgIngkbWVtX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJCQliYndhcm4gIiR7UE59OiBncm91cG1lbXMgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkJZWxzZQorCQkJCWJyZWFrCisJCQlmaQorCQkJY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJCWlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQlpZiB0ZXN0ICJ4JGdzaGFkb3ciID0gInhubyI7IHRoZW4KKwkJCQkJcm0gLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cKKwkJCQkJcm0gLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3ctCisJCQkJZmkKKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyBncm91cG1lbXMgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJCWZpCisJCQlzbGVlcCAkY291bnQKKwkJZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogZ3JvdXAgJGdyb3VwbmFtZSBhbHJlYWR5IGNvbnRhaW5zICR1c2VybmFtZSwgbm90IHJlLWFkZGluZyBpdCIKKwlmaQorCWlmIHRlc3QgIngkZ3NoYWRvdyIgPSAieG5vIjsgdGhlbgorCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdworCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdy0KKwlmaQorfQorCitwZXJmb3JtX2dyb3VwZGVsICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwZGVsIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIGdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwZGVsICRvcHRzIHx8IHRydWUKKwkJCWdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCQkJaWYgdGVzdCAieCRncm91cF9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwZGVsIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBkZWwgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJCWZpCisJCQlzbGVlcCAkY291bnQKKwkJZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogZ3JvdXAgJGdyb3VwbmFtZSBkb2Vzbid0IGV4aXN0LCBub3QgcmVtb3ZpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV91c2VyZGVsICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIHVzZXJkZWwgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCWlmIHRlc3QgIngkdXNlcl9leGlzdHMiICE9ICJ4IjsgdGhlbgorCSAgICAgICBsb2NhbCBjb3VudD0wCisJICAgICAgIHdoaWxlIHRydWU7IGRvCisJCSAgICAgICBldmFsICRQU0VVRE8gdXNlcmRlbCAkb3B0cyB8fCB0cnVlCisJCSAgICAgICB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCQkgICAgICAgaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJCQkgICAgICAgYmJ3YXJuICIke1BOfTogdXNlcmRlbCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCSAgICAgICBlbHNlCisJCQkgICAgICAgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBjb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkgICAgICAgaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIHVzZXJkZWwgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJICAgICAgIGZpCisJCSAgICAgICBzbGVlcCAkY291bnQKKwkgICAgICAgZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogdXNlciAkdXNlcm5hbWUgZG9lc24ndCBleGlzdCwgbm90IHJlbW92aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fZ3JvdXBtb2QgKCkgeworCSMgT3RoZXIgdGhhbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGdyb3VwbW9kLCB0aGVyZSdzIG5vIHNpbXBsZSB3YXkgdG8ganVkZ2Ugd2hldGhlciB0aGUgY29tbWFuZAorCSMgc3VjY2VlZHMsIHNvIHdlIGRpc2FibGUgLWUgb3B0aW9uIHRlbXBvcmFyaWx5CisJc2V0ICtlCisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyBncm91cG1vZCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCBncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJCWxvY2FsIGNvdW50PTAKKwkJd2hpbGUgdHJ1ZTsgZG8KKwkJCWV2YWwgJFBTRVVETyBncm91cG1vZCAkb3B0cworCQkJaWYgdGVzdCAkPyAhPSAwOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBtb2QgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkJZWxzZQorCQkJCWJyZWFrCisJCQlmaQorCQkJY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJCWlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyBncm91cG1vZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKwkJCXNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGRvZXNuJ3QgZXhpc3QsIHVuYWJsZSB0byBtb2RpZnkgaXQiCisJZmkKKwlzZXQgLWUKK30KKworcGVyZm9ybV91c2VybW9kICgpIHsKKwkjIFNhbWUgcmVhc29uIHdpdGggZ3JvdXBtb2QsIHRlbXBvcmFyaWx5IGRpc2FibGUgLWUgb3B0aW9uCisJc2V0ICtlCisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyB1c2VybW9kIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkgICAgICAgbG9jYWwgY291bnQ9MAorCSAgICAgICB3aGlsZSB0cnVlOyBkbworCQkgICAgICAgZXZhbCAkUFNFVURPIHVzZXJtb2QgJG9wdHMKKwkJICAgICAgIGlmIHRlc3QgJD8gIT0gMDsgdGhlbgorCQkJICAgICAgIGJid2FybiAiJHtQTn06IHVzZXJtb2QgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkgICAgICAgZWxzZQorCQkJICAgICAgIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJICAgICAgIGlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyB1c2VybW9kIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCSAgICAgICBmaQorCQkgICAgICAgc2xlZXAgJGNvdW50CisJICAgICAgIGRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IHVzZXIgJHVzZXJuYW1lIGRvZXNuJ3QgZXhpc3QsIHVuYWJsZSB0byBtb2RpZnkgaXQiCisJZmkKKwlzZXQgLWUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODE3Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzCkBAIC0wLDAgKzEsNjkgQEAKK2FkZHRhc2sgbGlzdHRhc2tzCitkb19saXN0dGFza3Nbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19saXN0dGFza3MoKSB7CisgICAgdGFza2Rlc2NzID0ge30KKyAgICBtYXhsZW4gPSAwCisgICAgZm9yIGUgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhlLCAndGFzaycpOgorICAgICAgICAgICAgbWF4bGVuID0gbWF4KG1heGxlbiwgbGVuKGUpKQorICAgICAgICAgICAgaWYgZS5lbmRzd2l0aCgnX3NldHNjZW5lJyk6CisgICAgICAgICAgICAgICAgZGVzYyA9ICIlcyAoc2V0c2NlbmUgdmVyc2lvbikiICUgKGQuZ2V0VmFyRmxhZyhlWzotOV0sICdkb2MnKSBvciAnJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzYyA9IGQuZ2V0VmFyRmxhZyhlLCAnZG9jJykgb3IgJycKKyAgICAgICAgICAgIHRhc2tkZXNjc1tlXSA9IGRlc2MKKworICAgIHRhc2tzID0gc29ydGVkKHRhc2tkZXNjcy5rZXlzKCkpCisgICAgZm9yIHRhc2tuYW1lIGluIHRhc2tzOgorICAgICAgICBiYi5wbGFpbigiJXMgICVzIiAlICh0YXNrbmFtZS5sanVzdChtYXhsZW4pLCB0YXNrZGVzY3NbdGFza25hbWVdKSkKK30KKworQ0xFQU5GVU5DUyA/PSAiIgorCitUX3Rhc2stY2xlYW4gPSAiJHtMT0dfRElSfS9jbGVhbmxvZ3MvJHtQTn0iCithZGR0YXNrIGNsZWFuCitkb19jbGVhbltub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2NsZWFuKCkgeworICAgICIiImNsZWFyIHRoZSBidWlsZCBhbmQgdGVtcCBkaXJlY3RvcmllcyIiIgorICAgIGRpciA9IGQuZXhwYW5kKCIke1dPUktESVJ9IikKKyAgICBiYi5ub3RlKCJSZW1vdmluZyAiICsgZGlyKQorICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKKworICAgIGRpciA9ICIlcy4qIiAlIGJiLmRhdGEuZXhwYW5kKGQuZ2V0VmFyKCdTVEFNUCcsIEZhbHNlKSwgZCkKKyAgICBiYi5ub3RlKCJSZW1vdmluZyAiICsgZGlyKQorICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKKworICAgIGZvciBmIGluIChkLmdldFZhcignQ0xFQU5GVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKK30KKworYWRkdGFzayBjaGVja3VyaQorZG9fY2hlY2t1cmlbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19jaGVja3VyaSgpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBsb2NhbGRhdGEpCisgICAgICAgIGZldGNoZXIuY2hlY2tzdGF0dXMoKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZChlKQorfQorCithZGR0YXNrIGNoZWNrdXJpYWxsIGFmdGVyIGRvX2NoZWNrdXJpCitkb19jaGVja3VyaWFsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2t1cmlhbGwgZG9fY2hlY2t1cmkiCitkb19jaGVja3VyaWFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2t1cmlhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2NoZWNrdXJpYWxsKCkgeworCToKK30KKworYWRkdGFzayBmZXRjaGFsbCBhZnRlciBkb19mZXRjaAorZG9fZmV0Y2hhbGxbcmVjcmRlcHRhc2tdID0gImRvX2ZldGNoYWxsIGRvX2ZldGNoIgorZG9fZmV0Y2hhbGxbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2ZldGNoYWxsKCkgeworCToKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91dGlscy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjkyY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY2xhc3Nlcy91dGlscy5iYmNsYXNzCkBAIC0wLDAgKzEsMzgwIEBACisjIEZvciBjb21wYXRpYmlsaXR5CitkZWYgYmFzZV9wYXRoX2pvaW4oYSwgKnApOgorICAgIHJldHVybiBvZS5wYXRoLmpvaW4oYSwgKnApCisKK2RlZiBiYXNlX3BhdGhfcmVsYXRpdmUoc3JjLCBkZXN0KToKKyAgICByZXR1cm4gb2UucGF0aC5yZWxhdGl2ZShzcmMsIGRlc3QpCisKK2RlZiBiYXNlX3BhdGhfb3V0KHBhdGgsIGQpOgorICAgIHJldHVybiBvZS5wYXRoLmZvcm1hdF9kaXNwbGF5KHBhdGgsIGQpCisKK2RlZiBiYXNlX3JlYWRfZmlsZShmaWxlbmFtZSk6CisgICAgcmV0dXJuIG9lLnV0aWxzLnJlYWRfZmlsZShmaWxlbmFtZSkKKworZGVmIGJhc2VfaWZlbHNlKGNvbmRpdGlvbiwgaWZ0cnVlID0gVHJ1ZSwgaWZmYWxzZSA9IEZhbHNlKToKKyAgICByZXR1cm4gb2UudXRpbHMuaWZlbHNlKGNvbmRpdGlvbiwgaWZ0cnVlLCBpZmZhbHNlKQorCitkZWYgYmFzZV9jb25kaXRpb25hbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMuY29uZGl0aW9uYWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGJhc2VfbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMubGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQorCitkZWYgYmFzZV92ZXJzaW9uX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLnZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQorCitkZWYgYmFzZV9jb250YWlucyh2YXJpYWJsZSwgY2hlY2t2YWx1ZXMsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmV0dXJuIGJiLnV0aWxzLmNvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQorCitkZWYgYmFzZV9ib3RoX2NvbnRhaW4odmFyaWFibGUxLCB2YXJpYWJsZTIsIGNoZWNrdmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5ib3RoX2NvbnRhaW4odmFyaWFibGUxLCB2YXJpYWJsZTIsIGNoZWNrdmFsdWUsIGQpCisKK2RlZiBiYXNlX3BydW5lX3N1ZmZpeCh2YXIsIHN1ZmZpeGVzLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMucHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpCisKK2RlZiBvZV9maWx0ZXIoZiwgc3RyLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMuc3RyX2ZpbHRlcihmLCBzdHIsIGQpCisKK2RlZiBvZV9maWx0ZXJfb3V0KGYsIHN0ciwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLnN0cl9maWx0ZXJfb3V0KGYsIHN0ciwgZCkKKworZGVmIG1hY2hpbmVfcGF0aHMoZCk6CisgICAgIiIiTGlzdCBhbnkgZXhpc3RpbmcgbWFjaGluZSBzcGVjaWZpYyBmaWxlc3BhdGggZGlyZWN0b3JpZXMiIiIKKyAgICBtYWNoaW5lID0gZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgIGZpbGVzcGF0aHBrZyA9IGQuZ2V0VmFyKCJGSUxFU1BBVEhQS0ciLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgZm9yIGJhc2VwYXRoIGluIGQuZ2V0VmFyKCJGSUxFU1BBVEhCQVNFIiwgVHJ1ZSkuc3BsaXQoIjoiKToKKyAgICAgICAgZm9yIHBrZ3BhdGggaW4gZmlsZXNwYXRocGtnOgorICAgICAgICAgICAgbWFjaGluZXBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsIHBrZ3BhdGgsIG1hY2hpbmUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG1hY2hpbmVwYXRoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBtYWNoaW5lcGF0aAorCitkZWYgaXNfbWFjaGluZV9zcGVjaWZpYyhkKToKKyAgICAiIiJEZXRlcm1pbmUgd2hldGhlciB0aGUgY3VycmVudCByZWNpcGUgaXMgbWFjaGluZSBzcGVjaWZpYyIiIgorICAgIG1hY2hpbmVwYXRocyA9IHNldChtYWNoaW5lX3BhdGhzKGQpKQorICAgIHNyY3VyaSA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciB1cmwgaW4gc3JjdXJpOgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFtzcmN1cmldLCBkKQorICAgICAgICBpZiB1cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgaWYgYW55KGZldGNoZXIubG9jYWxwYXRoKHVybCkuc3RhcnRzd2l0aChtcCArICIvIikgZm9yIG1wIGluIG1hY2hpbmVwYXRocyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworb2Vfc29pbnN0YWxsKCkgeworCSMgUHVycG9zZTogSW5zdGFsbCBzaGFyZWQgbGlicmFyeSBmaWxlIGFuZAorCSMgICAgICAgICAgY3JlYXRlIHRoZSBuZWNlc3NhcnkgbGlua3MKKwkjIEV4YW1wbGU6CisJIworCSMgb2VfCisJIworCSNiYm5vdGUgaW5zdGFsbGluZyBzaGFyZWQgbGlicmFyeSAkMSB0byAkMgorCSMKKwlsaWJuYW1lPWBiYXNlbmFtZSAkMWAKKwlpbnN0YWxsIC1tIDc1NSAkMSAkMi8kbGlibmFtZQorCXNvbmFtZWxpbms9YCR7SE9TVF9QUkVGSVh9cmVhZGVsZiAtZCAkMSB8Z3JlcCAnTGlicmFyeSBzb25hbWU6JyB8c2VkIC1lICdzLy4qXFtcKC4qXClcXS4qL1wxLydgCisJc29saW5rPWBlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL1wuc29cLi4qLy5zby8nYAorCWxuIC1zZiAkbGlibmFtZSAkMi8kc29uYW1lbGluaworCWxuIC1zZiAkbGlibmFtZSAkMi8kc29saW5rCit9CisKK29lX2xpYmluc3RhbGwoKSB7CisJIyBQdXJwb3NlOiBJbnN0YWxsIGEgbGlicmFyeSwgaW4gYWxsIGl0cyBmb3JtcworCSMgRXhhbXBsZQorCSMKKwkjIG9lX2xpYmluc3RhbGwgbGlibHRkbCAke1NUQUdJTkdfTElCRElSfS8KKwkjIG9lX2xpYmluc3RhbGwgLUMgc3JjL2xpYmJsYWggbGliYmxhaCAke0R9LyR7bGliZGlyfS8KKwlkaXI9IiIKKwlsaWJ0b29sPSIiCisJc2lsZW50PSIiCisJcmVxdWlyZV9zdGF0aWM9IiIKKwlyZXF1aXJlX3NoYXJlZD0iIgorCXN0YWdpbmdfaW5zdGFsbD0iIgorCXdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworCQljYXNlICIkMSIgaW4KKwkJLUMpCisJCQlzaGlmdAorCQkJZGlyPSIkMSIKKwkJCTs7CisJCS1zKQorCQkJc2lsZW50PTEKKwkJCTs7CisJCS1hKQorCQkJcmVxdWlyZV9zdGF0aWM9MQorCQkJOzsKKwkJLXNvKQorCQkJcmVxdWlyZV9zaGFyZWQ9MQorCQkJOzsKKwkJLSopCisJCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiB1bmtub3duIG9wdGlvbjogJDEiCisJCQk7OworCQkqKQorCQkJYnJlYWs7CisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJbGlibmFtZT0iJDEiCisJc2hpZnQKKwlkZXN0cGF0aD0iJDEiCisJaWYgWyAteiAiJGRlc3RwYXRoIiBdOyB0aGVuCisJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IG5vIGRlc3RpbmF0aW9uIHBhdGggc3BlY2lmaWVkIgorCWZpCisJaWYgZWNobyAiJGRlc3RwYXRoLyIgfCBlZ3JlcCAnXiR7U1RBR0lOR19MSUJESVJ9LycgPi9kZXYvbnVsbAorCXRoZW4KKwkJc3RhZ2luZ19pbnN0YWxsPTEKKwlmaQorCisJX19ydW5jbWQgKCkgeworCQlpZiBbIC16ICIkc2lsZW50IiBdOyB0aGVuCisJCQllY2hvID4mMiAib2VfbGliaW5zdGFsbDogJCoiCisJCWZpCisJCSQqCisJfQorCisJaWYgWyAteiAiJGRpciIgXTsgdGhlbgorCQlkaXI9YHB3ZGAKKwlmaQorCisJZG90bGFpPSRsaWJuYW1lLmxhaQorCisJIyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgbGlibmFtZS5sYWkgaXMgdW5pcXVlCisJbnVtYmVyX29mX2ZpbGVzPWAoY2QgJGRpcjsgZmluZCAuIC1uYW1lICIkZG90bGFpIikgfCB3YyAtbGAKKwlpZiBbICRudW1iZXJfb2ZfZmlsZXMgLWd0IDEgXTsgdGhlbgorCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiAkZG90bGFpIGlzIG5vdCB1bmlxdWUgaW4gJGRpciIKKwlmaQorCisKKwlkaXI9JGRpcmAoY2QgJGRpcjtmaW5kIC4gLW5hbWUgIiRkb3RsYWkiKSB8IHNlZCAicy9eXC4vLztzL1wvJGRvdGxhaVwkLy87cSJgCisJb2xkZGlyPWBwd2RgCisJX19ydW5jbWQgY2QgJGRpcgorCisJbGFmaWxlPSRsaWJuYW1lLmxhCisKKwkjIElmIHN1Y2ggZmlsZSBkb2Vzbid0IGV4aXN0LCB0cnkgdG8gY3V0IHZlcnNpb24gc3VmZml4CisJaWYgWyAhIC1mICIkbGFmaWxlIiBdOyB0aGVuCisJCWxpYm5hbWUxPWBlY2hvICIkbGlibmFtZSIgfCBzZWQgJ3MvLVswLTkuXSokLy8nYAorCQlsYWZpbGUxPSRsaWJuYW1lLmxhCisJCWlmIFsgLWYgIiRsYWZpbGUxIiBdOyB0aGVuCisJCQlsaWJuYW1lPSRsaWJuYW1lMQorCQkJbGFmaWxlPSRsYWZpbGUxCisJCWZpCisJZmkKKworCWlmIFsgLWYgIiRsYWZpbGUiIF07IHRoZW4KKwkJIyBsaWJ0b29sIGFyY2hpdmUKKwkJZXZhbCBgY2F0ICRsYWZpbGV8Z3JlcCAiXmxpYnJhcnlfbmFtZXM9ImAKKwkJbGlidG9vbD0xCisJZWxzZQorCQlsaWJyYXJ5X25hbWVzPSIkbGlibmFtZS5zbyogJGxpYm5hbWUuZGxsLmEgJGxpYm5hbWUuKi5keWxpYiIKKwlmaQorCisJX19ydW5jbWQgaW5zdGFsbCAtZCAkZGVzdHBhdGgvCisJZG90YT0kbGlibmFtZS5hCisJaWYgWyAtZiAiJGRvdGEiIC1vIC1uICIkcmVxdWlyZV9zdGF0aWMiIF07IHRoZW4KKwkJcm0gLWYgJGRlc3RwYXRoLyRkb3RhCisJCV9fcnVuY21kIGluc3RhbGwgLW0gMDY0NCAkZG90YSAkZGVzdHBhdGgvCisJZmkKKwlpZiBbIC1mICIkZG90bGFpIiAtYSAtbiAiJGxpYnRvb2wiIF07IHRoZW4KKwkJcm0gLWYgJGRlc3RwYXRoLyRsaWJuYW1lLmxhCisJCV9fcnVuY21kIGluc3RhbGwgLW0gMDY0NCAkZG90bGFpICRkZXN0cGF0aC8kbGlibmFtZS5sYQorCWZpCisKKwlmb3IgbmFtZSBpbiAkbGlicmFyeV9uYW1lczsgZG8KKwkJZmlsZXM9YGV2YWwgZWNobyAkbmFtZWAKKwkJZm9yIGYgaW4gJGZpbGVzOyBkbworCQkJaWYgWyAhIC1lICIkZiIgXTsgdGhlbgorCQkJCWlmIFsgLW4gIiRsaWJ0b29sIiBdOyB0aGVuCisJCQkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6ICRkaXIvJGYgbm90IGZvdW5kLiIKKwkJCQlmaQorCQkJZWxpZiBbIC1MICIkZiIgXTsgdGhlbgorCQkJCV9fcnVuY21kIGNwIC1QICIkZiIgJGRlc3RwYXRoLworCQkJZWxpZiBbICEgLUwgIiRmIiBdOyB0aGVuCisJCQkJbGliZmlsZT0iJGYiCisJCQkJcm0gLWYgJGRlc3RwYXRoLyRsaWJmaWxlCisJCQkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNzU1ICRsaWJmaWxlICRkZXN0cGF0aC8KKwkJCWZpCisJCWRvbmUKKwlkb25lCisKKwlpZiBbIC16ICIkbGliZmlsZSIgXTsgdGhlbgorCQlpZiAgWyAtbiAiJHJlcXVpcmVfc2hhcmVkIiBdOyB0aGVuCisJCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiB1bmFibGUgdG8gbG9jYXRlIHNoYXJlZCBsaWJyYXJ5IgorCQlmaQorCWVsaWYgWyAteiAiJGxpYnRvb2wiIF07IHRoZW4KKwkJIyBzcGVjaWFsIGNhc2UgaGFjayBmb3Igbm9uLWxpYnRvb2wgLnNvLiMuIy4jIGxpbmtzCisJCWJhc2VsaWJmaWxlPWBiYXNlbmFtZSAiJGxpYmZpbGUiYAorCQlpZiAoZWNobyAkYmFzZWxpYmZpbGUgfCBncmVwIC1xRSAnXmxpYi4qXC5zb1wuWzAtOS5dKiQnKTsgdGhlbgorCQkJc29uYW1lbGluaz1gJHtIT1NUX1BSRUZJWH1yZWFkZWxmIC1kICRsaWJmaWxlIHxncmVwICdMaWJyYXJ5IHNvbmFtZTonIHxzZWQgLWUgJ3MvLipcW1woLipcKVxdLiovXDEvJ2AKKwkJCXNvbGluaz1gZWNobyAkYmFzZWxpYmZpbGUgfCBzZWQgLWUgJ3MvXC5zb1wuLiovLnNvLydgCisJCQlpZiBbIC1uICIkc29uYW1lbGluayIgLWEgeCIkYmFzZWxpYmZpbGUiICE9IHgiJHNvbmFtZWxpbmsiIF07IHRoZW4KKwkJCQlfX3J1bmNtZCBsbiAtc2YgJGJhc2VsaWJmaWxlICRkZXN0cGF0aC8kc29uYW1lbGluaworCQkJZmkKKwkJCV9fcnVuY21kIGxuIC1zZiAkYmFzZWxpYmZpbGUgJGRlc3RwYXRoLyRzb2xpbmsKKwkJZmkKKwlmaQorCisJX19ydW5jbWQgY2QgIiRvbGRkaXIiCit9CisKK29lX21hY2hpbnN0YWxsKCkgeworCSMgUHVycG9zZTogSW5zdGFsbCBtYWNoaW5lIGRlcGVuZGVudCBmaWxlcywgaWYgYXZhaWxhYmxlCisJIyAgICAgICAgICBJZiBub3QgYXZhaWxhYmxlLCBjaGVjayBpZiB0aGVyZSBpcyBhIGRlZmF1bHQKKwkjICAgICAgICAgIElmIG5vIGRlZmF1bHQsIGp1c3QgdG91Y2ggdGhlIGRlc3RpbmF0aW9uCisJIyBFeGFtcGxlOgorCSMgICAgICAgICAgICAgICAgJDEgICQyICAgJDMgICAgICAgICAkNAorCSMgb2VfbWFjaGluc3RhbGwgLW0gMDY0NCBmc3RhYiAke0R9L2V0Yy9mc3RhYgorCSMKKwkjIFRPRE86IENoZWNrIGFyZ3VtZW50IG51bWJlcj8KKwkjCisJZmlsZW5hbWU9YGJhc2VuYW1lICQzYAorCWRpcm5hbWU9YGRpcm5hbWUgJDNgCisKKwlmb3IgbyBpbiBgZWNobyAke09WRVJSSURFU30gfCB0ciAnOicgJyAnYDsgZG8KKwkJaWYgWyAtZSAkZGlybmFtZS8kby8kZmlsZW5hbWUgXTsgdGhlbgorCQkJYmJub3RlICRkaXJuYW1lLyRvLyRmaWxlbmFtZSBwcmVzZW50LCBpbnN0YWxsaW5nIHRvICQ0CisJCQlpbnN0YWxsICQxICQyICRkaXJuYW1lLyRvLyRmaWxlbmFtZSAkNAorCQkJcmV0dXJuCisJCWZpCisJZG9uZQorIwliYm5vdGUgb3ZlcnJpZGVzIHNwZWNpZmljIGZpbGUgTk9UIHByZXNlbnQsIHRyeWluZyBkZWZhdWx0PSQzLi4uCisJaWYgWyAtZSAkMyBdOyB0aGVuCisJCWJibm90ZSAkMyBwcmVzZW50LCBpbnN0YWxsaW5nIHRvICQ0CisJCWluc3RhbGwgJDEgJDIgJDMgJDQKKwllbHNlCisJCWJibm90ZSAkMyBOT1QgcHJlc2VudCwgdG91Y2hpbmcgZW1wdHkgJDQKKwkJdG91Y2ggJDQKKwlmaQorfQorCitjcmVhdGVfY21kbGluZV93cmFwcGVyICgpIHsKKwkjIENyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0IHdoZXJlIGNvbW1hbmRsaW5lIG9wdGlvbnMgYXJlIG5lZWRlZAorCSMKKwkjIFRoZXNlIGFyZSB1c2VmdWwgdG8gd29yayBhcm91bmQgcmVsb2NhdGlvbiBpc3N1ZXMsIGJ5IHBhc3NpbmcgZXh0cmEgb3B0aW9ucyAKKwkjIHRvIGEgcHJvZ3JhbQorCSMKKwkjIFVzYWdlOiBjcmVhdGVfY21kbGluZV93cmFwcGVyIEZJTEVOQU1FIDxleHRyYS1vcHRpb25zPgorCisJY21kPSQxCisJc2hpZnQKKworCWVjaG8gIkdlbmVyYXRpbmcgd3JhcHBlciBzY3JpcHQgZm9yICRjbWQiCisKKwltdiAkY21kICRjbWQucmVhbAorCWNtZG5hbWU9YGJhc2VuYW1lICRjbWRgCisJY2F0IDw8RU5EID4kY21kCisjIS9iaW4vYmFzaAorcmVhbHBhdGg9XGByZWFkbGluayAtZm4gXCQwXGAKK2V4ZWMgLWEgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZSBcYGRpcm5hbWUgXCRyZWFscGF0aFxgLyRjbWRuYW1lLnJlYWwgJEAgIlwkQCIKK0VORAorCWNobW9kICt4ICRjbWQKK30KKworY3JlYXRlX3dyYXBwZXIgKCkgeworCSMgQ3JlYXRlIGEgd3JhcHBlciBzY3JpcHQgd2hlcmUgZXh0cmEgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBuZWVkZWQKKwkjCisJIyBUaGVzZSBhcmUgdXNlZnVsIHRvIHdvcmsgYXJvdW5kIHJlbG9jYXRpb24gaXNzdWVzLCBieSBzZXR0aW5nIGVudmlyb25tZW50CisJIyB2YXJpYWJsZXMgd2hpY2ggcG9pbnQgdG8gcGF0aHMgaW4gdGhlIGZpbGVzeXN0ZW0uCisJIworCSMgVXNhZ2U6IGNyZWF0ZV93cmFwcGVyIEZJTEVOQU1FIFtbVkFSPVZBTFVFXS4uXQorCisJY21kPSQxCisJc2hpZnQKKworCWVjaG8gIkdlbmVyYXRpbmcgd3JhcHBlciBzY3JpcHQgZm9yICRjbWQiCisKKwltdiAkY21kICRjbWQucmVhbAorCWNtZG5hbWU9YGJhc2VuYW1lICRjbWRgCisJY2F0IDw8RU5EID4kY21kCisjIS9iaW4vYmFzaAorcmVhbHBhdGg9XGByZWFkbGluayAtZm4gXCQwXGAKK2V4cG9ydCAkQAorZXhlYyAtYSBcYGRpcm5hbWUgXCRyZWFscGF0aFxgLyRjbWRuYW1lIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUucmVhbCAiXCRAIgorRU5ECisJY2htb2QgK3ggJGNtZAorfQorCisjIENvcHkgZmlsZXMvZGlyZWN0b3JpZXMgZnJvbSAkMSB0byAkMiBidXQgdXNpbmcgaGFyZGxpbmtzCisjIChwcmVzZXJ2ZSBzeW1saW5rcykKK2hhcmRsaW5rZGlyICgpIHsKKwlmcm9tPSQxCisJdG89JDIKKwkoY2QgJGZyb207IGZpbmQgLiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJHRvKQorfQorCisKK2RlZiBjaGVja19hcHBfZXhpc3RzKGFwcCwgZCk6CisgICAgYXBwID0gZC5leHBhbmQoYXBwKQorICAgIHBhdGggPSBkLmdldFZhcignUEFUSCcsIGQsIFRydWUpCisgICAgcmV0dXJuIGJvb2woYmIudXRpbHMud2hpY2gocGF0aCwgYXBwKSkKKworZGVmIGV4cGxvZGVfZGVwcyhzKToKKyAgICByZXR1cm4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHMpCisKK2RlZiBiYXNlX3NldF9maWxlc3BhdGgocGF0aCwgZCk6CisgICAgZmlsZXNwYXRoID0gW10KKyAgICBleHRyYXBhdGhzID0gKGQuZ2V0VmFyKCJGSUxFU0VYVFJBUEFUSFMiLCBUcnVlKSBvciAiIikKKyAgICAjIFJlbW92ZSBkZWZhdWx0IGZsYWcgd2hpY2ggd2FzIHVzZWQgZm9yIGNoZWNraW5nCisgICAgZXh0cmFwYXRocyA9IGV4dHJhcGF0aHMucmVwbGFjZSgiX19kZWZhdWx0OiIsICIiKQorICAgICMgRG9uJ3QgcHJlcGVuZCBlbXB0eSBzdHJpbmdzIHRvIHRoZSBwYXRoIGxpc3QKKyAgICBpZiBleHRyYXBhdGhzICE9ICIiOgorICAgICAgICBwYXRoID0gZXh0cmFwYXRocy5zcGxpdCgiOiIpICsgcGF0aAorICAgICMgVGhlICI6IiBlbnN1cmVzIHdlIGhhdmUgYW4gJ2VtcHR5JyBvdmVycmlkZQorICAgIG92ZXJyaWRlcyA9ICgiOiIgKyAoZC5nZXRWYXIoIkZJTEVTT1ZFUlJJREVTIiwgVHJ1ZSkgb3IgIiIpKS5zcGxpdCgiOiIpCisgICAgb3ZlcnJpZGVzLnJldmVyc2UoKQorICAgIGZvciBvIGluIG92ZXJyaWRlczoKKyAgICAgICAgZm9yIHAgaW4gcGF0aDoKKyAgICAgICAgICAgIGlmIHAgIT0gIiI6IAorICAgICAgICAgICAgICAgIGZpbGVzcGF0aC5hcHBlbmQob3MucGF0aC5qb2luKHAsIG8pKQorICAgIHJldHVybiAiOiIuam9pbihmaWxlc3BhdGgpCisKK2RlZiBleHRlbmRfdmFyaWFudHMoZCwgdmFyLCBleHRlbmQsIGRlbGltPSc6Jyk6CisgICAgIiIiUmV0dXJuIGEgc3RyaW5nIG9mIGFsbCBiYiBjbGFzcyBleHRlbmQgdmFyaWFudHMgZm9yIHRoZSBnaXZlbiBleHRlbmQiIiIKKyAgICB2YXJpYW50cyA9IFtdCisgICAgd2hvbGUgPSBkLmdldFZhcih2YXIsIFRydWUpIG9yICIiCisgICAgZm9yIGV4dCBpbiB3aG9sZS5zcGxpdCgpOgorICAgICAgICBlZXh0ID0gZXh0LnNwbGl0KGRlbGltKQorICAgICAgICBpZiBsZW4oZWV4dCkgPiAxIGFuZCBlZXh0WzBdID09IGV4dGVuZDoKKyAgICAgICAgICAgIHZhcmlhbnRzLmFwcGVuZChlZXh0WzFdKQorICAgIHJldHVybiAiICIuam9pbih2YXJpYW50cykKKworZGVmIG11bHRpbGliX3BrZ19leHRlbmQoZCwgcGtnKToKKyAgICB2YXJpYW50cyA9IChkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIG5vdCB2YXJpYW50czoKKyAgICAgICAgcmV0dXJuIHBrZworICAgIHBrZ3MgPSBwa2cKKyAgICBmb3IgdiBpbiB2YXJpYW50czoKKyAgICAgICAgcGtncyA9IHBrZ3MgKyAiICIgKyB2ICsgIi0iICsgcGtnCisgICAgcmV0dXJuIHBrZ3MKKworZGVmIGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCB2YXIsIHVuaXF1ZSA9IFRydWUsIG5lZWRfc3BsaXQgPSBUcnVlLCBkZWxpbSA9ICcgJyk6CisgICAgIiIiUmV0dXJuIGEgc3RyaW5nIG9mIGFsbCAke3Zhcn0gaW4gYWxsIG11bHRpbGliIHR1bmUgY29uZmlndXJhdGlvbiIiIgorICAgIHZhbHVlcyA9IFtdCisgICAgdmFsdWUgPSBkLmdldFZhcih2YXIsIFRydWUpIG9yICIiCisgICAgaWYgdmFsdWUgIT0gIiI6CisgICAgICAgIGlmIG5lZWRfc3BsaXQ6CisgICAgICAgICAgICBmb3IgaXRlbSBpbiB2YWx1ZS5zcGxpdChkZWxpbSk6CisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChpdGVtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKyAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCisgICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgdmFsdWUgPSBsb2NhbGRhdGEuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgdmFsdWUgIT0gIiI6CisgICAgICAgICAgICBpZiBuZWVkX3NwbGl0OgorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIHZhbHVlLnNwbGl0KGRlbGltKToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgIGlmIHVuaXF1ZToKKyAgICAgICAgI3dlIGRvIHRoaXMgdG8ga2VlcCBvcmRlciBhcyBtdWNoIGFzIHBvc3NpYmxlCisgICAgICAgIHJldCA9IFtdCisgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBpZiBub3QgdmFsdWUgaW4gcmV0OgorICAgICAgICAgICAgICAgIHJldC5hcHBlbmQodmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0ID0gdmFsdWVzCisgICAgcmV0dXJuICIgIi5qb2luKHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3ZhbGEuYmJjbGFzcyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3ZhbGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmY2NjRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvdmFsYS5iYmNsYXNzCkBAIC0wLDAgKzEsMTggQEAKKyMgRXZlcnlvbmUgbmVlZHMgdmFsYS1uYXRpdmUgYW5kIHRhcmdldHMgbmVlZCB2YWxhLCB0b28sCisjIGJlY2F1c2UgdGhhdCBpcyB3aGVyZSB0YXJnZXQgYnVpbGRzIGxvb2sgZm9yIC52YXBpIGZpbGVzLgorIworVkFMQURFUEVORFMgPSAiIgorVkFMQURFUEVORFNfY2xhc3MtdGFyZ2V0ID0gInZhbGEiCitERVBFTkRTX2FwcGVuZCA9ICIgdmFsYS1uYXRpdmUgJHtWQUxBREVQRU5EU30iCisKKyMgT3VyIHBhdGNoZWQgdmVyc2lvbiBvZiBWYWxhIGxvb2tzIGluIFNUQUdJTkdfREFUQURJUiBmb3IgLnZhcGkgZmlsZXMKK2V4cG9ydCBTVEFHSU5HX0RBVEFESVIKKyMgVXBzdHJlYW0gVmFsYSA+PSAwLjExIGxvb2tzIGluIFhER19EQVRBX0RJUlMgZm9yIC52YXBpIGZpbGVzCitleHBvcnQgWERHX0RBVEFfRElSUyA9ICIke1NUQUdJTkdfREFUQURJUn0iCisKKyMgUGFja2FnZSBhZGRpdGlvbmFsIGZpbGVzCitGSUxFU18ke1BOfS1kZXYgKz0gIlwKKyAgICAke2RhdGFkaXJ9L3ZhbGEvdmFwaS8qLnZhcGkgXAorICAgICR7ZGF0YWRpcn0vdmFsYS92YXBpLyouZGVwcyBcCisgICAgJHtkYXRhZGlyfS9naXItMS4wIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3dhZi5iYmNsYXNzIGIveW9jdG8tcG9reS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMjFlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jbGFzc2VzL3dhZi5iYmNsYXNzCkBAIC0wLDAgKzEsMTMgQEAKK3dhZl9kb19jb25maWd1cmUoKSB7CisJJHtTfS93YWYgY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAke0VYVFJBX09FQ09ORn0KK30KKword2FmX2RvX2NvbXBpbGUoKSAgeworCSR7U30vd2FmIGJ1aWxkICR7UEFSQUxMRUxfTUFLRX0KK30KKword2FmX2RvX2luc3RhbGwoKSB7CisJJHtTfS93YWYgaW5zdGFsbCAtLWRlc3RkaXI9JHtEfQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2FiaV92ZXJzaW9uLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9hYmlfdmVyc2lvbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Mjk2ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9hYmlfdmVyc2lvbi5jb25mCkBAIC0wLDAgKzEsNyBAQAorIworIyBPRUxBWU9VVF9BQkkgYWxsb3dzIHVzIHRvIG5vdGlmeSB1c2VycyB3aGVuIHRoZSBmb3JtYXQgb2YgVE1QRElSIGNoYW5nZXMgaW4gCisjIGFuIGluY29tcGF0aWJsZSB3YXkuIFN1Y2ggY2hhbmdlcyBzaG91bGQgdXN1YWxseSBiZSBkZXRhaWxlZCBpbiB0aGUgY29tbWl0CisjIHRoYXQgYnJlYWtzIHRoZSBmb3JtYXQgYW5kIGhhdmUgYmVlbiBwcmV2aW91c2x5IGRpc2N1c3NlZCBvbiB0aGUgbWFpbGluZyBsaXN0IAorIyB3aXRoIGdlbmVyYWwgYWdyZWVtZW50IGZyb20gdGhlIGNvcmUgdGVhbS4KKyMKK09FTEFZT1VUX0FCSSA9ICIxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2JpdGJha2UuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2JpdGJha2UuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGE2NmY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvYml0YmFrZS5jb25mCkBAIC0wLDAgKzEsODEyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3RhbmRhcmQgdGFyZ2V0IGZpbGVzeXN0ZW0gcGF0aHMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgSWYgY2hhbmdpbmcgdGhlc2UgdmFsdWVzLCBiZXdhcmUgdGhhdCBuYXRpdmUvY3Jvc3MvbmF0aXZlc2RrIGJiY2xhc3MKKyMgZmlsZXMgbWF5IGFsc28gbmVlZCBjaGFuZ2VzIHRvIGtlZXAgaW4gc3luYy4KKyMKKworIyBVc2VkIGJ5IG11bHRpbGliIGNvZGUgdG8gY2hhbmdlIHRoZSBsaWJyYXJ5IHBhdGhzCitiYXNlbGliID0gIiR7QkFTRUxJQn0iCitiYXNlbGliW3ZhcmRlcHZhbHVlXSA9ICIke2Jhc2VsaWJ9IgorQkFTRUxJQiA9ICJsaWIiCitCQVNFTElCX3Bvd2VycGM2NCA9ICJsaWI2NCIKKworIyBQYXRoIHByZWZpeGVzCitleHBvcnQgYmFzZV9wcmVmaXggPSAiIgorZXhwb3J0IHByZWZpeCA9ICIvdXNyIgorZXhwb3J0IGV4ZWNfcHJlZml4ID0gIi91c3IiCisKKyMgQmFzZSBwYXRocworZXhwb3J0IGJhc2VfYmluZGlyID0gIiR7YmFzZV9wcmVmaXh9L2JpbiIKK2V4cG9ydCBiYXNlX3NiaW5kaXIgPSAiJHtiYXNlX3ByZWZpeH0vc2JpbiIKK2V4cG9ydCBiYXNlX2xpYmRpciA9ICIke2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9IgorZXhwb3J0IG5vbmFyY2hfYmFzZV9saWJkaXIgPSAiJHtiYXNlX3ByZWZpeH0vbGliIgorCisjIEFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCBwYXRocworZXhwb3J0IHN5c2NvbmZkaXIgPSAiJHtiYXNlX3ByZWZpeH0vZXRjIgorZXhwb3J0IHNlcnZpY2VkaXIgPSAiJHtiYXNlX3ByZWZpeH0vc3J2IgorZXhwb3J0IHNoYXJlZHN0YXRlZGlyID0gIiR7YmFzZV9wcmVmaXh9L2NvbSIKK2V4cG9ydCBsb2NhbHN0YXRlZGlyID0gIiR7YmFzZV9wcmVmaXh9L3ZhciIKK2V4cG9ydCBkYXRhZGlyID0gIiR7cHJlZml4fS9zaGFyZSIKK2V4cG9ydCBpbmZvZGlyID0gIiR7ZGF0YWRpcn0vaW5mbyIKK2V4cG9ydCBtYW5kaXIgPSAiJHtkYXRhZGlyfS9tYW4iCitleHBvcnQgZG9jZGlyID0gIiR7ZGF0YWRpcn0vZG9jIgorZXhwb3J0IHN5c3RlbWRfdW5pdGRpciA9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3N5c3RlbWQiCitleHBvcnQgc3lzdGVtZF9zeXN0ZW1fdW5pdGRpciA9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3N5c3RlbWQvc3lzdGVtIgorZXhwb3J0IG5vbmFyY2hfbGliZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYiIKK2V4cG9ydCBzeXN0ZW1kX3VzZXJfdW5pdGRpciA9ICIke25vbmFyY2hfbGliZGlyfS9zeXN0ZW1kL3VzZXIiCisKKyMgQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBwYXRocworZXhwb3J0IGJpbmRpciA9ICIke2V4ZWNfcHJlZml4fS9iaW4iCitleHBvcnQgc2JpbmRpciA9ICIke2V4ZWNfcHJlZml4fS9zYmluIgorZXhwb3J0IGxpYmRpciA9ICIke2V4ZWNfcHJlZml4fS8ke2Jhc2VsaWJ9IgorZXhwb3J0IGxpYmV4ZWNkaXIgPSAiJHtsaWJkaXJ9LyR7QlBOfSIKK2V4cG9ydCBpbmNsdWRlZGlyID0gIiR7ZXhlY19wcmVmaXh9L2luY2x1ZGUiCitleHBvcnQgb2xkaW5jbHVkZWRpciA9ICIke2V4ZWNfcHJlZml4fS9pbmNsdWRlIgorbG9jYWxlZGlyID0gIiR7bGliZGlyfS9sb2NhbGUiCisKKyMgTGlua2FnZSBiZXR3ZWVuIG5hdGl2ZS9jcm9zcy9uYXRpdmVzZGsgbGF5b3V0cworYmFzZV9iaW5kaXJfbmF0aXZlID0gIi9iaW4iCitiYXNlX3NiaW5kaXJfbmF0aXZlID0gIi9zYmluIgorc3lzY29uZmRpcl9uYXRpdmUgPSAiL2V0YyIKK3ByZWZpeF9uYXRpdmUgPSAiL3VzciIKK2JpbmRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9iaW4iCitzYmluZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L3NiaW4iCitpbmNsdWRlZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L2luY2x1ZGUiCitsaWJkaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vbGliIgorbGliZXhlY2Rpcl9uYXRpdmUgPSAiJHtsaWJkaXJfbmF0aXZlfS8ke0JQTn0iCitiYXNlX2xpYmRpcl9uYXRpdmUgPSAiL2xpYiIKK2RhdGFkaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vc2hhcmUiCitiaW5kaXJfY3Jvc3MgPSAiL2JpbiIKK2JpbmRpcl9jcm9zc3NjcmlwdHMgPSAiJHtiaW5kaXJ9L2Nyb3Nzc2NyaXB0cyIKK3ByZWZpeF9uYXRpdmVzZGsgPSAiL3VzciIKK2JpbmRpcl9uYXRpdmVzZGsgPSAiJHtwcmVmaXhfbmF0aXZlc2RrfS9iaW4iCitpbmNsdWRlZGlyX25hdGl2ZXNkayA9ICIke3ByZWZpeF9uYXRpdmVzZGt9L2luY2x1ZGUiCitsaWJkaXJfbmF0aXZlc2RrID0gIiR7cHJlZml4X25hdGl2ZXNka30vbGliIgorYmFzZV9saWJkaXJfbmF0aXZlc2RrID0gIi9saWIiCitsb2NhbHN0YXRlZGlyX25hdGl2ZXNkayA9ICIvdmFyIgorCisjCisjIENyb3NzIHJlY2lwZXMgbmVlZCB0byBrbm93IGFib3V0IHRoZSB0YXJnZXQgbGF5b3V0CisjIDo9IGlzIHVzZWQgY2FyZWZ1bGx5IGhlcmUKKyMKK3RhcmdldF9kYXRhZGlyIDo9ICIke2RhdGFkaXJ9IgorIyBVc2VkIHRvIGZpbmQgZW52L3BlcmwvcHl0aG9uCitVU1JCSU5QQVRIID0gIiR7YmluZGlyfSIKK1VTUkJJTlBBVEhfY2xhc3MtbmF0aXZlID0gIi91c3IvYmluIgorVVNSQklOUEFUSF9jbGFzcy1uYXRpdmVzZGsgPSAiL3Vzci9iaW4iCisKKyMgUm9vdCBob21lIGRpcmVjdG9yeQorUk9PVF9IT01FID8/PSAiL2hvbWUvcm9vdCIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYnVpbGQgdmFyaWFibGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgSW1tZWRpYXRlIGV4cGFuc2lvbiBzaW5jZSB0aGVyZSBpcyBubyBwb2ludCBpbiByZWFwZWF0ZWRseSBjYWxsaW5nCisjIG9zLnVuYW1lKCkgdGhyb3VnaG91dCBwYXJzaW5nCitCVUlMRF9BUkNIIDo9ICIke0Bvcy51bmFtZSgpWzRdfSIKK0JVSUxEX09TIDo9ICIke0Bvcy51bmFtZSgpWzBdLmxvd2VyKCl9IgorQlVJTERfVkVORE9SID0gIiIKK0JVSUxEX1NZUyA9ICIke0JVSUxEX0FSQ0h9JHtCVUlMRF9WRU5ET1J9LSR7QlVJTERfT1N9IgorQlVJTERfUFJFRklYID0gIiIKK0JVSUxEX0NDX0FSQ0ggPSAiIgorQlVJTERfTERfQVJDSCA9ICIiCitCVUlMRF9BU19BUkNIID0gIiIKK0JVSUxEX0VYRUVYVCA9ICIiCisKK0hPU1RfQVJDSCA9ICIke1RBUkdFVF9BUkNIfSIKK0hPU1RfT1MgPSAiJHtUQVJHRVRfT1N9IgorSE9TVF9WRU5ET1IgPSAiJHtUQVJHRVRfVkVORE9SfSIKK0hPU1RfU1lTID0gIiR7SE9TVF9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCitIT1NUX1BSRUZJWCA9ICIke1RBUkdFVF9QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7VEFSR0VUX0NDX0FSQ0h9IgorSE9TVF9MRF9BUkNIID0gIiR7VEFSR0VUX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7VEFSR0VUX0FTX0FSQ0h9IgorSE9TVF9FWEVFWFQgPSAiIgorCitUVU5FX0FSQ0ggPz89ICJJTlZBTElEIgorVFVORV9DQ0FSR1MgPz89ICIiCitUVU5FX0NDQVJHU1t2YXJkZXB2YWx1ZV0gPSAiJHtUVU5FX0NDQVJHU30iCitUVU5FX0xEQVJHUyA/Pz0gIiIKK1RVTkVfQVNBUkdTID8/PSAiIgorVFVORV9GRUFUVVJFUyA/Pz0gIiR7VFVORV9GRUFUVVJFU190dW5lLSR7REVGQVVMVFRVTkV9fSIKK0xJQkNFWFRFTlNJT04gPz89ICIiCitBQklFWFRFTlNJT04gPz89ICIiCitVU0VfTkxTID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZS1jb2RlJywgJ3llcycsICdubycsIGQpfSIKK1NES1VTRV9OTFMgPz89ICJ5ZXMiCisKK1RBUkdFVF9BUkNIID0gIiR7VFVORV9BUkNIfSIKK1RBUkdFVF9PUyA9ICJsaW51eCR7TElCQ0VYVEVOU0lPTn0ke0FCSUVYVEVOU0lPTn0iCitUQVJHRVRfVkVORE9SID0gIi1vZSIKK1RBUkdFVF9TWVMgPSAiJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9JHtAWyctJyArIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSwgJyddW2QuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSA9PSAoJycgb3IgJ2N1c3RvbScpXX0iCitUQVJHRVRfUFJFRklYID0gIiR7VEFSR0VUX1NZU30tIgorVEFSR0VUX0NDX0FSQ0ggPSAiJHtUVU5FX0NDQVJHU30iCitUQVJHRVRfTERfQVJDSCA9ICIke1RVTkVfTERBUkdTfSIKK1RBUkdFVF9BU19BUkNIID0gIiR7VFVORV9BU0FSR1N9IgorCitTREtfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorU0RLX09TID0gIiR7QlVJTERfT1N9IgorU0RLX1ZFTkRPUiA9ICItb2VzZGsiCitTREtfU1lTID0gIiR7U0RLX0FSQ0h9JHtTREtfVkVORE9SfSR7QFsnLScgKyBkLmdldFZhcignU0RLX09TJywgVHJ1ZSksICcnXVtkLmdldFZhcignU0RLX09TJywgVHJ1ZSkgPT0gKCcnIG9yICdjdXN0b20nKV19IgorU0RLX1BSRUZJWCA9ICIke1NES19TWVN9LSIKK1NES19DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitTREtQS0dTVUZGSVggPSAibmF0aXZlc2RrIgorU0RLX1BBQ0tBR0VfQVJDSFMgPSAiYWxsIGFueSBub2FyY2ggJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IgorU0RLX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKK1NES19BU19BUkNIID0gIiR7QlVJTERfQVNfQVJDSH0iCisKK1RVTkVfUEtHQVJDSCA/Pz0gIiIKK1BBQ0tBR0VfQVJDSCA/Pz0gIiR7VFVORV9QS0dBUkNIfSIKK01BQ0hJTkVfQVJDSCA9ICIke0BbZC5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpLCBkLmdldFZhcignTUFDSElORScsIFRydWUpXVtib29sKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXS5yZXBsYWNlKCctJywgJ18nKX0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTID8/PSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtJHtERUZBVUxUVFVORX19IgorUEFDS0FHRV9BUkNIUyA9ICJhbGwgYW55IG5vYXJjaCAke1BBQ0tBR0VfRVhUUkFfQVJDSFN9ICR7TUFDSElORV9BUkNIfSIKKyMgTUFDSElORV9BUkNIIHNob3VsZG4ndCBiZSBpbmNsdWRlZCBoZXJlIGFzIGEgdmFyaWFibGUgZGVwZW5kZW5jeQorIyBzaW5jZSBtYWNoaW5lIHNwZWNpZmljIHBhY2thZ2VzIGFyZSBoYW5kbGVkIHVzaW5nIG11bHRpbWFjaGluZQorUEFDS0FHRV9BUkNIU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORV9BUkNIIgorCitNVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1BBQ0tBR0VfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK01VTFRJTUFDSF9IT1NUX1NZUyA9ICIke1BBQ0tBR0VfQVJDSH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGF0ZS90aW1lIHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitEQVRFIDo9ICIke0B0aW1lLnN0cmZ0aW1lKCclWSVtJWQnLHRpbWUuZ210aW1lKCkpfSIKK1RJTUUgOj0gIiR7QHRpbWUuc3RyZnRpbWUoJyVIJU0lUycsdGltZS5nbXRpbWUoKSl9IgorREFURVRJTUUgPSAiJHtEQVRFfSR7VElNRX0iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPcGVuZW1iZWRkZWQgU29mdHdhcmUgUHJlcmVxdWlzaXRlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHB5dGhvbi1uYXRpdmUgc2hvdWxkIGJlIGhlcmUgYnV0IHB5dGhvbiByZWxpZXMgb24gYnVpbGRpbmcKKyMgaXRzIG93biBpbiBzdGFnaW5nCitBU1NVTUVfUFJPVklERUQgPSAiXAorICAgIGJ6aXAyLW5hdGl2ZSBcCisgICAgY2hycGF0aC1uYXRpdmUgXAorICAgIGdpdC1uYXRpdmUgXAorICAgIGdyZXAtbmF0aXZlIFwKKyAgICBkaWZmc3RhdC1uYXRpdmUgXAorICAgIHBhdGNoLW5hdGl2ZSBcCisgICAgcGVybC1uYXRpdmUtcnVudGltZSBcCisgICAgcHl0aG9uLW5hdGl2ZS1ydW50aW1lIFwKKyAgICB0YXItbmF0aXZlIFwKKyAgICB2aXJ0dWFsL2xpYmludGwtbmF0aXZlIFwKKyAgICB0ZXhpbmZvLW5hdGl2ZSBcCisgICAgYmFzaC1uYXRpdmUgXAorICAgIHNlZC1uYXRpdmUgXAorICAgICIKKyMgZ3ppcC1uYXRpdmUgc2hvdWxkIGJlIGxpc3RlZCBhYm92ZT8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBhY2thZ2UgZGVmYXVsdCB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUE4gPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzBdIG9yICdkZWZhdWx0cGtnbmFtZSd9IgorUFYgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzFdIG9yICcxLjAnfSIKK1BSID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsyXSBvciAncjAnfSIKK1BGID0gIiR7UE59LSR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCitFWFRFTkRQRSA9ICIke0BbJycsJyR7UEVceDdkXyddW2ludChkLmdldFZhcignUEUnLCBUcnVlKSBvciAwKSA+IDBdfSIKK1AgPSAiJHtQTn0tJHtQVn0iCisKK0VYVEVORFBSQVVUTyA9ICIke0BbJy4ke1BSQVVUT1x4N2QnLCcnXVtkLmdldFZhcignUFJBVVRPJywgVHJ1ZSkgaXMgTm9uZV19IgorUFJBVVRPSU5YID0gIiR7UEZ9IgorCitQS0dWID89ICIke1BWfSIKK1BLR1IgPz0gIiR7UFJ9JHtFWFRFTkRQUkFVVE99IgorUEtHRSA/PSAiJHtAWycnLCcke1BFXHg3ZCddW2ludChkLmdldFZhcignUEUnLCBUcnVlKSBvciAwKSA+IDBdfSIKK0VYVEVORFBLR0VWRVIgPSAiJHtAWycnLCcke1BLR0VceDdkOiddW2QuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkuc3RyaXAoKSAhPSAnJ119IgorRVhURU5EUEtHViA/PSAiJHtFWFRFTkRQS0dFVkVSfSR7UEtHVn0tJHtQS0dSfSIKKworIyBCYXNlIHBhY2thZ2UgbmFtZQorIyBBdXRvbWF0aWNhbGx5IGRlcml2ZXMgImZvbyIgZnJvbSAiZm9vLW5hdGl2ZSIsICJmb28tY3Jvc3MiIG9yICJmb28taW5pdGlhbCIKKyMgb3RoZXJ3aXNlIGl0IGlzIHRoZSBzYW1lIGFzIFBOIGFuZCBQCitTUEVDSUFMX1BLR1NVRkZJWCA9ICItbmF0aXZlIC1jcm9zcyAtaW5pdGlhbCAtaW50ZXJtZWRpYXRlIC1jcm9zc3NkayAtY3Jvc3MtY2FuYWRpYW4iCitCUE4gPSAiJHtAYmFzZV9wcnVuZV9zdWZmaXgoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGQuZ2V0VmFyKCdTUEVDSUFMX1BLR1NVRkZJWCcsIFRydWUpLnNwbGl0KCksIGQpfSIKK0JQID0gIiR7QlBOfS0ke1BWfSIKKworIyBQYWNrYWdlIGluZm8uCisKK1NFQ1RJT04gPSAiYmFzZSIKK1BSSU9SSVRZID0gIm9wdGlvbmFsIgorU1VNTUFSWSA/PSAiJHtQTn0gdmVyc2lvbiAke1BWfS0ke1BSfSIKK0RFU0NSSVBUSU9OID89ICIke1NVTU1BUll9LiIKKworIyBUaGUgZm9sbG93aW5nIHR3byBhcmUgY29tbWVudGVkIG91dCBiZWNhdXNlIHRoZXkgcmVzdWx0IGluIGEgcmVjdXJzaXZlCisjIGRlZmluaXRpb24gb2YgdGhlIHZhcmlhYmxlIGluIHNvbWUgY29ybmVyIGNhc2VzLiAgVGhlc2UgYXJlIGxlZnQgaW4KKyMgdG8gaWxsdXN0cmF0ZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuCisjU1VNTUFSWV8ke1BOfSA/PSAiJHtTVU1NQVJZfSIKKyNERVNDUklQVElPTl8ke1BOfSA/PSAiJHtERVNDUklQVElPTn0iCisKK1NVTU1BUllfJHtQTn0tZGJnID89ICIke1NVTU1BUll9IC0gRGVidWdnaW5nIGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tZGJnID89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIEVMRiBzeW1ib2xzIGFuZCByZWxhdGVkIHNvdXJjZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iCisKK1NVTU1BUllfJHtQTn0tZGV2ID89ICIke1NVTU1BUll9IC0gRGV2ZWxvcG1lbnQgZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1kZXYgPz0gIiR7REVTQ1JJUFRJT059ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgc3ltYm9saWMgbGlua3MsIGhlYWRlciBmaWxlcywgYW5kIFwKK3JlbGF0ZWQgaXRlbXMgbmVjZXNzYXJ5IGZvciBzb2Z0d2FyZSBkZXZlbG9wbWVudC4iCisKK1NVTU1BUllfJHtQTn0tc3RhdGljZGV2ID89ICIke1NVTU1BUll9IC0gRGV2ZWxvcG1lbnQgZmlsZXMgKFN0YXRpYyBMaWJyYXJpZXMpIgorREVTQ1JJUFRJT05fJHtQTn0tc3RhdGljZGV2Pz0gIiR7REVTQ1JJUFRJT059ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgc3RhdGljIGxpYnJhcmllcyBmb3Igc29mdHdhcmUgZGV2ZWxvcG1lbnQuIgorCitTVU1NQVJZXyR7UE59LWRvYyA/PSAiJHtTVU1NQVJZfSAtIERvY3VtZW50YXRpb24gZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1kb2MgPz0gIiR7REVTQ1JJUFRJT059ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgZG9jdW1lbnRhdGlvbi4iCisKK0xJQ0VOU0UgPSAiSU5WQUxJRCIKK01BSU5UQUlORVIgPSAiT0UtQ29yZSBEZXZlbG9wZXJzIDxvcGVuZW1iZWRkZWQtY29yZUBsaXN0cy5vcGVuZW1iZWRkZWQub3JnPiIKK0hPTUVQQUdFID0gIiIKKworIyBQYWNrYWdlIGRlcGVuZGVuY2llcyBhbmQgcHJvdmlkZXMuCisKKyMgRW5zdXJlIHRoYXQgLWRldiBwYWNrYWdlcyByZWNvbW1lbmQgdGhlIGNvcnJlc3BvbmRpbmcgLWRldiBwYWNrYWdlcyBvZiB0aGVpcgorIyBkZXBzLCBhbmQgdGhlIHNhbWUgZm9yIC1kYmcuCitERVBDSEFJTl9QUkUgID0gIiIKK0RFUENIQUlOX1BPU1QgPSAiLWRldiAtZGJnIgorCitERVBFTkRTID0gIiIKK1JERVBFTkRTID0gIiIKK1BST1ZJREVTID0gIiIKK1BST1ZJREVTX3ByZXBlbmQgPSAiJHtQTn0gIgorUlBST1ZJREVTID0gIiIKKworTVVMVElfUFJPVklERVJfV0hJVEVMSVNUID0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2xpYmludGwtbmF0aXZlIHZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgdmlydHVhbC94c2VydmVyIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitTT0xJQlMgPSAiLnNvLioiCitTT0xJQlNfZGFyd2luID0gIi5keWxpYiIKKworU09MSUJTREVWID0gIi5zbyIKKyMgRHVlIHRvIHRoZSBvcmRlcmluZyBvZiBQQUNLQUdFUyBhbmQgdGhlIG5hbWluZyBvZiB0aGUgZGV2IHN5bWxpbmtzIG9uIGRhcndpbiwKKyMgd2UgY2FuJ3QgbWFrZSB0aGUgc3ltbGlua3MgZW5kIHVwIGluIHRoZSAtZGV2IHBhY2thZ2VzIGVhc2lseSBhdCB0aGlzIHBvaW50LiBUaGlzIGhhY2sKKyMgYXQgbGVhc3QgbWVhbnMgYnVpbGRzIGFyZW4ndCBjb21wbGV0ZWx5IGJyb2tlbiBhbmQgc3ltbGlua3MgZG9uJ3QgdGFrZSB1cCBtdWNoIHNwYWNlLgorU09MSUJTREVWX2RhcndpbiA9ICIuZHlsaWJicm9rZW4iCisKK1BBQ0tBR0VfQkVGT1JFX1BOID89ICIiCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRldiAke1BOfS1kb2MgJHtQTn0tbG9jYWxlICR7UEFDS0FHRV9CRUZPUkVfUE59ICR7UE59IgorUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tbG9jYWxlLS4qIgorRklMRVMgPSAiIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyogJHtsaWJleGVjZGlyfS8qICR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICR7c3lzY29uZmRpcn0gJHtzaGFyZWRzdGF0ZWRpcn0gJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS8qICR7YmFzZV9zYmluZGlyfS8qIFwKKyAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9Lyoke1NPTElCU30gXAorICAgICAgICAgICAgJHtiYXNlX3ByZWZpeH0vbGliL3VkZXYvcnVsZXMuZCAke3ByZWZpeH0vbGliL3VkZXYvcnVsZXMuZCBcCisgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSAke2xpYmRpcn0vJHtCUE59LyogXAorICAgICAgICAgICAgJHtkYXRhZGlyfS9waXhtYXBzICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vaWRsICR7ZGF0YWRpcn0vb21mICR7ZGF0YWRpcn0vc291bmRzIFwKKyAgICAgICAgICAgICR7bGliZGlyfS9ib25vYm8vc2VydmVycyIKKworRklMRVNfJHtQTn0tYmluID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiIKKworRklMRVNfJHtQTn0tZG9jID0gIiR7ZG9jZGlyfSAke21hbmRpcn0gJHtpbmZvZGlyfSAke2RhdGFkaXJ9L2d0ay1kb2MgXAorICAgICAgICAgICAgJHtkYXRhZGlyfS9nbm9tZS9oZWxwIgorU0VDVElPTl8ke1BOfS1kb2MgPSAiZG9jIgorCitGSUxFU19TT0xJQlNERVYgPz0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke0ZJTEVTX1NPTElCU0RFVn0gJHtsaWJkaXJ9LyoubGEgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS8qLm8gJHtsaWJkaXJ9L3BrZ2NvbmZpZyAke2RhdGFkaXJ9L3BrZ2NvbmZpZyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hY2xvY2FsICR7YmFzZV9saWJkaXJ9LyoubyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyR7QlBOfS8qLmxhICR7YmFzZV9saWJkaXJ9LyoubGEiCitTRUNUSU9OXyR7UE59LWRldiA9ICJkZXZlbCIKK0FMTE9XX0VNUFRZXyR7UE59LWRldiA9ICIxIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiR7UE59ICg9ICR7RVhURU5EUEtHVn0pIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLmEgJHtsaWJkaXJ9LyR7QlBOfS8qLmEiCitTRUNUSU9OXyR7UE59LXN0YXRpY2RldiA9ICJkZXZlbCIKK1JERVBFTkRTXyR7UE59LXN0YXRpY2RldiA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisKK0RPVERFQlVHLWRiZyA9ICIke2JpbmRpcn0vLmRlYnVnICR7c2JpbmRpcn0vLmRlYnVnICR7bGliZXhlY2Rpcn0vLmRlYnVnICR7bGliZGlyfS8uZGVidWcgXAorICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vLmRlYnVnICR7YmFzZV9zYmluZGlyfS8uZGVidWcgJHtiYXNlX2xpYmRpcn0vLmRlYnVnICR7bGliZGlyfS8ke0JQTn0vLmRlYnVnIFwKKyAgICAgICAgICAgICR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8uZGVidWcgJHtsaWJleGVjZGlyfS8ke0JQTn0vLmRlYnVnIC91c3Ivc3JjL2RlYnVnIgorCitERUJVR0ZJTEVESVJFQ1RPUlktZGJnID0gIi91c3IvbGliL2RlYnVnIC91c3Ivc3JjL2RlYnVnIgorCitGSUxFU18ke1BOfS1kYmcgPSAiJHtAZC5nZXRWYXIoWydET1RERUJVRy1kYmcnLCAnREVCVUdGSUxFRElSRUNUT1JZLWRiZyddW2QuZ2V0VmFyKCdQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJywgVHJ1ZSkgPT0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5J10sIFRydWUpfSIKKworU0VDVElPTl8ke1BOfS1kYmcgPSAiZGV2ZWwiCitBTExPV19FTVBUWV8ke1BOfS1kYmcgPSAiMSIKKworRklMRVNfJHtQTn0tbG9jYWxlID0gIiR7ZGF0YWRpcn0vbG9jYWxlIgorCisjIEZpbGUgbWFuaWZlc3QKKworRklMRV9ESVJOQU1FID0gIiR7QG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScsIEZhbHNlKSl9IgorIyBGSUxFU1BBVEggaXMgc2V0IGluIGJhc2UuYmJjbGFzcworI0ZJTEVTUEFUSCA9ICIke0ZJTEVfRElSTkFNRX0vJHtQRn06JHtGSUxFX0RJUk5BTUV9LyR7UH06JHtGSUxFX0RJUk5BTUV9LyR7UE59OiR7RklMRV9ESVJOQU1FfS8ke0JQfToke0ZJTEVfRElSTkFNRX0vJHtCUE59OiR7RklMRV9ESVJOQU1FfS9maWxlczoke0ZJTEVfRElSTkFNRX0iCisjIFRoaXMgZGVmYXVsdCB3YXMgb25seSB1c2VkIGZvciBjaGVja2luZworRklMRVNFWFRSQVBBVEhTID89ICJfX2RlZmF1bHQ6IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2VuZXJhbCB3b3JrIGFuZCBvdXRwdXQgZGlyZWN0b3JpZXMgZm9yIHRoZSBidWlsZCBzeXN0ZW0uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVE1QRElSID89ICIke1RPUERJUn0vdG1wIgorQ0FDSEUgPSAiJHtUTVBESVJ9L2NhY2hlJHtAWycnLCAnLycgKyBzdHIoZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldW2Jvb2woZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldfSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSkpXX0iCisjIFRoZSBwZXJzaXN0ZW50IGNhY2hlIHNob3VsZCBiZSBzaGFyZWQgYnkgYWxsIGJ1aWxkcworUEVSU0lTVEVOVF9ESVIgPSAiJHtUT1BESVJ9L2NhY2hlIgorTE9HX0RJUiA9ICIke1RNUERJUn0vbG9nIgorQ09fRElSID0gIiR7RExfRElSfSIKK0NWU0RJUiA9ICIke0NPX0RJUn0vY3ZzIgorU1ZORElSID0gIiR7Q09fRElSfS9zdm4iCitHSVRESVIgPSAiJHtDT19ESVJ9L2dpdDIiCitCWlJESVIgPSAiJHtDT19ESVJ9L2J6ciIKK0hHRElSID0gIiR7Q09fRElSfS9oZyIKKworU1RBTVBTX0RJUiA/PSAiJHtUTVBESVJ9L3N0YW1wcyIKK1NUQU1QID0gIiR7U1RBTVBTX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSIKK1NUQU1QQ0xFQU4gPSAiJHtTVEFNUFNfRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8qLSoiCitCQVNFX1dPUktESVIgPz0gIiR7VE1QRElSfS93b3JrIgorV09SS0RJUiA9ICIke0JBU0VfV09SS0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSIKK1QgPSAiJHtXT1JLRElSfS90ZW1wIgorRCA9ICIke1dPUktESVJ9L2ltYWdlIgorUyA9ICIke1dPUktESVJ9LyR7QlB9IgorQiA9ICIke1N9IgorCitTVEFHSU5HX0RJUiA9ICIke1RNUERJUn0vc3lzcm9vdHMiCisKK1NUQUdJTkdfRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSfS8ke0JVSUxEX1NZU30iCitTVEFHSU5HX0JJTkRJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfSIKK1NUQUdJTkdfQklORElSX0NST1NTID0gIiR7U1RBR0lOR19CSU5ESVJ9L2Nyb3Nzc2NyaXB0cyIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitTVEFHSU5HX0xJQkRJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtsaWJkaXJfbmF0aXZlfSIKK1NUQUdJTkdfTElCRVhFQ0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtsaWJleGVjZGlyX25hdGl2ZX0iCitTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZX0iCitTVEFHSU5HX1NCSU5ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRpdmV9IgorU1RBR0lOR19JTkNESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7aW5jbHVkZWRpcl9uYXRpdmV9IgorU1RBR0lOR19FVENESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c3lzY29uZmRpcl9uYXRpdmV9IgorU1RBR0lOR19EQVRBRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfSIKKworU1RBR0lOR19ESVJfSE9TVCA9ICIke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9IgorU1RBR0lOR19CSU5ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7YmluZGlyfSIKK1NUQUdJTkdfTElCRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmRpcn0iCitTVEFHSU5HX0xJQkVYRUNESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0iCitTVEFHSU5HX0JBU0VMSUJESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7YmFzZV9saWJkaXJ9IgorU1RBR0lOR19JTkNESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7aW5jbHVkZWRpcn0iCitTVEFHSU5HX0RBVEFESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7ZGF0YWRpcn0iCitTVEFHSU5HX0VYRUNQUkVGSVhESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7ZXhlY19wcmVmaXh9IgorU1RBR0lOR19MT0FERVJfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vbG9hZGVyIgorU1RBR0lOR19GSVJNV0FSRV9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9maXJtd2FyZSIKKworU1RBR0lOR19ESVJfVEFSR0VUID0gIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0iCitTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUCA9ICIke1NUQUdJTkdfRElSX1RBUkdFVH0tdGNib290c3RyYXAiCisKKyMgU2V0dGluZyBERVBMT1lfRElSIG91dHNpZGUgb2YgVE1QRElSIGlzIGhlbHBmdWwsIHdoZW4geW91IGFyZSB1c2luZworIyBwYWNrYWdlZCBzdGFnaW5nIGFuZC9vciBtdWx0aW1hY2hpbmUuCitERVBMT1lfRElSID89ICIke1RNUERJUn0vZGVwbG95IgorREVQTE9ZX0RJUl9UQVIgPSAiJHtERVBMT1lfRElSfS90YXIiCitERVBMT1lfRElSX0lQSyA9ICIke0RFUExPWV9ESVJ9L2lwayIKK0RFUExPWV9ESVJfUlBNID0gIiR7REVQTE9ZX0RJUn0vcnBtIgorREVQTE9ZX0RJUl9ERUIgPSAiJHtERVBMT1lfRElSfS9kZWIiCitERVBMT1lfRElSX0lNQUdFID89ICIke0RFUExPWV9ESVJ9L2ltYWdlcy8ke01BQ0hJTkV9IgorREVQTE9ZX0RJUl9UT09MUyA9ICIke0RFUExPWV9ESVJ9L3Rvb2xzIgorCitQS0dEQVRBX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9L3BrZ2RhdGEiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTREsgdmFyaWFibGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NES19OQU1FX1BSRUZJWCA/PSAib2Vjb3JlIgorU0RLX05BTUUgPSAiJHtTREtfTkFNRV9QUkVGSVh9LSR7U0RLX0FSQ0h9LSR7VFVORV9QS0dBUkNIfSIKK1NES1BBVEggPSAiL3Vzci9sb2NhbC8ke1NES19OQU1FX1BSRUZJWH0tJHtTREtfQVJDSH0iCitTREtQQVRITkFUSVZFID0gIiR7U0RLUEFUSH0vc3lzcm9vdHMvJHtTREtfU1lTfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEtlcm5lbCBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK09MREVTVF9LRVJORUwgPSAiMi42LjMyIgorT0xERVNUX0tFUk5FTF9hYXJjaDY0ID0gIjMuMTQiCitTVEFHSU5HX0tFUk5FTF9ESVIgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkLyR7TUFDSElORX0va2VybmVsLXNvdXJjZSIKK1NUQUdJTkdfS0VSTkVMX0JVSUxERElSID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC8ke01BQ0hJTkV9L2tlcm5lbC1idWlsZC1hcnRpZmFjdHMiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTcGVjaWZpYyBpbWFnZSBjcmVhdGlvbiBhbmQgcm9vdGZzIHBvcHVsYXRpb24gaW5mby4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitJTUFHRV9ST09URlMgPSAiJHtXT1JLRElSfS9yb290ZnMiCitJTUFHRV9CQVNFTkFNRSA9ICIke1BOfSIKK0lNQUdFX05BTUUgPSAiJHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKK0lNQUdFX05BTUVbdmFyZGVwc2V4Y2x1ZGVdICs9ICJEQVRFVElNRSIKK0lNQUdFX0xJTktfTkFNRSA9ICIke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9IgorCisjIFRoaXMgb3B0aW9uIGFsbG93cyBmb3IgYSBwZXJjZW50YWdlIG92ZXJhZ2Ugb2YgdGhlIGFjdHVhbCBpbWFnZSBzaXplIHJhdGhlciB0aGFuIGEKKyMgZml4ZWQgZXh0cmEgc3BhY2UsIHRoaXMgaXMgc3BhY2UgbmVlZGVkIGZvciBpbml0aWFsIHN0YXJ0dXAgYW5kIGJhc2ljIG9wZXJhdGlvbnMuCitJTUFHRV9PVkVSSEVBRF9GQUNUT1IgPz0gIjEuMyIKKyMgVGhpcyBvcHRpb24gYWxsb3dzIGZvciBhZGRpbmcgYWRkaXRpb25hbCBzcGFjZSBpbiBLIGFib3ZlIGFuZCBiZXlvbmQgd2hhdCB0aGUKKyMgSU1BR0VfT1ZFUkhFQURfRkFDVE9SIG1pZ2h0IGFkZC4gVGhpcyBzcGFjZSBpcyBmb3IgYWRkaXRpb25hbCBwYWNrYWdlcywgdXNlciBkYXRhLCAuLi4KKyMgVG8gc2V0IGEgZml4ZWQgc2l6ZSB0aGVuIG92ZXJyaWRpbmcgSU1BR0VfUk9PVEZTX1NJWkUgd2l0aCB0aGUgbWF4IHNpemUgb25lIHdhbnRzCisjIHNob3VsZCBkbyB0aGUgdHJpY2sKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA/PSAiMCIKKworRVhUUkFfSU1BR0VERVBFTkRTID0gIiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRvb2xjaGFpbiBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1BBVEhfcHJlcGVuZCA9ICIke0NPUkVCQVNFfS9zY3JpcHRzOiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfToke1NUQUdJTkdfQklORElSX0NST1NTfToke1NUQUdJTkdfRElSX05BVElWRX0ke3NiaW5kaXJfbmF0aXZlfToke1NUQUdJTkdfQklORElSX05BVElWRX06JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiYXNlX3NiaW5kaXJfbmF0aXZlfToke1NUQUdJTkdfRElSX05BVElWRX0ke2Jhc2VfYmluZGlyX25hdGl2ZX06IgorZXhwb3J0IFBBVEgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHV0aWxpdHkgaW5mby4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitDQ0FDSEUgPz89ICIiCisjIERpc2FibGUgY2NhY2hlIGV4cGxpY2l0bHkgaWYgQ0NBQ0hFIGlzIG51bGwgc2luY2UgZ2NjIG1heSBiZSBhIHN5bWxpbmsKKyMgb2YgY2NhY2hlIHNvbWUgZGlzdHJpYnV0aW9ucyAoZS5nLiwgRmVkb3JhIDE3KS4KK2V4cG9ydCBDQ0FDSEVfRElTQUJMRSA/Pz0gIiR7QFswLDFdW2QuZ2V0VmFyKCdDQ0FDSEUnLCBUcnVlKSA9PSAnJ119IgorIyBBc3NpZ24gQ0NBQ0hFX0RJUiBhIGRlZmF1bHQgdmFsdWUgdG8gZml4IGEgYnVnIG9mIGNjYWNoZSAzLjEuNywKKyMgc2luY2UgaXQgd291bGQgYWx3YXlzIGNyZWF0ZSBDQ0FDSEVfRElSLy5jY2FjaGUgZXZlbiBpZgorIyBDQ0FDSEVfRElTQUJMRSA9IDEuCitleHBvcnQgQ0NBQ0hFX0RJUiA/Pz0gIiR7QG9zLmdldGVudignSE9NRScpfSIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKK2V4cG9ydCBDQyA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdjYyAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIKK2V4cG9ydCBDWFggPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nKysgJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iCitleHBvcnQgRkMgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nZm9ydHJhbiAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIKK2V4cG9ydCBDUFAgPSAiJHtIT1NUX1BSRUZJWH1nY2MgLUUke1RPT0xDSEFJTl9PUFRJT05TfSAke0hPU1RfQ0NfQVJDSH0iCitleHBvcnQgTEQgPSAiJHtIT1NUX1BSRUZJWH1sZCR7VE9PTENIQUlOX09QVElPTlN9ICR7SE9TVF9MRF9BUkNIfSIKK2V4cG9ydCBDQ0xEID0gIiR7Q0N9IgorZXhwb3J0IEFSID0gIiR7SE9TVF9QUkVGSVh9YXIiCitleHBvcnQgQVMgPSAiJHtIT1NUX1BSRUZJWH1hcyAke0hPU1RfQVNfQVJDSH0iCitleHBvcnQgUkFOTElCID0gIiR7SE9TVF9QUkVGSVh9cmFubGliIgorZXhwb3J0IFNUUklQID0gIiR7SE9TVF9QUkVGSVh9c3RyaXAiCitleHBvcnQgT0JKQ09QWSA9ICIke0hPU1RfUFJFRklYfW9iamNvcHkiCitleHBvcnQgT0JKRFVNUCA9ICIke0hPU1RfUFJFRklYfW9iamR1bXAiCitleHBvcnQgU1RSSU5HUyA9ICIke0hPU1RfUFJFRklYfXN0cmluZ3MiCitleHBvcnQgTk0gPSAiJHtIT1NUX1BSRUZJWH1ubSIKK1BZVEhPTiA9ICIke0BzeXMuZXhlY3V0YWJsZX0iCisKK2V4cG9ydCBCVUlMRF9DQyA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlMRF9DQ19BUkNIfSIKK2V4cG9ydCBCVUlMRF9DWFggPSAiJHtDQ0FDSEV9JHtCVUlMRF9QUkVGSVh9ZysrICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfRkMgPSAiJHtDQ0FDSEV9JHtCVUlMRF9QUkVGSVh9Z2ZvcnRyYW4gJHtCVUlMRF9DQ19BUkNIfSIKK2V4cG9ydCBCVUlMRF9DUFAgPSAiJHtCVUlMRF9QUkVGSVh9Z2NjICR7QlVJTERfQ0NfQVJDSH0gLUUiCitleHBvcnQgQlVJTERfTEQgPSAiJHtCVUlMRF9QUkVGSVh9bGQgJHtCVUlMRF9MRF9BUkNIfSIKK2V4cG9ydCBCVUlMRF9DQ0xEID0gIiR7QlVJTERfUFJFRklYfWdjYyAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0FSID0gIiR7QlVJTERfUFJFRklYfWFyIgorZXhwb3J0IEJVSUxEX0FTID0gIiR7QlVJTERfUFJFRklYfWFzICR7QlVJTERfQVNfQVJDSH0iCitleHBvcnQgQlVJTERfUkFOTElCID0gIiR7QlVJTERfUFJFRklYfXJhbmxpYiIKK2V4cG9ydCBCVUlMRF9TVFJJUCA9ICIke0JVSUxEX1BSRUZJWH1zdHJpcCIKK2V4cG9ydCBCVUlMRF9OTSA9ICIke0JVSUxEX1BSRUZJWH1ubSIKKworZXhwb3J0IE1BS0UgPSAibWFrZSIKK0VYVFJBX09FTUFLRSA9ICItZSBNQUtFRkxBR1M9IgorRVhUUkFfT0VDT05GID0gIiIKK2V4cG9ydCBMQ19BTEwgPSAiQyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBhdGNoIGhhbmRsaW5nLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitQQVRDSFRPT0wgPSAicXVpbHQiCitQQVRDSFJFU09MVkUgPSAibm9vcCIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIGZsYWdzIGFuZCBvcHRpb25zLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2V4cG9ydCBCVUlMRF9DUFBGTEFHUyA9ICItaXN5c3RlbSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKK0JVSUxEU0RLX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUn0iCitleHBvcnQgQ1BQRkxBR1MgPSAiJHtUQVJHRVRfQ1BQRkxBR1N9IgorZXhwb3J0IFRBUkdFVF9DUFBGTEFHUyA9ICIiCisjZXhwb3J0IFRBUkdFVF9DUFBGTEFHUyA9ICItaXN5c3RlbSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0iCisKK2V4cG9ydCBCVUlMRF9DRkxBR1MgPSAiJHtCVUlMRF9DUFBGTEFHU30gJHtCVUlMRF9PUFRJTUlaQVRJT059IgorQlVJTERTREtfQ0ZMQUdTID0gIiR7QlVJTERTREtfQ1BQRkxBR1N9ICR7QlVJTERfT1BUSU1JWkFUSU9OfSIKK2V4cG9ydCBDRkxBR1MgPSAiJHtUQVJHRVRfQ0ZMQUdTfSIKK2V4cG9ydCBUQVJHRVRfQ0ZMQUdTID0gIiR7VEFSR0VUX0NQUEZMQUdTfSAke1NFTEVDVEVEX09QVElNSVpBVElPTn0iCisKK2V4cG9ydCBCVUlMRF9DWFhGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitleHBvcnQgQ1hYRkxBR1MgPSAiJHtUQVJHRVRfQ1hYRkxBR1N9IgorZXhwb3J0IFRBUkdFVF9DWFhGTEFHUyA9ICIke1RBUkdFVF9DRkxBR1N9IgorCitleHBvcnQgQlVJTERfTERGTEFHUyA9ICItTCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtTCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1PMSIKKworQlVJTERTREtfTERGTEFHUyA9ICItTCR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke2xpYmRpcn0gLVdsLC1PMSBcCisgICAgICAgICAgICAgICAgICAgIC1MJHtTVEFHSU5HX0RJUl9IT1NUfSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19ESVJfSE9TVH0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJHtiYXNlX2xpYmRpcn0gLVdsLC1PMSIKKworTElOS0VSX0hBU0hfU1RZTEUgPz89ICJnbnUiCisjIG1pcHMgZG9lcyBub3Qgc3VwcG9ydCBHTlUgaGFzaCBzdHlsZSB0aGVyZWZvcmUgd2Ugb3ZlcnJpZGUKK0xJTktFUl9IQVNIX1NUWUxFX21pcHMgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHNlbCA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwczY0ID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjRlbCA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwczY0bjMyID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjRlbG4zMiA9ICJzeXN2IgorVEFSR0VUX0xJTktfSEFTSF9TVFlMRSA/PSAiJHtAWyctV2wsLS1oYXNoLXN0eWxlPWdudScsJyddW2QuZ2V0VmFyKCdMSU5LRVJfSEFTSF9TVFlMRScsIFRydWUpICE9ICdnbnUnXX0iCisKK2V4cG9ydCBMREZMQUdTID0gIiR7VEFSR0VUX0xERkxBR1N9IgorZXhwb3J0IFRBUkdFVF9MREZMQUdTID0gIi1XbCwtTzEgJHtUQVJHRVRfTElOS19IQVNIX1NUWUxFfSIKKyNleHBvcnQgVEFSR0VUX0xERkxBR1MgPSAiLUwke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xpYmRpcn0gXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsaWJkaXJ9IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1PMSIKKworIyBXaGljaCBmbGFncyB0byBsZWF2ZSBieSBzdHJpcC1mbGFncygpIGluIGJpbi9idWlsZC9vZWJ1aWxkLnNoID8KK0FMTE9XRURfRkxBR1MgPSAiLU8gLW1jcHUgLW1hcmNoIC1waXBlIgorCisjIFBhc3MgcGFyYWxsZWwgbWFrZSBvcHRpb25zIHRvIHRoZSBjb21waWxlIHRhc2sKK0VYVFJBX09FTUFLRV9wcmVwZW5kX3Rhc2stY29tcGlsZSA9ICIke1BBUkFMTEVMX01BS0V9ICIKK1BBUkFMTEVMX01BS0VJTlNUID8/PSAiJHtQQVJBTExFTF9NQUtFfSIKKyMgUGFzcyBwYXJhbGxlbCBtYWtlIG9wdGlvbnMgdG8gdGhlIGluc3RhbGwgdGFzaworRVhUUkFfT0VNQUtFX3ByZXBlbmRfdGFzay1pbnN0YWxsID0gIiR7UEFSQUxMRUxfTUFLRUlOU1R9ICIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9wdGltaXphdGlvbiBmbGFncy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworREVCVUdfRkxBR1MgPz0gIi1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyIKKyMgRGlzYWJsZWQgdW50aWwgdGhlIG9wdGlvbiB3b3JrcyBwcm9wZXJseSAtZmVsaW1pbmF0ZS1kd2FyZjItZHVwcworRlVMTF9PUFRJTUlaQVRJT04gPSAiLU8yIC1waXBlICR7REVCVUdfRkxBR1N9IgorREVCVUdfT1BUSU1JWkFUSU9OID0gIi1PIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyICR7REVCVUdfRkxBR1N9IC1waXBlIgorU0VMRUNURURfT1BUSU1JWkFUSU9OID0gIiR7QGQuZ2V0VmFyKFsnRlVMTF9PUFRJTUlaQVRJT04nLCAnREVCVUdfT1BUSU1JWkFUSU9OJ11bZC5nZXRWYXIoJ0RFQlVHX0JVSUxEJywgVHJ1ZSkgPT0gJzEnXSwgVHJ1ZSl9IgorU0VMRUNURURfT1BUSU1JWkFUSU9OW3ZhcmRlcHNdICs9ICJGVUxMX09QVElNSVpBVElPTiBERUJVR19PUFRJTUlaQVRJT04iCitCVUlMRF9PUFRJTUlaQVRJT04gPSAiLU8yIC1waXBlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2V0dGluZ3MgdXNlZCBieSBiaXRiYWtlLWxheWVycy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQkJMQVlFUlNfTEFZRVJJTkRFWF9VUkwgPz89ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC8iCitCQkxBWUVSU19GRVRDSF9ESVIgPz89ICIke0NPUkVCQVNFfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERvd25sb2FkIGxvY2F0aW9ucyBhbmQgdXRpbGl0aWVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FQQUNIRV9NSVJST1IgPSAiaHR0cDovL3d3dy5hcGFjaGUub3JnL2Rpc3QiCitERUJJQU5fTUlSUk9SID0gImZ0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIgorR0VOVE9PX01JUlJPUiA9ICJodHRwOi8vZGlzdGZpbGVzLmdlbnRvby5vcmcvZGlzdGZpbGVzIgorR05PTUVfR0lUID0gImdpdDovL2dpdC5nbm9tZS5vcmciCitHTk9NRV9NSVJST1IgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMiCitHTlVfTUlSUk9SID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUiCitHUEVfTUlSUk9SID0gImh0dHA6Ly9ncGUubGludXh0b2dvLm9yZy9kb3dubG9hZC9zb3VyY2UiCitLRVJORUxPUkdfTUlSUk9SID0gImh0dHA6Ly9rZXJuZWwub3JnL3B1YiIKK1NPVVJDRUZPUkdFX01JUlJPUiA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldCIKK1hMSUJTX01JUlJPUiA9ICJodHRwOi8veGxpYnMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2UiCitYT1JHX01JUlJPUiA9ICJodHRwOi8veG9yZy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMiCitTQVZBTk5BSF9HTlVfTUlSUk9SID0gImh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzIgorU0FWQU5OQUhfTk9OR05VX01JUlJPUiA9ICJodHRwOi8vZG93bmxvYWQuc2F2YW5uYWgubm9uZ251Lm9yZy9yZWxlYXNlcyIKK0NQQU5fTUlSUk9SID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTiIKKworU1JDX1VSSVt2YXJkZXBzZXhjbHVkZV0gKz0gIlwKKyAgICBBUEFDSEVfTUlSUk9SIFwKKyAgICBDUEFOX01JUlJPUiBcCisgICAgREVCSUFOX01JUlJPUiBcCisgICAgR0VOVE9PX01JUlJPUiBcCisgICAgR05PTUVfR0lUIFwKKyAgICBHTk9NRV9NSVJST1IgXAorICAgIEdOVV9NSVJST1IgXAorICAgIEdQRV9NSVJST1IgXAorICAgIEtFUk5FTE9SR19NSVJST1IgXAorICAgIFNBVkFOTkFIX0dOVV9NSVJST1IgXAorICAgIFNBVkFOTkFIX05PTkdOVV9NSVJST1IgXAorICAgIFNPVVJDRUZPUkdFX01JUlJPUiBcCisgICAgWExJQlNfTUlSUk9SIFwKKyAgICBYT1JHX01JUlJPUiBcCisiCisKKyMgWW91IGNhbiB1c2UgdGhlIG1pcnJvciBvZiB5b3VyIGNvdW50cnkgdG8gZ2V0IGZhc3RlciBkb3dubG9hZHMgYnkgcHV0dGluZworIyAgZXhwb3J0IERFQklBTl9NSVJST1IgPSAiZnRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wiCisjICAgICBpbnRvIHlvdXIgbG9jYWwuY29uZgorCitGRVRDSENNRF9zdm4gPSAiL3Vzci9iaW4vZW52IHN2biAtLW5vbi1pbnRlcmFjdGl2ZSAtLXRydXN0LXNlcnZlci1jZXJ0IgorRkVUQ0hDTURfY3ZzID0gIi91c3IvYmluL2VudiBjdnMiCitGRVRDSENNRF93Z2V0ID0gIi91c3IvYmluL2VudiB3Z2V0IC10IDIgLVQgMzAgLW52IC0tcGFzc2l2ZS1mdHAgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSIKK0ZFVENIQ01EX2J6ciA9ICIvdXNyL2Jpbi9lbnYgYnpyIgorRkVUQ0hDTURfaGcgPSAiL3Vzci9iaW4vZW52IGhnIgorCitTUkNEQVRFID0gIiR7REFURX0iCitTUkNSRVYgPz89ICJJTlZBTElEIgorQVVUT1JFViA9ICIke0BiYi5mZXRjaDIuZ2V0X2F1dG9yZXYoZCl9IgorU1JDUFYgPSAiJHtAYmIuZmV0Y2gyLmdldF9zcmNyZXYoZCl9IgorU1JDUFZbdmFyZGVwdmFsdWVdID0gIiR7U1JDUFZ9IgorCitTUkNfVVJJID0gIiIKKworIyBVc2UgcHNldWRvIGFzIHRoZSBmYWtlcm9vdCBpbXBsZW1lbnRhdGlvbgorUFNFVURPX0xPQ0FMU1RBVEVESVIgPz0gIiR7V09SS0RJUn0vcHNldWRvLyIKK1BTRVVET19QQVNTV0QgPz0gIiR7U1RBR0lOR19ESVJfVEFSR0VUfToke1NUQUdJTkdfRElSX05BVElWRX0iCitleHBvcnQgUFNFVURPX0RJU0FCTEVEID0gIjEiCisjZXhwb3J0IFBTRVVET19QUkVGSVggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKKyNleHBvcnQgUFNFVURPX0JJTkRJUiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9IgorI2V4cG9ydCBQU0VVRE9fTElCRElSID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSRQU0VVRE9CSU5ESVIvLi4vbGliL3BzZXVkby9saWIKK0ZBS0VST09UQkFTRUVOViA9ICJQU0VVRE9fQklORElSPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSBQU0VVRE9fTElCRElSPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8uLi9saWIvcHNldWRvL2xpYiBQU0VVRE9fUFJFRklYPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8uLi8uLi8gUFNFVURPX0RJU0FCTEVEPTEiCitGQUtFUk9PVENNRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcHNldWRvIgorRkFLRVJPT1RFTlYgPSAiUFNFVURPX1BSRUZJWD0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IFBTRVVET19MT0NBTFNUQVRFRElSPSR7UFNFVURPX0xPQ0FMU1RBVEVESVJ9IFBTRVVET19QQVNTV0Q9JHtQU0VVRE9fUEFTU1dEfSBQU0VVRE9fTk9TWU1MSU5LRVhQPTEgUFNFVURPX0RJU0FCTEVEPTAiCitGQUtFUk9PVE5PRU5WID0gIlBTRVVET19VTkxPQUQ9MSIKK0ZBS0VST09URElSUyA9ICIke1BTRVVET19MT0NBTFNUQVRFRElSfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZSA/PSAicHNldWRvLW5hdGl2ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgR05VIHBhdGNoIHRyaWVzIHRvIGJlIGludGVsbGdlbnQgYWJvdXQgY2hlY2tpbmcgb3V0IHJlYWQtb25seSBmaWxlcyBmcm9tCisjIGEgUkNTLCB3aGljaCBmcmVha3Mgb3V0IHRob3NlIHNwZWNpYWwgZm9sa3Mgd2l0aCBhY3RpdmUgUGVyZm9yY2UgY2xpZW50cworIyB0aGUgZm9sbG93aW5nIG1ha2VzIHBhdGNoIGlnbm9yZSBSQ1M6CisKK2V4cG9ydCBQQVRDSF9HRVQ9IjAiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOb3Qgc3VyZSBhYm91dCB0aGUgcmVzdCBvZiB0aGlzIHlldC4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFByZS1idWlsZCBjb25maWd1cmF0aW9uIG91dHB1dAorQlVJTERDRkdfSEVBREVSID0gIkJ1aWxkIENvbmZpZ3VyYXRpb246IgorQlVJTERDRkdfVkFSUyA9ICJCQl9WRVJTSU9OIEJVSUxEX1NZUyBOQVRJVkVMU0JTVFJJTkcgVEFSR0VUX1NZUyBNQUNISU5FIERJU1RSTyBESVNUUk9fVkVSU0lPTiBUVU5FX0ZFQVRVUkVTIFRBUkdFVF9GUFUiCitCVUlMRENGR19WQVJTW3R5cGVdID0gImxpc3QiCitCVUlMRENGR19ORUVERURWQVJTID0gIlRBUkdFVF9BUkNIIFRBUkdFVF9PUyIKK0JVSUxEQ0ZHX05FRURFRFZBUlNbdHlwZV0gPSAibGlzdCIKKworIyBPdGhlcgorCitleHBvcnQgUEtHX0NPTkZJR19ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZGlyfS9wa2djb25maWciCitleHBvcnQgUEtHX0NPTkZJR19QQVRIID0gIiR7UEtHX0NPTkZJR19ESVJ9OiR7U1RBR0lOR19EQVRBRElSfS9wa2djb25maWciCitleHBvcnQgUEtHX0NPTkZJR19MSUJESVIgPSAiJHtQS0dfQ09ORklHX0RJUn0iCitleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9IgorZXhwb3J0IFBLR19DT05GSUdfRElTQUJMRV9VTklOU1RBTExFRCA9ICJ5ZXMiCisKKyMjIworIyMjIENvbmZpZyBmaWxlIHByb2Nlc3NpbmcKKyMjIworCisjIEFuIGVtcHR5IGRpc3RybyBsZWFkcyB0byA6OiBlbnRyaWVzIGluIE9WRVJSSURFUyBhbmQgRklMRU9WRVJSSURFUyB3aGljaAorIyBpcyBhIGJhZCBpZGVhLiBTZXR0aW5nIGEgZHVtbXkgdmFsdWUgaXMgYmV0dGVyIHRoYW4gYSB0b24gb2YgYW5vbnltb3VzIHB5dGhvbi4KK0RJU1RSTyA/Pz0gIm5vZGlzdHJvIgorRElTVFJPX05BTUUgPz89ICJPcGVuRW1iZWRkZWQiCisjIE92ZXJyaWRlcyBhcmUgcHJvY2Vzc2VkIGxlZnQgdG8gcmlnaHQsIHNvIHRoZSBvbmVzIHRoYXQgYXJlIG5hbWVkIGxhdGVyIHRha2UgcHJlY2VkZW5jZS4KKyMgWW91IGdlbmVyYWxseSB3YW50IHRoZW0gdG8gZ28gZnJvbSBsZWFzdCB0byBtb3N0IHNwZWNpZmljLgorIworIyBUaGlzIG1lYW5zIHRoYXQgYW4gZW52aW9ubWVudCB2YXJpYWJsZSBuYW1lZCAnPGZvbz5fYXJtJyBvdmVycmlkZXMgYW4KKyMgZW52aXJvbm1lbnQgdmFyaWFibGUgJzxmb28+JyAod2hlbiAke1RBUkdFVF9BUkNIfSBpcyBhcm0pLgorIyBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAnPGZvbz5fcWVtdWFybScgb3ZlcnJpZGVzICc8Zm9vPicgYW5kIG92ZXJyaWRlcworIyAnPGZvbz5fYXJtJyB3aGVuICR7TUFDSElORX0gaXMgJ3FlbXVhcm0nLgorIyBJZiB5b3UgdXNlIGNvbWJpbmF0aW9uIGllICc8Zm9vPl9xZW11YXJtX2FybScsIHRoZW4gJzxmb28+X3FlbXVhcm1fYXJtJyB3aWxsIG92ZXJyaWRlCisjICc8Zm9vPl9xZW11YXJtJyBhbmQgdGhlbiAnPGZvbz4nIHdpbGwgYmUgb3ZlcnJpZGVuIHdpdGggdGhhdCB2YWx1ZSBmcm9tICc8Zm9vPl9xZW11YXJtJy4KKyMgQW5kIGZpbmFsbHkgJzxmb28+X2ZvcmNldmFyaWFibGUnIG92ZXJyaWRlcyBhbnkgc3RhbmRhcmQgdmFyaWFibGUsIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCisjCisjIFRoaXMgd29ya3MgZm9yICBmdW5jdGlvbnMgYXMgd2VsbCwgdGhleSBhcmUgcmVhbGx5IGp1c3QgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorIyBEZWZhdWx0IE9WRVJSSURFUyB0byBtYWtlIGNvbXBpbGF0aW9uIGZhaWwgZmFzdCBpbiBjYXNlIG9mIGJ1aWxkIHN5c3RlbSBtaXNjb25maWd1cmF0aW9uLgorT1ZFUlJJREVTID0gIiR7VEFSR0VUX09TfToke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9OmJ1aWxkLSR7QlVJTERfT1N9OnBuLSR7UE59OiR7TUFDSElORU9WRVJSSURFU306JHtESVNUUk9PVkVSUklERVN9OiR7Q0xBU1NPVkVSUklERX06Zm9yY2V2YXJpYWJsZSIKK09WRVJSSURFU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORU9WRVJSSURFUyIKK0NMQVNTT1ZFUlJJREUgPz0gImNsYXNzLXRhcmdldCIKK0RJU1RST09WRVJSSURFUyA/PSAiJHtAZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpIG9yICcnfSIKK01BQ0hJTkVPVkVSUklERVMgPz0gIiR7TUFDSElORX0iCitNQUNISU5FT1ZFUlJJREVTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FIgorCitGSUxFU09WRVJSSURFUyA9ICIke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9OiR7TUFDSElORU9WRVJSSURFU306JHtESVNUUk9PVkVSUklERVN9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW5jbHVkZSB0aGUgcmVzdCBvZiB0aGUgY29uZmlnIGZpbGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3JlcXVpcmUgY29uZi9hYmlfdmVyc2lvbi5jb25mCitpbmNsdWRlIGNvbmYvc2l0ZS5jb25mCitpbmNsdWRlIGNvbmYvYXV0by5jb25mCitpbmNsdWRlIGNvbmYvbG9jYWwuY29uZgoraW5jbHVkZSBjb25mL2J1aWxkLyR7QlVJTERfU1lTfS5jb25mCitpbmNsdWRlIGNvbmYvdGFyZ2V0LyR7VEFSR0VUX1NZU30uY29uZgoraW5jbHVkZSBjb25mL21hY2hpbmUvJHtNQUNISU5FfS5jb25mCitpbmNsdWRlIGNvbmYvbWFjaGluZS1zZGsvJHtTREtNQUNISU5FfS5jb25mCitpbmNsdWRlIGNvbmYvZGlzdHJvLyR7RElTVFJPfS5jb25mCitpbmNsdWRlIGNvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mCitpbmNsdWRlIGNvbmYvZG9jdW1lbnRhdGlvbi5jb25mCitpbmNsdWRlIGNvbmYvbGljZW5zZXMuY29uZgorcmVxdWlyZSBjb25mL3Nhbml0eS5jb25mCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXZWFrIHZhcmlhYmxlcyAodXN1YWxseSB0byByZXRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworRExfRElSID89ICIke1RPUERJUn0vZG93bmxvYWRzIgorU1NUQVRFX0RJUiA/PSAiJHtUT1BESVJ9L3NzdGF0ZS1jYWNoZSIKK0lNQUdFX0ZTVFlQRVMgPz0gInRhci5neiIKK0lOSVRSQU1GU19GU1RZUEVTID89ICJjcGlvLmd6IgorREVGQVVMVF9UQVNLX1BST1ZJREVSID89ICJwYWNrYWdlZ3JvdXAtYmFzZSIKK01BQ0hJTkVfVEFTS19QUk9WSURFUiA/PSAiJHtERUZBVUxUX1RBU0tfUFJPVklERVJ9IgorCisjIFRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZSBpZiBpdCBpcyBsYXJnZXIgdGhhbgorIyB0aGUgcmVxdWlyZWQgc2l6ZSAoZHUgLWtzIElNQUdFX1JPT1RGUyAqIElNQUdFX09WRVJIRUFEX0ZBQ1RPUiksCisjIGFuZCBubyBlZmZlY3QgaWYgbGVzcyB0aGFuIGl0LgorSU1BR0VfUk9PVEZTX1NJWkUgPz89ICI2NTUzNiIKKworIyBGb3JjZWZ1bGx5IHNldCBDQUNIRSBub3cgc28gZnV0dXJlIGNoYW5nZXMgdG8gdGhpbmdzIGxpa2UKKyMgTUFDSElORSBkb24ndCBjaGFuZ2UgdGhlIHBhdGggdG8gdGhlIGNhY2hlCitDQUNIRSA6PSAiJHtDQUNIRX0iCisKKyMgRGVmYXVsdCB0byBzZXR0aW5nIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gY3B1IGNvdW50CitCQl9OVU1CRVJfVEhSRUFEUyA/PSAiJHtAb2UudXRpbHMuY3B1X2NvdW50KCl9IgorCisjIERlZmF1bHQgdG8gc2V0dGluZyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGNwdSBjb3VudAorUEFSQUxMRUxfTUFLRSA/PSAiLWogJHtAb2UudXRpbHMuY3B1X2NvdW50KCl9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWFnaWMgQ29va2llIGZvciBTQU5JVFkgQ0hFQ0sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworT0VTX0JJVEJBS0VfQ09ORiA9ICIxIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWFjaGluZSBwcm9wZXJ0aWVzIGFuZCBwYWNrYWdlZ3JvdXAtYmFzZSBzdHVmZgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK01BQ0hJTkVfRkVBVFVSRVMgPz0gIiIKK0RJU1RST19GRUFUVVJFUyA/PSAiIgorCitESVNUUk9fRVhUUkFfUkRFUEVORFMgPz0gIiIKK0RJU1RST19FWFRSQV9SUkVDT01NRU5EUyA/PSAiIgorTUFDSElORV9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgPz0gIiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCisKK0VYVFJBX0lNQUdFX0ZFQVRVUkVTID8/PSAiIgorSU1BR0VfRkVBVFVSRVMgKz0gIiR7RVhUUkFfSU1BR0VfRkVBVFVSRVN9IgorCitESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwgPSAicHVsc2VhdWRpbyBzeXN2aW5pdCBibHVlejUiCitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMID0gInJ0YyIKKworQ09NQklORURfRkVBVFVSRVMgPSAiJHtAb2UudXRpbHMuc2V0X2ludGVyc2VjdCgnRElTVFJPX0ZFQVRVUkVTJywgJ01BQ0hJTkVfRkVBVFVSRVMnLCBkKX0iCitDT01CSU5FRF9GRUFUVVJFU1t2YXJkZXBzXSArPSAiRElTVFJPX0ZFQVRVUkVTIE1BQ0hJTkVfRkVBVFVSRVMiCisKK1NFUklBTF9DT05TT0xFID8/PSAiIgorU0VSSUFMX0NPTlNPTEVTID8/PSAiJHtAZC5nZXRWYXIoJ1NFUklBTF9DT05TT0xFJywgVHJ1ZSkucmVwbGFjZSgnICcsICc7Jyl9IgorCitOT19SRUNPTU1FTkRBVElPTlMgPz0gIiIKK0JBRF9SRUNPTU1FTkRBVElPTlMgPz0gIiIKKworIyBNYWtlIHN1cmUgTUFDSElORSBpc24ndCBleHBvcnRlZAorIyAoYnJlYWtzIGJpbnV0aWxzIGF0IGxlYXN0KQorTUFDSElORVt1bmV4cG9ydF0gPSAiMSIKKworIyBNYWtlIHN1cmUgVEFSR0VUX0FSQ0ggaXNuJ3QgZXhwb3J0ZWQKKyMgKGJyZWFrcyBNYWtlZmlsZXMgdXNpbmcgaW1wbGljaXQgcnVsZXMsIGUuZy4gcXVpbHQsIGFzIEdOVSBtYWtlIGhhcyB0aGlzCisjIGluIHRoZW0sIHVuZG9jdW1lbnRlZCkKK1RBUkdFVF9BUkNIW3VuZXhwb3J0XSA9ICIxIgorCisjIE1ha2Ugc3VyZSBESVNUUk8gaXNuJ3QgZXhwb3J0ZWQKKyMgKGJyZWFrcyBzeXN2aW5pdCBhdCBsZWFzdCkKK0RJU1RST1t1bmV4cG9ydF0gPSAiMSIKKworIyBNYWtlIHN1cmUgU0hFTEwgaXNuJ3QgZXhwb3J0ZWQKKyMgKGNhbiBicmVhayBhbnkgbnVtYmVyIG9mIHRoaW5ncyBpZiB0aGUgdXNlcidzIHNoZWxsIGlzbid0IFBPU0lYLWNvbXBsaWFudCwKKyMgaW5jbHVkaW5nIHRoZSBmbG9jayBjb21tYW5kKS4gVGhlIHVzZXIncyBzaGVsbCBzaG91bGRuJ3QgYWZmZWN0IG91ciBidWlsZHMuCitTSEVMTFt1bmV4cG9ydF0gPSAiMSIKKworIyBVc2VkIGJ5IGNhbmFkaWFuLWNyb3NzIHRvIGhhbmRsZSBzdHJpbmcgY29udmVyc2lvbnMgb24gVEFSR0VUX0FSQ0ggd2hlcmUgbmVlZGVkCitUUkFOU0xBVEVEX1RBUkdFVF9BUkNIID8/PSAiJHtAZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkucmVwbGFjZSgiXyIsICItIil9IgorCisjIENvbXBsZXRlIG91dHB1dCBmcm9tIGJpdGJha2UKK0JCX0NPTlNPTEVMT0cgPz0gIiR7TE9HX0RJUn0vY29va2VyLyR7TUFDSElORX0vJHtEQVRFVElNRX0ubG9nIgorCisjIFNldHVwIG91ciBkZWZhdWx0IGhhc2ggcG9saWN5CitCQl9TSUdOQVRVUkVfSEFORExFUiA/PSAiT0VCYXNpY0hhc2giCitCQl9IQVNIQkFTRV9XSElURUxJU1QgPz0gIlRNUERJUiBGSUxFIFBBVEggUFdEIEJCX1RBU0tIQVNIIEJCUEFUSCBETF9ESVIgXAorICAgIFNTVEFURV9ESVIgVEhJU0RJUiBGSUxFU0VYVFJBUEFUSFMgRklMRV9ESVJOQU1FIEhPTUUgTE9HTkFNRSBTSEVMTCBURVJNIFwKKyAgICBVU0VSIEZJTEVTUEFUSCBTVEFHSU5HX0RJUl9IT1NUIFNUQUdJTkdfRElSX1RBUkdFVCBDT1JFQkFTRSBQUlNFUlZfSE9TVCBcCisgICAgUFJTRVJWX0RVTVBESVIgUFJTRVJWX0RVTVBGSUxFIFBSU0VSVl9MT0NLRE9XTiBQQVJBTExFTF9NQUtFIFwKKyAgICBDQ0FDSEVfRElSIEVYVEVSTkFMX1RPT0xDSEFJTiBDQ0FDSEUgQ0NBQ0hFX0RJU0FCTEUgTElDRU5TRV9QQVRIIFNES1BLR1NVRkZJWCBcCisgICAgV0FSTl9RQSBFUlJPUl9RQSBXT1JLRElSIFNUQU1QQ0xFQU4gUEtHREFUQV9ESVIgQlVJTERfQVJDSCBTU1RBVEVfUEtHQVJDSCIKK0JCX0hBU0hDT05GSUdfV0hJVEVMSVNUID89ICIke0JCX0hBU0hCQVNFX1dISVRFTElTVH0gREFURSBUSU1FIFNTSF9BR0VOVF9QSUQgXAorICAgIFNTSF9BVVRIX1NPQ0sgUFNFVURPX0JVSUxEIEJCX0VOVl9FWFRSQVdISVRFIERJU0FCTEVfU0FOSVRZX0NIRUNLUyBcCisgICAgUEFSQUxMRUxfTUFLRSBCQl9OVU1CRVJfVEhSRUFEUyBCQl9PUklHRU5WIEJCX0lOVkFMSURDT05GIEJCSU5DTFVERUQiCitCQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUyA/PSAiZG9jIGRlcHMgZGVwZW5kcyBcCisgICAgbG9ja2ZpbGVzIHR5cGUgdmFyZGVwc2V4Y2x1ZGUgdmFyZGVwcyB2YXJkZXB2YWx1ZSB2YXJkZXB2YWx1ZWV4Y2x1ZGUgXAorICAgIGZpbGUtY2hlY2tzdW1zIHB5dGhvbiBmdW5jIHRhc2sgZXhwb3J0IHVuZXhwb3J0IG5vZXhlYyBub3N0YW1wIGRpcnMgY2xlYW5kaXJzIFwKKyAgICBzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkIHByZWZ1bmNzIHBvc3RmdW5jcyBleHBvcnRfZnVuYyBkZXB0YXNrIHJkZXB0YXNrIFwKKyAgICByZWNyZGVwdGFzayBub2RlcHJyZWNzIHN0YW1wLWJhc2Ugc3RhbXAtZXh0cmEtaW5mbyIKKworTUxQUkVGSVggPz89ICIiCitNVUxUSUxJQl9WQVJJQU5UUyA/Pz0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2NvbmYtbm90ZXMudHh0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlNjMxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2NvbmYtbm90ZXMudHh0CkBAIC0wLDAgKzEsOCBAQAorQ29tbW9uIHRhcmdldHMgYXJlOgorICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgIGNvcmUtaW1hZ2Utc2F0bworICAgIG1ldGEtdG9vbGNoYWluCisgICAgYWR0LWluc3RhbGxlcgorICAgIG1ldGEtaWRlLXN1cHBvcnQKKworWW91IGNhbiBhbHNvIHJ1biBnZW5lcmF0ZWQgcWVtdSBpbWFnZXMgd2l0aCBhIGNvbW1hbmQgbGlrZSAncnVucWVtdSBxZW11eDg2JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzY1YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYKQEAgLTAsMCArMSwyMyBAQAoraW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMKKworVENNT0RFID89ICJkZWZhdWx0IgorcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS0ke1RDTU9ERX0uaW5jCisKK1RDTElCQyA/PSAiZ2xpYmMiCityZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLSR7VENMSUJDfS5pbmMKKworIyBBbGxvdyBzaW5nbGUgbGliYyBkaXN0cm9zIHRvIGRpc2FibGUgdGhpcyBjb2RlCitUQ0xJQkNBUFBFTkQgPz0gIi0ke1RDTElCQ30iCitUTVBESVIgLj0gIiR7VENMSUJDQVBQRU5EfSIKKworQ0FDSEUgPSAiJHtUTVBESVJ9L2NhY2hlLyR7VENNT0RFfS0ke1RDTElCQ30ke0BbJycsICcvJyArIHN0cihkLmdldFZhcignTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignTUFDSElORScsIFRydWUpKV19JHtAWycnLCAnLycgKyBzdHIoZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldW2Jvb2woZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldfSIKKworVVNFUl9DTEFTU0VTID89ICIiCitQQUNLQUdFX0NMQVNTRVMgPz0gInBhY2thZ2VfaXBrIgorSU5IRVJJVF9CTEFDS0xJU1QgPSAiYmxhY2tsaXN0IgorSU5IRVJJVF9ESVNUUk8gPz0gImRlYmlhbiBkZXZzaGVsbCBzc3RhdGUgbGljZW5zZSIKK0lOSEVSSVQgKz0gIiR7UEFDS0FHRV9DTEFTU0VTfSAke1VTRVJfQ0xBU1NFU30gJHtJTkhFUklUX0RJU1RST30gJHtJTkhFUklUX0JMQUNLTElTVH0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjQ5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCkBAIC0wLDAgKzEsMTcgQEAKKworQVNORUVERUQgPSAiLVdsLC0tYXMtbmVlZGVkIgorCitBU05FRURFRF9wbi1iYWJlbHRyYWNlID0gIiIKK0FTTkVFREVEX3BuLWNvbnNvbGUtdG9vbHMgPSAiIgorQVNORUVERURfcG4tZGlzdGNjID0gIiIKK0FTTkVFREVEX3BuLW9wZW5vYmV4ID0gIiIKK0FTTkVFREVEX3BuLWljdSA9ICIiCitBU05FRURFRF9wbi14c2VydmVyLWtkcml2ZS14b21hcCA9ICIiCitBU05FRURFRF9wbi1taW5pbW8gPSAiIgorQVNORUVERURfcG4tcGNpdXRpbHMgPSAiIgorQVNORUVERURfcG4tcHV6emxlcyA9ICIiCitBU05FRURFRF9wbi1kaWFsZXIgPSAiIgorQVNORUVERURfcG4tcHVsc2VhdWRpbyA9ICIiCitBU05FRURFRF9wbi1ycG0gPSAiIgorCitUQVJHRVRfTERGTEFHUyArPSAiJHtBU05FRURFRH0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWI3NjJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYwpAQCAtMCwwICsxLDQ5IEBACitRQV9MT0dGSUxFID0gIiR7VE1QRElSfS9xYS5sb2ciCisKK09FSU5DTFVERUxPR1MgPz0gInllcyIKK0tFUk5FTF9DT05TT0xFID89ICJ0dHlTMCIKK0tFRVBVSU1BR0UgPz89ICJ5ZXMiCisKK0lNQUdFX0xJTkdVQVMgPz0gImVuLXVzIGVuLWdiIgorRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiA/PSAiMSIKK0xPQ0FMRV9VVEY4X09OTFkgPz0gIjAiCisKK0RJU1RST19GRUFUVVJFU19ERUZBVUxUID89ICJhbHNhIGFyZ3AgYmx1ZXRvb3RoIGV4dDIgaXJkYSBsYXJnZWZpbGUgcGNtY2lhIHVzYmdhZGdldCB1c2Job3N0IHdpZmkgeGF0dHIgbmZzIHplcm9jb25mIHBjaSAzZyBuZmMgeDExIgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfREVGQVVMVCA/PSAiaXB2NCBpcHY2IGxpYmMtYmFja3RyYWNlIGxpYmMtYmlnLW1hY3JvcyBsaWJjLWJzZCBsaWJjLWN4eC10ZXN0cyBsaWJjLWNhdGdldHMgbGliYy1jaGFyc2V0cyBsaWJjLWNyeXB0IFwKKwkJCQkJbGliYy1jcnlwdC11ZmMgbGliYy1kYi1hbGlhc2VzIGxpYmMtZW52eiBsaWJjLWZjdnQgbGliYy1mbXRtc2cgbGliYy1mc3RhYiBsaWJjLWZ0cmF2ZXJzZSBcCisJCQkJCWxpYmMtZ2V0bG9naW4gbGliYy1pZG4gbGliYy1pbmV0LWFubCBsaWJjLWxpYm0gbGliYy1sb2NhbGVzIGxpYmMtbG9jYWxlLWNvZGUgXAorCQkJCQlsaWJjLW1lbXVzYWdlIGxpYmMtbmlzIGxpYmMtbnNzd2l0Y2ggbGliYy1yY21kIGxpYmMtcnRsZC1kZWJ1ZyBsaWJjLXNwYXduIGxpYmMtc3RyZWFtcyBsaWJjLXN1bnJwYyBcCisJCQkJCWxpYmMtdXRtcCBsaWJjLXV0bXB4IGxpYmMtd29yZGV4cCBsaWJjLXBvc2l4LWNsYW5nLXdjaGFyIGxpYmMtcG9zaXgtcmVnZXhwIGxpYmMtcG9zaXgtcmVnZXhwLWdsaWJjIFwKKwkJCQkJbGliYy1wb3NpeC13Y2hhci1pbyIKK0RJU1RST19GRUFUVVJFU19MSUJDID89ICIke0RJU1RST19GRUFUVVJFU19MSUJDX0RFRkFVTFR9IgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfY2xhc3MtbmF0aXZlc2RrID0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfREVGQVVMVH0iCitESVNUUk9fRkVBVFVSRVMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IgorCitJTUFHRV9GRUFUVVJFUyA/PSAiIgorCisjIFRoaXMgaXMgYSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB0aGUgZGlzdHJpYnV0aW9uLCB0aGV5IGFyZSBub3QKKyMgZGlyZWN0bHkgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uLiAKK0hPU1RUT09MU19XSElURUxJU1RfR1BMLTMuMCA/PSAiIgorV0hJVEVMSVNUX0dQTC0zLjAgPz0gImxlc3MiCitMR1BMdjJfV0hJVEVMSVNUX0dQTC0zLjAgPz0gImxpYmFzc3VhbiBnbnV0bHMgbGlidGFzbjEgbGliaWRuIgorCitDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPz0gIiIKKyMgQ09NTUVSQ0lBTF9BVURJT19QTFVHSU5TID89ICJnc3QtcGx1Z2lucy11Z2x5LW1hZCBnc3QtcGx1Z2lucy11Z2x5LW1wZWdhdWRpb3BhcnNlIgorQ09NTUVSQ0lBTF9WSURFT19QTFVHSU5TID89ICIiCisjIENPTU1FUkNJQUxfVklERU9fUExVR0lOUyA/PSAiZ3N0LXBsdWdpbnMtdWdseS1tcGVnMmRlYyBnc3QtcGx1Z2lucy11Z2x5LW1wZWdzdHJlYW0gZ3N0LXBsdWdpbnMtYmFkLW1wZWd2aWRlb3BhcnNlIgorQ09NTUVSQ0lBTF9RVCA/PSAiIgorIyBDT01NRVJDSUFMX1FUID89ICJxbW1wIgorIyBTZXQgb2YgY29tbW9uIGxpY2Vuc2VzIHVzZWQgZm9yIGxpY2Vuc2UuYmJjbGFzcworQ09NTU9OX0xJQ0VOU0VfRElSID8/PSAiJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMiCisKK0JCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA/Pz0gIjAiCisKK05PMzJMSUJTID8/PSAiMSIKKworIyBEZWZhdWx0IHRvIGVtaXR0aW5nIGxvZ2ZpbGVzIGlmIGEgYnVpbGQgZmFpbHMuCitCQklOQ0xVREVMT0dTID8/PSAieWVzIgorU0RLX1ZFUlNJT04gPz89ICJub2Rpc3Ryby4wIgorRElTVFJPX1ZFUlNJT04gPz89ICJub2Rpc3Ryby4wIgorCisjIE1pc3NpbmcgY2hlY2tzdW1zIHNob3VsZCByYWlzZSBhbiBlcnJvcgorQkJfU1RSSUNUX0NIRUNLU1VNID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NGQ1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYwpAQCAtMCwwICsxLDUxIEBACisjCisjIERlZmF1bHQgdmlydHVhbCBwcm92aWRlcnMKKyMKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiID89ICJkYiIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiLW5hdGl2ZSA/PSAiZGItbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlci14Zjg2ID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9lZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9tZXNhID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyA/PSAib3BrZy11dGlscyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlID89ICJvcGtnLXV0aWxzLW5hdGl2ZSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYngxMSA/PSAibGlieDExIgorUFJFRkVSUkVEX1BST1ZJREVSX3hmODYtdmlkZW8taW50ZWwgPz0gInhmODYtdmlkZW8taW50ZWwiCisKKyMKKyMgRGVmYXVsdCB2aXJ0dWFsIHJ1bnRpbWUgcHJvdmlkZXJzCisjCitWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlcyA/PSAidXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnIgorVklSVFVBTC1SVU5USU1FX2FwbSA/PSAiYXBtIgorVklSVFVBTC1SVU5USU1FX2Fsc2Etc3RhdGUgPz0gImFsc2Etc3RhdGUiCitWSVJUVUFMLVJVTlRJTUVfZ2V0b3B0ID89ICJ1dGlsLWxpbnV4LWdldG9wdCIKK1ZJUlRVQUwtUlVOVElNRV93aXJlbGVzcy10b29scyA/PSAiaXcgd2lyZWxlc3MtdG9vbHMiCisKKyMKKyMgRGVmYXVsdCByZWNpcGUgcHJvdmlkZXJzCisjCitQUkVGRVJSRURfUFJPVklERVJfZGJ1cy1nbGliID89ICJkYnVzLWdsaWIiCitQUkVGRVJSRURfUFJPVklERVJfZGJ1cy1nbGliLW5hdGl2ZSA/PSAiZGJ1cy1nbGliLW5hdGl2ZSIKK1BSRUZFUlJFRF9QUk9WSURFUl9nZGstcGl4YnVmID89ICJnZGstcGl4YnVmIgorUFJFRkVSUkVEX1BST1ZJREVSX2xpYmdjYyA/PSAibGliZ2NjIgorUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1saWJnY2MgPz0gIm5hdGl2ZXNkay1saWJnY2MiCitQUkVGRVJSRURfUFJPVklERVJfbGludXgtbGliYy1oZWFkZXJzID89ICJsaW51eC1saWJjLWhlYWRlcnMiCitQUkVGRVJSRURfUFJPVklERVJfbmF0aXZlc2RrLWxpbnV4LWxpYmMtaGVhZGVycyA/PSAibmF0aXZlc2RrLWxpbnV4LWxpYmMtaGVhZGVycyIKK1BSRUZFUlJFRF9QUk9WSURFUl9tYXRjaGJveC1wYW5lbCA/PSAibWF0Y2hib3gtcGFuZWwtMiIKK1BSRUZFUlJFRF9QUk9WSURFUl9vcGtnID89ICJvcGtnIgorUFJFRkVSUkVEX1BST1ZJREVSX29wa2ctbmF0aXZlID89ICJvcGtnLW5hdGl2ZSIKK1BSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstb3BrZyA/PSAibmF0aXZlc2RrLW9wa2ciCitQUkVGRVJSRURfUFJPVklERVJfY29uc29sZS10b29scyA/PSAia2JkIgorUFJFRkVSUkVEX1BST1ZJREVSX2d6aXAtbmF0aXZlID89ICJwaWd6LW5hdGl2ZSIKK1BSRUZFUlJFRF9QUk9WSURFUl9tYWtlID89ICJtYWtlIgorUFJFRkVSUkVEX1BST1ZJREVSX3VkZXYgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZCcsJ3VkZXYnLGQpfSIKKyMgVGhlcmUgYXJlIGlzc3VlcyB3aXRoIHJ1bnRpbWUgcGFja2FnZXMgYW5kIFBSRUZFUlJFRF9QUk9WSURFUiwgc2VlIFlPQ1RPICM1MDQ0IGZvciBkZXRhaWxzCisjIG9uIHRoaXMgcmF0aGVyIHN0cmFuZ2UgZW50cnkuCitQUkVGRVJSRURfUFJPVklERVJfYmx1ZXo0ID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnYmx1ZXRvb3RoIGJsdWV6NScsJ2JsdWV6NScsJ2JsdWV6NCcsZCl9IgorUFJFRkVSUkVEX1BST1ZJREVSX2JsdWV6LWhjaWR1bXAgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdibHVldG9vdGggYmx1ZXo1JywnYmx1ZXo1JywnYmx1ZXotaGNpZHVtcCcsZCl9IgorIyBBbHRlcm5hdGl2ZSBpcyBsdHAtZGR0IGluIG1ldGEtb2U6IG1ldGEtb2UvcmVjaXBlcy1kZXZ0b29scy9sdHAtZGR0L2x0cC1kZHRfMC4wLjQuYmIKK1BSRUZFUlJFRF9QUk9WSURFUl9sdHAgPz0gImx0cCIKK1BSRUZFUlJFRF9QUk9WSURFUl9nZXRvcHQgPz0gInV0aWwtbGludXgtZ2V0b3B0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMwNjNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMKQEAgLTAsMCArMSwxNSBAQAorIworIyBEZWZhdWx0IHByZWZlcnJlZCB2ZXJzaW9ucworIworCisjIEZvcmNlIHRoZSBweXRob24gdmVyc2lvbnMgaW4gb25lIHBsYWNlCitQWVRIT05fQkFTRVZFUlNJT04gPz0gIjIuNyIKK1BSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA/PSAiMi43LjkiCitQUkVGRVJSRURfVkVSU0lPTl9weXRob24tbmF0aXZlID89ICIyLjcuOSIKKworIyBGb3JjZSB0aGUgb2xkZXIgdmVyc2lvbiBvZiBsaWJlcmF0aW9uLWZvbnRzIHVudGlsIHdlIGZpeCB0aGUgZm9udGZvcmdlIGlzc3VlCitQUkVGRVJSRURfVkVSU0lPTl9saWJlcmF0aW9uLWZvbnRzID89ICIxLjA0IgorCisjIEZvcmNlIGRiLW5hdGl2ZSdzIHZlcnNpb24gdG8ga2VlcCBzeW5jIHdpdGggZGIgd2hpbGUKKyMgJ0FHUEwtMy4wJyBpbiAke0lOQ09NUEFUSUJMRV9MSUNFTlNFfSBibGFja2xpc3QKK1BSRUZFUlJFRF9WRVJTSU9OX2RiLW5hdGl2ZSA9ICIke0BpbmNvbXBhdGlibGVfbGljZW5zZV9jb250YWlucygnQUdQTC0zLjAnLCAnNS4lJywgJzYuJScsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2RhOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCkBAIC0wLDAgKzEsNTM2IEBACisjCisjIFRoaXMgaXMgYSBsaXN0IGZvciB0cmFja2luZyBzdGF0dXMgb2YgcGFja2FnZSByZWxhdGl2ZSB0byBNYWpvcgorIyBkaXN0cmlidXRpb25zIHN1Y2ggYXMgRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgLi4uIFRoZSBwYWNrYWdlCisjIG5hbWUgaXMgdGhlIG1ham9yIGRpc3RyaWJ1dGlvbiBlcXVpdmFsZW50IHRvIHRoZSBuYW1lIHVzZWQgaW4gb2UtY29yZQorIworIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKKyMKKyMgICAgICAgRElTVFJPX1BOX0FMSUFTX3BuLTxyZWNpcGUgbmFtZT4gPSAiRGlzdHJvMT08cGtnbmFtZT4gRGlzdHJvMj08cGtnbmFtZT4iCisjCisjIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCisjCitESVNUUk9fUE5fQUxJQVNfcG4tYWFpbmEgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tYWJpd29yZC1lbWJlZGRlZCA9ICJGZWRvcmE9YWJpd29yZCBVYnVudHU9YWJpd29yZCIKK0RJU1RST19QTl9BTElBU19wbi1hZHQtaW5zdGFsbGVyID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWFsc2Etc3RhdGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1hbHNhLXV0aWxzLWFsc2Fjb25mID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYXRrID0gIkZlZG9yYT1hdGsgT3BlblN1U0U9YXRrIgorRElTVFJPX1BOX0FMSUFTX3BuLWF1Z2VhcyA9ICJVYnVudHU9bGliYXVnZWFzMCBEZWJpYW49bGliYXVnZWFzMCIKK0RJU1RST19QTl9BTElBU19wbi1hdmFoaS11aSA9ICJVYnVudHU9YXZhaGktZGlzY292ZXIgRGViaWFuPWF2YWhpLWRpc2NvdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWJhYmVsdHJhY2UgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tYmR3Z2MgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tYmlncmVxc3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWJpZ3JlcXNwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1iamFtID0gIk9wZW5TdVNFPWJvb3N0LWphbSBEZWJpbmE9YmphbSIKK0RJU1RST19QTl9BTElBU19wbi1ibGt0b29sID0gIkRlYmlhbj1ibGt0b29sIE1hbmRyaXZhPWJsa3Rvb2wiCitESVNUUk9fUE5fQUxJQVNfcG4tYmx1ZXo0ID0gIlVidW50dT1ibHVleiBEZWJpYW49Ymx1ZXotdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tYmx1ZXo1ID0gIkZlZG9yYT1ibHVleiAgT3BlbnN1c2U9Ymx1ZXoiCitESVNUUk9fUE5fQUxJQVNfcG4tYmx1ZXotZHRsMS13b3JrYXJvdW5kID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYm9vdGNoYXJ0MiA9ICJGZWRvcmE9Ym9vdGNoYXJ0MiBPcGVuc3VzZT1ib290Y2hhcnQiCitESVNUUk9fUE5fQUxJQVNfcG4tYnRyZnMtdG9vbHMgPSAiRGViaWFuPWJ0cmZzLXRvb2xzIEZlZG9yYT1idHJmcy1wcm9ncyIKK0RJU1RST19QTl9BTElBU19wbi1idWlsZC1hcHBsaWFuY2UtaW1hZ2UgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGQtY29tcGFyZSA9ICJPcGVuc3VzZT1idWlsZC1jb21wYXJlIEZlZG9yYT1idWlsZC1jb21wYXJlIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1idWlsZHRvb2xzLXRhcmJhbGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jYWxpYnJhdGVwcm90byA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9yZy9wcm90by9jYWxpYnJhdGVwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1jZHJ0b29scyA9ICJPcGVuU1VTRT1jZHJ0b29scyBPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1jaGtjb25maWctYWx0ZXJuYXRpdmVzID0gIk1hbmRyaXZhPWNoa2NvbmZpZyBEZWJpYW49Y2hrY29uZmlnIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsYXdzLXBsdWdpbi1ndGtodG1sMi12aWV3ZXIgPSAiRmVkb3JhPWNsYXdzLW1haWwtcGx1Z2lucyBPcGVuU3VTRT1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMgRGViaWFuPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyIKK0RJU1RST19QTl9BTElBU19wbi1jbGF3cy1wbHVnaW4tbWFpbGRpciA9ICJGZWRvcmE9Y2xhd3MtbWFpbC1wbHVnaW5zIE9wZW5TdVNFPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyBEZWJpYW49Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsYXdzLXBsdWdpbi1tYWlsbWJveCA9ICJGZWRvcmE9Y2xhd3MtbWFpbC1wbHVnaW5zIE9wZW5TdVNFPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyBEZWJpYW49Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsYXdzLXBsdWdpbi1yc3N5bCA9ICJGZWRvcmE9Y2xhd3MtbWFpbC1wbHVnaW5zIE9wZW5TdVNFPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyBEZWJpYW49Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsaXBib2FyZC1tYW5hZ2VyID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlciA9ICJGZWRvcmE9Y2x1dHRlciBPcGVuU3VzZT1jbHV0dGVyIFVidW50dT1jbHV0dGVyLTEuMCBNYW5kcml2YT1jbHV0dGVyIERlYmlhbj1jbHV0dGVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItMS44ID0gIkZlZG9yYT1jbHV0dGVyIE9wZW5TdXNlPWNsdXR0ZXIgVWJ1bnR1PWNsdXR0ZXItMS4wIE1hbmRyaXZhPWNsdXR0ZXIgRGViaWFuPWNsdXR0ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1nc3QtMS4wID0gIkRlYmlhbj1jbHV0dGVyLWdzdCBVYnVudHU9Y2x1dHRlci1nc3QgRmVkb3JhPWNsdXR0ZXItZ3N0IgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItZ3N0LTEuOCA9ICJGZWRvcmE9Y2x1dHRlci1nc3QgRGViaWFuPWxpYmNsdXR0ZXItZ3N0IgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItZ3RrLTEuMCA9ICJEZWJpYW49Y2x1dHRlci1ndGsgVWJ1bnR1PWNsdXR0ZXItZ3RrIEZlZG9yYT1jbHV0dGVyLWd0ayIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWd0ay0xLjggPSAiRmVkb3JhPWNsdXR0ZXItZ3RrIE9wZW5TdVNFPWNsdXR0ZXItZ3RrIFVidW50dT1jbHV0dGVyLWd0ay0wLjEwIE1hbmRyaXZhPWNsdXR0ZXItZ3RrIERlYmlhbj1jbHV0dGVyLWd0ayIKK0RJU1RST19QTl9BTElBU19wbi1jb2dsLTEuMCA9ICJEZWJpYW49Y29nbCBVYnVudHU9Y29nbCBGZWRvcmE9Y29nbCIKK0RJU1RST19QTl9BTElBU19wbi1jb2dsID0gIkZlZG9yYT1jb2dsIE9wZW5TdXNlPWNvZ2wgVWJ1bnR1PWNvZ2wgTWFuZHJpdmE9Y29nbCBEZWJpYW49Y29nbCIKK0RJU1RST19QTl9BTElBU19wbi1jb21wb3NpdGVwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1jb21wb3NpdGVwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1jb25ubWFuID0gIk1lZWdvPWNvbm5tYW4iCitESVNUUk9fUE5fQUxJQVNfcG4tY29ubm1hbi1jb25mID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29ubm1hbi1nbm9tZSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1jb25zb2xlLXRvb2xzID0gIkRlYmlhbj1jb25zb2xlLXRvb2xzIFVidW50dT1jb25zb2xlLXRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtYmFzZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtY2x1dHRlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtZGlyZWN0ZmIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWZ1bGwtY21kbGluZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Uta2VybmVsLWRldiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbHNiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1sc2ItZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1sc2ItcXQzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1sc2Itc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1taW5pbWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1taW5pbWFsLWRldiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwtbXRkdXRpbHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXJ0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1ydC1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXNhdG8gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXNhdG8tZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1zYXRvLXNkayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtdGVzdG1hc3RlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXdlc3RvbiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UteDExID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3Jvc3MtbG9jYWxlZGVmID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWNyeXB0b2Rldi1saW51eCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNyeXB0b2Rldi1tb2R1bGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jcnlwdG9kZXYtdGVzdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jd2F1dG9tYWNyb3MgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2N3YXV0b21hY3Jvcy5iZXJsaW9zLmRlLyIKK0RJU1RST19QTl9BTElBU19wbi1kYW1hZ2Vwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1kYW1hZ2Vwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1kYiA9ICJEZWJpYW49ZGI1LjEgVWJ1bnR1PWRiNS4xIgorRElTVFJPX1BOX0FMSUFTX3BuLWRidXMtcHRlc3QgPSAiRmVkb3JhPWRidXMgVWJ1bnR1PWRidXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZGJ1cy10ZXN0ID0gIkZlZG9yYT1kYnVzIFVidW50dT1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRidXMtd2FpdCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWRlcG1vZHdyYXBwZXItY3Jvc3MgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1kaXJlY3RmYi1leGFtcGxlcyA9ICJEZWJpYW49ZGlyZWN0ZmIgRmVkb3JhPWRpcmVjdGZiIgorRElTVFJPX1BOX0FMSUFTX3BuLWRpc3RjYyA9ICJEZWJpYW49ZGlzdGNjIEZlZG9yYT1kaXN0Y2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZGlzdGNjLWNvbmZpZyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWRteHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWRteHByb3RvIFVidW50dT14MTFwcm90by1kbXggRGViaWFuPXgxMXByb3RvLWRteCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzID0gIkZlZG9yYT1kb2Nib29rLXN0eWxlLWRzc3NsIFVidW50dT1kb2Nib29rLWRzc3NsIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2stc2dtbC1kdGQtMy4xID0gIkZlZG9yYT1kb2Nib29rLWR0ZHMgTWFuZHJpdmE9ZG9jYm9vay1kdGQzMS1zZ21sIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xID0gIkZlZG9yYT1kb2Nib29rLWR0ZHMgTWFuZHJpdmE9ZG9jYm9vay1kdGQ0MS1zZ21sIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC41ID0gIkZlZG9yYT1kb2Nib29rLWR0ZHMgTWFuZHJpdmE9ZG9jYm9vay1kdGQ0Mi1zZ21sIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2steG1sLWR0ZDQgPSAiVWJ1bnR1PWRvY2Jvb2steG1sIEZlZG9yYT1kb2Nib29rLWR0ZHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgPSAiVWJ1bnR1PWRvY2Jvb2steG1sIEZlZG9yYT1kb2Nib29rLWR0ZHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay14c2wtc3R5bGVzaGVldHMgPSAiRmVkb3JhPWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzIE9wZW5zdXNlPWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRyaTJwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1kcmkycHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZHJpM3Byb3RvID0gIkZlZG9yYT1kcmkzcHJvdG8gT3BlbnN1c2U9ZHJpM3Byb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWRyb3BiZWFyID0gIkRlYmlhbj1kcm9wYmVhciBVYnVudHU9ZHJvcGJlYXIiCitESVNUUk9fUE5fQUxJQVNfcG4tZHRjID0gIkZlZG9yYT1kdGMgVWJ1bnR1PWR0YyIKK0RJU1RST19QTl9BTElBU19wbi1lZHMtdG9vbHMgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1lZWUtYWNwaS1zY3JpcHRzID0gIkRlYmlhbj1lZWVwYy1hY3BpLXNjcmlwdHMgVWJ1bnR1PWVlZXBjLWFjcGktc2NyaXB0cyIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMtaW5pdGlhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1sb2NhbGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMtbXRyYWNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLXNjcmlwdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpbmZvLWZiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaW5mby14MTEgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lbWdkLWRyaXZlci1iaW4gPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZW5jb2RpbmdzID0gIlVidW50dT14Zm9udHMtZW5jb2RpbmdzIE1hbmRyaXZhPXgxMS1mb250LWVuY29kaW5ncyBEZWJpYW49eGZvbnRzLWVuY29kaW5ncyIKK0RJU1RST19QTl9BTElBU19wbi1ldmllZXh0ID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWV2aWVleHQgRGViaWFuPXgxMXByb3RvLWV2aWUiCitESVNUUk9fUE5fQUxJQVNfcG4tZml4ZXNwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1maXhlc3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvbnQtYWxpYXMgPSAiRmVkb3JhPXhvcmcteDExLWZvbnRzLWJhc2UgTWFuZHJpdmE9eDExLWZvbnQtYWxpYXMgTWVlZ289eG9yZy14MTEtZm9udHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udGNhY2hlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZm9udGNhY2hlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udHNwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1mb250c3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvbnQtdXRpbCA9ICJNZWVnbz14b3JnLXgxMS1mb250LXV0aWxzIEZlZG9yYT14b3JnLXgxMS1mb250LXV0aWxzIFVidW50dT14Zm9udHMtdXRpbHMgTWFuZHJpdmE9eDExLWZvbnQtdXRpbCBEZWJpYW49eGZvbnRzLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvcm1mYWN0b3IgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1mb3Rvd2FsbCA9ICJGZWRvcmE9Zm90b3dhbGwgVWJ1bnR1PWZvdG93YWxsIgorRElTVFJPX1BOX0FMSUFTX3BuLWZzdGVzdHMgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1nYWlsID0gIkZlZG9yYT1nYWlsIFVidW50dT1saWJnYWlsLTMtMCIKK0RJU1RST19QTl9BTElBU19wbi1nYWt1ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2FsYWdvLWRhZW1vbiA9ICJEZWJpYW49Z2FsYWdvLWRhZW1vbiBVYnVudHU9Z2FsYWdvLWRhZW1vbiIKK0RJU1RST19QTl9BTElBU19wbi1nY2MtY3Jvc3MtaW5pdGlhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zcy1pbml0aWFsLWk1ODYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1nY2MtY3Jvc3NzZGstaW5pdGlhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zc3Nkay1pbml0aWFsLXg4Nl82NCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjY21ha2VkZXAgPSAiTWFuZHJpdmE9Z2NjbWFrZWRlcCBVYnVudHU9eHV0aWxzLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1nY2MtcnVudGltZSA9ICJVYnVudHU9Z2NjIEZlZG9yYT1nY2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLXNhbml0aXplcnMgPSAiVWJ1bnR1PWdjYyBGZWRvcmE9Z2NjIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1zb3VyY2UgPSAiVWJ1bnR1PWdjYyBGZWRvcmE9Z2NjIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjb25mLWRidXMgPSAiTWVlZ289R0NvbmYtZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1nZGstcGl4YnVmID0gIkRlYmlhbj1saWJnZGstcGl4YnVmMi4wIEZlZG9yYT1nZGstcGl4YnVmIgorRElTVFJPX1BOX0FMSUFTX3BuLWdkay1waXhidWYtY3NvdXJjZSA9ICJEZWJpYW49bGliZ2RrLXBpeGJ1ZjIuMC0wIEZlZG9yYT1nZGstcGl4YnVmMiIKK0RJU1RST19QTl9BTElBU19wbi1nZXR0ZXh0LW1pbmltYWwgPSAiRGViaWFuPWdldHRleHQgRmVkb3JhPWdldHRleHQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xpYi0yLjAgPSAiTWVlZ289Z2xpYjIgRmVkb3JhPWdsaWIyIE9wZW5TdVNFPWdsaWIyIFVidW50dT1nbGliMi4wIE1hbmRyaXZhPWdsaWIyLjAgRGViaWFuPWdsaWIyLjAiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xpYmMtbG9jYWxlID0gIk9wZW5TdVNFPWdsaWJjLWxvY2FsZSBGZWRvcmE9Z2xpYmMtZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xpYmMtbXRyYWNlID0gIkZlZG9yYT1nbGliYy11dGlscyBVYnVudHU9bGliYy1kZXYtYmluIgorRElTVFJPX1BOX0FMSUFTX3BuLWdsaWJjLXNjcmlwdHMgPSAiRmVkb3JhPWdsaWJjIFVidW50dT1saWJjLWJpbiIKK0RJU1RST19QTl9BTElBU19wbi1nbHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWdscHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZ25vbWUtZGVza3RvcC10ZXN0aW5nID0gIkRlYmlhbj1nbm9tZS1kZXNrdG9wLXRlc3RpbmcgRmVkb3JhPWdub21lLWRlc2t0b3AtdGVzdGluZyIKK0RJU1RST19QTl9BTElBU19wbi1nbnUtY29uZmlnID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3B0ZmRpc2sgPSAiRmVkb3JhPWdkaXNrIFVidW50dT1nZGlzayIKK0RJU1RST19QTl9BTElBU19wbi1ncnViLWVmaSA9ICJEZWJpYW49Z3J1Yi1lZmkgRmVkb3JhPWdydWIyLWVmaSIKK0RJU1RST19QTl9BTElBU19wbi1ncnViLWVmaS1pNTg2ID0gIkRlYmlhbj1ncnViLWVmaSBGZWRvcmE9Z3J1YjItZWZpIgorRElTVFJPX1BOX0FMSUFTX3BuLWdydWItZWZpLXg4Ni02NCA9ICJEZWJpYW49Z3J1Yi1lZmkgRmVkb3JhPWdydWIyLWVmaSIKK0RJU1RST19QTl9BTElBU19wbi1nc3QtcGxheWVyID0gIlVidW50dT1nc3QtcGxheWVyIEZlZG9yYT1nc3RyZWFtZXItcGxheWVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdC1wbHVnaW4tYmx1ZXRvb3RoID0gIlVidW50dT1saWJnc3RyZWFtZXItcGx1Z2lucy1iYXNlIEZlZG9yYT1nc3RyZWFtZXItcGx1Z2lucy1iYXNlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMCA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wIFVidW50dT1nc3RyZWFtZXIxLjAiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSA9ICJNZWVnbz1nc3RyZWFtZXIgRmVkb3JhPWdzdHJlYW1lciBPcGVuU3VTRT1nc3RyZWFtZXIgVWJ1bnR1PWdzdHJlYW1lcjAuMTAiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIkRlYmlhbj1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgVWJ1bnR1PWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlID0gIkRlYmlhbj1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIFVidW50dT1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgVWJ1bnR1PWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiVWJ1bnR1PWdzdHJlYW1lcjAuMTAtcnRzcCBGZWRvcmE9Z3N0cmVhbWVyLXJ0c3AiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrKyA9ICJNZWVnbz1ndGsyIEZlZG9yYT1ndGsyIE9wZW5TdVNFPWd0azIgVWJ1bnR1PWd0aysyLjAgTWFuZHJpdmE9Z3RrKzIuMCBEZWJpYW49Z3RrKzIuMCIKK0RJU1RST19QTl9BTElBU19wbi1ndGsrMyA9ICJVYnVudHU9Z3RrKzMuMCBEZWJpYW49Z3RrKzMuMCBGZWRvcmE9Z3RrMyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstZG9jLXN0dWIgPSAiRmVkb3JhPWd0ay1kb2MgVWJ1bnR1PWd0ay1kb2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLWVuZ2luZXMgPSAiRmVkb3JhPWd0azItZW5naW5lcyBPcGVuU3VTRT1ndGsyLWVuZ2luZXMgVWJ1bnR1PWd0azItZW5naW5lcyBNYW5kcml2YT1ndGstZW5naW5lczIgRGViaWFuPWd0azItZW5naW5lcyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstc2F0by1lbmdpbmUgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1ndGstdGhlbWUtdG9ydHVyZXIgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3dpa2kubGFwdG9wLm9yZy9nby9HVEtfZm9yX09MUEMiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLWljb24tdXRpbHMtbmF0aXZlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWd1bW1pYm9vdCA9ICJEZWJpYW49Z3VtbWlib290IEZlZG9yYT1ndW1taWJvb3QiCitESVNUUk9fUE5fQUxJQVNfcG4taGVsbG8tbW9kID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taG9zdGFwLWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1od2xhdGRldGVjdCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1pY2VjYy1jcmVhdGUtZW52ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdC1pZnVwZG93biA9ICJEZWJpYW49aWZ1cGRvd24gVWJ1bnR1PWlmdXBkb3duIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1ib290ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWZyYW1ld29yayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWJvb3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmkgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3RmcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRzY3JpcHRzID0gIkZlZG9yYT1pbml0c2NyaXB0cyBNYW5kcmF2aWE9aW5pdHNjcmlwdHMiCitESVNUUk9fUE5fQUxJQVNfcG4taW5wdXRwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1pbnB1dHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWlwcm91dGUyID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWpwZWcgPSAiT3BlblN1U0U9bGlianBlZyBVYnVudHU9bGlianBlZzYyIgorRElTVFJPX1BOX0FMSUFTX3BuLWticHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8ta2Jwcm90byBVYnVudHU9eDExcHJvdG8ta2ItZGV2IERlYmlhbj14MTFwcm90by1rYi1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4ta2NvbmZpZy1mcm9udGVuZHMgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4ta2VybmVsLWRldnNyYyA9ICJEZWJpYW49bGludXgtYmFzZSBVYnVudHU9bGludXgiCitESVNUUk9fUE5fQUxJQVNfcG4ta2VybmVsc2hhcmsgPSAiTWFuZHJpdmE9a2VybmVsc2hhcmsgVWJ1bnR1PWtlcm5lbHNoYXJrIgorRElTVFJPX1BOX0FMSUFTX3BuLWtlcm4tdG9vbHMtbmF0aXZlID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1rZXltYXBzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4ta2YgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGFtZSA9ICJEZWJpYW49bGFtZSBVYnVudHU9bGFtZSIKK0RJU1RST19QTl9BTElBU19wbi1sYXRlbmN5dG9wID0gIk1lZWdvPWxhdGVuY3l0b3AgRmVkb3JhPWxhdGVuY3l0b3AgRGViaWFuPWxhdGVuY3l0b3AgT3BlblN1U0U9bGF0ZW5jeXRvcCIKK0RJU1RST19QTl9BTElBU19wbi1sZGNvbmZpZy1uYXRpdmUgPSAiVWJ1bnR1PWxpYmMtYmluIEZlZG9yYT1nbGliYyIKK0RJU1RST19QTl9BTElBU19wbi1saWJhNTIgPSAiTWFuZHJpdmE9YTUyZGVjIERlYmlhbj1hNTJkZWMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliYWNwaSA9ICJVYnVudHU9bGliYWNwaSBNYW5kcml2YT1saWJhY3BpIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmF0b21pY3Mtb3BzID0gIk1lZWdvPWxpYmF0b21pYy1vcHMgRGViaWFuPWxpYmF0b21pYy1vcHMgVWJ1bnR1PWxpYmF0b21pYy1vcHMgT3BlblN1U0U9bGliYXRvbWljLW9wcyBNYW5kcml2YT1saWJhdG9taWMtb3BzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmNncm91cCA9ICJVYnVudHU9bGliY2dyb3VwMSBEZWJpYW49bGliY2dyb3VwMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJjaGVjayA9ICJVYnVudHU9Y2hlY2sgRmVkb3JhPWNoZWNrIE9wZW5TdVNFPWNoZWNrIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmNsYXNzLWlzYS1wZXJsID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmRybS1wb3Vsc2JvID0gIkRlYmlhbj1saWJkcm0taW50ZWwxIFVidW50dT1saWJkcm0taW50ZWwxIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmR1bXB2YWx1ZS1wZXJsID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmVudi1wZXJsID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmVyYXRpb24tZm9udHMgPSAiVWJ1bnR1PWZvbnRzLWxpYmVyYXRpb24gRmVkb3JhPWxpYmVyYXRpb24tZm9udHMtdHRmIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmZha2VrZXkgPSAiTWVlZ28xLjA9bGliZmFrZWtleSBEZWJpYW49bGliZmFrZWtleSIKK0RJU1RST19QTl9BTElBU19wbi1saWJmaWxlLWNoZWNrdHJlZS1wZXJsID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmZtLWV4dHJhID0gIk9wZW5zdXNlPWxpYmZtLWV4dHJhNCBVYnVudHU9bGliZm0tZXh0cmE0IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmZyaWJpZGkgPSAiT3BlblN1U0U9ZnJpYmlkaSBVYnVudHU9ZnJpYmlkaSBNYW5kcml2YT1mcmliaWRpIERlYmlhbj1mcmliaWRpIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdjYyA9ICJEZWJpYW49bGliZ2NjNCBVYnVudHU9bGliZ2NjMSBPcGVuU3VTRT1saWJnY2M0NiIKK0RJU1RST19QTl9BTElBU19wbi1saWJnZGJ1cyA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1saWJnbGFkZSA9ICJNZWVnbz1saWJnbGFkZTIgRmVkb3JhPWxpYmdsYWRlMiBPcGVuU3VTRT1saWJnbGFkZTIgVWJ1bnR1PWxpYmdsYWRlMiBNYW5kcml2YT1saWJnbGFkZTIuMCBEZWJpYW49bGliZ2xhZGUyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdsdSA9ICJEZWJpYW49bGliZ2x1IFVidW50dT1saWJnbHUgT3BlbnN1c2U9bWVzYS1saWJnbHUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ3NtZCA9ICJGZWRvcmE9Z3NtIFVidW50dT1saWJnc20gRGViaWFuPWxpYmdzbSBPcGVuc3VzZT1saWJnc20iCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ3Rrc3R5bHVzID0gIkRlYmlhbj1saWJndGtzdHlsdXMgVWJ1bnR1PWxpYmd0a3N0eWx1cyIKK0RJU1RST19QTl9BTElBU19wbi1saWJndSA9ICJPcGVuU3VTRT1nbHUgT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliaTE4bi1jb2xsYXRlLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliaWNhbCA9ICJVYnVudHU9bGliaWNhbCBGZWRvcmE9bGliaWNhbCIKK0RJU1RST19QTl9BTElBU19wbi1saWJpY29udiA9ICJGZWRvcmE9bWluZ3ctbGliaWNvbnYgT3BlbnN1c2U9Y3Jvc3MtbWluZ3ctbGliaWNvbnYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliaW5wdXQgPSAiVWJ1bnR1PWxpYmlucHV0MCBGZWRvcmE9bGliaW5wdXQwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmpzb24gPSAiVWJ1bnR1PWxpYmpzb24wLWRldiBEZWJpYW49bGlianNvbjAtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmtzYmEgPSAiRmVkb3JhPWxpYmtzYmEgRGViaWFuPWxpYmtzYmE4IFVidW50dT1saWJrc2JhIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmxieHV0aWwgPSAiTWFuZHJpdmE9bGlibGJ4dXRpbCBPcGVuU3VzZT14b3JnLXgxMS1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1saWJtYXRjaGJveCA9ICJVYnVudHU9bGlibWF0Y2hib3ggRmVkb3JhPWxpYm1hdGNoYm94IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm1wYyA9ICJGZWRvcmE9bGlibXBjIE9wZW5TdXNlPWxpYm1wYzIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibmV3dCA9ICJEZWJpYW49bGlibmV3dDAuNTIgRmVkb3JhPW5ld3QiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibmV3dC1weXRob24gPSAiVWJ1bnR1PXB5dGhvbi1uZXd0IEZlZG9yYT1uZXd0LXB5dGhvbiIKK0RJU1RST19QTl9BTElBU19wbi1saWJuc3MtbWRucyA9ICJNZWVnbz1uc3MtbWRucyBPcGVuU3VTRT1uc3MtbWRucyBVYnVudHU9bnNzLW1kbnMgTWFuZHJpdmE9bnNzX21kbnMgRGViaWFuPW5zcy1tZG5zIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm9teGlsID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9vbXhpbC5zb3VyY2Vmb3JnZS5uZXQvIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm93bCA9ICJEZWJpYW49b3dsIE9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlib3dsLWF2ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlicGFtID0gIk1lZWdvPXBhbSBGZWRvcmE9cGFtIE9wZW5TdVNFPXBhbSBVYnVudHU9cGFtIE1hbmRyaXZhPXBhbSBEZWJpYW49cGFtIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBjcmUgPSAiTWFuZHJpdmE9bGlicGNyZTAgRmVkb3JhPXBjcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlicG5nMTIgPSAiRGViaWFuPWxpYnBuZzEyLTAgRmVkb3JhPWxpYnBuZyIKK0RJU1RST19QTl9BTElBU19wbi1saWJwb2QtcGxhaW5lci1wZXJsID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNhbXBsZXJhdGUwID0gIk1lZWdvPWxpYnNhbXBsZXJhdGUgRmVkb3JhPWxpYnNhbXBsZXJhdGUgT3BlblN1U0U9bGlic2FtcGxlcmF0ZSBVYnVudHU9bGlic2FtcGxlcmF0ZSBNYW5kcml2YT1saWJzYW1wbGVyYXRlIERlYmlhbj1saWJzYW1wbGVyYXRlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNkbCA9ICJGZWRvcmE9U0RMIE9wZW5zdXNlPVNETCIKK0RJU1RST19QTl9BTElBU19wbi1saWJzZGwyID0gIkZlZG9yYT1zZGwyIE9wZW5zdXNlPWxpYnNkbDIgVWJ1bnR1PWxpYnNkbDIgRGViaWFuPWxpYnNkbDIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic25kZmlsZTEgPSAiTWVlZ289bGlic25kZmlsZSBGZWRvcmE9bGlic25kZmlsZSBPcGVuU3VTRT1saWJzbmRmaWxlIFVidW50dT1saWJzbmRmaWxlIE1hbmRyaXZhPWxpYnNuZGZpbGUgRGViaWFuPWxpYnNuZGZpbGUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic291cC0yLjQgPSAiTWVlZ289bGlic291cCBGZWRvcmE9bGlic291cCBPcGVuU3VTRT1saWJzb3VwIFVidW50dT1saWJzb3VwMi40IE1hbmRyaXZhPWxpYnNvdXAgRGViaWFuPWxpYnNvdXAyLjQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic3luYyA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ0ZWxlcGF0aHkgPSAiRGViaWFuPWxpYnRlbGVwYXRoeTIgVWJ1bnR1PWxpYnRlbGVwYXRoeTIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidGltZWRhdGUtcGVybCA9ICJEZWJpYW49bGlidGltZWRhdGUtcGVybCBVYnVudHU9bGlidGltZWRhdGUtcGVybCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ1cmN1ID0gIkZlZG9yYT11c2Vyc3BhY2UtcmN1IFVidW50dT1saWJ1cmN1MCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ1c2IxID0gIkRlYmlhbj1saWJ1c2ItMS4wLTAgRmVkb3JhPWxpYnVzYjEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidXNiLWNvbXBhdCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4MTEgPSAiRGViaWFuPWxpYngxMS02IEZlZG9yYT1saWJYMTEgVWJ1bnR1PWxpYngxMS02IE9wZW5TdVNFPXhvcmcteDExLWxpYlgxMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4MTEtZGlldCA9ICJEZWJpYW49bGlieDExLTYgRmVkb3JhPWxpYlgxMSBVYnVudHU9bGlieDExLTYgT3BlblN1U0U9eG9yZy14MTEtbGliWDExIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhjYWxpYnJhdGUgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcvbGliL2xpYlhDYWxpYnJhdGUvIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhmb250Y2FjaGUgPSAiTWFuZHJpdmE9bGlieGZvbnRjYWNoZSBEZWJpYW49bGlieGZvbnRjYWNoZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4ZnQgPSAiTWFuZHJpdmE9bGlieGZ0IERlYmlhbj1saWJ4ZnQyIFVidW50dT1saWJ4ZnQyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhpID0gIlVidW50dT1saWJ4aSBGZWRvcmE9bGliWGkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGtiY29tbW9uID0gIkZlZG9yYT1saWJ4a2Jjb21tb24gRGViaWFuPWxpYnhrYmNvbW1vbiIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4cHJpbnRhcHB1dGlsID0gIkRlYmlhbj1saWJ4cHJpbnRhcHB1dGlsIFVidW50dT1saWJ4cHJpbnRhcHB1dGlsMSBNYW5kcml2YT1saWJ4cHJpbnRhcHB1dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhzY3Juc2F2ZXIgPSAiRmVkb3JhPWxpYlhTY3JuU2F2ZXIgVWJ1bnR1PWxpYnhzczEgTWFuZHJpdmE9bGlieHNjcm5zYXZlciIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4c2V0dGluZ3MtY2xpZW50ID0gIkRlYmlhbj1saWJ4c2V0dGluZ3MtY2xpZW50MCBVYnVudHU9bGlieHNldHRpbmdzLWNsaWVudDAgTWFuZHJpdmE9bGliWHNldHRpbmdzLWNsaWVudDAiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHRyYXAgPSAiRGViaWFuPWxpYnh0cmFwNiBGZWRvcmE9bGliWFRyYXAiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHhmODZtaXNjID0gIk1hbmRyaXZhPWxpYnh4Zjg2bWlzYyBGZWRvcmE9bGliWHhmODZtaXNjIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LWR1bW15ID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LWZpcm13YXJlID0gIkZlZG9yYT1saW51eC1maXJtd2FyZSBVYnVudHU9bGludXgtZmlybXdhcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtbGliYy1oZWFkZXJzID0gIkRlYmlhbj1saW51eC1rZXJuZWwtaGVhZGVycyBVYnVudHU9bGludXgta2VybmVsLWhlYWRlcnMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtbGliYy1oZWFkZXJzLXlvY3RvID0gIkRlYmlhbj1saW51eC1rZXJuZWwtaGVhZGVycyBVYnVudHU9bGludXgta2VybmVsLWhlYWRlcnMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgteW9jdG8gPSAiRGViaWFuPWxpbnV4LWJhc2UgVWJ1bnR1PWxpbnV4IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LXlvY3RvLXJ0ID0gIkRlYmlhbj1saW51eC1iYXNlIFVidW50dT1saW51eCIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC15b2N0by10aW55ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxzYmluaXRzY3JpcHRzID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1sc2JzZXR1cCA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tbHNidGVzdCA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tbHRwID0gIk1hbmRyaXZhPWx0cCBVYnVudHU9bHRwIgorRElTVFJPX1BOX0FMSUFTX3BuLWx0dG5nLW1vZHVsZXMgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2x0dG5nLm9yZy8iCitESVNUUk9fUE5fQUxJQVNfcG4tbHR0bmctdG9vbHMgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2x0dG5nLm9yZy8iCitESVNUUk9fUE5fQUxJQVNfcG4tbHR0bmctdXN0ID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9sdHRuZy5vcmcvIgorRElTVFJPX1BOX0FMSUFTX3BuLWx6NCA9ICJEZWJpYW49bHo0IEZlZG9yYT1sejQiCitESVNUUk9fUE5fQUxJQVNfcG4tbHpvID0gIkRlYmlhbj1saWJsem8gVWJ1bnR1PWxpYmx6byBGZWRvcmE9bHpwIgorRElTVFJPX1BOX0FMSUFTX3BuLW1haWx4ID0gIkRlYmlhbj1ic2QtbWFpbHggVWJ1bnR1PWJzZC1tYWlseCIKK0RJU1RST19QTl9BTElBU19wbi1tYWtlZGVwZW5kID0gIk1hbmRyaXZhPW1ha2VkZXBlbmQgVWJ1bnR1PXh1dGlscy1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tbWFrZWRldnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1jb25maWctZ3RrID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtZGVza3RvcCA9ICJNYW5kcml2YT1tYXRjaGJveC1kZXNrdG9wIFVidW50dT1tYXRjaGJveC1kZXNrdG9wIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LWRlc2t0b3Atc2F0byA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LWtleWJvYXJkID0gIkRlYmlhbj1tYXRjaGJveC1rZXlib2FyZCBGZWRvcmE9bWF0Y2hib3gta2V5Ym9hcmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtcGFuZWwtMiA9ICJEZWJpYW49bWF0Y2hib3gtcGFuZWwgTWFuZHJpdmE9bWF0Y2hib3gtcGFuZWwgVWJ1bnR1PW1hdGNoYm94LXBhbmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXNlc3Npb24gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1zZXNzaW9uLXNhdG8gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10ZXJtaW5hbCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10aGVtZS1zYXRvLTIgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10aGVtZXMtZXh0cmEgPSAiVWJ1bnR1PW1hdGNoYm94LXRoZW1lcy1leHRyYSBNYW5kcml2YT1tYXRjaGJveC10aGVtZXMtZXh0cmEiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWVzLWd0ayA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXdtID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtd20tMiA9ICJNYW5kcml2YT1tYXRjaGJveC13aW5kb3ctbWFuYWdlciBEZWJpYW49bWF0Y2hib3gtd2luZG93LW1hbmFnZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tbWVudS1jYWNoZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1tZXNhID0gIkZlZG9yYT1tZXNhIFVidW50dT1saWJnbDEtbWVzYS1kcmkiCitESVNUUk9fUE5fQUxJQVNfcG4tbWVzYS1nbCA9ICJGZWRvcmE9bWVzYSBVYnVudHU9bGliZ2wxLW1lc2EtZHJpIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lc2EtZ2xzbCA9ICJGZWRvcmE9bWVzYSBVYnVudHU9bGliZ2wxLW1lc2EtZHJpIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtZXh0c2RrLXFlbXV4ODYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLWVudmlyb25tZW50LWk1ODYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLWVudmlyb25tZW50LXFlbXV4ODYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLWVudmlyb25tZW50LXFlbXV4ODYtNjQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLWlkZS1zdXBwb3J0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS10b29sY2hhaW4gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLXRvb2xjaGFpbi1xdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtdG9vbGNoYWluLXF0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1pbmkteC1zZXNzaW9uID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW1rZWxmaW1hZ2UgPSAiVWJ1bnR1PW1rZWxmaW1hZ2UgRmVkb3JhPW1rZWxmaW1hZ2UiCitESVNUUk9fUE5fQUxJQVNfcG4tbWtmb250ZGlyID0gIk1hbmRyaXZhPW1rZm9udGRpciBVYnVudHU9eGZvbnRzLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1mb250LXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW1rZm9udHNjYWxlID0gIk1hbmRyaXZhPW1rZm9udHNjYWxlIFVidW50dT14Zm9udHMtdXRpbHMgRmVkb3JhPXhvcmcteDExLWZvbnQtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbWt0ZW1wID0gIk1hbmRyaXZhPW1rdGVtcCBGZWRvcmE9bWt0ZW1wIgorRElTVFJPX1BOX0FMSUFTX3BuLW1tYy11dGlscyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1vYmxpbi1wcm90byA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1vZHV0aWxzLWNvbGxhdGVyYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tb2R1dGlscy1pbml0c2NyaXB0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1zeW5jdG9vbCA9ICJPcGVuU3VzZT1tc3luY3Rvb2wgTWFuZHJpdmE9bXN5bmN0b29sIgorRElTVFJPX1BOX0FMSUFTX3BuLW10ZC11dGlscyA9ICJEZWJpYW49bXRkLXV0aWxzIFVidW50dT1tdGQtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbXgtMS4wID0gIlVidW50dT1teCBEZWJpYW49bXggRmVkb3JhPW14IgorRElTVFJPX1BOX0FMSUFTX3BuLW40NTAtYXVkaW8gPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbmVhcmQgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbmVvbiA9ICJGZWRvcmE9bmVvbiBPcGVuc3VzZT1uZW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLW5ldHdvcmstc3VzcGVuZC1zY3JpcHRzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbmZzLWV4cG9ydC1yb290ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbnB0aCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1uc3MtbXlob3N0bmFtZSA9ICJNZWVnbz1uc3MtbWRucyBPcGVuU3VTRT1uc3MtbWRucyBVYnVudHU9bnNzLW1kbnMgTWFuZHJpdmE9bnNzX21kbnMgRGViaWFuPW5zcy1tZG5zIgorRElTVFJPX1BOX0FMSUFTX3BuLW9jZi1saW51eCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1vZm9ubyA9ICJEZWJpYW49b2Zvbm8gVWJ1bnR1PW9mb25vIgorRElTVFJPX1BOX0FMSUFTX3BuLW9oLXB1enpsZXMgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9zdm4ub3Blbm1va28ub3JnL3RydW5rL3NyYy90YXIiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1hcmNoLWNvbmZpZyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctY29sbGF0ZXJhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2cta2V5cmluZ3MgPSAiT1NQRFQgdXBzdHJlYW09Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLW5vZ3BnID0gIk9TUERUIHVwc3RyZWFtPWdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy11dGlscyA9ICJPU1BEVCB1cHN0cmVhbT1naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wcm9maWxlID0gIkRlYmlhbj1vcHJvZmlsZSBGZWRvcmE9b3Byb2ZpbGUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3Byb2ZpbGV1aSA9ICJGZWRvcmE9b3Byb2ZpbGV1aSBVYnVudHU9b3Byb2ZpbGUtZ3VpIERlYmlhbj1vcHJvZmlsZS1ndWkiCitESVNUUk9fUE5fQUxJQVNfcG4tb3Byb2ZpbGV1aS1zZXJ2ZXIgPSAiRmVkb3JhPW9wcm9maWxldWkgVWJ1bnR1PW9wcm9maWxlLWd1aSBEZWJpYW49b3Byb2ZpbGUtZ3VpIgorRElTVFJPX1BOX0FMSUFTX3BuLW9zLXJlbGVhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1vd2wtdmlkZW8gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtYmFzZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtYm9vdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1ZyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWxzYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLW5mcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXF0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1ZyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLW1pbmkgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLWk1ODYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tcWVtdXg4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi1xZW11eDg2LTY0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0NGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0ID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXNkay1ob3N0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZS1pbmRleCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhdGNoZWxmID0gIk9wZW5zdXNlPXBhdGNoZWxmIEZlZG9yYT1wYXRjaGVsZiIKK0RJU1RST19QTl9BTElBU19wbi1wZXJmID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXBpZ2xpdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBrZ2NvbmZpZyA9ICJVYnVudHU9cGtnLWNvbmZpZyBGZWRvcmE9cGtnY29uZmlnIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvaW50ZXJjYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wb2ludGVyY2FsLXhpbnB1dCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBva3ktZmVlZC1jb25maWctb3BrZyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvbmctY2xvY2sgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1wb3J0bWFwID0gIkRlYmlhbj1ycGNiaW5kIEZlZG9yYT1ycGNiaW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvc3RpbnN0LWludGVyY2VwdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvd2VydG9wID0gIk1lZWdvPXBvd2VydG9wIEZlZG9yYT1wb3dlcnRvcCBEZWJpYW49cG93ZXJ0b3AgT3BlblN1U0U9cG93ZXJ0b3AgTWFuZHJpdmE9cG93ZXJ0b3AiCitESVNUUk9fUE5fQUxJQVNfcG4tcHBwLWRpYWxpbiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXByZXNlbnRwcm90byA9ICJEZWJpYW49eDExcHJvdG8tcHJlc2VudC1kZXYgRmVkb3JhPXhvcmcteDExLXByb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXByaW50cHJvdG8gPSAiRGViaWFuPXgxMXByb3RvLXByaW50LWRldiBVYnVudHU9eDExcHJvdG8tcHJpbnQtZGV2IE1hbmRyaXZhPXgxMS1wcm90by1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1wc2V1ZG8gPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLXBzcGxhc2ggPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1wdGVzdC1ydW5uZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wdXp6bGVzID0gIkRlYmlhbj1zZ3QtcHV6emxlcyBGZWRvcmE9cHV6emxlcyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24zID0gIkZlZG9yYT1weXRob24zIERlYmlhbj1weXRob24zLjIiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uMy1kaXN0cmlidXRlID0gIkRlYmlhbj1weXRob24zLXNldHVwdG9vbHMgRmVkb3JhPXB5dGhvbjMtc2V0dXB0b29scyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tWlNJID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWFyZ3BhcnNlID0gIkZlZG9yYT1weXRob24tYXJncGFyc2UgT3BlblN1U0U9cHl0aG9uLWFyZ3BhcnNlIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1kYnVzID0gIlVidW50dT1weXRob24tZGJ1cyBEZWJpYW49cHl0aG9uLWRidXMgTWFuZHJpdmE9cHl0aG9uLWRidXMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiT3BlbnN1c2U9cHl0aG9uLXNldHVwdG9vbHMgRmVkb3JhPXB5dGhvbi1zZXR1cHRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1naXQgPSAiRGViaWFuPXB5dGhvbi1naXQgRmVkb3JhPUdpdFB5dGhvbiIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tbWFrbyA9ICJGZWRvcmE9cHl0aG9uLW1ha28gT3BlbnN1c2U9cHl0aG9uLU1ha28iCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Y2Fpcm8gPSAiTWVlZ289cHljYWlybyBGZWRvcmE9cHljYWlybyBVYnVudHU9cHljYWlybyBEZWJpYW49cHljYWlybyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHljdXJsID0gIkRlYmlhbj1weXRob24tcHljdXJsIFVidW50dT1weXRob24tcHljdXJsIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWdvYmplY3QgPSAiTWVlZ289cHlnb2JqZWN0MiBGZWRvcmE9cHlnb2JqZWN0MiBVYnVudHU9cHlnb2JqZWN0IERlYmlhbj1weWdvYmplY3QiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Z3RrID0gIkRlYmlhbj1weXRob24tZ3RrMiBGZWRvcmE9cHlndGsyIE9wZW5TdVNFPXB5dGhvbi1ndGsiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5cmV4ID0gIk1hbmRyaXZhPXB5dGhvbi1weXJleCBVYnVudHU9cHl0aG9uLXB5cmV4IgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zY29ucyA9ICJGZWRvcmE9c2NvbnMgT3BlblN1U0U9c2NvbnMgVWJ1bnR1PXNjb25zIE1hbmRyaXZhPXNjb25zIERlYmlhbj1zY29ucyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tc2V0dXB0b29scyA9ICJNYW5kcml2YT1weXRob24tc2V0dXAgT3BlblN1U0U9cHl0aG9uLXNldHVwLWdpdCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tc21hcnRwbSA9ICJEZWJpYW49c21hcnQgT3BlblN1U0U9c21hcnQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdS1jb25maWcgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1xZW11Z2wgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1xZW11LWhlbHBlciA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXV3cmFwcGVyLWNyb3NzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcW1tcCA9ICJGZWRvcmE9cW1tcCBEZWJpYW49cW1tcCIKK0RJU1RST19QTl9BTElBU19wbi1xdDQgPSAiTWFuZHJpdmE9bGlicXQ0LWRldmVsIFVidW50dT1saWJxdDQtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NGUtZGVtby1pbWFnZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC1lbWJlZGRlZCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1xdDQtZ3JhcGhpY3Mtc3lzdGVtID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LXRvb2xzID0gIk1hbmRyaXZhPWxpYnF0NC1kZXZlbCBVYnVudHU9bGlicXQ0LWRldiIKK0RJU1RST19QTl9BTElBU19wbi1xdDQteDExLWZyZWUgPSAiVWJ1bnR1PXF0LXgxMS1mcmVlIERlYmlhbj1xdC14MTEtZnJlZSIKK0RJU1RST19QTl9BTElBU19wbi1xdC1kZW1vLWluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xdWlja3kgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tcmFuZHJwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1yYW5kcnByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlYWRsaW5lID0gIkZlZG9yYT1yZWFkbGluZSBEZWJpYW49cmVhZGxpbmUtY29tbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlY29yZHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJlY29yZHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlbWFrZSA9ICJNYW5kcml2YT1yZW1ha2UgRGViaWFuPXJlbWFrZSIKK0RJU1RST19QTl9BTElBU19wbi1yZW5kZXJwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1yZW5kZXJwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZXNvdXJjZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJlc291cmNlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmdiID0gIkZlZG9yYT14b3JnLVgxMS1zZXJ2ZXItdXRpbHMgRGViaWFuPXgxMS14c2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXJwbXJlc29sdmUgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tcnQtdGVzdHMgPSAiRGViaWFuPXJ0LXRlc3RzIFVidW50dT1ydC10ZXN0cyIKK0RJU1RST19QTl9BTElBU19wbi1ydW4tcG9zdGluc3RzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc2F0by1pY29uLXRoZW1lID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2F0by1zY3JlZW5zaG90ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2JjID0gIkZlZG9yYT1zYmMgRGViaWFuPWxpYnNiYzEiCitESVNUUk9fUE5fQUxJQVNfcG4tc2NyZWVuc2hvdCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNjcm5zYXZlcnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXNjcm5zYXZlcnByb3RvIFVidW50dT14MTFwcm90by1zY3Juc2F2ZXItZGV2IERlYmlhbj14MTFwcm90by1zY3Juc2F2ZXItZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXNldHRpbmdzLWRhZW1vbiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNnbWwtY29tbW9uID0gIk9wZW5TdVNFPXNnbWwtY29tbW9uIEZlZG9yYT1zZ21sLWNvbW1vbiIKK0RJU1RST19QTl9BTElBU19wbi1zZ21sc3BsID0gIkRlYmlhbj1zZ21sc3BsIFVidW50dT1zZ21sc3BsIgorRElTVFJPX1BOX0FMSUFTX3BuLXNoYWRvdy1zZWN1cmV0dHkgPSAiVWJ1bnR1PXNoYWRvdyBGZWRvcmE9c2hhZG93IgorRElTVFJPX1BOX0FMSUFTX3BuLXNoYWRvdy1zeXNyb290ID0gIlVidW50dT1zaGFkb3cgRmVkb3JhPXNoYWRvdyIKK0RJU1RST19QTl9BTElBU19wbi1zaGFzdW0gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zaHV0ZG93bi1kZXNrdG9wID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2lnbmdwID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc3RhdCA9ICJEZWJpYW49Y29yZXV0aWxzIEZlZG9yYT1jb3JldXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tc3dhYmJlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c2tsb2dkID0gIkRlYmlhbj1zeXNrbG9nZCBNYW5kcml2YT1zeXNrbG9nZCIKK0RJU1RST19QTl9BTElBU19wbi1zeXNwcm9mID0gIkZlZG9yYT1zeXNwcm9mIERlYmlhbj1zeXNwcm9mIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3RlbWQtY29tcGF0LXVuaXRzID0gIkZlZG9yYT1zeXN0ZW1kIFVidW50dT1zeXN0ZW1kIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3RlbWQtc3lzdGVtY3RsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtZC1zeXN0ZW1kY3RsID0gIkZlZG9yYT1zeXN0ZW1kIFVidW50dT1zeXN0ZW1kIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3RlbXRhcC11cHJvYmVzID0gIlVidW50dT1zeXN0ZW10YXAgRGViaWFuPXN5c3RlbXRhcCIKK0RJU1RST19QTl9BTElBU19wbi1zeXN2aW5pdC1pbml0dGFiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdGFibGUgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tdGFyLXJlcGxhY2VtZW50ID0gIkZlZG9yYT10YXIgVWJ1bnR1PXRhciIKK0RJU1RST19QTl9BTElBU19wbi10Y2YtYWdlbnQgPSAiV2luZHJpdmVyIHVwc3RyZWFtPWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZHNkcC90bS8iCitESVNUUk9fUE5fQUxJQVNfcG4tdGVsZXBhdGh5LXB5dGhvbiA9ICJEZWJpYW49dGVsZXBhdGh5LXB5dGhvbiBVYnVudHU9dGVsZXBhdGh5LXB5dGhvbiIKK0RJU1RST19QTl9BTElBU19wbi10ZXhpbmZvLWR1bW15LW5hdGl2ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXRpbnktaW5pdCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi10aW55bG9naW4gPSAiRGViaWFuPWJ1c3lib3ggVWJ1bnR1PWJ1c3lib3ggTWFuZHJpdmE9YnVzeWJveCIKK0RJU1RST19QTl9BTElBU19wbi10cmFjZS1jbWQgPSAiTWFuZHJpdmE9dHJhY2UtY21kIFVidW50dT10cmFjZS1jbWQiCitESVNUUk9fUE5fQUxJQVNfcG4tdHJhcHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXRyYXBwcm90byIKK0RJU1RST19QTl9BTElBU19wbi10cmVtb3IgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3d3dy54aXBoLm9yZy92b3JiaXMvIgorRElTVFJPX1BOX0FMSUFTX3BuLXRzbGliID0gIkRlYmlhbj10c2xpYiBVYnVudHU9dHNsaWIiCitESVNUUk9fUE5fQUxJQVNfcG4tdHRmLWJpdHN0cmVhbS12ZXJhID0gIkRlYmlhbj10dGYtYml0c3RyZWFtLXZlcmEgVWJ1bnR1PXR0Zi1iaXRzdHJlYW0tdmVyYSIKK0RJU1RST19QTl9BTElBU19wbi10emNvZGUgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tdS1ib290LWZ3LXV0aWxzID0gIlVidW50dT11LWJvb3QtdG9vbHMgRGViaWFuPXUtYm9vdC10b29scyIKK0RJU1RST19QTl9BTElBU19wbi11LWJvb3QtbWtpbWFnZSA9ICJVYnVudHU9dWJvb3QtbWtpbWFnZSBEZWJpYW49dWJvb3QtbWtpbWFnZSIKK0RJU1RST19QTl9BTElBU19wbi11ZGV2LWV4dHJhY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVuZnMzID0gIkRlYmlhbj11bmZzMyBGZWRvcmE9dW5mczMiCitESVNUUk9fUE5fQUxJQVNfcG4tdW5mcy1zZXJ2ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11bmluYXRpdmUtdGFyYmFsbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyA9ICJPcGVuc3VzZT11cGRhdGUtYWx0ZXJuYXRpdmVzIE1hbmRyaXZhPXVwZGF0ZS1hbHRlcm5hdGl2ZXMiCitESVNUUk9fUE5fQUxJQVNfcG4tdXBkYXRlLXJjLmQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11c2Jpbml0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdXRpbC1tYWNyb3MgPSAiTWVlZ289eG9yZy14MTEtdXRpbC1tYWNyb3MgRmVkb3JhPXhvcmcteDExLXV0aWwtbWFjcm9zIE1hbmRyaXZhPXgxMS11dGlsLW1hY3JvcyIKK0RJU1RST19QTl9BTElBU19wbi12ODZkID0gIkRlYmlhbj12ODZkIFVidW50dT12ODZkIgorRElTVFJPX1BOX0FMSUFTX3BuLXZpZGVvcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tdmlkZW9wcm90byIKK0RJU1RST19QTl9BTElBU19wbi13YWZmbGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi13YXRjaGRvZyA9ICJEZWJpYW49d2F0Y2hkb2cgVWJ1bnR1PXdhdGNoZG9nIE1hbmRyaXZhPXdhdGNoZG9nIgorRElTVFJPX1BOX0FMSUFTX3BuLXdlYmtpdGd0ayA9ICJGZWRvcmE9d2Via2l0Z3RrIFVidW50dT1saWJ3ZWJraXQiCitESVNUUk9fUE5fQUxJQVNfcG4td2ViLXdlYmtpdCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXdlc3RvbiA9ICJGZWRvcmE9d2VzdG9uIE9wZW5TdVNFPXdlc3RvbiIKK0RJU1RST19QTl9BTElBU19wbi13ZXN0b24taW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXdoaWNoID0gIk1hbmRyaXZhPXdoaWNoIEZlZG9yYT13aGljaCIKK0RJU1RST19QTl9BTElBU19wbi13cGEtc3VwcGxpY2FudCA9ICJNZWVnbz13cGFfc3VwcGxpY2FudCBGZWRvcmE9d3BhX3N1cHBsaWNhbnQgT3BlblN1U0U9d3BhX3N1cHBsaWNhbnQgVWJ1bnR1PXdwYXN1cHBsaWNhbnQgTWFuZHJpdmE9d3BhX3N1cHBsaWNhbnQgRGViaWFuPXdwYXN1cHBsaWNhbnQiCitESVNUUk9fUE5fQUxJQVNfcG4teDExLWNvbW1vbiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXgxMXBlcmYgPSAiRmVkb3JhPXhvcmcteDExLWFwcHMgVWJ1bnR1PXgxMS1hcHBzIgorRElTVFJPX1BOX0FMSUFTX3BuLXgxMXZuYyA9ICJGZWRvcmE9eDExdm5jIFVidW50dT14MTF2bmMiCitESVNUUk9fUE5fQUxJQVNfcG4teGNiLXV0aWwtaW1hZ2UgPSAiRGViaWFuPXhjYi11dGlsIEZlZG9yYT14Y2ItdXRpbCIKK0RJU1RST19QTl9BTElBU19wbi14Y2ItdXRpbC1rZXlzeW1zID0gIkRlYmlhbj14Y2ItdXRpbCBGZWRvcmE9eGNiLXV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4teGNiLXV0aWwtd20gPSAiRGViaWFuPXhjYi11dGlsIEZlZG9yYT14Y2ItdXRpbCIKK0RJU1RST19QTl9BTElBU19wbi14Y21pc2Nwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Y21pc2Nwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4teGRweWluZm8gPSAiRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGV2ID0gIkZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhleHRwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14ZXh0cHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGV5ZXMgPSAiVWJ1bnR1PXgxMS1hcHBzIEZlZG9yYT14b3JnLXgxMS1hcHBzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZiaWdmb250cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NmJpZ2ZvbnRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2ZGdhcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NmRnYXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZkcmlwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2ZHJpcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1ldmRldiA9ICJVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LWV2ZGV2IE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtZXZkZXYgRGViaWFuPXhzZXJ2ZXIteG9yZy1pbnB1dC1ldmRldiBGZWRvcmE9eG9yZy14MTEtZHJ2LWV2ZGV2IE1lZWdvPXhvcmcteDExLWRydi1ldmRldiIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LWtleWJvYXJkID0gIk1lZWdvPXhvcmcteDExLWRydi1rZXlib2FyZCBGZWRvcmE9eG9yZy14MTEtZHJ2LWtleWJvYXJkIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQta2V5Ym9hcmQgRGViaWFuPXhzZXJ2ZXIteG9yZy1pbnB1dC1rZXlib2FyZCIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LW1vdXNlID0gIlVidW50dT14c2VydmVyLXhvcmctaW5wdXQtbW91c2UgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1tb3VzZSBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LW1vdXNlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtc3luYXB0aWNzID0gIk1lZWdvPXhvcmcteDExLWRydi1zeW5hcHRpY3MgRmVkb3JhPXhvcmcteDExLWRydi1zeW5hcHRpY3MgVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC1zeW5hcHRpY3MgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1zeW5hcHRpY3MgRGViaWFuPXhmcmVlODYtZHJpdmVyLXN5bmFwdGljcyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LXZtbW91c2UgPSAiRmVkb3JhPXhvcmcteDExLWRydi12bW1vdXNlIFVidW50dT14c2VydmVyLXhvcmctaW5wdXQtdm1tb3VzZSBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LXZtbW91c2UgRGViaWFuPXhzZXJ2ZXIteG9yZy1pbnB1dC12bW1vdXNlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZtaXNjcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4Nm1pc2Nwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2cnVzaHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZydXNocHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1jaXJydXMgPSAiT3BlbnN1c2U9eGY4Ni12aWRlby1jaXJydXMgRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1jaXJydXMiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1mYmRldiA9ICJVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLWZiZGV2IERlYmlhbj14c2VydmVyLXhvcmctdmlkZW8tZmJkZXYiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1pbnRlbCA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLWludGVsIEZlZG9yYT14b3JnLXgxMS1kcnYtaW50ZWwgTWFuZHJpdmE9eDExLWRyaXZlci12aWRlby1pbnRlbCBNZWVnbz14b3JnLXgxMS1kcnYtaW50ZWwgVWJ1bnR1PXhzZXJ2ZXIteG9yZy12aWRlby1pbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIkRlYmlhbj14c2VydmVyLXhvcmctdmlkZW8tbW9kZXNldHRpbmcgRmVkb3JhPXhmODYtdmlkZW8tbW9kZXNldHRpbmciCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1vbWFwID0gIlVidW50dT14Zjg2LXZpZGVvLW9tYXAgRGViaWFuPXhmODYtdmlkZW8tb21hcCIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLW9tYXBmYiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLXZlc2EgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby12ZXNhIEZlZG9yYT14b3JnLXgxMS1kcnYtdmVzYSBNYW5kcml2YT14MTEtZHJpdmVyLXZpZGVvLXZlc2EgVWJ1bnR1PXhzZXJ2ZXIteG9yZy12aWRlby12ZXNhIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tdm13YXJlID0gIkRlYmlhbj14c2VydmVyLXhvcmctdmlkZW8tdm13YXJlIEZlZG9yYT14b3JnLXgxMS1kcnYtdm13YXJlIE1hbmRyaXZhPXgxMS1kcml2ZXItdmlkZW8tdm13YXJlIFVidW50dT14c2VydmVyLXhvcmctdmlkZW8tdm13YXJlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZ2aWRtb2RlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NnZpZG1vZGVwcm90byBVYnVudHU9eDExcHJvdG8teGY4NnZpZG1vZGUgRGViaWFuPXgxMXByb3RvLXhmODZ2aWRtb2RlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhob3N0ID0gIlVidW50dT14MTEteHNlcnZlci11dGlscyBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhpbmVyYW1hcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGluZXJhbWFwcm90byBVYnVudHU9eDExcHJvdG8teGluZXJhbWEgRGViaWFuPXgxMXByb3RvLXhpbmVyYW1hIgorRElTVFJPX1BOX0FMSUFTX3BuLXhpbnB1dC1jYWxpYnJhdG9yID0gIkZlZG9yYT14aW5wdXQtY2FsaWJyYXRvciBNYW5kcmF2aWE9eGlucHV0LWNhbGlicmF0b3IgVWJ1bnR1PXhpbnB1dC1jYWxpYnJhdG9yIgorRElTVFJPX1BOX0FMSUFTX3BuLXhrYmNvbXAgPSAiVWJ1bnR1PXgxMS14a2ItdXRpbHMgRmVkb3JhPXhvcmcteDExLXhrYi11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14bW9kbWFwID0gIk1lZWdvPXhvcmcteDExLXV0aWxzLXhtb2RtYXAgRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyBVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teG9yZy1taW5pbWFsLWZvbnRzID0gIlVidW50dT14Zm9udHMtYmFzZSBGZWRvcmE9eG9yZy14MTEtZm9udHMtYmFzZSIKK0RJU1RST19QTl9BTElBU19wbi14cHJvcCA9ICJNZWVnbz14b3JnLXgxMS11dGlscy14cHJvcCBGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teHByb3RvIEZlZG9yYT14b3JnLXgxMS1wcm90by1kZXZlbCBVYnVudHU9eDExcHJvdG8tY29yZS1kZXYgRGViaWFuPXgxMXByb3RvLWNvcmUtZGV2IE9wZW5zdXNlPXhvcmcteDExLXByb3RvLWRldmVsIE1hbmRyaXZhPXgxMS1wcm90by1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi14cHJveHltYW5hZ2VtZW50cHJvdG9jb2wgPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teHByb3h5bWFuYWdlbWVudHByb3RvY29sIgorRElTVFJPX1BOX0FMSUFTX3BuLXhyYW5kciA9ICJVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMgRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14cmRiID0gIlVidW50dT14MTEteHNlcnZlci11dGlscyBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXJ2ZXItbm9kbS1pbml0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14Zjg2LWNvbmZpZyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXJ2ZXIteGY4Ni1kcmktbGl0ZSA9ICJGZWRvcmE9eG9yZy14MTEtc2VydmVyIFVidW50dT14c2VydmVyLXhvcmciCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14Zjg2LWxpdGUgPSAiRmVkb3JhPXhvcmcteDExLXNlcnZlciBVYnVudHU9eHNlcnZlci14b3JnIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXJ2ZXIteG9yZyA9ICJGZWRvcmE9eG9yZy14MTEtc2VydmVyIFVidW50dT14c2VydmVyLXhvcmciCitESVNUUk9fUE5fQUxJQVNfcG4teHNldCA9ICJGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIFVidW50dT14MTEteHNlcnZlci11dGlscyBEZWJpYW49eDExLXhzZXJ2ZXItdXRpbHMgT3BlbnN1c2U9eG9yZy14MTEiCitESVNUUk9fUE5fQUxJQVNfcG4teHRzY2FsID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9ncGUubGludXh0b2dvLm9yZy9kb3dubG9hZC9zb3VyY2UvIgorRElTVFJPX1BOX0FMSUFTX3BuLXh1c2VyLWFjY291bnQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14dmlkZW8tdGVzdHMgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi14dmluZm8gPSAiRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHdpbmluZm8gPSAiRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teWFmZnMyLXV0aWxzID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93d3cueWFmZnMubmV0IgorRElTVFJPX1BOX0FMSUFTX3BuLXphdXJ1c2QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi16ZXJvY29uZiA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd3d3LnByb2dzb2Mub3JnL353aWxkZmlyZS96ZXJvY29uZi8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9wYWNrYWdlX3JlZ2V4LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjk5OWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9wYWNrYWdlX3JlZ2V4LmluYwpAQCAtMCwwICsxLDI3OCBAQAorIyBwYWNrYWdlX3JlZ2V4LmluYyAtIFRoaXMgZmlsZSBjb250YWlucyBkYXRhIHRoYXQgdHJhY2tzCisjIHVwc3RyZWFtIHByb2plY3QgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcmVjaXBlLiBUaGlzIGxpc3QgaXMgbmVlZGVkCisjIGZvciByZWNpcGVzIHRoYXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYW4gbm90IGJlIGF1dG9tYWdpY2FsbHkgZGlzY292ZXJlZC4KKyMgQXMgd2UgYXV0b21hdGUgdGhpcyBjaGVja2luZywgdGhpcyBmaWxlIHdpbGwgc2xvd2x5IGJlIHJlZHVjZWQuCisjIgorIyBUaGlzIGRhdGEgaXMgdXNlZCBieSB0aGUgcGFja2FnZSByZXBvcnRpbmcgc3lzdGVtIChwYWNrYWdlcy55b2N0b3Byb2plY3Qub3JnKQorIyIKKyMgVGhlIGZvcm1hdCBpcyBhcyBhIGJpdGJha2UgdmFyaWFibGUgb3ZlcnJpZGUgZm9yIGVhY2ggcmVjaXBlCisjIgorIyAgICAgICBSRUdFWF9VUklfcG4tPHJlY2lwZSBuYW1lPiA9ICJyZWNpcGVfdXJsIgorIwkgLSBUaGlzIGlzIHRoZSB1cmwgdXNlZCBieSB0aGUgcGFja2FnZSBjaGVja2luZyBzeXN0ZW0gdG8KKyMJICAgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcGFja2FnZQorIyAgICAgICBSRUdFWF9wbi08cmVjaXBlIG5hbWU+ID0gInBhY2thZ2VfcmVnZXgiCisjCSAtIFRoaXMgaXMgdGhlIHJlZ2V4IHRoZSBwYWNrYWdlIGNoZWNraW5nIHN5c3RlbSB1c2VzIHRvCisjCSAgIHBhcnNlIHRoZSBwYWdlIGZvdW5kIGF0IFJFR0VYX1VSSV9wbi08cmVjaXBlIG5hbWU+CisjCUdJVFRBR1JFR0VYX3BuLTxyZWNpcGUgbmFtZT4gPSAiZ2l0X3RhZ19yZWdleCIKKyMJIC0gV2hlbiBzb3VyY2UgY29kZSBpcyBmZXRjaGVkIGZyb20gZ2l0LCBnaXQgdGFncyBhcmUgdXNlZCB0bworIwkgICBkZXRlcm1pbmUgdGhlIHVwc3RyZWFtIHJlbGVhc2UgdmVyc2lvbi4gVGhpcyByZWdleCBjYW4gYmUgdXNlZAorIwkgICB0byBmaWx0ZXIgb25seSByZWxldmFudCB0YWdzLgorIworCitDT01NT05fUkVHRVggPSAiKD9QPHB2ZXI+KFxkK1tcLlwtX10qKSspIgorCisjIEdlbmVyaWMgcmVnZXggZG9uJ3QgbWF0Y2gKK1JFR0VYX1VSSV9wbi13aXJlbGVzcy10b29scyA9ICJodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWwiCitSRUdFWF9wbi13aXJlbGVzcy10b29scyA9ICJ3aXJlbGVzc190b29sc1wuKD9QPHB2ZXI+KFxkKykoXC4uKnwpKVwudGFyXC5neiIKKworUkVHRVhfVVJJX3BuLXNxbGl0ZTM9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy8iCitSRUdFWF9wbi1zcWxpdGUzPSJyZWxlYXNlbG9nLyR7Q09NTU9OX1JFR0VYfS5odG1sIgorCitSRUdFWF9VUklfcG4tZGhjcCA9ICJmdHA6Ly9mdHAuaXNjLm9yZy9pc2MvZGhjcC8iCitSRUdFWF9wbi1kaGNwPSIoP1A8cHZlcj5cZCtcLlxkK1wuKFxkKz8pKS8iCisKK1JFR0VYX3BuLWZvb21hdGljLWZpbHRlcnMgPSAiZm9vbWF0aWMtZmlsdGVycy0oP1A8cHZlcj4oKFxkfFxkXGQpXC4qKSspXC50YXJcLmd6IgorUkVHRVhfcG4teGRnLXV0aWxzID0gInhkZy11dGlscy0oP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKChyY3xhbHBoYXxiZXRhKVxkKyk/KVwuKHRhclwuZ3p8dGd6KSIKK1JFR0VYX3BuLXJwbT0icnBtLSR7Q09NTU9OX1JFR0VYfS0uKiQiCitSRUdFWF9wbi1saWJ0aGVvcmEgPSAibGlidGhlb3JhLSg/UDxwdmVyPlxkKyhcLlxkKSspXC4odGFyXC5nenx0Z3opIgorCitSRUdFWF9wbi1pcHV0aWxzPSJpcHV0aWxzLSg/UDxwdmVyPnNcZCspLnRhciIKK1JFR0VYX3BuLW5ldHRsZSA9ICJuZXR0bGUtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCisKK1JFR0VYX3BuLWNhaXJvID0gImNhaXJvLSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorUkVHRVhfcG4tY21ha2UgPSAiY21ha2UtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCitSRUdFWF9wbi1saWJzZGwgPSAiU0RMLSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorUkVHRVhfcG4tbGlieHNsdCA9ICJsaWJ4c2x0LSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorCisjIEV4Y2x1ZGUgTkMgdmVyc2lvbnMgd2hpY2ggbGFjayBBRVMgZW5jcnlwdGlvbgorUkVHRVhfcG4tZGIgPSAiZGItKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspPykudGFyIgorCitSRUdFWF9VUklfcG4tYXV0b2dlbiA9ICJodHRwOi8vZnRwLmdudS5vcmcvZ251L2F1dG9nZW4vIgorUkVHRVhfcG4tYXV0b2dlbiA9ICJyZWwoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorCisjIHB5dGhvbiByZWNpcGUgaXMgYWN0dWFsbHkgcHl0aG9uIDIueAorIyBhbHNvLCBleGNsdWRlIHByZS1yZWxlYXNlcyBmb3IgYm90aCBweXRob24gMi54IGFuZCAzLngKK1JFR0VYX3BuLXB5dGhvbiA9ICJbUHBdeXRob24tKD9QPHB2ZXI+MihcLlxkKykrKS50YXIiCitSRUdFWF9wbi1weXRob24zID0gIltQcF15dGhvbi0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgorCisjIGV4Y2x1ZGUgYmV0YXMKK1JFR0VYX3BuLXRpZmYgPSAidGlmZi0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgorCisjIGV4Y2x1ZGUgdmVyc2lvbiA1LjUuMiB3aGljaCB0cmlnZ2VycyBhIGZhbHNlIHBvc2l0aXZlCitSRUdFWF9wbi11bnppcCA9ICJ1bnppcCg/UDxwdmVyPig/ITU1MikuKylcLnRneiIKKyMgc2ltaWxhciBmb3IgemlwCitSRUdFWF9wbi16aXAgPSAiXnppcCg/UDxwdmVyPig/ITIzMikuKylcLnRneiIKKworIyBJc24ndCBwb3NzaWJsZSB0byBkb3dubG9hZCB3aXRoIHRoZSBkZWZhdWx0IFVSSSB3ZWIgc2VydmVyIHJldHVybnMKKyMgKDQwMywgNDA0LCA1NTApCitSRUdFWF9VUklfcG4tZG9zZnN0b29scyA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzL3JlbGVhc2VzIgorUkVHRVhfcG4tanNvbi1jID0gImpzb24tYy0oP1A8cHZlcj5cZCsoXC5cZCspKykudGFyIgorIyBqc29uLWMgcmVsZWFzZXMgcGFnZSBpcyBmZXRjaGluZyB0aGUgbGlzdCBvZiByZWxlYXNlcyBpbiBzb21lIHdlaXJkIFhNTCBmb3JtYXQKKyMgZnJvbSBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzIGFuZCBwcm9jZXNzZXMgaXQgd2l0aCBqYXZhc2NyaXB0IDotLworI1JFR0VYX1VSSV9wbi1qc29uLWMgPSAiaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2pzb24tY19yZWxlYXNlcy9yZWxlYXNlcy9pbmRleC5odG1sIgorUkVHRVhfVVJJX3BuLWNocnBhdGggPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy8/Z3JvdXBfaWQ9MzEwNTIiCisKK1JFR0VYX1VSSV9wbi1wb3dlcnRvcCA9ICJodHRwczovLzAxLm9yZy9wb3dlcnRvcC9kb3dubG9hZHMiCitSRUdFWF9VUklfcG4tbGlic2FtcGxlcmF0ZTAgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL1NSQy9kb3dubG9hZC5odG1sIgorUkVHRVhfVVJJX3BuLWxpYnhrYmNvbW1vbiA9ICJodHRwOi8veGtiY29tbW9uLm9yZy8iCitSRUdFWF9VUklfcG4tdHNsaWIgPSAiaHR0cHM6Ly9naXRodWIuY29tL2tlcmdvdGgvdHNsaWIvcmVsZWFzZXMiCitSRUdFWF9VUklfcG4td2FmZmxlPSJodHRwOi8vd3d3LndhZmZsZS1nbC5vcmcvcmVsZWFzZXMuaHRtbCIKK1JFR0VYX1VSSV9wbi1scnpzeiA9ICJodHRwOi8vb2hzZS5kZS91d2Uvc29mdHdhcmUvbHJ6c3ouaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJhY3BpID0gImh0dHA6Ly93d3cubmdvbGRlLmRlL2xpYmFjcGkuaHRtbCIKK1JFR0VYX1VSSV9wbi1sZXNzICA9ICJodHRwOi8vd3d3LmdyZWVud29vZHNvZnR3YXJlLmNvbS9sZXNzL2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tY3VwcyA9ICJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLnBocCIKK1JFR0VYX3BuLWN1cHMgPSAiY3Vwcy0oP1A8cHZlcj5cZCtcLlxkKyhcLlxkKyk/KS1zb3VyY2UudGFyIgorUkVHRVhfVVJJX3BuLWJ6aXAyID0gImh0dHA6Ly93d3cuYnppcC5vcmcvZG93bmxvYWRzLmh0bWwiCitSRUdFWF9VUklfcG4tbWluaWNvbSA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy8/Z3JvdXBfaWQ9MzAwMTgiCitSRUdFWF9VUklfcG4tc3lzc3RhdCA9ICJodHRwOi8vc2ViYXN0aWVuLmdvZGFyZC5wYWdlc3BlcnNvLW9yYW5nZS5mci9kb3dubG9hZC5odG1sIgorUkVHRVhfVVJJX3BuLWxpYmljYWwgPSAiaHR0cHM6Ly9naXRodWIuY29tL2xpYmljYWwvbGliaWNhbC9yZWxlYXNlcy8iCitSRUdFWF9VUklfcG4tbGlibXBjID0gImh0dHA6Ly93d3cubXVsdGlwcmVjaXNpb24ub3JnL2luZGV4LnBocD9wcm9nPW1wYyZwYWdlPWRvd25sb2FkIgorUkVHRVhfVVJJX3BuLXRhZ2xpYiA9ICJodHRwOi8vZ2l0aHViLmNvbS90YWdsaWIvdGFnbGliL3JlbGVhc2VzLyIKK1JFR0VYX1VSSV9wbi1saWJldmVudCA9ICJodHRwOi8vbGliZXZlbnQub3JnLyIKK1JFR0VYX1VSSV9wbi1kYiA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvcHJvZHVjdHMvYmVya2VsZXlkYi9kb3dubG9hZHMvaW5kZXgtMDgyOTQ0Lmh0bWwiCitSRUdFWF9VUklfcG4tcHl0aG9uLXNtYXJ0cG09Imh0dHBzOi8vbGF1bmNocGFkLm5ldC9zbWFydC90cnVuay8iCitSRUdFWF9VUklfcG4tbHNvZiA9ICJmdHA6Ly9zdW5zaXRlLnVhbGJlcnRhLmNhL3B1Yi9NaXJyb3IvbHNvZi8iCitSRUdFWF9VUklfcG4tcGJ6aXAyID0gImh0dHA6Ly9jb21wcmVzc2lvbi5jYS9wYnppcDIvIgorUkVHRVhfVVJJX3BuLXF1aWNreSA9ICJodHRwOi8vcXQtYXBwcy5vcmcvY29udGVudC9kb3dubG9hZC5waHA/Y29udGVudD04MDMyNSZpZD0xJnRhbj0xMDQxNzQ4MiIKK1JFR0VYX1VSSV9wbi1saWJ3ZWJwID0gImh0dHA6Ly9kb3dubG9hZHMud2VibXByb2plY3Qub3JnL3JlbGVhc2VzL3dlYnAvaW5kZXguaHRtbCIKKworIyBUaGUgZW5naW5lIHRyaWVzIHRvIHVzZSBkaXJlY3RvcnkgdmVyc2lvbmluZyBidXQgaXMgYSBmYWxzZS1wb3NpdGl2ZQorUkVHRVhfVVJJX3BuLWludGx0b29sID0gImh0dHBzOi8vbGF1bmNocGFkLm5ldC9pbnRsdG9vbC90cnVuay8iCitSRUdFWF9VUklfcG4tbGlibmZzaWRtYXAgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC9saWJuZnNpZG1hcC8iCitSRUdFWF9VUklfcG4tbXBmciA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItY3VycmVudC8iCitSRUdFWF9VUklfcG4tbnNzID0gImh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9Qcm9qZWN0cy9OU1MvTlNTX1JlbGVhc2VzIgorUkVHRVhfcG4tbnNzID0gIk5TU18oP1A8cHZlcj4uKylfcmVsZWFzZV9ub3RlcyIKKworUkVHRVhfVVJJX3BuLWRvY2Jvb2stc2dtbC1kdGQtMy4xID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8iCitSRUdFWF9wbi1kb2Nib29rLXNnbWwtZHRkLTMuMSA9ICIoP1A8cHZlcj4zXC4uKykvIgorUkVHRVhfVVJJX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8iCitSRUdFWF9wbi1kb2Nib29rLXNnbWwtZHRkLTQuMSA9ICIoP1A8cHZlcj40XC4xKFwuXGQrKSopLyIKKworIyBRdCByZWNpcGVzIHNob3VsZCBiZSBrZXB0IGF0IDQueAorUkVHRVhfVVJJX3BuLXF0NC1lbWJlZGRlZCA9ICJodHRwOi8vZG93bmxvYWQucXQuaW8vb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyIKK1JFR0VYX3BuLXF0NC1lbWJlZGRlZCA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorUkVHRVhfVVJJX3BuLXF0NC14MTEtZnJlZSA9ICJodHRwOi8vZG93bmxvYWQucXQuaW8vb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyIKK1JFR0VYX3BuLXF0NC14MTEtZnJlZSA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorUkVHRVhfVVJJX3BuLW5hdGl2ZXNkay1xdDQtdG9vbHMgPSAiaHR0cDovL2Rvd25sb2FkLnF0LmlvL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8iCitSRUdFWF9wbi1uYXRpdmVzZGstcXQ0LXRvb2xzID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitSRUdFWF9VUklfcG4tcXQ0LW5hdGl2ZSA9ICJodHRwOi8vZG93bmxvYWQucXQuaW8vb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyIKK1JFR0VYX3BuLXF0NC1uYXRpdmUgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKKworIyBQeVBJIHNpdGVzCitSRUdFWF9VUklfcG4tcHl0aG9uLW5vc2UgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9ub3NlLyIKK1JFR0VYX3BuLXB5dGhvbi1ub3NlID0gIi9ub3NlLyR7Q09NTU9OX1JFR0VYfSIKKyMgcHl0aG9uLWRpc3RyaWJ1dGUgMC43LnggaXMgYSBzaW1wbGUgY29tcGF0aWJpbGl0eSBsYXllciB0aGF0IGluc3RhbGxzIFNldHVwdG9vbHMgMC43Ky4KKyMgc28gd2Ugc3RpY2sgdG8gMC42Lnggc2VyaWVzCitSRUdFWF9VUklfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9kaXN0cmlidXRlLyIKK1JFR0VYX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIi9kaXN0cmlidXRlLyg/UDxwdmVyPlxkKy42LlxkKykiCitSRUdFWF9VUklfcG4tcHl0aG9uLWdpdGRiID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvZ2l0ZGIvIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1hc3luYyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2FzeW5jLyIKK1JFR0VYX1VSSV9wbi1weXRob24tc21tYXAgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zbW1hcC8iCitSRUdFWF9wbi1weXRob24tc21tYXAgPSAiL3NtbWFwLyR7Q09NTU9OX1JFR0VYfSIKK1JFR0VYX1VSSV9wbi1weXRob24tZ2l0ID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvR2l0UHl0aG9uLyIKK1JFR0VYX3BuLXB5dGhvbi1naXQgPSAiL0dpdFB5dGhvbi8ke0NPTU1PTl9SRUdFWH0iCitSRUdFWF9VUklfcG4tcHl0aG9uLW1ha28gPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9tYWtvLyIKK1JFR0VYX3BuLXB5dGhvbi1tYWtvID0gIi9NYWtvLyR7Q09NTU9OX1JFR0VYfSIKK1JFR0VYX1VSSV9wbi1weXRob24tcGV4cGVjdCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BleHBlY3QiCitSRUdFWF9VUklfcG4tcHl0aG9uMy1waXAgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9waXAiCitSRUdFWF9VUklfcG4tcHl0aG9uMy1zZXR1cHRvb2xzID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc2V0dXB0b29scyIKKworIyBTb3VyY2Vmb3JnZSBzaXRlcworUkVHRVhfVVJJX3BuLXB5dGhvbi1zY29ucyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3Njb25zL2ZpbGVzL3Njb25zLyIKK1JFR0VYX3BuLXB5dGhvbi1zY29ucyA9ICIvc2NvbnMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1leHBlY3QgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBlY3QvZmlsZXMvRXhwZWN0LyIKK1JFR0VYX3BuLWV4cGVjdCA9ICIvRXhwZWN0LyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZG9jYm9vay14c2wtc3R5bGVzaGVldHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9kb2Nib29rL2ZpbGVzL2RvY2Jvb2steHNsLyIKK1JFR0VYX3BuLWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzID0gIi9kb2Nib29rLXhzbC8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWdsZXcgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nbGV3L2ZpbGVzL2dsZXciCitSRUdFWF9wbi1nbGV3ID0gIi9nbGV3LyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tbWVudS1jYWNoZSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2x4ZGUvZmlsZXMvbWVudS1jYWNoZS8xLjAvIgorUkVHRVhfVVJJX3BuLXgxMXZuYyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnZuY3NlcnZlci9maWxlcy94MTF2bmMvIgorUkVHRVhfcG4teDExdm5jID0gIi94MTF2bmMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1xdW90YSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4cXVvdGEvZmlsZXMvcXVvdGEtdG9vbHMvIgorUkVHRVhfcG4tcXVvdGEgPSAiL3F1b3RhLXRvb2xzLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tbHNiID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbHNiL2ZpbGVzL2xzYl9yZWxlYXNlLyIKK1JFR0VYX3BuLWxzYiA9ICIvbHNiX3JlbGVhc2UvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1saWJwY3JlID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGNyZS9maWxlcy9wY3JlLyIKK1JFR0VYX3BuLWxpYnBjcmUgPSAiL3BjcmUvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1saWJ1c2ItY29tcGF0ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlidXNiL2ZpbGVzL2xpYnVzYi1jb21wYXQtMC4xLyIKK1JFR0VYX3BuLWxpYnVzYi1jb21wYXQgPSAiL2xpYnVzYi1jb21wYXQtJHtDT01NT05fUkVHRVh9LyQiCitSRUdFWF9VUklfcG4tc3lzZnN1dGlscyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4LWRpYWcvZmlsZXMvc3lzZnN1dGlscy8iCitSRUdFWF9wbi1zeXNmc3V0aWxzID0gIi9zeXNmc3V0aWxzLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tY29uc29sZS10b29scyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xjdC9maWxlcy9jb25zb2xlLXRvb2xzLWRldmVsLyIKK1JFR0VYX3BuLWNvbnNvbGUtdG9vbHMgPSAiL2NvbnNvbGUtdG9vbHMtZGV2ZWwvKD9QPHB2ZXI+KFxkXGQ/XC4pK1xkXGQ/KS8iCitSRUdFWF9VUklfcG4td2F0Y2hkb2cgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy93YXRjaGRvZy9maWxlcy93YXRjaGRvZy8iCitSRUdFWF9wbi13YXRjaGRvZyA9ICIvd2F0Y2hkb2cvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1jcmFja2xpYiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NyYWNrbGliL2ZpbGVzL2NyYWNrbGliLyIKK1JFR0VYX3BuLWNyYWNrbGliID0gIi9jcmFja2xpYi8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWdwdGZkaXNrID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ3B0ZmRpc2svZmlsZXMvZ3B0ZmRpc2svIgorUkVHRVhfcG4tZ3B0ZmRpc2sgPSAiL2dwdGZkaXNrLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tbGlicG5nMTIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJwbmcvZmlsZXMvbGlicG5nMTIvIgorUkVHRVhfcG4tbGlicG5nMTIgPSAiL2xpYnBuZzEyLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RvY2Jvb2svZmlsZXMvZG9jYm9vay1kc3NzbC8iCitSRUdFWF9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzID0gIi9kb2Nib29rLWRzc3NsLyR7Q09NTU9OX1JFR0VYfS8iCisKK1JFR0VYX1VSSV9wbi1vcGVuamFkZSA9ICJodHRwOi8vb3BlbmphZGUuc291cmNlZm9yZ2UubmV0L2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tbGlicGZtNCA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BlcmZtb24yL2ZpbGVzL2xpYnBmbTQvIgorUkVHRVhfVVJJX3BuLWxpYmE1MiA9ICJodHRwOi8vbGliYTUyLnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZHMuaHRtbCIKK1JFR0VYX1VSSV9wbi1tcGVnMmRlYyA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0L2Rvd25sb2Fkcy5odG1sIgorUkVHRVhfVVJJX3BuLXBjbWFuZm0gPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wY21hbmZtL2ZpbGVzL1BDTWFuRk0lMjAlMkIlMjBMaWJmbSUyMCUyOHRhcmJhbGwlMjByZWxlYXNlJTI5L1BDTWFuRk0vIgorUkVHRVhfVVJJX3BuLWxpYmNncm91cCA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmNnL2ZpbGVzL2xpYmNncm91cC8iCitSRUdFWF9VUklfcG4tY2RydG9vbHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jZHJ0b29scy9maWxlcy9hbHBoYS8iCisKKyMgR0lUCitHSVRUQUdSRUdFWF9DT01NT04gPSAiKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspKikiCisKK0dJVFRBR1JFR0VYX3BuLWxpbnV4LXlvY3RvID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tbGludXgteW9jdG8tZGV2ID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLXVjbGliYyA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1nbGliYyA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1jcm9zcy1sb2NhbGVkZWYgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tYmludXRpbHMgPSAiYmludXRpbHMtKD9QPHB2ZXI+XGQrXyhcZF8/KSopIgorR0lUVEFHUkVHRVhfcG4tYm9vdGNoYXJ0MiA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1yZW1ha2UgPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKVwrZGJnLispIgorR0lUVEFHUkVHRVhfcG4tdGNmLWFnZW50ID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgorR0lUVEFHUkVHRVhfcG4tY2hrY29uZmlnLWFsdGVybmF0aXZlcyA9ICJjaGtjb25maWctKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCitHSVRUQUdSRUdFWF9wbi1zZ21sc3BsID0gIig/UDxwdmVyPihcZCsoXC5cZCspKykpIgorCisjIEV4Y2x1ZGUgeC45OS54IHZlcnNpb25zCitHSVRUQUdSRUdFWF9wbi1teC0xLjAgPSAiKD9QPHB2ZXI+XlxkKyhcLig/ITk5KVxkKykrKSIKKworIyBCbGFja2xpc3QgYSBib2d1cyB0YWcKK0dJVFRBR1JFR0VYX3BuLWZpbGUgPSAiRklMRSg/UDxwdmVyPig/ITZfMjMpLispIgorR0lUVEFHUkVHRVhfcG4teGluZXRkID0gInhpbmV0ZC0oP1A8cHZlcj4oPyEyMDAzMDEyMikuKykiCisKKyMgQmxhY2tsaXN0IGRlYmlhbi1zcGVjaWZpYyB0YWdzCitHSVRUQUdSRUdFWF9wbi14Zjg2LXZpZGVvLW9tYXBmYiA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykoPyEtKSIKKworIyBHTk9NRSByZWxhdGVkLgorIworIyBHTk9NRTJfU1RBQkxFIHBpY2tzIHN0YWJsZSByZWxlYXNlcyBpbiB0aGUgMi54IHNlcmllcyAoc28gbm90IDIuOTAgb253YXJkcywKKyMgd2hpY2ggd2VyZSBHTk9NRSAzIGJldGFzLgorIworIyBHTk9NRV9TVEFCTEUgcGlja3MgdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZS4KKworR05PTUUyX1NUQUJMRSA9ICIoP1A8cHZlcj4yXC4oWzAtOF0qWzAyNDY4XSkrKFwuXGQrKSspIgorR05PTUVfU1RBQkxFID0gIig/UDxwdmVyPlxkK1wuKFxkKlswMjQ2OF0pKyhcLlxkKykrKSIKKworUkVHRVhfcG4tZ2xpYi0yLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tYXRrID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWF0LXNwaTItY29yZSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hdC1zcGkyLWF0ayA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nZGstcGl4YnVmID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXBhbmdvID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWd0aysgPSAiJHtHTk9NRTJfU1RBQkxFfSIKK1JFR0VYX3BuLWd0ayszID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWd0ay1lbmdpbmVzID0gIiR7R05PTUUyX1NUQUJMRX0iCitSRUdFWF9wbi1nbGliLW5ldHdvcmtpbmcgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tbGlicnN2ZyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1saWJzb3VwLTIuNCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi12YWxhID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWNsdXR0ZXItMS4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWNsdXR0ZXItZ3RrLTEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jbHV0dGVyLWdzdC0zLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY29nbC0xLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tYWR3YWl0YS1pY29uLXRoZW1lID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXZ0ZSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1lcGlwaGFueSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi13ZWJraXRndGsgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tcDExLWtpdCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nbm9tZS1kZXNrdG9wMyA9ICIke0dOT01FX1NUQUJMRX0iCisKKyMgbm90IEdOT01FIHJlbGF0ZWQgYnV0IHVzZXMgc2FtZSBldmVuLW1pbm9yLXJlbGVhc2UtaXMtc3RhYmxlIGxvZ2ljCitSRUdFWF9wbi1kYnVzID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWRidXMtdGVzdCA9ICIke0dOT01FX1NUQUJMRX0iCisKKyMgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIGdzdHJlYW1lciByZWxlYXNlcworUkVHRVhfcG4tZ3N0cmVhbWVyMS4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1saWJhdiA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBhbmQgcGVybAorUkVHRVhfcG4tcGVybCA9ICIke0dOT01FX1NUQUJMRX0iCisKKyMgS2VlcCBvbGQgZ2NjIHZlcnNpb25zIGF0IHRoZWlyIG1ham9yIHZlcnNpb25zCitSRUdFWF9wbi1nY2Mtc291cmNlLTQuOS4zID0gImdjYy0oP1A8cHZlcj40XC45XC5cZCspLnRhciIKK1JFR0VYX3BuLWdjYy1zb3VyY2UtNC44LjQgPSAiZ2NjLSg/UDxwdmVyPjRcLjhcLlxkKykudGFyIgorCisjIHRoZXNlIHBhY2thZ2VzIGFyZSB0YWtlbiBmcm9tIHNuYXBzaG90cy5kZWJpYW4ub3JnOyB0aGF0IHNvdXJjZSBpcyBzdGF0aWMgYW5kIGdvZXMgc3RhbGUKKyMgc28gd2UgY2hlY2sgdGhlIGxhdGVzdCB1cHN0cmVhbSBmcm9tIGEgZGlyZWN0b3J5IHRoYXQgZG9lcyBnZXQgdXBkYXRlZAorUkVHRVhfVVJJX3BuLWFwdCA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYS9hcHQvIgorUkVHRVhfVVJJX3BuLXJlc29sdmNvbmYgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL3IvcmVzb2x2Y29uZi8iCitSRUdFWF9VUklfcG4tbmV0LXRvb2xzID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9uL25ldC10b29scy8iCisKKyMgc2FtZSBmb3IgcGFja2FnZXMgZnJvbSBsYXVuY2hwYWQKK1JFR0VYX1VSSV9wbi1iYXNlLXBhc3N3ZCA9ICIke0RFQklBTl9NSVJST1J9L21haW4vYi9iYXNlLXBhc3N3ZC8iCisKKyMgZm9yIHRoZXNlIHBhY2thZ2VzIHdlJ3JlIG1vc3RseSBpbnRlcmVzdGVkIGluIHRyYWNraW5nIGRlYmlhbiBwYXRjaGVzLAorIyBhbmQgbm90IGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHdoZXJlIGFsbCBkZXZlbG9wbWVudCBoYXMgZWZmZWN0aXZlbHkgc3RvcHBlZAorREVCSUFOX1BBVENIX1JFR0VYID0gIig/UDxwdmVyPigoXGQrXC4qKSspLSgoXGQrXC4qKSspKVwuKGRpZmZ8ZGViaWFuXC50YXIpXC4oZ3p8eHopIgorUkVHRVhfcG4tbmV0LXRvb2xzID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKK1JFR0VYX3BuLWFwbWQgPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgorUkVHRVhfcG4tYmxrdG9vbCA9ICIke0RFQklBTl9QQVRDSF9SRUdFWH0iCitSRUdFWF9wbi1tYWlseCA9ICIke0RFQklBTl9QQVRDSF9SRUdFWH0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYzBiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYwpAQCAtMCwwICsxLDEwMyBAQAorIyBTZXR1cCBleHRyYSBDRkxBR1MgYW5kIExERkxBR1Mgd2hpY2ggaGF2ZSAnc2VjdXJpdHknIGJlbmVmaXRzLiBUaGVzZSAKKyMgZG9uJ3Qgd29yayB1bml2ZXJzYWxseSwgdGhlcmUgYXJlIHJlY2lwZXMgd2hpY2ggY2FuJ3QgdXNlIG9uZSwgdGhlIG90aGVyCisjIG9yIGJvdGggc28gYSBibGFja2xpc3QgaXMgbWFpbnRhaW5lZCBoZXJlLiBUaGUgaWRlYSB3b3VsZCBiZSBvdmVyCisjIHRpbWUgdG8gcmVkdWNlIHRoaXMgbGlzdCB0byBub3RoaW5nLgorIyBGcm9tIGEgWW9jdG8gUHJvamVjdCBwZXJzcGVjdGl2ZSwgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIGFuZCB0ZXN0ZWQKKyMgaW4gdGhlIERJU1RSTz0icG9reS1sc2IiIGNvbmZpZ3VyYXRpb24uCisKKyMgX0ZPUlRJRllfU09VUkNFIHJlcXVpcmVzIC1PMSBvciBoaWdoZXIsIHNvIGRpc2FibGUgaW4gZGVidWcgYnVpbGRzIGFzIHRoZXkgdXNlCisjIC1PMCB3aGljaCB0aGVuIHJlc3VsdHMgaW4gYSBjb21waWxlciB3YXJuaW5nLgorbGNsX21heWJlX2ZvcnRpZnkgPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnREVCVUdfQlVJTEQnLCcxJywnJywnLURfRk9SVElGWV9TT1VSQ0U9MicsZCl9IgorCitTRUNVUklUWV9DRkxBR1MgPz0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCAtcGllIC1mcGllICR7bGNsX21heWJlX2ZvcnRpZnl9IgorU0VDVVJJVFlfTk9fUElFX0NGTEFHUyA/PSAiLWZzdGFjay1wcm90ZWN0b3ItYWxsICR7bGNsX21heWJlX2ZvcnRpZnl9IgorCitTRUNVUklUWV9MREZMQUdTID89ICItV2wsLXoscmVscm8sLXosbm93IgorU0VDVVJJVFlfWF9MREZMQUdTID89ICItV2wsLXoscmVscm8iCisKKyMgcG93ZXJwYyBkb2VzIG5vdCBnZXQgb24gd2l0aCBwaWUgZm9yIHJlYXNvbnMgbm90IGxvb2tlZCBpbnRvIGFzIHlldAorU0VDVVJJVFlfQ0ZMQUdTX3Bvd2VycGMgPSAiLWZzdGFjay1wcm90ZWN0b3ItYWxsICR7bGNsX21heWJlX2ZvcnRpZnl9IgorIyBEZWFsIHdpdGggcHBjIHNwZWNpZmljIGxpbmtlciBmYWlsdXJlcyB3aGVuIHVzaW5nIHRoZSBjZmxhZ3MKK1NFQ1VSSVRZX0NGTEFHU19wbi1kYnVzX3Bvd2VycGMgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWRidXMtcHRlc3RfcG93ZXJwYyA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tbGlibWF0Y2hib3hfcG93ZXJwYyA9ICIiCisKKyMgYXJtIHNwZWNpZmljIHNlY3VyaXR5IGZsYWcgaXNzdWVzCitTRUNVUklUWV9DRkxBR1NfcG4tbHR0bmctdG9vbHNfYXJtID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tYXNwZWxsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tYmVlY3J5cHQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ibGt0cmFjZSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWNvcmV1dGlscyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorIyBDdXJsIHNlZW1zIHRvIGNoZWNrIGZvciBGT1JUSUZZX1NPVVJDRSBpbiBDRkxBR1MsIGJ1dCBldmVuIGFzc2lnbmVkCisjIHRvIENQUEZMQUdTIGl0IGdldHMgcGlja2VkIGludG8gQ0ZMQUdTIGluIGJpdGJha2UuCisjVEFSR0VUX0NQUEZMQUdTX3BuLWN1cmwgKz0gIi1EX0ZPUlRJRllfU09VUkNFPTIiCitTRUNVUklUWV9DRkxBR1NfcG4tY3VwcyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWN1cmwgPSAiLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1waWUgLWZwaWUiCitTRUNVUklUWV9DRkxBR1NfcG4tZGIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1kaXJlY3RmYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdsaWJjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nbGliYy1pbml0aWFsID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1lbGZ1dGlscyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWVuY2hhbnQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1leHBlY3QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1mbGFjID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZmxleCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYy1ydW50aW1lID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjLXNhbml0aXplcnMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nZGIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nbXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nbnV0bHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaSA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmktbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS14ODYtbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS1pNTg2LW5hdGl2ZSA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkteDg2LTY0LW5hdGl2ZSA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3N0LXBsdWdpbnMtYmFkID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ3N0LXBsdWdpbnMtZ2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4taGFyZmJ1enogPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1rZXhlYy10b29scyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWlwdGFibGVzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliYWlvID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliY2FwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliZ2NjID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliaWQzdGFnID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlibmV3dCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmdsdSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnBjYXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJwY3JlID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlicHJveHkgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1sdHRuZy11c3QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1tZXNhID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbWVzYS1nbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW9wZW5zc2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1vcGVuc3AgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1wcHAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24taW1hZ2luZyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1weWN1cmwgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tc21hcnRwbSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1udW1weSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbjMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi10Y2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi10aWZmID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tdmFsZ3JpbmQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi16bGliID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCisKKyMgVGhlc2UgMiBoYXZlIHRleHQgcmVsY28gZXJyb3JzIHdpdGggdGhlIHBpZSBvcHRpb25zIGVuYWJsZWQKK1NFQ1VSSVRZX0NGTEFHU19wbi1sdHAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1wdWxzZWF1ZGlvID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCisKK1RBUkdFVF9DRkxBR1NfYXBwZW5kID0gIiAke1NFQ1VSSVRZX0NGTEFHU30iCitUQVJHRVRfTERGTEFHU19hcHBlbmQgPSAiICR7U0VDVVJJVFlfTERGTEFHU30iCisKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1mYmRldiA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8taW50ZWwgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLW9tYXBmYiA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tb21hcCA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tdmVzYSA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tdm13YXJlID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teHNlcnZlci14b3JnID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1iYXJlbWV0YWwuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjZTZkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1iYXJlbWV0YWwuaW5jCkBAIC0wLDAgKzEsMzIgQEAKKyMKKyMgYmFyZW1ldGFsIGNvbmZpZ3VyYXRpb24KKyMKKworTElCQ0VYVEVOU0lPTiA9ICIiCisKKyMgQWRkIGJhcmVtZXRhbCBsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzLgorTElCQ09WRVJSSURFID0gIjpsaWJjLWJhcmVtZXRhbCIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitBU1NVTUVfUFJPVklERUQgKz0gInZpcnR1YWwvbGliYyB2aXJ0dWFsL2xpYmljb252IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnYgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJnZXR0ZXh0IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgorCitVU0VfTkxTID89ICJubyIKK0lNQUdFX0xJTkdVQVMgPSAiIgorTElCQ19ERVBFTkRFTkNJRVMgPSAiIgorCitFWFRSQV9PRUNPTkZfcG4tZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9X2FwcGVuZCA9ICIgLS13aXRob3V0LWhlYWRlcnMiCitERVBFTkRTX3JlbW92ZV9wbi1tZXRhLXRvb2xjaGFpbiA9ICJ2aXJ0dWFsL2xpYmMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIgorCitUQVJHRVRfT1MgPSAiZWxmIgorVEFSR0VUX09TX2FybSA9ICJlYWJpIgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID89ICJwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJHtNQUNISU5FfSIKK1RPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkgPz0gIiIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTSyA/PSAibGliZ2NjLWRldiIKK1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEVfcmVtb3ZlID0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjIHpsaWIgbmN1cnNlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1nbGliYy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtZ2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTkxOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtZ2xpYmMuaW5jCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgZ2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIiR7QFsnJywgJy1nbnUnXVsoZC5nZXRWYXIoJ0FCSUVYVEVOU0lPTicsIFRydWUpIG9yICcnKSAhPSAnJ119IgorCisjIEFkZCBnbGliYyBvdmVycmlkZXMgdG8gdGhlIG92ZXJyaWRlcyBmb3IgZ2xpYmMuCitMSUJDT1ZFUlJJREUgPSAiOmxpYmMtZ2xpYmMiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnYgPz0gImdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmljb252ID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAiZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjID89ICJnbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJjID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjLWxvY2FsZSA/PSAiZ2xpYmMtbG9jYWxlIgorCitDWFhGTEFHUyArPSAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgorCitMSUJDX0RFUEVOREVOQ0lFUyA9ICJsaWJzZWdmYXVsdCBcCisJCSAgICAgZ2xpYmMgXAorCQkgICAgIGdsaWJjLWRiZyBcCisJCSAgICAgZ2xpYmMtZGV2IFwKKwkJICAgICBnbGliYy11dGlscyBcCisJCSAgICAgZ2xpYmMtdGhyZWFkLWRiIFwKKwkJICAgICAke0BnZXRfbGliY19sb2NhbGVzX2RlcGVuZGVuY2llcyhkKX0iCisKK0xJQkNfTE9DQUxFX0RFUEVOREVOQ0lFUyA9ICJcCisJZ2xpYmMtbG9jYWxlZGF0YS1pMThuIFwKKwlnbGliYy1nY29udi1pYm04NTAgXAorCWdsaWJjLWdjb252LWNwMTI1MiBcCisJZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIFwKKwlnbGliYy1nY29udi1pc284ODU5LTE1IgorCitkZWYgZ2V0X2xpYmNfbG9jYWxlc19kZXBlbmRlbmNpZXMoZCk6CisgICAgaWYgJ2xpYmMtbG9jYWxlcycgaW4gKGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKSBvciAnJykuc3BsaXQoKSA6CisgICAgICAgIHJldHVybiBkLmdldFZhcignTElCQ19MT0NBTEVfREVQRU5ERU5DSUVTJywgVHJ1ZSkgb3IgJycKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJycKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRkNThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLW11c2wuaW5jCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgbXVzbCBzcGVjaWZpYyBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiLW11c2wiCisKKyMgQWRkIHVjbGliYyBvdmVycmlkZXMgdG8gdGhlIG92ZXJyaWRlcy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy1tdXNsIgorT1ZFUlJJREVTIC49ICIke0xJQkNPVkVSUklERX0iCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmludGwgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmljb252ID89ICJuYXRpdmVzZGstZ2xpYmMiCisKKyNVU0VfTkxTID89ICJubyIKKworQ1hYRkxBR1MgKz0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKKworSU1BR0VfTElOR1VBUyA9ICIiCisKK0xJQkNfREVQRU5ERU5DSUVTID0gIlwKKyAgICBtdXNsIFwKKyAgICBtdXNsLWRiZyBcCisgICAgbXVzbC1kZXYgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy11Y2xpYmMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjM2NkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy11Y2xpYmMuaW5jCkBAIC0wLDAgKzEsMjggQEAKKyMKKyMgdWNsaWJjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyMKKworTElCQ0VYVEVOU0lPTiA9ICItdWNsaWJjIgorCisjIEFkZCB1Y2xpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMuCitMSUJDT1ZFUlJJREUgPSAiOmxpYmMtdWNsaWJjIgorT1ZFUlJJREVTIC49ICIke0xJQkNPVkVSUklERX0iCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gInVjbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJsaWJpY29udiIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmludGwgPz0gImdldHRleHQiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmljb252ID89ICJuYXRpdmVzZGstZ2xpYmMiCisKK1VTRV9OTFMgPz0gIm5vIgorCitDWFhGTEFHUyArPSAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgorCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElCQ19ERVBFTkRFTkNJRVMgPSAiXAorICAgIHVjbGliYyBcCisgICAgdWNsaWJjLWRiZyBcCisgICAgdWNsaWJjLWRldiBcCisgICAgdWNsaWJjLXRocmVhZC1kYiBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMKQEAgLTAsMCArMSw3NSBAQAorIworIyBEZWZhdWx0IHRvb2xjaGFpbiBjb25maWd1cmF0aW9uCisjCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyA9ICJiaW51dGlscy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgPSAiZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyA9ICJnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzID0gImdjYy1ydW50aW1lIgorUFJFRkVSUkVEX1BST1ZJREVSX2dkYiA9ICJnZGIiCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayA/PSAiYmludXRpbHMtY3Jvc3NzZGstJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9Z2NjLWluaXRpYWwgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9Z2NjID0gImdjYy1jcm9zc3Nkay0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nKysgPSAiZ2NjLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWNvbXBpbGVybGlicyA9ICJuYXRpdmVzZGstZ2NjLXJ1bnRpbWUiCisKKyMgRGVmYXVsdCBsaWJjIGNvbmZpZworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyA9ICIke1RDTElCQ30iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstJHtTREtfUFJFRklYfWxpYmMtZm9yLWdjYyA/PSAibmF0aXZlc2RrLSR7VENMSUJDfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwgPSAiJHtUQ0xJQkN9LWluaXRpYWwiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstJHtTREtfUFJFRklYfWxpYmMtaW5pdGlhbCA9ICJuYXRpdmVzZGstJHtUQ0xJQkN9LWluaXRpYWwiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9nZXR0ZXh0ID8/PSAiZ2V0dGV4dCIKKworR0NDVkVSU0lPTiA/PSAiNS4lIgorU0RLR0NDVkVSU0lPTiA/PSAiJHtHQ0NWRVJTSU9OfSIKK0JJTlVWRVJTSU9OID89ICIyLjI1JSIKK0dEQlZFUlNJT04gPz0gIjcuOSUiCitHTElCQ1ZFUlNJT04gPz0gIjIuMjIiCitVQ0xJQkNWRVJTSU9OID89ICIwLjkuMzMrZ2l0JSIKK0xJTlVYTElCQ1ZFUlNJT04gPz0gIjQuMSIKKworUFJFRkVSUkVEX1ZFUlNJT05fZ2NjID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9ID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3NzZGstJHtTREtfQVJDSH0gPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLXJ1bnRpbWUgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2Mtc2FuaXRpemVycyA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nY2MtcnVudGltZSA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nY2Mtc2FuaXRpemVycyA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpYmdjYyA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpYmdjYy1pbml0aWFsID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdjYyA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1saWJnY2MgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstbGliZ2NjLWluaXRpYWwgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscyA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1uYXRpdmUgPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3NzZGstJHtTREtfQVJDSH0gPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nZGIgPz0gIiR7R0RCVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nZGItY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7R0RCVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nZGItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSA/PSAiJHtHREJWRVJTSU9OfSIKKworUFJFRkVSUkVEX1ZFUlNJT05fbGludXgtbGliYy1oZWFkZXJzID89ICIke0xJTlVYTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWxpbnV4LWxpYmMtaGVhZGVycyA/PSAiJHtMSU5VWExJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjICAgICAgICAgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtbG9jYWxlICAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYy1tdHJhY2UgICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLXNjcmlwdHMgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdsaWJjICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYy1pbml0aWFsICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nbGliYy1pbml0aWFsICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl91Y2xpYmMgICAgICAgICAgICAgICAgICAgPz0gIiR7VUNMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl91Y2xpYmMtaW5pdGlhbCAgICAgICAgICAgPz0gIiR7VUNMSUJDVkVSU0lPTn0iCisjIGRvbid0IHVzZSB2ZXJzaW9uIGVhcmxpZXIgdGhhbiAxLjQgZm9yIGd6aXAtbmF0aXZlLCBhcyBpdCdzIG5lY2Vzc2FyeSBmb3IKKyMgc29tZSBwYWNrYWdlcyB1c2luZyBhbiBhcmNoaXZlIGZvcm1hdCBpbmNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIGd6aXAKK1BSRUZFUlJFRF9WRVJTSU9OX2d6aXAtbmF0aXZlID89ICIxLjYiCisKKyMgU2V0dXAgc3VpdGFibGUgdG9vbGNoYWluIGZsYWdzCityZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhNWU2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYwpAQCAtMCwwICsxLDI0IEBACisjIE5PVEU6IFRISVMgRklMRSBJUyBERVBSRUNBVEVELiBQbGVhc2UgYWRkIG5ldyBlbnRyaWVzIHRvIHRoZSByZWNpcGVzIHRoZW1zZWx2ZXMuCisjCisjIHVwc3RyZWFtX3RyYWNraW5nLmluYyAtIFRoaXMgZmlsZSBjb250YWlucyBkYXRhIHRoYXQgdHJhY2tzIHRoZQorIyB1cHN0cmVhbSBwcm9qZWN0IGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHJlY2lwZS4gVGhpcyBsaXN0IGlzIG5lZWRlZAorIyBmb3IgcmVjaXBlcyB0aGF0IHZlcnNpb24gaW5mb3JtYXRpb24gY2FuIG5vdCBiZSBhdXRvbWFnaWNhbGx5IGRpc2NvdmVyZWQuCisjIEFzIHdlIGF1dG9tYXRlIHRoaXMgY2hlY2tpbmcsIHRoaXMgZmlsZSB3aWxsIHNsb3dlZCBiZSByZWR1Y2VkLgorIworIyBUaGlzIGRhdGEgaXMgdXNlZCBieSB0aGUgcGFja2FnZSByZXBvcnRpbmcgc3lzdGVtIChwYWNrYWdlcy55b2N0b3Byb2plY3Qub3JnKQorIworIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKKyMKKyMgICAgICAgUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT05fcG4tPHJlY2lwZSBuYW1lPiA9ICI8dmVyc2lvbj4iCisjICAgICAgIFJFQ0lQRV9VUFNUUkVBTV9EQVRFX3BuLTxyZWNpcGUgbmFtZT4gPSAiTW1tIGRkLCBZWVlZIgorIwkgLSBUaGlzIGlzIHRoZSBsYXRlc3QgdXBzdHJlYW0gdmVyc2lvbiBhbmQgZGF0ZQorIyAgICAgICBSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTl9wbi08cmVjaXBlIG5hbWU+ID0gIjxmcmVlIGZvcm0gdGV4dD4iCisjICAgICAgICAtIFVzZWQgdG8gbm90ZSB3aHkgYSByZWNpcGUgc2hvdWxkIG5vdCBiZSB1cGdyYWRlZCB0byBhIG5ld2VyIHZlcnNvaW4KKyMgICAgICAgQ0hFQ0tfREFURV9wbi08cmVjaXBlIG5hbWU+ID0gIk1tbSBkZCwgWVlZWSIKKyMgICAgICAgIC0gVGhpcyBpcyB0aGUgZGF0ZSB0aGF0IHVwc3RyZWFtIHdhcyBsYXN0IG1hbnVhbGx5IGNoZWNrZWQgb3ZlciB0aW1lCisjICAgICAgICAgIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgYXMgd2UgYXV0b21hdGUgdGhpcyBjaGVja2luZworIworIyBUaGVzZSBlbnRyaWVzIHdpbGwgc2xvd2x5IGJlIHJlbW92ZWQgYXMgd2UgY2FuIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lCisjIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGZpbGUuICBTbyBmb3IgZXhpc3RpbmcgcmVjaXBlcyB0aGF0IHdlIGNhbiBnZXQgCisjIGZyb20gdGhlIFJlY2lwZSByZXBvcnRpbmcgc3lzdGVtLCB0aGUgZW50cmllcyBoZXJlIGNhbiBiZSByZW1vdmVkLgorIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwYzJkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMKQEAgLTAsMCArMSw1IEBACisjCisjIEV4Y2x1ZGUga25vd24gYnJva2VuIHBhY2thZ2VzCisjCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NWFiNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKQEAgLTAsMCArMSw0NTkgQEAKKyMgdGhpcyBmaWxlIGhvbGRzIGRvY3VtZW50YXRpb24gZm9yIGtub3duIGtleXMsIHBvc3NpYmxlIHZhbHVlcyBhbmQKKyMgdGhlaXIgbWVhbmluZ3MuIFBsZWFzZSB1cGRhdGUsIGNvcnJlY3QgYW5kIGV4dGVuZCB0aGlzIGRvY3VtZW50YXRpb24uCisjIE1haWwgeW91ciBjaGFuZ2VzIHRvIG9wZW5lbWJlZGRlZC1kZXZlbEBvcGVuZW1iZWRkZWQub3JnCisKKyMgREVTQ1JJUFRJT05TIEZPUiBUQVNLUyAjCisKK2RvX2Jvb3RpbWdbZG9jXSA9ICJDcmVhdGVzIGEgYm9vdGFibGUgbGl2ZSBpbWFnZSIKK2RvX2J1aWxkW2RvY10gPSAiRGVmYXVsdCB0YXNrIGZvciBhIHJlY2lwZSAtIGRlcGVuZHMgb24gYWxsIG90aGVyIG5vcm1hbCB0YXNrcyByZXF1aXJlZCB0byAnYnVpbGQnIGEgcmVjaXBlIgorZG9fYnVuZGxlX2luaXRyYW1mc1tkb2NdID0gIkNvbWJpbmVzIGFuIGluaXRpYWwgcmFtZGlzayBpbWFnZSBhbmQga2VybmVsIHRvZ2V0aGVyIHRvIGZvcm0gYSBzaW5nbGUgaW1hZ2UiCitkb19jaGVja3VyaVtkb2NdID0gIlZhbGlkYXRlcyB0aGUgU1JDX1VSSSB2YWx1ZSIKK2RvX2NoZWNrdXJpYWxsW2RvY10gPSAiVmFsaWRhdGVzIHRoZSBTUkNfVVJJIHZhbHVlIGZvciBhbGwgcmVjaXBlcyByZXF1aXJlZCB0byBidWlsZCBhIHRhcmdldCIKK2RvX2NsZWFuW2RvY10gPSAiUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGZvciBhIHRhcmdldCIKK2RvX2NsZWFuYWxsW2RvY10gPSAiUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzLCBzaGFyZWQgc3RhdGUgY2FjaGUsIGFuZCBkb3dubG9hZGVkIHNvdXJjZSBmaWxlcyBmb3IgYSB0YXJnZXQiCitkb19jbGVhbnNzdGF0ZVtkb2NdID0gIlJlbW92ZXMgYWxsIG91dHB1dCBmaWxlcyBhbmQgc2hhcmVkIHN0YXRlIGNhY2hlIGZvciBhIHRhcmdldCIKK2RvX2NvbXBpbGVbZG9jXSA9ICJDb21waWxlcyB0aGUgc291cmNlIGluIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnkiCitkb19jb21waWxlX2tlcm5lbG1vZHVsZXNbZG9jXSA9ICJDb21waWxlcyBsb2FkYWJsZSBtb2R1bGVzIGZvciB0aGUgTGludXgga2VybmVsIgorZG9fY29tcGlsZV9wdGVzdF9iYXNlW2RvY10gPSAiQ29tcGlsZXMgdGhlIHJ1bnRpbWUgdGVzdCBzdWl0ZSBpbmNsdWRlZCBpbiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQiCitkb19jb25maWd1cmVbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBzb3VyY2UgYnkgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQiCitkb19jb25maWd1cmVfcHRlc3RfYmFzZVtkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIHJ1bnRpbWUgdGVzdCBzdWl0ZSBpbmNsdWRlZCBpbiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQiCitkb19kZXBsb3lbZG9jXSA9ICJXcml0ZXMgZGVwbG95YWJsZSBvdXRwdXQgZmlsZXMgdG8gdGhlIGRlcGxveSBkaXJlY3RvcnkiCitkb19kZXZweXNoZWxsW2RvY10gPSAiU3RhcnRzIGFuIGludGVyYWN0aXZlIFB5dGhvbiBzaGVsbCBmb3IgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIgorZG9fZGV2c2hlbGxbZG9jXSA9ICJTdGFydHMgYSBzaGVsbCB3aXRoIHRoZSBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGRldmVsb3BtZW50L2RlYnVnZ2luZyIKK2RvX2RpZmZjb25maWdbZG9jXSA9ICJDb21wYXJlcyB0aGUgb2xkIGFuZCBuZXcgY29uZmlnIGZpbGVzIGFmdGVyIHJ1bm5pbmcgZG9fbWVudWNvbmZpZyBmb3IgdGhlIGtlcm5lbCIKK2RvX2ZldGNoW2RvY10gPSAiRmV0Y2hlcyB0aGUgc291cmNlIGNvZGUiCitkb19mZXRjaGFsbFtkb2NdID0gIkZldGNoZXMgYWxsIHJlbW90ZSBzb3VyY2VzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdGFyZ2V0IgorZG9fZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGVbZG9jXSA9ICJXcml0ZXMgYSBxdC5jb25mIGZpbGUgZm9yIGJ1aWxkaW5nIGEgUXQtYmFzZWQgYXBwbGljYXRpb24iCitkb19pbnN0YWxsW2RvY10gPSAiQ29waWVzIGZpbGVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSB0byBhIGhvbGRpbmcgYXJlYSIKK2RvX2luc3RhbGxfcHRlc3RfYmFzZVtkb2NdID0gIkNvcGllcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGZpbGVzIGZyb20gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSB0byBhIGhvbGRpbmcgYXJlYSIKK2RvX2tlcm5lbF9jaGVja291dFtkb2NdID0gIkNoZWNrcyBvdXQgc291cmNlL21ldGEgYnJhbmNoZXMgZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fa2VybmVsX2NvbmZpZ2NoZWNrW2RvY10gPSAiVmFsaWRhdGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCitkb19rZXJuZWxfY29uZmlnbWVbZG9jXSA9ICJBc3NlbWJsZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX2tlcm5lbF9saW5rX3ZtbGludXhbZG9jXSA9ICJDcmVhdGVzIGEgc3ltYm9saWMgbGluayBpbiBhcmNoLyRhcmNoL2Jvb3QgZm9yIHZtbGludXgga2VybmVsIGltYWdlcyIKK2RvX2xpc3R0YXNrc1tkb2NdID0gIkxpc3RzIGFsbCBkZWZpbmVkIHRhc2tzIGZvciBhIHRhcmdldCIKK2RvX21lbnVjb25maWdbZG9jXSA9ICJSdW5zICdtYWtlIG1lbnVjb25maWcnIGZvciB0aGUga2VybmVsIgorZG9fcGFja2FnZVtkb2NdID0gIkFuYWx5emVzIHRoZSBjb250ZW50IG9mIHRoZSBob2xkaW5nIGFyZWEgYW5kIHNwbGl0cyBpdCBpbnRvIHN1YnNldHMgYmFzZWQgb24gYXZhaWxhYmxlIHBhY2thZ2VzIGFuZCBmaWxlcyIKK2RvX3BhY2thZ2VfaW5kZXhbZG9jXSA9ICJDcmVhdGVzIG9yIHVwZGF0ZXMgdGhlIGluZGV4IGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2VfcWFbZG9jXSA9ICJSdW5zIFFBIGNoZWNrcyBvbiBwYWNrYWdlZCBmaWxlcyIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RvY10gPSAiQ3JlYXRlcyB0aGUgYWN0dWFsIERFQiBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV93cml0ZV9pcGtbZG9jXSA9ICJDcmVhdGVzIHRoZSBhY3R1YWwgSVBLIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkb2NdID0gIkNyZWF0ZXMgdGhlIGFjdHVhbCBSUE0gcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2Vfd3JpdGVfdGFyW2RvY10gPSAiQ3JlYXRlcyB0YXIgYXJjaGl2ZXMgZm9yIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlZGF0YVtkb2NdID0gIkNyZWF0ZXMgcGFja2FnZSBtZXRhZGF0YSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIHBhY2thZ2VzIgorZG9fcGF0Y2hbZG9jXSA9ICJMb2NhdGVzIHBhdGNoIGZpbGVzIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIHNvdXJjZSBjb2RlIgorZG9fcG9wdWxhdGVfbGljW2RvY10gPSAiV3JpdGVzIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIHRoZSByZWNpcGUgdGhhdCBpcyBjb2xsZWN0ZWQgbGF0ZXIgd2hlbiB0aGUgaW1hZ2UgaXMgY29uc3RydWN0ZWQiCitkb19wb3B1bGF0ZV9zZGtbZG9jXSA9ICJDcmVhdGVzIHRoZSBmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhbiBpbnN0YWxsYWJsZSBTREsiCitkb19wb3B1bGF0ZV9zeXNyb290W2RvY10gPSAiQ29waWVzIGEgc3Vic2V0IG9mIGZpbGVzIGluc3RhbGxlZCBieSBkb19pbnN0YWxsIGludG8gdGhlIHN5c3Jvb3QgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSB0byBvdGhlciByZWNpcGVzIgorZG9fcm1fd29ya1tkb2NdID0gIlJlbW92ZXMgd29yayBmaWxlcyBhZnRlciB0aGUgYnVpbGQgc3lzdGVtIGhhcyBmaW5pc2hlZCB3aXRoIHRoZW0iCitkb19ybV93b3JrX2FsbFtkb2NdID0gIlRvcC1sZXZlbCB0YXNrIGZvciByZW1vdmluZyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBidWlsZCBzeXN0ZW0gaGFzIGZpbmlzaGVkIHdpdGggdGhlbSIKK2RvX3Jvb3Rmc1tkb2NdID0gIkNyZWF0ZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAoZmlsZSBhbmQgZGlyZWN0b3J5IHN0cnVjdHVyZSkgZm9yIGFuIGltYWdlIgorZG9fc2F2ZWRlZmNvbmZpZ1tkb2NdID0gIkNyZWF0ZXMgYSBtaW5pbWFsIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUiCitkb19zaXplY2hlY2tbZG9jXSA9ICJDaGVja3MgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBpbWFnZSBhZ2FpbnN0IEtFUk5FTF9JTUFHRV9NQVhTSVpFIChpZiBzZXQpIgorZG9fc3BkeFtkb2NdID0gIkEgYnVpbGQgc3RhZ2UgdGhhdCB0YWtlcyB0aGUgc291cmNlIGNvZGUgYW5kIHNjYW5zIGl0IG9uIGEgcmVtb3RlIEZPU1NPTE9HWSBzZXJ2ZXIgaW4gb3JkZXIgdG8gcHJvZHVjZSBhbiBTUERYIGRvY3VtZW50IgorZG9fc3RyaXBbZG9jXSA9ICJTdHJpcHMgdW5uZWVkZWQgc2VjdGlvbnMgb3V0IG9mIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UiCitkb190ZXN0aW1hZ2VbZG9jXSA9ICJCb290cyBhbiBpbWFnZSBhbmQgcGVyZm9ybXMgcnVudGltZSB0ZXN0cyB3aXRoaW4gdGhlIGltYWdlIgorZG9fdGVzdGltYWdlX2F1dG9bZG9jXSA9ICJCb290cyBhbiBpbWFnZSBhbmQgcGVyZm9ybXMgcnVudGltZSB0ZXN0cyB3aXRoaW4gdGhlIGltYWdlIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGhhcyBiZWVuIGJ1aWx0IgorZG9fdGVzdHNka1tkb2NdID0gIkluc3RhbGxzIGFuIFNESyBhbmQgcGVyZm9ybXMgcnVudGltZSB0ZXN0cyBvbiB0aGUgdG9vbHMgaW5zdGFsbGVkIGJ5IGl0IgorZG9fdWJvb3RfbWtpbWFnZVtkb2NdID0gIkNyZWF0ZXMgYSB1SW1hZ2UgZmlsZSBmcm9tIHRoZSBrZXJuZWwgZm9yIHRoZSBVLUJvb3QgYm9vdGxvYWRlciIKK2RvX3VucGFja1tkb2NdID0gIlVucGFja3MgdGhlIHNvdXJjZSBjb2RlIGludG8gYSB3b3JraW5nIGRpcmVjdG9yeSIKK2RvX3ZhbGlkYXRlX2JyYW5jaGVzW2RvY10gPSAiRW5zdXJlcyB0aGF0IHRoZSBzb3VyY2UvbWV0YSBicmFuY2hlcyBhcmUgb24gdGhlIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkgdGhlaXIgU1JDUkVWIHZhbHVlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCitkb192bWltZ1tkb2NdID0gIkNyZWF0ZXMgYW4gaW1hZ2UgZm9yIHVzZSB3aXRoIFZNd2FyZSBvciBWaXJ0dWFsQm94IGNvbXBhdGlibGUgdmlydHVhbCBtYWNoaW5lIGhvc3RzIChiYXNlZCBvbiBJTUFHRV9GU1RZUEVTIGVpdGhlciAudm1kayBvciAudmRpKSIKKworIyBERVNDUklQVElPTlMgRk9SIFZBUklBQkxFUyAjCisKKyNBCisKK0FMTE9XX0VNUFRZW2RvY10gPSAiU3BlY2lmaWVzIGlmIGFuIG91dHB1dCBwYWNrYWdlIHNob3VsZCBzdGlsbCBiZSBwcm9kdWNlZCBpZiBpdCBpcyBlbXB0eS4iCitBTFRFUk5BVElWRVtkb2NdID0gIkxpc3RzIGNvbW1hbmRzIGluIGEgcGFja2FnZSB0aGF0IG5lZWQgYW4gYWx0ZXJuYXRpdmUgYmluYXJ5IG5hbWluZyBzY2hlbWUuIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2RvY10gPSAiVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBtYXAgZHVwbGljYXRlZCBjb21tYW5kcyB0byBhY3R1YWwgbG9jYXRpb25zLiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2RvY10gPSAiVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdCBwcmlvcml0aWVzIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLiIKK0FMVEVSTkFUSVZFX1RBUkdFVFtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGRlZmF1bHQgbGluayBsb2NhdGlvbnMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuIgorQVNTVU1FX1BST1ZJREVEW2RvY10gPSAiTGlzdCBvZiBwYWNrYWdlcyAocmVjaXBlcyBhY3R1YWxseSkgdGhhdCBhcmUgYXNzdW1lZCB0byBiZSBpbXBsaWNpdGx5IGF2YWlsYWJsZS4gQml0QmFrZSBkb2VzIG5vdCBidWlsZCB0aGVzZSBwYWNrYWdlcy4iCitBU1NVTUVfU0hMSUJTW2RvY10gPSAiTGlzdCBvZiBzaGxpYjpwYWNrYWdlW192ZXJzaW9uXSBtYXBwaW5ncy4gVXNlZnVsIGZvciBsaWIgcGFja2FnZXMgaW4gQVNTVU1FX1BST1ZJREVELCBmb3Igd2hpY2ggYXV0b21hdGljIHNobGliIGRlcGVuZGVuY3kgdHJhY2tpbmcgZG9lcyBub3Qgd29yay4iCitBVVRIT1JbZG9jXSA9ICJFbWFpbCBhZGRyZXNzIHVzZWQgdG8gY29udGFjdCB0aGUgb3JpZ2luYWwgYXV0aG9yKHMpIGluIG9yZGVyIHRvIHNlbmQgcGF0Y2hlcyBhbmQgZm9yd2FyZCBidWdzLiIKK0FVVE9fU1lTTElOVVhNRU5VW2RvY10gPSAiRW5hYmxlcyBjcmVhdGluZyBhbiBhdXRvbWF0aWMgbWVudSBmb3IgdGhlIHN5c2xpbnV4IGJvb3Rsb2FkZXIuIgorQVVUT1JFVltkb2NdID0gIldoZW4gU1JDUkVWIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSwgaXQgc3BlY2lmaWVzIHRvIHVzZSB0aGUgbGF0ZXN0IHNvdXJjZSByZXZpc2lvbiBpbiB0aGUgcmVwb3NpdG9yeS4iCisKKyNCCisKK0JbZG9jXSA9ICJUaGUgQnVpbGQgRGlyZWN0b3J5LiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwbGFjZXMgZ2VuZXJhdGVkIG9iamVjdHMgaW50byB0aGUgQnVpbGQgRGlyZWN0b3J5IGR1cmluZyBhIHJlY2lwZSdzIGJ1aWxkIHByb2Nlc3MuIgorQkFEX1JFQ09NTUVOREFUSU9OU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyBub3QgdG8gaW5zdGFsbCBkZXNwaXRlIGJlaW5nIHJlY29tbWVuZGVkIGJ5IGEgcmVjaXBlLiBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlIElQSyBvciBSUE0gcGFja2FnaW5nIGJhY2tlbmRzLiIKK0JCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWVtkb2NdID0gIkRlZmluZXMgaG93IEJpdEJha2UgaGFuZGxlcyBzaXR1YXRpb25zIHdoZXJlIGFuIGFwcGVuZCBmaWxlICguYmJhcHBlbmQpIGhhcyBubyBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlICguYmIpLiIKK0JCX0RJU0tNT05fRElSU1tkb2NdID0gIk1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZCBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZSBwYXJhbWV0ZXJzLiIKK0JCX0RJU0tNT05fV0FSTklOVEVSVkFMW2RvY10gPSAiRGVmaW5lcyB0aGUgZGlzayBzcGFjZSBhbmQgZnJlZSBpbm9kZSB3YXJuaW5nIGludGVydmFscy4gVG8gc2V0IHRoZXNlIGludGVydmFscywgZGVmaW5lIHRoZSB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFNbZG9jXSA9ICJDYXVzZXMgdGFyYmFsbHMgb2YgdGhlIEdpdCByZXBvc2l0b3JpZXMgdG8gYmUgcGxhY2VkIGluIHRoZSBETF9ESVIgZGlyZWN0b3J5LiIKK0JCX05VTUJFUl9USFJFQURTW2RvY10gPSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIEJpdEJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbCBhdCBhbnkgb25lIHRpbWUuIEEgZ29vZCBydWxlIG9mIHRodW1iIGlzIHRvIHNldCB0aGlzIHZhcmlhYmxlIHRvIHR3aWNlIHRoZSBudW1iZXIgb2YgY29yZXMuIgorQkJDTEFTU0VYVEVORFtkb2NdID0gIkFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzIG9mIHRoZSBzb2Z0d2FyZS4gQ29tbW9uIHZhcmlhbnRzIGZvciByZWNpcGVzIGFyZSAnbmF0aXZlJywgJ2Nyb3NzJywgJ25hdGl2ZXNkaycgYW5kIG11bHRpbGlicy4iCitCQkZJTEVfQ09MTEVDVElPTlNbZG9jXSA9ICJMaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIEJCRklMRV8qIHZhcmlhYmxlcy4iCitCQkZJTEVfUEFUVEVSTltkb2NdID0gIlZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tIEJCRklMRVMgaW4gYSBwYXJ0aWN1bGFyIGxheWVyLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGxheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIgorQkJGSUxFX1BSSU9SSVRZW2RvY10gPSAiQXNzaWducyB0aGUgcHJpb3JpdHkgZm9yIHJlY2lwZSBmaWxlcyBpbiBlYWNoIGxheWVyLiBTZXR0aW5nIHRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBwcmlvcml0aXplIGEgbGF5ZXIgYWdhaW5zdCBvdGhlciBsYXllcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHJlY2lwZS4iCitCQkZJTEVTW2RvY10gPSAiTGlzdCBvZiByZWNpcGUgZmlsZXMgdXNlZCBieSBCaXRCYWtlIHRvIGJ1aWxkIHNvZnR3YXJlLiIKK0JCSU5DTFVERUxPR1NbZG9jXSA9ICJWYXJpYWJsZSB0aGF0IGNvbnRyb2xzIGhvdyBCaXRCYWtlIGRpc3BsYXlzIGxvZ3Mgb24gYnVpbGQgZmFpbHVyZS4iCitCQklOQ0xVREVMT0dTX0xJTkVTW2RvY10gPSAiQW1vdW50IG9mIGxvZyBsaW5lcyBwcmludGVkIG9uIGZhaWx1cmUuIgorQkJMQVlFUlNbZG9jXSA9ICJMaXN0cyB0aGUgbGF5ZXJzIHRvIGVuYWJsZSBkdXJpbmcgdGhlIGJ1aWxkLiBUaGlzIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlIGJibGF5ZXJzLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLiIKK0JCTEFZRVJTX05PTl9SRU1PVkFCTEVbZG9jXSA9ICJMaXN0cyBjb3JlIGxheWVycyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIGJibGF5ZXJzLmNvbmYgZmlsZS4iCitCQk1BU0tbZG9jXSA9ICJQcmV2ZW50cyBCaXRCYWtlIGZyb20gcHJvY2Vzc2luZyBzcGVjaWZpYyByZWNpcGVzIG9yIHJlY2lwZSBhcHBlbmQgZmlsZXMuIFVzZSB0aGUgQkJNQVNLIHZhcmlhYmxlIGZyb20gd2l0aGluIGNvbmYvbG9jYWwuY29uZi4iCitCQlBBVEhbZG9jXSA9ICJVc2VkIGJ5IEJpdEJha2UgdG8gbG9jYXRlIC5iYmNsYXNzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGlzIHZhcmlhYmxlIGlzIGFuYWxvZ291cyB0byB0aGUgUEFUSCB2YXJpYWJsZS4iCitCQlNFUlZFUltkb2NdID0gIlBvaW50cyB0byB0aGUgc2VydmVyIHRoYXQgcnVucyBtZW1vcnktcmVzaWRlbnQgQml0QmFrZS4iCitCSU5DT05GSUdfR0xPQltkb2NdID0gIldoZW4gaW5oZXJpdGluZyBiaW5jb25maWcuYmJjbGFzcyBmcm9tIGEgcmVjaXBlLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIHdpbGRjYXJkIGZvciBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBuZWVkIGVkaXRpbmcuIgorQlBbZG9jXSA9ICJUaGUgYmFzZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbiBidXQgd2l0aG91dCBhbnkgc3BlY2lhbCByZWNpcGUgbmFtZSBzdWZmaXggKGkuZS4gLW5hdGl2ZSwgbGliNjQtLCBhbmQgc28gZm9ydGgpLiBCUCBpcyBjb21wcmlzZWQgb2YgJHtCUE59LSR7UFZ9IgorQlBOW2RvY10gPSAiVGhlIGJhcmUgbmFtZSBvZiB0aGUgcmVjaXBlLiBUaGlzIHZhcmlhYmxlIGlzIGEgdmVyc2lvbiBvZiB0aGUgUE4gdmFyaWFibGUgYnV0IHJlbW92ZXMgY29tbW9uIHN1ZmZpeGVzIGFuZCBwcmVmaXhlcy4iCitCVUdUUkFDS0VSW2RvY10gPSAiU3BlY2lmaWVzIGEgVVJMIGZvciBhbiB1cHN0cmVhbSBidWcgdHJhY2tpbmcgd2Vic2l0ZSBmb3IgYSByZWNpcGUuIgorQlVJTERfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBidWlsZGluZyBhcmNoaXRlY3R1cmUgKGUuZy4gaTY4NikuIgorQlVJTERfT1NbZG9jXSA9ICJUaGUgb3BlcmF0aW5nIHN5c3RlbSAoaW4gbG93ZXIgY2FzZSkgb2YgdGhlIGJ1aWxkaW5nIGFyY2hpdGVjdHVyZSAoZS5nLiBsaW51eCkuIgorQlVJTERESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorQlVJTERTVEFUU19CQVNFW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgYnVpbGQgc3RhdGlzdGljcyB3aGVuIHlvdSB1c2UgYW5kIGVuYWJsZSB0aGUgYnVpbGRzdGF0cyBjbGFzcy4iCitCVVNZQk9YX1NQTElUX1NVSURbZG9jXSA9ICJGb3IgdGhlIEJ1c3lCb3ggcmVjaXBlLCBzcGVjaWZpZXMgd2hldGhlciB0byBzcGxpdCB0aGUgb3V0cHV0IGV4ZWN1dGFibGUgZmlsZSBpbnRvIHR3byBwYXJ0czogb25lIGZvciBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc2V0dWlkIHJvb3QsIGFuZCBvbmUgZm9yIHRoZSByZW1haW5pbmcgZmVhdHVyZXMuIgorCisjQworCitDQUNIRVtkb2NdICA9ICJUaGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGNhY2hlIG9mIHRoZSBtZXRhZGF0YS4iCitDRkxBR1NbZG9jXSA9ICJGbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0aGUgc2FtZSBhcyBUQVJHRVRfQ0ZMQUdTLiIKK0NMQVNTT1ZFUlJJREVbZG9jXSA9ICJBbiBpbnRlcm5hbCB2YXJpYWJsZSBzcGVjaWZ5aW5nIHRoZSBzcGVjaWFsIGNsYXNzIG92ZXJyaWRlIHRoYXQgc2hvdWxkIGN1cnJlbnRseSBhcHBseSAoZS5nLiAiY2xhc3MtdGFyZ2V0IiwgImNsYXNzLW5hdGl2ZSIsIGFuZCBzbyBmb3J0aCkuIgorQ0xFQU5CUk9LRU5bZG9jXSA9ICJTcGVjaWZpZXMgaWYgJ21ha2UgY2xlYW4nIGRvZXMgbm90IHdvcmsgZm9yIGEgcmVjaXBlIChhbmQgdGhlcmVmb3JlIHRoZSBidWlsZCBzeXN0ZW0gc2hvdWxkIG5vdCB0cnkgdG8gdXNlIGl0IGR1cmluZyBkb19jb25maWd1cmUpIgorQ09NQklORURfRkVBVFVSRVNbZG9jXSA9ICJBIHNldCBvZiBmZWF0dXJlcyBjb21tb24gYmV0d2VlbiBNQUNISU5FX0ZFQVRVUkVTIGFuZCBESVNUUk9fRkVBVFVSRVMuIgorQ09NTU9OX0xJQ0VOU0VfRElSW2RvY10gPSAiUG9pbnRzIHRvIG1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LCB3aGljaCBpcyB3aGVyZSBnZW5lcmljIGxpY2Vuc2UgZmlsZXMgcmVzaWRlLiIKK0NPTVBBVElCTEVfSE9TVFtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gb25lIG9yIG1vcmUgaG9zdHMgKHdoZW4gdGhlIHJlY2lwZSBpcyBuYXRpdmUpIG9yIG9uZSBvciBtb3JlIHRhcmdldHMgKHdoZW4gdGhlIHJlY2lwZSBpcyBub24tbmF0aXZlKSB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorQ09NUEFUSUJMRV9NQUNISU5FW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSB0YXJnZXQgbWFjaGluZXMgd2l0aCB3aGljaCBhIHJlY2lwZSBpcyBjb21wYXRpYmxlLiIKK0NPTVBMRU1FTlRBUllfR0xPQltkb2NdID0gIkRlZmluZXMgd2lsZGNhcmRzIHRvIG1hdGNoIHdoZW4gaW5zdGFsbGluZyBhIGxpc3Qgb2YgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBmb3IgYWxsIHRoZSBwYWNrYWdlcyBpbnN0YWxsZWQgaW4gYW4gaW1hZ2UuIgorQ09ORkZJTEVTW2RvY10gPSAiSWRlbnRpZmllcyBlZGl0YWJsZSBvciBjb25maWd1cmFibGUgZmlsZXMgdGhhdCBhcmUgcGFydCBvZiBhIHBhY2thZ2UuIgorQ09ORklHX1NJVEVbZG9jXSA9ICJBIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb250YWlucyBhdXRvY29uZiB0ZXN0IHJlc3VsdHMgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgQXV0b3Rvb2xzIHV0aWxpdGllcyB3aGVuIHJ1bm5pbmcgY29uZmlndXJlLiIKK0NPTkZMSUNUX0RJU1RST19GRUFUVVJFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGRpc3Ryb19mZWF0dXJlc19jaGVjayBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IHdvdWxkIGJlIGluIGNvbmZsaWN0IHNob3VsZCB0aGUgcmVjaXBlIGJlIGJ1aWx0LiIKK0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBwYWNrYWdlcyB0byBiZSBhZGRlZCB0byB0aGUgaW1hZ2UuIFlvdSBzaG91bGQgb25seSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitDT1JFQkFTRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgT3BlbkVtYmVkZGVkIENvcmUgTWV0YWRhdGEgbGF5ZXIgKGkuZS4gbWV0YSkuIgorQ09ORl9WRVJTSU9OW2RvY10gPSAiVHJhY2tzIHRoZSB2ZXJzaW9uIG9mIGxvY2FsLmNvbmYuICBJbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvIGNoYW5nZXMgaW5jb21wYXRpYmx5LiIKK0NWU0RJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgY3ZzIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZCBpbi4iCisKKyNECisKK0RbZG9jXSA9ICJUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LiIKK0RBVEVbZG9jXSA9ICJUaGUgZGF0ZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQgdXNpbmcgWU1EIGZvcm1hdC4iCitEQVRFVElNRVtkb2NdID0gIlRoZSBkYXRlIGFuZCB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZC4iCitERUJVR19CVUlMRFtkb2NdID0gIlNwZWNpZmllcyB0byBidWlsZCBwYWNrYWdlcyB3aXRoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZsdWVuY2VzIHRoZSB2YWx1ZSBvZiB0aGUgU0VMRUNURURfT1BUSU1JWkFUSU9OIHZhcmlhYmxlLiIKK0RFQlVHX09QVElNSVpBVElPTltkb2NdID0gIlRoZSBvcHRpb25zIHRvIHBhc3MgaW4gVEFSR0VUX0NGTEFHUyBhbmQgQ0ZMQUdTIHdoZW4gY29tcGlsaW5nIGEgc3lzdGVtIGZvciBkZWJ1Z2dpbmcuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJy1PIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1nJy4iCitERUZBVUxUX1BSRUZFUkVOQ0VbZG9jXSA9ICJTcGVjaWZpZXMgYSB3ZWFrIGJpYXMgZm9yIHJlY2lwZSBzZWxlY3Rpb24gcHJpb3JpdHkuIgorREVQRU5EU1tkb2NdID0gIkxpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4iCitERVBMT1lfRElSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBnZW5lcmFsIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCitERVBMT1lfRElSX0lNQUdFW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMgYW5kIG90aGVyIGFzc29jaWF0ZWQgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIGRlcGxveWVkIG9udG8gdGhlIHRhcmdldCBtYWNoaW5lLiIKK0RFUExPWURJUltkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZGVwbG95IGNsYXNzLCB0aGUgREVQTE9ZRElSIHBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgZm9yIGRlcGxveWVkIGZpbGVzLiIKK0RFU0NSSVBUSU9OW2RvY10gPSAiVGhlIHBhY2thZ2UgZGVzY3JpcHRpb24gdXNlZCBieSBwYWNrYWdlIG1hbmFnZXJzLiBJZiBub3Qgc2V0LCBERVNDUklQVElPTiB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIFNVTU1BUlkgdmFyaWFibGUuIgorRElTVFJPW2RvY10gPSAiVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZC4iCitESVNUUk9fRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcy4gVGhlIHZhcmlhYmxlIG9ubHkgYXBwbGllcyB0byB0aGUgaW1hZ2VzIHRoYXQgaW5jbHVkZSBwYWNrYWdlZ3JvdXAtYmFzZS4iCitESVNUUk9fRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcyBpZiB0aGUgcGFja2FnZXMgZXhpc3QuIFRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBidXQgeW91IGNhbiByZW1vdmUgdGhlbS4iCitESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJUaGUgZmVhdHVyZXMgZW5hYmxlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbi4iCitESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExbZG9jXSA9ICJGZWF0dXJlcyB0byBiZSBhZGRlZCB0byBESVNUUk9fRkVBVFVSRVMgaWYgbm90IGFsc28gcHJlc2VudCBpbiBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlIG1ldGEvY29uZi9iaXRiYWtlLmNvbmYgZmlsZSBhbmQgaXQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZXItY29uZmlndXJhYmxlLiIKK0RJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEW2RvY10gPSAiRmVhdHVyZXMgZnJvbSBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gRElTVFJPX0ZFQVRVUkVTKSBkdXJpbmcgdGhlIGJ1aWxkLiIKK0RJU1RST19OQU1FW2RvY10gPSAiVGhlIGxvbmcgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKK0RJU1RST19QTl9BTElBU1tkb2NdID0gIkFsaWFzIG5hbWVzIHVzZWQgZm9yIHRoZSByZWNpcGUgaW4gdmFyaW91cyBMaW51eCBkaXN0cmlidXRpb25zLiIKK0RJU1RST19WRVJTSU9OW2RvY10gPSAiVGhlIHZlcnNpb24gb2YgdGhlIGRpc3RyaWJ1dGlvbi4iCitESVNUUk9PVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLiBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhlIERJU1RSTyB2YXJpYWJsZS4iCitETF9ESVJbZG9jXSA9ICJUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzdG9yZSBkb3dubG9hZHMuIEJ5IGRlZmF1bHQsIHRoZSBkaXJlY3RvcnkgaXMgJ2Rvd25sb2FkcycgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCisKKyNFCisKK0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT05bZG9jXSA9ICJDb250cm9scyB3aGljaCBsb2NhbGVzIGZvciBnbGliYyBhcmUgZ2VuZXJhdGVkIGR1cmluZyB0aGUgYnVpbGQuIFRoZSB2YXJpYWJsZSBpcyB1c2VmdWwgaWYgdGhlIHRhcmdldCBkZXZpY2UgaGFzIDY0TWJ5dGVzIG9mIFJBTSBvciBsZXNzLiIKK0VSUk9SX1FBW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3Mgd2hvc2UgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFzIGVycm9ycyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitFWENMVURFX0ZST01fV09STERbZG9jXSA9ICJEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLiBiaXRiYWtlIHdvcmxkKS4iCitFWFRFTkRQRVtkb2NdID0gIlVzZWQgd2l0aCBmaWxlIGFuZCBwYXRobmFtZXMgdG8gY3JlYXRlIGEgcHJlZml4IGZvciBhIHJlY2lwZSdzIHZlcnNpb24gYmFzZWQgb24gdGhlIHJlY2lwZSdzIFBFIHZhbHVlLiBJZiBQRSBpcyBzZXQgYW5kIGdyZWF0ZXIgdGhhbiB6ZXJvIGZvciBhIHJlY2lwZSwgRVhURU5EUEUgYmVjb21lcyB0aGF0IHZhbHVlLiIKK0VYVEVORFBLR1ZbZG9jXSA9ICJUaGUgZnVsbCBwYWNrYWdlIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBhcyBpdCBhcHBlYXJzIG9uIHRoZSBmaW5hbCBwYWNrYWdlcyBwcm9kdWNlZCBieSBhIHJlY2lwZS4iCitFWFRFUk5BTFNSQ1tkb2NdID0gIklmIGV4dGVybmFsc3JjLmJiY2xhc3MgaXMgaW5oZXJpdGVkLCB0aGlzIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc291cmNlIHRyZWUsIHdoaWNoIGlzIG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorRVhURVJOQUxTUkNfQlVJTERbZG9jXSA9ICJJZiBleHRlcm5hbHNyYy5iYmNsYXNzIGlzIGluaGVyaXRlZCwgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcmVjaXBlJ3Mgc291cmNlIGNvZGUgaXMgYnVpbHQsIHdoaWNoIGlzIG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorRVhUUkFfSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBhZGRpdGlvbmFsIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0VYVFJBX0lNQUdFREVQRU5EU1tkb2NdID0gIkEgbGlzdCBvZiByZWNpcGVzIHRvIGJ1aWxkIHRoYXQgZG8gbm90IHByb3ZpZGUgcGFja2FnZXMgZm9yIGluc3RhbGxpbmcgaW50byB0aGUgcm9vdCBmaWxlc3lzdGVtLiBVc2UgdGhpcyB2YXJpYWJsZSB0byBsaXN0IHJlY2lwZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIGZpbmFsIGltYWdlLCBidXQgbm90IG5lZWRlZCBpbiB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKK0VYVFJBX09FQ01BS0VbZG9jXSA9ICJBZGRpdGlvbmFsIGNtYWtlIG9wdGlvbnMuIgorRVhUUkFfT0VDT05GW2RvY10gPSAiQWRkaXRpb25hbCBjb25maWd1cmUgc2NyaXB0IG9wdGlvbnMuIgorRVhUUkFfT0VNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBHTlUgbWFrZSBvcHRpb25zLiIKK0VYVFJBX09FU0NPTlNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBzY29ucyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgc2NvbnMgY29tbWFuZCBsaW5lLiIKK0VYVFJBX1FNQUtFVkFSU19QT1NUW2RvY10gPSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3Igb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHFtYWtlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGFmdGVyIHRoZSAucHJvIGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK0VYVFJBX1FNQUtFVkFSU19QUkVbZG9jXSA9ICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gcW1ha2Ugd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYmVmb3JlIHRoZSAucHJvIGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK0VYVFJBX1VTRVJTX1BBUkFNU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGV4dHJhdXNlcnMgY2xhc3MsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgaW1hZ2UgbGV2ZWwgdXNlciBhbmQgZ3JvdXAgb3BlcmF0aW9ucy4iCisKKyNGCisKK0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJW2RvY10gPSAiQWxsb3cgdG8gc2VydmUgaXBrIGRlcGxveSBkaXJlY3RvcnkgYXMgYW4gYWQgaG9jIGZlZWQgKGJvZ29mZWVkKS4gU2V0IHRvIGJhc2UgVVJMIG9mIHRoZSBkaXJlY3RvcnkgYXMgZXhwb3J0ZWQgYnkgSFRUUC4gU2V0IG9mIGFkIGhvYyBmZWVkIGNvbmZpZ3Mgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gdGhlIGltYWdlLiIKK0ZJTEVTW2RvY10gPSAiVGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdGhhdCBhcmUgcGxhY2VkIGluIHBhY2thZ2VzLiIKK0ZJTEVTRVhUUkFQQVRIU1tkb2NdID0gIkV4dGVuZHMgdGhlIHNlYXJjaCBwYXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBsb29raW5nIGZvciBmaWxlcyBhbmQgcGF0Y2hlcyBhcyBpdCBwcm9jZXNzZXMgcmVjaXBlcyBhbmQgYXBwZW5kIGZpbGVzLiIKK0ZJTEVTT1ZFUlJJREVTW2RvY10gPSAiQSBzdWJzZXQgb2YgT1ZFUlJJREVTIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZm9yIGNyZWF0aW5nIEZJTEVTUEFUSC4iCitGSUxFU1BBVEhbZG9jXSA9ICJUaGUgZGVmYXVsdCBzZXQgb2YgZGlyZWN0b3JpZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIHNlYXJjaGluZyBmb3IgcGF0Y2hlcyBhbmQgZmlsZXMuIEl0IGlzIGRlZmluZWQgaW4gdGhlIGJhc2UuYmJjbGFzcyBjbGFzcyBmb3VuZCBpbiBtZXRhL2NsYXNzZXMgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkuIERvIG5vdCBoYW5kLWVkaXQgdGhlIEZJTEVTUEFUSCB2YXJpYWJsZS4iCitGSUxFU1lTVEVNX1BFUk1TX1RBQkxFU1tkb2NdID0gIkFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZ3MgdGFibGUgYXMgcGFydCBvZiB5b3VyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4iCitGT05UX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBydW50aW1lIGRlcGVuZGVuY2llcyBmb3IgZm9udCBwYWNrYWdlcy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnZm9udGNvbmZpZy11dGlscycuIgorRk9OVF9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGZvbnRjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIHBhY2thZ2VzIGNvbnRhaW5pbmcgZm9udCBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgY2FjaGVkIGJ5IEZvbnRjb25maWcuIgorRlVMTF9PUFRJTUlaQVRJT05bZG9jXT0gIlRoZSBvcHRpb25zIHRvIHBhc3MgaW4gVEFSR0VUX0NGTEFHUyBhbmQgQ0ZMQUdTIHdoZW4gY29tcGlsaW5nIGFuIG9wdGltaXplZCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJy1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMicuIgorCisjRworCitHSVRESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIEdpdCBjbG9uZXMgd2lsbCBiZSBzdG9yZWQuIgorR1JPVVBBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cGFkZCBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIGFkZCBhIGdyb3VwIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIgorR1JPVVBNRU1TX1BBUkFNW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgdXNlcmFkZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgZ3JvdXBtZW1zIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gbW9kaWZ5IHRoZSBtZW1iZXJzIG9mIGEgZ3JvdXAgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIgorR1JVQl9HRlhTRVJJQUxbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSB0byBoYXZlIGdyYXBoaWNzIGFuZCBzZXJpYWwgaW4gdGhlIGJvb3QgbWVudS4iCitHUlVCX09QVFNbZG9jXSA9ICJBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSBjb25maWd1cmF0aW9uLiIKK0dSVUJfVElNRU9VVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWZhdWx0IExBQkVMIGluIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKS4iCitHVEtJTU1PRFVMRVNfUEFDS0FHRVNbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGd0ay1pbW1vZHVsZXMtY2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gdGhlIEdUSysgaW5wdXQgbWV0aG9kIG1vZHVsZXMgYmVpbmcgaW5zdGFsbGVkIHdoZW4gdGhlIG1vZHVsZXMgYXJlIGluIHBhY2thZ2VzIG90aGVyIHRoYW4gdGhlIG1haW4gcGFja2FnZS4iCisKKyNICisKK0hPTUVQQUdFW2RvY10gPSAiV2Vic2l0ZSB3aGVyZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nIGNhbiBiZSBmb3VuZC4iCitIT1NUX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX0FSQ0guIgorSE9TVF9DQ19BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQ0NfQVJDSC4iCitIT1NUX09TW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtLiBOb3JtYWxseSB0aGUgc2FtZSBhcyB0aGUgVEFSR0VUX09TLiIKK0hPU1RfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCBmb3IgdGhlIGNyb3NzIGNvbXBpbGUgdG9vbGNoYWluLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfUFJFRklYLiIKK0hPU1RfU1lTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgZm9yIHdpdGggdGhlIGJ1aWxkIGlzIG9jY3VycmluZyBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCByZWNpcGUuIgorSE9TVF9WRU5ET1JbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdmVuZG9yLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfVkVORE9SLiIKKworI0kKKworSUNFQ0NfRU5WX0VYRUNbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGljZWNjLWNyZWF0ZS1lbnYgc2NyaXB0IHRoYXQgeW91IHByb3ZpZGUuIgorSUNFQ0NfUEFUSFtkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUgaWNlY2MgYmluYXJ5LiIKK0lDRUNDX1VTRVJfQ0xBU1NfQkxbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgY2xhc3NlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGNvbnNpZGVyLiIKK0lDRUNDX1VTRVJfUEFDS0FHRV9CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorSUNFQ0NfVVNFUl9QQUNLQUdFX1dMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB1c2UgYW4gZW1wdHkgUEFSQUxMRUxfTUFLRSB2YXJpYWJsZSB0aGF0IHlvdSB3YW50IHRvIGZvcmNlIHJlbW90ZSBkaXN0cmlidXRlZCBjb21waWxhdGlvbiBvbiB1c2luZyB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0LiIKK0lNQUdFX0JBU0VOQU1FW2RvY10gPSAiVGhlIGJhc2UgbmFtZSBvZiBpbWFnZSBvdXRwdXQgZmlsZXMuIgorSU1BR0VfQk9PVF9GSUxFU1tkb2NdID0gIldoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgZnJvbSAke0RFUExPWV9ESVJfSU1BR0V9IHRvIHBsYWNlIGluIGJvb3QgcGFydGl0aW9uLiBFbnRyaWVzIHdpbGwgYmUgaW5zdGFsbGVkIHVuZGVyIGEgc2FtZSBuYW1lIGFzIHRoZSBzb3VyY2UgZmlsZS4gVG8gY2hhbmdlIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIHBhc3MgYSBkZXNpcmVkIG5hbWUgYWZ0ZXIgYSBzZW1pY29sb24gKGVnLiB1LWJvb3QuaW1nO3Vib290KS4iCitJTUFHRV9DTEFTU0VTW2RvY10gPSAiQSBsaXN0IG9mIGNsYXNzZXMgdGhhdCBhbGwgaW1hZ2VzIHNob3VsZCBpbmhlcml0LiIKK0lNQUdFX0ZFQVRVUkVTW2RvY10gPSAiVGhlIHByaW1hcnkgbGlzdCBvZiBmZWF0dXJlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlLiBDb25maWd1cmUgdGhpcyB2YXJpYWJsZSBpbiBhbiBpbWFnZSByZWNpcGUuIgorSU1BR0VfRlNUWVBFU1tkb2NdID0gIkZvcm1hdHMgb2Ygcm9vdCBmaWxlc3lzdGVtIGltYWdlcyB0aGF0IHlvdSB3YW50IHRvIGhhdmUgY3JlYXRlZC4iCitJTUFHRV9JTlNUQUxMW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UuIEltYWdlIHJlY2lwZXMgc2V0IElNQUdFX0lOU1RBTEwgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlIHRocm91Z2ggaW1hZ2UuYmJjbGFzcy4iCitJTUFHRV9MSU5HVUFTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGxvY2FsZXMgdG8gaW5zdGFsbCBpbnRvIHRoZSBpbWFnZSBkdXJpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBjb25zdHJ1Y3Rpb24gcHJvY2Vzcy4iCitJTUFHRV9OQU1FW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBpbWFnZSBmaWxlcyBtaW51cyB0aGUgZXh0ZW5zaW9uLiIKK0lNQUdFX09WRVJIRUFEX0ZBQ1RPUltkb2NdID0gIkRlZmluZXMgYSBtdWx0aXBsaWVyIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRvIHRoZSBpbml0aWFsIGltYWdlIHNpemUgZm9yIGNhc2VzIHdoZW4gdGhlIG11bHRpcGxpZXIgdGltZXMgdGhlIHJldHVybmVkIGRpc2sgdXNhZ2UgdmFsdWUgZm9yIHRoZSBpbWFnZSBpcyBncmVhdGVyIHRoYW4gdGhlIHN1bSBvZiBJTUFHRV9ST09URlNfU0laRSBhbmQgSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFLiIKK0lNQUdFX1BLR1RZUEVbZG9jXSA9ICJEZWZpbmVzIHRoZSBwYWNrYWdlIHR5cGUgKERFQiwgUlBNLCBJUEssIG9yIFRBUikgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiQWRkZWQgYnkgY2xhc3NlcyB0byBydW4gcG9zdCBwcm9jZXNzaW5nIGNvbW1hbmRzIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGltYWdlLiIKK0lNQUdFX1JPT1RGU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHdoaWxlIGl0IGlzIHVuZGVyIGNvbnN0cnVjdGlvbiAoaS5lLiBkdXJpbmcgZG9fcm9vdGZzKS4iCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VbZG9jXSA9ICJEZWZpbmVzIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIGNyZWF0ZWQgaW4gdGhlIGltYWdlIGluIEtieXRlcy4gQnkgZGVmYXVsdCwgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gJzAnLiIKK0lNQUdFX1JPT1RGU19TSVpFW2RvY10gPSAiRGVmaW5lcyB0aGUgc2l6ZSBpbiBLYnl0ZXMgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UuIgorSU1BR0VfVFlQRVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIHR5cGVzIGJ5IGRlZmF1bHQuIgorSU5DX1BSW2RvY10gPSAiSGVscHMgZGVmaW5lIHRoZSByZWNpcGUgcmV2aXNpb24gZm9yIHJlY2lwZXMgdGhhdCBzaGFyZSBhIGNvbW1vbiBpbmNsdWRlIGZpbGUuIgorSU5DT01QQVRJQkxFX0xJQ0VOU0VbZG9jXSA9ICJTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaWNlbnNlIG5hbWVzIChhcyB0aGV5IHdvdWxkIGFwcGVhciBpbiBMSUNFTlNFKSB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4gV2lsZGNhcmQgaXMgc3VwcG9ydGVkLCBzdWNoIGFzICcqR1BMdjMnIgorSU5ISUJJVF9ERUZBVUxUX0RFUFNbZG9jXSA9ICJQcmV2ZW50cyB0aGUgZGVmYXVsdCBkZXBlbmRlbmNpZXMsIG5hbWVseSB0aGUgQyBjb21waWxlciBhbmQgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSwgZnJvbSBiZWluZyBhZGRlZCB0byBERVBFTkRTLiIKK0lOSElCSVRfUEFDS0FHRV9TVFJJUFtkb2NdID0gIklmIHNldCB0byAiMSIsIGNhdXNlcyB0aGUgYnVpbGQgdG8gbm90IHN0cmlwIGJpbmFyaWVzIGluIHJlc3VsdGluZyBwYWNrYWdlcy4iCitJTkhFUklUW2RvY10gPSAiQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4gVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4iCitJTkhFUklUX0RJU1RST1tkb2NdID0gIkxpc3RzIGNsYXNzZXMgdGhhdCB3aWxsIGJlIGluaGVyaXRlZCBhdCB0aGUgZGlzdHJpYnV0aW9uIGxldmVsLiBJdCBpcyB1bmxpa2VseSB0aGF0IHlvdSB3YW50IHRvIGVkaXQgdGhpcyB2YXJpYWJsZS4iCitJTklUUkFNRlNfRlNUWVBFU1tkb2NdID0gIkRlZmluZXMgdGhlIGZvcm1hdCBmb3IgdGhlIG91dHB1dCBpbWFnZSBvZiBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpLCB3aGljaCBpcyB1c2VkIGR1cmluZyBib290LiIKK0lOSVRSRFtkb2NdID0gIkluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmQpLiIKK0lOSVRTQ1JJUFRfTkFNRVtkb2NdID0gIlRoZSBmaWxlbmFtZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0IGFzIGluc3RhbGxlZCB0byAke3N5c2NvbmZkaXJ9L2luaXQuZC4iCitJTklUU0NSSVBUX1BBQ0tBR0VTW2RvY10gPSAiQSBsaXN0IG9mIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gaW5pdHNjcmlwdHMuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiByZWNpcGVzIHdoZW4gdXNpbmcgdXBkYXRlLXJjLmQuYmJjbGFzcy4gVGhlIHZhcmlhYmxlIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byB0aGUgUE4gdmFyaWFibGUuIgorSU5JVFNDUklQVF9QQVJBTVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIG9wdGlvbnMgdG8gcGFzcyB0byB1cGRhdGUtcmMuZC4gVGhlIHZhcmlhYmxlIGlzIG1hbmRhdG9yeSBhbmQgaXMgdXNlZCBpbiByZWNpcGVzIHdoZW4gdXNpbmcgdXBkYXRlLXJjLmQuYmJjbGFzcy4iCitJTlNBTkVfU0tJUFtkb2NdID0gIlNwZWNpZmllcyB0aGUgUUEgY2hlY2tzIHRvIHNraXAgZm9yIGEgc3BlY2lmaWMgcGFja2FnZSB3aXRoaW4gYSByZWNpcGUuIgorSVBLX0ZFRURfVVJJU1tkb2NdID0gIkxpc3Qgb2YgaXBrZyBmZWVkIHJlY29yZHMgdG8gcHV0IGludG8gZ2VuZXJhdGVkIGltYWdlLiIKKworI0sKKworS0FSQ0hbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgYXJjaGl0ZWN0dXJlIHVzZWQgd2hlbiBhc3NlbWJsaW5nIHRoZSBjb25maWd1cmF0aW9uLiBZb3UgZGVmaW5lIHRoZSBLQVJDSCB2YXJpYWJsZSBpbiB0aGUgQlNQIERlc2NyaXB0aW9ucy4iCitLQlJBTkNIW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBleHBsaWNpdGx5IGlkZW50aWZ5IHRoZSBrZXJuZWwgYnJhbmNoIHRoYXQgaXMgdmFsaWRhdGVkLCBwYXRjaGVkIGFuZCBjb25maWd1cmVkIGR1cmluZyBhIGJ1aWxkLiIKK0tCUkFOQ0hfREVGQVVMVFtkb2NdID0gIkRlZmluZXMgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoIHVzZWQgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbC4gVW5sZXNzIHlvdSBzcGVjaWZ5IG90aGVyd2lzZSwgdGhlIHZhcmlhYmxlIGluaXRpYWxpemVzIHRvICdtYXN0ZXInLiIKK0tFUk5FTF9DTEFTU0VTW2RvY10gPSAiQSBsaXN0IG9mIGNsYXNzZXMgZGVmaW5pbmcga2VybmVsIGltYWdlIHR5cGVzIHRoYXQga2VybmVsIGNsYXNzIHNob3VsZCBpbmhlcml0LiIKK0tFUk5FTF9FWFRSQV9BUkdTW2RvY10gPSAiU3BlY2lmaWVzIGFkZGl0aW9uYWwgbWFrZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBhc3NlcyBvbiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLiIKK0tFUk5FTF9GRUFUVVJFU1tkb2NdID0gIkluY2x1ZGVzIGFkZGl0aW9uYWwgbWV0YWRhdGEgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkuIFRoZSBtZXRhZGF0YSB5b3UgYWRkIHRocm91Z2ggdGhpcyB2YXJpYWJsZSBpbmNsdWRlcyBjb25maWcgZnJhZ21lbnRzIGFuZCBmZWF0dXJlcyBkZXNjcmlwdGlvbnMuIgorS0VSTkVMX0lNQUdFVFlQRVtkb2NdID0gIlRoZSB0eXBlIG9mIGtlcm5lbCB0byBidWlsZCBmb3IgYSBkZXZpY2UsIHVzdWFsbHkgc2V0IGJ5IHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGRlZmF1bHRzIHRvICd6SW1hZ2UnLiIKK0tFUk5FTF9NT0RVTEVfQVVUT0xPQURbZG9jXSA9ICJMaXN0cyBrZXJuZWwgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgYXV0by1sb2FkZWQgZHVyaW5nIGJvb3QiCitLRVJORUxfTU9EVUxFX1BST0JFQ09ORltkb2NdID0gIkxpc3RzIGtlcm5lbCBtb2R1bGVzIGZvciB3aGljaCB0aGUgYnVpbGQgc3lzdGVtIGV4cGVjdHMgdG8gZmluZCBtb2R1bGVfY29uZl8qIHZhbHVlcyB0aGF0IHNwZWNpZnkgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBvZiB0aGUgbW9kdWxlcyIKK0tFUk5FTF9QQVRIW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSBrZXJuZWwgc291cmNlcy4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBTVEFHSU5HX0tFUk5FTF9ESVIgd2l0aGluIHRoZSBtb2R1bGUgY2xhc3MgKG1vZHVsZS5iYmNsYXNzKS4iCitLRVJORUxfU1JDW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSBrZXJuZWwgc291cmNlcy4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBTVEFHSU5HX0tFUk5FTF9ESVIgd2l0aGluIHRoZSBtb2R1bGUgY2xhc3MgKG1vZHVsZS5iYmNsYXNzKS4iCitLRkVBVFVSRV9ERVNDUklQVElPTltkb2NdID0gIlByb3ZpZGVzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LiBZb3UgdXNlIHRoaXMgdmFyaWFibGUgaW4gdGhlIC5zY2MgZmlsZSB0aGF0IGRlc2NyaWJlcyBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZS4iCitLTUFDSElORVtkb2NdID0gIlRoZSBtYWNoaW5lIGFzIGtub3duIGJ5IHRoZSBrZXJuZWwuIgorS1RZUEVbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIgorCisjTAorCitMQVlFUkRFUEVORFNbZG9jXSA9ICJMaXN0cyB0aGUgbGF5ZXJzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB1cG9uIHdoaWNoIHRoaXMgcmVjaXBlIGRlcGVuZHMuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIuIgorTEFZRVJESVJbZG9jXSA9ICJXaGVuIHVzZWQgaW5zaWRlIHRoZSBsYXllci5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllci4iCitMQVlFUlZFUlNJT05bZG9jXSA9ICJPcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBjb25mL2xheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllci4iCitMRUFEX1NPTkFNRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgbGVhZCAob3IgcHJpbWFyeSkgY29tcGlsZWQgbGlicmFyeSBmaWxlICguc28pIHRoYXQgdGhlIGRlYmlhbiBjbGFzcyBhcHBsaWVzIGl0cyBuYW1pbmcgcG9saWN5IHRvIGdpdmVuIGEgcmVjaXBlIHRoYXQgcGFja2FnZXMgbXVsdGlwbGUgbGlicmFyaWVzLiIKK0xJQ19GSUxFU19DSEtTVU1bZG9jXSA9ICJDaGVja3N1bXMgb2YgdGhlIGxpY2Vuc2UgdGV4dCBpbiB0aGUgcmVjaXBlIHNvdXJjZSBjb2RlLiIKK0xJQ0VOU0VbZG9jXSA9ICJUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuIExvZ2ljYWwgb3BlcmF0b3JzICcmJyBvciAnfCcgYW5kIHBhcmVudGhlc2VzIGNhbiBiZSB1c2VkLiIKK0xJQ0VOU0VfUEFUSFtkb2NdID0gIlBhdGggdG8gYWRkaXRpb25hbCBsaWNlbnNlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuIgorTElOVVhfS0VSTkVMX1RZUEVbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIgorTElOVVhfVkVSU0lPTltkb2NdID0gIlRoZSBMaW51eCB2ZXJzaW9uIGZyb20ga2VybmVsLm9yZyBvbiB3aGljaCB0aGUgTGludXgga2VybmVsIGltYWdlIGJlaW5nIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlzIGJhc2VkLiBZb3UgZGVmaW5lIHRoaXMgdmFyaWFibGUgaW4gdGhlIGtlcm5lbCByZWNpcGUuIgorTElOVVhfVkVSU0lPTl9FWFRFTlNJT05bZG9jXSA9ICJBIHN0cmluZyBleHRlbnNpb24gY29tcGlsZWQgaW50byB0aGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIExpbnV4IGtlcm5lbCBidWlsdCB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiBZb3UgZGVmaW5lIHRoaXMgdmFyaWFibGUgaW4gdGhlIGtlcm5lbCByZWNpcGUuIgorTE9HX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdyaXRlcyBvdmVyYWxsIGxvZyBmaWxlcy4gVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzICR7VE1QRElSfS9sb2ciCisKKyNNCisKK01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCBkZXZpY2UgZm9yIHdoaWNoIHRoZSBpbWFnZSBpcyBidWlsdC4gWW91IGRlZmluZSBNQUNISU5FIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlcXVpcmVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdC4gQmVjYXVzZSB0aGlzIGlzIGEgJ21hY2hpbmUgZXNzZW50aWFsJyB2YXJpYWJsZSwgdGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4iCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiByZWNvbW1lbmRlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuIEJlY2F1c2UgdGhpcyBpcyBhICdtYWNoaW5lIGVzc2VudGlhbCcgdmFyaWFibGUsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIgorTUFDSElORV9FWFRSQV9SREVQRU5EU1tkb2NdID0gIkEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4gSG93ZXZlciwgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIG1vcmUgZnVsbHktZmVhdHVyZWQgaW1hZ2VzIGRlcGVuZHMgb24gdGhlIHBhY2thZ2VzIGJlaW5nIHByZXNlbnQuIgorTUFDSElORV9FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgYm9vdGluZyB0aGUgbWFjaGluZS4gVGhlIGltYWdlIGJlaW5nIGJ1aWx0IGhhcyBubyBidWlsZCBkZXBlbmRlbmNpZXMgb24gdGhlIHBhY2thZ2VzIGluIHRoaXMgbGlzdC4iCitNQUNISU5FX0ZFQVRVUkVTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGhhcmR3YXJlIGZlYXR1cmVzIHRoZSBNQUNISU5FIHN1cHBvcnRzLiIKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExbZG9jXSA9ICJGZWF0dXJlcyB0byBiZSBhZGRlZCB0byBNQUNISU5FX0ZFQVRVUkVTIGlmIG5vdCBhbHNvIHByZXNlbnQgaW4gTUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVELiBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgbWV0YS9jb25mL2JpdGJha2UuY29uZiBmaWxlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuIgorTUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEW2RvY10gPSAiRmVhdHVyZXMgZnJvbSBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMIHRoYXQgc2hvdWxkIG5vdCBiZSBiYWNrZmlsbGVkIChpLmUuIGFkZGVkIHRvIE1BQ0hJTkVfRkVBVFVSRVMpIGR1cmluZyB0aGUgYnVpbGQuIgorTUFDSElORU9WRVJSSURFU1tkb2NdID0gIkxpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBtYWNoaW5lLiBCeSBkZWZhdWx0LCB0aGlzIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIE1BQ0hJTkUuIgorTUFJTlRBSU5FUltkb2NdID0gIlRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBkaXN0cmlidXRpb24gbWFpbnRhaW5lci4iCitNSVJST1JTW2RvY10gPSAiU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZXRzIHNvdXJjZSBjb2RlLiIKK01MUFJFRklYW2RvY10gPSAiU3BlY2lmaWVzIGEgcHJlZml4IGhhcyBiZWVuIGFkZGVkIHRvIFBOIHRvIGNyZWF0ZSBhIHNwZWNpYWwgdmVyc2lvbiBvZiBhIHJlY2lwZSBvciBwYWNrYWdlLCBzdWNoIGFzIGEgTXVsdGlsaWIgdmVyc2lvbi4iCitNT0RVTEVfVEFSQkFMTF9ERVBMT1lbZG9jXSA9ICJDb250cm9scyBjcmVhdGlvbiBvZiB0aGUgbW9kdWxlcy0qLnRneiBmaWxlLiBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMCIgdG8gZGlzYWJsZSBjcmVhdGlvbiBvZiB0aGlzIGZpbGUsIHdoaWNoIGNvbnRhaW5zIGFsbCBvZiB0aGUga2VybmVsIG1vZHVsZXMgcmVzdWx0aW5nIGZyb20gYSBrZXJuZWwgYnVpbGQuIgorTVVMVElNQUNIX1RBUkdFVF9TWVNbZG9jXSA9ICJTZXBhcmF0ZXMgZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcyBzdWNoIHRoYXQgeW91IGNhbiBidWlsZCBmb3IgbXVsdGlwbGUgdGFyZ2V0IG1hY2hpbmVzIHVzaW5nIHRoZSBzYW1lIG91dHB1dCBkaXJlY3Rvcmllcy4iCisKKyNOCisKK05BVElWRUxTQlNUUklOR1tkb2NdID0gIkEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBob3N0IGRpc3RyaWJ1dGlvbi4iCitOT19SRUNPTU1FTkRBVElPTlNbZG9jXSA9ICJXaGVuIHNldCB0byAnMScsIG5vIHJlY29tbWVuZGVkIHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkLiBSZWFsaXplIHRoYXQgc29tZSByZWNvbW1lbmRlZCBwYWNrYWdlcyBtaWdodCBiZSByZXF1aXJlZCBmb3IgY2VydGFpbiBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgc3VjaCBhcyBrZXJuZWwtbW9kdWxlcy4gSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gYWRkIHBhY2thZ2VzIHRvIElNQUdFX0lOU1RBTEwgYXMgbmVlZGVkLiIKK05PSEREW2RvY10gPSAiQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlIC5oZGRpbWcgaW1hZ2UuIgorTk9JU09bZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2tpcCBidWlsZGluZyB0aGUgSVNPIGltYWdlLiIKKworI08KKworT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGJpbmNvbmZpZy5iYmNsYXNzIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlICJzZWQiIGNvbW1hbmQuIgorT0VfSU1QT1JUU1tkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHVzZWQgdG8gdGVsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGF0IFB5dGhvbiBtb2R1bGVzIHRvIGltcG9ydCBmb3IgZXZlcnkgUHl0aG9uIGZ1bmN0aW9uIHJ1biBieSB0aGUgc3lzdGVtLiIKK09FX1RFUk1JTkFMW2RvY10gPSAiQ29udHJvbHMgaG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNwYXducyBpbnRlcmFjdGl2ZSB0ZXJtaW5hbHMgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtLiIKK09FUk9PVFtkb2NdID0gIlRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBpcyBzb3VyY2VkLiIKK09MREVTVF9LRVJORUxbZG9jXSA9ICJEZWNsYXJlcyB0aGUgb2xkZXN0IHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbCB0aGF0IHRoZSBwcm9kdWNlZCBiaW5hcmllcyBtdXN0IHN1cHBvcnQuIgorT1ZFUlJJREVTW2RvY10gPSAiQml0QmFrZSB1c2VzIE9WRVJSSURFUyB0byBjb250cm9sIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UgcGFyc2VzIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorCisjUAorCitQW2RvY10gPSAiVGhlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uLiBQIGlzIGNvbXByaXNlZCBvZiAke1BOfS0ke1BWfS4iCitQQUNLQUdFX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBvciBwYWNrYWdlcy4iCitQQUNLQUdFX0FSQ0hTW2RvY10gPSAiQSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgaW4gb3JkZXIgb2YgcHJpb3JpdHkuIgorUEFDS0FHRV9CRUZPUkVfUE5bZG9jXSA9ICJFbmFibGVzIGVhc2lseSBhZGRpbmcgcGFja2FnZXMgdG8gUEFDS0FHRVMgYmVmb3JlICR7UE59IHNvIHRoYXQgdGhlIHBhY2thZ2VzIGNhbiBwaWNrIHVwIGZpbGVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgcGFja2FnZS4iCitQQUNLQUdFX0NMQVNTRVNbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSB3aGVuIHBhY2thZ2luZyBkYXRhLiBJdCBpcyBzZXQgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorUEFDS0FHRV9FWENMVURFW2RvY10gPSAiUGFja2FnZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBpbnN0YWxsYXRpb24uIElmIGEgbGlzdGVkIHBhY2thZ2UgaXMgcmVxdWlyZWQsIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGFyY2hpdGVjdHVyZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZXZpY2UgQ1BVLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCB3aGVuIHlvdSBidWlsZCBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgZGV2aWNlcyB0aGF0IHVzZSBtaXNjZWxsYW5lb3VzIHByb2Nlc3NvcnMuIgorUEFDS0FHRV9HUk9VUFtkb2NdID0gIkRlZmluZXMgb25lIG9yIG1vcmUgcGFja2FnZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZSB3aGVuIGEgc3BlY2lmaWMgaXRlbSBpcyBpbmNsdWRlZCBpbiBJTUFHRV9GRUFUVVJFUy4iCitQQUNLQUdFX0lOU1RBTExbZG9jXSA9ICJMaXN0IG9mIHRoZSBwYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQgaW50byB0aGUgaW1hZ2UuIFRoZSB2YXJpYWJsZSBpcyBnZW5lcmFsbHkgbm90IHVzZXItZGVmaW5lZCBhbmQgdXNlcyBJTUFHRV9JTlNUQUxMIGFzIHBhcnQgb2YgdGhlIGxpc3QuIgorUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZW2RvY10gPSAiTGlzdCBvZiBwYWNrYWdlcyBhdHRlbXB0ZWQgdG8gYmUgaW5zdGFsbGVkLiBJZiBhIGxpc3RlZCBwYWNrYWdlIGZhaWxzIHRvIGluc3RhbGwsIHRoZSBidWlsZCBzeXN0ZW0gZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IuIFRoaXMgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQuIgorUEFDS0FHRUNPTkZJR1tkb2NdID0gIlRoaXMgdmFyaWFibGUgcHJvdmlkZXMgYSBtZWFucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgZmVhdHVyZXMgb2YgYSByZWNpcGUgb24gYSBwZXItcmVjaXBlIGJhc2lzLiIKK1BBQ0tBR0VTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgY3JlYXRlZCBmcm9tIHRoZSByZWNpcGUuIgorUEFDS0FHRVNfRFlOQU1JQ1tkb2NdID0gIkEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcyBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLiIKK1BBUkFMTEVMX01BS0VbZG9jXSA9ICJTcGVjaWZpZXMgZXh0cmEgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1ha2UgY29tbWFuZCBkdXJpbmcgdGhlIGNvbXBpbGUgdGFza3MuIFRoaXMgdmFyaWFibGUgaXMgdXN1YWxseSBpbiB0aGUgZm9ybSAtaiA0LCB3aGVyZSB0aGUgbnVtYmVyIHJlcHJlc2VudHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIHRocmVhZHMgbWFrZSBjYW4gcnVuLiIKK1BBUkFMTEVMX01BS0VJTlNUW2RvY10gPSAiRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIG1ha2UgaW5zdGFsbCBjb21tYW5kIGR1cmluZyB0aGUgZG9faW5zdGFsbCB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uLiIKK1BBVENIUkVTT0xWRVtkb2NdID0gIkVuYWJsZSBvciBkaXNhYmxlIGludGVyYWN0aXZlIHBhdGNoIHJlc29sdXRpb24uIgorUEFUQ0hUT09MW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB1dGlsaXR5IHVzZWQgdG8gYXBwbHkgcGF0Y2hlcyBmb3IgYSByZWNpcGUgZHVyaW5nIGRvX3BhdGNoLiIKK1BFW2RvY10gPSAiVGhlIGVwb2NoIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzICcwJy4gVGhlIGZpZWxkIGlzIHVzZWQgdG8gbWFrZSB1cGdyYWRlcyBwb3NzaWJsZSB3aGVuIHRoZSB2ZXJzaW9uaW5nIHNjaGVtZSBjaGFuZ2VzIGluIHNvbWUgYmFja3dhcmRzIGluY29tcGF0aWJsZSB3YXkuIgorUEZbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHJlY2lwZSBvciBwYWNrYWdlIG5hbWUgYW5kIGluY2x1ZGVzIGFsbCB2ZXJzaW9uIGFuZCByZXZpc2lvbiBudW1iZXJzLiBUaGlzIHZhcmlhYmxlIGlzIGNvbXByaXNlZCBvZiAke1BOfS0ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9LiIKK1BJWEJVRl9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHBpeGJ1ZmNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZSBwaXhidWYgbG9hZGVycyB1c2VkIHdpdGggZ2RrLXBpeGJ1Zi4iCitQS0dEW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZm9yIGZpbGVzIHRvIGJlIHBhY2thZ2VkIGJlZm9yZSB0aGV5IGFyZSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorUEtHREFUQV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gYSBzaGFyZWQsIGdsb2JhbC1zdGF0ZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBkYXRhIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLiIKK1BLR0RFU1RbZG9jXSA9ICJQb2ludHMgdG8gdGhlIHBhcmVudCBkaXJlY3RvcnkgZm9yIGZpbGVzIHRvIGJlIHBhY2thZ2VkIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIHNwbGl0IGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4iCitQS0dERVNUV09SS1tkb2NdID0gIlBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUgZG9fcGFja2FnZSB0YXNrIHRvIHdyaXRlIG91dHB1dCBmcm9tIHRoZSBkb19wYWNrYWdlZGF0YSB0YXNrLiIKK1BOW2RvY10gPSAiUE4gcmVmZXJzIHRvIGEgcmVjaXBlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXMgaW5wdXQgdG8gY3JlYXRlIGEgcGFja2FnZS4gSXQgcmVmZXJzIHRvIGEgcGFja2FnZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSBjcmVhdGVkIG9yIHByb2R1Y2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK1BOQkxBQ0tMSVNUW2RvY10gPSAiTGlzdHMgcmVjaXBlcyB5b3UgZG8gbm90IHdhbnQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQuIgorUFJbZG9jXSA9ICJUaGUgcmV2aXNpb24gb2YgdGhlIHJlY2lwZS4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUgaXMgJ3IwJy4iCitQUkVGRVJSRURfUFJPVklERVJbZG9jXSA9ICJJZiBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgYW4gaXRlbSwgdGhpcyB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4iCitQUkVGRVJSRURfVkVSU0lPTltkb2NdID0gIklmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiByZWNpcGVzIGF2YWlsYWJsZSwgdGhpcyB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4iCitQUkVNSVJST1JTW2RvY10gPSAiU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZXRzIHNvdXJjZSBjb2RlLiIKK1BSSU5DW2RvY10gPSAiQ2F1c2VzIHRoZSBQUiB2YXJpYWJsZSBvZiAuYmJhcHBlbmQgZmlsZXMgdG8gZHluYW1pY2FsbHkgaW5jcmVtZW50LiBUaGlzIGluY3JlbWVudCBtaW5pbWl6ZXMgdGhlIGltcGFjdCBvZiBsYXllciBvcmRlcmluZy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnMCcuIgorUFJJT1JJVFlbZG9jXSA9ICJJbmRpY2F0ZXMgdGhlIGltcG9ydGFuY2Ugb2YgYSBwYWNrYWdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ29wdGlvbmFsJy4gIE90aGVyIHN0YW5kYXJkIHZhbHVlcyBhcmUgJ3JlcXVpcmVkJywgJ3N0YW5kYXJkJyBhbmQgJ2V4dHJhJy4iCitQUk9WSURFU1tkb2NdID0gIkEgbGlzdCBvZiBhbGlhc2VzIHRoYXQgYSByZWNpcGUgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzIGR1cmluZyB0aGUgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5IERFUEVORFMuIgorUFJTRVJWX0hPU1RbZG9jXSA9ICJUaGUgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuIgorUFZbZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgdmVyc2lvbiBpcyBub3JtYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgcmVjaXBlIGZpbGVuYW1lLiIKKworI1EKKworUU1BS0VfUFJPRklMRVNbZG9jXSA9ICJTcGVjaWZpZXMgeW91ciBvd24gc3Vic2V0IG9mIC5wcm8gZmlsZXMgdG8gYmUgYnVpbHQgZm9yIHVzZSB3aXRoIHFtYWtlLiIKKworI1IKKworUkNPTkZMSUNUU1tkb2NdID0gIlRoZSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBhbm90aGVyIHBhY2thZ2UuIE5vdGUgdGhhdCB0aGUgcGFja2FnZSB3aWxsIG5vdCBiZSBpbnN0YWxsZWQgaWYgdGhlIGNvbmZsaWN0aW5nIHBhY2thZ2VzIGFyZSBub3QgZmlyc3QgcmVtb3ZlZC4iCitSREVQRU5EU1tkb2NdID0gIkxpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKSB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGZvciB0aGUgcGFja2FnZSB0byBiZSBidWlsdC4gVGhleSBtdXN0IGJlIHRoZSBuYW1lcyBvZiBvdGhlciBwYWNrYWdlcyBhcyBsaXN0ZWQgaW4gdGhlIFBBQ0tBR0VTIHZhcmlhYmxlLCBub3QgcmVjaXBlIG5hbWVzIChQTikuIgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIHRoYXQgbXVzdCBleGlzdCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGluIG9yZGVyIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB0aGUgcmVjaXBlLiIKK1JNX09MRF9JTUFHRVtkb2NdID0gIlJlY2xhaW1zIGRpc2sgc3BhY2UgYnkgcmVtb3ZpbmcgcHJldmlvdXNseSBidWlsdCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBpbWFnZSBmcm9tIHRoZSBpbWFnZXMgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlIERFUExPWV9ESVIgdmFyaWFibGUuIgorUk1fV09SS19FWENMVURFW2RvY10gPSAiV2l0aCBybV93b3JrIGVuYWJsZWQsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgbGlzdCBvZiBwYWNrYWdlcyB3aG9zZSB3b3JrIGRpcmVjdG9yaWVzIHNob3VsZCBub3QgYmUgcmVtb3ZlZC4iCitST09URlNbZG9jXSA9ICJJbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIkFkZGVkIGJ5IGNsYXNzZXMgdG8gcnVuIHBvc3QgcHJvY2Vzc2luZyBjb21tYW5kcyBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSByb290IGZpbGVzeXN0ZW0uIgorUlBST1ZJREVTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2UgbmFtZSBhbGlhc2VzIHRoYXQgYSBwYWNrYWdlIGFsc28gcHJvdmlkZXMuIFRoZXNlIGFsaWFzZXMgYXJlIHVzZWZ1bCBmb3Igc2F0aXNmeWluZyBydW50aW1lIGRlcGVuZGVuY2llcyBvZiBvdGhlciBwYWNrYWdlcyBib3RoIGR1cmluZyB0aGUgYnVpbGQgYW5kIG9uIHRoZSB0YXJnZXQuIgorUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgYSBwYWNrYWdlIGJlaW5nIGJ1aWx0LiBUaGUgcGFja2FnZSBiZWluZyBidWlsdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhpcyBsaXN0IG9mIHBhY2thZ2VzIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCwgYnV0IG5lZWRzIHRoZW0gZm9yIHRoZSBleHRlbmRlZCB1c2FiaWxpdHkuIgorUlJFUExBQ0VTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIHJlcGxhY2VkIGJ5IGEgcGFja2FnZS4gVGhlIHBhY2thZ2UgbWFuYWdlciB1c2VzIHRoaXMgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCB0byByZXBsYWNlIG90aGVyIHBhY2thZ2UocykgZHVyaW5nIGFuIHVwZ3JhZGUuIgorUlNVR0dFU1RTW2RvY10gPSAiQSBsaXN0IG9mIGFkZGl0aW9uYWwgcGFja2FnZXMgdGhhdCB5b3UgY2FuIHN1Z2dlc3QgZm9yIGluc3RhbGxhdGlvbiBieSB0aGUgcGFja2FnZSBtYW5hZ2VyIGF0IHRoZSB0aW1lIGEgcGFja2FnZSBpcyBpbnN0YWxsZWQuIE5vdCBhbGwgcGFja2FnZSBtYW5hZ2VycyBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4iCisKKyNTCisKK1NbZG9jXSA9ICJUaGUgbG9jYXRpb24gaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSB3aGVyZSB1bnBhY2tlZCBwYWNrYWdlIHNvdXJjZSBjb2RlIHJlc2lkZXMuIgorU0FOSVRZX1RFU1RFRF9ESVNUUk9TW2RvY10gPSAiQSBsaXN0IG9mIHRoZSBob3N0IGRpc3RyaWJ1dGlvbiBpZGVudGlmaWVycyB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gaGFzIGJlZW4gdGVzdGVkIGFnYWluc3QuIgorU0RLX0FSQ0hbZG9jXSA9ICJUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFNESy4iCitTREtfREVQTE9ZW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBzZXQgdXAgYW5kIHVzZWQgYnkgdGhlIHBvcHVsYXRlX3Nka19iYXNlIHRvIHdoaWNoIHRoZSBTREsgaXMgZGVwbG95ZWQuIgorU0RLX0RJUltkb2NdID0gIlRoZSBwYXJlbnQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlbiBjcmVhdGluZyBTREsgb3V0cHV0LiIKK1NES19OQU1FW2RvY10gPSAiVGhlIGJhc2UgbmFtZSBmb3IgU0RLIG91dHB1dCBmaWxlcy4iCitTREtfT1VUUFVUW2RvY10gPSAiVGhlIGxvY2F0aW9uIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlbiBjcmVhdGluZyBTREsgb3V0cHV0LiIKK1NES0lNQUdFX0ZFQVRVUkVTW2RvY10gPSAiRXF1aXZhbGVudCB0byBJTUFHRV9GRUFUVVJFUy4gSG93ZXZlciwgdGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIHRoZSBTREsgZ2VuZXJhdGVkIGZyb20gYW4gaW1hZ2UgdXNpbmcgdGhlIGNvbW1hbmQgJ2JpdGJha2UgLWMgcG9wdWxhdGVfc2RrIGltYWdlbmFtZScuIgorU0RLTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgYXJjaGl0ZWN0dXJlIChpLmUuIGk2ODYgb3IgeDg2XzY0KSBmb3Igd2hpY2ggdG8gYnVpbGQgU0RLIGFuZCBBRFQgaXRlbXMuIgorU0VDVElPTltkb2NdID0gIlRoZSBzZWN0aW9uIGluIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBjYXRlZ29yaXplZC4gUGFja2FnZSBtYW5hZ2VtZW50IHV0aWxpdGllcyBjYW4gbWFrZSB1c2Ugb2YgdGhpcyB2YXJpYWJsZS4iCitTRUxFQ1RFRF9PUFRJTUlaQVRJT05bZG9jXSA9ICJUaGUgdmFyaWFibGUgdGFrZXMgdGhlIHZhbHVlIG9mIEZVTExfT1BUSU1JWkFUSU9OIHVubGVzcyBERUJVR19CVUlMRCA9ICcxJy4gSW4gdGhpcyBjYXNlLCB0aGUgdmFsdWUgb2YgREVCVUdfT1BUSU1JWkFUSU9OIGlzIHVzZWQuIgorU0VSSUFMX0NPTlNPTEVbZG9jXSA9ICJUaGUgc3BlZWQgYW5kIGRldmljZSBmb3IgdGhlIHNlcmlhbCBwb3J0IHVzZWQgdG8gYXR0YWNoIHRoZSBzZXJpYWwgY29uc29sZS4gVGhpcyB2YXJpYWJsZSBpcyBnaXZlbiB0byB0aGUga2VybmVsIGFzIHRoZSAnY29uc29sZScgcGFyYW1ldGVyLiBBZnRlciBib290aW5nIG9jY3VycywgZ2V0dHkgaXMgc3RhcnRlZCBvbiB0aGF0IHBvcnQgc28gcmVtb3RlIGxvZ2luIGlzIHBvc3NpYmxlLiIKK1NFUklBTF9DT05TT0xFU1tkb2NdID0gIkRlZmluZXMgdGhlIHNlcmlhbCBjb25zb2xlcyAoVFRZcykgdG8gZW5hYmxlIHVzaW5nIGdldHR5LiIKK1NFUklBTF9DT05TT0xFU19DSEVDS1tkb2NdID0gIlNpbWlsYXIgdG8gU0VSSUFMX0NPTlNPTEVTIGV4Y2VwdCB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBlbmFibGUgaXQuIFN1cHBvcnRlZCBvbmx5IGJ5IFN5c1Zpbml0LiIKK1NJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlIGRlcGVuZGVuY2llcyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgc2lnbmF0dXJlcyBvZiB0YXNrcyBmcm9tIG9uZSByZWNpcGUgd2hlbiB0aGV5IGRlcGVuZCBvbiB0YXNrcyBmcm9tIGFub3RoZXIgcmVjaXBlLiIKK1NJR0dFTl9FWENMVURFUkVDSVBFU19BQklTQUZFW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdGhhdCBhcmUgY29tcGxldGVseSBzdGFibGUgYW5kIHdpbGwgbmV2ZXIgY2hhbmdlLiIKK1NJVEVJTkZPX0JJVFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSBDUFUuIgorU0lURUlORk9fRU5ESUFOTkVTU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZW5kaWFuIGJ5dGUgb3JkZXIgb2YgdGhlIHRhcmdldCBzeXN0ZW0uIFRoZSB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyICdsZScgZm9yICdsaXR0bGUtZW5kaWFuJyBvciAnYmUnIGZvciAnYmlnLWVuZGlhbicuIgorU09DX0ZBTUlMWVtkb2NdID0gIkdyb3VwcyB0b2dldGhlciBtYWNoaW5lcyBiYXNlZCB1cG9uIHRoZSBzYW1lIGZhbWlseSBvZiBTT0MgKFN5c3RlbSBPbiBDaGlwKS4gWW91IHR5cGljYWxseSBzZXQgdGhpcyB2YXJpYWJsZSBpbiBhIGNvbW1vbiAuaW5jIGZpbGUgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBvZiBhbGwgdGhlIG1hY2hpbmVzLiIKK1NPTElCU1tkb2NdID0gIkRlZmluZXMgdGhlIHN1ZmZpeCBmb3Igc2hhcmVkIGxpYnJhcmllcyB1c2VkIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uIgorU09MSUJTREVWW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluayAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCitTT1VSQ0VfTUlSUk9SX0ZFVENIW2RvY10gPSAiU3dpdGNoIG1hcmtpbmcgYnVpbGQgYXMgc291cmNlIGZldGNoZXIuIFVzZWQgdG8gc2tpcCBDT01QQVRJQkxFXyogY2hlY2tpbmcuIgorU09VUkNFX01JUlJPUl9VUkxbZG9jXSA9ICJVUkwgdG8gc291cmNlIG1pcnJvciB0aGF0IHdpbGwgYmUgdXNlZCBiZWZvcmUgZmV0Y2hpbmcgZnJvbSBvcmlnaW5hbCBTUkNfVVJJLiIKK1NQRUNJQUxfUEtHU1VGRklYW2RvY10gPSAiQSBsaXN0IG9mIHByZWZpeGVzIGZvciBQTiB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSB2YXJpYW50cyBvZiByZWNpcGVzIG9yIHBhY2thZ2VzLiBUaGUgbGlzdCBzcGVjaWZpZXMgdGhlIHByZWZpeGVzIHRvIHN0cmlwIG9mZiBkdXJpbmcgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHN1Y2ggYXMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIEJQTiB2YXJpYWJsZS4iCitTUkNfVVJJW2RvY10gPSAiVGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIC0gbG9jYWwgb3IgcmVtb3RlLiBUaGlzIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoYXQgYml0cyB0byBwdWxsIGluIGZvciB0aGUgYnVpbGQgYW5kIGhvdyB0byBwdWxsIHRoZW0gaW4uIgorU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIW2RvY10gPSAiQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBkZXRlY3RzIHdoZXRoZXIgU1JDX1VSSSBjb250YWlucyBmaWxlcyB0aGF0IGFyZSBtYWNoaW5lLXNwZWNpZmljLiBJZiBzbywgdGhlIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgUEFDS0FHRV9BUkNILiBTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gJzAnIGRpc2FibGVzIHRoaXMgYmVoYXZpb3IuIgorU1JDREFURVtkb2NdID0gIlRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLiBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSBpZiB0aGUgc291cmNlIHdhcyBmZXRjaGVkIGZyb20gYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pLiIKK1NSQ1BWW2RvY10gPSAiUmV0dXJucyB0aGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgcGFja2FnZS4gVGhpcyBzdHJpbmcgaXMgdXNlZCB0byBoZWxwIGRlZmluZSB0aGUgdmFsdWUgb2YgUFYuIgorU1JDUkVWW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLiBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgdG8gU3VidmVyc2lvbiwgR2l0LCBNZXJjdXJpYWwgYW5kIEJhemFhciBvbmx5LiIKK1NTVEFURV9ESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGZvciB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlLiIKK1NTVEFURV9NSVJST1JTW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBzZWFyY2ggb3RoZXIgbWlycm9yIGxvY2F0aW9ucyBmb3IgcHJlYnVpbHQgY2FjaGUgZGF0YSBvYmplY3RzIGJlZm9yZSBidWlsZGluZyBvdXQgdGhlIGRhdGEuIFlvdSBjYW4gc3BlY2lmeSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5IG9yIGEgcmVtb3RlIFVSTCBzdWNoIGFzIEhUVFAgb3IgRlRQLiIKK1NUQUdJTkdfS0VSTkVMX0RJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2l0aCBrZXJuZWwgaGVhZGVycyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCBvdXQtb2YtdHJlZSBtb2R1bGVzLiIKK1NUQU1QW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLiBUaGUgcGF0aCB0byBhbiBhY3R1YWwgc3RhbXAgZmlsZSBpcyBjb25zdHJ1Y3RlZCBieSBldmFsdWF0aW5nIHRoaXMgc3RyaW5nIGFuZCB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiIKK1NUQU1QU19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBzdGFtcHMuIgorU1VNTUFSWVtkb2NdID0gIlRoZSBzaG9ydCAoODAgY2hhcmFjdGVycyBvciBsZXNzKSBzdW1tYXJ5IG9mIHRoZSBiaW5hcnkgcGFja2FnZSBmb3IgcGFja2FnaW5nIHN5c3RlbXMgc3VjaCBhcyBvcGtnLCBycG0gb3IgZHBrZy4gQnkgZGVmYXVsdCwgU1VNTUFSWSBpcyB1c2VkIHRvIGRlZmluZSB0aGUgREVTQ1JJUFRJT04gdmFyaWFibGUgaWYgREVTQ1JJUFRJT04gaXMgbm90IHNldCBpbiB0aGUgcmVjaXBlLiIKK1NWTkRJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgU3VidmVyc2lvbiBjaGVja291dHMgd2lsbCBiZSBzdG9yZWQuIgorU1lTTElOVVhfREVGQVVMVF9DT05TT0xFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBrZXJuZWwgYm9vdCBkZWZhdWx0IGNvbnNvbGUuIgorU1lTTElOVVhfT1BUU1tkb2NdID0gIkxpc3RzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIHN5c2xpbnV4IGZpbGUuIgorU1lTTElOVVhfU0VSSUFMW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgc2VyaWFsIHBvcnQgb3IgdHVybnMgaXQgb2ZmLiIKK1NZU0xJTlVYX1NQTEFTSFtkb2NdID0gIkFuIC5MU1MgZmlsZSB1c2VkIGFzIHRoZSBiYWNrZ3JvdW5kIGZvciB0aGUgVkdBIGJvb3QgbWVudSB3aGVuIHlvdSBhcmUgdXNpbmcgdGhlIGJvb3QgbWVudS4iCitTWVNMSU5VWF9TRVJJQUxfVFRZW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgY29uc29sZT10dHkuLi4ga2VybmVsIGJvb3QgYXJndW1lbnQuIgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTW2RvY10gPSAiQSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBleGVjdXRlIGFmdGVyIGZpbGVzIGFyZSBzdGFnZWQgaW50byB0aGUgc3lzcm9vdC4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c3VhbGx5IHVzZWQgdG8gYXBwbHkgYWRkaXRpb25hbCBwcm9jZXNzaW5nIG9uIHRoZSBzdGFnZWQgZmlsZXMsIG9yIHRvIHN0YWdlIGFkZGl0aW9uYWwgZmlsZXMuIgorU1lTVEVNRF9BVVRPX0VOQUJMRVtkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgc3lzdGVtZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgc2VydmljZSB5b3UgaGF2ZSBzcGVjaWZpZWQgaW4gU1lTVEVNRF9TRVJWSUNFIHNob3VsZCBiZSBzdGFydGVkIGF1dG9tYXRpY2FsbHkgb3Igbm90LiIKK1NZU1RFTURfUEFDS0FHRVNbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgbG9jYXRlcyB0aGUgc3lzdGVtZCB1bml0IGZpbGVzIHdoZW4gdGhleSBhcmUgbm90IGZvdW5kIGluIHRoZSBtYWluIHJlY2lwZSdzIHBhY2thZ2UuIgorU1lTVEVNRF9TRVJWSUNFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgc3lzdGVtZCBzZXJ2aWNlIG5hbWUgZm9yIGEgcGFja2FnZS4iCitTWVNWSU5JVF9FTkFCTEVEX0dFVFRZU1tkb2NdID0gIlNwZWNpZmllcyB3aGljaCB2aXJ0dWFsIHRlcm1pbmFscyBzaG91bGQgYmUgcnVubmluZyBhIGdldHR5LCB0aGUgZGVmYXVsdCBpcyAnMScuIgorCisjVAorCitUW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2VyZSBCaXRCYWtlIHBsYWNlcyB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoIGNvbnNpc3QgbW9zdGx5IG9mIHRhc2sgbG9ncyBhbmQgc2NyaXB0cywgd2hlbiBidWlsZGluZyBhIHBhcnRpY3VsYXIgcmVjaXBlLiIKK1RBUkdFVF9BUkNIW2RvY10gPSAiVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgZGV2aWNlIGJlaW5nIGJ1aWx0LiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGFyY2hpdGVjdHVyZXM6IGFybSwgbWlwcywgcHBjLCB4ODYsIHg4Ni02NC4iCitUQVJHRVRfQ0ZMQUdTW2RvY10gPSAiRmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdGhlIHNhbWUgYXMgQ0ZMQUdTLiIKK1RBUkdFVF9GUFVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIG1ldGhvZCBmb3IgaGFuZGxpbmcgRlBVIGNvZGUuIEZvciBGUFUtbGVzcyB0YXJnZXRzLCB3aGljaCBpbmNsdWRlIG1vc3QgQVJNIENQVXMsIHRoZSB2YXJpYWJsZSBtdXN0IGJlIHNldCB0byAnc29mdCcuIElmIG5vdCwgdGhlIGtlcm5lbCBlbXVsYXRpb24gZ2V0cyB1c2VkLCB3aGljaCByZXN1bHRzIGluIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4iCitUQVJHRVRfT1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCdzIG9wZXJhdGluZyBzeXN0ZW0uIgorVEFSR0VUX1BSRUZJWFtkb2NdID0gIlRoZSBwcmVmaXggZm9yIHRoZSBjcm9zcy1jb21waWxlIHRvb2xjaGFpbiAoZS5nLiBhcm0tbGludXgtKS4iCitUQVJHRVRfU1lTW2RvY10gPSAiVGhlIHRhcmdldCBzeXN0ZW0gaXMgY29tcHJpc2VkIG9mIFRBUkdFVF9BUkNILFRBUkdFVF9WRU5ET1IgYW5kIFRBUkdFVF9PUy4iCitUQ0xJQkNbZG9jXSA9ICJTcGVjaWZpZXMgR05VIHN0YW5kYXJkIEMgbGlicmFyeSAobGliYykgdmFyaWFudCB0byB1c2UgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBZb3UgY2FuIHNlbGVjdCAnZ2xpYmMnIG9yICd1Y2xpYmMnLiIKK1RDTU9ERVtkb2NdID0gIkVuYWJsZXMgYW4gZXh0ZXJuYWwgdG9vbGNoYWluICh3aGVyZSBwcm92aWRlZCBieSBhbiBhZGRpdGlvbmFsIGxheWVyKSBpZiBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuICdkZWZhdWx0Jy4iCitURVNUX0lNQUdFW2RvY10gPSAiRW5hYmxlcyB0ZXN0IGJvb3Rpbmcgb2YgdmlydHVhbCBtYWNoaW5lIGltYWdlcyB1bmRlciB0aGUgUUVNVSBlbXVsYXRvciBhZnRlciBhbnkgcm9vdCBmaWxlc3lzdGVtcyBhcmUgY3JlYXRlZCBhbmQgcnVucyB0ZXN0cyBhZ2FpbnN0IHRob3NlIGltYWdlcy4iCitURVNUX1FFTVVCT09UX1RJTUVPVVRbZG9jXSA9ICJUaGUgdGltZSBpbiBzZWNvbmRzIGFsbG93ZWQgZm9yIGFuIGltYWdlIHRvIGJvb3QgYmVmb3JlIGF1dG9tYXRlZCBydW50aW1lIHRlc3RzIGJlZ2luIHRvIHJ1biBhZ2FpbnN0IGFuIGltYWdlLiIKK1RFU1RfU1VJVEVTW2RvY10gPSAiQW4gb3JkZXJlZCBsaXN0IG9mIHRlc3RzIChtb2R1bGVzKSB0byBydW4gYWdhaW5zdCBhbiBpbWFnZSB3aGVuIHBlcmZvcm1pbmcgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZy4iCitURVNUX1BPV0VSQ09OVFJPTF9DTURbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgY29tbWFuZCB0byB1c2UgdG8gY29udHJvbCB0aGUgcG93ZXIgb2YgdGhlIHRhcmdldCBtYWNoaW5lIHVuZGVyIHRlc3QiCitURVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBjb21tYW5kIHNwZWNpZmllZCBpbiBURVNUX1BPV0VSQ09OVFJPTF9DTUQiCitURVNUX1NFUklBTENPTlRST0xfQ01EW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcmlhbCBjb25zb2xlIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0IgorVEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQiCitURVNUX1RBUkdFVFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIG1ldGhvZCBvZiBkZXBsb3lpbmcgdGhlIGltYWdlIGFuZCBydW5uaW5nIHRlc3RzIG9uIHRoZSB0YXJnZXQgbWFjaGluZSIKK1RISVNESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIEJpdEJha2UgaXMgY3VycmVudGx5IHBhcnNpbmcgaXMgbG9jYXRlZC4iCitUSU1FW2RvY10gPSAiVGhlIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHVzaW5nIEhNUyBmb3JtYXQuIgorVE1QRElSW2RvY10gPSAiVGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGl0IGRvZXMgaXRzIHdvcmsgYnVpbGRpbmcgaW1hZ2VzLiBCeSBkZWZhdWx0LCB0aGUgVE1QRElSIHZhcmlhYmxlIGlzIG5hbWVkIHRtcCB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitUT09MQ0hBSU5fSE9TVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gYnVpbGRpbmcgYW4gU0RLLCB3aGljaCBjb250YWlucyBhIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50LiIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS1tkb2NdID0gIlRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGl0IGNyZWF0ZXMgdGhlIHRhcmdldCBwYXJ0IG9mIGFuIFNESywgd2hpY2ggaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLiIKK1RPUERJUltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIEJ1aWxkIERpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIGltYWdlcy4iCitUUkFOU0xBVEVEX1RBUkdFVF9BUkNIW2RvY10gPSAiQSBzYW5pdGl6ZWQgdmVyc2lvbiBvZiBUQVJHRVRfQVJDSC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmUgaXMgbmVlZGVkIGluIGEgdmFsdWUgd2hlcmUgdW5kZXJzY29yZXMgYXJlIG5vdCBhbGxvd2VkLiIKK1RVTkVfUEtHQVJDSFtkb2NdID0gIlRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSB1bmRlcnN0b29kIGJ5IHRoZSBwYWNrYWdpbmcgc3lzdGVtIHRvIGRlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBBQkksIGFuZCB0dW5pbmcgb2Ygb3V0cHV0IHBhY2thZ2VzLiIKK1RVTkVBQklbZG9jXSA9ICJBbiB1bmRlcmx5aW5nIEFCSSB1c2VkIGJ5IGEgcGFydGljdWxhciB0dW5pbmcgaW4gYSBnaXZlbiB0b29sY2hhaW4gbGF5ZXIuIFRoaXMgZmVhdHVyZSBhbGxvd3MgcHJvdmlkZXJzIHVzaW5nIHByZWJ1aWx0IGxpYnJhcmllcyB0byBjaGVjayBjb21wYXRpYmlsaXR5IG9mIGEgdHVuaW5nIGFnYWluc3QgdGhlaXIgc2VsZWN0aW9uIG9mIGxpYnJhcmllcy4iCitUVU5FQUJJX09WRVJSSURFW2RvY10gPSAiSWYgc2V0LCBpZ25vcmVzIFRVTkVBQklfV0hJVEVMSVNULiIKK1RVTkVBQklfV0hJVEVMSVNUW2RvY10gPSAiQSB3aGl0ZWxpc3Qgb2YgcGVybWlzc2libGUgVFVORUFCSSB2YWx1ZXMuICBJZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgYWxsIHZhbHVlcyBhcmUgYWxsb3dlZC4iCitUVU5FQ09ORkxJQ1RTW2RvY10gPSAiTGlzdCBvZiBjb25mbGljdGluZyBmZWF0dXJlcyBmb3IgYSBnaXZlbiBmZWF0dXJlLiIKK1RVTkVWQUxJRFtkb2NdID0gIkRlc2NyaXB0aW9ucywgc3RvcmVkIGFzIGZsYWdzLCBvZiB2YWxpZCB0dW5pbmcgZmVhdHVyZXMuIgorCisjVQorCitVQk9PVF9DT05GSUdbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBVQk9PVF9NQUNISU5FIGFuZCBjYW4gYWxzbyBkZWZpbmUgSU1BR0VfRlNUWVBFUyBmb3IgaW5kaXZpZHVhbCBjYXNlcy4iCitVQk9PVF9FTlRSWVBPSU5UW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFUtQm9vdCBpbWFnZS4iCitVQk9PVF9MT0FEQUREUkVTU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbG9hZCBhZGRyZXNzIGZvciB0aGUgVS1Cb290IGltYWdlLiIKK1VCT09UX0xPQ0FMVkVSU0lPTltkb2NdID0gIkFwcGVuZHMgYSBzdHJpbmcgdG8gdGhlIG5hbWUgb2YgdGhlIGxvY2FsIHZlcnNpb24gb2YgdGhlIFUtQm9vdCBpbWFnZS4iCitVQk9PVF9NQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB2YWx1ZSBwYXNzZWQgb24gdGhlIG1ha2UgY29tbWFuZCBsaW5lIHdoZW4gYnVpbGRpbmcgYSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTUFLRV9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCBjYWxsZWQgaW4gdGhlIE1ha2VmaWxlLiIKK1VCT09UX1NVRkZJWFtkb2NdID0gIlBvaW50cyB0byB0aGUgZ2VuZXJhdGVkIFUtQm9vdCBleHRlbnNpb24uIgorVUJPT1RfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQgdXNlZCBmb3IgYnVpbGRpbmcgVS1Cb290LiIKK1VTRV9ERVZGU1tkb2NdID0gIldoZW4gYnVpbGRpbmcgaW1hZ2VzLCBzcGVjaWZpZXMgdG8gcG9wdWxhdGUgb3Igbm90IC9kZXYuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJzEnIChsZWF2ZSBkaXJlY3RvcnkgZW1wdHksIHN1cmVseSBiZWNhdXNlIGRldnRtcGZzIGRvIHRoZSBqb2IpLiBTZXQgaXQgdG8gJzAnIHRvIHVzZSBtYWtlZGV2cyAob3IgY29uc2lkZXIgdXNpbmcgYSBjdXN0b20gZmlsZSB3aXRoIElNQUdFX0RFVklDRV9UQUJMRVMpLiIKK1VTRVJfQ0xBU1NFU1tkb2NdID0gIkxpc3Qgb2YgYWRkaXRpb25hbCBjbGFzc2VzIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGltYWdlcyB0aGF0IGVuYWJsZSBleHRyYSBmZWF0dXJlcy4iCitVU0VSQUREX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgdXNlcmFkZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGluZGl2aWR1YWwgcGFja2FnZXMgd2l0aGluIHRoZSByZWNpcGUgdGhhdCByZXF1aXJlIHVzZXJzIGFuZC9vciBncm91cHMgdG8gYmUgYWRkZWQuIgorVVNFUkFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIHVzZXJhZGQgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBhZGQgYSB1c2VyIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIgorCisjVworCitXQVJOX1FBW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3Mgd2hvc2UgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFzIHdhcm5pbmdzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK1dPUktESVJbZG9jXSA9ICJUaGUgcGF0aG5hbWUgb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGJ1aWxkcyBhIHJlY2lwZS4gVGhpcyBkaXJlY3RvcnkgaXMgbG9jYXRlZCB3aXRoaW4gdGhlIFRNUERJUiBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBjaGFuZ2VzIGFzIGRpZmZlcmVudCBwYWNrYWdlcyBhcmUgYnVpbHQuIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MDAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSw2MCBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorIyBXZSBoYXZlIHJlY2lwZXMtKiBkaXJlY3RvcmllcywgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIiCisKK0JCRklMRV9DT0xMRUNUSU9OUyArPSAiY29yZSIKK0JCRklMRV9QQVRURVJOX2NvcmUgPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9jb3JlID0gIjUiCisKKyMgVGhpcyBzaG91bGQgb25seSBiZSBpbmNyZW1lbnRlZCBvbiBzaWduaWZpY2FudCBjaGFuZ2VzIHRoYXQgd2lsbAorIyBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIG90aGVyIGxheWVycworTEFZRVJWRVJTSU9OX2NvcmUgPSAiNiIKKworQkJMQVlFUlNfTEFZRVJJTkRFWF9OQU1FX2NvcmUgPSAib3BlbmVtYmVkZGVkLWNvcmUiCisKKyMgU2V0IGEgdmFyaWFibGUgdG8gZ2V0IHRvIHRoZSB0b3Agb2YgdGhlIG1ldGFkYXRhIGxvY2F0aW9uCitDT1JFQkFTRSA9ICcke0Bvcy5wYXRoLm5vcm1wYXRoKCIke0xBWUVSRElSfS8uLi8iKX0nCisKKyMgb3BrZy11dGlscyBpcyBmb3IgdXBkYXRlLWFsdG5lcm5hdGl2ZXMgOigKK1NJR0dFTl9FWENMVURFUkVDSVBFU19BQklTQUZFICs9ICIgXAorICBzeXN2aW5pdC1pbml0dGFiIFwKKyAgc2hhZG93LXNlY3VyZXR0eSBcCisgIG9wa2ctYXJjaC1jb25maWcgXAorICBuZXRiYXNlIFwKKyAgaW5pdC1pZnVwZG93biBcCisgIGNvbm5tYW4tY29uZiBcCisgIGZvcm1mYWN0b3IgXAorICB4c2VydmVyLXhmODYtY29uZmlnIFwKKyAgcG9pbnRlcmNhbCBcCisgIHBvaW50ZXJjYWwteGlucHV0IFwKKyAgYmFzZS1maWxlcyBcCisgIGtleW1hcHMgXAorICB1ZGV2LWV4dHJhY29uZiBcCisgIHBhY2thZ2Vncm91cC14MTEteHNlcnZlciBcCisgIHN5c3RlbWQtc2VyaWFsZ2V0dHkgXAorICBpbml0c2NyaXB0cyBcCisgIHNoYWRvdyBcCisgIHNoYWRvdy1zeXNyb290IFwKKyAgYmFzZS1wYXNzd2QgXAorICBvcGtnLXV0aWxzIFwKKyIKKworU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQUyArPSAiIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT5nbGliYyBcCisgIGdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfS0+bXVzbCBcCisgIGdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfS0+dWNsaWJjIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT5saW51eC1saWJjLWhlYWRlcnMgXAorICBwcHAtZGlhbGluLT5wcHAgXAorICByZXNvbHZjb25mLT5iYXNoIFwKKyAgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtPnBlcmwgXAorICBpbml0cmFtZnMtZnJhbWV3b3JrLT5idXN5Ym94IFwKKyAgaW5pdHJhbWZzLWZyYW1ld29yay0+c3lzdGVtZCBcCisgIGluaXRyYW1mcy1mcmFtZXdvcmstPnVkZXYgXAorICBsaWJlcmF0aW9uLWZvbnRzLT5mb250Y29uZmlnIFwKKyAgZ25vbWUtaWNvbi10aGVtZS0+bGlicnN2ZyBcCisgIGZvbnQtYWxpYXMtPmZvbnQtdXRpbCBcCisgIHdlc3Rvbi1pbml0LT53ZXN0b24gXAorICB3ZXN0b24taW5pdC0+a2JkIFwKKyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbGljZW5zZXMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxN2M0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYKQEAgLTAsMCArMSwxODkgQEAKKyMgVGhlc2UgYXJlbid0IGFjdHVhbGx5IHVzZWQgYW55d2hlcmUgdGhhdCBJIGNhbiB0ZWxsCisjIFRoZXkgbWF5IGJlIGluIHRoZSBmdXR1cmUgKG9yIGFyZSB1c2VkIGJ5IHNvbWVvbmUgZWxzZQorIyBGb3IgY29tcGxldGlvbiBzYWtlLCBJJ3ZlIHVwZGF0ZWQgdGhlbQorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkFBTCBBZG9iZSBBRkwtMS4yIEFGTC0yLjAgQUZMLTIuMSBBRkwtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkFHUEwtMy4wIEFOVExSLVBEIEFwYWNoZS0xLjAgQXBhY2hlLTEuMSBBcGFjaGUtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkFQTC0xLjAgQVBTTC0xLjAgQVBTTC0xLjEgQVBTTC0xLjIgQVBTTC0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQXJ0aXN0aWMtMS4wIEFydGlzdGljLTIuMCBCaXRzdHJlYW1WZXJhIEJTRCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJCU0QtMi1DbGF1c2UgQlNELTMtQ2xhdXNlIEJTRC00LUNsYXVzZSBCU0wtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNBVE9TTC0xLjEgQ0MwLTEuMCBDQy1CWS0xLjAgQ0MtQlktMi4wIENDLUJZLTIuNSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS0zLjAgQ0MtQlktTkMtMS4wIENDLUJZLU5DLTIuMCBDQy1CWS1OQy0yLjUiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktTkMtMy4wIENDLUJZLU5DLU5ELTEuMCBDQy1CWS1OQy1ORC0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktTkMtTkQtMi41IENDLUJZLU5DLU5ELTMuMCBDQy1CWS1OQy1TQS0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktTkMtU0EtMi4wIENDLUJZLU5DLVNBLTIuNSBDQy1CWS1OQy1TQS0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktTkQtMS4wIENDLUJZLU5ELTIuMCBDQy1CWS1ORC0yLjUgQ0MtQlktTkQtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLVNBLTEuMCBDQy1CWS1TQS0yLjAgQ0MtQlktU0EtMi41IENDLUJZLVNBLTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDRERMLTEuMCBDRUNJTEwtMS4wIENFQ0lMTC0yLjAgQ0VDSUxMLUIgQ0VDSUxMLUMiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ2xBcnRpc3RpYyBDUEFMLTEuMCBDUEwtMS4wIENVQS1PUEwtMS4wIERTU1NMIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkVDTC0xLjAgRUNMLTIuMCBlQ29zLTIuMCBFREwtMS4wIEVGTC0xLjAgRUZMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJFbGZ1dGlscy1FeGNlcHRpb24gRW50ZXNzYSBFUEwtMS4wIEVybFBMLTEuMSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJFVURhdGFncmlkIEVVUEwtMS4wIEVVUEwtMS4xIEZhaXIgRnJhbWV3b3J4LTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJGcmVlVHlwZSBHRkRMLTEuMSBHRkRMLTEuMiBHRkRMLTEuMyBHUEwtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAgR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi4wLXdpdGgtZm9udC1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTItd2l0aC1iaXNvbi1leGNlcHRpb24gR1BMLTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gImdTT0FQLTEgZ1NPQVAtMS4zYiBIUE5EIElQQSBJUEwtMS4wIElTQyBMR1BMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJMR1BMLTIuMSBMR1BMLTMuMCBMaWJwbmcgTFBMLTEuMDIgTFBQTC0xLjAgTFBQTC0xLjEiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTFBQTC0xLjIgTFBQTC0xLjNjIE1pck9TIE1JVCBNb3Rvc290byBNUEwtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk1QTC0xLjEgTVMtUEwgTVMtUkwgTXVsdGljcyBOQVNBLTEuMyBOYXVtYW4gTkNTQSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJOR1BMIE5va2lhIE5QT1NMLTMuMCBOVFAgT0FTSVMgT0NMQy0yLjAgT0RiTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiT0ZMLTEuMSBPR1RTTCBPTERBUC0yLjggT3BlblNTTCBPU0wtMS4wIE9TTC0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiT1NMLTMuMCBQRCBQSFAtMy4wIFBvc3RncmVTUUwgUHJvcHJpZXRhcnkiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiUHl0aG9uLTIuMCBRUEwtMS4wIFJIZUNvcy0xIFJIZUNvcy0xLjEgUlBMLTEuNSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJSUFNMLTEuMCBSU0NQTCBSdWJ5IFNBWC1QRCBTR0ktMSBTaW1wbGUtMi4wIFNsZWVweWNhdCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJTUEwtMS4wIFN1Z2FyQ1JNLTEgU3VnYXJDUk0tMS4xLjMgVUNCIFZTTC0xLjAgVzNDIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIldhdGNvbS0xLjAgV1h3aW5kb3dzIFhGcmVlODYtMS4wIFhGcmVlODYtMS4xIFhuZXQgWFNMIFlQTC0xLjEiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiWmltYnJhLTEuMyBabGliIFpQTC0xLjEgWlBMLTIuMCBaUEwtMi4xIgorCisjIFN0YW5kYXJkcyBhcmUgZ3JlYXQhIEV2ZXJ5b25lIGhhcyB0aGVpciBvd24uIEluIGFuIGVmZm9ydCB0byBzdGFuZGFyZGl6ZSBsaWNlbnNpbmcKKyMgbmFtZXMsIGNvbW1vbi1saWNlbnNlcyB3aWxsIHVzZSB0aGUgU1BEWCBzdGFuZGFyZCBsaWNlbnNlIG5hbWVzLiBJbiBvcmRlciB0byBub3QKKyMgYnJlYWsgdGhlIG5vbi1zdGFuZGFyZGl6ZWQgbGljZW5zZSBuYW1lcyB0aGF0IHdlIGZpbmQgaW4gTElDRU5TRSwgd2UnbGwgc2V0CisjIHVwIGEgYnVuY2ggb2YgVmFyRmxhZ3MgdG8gYWNjb21vZGF0ZSBub24tU1BEWCBsaWNlbnNlIG5hbWVzLgorIworIyBXZSBzaG91bGQgcmVhbGx5IGRpc2N1c3Mgc3RhbmRhcmRpemluZyB0aGlzIGZpZWxkLCBidXQgdGhhdCdzIGEgbG9uZ2VyIHRlcm0gZ29hbC4KKyMgRm9yIG5vdywgd2UgY2FuIGRvIHRoaXMgYW5kIGl0IHNob3VsZCBncmFiIHRoZSBtb3N0IGNvbW1vbiBMSUNFTlNFIG5hbWluZyB2YXJpYXRpb25zLgorIworIyBXZSBzaG91bGQgTkVWRVIgaGF2ZSBhIEdQTC9MR1BMIHdpdGhvdXQgYSB2ZXJzaW9uISEhIQorIyBBbnkgbWFwcGluZyB0byBNUEwvTEdQTC9HUEwgc2hvdWxkIGJlIGZpeGVkCisKKyMgQUdQTCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBR1BMLTNdID0gIkFHUEwtMy4wIgorU1BEWExJQ0VOU0VNQVBbQUdQTHYzXSA9ICJBR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0FHUEx2My4wXSA9ICJBR1BMLTMuMCIKKworIyBHUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbR1BMLTFdID0gIkdQTC0xLjAiCitTUERYTElDRU5TRU1BUFtHUEx2MV0gPSAiR1BMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYxLjBdID0gIkdQTC0xLjAiCitTUERYTElDRU5TRU1BUFtHUEwtMl0gPSAiR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYyXSA9ICJHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjIuMF0gPSAiR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTC0zXSA9ICJHUEwtMy4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjNdID0gIkdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtHUEx2My4wXSA9ICJHUEwtMy4wIgorCisjTEdQTCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtMR1BMdjJdID0gIkxHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbTEdQTHYyLjBdID0gIkxHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbTEdQTDIuMV0gPSAiTEdQTC0yLjEiCitTUERYTElDRU5TRU1BUFtMR1BMdjIuMV0gPSAiTEdQTC0yLjEiCitTUERYTElDRU5TRU1BUFtMR1BMdjNdID0gIkxHUEwtMy4wIgorCisjTVBMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW01QTC0xXSA9ICJNUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbTVBMdjFdID0gIk1QTC0xLjAiCitTUERYTElDRU5TRU1BUFtNUEx2MS4xXSA9ICJNUEwtMS4xIgorU1BEWExJQ0VOU0VNQVBbTVBMdjJdID0gIk1QTC0yLjAiCisKKyNNSVQgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbTUlULVhdID0gIk1JVCIKK1NQRFhMSUNFTlNFTUFQW01JVC1zdHlsZV0gPSAiTUlUIgorCisjT3BlbnNzbCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtvcGVuc3NsXSA9ICJPcGVuU1NMIgorCisjUHl0aG9uIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW1BTRl0gPSAiUHl0aG9uLTIuMCIKK1NQRFhMSUNFTlNFTUFQW1BTRnYyXSA9ICJQeXRob24tMi4wIgorU1BEWExJQ0VOU0VNQVBbUHl0aG9uLTJdID0gIlB5dGhvbi0yLjAiCisKKyNBcGFjaGUgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQXBhY2hldjJdID0gIkFwYWNoZS0yLjAiCitTUERYTElDRU5TRU1BUFtBcGFjaGUtMl0gPSAiQXBhY2hlLTIuMCIKKworI0FydGlzdGljIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0FydGlzdGljdjFdID0gIkFydGlzdGljLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0FydGlzdGljLTFdID0gIkFydGlzdGljLTEuMCIKKworI0FjYWRlbWljIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0FGTC0yXSA9ICJBRkwtMi4wIgorU1BEWExJQ0VOU0VNQVBbQUZMLTFdID0gIkFGTC0xLjIiCitTUERYTElDRU5TRU1BUFtBRkx2Ml0gPSAiQUZMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0FGTHYxXSA9ICJBRkwtMS4yIgorCisjT3RoZXIgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbRVBMdjEuMF0gPSAiRVBMLTEuMCIKKworI1NpbGljb24gR3JhcGhpY3MgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbU0dJdjFdID0gIlNHSS0xIgorCisjIEFkZGl0aW9uYWwgbGljZW5zZSBkaXJlY3Rvcmllcy4gQWRkIHlvdXIgY3VzdG9tIGxpY2Vuc2VzIGRpcmVjdG9yaWVzIHRoaXMgcGF0aC4KKyMgTElDRU5TRV9QQVRIICs9ICIke0NPUkVCQVNFfS9jdXN0b20tbGljZW5zZXMiCisKKyMgU2V0IGlmIHlvdSB3YW50IHRoZSBsaWNlbnNlLm1hbmlmZXN0IGNvcGllZCB0byB0aGUgaW1hZ2UKKyNDT1BZX0xJQ19NQU5JRkVTVCA9ICIxIgorCisjIElmIHlvdSB3YW50IHRoZSBwa2cgbGljZW5zZXMgY29waWVkIG92ZXIgYXMgd2VsbCB5b3UgbXVzdCBzZXQKKyMgYm90aCBDT1BZX0xJQ19NQU5JRkVTVCBhbmQgQ09QWV9MSUNfRElSUworI0NPUFlfTElDX0RJUlMgPSAiMSIKKworIyMgU1BEWCB0ZW1wb3JhcnkgZGlyZWN0b3J5CitTUERYX1RFTVBfRElSID0gIiR7V09SS0RJUn0vc3BkeF90ZW1wIgorU1BEWF9NQU5JRkVTVF9ESVIgPSAiL2hvbWUveW9jdG8vZm9zc29sb2d5X3NjYW5zIgorCisjIyBTUERYIEZvcm1hdCBpbmZvCitTUERYX1ZFUlNJT04gPSAiU1BEWC0xLjEiCitEQVRBX0xJQ0VOU0UgPSAiQ0MwLTEuMCIKKworIyMgRm9zc29sb2d5IHNjYW4gaW5mb3JtYXRpb24KKyMgWW91IGNhbiBzZXQgb3B0aW9uIHRvIGNvbnRyb2wgaWYgdGhlIGNvcHlyaWdodCBpbmZvcm1hdGlvbiB3aWxsIGJlIHNraXBwZWQKKyMgZHVyaW5nIHRoZSBpZGVudGlmaWNhdGlvbiBwcm9jZXNzLgorIworIyBJdCBpcyBkZWZpbmVkIGFzIFtGT1NTX0NPUFlSSUdIVF0gaW4gLi9tZXRhL2NvbmYvbGljZW5zZXMuY29uZi4KKyMgRk9TU19DT1BZUklHSFQgPSAidHJ1ZSIKKyMgICBOTyBjb3B5cmlnaHQgd2lsbCBiZSBwcm9jZXNzZWQuIFRoYXQgbWVhbnMgb25seSBsaWNlbnNlIGluZm9ybWF0aW9uIHdpbGwgYmUKKyMgICBpZGVudGlmaWVkIGFuZCBvdXRwdXQgdG8gU1BEWCBmaWxlCisjIEZPU1NfQ09QWVJJR0hUID0gImZhbHNlIgorIyAgIENvcHlyaWdodCB3aWxsIGJlIGlkZW50aWZpZWQgYW5kIG91dHB1dCB0byBTUERYIGZpbGUgYWxvbmcgd2l0aCBsaWNlbnNlCisjICAgaW5mb3JtYXRpb24uIFRoZSBwcm9jZXNzIHdpbGwgdGFrZSBtb3JlIHRpbWUgdGhhbiBub3QgcHJvY2Vzc2luZyBjb3B5cmlnaHQKKyMgICBpbmZvcm1hdGlvbi4KKyMKKworRk9TU19OT19DT1BZUklHSFQgPSAidHJ1ZSIKKworIyBBIG9wdGlvbiBkZWZpbmVkIGFzW0ZPU1NfUkVDVVJTSVZFX1VOUEFDS10gaW4gLi9tZXRhL2NvbmYvbGljZW5zZXMuY29uZi4gaXMKKyMgdXNlZCB0byBjb250cm9sIGlmIEZPU1NvbG9neSBzZXJ2ZXIgbmVlZCByZWN1cnNpdmVseSB1bnBhY2sgdGFyLmd6IGZpbGUgd2hpY2gKKyMgaXMgc2VudCBmcm9tIGRvX3NwZHggdGFzay4KKyMKKyMgRk9TU19SRUNVUlNJVkVfVU5QQUNLID0gImZhbHNlIjoKKyMgICAgRk9TU29sb2d5IHNlcnZlciBkb2VzIE5PVCByZWN1cnNpdmVseSB1bnBhY2suIEluIHRoZSBjdXJyZW50IHJlbGVhc2UsIHRoaXMKKyMgICAgaXMgdGhlIGRlZmF1bHQgY2hvaWNlIGJlY2F1c2UgcmVjdXJzaXZlbHkgdW5wYWNrIHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJyZWFrCisjICAgIGRvd24gb3JpZ2luYWwgY29tcHJlc3NlZCBmaWxlcy4KKyMgRk9TU19SRUNVUlNJVkVfVU5QQUNLID0gInRydWUiOgorIyAgICBGT1NTb2xvZ3kgc2VydmVyIHJlY3Vyc2l2ZWx5IHVucGFjayBjb21wb25lbnRzLgorIworCitGT1NTX1JFQ1VSU0lWRV9VTlBBQ0sgPSAiZmFsc2UiCisKKyMgQW4gb3B0aW9uIGRlZmluZWQgYXMgW0ZPU1NfRlVMTF9TUERYXSBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mIGlzIHVzZWQgdG8KKyMgY29udHJvbCB3aGF0IGtpbmQgb2YgU1BEWCBvdXRwdXQgdG8gZ2V0IGZyb20gdGhlIEZPU1NvbG9neSBzZXJ2ZXIuCisjCisjIEZPU1NfRlVMTF9TUERYID0gInRydWUiOgorIyAgIFRlbGwgRk9TU29sb2d5IHNlcnZlciB0byByZXR1cm4gZnVsbCBTUERYIG91dHB1dCwgbGlrZSBpZiB0aGUgcHJvZ3JhbSB3YXMKKyMgICBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBUaGlzIGlzIG5lZWRlZCBpbiBvcmRlciB0byBnZXQgbGljZW5zZSByZWZzIGZvcgorIyAgIHRoZSBmdWxsIHBhY2thZ2UgcmF0aGVyIHRoYW4gaW5kaXZpZHVhbCBmaWxlcyBvbmx5LgorIworIyBGT1NTX0ZVTExfU1BEWCA9ICJmYWxzZSI6CisjICAgVGVsbCBGT1NTb2xvZ3kgdG8gb25seSBwcm9jZXNzIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIGZpbGVzLiBBbGwgcGFja2FnZQorIyAgIGxpY2Vuc2UgdGFncyBpbiB0aGUgcmVwb3J0IHdpbGwgYmUgIk5PQVNTRVJUSU9OIgorIworCitGT1NTX0ZVTExfU1BEWCA9ICJ0cnVlIgorCisjIEZPU1NvbG9neVNQRFggaW5zdGFuY2Ugc2VydmVyLiBodHRwOi8vbG9jYWxob3N0L3JlcG8gaXMgdGhlIGRlZmF1bHQKKyMgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIGZvciBGT1NTb2xvZ3kuCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEZPU1NvbG9neVNQRFggY29tbWFuZGxpbmU6CisjICAgaHR0cHM6Ly9naXRodWIuY29tL3NwZHgtdG9vbHMvZm9zc29sb2d5LXNwZHgvd2lraS9Gb3Nzb2xvZ3ktU1BEWC1XZWItQVBJCisjCisKK0ZPU1NfQkFTRV9VUkwgPSAiaHR0cDovL2xvY2FsaG9zdC9yZXBvLz9tb2Q9c3BkeF9saWNlbnNlX29uY2UiCitGT1NTX1NFUlZFUiA9ICIke0ZPU1NfQkFTRV9VUkx9JmZ1bGxTUERYRmxhZz0ke0ZPU1NfRlVMTF9TUERYfSZub0NvcHlyaWdodD0ke0ZPU1NfTk9fQ09QWVJJR0hUfSZyZWN1cnNpdmVVbnBhY2s9JHtGT1NTX1JFQ1VSU0lWRV9VTlBBQ0t9IgorCitGT1NTX1dHRVRfRkxBR1MgPSAiLXFPIC0gLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSAtLXRpbWVvdXQ9MCIKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNTg2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNTg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhY2NlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZgpAQCAtMCwwICsxLDMgQEAKK1NES19BUkNIID0gImk1ODYiCitTREtfQ0NfQVJDSCA9ICItbWFyY2g9aTU4NiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZGI0NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYKQEAgLTAsMCArMSwyIEBACitTREtfQVJDSCA9ICJpNjg2IgorU0RLX0NDX0FSQ0ggPSAiLW1hcmNoPWk2ODYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay94ODZfNjQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMmQ2N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lLXNkay94ODZfNjQuY29uZgpAQCAtMCwwICsxIEBACitTREtfQVJDSCA9ICJ4ODZfNjQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYxMzBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL1JFQURNRQpAQCAtMCwwICsxLDEwMCBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgUmV2aXNpb24KKworCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorVGhlIGluZGl2aWR1YWwgQ1BVLCBhbmQgQUJJIHR1bmluZ3MgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGRpcmVjdG9yeS4gIEEKK251bWJlciBvZiBsb2NhbCBhbmQgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSB3YXkgdGhlCit0dW5pbmdzIGFyZSBzZXR1cCBhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciB0byBzcGVjaWZ5IGFuIG9wdGltaXplZAorY29uZmlndXJhdGlvbi4KKworVGhlIGZvbGxvd2luZyBpcyBicmllZiBzdW1tYXJ5IG9mIHRoZSBnZW5lcmljIGNvbXBvbmVudHMgdGhhdCBhcmUgdXNlZAoraW4gdGhlc2UgdHVuaW5ncy4KKworQVZBSUxUVU5FUyAtIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBvZiB0aGUgdHVuaW5nIGRlZmluaXRpb25zIGN1cnJlbnRseQorYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0uICBOb3QgYWxsIHR1bmVzIGluIHRoaXMgbGlzdCBtYXkgYmUgY29tcGF0aWJsZQord2l0aCB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uLCBvciBlYWNoIG90aGVyIGluIGEgbXVsdGlsaWIKK2NvbmZpZ3VyYXRpb24uICBFYWNoIHR1bmluZyBmaWxlIGNhbiBhZGQgdG8gdGhpcyBsaXN0IHVzaW5nICIrPSIsIGJ1dAorc2hvdWxkIG5ldmVyIHJlcGxhY2UgdGhlIGxpc3QgdXNpbmcgIj0iLgorCitERUZBVUxUVFVORSAtIFRoaXMgc3BlY2lmaWVzIHRoZSB0dW5lIHRvIHVzZSBmb3IgYSBwYXJ0aWN1bGFyIGJ1aWxkLgorRWFjaCB0dW5lIHNob3VsZCBzcGVjaWZ5IGEgcmVhc29uYWJsZSBkZWZhdWx0LCB3aGljaCBjYW4gYmUgb3ZlcnJpZGVuIGJ5CithIG1hY2hpbmUgb3IgbXVsdGlsaWIgY29uZmlndXJhdGlvbi4gIFRoZSBzcGVjaWZpZWQgdHVuZSBtdXN0IGJlIGxpc3RlZAoraW4gdGhlIEFWQUlMVFVORVMuCisKK1RVTkVWQUxJRFtmZWF0dXJlXSAtIFRoZSA8ZmVhdHVyZT4gaXMgZGVmaW5lZCB3aXRoIGEgaHVtYW4gcmVhZGFibGUKK2V4cGxhbmF0aW9uIGZvciB3aGF0IGl0IGRvZXMuICBBbGwgYXJjaGl0ZWN0dXJhbCwgY3B1LCBhYmksIGV0YyB0dW5pbmcKK2ZlYXR1cmVzIG11c3QgYmUgZGVmaW5lZCB1c2luZyBUVU5FVkFMSUQuCisKK1RVTkVDT05GTElDVFNbZmVhdHVyZV0gLSBBIGxpc3Qgb2YgZmVhdHVyZXMgd2hpY2ggY29uZmxpY3Qgd2l0aCA8ZmVhdHVyZT4uCitOZXcgc2FuaXR5IGNoZWNrcyB3aWxsIHRyeSB0byByZWplY3QgY29tYmluYXRpb25zIGluIHdoaWNoIGEgc2luZ2xlCit0dW5pbmcgZW5kcyB1cCB3aXRoIGZlYXR1cmVzIHdoaWNoIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci4KKworVFVORV9GRUFUVVJFUyAtIFRoaXMgaXMgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIFRVTkVfRkVBVFVSRVNfdHVuZS08dHVuZT4uCitTZWUgVFVORV9GRUFUVVJFU190dW5lLTx0dW5lPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVFVORV9GRUFUVVJFU190dW5lLTx0dW5lPiAtIFNwZWNpZnkgdGhlIGZlYXR1cmVzIHVzZWQgdG8gZGVzY3JpYmUgYQorc3BlY2lmaWMgdHVuZS4gIFRoaXMgaXMgYSBsaXN0IG9mIGZlYXR1cmVzIHRoYXQgYSB0dW5lIHN1cHBvcnQsIGVhY2gKK2ZlYXR1cmUgbXVzdCBiZSBpbiB0aGUgVFVORVZBTElEIGxpc3QuICBOb3RlOiB0aGUgdHVuZSBhbmQgYSBnaXZlbgorZmVhdHVyZSBuYW1lIG1heSBiZSB0aGUgc2FtZSwgYnV0IHRoZXkgaGF2ZSBkaWZmZXJlbnQgcHVycG9zZXMuICBPbmx5CitmZWF0dXJlcyBtYXkgYmUgdXNlZCB0byBjaGFuZ2UgYmVoYXZpb3IsIHdoaWxlIHR1bmVzIGFyZSB1c2VkIHRvCitkZXNjcmliZSBhbiBvdmVyYWxsIHNldCBvZiBmZWF0dXJlcy4KKworQUJJRVhURU5TSU9OIC0gQW4gQUJJIGV4dGVuc2lvbiBtYXkgYmUgc3BlY2lmaWVkIGJ5IGEgc3BlY2lmaWMgZmVhdHVyZQorb3Igb3RoZXIgdHVuaW5nIHNldHRpbmcsIHN1Y2ggYXMgVEFSR0VUX0ZQVS4gIEFueSBBQkkgZXh0ZW5zaW9ucyBlaXRoZXIKK25lZWQgdG8gYmUgZGVmaW5lZCBpbiB0aGUgYXJjaGl0ZWN0dXJlcyBiYXNlIGFyY2ggZmlsZSwgaS5lLgorQUJJRVhURU5TSU9OID0gImVhYmkiIGluIHRoZSBhcm0gY2FzZSwgb3IgYXBwZW5kZWQgdG8gaW4gc3BlY2lmaWMgdHVuZQorZmlsZXMgd2l0aCBhICIuPSIuICBTcGFjZXMgYXJlIG5vdCBhbGxvd2VkIGluIHRoaXMgdmFyaWFibGUuCisKK1RVTkVfQ0NBUkdTIC0gU2V0dXAgdGhlIGNmbGFncyBiYXNlZCBvbiB0aGUgVFVORV9GRUFUVVJFUyBzZXR0aW5ncy4KK1RoZXNlIHNob3VsZCBiZSBhZGRpdGl2ZSB3aGVuIGRlZmluZWQgdXNpbmcgIis9Ii4gIEFsbCBpdGVtcyBpbiB0aGlzCitsaXN0IHNob3VsZCBiZSBkeW5hbWljISBpLmUuCiske0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmZWF0dXJlIiwgImNmbGFnIiwgIiFjZmxhZyIsIGQpfQorCitUVU5FX0FSQ0ggLSBUaGUgR05VIGNhbm9uaWNhbCBhcmNoIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gIGkuZS4KK2FybSwgYXJtZWIsIG1pcHMsIG1pcHM2NCwgZXRjLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IGJpdGJha2UgdG8gc2V0dXAKK2NvbmZpZ3VyZS4gVFVORV9BUkNIIGRlZmluaXRpb25zIGFyZSBzcGVjaWZpYyB0byBhIGdpdmVuIGFyY2hpdGVjdHVyZS4KK1RoZXkgbWF5IGJlIGEgc2luZ2xlIHN0YXRpYyBkZWZpbml0aW9uLCBvciBtYXkgYmUgZHluYW1pY2FsbHkgYWRqdXN0ZWQuCitTZWUgZWFjaCBhcmNoaXRlY3R1cmUncyBSRUFETUUgZm9yIGRldGFpbHMgZm9yIHRoYXQgQ1BVIGZhbWlseS4KKworVFVORV9QS0dBUkNIIC0gVGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIHVzZWQgYnkgdGhlIHBhY2thZ2luZyBzeXN0ZW1zIHRvCitkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSwgYWJpIGFuZCB0dW5pbmcgb2YgYSBwYXJ0aWN1bGFyIHBhY2thZ2UuCitTaW1pbGFybHkgdG8gVFVORV9BUkNILCB0aGUgZGVmaW5pdGlvbiBvZiBUVU5FX1BLR0FSQ0ggaXMgc3BlY2lmaWMgdG8KK2VhY2ggYXJjaGl0ZWN0dXJlLiBTZWUgZWFjaCBhcmNoaXRlY3R1cmVzIFJFQURNRSBmb3IgZGV0YWlscyBmb3IgdGhhdAorQ1BVIGZhbWlseS4KKworUEFDS0FHRV9FWFRSQV9BUkNIUyAtIExpc3RzIGFsbCBydW50aW1lIGNvbXBhdGlibGUgcGFja2FnZQorYXJjaGl0ZWN0dXJlcy4gIEJ5IGRlZmF1bHQgdGhpcyBpcyBlcXVhbCB0bworUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLTx0dW5lPi4gIElmIGFuIGFyY2hpdGVjdHVyZSBkZXZpYXRlcyBmcm9tIHRoZQorZGVmYXVsdCBpdCB3aWxsIGJlIGxpc3RlZCBpbiB0aGUgYXJjaGl0ZWN0dXJlIFJFQURNRS4KKworUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLTx0dW5lPiAtIExpc3QgYWxsIG9mIHRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZXMKK3RoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIHNwZWNpZmljIHR1bmUuICBUaGUgcGFja2FnZSBhcmNoIG9mIHRoaXMKK3R1bmUgbXVzdCBiZSBpbiB0aGUgbGlzdC4KKworVEFSR0VUX0ZQVSAtIFRoZSBGUFUgc2V0dGluZyBmb3IgYSBnaXZlbiB0dW5lLCBoYXJkIChnZW5lcmF0ZSBmbG9hdGluZworcG9pbnQgaW5zdHJ1Y3Rpb25zKSwgc29mdCAoZ2VuZXJhdGUgaW50ZXJuYWwgZ2NjIGNhbGxzKSwgIm90aGVyIgorYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGZsb2F0aW5nIHBvaW50LiAgVGhpcyBpcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUKK2NvbXBpbGVyIGFuZCBvdGhlciB0b29sY2hhaW4gaXRlbXMuICBUaGlzIHNob3VsZCBiZSBkeW5hbWljYWxseQorY29uZmlndXJlZCBpbiB0aGUgc2FtZSB3YXkgdGhhdCBUVU5FX0NDQVJHUyBpcy4KKworQkFTRV9MSUJfdHVuZS08dHVuZT4gLSBUaGUgIi9saWIiIGxvY2F0aW9uIGZvciBhIHNwZWNpZmljIEFCSS4gIFRoaXMgaXMKK3VzZWQgaW4gYSBtdWx0aWxpYiBjb25maWd1cmF0aW9uIHRvIHBsYWNlIHRoZSBsaWJyYXJpZXMgaW4gdGhlIGNvcnJlY3QsCitub24tY29uZmxpY3RpbmcgbG9jYXRpb25zLgorCisKK0Jlc3QgUHJhY3RpY2UKKz09PT09PT09PT09PT0KK1RoZSB0dW5lIGluZnJhc3RydWN0dXJlIGlzIGRlc2lnbmVkIHRvIGJlIGhpZXJhcmNoaWNhbC4gV2hlbiB3cml0aW5nIGEKK25ldyB0dW5lIGZpbGUgZm9yIGEgImZhc3QtZm9yd2FyZCIgQ1BVIGFyY2hpdGVjdHVyZSAob25lIHRoYXQgc3VwcG9ydHMKK2V2ZXJ5dGhpbmcgZnJvbSBhIHByZXZpb3VzIGdlbmVyYXRpb24pLCBpdCBpcyByZWNvbW1lbmRlZCB0byByZXF1aXJlIHRoZQorcHJldmlvdXMgZ2VuZXJhdGlvbiB0dW5lIGZpbGUgYW5kIHNwZWNpZnkgUEFDS0FHRV9FWFRSQV9BUkNIUyB1c2luZyB0aGUKK3ByZXZpb3VzIGdlbmVyYXRpb24ncyBvdmVycmlkZSBhbmQgYXBwZW5kaW5nIHRoZSBuZXcgdHVuZS4gTm90ZSB0aGF0Citvbmx5IG9uZSBwcmV2aW91cyB0dW5lIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVkIHRvIGF2b2lkIG11dGlwbGUgaW5jbHVkZXMKK29mIHRoZSBiYXNlIGFyY2ggd2hpY2ggY291bGQgbGVhZCB0byBhIGJyb2tlbiBjb25maWd1cmF0aW9uIGR1ZSB0bworbXVsdGlwbGUgcHJlcGVuZCBhbmQgYXBwZW5kIGFzc2lnbm1lbnRzLgorCitGb3IgZXhhbXBsZSwgZm9yIHg4NiwgdGhlcmUgaXMgYSBjb21tb24geDg2L2FyY2gteDg2LmluYyB3aGljaCBpcworaW5jbHVkZWQgaW4gdGhlIGJhc2UgaTU4NiB0dW5lIGZpbGUuIFRoZSBjb3JlMiB0dW5lIGJ1aWxkcworb24gdGhhdCwgYW5kIGNvcmVpNyBidWlsZHMgb24gY29yZTIuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYmViNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL1JFQURNRQpAQCAtMCwwICsxLDQwIEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIC0gSW5pdGlhbCBSZXZpc2lvbgorCitUaGUgQVJNIGFyY2hpdGVjdHVyZSBkZWZpbml0aW9ucyBhcmUgc3BsaXQgYW1vbmcgYSBudW1iZXIgb2YgZmlsZXMuCitUaGUgcHJpbWFyeSBkZWZpbml0aW9ucyBmb3IgdGhlIHZhcmlhYmxlcyBhcmUgaGFuZGxlZCBieSB0aGUgY29yZQorYXJjaC1hcm0uaW5jIGZpbGUuCisKK1RVTkVfQVJDSCBpcyBzZXQgdG8gZWl0aGVyICJhcm0iIG9yICJhcm1lYiIgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZQorb2YgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgImJpZ2VuZGlhbiIgZmVhdHVyZSBpbiBhIGdpdmVuIHR1bmUuCisKK0Egc21hbGwgc2V0IG9mIEFSTSBzcGVjaWZpYyB2YXJpYWJsZXMgaGF2ZSBiZWVuIGRlZmluZWQgdG8gYWxsb3cgCitUVU5FX1BLR0FSQ0ggdG8gYmUgYXV0b21hdGljYWxseSBkZWZpbmVkLiAgT3B0aW1pemVkIHR1bmluZ3MgbXVzdCBOT1QgCitjaGFuZ2UgdGhlIGRlZmluaXRvbiBvZiBUVU5FX1BLR0FSQ0guICBUVU5FX1BLR0FDSF90dW5lLTx0dW5lPiB3aWxsIGJlIAoraWdub3JlZC4gIFRoZSBmb3JtYXQgb2YgdGhlIHBhY2thZ2UgYXJjaCBpcyBlbmZvcmNlZCBieSB0aGUgVFVORV9QS0dBUkNICitkZWZhdWx0LiAgVGhlIGZvcm1hdCBtdXN0IGJlIG9mIHRoZSBmb3JtOgorPGFybXZlcnNpb24+W3RdW2VdW2hmXVtiXVstdmZwXVstbmVvbl0KKworVFVORV9QS0dBUkNIIGlzIGRlZmluZWQgYXM6Ciske0FSTVBLR0FSQ0h9JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSR7QVJNUEtHU0ZYX0VBQkl9JHtBUk1QS0dTRlhfRU5ESUFOfSR7QVJNUEtHU0ZYX0ZQVX0KKworQVJNUEtHQVJDSCAtIFRoaXMgaXMgdGhlIGNvcmUgcGFja2FnZSBhcmNoIGNvbXBvbmVudCBzcGVjaWZpZWQgYnkgZWFjaCAKK3R1bmluZy4gIFRoaXMgaXMgdGhlIHByaW1hcnkgaWRlbnRpZmllciBvZiBhIHR1bmluZy4gIFVzdWFsIHZhbHVlcyBhcmU6Cithcm0sIGFybXY0LCBhcm12NSwgYXJtdjYsIGFybXY3YSwgZXRjLgorCitBUk1QS0dTRlhfVEhVTUIgLSBUaGlzIGlzIHRoZSB0aHVtYiBzcGVjaWZpYyBzdWZmaXguICBDdXJlbnRseSBpdCBpcyAKK2RlZmluZWQgaW4gZmVhdHVyZS1hcm0tdGh1bWIuaW5jLgorCitBUk1QS0dTRlhfRFNQIC0gVGhpcyBpcyB0aGUgRFNQIHNwZWNpZmljIHN1ZmZpeC4gIEN1cnJlbnRseSB0aGlzIGlzIHNldCAKK3RvICdlJyB3aGVuIG9uIGFybXY1IGFuZCB0aGUgZHNwIGZlYXR1cmUgaXMgZW5hYmxlZC4KKworQVJNUEtHU0ZYX0VBQkkgLSBUaGlzIGlzIHRoZSBlYWJpIHNwZWNpZmljIHN1ZmZpeC4gIFRoZXJlIGFyZSBjdXJyZW50bHkgCit0d28gZGVmaW5lZCBBQklzIHNwZWNpZmljZWQsIHN0YW5kYXJkIEVBQkkgYW5kIEhhcmQgRmxvYXQgKFZGUCkgRUFCSS4gIAorV2hlbiB0aGUgY2FsbGNvbnZlbnRpb24taGFyZCBpcyBlbmFibGVkLCAiaGYiIGlzIHNwZWNpZmllZCwgb3RoZXJ3aXNlIGl0IAoraXMgYmxhbmsuCisKK0FSTVBLR1NGWF9FTkRJQU4gLSBUaGlzIGlzIHRoZSBlbmRpYW4gc3BlY2lmaWMgc3VmZml4LiAgSXQgaXMgZGVmaW5lZCBpbiAKK3RoZSBjb3JlIGFyY2gtYXJtLmluYyBmaWxlLgorCitBUk1QS0dTRlhfRlBVIC0gVGhpcyBpcyB0aGUgRlBVIHNwZWNpZmljIHN1ZmZpeC4gIFRoZSBzdWZmaXggaW5kaWNhdGVzIAorc3BlY2lmaWMgRlBVIG9wdGltaXphdGlvbnMuICAndmZwJyBhbmQgJ25lb24nIGFyZSBib3RoIGRlZmluZWQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYjgwYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYwpAQCAtMCwwICsxLDE3IEBACisKK1RVTkVWQUxJRFtiaWdlbmRpYW5dID0gIkVuYWJsZSBiaWctZW5kaWFuIG1vZGUuIgorCitBUk1QS0dBUkNIID0gIiR7QVJNUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKK0FSTVBLR1NGWF9FTkRJQU4gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgImIiLCAiIiwgZCl9IgorQVJNUEtHU0ZYX0ZQVSA/Pz0gIiIKK0FSTVBLR1NGWF9EU1AgPz89ICIiCitBUk1QS0dTRlhfRUFCSSA/Pz0gIiIKK0FSTVBLR1NGWF9USFVNQiA/Pz0gIiIKKworVFVORV9BUkNIID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICJhcm1lYiIsICJhcm0iLCBkKX0iCitUVU5FX1BLR0FSQ0ggPSAiJHtBUk1QS0dBUkNIfSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0ke0FSTVBLR1NGWF9FQUJJfSR7QVJNUEtHU0ZYX0VORElBTn0ke0FSTVBLR1NGWF9GUFV9IgorCitBQklFWFRFTlNJT04gPSAiZWFiaSIKKworVEFSR0VUX0ZQVSA9ICIke0BkLmdldFZhcignQVJNUEtHU0ZYX0ZQVScsIFRydWUpLnN0cmlwKCctJykgb3IgJ3NvZnQnfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm02NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3NmI4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm02NC5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFhcmNoNjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbYWFyY2g2NF0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgYWFyY2g2NCIKKworTUFDSElORU9WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICI6YWFyY2g2NCIsICIiICxkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImFhcmNoNjQgYWFyY2g2NF9iZSIKK0FSTVBLR0FSQ0hfdHVuZS1hYXJjaDY0ID89ICJhYXJjaDY0IgorQVJNUEtHQVJDSF90dW5lLWFhcmNoNjRfYmUgPz0gImFhcmNoNjRfYmUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYWFyY2g2NCA/PSAiYWFyY2g2NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hYXJjaDY0X2JlID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hYXJjaDY0fSBiaWdlbmRpYW4iCitCQVNFX0xJQl90dW5lLWFhcmNoNjQgPSAibGliNjQiCitCQVNFX0xJQl90dW5lLWFhcmNoNjRfYmUgPSAibGliNjQiCisKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hYXJjaDY0ID0gImFhcmNoNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYWFyY2g2NF9iZSA9ICJhYXJjaDY0X2JlIgorCitBUk1QS0dTRlhfRU5ESUFOXzY0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICJfYmUiLCAiIiwgZCl9IgorVFVORV9BUkNIXzY0ID0gImFhcmNoNjQke0FSTVBLR1NGWF9FTkRJQU5fNjR9IgorVFVORV9QS0dBUkNIXzY0ID0gImFhcmNoNjQke0FSTVBLR1NGWF9FTkRJQU5fNjR9IgorQUJJRVhURU5TSU9OXzY0ID0gIiIKK1RBUkdFVF9GUFVfNjQgPSAiIgorCisjIER1cGxpY2F0ZWQgZnJvbSBhcmNoLWFybS5pbmMKK1RVTkVfQVJDSF8zMiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiYXJtZWIiLCAiYXJtIiwgZCl9IgorVFVORV9QS0dBUkNIXzMyID0gIiR7QVJNUEtHQVJDSH0ke0FSTVBLR1NGWF9USFVNQn0ke0FSTVBLR1NGWF9EU1B9JHtBUk1QS0dTRlhfRUFCSX0ke0FSTVBLR1NGWF9FTkRJQU59JHtBUk1QS0dTRlhfRlBVfSIKK0FCSUVYVEVOU0lPTl8zMiA9ICJlYWJpIgorVEFSR0VUX0ZQVV8zMiA9ICIke0BkLmdldFZhcignQVJNUEtHU0ZYX0ZQVScsIFRydWUpLnN0cmlwKCctJykgb3IgJ3NvZnQnfSIKKworVFVORV9BUkNIID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtUVU5FX0FSQ0hfNjR9IiwgIiR7VFVORV9BUkNIXzMyfSIgLGQpfSIKK1RVTkVfUEtHQVJDSCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIiR7VFVORV9QS0dBUkNIXzY0fSIsICIke1RVTkVfUEtHQVJDSF8zMn0iICxkKX0iCitBQklFWFRFTlNJT04gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke0FCSUVYVEVOU0lPTl82NH0iLCAiJHtBQklFWFRFTlNJT05fMzJ9IiAsZCl9IgorVEFSR0VUX0ZQVSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIiR7VEFSR0VUX0ZQVV82NH0iLCAiJHtUQVJHRVRfRlBVXzMyfSIgLGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzA3YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCkBAIC0wLDAgKzEsMzQgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NCIKKworVFVORVZBTElEW2FybV0gPSAiRW5hYmxlIEFSTSBpbnN0cnVjdGlvbiBzZXQiCitUVU5FVkFMSURbYXJtdjRdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIEFSTXY0IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY0IiwgIiAtbWFyY2g9YXJtdjQke0FSTVBLR1NGWF9USFVNQn0iLCAiIiwgZCl9IgorIyBlbmFibGUgLS1maXgtdjRieCB3aGVuIHdlIGhhdmUgYXJtdjQgaW4gVFVORV9GRUFUVVJFUywgYnV0IHRoZW4gZGlzYWJsZSBpdCB3aGVuIHdlIGhhdmUgYWxzbyBhcm12NSBvciB0aHVtYgorIyBtYXliZSB3ZSBzaG91bGQgZXh0ZW5kIGJiLnV0aWxzLmNvbnRhaW5zIHRvIHN1cHBvcnQgY2hlY2sgZm9yIGFueSBjaGVja3ZhbHVlcyBpbiB2YWx1ZSwgbm93IGl0IGRvZXMgCisjIGNoZWNrdmFsdWVzLmlzc3Vic2V0KHZhbCkgd2hpY2ggY2Fubm90IGJlIHVzZWQgZm9yIG5lZ2F0aXZlIHRlc3Qgb2YgZm9vIG5laXRoZXIgYmFyIGluIHZhbHVlCitGSVhfVjRCWF9BUk1WNCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NCIsICItLWZpeC12NGJ4IiwgIiIsIGQpfSIKK0ZJWF9WNEJYX0FSTVY1ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY1IiwgIiIsICIke0ZJWF9WNEJYX0FSTVY0fSIsIGQpfSIKK0ZJWF9WNEJYID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInRodW1iIiwgIiIsICIke0ZJWF9WNEJYX0FSTVY1fSIsIGQpfSIKK1RBUkdFVF9MRF9LRVJORUxfQVJDSCArPSAiJHtGSVhfVjRCWH0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NCIsICJhcm12NDoiLCAiIiAsZCl9IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXRodW1iLmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY0IGFybXY0dCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NCA/PSAiYXJtdjQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjR0ID89ICJhcm12NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NCA/PSAiYXJtIGFybXY0IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0dCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR9IHRodW1iIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0ID0gImFybSBhcm12NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR9IGFybXY0dCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NGIgYXJtdjR0YiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NGIgPz0gImFybXY0IgorQVJNUEtHQVJDSF90dW5lLWFybXY0dGIgPz0gImFybXY0IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHR9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NGIgPSAiYXJtZWIgYXJtdjRiIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dGIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjRifSBhcm12NHRiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRhNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKQEAgLTAsMCArMSw1MiBAQAorQVJNUEtHU0ZYX0RTUCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgImFybXY1IiwgImRzcCIgXSwgImUiLCAiIiwgZCl9IgorVFVORVZBTElEW2RzcF0gPSAiQVJNIERTUCBmdW5jdGlvbmFsaXR5IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY1ZSBhcm12NXRlIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZSA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZSA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NX0gZHNwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dH0gZHNwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NX0gYXJtdjVlIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0fSBhcm12NWUgYXJtdjV0ZSIKKworIyBMaXR0bGUgRW5kaWFuICsgVkZQL0RTUAorQVZBSUxUVU5FUyArPSAiYXJtdjVlLXZmcCBhcm12NXRlLXZmcCBhcm12NWVoZi12ZnAgYXJtdjV0ZWhmLXZmcCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWUtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlaGYtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlaGYtdmZwID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWV9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlLXZmcH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlaGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlLXZmcH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWUtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1LXZmcH0gYXJtdjVlIGFybXY1ZS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZS12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0LXZmcH0gYXJtdjVlIGFybXY1dGUgYXJtdjVlLXZmcCBhcm12NXRlLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVoZi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVoZi12ZnB9IGFybXY1ZWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGYtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmLXZmcH0gYXJtdjVlaGYtdmZwIGFybXY1dGVoZi12ZnAiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjVlYiBhcm12NXRlYiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWViID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlYiA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGV9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWViID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1Yn0gYXJtdjVlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRifSBhcm12NWViIGFybXY1dGViIgorCisjIEJpZyBFbmRpYW4gKyBWRlAvRFNQCitBVkFJTFRVTkVTICs9ICJhcm12NWViLXZmcCBhcm12NXRlYi12ZnAgYXJtdjVlaGZiLXZmcCBhcm12NXRlaGZiLXZmcCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWViLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZWItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWVoZmItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlaGZiLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZS12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlaGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlaGYtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWhmYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGVoZi12ZnB9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWViLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWItdmZwfSBhcm12NWViIGFybXY1ZWItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGViLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRiLXZmcH0gYXJtdjVlYiBhcm12NXRlYiBhcm12NWViLXZmcCBhcm12NXRlYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGZiLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmYi12ZnB9IGFybXY1ZWhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmYi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGZiLXZmcH0gYXJtdjVlaGZiLXZmcCBhcm12NXRlaGZiLXZmcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjY2VhZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUuaW5jCkBAIC0wLDAgKzEsNjAgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NSIKKworVFVORVZBTElEW2FybXY1XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBBUk12NSIKK1RVTkVDT05GTElDVFNbYXJtdjVdID0gImFybXY0IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY1IiwgIiAtbWFyY2g9YXJtdjUke0FSTVBLR1NGWF9USFVNQn0ke0FSTVBLR1NGWF9EU1B9IiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY1IiwgImFybXY1OiIsICIiICxkKX0iCisKK0FSTVBLR1NGWF9EU1AgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJhcm12NSIsICJkc3AiIF0sICJlIiwgIiIsIGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXZmcC5pbmMKKworIyBMaXR0bGUgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NSBhcm12NXQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjUgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUgPz0gImFybSBhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSB0aHVtYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NH0gYXJtdjUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dH0gYXJtdjUgYXJtdjV0IgorCisjIExpdHRsZSBFbmRpYW4gKyBWRlAvRFNQCitBVkFJTFRVTkVTICs9ICJhcm12NS12ZnAgYXJtdjV0LXZmcCBhcm12NWhmLXZmcCBhcm12NXRoZi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjUtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXQtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWhmLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0aGYtdmZwID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NS12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0LXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0fSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVoZi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1LXZmcH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRoZi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dC12ZnB9IGNhbGxjb252ZW50aW9uLWhhcmQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjUtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1fSBhcm12NS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0LXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXR9IGFybXY1LXZmcCBhcm12NXQtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGYtdmZwID0gImFybXY1aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmLXZmcCA9ICJhcm12NWhmLXZmcCBhcm12NXRoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZi12ZnB9IGFybXY1ZWhmLXZmcCBhcm12NXRlaGYtdmZwIgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY1YiBhcm12NXRiIgorQVJNUEtHQVJDSF90dW5lLWFybXY1YiA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0YiA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjViID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NX0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NGJ9IGFybXY1YiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dGJ9IGFybXY1YiBhcm12NXRiIgorCisjIEJpZyBFbmRpYW4gKyBWRlAvRFNQCitBVkFJTFRVTkVTICs9ICJhcm12NWItdmZwIGFybXY1dGItdmZwIGFybXY1aGZiLXZmcCBhcm12NXRoZmItdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1Yi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWhmYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGhmYi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1Yi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1LXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXQtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWhmLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGhmYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGhmLXZmcH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1Yi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVifSBhcm12NWItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGJ9IGFybXY1Yi12ZnAgYXJtdjV0Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVoZmItdmZwID0gImFybXY1aGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZmItdmZwID0gImFybXY1aGZiLXZmcCBhcm12NXRoZmItdmZwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwYzViZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKQEAgLTAsMCArMSw1MCBAQAorREVGQVVMVFRVTkUgPz0gImFybXY2IgorCitUVU5FVkFMSURbYXJtdjZdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIEFSTXY2IgorVFVORUNPTkZMSUNUU1thcm12Nl0gPSAiYXJtdjQgYXJtdjUiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjYiLCAiIC1tYXJjaD1hcm12NiIsICIiLCBkKX0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NiIsICJhcm12NjoiLCAiIiAsZCl9IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworIyBMaXR0bGUgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12Ni1ub3ZmcCBhcm12NnQtbm92ZnAgYXJtdjYgYXJtdjZ0IGFybXY2aGYgYXJtdjZ0aGYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjYtbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dC1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjYgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZoZiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0aGYgPz0gImFybXY2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2LW5vdmZwID89ICJhcm0gYXJtdjYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0LW5vdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcH0gdGh1bWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2LW5vdmZwfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQtbm92ZnB9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Nn0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0fSBjYWxsY29udmVudGlvbi1oYXJkIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2LW5vdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZX0gYXJtdjYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0LW5vdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGV9IGFybXY2IGFybXY2dCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWUtdmZwfSBhcm12NiBhcm12Ni12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGUtdmZwfSBhcm12NiBhcm12NnQgYXJtdjYtdmZwIGFybXY2dC12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVoZi12ZnB9IGFybXY2aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZi12ZnB9IGFybXY2aGYtdmZwIGFybXY2dGhmLXZmcCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NmItbm92ZnAgYXJtdjZ0Yi1ub3ZmcCBhcm12NmIgYXJtdjZ0YiBhcm12NmhmYiBhcm12NnRoZmIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZiLW5vdmZwID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnRiLW5vdmZwID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmIgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGIgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2aGZiID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnRoZmIgPz0gImFybXY2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2Yi1ub3ZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRiLW5vdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQtbm92ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZoZmIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2aGZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRoZmIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dGhmfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZiLW5vdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWJ9IGFybXY2YiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRiLW5vdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVifSBhcm12NmIgYXJtdjZ0YiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYi12ZnB9IGFybXY2YiBhcm12NmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWItdmZwfSBhcm12NmIgYXJtdjZ0YiBhcm12NmItdmZwIGFybXY2dGItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2aGZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmYi12ZnB9IGFybXY2aGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmYi12ZnB9IGFybXY2aGZiLXZmcCBhcm12NnRoZmItdmZwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I2ZjY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKQEAgLTAsMCArMSwxMjMgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EiCisKK1RVTkVWQUxJRFthcm12N2FdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIEFSTXY3LWEiCitUVU5FQ09ORkxJQ1RTW2FybXY3YV0gPSAiYXJtdjQgYXJtdjUgYXJtdjYgYXJtdjciCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdhIiwgIiAtbWFyY2g9YXJtdjctYSIsICIiLCBkKX0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12N2EiLCAiYXJtdjdhOiIsICIiICxkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYworCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJhcm12N2EgYXJtdjdhdCBhcm12N2EtdmZwdjNkMTYgYXJtdjdhdC12ZnB2M2QxNiBhcm12N2EtdmZwdjMgYXJtdjdhdC12ZnB2MyBhcm12N2EtbmVvbiBhcm12N2F0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdCA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YS12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXQtdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0LXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhLW5lb24/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXQtbmVvbiA/PSAiYXJtdjdhIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YSA/PSAiYXJtIGFybXY3YSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSB0aHVtYiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gdmZwdjNkMTYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gdmZwdjNkMTYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IHZmcHYzIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjNkMTZ9IHZmcHYzIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IG5lb24iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBuZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12Nn0gYXJtdjdhIGFybXY3YS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gYXJtdjdhLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLXZmcHYzZDE2fSBhcm12N2EtdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gYXJtdjdhLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0fSBhcm12N2EgYXJtdjdhLXZmcCBhcm12N2F0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBhcm12N2EtdmZwLXZmcHYzZDE2IGFybXY3YXQyLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtdmZwdjNkMTZ9IGFybXY3YS12ZnAtdmZwdjNkMTYtdmZwdjMgYXJtdjdhdDItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBhcm12N2EtdmZwLW5lb24gYXJtdjdhdDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJhcm12N2FoZiBhcm12N2F0aGYgYXJtdjdhaGYtdmZwdjNkMTYgYXJtdjdhdGhmLXZmcHYzZDE2IGFybXY3YWhmLXZmcHYzIGFybXY3YXRoZi12ZnB2MyBhcm12N2FoZi1uZW9uIGFybXY3YXRoZi1uZW9uIGFybXY3YWhmLW5lb24tdmZwdjQgYXJtdjdhdGhmLW5lb24tdmZwdjQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtbmVvbj89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmLW5lb24gPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZi1uZW9uLXZmcHY0ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjQgPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzZDE2fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M30gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IHZmcHY0IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gdmZwdjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZn0gYXJtdjdhaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZn0gYXJtdjdhaGYtdmZwIGFybXY3YXQyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBhcm12N2FoZi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gYXJtdjdhaGYtdmZwLXZmcHYzZDE2IGFybXY3YXQyaGYtdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLXZmcHYzZDE2fSBhcm12N2FoZi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi12ZnB2M2QxNn0gYXJtdjdhaGYtdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyaGYtdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGFybXY3YWhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gYXJtdjdhaGYtdmZwLW5lb24gYXJtdjdhdDJoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9uLXZmcHY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGFybXY3YWhmLXZmcC1uZW9uLXZmcHY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBhcm12N2FoZi12ZnAtbmVvbi12ZnB2NCBhcm12N2F0MmhmLXZmcC1uZW9uLXZmcHY0IgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY3YWIgYXJtdjdhdGIgYXJtdjdhYi12ZnB2M2QxNiBhcm12N2F0Yi12ZnB2M2QxNiBhcm12N2FiLXZmcHYzIGFybXY3YXRiLXZmcHYzIGFybXY3YWItbmVvbiBhcm12N2F0Yi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWIgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0YiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0Yi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWItdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0Yi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWItbmVvbj89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGItbmVvbiA/PSAiYXJtdjdhIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzZDE2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjNkMTZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0Yi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0Yi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2Yn0gYXJtdjdhYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0Yn0gYXJtdjdhYi12ZnAgYXJtdjdhdDJiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWJ9IGFybXY3YWItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRiLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWJ9IGFybXY3YWItdmZwLXZmcHYzZDE2IGFybXY3YXQyYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLXZmcHYzZDE2fSBhcm12N2FiLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLXZmcHYzZDE2fSBhcm12N2FiLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0MmItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FifSBhcm12N2FiLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGJ9IGFybXY3YWItdmZwLW5lb24gYXJtdjdhdDJiLXZmcC1uZW9uIgorCisjIEJpZyBFbmRpYW4gKyBWRlAKK0FWQUlMVFVORVMgKz0gImFybXY3YWhmYiBhcm12N2F0aGZiIGFybXY3YWhmYi12ZnB2M2QxNiBhcm12N2F0aGZiLXZmcHYzZDE2IGFybXY3YWhmYi12ZnB2MyBhcm12N2F0aGZiLXZmcHYzIGFybXY3YWhmYi1uZW9uIGFybXY3YXRoZmItbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZmIgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmItdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZmItbmVvbj89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmYi1uZW9uID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZiLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZiLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2aGZifSBhcm12N2FoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGZifSBhcm12N2FoZmItdmZwIGFybXY3YXQyaGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZifSBhcm12N2FoZmItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYn0gYXJtdjdhaGZiLXZmcC12ZnB2M2QxNiBhcm12N2F0MmhmYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYi12ZnB2M2QxNn0gYXJtdjdhaGZiLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmItdmZwdjNkMTZ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYtdmZwdjMgYXJtdjdhdDJoZmItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYn0gYXJtdjdhaGZiLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmItbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZifSBhcm12N2FoZmItdmZwLW5lb24gYXJtdjdhdDJoZmItdmZwLW5lb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTgzMmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY4LmluYwpAQCAtMCwwICsxIEBACityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tbmVvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMmI4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tbmVvbi5pbmMKQEAgLTAsMCArMSwzIEBACitUVU5FVkFMSURbbmVvbl0gPSAiRW5hYmxlIE5lb24gU0lNRCBhY2NlbGVyYXRvciB1bml0LiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjQiLCAiIC1tZnB1PW5lb24tdmZwdjQiLCAiIC1tZnB1PW5lb24iLCBkKSwgIiIgLCBkKX0iCitBUk1QS0dTRlhfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIi1uZW9uIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMjE3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jCkBAIC0wLDAgKzEsNDkgQEAKKyMgVGhlIGluc3RydWN0aW9uIHNldCB0aGUgY29tcGlsZXIgc2hvdWxkIHVzZSB3aGVuIGdlbmVyYXRpbmcgYXBwbGljYXRpb24KKyMgY29kZS4gVGhlIGtlcm5lbCBpcyBhbHdheXMgY29tcGlsZWQgd2l0aCBhcm0gY29kZSBhdCBwcmVzZW50LiBhcm0gY29kZQorIyBpcyB0aGUgb3JpZ2luYWwgMzIgYml0IEFSTSBpbnN0cnVjdGlvbiBzZXQsIHRodW1iIGNvZGUgaXMgdGhlIDE2IGJpdAorIyBlbmNvZGVkIFJJU0Mgc3ViLXNldC4gVGh1bWIgY29kZSBpcyBzbWFsbGVyIChtYXliZSA3MCUgb2YgdGhlIEFSTSBzaXplKQorIyBidXQgcmVxdWlyZXMgbW9yZSBpbnN0cnVjdGlvbnMgKDE0MCUgZm9yIDcwJSBzbWFsbGVyIGNvZGUpIHNvIG1heSBiZQorIyBzbG93ZXIuCitUVU5FVkFMSURbdGh1bWJdID0gIlVzZSB0aHVtYiBpbnN0cnVjdGlvbnMgaW5zdGVhZCBvZiBBUk0iCitBUk1fVEhVTUJfT1BUID0gIiR7QFsnYXJtJywgJ3RodW1iJ11bZC5nZXRWYXIoJ0FSTV9JTlNUUlVDVElPTl9TRVQnLCBUcnVlKSA9PSAndGh1bWInXX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12NCcsICAndCcsICAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjUnLCAgJ3QnLCAgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY2JywgICd0JywgICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12N2EnLCAndDInLCAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjdyJywgJ3QyJywgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY3bScsICd0MicsICcnLCBkKX0iCisKKyMgSWYgdGhlIGRldmljZSBzdXBwb3J0cyBBUk0sIHRoZW4gcmVzcGVjdCBBUk1fVEhVTUJfT1BUICh3aGljaCBjYW4gYmUgImFybSIgb3IgInRodW1iIikKKyMgSWYgdGhlIGRlZmljZSBkb2Vzbid0IHN1cHBvcnQgQVJNLCB0aGVuIGFsd2F5cyBzZXQgInRodW1iIiBldmVuIHdoZW4KKyMgc29tZSByZWNpcGUgZXhwbGljaXRseSBzZXRzIEFSTV9JTlNUUlVDVElPTl9TRVQgdG8gImFybSIKK0FSTV9NX09QVCA9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm0nLCAnJHtBUk1fVEhVTUJfT1BUfScsICd0aHVtYicsIGQpfSIKK3B5dGhvbiAoKSB7CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnRmFsc2UnLCAnVHJ1ZScsIGQpOgorICAgICAgICByZXR1cm4KKyAgICBzZWxlY3RlZCA9IGQuZ2V0VmFyKCdBUk1fSU5TVFJVQ1RJT05fU0VUJywgVHJ1ZSkKKyAgICBpZiBzZWxlY3RlZCA9PSBOb25lOgorICAgICAgICByZXR1cm4KKyAgICB1c2VkID0gZC5nZXRWYXIoJ0FSTV9NX09QVCcsIFRydWUpCisgICAgaWYgc2VsZWN0ZWQgIT0gdXNlZDoKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBiYi53YXJuKCJSZWNpcGUgJyVzJyBzZWxlY3RzIEFSTV9JTlNUUlVDVElPTl9TRVQgdG8gYmUgJyVzJywgYnV0IHR1bmUgY29uZmlndXJhdGlvbiBvdmVycmlkZXMgaXQgdG8gJyVzJyIgJSAocG4sIHNlbGVjdGVkLCB1c2VkKSkKK30KKworVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJyAtbSR7QVJNX01fT1BUfScsICcnLCBkKX0iCitPVkVSUklERVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJzp0aHVtYicsICcnLCBkKX0iCisKKyMgQWRkIHN1ZmZpeCBmcm9tIEFSTV9USFVNQl9TVUZGSVggb25seSBpZiBhZnRlciBhbGwgdGhpcyB3ZSBzdGlsbCBzZXQgQVJNX01fT1BUIHRvIHRodW1iCitBUk1QS0dTRlhfVEhVTUIgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJyR7QVJNX1RIVU1CX1NVRkZJWH0nLCAnJywgZCkgaWYgZC5nZXRWYXIoJ0FSTV9NX09QVCcsIFRydWUpID09ICd0aHVtYicgZWxzZSAnJ30iCisKKyMgV2hldGhlciB0byBjb21waWxlIHdpdGggY29kZSB0byBhbGxvdyBpbnRlcndvcmtpbmcgYmV0d2VlbiB0aGUgdHdvCisjIGluc3RydWN0aW9uIHNldHMuIFRoaXMgYWxsb3dzIHRodW1iIGNvZGUgdG8gYmUgZXhlY3V0ZWQgb24gYSBwcmltYXJpbHkKKyMgYXJtIHN5c3RlbSBhbmQgdmljZSB2ZXJzYS4gSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBESVNUUk9zIG5vdAorIyB0dXJuIHRoaXMgb2ZmIC0gdGhlIGFjdHVhbCBjb3N0IGlzIHZlcnkgc21hbGwuCitUVU5FVkFMSURbbm8tdGh1bWItaW50ZXJ3b3JrXSA9ICJEaXNhYmxlIG1peGluZyBvZiB0aHVtYiBhbmQgQVJNIGZ1bmN0aW9ucyIKK1RIVU1CX1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduby10aHVtYi1pbnRlcndvcmsnLCAnIC1tbm8tdGh1bWItaW50ZXJ3b3JrJywgJyAtbXRodW1iLWludGVyd29yaycsIGQpfSIKK1RIVU1CX09WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbm8tdGh1bWItaW50ZXJ3b3JrJywgJzp0aHVtYi1pbnRlcndvcmsnLCAnJywgZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJyAke1RIVU1CX1RVTkVfQ0NBUkdTfScsICcnLCBkKX0iCitPVkVSUklERVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJyR7VEhVTUJfT1ZFUlJJREVTfScsICcnLCBkKX0iCisKKyMgd2hhdCBhYm91dCBhcm12N20gZGV2aWNlcyB3aGljaCBkb24ndCBzdXBwb3J0IC1tYXJtIChlLmcuIENvcnRleC1NMyk/CitUQVJHRVRfQ0NfS0VSTkVMX0FSQ0ggKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJy1tbm8tdGh1bWItaW50ZXJ3b3JrIC1tYXJtJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGZiZWFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK1RVTkVWQUxJRFt2ZnBdID0gIkVuYWJsZSBWZWN0b3IgRmxvYXRpbmcgUG9pbnQgKHZmcCkgdW5pdC4iCitBUk1QS0dTRlhfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnAiLCAiLXZmcCIsICIiICxkKX0iCisKK1RVTkVWQUxJRFt2ZnB2M2QxNl0gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCBWZXJzaW9uIDMgd2l0aCAxNiByZWdpc3RlcnMgKHZmcHYzLWQxNikgdW5pdC4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjNkMTYiLCAiIC1tZnB1PXZmcHYzLWQxNiIsICIiLCBkKX0iCitBUk1QS0dTRlhfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2M2QxNiIsICItdmZwdjNkMTYiLCAiIiAsZCl9IgorCitUVU5FVkFMSURbdmZwdjNdID0gIkVuYWJsZSBWZWN0b3IgRmxvYXRpbmcgUG9pbnQgVmVyc2lvbiAzIHdpdGggMzIgcmVnaXN0ZXJzICh2ZnB2MykgdW5pdC4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjMiLCAiIC1tZnB1PXZmcHYzIiwgIiIsIGQpfSIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzIiwgIi12ZnB2MyIsICIiICxkKX0iCisKK1RVTkVWQUxJRFt2ZnB2NF0gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCBWZXJzaW9uIDQgKHZmcHY0KSB1bml0LiIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHY0IiwgIi12ZnB2NCIsICIiICxkKX0iCisKK1RVTkVWQUxJRFtjYWxsY29udmVudGlvbi1oYXJkXSA9ICJFbmFibGUgRUFCSSBoYXJkIGZsb2F0IGNhbGwgY29udmVudGlvbiwgcmVxdWlyZXMgVkZQLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnAiLCBiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjYWxsY29udmVudGlvbi1oYXJkIiwgIiAtbWZsb2F0LWFiaT1oYXJkIiwgIiAtbWZsb2F0LWFiaT1zb2Z0ZnAiLCBkKSwgIiIgLGQpfSIKK0FSTVBLR1NGWF9FQUJJIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgImNhbGxjb252ZW50aW9uLWhhcmQiLCAidmZwIiBdLCAiaGYiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9SRUFETUUKQEAgLTAsMCArMSwzNiBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAgLSBJbml0aWFsIFZlcnNpb24KKworTUlQUyBjdXJyZW50bHkgZGVmaW5lcyAxMiBBQklzLiAgQ29tYmluYXRpb25zIG9mOgorICopIEJpZy9MaXR0bGUgRW5kaWFuCisgKikgSGFyZHdhcmUvU29mdHdhcmUgRmxvYXRpbmcgUG9pbnQKKyAqKSBvMzIsIG4zMiwgbjY0IEFCSQorCitUVU5FX0FSQ0gsIHRoZSBHTlUgY2Fub25pY2FsIGFyY2gsIGlzIGRlZmluZWQgYXM6CisKK21pcHMke01JUFNQS0dTRlhfQllURX0ke01JUFNQS0dTRlhfRU5ESUFOfQorCitUaGUgcGFja2FnZSBhcmNoIGlzIGRlZmluZWQgaW4gc3VjaCBhIHdheSB0byBnZW5lcmF0ZWQgYSBzdGFuZGFyZCBuYW1pbmcKK3NjaGVtZS4gIFRoZSBzY2hlbWUgaXM6IDxtaXBzIHZhcmlhbnQ+Wy1uZl1bLW4zMl0KKworVFVORV9QS0dBUkNIIGlzIGRlZmluZWQgYXM6CisKKyR7TUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtJHtERUZBVUxUVFVORX19JHtNSVBTUEtHU0ZYX0ZQVX0ke01JUFNQS0dTRlhfQUJJfQorCitUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBNSVBTIHNwZWNpZmljIHZhcmlhYmxlczoKKworTUlQU1BLR1NGWF9CWVRFIC0gVGhpcyBpcyBkZWZpbmVkIGFzIGVpdGhlciBibGFuayBhbmQgIjY0IiBmb3IgTUlQUzY0IENQVXMuCisKK01JUFNQS0dTRlhfRU5ESUFOIC0gRm9yIGJpZ2VuZGlhbiBoYXJkd2FyZSB0aGlzIGlzIGJsYW5rLCBvdGhlcndpc2UgaXQncworZGVmaW5lZCBhcyAiZWwiLgorCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS08dHVuZT4gLSBJbiB0aGUgZGVmYXVsdCB0dW5pbmdzIGl0IGlzIHNldCB0byB0aGUKK3NhbWUgdmFsdWUgYXMgVFVORV9BUkNILiAgSW4gY3VzdG9tLCBvcHRpbWl6ZWQgdHVuaW5ncywgdGhlIHZhbHVlIHNob3VsZAorYmUgbW9kaWZpZWQgdG8gbW9yZSBwcmVjaXNlbHkgZGVzY3JpYmUgdGhlIHR1bmluZy4KKworTUlQU1BLR1NGWF9GUFUgLSBUaGUgdmFsdWUgaXMgc2V0IHRvICIiIG9yICItbmYiLCB3aGVyZSAiLW5mIiBpbmRpY2F0ZXMgCit0aGF0IHRoZSB0dW5lIGlzIHVzaW5nIGEgbm9uLWZsb2F0aW5nIHBvaW50IEFCSS4KKworTUlQU1BLR1NGWF9BQkkgLSBUaGlzIGlzIHVzZWQgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBBQkkgd2hlbiB0aGUgcHJldmlvdXMKK3ZhbHVlcyBhcmUgbm90IGVub3VnaCB0byBkaXN0cmluZ3Vpc2ggdGhlIHBhY2thZ2UuICAiLW4zMiIgaXMgYWRkZWQgd2hlbgorYnVpbGRpbmcgZm9yIE4zMiBBQkkuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYyNmQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYwpAQCAtMCwwICsxLDEwMiBAQAorIyBNSVBTIEFyY2hpdGVjdHVyZSBkZWZpbml0aW9uCisjIDEyIGRlZmluZWQgQUJJcywgYWxsIGNvbWJpbmF0aW9ucyBvZjoKKyMgKikgQmlnL0xpdHRsZSBFbmRpYW4KKyMgKikgSGFyZHdhcmUvU29mdHdhcmUgRmxvYXRpbmcgUG9pbnQKKyMgKikgbzMyLCBuMzIsIG42NCBBQkkKKworREVGQVVMVFRVTkUgPz0gIm1pcHMiCisKKyMgRW5kaWFuZXNzCitUVU5FVkFMSURbYmlnZW5kaWFuXSA9ICJFbmFibGUgYmlnLWVuZGlhbiBtb2RlIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICIgLW1lYiIsICIgLW1lbCIsIGQpfSIKKworIyBBQkkgZmxhZ3MKK1RVTkVWQUxJRFtvMzJdID0gIk1JUFMgbzMyIEFCSSIKK1RVTkVDT05GTElDVFNbbzMyXSA9ICJuMzIgbjY0IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm8zMiIsICIgLW1hYmk9MzIiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbbjMyXSA9ICJNSVBTNjQgbjMyIEFCSSIKK1RVTkVDT05GTElDVFNbbjMyXSA9ICJvMzIgbjY0IgorQUJJRVhURU5TSU9OIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuMzIiLCAibjMyIiwgIiIgLGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuMzIiLCAiIC1tYWJpPW4zMiIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtuNjRdID0gIk1JUFM2NCBuNjQgQUJJIgorVFVORUNPTkZMSUNUU1tuNjRdID0gIm8zMiBuMzIiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjY0IiwgIiAtbWFiaT02NCIsICIiLCBkKX0iCisKKyMgRmxvYXRpbmcgcG9pbnQKK1RVTkVWQUxJRFtmcHUtaGFyZF0gPSAiVXNlIGhhcmR3YXJlIEZQVSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIsICIgLW1oYXJkLWZsb2F0IiwgIiAtbXNvZnQtZmxvYXQiLCBkKX0iCitUQVJHRVRfRlBVID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1oYXJkIiwgIiIsICJzb2Z0IiwgZCl9IgorCisjIFBhY2thZ2UgbmFtaW5nCitNSVBTUEtHU0ZYX0VORElBTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiIiwgImVsIiwgZCl9IgorTUlQU1BLR1NGWF9CWVRFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm42NCIgLCAiNjQiLCAiIiwgZCl9IgorTUlQU1BLR1NGWF9CWVRFIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuMzIiICwgIjY0IiwgIiIsIGQpfSIKK01JUFNQS0dTRlhfRlBVID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1oYXJkIiAsICIiLCAiLW5mIiwgZCl9IgorTUlQU1BLR1NGWF9BQkkgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjMyIiwgIi1uMzIiLCAiIiwgZCl9IgorCitUVU5FX0FSQ0ggPSAibWlwcyR7TUlQU1BLR1NGWF9CWVRFfSR7TUlQU1BLR1NGWF9FTkRJQU59IgorVFVORV9QS0dBUkNIID0gIiR7TUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtJHtERUZBVUxUVFVORX19JHtNSVBTUEtHU0ZYX0ZQVX0ke01JUFNQS0dTRlhfQUJJfSIKKworIyBCYXNlIHR1bmVzCitBVkFJTFRVTkVTICs9ICJtaXBzIG1pcHM2NC1uMzIgbWlwczY0IG1pcHNlbCBtaXBzNjRlbC1uMzIgbWlwczY0ZWwgbWlwcy1uZiBtaXBzNjQtbmYtbjMyIG1pcHM2NC1uZiBtaXBzZWwtbmYgbWlwczY0ZWwtbmYtbjMyIG1pcHM2NGVsLW5mIgorVFVORV9GRUFUVVJFU190dW5lLW1pcHMgPSAibzMyIGJpZ2VuZGlhbiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwcyA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzID0gIm1pcHMiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbjMyID0gIm4zMiBiaWdlbmRpYW4gZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHM2NC1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbjMyID0gIm1pcHM2NC1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQgPSAibjY0IGJpZ2VuZGlhbiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQgPSAibWlwczY0IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsID0gIm8zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwc2VsID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNlbCA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2VsID0gIm1pcHNlbCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW4zMiA9ICJuMzIgZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsLW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbjMyID0gIm1pcHM2NGVsLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsID0gIm42NCBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbCA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwgPSAibWlwczY0ZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzLW5mID0gIm8zMiBiaWdlbmRpYW4iCitCQVNFX0xJQl90dW5lLW1pcHMtbmYgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwcy1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwcy1uZiA9ICJtaXBzLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW5mLW4zMiA9ICJuMzIgYmlnZW5kaWFuIgorQkFTRV9MSUJfdHVuZS1taXBzNjQtbmYtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0LW5mLW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0LW5mLW4zMiA9ICJtaXBzNjQtbmYtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW5mID0gIm42NCBiaWdlbmRpYW4iCitCQVNFX0xJQl90dW5lLW1pcHM2NC1uZiA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0LW5mID0gIm1pcHM2NC1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHNlbC1uZiA9ICJvMzIiCitCQVNFX0xJQl90dW5lLW1pcHNlbC1uZiA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzZWwtbmYgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHNlbC1uZiA9ICJtaXBzZWwtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRlbC1uZi1uMzIgPSAibjMyIgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbC1uZi1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbC1uZi1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICJtaXBzNjRlbC1uZi1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRlbC1uZiA9ICJuNjQiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsLW5mID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwtbmYgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsLW5mID0gIm1pcHM2NGVsLW5mIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2ZiNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9SRUFETUUKQEAgLTAsMCArMSwxNyBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAgLSBJbml0aWFsIHJldmlzaW9uCisKK1RoZXJlIGFyZSA0IHByaW1hcnkgUG93ZXJQQyBBQklzLgorIyAqKSBIYXJkL1NvZnQgRmxvYXRpbmcgUG9pbnQKKyMgKikgMzItYml0LzY0LWJpdAorCitUVU5FX0FSQ0ggaXMgZGVmaW5lZCBhcyBlaXRoZXIgInBvd2VycGMiIG9yICJwb3dlcnBjNjQiIGJhc2VkIG9uIHRoZSBtMzIgCitvciBtNjQgZmVhdHVyZS4KKworTWF5IG9mIHRoZSBQb3dlclBDIHBhY2thZ2UgYXJjaGljdHVyZXMgYXJlIGJhc2VkIG9uIGxlZ2FjeSBMaW51eCBuYW1lcy4KK0hvd2V2ZXIsIGEgZ2VuZXJhbCBuYW1pbmcgc2NoZW1lIHNob3VsZCBiZSBzaW1pbGFyIHRvOiBwcGNbNjRdWzxmYW1pbHk+XVstbmZdLgorKE5vdGU6IHRoZSBkZWZhdWx0IHBhY2thZ2UgYXJjaGl0ZWN0dXJlcyBhcmUgInBvd2VycGMiIGFuZCAicG93ZXJwYzY0Ii4pCisKK1RVTkVfUEtHQVJDSCBpcyBkZWZpbmVkIGFzIFRVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9LiAgQWxsIAorUG93ZXJQQyB0dW5pbmdzIGFyZSByZXF1aXJlZCB0byBkZWZpbmUgVFVORV9QS0dBUkNIX3R1bmUtPHR1bmU+LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzZjYTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYwpAQCAtMCwwICsxLDM0IEBACisjIFBvd2VyIEFyY2hpdGVjdHVyZSBkZWZpbml0aW9uCisjIEZvdXIgZGVmaW5lZCBBQklzLCBhbGwgY29tYmluYXRpb25zIG9mOgorIyAqKSBIYXJkL1NvZnQgRmxvYXRpbmcgUG9pbnQKKyMgKikgMzItYml0LzY0LWJpdAorCitERUZBVUxUVFVORSA/PSAicG93ZXJwYyIKKworVFVORV9QS0dBUkNIID0gIiR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorQUJJRVhURU5TSU9OID89ICIiCisKK1RVTkVWQUxJRFttMzJdID0gIlBvd2VyIEVMRjMyIHN0YW5kYXJkIEFCSSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIiLCAiIC1tMzIiLCAiIiwgZCl9IgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIiLCAicG93ZXJwYyIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtmcHUtaGFyZF0gPSAiVXNlIGhhcmR3YXJlIEZQVS4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiLCAiIC1taGFyZC1mbG9hdCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtmcHUtc29mdF0gPSAiVXNlIHNvZnR3YXJlIEZQVS4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LXNvZnQiLCAiIC1tc29mdC1mbG9hdCIsICIiLCBkKX0iCitUQVJHRVRfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtc29mdCIsICJzb2Z0IiwgIiIsIGQpfSIKKworVFVORVZBTElEW2FsdGl2ZWNdID0gIkFsdGl2ZWMiCisKKyMgQmFzaWMgdHVuZSBkZWZpbml0aW9ucworQVZBSUxUVU5FUyArPSAicG93ZXJwYyBwb3dlcnBjLW5mIiAKK1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjLW5mID0gIm0zMiBmcHUtc29mdCIKK0JBU0VfTElCX3R1bmUtcG93ZXJwYy1uZiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wb3dlcnBjLW5mID0gInBvd2VycGMtbmYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYy1uZiA9ICJwb3dlcnBjLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcG93ZXJwYyA9ICJtMzIgZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLXBvd2VycGMgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcG93ZXJwYyA9ICJwb3dlcnBjIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGMgPSAicG93ZXJwYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDc2ZGVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwb3dlcnBjNjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFttNjRdID0gIlBvd2VyIEVMRjY0IHN0YW5kYXJkIEFCSSIKK1RVTkVDT05GTElDVFNbbTY0XSA9ICJtMzIgbmYiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTY0IiwgIiAtbTY0IiwgIiIsIGQpfSIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJtNjQiIF0sICJwb3dlcnBjNjQiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwb3dlcnBjNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcG93ZXJwYzY0ID89ICJtNjQgZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLXBvd2VycGM2NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBvd2VycGM2NCA9ICJwb3dlcnBjNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0ID0gInBvd2VycGM2NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMwYjM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCkBAIC0wLDAgKzEsMjkgQEAKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2VnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKworWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LW1vdXNlIFwKKyAgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCIKKworTUFDSElORV9GRUFUVVJFUyA9ICJhbHNhIGJsdWV0b290aCB1c2JnYWRnZXQgc2NyZWVuIgorCitNQUNISU5FT1ZFUlJJREVTID0uICJxZW11YWxsOiIKKworSU1BR0VfRlNUWVBFUyArPSAidGFyLmJ6MiBleHQ0IgorCisjIERvbid0IGluY2x1ZGUga2VybmVscyBpbiBzdGFuZGFyZCBpbWFnZXMKK1JERVBFTkRTX2tlcm5lbC1iYXNlID0gIiIKKworIyBVc2UgYSBjb21tb24ga2VybmVsIHJlY2lwZSBmb3IgYWxsIFFFTVUgbWFjaGluZXMKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAibGludXgteW9jdG8iCisKK0VYVFJBX0lNQUdFREVQRU5EUyArPSAicWVtdS1uYXRpdmUgcWVtdS1oZWxwZXItbmF0aXZlIgorCisjIFByb3ZpZGUgdGhlIG5mcyBzZXJ2ZXIga2VybmVsIG1vZHVsZSBmb3IgYWxsIHFlbXUgaW1hZ2VzCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3BuLWxpbnV4LXlvY3RvID0gIiBmZWF0dXJlcy9uZnNkL25mc2QtZW5hYmxlLnNjYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9SRUFETUUgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTFhY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvUkVBRE1FCkBAIC0wLDAgKzEsMTEgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIFJldmlzaW9uCisKK0JvdGggYmlnIGVuZGlhbiBhbmQgbGl0dGxlIGVuZGlhbiBhcmUgZGVmaW5lZCBmb3IgU0guCisKK0V4cGVyaW1lbnRhbCAtLSBTSCB0dW5pbmdzIGhhdmUgbm90IGJlZW4gdmFsaWRhdGVkLgorCitUaGUgVFVORV9BUkNIIGlzIGRlZmluZWQgYXMgJHtUVU5FX0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0uCisKK1RoZSBUVU5FX1BLR0FSQ0ggaXMgZGVmaW5kIGFzICR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkNGNhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYwpAQCAtMCwwICsxLDkgQEAKKyMgU0ggQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24KKworREVGQVVMVFRVTkUgPz0gInNoIgorCitUVU5FX0FSQ0ggPSAiJHtUVU5FX0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitUVU5FX1BLR0FSQ0ggPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCisKK1RVTkVWQUxJRFtiaWdlbmRpYW5dID0gIkVuYWJsZWQgYmlnLWVuZGlhbiBtb2RlLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiIC1tYiIsICIgLW1sIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjA4OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmMKQEAgLTAsMCArMSwzIEBACisjIEFkZCBTT0NfRkFNSUxZIHRvIG1hY2hpbmUgb3ZlcnJpZGVzIHNvIHdlIGdldCBhY2Nlc3MgdG8gZS5nLiAnb21hcDMnIGFuZCAndGkzMzV4JworU09DX0ZBTUlMWSA/Pz0gIiIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QFsnJywgJyR7U09DX0ZBTUlMWX06J11bJyR7U09DX0ZBTUlMWX0nICE9ICcnXX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExMzFiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jCisKK1RVTkVWQUxJRFthcm0xMTM2amZzXSA9ICJFbmFibGUgYXJtMTEzNmpmcyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm0xMTM2amZzIiwgIiAtbXR1bmU9YXJtMTEzNmpmLXMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm0xMTM2amZzIgorQVJNUEtHQVJDSF90dW5lLWFybTExMzZqZnMgPSAiYXJtMTEzNmpmcyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm0xMTM2amZzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2fSBhcm0xMTM2amZzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybTExMzZqZnMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ9IGFybTExMzZqZnMtdmZwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTIwdC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTJlYWU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTIwdC5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0dCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKKworVFVORVZBTElEW2FybTkyMHRdID0gIkVuYWJsZSBhcm05MjB0IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTkyMHQiLCAiIC1tdHVuZT1hcm05MjB0IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtOTIwdCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm05MjB0ID0gImFybTkyMHQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtOTIwdCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHR9IGFybTkyMHQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtOTIwdCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGFybTkyMHQgYXJtOTIwdHQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTI2ZWpzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzVlNGUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTI2ZWpzLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjV0ZSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKK1RVTkVWQUxJRFthcm05MjZlanNdID0gIkVuYWJsZSBhcm05MjZlanMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtOTI2ZWpzIiwgIiAtbXR1bmU9YXJtOTI2ZWotcyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImFybTkyNmVqcyIKK0FSTVBLR0FSQ0hfdHVuZS1hcm05MjZlanMgPSAiYXJtOTI2ZWpzIgorVFVORV9GRUFUVVJFU190dW5lLWFybTkyNmVqcyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSBhcm05MjZlanMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtOTI2ZWpzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGV9IGFybTkyNmVqc3RlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTU3YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0dCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKKworVFVORVZBTElEW2FybTl0ZG1pXSA9ICJFbmFibGUgYXJtOXRkbWkgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtOXRkbWkiLCAiIC1tdHVuZT1hcm05dGRtaSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImFybTl0ZG1pIgorQVJNUEtHQVJDSF90dW5lLWFybTl0ZG1pID0gImFybTl0ZG1pIgorVFVORV9GRUFUVVJFU190dW5lLWFybTl0ZG1pID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0dH0gYXJtOXRkbWkiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtOXRkbWkgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBhcm05dGRtaXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hdG9tLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWJiNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hdG9tLmluYwpAQCAtMCwwICsxLDIgQEAKKyMgQXRvbSB0dW5pbmdzIGFyZSB0aGUgc2FtZSBhcyBjb3JlMiBmb3Igbm93Li4uCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jMy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYzI4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWMzLmluYwpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKKworVFVORVZBTElEW2MzXSA9ICJWSUEgQ3lyaXggSUlJIG9yIFZJQSBDMyBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIgorVFVORUNPTkZMSUNUU1tjM10gPSAibTY0IG14MzIiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYzMiLCAiIC1tYXJjaD1jMyAtbXR1bmU9YzMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjMyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jMyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGMzIgorQkFTRV9MSUJTX3R1bmUtYzMgPSAiJHtCQVNFX0xJQl90dW5lLXg4Nn0iCisjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGxpa2VseSBiZSBzb21ldGhpbmcgb3RoZXIgdGhlbiBpNTg2Li4uCitUVU5FX1BLR0FSQ0hfdHVuZS1jMyA9ICJpNTg2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWMzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Nn0gaTM4NiBpNDg2IGk1ODYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0Y2I3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwpAQCAtMCwwICsxLDM4IEBACisjIFNldHRpbmdzIGZvciB0aGUgR0NDKDEpIGNwdS10eXBlICJjb3JlMiI6CisjCisjICAgICAgSW50ZWwgQ29yZTIgQ1BVIHdpdGggNjQtYml0IGV4dGVuc2lvbnMsIE1NWCwgU1NFLCBTU0UyLCBTU0UzIGFuZCBTU1NFMworIyAgICAgIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorIworIyBUaGlzIHR1bmUgaXMgcmVjb21tZW5kZWQgZm9yIHRoZSBJbnRlbCBDb3JlIDIgQ1BVIGZhbWlseSwgaW5jbHVkaW5nIENvbnJvZSwKKyMgTWVyb20gYW5kIGJleW9uZCwgYXMgd2VsbCBhcyB0aGUgZmlyc3QgQXRvbSBDUFVzLCBEaWFtb25kdmlsbGUsIGFuZCBiZXlvbmQuCisjCitERUZBVUxUVFVORSA/PSAiY29yZTItMzIiCisKKyMgU2V0IHg4NiB0YXJnZXQgYXJjaCB0byBpNjg2LCBzbyB0aGF0IGdsaWJjIGVuYWJsZXMgU1NFIG9wdGltaXNlZCBtZW1jcHksIGV0Yy4KK1g4NkFSQ0gzMiA/PSAiaTY4NiIKKworIyBJbmNsdWRlIHRoZSBwcmV2aW91cyB0dW5lIHRvIHB1bGwgaW4gUEFDS0FHRV9FWFRSQV9BUkNIUworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCisKKyMgRXh0cmEgdHVuZSBmZWF0dXJlcworVFVORVZBTElEW2NvcmUyXSA9ICJFbmFibGUgY29yZTIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZTIiLCAiIC1tYXJjaD1jb3JlMiAtbXR1bmU9Y29yZTIgLW1zc2UzIC1tZnBtYXRoPXNzZSIsICIiLCBkKX0iCisKKyMgRXh0cmEgdHVuZSBzZWxlY3Rpb25zCitBVkFJTFRVTkVTICs9ICJjb3JlMi0zMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi0zMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGNvcmUyIgorQkFTRV9MSUJfdHVuZS1jb3JlMi0zMiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi0zMiA9ICJjb3JlMi0zMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi0zMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1pNTg2fSBjb3JlMi0zMiIKKworQVZBSUxUVU5FUyArPSAiY29yZTItNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZTItNjQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0fSBjb3JlMiIKK0JBU0VfTElCX3R1bmUtY29yZTItNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi02NCA9ICJjb3JlMi02NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi02NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjR9IGNvcmUyLTY0IgorCitBVkFJTFRVTkVTICs9ICJjb3JlMi02NC14MzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZTItNjQteDMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Ni02NC14MzJ9IGNvcmUyIgorQkFTRV9MSUJfdHVuZS1jb3JlMi02NC14MzIgPSAibGlieDMyIgorVFVORV9QS0dBUkNIX3R1bmUtY29yZTItNjQteDMyID0gImNvcmUyLTY0LXgzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi02NC14MzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2LTY0LXgzMn0gY29yZTItNjQteDMyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmVpNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjZjkzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmVpNy5pbmMKQEAgLTAsMCArMSwzNSBAQAorIyBTZXR0aW5ncyBmb3IgdGhlIEdDQygxKSBjcHUtdHlwZSAiY29yZWk3IjoKKyMKKyMgICAgIEludGVsIENvcmUgaTcgQ1BVIHdpdGggNjQtYml0IGV4dGVuc2lvbnMsIE1NWCwgU1NFLCBTU0UyLCBTU0UzLCBTU1NFMywgU1NFNC4xCisjICAgICBhbmQgU1NFNC4yIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorIworIyBUaGlzIHR1bmUgaXMgcmVjb21tZW5kZWQgZm9yIEludGVsIE5laGFsZW0gYW5kIFNpbHZlcm1vbnQgKGUuZy4gQmF5IFRyYWlsKSBDUFVzCisjIChhbmQgYmV5b25kKS4KKyMKK0RFRkFVTFRUVU5FID89ICJjb3JlaTctNjQiCisKKyMgUHVsbCBpbiB0aGUgcHJldmlvdXMgdHVuZSBpbiB0byBwdWxsIGluIFBBQ0tBR0VfRVhUUkFfQVJDSFMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKKworIyBFeHRyYSB0dW5lIGZlYXR1cmVzCitUVU5FVkFMSURbY29yZWk3XSA9ICJFbmFibGUgY29yZWk3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcmVpNyIsICIgLW1hcmNoPWNvcmVpNyAtbXR1bmU9Y29yZWk3IC1tZnBtYXRoPXNzZSAtbXNzZTQuMiIsICIiLCBkKX0iCisKKyMgRXh0cmEgdHVuZSBzZWxlY3Rpb25zCitBVkFJTFRVTkVTICs9ICJjb3JlaTctMzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZWk3LTMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gY29yZWk3IgorQkFTRV9MSUJfdHVuZS1jb3JlaTctMzIgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtY29yZWk3LTMyID0gImNvcmVpNy0zMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlaTctMzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTJ9IGNvcmVpNy0zMiIKKworQVZBSUxUVU5FUyArPSAiY29yZWk3LTY0IgorVFVORV9GRUFUVVJFU190dW5lLWNvcmVpNy02NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjR9IGNvcmVpNyIKK0JBU0VfTElCX3R1bmUtY29yZWk3LTY0ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtY29yZWk3LTY0ID0gImNvcmVpNy02NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlaTctNjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItNjR9IGNvcmVpNy02NCIKKworQVZBSUxUVU5FUyArPSAiY29yZWk3LTY0LXgzMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlaTctNjQteDMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Ni02NC14MzJ9IGNvcmVpNyIKK0JBU0VfTElCX3R1bmUtY29yZWk3LTY0LXgzMiA9ICJsaWJ4MzIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlaTctNjQteDMyID0gImNvcmVpNy02NC14MzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZWk3LTY0LXgzMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi02NC14MzJ9IGNvcmVpNy02NC14MzIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI5Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE1LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTE1XSA9ICJFbmFibGUgQ29ydGV4LUExNSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhMTUiLCAiIC1tdHVuZT1jb3J0ZXgtYTE1IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTE1IGNvcnRleGExNXQgY29ydGV4YTE1LW5lb24gY29ydGV4YTE1dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNSA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dCA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1LW5lb24gPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNXQtbmVvbiA9ICJjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNXQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNS1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGExNS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhMTUtdmZwIGNvcnRleGExNXQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTUtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE1LXZmcCBjb3J0ZXhhMTUtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTE1LXZmcCBjb3J0ZXhhMTUtdmZwLW5lb24gY29ydGV4YTE1dDItdmZwIGNvcnRleGExNXQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTE1aGYgY29ydGV4YTE1dGhmIGNvcnRleGExNWhmLW5lb24gY29ydGV4YTE1dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1aGYgPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNXRoZiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1aGYtbmVvbiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dGhmLW5lb24gPSAiY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNWhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNXRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNXRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNWhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhMTVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE1aGYtdmZwIGNvcnRleGExNXQyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNWhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTE1aGYtdmZwIGNvcnRleGExNWhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNXRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhMTVoZi12ZnAgY29ydGV4YTE1aGYtdmZwLW5lb24gY29ydGV4YTE1dDJoZi12ZnAgY29ydGV4YTE1dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzcxMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTcuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhMTddID0gIkVuYWJsZSBDb3J0ZXgtQTE3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGExNyIsICIgLW10dW5lPWNvcnRleC1hMTciLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTcgY29ydGV4YTE3dCBjb3J0ZXhhMTctbmVvbiBjb3J0ZXhhMTd0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3ID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0ID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTctbmVvbiA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3dC1uZW9uID0gImNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTcgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTE3LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTd0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGExNy12ZnAgY29ydGV4YTE3dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNy1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhMTctdmZwIGNvcnRleGExNy12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTd0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTctdmZwIGNvcnRleGExNy12ZnAtbmVvbiBjb3J0ZXhhMTd0Mi12ZnAgY29ydGV4YTE3dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTdoZiBjb3J0ZXhhMTd0aGYgY29ydGV4YTE3aGYtbmVvbiBjb3J0ZXhhMTd0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTdoZiA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3dGhmID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTdoZi1uZW9uID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0aGYtbmVvbiA9ICJjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTdoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhMTciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExN2hmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTd0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhMTdoZi12ZnAgY29ydGV4YTE3dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTdoZi12ZnAgY29ydGV4YTE3aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExN2hmLXZmcCBjb3J0ZXhhMTdoZi12ZnAtbmVvbiBjb3J0ZXhhMTd0MmhmLXZmcCBjb3J0ZXhhMTd0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE1XSA9ICJFbmFibGUgQ29ydGV4LUE1IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE1IiwgIiAtbXR1bmU9Y29ydGV4LWE1IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTUgY29ydGV4YTV0IGNvcnRleGE1LW5lb24gY29ydGV4YTV0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTUgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTV0ID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1LW5lb24gPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTV0LW5lb24gPSAiY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNXQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTUtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE1LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTUtdmZwIGNvcnRleGE1dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE1LXZmcCBjb3J0ZXhhNS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNXQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE1LXZmcCBjb3J0ZXhhNS12ZnAtbmVvbiBjb3J0ZXhhNXQyLXZmcCBjb3J0ZXhhNXQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTVoZiBjb3J0ZXhhNXRoZiBjb3J0ZXhhNWhmLW5lb24gY29ydGV4YTV0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNWhmID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dGhmID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1aGYtbmVvbiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXRoZi1uZW9uID0gImNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNXRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNWhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhNWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNXRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE1aGYtdmZwIGNvcnRleGE1dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTVoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE1aGYtdmZwIGNvcnRleGE1aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTV0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTVoZi12ZnAgY29ydGV4YTVoZi12ZnAtbmVvbiBjb3J0ZXhhNXQyaGYtdmZwIGNvcnRleGE1dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA2OTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jCkBAIC0wLDAgKzEsNDIgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhN10gPSAiRW5hYmxlIENvcnRleC1BNyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhNyIsICIgLW10dW5lPWNvcnRleC1hNyIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGE3IGNvcnRleGE3dCBjb3J0ZXhhNy1uZW9uIGNvcnRleGE3dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3ID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dCA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNy1uZW9uID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dC1uZW9uID0gImNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTcgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhNy12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGE3LXZmcCBjb3J0ZXhhN3QyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNy1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNy12ZnAgY29ydGV4YTctdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhNy12ZnAgY29ydGV4YTctdmZwLW5lb24gY29ydGV4YTd0Mi12ZnAgY29ydGV4YTd0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGE3aGYgY29ydGV4YTd0aGYgY29ydGV4YTdoZi1uZW9uIGNvcnRleGE3dGhmLW5lb24gY29ydGV4YTdoZi1uZW9uLXZmcHY0IGNvcnRleGE3dGhmLW5lb24tdmZwdjQiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTdoZiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3RoZiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN2hmLW5lb24gPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0aGYtbmVvbiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN2hmLW5lb24tdmZwdjQgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0aGYtbmVvbi12ZnB2NCA9ICJjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN2hmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTdoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTdoZi1uZW9uLXZmcHY0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9uLXZmcHY0fSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uLXZmcHY0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NH0gY29ydGV4YTciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTdoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTdoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhN2hmLXZmcCBjb3J0ZXhhN3QyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhN2hmLXZmcCBjb3J0ZXhhN2hmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24gY29ydGV4YTd0MmhmLXZmcCBjb3J0ZXhhN3QyaGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTdoZi1uZW9uLXZmcHY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjR9IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24gY29ydGV4YTdoZi12ZnAtdmZwdjQtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uLXZmcHY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0fSBjb3J0ZXhhN2hmLXZmcCBjb3J0ZXhhN2hmLXZmcC1uZW9uIGNvcnRleGE3dDJoZi12ZnAgY29ydGV4YTd0MmhmLXZmcC1uZW9uIGNvcnRleGE3aGYtdmZwLXZmcHY0LW5lb24gY29ydGV4YTd0MmhmLXZmcC12ZnB2NC1uZW9uIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MTUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE4XSA9ICJFbmFibGUgQ29ydGV4LUE4IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE4IiwgIiAtbXR1bmU9Y29ydGV4LWE4IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTggY29ydGV4YTh0IGNvcnRleGE4LW5lb24gY29ydGV4YTh0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTggPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTh0ID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4LW5lb24gPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTh0LW5lb24gPSAiY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTggPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOHQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTgtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhOCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE4LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOHQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTgtdmZwIGNvcnRleGE4dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE4LXZmcCBjb3J0ZXhhOC12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOHQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE4LXZmcCBjb3J0ZXhhOC12ZnAtbmVvbiBjb3J0ZXhhOHQyLXZmcCBjb3J0ZXhhOHQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YThoZiBjb3J0ZXhhOHRoZiBjb3J0ZXhhOGhmLW5lb24gY29ydGV4YTh0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOGhmID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dGhmID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4aGYtbmVvbiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHRoZi1uZW9uID0gImNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOHRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOGhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOHRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE4aGYtdmZwIGNvcnRleGE4dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YThoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE4aGYtdmZwIGNvcnRleGE4aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTh0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YThoZi12ZnAgY29ydGV4YThoZi12ZnAtbmVvbiBjb3J0ZXhhOHQyaGYtdmZwIGNvcnRleGE4dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAzOTRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhOV0gPSAiRW5hYmxlIENvcnRleC1BOSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhOSIsICIgLW10dW5lPWNvcnRleC1hOSIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGE5IGNvcnRleGE5dCBjb3J0ZXhhOS1uZW9uIGNvcnRleGE5dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5ID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5dCA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOS1uZW9uID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5dC1uZW9uID0gImNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTl0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTkiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTkgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhOS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTl0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGE5LXZmcCBjb3J0ZXhhOXQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOS1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOS12ZnAgY29ydGV4YTktdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTl0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhOS12ZnAgY29ydGV4YTktdmZwLW5lb24gY29ydGV4YTl0Mi12ZnAgY29ydGV4YTl0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGE5aGYgY29ydGV4YTl0aGYgY29ydGV4YTloZi1uZW9uIGNvcnRleGE5dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTloZiA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXRoZiA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOWhmLW5lb24gPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0aGYtbmVvbiA9ICJjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOWhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTl0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTloZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTkiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTloZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTloZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTl0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhOWhmLXZmcCBjb3J0ZXhhOXQyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhOWhmLXZmcCBjb3J0ZXhhOWhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE5aGYtdmZwIGNvcnRleGE5aGYtdmZwLW5lb24gY29ydGV4YTl0MmhmLXZmcCBjb3J0ZXhhOXQyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2NTI3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleG0xXSA9ICJFbmFibGUgQ29ydGV4LU0xIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleG0xIiwgIiAtbXR1bmU9Y29ydGV4LW0xIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiY29ydGV4bTEiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4bTEgPSAiY29ydGV4bTEiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4bTEgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhtMSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhtMSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhtMS12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjNGMwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAiY29ydGV4bTMiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4bTNdID0gIkVuYWJsZSBDb3J0ZXgtTTMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4bTMiLCAiIC1tdHVuZT1jb3J0ZXgtbTMiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbYXJtdjdtXSA9ICJFbmFibGUgQ29ydGV4LU0zIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3bSIsICIgLW1hcmNoPWFybXY3LW0iLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhtMyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhtMyA9ICJhcm12N20iCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4bTMgPSAiYXJtdjdtIHZmcCBjb3J0ZXhtMyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhtMyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBhcm12N20tdmZwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTY0OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gImNvcnRleHI0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleHI0XSA9ICJFbmFibGUgQ29ydGV4LVI0IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleHI0IiwgIiAtbXR1bmU9Y29ydGV4LXI0IiwgIiIsIGQpfSIKKworVFVORVZBTElEW2FybXY3cl0gPSAiRW5hYmxlIENvcnRleC1SNCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12N3IiLCAiIC1tYXJjaD1hcm12Ny1yIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiY29ydGV4cjQiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4cjQgPSAiYXJtdjdyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleHI0ID0gImFybXY3ciB2ZnAgY29ydGV4cjQgYXJtIHRodW1iIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleHI0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3ci12ZnAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtZXA5MzEyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTliNDM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtZXA5MzEyLmluYwpAQCAtMCwwICsxLDEyIEBACitERUZBVUxUVFVORSA/PSAiZXA5MzEyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbZXA5MzEyXSA9ICJFbmFibGUgSW50ZWwgUFhBMjd4IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImVwOTMxMiIsICIgLW1hcmNoPWVwOTMxMiAtbXR1bmU9ZXA5MzEyIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiZXA5MzEyIgorQVJNUEtHQVJDSF90dW5lLWVwOTMxMiA9ICJlcDkzMTIiCisjIHRoaXMgdHVuZSBkb2VzIG5vdCBpbmNsdWRlIFRVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHQsIHNvIHRoZXJlIGlzIG5vIGFybXY0IFRVTkVfRkVBVFVSRVMgPT4gbm8gJ3QnIGluIEFSTVBLR1NGWF9USFVNQgorVFVORV9GRUFUVVJFU190dW5lLWVwOTMxMiA9ICJ0aHVtYiBlcDkzMTIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtZXA5MzEyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dH0gZXA5MzEyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni1ubHAuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni1ubHAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDYwMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LW5scC5pbmMKQEAgLTAsMCArMSwxOSBAQAorIyBTZXR0aW5ncyBmb3IgdGhlIEdDQygxKSBjcHUtdHlwZSAicXVhcmsiOgorIworIworIworREVGQVVMVFRVTkUgPz0gImk1ODYtbmxwLTMyIgorCisjIEluY2x1ZGUgdGhlIHByZXZpb3VzIHR1bmUgdG8gcHVsbCBpbiBQQUNLQUdFX0VYVFJBX0FSQ0hTCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKKworIyB4ODYgd2l0aCBubyBsb2NrIHByZWZpeAorVFVORVZBTElEW2k1ODYtbmxwXSA9ICJJQTMyIHdpdGggTG9jayBQcmVmaXggb21pdHRlZCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJpNTg2LW5scCIsICIgLW1hcmNoPWk1ODYgLVdhLC1tb21pdC1sb2NrLXByZWZpeD15ZXMiLCAiIiwgZCl9IgorCisjIFF1YXJrIHR1bmUgZmVhdHVyZQorQVZBSUxUVU5FUyA9ICJpNTg2LW5scC0zMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1pNTg2LW5scC0zMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGk1ODYtbmxwIgorQkFTRV9MSUJfdHVuZS1pNTg2LW5scC0zMiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1pNTg2LW5scC0zMiA9ICJpNTg2LW5scC0zMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1pNTg2LW5scC0zMiA9ICJpNTg2LW5scC0zMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiYjNjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJpNTg2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKKworIyBFeHRyYSB0dW5lIGZlYXR1cmVzCitUVU5FVkFMSURbaTU4Nl0gPSAiRW5hYmxlIGk1ODYgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiaTU4NiIsICIgLW1hcmNoPWk1ODYiLCAiIiwgZCl9IgorCisjIEV4dHJhIHR1bmUgc2VsZWN0aW9ucworQVZBSUxUVU5FUyArPSAiaTU4NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1pNTg2ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gaTU4NiIKK0JBU0VfTElCX3R1bmUtaTU4NiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1pNTg2ID0gImk1ODYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaTU4NiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODZ9IGk1ODYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaXdtbXh0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhjYTBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaXdtbXh0LmluYwpAQCAtMCwwICsxLDE0IEBACisjIENvbmZpZ3VyYXRpb25zIGZvciB0aGUgSW50ZWwgUFhBMjd4IEFwcGljYXRpb25zIFByb2Nlc3NvciBGYW1pbHkuIAorIyBQbGVhc2UgdXNlIHR1bmUteHNjYWxlIGZvciBQWEEyNTUvUFhBMjZ4IGJhc2VkIHByb2Nlc3NvcnMuCisKK0RFRkFVTFRUVU5FID89ICJpd21teHQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYworCitUVU5FVkFMSURbaXdtbXh0XSA9ICJFbmFibGUgSW50ZWwgUFhBMjd4IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIml3bW14dCIsICIgLW1hcmNoPWl3bW14dCAtbXR1bmU9aXdtbXh0IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiaXdtbXh0IgorQVJNUEtHQVJDSF90dW5lLWl3bW14dCA9ICJpd21teHQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtaXdtbXh0ID0gInRodW1iIGl3bW14dCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1pd21teHQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0gaXdtbXh0IGl3bW14dHQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTMyNmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYwpAQCAtMCwwICsxLDI1IEBACitERUZBVUxUVFVORSA/PSAibWlwczMyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYworCitUVU5FVkFMSURbbWlwczMyXSA9ICJFbmFibGUgbWlwczMyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORUNPTkZMSUNUU1ttaXBzMzJdID0gIm42NCBuMzIiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibWlwczMyIiwgIiAtbWFyY2g9bWlwczMyIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAibWlwczMyIG1pcHMzMmVsIG1pcHMzMi1uZiBtaXBzMzJlbC1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzfSBtaXBzMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzIgPSAibWlwczMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMiA9ICJtaXBzIG1pcHMzMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMmVsID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHNlbH0gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyZWwgPSAibWlwczMyZWwiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyZWwgPSAibWlwc2VsIG1pcHMzMmVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHMtbmZ9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMi1uZiA9ICJtaXBzMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyLW5mID0gIm1pcHMtbmYgbWlwczMyLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyZWwtbmYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsLW5mfSBtaXBzMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJlbC1uZiA9ICJtaXBzMzJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJlbC1uZiA9ICJtaXBzZWwtbmYgbWlwczMyZWwtbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkZWZmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYwpAQCAtMCwwICsxLDE3IEBACitERUZBVUxUVFVORSA/PSAibWlwczMycjIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCisKK1RVTkVWQUxJRFttaXBzMzJyMl0gPSAiRW5hYmxlIG1pcHMzMnIyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORUNPTkZMSUNUU1ttaXBzMzJyMl0gPSAibjY0IG4zMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtaXBzMzJyMiIsICIgLW1hcmNoPW1pcHMzMnIyIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAibWlwczMycjIgbWlwczMycjJlbCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHN9IG1pcHMzMnIyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMycjIgPSAibWlwczMycjIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMycjIgPSAibWlwcyBtaXBzMzIgbWlwczMycjIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMmVsID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHNlbH0gbWlwczMycjIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJyMmVsID0gIm1pcHMzMnIyZWwiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMycjJlbCA9ICJtaXBzZWwgbWlwczMyZWwgbWlwczMycjJlbCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTBlMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCkBAIC0wLDAgKzEsMyBAQAorREVGQVVMVFRVTkUgPz0gIm1pcHM2NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtb2N0ZW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW9jdGVvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0ZDlkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW9jdGVvbi5pbmMKQEAgLTAsMCArMSwzMiBAQAorREVGQVVMVFRVTkUgPz0ib2N0ZW9uMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKKworQVZBSUxUVU5FUyArPSAib2N0ZW9uMiBvY3Rlb24yXzY0IG9jdGVvbjMgb2N0ZW9uM182NCIKKworVFVORVZBTElEW29jdGVvbjJdID0gIkVuYWJsZSBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBvY3Rlb24yIHN1cHBvcnQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAib2N0ZW9uMiIsICIgLW1hcmNoPW9jdGVvbjIgIiwgIiIsZCl9IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbjMyfSBvY3Rlb24yIgorQkFTRV9MSUJfdHVuZS1vY3Rlb24yID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtb2N0ZW9uMiA9ICJvY3Rlb24yIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW9jdGVvbjIgPSAibWlwczY0LW4zMiBvY3Rlb24yLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW9jdGVvbjJfNjQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0fSBvY3Rlb24yIgorQkFTRV9MSUJfdHVuZS1vY3Rlb24yXzY0ID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtb2N0ZW9uMl82NCA9ICJvY3Rlb24yXzY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW9jdGVvbjJfNjQgPSAibWlwczY0IG9jdGVvbjJfNjQiCisKKworVFVORVZBTElEW29jdGVvbjNdID0gIkVuYWJsZSBvcHRpbWl6YXRpb24gcmVsYXRlZCB0byBvY3Rlb24zIHN1cHBvcnQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAib2N0ZW9uMyIsICIgLW1hcmNoPW9jdGVvbjMgIiwgIiIsZCl9IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uMyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbjMyfSBvY3Rlb24zIgorQkFTRV9MSUJfdHVuZS1vY3Rlb24zID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtb2N0ZW9uMyA9ICJvY3Rlb24zIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW9jdGVvbjMgPSAibWlwczY0LW4zMiBvY3Rlb24zLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW9jdGVvbjNfNjQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0fSBvY3Rlb24zIgorQkFTRV9MSUJfdHVuZS1vY3Rlb24zXzY0ID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtb2N0ZW9uM182NCA9ICJvY3Rlb24zXzY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW9jdGVvbjNfNjQgPSAibWlwczY0IG9jdGVvbjNfNjQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJlODY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI1LmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjNjRwNSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbcG93ZXI1XSA9ICJFbmFibGUgSUJNIFBvd2VyNSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjUiLCAiIC1tY3B1PXBvd2VyNSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwY3A1IHBwYzY0cDUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjcDUgPSAibTMyIGZwdS1oYXJkIHBvd2VyNSBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGNwNSA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNwNSA9ICJwcGNwNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNwNSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNwNSIKKworVFVORV9GRUFUVVJFU190dW5lLXBwYzY0cDUgPSAibTY0IGZwdS1oYXJkIHBvd2VyNSBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGM2NHA1ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjRwNSA9ICJwcGM2NHA1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzY0cDUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0fSBwcGM2NHA1IgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBwb3dlcjUgc3BlY2lmaWMgbGlicmFyeQorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGM2NCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI1IiwgIi0td2l0aC1jcHU9cG93ZXI1IiwgIiIsIGQpfSIKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjUiLCAiLS13aXRoLWNwdT1wb3dlcjUiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2Mzc5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNi5pbmMKQEAgLTAsMCArMSwyMSBAQAorREVGQVVMVFRVTkUgPz0gInBwY3ByNiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbcG93ZXI2XSA9ICJFbmFibGUgSUJNIFBvd2VyNiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjYiLCAiIC1tY3B1PXBvd2VyNiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwY3A2IHBwYzY0cDYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjcDYgPSAibTMyIGZwdS1oYXJkIHBvd2VyNiBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGNwNiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNwNiA9ICJwcGNwNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNwNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNwNiIKKworVFVORV9GRUFUVVJFU190dW5lLXBwYzY0cDYgPSAibTY0IGZwdS1oYXJkIHBvd2VyNiBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGM2NHA2ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjRwNiA9ICJwcGM2NHA2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzY0cDYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0fSBwcGM2NHA2IgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBwb3dlcjYgc3BlY2lmaWMgbGlicmFyeQorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGM2NCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI2IiwgIi0td2l0aC1jcHU9cG93ZXI2IiwgIiIsIGQpfSIKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjYiLCAiLS13aXRoLWNwdT1wb3dlcjYiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2OWU3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNy5pbmMKQEAgLTAsMCArMSwyMSBAQAorREVGQVVMVFRVTkUgPz0gInBwY3ByNyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbcG93ZXI3XSA9ICJFbmFibGUgSUJNIFBvd2VyNyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjciLCAiIC1tY3B1PXBvd2VyNyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwY3A3IHBwYzY0cDciCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjcDcgPSAibTMyIGZwdS1oYXJkIHBvd2VyNyBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGNwNyA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNwNyA9ICJwcGNwNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNwNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNwNyIKKworVFVORV9GRUFUVVJFU190dW5lLXBwYzY0cDcgPSAibTY0IGZwdS1oYXJkIHBvd2VyNyBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGM2NHA3ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjRwNyA9ICJwcGM2NHA3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzY0cDcgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0fSBwcGM2NHA3IgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBwb3dlcjcgc3BlY2lmaWMgbGlicmFyeQorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGM2NCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI3IiwgIi0td2l0aC1jcHU9cG93ZXI3IiwgIiIsIGQpfSIKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjciLCAiLS13aXRoLWNwdT1wb3dlcjciLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzQ3Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkMTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzQ3Ni5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBwYzQ3NiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwYzQ3Nl0gPSAiRW5hYmxlIHBwYzQ3NiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM0NzYiLCAiIC1tY3B1PTQ3NiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwYzQ3NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM0NzYgPSAibTMyIGZwdS1oYXJkIHBwYzQ3NiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzQ3NiA9ICJwcGM0NzYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNDc2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwYzQ3NiIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgNDc2IHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM0NzYiLCAiLXdpdGgtY3B1PTQ3NiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM2MDNlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDRhMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM2MDNlLmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjNjAzZSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwYzYwM2VdID0gIkVuYWJsZSBwcGM2MDNlIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzYwM2UiLCAiIC1tY3B1PTYwM2UiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGM2MDNlIgorVFVORV9GRUFUVVJFU190dW5lLXBwYzYwM2UgPSAibTMyIGZwdS1oYXJkIHBwYzYwM2UiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2MDNlID0gInBwYzYwM2UiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjAzZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGM2MDNlIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCA2MDNlIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM2MDNlIiwgIi13aXRoLWNwdT02MDNlIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjMDQwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM3NDAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjNzQwMF0gPSAiRW5hYmxlIHBwYzc0MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNzQwMCIsICIgLW1jcHU9NzQwMCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwYzc0MDAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNzQwMCA9ICJtMzIgZnB1LWhhcmQgcHBjNzQwMCBhbHRpdmVjIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNzQwMCA9ICJwcGM3NDAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzc0MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjNzQwMCIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgNzQwMCBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKKyNHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzc0MDAiLCAiLS13aXRoLWNwdT1wb3dlcjQiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOTUwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMi5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gInBwY2UzMDBjMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwY2UzMDBjMl0gPSAiRW5hYmxlIHBwY2UzMDBjMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzIiLCAiIC1tY3B1PWUzMDBjMiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwY2UzMDBjMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlMzAwYzIgPSAibTMyIGZwdS1zb2Z0IHBwY2UzMDBjMiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2UzMDBjMiA9ICJwcGNlMzAwYzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTMwMGMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGMtbmZ9IHBwY2UzMDBjMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOWNmMjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzMuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlMzAwYzMiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK0FWQUlMVFVORVMgKz0gInBwY2UzMDBjMyBwcGNlMzAwYzMtbmYiCisKKyMgaGFyZC1mbG9hdAorVFVORVZBTElEW3BwY2UzMDBjM10gPSAiRW5hYmxlIHBwY2UzMDBjMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlMzAwYzMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtcG93ZXJwY30gcHBjZTMwMGMzIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTMwMGMzID0gInBwY2UzMDBjMyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlMzAwYzMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTMwMGMzIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMyIsICIgLW1jcHU9ZTMwMGMzIiwgIiIsIGQpfSIKKworIyBnbGliYyBjb25maWcgb3B0aW9ucyB0byBtYWtlIHVzZSBvZiBlMzAwYzMgKDYwM2UpIHNwZWNpZmljIHNxcnQvc3FydGYgcm91dGluZXMKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTMwMGMzIiwgIi0td2l0aC1jcHU9ZTMwMGMzIiwgIiIsIGQpfSIKKworIyBzb2Z0LWZsb2F0CitUVU5FVkFMSURbcHBjZTMwMGMzLW5mXSA9ICJFbmFibGUgcHBjZTMwMGMzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIChubyBmcHUpIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2UzMDBjMy1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjLW5mfSBwcGNlMzAwYzMtbmYiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlMzAwYzMtbmYgPSAicHBjZTMwMGMzLW5mIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2UzMDBjMy1uZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjLW5mfSBwcGNlMzAwYzMtbmYiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTMwMGMzLW5mIiwgIiAtbWNwdT1lMzAwYzMiLCAiIiwgZCl9IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzFmOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwLmluYwpAQCAtMCwwICsxLDIwIEBACitERUZBVUxUVFVORSA/PSAicHBjZTUwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwY2U1MDBdID0gIkVuYWJsZSBwcGNlNTAwIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDAiLCAiIC1tY3B1PTg1NDAiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbc3BlXSA9ICJFbmFibGUgU1BFIEFCSSBleHRlbnNpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAicHBjZTUwMCIsICJzcGUiIF0sICIgLW1hYmk9c3BlIC1tc3BlIC1tZmxvYXQtZ3Bycz1zaW5nbGUiLCAiIiwgZCl9IgorVEFSR0VUX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwIiAsICJzcGUiIF0sICJwcGMtZWZzIiwgIiIsIGQpfSIKKworIyBzcGUgaXMgZGVmaW5lZCBwb3RlbnRpYWxseSBpbiB0d28gcGxhY2VzLCBzbyB3ZSB3YW50IHRvIGJlIHN1cmUgaXQgd2lsbAorIyBvbmx5IHdyaXRlIHNwZSBvbmNlIHRvIHRoZSBBQklFWFRFTlNJT05TIGZpZWxkLgorU1BFQUJJRVhURU5TSU9OID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNwZSIsICJzcGUiLCAiIiwgZCl9IgorQUJJRVhURU5TSU9OIC49ICIke1NQRUFCSUVYVEVOU0lPTn0iCisKK0FWQUlMVFVORVMgKz0gInBwY2U1MDAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTUwMCA9ICJtMzIgc3BlIHBwY2U1MDAiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlNTAwID0gInBwY2U1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTUwMCA9ICJwcGNlNTAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDBtYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ZDhlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDBtYy5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U1MDBtYyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwY2U1MDBtY10gPSAiRW5hYmxlIHBwY2U1MDBtYyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlNTAwbWMiLCAiIC1tY3B1PWU1MDBtYyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwY2U1MDBtYyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTAwbWMgPSAibTMyIGZwdS1oYXJkIHBwY2U1MDBtYyIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1MDBtYyA9ICJwcGNlNTAwbWMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTUwMG1jID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY2U1MDBtYyIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgZTUwMG1jIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlNTAwbWMiLCAiLXdpdGgtY3B1PWU1MDBtYyIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMHYyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE0ZDcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMHYyLmluYwpAQCAtMCwwICsxLDIwIEBACitERUZBVUxUVFVORSA/PSAicHBjZTUwMHYyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTUwMHYyXSA9ICJFbmFibGUgcHBjZTUwMHYyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDB2MiIsICIgLW1jcHU9ODU0OCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtzcGVdID0gIkVuYWJsZSBTUEUgQUJJIGV4dGVuc2lvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwdjIiLCAic3BlIiBdLCAiIC1tYWJpPXNwZSAtbXNwZSAtbWZsb2F0LWdwcnM9ZG91YmxlIiwgIiIsIGQpfSIKK1RBUkdFVF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAicHBjZTUwMHYyIiAsICJzcGUiIF0sICJwcGMtZWZkIiwgIiIsIGQpfSIKKworIyBzcGUgaXMgZGVmaW5lZCBwb3RlbnRpYWxseSBpbiB0d28gcGxhY2VzLCBzbyB3ZSB3YW50IHRvIGJlIHN1cmUgaXQgd2lsbAorIyBvbmx5IHdyaXRlIHNwZSBvbmNlIHRvIHRoZSBBQklFWFRFTlNJT05TIGZpZWxkLgorU1BFQUJJRVhURU5TSU9OID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNwZSIsICJzcGUiLCAiIiwgZCl9IgorQUJJRVhURU5TSU9OIC49ICIke1NQRUFCSUVYVEVOU0lPTn0iCisKK0FWQUlMVFVORVMgKz0gInBwY2U1MDB2MiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTAwdjIgPSAibTMyIHNwZSBwcGNlNTAwdjIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlNTAwdjIgPSAicHBjZTUwMHYyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1MDB2MiA9ICJwcGNlNTAwdjIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyMzFlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYwpAQCAtMCwwICsxLDIwIEBACitERUZBVUxUVFVORSA/PSAicHBjZTU1MDAiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW2U1NTAwXSA9ICJFbmFibGUgRnJlZXNjYWxlIGU1NTAwIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU1NTAwIiwgIiAtbWNwdT1lNTUwMCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwY2U1NTAwIHBwYzY0ZTU1MDAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTU1MDAgPSAibTMyIGZwdS1oYXJkIGU1NTAwIgorQkFTRV9MSUJfdHVuZS1wcGNlNTUwMCA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlNTUwMCA9ICJwcGNlNTUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlNTUwMCIKKworVFVORV9GRUFUVVJFU190dW5lLXBwYzY0ZTU1MDAgPSAibTY0IGZwdS1oYXJkIGU1NTAwIgorQkFTRV9MSUJfdHVuZS1wcGM2NGU1NTAwID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjRlNTUwMCA9ICJwcGM2NGU1NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzY0ZTU1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0fSBwcGM2NGU1NTAwIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBlNTUwMCBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTU1MDAiLCAiLS13aXRoLWNwdT1lNTUwMCIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3NDNhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjZTY1MDAiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW2U2NTAwXSA9ICJFbmFibGUgRnJlZXNjYWxlIGU2NTAwIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU2NTAwIiwgIiAtbWNwdT1lNjUwMCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwY2U2NTAwIHBwYzY0ZTY1MDAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTY1MDAgPSAibTMyIGZwdS1oYXJkIGU2NTAwIGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY2U2NTAwID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U2NTAwID0gInBwY2U2NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U2NTAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY2U2NTAwIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRlNjUwMCA9ICJtNjQgZnB1LWhhcmQgZTY1MDAgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjNjRlNjUwMCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0ZTY1MDAgPSAicHBjNjRlNjUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NGU2NTAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRlNjUwMCIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgZTY1MDAgc3BlY2lmaWMgbGlicmFyeQorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGM2NCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTY1MDAiLCAiLS13aXRoLWNwdT1lNjUwMCIsICIiLCBkKX0iCitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTY1MDAiLCAiLS13aXRoLWNwdT1lNjUwMCIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDMuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2gzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVkN2JhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2gzLmluYwpAQCAtMCwwICsxLDE3IEBACitERUZBVUxUVFVORSA/PSAic2gzIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3NoL2FyY2gtc2guaW5jCisKK1RVTkVWQUxJRFtzaDNdID0gIkVuYWJsZSBTSDMgb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzaDMiLCAiIC1tMyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInNoMyBzaDNlYiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDMgPSAic2gzIgorVFVORV9BUkNIX3R1bmUtc2gzID0gInNoMyIKK1RVTkVfUEtHQVJDSF90dW5lLXNoMyA9ICJzaDMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2gzID0gInNoIHNoMyIKKworVFVORV9GRUFUVVJFU190dW5lLXNoM2ViID0gInNoMyBiaWdlbmRpYW4iCitUVU5FX0FSQ0hfdHVuZS1zaDNlYiA9ICJzaDNlYiIKK1RVTkVfUEtHQVJDSF90dW5lLXNoM2ViID0gInNoM2ViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoM2ViID0gInNoZWIgc2gzZWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDQuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2g0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmUyM2I5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2g0LmluYwpAQCAtMCwwICsxLDM0IEBACitERUZBVUxUVFVORSA/PSAic2g0IgorCisjIFB1bGwgaW4gc2g0IGZvciBjb21wYXRpYmlsaXR5Li4uCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3NoL2FyY2gtc2guaW5jCisKK1RVTkVWQUxJRFtzaDRdID0gIkVuYWJsZSBTSDQgb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzaDQiLCAiIC1tNCIsICIiLCBkKX0iCisKKyMgTk9URTogSWYgeW91IHdhbnQgdG8gb3B0aW1pemUgdG8gc2g0YSwgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDRhLmluYy4KKyMgQnV0IGl0IGlzIG5vdCBjb21wYXRpYmxlIGZvciBzaDQuCisjIFRoZSBiaW5hcnkgb3B0aW1pemVkIGJ5IG00YSBkb2Vzbid0IG9wZXJhdGUgb24gc2g0LiBJdCB3b3JrcyBvbiBzaDRhIG9ubHkuCitUVU5FVkFMSURbc2g0YV0gPSAiRW5hYmxlIFNINGEgb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzaDRhIiwgIiAtbTRhIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAic2g0IHNoNGViIHNoNGEgc2g0YWViIgorVFVORV9GRUFUVVJFU190dW5lLXNoNCA9ICJzaDQiCitUVU5FX0FSQ0hfdHVuZS1zaDQgPSAic2g0IgorVFVORV9QS0dBUkNIX3R1bmUtc2g0ID0gInNoNCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDQgPSAic2ggc2g0IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0ZWIgPSAic2g0IGJpZ2VuZGlhbiIKK1RVTkVfQVJDSF90dW5lLXNoNGViID0gInNoNGViIgorVFVORV9QS0dBUkNIX3R1bmUtc2g0ZWIgPSAic2g0ZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0ZWIgPSAic2hlYiBzaDRlYiIKKworVFVORV9GRUFUVVJFU190dW5lLXNoNGEgPSAic2g0YSIKK1RVTkVfQVJDSF90dW5lLXNoNGEgPSAic2g0IgorVFVORV9QS0dBUkNIX3R1bmUtc2g0YSA9ICJzaDRhIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoNGEgPSAic2ggc2g0IHNoNGEiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDRhZWIgPSAic2g0YSBiaWdlbmRpYW4iCitUVU5FX0FSQ0hfdHVuZS1zaDRhZWIgPSAic2g0ZWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDRhZWIgPSAic2g0YWViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoNGFlYiA9ICJzaGViIHNoNGViIHNoNGFlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN0cm9uZ2FybTExMDAuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyZmJhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN0cm9uZ2FybTExMDAuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKKworVFVORVZBTElEW3N0cm9uZ2FybV0gPSAiRW5hYmxlIFN0cm9uZ2FybSAxMTAwIHNlcmllcyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzdHJvbmdhcm0iLCAiIC1tdHVuZT1zdHJvbmdhcm0xMTAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAic3Ryb25nYXJtIgorQVJNUEtHQVJDSF90dW5lLXN0cm9uZ2FybSA9ICJzdHJvbmdhcm0iCitUVU5FX0ZFQVRVUkVTX3R1bmUtc3Ryb25nYXJtID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0fSBzdHJvbmdhcm0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc3Ryb25nYXJtID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0fSBzdHJvbmdhcm0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdXBlcnNwYXJjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYWEzNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdXBlcnNwYXJjLmluYwpAQCAtMCwwICsxLDQgQEAKK1RVTkVfQVJDSCA9ICJzcGFyYyIKKworVFVORV9DQ0FSR1MgPSAiLW1jcHU9c3VwZXJzcGFyYyIKK1RVTkVfUEtHQVJDSCA9ICJzdXBlcnNwYXJjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXhzY2FsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1Y2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXhzY2FsZS5pbmMKQEAgLTAsMCArMSwxNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY1dGUiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYworCitUVU5FVkFMSURbeHNjYWxlXSA9ICJFbmFibGUgUFhBMjU1L1BYQTI2eCBYc2NhbGUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAieHNjYWxlIiwgIiAtbXR1bmU9eHNjYWxlIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAieHNjYWxlIgorQVJNUEtHQVJDSF90dW5lLXhzY2FsZSA9ICJ4c2NhbGUiCitUVU5FX0ZFQVRVUkVTX3R1bmUteHNjYWxlID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGV9IHhzY2FsZSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14c2NhbGUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0geHNjYWxlIHhzY2FsZXQgeHNjYWxlZSB4c2NhbGV0ZSIKKworQVZBSUxUVU5FUyArPSAieHNjYWxlLWJlIgorQVJNUEtHQVJDSF90dW5lLXhzY2FsZS1iZSA9ICJ4c2NhbGUiCitUVU5FX0ZFQVRVUkVTX3R1bmUteHNjYWxlLWJlID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGVifSB4c2NhbGUgYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXhzY2FsZS1iZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYn0geHNjYWxlYiB4c2NhbGV0YiB4c2NhbGVlYiB4c2NhbGV0ZWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M4YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYwpAQCAtMCwwICsxLDUyIEBACisjCisjIEJhc2UgbWFjaGluZSBzZXR0aW5ncyBmb3IgWDg2IGFyY2hpdGVjdHVyZSBCU1BzCisjCisKKyMKKyMgY29tbW9uIHNldHRpbmdzIGZvciBYODYgbWFjaGluZXMKKyMKK01BQ0hJTkVfRkVBVFVSRVMgKz0gInNjcmVlbiBrZXlib2FyZCBwY2kgdXNiaG9zdCBleHQyIGV4dDMgeDg2IFwKKyAgICAgICAgICAgICAgICAgICAgIGFjcGkgc2VyaWFsIHVzYmdhZGdldCBhbHNhIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyArPSAibGl2ZSIKKworS0VSTkVMX0lNQUdFVFlQRSA/PSAiYnpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEUgPz0gIjExNTIwMCB0dHlTMCIKKworIworIyBrZXJuZWwtcmVsYXRlZCB2YXJpYWJsZXMKKyMKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/Pz0gImxpbnV4LXlvY3RvIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz89ICIzLjAlIgorCisjCisjIFhTRVJWRVIgc3ViY29tcG9uZW50cywgdXNlZCB0byBidWlsZCB0aGUgWFNFUlZFUiB2YXJpYWJsZQorIworWFNFUlZFUl9YODZfQkFTRSA9ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICB4Zjg2LWlucHV0LW1vdXNlIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCBcCisgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICB4Zjg2LWlucHV0LXN5bmFwdGljcyBcCisgICAgICAgICAgICIKKworWFNFUlZFUl9YODZfRVhUID0gIiBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3hzZXJ2ZXIteG9yZy1leHRlbnNpb24tZ2x4JywgJycsIGQpfSBcCisgICAgICAgICAgIHhzZXJ2ZXIteG9yZy1tb2R1bGUtbGliaW50MTAgXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X0k5MTUgPSAieGY4Ni12aWRlby1pbnRlbCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLWk5MTUnLCAnJywgZCl9IFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9JOTY1ID0gInhmODYtdmlkZW8taW50ZWwgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1pOTY1JywgJycsIGQpfSBcCisgICAgICAgICAgICIKKworWFNFUlZFUl9YODZfVkVTQSA9ICJ4Zjg2LXZpZGVvLXZlc2EiCisKK1hTRVJWRVJfWDg2X0ZCREVWID0gInhmODYtdmlkZW8tZmJkZXYiCisKK1hTRVJWRVJfWDg2X01PREVTRVRUSU5HID0gInhmODYtdmlkZW8tbW9kZXNldHRpbmciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNmM0NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L1JFQURNRQpAQCAtMCwwICsxLDI0IEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIC0gSW5pdGlhbCB2ZXJzaW9uCisKK01vc3Qgb2YgdGhlIGl0ZW1zIGZvciB0aGUgWDg2IGFyY2hpdGVjdHVyZXMgYXJlIGRlZmluZWQgaW4gdGhlIHNpbmdsZQorYXJjaC14ODYgZmlsZS4KKworVGhyZWUgQUJJcyBhcmUgZGVmaW5lLCBtMzIsIG14MzIgYW5kIG02NC4KKworVGhlIGZvbGxvd2luZyBpcyB0aGUgbGlzdCBvZiBYODYgc3BlY2lmaWMgdmFyaWFibGVzOgorCitYODZBUkNIMzIgLSBUaGlzIGlzIHRoZSAzMi1iaXQgYXJjaGl0ZWN0dXJlIEdOVSBjYW5vbmljYWwgYXJjaCwgVFVORV9BUkNILgorCitYODZBUkNINjQgLSBUaGlzIGlzIHRoZSA2NC1iaXQgYXJjaGl0ZWN0dXJlIEdOVSBjYW5vbmljYWwgYXJjaCwgVFVORV9BUkNILgorCitUaGUgVFVORV9QS0dBUkNIIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKworVFVORV9QS0dBUkNIID0gJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0KKworVGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGZvciAzMi1iaXQgdGFyZ2V0cyBpcyBoaXN0b3JpY2FsIGFuZCBnZW5lcmFsbHkKK3NldCB0byB0byBtYXRjaCB0aGUgY29yZSBjb21wYXRpYmxlIHByb2Nlc3NvciB0eXBlLCBpLmUuIGkzODYuCisKK0ZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgdGhlIGFyY2hpdGVjdHVyZSBpcyBleHBlY3RlZCB0byBlbmQgaW4gJ182NCcuCisKK0lmIHRoZSB4MzIgQUJJIGlzIHVzZWQsIHRoZW4gdGhlIF82NCBpcyBmdXJ0aGVyIGV4dGVuZGVkIHdpdGggYSAnX3gzMicuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGJkZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYwpAQCAtMCwwICsxLDUxIEBACisjCisjIFg4NiBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbiAoSUEzMiwgWDg2XzY0LCBhbmQgWDMyKQorIworCitERUZBVUxUVFVORSA/PSAieDg2IgorVEFSR0VUX0ZQVSA/PSAiIgorWDg2QVJDSDMyID89ICJpNTg2IgorWDg2QVJDSDY0ID89ICJ4ODZfNjQiCisKK1RVTkVfUEtHQVJDSCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKKworIyBFTEYzMiBBQkkKK1RVTkVWQUxJRFttMzJdID0gIklBMzIgRUxGMzIgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1ttMzJdID0gIm02NCBteDMyIgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIiLCAiJHtYODZBUkNIMzJ9IiwgIiIgLGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIiLCAiIC1tMzIiLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIng4NjoiLCAiIiAsZCl9IgorCisjIHgzMiBBQkkKK1RVTkVWQUxJRFtteDMyXSA9ICJJQTMyZSAoeDg2XzY0KSBFTEYzMiBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW214MzJdID0gIm02NCBtMzIiCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiJHtYODZBUkNINjR9IiwgIiIgLGQpfSIKK0FCSUVYVEVOU0lPTiAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICJ4MzIiLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIC1teDMyIiwgIiIsIGQpfSIKK1RVTkVfTERBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi1tIGVsZjMyX3g4Nl82NCIsICIiLCBkKX0iCitUVU5FX0FTQVJHUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIteDMyIiwgIiIsIGQpfSIKKworIyBFTEY2NCBBQkkKK1RVTkVWQUxJRFttNjRdID0gIklBMzJlICh4ODZfNjQpIEVMRjY0IHN0YW5kYXJkIEFCSSIKK1RVTkVDT05GTElDVFNbbTY0XSA9ICJtMzIgbXgzMiIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTY0IiwgIiR7WDg2QVJDSDY0fSIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTY0IiwgIiAtbTY0IiwgIiIsIGQpfSIKKworIyBEZWZhdWx0IFR1bmUgY29uZmlndXJhdGlvbnMKK0FWQUlMVFVORVMgKz0gIng4NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS14ODYgPSAibTMyIgorQkFTRV9MSUJfdHVuZS14ODYgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUteDg2ID0gIng4NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYgPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS14ODZ9IgorCitBVkFJTFRVTkVTICs9ICJ4ODYtNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0ID0gIm02NCIKK0JBU0VfTElCX3R1bmUteDg2LTY0ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUteDg2LTY0ID0gIng4Nl82NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjQgPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjR9IgorCitBVkFJTFRVTkVTICs9ICJ4ODYtNjQteDMyIgorVFVORV9GRUFUVVJFU190dW5lLXg4Ni02NC14MzIgPSAibXgzMiIKK0JBU0VfTElCX3R1bmUteDg2LTY0LXgzMiA9ICJsaWJ4MzIiCitUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjQteDMyID0gIng4Nl82NF94MzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2LTY0LXgzMiA9ICIke1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NC14MzJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGFkMDNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtLmNvbmYKQEAgLTAsMCArMSwxMiBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IGFybV92ZXJzYXRpbGVfOTI2ZWpzCisjQERFU0NSSVBUSU9OOiBhcm1fdmVyc2F0aWxlXzkyNmVqcworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTI2ZWpzLmluYworI3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5QU1BMCAxMTUyMDA7dHR5QU1BMSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybTY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1OWQwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybTY0LmNvbmYKQEAgLTAsMCArMSwxMiBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IGdlbmVyaWMgYXJtdjggbWFjaGluZQorI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGEgZ2VuZXJpYyBhcm12OAorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY4LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworCitNQUNISU5FX0ZFQVRVUkVTID0gIiIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjM4NDAwO3R0eUFNQTAgMzg0MDA7aHZjMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY4MTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBtdGlfbWFsdGEzMl9iZSBNSVBTCisjQERFU0NSSVBUSU9OOiBtdGlfbWFsdGEzMl9iZQorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzNjQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2YxZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzNjQuY29uZgpAQCAtMCwwICsxLDEzIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogbXRpLW1hbHRhNjQtYmUgTUlQUzY0CisjQERFU0NSSVBUSU9OOiBtdGktbWFsdGE2NC1iZQorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWNiYmY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYKQEAgLTAsMCArMSwxMSBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHFlbXUgUFBDIEVtdWxhdG9yIHNldHVwCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYW4gUFBDIHN5c3RlbSB1bmRlciBxZW11IGVtdWxhdGlvbgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LTY0LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZkNDNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LTY0LmNvbmYKQEAgLTAsMCArMSwyOSBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IGNvbW1vbl9wYworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGEgY29tbW9uIHg4NgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK0RFRkFVTFRUVU5FID89ICJjb3JlMi02NCIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJiekltYWdlIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKworWFNFUlZFUiA9ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1zd3Jhc3QnLCAnJywgZCl9IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC12bW1vdXNlIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCBcCisgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWNpcnJ1cyBcCisgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLXZtd2FyZSIKKworTUFDSElORV9GRUFUVVJFUyArPSAieDg2IgorCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyArPSAidjg2ZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjZWE2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni5jb25mCkBAIC0wLDAgKzEsMjggQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBjb21tb25fcGMKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhIGNvbW1vbiB4ODYKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJiekltYWdlIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKworWFNFUlZFUiA9ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1zd3Jhc3QnLCAnJywgZCl9IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC12bW1vdXNlIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCBcCisgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWNpcnJ1cyBcCisgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLXZtd2FyZSIKKworTUFDSElORV9GRUFUVVJFUyArPSAieDg2IgorCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyArPSAidjg2ZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL21pZ3JhdGVfbG9jYWxjb3VudC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4NmUwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL21pZ3JhdGVfbG9jYWxjb3VudC5jb25mCkBAIC0wLDAgKzEgQEAKK0lOSEVSSVQgKz0gIm1pZ3JhdGVfbG9jYWxjb3VudCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL211bHRpbGliLmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9tdWx0aWxpYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YThlOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9tdWx0aWxpYi5jb25mCkBAIC0wLDAgKzEsMjYgQEAKKworYmFzZWxpYiA9ICIke0BkLmdldFZhcignQkFTRV9MSUJfdHVuZS0nICsgKGQuZ2V0VmFyKCdERUZBVUxUVFVORScsIFRydWUpIG9yICdJTlZBTElEJyksIFRydWUpIG9yIGQuZ2V0VmFyKCdCQVNFTElCJywgVHJ1ZSl9IgorCitNVUxUSUxJQl9WQVJJQU5UUyA9ICIke0BleHRlbmRfdmFyaWFudHMoZCwnTVVMVElMSUJTJywnbXVsdGlsaWInKX0iCitNVUxUSUxJQl9TQVZFX1ZBUk5BTUUgPSAiREVGQVVMVFRVTkUgVEFSR0VUX0FSQ0ggVEFSR0VUX1NZUyIKKworTVVMVElMSUJTID8/PSAibXVsdGlsaWI6bGliMzIiCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtNTFBSRUZJWH0ke01BQ0hJTkV9IgorU1RBR0lOR19ESVJfVEFSR0VUID0gIiR7U1RBR0lOR19ESVJ9LyR7TUxQUkVGSVh9JHtNQUNISU5FfSIKK1BLR0RBVEFfRElSID0gIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0vcGtnZGF0YSIKKworSU5IRVJJVCArPSAibXVsdGlsaWJfZ2xvYmFsIgorCitCQkNMQVNTRVhURU5EX2FwcGVuZCA9ICIgJHtNVUxUSUxJQlN9IgorCitNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMgPz0gImxpYjMyIGxpYjY0IGxpYngzMiIKKworT1BLR19BUkdTX2FwcGVuZCA9ICIgLS1mb3JjZS1tYWludGFpbmVyIC0tZm9yY2Utb3ZlcndyaXRlIgorCisjIFdoZW4gbXVsdGlsaWIgaXMgZW5hYmxlZCwgYWxsYXJjaCByZWNpcGVzIHdpbGwgYmUgaW5zdGFsbGVkIGludG8gdGhlIE1BQ0hJTkUKKyMgc3lzcm9vdCwgbm90IE1MUFJFRklYTUFDSElORS4gIFRoaXMgbWVhbnMgdGhhdCBhbnl0aGluZyB1c2luZyBwa2ctY29uZmlnIHRvCisjIGZpbmQgYW4gYWxsYXJjaCBwa2djb25maWcgZmlsZSB3aWxsIGZhaWwgYXMgdGhlIFBLR19DT05GSUdfUEFUSCBvbmx5IGxvb2tzCisjIGluc2lkZSB0aGUgbXVsdGlsaWIgc3lzcm9vdC4gIEZpeCB0aGlzIGJ5IGV4cGxpY2l0bHkgYWRkaW5nIHRoZSBNQUNISU5FJ3MKKyMgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IHBrZ2NvbmZpZyBsb2NhdGlvbiB0byBQS0dfQ09ORklHX1BBVEguCitQS0dfQ09ORklHX1BBVEggLj0gIjoke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9JHtkYXRhZGlyfS9wa2djb25maWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9wcmV4cG9ydC5jb25mIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvcHJleHBvcnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmYzYWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvcHJleHBvcnQuY29uZgpAQCAtMCwwICsxIEBACitJTkhFUklUICs9ICJwcmV4cG9ydCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3ByaW1wb3J0LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9wcmltcG9ydC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGVhMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9wcmltcG9ydC5jb25mCkBAIC0wLDAgKzEgQEAKK0lOSEVSSVQgKz0gInByaW1wb3J0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvc2FuaXR5LmNvbmYgYi95b2N0by1wb2t5L21ldGEvY29uZi9zYW5pdHkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE1NmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc2FuaXR5LmNvbmYKQEAgLTAsMCArMSwxNiBAQAorIyBTYW5pdHkgY2hlY2tzIGZvciBjb21tb24gdXNlciBtaXNjb25maWd1cmF0aW9ucworIworIyBTZWUgc2FuaXR5LmJiY2xhc3MKKyMKKyMgRXhwZXJ0IHVzZXJzIGNhbiBjb25maXJtIHRoZWlyIHNhbml0eSB3aXRoICJ0b3VjaCBjb25mL3Nhbml0eS5jb25mIgorQkJfTUlOX1ZFUlNJT04gPSAiMS4yNy4xIgorCitTQU5JVFlfQUJJRklMRSA9ICIke1RNUERJUn0vYWJpX3ZlcnNpb24iCisKK1NBTklUWV9WRVJTSU9OID89ICIxIgorTE9DQUxDT05GX1ZFUlNJT04gID89ICIxIgorTEFZRVJfQ09ORl9WRVJTSU9OID89ICI2IgorU0lURV9DT05GX1ZFUlNJT04gID89ICIxIgorCitJTkhFUklUICs9ICJzYW5pdHkiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvYmxhY2tsaXN0IGIveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkYjhmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvYmxhY2tsaXN0CkBAIC0wLDAgKzEsNiBAQAorbGlibmVvbjI3LWdudXRscworb3Blbmpkay02LWpyZS1oZWFkbGVzcworb3Blbmpkay02LWpyZS1saWIKK29wZW5qZGstNi1qcmUKK2xpYmRidXMtMS0zCitsaWJuZW9uMjctZ251dGxzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMgYi95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0N2Y3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvZmlsdGVycwpAQCAtMCwwICsxLDcgQEAKKy91c3IvbG9jYWwvbGliL3B5dGhvbjIuNgorL3Vzci9saWIvcHl0aG9uMi42CisvdXNyL2xpYi9weW1vZHVsZXMvcHl0aG9uMi42CisvdXNyL2xpYi9wZXJsLzUuMTAKKyMgd2hpY2ggaXMgcGFydCBvZiB0aGUgZGViaWFudXRpbHMgcGFja2FnZXMsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHB1dCB0aGUgZW50aXJlCisjIGRlYmlhbnV0aWxzIHBhY2thZ2UgaW4gdGhlIHdoaXRlbGlzdC4KKy91c3IvYmluL3doaWNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L3doaXRlbGlzdCBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmU5NjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L3doaXRlbGlzdApAQCAtMCwwICsxLDIzIEBACitiYXNlLWZpbGVzCitkYXNoCitsaWJhY2wxCitsaWJhdHRyMQorbGliYnoyLTEuMAorbGliYzYKK2xpYmMtYmluCitsaWJnbGliMi4wLTAKK2xpYm5jdXJzZXM1CitsaWJzZWxpbnV4MQorbGlic3FsaXRlMy0wCitsaWJzc2wwLjkuOAorbWltZS1zdXBwb3J0CitwZXJsLWJhc2UKK3B5dGhvbjIuNgorcHl0aG9uMi42LW1pbmltYWwKK3B5dGhvbi1hcHBvcnQKK3B5dGhvbi1nc3QwLjEwCitweXRob24taW1hZ2luZworcHl0aG9uLW1pbmltYWwKK3B5dGhvbi1zdXBwb3J0CitweXRob24tem9wZS5pbnRlcmZhY2UKK3psaWIxZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdCBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9ibGFja2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2YmNiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9ibGFja2xpc3QKQEAgLTAsMCArMSwyIEBACit1ZGV2Citka3BnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvZmlsdGVycyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTBmY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvZmlsdGVycwpAQCAtMCwwICsxLDEwIEBACisvdG1wCisvZXRjL2xvY2FsdGltZQorL2V0Yy9sZC5zby5jYWNoZQorL2V0Yy9sZC5zby5jb25mCisvZXRjL3Bhc3N3ZAorL2V0Yy9ncm91cAorL2V0Yy9uc3N3aXRjaC5jb25mCisvcHJvYworL2Rldi9udWxsCisvZGV2L3R0eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdCBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy93aGl0ZWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlYzJhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy93aGl0ZWxpc3QKQEAgLTAsMCArMSwxNSBAQAorYmFzaAorYnppcDIKK2NjYWNoZQorY29yZXV0aWxzCitjcHAKK2ZpbGUKK2ZpbmR1dGlscworZ2F3aworZ3JlcAoraG9zdG5hbWUKK21ha2UKK3NlZAordGFyCit1dGlsLWxpbnV4Cit6bGliMWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24gYi95b2N0by1wb2t5L21ldGEvY29uZi90b2FzdGVyY29uZi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTQyZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvY29uZi90b2FzdGVyY29uZi5qc29uCkBAIC0wLDAgKzEsMTA2IEBACit7CisgICAgImNvbmZpZyI6IHsKKyAgICAgICAgIk1BQ0hJTkUiICAgICAgOiAicWVtdXg4NiIsCisgICAgICAgICJESVNUUk8iICAgICAgIDogInBva3kiLAorICAgICAgICAiSU1BR0VfRlNUWVBFUyI6ICJleHQzIGpmZnMyIHRhci5iejIiLAorICAgICAgICAiSU1BR0VfSU5TVEFMTF9hcHBlbmQiOiAiIiwKKyAgICAgICAgIlBBQ0tBR0VfQ0xBU1NFUyI6ICJwYWNrYWdlX3JwbSIsCisgICAgICAgICJTREtNQUNISU5FIiAgIDogIng4Nl82NCIKKyAgICB9LAorICAgICJsYXllcnNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkxvY2FsIE9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAiYXBpdXJsIjogIi4uLy4uLyIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIkhFQUQiLCAibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXSwKKyAgICAgICAgICAgICJsYXllcnMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJvcGVuZW1iZWRkZWQtY29yZSIsCisgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAorICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YSIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJsYXllcmluZGV4IiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYXBpLyIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImltcG9ydGVkIiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiLCAiSEVBRCJdCisKKyAgICAgICAgfQorICAgIF0sCisgICAgImJpdGJha2UiIDogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKKyAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICIxLjI2IiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiMS4yNCIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkhFQUQiLAorICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgIH0KKyAgICBdLAorCisgICAgImRlZmF1bHRyZWxlYXNlIjogIm1hc3RlciIsCisKKyAgICAicmVsZWFzZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3BlbkVtYmVkZGVkIG1hc3RlciIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy9cIj5PcGVuRW1iZWRkZWQgbWFzdGVyPC9hPiBicmFuY2gsIHdoZXJlIGFjdGl2ZSBkZXZlbG9wbWVudCB0YWtlcyBwbGFjZS4gVGhpcyBpcyBub3QgYSBzdGFibGUgYnJhbmNoLCBzbyB5b3VyIGJ1aWxkcyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImZpZG8iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBGaWRvIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogImZpZG8iLAorICAgICAgICAgICAgImJyYW5jaCI6ICJmaWRvIiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8/aD1maWRvXCI+T3BlbkVtYmVkZGVkIFwiRmlkb1wiPC9hPiBicmFuY2giCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgRGl6enkiLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZGl6enkiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvP2g9ZGl6enlcIj5PcGVuRW1iZWRkZWQgXCJEaXp6eVwiPC9hPiBicmFuY2giCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvY2FsIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhbCBPcGVuRW1iZWRkZWQiLAorICAgICAgICAgICAgImJpdGJha2UiOiAiSEVBRCIsCisgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHZlcnNpb24gb2YgT3BlbkVtYmVkZGVkIHRoYXQgeW91IGhhdmUgY2xvbmVkIG9yIGRvd25sb2FkZWQgdG8geW91ciBjb21wdXRlci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FBTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FBTApAQCAtMCwwICsxLDUxIEBACisKK0F0dHJpYnV0aW9uIEFzc3VyYW5jZSBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDIwMDIgYnkgQVVUSE9SCitQUk9GRVNTSU9OQUwgSURFTlRJRklDQVRJT04gKiBVUkwKKyJQUk9NT1RJT05BTCBTTE9HQU4gRk9SIEFVVEhPUmBTIFBST0ZFU1NJT05BTCBQUkFDVElDRSIKKworQWxsIFJpZ2h0cyBSZXNlcnZlZAorQVRUUklCVVRJT04gQVNTVVJBTkNFIExJQ0VOU0UgKGFkYXB0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgQlNEIGxpY2Vuc2UpCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGFyZSBtZXQuCitUaGVzZSBjb25kaXRpb25zIHJlcXVpcmUgYSBtb2Rlc3QgYXR0cmlidXRpb24gdG8gPEFVVEhPUj4gKHRoZQorIkF1dGhvciIpLCB3aG8gaG9wZXMgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUKK3Rob3VzYW5kcyBvZiBkb2xsYXJzIGluIG90aGVyd2lzZSBiaWxsYWJsZSB0aW1lIGludmVzdGVkIGluIHdyaXRpbmcKK3RoaXMgYW5kIG90aGVyIGZyZWVseSBhdmFpbGFibGUsIG9wZW4tc291cmNlIHNvZnR3YXJlLgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUsIGluIHdob2xlIG9yIHBhcnQgYW5kIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uICh0aGUgIkNvZGUiKSwgbXVzdCBwcm9taW5lbnRseSBkaXNwbGF5IHRoaXMgR1BHLXNpZ25lZAordGV4dCBpbiB2ZXJpZmlhYmxlIGZvcm0uCisyLiBSZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIENvZGUgaW4gYmluYXJ5IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieQordGhpcyBHUEctc2lnbmVkIHRleHQgaW4gYW55IGRvY3VtZW50YXRpb24gYW5kLCBlYWNoIHRpbWUgdGhlIHJlc3VsdGluZworZXhlY3V0YWJsZSBwcm9ncmFtIG9yIGEgcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbiBpcyBsYXVuY2hlZCwgYQorcHJvbWluZW50IGRpc3BsYXkgKGUuZy4sIHNwbGFzaCBzY3JlZW4gb3IgYmFubmVyIHRleHQpIG9mIHRoZSBBdXRob3JgcworYXR0cmlidXRpb24gaW5mb3JtYXRpb24sIHdoaWNoIGluY2x1ZGVzOgorKGEpIE5hbWUgKCJBVVRIT1IiKSwKKyhiKSBQcm9mZXNzaW9uYWwgaWRlbnRpZmljYXRpb24gKCJQUk9GRVNTSU9OQUwgSURFTlRJRklDQVRJT04iKSwgYW5kCisoYykgVVJMICgiVVJMIikuCiszLiBOZWl0aGVyIHRoZSBuYW1lIG5vciBhbnkgdHJhZGVtYXJrIG9mIHRoZSBBdXRob3IgbWF5IGJlIHVzZWQgdG8KK2VuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCitwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCis0LiBVc2VycyBhcmUgZW50aXJlbHkgcmVzcG9uc2libGUsIHRvIHRoZSBleGNsdXNpb24gb2YgdGhlIEF1dGhvciBhbmQKK2FueSBvdGhlciBwZXJzb25zLCBmb3IgY29tcGxpYW5jZSB3aXRoICgxKSByZWd1bGF0aW9ucyBzZXQgYnkgb3duZXJzIG9yCithZG1pbmlzdHJhdG9ycyBvZiBlbXBsb3llZCBlcXVpcG1lbnQsICgyKSBsaWNlbnNpbmcgdGVybXMgb2YgYW55IG90aGVyCitzb2Z0d2FyZSwgYW5kICgzKSBsb2NhbCByZWd1bGF0aW9ucyByZWdhcmRpbmcgdXNlLCBpbmNsdWRpbmcgdGhvc2UKK3JlZ2FyZGluZyBpbXBvcnQsIGV4cG9ydCwgYW5kIHVzZSBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLgorCitUSElTIEZSRUUgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCitFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK0VGRkVDVFMgT0YgVU5BVVRIT1JJWkVEIE9SIE1BTElDSU9VUyBORVRXT1JLIEFDQ0VTUzsKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KK0lGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS1FbmQgb2YgTGljZW5zZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0xLjIgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxMzFlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTEuMgpAQCAtMCwwICsxLDEyMyBAQAorCisgIEFjYWRlbWljIEZyZWUgTGljZW5zZQorICBWZXJzaW9uIDEuMgorCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgCisodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSAKK2ZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgCitPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMS4yCisKK0dyYW50IG9mIExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAKK2NvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgKCJZb3UiKSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgCitub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlICgxKSB0byB1c2UsIGNvcHksIAorbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIAorT3JpZ2luYWwgV29yayBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLCBhbmQgKDIpIHVuZGVyIHBhdGVudCBjbGFpbXMgCitvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgCitXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIAorc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLCBzdWJqZWN0IHRvIHRoZSAKK2ZvbGxvd2luZyBjb25kaXRpb25zLgorCitBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSAKK0Rlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIAorbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgCitub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuIAorIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgCitXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgCitjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCisKK0V4Y2x1c2lvbnMgZnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSAKK25hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgCit0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyAKK2Rlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiAKK29mIHRoZSBMaWNlbnNvci4KKworV2FycmFudHkgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCAKK2luIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgdGhhdCB0aGUgT3JpZ2luYWwgCitXb3JrIGlzIGRpc3RyaWJ1dGVkIGJ5IExpY2Vuc29yIHVuZGVyIGEgdmFsaWQgY3VycmVudCBsaWNlbnNlIGZyb20gdGhlIAorY29weXJpZ2h0IG93bmVyLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyAKK3NlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiAKK0JBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgCitsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyAKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCAKK1dPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCAKK29mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCAKK3VuZGVyIHRoaXMgZGlzY2xhaW1lci4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgCit3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIAorTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCAKK2luY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgCitvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgCitsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIAorb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgCitsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCAKK2luanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyAKK3Byb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciAKK2xpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCAKK2xpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKK0xpY2Vuc2UgdG8gU291cmNlIENvZGUuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIAordGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIAorZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSAKK2FncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgCitXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIAorTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSAKK21hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSAKK3JlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgCithcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgCitwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSAKK2ZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuCisKK011dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSAKK2F1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IAorYnkgdGhpcyBMaWNlbnNlIGlmIFlvdSBmaWxlIGEgbGF3c3VpdCBpbiBhbnkgY291cnQgYWxsZWdpbmcgdGhhdCBhbnkgT1NJIAorQ2VydGlmaWVkIG9wZW4gc291cmNlIHNvZnR3YXJlIHRoYXQgaXMgbGljZW5zZWQgdW5kZXIgYW55IGxpY2Vuc2UgY29udGFpbmluZyAKK3RoaXMgIk11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbiIgY2xhdXNlIGluZnJpbmdlcyBhbnkgcGF0ZW50IAorY2xhaW1zIHRoYXQgYXJlIGVzc2VudGlhbCB0byB1c2UgdGhhdCBzb2Z0d2FyZS4KKworUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIAorcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgCitub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDIgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IAorbW9kaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gCitwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuCisKKy0tIAorRU5EIE9GIExJQ0VOU0UuIFRoZSBmb2xsb3dpbmcgaXMgaW50ZW5kZWQgdG8gZGVzY3JpYmUgdGhlIGVzc2VudGlhbCAKK2RpZmZlcmVuY2VzIGJldHdlZW4gdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSAoQUZMKSB2ZXJzaW9uIDEuMCBhbmQgb3RoZXIgCitvcGVuIHNvdXJjZSBsaWNlbnNlczoKKworVGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSBpcyBzaW1pbGFyIHRvIHRoZSBCU0QsIE1JVCwgVW9JL05DU0EgYW5kIEFwYWNoZSAKK2xpY2Vuc2VzIGluIG1hbnkgcmVzcGVjdHMgYnV0IGl0IGlzIGludGVuZGVkIHRvIHNvbHZlIGEgZmV3IHByb2JsZW1zIHdpdGggCit0aG9zZSBsaWNlbnNlcy4KKyAgICAKKyogVGhlIEFGTCBpcyB3cml0dGVuIHNvIGFzIHRvIG1ha2UgaXQgY2xlYXIgd2hhdCBzb2Z0d2FyZSBpcyBiZWluZyAKK2xpY2Vuc2VkIChieSB0aGUgaW5jbHVzaW9uIG9mIGEgc3RhdGVtZW50IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSAKK2luIHRoZSBzb2Z0d2FyZSkuIFRoaXMgd2F5LCB0aGUgbGljZW5zZSBmdW5jdGlvbnMgYmV0dGVyIHRoYW4gYSB0ZW1wbGF0ZSAKK2xpY2Vuc2UuIFRoZSBCU0QsIE1JVCBhbmQgVW9JL05DU0EgbGljZW5zZXMgYXBwbHkgdG8gdW5pZGVudGlmaWVkIHNvZnR3YXJlLgorICAgIAorKiBUaGUgQUZMIGNvbnRhaW5zIGEgY29tcGxldGUgY29weXJpZ2h0IGdyYW50IHRvIHRoZSBzb2Z0d2FyZS4gVGhlIEJTRCAKK2FuZCBBcGFjaGUgbGljZW5zZXMgYXJlIHZhZ3VlIGFuZCBpbmNvbXBsZXRlIGluIHRoYXQgcmVzcGVjdC4KKyAgICAKKyogVGhlIEFGTCBjb250YWlucyBhIGNvbXBsZXRlIHBhdGVudCBncmFudCB0byB0aGUgc29mdHdhcmUuIFRoZSBCU0QsIE1JVCwgCitVb0kvTkNTQSBhbmQgQXBhY2hlIGxpY2Vuc2VzIHJlbHkgb24gYW4gaW1wbGllZCBwYXRlbnQgbGljZW5zZSBhbmQgY29udGFpbiAKK25vIGV4cGxpY2l0IHBhdGVudCBncmFudC4KKyAgICAKKyogVGhlIEFGTCBtYWtlcyBpdCBjbGVhciB0aGF0IG5vIHRyYWRlbWFyayByaWdodHMgYXJlIGdyYW50ZWQgdG8gdGhlIAorbGljZW5zb3JgcyB0cmFkZW1hcmtzLiBUaGUgQXBhY2hlIGxpY2Vuc2UgY29udGFpbnMgc3VjaCBhIHByb3Zpc2lvbiwgYnV0IHRoZSAKK0JTRCwgTUlUIGFuZCBVb0kvTkNTQSBsaWNlbnNlcyBkbyBub3QuCisgICAgCisqIFRoZSBBRkwgaW5jbHVkZXMgdGhlIHdhcnJhbnR5IGJ5IHRoZSBsaWNlbnNvciB0aGF0IGl0IGVpdGhlciBvd25zIHRoZSAKK2NvcHlyaWdodCBvciB0aGF0IGl0IGlzIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgdW5kZXIgYSBsaWNlbnNlLiBOb25lIG9mIAordGhlIG90aGVyIGxpY2Vuc2VzIGNvbnRhaW4gdGhhdCB3YXJyYW50eS4gQWxsIG90aGVyIHdhcnJhbnRpZXMgYXJlIGRpc2NsYWltZWQsIAorYXMgaXMgdGhlIGNhc2UgZm9yIHRoZSBvdGhlciBsaWNlbnNlcy4KKworKiBUaGUgQUZMIGlzIGl0c2VsZiBjb3B5cmlnaHRlZCAod2l0aCB0aGUgcmlnaHQgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIAord2l0aG91dCBtb2RpZmljYXRpb24pLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgb3duZXIgb2YgdGhlIGNvcHlyaWdodCB0byB0aGUgCitsaWNlbnNlIHdpbGwgY29udHJvbCBjaGFuZ2VzLiBUaGUgQXBhY2hlIGxpY2Vuc2UgY29udGFpbnMgYSBjb3B5cmlnaHQgbm90aWNlLCAKK2J1dCB0aGUgQlNELCBNSVQgYW5kIFVvSS9OQ1NBIGxpY2Vuc2VzIGRvIG5vdC4gCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDI3YTI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4wCkBAIC0wLDAgKzEsNDggQEAKKworVGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZQorIHYuIDIuMAorCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazogICAKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZG8gdGhlIGZvbGxvd2luZzogCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOyAKKworYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7IAorCitjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljOyAKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kIAorCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LiAgIAorCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLiAgCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuICAgIAorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiAgTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLiAgCisKKzUpIFRoaXMgc2VjdGlvbiBpbnRlbnRpb25hbGx5IG9taXR0ZWQuICAKKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4gIAorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiAgRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiAgVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLiAgCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiAgVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4gIAorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gICAgCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCAoaSkgYWdhaW5zdCBMaWNlbnNvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSBvciAoaWkpIGFnYWluc3QgYW55IGVudGl0eSB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byB0aGUgT3JpZ2luYWwgV29yayAoYnV0IGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkuICAgIAorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuICBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gwqQgMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuICBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgCisKKzEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiAgVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIAorCisxMykgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gICAgCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4gICAKKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuICAgIAorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzIExhd3JlbmNlIEUuIFJvc2VuLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uICBUaGlzIGxpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLiAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyODRlNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjEKQEAgLTAsMCArMSw1MCBAQAorCitUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlCit2LiAyLjEKKworVGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjEKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllczsKKworYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWM7CisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLgorCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1KSBUaGlzIHNlY3Rpb24gaW50ZW50aW9uYWxseSBvbWl0dGVkLgorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCisKKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yYHMgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmIFlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAxIGhlcmVpbiwgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiAmIzE5NDsmIzE2NzsgMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMykgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2YzI1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTMuMApAQCAtMCwwICsxLDI3IEBACisKK0FjYWRlbWljIEZyZWUgTGljZW5zZSAoJiM4MjIwO0FGTCYjODIyMTspIHYuIDMuMAorVGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIG5vdGljZSBhZGphY2VudCB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CitMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMy4wCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29weXJpZ2h0LCB0byBkbyB0aGUgZm9sbG93aW5nOgorYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcywgZWl0aGVyIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBjb2xsZWN0aXZlIHdvcms7CitiKSB0byB0cmFuc2xhdGUsIGFkYXB0LCBhbHRlciwgdHJhbnNmb3JtLCBtb2RpZnksIG9yIGFycmFuZ2UgdGhlIE9yaWdpbmFsIFdvcmssIHRoZXJlYnkgY3JlYXRpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworYykgdG8gZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgdW5kZXIgYW55IGxpY2Vuc2Ugb2YgeW91ciBjaG9pY2UgdGhhdCBkb2VzIG5vdCBjb250cmFkaWN0IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgaW5jbHVkaW5nIExpY2Vuc29yJiM4MjE3O3MgcmVzZXJ2ZWQgcmlnaHRzIGFuZCByZW1lZGllcywgaW4gdGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2U7CitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLgorMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLgorNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yJiM4MjE3O3MgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yayBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDEoYykuCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55b25lIGZvciBhbnkgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4KKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiwgYXQgYW55IHRpbWUsIFlvdSBleHByZXNzbHkgYXNzZW50ZWQgdG8gdGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgY29uZGl0aW9ucyB5b3VyIHJpZ2h0cyB0byB1bmRlcnRha2UgdGhlIGFjdGl2aXRpZXMgbGlzdGVkIGluIFNlY3Rpb24gMSwgaW5jbHVkaW5nIHlvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGRvaW5nIHNvIHdpdGhvdXQgaG9ub3JpbmcgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgaXMgcHJvaGliaXRlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nICYjODIyMDtmYWlyIHVzZSYjODIyMTsgb3IgJiM4MjIwO2ZhaXIgZGVhbGluZyYjODIyMTspLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLgorMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMikgQXR0b3JuZXlzJiM4MjE3OyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMykgTWlzY2VsbGFuZW91cy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCAmIzE2OTsgMjAwNSBMYXdyZW5jZSBSb3Nlbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIGNvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcGVybWl0cyBZb3UgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZSBhcyBhcHBsaWVkIHRvIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIERlcml2YXRpdmUgV29ya3MuIEhvd2V2ZXIsIFlvdSBtYXkgbW9kaWZ5IHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZSBhbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSAiTW9kaWZpZWQgTGljZW5zZSIpIGFuZCBhcHBseSBpdCB0byBvdGhlciBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAoaSkgWW91IG1heSBub3QgaW5kaWNhdGUgaW4gYW55IHdheSB0aGF0IHlvdXIgTW9kaWZpZWQgTGljZW5zZSBpcyB0aGUgIkFjYWRlbWljIEZyZWUgTGljZW5zZSIgb3IgIkFGTCIgYW5kIHlvdSBtYXkgbm90IHVzZSB0aG9zZSBuYW1lcyBpbiB0aGUgbmFtZSBvZiB5b3VyIE1vZGlmaWVkIExpY2Vuc2U7IChpaSkgWW91IG11c3QgcmVwbGFjZSB0aGUgbm90aWNlIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGFib3ZlIHdpdGggdGhlIG5vdGljZSAiTGljZW5zZWQgdW5kZXIgPGluc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlPiIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyIG93biB0aGF0IGlzIG5vdCBjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoZSBub3RpY2UgaW4gdGhpcyBMaWNlbnNlOyBhbmQgKGlpaSkgWW91IG1heSBub3QgY2xhaW0gdGhhdCB5b3VyIG9yaWdpbmFsIHdvcmtzIGFyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkgYW5kIFlvdSBjb21wbHkgd2l0aCBpdHMgbGljZW5zZSByZXZpZXcgYW5kIGNlcnRpZmljYXRpb24gcHJvY2Vzcy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BR1BMLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUdQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhMTNlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUdQTC0zLjAKQEAgLTAsMCArMSw2NjEgQEAKKyAgICAgICAgICAgICAgICAgICAgR05VIEFGRkVSTyBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMTkgTm92ZW1iZXIgMjAwNworCisgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKK3NvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcywgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGVuc3VyZQorY29vcGVyYXRpb24gd2l0aCB0aGUgY29tbXVuaXR5IGluIHRoZSBjYXNlIG9mIG5ldHdvcmsgc2VydmVyIHNvZnR3YXJlLgorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAordG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LAorb3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCitzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKK3NvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91Cit3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldworZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgRGV2ZWxvcGVycyB0aGF0IHVzZSBvdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgcHJvdGVjdCB5b3VyIHJpZ2h0cword2l0aCB0d28gc3RlcHM6ICgxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlcgoreW91IHRoaXMgTGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlCithbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBIHNlY29uZGFyeSBiZW5lZml0IG9mIGRlZmVuZGluZyBhbGwgdXNlcnMnIGZyZWVkb20gaXMgdGhhdAoraW1wcm92ZW1lbnRzIG1hZGUgaW4gYWx0ZXJuYXRlIHZlcnNpb25zIG9mIHRoZSBwcm9ncmFtLCBpZiB0aGV5CityZWNlaXZlIHdpZGVzcHJlYWQgdXNlLCBiZWNvbWUgYXZhaWxhYmxlIGZvciBvdGhlciBkZXZlbG9wZXJzIHRvCitpbmNvcnBvcmF0ZS4gIE1hbnkgZGV2ZWxvcGVycyBvZiBmcmVlIHNvZnR3YXJlIGFyZSBoZWFydGVuZWQgYW5kCitlbmNvdXJhZ2VkIGJ5IHRoZSByZXN1bHRpbmcgY29vcGVyYXRpb24uICBIb3dldmVyLCBpbiB0aGUgY2FzZSBvZgorc29mdHdhcmUgdXNlZCBvbiBuZXR3b3JrIHNlcnZlcnMsIHRoaXMgcmVzdWx0IG1heSBmYWlsIHRvIGNvbWUgYWJvdXQuCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcGVybWl0cyBtYWtpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIGFuZAorbGV0dGluZyB0aGUgcHVibGljIGFjY2VzcyBpdCBvbiBhIHNlcnZlciB3aXRob3V0IGV2ZXIgcmVsZWFzaW5nIGl0cworc291cmNlIGNvZGUgdG8gdGhlIHB1YmxpYy4KKworICBUaGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSB0bworZW5zdXJlIHRoYXQsIGluIHN1Y2ggY2FzZXMsIHRoZSBtb2RpZmllZCBzb3VyY2UgY29kZSBiZWNvbWVzIGF2YWlsYWJsZQordG8gdGhlIGNvbW11bml0eS4gIEl0IHJlcXVpcmVzIHRoZSBvcGVyYXRvciBvZiBhIG5ldHdvcmsgc2VydmVyIHRvCitwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgbW9kaWZpZWQgdmVyc2lvbiBydW5uaW5nIHRoZXJlIHRvIHRoZQordXNlcnMgb2YgdGhhdCBzZXJ2ZXIuICBUaGVyZWZvcmUsIHB1YmxpYyB1c2Ugb2YgYSBtb2RpZmllZCB2ZXJzaW9uLCBvbgorYSBwdWJsaWNseSBhY2Nlc3NpYmxlIHNlcnZlciwgZ2l2ZXMgdGhlIHB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZQorY29kZSBvZiB0aGUgbW9kaWZpZWQgdmVyc2lvbi4KKworICBBbiBvbGRlciBsaWNlbnNlLCBjYWxsZWQgdGhlIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorcHVibGlzaGVkIGJ5IEFmZmVybywgd2FzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2ggc2ltaWxhciBnb2Fscy4gIFRoaXMgaXMKK2EgZGlmZmVyZW50IGxpY2Vuc2UsIG5vdCBhIHZlcnNpb24gb2YgdGhlIEFmZmVybyBHUEwsIGJ1dCBBZmZlcm8gaGFzCityZWxlYXNlZCBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZmZlcm8gR1BMIHdoaWNoIHBlcm1pdHMgcmVsaWNlbnNpbmcgdW5kZXIKK3RoaXMgbGljZW5zZS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworICAgICAgICAgICAgICAgICAgICAgICBURVJNUyBBTkQgQ09ORElUSU9OUworCisgIDAuIERlZmluaXRpb25zLgorCisgICJUaGlzIExpY2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgord29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKworICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAorInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgorCisgIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKK2luIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbgorZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lvbiIgb2YgdGhlCitlYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KKworICBBICJjb3ZlcmVkIHdvcmsiIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0uCisKKyAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCitwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2gKK2EgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuCisKKyAgQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMiCit0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCitmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKK3RlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlCitleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlCit3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgordGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKK21lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCisKKyAgMS4gU291cmNlIENvZGUuCisKKyAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKK2ZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UKK2Zvcm0gb2YgYSB3b3JrLgorCisgIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCitzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mCitpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAoraXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCisKKyAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKK3RoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mCitwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yCitDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKK01ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbgoraW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEEKKyJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAorKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQorKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8KK3Byb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgorCisgIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKK3RoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKK3dvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KK2NvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncworU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQorcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0Cit3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2luY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCit0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKK2xpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAorc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKK3N1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCitjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZS4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKK3NhbWUgd29yay4KKworICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4KKworICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgorY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKK2NvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQKK3Blcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCitjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKK2NvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyCityaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KKworICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90Citjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucworaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQorb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91Cit3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbworbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcworZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgorYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mCit5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCisgIENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyCit0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAKK21ha2VzIGl0IHVubmVjZXNzYXJ5LgorCisgIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKKyAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCittZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUKKzExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgorc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAorbWVhc3VyZXMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZAorY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uCitpcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCit0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yCittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncwordXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCit0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgorCisgIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKKyAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CityZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Citub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAorcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKKyAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LAorYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKworICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgorCisgIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KK3Byb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCit0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZAorICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KKworICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzCisgICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uCisgICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bworICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIuCisKKyAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcworICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcworICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3CisgICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKKyAgICByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubworICAgIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QKKyAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgorCisgICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkKKyAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKKyAgICBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91cgorICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorCisgIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKK3dvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCithbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAoraW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgorImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90Cit1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCitiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsKK2luIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyCitwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgorCisgIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgorCisgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCitvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUKK21hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luIG9uZSBvZiB0aGVzZSB3YXlzOgorCisgICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQorICAgIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzCisgICAgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0CisgICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQorICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQorICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsCisgICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubworICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcworICAgIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgorCisgICAgYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUKKyAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcworICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kCisgICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkCisgICAgd2l0aCBzdWJzZWN0aW9uIDZiLgorCisgICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubworICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCisgICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlCisgICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpCisgICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCisgICAgY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCisgICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KKworICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKKyAgICB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZworICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8KKyAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KKworICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKK2Zyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCitpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKKyAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKK3RhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksCitvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uCitpbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCitkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIKK3Byb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQordHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCitvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcgorYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0CitpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbAorY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKK3RoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LgorCisgICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywKK3Byb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbAorYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQorYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0CitzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdAorY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKK21vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCisgIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCitzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcworcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlCitVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCitmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQKK2J5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQoraWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwKK21vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMKK2JlZW4gaW5zdGFsbGVkIGluIFJPTSkuCisKKyAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQorcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCitmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcgordGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQorbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKK2FkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZAorcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KKworICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwKK2luIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKK2RvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCitzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IKK3VucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorCisgIDcuIEFkZGl0aW9uYWwgVGVybXMuCisKKyAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4KK0FkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwKK2JlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKK3RoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zCithcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5Cit1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5Cit0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgorcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCitpdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duCityZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKK2FkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywKK2ZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UKK2FkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YKK3RoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgorCisgICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlCisgICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKKworICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgorICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKKyAgICBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorCisgICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgorICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCisgICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgorCisgICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgorICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorCisgICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQorICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorCisgICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdAorICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mCisgICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgorICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24KKyAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCisKKyAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UKK3JlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKK3Jlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKK2EgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcworTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zCitvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcworbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKKyAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQorbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCithZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcKK3doZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCisKKyAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUKK2Zvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7Cit0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCisKKyAgOC4gVGVybWluYXRpb24uCisKKyAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5Citwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKK3RoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKK3BhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cgorbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpCitwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCitmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0Citob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucworcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCisgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKK21hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCisKKyAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKKyAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yCitydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCitvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgordG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKK25vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KK25vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQorY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKworICAxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKKyAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQorcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCitmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCitvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCitvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZAord29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKK3RyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcgorbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkCitnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmCit0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKKyAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCityaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQorbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCityaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCitzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisKKyAgMTEuIFBhdGVudHMuCisKKyAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcworTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKK3dvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgorCisgIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcworb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCitieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCitidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQorY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IKK3B1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAorcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIExpY2Vuc2UuCisKKyAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bworbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCisgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCithZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKyhzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8KK3N1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCitwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQorcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCisgIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsCithbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQordG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQorcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKK3RoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KK2F2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKK3BhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCitjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50CitsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKK2FjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQorY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaworaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Citjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCisgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKK2FycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKK2NvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcworcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5CitvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCit5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAord29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKKyAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCit0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcworY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCitzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCit3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcworaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAordG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKK3RoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQorcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5CitwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCitjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQorZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKK2NvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKK29yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKKyAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKworICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQorY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQorbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Cit0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKK3RoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcworTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorCisgIDEzLiBSZW1vdGUgTmV0d29yayBJbnRlcmFjdGlvbjsgVXNlIHdpdGggdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgaWYgeW91IG1vZGlmeSB0aGUKK1Byb2dyYW0sIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBtdXN0IHByb21pbmVudGx5IG9mZmVyIGFsbCB1c2VycworaW50ZXJhY3Rpbmcgd2l0aCBpdCByZW1vdGVseSB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yayAoaWYgeW91ciB2ZXJzaW9uCitzdXBwb3J0cyBzdWNoIGludGVyYWN0aW9uKSBhbiBvcHBvcnR1bml0eSB0byByZWNlaXZlIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2Ugb2YgeW91ciB2ZXJzaW9uIGJ5IHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlCitmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLCB0aHJvdWdoIHNvbWUgc3RhbmRhcmQgb3IgY3VzdG9tYXJ5CittZWFucyBvZiBmYWNpbGl0YXRpbmcgY29weWluZyBvZiBzb2Z0d2FyZS4gIFRoaXMgQ29ycmVzcG9uZGluZyBTb3VyY2UKK3NoYWxsIGluY2x1ZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbnkgd29yayBjb3ZlcmVkIGJ5IHZlcnNpb24gMworb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoYXQgaXMgaW5jb3Jwb3JhdGVkIHB1cnN1YW50IHRvIHRoZQorZm9sbG93aW5nIHBhcmFncmFwaC4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCitwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkCit1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKK2NvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLAorYnV0IHRoZSB3b3JrIHdpdGggd2hpY2ggaXQgaXMgY29tYmluZWQgd2lsbCByZW1haW4gZ292ZXJuZWQgYnkgdmVyc2lvbgorMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgorCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mCit0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMKK3dpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZQorUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQorb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKK3ZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQorR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZAorYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCit2ZXJzaW9ucyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKK3B1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIHZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UKK3RvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBQcm9ncmFtLgorCisgIExhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50CitwZXJtaXNzaW9ucy4gIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55CithdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCitsYXRlciB2ZXJzaW9uLgorCisgIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCisgIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkKK0FQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKK0hPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkKK09GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0KK0lTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRgorQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMKK1RIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQorR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFCitVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GCitEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRAorUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksCitFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMuCisKKyAgMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KKworICBJZiB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQKK2Fib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLAorcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCithbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlCitQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhCitjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKKyAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCisgIElmIHlvdXIgc29mdHdhcmUgY2FuIGludGVyYWN0IHdpdGggdXNlcnMgcmVtb3RlbHkgdGhyb3VnaCBhIGNvbXB1dGVyCituZXR3b3JrLCB5b3Ugc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRoYXQgaXQgcHJvdmlkZXMgYSB3YXkgZm9yIHVzZXJzIHRvCitnZXQgaXRzIHNvdXJjZS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIHByb2dyYW0gaXMgYSB3ZWIgYXBwbGljYXRpb24sIGl0cworaW50ZXJmYWNlIGNvdWxkIGRpc3BsYXkgYSAiU291cmNlIiBsaW5rIHRoYXQgbGVhZHMgdXNlcnMgdG8gYW4gYXJjaGl2ZQorb2YgdGhlIGNvZGUuICBUaGVyZSBhcmUgbWFueSB3YXlzIHlvdSBjb3VsZCBvZmZlciBzb3VyY2UsIGFuZCBkaWZmZXJlbnQKK3NvbHV0aW9ucyB3aWxsIGJlIGJldHRlciBmb3IgZGlmZmVyZW50IHByb2dyYW1zOyBzZWUgc2VjdGlvbiAxMyBmb3IgdGhlCitzcGVjaWZpYyByZXF1aXJlbWVudHMuCisKKyAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKK2lmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBBR1BMLCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQU5UTFItUEQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FOVExSLVBECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDJhOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FOVExSLVBECkBAIC0wLDAgKzEsMzIgQEAKKworQU5UTFIgU09GVFdBUkUgUklHSFRTCisKK0FOVExSIDE5ODktMjAwNiBEZXZlbG9wZWQgYnkgVGVyZW5jZSBQYXJyCitQYXJ0aWFsbHkgc3VwcG9ydGVkIGJ5IFVuaXZlcnNpdHkgb2YgU2FuIEZyYW5jaXNjbyAmYW1wOyBqR3VydS5jb20KKworV2UgcmVzZXJ2ZSBubyBsZWdhbCByaWdodHMgdG8gdGhlIEFOVExSLS1pdCBpcyBmdWxseSBpbiB0aGUKK3B1YmxpYyBkb21haW4uIEFuIGluZGl2aWR1YWwgb3IgY29tcGFueSBtYXkgZG8gd2hhdGV2ZXIKK3RoZXkgd2lzaCB3aXRoIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIHdpdGggQU5UTFIgb3IgdGhlCitjb2RlIGdlbmVyYXRlZCBieSBBTlRMUiwgaW5jbHVkaW5nIHRoZSBpbmNvcnBvcmF0aW9uIG9mCitBTlRMUiwgb3IgaXRzIG91dHB1dCwgaW50byBjb21tZXJpY2FsIHNvZnR3YXJlLgorCitXZSBlbmNvdXJhZ2UgdXNlcnMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aXRoIEFOVExSLiBIb3dldmVyLAord2UgZG8gYXNrIHRoYXQgY3JlZGl0IGlzIGdpdmVuIHRvIHVzIGZvciBkZXZlbG9waW5nCitBTlRMUi4gQnkgImNyZWRpdCIsIHdlIG1lYW4gdGhhdCBpZiB5b3UgdXNlIEFOVExSIG9yCitpbmNvcnBvcmF0ZSBhbnkgc291cmNlIGNvZGUgaW50byBvbmUgb2YgeW91ciBwcm9ncmFtcworKGNvbW1lcmNpYWwgcHJvZHVjdCwgcmVzZWFyY2ggcHJvamVjdCwgb3Igb3RoZXJ3aXNlKSB0aGF0Cit5b3UgYWNrbm93bGVkZ2UgdGhpcyBmYWN0IHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwKK3Jlc2VhcmNoIHJlcG9ydCwgZXRjLi4uIElmIHlvdSBsaWtlIEFOVExSIGFuZCBoYXZlCitkZXZlbG9wZWQgYSBuaWNlIHRvb2wgd2l0aCB0aGUgb3V0cHV0LCBwbGVhc2UgbWVudGlvbiB0aGF0Cit5b3UgZGV2ZWxvcGVkIGl0IHVzaW5nIEFOVExSLiBJbiBhZGRpdGlvbiwgd2UgYXNrIHRoYXQgdGhlCitoZWFkZXJzIHJlbWFpbiBpbnRhY3QgaW4gb3VyIHNvdXJjZSBjb2RlLiBBcyBsb25nIGFzIHRoZXNlCitndWlkZWxpbmVzIGFyZSBrZXB0LCB3ZSBleHBlY3QgdG8gY29udGludWUgZW5oYW5jaW5nIHRoaXMKK3N5c3RlbSBhbmQgZXhwZWN0IHRvIG1ha2Ugb3RoZXIgdG9vbHMgYXZhaWxhYmxlIGFzIHRoZXkgYXJlCitjb21wbGV0ZWQuCisKK1RoZSBwcmltYXJ5IEFOVExSIGd1eToKKworVGVyZW5jZSBQYXJyCitwYXJydEBjcy51c2ZjYS5lZHUKK3BhcnJ0QGFudGxyLm9yZworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwNWIxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBMLTEuMApAQCAtMCwwICsxLDIxOCBAQAorCitBREFQVElWRSBQVUJMSUMgTElDRU5TRQorVmVyc2lvbiAxLjAKK1RIRSBMSUNFTlNFRCBXT1JLIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIEFEQVBUSVZFIFBVQkxJQyBMSUNFTlNFICgiTElDRU5TRSIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBMSUNFTlNFRCBXT1JLIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBMSUNFTlNFIEFORCBJVFMgVEVSTVMsIFdIRVRIRVIgT1IgTk9UIFNVQ0ggUkVDSVBJRU5UIFJFQURTIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuICJMSUNFTlNFRCBXT1JLIiBBTkQgIlJFQ0lQSUVOVCIgQVJFIERFRklORUQgQkVMT1cuCisKK0lNUE9SVEFOVCBOT1RFOiBUaGlzIExpY2Vuc2UgaXMgImFkYXB0aXZlIiwgYW5kIHRoZSBnZW5lcmljIHZlcnNpb24gb3IgYW5vdGhlciB2ZXJzaW9uIG9mIGFuIEFkYXB0aXZlIFB1YmxpYyBMaWNlbnNlIHNob3VsZCBub3QgYmUgcmVsaWVkIHVwb24gdG8gZGV0ZXJtaW5lIHlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IHJlYWQgdGhlIHNwZWNpZmljIEFkYXB0aXZlIFB1YmxpYyBMaWNlbnNlIHRoYXQgeW91IHJlY2VpdmUgd2l0aCB0aGUgTGljZW5zZWQgV29yaywgYXMgY2VydGFpbiB0ZXJtcyBhcmUgZGVmaW5lZCBhdCB0aGUgb3V0c2V0IGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCitTZWUgU2VjdGlvbiAyLjIgYmVsb3csIEV4aGliaXQgQSBhdHRhY2hlZCwgYW5kIGFueSBTdXBwZmlsZS50eHQgYWNjb21wYW55aW5nIHRoaXMgTGljZW5zZSB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIGFkYXB0aXZlIGZlYXR1cmVzIGFwcGxpY2FibGUgdG8gdGhpcyBMaWNlbnNlLiBGb3IgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCAoYSkgZm9yIHNlbGVjdGVkIGNob2ljZSBvZiBsYXcgYW5kIGp1cmlzZGljdGlvbiBzZWUgUGFydCAzIG9mIEV4aGliaXQgQTsgKGIpIGZvciB0aGUgc2VsZWN0ZWQgZGVmaW5pdGlvbiBvZiBUaGlyZCBQYXJ0eSBzZWUgUGFydCA0IG9mIEV4aGliaXQgQTsgYW5kIChjKSBmb3Igc2VsZWN0ZWQgcGF0ZW50IGxpY2Vuc2luZyB0ZXJtcyAoaWYgYW55KSBzZWUgU2VjdGlvbiAyLjIgYmVsb3cgYW5kIFBhcnQgNiBvZiBFeGhpYml0IEEuCisKKzEuIERFRklOSVRJT05TLgorCisxLjEuICJDT05UUklCVVRJT04iIG1lYW5zOgorCisoYSkgSW4gdGhlIGNhc2Ugb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBJbml0aWFsIFdvcmsgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yOyBhbmQKKworKGIpIEluIHRoZSBjYXNlIG9mIGVhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciwgdGhlIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIGFuZCBkaXN0cmlidXRlZCBieSBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IuCisKKzEuMi4gIkRFU0lHTkFURUQgV0VCIFNJVEUiIG1lYW5zIHRoZSB3ZWIgc2l0ZSBoYXZpbmcgdGhlIFVSTCBpZGVudGlmaWVkIGluIFBhcnQgMSBvZiBFeGhpYml0IEEsIHdoaWNoIFVSTCBtYXkgYmUgY2hhbmdlZCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciBieSBwb3N0aW5nIG9uIHRoZSBjdXJyZW50IERlc2lnbmF0ZWQgV2ViIFNpdGUgdGhlIG5ldyBVUkwgZm9yIGF0IGxlYXN0IHNpeHR5ICg2MCkgZGF5cy4KKworMS4zLiAiRElTVFJJQlVUT1IiIG1lYW5zIGFueSBQZXJzb24gdGhhdCBkaXN0cmlidXRlcyB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mIHRvIGF0IGxlYXN0IG9uZSBUaGlyZCBQYXJ0eS4KKworMS40LiAiRUxFQ1RST05JQyBESVNUUklCVVRJT04gTUVDSEFOSVNNIiBtZWFucyBhbnkgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFWEVDVVRBQkxFIiBtZWFucyB0aGUgTGljZW5zZWQgV29yayBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuICJHT1ZFUk5JTkcgSlVSSVNESUNUSU9OIiBtZWFucyB0aGUgc3RhdGUsIHByb3ZpbmNlIG9yIG90aGVyIGxlZ2FsIGp1cmlzZGljdGlvbiBpZGVudGlmaWVkIGluIFBhcnQgMyBvZiBFeGhpYml0IEEuCisKKzEuNy4gIklOREVQRU5ERU5UIE1PRFVMRSIgbWVhbnMgYSBzZXBhcmF0ZSBtb2R1bGUgb2Ygc29mdHdhcmUgYW5kL29yIGRhdGEgdGhhdCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2Ygb3IgY29waWVkIGZyb20gdGhlIExpY2Vuc2VkIFdvcmsgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4gSW4gYWRkaXRpb24sIGEgbW9kdWxlIGRvZXMgbm90IHF1YWxpZnkgYXMgYW4gSW5kZXBlbmRlbnQgTW9kdWxlIGJ1dCBpbnN0ZWFkIGZvcm1zIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaWYgdGhlIG1vZHVsZTogKGEpIGlzIGVtYmVkZGVkIGluIHRoZSBMaWNlbnNlZCBXb3JrOyAoYikgaXMgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoZSBMaWNlbnNlZCBXb3JrIG90aGVyIHRoYW4gYnkgYSBmdW5jdGlvbiBjYWxsIG9yIGEgY2xhc3MgcmVmZXJlbmNlOyBvciAoYykgbXVzdCBiZSBpbmNsdWRlZCBvciBjb250YWluZWQsIGluIHdob2xlIG9yIGluIHBhcnQsIHdpdGhpbiBhIGZpbGUgZGlyZWN0b3J5IG9yIHN1YmRpcmVjdG9yeSBhY3R1YWxseSBjb250YWluaW5nIGZpbGVzIG1ha2luZyB1cCB0aGUgTGljZW5zZWQgV29yay4KKworMS44LiAiSU5JVElBTCBDT05UUklCVVRPUiIgbWVhbnMgdGhlIFBlcnNvbiBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIHJlcXVpcmVkIGJ5IFBhcnQgMSBvZiBFeGhpYml0IEEuCisKKzEuOS4gIklOSVRJQUwgV09SSyIgbWVhbnMgdGhlIGluaXRpYWwgU291cmNlIENvZGUsIG9iamVjdCBjb2RlIChpZiBhbnkpIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgY29tcHV0ZXIgcHJvZ3JhbSBpZGVudGlmaWVkIGluIFBhcnQgMiBvZiBFeGhpYml0IEEsIGFzIHN1Y2ggU291cmNlIENvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvci4KKworMS4xMC4gIkxBUkdFUiBXT1JLIiBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyB0aGUgTGljZW5zZWQgV29yayBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiAiTElDRU5TRUQgV09SSyIgbWVhbnMgdGhlIEluaXRpYWwgV29yayBhbmQvb3IgYW55IFN1YnNlcXVlbnQgV29yaywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjEyLiAiTElDRU5TRSBOT1RJQ0UiIGhhcyB0aGUgbWVhbmluZyBhc3NpZ25lZCBpbiBQYXJ0IDUgb2YgRXhoaWJpdCBBLgorCisxLjEzLiAiTU9ESUZJQ0FUSU9OIiBvciAiTU9ESUZJQ0FUSU9OUyIgbWVhbnMgYW55IGNoYW5nZSB0byBhbmQvb3IgYWRkaXRpb24gdG8gdGhlIExpY2Vuc2VkIFdvcmsuCisKKzEuMTQuICJQRVJTT04iIG1lYW5zIGFuIGluZGl2aWR1YWwgb3Igb3RoZXIgbGVnYWwgZW50aXR5LCBpbmNsdWRpbmcgYSBjb3Jwb3JhdGlvbiwgcGFydG5lcnNoaXAgb3Igb3RoZXIgYm9keS4KKworMS4xNS4gIlJFQ0lQSUVOVCIgbWVhbnMgYW55IFBlcnNvbiB3aG8gcmVjZWl2ZXMgb3Igb2J0YWlucyB0aGUgTGljZW5zZWQgV29yayB1bmRlciB0aGlzIExpY2Vuc2UgKGJ5IHdheSBvZiBleGFtcGxlLCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcsIGFueSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIG9yIERpc3RyaWJ1dG9yKS4KKworMS4xNi4gIlNPVVJDRSBDT0RFIiBtZWFucyB0aGUgc291cmNlIGNvZGUgZm9yIGEgY29tcHV0ZXIgcHJvZ3JhbSwgaW5jbHVkaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgYW5kIGNvbXBvbmVudHMgb2YgdGhlIGNvbXB1dGVyIHByb2dyYW0sIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIGFuZCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUuCisKKzEuMTcuICJTVUJTRVFVRU5UIENPTlRSSUJVVE9SIiBtZWFucyBhbnkgUGVyc29uIHRoYXQgbWFrZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIG1ha2luZyBvZiBhbnkgU3Vic2VxdWVudCBXb3JrIGFuZCB0aGF0IGRpc3RyaWJ1dGVzIHRoYXQgU3Vic2VxdWVudCBXb3JrIHRvIGF0IGxlYXN0IG9uZSBUaGlyZCBQYXJ0eS4KKworMS4xOC4gIlNVQlNFUVVFTlQgV09SSyIgbWVhbnMgYSB3b3JrIHRoYXQgaGFzIHJlc3VsdGVkIG9yIGFyaXNlcyBmcm9tIGNoYW5nZXMgdG8gYW5kL29yIGFkZGl0aW9ucyB0bzoKKworKGEpIHRoZSBJbml0aWFsIFdvcms7CisKKyhiKSBhbnkgb3RoZXIgU3Vic2VxdWVudCBXb3JrOyBvcgorCisoYykgdG8gYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBJbml0aWFsIFdvcmsgYW5kIGFueSBzdWNoIG90aGVyIFN1YnNlcXVlbnQgV29yazsKKword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgb3JpZ2luYXRlIGZyb20gYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLiBBIFN1YnNlcXVlbnQgV29yayB3aWxsICJvcmlnaW5hdGUiIGZyb20gYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGlmIHRoZSBTdWJzZXF1ZW50IFdvcmsgd2FzIGEgcmVzdWx0IG9mIGVmZm9ydHMgYnkgc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvcmBzIGJlaGFsZiwgc3VjaCBhcywgYSBjb250cmFjdG9yIG9yIG90aGVyIGVudGl0eSB0aGF0IGlzIGVuZ2FnZWQgYnkgb3IgdW5kZXIgdGhlIGRpcmVjdGlvbiBvZiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvcikuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgYSBTdWJzZXF1ZW50IFdvcmsgZXhwcmVzc2x5IGV4Y2x1ZGVzIGFuZCBzaGFsbCBub3QgY2FwdHVyZSB3aXRoaW4gaXRzIG1lYW5pbmcgYW55IEluZGVwZW5kZW50IE1vZHVsZS4KKworMS4xOS4gIlNVUFBMRU1FTlQgRklMRSIgbWVhbnMgYSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsgaGF2aW5nIGEgZmlsZSBuYW1lICJzdXBwZmlsZS50eHQiLgorCisxLjIwLiAiVEhJUkQgUEFSVFkiIGhhcyB0aGUgbWVhbmluZyBhc3NpZ25lZCBpbiBQYXJ0IDQgb2YgRXhoaWJpdCBBLgorCisyLiBMSUNFTlNFLgorCisyLjEuIENPUFlSSUdIVCBMSUNFTlNFIEZST00gSU5JVElBTCBBTkQgU1VCU0VRVUVOVCBDT05UUklCVVRPUlMuCisKKyhhKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgZWFjaCBSZWNpcGllbnQgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgY29weXJpZ2h0IGxpY2Vuc2UgdG86CisKKyhpKSByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgSW5pdGlhbCBXb3JrOyBhbmQKKworKGlpKSByZXByb2R1Y2UsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIGFuZCBzdWJsaWNlbnNlIGFueSBkZXJpdmF0aXZlIHdvcmtzIChpZiBhbnkpIHByZXBhcmVkIGJ5IFJlY2lwaWVudDsKKworaW4gU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSwgZWl0aGVyIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLgorCisoYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBlYWNoIFJlY2lwaWVudCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBjb3B5cmlnaHQgbGljZW5zZSB0bzoKKworKGkpIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBTdWJzZXF1ZW50IFdvcmsgb2Ygc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yOyBhbmQKKworKGlpKSByZXByb2R1Y2UsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIGFuZCBzdWJsaWNlbnNlIGFueSBkZXJpdmF0aXZlIHdvcmtzIChpZiBhbnkpIHByZXBhcmVkIGJ5IFJlY2lwaWVudDsKKworaW4gU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSwgZWl0aGVyIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLgorMi4yLiBQQVRFTlQgTElDRU5TRSBGUk9NIElOSVRJQUwgQU5EIFNVQlNFUVVFTlQgQ09OVFJJQlVUT1JTLgorCisoYSkgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGluY2x1ZGUgb3IgZ3JhbnQgYW55IHBhdGVudCBsaWNlbnNlIHdoYXRzb2V2ZXIgZnJvbSB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgb3IgYW55IERpc3RyaWJ1dG9yIHVubGVzcywgYXQgdGhlIHRpbWUgdGhlIEluaXRpYWwgV29yayBpcyBmaXJzdCBkaXN0cmlidXRlZCBvciBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UgKGFzIHRoZSBjYXNlIG1heSBiZSksIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGhhcyBzZWxlY3RlZCBwdXJzdWFudCB0byBQYXJ0IDYgb2YgRXhoaWJpdCBBIHRoZSBwYXRlbnQgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQS4gSWYgdGhpcyBpcyBub3QgZG9uZSB0aGVuIHRoZSBJbml0aWFsIFdvcmsgYW5kIGFueSBvdGhlciBTdWJzZXF1ZW50IFdvcmsgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2Ugd2l0aG91dCBhbnkgcGF0ZW50IGxpY2Vuc2UgKHRoZSAiUEFURU5UUy1FWENMVURFRCBMSUNFTlNFIikuCisKKyhiKSBIb3dldmVyLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgc3Vic2VxdWVudGx5IGRpc3RyaWJ1dGUgb3IgbWFrZSBhdmFpbGFibGUgKGFzIHRoZSBjYXNlIG1heSBiZSkgZnV0dXJlIGNvcGllcyBvZjogKDEpIHRoZSBJbml0aWFsIFdvcms7IG9yICgyKSBhbnkgTGljZW5zZWQgV29yayBkaXN0cmlidXRlZCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciB3aGljaCBpbmNsdWRlcyB0aGUgSW5pdGlhbCBXb3JrIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBhbmQvb3IgYW55IE1vZGlmaWNhdGlvbiBtYWRlIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yOyBhdmFpbGFibGUgdW5kZXIgYSBMaWNlbnNlIHdoaWNoIGluY2x1ZGVzIGEgcGF0ZW50IGxpY2Vuc2UgKHRoZSAiUEFURU5UUy1JTkNMVURFRCBMSUNFTlNFIikgYnkgc2VsZWN0aW5nIHB1cnN1YW50IHRvIFBhcnQgNiBvZiBFeGhpYml0IEEgdGhlIHBhdGVudCB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLCB3aGVuIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGRpc3RyaWJ1dGVzIG9yIG1ha2VzIGF2YWlsYWJsZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSBzdWNoIGZ1dHVyZSBjb3BpZXMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisoYykgSWYgYW55IFJlY2lwaWVudCByZWNlaXZlcyBvciBvYnRhaW5zIG9uZSBvciBtb3JlIGNvcGllcyBvZiB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBvdGhlciBwb3J0aW9uIG9mIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoZSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2UsIHRoZW4gYWxsIGxpY2Vuc2luZyBvZiBzdWNoIGNvcGllcyB1bmRlciB0aGlzIExpY2Vuc2Ugc2hhbGwgaW5jbHVkZSB0aGUgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQSBhbmQgdGhhdCBSZWNpcGllbnQgc2hhbGwgbm90IGJlIGFibGUgdG8gcmVseSB1cG9uIHRoZSBQYXRlbnRzLUV4Y2x1ZGVkIExpY2Vuc2UgZm9yIGFueSBzdWNoIGNvcGllcy4gSG93ZXZlciwgYWxsIFJlY2lwaWVudHMgdGhhdCByZWNlaXZlIG9uZSBvciBtb3JlIGNvcGllcyBvZiB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBvdGhlciBwb3J0aW9uIG9mIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSB3aGljaCBpbmNsdWRlcyB0aGUgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIHNoYWxsIGhhdmUgbm8gcGF0ZW50IGxpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHN1Y2ggY29waWVzIHJlY2VpdmVkIHVuZGVyIHRoZSBQYXRlbnRzLUV4Y2x1ZGVkIExpY2Vuc2UgYW5kIGF2YWlsYWJpbGl0eSBhbmQgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY29waWVzLCBpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUmVjaXBpZW50IHRvIHN1Y2ggY29waWVzLCBzaGFsbCBiZSB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ugd2l0aG91dCBhbnkgcGF0ZW50IGxpY2Vuc2UuCisKKyhkKSBXaGVyZSBhIFJlY2lwaWVudCB1c2VzIGluIGNvbWJpbmF0aW9uIG9yIGNvbWJpbmVzIGFueSBjb3B5IG9mIHRoZSBMaWNlbnNlZCBXb3JrIChvciBwb3J0aW9uIHRoZXJlb2YpIGxpY2Vuc2VkIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSBoYXZpbmcgYSBQYXRlbnRzLUV4Y2x1ZGVkIExpY2Vuc2Ugd2l0aCBhbnkgY29weSBvZiB0aGUgTGljZW5zZWQgV29yayAob3IgcG9ydGlvbiB0aGVyZW9mKSBsaWNlbnNlZCB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIGEgUGF0ZW50cy1JbmNsdWRlZCBMaWNlbnNlLCB0aGUgY29tYmluYXRpb24gKGFuZCBhbnkgcG9ydGlvbiB0aGVyZW9mKSBzaGFsbCwgZnJvbSB0aGUgZmlyc3QgdGltZSBzdWNoIFJlY2lwaWVudCB1c2VzLCBtYWtlcyBhdmFpbGFibGUgb3IgZGlzdHJpYnV0ZXMgdGhlIGNvbWJpbmF0aW9uIChhcyB0aGUgY2FzZSBtYXkgYmUpLCBiZSBzdWJqZWN0IHRvIG9ubHkgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGhhdmluZyB0aGUgUGF0ZW50cy1JbmNsdWRlZCBMaWNlbnNlIHdoaWNoIHNoYWxsIGluY2x1ZGUgdGhlIHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEuCisKKzIuMy4gQUNLTk9XTEVER0VNRU5UIEFORCBESVNDTEFJTUVSLgorCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgYW5kIGFncmVlcyB0aGF0IGFsdGhvdWdoIEluaXRpYWwgQ29udHJpYnV0b3IgYW5kIGVhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIHJlcHJlc2VudGF0aW9uLCB3YXJyYW50eSwgZ3VhcmFudGVlIG9yIGFzc3VyYW5jZSBpcyBwcm92aWRlZCBieSBhbnkgSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgb3IgRGlzdHJpYnV0b3IgdGhhdCB0aGUgTGljZW5zZWQgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIGVhY2ggRGlzdHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZSwgaW4gcmVsYXRpb24gdG8gdGhlIExpY2Vuc2VkIFdvcmtzLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZyBkaXNjbGFpbWVycywgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgV29yaywgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgV29yay4KKworMi40LiBSRVNFUlZBVElPTi4KKworTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIG9yIERpc3RyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEuIERJU1RSSUJVVElPTiBHRU5FUkFMTFkuCisKKyhhKSBBIFN1YnNlcXVlbnQgQ29udHJpYnV0b3Igc2hhbGwgbWFrZSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3JgcyBTdWJzZXF1ZW50IFdvcmsocykgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBmb3IgYSBwZXJpb2Qgb2YgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzLiBUaGUgYWZvcmVzYWlkIHR3ZWx2ZSAoMTIpIG1vbnRoIHBlcmlvZCBzaGFsbCBiZWdpbiB3aXRoaW4gYSByZWFzb25hYmxlIHRpbWUgYWZ0ZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBTdWJzZXF1ZW50IFdvcmsgYW5kIG5vIGxhdGVyIHRoYW4gc2l4dHkgKDYwKSBkYXlzIGFmdGVyIGZpcnN0IGRpc3RyaWJ1dGlvbiBvZiB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3JgcyBTdWJzZXF1ZW50IFdvcmsuCisKKyhiKSBBbGwgRGlzdHJpYnV0b3JzIG11c3QgZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgV29yayBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLCBhbmQgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gRXhoaWJpdCBBIGFuZCB0aGUgYWNjb21wYW55aW5nIFN1cHBsZW1lbnQgRmlsZSkgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgZGlzdHJpYnV0ZWQuIEluIHBhcnRpY3VsYXIsIHRoaXMgTGljZW5zZSBtdXN0IGJlIHByb21pbmVudGx5IGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBmaWxlIGNhbGxlZCAibGljZW5zZS50eHQuIiBJbiBhZGRpdGlvbiwgdGhlIExpY2Vuc2UgTm90aWNlIGluIFBhcnQgNSBvZiBFeGhpYml0IEEgbXVzdCBiZSBpbmNsdWRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCBTb3VyY2UgQ29kZSBmaWxlcywgYW5kIHZpZXdhYmxlIHRvIGEgdXNlciBpbiBhbnkgZXhlY3V0YWJsZSBzdWNoIHRoYXQgdGhlIExpY2Vuc2UgTm90aWNlIGlzIHJlYXNvbmFibHkgYnJvdWdodCB0byB0aGUgYXR0ZW50aW9uIG9mIGFueSBwYXJ0eSB1c2luZyB0aGUgTGljZW5zZWQgV29yay4KKworMy4yLiBFWEVDVVRBQkxFIERJU1RSSUJVVElPTlMgT0YgVEhFIExJQ0VOU0VEIFdPUksuCisKK0EgRGlzdHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpbiBFeGVjdXRhYmxlIGZvcm0gKGFuICJFWEVDVVRBQkxFIERJU1RSSUJVVElPTiIpIHRvIGFueSB0aGlyZCBwYXJ0eSwgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMiBvZiB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlciBhbmQgYWNjb21wYW5pZWQgYnkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgQU5EIHByb3ZpZGVkIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgZnVsZmlsbGVkOgorCisoYSkgVGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIFNvdXJjZSBDb2RlIGZvciB0aGUgTGljZW5zZWQgV29yayBtYWtpbmcgdXAgdGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uLCBhbmQgdGhlIFNvdXJjZSBDb2RlIG11c3QgYmUgZGlzdHJpYnV0ZWQgb24gdGhlIHNhbWUgbWVkaWEgYXMgdGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG9yIHVzaW5nIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbTsgb3IKKworKGIpIFRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhpcnR5IHNpeCAoMzYpIG1vbnRocywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciB0aGUgTGljZW5zZWQgV29yayBtYWtpbmcgdXAgdGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uLCB0byBiZSBhdmFpbGFibGUgYW5kIGRpc3RyaWJ1dGVkIHVzaW5nIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgYW5kIHN1Y2ggRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCByZW1haW4gYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdG8gYW55IHRoaXJkIHBhcnR5IHZpYSB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIChvciBhbnkgcmVwbGFjZW1lbnQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRoZSBwYXJ0aWN1bGFyIERpc3RyaWJ1dG9yIG1heSByZWFzb25hYmx5IG5lZWQgdG8gdHVybiB0byBhcyBhIHN1YnN0aXR1dGUpIGZvciBzYWlkIGF0IGxlYXN0IHRoaXJ0eSBzaXggKDM2KSBtb250aHMuCisKK0ZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIGFib3ZlLW5vdGVkIHJlcXVpcmVtZW50cyBhcHBseSB0byBhbnkgTGljZW5zZWQgV29yayBvciBwb3J0aW9uIHRoZXJlb2YgZGlzdHJpYnV0ZWQgdG8gYW55IHRoaXJkIHBhcnR5IGluIEV4ZWN1dGFibGUgZm9ybSwgd2hldGhlciBzdWNoIGRpc3RyaWJ1dGlvbiBpcyBtYWRlIGFsb25lLCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgTGFyZ2VyIFdvcmsgb3IgSW5kZXBlbmRlbnQgTW9kdWxlcywgb3IgaW4gc29tZSBvdGhlciBjb21iaW5hdGlvbi4KKworMy4zLiBTT1VSQ0UgQ09ERSBESVNUUklCVVRJT05TLgorCitXaGVuIGEgRGlzdHJpYnV0b3IgbWFrZXMgdGhlIExpY2Vuc2VkIFdvcmssIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGF2YWlsYWJsZSB0byBhbnkgUGVyc29uIGluIFNvdXJjZSBDb2RlIGZvcm0sIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlLCBzaXR1YXRlZCBzbyB0aGF0IHRoZSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGNvbnNwaWN1b3VzbHkgYnJvdWdodCB0byB0aGUgYXR0ZW50aW9uIG9mIHRoYXQgUGVyc29uLiBGb3IgZ3JlYXRlciBjbGFyaWZpY2F0aW9uLCB0aGlzIFNlY3Rpb24gMy4zIGFwcGxpZXMgdG8gYWxsIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBhbnkgU291cmNlIENvZGUgZm9ybS4gQSBEaXN0cmlidXRvciBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIHdoaWNoIGNoYXJnZSBzaGFsbCBiZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24uCisKKzMuNC4gUkVRVUlSRUQgTk9USUNFUyBJTiBTT1VSQ0UgQ09ERS4KKworRWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIG11c3QgZW5zdXJlIHRoYXQgdGhlIG5vdGljZSBzZXQgb3V0IGluIFBhcnQgNSBvZiBFeGhpYml0IEEgaXMgaW5jbHVkZWQgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBmb3IgZWFjaCBTdWJzZXF1ZW50IFdvcmsgb3JpZ2luYXRpbmcgZnJvbSB0aGF0IHBhcnRpY3VsYXIgU3Vic2VxdWVudCBDb250cmlidXRvciwgaWYgc3VjaCBub3RpY2UgaXMgbm90IGFscmVhZHkgaW5jbHVkZWQgaW4gZWFjaCBzdWNoIGZpbGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgaXMgc3RvcmVkKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuCisKKzMuNS4gTk8gRElTVFJJQlVUSU9OIFJFUVVJUkVNRU5UUyBGT1IgSU5URVJOQUxMWSBVU0VEIE1PRElGSUNBVElPTlMuCisKK05vdHdpdGhzdGFuZGluZyBTZWN0aW9ucyAzLjIsIDMuMyBhbmQgMy40LCBSZWNpcGllbnQgbWF5LCBpbnRlcm5hbGx5IHdpdGhpbiBpdHMgb3duIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbiB1c2UgdGhlIExpY2Vuc2VkIFdvcmssIGluY2x1ZGluZyB0aGUgSW5pdGlhbCBXb3JrIGFuZCBTdWJzZXF1ZW50IFdvcmtzLCBhbmQgbWFrZSBNb2RpZmljYXRpb25zIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIFJlY2lwaWVudGBzIG93biBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24gKGNvbGxlY3RpdmVseSwgIklOVEVSTkFMIFVTRSBNT0RJRklDQVRJT05TIikuIFRoZSBSZWNpcGllbnQgc2hhbGwgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIGRpc3RyaWJ1dGUsIGluIGVpdGhlciBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGZvcm0sIGFueSBzdWNoIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgUmVjaXBpZW50IGluIHRoZSBjb3Vyc2Ugb2Ygc3VjaCBpbnRlcm5hbCB1c2UsIGV4Y2VwdCB3aGVyZSByZXF1aXJlZCBiZWxvdyBpbiB0aGlzIFNlY3Rpb24gMy41LiBBbGwgSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgZGlzdHJpYnV0ZWQgdG8gYW55IFBlcnNvbiwgd2hldGhlciBvciBub3QgYSBUaGlyZCBQYXJ0eSwgc2hhbGwgYmUgZGlzdHJpYnV0ZWQgcHVyc3VhbnQgdG8gYW5kIGJlIGFjY29tcGFuaWVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSBSZWNpcGllbnQgY2hvb3NlcyB0byBkaXN0cmlidXRlIGFueSBzdWNoIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIHRvIGFueSBUaGlyZCBQYXJ0eSwgdGhlbiB0aGUgUmVjaXBpZW50IHNoYWxsIGJlIGRlZW1lZCBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGFuZCBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBkaXN0cmlidXRlZCB0byBhbnkgVGhpcmQgUGFydHkgc2hhbGwgYmUgZGVlbWVkIGEgU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgc2hhbGwgZnJvbSB0aGUgZmlyc3Qgc3VjaCBpbnN0YW5jZSBiZWNvbWUgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yayB0aGF0IG11c3QgdGhlcmVhZnRlciBiZSBkaXN0cmlidXRlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gdGhpcmQgcGFydGllcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDMuMSB0byAzLjQgaW5jbHVzaXZlLgorCiszLjYuIElOREVQRU5ERU5UIE1PRFVMRVMuCisKK1RoaXMgTGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gSW5kZXBlbmRlbnQgTW9kdWxlcyBvZiBhbnkgSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgRGlzdHJpYnV0b3Igb3IgYW55IFJlY2lwaWVudCwgYW5kIHN1Y2ggSW5kZXBlbmRlbnQgTW9kdWxlcyBtYXkgYmUgbGljZW5zZWQgb3IgbWFkZSBhdmFpbGFibGUgdW5kZXIgb25lIG9yIG1vcmUgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnRzLgorCiszLjcuIExBUkdFUiBXT1JLUy4KKworQW55IERpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCBtYXkgY3JlYXRlIG9yIGNvbnRyaWJ1dGUgdG8gYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBvbmUgb3IgbW9yZSBwcm9kdWN0cy4gSG93ZXZlciwgaW4gYW55IHN1Y2ggY2FzZSwgRGlzdHJpYnV0b3Igb3IgUmVjaXBpZW50IChhcyB0aGUgY2FzZSBtYXkgYmUpIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIExpY2Vuc2VkIFdvcmsgcG9ydGlvbiBvZiB0aGUgTGFyZ2VyIFdvcmsuCisKKzMuOC4gREVTQ1JJUFRJT04gT0YgRElTVFJJQlVURUQgTU9ESUZJQ0FUSU9OUy4KKworKGEpIEVhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciAoaW5jbHVkaW5nIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdoZXJlIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGFsc28gcXVhbGlmaWVzIGFzIGEgU3Vic2VxdWVudCBDb250cmlidXRvcikgbXVzdCBjYXVzZSBlYWNoIFN1YnNlcXVlbnQgV29yayBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIGJ5IHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvciB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcywgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUsIHRoYXQgc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIG1hZGUgaW4gdGhlIGNyZWF0aW9uIG9yIGNvbnRyaWJ1dGlvbiB0byB0aGF0IFN1YnNlcXVlbnQgV29yay4gSWYgbm8gU3VwcGxlbWVudCBGaWxlIGV4aXN0cyBvciBubyByZXF1aXJlbWVudHMgYXJlIHNldCBvdXQgaW4gUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUsIHRoZW4gdGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBmb3IgU3Vic2VxdWVudCBDb250cmlidXRvcnMgdG8gZG9jdW1lbnQgY2hhbmdlcyB0aGF0IHRoZXkgbWFrZSByZXN1bHRpbmcgaW4gU3Vic2VxdWVudCBXb3Jrcy4KKworKGIpIFRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBhdCBhbnkgdGltZSBpbnRyb2R1Y2UgcmVxdWlyZW1lbnRzIG9yIGFkZCB0byBvciBjaGFuZ2UgZWFybGllciByZXF1aXJlbWVudHMgKGluIGVhY2ggY2FzZSwgdGhlICJFQVJMSUVSIERFU0NSSVBUSU9OIFJFUVVJUkVNRU5UUyIpIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIHJlc3VsdGluZyBpbiBTdWJzZXF1ZW50IFdvcmtzIGJ5IHJldmlzaW5nIFBhcnQgMSBvZiBlYWNoIGNvcHkgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBkaXN0cmlidXRlZCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciB3aXRoIGZ1dHVyZSBjb3BpZXMgb2YgdGhlIExpY2Vuc2VkIFdvcmsgc28gdGhhdCBQYXJ0IDEgdGhlbiBjb250YWlucyBuZXcgcmVxdWlyZW1lbnRzICh0aGUgIk5FVyBERVNDUklQVElPTiBSRVFVSVJFTUVOVFMiKSBmb3IgZG9jdW1lbnRpbmcgc3VjaCBjaGFuZ2VzLgorCisoYykgQW55IFJlY2lwaWVudCByZWNlaXZpbmcgYXQgYW55IHRpbWUgYW55IGNvcHkgb2YgYW4gSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmsgdW5kZXIgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW4gZWFjaCBjYXNlLCBhbiAiRWFybGllciBMSUNFTlNFRCBDT1BZIikgaGF2aW5nIHRoZSBFYXJsaWVyIERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cyBtYXkgY2hvb3NlLCB3aXRoIHJlc3BlY3QgdG8gZWFjaCBzdWNoIEVhcmxpZXIgTGljZW5zZWQgQ29weSwgdG8gY29tcGx5IHdpdGggdGhlIEVhcmxpZXIgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzIG9yIHRoZSBOZXcgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzLiBXaGVyZSBhIFJlY2lwaWVudCBjaG9vc2VzIHRvIGNvbXBseSB3aXRoIHRoZSBOZXcgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzLCB0aGF0IFJlY2lwaWVudCB3aWxsLCB3aGVuIHRoZXJlYWZ0ZXIgZGlzdHJpYnV0aW5nIGFueSBjb3BpZXMgb2YgYW55IHN1Y2ggRWFybGllciBMaWNlbnNlZCBDb3B5LCBpbmNsdWRlIGEgU3VwcGxlbWVudCBGaWxlIGhhdmluZyBhIHNlY3Rpb24gZW50aXRsZWQgUGFydCAxIHRoYXQgY29udGFpbnMgYSBjb3B5IG9mIHRoZSBOZXcgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzLgorCisoZCkgRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgaW50ZW50IG9mIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGlzIHRvIHByb3ZpZGUgYSBtZWNoYW5pc20gKGlmIGFueSkgYnkgd2hpY2ggU3Vic2VxdWVudCBDb250cmlidXRvcnMgbXVzdCBkb2N1bWVudCBjaGFuZ2VzIHRoYXQgdGhleSBtYWtlIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHJlc3VsdGluZyBpbiBTdWJzZXF1ZW50IFdvcmtzLiBQYXJ0IDEgb2YgYW55IFN1cHBsZW1lbnQgRmlsZSBzaGFsbCBub3QgYmUgdXNlZCB0byBpbmNyZWFzZSBvciByZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gQXJ0aWNsZSAyIG9mIHRoaXMgTGljZW5zZSBvciBpbiBhbnkgb3RoZXIgd2F5IGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIGFueSBSZWNpcGllbnQsIGFuZCBzaGFsbCBhdCBubyB0aW1lIHNlcnZlIGFzIHRoZSBiYXNpcyBmb3IgdGVybWluYXRpbmcgdGhlIExpY2Vuc2UuIEZ1cnRoZXIsIGEgUmVjaXBpZW50IGNhbiBiZSByZXF1aXJlZCB0byBjb3JyZWN0IGFuZCBjaGFuZ2UgaXRzIGRvY3VtZW50YXRpb24gcHJvY2VkdXJlcyB0byBjb21wbHkgd2l0aCBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgYnV0IGNhbm5vdCBiZSBwZW5hbGlzZWQgd2l0aCBkYW1hZ2VzLiBQYXJ0IDEgb2YgYW55IFN1cHBsZW1lbnQgRmlsZSBpcyBvbmx5IGJpbmRpbmcgb24gZWFjaCBSZWNpcGllbnQgb2YgYW55IExpY2Vuc2VkIFdvcmsgdG8gdGhlIGV4dGVudCBQYXJ0IDEgc2V0cyBvdXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgZG9jdW1lbnRpbmcgY2hhbmdlcyB0byB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmsuCisKKyhlKSBBbiBleGFtcGxlIG9mIGEgc2V0IG9mIHJlcXVpcmVtZW50cyBmb3IgZG9jdW1lbnRpbmcgY2hhbmdlcyBhbmQgY29udHJpYnV0aW9ucyBtYWRlIGJ5IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaXMgc2V0IG91dCBpbiBQYXJ0IDcgb2YgRXhoaWJpdCBBIG9mIHRoaXMgTGljZW5zZS4gUGFydCA3IGlzIGEgc2FtcGxlIG9ubHkgYW5kIGlzIG5vdCBiaW5kaW5nIG9uIFJlY2lwaWVudHMsIHVubGVzcyAoc3ViamVjdCB0byB0aGUgZWFybGllciBwYXJhZ3JhcGhzIG9mIHRoaXMgU2VjdGlvbiAzLjgpIHRob3NlIGFyZSB0aGUgcmVxdWlyZW1lbnRzIHRoYXQgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaW5jbHVkZXMgaW4gUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgd2l0aCB0aGUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCiszLjkuIFVTRSBPRiBESVNUUklCVVRPUiBOQU1FLgorCitUaGUgbmFtZSBvZiBhIERpc3RyaWJ1dG9yIG1heSBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIgRGlzdHJpYnV0b3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHRoZSBMaWNlbnNlZCBXb3JrIG9yIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgTGljZW5zZWQgV29yaywgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzMuMTAuIExJTUlURUQgUkVDT0dOSVRJT04gT0YgSU5JVElBTCBDT05UUklCVVRPUi4KKworKGEpIEFzIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBpbiB0aGUgaG9wZSB0aGF0IGl0cyBwcm9tb3Rpb25hbCB2YWx1ZSBtYXkgaGVscCBqdXN0aWZ5IHRoZSB0aW1lLCBtb25leSBhbmQgZWZmb3J0IGludmVzdGVkIGluIHdyaXRpbmcgdGhlIEluaXRpYWwgV29yaywgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IGluY2x1ZGUgaW4gUGFydCAyIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgYSByZXF1aXJlbWVudCB0aGF0IGVhY2ggdGltZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gcmVzdWx0aW5nIGZyb20gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLCBvciBhIHByb2dyYW0gZGVwZW5kZW50IHRoZXJlb24sIGlzIGxhdW5jaGVkIG9yIHJ1biwgYSBwcm9taW5lbnQgZGlzcGxheSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvcmBzIGF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIG11c3Qgb2NjdXIgKHRoZSAiQVRUUklCVVRJT04gSU5GT1JNQVRJT04iKS4gVGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG11c3QgYmUgaW5jbHVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIFNvdXJjZSBDb2RlIGZpbGUuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHNwZWNpZnkgaW4gdGhlIFN1cHBsZW1lbnQgRmlsZSB0aGF0IHRoZSBhYm92ZSBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudCBvbmx5IGFwcGxpZXMgdG8gYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHJlc3VsdGluZyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yaywgYnV0IG5vdCBhIHByb2dyYW0gZGVwZW5kZW50IHRoZXJlb24uIFRoZSBpbnRlbnQgaXMgdG8gcHJvdmlkZSBmb3IgcmVhc29uYWJseSBtb2Rlc3QgYXR0cmlidXRpb24sIHRoZXJlZm9yZSB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgbm90IHJlcXVpcmUgUmVjaXBpZW50cyB0byBkaXNwbGF5LCBhdCBhbnkgdGltZSwgbW9yZSB0aGFuIHRoZSBmb2xsb3dpbmcgQXR0cmlidXRpb24gSW5mb3JtYXRpb246IChhKSBhIGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yOyAoYikgYSB3b3JkIG9yIG9uZSBwaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOyAoYykgb25lIGRpZ2l0YWwgaW1hZ2Ugb3IgZ3JhcGhpYyBwcm92aWRlZCB3aXRoIHRoZSBJbml0aWFsIFdvcms7IGFuZCAoZCkgYSBVUkwgKGNvbGxlY3RpdmVseSwgdGhlICJBVFRSSUJVVElPTiBMSU1JVFMiKS4KKworKGIpIElmIG5vIFN1cHBsZW1lbnQgRmlsZSBleGlzdHMsIG9yIG5vIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIHNldCBvdXQgaW4gUGFydCAyIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUsIHRoZW4gdGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBmb3IgUmVjaXBpZW50cyB0byBkaXNwbGF5IGFueSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvci4KKworKGMpIEVhY2ggUmVjaXBpZW50IGFja25vd2xlZGdlcyB0aGF0IGFsbCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIGFuZC9vciB0cmFkZSBuYW1lcyBjb250YWluZWQgd2l0aGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsgYXJlIHRoZSBleGNsdXNpdmUgcHJvcGVydHkgb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgb3IgdW5kZXIgY2lyY3Vtc3RhbmNlcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGxhdywgb3IgYXMgZXhwcmVzc2x5IHNldCBvdXQgaW4gdGhpcyBMaWNlbnNlLgorCiszLjExLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIGFueSBkZXNjcmlwdGlvbiBvciBhdHRyaWJ1dGlvbiBwcm92aXNpb25zIGNvbnRhaW5lZCB3aXRoaW4gYSBTdXBwbGVtZW50IEZpbGUgbWF5IG9ubHkgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBuYXR1cmUgb2YgdGhlIGRlc2NyaXB0aW9uIG9yIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50cywgYXMgdGhlIGNhc2UgbWF5IGJlLiBBbnkgcHJvdmlzaW9uIGluIGEgU3VwcGxlbWVudCBGaWxlIHRoYXQgb3RoZXJ3aXNlIHB1cnBvcnRzIHRvIG1vZGlmeSwgdmFyeSwgbnVsbGlmeSBvciBhbWVuZCBhbnkgcmlnaHQsIG9ibGlnYXRpb24gb3IgcmVwcmVzZW50YXRpb24gY29udGFpbmVkIGhlcmVpbiBzaGFsbCBiZSBkZWVtZWQgdm9pZCB0byB0aGF0IGV4dGVudCwgYW5kIHNoYWxsIGJlIG9mIG5vIGZvcmNlIG9yIGVmZmVjdC4KKworNC4gQ09NTUVSQ0lBTCBVU0UgQU5EIElOREVNTklUWS4KKworNC4xLiBDT01NRVJDSUFMIFNFUlZJQ0VTLgorCitBIFJlY2lwaWVudCAoIkNPTU1FUkNJQUwgUkVDSVBJRU5UIikgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIChjb2xsZWN0aXZlbHksICJTRVJWSUNFUyIpIHRvIG9uZSBvciBtb3JlIG90aGVyIFJlY2lwaWVudHMgb3IgRGlzdHJpYnV0b3JzLiBIb3dldmVyLCBzdWNoIENvbW1lcmNpYWwgUmVjaXBpZW50IG1heSBkbyBzbyBvbmx5IG9uIHRoYXQgQ29tbWVyY2lhbCBSZWNpcGllbnRgcyBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgRGlzdHJpYnV0b3Igb3IgUmVjaXBpZW50LCBhbmQgQ29tbWVyY2lhbCBSZWNpcGllbnQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbihzKSBpcy9hcmUgb2ZmZXJlZCBieSBDb21tZXJjaWFsIFJlY2lwaWVudCBhbG9uZS4gQXQgbm8gdGltZSBtYXkgQ29tbWVyY2lhbCBSZWNpcGllbnQgdXNlIGFueSBTZXJ2aWNlcyB0byBkZW55IGFueSBwYXJ0eSB0aGUgTGljZW5zZWQgV29yayBpbiBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGZvcm0gd2hlbiBzbyByZXF1aXJlZCB1bmRlciBhbnkgb2YgdGhlIG90aGVyIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGlzIFNlY3Rpb24gNC4xIGRvZXMgbm90IGRpbWluaXNoIGFueSBvZiB0aGUgb3RoZXIgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBvYmxpZ2F0aW9uIG9mIHRoZSBDb21tZXJjaWFsIFJlY2lwaWVudCBhcyBhIERpc3RyaWJ1dG9yLCB3aGVuIGRpc3RyaWJ1dGluZyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtLCB0byBtYWtlIHN1Y2ggZGlzdHJpYnV0aW9uIHJveWFsdHktZnJlZSAoc3ViamVjdCB0byB0aGUgcmlnaHQgdG8gY2hhcmdlIGEgZmVlIG9mIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBkaXN0cmlidXRpb24gKGFzIHRoZSBjYXNlIG1heSBiZSkpLgorCis0LjIuIElOREVNTklUWS4KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIExpY2Vuc2VkIFdvcmssIHRoZSBEaXN0cmlidXRvciB3aG8gaW5jbHVkZXMgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgRGlzdHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgRGlzdHJpYnV0b3IgaW5jbHVkZXMgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgb3Igb2ZmZXJzIGFueSBTZXJ2aWNlcywgc3VjaCBEaXN0cmlidXRvciAoIkNPTU1FUkNJQUwgRElTVFJJQlVUT1IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIERpc3RyaWJ1dG9yIG9yIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKGluIGVhY2ggY2FzZSBhbiAiSU5ERU1OSUZJRUQgUEFSVFkiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxPU1NFUyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBQYXJ0eSB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBvciBpbiBjb25uZWN0aW9uIHdpdGggYW55IFNlcnZpY2VzLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgUGFydHkgbXVzdDogKGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW07IGFuZCAoYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvLW9wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgUGFydHkgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworNS4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKzUuMS4gTkVXIFZFUlNJT05TLgorCitUaGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzUuMi4gRUZGRUNUIE9GIE5FVyBWRVJTSU9OUy4KKworT25jZSB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mIGhhcyBiZWVuIHB1Ymxpc2hlZCBieSBJbml0aWFsIENvbnRyaWJ1dG9yIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBSZWNpcGllbnQgbWF5IGNob29zZSB0byBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gSG93ZXZlciwgaWYgYSBSZWNpcGllbnQgY2hvb3NlcyB0byB1c2UgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCB0aGVuIGZyb20gdGhlIGRhdGUgb2YgbWFraW5nIHRoaXMgY2hvaWNlLCB0aGUgUmVjaXBpZW50IG11c3QgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoYXQgc3Vic2VxdWVudCB2ZXJzaW9uIHdpdGggcmVzcGVjdCB0byBhbGwgZnVydGhlciByZXByb2R1Y3Rpb24sIHByZXBhcmF0aW9uIG9mIGRlcml2YXRpdmUgd29ya3MsIHB1YmxpYyBkaXNwbGF5IG9mLCBwdWJsaWMgcGVyZm9ybWFuY2Ugb2YsIGRpc3RyaWJ1dGlvbiBhbmQgc3VibGljZW5zaW5nIGJ5IHRoZSBSZWNpcGllbnQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byB0aGUgTGljZW5zZWQgV29yaworCis2LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCis2LjEuIEdFTkVSQUwgRElTQ0xBSU1FUi4KKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBUSEUgTElDRU5TRUQgV09SSyBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBBTlkgUkVQUkVTRU5UQVRJT04sIFdBUlJBTlRZLCBHVUFSQU5URUUsIEFTU1VSQU5DRSBPUiBDT05ESVRJT04gT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUNFTlNFRCBXT1JLIElTIFdJVEggUkVDSVBJRU5ULiBTSE9VTEQgQU5ZIExJQ0VOU0VEIFdPUksgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBSRUNJUElFTlQgKE5PVCBUSEUgSU5JVElBTCBDT05UUklCVVRPUiBPUiBBTlkgU1VCU0VRVUVOVCBDT05UUklCVVRPUikgQVNTVU1FUyBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgQ0xBVVNFIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBMSUNFTlNFRCBXT1JLIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIExJQ0VOU0UgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBUSElTIERJU0NMQUlNRVIuCisKKzYuMi4gUkVTUE9OU0lCSUxJVFkgT0YgUkVDSVBJRU5UUy4KKworRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFdvcmsgYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNy4gVEVSTUlOQVRJT04uCisKKzcuMS4gVGhpcyBMaWNlbnNlIHNoYWxsIGNvbnRpbnVlIHVudGlsIHRlcm1pbmF0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBleHByZXNzIHRlcm1zIGhlcmVpbi4KKworNy4yLiBSZWNpcGllbnQgbWF5IGNob29zZSB0byB0ZXJtaW5hdGUgdGhpcyBMaWNlbnNlIGF1dG9tYXRpY2FsbHkgYXQgYW55IHRpbWUuCisKKzcuMy4gVGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgdG8gYSBwYXJ0aWN1bGFyIFJlY2lwaWVudCwgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBzdWNoIFJlY2lwaWVudCBpcyBpbiBtYXRlcmlhbCBicmVhY2ggb2YgYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWxzIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHNpeHR5ICg2MCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBXaXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcsIGFueSBtYXRlcmlhbCBicmVhY2ggYnkgc3VjaCBSZWNpcGllbnQgb2YgYW55IHRlcm0gb2YgYW55IG90aGVyIExpY2Vuc2UgdW5kZXIgd2hpY2ggc3VjaCBSZWNpcGllbnQgaXMgZ3JhbnRlZCBhbnkgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHNoYWxsIGNvbnN0aXR1dGUgYSBtYXRlcmlhbCBicmVhY2ggb2YgdGhpcyBMaWNlbnNlLgorCis3LjQuIFVwb24gdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGJ5IG9yIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50IGZvciBhbnkgcmVhc29uLCBhbGwgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIGFuZCB1bmRlciBhbnkgb3RoZXIgTGljZW5zZSB0byB0aGF0IFJlY2lwaWVudCBzaGFsbCB0ZXJtaW5hdGUuIEhvd2V2ZXIsIGFsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgV29yayB3aGljaCB3ZXJlIHByZXZpb3VzbHkgcHJvcGVybHkgZ3JhbnRlZCBieSBzdWNoIFJlY2lwaWVudCB1bmRlciBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbiBlYWNoIGNhc2UsIGFuICJPdGhlciBMaWNlbnNlIiBhbmQgaW4gcGx1cmFsLCAiT3RoZXIgTGljZW5zZXMiKSBzaGFsbCBzdXJ2aXZlIGFueSBzdWNoIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyB1bmRlciBzdWNoIE90aGVyIExpY2Vuc2VzIGFzIHNldCBvdXQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBTZWN0aW9ucyAyLCAzLCA0LCA1LCA2LCA3IGFuZCA4LCBtdXRhdGlzIG11dGFuZGlzLCBmb3Igc28gbG9uZyBhcyB0aGUgcmVzcGVjdGl2ZSBzdWJsaWNlbnNlZXMgKGkuZS4gb3RoZXIgUmVjaXBpZW50cykgcmVtYWluIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHVuZGVyIHdoaWNoIHN1Y2ggc3VibGljZW5zZWVzIHJlY2VpdmVkIHJpZ2h0cyB0byB0aGUgTGljZW5zZWQgV29yay4gQW55IHRlcm1pbmF0aW9uIG9mIHN1Y2ggT3RoZXIgTGljZW5zZXMgc2hhbGwgYmUgcHVyc3VhbnQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBTZWN0aW9uIDcsIG11dGF0aXMgbXV0YW5kaXMuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzcuNS4gVXBvbiBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGJ5IG9yIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50LCBTZWN0aW9ucyA0LjEsIDQuMiwgNi4xLCA2LjIsIDcuNCwgNy41LCA4LjEsIGFuZCA4LjIsIHRvZ2V0aGVyIHdpdGggYWxsIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIG5lY2Vzc2FyeSBmb3IgdGhlIGludGVycHJldGF0aW9uIGFuZCBlbmZvcmNlbWVudCBvZiBzYW1lLCBzaGFsbCBleHByZXNzbHkgc3Vydml2ZSBzdWNoIHRlcm1pbmF0aW9uLgorCis4LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworOC4xLiBJTiBOTyBFVkVOVCBTSEFMTCBBTlkgT0YgSU5JVElBTCBDT05UUklCVVRPUiwgSVRTIFNVQlNJRElBUklFUywgT1IgQUZGSUxJQVRFUywgT1IgQU5ZIE9GIElUUyBPUiBUSEVJUiBSRVNQRUNUSVZFIE9GRklDRVJTLCBESVJFQ1RPUlMsIEVNUExPWUVFUywgQU5EL09SIEFHRU5UUyAoQVMgVEhFIENBU0UgTUFZIEJFKSwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNUIERBTUFHRVMsIElORElSRUNUIERBTUFHRVMsIFBVTklUSVZFIERBTUFHRVMsIElOQ0lERU5UQUwgREFNQUdFUywgU1BFQ0lBTCBEQU1BR0VTLCBFWEVNUExBUlkgREFNQUdFUywgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBPVEhFUiBEQU1BR0VTIFdIQVRTT0VWRVIgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgT1IgQU5ZIE9USEVSIExPU1MgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBVU0UsIElOQUJJTElUWSBUTyBVU0UsIFVOQVVUSE9SSVpFRCBVU0UsIFBFUkZPUk1BTkNFLCBPUiBOT04tUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFdPUksgT1IgQU5ZIFBBUlQgVEhFUkVPRiBPUiBUSEUgUFJPVklTSU9OIE9GIE9SIEZBSUxVUkUgVE8gUFJPVklERSBTVVBQT1JUIFNFUlZJQ0VTLCBPUiBUSEFUIFJFU1VMVCBGUk9NIEVSUk9SUywgREVGRUNUUywgT01JU1NJT05TLCBERUxBWVMgSU4gT1BFUkFUSU9OIE9SIFRSQU5TTUlTU0lPTiwgT1IgQU5ZIE9USEVSIEZBSUxVUkUgT0YgUEVSRk9STUFOQ0UpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgSU4gUkVMQVRJT04gVE8gT1IgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFdPUksgT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFRISVMgQ0xBVVNFIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBMSUNFTlNFRCBXT1JLIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIExJQ0VOU0UgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBUSEUgTElNSVRBVElPTlMgU0VUIEZPUlRIIElOIFRISVMgU0VDVElPTiA4LjEuCisKKzguMi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBFQUNIIFJFQ0lQSUVOVCBTSEFMTCBOT1QgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFdPUksgT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uCisKKzkuIEdPVkVSTklORyBMQVcgQU5EIExFR0FMIEFDVElPTi4KKworOS4xLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gYXNzaWduZWQgaW4gUGFydCAzIG9mIEV4aGliaXQgQSwgd2l0aG91dCByZWdhcmQgdG8gaXRzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLiBObyBwYXJ0eSBtYXkgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBMaWNlbnNlIG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgdGhlIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyAoaWYgYW55KSB0byBhIGp1cnkgdHJpYWwgaW4gYW55IGxpdGlnYXRpb24gYXJpc2luZyB1bmRlciB0aGlzIExpY2Vuc2UuIE5vdGUgdGhhdCBpZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBpcyBub3QgYXNzaWduZWQgaW4gUGFydCAzIG9mIEV4aGliaXQgQSwgdGhlbiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBzaGFsbCBiZSB0aGUgU3RhdGUgb2YgTmV3IFlvcmsuCisKKzkuMi4gVGhlIGNvdXJ0cyBvZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBzaGFsbCBoYXZlIGp1cmlzZGljdGlvbiwgYnV0IG5vdCBleGNsdXNpdmUganVyaXNkaWN0aW9uLCB0byBlbnRlcnRhaW4gYW5kIGRldGVybWluZSBhbGwgZGlzcHV0ZXMgYW5kIGNsYWltcywgd2hldGhlciBmb3Igc3BlY2lmaWMgcGVyZm9ybWFuY2UsIGluanVuY3Rpb24sIGRhbWFnZXMgb3Igb3RoZXJ3aXNlLCAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ZjgyMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjAKQEAgLTAsMCArMSwzNzIgQEAKKworQVBQTEUgUFVCTElDIFNPVVJDRSBMSUNFTlNFCitWZXJzaW9uIDEuMCAtIE1hcmNoIDE2LCAxOTk5CisKK1BsZWFzZSByZWFkIHRoaXMgTGljZW5zZSBjYXJlZnVsbHkgYmVmb3JlIGRvd25sb2FkaW5nIHRoaXMgc29mdHdhcmUuCitCeSBkb3dubG9hZGluZyBhbmQgdXNpbmcgdGhpcyBzb2Z0d2FyZSwgeW91IGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZCBieQordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWdyZWUgdG8gdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UsIHBsZWFzZSBkbyBub3QgZG93bmxvYWQgb3IgdXNlIHRoZSBzb2Z0d2FyZS4KKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIHdoaWNoIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBwdWJsaWNseSBhbm5vdW5jZXMgYXMKK3N1YmplY3QgdG8gdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgYW5kIHdoaWNoIGNvbnRhaW5zIGEKK25vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsCitDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljCitTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMCAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpLCBhcyBpdCBtYXkKK2JlIHJldmlzZWQgZnJvbSB0aW1lIHRvIHRpbWUgYnkgQXBwbGUgKCJMaWNlbnNlIikuIEFzIHVzZWQgaW4gdGhpcworTGljZW5zZToKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUKK2dyYW50b3Igb2YgcmlnaHRzLCAoaSkgcGF0ZW50cyBvciBwYXRlbnQgYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdworb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB3aG9zZQorY2xhaW1zIGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkKK3RvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZQorT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UKK2FyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBwYXRlbnRzIGFuZCBwYXRlbnQgYXBwbGljYXRpb25zIHRoYXQKK2FyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkKK3dob3NlIGNsYWltcyBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lCitvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKzEuMiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlCitjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueQorcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjMgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyCit0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCksIGFuZCBpbmNsdWRlcword2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mCitDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UsCithcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQKK0NvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuNCAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMKK3RoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjUgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlCit0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIENvdmVyZWQgQ29kZS4gV2hlbiBjb2RlIGlzCityZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8KK29yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsKK2FuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0KK3N0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKzEuNiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrCithcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nCit0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcworbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbgorZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaAord29yay4KKworMS43ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsCittb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLAorc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlCisob2JqZWN0IGNvZGUpLgorCisxLjggIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZworcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIKK2luY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyCitjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3QKK29yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCit3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2YKK3N1Y2ggZW50aXR5LgorCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuIFN1YmplY3QgdG8gdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24KK3RoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YKK0FwcGxlYHMgQXBwbGljYWJsZSBQYXRlbnRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbAorQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFlvdSBtYXkgdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSwgd2l0aCBvcgord2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kCitkZXZlbG9wbWVudCwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQKK2FuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhcgoraW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZQordGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7CisKKyhiKSBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mCitDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlcgorb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlcgorU2VjdGlvbiA2OyBhbmQKKworKGMpIGNvbXBsZXRlbHkgYW5kIGFjY3VyYXRlbHkgZG9jdW1lbnQgYWxsIE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgaGF2ZQorbWFkZSBhbmQgdGhlIGRhdGUgb2YgZWFjaCBzdWNoIE1vZGlmaWNhdGlvbiwgZGVzaWduYXRlIHRoZSB2ZXJzaW9uIG9mCit0aGUgT3JpZ2luYWwgQ29kZSB5b3UgdXNlZCwgcHJvbWluZW50bHkgaW5jbHVkZSBhIGZpbGUgY2Fycnlpbmcgc3VjaAoraW5mb3JtYXRpb24gd2l0aCB0aGUgTW9kaWZpY2F0aW9ucywgYW5kIGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluCitFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgc3VjaCBNb2RpZmljYXRpb25zLgorCisyLjIgWW91IG1heSBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2gKK2luc3RhbmNlOgorCisoYSkgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZQorU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsKKworKGIpIG1ha2UgYWxsIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgaW4gU291cmNlCitDb2RlIGZvcm0gdmlhIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uIChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldAorZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBhbmQgYW55IGFkZGl0aW9uYWwgdGVybXMgWW91IG1heSBjaG9vc2UgdG8KK29mZmVyIHVuZGVyIFNlY3Rpb24gNi4gWW91IG11c3QgY29udGludWUgdG8gbWFrZSB0aGUgU291cmNlIENvZGUgb2YKK1lvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUKK0NvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsCitEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyOworCisoYykgbXVzdCBub3RpZnkgQXBwbGUgYW5kIG90aGVyIHRoaXJkIHBhcnRpZXMgb2YgaG93IHRvIG9idGFpbiBZb3VyCitEZXBsb3llZCBNb2RpZmljYXRpb25zIGJ5IGZpbGxpbmcgb3V0IGFuZCBzdWJtaXR0aW5nIHRoZSByZXF1aXJlZAoraW5mb3JtYXRpb24gZm91bmQgYXQKK2h0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZS9tb2RpZmljYXRpb25zLmh0bWw7IGFuZAorCisoZCkgaWYgeW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LAoraW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzCithdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQKK3doZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUKK2xpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50cyBhbmQgb3RoZXIKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwKK3JlcHJvZHVjZSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZQorc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIEFwcGxlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjI7CithbmQKKworKGIpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLAord29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91cgorQXBwbGljYWJsZSBQYXRlbnRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yCitjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGV4ZWN1dGUsIGNvbXBpbGUsIGRpc3BsYXksCitwZXJmb3JtLCBtb2RpZnkgb3IgaGF2ZSBtb2RpZmllZCAoZm9yIEFwcGxlIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzKSwKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgWW91ciBNb2RpZmljYXRpb25zLCBpbiBhbnkgZm9ybSwgdGhyb3VnaAorbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCis0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQKK0NvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gZWFjaCBzdWNoCitpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZQorZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbgorU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkCitieSBBcHBsZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZQorYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBBcHBsZSB3aGljaCBBcHBsZSBtYXkgZ3JhbnQgaW4gaXRzCitzb2xlIGRpc2NyZXRpb24uCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlCitmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vcgorb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4KKygiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZAorQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91cgorc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUuIFlvdSBtdXN0IG9idGFpbiB0aGUKK3JlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUKK2hhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0CitBcHBsZSBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIEFwcGxlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZQorZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuCitwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5Citjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQKK3ZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gTm8gb25lIG90aGVyIHRoYW4gQXBwbGUKK2hhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkCit1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBPcmlnaW5hbCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yCitpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlCitPcmlnaW5hbCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3MKK29mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91CitleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvcgorYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIE9SSUdJTkFMCitDT0RFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQKK09GIEFOWSBLSU5EIEFORCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSAoRk9SIFRIRSBQVVJQT1NFUyBPRgorU0VDVElPTlMgOCBBTkQgOSwgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgQVJFIENPTExFQ1RJVkVMWQorUkVGRVJSRUQgVE8gQVMgIkFQUExFIikgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUgorQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SCitTQVRJU0ZBQ1RPUlkgUVVBTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBBUFBMRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQKK1RIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgTUVFVCBZT1VSCitSRVFVSVJFTUVOVFMsIE9SIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIEJFCitVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgT1JJR0lOQUwgQ09ERQorV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4KK0JZIEFQUExFIE9SIEFOIEFQUExFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgU0hBTEwgQ1JFQVRFIEEKK1dBUlJBTlRZIE9SIElOIEFOWSBXQVkgSU5DUkVBU0UgVEhFIFNDT1BFIE9GIFRISVMgV0FSUkFOVFkuIFlvdQorYWNrbm93bGVkZ2UgdGhhdCB0aGUgT3JpZ2luYWwgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUKK29wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24KK3N5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZQorb2YgdGhlIE9yaWdpbmFsIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUKK3BoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis5LiBMaWFiaWxpdHkuCisKKzkuMSBJbmZyaW5nZW1lbnQuIElmIGFueSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBiZWNvbWVzIHRoZSBzdWJqZWN0IG9mCithIGNsYWltIG9mIGluZnJpbmdlbWVudCAoIkFmZmVjdGVkIE9yaWdpbmFsIENvZGUiKSwgQXBwbGUgbWF5LCBhdAoraXRzIHNvbGUgZGlzY3JldGlvbiBhbmQgb3B0aW9uOiAoYSkgYXR0ZW1wdCB0byBwcm9jdXJlIHRoZSByaWdodHMKK25lY2Vzc2FyeSBmb3IgWW91IHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlOyAoYikKK21vZGlmeSB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlcgoraW5mcmluZ2luZzsgb3IgKGMpIHRlcm1pbmF0ZSBZb3VyIHJpZ2h0cyB0byB1c2UgdGhlIEFmZmVjdGVkCitPcmlnaW5hbCBDb2RlLCBlZmZlY3RpdmUgaW1tZWRpYXRlbHkgdXBvbiBBcHBsZWBzIHBvc3Rpbmcgb2YgYQorbm90aWNlIHRvIHN1Y2ggZWZmZWN0IG9uIHRoZSBBcHBsZSB3ZWIgc2l0ZSB0aGF0IGlzIHVzZWQgZm9yCitpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzkuMiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBTSEFMTCBBUFBMRSBCRQorTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IKK0lOQUJJTElUWSBUTyBVU0UgVEhFIE9SSUdJTkFMIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIKK1VOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLAorUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBBUFBMRSBIQVMgQkVFTiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YKK0VTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlYHMgdG90YWwKK2xpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlCithbW91bnQgb2YgZmlmdHkgZG9sbGFycyAoJDUwLjAwKS4KKworMTAuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIkFwcGxlIiwgIkFwcGxlIENvbXB1dGVyIiwgIk1hYyBPUyBYIiwKKyJNYWMgT1MgWCBTZXJ2ZXIiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZwordG8gQXBwbGUgKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBhbmQgbm8gQXBwbGUgTWFya3MgbWF5IGJlCit1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUKK290aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMKK3dpdGggQXBwbGVgcyB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUKK3Bvc3RlZCBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9sZWdhbC9ndWlkZWxpbmVzZm9yM3JkcGFydGllcy5odG1sLgorCisxMS4gT3duZXJzaGlwLiBBcHBsZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8KK3RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZgorQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbAorbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIEFwcGxlIG1heSwgYXQgaXRzCitzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB1bmRlcgordGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcworTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiBBcHBsZWBzCitkZXZlbG9wbWVudCwgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZAorZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFRlcm1pbmF0aW9uLgorCisxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbAordGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoCithbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7IChiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YKK3RoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9ucyA5LjEgYW5kL29yIDEzLjYoYik7IG9yIChjKQorYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZQordGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudAorYWdhaW5zdCBBcHBsZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0bworaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgaW4gdGhlCitjYXNlIG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb24gOS4xLCBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mCit0aGUgQ292ZXJlZCBDb2RlIG9yIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgKGluIHRoZSBjYXNlIG9mCit0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9uIDkuMSkgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yCitjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4KK3Byb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24KK29mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluCitpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwKK2luY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZAorMTMuIE5laXRoZXIgcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gdGhlIG90aGVyIGZvciBjb21wZW5zYXRpb24sCitpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcKK3RoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YKK2VpdGhlciBwYXJ0eS4KKworMTMuIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgRXhwb3J0IExhdyBBc3N1cmFuY2VzLiBZb3UgbWF5IG5vdCB1c2Ugb3Igb3RoZXJ3aXNlIGV4cG9ydCBvcgorcmUtZXhwb3J0IHRoZSBPcmlnaW5hbCBDb2RlIGV4Y2VwdCBhcyBhdXRob3JpemVkIGJ5IFVuaXRlZCBTdGF0ZXMKK2xhdyBhbmQgdGhlIGxhd3Mgb2YgdGhlIGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgT3JpZ2luYWwgQ29kZSB3YXMKK29idGFpbmVkLiBJbiBwYXJ0aWN1bGFyLCBidXQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgT3JpZ2luYWwgQ29kZQorbWF5IG5vdCBiZSBleHBvcnRlZCBvciByZS1leHBvcnRlZCAoYSkgaW50byAob3IgdG8gYSBuYXRpb25hbCBvcgorcmVzaWRlbnQgb2YpIGFueSBVLlMuIGVtYmFyZ29lZCBjb3VudHJ5IG9yIChiKSB0byBhbnlvbmUgb24gdGhlCitVLlMuIFRyZWFzdXJ5IERlcGFydG1lbnRgcyBsaXN0IG9mIFNwZWNpYWxseSBEZXNpZ25hdGVkIE5hdGlvbmFscworb3IgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZWBzIFRhYmxlIG9mIERlbmlhbCBPcmRlcnMuIEJ5Cit1c2luZyB0aGUgT3JpZ2luYWwgQ29kZSwgWW91IHJlcHJlc2VudCBhbmQgd2FycmFudCB0aGF0IFlvdSBhcmUgbm90Citsb2NhdGVkIGluLCB1bmRlciBjb250cm9sIG9mLCBvciBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mIGFueSBzdWNoCitjb3VudHJ5IG9yIG9uIGFueSBzdWNoIGxpc3QuCisKKzEzLjIgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcworZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhCityaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5Citwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeQorY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbgorYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlcgorU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIKKzI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMKKyhSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZQorRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlCitDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4zIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzCitjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mCitsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIFlvdSBhbmQgQXBwbGUsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50Cit0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvcgorb3RoZXJ3aXNlLgorCisxMy40IEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpcgorQXBwbGVgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvcgoraXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybQordGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsCitNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5CitkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNSBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBBcHBsZSB0byBlbmZvcmNlIGFueSBwcm92aXNpb24KK29mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50CitvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaAorcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdAordGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy42IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50CitqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24KK3RoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUKK2VuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlCitlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZgordGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikKK05vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IKK3Jlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoCitTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YKK3Rob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdQorbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kCitkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjcgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24KK2JldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbgordGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIGFuZCBZb3UgYW5kIEFwcGxlIGhlcmVieQorY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZQorYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzCitMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KK0NvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkKK2V4Y2x1ZGVkLgorCisxMy44IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUKK2VudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1VuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mCitDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuCisKK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcKK2NsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQKK3RoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMKK3BhcnRpZXMgb250IGV4aWdlIHF1ZSBsZSBwcmVzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzCitjb25uZXhlcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTkgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIFJpZ2h0cworUmVzZXJ2ZWQuIFRoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mCitPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSBgTGljZW5zZWApLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCitleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUKK0xpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZwordGhpcyBmaWxlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZQorZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSCitFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5ULiBQbGVhc2Ugc2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNWU0NmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4xCkBAIC0wLDAgKzEsMzc0IEBACisKK0FQUExFIFBVQkxJQyBTT1VSQ0UgTElDRU5TRQorVmVyc2lvbiAxLjEgLSBBcHJpbCAxOSwxOTk5CisKK1BsZWFzZSByZWFkIHRoaXMgTGljZW5zZSBjYXJlZnVsbHkgYmVmb3JlIGRvd25sb2FkaW5nIHRoaXMgc29mdHdhcmUuCitCeSBkb3dubG9hZGluZyBhbmQgdXNpbmcgdGhpcyBzb2Z0d2FyZSwgeW91IGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZAorYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBkbyBub3Qgb3IgY2Fubm90IGFncmVlIHRvIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgd2hpY2ggQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIHB1YmxpY2x5IGFubm91bmNlcyBhcworc3ViamVjdCB0byB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBhbmQgd2hpY2ggY29udGFpbnMgYQorbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwKK0NvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4xIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZiksIGFzIGl0IG1heQorYmUgcmV2aXNlZCBmcm9tIHRpbWUgdG8gdGltZSBieSBBcHBsZSAoIkxpY2Vuc2UiKS4gIEFzIHVzZWQgaW4gdGhpcworTGljZW5zZToKKworMS4xICJBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIiBtZWFucyBvbmx5IHRob3NlIHNwZWNpZmljIHBvcnRpb25zIG9mCitPcmlnaW5hbCBDb2RlIHRoYXQgYWxsZWdlZGx5IGluZnJpbmdlIHVwb24gYW55IHBhcnR5YHMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3IgYXJlIG90aGVyd2lzZSB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mCitpbmZyaW5nZW1lbnQuCisKKzEuMiAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgQXBwbGUgaXMKK3RoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIKK2FjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QKK21hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZQord2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZgorcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwKK293bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIKK01vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4zICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUKK2NvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55CityZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNCAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIKK3RoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSwgYW5kIGluY2x1ZGVzCit3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YKK0NvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSwKK2FzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZAorQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworMS41ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucwordGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UKK3RvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgQ292ZXJlZCBDb2RlLiAgV2hlbiBjb2RlIGlzCityZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8KK29yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsKK2FuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0KK3N0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMKK29yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4KK2V4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2gKK3dvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQKK29yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjggIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsCitzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUKKyhvYmplY3QgY29kZSkuCisKKzEuOSAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIKK2luY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyCitjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3QKK29yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCit3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2YKK3N1Y2ggZW50aXR5LgorCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuICBTdWJqZWN0IHRvIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uCit0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLSBleGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZgorQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsCitDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yCit3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQKK2RldmVsb3BtZW50LCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodAorYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyCitpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlCit0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsKKworKGIpIGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YKK0NvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyCitvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyCitTZWN0aW9uIDY7IGFuZAorCisoYykgY29tcGxldGVseSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudCBhbGwgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBoYXZlCittYWRlIGFuZCB0aGUgZGF0ZSBvZiBlYWNoIHN1Y2ggTW9kaWZpY2F0aW9uLCBkZXNpZ25hdGUgdGhlIHZlcnNpb24gb2YKK3RoZSBPcmlnaW5hbCBDb2RlIHlvdSB1c2VkLCBwcm9taW5lbnRseSBpbmNsdWRlIGEgZmlsZSBjYXJyeWluZyBzdWNoCitpbmZvcm1hdGlvbiB3aXRoIHRoZSBNb2RpZmljYXRpb25zLCBhbmQgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4KK0V4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBzdWNoIE1vZGlmaWNhdGlvbnMuCisKKzIuMiBZb3UgbWF5IERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaAorICBpbnN0YW5jZToKKworKGEpIHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUKK1NvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7CisKKyhiKSBtYWtlIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIGluIFNvdXJjZQorQ29kZSBmb3JtIHZpYSBlbGVjdHJvbmljIGRpc3RyaWJ1dGlvbiAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQKK2ZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgYW5kIGFueSBhZGRpdGlvbmFsIHRlcm1zIFlvdSBtYXkgY2hvb3NlIHRvCitvZmZlciB1bmRlciBTZWN0aW9uIDYuICBZb3UgbXVzdCBjb250aW51ZSB0byBtYWtlIHRoZSBTb3VyY2UgQ29kZSBvZgorWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZQorQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwKK0RlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXI7CisKKyhjKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBZb3UsCitpbmZvcm0gb3RoZXJzIG9mIGhvdyB0byBvYnRhaW4gdGhvc2UgTW9kaWZpY2F0aW9ucyBieSBmaWxsaW5nIG91dCBhbmQKK3N1Ym1pdHRpbmcgdGhlIGluZm9ybWF0aW9uIGZvdW5kIGF0CitodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UvbW9kaWZpY2F0aW9ucy5odG1sLCBpZiBhdmFpbGFibGU7CithbmQKKworKGQpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwKK2luY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkCitkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcworYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kCit3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4KKworMy4gWW91ciBHcmFudHMuICBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZQorbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOgorCisoYSkgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlcgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLAorcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlCitzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsKK2FuZAorCisoYikgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgaXRzIHN1YnNpZGlhcmllcyBhIG5vbi1leGNsdXNpdmUsCit3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyCitBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQKK29yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZXhlY3V0ZSwgY29tcGlsZSwgZGlzcGxheSwKK3BlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtLCB0aHJvdWdoCittdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKzQuIExhcmdlciBXb3Jrcy4gIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQKK0NvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gIEluIGVhY2ggc3VjaAoraW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUKK2Z1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLgorCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluCitTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkKK0FwcGxlIGhlcmVpbi4gIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZQorYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBBcHBsZSB3aGljaCBBcHBsZSBtYXkgZ3JhbnQgaW4gaXRzCitzb2xlIGRpc2NyZXRpb24uCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuICBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZQorZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IKK290aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluCisoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQKK0NvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZQorcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlLiBZb3UgbXVzdCBvYnRhaW4gdGhlCityZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlCitoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdAorQXBwbGUgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiAgQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBFYWNoIHZlcnNpb24gd2lsbCBiZQorZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbgorcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZQordG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlCitzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuICBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvCittb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcworTGljZW5zZS4KKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gIFRoZSBPcmlnaW5hbCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yCitpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gIFRoZQorT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mCitkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuICBZb3UgZXhwcmVzc2x5CithY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yIGFueSBwb3J0aW9uCit0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiAgVEhFIE9SSUdJTkFMIENPREUgSVMKK1BST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQKK0FORCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSAoRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORAorOSwgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgQVJFIENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUworIkFQUExFIikgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTCitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIFNBVElTRkFDVE9SWSBRVUFMSVRZIEFORAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWQorUklHSFRTLiAgQVBQTEUgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRQorT1JJR0lOQUwgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIE9SIFRIQVQgVEhFIE9QRVJBVElPTiBPRgorVEhFIE9SSUdJTkFMIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLSBGUkVFLCBPUiBUSEFUCitERUZFQ1RTIElOIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiAgTk8gT1JBTCBPUiBXUklUVEVOCitJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgQVBQTEUgT1IgQU4gQVBQTEUgQVVUSE9SSVpFRAorUkVQUkVTRU5UQVRJVkUgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkgT1IgSU4gQU5ZIFdBWSBJTkNSRUFTRSBUSEUKK1NDT1BFIE9GIFRISVMgV0FSUkFOVFkuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgT3JpZ2luYWwgQ29kZSBpcyBub3QKK2ludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0CituYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4KK3doaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwKK3BlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis5LiBMaWFiaWxpdHkuCisKKzkuMSBJbmZyaW5nZW1lbnQuICBJZiBhbnkgcG9ydGlvbiBvZiwgb3IgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRlZCBieSwKK3RoZSBPcmlnaW5hbCBDb2RlIGJlY29tZXMgdGhlIHN1YmplY3Qgb2YgYSBjbGFpbSBvZiBpbmZyaW5nZW1lbnQsCitBcHBsZSBtYXksIGF0IGl0cyBvcHRpb246IChhKSBhdHRlbXB0IHRvIHByb2N1cmUgdGhlIHJpZ2h0cyBuZWNlc3NhcnkKK2ZvciBBcHBsZSBhbmQgWW91IHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlOyAoYikKK21vZGlmeSB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlciBpbmZyaW5naW5nOworb3IgKGMpIHN1c3BlbmQgWW91ciByaWdodHMgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgdW50aWwgYSBmaW5hbCBkZXRlcm1pbmF0aW9uIG9mCit0aGUgY2xhaW0gaXMgbWFkZSBieSBhIGNvdXJ0IG9yIGdvdmVybm1lbnRhbCBhZG1pbmlzdHJhdGl2ZSBhZ2VuY3kgb2YKK2NvbXBldGVudCBqdXJpc2RpY3Rpb24gYW5kIEFwcGxlIGxpZnRzIHRoZSBzdXNwZW5zaW9uIGFzIHNldCBmb3J0aAorYmVsb3cuICBTdWNoIHN1c3BlbnNpb24gb2YgcmlnaHRzIHdpbGwgYmUgZWZmZWN0aXZlIGltbWVkaWF0ZWx5IHVwb24KK0FwcGxlYHMgcG9zdGluZyBvZiBhIG5vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUgdGhhdAoraXMgdXNlZCBmb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgVXBvbiBzdWNoIGZpbmFsCitkZXRlcm1pbmF0aW9uIGJlaW5nIG1hZGUsIGlmIEFwcGxlIGlzIGxlZ2FsbHkgYWJsZSwgd2l0aG91dCB0aGUKK3BheW1lbnQgb2YgYSBmZWUgb3Igcm95YWx0eSwgdG8gcmVzdW1lIHVzZSwgcmVwcm9kdWN0aW9uLAorbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwKK0NvZGUsIEFwcGxlIHdpbGwgbGlmdCB0aGUgc3VzcGVuc2lvbiBvZiByaWdodHMgdG8gdGhlIEFmZmVjdGVkCitPcmlnaW5hbCBDb2RlIGJ5IHBvc3RpbmcgYSBub3RpY2UgdG8gc3VjaCBlZmZlY3Qgb24gdGhlIEFwcGxlIHdlYiBzaXRlCit0aGF0IGlzIHVzZWQgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIElmIEFwcGxlIHN1c3BlbmRzCitZb3VyIHJpZ2h0cyB0byBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbAorYmUgY29uc3RydWVkIHRvIHJlc3RyaWN0IFlvdSwgYXQgWW91ciBvcHRpb24gYW5kIHN1YmplY3QgdG8gYXBwbGljYWJsZQorbGF3LCBmcm9tIHJlcGxhY2luZyB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSB3aXRoIG5vbi1pbmZyaW5naW5nCitjb2RlIG9yIGluZGVwZW5kZW50bHkgbmVnb3RpYXRpbmcgZm9yIG5lY2Vzc2FyeSByaWdodHMgZnJvbSBzdWNoIHRoaXJkCitwYXJ0eS4KKworOS4yIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBTSEFMTCBBUFBMRSBCRQorTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCitBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPCitVU0UgVEhFIE9SSUdJTkFMIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkKK09GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkKK09SIE9USEVSV0lTRSwgRVZFTiBJRiBBUFBMRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YKK0FOWSBSRU1FRFkuICBJbiBubyBldmVudCBzaGFsbCBBcHBsZWBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbAorZGFtYWdlcyB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZmlmdHkgZG9sbGFycworKCQ1MC4wMCkuCisKKzEwLiBUcmFkZW1hcmtzLiAgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZQordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAiQXBwbGUiLCAiQXBwbGUgQ29tcHV0ZXIiLCAiTWFjIE9TIFgiLCAiTWFjCitPUyBYIFNlcnZlciIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIEFwcGxlCisoY29sbGVjdGl2ZWx5ICJBcHBsZSBNYXJrcyIpIGFuZCBubyBBcHBsZSBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCitvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzCitwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcyB3aXRoIEFwcGxlYHMgdGhpcmQKK3BhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQKK2h0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuCisKKzExLiBPd25lcnNoaXAuICBBcHBsZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8KK3RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBBcHBsZQorKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUKK2F1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBBcHBsZSBtYXksIGF0IGl0cyBzb2xlCitkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvcgorbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4gIEFwcGxlYHMgZGV2ZWxvcG1lbnQsIHVzZSwKK3JlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkCitDb2RlIHdpbGwgbm90IGJlIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gVGVybWluYXRpb24uCisKKzEyLjEgVGVybWluYXRpb24uICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbAorICAgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoCithbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7IChiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YKK3RoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yIChjKSBhdXRvbWF0aWNhbGx5Cit3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMKK0xpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IEFwcGxlLgorCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0bworaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLAorc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwKK2NvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1Byb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZQordGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQKK3RvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuICBOZWl0aGVyIHBhcnR5IHdpbGwgYmUKK2xpYWJsZSB0byB0aGUgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQKK3NvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cwordGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0bworYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBlaXRoZXIgcGFydHkuCisKKzEzLiAgTWlzY2VsbGFuZW91cy4KKworMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcworZGVmaW5lZCBpbiBGQVIgMi4xMDEuICBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMKK2luIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0bwordGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbAorbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoCitGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yCitEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0KK0NvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlcgorU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuICBBY2NvcmRpbmdseSwgYWxsIFUuUy4KK0dvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0Citmb3J0aCBoZXJlaW4uCisKKzEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuICBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzCitjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mCitsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIFlvdSBhbmQgQXBwbGUsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvCit0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvcgorb3RoZXJ3aXNlLgorCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIKK0FwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IKK2l0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlCitzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLAorTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heQorZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uICBGYWlsdXJlIGJ5IEFwcGxlIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbgorb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YKK3RoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcwordGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlcgord2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy41IFNldmVyYWJpbGl0eS4gIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudAoranVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsCit0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvCit0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cworYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwKK2NvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywKK2lmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yCitzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUKK2VuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwKK2ltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZgordGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIKK3Bvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uICBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24KK2JldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUKK05vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIGFuZCBZb3UgYW5kIEFwcGxlIGhlcmVieSBjb25zZW50IHRvCit0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbAorY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZQorYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUKK0ludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUKK2VudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QKK21hdHRlciBoZXJlb2YuICBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZgorQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nCitjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkCit0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzCitwYXJ0aWVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cworY29ubmV4ZXMgc29pZW50IHJlZGlnZXMgZW4gYW5nbGFpcy4KKworRVhISUJJVCBBLgorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBSaWdodHMKK1Jlc2VydmVkLiAgVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YKK09yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljCitTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCitleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlCitMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZSBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcKK3RoaXMgZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUKK2Rpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLSBJTkZSSU5HRU1FTlQuICBQbGVhc2Ugc2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjIgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTM1MzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4yCkBAIC0wLDAgKzEsMTA1IEBACisKK0FwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXIuIDEuMgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGFuZCB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsIENvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjIgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSAoIkxpY2Vuc2UiKS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgQXBwbGUgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gQXBwbGUgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKzEuMiAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4zICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworMS41ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS42ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4gV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS43ICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBBcHBsZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuOCAiUGVyc29uYWwgVXNlIiBtZWFucyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvciBoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbGBzIHVzZSBvZiBDb3ZlcmVkIENvZGUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLCBpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiAoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuCisKKzEuOSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLgorCisxLjEwICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZiBBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCBhbmQvb3IgUGVyc29uYWwgVXNlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kCisKKyhiKSBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mIENvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDYuCisKKzIuMiBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsKKworKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsKKworKGMpIFlvdSBtdXN0IG1ha2UgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBZb3Ugc2hvdWxkIHByZWZlcmFibHkgZGlzdHJpYnV0ZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSk7IGFuZAorCisoZCkgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LCBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuCisKKzIuMyBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIEFwcGxlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEFwcGxlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOgorCisoYSkgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIEFwcGxlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjI7IGFuZAorCisoYikgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgaXRzIHN1YnNpZGlhcmllcyBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgb3IgaGF2ZSBtb2RpZmllZCAoZm9yIEFwcGxlIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzKSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtLCB0aHJvdWdoIG11bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbi4KKworNC4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgQXBwbGUgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBBcHBsZSB3aGljaCBBcHBsZSBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgQXBwbGUgb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIEFwcGxlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gTm8gb25lIG90aGVyIHRoYW4gQXBwbGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgIkFQUExFIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDkpIEFORCBBTEwgQ09OVFJJQlVUT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIEFQUExFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgQVBQTEUsIEFOIEFQUExFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBBUFBMRSBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZmlmdHkgZG9sbGFycyAoJDUwLjAwKS4KKworMTAuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAiQXBwbGUiLCAiQXBwbGUgQ29tcHV0ZXIiLCAiTWFjIE9TIFgiLCAiTWFjIE9TIFggU2VydmVyIiwgIlF1aWNrVGltZSIsICJRdWlja1RpbWUgU3RyZWFtaW5nIFNlcnZlciIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIEFwcGxlIChjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyayBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIE5vIEFwcGxlIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcyB3aXRoIEFwcGxlYHMgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9sZWdhbC9ndWlkZWxpbmVzZm9yM3JkcGFydGllcy5odG1sLgorCisxMS4gT3duZXJzaGlwLiBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBBcHBsZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIEFwcGxlICgiQXBwbGUgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLgorCisxMi4gVGVybWluYXRpb24uCisKKzEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsKKworKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvcgorCisoYykgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgQXBwbGUuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisxMy4gTWlzY2VsbGFuZW91cy4KKworMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmdZb3UsIEFwcGxlIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3Igb3RoZXJ3aXNlLgorCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTMuNSBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgQXBwbGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIGFuZCBZb3UgYW5kIEFwcGxlIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZiBDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuCisKK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgb250IGV4aWcmIzIzMzsgcXVlIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgciYjMjMzO2RpZyYjMjMzO3MgZW4gYW5nbGFpcy4KKworRVhISUJJVCBBLgorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjIgKHRoZSBgTGljZW5zZWApLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZSBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyZThiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0yLjAKQEAgLTAsMCArMSwxMDIgQEAKKworQVBQTEUgUFVCTElDIFNPVVJDRSBMSUNFTlNFCitWZXJzaW9uIDIuMCAtICBBdWd1c3QgNiwgMjAwMworCitQbGVhc2UgcmVhZCB0aGlzIExpY2Vuc2UgY2FyZWZ1bGx5IGJlZm9yZSBkb3dubG9hZGluZyB0aGlzIHNvZnR3YXJlLiAgQnkgZG93bmxvYWRpbmcgb3IgdXNpbmcgdGhpcyBzb2Z0d2FyZSwgeW91IGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgdGhlIHNvZnR3YXJlLgorCitBcHBsZSBOb3RlOiAgSW4gSmFudWFyeSAyMDA3LCBBcHBsZSBjaGFuZ2VkIGl0cyBjb3Jwb3JhdGUgbmFtZSBmcm9tICJBcHBsZSBDb21wdXRlciwgSW5jLiIgdG8gIkFwcGxlIEluYy4iICBUaGlzIGNoYW5nZSBoYXMgYmVlbiByZWZsZWN0ZWQgYmVsb3cgYW5kIGNvcHlyaWdodCB5ZWFycyB1cGRhdGVkLCBidXQgbm8gb3RoZXIgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgQVBTTCAyLjAuCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBBcHBsZSBJbmMuICgiQXBwbGUiKSBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwgQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDIuMCAoIkxpY2Vuc2UiKS4gIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOgorCisxLjEgICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46ICAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgQXBwbGUgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gQXBwbGUgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKzEuMiAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4zICAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40ICJFeHRlcm5hbGx5IERlcGxveSIgbWVhbnM6IChhKSB0byBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdTsgYW5kL29yIChiKSB0byB1c2UgQ292ZXJlZCBDb2RlLCBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmssIGluIGFueSB3YXkgdG8gcHJvdmlkZSBhIHNlcnZpY2UsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGVsaXZlcnkgb2YgY29udGVudCwgdGhyb3VnaCBlbGVjdHJvbmljIGNvbW11bmljYXRpb24gd2l0aCBhIGNsaWVudCBvdGhlciB0aGFuIFlvdS4KKworMS41ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS42ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4gIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6ICAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLiAKKworMS43ICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBBcHBsZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UKKworMS44ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKzEuOSAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIEFwcGxlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgVW5tb2RpZmllZCBDb2RlLiAgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgaW50ZXJuYWxseSBkaXN0cmlidXRlIHdpdGhpbiBZb3VyIG9yZ2FuaXphdGlvbiwgYW5kIEV4dGVybmFsbHkgRGVwbG95IHZlcmJhdGltLCB1bm1vZGlmaWVkIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmQKKworKGIpICBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mIENvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSBvciBFeHRlcm5hbGx5IERlcGxveSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDYuCisKKzIuMiBNb2RpZmllZCBDb2RlLiAgWW91IG1heSBtb2RpZnkgQ292ZXJlZCBDb2RlIGFuZCB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgaW50ZXJuYWxseSBkaXN0cmlidXRlIHdpdGhpbiBZb3VyIG9yZ2FuaXphdGlvbiwgYW5kIEV4dGVybmFsbHkgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBhbmQgQ292ZXJlZCBDb2RlLCBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcywgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlIFlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyhhKSBZb3UgbXVzdCBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7IAorCisoYikgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQKKworKGMpIElmIFlvdSBFeHRlcm5hbGx5IERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMsIFlvdSBtdXN0IG1ha2UgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgRXh0ZXJuYWxseSBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVpdGhlciBhdmFpbGFibGUgdG8gdGhvc2UgdG8gd2hvbSBZb3UgaGF2ZSBFeHRlcm5hbGx5IERlcGxveWVkIFlvdXIgTW9kaWZpY2F0aW9ucywgb3IgcHVibGljbHkgYXZhaWxhYmxlLiAgU291cmNlIENvZGUgb2YgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgbXVzdCBiZSByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRXh0ZXJuYWxseSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIEV4dGVybmFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpLgorCisyLjMgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuICBJbiBhZGRpdGlvbiwgaWYgWW91IEV4dGVybmFsbHkgRGVwbG95IENvdmVyZWQgQ29kZSAoT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucykgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LCBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuICAKKworMi40IFRoaXJkIFBhcnR5IFJpZ2h0cy4gIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiAgSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgaGVyZWJ5IGdyYW50IHRvIGFueSBwZXJzb24gb3IgZW50aXR5IHJlY2VpdmluZyBvciBkaXN0cmlidXRpbmcgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZSBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsLCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIGFuZCBFeHRlcm5hbGx5IERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yIGFib3ZlLiAgCisKKzQuIExhcmdlciBXb3Jrcy4gIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuICBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuIAorCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgQXBwbGUgaGVyZWluLiAgTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gQXBwbGUgd2hpY2ggQXBwbGUgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uICAKKworNi4gQWRkaXRpb25hbCBUZXJtcy4gIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluICgiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3Qgb2J0YWluIHRoZSByZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IEFwcGxlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuIAorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gIEFwcGxlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiAgTm8gb25lIG90aGVyIHRoYW4gQXBwbGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuICBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiAgVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suICBUSEUgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgIkFQUExFIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDkpIEFORCBBTEwgQ09OVFJJQlVUT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuICBBUFBMRSBBTkQgRUFDSCBDT05UUklCVVRPUiBET0VTIE5PVCBXQVJSQU5UIEFHQUlOU1QgSU5URVJGRVJFTkNFIFdJVEggWU9VUiBFTkpPWU1FTlQgT0YgVEhFIENPVkVSRUQgQ09ERSwgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiAgTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSwgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBBUFBMRSBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZmlmdHkgZG9sbGFycyAoJDUwLjAwKS4KKworMTAuIFRyYWRlbWFya3MuICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgICJBcHBsZSIsICJNYWMiLCAiTWFjIE9TIiwgIlF1aWNrVGltZSIsICJRdWlja1RpbWUgU3RyZWFtaW5nIFNlcnZlciIgb3IgYW55IG90aGVyIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIGxvZ29zIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBBcHBsZSAoY29sbGVjdGl2ZWx5ICJBcHBsZSBNYXJrcyIpIG9yIHRvIGFueSB0cmFkZW1hcmssIHNlcnZpY2UgbWFyaywgbG9nbyBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuICBZb3UgYWdyZWUgbm90IHRvIHVzZSBhbnkgQXBwbGUgTWFya3MgaW4gb3IgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcyB3aXRoIEFwcGxlYHMgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9sZWdhbC9ndWlkZWxpbmVzZm9yM3JkcGFydGllcy5odG1sLiAgCisKKzExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuICBBcHBsZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIEFwcGxlICgiQXBwbGUgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBBcHBsZSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4gIAorCisxMi4gVGVybWluYXRpb24uICAKKworMTIuMSBUZXJtaW5hdGlvbi4gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsKKyhiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZTsgcHJvdmlkZWQgdGhhdCBBcHBsZSBkaWQgbm90IGZpcnN0IGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IFlvdSBpbiB0aGF0IGluc3RhbmNlLgorCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUuICBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuICBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS4KKworMTMuICBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiAgIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiAgQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nIFlvdSwgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuICAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgQXBwbGVgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiAgRmFpbHVyZSBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTMuNSBTZXZlcmFiaWxpdHkuICAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAgKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgQXBwbGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIGFuZCBZb3UgYW5kIEFwcGxlIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiAgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuICBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mIENhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4gCisKK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6ICBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guICBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMzOyBxdWUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzM7ZGlnJiMyMzM7cyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuIAorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgQXBwbGUgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAyLjAgKHRoZSBgTGljZW5zZWApLiAgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5vcGVuc291cmNlLmFwcGxlLmNvbS9hcHNsLyBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4gIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0Fkb2JlIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BZG9iZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDc3OWRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BZG9iZQpAQCAtMCwwICsxLDE0IEBACitDb3B5cmlnaHQgMTk5MC0xOTk4IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgCitQYXRlbnRzIFBlbmRpbmcKKworTk9USUNFOiBBbGwgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyB0aGUgcHJvcGVydHkgb2YgQWRvYmUKK1N5c3RlbXMgSW5jb3Jwb3JhdGVkLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgZm9yIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSBwcm92aWRlZAordGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzIG1haW50YWluZWQgaW50YWN0IGFuZCB0aGF0IHRoZSBjb250ZW50cworb2YgdGhpcyBmaWxlIGFyZSBub3QgYWx0ZXJlZCBpbiBhbnkgd2F5IGZyb20gaXRzIG9yaWdpbmFsIGZvcm0uCisKK1Bvc3RTY3JpcHQgYW5kIERpc3BsYXkgUG9zdFNjcmlwdCBhcmUgdHJhZGVtYXJrcyBvZiBBZG9iZSBTeXN0ZW1zCitJbmNvcnBvcmF0ZWQgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgaW4gY2VydGFpbiBqdXJpc2RpY3Rpb25zLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTkwODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjAKQEAgLTAsMCArMSw2MSBAQAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk1LTE5OTkgVGhlIEFwYWNoZSBHcm91cC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgQXBhY2hlIEdyb3VwCisgKiAgICBmb3IgdXNlIGluIHRoZSBBcGFjaGUgSFRUUCBzZXJ2ZXIgcHJvamVjdCAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiQXBhY2hlIFNlcnZlciIgYW5kICJBcGFjaGUgR3JvdXAiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBhcGFjaGVAYXBhY2hlLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIgorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgR3JvdXAuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgQXBhY2hlIEdyb3VwCisgKiAgICBmb3IgdXNlIGluIHRoZSBBcGFjaGUgSFRUUCBzZXJ2ZXIgcHJvamVjdCAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFQQUNIRSBHUk9VUCBgYEFTIElTYGAgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBHUk9VUCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBHcm91cCBhbmQgd2FzIG9yaWdpbmFsbHkgYmFzZWQKKyAqIG9uIHB1YmxpYyBkb21haW4gc29mdHdhcmUgd3JpdHRlbiBhdCB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvcgorICogU3VwZXJjb21wdXRpbmcgQXBwbGljYXRpb25zLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzLCBVcmJhbmEtQ2hhbXBhaWduLgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBHcm91cCBhbmQgdGhlIEFwYWNoZSBIVFRQIHNlcnZlcgorICogcHJvamVjdCwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKgorICovCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjVlYzAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4xCkBAIC0wLDAgKzEsNjAgQEAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCisgKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisgKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisgKgorICogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKKyAqICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIiwKKyAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBGb3IgbW9yZQorICogaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlCisgKiA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCisgKgorICogUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgYmFzZWQgdXBvbiBwdWJsaWMgZG9tYWluIHNvZnR3YXJlCisgKiBvcmlnaW5hbGx5IHdyaXR0ZW4gYXQgdGhlIE5hdGlvbmFsIENlbnRlciBmb3IgU3VwZXJjb21wdXRpbmcgQXBwbGljYXRpb25zLAorICogVW5pdmVyc2l0eSBvZiBJbGxpbm9pcywgVXJiYW5hLUNoYW1wYWlnbi4KKyAqLworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzIwMWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMi4wCkBAIC0wLDAgKzEsMjA0IEBACisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb25gdCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3ZTRkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMS4wCkBAIC0wLDAgKzEsNTAgQEAKKworVGhlIEFydGlzdGljIExpY2Vuc2UKK1ByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIFBhY2thZ2UgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lIHNlbWJsYW5jZSBvZiBhcnRpc3RpYyBjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBwYWNrYWdlLCB3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIFBhY2thZ2UgaW4gYSBtb3JlLW9yLWxlc3MgY3VzdG9tYXJ5IGZhc2hpb24sIHBsdXMgdGhlIHJpZ2h0IHRvIG1ha2UgcmVhc29uYWJsZSBtb2RpZmljYXRpb25zLgorCitEZWZpbml0aW9uczoKKworIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcyBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uCisiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHN1Y2ggYSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbiBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIuCisiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLgorIllvdSIgaXMgeW91LCBpZiB5b3VgcmUgdGhpbmtpbmcgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcgdGhpcyBQYWNrYWdlLgorIlJlYXNvbmFibGUgY29weWluZyBmZWUiIGlzIHdoYXRldmVyIHlvdSBjYW4ganVzdGlmeSBvbiB0aGUgYmFzaXMgb2YgbWVkaWEgY29zdCwgZHVwbGljYXRpb24gY2hhcmdlcywgdGltZSBvZiBwZW9wbGUgaW52b2x2ZWQsIGFuZCBzbyBvbi4gKFlvdSB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBqdXN0aWZ5IGl0IHRvIHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBidXQgb25seSB0byB0aGUgY29tcHV0aW5nIGNvbW11bml0eSBhdCBsYXJnZSBhcyBhIG1hcmtldCB0aGF0IG11c3QgYmVhciB0aGUgZmVlLikKKyJGcmVlbHkgQXZhaWxhYmxlIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworMi4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlciBtb2RpZmljYXRpb25zIGRlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiBvciBmcm9tIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiBBIFBhY2thZ2UgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0IHlvdSBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlIHN0YXRpbmcgaG93IGFuZCB3aGVuIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCithKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlIG1ha2UgdGhlbSBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZCBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbiBlcXVpdmFsZW50IG1lZGl1bSwgb3IgcGxhY2luZyB0aGUgbW9kaWZpY2F0aW9ucyBvbiBhIG1ham9yIGFyY2hpdmUgc2l0ZSBzdWNoIGFzIGZ0cC51dS5uZXQsIG9yIGJ5IGFsbG93aW5nIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRvIGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlLgorCitiKSB1c2UgdGhlIG1vZGlmaWVkIFBhY2thZ2Ugb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24uCisKK2MpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZSBhIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIHRoYXQgY2xlYXJseSBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIGRpc3RyaWJ1dGUgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcywgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KSBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKK2IpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLgorCitjKSBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgU3RhbmRhcmQgVmVyc2lvbiBleGVjdXRhYmxlcywgZ2l2aW5nIHRoZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCitkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworNS4gWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMgUGFja2FnZS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGlzIFBhY2thZ2UgaXRzZWxmLiBIb3dldmVyLCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoIG90aGVyIChwb3NzaWJseSBjb21tZXJjaWFsKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzIFBhY2thZ2UgYXMgYSBwcm9kdWN0IG9mIHlvdXIgb3duLgorCis2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIgZ2VuZXJhdGVkIHRoZW0sIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZCB3aXRoIHRoaXMgUGFja2FnZS4KKworNy4gQyBvciBwZXJsIHN1YnJvdXRpbmVzIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLgorCis4LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCis5LiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK1RoZSBFbmQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGY4ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0yLjAKQEAgLTAsMCArMSwyMDMgQEAKKworICAgICAgICAgVGhlIEFydGlzdGljIExpY2Vuc2UgMi4wCisKKyAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsIFRoZSBQZXJsIEZvdW5kYXRpb24uCisKKyAgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgICAgICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworUHJlYW1ibGUKKworVGhpcyBsaWNlbnNlIGVzdGFibGlzaGVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBhIGdpdmVuIGZyZWUgc29mdHdhcmUKK1BhY2thZ2UgbWF5IGJlIGNvcGllZCwgbW9kaWZpZWQsIGRpc3RyaWJ1dGVkLCBhbmQvb3IgcmVkaXN0cmlidXRlZC4KK1RoZSBpbnRlbnQgaXMgdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZSBhcnRpc3RpYworY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGF0IFBhY2thZ2Ugd2hpbGUgc3RpbGwga2VlcGluZyB0aGUKK1BhY2thZ2UgYXZhaWxhYmxlIGFzIG9wZW4gc291cmNlIGFuZCBmcmVlIHNvZnR3YXJlLgorCitZb3UgYXJlIGFsd2F5cyBwZXJtaXR0ZWQgdG8gbWFrZSBhcnJhbmdlbWVudHMgd2hvbGx5IG91dHNpZGUgb2YgdGhpcworbGljZW5zZSBkaXJlY3RseSB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9mIGEgZ2l2ZW4gUGFja2FnZS4gIElmIHRoZQordGVybXMgb2YgdGhpcyBsaWNlbnNlIGRvIG5vdCBwZXJtaXQgdGhlIGZ1bGwgdXNlIHRoYXQgeW91IHByb3Bvc2UgdG8KK21ha2Ugb2YgdGhlIFBhY2thZ2UsIHlvdSBzaG91bGQgY29udGFjdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBhbmQgc2VlaworYSBkaWZmZXJlbnQgbGljZW5zaW5nIGFycmFuZ2VtZW50LiAKKworRGVmaW5pdGlvbnMKKworICAgICJDb3B5cmlnaHQgSG9sZGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbChzKSBvciBvcmdhbml6YXRpb24ocykKKyAgICBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIGVudGlyZSBQYWNrYWdlLgorCisgICAgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGFydHkgdGhhdCBoYXMgY29udHJpYnV0ZWQgY29kZSBvciBvdGhlcgorICAgIG1hdGVyaWFsIHRvIHRoZSBQYWNrYWdlLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXJgcworICAgIHByb2NlZHVyZXMuCisKKyAgICAiWW91IiBhbmQgInlvdXIiIG1lYW5zIGFueSBwZXJzb24gd2hvIHdvdWxkIGxpa2UgdG8gY29weSwKKyAgICBkaXN0cmlidXRlLCBvciBtb2RpZnkgdGhlIFBhY2thZ2UuCisKKyAgICAiUGFja2FnZSIgbWVhbnMgdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlCisgICAgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBhbmQvb3Igb2YKKyAgICB0aG9zZSBmaWxlcy4gQSBnaXZlbiBQYWNrYWdlIG1heSBjb25zaXN0IG9mIGVpdGhlciB0aGUgU3RhbmRhcmQKKyAgICBWZXJzaW9uLCBvciBhIE1vZGlmaWVkIFZlcnNpb24uCisKKyAgICAiRGlzdHJpYnV0ZSIgbWVhbnMgcHJvdmlkaW5nIGEgY29weSBvZiB0aGUgUGFja2FnZSBvciBtYWtpbmcgaXQKKyAgICBhY2Nlc3NpYmxlIHRvIGFueW9uZSBlbHNlLCBvciBpbiB0aGUgY2FzZSBvZiBhIGNvbXBhbnkgb3IKKyAgICBvcmdhbml6YXRpb24sIHRvIG90aGVycyBvdXRzaWRlIG9mIHlvdXIgY29tcGFueSBvciBvcmdhbml6YXRpb24uCisKKyAgICAiRGlzdHJpYnV0b3IgRmVlIiBtZWFucyBhbnkgZmVlIHRoYXQgeW91IGNoYXJnZSBmb3IgRGlzdHJpYnV0aW5nCisgICAgdGhpcyBQYWNrYWdlIG9yIHByb3ZpZGluZyBzdXBwb3J0IGZvciB0aGlzIFBhY2thZ2UgdG8gYW5vdGhlcgorICAgIHBhcnR5LiAgSXQgZG9lcyBub3QgbWVhbiBsaWNlbnNpbmcgZmVlcy4KKworICAgICJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gdGhlIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIG9ubHkgaW4gd2F5cyBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgIk1vZGlmaWVkIFZlcnNpb24iIG1lYW5zIHRoZSBQYWNrYWdlLCBpZiBpdCBoYXMgYmVlbiBjaGFuZ2VkLCBhbmQKKyAgICBzdWNoIGNoYW5nZXMgd2VyZSBub3QgZXhwbGljaXRseSByZXF1ZXN0ZWQgYnkgdGhlIENvcHlyaWdodAorICAgIEhvbGRlci4gCisKKyAgICAiT3JpZ2luYWwgTGljZW5zZSIgbWVhbnMgdGhpcyBBcnRpc3RpYyBMaWNlbnNlIGFzIERpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZSwgaW4gaXRzIGN1cnJlbnQgdmVyc2lvbiBvciBhcworICAgIGl0IG1heSBiZSBtb2RpZmllZCBieSBUaGUgUGVybCBGb3VuZGF0aW9uIGluIHRoZSBmdXR1cmUuCisKKyAgICAiU291cmNlIiBmb3JtIG1lYW5zIHRoZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiBzb3VyY2UsIGFuZAorICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBQYWNrYWdlLgorCisgICAgIkNvbXBpbGVkIiBmb3JtIG1lYW5zIHRoZSBjb21waWxlZCBieXRlY29kZSwgb2JqZWN0IGNvZGUsIGJpbmFyeSwKKyAgICBvciBhbnkgb3RoZXIgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9uIG9yCisgICAgdHJhbnNsYXRpb24gb2YgdGhlIFNvdXJjZSBmb3JtLgorCisKK1Blcm1pc3Npb24gZm9yIFVzZSBhbmQgTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCisKKygxKSAgWW91IGFyZSBwZXJtaXR0ZWQgdG8gdXNlIHRoZSBTdGFuZGFyZCBWZXJzaW9uIGFuZCBjcmVhdGUgYW5kIHVzZQorTW9kaWZpZWQgVmVyc2lvbnMgZm9yIGFueSBwdXJwb3NlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQKK3lvdSBkbyBub3QgRGlzdHJpYnV0ZSB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KKworCitQZXJtaXNzaW9ucyBmb3IgUmVkaXN0cmlidXRpb24gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24KKworKDIpICBZb3UgbWF5IERpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIGluIGFueSBtZWRpdW0gd2l0aG91dCByZXN0cmljdGlvbiwKK2VpdGhlciBncmF0aXMgb3IgZm9yIGEgRGlzdHJpYnV0b3IgRmVlLCBwcm92aWRlZCB0aGF0IHlvdSBkdXBsaWNhdGUKK2FsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuICBBdAoreW91ciBkaXNjcmV0aW9uLCBzdWNoIHZlcmJhdGltIGNvcGllcyBtYXkgb3IgbWF5IG5vdCBpbmNsdWRlIGEKK0NvbXBpbGVkIGZvcm0gb2YgdGhlIFBhY2thZ2UuCisKKygzKSAgWW91IG1heSBhcHBseSBhbnkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBjaGFuZ2VzLCBhbmQgb3RoZXIKK21vZGlmaWNhdGlvbnMgbWFkZSBhdmFpbGFibGUgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gIFRoZSByZXN1bHRpbmcKK1BhY2thZ2Ugd2lsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLCBhbmQgYXMgc3VjaAord2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBPcmlnaW5hbCBMaWNlbnNlLgorCisKK0Rpc3RyaWJ1dGlvbiBvZiBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgUGFja2FnZSBhcyBTb3VyY2UgCisKKyg0KSAgWW91IG1heSBEaXN0cmlidXRlIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBhcyBTb3VyY2UgKGVpdGhlciBncmF0aXMKK29yIGZvciBhIERpc3RyaWJ1dG9yIEZlZSwgYW5kIHdpdGggb3Igd2l0aG91dCBhIENvbXBpbGVkIGZvcm0gb2YgdGhlCitNb2RpZmllZCBWZXJzaW9uKSBwcm92aWRlZCB0aGF0IHlvdSBjbGVhcmx5IGRvY3VtZW50IGhvdyBpdCBkaWZmZXJzCitmcm9tIHRoZSBTdGFuZGFyZCBWZXJzaW9uLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZG9jdW1lbnRpbmcKK2FueSBub24tc3RhbmRhcmQgZmVhdHVyZXMsIGV4ZWN1dGFibGVzLCBvciBtb2R1bGVzLCBhbmQgcHJvdmlkZWQgdGhhdAoreW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKGEpICBtYWtlIHRoZSBNb2RpZmllZCBWZXJzaW9uIGF2YWlsYWJsZSB0byB0aGUgQ29weXJpZ2h0IEhvbGRlcgorICAgIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uLCB1bmRlciB0aGUgT3JpZ2luYWwgTGljZW5zZSwgc28gdGhhdCB0aGUKKyAgICBDb3B5cmlnaHQgSG9sZGVyIG1heSBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQKKyAgICBWZXJzaW9uLgorCisgICAgKGIpICBlbnN1cmUgdGhhdCBpbnN0YWxsYXRpb24gb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGRvZXMgbm90CisgICAgcHJldmVudCB0aGUgdXNlciBpbnN0YWxsaW5nIG9yIHJ1bm5pbmcgdGhlIFN0YW5kYXJkIFZlcnNpb24uIEluCisgICAgYWRkaXRpb24sIHRoZSBNb2RpZmllZCBWZXJzaW9uIG11c3QgYmVhciBhIG5hbWUgdGhhdCBpcyBkaWZmZXJlbnQKKyAgICBmcm9tIHRoZSBuYW1lIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgKGMpICBhbGxvdyBhbnlvbmUgd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0bworICAgIG1ha2UgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGF2YWlsYWJsZSB0byBvdGhlcnMKKyAgICB1bmRlcgorICAKKyAoaSkgIHRoZSBPcmlnaW5hbCBMaWNlbnNlIG9yCisKKyAoaWkpICBhIGxpY2Vuc2UgdGhhdCBwZXJtaXRzIHRoZSBsaWNlbnNlZSB0byBmcmVlbHkgY29weSwKKyBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1c2luZyB0aGUgc2FtZQorIGxpY2Vuc2luZyB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRoZSBjb3B5IHRoYXQgdGhlIGxpY2Vuc2VlCisgcmVjZWl2ZWQsIGFuZCByZXF1aXJlcyB0aGF0IHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgTW9kaWZpZWQKKyBWZXJzaW9uLCBhbmQgb2YgYW55IHdvcmtzIGRlcml2ZWQgZnJvbSBpdCwgYmUgbWFkZSBmcmVlbHkKKyBhdmFpbGFibGUgaW4gdGhhdCBsaWNlbnNlIGZlZXMgYXJlIHByb2hpYml0ZWQgYnV0IERpc3RyaWJ1dG9yCisgRmVlcyBhcmUgYWxsb3dlZC4KKworCitEaXN0cmlidXRpb24gb2YgQ29tcGlsZWQgRm9ybXMgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gCitvciBNb2RpZmllZCBWZXJzaW9ucyB3aXRob3V0IHRoZSBTb3VyY2UKKworKDUpICBZb3UgbWF5IERpc3RyaWJ1dGUgQ29tcGlsZWQgZm9ybXMgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gd2l0aG91dAordGhlIFNvdXJjZSwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBjb21wbGV0ZSBpbnN0cnVjdGlvbnMgb24gaG93IHRvCitnZXQgdGhlIFNvdXJjZSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbi4gIFN1Y2ggaW5zdHJ1Y3Rpb25zIG11c3QgYmUKK3ZhbGlkIGF0IHRoZSB0aW1lIG9mIHlvdXIgZGlzdHJpYnV0aW9uLiAgSWYgdGhlc2UgaW5zdHJ1Y3Rpb25zLCBhdCBhbnkKK3RpbWUgd2hpbGUgeW91IGFyZSBjYXJyeWluZyBvdXQgc3VjaCBkaXN0cmlidXRpb24sIGJlY29tZSBpbnZhbGlkLCB5b3UKK211c3QgcHJvdmlkZSBuZXcgaW5zdHJ1Y3Rpb25zIG9uIGRlbWFuZCBvciBjZWFzZSBmdXJ0aGVyIGRpc3RyaWJ1dGlvbi4KK0lmIHlvdSBwcm92aWRlIHZhbGlkIGluc3RydWN0aW9ucyBvciBjZWFzZSBkaXN0cmlidXRpb24gd2l0aGluIHRoaXJ0eQorZGF5cyBhZnRlciB5b3UgYmVjb21lIGF3YXJlIHRoYXQgdGhlIGluc3RydWN0aW9ucyBhcmUgaW52YWxpZCwgdGhlbgoreW91IGRvIG5vdCBmb3JmZWl0IGFueSBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIGxpY2Vuc2UuCisKKyg2KSAgWW91IG1heSBEaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBpbiBDb21waWxlZCBmb3JtIHdpdGhvdXQKK3RoZSBTb3VyY2UsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIFNlY3Rpb24gNCB3aXRoIHJlc3BlY3QgdG8KK3RoZSBTb3VyY2Ugb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKworQWdncmVnYXRpbmcgb3IgTGlua2luZyB0aGUgUGFja2FnZSAKKworKDcpICBZb3UgbWF5IGFnZ3JlZ2F0ZSB0aGUgUGFja2FnZSAoZWl0aGVyIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9yCitNb2RpZmllZCBWZXJzaW9uKSB3aXRoIG90aGVyIHBhY2thZ2VzIGFuZCBEaXN0cmlidXRlIHRoZSByZXN1bHRpbmcKK2FnZ3JlZ2F0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBjaGFyZ2UgYSBsaWNlbnNpbmcgZmVlIGZvciB0aGUKK1BhY2thZ2UuICBEaXN0cmlidXRvciBGZWVzIGFyZSBwZXJtaXR0ZWQsIGFuZCBsaWNlbnNpbmcgZmVlcyBmb3Igb3RoZXIKK2NvbXBvbmVudHMgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFyZSBwZXJtaXR0ZWQuIFRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UKK2FwcGx5IHRvIHRoZSB1c2UgYW5kIERpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgb3IgTW9kaWZpZWQgVmVyc2lvbnMKK2FzIGluY2x1ZGVkIGluIHRoZSBhZ2dyZWdhdGlvbi4KKworKDgpIFlvdSBhcmUgcGVybWl0dGVkIHRvIGxpbmsgTW9kaWZpZWQgYW5kIFN0YW5kYXJkIFZlcnNpb25zIHdpdGgKK290aGVyIHdvcmtzLCB0byBlbWJlZCB0aGUgUGFja2FnZSBpbiBhIGxhcmdlciB3b3JrIG9mIHlvdXIgb3duLCBvciB0bworYnVpbGQgc3RhbmQtYWxvbmUgYmluYXJ5IG9yIGJ5dGVjb2RlIHZlcnNpb25zIG9mIGFwcGxpY2F0aW9ucyB0aGF0CitpbmNsdWRlIHRoZSBQYWNrYWdlLCBhbmQgRGlzdHJpYnV0ZSB0aGUgcmVzdWx0IHdpdGhvdXQgcmVzdHJpY3Rpb24sCitwcm92aWRlZCB0aGUgcmVzdWx0IGRvZXMgbm90IGV4cG9zZSBhIGRpcmVjdCBpbnRlcmZhY2UgdG8gdGhlIFBhY2thZ2UuCisKKworSXRlbXMgVGhhdCBhcmUgTm90IENvbnNpZGVyZWQgUGFydCBvZiBhIE1vZGlmaWVkIFZlcnNpb24gCisKKyg5KSBXb3JrcyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIG1vZHVsZXMgYW5kIHNjcmlwdHMpIHRoYXQKK21lcmVseSBleHRlbmQgb3IgbWFrZSB1c2Ugb2YgdGhlIFBhY2thZ2UsIGRvIG5vdCwgYnkgdGhlbXNlbHZlcywgY2F1c2UKK3RoZSBQYWNrYWdlIHRvIGJlIGEgTW9kaWZpZWQgVmVyc2lvbi4gIEluIGFkZGl0aW9uLCBzdWNoIHdvcmtzIGFyZSBub3QKK2NvbnNpZGVyZWQgcGFydHMgb2YgdGhlIFBhY2thZ2UgaXRzZWxmLCBhbmQgYXJlIG5vdCBzdWJqZWN0IHRvIHRoZQordGVybXMgb2YgdGhpcyBsaWNlbnNlLgorCisKK0dlbmVyYWwgUHJvdmlzaW9ucworCisoMTApICBBbnkgdXNlLCBtb2RpZmljYXRpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFN0YW5kYXJkIG9yCitNb2RpZmllZCBWZXJzaW9ucyBpcyBnb3Zlcm5lZCBieSB0aGlzIEFydGlzdGljIExpY2Vuc2UuIEJ5IHVzaW5nLAorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUGFja2FnZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIERvIG5vdAordXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhlIFBhY2thZ2UsIGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMKK2xpY2Vuc2UuCisKKygxMSkgIElmIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBoYXMgYmVlbiBkZXJpdmVkIGZyb20gYSBNb2RpZmllZAorVmVyc2lvbiBtYWRlIGJ5IHNvbWVvbmUgb3RoZXIgdGhhbiB5b3UsIHlvdSBhcmUgbmV2ZXJ0aGVsZXNzIHJlcXVpcmVkCit0byBlbnN1cmUgdGhhdCB5b3VyIE1vZGlmaWVkIFZlcnNpb24gY29tcGxpZXMgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIGxpY2Vuc2UuCisKKygxMikgIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBhbnkgdHJhZGVtYXJrLAorc2VydmljZSBtYXJrLCB0cmFkZW5hbWUsIG9yIGxvZ28gb2YgdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKygxMykgIFRoaXMgbGljZW5zZSBpbmNsdWRlcyB0aGUgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLAorZnJlZS1vZi1jaGFyZ2UgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsCitzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgUGFja2FnZSB3aXRoIHJlc3BlY3QgdG8gYW55CitwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgdGhhdCBhcmUgbmVjZXNzYXJpbHkKK2luZnJpbmdlZCBieSB0aGUgUGFja2FnZS4gSWYgeW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSkgYWdhaW5zdCBhbnkgcGFydHkgYWxsZWdpbmcKK3RoYXQgdGhlIFBhY2thZ2UgY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQKK2luZnJpbmdlbWVudCwgdGhlbiB0aGlzIEFydGlzdGljIExpY2Vuc2UgdG8geW91IHNoYWxsIHRlcm1pbmF0ZSBvbiB0aGUKK2RhdGUgdGhhdCBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKygxNCkgIERpc2NsYWltZXIgb2YgV2FycmFudHk6CitUSEUgUEFDS0FHRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgQ09OVFJJQlVUT1JTICJBUworSVNgIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUy4gVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK05PTi1JTkZSSU5HRU1FTlQgQVJFIERJU0NMQUlNRUQgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgWU9VUiBMT0NBTAorTEFXLiBVTkxFU1MgUkVRVUlSRUQgQlkgTEFXLCBOTyBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SIFdJTEwKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRIRSBQQUNLQUdFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2EwYWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QKQEAgLTAsMCArMSwyNiBAQAorQ29weXJpZ2h0IChjKSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTAtQ2xhdXNlIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4YmRkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTAtQ2xhdXNlCkBAIC0wLDAgKzEsMTIgQEAKK0NvcHlyaWdodCAoQykgPFlFQVI+IGJ5IDxPV05FUj4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0yLUNsYXVzZSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTBmMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0yLUNsYXVzZQpAQCAtMCwwICsxLDEzIEBACisKK1RoZSBGcmVlQlNEIENvcHlyaWdodAorCitDb3B5cmlnaHQgMTk5Mi0yMDEwIFRoZSBGcmVlQlNEIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgRlJFRUJTRCBQUk9KRUNUIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRlJFRUJTRCBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgdGhlIEZyZWVCU0QgUHJvamVjdC4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMy1DbGF1c2UgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTM4NjVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMy1DbGF1c2UKQEAgLTAsMCArMSwxMSBAQAorCitDb3B5cmlnaHQgKGMpIDxZRUFSPiwgPE9XTkVSPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSA8T1JHQU5JWkFUSU9OPiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtNC1DbGF1c2UgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE2MmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtNC1DbGF1c2UKQEAgLTAsMCArMSwyOSBAQAorCitDb3B5cmlnaHQgKGMpIDx5ZWFyPiwgPGNvcHlyaWdodCBob2xkZXI+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSA8b3JnYW5pemF0aW9uPi4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxvcmdhbml6YXRpb24+IG5vciB0aGUKKyAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSA8Q09QWVJJR0hUIEhPTERFUj4gYGBBUyBJU2BgIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0wtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYThlYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTTC0xLjAKQEAgLTAsMCArMSwyNSBAQAorCitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CaXRzdHJlYW1WZXJhIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CaXRzdHJlYW1WZXJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjAzYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JpdHN0cmVhbVZlcmEKQEAgLTAsMCArMSwxNjAgQEAKK0JpdHN0cmVhbSBWZXJhIEZvbnRzIENvcHlyaWdodAorCitUaGUgZm9udHMgaGF2ZSBhIGdlbmVyb3VzIGNvcHlyaWdodCwgYWxsb3dpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoYXMKK2xvbmcgYXMgIkJpdHN0cmVhbSIgb3IgIlZlcmEiIGFyZSBub3QgaW4gdGhlIG5hbWVzKSwgYW5kIGZ1bGwKK3JlZGlzdHJpYnV0aW9uIChzbyBsb25nIGFzIHRoZXkgYXJlIG5vdCAqc29sZCogYnkgdGhlbXNlbHZlcykuIFRoZXkKK2NhbiBiZSBiZSBidW5kbGVkLCByZWRpc3RyaWJ1dGVkIGFuZCBzb2xkIHdpdGggYW55IHNvZnR3YXJlLgorCitUaGUgZm9udHMgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0OgorCitDb3B5cmlnaHQKKz09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDMgYnkgQml0c3RyZWFtLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIEJpdHN0cmVhbQorVmVyYSBpcyBhIHRyYWRlbWFyayBvZiBCaXRzdHJlYW0sIEluYy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhlIGZvbnRzIGFjY29tcGFueWluZyB0aGlzIGxpY2Vuc2UgKCJGb250cyIpIGFuZCBhc3NvY2lhdGVkCitkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIkZvbnQgU29mdHdhcmUiKSwgdG8gcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlCit0aGUgRm9udCBTb2Z0d2FyZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIEZvbnQKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgRm9udCBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQKK3RvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBhbmQgdHJhZGVtYXJrIG5vdGljZXMgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKK3NoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEZvbnQgU29mdHdhcmUKK3R5cGVmYWNlcy4KKworVGhlIEZvbnQgU29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkLCBhbHRlcmVkLCBvciBhZGRlZCB0bywgYW5kIGluCitwYXJ0aWN1bGFyIHRoZSBkZXNpZ25zIG9mIGdseXBocyBvciBjaGFyYWN0ZXJzIGluIHRoZSBGb250cyBtYXkgYmUKK21vZGlmaWVkIGFuZCBhZGRpdGlvbmFsIGdseXBocyBvciBjaGFyYWN0ZXJzIG1heSBiZSBhZGRlZCB0byB0aGUKK0ZvbnRzLCBvbmx5IGlmIHRoZSBmb250cyBhcmUgcmVuYW1lZCB0byBuYW1lcyBub3QgY29udGFpbmluZyBlaXRoZXIKK3RoZSB3b3JkcyAiQml0c3RyZWFtIiBvciB0aGUgd29yZCAiVmVyYSIuCisKK1RoaXMgTGljZW5zZSBiZWNvbWVzIG51bGwgYW5kIHZvaWQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIHRvIEZvbnRzCitvciBGb250IFNvZnR3YXJlIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZQorIkJpdHN0cmVhbSBWZXJhIiBuYW1lcy4KKworVGhlIEZvbnQgU29mdHdhcmUgbWF5IGJlIHNvbGQgYXMgcGFydCBvZiBhIGxhcmdlciBzb2Z0d2FyZSBwYWNrYWdlIGJ1dAorbm8gY29weSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgRm9udCBTb2Z0d2FyZSB0eXBlZmFjZXMgbWF5IGJlIHNvbGQgYnkKK2l0c2VsZi4KKworVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UCitPRiBDT1BZUklHSFQsIFBBVEVOVCwgVFJBREVNQVJLLCBPUiBPVEhFUiBSSUdIVC4gSU4gTk8gRVZFTlQgU0hBTEwKK0JJVFNUUkVBTSBPUiBUSEUgR05PTUUgRk9VTkRBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorT1RIRVIgTElBQklMSVRZLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLAorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQKK1NPRlRXQVJFIE9SIEZST00gT1RIRVIgREVBTElOR1MgSU4gVEhFIEZPTlQgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lcyBvZiBHbm9tZSwgdGhlIEdub21lCitGb3VuZGF0aW9uLCBhbmQgQml0c3RyZWFtIEluYy4sIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCitvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgRm9udAorU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgR25vbWUgRm91bmRhdGlvbgorb3IgQml0c3RyZWFtIEluYy4sIHJlc3BlY3RpdmVseS4gRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIGNvbnRhY3Q6Citmb250cyBhdCBnbm9tZSBkb3Qgb3JnLgorCitDb3B5cmlnaHQgRkFRCis9PT09PT09PT09PT09CisKKzEuIEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgcmVzYWxlIHJlc3RyaWN0aW9uLi4uIFdoYXQgZ2l2ZXM/CisKK0JpdHN0cmVhbSBpcyBnaXZpbmcgYXdheSB0aGVzZSBmb250cywgYnV0IHdpc2hlcyB0byBlbnN1cmUgaXRzCitjb21wZXRpdG9ycyBjYW4ndCBqdXN0IGRyb3AgdGhlIGZvbnRzIGFzIGlzIGludG8gYSBmb250IHNhbGUgc3lzdGVtCithbmQgc2VsbCB0aGVtIGFzIGlzLiBJdCBzZWVtcyBmYWlyIHRoYXQgaWYgQml0c3RyZWFtIGNhbid0IG1ha2UgbW9uZXkKK2Zyb20gdGhlIEJpdHN0cmVhbSBWZXJhIGZvbnRzLCB0aGVpciBjb21wZXRpdG9ycyBzaG91bGQgbm90IGJlIGFibGUgdG8KK2RvIHNvIGVpdGhlci4gWW91IGNhbiBzZWxsIHRoZSBmb250cyBhcyBwYXJ0IG9mIGFueSBzb2Z0d2FyZSBwYWNrYWdlLAoraG93ZXZlci4KKworMi4gSSB3YW50IHRvIHBhY2thZ2UgdGhlc2UgZm9udHMgc2VwYXJhdGVseSBmb3IgZGlzdHJpYnV0aW9uIGFuZAorc2FsZSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHNvZnR3YXJlIHBhY2thZ2Ugb3Igc3lzdGVtLiBDYW4gSSBkbyBzbz8KKworWWVzLiBBIFJQTSBvciBEZWJpYW4gcGFja2FnZSBpcyBhICJsYXJnZXIgc29mdHdhcmUgcGFja2FnZSIgdG8gYmVnaW4KK3dpdGgsIGFuZCB5b3UgYXJlbid0IHNlbGxpbmcgdGhlbSBpbmRlcGVuZGVudGx5IGJ5IHRoZW1zZWx2ZXMuCitTZWUgMS4gYWJvdmUuCisKKzMuIEFyZSBkZXJpdmF0aXZlIHdvcmtzIGFsbG93ZWQ/CitZZXMhCisKKzQuIENhbiBJIGNoYW5nZSBvciBhZGQgdG8gdGhlIGZvbnQocyk/CitZZXMsIGJ1dCB5b3UgbXVzdCBjaGFuZ2UgdGhlIG5hbWUocykgb2YgdGhlIGZvbnQocykuCisKKzUuIFVuZGVyIHdoYXQgdGVybXMgYXJlIGRlcml2YXRpdmUgd29ya3MgYWxsb3dlZD8KKworWW91IG11c3QgY2hhbmdlIHRoZSBuYW1lKHMpIG9mIHRoZSBmb250cy4gVGhpcyBpcyB0byBlbnN1cmUgdGhlCitxdWFsaXR5IG9mIHRoZSBmb250cywgYm90aCB0byBwcm90ZWN0IEJpdHN0cmVhbSBhbmQgR25vbWUuIFdlIHdhbnQgdG8KK2Vuc3VyZSB0aGF0IGlmIGFuIGFwcGxpY2F0aW9uIGhhcyBvcGVuZWQgYSBmb250IHNwZWNpZmljYWxseSBvZiB0aGVzZQorbmFtZXMsIGl0IGdldHMgd2hhdCBpdCBleHBlY3RzICh0aG91Z2ggb2YgY291cnNlLCB1c2luZyBmb250Y29uZmlnLAorc3Vic3RpdHV0aW9ucyBjb3VsZCBzdGlsbCBjb3VsZCBoYXZlIG9jY3VycmVkIGR1cmluZyBmb250CitvcGVuaW5nKS4gWW91IG11c3QgaW5jbHVkZSB0aGUgQml0c3RyZWFtIGNvcHlyaWdodC4gQWRkaXRpb25hbAorY29weXJpZ2h0cyBjYW4gYmUgYWRkZWQsIGFzIHBlciBjb3B5cmlnaHQgbGF3LiBIYXBweSBGb250IEhhY2tpbmchCisKKzYuIElmIEkgaGF2ZSBpbXByb3ZlbWVudHMgZm9yIEJpdHN0cmVhbSBWZXJhLCBpcyBpdCBwb3NzaWJsZSB0aGV5IG1pZ2h0IGdldAorYWRvcHRlZCBpbiBmdXR1cmUgdmVyc2lvbnM/CisKK1llcy4gVGhlIGNvbnRyYWN0IGJldHdlZW4gdGhlIEdub21lIEZvdW5kYXRpb24gYW5kIEJpdHN0cmVhbSBoYXMKK3Byb3Zpc2lvbnMgZm9yIHdvcmtpbmcgd2l0aCBCaXRzdHJlYW0gdG8gZW5zdXJlIHF1YWxpdHkgYWRkaXRpb25zIHRvCit0aGUgQml0c3RyZWFtIFZlcmEgZm9udCBmYW1pbHkuIFBsZWFzZSBjb250YWN0IHVzIGlmIHlvdSBoYXZlIHN1Y2gKK2FkZGl0aW9ucy4gTm90ZSwgdGhhdCBpbiBnZW5lcmFsLCB3ZSB3aWxsIHdhbnQgc3VjaCBhZGRpdGlvbnMgZm9yIHRoZQorZW50aXJlIGZhbWlseSwgbm90IGp1c3QgYSBzaW5nbGUgZm9udCwgYW5kIHRoYXQgeW91J2xsIGhhdmUgdG8ga2VlcAorYm90aCBHbm9tZSBhbmQgSmltIEx5bGVzLCBWZXJhJ3MgZGVzaWduZXIsIGhhcHB5ISBUbyBtYWtlIHNlbnNlIHRvIGFkZAorZ2x5cGhzIHRvIHRoZSBmb250LCB0aGV5IG11c3QgYmUgc3R5bGlzdGljYWxseSBpbiBrZWVwaW5nIHdpdGggVmVyYSdzCitkZXNpZ24uIFZlcmEgY2Fubm90IGJlY29tZSBhICJyYW5zb20gbm90ZSIgZm9udC4gSmltIEx5bGVzIHdpbGwgYmUKK3Byb3ZpZGluZyBhIGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlIGRlc2lnbiBlbGVtZW50cyB1c2VkIGluIFZlcmEsIGFzIGEKK2d1aWRlIGFuZCBhaWQgZm9yIHBlb3BsZSBpbnRlcmVzdGVkIGluIGNvbnRyaWJ1dGluZyB0byBWZXJhLgorCis3LiBJIHdhbnQgdG8gc2VsbCBhIHNvZnR3YXJlIHBhY2thZ2UgdGhhdCB1c2VzIHRoZXNlIGZvbnRzOiBDYW4gSSBkbyBzbz8KKworU3VyZS4gQnVuZGxlIHRoZSBmb250cyB3aXRoIHlvdXIgc29mdHdhcmUgYW5kIHNlbGwgeW91ciBzb2Z0d2FyZQord2l0aCB0aGUgZm9udHMuIFRoYXQgaXMgdGhlIGludGVudCBvZiB0aGUgY29weXJpZ2h0LgorCis4LiBJZiBhcHBsaWNhdGlvbnMgaGF2ZSBidWlsdCB0aGUgbmFtZXMgIkJpdHN0cmVhbSBWZXJhIiBpbnRvIHRoZW0sCitjYW4gSSBvdmVycmlkZSB0aGlzIHNvbWVob3cgdG8gdXNlIGZvbnRzIG9mIG15IGNob29zaW5nPworCitUaGlzIGRlcGVuZHMgb24gZXhhY3QgZGV0YWlscyBvZiB0aGUgc29mdHdhcmUuIE1vc3Qgb3BlbiBzb3VyY2UKK3N5c3RlbXMgYW5kIHNvZnR3YXJlIChlLmcuLCBHbm9tZSwgS0RFLCBldGMuKSBhcmUgbm93IGNvbnZlcnRpbmcgdG8KK3VzZSBmb250Y29uZmlnIChzZWUgd3d3LmZvbnRjb25maWcub3JnKSB0byBoYW5kbGUgZm9udCBjb25maWd1cmF0aW9uLAorc2VsZWN0aW9uIGFuZCBzdWJzdGl0dXRpb247IGl0IGhhcyBwcm92aXNpb25zIGZvciBvdmVycmlkaW5nIGZvbnQKK25hbWVzIGFuZCBzdWJzaXR1dGluZyBhbHRlcm5hdGl2ZXMuIEFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgYnkgdGhlCitzdXBwbGllZCBsb2NhbC5jb25mIGZpbGUsIHdoaWNoIGNob29zZXMgdGhlIGZhbWlseSBCaXRzdHJlYW0gVmVyYSBmb3IKKyJzYW5zIiwgInNlcmlmIiBhbmQgIm1vbm9zcGFjZSIuIE90aGVyIHNvZnR3YXJlIChlLmcuLCB0aGUgWEZyZWU4NgorY29yZSBzZXJ2ZXIpIGhhcyBvdGhlciBtZWNoYW5pc21zIGZvciBmb250IHN1YnN0aXR1dGlvbi4KKworU2hvdyBkZXRhaWxzIEhpZGUgZGV0YWlscworCitDaGFuZ2UgbG9nCityMjAxMSBieSBtYXJrLm5pY2tlbCBvbiBNYXIgMywgMjAxMSAgIERpZmYKKworTWFqb3JpdHkgb2YgTXVsdGktTGluZSB0ZXh0IGVkaXRpbmcgaXMgaW4KK3RoZSBjb21taXQuICBBbHNvIGFkZGVkIHNvbWUgc3BlY2lmaWMgZnJlZQorZm9udHMgdG8gcmVwbGFjZSB0aGUgZXhpc3Rpbmcgc2V0IGFzIHdlCituZWVkIHNvbWUgYWRkaXRpb25hbCBmb250IG1ldHJpY3MgdGhhdCB3ZQordXNlIGluIHRoZSBUZXh0IEVkaXRpbmcgcmVuZGVyaW5nCitwaXBlbGluZS4KKworWW91IGNhbiBzZWUgdGhlIGZvbnQgbGljZW5zZXMgaW4gdGhlCitlZGl0b3IvZm9udHMgZm9sZGVyIHVuZGVyIGVhY2ggZm9udC4KKworU3RpbGwgaGF2ZSBzb21lIGNsZWFudXAgdG8gZG8gdG8gYWRkIHRoZQordGV4dCBmb3JtYXR0aW5nIChsZWZ0LHJpZ2h0LGNlbnRlcikgYXMKKy4uLgorCitHbyB0bzogCQorSGlkZSBjb21tZW50cworU2hvdyBjb21tZW50cworCitPbGRlciByZXZpc2lvbnMKK0FsbCByZXZpc2lvbnMgb2YgdGhpcyBmaWxlCisKK0ZpbGUgaW5mbworU2l6ZTogNTk1MyBieXRlcywgMTIzIGxpbmVzCitWaWV3IHJhdyBmaWxlCisKK0ZpbGUgcHJvcGVydGllcworCitzdm46ZXhlY3V0YWJsZQorICAgICoKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NBVE9TTC0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NBVE9TTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlOGE1NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0FUT1NMLTEuMQpAQCAtMCwwICsxLDExNiBAQAorCitDb21wdXRlciBBc3NvY2lhdGVzIFRydXN0ZWQgT3BlbiBTb3VyY2UgTGljZW5zZQorVmVyc2lvbiAxLjEKKworCisodGV4dCkKKworUExFQVNFIFJFQUQgVEhJUyBET0NVTUVOVCBDQVJFRlVMTFkgQU5EIElOIElUUyBFTlRJUkVUWS4gVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENPTVBVVEVSIEFTU09DSUFURVMgVFJVU1RFRCBPUEVOIFNPVVJDRSBMSUNFTlNFICgiTElDRU5TRSIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgVEhFIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBMSUNFTlNFLgorCitMaWNlbnNlIEJhY2tncm91bmQKK0NvbXB1dGVyIEFzc29jaWF0ZXMgSW50ZXJuYXRpb25hbCwgSW5jLiAoQ0EpIGJlbGlldmVzIGluIG9wZW4gc291cmNlLiBXZSBiZWxpZXZlIHRoYXQgdGhlIG9wZW4gc291cmNlIGRldmVsb3BtZW50IGFwcHJvYWNoIGNhbiB0YWtlIGFwcHJvcHJpYXRlIHNvZnR3YXJlIHByb2dyYW1zIHRvIHVucHJlY2VkZW50ZWQgbGV2ZWxzIG9mIHF1YWxpdHksIGdyb3d0aCwgYW5kIGlubm92YXRpb24uIFRvIGRlbW9uc3RyYXRlIG91ciBjb250aW51aW5nIGNvbW1pdG1lbnQgdG8gb3BlbiBzb3VyY2UsIHdlIGFyZSByZWxlYXNpbmcgdGhlIFByb2dyYW0gKGFzIGRlZmluZWQgYmVsb3cpIHVuZGVyIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHBlcm1pdCBjb250cmlidXRvcnMgYW5kIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gdG8gdXNlIHRoZSBQcm9ncmFtLCBpbmNsdWRpbmcgaXRzIHNvdXJjZSBjb2RlLCBmcmVlbHkgYW5kIHdpdGhvdXQgbWFueSBvZiB0aGUgY29uY2VybnMgb2Ygc29tZSBvdGhlciBvcGVuIHNvdXJjZSBsaWNlbnNlcy4gQWx0aG91Z2ggd2UgZXhwZWN0IHRoZSB1bmRlcmx5aW5nIFByb2dyYW0sIGFuZCBDb250cmlidXRpb25zIChhcyBkZWZpbmVkIGJlbG93KSBtYWRlIHRvIHN1Y2ggUHJvZ3JhbSwgdG8gcmVtYWluIG9wZW4sIHRoaXMgTGljZW5zZSBpcyBkZXNpZ25lZCB0byBwZXJtaXQgeW91IHRvIG1haW50YWluIHlvdXIgb3duIHNvZnR3YXJlIHByb2dyYW1zIGZyZWUgb2YgdGhpcyBMaWNlbnNlIHVubGVzcyB5b3UgY2hvb3NlIHRvIGRvIHNvLiBUaHVzLCBvbmx5IHlvdXIgQ29udHJpYnV0aW9ucyB0byB0aGUgUHJvZ3JhbSBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKK1RoZSBwcm92aXNpb25zIHRoYXQgZm9sbG93IHNldCBmb3J0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggeW91IG1heSB1c2UgdGhlIFByb2dyYW0uCisKKzEuIERFRklOSVRJT05TCisKKzEuMSBDb250cmlidXRpb24gbWVhbnMgKGEpIGluIHRoZSBjYXNlIG9mIENBLCB0aGUgT3JpZ2luYWwgUHJvZ3JhbTsgYW5kIChiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yIChpbmNsdWRpbmcgQ0EpLCBjaGFuZ2VzIGFuZCBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0sIHdoZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yIHRvIHVuYWZmaWxpYXRlZCB0aGlyZCBwYXJ0aWVzLiBBIENvbnRyaWJ1dGlvbiBvcmlnaW5hdGVzIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9ycyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoeCkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoeSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisxLjIgQ29udHJpYnV0b3IgbWVhbnMgQ0EgYW5kIGFueSBvdGhlciBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKzEuMyBDb250cmlidXRvciBWZXJzaW9uIG1lYW5zIGFzIHRvIGEgQ29udHJpYnV0b3IsIHRoYXQgdmVyc2lvbiBvZiB0aGUgUHJvZ3JhbSB0aGF0IGluY2x1ZGVzIHRoZSBDb250cmlidXRvcnMgQ29udHJpYnV0aW9uIGJ1dCBub3QgYW55IENvbnRyaWJ1dGlvbnMgbWFkZSB0byB0aGUgUHJvZ3JhbSB0aGVyZWFmdGVyLgorCisxLjQgTGFyZ2VyIFdvcmsgbWVhbnMgYSB3b3JrIHRoYXQgY29tYmluZXMgdGhlIFByb2dyYW0gb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNSBMaWNlbnNlZCBQYXRlbnRzIG1lYW4gcGF0ZW50cyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3IgdGhhdCBhcmUgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworMS42IE9yaWdpbmFsIFByb2dyYW0gbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIHRvIHdoaWNoIHRoaXMgTGljZW5zZSBpcyBhdHRhY2hlZCBhbmQgYXMgcmVsZWFzZWQgYnkgQ0EsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworMS43IFByb2dyYW0gbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMuCisKKzEuOCBSZWNpcGllbnQgbWVhbnMgYW55b25lIHdobyBtb2RpZmllcywgY29waWVzLCB1c2VzIG9yIGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKworMi4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhbiBpcnJldm9jYWJsZSwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGUgbGljZW5zZSBwcm92aWRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xIHNoYWxsIG5vdCBpbmNsdWRlIGEgbGljZW5zZSB0byBhbnkgTGljZW5zZWQgUGF0ZW50cyBvZiBhIENvbnRyaWJ1dG9yLgorCisyLjIgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGFuIGlycmV2b2NhYmxlLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIHRoZSBMaWNlbnNlZCBQYXRlbnRzIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4yIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgdGhlIExpY2Vuc2VkIFBhdGVudHMgdG8gYmUgaW5mcmluZ2VkIGJ5IHN1Y2ggY29tYmluYXRpb24uIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBubyBsaWNlbnNlIGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBTZWN0aW9uIDIuMjogKGEpIGZvciBhbnkgY29kZSBvciB3b3JrcyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoZSBDb250cmlidXRvciBWZXJzaW9uLCBhcyBpdCBleGlzdHMgYW5kIGlzIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBoZXJlb2Y7IChiKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBDb250cmlidXRpb25zIG1hZGUgYnkgZWFjaCBzdWNoIENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciAoYykgd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkIFBhdGVudHMgaW5mcmluZ2VkIGJ5IHRoZSBQcm9ncmFtIGluIHRoZSBhYnNlbmNlIG9mIENvbnRyaWJ1dGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorCisyLjMgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIGV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDIuNCwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBwZXJzb24gb3IgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4KKworMi40IEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCBpdCBoYXMgYWxsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gdGhlIGNvcHlyaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbnMsIGFuZCBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZXMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4KKworMy4gRElTVFJJQlVUSU9OIFJFUVVJUkVNRU5UUworCiszLjEgSWYgdGhlIFByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gb2JqZWN0IGNvZGUgZm9ybSwgdGhlbiBhIHByb21pbmVudCBub3RpY2UgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgQ29udHJpYnV0b3Igd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiB0aGUgc291cmNlIGNvZGUuIEEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlOyBhbmQKK2l0cyBsaWNlbnNlIGFncmVlbWVudDoKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXc7CitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0cywgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdzsKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGFyZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciBhdCB0aGUgY29zdCBvZiBkaXN0cmlidXRpb24sIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIuCiszLjIgV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kCithIGNvcHkgb2YgdGhpcyBMaWNlbnNlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uCiszLjMgVGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFueSBDb250cmlidXRvci4gSG93ZXZlciwgQ29udHJpYnV0b3JzIG1heSBvbmx5IGNoYXJnZSBSZWNpcGllbnRzIGEgb25lLXRpbWUsIHVwZnJvbnQgZmVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLiBDb250cmlidXRvcnMgbWF5IG5vdCBjaGFyZ2UgUmVjaXBpZW50cyBhbnkgcmVjdXJyaW5nIGNoYXJnZSwgbGljZW5zZSBmZWUsIG9yIGFueSBvbmdvaW5nIHJveWFsdHkgZm9yIHRoZSBSZWNpcGllbnRzIGV4ZXJjaXNlIG9mIGl0cyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHRvIHRoZSBQcm9ncmFtLiBDb250cmlidXRvcnMgc2hhbGwgbWFrZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBDb250cmlidXRvciBWZXJzaW9uIHRoZXkgZGlzdHJpYnV0ZSBhdmFpbGFibGUgYXQgYSBjb3N0LCBpZiBhbnksIGVxdWFsIHRvIHRoZSBjb3N0IHRvIHRoZSBDb250cmlidXRvciB0byBwaHlzaWNhbGx5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHdvcmsuIEl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgTGljZW5zZSB0byBwcm9oaWJpdCBhIENvbnRyaWJ1dG9yIGZyb20gY2hhcmdpbmcgZmVlcyBmb3IgYW55IHNlcnZpY2Ugb3IgbWFpbnRlbmFuY2UgdGhhdCBhIENvbnRyaWJ1dG9yIG1heSBjaGFyZ2UgdG8gYSBSZWNpcGllbnQsIHNvIGxvbmcgYXMgc3VjaCBmZWVzIGFyZSBub3QgYW4gYXR0ZW1wdCB0byBjaXJjdW12ZW50IHRoZSBmb3JlZ29pbmcgcmVzdHJpY3Rpb25zIG9uIGNoYXJnaW5nIHJveWFsdGllcyBvciBvdGhlciByZWN1cnJpbmcgZmVlcyBmb3IgdGhlIFByb2dyYW0gaXRzZWxmLgorCiszLjQgQSBDb250cmlidXRvciBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCB0aGUgQ29udHJpYnV0b3IgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgUHJvZ3JhbS4gQW55IENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgaW5jbHVkaW5nIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yaywgbWF5IHN1YmplY3QgaXRzZWxmLCBidXQgbm90IGFueSBvdGhlciBDb250cmlidXRvciwgdG8gYWRkaXRpb25hbCBjb250cmFjdHVhbCBjb21taXRtZW50cywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHBlcmZvcm1hbmNlIHdhcnJhbnRpZXMgYW5kIG5vbi1pbmZyaW5nZW1lbnQgcmVwcmVzZW50YXRpb25zIG9uIHN1Y2hDb250cmlidXRvcnMgYmVoYWxmLiBObyBDb250cmlidXRvciBtYXkgY3JlYXRlIGFueSBhZGRpdGlvbmFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKENvbW1lcmNpYWwgQ29udHJpYnV0b3IpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yKSB3aG8gbWFkZSBDb250cmlidXRpb25zIHRvIHRoZSBQcm9ncmFtIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSBMb3NzZXMpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMsIGluY2x1ZGluZyBhbnkgYWRkaXRpb25hbCBjb250cmFjdHVhbCBjb21taXRtZW50cywgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4KKworMy41IElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IChhKSBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFByb2dyYW0gc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAuLi9JUF9JU1NVRVMsIGFuZCAoYikgbm90aWZ5IENBIGluIHdyaXRpbmcgYXQgQ29tcHV0ZXIgQXNzb2NpYXRlcyBJbnRlcm5hdGlvbmFsLCBJbmMuLCBPbmUgQ29tcHV0ZXIgQXNzb2NpYXRlcyBQbGF6YSwgSXNsYW5kaWEsIE5ldyBZb3JrIDExNzQ5LCBBdHRuOiBPcGVuIFNvdXJjZSBHcm91cCBvciBieSBlbWFpbCBhdCBvcGVuc291cmNlQGNhLmNvbSwgYm90aCBkZXNjcmliaW5nIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIFJlY2lwaWVudCBhbmQgQ0Egd2lsbCBrbm93IHdob20gdG8gY29udGFjdCB3aXRoIHJlZ2FyZCB0byBzdWNoIG1hdHRlci4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgQ29udHJpYnV0aW9uIGlzIG1hZGUgYXZhaWxhYmxlLCBDb250cmlidXRvciBzaGFsbCBhbHNvIHByb21wdGx5IG1vZGlmeSB0aGUgSVBfSVNTVUVTIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgUHJvZ3JhbSB0aGF0IHN1Y2ggbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworMy42IFJlY2lwaWVudCBzaGFsbCBub3QgcmVtb3ZlLCBvYnNjdXJlLCBvciBtb2RpZnkgYW55IENBIG9yIG90aGVyIENvbnRyaWJ1dG9yIGNvcHlyaWdodCBvciBwYXRlbnQgcHJvcHJpZXRhcnkgbm90aWNlcyBhcHBlYXJpbmcgaW4gdGhlIFByb2dyYW0sIHdoZXRoZXIgaW4gdGhlIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBvciBpbiBhbnkgZG9jdW1lbnRhdGlvbi4gSW4gYWRkaXRpb24gdG8gdGhlIG9ibGlnYXRpb25zIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQsIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT05UUklCVVRJT04gUkVTVFJJQ1RJT05TCisKKzQuMSBFYWNoIENvbnRyaWJ1dG9yIG11c3QgY2F1c2UgdGhlIFByb2dyYW0gdG8gd2hpY2ggdGhlIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGEgQ29udHJpYnV0aW9uIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIHRoZSBDb250cmlidXRvciBtYWRlIHRvIGNyZWF0ZSBpdHMgdmVyc2lvbiBvZiB0aGUgUHJvZ3JhbSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gRWFjaCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgQ29udHJpYnV0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gdGhlIFByb2dyYW0gZGlzdHJpYnV0ZWQgYnkgYSBwcmlvciBDb250cmlidXRvciwgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBwcmlvciBDb250cmlidXRvciBmcm9tIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uIHdhcyBkZXJpdmVkLCBpbiAoYSkgdGhlIFByb2dyYW0gc291cmNlIGNvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBleGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIHRoZSBDb250cmlidXRvciBkZXNjcmliZXMgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIFByb2dyYW0uCisKKzUuIE5PIFdBUlJBTlRZCisKKzUuMSBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIEFTIElTIEFORCBJTiBJVFMgUFJFU0VOVCBTVEFURSBBTkQgQ09ORElUSU9OLiBOTyBXQVJSQU5UWSwgUkVQUkVTRU5UQVRJT04sIENPTkRJVElPTiwgVU5ERVJUQUtJTkcgT1IgVEVSTSwgRVhQUkVTUyBPUiBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBBUyBUTyBUSEUgQ09ORElUSU9OLCBRVUFMSVRZLCBEVVJBQklMSVRZLCBQRVJGT1JNQU5DRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBVU0UgT0YgVEhFIFBST0dSQU0gSVMgR0lWRU4gT1IgQVNTVU1FRCBCWSBBTlkgQ09OVFJJQlVUT1IgQU5EIEFMTCBTVUNIIFdBUlJBTlRJRVMsIFJFUFJFU0VOVEFUSU9OUywgQ09ORElUSU9OUywgVU5ERVJUQUtJTkdTIEFORCBURVJNUyBBUkUgSEVSRUJZIEVYQ0xVREVEIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLgorCis1LjIgRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNS4zIEVhY2ggUmVjaXBpZW50IGFja25vd2xlZGdlcyB0aGF0IHRoZSBQcm9ncmFtIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgUHJvZ3JhbSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworNi4xIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgQU5EIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVywgTk8gQ09OVFJJQlVUT1IgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUUkFERU1BUktTIEFORCBCUkFORElORworCis3LjEgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSBSZWNpcGllbnQgb3IgYW55IHRoaXJkIHBhcnR5IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIG5vdyBvciBzdWJzZXF1ZW50bHkgcG9zdGVkIGF0IGh0dHA6Ly93d3cuY2EuY29tL2NhdHJkbXJrLmh0bSwgb3IgYW55IG90aGVyIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIGxvZ29zIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBDQSAoY29sbGVjdGl2ZWx5IENBIE1hcmtzKSBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiBSZWNpcGllbnQgYWdyZWVzIG5vdCB0byB1c2UgYW55IENBIE1hcmtzIGluIG9yIGFzIHBhcnQgb2YgdGhlIG5hbWUgb2YgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBQcm9ncmFtIG9yIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0uCisKKzcuMiBTdWJqZWN0IHRvIFNlY3Rpb24gNy4xLCBSZWNpcGllbnRzIG1heSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIHVuZGVyIHRyYWRlbWFya3MsIGxvZ29zLCBhbmQgcHJvZHVjdCBuYW1lcyBiZWxvbmdpbmcgdG8gdGhlIFJlY2lwaWVudCBwcm92aWRlZCB0aGF0IGFsbCBjb3B5cmlnaHQgYW5kIG90aGVyIGF0dHJpYnV0aW9uIG5vdGljZXMgcmVtYWluIGluIHRoZSBQcm9ncmFtLgorCis4LiBQQVRFTlQgTElUSUdBVElPTgorCis4LjEgSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgcGVyc29uIG9yIGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50cyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnRzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMi4yIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKzkuIE9XTkVSU0hJUAorCis5LjEgU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaW4gU2VjdGlvbnMgMi4xIGFuZCAyLjIgYWJvdmUsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBDb250cmlidXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gQ0EgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBhbnkgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBDQSAoQ0EgQ29udHJpYnV0aW9ucyksIGFuZCBzdWNoIENBIENvbnRyaWJ1dGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQ0EgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIENBIENvbnRyaWJ1dGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzEwLiBURVJNSU5BVElPTgorCisxMC4xIEFsbCBvZiBSZWNpcGllbnRzIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIFJlY2lwaWVudHMgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnRzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IGFzIGEgQ29udHJpYnV0b3IgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzExLiBHRU5FUkFMCisKKzExLjEgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworMTEuMiBDQSBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIE5vIG9uZSBvdGhlciB0aGFuIENBIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZS4KKworMTEuMyBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBSZWNpcGllbnQgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBQcm9ncmFtIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiwgdGhlbiBSZWNpcGllbnQgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgSVBfSVNTVUVTIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFByb2dyYW0gc291cmNlIGNvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIFJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzExLjQgVGhpcyBMaWNlbnNlIGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yay4gTm8gUmVjaXBpZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBMaWNlbnNlIG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIFJlY2lwaWVudCB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBhIFJlY2lwaWVudCBhbmQgQ0EgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIFN0YXRlIG9mIE5ldyBZb3JrLCBhbmQgUmVjaXBpZW50IGFuZCBDQSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgZGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKzExLjUgV2hlcmUgUmVjaXBpZW50IGlzIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIGNvbnRyYWN0YW50ZXMgY29uZmlybWVudCBxdWBlbGxlcyBvbnQgZXhpZ2UgcXVlIGxlIHByZXNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgYXNzb2NpZXMgc29pZW50IHJlZGlnZXMgZW4gYW5nbGFpcy4KKworMTEuNiBUaGUgUHJvZ3JhbSBpcyBzdWJqZWN0IHRvIGFsbCBleHBvcnQgYW5kIGltcG9ydCBsYXdzLCByZXN0cmljdGlvbnMgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFJlY2lwaWVudCByZWNlaXZlcyB0aGUgUHJvZ3JhbS4gUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgY29tcGx5aW5nIHdpdGggYW5kIGVuc3VyaW5nIHRoYXQgUmVjaXBpZW50IGRvZXMgbm90IGV4cG9ydCwgcmUtZXhwb3J0LCBvciBpbXBvcnQgdGhlIFByb2dyYW0gaW4gdmlvbGF0aW9uIG9mIHN1Y2ggbGF3cywgcmVzdHJpY3Rpb25zIG9yIHJlZ3VsYXRpb25zLCBvciB3aXRob3V0IGFueSBuZWNlc3NhcnkgbGljZW5zZXMgYW5kIGF1dGhvcml6YXRpb25zLgorCisxMS43IFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMGI3NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTEuMApAQCAtMCwwICsxLDYwIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE3YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCitBdHRyaWJ1dGlvbiAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuNSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlM2QxOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuNQpAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGIpLCBhcyByZXF1ZXN0ZWQuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNkNTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0zLjAKQEAgLTAsMCArMSw3MCBAQAorCitDcmVhdGl2ZSBDb21tb25zCitBdHRyaWJ1dGlvbiAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGIpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGIpLCBhcyByZXF1ZXN0ZWQuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCAoaXYpICwgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0IChiKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ZDIyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMS4wCkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjNTE3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi4wCkBAIC0wLDAgKzEsNjYgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuNSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTYxZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuNQpAQCAtMCwwICsxLDY2IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGQpIGFuZCA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMy4wCkBAIC0wLDAgKzEsNzIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOwordG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLCIgb3IgYSBtb2RpZmljYXRpb24gY291bGQgaW5kaWNhdGUgIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLiI7Cit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gQWRhcHRhdGlvbnMuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbiA0KGQpLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChjKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGFuIEFkYXB0YXRpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQWRhcHRhdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCwgKGl2KSBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYykgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3VyIGV4ZXJjaXNlIG9mIHN1Y2ggcmlnaHRzIGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChiKSBhbmQgb3RoZXJ3aXNlIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgdGhhdCBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYykuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGUgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZDg0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMS4wCkBAIC0wLDAgKzEsNSBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzLU5vbkNvbW1lcmNpYWwgMS4wICBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuIExpY2Vuc2UgIFRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELiAgQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4gIDEuIERlZmluaXRpb25zICAiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuICJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLiAiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4gMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLiAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OiAgdG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOyB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOyBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4gIDQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczogIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lciAgQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OiBMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7IFRoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLiA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgNy4gVGVybWluYXRpb24gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLiA4LiBNaXNjZWxsYW5lb3VzICBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LiBDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4gIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gIENyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2YzE3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi4wCkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIERlcml2YXRpdmUgV29ya3MuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdhYTU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjUKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cyAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGQpIGFuZCA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTU0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTMuMApAQCAtMCwwICsxLDY5IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cyAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnMuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBBZGFwdGF0aW9ucy4gU3ViamVjdCB0byA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNChkKS4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYykgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHRoYXQgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGIpLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzlmZDZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0xLjAKQEAgLTAsMCArMSw2NCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjA3ZjgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjAKQEAgLTAsMCArMSw2OCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgTm9uY29tbWVyY2lhbCwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChlKSBhbmQgNChmKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuMCBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1Y2NjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi41CkBAIC0wLDAgKzEsNjggQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZSkgYW5kIDQoZikuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoZCksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChkKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi41IEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjYjFjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMy4wCkBAIC0wLDAgKzEsNzQgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShnKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBOb25jb21tZXJjaWFsLCBTaGFyZUFsaWtlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOwordG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLCIgb3IgYSBtb2RpZmljYXRpb24gY291bGQgaW5kaWNhdGUgIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLiI7Cit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gQWRhcHRhdGlvbnMuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChkKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGFuIEFkYXB0YXRpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQWRhcHRhdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChkKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiBvbmx5IHVuZGVyOiAoaSkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZTsgKGlpKSBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2U7IChpaWkpIGEgQ3JlYXRpdmUgQ29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSAoZWl0aGVyIHRoaXMgb3IgYSBsYXRlciBsaWNlbnNlIHZlcnNpb24pIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4sIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAzLjAgVVMpICgiQXBwbGljYWJsZSBMaWNlbnNlIikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVVJJLCBmb3IgQXBwbGljYWJsZSBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBlYWNoIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGFzIGluY2x1ZGVkIGluIHRoZSBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgQWRhcHRhdGlvbiwgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBBZGFwdGF0aW9uIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYikgYXBwbGllcyB0byB0aGUgQWRhcHRhdGlvbiBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIEFkYXB0YXRpb24gaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZS4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb24tbmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kLCAoaXYpIGNvbnNpc3RlbnQgd2l0aCBTZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChkKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdXIgZXhlcmNpc2Ugb2Ygc3VjaCByaWdodHMgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGMpIGFuZCBvdGhlcndpc2Ugd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKS4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcgQU5EIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhJUyBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1ODE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMS4wCkBAIC0wLDAgKzEsNTkgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZC4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzk3NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuMApAQCAtMCwwICsxLDYyIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIERlcml2YXRpdmUgV29ya3MuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuNSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTQ1NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuNQpAQCAtMCwwICsxLDYyIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIERlcml2YXRpdmUgV29ya3MuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjRlMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTMuMApAQCAtMCwwICsxLDY4IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBBZGFwdGF0aW9ucy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGIpLCBhcyByZXF1ZXN0ZWQuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChiKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjEzOTRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0xLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tU2hhcmVBbGlrZSAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjQzNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuMApAQCAtMCwwICsxLDY3IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuMCBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhkZDVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjUKQEAgLTAsMCArMSw2NyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIFNoYXJlQWxpa2UuCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi41IEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGJiZDZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0zLjAKQEAgLTAsMCArMSw3NCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkNyZWF0aXZlIENvbW1vbnMgQ29tcGF0aWJsZSBMaWNlbnNlIiBtZWFucyBhIGxpY2Vuc2UgdGhhdCBpcyBsaXN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvY29tcGF0aWJsZWxpY2Vuc2VzIHRoYXQgaGFzIGJlZW4gYXBwcm92ZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucyBhcyBiZWluZyBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nLCBhdCBhIG1pbmltdW0sIGJlY2F1c2UgdGhhdCBsaWNlbnNlOiAoaSkgY29udGFpbnMgdGVybXMgdGhhdCBoYXZlIHRoZSBzYW1lIHB1cnBvc2UsIG1lYW5pbmcgYW5kIGVmZmVjdCBhcyB0aGUgTGljZW5zZSBFbGVtZW50cyBvZiB0aGlzIExpY2Vuc2U7IGFuZCwgKGlpKSBleHBsaWNpdGx5IHBlcm1pdHMgdGhlIHJlbGljZW5zaW5nIG9mIGFkYXB0YXRpb25zIG9mIHdvcmtzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoYXQgbGljZW5zZSB1bmRlciB0aGlzIExpY2Vuc2Ugb3IgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIFNoYXJlQWxpa2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChjKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGFuIEFkYXB0YXRpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQWRhcHRhdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZjogKGkpIHRoaXMgTGljZW5zZTsgKGlpKSBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2U7IChpaWkpIGEgQ3JlYXRpdmUgQ29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSAoZWl0aGVyIHRoaXMgb3IgYSBsYXRlciBsaWNlbnNlIHZlcnNpb24pIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4sIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMy4wIFVTKSk7IChpdikgYSBDcmVhdGl2ZSBDb21tb25zIENvbXBhdGlibGUgTGljZW5zZS4gSWYgeW91IGxpY2Vuc2UgdGhlIEFkYXB0YXRpb24gdW5kZXIgb25lIG9mIHRoZSBsaWNlbnNlcyBtZW50aW9uZWQgaW4gKGl2KSwgeW91IG11c3QgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZS4gSWYgeW91IGxpY2Vuc2UgdGhlIEFkYXB0YXRpb24gdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBvZiB0aGUgbGljZW5zZXMgbWVudGlvbmVkIGluIChpKSwgKGlpKSBvciAoaWlpKSAodGhlICJBcHBsaWNhYmxlIExpY2Vuc2UiKSwgeW91IG11c3QgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UgZ2VuZXJhbGx5IGFuZCB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnM6IChJKSBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVSSSBmb3IsIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIGVhY2ggQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtOyAoSUkpIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBBZGFwdGF0aW9uIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZTsgKElJSSkgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBhcyBpbmNsdWRlZCBpbiB0aGUgQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtOyAoSVYpIHdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgQWRhcHRhdGlvbiwgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBBZGFwdGF0aW9uIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYikgYXBwbGllcyB0byB0aGUgQWRhcHRhdGlvbiBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIEFkYXB0YXRpb24gaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZS4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIChpdikgLCBjb25zaXN0ZW50IHdpdGggU3NlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGMpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhlIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDMC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDMC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjZjg4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MwLTEuMApAQCAtMCwwICsxLDMyIEBACisKK0NyZWF0aXZlIENvbW1vbnMgWmVybyAxLjAgVW5pdmVyc2FsIChDQzApCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERPQ1VNRU5UIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgVVNFIE9GIFRISVMgRE9DVU1FTlQgT1IgVEhFIElORk9STUFUSU9OIE9SIFdPUktTIFBST1ZJREVEIEhFUkVVTkRFUiwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIERPQ1VNRU5UIE9SIFRIRSBJTkZPUk1BVElPTiBPUiBXT1JLUyBQUk9WSURFRCBIRVJFVU5ERVIuCitTdGF0ZW1lbnQgb2YgUHVycG9zZQorCitUaGUgbGF3cyBvZiBtb3N0IGp1cmlzZGljdGlvbnMgdGhyb3VnaG91dCB0aGUgd29ybGQgYXV0b21hdGljYWxseSBjb25mZXIgZXhjbHVzaXZlIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgKGRlZmluZWQgYmVsb3cpIHVwb24gdGhlIGNyZWF0b3IgYW5kIHN1YnNlcXVlbnQgb3duZXIocykgKGVhY2ggYW5kIGFsbCwgYW4gIm93bmVyIikgb2YgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwIGFuZC9vciBhIGRhdGFiYXNlIChlYWNoLCBhICJXb3JrIikuCisKK0NlcnRhaW4gb3duZXJzIHdpc2ggdG8gcGVybWFuZW50bHkgcmVsaW5xdWlzaCB0aG9zZSByaWdodHMgdG8gYSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiBjb250cmlidXRpbmcgdG8gYSBjb21tb25zIG9mIGNyZWF0aXZlLCBjdWx0dXJhbCBhbmQgc2NpZW50aWZpYyB3b3JrcyAoIkNvbW1vbnMiKSB0aGF0IHRoZSBwdWJsaWMgY2FuIHJlbGlhYmx5IGFuZCB3aXRob3V0IGZlYXIgb2YgbGF0ZXIgY2xhaW1zIG9mIGluZnJpbmdlbWVudCBidWlsZCB1cG9uLCBtb2RpZnksIGluY29ycG9yYXRlIGluIG90aGVyIHdvcmtzLCByZXVzZSBhbmQgcmVkaXN0cmlidXRlIGFzIGZyZWVseSBhcyBwb3NzaWJsZSBpbiBhbnkgZm9ybSB3aGF0c29ldmVyIGFuZCBmb3IgYW55IHB1cnBvc2VzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvbW1lcmNpYWwgcHVycG9zZXMuIFRoZXNlIG93bmVycyBtYXkgY29udHJpYnV0ZSB0byB0aGUgQ29tbW9ucyB0byBwcm9tb3RlIHRoZSBpZGVhbCBvZiBhIGZyZWUgY3VsdHVyZSBhbmQgdGhlIGZ1cnRoZXIgcHJvZHVjdGlvbiBvZiBjcmVhdGl2ZSwgY3VsdHVyYWwgYW5kIHNjaWVudGlmaWMgd29ya3MsIG9yIHRvIGdhaW4gcmVwdXRhdGlvbiBvciBncmVhdGVyIGRpc3RyaWJ1dGlvbiBmb3IgdGhlaXIgV29yayBpbiBwYXJ0IHRocm91Z2ggdGhlIHVzZSBhbmQgZWZmb3J0cyBvZiBvdGhlcnMuCisKK0ZvciB0aGVzZSBhbmQvb3Igb3RoZXIgcHVycG9zZXMgYW5kIG1vdGl2YXRpb25zLCBhbmQgd2l0aG91dCBhbnkgZXhwZWN0YXRpb24gb2YgYWRkaXRpb25hbCBjb25zaWRlcmF0aW9uIG9yIGNvbXBlbnNhdGlvbiwgdGhlIHBlcnNvbiBhc3NvY2lhdGluZyBDQzAgd2l0aCBhIFdvcmsgKHRoZSAiQWZmaXJtZXIiKSwgdG8gdGhlIGV4dGVudCB0aGF0IGhlIG9yIHNoZSBpcyBhbiBvd25lciBvZiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrLCB2b2x1bnRhcmlseSBlbGVjdHMgdG8gYXBwbHkgQ0MwIHRvIHRoZSBXb3JrIGFuZCBwdWJsaWNseSBkaXN0cmlidXRlIHRoZSBXb3JrIHVuZGVyIGl0cyB0ZXJtcywgd2l0aCBrbm93bGVkZ2Ugb2YgaGlzIG9yIGhlciBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIGFuZCB0aGUgbWVhbmluZyBhbmQgaW50ZW5kZWQgbGVnYWwgZWZmZWN0IG9mIENDMCBvbiB0aG9zZSByaWdodHMuCisKKzEuIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMuIEEgV29yayBtYWRlIGF2YWlsYWJsZSB1bmRlciBDQzAgbWF5IGJlIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzICgiQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyIpLiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHRoZSBmb2xsb3dpbmc6CisKK3RoZSByaWdodCB0byByZXByb2R1Y2UsIGFkYXB0LCBkaXN0cmlidXRlLCBwZXJmb3JtLCBkaXNwbGF5LCBjb21tdW5pY2F0ZSwgYW5kIHRyYW5zbGF0ZSBhIFdvcms7Cittb3JhbCByaWdodHMgcmV0YWluZWQgYnkgdGhlIG9yaWdpbmFsIGF1dGhvcihzKSBhbmQvb3IgcGVyZm9ybWVyKHMpOworcHVibGljaXR5IGFuZCBwcml2YWN5IHJpZ2h0cyBwZXJ0YWluaW5nIHRvIGEgcGVyc29uYHMgaW1hZ2Ugb3IgbGlrZW5lc3MgZGVwaWN0ZWQgaW4gYSBXb3JrOworcmlnaHRzIHByb3RlY3RpbmcgYWdhaW5zdCB1bmZhaXIgY29tcGV0aXRpb24gaW4gcmVnYXJkcyB0byBhIFdvcmssIHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIGluIHBhcmFncmFwaCA0KGEpLCBiZWxvdzsKK3JpZ2h0cyBwcm90ZWN0aW5nIHRoZSBleHRyYWN0aW9uLCBkaXNzZW1pbmF0aW9uLCB1c2UgYW5kIHJldXNlIG9mIGRhdGEgaW4gYSBXb3JrOworZGF0YWJhc2UgcmlnaHRzIChzdWNoIGFzIHRob3NlIGFyaXNpbmcgdW5kZXIgRGlyZWN0aXZlIDk2LzkvRUMgb2YgdGhlIEV1cm9wZWFuIFBhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24gb2YgZGF0YWJhc2VzLCBhbmQgdW5kZXIgYW55IG5hdGlvbmFsIGltcGxlbWVudGF0aW9uIHRoZXJlb2YsIGluY2x1ZGluZyBhbnkgYW1lbmRlZCBvciBzdWNjZXNzb3IgdmVyc2lvbiBvZiBzdWNoIGRpcmVjdGl2ZSk7IGFuZAorb3RoZXIgc2ltaWxhciwgZXF1aXZhbGVudCBvciBjb3JyZXNwb25kaW5nIHJpZ2h0cyB0aHJvdWdob3V0IHRoZSB3b3JsZCBiYXNlZCBvbiBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHksIGFuZCBhbnkgbmF0aW9uYWwgaW1wbGVtZW50YXRpb25zIHRoZXJlb2YuCisyLiBXYWl2ZXIuIFRvIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5LCBidXQgbm90IGluIGNvbnRyYXZlbnRpb24gb2YsIGFwcGxpY2FibGUgbGF3LCBBZmZpcm1lciBoZXJlYnkgb3ZlcnRseSwgZnVsbHksIHBlcm1hbmVudGx5LCBpcnJldm9jYWJseSBhbmQgdW5jb25kaXRpb25hbGx5IHdhaXZlcywgYWJhbmRvbnMsIGFuZCBzdXJyZW5kZXJzIGFsbCBvZiBBZmZpcm1lcmBzIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgYW5kIGFzc29jaWF0ZWQgY2xhaW1zIGFuZCBjYXVzZXMgb2YgYWN0aW9uLCB3aGV0aGVyIG5vdyBrbm93biBvciB1bmtub3duIChpbmNsdWRpbmcgZXhpc3RpbmcgYXMgd2VsbCBhcyBmdXR1cmUgY2xhaW1zIGFuZCBjYXVzZXMgb2YgYWN0aW9uKSwgaW4gdGhlIFdvcmsgKGkpIGluIGFsbCB0ZXJyaXRvcmllcyB3b3JsZHdpZGUsIChpaSkgZm9yIHRoZSBtYXhpbXVtIGR1cmF0aW9uIHByb3ZpZGVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSAoaW5jbHVkaW5nIGZ1dHVyZSB0aW1lIGV4dGVuc2lvbnMpLCAoaWlpKSBpbiBhbnkgY3VycmVudCBvciBmdXR1cmUgbWVkaXVtIGFuZCBmb3IgYW55IG51bWJlciBvZiBjb3BpZXMsIGFuZCAoaXYpIGZvciBhbnkgcHVycG9zZSB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nIG9yIHByb21vdGlvbmFsIHB1cnBvc2VzICh0aGUgIldhaXZlciIpLiBBZmZpcm1lciBtYWtlcyB0aGUgV2FpdmVyIGZvciB0aGUgYmVuZWZpdCBvZiBlYWNoIG1lbWJlciBvZiB0aGUgcHVibGljIGF0IGxhcmdlIGFuZCB0byB0aGUgZGV0cmltZW50IG9mIEFmZmlybWVyYHMgaGVpcnMgYW5kIHN1Y2Nlc3NvcnMsIGZ1bGx5IGludGVuZGluZyB0aGF0IHN1Y2ggV2FpdmVyIHNoYWxsIG5vdCBiZSBzdWJqZWN0IHRvIHJldm9jYXRpb24sIHJlc2Npc3Npb24sIGNhbmNlbGxhdGlvbiwgdGVybWluYXRpb24sIG9yIGFueSBvdGhlciBsZWdhbCBvciBlcXVpdGFibGUgYWN0aW9uIHRvIGRpc3J1cHQgdGhlIHF1aWV0IGVuam95bWVudCBvZiB0aGUgV29yayBieSB0aGUgcHVibGljIGFzIGNvbnRlbXBsYXRlZCBieSBBZmZpcm1lcmBzIGV4cHJlc3MgU3RhdGVtZW50IG9mIFB1cnBvc2UuCisKKzMuIFB1YmxpYyBMaWNlbnNlIEZhbGxiYWNrLiBTaG91bGQgYW55IHBhcnQgb2YgdGhlIFdhaXZlciBmb3IgYW55IHJlYXNvbiBiZSBqdWRnZWQgbGVnYWxseSBpbnZhbGlkIG9yIGluZWZmZWN0aXZlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGVuIHRoZSBXYWl2ZXIgc2hhbGwgYmUgcHJlc2VydmVkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgdGFraW5nIGludG8gYWNjb3VudCBBZmZpcm1lcmBzIGV4cHJlc3MgU3RhdGVtZW50IG9mIFB1cnBvc2UuIEluIGFkZGl0aW9uLCB0byB0aGUgZXh0ZW50IHRoZSBXYWl2ZXIgaXMgc28ganVkZ2VkIEFmZmlybWVyIGhlcmVieSBncmFudHMgdG8gZWFjaCBhZmZlY3RlZCBwZXJzb24gYSByb3lhbHR5LWZyZWUsIG5vbiB0cmFuc2ZlcmFibGUsIG5vbiBzdWJsaWNlbnNhYmxlLCBub24gZXhjbHVzaXZlLCBpcnJldm9jYWJsZSBhbmQgdW5jb25kaXRpb25hbCBsaWNlbnNlIHRvIGV4ZXJjaXNlIEFmZmlybWVyYHMgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yayAoaSkgaW4gYWxsIHRlcnJpdG9yaWVzIHdvcmxkd2lkZSwgKGlpKSBmb3IgdGhlIG1heGltdW0gZHVyYXRpb24gcHJvdmlkZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgdHJlYXR5IChpbmNsdWRpbmcgZnV0dXJlIHRpbWUgZXh0ZW5zaW9ucyksIChpaWkpIGluIGFueSBjdXJyZW50IG9yIGZ1dHVyZSBtZWRpdW0gYW5kIGZvciBhbnkgbnVtYmVyIG9mIGNvcGllcywgYW5kIChpdikgZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcgb3IgcHJvbW90aW9uYWwgcHVycG9zZXMgKHRoZSAiTGljZW5zZSIpLiBUaGUgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIENDMCB3YXMgYXBwbGllZCBieSBBZmZpcm1lciB0byB0aGUgV29yay4gU2hvdWxkIGFueSBwYXJ0IG9mIHRoZSBMaWNlbnNlIGZvciBhbnkgcmVhc29uIGJlIGp1ZGdlZCBsZWdhbGx5IGludmFsaWQgb3IgaW5lZmZlY3RpdmUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHN1Y2ggcGFydGlhbCBpbnZhbGlkaXR5IG9yIGluZWZmZWN0aXZlbmVzcyBzaGFsbCBub3QgaW52YWxpZGF0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBMaWNlbnNlLCBhbmQgaW4gc3VjaCBjYXNlIEFmZmlybWVyIGhlcmVieSBhZmZpcm1zIHRoYXQgaGUgb3Igc2hlIHdpbGwgbm90IChpKSBleGVyY2lzZSBhbnkgb2YgaGlzIG9yIGhlciByZW1haW5pbmcgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yayBvciAoaWkpIGFzc2VydCBhbnkgYXNzb2NpYXRlZCBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBpbiBlaXRoZXIgY2FzZSBjb250cmFyeSB0byBBZmZpcm1lcmBzIGV4cHJlc3MgU3RhdGVtZW50IG9mIFB1cnBvc2UuCisKKzQuIExpbWl0YXRpb25zIGFuZCBEaXNjbGFpbWVycy4KKworTm8gdHJhZGVtYXJrIG9yIHBhdGVudCByaWdodHMgaGVsZCBieSBBZmZpcm1lciBhcmUgd2FpdmVkLCBhYmFuZG9uZWQsIHN1cnJlbmRlcmVkLCBsaWNlbnNlZCBvciBvdGhlcndpc2UgYWZmZWN0ZWQgYnkgdGhpcyBkb2N1bWVudC4KK0FmZmlybWVyIG9mZmVycyB0aGUgV29yayBhcy1pcyBhbmQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIG9yIHdhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgV29yaywgZXhwcmVzcywgaW1wbGllZCwgc3RhdHV0b3J5IG9yIG90aGVyd2lzZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB3YXJyYW50aWVzIG9mIHRpdGxlLCBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBub24gaW5mcmluZ2VtZW50LCBvciB0aGUgYWJzZW5jZSBvZiBsYXRlbnQgb3Igb3RoZXIgZGVmZWN0cywgYWNjdXJhY3ksIG9yIHRoZSBwcmVzZW50IG9yIGFic2VuY2Ugb2YgZXJyb3JzLCB3aGV0aGVyIG9yIG5vdCBkaXNjb3ZlcmFibGUsIGFsbCB0byB0aGUgZ3JlYXRlc3QgZXh0ZW50IHBlcm1pc3NpYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQWZmaXJtZXIgZGlzY2xhaW1zIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhcmluZyByaWdodHMgb2Ygb3RoZXIgcGVyc29ucyB0aGF0IG1heSBhcHBseSB0byB0aGUgV29yayBvciBhbnkgdXNlIHRoZXJlb2YsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHBlcnNvbmBzIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsuIEZ1cnRoZXIsIEFmZmlybWVyIGRpc2NsYWltcyByZXNwb25zaWJpbGl0eSBmb3Igb2J0YWluaW5nIGFueSBuZWNlc3NhcnkgY29uc2VudHMsIHBlcm1pc3Npb25zIG9yIG90aGVyIHJpZ2h0cyByZXF1aXJlZCBmb3IgYW55IHVzZSBvZiB0aGUgV29yay4KK0FmZmlybWVyIHVuZGVyc3RhbmRzIGFuZCBhY2tub3dsZWRnZXMgdGhhdCBDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgZG9jdW1lbnQgYW5kIGhhcyBubyBkdXR5IG9yIG9ibGlnYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoaXMgQ0MwIG9yIHVzZSBvZiB0aGUgV29yay4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRERMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0RETC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxOThlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0RETC0xLjAKQEAgLTAsMCArMSwxMzEgQEAKKworQ09NTU9OIERFVkVMT1BNRU5UIEFORCBESVNUUklCVVRJT04gTElDRU5TRSAoQ0RETCkKK1ZlcnNpb24gMS4wCisxLiBEZWZpbml0aW9ucy4KKworMS4xLiAmIzgyMjA7Q29udHJpYnV0b3ImIzgyMjE7IG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICYjODIyMDtDb250cmlidXRvciBWZXJzaW9uJiM4MjIxOyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciAoaWYgYW55KSwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICYjODIyMDtDb3ZlcmVkIFNvZnR3YXJlJiM4MjIxOyBtZWFucyAoYSkgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoYikgTW9kaWZpY2F0aW9ucywgb3IgKGMpIHRoZSBjb21iaW5hdGlvbiBvZiBmaWxlcyBjb250YWluaW5nIE9yaWdpbmFsIFNvZnR3YXJlIHdpdGggZmlsZXMgY29udGFpbmluZyBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gJiM4MjIwO0V4ZWN1dGFibGUmIzgyMjE7IG1lYW5zIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNS4gJiM4MjIwO0luaXRpYWwgRGV2ZWxvcGVyJiM4MjIxOyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBmaXJzdCBtYWtlcyBPcmlnaW5hbCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjYuICYjODIyMDtMYXJnZXIgV29yayYjODIyMTsgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNy4gJiM4MjIwO0xpY2Vuc2UmIzgyMjE7IG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOC4gJiM4MjIwO0xpY2Vuc2FibGUmIzgyMjE7IG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICYjODIyMDtNb2RpZmljYXRpb25zJiM4MjIxOyBtZWFucyB0aGUgU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworQS4gQW55IGZpbGUgdGhhdCByZXN1bHRzIGZyb20gYW4gYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20gb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zOworCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uOyBvcgorCitDLiBBbnkgbmV3IGZpbGUgdGhhdCBpcyBjb250cmlidXRlZCBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS4xMC4gJiM4MjIwO09yaWdpbmFsIFNvZnR3YXJlJiM4MjIxOyBtZWFucyB0aGUgU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHRoYXQgaXMgb3JpZ2luYWxseSByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICYjODIyMDtQYXRlbnQgQ2xhaW1zJiM4MjIxOyBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMi4gJiM4MjIwO1NvdXJjZSBDb2RlJiM4MjIxOyBtZWFucyAoYSkgdGhlIGNvbW1vbiBmb3JtIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgaW4gd2hpY2ggbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSBhbmQgKGIpIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCBpbiBvciB3aXRoIHN1Y2ggY29kZS4KKworMS4xMy4gJiM4MjIwO1lvdSYjODIyMTsgKG9yICYjODIyMDtZb3VyJiM4MjIxOykgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAmIzgyMjA7WW91JiM4MjIxOyBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgJiM4MjIwO2NvbnRyb2wmIzgyMjE7IG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBMaWNlbnNlIEdyYW50cy4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKK0NvbmRpdGlvbmVkIHVwb24gWW91ciBjb21wbGlhbmNlIHdpdGggU2VjdGlvbiAzLjEgYmVsb3cgYW5kIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBTb2Z0d2FyZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBvciBvdGhlcndpc2UgbWFrZXMgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6ICgxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yICgyKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KKworQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIFNvZnR3YXJlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6ICgxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAoMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBkaXN0cmlidXRlcyBvciBvdGhlcndpc2UgbWFrZXMgdGhlIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6ICgxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgKDMpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBDb3ZlcmVkIFNvZnR3YXJlIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGluIEV4ZWN1dGFibGUgZm9ybSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSBhbmQgdGhhdCBTb3VyY2UgQ29kZSBmb3JtIG11c3QgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3JtIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZS4gWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgb2YgYW55IHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gYXMgdG8gaG93IHRoZXkgY2FuIG9idGFpbiBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUgZm9ybSBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCisKKzMuMi4gTW9kaWZpY2F0aW9ucy4KKworVGhlIE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgcmVwcmVzZW50IHRoYXQgWW91IGJlbGlldmUgWW91ciBNb2RpZmljYXRpb25zIGFyZSBZb3VyIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy4zLiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBpbmNsdWRlIGEgbm90aWNlIGluIGVhY2ggb2YgWW91ciBNb2RpZmljYXRpb25zIHRoYXQgaWRlbnRpZmllcyBZb3UgYXMgdGhlIENvbnRyaWJ1dG9yIG9mIHRoZSBNb2RpZmljYXRpb24uIFlvdSBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIG9yIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGdpdmluZyBhdHRyaWJ1dGlvbiB0byBhbnkgQ29udHJpYnV0b3Igb3IgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorCiszLjQuIEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXMuCisKK1lvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUgZm9ybSB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyBoZXJldW5kZXIuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlLiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNS4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBmb3JtIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIGZvcm0gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50JiM4MjE3O3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSBmb3JtIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSwgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjYuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKKzQuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis0LjEuIE5ldyBWZXJzaW9ucy4KKworU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpcyB0aGUgaW5pdGlhbCBsaWNlbnNlIHN0ZXdhcmQgYW5kIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIEV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDQuMywgbm8gb25lIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2Ugc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UuCisKKzQuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUuIElmIHRoZSBJbml0aWFsIERldmVsb3BlciBpbmNsdWRlcyBhIG5vdGljZSBpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgcHJvaGliaXRpbmcgaXQgZnJvbSBiZWluZyBkaXN0cmlidXRlZCBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdW5kZXIgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG11c3QgZGlzdHJpYnV0ZSBhbmQgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBPdGhlcndpc2UsIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgdGhlIGxpY2Vuc2Ugc3Rld2FyZC4KKworNC4zLiBNb2RpZmllZCBWZXJzaW9ucy4KKworV2hlbiBZb3UgYXJlIGFuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBZb3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgbGljZW5zZSBmb3IgWW91ciBPcmlnaW5hbCBTb2Z0d2FyZSwgWW91IG1heSBjcmVhdGUgYW5kIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlmIFlvdTogKGEpIHJlbmFtZSB0aGUgbGljZW5zZSBhbmQgcmVtb3ZlIGFueSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lIG9mIHRoZSBsaWNlbnNlIHN0ZXdhcmQgKGV4Y2VwdCB0byBub3RlIHRoYXQgdGhlIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSk7IGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuCisKKzUuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICYjODIyMDtBUyBJUyYjODIyMTsgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIFNPRlRXQVJFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzYuIFRFUk1JTkFUSU9OLgorCis2LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzYuMi4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGFzc2VydCBzdWNoIGNsYWltIGlzIHJlZmVycmVkIHRvIGFzICYjODIyMDtQYXJ0aWNpcGFudCYjODIyMTspIGFsbGVnaW5nIHRoYXQgdGhlIFBhcnRpY2lwYW50IFNvZnR3YXJlIChtZWFuaW5nIHRoZSBDb250cmlidXRvciBWZXJzaW9uIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyBhIENvbnRyaWJ1dG9yIG9yIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aGVyZSB0aGUgUGFydGljaXBhbnQgaXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyKSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQsIHRoZSBJbml0aWFsIERldmVsb3BlciAoaWYgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGlzIG5vdCB0aGUgUGFydGljaXBhbnQpIGFuZCBhbGwgQ29udHJpYnV0b3JzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5IGFuZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSBleHBpcmF0aW9uIG9mIHN1Y2ggNjAgZGF5IG5vdGljZSBwZXJpb2QsIHVubGVzcyBpZiB3aXRoaW4gc3VjaCA2MCBkYXkgcGVyaW9kIFlvdSB3aXRoZHJhdyBZb3VyIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50IGVpdGhlciB1bmlsYXRlcmFsbHkgb3IgcHVyc3VhbnQgdG8gYSB3cml0dGVuIGFncmVlbWVudCB3aXRoIFBhcnRpY2lwYW50LgorCis2LjMuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA2LjEgb3IgNi4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZXMgdGhhdCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIChleGNsdWRpbmcgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgYnkgYW55IGRpc3RyaWJ1dG9yKSBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis3LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgU09GVFdBUkUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TVCBQUk9GSVRTLCBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFkmIzgyMTc7UyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis4LiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCitUaGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBhICYjODIyMDtjb21tZXJjaWFsIGl0ZW0sJiM4MjIxOyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUmIzgyMjE7IChhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBhdCA0OCBDLkYuUi4gJiMxNjc7IDI1Mi4yMjctNzAxNChhKSgxKSkgYW5kICYjODIyMDtjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24mIzgyMjE7IGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uIFRoaXMgVS5TLiBHb3Zlcm5tZW50IFJpZ2h0cyBjbGF1c2UgaXMgaW4gbGlldSBvZiwgYW5kIHN1cGVyc2VkZXMsIGFueSBvdGhlciBGQVIsIERGQVIsIG9yIG90aGVyIGNsYXVzZSBvciBwcm92aXNpb24gdGhhdCBhZGRyZXNzZXMgR292ZXJubWVudCByaWdodHMgaW4gY29tcHV0ZXIgc29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis5LiBNSVNDRUxMQU5FT1VTLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXcgb2YgdGhlIGp1cmlzZGljdGlvbiBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkIHdpdGhpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBzdWNoIGp1cmlzZGljdGlvbiYjODIxNztzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgbG9jYXRlZCBpbiB0aGUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkIHdpdGhpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMmIzgyMTc7IGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4gWW91IGFncmVlIHRoYXQgWW91IGFsb25lIGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyAoYW5kIHRoZSBleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpIHdoZW4gWW91IHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgYW55IENvdmVyZWQgU29mdHdhcmUuCisKKzEwLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDMxNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMS4wCkBAIC0wLDAgKzEsMjQyIEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkJiM4MjE3O3VuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZCYjODIxNzt1bmUgcGFydCwgc2EgY29uZm9ybWl0JiMyMzM7IGF1IGRyb2l0IGZyYW4mIzIzMTthaXMsIHRhbnQgYXUgcmVnYXJkIGR1IGRyb2l0IGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgY2l2aWxlIHF1ZSBkdSBkcm9pdCBkZSBsYSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGRlIGxhIHByb3RlY3Rpb24gcXUmIzgyMTc7aWwgb2ZmcmUgYXV4IGF1dGV1cnMgZXQgdGl0dWxhaXJlcyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgdW4gbG9naWNpZWwuCitkJiM4MjE3O2F1dHJlIHBhcnQsIGxlIHJlc3BlY3QgZGVzIHByaW5jaXBlcyBkZSBkaWZmdXNpb24gZGVzIGxvZ2ljaWVscyBsaWJyZXM6IGFjYyYjMjMyO3MgYXUgY29kZSBzb3VyY2UsIGRyb2l0cyAmIzIzMzt0ZW5kdXMgY29uZiYjMjMzO3ImIzIzMztzIGF1eCB1dGlsaXNhdGV1cnMuCitMZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlIENlQ0lMTDEgc29udDoKKworQ29tbWlzc2FyaWF0ICYjMjI0OyBsJiM4MjE3O0VuZXJnaWUgQXRvbWlxdWUgJiM4MjExOyBDRUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgZGUgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIHRlY2huaXF1ZSBldCBpbmR1c3RyaWVsLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMzEtMzMgcnVlIGRlIGxhIEYmIzIzMztkJiMyMzM7cmF0aW9uLCA3NTc1MiBQQVJJUyBjZWRleCAxNS4KKworQ2VudHJlIE5hdGlvbmFsIGRlIGxhIFJlY2hlcmNoZSBTY2llbnRpZmlxdWUgJiM4MjExOyBDTlJTLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMgcnVlIE1pY2hlbC1BbmdlIDc1Nzk0IFBhcmlzIGNlZGV4IDE2LgorCitJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlICYjODIxMTsgSU5SSUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUCAxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXguCisKK1BSRUFNQlVMRQorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBkb250IGxgb2JqZWN0aWYgZXN0IGRlIGNvbmYmIzIzMztyZXIgYXV4IHV0aWxpc2F0ZXVycyBsYSBsaWJlcnQmIzIzMzsgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIGR1IGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgY2V0dGUgbGljZW5jZSBkYW5zIGxlIGNhZHJlIGRgdW4gbW9kJiMyMzI7bGUgZGUgZGlmZnVzaW9uICYjMTcxO29wZW4gc291cmNlJiMxODc7LgorCitMYGV4ZXJjaWNlIGRlIGNlcyBsaWJlcnQmIzIzMztzIGVzdCBhc3NvcnRpIGRlIGNlcnRhaW5zIGRldm9pcnMgJiMyMjQ7IGxhIGNoYXJnZSBkZXMgdXRpbGlzYXRldXJzIGFmaW4gZGUgcHImIzIzMztzZXJ2ZXIgY2Ugc3RhdHV0IGF1IGNvdXJzIGRlcyByZWRpc3RyaWJ1dGlvbnMgdWx0JiMyMzM7cmlldXJlcy4KKworTCYjODIxNzthY2Nlc3NpYmlsaXQmIzIzMzsgYXUgY29kZSBzb3VyY2UgZXQgbGVzIGRyb2l0cyBkZSBjb3BpZSwgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIHF1aSBlbiBkJiMyMzM7Y291bGVudCBvbnQgcG91ciBjb250cmVwYXJ0aWUgZGUgbiYjODIxNztvZmZyaXIgYXV4IHV0aWxpc2F0ZXVycyBxdSYjODIxNzt1bmUgZ2FyYW50aWUgbGltaXQmIzIzMztlIGV0IGRlIG5lIGZhaXJlIHBlc2VyIHN1ciBsJiM4MjE3O2F1dGV1ciBkdSBsb2dpY2llbCwgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGV0IGxlcyBjb25jJiMyMzM7ZGFudHMgc3VjY2Vzc2lmcyBxdSYjODIxNzt1bmUgcmVzcG9uc2FiaWxpdCYjMjMzOyByZXN0cmVpbnRlLgorCitBIGNldCAmIzIzMztnYXJkIGwmIzgyMTc7YXR0ZW50aW9uIGRlIGwmIzgyMTc7dXRpbGlzYXRldXIgZXN0IGF0dGlyJiMyMzM7ZSBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbCYjODIxNzt1dGlsaXNhdGlvbiwgJiMyMjQ7IGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBsb2dpY2llbCBwYXIgbCYjODIxNzt1dGlsaXNhdGV1ciAmIzIzMzt0YW50IGRvbm4mIzIzMzsgc2Egc3AmIzIzMztjaWZpY2l0JiMyMzM7IGRlIGxvZ2ljaWVsIGxpYnJlLCBxdWkgcGV1dCBsZSByZW5kcmUgY29tcGxleGUgJiMyMjQ7IG1hbmlwdWxlciBldCBxdWkgbGUgciYjMjMzO3NlcnZlIGRvbmMgJiMyMjQ7IGRlcyBkJiMyMzM7dmVsb3BwZXVycyBldCBkZXMgcHJvZmVzc2lvbm5lbHMgYXZlcnRpcyBwb3NzJiMyMzM7ZGFudCBkZXMgY29ubmFpc3NhbmNlcyBpbmZvcm1hdGlxdWVzIGFwcHJvZm9uZGllcy4gTGVzIHV0aWxpc2F0ZXVycyBzb250IGRvbmMgaW52aXQmIzIzMztzICYjMjI0OyBjaGFyZ2VyIGV0IHRlc3RlciBsJiM4MjE3O2FkJiMyMzM7cXVhdGlvbiBkdSBMb2dpY2llbCAmIzIyNDsgbGV1cnMgYmVzb2lucyBkYW5zIGRlcyBjb25kaXRpb25zIHBlcm1ldHRhbnQgZGBhc3N1cmVyIGxhIHMmIzIzMztjdXJpdCYjMjMzOyBkZSBsZXVycyBzeXN0JiMyMzI7bWVzIGV0IG91IGRlIGxldXJzIGRvbm4mIzIzMztlcyBldCwgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50LCAmIzIyNDsgbGB1dGlsaXNlciBldCBsYGV4cGxvaXRlciBkYW5zIGxlcyBtJiMyMzQ7bWUgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsJiM4MjE3OyYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzJiM4MjE3O2FwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbCYjODIxNztleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdSYjODIxNztpbCBjb250aWVudC4KKworQXJ0aWNsZSAxZXIgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdSYjODIxNztpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbCYjODIxNzthY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvZGUgU291cmNlOiBkJiMyMzM7c2lnbmUgbCYjODIxNztlbnNlbWJsZSBkZXMgaW5zdHJ1Y3Rpb25zIGV0IGRlcyBsaWduZXMgZGUgcHJvZ3JhbW1lIGR1IExvZ2ljaWVsIGV0IGF1cXVlbCBsJiM4MjE3O2FjYyYjMjMyO3MgZXN0IG4mIzIzMztjZXNzYWlyZSBlbiB2dWUgZGUgbW9kaWZpZXIgbGUgTG9naWNpZWwuCisKK0NvZGUgT2JqZXQ6IGQmIzIzMztzaWduZSBsZXMgZmljaGllcnMgYmluYWlyZXMgaXNzdXMgZGUgbGEgY29tcGlsYXRpb24gZHUgQ29kZSBTb3VyY2UuCisKK1RpdHVsYWlyZSA6IGQmIzIzMztzaWduZSBsZSBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiM4MjE3O2F1dGV1ciBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4KKworTGljZW5jaSYjMjMzOyhzKTogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cihzKSBkdSBMb2dpY2llbCBheWFudCBhY2NlcHQmIzIzMzsgbGUgQ29udHJhdC4KKworQ29udHJpYnV0ZXVyOiBkJiMyMzM7c2lnbmUgbGUgTGljZW5jaSYjMjMzOyBhdXRldXIgZCYjODIxNzthdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb25jJiMyMzM7ZGFudDogZCYjMjMzO3NpZ25lIGxlIFRpdHVsYWlyZSBvdSB0b3V0ZSBwZXJzb25uZSBwaHlzaXF1ZSBvdSBtb3JhbGUgZGlzdHJpYnVhbnQgbGUgTG9naWNpZWwgc291cyBsZSBDb250cmF0LgorCitDb250cmlidXRpb25zOiBkJiMyMzM7c2lnbmUgbCYjODIxNztlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsIHBhciB0b3V0IENvbnRyaWJ1dGV1ciwgYWluc2kgcXVlIGxlcyBNb2R1bGVzIFN0YXRpcXVlcy4KKworTW9kdWxlOiBkJiMyMzM7c2lnbmUgdW4gZW5zZW1ibGUgZGUgZmljaGllcnMgc291cmNlcyB5IGNvbXByaXMgbGV1ciBkb2N1bWVudGF0aW9uIHF1aSwgdW5lIGZvaXMgY29tcGlsJiMyMzM7IHNvdXMgZm9ybWUgZXgmIzIzMztjdXRhYmxlLCBwZXJtZXQgZGUgciYjMjMzO2FsaXNlciBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3Mgb3Ugc2VydmljZXMgc3VwcGwmIzIzMzttZW50YWlyZXMgJiMyMjQ7IGNldXggZm91cm5pcyBwYXIgbGUgTG9naWNpZWwuCisKK01vZHVsZSBEeW5hbWlxdWU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSwgY3ImIzIzMzsmIzIzMzsgcGFyIGxlIENvbnRyaWJ1dGV1ciwgaW5kJiMyMzM7cGVuZGFudCBkdSBMb2dpY2llbCwgdGVsIHF1ZSBjZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgc29udCBzb3VzIGZvcm1lIGRlIGRldXggZXgmIzIzMztjdXRhYmxlcyBpbmQmIzIzMztwZW5kYW50cyBxdWkgcyYjODIxNztleCYjMjMzO2N1dGVudCBkYW5zIHVuIGVzcGFjZSBkJiM4MjE3O2FkcmVzc2FnZSBpbmQmIzIzMztwZW5kYW50LCBsJiM4MjE3O3VuIGFwcGVsYW50IGwmIzgyMTc7YXV0cmUgYXUgbW9tZW50IGRlIGxldXIgZXgmIzIzMztjdXRpb24uCisKK01vZHVsZSBTdGF0aXF1ZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlIGNyJiMyMzM7JiMyMzM7IHBhciBsZSBDb250cmlidXRldXIgZXQgbGkmIzIzMzsgYXUgTG9naWNpZWwgcGFyIHVuIGxpZW4gc3RhdGlxdWUgcmVuZGFudCBsZXVyIGNvZGUgb2JqZXQgZCYjMjMzO3BlbmRhbnQgbGB1biBkZSBsYGF1dHJlLiBDZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgYXVxdWVsIGlsIGVzdCBsaSYjMjMzOywgc29udCByZWdyb3VwJiMyMzM7cyBlbiB1biBzZXVsIGV4JiMyMzM7Y3V0YWJsZS4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgcyYjODIxNztlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZCYjODIxNzt1bmUgTGljZW5jZSBub24gZXhjbHVzaXZlLCB0cmFuc2YmIzIzMztyYWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMS4gTCYjODIxNzthY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZXMgdGVybWVzIGR1IENvbnRyYXQgZXN0IHImIzIzMztwdXQmIzIzMztlIGFjcXVpc2UgZHUgZmFpdCBkdSBwcmVtaWVyIGRlcyBmYWl0cyBzdWl2YW50czoKKworKGkpIGxlIGNoYXJnZW1lbnQgZHUgTG9naWNpZWwgcGFyIHRvdXQgbW95ZW4gbm90YW1tZW50IHBhciB0JiMyMzM7bCYjMjMzO2NoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkJiM4MjE3O3VuIHNlcnZldXIgZGlzdGFudCBvdSBwYXIgY2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGQmIzgyMTc7dW4gc3VwcG9ydCBwaHlzaXF1ZTsKKyhpaSkgbGUgcHJlbWllciBleGVyY2ljZSBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZSBsJiM4MjE3O3VuIHF1ZWxjb25xdWUgZGVzIGRyb2l0cyBjb25jJiMyMzM7ZCYjMjMzO3MgcGFyIGxlIENvbnRyYXQuCiszLjIuIFVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwgY29udGVuYW50IG5vdGFtbWVudCB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgYXV4IHNwJiMyMzM7Y2lmaWNpdCYjMjMzO3MgZHUgTG9naWNpZWwsICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCAmIzIyNDsgbGEgbGltaXRhdGlvbiAmIzIyNDsgdW4gdXNhZ2UgcGFyIGRlcyB1dGlsaXNhdGV1cnMgZXhwJiMyMzM7cmltZW50JiMyMzM7cyBhICYjMjMzO3QmIzIzMzsgbWlzICYjMjI0OyBkaXNwb3NpdGlvbiBkdSBMaWNlbmNpJiMyMzM7IHByJiMyMzM7YWxhYmxlbWVudCAmIzIyNDsgc29uIGFjY2VwdGF0aW9uIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgJiMyMjQ7IGxgYXJ0aWNsZSAzLjEgY2kgZGVzc3VzIGV0IGxlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgZW4gYXZvaXIgcHJpcyBjb25uYWlzc2FuY2VzLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEuRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yLiBEVVJFRQorCitMZSBDb250cmF0IHByb2R1aXJhIHNlcyBlZmZldHMgcGVuZGFudCB0b3V0ZSBsYSBkdXImIzIzMztlIGwmIzIzMztnYWxlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggcG9ydGFudCBzdXIgbGUgTG9naWNpZWwuCisKK0FydGljbGUgNSAtIEVURU5EVUUgREVTIERST0lUUyBDT05DRURFUworCitMZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOywgcXVpIGFjY2VwdGUsIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIExvZ2ljaWVsIHBvdXIgdG91dGVzIGRlc3RpbmF0aW9ucyBldCBwb3VyIGxhIGR1ciYjMjMzO2UgZHUgQ29udHJhdCBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKK1BhciBhaWxsZXVycywgbGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzsgJiMyMjQ7IHRpdHJlIGdyYWNpZXV4IGxlcyBkcm9pdHMgZCYjODIxNztleHBsb2l0YXRpb24gZHUgb3UgZGVzIGJyZXZldHMgcXUmIzgyMTc7aWwgZCYjMjMzO3RpZW50IHN1ciB0b3V0IG91IHBhcnRpZSBkZXMgaW52ZW50aW9ucyBpbXBsJiMyMzM7bWVudCYjMjMzO2VzIGRhbnMgbGUgTG9naWNpZWwuCisKKzUuMS4gRFJPSVRTIEQmIzgyMTc7VVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGQmIzgyMTc7YXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsJiM4MjE3O2FmZmljaGFnZSwgbCYjODIxNztleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkJiM4MjE3O2VuIG9ic2VydmVyLCBkJiM4MjE3O2VuICYjMjMzO3R1ZGllciwgb3UgZCYjODIxNztlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG4mIzgyMTc7aW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZCYjODIxNzthZmZpY2hhZ2UsIGQmIzgyMTc7ZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdSYjODIxNztpbCBlc3QgZW4gZHJvaXQgZCYjODIxNztlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yLiBEUk9JVCBEJiM4MjE3O0FQUE9SVEVSIERFUyBDT05UUklCVVRJT05TCisKK0xlIGRyb2l0IGQmIzgyMTc7YXBwb3J0ZXIgZGVzIENvbnRyaWJ1dGlvbnMgY29tcG9ydGUgbGUgZHJvaXQgZGUgdHJhZHVpcmUsIGQmIzgyMTc7YWRhcHRlciwgZCYjODIxNzthcnJhbmdlciBvdSBkJiM4MjE3O2FwcG9ydGVyIHRvdXRlIGF1dHJlIG1vZGlmaWNhdGlvbiBkdSBMb2dpY2llbCBldCBsZSBkcm9pdCBkZSByZXByb2R1aXJlIGxlIExvZ2ljaWVsIGVuIHImIzIzMztzdWx0YW50LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBhcHBvcnRlciB0b3V0ZSBDb250cmlidXRpb24gYXUgTG9naWNpZWwgc291cyByJiMyMzM7c2VydmUgZGUgbWVudGlvbm5lciwgZGUgZmEmIzIzMTtvbiBleHBsaWNpdGUsIHNvbiBub20gZW4gdGFudCBxdSYjODIxNzthdXRldXIgZGUgY2V0dGUgQ29udHJpYnV0aW9uIGV0IGxhIGRhdGUgZGUgY3ImIzIzMzthdGlvbiBkZSBjZWxsZS1jaS4KKworNS4zLiBEUk9JVFMgREUgRElTVFJJQlVUSU9OIEVUIERFIERJRkZVU0lPTgorCitMZSBkcm9pdCBkZSBkaXN0cmlidXRpb24gZXQgZGUgZGlmZnVzaW9uIGNvbXBvcnRlIG5vdGFtbWVudCBsZSBkcm9pdCBkZSB0cmFuc21ldHRyZSBldCBkZSBjb21tdW5pcXVlciBsZSBMb2dpY2llbCBhdSBwdWJsaWMgc3VyIHRvdXQgc3VwcG9ydCBldCBwYXIgdG91dCBtb3llbiBhaW5zaSBxdWUgbGUgZHJvaXQgZGUgbWV0dHJlIHN1ciBsZSBtYXJjaCYjMjMzOyAmIzIyNDsgdGl0cmUgb24mIzIzMztyZXV4IG91IGdyYXR1aXQsIHVuIG91IGRlcyBleGVtcGxhaXJlcyBkdSBMb2dpY2llbCBwYXIgdG91dCBwcm9jJiMyMzM7ZCYjMjMzOy4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMS4gUkVESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGRlcyBjb3BpZXMgY29uZm9ybWVzIGR1IExvZ2ljaWVsLCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIHJlZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2QmIzgyMTc7dW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkJiM4MjE3O3VuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSBhdXggZnV0dXJzIExpY2VuY2kmIzIzMztzIGQmIzgyMTc7YWNjJiMyMzM7ZGVyIGZhY2lsZW1lbnQgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGQmIzgyMTc7YWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZCYjODIxNzthY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4yLiBSRURJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBNT0RJRklFCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhcHBvcnRlIHVuZSBDb250cmlidXRpb24gYXUgTG9naWNpZWwsIGxlcyBjb25kaXRpb25zIGRlIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBzb250IGFsb3JzIHNvdW1pc2VzICYjMjI0OyBsJiM4MjE3O2ludCYjMjMzO2dyYWxpdCYjMjMzOyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgcmVkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZCYjODIxNzt1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2QmIzgyMTc7dW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IGNvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSBhdXggZnV0dXJzIExpY2VuY2kmIzIzMztzIGQmIzgyMTc7YWNjJiMyMzM7ZGVyIGZhY2lsZW1lbnQgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZW4gaW5kaXF1YW50IGxlcyBtb2RhbGl0JiMyMzM7cyBkJiM4MjE3O2FjYyYjMjMyO3MsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGQmIzgyMTc7YWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMy4gUkVESVNUUklCVVRJT04gREVTIE1PRFVMRVMgRFlOQU1JUVVFUworCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBEeW5hbWlxdWUgbGVzIGNvbmRpdGlvbnMgZHUgQ29udHJhdCBuZSBzJiM4MjE3O2FwcGxpcXVlbnQgcGFzICYjMjI0OyBjZSBNb2R1bGUgRHluYW1pcXVlLCBxdWkgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgZGlmZiYjMjMzO3JlbnQuCisKKzUuMy40LiBDT01QQVRJQklMSVRFIEFWRUMgTEEgTElDRU5DRSBHUEwKKworRGFucyBsZSBjYXMgbyYjMjQ5OyBsZSBMb2dpY2llbCwgTW9kaWZpJiMyMzM7IG91IG5vbiwgZXN0IGludCYjMjMzO2dyJiMyMzM7ICYjMjI0OyB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRlIGxhIGxpY2VuY2UgR1BMLCBsZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgbCYjODIxNztlbnNlbWJsZSBzb3VzIGxhIGxpY2VuY2UgR1BMLgorCitEYW5zIGxlIGNhcyBvJiMyNDk7IGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBpbnQmIzIzMjtncmUgdW4gY29kZSBzb3VtaXMgYXV4IGRpc3Bvc2l0aW9ucyBkZSBsYSBsaWNlbmNlIEdQTCwgbGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBzb3VzIGxhIGxpY2VuY2UgR1BMLgorCitBcnRpY2xlIDYgLSBQUk9QUklFVEUgSU5URUxMRUNUVUVMTEUKKworNi4xLiBTVVIgTEUgTE9HSUNJRUwgSU5JVElBTAorCitMZSBUaXR1bGFpcmUgZXN0IGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLiBUb3V0ZSB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCBJbml0aWFsIGVzdCBzb3VtaXNlIGF1IHJlc3BlY3QgZGVzIGNvbmRpdGlvbnMgZGFucyBsZXNxdWVsbGVzIGxlIFRpdHVsYWlyZSBhIGNob2lzaSBkZSBkaWZmdXNlciBzb24gJiMzMzk7dXZyZSBldCBudWwgYXV0cmUgbiYjODIxNzthIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBtYWludGVuaXIgbGEgZGlmZnVzaW9uIGR1IExvZ2ljaWVsIGluaXRpYWwgc291cyBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IGV0IGNlLCBwb3VyIGxhIGR1ciYjMjMzO2UgdmlzJiMyMzM7ZSAmIzIyNDsgbGBhcnRpY2xlIDQuMi4KKworNi4yLiBTVVIgTEVTIENPTlRSSUJVVElPTlMKKworTGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgQ29udHJpYnV0aW9ucyBzb250IGF0dGFjaCYjMjMzO3MgYXUgdGl0dWxhaXJlIGRlIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjMjMzO3NpZ24mIzIzMzsgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZS4KKworNi4zLiBTVVIgTEVTIE1PRFVMRVMgRFlOQU1JUVVFUworCitMZSBMaWNlbmNpJiMyMzM7IGF5YW50IGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIER5bmFtaXF1ZSBlc3QgdGl0dWxhaXJlIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgY2UgTW9kdWxlIER5bmFtaXF1ZSBldCByZXN0ZSBsaWJyZSBkdSBjaG9peCBkdSBjb250cmF0IHImIzIzMztnaXNzYW50IHNhIGRpZmZ1c2lvbi4KKworNi40LiBESVNQT1NJVElPTlMgQ09NTVVORVMKKworNi40LjEuIExlIExpY2VuY2kmIzIzMzsgcyYjODIxNztlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbCYjODIxNztpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbC4KKworNi40LjIuIExlIExpY2VuY2kmIzIzMzsgcyYjODIxNztlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBwb3J0ZXIgYXR0ZWludGUsIGRpcmVjdGVtZW50IG91IGluZGlyZWN0ZW1lbnQsIGF1eCBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgZXQgJiMyMjQ7IHByZW5kcmUsIGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCwgJiMyMjQ7IGwmIzgyMTc7JiMyMzM7Z2FyZCBkZSBzb24gcGVyc29ubmVsIHRvdXRlcyBsZXMgbWVzdXJlcyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycy4KKworQXJ0aWNsZSA3IC0gU0VSVklDRVMgQVNTT0NJRVMKKworNy4xLiBMZSBDb250cmF0IG4mIzgyMTc7b2JsaWdlIGVuIGF1Y3VuIGNhcyBsZSBDb25jJiMyMzM7ZGFudCAmIzIyNDsgbGEgciYjMjMzO2FsaXNhdGlvbiBkZSBwcmVzdGF0aW9ucyBkJiM4MjE3O2Fzc2lzdGFuY2UgdGVjaG5pcXVlIG91IGRlIG1haW50ZW5hbmNlIGR1IExvZ2ljaWVsLgorCitDZXBlbmRhbnQgbGUgQ29uYyYjMjMzO2RhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGQmIzgyMTc7dW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGQmIzgyMTc7dW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkJiMyMzM7dGVybWluJiMyMzM7cyBkYW5zIHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOy4gQ2VzIGFjdGVzIGRlIG1haW50ZW5hbmNlIGV0L291IGFzc2lzdGFuY2UgdGVjaG5pcXVlIG4mIzgyMTc7ZW5nYWdlcm9udCBxdWUgbGEgc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBxdWkgbGVzIHByb3Bvc2UuCisKKzcuMi4gRGUgbSYjMjM0O21lLCB0b3V0IENvbmMmIzIzMztkYW50IGVzdCBsaWJyZSBkZSBwcm9wb3Nlciwgc291cyBzYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7LCAmIzIyNDsgc2VzIGxpY2VuY2kmIzIzMztzIHVuZSBnYXJhbnRpZSwgcXVpIG4mIzgyMTc7ZW5nYWdlcmEgcXVlIGx1aSwgbG9ycyBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBldC9vdSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXUmIzgyMTc7aWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0JiMyMzM7cyBmaW5hbmNpJiMyMzI7cmVzIGRlIHNvbiBhcHBsaWNhdGlvbiBmZXJvbnQgbCYjODIxNztvYmpldCBkJiM4MjE3O3VuIGFjdGUgcyYjMjMzO3BhciYjMjMzOyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBldCBsZSBMaWNlbmNpJiMyMzM7LgorCitBcnRpY2xlIDggLSBSRVNQT05TQUJJTElURQorCis4LjEuIFNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbCYjODIxNzthcnRpY2xlIDguMiwgc2kgbGUgQ29uYyYjMjMzO2RhbnQgbiYjODIxNztleCYjMjMzO2N1dGUgcGFzIHRvdXQgb3UgcGFydGllIGRlcyBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBMaWNlbmNpJiMyMzM7IGEgbGEgZmFjdWx0JiMyMzM7LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBwcm91dmVyIGxhIGZhdXRlIGR1IENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzssIGRlIHNvbGxpY2l0ZXIgbGEgciYjMjMzO3BhcmF0aW9uIGR1IHByJiMyMzM7anVkaWNlIGRpcmVjdCBxdSYjODIxNztpbCBzdWJpdCBldCBkb250IGlsIGFwcG9ydGVyYSBsYSBwcmV1dmUuCisKKzguMi4gTGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBlc3QgbGltaXQmIzIzMztlIGF1eCBlbmdhZ2VtZW50cyBwcmlzIGVuIGFwcGxpY2F0aW9uIGR1IENvbnRyYXQgZXQgbmUgc2F1cmFpdCAmIzIzNDt0cmUgZW5nYWcmIzIzMztlIGVuIHJhaXNvbiBub3RhbW1lbnQ6KGkpIGRlcyBkb21tYWdlcyBkdXMgJiMyMjQ7IGwmIzgyMTc7aW5leCYjMjMzO2N1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpJiMyMzM7LCAoaWkpIGRlcyBkb21tYWdlcyBkaXJlY3RzIG91IGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsJiM4MjE3O3V0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwgc3ViaXMgcGFyIGxlIExpY2VuY2kmIzIzMzsgbG9yc3F1JiM4MjE3O2lsIHMmIzgyMTc7YWdpdCBkJiM4MjE3O3VuIHByb2Zlc3Npb25uZWwgdXRpbGlzYW50IGxlIExvZ2ljaWVsICYjMjI0OyBkZXMgZmlucyBwcm9mZXNzaW9ubmVsbGVzIGV0IChpaWkpIGRlcyBkb21tYWdlcyBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbCYjODIxNzt1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsLiBMZXMgUGFydGllcyBjb252aWVubmVudCBleHByZXNzJiMyMzM7bWVudCBxdWUgdG91dCBwciYjMjMzO2p1ZGljZSBmaW5hbmNpZXIgb3UgY29tbWVyY2lhbCAocGFyIGV4ZW1wbGUgcGVydGUgZGUgZG9ubiYjMjMzO2VzLCBwZXJ0ZSBkZSBiJiMyMzM7biYjMjMzO2ZpY2VzLCBwZXJ0ZSBkJiM4MjE3O2V4cGxvaXRhdGlvbiwgcGVydGUgZGUgY2xpZW50JiMyMzI7bGUgb3UgZGUgY29tbWFuZGVzLCBtYW5xdWUgJiMyMjQ7IGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZyYjMjMzO2UgY29udHJlIGxlIExpY2VuY2kmIzIzMzsgcGFyIHVuIHRpZXJzLCBjb25zdGl0dWUgdW4gZG9tbWFnZSBpbmRpcmVjdCBldCBuJiM4MjE3O291dnJlIHBhcyBkcm9pdCAmIzIyNDsgciYjMjMzO3BhcmF0aW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudC4KKworQXJ0aWNsZSA5IC0gR0FSQU5USUUKKworOS4xLiBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsJiM4MjE3OyYjMjMzO3RhdCBhY3R1ZWwgZGVzIGNvbm5haXNzYW5jZXMgc2NpZW50aWZpcXVlcyBldCB0ZWNobmlxdWVzIGF1IG1vbWVudCBkZSBsYSBtaXNlIGVuIGNpcmN1bGF0aW9uIGR1IExvZ2ljaWVsIG5lIHBlcm1ldCBwYXMgZCYjODIxNztlbiB0ZXN0ZXIgZXQgZCYjODIxNztlbiB2JiMyMzM7cmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGQmIzIzMzt0ZWN0ZXIgbCYjODIxNztleGlzdGVuY2UgZCYjODIxNzsmIzIzMzt2ZW50dWVscyBkJiMyMzM7ZmF1dHMuIEwmIzgyMTc7YXR0ZW50aW9uIGR1IExpY2VuY2kmIzIzMzsgYSAmIzIzMzt0JiMyMzM7IGF0dGlyJiMyMzM7ZSBzdXIgY2UgcG9pbnQgc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGwmIzgyMTc7dXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBMb2dpY2llbCBxdWkgc29udCByJiMyMzM7c2VydiYjMjMzO3MgJiMyMjQ7IGRlcyB1dGlsaXNhdGV1cnMgYXZlcnRpcy4KKworSWwgcmVsJiMyMzI7dmUgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBMaWNlbmNpJiMyMzM7IGRlIGNvbnRyJiMyNDQ7bGVyLCBwYXIgdG91cyBtb3llbnMsIGwmIzgyMTc7YWQmIzIzMztxdWF0aW9uIGR1IHByb2R1aXQgJiMyMjQ7IHNlcyBiZXNvaW5zLCBzb24gYm9uIGZvbmN0aW9ubmVtZW50IGV0IGRlIHNgYXNzdXJlciBxdSYjODIxNztpbCBuZSBjYXVzZXJhIHBhcyBkZSBkb21tYWdlcyBhdXggcGVyc29ubmVzIGV0IGF1eCBiaWVucy4KKworOS4yLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Y2xhcmUgZGUgYm9ubmUgZm9pICYjMjM0O3RyZSBlbiBkcm9pdCBkZSBjb25jJiMyMzM7ZGVyIGxgZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2gmIzIzMztzIGF1IExvZ2ljaWVsIChjb21wcmVuYW50IG5vdGFtbWVudCBsZXMgZHJvaXRzIHZpcyYjMjMzO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1KS4KKworOS4zLiBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsZSBMb2dpY2llbCBlc3QgZm91cm5pICYjMTcxO2VuIGxgJiMyMzM7dGF0JiMxODc7IHBhciBsZSBDb25jJiMyMzM7ZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwciYjMjMzO3Z1ZSAmIzIyNDsgbCYjODIxNzthcnRpY2xlIDkuMiBldCBub3RhbW1lbnQgc2FucyBhdWN1bmUgZ2FyYW50aWUgc3VyIHNhIHZhbGV1ciBjb21tZXJjaWFsZSwgc29uIGNhcmFjdCYjMjMyO3JlIHMmIzIzMztjdXJpcyYjMjMzOywgaW5ub3ZhbnQgb3UgcGVydGluZW50LgorCitFbiBwYXJ0aWN1bGllciwgbGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGRgZXJyZXVyLCBxdSYjODIxNztpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1JiM4MjE3O2lsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGwmIzgyMTc7JiMyMzM7cXVpcGVtZW50IGR1IExpY2VuY2kmIzIzMzsgZXQgc2EgY29uZmlndXJhdGlvbiBsb2dpY2llbGxlIG5pIHF1JiM4MjE3O2lsIHJlbXBsaXJhIGxlcyBiZXNvaW5zIGR1IExpY2VuY2kmIzIzMzsuCisKKzkuNC4gTGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzLCBkZSBtYW5pJiMyMzI7cmUgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgbGUgTG9naWNpZWwgbmUgcG9ydGUgcGFzIGF0dGVpbnRlICYjMjI0OyB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZCYjODIxNzt1biB0aWVycyBwb3J0YW50IHN1ciB1biBicmV2ZXQsIHVuIGxvZ2ljaWVsIG91IHN1ciB0b3V0IGF1dHJlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsuIEFpbnNpLCBsZSBDb25jJiMyMzM7ZGFudCBleGNsdXQgdG91dGUgZ2FyYW50aWUgYXUgcHJvZml0IGR1IExpY2VuY2kmIzIzMzsgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhJiMyMzE7b24gcXVpIHBvdXJyYWllbnQgJiMyMzQ7dHJlIGRpbGlnZW50JiMyMzM7ZXMgYXUgdGl0cmUgZGUgbCYjODIxNzt1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTiYjMjMzO2FubW9pbnMsIHNpIGRlIHRlbGxlcyBhY3Rpb25zIHNvbnQgZXhlcmMmIzIzMztlcyBjb250cmUgbGUgTGljZW5jaSYjMjMzOywgbGUgQ29uYyYjMjMzO2RhbnQgbHVpIGFwcG9ydGVyYSBzb24gYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIHBvdXIgc2EgZCYjMjMzO2ZlbnNlLiBDZXR0ZSBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgZXN0IGQmIzIzMzt0ZXJtaW4mIzIzMztlIGF1IGNhcyBwYXIgY2FzIGVudHJlIGxlIENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzsgZXQgbGUgTGljZW5jaSYjMjMzOyBkYW5zIGxlIGNhZHJlIGQmIzgyMTc7dW4gcHJvdG9jb2xlIGQmIzgyMTc7YWNjb3JkLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Z2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0JiMyMzM7IHF1YW50ICYjMjI0OyBsJiM4MjE3O3V0aWxpc2F0aW9uIGRlIGxhIGQmIzIzMztub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpJiMyMzM7LiBBdWN1bmUgZ2FyYW50aWUgbiYjODIxNztlc3QgYXBwb3J0JiMyMzM7ZSBxdWFudCAmIzIyNDsgbCYjODIxNztleGlzdGVuY2UgZGUgZHJvaXRzIGFudCYjMjMzO3JpZXVycyBzdXIgbGUgbm9tIGR1IExvZ2ljaWVsIGV0IHN1ciBsJiM4MjE3O2V4aXN0ZW5jZSBkJiM4MjE3O3VuZSBtYXJxdWUuCisKK0FydGljbGUgMTAgLSBSRVNJTElBVElPTgorCisxMC4xLiBFbiBjYXMgZGUgbWFucXVlbWVudCBwYXIgbGUgTGljZW5jaSYjMjMzOyBhdXggb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uYyYjMjMzO2RhbnQgcG91cnJhIHImIzIzMztzaWxpZXIgZGUgcGxlaW4gZHJvaXQgbGUgQ29udHJhdCB0cmVudGUgKDMwKSBqb3VycyBhcHImIzIzMjtzIG5vdGlmaWNhdGlvbiBhZHJlc3MmIzIzMztlIGF1IExpY2VuY2kmIzIzMzsgZXQgcmVzdCYjMjMzO2Ugc2FucyBlZmZldC4KKworMTAuMi4gTGUgTGljZW5jaSYjMjMzOyBkb250IGxlIENvbnRyYXQgZXN0IHImIzIzMztzaWxpJiMyMzM7IG4mIzgyMTc7ZXN0IHBsdXMgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIsIG1vZGlmaWVyIG91IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwuIENlcGVuZGFudCwgdG91dGVzIGxlcyBsaWNlbmNlcyBxdSYjODIxNztpbCBhdXJhIGNvbmMmIzIzMztkJiMyMzM7ZXMgYW50JiMyMzM7cmlldXJlbWVudCAmIzIyNDsgbGEgciYjMjMzO3NpbGlhdGlvbiBkdSBDb250cmF0IHJlc3Rlcm9udCB2YWxpZGVzIHNvdXMgciYjMjMzO3NlcnZlIHF1JiM4MjE3O2VsbGVzIGFpZW50ICYjMjMzO3QmIzIzMzsgZWZmZWN0dSYjMjMzO2VzIGVuIGNvbmZvcm1pdCYjMjMzOyBhdmVjIGxlIENvbnRyYXQuCisKK0FydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVMKKworMTEuMS4gQ0FVU0UgRVhURVJJRVVSRQorCitBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkJiM4MjE3O3VuIHJldGFyZCBvdSBkJiM4MjE3O3VuZSBkJiMyMzM7ZmFpbGxhbmNlIGQmIzgyMTc7ZXgmIzIzMztjdXRpb24gZHUgQ29udHJhdCBxdWkgc2VyYWl0IGQmIzI1MTsgJiMyMjQ7IHVuIGNhcyBkZSBmb3JjZSBtYWpldXJlLCB1biBjYXMgZm9ydHVpdCBvdSB1bmUgY2F1c2UgZXh0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUsIG5vdGFtbWVudCwgbGUgbWF1dmFpcyBmb25jdGlvbm5lbWVudCBvdSBsZXMgaW50ZXJydXB0aW9ucyBkdSByJiMyMzM7c2VhdSAmIzIzMztsZWN0cmlxdWUgb3UgZGUgdCYjMjMzO2wmIzIzMztjb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgciYjMjMzO3NlYXUgbGkmIzIzMztlICYjMjI0OyB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGwmIzgyMTc7aW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0JiMyMzM7cyBnb3V2ZXJuZW1lbnRhbGVzLCBsZXMgY2F0YXN0cm9waGVzIG5hdHVyZWxsZXMsIGxlcyBkJiMyMzM7ZyYjMjI2O3RzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3ImIzIzMjt2ZXMgZXQgbGVzIGNvbmZsaXRzIHNvY2lhdXgsIGwmIzgyMTc7JiMyMzM7dGF0IGRlIGd1ZXJyZSYjODIzMDsKKworMTEuMi4gTGUgZmFpdCwgcGFyIGwmIzgyMTc7dW5lIG91IGwmIzgyMTc7YXV0cmUgZGVzIFBhcnRpZXMsIGQmIzgyMTc7b21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwciYjMjMzO3ZhbG9pciBkJiM4MjE3O3VuZSBvdSBwbHVzaWV1cnMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQsIG5lIHBvdXJyYSBlbiBhdWN1biBjYXMgaW1wbGlxdWVyIHJlbm9uY2lhdGlvbiBwYXIgbGEgUGFydGllIGludCYjMjMzO3Jlc3MmIzIzMztlICYjMjI0OyBzJiM4MjE3O2VuIHByJiMyMzM7dmFsb2lyIHVsdCYjMjMzO3JpZXVyZW1lbnQuCisKKzExLjMuIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50JiMyMzM7cmlldXJlLCAmIzIzMztjcml0ZSBvdSBvcmFsZSwgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGxlIG0mIzIzNDttZSBvYmpldCBldCBjb25zdGl0dWUgbCYjODIxNzthY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG4mIzgyMTc7YXVyYSBkJiM4MjE3O2VmZmV0ICYjMjI0OyBsJiM4MjE3OyYjMjMzO2dhcmQgZGVzIFBhcnRpZXMgJiMyMjQ7IG1vaW5zIGQmIzgyMTc7JiMyMzQ7dHJlIGZhaXRlIHBhciAmIzIzMztjcml0IGV0IHNpZ24mIzIzMztlIHBhciBsZXVycyByZXByJiMyMzM7c2VudGFudHMgZCYjMjUxO21lbnQgaGFiaWxpdCYjMjMzO3MuCisKKzExLjQuIERhbnMgbCYjODIxNztoeXBvdGgmIzIzMjtzZSBvJiMyNDk7IHVuZSBvdSBwbHVzaWV1cnMgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IHMmIzgyMTc7YXYmIzIzMjtyZXJhaXQgY29udHJhaXJlICYjMjI0OyB1bmUgbG9pIG91ICYjMjI0OyB1biB0ZXh0ZSBhcHBsaWNhYmxlLCBleGlzdGFudHMgb3UgZnV0dXJzLCBjZXR0ZSBsb2kgb3UgY2UgdGV4dGUgcHImIzIzMzt2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBzZSBjb25mb3JtZXIgJiMyMjQ7IGNldHRlIGxvaSBvdSAmIzIyNDsgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbSYjMjM0O21lLCBsYSBudWxsaXQmIzIzMzssIHBvdXIgcXVlbHF1ZSByYWlzb24gcXVlIGNlIHNvaXQsIGQmIzgyMTc7dW5lIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBuZSBzYXVyYWl0IGVudHJhJiMyMzg7bmVyIGxhIG51bGxpdCYjMjMzOyBkZSBsJiM4MjE3O2Vuc2VtYmxlIGR1IENvbnRyYXQuCisKKzExLjUuIExBTkdVRQorCitMZSBDb250cmF0IGVzdCByJiMyMzM7ZGlnJiMyMzM7IGVuIGxhbmd1ZSBmcmFuJiMyMzE7YWlzZSBldCBlbiBsYW5ndWUgYW5nbGFpc2UuIEVuIGNhcyBkZSBkaXZlcmdlbmNlIGQmIzgyMTc7aW50ZXJwciYjMjMzO3RhdGlvbiwgc2V1bGUgbGEgdmVyc2lvbiBmcmFuJiMyMzE7YWlzZSBmYWl0IGZvaS4KKworQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUCisKKzEyLjEuIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzJiMyMzM7ZSAmIzIyNDsgY29waWVyIGV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkZSBjZSBDb250cmF0LgorCisxMi4yLiBBZmluIGQmIzgyMTc7ZW4gcHImIzIzMztzZXJ2ZXIgbGEgY29oJiMyMzM7cmVuY2UsIGxlIHRleHRlIGR1IENvbnRyYXQgZXN0IHByb3QmIzIzMztnJiMyMzM7IGV0IG5lIHBldXQgJiMyMzQ7dHJlIG1vZGlmaSYjMjMzOyBxdWUgcGFyIGxlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UsIGxlc3F1ZWxzIHNlIHImIzIzMztzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcCYjMjMzO3Jpb2RpcXVlbWVudCBkZXMgbWlzZXMgJiMyMjQ7IGpvdXIgb3UgZGUgbm91dmVsbGVzIHZlcnNpb25zIGR1IENvbnRyYXQsIHF1aSBwb3NzJiMyMzI7ZGVyb250IGNoYWN1bmUgdW4gbnVtJiMyMzM7cm8gZGlzdGluY3QuIENlcyB2ZXJzaW9ucyB1bHQmIzIzMztyaWV1cmVzIHNlcm9udCBzdXNjZXB0aWJsZXMgZGUgcHJlbmRyZSBlbiBjb21wdGUgZGUgbm91dmVsbGVzIHByb2JsJiMyMzM7bWF0aXF1ZXMgcmVuY29udHImIzIzMztlcyBwYXIgbGVzIGxvZ2ljaWVscyBsaWJyZXMuCisKKzEyLjMuIFRvdXQgTG9naWNpZWwgZGlmZnVzJiMyMzM7IHNvdXMgdW5lIHZlcnNpb24gZG9ubiYjMjMzO2UgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbGBvYmpldCBkYHVuZSBkaWZmdXNpb24gdWx0JiMyMzM7cmlldXJlIHF1ZSBzb3VzIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGR1IENvbnRyYXQgb3UgdW5lIHZlcnNpb24gcG9zdCYjMjMzO3JpZXVyZSwgc291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgNS4zLjQuCisKK0FydGljbGUgMTMgLSBMT0kgQVBQTElDQUJMRSBFVCBDT01QRVRFTkNFIFRFUlJJVE9SSUFMRQorCisxMy4xLiBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsJiM4MjE3O2FtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsJiM4MjE3O29jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIuIEEgZCYjMjMzO2ZhdXQgZCYjODIxNzthY2NvcmQgYW1pYWJsZSBkYW5zIHVuIGQmIzIzMztsYWkgZGUgZGV1eCAoMikgbW9pcyAmIzIyNDsgY29tcHRlciBkZSBsZXVyIHN1cnZlbmFuY2UgZXQgc2F1ZiBzaXR1YXRpb24gcmVsZXZhbnQgZCYjODIxNzt1bmUgcHJvYyYjMjMzO2R1cmUgZCYjODIxNzt1cmdlbmNlLCBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgc2Vyb250IHBvcnQmIzIzMztzIHBhciBsYSBQYXJ0aWUgbGEgcGx1cyBkaWxpZ2VudGUgZGV2YW50IGxlcyBUcmlidW5hdXggY29tcCYjMjMzO3RlbnRzIGRlIFBhcmlzLgorCisxIENlOiBDRUEsIEM6IENOUlMsIEk6IElOUklBLCBMTDogTG9naWNpZWwgTGlicmUKKworCitWZXJzaW9uIDEgZHUgMjEvMDYvMjAwNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjMTRhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTIuMApAQCAtMCwwICsxLDI0MyBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMCisKK0F2ZXJ0aXNzZW1lbnQKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgaXNzdWUgZGB1bmUgY29uY2VydGF0aW9uIGVudHJlIHNlcyBhdXRldXJzIGFmaW4gcXVlIGxlIHJlc3BlY3QgZGUgZGV1eCBncmFuZHMgcHJpbmNpcGVzIHByJiMyMzM7c2lkZSAmIzIyNDsgc2EgciYjMjMzO2RhY3Rpb246CisKK2RgdW5lIHBhcnQsIGxlIHJlc3BlY3QgZGVzIHByaW5jaXBlcyBkZSBkaWZmdXNpb24gZGVzIGxvZ2ljaWVscyBsaWJyZXM6IGFjYyYjMjMyO3MgYXUgY29kZSBzb3VyY2UsIGRyb2l0cyAmIzIzMzt0ZW5kdXMgY29uZiYjMjMzO3ImIzIzMztzIGF1eCB1dGlsaXNhdGV1cnMsCitkYGF1dHJlIHBhcnQsIGxhIGQmIzIzMztzaWduYXRpb24gZGB1biBkcm9pdCBhcHBsaWNhYmxlLCBsZSBkcm9pdCBmcmFuJiMyMzE7YWlzLCBhdXF1ZWwgZWxsZSBlc3QgY29uZm9ybWUsIHRhbnQgYXUgcmVnYXJkIGR1IGRyb2l0IGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgY2l2aWxlIHF1ZSBkdSBkcm9pdCBkZSBsYSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGRlIGxhIHByb3RlY3Rpb24gcXVgaWwgb2ZmcmUgYXV4IGF1dGV1cnMgZXQgdGl0dWxhaXJlcyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgdW4gbG9naWNpZWwuCitMZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlIENlQ0lMTDEgc29udDoKKworQ29tbWlzc2FyaWF0ICYjMjI0OyBsYEVuZXJnaWUgQXRvbWlxdWUgLSBDRUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgZGUgcmVjaGVyY2hlICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUsIHRlY2huaXF1ZSBldCBpbmR1c3RyaWVsLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMjUgcnVlIExlYmxhbmMsIGltbWV1YmxlIExlIFBvbmFudCBELCA3NTAxNSBQYXJpcy4KKworQ2VudHJlIE5hdGlvbmFsIGRlIGxhIFJlY2hlcmNoZSBTY2llbnRpZmlxdWUgLSBDTlJTLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMgcnVlIE1pY2hlbC1BbmdlLCA3NTc5NCBQYXJpcyBjZWRleCAxNi4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAtIElOUklBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LgorCitQciYjMjMzO2FtYnVsZQorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBkb250IGxgb2JqZWN0aWYgZXN0IGRlIGNvbmYmIzIzMztyZXIgYXV4IHV0aWxpc2F0ZXVycyBsYSBsaWJlcnQmIzIzMzsgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIGR1IGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgY2V0dGUgbGljZW5jZSBkYW5zIGxlIGNhZHJlIGRgdW4gbW9kJiMyMzI7bGUgZGUgZGlmZnVzaW9uIGVuIGxvZ2ljaWVsIGxpYnJlLgorCitMYGV4ZXJjaWNlIGRlIGNlcyBsaWJlcnQmIzIzMztzIGVzdCBhc3NvcnRpIGRlIGNlcnRhaW5zIGRldm9pcnMgJiMyMjQ7IGxhIGNoYXJnZSBkZXMgdXRpbGlzYXRldXJzIGFmaW4gZGUgcHImIzIzMztzZXJ2ZXIgY2Ugc3RhdHV0IGF1IGNvdXJzIGRlcyByZWRpc3RyaWJ1dGlvbnMgdWx0JiMyMzM7cmlldXJlcy4KKworTGBhY2Nlc3NpYmlsaXQmIzIzMzsgYXUgY29kZSBzb3VyY2UgZXQgbGVzIGRyb2l0cyBkZSBjb3BpZSwgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIHF1aSBlbiBkJiMyMzM7Y291bGVudCBvbnQgcG91ciBjb250cmVwYXJ0aWUgZGUgbmBvZmZyaXIgYXV4IHV0aWxpc2F0ZXVycyBxdWB1bmUgZ2FyYW50aWUgbGltaXQmIzIzMztlIGV0IGRlIG5lIGZhaXJlIHBlc2VyIHN1ciBsYGF1dGV1ciBkdSBsb2dpY2llbCwgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGV0IGxlcyBjb25jJiMyMzM7ZGFudHMgc3VjY2Vzc2lmcyBxdWB1bmUgcmVzcG9uc2FiaWxpdCYjMjMzOyByZXN0cmVpbnRlLgorCitBIGNldCAmIzIzMztnYXJkIGxgYXR0ZW50aW9uIGRlIGxgdXRpbGlzYXRldXIgZXN0IGF0dGlyJiMyMzM7ZSBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgJiMyMjQ7IGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBsb2dpY2llbCBwYXIgbGB1dGlsaXNhdGV1ciAmIzIzMzt0YW50IGRvbm4mIzIzMzsgc2Egc3AmIzIzMztjaWZpY2l0JiMyMzM7IGRlIGxvZ2ljaWVsIGxpYnJlLCBxdWkgcGV1dCBsZSByZW5kcmUgY29tcGxleGUgJiMyMjQ7IG1hbmlwdWxlciBldCBxdWkgbGUgciYjMjMzO3NlcnZlIGRvbmMgJiMyMjQ7IGRlcyBkJiMyMzM7dmVsb3BwZXVycyBvdSBkZXMgcHJvZmVzc2lvbm5lbHMgYXZlcnRpcyBwb3NzJiMyMzM7ZGFudCBkZXMgY29ubmFpc3NhbmNlcyBpbmZvcm1hdGlxdWVzIGFwcHJvZm9uZGllcy4gTGVzIHV0aWxpc2F0ZXVycyBzb250IGRvbmMgaW52aXQmIzIzMztzICYjMjI0OyBjaGFyZ2VyIGV0IHRlc3RlciBsYGFkJiMyMzM7cXVhdGlvbiBkdSBsb2dpY2llbCAmIzIyNDsgbGV1cnMgYmVzb2lucyBkYW5zIGRlcyBjb25kaXRpb25zIHBlcm1ldHRhbnQgZGBhc3N1cmVyIGxhIHMmIzIzMztjdXJpdCYjMjMzOyBkZSBsZXVycyBzeXN0JiMyMzI7bWVzIGV0L291IGRlIGxldXJzIGRvbm4mIzIzMztlcyBldCwgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50LCAmIzIyNDsgbGB1dGlsaXNlciBldCBsYGV4cGxvaXRlciBkYW5zIGxlcyBtJiMyMzQ7bWVzIGNvbmRpdGlvbnMgZGUgcyYjMjMzO2N1cml0JiMyMzM7LiBDZSBjb250cmF0IHBldXQgJiMyMzQ7dHJlIHJlcHJvZHVpdCBldCBkaWZmdXMmIzIzMzsgbGlicmVtZW50LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBsZSBjb25zZXJ2ZXIgZW4gbGAmIzIzMzt0YXQsIHNhbnMgYWpvdXQgbmkgc3VwcHJlc3Npb24gZGUgY2xhdXNlcy4KKworQ2UgY29udHJhdCBlc3Qgc3VzY2VwdGlibGUgZGUgc2BhcHBsaXF1ZXIgJiMyMjQ7IHRvdXQgbG9naWNpZWwgZG9udCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjMjMzO2NpZGUgZGUgc291bWV0dHJlIGxgZXhwbG9pdGF0aW9uIGF1eCBkaXNwb3NpdGlvbnMgcXVgaWwgY29udGllbnQuCisKK0FydGljbGUgMSAtIERFRklOSVRJT05TCisKK0RhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1YGlscyBzZXJvbnQgJiMyMzM7Y3JpdHMgYXZlYyB1bmUgbGV0dHJlIGNhcGl0YWxlLCBhdXJvbnQgbGEgc2lnbmlmaWNhdGlvbiBzdWl2YW50ZToKKworQ29udHJhdDogZCYjMjMzO3NpZ25lIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyAmIzIzMzt2ZW50dWVsbGVzIHZlcnNpb25zIHBvc3QmIzIzMztyaWV1cmVzIGV0IGFubmV4ZXMuCisKK0xvZ2ljaWVsOiBkJiMyMzM7c2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsYGFjY2VwdGF0aW9uIGR1IENvbnRyYXQgcGFyIGxlIExpY2VuY2kmIzIzMzsuCisKK0xvZ2ljaWVsIEluaXRpYWw6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgU291cmNlIGV0ICYjMjMzO3ZlbnR1ZWxsZW1lbnQgZGUgQ29kZSBPYmpldCBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGV1ciBwcmVtaSYjMjMyO3JlIGRpZmZ1c2lvbiBzb3VzIGxlcyB0ZXJtZXMgZHUgQ29udHJhdC4KKworTG9naWNpZWwgTW9kaWZpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IHBhciBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbGBhY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmU6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgZCYjMjMzO3RlbnRldXJzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGRgYXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVycyBkdSBMb2dpY2llbCBheWFudCBhY2NlcHQmIzIzMzsgbGUgQ29udHJhdC4KKworQ29udHJpYnV0ZXVyOiBkJiMyMzM7c2lnbmUgbGUgTGljZW5jaSYjMjMzOyBhdXRldXIgZGBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb25jJiMyMzM7ZGFudDogZCYjMjMzO3NpZ25lIGxlIFRpdHVsYWlyZSBvdSB0b3V0ZSBwZXJzb25uZSBwaHlzaXF1ZSBvdSBtb3JhbGUgZGlzdHJpYnVhbnQgbGUgTG9naWNpZWwgc291cyBsZSBDb250cmF0LgorCitDb250cmlidXRpb246IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhZHVjdGlvbnMsIGFkYXB0YXRpb25zIGV0L291IG5vdXZlbGxlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBpbnQmIzIzMztnciYjMjMzO2VzIGRhbnMgbGUgTG9naWNpZWwgcGFyIHRvdXQgQ29udHJpYnV0ZXVyLCBhaW5zaSBxdWUgdG91dCBNb2R1bGUgSW50ZXJuZS4KKworTW9kdWxlOiBkJiMyMzM7c2lnbmUgdW4gZW5zZW1ibGUgZGUgZmljaGllcnMgc291cmNlcyB5IGNvbXByaXMgbGV1ciBkb2N1bWVudGF0aW9uIHF1aSBwZXJtZXQgZGUgciYjMjMzO2FsaXNlciBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3Mgb3Ugc2VydmljZXMgc3VwcGwmIzIzMzttZW50YWlyZXMgJiMyMjQ7IGNldXggZm91cm5pcyBwYXIgbGUgTG9naWNpZWwuCisKK01vZHVsZSBFeHRlcm5lOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUsIG5vbiBkJiMyMzM7cml2JiMyMzM7IGR1IExvZ2ljaWVsLCB0ZWwgcXVlIGNlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgZGVzIGVzcGFjZXMgZGBhZHJlc3NhZ2UgZGlmZiYjMjMzO3JlbnRzLCBsYHVuIGFwcGVsYW50IGxgYXV0cmUgYXUgbW9tZW50IGRlIGxldXIgZXgmIzIzMztjdXRpb24uCisKK01vZHVsZSBJbnRlcm5lOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUgbGkmIzIzMzsgYXUgTG9naWNpZWwgZGUgdGVsbGUgc29ydGUgcXVgaWxzIHNgZXgmIzIzMztjdXRlbnQgZGFucyBsZSBtJiMyMzQ7bWUgZXNwYWNlIGRgYWRyZXNzYWdlLgorCitHTlUgR1BMOiBkJiMyMzM7c2lnbmUgbGEgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZGFucyBzYSB2ZXJzaW9uIDIgb3UgdG91dGUgdmVyc2lvbiB1bHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSBwdWJsaSYjMjMzO2UgcGFyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBJbmMuCisKK1BhcnRpZXM6IGQmIzIzMztzaWduZSBjb2xsZWN0aXZlbWVudCBsZSBMaWNlbmNpJiMyMzM7IGV0IGxlIENvbmMmIzIzMztkYW50LgorCitDZXMgdGVybWVzIHNgZW50ZW5kZW50IGF1IHNpbmd1bGllciBjb21tZSBhdSBwbHVyaWVsLgorCitBcnRpY2xlIDIgLSBPQkpFVAorCitMZSBDb250cmF0IGEgcG91ciBvYmpldCBsYSBjb25jZXNzaW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudCBhdSBMaWNlbmNpJiMyMzM7IGRgdW5lIGxpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgY2Vzc2libGUgZXQgbW9uZGlhbGUgZHUgTG9naWNpZWwgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBjaS1hcHImIzIzMjtzICYjMjI0OyBsYGFydGljbGUgNSBwb3VyIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBvcnRhbnQgc3VyIGNlIExvZ2ljaWVsLgorCitBcnRpY2xlIDMgLSBBQ0NFUFRBVElPTgorCiszLjEgTGBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZXMgdGVybWVzIGR1IENvbnRyYXQgZXN0IHImIzIzMztwdXQmIzIzMztlIGFjcXVpc2UgZHUgZmFpdCBkdSBwcmVtaWVyIGRlcyBmYWl0cyBzdWl2YW50czoKKworKGkpIGxlIGNoYXJnZW1lbnQgZHUgTG9naWNpZWwgcGFyIHRvdXQgbW95ZW4gbm90YW1tZW50IHBhciB0JiMyMzM7bCYjMjMzO2NoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHNlcnZldXIgZGlzdGFudCBvdSBwYXIgY2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc3VwcG9ydCBwaHlzaXF1ZTsKKyhpaSkgbGUgcHJlbWllciBleGVyY2ljZSBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZSBsYHVuIHF1ZWxjb25xdWUgZGVzIGRyb2l0cyBjb25jJiMyMzM7ZCYjMjMzO3MgcGFyIGxlIENvbnRyYXQuCiszLjIgVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZS4KKworQXJ0aWNsZSA0IC0gRU5UUkVFIEVOIFZJR1VFVVIgRVQgRFVSRUUKKworNC4xIEVOVFJFRSBFTiBWSUdVRVVSCisKK0xlIENvbnRyYXQgZW50cmUgZW4gdmlndWV1ciAmIzIyNDsgbGEgZGF0ZSBkZSBzb24gYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBlbiAzLjEuCisKKzQuMiBEVVJFRQorCitMZSBDb250cmF0IHByb2R1aXJhIHNlcyBlZmZldHMgcGVuZGFudCB0b3V0ZSBsYSBkdXImIzIzMztlIGwmIzIzMztnYWxlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggcG9ydGFudCBzdXIgbGUgTG9naWNpZWwuCisKK0FydGljbGUgNSAtIEVURU5EVUUgREVTIERST0lUUyBDT05DRURFUworCitMZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOywgcXVpIGFjY2VwdGUsIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIExvZ2ljaWVsIHBvdXIgdG91dGVzIGRlc3RpbmF0aW9ucyBldCBwb3VyIGxhIGR1ciYjMjMzO2UgZHUgQ29udHJhdCBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKK1BhciBhaWxsZXVycywgc2kgbGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO3RpZW50IG91IHZlbmFpdCAmIzIyNDsgZCYjMjMzO3RlbmlyIHVuIG91IHBsdXNpZXVycyBicmV2ZXRzIGRgaW52ZW50aW9uIHByb3QmIzIzMztnZWFudCB0b3V0IG91IHBhcnRpZSBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgZHUgTG9naWNpZWwgb3UgZGUgc2VzIGNvbXBvc2FudHMsIGlsIHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgb3Bwb3NlciBsZXMgJiMyMzM7dmVudHVlbHMgZHJvaXRzIGNvbmYmIzIzMztyJiMyMzM7cyBwYXIgY2VzIGJyZXZldHMgYXV4IExpY2VuY2kmIzIzMztzIHN1Y2Nlc3NpZnMgcXVpIHV0aWxpc2VyYWllbnQsIGV4cGxvaXRlcmFpZW50IG91IG1vZGlmaWVyYWllbnQgbGUgTG9naWNpZWwuIEVuIGNhcyBkZSBjZXNzaW9uIGRlIGNlcyBicmV2ZXRzLCBsZSBDb25jJiMyMzM7ZGFudCBzYGVuZ2FnZSAmIzIyNDsgZmFpcmUgcmVwcmVuZHJlIGxlcyBvYmxpZ2F0aW9ucyBkdSBwciYjMjMzO3NlbnQgYWxpbiYjMjMzO2EgYXV4IGNlc3Npb25uYWlyZXMuCisKKzUuMSBEUk9JVCBEYFVUSUxJU0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyIGxlIExvZ2ljaWVsLCBzYW5zIHJlc3RyaWN0aW9uIHF1YW50IGF1eCBkb21haW5lcyBkYGFwcGxpY2F0aW9uLCAmIzIzMzt0YW50IGNpLWFwciYjMjMyO3MgcHImIzIzMztjaXMmIzIzMzsgcXVlIGNlbGEgY29tcG9ydGU6CisKK2xhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS4KKworbGUgY2hhcmdlbWVudCwgbGBhZmZpY2hhZ2UsIGxgZXgmIzIzMztjdXRpb24sIG91IGxlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHN1ciB0b3V0IHN1cHBvcnQuCisKK2xhIHBvc3NpYmlsaXQmIzIzMzsgZGBlbiBvYnNlcnZlciwgZGBlbiAmIzIzMzt0dWRpZXIsIG91IGRgZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZCYjMjMzO3Rlcm1pbmVyIGxlcyBpZCYjMjMzO2VzIGV0IHByaW5jaXBlcyBxdWkgc29udCAmIzIyNDsgbGEgYmFzZSBkZSBuYGltcG9ydGUgcXVlbCAmIzIzMztsJiMyMzM7bWVudCBkZSBjZSBMb2dpY2llbDsgZXQgY2VjaSwgbG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGVmZmVjdHVlIHRvdXRlIG9wJiMyMzM7cmF0aW9uIGRlIGNoYXJnZW1lbnQsIGRgYWZmaWNoYWdlLCBkYGV4JiMyMzM7Y3V0aW9uLCBkZSB0cmFuc21pc3Npb24gb3UgZGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgcXVgaWwgZXN0IGVuIGRyb2l0IGRgZWZmZWN0dWVyIGVuIHZlcnR1IGR1IENvbnRyYXQuCisKKzUuMiBEUk9JVCBEYEFQUE9SVEVSIERFUyBDT05UUklCVVRJT05TCisKK0xlIGRyb2l0IGRgYXBwb3J0ZXIgZGVzIENvbnRyaWJ1dGlvbnMgY29tcG9ydGUgbGUgZHJvaXQgZGUgdHJhZHVpcmUsIGRgYWRhcHRlciwgZGBhcnJhbmdlciBvdSBkYGFwcG9ydGVyIHRvdXRlIGF1dHJlIG1vZGlmaWNhdGlvbiBhdSBMb2dpY2llbCBldCBsZSBkcm9pdCBkZSByZXByb2R1aXJlIGxlIGxvZ2ljaWVsIGVuIHImIzIzMztzdWx0YW50LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBhcHBvcnRlciB0b3V0ZSBDb250cmlidXRpb24gYXUgTG9naWNpZWwgc291cyByJiMyMzM7c2VydmUgZGUgbWVudGlvbm5lciwgZGUgZmEmIzIzMTtvbiBleHBsaWNpdGUsIHNvbiBub20gZW4gdGFudCBxdWBhdXRldXIgZGUgY2V0dGUgQ29udHJpYnV0aW9uIGV0IGxhIGRhdGUgZGUgY3ImIzIzMzthdGlvbiBkZSBjZWxsZS1jaS4KKworNS4zIERST0lUIERFIERJU1RSSUJVVElPTgorCitMZSBkcm9pdCBkZSBkaXN0cmlidXRpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIGRpZmZ1c2VyLCBkZSB0cmFuc21ldHRyZSBldCBkZSBjb21tdW5pcXVlciBsZSBMb2dpY2llbCBhdSBwdWJsaWMgc3VyIHRvdXQgc3VwcG9ydCBldCBwYXIgdG91dCBtb3llbiBhaW5zaSBxdWUgbGUgZHJvaXQgZGUgbWV0dHJlIHN1ciBsZSBtYXJjaCYjMjMzOyAmIzIyNDsgdGl0cmUgb24mIzIzMztyZXV4IG91IGdyYXR1aXQsIHVuIG91IGRlcyBleGVtcGxhaXJlcyBkdSBMb2dpY2llbCBwYXIgdG91dCBwcm9jJiMyMzM7ZCYjMjMzOy4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCAmIzIyNDsgZGVzIHRpZXJzIGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworNS4zLjEgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIFNBTlMgTU9ESUZJQ0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSBhdXggZnV0dXJzIExpY2VuY2kmIzIzMztzIGRgYWNjJiMyMzM7ZGVyIGZhY2lsZW1lbnQgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGRgYWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4yIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBNT0RJRklFCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhcHBvcnRlIHVuZSBDb250cmlidXRpb24gYXUgTG9naWNpZWwsIGxlcyBjb25kaXRpb25zIGRlIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZW4gciYjMjMzO3N1bHRhbnQgc29udCBhbG9ycyBzb3VtaXNlcyAmIzIyNDsgbGBpbnQmIzIzMztncmFsaXQmIzIzMzsgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgc291cyBmb3JtZSBkZSBjb2RlIHNvdXJjZSBvdSBkZSBjb2RlIG9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBjb2RlIG9iamV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSBhdXggZnV0dXJzIExpY2VuY2kmIzIzMztzIGRgYWNjJiMyMzM7ZGVyIGZhY2lsZW1lbnQgYXUgY29kZSBzb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZW4gaW5kaXF1YW50IGxlcyBtb2RhbGl0JiMyMzM7cyBkYGFjYyYjMjMyO3MsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgY29kZSBzb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMyBESVNUUklCVVRJT04gREVTIE1PRFVMRVMgRVhURVJORVMKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRXh0ZXJuZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHNgYXBwbGlxdWVudCBwYXMgJiMyMjQ7IGNlIE1vZHVsZSBFeHRlcm5lLCBxdWkgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgZGlmZiYjMjMzO3JlbnQuCisKKzUuMy40IENPTVBBVElCSUxJVEUgQVZFQyBMQSBMSUNFTkNFIEdOVSBHUEwKKworTGUgTGljZW5jaSYjMjMzOyBwZXV0IGluY2x1cmUgdW4gY29kZSBzb3VtaXMgYXV4IGRpc3Bvc2l0aW9ucyBkYHVuZSBkZXMgdmVyc2lvbnMgZGUgbGEgbGljZW5jZSBHTlUgR1BMIGRhbnMgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbiBldCBkaXN0cmlidWVyIGxgZW5zZW1ibGUgc291cyBsZXMgY29uZGl0aW9ucyBkZSBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkZSBsYSBsaWNlbmNlIEdOVSBHUEwuCisKK0xlIExpY2VuY2kmIzIzMzsgcGV1dCBpbmNsdXJlIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24gZGFucyB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRgdW5lIGRlcyB2ZXJzaW9ucyBkZSBsYSBsaWNlbmNlIEdOVSBHUEwgZXQgZGlzdHJpYnVlciBsYGVuc2VtYmxlIHNvdXMgbGVzIGNvbmRpdGlvbnMgZGUgbGEgbSYjMjM0O21lIHZlcnNpb24gZGUgbGEgbGljZW5jZSBHTlUgR1BMLgorCitBcnRpY2xlIDYgLSBQUk9QUklFVEUgSU5URUxMRUNUVUVMTEUKKworNi4xIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiBvZXV2cmUgZXQgbnVsIGF1dHJlIG5gYSBsYSBmYWN1bHQmIzIzMzsgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xlIFRpdHVsYWlyZSBzYGVuZ2FnZSAmIzIyNDsgY2UgcXVlIGxlIExvZ2ljaWVsIEluaXRpYWwgcmVzdGUgYXUgbW9pbnMgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IGV0IGNlLCBwb3VyIGxhIGR1ciYjMjMzO2UgdmlzJiMyMzM7ZSAmIzIyNDsgbGBhcnRpY2xlIDQuMi4KKworNi4yIFNVUiBMRVMgQ09OVFJJQlVUSU9OUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW5lIENvbnRyaWJ1dGlvbiBlc3QgdGl0dWxhaXJlIHN1ciBjZWxsZS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMyBTVVIgTEVTIE1PRFVMRVMgRVhURVJORVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGVzdCB0aXR1bGFpcmUgc3VyIGNlbHVpLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZSBldCByZXN0ZSBsaWJyZSBkdSBjaG9peCBkdSBjb250cmF0IHImIzIzMztnaXNzYW50IHNhIGRpZmZ1c2lvbi4KKworNi40IERJU1BPU0lUSU9OUyBDT01NVU5FUworCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgbmUgcGFzIHN1cHByaW1lciBvdSBtb2RpZmllciBkZSBxdWVscXVlIG1hbmkmIzIzMjtyZSBxdWUgY2Ugc29pdCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBhcHBvcyYjMjMzO2VzIHN1ciBsZSBMb2dpY2llbDsKKworJiMyMjQ7IHJlcHJvZHVpcmUgJiMyMjQ7IGxgaWRlbnRpcXVlIGxlc2RpdGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbi4KKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBzdXIgbGUgTG9naWNpZWwgZXQgJiMyMjQ7IHByZW5kcmUsIGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCwgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZSBzb24gcGVyc29ubmVsIHRvdXRlcyBsZXMgbWVzdXJlcyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycy4KKworQXJ0aWNsZSA3IC0gU0VSVklDRVMgQVNTT0NJRVMKKworNy4xIExlIENvbnRyYXQgbmBvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGRgYXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZGB1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZGB1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbmBlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuYGVuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1YGlsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGxgb2JqZXQgZGB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xIFNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDguMiwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXVgaWwgc3ViaXJhaXQgZHUgZmFpdCBkdSBMb2dpY2llbCBldCBkb250IGlsIGFwcG9ydGVyYSBsYSBwcmV1dmUuCisKKzguMiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDogKGkpIGRlcyBkb21tYWdlcyBkdXMgJiMyMjQ7IGxgaW5leCYjMjMzO2N1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpJiMyMzM7LCAoaWkpIGRlcyBkb21tYWdlcyBkaXJlY3RzIG91IGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsYHV0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwgc3ViaXMgcGFyIGxlIExpY2VuY2kmIzIzMzsgZXQgKGlpaSkgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50IGRgdW4gcXVlbGNvbnF1ZSBkb21tYWdlIGluZGlyZWN0LiBFbiBwYXJ0aWN1bGllciwgbGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZGBleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbmBvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMSBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsYCYjMjMzO3RhdCBhY3R1ZWwgZGVzIGNvbm5haXNzYW5jZXMgc2NpZW50aWZpcXVlcyBldCB0ZWNobmlxdWVzIGF1IG1vbWVudCBkZSBsYSBtaXNlIGVuIGNpcmN1bGF0aW9uIGR1IExvZ2ljaWVsIG5lIHBlcm1ldCBwYXMgZGBlbiB0ZXN0ZXIgZXQgZGBlbiB2JiMyMzM7cmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGQmIzIzMzt0ZWN0ZXIgbGBleGlzdGVuY2UgZGAmIzIzMzt2ZW50dWVscyBkJiMyMzM7ZmF1dHMuIExgYXR0ZW50aW9uIGR1IExpY2VuY2kmIzIzMzsgYSAmIzIzMzt0JiMyMzM7IGF0dGlyJiMyMzM7ZSBzdXIgY2UgcG9pbnQgc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBMb2dpY2llbCBxdWkgc29udCByJiMyMzM7c2VydiYjMjMzO3MgJiMyMjQ7IGRlcyB1dGlsaXNhdGV1cnMgYXZlcnRpcy4KKworSWwgcmVsJiMyMzI7dmUgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBMaWNlbmNpJiMyMzM7IGRlIGNvbnRyJiMyNDQ7bGVyLCBwYXIgdG91cyBtb3llbnMsIGxgYWQmIzIzMztxdWF0aW9uIGR1IHByb2R1aXQgJiMyMjQ7IHNlcyBiZXNvaW5zLCBzb24gYm9uIGZvbmN0aW9ubmVtZW50IGV0IGRlIHNgYXNzdXJlciBxdWBpbCBuZSBjYXVzZXJhIHBhcyBkZSBkb21tYWdlcyBhdXggcGVyc29ubmVzIGV0IGF1eCBiaWVucy4KKworOS4yIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAiZW4gbGAmIzIzMzt0YXQiIHBhciBsZSBDb25jJiMyMzM7ZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwciYjMjMzO3Z1ZSAmIzIyNDsgbGBhcnRpY2xlIDkuMiBldCBub3RhbW1lbnQgc2FucyBhdWN1bmUgZ2FyYW50aWUgc3VyIHNhIHZhbGV1ciBjb21tZXJjaWFsZSwgc29uIGNhcmFjdCYjMjMyO3JlIHMmIzIzMztjdXJpcyYjMjMzOywgaW5ub3ZhbnQgb3UgcGVydGluZW50LgorCitFbiBwYXJ0aWN1bGllciwgbGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGRgZXJyZXVyLCBxdWBpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1YGlsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGxgJiMyMzM7cXVpcGVtZW50IGR1IExpY2VuY2kmIzIzMzsgZXQgc2EgY29uZmlndXJhdGlvbiBsb2dpY2llbGxlIG5pIHF1YGlsIHJlbXBsaXJhIGxlcyBiZXNvaW5zIGR1IExpY2VuY2kmIzIzMzsuCisKKzkuNCBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYHVuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsYHV0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZGB1biBwcm90b2NvbGUgZGBhY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGxgdXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuYGVzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsYGV4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGxgZXhpc3RlbmNlIGRgdW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEgRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIgTGUgTGljZW5jaSYjMjMzOyBkb250IGxlIENvbnRyYXQgZXN0IHImIzIzMztzaWxpJiMyMzM7IG5gZXN0IHBsdXMgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIsIG1vZGlmaWVyIG91IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwuIENlcGVuZGFudCwgdG91dGVzIGxlcyBsaWNlbmNlcyBxdWBpbCBhdXJhIGNvbmMmIzIzMztkJiMyMzM7ZXMgYW50JiMyMzM7cmlldXJlbWVudCAmIzIyNDsgbGEgciYjMjMzO3NpbGlhdGlvbiBkdSBDb250cmF0IHJlc3Rlcm9udCB2YWxpZGVzIHNvdXMgciYjMjMzO3NlcnZlIHF1YGVsbGVzIGFpZW50ICYjMjMzO3QmIzIzMzsgZWZmZWN0dSYjMjMzO2VzIGVuIGNvbmZvcm1pdCYjMjMzOyBhdmVjIGxlIENvbnRyYXQuCisKK0FydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVMKKworMTEuMSBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGRgdW4gcmV0YXJkIG91IGRgdW5lIGQmIzIzMztmYWlsbGFuY2UgZGBleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbGBpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbGAmIzIzMzt0YXQgZGUgZ3VlcnJlLi4uCisKKzExLjIgTGUgZmFpdCwgcGFyIGxgdW5lIG91IGxgYXV0cmUgZGVzIFBhcnRpZXMsIGRgb21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwciYjMjMzO3ZhbG9pciBkYHVuZSBvdSBwbHVzaWV1cnMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQsIG5lIHBvdXJyYSBlbiBhdWN1biBjYXMgaW1wbGlxdWVyIHJlbm9uY2lhdGlvbiBwYXIgbGEgUGFydGllIGludCYjMjMzO3Jlc3MmIzIzMztlICYjMjI0OyBzYGVuIHByJiMyMzM7dmFsb2lyIHVsdCYjMjMzO3JpZXVyZW1lbnQuCisKKzExLjMgTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsYGFjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbmBhdXJhIGRgZWZmZXQgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZGAmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNCBEYW5zIGxgaHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzYGF2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkYHVuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbGBlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41IExBTkdVRQorCitMZSBDb250cmF0IGVzdCByJiMyMzM7ZGlnJiMyMzM7IGVuIGxhbmd1ZSBmcmFuJiMyMzE7YWlzZSBldCBlbiBsYW5ndWUgYW5nbGFpc2UsIGNlcyBkZXV4IHZlcnNpb25zIGZhaXNhbnQgJiMyMzM7Z2FsZW1lbnQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMSBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMiBBZmluIGRgZW4gcHImIzIzMztzZXJ2ZXIgbGEgY29oJiMyMzM7cmVuY2UsIGxlIHRleHRlIGR1IENvbnRyYXQgZXN0IHByb3QmIzIzMztnJiMyMzM7IGV0IG5lIHBldXQgJiMyMzQ7dHJlIG1vZGlmaSYjMjMzOyBxdWUgcGFyIGxlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UsIGxlc3F1ZWxzIHNlIHImIzIzMztzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcCYjMjMzO3Jpb2RpcXVlbWVudCBkZXMgbWlzZXMgJiMyMjQ7IGpvdXIgb3UgZGUgbm91dmVsbGVzIHZlcnNpb25zIGR1IENvbnRyYXQsIHF1aSBwb3NzJiMyMzM7ZGVyb250IGNoYWN1bmUgdW4gbnVtJiMyMzM7cm8gZGlzdGluY3QuIENlcyB2ZXJzaW9ucyB1bHQmIzIzMztyaWV1cmVzIHNlcm9udCBzdXNjZXB0aWJsZXMgZGUgcHJlbmRyZSBlbiBjb21wdGUgZGUgbm91dmVsbGVzIHByb2JsJiMyMzM7bWF0aXF1ZXMgcmVuY29udHImIzIzMztlcyBwYXIgbGVzIGxvZ2ljaWVscyBsaWJyZXMuCisKKzEyLjMgVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLCBzb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA1LjMuNC4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEgTGUgQ29udHJhdCBlc3QgciYjMjMzO2dpIHBhciBsYSBsb2kgZnJhbiYjMjMxO2Fpc2UuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGRlIHRlbnRlciBkZSByJiMyMzM7Z2xlciAmIzIyNDsgbGBhbWlhYmxlIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBxdWkgdmllbmRyYWllbnQgJiMyMjQ7IHNlIHByb2R1aXJlIHBhciBzdWl0ZSBvdSAmIzIyNDsgbGBvY2Nhc2lvbiBkdSBDb250cmF0LgorCisxMy4yIEEgZCYjMjMzO2ZhdXQgZGBhY2NvcmQgYW1pYWJsZSBkYW5zIHVuIGQmIzIzMztsYWkgZGUgZGV1eCAoMikgbW9pcyAmIzIyNDsgY29tcHRlciBkZSBsZXVyIHN1cnZlbmFuY2UgZXQgc2F1ZiBzaXR1YXRpb24gcmVsZXZhbnQgZGB1bmUgcHJvYyYjMjMzO2R1cmUgZGB1cmdlbmNlLCBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgc2Vyb250IHBvcnQmIzIzMztzIHBhciBsYSBQYXJ0aWUgbGEgcGx1cyBkaWxpZ2VudGUgZGV2YW50IGxlcyBUcmlidW5hdXggY29tcCYjMjMzO3RlbnRzIGRlIFBhcmlzLgorCisxIENlQ0lMTCBlc3QgcG91ciBDZShhKSBDKG5ycykgSShucmlhKSBMKG9naWNpZWwpIEwoaWJyZSkKKworVmVyc2lvbiAyLjAgZHUgMjAwNi0wOS0wNS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUIKQEAgLTAsMCArMSwyNDcgQEAKKworQ09OVFJBVCBERSBMSUNFTkNFIERFIExPR0lDSUVMIExJQlJFIENlQ0lMTC1CCisKK0F2ZXJ0aXNzZW1lbnQKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgaXNzdWUgZGB1bmUgY29uY2VydGF0aW9uIGVudHJlIHNlcyBhdXRldXJzIGFmaW4gcXVlIGxlIHJlc3BlY3QgZGUgZGV1eCBncmFuZHMgcHJpbmNpcGVzIHByJiMyMzM7c2lkZSAmIzIyNDsgc2EgciYjMjMzO2RhY3Rpb246CisKK2RgdW5lIHBhcnQsIGxlIHJlc3BlY3QgZGVzIHByaW5jaXBlcyBkZSBkaWZmdXNpb24gZGVzIGxvZ2ljaWVscyBsaWJyZXM6IGFjYyYjMjMyO3MgYXUgY29kZSBzb3VyY2UsIGRyb2l0cyAmIzIzMzt0ZW5kdXMgY29uZiYjMjMzO3ImIzIzMztzIGF1eCB1dGlsaXNhdGV1cnMsCitkYGF1dHJlIHBhcnQsIGxhIGQmIzIzMztzaWduYXRpb24gZGB1biBkcm9pdCBhcHBsaWNhYmxlLCBsZSBkcm9pdCBmcmFuJiMyMzE7YWlzLCBhdXF1ZWwgZWxsZSBlc3QgY29uZm9ybWUsIHRhbnQgYXUgcmVnYXJkIGR1IGRyb2l0IGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgY2l2aWxlIHF1ZSBkdSBkcm9pdCBkZSBsYSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGRlIGxhIHByb3RlY3Rpb24gcXVgaWwgb2ZmcmUgYXV4IGF1dGV1cnMgZXQgdGl0dWxhaXJlcyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgdW4gbG9naWNpZWwuCitMZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlIENlQ0lMTC1CMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGxgRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSByZWNoZXJjaGUgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSwgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAyNSBydWUgTGVibGFuYywgaW1tZXVibGUgTGUgUG9uYW50IEQsIDc1MDE1IFBhcmlzLgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UsIDc1Nzk0IFBhcmlzIGNlZGV4IDE2LgorCitJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlIC0gSU5SSUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUCAxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXguCisKK1ByJiMyMzM7YW1idWxlCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIHVuZSB0ciYjMjMyO3MgbGFyZ2UgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBkdSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UuCisKK0xgZXhlcmNpY2UgZGUgY2V0dGUgbGliZXJ0JiMyMzM7IGVzdCBhc3NvcnRpIGRgdW5lIG9ibGlnYXRpb24gZm9ydGUgZGUgY2l0YXRpb24gJiMyMjQ7IGxhIGNoYXJnZSBkZSBjZXV4IHF1aSBkaXN0cmlidWVyYWllbnQgdW4gbG9naWNpZWwgaW5jb3Jwb3JhbnQgdW4gbG9naWNpZWwgciYjMjMzO2dpIHBhciBsYSBwciYjMjMzO3NlbnRlIGxpY2VuY2UgYWZpbiBkYGFzc3VyZXIgcXVlIGxlcyBjb250cmlidXRpb25zIGRlIHRvdXMgc29pZW50IGNvcnJlY3RlbWVudCBpZGVudGlmaSYjMjMzO2VzIGV0IHJlY29ubnVlcy4KKworTGBhY2Nlc3NpYmlsaXQmIzIzMzsgYXUgY29kZSBzb3VyY2UgZXQgbGVzIGRyb2l0cyBkZSBjb3BpZSwgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIHF1aSBkJiMyMzM7Y291bGVudCBkZSBjZSBjb250cmF0IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuYG9mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1YHVuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGxgYXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1YHVuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbGBhdHRlbnRpb24gZGUgbGB1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsYHV0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGxgYWQmIzIzMztxdWF0aW9uIGR1IGxvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQvb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZXMgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsYCYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzYGFwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbGBleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdWBpbCBjb250aWVudC4KKworQXJ0aWNsZSAxIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXVgaWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxgYWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgJiMyMzM7dmVudHVlbGxlbWVudCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvZGUgU291cmNlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgaW5zdHJ1Y3Rpb25zIGV0IGRlcyBsaWduZXMgZGUgcHJvZ3JhbW1lIGR1IExvZ2ljaWVsIGV0IGF1cXVlbCBsYGFjYyYjMjMyO3MgZXN0IG4mIzIzMztjZXNzYWlyZSBlbiB2dWUgZGUgbW9kaWZpZXIgbGUgTG9naWNpZWwuCisKK0NvZGUgT2JqZXQ6IGQmIzIzMztzaWduZSBsZXMgZmljaGllcnMgYmluYWlyZXMgaXNzdXMgZGUgbGEgY29tcGlsYXRpb24gZHUgQ29kZSBTb3VyY2UuCisKK1RpdHVsYWlyZTogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyBkJiMyMzM7dGVudGV1cnMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZGBhdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXJzIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkYGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbjogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbCBwYXIgdG91dCBDb250cmlidXRldXIsIGFpbnNpIHF1ZSB0b3V0IE1vZHVsZSBJbnRlcm5lLgorCitNb2R1bGU6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTW9kdWxlIEV4dGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSwgbm9uIGQmIzIzMztyaXYmIzIzMzsgZHUgTG9naWNpZWwsIHRlbCBxdWUgY2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIHNgZXgmIzIzMztjdXRlbnQgZGFucyBkZXMgZXNwYWNlcyBkYGFkcmVzc2FnZSBkaWZmJiMyMzM7cmVudHMsIGxgdW4gYXBwZWxhbnQgbGBhdXRyZSBhdSBtb21lbnQgZGUgbGV1ciBleCYjMjMzO2N1dGlvbi4KKworTW9kdWxlIEludGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSBsaSYjMjMzOyBhdSBMb2dpY2llbCBkZSB0ZWxsZSBzb3J0ZSBxdWBpbHMgc2BleCYjMjMzO2N1dGVudCBkYW5zIGxlIG0mIzIzNDttZSBlc3BhY2UgZGBhZHJlc3NhZ2UuCisKK1BhcnRpZXM6IGQmIzIzMztzaWduZSBjb2xsZWN0aXZlbWVudCBsZSBMaWNlbmNpJiMyMzM7IGV0IGxlIENvbmMmIzIzMztkYW50LgorCitDZXMgdGVybWVzIHNgZW50ZW5kZW50IGF1IHNpbmd1bGllciBjb21tZSBhdSBwbHVyaWVsLgorCitBcnRpY2xlIDIgLSBPQkpFVAorCitMZSBDb250cmF0IGEgcG91ciBvYmpldCBsYSBjb25jZXNzaW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudCBhdSBMaWNlbmNpJiMyMzM7IGRgdW5lIGxpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgY2Vzc2libGUgZXQgbW9uZGlhbGUgZHUgTG9naWNpZWwgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBjaS1hcHImIzIzMjtzICYjMjI0OyBsYGFydGljbGUgNSBwb3VyIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBvcnRhbnQgc3VyIGNlIExvZ2ljaWVsLgorCitBcnRpY2xlIDMgLSBBQ0NFUFRBVElPTgorCiszLjEgTGBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZXMgdGVybWVzIGR1IENvbnRyYXQgZXN0IHImIzIzMztwdXQmIzIzMztlIGFjcXVpc2UgZHUgZmFpdCBkdSBwcmVtaWVyIGRlcyBmYWl0cyBzdWl2YW50czoKKworKGkpIGxlIGNoYXJnZW1lbnQgZHUgTG9naWNpZWwgcGFyIHRvdXQgbW95ZW4gbm90YW1tZW50IHBhciB0JiMyMzM7bCYjMjMzO2NoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHNlcnZldXIgZGlzdGFudCBvdSBwYXIgY2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc3VwcG9ydCBwaHlzaXF1ZTsKKyhpaSkgbGUgcHJlbWllciBleGVyY2ljZSBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZSBsYHVuIHF1ZWxjb25xdWUgZGVzIGRyb2l0cyBjb25jJiMyMzM7ZCYjMjMzO3MgcGFyIGxlIENvbnRyYXQuCiszLjIgVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZS4KKworQXJ0aWNsZSA0IC0gRU5UUkVFIEVOIFZJR1VFVVIgRVQgRFVSRUUKKworNC4xIEVOVFJFRSBFTiBWSUdVRVVSCisKK0xlIENvbnRyYXQgZW50cmUgZW4gdmlndWV1ciAmIzIyNDsgbGEgZGF0ZSBkZSBzb24gYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBlbiAzLjEuCisKKzQuMiBEVVJFRQorCitMZSBDb250cmF0IHByb2R1aXJhIHNlcyBlZmZldHMgcGVuZGFudCB0b3V0ZSBsYSBkdXImIzIzMztlIGwmIzIzMztnYWxlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggcG9ydGFudCBzdXIgbGUgTG9naWNpZWwuCisKK0FydGljbGUgNSAtIEVURU5EVUUgREVTIERST0lUUyBDT05DRURFUworCitMZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOywgcXVpIGFjY2VwdGUsIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIExvZ2ljaWVsIHBvdXIgdG91dGVzIGRlc3RpbmF0aW9ucyBldCBwb3VyIGxhIGR1ciYjMjMzO2UgZHUgQ29udHJhdCBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKK1BhciBhaWxsZXVycywgc2kgbGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO3RpZW50IG91IHZlbmFpdCAmIzIyNDsgZCYjMjMzO3RlbmlyIHVuIG91IHBsdXNpZXVycyBicmV2ZXRzIGRgaW52ZW50aW9uIHByb3QmIzIzMztnZWFudCB0b3V0IG91IHBhcnRpZSBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgZHUgTG9naWNpZWwgb3UgZGUgc2VzIGNvbXBvc2FudHMsIGlsIHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgb3Bwb3NlciBsZXMgJiMyMzM7dmVudHVlbHMgZHJvaXRzIGNvbmYmIzIzMztyJiMyMzM7cyBwYXIgY2VzIGJyZXZldHMgYXV4IExpY2VuY2kmIzIzMztzIHN1Y2Nlc3NpZnMgcXVpIHV0aWxpc2VyYWllbnQsIGV4cGxvaXRlcmFpZW50IG91IG1vZGlmaWVyYWllbnQgbGUgTG9naWNpZWwuIEVuIGNhcyBkZSBjZXNzaW9uIGRlIGNlcyBicmV2ZXRzLCBsZSBDb25jJiMyMzM7ZGFudCBzYGVuZ2FnZSAmIzIyNDsgZmFpcmUgcmVwcmVuZHJlIGxlcyBvYmxpZ2F0aW9ucyBkdSBwciYjMjMzO3NlbnQgYWxpbiYjMjMzO2EgYXV4IGNlc3Npb25uYWlyZXMuCisKKzUuMSBEUk9JVCBEYFVUSUxJU0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyIGxlIExvZ2ljaWVsLCBzYW5zIHJlc3RyaWN0aW9uIHF1YW50IGF1eCBkb21haW5lcyBkYGFwcGxpY2F0aW9uLCAmIzIzMzt0YW50IGNpLWFwciYjMjMyO3MgcHImIzIzMztjaXMmIzIzMzsgcXVlIGNlbGEgY29tcG9ydGU6CisKK2xhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS4KKworbGUgY2hhcmdlbWVudCwgbGBhZmZpY2hhZ2UsIGxgZXgmIzIzMztjdXRpb24sIG91IGxlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHN1ciB0b3V0IHN1cHBvcnQuCisKK2xhIHBvc3NpYmlsaXQmIzIzMzsgZGBlbiBvYnNlcnZlciwgZGBlbiAmIzIzMzt0dWRpZXIsIG91IGRgZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZCYjMjMzO3Rlcm1pbmVyIGxlcyBpZCYjMjMzO2VzIGV0IHByaW5jaXBlcyBxdWkgc29udCAmIzIyNDsgbGEgYmFzZSBkZSBuYGltcG9ydGUgcXVlbCAmIzIzMztsJiMyMzM7bWVudCBkZSBjZSBMb2dpY2llbDsgZXQgY2VjaSwgbG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGVmZmVjdHVlIHRvdXRlIG9wJiMyMzM7cmF0aW9uIGRlIGNoYXJnZW1lbnQsIGRgYWZmaWNoYWdlLCBkYGV4JiMyMzM7Y3V0aW9uLCBkZSB0cmFuc21pc3Npb24gb3UgZGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgcXVgaWwgZXN0IGVuIGRyb2l0IGRgZWZmZWN0dWVyIGVuIHZlcnR1IGR1IENvbnRyYXQuCisKKzUuMiBEUk9JVCBEYEFQUE9SVEVSIERFUyBDT05UUklCVVRJT05TCisKK0xlIGRyb2l0IGRgYXBwb3J0ZXIgZGVzIENvbnRyaWJ1dGlvbnMgY29tcG9ydGUgbGUgZHJvaXQgZGUgdHJhZHVpcmUsIGRgYWRhcHRlciwgZGBhcnJhbmdlciBvdSBkYGFwcG9ydGVyIHRvdXRlIGF1dHJlIG1vZGlmaWNhdGlvbiBhdSBMb2dpY2llbCBldCBsZSBkcm9pdCBkZSByZXByb2R1aXJlIGxlIGxvZ2ljaWVsIGVuIHImIzIzMztzdWx0YW50LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBhcHBvcnRlciB0b3V0ZSBDb250cmlidXRpb24gYXUgTG9naWNpZWwgc291cyByJiMyMzM7c2VydmUgZGUgbWVudGlvbm5lciwgZGUgZmEmIzIzMTtvbiBleHBsaWNpdGUsIHNvbiBub20gZW4gdGFudCBxdWBhdXRldXIgZGUgY2V0dGUgQ29udHJpYnV0aW9uIGV0IGxhIGRhdGUgZGUgY3ImIzIzMzthdGlvbiBkZSBjZWxsZS1jaS4KKworNS4zIERST0lUIERFIERJU1RSSUJVVElPTgorCitMZSBkcm9pdCBkZSBkaXN0cmlidXRpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIGRpZmZ1c2VyLCBkZSB0cmFuc21ldHRyZSBldCBkZSBjb21tdW5pcXVlciBsZSBMb2dpY2llbCBhdSBwdWJsaWMgc3VyIHRvdXQgc3VwcG9ydCBldCBwYXIgdG91dCBtb3llbiBhaW5zaSBxdWUgbGUgZHJvaXQgZGUgbWV0dHJlIHN1ciBsZSBtYXJjaCYjMjMzOyAmIzIyNDsgdGl0cmUgb24mIzIzMztyZXV4IG91IGdyYXR1aXQsIHVuIG91IGRlcyBleGVtcGxhaXJlcyBkdSBMb2dpY2llbCBwYXIgdG91dCBwcm9jJiMyMzM7ZCYjMjMzOy4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCAmIzIyNDsgZGVzIHRpZXJzIGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworNS4zLjEgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIFNBTlMgTU9ESUZJQ0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmIGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCwgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4yIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBNT0RJRklFCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhcHBvcnRlIHVuZSBDb250cmlidXRpb24gYXUgTG9naWNpZWwsIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBhdXRyZSBxdWUgbGUgcHImIzIzMztzZW50IENvbnRyYXQgc291cyByJiMyMzM7c2VydmUgZHUgcmVzcGVjdCBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA1LjMuNC4KKworNS4zLjMgRElTVFJJQlVUSU9OIERFUyBNT0RVTEVTIEVYVEVSTkVTCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgbGVzIGNvbmRpdGlvbnMgZHUgQ29udHJhdCBuZSBzYGFwcGxpcXVlbnQgcGFzICYjMjI0OyBjZSBNb2R1bGUgRXh0ZXJuZSwgcXVpIHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGRpZmYmIzIzMztyZW50LgorCis1LjMuNCBDSVRBVElPTlMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgZGlzdHJpYnVlIHVuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBzYGVuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IGluZGlxdWVyIGRhbnMgc2EgZG9jdW1lbnRhdGlvbiBxdWBpbCBhICYjMjMzO3QmIzIzMzsgciYjMjMzO2FsaXMmIzIzMzsgJiMyMjQ7IHBhcnRpciBkdSBMb2dpY2llbCByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQsIGVuIHJlcHJvZHVpc2FudCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBMb2dpY2llbCwKKworJiMyMjQ7IGZhaXJlIGVuIHNvcnRlIHF1ZSBsYHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsLCBzZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBsZSBmYWl0IHF1YGlsIGVzdCByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgc29pZW50IGluZGlxdSYjMjMzO3MgZGFucyB1biB0ZXh0ZSBmYWNpbGVtZW50IGFjY2Vzc2libGUgZGVwdWlzIGxgaW50ZXJmYWNlIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOywKKworJiMyMjQ7IG1lbnRpb25uZXIsIHN1ciB1biBzaXRlIFdlYiBsaWJyZW1lbnQgYWNjZXNzaWJsZSBkJiMyMzM7Y3JpdmFudCBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzssIGV0IHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBzYSBkaXN0cmlidXRpb24sIHF1YGlsIGEgJiMyMzM7dCYjMjMzOyByJiMyMzM7YWxpcyYjMjMzOyAmIzIyNDsgcGFydGlyIGR1IExvZ2ljaWVsIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCwgZW4gcmVwcm9kdWlzYW50IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IExvZ2ljaWVsLAorCitsb3JzcXVgaWwgbGUgZGlzdHJpYnVlICYjMjI0OyB1biB0aWVycyBzdXNjZXB0aWJsZSBkZSBkaXN0cmlidWVyIGx1aS1tJiMyMzQ7bWUgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBzYW5zIGF2b2lyICYjMjI0OyBlbiBkaXN0cmlidWVyIGxlIGNvZGUgc291cmNlLCAmIzIyNDsgZmFpcmUgc2VzIG1laWxsZXVycyBlZmZvcnRzIHBvdXIgcXVlIGxlcyBvYmxpZ2F0aW9ucyBkdSBwciYjMjMzO3NlbnQgYXJ0aWNsZSA1LjMuNCBzb2llbnQgcmVwcmlzZXMgcGFyIGxlIGRpdCB0aWVycy4KKworTG9yc3F1ZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uIGVzdCBkaXN0cmlidSYjMjMzOyBhdmVjIHVuIE1vZHVsZSBFeHRlcm5lIHF1aSBhICYjMjMzO3QmIzIzMzsgY29uJiMyMzE7dSBwb3VyIGxgdXRpbGlzZXIsIGxlIExpY2VuY2kmIzIzMzsgZG9pdCBzb3VtZXR0cmUgbGUgZGl0IE1vZHVsZSBFeHRlcm5lIGF1eCBvYmxpZ2F0aW9ucyBwciYjMjMzO2MmIzIzMztkZW50ZXMuCisKKzUuMy41IENPTVBBVElCSUxJVEUgQVZFQyBMRVMgTElDRU5DRVMgQ2VDSUxMIGV0IENlQ0lMTC1DCisKK0xvcnNxdWB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzsgY29udGllbnQgdW5lIENvbnRyaWJ1dGlvbiBzb3VtaXNlIGF1IGNvbnRyYXQgZGUgbGljZW5jZSBDZUNJTEwsIGxlcyBzdGlwdWxhdGlvbnMgcHImIzIzMzt2dWVzICYjMjI0OyBsYGFydGljbGUgNS4zLjQgc29udCBmYWN1bHRhdGl2ZXMuCisKK1VuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIGxlIGNvbnRyYXQgZGUgbGljZW5jZSBDZUNJTEwtQy4gTGVzIHN0aXB1bGF0aW9ucyBwciYjMjMzO3Z1ZXMgJiMyMjQ7IGxgYXJ0aWNsZSA1LjMuNCBzb250IGFsb3JzIGZhY3VsdGF0aXZlcy4KKworQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFCisKKzYuMSBTVVIgTEUgTE9HSUNJRUwgSU5JVElBTAorCitMZSBUaXR1bGFpcmUgZXN0IGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLiBUb3V0ZSB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCBJbml0aWFsIGVzdCBzb3VtaXNlIGF1IHJlc3BlY3QgZGVzIGNvbmRpdGlvbnMgZGFucyBsZXNxdWVsbGVzIGxlIFRpdHVsYWlyZSBhIGNob2lzaSBkZSBkaWZmdXNlciBzb24gb2V1dnJlIGV0IG51bCBhdXRyZSBuYGEgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZSBsZSBMb2dpY2llbCBJbml0aWFsIHJlc3RlIGF1IG1vaW5zIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBldCBjZSwgcG91ciBsYSBkdXImIzIzMztlIHZpcyYjMjMzO2UgJiMyMjQ7IGxgYXJ0aWNsZSA0LjIuCisKKzYuMiBTVVIgTEVTIENPTlRSSUJVVElPTlMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuZSBDb250cmlidXRpb24gZXN0IHRpdHVsYWlyZSBzdXIgY2VsbGUtY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMgU1VSIExFUyBNT0RVTEVTIEVYVEVSTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRXh0ZXJuZSBlc3QgdGl0dWxhaXJlIHN1ciBjZWx1aS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24uCisKKzYuNCBESVNQT1NJVElPTlMgQ09NTVVORVMKKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsYGlkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24uCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBwb3J0ZXIgYXR0ZWludGUsIGRpcmVjdGVtZW50IG91IGluZGlyZWN0ZW1lbnQsIGF1eCBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgc3VyIGxlIExvZ2ljaWVsIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsYCYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMSBMZSBDb250cmF0IG5gb2JsaWdlIGVuIGF1Y3VuIGNhcyBsZSBDb25jJiMyMzM7ZGFudCAmIzIyNDsgbGEgciYjMjMzO2FsaXNhdGlvbiBkZSBwcmVzdGF0aW9ucyBkYGFzc2lzdGFuY2UgdGVjaG5pcXVlIG91IGRlIG1haW50ZW5hbmNlIGR1IExvZ2ljaWVsLgorCitDZXBlbmRhbnQgbGUgQ29uYyYjMjMzO2RhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGRgdW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGRgdW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkJiMyMzM7dGVybWluJiMyMzM7cyBkYW5zIHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOy4gQ2VzIGFjdGVzIGRlIG1haW50ZW5hbmNlIGV0L291IGFzc2lzdGFuY2UgdGVjaG5pcXVlIG5gZW5nYWdlcm9udCBxdWUgbGEgc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBxdWkgbGVzIHByb3Bvc2UuCisKKzcuMiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbmBlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdWBpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsYG9iamV0IGRgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMSBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA4LjIsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1YGlsIHN1YmlyYWl0IGR1IGZhaXQgZHUgTG9naWNpZWwgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIgTGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBlc3QgbGltaXQmIzIzMztlIGF1eCBlbmdhZ2VtZW50cyBwcmlzIGVuIGFwcGxpY2F0aW9uIGR1IENvbnRyYXQgZXQgbmUgc2F1cmFpdCAmIzIzNDt0cmUgZW5nYWcmIzIzMztlIGVuIHJhaXNvbiBub3RhbW1lbnQ6IChpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsYGluZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbGB1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGV0IChpaWkpIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCBkYHVuIHF1ZWxjb25xdWUgZG9tbWFnZSBpbmRpcmVjdC4gRW4gcGFydGljdWxpZXIsIGxlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGRgZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG5gb3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGAmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGRgZW4gdGVzdGVyIGV0IGRgZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGxgZXhpc3RlbmNlIGRgJiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMYGF0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsYGFkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXVgaWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Y2xhcmUgZGUgYm9ubmUgZm9pICYjMjM0O3RyZSBlbiBkcm9pdCBkZSBjb25jJiMyMzM7ZGVyIGxgZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2gmIzIzMztzIGF1IExvZ2ljaWVsIChjb21wcmVuYW50IG5vdGFtbWVudCBsZXMgZHJvaXRzIHZpcyYjMjMzO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1KS4KKworOS4zIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgImVuIGxgJiMyMzM7dGF0IiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGxgYXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXVgaWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdWBpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsYCYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdWBpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQgTGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzLCBkZSBtYW5pJiMyMzI7cmUgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgbGUgTG9naWNpZWwgbmUgcG9ydGUgcGFzIGF0dGVpbnRlICYjMjI0OyB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGB1biB0aWVycyBwb3J0YW50IHN1ciB1biBicmV2ZXQsIHVuIGxvZ2ljaWVsIG91IHN1ciB0b3V0IGF1dHJlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsuIEFpbnNpLCBsZSBDb25jJiMyMzM7ZGFudCBleGNsdXQgdG91dGUgZ2FyYW50aWUgYXUgcHJvZml0IGR1IExpY2VuY2kmIzIzMzsgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhJiMyMzE7b24gcXVpIHBvdXJyYWllbnQgJiMyMzQ7dHJlIGRpbGlnZW50JiMyMzM7ZXMgYXUgdGl0cmUgZGUgbGB1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTiYjMjMzO2FubW9pbnMsIHNpIGRlIHRlbGxlcyBhY3Rpb25zIHNvbnQgZXhlcmMmIzIzMztlcyBjb250cmUgbGUgTGljZW5jaSYjMjMzOywgbGUgQ29uYyYjMjMzO2RhbnQgbHVpIGFwcG9ydGVyYSBzb24gYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIHBvdXIgc2EgZCYjMjMzO2ZlbnNlLiBDZXR0ZSBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgZXN0IGQmIzIzMzt0ZXJtaW4mIzIzMztlIGF1IGNhcyBwYXIgY2FzIGVudHJlIGxlIENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzsgZXQgbGUgTGljZW5jaSYjMjMzOyBkYW5zIGxlIGNhZHJlIGRgdW4gcHJvdG9jb2xlIGRgYWNjb3JkLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Z2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0JiMyMzM7IHF1YW50ICYjMjI0OyBsYHV0aWxpc2F0aW9uIGRlIGxhIGQmIzIzMztub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpJiMyMzM7LiBBdWN1bmUgZ2FyYW50aWUgbmBlc3QgYXBwb3J0JiMyMzM7ZSBxdWFudCAmIzIyNDsgbGBleGlzdGVuY2UgZGUgZHJvaXRzIGFudCYjMjMzO3JpZXVycyBzdXIgbGUgbm9tIGR1IExvZ2ljaWVsIGV0IHN1ciBsYGV4aXN0ZW5jZSBkYHVuZSBtYXJxdWUuCisKK0FydGljbGUgMTAgLSBSRVNJTElBVElPTgorCisxMC4xIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuYGVzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXVgaWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdWBlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEgQ0FVU0UgRVhURVJJRVVSRQorCitBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkYHVuIHJldGFyZCBvdSBkYHVuZSBkJiMyMzM7ZmFpbGxhbmNlIGRgZXgmIzIzMztjdXRpb24gZHUgQ29udHJhdCBxdWkgc2VyYWl0IGQmIzI1MTsgJiMyMjQ7IHVuIGNhcyBkZSBmb3JjZSBtYWpldXJlLCB1biBjYXMgZm9ydHVpdCBvdSB1bmUgY2F1c2UgZXh0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUsIG5vdGFtbWVudCwgbGUgbWF1dmFpcyBmb25jdGlvbm5lbWVudCBvdSBsZXMgaW50ZXJydXB0aW9ucyBkdSByJiMyMzM7c2VhdSAmIzIzMztsZWN0cmlxdWUgb3UgZGUgdCYjMjMzO2wmIzIzMztjb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgciYjMjMzO3NlYXUgbGkmIzIzMztlICYjMjI0OyB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGxgaW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0JiMyMzM7cyBnb3V2ZXJuZW1lbnRhbGVzLCBsZXMgY2F0YXN0cm9waGVzIG5hdHVyZWxsZXMsIGxlcyBkJiMyMzM7ZyYjMjI2O3RzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3ImIzIzMjt2ZXMgZXQgbGVzIGNvbmZsaXRzIHNvY2lhdXgsIGxgJiMyMzM7dGF0IGRlIGd1ZXJyZS4uLgorCisxMS4yIExlIGZhaXQsIHBhciBsYHVuZSBvdSBsYGF1dHJlIGRlcyBQYXJ0aWVzLCBkYG9tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZGB1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgc2BlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50JiMyMzM7cmlldXJlLCAmIzIzMztjcml0ZSBvdSBvcmFsZSwgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGxlIG0mIzIzNDttZSBvYmpldCBldCBjb25zdGl0dWUgbGBhY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG5gYXVyYSBkYGVmZmV0ICYjMjI0OyBsYCYjMjMzO2dhcmQgZGVzIFBhcnRpZXMgJiMyMjQ7IG1vaW5zIGRgJiMyMzQ7dHJlIGZhaXRlIHBhciAmIzIzMztjcml0IGV0IHNpZ24mIzIzMztlIHBhciBsZXVycyByZXByJiMyMzM7c2VudGFudHMgZCYjMjUxO21lbnQgaGFiaWxpdCYjMjMzO3MuCisKKzExLjQgRGFucyBsYGh5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgc2BhdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZGB1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGxgZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNSBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLCBjZXMgZGV1eCB2ZXJzaW9ucyBmYWlzYW50ICYjMjMzO2dhbGVtZW50IGZvaS4KKworQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUCisKKzEyLjEgVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIgQWZpbiBkYGVuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMzO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zIFRvdXQgTG9naWNpZWwgZGlmZnVzJiMyMzM7IHNvdXMgdW5lIHZlcnNpb24gZG9ubiYjMjMzO2UgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbGBvYmpldCBkYHVuZSBkaWZmdXNpb24gdWx0JiMyMzM7cmlldXJlIHF1ZSBzb3VzIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGR1IENvbnRyYXQgb3UgdW5lIHZlcnNpb24gcG9zdCYjMjMzO3JpZXVyZS4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEgTGUgQ29udHJhdCBlc3QgciYjMjMzO2dpIHBhciBsYSBsb2kgZnJhbiYjMjMxO2Fpc2UuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGRlIHRlbnRlciBkZSByJiMyMzM7Z2xlciAmIzIyNDsgbGBhbWlhYmxlIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBxdWkgdmllbmRyYWllbnQgJiMyMjQ7IHNlIHByb2R1aXJlIHBhciBzdWl0ZSBvdSAmIzIyNDsgbGBvY2Nhc2lvbiBkdSBDb250cmF0LgorCisxMy4yIEEgZCYjMjMzO2ZhdXQgZGBhY2NvcmQgYW1pYWJsZSBkYW5zIHVuIGQmIzIzMztsYWkgZGUgZGV1eCAoMikgbW9pcyAmIzIyNDsgY29tcHRlciBkZSBsZXVyIHN1cnZlbmFuY2UgZXQgc2F1ZiBzaXR1YXRpb24gcmVsZXZhbnQgZGB1bmUgcHJvYyYjMjMzO2R1cmUgZGB1cmdlbmNlLCBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgc2Vyb250IHBvcnQmIzIzMztzIHBhciBsYSBQYXJ0aWUgbGEgcGx1cyBkaWxpZ2VudGUgZGV2YW50IGxlcyBUcmlidW5hdXggY29tcCYjMjMzO3RlbnRzIGRlIFBhcmlzLgorCisxIENlQ0lMTCBlc3QgcG91ciBDZShhKSBDKG5ycykgSShucmlhKSBMKG9naWNpZWwpIEwoaWJyZSkKKworVmVyc2lvbiAxLjAgZHUgMjAwNi0wOS0wNS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZWY4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUMKQEAgLTAsMCArMSwyNDEgQEAKKworQ09OVFJBVCBERSBMSUNFTkNFIERFIExPR0lDSUVMIExJQlJFIENlQ0lMTC1DCisKK0F2ZXJ0aXNzZW1lbnQKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgaXNzdWUgZGB1bmUgY29uY2VydGF0aW9uIGVudHJlIHNlcyBhdXRldXJzIGFmaW4gcXVlIGxlIHJlc3BlY3QgZGUgZGV1eCBncmFuZHMgcHJpbmNpcGVzIHByJiMyMzM7c2lkZSAmIzIyNDsgc2EgciYjMjMzO2RhY3Rpb246CisKK2RgdW5lIHBhcnQsIGxlIHJlc3BlY3QgZGVzIHByaW5jaXBlcyBkZSBkaWZmdXNpb24gZGVzIGxvZ2ljaWVscyBsaWJyZXM6IGFjYyYjMjMyO3MgYXUgY29kZSBzb3VyY2UsIGRyb2l0cyAmIzIzMzt0ZW5kdXMgY29uZiYjMjMzO3ImIzIzMztzIGF1eCB1dGlsaXNhdGV1cnMsCitkYGF1dHJlIHBhcnQsIGxhIGQmIzIzMztzaWduYXRpb24gZGB1biBkcm9pdCBhcHBsaWNhYmxlLCBsZSBkcm9pdCBmcmFuJiMyMzE7YWlzLCBhdXF1ZWwgZWxsZSBlc3QgY29uZm9ybWUsIHRhbnQgYXUgcmVnYXJkIGR1IGRyb2l0IGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgY2l2aWxlIHF1ZSBkdSBkcm9pdCBkZSBsYSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGRlIGxhIHByb3RlY3Rpb24gcXVgaWwgb2ZmcmUgYXV4IGF1dGV1cnMgZXQgdGl0dWxhaXJlcyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgdW4gbG9naWNpZWwuCitMZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlIENlQ0lMTC1DMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGxgRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSByZWNoZXJjaGUgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSwgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAyNSBydWUgTGVibGFuYywgaW1tZXVibGUgTGUgUG9uYW50IEQsIDc1MDE1IFBhcmlzLgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UsIDc1Nzk0IFBhcmlzIGNlZGV4IDE2LgorCitJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlIC0gSU5SSUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUCAxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXguCisKK1ByJiMyMzM7YW1idWxlCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIGxhIGxpYmVydCYjMjMzOyBkZSBtb2RpZmllciBldCBkZSByJiMyMzM7dXRpbGlzZXIgbGUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlLgorCitMYGV4ZXJjaWNlIGRlIGNldHRlIGxpYmVydCYjMjMzOyBlc3QgYXNzb3J0aSBkYHVuZSBvYmxpZ2F0aW9uIGRlIHJlbWV0dHJlICYjMjI0OyBsYSBkaXNwb3NpdGlvbiBkZSBsYSBjb21tdW5hdXQmIzIzMzsgbGVzIG1vZGlmaWNhdGlvbnMgYXBwb3J0JiMyMzM7ZXMgYXUgY29kZSBzb3VyY2UgZHUgbG9naWNpZWwgYWZpbiBkZSBjb250cmlidWVyICYjMjI0OyBzb24gJiMyMzM7dm9sdXRpb24uCisKK0xgYWNjZXNzaWJpbGl0JiMyMzM7IGF1IGNvZGUgc291cmNlIGV0IGxlcyBkcm9pdHMgZGUgY29waWUsIGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBxdWkgZCYjMjMzO2NvdWxlbnQgZGUgY2UgY29udHJhdCBvbnQgcG91ciBjb250cmVwYXJ0aWUgZGUgbmBvZmZyaXIgYXV4IHV0aWxpc2F0ZXVycyBxdWB1bmUgZ2FyYW50aWUgbGltaXQmIzIzMztlIGV0IGRlIG5lIGZhaXJlIHBlc2VyIHN1ciBsYGF1dGV1ciBkdSBsb2dpY2llbCwgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGV0IGxlcyBjb25jJiMyMzM7ZGFudHMgc3VjY2Vzc2lmcyBxdWB1bmUgcmVzcG9uc2FiaWxpdCYjMjMzOyByZXN0cmVpbnRlLgorCitBIGNldCAmIzIzMztnYXJkIGxgYXR0ZW50aW9uIGRlIGxgdXRpbGlzYXRldXIgZXN0IGF0dGlyJiMyMzM7ZSBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgJiMyMjQ7IGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBsb2dpY2llbCBwYXIgbGB1dGlsaXNhdGV1ciAmIzIzMzt0YW50IGRvbm4mIzIzMzsgc2Egc3AmIzIzMztjaWZpY2l0JiMyMzM7IGRlIGxvZ2ljaWVsIGxpYnJlLCBxdWkgcGV1dCBsZSByZW5kcmUgY29tcGxleGUgJiMyMjQ7IG1hbmlwdWxlciBldCBxdWkgbGUgciYjMjMzO3NlcnZlIGRvbmMgJiMyMjQ7IGRlcyBkJiMyMzM7dmVsb3BwZXVycyBvdSBkZXMgcHJvZmVzc2lvbm5lbHMgYXZlcnRpcyBwb3NzJiMyMzM7ZGFudCBkZXMgY29ubmFpc3NhbmNlcyBpbmZvcm1hdGlxdWVzIGFwcHJvZm9uZGllcy4gTGVzIHV0aWxpc2F0ZXVycyBzb250IGRvbmMgaW52aXQmIzIzMztzICYjMjI0OyBjaGFyZ2VyIGV0IHRlc3RlciBsYGFkJiMyMzM7cXVhdGlvbiBkdSBsb2dpY2llbCAmIzIyNDsgbGV1cnMgYmVzb2lucyBkYW5zIGRlcyBjb25kaXRpb25zIHBlcm1ldHRhbnQgZGBhc3N1cmVyIGxhIHMmIzIzMztjdXJpdCYjMjMzOyBkZSBsZXVycyBzeXN0JiMyMzI7bWVzIGV0L291IGRlIGxldXJzIGRvbm4mIzIzMztlcyBldCwgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50LCAmIzIyNDsgbGB1dGlsaXNlciBldCBsYGV4cGxvaXRlciBkYW5zIGxlcyBtJiMyMzQ7bWVzIGNvbmRpdGlvbnMgZGUgcyYjMjMzO2N1cml0JiMyMzM7LiBDZSBjb250cmF0IHBldXQgJiMyMzQ7dHJlIHJlcHJvZHVpdCBldCBkaWZmdXMmIzIzMzsgbGlicmVtZW50LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBsZSBjb25zZXJ2ZXIgZW4gbGAmIzIzMzt0YXQsIHNhbnMgYWpvdXQgbmkgc3VwcHJlc3Npb24gZGUgY2xhdXNlcy4KKworQ2UgY29udHJhdCBlc3Qgc3VzY2VwdGlibGUgZGUgc2BhcHBsaXF1ZXIgJiMyMjQ7IHRvdXQgbG9naWNpZWwgZG9udCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjMjMzO2NpZGUgZGUgc291bWV0dHJlIGxgZXhwbG9pdGF0aW9uIGF1eCBkaXNwb3NpdGlvbnMgcXVgaWwgY29udGllbnQuCisKK0FydGljbGUgMSAtIERFRklOSVRJT05TCisKK0RhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1YGlscyBzZXJvbnQgJiMyMzM7Y3JpdHMgYXZlYyB1bmUgbGV0dHJlIGNhcGl0YWxlLCBhdXJvbnQgbGEgc2lnbmlmaWNhdGlvbiBzdWl2YW50ZToKKworQ29udHJhdDogZCYjMjMzO3NpZ25lIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyAmIzIzMzt2ZW50dWVsbGVzIHZlcnNpb25zIHBvc3QmIzIzMztyaWV1cmVzIGV0IGFubmV4ZXMuCisKK0xvZ2ljaWVsOiBkJiMyMzM7c2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsYGFjY2VwdGF0aW9uIGR1IENvbnRyYXQgcGFyIGxlIExpY2VuY2kmIzIzMzsuCisKK0xvZ2ljaWVsIEluaXRpYWw6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgU291cmNlIGV0ICYjMjMzO3ZlbnR1ZWxsZW1lbnQgZGUgQ29kZSBPYmpldCBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGV1ciBwcmVtaSYjMjMyO3JlIGRpZmZ1c2lvbiBzb3VzIGxlcyB0ZXJtZXMgZHUgQ29udHJhdC4KKworTG9naWNpZWwgTW9kaWZpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IHBhciBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZS4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGxgYWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIGQmIzIzMzt0ZW50ZXVycyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkYGF1dGV1ciBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4KKworTGljZW5jaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cnMgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGRgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UuCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2U6IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhZHVjdGlvbnMsIGFkYXB0YXRpb25zIGV0L291IG5vdXZlbGxlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBpbnQmIzIzMztnciYjMjMzO2VzIGRhbnMgbGUgQ29kZSBTb3VyY2UgcGFyIHRvdXQgQ29udHJpYnV0ZXVyLgorCitNb2R1bGUgTGkmIzIzMzs6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpLCBzYW5zIG1vZGlmaWNhdGlvbiBkdSBDb2RlIFNvdXJjZSwgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7OiBkJiMyMzM7c2lnbmUgdG91dGUgY29tYmluYWlzb24gZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sIGV0IGRgdW4gTW9kdWxlIExpJiMyMzM7LgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzYGVudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkYHVuZSBsaWNlbmNlIG5vbiBleGNsdXNpdmUsIGNlc3NpYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xIExgYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByJiMyMzM7cHV0JiMyMzM7ZSBhY3F1aXNlIGR1IGZhaXQgZHUgcHJlbWllciBkZXMgZmFpdHMgc3VpdmFudHM6CisKKyhpKSBsZSBjaGFyZ2VtZW50IGR1IExvZ2ljaWVsIHBhciB0b3V0IG1veWVuIG5vdGFtbWVudCBwYXIgdCYjMjMzO2wmIzIzMztjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzZXJ2ZXVyIGRpc3RhbnQgb3UgcGFyIGNoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHN1cHBvcnQgcGh5c2lxdWU7CisoaWkpIGxlIHByZW1pZXIgZXhlcmNpY2UgcGFyIGxlIExpY2VuY2kmIzIzMzsgZGUgbGB1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uYyYjMjMzO2QmIzIzMztzIHBhciBsZSBDb250cmF0LgorMy4yIFVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwgY29udGVuYW50IG5vdGFtbWVudCB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgYXV4IHNwJiMyMzM7Y2lmaWNpdCYjMjMzO3MgZHUgTG9naWNpZWwsICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCAmIzIyNDsgbGEgbGltaXRhdGlvbiAmIzIyNDsgdW4gdXNhZ2UgcGFyIGRlcyB1dGlsaXNhdGV1cnMgZXhwJiMyMzM7cmltZW50JiMyMzM7cyBhICYjMjMzO3QmIzIzMzsgbWlzICYjMjI0OyBkaXNwb3NpdGlvbiBkdSBMaWNlbmNpJiMyMzM7IHByJiMyMzM7YWxhYmxlbWVudCAmIzIyNDsgc29uIGFjY2VwdGF0aW9uIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgJiMyMjQ7IGxgYXJ0aWNsZSAzLjEgY2kgZGVzc3VzIGV0IGxlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgZW4gYXZvaXIgcHJpcyBjb25uYWlzc2FuY2UuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMSBFTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIgRFVSRUUKKworTGUgQ29udHJhdCBwcm9kdWlyYSBzZXMgZWZmZXRzIHBlbmRhbnQgdG91dGUgbGEgZHVyJiMyMzM7ZSBsJiMyMzM7Z2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLgorCitBcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVMKKworTGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzssIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXImIzIzMztlIGR1IENvbnRyYXQgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCitQYXIgYWlsbGV1cnMsIHNpIGxlIENvbmMmIzIzMztkYW50IGQmIzIzMzt0aWVudCBvdSB2ZW5haXQgJiMyMjQ7IGQmIzIzMzt0ZW5pciB1biBvdSBwbHVzaWV1cnMgYnJldmV0cyBkYGludmVudGlvbiBwcm90JiMyMzM7Z2VhbnQgdG91dCBvdSBwYXJ0aWUgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGR1IExvZ2ljaWVsIG91IGRlIHNlcyBjb21wb3NhbnRzLCBpbCBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIG9wcG9zZXIgbGVzICYjMjMzO3ZlbnR1ZWxzIGRyb2l0cyBjb25mJiMyMzM7ciYjMjMzO3MgcGFyIGNlcyBicmV2ZXRzIGF1eCBMaWNlbmNpJiMyMzM7cyBzdWNjZXNzaWZzIHF1aSB1dGlsaXNlcmFpZW50LCBleHBsb2l0ZXJhaWVudCBvdSBtb2RpZmllcmFpZW50IGxlIExvZ2ljaWVsLiBFbiBjYXMgZGUgY2Vzc2lvbiBkZSBjZXMgYnJldmV0cywgbGUgQ29uYyYjMjMzO2RhbnQgc2BlbmdhZ2UgJiMyMjQ7IGZhaXJlIHJlcHJlbmRyZSBsZXMgb2JsaWdhdGlvbnMgZHUgcHImIzIzMztzZW50IGFsaW4mIzIzMzthIGF1eCBjZXNzaW9ubmFpcmVzLgorCis1LjEgRFJPSVQgRGBVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZGBhcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGxgYWZmaWNoYWdlLCBsYGV4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGRgZW4gb2JzZXJ2ZXIsIGRgZW4gJiMyMzM7dHVkaWVyLCBvdSBkYGVuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbmBpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkYGFmZmljaGFnZSwgZGBleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1YGlsIGVzdCBlbiBkcm9pdCBkYGVmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIgRFJPSVQgREUgTU9ESUZJQ0FUSU9OCisKK0xlIGRyb2l0IGRlIG1vZGlmaWNhdGlvbiBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZGBhZGFwdGVyLCBkYGFycmFuZ2VyIG91IGRgYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgbG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuIElsIGNvbXByZW5kIGVuIHBhcnRpY3VsaWVyIGxlIGRyb2l0IGRlIGNyJiMyMzM7ZXIgdW4gTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOy4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgYXBwb3J0ZXIgdG91dGUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIHNvdXMgciYjMjMzO3NlcnZlIGRlIG1lbnRpb25uZXIsIGRlIGZhJiMyMzE7b24gZXhwbGljaXRlLCBzb24gbm9tIGVuIHRhbnQgcXVgYXV0ZXVyIGRlIGNldHRlIG1vZGlmaWNhdGlvbiBldCBsYSBkYXRlIGRlIGNyJiMyMzM7YXRpb24gZGUgY2VsbGUtY2kuCisKKzUuMyBEUk9JVCBERSBESVNUUklCVVRJT04KKworTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGNvbXBvcnRlIG5vdGFtbWVudCBsZSBkcm9pdCBkZSBkaWZmdXNlciwgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2gmIzIzMzsgJiMyMjQ7IHRpdHJlIG9uJiMyMzM7cmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvYyYjMjMzO2QmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgY29uZm9ybWVzIGR1IExvZ2ljaWVsLCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgdW4gYWNjJiMyMzI7cyBlZmZlY3RpZiBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBzYSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMiBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgTU9ESUZJRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZSBhdSBMb2dpY2llbCwgbGVzIGNvbmRpdGlvbnMgZGUgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiByJiMyMzM7c3VsdGFudCBzb250IGFsb3JzIHNvdW1pc2VzICYjMjI0OyBsYGludCYjMjMzO2dyYWxpdCYjMjMzOyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNvdXMgZm9ybWUgZGUgY29kZSBzb3VyY2Ugb3UgZGUgY29kZSBvYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgY29kZSBvYmpldCBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgdW4gYWNjJiMyMzI7cyBlZmZlY3RpZiAmIzIyNDsgc29uIGNvZGUgc291cmNlIGNvbXBsZXQgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzssICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgY29kZSBzb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMyBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgREVSSVZFCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBjciYjMjMzO2UgdW4gTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOywgY2UgTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOyBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBhdXRyZSBxdWUgbGUgcHImIzIzMztzZW50IENvbnRyYXQgJiMyMjQ7IGNvbmRpdGlvbiBkZSByZXNwZWN0ZXIgbGVzIG9ibGlnYXRpb25zIGRlIG1lbnRpb24gZGVzIGRyb2l0cyBzdXIgbGUgTG9naWNpZWwgdGVsbGVzIHF1ZSBkJiMyMzM7ZmluaWVzICYjMjI0OyBsYGFydGljbGUgNi40LiBEYW5zIGxlIGNhcyBvJiMyNDk7IGxhIGNyJiMyMzM7YXRpb24gZHUgTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOyBhIG4mIzIzMztjZXNzaXQmIzIzMzsgdW5lIG1vZGlmaWNhdGlvbiBkdSBDb2RlIFNvdXJjZSBsZSBsaWNlbmNpJiMyMzM7IHNgZW5nYWdlICYjMjI0OyBjZSBxdWU6CisKK2xlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBjb3JyZXNwb25kYW50ICYjMjI0OyBjZXR0ZSBtb2RpZmljYXRpb24gc29pdCByJiMyMzM7Z2kgcGFyIGxlIHByJiMyMzM7c2VudCBDb250cmF0LAorbGVzIENvbnRyaWJ1dGlvbnMgSW50JiMyMzM7Z3ImIzIzMztlcyBkb250IGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyByJiMyMzM7c3VsdGUgc29pZW50IGNsYWlyZW1lbnQgaWRlbnRpZmkmIzIzMztlcyBldCBkb2N1bWVudCYjMjMzO2VzLAorbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmIGF1IGNvZGUgc291cmNlIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIGxhIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LCBkZSB0ZWxsZSBzb3J0ZSBxdWUgY2VzIG1vZGlmaWNhdGlvbnMgcHVpc3NlbnQgJiMyMzQ7dHJlIHJlcHJpc2VzIGRhbnMgdW5lIHZlcnNpb24gdWx0JiMyMzM7cmlldXJlIGR1IExvZ2ljaWVsLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IGNvZGUgc291cmNlIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZHUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCis1LjMuNCBDT01QQVRJQklMSVRFIEFWRUMgTEEgTElDRU5DRSBDZUNJTEwKKworTG9yc3F1YHVuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBjb250aWVudCB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZSBzb3VtaXNlIGF1IGNvbnRyYXQgZGUgbGljZW5jZSBDZUNJTEwsIG91IGxvcnNxdWB1biBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7IGNvbnRpZW50IHVuIE1vZHVsZSBMaSYjMjMzOyBzb3VtaXMgYXUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTCwgbGVzIHN0aXB1bGF0aW9ucyBwciYjMjMzO3Z1ZXMgYXUgdHJvaXNpJiMyMzI7bWUgaXRlbSBkZSBsYGFydGljbGUgNi40IHNvbnQgZmFjdWx0YXRpdmVzLgorCitBcnRpY2xlIDYgLSBQUk9QUklFVEUgSU5URUxMRUNUVUVMTEUKKworNi4xIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiBvZXV2cmUgZXQgbnVsIGF1dHJlIG5gYSBsYSBmYWN1bHQmIzIzMzsgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xlIFRpdHVsYWlyZSBzYGVuZ2FnZSAmIzIyNDsgY2UgcXVlIGxlIExvZ2ljaWVsIEluaXRpYWwgcmVzdGUgYXUgbW9pbnMgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IGV0IGNlLCBwb3VyIGxhIGR1ciYjMjMzO2UgdmlzJiMyMzM7ZSAmIzIyNDsgbGBhcnRpY2xlIDQuMi4KKworNi4yIFNVUiBMRVMgQ09OVFJJQlVUSU9OUyBJTlRFR1JFRVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlIGVzdCB0aXR1bGFpcmUgc3VyIGNlbGxlLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZS4KKworNi4zIFNVUiBMRVMgTU9EVUxFUyBMSUVTCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgTGkmIzIzMzsgZXN0IHRpdHVsYWlyZSBzdXIgY2VsdWktY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyAmIzIyNDsgbGBhcnRpY2xlIDUuMy4zLgorCis2LjQgTUVOVElPTlMgREVTIERST0lUUworCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgbmUgcGFzIHN1cHByaW1lciBvdSBtb2RpZmllciBkZSBxdWVscXVlIG1hbmkmIzIzMjtyZSBxdWUgY2Ugc29pdCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBhcHBvcyYjMjMzO2VzIHN1ciBsZSBMb2dpY2llbDsKKworJiMyMjQ7IHJlcHJvZHVpcmUgJiMyMjQ7IGxgaWRlbnRpcXVlIGxlc2RpdGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbjsKKworJiMyMjQ7IGZhaXJlIGVuIHNvcnRlIHF1ZSBsYHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsLCBzZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBsZSBmYWl0IHF1YGlsIGVzdCByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgc29pZW50IGluZGlxdSYjMjMzO3MgZGFucyB1biB0ZXh0ZSBmYWNpbGVtZW50IGFjY2Vzc2libGUgbm90YW1tZW50IGRlcHVpcyBsYGludGVyZmFjZSBkZSB0b3V0IExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsuCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIHN1ciBsZSBMb2dpY2llbCBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEgTGUgQ29udHJhdCBuYG9ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZGBhc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkYHVuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkYHVuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuYGVuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIgRGUgbSYjMjM0O21lLCB0b3V0IENvbmMmIzIzMztkYW50IGVzdCBsaWJyZSBkZSBwcm9wb3Nlciwgc291cyBzYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7LCAmIzIyNDsgc2VzIGxpY2VuY2kmIzIzMztzIHVuZSBnYXJhbnRpZSwgcXVpIG5gZW5nYWdlcmEgcXVlIGx1aSwgbG9ycyBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBldC9vdSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXVgaWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0JiMyMzM7cyBmaW5hbmNpJiMyMzI7cmVzIGRlIHNvbiBhcHBsaWNhdGlvbiBmZXJvbnQgbGBvYmpldCBkYHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBldCBsZSBMaWNlbmNpJiMyMzM7LgorCitBcnRpY2xlIDggLSBSRVNQT05TQUJJTElURQorCis4LjEgU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgOC4yLCBsZSBMaWNlbmNpJiMyMzM7IGEgbGEgZmFjdWx0JiMyMzM7LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBwcm91dmVyIGxhIGZhdXRlIGR1IENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzssIGRlIHNvbGxpY2l0ZXIgbGEgciYjMjMzO3BhcmF0aW9uIGR1IHByJiMyMzM7anVkaWNlIGRpcmVjdCBxdWBpbCBzdWJpcmFpdCBkdSBmYWl0IGR1IExvZ2ljaWVsIGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OiAoaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbGBpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGxgdXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBldCAoaWlpKSBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQgZGB1biBxdWVsY29ucXVlIGRvbW1hZ2UgaW5kaXJlY3QuIEVuIHBhcnRpY3VsaWVyLCBsZXMgUGFydGllcyBjb252aWVubmVudCBleHByZXNzJiMyMzM7bWVudCBxdWUgdG91dCBwciYjMjMzO2p1ZGljZSBmaW5hbmNpZXIgb3UgY29tbWVyY2lhbCAocGFyIGV4ZW1wbGUgcGVydGUgZGUgZG9ubiYjMjMzO2VzLCBwZXJ0ZSBkZSBiJiMyMzM7biYjMjMzO2ZpY2VzLCBwZXJ0ZSBkYGV4cGxvaXRhdGlvbiwgcGVydGUgZGUgY2xpZW50JiMyMzI7bGUgb3UgZGUgY29tbWFuZGVzLCBtYW5xdWUgJiMyMjQ7IGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZyYjMjMzO2UgY29udHJlIGxlIExpY2VuY2kmIzIzMzsgcGFyIHVuIHRpZXJzLCBjb25zdGl0dWUgdW4gZG9tbWFnZSBpbmRpcmVjdCBldCBuYG91dnJlIHBhcyBkcm9pdCAmIzIyNDsgciYjMjMzO3BhcmF0aW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudC4KKworQXJ0aWNsZSA5IC0gR0FSQU5USUUKKworOS4xIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxgJiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkYGVuIHRlc3RlciBldCBkYGVuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsYGV4aXN0ZW5jZSBkYCYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTGBhdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbGBhZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1YGlsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIgTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMyBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsZSBMb2dpY2llbCBlc3QgZm91cm5pICJlbiBsYCYjMjMzO3RhdCIgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsYGFydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1YGlsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXVgaWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbGAmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXVgaWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40IExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRgdW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGxgdXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkYHVuIHByb3RvY29sZSBkYGFjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbGB1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG5gZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGxgZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbGBleGlzdGVuY2UgZGB1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMSBFbiBjYXMgZGUgbWFucXVlbWVudCBwYXIgbGUgTGljZW5jaSYjMjMzOyBhdXggb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uYyYjMjMzO2RhbnQgcG91cnJhIHImIzIzMztzaWxpZXIgZGUgcGxlaW4gZHJvaXQgbGUgQ29udHJhdCB0cmVudGUgKDMwKSBqb3VycyBhcHImIzIzMjtzIG5vdGlmaWNhdGlvbiBhZHJlc3MmIzIzMztlIGF1IExpY2VuY2kmIzIzMzsgZXQgcmVzdCYjMjMzO2Ugc2FucyBlZmZldC4KKworMTAuMiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbmBlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1YGlsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXVgZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZGB1biByZXRhcmQgb3UgZGB1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkYGV4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsYGludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsYCYjMjMzO3RhdCBkZSBndWVycmUuLi4KKworMTEuMiBMZSBmYWl0LCBwYXIgbGB1bmUgb3UgbGBhdXRyZSBkZXMgUGFydGllcywgZGBvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGRgdW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHNgZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMyBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGxgYWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuYGF1cmEgZGBlZmZldCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkYCYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40IERhbnMgbGBoeXBvdGgmIzIzMjtzZSBvJiMyNDk7IHVuZSBvdSBwbHVzaWV1cnMgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IHNgYXYmIzIzMjtyZXJhaXQgY29udHJhaXJlICYjMjI0OyB1bmUgbG9pIG91ICYjMjI0OyB1biB0ZXh0ZSBhcHBsaWNhYmxlLCBleGlzdGFudHMgb3UgZnV0dXJzLCBjZXR0ZSBsb2kgb3UgY2UgdGV4dGUgcHImIzIzMzt2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBzZSBjb25mb3JtZXIgJiMyMjQ7IGNldHRlIGxvaSBvdSAmIzIyNDsgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbSYjMjM0O21lLCBsYSBudWxsaXQmIzIzMzssIHBvdXIgcXVlbHF1ZSByYWlzb24gcXVlIGNlIHNvaXQsIGRgdW5lIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBuZSBzYXVyYWl0IGVudHJhJiMyMzg7bmVyIGxhIG51bGxpdCYjMjMzOyBkZSBsYGVuc2VtYmxlIGR1IENvbnRyYXQuCisKKzExLjUgTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZSwgY2VzIGRldXggdmVyc2lvbnMgZmFpc2FudCAmIzIzMztnYWxlbWVudCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzJiMyMzM7ZSAmIzIyNDsgY29waWVyIGV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkZSBjZSBDb250cmF0LgorCisxMi4yIEFmaW4gZGBlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMztkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMyBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUuCisKK0FydGljbGUgMTMgLSBMT0kgQVBQTElDQUJMRSBFVCBDT01QRVRFTkNFIFRFUlJJVE9SSUFMRQorCisxMy4xIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGxgYW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGxgb2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMiBBIGQmIzIzMztmYXV0IGRgYWNjb3JkIGFtaWFibGUgZGFucyB1biBkJiMyMzM7bGFpIGRlIGRldXggKDIpIG1vaXMgJiMyMjQ7IGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGRgdW5lIHByb2MmIzIzMztkdXJlIGRgdXJnZW5jZSwgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHNlcm9udCBwb3J0JiMyMzM7cyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXAmIzIzMzt0ZW50cyBkZSBQYXJpcy4KKworMSBDZUNJTEwgZXN0IHBvdXIgQ2UoYSkgQyhucnMpIEkobnJpYSkgTChvZ2ljaWVsKSBMKGlicmUpCisKK1ZlcnNpb24gMS4wIGR1IDIwMDYtMDktMDUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BBTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQQUwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmIwZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQQUwtMS4wCkBAIC0wLDAgKzEsMTA5IEBACisKK0NvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMCAoQ1BBTCkKKzEuICYjODIyMDtEZWZpbml0aW9ucyYjODIyMTsKKzEuMC4xICYjODIyMDtDb21tZXJjaWFsIFVzZSYjODIyMTsgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMSAmIzgyMjA7Q29udHJpYnV0b3ImIzgyMjE7IG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMiAmIzgyMjA7Q29udHJpYnV0b3IgVmVyc2lvbiYjODIyMTsgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorMS4zICYjODIyMDtDb3ZlcmVkIENvZGUmIzgyMjE7IG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisxLjQgJiM4MjIwO0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSYjODIyMTsgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUgJiM4MjIwO0V4ZWN1dGFibGUmIzgyMjE7IG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42ICYjODIyMDtJbml0aWFsIERldmVsb3BlciYjODIyMTsgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorMS43ICYjODIyMDtMYXJnZXIgV29yayYjODIyMTsgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOCAmIzgyMjA7TGljZW5zZSYjODIyMTsgbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xICYjODIyMDtMaWNlbnNhYmxlJiM4MjIxOyBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKzEuOSAmIzgyMjA7TW9kaWZpY2F0aW9ucyYjODIyMTsgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKzEuMTAgJiM4MjIwO09yaWdpbmFsIENvZGUmIzgyMjE7IG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisxLjEwLjEgJiM4MjIwO1BhdGVudCBDbGFpbXMmIzgyMjE7IG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorMS4xMSAmIzgyMjA7U291cmNlIENvZGUmIzgyMjE7IG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJiM4MjE3O3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMiAmIzgyMjA7WW91JiM4MjIxOyAob3IgJiM4MjIwO1lvdXImIzgyMjE7KSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAmIzgyMjA7WW91JiM4MjIxOyBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgJiM4MjIwO2NvbnRyb2wmIzgyMjE7IG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMSBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKzIuMiBDb250cmlidXRvciBHcmFudC4KK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBDb2RlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cyYjODIxNzsgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKzMuMiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKzMuMyBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorMy40IEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5JiM4MjE3O3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAmIzgyMjA7TEVHQUwmIzgyMjE7IHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIENvbnRyaWJ1dG9yJiM4MjE3O3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3ImIzgyMTc7cyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvciYjODIxNztzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCiszLjUgUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cyYjODIxNzsgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCiszLjYgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQmIzgyMTc7cyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorMy43IExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEgTmV3IFZlcnNpb25zLgorU29jaWFsdGV4dCwgSW5jLiAoJiM4MjIwO1NvY2lhbHRleHQmIzgyMjE7KSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCis2LjIgRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTb2NpYWx0ZXh0LiBObyBvbmUgb3RoZXIgdGhhbiBTb2NpYWx0ZXh0IGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKzYuMyBEZXJpdmF0aXZlIFdvcmtzLgorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgJiM4MjIwO1NvY2lhbHRleHQmIzgyMjE7LCAmIzgyMjA7Q1BBTCYjODIyMTsgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBDUEFMLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICYjODIyMDtBUyBJUyYjODIyMTsgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBPUklHSU5BTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorOC4gVEVSTUlOQVRJT04uCis4LjEgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAmIzgyMjA7UGFydGljaXBhbnQmIzgyMjE7KSBhbGxlZ2luZyB0aGF0OgorKGEpIHN1Y2ggUGFydGljaXBhbnQmIzgyMTc7cyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCYjODIxNztzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKzguMyBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCYjODIxNztzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorOC40IEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIE9SSUdJTkFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSYjODIxNztTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAmIzgyMjA7Y29tbWVyY2lhbCBpdGVtLCYjODIyMTsgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICYjODIyMDtjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlJiM4MjIxOyBhbmQgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwmIzgyMjE7IGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKzExLiBNSVNDRUxMQU5FT1VTLgorVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJiM4MjE3OyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyBNdWx0aXBsZS1MaWNlbnNlZC4gTXVsdGlwbGUtTGljZW5zZWQgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBDUEFMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisxNC4gQURESVRJT05BTCBURVJNOiBBVFRSSUJVVElPTgorKGEpIEFzIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIHRoZSBvcmdhbml6ZXIgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBPcmlnaW5hbCBDb2RlICgmIzgyMjA7T3JpZ2luYWwgRGV2ZWxvcGVyJiM4MjIxOyksIGluIHRoZSBob3BlIHRoYXQgaXRzIHByb21vdGlvbmFsIHZhbHVlIG1heSBoZWxwIGp1c3RpZnkgdGhlIHRpbWUsIG1vbmV5IGFuZCBlZmZvcnQgaW52ZXN0ZWQgaW4gd3JpdGluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdGhlIE9yaWdpbmFsIERldmVsb3BlciBtYXkgaW5jbHVkZSBpbiBFeGhpYml0IEIgKCYjODIyMDtBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiYjODIyMTspIGEgcmVxdWlyZW1lbnQgdGhhdCBlYWNoIHRpbWUgYW4gRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgb3IgYSBMYXJnZXIgV29yayBpcyBsYXVuY2hlZCBvciBpbml0aWFsbHkgcnVuICh3aGljaCBpbmNsdWRlcyBpbml0aWF0aW5nIGEgc2Vzc2lvbiksIGEgcHJvbWluZW50IGRpc3BsYXkgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlciYjODIxNztzIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIChhcyBkZWZpbmVkIGJlbG93KSBtdXN0IG9jY3VyIG9uIHRoZSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIGVtcGxveWVkIGJ5IHRoZSBlbmQgdXNlciB0byBhY2Nlc3Mgc3VjaCBDb3ZlcmVkIENvZGUgKHdoaWNoIG1heSBpbmNsdWRlIGRpc3BsYXkgb24gYSBzcGxhc2ggc2NyZWVuKSwgaWYgYW55LiBUaGUgc2l6ZSBvZiB0aGUgZ3JhcGhpYyBpbWFnZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBzaXplIG9mIHRoZSBvdGhlciBlbGVtZW50cyBvZiB0aGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24uIElmIHRoZSBhY2Nlc3MgYnkgdGhlIGVuZCB1c2VyIHRvIHRoZSBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBkb2VzIG5vdCBjcmVhdGUgYSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIGZvciBhY2Nlc3MgdG8gdGhlIENvdmVyZWQgQ29kZSwgdGhpcyBvYmxpZ2F0aW9uIHNoYWxsIG5vdCBhcHBseS4gSWYgdGhlIE9yaWdpbmFsIENvZGUgZGlzcGxheXMgc3VjaCBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpbiBhIHBhcnRpY3VsYXIgZm9ybSAoc3VjaCBhcyBpbiB0aGUgZm9ybSBvZiBhIHNwbGFzaCBzY3JlZW4sIG5vdGljZSBhdCBsb2dpbiwgYW4gJiM4MjIwO2Fib3V0JiM4MjIxOyBkaXNwbGF5LCBvciBkZWRpY2F0ZWQgYXR0cmlidXRpb24gYXJlYSBvbiB1c2VyIGludGVyZmFjZSBzY3JlZW5zKSwgY29udGludWVkIHVzZSBvZiBzdWNoIGZvcm0gZm9yIHRoYXQgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgb25lIHdheSBvZiBtZWV0aW5nIHRoaXMgcmVxdWlyZW1lbnQgZm9yIG5vdGljZS4KKyhiKSBBdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiBtYXkgb25seSBpbmNsdWRlIGEgY29weXJpZ2h0IG5vdGljZSwgYSBicmllZiBwaHJhc2UsIGdyYXBoaWMgaW1hZ2UgYW5kIGEgVVJMICgmIzgyMjA7QXR0cmlidXRpb24gSW5mb3JtYXRpb24mIzgyMjE7KSBhbmQgaXMgc3ViamVjdCB0byB0aGUgQXR0cmlidXRpb24gTGltaXRzIGFzIGRlZmluZWQgYmVsb3cuIEZvciB0aGVzZSBwdXJwb3NlcywgcHJvbWluZW50IHNoYWxsIG1lYW4gZGlzcGxheSBmb3Igc3VmZmljaWVudCBkdXJhdGlvbiB0byBnaXZlIHJlYXNvbmFibGUgbm90aWNlIHRvIHRoZSB1c2VyIG9mIHRoZSBpZGVudGl0eSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCB0aGF0IGlmIFlvdSBpbmNsdWRlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9yIHNpbWlsYXIgaW5mb3JtYXRpb24gZm9yIG90aGVyIHBhcnRpZXMsIFlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBmb3IgdGhlIE9yaWdpbmFsIERldmVsb3BlciBzaGFsbCBiZSBubyBsZXNzIHByb21pbmVudCB0aGFuIHN1Y2ggQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb3Igc2ltaWxhciBpbmZvcm1hdGlvbiBmb3IgdGhlIG90aGVyIHBhcnR5LiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgbWF5IGNob29zZSB0byBzcGVjaWZ5IGluIEV4aGliaXQgQiBiZWxvdyB0aGF0IHRoZSBhYm92ZSBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudCBvbmx5IGFwcGxpZXMgdG8gYW4gRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgcmVzdWx0aW5nIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IE1vZGlmaWNhdGlvbiwgYnV0IG5vdCBhIExhcmdlciBXb3JrLiBUaGUgaW50ZW50IGlzIHRvIHByb3ZpZGUgZm9yIHJlYXNvbmFibHkgbW9kZXN0IGF0dHJpYnV0aW9uLCB0aGVyZWZvcmUgdGhlIE9yaWdpbmFsIERldmVsb3BlciBjYW5ub3QgcmVxdWlyZSB0aGF0IFlvdSBkaXNwbGF5LCBhdCBhbnkgdGltZSwgbW9yZSB0aGFuIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXMgQXR0cmlidXRpb24gSW5mb3JtYXRpb246IChhKSBhIGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXI7IChiKSBhIHdvcmQgb3Igb25lIHBocmFzZSAobm90IGV4Y2VlZGluZyAxMCB3b3Jkcyk7IChjKSBvbmUgZ3JhcGhpYyBpbWFnZSBwcm92aWRlZCBieSB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyOyBhbmQgKGQpIGEgVVJMIChjb2xsZWN0aXZlbHksIHRoZSAmIzgyMjA7QXR0cmlidXRpb24gTGltaXRzJiM4MjIxOykuCisoYykgSWYgRXhoaWJpdCBCIGRvZXMgbm90IGluY2x1ZGUgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uLCB0aGVuIHRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgZm9yIFlvdSB0byBkaXNwbGF5IGFueSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyLgorKGQpIFlvdSBhY2tub3dsZWRnZSB0aGF0IGFsbCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIGFuZC9vciB0cmFkZSBuYW1lcyBjb250YWluZWQgd2l0aGluIHRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBkaXN0cmlidXRlZCB3aXRoIHRoZSBDb3ZlcmVkIENvZGUgYXJlIHRoZSBleGNsdXNpdmUgcHJvcGVydHkgb2YgdGhlaXIgb3duZXJzIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlaXIgb3duZXJzLCBvciB1bmRlciBjaXJjdW1zdGFuY2VzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgbGF3IG9yIGFzIGV4cHJlc3NseSBzZXQgb3V0IGluIHRoaXMgTGljZW5zZS4KKzE1LiBBRERJVElPTkFMIFRFUk06IE5FVFdPUksgVVNFLgorVGhlIHRlcm0gJiM4MjIwO0V4dGVybmFsIERlcGxveW1lbnQmIzgyMjE7IG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAzLjEgYW5kIG1ha2UgU291cmNlIENvZGUgYXZhaWxhYmxlIHVuZGVyIFNlY3Rpb24gMy4yLgorCisgRVhISUJJVCBBLiBDb21tb24gUHVibGljIEF0dHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAuCismIzgyMjA7VGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgJiM4MjIwO0xpY2Vuc2UmIzgyMjE7KTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgX19fX19fX19fX19fXy4gVGhlIExpY2Vuc2UgaXMgYmFzZWQgb24gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgYnV0IFNlY3Rpb25zIDE0IGFuZCAxNSBoYXZlIGJlZW4gYWRkZWQgdG8gY292ZXIgdXNlIG9mIHNvZnR3YXJlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrIGFuZCBwcm92aWRlIGZvciBsaW1pdGVkIGF0dHJpYnV0aW9uIGZvciB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyLiBJbiBhZGRpdGlvbiwgRXhoaWJpdCBBIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBFeGhpYml0IEIuCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAmIzgyMjA7QVMgSVMmIzgyMjE7IGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1RoZSBPcmlnaW5hbCBDb2RlIGlzX19fX19fX19fX19fX19fX19fX19fXy4KK1RoZSBPcmlnaW5hbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaXMgX19fX19fX19fXy4gSWYgbGVmdCBibGFuaywgdGhlIE9yaWdpbmFsIERldmVsb3BlciBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fLiBBbGwgcG9ydGlvbnMgb2YgdGhlIGNvZGUgd3JpdHRlbiBieSBfX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChjKSBfX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yIF9fX19fX19fX19fX19fX19fX19fX18uCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgX19fX18gbGljZW5zZSAodGhlIFtfX19dIExpY2Vuc2UpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4KK0lmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgQ1BBTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBlaXRoZXIgdGhlIENQQUwgb3IgdGhlIFtfX19dIExpY2Vuc2UuJiM4MjIxOworW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorCisgRVhISUJJVCBCLiBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbgorQXR0cmlidXRpb24gQ29weXJpZ2h0IE5vdGljZTogX19fX19fX19fX19fX19fX19fX19fX18KK0F0dHJpYnV0aW9uIFBocmFzZSAobm90IGV4Y2VlZGluZyAxMCB3b3Jkcyk6IF9fX19fX19fX19fX19fX19fX19fX19fCitBdHRyaWJ1dGlvbiBVUkw6IF9fX19fX19fX19fX19fX19fX19fX19fCitHcmFwaGljIEltYWdlIGFzIHByb3ZpZGVkIGluIHRoZSBDb3ZlcmVkIENvZGUsIGlmIGFueS4KK0Rpc3BsYXkgb2YgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgW3JlcXVpcmVkL25vdCByZXF1aXJlZF0gaW4gTGFyZ2VyIFdvcmtzIHdoaWNoIGFyZSBkZWZpbmVkIGluIHRoZSBDUEFMIGFzIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgQ1BBTC4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxN2MyMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQTC0xLjAKQEAgLTAsMCArMSwyMTUgQEAKKworQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDT01NT04gUFVCTElDCitMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0KK0NPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCithKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQKK2RvY3VtZW50YXRpb24gZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZAorCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CisKK2kpIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAorCitpaSkgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOworCit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlCitkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uIGBvcmlnaW5hdGVzYCBmcm9tIGEKK0NvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUKK2FjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0bwordGhlIFByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbgorY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKyJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMgIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZQorbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4KK2NvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyJQcm9ncmFtIiBtZWFucyB0aGUgQ29udHJpYnV0aW9ucyBkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsCitpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK2EpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvCityZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwKK2Rpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoCitkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KKworYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQKK1BhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUKK0NvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlCitQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaAorYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZQorTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zCit3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK2MpIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcwordG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55CitDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0bworUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlCityaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlCityZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuCitGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8KK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudGBzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlCitiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorCitkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50Citjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldAorZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzMuIFJFUVVJUkVNRU5UUworCitBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cworb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCithKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCisKK2IpIGl0cyBsaWNlbnNlIGFncmVlbWVudDoKKworaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQKK25vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kCitmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKKworaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yCitkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbAorZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CisKK2lpaSkgc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQKK2J5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorCitpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKK0NvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yCit0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2EpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCitiKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKworQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZQorUHJvZ3JhbS4KKworRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZgorYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUKK29yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aAorcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzCitpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobworaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyCit3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmCithIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoCitDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5CitldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzCithbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsCithY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUKK2V4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvCitjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkKK3JlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4KK2FueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdAorQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMKK3JlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2gKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3JgcyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyCitDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0CityZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IKK0lNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsCitOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2gKK1JlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mCitwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKK3Byb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWQorQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUCitQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUworR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUKK2xhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUKK3Rlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaAorcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGggcmVzcGVjdCB0bworYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEKK2xhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50Cit1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbgorYWRkaXRpb24sIGlmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eQorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0KK2l0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKQoraW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50YHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50YHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIKK1NlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0bworY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzCitub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mCitzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLAorUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzCityZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudAorYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQKK3N1cnZpdmUuCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluCitvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlCittb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudCBTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0bworcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLgorTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LgorSUJNIGlzIHRoZSBpbml0aWFsIEFncmVlbWVudCBTdGV3YXJkLiBJQk0gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8gc2VydmUKK2FzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUKK0FncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcKK0NvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50Cit1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK2lzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMKK0NvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMKKzIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzCitBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIKK2FmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluCithbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1VBLU9QTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NVQS1PUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjU5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NVQS1PUEwtMS4wCkBAIC0wLDAgKzEsNDcxIEBACisKK0NVQSBPZmZpY2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyhwbGFpbiB0ZXh0KQorMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZQorQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCit0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucworbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKK2luY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkCithcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0CitBLgorCisxLjcuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvcgorcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOC4xLiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvcgorc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUKK2NvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvcgorcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKK3doaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcworT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzCitMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsCithbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzCithbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUKK2RpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyCit3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlCitTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZQorYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZQorZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4KK0ZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMKK2NvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YKK3RoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwKK3RvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieQorY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2gKK2VudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CitjbGFpbXM6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgordHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLAorbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbAorQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vcgorYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvcgorc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsCitzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUKK09yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZQorZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzCitPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCitncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikKK3NlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZAorYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yCitoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgordHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucworY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4KK3VubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlCithbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvcgorc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUKK2FuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucworb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUKK21hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZgorTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IKK1ZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlCitlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YKK3RoZSBDb3ZlcmVkIENvZGUuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCitncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsKKzMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZgorQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZQorYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMKK2luZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5Cit0aGF0IENvbnRyaWJ1dG9yLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlCitnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCitTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZQorZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24KK29mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYQorY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlCit2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZQorYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCitlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZAorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikKK21vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4CisoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KK2hhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhCitmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQKK3RoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbAorQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlCitvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKK2dyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLAorQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlCitkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlCitwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbAora25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIKK3RoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLAorQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMKK0NvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzCisoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQKK0NvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KKworSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcKK2ludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2gKK2FyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QKK2Fsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8KK1NlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMKK01vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yCitDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieQordGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKK0NvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZQorQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYQorbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkKK3RvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKQorWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KK0V4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uCitmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwCityaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvCitjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eQorb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdQorbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4KK2FueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMKK29mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwKK2FuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKK3RoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUKK29ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZAoraW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZQorQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkCitDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkKK2NvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcworTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudAorbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyCitmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlCitJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKK3RoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoCit0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZQorbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlcgorV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQorcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvCitzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpCitkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdAorYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUKK2V4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCitzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCithdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KK0NVQSBPZmZpY2UgUHJvamVjdCBtYXkgcHVibGlzaCByZXZpc2VkCithbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24KK3dpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZQorTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0Cit2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMKK29mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IENVQSBPZmZpY2UgUHJvamVjdC4gTm8gb25lCitvdGhlciB0aGFuIENVQSBPZmZpY2UgUHJvamVjdCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0bworQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5Citvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0Cit0aGUgcGhyYXNlcyAiQ1VBIE9mZmljZSIsICJDVUEiLCAiQ1VBUEwiLCBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyCitsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKQorYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZQorY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIENVQSBPZmZpY2UgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsCitEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KK0V4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZgordGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKK0RFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KK1RIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERQorSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwKK1lPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUKK0NPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIKK09GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GCitBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQorc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsCitzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCituYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZQorc2hhbGwgc3Vydml2ZS4KKworOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50CitjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyCitvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tCitZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseQoraW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaAorUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZQorc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwKK3VubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkKK2FncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUKK3JveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaAorUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0bwordGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cworb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90CittdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltCitpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyCitTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZgordGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KK2FueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikKK2FuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLAorc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudAorYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvcgoraW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzCitieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzCitncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbgoraW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IKK2xpY2Vuc2UuCisKKzguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsCithbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpCit3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyCitwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwKK0RFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLAorT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUgorQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCitDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsCitXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUgorQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTgorSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCitMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZCitSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXCitQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQorRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPCitUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4KKzQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlcgorc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaAordGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OAorQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLAorYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlCityaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkKK0NhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZgorYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLgorV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsCitvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZAorU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZQorc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4KK0Rpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQKK2V4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KK0NvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCitBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdAorc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMKK0xpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzCityZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCitvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0bword29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoCityZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCitzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCisKK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcworIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyCitZb3VyIGNob2ljZSBvZiB0aGUgTlBMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQKK2J5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFWEhJQklUIEEgLSBDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlLgorCitgYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIENVQSBPZmZpY2UgUHVibGljIExpY2Vuc2UKK1ZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vY3Vhb2ZmaWNlLnNvdXJjZWZvcmdlLm5ldC8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKK0xpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLgorUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fXworX19fX19fX19fX19fX19fX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKK29mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUKK3Byb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlCithYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKK3lvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIENVQVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CitkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKK290aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlCit0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCit1bmRlciBlaXRoZXIgdGhlIENVQVBMIG9yIHRoZSBbX19fXSBMaWNlbnNlLiIKKworW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZgordGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkCit1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlCitPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NsQXJ0aXN0aWMgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NsQXJ0aXN0aWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1YTRhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ2xBcnRpc3RpYwpAQCAtMCwwICsxLDEzOCBAQAorCisgICAgICAgVGhlIENsYXJpZmllZCBBcnRpc3RpYyBMaWNlbnNlCisKKyAgICBQcmVhbWJsZQorCitUaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYQorUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUKK3NlbWJsYW5jZSBvZiBhcnRpc3RpYyBjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBwYWNrYWdlLAord2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlCit0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZQorcmVhc29uYWJsZSBtb2RpZmljYXRpb25zLgorCitEZWZpbml0aW9uczoKKworICJQYWNrYWdlIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlCisgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcworIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4KKworICJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuCisgbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzCisgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgYXMgc3BlY2lmaWVkIGJlbG93LgorCisgIkNvcHlyaWdodCBIb2xkZXIiIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvcgorIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLgorCisgIllvdSIgaXMgeW91LCBpZiB5b3VgcmUgdGhpbmtpbmcgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcKKyB0aGlzIFBhY2thZ2UuCisKKyAiRGlzdHJpYnV0aW9uIGZlZSIgaXMgYSBmZWUgeW91IGNoYXJnZSBmb3IgcHJvdmlkaW5nIGEgY29weQorICAgICAgICBvZiB0aGlzIFBhY2thZ2UgdG8gYW5vdGhlciBwYXJ0eS4KKworICJGcmVlbHkgQXZhaWxhYmxlIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgcmlnaHQgdG8KKyAgICAgICAgdXNlIHRoZSBpdGVtLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlCisgICAgICAgIGl0ZW0uICBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlCisgICAgICAgIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC4KKworMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91CitkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworMi4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlciBtb2RpZmljYXRpb25zCitkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4sIG9yIHRob3NlIG1hZGUgRnJlZWx5IEF2YWlsYWJsZSwgb3IgZnJvbQordGhlIENvcHlyaWdodCBIb2xkZXIuICBBIFBhY2thZ2UgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZQorY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwgcHJvdmlkZWQKK3RoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kCit3aGVuIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUKK2ZvbGxvd2luZzoKKworICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtCisgICAgRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4KKyAgICBlcXVpdmFsZW50IG1lZGl1bSwgb3IgcGxhY2luZyB0aGUgbW9kaWZpY2F0aW9ucyBvbiBhIG1ham9yIG5ldHdvcmsKKyAgICBhcmNoaXZlIHNpdGUgYWxsb3dpbmcgdW5yZXN0cmljdGVkIGFjY2VzcyB0byB0aGVtLCBvciBieSBhbGxvd2luZyB0aGUKKyAgICBDb3B5cmlnaHQgSG9sZGVyIHRvIGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZCBWZXJzaW9uCisgICAgb2YgdGhlIFBhY2thZ2UuCisKKyAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIFBhY2thZ2Ugb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24uCisKKyAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0CisgICAgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZQorICAgIGEgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgdGhhdCBjbGVhcmx5CisgICAgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworICAgIGUpIHBlcm1pdCBhbmQgZW5jb3VyZ2UgYW55b25lIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIFBhY2thZ2UKKyAgICAgICBwZXJtaXNzaW9uIHRvIG1ha2UgeW91ciBtb2RpZmljYXRpb25zIEZyZWVseSBBdmFpbGFibGUKKyAgICAgICBpbiBzb21lIHNwZWNpZmljIHdheS4KKworCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvcgorZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGRpc3RyaWJ1dGUgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcywKKyAgICB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpIG9uIHdoZXJlCisgICAgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YKKyAgICB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy4KKworICAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkKKyAgICBkb2N1bWVudCB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIKKyAgICB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworICAgIGUpIG9mZmVyIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSwgd2l0aCB5b3VyCisgICAgICAgbW9kaWZpY2F0aW9ucywgYnkgbWFpbCBvcmRlci4KKworNS4gWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4KK0lmIHlvdSBvZmZlciBzdXBwb3J0IGZvciB0aGlzIFBhY2thZ2UsIHlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZQorZm9yIHRoYXQgc3VwcG9ydC4gIFlvdSBtYXkgbm90IGNoYXJnZSBhIGxpY2Vuc2UgZmVlIGZvciB0aGUgcmlnaHQgdG8gdXNlCit0aGlzIFBhY2thZ2UgaXRzZWxmLiAgWW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aAorb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwgYW5kIHBvc3NpYmx5IG5vbmZyZWUpIHByb2dyYW1zIGFzIHBhcnQgb2YgYQorbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsIGFuZCBwb3NzaWJseSBub25mcmVlKSBzb2Z0d2FyZSBkaXN0cmlidXRpb24sCithbmQgY2hhcmdlIGxpY2Vuc2UgZmVlcyBmb3Igb3RoZXIgcGFydHMgb2YgdGhhdCBzb2Z0d2FyZSBkaXN0cmlidXRpb24sCitwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uCitJZiB0aGUgUGFja2FnZSBpbmNsdWRlcyBhbiBpbnRlcnByZXRlciwgWW91IG1heSBlbWJlZCB0aGlzIFBhY2thZ2VgcworaW50ZXJwcmV0ZXIgd2l0aGluIGFuIGV4ZWN1dGFibGUgb2YgeW91cnMgKGJ5IGxpbmtpbmcpOyB0aGlzIHNoYWxsIGJlCitjb25zdHJ1ZWQgYXMgYSBtZXJlIGZvcm0gb2YgYWdncmVnYXRpb24sIHByb3ZpZGVkIHRoYXQgdGhlIGNvbXBsZXRlCitTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBpbnRlcnByZXRlciBpcyBzbyBlbWJlZGRlZC4KKworNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMKK291dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbAordW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvZXZlciBnZW5lcmF0ZWQKK3RoZW0sIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZCB3aXRoIHRoaXMKK1BhY2thZ2UuICBJZiBzdWNoIHNjcmlwdHMgb3IgbGlicmFyeSBmaWxlcyBhcmUgYWdncmVnYXRlZCB3aXRoIHRoaXMKK1BhY2thZ2UgdmlhIHRoZSBzby1jYWxsZWQgInVuZHVtcCIgb3IgInVuZXhlYyIgbWV0aG9kcyBvZiBwcm9kdWNpbmcgYQorYmluYXJ5IGV4ZWN1dGFibGUgaW1hZ2UsIHRoZW4gZGlzdHJpYnV0aW9uIG9mIHN1Y2ggYW4gaW1hZ2Ugc2hhbGwKK25laXRoZXIgYmUgY29uc3RydWVkIGFzIGEgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZSBub3Igc2hhbGwgaXQKK2ZhbGwgdW5kZXIgdGhlIHJlc3RyaWN0aW9ucyBvZiBQYXJhZ3JhcGhzIDMgYW5kIDQsIHByb3ZpZGVkIHRoYXQgeW91IGRvCitub3QgcmVwcmVzZW50IHN1Y2ggYW4gZXhlY3V0YWJsZSBpbWFnZSBhcyBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcworUGFja2FnZS4KKworNy4gQyBzdWJyb3V0aW5lcyAob3IgY29tcGFyYWJseSBjb21waWxlZCBzdWJyb3V0aW5lcyBpbiBvdGhlcgorbGFuZ3VhZ2VzKSBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBpbiBvcmRlciB0bworZW11bGF0ZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIG9mIHRoZSBsYW5ndWFnZSBkZWZpbmVkIGJ5IHRoaXMKK1BhY2thZ2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBhcmUgdGhlCitlcXVpdmFsZW50IG9mIGlucHV0IGFzIGluIFBhcmFncmFwaCA2LCBwcm92aWRlZCB0aGVzZSBzdWJyb3V0aW5lcyBkbworbm90IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gYW55IHdheSB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGZhaWwgdGhlCityZWdyZXNzaW9uIHRlc3RzIGZvciB0aGUgbGFuZ3VhZ2UuCisKKzguIEFnZ3JlZ2F0aW9uIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlIHdpdGggYSBjb21tZXJjaWFsCitkaXN0cmlidXRpb24gaXMgYWx3YXlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSB1c2Ugb2YgdGhpcyBQYWNrYWdlCitpcyBlbWJlZGRlZDsgdGhhdCBpcywgd2hlbiBubyBvdmVydCBhdHRlbXB0IGlzIG1hZGUgdG8gbWFrZSB0aGlzIFBhY2thZ2VgcworaW50ZXJmYWNlcyB2aXNpYmxlIHRvIHRoZSBlbmQgdXNlciBvZiB0aGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb24uCitTdWNoIHVzZSBzaGFsbCBub3QgYmUgY29uc3RydWVkIGFzIGEgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4KKworOS4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzEwLiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworICAgIFRoZSBFbmQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9EU1NTTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRFNTU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1OWRmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRFNTU0wKQEAgLTAsMCArMSw0OSBAQAorQ29weXJpZ2h0CistLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEgTm9ybWFuIFdhbHNoCisKK1RoZSBvcmlnaW5hbCBpbnNwaXJhdGlvbiBmb3IgdGhlc2Ugc3R5bGVzaGVldHMgY2FtZSBmcm9tIHRoZQord29yayBvZiBKb24gQm9zYWssIEFuZGVycyBCZXJnbHVuZCwgVG9ueSBHcmFoYW0sIFRlcnJ5IEFsbGVuLAorSmFtZXMgQ2xhcmssIGFuZCBtYW55IG90aGVycy4gIEkgYW0gaW5kZWJ0ZWQgdG8gdGhlbSBhbmQgdG8gdGhlCitjb21tdW5pdHkgb2YgdXNlcnMgb24gZHNzc2xpc3RAbXVsYmVycnl0ZWNoLmNvbSBmb3IgbWFraW5nCitzdWJzdGFudGlhbCBjb250cmlidXRpb25zIHRvIHRoaXMgd29yayBhbmQgZm9yIGFuc3dlcmluZyBteSBtYW55CitxdWVzdGlvbnMuCisKK1RoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEphZGU6CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorZmlsZXMgKHRoZSBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lcyBvZiBpbmRpdmlkdWFscworY3JlZGl0ZWQgd2l0aCBjb250cmlidXRpb24gdG8gdGhpcyBzb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCBpbgorYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlcgorZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbgorZnJvbSB0aGUgaW5kaXZpZHVhbHMgaW4gcXVlc3Rpb24uCisKK0FueSBzdHlsZXNoZWV0IGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHRoYXQgaXMgcHVibGljYWxseQorZGlzdHJpYnV0ZWQgd2lsbCBiZSBpZGVudGlmaWVkIHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgdGhlCit2ZXJzaW9uIHN0cmluZ3MgaW4gYW55IGRlcml2ZWQgU29mdHdhcmUgd2lsbCBiZSBjaGFuZ2VkIHNvIHRoYXQKK25vIHBvc3NpYmlsaXR5IG9mIGNvbmZ1c2lvbiBiZXR3ZWVuIHRoZSBkZXJpdmVkIHBhY2thZ2UgYW5kIHRoaXMKK1NvZnR3YXJlIHdpbGwgZXhpc3QuCisKK1dhcnJhbnR5CistLS0tLS0tLQorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE5PUk1BTiBXQUxTSCBPUiBBTlkgT1RIRVIKK0NPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzhiZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0xLjAKQEAgLTAsMCArMSw1NSBAQAorCitUaGlzIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzCit0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lcgorKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZwordGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitDb3B5cmlnaHQgKGMpIDx5ZWFyPiA8Y29weXJpZ2h0IGhvbGRlcnM+CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB2ZXJzaW9uIDEuMAorCitUaGlzIE9yaWdpbmFsIFdvcmssIGluY2x1ZGluZyBzb2Z0d2FyZSwgc291cmNlIGNvZGUsIGRvY3VtZW50cywKK29yIG90aGVyIHJlbGF0ZWQgaXRlbXMsIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyKHMpCitzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UuIEJ5CitvYnRhaW5pbmcsIHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgT3JpZ2luYWwgV29yaywgeW91IGFncmVlIHRoYXQgeW91CitoYXZlIHJlYWQsIHVuZGVyc3RhbmQsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZToKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZAorc3VibGljZW5zZSB0aGlzIE9yaWdpbmFsIFdvcmsgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgZm9yIGFueSBwdXJwb3NlLCBhbmQgd2l0aG91dCBmZWUgb3Igcm95YWx0eSB0byB0aGUKK2NvcHlyaWdodCBob2xkZXIocykgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlCitmb2xsb3dpbmcgb24gQUxMIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBwb3J0aW9ucyB0aGVyZW9mLAoraW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgb3IgZGVyaXZhdGl2ZXMsIHRoYXQgeW91IG1ha2U6CisKKworVGhlIGZ1bGwgdGV4dCBvZiB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0bwordXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLgorCisKK0FueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMuCisKKworCitOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgT3JpZ2luYWwgV29yaywgaW5jbHVkaW5nIHRoZQorZGF0ZSB0aGUgY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworQW55IG1vZGlmaWNhdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgbXVzdCBiZSBkaXN0cmlidXRlZCBpbiBzdWNoIGEgbWFubmVyIGFzCit0byBhdm9pZCBhbnkgY29uZnVzaW9uIHdpdGggdGhlIE9yaWdpbmFsIFdvcmsgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKK0NMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK1RoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXIocykgbWF5IE5PVCBiZSB1c2VkCitpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgT3JpZ2luYWwgb3IgRGVyaXZhdGl2ZQorV29ya3Mgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4KK3RoZSBPcmlnaW5hbCBXb3JrIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzCityZW1haW4gd2l0aCB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGM5OWU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMi4wCkBAIC0wLDAgKzEsOTkgQEAKKworRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UsIFZlcnNpb24gMi4wCisocGxhaW4gdGV4dCkKK0VkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlCisKK1ZlcnNpb24gMi4wLCBBcHJpbCAyMDA3CisKK2h0dHA6Ly93d3cub3NlZHUub3JnL2xpY2Vuc2VzLworCitUaGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdmVyc2lvbiAyLjAgKCJFQ0wiKSBjb25zaXN0cyBvZiB0aGUgQXBhY2hlIDIuMCBsaWNlbnNlLCBtb2RpZmllZCB0byBjaGFuZ2UgdGhlIHNjb3BlIG9mIHRoZSBwYXRlbnQgZ3JhbnQgaW4gc2VjdGlvbiAzIHRvIGJlIHNwZWNpZmljIHRvIHRoZSBuZWVkcyBvZiB0aGUgZWR1Y2F0aW9uIGNvbW11bml0aWVzIHVzaW5nIHRoaXMgbGljZW5zZS4gVGhlIG9yaWdpbmFsIEFwYWNoZSAyLjAgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworMS4gRGVmaW5pdGlvbnMuCisKKyJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lciBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKzIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLgorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpciBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBBbnkgcGF0ZW50IGxpY2Vuc2UgZ3JhbnRlZCBoZXJlYnkgd2l0aCByZXNwZWN0IHRvIGNvbnRyaWJ1dGlvbnMgYnkgYW4gaW5kaXZpZHVhbCBlbXBsb3llZCBieSBhbiBpbnN0aXR1dGlvbiBvciBvcmdhbml6YXRpb24gaXMgbGltaXRlZCB0byBwYXRlbnQgY2xhaW1zIHdoZXJlIHRoZSBpbmRpdmlkdWFsIHRoYXQgaXMgdGhlIGF1dGhvciBvZiB0aGUgV29yayBpcyBhbHNvIHRoZSBpbnZlbnRvciBvZiB0aGUgcGF0ZW50IGNsYWltcyBsaWNlbnNlZCwgYW5kIHdoZXJlIHRoZSBvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24gaGFzIHRoZSByaWdodCB0byBncmFudCBzdWNoIGxpY2Vuc2UgdW5kZXIgYXBwbGljYWJsZSBncmFudCBhbmQgcmVzZWFyY2ggZnVuZGluZyBhZ3JlZW1lbnRzLiBObyBvdGhlciBleHByZXNzIG9yIGltcGxpZWQgbGljZW5zZXMgYXJlIGdyYW50ZWQuCisKKzQuIFJlZGlzdHJpYnV0aW9uLgorCitZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdSBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKK0lmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvciBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbiBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZSBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KK1lvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZCBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aCB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCis1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuCisKK1VubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeSB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZCB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKzYuIFRyYWRlbWFya3MuCisKK1RoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLCBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKzcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK0luIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseSBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZSBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKzkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4KKworV2hpbGUgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKK0FQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHRvIHlvdXIgd29yaworCitUbyBhcHBseSB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2gKK3RoZSBmb2xsb3dpbmcgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkKK2JyYWNrZXRzICJbXSIgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4KKyhEb25gdCBpbmNsdWRlIHRoZSBicmFja2V0cyEpIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUKK2FwcHJvcHJpYXRlIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kCit0aGF0IGEgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uCit0aGUgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCitpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0gTGljZW5zZWQgdW5kZXIgdGhlCisgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkKKyBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgCisgaHR0cDovL3d3dy5vc2VkdS5vcmcvbGljZW5zZXMvRUNMLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKKyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzCisgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VETC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VETC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiMWViMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRURMLTEuMApAQCAtMCwwICsxLDEzIEBACitFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIC0gdiAxLjAKKworQ29weXJpZ2h0IChjKSAyMDA3LCBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBsaWNlbnNvcnMuCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5OTYwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTEuMApAQCAtMCwwICsxLDI1IEBACisKK0VpZmZlbCBGb3J1bSBMaWNlbnNlLCB2ZXJzaW9uIDEKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQvb3IgZGlzdHJpYnV0ZQordGhpcyBwYWNrYWdlLCBwcm92aWRlZCB0aGF0OgorCisgIC0gY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIHVuY2hhbmdlZAorCisgIC0gYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBhY2thZ2UsIHdoZXRoZXIgbW9kaWZpZWQgb3Igbm90LAorICAgIGluY2x1ZGVzIHRoaXMgZmlsZQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBhbHNvIGdyYW50ZWQgdG8gZGlzdHJpYnV0ZSBiaW5hcnkgcHJvZ3JhbXMgd2hpY2gKK2RlcGVuZCBvbiB0aGlzIHBhY2thZ2UsIHByb3ZpZGVkIHRoYXQ6CisKKyAgLSBpZiB0aGUgYmluYXJ5IHByb2dyYW0gZGVwZW5kcyBvbiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcworICAgIHBhY2thZ2UsIHlvdSBtdXN0IHB1YmxpY2x5IHJlbGVhc2UgdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcworICAgIHBhY2thZ2UKKworVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkuIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUEFDS0FHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzdmOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0yLjAKQEAgLTAsMCArMSwxMiBAQAorCitFaWZmZWwgRm9ydW0gTGljZW5zZSwgdmVyc2lvbiAyCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBwYWNrYWdlLCBwcm92aWRlZCB0aGF0OgorY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIHVuY2hhbmdlZCwKK2FueSBkaXN0cmlidXRpb24gb2YgdGhpcyBwYWNrYWdlLCB3aGV0aGVyIG1vZGlmaWVkIG9yIG5vdCwgaW5jbHVkZXMgdGhpcyBsaWNlbnNlIHRleHQuCitQZXJtaXNzaW9uIGlzIGhlcmVieSBhbHNvIGdyYW50ZWQgdG8gZGlzdHJpYnV0ZSBiaW5hcnkgcHJvZ3JhbXMgd2hpY2ggZGVwZW5kIG9uIHRoaXMgcGFja2FnZS4gSWYgdGhlIGJpbmFyeSBwcm9ncmFtIGRlcGVuZHMgb24gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZSwgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHB1YmxpY2x5IHJlbGVhc2UgdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLgorKioqKioqKioqKioqKioqKioqKioqKioKKworVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFBBQ0tBR0UuIAorKioqKioqKioqKioqKioqKioqKioqKioKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzZlNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VQTC0xLjAKQEAgLTAsMCArMSw3MiBAQAorCitFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworYSkgaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZAorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOgoraSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCitpaSkgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uIGBvcmlnaW5hdGVzYCBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcmBzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCithKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KK2IpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KK2MpIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudGBzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCitkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorMy4gUkVRVUlSRU1FTlRTCisKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworYSkgaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorYikgaXRzIGxpY2Vuc2UgYWdyZWVtZW50OgoraSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKK2lpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKK2lpaSkgc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCitpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KK1doZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworYSkgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kCitiKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KK0NvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4KKworRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3JgcyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gR0VORVJBTAorCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRgcyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnRgcyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworQWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudGBzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8gc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVRGF0YWdyaWQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVRGF0YWdyaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2ZTUwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVEYXRhZ3JpZApAQCAtMCwwICsxLDI5IEBACisKK0VVIERhdGFHcmlkIFNvZnR3YXJlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDAxIEVVIERhdGFHcmlkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIHNvZnR3YXJlIGluY2x1ZGVzIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgdG8gdGhlIEVVIERhdGFHcmlkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgRVUgRGF0YUdyaWQsIHBsZWFzZSBzZWUgaHR0cDovL3d3dy5ldS1kYXRhZ3JpZC5vcmcvLgorCitJbnN0YWxsYXRpb24sIHVzZSwgcmVwcm9kdWN0aW9uLCBkaXNwbGF5LCBtb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCBhcmUgcGVybWl0dGVkLiBBbnkgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgbGljZW5zZSBieSB5b3Ugb3IgeW91ciBzdWItbGljZW5zZWVzIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhYm92ZSBsaWNlbnNlIHN0YXRlbWVudCBhcyB3ZWxsIGFzIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBpbiB0aGUgc29mdHdhcmUsIHRoZSB1c2VyIGRvY3VtZW50YXRpb24gYW5kIGFueSBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgc29mdHdhcmUuCisKKzIuIFRoZSB1c2VyIGRvY3VtZW50YXRpb24sIGlmIGFueSwgaW5jbHVkZWQgd2l0aCBhIHJlZGlzdHJpYnV0aW9uLCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBub3RpY2U6CisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgRVUgRGF0YUdyaWQgKGh0dHA6Ly93d3cuZXUtZGF0YWdyaWQub3JnLykuIgorCitBbHRlcm5hdGl2ZWx5LCBpZiB0aGF0IGlzIHdoZXJlIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIsIHRoaXMgYWNrbm93bGVkZ21lbnQgbXVzdCBiZSByZXByb2R1Y2VkIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYuCisKKzMuIFRoZSBuYW1lcyAiRURHIiwgIkVERyBUb29sa2l0IiwgJiM4MjIwO0VVIERhdGFHcmlkJiM4MjIxOyBhbmQgIkVVIERhdGFHcmlkIFByb2plY3QiIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgc29mdHdhcmUsIG9yIHByb2R1Y3RzIGRlcml2ZWQKK3RoZXJlZnJvbSwgZXhjZXB0IHdpdGggcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGJ5IGhlcC1wcm9qZWN0LWdyaWQtZWRnLWxpY2Vuc2VAY2Vybi5jaC4KKworNC4gWW91IGFyZSB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgYW55b25lIHdpdGggYW55IGJ1ZyBmaXhlcywgcGF0Y2hlcywgdXBncmFkZXMgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucywgZW5oYW5jZW1lbnRzIG9yIGRlcml2YXRpdmVzIG9mIHRoZSBmZWF0dXJlcyxmdW5jdGlvbmFsaXR5IG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUgdGhhdCB5b3UgbWF5IGRldmVsb3AuIEhvd2V2ZXIsIGlmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZSB3b3JrcyB3aXRob3V0IGNvbnRlbXBvcmFuZW91c2x5IHJlcXVpcmluZyB1c2VycyB0byBlbnRlciBpbnRvIGEgc2VwYXJhdGUgd3JpdHRlbiBsaWNlbnNlIGFncmVlbWVudCwgdGhlbiB5b3UgYXJlIGRlZW1lZCB0byBoYXZlIGdyYW50ZWQgcGFydGljaXBhbnRzIGluIHRoZSBFVSBEYXRhR3JpZCBhIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgbGljZW5zZSB0byBpbnN0YWxsLCB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgbW9kaWZ5LCByZWRpc3RyaWJ1dGUgYW5kIHN1Yi1saWNlbnNlIHlvdXIgbW9kaWZpY2F0aW9ucywgZW5oYW5jZW1lbnRzIG9yIGRlcml2YXRpdmUgd29ya3MsIHdoZXRoZXIgaW4gYmluYXJ5IG9yIHNvdXJjZSBjb2RlIGZvcm0sIHVuZGVyIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLgorCis1LiBESVNDTEFJTUVSIAorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBFVSBEQVRBR1JJRCBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFVTRSBBUkUgRElTQ0xBSU1FRC4gVEhFIEVVIERBVEFHUklEIEFORCBDT05UUklCVVRPUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTiBUSEFUIFRIRSBTT0ZUV0FSRSwgTU9ESUZJQ0FUSU9OUywgRU5IQU5DRU1FTlRTIE9SIERFUklWQVRJVkUgV09SS1MgVEhFUkVPRiwgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQuIAorCis2LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCitUSEUgRVUgREFUQUdSSUQgQU5EIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIE5PIExJQUJJTElUWSBUTyBMSUNFTlNFRSBPUiBPVEhFUiBQRVJTT05TIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBFWEVNUExBUlksIE9SIFBVTklUSVZFIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVjYmZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMApAQCAtMCwwICsxLDE4NCBAQAorCitFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAKK1YuMS4wIAorRVVQTCAmIzE2OTsgdGhlIEV1cm9wZWFuIENvbW11bml0eSAyMDA3IAorVGhpcyBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAodGhlICYjODIyMDtFVVBMJiM4MjIxOykgYXBwbGllcyB0byB0aGUgV29yayBvciBTb2Z0d2FyZSAoYXMgCitkZWZpbmVkIGJlbG93KSB3aGljaCBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlLiBBbnkgdXNlIG9mIHRoZSBXb3JrLCBvdGhlciAKK3RoYW4gYXMgYXV0aG9yaXNlZCB1bmRlciB0aGlzIExpY2VuY2UgaXMgcHJvaGliaXRlZCAodG8gdGhlIGV4dGVudCBzdWNoIHVzZSBpcyBjb3ZlcmVkIGJ5IGEgcmlnaHQgCitvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgV29yaykuIAorVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSB3aGVuIHRoZSBMaWNlbnNvciAoYXMgZGVmaW5lZCAKK2JlbG93KSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIAorT3JpZ2luYWwgV29yazogCitMaWNlbnNlZCB1bmRlciB0aGUgRVVQTCBWLjEuMCAKK29yIGhhcyBleHByZXNzZWQgYnkgYW55IG90aGVyIG1lYW4gaGlzIHdpbGxpbmduZXNzIHRvIGxpY2Vuc2UgdW5kZXIgdGhlIEVVUEwuIAorMS4gRGVmaW5pdGlvbnMKK0luIHRoaXMgTGljZW5jZSwgdGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzogCismIzg3MjI7IFRoZSBMaWNlbmNlOiB0aGlzIExpY2VuY2UuIAorJiM4NzIyOyBUaGUgT3JpZ2luYWwgV29yayBvciB0aGUgU29mdHdhcmU6IHRoZSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBhbmQvb3IgY29tbXVuaWNhdGVkIGJ5IAordGhlIExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5jZSwgYXZhaWxhYmxlIGFzIFNvdXJjZSBDb2RlIGFuZCBhbHNvIGFzIEV4ZWN1dGFibGUgCitDb2RlIGFzIHRoZSBjYXNlIG1heSBiZS4gCismIzg3MjI7IERlcml2YXRpdmUgV29ya3M6IHRoZSB3b3JrcyBvciBzb2Z0d2FyZSB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgYnkgdGhlIExpY2Vuc2VlLCBiYXNlZCAKK3Vwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZGVmaW5lIHRoZSAKK2V4dGVudCBvZiBtb2RpZmljYXRpb24gb3IgZGVwZW5kZW5jZSBvbiB0aGUgT3JpZ2luYWwgV29yayByZXF1aXJlZCBpbiBvcmRlciB0byAKK2NsYXNzaWZ5IGEgd29yayBhcyBhIERlcml2YXRpdmUgV29yazsgdGhpcyBleHRlbnQgaXMgZGV0ZXJtaW5lZCBieSBjb3B5cmlnaHQgbGF3IAorYXBwbGljYWJsZSBpbiB0aGUgY291bnRyeSBtZW50aW9uZWQgaW4gQXJ0aWNsZSAxNS4gIAorJiM4NzIyOyBUaGUgV29yazogdGhlIE9yaWdpbmFsIFdvcmsgYW5kL29yIGl0cyBEZXJpdmF0aXZlIFdvcmtzLiAKKyYjODcyMjsgVGhlIFNvdXJjZSBDb2RlOiB0aGUgaHVtYW4tcmVhZGFibGUgZm9ybSBvZiB0aGUgV29yayB3aGljaCBpcyB0aGUgbW9zdCAKK2NvbnZlbmllbnQgZm9yIHBlb3BsZSB0byBzdHVkeSBhbmQgbW9kaWZ5LiAKKyYjODcyMjsgVGhlIEV4ZWN1dGFibGUgQ29kZTogYW55IGNvZGUgd2hpY2ggaGFzIGdlbmVyYWxseSBiZWVuIGNvbXBpbGVkIGFuZCB3aGljaCBpcyAKK21lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IGEgY29tcHV0ZXIgYXMgYSBwcm9ncmFtLiAKKyYjODcyMjsgVGhlIExpY2Vuc29yOiB0aGUgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gdGhhdCAgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcyB0aGUgCitXb3JrIHVuZGVyIHRoZSBMaWNlbmNlLiAKKyYjODcyMjsgQ29udHJpYnV0b3Iocyk6IGFueSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB3aG8gbW9kaWZpZXMgdGhlIFdvcmsgdW5kZXIgdGhlIAorTGljZW5jZSwgb3Igb3RoZXJ3aXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBhIERlcml2YXRpdmUgV29yay4gCismIzg3MjI7IFRoZSBMaWNlbnNlZSBvciAmIzgyMjA7WW91JiM4MjIxOzogIGFueSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB3aG8gbWFrZXMgYW55IHVzYWdlIG9mIHRoZSAKK1NvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4gJiM4NzIyOyBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb246IGFueSBhY3Qgb2Ygc2VsbGluZywgIGdpdmluZywgbGVuZGluZywgcmVudGluZywgCitkaXN0cmlidXRpbmcsIGNvbW11bmljYXRpbmcsIHRyYW5zbWl0dGluZywgb3Igb3RoZXJ3aXNlIG1ha2luZyBhdmFpbGFibGUsIG9uLWxpbmUgb3IgCitvZmYtbGluZSwgY29waWVzIG9mIHRoZSBXb3JrIGF0IHRoZSBkaXNwb3NhbCBvZiBhbnkgb3RoZXIgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24uIAorMi4gU2NvcGUgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBMaWNlbmNlCitUaGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCAgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWItbGljZW5zYWJsZSAKK2xpY2VuY2UgdG8gZG8gdGhlIGZvbGxvd2luZywgZm9yIHRoZSBkdXJhdGlvbiBvZiBjb3B5cmlnaHQgdmVzdGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrOiAKKyYjODcyMjsgdXNlIHRoZSBXb3JrIGluIGFueSBjaXJjdW1zdGFuY2UgYW5kIGZvciBhbGwgdXNhZ2UsIAorJiM4NzIyOyByZXByb2R1Y2UgdGhlIFdvcmssIAorJiM4NzIyOyBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBtYWtlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgV29yaywgCismIzg3MjI7IGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMsIGluY2x1ZGluZyB0aGUgcmlnaHQgdG8gbWFrZSBhdmFpbGFibGUgb3IgZGlzcGxheSB0aGUgV29yayAKK29yIGNvcGllcyB0aGVyZW9mIHRvIHRoZSBwdWJsaWMgYW5kIHBlcmZvcm0gcHVibGljbHksIGFzIHRoZSBjYXNlIG1heSBiZSwgdGhlIFdvcmssIAorJiM4NzIyOyBkaXN0cmlidXRlIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLCAKKyYjODcyMjsgbGVuZCBhbmQgcmVudCB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZiwgCismIzg3MjI7IHN1Yi1saWNlbnNlIHJpZ2h0cyBpbiB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZi4gCitUaG9zZSByaWdodHMgY2FuIGJlIGV4ZXJjaXNlZCBvbiBhbnkgbWVkaWEsICBzdXBwb3J0cyBhbmQgZm9ybWF0cywgd2hldGhlciBub3cga25vd24gb3IgCitsYXRlciBpbnZlbnRlZCwgYXMgZmFyIGFzIHRoZSBhcHBsaWNhYmxlIGxhdyBwZXJtaXRzIHNvLiAKK0luIHRoZSBjb3VudHJpZXMgd2hlcmUgbW9yYWwgcmlnaHRzIGFwcGx5LCB0aGUgTGljZW5zb3Igd2FpdmVzIGhpcyByaWdodCB0byBleGVyY2lzZSBoaXMgbW9yYWwgCityaWdodCB0byB0aGUgZXh0ZW50IGFsbG93ZWQgYnkgbGF3IGluIG9yZGVyIHRvIG1ha2UgZWZmZWN0aXZlIHRoZSBsaWNlbmNlIG9mIHRoZSBlY29ub21pYyByaWdodHMgCitoZXJlIGFib3ZlIGxpc3RlZC4gCitUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIHRoZSBMaWNlbnNlZSByb3lhbHR5LWZyZWUsIG5vbiBleGNsdXNpdmUgdXNhZ2UgcmlnaHRzIHRvIGFueSBwYXRlbnRzIAoraGVsZCBieSB0aGUgTGljZW5zb3IsIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgdXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBvbiB0aGUgV29yayAKK3VuZGVyIHRoaXMgTGljZW5jZS4gCiszLiBDb21tdW5pY2F0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZQorVGhlIExpY2Vuc29yIG1heSBwcm92aWRlIHRoZSBXb3JrIGVpdGhlciBpbiBpdHMgU291cmNlIENvZGUgZm9ybSwgb3IgYXMgRXhlY3V0YWJsZSBDb2RlLiBJZiAKK3RoZSBXb3JrIGlzIHByb3ZpZGVkIGFzIEV4ZWN1dGFibGUgQ29kZSwgIHRoZSBMaWNlbnNvciBwcm92aWRlcyBpbiBhZGRpdGlvbiBhIG1hY2hpbmVyZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgV29yayB0aGF0IHRoZSAKK0xpY2Vuc29yIGRpc3RyaWJ1dGVzIG9yIGluZGljYXRlcywgaW4gYSBub3RpY2UgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGF0dGFjaGVkIHRvIHRoZSAKK1dvcmssIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgU291cmNlIENvZGUgaXMgZWFzaWx5IGFuZCBmcmVlbHkgYWNjZXNzaWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgCitMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuIAorNC4gTGltaXRhdGlvbnMgb24gY29weXJpZ2h0CitOb3RoaW5nIGluIHRoaXMgTGljZW5jZSBpcyBpbnRlbmRlZCB0byBkZXByaXZlIHRoZSBMaWNlbnNlZSBvZiB0aGUgYmVuZWZpdHMgZnJvbSBhbnkgZXhjZXB0aW9uIAorb3IgbGltaXRhdGlvbiB0byB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgcmlnaHRzIG93bmVycyBpbiB0aGUgT3JpZ2luYWwgV29yayBvciBTb2Z0d2FyZSwgb2YgCit0aGUgZXhoYXVzdGlvbiBvZiB0aG9zZSByaWdodHMgb3Igb2Ygb3RoZXIgYXBwbGljYWJsZSBsaW1pdGF0aW9ucyB0aGVyZXRvLiAKKzUuIE9ibGlnYXRpb25zIG9mIHRoZSBMaWNlbnNlZQorVGhlIGdyYW50IG9mIHRoZSByaWdodHMgbWVudGlvbmVkIGFib3ZlIGlzIHN1YmplY3QgdG8gc29tZSByZXN0cmljdGlvbnMgYW5kIG9ibGlnYXRpb25zIAoraW1wb3NlZCBvbiB0aGUgTGljZW5zZWUuIFRob3NlIG9ibGlnYXRpb25zIGFyZSB0aGUgZm9sbG93aW5nOiBBdHRyaWJ1dGlvbiByaWdodDogdGhlIExpY2Vuc2VlIHNoYWxsIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmtzIG5vdGljZXMgCithbmQgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGUgTGljZW5jZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gVGhlIExpY2Vuc2VlIG11c3QgCitpbmNsdWRlIGEgY29weSBvZiBzdWNoIG5vdGljZXMgYW5kIGEgY29weSBvZiB0aGUgTGljZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgaGUvc2hlIAorZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcy4gVGhlIExpY2Vuc2VlIG11c3QgY2F1c2UgYW55IERlcml2YXRpdmUgV29yayB0byBjYXJyeSAKK3Byb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgV29yayBoYXMgYmVlbiBtb2RpZmllZCBhbmQgdGhlIGRhdGUgb2YgbW9kaWZpY2F0aW9uLiAKK0NvcHlsZWZ0IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIGRpc3RyaWJ1dGVzIGFuZC9vciAgY29tbXVuaWNhdGVzIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgCitXb3JrcyBvciBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciAKK0NvbW11bmljYXRpb24gd2lsbCBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyAgb2YgdGhpcyBMaWNlbmNlLiBUaGUgTGljZW5zZWUgKGJlY29taW5nIAorTGljZW5zb3IpIGNhbm5vdCBvZmZlciBvciBpbXBvc2UgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgIGNvbmRpdGlvbnMgb24gdGhlIFdvcmsgb3IgCitEZXJpdmF0aXZlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuIAorQ29tcGF0aWJpbGl0eSBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBEaXN0cmlidXRlcyBhbmQvb3IgQ29tbXVuaWNhdGVzIERlcml2YXRpdmUgV29ya3Mgb3IgCitjb3BpZXMgdGhlcmVvZiBiYXNlZCB1cG9uIGJvdGggdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFub3RoZXIgd29yayBsaWNlbnNlZCB1bmRlciBhIAorQ29tcGF0aWJsZSBMaWNlbmNlLCB0aGlzIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBjYW4gYmUgZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgCit0aGlzIENvbXBhdGlibGUgTGljZW5jZS4gRm9yIHRoZSBzYWtlIG9mIHRoaXMgY2xhdXNlLCAmIzgyMjA7Q29tcGF0aWJsZSBMaWNlbmNlJiM4MjIxOyByZWZlcnMgdG8gdGhlIAorbGljZW5jZXMgbGlzdGVkIGluIHRoZSBhcHBlbmRpeCBhdHRhY2hlZCB0byAgdGhpcyBMaWNlbmNlLiBTaG91bGQgdGhlICBMaWNlbnNlZSYjODIxNztzIG9ibGlnYXRpb25zIAordW5kZXIgdGhlIENvbXBhdGlibGUgTGljZW5jZSBjb25mbGljdCB3aXRoIGhpcy9oZXIgIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5jZSwgdGhlIAorb2JsaWdhdGlvbnMgb2YgdGhlIENvbXBhdGlibGUgTGljZW5jZSBzaGFsbCBwcmV2YWlsLiAgCitQcm92aXNpb24gb2YgU291cmNlIENvZGU6IFdoZW4gZGlzdHJpYnV0aW5nIGFuZC9vciBjb21tdW5pY2F0aW5nIGNvcGllcyBvZiB0aGUgV29yaywgdGhlIAorTGljZW5zZWUgd2lsbCBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvciAgaW5kaWNhdGUgYSByZXBvc2l0b3J5IAord2hlcmUgdGhpcyBTb3VyY2Ugd2lsbCBiZSBlYXNpbHkgYW5kIGZyZWVseSBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgdGhlIExpY2Vuc2VlIGNvbnRpbnVlcyB0byAKK2Rpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZSBXb3JrLiAKK0xlZ2FsIFByb3RlY3Rpb246IFRoaXMgTGljZW5jZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIAorc2VydmljZSBtYXJrcywgb3IgbmFtZXMgb2YgdGhlIExpY2Vuc29yLCBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgCitpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlLiAKKzYuIENoYWluIG9mIEF1dGhvcnNoaXAKK1RoZSBvcmlnaW5hbCBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgZ3JhbnRlZCBoZXJldW5kZXIgaXMgCitvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIgYW5kIGF1dGhvcml0eSB0byBncmFudCAKK3RoZSBMaWNlbmNlLiAKK0VhY2ggQ29udHJpYnV0b3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIHRoZSBtb2RpZmljYXRpb25zIGhlL3NoZSBicmluZ3MgdG8gdGhlIFdvcmsgCithcmUgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZCBhdXRob3JpdHkgdG8gCitncmFudCB0aGUgTGljZW5jZS4gCitFYWNoIHRpbWUgWW91LCBhcyBhIExpY2Vuc2VlLCAgcmVjZWl2ZSB0aGUgV29yaywgdGhlIG9yaWdpbmFsIExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50IAorQ29udHJpYnV0b3JzIGdyYW50IFlvdSBhIGxpY2VuY2UgdG8gdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGUgV29yaywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgCitMaWNlbmNlLiAKKzcuIERpc2NsYWltZXIgb2YgV2FycmFudHkKK1RoZSBXb3JrIGlzIGEgd29yayBpbiBwcm9ncmVzcywgd2hpY2ggaXMgY29udGludW91c2x5IGltcHJvdmVkIGJ5IG51bWVyb3VzIGNvbnRyaWJ1dG9ycy4gSXQgCitpcyBub3QgYSBmaW5pc2hlZCB3b3JrIGFuZCBtYXkgdGhlcmVmb3JlIGNvbnRhaW4gZGVmZWN0cyBvciAmIzgyMjA7YnVncyYjODIyMTsgaW5oZXJlbnQgdG8gdGhpcyB0eXBlIG9mIAorc29mdHdhcmUgZGV2ZWxvcG1lbnQuIAorRm9yIHRoZSBhYm92ZSByZWFzb24sIHRoZSBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBMaWNlbmNlIG9uIGFuICYjODIyMDthcyBpcyYjODIyMTsgYmFzaXMgYW5kIHdpdGhvdXQgCit3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIG1lcmNoYW50YWJpbGl0eSwgCitmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgYWJzZW5jZSBvZiBkZWZlY3RzIG9yIGVycm9ycywgYWNjdXJhY3ksIG5vbi1pbmZyaW5nZW1lbnQgb2YgCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG90aGVyIHRoYW4gY29weXJpZ2h0IGFzIHN0YXRlZCBpbiBBcnRpY2xlIDYgb2YgdGhpcyBMaWNlbmNlLiBUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhlIExpY2VuY2UgYW5kIGEgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnQgb2YgCithbnkgcmlnaHRzIHRvIHRoZSBXb3JrLiAKKzguIERpc2NsYWltZXIgb2YgTGlhYmlsaXR5CitFeGNlcHQgaW4gdGhlIGNhc2VzIG9mIHdpbGZ1bCBtaXNjb25kdWN0IG9yIGRhbWFnZXMgZGlyZWN0bHkgY2F1c2VkIHRvIG5hdHVyYWwgcGVyc29ucywgdGhlIAorTGljZW5zb3Igd2lsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QsIG1hdGVyaWFsIG9yIG1vcmFsLCBkYW1hZ2VzIG9mIAorYW55IGtpbmQsIGFyaXNpbmcgb3V0IG9mICB0aGUgTGljZW5jZSBvciBvZiB0aGUgdXNlIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCAKK2RhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIGxvc3Mgb2YgZGF0YSBvciAKK2FueSBjb21tZXJjaWFsIGRhbWFnZSwgZXZlbiBpZiB0aGUgTGljZW5zb3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgIHBvc3NpYmlsaXR5IG9mIHN1Y2ggCitkYW1hZ2UuIEhvd2V2ZXIsIHRoZSBMaWNlbnNvciB3aWxsIGJlIGxpYWJsZSB1bmRlciBzdGF0dXRvcnkgcHJvZHVjdCBsaWFiaWxpdHkgbGF3cyBhcyBmYXIgc3VjaCAKK2xhd3MgYXBwbHkgdG8gdGhlIFdvcmsuIAorOS4gQWRkaXRpb25hbCBhZ3JlZW1lbnRzCitXaGlsZSBkaXN0cmlidXRpbmcgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcywgWW91IG1heSBjaG9vc2UgdG8gY29uY2x1ZGUgYW4gCithZGRpdGlvbmFsIGFncmVlbWVudCB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2UgIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCAKK2luZGVtbml0eSwgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBzZXJ2aWNlcyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbmNlLiAKK0hvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIHlvdXIgb3duIGJlaGFsZiBhbmQgb24geW91ciAKK3NvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgdGhlIG9yaWdpbmFsIExpY2Vuc29yIG9yIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgCitZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgCitieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3Qgc3VjaCBDb250cmlidXRvciBieSB0aGUgZmFjdCBZb3UgaGF2ZSBhY2NlcHRlZCBhbnkgc3VjaCAKK3dhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LiAKKzEwLiBBY2NlcHRhbmNlIG9mIHRoZSBMaWNlbmNlCitUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgY2FuIGJlIGFjY2VwdGVkIGJ5IGNsaWNraW5nIG9uIGFuIGljb24gJiM4MjIwO0kgYWdyZWUmIzgyMjE7IHBsYWNlZCB1bmRlciAKK3RoZSBib3R0b20gb2YgYSB3aW5kb3cgZGlzcGxheWluZyB0aGUgdGV4dCBvZiB0aGlzIExpY2VuY2Ugb3IgYnkgYWZmaXJtaW5nIGNvbnNlbnQgaW4gYW55IAorb3RoZXIgc2ltaWxhciB3YXksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcnVsZXMgb2YgYXBwbGljYWJsZSBsYXcuIENsaWNraW5nIG9uIHRoYXQgaWNvbiAKK2luZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5jZSBhbmQgIGFsbCBvZiBpdHMgdGVybXMgYW5kIAorY29uZGl0aW9ucy4gIAorU2ltaWxhcmx5LCB5b3UgaXJyZXZvY2FibHkgYWNjZXB0IHRoaXMgTGljZW5jZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBieSAKK2V4ZXJjaXNpbmcgYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBBcnRpY2xlIDIgb2YgdGhpcyBMaWNlbmNlLCBzdWNoIGFzIHRoZSB1c2Ugb2YgdGhlIFdvcmssIAordGhlIGNyZWF0aW9uIGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBvciB0aGUgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGJ5IFlvdSAKK29mIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLiAgCisxMS4gSW5mb3JtYXRpb24gdG8gdGhlIHB1YmxpYworSW4gY2FzZSBvZiBhbnkgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIG9mIHRoZSBXb3JrIGJ5IG1lYW5zIG9mIGVsZWN0cm9uaWMgCitjb21tdW5pY2F0aW9uIGJ5IFlvdSAoZm9yIGV4YW1wbGUsIGJ5IG9mZmVyaW5nIHRvIGRvd25sb2FkIHRoZSBXb3JrIGZyb20gYSByZW1vdGUgCitsb2NhdGlvbikgdGhlIGRpc3RyaWJ1dGlvbiBjaGFubmVsIG9yIG1lZGlhIChmb3IgZXhhbXBsZSwgYSB3ZWJzaXRlKSBtdXN0IGF0IGxlYXN0IHByb3ZpZGUgdG8gCit0aGUgcHVibGljIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3IHJlZ2FyZGluZyB0aGUgaWRlbnRpZmljYXRpb24gYW5kIAorYWRkcmVzcyBvZiB0aGUgTGljZW5zb3IsIHRoZSBMaWNlbmNlIGFuZCB0aGUgd2F5IGl0IG1heSBiZSBhY2Nlc3NpYmxlLCBjb25jbHVkZWQsIHN0b3JlZCBhbmQgCityZXByb2R1Y2VkIGJ5IHRoZSBMaWNlbnNlZS4gCisxMi4gVGVybWluYXRpb24gb2YgdGhlIExpY2VuY2UKK1RoZSBMaWNlbmNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IAordGhlIExpY2Vuc2VlIG9mIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4gCitTdWNoIGEgdGVybWluYXRpb24gd2lsbCBub3QgdGVybWluYXRlIHRoZSBsaWNlbmNlcyBvZiBhbnkgcGVyc29uIHdobyBoYXMgcmVjZWl2ZWQgdGhlIFdvcmsgCitmcm9tIHRoZSBMaWNlbnNlZSB1bmRlciB0aGUgTGljZW5jZSwgcHJvdmlkZWQgc3VjaCBwZXJzb25zIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCAKK3RoZSBMaWNlbmNlLiAgMTMuIE1pc2NlbGxhbmVvdXMKK1dpdGhvdXQgcHJlanVkaWNlIG9mIEFydGljbGUgOSBhYm92ZSwgdGhlIExpY2VuY2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGJldHdlZW4gCit0aGUgUGFydGllcyBhcyB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJldW5kZXIuIAorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5jZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoaXMgd2lsbCBub3QgCithZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSBMaWNlbmNlIGFzIGEgd2hvbGUuIFN1Y2ggcHJvdmlzaW9uIHdpbGwgYmUgCitjb25zdHJ1ZWQgYW5kL29yIHJlZm9ybWVkIHNvIGFzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4gCitUaGUgRXVyb3BlYW4gQ29tbWlzc2lvbiBtYXkgcHV0IGludG8gZm9yY2UgdHJhbnNsYXRpb25zIGFuZC9vciBiaW5kaW5nIG5ldyB2ZXJzaW9ucyBvZiAKK3RoaXMgTGljZW5jZSwgc28gZmFyIHRoaXMgaXMgcmVxdWlyZWQgYW5kIHJlYXNvbmFibGUuIE5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5jZSB3aWxsIGJlIAorcHVibGlzaGVkIHdpdGggYSB1bmlxdWUgdmVyc2lvbiBudW1iZXIuIFRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgTGljZW5jZSBiZWNvbWVzIGJpbmRpbmcgZm9yIAorWW91IGFzIHNvb24gYXMgWW91IGJlY29tZSBhd2FyZSBvZiBpdHMgcHVibGljYXRpb24uIAorMTQuIEp1cmlzZGljdGlvbgorQW55IGxpdGlnYXRpb24gcmVzdWx0aW5nIGZyb20gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYXJpc2luZyBiZXR3ZWVuIHRoZSBFdXJvcGVhbiAKK0NvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgTGljZW5zZWUsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBDb3VydCAKK29mIEp1c3RpY2Ugb2YgdGhlIEV1cm9wZWFuIENvbW11bml0aWVzLCBhcyBsYWlkIGRvd24gaW4gYXJ0aWNsZSAyMzggb2YgdGhlIFRyZWF0eSBlc3RhYmxpc2hpbmcgCit0aGUgRXVyb3BlYW4gQ29tbXVuaXR5LiAKK0FueSBsaXRpZ2F0aW9uIGFyaXNpbmcgYmV0d2VlbiBQYXJ0aWVzLCBvdGhlciAgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYW5kIHJlc3VsdGluZyAKK2Zyb20gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSAKK2NvbXBldGVudCBjb3VydCB3aGVyZSB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcy4gCisxNS4gQXBwbGljYWJsZSBMYXcKK1RoaXMgTGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5IHdoZXJlIHRoZSBMaWNlbnNvciAKK3Jlc2lkZXMgb3IgaGFzIGhpcyByZWdpc3RlcmVkIG9mZmljZS4gCitUaGlzIGxpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIEJlbGdpYW4gbGF3IGlmOiAKKyYjODcyMjsgYSBsaXRpZ2F0aW9uIGFyaXNlcyBiZXR3ZWVuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55IAorTGljZW5zZWU7IAorJiM4NzIyOyB0aGUgTGljZW5zb3IsIG90aGVyIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGhhcyBubyByZXNpZGVuY2Ugb3IgcmVnaXN0ZXJlZCAKK29mZmljZSBpbnNpZGUgYSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5LiAgCisgPT09QXBwZW5kaXgKKyYjODIyMDtDb21wYXRpYmxlIExpY2VuY2VzJiM4MjIxOyBhY2NvcmRpbmcgdG8gYXJ0aWNsZSA1IEVVUEwgYXJlOiAKKyYjODcyMjsgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2LiAyIAorJiM4NzIyOyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCkgdi4gMi4xLCB2LiAzLjAgCismIzg3MjI7IENvbW1vbiBQdWJsaWMgTGljZW5zZSB2LiAxLjAgCismIzg3MjI7IEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMS4wIAorJiM4NzIyOyBDZWNpbGwgdi4gMi4wIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTFkODRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMQpAQCAtMCwwICsxLDIwNCBAQAorCitFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZQorVi4gMS4xCitFVVBMICYjMTY5OyB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5IDIwMDcKK1RoaXMgRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UgKHRoZSAmIzgyMjA7RVVQTCYjODIyMTspIGFwcGxpZXMgdG8gdGhlIFdvcmsgb3IgU29mdHdhcmUKKyhhcyBkZWZpbmVkIGJlbG93KSB3aGljaCBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlLiBBbnkgdXNlIG9mIHRoZQorV29yaywgb3RoZXIgdGhhbiBhcyBhdXRob3Jpc2VkIHVuZGVyIHRoaXMgTGljZW5jZSBpcyBwcm9oaWJpdGVkICh0byB0aGUgZXh0ZW50IHN1Y2ggdXNlCitpcyBjb3ZlcmVkIGJ5IGEgcmlnaHQgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIFdvcmspLgorVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSB3aGVuIHRoZSBMaWNlbnNvciAoYXMKK2RlZmluZWQgYmVsb3cpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQKK25vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CitMaWNlbnNlZCB1bmRlciB0aGUgRVVQTCBWLjEuMQorb3IgaGFzIGV4cHJlc3NlZCBieSBhbnkgb3RoZXIgbWVhbiBoaXMgd2lsbGluZ25lc3MgdG8gbGljZW5zZSB1bmRlciB0aGUgRVVQTC4KKzEuIERlZmluaXRpb25zCitJbiB0aGlzIExpY2VuY2UsIHRoZSBmb2xsb3dpbmcgdGVybXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CistIFRoZSBMaWNlbmNlOiB0aGlzIExpY2VuY2UuCistIFRoZSBPcmlnaW5hbCBXb3JrIG9yIHRoZSBTb2Z0d2FyZTogdGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGFuZC9vciBjb21tdW5pY2F0ZWQKK2J5IHRoZSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2VuY2UsIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSBhbmQgYWxzbyBhcyBFeGVjdXRhYmxlCitDb2RlIGFzIHRoZSBjYXNlIG1heSBiZS4KKy0gRGVyaXZhdGl2ZSBXb3JrczogdGhlIHdvcmtzIG9yIHNvZnR3YXJlIHRoYXQgY291bGQgYmUgY3JlYXRlZCBieSB0aGUgTGljZW5zZWUsCitiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZi4gVGhpcyBMaWNlbmNlIGRvZXMgbm90IGRlZmluZQordGhlIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb3IgZGVwZW5kZW5jZSBvbiB0aGUgT3JpZ2luYWwgV29yayByZXF1aXJlZCBpbiBvcmRlciB0bworY2xhc3NpZnkgYSB3b3JrIGFzIGEgRGVyaXZhdGl2ZSBXb3JrOyB0aGlzIGV4dGVudCBpcyBkZXRlcm1pbmVkIGJ5IGNvcHlyaWdodCBsYXcKK2FwcGxpY2FibGUgaW4gdGhlIGNvdW50cnkgbWVudGlvbmVkIGluIEFydGljbGUgMTUuCistIFRoZSBXb3JrOiB0aGUgT3JpZ2luYWwgV29yayBhbmQvb3IgaXRzIERlcml2YXRpdmUgV29ya3MuCistIFRoZSBTb3VyY2UgQ29kZTogdGhlIGh1bWFuLXJlYWRhYmxlIGZvcm0gb2YgdGhlIFdvcmsgd2hpY2ggaXMgdGhlIG1vc3QKK2NvbnZlbmllbnQgZm9yIHBlb3BsZSB0byBzdHVkeSBhbmQgbW9kaWZ5LgorLSBUaGUgRXhlY3V0YWJsZSBDb2RlOiBhbnkgY29kZSB3aGljaCBoYXMgZ2VuZXJhbGx5IGJlZW4gY29tcGlsZWQgYW5kIHdoaWNoIGlzCittZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSBhIGNvbXB1dGVyIGFzIGEgcHJvZ3JhbS4KKy0gVGhlIExpY2Vuc29yOiB0aGUgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gdGhhdCBkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzIHRoZQorV29yayB1bmRlciB0aGUgTGljZW5jZS4KKy0gQ29udHJpYnV0b3Iocyk6IGFueSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB3aG8gbW9kaWZpZXMgdGhlIFdvcmsgdW5kZXIgdGhlCitMaWNlbmNlLCBvciBvdGhlcndpc2UgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLgorLSBUaGUgTGljZW5zZWUgb3IgJiM4MjIwO1lvdSYjODIyMTs6IGFueSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB3aG8gbWFrZXMgYW55IHVzYWdlIG9mIHRoZQorU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLgorLSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb246IGFueSBhY3Qgb2Ygc2VsbGluZywgZ2l2aW5nLCBsZW5kaW5nLCByZW50aW5nLAorZGlzdHJpYnV0aW5nLCBjb21tdW5pY2F0aW5nLCB0cmFuc21pdHRpbmcsIG9yIG90aGVyd2lzZSBtYWtpbmcgYXZhaWxhYmxlLCBvbi1saW5lIG9yCitvZmYtbGluZSwgY29waWVzIG9mIHRoZSBXb3JrIG9yIHByb3ZpZGluZyBhY2Nlc3MgdG8gaXRzIGVzc2VudGlhbCBmdW5jdGlvbmFsaXRpZXMgYXQgdGhlCitkaXNwb3NhbCBvZiBhbnkgb3RoZXIgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24uCisyLiBTY29wZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UKK1RoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZQorbGljZW5jZSB0byBkbyB0aGUgZm9sbG93aW5nLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGNvcHlyaWdodCB2ZXN0ZWQgaW4gdGhlCitPcmlnaW5hbCBXb3JrOgorLSB1c2UgdGhlIFdvcmsgaW4gYW55IGNpcmN1bXN0YW5jZSBhbmQgZm9yIGFsbCB1c2FnZSwKKy0gcmVwcm9kdWNlIHRoZSBXb3JrLAorLSBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBtYWtlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgV29yaywKKy0gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBtYWtlIGF2YWlsYWJsZSBvciBkaXNwbGF5IHRoZQorV29yayBvciBjb3BpZXMgdGhlcmVvZiB0byB0aGUgcHVibGljIGFuZCBwZXJmb3JtIHB1YmxpY2x5LCBhcyB0aGUgY2FzZSBtYXkgYmUsCit0aGUgV29yaywKKy0gZGlzdHJpYnV0ZSB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZiwKKy0gbGVuZCBhbmQgcmVudCB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZiwKKy0gc3ViLWxpY2Vuc2UgcmlnaHRzIGluIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLgorVGhvc2UgcmlnaHRzIGNhbiBiZSBleGVyY2lzZWQgb24gYW55IG1lZGlhLCBzdXBwb3J0cyBhbmQgZm9ybWF0cywgd2hldGhlciBub3cKK2tub3duIG9yIGxhdGVyIGludmVudGVkLCBhcyBmYXIgYXMgdGhlIGFwcGxpY2FibGUgbGF3IHBlcm1pdHMgc28uCitJbiB0aGUgY291bnRyaWVzIHdoZXJlIG1vcmFsIHJpZ2h0cyBhcHBseSwgdGhlIExpY2Vuc29yIHdhaXZlcyBoaXMgcmlnaHQgdG8gZXhlcmNpc2UgaGlzCittb3JhbCByaWdodCB0byB0aGUgZXh0ZW50IGFsbG93ZWQgYnkgbGF3IGluIG9yZGVyIHRvIG1ha2UgZWZmZWN0aXZlIHRoZSBsaWNlbmNlIG9mIHRoZQorZWNvbm9taWMgcmlnaHRzIGhlcmUgYWJvdmUgbGlzdGVkLgorVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgTGljZW5zZWUgcm95YWx0eS1mcmVlLCBub24gZXhjbHVzaXZlIHVzYWdlIHJpZ2h0cyB0byBhbnkKK3BhdGVudHMgaGVsZCBieSB0aGUgTGljZW5zb3IsIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgdXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZAorb24gdGhlIFdvcmsgdW5kZXIgdGhpcyBMaWNlbmNlLgorMy4gQ29tbXVuaWNhdGlvbiBvZiB0aGUgU291cmNlIENvZGUKK1RoZSBMaWNlbnNvciBtYXkgcHJvdmlkZSB0aGUgV29yayBlaXRoZXIgaW4gaXRzIFNvdXJjZSBDb2RlIGZvcm0sIG9yIGFzIEV4ZWN1dGFibGUKK0NvZGUuIElmIHRoZSBXb3JrIGlzIHByb3ZpZGVkIGFzIEV4ZWN1dGFibGUgQ29kZSwgdGhlIExpY2Vuc29yIHByb3ZpZGVzIGluIGFkZGl0aW9uIGEKK21hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlCitXb3JrIHRoYXQgdGhlIExpY2Vuc29yIGRpc3RyaWJ1dGVzIG9yIGluZGljYXRlcywgaW4gYSBub3RpY2UgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQKK25vdGljZSBhdHRhY2hlZCB0byB0aGUgV29yaywgYSByZXBvc2l0b3J5IHdoZXJlIHRoZSBTb3VyY2UgQ29kZSBpcyBlYXNpbHkgYW5kIGZyZWVseQorYWNjZXNzaWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZQorV29yay4KKzQuIExpbWl0YXRpb25zIG9uIGNvcHlyaWdodAorTm90aGluZyBpbiB0aGlzIExpY2VuY2UgaXMgaW50ZW5kZWQgdG8gZGVwcml2ZSB0aGUgTGljZW5zZWUgb2YgdGhlIGJlbmVmaXRzIGZyb20gYW55CitleGNlcHRpb24gb3IgbGltaXRhdGlvbiB0byB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgcmlnaHRzIG93bmVycyBpbiB0aGUgT3JpZ2luYWwKK1dvcmsgb3IgU29mdHdhcmUsIG9mIHRoZSBleGhhdXN0aW9uIG9mIHRob3NlIHJpZ2h0cyBvciBvZiBvdGhlciBhcHBsaWNhYmxlIGxpbWl0YXRpb25zCit0aGVyZXRvLgorNS4gT2JsaWdhdGlvbnMgb2YgdGhlIExpY2Vuc2VlCitUaGUgZ3JhbnQgb2YgdGhlIHJpZ2h0cyBtZW50aW9uZWQgYWJvdmUgaXMgc3ViamVjdCB0byBzb21lIHJlc3RyaWN0aW9ucyBhbmQgb2JsaWdhdGlvbnMKK2ltcG9zZWQgb24gdGhlIExpY2Vuc2VlLiBUaG9zZSBvYmxpZ2F0aW9ucyBhcmUgdGhlIGZvbGxvd2luZzoKK0F0dHJpYnV0aW9uIHJpZ2h0OiB0aGUgTGljZW5zZWUgc2hhbGwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFya3MKK25vdGljZXMgYW5kIGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCitUaGUgTGljZW5zZWUgbXVzdCBpbmNsdWRlIGEgY29weSBvZiBzdWNoIG5vdGljZXMgYW5kIGEgY29weSBvZiB0aGUgTGljZW5jZSB3aXRoCitldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGhlL3NoZSBkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzLiBUaGUgTGljZW5zZWUgbXVzdAorY2F1c2UgYW55IERlcml2YXRpdmUgV29yayB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhlIFdvcmsgaGFzIGJlZW4KK21vZGlmaWVkIGFuZCB0aGUgZGF0ZSBvZiBtb2RpZmljYXRpb24uCitDb3B5bGVmdCBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzIGNvcGllcyBvZiB0aGUKK09yaWdpbmFsIFdvcmtzIG9yIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgdGhpcyBEaXN0cmlidXRpb24KK2FuZC9vciBDb21tdW5pY2F0aW9uIHdpbGwgYmUgZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIG9yIG9mIGEgbGF0ZXIKK3ZlcnNpb24gb2YgdGhpcyBMaWNlbmNlIHVubGVzcyB0aGUgT3JpZ2luYWwgV29yayBpcyBleHByZXNzbHkgZGlzdHJpYnV0ZWQgb25seSB1bmRlcgordGhpcyB2ZXJzaW9uIG9mIHRoZSBMaWNlbmNlLiBUaGUgTGljZW5zZWUgKGJlY29taW5nIExpY2Vuc29yKSBjYW5ub3Qgb2ZmZXIgb3IgaW1wb3NlCithbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zIG9uIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29yayB0aGF0IGFsdGVyIG9yCityZXN0cmljdCB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuCitDb21wYXRpYmlsaXR5IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIERpc3RyaWJ1dGVzIGFuZC9vciBDb21tdW5pY2F0ZXMgRGVyaXZhdGl2ZQorV29ya3Mgb3IgY29waWVzIHRoZXJlb2YgYmFzZWQgdXBvbiBib3RoIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBhbm90aGVyIHdvcmsKK2xpY2Vuc2VkIHVuZGVyIGEgQ29tcGF0aWJsZSBMaWNlbmNlLCB0aGlzIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBjYW4gYmUKK2RvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQ29tcGF0aWJsZSBMaWNlbmNlLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyBjbGF1c2UsCismIzgyMjA7Q29tcGF0aWJsZSBMaWNlbmNlJiM4MjIxOyByZWZlcnMgdG8gdGhlIGxpY2VuY2VzIGxpc3RlZCBpbiB0aGUgYXBwZW5kaXggYXR0YWNoZWQgdG8gdGhpcworTGljZW5jZS4gU2hvdWxkIHRoZSBMaWNlbnNlZSYjODIxNztzIG9ibGlnYXRpb25zIHVuZGVyIHRoZSBDb21wYXRpYmxlIExpY2VuY2UgY29uZmxpY3QKK3dpdGggaGlzL2hlciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2VuY2UsIHRoZSBvYmxpZ2F0aW9ucyBvZiB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlCitzaGFsbCBwcmV2YWlsLgorUHJvdmlzaW9uIG9mIFNvdXJjZSBDb2RlOiBXaGVuIGRpc3RyaWJ1dGluZyBhbmQvb3IgY29tbXVuaWNhdGluZyBjb3BpZXMgb2YgdGhlCitXb3JrLCB0aGUgTGljZW5zZWUgd2lsbCBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvcgoraW5kaWNhdGUgYSByZXBvc2l0b3J5IHdoZXJlIHRoaXMgU291cmNlIHdpbGwgYmUgZWFzaWx5IGFuZCBmcmVlbHkgYXZhaWxhYmxlIGZvciBhcyBsb25nCithcyB0aGUgTGljZW5zZWUgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZSBXb3JrLgorTGVnYWwgUHJvdGVjdGlvbjogVGhpcyBMaWNlbmNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywKK3RyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvcgorcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nCit0aGUgY29udGVudCBvZiB0aGUgY29weXJpZ2h0IG5vdGljZS4KKzYuIENoYWluIG9mIEF1dGhvcnNoaXAKK1RoZSBvcmlnaW5hbCBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgZ3JhbnRlZAoraGVyZXVuZGVyIGlzIG93bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlcgorYW5kIGF1dGhvcml0eSB0byBncmFudCB0aGUgTGljZW5jZS4KK0VhY2ggQ29udHJpYnV0b3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIHRoZSBtb2RpZmljYXRpb25zIGhlL3NoZSBicmluZ3MgdG8gdGhlCitXb3JrIGFyZSBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIgYW5kCithdXRob3JpdHkgdG8gZ3JhbnQgdGhlIExpY2VuY2UuCitFYWNoIHRpbWUgWW91IGFjY2VwdCB0aGUgTGljZW5jZSwgdGhlIG9yaWdpbmFsIExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9ycworZ3JhbnQgWW91IGEgbGljZW5jZSB0byB0aGVpciBjb250cmlidXRpb25zIHRvIHRoZSBXb3JrLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5jZS4KKzcuIERpc2NsYWltZXIgb2YgV2FycmFudHkKK1RoZSBXb3JrIGlzIGEgd29yayBpbiBwcm9ncmVzcywgd2hpY2ggaXMgY29udGludW91c2x5IGltcHJvdmVkIGJ5IG51bWVyb3VzCitjb250cmlidXRvcnMuIEl0IGlzIG5vdCBhIGZpbmlzaGVkIHdvcmsgYW5kIG1heSB0aGVyZWZvcmUgY29udGFpbiBkZWZlY3RzIG9yICYjODIyMDtidWdzJiM4MjIxOworaW5oZXJlbnQgdG8gdGhpcyB0eXBlIG9mIHNvZnR3YXJlIGRldmVsb3BtZW50LgorRm9yIHRoZSBhYm92ZSByZWFzb24sIHRoZSBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSBMaWNlbmNlIG9uIGFuICYjODIyMDthcyBpcyYjODIyMTsgYmFzaXMgYW5kCit3aXRob3V0IHdhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgV29yaywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgYWJzZW5jZSBvZiBkZWZlY3RzIG9yIGVycm9ycywKK2FjY3VyYWN5LCBub24taW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3RoZXIgdGhhbiBjb3B5cmlnaHQgYXMKK3N0YXRlZCBpbiBBcnRpY2xlIDYgb2YgdGhpcyBMaWNlbmNlLgorVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBMaWNlbmNlIGFuZCBhIGNvbmRpdGlvbiBmb3IgdGhlCitncmFudCBvZiBhbnkgcmlnaHRzIHRvIHRoZSBXb3JrLgorOC4gRGlzY2xhaW1lciBvZiBMaWFiaWxpdHkKK0V4Y2VwdCBpbiB0aGUgY2FzZXMgb2Ygd2lsZnVsIG1pc2NvbmR1Y3Qgb3IgZGFtYWdlcyBkaXJlY3RseSBjYXVzZWQgdG8gbmF0dXJhbAorcGVyc29ucywgdGhlIExpY2Vuc29yIHdpbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0IG9yIGluZGlyZWN0LCBtYXRlcmlhbCBvcgorbW9yYWwsIGRhbWFnZXMgb2YgYW55IGtpbmQsIGFyaXNpbmcgb3V0IG9mIHRoZSBMaWNlbmNlIG9yIG9mIHRoZSB1c2Ugb2YgdGhlIFdvcmssCitpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlcgorZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgbG9zcyBvZiBkYXRhIG9yIGFueSBjb21tZXJjaWFsIGRhbWFnZSwgZXZlbiBpZiB0aGUgTGljZW5zb3IKK2hhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLiBIb3dldmVyLCB0aGUgTGljZW5zb3Igd2lsbCBiZQorbGlhYmxlIHVuZGVyIHN0YXR1dG9yeSBwcm9kdWN0IGxpYWJpbGl0eSBsYXdzIGFzIGZhciBzdWNoIGxhd3MgYXBwbHkgdG8gdGhlIFdvcmsuCis5LiBBZGRpdGlvbmFsIGFncmVlbWVudHMKK1doaWxlIGRpc3RyaWJ1dGluZyB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzLCBZb3UgbWF5IGNob29zZSB0bworY29uY2x1ZGUgYW4gYWRkaXRpb25hbCBhZ3JlZW1lbnQgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsCit3YXJyYW50eSwgaW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHNlcnZpY2VzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCitMaWNlbmNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiB5b3VyIG93bgorYmVoYWxmIGFuZCBvbiB5b3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgdGhlIG9yaWdpbmFsIExpY2Vuc29yIG9yIGFueQorb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaAorQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IHN1Y2gKK0NvbnRyaWJ1dG9yIGJ5IHRoZSBmYWN0IFlvdSBoYXZlIGFjY2VwdGVkIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorMTAuIEFjY2VwdGFuY2Ugb2YgdGhlIExpY2VuY2UKK1RoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5jZSBjYW4gYmUgYWNjZXB0ZWQgYnkgY2xpY2tpbmcgb24gYW4gaWNvbiAmIzgyMjA7SSBhZ3JlZSYjODIyMTsKK3BsYWNlZCB1bmRlciB0aGUgYm90dG9tIG9mIGEgd2luZG93IGRpc3BsYXlpbmcgdGhlIHRleHQgb2YgdGhpcyBMaWNlbmNlIG9yIGJ5CithZmZpcm1pbmcgY29uc2VudCBpbiBhbnkgb3RoZXIgc2ltaWxhciB3YXksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcnVsZXMgb2YgYXBwbGljYWJsZQorbGF3LiBDbGlja2luZyBvbiB0aGF0IGljb24gaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcworTGljZW5jZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KK1NpbWlsYXJseSwgeW91IGlycmV2b2NhYmx5IGFjY2VwdCB0aGlzIExpY2VuY2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgYnkKK2V4ZXJjaXNpbmcgYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBBcnRpY2xlIDIgb2YgdGhpcyBMaWNlbmNlLCBzdWNoIGFzIHRoZSB1c2Ugb2YKK3RoZSBXb3JrLCB0aGUgY3JlYXRpb24gYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIHRoZSBEaXN0cmlidXRpb24gYW5kL29yCitDb21tdW5pY2F0aW9uIGJ5IFlvdSBvZiB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZi4KKzExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljCitJbiBjYXNlIG9mIGFueSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gb2YgdGhlIFdvcmsgYnkgbWVhbnMgb2YgZWxlY3Ryb25pYworY29tbXVuaWNhdGlvbiBieSBZb3UgKGZvciBleGFtcGxlLCBieSBvZmZlcmluZyB0byBkb3dubG9hZCB0aGUgV29yayBmcm9tIGEKK3JlbW90ZSBsb2NhdGlvbikgdGhlIGRpc3RyaWJ1dGlvbiBjaGFubmVsIG9yIG1lZGlhIChmb3IgZXhhbXBsZSwgYSB3ZWJzaXRlKSBtdXN0IGF0CitsZWFzdCBwcm92aWRlIHRvIHRoZSBwdWJsaWMgdGhlIGluZm9ybWF0aW9uIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYWJsZSBsYXcgcmVnYXJkaW5nCit0aGUgTGljZW5zb3IsIHRoZSBMaWNlbmNlIGFuZCB0aGUgd2F5IGl0IG1heSBiZSBhY2Nlc3NpYmxlLCBjb25jbHVkZWQsIHN0b3JlZCBhbmQKK3JlcHJvZHVjZWQgYnkgdGhlIExpY2Vuc2VlLgorMTIuIFRlcm1pbmF0aW9uIG9mIHRoZSBMaWNlbmNlCitUaGUgTGljZW5jZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55CiticmVhY2ggYnkgdGhlIExpY2Vuc2VlIG9mIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KK1N1Y2ggYSB0ZXJtaW5hdGlvbiB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2VuY2VzIG9mIGFueSBwZXJzb24gd2hvIGhhcyByZWNlaXZlZCB0aGUKK1dvcmsgZnJvbSB0aGUgTGljZW5zZWUgdW5kZXIgdGhlIExpY2VuY2UsIHByb3ZpZGVkIHN1Y2ggcGVyc29ucyByZW1haW4gaW4gZnVsbAorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbmNlLgorMTMuIE1pc2NlbGxhbmVvdXMKK1dpdGhvdXQgcHJlanVkaWNlIG9mIEFydGljbGUgOSBhYm92ZSwgdGhlIExpY2VuY2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50CitiZXR3ZWVuIHRoZSBQYXJ0aWVzIGFzIHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmV1bmRlci4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhlIExpY2VuY2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGlzCit3aWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSBMaWNlbmNlIGFzIGEgd2hvbGUuIFN1Y2ggcHJvdmlzaW9uCit3aWxsIGJlIGNvbnN0cnVlZCBhbmQvb3IgcmVmb3JtZWQgc28gYXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorVGhlIEV1cm9wZWFuIENvbW1pc3Npb24gbWF5IHB1Ymxpc2ggb3RoZXIgbGluZ3Vpc3RpYyB2ZXJzaW9ucyBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGlzIExpY2VuY2UsIHNvIGZhciB0aGlzIGlzIHJlcXVpcmVkIGFuZCByZWFzb25hYmxlLCB3aXRob3V0IHJlZHVjaW5nIHRoZSBzY29wZSBvZgordGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBMaWNlbmNlLiBOZXcgdmVyc2lvbnMgb2YgdGhlIExpY2VuY2Ugd2lsbCBiZSBwdWJsaXNoZWQgd2l0aAorYSB1bmlxdWUgdmVyc2lvbiBudW1iZXIuCitBbGwgbGluZ3Vpc3RpYyB2ZXJzaW9ucyBvZiB0aGlzIExpY2VuY2UsIGFwcHJvdmVkIGJ5IHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBoYXZlCitpZGVudGljYWwgdmFsdWUuIFBhcnRpZXMgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBsaW5ndWlzdGljIHZlcnNpb24gb2YgdGhlaXIgY2hvaWNlLgorMTQuIEp1cmlzZGljdGlvbgorQW55IGxpdGlnYXRpb24gcmVzdWx0aW5nIGZyb20gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYXJpc2luZyBiZXR3ZWVuIHRoZQorRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSBMaWNlbnNlZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZQoranVyaXNkaWN0aW9uIG9mIHRoZSBDb3VydCBvZiBKdXN0aWNlIG9mIHRoZSBFdXJvcGVhbiBDb21tdW5pdGllcywgYXMgbGFpZCBkb3duIGluCithcnRpY2xlIDIzOCBvZiB0aGUgVHJlYXR5IGVzdGFibGlzaGluZyB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5LgorQW55IGxpdGlnYXRpb24gYXJpc2luZyBiZXR3ZWVuIFBhcnRpZXMsIG90aGVyIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFuZAorcmVzdWx0aW5nIGZyb20gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBleGNsdXNpdmUKK2p1cmlzZGljdGlvbiBvZiB0aGUgY29tcGV0ZW50IGNvdXJ0IHdoZXJlIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5CitidXNpbmVzcy4KKzE1LiBBcHBsaWNhYmxlIExhdworVGhpcyBMaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXcgb2YgdGhlIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkgd2hlcmUgdGhlCitMaWNlbnNvciByZXNpZGVzIG9yIGhhcyBoaXMgcmVnaXN0ZXJlZCBvZmZpY2UuCitUaGlzIGxpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIEJlbGdpYW4gbGF3IGlmOgorLSBhIGxpdGlnYXRpb24gYXJpc2VzIGJldHdlZW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkKK0xpY2Vuc2VlOworLSB0aGUgTGljZW5zb3IsIG90aGVyIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGhhcyBubyByZXNpZGVuY2Ugb3IKK3JlZ2lzdGVyZWQgb2ZmaWNlIGluc2lkZSBhIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkuCis9PT0KK0FwcGVuZGl4CismIzgyMjA7Q29tcGF0aWJsZSBMaWNlbmNlcyYjODIyMTsgYWNjb3JkaW5nIHRvIGFydGljbGUgNSBFVVBMIGFyZToKKy0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdOVSBHUEwpIHYuIDIKKy0gT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wpIHYuIDIuMSwgdi4gMy4wCistIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2LiAxLjAKKy0gRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAxLjAKKy0gQ2VjaWxsIHYuIDIuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VsZnV0aWxzLUV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2Q3NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VsZnV0aWxzLUV4Y2VwdGlvbgpAQCAtMCwwICsxLDEyIEBACisgICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBsaW1pdHMgb2YgdGhlIEV4Y2VwdGlvbiB1bmRlciB3aGljaCB5b3UgYXJlIGFsbG93ZWQKKyAgIHRvIGRpc3RyaWJ1dGUgTm9uLUdQTCBDb2RlIGluIGxpbmtlZCBjb21iaW5hdGlvbiB3aXRoIFJlZCBIYXQgZWxmdXRpbHMuCisgICBGb3IgdGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSwgcGxlYXNlIHNlZSBvbmUgb2YgdGhlIGhlYWRlciBmaWxlcworICAgaW5jbHVkZWQgd2l0aCB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBvciB0aGUgZmlsZSBDT1BZSU5HIGZvdW5kIGluIHRoZQorICAgdG9wIGxldmVsIGRpcmVjdG9yeSBvZiB0aGUgc291cmNlLgorCisgICBUaGUgQXBwcm92ZWQgSW50ZXJmYWNlcyBhcmUgdGhlIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiB0aGUgZmlsZXM6CisKKyAgIGxpYmVsZi5oCisgICBsaWJkdy5oCisgICBsaWJkd2ZsLmgKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbnRlc3NhIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbnRlc3NhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZGFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VudGVzc2EKQEAgLTAsMCArMSwyMCBAQAorCitFbnRlc3NhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24uIDEuMAorQ29weXJpZ2h0IChjKSAyMDAzIEVudGVzc2EsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogCisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIG9wZW4gc291cmNlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBvcGVuU0VBTCAoaHR0cDovL3d3dy5vcGVuc2VhbC5vcmcvKS4iCisKK0FsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKworVGhlIG5hbWVzICJvcGVuU0VBTCIgYW5kICJFbnRlc3NhIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgZXBsQGVudGVzc2EuY29tLgorUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIm9wZW5TRUFMIiwgbm9yIG1heSAib3BlblNFQUwiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBFbnRlc3NhLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFTlRFU1NBLCBMTEMsIE9QRU5TRUFMIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIG9wZW5TRUFMIGFuZCB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb250cmlidXRlZCBieSBFbnRlc3NhLCBMTEMsIGh0dHA6Ly93d3cuZW50ZXNzYS5jb20uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBvcGVuU0VBTCwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5vcGVuc2VhbC5vcmcvPi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FcmxQTC0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTYxY2NmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FcmxQTC0xLjEKQEAgLTAsMCArMSwyODggQEAKKworRVJMQU5HIFBVQkxJQyBMSUNFTlNFCitWZXJzaW9uIDEuMQorCisxLiBEZWZpbml0aW9ucy4KKworMS4xLiBgYENvbnRyaWJ1dG9yYGAgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCit0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiBgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zCittYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiBgYENvdmVyZWQgQ29kZWBgIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlCitpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiBgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gYGBFeGVjdXRhYmxlYGAgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCitDb2RlLgorCisxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXJgYCBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZAorYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorQS4KKworMS43LiBgYExhcmdlciBXb3JrYGAgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvcgorcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gYGBMaWNlbnNlYGAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiBgYE1vZGlmaWNhdGlvbnNgYCBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nCisgICBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvcgorICAgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCisKKzEuMTAuIGBgT3JpZ2luYWwgQ29kZWBgIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKK3doaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcworT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzCitMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuIGBgU291cmNlIENvZGVgYCBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMKK2FueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlCitjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzCitjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sCitwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMKK3dpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gYGBZb3VgYCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzCit1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsCitlbnRpdGllcyxgYFlvdWBgIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksCitvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKK2BgY29udHJvbGBgIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCitkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKK291dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CitjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorICAgIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dAorICAgIE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kIAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbAorICAgIERldmVsb3BlciwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKGBgVXRpbGl6ZWBgKSB0aGUKKyAgICBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQKKyAgICBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplCisgICAgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIKKyAgICBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yCisgICAgY29tYmluYXRpb25zLiAKKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CitjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorICAgIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvcgorICAgIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyCisgICAgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kIAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsCisgICAgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dAorICAgIHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5CisgICAgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucworICAgIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8KKyAgICBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuIAorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoCitldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IKK2ltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzCit0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzCitoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nCit0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LiAKKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlCitDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMKK2FuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KK01lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOworYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QKK3JlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdAoraW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEKK3N1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUKK2F2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQKK3RoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCit0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0Cit0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKK0NvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCisgICAgSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbgorICAgIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlCisgICAgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIGBgTEVHQUxgYCB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZAorICAgIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQKKyAgICB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdQorICAgIG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91CisgICAgc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UKKyAgICBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcKKyAgICBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0bworICAgIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzCisgICAgYmVlbiBvYnRhaW5lZC4gCisKKyhiKSBDb250cmlidXRvciBBUElzLgorICAgIElmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQKKyAgICBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8KKyAgICBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZQorICAgIExFR0FMIGZpbGUuIAorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKK0NvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUKK1lvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UKK2NyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYQorQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBJZiBpdCBpcyBub3QKK3Bvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoCithcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yCitzdWNoIGEgbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsCit3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZQorcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93bgorYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55CitDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsCithbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeQorQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yCitzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IKK2xpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwKK2FuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKK3RoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUKK29ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZAoraW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZQorQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkCitDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50Citmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzCitub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91CitkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdAorbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZQorYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueQorQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQKK2V2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3Blcgorb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZQorbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlcgorV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQorcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlCitvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZAordGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwKK2ZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsCitkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieQorc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkCitmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcworYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gQ09OTkVDVElPTiBUTyBNT1pJTExBIFBVQkxJQyBMSUNFTlNFCisKK1RoaXMgRXJsYW5nIExpY2Vuc2UgaXMgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIE1vemlsbGEgUHVibGljCitMaWNlbnNlLCBWZXJzaW9uIDEuMC4gSXQgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEKK1B1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBgYEFTIElTYGAgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRgorREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SCitOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRgorVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFCitJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SCitDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQKK09GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIKK0VYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlCitzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwKK3N1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIKK25hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlCitzaGFsbCBzdXJ2aXZlLgorCis5LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorQW55IHV0aWxpemF0aW9uIG9mIENvdmVyZWQgQ29kZSBzaGFsbCBub3QgY2F1c2UgdGhlIEluaXRpYWwgRGV2ZWxvcGVyCitvciBhbnkgQ29udHJpYnV0b3IgdG8gYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyAobmVpdGhlciBkaXJlY3Qgbm9yCitpbmRpcmVjdCkuCisKKzEwLiBNSVNDRUxMQU5FT1VTCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoCitwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0CitlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBieSBhbmQgaW4gYWNjb3JkYW5jZSB3aXRoCit0aGUgc3Vic3RhbnRpdmUgbGF3cyBvZiBTd2VkZW4uIEFueSBkaXNwdXRlLCBjb250cm92ZXJzeSBvciBjbGFpbQorYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlLCBvciB0aGUgYnJlYWNoLCB0ZXJtaW5hdGlvbgorb3IgaW52YWxpZGl0eSB0aGVyZW9mLCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uCitvZiBTd2VkaXNoIGNvdXJ0cywgd2l0aCB0aGUgU3RvY2tob2xtIENpdHkgQ291cnQgYXMgdGhlIGZpcnN0CitpbnN0YW5jZS4KKyAKK0VYSElCSVQgQS4KKworYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBFcmxhbmcgUHVibGljIExpY2Vuc2UsCitWZXJzaW9uIDEuMSwgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZQorRXJsYW5nIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBpdCBjYW4gYmUKK3JldHJpZXZlZCB2aWEgdGhlIHdvcmxkIHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZXJsYW5nLm9yZy8uCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUKK3RoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgRXJpY3Nzb24gVXR2ZWNrbGluZ3MgQUIuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IEVyaWNzc29uIGFyZSBDb3B5cmlnaHQgMTk5OSwgRXJpY3Nzb24gVXR2ZWNrbGluZ3MKK0FCLiBBbGwgUmlnaHRzIFJlc2VydmVkLmBgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRlNGLVVubGltaXRlZCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRlNGLVVubGltaXRlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBhOTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GU0YtVW5saW1pdGVkCkBAIC0wLDAgKzEsNCBAQAorQ29weXJpZ2h0IChDKSAxOTk3LTIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRmFpciBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRmFpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzViMDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GYWlyCkBAIC0wLDAgKzEsMTEgQEAKKworRmFpciBMaWNlbnNlCisocGxhaW4gdGV4dCkKKzxDb3B5cmlnaHQgSW5mb3JtYXRpb24+CisKK1VzYWdlIG9mIHRoZSB3b3JrcyBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGlzIGluc3RydW1lbnQgaXMgcmV0YWluZWQgd2l0aCB0aGUgd29ya3MsIHNvIHRoYXQgYW55IGVudGl0eSB0aGF0IHVzZXMgdGhlIHdvcmtzIGlzIG5vdGlmaWVkIG9mIHRoaXMgaW5zdHJ1bWVudC4KKworRElTQ0xBSU1FUjogVEhFIFdPUktTIEFSRSBXSVRIT1VUIFdBUlJBTlRZLgorCitbMjAwNCwgRmFpciBMaWNlbnNlOiByaGlkLmNvbS9mYWlyICh0aGlzIFVSTCBubyBsb25nZXIgd29ya3MpXQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyYW1ld29yeC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyYW1ld29yeC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiYjE4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJhbWV3b3J4LTEuMApAQCAtMCwwICsxLDY5IEBACisKK1RIRSBGUkFNRVdPUlggT1BFTiBMSUNFTlNFIDEuMAorVGhpcyBMaWNlbnNlIEFncmVlbWVudCwgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UgMS4wLCBoYXMgYmVlbiBlbnRlcmVkIGludG8gYmV0d2VlbiBUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIHlvdSwgdGhlIGxpY2Vuc2VlIGhlcmV1bmRlciwgZWZmZWN0aXZlIGFzIG9mIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBvciBhbiBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiAoZWFjaCBhcyBkZWZpbmVkIGJlbG93KS4KKworQUdSRUVNRU5UIEJBQ0tHUk9VTkQKK1RoZSBGcmFtZXdvcnggQ29tcGFueSBpcyBjb21taXR0ZWQgdG8gdGhlIGJlbGllZiB0aGF0IG9wZW4gc291cmNlIHNvZnR3YXJlIHJlc3VsdHMgaW4gYmV0dGVyIHF1YWxpdHksIGdyZWF0ZXIgdGVjaG5pY2FsIGFuZCBwcm9kdWN0IGlubm92YXRpb24gaW4gdGhlIG1hcmtldCBwbGFjZSBhbmQgYSBtb3JlIGVtcG93ZXJlZCBhbmQgcHJvZHVjdGl2ZSBkZXZlbG9wZXIgYW5kIGVuZC11c2VyIGNvbW11bml0eS4gT3VyIG9iamVjdGl2ZSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3IgaW1wcm92ZW1lbnRzIGFuZCBpbm5vdmF0aW9ucyB0byBpdCwgcmVtYWluIGZyZWUgYW5kIG9wZW4gdG8gdGhlIGNvbW11bml0eS5UbyBmdXJ0aGVyIHRoZXNlIGJlbGllZnMgYW5kIG9iamVjdGl2ZXMsIHdlIGFyZSBkaXN0cmlidXRpbmcgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIHdpdGhvdXQgcm95YWx0aWVzIGFuZCBpbiBzb3VyY2UgY29kZSBmb3JtLCB0byB0aGUgY29tbXVuaXR5IHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKK0FHUkVFTUVOVCBURVJNUworVGhlIEZyYW1ld29yeCBDb21wYW55IGFuZCBZb3UgaGF2ZSBhZ3JlZWQgYXMgZm9sbG93czoKKzEuRGVmaW5pdGlvbnMuVGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgcmVzcGVjdGl2ZSBtZWFuaW5nczoKKworKGEpICAgICBGcmFtZXdvcnggQ29kZSBCYXNlIG1lYW5zIHRoZSBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgVGhlIEZyYW1ld29yeCBDb21wYW55IGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50CisKKyhiKSAgICAgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gbWVhbnMgYW55IGRpcmVjdCBvciBpbmRpcmVjdCByZWxlYXNlLCBkaXN0cmlidXRpb24gb3IgcmVtb3RlIGF2YWlsYWJpbGl0eSBvZiBzb2Z0d2FyZSAoaSkgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNvbnRhaW5zLCBvciBkZXBlbmRzIGZvciBpdHMgaW50ZW5kZWQgZnVuY3Rpb25pbmcgb24sIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZiBhbmQgKGlpKSBpbiB3aGljaCByaWdodHMgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHN1Y2ggRnJhbWV3b3J4IENvZGUgQmFzZSBzb2Z0d2FyZSBkZXBlbmQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG9uIHRoZSBMaWNlbnNlIHByb3ZpZGVkIGluIFNlY3Rpb24gMiBiZWxvdy4KKworKGMpICAgICAiU291cmNlIENvZGUiIHRvIGFueSBzb2Z0d2FyZSBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIHRoYXQgc29mdHdhcmUsIGluY2x1ZGluZyBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhbmQgY29tcGlsYXRpb24gb3IgaW5zdGFsbGF0aW9uIHNjcmlwdHMsIG9yIGFueSB2ZXJzaW9uIHRoZXJlb2YgdGhhdCBoYXMgYmVlbiBjb21wcmVzc2VkIG9yIGFyY2hpdmVkLCBhbmQgY2FuIGJlIHJlY29uc3RpdHV0ZWQsIHVzaW5nIGFuIGFwcHJvcHJpYXRlIGFuZCBnZW5lcmFsbHkgYXZhaWxhYmxlIGFyY2hpdmFsIG9yIGNvbXByZXNzaW9uIHRlY2hub2xvZ3kuCisKKyhkKSAgICAgVmFsdWUtQWRkZWQgU2VydmljZXMgbWVhbnMgYW55IGNvbW1lcmNpYWwgb3IgZmVlLWJhc2VkIHNvZnR3YXJlLXJlbGF0ZWQgc2VydmljZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbjogc3lzdGVtIG9yIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IG9yIGNvbnN1bHRpbmc7IHRlY2huaWNhbCBvciBlbmQtdXNlciBzdXBwb3J0IG9yIHRyYWluaW5nOyBkaXN0cmlidXRpb24gbWFpbnRlbmFuY2UsIGNvbmZpZ3VyYXRpb24gb3IgdmVyc2lvbmluZzsgb3Igb3V0c291cmNlZCwgaG9zdGVkIG9yIG5ldHdvcmstYmFzZWQgYXBwbGljYXRpb24gc2VydmljZXMuCisKKzIuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVvZiwgVGhlIEZyYW1ld29yeCBDb21wYW55IGhlcmVieSBncmFudHMgWW91IGEgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlICh0aGUgTGljZW5zZSksIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgYW5kIGZvciBubyBmZWUgb3RoZXIgdGhhbiBhIG5vbWluYWwgY2hhcmdlIHJlZmxlY3RpbmcgdGhlIGNvc3RzIG9mIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiwgdG86CisKKyhhKSAgICAgdXNlIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBpbiBlaXRoZXIgU291cmNlIENvZGUgb3IgbWFjaGluZS1yZWFkYWJsZSBmb3JtOworCisoYikgICAgIG1ha2UgbW9kaWZpY2F0aW9ucywgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgdG8gdGhlIGNvbnRlbnQgb3Igc3RydWN0dXJlIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlOyBvcgorCisoYykgICAgIGNyZWF0ZSBsYXJnZXIgd29ya3Mgb3IgZGVyaXZhdGl2ZSB3b3JrcyBpbmNsdWRpbmcgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2Ugb3IgYW55IHBvcnRpb24gb3IgZWxlbWVudCB0aGVyZW9mOyBhbmQKKworKGQpICAgICByZWxlYXNlLCBkaXN0cmlidXRlIG9yIG1ha2UgYXZhaWxhYmxlLCBlaXRoZXIgZ2VuZXJhbGx5IG9yIHRvIGFueSBzcGVjaWZpYyB0aGlyZC1wYXJ0eSwgYW55IG9mIHRoZSBmb3JlZ29pbmcgaW4gU291cmNlIENvZGUgb3IgYmluYXJ5IGZvcm0uCisKKzMuIExpY2Vuc2UgQ29uZGl0aW9ucy4gVGhlIGdyYW50IG9mIHRoZSBMaWNlbnNlIHVuZGVyIFNlY3Rpb24gMSBoZXJlb2YsIGFuZCB5b3VyIGV4ZXJjaXNlIG9mIGFsbCByaWdodHMgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHdpbGwgcmVtYWluIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYXMgd2VsbCBhcyB0byB0aGUgb3RoZXIgcHJvdmlzaW9ucyBoZXJlb2Y6CisKKyhhKSAgICAgQ29tcGxldGUgU291cmNlIENvZGUgZm9yIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG1hZGUgYnkgWW91IHRoYXQgY29udGFpbnMsIG9yIGRlcGVuZHMgZm9yIGl0cyBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IG9uLCB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgb3IgYW55IHBvcnRpb24gb3IgZWxlbWVudCB0aGVyZW9mLCBzaGFsbCBiZSBtYWRlIGZyZWVseSBhdmFpbGFibGUgdG8gYWxsIHVzZXJzIHRoZXJlb2Ygb24gdGVybXMgYW5kIGNvbmRpdGlvbnMgbm8gbW9yZSByZXN0cmljdGl2ZSwgYW5kIG5vIGxlc3MgZmF2b3JhYmxlIGZvciBhbnkgdXNlciAoaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHdpdGggcmVnYXJkIHRvIFNvdXJjZSBDb2RlIGF2YWlsYWJpbGl0eSBhbmQgcm95YWx0eS1mcmVlIHVzZSkgdGhhbiB0aG9zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCisoYikgICAgIEFueSBWYWx1ZS1BZGRlZCBTZXJ2aWNlcyB0aGF0IHlvdSBvZmZlciBvciBwcm92aWRlLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBpbiByZWxhdGlvbiB0byBhbnkgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gc2hhbGwgYmUgb2ZmZXJlZCBhbmQgcHJvdmlkZWQgb24gY29tbWVyY2lhbCB0ZXJtcyB0aGF0IGFyZSByZWFzb25hYmx5IGNvbW1lbnN1cmF0ZSB0byB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2Ygc3VjaCBWYWx1ZS1BZGRlZCBTZXJ2aWNlcy4gSW4gYWRkaXRpb24sIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvbiB3aGljaCBhbnkgc3VjaCBWYWx1ZSBBZGRlZCBTZXJ2aWNlcyBhcmUgc28gb2ZmZXJlZCBvciBwcm92aWRlZCBzaGFsbCBiZSBjb25zaXN0ZW50IHdpdGgsIGFuZCBzaGFsbCBmdWxseSBzdXBwb3J0LCB0aGUgaW50ZW50IGFuZCBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKyhjKSAgICAgQWxsIERvd25zdHJlYW0gRGlzdHJpYnV0aW9ucyBzaGFsbDoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpKSAgICAgICAgICAgIGluY2x1ZGUgYWxsIHBvcnRpb25zIGFuZCBlbGVtZW50cyBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSByZXF1aXJlZCB0byBidWlsZCB0aGUgU291cmNlIENvZGUgb2Ygc3VjaCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBpbnRvIGEgZnVsbHkgZnVuY3Rpb25hbCBtYWNoaW5lLWV4ZWN1dGFibGUgc3lzdGVtLCBvciBhZGRpdGlvbmFsIGJ1aWxkIHNjcmlwdHMgb3IgY29tcGFyYWJsZSBzb2Z0d2FyZSBuZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQgZm9yIHN1Y2ggcHVycG9zZXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlpKSAgICAgICAgICAgIGluY2x1ZGUsIGluIGVhY2ggZmlsZSBjb250YWluaW5nIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIHRoZSBmb2xsb3dpbmcgaWRlbnRpZnlpbmcgbGVnZW5kOiBUaGlzIGZpbGUgY29udGFpbnMgc29mdHdhcmUgdGhhdCBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB1bmRlciBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSAxLjAuIFVzZSBhbmQgZGlzdHJpYnV0aW9uIGhlcmVvZiBhcmUgc3ViamVjdCB0byB0aGUgcmVzdHJpY3Rpb25zIHNldCBmb3J0aCB0aGVyZWluLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlpaSkgICAgICAgICAgICBpbmNsdWRlIGFsbCBvdGhlciBjb3B5cmlnaHQgbm90aWNlcywgYXV0aG9yc2hpcCBjcmVkaXRzLCB3YXJyYW50eSBkaXNjbGFpbWVycyAoaW5jbHVkaW5nIHRoYXQgcHJvdmlkZWQgaW4gU2VjdGlvbiA2IGJlbG93KSwgbGVnZW5kcywgZG9jdW1lbnRhdGlvbiwgYW5ub3RhdGlvbnMgYW5kIGNvbW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBhcyBwcm92aWRlZCB0byBZb3UgaGVyZXVuZGVyOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl2KSAgICAgICAgICAgIGNvbnRhaW4gYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhlIGh0bWwgZmlsZSBuYW1lZCBmcmFtZXdvcnhfY29tbXVuaXR5X2ludml0YXRpb24uaHRtbCBpbmNsdWRlZCB3aXRoaW4gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgdGhhdCBhY2tub3dsZWRnZXMgbmV3IHVzZXJzIGFuZCBwcm92aWRlcyB0aGVtIHdpdGggaW5mb3JtYXRpb24gb24gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgY29tbXVuaXR5OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodikgICAgICAgICAgICBjb250YWluIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoZSB0ZXh0IGZpbGUgbmFtZWQgdGhlX2ZyYW1ld29yeF9saWNlbnNlLnR4dCBpbmNsdWRlZCB3aXRoaW4gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgdGhhdCBpbmNsdWRlcyBhIHRleHQgY29weSBvZiB0aGUgZm9ybSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50OyBhbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aSkgICAgICAgICAgICBwcm9taW5lbnRseSBkaXNwbGF5IHRvIGFueSB2aWV3ZXIgb3IgdXNlciBvZiB0aGUgU291cmNlIENvZGUgb2Ygc3VjaCBPcGVuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uLCBpbiB0aGUgcGxhY2UgYW5kIG1hbm5lciBub3JtYWxseSB1c2VkIGZvciBzdWNoIGRpc3BsYXlzLCB0aGUgZm9sbG93aW5nIGxlZ2VuZDoKKworU291cmNlIGNvZGUgbGljZW5zZWQgdW5kZXIgZnJvbSBUaGUgRnJhbWV3b3J4IENvbXBhbnkgaXMgY29udGFpbmVkIGhlcmVpbiwgYW5kIHN1Y2ggc291cmNlIGNvZGUgaGFzIGJlZW4gb2J0YWluZWQgZWl0aGVyIHVuZGVyIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlLCBvciBhbm90aGVyIGxpY2Vuc2UgZ3JhbnRlZCBieSBUaGUgRnJhbWV3b3J4IENvbXBhbnkuIFVzZSBhbmQgZGlzdHJpYnV0aW9uIGhlcmVvZiBpcyBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgcHJvdmlkZWQgaW4gdGhlIHJlbGV2YW50IHN1Y2ggbGljZW5zZSBhbmQgdG8gdGhlIGNvcHlyaWdodHMgb2YgdGhlIGxpY2Vuc29yIHRoZXJldW5kZXIuIEEgY29weSBvZiBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSBpcyBwcm92aWRlZCBpbiBhIGZpbGUgbmFtZWQgdGhlX2ZyYW1ld29yeF9saWNlbnNlLnR4dCBhbmQgaW5jbHVkZWQgaGVyZWluLCBhbmQgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGZvciBpbnNwZWN0aW9uIGF0IGh0dHA6Ly93d3cuZnJhbWV3b3J4LmNvbS4KKworNC4gUmVzdHJpY3Rpb25zIG9uIE9wZW4gRG93bnN0cmVhbSBEaXN0cmlidXRpb25zLiBFYWNoIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG1hZGUgYnkgWW91LCBhbmQgYnkgYW55IHBhcnR5IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgb2J0YWluaW5nIHJpZ2h0cyB0byB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aHJvdWdoIFlvdSwgc2hhbGwgYmUgbWFkZSBzdWJqZWN0IHRvIGEgbGljZW5zZSBncmFudCBvciBhZ3JlZW1lbnQgdG8gdGhlIGV4dGVudCBuZWNlc3Nhcnkgc28gdGhhdCBlYWNoIGRpc3RyaWJ1dGVlIHVuZGVyIHRoYXQgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBvbiByZS1kaXN0cmlidXRpb24gYW5kIHVzZSBhcyBhcmUgYmluZGluZyBvbiBZb3UgaGVyZXVuZGVyLiBZb3UgbWF5IHNhdGlzZnkgdGhpcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnQgZWl0aGVyIGJ5OgorCisoYSkgICAgIHJlcXVpcmluZyBhcyBhIGNvbmRpdGlvbiB0byBhbnkgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gbWFkZSBieSB5b3UsIG9yIGJ5IGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QgZGlzdHJpYnV0ZWUgb2YgWW91ciBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiAob3IgYW55IHBvcnRpb24gb3IgZWxlbWVudCB0aGVyZW9mKSwgdGhhdCBlYWNoIGRpc3RyaWJ1dGVlIHVuZGVyIHRoZSByZWxldmFudCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBvYnRhaW4gYSBkaXJlY3QgbGljZW5zZSAob24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhvc2UgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCkgZnJvbSBUaGUgRnJhbWV3b3J4IENvbXBhbnk7IG9yCisKKyhiKSAgICAgc3ViLWxpY2Vuc2luZyBhbGwgKGFuZCBub3QgbGVzcyB0aGFuIGFsbCkgb2YgWW91ciByaWdodHMgYW5kIG9ibGlnYXRpb25zIGhlcmV1bmRlciB0byB0aGF0IGRpc3RyaWJ1dGVlLCBpbmNsdWRpbmcgKHdpdGhvdXQgbGltaXRhdGlvbikgWW91ciBvYmxpZ2F0aW9uIHRvIHJlcXVpcmUgZGlzdHJpYnV0ZWVzIHRvIGJlIGJvdW5kIGJ5IGxpY2Vuc2UgcmVzdHJpY3Rpb25zIGFzIGNvbnRlbXBsYXRlZCBieSB0aGlzIFNlY3Rpb24gNCBhYm92ZS4KKworVGhlIEZyYW1ld29yeCBDb21wYW55IGhlcmVieSBncmFudHMgdG8geW91IGFsbCByaWdodHMgdG8gc3ViLWxpY2Vuc2UgeW91ciByaWdodHMgaGVyZXVuZGVyIGFzIG5lY2Vzc2FyeSB0byBmdWxseSBlZmZlY3QgdGhlIGludGVudCBhbmQgcHVycG9zZSBvZiB0aGlzIFNlY3Rpb24gNCBhYm92ZSwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgeW91ciByaWdodHMgYW5kIG9ibGlnYXRpb25zIGhlcmV1bmRlciBzaGFsbCBiZSB1bmFmZmVjdGVkIGJ5IGFueSBzdWNoIHN1YmxpY2Vuc2luZy4gSW4gYWRkaXRpb24sIFRoZSBGcmFtZXdvcnggQ29tcGFueSBleHByZXNzbHkgcmV0YWlucyBhbGwgcmlnaHRzIHRvIHRha2UgYWxsIGFwcHJvcHJpYXRlIGFjdGlvbiAoaW5jbHVkaW5nIGxlZ2FsIGFjdGlvbikgYWdhaW5zdCBhbnkgc3VjaCBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3ViLWxpY2Vuc2VlIHRvIGVuc3VyZSBpdHMgZnVsbCBjb21wbGlhbmNlIHdpdGggdGhlIGludGVudCBhbmQgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworNS4gSW50ZWxsZWN0dWFsIFByb3BlcnR5LiBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGhlcmVpbiwgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBwcmVzZXJ2ZXMgYW5kIHJlc3BlY3RzIFlvdXIgYW5kIFRoZSBGcmFtZXdvcnggQ29tcGFueXMgcmVzcGVjdGl2ZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBpbmNsdWRpbmcsIGluIHRoZSBjYXNlIG9mIFRoZSBGcmFtZXdvcnggQ29tcGFueSwgaXRzIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UuCisKKzYuIFdhcnJhbnR5IERpc2NsYWltZXIuIFRIRSBTT0ZUV0FSRSBMSUNFTlNFRCBIRVJFVU5ERVIgSVMgUFJPVklERUQgYGBBUyBJUy5gYCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBMSUNFTlNPUiBPRiBUSElTIFNPRlRXQVJFLCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBJTkNMVURJTkcgKEJVVCBOT1QgTElNSVRFRCBUTykgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKzcuIExpY2Vuc2UgVmlvbGF0aW9uLiBUaGUgTGljZW5zZSwgYW5kIGFsbCBvZiB5b3VyIHJpZ2h0cyB0aGVyZXVuZGVyLCBzaGFsbCBiZSBkZWVtZWQgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkIGFuZCB2b2lkIGFzIG9mIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG1hZGUgb3IgZmFjaWxpdGF0ZWQgYnkgWW91IHRoYXQgdmlvbGF0ZXMgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBzdXJ2aXZlIGFueSBzdWNoIHRlcm1pbmF0aW9uIGluIG9yZGVyIHRvIHJlbWVkeSB0aGUgZWZmZWN0cyBvZiBzdWNoIHZpb2xhdGlvbi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBiaW5kaW5nIG9uIHRoZSBsZWdhbCBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zIG9mIHRoZSBwYXJ0aWVzIGhlcmV0by4KKworWW91ciBhZ3JlZW1lbnQgdG8gdGhlIGZvcmVnb2luZyBhcyBvZiB0aGUgZGF0ZSBoZXJlb2YgaGFzIGJlZW4gZXZpZGVuY2VkIGJ5IHlvdXIgYWNjZXB0YW5jZSBvZiB0aGUgcmVsZXZhbnQgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGhlcmV1bmRlci4KKworKEMpIFRIRSBGUkFNRVdPUlggQ09NUEFOWSAyMDAzCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJlZVR5cGUgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyZWVUeXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDRkMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyZWVUeXBlCkBAIC0wLDAgKzEsMTcwIEBACisgICAgICAgICAgICAgICAgICAgIFRoZSBGcmVlVHlwZSBQcm9qZWN0IExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwNi1KYW4tMjcKKworICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMTk5Ni0yMDAyLCAyMDA2IGJ5CisgICAgICAgICAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnCisKKworCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCisgIFRoZSBGcmVlVHlwZSAgUHJvamVjdCBpcyBkaXN0cmlidXRlZCBpbiAgc2V2ZXJhbCBhcmNoaXZlIHBhY2thZ2VzOworICBzb21lIG9mIHRoZW0gbWF5IGNvbnRhaW4sIGluIGFkZGl0aW9uIHRvIHRoZSBGcmVlVHlwZSBmb250IGVuZ2luZSwKKyAgdmFyaW91cyB0b29scyBhbmQgIGNvbnRyaWJ1dGlvbnMgd2hpY2ggcmVseSBvbiwgb3IgIHJlbGF0ZSB0bywgdGhlCisgIEZyZWVUeXBlIFByb2plY3QuCisKKyAgVGhpcyAgbGljZW5zZSBhcHBsaWVzICB0byBhbGwgIGZpbGVzIGZvdW5kICBpbiBzdWNoICBwYWNrYWdlcywgYW5kCisgIHdoaWNoIGRvIG5vdCAgZmFsbCB1bmRlciB0aGVpciBvd24gZXhwbGljaXQgIGxpY2Vuc2UuICBUaGUgbGljZW5zZQorICBhZmZlY3RzICB0aHVzICB0aGUgIEZyZWVUeXBlICAgZm9udCAgZW5naW5lLCAgdGhlICB0ZXN0ICBwcm9ncmFtcywKKyAgZG9jdW1lbnRhdGlvbiBhbmQgbWFrZWZpbGVzLCBhdCB0aGUgdmVyeSBsZWFzdC4KKworICBUaGlzICBsaWNlbnNlICAgd2FzICBpbnNwaXJlZCAgYnkgIHRoZSAgQlNELCAgIEFydGlzdGljLCAgYW5kICBJSkcKKyAgKEluZGVwZW5kZW50IEpQRUcgIEdyb3VwKSBsaWNlbnNlcywgd2hpY2ggIGFsbCBlbmNvdXJhZ2UgaW5jbHVzaW9uCisgIGFuZCAgdXNlIG9mICBmcmVlICBzb2Z0d2FyZSBpbiAgY29tbWVyY2lhbCAgYW5kIGZyZWV3YXJlICBwcm9kdWN0cworICBhbGlrZS4gIEFzIGEgY29uc2VxdWVuY2UsIGl0cyBtYWluIHBvaW50cyBhcmUgdGhhdDoKKworICAgIG8gV2UgZG9uJ3QgcHJvbWlzZSB0aGF0IHRoaXMgc29mdHdhcmUgd29ya3MuIEhvd2V2ZXIsIHdlIHdpbGwgYmUKKyAgICAgIGludGVyZXN0ZWQgaW4gYW55IGtpbmQgb2YgYnVnIHJlcG9ydHMuIChgYXMgaXMnIGRpc3RyaWJ1dGlvbikKKworICAgIG8gWW91IGNhbiAgdXNlIHRoaXMgc29mdHdhcmUgZm9yIHdoYXRldmVyIHlvdSAgd2FudCwgaW4gcGFydHMgb3IKKyAgICAgIGZ1bGwgZm9ybSwgd2l0aG91dCBoYXZpbmcgdG8gcGF5IHVzLiAoYHJveWFsdHktZnJlZScgdXNhZ2UpCisKKyAgICBvIFlvdSBtYXkgbm90IHByZXRlbmQgdGhhdCAgeW91IHdyb3RlIHRoaXMgc29mdHdhcmUuICBJZiB5b3UgdXNlCisgICAgICBpdCwgb3IgIG9ubHkgcGFydHMgb2YgaXQsICBpbiBhIHByb2dyYW0sICB5b3UgbXVzdCBhY2tub3dsZWRnZQorICAgICAgc29tZXdoZXJlICBpbiAgeW91ciAgZG9jdW1lbnRhdGlvbiAgdGhhdCAgeW91ICBoYXZlICB1c2VkICB0aGUKKyAgICAgIEZyZWVUeXBlIGNvZGUuIChgY3JlZGl0cycpCisKKyAgV2UgIHNwZWNpZmljYWxseSAgcGVybWl0ICBhbmQgIGVuY291cmFnZSAgdGhlICBpbmNsdXNpb24gIG9mICB0aGlzCisgIHNvZnR3YXJlLCB3aXRoICBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsICBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLgorICBXZSAgZGlzY2xhaW0gIGFsbCB3YXJyYW50aWVzICBjb3ZlcmluZyAgVGhlICBGcmVlVHlwZSBQcm9qZWN0ICBhbmQKKyAgYXNzdW1lIG5vIGxpYWJpbGl0eSByZWxhdGVkIHRvIFRoZSBGcmVlVHlwZSBQcm9qZWN0LgorCisKKyAgRmluYWxseSwgIG1hbnkgIHBlb3BsZSAgYXNrZWQgIHVzICBmb3IgIGEgIHByZWZlcnJlZCAgZm9ybSAgZm9yICBhCisgIGNyZWRpdC9kaXNjbGFpbWVyIHRvIHVzZSBpbiBjb21wbGlhbmNlIHdpdGggdGhpcyBsaWNlbnNlLiAgV2UgdGh1cworICBlbmNvdXJhZ2UgeW91IHRvIHVzZSB0aGUgZm9sbG93aW5nIHRleHQ6CisKKyAgICIiIiAgCisgICAgUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgY29weXJpZ2h0IO+/vSA8eWVhcj4gVGhlIEZyZWVUeXBlCisgICAgUHJvamVjdCAod3d3LmZyZWV0eXBlLm9yZykuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgIiIiCisKKyAgUGxlYXNlIHJlcGxhY2UgPHllYXI+IHdpdGggdGhlIHZhbHVlIGZyb20gdGhlIEZyZWVUeXBlIHZlcnNpb24geW91CisgIGFjdHVhbGx5IHVzZS4KKworCitMZWdhbCBUZXJtcworPT09PT09PT09PT0KKworMC4gRGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tLS0tCisKKyAgVGhyb3VnaG91dCB0aGlzIGxpY2Vuc2UsICB0aGUgdGVybXMgYHBhY2thZ2UnLCBgRnJlZVR5cGUgUHJvamVjdCcsCisgIGFuZCAgYEZyZWVUeXBlICBhcmNoaXZlJyByZWZlciAgdG8gIHRoZSAgc2V0ICBvZiBmaWxlcyAgb3JpZ2luYWxseQorICBkaXN0cmlidXRlZCAgYnkgdGhlICBhdXRob3JzICAoRGF2aWQgVHVybmVyLCAgUm9iZXJ0IFdpbGhlbG0sICBhbmQKKyAgV2VybmVyIExlbWJlcmcpIGFzIHRoZSBgRnJlZVR5cGUgUHJvamVjdCcsIGJlIHRoZXkgbmFtZWQgYXMgYWxwaGEsCisgIGJldGEgb3IgZmluYWwgcmVsZWFzZS4KKworICBgWW91JyByZWZlcnMgdG8gIHRoZSBsaWNlbnNlZSwgb3IgcGVyc29uIHVzaW5nICB0aGUgcHJvamVjdCwgd2hlcmUKKyAgYHVzaW5nJyBpcyBhIGdlbmVyaWMgdGVybSBpbmNsdWRpbmcgY29tcGlsaW5nIHRoZSBwcm9qZWN0J3Mgc291cmNlCisgIGNvZGUgYXMgIHdlbGwgYXMgbGlua2luZyBpdCAgdG8gZm9ybSBhICBgcHJvZ3JhbScgb3IgYGV4ZWN1dGFibGUnLgorICBUaGlzICBwcm9ncmFtIGlzICByZWZlcnJlZCB0byAgYXMgIGBhIHByb2dyYW0gIHVzaW5nIHRoZSAgRnJlZVR5cGUKKyAgZW5naW5lJy4KKworICBUaGlzICBsaWNlbnNlIGFwcGxpZXMgIHRvIGFsbCAgZmlsZXMgZGlzdHJpYnV0ZWQgIGluICB0aGUgb3JpZ2luYWwKKyAgRnJlZVR5cGUgIFByb2plY3QsICAgaW5jbHVkaW5nICBhbGwgIHNvdXJjZSAgIGNvZGUsICBiaW5hcmllcyAgYW5kCisgIGRvY3VtZW50YXRpb24sICB1bmxlc3MgIG90aGVyd2lzZSAgc3RhdGVkICAgaW4gIHRoZSAgZmlsZSAgaW4gIGl0cworICBvcmlnaW5hbCwgdW5tb2RpZmllZCBmb3JtIGFzICBkaXN0cmlidXRlZCBpbiB0aGUgb3JpZ2luYWwgYXJjaGl2ZS4KKyAgSWYgeW91IGFyZSAgdW5zdXJlIHdoZXRoZXIgb3Igbm90IGEgcGFydGljdWxhciAgZmlsZSBpcyBjb3ZlcmVkIGJ5CisgIHRoaXMgbGljZW5zZSwgeW91IG11c3QgY29udGFjdCB1cyB0byB2ZXJpZnkgdGhpcy4KKworICBUaGUgRnJlZVR5cGUgIFByb2plY3QgaXMgY29weXJpZ2h0IChDKSAxOTk2LTIwMDAgIGJ5IERhdmlkIFR1cm5lciwKKyAgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQgZXhjZXB0IGFzCisgIHNwZWNpZmllZCBiZWxvdy4KKworMS4gTm8gV2FycmFudHkKKy0tLS0tLS0tLS0tLS0tCisKKyAgVEhFIEZSRUVUWVBFIFBST0pFQ1QgIElTIFBST1ZJREVEIGBBUyBJUycgV0lUSE9VVCAgV0FSUkFOVFkgT0YgQU5ZCisgIEtJTkQsIEVJVEhFUiAgRVhQUkVTUyBPUiBJTVBMSUVELCAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEIFRPLAorICBXQVJSQU5USUVTICBPRiAgTUVSQ0hBTlRBQklMSVRZICAgQU5EICBGSVRORVNTICBGT1IgIEEgIFBBUlRJQ1VMQVIKKyAgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFdJTEwgQU5ZIE9GIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgIEJFIExJQUJMRSAgRk9SIEFOWSBEQU1BR0VTIENBVVNFRCAgQlkgVEhFIFVTRSBPUiAgVEhFIElOQUJJTElUWSBUTworICBVU0UsIE9GIFRIRSBGUkVFVFlQRSBQUk9KRUNULgorCisyLiBSZWRpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzICBsaWNlbnNlICBncmFudHMgIGEgIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCAgcGVycGV0dWFsICBhbmQKKyAgaXJyZXZvY2FibGUgcmlnaHQgIGFuZCBsaWNlbnNlIHRvIHVzZSwgIGV4ZWN1dGUsIHBlcmZvcm0sIGNvbXBpbGUsCisgIGRpc3BsYXksICBjb3B5LCAgIGNyZWF0ZSAgZGVyaXZhdGl2ZSAgd29ya3MgICBvZiwgIGRpc3RyaWJ1dGUgIGFuZAorICBzdWJsaWNlbnNlIHRoZSAgRnJlZVR5cGUgUHJvamVjdCAoaW4gIGJvdGggc291cmNlIGFuZCAgb2JqZWN0IGNvZGUKKyAgZm9ybXMpICBhbmQgIGRlcml2YXRpdmUgd29ya3MgIHRoZXJlb2YgIGZvciAgYW55ICBwdXJwb3NlOyBhbmQgIHRvCisgIGF1dGhvcml6ZSBvdGhlcnMgIHRvIGV4ZXJjaXNlICBzb21lIG9yIGFsbCAgb2YgdGhlICByaWdodHMgZ3JhbnRlZAorICBoZXJlaW4sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgbyBSZWRpc3RyaWJ1dGlvbiBvZiAgc291cmNlIGNvZGUgIG11c3QgcmV0YWluIHRoaXMgIGxpY2Vuc2UgZmlsZQorICAgICAgKGBGVEwuVFhUJykgdW5hbHRlcmVkOyBhbnkgIGFkZGl0aW9ucywgZGVsZXRpb25zIG9yIGNoYW5nZXMgdG8KKyAgICAgIHRoZSBvcmlnaW5hbCAgZmlsZXMgbXVzdCBiZSBjbGVhcmx5ICBpbmRpY2F0ZWQgaW4gYWNjb21wYW55aW5nCisgICAgICBkb2N1bWVudGF0aW9uLiAgIFRoZSAgY29weXJpZ2h0ICAgbm90aWNlcyAgb2YgIHRoZSAgdW5hbHRlcmVkLAorICAgICAgb3JpZ2luYWwgIGZpbGVzIG11c3QgIGJlICBwcmVzZXJ2ZWQgaW4gIGFsbCAgY29waWVzIG9mICBzb3VyY2UKKyAgICAgIGZpbGVzLgorCisgICAgbyBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHByb3ZpZGUgYSAgZGlzY2xhaW1lciAgdGhhdAorICAgICAgc3RhdGVzICB0aGF0ICB0aGUgc29mdHdhcmUgaXMgYmFzZWQgaW4gcGFydCBvZiB0aGUgd29yayBvZiB0aGUKKyAgICAgIEZyZWVUeXBlIFRlYW0sICBpbiAgdGhlICBkaXN0cmlidXRpb24gIGRvY3VtZW50YXRpb24uICBXZSBhbHNvCisgICAgICBlbmNvdXJhZ2UgeW91IHRvIHB1dCBhbiBVUkwgdG8gdGhlIEZyZWVUeXBlIHdlYiBwYWdlICBpbiAgeW91cgorICAgICAgZG9jdW1lbnRhdGlvbiwgdGhvdWdoIHRoaXMgaXNuJ3QgbWFuZGF0b3J5LgorCisgIFRoZXNlIGNvbmRpdGlvbnMgIGFwcGx5IHRvIGFueSAgc29mdHdhcmUgZGVyaXZlZCBmcm9tIG9yICBiYXNlZCBvbgorICB0aGUgRnJlZVR5cGUgUHJvamVjdCwgIG5vdCBqdXN0IHRoZSB1bm1vZGlmaWVkIGZpbGVzLiAgIElmIHlvdSB1c2UKKyAgb3VyIHdvcmssIHlvdSAgbXVzdCBhY2tub3dsZWRnZSB1cy4gIEhvd2V2ZXIsIG5vICBmZWUgbmVlZCBiZSBwYWlkCisgIHRvIHVzLgorCiszLiBBZHZlcnRpc2luZworLS0tLS0tLS0tLS0tLS0KKworICBOZWl0aGVyIHRoZSAgRnJlZVR5cGUgYXV0aG9ycyBhbmQgIGNvbnRyaWJ1dG9ycyBub3IgeW91ICBzaGFsbCB1c2UKKyAgdGhlIG5hbWUgb2YgdGhlICBvdGhlciBmb3IgY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcsIG9yIHByb21vdGlvbmFsCisgIHB1cnBvc2VzIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgIFdlIHN1Z2dlc3QsICBidXQgZG8gbm90IHJlcXVpcmUsIHRoYXQgIHlvdSB1c2Ugb25lIG9yICBtb3JlIG9mIHRoZQorICBmb2xsb3dpbmcgcGhyYXNlcyB0byByZWZlciAgdG8gdGhpcyBzb2Z0d2FyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24KKyAgb3IgYWR2ZXJ0aXNpbmcgIG1hdGVyaWFsczogYEZyZWVUeXBlIFByb2plY3QnLCAgYEZyZWVUeXBlIEVuZ2luZScsCisgIGBGcmVlVHlwZSBsaWJyYXJ5Jywgb3IgYEZyZWVUeXBlIERpc3RyaWJ1dGlvbicuCisKKyAgQXMgIHlvdSBoYXZlICBub3Qgc2lnbmVkICB0aGlzIGxpY2Vuc2UsICB5b3UgYXJlICBub3QgIHJlcXVpcmVkIHRvCisgIGFjY2VwdCAgaXQuICAgSG93ZXZlciwgIGFzICB0aGUgRnJlZVR5cGUgIFByb2plY3QgIGlzICBjb3B5cmlnaHRlZAorICBtYXRlcmlhbCwgb25seSAgdGhpcyBsaWNlbnNlLCBvciAgYW5vdGhlciBvbmUgY29udHJhY3RlZCAgd2l0aCB0aGUKKyAgYXV0aG9ycywgZ3JhbnRzIHlvdSAgdGhlIHJpZ2h0IHRvIHVzZSwgZGlzdHJpYnV0ZSwgIGFuZCBtb2RpZnkgaXQuCisgIFRoZXJlZm9yZSwgIGJ5ICB1c2luZywgIGRpc3RyaWJ1dGluZywgIG9yIG1vZGlmeWluZyAgdGhlICBGcmVlVHlwZQorICBQcm9qZWN0LCB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGFsbCB0aGUgdGVybXMKKyAgb2YgdGhpcyBsaWNlbnNlLgorCis0LiBDb250YWN0cworLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgdHdvIG1haWxpbmcgbGlzdHMgcmVsYXRlZCB0byBGcmVlVHlwZToKKworICAgIG8gZnJlZXR5cGVAbm9uZ251Lm9yZworCisgICAgICBEaXNjdXNzZXMgZ2VuZXJhbCB1c2UgYW5kIGFwcGxpY2F0aW9ucyBvZiBGcmVlVHlwZSwgYXMgd2VsbCBhcworICAgICAgZnV0dXJlIGFuZCAgd2FudGVkIGFkZGl0aW9ucyB0byB0aGUgIGxpYnJhcnkgYW5kIGRpc3RyaWJ1dGlvbi4KKyAgICAgIElmICB5b3UgYXJlIGxvb2tpbmcgIGZvciBzdXBwb3J0LCAgc3RhcnQgaW4gIHRoaXMgbGlzdCAgaWYgeW91CisgICAgICBoYXZlbid0IGZvdW5kIGFueXRoaW5nIHRvIGhlbHAgeW91IGluIHRoZSBkb2N1bWVudGF0aW9uLgorCisgICAgbyBmcmVldHlwZS1kZXZlbEBub25nbnUub3JnCisKKyAgICAgIERpc2N1c3NlcyBidWdzLCAgYXMgd2VsbCAgYXMgZW5naW5lIGludGVybmFscywgIGRlc2lnbiBpc3N1ZXMsCisgICAgICBzcGVjaWZpYyBsaWNlbnNlcywgcG9ydGluZywgZXRjLgorCisgIE91ciBob21lIHBhZ2UgY2FuIGJlIGZvdW5kIGF0CisKKyAgICBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZworCisKKy0tLSBlbmQgb2YgRlRMLlRYVCAtLS0KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwZmUxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjEKQEAgLTAsMCArMSwzOTcgQEAKKwkJR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCisJCSAgVmVyc2lvbiAxLjIsIE5vdmVtYmVyIDIwMDIKKworCisgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAwMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKworMC4gUFJFQU1CTEUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50ICJmcmVlIiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuCitTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5Cit0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZQorZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKK1RoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgImNvcHlsZWZ0Iiwgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCitXZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yIGZyZWUKK3NvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUKK3Byb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHRoZQorc29mdHdhcmUgZG9lcy4gIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgbWFudWFsczsKK2l0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzIG9mIHN1YmplY3QgbWF0dGVyIG9yCit3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UKK3ByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKworCisxLiBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZSBncmFudHMgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQKK3dvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZSAiRG9jdW1lbnQiLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhCitsaWNlbnNlZSwgYW5kIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gIFlvdSBhY2NlcHQgdGhlIGxpY2Vuc2UgaWYgeW91Citjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhIHdheSByZXF1aXJpbmcgcGVybWlzc2lvbgordW5kZXIgY29weXJpZ2h0IGxhdy4KKworQSAiTW9kaWZpZWQgVmVyc2lvbiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitBICJTZWNvbmRhcnkgU2VjdGlvbiIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mCit0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudCdzIG92ZXJhbGwgc3ViamVjdAorKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsIGRpcmVjdGx5Cit3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluIHBhcnQgYQordGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluIGFueQorbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCitUaGUgIkludmFyaWFudCBTZWN0aW9ucyIgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlIHRpdGxlcworYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZQordGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIGEKK3NlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIFNlY29uZGFyeSB0aGVuIGl0IGlzIG5vdAorYWxsb3dlZCB0byBiZSBkZXNpZ25hdGVkIGFzIEludmFyaWFudC4gIFRoZSBEb2N1bWVudCBtYXkgY29udGFpbiB6ZXJvCitJbnZhcmlhbnQgU2VjdGlvbnMuICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3QgaWRlbnRpZnkgYW55IEludmFyaWFudAorU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS4KKworVGhlICJDb3ZlciBUZXh0cyIgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisKK0EgIlRyYW5zcGFyZW50IiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4KK0FuIGltYWdlIGZvcm1hdCBpcyBub3QgVHJhbnNwYXJlbnQgaWYgdXNlZCBmb3IgYW55IHN1YnN0YW50aWFsIGFtb3VudAorb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCAiVHJhbnNwYXJlbnQiIGlzIGNhbGxlZCAiT3BhcXVlIi4KKworRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KK0FTQ0lJIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQgZm9ybWF0LCBTR01MCitvciBYTUwgdXNpbmcgYSBwdWJsaWNseSBhdmFpbGFibGUgRFRELCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUKK0hUTUwsIFBvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcyBvZgordHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIFBORywgWENGIGFuZCBKUEcuICBPcGFxdWUgZm9ybWF0cworaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5Citwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFREIGFuZC9vcgorcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKK21hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIHByb2R1Y2VkIGJ5IHNvbWUgd29yZAorcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKK1RoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAorcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbAordGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gIEZvciB3b3JrcyBpbgorZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAiVGl0bGUgUGFnZSIgbWVhbnMKK3RoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmsncyB0aXRsZSwKK3ByZWNlZGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIHRoZSB0ZXh0LgorCitBIHNlY3Rpb24gIkVudGl0bGVkIFhZWiIgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsICJFbmRvcnNlbWVudHMiLCBvciAiSGlzdG9yeSIuKSAgVG8gIlByZXNlcnZlIHRoZSBUaXRsZSIKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gIkVudGl0bGVkIFhZWiIgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaAorc3RhdGVzIHRoYXQgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50LiAgVGhlc2UgV2FycmFudHkKK0Rpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzCitMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgoraW1wbGljYXRpb24gdGhhdCB0aGVzZSBXYXJyYW50eSBEaXNjbGFpbWVycyBtYXkgaGF2ZSBpcyB2b2lkIGFuZCBoYXMKK25vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuCisKKworMi4gVkVSQkFUSU0gQ09QWUlORworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzCit0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubyBvdGhlcgorY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IHVzZQordGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlcgorY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLCB5b3UgbWF5IGFjY2VwdAorY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuICBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaAorbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdyB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9uIDMuCisKK1lvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworCiszLiBDT1BZSU5HIElOIFFVQU5USVRZCisKK0lmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seSBoYXZlCitwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kIHRoZQorRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUKK2NvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uCitDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZQordGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQgc2F0aXNmeSB0aGVzZSBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZAorYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KKworSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCitJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuCitJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywKK3doZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUKK3RoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCitsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuCitPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQKK2VkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisKKzQuIE1PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0EuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorICAgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyAgICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorICAgb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgorICAgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KK0IuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKKyAgIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKKyAgIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKKyAgIHVubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KK0MuIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCisgICBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCitFLiBBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCisgICBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCitGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKKyAgIGdpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCitHLiBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworICAgYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlLgorSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCitJLiBQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIsIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAorICAgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorICAgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiIGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCisgICBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorICAgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKKyAgIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCisgICBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAiSGlzdG9yeSIgc2VjdGlvbi4KKyAgIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKKyAgIGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorICAgcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAorICAgUHJlc2VydmUgdGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsCisgICB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMKKyAgIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworICAgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KKyAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitOLiBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIgorICAgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCitPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworWW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKK1RoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisKKzUuIENPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJIaXN0b3J5IgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCisiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMKK0VudGl0bGVkICJFbmRvcnNlbWVudHMiLgorCisKKzYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCitZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMKK3JlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwgY29waWVzIG9mIHRoaXMKK0xpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weSB0aGF0IGlzIGluY2x1ZGVkIGluCit0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yCit2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuCisKK1lvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQgZGlzdHJpYnV0ZQoraXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhIGNvcHkgb2YgdGhpcworTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbAorb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdCBkb2N1bWVudC4KKworCis3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTCisKK0EgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiAiYWdncmVnYXRlIiBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LgorV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoIGFyZSBub3QgdGhlbXNlbHZlcworZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisKK0lmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uCitPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBwcmludGVkIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIHdob2xlCithZ2dyZWdhdGUuCisKKworOC4gVFJBTlNMQVRJT04KKworVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CitkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4KK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKK0lmIGEgc2VjdGlvbiBpbiB0aGUgRG9jdW1lbnQgaXMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgb3IgIkhpc3RvcnkiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUKK2l0cyBUaXRsZSAoc2VjdGlvbiAxKSB3aWxsIHR5cGljYWxseSByZXF1aXJlIGNoYW5naW5nIHRoZSBhY3R1YWwKK3RpdGxlLgorCisKKzkuIFRFUk1JTkFUSU9OCisKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgZXhjZXB0CithcyBleHByZXNzbHkgcHJvdmlkZWQgZm9yIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBvdGhlciBhdHRlbXB0IHRvCitjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaXMgdm9pZCwgYW5kIHdpbGwKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsCitwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzCitMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworCisxMC4gRlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMKK29mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCitodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvLgorCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworCitBRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzCisKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworICAgIENvcHlyaWdodCAoYykgIFlFQVIgIFlPVVIgTkFNRS4KKyAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjIKKyAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyIFRleHRzLgorICAgIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VCisgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgIndpdGguLi5UZXh0cy4iIGxpbmUgd2l0aCB0aGlzOgorCisgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIExJU1QgVEhFSVIgVElUTEVTLCB3aXRoIHRoZQorICAgIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIExJU1QuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKworSWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit0byBwZXJtaXQgdGhlaXIgdXNlIGluIGZyZWUgc29mdHdhcmUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4yIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzg3MmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMgpAQCAtMCwwICsxLDM5OSBAQAorCisgICAgICAgICAgICAgICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCisgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMiwgTm92ZW1iZXIgMjAwMgorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCiswLiBQUkVBTUJMRQorCitUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICJEb2N1bWVudCIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YKK3RoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50YHMgb3ZlcmFsbCBzdWJqZWN0Cisob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkKK3dpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCit0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CittYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mCit0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gIE9wYXF1ZSBmb3JtYXRzCitpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkKK3Byb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yCitwcm9jZXNzaW5nIHRvb2xzIGFyZSBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZQorbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCitwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29ya2BzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK0Egc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgIkVuZG9yc2VtZW50cyIsIG9yICJIaXN0b3J5Ii4pICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIgorb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCitUaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisKKworNC4gTU9ESUZJQ0FUSU9OUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0CisgICBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworICAgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCisgICBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCisgICBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorQi4gTGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworICAgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorICAgRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAorICAgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50YHMgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCisgICB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCisgICBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgorICAgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCisgICBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKKyAgIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitKLiBQcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCisgICBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQorICAgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKKyAgIGl0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorICAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorICAgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCisgICBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitLLiBGb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBQcmVzZXJ2ZSB0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwKKyAgIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cworICAgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCitMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCisgICB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCisgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCitNLiBEZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuICBTdWNoIGEgc2VjdGlvbgorICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KK04uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICJFbmRvcnNlbWVudHMiCisgICBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KK08uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb25gcyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKworNS4gQ09NQklOSU5HIERPQ1VNRU5UUworCitZb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK1RoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkhpc3RvcnkiCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91IG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucworRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuCisKKworNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb25gcyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudGBzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQKK2FzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IG90aGVyIGF0dGVtcHQgdG8KK2NvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwKK3BhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMKK0xpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucworb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMgorICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIgVGV4dHMuCisgICAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKKyAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlCisgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCitJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxMWE0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjMKQEAgLTAsMCArMSw0NTMgQEAKKworCisgICAgICAgICAgICAgICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCisgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4zLCAzIE5vdmVtYmVyIDIwMDgKKworCisgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA8aHR0cDovL2ZzZi5vcmcvPgorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCiswLiBQUkVBTUJMRQorCitUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICJEb2N1bWVudCIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YKK3RoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50YHMgb3ZlcmFsbAorc3ViamVjdCAob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwKK2RpcmVjdGx5IHdpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4KK3BhcnQgYSB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4KK2FueSBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mCit0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gIE9wYXF1ZSBmb3JtYXRzCitpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkKK3Byb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yCitwcm9jZXNzaW5nIHRvb2xzIGFyZSBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZQorbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCitwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29ya2BzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK1RoZSAicHVibGlzaGVyIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIGNvcGllcyBvZgordGhlIERvY3VtZW50IHRvIHRoZSBwdWJsaWMuCisKK0Egc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgIkVuZG9yc2VtZW50cyIsIG9yICJIaXN0b3J5Ii4pICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIgorb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCitUaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworMi4gVkVSQkFUSU0gQ09QWUlORworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzCit0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubworb3RoZXIgY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IHVzZQordGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlcgorY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLCB5b3UgbWF5IGFjY2VwdAorY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuICBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaAorbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdyB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9uIDMuCisKK1lvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworCiszLiBDT1BZSU5HIElOIFFVQU5USVRZCisKK0lmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seSBoYXZlCitwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kIHRoZQorRG9jdW1lbnRgcyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUKK2NvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uCitDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZQordGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQgc2F0aXNmeSB0aGVzZSBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZAorYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KKworSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCitJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuCitJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywKK3doZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUKK3RoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCitsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuCitPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQKK2VkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvCitnaXZlIHRoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlCitEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJT05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisgICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnRgcyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbmBzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiSGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIKK2RvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsCitjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkKK3RoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMKK29mIHRoaXMgTGljZW5zZSBmb3IgdmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsCitvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZAorZGlzdHJpYnV0ZSBpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEKK2NvcHkgb2YgdGhpcyBMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzCitMaWNlbnNlIGluIGFsbCBvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0Citkb2N1bWVudC4KKworCis3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTCisKK0EgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiAiYWdncmVnYXRlIiBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uYHMgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LgorV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoIGFyZSBub3QgdGhlbXNlbHZlcworZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisKK0lmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnRgcyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uCitPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBwcmludGVkIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIHdob2xlCithZ2dyZWdhdGUuCisKKworOC4gVFJBTlNMQVRJT04KKworVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CitkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4KK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKK0lmIGEgc2VjdGlvbiBpbiB0aGUgRG9jdW1lbnQgaXMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgb3IgIkhpc3RvcnkiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUKK2l0cyBUaXRsZSAoc2VjdGlvbiAxKSB3aWxsIHR5cGljYWxseSByZXF1aXJlIGNoYW5naW5nIHRoZSBhY3R1YWwKK3RpdGxlLgorCisKKzkuIFRFUk1JTkFUSU9OCisKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQKK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgaXQgaXMgdm9pZCwgYW5kCit3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKworSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZQorZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LAordW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5Cit0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIKK2ZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8KKzYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1Rlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHJlY2VpcHQgb2YgYSBjb3B5IG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBzYW1lIG1hdGVyaWFsIGRvZXMKK25vdCBnaXZlIHlvdSBhbnkgcmlnaHRzIHRvIHVzZSBpdC4KKworCisxMC4gRlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMgb2YgdGhlCitHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucword2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbgorZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCitodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvLgorCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudAorc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzCitMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5YHMgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEKK3ZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlCitEb2N1bWVudC4KKworMTEuIFJFTElDRU5TSU5HCisKKyJNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24gU2l0ZSIgKG9yICJNTUMgU2l0ZSIpIG1lYW5zIGFueQorV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KK3Byb3ZpZGVzIHByb21pbmVudCBmYWNpbGl0aWVzIGZvciBhbnlib2R5IHRvIGVkaXQgdGhvc2Ugd29ya3MuICBBCitwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiAgQQorIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiIgKG9yICJNTUMiKSBjb250YWluZWQgaW4gdGhlIHNpdGUKK21lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DIHNpdGUuCisKKyJDQy1CWS1TQSIgbWVhbnMgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMy4wIAorbGljZW5zZSBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucyBDb3Jwb3JhdGlvbiwgYSBub3QtZm9yLXByb2ZpdCAKK2NvcnBvcmF0aW9uIHdpdGggYSBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgaW4gU2FuIEZyYW5jaXNjbywgCitDYWxpZm9ybmlhLCBhcyB3ZWxsIGFzIGZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UgCitwdWJsaXNoZWQgYnkgdGhhdCBzYW1lIG9yZ2FuaXphdGlvbi4KKworIkluY29ycG9yYXRlIiBtZWFucyB0byBwdWJsaXNoIG9yIHJlcHVibGlzaCBhIERvY3VtZW50LCBpbiB3aG9sZSBvciBpbiAKK3BhcnQsIGFzIHBhcnQgb2YgYW5vdGhlciBEb2N1bWVudC4KKworQW4gTU1DIGlzICJlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmciIGlmIGl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgCitMaWNlbnNlLCBhbmQgaWYgYWxsIHdvcmtzIHRoYXQgd2VyZSBmaXJzdCBwdWJsaXNoZWQgdW5kZXIgdGhpcyBMaWNlbnNlIAorc29tZXdoZXJlIG90aGVyIHRoYW4gdGhpcyBNTUMsIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIGluIHdob2xlIG9yIAoraW4gcGFydCBpbnRvIHRoZSBNTUMsICgxKSBoYWQgbm8gY292ZXIgdGV4dHMgb3IgaW52YXJpYW50IHNlY3Rpb25zLCBhbmQgCisoMikgd2VyZSB0aHVzIGluY29ycG9yYXRlZCBwcmlvciB0byBOb3ZlbWJlciAxLCAyMDA4LgorCitUaGUgb3BlcmF0b3Igb2YgYW4gTU1DIFNpdGUgbWF5IHJlcHVibGlzaCBhbiBNTUMgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIgVGV4dHMuCisgICAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKKyAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlCisgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCitJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGVmOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0xLjAKQEAgLTAsMCArMSwyNTIgQEAKKworR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMQorCisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEsIEZlYnJ1YXJ5IDE5ODkKKworIENvcHlyaWdodCAoQykgMTk4OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyB0cnkgdG8ga2VlcCB1c2VycworYXQgdGhlIG1lcmN5IG9mIHRob3NlIGNvbXBhbmllcy4gIEJ5IGNvbnRyYXN0LCBvdXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uYHMKK3NvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4KK1lvdSBjYW4gdXNlIGl0IGZvciB5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBTcGVjaWZpY2FsbHksIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIG1ha2UKK3N1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBnaXZlIGF3YXkgb3Igc2VsbCBjb3BpZXMgb2YgZnJlZQorc29mdHdhcmUsIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwKK3RoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUKK3Byb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgYSBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3QgdGVsbCB0aGVtIHRoZWlyIHJpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3JgcyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzYCByZXB1dGF0aW9ucy4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2gKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlCisiUHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZAorb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgd29yayBjb250YWluaW5nIHRoZQorUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMuICBFYWNoCitsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbWBzIHNvdXJjZQorY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQKK2Rpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55CitvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZgordHJhbnNmZXJyaW5nIGEgY29weS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mCitpdCwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGgKKzEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQKKyAgICB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisgICAgYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdAorICAgIGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiwgZWl0aGVyCisgICAgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwKKyAgICB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGV4Y2VwdAorICAgIHRoYXQgeW91IG1heSBjaG9vc2UgdG8gZ3JhbnQgd2FycmFudHkgcHJvdGVjdGlvbiB0byBzb21lIG9yIGFsbAorICAgIHRoaXJkIHBhcnRpZXMsIGF0IHlvdXIgb3B0aW9uKS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkgd2hlbgorICAgIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZQorICAgIGluIHRoZSBzaW1wbGVzdCBhbmQgbW9zdCB1c3VhbCB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEgbm90aWNlCisgICAgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUgYQorICAgIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlCisgICAgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgR2VuZXJhbAorICAgIFB1YmxpYyBMaWNlbnNlLgorCisgICAgZCkgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEKKyAgICBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluCisgICAgZXhjaGFuZ2UgZm9yIGEgZmVlLgorCitNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgaW5kZXBlbmRlbnQgd29yayB3aXRoIHRoZSBQcm9ncmFtIChvciBpdHMKK2Rlcml2YXRpdmUpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nCit0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhlc2UgdGVybXMuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZgoraXQsIHVuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYikgYWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHkgZnJlZSAoZXhjZXB0IGZvciBhIG5vbWluYWwgY2hhcmdlCisgICAgZm9yIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbikgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGMpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gd2hlcmUgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIGFsb25lLikKKworU291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZworbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWluczsgYnV0LCBhcyBhIHNwZWNpYWwKK2V4Y2VwdGlvbiwgaXQgbmVlZCBub3QgaW5jbHVkZSBzb3VyY2UgY29kZSBmb3IgbW9kdWxlcyB3aGljaCBhcmUgc3RhbmRhcmQKK2xpYnJhcmllcyB0aGF0IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZQorZmlsZSBydW5zLCBvciBmb3Igc3RhbmRhcmQgaGVhZGVyIGZpbGVzIG9yIGRlZmluaXRpb25zIGZpbGVzIHRoYXQKK2FjY29tcGFueSB0aGF0IG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIHRoZQorUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0FueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIKK3RoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHRvIHVzZQordGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZAorY29waWVzLCBvciByaWdodHMgdG8gdXNlIGNvcGllcywgZnJvbSB5b3UgdW5kZXIgdGhpcyBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMKK3JlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gQnkgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtKSB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgbGljZW5zZSB0byBkbyBzbywKK2FuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsCitsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlCit0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlCityZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorCisgIDcuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGUgbGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgOC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKKworICA5LiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTAuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKyAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICAgICAgIEFwcGVuZGl4OiBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gaHVtYW5pdHksIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UKK3Rlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0IHRvCithdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleQordGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbWBzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgMTl5eSAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDEsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOXh4IG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHdgLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgY2AgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgd2AgYW5kIGBzaG93IGNgIHNob3VsZCBzaG93IHRoZQorYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZQorY29tbWFuZHMgeW91IHVzZSBtYXkgYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHdgIGFuZCBgc2hvdworY2A7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91cgorcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgcHJvZ3JhbSBgR25vbW92aXNpb25gIChhIHByb2dyYW0gdG8gZGlyZWN0IGNvbXBpbGVycyB0byBtYWtlIHBhc3NlcworICBhdCBhc3NlbWJsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdGBzIGFsbCB0aGVyZSBpcyB0byBpdCEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTItd2l0aC1iaXNvbi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzNDI3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTItd2l0aC1iaXNvbi1leGNlcHRpb24KQEAgLTAsMCArMSw3IEBACisKK2luc2VydCBHUEwgdjIgdGV4dCBoZXJlCisKK0Jpc29uIEV4Y2VwdGlvbgorQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5zIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc25gdCBpdHNlbGYgYSBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZiBhcyBhIHBhcnNlciBza2VsZXRvbi4gQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uCitUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluIHZlcnNpb24gMi4yIG9mIEJpc29uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1YWJiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMApAQCAtMCwwICsxLDEzMiBAQAorCitHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDIsIEp1bmUgMTk5MQorCitDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQQorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorUHJlYW1ibGUKKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uYHMgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LiAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuIGFwcGx5IGl0IHRvIHlvdXIgcHJvZ3JhbXMsIHRvby4KKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK1dlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworQWxzbywgZm9yIGVhY2ggYXV0aG9yYHMgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwgYXV0aG9yc2AgcmVwdXRhdGlvbnMuCisKK0ZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZSBwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlIHByb2dyYW0gcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZWBzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCiswLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoZSAiUHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtYHMgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCitiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK2MpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaCBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0IGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0gd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKzMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCithKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2IpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCitjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlciB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuIChUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCis0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCis2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS4KKworNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCis4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworTk8gV0FSUkFOVFkKKworMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKzEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKK1RvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworb25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbWBzIG5hbWUgYW5kIGFuIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLgorQ29weXJpZ2h0IChDKSB5eXl5ICBuYW1lIG9mIGF1dGhvcgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKK29mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKK0dub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscwordHlwZSBgc2hvdyB3YC4gIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZQordG8gcmVkaXN0cmlidXRlIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjYCAKK2ZvciBkZXRhaWxzLgorVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3YCBhbmQgYHNob3cgY2Agc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgd2AgYW5kIGBzaG93IGNgOyB0aGV5IGNvdWxkIGV2ZW4gYmUgbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKK1lveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQKK2ludGVyZXN0IGluIHRoZSBwcm9ncmFtIGBHbm9tb3Zpc2lvbmAKKyh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIAorYnkgSmFtZXMgSGFja2VyLgorCitzaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTg5CitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24gYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGRlMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMTcgQEAKKworaW5zZXJ0IEdQTCB2MiB0ZXh0IGhlcmUKKworR0NDIExpbmtpbmcgRXhjZXB0aW9uCitJbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcyB5b3UgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gbGluayB0aGUgY29tcGlsZWQgdmVyc2lvbgorb2YgdGhpcyBmaWxlIGludG8gY29tYmluYXRpb25zIHdpdGggb3RoZXIgcHJvZ3JhbXMsIGFuZCB0byBkaXN0cmlidXRlIHRob3NlCitjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24gY29taW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIGZpbGUuIChUaGUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgcmVzdHJpY3Rpb25zIGRvIGFwcGx5IGluIG90aGVyIHJlc3BlY3RzOyBmb3IgZXhhbXBsZSwKK3RoZXkgY292ZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlLCBhbmQgZGlzdHJpYnV0aW9uIHdoZW4gbm90IGxpbmtlZCBpbnRvIGEKK2NvbWJpbmUgZXhlY3V0YWJsZS4pCisKKworCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1PcGVuU1NMLWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODZjNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1PcGVuU1NMLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDI4NSBAQAorCitHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDIsIEp1bmUgMTk5MQorCitDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQQorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorUHJlYW1ibGUKKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uYHMgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LiAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuIGFwcGx5IGl0IHRvIHlvdXIgcHJvZ3JhbXMsIHRvby4KKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK1dlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworQWxzbywgZm9yIGVhY2ggYXV0aG9yYHMgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwgYXV0aG9yc2AgcmVwdXRhdGlvbnMuCisKK0ZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZSBwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlIHByb2dyYW0gcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZWBzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCiswLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoZSAiUHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtYHMgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCitiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK2MpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaCBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0IGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0gd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKzMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCithKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2IpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCitjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlciB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuIChUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCis0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCis2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS4KKworNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCis4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworTk8gV0FSUkFOVFkKKworMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKzEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKK1RvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworb25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbWBzIG5hbWUgYW5kIGFuIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLgorQ29weXJpZ2h0IChDKSB5eXl5ICBuYW1lIG9mIGF1dGhvcgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKK29mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKK0dub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscwordHlwZSBgc2hvdyB3YC4gIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZQordG8gcmVkaXN0cmlidXRlIGl0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjYCAKK2ZvciBkZXRhaWxzLgorVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3YCBhbmQgYHNob3cgY2Agc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgd2AgYW5kIGBzaG93IGNgOyB0aGV5IGNvdWxkIGV2ZW4gYmUgbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKK1lveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQKK2ludGVyZXN0IGluIHRoZSBwcm9ncmFtIGBHbm9tb3Zpc2lvbmAKKyh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIAorYnkgSmFtZXMgSGFja2VyLgorCitzaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTg5CitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCisKKworSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitnaXZlcyBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlIGNvZGUgb2YgdGhpcyBwcm9ncmFtIHdpdGgKK2FueSB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIGxpYnJhcnkgd2hpY2ggaXMgZGlzdHJpYnV0ZWQKK3VuZGVyIGEgbGljZW5zZSBpZGVudGljYWwgdG8gdGhhdCBsaXN0ZWQgaW4gdGhlIGluY2x1ZGVkCitDT1BZSU5HLk9wZW5TU0wgZmlsZSwgYW5kIGRpc3RyaWJ1dGUgbGlua2VkIGNvbWJpbmF0aW9ucworaW5jbHVkaW5nIHRoZSB0d28uIFlvdSBtdXN0IG9iZXkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbiBhbGwgcmVzcGVjdHMgZm9yIGFsbCBvZiB0aGUgY29kZSB1c2VkIG90aGVyCit0aGFuIE9wZW5TU0wuIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlLCB5b3UgbWF5IGV4dGVuZCB0aGlzCitleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZSBmaWxlLCBidXQgeW91IGFyZSBub3QKK29ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUKK3RoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4KKworCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworCisgIExJQ0VOU0UgSVNTVUVTCisgID09PT09PT09PT09PT09CisKKyAgVGhlIE9wZW5TU0wgdG9vbGtpdCBzdGF5cyB1bmRlciBhIGR1YWwgbGljZW5zZSwgaS5lLiBib3RoIHRoZSBjb25kaXRpb25zIG9mCisgIHRoZSBPcGVuU1NMIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCBTU0xlYXkgbGljZW5zZSBhcHBseSB0byB0aGUgdG9vbGtpdC4KKyAgU2VlIGJlbG93IGZvciB0aGUgYWN0dWFsIGxpY2Vuc2UgdGV4dHMuIEFjdHVhbGx5IGJvdGggbGljZW5zZXMgYXJlIEJTRC1zdHlsZQorICBPcGVuIFNvdXJjZSBsaWNlbnNlcy4gSW4gY2FzZSBvZiBhbnkgbGljZW5zZSBpc3N1ZXMgcmVsYXRlZCB0byBPcGVuU1NMCisgIHBsZWFzZSBjb250YWN0IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKworICBPcGVuU1NMIExpY2Vuc2UKKyAgLS0tLS0tLS0tLS0tLS0tCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworCisgT3JpZ2luYWwgU1NMZWF5IExpY2Vuc2UKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyYWFkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDYgQEAKKworaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZQorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgcmVzcGVjdGl2ZSBBdXRvY29uZiBNYWNyb2BzIGNvcHlyaWdodCBvd25lciBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nIHRoZSBNYWNyby4gWW91IG5lZWQgbm90IGZvbGxvdyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHdoZW4gdXNpbmcgIG9yIAorVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGFwcGxpZXMgdG8gdmVyc2lvbnMgb2YgdGhlIEF1dG9jb25mIE1hY3JvIHJlbGVhc2VkIGJ5IHRoZSBBdXRvY29uZiBBcmNoaXZlLiBXaGVuIHlvdSBtYWtlIGFuZCBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQXV0b2NvbmYgTWFjcm8sIHlvdSBtYXkgZXh0ZW5kIHRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCB0byBhcHBseSB0byB5b3VyIG1vZGlmaWVkIHZlcnNpb24gYXMgd2VsbC4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWNsYXNzcGF0aC1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZTljZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWNsYXNzcGF0aC1leGNlcHRpb24KQEAgLTAsMCArMSw3IEBACisKK2luc2VydCBHUEwgdjIgbGljZW5zZSB0ZXh0IGhlcmUKKworTGlua2luZyB0aGlzIGxpYnJhcnkgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIG90aGVyIG1vZHVsZXMgaXMgbWFraW5nIGEgY29tYmluZWQgd29yayBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuIFRodXMsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY292ZXIgdGhlIHdob2xlIGNvbWJpbmF0aW9uLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhpcyBsaWJyYXJ5IGdpdmUgeW91IHBlcm1pc3Npb24gdG8gbGluayB0aGlzIGxpYnJhcnkgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZiB0aGUgbGljZW5zZSB0ZXJtcyBvZiB0aGVzZSBpbmRlcGVuZGVudCBtb2R1bGVzLCBhbmQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCwgZm9yIGVhY2ggbGlua2VkIGluZGVwZW5kZW50IG1vZHVsZSwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIG9mIHRoYXQgbW9kdWxlLiBBbiBpbmRlcGVuZGVudCBtb2R1bGUgaXMgYSBtb2R1bGUgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSBvciBiYXNlZCBvbiB0aGlzIGxpYnJhcnkuIElmIHlvdSBtb2RpZnkgdGhpcyBsaWJyYXJ5LCB5b3UgbWF5IGV4dGVuZCB0aGlzIGV4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGJ1dCB5b3UgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gZG8gc28uIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtZm9udC1leGNlcHRpb24gYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI0MmY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtZm9udC1leGNlcHRpb24KQEAgLTAsMCArMSwxOCBAQAorCitpbnNlcnQgR1BMIHYyIHRleHQgaGVyZQorCitGb250IEV4Y2VwdGlvbgorQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGNyZWF0ZSBhIGRvY3VtZW50IHdoaWNoIHVzZXMgdGhpcyBmb250LCBhbmQKK2VtYmVkIHRoaXMgZm9udCBvciB1bmFsdGVyZWQgcG9ydGlvbnMgb2YgdGhpcyBmb250IGludG8gdGhlIGRvY3VtZW50LCB0aGlzIGZvbnQKK2RvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorcmVhc29ucyB3aHkgdGhlIGRvY3VtZW50IG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJZgoreW91IG1vZGlmeSB0aGlzIGZvbnQsIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUKK2ZvbnQsIGJ1dCB5b3UgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gZG8gc28uIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlCit0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCisKKworCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2NjVhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMApAQCAtMCwwICsxLDIyNSBAQAorR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworQ29weXJpZ2h0IMKpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK1ByZWFtYmxlCisKK1RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yIHNvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUgc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvIGFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiBZb3UgY2FuIGFwcGx5IGl0IHRvIHlvdXIgcHJvZ3JhbXMsIHRvby4KKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91IHRoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVyZWZvcmUsIHlvdSBoYXZlIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlIGdpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCisKK0ZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBHUEwgY2xlYXJseSBleHBsYWlucyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuIEZvciBib3RoIHVzZXJzJyBhbmQgYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcyBjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8gYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KKworU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1biBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIgY2FuIGRvIHNvLiBUaGlzIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZiBwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuIFRoZSBzeXN0ZW1hdGljIHBhdHRlcm4gb2Ygc3VjaCBhYnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMgZm9yIGluZGl2aWR1YWxzIHRvIHVzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiBUaGVyZWZvcmUsIHdlIGhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZSBwcm9kdWN0cy4gSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlIHN0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KKworRmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mIHNvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRvIGF2b2lkIHRoZSBzcGVjaWFsIGRhbmdlciB0aGF0IHBhdGVudHMgYXBwbGllZCB0byBhIGZyZWUgcHJvZ3JhbSBjb3VsZCBtYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0IHBhdGVudHMgY2Fubm90IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVlLgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LgorVEVSTVMgQU5EIENPTkRJVElPTlMKKzAuIERlZmluaXRpb25zLgorCivigJxUaGlzIExpY2Vuc2XigJ0gcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK+KAnENvcHlyaWdodOKAnSBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZiB3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorCivigJxUaGUgUHJvZ3JhbeKAnSByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzIOKAnHlvdeKAnS4g4oCcTGljZW5zZWVz4oCdIGFuZCDigJxyZWNpcGllbnRz4oCdIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgorCitUbyDigJxtb2RpZnnigJ0gYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yayBpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4gZXhhY3QgY29weS4gVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhIOKAnG1vZGlmaWVkIHZlcnNpb27igJ0gb2YgdGhlIGVhcmxpZXIgd29yayBvciBhIHdvcmsg4oCcYmFzZWQgb27igJ0gdGhlIGVhcmxpZXIgd29yay4KKworQSDigJxjb3ZlcmVkIHdvcmvigJ0gbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitUbyDigJxwcm9wYWdhdGXigJ0gYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dCBwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yIGluZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYSBjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworVG8g4oCcY29udmV54oCdIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIgcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2ggYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KKworQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMg4oCcQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlc+KAnSB0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlIGZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKSB0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZSBleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEgbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KKzEuIFNvdXJjZSBDb2RlLgorCitUaGUg4oCcc291cmNlIGNvZGXigJ0gZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiDigJxPYmplY3QgY29kZeKAnSBtZWFucyBhbnkgbm9uLXNvdXJjZSBmb3JtIG9mIGEgd29yay4KKworQSDigJxTdGFuZGFyZCBJbnRlcmZhY2XigJ0gbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsIHN0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YgaW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQgaXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCisKK1RoZSDigJxTeXN0ZW0gTGlicmFyaWVz4oCdIG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlciB0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZiBwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yIENvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdCBNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4gaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gQSDigJxNYWpvciBDb21wb25lbnTigJ0sIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50IChrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0gKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8gcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCisKK1RoZSDigJxDb3JyZXNwb25kaW5nIFNvdXJjZeKAnSBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUgd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0byBjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncyBTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlIHByb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dCB3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvciB0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkgbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsIHN1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlIHN1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KKworVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycyBjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLgorCitUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQgc2FtZSB3b3JrLgorMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKK0FsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mIGNvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkIGNvbmRpdGlvbnMgYXJlIG1ldC4gVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhIGNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cyBjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyIHJpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgorCitZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90IGNvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zIGluIGZvcmNlLiBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3Ugd2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbyBub3QgY29udHJvbCBjb3B5cmlnaHQuIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MgZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbiBhbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YgeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAgbWFrZXMgaXQgdW5uZWNlc3NhcnkuCiszLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCitObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlIDExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvciBzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoIG1lYXN1cmVzLgorCitXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbiBpcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MgdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCis0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCitZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOyBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkgbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOyBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbCByZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LCBhbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgorNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0byBwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgICogYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KKyAgICAqIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbiA3LiBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8g4oCca2VlcCBpbnRhY3QgYWxsIG5vdGljZXPigJ0uCisgICAgKiBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcyBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gVGhpcyBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNyBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gVGhpcyBMaWNlbnNlIGdpdmVzIG5vIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKyAgICAqIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZSBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91ciB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLCBhbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuIOKAnGFnZ3JlZ2F0ZeKAnSBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QgdXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yayBpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgorNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCisKK1lvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZSBtYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIG9uZSBvZiB0aGVzZSB3YXlzOgorCisgICAgKiBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0IChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisgICAgKiBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0IChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcyBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYSBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubyBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgorICAgICogYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBzdWJzZWN0aW9uIDZiLgorICAgICogZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vIGZ1cnRoZXIgY2hhcmdlLiBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiBJZiB0aGUgcGxhY2UgdG8gY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KSB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4gY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcyBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgorICAgICogZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZCB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgorCitBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUgaW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCitBIOKAnFVzZXIgUHJvZHVjdOKAnSBpcyBlaXRoZXIgKDEpIGEg4oCcY29uc3VtZXIgcHJvZHVjdOKAnSwgd2hpY2ggbWVhbnMgYW55IHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksIG9yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24gaW50byBhIGR3ZWxsaW5nLiBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsIGRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiBGb3IgYSBwYXJ0aWN1bGFyIHByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsIOKAnG5vcm1hbGx5IHVzZWTigJ0gcmVmZXJzIHRvIGEgdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzIG9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyIGFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gQSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsIGNvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LgorCivigJxJbnN0YWxsYXRpb24gSW5mb3JtYXRpb27igJ0gZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLCBwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiBUaGUgaW5mb3JtYXRpb24gbXVzdCBzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdCBjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZSBtb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3Igc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMgcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlIFVzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEgZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkgaWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwgbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcyBiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCitUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhIHJlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcyBmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvciB0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gQWNjZXNzIHRvIGEgbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQgYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kIHByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLCBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5IGRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvciB1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKzcuIEFkZGl0aW9uYWwgVGVybXMuCisKK+KAnEFkZGl0aW9uYWwgcGVybWlzc2lvbnPigJ0gYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuIEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwgYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudCB0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGFwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkgdW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuCisKK1doZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mIGl0LiAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93biByZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgWW91IG1heSBwbGFjZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssIGZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KKworTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91IGFkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6CisKKyAgICAqIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZSB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcgorICAgICogYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKyAgICAqIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4gcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgorICAgICogZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvciBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKyAgICAqIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCisgICAgKiBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0IG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbiB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCisKK0FsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkIOKAnGZ1cnRoZXIgcmVzdHJpY3Rpb25z4oCdIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UgcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyIHJlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucyBhIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMgTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzIG5vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCitJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91IG11c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZSBhZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcgd2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KKworQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUgZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsgdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorOC4gVGVybWluYXRpb24uCisKK1lvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IgbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQgcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgorCitIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdCBjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyIHlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCitUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZSBsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlLiBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5IHJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUgbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KKzkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCitZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJlY2VpdmUgb3IgcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrIG9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uIHRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gSG93ZXZlciwgbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yIG1vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEgY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKzEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4KKworRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQgcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCitBbiDigJxlbnRpdHkgdHJhbnNhY3Rpb27igJ0gaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbiBvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuIG9yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQgdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyIGxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZCBnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYgdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCitZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgZXhhbXBsZSwgeW91IG1heSBub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbiAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCBhbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorMTEuIFBhdGVudHMuCisKK0Eg4oCcY29udHJpYnV0b3LigJ0gaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzIExpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiBUaGUgd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyDigJxjb250cmlidXRvciB2ZXJzaW9u4oCdLgorCitBIGNvbnRyaWJ1dG9yJ3Mg4oCcZXNzZW50aWFsIHBhdGVudCBjbGFpbXPigJ0gYXJlIGFsbCBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkIGJ5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwgYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIOKAnGNvbnRyb2zigJ0gaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50IHBhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UuCisKK0VhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQgcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhIOKAnHBhdGVudCBsaWNlbnNl4oCdIGlzIGFueSBleHByZXNzIGFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudCAoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvIHN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuIFRvIOKAnGdyYW504oCdIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhIHBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwgYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUgdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYSBwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLCB0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvIGF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUgcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudCBsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4g4oCcS25vd2luZ2x5IHJlbHlpbmfigJ0gbWVhbnMgeW91IGhhdmUgYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlIGNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0IGNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCisKK0lmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IgYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYSBjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMgcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5IG9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UgeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQgd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKK0EgcGF0ZW50IGxpY2Vuc2UgaXMg4oCcZGlzY3JpbWluYXRvcnnigJ0gaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4gdGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMgY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlIHNwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcyBpbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50IHRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nIHRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZSBwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkgcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yayBjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseSBmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdCBjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsIG9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcgYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkgb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgorMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKK0lmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGNvbnZleSBhIGNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgY29udmV5IGl0IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdSB0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkgdGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKzEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlIHBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQgdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZSBjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gVGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssIGJ1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBhcyBzdWNoLgorMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIOKAnG9yIGFueSBsYXRlciB2ZXJzaW9u4oCdIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIHZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKK0xhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHBlcm1pc3Npb25zLiBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueSBhdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhIGxhdGVyIHZlcnNpb24uCisxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNIOKAnEFTIElT4oCdIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK0lOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCitJZiB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQgYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsIHJldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcyBhbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFByb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEgY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKK1RvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSDigJxjb3B5cmlnaHTigJ0gbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgPHByb2dyYW0+ICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzIG1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiDigJxhYm91dCBib3jigJ0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhIOKAnGNvcHlyaWdodCBkaXNjbGFpbWVy4oCdIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBHUEwsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK1RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBsaWJyYXJ5LiBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiBCdXQgZmlyc3QsIHBsZWFzZSByZWFkIDxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk2OGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDI3IEBACisKK2luc2VydCBHUEwgdjMgdGV4dCBoZXJlCisKK0dDQyBSVU5USU1FIExJQlJBUlkgRVhDRVBUSU9OCitWZXJzaW9uIDMuMSwgMzEgTWFyY2ggMjAwOQorCitHZW5lcmFsIGluZm9ybWF0aW9uOgoraHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2djYy1leGNlcHRpb24uaHRtbAorQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorVGhpcyBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiAoIkV4Y2VwdGlvbiIpIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLiBJdCBhcHBsaWVzIHRvIGEgZ2l2ZW4gZmlsZSAodGhlICJSdW50aW1lIExpYnJhcnkiKSB0aGF0IGJlYXJzIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgZmlsZSBzdGF0aW5nIHRoYXQgdGhlIGZpbGUgaXMgZ292ZXJuZWQgYnkgR1BMdjMgYWxvbmcgd2l0aCB0aGlzIEV4Y2VwdGlvbi4KK1doZW4geW91IHVzZSBHQ0MgdG8gY29tcGlsZSBhIHByb2dyYW0sIEdDQyBtYXkgY29tYmluZSBwb3J0aW9ucyBvZiBjZXJ0YWluIEdDQyBoZWFkZXIgZmlsZXMgYW5kIHJ1bnRpbWUgbGlicmFyaWVzIHdpdGggdGhlIGNvbXBpbGVkIHByb2dyYW0uIFRoZSBwdXJwb3NlIG9mIHRoaXMgRXhjZXB0aW9uIGlzIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9mIG5vbi1HUEwgKGluY2x1ZGluZyBwcm9wcmlldGFyeSkgcHJvZ3JhbXMgdG8gdXNlLCBpbiB0aGlzIHdheSwgdGhlIGhlYWRlciBmaWxlcyBhbmQgcnVudGltZSBsaWJyYXJpZXMgY292ZXJlZCBieSB0aGlzIEV4Y2VwdGlvbi4KKworMC4gRGVmaW5pdGlvbnMuCitBIGZpbGUgaXMgYW4gIkluZGVwZW5kZW50IE1vZHVsZSIgaWYgaXQgZWl0aGVyIHJlcXVpcmVzIHRoZSBSdW50aW1lIExpYnJhcnkgZm9yIGV4ZWN1dGlvbiBhZnRlciBhIENvbXBpbGF0aW9uIFByb2Nlc3MsIG9yIG1ha2VzIHVzZSBvZiBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIFJ1bnRpbWUgTGlicmFyeSwgYnV0IGlzIG5vdCBvdGhlcndpc2UgYmFzZWQgb24gdGhlIFJ1bnRpbWUgTGlicmFyeS4KKyJHQ0MiIG1lYW5zIGEgdmVyc2lvbiBvZiB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBnb3Zlcm5lZCBieSB2ZXJzaW9uIDMgKG9yIGEgc3BlY2lmaWVkIGxhdGVyIHZlcnNpb24pIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB3aXRoIHRoZSBvcHRpb24gb2YgdXNpbmcgYW55IHN1YnNlcXVlbnQgdmVyc2lvbnMgcHVibGlzaGVkIGJ5IHRoZSBGU0YuCisiR1BMLWNvbXBhdGlibGUgU29mdHdhcmUiIGlzIHNvZnR3YXJlIHdob3NlIGNvbmRpdGlvbnMgb2YgcHJvcGFnYXRpb24sIG1vZGlmaWNhdGlvbiBhbmQgdXNlIHdvdWxkIHBlcm1pdCBjb21iaW5hdGlvbiB3aXRoIEdDQyBpbiBhY2NvcmQgd2l0aCB0aGUgbGljZW5zZSBvZiBHQ0MuCisiVGFyZ2V0IENvZGUiIHJlZmVycyB0byBvdXRwdXQgZnJvbSBhbnkgY29tcGlsZXIgZm9yIGEgcmVhbCBvciB2aXJ0dWFsIHRhcmdldCBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlLCBpbiBleGVjdXRhYmxlIGZvcm0gb3Igc3VpdGFibGUgZm9yIGlucHV0IHRvIGFuIGFzc2VtYmxlciwgbG9hZGVyLCBsaW5rZXIgYW5kL29yIGV4ZWN1dGlvbiBwaGFzZS4gTm90d2l0aHN0YW5kaW5nIHRoYXQsIFRhcmdldCBDb2RlIGRvZXMgbm90IGluY2x1ZGUgZGF0YSBpbiBhbnkgZm9ybWF0IHRoYXQgaXMgdXNlZCBhcyBhIGNvbXBpbGVyIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiwgb3IgdXNlZCBmb3IgcHJvZHVjaW5nIGEgY29tcGlsZXIgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgorVGhlICJDb21waWxhdGlvbiBQcm9jZXNzIiB0cmFuc2Zvcm1zIGNvZGUgZW50aXJlbHkgcmVwcmVzZW50ZWQgaW4gbm9uLWludGVybWVkaWF0ZSBsYW5ndWFnZXMgZGVzaWduZWQgZm9yIGh1bWFuLXdyaXR0ZW4gY29kZSwgYW5kL29yIGluIEphdmEgVmlydHVhbCBNYWNoaW5lIGJ5dGUgY29kZSwgaW50byBUYXJnZXQgQ29kZS4gVGh1cywgZm9yIGV4YW1wbGUsIHVzZSBvZiBzb3VyY2UgY29kZSBnZW5lcmF0b3JzIGFuZCBwcmVwcm9jZXNzb3JzIG5lZWQgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgQ29tcGlsYXRpb24gUHJvY2Vzcywgc2luY2UgdGhlIENvbXBpbGF0aW9uIFByb2Nlc3MgY2FuIGJlIHVuZGVyc3Rvb2QgYXMgc3RhcnRpbmcgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBnZW5lcmF0b3JzIG9yIHByZXByb2Nlc3NvcnMuCitBIENvbXBpbGF0aW9uIFByb2Nlc3MgaXMgIkVsaWdpYmxlIiBpZiBpdCBpcyBkb25lIHVzaW5nIEdDQywgYWxvbmUgb3Igd2l0aCBvdGhlciBHUEwtY29tcGF0aWJsZSBzb2Z0d2FyZSwgb3IgaWYgaXQgaXMgZG9uZSB3aXRob3V0IHVzaW5nIGFueSB3b3JrIGJhc2VkIG9uIEdDQy4gRm9yIGV4YW1wbGUsIHVzaW5nIG5vbi1HUEwtY29tcGF0aWJsZSBTb2Z0d2FyZSB0byBvcHRpbWl6ZSBhbnkgR0NDIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbnMgd291bGQgbm90IHF1YWxpZnkgYXMgYW4gRWxpZ2libGUgQ29tcGlsYXRpb24gUHJvY2Vzcy4KKworMS4gR3JhbnQgb2YgQWRkaXRpb25hbCBQZXJtaXNzaW9uLgorWW91IGhhdmUgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgYSB3b3JrIG9mIFRhcmdldCBDb2RlIGZvcm1lZCBieSBjb21iaW5pbmcgdGhlIFJ1bnRpbWUgTGlicmFyeSB3aXRoIEluZGVwZW5kZW50IE1vZHVsZXMsIGV2ZW4gaWYgc3VjaCBwcm9wYWdhdGlvbiB3b3VsZCBvdGhlcndpc2UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgR1BMdjMsIHByb3ZpZGVkIHRoYXQgYWxsIFRhcmdldCBDb2RlIHdhcyBnZW5lcmF0ZWQgYnkgRWxpZ2libGUgQ29tcGlsYXRpb24gUHJvY2Vzc2VzLiBZb3UgbWF5IHRoZW4gY29udmV5IHN1Y2ggYSBjb21iaW5hdGlvbiB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgY29uc2lzdGVudCB3aXRoIHRoZSBsaWNlbnNpbmcgb2YgdGhlIEluZGVwZW5kZW50IE1vZHVsZXMuCisKKzIuIE5vIFdlYWtlbmluZyBvZiBHQ0MgQ29weWxlZnQuCitUaGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgRXhjZXB0aW9uIGRvZXMgbm90IGltcGx5IGFueSBnZW5lcmFsIHByZXN1bXB0aW9uIHRoYXQgdGhpcmQtcGFydHkgc29mdHdhcmUgaXMgdW5hZmZlY3RlZCBieSB0aGUgY29weWxlZnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBsaWNlbnNlIG9mIEdDQy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmYwZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KQEAgLTAsMCArMSwyOCBAQAorCitpbnNlcnQgR1BMIHYzIHRleHQgaGVyZQorCitBVVRPQ09ORiBDT05GSUdVUkUgU0NSSVBUIEVYQ0VQVElPTgorCitWZXJzaW9uIDMuMCwgMTggQXVndXN0IDIwMDkKKworQ29weXJpZ2h0ICYjMTY5OyAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1RoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLiBJdCBhcHBsaWVzIHRvIGEgZ2l2ZW4gZmlsZSB0aGF0IGJlYXJzIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgZmlsZSBzdGF0aW5nIHRoYXQgdGhlIGZpbGUgaXMgZ292ZXJuZWQgYnkgR1BMdjMgYWxvbmcgd2l0aCB0aGlzIEV4Y2VwdGlvbi4KKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBFeGNlcHRpb24gaXMgdG8gYWxsb3cgZGlzdHJpYnV0aW9uIG9mIEF1dG9jb25mYHMgdHlwaWNhbCBvdXRwdXQgdW5kZXIgdGVybXMgb2YgdGhlIHJlY2lwaWVudGBzIGNob2ljZSAoaW5jbHVkaW5nIHByb3ByaWV0YXJ5KS4KKworMC4gRGVmaW5pdGlvbnMuCisiQ292ZXJlZCBDb2RlIiBpcyB0aGUgc291cmNlIG9yIG9iamVjdCBjb2RlIG9mIGEgdmVyc2lvbiBvZiBBdXRvY29uZiB0aGF0IGlzIGEgY292ZXJlZCB3b3JrIHVuZGVyIHRoaXMgTGljZW5zZS4KKworIk5vcm1hbGx5IENvcGllZCBDb2RlIiBmb3IgYSB2ZXJzaW9uIG9mIEF1dG9jb25mIG1lYW5zIGFsbCBwYXJ0cyBvZiBpdHMgQ292ZXJlZCBDb2RlIHdoaWNoIHRoYXQgdmVyc2lvbiBjYW4gY29weSBmcm9tIGl0cyBjb2RlIChpLmUuLCBub3QgZnJvbSBpdHMgaW5wdXQgZmlsZSkgaW50byBpdHMgbWluaW1hbGx5IHZlcmJvc2UsIG5vbi1kZWJ1Z2dpbmcgYW5kIG5vbi10cmFjaW5nIG91dHB1dC4KKworIkluZWxpZ2libGUgQ29kZSIgaXMgQ292ZXJlZCBDb2RlIHRoYXQgaXMgbm90IE5vcm1hbGx5IENvcGllZCBDb2RlLgorCisxLiBHcmFudCBvZiBBZGRpdGlvbmFsIFBlcm1pc3Npb24uCitZb3UgaGF2ZSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvdXRwdXQgb2YgQXV0b2NvbmYsIGV2ZW4gaWYgc3VjaCBwcm9wYWdhdGlvbiB3b3VsZCBvdGhlcndpc2UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgR1BMdjMuIEhvd2V2ZXIsIGlmIGJ5IG1vZGlmeWluZyBBdXRvY29uZiB5b3UgY2F1c2UgYW55IEluZWxpZ2libGUgQ29kZSBvZiB0aGUgdmVyc2lvbiB5b3UgcmVjZWl2ZWQgdG8gYmVjb21lIE5vcm1hbGx5IENvcGllZCBDb2RlIG9mIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiwgdGhlbiB5b3Ugdm9pZCB0aGlzIEV4Y2VwdGlvbiBmb3IgdGhlIHJlc3VsdGluZyBjb3ZlcmVkIHdvcmsuIElmIHlvdSBjb252ZXkgdGhhdCByZXN1bHRpbmcgY292ZXJlZCB3b3JrLCB5b3UgbXVzdCByZW1vdmUgdGhpcyBFeGNlcHRpb24gaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzZWNvbmQgcGFyYWdyYXBoIG9mIFNlY3Rpb24gNyBvZiBHUEx2My4KKworMi4gTm8gV2Vha2VuaW5nIG9mIEF1dG9jb25mIENvcHlsZWZ0LgorVGhlIGF2YWlsYWJpbGl0eSBvZiB0aGlzIEV4Y2VwdGlvbiBkb2VzIG5vdCBpbXBseSBhbnkgZ2VuZXJhbCBwcmVzdW1wdGlvbiB0aGF0IHRoaXJkLXBhcnR5IHNvZnR3YXJlIGlzIHVuYWZmZWN0ZWQgYnkgdGhlIGNvcHlsZWZ0IHJlcXVpcmVtZW50cyBvZiB0aGUgbGljZW5zZSBvZiBBdXRvY29uZi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9IUE5EIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9IUE5ECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGJiZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0hQTkQKQEAgLTAsMCArMSwxMSBAQAorCitIaXN0b3JpY2FsIFBlcm1pc3Npb24gTm90aWNlIGFuZCBEaXNjbGFpbWVyCisKKzxjb3B5cmlnaHQgbm90aWNlPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXNbLF0gW2FuZF0gdGhhdCBib3RoIFt0aGF0XSBbdGhlXSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb25bLCBhbmQgdGhhdCB0aGUgbmFtZSBbb2ZdIDxjb3B5cmlnaHQgaG9sZGVyPiBbb3IgPHJlbGF0ZWQgZW50aXRpZXM+XSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbl0uIFs8Y29weXJpZ2h0IGhvbGRlcj4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS5dCisKK1s8Y29weXJpZ2h0IGhvbGRlcj4gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTU1ssXVsuXSBJTiBOTyBFVkVOVCBTSEFMTCA8Y29weXJpZ2h0IGhvbGRlcj4gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLl0KKworLS0tCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSUNVIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5YjZmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSUNVCkBAIC0wLDAgKzEsMTMgQEAKK0NPUFlSSUdIVCBBTkQgUEVSTUlTU0lPTiBOT1RJQ0UKKworQ29weXJpZ2h0IChjKSAxOTk1LTIwMTIgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLgorCitBbGwgdHJhZGVtYXJrcyBhbmQgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4gCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQQSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjViMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQQQpAQCAtMCwwICsxLDk1IEBACisKK0lQQSBGb250IExpY2Vuc2UgQWdyZWVtZW50IHYxLjAgCisgCisKK1RoZSBMaWNlbnNvciBwcm92aWRlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSAoYXMgZGVmaW5lZCBpbiBBcnRpY2xlIDEgYmVsb3cpIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50ICgiQWdyZWVtZW50IikuICBBbnkgdXNlLCByZXByb2R1Y3Rpb24gb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCBvciBhbnkgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGJ5IGEgUmVjaXBpZW50IChhcyBkZWZpbmVkIGluIEFydGljbGUgMSBiZWxvdykgY29uc3RpdHV0ZXMgdGhlIFJlY2lwaWVudGBzIGFjY2VwdGFuY2Ugb2YgdGhpcyBBZ3JlZW1lbnQuCisKKworQXJ0aWNsZSAxIChEZWZpbml0aW9ucykKKworMS4gICAgICAgICAiRGlnaXRhbCBGb250IFByb2dyYW0iIHNoYWxsIG1lYW4gYSBjb21wdXRlciBwcm9ncmFtIGNvbnRhaW5pbmcsIG9yIHVzZWQgdG8gcmVuZGVyIG9yIGRpc3BsYXkgZm9udHMuCisKKzIuICAgICAgICAgIkxpY2Vuc2VkIFByb2dyYW0iIHNoYWxsIG1lYW4gYSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSBsaWNlbnNlZCBieSB0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKzMuICAgICAgICAgIkRlcml2ZWQgUHJvZ3JhbSIgc2hhbGwgbWVhbiBhIERpZ2l0YWwgRm9udCBQcm9ncmFtIGNyZWF0ZWQgYXMgYSByZXN1bHQgb2YgYSBtb2RpZmljYXRpb24sIGFkZGl0aW9uLCBkZWxldGlvbiwgcmVwbGFjZW1lbnQgb3IgYW55IG90aGVyIGFkYXB0YXRpb24gdG8gb3Igb2YgYSBwYXJ0IG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSwgYW5kIGluY2x1ZGVzIGEgY2FzZSB3aGVyZSBhIERpZ2l0YWwgRm9udCBQcm9ncmFtIG5ld2x5IGNyZWF0ZWQgYnkgcmV0cmlldmluZyBmb250IGluZm9ybWF0aW9uIGZyb20gYSBwYXJ0IG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBFbWJlZGRlZCBGb250cyBmcm9tIGEgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24gb2YgdGhlIHJldHJpZXZlZCBmb250IGluZm9ybWF0aW9uLiAKKworNC4gICAgICAgICAiRGlnaXRhbCBDb250ZW50IiBzaGFsbCBtZWFuIHByb2R1Y3RzIHByb3ZpZGVkIHRvIGVuZCB1c2VycyBpbiB0aGUgZm9ybSBvZiBkaWdpdGFsIGRhdGEsIGluY2x1ZGluZyB2aWRlbyBjb250ZW50LCBtb3Rpb24gYW5kL29yIHN0aWxsIHBpY3R1cmVzLCBUViBwcm9ncmFtcyBvciBvdGhlciBicm9hZGNhc3RpbmcgY29udGVudCBhbmQgcHJvZHVjdHMgY29uc2lzdGluZyBvZiBjaGFyYWN0ZXIgdGV4dCwgcGljdHVyZXMsIHBob3RvZ3JhcGhpYyBpbWFnZXMsIGdyYXBoaWMgc3ltYm9scyBhbmQvb3IgdGhlIGxpa2UuCisKKzUuICAgICAgICAgIkRpZ2l0YWwgRG9jdW1lbnQgRmlsZSIgc2hhbGwgbWVhbiBhIFBERiBmaWxlIG9yIG90aGVyIERpZ2l0YWwgQ29udGVudCBjcmVhdGVkIGJ5IHZhcmlvdXMgc29mdHdhcmUgcHJvZ3JhbXMgaW4gd2hpY2ggYSBwYXJ0IG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBiZWNvbWVzIGVtYmVkZGVkIG9yIGNvbnRhaW5lZCBpbiB0aGUgZmlsZSBmb3IgdGhlIGRpc3BsYXkgb2YgdGhlIGZvbnQgKCJFbWJlZGRlZCBGb250cyIpLiAgRW1iZWRkZWQgRm9udHMgYXJlIHVzZWQgb25seSBpbiB0aGUgZGlzcGxheSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYXJ0aWN1bGFyIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSB3aXRoaW4gd2hpY2ggdGhleSBhcmUgZW1iZWRkZWQsIGFuZCBzaGFsbCBiZSBkaXN0aW5ndWlzaGVkIGZyb20gdGhvc2UgaW4gYW55IERpZ2l0YWwgRm9udCBQcm9ncmFtLCB3aGljaCBtYXkgYmUgdXNlZCBmb3IgZGlzcGxheSBvZiBjaGFyYWN0ZXJzIG91dHNpZGUgdGhhdCBwYXJ0aWN1bGFyIERpZ2l0YWwgRG9jdW1lbnQgRmlsZS4KKworNi4gICAgICAgICAiQ29tcHV0ZXIiIHNoYWxsIGluY2x1ZGUgYSBzZXJ2ZXIgaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzcuICAgICAgICAgIlJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIiBzaGFsbCBtZWFuIHJlcHJvZHVjdGlvbiwgdHJhbnNmZXIsIGRpc3RyaWJ1dGlvbiwgbGVhc2UsIHB1YmxpYyB0cmFuc21pc3Npb24sIHByZXNlbnRhdGlvbiwgZXhoaWJpdGlvbiwgYWRhcHRhdGlvbiBhbmQgYW55IG90aGVyIGV4cGxvaXRhdGlvbi4KKworOC4gICAgICAgICAiUmVjaXBpZW50IiBzaGFsbCBtZWFuIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIExpY2Vuc2VkIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBvbmUgdGhhdCByZWNlaXZlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBmcm9tIGEgUmVjaXBpZW50LgorCisgCisKK0FydGljbGUgMiAoR3JhbnQgb2YgTGljZW5zZSkKKworVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgUmVjaXBpZW50IGEgbGljZW5zZSB0byB1c2UgdGhlIExpY2Vuc2VkIFByb2dyYW0gaW4gYW55IGFuZCBhbGwgY291bnRyaWVzIGluIGFjY29yZGFuY2Ugd2l0aCBlYWNoIG9mIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4gSG93ZXZlciwgYW55IGFuZCBhbGwgcmlnaHRzIHVuZGVybHlpbmcgaW4gdGhlIExpY2Vuc2VkIFByb2dyYW0gc2hhbGwgYmUgaGVsZCBieSB0aGUgTGljZW5zb3IuIEluIG5vIHNlbnNlIGlzIHRoaXMgQWdyZWVtZW50IGludGVuZGVkIHRvIHRyYW5zZmVyIGFueSByaWdodCByZWxhdGluZyB0byB0aGUgTGljZW5zZWQgUHJvZ3JhbSBoZWxkIGJ5IHRoZSBMaWNlbnNvciBleGNlcHQgYXMgc3BlY2lmaWNhbGx5IHNldCBmb3J0aCBoZXJlaW4gb3IgYW55IHJpZ2h0IHJlbGF0aW5nIHRvIGFueSB0cmFkZW1hcmssIHRyYWRlIG5hbWUsIG9yIHNlcnZpY2UgbWFyayB0byB0aGUgUmVjaXBpZW50LgorCisgCisKKzEuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgaW5zdGFsbCB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvbiBhbnkgbnVtYmVyIG9mIENvbXB1dGVycyBhbmQgdXNlIHRoZSBzYW1lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzIuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgdXNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIGluIHByaW50ZWQgbWF0ZXJpYWxzIG9yIGluIERpZ2l0YWwgQ29udGVudCBhcyBhbiBleHByZXNzaW9uIG9mIGNoYXJhY3RlciB0ZXh0cyBvciB0aGUgbGlrZS4KKworMy4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBjb25kdWN0IFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIHRoZSBwcmludGVkIG1hdGVyaWFscyBhbmQgRGlnaXRhbCBDb250ZW50IGNyZWF0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcmVjZWRpbmcgUGFyYWdyYXBoLCBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBhbmQgaW4gYW55IGZvcm0gb2YgbWVkaWEgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBicm9hZGNhc3RpbmcsIGNvbW11bmljYXRpb24gYW5kIHZhcmlvdXMgcmVjb3JkaW5nIG1lZGlhLgorCis0LiAgICAgICAgIElmIGFueSBSZWNpcGllbnQgZXh0cmFjdHMgRW1iZWRkZWQgRm9udHMgZnJvbSBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSB0byBjcmVhdGUgYSBEZXJpdmVkIFByb2dyYW0sIHN1Y2ggRGVyaXZlZCBQcm9ncmFtIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgYWdyZWVtZW50LiAgCisKKzUuICAgICAgICAgSWYgYW55IFJlY2lwaWVudCBwZXJmb3JtcyBSZXByb2R1Y3Rpb24gb3IgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIGEgRGlnaXRhbCBEb2N1bWVudCBGaWxlIGluIHdoaWNoIEVtYmVkZGVkIEZvbnRzIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGFyZSB1c2VkIG9ubHkgZm9yIHJlbmRlcmluZyB0aGUgRGlnaXRhbCBDb250ZW50IHdpdGhpbiBzdWNoIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSB0aGVuIHN1Y2ggUmVjaXBpZW50IHNoYWxsIGhhdmUgbm8gZnVydGhlciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBpbiByZWxhdGlvbiB0byBzdWNoIGFjdGlvbnMuCisKKzYuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgcmVwcm9kdWNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGFzIGlzIHdpdGhvdXQgbW9kaWZpY2F0aW9uIGFuZCB0cmFuc2ZlciBzdWNoIGNvcGllcywgcHVibGljbHkgdHJhbnNtaXQgb3Igb3RoZXJ3aXNlIHJlZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSB0byBhIHRoaXJkIHBhcnR5IGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzICgiUmVkaXN0cmlidXRlIiksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzIFBhcmFncmFwaCAyLgorCis3LiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IGNyZWF0ZSwgdXNlLCByZXByb2R1Y2UgYW5kL29yIFJlZGlzdHJpYnV0ZSBhIERlcml2ZWQgUHJvZ3JhbSB1bmRlciB0aGUgdGVybXMgc3RhdGVkIGFib3ZlIGZvciB0aGUgTGljZW5zZWQgUHJvZ3JhbTogcHJvdmlkZWQsIHRoYXQgdGhlIFJlY2lwaWVudCBzaGFsbCBmb2xsb3cgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIEFydGljbGUgMyBQYXJhZ3JhcGggMSB3aGVuIFJlZGlzdHJpYnV0aW5nIHRoZSBEZXJpdmVkIFByb2dyYW0uIAorCisKK0FydGljbGUgMyAoUmVzdHJpY3Rpb24pCisKK1RoZSBsaWNlbnNlIGdyYW50ZWQgaW4gdGhlIHByZWNlZGluZyBBcnRpY2xlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKworMS4gICAgICAgICBJZiBhIERlcml2ZWQgUHJvZ3JhbSBpcyBSZWRpc3RyaWJ1dGVkIHB1cnN1YW50IHRvIFBhcmFncmFwaCA0IGFuZCA3IG9mIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSwgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYmUgbWV0IDoKKworKDEpICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbXVzdCBiZSBhbHNvIFJlZGlzdHJpYnV0ZWQgdG9nZXRoZXIgd2l0aCB0aGUgRGVyaXZlZCBQcm9ncmFtLCBvciBiZSBtYWRlIGF2YWlsYWJsZSBvbmxpbmUgb3IgYnkgbWVhbnMgb2YgbWFpbGluZyBtZWNoYW5pc21zIGluIGV4Y2hhbmdlIGZvciBhIGNvc3Qgd2hpY2ggZG9lcyBub3QgZXhjZWVkIHRoZSB0b3RhbCBjb3N0cyBvZiBwb3N0YWdlLCBzdG9yYWdlIG1lZGl1bSBhbmQgaGFuZGxpbmcgZmVlczoKKworKGEpICAgIGEgY29weSBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtOyBhbmQKKworKGIpICAgIGFueSBhZGRpdGlvbmFsIGZpbGUgY3JlYXRlZCBieSB0aGUgZm9udCBkZXZlbG9waW5nIHByb2dyYW0gaW4gdGhlIGNvdXJzZSBvZiBjcmVhdGluZyB0aGUgRGVyaXZlZCBQcm9ncmFtIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBEZXJpdmVkIFByb2dyYW0sIGlmIGFueS4KKworKDIpICAgICAgICAgICAgICAgIEl0IGlzIHJlcXVpcmVkIHRvIGFsc28gUmVkaXN0cmlidXRlIG1lYW5zIHRvIGVuYWJsZSByZWNpcGllbnRzIG9mIHRoZSBEZXJpdmVkIFByb2dyYW0gdG8gcmVwbGFjZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHdpdGggdGhlIExpY2Vuc2VkIFByb2dyYW0gZmlyc3QgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlICh0aGUgIk9yaWdpbmFsIFByb2dyYW0iKS4gIFN1Y2ggbWVhbnMgbWF5IGJlIHRvIHByb3ZpZGUgYSBkaWZmZXJlbmNlIGZpbGUgZnJvbSB0aGUgT3JpZ2luYWwgUHJvZ3JhbSwgb3IgaW5zdHJ1Y3Rpb25zIHNldHRpbmcgb3V0IGEgbWV0aG9kIHRvIHJlcGxhY2UgdGhlIERlcml2ZWQgUHJvZ3JhbSB3aXRoIHRoZSBPcmlnaW5hbCBQcm9ncmFtLgorCisoMykgICAgICAgICAgICAgICAgVGhlIFJlY2lwaWVudCBtdXN0IGxpY2Vuc2UgdGhlIERlcml2ZWQgUHJvZ3JhbSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKyg0KSAgICAgICAgICAgICAgICBObyBvbmUgbWF5IHVzZSBvciBpbmNsdWRlIHRoZSBuYW1lIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGFzIGEgcHJvZ3JhbSBuYW1lLCBmb250IG5hbWUgb3IgZmlsZSBuYW1lIG9mIHRoZSBEZXJpdmVkIFByb2dyYW0uCisKKyg1KSAgICAgICAgICAgICAgICBBbnkgbWF0ZXJpYWwgdG8gYmUgbWFkZSBhdmFpbGFibGUgb25saW5lIG9yIGJ5IG1lYW5zIG9mIG1haWxpbmcgYSBtZWRpdW0gdG8gc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgcGFyYWdyYXBoIG1heSBiZSBwcm92aWRlZCwgdmVyYmF0aW0sIGJ5IGFueSBwYXJ0eSB3aXNoaW5nIHRvIGRvIHNvLgorCisyLiAgICAgICAgIElmIHRoZSBSZWNpcGllbnQgUmVkaXN0cmlidXRlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBwdXJzdWFudCB0byBQYXJhZ3JhcGggNiBvZiB0aGUgcHJlY2VkaW5nIEFydGljbGUsIHRoZSBSZWNpcGllbnQgc2hhbGwgbWVldCBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisoMSkgICAgICAgICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgbm90IGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbS4KKworKDIpICAgICAgICAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IG5vdCBhbHRlciBvciBvdGhlcndpc2UgbW9kaWZ5IHRoZSBMaWNlbnNlZCBQcm9ncmFtLgorCisoMykgICAgICAgICAgICAgICAgVGhlIFJlY2lwaWVudCBtdXN0IGF0dGFjaCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgdG8gdGhlIExpY2Vuc2VkIFByb2dyYW0uCisKKzMuICAgICAgICAgVEhJUyBMSUNFTlNFRCBQUk9HUkFNIElTIFBST1ZJREVEIEJZIFRIRSBMSUNFTlNPUiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVFkgQVMgVE8gVEhFIExJQ0VOU0VEIFBST0dSQU0gT1IgQU5ZIERFUklWRUQgUFJPR1JBTSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIExJQ0VOU09SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYVEVOREVELCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE87IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEVEIEdPT0RTIE9SIFNFUlZJQ0U7IERBTUFHRVMgQVJJU0lORyBGUk9NIFNZU1RFTSBGQUlMVVJFOyBMT1NTIE9SIENPUlJVUFRJT04gT0YgRVhJU1RJTkcgREFUQSBPUiBQUk9HUkFNOyBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFkgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBJTlNUQUxMQVRJT04sIFVTRSwgVEhFIFJFUFJPRFVDVElPTiBPUiBPVEhFUiBFWFBMT0lUQVRJT04gT0YgVEhFIExJQ0VOU0VEIFBST0dSQU0gT1IgQU5ZIERFUklWRUQgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzQuICAgICAgICAgVGhlIExpY2Vuc29yIGlzIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gcmVzcG9uZCB0byBhbnkgdGVjaG5pY2FsIHF1ZXN0aW9ucyBvciBpbnF1aXJpZXMsIG9yIHByb3ZpZGUgYW55IG90aGVyIHVzZXIgc3VwcG9ydCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGluc3RhbGxhdGlvbiwgdXNlIG9yIHRoZSBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBEZXJpdmVkIFByb2dyYW1zIHRoZXJlb2YuCisKKworQXJ0aWNsZSA0IChUZXJtaW5hdGlvbiBvZiBBZ3JlZW1lbnQpCisKKzEuICAgICAgICAgVGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmVnaW4gZnJvbSB0aGUgdGltZSBvZiByZWNlaXB0IG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGJ5IHRoZSBSZWNpcGllbnQgYW5kIHNoYWxsIGNvbnRpbnVlIGFzIGxvbmcgYXMgdGhlIFJlY2lwaWVudCByZXRhaW5zIGFueSBzdWNoIExpY2Vuc2VkIFByb2dyYW0gaW4gYW55IHdheS4KKworMi4gICAgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIHByb3Zpc2lvbiBzZXQgZm9ydGggaW4gdGhlIHByZWNlZGluZyBQYXJhZ3JhcGgsIGluIHRoZSBldmVudCBvZiB0aGUgYnJlYWNoIG9mIGFueSBvZiB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQgYnkgdGhlIFJlY2lwaWVudCwgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgd2l0aG91dCBhbnkgbm90aWNlLiBJbiB0aGUgY2FzZSBvZiBzdWNoIHRlcm1pbmF0aW9uLCB0aGUgUmVjaXBpZW50IG1heSBub3QgdXNlIG9yIGNvbmR1Y3QgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgYSBEZXJpdmVkIFByb2dyYW06IHByb3ZpZGVkIHRoYXQgc3VjaCB0ZXJtaW5hdGlvbiBzaGFsbCBub3QgYWZmZWN0IGFueSByaWdodHMgb2YgYW55IG90aGVyIFJlY2lwaWVudCByZWNlaXZpbmcgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgdGhlIERlcml2ZWQgUHJvZ3JhbSBmcm9tIHN1Y2ggUmVjaXBpZW50IHdobyBicmVhY2hlZCB0aGlzIEFncmVlbWVudC4KKworCitBcnRpY2xlIDUgKEdvdmVybmluZyBMYXcpCisKKzEuICAgICAgICAgSVBBIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJbiBzdWNoIGFuIGV2ZW50LCB0aGUgUmVjaXBpZW50IG1heSBzZWxlY3QgZWl0aGVyIHRoaXMgQWdyZWVtZW50IG9yIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpbiB1c2luZywgY29uZHVjdGluZyB0aGUgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YsIG9yIFJlZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIGEgRGVyaXZlZCBQcm9ncmFtLiBPdGhlciBtYXR0ZXJzIG5vdCBzcGVjaWZpZWQgYWJvdmUgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgQ29weXJpZ2h0IExhdyBvZiBKYXBhbiBhbmQgb3RoZXIgcmVsYXRlZCBsYXdzIGFuZCByZWd1bGF0aW9ucyBvZiBKYXBhbi4KKworMi4gICAgICAgICBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgdW5kZXIgdGhlIGxhd3Mgb2YgSmFwYW4uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjEzNmM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEwtMS4wCkBAIC0wLDAgKzEsMjEzIEBACisKK0lCTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgSUJNCitQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OCitPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiBERUZJTklUSU9OUworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2luIHRoZSBjYXNlIG9mIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gKCJJQk0iKSwgdGhlIE9yaWdpbmFsIFByb2dyYW0sIGFuZAoraW4gdGhlIGNhc2Ugb2YgZWFjaCBDb250cmlidXRvciwKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kCithcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbgorYG9yaWdpbmF0ZXNgIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkKK3N1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcmBzCitiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOgorKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGgKK3RoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdAorZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBJQk0gYW5kIGFueSBvdGhlciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMgIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhCitDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMKK0NvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyJPcmlnaW5hbCBQcm9ncmFtIiBtZWFucyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUKK2FjY29tcGFueWluZyB0aGlzIEFncmVlbWVudCBhcyByZWxlYXNlZCBieSBJQk0sIGluY2x1ZGluZyBzb3VyY2UKK2NvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBpZiBhbnkuCisKKyJQcm9ncmFtIiBtZWFucyB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgQ29udHJpYnV0aW9ucy4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzCitBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodAorbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwKK3B1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQKK29iamVjdCBjb2RlIGZvcm0uCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQKK2xpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCitpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsCitpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlCitzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0KK2lmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaAorYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5Cit0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkKK290aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlcgorc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUKK2xpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlCitwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUKK3BhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuCitFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zCiticm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUKK3JpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzCitzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cworbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzCityZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMKK1JlY2lwaWVudGBzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMKK3N1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZQorY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorMy4gUkVRVUlSRU1FTlRTCitBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LAorcHJvdmlkZWQgdGhhdDoKKworaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAoraXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzCithbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IKK2NvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IKK2NvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkKK2ZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUKK29mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCisKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoCitDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlCittYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KK1doZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kCithIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUKK1Byb2dyYW0uCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluIGEgY29uc3BpY3VvdXMgbG9jYXRpb24gaW4gdGhlIFByb2dyYW06CisKK0NvcHlyaWdodCAoQykgMTk5NiwgMTk5OSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0luIGFkZGl0aW9uLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yCitvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluCityZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUKK2xpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsCit1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQorY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdAorY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhCitDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywKK3N1Y2ggQ29udHJpYnV0b3IgKCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQKK2FuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpCithZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcKK2Zyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQKK3BhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZQorYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aAoraXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4KK1RoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4KK0luIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5Citub3RpZnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikKK2FsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50CituZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55CitzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZQorY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3JgcworcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3dvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0bwordGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkKK290aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMKK1BST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWQorT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKK2V4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwordGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUKK2xhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kCit1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVAorTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCitUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUworR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mCit0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlcgorYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYSBDb250cmlidXRvciB3aXRoCityZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltCitvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK3RoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwKK3Rlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZgorUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcKK2EgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbQoraXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IKK2hhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRgcyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnRgcworcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoCitsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdAorZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMKK0FncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZgordGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UKK2FuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLgorSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueQorbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUKK2FuZCBzdXJ2aXZlLgorCitJQk0gbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudAorZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEKK2Rpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpCittYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudAordW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUKK0FncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIE5vIG9uZQorb3RoZXIgdGhhbiBJQk0gaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIEV4Y2VwdCBhcworZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMKK25vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvcgordW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3IKK290aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIKK3RoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZAordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vCitwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaAorcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JU0MgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2FmMTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JU0MKQEAgLTAsMCArMSwxMCBAQAorCitJU0MgTGljZW5zZToKKworQ29weXJpZ2h0ICYjMTY5OyAyMDA0LTIwMTAgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKK0NvcHlyaWdodCAmIzE2OTsgMTk5NS0yMDAzIGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzFkNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4wCkBAIC0wLDAgKzEsMzQyIEBACitHTlUgTElCUkFSWSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKKworCitWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisKKworQ29weXJpZ2h0IChDKSAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCis1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQQorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKworCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBHUEwuICBJdCBpcworCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKK1ByZWFtYmxlCisKKworCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKworCitUaGlzIGxpY2Vuc2UsIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZSBzcGVjaWFsbHkgZGVzaWduYXRlZCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUsIGFuZCB0byBhbnkgb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gWW91IGNhbiB1c2UgaXQgZm9yIHlvdXIgbGlicmFyaWVzLCB0b28uCisKKworCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKworCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKworCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlIHlvdS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBJZiB5b3UgbGluayBhIHByb2dyYW0gd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZSBjb21wbGV0ZSBvYmplY3QgZmlsZXMgdG8gdGhlIHJlY2lwaWVudHMgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbSB3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcgaXQuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworCisKK091ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBsaWJyYXJ5LCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisKKworQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBsaWJyYXJ5LiBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKworCisKK0ZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IGNvbXBhbmllcyBkaXN0cmlidXRpbmcgZnJlZSBzb2Z0d2FyZSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCB0aHVzIGluIGVmZmVjdCB0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworCisKK01vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCB3YXMgZGVzaWduZWQgZm9yIHV0aWxpdHkgcHJvZ3JhbXMuIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcy4gVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBvbmU7IGJlIHN1cmUgdG8gcmVhZCBpdCBpbiBmdWxsLCBhbmQgZG9uJ3QgYXNzdW1lIHRoYXQgYW55dGhpbmcgaW4gaXQgaXMgdGhlIHNhbWUgYXMgaW4gdGhlIG9yZGluYXJ5IGxpY2Vuc2UuCisKKworCitUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdCB0aGV5IGJsdXIgdGhlIGRpc3RpbmN0aW9uIHdlIHVzdWFsbHkgbWFrZSBiZXR3ZWVuIG1vZGlmeWluZyBvciBhZGRpbmcgdG8gYSBwcm9ncmFtIGFuZCBzaW1wbHkgdXNpbmcgaXQuIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0IGNoYW5naW5nIHRoZSBsaWJyYXJ5LCBpcyBpbiBzb21lIHNlbnNlIHNpbXBseSB1c2luZyB0aGUgbGlicmFyeSwgYW5kIGlzIGFuYWxvZ291cyB0byBydW5uaW5nIGEgdXRpbGl0eSBwcm9ncmFtIG9yIGFwcGxpY2F0aW9uIHByb2dyYW0uIEhvd2V2ZXIsIGluIGEgdGV4dHVhbCBhbmQgbGVnYWwgc2Vuc2UsIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBhIGNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeSwgYW5kIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRyZWF0cyBpdCBhcyBzdWNoLgorCisKKworQmVjYXVzZSBvZiB0aGlzIGJsdXJyZWQgZGlzdGluY3Rpb24sIHVzaW5nIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBsaWJyYXJpZXMgZGlkIG5vdCBlZmZlY3RpdmVseSBwcm9tb3RlIHNvZnR3YXJlIHNoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuIFdlIGNvbmNsdWRlZCB0aGF0IHdlYWtlciBjb25kaXRpb25zIG1pZ2h0IHByb21vdGUgc2hhcmluZyBiZXR0ZXIuCisKKworCitIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZSB1c2VycyBvZiB0aG9zZSBwcm9ncmFtcyBvZiBhbGwgYmVuZWZpdCBmcm9tIHRoZSBmcmVlIHN0YXR1cyBvZiB0aGUgbGlicmFyaWVzIHRoZW1zZWx2ZXMuIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHBlcm1pdCBkZXZlbG9wZXJzIG9mIG5vbi1mcmVlIHByb2dyYW1zIHRvIHVzZSBmcmVlIGxpYnJhcmllcywgd2hpbGUgcHJlc2VydmluZyB5b3VyIGZyZWVkb20gYXMgYSB1c2VyIG9mIHN1Y2ggcHJvZ3JhbXMgdG8gY2hhbmdlIHRoZSBmcmVlIGxpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gKFdlIGhhdmUgbm90IHNlZW4gaG93IHRvIGFjaGlldmUgdGhpcyBhcyByZWdhcmRzIGNoYW5nZXMgaW4gaGVhZGVyIGZpbGVzLCBidXQgd2UgaGF2ZSBhY2hpZXZlZCBpdCBhcyByZWdhcmRzIGNoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSBUaGUgaG9wZSBpcyB0aGF0IHRoaXMgd2lsbCBsZWFkIHRvIGZhc3RlciBkZXZlbG9wbWVudCBvZiBmcmVlIGxpYnJhcmllcy4KKworCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhICJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiBUaGUgZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGlsZSB0aGUgbGF0dGVyIG9ubHkgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworCisKK05vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBsaWJyYXJ5IHRvIGJlIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmF0aGVyIHRoYW4gYnkgdGhpcyBzcGVjaWFsIG9uZS4KKworCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisKKworMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisKKworQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YSBwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMgKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworCisKK1RoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrIHdoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiBBICJ3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIHN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisKKworIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisKKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20gc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yIHdyaXRpbmcgaXQpLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcyBhbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKworCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncyBjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBMaWJyYXJ5LgorCisKKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKworCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKworCithKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKK2IpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCitjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKK2QpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYSB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvciB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyhGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUgYXBwbGljYXRpb24uIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueSBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZSByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCisKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCisKKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkgd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKworCiszLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gVG8gZG8gdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbyB0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbiB0aGVzZSBub3RpY2VzLgorCisKKworT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvciB0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisKKworVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mIHRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworCisKKzQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKworCitJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8gZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisKKworNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUgTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvciBsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gU3VjaCBhIHdvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQgdGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworCisKK0hvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0IGNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFNlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisKKworV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LiBXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZSBsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gVGhlIHRocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKworCitJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUgZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdCBmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlIHdvcmsuIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworCisKK090aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LiBBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwgd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorCisKKworNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbXBpbGUgb3IgbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEgd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdCBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKworCitZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSB3b3JrIGR1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gQWxzbywgeW91IG11c3QgZG8gb25lIG9mIHRoZXNlIHRoaW5nczoKKworCisKK2EpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlciBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAoSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKK2IpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscyBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworYykgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorCitGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCisKKworSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseSBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdSBkaXN0cmlidXRlLgorCisKKworNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkIGxpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UgcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworCisKK2EpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcy4gVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2VjdGlvbnMgYWJvdmUuCisKK2IpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0IHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworCisKKzkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworCisKKzEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCisKKworMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKKworCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworCisKKzEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworCisKKzEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgTGlicmFyeSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYSBsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisKKworMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCisKK05PIFdBUlJBTlRZCisKKworCisxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUJSQVJZIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworCisKKzE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisKKworSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQgZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcgcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisKKworVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisKKworb25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGFuIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLgorCitDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisKKworCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorCit2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKworCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKworYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKworTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKworTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKworCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKKworQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbgorCit0aGUgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4KKworYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5OTAKKworVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlNzM1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjEKQEAgLTAsMCArMSwxNzYgQEAKKworR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cworIGFzIHRoZSBzdWNjZXNzb3Igb2YgdGhlIEdOVSBMaWJyYXJ5IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGhlbmNlCisgdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKK1RoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUgc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuIFlvdSBjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyIHRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyIHN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3UgYXJlIGluZm9ybWVkIHRoYXQgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUgeW91LiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZSBjb21wbGV0ZSBvYmplY3QgZmlsZXMgdG8gdGhlIHJlY2lwaWVudHMsIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0gd2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcgaXQuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZSBsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsIGF1dGhvcmBzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2VkIGJ5IG90aGVycy4KKworRmluYWxseSwgc29mdHdhcmUgcGF0ZW50cyBwb3NlIGEgY29uc3RhbnQgdGhyZWF0IHRvIHRoZSBleGlzdGVuY2Ugb2YgYW55IGZyZWUgcHJvZ3JhbS4gV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90IGVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYSByZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0IGFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKK01vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcywgYW5kIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBXZSB1c2UgdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZSBsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcgYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhIGNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gVGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlIGVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiBUaGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnkuCisKK1dlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQgZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXJgcyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3Mgb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiBUaGVzZSBkaXNhZHZhbnRhZ2VzIGFyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueSBsaWJyYXJpZXMuIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4gc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCitGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0byBlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcyBhIGRlLWZhY3RvIHN0YW5kYXJkLiBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUgYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlIGxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiBJbiB0aGlzIGNhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZSBzb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mIGZyZWUgc29mdHdhcmUuIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbiBub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUgb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcgc3lzdGVtLgorCitBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZSB1c2Vyc2AgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcyBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4gdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4gUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0IGJlIGNvbWJpbmVkIHdpdGggdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gcnVuLgorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyIHByb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YSBwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMgKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsgd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuIEEgIndvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20gc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yIHdyaXRpbmcgaXQpLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcyBhbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeWBzIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIExpYnJhcnkuCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKK2EpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KK2IpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eSBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKyhGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUgYXBwbGljYXRpb24uIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueSBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZSByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkgd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKzMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiBUbyBkbyB0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvIHRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkgdGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluIHRoZXNlIG5vdGljZXMuCisKK09uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IgdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mIHRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvIGRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUgTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvciBsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gU3VjaCBhIHdvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQgdGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSBjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKK1doZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4gV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUgbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuIFRoZSB0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCitJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUgZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdCBmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlIHdvcmsuIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuIEFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisKKzYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yIGxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhIHdvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXJgcyBvd24gdXNlIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSB3b3JrIGR1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gQWxzbywgeW91IG11c3QgZG8gb25lIG9mIHRoZXNlIHRoaW5nczoKKworYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuIChJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZSBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKK2IpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZSBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyYHMgY29tcHV0ZXIgc3lzdGVtLCByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZiB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCitjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCitkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0l0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlIHJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90IHVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UgZGlzdHJpYnV0ZS4KKworNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkIGxpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UgcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLiBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTZWN0aW9ucyBhYm92ZS4KK2IpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0IHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKzguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LCBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhIGxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKK05PIFdBUlJBTlRZCisKKzE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQlJBUlkgSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIExJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0IGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nIHJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCitvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5YHMgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCitDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbgordGhlIGxpYnJhcnkgYEZyb2JgIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuCitieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCitzaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTkwCitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorVGhhdGBzIGFsbCB0aGVyZSBpcyB0byBpdCEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlMjliZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0zLjAKQEAgLTAsMCArMSw2NSBAQAorR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKK0NvcHlyaWdodCDCqSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1RoaXMgdmVyc2lvbiBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgc3VwcGxlbWVudGVkIGJ5IHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGxpc3RlZCBiZWxvdy4KKzAuIEFkZGl0aW9uYWwgRGVmaW5pdGlvbnMuCisKK0FzIHVzZWQgaGVyZWluLCDigJx0aGlzIExpY2Vuc2XigJ0gcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIOKAnEdOVSBHUEzigJ0gcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK+KAnFRoZSBMaWJyYXJ54oCdIHJlZmVycyB0byBhIGNvdmVyZWQgd29yayBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UsIG90aGVyIHRoYW4gYW4gQXBwbGljYXRpb24gb3IgYSBDb21iaW5lZCBXb3JrIGFzIGRlZmluZWQgYmVsb3cuCisKK0FuIOKAnEFwcGxpY2F0aW9u4oCdIGlzIGFueSB3b3JrIHRoYXQgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgTGlicmFyeSwgYnV0IHdoaWNoIGlzIG5vdCBvdGhlcndpc2UgYmFzZWQgb24gdGhlIExpYnJhcnkuIERlZmluaW5nIGEgc3ViY2xhc3Mgb2YgYSBjbGFzcyBkZWZpbmVkIGJ5IHRoZSBMaWJyYXJ5IGlzIGRlZW1lZCBhIG1vZGUgb2YgdXNpbmcgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5LgorCitBIOKAnENvbWJpbmVkIFdvcmvigJ0gaXMgYSB3b3JrIHByb2R1Y2VkIGJ5IGNvbWJpbmluZyBvciBsaW5raW5nIGFuIEFwcGxpY2F0aW9uIHdpdGggdGhlIExpYnJhcnkuIFRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpYnJhcnkgd2l0aCB3aGljaCB0aGUgQ29tYmluZWQgV29yayB3YXMgbWFkZSBpcyBhbHNvIGNhbGxlZCB0aGUg4oCcTGlua2VkIFZlcnNpb27igJ0uCisKK1RoZSDigJxNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNl4oCdIGZvciBhIENvbWJpbmVkIFdvcmsgbWVhbnMgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciB0aGUgQ29tYmluZWQgV29yaywgZXhjbHVkaW5nIGFueSBzb3VyY2UgY29kZSBmb3IgcG9ydGlvbnMgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCwgY29uc2lkZXJlZCBpbiBpc29sYXRpb24sIGFyZSBiYXNlZCBvbiB0aGUgQXBwbGljYXRpb24sIGFuZCBub3Qgb24gdGhlIExpbmtlZCBWZXJzaW9uLgorCitUaGUg4oCcQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2Rl4oCdIGZvciBhIENvbWJpbmVkIFdvcmsgbWVhbnMgdGhlIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSBmb3IgdGhlIEFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgQ29tYmluZWQgV29yayBmcm9tIHRoZSBBcHBsaWNhdGlvbiwgYnV0IGV4Y2x1ZGluZyB0aGUgU3lzdGVtIExpYnJhcmllcyBvZiB0aGUgQ29tYmluZWQgV29yay4KKzEuIEV4Y2VwdGlvbiB0byBTZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCisKK1lvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIHVuZGVyIHNlY3Rpb25zIDMgYW5kIDQgb2YgdGhpcyBMaWNlbnNlIHdpdGhvdXQgYmVpbmcgYm91bmQgYnkgc2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLgorMi4gQ29udmV5aW5nIE1vZGlmaWVkIFZlcnNpb25zLgorCitJZiB5b3UgbW9kaWZ5IGEgY29weSBvZiB0aGUgTGlicmFyeSwgYW5kLCBpbiB5b3VyIG1vZGlmaWNhdGlvbnMsIGEgZmFjaWxpdHkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBBcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIGZhY2lsaXR5IChvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eSBpcyBpbnZva2VkKSwgdGhlbiB5b3UgbWF5IGNvbnZleSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb246CisKKyAgICAqIGEpIHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCB5b3UgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gQXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHRoZSBmdW5jdGlvbiBvciBkYXRhLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bCwgb3IKKyAgICAqIGIpIHVuZGVyIHRoZSBHTlUgR1BMLCB3aXRoIG5vbmUgb2YgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGFwcGxpY2FibGUgdG8gdGhhdCBjb3B5LgorCiszLiBPYmplY3QgQ29kZSBJbmNvcnBvcmF0aW5nIE1hdGVyaWFsIGZyb20gTGlicmFyeSBIZWFkZXIgRmlsZXMuCisKK1RoZSBvYmplY3QgY29kZSBmb3JtIG9mIGFuIEFwcGxpY2F0aW9uIG1heSBpbmNvcnBvcmF0ZSBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LiBZb3UgbWF5IGNvbnZleSBzdWNoIG9iamVjdCBjb2RlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0LCBpZiB0aGUgaW5jb3Jwb3JhdGVkIG1hdGVyaWFsIGlzIG5vdCBsaW1pdGVkIHRvIG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIG9yIHNtYWxsIG1hY3JvcywgaW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGVzICh0ZW4gb3IgZmV3ZXIgbGluZXMgaW4gbGVuZ3RoKSwgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgICogYSkgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBvYmplY3QgY29kZSB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorICAgICogYikgQWNjb21wYW55IHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorCis0LiBDb21iaW5lZCBXb3Jrcy4KKworWW91IG1heSBjb252ZXkgYSBDb21iaW5lZCBXb3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlIHRoYXQsIHRha2VuIHRvZ2V0aGVyLCBlZmZlY3RpdmVseSBkbyBub3QgcmVzdHJpY3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSBjb250YWluZWQgaW4gdGhlIENvbWJpbmVkIFdvcmsgYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMsIGlmIHlvdSBhbHNvIGRvIGVhY2ggb2YgdGhlIGZvbGxvd2luZzoKKworICAgICogYSkgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisgICAgKiBiKSBBY2NvbXBhbnkgdGhlIENvbWJpbmVkIFdvcmsgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKyAgICAqIGMpIEZvciBhIENvbWJpbmVkIFdvcmsgdGhhdCBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcyBkdXJpbmcgZXhlY3V0aW9uLCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVzZSBub3RpY2VzLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29waWVzIG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisgICAgKiBkKSBEbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICBvIDApIENvbnZleSB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZSBpbiBhIGZvcm0gc3VpdGFibGUgZm9yLCBhbmQgdW5kZXIgdGVybXMgdGhhdCBwZXJtaXQsIHRoZSB1c2VyIHRvIHJlY29tYmluZSBvciByZWxpbmsgdGhlIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaW5rZWQgVmVyc2lvbiB0byBwcm9kdWNlIGEgbW9kaWZpZWQgQ29tYmluZWQgV29yaywgaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMIGZvciBjb252ZXlpbmcgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisgICAgICAgICAgbyAxKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUgTGlicmFyeS4gQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKGEpIHVzZXMgYXQgcnVuIHRpbWUgYSBjb3B5IG9mIHRoZSBMaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwgYW5kIChiKSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkgdGhhdCBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSBMaW5rZWQgVmVyc2lvbi4KKyAgICAqIGUpIFByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLCBidXQgb25seSBpZiB5b3Ugd291bGQgb3RoZXJ3aXNlIGJlIHJlcXVpcmVkIHRvIHByb3ZpZGUgc3VjaCBpbmZvcm1hdGlvbiB1bmRlciBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwsIGFuZCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdCBzdWNoIGluZm9ybWF0aW9uIGlzIG5lY2Vzc2FyeSB0byBpbnN0YWxsIGFuZCBleGVjdXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQ29tYmluZWQgV29yayBwcm9kdWNlZCBieSByZWNvbWJpbmluZyBvciByZWxpbmtpbmcgdGhlIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaW5rZWQgVmVyc2lvbi4gKElmIHlvdSB1c2Ugb3B0aW9uIDRkMCwgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBtdXN0IGFjY29tcGFueSB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbmQgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlLiBJZiB5b3UgdXNlIG9wdGlvbiA0ZDEsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBpbiB0aGUgbWFubmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZyBDb3JyZXNwb25kaW5nIFNvdXJjZS4pCisKKzUuIENvbWJpbmVkIExpYnJhcmllcy4KKworWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHNpZGUgYnkgc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIG5vdCBBcHBsaWNhdGlvbnMgYW5kIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBjb252ZXkgc3VjaCBhIGNvbWJpbmVkIGxpYnJhcnkgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIGlmIHlvdSBkbyBib3RoIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAqIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcywgY29udmV5ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICAqIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworNi4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIOKAnG9yIGFueSBsYXRlciB2ZXJzaW9u4oCdIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBwdWJsaXNoZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK0lmIHRoZSBMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hldGhlciBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzaGFsbCBhcHBseSwgdGhhdCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhbnkgdmVyc2lvbiBpcyBwZXJtYW5lbnQgYXV0aG9yaXphdGlvbiBmb3IgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBMaWJyYXJ5LgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUEwtMS4wMiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBMLTEuMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzMzc0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBMLTEuMDIKQEAgLTAsMCArMSw3NiBAQAorCitMdWNlbnQgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAyIAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2luIHRoZSBjYXNlIG9mIEx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiAoIkxVQ0VOVCIpLCB0aGUgT3JpZ2luYWwgUHJvZ3JhbSwgYW5kCitpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yLAorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Cit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3ZXJlIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcmBzIGJlaGFsZiwgYW5kIHRoZSBDb250cmlidXRvciBleHBsaWNpdGx5IGNvbnNlbnRzLCBpbiBhY2NvcmRhbmNlIHdpdGggU2VjdGlvbiAzQywgdG8gY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIGFzIENvbnRyaWJ1dGlvbnMuCisiQ29udHJpYnV0b3IiIG1lYW5zIExVQ0VOVCBhbmQgYW55IG90aGVyIGVudGl0eSB0aGF0IGhhcyBDb250cmlidXRlZCBhIENvbnRyaWJ1dGlvbiB0byB0aGUgUHJvZ3JhbS4KKworIkRpc3RyaWJ1dG9yIiBtZWFucyBhIFJlY2lwaWVudCB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLCBtb2RpZmljYXRpb25zIHRvIHRoZSBQcm9ncmFtLCBvciBhbnkgcGFydCB0aGVyZW9mLgorCisiTGljZW5zZWQgUGF0ZW50cyIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIk9yaWdpbmFsIFByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSBhY2NvbXBhbnlpbmcgdGhpcyBBZ3JlZW1lbnQgYXMgcmVsZWFzZWQgYnkgTFVDRU5ULCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBpZiBhbnkuCisKKyJQcm9ncmFtIiBtZWFucyB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgQ29udHJpYnV0aW9ucyBvciBhbnkgcGFydCB0aGVyZW9mCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoZSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3Igc2hhbGwgYWxzbyBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBvZiB0aGF0IENvbnRyaWJ1dG9yIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2UgZ3JhbnRlZCBieSBhIENvbnRyaWJ1dG9yIHNoYWxsIG5vdCBhcHBseSB0byAoaSkgYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24sIG5vciB0byAoaWkpIENvbnRyaWJ1dGlvbnMgb2Ygb3RoZXIgQ29udHJpYnV0b3JzLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCiszLiBSRVFVSVJFTUVOVFMKKworQS4gRGlzdHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGFueSBmb3JtIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OworaWYgdGhlIFByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUgb3Igb3RoZXIgdGFuZ2libGUgZm9ybSwgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG9yIERpc3RyaWJ1dG9yYHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50IGlzIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtOyBhbmQKK2lmIGRpc3RyaWJ1dGVkIHVuZGVyIERpc3RyaWJ1dG9yYHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBzdWNoIGxpY2Vuc2UgYWdyZWVtZW50OgorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOyBhbmQKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHkuCitCLiBFYWNoIERpc3RyaWJ1dG9yIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluIGEgY29uc3BpY3VvdXMgbG9jYXRpb24gaW4gdGhlIFByb2dyYW06CisKK0NvcHlyaWdodCAoQykgMjAwMywgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDLiBJbiBhZGRpdGlvbiwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIEFsc28sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBhZ3JlZSB0aGF0IHRoZSBhZGRpdGlvbnMgYW5kL29yIGNoYW5nZXMgYXJlIGludGVuZGVkIHRvIGJlIGEgQ29udHJpYnV0aW9uLiBPbmNlIGEgQ29udHJpYnV0aW9uIGlzIGNvbnRyaWJ1dGVkLCBpdCBtYXkgbm90IHRoZXJlYWZ0ZXIgYmUgcmV2b2tlZC4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBEaXN0cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBEaXN0cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBEaXN0cmlidXRvciAoIkNvbW1lcmNpYWwgRGlzdHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgRGlzdHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IERpc3RyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBEaXN0cmlidXRvcmBzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEVYUE9SVCBDT05UUk9MCisKK1JlY2lwaWVudCBhZ3JlZXMgdGhhdCBSZWNpcGllbnQgYWxvbmUgaXMgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVW5pdGVkIFN0YXRlcyBleHBvcnQgYWRtaW5pc3RyYXRpb24gcmVndWxhdGlvbnMgKGFuZCB0aGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgcmVndWxhdGlvbiBvZiBhbnkgb3RoZXIgY291bnRyaWVzKS4KKworOC4gR0VORVJBTAorCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkgdGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbiBhZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRgcyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnRgcyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworQWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudGBzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuCisKK0xVQ0VOVCBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lIG90aGVyIHRoYW4gTFVDRU5UIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZWYzNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4wCkBAIC0wLDAgKzEsMjEzIEBACisKK0xhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKK0xQUEwgVmVyc2lvbiAxLjAgIDE5OTktMDMtMDEKKworQ29weXJpZ2h0IDE5OTkgTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gaXMgbm90IGFsbG93ZWQuCisKKworUHJlYW1ibGUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUKK2Jhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGlzIGRpc3RyaWJ1dGVkLiBBcyBkZXNjcmliZWQgYmVsb3cgeW91IG1heSB1c2UKK3RoaXMgbGljZW5jZSBmb3IgYW55IHNvZnR3YXJlIHRoYXQgeW91IHdpc2ggdG8gZGlzdHJpYnV0ZS4gCisKK0l0IG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91ciBzb2Z0d2FyZSBpcyBUZVggcmVsYXRlZCAoc3VjaAorYXMgYSBMYVRlWCBwYWNrYWdlIGZpbGUpIGJ1dCBpdCBtYXkgYmUgdXNlZCBmb3IgYW55IHNvZnR3YXJlLCBldmVuIGlmCitpdCBpcyB1bnJlbGF0ZWQgdG8gVGVYLgorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCB0aGUgZmlsZXMgb2YgeW91ciBkaXN0cmlidXRpb24gc2hvdWxkIGhhdmUgYW4KK2V4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgZ2l2aW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIsIHRvZ2V0aGVyCit3aXRoIGEgcmVmZXJlbmNlIHRvIHRoaXMgbGljZW5zZS4KKworQSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmUKKworICAgJSUgcGlnLnN0eQorICAgJSUgQ29weXJpZ2h0IDIwMDEgTS4gWS4gTmFtZQorCisgICAlIFRoaXMgcHJvZ3JhbSBjYW4gcmVkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zCisgICAlIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIERpc3RyaWJ1dGVkIGZyb20gQ1RBTgorICAgJSBhcmNoaXZlcyBpbiBkaXJlY3RvcnkgbWFjcm9zL2xhdGV4L2Jhc2UvbHBwbC50eHQ7IGVpdGhlcgorICAgJSB2ZXJzaW9uIDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK0dpdmVuIHN1Y2ggYSBub3RpY2UgaW4gdGhlIGZpbGUsIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgZG9jdW1lbnQgd291bGQKK2FwcGx5LCB3aXRoOgorCitgVGhlIFByb2dyYW1gIHJlZmVycmluZyB0byB0aGUgc29mdHdhcmUgYHBpZy5zdHlgICBhbmQgCitgVGhlIENvcHlyaWdodCBIb2xkZXJgIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworVG8gc2VlIGEgcmVhbCBleGFtcGxlLCBzZWUgdGhlIGZpbGUgbGVnYWwudHh0IHdoaWNoIGNhcnJpZXMgdGhlCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgYmFzZSBsYXRleCBkaXN0cmlidXRpb24uCisKK1RoaXMgbGljZW5zZSBnaXZlcyB0ZXJtcyB1bmRlciB3aGljaCBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmUKK2Rpc3RyaWJ1dGVkIGFuZCBtb2RpZmllZC4gSW5kaXZpZHVhbCBmaWxlcyBtYXkgaGF2ZSBzcGVjaWZpYyBmdXJ0aGVyCitjb25zdHJhaW50cyBvbiBtb2RpZmljYXRpb24sIGJ1dCBubyBmaWxlIHNob3VsZCBoYXZlIHJlc3RyaWN0aW9ucyBvbgorZGlzdHJpYnV0aW9uIG90aGVyIHRoYW4gdGhvc2Ugc3BlY2lmaWVkIGJlbG93LiAKK1RoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYSBkaXN0cmlidXRvciB3aXNoaW5nIHRvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZQordW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIG5lZWQgb25seSBjaGVjayB0aGUgY29uZGl0aW9ucyBpbiB0aGlzCitmaWxlLCBhbmQgZG9lcyBub3QgbmVlZCB0byBjaGVjayBldmVyeSBmaWxlIGluIFRoZSBQcm9ncmFtIGZvciBleHRyYQorcmVzdHJpY3Rpb25zLiBJZiB5b3UgZG8gbmVlZCB0byBtb2RpZnkgdGhlIGRpc3RyaWJ1dGlvbiB0ZXJtcyBvZiBzb21lCitmaWxlcywgZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSwgaW5zdGVhZCBkaXN0cmlidXRlIFRoZSBQcm9ncmFtCit1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiBZb3UgbWF5IHVzZSB0aGUgcGFydHMgb2YgdGhlIHRleHQgb2YgTFBQTCBhcworYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZSBzaG91bGQgbm90IGRpcmVjdGx5IHJlZmVyCit0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IFRoZSBQcm9ncmFtIGlzCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4gCisKKworCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1Rlcm1zIEFuZCBDb25kaXRpb25zIEZvciBDb3B5aW5nLCBEaXN0cmlidXRpb24gQW5kIE1vZGlmaWNhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworV0FSUkFOVFkKKz09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBUaGUgUHJvZ3JhbSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkKK2FwcGxpY2FibGUgbGF3LiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nLCBUaGUKK0NvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzYCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueQora2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlCitpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIKK3B1cnBvc2UuICBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZQorcHJvZ3JhbSBpcyB3aXRoIHlvdS4gIFNob3VsZCBUaGUgUHJvZ3JhbSBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUKK3RoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nCit3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgb2YgdGhlIGluZGl2aWR1YWwgYXV0aG9ycyBuYW1lZCBpbgordGhlIHNvdXJjZSBmb3IgVGhlIFByb2dyYW0sIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZworYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0CitvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3NzIG9mIGRhdGEgb3IgZGF0YSBiZWluZyByZW5kZXJlZAoraW5hY2N1cmF0ZSBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IHlvdSBvciBieSB0aGlyZCBwYXJ0aWVzIGFzIGEgcmVzdWx0CitvZiBhIGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlciBwcm9ncmFtcyksIGV2ZW4KK2lmIHN1Y2ggaG9sZGVyIG9yIG90aGVyIHBhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mCitzdWNoIGRhbWFnZXMuCisKKworRElTVFJJQlVUSU9OCis9PT09PT09PT09PT0KKworUmVkaXN0cmlidXRpb24gb2YgdW5jaGFuZ2VkIGZpbGVzIGlzIGFsbG93ZWQgcHJvdmlkZWQgdGhhdCBhbGwgZmlsZXMKK3RoYXQgbWFrZSB1cCB0aGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtIGFyZSBkaXN0cmlidXRlZC4KK0luIHBhcnRpY3VsYXIgdGhpcyBtZWFucyB0aGF0IFRoZSBQcm9ncmFtIGhhcyB0byBiZSBkaXN0cmlidXRlZAoraW5jbHVkaW5nIGl0cyBkb2N1bWVudGF0aW9uIGlmIGRvY3VtZW50YXRpb24gd2FzIHBhcnQgb2YgdGhlIG9yaWdpbmFsCitkaXN0cmlidXRpb24uCisKK1RoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0gd2lsbCBjb250YWluIGEgcHJvbWluZW50IGZpbGUKK2xpc3RpbmcgYWxsIHRoZSBmaWxlcyBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZS4KKworSWYgeW91IHJlY2VpdmUgb25seSBzb21lIG9mIHRoZXNlIGZpbGVzIGZyb20gc29tZW9uZSwgY29tcGxhaW4hCisKK1RoZSBkaXN0cmlidXRpb24gb2YgY2hhbmdlZCB2ZXJzaW9ucyBvZiBjZXJ0YWluIGZpbGVzIGluY2x1ZGVkIGluIHRoZQorVGhlIFByb2dyYW0sIGFuZCB0aGUgcmV1c2Ugb2YgY29kZSBmcm9tIFRoZSBQcm9ncmFtLCBhcmUgYWxsb3dlZAordW5kZXIgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAqIEl0IGlzIGFsbG93ZWQgb25seSBpZiB0aGUgbGVnYWwgbm90aWNlIGluIHRoZSBmaWxlIGRvZXMgbm90CisgICBleHByZXNzbHkgZm9yYmlkIGl0LgorICAgU2VlIG5vdGUgYmVsb3csIHVuZGVyICJDb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMiLgorIAorICogWW91IHJlbmFtZSB0aGUgZmlsZSBiZWZvcmUgeW91IG1ha2UgYW55IGNoYW5nZXMgdG8gaXQsIHVubGVzcyB0aGUKKyAgIGZpbGUgZXhwbGljaXRseSBzYXlzIHRoYXQgcmVuYW1pbmcgaXMgbm90IHJlcXVpcmVkLiAgQW55IHN1Y2ggY2hhbmdlZAorICAgZmlsZXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBhIGxpY2Vuc2UgdGhhdCBmb3JiaWRzIGRpc3RyaWJ1dGlvbgorICAgb2YgdGhvc2UgZmlsZXMsIGFuZCBhbnkgZmlsZXMgZGVyaXZlZCBmcm9tIHRoZW0sIHVuZGVyIHRoZSBuYW1lcyB1c2VkCisgICBieSB0aGUgb3JpZ2luYWwgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUgUHJvZ3JhbS4KKworICogWW91IGNoYW5nZSBhbnkgYGlkZW50aWZpY2F0aW9uIHN0cmluZ2AgaW4gVGhlIFByb2dyYW0gdG8gY2xlYXJseSAKKyAgIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgaXMgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkIHN5c3RlbS4KKworICogSWYgVGhlIFByb2dyYW0gaW5jbHVkZXMgYW4gYGVycm9yIHJlcG9ydCBhZGRyZXNzYCBzbyB0aGF0IGVycm9ycworICAgbWF5IGJlIHJlcG9ydGVkIHRvIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBvdGhlciBzcGVjaWZpZWQKKyAgIGFkZHJlc3NlcywgdGhpcyBhZGRyZXNzIG11c3QgYmUgY2hhbmdlZCBpbiBhbnkgbW9kaWZpZWQgdmVyc2lvbnMgb2YKKyAgIFRoZSBQcm9ncmFtLCBzbyB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vdCBtYWludGFpbmVkIGJ5IHRoZQorICAgb3JpZ2luYWwgcHJvZ3JhbSBtYWludGFpbmVycyBhcmUgZGlyZWN0ZWQgdG8gdGhlIG1haW50YWluZXJzIG9mIHRoZQorICAgY2hhbmdlZCBmaWxlcy4gCisKKyAqIFlvdSBhY2tub3dsZWRnZSB0aGUgc291cmNlIGFuZCBhdXRob3JzaGlwIG9mIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCisgICBpbiB0aGUgbW9kaWZpZWQgZmlsZS4KKworICogWW91IGFsc28gZGlzdHJpYnV0ZSB0aGUgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIG9yCisgICBhbHRlcm5hdGl2ZWx5IHByb3ZpZGUgc3VmZmljaWVudCBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoZQorICAgdXNlciBvZiB5b3VyIG1vZGlmaWVkIGZpbGUgY2FuIGJlIHJlYXNvbmFibHkgZXhwZWN0ZWQgdG8gYmUKKyAgIGFibGUgdG8gb2J0YWluIGFuIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0uCisgICBGb3IgZXhhbXBsZSwgeW91IG1heSBzcGVjaWZ5IGEgVVJMIHRvIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3QKKyAgIHdpbGwgZnJlZWx5IHByb3ZpZGUgdGhlIHVzZXIgd2l0aCBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKGVpdGhlcgorICAgdGhlIHZlcnNpb24gb24gd2hpY2ggeW91ciBtb2RpZmljYXRpb24gaXMgYmFzZWQsIG9yIHBlcmhhcHMgYQorICAgbGF0ZXIgdmVyc2lvbikuCisKKyAqIElmIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCwgb3IgaXMgYmFzZWQgb24sIExhVGVYLAorICAgdGhlbiBmaWxlcyB3aXRoIHRoZSBmb2xsb3dpbmcgZmlsZSBleHRlbnNpb25zIHdoaWNoIGhhdmUgc3BlY2lhbAorICAgbWVhbmluZyBpbiBMYVRlWCBTb2Z0d2FyZSwgaGF2ZSBzcGVjaWFsIG1vZGlmaWNhdGlvbiBydWxlcyB1bmRlciB0aGUKKyAgIGxpY2Vuc2U6CisgCisgICAgLSBGaWxlcyB3aXRoIGV4dGVuc2lvbiBgLmluc2AgKGluc3RhbGxhdGlvbiBmaWxlcyk6IHRoZXNlIGZpbGVzIG1heQorICAgICAgbm90IGJlIG1vZGlmaWVkIGF0IGFsbCBiZWNhdXNlIHRoZXkgY29udGFpbiB0aGUgbGVnYWwgbm90aWNlcworICAgICAgdGhhdCBhcmUgcGxhY2VkIGluIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisgCisgICAgLSBGaWxlcyB3aXRoIGV4dGVuc2lvbiBgLmZkYCAoTGFUZVggZm9udCBkZWZpbml0aW9ucyBmaWxlcyk6IHRoZXNlCisgICAgICBmaWxlcyBhcmUgYWxsb3dlZCB0byBiZSBtb2RpZmllZCB3aXRob3V0IGNoYW5naW5nIHRoZSBuYW1lLCBidXQKKyAgICAgIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiBhbGwgYXZhaWxhYmxlIGZvbnRzIGFuZCB0byBwcmV2ZW50IGF0dGVtcHRzCisgICAgICB0byBhY2Nlc3MgdW5hdmFpbGFibGUgZm9udHMuIEhvd2V2ZXIsIG1vZGlmaWVkIGZpbGVzIGFyZSBub3QKKyAgICAgIGFsbG93ZWQgdG8gYmUgZGlzdHJpYnV0ZWQgaW4gcGxhY2Ugb2Ygb3JpZ2luYWwgZmlsZXMuCisgCisgICAgLSBGaWxlcyB3aXRoIGV4dGVuc2lvbiBgLmNmZ2AgKGNvbmZpZ3VyYXRpb24gZmlsZXMpOiB0aGVzZSBmaWxlcworICAgICAgY2FuIGJlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdG8gZW5hYmxlIGVhc3kgY29uZmlndXJhdGlvbiBvZiB0aGUKKyAgICAgIHN5c3RlbS4gIFRoZSBkb2N1bWVudGF0aW9uIGluIGNmZ2d1aWRlLnRleCBpbiB0aGUgYmFzZSBMYVRlWAorICAgICAgZGlzdHJpYnV0aW9uIGRlc2NyaWJlcyB3aGVuIGl0IG1ha2VzIHNlbnNlIHRvIG1vZGlmeSBvciBnZW5lcmF0ZQorICAgICAgc3VjaCBmaWxlcy4KKyAKKworVGhlIGFib3ZlIHJlc3RyaWN0aW9ucyBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8KK25vdCBhcHBseSB0bywgdGhlIHVwZGF0aW5nLCBieSBhbnkgbWV0aG9kLCBvZiBhIGZpbGUgc28gdGhhdCBpdAorYmVjb21lcyBpZGVudGljYWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoYXQgZmlsZSBpbiBUaGUgUHJvZ3JhbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05PVEVTCis9PT09PQorCitXZSBiZWxpZXZlIHRoYXQgdGhlc2UgcmVxdWlyZW1lbnRzIGdpdmUgeW91IHRoZSBmcmVlZG9tIHlvdSB0byBtYWtlCittb2RpZmljYXRpb25zIHRoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3UKK3dpc2gsIHdoaWxzdCBtYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHkgYW5kIHJlbGlhYmlsaXR5IG9mCitUaGUgUHJvZ3JhbS4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsc3QKK2FkaGVyaW5nIHRvIHRoZXNlIHJlcXVpcmVtZW50cyB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGNmZ2d1aWRlLnRleAoraW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4gCisKK0JlY2F1c2Ugb2YgdGhlIHBvcnRhYmlsaXR5IGFuZCBleGNoYW5nZWFiaWxpdHkgYXNwZWN0cyBvZiBzeXN0ZW1zCitsaWtlIExhVGVYLCBUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mCitub24tc3RhbmRhcmQgdmVyc2lvbnMgb2YgY29tcG9uZW50cyBvZiBMYVRlWCBvciBvZiBnZW5lcmFsbHkgYXZhaWxhYmxlCitjb250cmlidXRlZCBjb2RlIGZvciB0aGVtIGJ1dCBzdWNoIGRpc3RyaWJ1dGlvbnMgYXJlIHBlcm1pdHRlZCB1bmRlciB0aGUKK2Fib3ZlIHJlc3RyaWN0aW9ucy4KKworVGhlIGRvY3VtZW50IG1vZGd1aWRlLnRleCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZGV0YWlscwordGhlIHJlYXNvbnMgZm9yIHRoZSBsZWdhbCByZXF1aXJlbWVudHMgZGV0YWlsZWQgYWJvdmUuCitFdmVuIGlmIFRoZSBQcm9ncmFtIGlzIHVucmVsYXRlZCB0byBMYVRlWCwgdGhlIGFyZ3VtZW50IGluCittb2RndWlkZS50ZXggbWF5IHN0aWxsIGFwcGx5LCBhbmQgc2hvdWxkIGJlIHJlYWQgYmVmb3JlCithIG1vZGlmaWVkIHZlcnNpb24gb2YgVGhlIFByb2dyYW0gaXMgZGlzdHJpYnV0ZWQuCisKKworQ29uZGl0aW9ucyBvbiBpbmRpdmlkdWFsIGZpbGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGluZGl2aWR1YWwgZmlsZXMgbWF5IGJlYXIgYWRkaXRpb25hbCBjb25kaXRpb25zIHdoaWNoIHN1cGVyc2VkZQordGhlIGdlbmVyYWwgY29uZGl0aW9ucyBvbiBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBjb250YWluZWQgaW4KK3RoaXMgZmlsZS4gSWYgdGhlcmUgYXJlIGFueSBzdWNoIGZpbGVzLCB0aGUgZGlzdHJpYnV0aW9uIG9mIFRoZQorUHJvZ3JhbSB3aWxsIGNvbnRhaW4gYSBwcm9taW5lbnQgZmlsZSB0aGF0IGxpc3RzIGFsbCB0aGUgZXhjZXB0aW9uYWwKK2ZpbGVzLgorCitUeXBpY2FsIGV4YW1wbGVzIG9mIGZpbGVzIHdpdGggbW9yZSByZXN0cmljdGl2ZSBtb2RpZmljYXRpb24KK2NvbmRpdGlvbnMgd291bGQgYmUgZmlsZXMgdGhhdCBjb250YWluIHRoZSB0ZXh0IG9mIGNvcHlyaWdodCBub3RpY2VzLgorCisgKiBUaGUgY29uZGl0aW9ucyBvbiBpbmRpdmlkdWFsIGZpbGVzIGRpZmZlciBvbmx5IGluIHRoZQorICAgZXh0ZW50IG9mICptb2RpZmljYXRpb24qIHRoYXQgaXMgYWxsb3dlZC4KKworICogVGhlIGNvbmRpdGlvbnMgb24gKmRpc3RyaWJ1dGlvbiogYXJlIHRoZSBzYW1lIGZvciBhbGwgdGhlIGZpbGVzLgorICAgVGh1cyBhIChyZSlkaXN0cmlidXRvciBvZiBhIGNvbXBsZXRlLCB1bmNoYW5nZWQgY29weSBvZiBUaGUgUHJvZ3JhbQorICAgbmVlZCBtZWV0IG9ubHkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBmaWxlOyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvCisgICBjaGVjayB0aGUgaGVhZGVyIG9mIGV2ZXJ5IGZpbGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiB0byBjaGVjayB0aGF0IGEKKyAgIGRpc3RyaWJ1dGlvbiBtZWV0cyB0aGVzZSByZXF1aXJlbWVudHMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODMzMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4xCkBAIC0wLDAgKzEsMzE2IEBACisKKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKK0xQUEwgVmVyc2lvbiAxLjEgIDE5OTktMDctMTAKKworQ29weXJpZ2h0IDE5OTkgTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKKyAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKK1BSRUFNQkxFCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlCitiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBpcyBkaXN0cmlidXRlZC4KKworWW91IG1heSB1c2UgdGhpcyBsaWNlbnNlIGZvciBhbnkgcHJvZ3JhbSB0aGF0IHlvdSBoYXZlIHdyaXR0ZW4gYW5kIHdpc2gKK3RvIGRpc3RyaWJ1dGUuICBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyCitwcm9ncmFtIGlzIFRlWC1yZWxhdGVkIChzdWNoIGFzIGEgTGFUZVggcGFja2FnZSksIGJ1dCB5b3UgbWF5IHVzZSBpdAorZXZlbiBpZiB5b3VyIHByb2dyYW0gaXMgdW5yZWxhdGVkIHRvIFRlWC4gIFRoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cKK1RPIERJU1RSSUJVVEUgUFJPR1JBTVMgVU5ERVIgVEhJUyBMSUNFTlNFYCwgYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywKK2V4YW1wbGVzLCBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcKK2Rpc3RyaWJ1dGluZyB0aGVpciBwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK0luIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYFRoZSBQcm9ncmFtYCByZWZlcnMgdG8gYW55IHByb2dyYW0KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggVGhlIFByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkCithbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmUKK2Rpc3RyaWJ1dGVkLiAgSW5kaXZpZHVhbCBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5CithbmQvb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiBtb2RpZmljYXRpb24gb2YgdGhlbXNlbHZlcyBhbmQgb24gdGhlCitkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlbXNlbHZlcywgYnV0ICpubyogZmlsZSBvZiBUaGUKK1Byb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeSBvciBzdXBlcnNlZGluZyBjb25kaXRpb25zIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGUgZmlsZS4gIEEgZGlzdHJpYnV0b3Igd2lzaGluZwordG8gZGlzdHJpYnV0ZSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlCituZWVkcyB0byBjaGVjayB0aGUgY29uZGl0aW9ucyBvbmx5IGluIHRoaXMgbGljZW5zZSBhbmQgbm93aGVyZSBlbHNlLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgVGhlIFByb2dyYW0KK2FyZSBub3QgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgSW4KK3BhcnRpY3VsYXIsIHRoZSBhY3Qgb2YgcnVubmluZyBUaGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZC4KKworV2UsIHRoZSBMYVRlWDMgUHJvamVjdCwgYmVsaWV2ZSB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGdpdmUgeW91Cit0aGUgZnJlZWRvbSB0byBtYWtlIGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtCit0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91IHdpc2ggd2hpbGUKK21haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgYW5kIHJlbGlhYmlsaXR5IG9mCitUaGUgUHJvZ3JhbS4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZSAKK21lZXRpbmcgdGhlc2UgY29uZGl0aW9ucywgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBgY2ZnZ3VpZGUudGV4YAoraW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitDT05ESVRJT05TIE9OIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0uCitEaXN0cmlidXRpb24gb2Ygb25seSBwYXJ0IG9mIFRoZSBQcm9ncmFtIGlzIG5vdCBhbGxvd2VkLgorCitZb3UgbWF5IG5vdCBtb2RpZnkgaW4gYW55IHdheSBhIGZpbGUgb2YgVGhlIFByb2dyYW0gdGhhdCBiZWFycyBhIGxlZ2FsCitub3RpY2UgZm9yYmlkZGluZyBtb2RpZmljYXRpb24gb2YgdGhhdCBmaWxlLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCBmaWxlIG9mIFRoZSBQcm9ncmFtIGlmLCBhbmQgb25seSBpZiwgdGhlCitmb2xsb3dpbmcgZWlnaHQgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgIDEuIFlvdSBtdXN0IG1lZXQgYW55IGFkZGl0aW9uYWwgY29uZGl0aW9ucyBib3JuZSBieSB0aGUgZmlsZSBvbiB0aGUKKyAgICAgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBhcyBkZXNjcmliZWQgYmVsb3cKKyAgICAgaW4gdGhlIHN1YnNlY3Rpb24gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBJbmRpdmlkdWFsIEZpbGVzIG9mCisgICAgIFRoZSBQcm9ncmFtYC4KKyAKKyAgMi4gSWYgdGhlIGZpbGUgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlLCB0aGVuIHlvdSBtdXN0IG1lZXQgYW55CisgICAgIGFwcGxpY2FibGUgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZAorICAgICB2ZXJzaW9uIG9mIHRoZSBmaWxlIHRoYXQgYXJlIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc3Vic2VjdGlvbgorICAgICBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzYC4KKyAKKyAgMy4gWW91IG11c3Qgbm90IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlCisgICAgIG9yaWdpbmFsIGZpbGUuCisgCisgIDQuIEluIHRoZSBtb2RpZmllZCBmaWxlLCB5b3UgbXVzdCBhY2tub3dsZWRnZSB0aGUgYXV0aG9yc2hpcCBhbmQKKyAgICAgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHRoZSBuYW1lIChpZiBhbnkpIG9mIHRoZSBwcm9ncmFtCisgICAgIHdoaWNoIGNvbnRhaW5zIGl0LgorIAorICA1LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGlkZW50aWZpY2F0aW9uIHN0cmluZyBpbiB0aGUgZmlsZSB0byBpbmRpY2F0ZQorICAgICBjbGVhcmx5IHRoYXQgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbm90IHBhcnQgb2YgVGhlIFByb2dyYW0uCisgCisgIDYuIFlvdSBtdXN0IGNoYW5nZSBhbnkgYWRkcmVzc2VzIGluIHRoZSBtb2RpZmllZCBmaWxlIGZvciB0aGUKKyAgICAgcmVwb3J0aW5nIG9mIGVycm9ycyBpbiB0aGUgZmlsZSBvciBpbiBUaGUgUHJvZ3JhbSBnZW5lcmFsbHkgdG8KKyAgICAgZW5zdXJlIHRoYXQgcmVwb3J0cyBmb3IgZmlsZXMgbm8gbG9uZ2VyIG1haW50YWluZWQgYnkgdGhlIG9yaWdpbmFsCisgICAgIG1haW50YWluZXJzIHdpbGwgYmUgZGlyZWN0ZWQgdG8gdGhlIG1haW50YWluZXJzIG9mIHRoZSBtb2RpZmllZAorICAgICBmaWxlcy4KKyAKKyAgNy4gWW91IG11c3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB1bmRlciBhIGxpY2Vuc2UgdGhhdCBmb3JiaWRzCisgICAgIGRpc3RyaWJ1dGlvbiBib3RoIG9mIHRoZSBtb2RpZmllZCBmaWxlIGFuZCBvZiBhbnkgZmlsZXMgZGVyaXZlZAorICAgICBmcm9tIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorIAorICA4LiBZb3UgbXVzdCBkbyBlaXRoZXIgKEEpIG9yIChCKToKKworICAgICAgIChBKSBkaXN0cmlidXRlIGEgY29weSBvZiBUaGUgUHJvZ3JhbSAodGhhdCBpcywgYSBjb21wbGV0ZSwKKyAgICAgICAgICAgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtKSB0b2dldGhlciB3aXRoIHRoZSBtb2RpZmllZAorICAgICAgICAgICBmaWxlOyBpZiB5b3VyIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbW9kaWZpZWQgZmlsZSBpcyBtYWRlIGJ5CisgICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBmaWxlIGZyb20gYSBkZXNpZ25hdGVkCisgICAgICAgICAgIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgVGhlIFByb2dyYW0KKyAgICAgICAgICAgZnJvbSB0aGUgc2FtZSBwbGFjZSBtZWV0cyB0aGlzIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQKKyAgICAgICAgICAgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IFRoZSBQcm9ncmFtIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgIG1vZGlmaWVkIGZpbGU7CisKKyAgICAgICAoQikgcHJvdmlkZSB0byB0aG9zZSB3aG8gcmVjZWl2ZSB0aGUgbW9kaWZpZWQgZmlsZSBpbmZvcm1hdGlvbgorICAgICAgICAgICB0aGF0IGlzIHN1ZmZpY2llbnQgZm9yIHRoZW0gdG8gb2J0YWluIGEgY29weSBvZiBUaGUgUHJvZ3JhbTsKKyAgICAgICAgICAgZm9yIGV4YW1wbGUsIHlvdSBtYXkgcHJvdmlkZSBhIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvciAoVVJMKQorICAgICAgICAgICBmb3IgYSBzaXRlIHRoYXQgeW91IGV4cGVjdCB3aWxsIHByb3ZpZGUgdGhlbSB3aXRoIGEgY29weSBvZiAKKyAgICAgICAgICAgVGhlIFByb2dyYW0gZnJlZSBvZiBjaGFyZ2UgKGVpdGhlciB0aGUgdmVyc2lvbiBmcm9tIHdoaWNoCisgICAgICAgICAgIHlvdXIgbW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIG9yIHBlcmhhcHMgYSBsYXRlciB2ZXJzaW9uKS4KKworTm90ZSB0aGF0IGluIHRoZSBhYm92ZSwgYGRpc3RyaWJ1dGlvbmAgb2YgYSBmaWxlIG1lYW5zIG1ha2luZyB0aGUKK2ZpbGUgYXZhaWxhYmxlIHRvIG90aGVycyBieSBhbnkgbWVhbnMuICBUaGlzIGluY2x1ZGVzLCBmb3IgaW5zdGFuY2UsCitpbnN0YWxsaW5nIHRoZSBmaWxlIG9uIGFueSBtYWNoaW5lIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgZmlsZSBpcworYWNjZXNzaWJsZSBieSB1c2VycyBvdGhlciB0aGFuIHlvdXJzZWxmLiAgYE1vZGlmaWNhdGlvbmAgb2YgYSBmaWxlCittZWFucyBhbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBkZXJpdmF0aXZlIGZpbGUgdW5kZXIgYW55CithcHBsaWNhYmxlIGxhdyAtLSB0aGF0IGlzLCBhIGZpbGUgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBvcgorYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zCithbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0NoYW5naW5nIHRoZSBuYW1lIG9mIGEgZmlsZSBpcyBjb25zaWRlcmVkIHRvIGJlIGEgbW9kaWZpY2F0aW9uIG9mCit0aGUgZmlsZS4KKworVGhlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBkbyBub3QgaGF2ZSB0byBiZQorYXBwbGllZCB0byBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCithYm92ZSBjb25kaXRpb25zLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBDb25kaXRpb24gNy4gZG9lcyBhcHBseSB0bworYW55IHN1Y2ggbW9kaWZpZWQgZmlsZS4KKworVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSB1cGRhdGluZywgYnkgYW55IG1ldGhvZCwgb2YgYSBmaWxlIHNvIHRoYXQgaXQgYmVjb21lcworaWRlbnRpY2FsIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGF0IGZpbGUgb2YgVGhlIFByb2dyYW0uCisKKyAKKworQSBSZWNvbW1lbmRhdGlvbiBvbiBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHdpc2UgbmV2ZXIgdG8gbW9kaWZ5IGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSwgZXZlbiBmb3IgeW91ciBvd24KK3BlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGVpZ2h0IGNvbmRpdGlvbnMgZm9yCitkaXN0cmlidXRpbmcgdGhlIG1vZGlmaWVkIGZpbGUuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpZWQgZmlsZXMgd2lsbCBuZXZlciBiZSBkaXN0cmlidXRlZCwgb2Z0ZW4gdGhpcyB3aWxsIGhhcHBlbiBieQorYWNjaWRlbnQgLS0geW91IG1heSBmb3JnZXQgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCB0aGUgZmlsZTsgb3IgaXQgbWF5Citub3Qgb2NjdXIgdG8geW91IHdoZW4gYWxsb3dpbmcgb3RoZXJzIHRvIGFjY2VzcyB0aGUgbW9kaWZpZWQgZmlsZQordGhhdCB5b3UgYXJlIHRodXMgZGlzdHJpYnV0aW5nIGl0IGFuZCB2aW9sYXRpbmcgdGhlIGNvbmRpdGlvbnMgb2YKK3RoaXMgbGljZW5zZS4gIEl0IGlzIHVzdWFsbHkgaW4geW91ciBiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5CitvZiBUaGUgUHJvZ3JhbSBpZGVudGljYWwgd2l0aCB0aGUgcHVibGljIG9uZS4gIE1hbnkgcHJvZ3JhbXMgcHJvdmlkZQord2F5cyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGF0IHByb2dyYW0gd2l0aG91dCBhbHRlcmluZyBpdHMKK2xpY2Vuc2VkIGZpbGVzLgorCisKK0FkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBJbmRpdmlkdWFsIEZpbGVzIG9mIFRoZSBQcm9ncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBpbmRpdmlkdWFsIGZpbGUgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgYWRkaXRpb25hbCBjb25kaXRpb25zIHRoYXQKK3N1cHBsZW1lbnQgYW5kL29yIHN1cGVyc2VkZSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgaWYsIGFuZCBvbmx5CitpZiwgc3VjaCBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgZXhjbHVzaXZlbHkgY29uY2VybiBtb2RpZmljYXRpb24gb2YgdGhlCitmaWxlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUgY29uZGl0aW9ucworb24gaW5kaXZpZHVhbCBmaWxlcyBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUgbWF5IGRpZmZlciBvbmx5IHdpdGgKK3Jlc3BlY3QgdG8gdGhlIGtpbmQgYW5kIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb2YgdGhvc2UgZmlsZXMgdGhhdAoraXMgYWxsb3dlZCwgYW5kIHdpdGggcmVzcGVjdCB0byB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zCitvZiB0aG9zZSBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBhIGZpbGUgb2YgVGhlIFByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIExhVGVYICh0aGF0IGlzLAoraWYgaXQgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlKSwgdGhlbiB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwKK2NvbmRpdGlvbnMsIHdoaWNoIHN1cHBsZW1lbnQgYW5kL29yIHN1cGVyc2VkZSB0aGUgY29uZGl0aW9ucworYWJvdmUsIGFwcGx5IHRvIHRoZSBmaWxlIGFjY29yZGluZyB0byBpdHMgZmlsZW5hbWUgZXh0ZW5zaW9uOgorCisgIC0gWW91IG1heSBub3QgbW9kaWZ5IGFueSBmaWxlIHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uIGAuaW5zYCBzaW5jZQorICAgIHRoZXNlIGFyZSBpbnN0YWxsYXRpb24gZmlsZXMgY29udGFpbmluZyB0aGUgbGVnYWwgbm90aWNlcyB0aGF0IGFyZQorICAgIHBsYWNlZCBpbiB0aGUgZmlsZXMgdGhleSBnZW5lcmF0ZS4KKyAKKyAgLSBZb3UgbWF5IGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCBmaWxlbmFtZQorICAgIGV4dGVuc2lvbiBgLmZkYCAoTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzKSB1bmRlciB0aGUgc3RhbmRhcmQKKyAgICBjb25kaXRpb25zIG9mIHRoZSBMUFBMIGFzIGRlc2NyaWJlZCBhYm92ZS4gIFlvdSBtYXkgYWxzbyBkaXN0cmlidXRlCisgICAgc3VjaCBtb2RpZmllZCBMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcworICAgIHByb3ZpZGVkIHRoYXQ6CisgICAgKDEpIHRoZSBvbmx5IGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGZpbGVzIGVpdGhlciBlbmFibGUgdXNlIG9mCisgICAgICAgIGF2YWlsYWJsZSBmb250cyBvciBwcmV2ZW50IGF0dGVtcHRzIHRvIGFjY2VzcyB1bmF2YWlsYWJsZSBmb250czsKKyAgICAoMikgeW91IGFsc28gZGlzdHJpYnV0ZSB0aGUgb3JpZ2luYWwsIHVubW9kaWZpZWQgZmlsZXMgKFRlWCBpbnB1dAorICAgICAgICBwYXRocyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoaWNoIHNldCBvZiBMYVRlWCBmb250IGRlZmluaXRpb24KKyAgICAgICAgZmlsZXMgaXMgYWN0dWFsbHkgdXNlZCBieSBUZVgpLgorCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5jZmdgIChjb25maWd1cmF0aW9uIGZpbGVzKSB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzLgorICAgIFRoZSBQcm9ncmFtIG1heSAoYW5kIHVzdWFsbHkgd2lsbCkgc3BlY2lmeSB0aGUgcmFuZ2Ugb2YgY29tbWFuZHMKKyAgICB0aGF0IGFyZSBhbGxvd2VkIGluIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZpbGUuCisgCitCZWNhdXNlIG9mIHBvcnRhYmlsaXR5IGFuZCBleGNoYW5nZWFiaWxpdHkgaXNzdWVzIGluIExhVGVYIHNvZnR3YXJlLAorVGhlIExhVGVYMyBQcm9qZWN0IGRlcHJlY2F0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZgorY29tcG9uZW50cyBvZiBMYVRlWCBvciBvZiBnZW5lcmFsbHkgYXZhaWxhYmxlIGNvbnRyaWJ1dGVkIGNvZGUgZm9yIHRoZW0sCitidXQgc3VjaCBkaXN0cmlidXRpb24gY2FuIG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLgorCisKK05PIFdBUlJBTlRZCis9PT09PT09PT09PQorCitUaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgVGhlIFByb2dyYW0uICBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluCit3cml0aW5nLCBUaGUgQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyBUaGUgUHJvZ3JhbSBgYXMgaXNgLCB3aXRob3V0Cit3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QKK2xpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvcgorYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlCitvZiBUaGUgUHJvZ3JhbSBpcyB3aXRoIHlvdS4gIFNob3VsZCBUaGUgUHJvZ3JhbSBwcm92ZSBkZWZlY3RpdmUsIHlvdQorYXNzdW1lIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIsIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvcgorYW55IGF1dGhvciBuYW1lZCBpbiB0aGUgZmlsZXMgb2YgVGhlIFByb2dyYW0sIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5CitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgVGhlIFByb2dyYW0gYXMgcGVybWl0dGVkIGJlbG93LCBiZSBsaWFibGUgdG8KK3lvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yCitjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgYW55IHVzZSBvZiBUaGUgUHJvZ3JhbSBvciBvdXQgb2YKK2luYWJpbGl0eSB0byB1c2UgVGhlIFByb2dyYW0gKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBsb3NzIG9mCitkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgYW55b25lIGFzCithIHJlc3VsdCBvZiBhbnkgZmFpbHVyZSBvZiBUaGUgUHJvZ3JhbSB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyCitwcm9ncmFtcyksIGV2ZW4gaWYgVGhlIENvcHlyaWdodCBIb2xkZXIgb3Igc2FpZCBhdXRob3Igb3Igc2FpZCBvdGhlcgorcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3Byb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91YCBpbgordGhpcyBzZWN0aW9uLgorCisKK0Nob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgZm9yIGFueSBwYXJ0IG9mIHlvdXIgcHJvZ3JhbSB5b3Ugd2FudCBvciBuZWVkIHRvIHVzZSAqZGlzdHJpYnV0aW9uKgorY29uZGl0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbiBkbyBub3QgcmVmZXIgdG8KK3RoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHByb2dyYW0gYnV0IGluc3RlYWQgZGlzdHJpYnV0ZSB5b3VyCitwcm9ncmFtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuICBZb3UgbWF5IHVzZSB0aGUgdGV4dCBvZiB0aGlzIGxpY2Vuc2UKK2FzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2Ugc2hvdWxkIG5vdCByZWZlciB0bwordGhlIExQUEwgb3Igb3RoZXJ3aXNlIGdpdmUgdGhlIGltcHJlc3Npb24gdGhhdCB5b3VyIHByb2dyYW0gaXMKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLgorCitUaGUgZG9jdW1lbnQgYG1vZGd1aWRlLnRleGAgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGV4cGxhaW5zCit0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiAgSXQgZXhwbGFpbnMsCitmb3IgZXhhbXBsZSwgd2h5IGRpc3RyaWJ1dGluZyBMYVRlWCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIChHUEwpIHdhcyBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUuICBFdmVuIGlmIHlvdXIgcHJvZ3JhbSBpcwordW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgZGlzY3Vzc2lvbiBpbiBgbW9kZ3VpZGUudGV4YCBtYXkgc3RpbGwgYmUKK3JlbGV2YW50LCBhbmQgYXV0aG9ycyBpbnRlbmRpbmcgdG8gZGlzdHJpYnV0ZSB0aGVpciBwcm9ncmFtcyB1bmRlciBhbnkKK2xpY2Vuc2UgYXJlIGVuY291cmFnZWQgdG8gcmVhZCBpdC4KKworCitIb3cgdG8gVXNlIFRoaXMgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIHRoaXMgbGljZW5zZSwgcGxhY2UgaW4gZWFjaCBvZiB0aGUgZmlsZXMgb2YgeW91ciBwcm9ncmFtIGJvdGgKK2FuIGV4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIgYW5kIGFsc28KK2Egc3RhdGVtZW50IHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIGlzCitjb25zdHJhaW5lZCBieSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQ6CisKKyAgJSUgcGlnLmR0eAorICAlJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lCisgICUKKyAgJSBUaGlzIHByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUKKyAgJSBjb25kaXRpb25zIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlLCBlaXRoZXIgdmVyc2lvbiAxLjEKKyAgJSBvZiB0aGlzIGxpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgJSBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGluCisgICUgICBodHRwOi8vd3d3LmxhdGV4LXByb2plY3Qub3JnL2xwcGwudHh0CisgICUgYW5kIHZlcnNpb24gMS4xIG9yIGxhdGVyIGlzIHBhcnQgb2YgYWxsIGRpc3RyaWJ1dGlvbnMgb2YgTGFUZVggCisgICUgdmVyc2lvbiAxOTk5LzA2LzAxIG9yIGxhdGVyLgorICAlCisgICUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisKK0dpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zIGdpdmVuIGluCit0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgd291bGQgYXBwbHksIHdpdGggYFRoZSBQcm9ncmFtYCByZWZlcnJpbmcgdG8gdGhlCit0d28gZmlsZXMgYHBpZy5kdHhgIGFuZCBgcGlnLmluc2AsIGFuZCBgVGhlIENvcHlyaWdodCBIb2xkZXJgIHJlZmVycmluZwordG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZWAuCisKKworSW1wb3J0YW50IFJlY29tbWVuZGF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgRGVmaW5pbmcgV2hhdCBDb25zdGl0dXRlcyBUaGUgUHJvZ3JhbQorCisgICBUaGUgTFBQTCByZXF1aXJlcyB0aGF0IGRpc3RyaWJ1dGlvbnMgb2YgVGhlIFByb2dyYW0gY29udGFpbiBhbGwgdGhlCisgICBmaWxlcyBvZiBUaGUgUHJvZ3JhbS4gIEl0IGlzIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB5b3UgcHJvdmlkZSBhCisgICB3YXkgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgY29uc3RpdHV0ZSBUaGUgUHJvZ3JhbS4KKyAgIFRoaXMgY291bGQsIGZvciBleGFtcGxlLCBiZSBhY2hpZXZlZCBieSBleHBsaWNpdGx5IGxpc3RpbmcgYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0gbmVhciB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBlYWNoIGZpbGUgb3IgYnkKKyAgIHVzaW5nIGEgbGluZSBsaWtlCisKKyAgICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKworICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgVGhlIFByb2dyYW0uCisKKyBOb3RpbmcgRXhjZXB0aW9uYWwgRmlsZXMKKyAgCisgICBJZiBUaGUgUHJvZ3JhbSBjb250YWlucyBhbnkgZmlsZXMgYmVhcmluZyBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbiwgb3Igb24gZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zLCBvZiB0aG9zZQorICAgZmlsZXMgKG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGluIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVgKKyAgIFNvZnR3YXJlIEZpbGVzYCksIHRoZW4gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBUaGUgUHJvZ3JhbSBjb250YWluIGEKKyAgIHByb21pbmVudCBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZXhjZXB0aW9uYWwgY29uZGl0aW9ucywgYW5kIGVpdGhlcgorICAgbGlzdHMgdGhlIGV4Y2VwdGlvbmFsIGZpbGVzIG9yIGRlZmluZXMgb25lIG9yIG1vcmUgY2F0ZWdvcmllcyBvZgorICAgZXhjZXB0aW9uYWwgZmlsZXMuCisKKyAgIEZpbGVzIGNvbnRhaW5pbmcgdGhlIHRleHQgb2YgYSBsaWNlbnNlIChzdWNoIGFzIHRoaXMgZmlsZSkgYXJlCisgICBvZnRlbiBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIG1vcmUgcmVzdHJpY3RpdmUgY29uZGl0aW9ucyBvbgorICAgbW9kaWZpY2F0aW9uLiAgTGFUZVggY29uZmlndXJhdGlvbiBmaWxlcyAod2l0aCBmaWxlbmFtZSBleHRlbnNpb24KKyAgIGAuY2ZnYCkgYXJlIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbGVzcyByZXN0cmljdGl2ZSBjb25kaXRpb25zCisgICBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIFRoZQorICAgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIExhVGVYIHNvZnR3YXJlIGdpdmVuIGFib3ZlIGFyZSBleGFtcGxlcyAKKyAgIG9mIGRlY2xhcmluZyBhIGNhdGVnb3J5IG9mIGZpbGVzIGJlYXJpbmcgZXhjZXB0aW9uYWwgYWRkaXRpb25hbAorICAgY29uZGl0aW9ucy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5MWE0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjIKQEAgLTAsMCArMSwzMjAgQEAKKworCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworTFBQTCBWZXJzaW9uIDEuMiAgMTk5OS0wOS0wMworCitDb3B5cmlnaHQgMTk5OSBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuCisKKworUFJFQU1CTEUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUKK2Jhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGlzIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSBwcm9ncmFtIHRoYXQgeW91IGhhdmUgd3JpdHRlbiBhbmQgd2lzaAordG8gZGlzdHJpYnV0ZS4gIFRoaXMgbGljZW5zZSBtYXkgYmUgcGFydGljdWxhcmx5IHN1aXRhYmxlIGlmIHlvdXIKK3Byb2dyYW0gaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0IHlvdSBtYXkgdXNlIGl0CitldmVuIGlmIHlvdXIgcHJvZ3JhbSBpcyB1bnJlbGF0ZWQgdG8gVGVYLiAgVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVworVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0VgLCBiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLAorZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZworZGlzdHJpYnV0aW5nIHRoZWlyIHByb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS4KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBgVGhlIFByb2dyYW1gIHJlZmVycyB0byBhbnkgcHJvZ3JhbQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBUaGUgUHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQKK2FuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtIG1heSBiZQorZGlzdHJpYnV0ZWQuICBJbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkKK2FuZC9vciBzdXBlcnNlZGluZyBjb25kaXRpb25zIG9uIG1vZGlmaWNhdGlvbiBvZiB0aGVtc2VsdmVzIGFuZCBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGVtc2VsdmVzLCBidXQgKm5vKiBmaWxlIG9mIFRoZQorUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5IG9yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gdGhlCitkaXN0cmlidXRpb24gb2YgYW4gdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBmaWxlLiAgQSBkaXN0cmlidXRvciB3aXNoaW5nCit0byBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUKK25lZWRzIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIG9ubHkgaW4gdGhpcyBsaWNlbnNlIGFuZCBub3doZXJlIGVsc2UuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiBUaGUgUHJvZ3JhbQorYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBJbgorcGFydGljdWxhciwgdGhlIGFjdCBvZiBydW5uaW5nIFRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLgorCitXZSwgdGhlIExhVGVYMyBQcm9qZWN0LCBiZWxpZXZlIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgZ2l2ZSB5b3UKK3RoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0KK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK1RoZSBQcm9ncmFtLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlIAorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXhgCitpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLgorCisKK0NPTkRJVElPTlMgT04gRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4KK0Rpc3RyaWJ1dGlvbiBvZiBvbmx5IHBhcnQgb2YgVGhlIFByb2dyYW0gaXMgbm90IGFsbG93ZWQuCisKK1lvdSBtYXkgbm90IG1vZGlmeSBpbiBhbnkgd2F5IGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSB0aGF0IGJlYXJzIGEgbGVnYWwKK25vdGljZSBmb3JiaWRkaW5nIG1vZGlmaWNhdGlvbiBvZiB0aGF0IGZpbGUuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIGZpbGUgb2YgVGhlIFByb2dyYW0gaWYsIGFuZCBvbmx5IGlmLCB0aGUKK2ZvbGxvd2luZyBlaWdodCBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgMS4gWW91IG11c3QgbWVldCBhbnkgYWRkaXRpb25hbCBjb25kaXRpb25zIGJvcm5lIGJ5IHRoZSBmaWxlIG9uIHRoZQorICAgICBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGFzIGRlc2NyaWJlZCBiZWxvdworICAgICBpbiB0aGUgc3Vic2VjdGlvbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YKKyAgICAgVGhlIFByb2dyYW1gLgorIAorICAyLiBJZiB0aGUgZmlsZSBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUsIHRoZW4geW91IG11c3QgbWVldCBhbnkKKyAgICAgYXBwbGljYWJsZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkCisgICAgIHZlcnNpb24gb2YgdGhlIGZpbGUgdGhhdCBhcmUgZGVzY3JpYmVkIGJlbG93IGluIHRoZSBzdWJzZWN0aW9uCisgICAgIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXNgLgorIAorICAzLiBZb3UgbXVzdCBub3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUKKyAgICAgb3JpZ2luYWwgZmlsZS4KKyAKKyAgNC4gSW4gdGhlIG1vZGlmaWVkIGZpbGUsIHlvdSBtdXN0IGFja25vd2xlZGdlIHRoZSBhdXRob3JzaGlwIGFuZAorICAgICBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdGhlIG5hbWUgKGlmIGFueSkgb2YgdGhlIHByb2dyYW0KKyAgICAgd2hpY2ggY29udGFpbnMgaXQuCisgCisgIDUuIFlvdSBtdXN0IGNoYW5nZSBhbnkgaWRlbnRpZmljYXRpb24gc3RyaW5nIGluIHRoZSBmaWxlIHRvIGluZGljYXRlCisgICAgIGNsZWFybHkgdGhhdCB0aGUgbW9kaWZpZWQgZmlsZSBpcyBub3QgcGFydCBvZiBUaGUgUHJvZ3JhbS4KKyAKKyAgNi4gWW91IG11c3QgY2hhbmdlIGFueSBhZGRyZXNzZXMgaW4gdGhlIG1vZGlmaWVkIGZpbGUgZm9yIHRoZQorICAgICByZXBvcnRpbmcgb2YgZXJyb3JzIGluIHRoZSBmaWxlIG9yIGluIFRoZSBQcm9ncmFtIGdlbmVyYWxseSB0bworICAgICBlbnN1cmUgdGhhdCByZXBvcnRzIGZvciBmaWxlcyBubyBsb25nZXIgbWFpbnRhaW5lZCBieSB0aGUgb3JpZ2luYWwKKyAgICAgbWFpbnRhaW5lcnMgd2lsbCBiZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIG1vZGlmaWVkCisgICAgIGZpbGVzLgorIAorICA3LiBZb3UgbXVzdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMKKyAgICAgZGlzdHJpYnV0aW9uIGJvdGggb2YgdGhlIG1vZGlmaWVkIGZpbGUgYW5kIG9mIGFueSBmaWxlcyBkZXJpdmVkCisgICAgIGZyb20gdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisgCisgIDguIFlvdSBtdXN0IGRvIGVpdGhlciAoQSkgb3IgKEIpOgorCisgICAgICAgKEEpIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIFRoZSBQcm9ncmFtICh0aGF0IGlzLCBhIGNvbXBsZXRlLAorICAgICAgICAgICB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0pIHRvZ2V0aGVyIHdpdGggdGhlIG1vZGlmaWVkCisgICAgICAgICAgIGZpbGU7IGlmIHlvdXIgZGlzdHJpYnV0aW9uIG9mIHRoZSBtb2RpZmllZCBmaWxlIGlzIG1hZGUgYnkKKyAgICAgICAgICAgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGZpbGUgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICAgICAgICAgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSBUaGUgUHJvZ3JhbQorICAgICAgICAgICBmcm9tIHRoZSBzYW1lIHBsYWNlIG1lZXRzIHRoaXMgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZAorICAgICAgICAgICBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgVGhlIFByb2dyYW0gYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgbW9kaWZpZWQgZmlsZTsKKworICAgICAgIChCKSBwcm92aWRlIHRvIHRob3NlIHdobyByZWNlaXZlIHRoZSBtb2RpZmllZCBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgICAgIHRoYXQgaXMgc3VmZmljaWVudCBmb3IgdGhlbSB0byBvYnRhaW4gYSBjb3B5IG9mIFRoZSBQcm9ncmFtOworICAgICAgICAgICBmb3IgZXhhbXBsZSwgeW91IG1heSBwcm92aWRlIGEgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwpCisgICAgICAgICAgIGZvciBhIHNpdGUgdGhhdCB5b3UgZXhwZWN0IHdpbGwgcHJvdmlkZSB0aGVtIHdpdGggYSBjb3B5IG9mIAorICAgICAgICAgICBUaGUgUHJvZ3JhbSBmcmVlIG9mIGNoYXJnZSAoZWl0aGVyIHRoZSB2ZXJzaW9uIGZyb20gd2hpY2gKKyAgICAgICAgICAgeW91ciBtb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgb3IgcGVyaGFwcyBhIGxhdGVyIHZlcnNpb24pLgorCitOb3RlIHRoYXQgaW4gdGhlIGFib3ZlLCBgZGlzdHJpYnV0aW9uYCBvZiBhIGZpbGUgbWVhbnMgbWFraW5nIHRoZQorZmlsZSBhdmFpbGFibGUgdG8gb3RoZXJzIGJ5IGFueSBtZWFucy4gIFRoaXMgaW5jbHVkZXMsIGZvciBpbnN0YW5jZSwKK2luc3RhbGxpbmcgdGhlIGZpbGUgb24gYW55IG1hY2hpbmUgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBmaWxlIGlzCithY2Nlc3NpYmxlIGJ5IHVzZXJzIG90aGVyIHRoYW4geW91cnNlbGYuICBgTW9kaWZpY2F0aW9uYCBvZiBhIGZpbGUKK21lYW5zIGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIGRlcml2YXRpdmUgZmlsZSB1bmRlciBhbnkKK2FwcGxpY2FibGUgbGF3IC0tIHRoYXQgaXMsIGEgZmlsZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBmaWxlIG9yCithIHNpZ25pZmljYW50IHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMKK2FuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSBmaWxlIChvdGhlciB0aGFuIGFzIG5lY2Vzc2l0YXRlZCBieSB0aGUgZmlsZQorY29udmVudGlvbnMgb2YgdGhlIHRhcmdldCBmaWxlIHN5c3RlbXMpIGlzIGNvbnNpZGVyZWQgdG8gYmUgYQorbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlLgorCitUaGUgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGRvIG5vdCBoYXZlIHRvIGJlCithcHBsaWVkIHRvIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKK2Fib3ZlIGNvbmRpdGlvbnMuICBOb3RlLCBob3dldmVyLCB0aGF0IENvbmRpdGlvbiA3LiBkb2VzIGFwcGx5IHRvCithbnkgc3VjaCBtb2RpZmllZCBmaWxlLgorCitUaGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8gbm90CithcHBseSB0bywgdGhlIHVwZGF0aW5nLCBieSBhbnkgbWV0aG9kLCBvZiBhIGZpbGUgc28gdGhhdCBpdCBiZWNvbWVzCitpZGVudGljYWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoYXQgZmlsZSBvZiBUaGUgUHJvZ3JhbS4KKworIAorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtLCBldmVuIGZvciB5b3VyIG93bgorcGVyc29uYWwgdXNlLCB3aXRob3V0IGFsc28gbWVldGluZyB0aGUgYWJvdmUgZWlnaHQgY29uZGl0aW9ucyBmb3IKK2Rpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgZmlsZS4gIFdoaWxlIHlvdSBtaWdodCBpbnRlbmQgdGhhdCBzdWNoCittb2RpZmllZCBmaWxlcyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBmaWxlOyBvciBpdCBtYXkKK25vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZCBmaWxlCit0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucyBvZgordGhpcyBsaWNlbnNlLiAgSXQgaXMgdXN1YWxseSBpbiB5b3VyIGJlc3QgaW50ZXJlc3QgdG8ga2VlcCB5b3VyIGNvcHkKK29mIFRoZSBQcm9ncmFtIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMgb25lLiAgTWFueSBwcm9ncmFtcyBwcm92aWRlCit3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgcHJvZ3JhbSB3aXRob3V0IGFsdGVyaW5nIGl0cworbGljZW5zZWQgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YgVGhlIFByb2dyYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGluZGl2aWR1YWwgZmlsZSBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgdGhhdAorc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBpZiwgYW5kIG9ubHkKK2lmLCBzdWNoIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBleGNsdXNpdmVseSBjb25jZXJuIG1vZGlmaWNhdGlvbiBvZiB0aGUKK2ZpbGUgb3IgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIFRoZSBjb25kaXRpb25zCitvbiBpbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZSBtYXkgZGlmZmVyIG9ubHkgd2l0aAorcmVzcGVjdCB0byB0aGUga2luZCBhbmQgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvZiB0aG9zZSBmaWxlcyB0aGF0CitpcyBhbGxvd2VkLCBhbmQgd2l0aCByZXNwZWN0IHRvIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMKK29mIHRob3NlIGZpbGVzLgorCisKK0FkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggTGFUZVggKHRoYXQgaXMsCitpZiBpdCBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUpLCB0aGVuIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbAorY29uZGl0aW9ucywgd2hpY2ggc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zCithYm92ZSwgYXBwbHkgdG8gdGhlIGZpbGUgYWNjb3JkaW5nIHRvIGl0cyBmaWxlbmFtZSBleHRlbnNpb246CisKKyAgLSBZb3UgbWF5IG5vdCBtb2RpZnkgYW55IGZpbGUgd2l0aCBmaWxlbmFtZSBleHRlbnNpb24gYC5pbnNgIHNpbmNlCisgICAgdGhlc2UgYXJlIGluc3RhbGxhdGlvbiBmaWxlcyBjb250YWluaW5nIHRoZSBsZWdhbCBub3RpY2VzIHRoYXQgYXJlCisgICAgcGxhY2VkIGluIHRoZSBmaWxlcyB0aGV5IGdlbmVyYXRlLgorIAorICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuZmRgIChMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMpIHVuZGVyIHRoZSBzdGFuZGFyZAorICAgIGNvbmRpdGlvbnMgb2YgdGhlIExQUEwgYXMgZGVzY3JpYmVkIGFib3ZlLiAgWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUKKyAgICBzdWNoIG1vZGlmaWVkIExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcyB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzCisgICAgcHJvdmlkZWQgdGhhdDoKKyAgICAoMSkgdGhlIG9ubHkgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgZWl0aGVyIGVuYWJsZSB1c2Ugb2YKKyAgICAgICAgYXZhaWxhYmxlIGZvbnRzIG9yIHByZXZlbnQgYXR0ZW1wdHMgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzOworICAgICgyKSB5b3UgYWxzbyBkaXN0cmlidXRlIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBmaWxlcyAoVGVYIGlucHV0CisgICAgICAgIHBhdGhzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgd2hpY2ggc2V0IG9mIExhVGVYIGZvbnQgZGVmaW5pdGlvbgorICAgICAgICBmaWxlcyBpcyBhY3R1YWxseSB1c2VkIGJ5IFRlWCkuCisKKyAgLSBZb3UgbWF5IGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCBmaWxlbmFtZQorICAgIGV4dGVuc2lvbiBgLmNmZ2AgKGNvbmZpZ3VyYXRpb24gZmlsZXMpIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMuCisgICAgVGhlIFByb2dyYW0gbWF5IChhbmQgdXN1YWxseSB3aWxsKSBzcGVjaWZ5IHRoZSByYW5nZSBvZiBjb21tYW5kcworICAgIHRoYXQgYXJlIGFsbG93ZWQgaW4gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAKK0JlY2F1c2Ugb2YgcG9ydGFiaWxpdHkgYW5kIGV4Y2hhbmdlYWJpbGl0eSBpc3N1ZXMgaW4gTGFUZVggc29mdHdhcmUsCitUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mCitjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUgY29udHJpYnV0ZWQgY29kZSBmb3IgdGhlbSwKK2J1dCBzdWNoIGRpc3RyaWJ1dGlvbiBjYW4gbWVldCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBUaGUgUHJvZ3JhbS4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIFRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIFRoZSBQcm9ncmFtIGBhcyBpc2AsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCithIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIFRoZSBQcm9ncmFtIGlzIHdpdGggeW91LiAgU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91Cithc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIGFncmVlZCB0byBpbiB3cml0aW5nIHdpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yCithbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBmaWxlcyBvZiBUaGUgUHJvZ3JhbSwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBUaGUgUHJvZ3JhbSBhcyBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0bworeW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZgoraW5hYmlsaXR5IHRvIHVzZSBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGxvc3Mgb2YKK2RhdGEsIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSwgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSBhbnlvbmUgYXMKK2EgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIKK3Byb2dyYW1zKSwgZXZlbiBpZiBUaGUgQ29weXJpZ2h0IEhvbGRlciBvciBzYWlkIGF1dGhvciBvciBzYWlkIG90aGVyCitwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKworV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgUFJPR1JBTVMgVU5ERVIgVEhJUyBMSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGltcG9ydGFudCBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQKK3JlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpcgorcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLiAgVGhlc2UgYXV0aG9ycyBhcmUgYWRkcmVzc2VkIGFzIGB5b3VgIGluCit0aGlzIHNlY3Rpb24uCisKKworQ2hvb3NpbmcgVGhpcyBMaWNlbnNlIG9yIEFub3RoZXIgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBmb3IgYW55IHBhcnQgb2YgeW91ciBwcm9ncmFtIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qCitjb25kaXRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhvc2UgaW4gdGhpcyBsaWNlbnNlLCB0aGVuIGRvIG5vdCByZWZlciB0bwordGhpcyBsaWNlbnNlIGFueXdoZXJlIGluIHlvdXIgcHJvZ3JhbSBidXQgaW5zdGVhZCBkaXN0cmlidXRlIHlvdXIKK3Byb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgbGljZW5zZQorYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZSBzaG91bGQgbm90IHJlZmVyIHRvCit0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHlvdXIgcHJvZ3JhbSBpcworZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciBwcm9ncmFtIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXhgIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHByb2dyYW1zIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBmaWxlcyBvZiB5b3VyIHByb2dyYW0gYm90aAorYW4gZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciBhbmQgYWxzbworYSBzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUgaXMKK2NvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDAxIE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMgorICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjIgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWCAKKyAgJSB2ZXJzaW9uIDE5OTkvMTIvMDEgb3IgbGF0ZXIuCisgICUKKyAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgdGhlIGZpbGVzIHBpZy5kdHggYW5kIHBpZy5pbnMKKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMgZ2l2ZW4gaW4KK3RoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCBgVGhlIFByb2dyYW1gIHJlZmVycmluZyB0byB0aGUKK3R3byBmaWxlcyBgcGlnLmR0eGAgYW5kIGBwaWcuaW5zYCwgYW5kIGBUaGUgQ29weXJpZ2h0IEhvbGRlcmAgcmVmZXJyaW5nCit0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIFRoZSBQcm9ncmFtCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiBUaGUgUHJvZ3JhbSBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIFRoZSBQcm9ncmFtLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIGxpa2UKKworICAgICUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIGFsbCBmaWxlcyBsaXN0ZWQgaW4gbWFuaWZlc3QudHh0LgorCisgICBpbiB0aGF0IHBsYWNlLiAgSW4gdGhlIGFic2VuY2Ugb2YgYW4gdW5lcXVpdm9jYWwgbGlzdCBpdCBtaWdodCBiZQorICAgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91CisgICB0byBjb21wcmlzZSBUaGUgUHJvZ3JhbS4KKworIE5vdGluZyBFeGNlcHRpb25hbCBGaWxlcworICAKKyAgIElmIFRoZSBQcm9ncmFtIGNvbnRhaW5zIGFueSBmaWxlcyBiZWFyaW5nIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbgorICAgbW9kaWZpY2F0aW9uLCBvciBvbiBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMsIG9mIHRob3NlCisgICBmaWxlcyAob3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWAorICAgU29mdHdhcmUgRmlsZXNgKSwgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IFRoZSBQcm9ncmFtIGNvbnRhaW4gYQorICAgcHJvbWluZW50IGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBleGNlcHRpb25hbCBjb25kaXRpb25zLCBhbmQgZWl0aGVyCisgICBsaXN0cyB0aGUgZXhjZXB0aW9uYWwgZmlsZXMgb3IgZGVmaW5lcyBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIG9mCisgICBleGNlcHRpb25hbCBmaWxlcy4KKworICAgRmlsZXMgY29udGFpbmluZyB0aGUgdGV4dCBvZiBhIGxpY2Vuc2UgKHN1Y2ggYXMgdGhpcyBmaWxlKSBhcmUKKyAgIG9mdGVuIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbW9yZSByZXN0cmljdGl2ZSBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24uICBMYVRlWCBjb25maWd1cmF0aW9uIGZpbGVzICh3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbgorICAgYC5jZmdgKSBhcmUgZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBsZXNzIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMKKyAgIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlCisgICBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gTGFUZVggc29mdHdhcmUgZ2l2ZW4gYWJvdmUgYXJlIGV4YW1wbGVzIAorICAgb2YgZGVjbGFyaW5nIGEgY2F0ZWdvcnkgb2YgZmlsZXMgYmVhcmluZyBleGNlcHRpb25hbCBhZGRpdGlvbmFsCisgICBjb25kaXRpb25zLgorCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4zYyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWUzYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4zYwpAQCAtMCwwICsxLDQxOCBAQAorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworTFBQTCBWZXJzaW9uIDEuM2MgIDIwMDgtMDUtMDQKKworQ29weXJpZ2h0IDE5OTkgMjAwMi0yMDA4IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBwcmltYXJ5IGxpY2Vuc2UgdW5kZXIKK3doaWNoIHRoZSBMYVRlWCBrZXJuZWwgYW5kIHRoZSBiYXNlIExhVGVYIHBhY2thZ2VzIGFyZSBkaXN0cmlidXRlZC4KKworWW91IG1heSB1c2UgdGhpcyBsaWNlbnNlIGZvciBhbnkgd29yayBvZiB3aGljaCB5b3UgaG9sZCB0aGUgY29weXJpZ2h0CithbmQgd2hpY2ggeW91IHdpc2ggdG8gZGlzdHJpYnV0ZS4gIFRoaXMgbGljZW5zZSBtYXkgYmUgcGFydGljdWxhcmx5CitzdWl0YWJsZSBpZiB5b3VyIHdvcmsgaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0IAoraXQgaXMgd3JpdHRlbiBpbiBzdWNoIGEgd2F5IHRoYXQgeW91IGNhbiB1c2UgaXQgZXZlbiBpZiB5b3VyIHdvcmsgaXMgCit1bnJlbGF0ZWQgdG8gVGVYLgorCitUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgV09SS1MgVU5ERVIgVEhJUyBMSUNFTlNFYCwKK2JlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzCit3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpciB3b3JrcyB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQKK2FuZCBtb2RpZmllZCwgYXMgd2VsbCBhcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1vZGlmaWVkIHZlcnNpb25zIG9mCit0aGF0IHdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkLgorCitXZSwgdGhlIExhVGVYMyBQcm9qZWN0LCBiZWxpZXZlIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgZ2l2ZSB5b3UKK3RoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgeW91ciB3b3JrCit0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91IHdpc2ggd2hpbGUKK21haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgYW5kIHJlbGlhYmlsaXR5IG9mCit0aGF0IHdvcmsuICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUKK21lZXRpbmcgdGhlc2UgY29uZGl0aW9ucywgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBgY2ZnZ3VpZGUudGV4YAorYW5kIGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworREVGSU5JVElPTlMKKz09PT09PT09PT09CisKK0luIHRoaXMgbGljZW5zZSBkb2N1bWVudCB0aGUgZm9sbG93aW5nIHRlcm1zIGFyZSB1c2VkOgorCisgICBgV29ya2AKKyAgICBBbnkgd29yayBiZWluZyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisgICAgCisgICBgRGVyaXZlZCBXb3JrYAorICAgIEFueSB3b3JrIHRoYXQgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGlzIGRlcml2ZWQgZnJvbSB0aGUgV29yay4KKworICAgYE1vZGlmaWNhdGlvbmAgCisgICAgQW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueSBhcHBsaWNhYmxlCisgICAgbGF3IC0tIGZvciBleGFtcGxlLCB0aGUgcHJvZHVjdGlvbiBvZiBhIGZpbGUgY29udGFpbmluZyBhbgorICAgIG9yaWdpbmFsIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrIG9yIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZgorICAgIHN1Y2ggYSBmaWxlLCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vcgorICAgIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCisgICBgTW9kaWZ5YAorICAgIFRvIGFwcGx5IGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIERlcml2ZWQgV29yayB1bmRlciBhbnkKKyAgICBhcHBsaWNhYmxlIGxhdy4KKyAgICAKKyAgIGBEaXN0cmlidXRpb25gCisgICAgTWFraW5nIGNvcGllcyBvZiB0aGUgV29yayBhdmFpbGFibGUgZnJvbSBvbmUgcGVyc29uIHRvIGFub3RoZXIsIGluCisgICAgd2hvbGUgb3IgaW4gcGFydC4gIERpc3RyaWJ1dGlvbiBpbmNsdWRlcyAoYnV0IGlzIG5vdCBsaW1pdGVkIHRvKQorICAgIG1ha2luZyBhbnkgZWxlY3Ryb25pYyBjb21wb25lbnRzIG9mIHRoZSBXb3JrIGFjY2Vzc2libGUgYnkKKyAgICBmaWxlIHRyYW5zZmVyIHByb3RvY29scyBzdWNoIGFzIEZUUCBvciBIVFRQIG9yIGJ5IHNoYXJlZCBmaWxlCisgICAgc3lzdGVtcyBzdWNoIGFzIFN1bmBzIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykuCisKKyAgIGBDb21waWxlZCBXb3JrYAorICAgIEEgdmVyc2lvbiBvZiB0aGUgV29yayB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZCBpbnRvIGEgZm9ybSB3aGVyZSBpdAorICAgIGlzIGRpcmVjdGx5IHVzYWJsZSBvbiBhIGNvbXB1dGVyIHN5c3RlbS4gIFRoaXMgcHJvY2Vzc2luZyBtYXkKKyAgICBpbmNsdWRlIHVzaW5nIGluc3RhbGxhdGlvbiBmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSBXb3JrLAorICAgIHRyYW5zZm9ybWF0aW9ucyBvZiB0aGUgV29yaywgY29weWluZyBvZiBjb21wb25lbnRzIG9mIHRoZSBXb3JrLCBvcgorICAgIG90aGVyIGFjdGl2aXRpZXMuICBOb3RlIHRoYXQgbW9kaWZpY2F0aW9uIG9mIGFueSBpbnN0YWxsYXRpb24KKyAgICBmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSBXb3JrIGNvbnN0aXR1dGVzIG1vZGlmaWNhdGlvbiBvZiB0aGUgV29yay4KKworICAgYEN1cnJlbnQgTWFpbnRhaW5lcmAKKyAgICBBIHBlcnNvbiBvciBwZXJzb25zIG5vbWluYXRlZCBhcyBzdWNoIHdpdGhpbiB0aGUgV29yay4gIElmIHRoZXJlIGlzCisgICAgbm8gc3VjaCBleHBsaWNpdCBub21pbmF0aW9uIHRoZW4gaXQgaXMgdGhlIGBDb3B5cmlnaHQgSG9sZGVyYCB1bmRlcgorICAgIGFueSBhcHBsaWNhYmxlIGxhdy4KKworICAgYEJhc2UgSW50ZXJwcmV0ZXJgIAorICAgIEEgcHJvZ3JhbSBvciBwcm9jZXNzIHRoYXQgaXMgbm9ybWFsbHkgbmVlZGVkIGZvciBydW5uaW5nIG9yCisgICAgaW50ZXJwcmV0aW5nIGEgcGFydCBvciB0aGUgd2hvbGUgb2YgdGhlIFdvcmsuICAgIAorCisgICAgQSBCYXNlIEludGVycHJldGVyIG1heSBkZXBlbmQgb24gZXh0ZXJuYWwgY29tcG9uZW50cyBidXQgdGhlc2UKKyAgICBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgQmFzZSBJbnRlcnByZXRlciBwcm92aWRlZCB0aGF0IGVhY2gKKyAgICBleHRlcm5hbCBjb21wb25lbnQgY2xlYXJseSBpZGVudGlmaWVzIGl0c2VsZiB3aGVuZXZlciBpdCBpcyB1c2VkCisgICAgaW50ZXJhY3RpdmVseS4gIFVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZCB3aGVuIGFwcGx5aW5nIHRoZQorICAgIGxpY2Vuc2UgdG8gdGhlIFdvcmssIHRoZSBvbmx5IGFwcGxpY2FibGUgQmFzZSBJbnRlcnByZXRlciBpcyBhCisgICAgYExhVGVYLUZvcm1hdGAgb3IgaW4gdGhlIGNhc2Ugb2YgZmlsZXMgYmVsb25naW5nIHRvIHRoZSAKKyAgICBgTGFUZVgtZm9ybWF0YCBhIHByb2dyYW0gaW1wbGVtZW50aW5nIHRoZSBgVGVYIGxhbmd1YWdlYC4KKworCisKK0NPTkRJVElPTlMgT04gRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgV29yaworYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBJbgorcGFydGljdWxhciwgdGhlIGFjdCBvZiBydW5uaW5nIHRoZSBXb3JrIGlzIG5vdCByZXN0cmljdGVkIGFuZCBubworcmVxdWlyZW1lbnRzIGFyZSBtYWRlIGNvbmNlcm5pbmcgYW55IG9mZmVycyBvZiBzdXBwb3J0IGZvciB0aGUgV29yay4KKworMi4gIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIFdvcmsgYXMgeW91CityZWNlaXZlZCBpdC4gIERpc3RyaWJ1dGlvbiBvZiBvbmx5IHBhcnQgb2YgdGhlIFdvcmsgaXMgY29uc2lkZXJlZAorbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrLCBhbmQgbm8gcmlnaHQgdG8gZGlzdHJpYnV0ZSBzdWNoIGEgRGVyaXZlZAorV29yayBtYXkgYmUgYXNzdW1lZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBjbGF1c2UuCisKKzMuICBZb3UgbWF5IGRpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIHRoYXQgaGFzIGJlZW4gZ2VuZXJhdGVkIGZyb20gYQorY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyBkaXN0cmlidXRlZCB1bmRlciBDbGF1c2UgMgorYWJvdmUsIGFzIGxvbmcgYXMgdGhhdCBDb21waWxlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIGluIHN1Y2ggYSB3YXkgdGhhdAordGhlIHJlY2lwaWVudHMgbWF5IGluc3RhbGwgdGhlIENvbXBpbGVkIFdvcmsgb24gdGhlaXIgc3lzdGVtIGV4YWN0bHkKK2FzIGl0IHdvdWxkIGhhdmUgYmVlbiBpbnN0YWxsZWQgaWYgdGhleSBnZW5lcmF0ZWQgYSBDb21waWxlZCBXb3JrCitkaXJlY3RseSBmcm9tIHRoZSBXb3JrLgorCis0LiAgSWYgeW91IGFyZSB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5LCB3aXRob3V0CityZXN0cmljdGlvbiwgbW9kaWZ5IHRoZSBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgRGVyaXZlZCBXb3JrLiAgWW91IG1heQorYWxzbyBkaXN0cmlidXRlIHRoZSBEZXJpdmVkIFdvcmsgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCitDb21waWxlZCBXb3JrcyBnZW5lcmF0ZWQgZnJvbSB0aGUgRGVyaXZlZCBXb3JrLiAgRGVyaXZlZCBXb3JrcworZGlzdHJpYnV0ZWQgaW4gdGhpcyBtYW5uZXIgYnkgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBhcmUgY29uc2lkZXJlZCB0bworYmUgdXBkYXRlZCB2ZXJzaW9ucyBvZiB0aGUgV29yay4KKworNS4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkgbW9kaWZ5Cit5b3VyIGNvcHkgb2YgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsgYmFzZWQgb24gdGhlIFdvcmssCithbmQgY29tcGlsZSB0aGlzIERlcml2ZWQgV29yaywgdGh1cyBjcmVhdGluZyBhIENvbXBpbGVkIFdvcmsgYmFzZWQgb24KK3RoZSBEZXJpdmVkIFdvcmsuCisKKzYuICBJZiB5b3UgYXJlIG5vdCB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5CitkaXN0cmlidXRlIGEgRGVyaXZlZCBXb3JrIHByb3ZpZGVkIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Citmb3IgZXZlcnkgY29tcG9uZW50IG9mIHRoZSBXb3JrIHVubGVzcyB0aGF0IGNvbXBvbmVudCBjbGVhcmx5IHN0YXRlcworaW4gdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpdCBpcyBleGVtcHQgZnJvbSB0aGF0IGNvbmRpdGlvbi4gIE9ubHkKK3RoZSBDdXJyZW50IE1haW50YWluZXIgaXMgYWxsb3dlZCB0byBhZGQgc3VjaCBzdGF0ZW1lbnRzIG9mIGV4ZW1wdGlvbiAKK3RvIGEgY29tcG9uZW50IG9mIHRoZSBXb3JrLiAKKworICBhLiBJZiBhIGNvbXBvbmVudCBvZiB0aGlzIERlcml2ZWQgV29yayBjYW4gYmUgYSBkaXJlY3QgcmVwbGFjZW1lbnQKKyAgICAgZm9yIGEgY29tcG9uZW50IG9mIHRoZSBXb3JrIHdoZW4gdGhhdCBjb21wb25lbnQgaXMgdXNlZCB3aXRoIHRoZQorICAgICBCYXNlIEludGVycHJldGVyLCB0aGVuLCB3aGVyZXZlciB0aGlzIGNvbXBvbmVudCBvZiB0aGUgV29yaworICAgICBpZGVudGlmaWVzIGl0c2VsZiB0byB0aGUgdXNlciB3aGVuIHVzZWQgaW50ZXJhY3RpdmVseSB3aXRoIHRoYXQKKyAgICAgQmFzZSBJbnRlcnByZXRlciwgdGhlIHJlcGxhY2VtZW50IGNvbXBvbmVudCBvZiB0aGlzIERlcml2ZWQgV29yaworICAgICBjbGVhcmx5IGFuZCB1bmFtYmlndW91c2x5IGlkZW50aWZpZXMgaXRzZWxmIGFzIGEgbW9kaWZpZWQgdmVyc2lvbgorICAgICBvZiB0aGlzIGNvbXBvbmVudCB0byB0aGUgdXNlciB3aGVuIHVzZWQgaW50ZXJhY3RpdmVseSB3aXRoIHRoYXQKKyAgICAgQmFzZSBJbnRlcnByZXRlci4KKyAgICAgCisgIGIuIEV2ZXJ5IGNvbXBvbmVudCBvZiB0aGUgRGVyaXZlZCBXb3JrIGNvbnRhaW5zIHByb21pbmVudCBub3RpY2VzCisgICAgIGRldGFpbGluZyB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzIHRvIHRoYXQgY29tcG9uZW50LCBvciBhCisgICAgIHByb21pbmVudCByZWZlcmVuY2UgdG8gYW5vdGhlciBmaWxlIHRoYXQgaXMgZGlzdHJpYnV0ZWQgYXMgcGFydAorICAgICBvZiB0aGUgRGVyaXZlZCBXb3JrIGFuZCB0aGF0IGNvbnRhaW5zIGEgY29tcGxldGUgYW5kIGFjY3VyYXRlIGxvZworICAgICBvZiB0aGUgY2hhbmdlcy4KKyAgCisgIGMuIE5vIGluZm9ybWF0aW9uIGluIHRoZSBEZXJpdmVkIFdvcmsgaW1wbGllcyB0aGF0IGFueSBwZXJzb25zLAorICAgICBpbmNsdWRpbmcgKGJ1dCBub3QgbGltaXRlZCB0bykgdGhlIGF1dGhvcnMgb2YgdGhlIG9yaWdpbmFsIHZlcnNpb24KKyAgICAgb2YgdGhlIFdvcmssIHByb3ZpZGUgYW55IHN1cHBvcnQsIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKQorICAgICB0aGUgcmVwb3J0aW5nIGFuZCBoYW5kbGluZyBvZiBlcnJvcnMsIHRvIHJlY2lwaWVudHMgb2YgdGhlCisgICAgIERlcml2ZWQgV29yayB1bmxlc3MgdGhvc2UgcGVyc29ucyBoYXZlIHN0YXRlZCBleHBsaWNpdGx5IHRoYXQKKyAgICAgdGhleSBkbyBwcm92aWRlIHN1Y2ggc3VwcG9ydCBmb3IgdGhlIERlcml2ZWQgV29yay4KKworICBkLiBZb3UgZGlzdHJpYnV0ZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyB3aXRoIHRoZSBEZXJpdmVkIFdvcms6CisKKyAgICAgICAxLiBBIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIFdvcms7IAorICAgICAgICAgIGlmIHlvdXIgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgY29tcG9uZW50IGlzIG1hZGUgYnkKKyAgICAgICAgICBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgY29tcG9uZW50IGZyb20gYQorICAgICAgICAgIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weQorICAgICAgICAgIHRoZSBXb3JrIGZyb20gdGhlIHNhbWUgb3Igc29tZSBzaW1pbGFyIHBsYWNlIG1lZXRzIHRoaXMKKyAgICAgICAgICBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8KKyAgICAgICAgICBjb3B5IHRoZSBXb3JrIGFsb25nIHdpdGggdGhlIG1vZGlmaWVkIGNvbXBvbmVudDsKKworICAgICAgIDIuIEluZm9ybWF0aW9uIHRoYXQgaXMgc3VmZmljaWVudCB0byBvYnRhaW4gYSBjb21wbGV0ZSwKKyAgICAgICAgICB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIFdvcmsuCisKKzcuICBJZiB5b3UgYXJlIG5vdCB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5CitkaXN0cmlidXRlIGEgQ29tcGlsZWQgV29yayBnZW5lcmF0ZWQgZnJvbSBhIERlcml2ZWQgV29yaywgYXMgbG9uZyBhcwordGhlIERlcml2ZWQgV29yayBpcyBkaXN0cmlidXRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgQ29tcGlsZWQKK1dvcmssIGFuZCBhcyBsb25nIGFzIHRoZSBjb25kaXRpb25zIG9mIENsYXVzZSA2LCBhYm92ZSwgYXJlIG1ldCB3aXRoCityZWdhcmQgdG8gdGhlIERlcml2ZWQgV29yay4KKworOC4gIFRoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QKK2FwcGx5IHRvLCB0aGUgbW9kaWZpY2F0aW9uLCBieSBhbnkgbWV0aG9kLCBvZiBhbnkgY29tcG9uZW50IHNvIHRoYXQgaXQKK2JlY29tZXMgaWRlbnRpY2FsIHRvIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGF0IGNvbXBvbmVudCBvZiB0aGUgV29yayBhcworaXQgaXMgZGlzdHJpYnV0ZWQgYnkgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1bmRlciBDbGF1c2UgNCwgYWJvdmUuCisKKzkuICBEaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3IgYW55IERlcml2ZWQgV29yayBpbiBhbiBhbHRlcm5hdGl2ZQorZm9ybWF0LCB3aGVyZSB0aGUgV29yayBvciB0aGF0IERlcml2ZWQgV29yayAoaW4gd2hvbGUgb3IgaW4gcGFydCkgaXMKK3RoZW4gcHJvZHVjZWQgYnkgYXBwbHlpbmcgc29tZSBwcm9jZXNzIHRvIHRoYXQgZm9ybWF0LCBkb2VzIG5vdCByZWxheCBvcgorbnVsbGlmeSBhbnkgc2VjdGlvbnMgb2YgdGhpcyBsaWNlbnNlIGFzIHRoZXkgcGVydGFpbiB0byB0aGUgcmVzdWx0cyBvZgorYXBwbHlpbmcgdGhhdCBwcm9jZXNzLgorICAgICAKKzEwLiBhLiBBIERlcml2ZWQgV29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZQorICAgICAgIHByb3ZpZGVkIHRoYXQgbGljZW5zZSBpdHNlbGYgaG9ub3JzIHRoZSBjb25kaXRpb25zIGxpc3RlZCBpbgorICAgICAgIENsYXVzZSA2IGFib3ZlLCBpbiByZWdhcmQgdG8gdGhlIFdvcmssIHRob3VnaCBpdCBkb2VzIG5vdCBoYXZlCisgICAgICAgdG8gaG9ub3IgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorICAgICAgCisgICAgYi4gSWYgYSBEZXJpdmVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSwgdGhhdAorICAgICAgIERlcml2ZWQgV29yayBtdXN0IHByb3ZpZGUgc3VmZmljaWVudCBkb2N1bWVudGF0aW9uIGFzIHBhcnQgb2YKKyAgICAgICBpdHNlbGYgdG8gYWxsb3cgZWFjaCByZWNpcGllbnQgb2YgdGhhdCBEZXJpdmVkIFdvcmsgdG8gaG9ub3IgdGhlIAorICAgICAgIHJlc3RyaWN0aW9ucyBpbiBDbGF1c2UgNiBhYm92ZSwgY29uY2VybmluZyBjaGFuZ2VzIGZyb20gdGhlIFdvcmsuCisKKzExLiBUaGlzIGxpY2Vuc2UgcGxhY2VzIG5vIHJlc3RyaWN0aW9ucyBvbiB3b3JrcyB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8KK3RoZSBXb3JrLCBub3IgZG9lcyB0aGlzIGxpY2Vuc2UgcGxhY2UgYW55IHJlc3RyaWN0aW9ucyBvbiBhZ2dyZWdhdGluZworc3VjaCB3b3JrcyB3aXRoIHRoZSBXb3JrIGJ5IGFueSBtZWFucy4KKworMTIuICBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0bywgb3IgbWF5IGJlIHVzZWQgdG8sIHByZXZlbnQKK2NvbXBsZXRlIGNvbXBsaWFuY2UgYnkgYWxsIHBhcnRpZXMgd2l0aCBhbGwgYXBwbGljYWJsZSBsYXdzLgorCisKK05PIFdBUlJBTlRZCis9PT09PT09PT09PQorCitUaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIFdvcmsuICBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluCit3cml0aW5nLCB0aGUgQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyB0aGUgV29yayBgYXMgaXNgLCB3aXRob3V0Cit3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QKK2xpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhCitwYXJ0aWN1bGFyIHB1cnBvc2UuICBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlCitvZiB0aGUgV29yayBpcyB3aXRoIHlvdS4gIFNob3VsZCB0aGUgV29yayBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUKK3RoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIsIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZword2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IgYW55IGF1dGhvciBuYW1lZCBpbiB0aGUgY29tcG9uZW50cyBvZiB0aGUKK1dvcmssIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5IGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgV29yayBhcworcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsCitzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mCit0aGUgV29yayBvciBvdXQgb2YgaW5hYmlsaXR5IHRvIHVzZSB0aGUgV29yayAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQKK3RvLCBsb3NzIG9mIGRhdGEsIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSwgb3IgbG9zc2VzIHN1c3RhaW5lZCBieQorYW55b25lIGFzIGEgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIHRoZSBXb3JrIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIKK3Byb2dyYW1zKSwgZXZlbiBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBvciBzYWlkIGF1dGhvciBvciBzYWlkIG90aGVyCitwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKworTUFJTlRFTkFOQ0UgT0YgVEhFIFdPUksKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBXb3JrIGhhcyB0aGUgc3RhdHVzIGBhdXRob3ItbWFpbnRhaW5lZGAgaWYgdGhlIENvcHlyaWdodCBIb2xkZXIKK2V4cGxpY2l0bHkgYW5kIHByb21pbmVudGx5IHN0YXRlcyBuZWFyIHRoZSBwcmltYXJ5IGNvcHlyaWdodCBub3RpY2UgaW4KK3RoZSBXb3JrIHRoYXQgdGhlIFdvcmsgY2FuIG9ubHkgYmUgbWFpbnRhaW5lZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcgorb3Igc2ltcGx5IHRoYXQgaXQgaXMgYGF1dGhvci1tYWludGFpbmVkYC4KKworVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYG1haW50YWluZWRgIGlmIHRoZXJlIGlzIGEgQ3VycmVudCBNYWludGFpbmVyCit3aG8gaGFzIGluZGljYXRlZCBpbiB0aGUgV29yayB0aGF0IHRoZXkgYXJlIHdpbGxpbmcgdG8gcmVjZWl2ZSBlcnJvcgorcmVwb3J0cyBmb3IgdGhlIFdvcmsgKGZvciBleGFtcGxlLCBieSBzdXBwbHlpbmcgYSB2YWxpZCBlLW1haWwKK2FkZHJlc3MpLiBJdCBpcyBub3QgcmVxdWlyZWQgZm9yIHRoZSBDdXJyZW50IE1haW50YWluZXIgdG8gYWNrbm93bGVkZ2UKK29yIGFjdCB1cG9uIHRoZXNlIGVycm9yIHJlcG9ydHMuCisKK1RoZSBXb3JrIGNoYW5nZXMgZnJvbSBzdGF0dXMgYG1haW50YWluZWRgIHRvIGB1bm1haW50YWluZWRgIGlmIHRoZXJlCitpcyBubyBDdXJyZW50IE1haW50YWluZXIsIG9yIHRoZSBwZXJzb24gc3RhdGVkIHRvIGJlIEN1cnJlbnQKK01haW50YWluZXIgb2YgdGhlIHdvcmsgY2Fubm90IGJlIHJlYWNoZWQgdGhyb3VnaCB0aGUgaW5kaWNhdGVkIG1lYW5zCitvZiBjb21tdW5pY2F0aW9uIGZvciBhIHBlcmlvZCBvZiBzaXggbW9udGhzLCBhbmQgdGhlcmUgYXJlIG5vIG90aGVyCitzaWduaWZpY2FudCBzaWducyBvZiBhY3RpdmUgbWFpbnRlbmFuY2UuCisKK1lvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmsgYnkgYWdyZWVtZW50IHdpdGgKK2FueSBleGlzdGluZyBDdXJyZW50IE1haW50YWluZXIgdG8gdGFrZSBvdmVyIHRoaXMgcm9sZS4KKworSWYgdGhlIFdvcmsgaXMgdW5tYWludGFpbmVkLCB5b3UgY2FuIGJlY29tZSB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mCit0aGUgV29yayB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisKKyAxLiAgTWFrZSBhIHJlYXNvbmFibGUgYXR0ZW1wdCB0byB0cmFjZSB0aGUgQ3VycmVudCBNYWludGFpbmVyIChhbmQKKyAgICAgdGhlIENvcHlyaWdodCBIb2xkZXIsIGlmIHRoZSB0d28gZGlmZmVyKSB0aHJvdWdoIHRoZSBtZWFucyBvZgorICAgICBhbiBJbnRlcm5ldCBvciBzaW1pbGFyIHNlYXJjaC4KKworIDIuICBJZiB0aGlzIHNlYXJjaCBpcyBzdWNjZXNzZnVsLCB0aGVuIGVucXVpcmUgd2hldGhlciB0aGUgV29yaworICAgICBpcyBzdGlsbCBtYWludGFpbmVkLgorCisgIGEuIElmIGl0IGlzIGJlaW5nIG1haW50YWluZWQsIHRoZW4gYXNrIHRoZSBDdXJyZW50IE1haW50YWluZXIKKyAgICAgdG8gdXBkYXRlIHRoZWlyIGNvbW11bmljYXRpb24gZGF0YSB3aXRoaW4gb25lIG1vbnRoLgorICAgICAKKyAgYi4gSWYgdGhlIHNlYXJjaCBpcyB1bnN1Y2Nlc3NmdWwgb3Igbm8gYWN0aW9uIHRvIHJlc3VtZSBhY3RpdmUKKyAgICAgbWFpbnRlbmFuY2UgaXMgdGFrZW4gYnkgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciwgdGhlbiBhbm5vdW5jZQorICAgICB3aXRoaW4gdGhlIHBlcnRpbmVudCBjb21tdW5pdHkgeW91ciBpbnRlbnRpb24gdG8gdGFrZSBvdmVyCisgICAgIG1haW50ZW5hbmNlLiAgKElmIHRoZSBXb3JrIGlzIGEgTGFUZVggd29yaywgdGhpcyBjb3VsZCBiZQorICAgICBkb25lLCBmb3IgZXhhbXBsZSwgYnkgcG9zdGluZyB0byBjb21wLnRleHQudGV4LikKKworIDNhLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIHJlYWNoYWJsZSBhbmQgYWdyZWVzIHRvIHBhc3MKKyAgICAgbWFpbnRlbmFuY2Ugb2YgdGhlIFdvcmsgdG8geW91LCB0aGVuIHRoaXMgdGFrZXMgZWZmZWN0CisgICAgIGltbWVkaWF0ZWx5IHVwb24gYW5ub3VuY2VtZW50LgorICAgICAKKyAgYi4gSWYgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBub3QgcmVhY2hhYmxlIGFuZCB0aGUgQ29weXJpZ2h0CisgICAgIEhvbGRlciBhZ3JlZXMgdGhhdCBtYWludGVuYW5jZSBvZiB0aGUgV29yayBiZSBwYXNzZWQgdG8geW91LAorICAgICB0aGVuIHRoaXMgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5IHVwb24gYW5ub3VuY2VtZW50LiAgCisgICAgCisgNC4gIElmIHlvdSBtYWtlIGFuIGBpbnRlbnRpb24gYW5ub3VuY2VtZW50YCBhcyBkZXNjcmliZWQgaW4gMmIuIGFib3ZlCisgICAgIGFuZCBhZnRlciB0aHJlZSBtb250aHMgeW91ciBpbnRlbnRpb24gaXMgY2hhbGxlbmdlZCBuZWl0aGVyIGJ5CisgICAgIHRoZSBDdXJyZW50IE1haW50YWluZXIgbm9yIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG5vciBieSBvdGhlcgorICAgICBwZW9wbGUsIHRoZW4geW91IG1heSBhcnJhbmdlIGZvciB0aGUgV29yayB0byBiZSBjaGFuZ2VkIHNvIGFzCisgICAgIHRvIG5hbWUgeW91IGFzIHRoZSAobmV3KSBDdXJyZW50IE1haW50YWluZXIuCisgICAgIAorIDUuICBJZiB0aGUgcHJldmlvdXNseSB1bnJlYWNoYWJsZSBDdXJyZW50IE1haW50YWluZXIgYmVjb21lcworICAgICByZWFjaGFibGUgb25jZSBtb3JlIHdpdGhpbiB0aHJlZSBtb250aHMgb2YgYSBjaGFuZ2UgY29tcGxldGVkCisgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiAzYikgb3IgNCksIHRoZW4gdGhhdCBDdXJyZW50IE1haW50YWluZXIgbXVzdAorICAgICBiZWNvbWUgb3IgcmVtYWluIHRoZSBDdXJyZW50IE1haW50YWluZXIgdXBvbiByZXF1ZXN0IHByb3ZpZGVkCisgICAgIHRoZXkgdGhlbiB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguCisKK0EgY2hhbmdlIGluIHRoZSBDdXJyZW50IE1haW50YWluZXIgZG9lcyBub3QsIG9mIGl0c2VsZiwgYWx0ZXIgdGhlIGZhY3QKK3RoYXQgdGhlIFdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwgbGljZW5zZS4KKworSWYgeW91IGJlY29tZSB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3Ugc2hvdWxkCitpbW1lZGlhdGVseSBwcm92aWRlLCB3aXRoaW4gdGhlIFdvcmssIGEgcHJvbWluZW50IGFuZCB1bmFtYmlndW91cworc3RhdGVtZW50IG9mIHlvdXIgc3RhdHVzIGFzIEN1cnJlbnQgTWFpbnRhaW5lci4gIFlvdSBzaG91bGQgYWxzbworYW5ub3VuY2UgeW91ciBuZXcgc3RhdHVzIHRvIHRoZSBzYW1lIHBlcnRpbmVudCBjb21tdW5pdHkgYXMKK2luIDJiKSBhYm92ZS4KKworCitXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZAorcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyCit3b3JrcyB1bmRlciB0aGlzIGxpY2Vuc2UuICBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdWAgaW4KK3RoaXMgc2VjdGlvbi4KKworQ2hvb3NpbmcgVGhpcyBMaWNlbnNlIG9yIEFub3RoZXIgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBmb3IgYW55IHBhcnQgb2YgeW91ciB3b3JrIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qCitjb25kaXRpb25zIHRoYXQgZGlmZmVyIHNpZ25pZmljYW50bHkgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4KK2RvIG5vdCByZWZlciB0byB0aGlzIGxpY2Vuc2UgYW55d2hlcmUgaW4geW91ciB3b3JrIGJ1dCwgaW5zdGVhZCwKK2Rpc3RyaWJ1dGUgeW91ciB3b3JrIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuICBZb3UgbWF5IHVzZSB0aGUgdGV4dAorb2YgdGhpcyBsaWNlbnNlIGFzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2UKK3Nob3VsZCBub3QgcmVmZXIgdG8gdGhlIExQUEwgb3Igb3RoZXJ3aXNlIGdpdmUgdGhlIGltcHJlc3Npb24gdGhhdAoreW91ciB3b3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLgorCitUaGUgZG9jdW1lbnQgYG1vZGd1aWRlLnRleGAgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGV4cGxhaW5zCit0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiAgSXQgZXhwbGFpbnMsCitmb3IgZXhhbXBsZSwgd2h5IGRpc3RyaWJ1dGluZyBMYVRlWCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIChHUEwpIHdhcyBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUuICBFdmVuIGlmIHlvdXIgd29yayBpcwordW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgZGlzY3Vzc2lvbiBpbiBgbW9kZ3VpZGUudGV4YCBtYXkgc3RpbGwgYmUKK3JlbGV2YW50LCBhbmQgYXV0aG9ycyBpbnRlbmRpbmcgdG8gZGlzdHJpYnV0ZSB0aGVpciB3b3JrcyB1bmRlciBhbnkKK2xpY2Vuc2UgYXJlIGVuY291cmFnZWQgdG8gcmVhZCBpdC4KKworQSBSZWNvbW1lbmRhdGlvbiBvbiBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHdpc2UgbmV2ZXIgdG8gbW9kaWZ5IGEgY29tcG9uZW50IG9mIHRoZSBXb3JrLCBldmVuIGZvciB5b3VyIG93bgorcGVyc29uYWwgdXNlLCB3aXRob3V0IGFsc28gbWVldGluZyB0aGUgYWJvdmUgY29uZGl0aW9ucyBmb3IKK2Rpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgY29tcG9uZW50LiAgV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2gKK21vZGlmaWNhdGlvbnMgd2lsbCBuZXZlciBiZSBkaXN0cmlidXRlZCwgb2Z0ZW4gdGhpcyB3aWxsIGhhcHBlbiBieQorYWNjaWRlbnQgLS0geW91IG1heSBmb3JnZXQgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCB0aGF0IGNvbXBvbmVudDsgb3IKK2l0IG1heSBub3Qgb2NjdXIgdG8geW91IHdoZW4gYWxsb3dpbmcgb3RoZXJzIHRvIGFjY2VzcyB0aGUgbW9kaWZpZWQKK3ZlcnNpb24gdGhhdCB5b3UgYXJlIHRodXMgZGlzdHJpYnV0aW5nIGl0IGFuZCB2aW9sYXRpbmcgdGhlIGNvbmRpdGlvbnMKK29mIHRoaXMgbGljZW5zZSBpbiB3YXlzIHRoYXQgY291bGQgaGF2ZSBsZWdhbCBpbXBsaWNhdGlvbnMgYW5kLCB3b3JzZSwKK2NhdXNlIHByb2JsZW1zIGZvciB0aGUgY29tbXVuaXR5LiAgSXQgaXMgdGhlcmVmb3JlIHVzdWFsbHkgaW4geW91cgorYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weSBvZiB0aGUgV29yayBpZGVudGljYWwgd2l0aCB0aGUgcHVibGljCitvbmUuICBNYW55IHdvcmtzIHByb3ZpZGUgd2F5cyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGF0IHdvcmsKK3dpdGhvdXQgYWx0ZXJpbmcgYW55IG9mIGl0cyBsaWNlbnNlZCBjb21wb25lbnRzLgorCitIb3cgdG8gVXNlIFRoaXMgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIHRoaXMgbGljZW5zZSwgcGxhY2UgaW4gZWFjaCBvZiB0aGUgY29tcG9uZW50cyBvZiB5b3VyIHdvcmsgYm90aAorYW4gZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciB0aGUgd29yaword2FzIGF1dGhvcmVkIGFuZC9vciBsYXN0IHN1YnN0YW50aWFsbHkgbW9kaWZpZWQuICBJbmNsdWRlIGFsc28gYQorc3RhdGVtZW50IHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoYXQKK2NvbXBvbmVudCBpcyBjb25zdHJhaW5lZCBieSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQ6CisKKyAgJSUgcGlnLmR0eAorICAlJSBDb3B5cmlnaHQgMjAwNSBNLiBZLiBOYW1lCisgICUKKyAgJSBUaGlzIHdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUKKyAgJSBjb25kaXRpb25zIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlLCBlaXRoZXIgdmVyc2lvbiAxLjMKKyAgJSBvZiB0aGlzIGxpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgJSBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGluCisgICUgICBodHRwOi8vd3d3LmxhdGV4LXByb2plY3Qub3JnL2xwcGwudHh0CisgICUgYW5kIHZlcnNpb24gMS4zIG9yIGxhdGVyIGlzIHBhcnQgb2YgYWxsIGRpc3RyaWJ1dGlvbnMgb2YgTGFUZVgKKyAgJSB2ZXJzaW9uIDIwMDUvMTIvMDEgb3IgbGF0ZXIuCisgICUKKyAgJSBUaGlzIHdvcmsgaGFzIHRoZSBMUFBMIG1haW50ZW5hbmNlIHN0YXR1cyBgbWFpbnRhaW5lZGAuCisgICUgCisgICUgVGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGlzIHdvcmsgaXMgTS4gWS4gTmFtZS4KKyAgJQorICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworICAlIGFuZCB0aGUgZGVyaXZlZCBmaWxlIHBpZy5zdHkuCisKK0dpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zCitnaXZlbiBpbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgd291bGQgYXBwbHksIHdpdGggdGhlIGBXb3JrYCByZWZlcnJpbmcKK3RvIHRoZSB0aHJlZSBmaWxlcyBgcGlnLmR0eGAsIGBwaWcuaW5zYCwgYW5kIGBwaWcuc3R5YCAodGhlIGxhc3QgYmVpbmcKK2dlbmVyYXRlZCBmcm9tIGBwaWcuZHR4YCB1c2luZyBgcGlnLmluc2ApLCB0aGUgYEJhc2UgSW50ZXJwcmV0ZXJgCityZWZlcnJpbmcgdG8gYW55IGBMYVRlWC1Gb3JtYXRgLCBhbmQgYm90aCBgQ29weXJpZ2h0IEhvbGRlcmAgYW5kCitgQ3VycmVudCBNYWludGFpbmVyYCByZWZlcnJpbmcgdG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZWAuCisKK0lmIHlvdSBkbyBub3Qgd2FudCB0aGUgTWFpbnRlbmFuY2Ugc2VjdGlvbiBvZiBMUFBMIHRvIGFwcGx5IHRvIHlvdXIKK1dvcmssIGNoYW5nZSBgbWFpbnRhaW5lZGAgYWJvdmUgaW50byBgYXV0aG9yLW1haW50YWluZWRgLiAgCitIb3dldmVyLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGBtYWludGFpbmVkYCwgYXMgdGhlIE1haW50ZW5hbmNlCitzZWN0aW9uIHdhcyBhZGRlZCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB5b3VyIFdvcmsgcmVtYWlucyB1c2VmdWwgdG8KK3RoZSBjb21tdW5pdHkgZXZlbiB3aGVuIHlvdSBjYW4gbm8gbG9uZ2VyIG1haW50YWluIGFuZCBzdXBwb3J0IGl0Cit5b3Vyc2VsZi4KKworRGVyaXZlZCBXb3JrcyBUaGF0IEFyZSBOb3QgUmVwbGFjZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2V2ZXJhbCBjbGF1c2VzIG9mIHRoZSBMUFBMIHNwZWNpZnkgbWVhbnMgdG8gcHJvdmlkZSByZWxpYWJpbGl0eSBhbmQKK3N0YWJpbGl0eSBmb3IgdGhlIHVzZXIgY29tbXVuaXR5LiBUaGV5IHRoZXJlZm9yZSBjb25jZXJuIHRoZW1zZWx2ZXMKK3dpdGggdGhlIGNhc2UgdGhhdCBhIERlcml2ZWQgV29yayBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEKKyhjb21wYXRpYmxlIG9yIGluY29tcGF0aWJsZSkgcmVwbGFjZW1lbnQgb2YgdGhlIG9yaWdpbmFsIFdvcmsuIElmCit0aGlzIGlzIG5vdCB0aGUgY2FzZSAoZS5nLiwgaWYgYSBmZXcgbGluZXMgb2YgY29kZSBhcmUgcmV1c2VkIGZvciBhCitjb21wbGV0ZWx5IGRpZmZlcmVudCB0YXNrKSwgdGhlbiBjbGF1c2VzIDZiIGFuZCA2ZCBzaGFsbCBub3QgYXBwbHkuCisKKworSW1wb3J0YW50IFJlY29tbWVuZGF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgRGVmaW5pbmcgV2hhdCBDb25zdGl0dXRlcyB0aGUgV29yaworCisgICBUaGUgTFBQTCByZXF1aXJlcyB0aGF0IGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFdvcmsgY29udGFpbiBhbGwgdGhlCisgICBmaWxlcyBvZiB0aGUgV29yay4gIEl0IGlzIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB5b3UgcHJvdmlkZSBhCisgICB3YXkgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgY29uc3RpdHV0ZSB0aGUgV29yay4KKyAgIFRoaXMgY291bGQsIGZvciBleGFtcGxlLCBiZSBhY2hpZXZlZCBieSBleHBsaWNpdGx5IGxpc3RpbmcgYWxsIHRoZQorICAgZmlsZXMgb2YgdGhlIFdvcmsgbmVhciB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBlYWNoIGZpbGUgb3IgYnkKKyAgIHVzaW5nIGEgbGluZSBzdWNoIGFzOgorCisgICAgJSBUaGlzIHdvcmsgY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuCisgICAKKyAgIGluIHRoYXQgcGxhY2UuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlCisgICBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UKKyAgIHRvIGNvbXByaXNlIHRoZSBXb3JrIGFuZCwgaW4gc3VjaCBhIGNhc2UsIHRoZSBsaWNlbnNlZSB3b3VsZCBiZQorICAgZW50aXRsZWQgdG8gbWFrZSByZWFzb25hYmxlIGNvbmplY3R1cmVzIGFzIHRvIHdoaWNoIGZpbGVzIGNvbXByaXNlCisgICB0aGUgV29yay4KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xpYnBuZyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDViMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xpYnBuZwpAQCAtMCwwICsxLDExMiBAQAorCitUaGlzIGNvcHkgb2YgdGhlIGxpYnBuZyBub3RpY2VzIGlzIHByb3ZpZGVkIGZvciB5b3VyIGNvbnZlbmllbmNlLiAgSW4gY2FzZSBvZgorYW55IGRpc2NyZXBhbmN5IGJldHdlZW4gdGhpcyBjb3B5IGFuZCB0aGUgbm90aWNlcyBpbiB0aGUgZmlsZSBwbmcuaCB0aGF0IGlzCitpbmNsdWRlZCBpbiB0aGUgbGlicG5nIGRpc3RyaWJ1dGlvbiwgdGhlIGxhdHRlciBzaGFsbCBwcmV2YWlsLgorCitDT1BZUklHSFQgTk9USUNFLCBESVNDTEFJTUVSLCBhbmQgTElDRU5TRToKKworSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwordGhpcyBzZW50ZW5jZS4KKworVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBsaWJwbmcgbGljZW5zZS4KKworbGlicG5nIHZlcnNpb25zIDEuMi42LCBBdWd1c3QgMTUsIDIwMDQsIHRocm91Z2ggMS40LjUsIERlY2VtYmVyIDksIDIwMTAsIGFyZQorQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2LTIwMTAgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4yLjUKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFsIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCisKKyAgIENvc21pbiBUcnV0YQorCitsaWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAxLjIuNSAtIE9jdG9iZXIgMywgMjAwMiwgYXJlCitDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNgord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCisKKyAgIFNpbW9uLVBpZXJyZSBDYWRpZXV4CisgICBFcmljIFMuIFJheW1vbmQKKyAgIEdpbGxlcyBWb2xsYW50CisKK2FuZCB3aXRoIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25zIHRvIHRoZSBkaXNjbGFpbWVyOgorCisgICBUaGVyZSBpcyBubyB3YXJyYW50eSBhZ2FpbnN0IGludGVyZmVyZW5jZSB3aXRoIHlvdXIgZW5qb3ltZW50IG9mIHRoZQorICAgbGlicmFyeSBvciBhZ2FpbnN0IGluZnJpbmdlbWVudC4gIFRoZXJlIGlzIG5vIHdhcnJhbnR5IHRoYXQgb3VyCisgICBlZmZvcnRzIG9yIHRoZSBsaWJyYXJ5IHdpbGwgZnVsZmlsbCBhbnkgb2YgeW91ciBwYXJ0aWN1bGFyIHB1cnBvc2VzCisgICBvciBuZWVkcy4gIFRoaXMgbGlicmFyeSBpcyBwcm92aWRlZCB3aXRoIGFsbCBmYXVsdHMsIGFuZCB0aGUgZW50aXJlCisgICByaXNrIG9mIHNhdGlzZmFjdG9yeSBxdWFsaXR5LCBwZXJmb3JtYW5jZSwgYWNjdXJhY3ksIGFuZCBlZmZvcnQgaXMgd2l0aAorICAgdGhlIHVzZXIuCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4wLjYsIE1hcmNoIDIwLCAyMDAwLCBhcmUKK0NvcHlyaWdodCAoYykgMTk5OCwgMTk5OSBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjk2LAord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgorCisgICBUb20gTGFuZQorICAgR2xlbm4gUmFuZGVycy1QZWhyc29uCisgICBXaWxsZW0gdmFuIFNjaGFpaworCitsaWJwbmcgdmVyc2lvbnMgMC44OSwgSnVuZSAxOTk2LCB0aHJvdWdoIDAuOTYsIE1heSAxOTk3LCBhcmUKK0NvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcgorRGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTAuODgsCit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6CisKKyAgIEpvaG4gQm93bGVyCisgICBLZXZpbiBCcmFjZXkKKyAgIFNhbSBCdXNoZWxsCisgICBNYWdudXMgSG9sbWdyZW4KKyAgIEdyZWcgUm9lbG9mcworICAgVG9tIFRhbm5lcgorCitsaWJwbmcgdmVyc2lvbnMgMC41LCBNYXkgMTk5NSwgdGhyb3VnaCAwLjg4LCBKYW51YXJ5IDE5OTYsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLgorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgY29weXJpZ2h0IGFuZCBsaWNlbnNlLCAiQ29udHJpYnV0aW5nIEF1dGhvcnMiCitpcyBkZWZpbmVkIGFzIHRoZSBmb2xsb3dpbmcgc2V0IG9mIGluZGl2aWR1YWxzOgorCisgICBBbmRyZWFzIERpbGdlcgorICAgRGF2ZSBNYXJ0aW5kYWxlCisgICBHdXkgRXJpYyBTY2hhbG5hdAorICAgUGF1bCBTY2htaWR0CisgICBUaW0gV2VnbmVyCisKK1RoZSBQTkcgUmVmZXJlbmNlIExpYnJhcnkgaXMgc3VwcGxpZWQgIkFTIElTIi4gIFRoZSBDb250cmlidXRpbmcgQXV0aG9ycworYW5kIEdyb3VwIDQyLCBJbmMuIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzLCBleHByZXNzZWQgb3IgaW1wbGllZCwKK2luY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIG9mCitmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4gIFRoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4KK2Fzc3VtZSBubyBsaWFiaWxpdHkgZm9yIGRpcmVjdCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwsIGV4ZW1wbGFyeSwKK29yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgd2hpY2ggbWF5IHJlc3VsdCBmcm9tIHRoZSB1c2Ugb2YgdGhlIFBORworUmVmZXJlbmNlIExpYnJhcnksIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvdXJjZSBjb2RlLCBvciBwb3J0aW9ucyBoZXJlb2YsIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIHN1YmplY3QKK3RvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc291cmNlIGNvZGUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQuCisKKzIuIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoIGFuZCBtdXN0IG5vdAorICAgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS4KKworMy4gVGhpcyBDb3B5cmlnaHQgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55CisgICBzb3VyY2Ugb3IgYWx0ZXJlZCBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCitUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMgYW5kIEdyb3VwIDQyLCBJbmMuIHNwZWNpZmljYWxseSBwZXJtaXQsIHdpdGhvdXQKK2ZlZSwgYW5kIGVuY291cmFnZSB0aGUgdXNlIG9mIHRoaXMgc291cmNlIGNvZGUgYXMgYSBjb21wb25lbnQgdG8KK3N1cHBvcnRpbmcgdGhlIFBORyBmaWxlIGZvcm1hdCBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLiAgSWYgeW91IHVzZSB0aGlzCitzb3VyY2UgY29kZSBpbiBhIHByb2R1Y3QsIGFja25vd2xlZGdtZW50IGlzIG5vdCByZXF1aXJlZCBidXQgd291bGQgYmUKK2FwcHJlY2lhdGVkLgorCisKK0EgInBuZ19nZXRfY29weXJpZ2h0IiBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIGZvciBjb252ZW5pZW50IHVzZSBpbiAiYWJvdXQiCitib3hlcyBhbmQgdGhlIGxpa2U6CisKKyAgIHByaW50ZigiJXMiLHBuZ19nZXRfY29weXJpZ2h0KE5VTEwpKTsKKworQWxzbywgdGhlIFBORyBsb2dvIChpbiBQTkcgZm9ybWF0LCBvZiBjb3Vyc2UpIGlzIHN1cHBsaWVkIGluIHRoZQorZmlsZXMgInBuZ2Jhci5wbmciIGFuZCAicG5nYmFyLmpwZyAoODh4MzEpIGFuZCAicG5nbm93LnBuZyIgKDk4eDMxKS4KKworTGlicG5nIGlzIE9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgU29mdHdhcmUuICBPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIGlzIGEKK2NlcnRpZmljYXRpb24gbWFyayBvZiB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4KKworR2xlbm4gUmFuZGVycy1QZWhyc29uCitnbGVubnJwIGF0IHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorRGVjZW1iZXIgOSwgMjAxMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01JVCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjhiZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01JVApAQCAtMCwwICsxLDIzIEBACisKK01JVCBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgPHllYXI+IDxjb3B5cmlnaHQgaG9sZGVycz4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2RjM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4wCkBAIC0wLDAgKzEsMTA5IEBACisKK01PWklMTEEgUFVCTElDIExJQ0VOU0UKK1ZlcnNpb24gMS4wCisKKzEuIERlZmluaXRpb25zLgorCisxLjEuIGBgQ29udHJpYnV0b3JgYCBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisxLjIuIGBgQ29udHJpYnV0b3IgVmVyc2lvbmBgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiBgYENvdmVyZWQgQ29kZWBgIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gYGBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21gYCBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiBgYEV4ZWN1dGFibGVgYCBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiBgYEluaXRpYWwgRGV2ZWxvcGVyYGAgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorCisxLjcuIGBgTGFyZ2VyIFdvcmtgYCBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguIGBgTGljZW5zZWBgIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gYGBNb2RpZmljYXRpb25zYGAgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuMTAuIGBgT3JpZ2luYWwgQ29kZWBgIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuIGBgU291cmNlIENvZGVgYCBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuIGBgWW91YGAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgYGBZb3VgYCBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgYGBjb250cm9sYGAgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIAorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoYGBVdGlsaXplYGApIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4gCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4gCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiAKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIAorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIAorSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIGBgTEVHQUxgYCB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4gCitJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuIAorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuIAorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKzYuMS4gTmV3IFZlcnNpb25zLiAKK05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uIChgYE5ldHNjYXBlYGApIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZSBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLiAKK0lmIHlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzIGBgTW96aWxsYWBgLCBgYE1PWklMTEFQTGBgLCBgYE1PWlBMYGAsIGBgTmV0c2NhcGVgYCwgYGBOUExgYCBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBpbiB5b3VyIGxpY2Vuc2UgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBhbmQgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gYGBBUyBJU2BgIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4LiBURVJNSU5BVElPTi4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSBgYGNvbW1lcmNpYWwgaXRlbSxgYCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlYGAgYW5kIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLGBgIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKzExLiBNSVNDRUxMQU5FT1VTLgorVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcgYXJiaXRyYXRpb24sIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55IGFyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB1bmRlciB0aGUgYXVzcGljZXMgb2YgSkFNUy9FbmREaXNwdXRlOyBhbmQgKGMpIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIENvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCitFWEhJQklUIEEuCitgYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fXyBfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLmBgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWE4YzRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4xCkBAIC0wLDAgKzEsMTg1IEBACisKK01vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiCittZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xLiAiQ29udHJpYnV0b3IiCittZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIgorbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorMS4zLiAiQ292ZXJlZCBDb2RlIgorbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIKK21lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41LiAiRXhlY3V0YWJsZSIKK21lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiCittZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcuICJMYXJnZXIgV29yayIKK21lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjguICJMaWNlbnNlIgorbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xLiAiTGljZW5zYWJsZSIKK21lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45LiAiTW9kaWZpY2F0aW9ucyIKK21lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0FueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIKK21lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIgorbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExLiAiU291cmNlIENvZGUiCittZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKzEuMTIuICJZb3UiIChvciAiWW91ciIpCittZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCit1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KK3RoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEgKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEgKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorMi4yLiBDb250cmlidXRvciBHcmFudC4KKworU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKwordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAordW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KK3RoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMiAoYSkgYW5kIDIuMiAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yIChiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBDb2RlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMKKworSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40IChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbnMgMy4xLCAzLjIsIDMuMywgMy40IGFuZCAzLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworNi4xLiBOZXcgVmVyc2lvbnMKKworTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24gKCJOZXRzY2FwZSIpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBOZXRzY2FwZS4gTm8gb25lIG90aGVyIHRoYW4gTmV0c2NhcGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MKKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgIk1vemlsbGEiLCAiTU9aSUxMQVBMIiwgIk1PWlBMIiwgIk5ldHNjYXBlIiwgIk1QTCIsICJOUEwiIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBhbmQgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVGVybWluYXRpb24KKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKzguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIGdvdmVybm1lbnQgZW5kIHVzZXJzCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1pc2NlbGxhbmVvdXMKKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSZXNwb25zaWJpbGl0eSBmb3IgY2xhaW1zCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE11bHRpcGxlLWxpY2Vuc2VkIGNvZGUKKworSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzICJNdWx0aXBsZS1MaWNlbnNlZCIuICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBNUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKworRXhoaWJpdCBBIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZS4KKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKK1ZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKK0xpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLgorUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fXworX19fX19fX19fX19fX19fX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKK29mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgICJbX19fXSBMaWNlbnNlIiksIGluIHdoaWNoIGNhc2UgdGhlCitwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZQorYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCit5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKK2RlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUKK3RoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKK3VuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBbX19fXSBMaWNlbnNlLiIKK05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTIuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUyZjc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMi4wCkBAIC0wLDAgKzEsMzczIEBACitNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIERlZmluaXRpb25zCistLS0tLS0tLS0tLS0tLQorCisxLjEuICJDb250cmlidXRvciIKKyAgICBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IHRoYXQgY3JlYXRlcywgY29udHJpYnV0ZXMgdG8KKyAgICB0aGUgY3JlYXRpb24gb2YsIG9yIG93bnMgQ292ZXJlZCBTb2Z0d2FyZS4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKKyAgICBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbnMgb2Ygb3RoZXJzIChpZiBhbnkpIHVzZWQKKyAgICBieSBhIENvbnRyaWJ1dG9yIGFuZCB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IncyBDb250cmlidXRpb24uCisKKzEuMy4gIkNvbnRyaWJ1dGlvbiIKKyAgICBtZWFucyBDb3ZlcmVkIFNvZnR3YXJlIG9mIGEgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS40LiAiQ292ZXJlZCBTb2Z0d2FyZSIKKyAgICBtZWFucyBTb3VyY2UgQ29kZSBGb3JtIHRvIHdoaWNoIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yIGhhcyBhdHRhY2hlZAorICAgIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCB0aGUgRXhlY3V0YWJsZSBGb3JtIG9mIHN1Y2ggU291cmNlIENvZGUKKyAgICBGb3JtLCBhbmQgTW9kaWZpY2F0aW9ucyBvZiBzdWNoIFNvdXJjZSBDb2RlIEZvcm0sIGluIGVhY2ggY2FzZQorICAgIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjUuICJJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMiCisgICAgbWVhbnMKKworICAgIChhKSB0aGF0IHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGRlc2NyaWJlZAorICAgICAgICBpbiBFeGhpYml0IEIgdG8gdGhlIENvdmVyZWQgU29mdHdhcmU7IG9yCisKKyAgICAoYikgdGhhdCB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB3YXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgICAgIHZlcnNpb24gMS4xIG9yIGVhcmxpZXIgb2YgdGhlIExpY2Vuc2UsIGJ1dCBub3QgYWxzbyB1bmRlciB0aGUKKyAgICAgICAgdGVybXMgb2YgYSBTZWNvbmRhcnkgTGljZW5zZS4KKworMS42LiAiRXhlY3V0YWJsZSBGb3JtIgorICAgIG1lYW5zIGFueSBmb3JtIG9mIHRoZSB3b3JrIG90aGVyIHRoYW4gU291cmNlIENvZGUgRm9ybS4KKworMS43LiAiTGFyZ2VyIFdvcmsiCisgICAgbWVhbnMgYSB3b3JrIHRoYXQgY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG90aGVyIG1hdGVyaWFsLCBpbiAKKyAgICBhIHNlcGFyYXRlIGZpbGUgb3IgZmlsZXMsIHRoYXQgaXMgbm90IENvdmVyZWQgU29mdHdhcmUuCisKKzEuOC4gIkxpY2Vuc2UiCisgICAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiAiTGljZW5zYWJsZSIKKyAgICBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsCisgICAgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHksIGFueSBhbmQKKyAgICBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTAuICJNb2RpZmljYXRpb25zIgorICAgIG1lYW5zIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKGEpIGFueSBmaWxlIGluIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCByZXN1bHRzIGZyb20gYW4gYWRkaXRpb24gdG8sCisgICAgICAgIGRlbGV0aW9uIGZyb20sIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgQ292ZXJlZAorICAgICAgICBTb2Z0d2FyZTsgb3IKKworICAgIChiKSBhbnkgbmV3IGZpbGUgaW4gU291cmNlIENvZGUgRm9ybSB0aGF0IGNvbnRhaW5zIGFueSBDb3ZlcmVkCisgICAgICAgIFNvZnR3YXJlLgorCisxLjExLiAiUGF0ZW50IENsYWltcyIgb2YgYSBDb250cmlidXRvcgorICAgIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwKKyAgICBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IHN1Y2gKKyAgICBDb250cmlidXRvciB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCwgYnV0IGZvciB0aGUgZ3JhbnQgb2YgdGhlCisgICAgTGljZW5zZSwgYnkgdGhlIG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvciBzYWxlLCBoYXZpbmcKKyAgICBtYWRlLCBpbXBvcnQsIG9yIHRyYW5zZmVyIG9mIGVpdGhlciBpdHMgQ29udHJpYnV0aW9ucyBvciBpdHMKKyAgICBDb250cmlidXRvciBWZXJzaW9uLgorCisxLjEyLiAiU2Vjb25kYXJ5IExpY2Vuc2UiCisgICAgbWVhbnMgZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLjAsIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLjEsIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwKKyAgICBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAzLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aG9zZQorICAgIGxpY2Vuc2VzLgorCisxLjEzLiAiU291cmNlIENvZGUgRm9ybSIKKyAgICBtZWFucyB0aGUgZm9ybSBvZiB0aGUgd29yayBwcmVmZXJyZWQgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLgorCisxLjE0LiAiWW91IiAob3IgIllvdXIiKQorICAgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcworICAgIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0CisgICAgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IKKyAgICBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3QKKyAgICBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAorICAgIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbgorICAgIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsCisgICAgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBMaWNlbnNlIEdyYW50cyBhbmQgQ29uZGl0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMi4xLiBHcmFudHMKKworRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZToKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykKKyAgICBMaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdG8gdXNlLCByZXByb2R1Y2UsIG1ha2UgYXZhaWxhYmxlLAorICAgIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSBleHBsb2l0IGl0cworICAgIENvbnRyaWJ1dGlvbnMsIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIE1vZGlmaWNhdGlvbnMsIG9yCisgICAgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgb2Ygc3VjaCBDb250cmlidXRvciB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyCisgICAgZm9yIHNhbGUsIGhhdmUgbWFkZSwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIGVpdGhlciBpdHMKKyAgICBDb250cmlidXRpb25zIG9yIGl0cyBDb250cmlidXRvciBWZXJzaW9uLgorCisyLjIuIEVmZmVjdGl2ZSBEYXRlCisKK1RoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byBhbnkgQ29udHJpYnV0aW9uCitiZWNvbWUgZWZmZWN0aXZlIGZvciBlYWNoIENvbnRyaWJ1dGlvbiBvbiB0aGUgZGF0ZSB0aGUgQ29udHJpYnV0b3IgZmlyc3QKK2Rpc3RyaWJ1dGVzIHN1Y2ggQ29udHJpYnV0aW9uLgorCisyLjMuIExpbWl0YXRpb25zIG9uIEdyYW50IFNjb3BlCisKK1RoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyIGFyZSB0aGUgb25seSByaWdodHMgZ3JhbnRlZCB1bmRlcgordGhpcyBMaWNlbnNlLiBObyBhZGRpdGlvbmFsIHJpZ2h0cyBvciBsaWNlbnNlcyB3aWxsIGJlIGltcGxpZWQgZnJvbSB0aGUKK2Rpc3RyaWJ1dGlvbiBvciBsaWNlbnNpbmcgb2YgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuCitOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgYnkgYQorQ29udHJpYnV0b3I6CisKKyhhKSBmb3IgYW55IGNvZGUgdGhhdCBhIENvbnRyaWJ1dG9yIGhhcyByZW1vdmVkIGZyb20gQ292ZXJlZCBTb2Z0d2FyZTsKKyAgICBvcgorCisoYikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgWW91ciBhbmQgYW55IG90aGVyIHRoaXJkIHBhcnR5J3MKKyAgICBtb2RpZmljYXRpb25zIG9mIENvdmVyZWQgU29mdHdhcmUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIGl0cworICAgIENvbnRyaWJ1dGlvbnMgd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgaXRzIENvbnRyaWJ1dG9yCisgICAgVmVyc2lvbik7IG9yCisKKyhjKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIFNvZnR3YXJlIGluIHRoZSBhYnNlbmNlIG9mCisgICAgaXRzIENvbnRyaWJ1dGlvbnMuCisKK1RoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIGluIHRoZSB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLAorb3IgbG9nb3Mgb2YgYW55IENvbnRyaWJ1dG9yIChleGNlcHQgYXMgbWF5IGJlIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aAordGhlIG5vdGljZSByZXF1aXJlbWVudHMgaW4gU2VjdGlvbiAzLjQpLgorCisyLjQuIFN1YnNlcXVlbnQgTGljZW5zZXMKKworTm8gQ29udHJpYnV0b3IgbWFrZXMgYWRkaXRpb25hbCBncmFudHMgYXMgYSByZXN1bHQgb2YgWW91ciBjaG9pY2UgdG8KK2Rpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAoc2VlIFNlY3Rpb24gMTAuMikgb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UgKGlmCitwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMy4zKS4KKworMi41LiBSZXByZXNlbnRhdGlvbgorCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0aGUgQ29udHJpYnV0b3IgYmVsaWV2ZXMgaXRzCitDb250cmlidXRpb25zIGFyZSBpdHMgb3JpZ2luYWwgY3JlYXRpb24ocykgb3IgaXQgaGFzIHN1ZmZpY2llbnQgcmlnaHRzCit0byBncmFudCB0aGUgcmlnaHRzIHRvIGl0cyBDb250cmlidXRpb25zIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMi42LiBGYWlyIFVzZQorCitUaGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIGxpbWl0IGFueSByaWdodHMgWW91IGhhdmUgdW5kZXIKK2FwcGxpY2FibGUgY29weXJpZ2h0IGRvY3RyaW5lcyBvZiBmYWlyIHVzZSwgZmFpciBkZWFsaW5nLCBvciBvdGhlcgorZXF1aXZhbGVudHMuCisKKzIuNy4gQ29uZGl0aW9ucworCitTZWN0aW9ucyAzLjEsIDMuMiwgMy4zLCBhbmQgMy40IGFyZSBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkCitpbiBTZWN0aW9uIDIuMS4KKworMy4gUmVzcG9uc2liaWxpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCiszLjEuIERpc3RyaWJ1dGlvbiBvZiBTb3VyY2UgRm9ybQorCitBbGwgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUgRm9ybSwgaW5jbHVkaW5nIGFueQorTW9kaWZpY2F0aW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIG11c3QgYmUgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIHRoYXQgdGhlIFNvdXJjZQorQ29kZSBGb3JtIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLCBhbmQgaG93IHRoZXkgY2FuIG9idGFpbiBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbWF5IG5vdAorYXR0ZW1wdCB0byBhbHRlciBvciByZXN0cmljdCB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZQorRm9ybS4KKworMy4yLiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBGb3JtCisKK0lmIFlvdSBkaXN0cmlidXRlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBGb3JtIHRoZW46CisKKyhhKSBzdWNoIENvdmVyZWQgU29mdHdhcmUgbXVzdCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlCisgICAgRm9ybSwgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4xLCBhbmQgWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgb2YKKyAgICB0aGUgRXhlY3V0YWJsZSBGb3JtIGhvdyB0aGV5IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHN1Y2ggU291cmNlIENvZGUKKyAgICBGb3JtIGJ5IHJlYXNvbmFibGUgbWVhbnMgaW4gYSB0aW1lbHkgbWFubmVyLCBhdCBhIGNoYXJnZSBubyBtb3JlCisgICAgdGhhbiB0aGUgY29zdCBvZiBkaXN0cmlidXRpb24gdG8gdGhlIHJlY2lwaWVudDsgYW5kCisKKyhiKSBZb3UgbWF5IGRpc3RyaWJ1dGUgc3VjaCBFeGVjdXRhYmxlIEZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICBMaWNlbnNlLCBvciBzdWJsaWNlbnNlIGl0IHVuZGVyIGRpZmZlcmVudCB0ZXJtcywgcHJvdmlkZWQgdGhhdCB0aGUKKyAgICBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSBGb3JtIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIKKyAgICB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSBGb3JtIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMy4zLiBEaXN0cmlidXRpb24gb2YgYSBMYXJnZXIgV29yaworCitZb3UgbWF5IGNyZWF0ZSBhbmQgZGlzdHJpYnV0ZSBhIExhcmdlciBXb3JrIHVuZGVyIHRlcm1zIG9mIFlvdXIgY2hvaWNlLAorcHJvdmlkZWQgdGhhdCBZb3UgYWxzbyBjb21wbHkgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3RoZSBDb3ZlcmVkIFNvZnR3YXJlLiBJZiB0aGUgTGFyZ2VyIFdvcmsgaXMgYSBjb21iaW5hdGlvbiBvZiBDb3ZlcmVkCitTb2Z0d2FyZSB3aXRoIGEgd29yayBnb3Zlcm5lZCBieSBvbmUgb3IgbW9yZSBTZWNvbmRhcnkgTGljZW5zZXMsIGFuZCB0aGUKK0NvdmVyZWQgU29mdHdhcmUgaXMgbm90IEluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcywgdGhpcworTGljZW5zZSBwZXJtaXRzIFlvdSB0byBhZGRpdGlvbmFsbHkgZGlzdHJpYnV0ZSBzdWNoIENvdmVyZWQgU29mdHdhcmUKK3VuZGVyIHRoZSB0ZXJtcyBvZiBzdWNoIFNlY29uZGFyeSBMaWNlbnNlKHMpLCBzbyB0aGF0IHRoZSByZWNpcGllbnQgb2YKK3RoZSBMYXJnZXIgV29yayBtYXksIGF0IHRoZWlyIG9wdGlvbiwgZnVydGhlciBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoaXMgTGljZW5zZSBvciBzdWNoIFNlY29uZGFyeQorTGljZW5zZShzKS4KKworMy40LiBOb3RpY2VzCisKK1lvdSBtYXkgbm90IHJlbW92ZSBvciBhbHRlciB0aGUgc3Vic3RhbmNlIG9mIGFueSBsaWNlbnNlIG5vdGljZXMKKyhpbmNsdWRpbmcgY29weXJpZ2h0IG5vdGljZXMsIHBhdGVudCBub3RpY2VzLCBkaXNjbGFpbWVycyBvZiB3YXJyYW50eSwKK29yIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSkgY29udGFpbmVkIHdpdGhpbiB0aGUgU291cmNlIENvZGUgRm9ybSBvZgordGhlIENvdmVyZWQgU29mdHdhcmUsIGV4Y2VwdCB0aGF0IFlvdSBtYXkgYWx0ZXIgYW55IGxpY2Vuc2Ugbm90aWNlcyB0bwordGhlIGV4dGVudCByZXF1aXJlZCB0byByZW1lZHkga25vd24gZmFjdHVhbCBpbmFjY3VyYWNpZXMuCisKKzMuNS4gQXBwbGljYXRpb24gb2YgQWRkaXRpb25hbCBUZXJtcworCitZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQKK1NvZnR3YXJlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uCitiZWhhbGYgb2YgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkKK3N1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSwgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieQorWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueQorbGlhYmlsaXR5IGluY3VycmVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4gWW91IG1heSBpbmNsdWRlIGFkZGl0aW9uYWwKK2Rpc2NsYWltZXJzIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkgc3BlY2lmaWMgdG8gYW55CitqdXJpc2RpY3Rpb24uCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGR1ZSB0bworc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQorZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0CitiZSBwbGFjZWQgaW4gYSB0ZXh0IGZpbGUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ292ZXJlZAorU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUKK29yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEKK3JlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIFRlcm1pbmF0aW9uCistLS0tLS0tLS0tLS0tLQorCis1LjEuIFRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseQoraWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IG9mIGl0cyB0ZXJtcy4gSG93ZXZlciwgaWYgWW91IGJlY29tZQorY29tcGxpYW50LCB0aGVuIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIKK0NvbnRyaWJ1dG9yIGFyZSByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHN1Y2gKK0NvbnRyaWJ1dG9yIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkgdGVybWluYXRlcyBZb3VyIGdyYW50cywgYW5kIChiKSBvbiBhbgorb25nb2luZyBiYXNpcywgaWYgc3VjaCBDb250cmlidXRvciBmYWlscyB0byBub3RpZnkgWW91IG9mIHRoZQorbm9uLWNvbXBsaWFuY2UgYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgWW91IGhhdmUKK2NvbWUgYmFjayBpbnRvIGNvbXBsaWFuY2UuIE1vcmVvdmVyLCBZb3VyIGdyYW50cyBmcm9tIGEgcGFydGljdWxhcgorQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgb24gYW4gb25nb2luZyBiYXNpcyBpZiBzdWNoIENvbnRyaWJ1dG9yCitub3RpZmllcyBZb3Ugb2YgdGhlIG5vbi1jb21wbGlhbmNlIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUKK2ZpcnN0IHRpbWUgWW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIG5vbi1jb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlCitmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBZb3UgYmVjb21lIGNvbXBsaWFudCBwcmlvciB0byAzMCBkYXlzIGFmdGVyCitZb3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworNS4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgYnkgYXNzZXJ0aW5nIGEgcGF0ZW50CitpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zLAorY291bnRlci1jbGFpbXMsIGFuZCBjcm9zcy1jbGFpbXMpIGFsbGVnaW5nIHRoYXQgYSBDb250cmlidXRvciBWZXJzaW9uCitkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIHRoZSByaWdodHMgZ3JhbnRlZCB0bworWW91IGJ5IGFueSBhbmQgYWxsIENvbnRyaWJ1dG9ycyBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgU2VjdGlvbgorMi4xIG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUuCisKKzUuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDUuMSBvciA1LjIgYWJvdmUsIGFsbAorZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoCitoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBZb3VyIGRpc3RyaWJ1dG9ycyB1bmRlciB0aGlzIExpY2Vuc2UKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICA2LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBDb3ZlcmVkIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiYXMgaXMiICAgICAgICoKKyogIGJhc2lzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkLCBpbXBsaWVkLCBvciAgKgorKiAgc3RhdHV0b3J5LCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2FycmFudGllcyB0aGF0IHRoZSAgICAgICAqCisqICBDb3ZlcmVkIFNvZnR3YXJlIGlzIGZyZWUgb2YgZGVmZWN0cywgbWVyY2hhbnRhYmxlLCBmaXQgZm9yIGEgICAgICAgICoKKyogIHBhcnRpY3VsYXIgcHVycG9zZSBvciBub24taW5mcmluZ2luZy4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSAgICAgKgorKiAgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgd2l0aCBZb3UuICAgICAgICAqCisqICBTaG91bGQgYW55IENvdmVyZWQgU29mdHdhcmUgcHJvdmUgZGVmZWN0aXZlIGluIGFueSByZXNwZWN0LCBZb3UgICAgICoKKyogIChub3QgYW55IENvbnRyaWJ1dG9yKSBhc3N1bWUgdGhlIGNvc3Qgb2YgYW55IG5lY2Vzc2FyeSBzZXJ2aWNpbmcsICAgKgorKiAgcmVwYWlyLCBvciBjb3JyZWN0aW9uLiBUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgY29uc3RpdHV0ZXMgYW4gICAqCisqICBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIHVzZSBvZiBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBpcyAgICoKKyogIGF1dGhvcml6ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIDcuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciB0b3J0ICAgICAgKgorKiAgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgYW55ICAgICAgICAgICAqCisqICBDb250cmlidXRvciwgb3IgYW55b25lIHdobyBkaXN0cmlidXRlcyBDb3ZlcmVkIFNvZnR3YXJlIGFzICAgICAgICAgICoKKyogIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIFlvdSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsICAgICAgICAgKgorKiAgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgICAgICAqCisqICBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zdCBwcm9maXRzLCBsb3NzIG9mICAgICoKKyogIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgICAgKgorKiAgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLCBldmVuIGlmIHN1Y2ggcGFydHkgICAgICAqCisqICBzaGFsbCBoYXZlIGJlZW4gaW5mb3JtZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gVGhpcyAgICoKKyogIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yICAgKgorKiAgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIHN1Y2ggcGFydHkncyBuZWdsaWdlbmNlIHRvIHRoZSAgICAgICAqCisqICBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSAgICAgICAgICAgICAgICoKKyogIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiAgICAgICAgICAgKgorKiAgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCAgICAgICAgICAqCisqICBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKzguIExpdGlnYXRpb24KKy0tLS0tLS0tLS0tLS0KKworQW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlCitjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmUgdGhlIGRlZmVuZGFudCBtYWludGFpbnMgaXRzIHByaW5jaXBhbAorcGxhY2Ugb2YgYnVzaW5lc3MgYW5kIHN1Y2ggbGl0aWdhdGlvbiBzaGFsbCBiZSBnb3Zlcm5lZCBieSBsYXdzIG9mIHRoYXQKK2p1cmlzZGljdGlvbiwgd2l0aG91dCByZWZlcmVuY2UgdG8gaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLgorTm90aGluZyBpbiB0aGlzIFNlY3Rpb24gc2hhbGwgcHJldmVudCBhIHBhcnR5J3MgYWJpbGl0eSB0byBicmluZworY3Jvc3MtY2xhaW1zIG9yIGNvdW50ZXItY2xhaW1zLgorCis5LiBNaXNjZWxsYW5lb3VzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CituZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzCit0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyCitzaGFsbCBub3QgYmUgdXNlZCB0byBjb25zdHJ1ZSB0aGlzIExpY2Vuc2UgYWdhaW5zdCBhIENvbnRyaWJ1dG9yLgorCisxMC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxMC4xLiBOZXcgVmVyc2lvbnMKKworTW96aWxsYSBGb3VuZGF0aW9uIGlzIHRoZSBsaWNlbnNlIHN0ZXdhcmQuIEV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uCisxMC4zLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgbGljZW5zZSBzdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IG9yCitwdWJsaXNoIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKK2Rpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCisxMC4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24KK29mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLAorb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBsaWNlbnNlCitzdGV3YXJkLgorCisxMC4zLiBNb2RpZmllZCBWZXJzaW9ucworCitJZiB5b3UgY3JlYXRlIHNvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UsIGFuZCB5b3Ugd2FudCB0bworY3JlYXRlIGEgbmV3IGxpY2Vuc2UgZm9yIHN1Y2ggc29mdHdhcmUsIHlvdSBtYXkgY3JlYXRlIGFuZCB1c2UgYQorbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaWYgeW91IHJlbmFtZSB0aGUgbGljZW5zZSBhbmQgcmVtb3ZlCithbnkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZSBvZiB0aGUgbGljZW5zZSBzdGV3YXJkIChleGNlcHQgdG8gbm90ZSB0aGF0CitzdWNoIG1vZGlmaWVkIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkuCisKKzEwLjQuIERpc3RyaWJ1dGluZyBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgaXMgSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5CitMaWNlbnNlcworCitJZiBZb3UgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgU291cmNlIENvZGUgRm9ybSB0aGF0IGlzIEluY29tcGF0aWJsZSBXaXRoCitTZWNvbmRhcnkgTGljZW5zZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgdGhlCitub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQiBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBhdHRhY2hlZC4KKworRXhoaWJpdCBBIC0gU291cmNlIENvZGUgRm9ybSBMaWNlbnNlIE5vdGljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworICBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLgorCitJZiBpdCBpcyBub3QgcG9zc2libGUgb3IgZGVzaXJhYmxlIHRvIHB1dCB0aGUgbm90aWNlIGluIGEgcGFydGljdWxhcgorZmlsZSwgdGhlbiBZb3UgbWF5IGluY2x1ZGUgdGhlIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgTElDRU5TRQorZmlsZSBpbiBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSByZWNpcGllbnQgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sKK2ZvciBzdWNoIGEgbm90aWNlLgorCitZb3UgbWF5IGFkZCBhZGRpdGlvbmFsIGFjY3VyYXRlIG5vdGljZXMgb2YgY29weXJpZ2h0IG93bmVyc2hpcC4KKworRXhoaWJpdCBCIC0gIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcyIgTm90aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcyIsIGFzCisgIGRlZmluZWQgYnkgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UsIHYuIDIuMC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUEwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVBMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MGQ2YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVBMCkBAIC0wLDAgKzEsMTkgQEAKKworTWljcm9zb2Z0IFB1YmxpYyBMaWNlbnNlIChNcy1QTCkKKyAKKworVGhpcyBsaWNlbnNlIGdvdmVybnMgdXNlIG9mIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhlIHNvZnR3YXJlLCB5b3UgYWNjZXB0IHRoaXMgbGljZW5zZS4gSWYgeW91IGRvIG5vdCBhY2NlcHQgdGhlIGxpY2Vuc2UsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorIAorCitEZWZpbml0aW9ucworVGhlIHRlcm1zICJyZXByb2R1Y2UsIiAicmVwcm9kdWN0aW9uLCIgImRlcml2YXRpdmUgd29ya3MsIiBhbmQgImRpc3RyaWJ1dGlvbiIgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3LiBBICJjb250cmlidXRpb24iIGlzIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSwgb3IgYW55IGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvIHRoZSBzb2Z0d2FyZS4gQSAiY29udHJpYnV0b3IiIGlzIGFueSBwZXJzb24gdGhhdCBkaXN0cmlidXRlcyBpdHMgY29udHJpYnV0aW9uIHVuZGVyIHRoaXMgbGljZW5zZS4gIkxpY2Vuc2VkIHBhdGVudHMiIGFyZSBhIGNvbnRyaWJ1dG9yYHMgcGF0ZW50IGNsYWltcyB0aGF0IHJlYWQgZGlyZWN0bHkgb24gaXRzIGNvbnRyaWJ1dGlvbi4KK0dyYW50IG9mIFJpZ2h0cworKEEpIENvcHlyaWdodCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UgaXRzIGNvbnRyaWJ1dGlvbiwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0cyBjb250cmlidXRpb24sIGFuZCBkaXN0cmlidXRlIGl0cyBjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLgorKEIpIFBhdGVudCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIGl0cyBsaWNlbnNlZCBwYXRlbnRzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgaXRzIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUgb3IgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZS4KK0NvbmRpdGlvbnMgYW5kIExpbWl0YXRpb25zCisoQSkgTm8gVHJhZGVtYXJrIExpY2Vuc2UtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCB5b3UgcmlnaHRzIHRvIHVzZSBhbnkgY29udHJpYnV0b3JzYCBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLiAKKyhCKSBJZiB5b3UgYnJpbmcgYSBwYXRlbnQgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBwYXRlbnRzIHRoYXQgeW91IGNsYWltIGFyZSBpbmZyaW5nZWQgYnkgdGhlIHNvZnR3YXJlLCB5b3VyIHBhdGVudCBsaWNlbnNlIGZyb20gc3VjaCBjb250cmlidXRvciB0byB0aGUgc29mdHdhcmUgZW5kcyBhdXRvbWF0aWNhbGx5LiAKKyhDKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUsIHlvdSBtdXN0IHJldGFpbiBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc29mdHdhcmUuIAorKEQpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBzb3VyY2UgY29kZSBmb3JtLCB5b3UgbWF5IGRvIHNvIG9ubHkgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IGluY2x1ZGluZyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBsaWNlbnNlIHdpdGggeW91ciBkaXN0cmlidXRpb24uIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtLCB5b3UgbWF5IG9ubHkgZG8gc28gdW5kZXIgYSBsaWNlbnNlIHRoYXQgY29tcGxpZXMgd2l0aCB0aGlzIGxpY2Vuc2UuIAorKEUpIFRoZSBzb2Z0d2FyZSBpcyBsaWNlbnNlZCAiYXMtaXMuIiBZb3UgYmVhciB0aGUgcmlzayBvZiB1c2luZyBpdC4gVGhlIGNvbnRyaWJ1dG9ycyBnaXZlIG5vIGV4cHJlc3Mgd2FycmFudGllcywgZ3VhcmFudGVlcywgb3IgY29uZGl0aW9ucy4gWW91IG1heSBoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UgY2Fubm90IGNoYW5nZS4gVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgdW5kZXIgeW91ciBsb2NhbCBsYXdzLCB0aGUgY29udHJpYnV0b3JzIGV4Y2x1ZGUgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVJMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1STApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAzYzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1STApAQCAtMCwwICsxLDIzIEBACisKK01pY3Jvc29mdCBSZWNpcHJvY2FsIExpY2Vuc2UgKE1zLVJMKQorIAorCitUaGlzIGxpY2Vuc2UgZ292ZXJucyB1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGUgc29mdHdhcmUsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBJZiB5b3UgZG8gbm90IGFjY2VwdCB0aGUgbGljZW5zZSwgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgCisKK0RlZmluaXRpb25zCitUaGUgdGVybXMgInJlcHJvZHVjZSwiICJyZXByb2R1Y3Rpb24sIiAiZGVyaXZhdGl2ZSB3b3JrcywiIGFuZCAiZGlzdHJpYnV0aW9uIiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgaGVyZSBhcyB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcuCitBICJjb250cmlidXRpb24iIGlzIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSwgb3IgYW55IGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvIHRoZSBzb2Z0d2FyZS4gCitBICJjb250cmlidXRvciIgaXMgYW55IHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGl0cyBjb250cmlidXRpb24gdW5kZXIgdGhpcyBsaWNlbnNlLiAKKyJMaWNlbnNlZCBwYXRlbnRzIiBhcmUgYSBjb250cmlidXRvcmBzIHBhdGVudCBjbGFpbXMgdGhhdCByZWFkIGRpcmVjdGx5IG9uIGl0cyBjb250cmlidXRpb24uCitHcmFudCBvZiBSaWdodHMKKyhBKSBDb3B5cmlnaHQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIGluIHNlY3Rpb24gMywgZWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlIGl0cyBjb250cmlidXRpb24sIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiBpdHMgY29udHJpYnV0aW9uLCBhbmQgZGlzdHJpYnV0ZSBpdHMgY29udHJpYnV0aW9uIG9yIGFueSBkZXJpdmF0aXZlIHdvcmtzIHRoYXQgeW91IGNyZWF0ZS4KKyhCKSBQYXRlbnQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIGluIHNlY3Rpb24gMywgZWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciBpdHMgbGljZW5zZWQgcGF0ZW50cyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIGl0cyBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUuCitDb25kaXRpb25zIGFuZCBMaW1pdGF0aW9ucworKEEpIFJlY2lwcm9jYWwgR3JhbnRzLSBGb3IgYW55IGZpbGUgeW91IGRpc3RyaWJ1dGUgdGhhdCBjb250YWlucyBjb2RlIGZyb20gdGhlIHNvZnR3YXJlIChpbiBzb3VyY2UgY29kZSBvciBiaW5hcnkgZm9ybWF0KSwgeW91IG11c3QgcHJvdmlkZSByZWNpcGllbnRzIHRoZSBzb3VyY2UgY29kZSB0byB0aGF0IGZpbGUgYWxvbmcgd2l0aCBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlLCB3aGljaCBsaWNlbnNlIHdpbGwgZ292ZXJuIHRoYXQgZmlsZS4gWW91IG1heSBsaWNlbnNlIG90aGVyIGZpbGVzIHRoYXQgYXJlIGVudGlyZWx5IHlvdXIgb3duIHdvcmsgYW5kIGRvIG5vdCBjb250YWluIGNvZGUgZnJvbSB0aGUgc29mdHdhcmUgdW5kZXIgYW55IHRlcm1zIHlvdSBjaG9vc2UuIAorKEIpIE5vIFRyYWRlbWFyayBMaWNlbnNlLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHJpZ2h0cyB0byB1c2UgYW55IGNvbnRyaWJ1dG9yc2AgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcy4gCisoQykgSWYgeW91IGJyaW5nIGEgcGF0ZW50IGNsYWltIGFnYWluc3QgYW55IGNvbnRyaWJ1dG9yIG92ZXIgcGF0ZW50cyB0aGF0IHlvdSBjbGFpbSBhcmUgaW5mcmluZ2VkIGJ5IHRoZSBzb2Z0d2FyZSwgeW91ciBwYXRlbnQgbGljZW5zZSBmcm9tIHN1Y2ggY29udHJpYnV0b3IgdG8gdGhlIHNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseS4gCisoRCkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlLCB5b3UgbXVzdCByZXRhaW4gYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNvZnR3YXJlLiAKKyhFKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gc291cmNlIGNvZGUgZm9ybSwgeW91IG1heSBkbyBzbyBvbmx5IHVuZGVyIHRoaXMgbGljZW5zZSBieSBpbmNsdWRpbmcgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgbGljZW5zZSB3aXRoIHlvdXIgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybSwgeW91IG1heSBvbmx5IGRvIHNvIHVuZGVyIGEgbGljZW5zZSB0aGF0IGNvbXBsaWVzIHdpdGggdGhpcyBsaWNlbnNlLiAKKyhGKSBUaGUgc29mdHdhcmUgaXMgbGljZW5zZWQgImFzLWlzLiIgWW91IGJlYXIgdGhlIHJpc2sgb2YgdXNpbmcgaXQuIFRoZSBjb250cmlidXRvcnMgZ2l2ZSBubyBleHByZXNzIHdhcnJhbnRpZXMsIGd1YXJhbnRlZXMsIG9yIGNvbmRpdGlvbnMuIFlvdSBtYXkgaGF2ZSBhZGRpdGlvbmFsIGNvbnN1bWVyIHJpZ2h0cyB1bmRlciB5b3VyIGxvY2FsIGxhd3Mgd2hpY2ggdGhpcyBsaWNlbnNlIGNhbm5vdCBjaGFuZ2UuIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIHVuZGVyIHlvdXIgbG9jYWwgbGF3cywgdGhlIGNvbnRyaWJ1dG9ycyBleGNsdWRlIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBhbmQgbm9uLWluZnJpbmdlbWVudC4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NaXJPUyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTWlyT1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2NzY4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTWlyT1MKQEAgLTAsMCArMSw1OCBAQAorCitNaXJPUyBMaWNlbnNlCisKKy8qLQorKiBDb3B5cmlnaHQgJiMxNjk7IHllYXIsIHllYXIsIHllYXIsICYjODIzMDsKKyogRmlyc3QgTS4gTGFzdCA8dXNlckBob3N0LmRvbWFpbj4KKyoKKyogUHJvdmlkZWQgdGhhdCB0aGVzZSB0ZXJtcyBhbmQgZGlzY2xhaW1lciBhbmQgYWxsIGNvcHlyaWdodCBub3RpY2VzCisqIGFyZSByZXRhaW5lZCBvciByZXByb2R1Y2VkIGluIGFuIGFjY29tcGFueWluZyBkb2N1bWVudCwgcGVybWlzc2lvbgorKiBpcyBncmFudGVkIHRvIGRlYWwgaW4gdGhpcyB3b3JrIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB1biYjODIwODsKKyogbGltaXRlZCByaWdodHMgdG8gdXNlLCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlLCBzZWxsLCBtb2RpZnksCisqIG1lcmdlLCBnaXZlIGF3YXksIG9yIHN1YmxpY2VuY2UuCisqCisqIFRoaXMgd29yayBpcyBwcm92aWRlZCAiQVMgSVMiIGFuZCBXSVRIT1VUIFdBUlJBTlRZIG9mIGFueSBraW5kLCB0bworKiB0aGUgdXRtb3N0IGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIG5laXRoZXIgZXhwcmVzcyBub3IKKyogaW1wbGllZDsgd2l0aG91dCBtYWxpY2lvdXMgaW50ZW50IG9yIGdyb3NzIG5lZ2xpZ2VuY2UuIEluIG5vIGV2ZW50CisqIG1heSBhIGxpY2Vuc29yLCBhdXRob3Igb3IgY29udHJpYnV0b3IgYmUgaGVsZCBsaWFibGUgZm9yIGluZGlyZWN0LAorKiBkaXJlY3QsIG90aGVyIGRhbWFnZSwgbG9zcywgb3Igb3RoZXIgaXNzdWVzIGFyaXNpbmcgaW4gYW55IHdheSBvdXQKKyogb2YgZGVhbGluZyBpbiB0aGUgd29yaywgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoCisqIGRhbWFnZSBvciBleGlzdGVuY2Ugb2YgYSBkZWZlY3QsIGV4Y2VwdCBwcm92ZW4gdGhhdCBpdCByZXN1bHRzIG91dAorKiBvZiBzYWlkIHBlcnNvbmBzIGltbWVkaWF0ZSBmYXVsdCB3aGVuIHVzaW5nIHRoZSB3b3JrIGFzIGludGVuZGVkLgorKi8KKworSV9OX1NfVF9SX1VfQ19UX0lfT19OX1NfOl8KK1RvIGFwcGx5IHRoZSB0ZW1wbGF0ZSgmIzE4NTspIHNwZWNpZnkgdGhlIHllYXJzIG9mIGNvcHlyaWdodCAoc2VwYXJhdGVkIGJ5Citjb21tYSwgbm90IGFzIGEgcmFuZ2UpLCB0aGUgbGVnYWwgbmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLCBhbmQKK3RoZSByZWFsIG5hbWVzIG9mIHRoZSBhdXRob3JzIGlmIGRpZmZlcmVudC4gQXZvaWQgYWRkaW5nIHRleHQuCisKK1JfQV9UX0lfT19OX0FfTF9FXzpfCitUaGlzIGxpY2VuY2UgaXMgYXB0IGZvciBhbnkga2luZCBvZiB3b3JrIChzdWNoIGFzIHNvdXJjZSBjb2RlLCBmb250cywKK2RvY3VtZW50YXRpb24sIGdyYXBoaWNzLCBzb3VuZCBldGMuKSBhbmQgdGhlIHByZWZlcnJlZCB0ZXJtcyBmb3Igd29yaworYWRkZWQgdG8gTWlyQlNELiBJdCBoYXMgYmVlbiBkcmFmdGVkIGFzIHVuaXZlcnNhbGx5IHVzYWJsZSBlcXVpdmFsZW50CitvZiB0aGUgImhpc3RvcmljIHBlcm1pc3Npb24gbm90aWNlIiYjODMxNzsmIzE3ODsmIzgzMTg7IGFkYXB0ZWQgdG8gRXVyb3BlbiBsYXcgYmVjYXVzZQoraW4gc29tZSAoZHJvaXQgZGBhdXRldXIpIGNvdW50cmllcyBhdXRob3JzIGNhbm5vdCBkaXNjbGFpbSBhbGwgbGlhYmkmIzgyMDg7CitsaXRpZXMuIENvbXBsaWFuY2UgdG8gREZTRyYjODMxNzsmIzE3OTsmIzgzMTg7IDEuMSBpcyBlbnN1cmVkLCBhbmQgR1BMdjIgY29tcGF0aWJpbGl0eQoraXMgYXNzZXJ0ZWQgdW5sZXNzIGFkdmVydGlzaW5nIGNsYXVzZXMgYXJlIHVzZWQuIFRoZSBNaXJPUyBMaWNlbmNlIGlzCitjZXJ0aWZpZWQgdG8gY29uZm9ybSB0byBPS0QmIzgzMTc7JiM4MzA4OyYjODMxODsgMS4wIGFuZCBPU0QmIzgzMTc7JiM4MzA5OyYjODMxODsgMS45LCBhbmQgcXVhbGlmaWVzIGFzIGEKK0ZyZWUgU29mdHdhcmUmIzgzMTc7JiM4MzEwOyYjODMxODsgYW5kIGFsc28gRnJlZSBEb2N1bWVudGF0aW9uJiM4MzE3OyYjODMxMTsmIzgzMTg7IGxpY2VuY2UgYW5kIGlzIGluY2x1JiM4MjA4OworZGVkIGluIHNvbWUgcmVsZXZhbnQgbGlzdHMmIzgzMTc7JiM4MzEyOyYjODMxODsmIzgzMTc7JiM4MzEzOyYjODMxODsmIzgzMTc7JiMxODU7JiM4MzA0OyYjODMxODsuCisKK1dlIGJlbGlldmUgeW91IGFyZSBub3QgbGlhYmxlIGZvciB3b3JrIGluc2VydGVkIHdoaWNoIGlzIGludGVsbGVjdHVhbAorcHJvcGVydHkgb2YgdGhpcmQgcGFydGllcywgaWYgeW91IHdlcmUgbm90IGF3YXJlIG9mIHRoZSBmYWN0LCBhY3QgYXAmIzgyMDg7Citwcm9wcmlhdGVseSBhcyBzb29uIGFzIHlvdSBiZWNvbWUgYXdhcmUgb2YgdGhhdCBwcm9ibGVtLCBzZWVrIGFuIGFtaSYjODIwODsKK2NhYmxlIHNvbHV0aW9uIGZvciBhbGwgcGFydGllcywgYW5kIG5ldmVyIGtub3dpbmdseSBkaXN0cmlidXRlIGEgd29yaword2l0aG91dCBiZWluZyBhdXRob3Jpc2VkIHRvIGRvIHNvIGJ5IGl0cyBsaWNlbnNvcnMuCisKK1JfRV9GX0VfUl9FX05fQ19FX1NfOl8KKyYjOTMxMjsgYWxzbyBhdCBodHRwOi8vbWlyYnNkLmRlL01pck9TLUxpY2VuY2UKKyYjOTMxMzsgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9oaXN0b3JpY2FsLnBocAorJiM5MzE0OyBodHRwOi8vd3d3LmRlYmlhbi5vcmcvc29jaWFsX2NvbnRyYWN0I2d1aWRlbGluZXMKKyYjOTMxNTsgaHR0cDovL3d3dy5vcGVuZGVmaW5pdGlvbi5vcmcvMS4wCismIzkzMTY7IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvZG9jcy9vc2QKKyYjOTMxNzsgaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvZnJlZS1zdy5odG1sCismIzkzMTg7IGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2ZyZWUtZG9jLmh0bWwKKyYjOTMxOTsgaHR0cDovL3d3dy5pZnJvc3MuZGUvaWZyb3NzX2h0bWwvbGl6ZW56Y2VudGVyLmh0bWwKKyYjOTMyMDsgaHR0cDovL3d3dy5vcGVuZGVmaW5pdGlvbi5vcmcvbGljZW5zZXMKKyYjOTMyMTsgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pcm9zLmh0bWwKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Nb3Rvc290byBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTW90b3NvdG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1MjRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTW90b3NvdG8KQEAgLTAsMCArMSw0MjIgQEAKKworTU9UT1NPVE8gT1BFTiBTT1VSQ0UgTElDRU5TRSAtIFZlcnNpb24gMC45LjEKK1RoaXMgTW90b3NvdG8gT3BlbiBTb3VyY2UgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byAiQ29tbXVuaXR5CitQb3J0YWwgU2VydmVyIiBhbmQgcmVsYXRlZCBzb2Z0d2FyZSBwcm9kdWN0cyBhcyB3ZWxsIGFzIGFueSB1cGRhdGVzb3IKK21haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHRoYXQgc29mdHdhcmUgKCJNb3Rvc290byBQcm9kdWN0cyIpIHRoYXQgYXJlCitkaXN0cmlidXRlZCBieSBNb3Rvc290by5Db20gQi5WLiAoIkxpY2Vuc29yIikuIEFueSBNb3Rvc290bworUHJvZHVjdCBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UgaXMgYSAiTGljZW5zZWQgUHJvZHVjdC4iIExpY2Vuc2VkCitQcm9kdWN0LCBpbiBpdHMgZW50aXJldHksIGlzIHByb3RlY3RlZCBieSBEdXRjaCBjb3B5cmlnaHQgbGF3LgorVGhpcworTGljZW5zZSBpZGVudGlmaWVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCB5b3UgbWF5IHVzZSwgY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkKK0xpY2Vuc2VkIFByb2R1Y3QgYW5kIGhhcyBiZWVuIHN1Ym1pdHRlZCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBJbml0aWF0aXZlIChPU0kpCitmb3IgYXBwcm92YWwuCisKK1ByZWFtYmxlCisKK1RoaXMgUHJlYW1ibGUgaXMgaW50ZW5kZWQgdG8gZGVzY3JpYmUsIGluIHBsYWluIEVuZ2xpc2gsIHRoZSBuYXR1cmUgYW5kIHNjb3BlIG9mCit0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHRoaXMgUHJlYW1ibGUgaXMgbm90IGEgcGFydCBvZiB0aGlzIGxpY2Vuc2UuIFRoZSBsZWdhbAorZWZmZWN0IG9mIHRoaXMgTGljZW5zZSBpcyBkZXBlbmRlbnQgb25seSB1cG9uIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBhbmQgbm90Cit0aGlzIFByZWFtYmxlLgorVGhpcyBMaWNlbnNlIGNvbXBsaWVzIHdpdGggdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gYW5kIGhhcyBiZWVuIGFwcHJvdmVkIGJ5CitPcGVuIFNvdXJjZSBJbml0aWF0aXZlLiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGJlIG1hcmtlZAorYXMgIk9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgU29mdHdhcmUuIgorCitUaGlzIExpY2Vuc2UgcHJvdmlkZXMgdGhhdDoKKworMS4gWW91IG1heSB1c2UsIHNlbGwgb3IgZ2l2ZSBhd2F5IHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbG9uZSBvciBhcyBhCitjb21wb25lbnQgb2YgYW4gYWdncmVnYXRlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBjb250YWluaW5nCitwcm9ncmFtcyBmcm9tIHNldmVyYWwgZGlmZmVyZW50IHNvdXJjZXMuIE5vIHJveWFsdHkgb3Igb3RoZXIgZmVlIGlzCityZXF1aXJlZC4KKworMi4gQm90aCBTb3VyY2UgQ29kZSBhbmQgZXhlY3V0YWJsZSB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwKK2luY2x1ZGluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgcHJldmlvdXMgQ29udHJpYnV0b3JzLCBhcmUKK2F2YWlsYWJsZSBmb3IgeW91ciB1c2UuIChUaGUgdGVybXMgIkxpY2Vuc2VkIFByb2R1Y3QsIiAiTW9kaWZpY2F0aW9ucywiCisiQ29udHJpYnV0b3JzIiBhbmQgIlNvdXJjZSBDb2RlIiBhcmUgZGVmaW5lZCBpbiB0aGUgTGljZW5zZS4pCisKKzMuIFlvdSBhcmUgYWxsb3dlZCB0byBtYWtlIE1vZGlmaWNhdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFuZCB5b3UKK2NhbiBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBmcm9tIGl0LiAoVGhlIHRlcm0gIkRlcml2YXRpdmUKK1dvcmtzIiBpcyBkZWZpbmVkIGluIHRoZSBMaWNlbnNlLikKKworNC4gQnkgYWNjZXB0aW5nIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSwKK3lvdSBhZ3JlZSB0aGF0IGFueSBNb2RpZmljYXRpb25zIHlvdSBtYWtlIHRvIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBhbmQgdGhlbiBkaXN0cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzCitMaWNlbnNlLiBJbiBwYXJ0aWN1bGFyLCB5b3UgbXVzdCBtYWtlIHRoZSBTb3VyY2UgQ29kZSBvZiB5b3VyCitNb2RpZmljYXRpb25zIGF2YWlsYWJsZSB0byBvdGhlcnMuCisKKzUuIFlvdSBtYXkgdXNlIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGZvciBhbnkgcHVycG9zZSwgYnV0IHRoZSBMaWNlbnNvciBpcworbm90IHByb3ZpZGluZyB5b3UgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIsIG5vciBpcyB0aGUgTGljZW5zb3IKK2FjY2VwdGluZyBhbnkgbGlhYmlsaXR5IGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNlZCBQcm9kdWN0IGRvZXNuYHQKK3dvcmsgcHJvcGVybHkgb3IgY2F1c2VzIHlvdSBhbnkgaW5qdXJ5IG9yIGRhbWFnZXMuCisKKzYuIElmIHlvdSBzdWJsaWNlbnNlIHRoZSBMaWNlbnNlZCBQcm9kdWN0IG9yIERlcml2YXRpdmUgV29ya3MsIHlvdSBtYXkKK2NoYXJnZSBmZWVzIGZvciB3YXJyYW50eSBvciBzdXBwb3J0LCBvciBmb3IgYWNjZXB0aW5nIGluZGVtbml0eQorb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIHlvdXIgY3VzdG9tZXJzLiBZb3UgY2Fubm90IGNoYXJnZSBmb3IgdGhlCitTb3VyY2UgQ29kZS4KKworNy4gSWYgeW91IGFzc2VydCBhbnkgcGF0ZW50IGNsYWltcyBhZ2FpbnN0IHRoZSBMaWNlbnNvciByZWxhdGluZyB0byB0aGUKK0xpY2Vuc2VkIFByb2R1Y3QsIG9yIGlmIHlvdSBicmVhY2ggYW55IHRlcm1zIG9mIHRoZSBMaWNlbnNlLCB5b3VyCityaWdodHMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhpcyBMaWNlbnNlIGF1dG9tYXRpY2FsbHkKK3Rlcm1pbmF0ZS4KKworWW91IG1heSB1c2UgdGhpcyBMaWNlbnNlIHRvIGRpc3RyaWJ1dGUgeW91ciBvd24gRGVyaXZhdGl2ZSBXb3JrcywgaW4gd2hpY2gKK2Nhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIHdpbGwgYXBwbHkgdG8geW91ciBEZXJpdmF0aXZlCitXb3JrcyBqdXN0IGFzIHRoZXkgZG8gdG8gdGhlIG9yaWdpbmFsIExpY2Vuc2VkIFByb2R1Y3QuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgZGlzdHJpYnV0ZSB5b3VyIERlcml2YXRpdmUgV29ya3MgdW5kZXIgYW55IG90aGVyCitPU0ktYXBwcm92ZWQgT3BlbiBTb3VyY2UgbGljZW5zZSwgb3IgdW5kZXIgYSBwcm9wcmlldGFyeSBsaWNlbnNlIG9mCit5b3VyIGNob2ljZS4gSWYgeW91IHVzZSBhbnkgbGljZW5zZSBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgeW91IG11c3QKK2NvbnRpbnVlIHRvIGZ1bGZpbGwgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyB0aGUKK3Byb3Zpc2lvbnMgcmVsYXRpbmcgdG8gcHVibGlzaGluZyB0aGUgU291cmNlIENvZGUpIGZvciB0aG9zZSBwb3J0aW9ucyBvZiB5b3VyCitEZXJpdmF0aXZlIFdvcmtzIHRoYXQgY29uc2lzdCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nCit0aGUgZmlsZXMgY29udGFpbmluZyBNb2RpZmljYXRpb25zLgorCitOZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIG1heSBiZSBwdWJsaXNoZWQgZnJvbSB0aW1lIHRvIHRpbWUuIFlvdSBtYXkKK2Nob29zZSB0byBjb250aW51ZSB0byB1c2UgdGhlIGxpY2Vuc2UgdGVybXMgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZQorTGljZW5zZSBvciB0aG9zZSBmcm9tIHRoZSBuZXcgdmVyc2lvbi4gSG93ZXZlciwgb25seSB0aGUgTGljZW5zb3IgaGFzIHRoZSByaWdodAordG8gY2hhbmdlIHRoZSBMaWNlbnNlIHRlcm1zIGFzIHRoZXkgYXBwbHkgdG8gdGhlIExpY2Vuc2VkCitQcm9kdWN0LgorVGhpcyBMaWNlbnNlIHJlbGllcyBvbiBwcmVjaXNlIGRlZmluaXRpb25zIGZvciBjZXJ0YWluIHRlcm1zLiBUaG9zZSB0ZXJtcyBhcmUKK2RlZmluZWQgd2hlbiB0aGV5IGFyZSBmaXJzdCB1c2VkLCBhbmQgdGhlIGRlZmluaXRpb25zIGFyZSByZXBlYXRlZCBmb3IKK3lvdXIgY29udmVuaWVuY2UgaW4gYSBHbG9zc2FyeSBhdCB0aGUgZW5kIG9mIHRoZSBMaWNlbnNlLgorCitMaWNlbnNlIFRlcm1zCisKKzEuIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBMaWNlbnNvci4KKworTGljZW5zb3IKK2hlcmVieSBncmFudHMgeW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8KK3RoaXJkCitwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCithLiBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSBMaWNlbnNlZCBQcm9kdWN0IG9yIHBvcnRpb25zIHRoZXJlb2YgKGluY2x1ZGluZworTW9kaWZpY2F0aW9ucyBhcyBoZXJlaW5hZnRlciBkZWZpbmVkKSwgaW4gYm90aCBTb3VyY2UgQ29kZSBvciBhcworYW4gZXhlY3V0YWJsZSBwcm9ncmFtLiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQKK2Zvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcKK2FsbCBtb2R1bGVzIGNvbnRhaW5lZCB0aGVyZWluLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBvciBhIGxpc3Qgb2YKK2RpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3QuCisKK2IuIENyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIChhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCB1bmRlciBEdXRjaAorY29weXJpZ2h0IGxhdykgb2YgTGljZW5zZWQgUHJvZHVjdCBieSBhZGRpbmcgdG8gb3IgZGVsZXRpbmcKK2Zyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2Ygc2FpZCBMaWNlbnNlZCBQcm9kdWN0LgorCitjLiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQKK2J5IExpY2Vuc29yLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsCithbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mLAorYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvCitlbmFibGUgeW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yCitvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yIHBvcnRpb25zIHRoZXJlb2Ygb3IKK0Rlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworMi4gR3JhbnQgb2YgTGljZW5zZSB0byBNb2RpZmljYXRpb25zIEZyb20KK0NvbnRyaWJ1dG9yLgorCisiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9ucyB0byBvcgorZGVsZXRpb25zIGZyb20gdGhlIHN1YnN0YW5jZSBvcgorc3RydWN0dXJlIG9mIChpKSBhIGZpbGUgY29udGFpbmluZyBMaWNlbnNlZCBQcm9kdWN0LCBvciAoaWkpIGFueSBuZXcgZmlsZQordGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBMaWNlbnNlZCBQcm9kdWN0LiBIZXJlaW5hZnRlciBpbiB0aGlzCitMaWNlbnNlLCB0aGUgdGVybSAiTGljZW5zZWQgUHJvZHVjdCIgc2hhbGwgaW5jbHVkZSBhbGwgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMgdGhhdCB5b3UgcmVjZWl2ZSBmcm9tIGFueSBDb250cmlidXRvci4gQnkKK2FwcGxpY2F0aW9uIG9mIHRoZSBwcm92aXNpb25zIGluIFNlY3Rpb24gNChhKSBiZWxvdywgZWFjaCBwZXJzb24gb3IKK2VudGl0eSB3aG8gY3JlYXRlZCBvciBjb250cmlidXRlZCB0byB0aGUgY3JlYXRpb24gb2YsIGFuZCBkaXN0cmlidXRlZCwKK2EgTW9kaWZpY2F0aW9uIChhICJDb250cmlidXRvciIpIGhlcmVieSBncmFudHMgeW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5CitpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCithLiBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSBhbnkgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3Igb3IKK3BvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlIENvZGUgb3IgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLAorZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMgb3IgYXMgcGFydCBvZiBEZXJpdmF0aXZlCitXb3Jrcy4KKworYi4gVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5CitDb250cmlidXRvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLAorYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIE1vZGlmaWNhdGlvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0Citzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeSB0bworZW5hYmxlIHlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vcgorb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mIG9yCitEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKzMuIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LgorCitOb3RoaW5nIGluCit0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywKK3BhdGVudHMsCit0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3Igb3IgYW55CitDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzCitncmFudGVkIHNlcGFyYXRlIGZyb20gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGZvciBjb2RlIHRoYXQgeW91IGRlbGV0ZSBmcm9tCit0aGUgTGljZW5zZWQgUHJvZHVjdCwgb3IgZm9yIGNvbWJpbmF0aW9ucyBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3Qgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUKK3RyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUKK2luY2x1ZGVkIGluIHRoZSBMaWNlbnNlZCBQcm9kdWN0LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZQoraW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50Cit0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgY29kZSB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEKK3JpZ2h0IHRvIGxpY2Vuc2UuCisKKzQuIFlvdXIgT2JsaWdhdGlvbnMgUmVnYXJkaW5nIERpc3RyaWJ1dGlvbi4KKworYS4gQXBwbGljYXRpb24gb2YgVGhpcyBMaWNlbnNlIHRvIFlvdXIKK01vZGlmaWNhdGlvbnMuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB5b3VyIHVzZSBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3QsIHlvdQoraGVyZWJ5IGFncmVlIHRoYXQgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoCit5b3UgY29udHJpYnV0ZSwgYW5kIHdoaWNoIHlvdSBkaXN0cmlidXRlLCBhcmUgZ292ZXJuZWQgYnkgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gMi4KK0FueSBNb2RpZmljYXRpb25zIHRoYXQgeW91IGNyZWF0ZSBvciB0byB3aGljaCB5b3UgY29udHJpYnV0ZQorbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhCitmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA3LiBZb3UgbXVzdAoraW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUKK01vZGlmaWNhdGlvbnMgeW91IGRpc3RyaWJ1dGUuIFlvdSBhZ3JlZSBub3QgdG8gb2ZmZXIgb3IgaW1wb3NlIGFueQordGVybXMgb24gYW55IFNvdXJjZSBDb2RlIG9yIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSBhcHBsaWNhYmxlCit2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4KK0hvd2V2ZXIsIHlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZQorYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChlKS4KKworYi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBZb3UgbXVzdCBtYWtlCithdmFpbGFibGUsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3QgYW5kIGFueSBNb2RpZmljYXRpb25zIHRoYXQgeW91IGRpc3RyaWJ1dGUsIGVpdGhlciBvbiB0aGUKK3NhbWUgbWVkaWEgYXMgeW91IGRpc3RyaWJ1dGUgYW55IGV4ZWN1dGFibGUgb3Igb3RoZXIgZm9ybQorb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIG9yIHZpYSBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4KK3RoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhIChhbiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIikuIFRoZQorU291cmNlIENvZGUgZm9yIGFueSB2ZXJzaW9uIG9mIExpY2Vuc2VkIFByb2R1Y3Qgb3IKK01vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0CitsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZQorYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbgorb2Ygc2FpZCBMaWNlbnNlZCBQcm9kdWN0IG9yIE1vZGlmaWNhdGlvbnMgaGFzIGJlZW4gbWFkZQorYXZhaWxhYmxlLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZQordmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworYy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYW55CitNb2RpZmljYXRpb25zIHRoYXQgeW91IGNyZWF0ZSBvciB0byB3aGljaCB5b3UgY29udHJpYnV0ZSwgYW5kIHdoaWNoCit5b3UgZGlzdHJpYnV0ZSwgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGFkZGl0aW9ucywKK2NoYW5nZXMgb3IgZGVsZXRpb25zIHlvdSBtYWRlIHRvIGNyZWF0ZSBvciBjb250cmlidXRlIHRvIHRob3NlCitNb2RpZmljYXRpb25zLCBhbmQgdGhlIGRhdGVzIG9mIGFueSBzdWNoIGFkZGl0aW9ucywgY2hhbmdlcyBvcgorZGVsZXRpb25zLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZQorTW9kaWZpY2F0aW9ucyBhcmUgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSB0aGUKK0xpY2Vuc2VkIFByb2R1Y3QgYW5kIGluY2x1ZGUgdGhlIG5hbWVzIG9mIHRoZSBMaWNlbnNvciBhbmQgYW55CitDb250cmlidXRvciB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCBpbiAoaSkgdGhlIFNvdXJjZSBDb2RlIGFuZAorKGlpKSBpbiBhbnkgbm90aWNlIGRpc3BsYXllZCBieSBhIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IHlvdSBkaXN0cmlidXRlIG9yIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCB5b3UKK2Rlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LgorWW91IG1heSBub3QgbW9kaWZ5IG9yIGRlbGV0ZSBhbnkgcHJlZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgaW4KK3RoZSBMaWNlbnNlZCBQcm9kdWN0LgorCitkLiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworaS4gVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiB5b3UgaGF2ZQora25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHRvIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaXMKK3JlcXVpcmVkCit0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLCB5b3UgbXVzdAoraW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkCisiTEVHQUwiIHRoYXQgZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUKK2NsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93Cit3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgeW91IG1ha2UKK2FueSBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbgorNChiKSwgeW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzCit5b3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlcgorc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IKK25ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvCityZWNlaXZlZCB0aGUgTGljZW5zZWQgUHJvZHVjdCBmcm9tIHlvdSB0aGF0IG5ldyBrbm93bGVkZ2UKK2hhcyBiZWVuIG9idGFpbmVkLgorCitpaS4gQ29udHJpYnV0b3IgQVBJcy4gSWYgeW91cgorTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoIkFQSSIpIGFuZCB5b3UgaGF2ZQora25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB0aGF0IGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeQordG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcworaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKK2lpaS4gUmVwcmVzZW50YXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQsCitleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIDQoZCkoaSkgYWJvdmUsIHlvdSBiZWxpZXZlIHRoYXQgYW55CitNb2RpZmljYXRpb25zIHlvdSBkaXN0cmlidXRlIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQKK3RoYXQgeW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cworY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCitlLiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhpcworTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiB5b3UgcHJvdmlkZSBhbG9uZyB3aXRoIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkKK01vZGlmaWNhdGlvbnMgeW91IGNyZWF0ZSBvciB0byB3aGljaCB5b3UgY29udHJpYnV0ZSwgYW5kIHdoaWNoIHlvdQorZGlzdHJpYnV0ZSwgd2hlcmV2ZXIgeW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cworcmVsYXRpbmcgdG8gTGljZW5zZWQgUHJvZHVjdC4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UKK2NvbnRhaW5lZCBpbiBFeGhpYml0IEEgKHRoZSAiTm90aWNlIikgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKK0NvZGUgb2YgYW55IGNvcHkgeW91IGRpc3RyaWJ1dGUgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QuIElmIHlvdQorY3JlYXRlZCBhIE1vZGlmaWNhdGlvbiwgeW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEKK0NvbnRyaWJ1dG9yIHRvIHRoZSBOb3RpY2UuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgdGhlIE5vdGljZQoraW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4KK3lvdSBtdXN0IGluY2x1ZGUgc3VjaCBOb3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50CitkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEKK25vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUKK3JlY2lwaWVudHMgb2YgTGljZW5zZWQgUHJvZHVjdC4gSG93ZXZlciwgeW91IG1heSBkbyBzbyBvbmx5IG9uCit5b3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkKK0NvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSB5b3UKK2Fsb25lLCBhbmQgeW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIExpY2Vuc29yIGFuZCBldmVyeQorQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIExpY2Vuc29yIG9yIHN1Y2gKK0NvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IKK2xpYWJpbGl0eSB0ZXJtcyB5b3Ugb2ZmZXIuCisKK2YuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5CitkaXN0cmlidXRlIExpY2Vuc2VkIFByb2R1Y3QgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHVuZGVyIGEgbGljZW5zZSBvZgoreW91ciBjaG9pY2UgdGhhdCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UKK3Byb3ZpZGVkIChpKSB5b3UgaGF2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9ucworNChhKSB0aHJvdWdoIDQoZSkgZm9yIHRoYXQgZGlzdHJpYnV0aW9uLCAoaWkpIHlvdSBpbmNsdWRlIGEKK2NvbnNwaWN1b3VzIG5vdGljZSBpbiB0aGUgZXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24KK2FuZCBjb2xsYXRlcmFsIG1hdGVyaWFscyBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKK3RoZSBMaWNlbnNlZCBQcm9kdWN0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSB5b3UgaGF2ZQorZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDQoYiksIChpaWkpIHlvdSByZXRhaW4gYWxsCitleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYW5kIChpdikgeW91CittYWtlIGl0IGNsZWFyIHRoYXQgYW55IHRlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZQorb2ZmZXJlZCBieSB5b3UgYWxvbmUsIG5vdCBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdQoraGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yCitmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBMaWNlbnNvciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEKK3Jlc3VsdCBvZiBhbnkgdGVybXMgeW91IG9mZmVyLgorCitnLiBEaXN0cmlidXRpb24gb2YgRGVyaXZhdGl2ZSBXb3Jrcy4gWW91IG1heQorY3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGUuZy4sIGNvbWJpbmF0aW9ucyBvZiBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3Qgd2l0aCBvdGhlciBjb2RlKSBhbmQgZGlzdHJpYnV0ZSB0aGUgRGVyaXZhdGl2ZSBXb3JrcyBhcworcHJvZHVjdHMgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UgeW91IHNlbGVjdCwgd2l0aCB0aGUKK3Byb3Zpc28gdGhhdCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvcgordGhvc2UgcG9ydGlvbnMgb2YgdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBjb25zaXN0IG9mIHRoZQorTGljZW5zZWQgUHJvZHVjdCBvciBhbnkgTW9kaWZpY2F0aW9ucyB0aGVyZXRvLgorCis1LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yCitSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciB5b3UgdG8gY29tcGx5IHdpdGggYW55IG9mCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGgKK3Jlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsCitvcmRlciwgb3IgcmVndWxhdGlvbiwgdGhlbiB5b3UgbXVzdCAoaSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCAoaWkpIGNpdGUgdGhlIHN0YXR1dGUgb3IKK3JlZ3VsYXRpb24gdGhhdCBwcm9oaWJpdHMgeW91IGZyb20gYWRoZXJpbmcgdG8gdGhlIExpY2Vuc2UsIGFuZAorKGlpaSkgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbgorbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGQpLAorYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0bwordGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaAorZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5Citza2lsbCBhdCBjb21wdXRlciBwcm9ncmFtbWluZyB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzYuIEFwcGxpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlCithcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkIHRoZSBOb3RpY2UgaW4KK0V4aGliaXQgQSwKK3doaWNoIGlzIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgdGhpcyByZWZlcmVuY2UuCisKKzcuIFZlcnNpb25zIG9mIFRoaXMgTGljZW5zZS4KKworYS4gVmVyc2lvbi4gVGhlIE1vdG9zb3RvIE9wZW4gU291cmNlIExpY2Vuc2UgaXMKK2Rlcml2ZWQgZnJvbSB0aGUgSmFiYmVyIE9wZW4gU291cmNlIExpY2Vuc2UuIEFsbCBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvCithcHBsaWNhYmxlIGxhdyBhbmQgdGhlIGxvY2F0aW9uIG9mIGNvdXJ0LgorCitiLiBOZXcgVmVyc2lvbnMuIExpY2Vuc29yIG1heSBwdWJsaXNoIGZyb20gdGltZSB0bwordGltZSByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKK2MuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgTGljZW5zZWQgUHJvZHVjdAoraGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCB5b3UgbWF5IGFsd2F5cworY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhlIHRlcm1zIG9mIGFueQorc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8gb25lCitvdGhlciB0aGFuIExpYyBlbnNvciBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMKK2FwcGxpY2FibGUgdG8gTGljZW5zZWQgUHJvZHVjdCBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworZC4gRGVyaXZhdGl2ZSBXb3JrcyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdQorY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCB3aGljaCB5b3UgbWF5IGRvIG9ubHkgaW4KK29yZGVyIHRvCithcHBseSBpdCB0byBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBhbHJlYWR5IGEgTGljZW5zZWQgUHJvZHVjdCB1bmRlcgordGhpcyBMaWNlbnNlLCB5b3UgbXVzdCByZW5hbWUgeW91ciBsaWNlbnNlIHNvIHRoYXQgaXQgaXMgbm90Citjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoaXMgTGljZW5zZSwgYW5kIG11c3QgbWFrZSBpdCBjbGVhciB0aGF0Cit5b3VyIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuIEluCitzbyBuYW1pbmcgeW91ciBsaWNlbnNlLCB5b3UgbWF5IG5vdCB1c2UgYW55IHRyYWRlbWFyayBvZiBMaWNlbnNvcgorb3IgYW55IENvbnRyaWJ1dG9yLgorCis4LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitMSUNFTlNFRCBQUk9EVUNUIElTCitQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUworVEhBVCBUSEUgTElDRU5TRUQgUFJPRFVDVCBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgT1IKK05PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElDRU5TRUQgUFJPRFVDVCBJUworV0lUSCBZT1UuIFNIT1VMRCBMSUNFTlNFRCBQUk9EVUNUIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VCisoQU5EIE5PVCBUSEUgTElDRU5TT1IgT1IKK0FOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIKK09SIENPUlJFQ1RJT04uIFRISVMKK0RJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTworVVNFIE9GIExJQ0VOU0VECitQUk9EVUNUIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzkuIFRlcm1pbmF0aW9uLgorCithLiBBdXRvbWF0aWMgVGVybWluYXRpb24gVXBvbiBCcmVhY2guIFRoaXMKK2xpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiB5b3UKK2ZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoCit3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLgorQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHRoYXQgYXJlIHByb3Blcmx5IGdyYW50ZWQKK3NoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgbGljZW5zZS4gUHJvdmlzaW9ucwordGhhdCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZQordGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBzaGFsbCBzdXJ2aXZlLgorCitiLiBUZXJtaW5hdGlvbiBVcG9uIEFzc2VydGlvbiBvZiBQYXRlbnQKK0luZnJpbmdlbWVudC4gSWYgeW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50CitpbmZyaW5nZW1lbnQgY2xhaW0KKyhleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBMaWNlbnNvciBvciBhCitDb250cmlidXRvciAoTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIHlvdSBmaWxlCitzdWNoIGFuIGFjdGlvbiBpcyByZWZlcnJlZCB0byBoZXJlaW4gYXMgIlJlc3BvbmRlbnQiKSBhbGxlZ2luZwordGhhdCBMaWNlbnNlZCBQcm9kdWN0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueQorcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUmVzcG9uZGVudCB0byB5b3UKK3VuZGVyIFNlY3Rpb25zIDEgb3IgMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlCitwcm9zcGVjdGl2ZWx5IHVwb24gc2l4dHkgKDYwKSBkYXlzIG5vdGljZSBmcm9tIFJlc3BvbmRlbnQgKHRoZQorIk5vdGljZSBQZXJpb2QiKSB1bmxlc3Mgd2l0aGluIHRoYXQgTm90aWNlIFBlcmlvZCB5b3UKK2VpdGhlciBhZ3JlZSBpbiB3cml0aW5nIChpKSB0byBwYXkgUmVzcG9uZGVudCBhIG11dHVhbGx5IGFncmVlYWJsZQorcmVhc29uYWJseSByb3lhbHR5IGZvciB5b3VyIHBhc3Qgb3IgZnV0dXJlIHVzZSBvZiBMaWNlbnNlZAorUHJvZHVjdCBtYWRlIGJ5IHN1Y2ggUmVzcG9uZGVudCwgb3IgKGlpKSB3aXRoZHJhdyB5b3VyIGxpdGlnYXRpb24KK2NsYWltIHdpdGggcmVzcGVjdCB0byBMaWNlbnNlZCBQcm9kdWN0IGFnYWluc3Qgc3VjaAorUmVzcG9uZGVudC4gSWYgd2l0aGluIHNhaWQgTm90aWNlIFBlcmlvZCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQKK3BheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbgord3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLAordGhlIHJpZ2h0cyBncmFudGVkIGJ5IExpY2Vuc29yIHRvIHlvdSB1bmRlciBTZWN0aW9ucyAxIGFuZCAyCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiBzYWlkIE5vdGljZQorUGVyaW9kLgorCitjLiBSZWFzb25hYmxlIFZhbHVlIG9mIFRoaXMgTGljZW5zZS4gSWYgeW91IGFzc2VydCBhCitwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUmVzcG9uZGVudCBhbGxlZ2luZyB0aGF0IExpY2Vuc2VkCitQcm9kdWN0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaAorY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0bwordGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZQorcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzYWlkIFJlc3BvbmRlbnQgdW5kZXIKK1NlY3Rpb25zIDEgYW5kIDIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZQorYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKK2QuIE5vIFJldHJvYWN0aXZlIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gSW4gdGhlCitldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA5KGEpIG9yIDkoYikgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlCithZ3JlZW1lbnRzIChleGNsdWRpbmcgbGljZW5zZXMgdG8gZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlIHJzKQordGhhdCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IHlvdSBvciBhbnkgZGlzdHJpYnV0b3IKK2hlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlCit0ZXJtaW5hdGlvbi4KKworMTAuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitVTkRFUiBOTworQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBMSUNFTlNPUiwgQU5ZCitDT05UUklCVVRPUiwgT1IgQU5ZCitESVNUUklCVVRPUiBPRiBMSUNFTlNFRCBQUk9EVUNULCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywKK0JFIExJQUJMRSBUTyBBTlkgUEVSU09OCitGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCitDSEFSQUNURVIgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUgorRkFJTFVSRSBPUgorTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYKK1NVQ0ggUEFSVFkgU0hBTEwKK0hBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QKK0FQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0gKK1BBUlRZCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTXVsdGljcyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTXVsdGljcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg3NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NdWx0aWNzCkBAIC0wLDAgKzEsNDAgQEAKKworTXVsdGljcyBMaWNlbnNlCisKK0hpc3RvcmljYWwgQmFja2dyb3VuZAorCitUaGlzIGVkaXRpb24gb2YgdGhlIE11bHRpY3Mgc29mdHdhcmUgbWF0ZXJpYWxzIGFuZCBkb2N1bWVudGF0aW9uIGlzCitwcm92aWRlZCBhbmQgZG9uYXRlZCB0byBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IGJ5IEdyb3VwCitCVUxMIGluY2x1ZGluZyBCVUxMIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLiBhcyBhIGNvbnRyaWJ1dGlvbiB0bworY29tcHV0ZXIgc2NpZW5jZSBrbm93bGVkZ2UuIFRoaXMgZG9uYXRpb24gaXMgbWFkZSBhbHNvIHRvIGdpdmUgZXZpZGVuY2UKK29mIHRoZSBjb21tb24gY29udHJpYnV0aW9ucyBvZiBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LAorQmVsbCBMYWJvcmF0b3JpZXMsIEdlbmVyYWwgRWxlY3RyaWMsIEhvbmV5d2VsbCBJbmZvcm1hdGlvbiBTeXN0ZW1zCitJbmMuLCBIb25leXdlbGwgQlVMTCBJbmMuLCBHcm91cGUgQlVMTCBhbmQgQlVMTCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zCitJbmMuIHRvIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIG9wZXJhdGluZyBzeXN0ZW0uIE11bHRpY3MgZGV2ZWxvcG1lbnQKK3dhcyBpbml0aWF0ZWQgYnkgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSBQcm9qZWN0IE1BQworKDE5NjMtMTk3MCksIHJlbmFtZWQgdGhlIE1JVCBMYWJvcmF0b3J5IGZvciBDb21wdXRlciBTY2llbmNlIGFuZAorQXJ0aWZpY2lhbCBJbnRlbGxpZ2VuY2UgaW4gdGhlIG1pZCAxOTcwcywgdW5kZXIgdGhlIGxlYWRlcnNoaXAgb2YKK1Byb2Zlc3NvciBGZXJuYW5kbyBKb3NlIENvcmJhdG8uIFVzZXJzIGNvbnNpZGVyIHRoYXQgTXVsdGljcyBwcm92aWRlZCB0aGUKK2Jlc3Qgc29mdHdhcmUgYXJjaGl0ZWN0dXJlIGZvciBtYW5hZ2luZyBjb21wdXRlciBoYXJkd2FyZSBwcm9wZXJseSBhbmQKK2ZvciBleGVjdXRpbmcgcHJvZ3JhbXMuIE1hbnkgc3Vic2VxdWVudCBvcGVyYXRpbmcgc3lzdGVtcyBpbmNvcnBvcmF0ZWQKK011bHRpY3MgcHJpbmNpcGxlcy4gTXVsdGljcyB3YXMgZGlzdHJpYnV0ZWQgaW4gMTk3NSB0byAyMDAwIGJ5IEdyb3VwCitCdWxsIGluIEV1cm9wZSAsIGFuZCBpbiB0aGUgVS5TLiBieSBCdWxsIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLiwgYXMKK3N1Y2Nlc3NvciBpbiBpbnRlcmVzdCBieSBjaGFuZ2UgaW4gbmFtZSBvbmx5IHRvIEhvbmV5d2VsbCBCdWxsIEluYy4gYW5kCitIb25leXdlbGwgSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuIC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlc2UgcHJvZ3JhbXMgYW5kIHRoZWlyCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQscHJvdmlkZWQKK3RoYXQgdGhlIGJlbG93IGNvcHlyaWdodCBub3RpY2UgYW5kIGhpc3RvcmljYWwgYmFja2dyb3VuZCBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgaGlzdG9yaWNhbCBiYWNrZ3JvdW5kIGFuZAordGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdAordGhlIG5hbWVzIG9mIE1JVCwgSElTLCBCVUxMIG9yIEJVTEwgSE4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK3B1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcHJvZ3JhbXMgd2l0aG91dCBzcGVjaWZpYworcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorQ29weXJpZ2h0IDE5NzIgYnkgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSBhbmQgSG9uZXl3ZWxsIEluZm9ybWF0aW9uCitTeXN0ZW1zIEluYy4KK0NvcHlyaWdodCAyMDA2IGJ5IEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuCitDb3B5cmlnaHQgMjAwNiBieSBCdWxsIFNBUworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05BU0EtMS4zIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQVNBLTEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMxODJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQVNBLTEuMwpAQCAtMCwwICsxLDc5IEBACisKK0FTQSBPUEVOIFNPVVJDRSBBR1JFRU1FTlQgVkVSU0lPTiAxLjMKKworVEhJUyBPUEVOIFNPVVJDRSBBR1JFRU1FTlQgKCJBR1JFRU1FTlQiKSBERUZJTkVTIFRIRSBSSUdIVFMgT0YgVVNFLCBSRVBST0RVQ1RJT04sIERJU1RSSUJVVElPTiwgTU9ESUZJQ0FUSU9OIEFORCBSRURJU1RSSUJVVElPTiBPRiBDRVJUQUlOIENPTVBVVEVSIFNPRlRXQVJFIE9SSUdJTkFMTFkgUkVMRUFTRUQgQlkgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCBBUyBSRVBSRVNFTlRFRCBCWSBUSEUgR09WRVJOTUVOVCBBR0VOQ1kgTElTVEVEIEJFTE9XICgiR09WRVJOTUVOVCBBR0VOQ1kiKS4gVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgQVMgUkVQUkVTRU5URUQgQlkgR09WRVJOTUVOVCBBR0VOQ1ksIElTIEFOIElOVEVOREVEIFRISVJELVBBUlRZIEJFTkVGSUNJQVJZIE9GIEFMTCBTVUJTRVFVRU5UIERJU1RSSUJVVElPTlMgT1IgUkVESVNUUklCVVRJT05TIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBBTllPTkUgV0hPIFVTRVMsIFJFUFJPRFVDRVMsIERJU1RSSUJVVEVTLCBNT0RJRklFUyBPUiBSRURJU1RSSUJVVEVTIFRIRSBTVUJKRUNUIFNPRlRXQVJFLCBBUyBERUZJTkVEIEhFUkVJTiwgT1IgQU5ZIFBBUlQgVEhFUkVPRiwgSVMsIEJZIFRIQVQgQUNUSU9OLCBBQ0NFUFRJTkcgSU4gRlVMTCBUSEUgUkVTUE9OU0lCSUxJVElFUyBBTkQgT0JMSUdBVElPTlMgQ09OVEFJTkVEIElOIFRISVMgQUdSRUVNRU5ULgorCitHb3Zlcm5tZW50IEFnZW5jeTogX19fX18gR292ZXJubWVudCBBZ2VuY3kgT3JpZ2luYWwgU29mdHdhcmUgRGVzaWduYXRpb246IF9fIEdvdmVybm1lbnQgQWdlbmN5IE9yaWdpbmFsIFNvZnR3YXJlIFRpdGxlOiBfX19fXyBVc2VyIFJlZ2lzdHJhdGlvbiBSZXF1ZXN0ZWQuIFBsZWFzZSBWaXNpdCBodHRwOi8vX19fIEdvdmVybm1lbnQgQWdlbmN5IFBvaW50IG9mIENvbnRhY3QgZm9yIE9yaWdpbmFsIFNvZnR3YXJlOiBfX19fXworCitERUZJTklUSU9OUworQS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBHb3Zlcm5tZW50IEFnZW5jeSwgYXMgdGhlIGRldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIGFuZCBhbnkgZW50aXR5IHRoYXQgbWFrZXMgYSBNb2RpZmljYXRpb24uIEIuICJDb3ZlcmVkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgTW9kaWZpY2F0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gQy4gIkRpc3BsYXkiIG1lYW5zIHRoZSBzaG93aW5nIG9mIGEgY29weSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgZWl0aGVyIGRpcmVjdGx5IG9yIGJ5IG1lYW5zIG9mIGFuIGltYWdlLCBvciBhbnkgb3RoZXIgZGV2aWNlLiBELiAiRGlzdHJpYnV0aW9uIiBtZWFucyBjb252ZXlhbmNlIG9yIHRyYW5zZmVyIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCByZWdhcmRsZXNzIG9mIG1lYW5zLCB0byBhbm90aGVyLiBFLiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGNvbXB1dGVyIHNvZnR3YXJlIHRoYXQgY29tYmluZXMgU3ViamVjdCBTb2Z0d2FyZSwgb3IgcG9ydGlvbnMgdGhlcmVvZiwgd2l0aCBzb2Z0d2FyZSBzZXBhcmF0ZSBmcm9tIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHRoYXQgaXMgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gRi4gIk1vZGlmaWNhdGlvbiIgbWVhbnMgYW55IGFsdGVyYXRpb24gb2YsIGluY2x1ZGluZyBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tLCB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIFN1YmplY3QgU29mdHdhcmUsIGFuZCBpbmNsdWRlcyBkZXJpdmF0aXZlIHdvcmtzLCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiB0aGUgQ29weXJpZ2h0IFN0YXR1dGUsIDE3IFVTQyAxMDEuIEhvd2V2ZXIsIHRoZSBhY3Qgb2YgaW5jbHVkaW5nIFN1YmplY3QgU29mdHdhcmUgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrIGRvZXMgbm90IGluIGFuZCBvZiBpdHNlbGYgY29uc3RpdHV0ZSBhIE1vZGlmaWNhdGlvbi4gRy4gIk9yaWdpbmFsIFNvZnR3YXJlIiBtZWFucyB0aGUgY29tcHV0ZXIgc29mdHdhcmUgZmlyc3QgcmVsZWFzZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYnkgR292ZXJubWVudCBBZ2VuY3kgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBkZXNpZ25hdGlvbiBfXyBhbmQgZW50aXRsZWQgX19fX19fX19fLCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiwgaWYgYW55LiBILiAiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIGFjcXVpcmVzIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4gSS4gIlJlZGlzdHJpYnV0aW9uIiBtZWFucyBEaXN0cmlidXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgYWZ0ZXIgYSBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4gSi4gIlJlcHJvZHVjdGlvbiIgbWVhbnMgdGhlIG1ha2luZyBvZiBhIGNvdW50ZXJwYXJ0LCBpbWFnZSBvciBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBLLiAiU2FsZSIgbWVhbnMgdGhlIGV4Y2hhbmdlIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGZvciBtb25leSBvciBlcXVpdmFsZW50IHZhbHVlLiBMLiAiU3ViamVjdCBTb2Z0d2FyZSIgbWVhbnMgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBNb2RpZmljYXRpb25zLCBvciBhbnkgcmVzcGVjdGl2ZSBwYXJ0cyB0aGVyZW9mLiBNLiAiVXNlIiBtZWFucyB0aGUgYXBwbGljYXRpb24gb3IgZW1wbG95bWVudCBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisKK0dSQU5UIE9GIFJJR0hUUworQS4gVW5kZXIgTm9uLVBhdGVudCBSaWdodHM6IFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yLCB3aXRoIHJlc3BlY3QgdG8gaXRzIG93biBjb250cmlidXRpb24gdG8gdGhlIFN1YmplY3QgU29mdHdhcmUsIGhlcmVieSBncmFudHMgdG8gZWFjaCBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBlbmdhZ2UgaW4gdGhlIGZvbGxvd2luZyBhY3Rpdml0aWVzIHBlcnRhaW5pbmcgdG8gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKK1VzZQorRGlzdHJpYnV0aW9uCitSZXByb2R1Y3Rpb24KK01vZGlmaWNhdGlvbgorUmVkaXN0cmlidXRpb24KK0Rpc3BsYXkKK0IuIFVuZGVyIFBhdGVudCBSaWdodHM6IFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yLCB3aXRoIHJlc3BlY3QgdG8gaXRzIG93biBjb250cmlidXRpb24gdG8gdGhlIFN1YmplY3QgU29mdHdhcmUsIGhlcmVieSBncmFudHMgdG8gZWFjaCBSZWNpcGllbnQgdW5kZXIgQ292ZXJlZCBQYXRlbnRzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gZW5nYWdlIGluIHRoZSBmb2xsb3dpbmcgYWN0aXZpdGllcyBwZXJ0YWluaW5nIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlOgorCitVc2UKK0Rpc3RyaWJ1dGlvbgorUmVwcm9kdWN0aW9uCitTYWxlCitPZmZlciBmb3IgU2FsZQorQy4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIFBhcmFncmFwaCBCLiBhbHNvIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiBhIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9uIGFuZCB0aGUgU3ViamVjdCBTb2Z0d2FyZSBpZiwgYXQgdGhlIHRpbWUgdGhlIE1vZGlmaWNhdGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHRoZSBhZGRpdGlvbiBvZiBzdWNoIE1vZGlmaWNhdGlvbiBjYXVzZXMgdGhlIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIENvdmVyZWQgUGF0ZW50cy4gSXQgZG9lcyBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB0aGF0IGluY2x1ZGUgYSBNb2RpZmljYXRpb24uCisKK0QuIFRoZSByaWdodHMgZ3JhbnRlZCBpbiBQYXJhZ3JhcGhzIEEuIGFuZCBCLiBhbGxvdyB0aGUgUmVjaXBpZW50IHRvIHN1YmxpY2Vuc2UgdGhvc2Ugc2FtZSByaWdodHMuIFN1Y2ggc3VibGljZW5zZSBtdXN0IGJlIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LgorCitPQkxJR0FUSU9OUyBPRiBSRUNJUElFTlQKK0EuIERpc3RyaWJ1dGlvbiBvciBSZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBtdXN0IGJlIG1hZGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgZXhjZXB0IGZvciBhZGRpdGlvbnMgY292ZXJlZCB1bmRlciBwYXJhZ3JhcGggM0guCisKK1doZW5ldmVyIGEgUmVjaXBpZW50IGRpc3RyaWJ1dGVzIG9yIHJlZGlzdHJpYnV0ZXMgdGhlIFN1YmplY3QgU29mdHdhcmUsIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlOyBhbmQKK0lmIFJlY2lwaWVudCBkaXN0cmlidXRlcyBvciByZWRpc3RyaWJ1dGVzIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gc291cmNlIGNvZGUsIFJlY2lwaWVudCBtdXN0IGFsc28gbWFrZSB0aGUgc291cmNlIGNvZGUgZnJlZWx5IGF2YWlsYWJsZSwgYW5kIG11c3QgcHJvdmlkZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gb2J0YWluIHRoZSBzb3VyY2UgY29kZSBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCitCLiBFYWNoIFJlY2lwaWVudCBtdXN0IGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIHByb21pbmVudGx5IGluIHRoZSBTdWJqZWN0IFNvZnR3YXJlOgorCitbR292ZXJubWVudCBBZ2VuY3kgd2lsbCBpbnNlcnQgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IG5vdGljZSBpbiBlYWNoIGFncmVlbWVudCBhY2NvbXBhbnlpbmcgdGhlIGluaXRpYWwgZGlzdHJpYnV0aW9uIG9mIG9yaWdpbmFsIHNvZnR3YXJlIGFuZCByZW1vdmUgdGhpcyBicmFja2V0ZWQgbGFuZ3VhZ2UuXQorCitbVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIHdpbGwgYmUgdXNlZCBpZiBjcmVhdGVkIGJ5IGEgY29udHJhY3RvciBwdXJzdWFudCB0byBHb3Zlcm5tZW50IEFnZW5jeSBjb250cmFjdCBhbmQgcmlnaHRzIG9idGFpbmVkIGZyb20gY3JlYXRvciBieSBhc3NpZ25tZW50LiBHb3Zlcm5tZW50IEFnZW5jeSB3aWxsIGluc2VydCB0aGUgeWVhciBhbmQgaXRzIEFnZW5jeSBkZXNpZ25hdGlvbiBhbmQgcmVtb3ZlIHRoZSBicmFja2V0ZWQgbGFuZ3VhZ2UuXSBDb3B5cmlnaHQgJiM2NTUzMzsge1lFQVJ9IFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCBhcyByZXByZXNlbnRlZCBieSBfX18gX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworW1RoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSB3aWxsIGJlIHVzZWQgaWYgY3JlYXRlZCBieSBjaXZpbCBzZXJ2YW50cyBvbmx5LiBHb3Zlcm5tZW50IEFnZW5jeSB3aWxsIGluc2VydCB0aGUgeWVhciBhbmQgaXRzIEFnZW5jeSBkZXNpZ25hdGlvbiBhbmQgcmVtb3ZlIHRoZSBicmFja2V0ZWQgbGFuZ3VhZ2UuXSBDb3B5cmlnaHQgJiM2NTUzMzsge1lFQVJ9IFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCBhcyByZXByZXNlbnRlZCBieSBfX19fIF9fX18uIE5vIGNvcHlyaWdodCBpcyBjbGFpbWVkIGluIHRoZSBVbml0ZWQgU3RhdGVzIHVuZGVyIFRpdGxlIDE3LCBVLlMuQ29kZS4gQWxsIE90aGVyIFJpZ2h0cyBSZXNlcnZlZC4KKworQy4gRWFjaCBDb250cmlidXRvciBtdXN0IGNoYXJhY3Rlcml6ZSBpdHMgYWx0ZXJhdGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhcyBhIE1vZGlmaWNhdGlvbiBhbmQgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIE1vZGlmaWNhdGlvbiBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiBJbiBmdWxmaWxsbWVudCBvZiB0aGVzZSByZXF1aXJlbWVudHMsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIGZpbGUgKGUuZy4sIGEgY2hhbmdlIGxvZyBmaWxlKSB0aGF0IGRlc2NyaWJlcyB0aGUgYWx0ZXJhdGlvbnMgbWFkZSBhbmQgdGhlIGRhdGUgb2YgdGhlIGFsdGVyYXRpb25zLCBpZGVudGlmaWVzIENvbnRyaWJ1dG9yIGFzIG9yaWdpbmF0b3Igb2YgdGhlIGFsdGVyYXRpb25zLCBhbmQgY29uc2VudHMgdG8gY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgYWx0ZXJhdGlvbnMgYXMgYSBNb2RpZmljYXRpb24sIGZvciBleGFtcGxlLCBieSBpbmNsdWRpbmcgYSBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgU29mdHdhcmUgcHJvdmlkZWQgYnkgR292ZXJubWVudCBBZ2VuY3kuIE9uY2UgY29uc2VudCBpcyBncmFudGVkLCBpdCBtYXkgbm90IHRoZXJlYWZ0ZXIgYmUgcmV2b2tlZC4KKworRC4gQSBDb250cmlidXRvciBtYXkgYWRkIGl0cyBvd24gY29weXJpZ2h0IG5vdGljZSB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gT25jZSBhIGNvcHlyaWdodCBub3RpY2UgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIFN1YmplY3QgU29mdHdhcmUsIGEgUmVjaXBpZW50IG1heSBub3QgcmVtb3ZlIGl0IHdpdGhvdXQgdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiB0aGUgQ29udHJpYnV0b3Igd2hvIGFkZGVkIHRoZSBub3RpY2UuCisKK0UuIEEgUmVjaXBpZW50IG1heSBub3QgbWFrZSBhbnkgcmVwcmVzZW50YXRpb24gaW4gdGhlIFN1YmplY3QgU29mdHdhcmUgb3IgaW4gYW55IHByb21vdGlvbmFsLCBhZHZlcnRpc2luZyBvciBvdGhlciBtYXRlcmlhbCB0aGF0IG1heSBiZSBjb25zdHJ1ZWQgYXMgYW4gZW5kb3JzZW1lbnQgYnkgR292ZXJubWVudCBBZ2VuY3kgb3IgYnkgYW55IHByaW9yIFJlY2lwaWVudCBvZiBhbnkgcHJvZHVjdCBvciBzZXJ2aWNlIHByb3ZpZGVkIGJ5IFJlY2lwaWVudCwgb3IgdGhhdCBtYXkgc2VlayB0byBvYnRhaW4gY29tbWVyY2lhbCBhZHZhbnRhZ2UgYnkgdGhlIGZhY3Qgb2YgR292ZXJubWVudCBBZ2VuY3lgcyBvciBhIHByaW9yIFJlY2lwaWVudGBzIHBhcnRpY2lwYXRpb24gaW4gdGhpcyBBZ3JlZW1lbnQuCisKK0YuIEluIGFuIGVmZm9ydCB0byB0cmFjayB1c2FnZSBhbmQgbWFpbnRhaW4gYWNjdXJhdGUgcmVjb3JkcyBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgZWFjaCBSZWNpcGllbnQsIHVwb24gcmVjZWlwdCBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaXMgcmVxdWVzdGVkIHRvIHJlZ2lzdGVyIHdpdGggR292ZXJubWVudCBBZ2VuY3kgYnkgdmlzaXRpbmcgdGhlIGZvbGxvd2luZyB3ZWJzaXRlOiBfX19fX18uIFJlY2lwaWVudGBzIG5hbWUgYW5kIHBlcnNvbmFsIGluZm9ybWF0aW9uIHNoYWxsIGJlIHVzZWQgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzIG9ubHkuIE9uY2UgYSBSZWNpcGllbnQgbWFrZXMgYSBNb2RpZmljYXRpb24gYXZhaWxhYmxlLCBpdCBpcyByZXF1ZXN0ZWQgdGhhdCB0aGUgUmVjaXBpZW50IGluZm9ybSBHb3Zlcm5tZW50IEFnZW5jeSBhdCB0aGUgd2ViIHNpdGUgcHJvdmlkZWQgYWJvdmUgaG93IHRvIGFjY2VzcyB0aGUgTW9kaWZpY2F0aW9uLgorCitbQWx0ZXJuYXRpdmUgcGFyYWdyYXBoIGZvciB1c2Ugd2hlbiBhIHdlYiBzaXRlIGZvciByZWxlYXNlIGFuZCBtb25pdG9yaW5nIG9mIHN1YmplY3Qgc29mdHdhcmUgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGJ5IHJlbGVhc2luZyBHb3Zlcm5tZW50IEFnZW5jeV0gSW4gYW4gZWZmb3J0IHRvIHRyYWNrIHVzYWdlIGFuZCBtYWludGFpbiBhY2N1cmF0ZSByZWNvcmRzIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBlYWNoIFJlY2lwaWVudCwgdXBvbiByZWNlaXB0IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBpcyByZXF1ZXN0ZWQgdG8gcHJvdmlkZSBHb3Zlcm5tZW50IEFnZW5jeSwgYnkgZS1tYWlsIHRvIHRoZSBHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGxpc3RlZCBpbiBjbGF1c2UgNS5GLiwgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjogX19fX19fLiBSZWNpcGllbnRgcyBuYW1lIGFuZCBwZXJzb25hbCBpbmZvcm1hdGlvbiBzaGFsbCBiZSB1c2VkIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcyBvbmx5LiBPbmNlIGEgUmVjaXBpZW50IG1ha2VzIGEgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSwgaXQgaXMgcmVxdWVzdGVkIHRoYXQgdGhlIFJlY2lwaWVudCBpbmZvcm0gR292ZXJubWVudCBBZ2VuY3ksIGJ5IGUtbWFpbCB0byB0aGUgR292ZXJubWVudCBBZ2VuY3kgUG9pbnQgb2YgQ29udGFjdCBsaXN0ZWQgaW4gY2xhdXNlIDUuRi4sIGhvdyB0byBhY2Nlc3MgdGhlIE1vZGlmaWNhdGlvbi4KKworRy4gRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdGhhdCBpdHMgTW9kaWZpY2F0aW9uIGlzIGJlbGlldmVkIHRvIGJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24gYW5kIGRvZXMgbm90IHZpb2xhdGUgYW55IGV4aXN0aW5nIGFncmVlbWVudHMsIHJlZ3VsYXRpb25zLCBzdGF0dXRlcyBvciBydWxlcywgYW5kIGZ1cnRoZXIgdGhhdCBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIEFncmVlbWVudC4KKworSC4gQSBSZWNpcGllbnQgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgYW5kL29yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSBvdGhlciBSZWNpcGllbnRzIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBBIFJlY2lwaWVudCBtYXkgZG8gc28sIGhvd2V2ZXIsIG9ubHkgb24gaXRzIG93biBiZWhhbGYgYW5kIG5vdCBvbiBiZWhhbGYgb2YgR292ZXJubWVudCBBZ2VuY3kgb3IgYW55IG90aGVyIFJlY2lwaWVudC4gU3VjaCBhIFJlY2lwaWVudCBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgYW5kL29yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgdGhhdCBSZWNpcGllbnQgYWxvbmUuIEZ1cnRoZXIsIHN1Y2ggUmVjaXBpZW50IGFncmVlcyB0byBpbmRlbW5pZnkgR292ZXJubWVudCBBZ2VuY3kgYW5kIGV2ZXJ5IG90aGVyIFJlY2lwaWVudCBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGVtIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgYW5kL29yIGxpYWJpbGl0eSBvZmZlcmVkIGJ5IHN1Y2ggUmVjaXBpZW50LgorCitJLiBBIFJlY2lwaWVudCBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIFN1YmplY3QgU29mdHdhcmUgd2l0aCBzZXBhcmF0ZSBzb2Z0d2FyZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgYWdyZWVtZW50IGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGNhc2UsIHRoZSBSZWNpcGllbnQgbXVzdCBtYWtlIHN1cmUgU3ViamVjdCBTb2Z0d2FyZSwgb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkZWQgaW4gdGhlIExhcmdlciBXb3JrIGlzIHN1YmplY3QgdG8gdGhpcyBBZ3JlZW1lbnQuCisKK0ouIE5vdHdpdGhzdGFuZGluZyBhbnkgcHJvdmlzaW9ucyBjb250YWluZWQgaGVyZWluLCBSZWNpcGllbnQgaXMgaGVyZWJ5IHB1dCBvbiBub3RpY2UgdGhhdCBleHBvcnQgb2YgYW55IGdvb2RzIG9yIHRlY2huaWNhbCBkYXRhIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgbWF5IHJlcXVpcmUgc29tZSBmb3JtIG9mIGV4cG9ydCBsaWNlbnNlIGZyb20gdGhlIFUuUy4gR292ZXJubWVudC4gRmFpbHVyZSB0byBvYnRhaW4gbmVjZXNzYXJ5IGV4cG9ydCBsaWNlbnNlcyBtYXkgcmVzdWx0IGluIGNyaW1pbmFsIGxpYWJpbGl0eSB1bmRlciBVLlMuIGxhd3MuIEdvdmVybm1lbnQgQWdlbmN5IG5laXRoZXIgcmVwcmVzZW50cyB0aGF0IGEgbGljZW5zZSBzaGFsbCBub3QgYmUgcmVxdWlyZWQgbm9yIHRoYXQsIGlmIHJlcXVpcmVkLCBpdCBzaGFsbCBiZSBpc3N1ZWQuIE5vdGhpbmcgZ3JhbnRlZCBoZXJlaW4gcHJvdmlkZXMgYW55IHN1Y2ggZXhwb3J0IGxpY2Vuc2UuCisKK0RJU0NMQUlNRVIgT0YgV0FSUkFOVElFUyBBTkQgTElBQklMSVRJRVM7IFdBSVZFUiBBTkQgSU5ERU1OSUZJQ0FUSU9OCitBLiBObyBXYXJyYW50eTogVEhFIFNVQkpFQ1QgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCwgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFNVQkpFQ1QgU09GVFdBUkUgV0lMTCBDT05GT1JNIFRPIFNQRUNJRklDQVRJT05TLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIEZSRUVET00gRlJPTSBJTkZSSU5HRU1FTlQsIEFOWSBXQVJSQU5UWSBUSEFUIFRIRSBTVUJKRUNUIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSwgT1IgQU5ZIFdBUlJBTlRZIFRIQVQgRE9DVU1FTlRBVElPTiwgSUYgUFJPVklERUQsIFdJTEwgQ09ORk9STSBUTyBUSEUgU1VCSkVDVCBTT0ZUV0FSRS4gVEhJUyBBR1JFRU1FTlQgRE9FUyBOT1QsIElOIEFOWSBNQU5ORVIsIENPTlNUSVRVVEUgQU4gRU5ET1JTRU1FTlQgQlkgR09WRVJOTUVOVCBBR0VOQ1kgT1IgQU5ZIFBSSU9SIFJFQ0lQSUVOVCBPRiBBTlkgUkVTVUxUUywgUkVTVUxUSU5HIERFU0lHTlMsIEhBUkRXQVJFLCBTT0ZUV0FSRSBQUk9EVUNUUyBPUiBBTlkgT1RIRVIgQVBQTElDQVRJT05TIFJFU1VMVElORyBGUk9NIFVTRSBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRS4gRlVSVEhFUiwgR09WRVJOTUVOVCBBR0VOQ1kgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIEFORCBMSUFCSUxJVElFUyBSRUdBUkRJTkcgVEhJUkQtUEFSVFkgU09GVFdBUkUsIElGIFBSRVNFTlQgSU4gVEhFIE9SSUdJTkFMIFNPRlRXQVJFLCBBTkQgRElTVFJJQlVURVMgSVQgIkFTIElTLiIKKworQi4gV2FpdmVyIGFuZCBJbmRlbW5pdHk6IFJFQ0lQSUVOVCBBR1JFRVMgVE8gV0FJVkUgQU5ZIEFORCBBTEwgQ0xBSU1TIEFHQUlOU1QgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgSVRTIENPTlRSQUNUT1JTIEFORCBTVUJDT05UUkFDVE9SUywgQVMgV0VMTCBBUyBBTlkgUFJJT1IgUkVDSVBJRU5ULiBJRiBSRUNJUElFTlRgUyBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUgUkVTVUxUUyBJTiBBTlkgTElBQklMSVRJRVMsIERFTUFORFMsIERBTUFHRVMsIEVYUEVOU0VTIE9SIExPU1NFUyBBUklTSU5HIEZST00gU1VDSCBVU0UsIElOQ0xVRElORyBBTlkgREFNQUdFUyBGUk9NIFBST0RVQ1RTIEJBU0VEIE9OLCBPUiBSRVNVTFRJTkcgRlJPTSwgUkVDSVBJRU5UYFMgVVNFIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFLCBSRUNJUElFTlQgU0hBTEwgSU5ERU1OSUZZIEFORCBIT0xEIEhBUk1MRVNTIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQsIElUUyBDT05UUkFDVE9SUyBBTkQgU1VCQ09OVFJBQ1RPUlMsIEFTIFdFTEwgQVMgQU5ZIFBSSU9SIFJFQ0lQSUVOVCwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLiBSRUNJUElFTlRgUyBTT0xFIFJFTUVEWSBGT1IgQU5ZIFNVQ0ggTUFUVEVSIFNIQUxMIEJFIFRIRSBJTU1FRElBVEUsIFVOSUxBVEVSQUwgVEVSTUlOQVRJT04gT0YgVEhJUyBBR1JFRU1FTlQuCisKK0dFTkVSQUwgVEVSTVMKK0EuIFRlcm1pbmF0aW9uOiBUaGlzIEFncmVlbWVudCBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIGEgUmVjaXBpZW50IGZhaWxzIHRvIGNvbXBseSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIG5vbmNvbXBsaWFuY2Ugd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBVcG9uIHRlcm1pbmF0aW9uLCBhIFJlY2lwaWVudCBhZ3JlZXMgdG8gaW1tZWRpYXRlbHkgY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSBwcm9wZXJseSBncmFudGVkIGJ5IHRoZSBicmVhY2hpbmcgUmVjaXBpZW50IHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0IuIFNldmVyYWJpbGl0eTogSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCitDLiBBcHBsaWNhYmxlIExhdzogVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byBVbml0ZWQgU3RhdGVzIGZlZGVyYWwgbGF3IG9ubHkgZm9yIGFsbCBwdXJwb3NlcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGRldGVybWluaW5nIHRoZSB2YWxpZGl0eSBvZiB0aGlzIEFncmVlbWVudCwgdGhlIG1lYW5pbmcgb2YgaXRzIHByb3Zpc2lvbnMgYW5kIHRoZSByaWdodHMsIG9ibGlnYXRpb25zIGFuZCByZW1lZGllcyBvZiB0aGUgcGFydGllcy4KKworRC4gRW50aXJlIFVuZGVyc3RhbmRpbmc6IFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgdW5kZXJzdGFuZGluZyBhbmQgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHJlbGF0aW5nIHRvIHJlbGVhc2Ugb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgYW5kIG1heSBub3QgYmUgc3VwZXJzZWRlZCwgbW9kaWZpZWQgb3IgYW1lbmRlZCBleGNlcHQgYnkgZnVydGhlciB3cml0dGVuIGFncmVlbWVudCBkdWx5IGV4ZWN1dGVkIGJ5IHRoZSBwYXJ0aWVzLgorCitFLiBCaW5kaW5nIEF1dGhvcml0eTogQnkgYWNjZXB0aW5nIGFuZCB1c2luZyB0aGUgU3ViamVjdCBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudCwgYSBSZWNpcGllbnQgYWZmaXJtcyBpdHMgYXV0aG9yaXR5IHRvIGJpbmQgdGhlIFJlY2lwaWVudCB0byBhbGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHRoYXQgdGhhdCBSZWNpcGllbnQgaGVyZWJ5IGFncmVlcyB0byBhbGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluLgorCitGLiBQb2ludCBvZiBDb250YWN0OiBBbnkgUmVjaXBpZW50IGNvbnRhY3Qgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBpcyB0byBiZSBkaXJlY3RlZCB0byB0aGUgZGVzaWduYXRlZCByZXByZXNlbnRhdGl2ZSBhcyBmb2xsb3dzOiBfX19fX19fX19fXy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQ1NBIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQ1NBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGRjOWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05DU0EKQEAgLTAsMCArMSwzNCBAQAorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EgT3BlbiBTb3VyY2UgTGljZW5zZQorQ29weXJpZ2h0IChjKSA8WWVhcj4gPE93bmVyIE9yZ2FuaXphdGlvbiBOYW1lPiAKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieTogICA8TmFtZSBvZiBEZXZlbG9wbWVudCBHcm91cD4KKyAgICAgICAgICAgICAgICAgICAgICAgPE5hbWUgb2YgSW5zdGl0dXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8VVJMIGZvciBEZXZlbG9wbWVudCBHcm91cC9JbnN0aXR1dGlvbj4KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCitjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMKK2luIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KK05laXRoZXIgdGhlIG5hbWVzIG9mIDxOYW1lIG9mIERldmVsb3BtZW50IEdyb3VwLCBOYW1lIG9mCitJbnN0aXR1dGlvbj4sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCitvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKK3dyaXR0ZW4gcGVybWlzc2lvbi4KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCitPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKK0FOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkdQTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkdQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk2ZWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OR1BMCkBAIC0wLDAgKzEsNDUgQEAKKworCitORVRIQUNLIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworKENvcHlyaWdodCAxOTg5IE0uIFN0ZXBoZW5zb24pIAorKEJhc2VkIG9uIHRoZSBCSVNPTiBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlLCBjb3B5cmlnaHQgMTk4OCBSaWNoYXJkIE0uIFN0YWxsbWFuKQorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlLCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyB3b3JkaW5nIHRvIG1ha2UgdGhlIHRlcm1zIGZvciBvdGhlciBwcm9ncmFtcy4KK1RoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMga2VlcCB5b3UgYXQgdGhlIG1lcmN5IG9mIHRob3NlIGNvbXBhbmllcy4gQnkgY29udHJhc3QsIG91ciBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGdpdmUgZXZlcnlvbmUgdGhlIHJpZ2h0IHRvIHNoYXJlIE5ldEhhY2suIFRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBnZXQgdGhlIHJpZ2h0cyB3ZSB3YW50IHlvdSB0byBoYXZlLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gSGVuY2UgdGhpcyBsaWNlbnNlIGFncmVlbWVudC4KKworU3BlY2lmaWNhbGx5LCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSByaWdodCB0byBnaXZlIGF3YXkgY29waWVzIG9mIE5ldEhhY2ssIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgZWxzZSBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIE5ldEhhY2sgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5b25lIGhhcyBzdWNoIHJpZ2h0cywgd2UgaGF2ZSB0byBmb3JiaWQgeW91IHRvIGRlcHJpdmUgYW55b25lIGVsc2Ugb2YgdGhlc2UgcmlnaHRzLiBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIE5ldEhhY2ssIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3QgdGVsbCB0aGVtIHRoZWlyIHJpZ2h0cy4KKworQWxzbywgZm9yIG91ciBvd24gcHJvdGVjdGlvbiwgd2UgbXVzdCBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSBmaW5kcyBvdXQgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgTmV0SGFjay4gSWYgTmV0SGFjayBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHdoYXQgd2UgZGlzdHJpYnV0ZWQuCisKK1RoZXJlZm9yZSB3ZSAoTWlrZSBTdGVwaGVuc29uIGFuZCBvdGhlciBob2xkZXJzIG9mIE5ldEhhY2sgY29weXJpZ2h0cykgbWFrZSB0aGUgZm9sbG93aW5nIHRlcm1zIHdoaWNoIHNheSB3aGF0IHlvdSBtdXN0IGRvIHRvIGJlIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSBvciBjaGFuZ2UgTmV0SGFjay4KKworQ09QWUlORyBQT0xJQ0lFUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIE5ldEhhY2sgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGtlZXAgaW50YWN0IHRoZSBub3RpY2VzIG9uIGFsbCBmaWxlcyB0aGF0IHJlZmVyIHRvIGNvcHlyaWdodHMsIHRvIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBOZXRIYWNrIHByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYWxvbmcgd2l0aCB0aGUgcHJvZ3JhbS4KK1lvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgTmV0SGFjayBvciBhbnkgcG9ydGlvbiBvZiBpdCwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGggMSBhYm92ZSAoaW5jbHVkaW5nIGRpc3RyaWJ1dGluZyB0aGlzIExpY2Vuc2UgQWdyZWVtZW50KSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyB0aGUgZm9sbG93aW5nOgorYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCitiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIE5ldEhhY2sgb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIG9uIHRlcm1zIGlkZW50aWNhbCB0byB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCAoZXhjZXB0IHRoYXQgeW91IG1heSBjaG9vc2UgdG8gZ3JhbnQgbW9yZSBleHRlbnNpdmUgd2FycmFudHkgcHJvdGVjdGlvbiB0byBzb21lIG9yIGFsbCB0aGlyZCBwYXJ0aWVzLCBhdCB5b3VyIG9wdGlvbikKKworYykgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgTmV0SGFjayAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKK2IpIGFjY29tcGFueSBpdCB3aXRoIGZ1bGwgaW5mb3JtYXRpb24gYXMgdG8gaG93IHRvIG9idGFpbiB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmcm9tIGFuIGFwcHJvcHJpYXRlIGFyY2hpdmUgc2l0ZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4pCisKK0ZvciB0aGVzZSBwdXJwb3NlcywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgZWl0aGVyIHRoZSBmdWxsIHNvdXJjZSBkaXN0cmlidXRpb24gYXMgb3JpZ2luYWxseSByZWxlYXNlZCBvdmVyIFVzZW5ldCBvciB1cGRhdGVkIGNvcGllcyBvZiB0aGUgZmlsZXMgaW4gdGhpcyBkaXN0cmlidXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUuCisKK1lvdSBtYXkgbm90IGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgTmV0SGFjayBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIE5ldEhhY2sgaXMgdm9pZCBhbmQgeW91ciByaWdodHMgdG8gdXNlIHRoZSBwcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBhZ3JlZW1lbnQgc2hhbGwgYmUgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvbXB1dGVyIHNvZnR3YXJlIHByb2dyYW1zIGZyb20geW91IHdpdGggdGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KK1N0YXRlZCBwbGFpbmx5OiBZb3UgYXJlIHBlcm1pdHRlZCB0byBtb2RpZnkgTmV0SGFjaywgb3Igb3RoZXJ3aXNlIHVzZSBwYXJ0cyBvZiBOZXRIYWNrLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCB0aGUgY29uZGl0aW9ucyBzcGVjaWZpZWQgYWJvdmU7IGluIHBhcnRpY3VsYXIsIHlvdXIgbW9kaWZpZWQgTmV0SGFjayBvciBwcm9ncmFtIGNvbnRhaW5pbmcgcGFydHMgb2YgTmV0SGFjayBtdXN0IHJlbWFpbiBmcmVlbHkgYXZhaWxhYmxlIGFzIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIEluIG90aGVyIHdvcmRzLCBnbyBhaGVhZCBhbmQgc2hhcmUgTmV0SGFjaywgYnV0IGRvbmB0IHRyeSB0byBzdG9wIGFueW9uZSBlbHNlIGZyb20gc2hhcmluZyBpdCBmYXJ0aGVyLiAKK1sgIEhvbWUgIHwgIFZlcnNpb24gMy40LjMgIHwgIENvbnRhY3QgVXMgIF0KKworCisKK0hvc3RlZCBieTogICAgICAgCitOZXRIYWNrIGlzIENvcHlyaWdodCAxOTg1LTIwMDMgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtIGFuZCBNLiBTdGVwaGVuc29uLiBTZWUgb3VyIGxpY2Vuc2UgZm9yIGRldGFpbHMuCitUaGlzIHNpdGUgaXMgQ29weXJpZ2h0IDE5OTktMjAwOSBieSBLZW5uZXRoIExvcmJlciwgS2Vuc2luZ3RvbiwgTWFyeWxhbmQuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlBPU0wtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYTY2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlBPU0wtMy4wCkBAIC0wLDAgKzEsNjEgQEAKKworTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCJOb24tUHJvZml0IE9TTCIpIDMuMAorCitUaGlzIE5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICgiTm9uLVByb2ZpdCBPU0wiKSB2ZXJzaW9uIDMuMCAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgbm90aWNlIGFkamFjZW50IHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIE5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMy4wCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29weXJpZ2h0LCB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzLCBlaXRoZXIgYWxvbmUgb3IgYXMgcGFydCBvZiBhIGNvbGxlY3RpdmUgd29yazsKKworYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGVyZWJ5IGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIG9yIGFzIHByb3ZpZGVkIGluIHNlY3Rpb24gMTcoZCk7CisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLgorCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmsuCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4sIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGdyYW50cyBhbnkgbGljZW5zZSB0byBMaWNlbnNvcmBzIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eS4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIG9yIGltcG9ydCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yayBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDEoYykuCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCisKKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2Ygbm9uLWluZnJpbmdlbWVudCwgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55b25lIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYsIGF0IGFueSB0aW1lLCBZb3UgZXhwcmVzc2x5IGFzc2VudGVkIHRvIHRoaXMgTGljZW5zZSwgdGhhdCBhc3NlbnQgaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMgeW91ciByaWdodHMgdG8gdW5kZXJ0YWtlIHRoZSBhY3Rpdml0aWVzIGxpc3RlZCBpbiBTZWN0aW9uIDEsIGluY2x1ZGluZyB5b3VyIHJpZ2h0IHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGFmZmVjdCBjb3B5cmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMgKGluY2x1ZGluZyAiZmFpciB1c2UiIG9yICJmYWlyIGRlYWxpbmciKS4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24geW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMShjKS4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgY29weXJpZ2h0IG9yIHBhdGVudCBsYXcgaW4gdGhlIGFwcHJvcHJpYXRlIGp1cmlzZGljdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5c2AgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMykgTWlzY2VsbGFuZW91cy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCisxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCAmIzE2OTsgMjAwNSBMYXdyZW5jZSBSb3Nlbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIGNvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcGVybWl0cyBZb3UgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZSBhcyBhcHBsaWVkIHRvIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIERlcml2YXRpdmUgV29ya3MuIEhvd2V2ZXIsIFlvdSBtYXkgbW9kaWZ5IHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZSBhbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSAiTW9kaWZpZWQgTGljZW5zZSIpIGFuZCBhcHBseSBpdCB0byBvdGhlciBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAoaSkgWW91IG1heSBub3QgaW5kaWNhdGUgaW4gYW55IHdheSB0aGF0IHlvdXIgTW9kaWZpZWQgTGljZW5zZSBpcyB0aGUgIk9wZW4gU29mdHdhcmUgTGljZW5zZSIgb3IgIk9TTCIgYW5kIHlvdSBtYXkgbm90IHVzZSB0aG9zZSBuYW1lcyBpbiB0aGUgbmFtZSBvZiB5b3VyIE1vZGlmaWVkIExpY2Vuc2U7IChpaSkgWW91IG11c3QgcmVwbGFjZSB0aGUgbm90aWNlIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGFib3ZlIHdpdGggdGhlIG5vdGljZSAiTGljZW5zZWQgdW5kZXIgPGluc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlPiIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyIG93biB0aGF0IGlzIG5vdCBjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoZSBub3RpY2UgaW4gdGhpcyBMaWNlbnNlOyBhbmQgKGlpaSkgWW91IG1heSBub3QgY2xhaW0gdGhhdCB5b3VyIG9yaWdpbmFsIHdvcmtzIGFyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkgYW5kIFlvdSBjb21wbHkgd2l0aCBpdHMgbGljZW5zZSByZXZpZXcgYW5kIGNlcnRpZmljYXRpb24gcHJvY2Vzcy4KKworMTcpIE5vbi1Qcm9maXQgQW1lbmRtZW50LiBUaGUgbmFtZSBvZiB0aGlzIGFtZW5kZWQgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICgiT1NMIDMuMCIpIGlzICJOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAzLjAiLiBUaGUgb3JpZ2luYWwgT1NMIDMuMCBsaWNlbnNlIGhhcyBiZWVuIGFtZW5kZWQgYXMgZm9sbG93czoKKworKGEpIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIGRlY2xhcmVzIHRoYXQgaXQgaXMgYSBub3QtZm9yLXByb2ZpdCBvcmdhbml6YXRpb24gdGhhdCBkZXJpdmVzIG5vIHJldmVudWUgd2hhdHNvZXZlciBmcm9tIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBvciBmcm9tIHN1cHBvcnQgb3Igc2VydmljZXMgcmVsYXRpbmcgdGhlcmV0by4KKworKGIpIFRoZSBmaXJzdCBzZW50ZW5jZSBvZiBTZWN0aW9uIDcgWyJXYXJyYW50eSBvZiBQcm92ZW5hbmNlIl0gb2YgT1NMIDMuMCBoYXMgYmVlbiBzdHJpY2tlbi4gRm9yIE9yaWdpbmFsIFdvcmtzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wLCBMSUNFTlNPUiBPRkZFUlMgTk8gV0FSUkFOVElFUyBXSEFUU09FVkVSLgorCisoYykgSW4gdGhlIGZpcnN0IHNlbnRlbmNlIG9mIFNlY3Rpb24gOCBbIkxpbWl0YXRpb24gb2YgTGlhYmlsaXR5Il0gb2YgdGhpcyBOb24tUHJvZml0IE9TTCAzLjAsIHRoZSBsaXN0IG9mIGRhbWFnZXMgZm9yIHdoaWNoIExJQUJJTElUWSBJUyBMSU1JVEVEIG5vdyBpbmNsdWRlcyAiZGlyZWN0IiBkYW1hZ2VzLgorCisoZCkgVGhlIHByb3Zpc28gaW4gU2VjdGlvbiAxKGMpIG9mIHRoaXMgTGljZW5zZSBub3cgcmVmZXJzIHRvIHRoaXMgIk5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIiByYXRoZXIgdGhhbiB0aGUgIk9wZW4gU29mdHdhcmUgTGljZW5zZSIuIFlvdSBtYXkgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9TTCAzLjAgbGljZW5zZSBvbmx5IGlmIFlvdSBtYWtlIHRoZSByZXByZXNlbnRhdGlvbiBhbmQgZGVjbGFyYXRpb24gaW4gcGFyYWdyYXBoIChhKSBvZiB0aGlzIFNlY3Rpb24gMTcuIE90aGVyd2lzZSwgWW91IHNoYWxsIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIG9ubHkgdW5kZXIgdGhlIE9TTCAzLjAgbGljZW5zZSBhbmQgWW91IHNoYWxsIHB1Ymxpc2ggY2xlYXIgbGljZW5zaW5nIG5vdGljZXMgc28gc3RhdGluZy4gQWxzbyBieSB3YXkgb2YgY2xhcmlmaWNhdGlvbiwgdGhpcyBMaWNlbnNlIGRvZXMgbm90IGF1dGhvcml6ZSBZb3UgdG8gZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB3b3JrcyB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCBpZiBZb3UgcmVjZWl2ZWQgdGhlbSB1bmRlciB0aGUgb3JpZ2luYWwgT1NMIDMuMCBsaWNlbnNlLgorCisoZSkgT3JpZ2luYWwgV29ya3MgbGljZW5zZWQgdW5kZXIgdGhpcyBsaWNlbnNlIHNoYWxsIHJlZmVyZW5jZSAiTm9uLVByb2ZpdCBPU0wgMy4wIiBpbiBsaWNlbnNpbmcgbm90aWNlcyB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gd29ya3MgbGljZW5zZWQgdW5kZXIgdGhlIG9yaWdpbmFsIE9TTCAzLjAgbGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OVFAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzU3MmIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OVFAKQEAgLTAsMCArMSw3IEBACisKK05UUCBMaWNlbnNlIChOVFApCisKK0NvcHlyaWdodCAoYykgKENvcHlyaWdodEhvbGRlcnNOYW1lKSAoRnJvbSA0LWRpZ2l0LXllYXIpLShUbyA0LWRpZ2l0LXllYXIpCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIChUcmFkZW1hcmtlZE5hbWUpIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAoVHJhZGVtYXJrZWROYW1lKSBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05hdW1hbiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2U3ODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05hdW1hbgpAQCAtMCwwICsxLDUwIEBACisKK05BVU1FTiBQdWJsaWMgTGljZW5zZQorVGhpcyBzb2Z0d2FyZSBpcyBDb3B5cmlnaHQgKGMpIE5BVU1FTiAodG0pIGFuZCBDb250cmlidXRvcnMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCit3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCitkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKK2Rpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCiszLiBUaGUgbmFtZSBOQVVNRU4gKHRtKSBtdXN0IG5vdCBiZSB1c2VkIHRvCitlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvcgord3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gTkFVTUVOLgorCis0LiBUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IgYW55CitwdXJwb3NlIGRvZXMgbm90IGdpdmUgeW91IHRoZSByaWdodCB0byB1c2UgU2VydmljZW1hcmtzIChzbSkKK29yIFRyYWRlbWFya3MgKHRtKSBvZiBOQVVNRU4uCisKKzUuIElmIGFueSBmaWxlcyBvcmlnaW5hdGluZyBmcm9tIE5BVU1FTiBvciBDb250cmlidXRvcnMgYXJlIG1vZGlmaWVkLCB5b3UgbXVzdAorY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcKK3RoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCitEaXNjbGFpbWVyOgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5BVU1FTiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTU0VECitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkFVTUVOCitPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCitHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IE5BVU1FTgorYW5kIENvbnRyaWJ1dG9ycy4gU3BlY2lmaWMgYXR0cmlidXRpb25zIGFyZSBsaXN0ZWQgaW4gdGhlCithY2NvbXBhbnlpbmcgY3JlZGl0cyBmaWxlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05va2lhIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Ob2tpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM3NzE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Ob2tpYQpAQCAtMCwwICsxLDQyMyBAQAorCitOb2tpYSBPcGVuIFNvdXJjZSBMaWNlbnNlIChOT0tPUworTGljZW5zZSkgVmVyc2lvbiAxLjBhCisgMS4gREVGSU5JVElPTlMuCisKKyJBZmZpbGlhdGVzIiBvZiBhIHBhcnR5IHNoYWxsIG1lYW4gYW4gZW50aXR5CisKK2EpIHdoaWNoIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY29udHJvbGxpbmcgc3VjaCBwYXJ0eTsKKworYikgd2hpY2ggaXMgdW5kZXIgdGhlIHNhbWUgZGlyZWN0IG9yIGluZGlyZWN0IG93bmVyc2hpcCBvciBjb250cm9sCithcyBzdWNoIHBhcnR5OyBvcgorCitjKSB3aGljaCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgc3VjaCBwYXJ0eS4KKworRm9yIHRoZXNlIHB1cnBvc2VzLCBhbiBlbnRpdHkgc2hhbGwgYmUgdHJlYXRlZCBhcyBiZWluZyBjb250cm9sbGVkCitieSBhbm90aGVyIGlmIHRoYXQgb3RoZXIgZW50aXR5IGhhcyBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCit2b3RlcyBpbiBzdWNoIGVudGl0eSwgaXMgYWJsZSB0byBkaXJlY3QgaXRzIGFmZmFpcnMgYW5kL29yIHRvIGNvbnRyb2wgdGhlCitjb21wb3NpdGlvbiBvZiBpdHMgYm9hcmQgb2YgZGlyZWN0b3JzIG9yIGVxdWl2YWxlbnQgYm9keS4KKworIkNvbW1lcmNpYWwgVXNlIiBzaGFsbCBtZWFuIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nCit0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworYGBDb250cmlidXRvcmBgIHNoYWxsIG1lYW4gZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzCit0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworYGBDb250cmlidXRvciBWZXJzaW9uYGAgc2hhbGwgbWVhbiBpbiBjYXNlIG9mIGFueSBDb250cmlidXRvcgordGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEKK0NvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgCithbmQgaW4gY2FzZSBvZiBOb2tpYSBpbiBhZGRpdGlvbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgaW4gYW55IGZvcm0sIGluY2x1ZGluZwordGhlIGZvcm0gYXMgRXhjZXV0YWJsZS4KKworYGBDb3ZlcmVkIFNvZnR3YXJlYGAgc2hhbGwgbWVhbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucworb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaAorY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworYGBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21gYCBzaGFsbCBtZWFuIGEgbWVjaGFuaXNtCitnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEuCisKK2BgRXhlY3V0YWJsZWBgIHNoYWxsIG1lYW4gQ292ZXJlZCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlcgordGhhbiBTb3VyY2UgQ29kZS4KKworYGBOb2tpYWBgIHNoYWxsIG1lYW4gTm9raWEgQ29ycG9yYXRpb24gYW5kIGl0cyBBZmZpbGlhdGVzLgorCitgYExhcmdlciBXb3JrYGAgc2hhbGwgbWVhbiBhIHdvcmssIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgU29mdHdhcmUKK29yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCitgYExpY2Vuc2VgYCBzaGFsbCBtZWFuIHRoaXMgZG9jdW1lbnQuCisKKyJMaWNlbnNhYmxlIiBzaGFsbCBtZWFuIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCitleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5CithY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKK2BgTW9kaWZpY2F0aW9uc2BgIHNoYWxsIG1lYW4gYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20KK3RoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgU29mdHdhcmUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsCithIE1vZGlmaWNhdGlvbiBpczoKKworYSkgQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nCitPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitiKSBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IKK3ByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK2BgT3JpZ2luYWwgU29mdHdhcmVgYCBzaGFsbCBtZWFuIHRoZSBTb3VyY2UgQ29kZSBvZiBjb21wdXRlcgorc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieQorRXhoaWJpdCBBIGFzIE9yaWdpbmFsIFNvZnR3YXJlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyCit0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBTb2Z0d2FyZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKyJQYXRlbnQgQ2xhaW1zIiBzaGFsbCBtZWFuIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZAorb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZAorYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKK2BgU291cmNlIENvZGVgYCBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZAorU29mdHdhcmUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsCitwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwKK2NvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBhbm90aGVyIHdlbGwga25vd24sCithdmFpbGFibGUgQ292ZXJlZCBTb2Z0d2FyZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZQorY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbgorb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworIllvdWBgIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsCitlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLAordGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4KK0ZvciBsZWdhbCBlbnRpdGllcywgIllvdWBgIGluY2x1ZGVzIEFmZmlsaWF0ZXMgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNPVVJDRSBDT0RFIExJQ0VOU0UuCisKKzIuMSBOb2tpYSBHcmFudC4KKworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBOb2tpYSBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IGNsYWltczoKKworYSkgdW5kZXIgY29weXJpZ2h0cyBMaWNlbnNhYmxlIGJ5IE5va2lhIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMKK3RoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOworCitiKSBhbmQgdW5kZXIgUGF0ZW50cyBDbGFpbXMgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nCitvciBzZWxsaW5nIG9mIE9yaWdpbmFsIFNvZnR3YXJlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsCithbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yCitwb3J0aW9ucyB0aGVyZW9mKS4KKworYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUKK29uIHRoZSBkYXRlIE5va2lhIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLgorCitkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6CisxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgU29mdHdhcmU7IDIpIHNlcGFyYXRlIGZyb20KK3RoZSBPcmlnaW5hbCBTb2Z0d2FyZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uCitvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUKK3dpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworMi4yIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworYSkgdW5kZXIgY29weXJpZ2h0cyBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5CitzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aAorb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBTb2Z0d2FyZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOworYW5kCisKK2IpIHVuZGVyIFBhdGVudCBDbGFpbXMgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLAorb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yCitpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwKK3RvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlCitvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQKKzIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvcgorVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKK2MpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUKK29uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCitkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6CisxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOworMikgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OgoraSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24KK29mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcworcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcworaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yLgorCiszLiBESVNUUklCVVRJT04gT0JMSUdBVElPTlMuCisKKzMuMSBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkCitieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLgorVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBTb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlcgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZAordW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeQorY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkKK3Rlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZQordmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdQorbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkCitpbiBTZWN0aW9uIDMuNS4KKworMy4yIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUKK21hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIKK29uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24KK2F2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sCittdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdAoraW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudAordmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2gKK3JlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24KK3JlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkCitieSBhIHRoaXJkIHBhcnR5LgorCiszLjMgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgU29mdHdhcmUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbgorYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgU29mdHdhcmUKK2FuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0Cit0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgU29mdHdhcmUKK3Byb3ZpZGVkIGJ5IE5va2lhIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgTm9raWEgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwKK2FuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uCitpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKKzMuNCAgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KKworSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IKK3VuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZQorU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUxgYCB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZAordGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cKK3dob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uCitpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5Cittb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlcgorYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMKK29yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UKK2FuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkKK3RvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbgordGhlIExFR0FMIGZpbGUuCisKKyhjKSBSZXByZXNlbnRhdGlvbnMuCisKK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uCiszLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGFyZQorQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzCit0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41IFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUKK2ZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uCisoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvcgorc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIKK25hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28KK2R1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UKK2Rlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgU29mdHdhcmUuCitZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkKK29yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgU29mdHdhcmUuCitIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiBOb2tpYQorb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kCitZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBOb2tpYSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkKK2luY3VycmVkIGJ5IE5va2lhIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42IERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKK3JlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIFNvZnR3YXJlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUKK0NvdmVyZWQgU29mdHdhcmUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZworYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbgorMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUKK3ZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYAorcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUKK3ZlcnNpb24gb2YgQ292ZXJlZCBTb2Z0d2FyZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyCitjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdAorWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZQorZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMKK3JpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4KK0lmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UKK211c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZQorYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgTm9raWEgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlCit0byBpbmRlbW5pZnkgTm9raWEgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5CitOb2tpYSBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43IExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG90aGVyCitzb2Z0d2FyZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cworb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCis0LiBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGR1ZSB0byBzdGF0dXRlLAoranVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMKK2FuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTAorZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucworb2YgdGhlIFNvdXJjZSBDb2RlLgorCitFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbgorbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUKK3RvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCBOb2tpYSBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZQoraW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgU29mdHdhcmUuCisKKzYuIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLgorCisKKzYuMSBOZXcgVmVyc2lvbnMuCisKK05va2lhIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUKK3RvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitPbmNlIENvdmVyZWQgU29mdHdhcmUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uCitvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0Cit2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zCitvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBOb2tpYS4gTm8gb25lIG90aGVyCit0aGFuIE5va2lhIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgU29mdHdhcmUKK2NyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVNgYCBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsCitGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWQorQ09WRVJFRCBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIE5PS0lBLCBJVFMgTElDRU5TT1JTCitPUiBBRkZJTElBVEVTIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkKK1NFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiAgV0FSUkFOVFkgQ09OU1RJVFVURVMKK0FOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIFNPRlRXQVJFIElTIEFVVEhPUklaRUQKK0hFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKworOC4xIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CitpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4KKzMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQKK3RoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOC4yIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0KKyhleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgTm9raWEgb3IgYSBDb250cmlidXRvciAoTm9raWEKK29yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKQorYWxsZWdpbmcgdGhhdDoKKworYSkgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMKK2FueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UKK3VuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZQorZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyCityZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYQorbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0Cit0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzCitvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkKK2FncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwKK3RoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQKK2Fib3ZlLgorCitiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuCithbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZAorMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwKK2Rpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzguMyBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nCit0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzCithbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KQorcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlCit2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvcgorMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueQorcGF5bWVudCBvciBsaWNlbnNlLgorCis4LjQgSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbAorZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoCitoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvCit0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgTk9LSUEsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwKK09SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIFNPRlRXQVJFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0gKK1BBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwKK0RBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sCitPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwKK0hBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04KK09GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTCitTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OCitPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgQlVUIE1BWSBBTExPVyBMSUFCSUxJVFkgVE8gQkUgTElNSVRFRDsKK0lOIFNVQ0ggQ0FTRVMsIEEgUEFSVFlgcywgSVRTIEVNUExPWUVFUywgTElDRU5TT1JTIE9SIEFGRklMSUFURVNgIExJQUJJTElUWQorU0hBTEwgQkUgTElNSVRFRCBUTyBVLlMuICQ1MC4gTm90aGluZyBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIHByZWp1ZGljZQordGhlIHN0YXR1dG9yeSByaWdodHMgb2YgYW55IHBhcnR5IGRlYWxpbmcgYXMgYSBjb25zdW1lci4KKworMTAuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlcgoraGVyZW9mLiBBbGwgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlcgordGhpcyBMaWNlbnNlIGFyZSByZXNlcnZlZC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgZ3JhbnQgWW91IGFueQorcmlnaHRzIHRvIHVzZSBhbnkgb2YgdGhlIHRyYWRlbWFya3Mgb2YgTm9raWEgb3IgYW55IG9mIGl0cyBBZmZpbGlhdGVzLAorZXZlbiBpZiBhbnkgb2Ygc3VjaCB0cmFkZW1hcmtzIGFyZSBpbmNsdWRlZCBpbiBhbnkgcGFydCBvZiBDb3ZlcmVkIFNvZnR3YXJlCithbmQvb3IgZG9jdW1lbnRhdGlvbiB0byBpdC4KKworVGhpcyBMaWNlbnNlIGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIEZpbmxhbmQgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcKK3Byb3Zpc2lvbnMuIEFsbCBkaXNwdXRlcyBhcmlzaW5nIGZyb20gb3IgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwKK2JlIHNldHRsZWQgYnkgYSBzaW5nbGUgYXJiaXRyYXRvciBhcHBvaW50ZWQgYnkgdGhlIENlbnRyYWwgQ2hhbWJlciBvZiBDb21tZXJjZQorb2YgRmlubGFuZC4gVGhlIGFyYml0cmF0aW9uIHByb2NlZHVyZSBzaGFsbCB0YWtlIHBsYWNlIGluIEhlbHNpbmtpLCBGaW5sYW5kCitpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4gSWYgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdm9pZCBhbmQKK3VuZW5mb3JjZWFibGUsIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIGJhbGFuY2Ugb2YgdGhlIEFncmVlbWVudCwKK3doaWNoIHNoYWxsIHJlbWFpbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUgYWNjb3JkaW5nIHRvIGl0cyB0ZXJtcy4KKworMTEuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gTm9raWEgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yCitjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbgorb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBOb2tpYSBhbmQgQ29udHJpYnV0b3JzCit0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbgoraXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKyAKKworRVhISUJJVCBBCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE5PS09TIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorTGljZW5zZS4KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUKK3RoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgU29mdHdhcmUgaXMKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK0NvcHlyaWdodCAmIzE2OTsgPHllYXI+IE5va2lhIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQVNJUyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzZGY3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0FTSVMKQEAgLTAsMCArMSwxMyBAQAorICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIERURCBhbmQKKyAgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMKKyAgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgIG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0CisgIGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKKyAgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKKyAgd2FycmFudHkuCisKKyAgSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCisgIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKKyAgYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCisgIHRoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09DTEMtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQ0xDLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzllM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQ0xDLTIuMApAQCAtMCwwICsxLDc4IEBACisKK09DTEMgUmVzZWFyY2ggUHVibGljIExpY2Vuc2UgMi4wCitUZXJtcyAmYW1wOyBDb25kaXRpb25zIE9mIFVzZQorTWF5LCAyMDAyCitDb3B5cmlnaHQgJiMxNjk7IDIwMDIuIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworUExFQVNFIFJFQUQgVEhJUyBET0NVTUVOVCBDQVJFRlVMTFkuIEJZIERPV05MT0FESU5HIE9SIFVTSU5HIFRIRSBDT0RFIEJBU0UgQU5EL09SIERPQ1VNRU5UQVRJT04gQUNDT01QQU5ZSU5HIFRISVMgTElDRU5TRSAoVEhFICJMaWNlbnNlIiksIFlPVSBBR1JFRSBUTyBUSEUgRk9MTE9XSU5HIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRS4KKworU2VjdGlvbiAxLiBZb3VyIFJpZ2h0cworCitTdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlIE9DTEMgT2ZmaWNlIG9mIFJlc2VhcmNoICh0aGUgIk9yaWdpbmFsIENvbnRyaWJ1dG9yIikgYW5kIGVhY2ggc3Vic2VxdWVudCBjb250cmlidXRvciAoY29sbGVjdGl2ZWx5IHdpdGggdGhlIE9yaWdpbmFsIENvbnRyaWJ1dG9yLCB0aGUgIkNvbnRyaWJ1dG9ycyIpIGhlcmVieSBncmFudCB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIG5vLWNoYXJnZSwgdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gZXhlY3V0ZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBhbmQgZGlzdHJpYnV0ZSAoaW50ZXJuYWxseSBhbmQgZXh0ZXJuYWxseSksIGZvciBjb21tZXJjaWFsIGFuZCBub25jb21tZXJjaWFsIHB1cnBvc2VzLCB0aGUgb3JpZ2luYWwgY29kZSBjb250cmlidXRlZCBieSBPcmlnaW5hbCBDb250cmlidXRvciBhbmQgYWxsIE1vZGlmaWNhdGlvbnMgKGNvbGxlY3RpdmVseSBjYWxsZWQgdGhlICJQcm9ncmFtIikuCisKK1NlY3Rpb24gMi4gRGVmaW5pdGlvbnMKKworQSAiTW9kaWZpY2F0aW9uIiB0byB0aGUgUHJvZ3JhbSBpcyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYW55IGZpbGUgb2YgdGhlIFByb2dyYW0gYW5kIGFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBQcm9ncmFtLiBJZiB5b3UgbWFrZSBhIE1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleHRlcm5hbGx5IHlvdSBhcmUgYSAiQ29udHJpYnV0b3IuIiBUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIG11c3QgYmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBpbmNsdWRpbmcgdGhvc2UgaW4gU2VjdGlvbiAzIGJlbG93LgorCitBICJDb21iaW5lZCBXb3JrIiByZXN1bHRzIGZyb20gY29tYmluaW5nIGFuZCBpbnRlZ3JhdGluZyBhbGwgb3IgcGFydHMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBjb2RlLiBBIENvbWJpbmVkIFdvcmsgbWF5IGJlIHRob3VnaHQgb2YgYXMgaGF2aW5nIG11bHRpcGxlIHBhcmVudHMgb3IgYmVpbmcgcmVzdWx0IG9mIG11bHRpcGxlIGxpbmVzIG9mIGNvZGUgZGV2ZWxvcG1lbnQuCisKK1NlY3Rpb24gMy4gRGlzdHJpYnV0aW9uIExpY2Vuc2luZyBUZXJtcworCitBLiBHZW5lcmFsIFJlcXVpcmVtZW50cworRXhjZXB0IGFzIG5lY2Vzc2FyeSB0byByZWNvZ25pemUgdGhpcmQtcGFydHkgcmlnaHRzIG9yIHRoaXJkLXBhcnR5IHJlc3RyaWN0aW9uIChzZWUgYmVsb3cpLCBhIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhbnkgb2YgdGhlIGZvcm1zIGxpc3RlZCBiZWxvdyBtdXN0IG5vdCBwdXQgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnQmIzgyMTc7cyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorCitBcyBhIENvbnRyaWJ1dG9yLCB5b3UgcmVwcmVzZW50IHRoYXQgeW91ciBNb2RpZmljYXRpb24ocykgYXJlIHlvdXIgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kLCB0byB0aGUgYmVzdCBvZiB5b3VyIGtub3dsZWRnZSwgbm8gdGhpcmQgcGFydHkgaGFzIGFueSBjbGFpbSAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zKSByZWxhdGluZyB0byB5b3VyIE1vZGlmaWNhdGlvbihzKS4gWW91IHJlcHJlc2VudCB0aGF0IGVhY2ggb2YgeW91ciBNb2RpZmljYXRpb25zIGluY2x1ZGVzIGNvbXBsZXRlIGRldGFpbHMgb2YgYW55IHRoaXJkLXBhcnR5IHJpZ2h0IG9yIG90aGVyIHRoaXJkLXBhcnR5IHJlc3RyaWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFydCBvZiB5b3VyIE1vZGlmaWNhdGlvbiAoaW5jbHVkaW5nIGEgY29weSBvZiBhbnkgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudCkuCisKK1RoZSBQcm9ncmFtIG11c3QgYmUgZGlzdHJpYnV0ZWQgd2l0aG91dCBjaGFyZ2UgYmV5b25kIHRoZSBjb3N0cyBvZiBwaHlzaWNhbGx5IHRyYW5zZmVycmluZyB0aGUgZmlsZXMgdG8gdGhlIHJlY2lwaWVudC4KKworVGhpcyBXYXJyYW50eSBEaXNjbGFpbWVyL0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IG11c3QgYmUgcHJvbWluZW50bHkgZGlzcGxheWVkIHdpdGggZXZlcnkgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGFueSBmb3JtOgorCitZT1UgQUdSRUUgVEhBVCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCAoRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCkuIEFDQ09SRElOR0xZLCBPQ0xDIE1BS0VTIE5PIFdBUlJBTlRJRVMsIFJFUFJFU0VOVEFUSU9OUyBPUiBHVUFSQU5URUVTLCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIFJFUFJFU0VOVEFUSU9OUyBPUiBHVUFSQU5URUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFTIFRPOiAoQSkgVEhFIEZVTkNUSU9OQUxJVFkgT1IgTk9OSU5GUklOR0VNRU5UIE9GIFBST0dSQU0sIEFOWSBNT0RJRklDQVRJT04sIEEgQ09NQklORUQgV09SSyBPUiBBTiBBR0dSRUdBVEUgV09SSzsgT1IgKEIpIFRIRSBSRVNVTFRTIE9GIEFOWSBQUk9KRUNUIFVOREVSVEFLRU4gVVNJTkcgVEhFIFBST0dSQU0sIEFOWSBNT0RJRklDQVRJT04sIEEgQ09NQklORUQgV09SSyBPUiBBTiBBR0dSRUdBVEUgV09SSy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIENPTlNFUVVFTlRJQUwgT1IgQU5ZIE9USEVSIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRIRSBQUk9HUkFNLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gWU9VIEhFUkVCWSBXQUlWRSBBTlkgQ0xBSU1TIEZPUiBEQU1BR0VTIE9GIEFOWSBLSU5EIEFHQUlOU1QgQ09OVFJJQlVUT1JTIFdISUNIIE1BWSBSRVNVTFQgRlJPTSBZT1VSIFVTRSBPRiBUSEUgUFJPR1JBTS4KKworQi4gUmVxdWlyZW1lbnRzIGZvciBhIERpc3RyaWJ1dGlvbiBvZiBNb2RpZmlhYmxlIENvZGUKK0lmIHlvdSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGEgZm9ybSB0byB3aGljaCB0aGUgcmVjaXBpZW50IGNhbiBtYWtlIE1vZGlmaWNhdGlvbnMgKGUuZy4gc291cmNlIGNvZGUpLCB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFwcGx5IHRvIHVzZSBieSByZWNpcGllbnQuIEluIGFkZGl0aW9uLCBlYWNoIHNvdXJjZSBhbmQgZGF0YSBmaWxlIG9mIHRoZSBQcm9ncmFtIGFuZCBhbnkgTW9kaWZpY2F0aW9uIHlvdSBkaXN0cmlidXRlIG11c3QgY29udGFpbiB0aGUgZm9sbG93aW5nIG5vdGljZToKKworIkNvcHlyaWdodCAoYykgMjAwMC0gKGluc2VydCB0aGVuIGN1cnJlbnQgeWVhcikgT0NMQyBPbmxpbmUgQ29tcHV0ZXIgTGlicmFyeSBDZW50ZXIsIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSwgYXMgdXBkYXRlZCBmcm9tIHRpbWUgdG8gdGltZSBieSB0aGUgT0NMQyBPZmZpY2Ugb2YgUmVzZWFyY2gsIGFyZSBzdWJqZWN0IHRvIE9DTEMgUmVzZWFyY2ggUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY3VycmVudCBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly9wdXJsLm9jbGMub3JnL29jbGMvcmVzZWFyY2gvT1JQTC8uIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgT0NMQyBSZXNlYXJjaC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gT0NMQyBSZXNlYXJjaCwgcGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9jbGMub3JnL3Jlc2VhcmNoLy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX18gX19fX19fX19fX19fX19fX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIENvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4iCisKK0MuIFJlcXVpcmVtZW50cyBmb3IgYSBEaXN0cmlidXRpb24gb2YgTm9uLW1vZGlmaWFibGUgQ29kZQorSWYgeW91IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYSBmb3JtIHRvIHdoaWNoIHRoZSByZWNpcGllbnQgY2Fubm90IG1ha2UgTW9kaWZpY2F0aW9ucyAoZS5nLiBvYmplY3QgY29kZSksIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYXBwbHkgdG8gdXNlIGJ5IHJlY2lwaWVudCBhbmQgeW91IG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCBpbiBhcHByb3ByaWF0ZSBhbmQgY29uc3BpY3VvdXMgbG9jYXRpb25zOgorCisiQ29weXJpZ2h0IChjKSAyMDAwLSAoaW5zZXJ0IHRoZW4gY3VycmVudCB5ZWFyKSBPQ0xDIE9ubGluZSBDb21wdXRlciBMaWJyYXJ5IENlbnRlciwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKworSW4gYWRkaXRpb24sIHRoZSBzb3VyY2UgY29kZSBtdXN0IGJlIGluY2x1ZGVkIHdpdGggdGhlIG9iamVjdCBjb2RlIGRpc3RyaWJ1dGlvbiBvciB0aGUgZGlzdHJpYnV0b3IgbXVzdCBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgcmVjaXBpZW50IHVwb24gcmVxdWVzdC4KKworRC4gUmVxdWlyZW1lbnRzIGZvciBhIENvbWJpbmVkIFdvcmsgRGlzdHJpYnV0aW9uCitEaXN0cmlidXRpb25zIG9mIENvbWJpbmVkIFdvcmtzIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYW5kIG11c3QgYmUgbWFkZSBhdCBubyBjaGFyZ2UgdG8gdGhlIHJlY2lwaWVudCBiZXlvbmQgdGhlIGNvc3RzIG9mIHBoeXNpY2FsbHkgdHJhbnNmZXJyaW5nIHRoZSBmaWxlcyB0byByZWNpcGllbnQuCisKK0EgQ29tYmluZWQgV29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgZWl0aGVyIG1vZGlmaWFibGUgb3Igbm9uLW1vZGlmaWFibGUgY29kZS4gVGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuQiBvciAzLkMgYWJvdmUgKGFzIGFwcHJvcHJpYXRlKSBhcHBseSB0byBzdWNoIGRpc3RyaWJ1dGlvbnMuCisKK0FuICJBZ2dyZWdhdGUgV29yayIgaXMgd2hlbiB0aGUgUHJvZ3JhbSBleGlzdHMsIHdpdGhvdXQgaW50ZWdyYXRpb24sIHdpdGggb3RoZXIgcHJvZ3JhbXMgb24gYSBzdG9yYWdlIG1lZGl1bS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIHBvcnRpb25zIG9mIGFuIEFnZ3JlZ2F0ZSBXb3JrIHdoaWNoIGFyZSBub3QgY292ZXJlZCBieSB0aGUgZGVmaW5pdGlvbiBvZiAiUHJvZ3JhbSIgcHJvdmlkZWQgaW4gdGhpcyBMaWNlbnNlLiBZb3UgYXJlIG5vdCBmb3JiaWRkZW4gZnJvbSBzZWxsaW5nIGFuIEFnZ3JlZ2F0ZSBXb3JrLiBIb3dldmVyLCB0aGUgUHJvZ3JhbSBjb250YWluZWQgaW4gYW4gQWdncmVnYXRlIFdvcmsgaXMgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIEFsc28sIHNob3VsZCB0aGUgUHJvZ3JhbSBiZSBleHRyYWN0ZWQgZnJvbSBhbiBBZ2dyZWdhdGUgV29yaywgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHVzZSBvZiB0aGUgUHJvZ3JhbSBhcGFydCBmcm9tIHRoZSBBZ2dyZWdhdGUgV29yay4KKworU2VjdGlvbiA0LiBMaWNlbnNlIEdyYW50CisKK0ZvciBwdXJwb3NlcyBvZiBwZXJtaXR0aW5nIHVzZSBvZiB5b3VyIE1vZGlmaWNhdGlvbnMgYnkgT0NMQyBhbmQgb3RoZXIgbGljZW5zZWVzIGhlcmV1bmRlciwgeW91IGhlcmVieSBncmFudCB0byBPQ0xDIGFuZCBzdWNoIG90aGVyIGxpY2Vuc2VlcyB0aGUgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHRyYW5zZmVyYWJsZSwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBleGVjdXRlLCBjb3B5LCBhbHRlciwgZGVsZXRlLCBtb2RpZnksIGFkYXB0LCBjaGFuZ2UsIHJldmlzZSwgZW5oYW5jZSwgZGV2ZWxvcCwgcHVibGljbHkgZGlzcGxheSwgZGlzdHJpYnV0ZSAoaW50ZXJuYWxseSBhbmQgZXh0ZXJuYWxseSkgYW5kL29yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHlvdXIgTW9kaWZpY2F0aW9ucyAoYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZikgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZXNlIFRlcm1zLiBUaGlzIFNlY3Rpb24gNCBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBmb3IgYW55IHJlYXNvbi4KKworU2VjdGlvbiA1LiBUZXJtaW5hdGlvbiBvZiBSaWdodHMKKworVGhpcyBub24tZXhjbHVzaXZlIGxpY2Vuc2UgKHdpdGggcmVzcGVjdCB0byB0aGUgZ3JhbnQgZnJvbSBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IpIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlcyBmb3IgYW55IGVudGl0eSB0aGF0IGluaXRpYXRlcyBsZWdhbCBhY3Rpb24gZm9yIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQgKHdpdGggcmVzcGVjdCB0byB0aGUgUHJvZ3JhbSkgYWdhaW5zdCBzdWNoIENvbnRyaWJ1dG9yIGFzIG9mIHRoZSBpbml0aWF0aW9uIG9mIHN1Y2ggYWN0aW9uLgorCitJZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGlzIExpY2Vuc2UsIHlvdXIgcmlnaHRzIChidXQgbm90IHlvdXIgb2JsaWdhdGlvbnMpIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1bmxlc3MgeW91IGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIG5vbmNvbXBsaWFuY2UuIEFsbCBzdWJsaWNlbnNlcyBncmFudGVkIGJ5IHlvdSB3aGljaCBwcmVleGlzdCBzdWNoIHRlcm1pbmF0aW9uIGFuZCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIHN1Y2ggdGVybWluYXRpb24uCisKK1NlY3Rpb24gNi4gT3RoZXIgVGVybXMKKworRXhjZXB0IGZvciB0aGUgY29weXJpZ2h0IG5vdGljZXMgcmVxdWlyZWQgYWJvdmUsIHlvdSBtYXkgbm90IHVzZSBhbnkgdHJhZGVtYXJrIG9mIGFueSBvZiB0aGUgQ29udHJpYnV0b3JzIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgcmVsZXZhbnQgQ29udHJpYnV0b3IuIFlvdSBhZ3JlZSBub3QgdG8gcmVtb3ZlLCBhbHRlciBvciBvYnNjdXJlIGFueSBjb3B5cmlnaHQgb3Igb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIG5vdGljZSBjb250YWluZWQgaW4gdGhlIFByb2dyYW0uCisKK0FsbCB0cmFuc2ZlcnMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiBzaGFsbCBiZSBtYWRlIGluIGNvbXBsaWFuY2Ugd2l0aCBVLlMuIGltcG9ydC9leHBvcnQgcmVndWxhdGlvbnMgb3Igb3RoZXIgcmVzdHJpY3Rpb25zIG9mIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2UsIGFzIHdlbGwgYXMgb3RoZXIgc2ltaWxhciB0cmFkZSBvciBjb21tZXJjZSByZXN0cmljdGlvbnMgd2hpY2ggbWlnaHQgYXBwbHkuCisKK0FueSBwYXRlbnQgb2J0YWluZWQgYnkgYW55IHBhcnR5IGNvdmVyaW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YgbXVzdCBpbmNsdWRlIGEgcHJvdmlzaW9uIHByb3ZpZGluZyBmb3IgdGhlIGZyZWUsIHBlcnBldHVhbCBhbmQgdW5yZXN0cmljdGVkIGNvbW1lcmNpYWwgYW5kIG5vbmNvbW1lcmNpYWwgdXNlIGJ5IGFueSB0aGlyZCBwYXJ0eS4KKworSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBzZXR0bGVtZW50IHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQgb3IgYW55IG90aGVyIGNhdXNlIG9mIGFjdGlvbiwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgc3VjaCBjb25kaXRpb25zIGRvIG5vdCBleGN1c2UgeW91IGZyb20gY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIHNvIGFzIHRvIHNpbXVsdGFuZW91c2x5IHNhdGlzZnkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIHN1Y2ggb3RoZXIgY29uZGl0aW9ucywgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgeW91IGNvdWxkIG5vdCBzYXRpc2Z5IGJvdGggdGhlIHBhdGVudCBsaWNlbnNlIGFuZCB0aGlzIExpY2Vuc2UsIGFuZCB5b3Ugd291bGQgYmUgcmVxdWlyZWQgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgeW91IGxlYXJuIG9mIGEgdGhpcmQgcGFydHkgY2xhaW0gb3Igb3RoZXIgcmVzdHJpY3Rpb24gcmVsYXRpbmcgdG8gYSBQcm9ncmFtIHlvdSBoYXZlIGFscmVhZHkgZGlzdHJpYnV0ZWQgeW91IHNoYWxsIHByb21wdGx5IHJlZG8geW91ciBQcm9ncmFtIHRvIGFkZHJlc3MgdGhlIGlzc3VlIGFuZCB0YWtlIGFsbCByZWFzb25hYmxlIHN0ZXBzIHRvIGluZm9ybSB0aG9zZSB3aG8gbWF5IGhhdmUgcmVjZWl2ZWQgdGhlIFByb2dyYW0gYXQgaXNzdWUuIEFuIGV4YW1wbGUgb2YgYW4gYXBwcm9wcmlhdGUgcmVhc29uYWJsZSBzdGVwIHRvIGluZm9ybSB3b3VsZCBiZSBwb3N0aW5nIGFuIGFubm91bmNlbWVudCBvbiBhbiBhcHByb3ByaWF0ZSB3ZWIgYnVsbGV0aW4gYm9hcmQuCisKK1RoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSBhcmUgZGVlbWVkIHRvIGJlIHNldmVyYWJsZSwgYW5kIHRoZSBpbnZhbGlkaXR5IG9yIHVuZW5mb3JjZWFiaWxpdHkgb2YgYW55IHByb3Zpc2lvbiBzaGFsbCBub3QgYWZmZWN0IG9yIGltcGFpciB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgd2hpY2ggc2hhbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiBJbiBzdWJzdGl0dXRpb24gZm9yIGFueSBwcm92aXNpb24gaGVsZCB1bmxhd2Z1bCwgdGhlcmUgc2hhbGwgYmUgc3Vic3RpdHV0ZWQgYSBwcm92aXNpb24gb2Ygc2ltaWxhciBpbXBvcnQgcmVmbGVjdGluZyB0aGUgb3JpZ2luYWwgaW50ZW50IG9mIHRoZSBwYXJ0aWVzIGhlcmV0byB0byB0aGUgZXh0ZW50IHBlcm1pc3NpYmxlIHVuZGVyIGxhdy4KKworVGhlIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGZyb20gdGltZSB0byB0aW1lIG1heSBjaGFuZ2UgdGhpcyBMaWNlbnNlLCBhbmQgdGhlIGFtZW5kZWQgbGljZW5zZSB3aWxsIGFwcGx5IHRvIGFsbCBjb3BpZXMgb2YgdGhlIFByb2dyYW0gZG93bmxvYWRlZCBhZnRlciB0aGUgbmV3IGxpY2Vuc2UgaXMgcG9zdGVkLiBUaGlzIExpY2Vuc2UgZ3JhbnRzIG9ubHkgdGhlIHJpZ2h0cyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiBhbmQgcHJvdmlkZXMgeW91IHdpdGggbm8gaW1wbGllZCByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IuCisKK1RoaXMgTGljZW5zZSBpcyB0aGUgY29tcGxldGUgYW5kIGV4Y2x1c2l2ZSBzdGF0ZW1lbnQgb2YgdGhlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiBhbmQgbWF5IG5vdCBiZSBhbWVuZGVkIGV4Y2VwdCBieSB0aGUgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgT2hpbyBhbmQgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgd2l0aG91dCByZWdhcmQgdG8gcHJpbmNpcGxlcyBvZiBjb25mbGljdHMgb2YgbGF3LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09EYkwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRGJMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWYxNDRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRGJMLTEuMApAQCAtMCwwICsxLDU0MyBAQAorCisjIyBPREMgT3BlbiBEYXRhYmFzZSBMaWNlbnNlIChPRGJMKQorCisjIyMgUHJlYW1ibGUKKworVGhlIE9wZW4gRGF0YWJhc2UgTGljZW5zZSAoT0RiTCkgaXMgYSBsaWNlbnNlIGFncmVlbWVudCBpbnRlbmRlZCB0bworYWxsb3cgdXNlcnMgdG8gZnJlZWx5IHNoYXJlLCBtb2RpZnksIGFuZCB1c2UgdGhpcyBEYXRhYmFzZSB3aGlsZQorbWFpbnRhaW5pbmcgdGhpcyBzYW1lIGZyZWVkb20gZm9yIG90aGVycy4gTWFueSBkYXRhYmFzZXMgYXJlIGNvdmVyZWQgYnkKK2NvcHlyaWdodCwgYW5kIHRoZXJlZm9yZSB0aGlzIGRvY3VtZW50IGxpY2Vuc2VzIHRoZXNlIHJpZ2h0cy4gU29tZQoranVyaXNkaWN0aW9ucywgbWFpbmx5IGluIHRoZSBFdXJvcGVhbiBVbmlvbiwgaGF2ZSBzcGVjaWZpYyByaWdodHMgdGhhdAorY292ZXIgZGF0YWJhc2VzLCBhbmQgc28gdGhlIE9EYkwgYWRkcmVzc2VzIHRoZXNlIHJpZ2h0cywgdG9vLiBGaW5hbGx5LAordGhlIE9EYkwgaXMgYWxzbyBhbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QgZm9yIHVzZXJzIG9mIHRoaXMgRGF0YWJhc2UgdG8KK2FjdCBpbiBjZXJ0YWluIHdheXMgaW4gcmV0dXJuIGZvciBhY2Nlc3NpbmcgdGhpcyBEYXRhYmFzZS4KKworRGF0YWJhc2VzIGNhbiBjb250YWluIGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGNvbnRlbnQgKGltYWdlcywKK2F1ZGlvdmlzdWFsIG1hdGVyaWFsLCBhbmQgc291bmRzIGFsbCBpbiB0aGUgc2FtZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUpLAorYW5kIHNvIHRoZSBPRGJMIG9ubHkgZ292ZXJucyB0aGUgcmlnaHRzIG92ZXIgdGhlIERhdGFiYXNlLCBhbmQgbm90IHRoZQorY29udGVudHMgb2YgdGhlIERhdGFiYXNlIGluZGl2aWR1YWxseS4gTGljZW5zb3JzIHNob3VsZCB1c2UgdGhlIE9EYkwKK3RvZ2V0aGVyIHdpdGggYW5vdGhlciBsaWNlbnNlIGZvciB0aGUgY29udGVudHMsIGlmIHRoZSBjb250ZW50cyBoYXZlIGEKK3NpbmdsZSBzZXQgb2YgcmlnaHRzIHRoYXQgdW5pZm9ybWx5IGNvdmVycyBhbGwgb2YgdGhlIGNvbnRlbnRzLiBJZiB0aGUKK2NvbnRlbnRzIGhhdmUgbXVsdGlwbGUgc2V0cyBvZiBkaWZmZXJlbnQgcmlnaHRzLCBMaWNlbnNvcnMgc2hvdWxkCitkZXNjcmliZSB3aGF0IHJpZ2h0cyBnb3Zlcm4gd2hhdCBjb250ZW50cyB0b2dldGhlciBpbiB0aGUgaW5kaXZpZHVhbAorcmVjb3JkIG9yIGluIHNvbWUgb3RoZXIgd2F5IHRoYXQgY2xhcmlmaWVzIHdoYXQgcmlnaHRzIGFwcGx5LiAKKworU29tZXRpbWVzIHRoZSBjb250ZW50cyBvZiBhIGRhdGFiYXNlLCBvciB0aGUgZGF0YWJhc2UgaXRzZWxmLCBjYW4gYmUKK2NvdmVyZWQgYnkgb3RoZXIgcmlnaHRzIG5vdCBhZGRyZXNzZWQgaGVyZSAoc3VjaCBhcyBwcml2YXRlIGNvbnRyYWN0cywKK3RyYWRlIG1hcmsgb3ZlciB0aGUgbmFtZSwgb3IgcHJpdmFjeSByaWdodHMgLyBkYXRhIHByb3RlY3Rpb24gcmlnaHRzCitvdmVyIGluZm9ybWF0aW9uIGluIHRoZSBjb250ZW50cyksIGFuZCBzbyB5b3UgYXJlIGFkdmlzZWQgdGhhdCB5b3UgbWF5CitoYXZlIHRvIGNvbnN1bHQgb3RoZXIgZG9jdW1lbnRzIG9yIGNsZWFyIG90aGVyIHJpZ2h0cyBiZWZvcmUgZG9pbmcKK2FjdGl2aXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorCistLS0tLS0KKworVGhlIExpY2Vuc29yIChhcyBkZWZpbmVkIGJlbG93KSAKKworYW5kIAorCitZb3UgKGFzIGRlZmluZWQgYmVsb3cpIAorCithZ3JlZSBhcyBmb2xsb3dzOiAKKworIyMjIDEuMCBEZWZpbml0aW9ucyBvZiBDYXBpdGFsaXNlZCBXb3JkcworCisiQ29sbGVjdGl2ZSBEYXRhYmFzZSIgJiM4MjExOyBNZWFucyB0aGlzIERhdGFiYXNlIGluIHVubW9kaWZpZWQgZm9ybSBhcyBwYXJ0CitvZiBhIGNvbGxlY3Rpb24gb2YgaW5kZXBlbmRlbnQgZGF0YWJhc2VzIGluIHRoZW1zZWx2ZXMgdGhhdCB0b2dldGhlciBhcmUKK2Fzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlCitEYXRhYmFzZSB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZS4KKworIkNvbnZleSIgJiM4MjExOyBBcyBhIHZlcmIsIG1lYW5zIFVzaW5nIHRoZSBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLAorb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlIGluIGFueSB3YXkgdGhhdCBlbmFibGVzCithIFBlcnNvbiB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzIG9mIHRoZSBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUKK0RhdGFiYXNlLiAgQ29udmV5aW5nIGRvZXMgbm90IGluY2x1ZGUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaCBhCitjb21wdXRlciBuZXR3b3JrLCBvciBjcmVhdGluZyBhbmQgVXNpbmcgYSBQcm9kdWNlZCBXb3JrLCB3aGVyZSBubwordHJhbnNmZXIgb2YgYSBjb3B5IG9mIHRoZSBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2Ugb2NjdXJzLgorIkNvbnRlbnRzIiAmIzgyMTE7IFRoZSBjb250ZW50cyBvZiB0aGlzIERhdGFiYXNlLCB3aGljaCBpbmNsdWRlcyB0aGUKK2luZm9ybWF0aW9uLCBpbmRlcGVuZGVudCB3b3Jrcywgb3Igb3RoZXIgbWF0ZXJpYWwgY29sbGVjdGVkIGludG8gdGhlCitEYXRhYmFzZS4gRm9yIGV4YW1wbGUsIHRoZSBjb250ZW50cyBvZiB0aGUgRGF0YWJhc2UgY291bGQgYmUgZmFjdHVhbAorZGF0YSBvciB3b3JrcyBzdWNoIGFzIGltYWdlcywgYXVkaW92aXN1YWwgbWF0ZXJpYWwsIHRleHQsIG9yIHNvdW5kcy4KKworIkRhdGFiYXNlIiAmIzgyMTE7IEEgY29sbGVjdGlvbiBvZiBtYXRlcmlhbCAodGhlIENvbnRlbnRzKSBhcnJhbmdlZCBpbiBhCitzeXN0ZW1hdGljIG9yIG1ldGhvZGljYWwgd2F5IGFuZCBpbmRpdmlkdWFsbHkgYWNjZXNzaWJsZSBieSBlbGVjdHJvbmljCitvciBvdGhlciBtZWFucyBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyJEYXRhYmFzZSBEaXJlY3RpdmUiICYjODIxMTsgTWVhbnMgRGlyZWN0aXZlIDk2LzkvRUMgb2YgdGhlIEV1cm9wZWFuCitQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbCBvZiAxMSBNYXJjaCAxOTk2IG9uIHRoZSBsZWdhbCBwcm90ZWN0aW9uCitvZiBkYXRhYmFzZXMsIGFzIGFtZW5kZWQgb3Igc3VjY2VlZGVkLgorCisiRGF0YWJhc2UgUmlnaHQiICYjODIxMTsgTWVhbnMgcmlnaHRzIHJlc3VsdGluZyBmcm9tIHRoZSBDaGFwdGVyIElJSSAoInN1aQorZ2VuZXJpcyIpIHJpZ2h0cyBpbiB0aGUgRGF0YWJhc2UgRGlyZWN0aXZlIChhcyBhbWVuZGVkIGFuZCBhcyB0cmFuc3Bvc2VkCitieSBtZW1iZXIgc3RhdGVzKSwgd2hpY2ggaW5jbHVkZXMgdGhlIEV4dHJhY3Rpb24gYW5kIFJlLXV0aWxpc2F0aW9uIG9mCit0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cywgYXMgd2VsbCBhcyBhbnkgc2ltaWxhcgorcmlnaHRzIGF2YWlsYWJsZSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIHVuZGVyIFNlY3Rpb24gMTAuNC4gCisKKyJEZXJpdmF0aXZlIERhdGFiYXNlIiAmIzgyMTE7IE1lYW5zIGEgZGF0YWJhc2UgYmFzZWQgdXBvbiB0aGUgRGF0YWJhc2UsIGFuZAoraW5jbHVkZXMgYW55IHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBhcnJhbmdlbWVudCwgbW9kaWZpY2F0aW9uLCBvciBhbnkKK290aGVyIGFsdGVyYXRpb24gb2YgdGhlIERhdGFiYXNlIG9yIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUKK0NvbnRlbnRzLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIEV4dHJhY3Rpbmcgb3IKK1JlLXV0aWxpc2luZyB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBpbiBhIG5ldworRGF0YWJhc2UuCisKKyJFeHRyYWN0aW9uIiAmIzgyMTE7IE1lYW5zIHRoZSBwZXJtYW5lbnQgb3IgdGVtcG9yYXJ5IHRyYW5zZmVyIG9mIGFsbCBvciBhCitTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyB0byBhbm90aGVyIG1lZGl1bSBieSBhbnkgbWVhbnMgb3IgaW4KK2FueSBmb3JtLgorCisiTGljZW5zZSIgJiM4MjExOyBNZWFucyB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50IGFuZCBpcyBib3RoIGEgbGljZW5zZSBvZiByaWdodHMKK3N1Y2ggYXMgY29weXJpZ2h0IGFuZCBEYXRhYmFzZSBSaWdodHMgYW5kIGFuIGFncmVlbWVudCBpbiBjb250cmFjdC4KKworIkxpY2Vuc29yIiAmIzgyMTE7IE1lYW5zIHRoZSBQZXJzb24gdGhhdCBvZmZlcnMgdGhlIERhdGFiYXNlIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLiAKKworIlBlcnNvbiIgJiM4MjExOyBNZWFucyBhIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIG9yIGEgYm9keSBvZiBwZXJzb25zCitjb3Jwb3JhdGUgb3IgaW5jb3Jwb3JhdGUuCisKKyJQcm9kdWNlZCBXb3JrIiAmIzgyMTE7ICBhIHdvcmsgKHN1Y2ggYXMgYW4gaW1hZ2UsIGF1ZGlvdmlzdWFsIG1hdGVyaWFsLCB0ZXh0LAorb3Igc291bmRzKSByZXN1bHRpbmcgZnJvbSB1c2luZyB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMgKHZpYSBhIHNlYXJjaCBvciBvdGhlciBxdWVyeSkgZnJvbSB0aGlzIERhdGFiYXNlLCBhIERlcml2YXRpdmUKK0RhdGFiYXNlLCBvciB0aGlzIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLiAgCisKKyJQdWJsaWNseSIgJiM4MjExOyBtZWFucyB0byBQZXJzb25zIG90aGVyIHRoYW4gWW91IG9yIHVuZGVyIFlvdXIgY29udHJvbCBieQorZWl0aGVyIG1vcmUgdGhhbiA1MCUgb3duZXJzaGlwIG9yIGJ5IHRoZSBwb3dlciB0byBkaXJlY3QgdGhlaXIKK2FjdGl2aXRpZXMgKHN1Y2ggYXMgY29udHJhY3Rpbmcgd2l0aCBhbiBpbmRlcGVuZGVudCBjb25zdWx0YW50KS4gCisKKyJSZS11dGlsaXNhdGlvbiIgJiM4MjExOyBtZWFucyBhbnkgZm9ybSBvZiBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgYWxsCitvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIGJ5IHRoZSBkaXN0cmlidXRpb24gb2YgY29waWVzLCBieQorcmVudGluZywgYnkgb25saW5lIG9yIG90aGVyIGZvcm1zIG9mIHRyYW5zbWlzc2lvbi4KKworIlN1YnN0YW50aWFsIiAmIzgyMTE7IE1lYW5zIHN1YnN0YW50aWFsIGluIHRlcm1zIG9mIHF1YW50aXR5IG9yIHF1YWxpdHkgb3IgYQorY29tYmluYXRpb24gb2YgYm90aC4gVGhlIHJlcGVhdGVkIGFuZCBzeXN0ZW1hdGljIEV4dHJhY3Rpb24gb3IKK1JlLXV0aWxpc2F0aW9uIG9mIGluc3Vic3RhbnRpYWwgcGFydHMgb2YgdGhlIENvbnRlbnRzIG1heSBhbW91bnQgdG8gdGhlCitFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMuCisKKyJVc2UiICYjODIxMTsgQXMgYSB2ZXJiLCBtZWFucyBkb2luZyBhbnkgYWN0IHRoYXQgaXMgcmVzdHJpY3RlZCBieSBjb3B5cmlnaHQKK29yIERhdGFiYXNlIFJpZ2h0cyB3aGV0aGVyIGluIHRoZSBvcmlnaW5hbCBtZWRpdW0gb3IgYW55IG90aGVyOyBhbmQKK2luY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiBkaXN0cmlidXRpbmcsIGNvcHlpbmcsIHB1YmxpY2x5IHBlcmZvcm1pbmcsCitwdWJsaWNseSBkaXNwbGF5aW5nLCBhbmQgcHJlcGFyaW5nIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERhdGFiYXNlLCBhcword2VsbCBhcyBtb2RpZnlpbmcgdGhlIERhdGFiYXNlIGFzIG1heSBiZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gdXNlIGl0CitpbiBhIGRpZmZlcmVudCBtb2RlIG9yIGZvcm1hdC4gCisKKyJZb3UiICYjODIxMTsgTWVhbnMgYSBQZXJzb24gZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90CitwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZQorRGF0YWJhc2UsIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvCitleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisKK1dvcmRzIGluIHRoZSBzaW5ndWxhciBpbmNsdWRlIHRoZSBwbHVyYWwgYW5kIHZpY2UgdmVyc2EuCisKKyMjIyAyLjAgV2hhdCB0aGlzIExpY2Vuc2UgY292ZXJzCisKKzIuMS4gTGVnYWwgZWZmZWN0IG9mIHRoaXMgZG9jdW1lbnQuIFRoaXMgTGljZW5zZSBpczoKKworICBhLiBBIGxpY2Vuc2Ugb2YgYXBwbGljYWJsZSBjb3B5cmlnaHQgYW5kIG5laWdoYm91cmluZyByaWdodHM7CisKKyAgYi4gQSBsaWNlbnNlIG9mIHRoZSBEYXRhYmFzZSBSaWdodDsgYW5kCisKKyAgYy4gQW4gYWdyZWVtZW50IGluIGNvbnRyYWN0IGJldHdlZW4gWW91IGFuZCB0aGUgTGljZW5zb3IuCisKKzIuMiBMZWdhbCByaWdodHMgY292ZXJlZC4gVGhpcyBMaWNlbnNlIGNvdmVycyB0aGUgbGVnYWwgcmlnaHRzIGluIHRoZQorRGF0YWJhc2UsIGluY2x1ZGluZzoKKworICBhLiBDb3B5cmlnaHQuIEFueSBjb3B5cmlnaHQgb3IgbmVpZ2hib3VyaW5nIHJpZ2h0cyBpbiB0aGUgRGF0YWJhc2UuCisgIFRoZSBjb3B5cmlnaHQgbGljZW5zZWQgaW5jbHVkZXMgYW55IGluZGl2aWR1YWwgZWxlbWVudHMgb2YgdGhlCisgIERhdGFiYXNlLCBidXQgZG9lcyBub3QgY292ZXIgdGhlIGNvcHlyaWdodCBvdmVyIHRoZSBDb250ZW50cworICBpbmRlcGVuZGVudCBvZiB0aGlzIERhdGFiYXNlLiBTZWUgU2VjdGlvbiAyLjQgZm9yIGRldGFpbHMuIENvcHlyaWdodAorICBsYXcgdmFyaWVzIGJldHdlZW4ganVyaXNkaWN0aW9ucywgYnV0IGlzIGxpa2VseSB0byBjb3ZlcjogdGhlIERhdGFiYXNlCisgIG1vZGVsIG9yIHNjaGVtYSwgd2hpY2ggaXMgdGhlIHN0cnVjdHVyZSwgYXJyYW5nZW1lbnQsIGFuZCBvcmdhbmlzYXRpb24KKyAgb2YgdGhlIERhdGFiYXNlLCBhbmQgY2FuIGFsc28gaW5jbHVkZSB0aGUgRGF0YWJhc2UgdGFibGVzIGFuZCB0YWJsZQorICBpbmRleGVzOyB0aGUgZGF0YSBlbnRyeSBhbmQgb3V0cHV0IHNoZWV0czsgYW5kIHRoZSBGaWVsZCBuYW1lcyBvZgorICBDb250ZW50cyBzdG9yZWQgaW4gdGhlIERhdGFiYXNlOworCisgIGIuIERhdGFiYXNlIFJpZ2h0cy4gRGF0YWJhc2UgUmlnaHRzIG9ubHkgZXh0ZW5kIHRvIHRoZSBFeHRyYWN0aW9uIGFuZAorICBSZS11dGlsaXNhdGlvbiBvZiB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cy4KKyAgRGF0YWJhc2UgUmlnaHRzIGNhbiBhcHBseSBldmVuIHdoZW4gdGhlcmUgaXMgbm8gY29weXJpZ2h0IG92ZXIgdGhlCisgIERhdGFiYXNlLiBEYXRhYmFzZSBSaWdodHMgY2FuIGFsc28gYXBwbHkgd2hlbiB0aGUgQ29udGVudHMgYXJlIHJlbW92ZWQKKyAgZnJvbSB0aGUgRGF0YWJhc2UgYW5kIGFyZSBzZWxlY3RlZCBhbmQgYXJyYW5nZWQgaW4gYSB3YXkgdGhhdCB3b3VsZAorICBub3QgaW5mcmluZ2UgYW55IGFwcGxpY2FibGUgY29weXJpZ2h0OyBhbmQKKworICBjLiBDb250cmFjdC4gVGhpcyBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiBZb3UgYW5kIHRoZSBMaWNlbnNvciBmb3IKKyAgYWNjZXNzIHRvIHRoZSBEYXRhYmFzZS4gSW4gcmV0dXJuIHlvdSBhZ3JlZSB0byBjZXJ0YWluIGNvbmRpdGlvbnMgb2YKKyAgdXNlIG9uIHRoaXMgYWNjZXNzIGFzIG91dGxpbmVkIGluIHRoaXMgTGljZW5zZS4gCisKKzIuMyBSaWdodHMgbm90IGNvdmVyZWQuIAorCisgIGEuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBjb21wdXRlciBwcm9ncmFtcyB1c2VkIGluIHRoZSBtYWtpbmcKKyAgb3Igb3BlcmF0aW9uIG9mIHRoZSBEYXRhYmFzZTsgCisKKyAgYi4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGNvdmVyIGFueSBwYXRlbnRzIG92ZXIgdGhlIENvbnRlbnRzIG9yIHRoZQorICBEYXRhYmFzZTsgYW5kCisKKyAgYy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGNvdmVyIGFueSB0cmFkZW1hcmtzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgRGF0YWJhc2UuIAorCisyLjQgUmVsYXRpb25zaGlwIHRvIENvbnRlbnRzIGluIHRoZSBEYXRhYmFzZS4gVGhlIGluZGl2aWR1YWwgaXRlbXMgb2YKK3RoZSBDb250ZW50cyBjb250YWluZWQgaW4gdGhpcyBEYXRhYmFzZSBtYXkgYmUgY292ZXJlZCBieSBvdGhlciByaWdodHMsCitpbmNsdWRpbmcgY29weXJpZ2h0LCBwYXRlbnQsIGRhdGEgcHJvdGVjdGlvbiwgcHJpdmFjeSwgb3IgcGVyc29uYWxpdHkKK3JpZ2h0cywgYW5kIHRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgcmlnaHRzIChvdGhlciB0aGFuIERhdGFiYXNlCitSaWdodHMgb3IgaW4gY29udHJhY3QpIGluIGluZGl2aWR1YWwgQ29udGVudHMgY29udGFpbmVkIGluIHRoZSBEYXRhYmFzZS4KK0ZvciBleGFtcGxlLCBpZiB1c2VkIG9uIGEgRGF0YWJhc2Ugb2YgaW1hZ2VzICh0aGUgQ29udGVudHMpLCB0aGlzCitMaWNlbnNlIHdvdWxkIG5vdCBhcHBseSB0byBjb3B5cmlnaHQgb3ZlciBpbmRpdmlkdWFsIGltYWdlcywgd2hpY2ggY291bGQKK2hhdmUgdGhlaXIgb3duIHNlcGFyYXRlIGxpY2Vuc2VzLCBvciBvbmUgc2luZ2xlIGxpY2Vuc2UgY292ZXJpbmcgYWxsIG9mCit0aGUgcmlnaHRzIG92ZXIgdGhlIGltYWdlcy4gIAorCisjIyMgMy4wIFJpZ2h0cyBncmFudGVkCisKKzMuMSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBMaWNlbnNvcgorZ3JhbnRzIHRvIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCB0ZXJtaW5hYmxlIChidXQKK29ubHkgdW5kZXIgU2VjdGlvbiA5KSBsaWNlbnNlIHRvIFVzZSB0aGUgRGF0YWJhc2UgZm9yIHRoZSBkdXJhdGlvbiBvZgorYW55IGFwcGxpY2FibGUgY29weXJpZ2h0IGFuZCBEYXRhYmFzZSBSaWdodHMuIFRoZXNlIHJpZ2h0cyBleHBsaWNpdGx5CitpbmNsdWRlIGNvbW1lcmNpYWwgdXNlLCBhbmQgZG8gbm90IGV4Y2x1ZGUgYW55IGZpZWxkIG9mIGVuZGVhdm91ci4gVG8KK3RoZSBleHRlbnQgcG9zc2libGUgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiwgdGhlc2UgcmlnaHRzIG1heSBiZQorZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBjcmVhdGVkIGluIHRoZQorZnV0dXJlLiAKKworVGhlIHJpZ2h0cyBncmFudGVkIGNvdmVyLCBmb3IgZXhhbXBsZToKKworICBhLiBFeHRyYWN0aW9uIGFuZCBSZS11dGlsaXNhdGlvbiBvZiB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mCisgIHRoZSBDb250ZW50czsKKworICBiLiBDcmVhdGlvbiBvZiBEZXJpdmF0aXZlIERhdGFiYXNlczsKKworICBjLiBDcmVhdGlvbiBvZiBDb2xsZWN0aXZlIERhdGFiYXNlczsKKworICBkLiBDcmVhdGlvbiBvZiB0ZW1wb3Jhcnkgb3IgcGVybWFuZW50IHJlcHJvZHVjdGlvbnMgYnkgYW55IG1lYW5zIGFuZAorICBpbiBhbnkgZm9ybSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgaW5jbHVkaW5nIG9mIGFueSBEZXJpdmF0aXZlCisgIERhdGFiYXNlcyBvciBhcyBhIHBhcnQgb2YgQ29sbGVjdGl2ZSBEYXRhYmFzZXM7IGFuZAorCisgIGUuIERpc3RyaWJ1dGlvbiwgY29tbXVuaWNhdGlvbiwgZGlzcGxheSwgbGVuZGluZywgbWFraW5nIGF2YWlsYWJsZSwgb3IKKyAgcGVyZm9ybWFuY2UgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgYW5kIGluIGFueSBmb3JtLCBpbiB3aG9sZSBvciBpbgorICBwYXJ0LCBpbmNsdWRpbmcgb2YgYW55IERlcml2YXRpdmUgRGF0YWJhc2Ugb3IgYXMgYSBwYXJ0IG9mIENvbGxlY3RpdmUKKyAgRGF0YWJhc2VzLgorCiszLjIgQ29tcHVsc29yeSBsaWNlbnNlIHNjaGVtZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCisgIGEuIE5vbi13YWl2YWJsZSBjb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbgorICB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yCisgIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMKKyAgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91CisgIG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CisKKyAgYi4gV2FpdmFibGUgY29tcHVsc29yeSBsaWNlbnNlIHNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4KKyAgd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvcgorICBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUKKyAgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YKKyAgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLAorCisgIGMuIFZvbHVudGFyeSBsaWNlbnNlIHNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3QKKyAgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzCisgIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZworICBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cworICBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMy4zIFRoZSByaWdodCB0byByZWxlYXNlIHRoZSBEYXRhYmFzZSB1bmRlciBkaWZmZXJlbnQgdGVybXMsIG9yIHRvIHN0b3AKK2Rpc3RyaWJ1dGluZyBvciBtYWtpbmcgYXZhaWxhYmxlIHRoZSBEYXRhYmFzZSwgaXMgcmVzZXJ2ZWQuIE5vdGUgdGhhdAordGhpcyBEYXRhYmFzZSBtYXkgYmUgbXVsdGlwbGUtbGljZW5zZWQsIGFuZCBzbyBZb3UgbWF5IGhhdmUgdGhlIGNob2ljZQorb2YgdXNpbmcgYWx0ZXJuYXRpdmUgbGljZW5zZXMgZm9yIHRoaXMgRGF0YWJhc2UuIFN1YmplY3QgdG8gU2VjdGlvbgorMTAuNCwgYWxsIG90aGVyIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIHJlc2VydmVkLgorCisjIyMgNC4wIENvbmRpdGlvbnMgb2YgVXNlCisKKzQuMSBUaGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGFyZSBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvCitZb3VyIGNvbXBseWluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBvZiB1c2UuIFRoZXNlIGFyZSBpbXBvcnRhbnQKK2NvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgaWYgWW91IGZhaWwgdG8gZm9sbG93IHRoZW0sIFlvdSB3aWxsIGJlCitpbiBtYXRlcmlhbCBicmVhY2ggb2YgaXRzIHRlcm1zLgorCis0LjIgTm90aWNlcy4gSWYgWW91IFB1YmxpY2x5IENvbnZleSB0aGlzIERhdGFiYXNlLCBhbnkgRGVyaXZhdGl2ZQorRGF0YWJhc2UsIG9yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSwgdGhlbiBZb3UKK211c3Q6IAorCisgIGEuIERvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhbm90aGVyIGxpY2Vuc2UKKyAgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNC40OworCisgIGIuIEluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAob3IsIGFzIGFwcGxpY2FibGUsIGEgbGljZW5zZQorICBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0LjQpIG9yIGl0cyBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkKKyAgd2l0aCB0aGUgRGF0YWJhc2Ugb3IgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgaW5jbHVkaW5nIGJvdGggaW4gdGhlCisgIERhdGFiYXNlIG9yIERlcml2YXRpdmUgRGF0YWJhc2UgYW5kIGluIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uOyBhbmQKKworICBjLiBLZWVwIGludGFjdCBhbnkgY29weXJpZ2h0IG9yIERhdGFiYXNlIFJpZ2h0IG5vdGljZXMgYW5kIG5vdGljZXMKKyAgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UuCisKKyAgZC4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgcmVxdWlyZWQgbm90aWNlcyBpbiBhIHBhcnRpY3VsYXIKKyAgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBub3RpY2VzIGluIGEKKyAgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIHVzZXJzIHdvdWxkIGJlIGxpa2VseSB0bworICBsb29rIGZvciBpdC4KKworNC4zIE5vdGljZSBmb3IgdXNpbmcgb3V0cHV0IChDb250ZW50cykuIENyZWF0aW5nIGFuZCBVc2luZyBhIFByb2R1Y2VkCitXb3JrIGRvZXMgbm90IHJlcXVpcmUgdGhlIG5vdGljZSBpbiBTZWN0aW9uIDQuMi4gSG93ZXZlciwgaWYgeW91CitQdWJsaWNseSBVc2UgYSBQcm9kdWNlZCBXb3JrLCBZb3UgbXVzdCBpbmNsdWRlIGEgbm90aWNlIGFzc29jaWF0ZWQgd2l0aAordGhlIFByb2R1Y2VkIFdvcmsgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIG1ha2UgYW55IFBlcnNvbiB0aGF0IHVzZXMsCit2aWV3cywgYWNjZXNzZXMsIGludGVyYWN0cyB3aXRoLCBvciBpcyBvdGhlcndpc2UgZXhwb3NlZCB0byB0aGUgUHJvZHVjZWQKK1dvcmsgYXdhcmUgdGhhdCBDb250ZW50IHdhcyBvYnRhaW5lZCBmcm9tIHRoZSBEYXRhYmFzZSwgRGVyaXZhdGl2ZQorRGF0YWJhc2UsIG9yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSwgYW5kIHRoYXQgaXQKK2lzIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgYS4gRXhhbXBsZSBub3RpY2UuIFRoZSBmb2xsb3dpbmcgdGV4dCB3aWxsIHNhdGlzZnkgbm90aWNlIHVuZGVyCisgIFNlY3Rpb24gNC4zOgorCisgICAgICAgIENvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gREFUQUJBU0UgTkFNRSwgd2hpY2ggaXMgbWFkZSBhdmFpbGFibGUKKyAgICAgICAgaGVyZSB1bmRlciB0aGUgT3BlbiBEYXRhYmFzZSBMaWNlbnNlIChPRGJMKS4KKworREFUQUJBU0UgTkFNRSBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgRGF0YWJhc2UgYW5kIGEKK2h5cGVybGluayB0byB0aGUgVVJJIG9mIHRoZSBEYXRhYmFzZS4gIk9wZW4gRGF0YWJhc2UgTGljZW5zZSIgc2hvdWxkCitjb250YWluIGEgaHlwZXJsaW5rIHRvIHRoZSBVUkkgb2YgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlLiBJZgoraHlwZXJsaW5rcyBhcmUgbm90IHBvc3NpYmxlLCBZb3Ugc2hvdWxkIGluY2x1ZGUgdGhlIHBsYWluIHRleHQgb2YgdGhlCityZXF1aXJlZCBVUklgcyB3aXRoIHRoZSBhYm92ZSBub3RpY2UuCisgCis0LjQgU2hhcmUgYWxpa2UuIAorCisgIGEuIEFueSBEZXJpdmF0aXZlIERhdGFiYXNlIHRoYXQgWW91IFB1YmxpY2x5IFVzZSBtdXN0IGJlIG9ubHkgdW5kZXIKKyAgdGhlIHRlcm1zIG9mOiAKKworICAgIGkuIFRoaXMgTGljZW5zZTsKKworICAgIGlpLiBBIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoaXMKKyAgICAgIExpY2Vuc2U7IG9yCisKKyAgICBpaWkuIEEgY29tcGF0aWJsZSBsaWNlbnNlLiAKKworICBJZiBZb3UgbGljZW5zZSB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZSB1bmRlciBvbmUgb2YgdGhlIGxpY2Vuc2VzCisgIG1lbnRpb25lZCBpbiAoaWlpKSwgWW91IG11c3QgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZS4gCisKKyAgYi4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgdGhlCisgIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgaW50byBhIG5ldyBkYXRhYmFzZSBpcyBhCisgIERlcml2YXRpdmUgRGF0YWJhc2UgYW5kIG11c3QgY29tcGx5IHdpdGggU2VjdGlvbiA0LjQuIAorCisgIGMuIERlcml2YXRpdmUgRGF0YWJhc2VzIGFuZCBQcm9kdWNlZCBXb3Jrcy4gIEEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpcworICBQdWJsaWNseSBVc2VkIGFuZCBzbyBtdXN0IGNvbXBseSB3aXRoIFNlY3Rpb24gNC40LiBpZiBhIFByb2R1Y2VkIFdvcmsKKyAgY3JlYXRlZCBmcm9tIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlIGlzIFB1YmxpY2x5IFVzZWQuCisKKyAgZC4gU2hhcmUgQWxpa2UgYW5kIGFkZGl0aW9uYWwgQ29udGVudHMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LAorICBZb3UgbXVzdCBub3QgYWRkIENvbnRlbnRzIHRvIERlcml2YXRpdmUgRGF0YWJhc2VzIHVuZGVyIFNlY3Rpb24gNC40IGEKKyAgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gCisKKyAgZS4gQ29tcGF0aWJsZSBsaWNlbnNlcy4gTGljZW5zb3JzIG1heSBhdXRob3Jpc2UgYSBwcm94eSB0byBkZXRlcm1pbmUKKyAgY29tcGF0aWJsZSBsaWNlbnNlcyB1bmRlciBTZWN0aW9uIDQuNCBhIGlpaS4gSWYgdGhleSBkbyBzbywgdGhlCisgIGF1dGhvcmlzZWQgcHJveHlgcyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSBjb21wYXRpYmxlCisgIGxpY2Vuc2UgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgY29tcGF0aWJsZSBsaWNlbnNlLgorCisKKzQuNSBMaW1pdHMgb2YgU2hhcmUgQWxpa2UuICBUaGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gNC40IGRvIG5vdCBhcHBseQoraW4gdGhlIGZvbGxvd2luZzoKKworICBhLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gbGljZW5zZQorICBDb2xsZWN0aXZlIERhdGFiYXNlcyB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91IGluY29ycG9yYXRlIHRoaXMKKyAgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGluIHRoZSBjb2xsZWN0aW9uLCBidXQgdGhpcyBMaWNlbnNlCisgIHN0aWxsIGFwcGxpZXMgdG8gdGhpcyBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2UgYXMgYSBwYXJ0IG9mCisgIHRoZSBDb2xsZWN0aXZlIERhdGFiYXNlOyAKKworICBiLiBVc2luZyB0aGlzIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoaXMgRGF0YWJhc2UgYXMKKyAgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgdG8gY3JlYXRlIGEgUHJvZHVjZWQgV29yayBkb2VzIG5vdAorICBjcmVhdGUgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGZvciBwdXJwb3NlcyBvZiAgU2VjdGlvbiA0LjQ7IGFuZAorCisgIGMuIFVzZSBvZiBhIERlcml2YXRpdmUgRGF0YWJhc2UgaW50ZXJuYWxseSB3aXRoaW4gYW4gb3JnYW5pc2F0aW9uIGlzCisgIG5vdCB0byB0aGUgcHVibGljIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgZmFsbCB1bmRlciB0aGUgcmVxdWlyZW1lbnRzCisgIG9mIFNlY3Rpb24gNC40LgorCis0LjYgQWNjZXNzIHRvIERlcml2YXRpdmUgRGF0YWJhc2VzLiBJZiBZb3UgUHVibGljbHkgVXNlIGEgRGVyaXZhdGl2ZQorRGF0YWJhc2Ugb3IgYSBQcm9kdWNlZCBXb3JrIGZyb20gYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBZb3UgbXVzdCBhbHNvCitvZmZlciB0byByZWNpcGllbnRzIG9mIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlIG9yIFByb2R1Y2VkIFdvcmsgYSBjb3B5CitpbiBhIG1hY2hpbmUgcmVhZGFibGUgZm9ybSBvZjoKKworICBhLiBUaGUgZW50aXJlIERlcml2YXRpdmUgRGF0YWJhc2U7IG9yCisKKyAgYi4gQSBmaWxlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBhbHRlcmF0aW9ucyBtYWRlIHRvIHRoZSBEYXRhYmFzZSBvcgorICB0aGUgbWV0aG9kIG9mIG1ha2luZyB0aGUgYWx0ZXJhdGlvbnMgdG8gdGhlIERhdGFiYXNlIChzdWNoIGFzIGFuCisgIGFsZ29yaXRobSksIGluY2x1ZGluZyBhbnkgYWRkaXRpb25hbCBDb250ZW50cywgdGhhdCBtYWtlIHVwIGFsbCB0aGUKKyAgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgRGF0YWJhc2UgYW5kIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlLgorCitUaGUgRGVyaXZhdGl2ZSBEYXRhYmFzZSAodW5kZXIgYS4pIG9yIGFsdGVyYXRpb24gZmlsZSAodW5kZXIgYi4pIG11c3QgYmUKK2F2YWlsYWJsZSBhdCBubyBtb3JlIHRoYW4gYSByZWFzb25hYmxlIHByb2R1Y3Rpb24gY29zdCBmb3IgcGh5c2ljYWwKK2Rpc3RyaWJ1dGlvbnMgYW5kIGZyZWUgb2YgY2hhcmdlIGlmIGRpc3RyaWJ1dGVkIG92ZXIgdGhlIGludGVybmV0LgorCis0LjcgVGVjaG5vbG9naWNhbCBtZWFzdXJlcyBhbmQgYWRkaXRpb25hbCB0ZXJtcworCisgIGEuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhbGxvdyBZb3UgdG8gaW1wb3NlIChleGNlcHQgc3ViamVjdCB0bworICBTZWN0aW9uIDQuNyBiLikgIGFueSB0ZXJtcyBvciBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUKKyAgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZgorICB0aGUgQ29udGVudHMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBvciBhbnkKKyAgcmlnaHRzIGdyYW50ZWQgdW5kZXIgaXQsIG9yIGhhdmUgdGhlIGVmZmVjdCBvciBpbnRlbnQgb2YgcmVzdHJpY3RpbmcKKyAgdGhlIGFiaWxpdHkgb2YgYW55IHBlcnNvbiB0byBleGVyY2lzZSB0aG9zZSByaWdodHMuCisKKyAgYi4gUGFyYWxsZWwgZGlzdHJpYnV0aW9uLiBZb3UgbWF5IGltcG9zZSB0ZXJtcyBvciB0ZWNobm9sb2dpY2FsCisgIG1lYXN1cmVzIG9uIHRoZSBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgd2hvbGUgb3IgYQorICBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyAoYSAiUmVzdHJpY3RlZCBEYXRhYmFzZSIpIGluCisgIGNvbnRyYXZlbnRpb24gb2YgU2VjdGlvbiA0Ljc0IGEuIG9ubHkgaWYgWW91IGFsc28gbWFrZSBhIGNvcHkgb2YgdGhlCisgIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhdmFpbGFibGUgdG8gdGhlIHJlY2lwaWVudCBvZiB0aGUKKyAgUmVzdHJpY3RlZCBEYXRhYmFzZToKKworICAgIGkuIFRoYXQgaXMgYXZhaWxhYmxlIHdpdGhvdXQgYWRkaXRpb25hbCBmZWU7CisKKyAgICBpaS4gVGhhdCBpcyBhdmFpbGFibGUgaW4gYSBtZWRpdW0gdGhhdCBkb2VzIG5vdCBhbHRlciBvciByZXN0cmljdAorICAgIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIG9yIGFueSByaWdodHMgZ3JhbnRlZCB1bmRlciBpdCwgb3IgaGF2ZQorICAgIHRoZSBlZmZlY3Qgb3IgaW50ZW50IG9mIHJlc3RyaWN0aW5nIHRoZSBhYmlsaXR5IG9mIGFueSBwZXJzb24gdG8KKyAgICBleGVyY2lzZSB0aG9zZSByaWdodHMgKGFuICJVbnJlc3RyaWN0ZWQgRGF0YWJhc2UiKTsgYW5kCisKKyAgICBpaWkuIFRoZSBVbnJlc3RyaWN0ZWQgRGF0YWJhc2UgaXMgYXQgbGVhc3QgYXMgYWNjZXNzaWJsZSB0byB0aGUKKyAgICByZWNpcGllbnQgYXMgYSBwcmFjdGljYWwgbWF0dGVyIGFzIHRoZSBSZXN0cmljdGVkIERhdGFiYXNlLgorCisgIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IHBsYWNlIHRoaXMgRGF0YWJhc2Ugb3IgYQorICBEZXJpdmF0aXZlIERhdGFiYXNlIGluIGFuIGF1dGhlbnRpY2F0ZWQgZW52aXJvbm1lbnQsIGJlaGluZCBhCisgIHBhc3N3b3JkLCBvciB3aXRoaW4gYSBzaW1pbGFyIGFjY2VzcyBjb250cm9sIHNjaGVtZSBwcm92aWRlZCB0aGF0IFlvdQorICBkbyBub3QgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhbnkgcmlnaHRzCisgIGdyYW50ZWQgdW5kZXIgaXQgb3IgaGF2ZSB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZyB0aGUKKyAgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cy4gCisKKzQuOCBMaWNlbnNpbmcgb2Ygb3RoZXJzLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBEYXRhYmFzZS4gRWFjaCB0aW1lCitZb3UgY29tbXVuaWNhdGUgdGhlIERhdGFiYXNlLCB0aGUgd2hvbGUgb3IgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUKK0NvbnRlbnRzLCBvciBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSB0byBhbnlvbmUgZWxzZSBpbiBhbnkgd2F5LCB0aGUKK0xpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgRGF0YWJhc2Ugb24gdGhlIHNhbWUKK3Rlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yCitlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLCBidXQgWW91IG1heQorZW5mb3JjZSBhbnkgcmlnaHRzIHRoYXQgWW91IGhhdmUgb3ZlciBhIERlcml2YXRpdmUgRGF0YWJhc2UuIFlvdSBhcmUKK3NvbGVseSByZXNwb25zaWJsZSBmb3IgYW55IG1vZGlmaWNhdGlvbnMgb2YgYSBEZXJpdmF0aXZlIERhdGFiYXNlIG1hZGUKK2J5IFlvdSBvciBhbm90aGVyIFBlcnNvbiBhdCBZb3VyIGRpcmVjdGlvbi4gWW91IG1heSBub3QgaW1wb3NlIGFueQorZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZAordW5kZXIgdGhpcyBMaWNlbnNlLgorCisjIyMgNS4wIE1vcmFsIHJpZ2h0cworCis1LjEgTW9yYWwgcmlnaHRzLiBUaGlzIHNlY3Rpb24gY292ZXJzIG1vcmFsIHJpZ2h0cywgaW5jbHVkaW5nIGFueSByaWdodHMKK3RvIGJlIGlkZW50aWZpZWQgYXMgdGhlIGF1dGhvciBvZiB0aGUgRGF0YWJhc2Ugb3IgdG8gb2JqZWN0IHRvIHRyZWF0bWVudAordGhhdCB3b3VsZCBvdGhlcndpc2UgcHJlanVkaWNlIHRoZSBhdXRob3JgcyBob25vdXIgYW5kIHJlcHV0YXRpb24sIG9yCithbnkgb3RoZXIgZGVyb2dhdG9yeSB0cmVhdG1lbnQ6CisKKyAgYS4gRm9yIGp1cmlzZGljdGlvbnMgYWxsb3dpbmcgd2FpdmVyIG9mIG1vcmFsIHJpZ2h0cywgTGljZW5zb3Igd2FpdmVzCisgIGFsbCBtb3JhbCByaWdodHMgdGhhdCBMaWNlbnNvciBtYXkgaGF2ZSBpbiB0aGUgRGF0YWJhc2UgdG8gdGhlIGZ1bGxlc3QKKyAgZXh0ZW50IHBvc3NpYmxlIGJ5IHRoZSBsYXcgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlciBTZWN0aW9uCisgIDEwLjQ7IAorCisgIGIuIElmIHdhaXZlciBvZiBtb3JhbCByaWdodHMgdW5kZXIgU2VjdGlvbiA1LjEgYSBpbiB0aGUgcmVsZXZhbnQKKyAganVyaXNkaWN0aW9uIGlzIG5vdCBwb3NzaWJsZSwgTGljZW5zb3IgYWdyZWVzIG5vdCB0byBhc3NlcnQgYW55IG1vcmFsCisgIHJpZ2h0cyBvdmVyIHRoZSBEYXRhYmFzZSBhbmQgd2FpdmVzIGFsbCBjbGFpbXMgaW4gbW9yYWwgcmlnaHRzIHRvIHRoZQorICBmdWxsZXN0IGV4dGVudCBwb3NzaWJsZSBieSB0aGUgbGF3IG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIKKyAgU2VjdGlvbiAxMC40OyBhbmQKKworICBjLiBGb3IganVyaXNkaWN0aW9ucyBub3QgYWxsb3dpbmcgd2FpdmVyIG9yIGFuIGFncmVlbWVudCBub3QgdG8gYXNzZXJ0CisgIG1vcmFsIHJpZ2h0cyB1bmRlciBTZWN0aW9uIDUuMSBhIGFuZCBiLCB0aGUgYXV0aG9yIG1heSByZXRhaW4gdGhlaXIKKyAgbW9yYWwgcmlnaHRzIG92ZXIgY2VydGFpbiBhc3BlY3RzIG9mIHRoZSBEYXRhYmFzZS4KKworUGxlYXNlIG5vdGUgdGhhdCBzb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IGZvciB0aGUgd2FpdmVyIG9mIG1vcmFsCityaWdodHMsIGFuZCBzbyBtb3JhbCByaWdodHMgbWF5IHN0aWxsIHN1YnNpc3Qgb3ZlciB0aGUgRGF0YWJhc2UgaW4gc29tZQoranVyaXNkaWN0aW9ucy4KKworIyMjIDYuMCBGYWlyIGRlYWxpbmcsIERhdGFiYXNlIGV4Y2VwdGlvbnMsIGFuZCBvdGhlciByaWdodHMgbm90IGFmZmVjdGVkIAorCis2LjEgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHRzIHRoYXQgWW91IG9yIGFueW9uZSBlbHNlIG1heQoraW5kZXBlbmRlbnRseSBoYXZlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyB0byBtYWtlIGFueSB1c2Ugb2YgdGhpcworRGF0YWJhc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb246CisKKyAgYS4gRXhjZXB0aW9ucyB0byB0aGUgRGF0YWJhc2UgUmlnaHQgaW5jbHVkaW5nOiBFeHRyYWN0aW9uIG9mIENvbnRlbnRzCisgIGZyb20gbm9uLWVsZWN0cm9uaWMgRGF0YWJhc2VzIGZvciBwcml2YXRlIHB1cnBvc2VzLCBFeHRyYWN0aW9uIGZvcgorICBwdXJwb3NlcyBvZiBpbGx1c3RyYXRpb24gZm9yIHRlYWNoaW5nIG9yIHNjaWVudGlmaWMgcmVzZWFyY2gsIGFuZAorICBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIGZvciBwdWJsaWMgc2VjdXJpdHkgb3IgYW4gYWRtaW5pc3RyYXRpdmUKKyAgb3IganVkaWNpYWwgcHJvY2VkdXJlLiAKKworICBiLiBGYWlyIGRlYWxpbmcsIGZhaXIgdXNlLCBvciBhbnkgb3RoZXIgbGVnYWxseSByZWNvZ25pc2VkIGxpbWl0YXRpb24KKyAgb3IgZXhjZXB0aW9uIHRvIGluZnJpbmdlbWVudCBvZiBjb3B5cmlnaHQgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLiAKKworNi4yIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvZiBsYXdmdWwgdXNlcnMgdG8gRXh0cmFjdAorYW5kIFJlLXV0aWxpc2UgaW5zdWJzdGFudGlhbCBwYXJ0cyBvZiB0aGUgQ29udGVudHMsIGV2YWx1YXRlZAorcXVhbnRpdGF0aXZlbHkgb3IgcXVhbGl0YXRpdmVseSwgZm9yIGFueSBwdXJwb3NlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcKK2NyZWF0aW5nIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSAoc3ViamVjdCB0byBvdGhlciByaWdodHMgb3ZlciB0aGUKK0NvbnRlbnRzLCBzZWUgU2VjdGlvbiAyLjQpLiBUaGUgcmVwZWF0ZWQgYW5kIHN5c3RlbWF0aWMgRXh0cmFjdGlvbiBvcgorUmUtdXRpbGlzYXRpb24gb2YgaW5zdWJzdGFudGlhbCBwYXJ0cyBvZiB0aGUgQ29udGVudHMgbWF5IGhvd2V2ZXIgYW1vdW50Cit0byB0aGUgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cy4KKworIyMjIDcuMCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKKzcuMSBUaGUgRGF0YWJhc2UgaXMgbGljZW5zZWQgYnkgdGhlIExpY2Vuc29yICJhcyBpcyIgYW5kIHdpdGhvdXQgYW55Cit3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3MsIGltcGxpZWQsIG9yIGFyaXNpbmcgYnkgc3RhdHV0ZSwKK2N1c3RvbSwgY291cnNlIG9mIGRlYWxpbmcsIG9yIHRyYWRlIHVzYWdlLiBMaWNlbnNvciBzcGVjaWZpY2FsbHkKK2Rpc2NsYWltcyBhbnkgYW5kIGFsbCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSwKK25vbi1pbmZyaW5nZW1lbnQsIGFjY3VyYWN5IG9yIGNvbXBsZXRlbmVzcywgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YKK2Vycm9ycywgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG1lcmNoYW50YWJpbGl0eSwgb3Igb3RoZXJ3aXNlLgorU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9mIGltcGxpZWQgd2FycmFudGllcywgc28KK3RoaXMgZXhjbHVzaW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCisjIyMgOC4wIExpbWl0YXRpb24gb2YgbGlhYmlsaXR5CisKKzguMSBTdWJqZWN0IHRvIGFueSBsaWFiaWxpdHkgdGhhdCBtYXkgbm90IGJlIGV4Y2x1ZGVkIG9yIGxpbWl0ZWQgYnkgbGF3LAordGhlIExpY2Vuc29yIGlzIG5vdCBsaWFibGUgZm9yLCBhbmQgZXhwcmVzc2x5IGV4Y2x1ZGVzLCBhbGwgbGlhYmlsaXR5Citmb3IgbG9zcyBvciBkYW1hZ2UgaG93ZXZlciBhbmQgd2hlbmV2ZXIgY2F1c2VkIHRvIGFueW9uZSBieSBhbnkgdXNlCit1bmRlciB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgYnkgWW91IG9yIGJ5IGFueW9uZSBlbHNlLCBhbmQgd2hldGhlciBjYXVzZWQKK2J5IGFueSBmYXVsdCBvbiB0aGUgcGFydCBvZiB0aGUgTGljZW5zb3Igb3Igbm90LiBUaGlzIGV4Y2x1c2lvbiBvZgorbGlhYmlsaXR5IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGFueSBzcGVjaWFsLCBpbmNpZGVudGFsLAorY29uc2VxdWVudGlhbCwgcHVuaXRpdmUsIG9yIGV4ZW1wbGFyeSBkYW1hZ2VzIHN1Y2ggYXMgbG9zcyBvZiByZXZlbnVlLAorZGF0YSwgYW50aWNpcGF0ZWQgcHJvZml0cywgYW5kIGxvc3QgYnVzaW5lc3MuIFRoaXMgZXhjbHVzaW9uIGFwcGxpZXMKK2V2ZW4gaWYgdGhlIExpY2Vuc29yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2gKK2RhbWFnZXMuCisKKzguMiBJZiBsaWFiaWxpdHkgbWF5IG5vdCBiZSBleGNsdWRlZCBieSBsYXcsIGl0IGlzIGxpbWl0ZWQgdG8gYWN0dWFsIGFuZAorZGlyZWN0IGZpbmFuY2lhbCBsb3NzIHRvIHRoZSBleHRlbnQgaXQgaXMgY2F1c2VkIGJ5IHByb3ZlZCBuZWdsaWdlbmNlIG9uCit0aGUgcGFydCBvZiB0aGUgTGljZW5zb3IuCisKKyMjIyA5LjAgVGVybWluYXRpb24gb2YgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlCisKKzkuMSBBbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZXMgdGhpcyBMaWNlbnNlIHdpdGggaW1tZWRpYXRlIGVmZmVjdCBhbmQgd2l0aG91dAorbm90aWNlIHRvIFlvdS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFBlcnNvbnMgd2hvIGhhdmUgcmVjZWl2ZWQgdGhlCitEYXRhYmFzZSwgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMsIERlcml2YXRpdmUKK0RhdGFiYXNlcywgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlIGZyb20gWW91Cit1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkCit0aGVpciB1c2UgaXMgaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlIG9yIGEgbGljZW5zZSBncmFudGVkCit1bmRlciBTZWN0aW9uIDQuOCBvZiB0aGlzIExpY2Vuc2UuICBTZWN0aW9ucyAxLCAyLCA3LCA4LCA5IGFuZCAxMCB3aWxsCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzkuMiBJZiBZb3UgYXJlIG5vdCBpbiBicmVhY2ggb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIExpY2Vuc29yCit3aWxsIG5vdCB0ZXJtaW5hdGUgWW91ciByaWdodHMgdW5kZXIgaXQuIAorCis5LjMgVW5sZXNzIHRlcm1pbmF0ZWQgdW5kZXIgU2VjdGlvbiA5LjEsIHRoaXMgTGljZW5zZSBpcyBncmFudGVkIHRvIFlvdQorZm9yIHRoZSBkdXJhdGlvbiBvZiBhcHBsaWNhYmxlIHJpZ2h0cyBpbiB0aGUgRGF0YWJhc2UuIAorCis5LjQgUmVpbnN0YXRlbWVudCBvZiByaWdodHMuIElmIHlvdSBjZWFzZSBhbnkgYnJlYWNoIG9mIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgZnVsbCByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlCit3aWxsIGJlIHJlaW5zdGF0ZWQ6CisKKyAgYS4gUHJvdmlzaW9uYWxseSBhbmQgc3ViamVjdCB0byBwZXJtYW5lbnQgdGVybWluYXRpb24gdW50aWwgdGhlIDYwdGgKKyAgZGF5IGFmdGVyIGNlc3NhdGlvbiBvZiBicmVhY2g7IAorCisgIGIuIFBlcm1hbmVudGx5IG9uIHRoZSA2MHRoIGRheSBhZnRlciBjZXNzYXRpb24gb2YgYnJlYWNoIHVubGVzcworICBvdGhlcndpc2UgcmVhc29uYWJseSBub3RpZmllZCBieSB0aGUgTGljZW5zb3I7IG9yCisKKyAgYy4gIFBlcm1hbmVudGx5IGlmIHJlYXNvbmFibHkgbm90aWZpZWQgYnkgdGhlIExpY2Vuc29yIG9mIHRoZQorICB2aW9sYXRpb24sIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgWW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mCisgIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgZnJvbSAgdGhlIExpY2Vuc29yLCBhbmQgWW91IGN1cmUgdGhlCisgIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyIHlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCitQZXJzb25zIHN1YmplY3QgdG8gcGVybWFuZW50IHRlcm1pbmF0aW9uIG9mIHJpZ2h0cyBhcmUgbm90IGVsaWdpYmxlIHRvCitiZSBhIHJlY2lwaWVudCBhbmQgcmVjZWl2ZSBhIGxpY2Vuc2UgdW5kZXIgU2VjdGlvbiA0LjguCisKKzkuNSBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZQordGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIG9yCittYWtpbmcgYXZhaWxhYmxlIHRoZSBEYXRhYmFzZS4gUmVsZWFzaW5nIHRoZSBEYXRhYmFzZSB1bmRlciBkaWZmZXJlbnQKK2xpY2Vuc2UgdGVybXMgb3Igc3RvcHBpbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgRGF0YWJhc2Ugd2lsbCBub3QKK3dpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMKK3JlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcworc3RhdGVkIGFib3ZlLgorCisjIyMgMTAuMCBHZW5lcmFsCisKKzEwLjEgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSBpbnZhbGlkIG9yCit1bmVuZm9yY2VhYmxlLCB0aGF0IG11c3Qgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKK3RoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgZWFjaAorcmVtYWluaW5nIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgdmFsaWQgYW5kIGVuZm9yY2VkIHRvIHRoZQorZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gCisKKzEwLjIgVGhpcyBMaWNlbnNlIGlzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aAorcmVzcGVjdCB0byB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZSBvdmVyIHRoZSBEYXRhYmFzZS4gSXQgcmVwbGFjZXMgYW55CitlYXJsaWVyIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8KK3RoZSBEYXRhYmFzZS4gCisKKzEwLjMgSWYgWW91IGFyZSBpbiBicmVhY2ggb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgWW91IHdpbGwgbm90IGJlCitlbnRpdGxlZCB0byByZWx5IG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdG8gY29tcGxhaW4gb2YgYW55CiticmVhY2ggYnkgdGhlIExpY2Vuc29yLiAKKworMTAuNCBDaG9pY2Ugb2YgbGF3LiBUaGlzIExpY2Vuc2UgdGFrZXMgZWZmZWN0IGluIGFuZCB3aWxsIGJlIGdvdmVybmVkIGJ5Cit0aGUgbGF3cyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZQorc291Z2h0IHRvIGJlIGVuZm9yY2VkLiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIKK2FwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBhbmQgRGF0YWJhc2UgUmlnaHRzIGluIHRoZSByZWxldmFudAoranVyaXNkaWN0aW9uIGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwKK3RoZXNlIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBncmFudGVkIGluIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byBtZWV0IHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0ZMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0ZMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQ0YmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRkwtMS4xCkBAIC0wLDAgKzEsODggQEAKKworU0lMIE9QRU4gRk9OVCBMSUNFTlNFCisKK1ZlcnNpb24gMS4xIC0gMjYgRmVicnVhcnkgMjAwNworCitQUkVBTUJMRQorVGhlIGdvYWxzIG9mIHRoZSBPcGVuIEZvbnQgTGljZW5zZSAoT0ZMKSBhcmUgdG8gc3RpbXVsYXRlIHdvcmxkd2lkZQorZGV2ZWxvcG1lbnQgb2YgY29sbGFib3JhdGl2ZSBmb250IHByb2plY3RzLCB0byBzdXBwb3J0IHRoZSBmb250IGNyZWF0aW9uCitlZmZvcnRzIG9mIGFjYWRlbWljIGFuZCBsaW5ndWlzdGljIGNvbW11bml0aWVzLCBhbmQgdG8gcHJvdmlkZSBhIGZyZWUgYW5kCitvcGVuIGZyYW1ld29yayBpbiB3aGljaCBmb250cyBtYXkgYmUgc2hhcmVkIGFuZCBpbXByb3ZlZCBpbiBwYXJ0bmVyc2hpcAord2l0aCBvdGhlcnMuCisKK1RoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQKK3JlZGlzdHJpYnV0ZWQgZnJlZWx5IGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IHNvbGQgYnkgdGhlbXNlbHZlcy4gVGhlCitmb250cywgaW5jbHVkaW5nIGFueSBkZXJpdmF0aXZlIHdvcmtzLCBjYW4gYmUgYnVuZGxlZCwgZW1iZWRkZWQsIAorcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSBwcm92aWRlZCB0aGF0IGFueSByZXNlcnZlZAorbmFtZXMgYXJlIG5vdCB1c2VkIGJ5IGRlcml2YXRpdmUgd29ya3MuIFRoZSBmb250cyBhbmQgZGVyaXZhdGl2ZXMsCitob3dldmVyLCBjYW5ub3QgYmUgcmVsZWFzZWQgdW5kZXIgYW55IG90aGVyIHR5cGUgb2YgbGljZW5zZS4gVGhlCityZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseQordG8gYW55IGRvY3VtZW50IGNyZWF0ZWQgdXNpbmcgdGhlIGZvbnRzIG9yIHRoZWlyIGRlcml2YXRpdmVzLgorCitERUZJTklUSU9OUworIkZvbnQgU29mdHdhcmUiIHJlZmVycyB0byB0aGUgc2V0IG9mIGZpbGVzIHJlbGVhc2VkIGJ5IHRoZSBDb3B5cmlnaHQKK0hvbGRlcihzKSB1bmRlciB0aGlzIGxpY2Vuc2UgYW5kIGNsZWFybHkgbWFya2VkIGFzIHN1Y2guIFRoaXMgbWF5CitpbmNsdWRlIHNvdXJjZSBmaWxlcywgYnVpbGQgc2NyaXB0cyBhbmQgZG9jdW1lbnRhdGlvbi4KKworIlJlc2VydmVkIEZvbnQgTmFtZSIgcmVmZXJzIHRvIGFueSBuYW1lcyBzcGVjaWZpZWQgYXMgc3VjaCBhZnRlciB0aGUKK2NvcHlyaWdodCBzdGF0ZW1lbnQocykuCisKKyJPcmlnaW5hbCBWZXJzaW9uIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgRm9udCBTb2Z0d2FyZSBjb21wb25lbnRzIGFzCitkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKS4KKworIk1vZGlmaWVkIFZlcnNpb24iIHJlZmVycyB0byBhbnkgZGVyaXZhdGl2ZSBtYWRlIGJ5IGFkZGluZyB0bywgZGVsZXRpbmcsCitvciBzdWJzdGl0dXRpbmcgLS0gaW4gcGFydCBvciBpbiB3aG9sZSAtLSBhbnkgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlCitPcmlnaW5hbCBWZXJzaW9uLCBieSBjaGFuZ2luZyBmb3JtYXRzIG9yIGJ5IHBvcnRpbmcgdGhlIEZvbnQgU29mdHdhcmUgdG8gYQorbmV3IGVudmlyb25tZW50LgorCisiQXV0aG9yIiByZWZlcnMgdG8gYW55IGRlc2lnbmVyLCBlbmdpbmVlciwgcHJvZ3JhbW1lciwgdGVjaG5pY2FsCit3cml0ZXIgb3Igb3RoZXIgcGVyc29uIHdobyBjb250cmlidXRlZCB0byB0aGUgRm9udCBTb2Z0d2FyZS4KKworUEVSTUlTU0lPTiAmIENPTkRJVElPTlMKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoZSBGb250IFNvZnR3YXJlLCB0byB1c2UsIHN0dWR5LCBjb3B5LCBtZXJnZSwgZW1iZWQsIG1vZGlmeSwKK3JlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250CitTb2Z0d2FyZSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEpIE5laXRoZXIgdGhlIEZvbnQgU29mdHdhcmUgbm9yIGFueSBvZiBpdHMgaW5kaXZpZHVhbCBjb21wb25lbnRzLAoraW4gT3JpZ2luYWwgb3IgTW9kaWZpZWQgVmVyc2lvbnMsIG1heSBiZSBzb2xkIGJ5IGl0c2VsZi4KKworMikgT3JpZ2luYWwgb3IgTW9kaWZpZWQgVmVyc2lvbnMgb2YgdGhlIEZvbnQgU29mdHdhcmUgbWF5IGJlIGJ1bmRsZWQsCityZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weQorY29udGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbGljZW5zZS4gVGhlc2UgY2FuIGJlCitpbmNsdWRlZCBlaXRoZXIgYXMgc3RhbmQtYWxvbmUgdGV4dCBmaWxlcywgaHVtYW4tcmVhZGFibGUgaGVhZGVycyBvcgoraW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtcmVhZGFibGUgbWV0YWRhdGEgZmllbGRzIHdpdGhpbiB0ZXh0IG9yCitiaW5hcnkgZmlsZXMgYXMgbG9uZyBhcyB0aG9zZSBmaWVsZHMgY2FuIGJlIGVhc2lseSB2aWV3ZWQgYnkgdGhlIHVzZXIuCisKKzMpIE5vIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIEZvbnQgU29mdHdhcmUgbWF5IHVzZSB0aGUgUmVzZXJ2ZWQgRm9udAorTmFtZShzKSB1bmxlc3MgZXhwbGljaXQgd3JpdHRlbiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKK0NvcHlyaWdodCBIb2xkZXIuIFRoaXMgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHRvIHRoZSBwcmltYXJ5IGZvbnQgbmFtZSBhcworcHJlc2VudGVkIHRvIHRoZSB1c2Vycy4KKworNCkgVGhlIG5hbWUocykgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIocykgb3IgdGhlIEF1dGhvcihzKSBvZiB0aGUgRm9udAorU29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgdG8gcHJvbW90ZSwgZW5kb3JzZSBvciBhZHZlcnRpc2UgYW55CitNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUKK0NvcHlyaWdodCBIb2xkZXIocykgYW5kIHRoZSBBdXRob3Iocykgb3Igd2l0aCB0aGVpciBleHBsaWNpdCB3cml0dGVuCitwZXJtaXNzaW9uLgorCis1KSBUaGUgRm9udCBTb2Z0d2FyZSwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZCwgaW4gcGFydCBvciBpbiB3aG9sZSwKK211c3QgYmUgZGlzdHJpYnV0ZWQgZW50aXJlbHkgdW5kZXIgdGhpcyBsaWNlbnNlLCBhbmQgbXVzdCBub3QgYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIGFueSBvdGhlciBsaWNlbnNlLiBUaGUgcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvCityZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGFueSBkb2N1bWVudCBjcmVhdGVkCit1c2luZyB0aGUgRm9udCBTb2Z0d2FyZS4KKworVEVSTUlOQVRJT04KK1RoaXMgbGljZW5zZSBiZWNvbWVzIG51bGwgYW5kIHZvaWQgaWYgYW55IG9mIHRoZSBhYm92ZSBjb25kaXRpb25zIGFyZQorbm90IG1ldC4KKworRElTQ0xBSU1FUgorVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UCitPRiBDT1BZUklHSFQsIFBBVEVOVCwgVFJBREVNQVJLLCBPUiBPVEhFUiBSSUdIVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVCBTT0ZUV0FSRSBPUiBGUk9NCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PR1RTTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0dUU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwY2FkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0dUU0wKQEAgLTAsMCArMSwxMjAgQEAKKworVGhlIE9wZW4gR3JvdXAgVGVzdCBTdWl0ZSBMaWNlbnNlCisKK1ByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaAorYSBQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMKK3NvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlCitwYWNrYWdlLCB3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kCitkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzCit0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK1Rlc3RpbmcgaXMgZXNzZW50aWFsIGZvciBwcm9wZXIgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIG9mCitzdGFuZGFyZHMtYmFzZWQgcHJvZHVjdHMuCisKK0ZvciBidXllcnM6IGFkZXF1YXRlIGNvbmZvcm1hbmNlIHRlc3RpbmcgbGVhZHMgdG8gcmVkdWNlZAoraW50ZWdyYXRpb24gY29zdHMgYW5kIHByb3RlY3Rpb24gb2YgaW52ZXN0bWVudHMgaW4gYXBwbGljYXRpb25zLAorc29mdHdhcmUgYW5kIHBlb3BsZS4KKworRm9yIHNvZnR3YXJlIGRldmVsb3BlcnM6IGNvbmZvcm1hbmNlIHRlc3Rpbmcgb2YgcGxhdGZvcm1zIGFuZAorbWlkZGxld2FyZSBncmVhdGx5IHJlZHVjZXMgdGhlIGNvc3Qgb2YgZGV2ZWxvcGluZyBhbmQgbWFpbnRhaW5pbmcKK211bHRpLXBsYXRmb3JtIGFwcGxpY2F0aW9uIHNvZnR3YXJlLgorCitGb3Igc3VwcGxpZXJzOiBJbi1kZXB0aCB0ZXN0aW5nIGluY3JlYXNlcyBjdXN0b21lciBzYXRpc2ZhY3Rpb24gYW5kCitrZWVwcyBkZXZlbG9wbWVudCBhbmQgc3VwcG9ydCBjb3N0cyBpbiBjaGVjay4gQVBJIGNvbmZvcm1hbmNlIGlzCitoaWdobHkgbWVhc3VyYWJsZSBhbmQgc3VwcGxpZXJzIHdobyBjbGFpbSBpdCBtdXN0IGJlIGFibGUgdG8KK3N1YnN0YW50aWF0ZSB0aGF0IGNsYWltLgorCitBcyBzdWNoLCBzaW5jZSB0aGVzZSBhcmUgYmVuY2htYXJrIG1lYXN1cmVzIG9mIGNvbmZvcm1hbmNlLCB3ZSBmZWVsCit0aGUgaW50ZWdyaXR5IG9mIHRlc3QgdG9vbHMgaXMgb2YgaW1wb3J0YW5jZS4gSW4gb3JkZXIgdG8gcHJlc2VydmUKK3RoZSBpbnRlZ3JpdHkgb2YgdGhlIGV4aXN0aW5nIGNvbmZvcm1hbmNlIG1vZGVzIG9mIHRoaXMgdGVzdAorcGFja2FnZSBhbmQgdG8gcGVybWl0IHJlY2lwaWVudHMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworcGFja2FnZSB0byBydW4gdGhlIG9yaWdpbmFsIHRlc3QgbW9kZXMsIHRoaXMgbGljZW5zZSByZXF1aXJlcyB0aGF0Cit0aGUgb3JpZ2luYWwgdGVzdCBtb2RlcyBiZSBwcmVzZXJ2ZWQuCisKK0lmIHlvdSBmaW5kIGEgYnVnIGluIG9uZSBvZiB0aGUgc3RhbmRhcmRzIG1vZGUgdGVzdCBjYXNlcywgcGxlYXNlCitsZXQgdXMga25vdyBzbyB3ZSBjYW4gZmVlZCB0aGlzIGJhY2sgaW50byB0aGUgb3JpZ2luYWwsIGFuZCBhbHNvCityYWlzZSBhbnkgc3BlY2lmaWNhdGlvbiBpc3N1ZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYm9kaWVzIChmb3IKK2V4YW1wbGUgdGhlIFBPU0lYIGNvbW1pdHRlZXMpLgorCitEZWZpbml0aW9uczogCisKKyAgICAgIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKyAgICAgQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcworICAgICBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uIAorICAgICAiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHN1Y2ggYSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbgorICAgICBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMKKyAgICAgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIuIAorICAgICAiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yCisgICAgIGNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLiAiWW91IiBpcyB5b3UsIGlmIHlvdWByZSB0aGlua2luZworICAgICBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGlzIFBhY2thZ2UuIAorICAgICAiUmVhc29uYWJsZSBjb3B5aW5nIGZlZSIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZQorICAgICBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZQorICAgICBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQKKyAgICAgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5CisgICAgIGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKSAKKyAgICAgIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtCisgICAgIGl0c2VsZiwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZQorICAgICBpdGVtLiBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkKKyAgICAgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC4gCisKKzEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YKK3RoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZAordGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kCithc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyCittb2RpZmljYXRpb25zIGRlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiBvciBmcm9tIHRoZSBDb3B5cmlnaHQKK0hvbGRlci4gQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUgY29uc2lkZXJlZAordGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksCitwcm92aWRlZCB0aGF0IHlvdSBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlCitzdGF0aW5nIGhvdyBhbmQgd2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdQorZG8gYXQgbGVhc3QgdGhlIGZvbGxvd2luZzoKKworICAgICByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQgdGVzdGNhc2VzIHNvIHRoZQorICAgICBuYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQKKyAgICAgdGVzdGNhc2VzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlIGEKKyAgICAgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgYW5kCisgICAgIHRlc3RjYXNlIHRoYXQgY2xlYXJseSBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUKKyAgICAgU3RhbmRhcmQgVmVyc2lvbi4KKworNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUKK29yIGV4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgdGhlIGZvbGxvd2luZzogCisKKyAgICAgYWNjb21wYW55IGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgYW5kIHRlc3RjYXNlcyB3aXRoCisgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgU3RhbmRhcmQgVmVyc2lvbiBleGVjdXRhYmxlcyBhbmQKKyAgICAgdGVzdGNhc2VzLCBnaXZpbmcgdGhlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQKKyAgICAgdGVzdGNhc2VzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlCisgICAgIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyIHdpdGgKKyAgICAgaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworNS4gWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mCit0aGlzIFBhY2thZ2UuIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzCitQYWNrYWdlLiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoaXMgUGFja2FnZSBpdHNlbGYuIEhvd2V2ZXIsCit5b3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoIG90aGVyIChwb3NzaWJseQorY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkKK3NvZnR3YXJlIGRpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMKK1BhY2thZ2UgYXMgYSBwcm9kdWN0IG9mIHlvdXIgb3duLgorCis2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZAorYXMgb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseQorZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlcgorZ2VuZXJhdGVkIHRoZW0sIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZAord2l0aCB0aGlzIFBhY2thZ2UuCisKKzcuU3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2Ugc2hhbGwKK25vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLiAKKworOC4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKK3Byb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgord3JpdHRlbiBwZXJtaXNzaW9uLgorCis5LiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworVGhlIEVuZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09MREFQLTIuOCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjUzZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09MREFQLTIuOApAQCAtMCwwICsxLDQ5IEBACisKK1RoZSBPcGVuTERBUCBQdWJsaWMgTGljZW5zZQorICBWZXJzaW9uIDIuOCwgMTcgQXVndXN0IDIwMDMKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKygiU29mdHdhcmUiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZAordGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBmb3JtIG11c3QgcmV0YWluIGNvcHlyaWdodCBzdGF0ZW1lbnRzCisgICBhbmQgbm90aWNlcywKKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGFwcGxpY2FibGUgY29weXJpZ2h0CisgICBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQKKworMy4gUmVkaXN0cmlidXRpb25zIG11c3QgY29udGFpbiBhIHZlcmJhdGltIGNvcHkgb2YgdGhpcyBkb2N1bWVudC4KKworVGhlIE9wZW5MREFQIEZvdW5kYXRpb24gbWF5IHJldmlzZSB0aGlzIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitFYWNoIHJldmlzaW9uIGlzIGRpc3Rpbmd1aXNoZWQgYnkgYSB2ZXJzaW9uIG51bWJlci4gIFlvdSBtYXkgdXNlCit0aGlzIFNvZnR3YXJlIHVuZGVyIHRlcm1zIG9mIHRoaXMgbGljZW5zZSByZXZpc2lvbiBvciB1bmRlciB0aGUKK3Rlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHJldmlzaW9uIG9mIHRoZSBsaWNlbnNlLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OIEFORCBJVFMKK0NPTlRSSUJVVE9SUyBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCitBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04sIElUUyBDT05UUklCVVRPUlMsIE9SIFRIRSBBVVRIT1IoUykKK09SIE9XTkVSKFMpIE9GIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KK0FOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RoZSBuYW1lcyBvZiB0aGUgYXV0aG9ycyBhbmQgY29weXJpZ2h0IGhvbGRlcnMgbXVzdCBub3QgYmUgdXNlZCBpbgorYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5nCitpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRpdGxlCit0byBjb3B5cmlnaHQgaW4gdGhpcyBTb2Z0d2FyZSBzaGFsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggY29weXJpZ2h0Citob2xkZXJzLgorCitPcGVuTERBUCBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIHRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLgorCitDb3B5cmlnaHQgMTk5OS0yMDAzIFRoZSBPcGVuTERBUCBGb3VuZGF0aW9uLCBSZWR3b29kIENpdHksCitDYWxpZm9ybmlhLCBVU0EuICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgUGVybWlzc2lvbiB0byBjb3B5IGFuZAorZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBkb2N1bWVudCBpcyBncmFudGVkLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0xLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhZDBkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTEuMApAQCAtMCwwICsxLDE2NCBAQAorCitUaGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlCit2LiAxLjAKKworVGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsCit3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikKK2hhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQKK25vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6ICJMaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZQorTGljZW5zZSB2ZXJzaW9uIDEuMCIKKworTGljZW5zZSBUZXJtcworCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZQorbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUKK09yaWdpbmFsIFdvcms7CisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzCit0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IKK0Rlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGUKK09wZW4gU29mdHdhcmUgTGljZW5zZTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsCit1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlCitlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yICgiTGljZW5zZWQKK0NsYWltcyIpIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsuCitMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwKK3BlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdW5kZXIgdGhlIExpY2Vuc2VkIENsYWltcyB0bworbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSBEZXJpdmF0aXZlIFdvcmtzLgorCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZQorcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZAorYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIGFjY2VzcyBhbmQgbW9kaWZ5IHRoZQorT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZQorY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YKK3RoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZQorcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZgordGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvCitwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcworTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nCit0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkKK2ZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZQorZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUKK3NlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMKK2V4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwKK3NlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZQorTGljZW5zZWQgQ2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZQordHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbAorV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQKK0xpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkKK09yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlCitvciBkaXN0cmlidXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5CitzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgYWNjZXNzZWQgb3IKK3VzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUKK1dvcmtzIGFyZSBkaXN0cmlidXRlZCB0byB0aG9zZSBwZXJzb25zLCBtYWRlIGF2YWlsYWJsZSBhcyBhbgorYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yaywgb3IgdXNlZCB0bworcHJvdmlkZSBzZXJ2aWNlcyBvciBvdGhlcndpc2UgZGVsaXZlciBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuCitZb3UuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UKK2FncmVlIHRoYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IHNoYWxsIGJlIGRlZW1lZCBhCitkaXN0cmlidXRpb24gYW5kIHNoYWxsIGJlIGxpY2Vuc2VkIHRvIGFsbCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSwgYXMgcHJlc2NyaWJlZCBpbiBzZWN0aW9uIDEoYykgaGVyZWluLgorCis2KSBXYXJyYW50eSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTElDRU5TT1IgV0FSUkFOVFMgVEhBVCBUSEUKK0NPUFlSSUdIVCBJTiBBTkQgVE8gVEhFIE9SSUdJTkFMIFdPUksgSVMgT1dORUQgQlkgVEhFIExJQ0VOU09SIE9SIFRIQVQKK1RIRSBPUklHSU5BTCBXT1JLIElTIERJU1RSSUJVVEVEIEJZIExJQ0VOU09SIFVOREVSIEEgVkFMSUQgQ1VSUkVOVAorTElDRU5TRSBGUk9NIFRIRSBDT1BZUklHSFQgT1dORVIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRIRQorSU1NRURJQVRFTFkgUFJFQ0VFRElORyBTRU5URU5DRSwgVEhFIE9SSUdJTkFMIFdPUksgSVMgUFJPVklERUQgVU5ERVIKK1RISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZLCBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBXQVJSQU5UWSBPRgorTk9OLUlORlJJTkdFTUVOVCBBTkQgV0FSUkFOVElFUyBUSEFUIFRIRSBPUklHSU5BTCBXT1JLIElTIE1FUkNIQU5UQUJMRQorT1IgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GCitUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTCitBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIExJQ0VOU0UgVE8gT1JJR0lOQUwgV09SSyBJUworR1JBTlRFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworNykgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMCitUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLAorU0hBTEwgVEhFIExJQ0VOU09SIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK1NQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcKK0FTIEEgUkVTVUxUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBPUklHSU5BTCBXT1JLIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwKK0NPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwKK0RBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEVSU09OIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QKK0FQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0gKK1BBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNICitMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IKK0xJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OCitBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworOCkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvcgorYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UKK3Blcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywKK2FuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IKK2Fub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkKK3Byb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyCitjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueQorb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9ucyAxIGFuZCAyIGhlcmVpbiwgWW91IGluZGljYXRlCitZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorVGhpcyBsaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgeW91IG1heSBubyBsb25nZXIKK2V4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIFlvdXIKK2ZhaWx1cmUgdG8gaG9ub3IgdGhlIHByb3Zpc28gaW4gU2VjdGlvbiAxKGMpIGhlcmVpbi4KKworOSkgTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkCit0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGlmIFlvdSBmaWxlIGEgbGF3c3VpdCBpbiBhbnkgY291cnQgYWxsZWdpbmcKK3RoYXQgYW55IE9TSSBDZXJ0aWZpZWQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBhbnkKK2xpY2Vuc2UgY29udGFpbmluZyB0aGlzICJNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24iIGNsYXVzZQoraW5mcmluZ2VzIGFueSBwYXRlbnQgY2xhaW1zIHRoYXQgYXJlIGVzc2VudGlhbCB0byB1c2UgdGhhdCBzb2Z0d2FyZS4KKworMTApIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIFlvdSBhZ3JlZSB0aGF0IGFueSBsYXdzdWl0CithcmlzaW5nIHVuZGVyIG9yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBtYWludGFpbmVkIGluIHRoZQorY291cnRzIG9mIHRoZSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaAorTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0CitqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uCitvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsCitTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yaworb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZQorc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwKKzE3IFUuUy5DLiAmIzE2NzsgMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQKK2ludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YKK3RoaXMgTGljZW5zZS4KKworMTEpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlCitlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dAorbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluCitjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzCitzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQKK2NvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UKK2lzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0bwordGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTMpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMKK0xpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhCitsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlCit0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkKK3RoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LgorRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwCitvZiBzdWNoIGVudGl0eS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMiBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cworcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzCitsaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0Cit0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTVjOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0yLjAKQEAgLTAsMCArMSw0OCBAQAorCitPcGVuIFNvZnR3YXJlIExpY2Vuc2UKK3YuIDIuMAorCitUaGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDIuMAorMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllczsKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2U7CisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLgorCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGFyZSBkaXN0cmlidXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgYWdyZWUgdGhhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgc2hhbGwgYmUgZGVlbWVkIGEgZGlzdHJpYnV0aW9uIGFuZCBzaGFsbCBiZSBsaWNlbnNlZCB0byBhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYXMgcHJlc2NyaWJlZCBpbiBzZWN0aW9uIDEoYykgaGVyZWluLgorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCisKKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yYHMgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmIFlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAxIGhlcmVpbiwgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIHlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIFlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgaGVyZWluLgorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgKGkpIGFnYWluc3QgTGljZW5zb3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgb3IgKGlpKSBhZ2FpbnN0IGFueSBlbnRpdHkgd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gdGhlIE9yaWdpbmFsIFdvcmsgKGJ1dCBleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpLgorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuIDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTMuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTU3NzQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMy4wCkBAIC0wLDAgKzEsMjcgQEAKKworT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICgmIzgyMjA7T1NMJiM4MjIxOykgdi4gMy4wCitUaGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgbm90aWNlIGFkamFjZW50IHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKK0xpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzLCBlaXRoZXIgYWxvbmUgb3IgYXMgcGFydCBvZiBhIGNvbGxlY3RpdmUgd29yazsKK2IpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlOworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBhdGVudHMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kIGltcG9ydCB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay4KKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4sIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGdyYW50cyBhbnkgbGljZW5zZSB0byBMaWNlbnNvciYjODIxNztzIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eS4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIG9yIGltcG9ydCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLgorNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2Ygbm9uLWluZnJpbmdlbWVudCwgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueW9uZSBmb3IgYW55IGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYsIGF0IGFueSB0aW1lLCBZb3UgZXhwcmVzc2x5IGFzc2VudGVkIHRvIHRoaXMgTGljZW5zZSwgdGhhdCBhc3NlbnQgaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMgeW91ciByaWdodHMgdG8gdW5kZXJ0YWtlIHRoZSBhY3Rpdml0aWVzIGxpc3RlZCBpbiBTZWN0aW9uIDEsIGluY2x1ZGluZyB5b3VyIHJpZ2h0IHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGFmZmVjdCBjb3B5cmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMgKGluY2x1ZGluZyAmIzgyMjA7ZmFpciB1c2UmIzgyMjE7IG9yICYjODIyMDtmYWlyIGRlYWxpbmcmIzgyMjE7KS4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24geW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMShjKS4KKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiBjb3B5cmlnaHQgb3IgcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorMTIpIEF0dG9ybmV5cyYjODIxNzsgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorMTYpIE1vZGlmaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBpcyBDb3B5cmlnaHQgJiMxNjk7IDIwMDUgTGF3cmVuY2UgUm9zZW4uIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBjb21tdW5pY2F0ZSB0aGlzIExpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHBlcm1pdHMgWW91IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UgYXMgYXBwbGllZCB0byB0aGUgT3JpZ2luYWwgV29yayBvciB0byBEZXJpdmF0aXZlIFdvcmtzLiBIb3dldmVyLCBZb3UgbWF5IG1vZGlmeSB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UgYW5kIGNvcHksIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgeW91ciBtb2RpZmllZCB2ZXJzaW9uICh0aGUgIk1vZGlmaWVkIExpY2Vuc2UiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGkpIFlvdSBtYXkgbm90IGluZGljYXRlIGluIGFueSB3YXkgdGhhdCB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaXMgdGhlICJPcGVuIFNvZnR3YXJlIExpY2Vuc2UiIG9yICJPU0wiIGFuZCB5b3UgbWF5IG5vdCB1c2UgdGhvc2UgbmFtZXMgaW4gdGhlIG5hbWUgb2YgeW91ciBNb2RpZmllZCBMaWNlbnNlOyAoaWkpIFlvdSBtdXN0IHJlcGxhY2UgdGhlIG5vdGljZSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBhYm92ZSB3aXRoIHRoZSBub3RpY2UgIkxpY2Vuc2VkIHVuZGVyIDxpbnNlcnQgeW91ciBsaWNlbnNlIG5hbWUgaGVyZT4iIG9yIHdpdGggYSBub3RpY2Ugb2YgeW91ciBvd24gdGhhdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGUgbm90aWNlIGluIHRoaXMgTGljZW5zZTsgYW5kIChpaWkpIFlvdSBtYXkgbm90IGNsYWltIHRoYXQgeW91ciBvcmlnaW5hbCB3b3JrcyBhcmUgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdW5sZXNzIHlvdXIgTW9kaWZpZWQgTGljZW5zZSBoYXMgYmVlbiBhcHByb3ZlZCBieSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIGFuZCBZb3UgY29tcGx5IHdpdGggaXRzIGxpY2Vuc2UgcmV2aWV3IGFuZCBjZXJ0aWZpY2F0aW9uIHByb2Nlc3MuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT3BlblNTTCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT3BlblNTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI3MGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PcGVuU1NMCkBAIC0wLDAgKzEsMTA3IEBACisKK09wZW5TU0wgTGljZW5zZQorCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXJlIG1ldDoKKyAKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICBkaXN0cmlidXRpb24uCisgCisgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgCisgIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAKKyAgNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorIAorICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgICAgIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorIAorICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJU2BgIEFORCBBTlkKKyAgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKKyAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAgSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgCisKKyBPcmlnaW5hbCBTU0xlYXkgTGljZW5zZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyAgVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAgVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorIAorICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorIAorICBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nYHMsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAgYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAgVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorIAorICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFyZSBtZXQ6CisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICAgICBUaGUgd29yZCBgY3J5cHRvZ3JhcGhpY2AgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAgICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tCisgICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAKKyAgVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IgZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAgW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmI4NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BECkBAIC0wLDAgKzEgQEAKK1RoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIFB1YmxpYyBEb21haW4gTGljZW5zZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QSFAtMy4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QSFAtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGIyMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BIUC0zLjAKQEAgLTAsMCArMSw3MCBAQAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgICAgICAgICAgICAgICAgIFRoZSBQSFAgTGljZW5zZSwgdmVyc2lvbiAzLjAxCitDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDEwIFRoZSBQSFAgR3JvdXAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgIGRpc3RyaWJ1dGlvbi4KKyAKKyAgMy4gVGhlIG5hbWUgIlBIUCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvcgorICAgICB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGdyb3VwQHBocC5uZXQuCisgIAorICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiUEhQIiwgbm9yCisgICAgIG1heSAiUEhQIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAgICAgZnJvbSBncm91cEBwaHAubmV0LiAgWW91IG1heSBpbmRpY2F0ZSB0aGF0IHlvdXIgc29mdHdhcmUgd29ya3MgaW4KKyAgICAgY29uanVuY3Rpb24gd2l0aCBQSFAgYnkgc2F5aW5nICJGb28gZm9yIFBIUCIgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgIGl0ICJQSFAgRm9vIiBvciAicGhwZm9vIgorIAorICA1LiBUaGUgUEhQIEdyb3VwIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorICAgICBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKyAgICAgT25jZSBjb3ZlcmVkIGNvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uCisgICAgIG9mIHRoZSBsaWNlbnNlLCB5b3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zCisgICAgIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBjb3ZlcmVkIGNvZGUKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UKKyAgICAgcHVibGlzaGVkIGJ5IHRoZSBQSFAgR3JvdXAuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBQSFAgR3JvdXAgaGFzCisgICAgIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gY292ZXJlZCBjb2RlIGNyZWF0ZWQKKyAgICAgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgICAgYWNrbm93bGVkZ21lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgUEhQIHNvZnR3YXJlLCBmcmVlbHkgYXZhaWxhYmxlIGZyb20KKyAgICAgPGh0dHA6Ly93d3cucGhwLm5ldC9zb2Z0d2FyZS8+Ii4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUEhQIERFVkVMT1BNRU5UIFRFQU0gYGBBUyBJU2BgIEFORCAKK0FOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIAorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBIUAorREVWRUxPUE1FTlQgVEVBTSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgCitTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKK09GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CitpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIFBIUCBHcm91cC4KKworVGhlIFBIUCBHcm91cCBjYW4gYmUgY29udGFjdGVkIHZpYSBFbWFpbCBhdCBncm91cEBwaHAubmV0LgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUEhQIEdyb3VwIGFuZCB0aGUgUEhQIHByb2plY3QsIAorcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5waHAubmV0Pi4KKworUEhQIGluY2x1ZGVzIHRoZSBaZW5kIEVuZ2luZSwgZnJlZWx5IGF2YWlsYWJsZSBhdAorPGh0dHA6Ly93d3cuemVuZC5jb20+LgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Bvc3RncmVTUUwgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Bvc3RncmVTUUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2NThkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUG9zdGdyZVNRTApAQCAtMCwwICsxLDE0IEBACisKK1Bvc3RncmVTUUwgRGF0YWJhc2UgTWFuYWdlbWVudCBTeXN0ZW0KKyhmb3JtZXJseSBrbm93biBhcyBQb3N0Z3JlcywgdGhlbiBhcyBQb3N0Z3Jlczk1KQorCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxMCwgVGhlIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBhbmQgd2l0aG91dCBhIHdyaXR0ZW4gYWdyZWVtZW50IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIElOQ0xVRElORyBMT1NUIFBST0ZJVFMsIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4gSUYgVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEhBUyBOTyBPQkxJR0FUSU9OUyBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHJvcHJpZXRhcnkgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Byb3ByaWV0YXJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTg3NTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Byb3ByaWV0YXJ5CkBAIC0wLDAgKzEgQEAKK1Byb3ByaWV0YXJ5IGxpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1B5dGhvbi0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1B5dGhvbi0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzZTg2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHl0aG9uLTIuMApAQCAtMCwwICsxLDE5MiBAQAorCitQWVRIT04gU09GVFdBUkUgRk9VTkRBVElPTiBMSUNFTlNFIFZFUlNJT04gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorKCJQU0YiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZAorb3RoZXJ3aXNlIHVzaW5nIHRoaXMgc29mdHdhcmUgKCJQeXRob24iKSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kCitpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgorCisyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBQU0YKK2hlcmVieSBncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZQorbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksCitwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbgorYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgUFNGYHMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0ZgcyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjsgQWxsIFJpZ2h0cworUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbgorcHJlcGFyZWQgYnkgTGljZW5zZWUuCisKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCitvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlCit0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuCitMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YKK3RoZSBjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uLgorCis0LiBQU0YgaXMgbWFraW5nIFB5dGhvbiBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuIFBTRiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgUFNGIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgorRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUworQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04sCitPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueQorcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBQU0YgYW5kCitMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBQU0YKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiwgTGljZW5zZWUKK2FncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQuCisKK0JFT1BFTi5DT00gTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAyLjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQkVPUEVOIFBZVEhPTiBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVCBWRVJTSU9OIDEKKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIEJlT3Blbi5jb20gKCJCZU9wZW4iKSwgaGF2aW5nIGFuCitvZmZpY2UgYXQgMTYwIFNhcmF0b2dhIEF2ZW51ZSwgU2FudGEgQ2xhcmEsIENBIDk1MDUxLCBhbmQgdGhlCitJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcKK3RoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZAorZG9jdW1lbnRhdGlvbiAoInRoZSBTb2Z0d2FyZSIpLgorCisyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEJlT3BlbiBQeXRob24gTGljZW5zZQorQWdyZWVtZW50LCBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0KK2FuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZAorb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKK3Byb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoZSBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgaXMgcmV0YWluZWQgaW4gdGhlCitTb2Z0d2FyZSwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworMy4gQmVPcGVuIGlzIG1ha2luZyB0aGUgU29mdHdhcmUgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiBCRU9QRU4gTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIEJFT1BFTiBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzQuIEJFT1BFTiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBUSEUKK1NPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MKK0FTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZCitERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsCityZXNwZWN0cyBieSB0aGUgbGF3IG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNsdWRpbmcgY29uZmxpY3Qgb2YKK2xhdyBwcm92aXNpb25zLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvCitjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlCitiZXR3ZWVuIEJlT3BlbiBhbmQgTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQKK3Blcm1pc3Npb24gdG8gdXNlIEJlT3BlbiB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGluIGEgdHJhZGVtYXJrCitzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueQordGhpcmQgcGFydHkuIEFzIGFuIGV4Y2VwdGlvbiwgdGhlICJCZU9wZW4gUHl0aG9uIiBsb2dvcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cucHl0aG9ubGFicy5jb20vbG9nb3MuaHRtbCBtYXkgYmUgdXNlZCBhY2NvcmRpbmcgdG8gdGhlCitwZXJtaXNzaW9ucyBncmFudGVkIG9uIHRoYXQgd2ViIHBhZ2UuCisKKzcuIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIHRoZSBzb2Z0d2FyZSwgTGljZW5zZWUKK2FncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQuCisKK0NOUkkgTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAxLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsCitSZXNlYXJjaCBJbml0aWF0aXZlcywgaGF2aW5nIGFuIG9mZmljZSBhdCAxODk1IFByZXN0b24gV2hpdGUgRHJpdmUsCitSZXN0b24sIFZBIDIwMTkxICgiQ05SSSIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uCisoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xIHNvZnR3YXJlIGluCitzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIENOUkkKK2hlcmVieSBncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZQorbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksCitwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiAxLjYuMQorYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgQ05SSWBzCitMaWNlbnNlIEFncmVlbWVudCBhbmQgQ05SSWBzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpCisxOTk1LTIwMDEgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzOyBBbGwgUmlnaHRzCitSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiAxLjYuMSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZQordmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4gQWx0ZXJuYXRlbHksIGluIGxpZXUgb2YgQ05SSWBzIExpY2Vuc2UKK0FncmVlbWVudCwgTGljZW5zZWUgbWF5IHN1YnN0aXR1dGUgdGhlIGZvbGxvd2luZyB0ZXh0IChvbWl0dGluZyB0aGUKK3F1b3Rlcyk6ICJQeXRob24gMS42LjEgaXMgbWFkZSBhdmFpbGFibGUgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGluIENOUklgcyBMaWNlbnNlIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgdG9nZXRoZXIgd2l0aAorUHl0aG9uIDEuNi4xIG1heSBiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nCit1bmlxdWUsIHBlcnNpc3RlbnQgaWRlbnRpZmllciAoa25vd24gYXMgYSBoYW5kbGUpOiAxODk1LjIyLzEwMTMuIFRoaXMKK0FncmVlbWVudCBtYXkgYWxzbyBiZSBvYnRhaW5lZCBmcm9tIGEgcHJveHkgc2VydmVyIG9uIHRoZSBJbnRlcm5ldAordXNpbmcgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTMiLgorCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgorb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiAxLjYuMSBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbiAxLjYuMS4KKworNC4gQ05SSSBpcyBtYWtpbmcgUHl0aG9uIDEuNi4xIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gQ05SSSBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gMS42LjEgV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OCisxLjYuMSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCitBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYuMSwKK09SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgZmVkZXJhbAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhdyBvZiB0aGUgVW5pdGVkIFN0YXRlcywgaW5jbHVkaW5nIHdpdGhvdXQKK2xpbWl0YXRpb24gdGhlIGZlZGVyYWwgY29weXJpZ2h0IGxhdywgYW5kLCB0byB0aGUgZXh0ZW50IHN1Y2gKK1UuUy4gZmVkZXJhbCBsYXcgZG9lcyBub3QgYXBwbHksIGJ5IHRoZSBsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZgorVmlyZ2luaWEsIGV4Y2x1ZGluZyBWaXJnaW5pYWBzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLgorTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdpdGggcmVnYXJkIHRvIGRlcml2YXRpdmUgd29ya3MgYmFzZWQKK29uIFB5dGhvbiAxLjYuMSB0aGF0IGluY29ycG9yYXRlIG5vbi1zZXBhcmFibGUgbWF0ZXJpYWwgdGhhdCB3YXMKK3ByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB0aGUKK2xhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBvbmx5IGFzIHRvIGlzc3VlcyBhcmlzaW5nIHVuZGVyIG9yIHdpdGggcmVzcGVjdCB0bworUGFyYWdyYXBocyA0LCA1LCBhbmQgNyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBOb3RoaW5nIGluIHRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZgorYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIENOUkkgYW5kIExpY2Vuc2VlLiBUaGlzCitMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBDTlJJIHRyYWRlbWFya3Mgb3IKK3RyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yCitzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgorCis4LiBCeSBjbGlja2luZyBvbiB0aGUgIkFDQ0VQVCIgYnV0dG9uIHdoZXJlIGluZGljYXRlZCwgb3IgYnkgY29weWluZywKK2luc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSwgTGljZW5zZWUgYWdyZWVzIHRvIGJlCitib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworQUNDRVBUCisKK0NXSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDAuOS4wIFRIUk9VR0ggMS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTEgLSAxOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gQW1zdGVyZGFtLAorVGhlIE5ldGhlcmxhbmRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKK2JvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCitDZW50cnVtIG9yIENXSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCitUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFCitGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9RUEwtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9RUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDMzYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1FQTC0xLjAKQEAgLTAsMCArMSw0OCBAQAorCitUSEUgUSBQVUJMSUMgTElDRU5TRSB2ZXJzaW9uIDEuMAorCitDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSBUcm9sbHRlY2ggQVMsIE5vcndheS4KK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KK1RoZSBpbnRlbnQgb2YgdGhpcyBsaWNlbnNlIGlzIHRvIGVzdGFibGlzaCBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHNvZnR3YXJlIHJlZ3VsYXRlZCBieSB0aGlzIGxpY2Vuc2UgdW5kZXIgdGhlIG9wZW4gc291cmNlIG1vZGVsLgorCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgY29udGFpbmluZyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIHRoYXQgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgUSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMC4gU3VjaCBzb2Z0d2FyZSBpcyBoZXJlaW4gcmVmZXJyZWQgdG8gYXMgdGhlIFNvZnR3YXJlLiBUaGlzIGxpY2Vuc2UgY292ZXJzIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgdXNlIG9mIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9uIHByb2dyYW1zIGJhc2VkIG9uIHRoZSBTb2Z0d2FyZSwgYW5kIGRldmVsb3BtZW50IG9mIGZyZWUgc29mdHdhcmUgd2hpY2ggdXNlcyB0aGUgU29mdHdhcmUuCisKK0dyYW50ZWQgUmlnaHRzCisKKzEuIFlvdSBhcmUgZ3JhbnRlZCB0aGUgbm9uLWV4Y2x1c2l2ZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgbGljZW5zZSBwcm92aWRlZCB5b3UgYWdyZWUgdG8gYW5kIGNvbXBseSB3aXRoIGFueSBhbmQgYWxsIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLiBXaG9sZSBvciBwYXJ0aWFsIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUsIG9yIHNvZnR3YXJlIGl0ZW1zIHRoYXQgbGluayB3aXRoIHRoZSBTb2Z0d2FyZSwgaW4gYW55IGZvcm0gc2lnbmlmaWVzIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlLgorCisyLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIHVubW9kaWZpZWQgZm9ybSBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUgcGFja2FnZSwgaW5jbHVkaW5nIC0gYnV0IG5vdCByZXN0cmljdGVkIHRvIC0gY29weXJpZ2h0LCB0cmFkZW1hcmsgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMsIGFzIHJlbGVhc2VkIGJ5IHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUsIGlzIGRpc3RyaWJ1dGVkLgorCiszLiBZb3UgbWF5IG1ha2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYW5kIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb25zLCBpbiBhIGZvcm0gdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBTb2Z0d2FyZSwgc3VjaCBhcyBwYXRjaGVzLiBUaGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0byBtb2RpZmljYXRpb25zOgorCithLiBNb2RpZmljYXRpb25zIG11c3Qgbm90IGFsdGVyIG9yIHJlbW92ZSBhbnkgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlLgorYi4gV2hlbiBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSBhcmUgcmVsZWFzZWQgdW5kZXIgdGhpcyBsaWNlbnNlLCBhIG5vbi1leGNsdXNpdmUgcm95YWx0eS1mcmVlIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSB0byBkaXN0cmlidXRlIHlvdXIgbW9kaWZpY2F0aW9uIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgcHJvdmlkZWQgc3VjaCB2ZXJzaW9ucyByZW1haW4gYXZhaWxhYmxlIHVuZGVyIHRoZXNlIHRlcm1zIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBsaWNlbnNlKHMpIG9mIHRoZSBpbml0aWFsIGRldmVsb3Blci4KKworNC4gWW91IG1heSBkaXN0cmlidXRlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBvZiB0aGUgU29mdHdhcmUgb3IgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCB5b3UgbWVldCB0aGVzZSByZXN0cmljdGlvbnM6CisKK2EuIFlvdSBtdXN0IGluY2x1ZGUgdGhpcyBsaWNlbnNlIGRvY3VtZW50IGluIHRoZSBkaXN0cmlidXRpb24uCitiLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiB0aGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSB0byB0aGUgZGlzdHJpYnV0ZWQgU29mdHdhcmUsIGluY2x1ZGluZyBhbGwgbW9kaWZpY2F0aW9ucywgd2l0aG91dCBhbnkgY2hhcmdlIGJleW9uZCB0aGUgY29zdHMgb2YgZGF0YSB0cmFuc2ZlciwgYW5kIHBsYWNlIHByb21pbmVudCBub3RpY2VzIGluIHRoZSBkaXN0cmlidXRpb24gZXhwbGFpbmluZyB0aGlzLgorCitjLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgbW9kaWZpY2F0aW9ucyBpbmNsdWRlZCBpbiB0aGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4KKworNS4gWW91IG1heSB1c2UgdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSB0byBjb21waWxlLCBsaW5rIGFuZCBydW4gYXBwbGljYXRpb24gcHJvZ3JhbXMgbGVnYWxseSBkZXZlbG9wZWQgYnkgeW91IG9yIGJ5IG90aGVycy4KKworNi4gWW91IG1heSBkZXZlbG9wIGFwcGxpY2F0aW9uIHByb2dyYW1zLCByZXVzYWJsZSBjb21wb25lbnRzIGFuZCBvdGhlciBzb2Z0d2FyZSBpdGVtcyB0aGF0IGxpbmsgd2l0aCB0aGUgb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLiBUaGVzZSBpdGVtcywgd2hlbiBkaXN0cmlidXRlZCwgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKK2EuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCByZWNpcGllbnRzIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBvZiB0aGVzZSBpdGVtcyBhcmUgYWxzbyBhYmxlIHRvIHJlY2VpdmUgYW5kIHVzZSB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSB0byB0aGUgaXRlbXMgd2l0aG91dCBhbnkgY2hhcmdlIGJleW9uZCB0aGUgY29zdHMgb2YgZGF0YSB0cmFuc2Zlci4KK2IuIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGljZW5zZSBhbGwgcmVjaXBpZW50cyBvZiB5b3VyIGl0ZW1zIHRvIHVzZSBhbmQgcmUtZGlzdHJpYnV0ZSBvcmlnaW5hbCBhbmQgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIGl0ZW1zIGluIGJvdGggbWFjaGluZS1leGVjdXRhYmxlIGFuZCBzb3VyY2UgY29kZSBmb3Jtcy4gVGhlIHJlY2lwaWVudHMgbXVzdCBiZSBhYmxlIHRvIGRvIHNvIHdpdGhvdXQgYW55IGNoYXJnZXMgd2hhdHNvZXZlciwgYW5kIHRoZXkgbXVzdCBiZSBhYmxlIHRvIHJlLWRpc3RyaWJ1dGUgdG8gYW55b25lIHRoZXkgY2hvb3NlLgorCitjLiBJZiB0aGUgaXRlbXMgYXJlIG5vdCBhdmFpbGFibGUgdG8gdGhlIGdlbmVyYWwgcHVibGljLCBhbmQgdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSByZXF1ZXN0cyBhIGNvcHkgb2YgdGhlIGl0ZW1zLCB0aGVuIHlvdSBtdXN0IHN1cHBseSBvbmUuCisKK0xpbWl0YXRpb25zIG9mIExpYWJpbGl0eQorCitJbiBubyBldmVudCBzaGFsbCB0aGUgaW5pdGlhbCBkZXZlbG9wZXJzIG9yIGNvcHlyaWdodCBob2xkZXJzIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIC0gYnV0IG5vdCByZXN0cmljdGVkIHRvIC0gbG9zdCByZXZlbnVlIG9yIHByb2ZpdHMgb3Igb3RoZXIgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGV2ZW4gaWYgdGhleSBoYXZlIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLCBleGNlcHQgdG8gdGhlIGV4dGVudCBpbnZhcmlhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UuCisKK05vIFdhcnJhbnR5CisKK1RoZSBTb2Z0d2FyZSBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50IGFyZSBwcm92aWRlZCBBUyBJUyB3aXRoIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBJTkNMVURJTkcgVEhFIFdBUlJBTlRZIE9GIERFU0lHTiwgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQ2hvaWNlIG9mIExhdworCitUaGlzIGxpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIExhd3Mgb2YgTm9yd2F5LiBEaXNwdXRlcyBzaGFsbCBiZSBzZXR0bGVkIGJ5IE9zbG8gQ2l0eSBDb3VydC4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiNDBiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEKQEAgLTAsMCArMSw0MDEgQEAKKworUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlIHYxLjEKKworMS4gREVGSU5JVElPTlMKKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieQordGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZworcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mCitkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcwordGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorCisxLjcuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvcgorcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKK0NvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCit3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwKK0NvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5CitDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZAoraW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwKK2NvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlCitDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEKK2NvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtCithcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzCit1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCitvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiCitpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24KK2NvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucworKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaAorZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzEuMTMuICJSZWQgSGF0IEJyYW5kZWQgQ29kZSIgaXMgY29kZSB0aGF0IFJlZCBIYXQgZGlzdHJpYnV0ZXMgYW5kL29yCitwZXJtaXRzIG90aGVycyB0byBkaXN0cmlidXRlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljCitMaWNlbnNlLiBSZWQgSGF0J3MgQnJhbmRlZCBDb2RlIG1heSBjb250YWluIHBhcnQgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzIuIFNPVVJDRSBDT0RFIExJQ0VOU0UKKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZQorT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQKK29mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvCittYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIlV0aWxpemUiKSB0aGUgT3JpZ2luYWwgQ29kZSAob3IKK3BvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseQorbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kCitub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIKK01vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUKK01vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4KK3VubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYQorTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvCitVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50Cit0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlCitDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdAorbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUworCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieQordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdQorbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24KK3RoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUKK3JlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50CitvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUKK2F2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdmlhIGFuIGFjY2VwdGVkCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZQordmVyc2lvbiBhdmFpbGFibGUgYW5kIHRvIHRoZSBJbml0aWFsIERldmVsb3BlcjsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYQorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZQorKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikKK21vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUKK2F2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcworbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvZiB0aGUgTW9kaWZpY2F0aW9uIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFNvdXJjZSBpZiBhIGNvbnRhY3QgbWVhbnMKK2lzIHByb3ZpZGVkLiBSZWQgSGF0IHdpbGwgYmUgYWN0aW5nIGFzIG1haW50YWluZXIgb2YgdGhlIFNvdXJjZSBhbmQgbWF5IHByb3ZpZGUKK2FuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIG1lY2hhbmlzbSBmb3IgdGhlIE1vZGlmaWNhdGlvbiB0byBiZSBtYWRlIGF2YWlsYWJsZS4KK1lvdSBjYW4gY29udGFjdCBSZWQgSGF0IHRvIG1ha2UgdGhlIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYW5kIHRvIG5vdGlmeSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyLiAoaHR0cDovL3NvdXJjZXdhcmUuY3lnbnVzLmNvbS9lY29zLykKKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZQorQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluCitwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdQorbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQKKyJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4KK3N1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbgorc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZQorYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlCittYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkCit0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIFlvdSBvd24gb3IKK2NvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdAorYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQKK3RoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUKK3JlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlCitNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBTb3VyY2UgQ29kZS4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCityZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEKK25vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuCisKK0hvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdAorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdQorYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaAorQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91CitvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZgorU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYQorbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UKK2hhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkKK2luY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZAorQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIHVuZGVyIGEgbGljZW5zZQorb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQKK3RoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZQorZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MKK3JpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYKK1lvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlCitpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZAorYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZQordG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkKK2luY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoCit0ZXJtcyBZb3Ugb2ZmZXIuCisKK0lmIHlvdSBkaXN0cmlidXRlIGV4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbmluZyBDb3ZlcmVkIENvZGUsIHlvdSBtdXN0CityZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworcHJvdmlkZWQgd2l0aCB0aGUgcHJvZHVjdC4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdAorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYQorc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzCitMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3dpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24KK3RoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudAorcG9zc2libGU7IChiKSBjaXRlIHRoZSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhhdCBwcm9oaWJpdHMgeW91IGZyb20gYWRoZXJpbmcKK3RvIHRoZSBsaWNlbnNlOyBhbmQgKGMpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2gKK2Rlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZAorbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZQorZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUKK3N1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4gWW91IG11c3Qgc3VibWl0IHRoaXMgTEVHQUwgZmlsZSB0byBSZWQgSGF0IGZvciByZXZpZXcsIGFuZCBZb3UKK3dpbGwgbm90IGJlIGFibGUgdXNlIHRoZSBjb3ZlcmVkIGNvZGUgaW4gYW55IG1lYW5zIHVudGlsIHBlcm1pc3Npb24gaXMgZ3JhbnRlZAorZnJvbSBSZWQgSGF0IHRvIGFsbG93IGZvciB0aGUgaW5hYmlsaXR5IHRvIGNvbXBseSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uLgorCis1LiBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZQorbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCitSZWQgSGF0IG1heSBpbmNsdWRlIENvdmVyZWQgQ29kZSBpbiBwcm9kdWN0cyB3aXRob3V0IHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cworYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2Ugc3VjaCBhZGRpdGlvbmFsCitwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorCitSZWQgSGF0IG1heSBsaWNlbnNlIHRoZSBTb3VyY2UgQ29kZSBvZiBSZWQgSGF0IEJyYW5kZWQgQ29kZSB3aXRob3V0IFJlZCBIYXQKK0JyYW5kZWQgQ29kZSBiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBSZWQKK0hhdCBCcmFuZGVkIENvZGUgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4KK0NvbnRhY3QgUmVkIEhhdCBmb3IgZGV0YWlscyBvZiBhbHRlcm5hdGUgbGljZW5zaW5nIHRlcm1zIGF2YWlsYWJsZS4KKworNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UKKworNi4xLiBOZXcgVmVyc2lvbnMuCitSZWQgSGF0IG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8KK3RpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwKK1lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YKK3RoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBSZWQgSGF0LiBObyBvbmUgb3RoZXIgdGhhbiBSZWQgSGF0IGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgYmV5b25kIHdoYXQgaXMgZ3JhbnRlZCB1bmRlciB0aGlzCithbmQgc3Vic2VxdWVudCBMaWNlbnNlcy4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvCitpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlKSwgeW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcworIkVDT1MiLCAiZUNvcyIsICJSZWQgSGF0IiwgIlJIRVBMIiBvcgorYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgaW4geW91ciBsaWNlbnNlIGFuZCAoYikKK290aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoCitkaWZmZXIgZnJvbSB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcworTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLAorRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRQorUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVECitDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWQorT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SCitDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUworTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMKK0RJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmCitZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2gKK2FyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucword2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIKK0NPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0gKK1BBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLAorSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SCitNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNICitQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUworTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwKK0lOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXCitQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IKK0xJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORAorTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMKKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyCitzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcworc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLgorMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuCitHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aAoraGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUworCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIKK2hlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoCitwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0CitlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMKKyhleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcKK2l0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZQorcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4sCit0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsCitkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgKGV4Y2VwdGluZyBhbnkgZGlzcHV0ZSByZWxhdGluZyB0bworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cykgc2hhbGwgYmUgc3ViamVjdCB0byBmaW5hbCBhbmQgYmluZGluZworYXJiaXRyYXRpb24sIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55CithcmJpdHJhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGluIFNhbnRhIENsYXJhIENvdW50eSwKK0NhbGlmb3JuaWEsIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiBKQU1TL0VuZERpc3B1dGU7IGFuZCAoYykgYW55IGxpdGlnYXRpb24KK3JlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbAorQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhCitDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZQorYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbAorU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0Cit0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QKK2FwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMKKworRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uCiszLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mCitZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mCitDb3ZlcmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2gKK3JpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0bworZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKKzEzLiBBRERJVElPTkFMIFRFUk1TIEFQUExJQ0FCTEUgVE8gVEhFIFJFRCBIQVQgRUNPUyBQVUJMSUMgTElDRU5TRQorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBSZWQgSGF0IGZyb20gbGljZW5zaW5nCit1bmRlciBkaWZmZXJlbnQgdGVybXMgdGhhbiB0aGlzIExpY2Vuc2UgYW55IGNvZGUgd2hpY2ggUmVkIEhhdCBvdGhlcndpc2Ugd291bGQKK2hhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCitSZWQgSGF0IGFuZCBsb2dvIC0gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmsKK1JlZCBIYXQsIHRoZSBSZWQgSGF0IGxvZ28sIGVDb3MgbG9nbywgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUKK09yaWdpbmFsIENvZGUuIFlvdSBtYXkgY29udGFjdCBSZWQgSGF0IGZvciBwZXJtaXNzaW9uIHRvIGRpc3BsYXkgdGhlIFJlZCBIYXQKK2FuZCBlQ29zIG1hcmtzIGluIGVpdGhlciB0aGUgZG9jdW1lbnRhdGlvbiBvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGJleW9uZAordGhhdCByZXF1aXJlZCBpbiBFeGhpYml0IEIuCisKK0luYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIENvbnRyYWN0dWFsIE9ibGlnYXRpb24gLSBUbyB0aGUgZXh0ZW50IHRoYXQgUmVkIEhhdAoraXMgbGltaXRlZCBjb250cmFjdHVhbGx5IGZyb20gbWFraW5nIHRoaXJkIHBhcnR5IGNvZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIFJlZCBIYXQgbWF5IGNob29zZSB0byBpbnRlZ3JhdGUgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGludG8gQ292ZXJlZAorQ29kZSB3aXRob3V0IGJlaW5nIHJlcXVpcmVkIHRvIGRpc3RyaWJ1dGUgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGluIFNvdXJjZSBDb2RlCitmb3JtLCBldmVuIGlmIHN1Y2ggdGhpcmQgcGFydHkgY29kZSB3b3VsZCBvdGhlcndpc2UgYmUgY29uc2lkZXJlZAorIk1vZGlmaWNhdGlvbnMiIHVuZGVyIHRoaXMgTGljZW5zZS4KKworRVhISUJJVCBBCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UKK1ZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly8KK3d3dy5yZWRoYXQuY29tLworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCitmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0sIHJlbGVhc2VkCitTZXB0ZW1iZXIgMzAsIDE5OTguIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSZWQgSGF0LgorUG9ydGlvbnMgY3JlYXRlZCBieSBSZWQgSGF0IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4iCisKK0VYSElCSVQgQgorCitQYXJ0IG9mIHRoZSBzb2Z0d2FyZSBlbWJlZGRlZCBpbiB0aGlzIHByb2R1Y3QgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZQorT3BlcmF0aW5nIFN5c3RlbSwgYSB0cmFkZW1hcmsgb2YgUmVkIEhhdC4gUG9ydGlvbnMgY3JlYXRlZCBieSBSZWQgSGF0IGFyZQorQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIFJlZCBIYXQsIEluYy4gKGh0dHA6Ly93d3cucmVkaGF0LmNvbS8pLiBBbGwKK1JpZ2h0cyBSZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIElOIFRISVMgUFJPRFVDVCBXQVMgSU4gUEFSVCBQUk9WSURFRCBCWSBSRUQgSEFUIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQKK09GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWQorT0YgU1VDSCBEQU1BR0UuCisKKworCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4OTAwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEuMQpAQCAtMCwwICsxLDE1MSBAQAorCitSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UgdjEuMQorCisxLiBERUZJTklUSU9OUworCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMS4xMy4gIlJlZCBIYXQgQnJhbmRlZCBDb2RlIiBpcyBjb2RlIHRoYXQgUmVkIEhhdCBkaXN0cmlidXRlcyBhbmQvb3IgcGVybWl0cyBvdGhlcnMgdG8gZGlzdHJpYnV0ZSB1bmRlciBkaWZmZXJlbnQgdGVybXMgdGhhbiB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlLiBSZWQgSGF0YHMgQnJhbmRlZCBDb2RlIG1heSBjb250YWluIHBhcnQgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzIuIFNPVVJDRSBDT0RFIExJQ0VOU0UKKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJVdGlsaXplIikgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCiszLiBESVNUUklCVVRJT04gT0JMSUdBVElPTlMKKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZSBhbmQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE1vZGlmaWNhdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBTb3VyY2UgaWYgYSBjb250YWN0IG1lYW5zIGlzIHByb3ZpZGVkLiBSZWQgSGF0IHdpbGwgYmUgYWN0aW5nIGFzIG1haW50YWluZXIgb2YgdGhlIFNvdXJjZSBhbmQgbWF5IHByb3ZpZGUgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gbWVjaGFuaXNtIGZvciB0aGUgTW9kaWZpY2F0aW9uIHRvIGJlIG1hZGUgYXZhaWxhYmxlLiBZb3UgY2FuIGNvbnRhY3QgUmVkIEhhdCB0byBtYWtlIHRoZSBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFuZCB0byBub3RpZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiAoaHR0cDovL3NvdXJjZXdhcmUuY3lnbnVzLmNvbS9lY29zLykKKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiAKK0lmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLiAKK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLgorCitIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworSWYgeW91IGRpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSwgeW91IG11c3QgcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgcHJvZHVjdC4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IChiKSBjaXRlIHRoZSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhhdCBwcm9oaWJpdHMgeW91IGZyb20gYWRoZXJpbmcgdG8gdGhlIGxpY2Vuc2U7IGFuZCAoYykgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4gWW91IG11c3Qgc3VibWl0IHRoaXMgTEVHQUwgZmlsZSB0byBSZWQgSGF0IGZvciByZXZpZXcsIGFuZCBZb3Ugd2lsbCBub3QgYmUgYWJsZSB1c2UgdGhlIGNvdmVyZWQgY29kZSBpbiBhbnkgbWVhbnMgdW50aWwgcGVybWlzc2lvbiBpcyBncmFudGVkIGZyb20gUmVkIEhhdCB0byBhbGxvdyBmb3IgdGhlIGluYWJpbGl0eSB0byBjb21wbHkgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbi4KKworNS4gQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCitSZWQgSGF0IG1heSBpbmNsdWRlIENvdmVyZWQgQ29kZSBpbiBwcm9kdWN0cyB3aXRob3V0IHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4KKworUmVkIEhhdCBtYXkgbGljZW5zZSB0aGUgU291cmNlIENvZGUgb2YgUmVkIEhhdCBCcmFuZGVkIENvZGUgd2l0aG91dCBSZWQgSGF0IEJyYW5kZWQgQ29kZSBiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBSZWQgSGF0IEJyYW5kZWQgQ29kZSBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLiBDb250YWN0IFJlZCBIYXQgZm9yIGRldGFpbHMgb2YgYWx0ZXJuYXRlIGxpY2Vuc2luZyB0ZXJtcyBhdmFpbGFibGUuCisKKzYuIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFCisKKzYuMS4gTmV3IFZlcnNpb25zLgorUmVkIEhhdCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBSZWQgSGF0LiBObyBvbmUgb3RoZXIgdGhhbiBSZWQgSGF0IGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBiZXlvbmQgd2hhdCBpcyBncmFudGVkIHVuZGVyIHRoaXMgYW5kIHN1YnNlcXVlbnQgTGljZW5zZXMuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIHlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICJFQ09TIiwgImVDb3MiLCAiUmVkIEhhdCIsICJSSEVQTCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgaW4geW91ciBsaWNlbnNlIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUworCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgKGV4Y2VwdGluZyBhbnkgZGlzcHV0ZSByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nIGFyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueSBhcmJpdHJhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMKKworRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBDb3ZlcmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLgorCisxMy4gQURESVRJT05BTCBURVJNUyBBUFBMSUNBQkxFIFRPIFRIRSBSRUQgSEFUIEVDT1MgUFVCTElDIExJQ0VOU0UKKworTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgUmVkIEhhdCBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgdGhhbiB0aGlzIExpY2Vuc2UgYW55IGNvZGUgd2hpY2ggUmVkIEhhdCBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKK1JlZCBIYXQgYW5kIGxvZ28gLSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFyayBSZWQgSGF0LCB0aGUgUmVkIEhhdCBsb2dvLCBlQ29zIGxvZ28sIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBtYXkgY29udGFjdCBSZWQgSGF0IGZvciBwZXJtaXNzaW9uIHRvIGRpc3BsYXkgdGhlIFJlZCBIYXQgYW5kIGVDb3MgbWFya3MgaW4gZWl0aGVyIHRoZSBkb2N1bWVudGF0aW9uIG9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gYmV5b25kIHRoYXQgcmVxdWlyZWQgaW4gRXhoaWJpdCBCLgorCitJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBDb250cmFjdHVhbCBPYmxpZ2F0aW9uIC0gVG8gdGhlIGV4dGVudCB0aGF0IFJlZCBIYXQgaXMgbGltaXRlZCBjb250cmFjdHVhbGx5IGZyb20gbWFraW5nIHRoaXJkIHBhcnR5IGNvZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSwgUmVkIEhhdCBtYXkgY2hvb3NlIHRvIGludGVncmF0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW50byBDb3ZlcmVkIENvZGUgd2l0aG91dCBiZWluZyByZXF1aXJlZCB0byBkaXN0cmlidXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbiBTb3VyY2UgQ29kZSBmb3JtLCBldmVuIGlmIHN1Y2ggdGhpcmQgcGFydHkgY29kZSB3b3VsZCBvdGhlcndpc2UgYmUgY29uc2lkZXJlZCAiTW9kaWZpY2F0aW9ucyIgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitFWEhJQklUIEEKKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cucmVkaGF0LmNvbS8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgcmVsZWFzZWQgU2VwdGVtYmVyIDMwLCAxOTk4LiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUmVkIEhhdC4gUG9ydGlvbnMgY3JlYXRlZCBieSBSZWQgSGF0IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiIKKworRVhISUJJVCBCCisKK1BhcnQgb2YgdGhlIHNvZnR3YXJlIGVtYmVkZGVkIGluIHRoaXMgcHJvZHVjdCBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0sIGEgdHJhZGVtYXJrIG9mIFJlZCBIYXQuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIFJlZCBIYXQsIEluYy4gKGh0dHA6Ly93d3cucmVkaGF0LmNvbS8pLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIFJFRCBIQVQgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUEwtMS41IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUEwtMS41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTA4NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQTC0xLjUKQEAgLTAsMCArMSw1NDYgQEAKKworUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZSAxLjUgKFJQTDEuNSkKKworUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZSAoUlBMKQorCitWZXJzaW9uIDEuNSwgSnVseSAxNSwgMjAwNworCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNworVGVjaG5pY2FsIFB1cnN1aXQgSW5jLiwKK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1BSRUFNQkxFCisKK1RoZSBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIChSUEwpIGlzIGJhc2VkIG9uIHRoZSBjb25jZXB0IG9mIHJlY2lwcm9jaXR5IG9yLAoraWYgeW91IHByZWZlciwgZmFpcm5lc3MuCisKK0luIHNob3J0LCB0aGlzIGxpY2Vuc2UgZ3JldyBvdXQgb2YgYSBkZXNpcmUgdG8gY2xvc2UgbG9vcGhvbGVzIGluIHByZXZpb3VzIG9wZW4KK3NvdXJjZSBsaWNlbnNlcywgbG9vcGhvbGVzIHRoYXQgYWxsb3dlZCBwYXJ0aWVzIHRvIGFjcXVpcmUgb3BlbiBzb3VyY2Ugc29mdHdhcmUKK2FuZCBkZXJpdmUgZmluYW5jaWFsIGJlbmVmaXQgZnJvbSBpdCB3aXRob3V0IGhhdmluZyB0byByZWxlYXNlIHRoZWlyCitpbXByb3ZlbWVudHMgb3IgZGVyaXZhdGl2ZXMgdG8gdGhlIGNvbW11bml0eSB3aGljaCBlbmFibGVkIHRoZW0uIFRoaXMgb2NjdXJyZWQKK2FueSB0aW1lIGFuIGVudGl0eSBkaWQgbm90IHJlbGVhc2UgdGhlaXIgYXBwbGljYXRpb24gdG8gYSAidGhpcmQgcGFydHkiLgorCitXaGlsZSB0aGVyZSBpcyBhIGNlcnRhaW4gZnJlZWRvbSBpbiB0aGlzIG1vZGVsIG9mIGxpY2Vuc2luZywgaXQgc3RydWNrIHRoZQorYXV0aG9ycyBvZiB0aGUgUlBMIGFzIGJlaW5nIHVuZmFpciB0byB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGF0IGxhcmdlIGFuZCB0bwordGhlIG9yaWdpbmFsIGF1dGhvcnMgb2YgdGhlIHdvcmtzIGluIHBhcnRpY3VsYXIuIEFmdGVyIGFsbCwgYnVnIGZpeGVzLAorZXh0ZW5zaW9ucywgYW5kIG1lYW5pbmdmdWwgYW5kIHZhbHVhYmxlIGRlcml2YXRpdmVzIHdlcmUgbm90IGNvbnNpc3RlbnRseQorZmluZGluZyB0aGVpciB3YXkgYmFjayBpbnRvIHRoZSBjb21tdW5pdHkgd2hlcmUgdGhleSBjb3VsZCBmdWVsIGZ1cnRoZXIsIGFuZAorZmFzdGVyLCBncm93dGggYW5kIGV4cGFuc2lvbiBvZiB0aGUgb3ZlcmFsbCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBiYXNlLgorCitXaGlsZSB5b3Ugc2hvdWxkIGNsZWFybHkgcmVhZCBhbmQgdW5kZXJzdGFuZCB0aGUgZW50aXJlIGxpY2Vuc2UsIHRoZSBlc3NlbmNlIG9mCit0aGUgUlBMIGlzIGZvdW5kIGluIHR3byBkZWZpbml0aW9uczogIkRlcGxveSIgYW5kICJSZXF1aXJlZCBDb21wb25lbnRzIi4KKworUmVnYXJkaW5nIGRlcGxveW1lbnQsIHVuZGVyIHRoZSBSUEwgeW91ciBjaGFuZ2VzLCBidWcgZml4ZXMsIGV4dGVuc2lvbnMsIGV0Yy4KK211c3QgYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBhdCBsYXJnZSB3aGVuIHlvdSBEZXBsb3kgaW4KK2FueSBmb3JtIC0tIGVpdGhlciBpbnRlcm5hbGx5IG9yIHRvIGFuIG91dHNpZGUgcGFydHkuIE9uY2UgeW91IHN0YXJ0IHJ1bm5pbmcKK3RoZSBzb2Z0d2FyZSB5b3UgaGF2ZSB0byBzdGFydCBzaGFyaW5nIHRoZSBzb2Z0d2FyZS4KKworRnVydGhlciwgdW5kZXIgdGhlIFJQTCBhbGwgY29tcG9uZW50cyB5b3UgYXV0aG9yIGluY2x1ZGluZyBzY2hlbWFzLCBzY3JpcHRzLAorc291cmNlIGNvZGUsIGV0Yy4gLS0gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlgcmUgY29tcGlsZWQgaW50byBhIHNpbmdsZQorYmluYXJ5IG9yIHVzZWQgYXMgdHdvIGhhbHZlcyBvZiBjbGllbnQvc2VydmVyIGFwcGxpY2F0aW9uIC0tIG11c3QgYmUgc2hhcmVkLgorWW91IGhhdmUgdG8gc2hhcmUgdGhlIHdob2xlIHBpZSwgbm90IGFuIGlzb2xhdGVkIHNsaWNlIG9mIGl0LgorCitJbiBhZGRpdGlvbiB0byB0aGVzZSBnb2FscywgdGhlIFJQTCB3YXMgYXV0aG9yZWQgdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhcyBtYWludGFpbmVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpLgorCitUaGUgc3BlY2lmaWMgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2UgYXJlIGRlZmluZWQgaW4gdGhlIHJlbWFpbmRlcgorb2YgdGhpcyBkb2N1bWVudC4KKworTElDRU5TRSBURVJNUworCisxLjAgR2VuZXJhbDsgQXBwbGljYWJpbGl0eSAmYW1wOyBEZWZpbml0aW9ucy4gVGhpcyBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDEuNSAoIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtcyBvciBvdGhlciB3b3JrcyBhcyB3ZWxsIGFzIGFueQorYW5kIGFsbCB1cGRhdGVzIG9yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHNhaWQgcHJvZ3JhbXMgb3Igd29ya3MgKCJTb2Z0d2FyZSIpCitub3QgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSB3aGljaCB0aGUgU29mdHdhcmUgY29weXJpZ2h0IGhvbGRlcgorKCJMaWNlbnNvciIpIG1ha2VzIGF2YWlsYWJsZSBjb250YWluaW5nIGEgTGljZW5zZSBOb3RpY2UgKGhlcmVpbmFmdGVyIGRlZmluZWQpCitmcm9tIHRoZSBMaWNlbnNvciBzcGVjaWZ5aW5nIG9yIGFsbG93aW5nIHVzZSBvciBkaXN0cmlidXRpb24gdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UuIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOgorCisxLjEgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB3aG8gY3JlYXRlZCBvciBjb250cmlidXRlZCB0byB0aGUKK2NyZWF0aW9uIG9mIGFuIEV4dGVuc2lvbi4KKworMS4yICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgU2VydmUsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBMaWNlbnNlZCBTb2Z0d2FyZQorb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCBSZXNlYXJjaCBhbmQvb3IgUGVyc29uYWwgVXNlLCBhbmQgaW5jbHVkZXMKK3dpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBMaWNlbnNlZAorU29mdHdhcmUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIG90aGVyIHRoYW4gZm9yIFJlc2VhcmNoIGFuZC9vcgorUGVyc29uYWwgVXNlLCBhcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mCitMaWNlbnNlZCBTb2Z0d2FyZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworMS4zICJEZXJpdmF0aXZlIFdvcmtzIiBhcyB1c2VkIGluIHRoaXMgTGljZW5zZSBpcyBkZWZpbmVkIHVuZGVyIFUuUy4gY29weXJpZ2h0CitsYXcuCisKKzEuNCAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQKK2luIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEgc3VjaAorYXMgZG93bmxvYWQgZnJvbSBhbiBGVFAgc2VydmVyIG9yIHdlYiBzaXRlLCB3aGVyZSBzdWNoIG1lY2hhbmlzbSBpcyBwdWJsaWNseQorYWNjZXNzaWJsZS4KKworMS41ICJFeHRlbnNpb25zIiBtZWFucyBhbnkgTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3Jrcywgb3IgUmVxdWlyZWQKK0NvbXBvbmVudHMgYXMgdGhvc2UgdGVybXMgYXJlIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLgorCisxLjYgIkxpY2Vuc2UiIG1lYW5zIHRoaXMgUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZS4KKworMS43ICJMaWNlbnNlIE5vdGljZSIgbWVhbnMgYW55IG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBBLgorCisxLjggIkxpY2Vuc2VkIFNvZnR3YXJlIiBtZWFucyBhbnkgU29mdHdhcmUgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlLgorTGljZW5zZWQgU29mdHdhcmUgYWxzbyBpbmNsdWRlcyBhbGwgcHJldmlvdXMgRXh0ZW5zaW9ucyBmcm9tIGFueSBDb250cmlidXRvcgordGhhdCBZb3UgcmVjZWl2ZS4KKworMS45ICJMaWNlbnNvciIgbWVhbnMgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgYW55IFNvZnR3YXJlIHByZXZpb3VzbHkgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSB3aG8gcmVsZWFzZXMgdGhlIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLgorCisxLjEwICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb25zIHRvIG9yIGRlbGV0aW9ucyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3IKK3N0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIG9yIG90aGVyIHN0b3JhZ2UgY29udGFpbmluZyBMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgKGlpKQorYW55IG5ldyBmaWxlIG9yIHN0b3JhZ2UgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgKGlpaSkKK2FueSBmaWxlIG9yIHN0b3JhZ2Ugd2hpY2ggcmVwbGFjZXMgb3Igb3RoZXJ3aXNlIGFsdGVycyB0aGUgb3JpZ2luYWwKK2Z1bmN0aW9uYWxpdHkgb2YgTGljZW5zZWQgU29mdHdhcmUgYXQgcnVudGltZS4KKworMS4xMSAiUGVyc29uYWwgVXNlIiBtZWFucyB1c2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yCitoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbGBzIHVzZQorb2YgTGljZW5zZWQgU29mdHdhcmUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLAoraW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24KKyhjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsKSBkb2VzIG5vdCBxdWFsaWZ5IGFzIFBlcnNvbmFsIFVzZS4KKworMS4xMiAiUmVxdWlyZWQgQ29tcG9uZW50cyIgbWVhbnMgYW55IHRleHQsIHByb2dyYW1zLCBzY3JpcHRzLCBzY2hlbWEsCitpbnRlcmZhY2UgZGVmaW5pdGlvbnMsIGNvbnRyb2wgZmlsZXMsIG9yIG90aGVyIHdvcmtzIGNyZWF0ZWQgYnkgWW91IHdoaWNoIGFyZQorcmVxdWlyZWQgYnkgYSB0aGlyZCBwYXJ0eSBvZiBhdmVyYWdlIHNraWxsIHRvIHN1Y2Nlc3NmdWxseSBpbnN0YWxsIGFuZCBydW4KK0xpY2Vuc2VkIFNvZnR3YXJlIGNvbnRhaW5pbmcgWW91ciBNb2RpZmljYXRpb25zLCBvciB0byBpbnN0YWxsIGFuZCBydW4gWW91cgorRGVyaXZhdGl2ZSBXb3Jrcy4KKworMS4xMyAiUmVzZWFyY2giIG1lYW5zIGludmVzdGlnYXRpb24gb3IgZXhwZXJpbWVudGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZgordW5kZXJzdGFuZGluZyB0aGUgbmF0dXJlIGFuZCBsaW1pdHMgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBpdHMgcG90ZW50aWFsCit1c2VzLgorCisxLjE0ICJTZXJ2ZSIgbWVhbnMgdG8gZGVsaXZlciBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zIGJ5CittZWFucyBvZiBhIGNvbXB1dGVyIG5ldHdvcmsgdG8gb25lIG9yIG1vcmUgY29tcHV0ZXJzIGZvciBwdXJwb3NlcyBvZiBleGVjdXRpb24KK29mIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMuCisKKzEuMTUgIlNvZnR3YXJlIiBtZWFucyBhbnkgY29tcHV0ZXIgcHJvZ3JhbXMgb3Igb3RoZXIgd29ya3MgYXMgd2VsbCBhcyBhbnkKK3VwZGF0ZXMgb3IgbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2YgdGhvc2UgcHJvZ3JhbXMgb3Igd29ya3Mgd2hpY2ggYXJlCitkaXN0cmlidXRlZCBwdWJsaWNseSBieSBMaWNlbnNvci4KKworMS4xNiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlCitMaWNlbnNlZCBTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zLCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgY29udGFpbmVkCit0aGVyZWluLCBwbHVzIGFueSBhc3NvY2lhdGVkIHRleHQsIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIHByb2dyYW0gb3Igb3RoZXIKK2NvbXBvbmVudHMgcmVxdWlyZWQgYnkgYSB0aGlyZCBwYXJ0eSBvZiBhdmVyYWdlIHNraWxsIHRvIGJ1aWxkIGEgcnVubmluZwordmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgWW91ciBFeHRlbnNpb25zLgorCisxLjE3ICJVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlIiBtZWFucyBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbiBFWEhJQklUIEIuCisKKzEuMTggIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIgaW5jbHVkZXMgYW55IGVudGl0eQord2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUKKyJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IKK21hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwCitvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsCitvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuMCBBY2NlcHRhbmNlIE9mIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2Ugc2luY2UKK3lvdSBoYXZlIG5vdCBzaWduZWQgaXQsIGhvd2V2ZXIgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byB1c2UsCitjb3B5LCBkaXN0cmlidXRlLCBtb2RpZnksIG9yIGNyZWF0ZSBkZXJpdmF0aXZlcyBvZiBlaXRoZXIgdGhlIFNvZnR3YXJlIG9yIGFueQorRXh0ZW5zaW9ucyBjcmVhdGVkIGJ5IGEgQ29udHJpYnV0b3IuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmCit5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgcGVyZm9ybWluZyBhbnkgb2YgdGhlc2UgYWN0aW9ucworWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIFlvdXIgYWdyZWVtZW50IHRvIGJlIGJvdW5kIGJ5CithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFdJVEggQUxMIFRIRSBURVJNUyBBTkQKK0NPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFIERPIE5PVCBVU0UsIE1PRElGWSwgQ1JFQVRFIERFUklWQVRJVkVTLCBPUgorRElTVFJJQlVURSBUSEUgU09GVFdBUkUuIElGIElUIElTIElNUE9TU0lCTEUgRk9SIFlPVSBUTyBDT01QTFkgV0lUSCBBTEwgVEhFCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UgVEhFTiBZT1UgQ0FOIE5PVCBVU0UsIE1PRElGWSwgQ1JFQVRFCitERVJJVkFUSVZFUywgT1IgRElTVFJJQlVURSBUSEUgU09GVFdBUkUuCisKKzMuMCBHcmFudCBvZiBMaWNlbnNlIEZyb20gTGljZW5zb3IuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCit0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byBMaWNlbnNvcmBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGFuZCBhbnkKK3RoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMgZGVyaXZlZCBmcm9tIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZQordW5kZXIgdGhpcyBMaWNlbnNlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCiszLjEgVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZQorTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucyBpbiBib3RoIFNvdXJjZSBDb2RlIGZvcm0gb3IgYXMgYW4KK2V4ZWN1dGFibGUgcHJvZ3JhbS4KKworMy4yIENyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIChhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcpCitvZiBMaWNlbnNlZCBTb2Z0d2FyZSBieSBhZGRpbmcgdG8gb3IgZGVsZXRpbmcgZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZQorb2Ygc2FpZCBMaWNlbnNlZCBTb2Z0d2FyZS4KKworMy4zIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBMaWNlbnNvciwKK3RvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgb3IKK3BvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeSB0bworZW5hYmxlIFlvdSB0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkCitTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mLgorCiszLjQgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgbmV3IHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSB3aXRoCitkaWZmZXJlbnQgZmVhdHVyZXMsIHNwZWNpZmljYXRpb25zLCBjYXBhYmlsaXRpZXMsIGZ1bmN0aW9ucywgbGljZW5zaW5nIHRlcm1zLAorZ2VuZXJhbCBhdmFpbGFiaWxpdHkgb3Igb3RoZXIgY2hhcmFjdGVyaXN0aWNzLiBUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluIGFuZCB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgc2hhbGwgcmVtYWluIGluCitMaWNlbnNvciBhbmQvb3IgaXRzIENvbnRyaWJ1dG9ycy4KKworNC4wIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBDb250cmlidXRvci4gQnkgYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4KK1NlY3Rpb24gNiBiZWxvdywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktCitmcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gc2FpZCBDb250cmlidXRvcmBzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzLCBhbmQgYW55IHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMgZGVyaXZlZCBmcm9tCit0aGUgTGljZW5zZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCis0LjEgVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBhbnkKK0V4dGVuc2lvbnMgRGVwbG95ZWQgYnkgc3VjaCBDb250cmlidXRvciBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbiBib3RoIFNvdXJjZQorQ29kZSBmb3JtIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMgb3IgYXMKK3BhcnQgb2YgRGVyaXZhdGl2ZSBXb3Jrcy4KKworNC4yIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieQorQ29udHJpYnV0b3IsIHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgRXh0ZW5zaW9ucworb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5Cit0byBlbmFibGUgWW91IHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YKK0xpY2Vuc2VkIFNvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2YuCisKKzUuMCBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvCitncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55CitvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkKK3N0YXRlZCBoZXJlaW4uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDMgYW5kIDQsIG5vIG90aGVyIHBhdGVudAorcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGhlcmVpbi4gWW91ciBFeHRlbnNpb25zIG1heSByZXF1aXJlCithZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9ycyB3aGljaCBlYWNoIG1heSBncmFudAoraW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvcgorYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2VkIFNvZnR3YXJlLgorTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbQorbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgY29kZSB0aGF0IExpY2Vuc29yCitvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUuMSBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIExpY2Vuc29yIGFuZCBlYWNoCitDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBMaWNlbnNvciBvciBhbnkKK0NvbnRyaWJ1dG9yIHRoYXQgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gTGljZW5zb3IgYW5kIGVhY2gKK0NvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIKK2VudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzCithIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UKK2hlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcworcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFNvZnR3YXJlLCBpdCBpcyBZb3VyCityZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZAorU29mdHdhcmUuCisKKzYuMCBZb3VyIE9ibGlnYXRpb25zIEFuZCBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhbiBleHByZXNzCitjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgWW91IGhlcmVieSBhZ3JlZQordGhhdCBhbnkgTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3Jrcywgb3IgUmVxdWlyZWQgQ29tcG9uZW50cyAoY29sbGVjdGl2ZWx5CitFeHRlbnNpb25zKSB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBTZWN0aW9uIDQuIEFueSBFeHRlbnNpb25zCit0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBEZXBsb3llZCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDcuIFlvdQoraGVyZWJ5IGdyYW50IHRvIExpY2Vuc29yIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIHdvcmxkLXdpZGUsIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciB0aG9zZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIFlvdSBvd24gb3IKK2NvbnRyb2wgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmVzLAorc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgTGljZW5zZWQgU29mdHdhcmUsIGluIGFueSBmb3JtLiBBbnkgRXh0ZW5zaW9ucyBZb3UKK21ha2UgYW5kIERlcGxveSBtdXN0IGhhdmUgYSBkaXN0aW5jdCB0aXRsZSBzbyBhcyB0byByZWFkaWx5IHRlbGwgYW55CitzdWJzZXF1ZW50IHVzZXIgb3IgQ29udHJpYnV0b3IgdGhhdCB0aGUgRXh0ZW5zaW9ucyBhcmUgYnkgWW91LiBZb3UgbXVzdAoraW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIG9yIGRpcmVjdGlvbnMgb24gaG93IHRvIG9idGFpbiBhIGNvcHkgd2l0aAorZXZlcnkgY29weSBvZiB0aGUgRXh0ZW5zaW9ucyBZb3UgZGlzdHJpYnV0ZS4gWW91IGFncmVlIG5vdCB0byBvZmZlciBvciBpbXBvc2UKK2FueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwKK29yIGl0cyBFeHRlbnNpb25zIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLgorCis2LjEgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBZb3UgbXVzdCBtYWtlIGF2YWlsYWJsZSwgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRXh0ZW5zaW9ucyB0aGF0IFlvdSBEZXBsb3ksIHZpYSBhbgorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLiBUaGUgU291cmNlIENvZGUgZm9yIGFueSB2ZXJzaW9uIHRoYXQgWW91CitEZXBsb3kgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB3aXRoaW4gb25lICgxKSBtb250aCBvZiB3aGVuIHlvdSBEZXBsb3kgYW5kIG11c3QKK3JlbWFpbiBhdmFpbGFibGUgZm9yIG5vIGxlc3MgdGhhbiB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgWW91IGNlYXNlCit0byBEZXBsb3kuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHRvIGVhY2gKK3ZlcnNpb24gWW91IERlcGxveSByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciBhbnkKK2NvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgU2VjdGlvbiBpbiBleGNlc3Mgb2YgWW91cgorYWN0dWFsIGNvc3Qgb2YgZHVwbGljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBvZiBzYWlkIGNvcHkuCisKKzYuMiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IFlvdQorY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlIFNvdXJjZSBDb2RlLCBjbGVhcmx5CitkZXNjcmliaW5nIHRoZSBhZGRpdGlvbnMsIGNoYW5nZXMgb3IgZGVsZXRpb25zIFlvdSBtYWRlLiBZb3UgbXVzdCBpbmNsdWRlIGEKK3Byb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9ucyBhcmUgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK2Zyb20gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBpbmNsdWRlIHRoZSBuYW1lcyBvZiB0aGUgTGljZW5zb3IgYW5kIGFueQorQ29udHJpYnV0b3IgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGluIChpKSB0aGUgU291cmNlIENvZGUgYW5kIChpaSkgaW4gYW55Citub3RpY2UgZGlzcGxheWVkIGJ5IHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBZb3UgZGlzdHJpYnV0ZSBvciBpbiByZWxhdGVkCitkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgTGljZW5zZWQKK1NvZnR3YXJlLiBZb3UgbWF5IG5vdCBtb2RpZnkgb3IgZGVsZXRlIGFueSBwcmUtZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMsCitjaGFuZ2Ugbm90aWNlcyBvciBMaWNlbnNlIHRleHQgaW4gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHdpdGhvdXQgd3JpdHRlbgorcGVybWlzc2lvbiBvZiB0aGUgcmVzcGVjdGl2ZSBMaWNlbnNvciBvciBDb250cmlidXRvci4KKworNi4zIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCithLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB0byBhIHRoaXJkIHBhcnR5YHMKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhpcworTGljZW5zZSwgWW91IG11c3QgaW5jbHVkZSBhIGh1bWFuLXJlYWRhYmxlIGZpbGUgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbiB0aGF0CitkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEKK3JlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LgorCitiLiBDb250cmlidXRvciBBUElzLiBJZiBZb3VyIEV4dGVuc2lvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworaW50ZXJmYWNlICgiQVBJIikgYW5kIFlvdSBoYXZlIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgdGhhdCBhcmUKK3JlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgWW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMKK2luZm9ybWF0aW9uIGluIGEgaHVtYW4tcmVhZGFibGUgZmlsZSBzdXBwbGllZCB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uLgorCitjLiBSZXByZXNlbnRhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byA2LjMoYSkKK2Fib3ZlLCBZb3UgYmVsaWV2ZSB0aGF0IGFueSBFeHRlbnNpb25zIFlvdSBkaXN0cmlidXRlIGFyZSBZb3VyIG9yaWdpbmFsCitjcmVhdGlvbnMgYW5kIHRoYXQgWW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieQordGhpcyBMaWNlbnNlLgorCis2LjQgUmVxdWlyZWQgTm90aWNlcy4KKworYS4gTGljZW5zZSBUZXh0LiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIG9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8KK2FjcXVpcmUgYSBjb3B5IGluIGFueSBkb2N1bWVudGF0aW9uIFlvdSBwcm92aWRlIGFsb25nIHdpdGggdGhlIFNvdXJjZSBDb2RlIG9mCithbnkgRXh0ZW5zaW9ucyBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlLCB3aGVyZXZlciBZb3UgZGVzY3JpYmUKK3JlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBMaWNlbnNlZCBTb2Z0d2FyZS4KKworYi4gTGljZW5zZSBOb3RpY2UuIFlvdSBtdXN0IGR1cGxpY2F0ZSBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbiBFWEhJQklUIEEgKHRoZQorIkxpY2Vuc2UgTm90aWNlIikgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgY29weSBZb3UgZGlzdHJpYnV0ZQorb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBZb3VyIEV4dGVuc2lvbnMuIElmIFlvdSBjcmVhdGUgYW4gRXh0ZW5zaW9uLCBZb3UKK21heSBhZGQgWW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlIGFuZCBhY2NvbXBhbnlpbmcKK2RvY3VtZW50YXRpb24gYWxvbmcgd2l0aCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250cmlidXRpb24uIElmIGl0IGlzIG5vdAorcG9zc2libGUgdG8gcHV0IHRoZSBMaWNlbnNlIE5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzCitzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIExpY2Vuc2UgTm90aWNlIGluIGEgbG9jYXRpb24gd2hlcmUgYQordXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4KKworYy4gU291cmNlIENvZGUgQXZhaWxhYmlsaXR5LiBZb3UgbXVzdCBub3RpZnkgdGhlIHNvZnR3YXJlIGNvbW11bml0eSBvZiB0aGUKK2F2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZSB0byBZb3VyIEV4dGVuc2lvbnMgd2l0aGluIG9uZSAoMSkgbW9udGggb2YgdGhlIGRhdGUKK1lvdSBpbml0aWFsbHkgRGVwbG95IGFuZCBpbmNsdWRlIGluIHN1Y2ggbm90aWZpY2F0aW9uIGEgZGVzY3JpcHRpb24gb2YgdGhlCitFeHRlbnNpb25zLCBhbmQgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBhY3F1aXJlIHRoZSBTb3VyY2UgQ29kZS4gU2hvdWxkIHN1Y2gKK2luc3RydWN0aW9ucyBjaGFuZ2UgeW91IG11c3Qgbm90aWZ5IHRoZSBzb2Z0d2FyZSBjb21tdW5pdHkgb2YgcmV2aXNlZAoraW5zdHJ1Y3Rpb25zIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHRoZSBkYXRlIG9mIGNoYW5nZS4gWW91IG11c3QgcHJvdmlkZQorbm90aWZpY2F0aW9uIGJ5IHBvc3RpbmcgdG8gYXBwcm9wcmlhdGUgbmV3cyBncm91cHMsIG1haWxpbmcgbGlzdHMsIHdlYmxvZ3MsIG9yCitvdGhlciBzaXRlcyB3aGVyZSBhIHB1YmxpY2x5IGFjY2Vzc2libGUgc2VhcmNoIGVuZ2luZSB3b3VsZCByZWFzb25hYmx5IGJlCitleHBlY3RlZCB0byBpbmRleCB5b3VyIHBvc3QgaW4gcmVsYXRpb25zaGlwIHRvIHF1ZXJpZXMgcmVnYXJkaW5nIHRoZSBMaWNlbnNlZAorU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucy4KKworZC4gVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uLiBZb3UgbXVzdCBkdXBsaWNhdGUgYW55IG5vdGljZSBjb250YWluZWQgaW4KK0VYSElCSVQgQiAodGhlICJVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlIikgaW4gZWFjaCB1c2VyLXZpc2libGUgZGlzcGxheQorb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGFuZCBZb3VyIEV4dGVuc2lvbnMgd2hpY2ggZGVsaW5lYXRlcyBjb3B5cmlnaHQsCitvd25lcnNoaXAsIG9yIHNpbWlsYXIgYXR0cmlidXRpb24gaW5mb3JtYXRpb24uIElmIFlvdSBjcmVhdGUgYW4gRXh0ZW5zaW9uLAorWW91IG1heSBhZGQgWW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IsIGFuZCBhZGQgWW91ciBhdHRyaWJ1dGlvbiBub3RpY2UsIGFzIGFuCitlcXVhbGx5IHZpc2libGUgYW5kIGZ1bmN0aW9uYWwgZWxlbWVudCBvZiBhbnkgVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZQorY29udGVudC4gVG8gZW5zdXJlIHByb3BlciBhdHRyaWJ1dGlvbiwgWW91IG11c3QgYWxzbyBpbmNsdWRlIHN1Y2ggVXNlci1WaXNpYmxlCitBdHRyaWJ1dGlvbiBOb3RpY2UgaW4gYXQgbGVhc3Qgb25lIGxvY2F0aW9uIGluIHRoZSBTb2Z0d2FyZSBkb2N1bWVudGF0aW9uCit3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggbm90aWNlLgorCis2LjUgQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZgorTGljZW5zZWQgU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24KK2JlaGFsZiBvZiB0aGUgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgb3RoZXIKK2FncmVlbWVudHMgYmV0d2VlbiB5b3UgYW5kIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQKK2FueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UKK2Fsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIExpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IKK2FueSBsaWFiaWxpdHkgcGx1cyBhdHRvcm5leSBmZWVzLCBjb3N0cywgYW5kIHJlbGF0ZWQgZXhwZW5zZXMgZHVlIHRvIGFueSBzdWNoCithY3Rpb24gb3IgY2xhaW0gaW5jdXJyZWQgYnkgdGhlIExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YKK3dhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworNi42IENvbmZsaWN0cyBXaXRoIE90aGVyIExpY2Vuc2VzLiBXaGVyZSBhbnkgcG9ydGlvbiBvZiBZb3VyIEV4dGVuc2lvbnMsIGJ5Cit2aXJ0dWUgb2YgYmVpbmcgRGVyaXZhdGl2ZSBXb3JrcyBvZiBhbm90aGVyIHByb2R1Y3Qgb3Igc2ltaWxhciBjaXJjdW1zdGFuY2UsCitmYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbm90aGVyIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2Ugc2hvdWxkIGJlCitob25vcmVkIGhvd2V2ZXIgWW91IG11c3QgYWxzbyBtYWtlIFlvdXIgRXh0ZW5zaW9ucyBhdmFpbGFibGUgdW5kZXIgdGhpcworTGljZW5zZS4gSWYgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBjb250aW51ZSB0byBjb25mbGljdCB3aXRoIHRoZSB0ZXJtcyBvZgordGhlIG90aGVyIGxpY2Vuc2UgeW91IG1heSB3cml0ZSB0aGUgTGljZW5zb3IgZm9yIHBlcm1pc3Npb24gdG8gcmVzb2x2ZSB0aGUKK2NvbmZsaWN0IGluIGEgZmFzaGlvbiB0aGF0IHJlbWFpbnMgY29uc2lzdGVudCB3aXRoIHRoZSBpbnRlbnQgb2YgdGhpcyBMaWNlbnNlLgorU3VjaCBwZXJtaXNzaW9uIHdpbGwgYmUgZ3JhbnRlZCBhdCB0aGUgc29sZSBkaXNjcmV0aW9uIG9mIHRoZSBMaWNlbnNvci4KKworNy4wIFZlcnNpb25zIG9mIFRoaXMgTGljZW5zZS4gTGljZW5zb3IgbWF5IHB1Ymxpc2ggZnJvbSB0aW1lIHRvIHRpbWUgcmV2aXNlZAordmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIE9uY2UgTGljZW5zZWQgU29mdHdhcmUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEKK3BhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZQordGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIExpY2Vuc2VkIFNvZnR3YXJlIHVuZGVyCit0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTGljZW5zb3IuIE5vCitvbmUgb3RoZXIgdGhhbiBMaWNlbnNvciBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0bworTGljZW5zZWQgU29mdHdhcmUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzcuMSBJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCB3aGljaCBZb3UgbWF5IGRvCitvbmx5IGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIHNvZnR3YXJlIHRoYXQgaXMgbm90IGFscmVhZHkgTGljZW5zZWQgU29mdHdhcmUKK3VuZGVyIHRoaXMgTGljZW5zZSwgWW91IG11c3QgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IGl0IGlzIG5vdCBjb25mdXNpbmdseQorc2ltaWxhciB0byB0aGlzIExpY2Vuc2UsIGFuZCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIGxpY2Vuc2UgY29udGFpbnMKK3Rlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLiBJbiBzbyBuYW1pbmcgWW91ciBsaWNlbnNlLCBZb3UgbWF5IG5vdAordXNlIGFueSB0cmFkZW1hcmsgb2YgTGljZW5zb3Igb3Igb2YgYW55IENvbnRyaWJ1dG9yLiBTaG91bGQgWW91ciBtb2RpZmljYXRpb25zCit0byB0aGlzIExpY2Vuc2UgYmUgbGltaXRlZCB0byBhbHRlcmF0aW9uIG9mIGEpIFNlY3Rpb24gMTMuOCBzb2xlbHkgdG8gbW9kaWZ5Cit0aGUgbGVnYWwgSnVyaXNkaWN0aW9uIG9yIFZlbnVlIGZvciBkaXNwdXRlcywgYikgRVhISUJJVCBBIHNvbGVseSB0byBkZWZpbmUKK0xpY2Vuc2UgTm90aWNlIHRleHQsIG9yIGMpIHRvIEVYSElCSVQgQiBzb2xlbHkgdG8gZGVmaW5lIGEgVXNlci1WaXNpYmxlCitBdHRyaWJ1dGlvbiBOb3RpY2UsIFlvdSBtYXkgY29udGludWUgdG8gcmVmZXIgdG8gWW91ciBMaWNlbnNlIGFzIHRoZQorUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZSBvciBzaW1wbHkgdGhlIFJQTC4KKworOC4wIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExJQ0VOU0VEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRQorT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIElTIEZSRUUKK09GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KK0ZVUlRIRVIgVEhFUkUgSVMgTk8gV0FSUkFOVFkgTUFERSBBTkQgQUxMIElNUExJRUQgV0FSUkFOVElFUyBBUkUgRElTQ0xBSU1FRAorVEhBVCBUSEUgTElDRU5TRUQgU09GVFdBUkUgTUVFVFMgT1IgQ09NUExJRVMgV0lUSCBBTlkgREVTQ1JJUFRJT04gT0YKK1BFUkZPUk1BTkNFIE9SIE9QRVJBVElPTiwgU0FJRCBDT01QQVRJQklMSVRZIEFORCBTVUlUQUJJTElUWSBCRUlORyBZT1VSCitSRVNQT05TSUJJTElUWS4gTElDRU5TT1IgRElTQ0xBSU1TIEFOWSBXQVJSQU5UWSwgSU1QTElFRCBPUiBFWFBSRVNTRUQsIFRIQVQKK0FOWSBDT05UUklCVVRPUmBTIEVYVEVOU0lPTlMgTUVFVCBBTlkgU1RBTkRBUkQgT0YgQ09NUEFUSUJJTElUWSBPUiBERVNDUklQVElPTgorT0YgUEVSRk9STUFOQ0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUNFTlNFRCBTT0ZUV0FSRSBJUyBXSVRIIFlPVS4gU0hPVUxEIExJQ0VOU0VEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkKK1JFU1BFQ1QsIFlPVSAoQU5EIE5PVCBUSEUgTElDRU5TT1IgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QKK09GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMKK0xJQ0VOU09SIFdJTEwgTk9UIFNVUFBPUlQgVEhJUyBTT0ZUV0FSRSBBTkQgSVMgVU5ERVIgTk8gT0JMSUdBVElPTiBUTyBJU1NVRQorVVBEQVRFUyBUTyBUSElTIFNPRlRXQVJFLiBMSUNFTlNPUiBIQVMgTk8gS05PV0xFREdFIE9GIEVSUkFOVCBDT0RFIE9SIFZJUlVTIElOCitUSElTIFNPRlRXQVJFLCBCVVQgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBJUyBGUkVFIEZST00gU1VDSCBFUlJPUlMKK09SIFZJUlVTRVMuIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiBOTyBVU0UgT0YgTElDRU5TRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMKK0RJU0NMQUlNRVIuCisKKzkuMCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLAorV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRQorTElDRU5TT1IsIEFOWSBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIExJQ0VOU0VEIFNPRlRXQVJFLCBPUiBBTlkKK1NVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSCitGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLAorRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSAorT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQKK0FQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUworRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4wIEhpZ2ggUmlzayBBY3Rpdml0aWVzLiBUSEUgTElDRU5TRUQgU09GVFdBUkUgSVMgTk9UIEZBVUxULVRPTEVSQU5UIEFORCBJUworTk9UIERFU0lHTkVELCBNQU5VRkFDVFVSRUQsIE9SIElOVEVOREVEIEZPUiBVU0UgT1IgRElTVFJJQlVUSU9OIEFTIE9OLUxJTkUKK0NPTlRST0wgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgUkVRVUlSSU5HIEZBSUwtU0FGRSBQRVJGT1JNQU5DRSwKK1NVQ0ggQVMgSU4gVEhFIE9QRVJBVElPTiBPRiBOVUNMRUFSIEZBQ0lMSVRJRVMsIEFJUkNSQUZUIE5BVklHQVRJT04gT1IKK0NPTU1VTklDQVRJT05TIFNZU1RFTVMsIEFJUiBUUkFGRklDIENPTlRST0wsIERJUkVDVCBMSUZFIFNVUFBPUlQgTUFDSElORVMsIE9SCitXRUFQT05TIFNZU1RFTVMsIElOIFdISUNIIFRIRSBGQUlMVVJFIE9GIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBDT1VMRCBMRUFECitESVJFQ1RMWSBUTyBERUFUSCwgUEVSU09OQUwgSU5KVVJZLCBPUiBTRVZFUkUgUEhZU0lDQUwgT1IgRU5WSVJPTk1FTlRBTCBEQU1BR0UKKygiSElHSCBSSVNLIEFDVElWSVRJRVMiKS4gTElDRU5TT1IgQU5EIENPTlRSSUJVVE9SUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkgT0YgRklUTkVTUyBGT1IgSElHSCBSSVNLIEFDVElWSVRJRVMuCisKKzExLjAgUmVzcG9uc2liaWxpdHkgZm9yIENsYWltcy4gQXMgYmV0d2VlbiBMaWNlbnNvciBhbmQgQ29udHJpYnV0b3JzLCBlYWNoCitwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCitvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hpY2ggc3BlY2lmaWNhbGx5CitkaXNjbGFpbXMgd2FycmFudGllcyBhbmQgbGltaXRzIGFueSBsaWFiaWxpdHkgb2YgdGhlIExpY2Vuc29yLiBUaGlzIHBhcmFncmFwaAoraXMgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFuZCBjb250cm9sbGVkIGJ5IHRoZSBEaXNjbGFpbWVyIE9mCitXYXJyYW50aWVzIG9mIFNlY3Rpb24gOCwgdGhlIExpbWl0YXRpb24gT2YgRGFtYWdlcyBpbiBTZWN0aW9uIDksIGFuZCB0aGUKK2Rpc2NsYWltZXIgYWdhaW5zdCB1c2UgZm9yIEhpZ2ggUmlzayBBY3Rpdml0aWVzIGluIFNlY3Rpb24gMTAuIFRoZSBMaWNlbnNvcgoraGFzIHRoZXJlYnkgZGlzY2xhaW1lZCBhbGwgd2FycmFudGllcyBhbmQgbGltaXRlZCBhbnkgZGFtYWdlcyB0aGF0IGl0IGlzIG9yCittYXkgYmUgbGlhYmxlIGZvci4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBMaWNlbnNvciBhbmQgQ29udHJpYnV0b3JzIHRvCitkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgU2VjdGlvbnMgOCwgOSwgYW5kIDEwLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvcgorc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEyLjAgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQoraW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjYgb3IgaWYKK2FwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kIG9yIHNwZWNpZmljYWxseQorY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMywgNCBhbmQvb3IgNiwgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGFueQorb2YgdGhvc2UgU2VjdGlvbnMsIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIExpY2Vuc2VkCitTb2Z0d2FyZS4KKworMTIuMSBBdXRvbWF0aWMgVGVybWluYXRpb24gVXBvbiBCcmVhY2guIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkCitoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMKK2hlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlCitvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHRoYXQgYXJlIHByb3Blcmx5CitncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB0aGF0LCBieQordGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsCitzaGFsbCBzdXJ2aXZlLgorCisxMi4yIFRlcm1pbmF0aW9uIFVwb24gQXNzZXJ0aW9uIG9mIFBhdGVudCBJbmZyaW5nZW1lbnQuIElmIFlvdSBpbml0aWF0ZQorbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkKK2p1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgTGljZW5zb3Igb3IgYSBDb250cmlidXRvciAoTGljZW5zb3Igb3IgQ29udHJpYnV0b3IKK2FnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFuIGFjdGlvbiBpcyByZWZlcnJlZCB0byBoZXJlaW4gYXMgIlJlc3BvbmRlbnQiKQorYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LAordGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFJlc3BvbmRlbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDMgb3IKKzQgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5IHVwb24gc2l4dHkgKDYwKSBkYXlzIG5vdGljZQorZnJvbSBSZXNwb25kZW50ICh0aGUgIk5vdGljZSBQZXJpb2QiKSB1bmxlc3Mgd2l0aGluIHRoYXQgTm90aWNlIFBlcmlvZCBZb3UKK2VpdGhlciBhZ3JlZSBpbiB3cml0aW5nIChpKSB0byBwYXkgUmVzcG9uZGVudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmx5Cityb3lhbHR5IGZvciBZb3VyIHBhc3Qgb3IgZnV0dXJlIHVzZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBtYWRlIGJ5IHN1Y2gKK1Jlc3BvbmRlbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byBMaWNlbnNlZAorU29mdHdhcmUgYWdhaW5zdCBzdWNoIFJlc3BvbmRlbnQuIElmIHdpdGhpbiBzYWlkIE5vdGljZSBQZXJpb2QgYSByZWFzb25hYmxlCityb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUKK3BhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5CitMaWNlbnNvciB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMyBhbmQgNCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUKK2V4cGlyYXRpb24gb2Ygc2FpZCBOb3RpY2UgUGVyaW9kLgorCisxMi4zIFJlYXNvbmFibGUgVmFsdWUgb2YgVGhpcyBMaWNlbnNlLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudAorY2xhaW0gYWdhaW5zdCBSZXNwb25kZW50IGFsbGVnaW5nIHRoYXQgTGljZW5zZWQgU29mdHdhcmUgZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieQorbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50CitsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHNhaWQKK1Jlc3BvbmRlbnQgdW5kZXIgU2VjdGlvbnMgMyBhbmQgNCBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcKK3RoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworMTIuNCBObyBSZXRyb2FjdGl2ZSBFZmZlY3Qgb2YgVGVybWluYXRpb24uIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlcgordGhpcyBTZWN0aW9uIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBsaWNlbnNlcyB0bworZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55CitkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworMTMuMCBNaXNjZWxsYW5lb3VzLgorCisxMy4xIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIgorYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mCisiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlCitkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4KK0NvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQKKyhKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIExpY2Vuc2VkIFNvZnR3YXJlIHdpdGggb25seQordGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcKK2FuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUsIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uCitiZXR3ZWVuIG9yIGFtb25nIFlvdSwgTGljZW5zb3IsIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQKK3RvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlLCBvciBvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIExpY2Vuc29yYHMKK3JpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIHN1YmNvbnRyYWN0LCBtYXJrZXQsIG9yIGRpc3RyaWJ1dGUKK3RlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvcgorb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgRXh0ZW5zaW9ucyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0LCBvcgorZGlzdHJpYnV0ZS4KKworMTMuNCBDb25zZW50IFRvIEJyZWFjaCBOb3QgV2FpdmVyLiBGYWlsdXJlIGJ5IExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIHRvCitlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQKK29mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4KKworMTMuNSBTZXZlcmFiaWxpdHkuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZwordGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeQordG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTMuNiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uIElmIGl0IGlzIGltcG9zc2libGUgZm9yCitZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IKK2FsbCBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLAordGhlbiBZb3UgY2Fubm90IHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZS4KKworMTMuNyBFeHBvcnQgUmVzdHJpY3Rpb25zLiBZb3UgbWF5IGJlIHJlc3RyaWN0ZWQgd2l0aCByZXNwZWN0IHRvIGRvd25sb2FkaW5nIG9yCitvdGhlcndpc2UgYWNxdWlyaW5nLCBleHBvcnRpbmcsIG9yIHJlZXhwb3J0aW5nIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBhbnkKK3VuZGVybHlpbmcgaW5mb3JtYXRpb24gb3IgdGVjaG5vbG9neSBieSBVbml0ZWQgU3RhdGVzIGFuZCBvdGhlciBhcHBsaWNhYmxlCitsYXdzIGFuZCByZWd1bGF0aW9ucy4gQnkgZG93bmxvYWRpbmcgb3IgYnkgb3RoZXJ3aXNlIG9idGFpbmluZyB0aGUgTGljZW5zZWQKK1NvZnR3YXJlLCBZb3UgYXJlIGFncmVlaW5nIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjb21wbGlhbmNlIHdpdGggYWxsCithcHBsaWNhYmxlIGxhd3MgYW5kIHJlZ3VsYXRpb25zLgorCisxMy44IEFyYml0cmF0aW9uLCBKdXJpc2RpY3Rpb24gJmFtcDsgVmVudWUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorQ29sb3JhZG8gbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzCitvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBZb3UgZXhwcmVzc2x5IGFncmVlIHRoYXQKK2FueSBkaXNwdXRlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJtaXR0ZWQgdG8gYmluZGluZyBhcmJpdHJhdGlvbgordW5kZXIgdGhlIHJ1bGVzIHRoZW4gcHJldmFpbGluZyBvZiB0aGUgQW1lcmljYW4gQXJiaXRyYXRpb24gQXNzb2NpYXRpb24uIFlvdQorZnVydGhlciBhZ3JlZSB0aGF0IEFkYW1zIENvdW50eSwgQ29sb3JhZG8gVVNBIGlzIHByb3BlciB2ZW51ZSBhbmQgZ3JhbnQgc3VjaAorYXJiaXRyYXRpb24gcHJvY2VlZGluZyBqdXJpc2RpY3Rpb24gYXMgbWF5IGJlIGFwcHJvcHJpYXRlIGZvciBwdXJwb3NlcyBvZgorcmVzb2x2aW5nIGFueSBkaXNwdXRlIHVuZGVyIHRoaXMgTGljZW5zZS4gSnVkZ2VtZW50IHVwb24gYW55IGF3YXJkIG1hZGUgaW4KK2FyYml0cmF0aW9uIG1heSBiZSBlbnRlcmVkIGFuZCBlbmZvcmNlZCBpbiBhbnkgY291cnQgb2YgY29tcGV0ZW50CitqdXJpc2RpY3Rpb24uIFRoZSBhcmJpdHJhdG9yIHNoYWxsIGF3YXJkIGF0dG9ybmV5YHMgZmVlcyBhbmQgY29zdHMgb2YKK2FyYml0cmF0aW9uIHRvIHRoZSBwcmV2YWlsaW5nIHBhcnR5LiBTaG91bGQgZWl0aGVyIHBhcnR5IGZpbmQgaXQgbmVjZXNzYXJ5IHRvCitlbmZvcmNlIGl0cyBhcmJpdHJhdGlvbiBhd2FyZCBvciBzZWVrIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9mIHN1Y2ggYXdhcmQgaW4gYQorY2l2aWwgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQKK3RvIHJlYXNvbmFibGUgYXR0b3JuZXlgcyBmZWVzIGFuZCBjb3N0cy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucworQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5CitleGNsdWRlZC4gWW91IGFuZCBMaWNlbnNvciBleHByZXNzbHkgd2FpdmUgYW55IHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55CitsaXRpZ2F0aW9uIGNvbmNlcm5pbmcgTGljZW5zZWQgU29mdHdhcmUgb3IgdGhpcyBMaWNlbnNlLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24KK3RoYXQgcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUKK2RyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTMuOSBFbnRpcmUgQWdyZWVtZW50LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuCisKK0VYSElCSVQgQQorCitUaGUgTGljZW5zZSBOb3RpY2UgYmVsb3cgbXVzdCBhcHBlYXIgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkKK2NvcHkgWW91IGRpc3RyaWJ1dGUgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIGFueSBFeHRlbnNpb25zIHRoZXJldG86CisKK1VubGVzcyBleHBsaWNpdGx5IGFjcXVpcmVkIGFuZCBsaWNlbnNlZCBmcm9tIExpY2Vuc29yIHVuZGVyIGFub3RoZXIKK2xpY2Vuc2UsIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJlY2lwcm9jYWwgUHVibGljCitMaWNlbnNlICgiUlBMIikgVmVyc2lvbiAxLjUsIG9yIHN1YnNlcXVlbnQgdmVyc2lvbnMgYXMgYWxsb3dlZCBieSB0aGUgUlBMLAorYW5kIFlvdSBtYXkgbm90IGNvcHkgb3IgdXNlIHRoaXMgZmlsZSBpbiBlaXRoZXIgc291cmNlIGNvZGUgb3IgZXhlY3V0YWJsZQorZm9ybSwgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIFJQTC4KKworQWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBSUEwgaXMgcHJvdmlkZWQgc3RyaWN0bHkgb24gYW4gIkFTCitJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORAorTElDRU5TT1IgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVAorTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCwgT1IgTk9OLUlORlJJTkdFTUVOVC4gU2VlIHRoZSBSUEwgZm9yIHNwZWNpZmljCitsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgUlBMLgorCitFWEhJQklUIEIKKworVGhlIFVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UgYmVsb3csIHdoZW4gcHJvdmlkZWQsIG11c3QgYXBwZWFyIGluIGVhY2gKK3VzZXItdmlzaWJsZSBkaXNwbGF5IGFzIGRlZmluZWQgaW4gU2VjdGlvbiA2LjQgKGQpOgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQU0wtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUFNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgxNGY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUFNMLTEuMApAQCAtMCwwICsxLDE4MiBAQAorCitSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wCisKKyhSZXYuIERhdGUgT2N0b2JlciAyOCwgMjAwMikKKworQWxzbyBhdmFpbGFibGUgaW4gdGV4dCBmb3JtYXQuCisKKzEuIEdlbmVyYWwgRGVmaW5pdGlvbnMuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggUmVhbE5ldHdvcmtzLCBJbmMuLCBvciBhbnkgb3RoZXIgZW50aXR5IHRoYXQgZWxlY3RzIHRvIHVzZSB0aGlzIGxpY2Vuc2UsICgiTGljZW5zb3IiKSBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSBMaWNlbnNvciBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwgQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjAgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSAoIkxpY2Vuc2UiKS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZS4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgWW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZywgY29weWluZyBvciBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgc29mdHdhcmUpLCBZb3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIEluIGFkZGl0aW9uLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBieSBjbGlja2luZyB0aGUgQWNjZXB0IGJ1dHRvbiBvciBkb3dubG9hZGluZyB0aGUgc29mdHdhcmUuIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOgorCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIExpY2Vuc29yIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCAoaSkgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIExpY2Vuc29yIGFuZCAoaWkpIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdXNpbmcgb3IgbWFraW5nIHRoZSBPcmlnaW5hbCBDb2RlIGFsb25lIGFuZCBub3QgaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZTsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCAoaSkgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSBhcmUgaW5mcmluZ2VkIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBieSB1c2luZyBvciBtYWtpbmcgWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKzEuMiAiQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSIgbWVhbnMgYW55IG9uZSBvZiB0aGUgbGljZW5zZXMgbGlzdGVkIG9uIEV4aGliaXQgQiBvciBhdCBodHRwczovL3d3dy5oZWxpeGNvbW11bml0eS5vcmcvY29udGVudC9jb21wbGljZW5zZSBvciBvdGhlciBsaWNlbnNlcyBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBieSBMaWNlbnNvciBpbiB3cml0aW5nLiBOb3R3aXRoc3RhbmRpbmcgYW55IHRlcm0gdG8gdGhlIGNvbnRyYXJ5IGluIGFueSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlLCBhbnkgY29kZSBjb3ZlcmVkIGJ5IGFueSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIHRoYXQgaXMgdXNlZCB3aXRoIENvdmVyZWQgQ29kZSBtdXN0IGJlIG1hZGUgcmVhZGlseSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybWF0IGZvciByb3lhbHR5LWZyZWUgdXNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSBvciB0aGlzIExpY2Vuc2UuCisKKzEuMyAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS40ICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjUgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworMS42ICJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGVpdGhlciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3LCBhbmQgaW5jbHVkaW5nIGFueSB3b3JrIGNvbnRhaW5pbmcgb3IgaW5jbHVkaW5nIGFueSBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgb3IgTW9kaWZpY2F0aW9ucywgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIERlcml2YXRpdmUgV29yayBhbHNvIGluY2x1ZGVzIGFueSB3b3JrIHdoaWNoIGNvbWJpbmVzIGFueSBwb3J0aW9uIG9mIENvdmVyZWQgQ29kZSBvciBNb2RpZmljYXRpb25zIHdpdGggY29kZSBub3Qgb3RoZXJ3aXNlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNyAiRXh0ZXJuYWxseSBEZXBsb3kiIG1lYW5zIHRvIERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIGluIGFueSB3YXkgdGhhdCBtYXkgYmUgYWNjZXNzZWQgb3IgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHVzZWQgdG8gcHJvdmlkZSBhbnkgc2VydmljZXMgdG8gYW55b25lIG90aGVyIHRoYW4gWW91LCBvciB1c2VkIGluIGFueSB3YXkgdG8gZGVsaXZlciBhbnkgY29udGVudCB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIENvdmVyZWQgQ29kZSBpcyBkaXN0cmlidXRlZCB0byB0aG9zZSBwYXJ0aWVzLCBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrLCBvciB1c2VkIHRvIHByb3ZpZGUgc2VydmljZXMgb3Igb3RoZXJ3aXNlIGRlbGl2ZXIgY29udGVudCB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3UuCisKKzEuOC4gIkludGVyZmFjZSIgbWVhbnMgaW50ZXJmYWNlcywgZnVuY3Rpb25zLCBwcm9wZXJ0aWVzLCBjbGFzcyBkZWZpbml0aW9ucywgQVBJcywgaGVhZGVyIGZpbGVzLCBHVUlEcywgVi1UYWJsZXMsIGFuZC9vciBwcm90b2NvbHMgYWxsb3dpbmcgb25lIHBpZWNlIG9mIHNvZnR3YXJlLCBmaXJtd2FyZSBvciBoYXJkd2FyZSB0byBjb21tdW5pY2F0ZSBvciBpbnRlcm9wZXJhdGUgd2l0aCBhbm90aGVyIHBpZWNlIG9mIHNvZnR3YXJlLCBmaXJtd2FyZSBvciBoYXJkd2FyZS4KKworMS45ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4gV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS4xMCAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgTGljZW5zb3IgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjExICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBDb3ZlcmVkIENvZGUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yIGhpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlIG9mIENvdmVyZWQgQ29kZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsIGluZGVwZW5kZW50IGNvbnRyYWN0b3Igb3IgYWdlbnQgb2YgYSBjb3Jwb3JhdGlvbiwgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIChjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsKSBkb2VzIG5vdCBxdWFsaWZ5IGFzIFBlcnNvbmFsIFVzZS4KKworMS4xMiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLgorCisxLjEzICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSAodmlhIGRvd25sb2FkaW5nIG9yIHVzaW5nIENvdmVyZWQgQ29kZSBvciBvdGhlcndpc2UgaW5kaWNhdGluZyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlKSwgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBjb3B5cmlnaHQgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZiBMaWNlbnNvcmBzIGNvcHlyaWdodHMgY292ZXIgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgTGljZW5zb3IgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsKKworKGIpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNjsKKworKGMpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsKKworKGQpIFlvdSBtdXN0IG1ha2UgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgRXh0ZXJuYWxseSBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgYW5kCisKKyhlKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4gWW91IG11c3QgYWxzbyBpbmNsdWRlIHRoZSBPYmplY3QgQ29kZSBOb3RpY2Ugc2V0IGZvcnRoIGluIEV4aGliaXQgQSBpbiB0aGUgImFib3V0IiBib3ggb3Igb3RoZXIgYXBwcm9wcmlhdGUgcGxhY2Ugd2hlcmUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMgYXJlIHBsYWNlZCwgaW5jbHVkaW5nIGFueSBwYWNrYWdpbmcgbWF0ZXJpYWxzLgorCisyLjIgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBMaWNlbnNvciBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBMaWNlbnNvciBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBpbXBvcnQgb3Igb2ZmZXIgZm9yIHNhbGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHN1Y2ggbGljZW5zZShzKS4KKworMi4zIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSAodmlhIGRvd25sb2FkaW5nIG9yIHVzaW5nIENvdmVyZWQgQ29kZSBvciBvdGhlcndpc2UgaW5kaWNhdGluZyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlKSwgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc29yYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUgYW5kIGltcG9ydCB0aGUgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2UgeW91IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBpcnJldm9jYWJsZSwgcm95YWx0eSBmcmVlIGxpY2Vuc2UgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIG1ha2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCB1c2UsIGltcG9ydCwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBMaWNlbnNvcmBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOyBhbmQKKworKGIpIFlvdSBncmFudCB0byBMaWNlbnNvciBhbmQgaXRzIHN1YnNpZGlhcmllcyBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBMaWNlbnNvciBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgWW91ciBNb2RpZmljYXRpb25zLCBpbiBhbnkgZm9ybSBhbmQgZm9yIGFueSBwdXJwb3NlLCB0aHJvdWdoIG11bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbi4KKworKGMpIFlvdSBhZ3JlZSBub3QgdXNlIGFueSBpbmZvcm1hdGlvbiBkZXJpdmVkIGZyb20gWW91ciB1c2UgYW5kIHJldmlldyBvZiB0aGUgQ292ZXJlZCBDb2RlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFueSBhbGdvcml0aG1zIG9yIGludmVudGlvbnMgdGhhdCBtYXkgYmUgY29udGFpbmVkIGluIHRoZSBDb3ZlcmVkIENvZGUsIGZvciB0aGUgcHVycG9zZSBvZiBhc3NlcnRpbmcgYW55IG9mIFlvdXIgcGF0ZW50IHJpZ2h0cywgb3IgYXNzaXN0aW5nIGEgdGhpcmQgcGFydHkgdG8gYXNzZXJ0IGFueSBvZiBpdHMgcGF0ZW50IHJpZ2h0cywgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuCisKKzQuIERlcml2YXRpdmUgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBvdGhlcndpc2UgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGFuIGludGVncmF0ZWQgcHJvZHVjdC4gSW4gZWFjaCBzdWNoIGluc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpbmNsdWRpbmcgYWxsIE1vZGlmaWNhdGlvbnMuCisKKzQuMSBZb3UgbXVzdCBjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUsIHB1Ymxpc2ggb3IgRXh0ZXJuYWxseSBEZXBsb3ksIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBubyBvdGhlciBsaWNlbnNlIGV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDQuMi4gWW91IGFsc28gbXVzdCBtYWtlIFNvdXJjZSBDb2RlIGF2YWlsYWJsZSBmb3IgdGhlIERlcml2YXRpdmUgV29yayB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBNb2RpZmljYXRpb25zLCBkZXNjcmliZWQgaW4gU2VjdGlvbnMgMiBhbmQgMywgYWJvdmUuCisKKzQuMiBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlcy4gU29mdHdhcmUgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBpbmRlcGVuZGVudGx5IGRldmVsb3BlZCB3aXRob3V0IGFueSB1c2Ugb2YgQ292ZXJlZCBDb2RlIGFuZCB3aGljaCBjb250YWluIG5vIHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSwgTW9kaWZpY2F0aW9ucyBvciBvdGhlciBEZXJpdmF0aXZlIFdvcmtzLCBidXQgYXJlIHVzZWQgb3IgY29tYmluZWQgaW4gYW55IHdheSB3aXRoIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IERlcml2YXRpdmUgV29yayB0byBmb3JtIGEgbGFyZ2VyIERlcml2YXRpdmUgV29yaywgYXJlIGV4ZW1wdCBmcm9tIHRoZSBjb25kaXRpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuMSBidXQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQ6IHRoZSBzb2Z0d2FyZSBtb2R1bGUsIGluY2x1ZGluZyBhbnkgc29mdHdhcmUgdGhhdCBpcyBsaW5rZWQgdG8sIGludGVncmF0ZWQgd2l0aCwgb3IgcGFydCBvZiB0aGUgc2FtZSBhcHBsaWNhdGlvbnMgYXMsIHRoZSBzb2Z0d2FyZSBtb2R1bGUgYnkgYW55IG1ldGhvZCBtdXN0IGJlIHdob2xseSBzdWJqZWN0IHRvIG9uZSBvZiB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZXMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBhbGwgQ292ZXJlZCBDb2RlIG11c3QgYmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaHVzLCB0aGUgZW50aXJlIERlcml2YXRpdmUgV29yayBtdXN0IGJlIGxpY2Vuc2VkIHVuZGVyIGEgY29tYmluYXRpb24gb2YgdGhlIFJQU0wgKGZvciBDb3ZlcmVkIENvZGUpIGFuZCBhIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UgZm9yIGFueSBpbmRlcGVuZGVudGx5IGRldmVsb3BlZCBzb2Z0d2FyZSBtb2R1bGVzIHdpdGhpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrLiBUaGUgZm9yZWdvaW5nIHJlcXVpcmVtZW50IGFwcGxpZXMgZXZlbiBpZiB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSB3b3VsZCBvcmRpbmFyaWx5IGFsbG93IHRoZSBzb2Z0d2FyZSBtb2R1bGUgdG8gbGluayB3aXRoLCBvciBmb3JtIGxhcmdlciB3b3JrcyB3aXRoLCBvdGhlciBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBzdWJqZWN0IHRvIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlLiBGb3IgZXhhbXBsZSwgYWx0aG91Z2ggdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgdjEuMSBhbGxvd3MgTW96aWxsYSBjb2RlIHRvIGJlIGNvbWJpbmVkIHdpdGggcHJvcHJpZXRhcnkgc29mdHdhcmUgdGhhdCBpcyBub3Qgc3ViamVjdCB0byB0aGUgTVBMLCBpZiBNUEwtbGljZW5zZWQgY29kZSBpcyB1c2VkIHdpdGggQ292ZXJlZCBDb2RlIHRoZSBNUEwtbGljZW5zZWQgY29kZSBjb3VsZCBub3QgYmUgY29tYmluZWQgb3IgbGlua2VkIHdpdGggYW55IGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSBNUEwuIFRoZSBnZW5lcmFsIGludGVudCBvZiB0aGlzIHNlY3Rpb24gNC4yIGlzIHRvIGVuYWJsZSB1c2Ugb2YgQ292ZXJlZCBDb2RlIHdpdGggYXBwbGljYXRpb25zIHRoYXQgYXJlIHdob2xseSBzdWJqZWN0IHRvIGFuIGFjY2VwdGFibGUgb3BlbiBzb3VyY2UgbGljZW5zZS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB5b3VyIHVzZSBvZiBzb2Z0d2FyZSB3aXRoIENvdmVyZWQgQ29kZSBpcyBhbGxvd2VkIHVuZGVyIFlvdXIgbGljZW5zZSB0byBzdWNoIHNvZnR3YXJlLgorCis0LjMgTWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBDb3ZlcmVkIENvZGUgd2l0aCB0aGUgQ292ZXJlZCBDb2RlIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgQ292ZXJlZCBDb2RlKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGVsaXZlciB0aGUgQ292ZXJlZCBDb2RlIGZvciBjb21iaW5hdGlvbiBhbmQvb3IgaW50ZWdyYXRpb24gd2l0aCBhbiBhcHBsaWNhdGlvbiBwcmV2aW91c2x5IHByb3ZpZGVkIGJ5IFlvdSAoZm9yIGV4YW1wbGUsIHZpYSBhdXRvbWF0aWMgdXBkYXRpbmcgdGVjaG5vbG9neSksIHN1Y2ggY29tYmluYXRpb24gYW5kL29yIGludGVncmF0aW9uIGNvbnN0aXR1dGVzIGEgRGVyaXZhdGl2ZSBXb3JrIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworNS4gRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBDb3ZlcmVkIENvZGUuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgY29kZSB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4gTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3JrcyBhbmQvb3IgYW55IHVzZSBvciBjb21iaW5hdGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciB0ZWNobm9sb2d5IHByb3ZpZGVkIGJ5IExpY2Vuc29yIG9yIHRoaXJkIHBhcnRpZXMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBMaWNlbnNvciB3aGljaCBMaWNlbnNvciBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorCis1LjEuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBvd25lZCBieSBMaWNlbnNvciAoIkxpY2Vuc29yIE1hcmtzIiBkZWZpbmVkIGluIEV4aGliaXQgQykgb3IgdG8gYW55IHRyYWRlbWFyayBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIE5vIExpY2Vuc29yIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgYnkgdGhlIExpY2Vuc29yIFRyYWRlbWFyayBQb2xpY3kgZGVmaW5lZCBpbiBFeGhpYml0IEMuCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluICgiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3Qgb2J0YWluIHRoZSByZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBMaWNlbnNvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgTGljZW5zb3IuIE5vIG9uZSBvdGhlciB0aGFuIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBMSUNFTlNPUiBBTkQgTElDRU5TT1JgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJMSUNFTlNPUiIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBMSUNFTlNPUiBBTkQgRUFDSCBDT05UUklCVVRPUiBET0VTIE5PVCBXQVJSQU5UIEFHQUlOU1QgSU5URVJGRVJFTkNFIFdJVEggWU9VUiBFTkpPWU1FTlQgT0YgVEhFIENPVkVSRUQgQ09ERSwgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIExJQ0VOU09SLCBBIExJQ0VOU09SIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIGhpZ2ggcmlzayBhY3Rpdml0aWVzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGRlc2lnbiwgY29uc3RydWN0aW9uLCBvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBhaXJjcmFmdCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLiBMaWNlbnNvciBkaXNjbGFpbXMgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBmaXRuZXNzIGZvciBzdWNoIHVzZXMuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgTElDRU5TT1IgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgU1RSSUNUIExJQUJJTElUWSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgTElDRU5TT1IgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBMaWNlbnNvcmBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIHRlbiBkb2xsYXJzICgkMTAuMDApLgorCisxMC4gT3duZXJzaGlwLiBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBMaWNlbnNvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIExpY2Vuc29yICgiTGljZW5zb3IgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBMaWNlbnNvciBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIExpY2Vuc29yIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBMaWNlbnNvciBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLgorCisxMS4gVGVybWluYXRpb24uCisKKzExLjEgVGVybSBhbmQgVGVybWluYXRpb24uIFRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSBpcyBwZXJwZXR1YWwgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgcHJvdmlkZWQgYmVsb3cuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBMaWNlbnNvciBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsKKworKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMi41KGIpOyBvcgorCisoYykgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIExpY2Vuc29yIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgTGljZW5zb3IgKGluY2x1ZGluZyBieSBjcm9zcy1jbGFpbSBvciBjb3VudGVyIGNsYWltIGluIGEgbGF3c3VpdCk7CisKKyhkKSB1cG9uIHdyaXR0ZW4gbm90aWNlIGZyb20gTGljZW5zb3IgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBhbnkgdGhpcmQgcGFydHkgYWxsZWdpbmcgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgYW55IHBhdGVudCAoaW5jbHVkaW5nIGJ5IGNyb3NzLWNsYWltIG9yIGNvdW50ZXIgY2xhaW0gaW4gYSBsYXdzdWl0KS4KKworMTEuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKzEyLiBNaXNjZWxsYW5lb3VzLgorCisxMi4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMi4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZyBZb3UsIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3Igb3RoZXJ3aXNlLgorCisxMi4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBMaWNlbnNvcmBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMi40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEyLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIExpY2Vuc29yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBTZWF0dGxlLCBXYXNoaW5ndG9uLCBhbmQgWW91IGFuZCBMaWNlbnNvciBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKzEyLjcgRXhwb3J0L0ltcG9ydCBMYXdzLiBUaGlzIHNvZnR3YXJlIGlzIHN1YmplY3QgdG8gYWxsIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MgYW5kIHJlc3RyaWN0aW9ucyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IHJlY2VpdmUgdGhlIENvdmVyZWQgQ29kZSBhbmQgWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgWW91IGRvIG5vdCBleHBvcnQsIHJlLWV4cG9ydCBvciBpbXBvcnQgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgZGlyZWN0IHByb2R1Y3QgdGhlcmVvZiBpbiB2aW9sYXRpb24gb2YgYW55IHN1Y2ggcmVzdHJpY3Rpb25zLCBsYXdzIG9yIHJlZ3VsYXRpb25zLCBvciB3aXRob3V0IGFsbCBuZWNlc3NhcnkgYXV0aG9yaXphdGlvbnMuCisKKzEyLjggRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIFdhc2hpbmd0b24uCisKK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgb250IGV4aWcmIzIzMzsgcXVlIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgciYjMjMzO2RpZyYjMjMzO3MgZW4gYW5nbGFpcy4KKworCitFWEhJQklUIEEuCisKKyJDb3B5cmlnaHQgJiMxNjk7IDE5OTUtMjAwMiBSZWFsTmV0d29ya3MsIEluYy4gYW5kL29yIGl0cyBsaWNlbnNvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUsIGFuZCB0aGUgZmlsZXMgaW5jbHVkZWQgd2l0aCB0aGlzIGZpbGUsIGFyZSBzdWJqZWN0IHRvIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiUlBTTCIpIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5oZWxpeGNvbW11bml0eS5vcmcvY29udGVudC9ycHNsIHVubGVzcyB5b3UgaGF2ZSBsaWNlbnNlZCB0aGUgZmlsZSB1bmRlciB0aGUgUmVhbE5ldHdvcmtzIENvbW11bml0eSBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJSQ1NMIikgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L3Jjc2wsIGluIHdoaWNoIGNhc2UgdGhlIFJDU0wgd2lsbCBhcHBseS4gWW91IG1heSBhbHNvIG9idGFpbiB0aGUgbGljZW5zZSB0ZXJtcyBkaXJlY3RseSBmcm9tIFJlYWxOZXR3b3Jrcy4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBSUFNMIG9yLCBpZiB5b3UgaGF2ZSBhIHZhbGlkIFJDU0wgd2l0aCBSZWFsTmV0d29ya3MgYXBwbGljYWJsZSB0byB0aGlzIGZpbGUsIHRoZSBSQ1NMLiBQbGVhc2Ugc2VlIHRoZSBhcHBsaWNhYmxlIFJQU0wgb3IgUkNTTCBmb3IgdGhlIHJpZ2h0cywgb2JsaWdhdGlvbnMgYW5kIGxpbWl0YXRpb25zIGdvdmVybmluZyB1c2Ugb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSGVsaXggRE5BIFRlY2hub2xvZ3kuIFJlYWxOZXR3b3JrcyBpcyB0aGUgZGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBjb2RlIGFuZCBvd25zIHRoZSBjb3B5cmlnaHRzIGluIHRoZSBwb3J0aW9ucyBpdCBjcmVhdGVkLgorCitUaGlzIGZpbGUsIGFuZCB0aGUgZmlsZXMgaW5jbHVkZWQgd2l0aCB0aGlzIGZpbGUsIGlzIGRpc3RyaWJ1dGVkIGFuZCBtYWRlIGF2YWlsYWJsZSBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgUkVBTE5FVFdPUktTIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCBUZXN0IFN1aXRlKHMpIExvY2F0aW9uIChpZiBsaWNlbnNlZCB1bmRlciB0aGUgUkNTTCk6CisKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIgorCitPYmplY3QgQ29kZSBOb3RpY2U6IEhlbGl4IEROQSBDbGllbnQgdGVjaG5vbG9neSBpbmNsdWRlZC4gQ29weXJpZ2h0ICYjMTY5OyBSZWFsTmV0d29ya3MsIEluYy4sIDE5OTUtMjAwMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRVhISUJJVCBCCisKK0NvbXBhdGlibGUgU291cmNlIExpY2Vuc2VzIGZvciB0aGUgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZS4gVGhlIGZvbGxvd2luZyBsaXN0IGFwcGxpZXMgdG8gdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgYXMgb2YgT2N0b2JlciAyNSwgMjAwMiwgdW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQuCisKK0FjYWRlbWljIEZyZWUgTGljZW5zZQorQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UKK0FwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZQorQXJ0aXN0aWMgbGljZW5zZQorQXR0cmlidXRpb24gQXNzdXJhbmNlIExpY2Vuc2VzCitCU0QgbGljZW5zZQorQ29tbW9uIFB1YmxpYyBMaWNlbnNlMQorRWlmZmVsIEZvcnVtIExpY2Vuc2UKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpMQorR05VIExpYnJhcnkgb3IgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTCkxCitJQk0gUHVibGljIExpY2Vuc2UKK0ludGVsIE9wZW4gU291cmNlIExpY2Vuc2UKK0phYmJlciBPcGVuIFNvdXJjZSBMaWNlbnNlCitNSVQgbGljZW5zZQorTUlUUkUgQ29sbGFib3JhdGl2ZSBWaXJ0dWFsIFdvcmtzcGFjZSBMaWNlbnNlIChDVlcgTGljZW5zZSkKK01vdG9zb3RvIExpY2Vuc2UKK01vemlsbGEgUHVibGljIExpY2Vuc2UgMS4wIChNUEwpCitNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMSAoTVBMKQorTm9raWEgT3BlbiBTb3VyY2UgTGljZW5zZQorT3BlbiBHcm91cCBUZXN0IFN1aXRlIExpY2Vuc2UKK1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIExpY2Vuc2UKK1JpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlCitTdW4gSW5kdXN0cnkgU3RhbmRhcmRzIFNvdXJjZSBMaWNlbnNlIChTSVNTTCkKK1N1biBQdWJsaWMgTGljZW5zZQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBIE9wZW4gU291cmNlIExpY2Vuc2UKK1ZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlIHYuIDEuMAorVzNDIExpY2Vuc2UKK1guTmV0IExpY2Vuc2UKK1pvcGUgUHVibGljIExpY2Vuc2UKK3psaWIvbGlicG5nIGxpY2Vuc2UKKzFOb3RlOiBiZWNhdXNlIHRoaXMgbGljZW5zZSBjb250YWlucyBjZXJ0YWluIHJlY2lwcm9jYWwgbGljZW5zaW5nIHRlcm1zIHRoYXQgcHVycG9ydCB0byBleHRlbmQgdG8gaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgY29kZSwgWW91IG1heSBiZSBwcm9oaWJpdGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIG90aGVyd2lzZSBjb21wYXRpYmxlIGxpY2Vuc2UgZnJvbSB1c2luZyBjb2RlIGxpY2Vuc2VkIHVuZGVyIGl0cyB0ZXJtcyB3aXRoIENvdmVyZWQgQ29kZSBiZWNhdXNlIENvdmVyZWQgQ29kZSBtYXkgb25seSBiZSBsaWNlbnNlZCB1bmRlciB0aGUgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZS4gQW55IGF0dGVtcHQgdG8gYXBwbHkgbm9uIFJQU0wgbGljZW5zZSB0ZXJtcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgR1BMLCB0byBDb3ZlcmVkIENvZGUgaXMgZXhwcmVzc2x5IGZvcmJpZGRlbi4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBZb3VyIHVzZSBvZiBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlZCBjb2RlIGRvZXMgbm90IHZpb2xhdGUgZWl0aGVyIHRoZSBSUFNMIG9yIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlLgorCitUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaXN0IGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvY29tcGxpY2Vuc2UKKworRVhISUJJVCBDCisKK1JlYWxOZXR3b3Jrc2AgVHJhZGVtYXJrIHBvbGljeS4KKworUmVhbE5ldHdvcmtzIGRlZmluZXMgdGhlIGZvbGxvd2luZyB0cmFkZW1hcmtzIGNvbGxlY3RpdmVseSBhcyAiTGljZW5zb3IgVHJhZGVtYXJrcyI6ICJSZWFsTmV0d29ya3MiLCAiUmVhbFBsYXllciIsICJSZWFsSnVrZWJveCIsICJSZWFsU3lzdGVtIiwgIlJlYWxBdWRpbyIsICJSZWFsVmlkZW8iLCAiUmVhbE9uZSBQbGF5ZXIiLCAiUmVhbE1lZGlhIiwgIkhlbGl4IiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gUmVhbE5ldHdvcmtzLgorCitSZWFsTmV0d29ya3MgIkxpY2Vuc29yIFRyYWRlbWFyayBQb2xpY3kiIGZvcmJpZHMgYW55IHVzZSBvZiBMaWNlbnNvciBUcmFkZW1hcmtzIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcyB3aXRoIFJlYWxOZXR3b3Jrc2AgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdCB3d3cucmVhbG5ldHdvcmtzLmNvbS9pbmZvL2hlbGl4bG9nby5odG1sLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JTQ1BMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SU0NQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWRiYmMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SU0NQTApAQCAtMCwwICsxLDE5MyBAQAorCitSaWNvaCBTb3VyY2UgQ29kZSBQdWJsaWMgTGljZW5zZQorCitWZXJzaW9uIDEuMAorCisKKzEuIERlZmluaXRpb25zLgorCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisKKzEuMy4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSB3ZWJzaXRlIG9yIGFueSBvdGhlciBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKworMS40LiAiRXhlY3V0YWJsZSBDb2RlIiBtZWFucyBHb3Zlcm5lZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKworMS41LiAiR292ZXJuZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworCisxLjYuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIEdvdmVybmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKworMS43LiAiTGljZW5zYWJsZSIgbWVhbnMgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBHb3Zlcm5lZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworCisoYSkgQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworKGIpIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKworCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgdGhlICJQbGF0Zm9ybSBmb3IgSW5mb3JtYXRpb24gQXBwbGljYXRpb25zIiBTb3VyY2UgQ29kZSBhcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgUlNWLgorCisKKzEuMTEgIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSB0aGUgZ3JhbnRvciBvZiBhIGxpY2Vuc2UgdGhlcmV0by4KKworMS4xMi4gIlJTViIgbWVhbnMgUmljb2ggU2lsaWNvbiBWYWxsZXksIEluYy4sIGEgQ2FsaWZvcm5pYSBjb3Jwb3JhdGlvbiB3aXRoIG9mZmljZXMgYXQgMjg4MiBTYW5kIEhpbGwgUm9hZCwgU3VpdGUgMTE1LCBNZW5sbyBQYXJrLCBDQSA5NDAyNS03MDIyLgorCisxLjEzLiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgR292ZXJuZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBFeGVjdXRhYmxlIENvZGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgR292ZXJuZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKworMS4xNC4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKworCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIEdyYW50IGZyb20gUlNWLiBSU1YgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKworCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiBFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIEdvdmVybmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAoaSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKworCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKworCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIEdvdmVybmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBvciB2aWEgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIEdvdmVybmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgR292ZXJuZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSBSU1YgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBSU1YgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIEdvdmVybmVkIENvZGUuCisKKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworMy40LjEuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgUlNWIGFuZCBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBHb3Zlcm5lZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4gSW4gdGhlIGV2ZW50IHRoYXQgWW91IGFyZSBhIENvbnRyaWJ1dG9yLCBZb3UgcmVwcmVzZW50IHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgaW4gdGhlIExFR0FMIGZpbGUsIHlvdXIgTW9kaWZpY2F0aW9ucyBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbnMgYW5kLCB0byB0aGUgYmVzdCBvZiB5b3VyIGtub3dsZWRnZSwgbm8gdGhpcmQgcGFydHkgaGFzIGFueSBjbGFpbSAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zKSByZWxhdGluZyB0byB5b3VyIE1vZGlmaWNhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCB0aGUgTEVHQUwgZmlsZSBpbmNsdWRlcyBjb21wbGV0ZSBkZXRhaWxzIG9mIGFueSBsaWNlbnNlIG9yIG90aGVyIHJlc3RyaWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFydCBvZiB5b3VyIE1vZGlmaWNhdGlvbnMuCisKKzMuNC4yLiBDb250cmlidXRvciBBUElzLiBJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBHb3Zlcm5lZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgR292ZXJuZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgUlNWIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IFJTViBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgUlNWIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgQ29kZSBWZXJzaW9ucy4gWW91IG1heSBkaXN0cmlidXRlIEdvdmVybmVkIENvZGUgaW4gRXhlY3V0YWJsZSBDb2RlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IEdvdmVybmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIEdvdmVybmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gb2YgR292ZXJuZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IFJTViBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IFJTViBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgUlNWIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCisKKzMuNy4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBHb3Zlcm5lZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgR292ZXJuZWQgQ29kZS4KKworCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhldGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgR292ZXJuZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCisKKzUuIFRyYWRlbWFyayBVc2FnZS4KKworCisKKzUuMS4gQWR2ZXJ0aXNpbmcgTWF0ZXJpYWxzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDogIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgUmljb2ggU2lsaWNvbiBWYWxsZXksIEluYy4iCisKKworNS4yLiBFbmRvcnNlbWVudHMuIFRoZSBuYW1lcyAiUmljb2gsIiAiUmljb2ggU2lsaWNvbiBWYWxsZXksIiBhbmQgIlJTViIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgQ29udHJpYnV0b3IgVmVyc2lvbnMgb3IgTGFyZ2VyIFdvcmtzIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBSU1YuCisKKworNS4zLiBQcm9kdWN0IE5hbWVzLiBDb250cmlidXRvciBWZXJzaW9ucyBhbmQgTGFyZ2VyIFdvcmtzIG1heSBub3QgYmUgY2FsbGVkICJSaWNvaCIgbm9yIG1heSB0aGUgd29yZCAiUmljb2giIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgUlNWLgorCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCisKKworNi4xLiBOZXcgVmVyc2lvbnMuIFJTViBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiBPbmNlIEdvdmVybmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBHb3Zlcm5lZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBSU1YuIE5vIG9uZSBvdGhlciB0aGFuIFJTViBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBHb3Zlcm5lZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisKKzcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKK0dPVkVSTkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgR09WRVJORUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgR09WRVJORUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBHT1ZFUk5FRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgUlNWIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBHT1ZFUk5FRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKworOC4gVGVybWluYXRpb24uCisKKworCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgR292ZXJuZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKworOC4yLiBJZiBZb3UgaW5pdGlhdGUgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uIGFnYWluc3QgUlNWIG9yIGEgQ29udHJpYnV0b3IgKFJTViBvciB0aGUgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKworKGEpIHN1Y2ggUGFydGljaXBhbnRgcyBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgT3JpZ2luYWwgQ29kZSBvciB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSBwcm92aWRlZCB0byBZb3UgYnkgdGhlIFBhcnRpY2lwYW50LCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcyBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBPcmlnaW5hbCBDb2RlIG9yIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCisKKzguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisKKzkuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBSU1YsIEFOWSBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIEdPVkVSTkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gVE8gVEhFIEVYVEVOVCBUSEFUIEFOWSBFWENMVVNJT04gT0YgREFNQUdFUyBBQk9WRSBJUyBOT1QgVkFMSUQsIFlPVSBBR1JFRSBUSEFUIElOIE5PIEVWRU5UIFdJTEwgUlNWUyBMSUFCSUxJVFkgVU5ERVIgT1IgUkVMQVRFRCBUTyBUSElTIEFHUkVFTUVOVCBFWENFRUQgRklWRSBUSE9VU0FORCBET0xMQVJTICgkNSwwMDApLiBUSEUgR09WRVJORUQgQ09ERSBJUyBOT1QgSU5URU5ERUQgRk9SIFVTRSBJTiBDT05ORUNUSU9OIFdJVEggQU5ZIE5VQ0xFUiwgQVZJQVRJT04sIE1BU1MgVFJBTlNJVCBPUiBNRURJQ0FMIEFQUExJQ0FUSU9OIE9SIEFOWSBPVEhFUiBJTkhFUkVOVExZIERBTkdFUk9VUyBBUFBMSUNBVElPTiBUSEFUIENPVUxEIFJFU1VMVCBJTiBERUFUSCwgUEVSU09OQUwgSU5KVVJZLCBDQVRBU1RST1BISUMgREFNQUdFIE9SIE1BU1MgREVTVFJVQ1RJT04sIEFORCBZT1UgQUdSRUUgVEhBVCBORUlUSEVSIFJTViBOT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBPRiBBTlkgTkFUVVJFIEFTIEEgUkVTVUxUIE9GIEFOWSBTVUNIIFVTRSBPRiBUSEUgR09WRVJORUQgQ09ERS4KKworCisxMC4gVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4KKworVGhlIEdvdmVybmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgR292ZXJuZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKworMTEuIE1pc2NlbGxhbmVvdXMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIHBhcnRpZXMgc3VibWl0IHRvIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBpbiBDYWxpZm9ybmlhIGFuZCBmdXJ0aGVyIGFncmVlIHRoYXQgYW55IGNhdXNlIG9mIGFjdGlvbiBhcmlzaW5nIHVuZGVyIG9yIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgYnJvdWdodCBpbiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBUaGUgbG9zaW5nIHBhcnR5IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBOb3R3aXRoc3RhbmRpbmcgYW55dGhpbmcgdG8gdGhlIGNvbnRyYXJ5IGhlcmVpbiwgUlNWIG1heSBzZWVrIGluanVuY3RpdmUgcmVsaWVmIHJlbGF0ZWQgdG8gYSBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQgaW4gYW55IGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24uIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisKKzEyLiBSZXNwb25zaWJpbGl0eSBmb3IgQ2xhaW1zLgorCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIEdvdmVybmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLgorCisKKworIAorCitFWEhJQklUIEEKKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5yaXNvdXJjZS5vcmcvUlBMCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGlzIGNvZGUgd2FzIGluaXRpYWxseSBkZXZlbG9wZWQgYnkgUmljb2ggU2lsaWNvbiBWYWxsZXksIEluYy4gUG9ydGlvbnMgY3JlYXRlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiBhcmUgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUnVieSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUnVieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzJlNTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SdWJ5CkBAIC0wLDAgKzEsNjAgQEAKKworUnVieSBpcyBjb3B5cmlnaHRlZCBmcmVlIHNvZnR3YXJlIGJ5IFl1a2loaXJvIE1hdHN1bW90byA8bWF0ekBuZXRsYWIuY28uanA+LgorWW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciBlaXRoZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwKKyhzZWUgQ09QWUlORy50eHQgZmlsZSksIG9yIHRoZSBjb25kaXRpb25zIGJlbG93OgorCisgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlCisgICAgIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlCisgICAgIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGUgc29mdHdhcmUgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdAorICAgICB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBhKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlCisgICAgICAgICAgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkCisgICBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbiBlcXVpdmFsZW50IG1lZGl1bSwgb3IgYnkgYWxsb3dpbmcKKyAgIHRoZSBhdXRob3IgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvZnR3YXJlLgorCisgICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBzb2Z0d2FyZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yCisgICAgICAgICAgb3JnYW5pemF0aW9uLgorCisgICAgICAgYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdAorICAgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLgorCisgICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KKworICAzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUKKyAgICAgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBhKSBkaXN0cmlidXRlIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcyBvZiB0aGUgc29mdHdhcmUsCisgICB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpCisgICBvbiB3aGVyZSB0byBnZXQgdGhlIG9yaWdpbmFsIGRpc3RyaWJ1dGlvbi4KKworICAgICAgIGIpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mCisgICB0aGUgc29mdHdhcmUuCisKKyAgICAgICBjKSBnaXZlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIHdpdGgKKyAgICAgICAgICBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBkaXN0cmlidXRpb24uCisKKyAgICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgYXV0aG9yLgorCisgIDQuIFlvdSBtYXkgbW9kaWZ5IGFuZCBpbmNsdWRlIHRoZSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBpbnRvIGFueSBvdGhlcgorICAgICBzb2Z0d2FyZSAocG9zc2libHkgY29tbWVyY2lhbCkuICBCdXQgc29tZSBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uCisgICAgIGFyZSBub3Qgd3JpdHRlbiBieSB0aGUgYXV0aG9yLCBzbyB0aGF0IHRoZXkgYXJlIG5vdCB1bmRlciB0aGlzIHRlcm1zLgorCisgICAgIFRoZXkgYXJlIGdjLmMocGFydGx5KSwgdXRpbHMuYyhwYXJ0bHkpLCByZWdleC5bY2hdLCBzdC5bY2hdIGFuZCBzb21lCisgICAgIGZpbGVzIHVuZGVyIHRoZSAuL21pc3NpbmcgZGlyZWN0b3J5LiAgU2VlIGVhY2ggZmlsZSBmb3IgdGhlIGNvcHlpbmcKKyAgICAgY29uZGl0aW9uLgorCisgIDUuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzIAorICAgICBvdXRwdXQgZnJvbSB0aGUgc29mdHdhcmUgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUKKyAgICAgY29weXJpZ2h0IG9mIHRoZSBzb2Z0d2FyZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgCisgICAgIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZCB3aXRoIHRoaXMKKyAgICAgc29mdHdhcmUuCisKKyAgNi4gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgICAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgICAgUFVSUE9TRS4KKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NBWC1QRCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZmQxMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NBWC1QRApAQCAtMCwwICsxLDMzIEBACisKK0NvcHlyaWdodCBTdGF0dXMgZm9yIFNBWAorCitTQVggaXMgZnJlZSEKKworSW4gZmFjdCwgaXRgcyBub3QgcG9zc2libGUgdG8gb3duIGEgbGljZW5zZSB0byBTQVgsIHNpbmNlIGl0YHMgYmVlbiBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK05vIFdhcnJhbnR5CisKK0JlY2F1c2UgU0FYIGlzIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGRlc2lnbiBvciBmb3IgdGhlIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQvb3Igb3RoZXIgcGFydGllcyBwcm92aWRlIFNBWCAiYXMgaXMiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBTQVggaXMgd2l0aCB5b3UuIFNob3VsZCBTQVggcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nIHdpbGwgYW55IGNvcHlyaWdodCBob2xkZXIsIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5IG1vZGlmeSBhbmQvb3IgcmVkaXN0cmlidXRlIFNBWCwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgU0FYIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgdGhpcmQgcGFydGllcyBvciBhIGZhaWx1cmUgb2YgdGhlIFNBWCB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyIHByb2dyYW1zKSwgZXZlbiBpZiBzdWNoIGhvbGRlciBvciBvdGhlciBwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKK0NvcHlyaWdodCBEaXNjbGFpbWVycworCitUaGlzIHBhZ2UgaW5jbHVkZXMgc3RhdGVtZW50cyB0byB0aGF0IGVmZmVjdCBieSBEYXZpZCBNZWdnaW5zb24sIHdobyB3b3VsZCBoYXZlIGJlZW4gYWJsZSB0byBjbGFpbSBjb3B5cmlnaHQgZm9yIHRoZSBvcmlnaW5hbCB3b3JrLgorCitTQVggMS4wCisKK1ZlcnNpb24gMS4wIG9mIHRoZSBTaW1wbGUgQVBJIGZvciBYTUwgKFNBWCksIGNyZWF0ZWQgY29sbGVjdGl2ZWx5IGJ5IHRoZSBtZW1iZXJzaGlwIG9mIHRoZSBYTUwtREVWIG1haWxpbmcgbGlzdCwgaXMgaGVyZWJ5IHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uCisKK05vIG9uZSBvd25zIFNBWDogeW91IG1heSB1c2UgaXQgZnJlZWx5IGluIGJvdGggY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBidW5kbGUgaXQgd2l0aCB5b3VyIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwgaW5jbHVkZSBpdCBvbiBhIENELVJPTSwgbGlzdCB0aGUgc291cmNlIGNvZGUgaW4gYSBib29rLCBtaXJyb3IgdGhlIGRvY3VtZW50YXRpb24gYXQgeW91ciBvd24gd2ViIHNpdGUsIG9yIHVzZSBpdCBpbiBhbnkgb3RoZXIgd2F5IHlvdSBzZWUgZml0LgorCitEYXZpZCBNZWdnaW5zb24sIE1lZ2dpbnNvbiBUZWNobm9sb2dpZXMgTHRkLgorMTk5OC0wNS0xMQorCitTQVggMi4wCisKK0kgaGVyZWJ5IGFiYW5kb24gYW55IHByb3BlcnR5IHJpZ2h0cyB0byBTQVggMi4wICh0aGUgU2ltcGxlIEFQSSBmb3IgWE1MKSwgYW5kIHJlbGVhc2UgYWxsIG9mIHRoZSBTQVggMi4wIHNvdXJjZSBjb2RlLCBjb21waWxlZCBjb2RlLCBhbmQgZG9jdW1lbnRhdGlvbiBjb250YWluZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW50byB0aGUgUHVibGljIERvbWFpbi4gU0FYIGNvbWVzIHdpdGggTk8gV0FSUkFOVFkgb3IgZ3VhcmFudGVlIG9mIGZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLgorCitEYXZpZCBNZWdnaW5zb24sIE1lZ2dpbnNvbiBUZWNobm9sb2dpZXMgTHRkLgorMjAwMC0wNS0wNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NHSS0xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TR0ktMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk5ODU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TR0ktMQpAQCAtMCwwICsxLDM2IEBACisvKgorICogKGMpIENvcHlyaWdodCAxOTkzLCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBBTEwgUklHSFRTIFJFU0VSVkVEIAorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgCisgKiBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UKKyAqIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IAorICogdGhlIG5hbWUgb2YgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZworICogb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSEUgTUFURVJJQUwgRU1CT0RJRUQgT04gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBUTyBZT1UgIkFTLUlTIgorICogQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MsIElNUExJRUQgT1IgT1RIRVJXSVNFLAorICogSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBTSEFMTCBTSUxJQ09OCisgKiBHUkFQSElDUywgSU5DLiAgQkUgTElBQkxFIFRPIFlPVSBPUiBBTllPTkUgRUxTRSBGT1IgQU5ZIERJUkVDVCwKKyAqIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKKyAqIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sCisgKiBMT1NTIE9GIFBST0ZJVCwgTE9TUyBPRiBVU0UsIFNBVklOR1MgT1IgUkVWRU5VRSwgT1IgVEhFIENMQUlNUyBPRgorICogVEhJUkQgUEFSVElFUywgV0hFVEhFUiBPUiBOT1QgU0lMSUNPTiBHUkFQSElDUywgSU5DLiAgSEFTIEJFRU4KKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggTE9TUywgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogUE9TU0VTU0lPTiwgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKiAKKyAqIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgCisgKiBVc2UsIGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8KKyAqIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gRkFSIDUyLjIyNy4xOShjKSgyKSBvciBzdWJwYXJhZ3JhcGgKKyAqIChjKSgxKShpaSkgb2YgdGhlIFJpZ2h0cyBpbiBUZWNobmljYWwgRGF0YSBhbmQgQ29tcHV0ZXIgU29mdHdhcmUKKyAqIGNsYXVzZSBhdCBERkFSUyAyNTIuMjI3LTcwMTMgYW5kL29yIGluIHNpbWlsYXIgb3Igc3VjY2Vzc29yCisgKiBjbGF1c2VzIGluIHRoZSBGQVIgb3IgdGhlIERPRCBvciBOQVNBIEZBUiBTdXBwbGVtZW50LgorICogVW5wdWJsaXNoZWQtLSByaWdodHMgcmVzZXJ2ZWQgdW5kZXIgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZQorICogVW5pdGVkIFN0YXRlcy4gIENvbnRyYWN0b3IvbWFudWZhY3R1cmVyIGlzIFNpbGljb24gR3JhcGhpY3MsCisgKiBJbmMuLCAyMDExIE4uICBTaG9yZWxpbmUgQmx2ZC4sIE1vdW50YWluIFZpZXcsIENBIDk0MDM5LTczMTEuCisgKgorICogT3BlbkdMKFRNKSBpcyBhIHRyYWRlbWFyayBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU01BSUxfR1BMIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjM2ZkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU01BSUxfR1BMCkBAIC0wLDAgKzEsMTY0IEBACitUaGlzIGlzIHRoZSBEZWJpYW4gR05VL0xpbnV4IHBhY2thZ2UgZGViaWFudXRpbHMuCisKK0l0IGlzIGFuIG9yaWdpbmFsIERlYmlhbiBwYWNrYWdlLiAgUHJvZ3JhbXMgaW4gaXQgd2VyZSBtYWludGFpbmVkIGJ5CitHdXkgTWFvciA8bWFvckBkZWJpYW4ub3JnPiwgYW5kIGFyZSBub3cgbWFpbnRhaW5lZCBieSBDbGludCBBZGFtcworPHNjaGl6b0BkZWJpYW4ub3JnPi4KKworQWxsIGl0cyBwcm9ncmFtcyBleGNlcHQgcmVhZGxpbmssIHNhdmVsb2csIGFuZCB3aGljaCBtYXkgYmUKK3JlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCBWZXJzaW9uIDIgb3IgbGF0ZXIsCitmb3VuZCBvbiBEZWJpYW4gc3lzdGVtcyBpbiB0aGUgZmlsZSAvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy9HUEwuCisKK3doaWNoIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCityZWFkbGluayBpcyBDb3B5cmlnaHQgKGMpIDE5OTcgS2VubmV0aCBTdGFpbGV5LCBhbmQgbWF5IGFsc28gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGNvcHlyaWdodC4KKworc2F2ZWxvZyBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOiAoVGhlIHJlc3Qgb2YKK3RoaXMgZmlsZSBjb25zaXN0cyBvZiBzYXZlbG9nJ3MgZGlzdHJpYnV0aW9uIHRlcm1zLikKKworI2lkZW50CSJAKCMpc21haWw6UkVMRUFTRS0zXzI6Q09QWUlORyx2IDEuMiAxOTk2LzA2LzE0IDE4OjU5OjEwIHdvb2RzIEV4cCIKKworCQkgICAgIFNNQUlMIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIChDbGFyaWZpZWQgMTEgRmViIDE5ODgpCisKKyBDb3B5cmlnaHQgKEMpICAxOTg4IExhbmRvbiBDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FycgorIENvcHlyaWdodCAoQykgIDE5OTIgUm9uYWxkIFMuIEthcnIKKyBDb3B5bGVmdCAoR05VKSAxOTg4IExhbmRvbiBDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FycgorCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlLCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuICBZb3UgY2FuIGFsc28KKyB1c2UgdGhpcyB3b3JkaW5nIHRvIG1ha2UgdGhlIHRlcm1zIGZvciBvdGhlciBwcm9ncmFtcy4KKworICBUaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIGtlZXAgeW91IGF0IHRoZQorbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiAgQnkgY29udHJhc3QsIG91ciBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGlzCitpbnRlbmRlZCB0byBnaXZlIGV2ZXJ5b25lIHRoZSByaWdodCB0byBzaGFyZSBTTUFJTC4gIFRvIG1ha2Ugc3VyZSB0aGF0Cit5b3UgZ2V0IHRoZSByaWdodHMgd2Ugd2FudCB5b3UgdG8gaGF2ZSwgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucwordGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlcgordGhlIHJpZ2h0cy4gIEhlbmNlIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuCisKKyAgU3BlY2lmaWNhbGx5LCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSByaWdodCB0byBnaXZlCithd2F5IGNvcGllcyBvZiBTTUFJTCwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBlbHNlIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIFNNQUlMIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBtYWtlIHN1cmUgdGhhdCBldmVyeW9uZSBoYXMgc3VjaCByaWdodHMsIHdlIGhhdmUgdG8gZm9yYmlkIHlvdSB0bworZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUKK2NvcGllcyBvZiBTTUFJTCwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdQoraGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3QgdGVsbCB0aGVtIHRoZWlyIHJpZ2h0cy4KKworICBBbHNvLCBmb3Igb3VyIG93biBwcm90ZWN0aW9uLCB3ZSBtdXN0IG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lCitmaW5kcyBvdXQgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgU01BSUwuICBJZiBTTUFJTCBpcyBtb2RpZmllZCBieQorc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQKK3RoZXkgaGF2ZSBpcyBub3Qgd2hhdCB3ZSBkaXN0cmlidXRlZCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZAorYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gb3VyIHJlcHV0YXRpb24uCisKKyAgVGhlcmVmb3JlIHdlIChMYW5kb24gQ3VydCBOb2xsIGFuZCBSb25hbGQgUy4gS2FycikgbWFrZSB0aGUgZm9sbG93aW5nIAordGVybXMgd2hpY2ggc2F5IHdoYXQgeW91IG11c3QgZG8gdG8gYmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIG9yIGNoYW5nZSAKK1NNQUlMLgorCisKKwkJCUNPUFlJTkcgUE9MSUNJRVMKKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIFNNQUlMIHNvdXJjZSBjb2RlCithcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYSB2YWxpZCBjb3B5cmlnaHQgbm90aWNlICJDb3B5cmlnaHQKKyhDKSAxOTg4IExhbmRvbiBDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FyciIgKG9yIHdpdGggd2hhdGV2ZXIgeWVhciBpcworYXBwcm9wcmlhdGUpOyBrZWVwIGludGFjdCB0aGUgbm90aWNlcyBvbiBhbGwgZmlsZXMgdGhhdCByZWZlciB0byB0aGlzCitMaWNlbnNlIEFncmVlbWVudCBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKK290aGVyIHJlY2lwaWVudHMgb2YgdGhlIFNNQUlMIHByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50IGFsb25nIHdpdGggdGhlIHByb2dyYW0uICBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUKK2ZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHkuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiBTTUFJTCBvciBhbnkgcG9ydGlvbiBvZiBpdCwKK2FuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaCAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZworICAgIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQKKworICAgIGIpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsCisgICAgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGEgZGVyaXZhdGl2ZSBvZiBTTUFJTCBvcgorICAgIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIG9uIHRlcm1zIGlkZW50aWNhbCB0byB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlCisgICAgQWdyZWVtZW50IChleGNlcHQgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCBtb3JlIGV4dGVuc2l2ZQorICAgIHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLgorCisgICAgYykgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mCisgICAgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkKKyAgICBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworTWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHVucmVsYXRlZCBwcm9ncmFtIHdpdGggdGhpcyBwcm9ncmFtIChvciBpdHMKK2Rlcml2YXRpdmUpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nCit0aGUgb3RoZXIgcHJvZ3JhbSB1bmRlciB0aGUgc2NvcGUgb2YgdGhlc2UgdGVybXMuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIFNNQUlMIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwKK3VuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYikgYWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHkgZnJlZSAoZXhjZXB0IGZvciBhIG5vbWluYWwKKyAgICBzaGlwcGluZyBjaGFyZ2UpIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBjKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHdoZXJlIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbi1jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gYWxvbmUuKQorCitGb3IgYW4gZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvcgorYWxsIG1vZHVsZXMgaXQgY29udGFpbnM7IGJ1dCwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaXQgbmVlZCBub3QgaW5jbHVkZQorc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgd2hpY2ggYXJlIHN0YW5kYXJkIGxpYnJhcmllcyB0aGF0IGFjY29tcGFueSB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgZmlsZSBydW5zLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgU01BSUwKK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBTTUFJTCBpcyB2b2lkIGFuZAoreW91ciByaWdodHMgdG8gdXNlIHRoZSBwcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBhZ3JlZW1lbnQgc2hhbGwgYmUKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlZC4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29tcHV0ZXIKK3NvZnR3YXJlIHByb2dyYW1zIGZyb20geW91IHdpdGggdGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIG5vdCBoYXZlCit0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgU01BSUwgaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byBMYW5kb24KK0N1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyIHZpYSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGF0IDUxCitGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgV2UgaGF2ZSBub3QgeWV0Cit3b3JrZWQgb3V0IGEgc2ltcGxlIHJ1bGUgdGhhdCBjYW4gYmUgc3RhdGVkIGhlcmUsIGJ1dCB3ZSB3aWxsIG9mdGVuCitwZXJtaXQgdGhpcy4gIFdlIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUKK2ZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nCit0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUuCisKK1lvdXIgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGFib3V0IG91ciBsaWNlbnNpbmcgcG9saWNpZXMgYW5kIG91cgorc29mdHdhcmUgYXJlIHdlbGNvbWUhICBUaGlzIGNvbnRyYWN0IHdhcyBiYXNlZCBvbiB0aGUgY29udHJhY3QgbWFkZSBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFBsZWFzZSBjb250YWN0IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKK1VTQSwgb3IgY2FsbCAoNjE3KSA1NDItNTk0MiBmb3IgZGV0YWlscyBvbiBjb3B5bGVmdGVkIG1hdGVyaWFsIGluCitnZW5lcmFsLgorCisJCSAgICAgICBOTyBXQVJSQU5UWQorCisgIEJFQ0FVU0UgU01BSUwgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFdFIFBST1ZJREUgQUJTT0xVVEVMWSBOTworV0FSUkFOVFksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgU1RBVEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORywgTEFORE9OIENVUlQgTk9MTCAmIFJPTkFMRCBTLiBLQVJSIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFNNQUlMICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCitUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFNNQUlMIElTIFdJVEgKK1lPVS4gIFNIT1VMRCBTTUFJTCBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMCitORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgV0lMTCBMQU5ET04gQ1VSVCBOT0xMICYKK1JPTkFMRCBTLiBLQVJSIEFORC9PUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EIFJFRElTVFJJQlVURQorU01BSUwgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitMT1NUIFBST0ZJVFMsIExPU1QgTU9OSUVTLCBPUiBPVEhFUiBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFCisoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRAorSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRQorUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSBTTUFJTCwgRVZFTiBJRiBZT1UgSEFWRQorQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMsIE9SIEZPUiBBTlkgQ0xBSU0gQlkKK0FOWSBPVEhFUiBQQVJUWS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU1BMLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU1BMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ4YjM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TUEwtMS4wCkBAIC0wLDAgKzEsNTA3IEBACisKK1NVTiBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDEuMAorCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlCitDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsCitwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQoraW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YgYW5kIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRhdGlvbiByZWxlYXNlZAord2l0aCB0aGUgc291cmNlIGNvZGUuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCitDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMKK3RoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQKK0EuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UuCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOC4xLiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvcgorc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZworT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvcgorcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gIk9yaWdpbmFsIENvZGUiLi4vIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKK3doaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcworT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzCitMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZAorYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTEuICJTb3VyY2UgQ29kZSIuLi8gbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUKK2ZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZAordG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZQorY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IKK2Fub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcworY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLAorcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzCit3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkKK2V4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuCitGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzCitjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mCit0aGlzIGRlZmluaXRpb24sICJjb250cm9sIi4uLyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsCit0bworY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0CitvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlCitvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMSBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yCitwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYQorTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZgorT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yCitzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zCit0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpCitzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQKK2J5OgorCitpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlCitPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KKworU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yCitoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudAorb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZAorYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQKK2Jhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhCitMYXJnZXIgV29yazsgYW5kCisKK2IpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluCitjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoCitjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yCitvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yCitwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkKK3RoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaAorY29tYmluYXRpb24pLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQKK0NvZGUuCisKKyhkKSBub3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCitncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yCitpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvcgorVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IKK1ZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5CitDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK1NlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlCitkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbgorb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhCitjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUKK3ZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlCithbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUKK21hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpCittb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeAorKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uCitoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yCitlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhCitmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQKK3RoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbAorQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlCitvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCisKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKK2dyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvcgorbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQKKyIuLi9MRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluCitzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmCitDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZQorYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkKK21vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZQordGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUKK21haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8KK3JlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KKworSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcKK2ludGVyZmFjZSAoIkFQSSIuLi8pIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcword2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdAorYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyhjKSBSZXByZXNlbnRhdGlvbnMuCisKK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uCiszLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zCithcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzCitzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMKK0xpY2Vuc2UKKworLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlCitDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhCitsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseQordG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpCitZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24KK2ZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAKK3JpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5CitvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91CittYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbgorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcworb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKK3JlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlCitvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKK2luIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUKK0NvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5Citjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluCitjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMKK3JpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMKK0xpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQKK2xpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlcgorZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaAordGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIKK2NvZGUKK25vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKK3JlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0bworc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQorZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbgorbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QKK2JlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCitleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZQorc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcworYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworNi4xLiBOZXcgVmVyc2lvbnMuCisKK1N1biBNaWNyb3N5c3RlbXMsIEluYy4gKCJTdW4iKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCitkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YKK3RoZQorTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0Cit2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMKK29mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1bi4gTm8gb25lCitvdGhlciB0aGFuIFN1biBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkCitDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCisKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdQorbWF5Citvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdDogKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdAordGhlIHBocmFzZXMgIlN1biwiICJTdW4gUHVibGljIExpY2Vuc2UsIiBvciAiU1BMIi4uLyBvciBhbnkgY29uZnVzaW5nbHkKK3NpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIKK2xpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhcgordGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlCitTdW4gUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwKK09yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBCitzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzCitMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiLi4vQVMgSVNgYCBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCitERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCitUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUKK0lTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsCitZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFCitDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSCitPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRgorQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlCitzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwKK3N1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIKK25hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlCitzaGFsbCBzdXJ2aXZlLgorCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQKK2NsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3Blcgorb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbQorWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcKK3RoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5CitpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoCitQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlCitzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LAordW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKQorYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZQorcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCitQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvCit0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzCitvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QKK211dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0KK2lzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIKK1NlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mCit0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcworQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbgorYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKQorYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsCitzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50CithbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yCitpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMKK2J5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMKK2dyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuCitpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwKK2FsbAorZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpCit3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyCitwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwKK0RFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLAorT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUgorQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCitDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsCitXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUgorQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTgorSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCitMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZCitSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXCitQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQorRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPCitUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4KKzQ4CitDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiCithbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiLi4vIGFzIHN1Y2ggdGVybXMgYXJlCit1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuCisxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsCitVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMKK3NldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CituZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CitDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYKK2FueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KK1dpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLAorb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQKK1N0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK3N1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuCitEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwKK0NhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kCitleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uCitDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKK3NoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzCitMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcworcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8KK3dvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaAorcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvcgorc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKz9NdWx0aXBsZS1MaWNlbnNlZD8uID9NdWx0aXBsZS1MaWNlbnNlZD8gbWVhbnMgdGhhdCB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlcgorWW91ciBjaG9pY2Ugb2YgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisKK0V4aGliaXQgQSAtU3VuIFB1YmxpYyBMaWNlbnNlIE5vdGljZS4KKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VuIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCisKK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGF2YWlsYWJsZSBhdAorCitodHRwOi8vd3d3LnN1bi5jb20vCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlCisKK09yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX18uIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fIGFyZSBDb3B5cmlnaHQKKworKEMpX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisKK29mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgP1tfX19dIExpY2Vuc2U/KSwgaW4gd2hpY2ggY2FzZSB0aGUKKworcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuCisKK0lmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlCisKK3Rlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorCit2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgU1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nCisKK3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlcgorCitwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUKKworcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisKK2VpdGhlciB0aGUgU1BMIG9yIHRoZSBbX19fXSBMaWNlbnNlLgorW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZgorCit0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQKKwordXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZQorCitPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NpbXBsZS0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NpbXBsZS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MzU3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2ltcGxlLTIuMApAQCAtMCwwICsxLDI3IEBACisKK1NpbXBsZSBQdWJsaWMgTGljZW5zZSAoU2ltUEwpCisKK1ByZWFtYmxlCitUaGlzIFNpbXBsZSBQdWJsaWMgTGljZW5zZSAyLjAgKFNpbVBMIDIuMCBmb3Igc2hvcnQpIGlzIGEgcGxhaW4gbGFuZ3VhZ2UgaW1wbGVtZW50YXRpb24gb2YgR1BMIDIuMC4gIFRoZSB3b3JkcyBhcmUgZGlmZmVyZW50LCBidXQgdGhlIGdvYWwgaXMgdGhlIHNhbWUgLSB0byBndWFyYW50ZWUgZm9yIGFsbCB1c2VycyB0aGUgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHNvZnR3YXJlLiAgSWYgYW55b25lIHdvbmRlcnMgYWJvdXQgdGhlIG1lYW5pbmcgb2YgdGhlIFNpbVBMLCB0aGV5IHNob3VsZCBpbnRlcnByZXQgaXQgYXMgY29uc2lzdGVudCB3aXRoIEdQTCAyLjAuCitTaW1wbGUgUHVibGljIExpY2Vuc2UgKFNpbVBMKSAyLjAKK1RoZSBTaW1QTCBhcHBsaWVzIHRvIHRoZSBzb2Z0d2FyZWBzIHNvdXJjZSBhbmQgb2JqZWN0IGNvZGUgYW5kIGNvbWVzIHdpdGggYW55IHJpZ2h0cyB0aGF0IEkgaGF2ZSBpbiBpdCAob3RoZXIgdGhhbiB0cmFkZW1hcmtzKS4gWW91IGFncmVlIHRvIHRoZSBTaW1QTCBieSBjb3B5aW5nLCBkaXN0cmlidXRpbmcsIG9yIG1ha2luZyBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgc29mdHdhcmUuCisKK1lvdSBnZXQgdGhlIHJveWFsdHkgZnJlZSByaWdodCB0bzoKK1VzZSB0aGUgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlOworTWFrZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0ICh0aGlzIGlzIGNhbGxlZCBhICJEZXJpdmVkIFdvcmsiKTsKK0NvcHkgYW5kIGRpc3RyaWJ1dGUgaXQgYW5kIGFueSBEZXJpdmVkIFdvcmsuCitJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgb3IgYSBEZXJpdmVkIFdvcmssIHlvdSBtdXN0IGdpdmUgYmFjayB0byB0aGUgY29tbXVuaXR5IGJ5OgorUHJvbWluZW50bHkgbm90aW5nIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2VzIHlvdSBtYWtlOworTGVhdmluZyBvdGhlciBwZW9wbGVgcyBjb3B5cmlnaHQgbm90aWNlcywgd2FycmFudHkgZGlzY2xhaW1lcnMsIGFuZCBsaWNlbnNlIHRlcm1zICBpbiBwbGFjZTsKK1Byb3ZpZGluZyB0aGUgc291cmNlIGNvZGUsIGJ1aWxkIHNjcmlwdHMsIGluc3RhbGxhdGlvbiBzY3JpcHRzLCBhbmQgaW50ZXJmYWNlIGRlZmluaXRpb25zIGluIGEgZm9ybSB0aGF0IGlzIGVhc3kgdG8gZ2V0IGFuZCBiZXN0IHRvIG1vZGlmeTsKK0xpY2Vuc2luZyBpdCB0byBldmVyeW9uZSB1bmRlciBTaW1QTCwgb3Igc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRlcm1zIChzdWNoIGFzIEdQTCAyLjApLCB3aXRob3V0IGFkZGluZyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyB0byB0aGUgcmlnaHRzIHByb3ZpZGVkOworQ29uc3BpY3VvdXNseSBhbm5vdW5jaW5nIHRoYXQgaXQgaXMgYXZhaWxhYmxlIHVuZGVyIHRoYXQgbGljZW5zZS4KK1RoZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IHlvdSBtdXN0IHNob3VsZGVyOgorWW91IGdldCBOTyBXQVJSQU5USUVTLiBOb25lIG9mIGFueSBraW5kOworSWYgdGhlIHNvZnR3YXJlIGRhbWFnZXMgeW91IGluIGFueSB3YXksIHlvdSBtYXkgb25seSByZWNvdmVyIGRpcmVjdCBkYW1hZ2VzIHVwIHRvIHRoZSBhbW91bnQgeW91IHBhaWQgZm9yIGl0ICh0aGF0IGlzIHplcm8gaWYgeW91IGRpZCBub3QgcGF5IGFueXRoaW5nKS4gWW91IG1heSBub3QgcmVjb3ZlciBhbnkgb3RoZXIgZGFtYWdlcywgaW5jbHVkaW5nIHRob3NlIGNhbGxlZCAiY29uc2VxdWVudGlhbCBkYW1hZ2VzLiIgKFRoZSBzdGF0ZSBvciBjb3VudHJ5IHdoZXJlIHlvdSBsaXZlIG1heSBub3QgYWxsb3cgeW91IHRvIGxpbWl0IHlvdXIgbGlhYmlsaXR5IGluIHRoaXMgd2F5LCBzbyB0aGlzIG1heSBub3QgYXBwbHkgdG8geW91KTsKK1RoZSBTaW1QTCBjb250aW51ZXMgcGVycGV0dWFsbHksIGV4Y2VwdCB0aGF0IHlvdXIgbGljZW5zZSByaWdodHMgZW5kIGF1dG9tYXRpY2FsbHkgaWY6CitZb3UgZG8gbm90IGFiaWRlIGJ5IHRoZSAiZ2l2ZSBiYWNrIHRvIHRoZSBjb21tdW5pdHkiIHRlcm1zICh5b3VyIGxpY2Vuc2VlcyBnZXQgdG8ga2VlcCB0aGVpciByaWdodHMgaWYgdGhleSBhYmlkZSk7CitBbnlvbmUgcHJldmVudHMgeW91IGZyb20gZGlzdHJpYnV0aW5nIHRoZSBzb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNpbVBMLgorTGljZW5zZSBmb3IgdGhlIExpY2Vuc2UKK1lvdSBtYXkgZG8gYW55dGhpbmcgdGhhdCB5b3Ugd2FudCB3aXRoIHRoZSBTaW1QTCB0ZXh0OyBpdGBzIGEgbGljZW5zZSBmb3JtIHRvIHVzZSBpbiBhbnkgd2F5IHRoYXQgeW91IGZpbmQgaGVscGZ1bC4gIFRvIGF2b2lkIGNvbmZ1c2lvbiwgaG93ZXZlciwgaWYgeW91IGNoYW5nZSB0aGUgdGVybXMgaW4gYW55IHdheSB0aGVuIHlvdSBtYXkgbm90IGNhbGwgeW91ciBsaWNlbnNlIHRoZSBTaW1wbGUgUHVibGljIExpY2Vuc2Ugb3IgdGhlIFNpbVBMIChidXQgZmVlbCBmcmVlIHRvIGFja25vd2xlZGdlIHRoYXQgeW91ciBsaWNlbnNlIGlzICJiYXNlZCBvbiB0aGUgU2ltcGxlIFB1YmxpYyBMaWNlbnNlIikuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2xlZXB5Y2F0IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlOWQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2xlZXB5Y2F0CkBAIC0wLDAgKzEsOTAgQEAKKworVGhlIFNsZWVweWNhdCBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDE5OTAtMTk5OQorU2xlZXB5Y2F0IFNvZnR3YXJlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorUmVkaXN0cmlidXRpb25zIGluIGFueSBmb3JtIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgaW5mb3JtYXRpb24gb24KK2hvdyB0byBvYnRhaW4gY29tcGxldGUgc291cmNlIGNvZGUgZm9yIHRoZSBEQiBzb2Z0d2FyZSBhbmQgYW55CithY2NvbXBhbnlpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBEQiBzb2Z0d2FyZS4gVGhlIHNvdXJjZSBjb2RlCittdXN0IGVpdGhlciBiZSBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIG9yIGJlIGF2YWlsYWJsZSBmb3Igbm8KK21vcmUgdGhhbiB0aGUgY29zdCBvZiBkaXN0cmlidXRpb24gcGx1cyBhIG5vbWluYWwgZmVlLCBhbmQgbXVzdCBiZQorZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSB1bmRlciByZWFzb25hYmxlIGNvbmRpdGlvbnMuIEZvciBhbgorZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyB0aGUgc291cmNlIGNvZGUgZm9yIGFsbAorbW9kdWxlcyBpdCBjb250YWlucy4gSXQgZG9lcyBub3QgaW5jbHVkZSBzb3VyY2UgY29kZSBmb3IgbW9kdWxlcyBvcgorZmlsZXMgdGhhdCB0eXBpY2FsbHkgYWNjb21wYW55IHRoZSBtYWpvciBjb21wb25lbnRzIG9mIHRoZSBvcGVyYXRpbmcKK3N5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBmaWxlIHJ1bnMuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFNMRUVQWUNBVCBTT0ZUV0FSRSBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTCitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorTk9OLUlORlJJTkdFTUVOVCwgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFNMRUVQWUNBVCBTT0ZUV0FSRQorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0NvcHlyaWdodCAoYykgMTk5MCwgMTk5MywgMTk5NCwgMTk5NQorVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCittYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVNgYCBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCitDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYKK1RoZSBQcmVzaWRlbnQgYW5kIEZlbGxvd3Mgb2YgSGFydmFyZCBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK21heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQord2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEhBUlZBUkQgQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJU2BgIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEhBUlZBUkQgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JiNGUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xCkBAIC0wLDAgKzEsNDMxIEBACisKK1NVR0FSQ1JNIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMS4xLjMKKworVGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gKCJTUEwiKSBjb25zaXN0cyBvZiB0aGUgTW96aWxsYQorUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIG1vZGlmaWVkIHRvIGJlIHNwZWNpZmljIHRvIFN1Z2FyQ1JNLCB3aXRoIHRoZQorQWRkaXRpb25hbCBUZXJtcyBpbiBFeGhpYml0IEIuIFRoZSBvcmlnaW5hbCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMSBjYW4gYmUKK2ZvdW5kIGF0OiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwKKworCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlCitDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEuICcnQ29udHJpYnV0b3InJyBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlCitjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICcnQ29udHJpYnV0b3IgVmVyc2lvbicnIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IKK01vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICcnQ292ZXJlZCBDb2RlJycgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nCitwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICcnRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJycgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkCitpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICcnRXhlY3V0YWJsZScnIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuICcnSW5pdGlhbCBEZXZlbG9wZXInJyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorCisxLjcuICcnTGFyZ2VyIFdvcmsnJyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAnJ0xpY2Vuc2UnJyBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCitleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5CithY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gJydNb2RpZmljYXRpb25zJycgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvcgorc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbgorQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsCitDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4KKzEuMTAuICcnT3JpZ2luYWwgQ29kZScnIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMKK2Rlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQKK3doaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZAorQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQKK2FwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiAnJ1NvdXJjZSBDb2RlJycgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZworbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kCitpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QKK2VpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlCitDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwKK3Byb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkKK2F2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91JycgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UKK29yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsCitlbnRpdGllcywgIllvdScnIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yCitpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyJjb250cm9sJycgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uCitvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpCitvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvcgorYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspCitMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yCit3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsCitDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yCitvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUKK2RhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZS4KKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvcgorY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwKK0NvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yCitkZXZpY2VzLgorMi4yLiBDb250cmlidXRvciBHcmFudC4KK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKQorTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvcgorcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMKK0NvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZgorTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoCitpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwKK29mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlCitieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZgorTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IKK3BvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUKK2RhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgQ29kZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yCithbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlCitmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5Cittb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zCittYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yCitWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUKK2luIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UKK211c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uCit0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlCityZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudAorb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZQorYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlCitzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KK01lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYKK21hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IKK2F0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQKK2xlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KK2hhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcKK3RoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUKK2RvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YKK2FueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcworZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UKK0NvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uCitpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IKK3VuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UKK0NvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwnJyB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkKK21ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0bworY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUKK2F2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUKK0xFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZQorb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykKK3JlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcKK2tub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCitpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMCitmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKQorYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzCitvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZQorcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmCitpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0bworaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYQorcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmCitZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IKK3RvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluCithbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgb3IKK293bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvCitjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUKK29yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93bgorYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdAorbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeQordGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZgorU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYQorbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UKK2hhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkKK2luY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZAorQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcAorcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20KK3RoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvCitsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlCityaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbgordW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMKK3doaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdAorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYQorc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzCitMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQord2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLAorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUKK21heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleQorYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4KK0V4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QKK2JlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZQorbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xLiBOZXcgVmVyc2lvbnMuCitTdWdhckNSTSBJbmMuICgnJ1N1Z2FyQ1JNJycpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUKK0xpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbgorbnVtYmVyLgorNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLAorWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZgordGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1Z2FyQ1JNLiBObyBvbmUgb3RoZXIgdGhhbiBTdWdhckNSTSBoYXMgdGhlIHJpZ2h0IHRvCittb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8KK2luIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICcnU3VnYXJDUk0nJywKKycnU1BMJycgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQKK3RvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdAorY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlCitTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLAorT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mCit0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUycnIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLAorRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRQorUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVECitDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWQorT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SCitDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUworTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMKK0RJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseQoraWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoCithcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMKK3doaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbQorKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhCitDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoCithY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworKGEpIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueQorcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyCitTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbQorUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mCitub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlCityZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaAorUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEKK3JlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluCit3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMKK2dyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkKK3Rlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnQncworQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkKK3JpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZQorcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvcgoraGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcKK3RoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMKK2FueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpCitwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUKK3ZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMgorc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQKK29yIGxpY2Vuc2UuCisKKzguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlcgorbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbgordmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsCitzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZCitPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWQorT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLAorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sCitEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLAorT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMCitIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCitMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORworRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNICitMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRgorSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QKK0FQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgJydjb21tZXJjaWFsIGl0ZW0sJycgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuCisyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAnJ2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUnJyBhbmQKKycnY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCcnIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDgKK0MuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuCisyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMKK2FjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIKK2hlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoCitwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0CitlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMKKyhleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcKK2l0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZQorcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4KK3RoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZQorc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YKK0NhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcKK3BhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kCityZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMKK0NvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseQorZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0CitzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUKK2ZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbgorb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQKK0NvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nCitoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzCisiTXVsdGlwbGUtTGljZW5zZWQiLiAiTXVsdGlwbGUtTGljZW5zZWQiIG1lYW5zIHRoYXQgdGhlCitJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKK1lvdXIgY2hvaWNlIG9mIHRoZSBTUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCitTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAxLjEuMyAtIEV4aGliaXQgQQorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisxLjEuMworKCJMaWNlbnNlIik7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKK0xpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnN1Z2FyY3JtLmNvbS9TUEwKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvcgordGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpczogU3VnYXJDUk0gT3BlbiBTb3VyY2UKKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFN1Z2FyQ1JNLCBJbmMuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IFN1Z2FyQ1JNIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDQgU3VnYXJDUk0sIEluYy47CitBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZiB0aGUKK25vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dAorb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUKK2ZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorCitTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAxLjEuMyAtIEV4aGliaXQgQgorCitBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLgorCitJLiBFZmZlY3QuCitUaGVzZSBhZGRpdGlvbmFsIHRlcm1zIGRlc2NyaWJlZCBpbiB0aGlzIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlICZuZGFzaDsKK0FkZGl0aW9uYWwgVGVybXMgc2hhbGwgYXBwbHkgdG8gdGhlIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0lJLiBTdWdhckNSTSBhbmQgbG9nby4KK1RoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcworIlN1Z2FyQ1JNIiBhbmQgdGhlICJTdWdhckNSTSIgbG9nb3MgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZQoraW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucy4KKworSG93ZXZlciwgaW4gYWRkaXRpb24gdG8gdGhlIG90aGVyIG5vdGljZSBvYmxpZ2F0aW9ucywgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZAorQ29kZSBpbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBmb3JtIGRpc3RyaWJ1dGVkIG11c3QsIGFzIGEgZm9ybSBvZgorYXR0cmlidXRpb24gb2YgdGhlIG9yaWdpbmFsIGF1dGhvciwgaW5jbHVkZSBvbiBlYWNoIHVzZXIgaW50ZXJmYWNlIHNjcmVlbiAoaSkKK3RoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBhbmQgKGlpKSB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiB0aGUKK3NhbWUgZm9ybSBhcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBkaXN0cmlidXRlZCBieSBTdWdhckNSTSwKK0luYy4gYXQgdGhlIHRpbWUgb2YgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY29weS4gSW4gYWRkaXRpb24sIHRoZSAiUG93ZXJlZAorYnkgU3VnYXJDUk0iIGxvZ28gbXVzdCBiZSB2aXNpYmxlIHRvIGFsbCB1c2VycyBhbmQgYmUgbG9jYXRlZCBhdCB0aGUgdmVyeQorYm90dG9tIGNlbnRlciBvZiBlYWNoIHVzZXIgaW50ZXJmYWNlIHNjcmVlbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdGhlCitkaW1lbnNpb25zIG9mIHRoZSAiUG93ZXJlZCBCeSBTdWdhckNSTSIgbG9nbyBtdXN0IGJlIGF0IGxlYXN0IDEwNiB4CisyMyBwaXhlbHMuIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIGl0IG11c3QKK2RpcmVjdCB0aGVtIGJhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmZvcmdlLm9yZy4gSW4gYWRkaXRpb24sIHRoZSBjb3B5cmlnaHQKK25vdGljZSBtdXN0IHJlbWFpbiB2aXNpYmxlIHRvIGFsbCB1c2VycyBhdCBhbGwgdGltZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdXNlcgoraW50ZXJmYWNlIHNjcmVlbi4gV2hlbiB1c2VycyBjbGljayBvbiB0aGUgY29weXJpZ2h0IG5vdGljZSwgaXQgbXVzdCBkaXJlY3QgdGhlbQorYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyY3JtLmNvbQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xLjEuMyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMS4xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NjgxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMS4xLjMKQEAgLTAsMCArMSwxNjAgQEAKKworU1VHQVJDUk0gUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAxLjEuMworCitUaGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAoIlNQTCIpIGNvbnNpc3RzIG9mIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBtb2RpZmllZCB0byBiZSBzcGVjaWZpYyB0byBTdWdhckNSTSwgd2l0aCB0aGUgQWRkaXRpb25hbCBUZXJtcyBpbiBFeGhpYml0IEIuIFRoZSBvcmlnaW5hbCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbAorCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xLiBgYENvbnRyaWJ1dG9yYGAgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuIGBgQ29udHJpYnV0b3IgVmVyc2lvbmBgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiBgYENvdmVyZWQgQ29kZWBgIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gYGBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21gYCBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiBgYEV4ZWN1dGFibGVgYCBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiBgYEluaXRpYWwgRGV2ZWxvcGVyYGAgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorCisxLjcuIGBgTGFyZ2VyIFdvcmtgYCBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguIGBgTGljZW5zZWBgIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOC4xLiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gYGBNb2RpZmljYXRpb25zYGAgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLiAKKzEuMTAuIGBgT3JpZ2luYWwgQ29kZWBgIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gYGBTb3VyY2UgQ29kZWBgIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91YGAgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdWBgIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbGBgIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIAorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4gCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiAKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgQ29kZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBDb2RlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiAKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIAorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisoYikgQ29udHJpYnV0b3IgQVBJcy4gCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuIAorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLiAKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIAorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuIAorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKzYuMS4gTmV3IFZlcnNpb25zLiAKK1N1Z2FyQ1JNIEluYy4gKGBgU3VnYXJDUk1gYCkgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiAKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTdWdhckNSTS4gTm8gb25lIG90aGVyIHRoYW4gU3VnYXJDUk0gaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuIAorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgYGBTdWdhckNSTWBgLCBgYFNQTGBgIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTYGAgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworKGEpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKzguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgYGBjb21tZXJjaWFsIGl0ZW0sYGAgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZWBgIGFuZCBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixgYCBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyAmIzgyMjA7TXVsdGlwbGUtTGljZW5zZWQmIzgyMjE7LiAmIzgyMjA7TXVsdGlwbGUtTGljZW5zZWQmIzgyMjE7IG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgU1BMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCitTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAxLjEuMyAtIEV4aGliaXQgQQorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMS4zCisoIkxpY2Vuc2UiKTsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSAKK0xpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnN1Z2FyY3JtLmNvbS9TUEwKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yCit0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzOiBTdWdhckNSTSBPcGVuIFNvdXJjZQorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgU3VnYXJDUk0sIEluYy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgU3VnYXJDUk0gYXJlIENvcHlyaWdodCAoQykgMjAwNCBTdWdhckNSTSwgSW5jLjsKK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBCCisKK0FkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UuCisKK0kuIEVmZmVjdC4KK1RoZXNlIGFkZGl0aW9uYWwgdGVybXMgZGVzY3JpYmVkIGluIHRoaXMgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgJiM4MjExOyBBZGRpdGlvbmFsIFRlcm1zIHNoYWxsIGFwcGx5IHRvIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitJSS4gU3VnYXJDUk0gYW5kIGxvZ28uCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3MgIlN1Z2FyQ1JNIiBhbmQgdGhlICJTdWdhckNSTSIgbG9nb3MgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zLgorCitIb3dldmVyLCBpbiBhZGRpdGlvbiB0byB0aGUgb3RoZXIgbm90aWNlIG9ibGlnYXRpb25zLCBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgZm9ybSBkaXN0cmlidXRlZCBtdXN0LCBhcyBhIGZvcm0gb2YgYXR0cmlidXRpb24gb2YgdGhlIG9yaWdpbmFsIGF1dGhvciwgaW5jbHVkZSBvbiBlYWNoIHVzZXIgaW50ZXJmYWNlIHNjcmVlbiAoaSkgdGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIGFuZCAoaWkpIHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHRoZSBzYW1lIGZvcm0gYXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgZGlzdHJpYnV0ZWQgYnkgU3VnYXJDUk0sIEluYy4gYXQgdGhlIHRpbWUgb2YgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY29weS4gSW4gYWRkaXRpb24sIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBtdXN0IGJlIHZpc2libGUgdG8gYWxsIHVzZXJzIGFuZCBiZSBsb2NhdGVkIGF0IHRoZSB2ZXJ5IGJvdHRvbSBjZW50ZXIgb2YgZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4uIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHRoZSBkaW1lbnNpb25zIG9mIHRoZSAiUG93ZXJlZCBCeSBTdWdhckNSTSIgbG9nbyBtdXN0IGJlIGF0IGxlYXN0IDEwNiB4IDIzIHBpeGVscy4gV2hlbiB1c2VycyBjbGljayBvbiB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gaXQgbXVzdCBkaXJlY3QgdGhlbSBiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJmb3JnZS5vcmcuIEluIGFkZGl0aW9uLCB0aGUgY29weXJpZ2h0IG5vdGljZSBtdXN0IHJlbWFpbiB2aXNpYmxlIHRvIGFsbCB1c2VycyBhdCBhbGwgdGltZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdXNlciBpbnRlcmZhY2Ugc2NyZWVuLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSBjb3B5cmlnaHQgbm90aWNlLCBpdCBtdXN0IGRpcmVjdCB0aGVtIGJhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmNybS5jb20KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9VQ0IgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWE3NTdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9VQ0IKQEAgLTAsMCArMSwyNiBAQAorICAgQ29weXJpZ2h0IChjKSAxOTg3LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0CisgICAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAgIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAgIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9WU0wtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9WU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmFlNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ZTTC0xLjAKQEAgLTAsMCArMSw0OSBAQAorCitWb3ZpZGEgU29mdHdhcmUgTGljZW5zZSB2LiAxLjAKKworVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHNvZnR3YXJlIGluY29ycG9yYXRlZCBpbiB0aGUgIlZvdmlkYQorT3BlbiBDb21tdW5pY2F0aW9uIEFwcGxpY2F0aW9uIExpYnJhcnkiIGV4Y2VwdCBmb3IgdGhvc2UgcG9ydGlvbnMKK2luY29ycG9yYXRpbmcgdGhpcmQgcGFydHkgc29mdHdhcmUgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYXMgYmVpbmcKK2xpY2Vuc2VkIHVuZGVyIHNlcGFyYXRlIGxpY2Vuc2UuCisKK1RoZSBWb3ZpZGEgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKK0NvcHlyaWdodCAoYykgMjAwMCBWb3ZpZGEgTmV0d29ya3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KK3RoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKK2Rpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWVzICJWT0NBTCIsICJWb3ZpZGEgT3BlbiBDb21tdW5pY2F0aW9uIEFwcGxpY2F0aW9uIExpYnJhcnkiLAorYW5kICJWb3ZpZGEgT3BlbiBDb21tdW5pY2F0aW9uIEFwcGxpY2F0aW9uIExpYnJhcnkgKFZPQ0FMKSIgbXVzdAorbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KK3Blcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IHZvY2FsQHZvdmlkYS5vcmcuCisKKzQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJWT0NBTCIsIG5vcgorbWF5ICJWT0NBTCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKK1dBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQKK05PTi1JTkZSSU5HRU1FTlQgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFZPVklEQQorTkVUV09SS1MsIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTCitJTiBFWENFU1MgT0YgJDEsMDAwLCBOT1IgRk9SIEFOWSBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgorCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XM0MgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGI4YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XM0MKQEAgLTAsMCArMSwxNyBAQAorCitXM0MgU09GVFdBUkUgTk9USUNFIEFORCBMSUNFTlNFCitUaGlzIHdvcmsgKGFuZCBpbmNsdWRlZCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIFJFQURNRXMsIG9yIG90aGVyIHJlbGF0ZWQgaXRlbXMpIGlzIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuCitMaWNlbnNlCitCeSBvYnRhaW5pbmcsIHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KK1Blcm1pc3Npb24gdG8gY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnM6CitUaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLgorQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCB0aGUgVzNDIFNvZnR3YXJlIFNob3J0IE5vdGljZSBzaG91bGQgYmUgaW5jbHVkZWQgKGh5cGVydGV4dCBpcyBwcmVmZXJyZWQsIHRleHQgaXMgcGVybWl0dGVkKSB3aXRoaW4gdGhlIGJvZHkgb2YgYW55IHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSBjb2RlLgorTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcyB3ZXJlIG1hZGUuIChXZSByZWNvbW1lbmQgeW91IHByb3ZpZGUgVVJJcyB0byB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgY29kZSBpcyBkZXJpdmVkLikKK0Rpc2NsYWltZXJzCitUSElTIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4KK0NPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04uCitUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVycyBtYXkgTk9UIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggY29weXJpZ2h0IGhvbGRlcnMuCitOb3RlcworVGhpcyB2ZXJzaW9uOiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDIvY29weXJpZ2h0LXNvZnR3YXJlLTIwMDIxMjMxCitUaGlzIGZvcm11bGF0aW9uIG9mIFczQ2BzIG5vdGljZSBhbmQgbGljZW5zZSBiZWNhbWUgYWN0aXZlIG9uIERlY2VtYmVyIDMxIDIwMDIuIFRoaXMgdmVyc2lvbiByZW1vdmVzIHRoZSBjb3B5cmlnaHQgb3duZXJzaGlwIG5vdGljZSBzdWNoIHRoYXQgdGhpcyBsaWNlbnNlIGNhbiBiZSB1c2VkIHdpdGggbWF0ZXJpYWxzIG90aGVyIHRoYW4gdGhvc2Ugb3duZWQgYnkgdGhlIFczQywgcmVmbGVjdHMgdGhhdCBFUkNJTSBpcyBub3cgYSBob3N0IG9mIHRoZSBXM0MsIGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhpcyBzcGVjaWZpYyBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlLCBhbmQgcmVtb3ZlcyB0aGUgYW1iaWd1b3VzIGdyYW50IG9mICJ1c2UiLiBPdGhlcndpc2UsIHRoaXMgdmVyc2lvbiBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgdmVyc2lvbiBhbmQgaXMgd3JpdHRlbiBzbyBhcyB0byBwcmVzZXJ2ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uYHMgYXNzZXNzbWVudCBvZiBHUEwgY29tcGF0aWJpbGl0eSBhbmQgT1NJYHMgY2VydGlmaWNhdGlvbiB1bmRlciB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbi4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XWHdpbmRvd3MgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmUwOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XWHdpbmRvd3MKQEAgLTAsMCArMSw1NSBAQAorCisgICAgICAgICAgICAgICAgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5jZSwgVmVyc2lvbiAzLjEKKyAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIENvcHlyaWdodCAoQykgMTk5OC0yMDA1IEp1bGlhbiBTbWFydCwgUm9iZXJ0IFJvZWJsaW5nIGV0IGFsCisKKyAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgIG9mIHRoaXMgbGljZW5jZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdYV0lORE9XUyBMSUJSQVJZIExJQ0VOQ0UKKyAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisgIAorICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdAorICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgIAorICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGlicmFyeQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmUsIHVzdWFsbHkgaW4gYSBmaWxlIG5hbWVkIENPUFlJTkcuTElCLiAgSWYgbm90LAorICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKworICBFWENFUFRJT04gTk9USUNFCisKKyAgMS4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlCisgIHBlcm1pc3Npb24gZm9yIGFkZGl0aW9uYWwgdXNlcyBvZiB0aGUgdGV4dCBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIG9mCisgIHRoZSBsaWJyYXJ5IGFzIGxpY2VuY2VkIHVuZGVyIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbmNlLCBhcHBseWluZworICBlaXRoZXIgdmVyc2lvbiAzLjEgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24gb2YKKyAgdGhlIExpY2VuY2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB2ZXJzaW9uCisgIDMuMSBvZiB0aGUgTGljZW5jZSBkb2N1bWVudC4KKworICAyLiBUaGUgZXhjZXB0aW9uIGlzIHRoYXQgeW91IG1heSB1c2UsIGNvcHksIGxpbmssIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZQorICB1bmRlciB5b3VyIG93biB0ZXJtcywgYmluYXJ5IG9iamVjdCBjb2RlIHZlcnNpb25zIG9mIHdvcmtzIGJhc2VkCisgIG9uIHRoZSBMaWJyYXJ5LgorCisgIDMuIElmIHlvdSBjb3B5IGNvZGUgZnJvbSBmaWxlcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGludG8gYQorICBjb3B5IG9mIHRoaXMgbGlicmFyeSwgYXMgdGhpcyBsaWNlbmNlIHBlcm1pdHMsIHRoZSBleGNlcHRpb24gZG9lcyBub3QKKyAgYXBwbHkgdG8gdGhlIGNvZGUgdGhhdCB5b3UgYWRkIGluIHRoaXMgd2F5LiAgVG8gYXZvaWQgbWlzbGVhZGluZyBhbnlvbmUgYXMKKyAgdG8gdGhlIHN0YXR1cyBvZiBzdWNoIG1vZGlmaWVkIGZpbGVzLCB5b3UgbXVzdCBkZWxldGUgdGhpcyBleGNlcHRpb24KKyAgbm90aWNlIGZyb20gc3VjaCBjb2RlIGFuZC9vciBhZGp1c3QgdGhlIGxpY2Vuc2luZyBjb25kaXRpb25zIG5vdGljZQorICBhY2NvcmRpbmdseS4KKworICA0LiBJZiB5b3Ugd3JpdGUgbW9kaWZpY2F0aW9ucyBvZiB5b3VyIG93biBmb3IgdGhpcyBsaWJyYXJ5LCBpdCBpcyB5b3VyCisgIGNob2ljZSB3aGV0aGVyIHRvIHBlcm1pdCB0aGlzIGV4Y2VwdGlvbiB0byBhcHBseSB0byB5b3VyIG1vZGlmaWNhdGlvbnMuIAorICBJZiB5b3UgZG8gbm90IHdpc2ggdGhhdCwgeW91IG11c3QgZGVsZXRlIHRoZSBleGNlcHRpb24gbm90aWNlIGZyb20gc3VjaAorICBjb2RlIGFuZC9vciBhZGp1c3QgdGhlIGxpY2Vuc2luZyBjb25kaXRpb25zIG5vdGljZSBhY2NvcmRpbmdseS4KKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV2F0Y29tLTEuMCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV2F0Y29tLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2MTlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XYXRjb20tMS4wCkBAIC0wLDAgKzEsMTQwIEBACisKK1N5YmFzZSBPcGVuIFdhdGNvbSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMAorCitVU0UgT0YgVEhFIFNZQkFTRSBPUEVOIFdBVENPTSBTT0ZUV0FSRSBERVNDUklCRUQgQkVMT1cgKCJTT0ZUV0FSRSIpIElTIFNVQkpFQ1QgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIFNFVCBGT1JUSCBJTiBUSEUgU1lCQVNFIE9QRU4gV0FUQ09NIFBVQkxJQyBMSUNFTlNFIFNFVCBGT1JUSCBCRUxPVyAoIkxJQ0VOU0UiKS4gWU9VIE1BWSBOT1QgVVNFIFRIRSBTT0ZUV0FSRSBJTiBBTlkgTUFOTkVSIFVOTEVTUyBZT1UgQUNDRVBUIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgTElDRU5TRS4gWU9VIElORElDQVRFIFlPVVIgQUNDRVBUQU5DRSBCWSBJTiBBTlkgTUFOTkVSIFVTSU5HIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEJZIFJFUFJPRFVDSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HKSBUSEUgU09GVFdBUkUuIElGIFlPVSBETyBOT1QgQUNDRVBUIEFMTCBPRiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIExJQ0VOU0UsIERPIE5PVCBVU0UgVEhFIFNPRlRXQVJFIElOIEFOWSBNQU5ORVIuCisKK1N5YmFzZSBPcGVuIFdhdGNvbSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMAorMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuIFRoaXMgTGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhlIGZvbGxvd2luZyBzb2Z0d2FyZSBwcm9ncmFtczogdGhlIG9wZW4gc291cmNlIHZlcnNpb25zIG9mIFN5YmFzZWBzIFdhdGNvbSBDL0MrKyBhbmQgRm9ydHJhbiBjb21waWxlciBwcm9kdWN0cyAoIlNvZnR3YXJlIiksIHdoaWNoIGFyZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiwgd2l0aCBzaWduaWZpY2FudCBjaGFuZ2VzIGZyb20sIHRoZSBsYXN0IHZlcnNpb25zIG1hZGUgY29tbWVyY2lhbGx5IGF2YWlsYWJsZSBieSBTeWJhc2UuIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOgorCisKKzEuMSAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgU3liYXNlIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFN5YmFzZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworCisxLjIgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKworMS4zICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisKKzEuNCAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisKKzEuNSAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKworMS42ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZSB0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4gV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBTeWJhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgU3liYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgU3liYXNlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IFN5YmFzZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworMS44ICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBDb3ZlcmVkIENvZGUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yIGhpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlIG9mIENvdmVyZWQgQ29kZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsIGluZGVwZW5kZW50IGNvbnRyYWN0b3Igb3IgYWdlbnQgb2YgYSBjb3Jwb3JhdGlvbiwgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIChjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsKSBkb2VzIG5vdCBxdWFsaWZ5IGFzIFBlcnNvbmFsIFVzZS4KKworCisxLjkgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworCisxLjEwICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy5TdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIFN5YmFzZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZiBTeWJhc2VgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKworMi4xIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCBhbmQvb3IgUGVyc29uYWwgVXNlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgU3liYXNlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7IGFuZCAKKworKGIpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mIENvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDYuCisKKyhjKSBXaGVuZXZlciByZWFzb25hYmx5IGZlYXNpYmxlIHlvdSBzaG91bGQgaW5jbHVkZSB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UgaW4gYSBjbGljay13cmFwIGZvcm1hdCwgd2hpY2ggcmVxdWlyZXMgYWZmaXJtYXRpdmUgYWNjZXB0YW5jZSBieSBjbGlja2luZyBvbiBhbiAiSSBhY2NlcHQiIGJ1dHRvbiBvciBzaW1pbGFyIG1lY2hhbmlzbS4gSWYgYSBjbGljay13cmFwIGZvcm1hdCBpcyBub3QgaW5jbHVkZWQsIHlvdSBtdXN0IGluY2x1ZGUgYSBzdGF0ZW1lbnQgdGhhdCBhbnkgdXNlIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uIG9yIGRpc3RyaWJ1dGlvbikgb2YgdGhlIFNvZnR3YXJlLCBhbmQgYW55IG90aGVyIGFmZmlybWF0aXZlIGFjdCB0aGF0IHlvdSBkZWZpbmUsIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIExpY2Vuc2UsIGFuZCBpbnN0cnVjdGluZyB0aGUgdXNlciBub3QgdG8gdXNlIHRoZSBDb3ZlcmVkIENvZGUgaW4gYW55IG1hbm5lciBpZiB0aGUgdXNlciBkb2VzIG5vdCBhY2NlcHQgYWxsIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZS4KKworCisyLjIgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7IAorCisoYikgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyAKKworKGMpIFlvdSBtdXN0IG1ha2UgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBZb3Ugc2hvdWxkIHByZWZlcmFibHkgZGlzdHJpYnV0ZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSk7IAorCisoZCkgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LCBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGU7IGFuZCAKKworKGUpIHRoZSBvYmplY3QgY29kZSBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFlvdXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0IHN1Y2ggbGljZW5zZSBhZ3JlZW1lbnQgY29udGFpbnMgdGVybXMgbm8gbGVzcyBwcm90ZWN0aXZlIG9mIFN5YmFzZSBhbmQgZWFjaCBDb250cmlidXRvciB0aGFuIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBzdGF0aW5nIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eS4KKworCisyLjMgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBTeWJhc2UgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgU3liYXNlIG9yIGFueSBDb250cmlidXRvciB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIFN5YmFzZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgQ29kZS4KKworCiszLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgaGVyZWJ5IGdyYW50IHRvIFN5YmFzZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIFN5YmFzZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yLgorCisKKzQuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gZWFjaCBzdWNoIGluc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLgorCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkgU3liYXNlIGhlcmVpbi4gTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gU3liYXNlIHdoaWNoIFN5YmFzZSBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4KKworCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZSAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBTeWJhc2UgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IFN5YmFzZSBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBTeWJhc2UgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN5YmFzZS4gTm8gb25lIG90aGVyIHRoYW4gU3liYXNlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIFNZQkFTRSBBTkQgU1lCQVNFYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiU1lCQVNFIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDkpIEFORCBBTEwgQ09OVFJJQlVUT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIFNZQkFTRSBBTkQgRUFDSCBDT05UUklCVVRPUiBET0VTIE5PVCBXQVJSQU5UIEFHQUlOU1QgSU5URVJGRVJFTkNFIFdJVEggWU9VUiBFTkpPWU1FTlQgT0YgVEhFIENPVkVSRUQgQ09ERSwgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIFNZQkFTRSwgQSBTWUJBU0UgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBTWUJBU0UgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwgT1IgT1RIRVIgREFNQUdFUyBPRiBBTlkgS0lORCBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIFNZQkFTRSBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgT1IgT1RIRVIgREFNQUdFUyBPRiBBTlkgS0lORCwgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBTeWJhc2VgcyBvciBhbnkgQ29udHJpYnV0b3JgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaXZlIGh1bmRyZWQgZG9sbGFycyAoJDUwMC4wMCkuCisKKworMTAuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAiU3liYXNlIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gU3liYXNlIChjb2xsZWN0aXZlbHkgIlN5YmFzZSBNYXJrcyIpIG9yIHRvIGFueSB0cmFkZW1hcmsgb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yKCJDb250cmlidXRvciBNYXJrcyIpLiBObyBTeWJhc2UgTWFya3Mgb3IgQ29udHJpYnV0b3IgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiB3aXRoIHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgU3liYXNlIG9yIHRoZSBDb250cmlidXRvciwgYXMgYXBwbGljYWJsZS4KKworCisxMS4gT3duZXJzaGlwLiBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBTeWJhc2UgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBTeWJhc2UgKCJTeWJhc2UgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBTeWJhc2UgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBTeWJhc2UgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIFN5YmFzZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLgorCisxMi4gVGVybWluYXRpb24uCisKKworMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsKKworKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvcgorCisoYykgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCAoaW5jbHVkaW5nIGFzIGEgY3Jvc3MgY2xhaW0gb3IgY291bnRlcmNsYWltKSBhZ2FpbnN0IFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IuCisKKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB0aGF0IGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS4KKworCisxMy4gTWlzY2VsbGFuZW91cy4KKworCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisKKzEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nIHlvdSwgU3liYXNlIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3Igb3RoZXJ3aXNlLgorCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIFN5YmFzZWBzIG9yIGFueSBDb250cmlidXRvcmBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworCisxMy41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIFN5YmFzZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgU3liYXNlIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mIENhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgb250IGV4aWcmIzIzMjsgcXVlIGxlIHByJiMyMzI7c2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgciYjMjMyO2RpJiMyMzI7cyBlbiBhbmdsYWlzLgorCisKK0VYSElCSVQgQS4gCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5ODMtMjAwMiBTeWJhc2UsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mIE9yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgU3liYXNlIE9wZW4gV2F0Y29tIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wICh0aGUgYExpY2Vuc2VgKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBCWSBVU0lORyBUSElTIEZJTEUgWU9VIEFHUkVFIFRPIEFMTCBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgTElDRU5TRS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIHByb3ZpZGVkIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCB3d3cuc3liYXNlLmNvbS9kZXZlbG9wZXIvb3BlbnNvdXJjZS4gCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBTWUJBU0UgQU5EIEFMTCBDT05UUklCVVRPUlMgSEVSRUJZIERJU0NMQUlNIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWYzYmY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMApAQCAtMCwwICsxLDIyIEBACitDb3B5cmlnaHQgKEMpIDE5OTQtMjAwMyBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitYRlJFRTg2IFBST0pFQ1QgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCitBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCitXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFhGcmVlODYgUHJvamVjdCBzaGFsbCBub3QKK2JlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncworaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYRnJlZTg2IFByb2plY3QuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4xIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE1Y2IyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMQpAQCAtMCwwICsxLDE4IEBACisKK1hGcmVlODYgTGljZW5zZSAodmVyc2lvbiAxLjEpCisKK0NvcHlyaWdodCAoQykgMTk5NC0yMDA2IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCBpbiB0aGUgc2FtZSBwbGFjZSBhbmQgZm9ybSBhcyBvdGhlciBjb3B5cmlnaHQsIGxpY2Vuc2UgYW5kIGRpc2NsYWltZXIgaW5mb3JtYXRpb24uCisKKzMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMgKGh0dHA6Ly93d3cueGZyZWU4Ni5vcmcvKSBhbmQgaXRzIGNvbnRyaWJ1dG9ycyIsIGluIHRoZSBzYW1lIHBsYWNlIGFuZCBmb3JtIGFzIG90aGVyIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cy4gQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLCBpbiB0aGUgc2FtZSBmb3JtIGFuZCBsb2NhdGlvbiBhcyBvdGhlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cy4KKworNC4gRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgWEZSRUU4NiBQUk9KRUNULCBJTkMgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YU0wgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTgyZDYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YU0wKQEAgLTAsMCArMSw0OCBAQAorQ29weXJpZ2h0CistLS0tLS0tLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDA3IE5vcm1hbiBXYWxzaAorQ29weXJpZ2h0IChDKSAyMDAzIEppxZnDrSBLb3NlaworQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgU3RldmUgQmFsbAorQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGhlIERvY0Jvb2sgUHJvamVjdAorQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTydSZWlsbHkgTWVkaWEKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCitzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIGluZGl2aWR1YWxzCitjcmVkaXRlZCB3aXRoIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyCitkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitmcm9tIHRoZSBpbmRpdmlkdWFscyBpbiBxdWVzdGlvbi4KKworQW55IHN0eWxlc2hlZXQgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgdGhhdCBpcyBwdWJsaWNhbGx5CitkaXN0cmlidXRlZCB3aWxsIGJlIGlkZW50aWZpZWQgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCB0aGUKK3ZlcnNpb24gc3RyaW5ncyBpbiBhbnkgZGVyaXZlZCBTb2Z0d2FyZSB3aWxsIGJlIGNoYW5nZWQgc28gdGhhdAorbm8gcG9zc2liaWxpdHkgb2YgY29uZnVzaW9uIGJldHdlZW4gdGhlIGRlcml2ZWQgcGFja2FnZSBhbmQgdGhpcworU29mdHdhcmUgd2lsbCBleGlzdC4KKworV2FycmFudHkKKy0tLS0tLS0tCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIE5PUk1BTiBXQUxTSCBPUiBBTlkgT1RIRVIKK0NPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitDb250YWN0aW5nIHRoZSBBdXRob3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIERvY0Jvb2sgWFNMIHN0eWxlc2hlZXRzIGFyZSBtYWludGFpbmVkIGJ5IE5vcm1hbiBXYWxzaCwKKzxuZHdAbndhbHNoLmNvbT4sIGFuZCBtZW1iZXJzIG9mIHRoZSBEb2NCb29rIFByb2plY3QsCis8ZG9jYm9vay1kZXZlbG9wZXJzQHNmLm5ldD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWG5ldCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWG5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQ0ZWRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YbmV0CkBAIC0wLDAgKzEsMjcgQEAKKworVGhlIFguTmV0LCBJbmMuIExpY2Vuc2UKK1RoaXMgTGljZW5zZSBoYXMgYmVlbiB2b2x1bnRhcmlseSBkZXByZWNhdGVkIGJ5IGl0cyBhdXRob3IuCisKK0NvcHlyaWdodCAoYykgMjAwMC0yMDAxIFguTmV0LCBJbmMuIExhZmF5ZXR0ZSwgQ2FsaWZvcm5pYSwgVVNBCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCitUaGlzIGFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBpbiBhbGwgcmVzcGVjdHMgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mCitDYWxpZm9ybmlhIGFuZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1lQTC0xLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1lQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExODgwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWVBMLTEuMQpAQCAtMCwwICsxLDMwIEBACisKK1lhaG9vISBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjEgKFlQTCkKK1RoaXMgWWFob28hIFB1YmxpYyBMaWNlbnNlICh0aGlzICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCB0aGF0IGRlc2NyaWJlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggWWFob28hIEluYy4sIGEgRGVsYXdhcmUgY29ycG9yYXRpb24gaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgNzAxIEZpcnN0IEF2ZW51ZSwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhIDk0MDg5ICgiWWFob28hIikgd2lsbCBwcm92aWRlIHNvZnR3YXJlIHRvIHlvdSB2aWEgZG93bmxvYWQgb3Igb3RoZXJ3aXNlICgiU29mdHdhcmUiKS4gQnkgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UsIGFuIGluZGl2aWR1YWwgb3IgYW4gZW50aXR5ICgiWW91IikgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHRoZSBtdXR1YWwgcHJvbWlzZXMgYW5kIHVwb24gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBiZWxvdywgdGhlIHBhcnRpZXMgYWdyZWUgYXMgZm9sbG93czoKKworR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UKKzEuMSAtIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBZYWhvbyEgaGVyZWJ5IGdyYW50cyB0byBZb3UsIHVuZGVyIGFueSBhbmQgYWxsIG9mIGl0cyBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSwgYSByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byBjb3B5LCBtb2RpZnksIGNvbXBpbGUsIGV4ZWN1dGUsIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgTW9kaWZpY2F0aW9ucy4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudCwgYW55IGNoYW5nZSB0bywgYWRkaXRpb24gdG8sIG9yIGFicmlkZ2VtZW50IG9mIHRoZSBTb2Z0d2FyZSBtYWRlIGJ5IFlvdSBpcyBhICJNb2RpZmljYXRpb247IiBob3dldmVyLCBhbnkgZmlsZSBZb3UgYWRkIHRvIHRoZSBTb2Z0d2FyZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHBhcnQgb2YgdGhlIFNvZnR3YXJlIGlzIG5vdCBhICJNb2RpZmljYXRpb24uIgorMS4yIC0gSWYgWW91IGFyZSBhbiBpbmRpdmlkdWFsIGFjdGluZyBvbiBiZWhhbGYgb2YgYSBjb3Jwb3JhdGlvbiBvciBvdGhlciBlbnRpdHksIFlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIGlzIHN1YmplY3QgdG8gWW91ciBoYXZpbmcgdGhlIGF1dGhvcml0eSB0byBiaW5kIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IHRvIHRoaXMgQWdyZWVtZW50LiBQcm92aWRpbmcgY29waWVzIHRvIHBlcnNvbnMgd2l0aGluIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IGlzIG5vdCBjb25zaWRlcmVkIGRpc3RyaWJ1dGlvbiBmb3IgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisxLjMgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBkbyBzbyBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IHdpdGggWW91ciBkaXN0cmlidXRpb24uIFdpdGggcmVzcGVjdCB0byBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYXBwbHkgdG8gWW91IGluIHRoZSBzYW1lIHdheSB0aG9zZSB0ZXJtcyBhcHBseSB0byBZYWhvbyEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb2Z0d2FyZS4gSW4gb3RoZXIgd29yZHMsIHdoZW4gWW91IGFyZSBkaXN0cmlidXRpbmcgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCwgWW91ICJzdGFuZCBpbiB0aGUgc2hvZXMiIG9mIFlhaG9vISBpbiB0ZXJtcyBvZiB0aGUgcmlnaHRzIFlvdSBncmFudCBhbmQgaG93IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSB0byBZb3UgYW5kIHRoZSBsaWNlbnNlZXMgb2YgWW91ciBNb2RpZmljYXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgd2hlbiBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgWWFob28hLCBZb3UgYXJlIG5vdCBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gcHJvdmlzaW9uIHVuZGVyIFNlY3Rpb24gNywgd2hpY2ggcmVxdWlyZXMgYWxsIGRpc3B1dGVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRvIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBub3J0aGVybiBDYWxpZm9ybmlhLgorMS40IC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCwgWW91IG11c3QgYWxzbyBwcm92aWRlIHJlY2lwaWVudHMgd2l0aCBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiBpbiBzb3VyY2UgY29kZSBmb3JtYXQgYWxvbmcgd2l0aCBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQuIFRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbnMgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0IG1heSBiZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJbiBhZGRpdGlvbiwgWW91IG11c3QgbWFrZSBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IGxpY2Vuc2UgdGVybXMgYXBwbHlpbmcgdG8gc3VjaCBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gdGhhdCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUgYW5kIG5vdCBieSBZYWhvbyEsIGFuZCB0aGF0IHN1Y2ggbGljZW5zZSBkb2VzIG5vdCByZXN0cmljdCByZWNpcGllbnRzIGZyb20gZXhlcmNpc2luZyByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBTb2Z0d2FyZSBncmFudGVkIGJ5IFlhaG9vISB1bmRlciB0aGlzIEFncmVlbWVudCBvciByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGFueSBNb2RpZmljYXRpb24gZ3JhbnRlZCBieSBZb3UgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMS4zLgorMS41IC0gVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgbGltaXQgWW91ciByaWdodCB0byBkaXN0cmlidXRlIGZpbGVzIHRoYXQgYXJlIGVudGlyZWx5IFlvdXIgb3duIHdvcmsgKGkuZS4sIHdoaWNoIGRvIG5vdCBpbmNvcnBvcmF0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUgYW5kIGFyZSBub3QgTW9kaWZpY2F0aW9ucykgdW5kZXIgYW55IHRlcm1zIFlvdSBjaG9vc2UuCitTdXBwb3J0CitZYWhvbyEgaGFzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmlkZSB0ZWNobmljYWwgc3VwcG9ydCBvciB1cGRhdGVzIHRvIFlvdS4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCByZXF1aXJlcyBZYWhvbyEgdG8gZW50ZXIgaW50byBhbnkgbGljZW5zZSB3aXRoIFlvdSBmb3IgYW55IG90aGVyIGVkaXRpb24gb2YgdGhlIFNvZnR3YXJlLgorSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cworMy4xIC0gRXhjZXB0IGZvciB0aGUgbGljZW5zZSBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciBjb3B5cmlnaHQgaW4gU2VjdGlvbiAxLjEsIG5vIHJpZ2h0cywgbGljZW5zZXMgb3IgZm9yYmVhcmFuY2VzIGFyZSBncmFudGVkIG9yIG1heSBhcmlzZSBpbiByZWxhdGlvbiB0byB0aGlzIEFncmVlbWVudCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGV4aGF1c3Rpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cywgaW5jbHVkaW5nIGFsbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCB0aGF0IGFyZSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIGhlcmVieSByZXNlcnZlZC4KKzMuMiAtIEluIGFueSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvciBpbiBhbnkgTW9kaWZpY2F0aW9uIHlvdSBjcmVhdGUsIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlLCBhbnkgYW5kIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgU29mdHdhcmUgaW4gdGhlIHNhbWUgZm9ybSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgU29mdHdhcmUuIFRoaXMgaW5jbHVkZXMgdGhlIHByZXNlcnZhdGlvbiBvZiBhdHRyaWJ1dGlvbiBub3RpY2VzIGluIHRoZSBmb3JtIG9mIHRyYWRlbWFya3Mgb3IgbG9nb3MgdGhhdCBleGlzdCB3aXRoaW4gYSB1c2VyIGludGVyZmFjZSBvZiB0aGUgU29mdHdhcmUuCiszLjMgLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgWW91IHJpZ2h0cyB0byB1c2UgYW55IHBhcnR5YHMgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcywgZXhjZXB0IHNvbGVseSBhcyBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjIuCitEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBZQUhPTyEgTUFLRVMgTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBPUiBTVEFUVVRPUlkgUkVHQVJESU5HIE9SIFJFTEFUSU5HIFRPIFRIRSBTT0ZUV0FSRS4gU1BFQ0lGSUNBTExZLCBZQUhPTyEgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIEVSUk9SIEZSRUUgT1IgV0lMTCBQRVJGT1JNIElOIEFOIFVOSU5URVJSVVBURUQgTUFOTkVSLiBUTyBUSEUgR1JFQVRFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBZQUhPTyEgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgKEVWRU4gSUYgWUFIT08hIEhBRCBCRUVOIElORk9STUVEIE9GIFNVQ0ggUFVSUE9TRSksIEFORCBOT05JTkZSSU5HRU1FTlQgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRSwgQU5ZIE1PRElGSUNBVElPTlMgVEhFUkVUTyBBTkQgV0lUSCBSRVNQRUNUIFRPIFRIRSBVU0UgT0YgVEhFIEZPUkVHT0lORy4KK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5CitJTiBOTyBFVkVOVCBXSUxMIFlBSE9PISBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NTIE9GIFBST0ZJVFMsIExPU1MgT0YgVVNFLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgREFUQSwgQ09TVCBPRiBDT1ZFUikgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRIRSBGVVJOSVNISU5HLCBQRVJGT1JNQU5DRSBPUiBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIEFOWSBPVEhFUiBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIFdIRVRIRVIgQUxMRUdFRCBBUyBBIEJSRUFDSCBPRiBDT05UUkFDVCBPUiBUT1JUSU9VUyBDT05EVUNULCBJTkNMVURJTkcgTkVHTElHRU5DRSwgQU5EIEVWRU4gSUYgWUFIT08hIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KK1Rlcm0gYW5kIFRlcm1pbmF0aW9uCis2LjEgLSBUaGlzIEFncmVlbWVudCB3aWxsIGNvbnRpbnVlIGluIGVmZmVjdCB1bmxlc3MgYW5kIHVudGlsIHRlcm1pbmF0ZWQgZWFybGllciBwdXJzdWFudCB0byB0aGlzIFNlY3Rpb24gNi4KKzYuMiAtIEluIHRoZSBldmVudCBZb3UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIFlhaG9vISBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50LgorNi4zIC0gQWxsIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyIHNoYWxsIHRlcm1pbmF0ZSB1cG9uIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4gVGVybWluYXRpb24gd2lsbCBiZSBpbiBhZGRpdGlvbiB0byBhbnkgcmlnaHRzIGFuZCByZW1lZGllcyBhdmFpbGFibGUgdG8gWWFob28hIGF0IGxhdyBvciBlcXVpdHkgb3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCis2LjQgLSBUZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBhZmZlY3QgdGhlIHByb3Zpc2lvbnMgcmVnYXJkaW5nIHJlc2VydmF0aW9uIG9mIHJpZ2h0cyAoU2VjdGlvbiAzLjEpLCBwcm92aXNpb25zIGRpc2NsYWltaW5nIG9yIGxpbWl0aW5nIFlhaG9vIWBzIGxpYWJpbGl0eSAoU2VjdGlvbnMgNCBhbmQgNSksIFRlcm1pbmF0aW9uIChTZWN0aW9uIDYpIG9yIE1pc2NlbGxhbmVvdXMgKFNlY3Rpb24gNyksIHdoaWNoIHByb3Zpc2lvbnMgd2lsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorTWlzY2VsbGFuZW91cworVGhpcyBBZ3JlZW1lbnQgY29udGFpbnMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBhbmQgc3VwZXJzZWRlcyBhbGwgcHJldmlvdXMgY29tbXVuaWNhdGlvbnMsIHJlcHJlc2VudGF0aW9ucywgdW5kZXJzdGFuZGluZ3MgYW5kIGFncmVlbWVudHMsIGVpdGhlciBvcmFsIG9yIHdyaXR0ZW4sIGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHNhaWQgc3ViamVjdCBtYXR0ZXIuIFRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhcnRpZXMgaGVyZXVuZGVyIGlzIHRoYXQgb2YgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMsIGFuZCB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBwYXJ0aWVzLiBJZiBhbnkgdGVybSwgY29uZGl0aW9uLCBvciBwcm92aXNpb24gaW4gdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdG8gYmUgaW52YWxpZCwgdW5sYXdmdWwgb3IgdW5lbmZvcmNlYWJsZSB0byBhbnkgZXh0ZW50LCB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGNvbnN0cnVlZCBpbiBhIG1hbm5lciB0aGF0IG1vc3QgY2xvc2VseSBlZmZlY3R1YXRlcyB0aGUgaW50ZW50IG9mIHRoaXMgQWdyZWVtZW50LiBTdWNoIGludmFsaWQgdGVybSwgY29uZGl0aW9uIG9yIHByb3Zpc2lvbiB3aWxsIGJlIHNldmVyZWQgZnJvbSB0aGUgcmVtYWluaW5nIHRlcm1zLCBjb25kaXRpb25zIGFuZCBwcm92aXNpb25zLCB3aGljaCB3aWxsIGNvbnRpbnVlIHRvIGJlIHZhbGlkIGFuZCBlbmZvcmNlYWJsZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBhbmQgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgd2l0aG91dCByZWdhcmQgdG8gY29uZmxpY3Qgb2YgbGF3IHByaW5jaXBsZXMuIFRoZSBVLk4uIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIEFncmVlbWVudC4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50IGludm9sdmluZyBZYWhvbyEgb3IgYW55IG9mIGl0cyBzdWJzaWRpYXJpZXMgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBub3J0aGVybiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYS4gTm8gcmlnaHRzIG1heSBiZSBhc3NpZ25lZCwgbm8gb2JsaWdhdGlvbnMgbWF5IGJlIGRlbGVnYXRlZCwgYW5kIHRoaXMgQWdyZWVtZW50IG1heSBub3QgYmUgdHJhbnNmZXJyZWQgYnkgWW91LCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aGV0aGVyIHZvbHVudGFyeSBvciBieSBvcGVyYXRpb24gb2YgbGF3LCBpbmNsdWRpbmcgYnkgd2F5IG9mIHNhbGUgb2YgYXNzZXRzLCBtZXJnZXIgb3IgY29uc29saWRhdGlvbiwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFlhaG9vISwgYW5kIGFueSBwdXJwb3J0ZWQgYXNzaWdubWVudCwgZGVsZWdhdGlvbiBvciB0cmFuc2ZlciB3aXRob3V0IHN1Y2ggY29uc2VudCBzaGFsbCBiZSB2b2lkIGFiIGluaXRpby4gQW55IHdhaXZlciBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBvZiBhIHBhcnR5YHMgcmlnaHRzIG9yIHJlbWVkaWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW4gd3JpdGluZyB0byBiZSBlZmZlY3RpdmUuIEZhaWx1cmUsIG5lZ2xlY3Qgb3IgZGVsYXkgYnkgYSBwYXJ0eSB0byBlbmZvcmNlIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIGl0cyByaWdodHMgb3IgcmVtZWRpZXMgYXQgYW55IHRpbWUsIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBvciBiZSBkZWVtZWQgdG8gYmUgYSB3YWl2ZXIgb2Ygc3VjaCBwYXJ0eWBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgd2lsbCBub3QgaW4gYW55IHdheSBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSB3aG9sZSBvciBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBvciBwcmVqdWRpY2Ugc3VjaCBwYXJ0eWBzIHJpZ2h0IHRvIHRha2Ugc3Vic2VxdWVudCBhY3Rpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTEuMSBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFhYmVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMS4xCkBAIC0wLDAgKzEsMjggQEAKKworWm9wZSBQdWJsaWMgTGljZW5zZSAoWlBMKSBWZXJzaW9uIDEuMQorCitDb3B5cmlnaHQgKGMpIFpvcGUgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgbGljZW5zZSBoYXMgYmVlbiBjZXJ0aWZpZWQgYXMgb3BlbiBzb3VyY2UuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIGFuZCBkb2N1bWVudGF0aW9uIG1lbnRpb25pbmcgZmVhdHVyZXMgZGVyaXZlZCBmcm9tIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFpvcGUgQ29ycG9yYXRpb24gZm9yIHVzZSBpbiB0aGUgWiBPYmplY3QgUHVibGlzaGluZyBFbnZpcm9ubWVudCAoaHR0cDovL3d3dy56b3BlLmNvbS8pLiIKKworSW4gdGhlIGV2ZW50IHRoYXQgdGhlIHByb2R1Y3QgYmVpbmcgYWR2ZXJ0aXNlZCBpbmNsdWRlcyBhbiBpbnRhY3QgWm9wZSBkaXN0cmlidXRpb24gKHdpdGggY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluY2x1ZGVkKSB0aGVuIHRoaXMgY2xhdXNlIGlzIHdhaXZlZC4KKworTmFtZXMgYXNzb2NpYXRlZCB3aXRoIFpvcGUgb3IgWm9wZSBDb3Jwb3JhdGlvbiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIFpvcGUgQ29ycG9yYXRpb24uCitNb2RpZmllZCByZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgWm9wZSBDb3Jwb3JhdGlvbiBmb3IgdXNlIGluIHRoZSBaIE9iamVjdCBQdWJsaXNoaW5nIEVudmlyb25tZW50IChodHRwOi8vd3d3LnpvcGUuY29tLykuIgorCitJbnRhY3QgKHJlLSlkaXN0cmlidXRpb25zIG9mIGFueSBvZmZpY2lhbCBab3BlIHJlbGVhc2UgZG8gbm90IHJlcXVpcmUgYW4gZXh0ZXJuYWwgYWNrbm93bGVkZ2VtZW50LgorCitNb2RpZmljYXRpb25zIGFyZSBlbmNvdXJhZ2VkIGJ1dCBtdXN0IGJlIHBhY2thZ2VkIHNlcGFyYXRlbHkgYXMgcGF0Y2hlcyB0byBvZmZpY2lhbCBab3BlIHJlbGVhc2VzLiBEaXN0cmlidXRpb25zIHRoYXQgZG8gbm90IGNsZWFybHkgc2VwYXJhdGUgdGhlIHBhdGNoZXMgZnJvbSB0aGUgb3JpZ2luYWwgd29yayBtdXN0IGJlIGNsZWFybHkgbGFiZWxlZCBhcyB1bm9mZmljaWFsIGRpc3RyaWJ1dGlvbnMuIE1vZGlmaWNhdGlvbnMgd2hpY2ggZG8gbm90IGNhcnJ5IHRoZSBuYW1lIFpvcGUgbWF5IGJlIHBhY2thZ2VkIGluIGFueSBmb3JtLCBhcyBsb25nIGFzIHRoZXkgY29uZm9ybSB0byBhbGwgb2YgdGhlIGNsYXVzZXMgYWJvdmUuCitEaXNjbGFpbWVyCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFpPUEUgQ09SUE9SQVRJT04gYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgWk9QRSBDT1JQT1JBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBab3BlIENvcnBvcmF0aW9uIGFuZCBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBab3BlIENvcnBvcmF0aW9uLiBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUgYWNjb21wYW55aW5nIGNyZWRpdHMgZmlsZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4wIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZTIwODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjAKQEAgLTAsMCArMSw2MSBAQAorCitab3BlIFB1YmxpYyBMaWNlbnNlIChaUEwpIFZlcnNpb24gMi4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNvZnR3YXJlIGlzIENvcHlyaWdodCAoYykgWm9wZSBDb3Jwb3JhdGlvbiAodG0pIGFuZAorQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGxpY2Vuc2UgaGFzIGJlZW4gY2VydGlmaWVkIGFzIG9wZW4gc291cmNlLiBJdCBoYXMgYWxzbworYmVlbiBkZXNpZ25hdGVkIGFzIEdQTCBjb21wYXRpYmxlIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uIChGU0YpLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCit3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZQorZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCiszLiBUaGUgbmFtZSBab3BlIENvcnBvcmF0aW9uICh0bSkgbXVzdCBub3QgYmUgdXNlZCB0bworICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIFpvcGUgQ29ycG9yYXRpb24uCisKKzQuIFRoZSByaWdodCB0byBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgb3IgdG8gdXNlIGl0IGZvcgorICAgYW55IHB1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MKKyAgIChzbSkgb3IgVHJhZGVtYXJrcyAodG0pIG9mIFpvcGUgQ29ycG9yYXRpb24uIFVzZSBvZiB0aGVtIGlzCisgICBjb3ZlcmVkIGluIGEgc2VwYXJhdGUgYWdyZWVtZW50IChzZWUKKyAgIGh0dHA6Ly93d3cuem9wZS5jb20vTWFya3MpLgorCis1LiBJZiBhbnkgZmlsZXMgYXJlIG1vZGlmaWVkLCB5b3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQKKyAgIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZAorICAgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCitEaXNjbGFpbWVyCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBaT1BFIENPUlBPUkFUSU9OIGBgQVMgSVNgYAorICBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUCisgIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgorICBOTyBFVkVOVCBTSEFMTCBaT1BFIENPUlBPUkFUSU9OIE9SIElUUyBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICBEQU1BR0UuCisKKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiBjb250cmlidXRpb25zIG1hZGUgYnkgWm9wZQorQ29ycG9yYXRpb24gYW5kIG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIFpvcGUKK0NvcnBvcmF0aW9uLiAgU3BlY2lmaWMgYXR0cmlidXRpb25zIGFyZSBsaXN0ZWQgaW4gdGhlCithY2NvbXBhbnlpbmcgY3JlZGl0cyBmaWxlLgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ZDQzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMQpAQCAtMCwwICsxLDE4IEBACisKK1pQTCAyLjEKK1pvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAyLjEKKworQSBjb3B5cmlnaHQgbm90aWNlIGFjY29tcGFuaWVzIHRoaXMgbGljZW5zZSBkb2N1bWVudCB0aGF0IGlkZW50aWZpZXMgdGhlIGNvcHlyaWdodCBob2xkZXJzLgorCitUaGlzIGxpY2Vuc2UgaGFzIGJlZW4gY2VydGlmaWVkIGFzIG9wZW4gc291cmNlLiBJdCBoYXMgYWxzbyBiZWVuIGRlc2lnbmF0ZWQgYXMgR1BMIGNvbXBhdGlibGUgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAoRlNGKS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFjY29tcGFueWluZyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorTmFtZXMgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gdGhlIGNvcHlyaWdodCBob2xkZXJzLgorVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yIGFueSBwdXJwb3NlIGRvZXMgbm90IGdpdmUgeW91IHRoZSByaWdodCB0byB1c2UgU2VydmljZW1hcmtzIChzbSkgb3IgVHJhZGVtYXJrcyAodG0pIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4gVXNlIG9mIHRoZW0gaXMgY292ZXJlZCBieSBzZXBhcmF0ZSBhZ3JlZW1lbnQgd2l0aCB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCitJZiBhbnkgZmlsZXMgYXJlIG1vZGlmaWVkLCB5b3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK0Rpc2NsYWltZXIKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aaW1icmEtMS4zIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aaW1icmEtMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjdiMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ppbWJyYS0xLjMKQEAgLTAsMCArMSwzMCBAQAorCitaaW1icmEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4zIChaUEwpCitUaGlzIFppbWJyYSBQdWJsaWMgTGljZW5zZSAodGhpcyAiQWdyZWVtZW50IikgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgdGhhdCBkZXNjcmliZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIFZNd2FyZSwgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCAzNDAxIEhpbGx2aWV3IEF2ZW51ZSwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzA0ICgiVk13YXJlIikgd2lsbCBwcm92aWRlIHNvZnR3YXJlIHRvIHlvdSB2aWEgZG93bmxvYWQgb3Igb3RoZXJ3aXNlICgiU29mdHdhcmUiKS4gQnkgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UsIGFuIGluZGl2aWR1YWwgb3IgYW4gZW50aXR5ICgiWW91IikgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCitJbiBjb25zaWRlcmF0aW9uIG9mIHRoZSBtdXR1YWwgcHJvbWlzZXMgYW5kIHVwb24gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBiZWxvdywgdGhlIHBhcnRpZXMgYWdyZWUgYXMgZm9sbG93czoKKworMS4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UKKzEuMSAtIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBWTXdhcmUgaGVyZWJ5IGdyYW50cyB0byBZb3UsIHVuZGVyIGFueSBhbmQgYWxsIG9mIGl0cyBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSwgYSByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byBjb3B5LCBtb2RpZnksIGNvbXBpbGUsIGV4ZWN1dGUsIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQgTW9kaWZpY2F0aW9ucy4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudCwgYW55IGNoYW5nZSB0bywgYWRkaXRpb24gdG8sIG9yIGFicmlkZ2VtZW50IG9mIHRoZSBTb2Z0d2FyZSBtYWRlIGJ5IFlvdSBpcyBhICJNb2RpZmljYXRpb247IiBob3dldmVyLCBhbnkgZmlsZSBZb3UgYWRkIHRvIHRoZSBTb2Z0d2FyZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHBhcnQgb2YgdGhlIFNvZnR3YXJlIGlzIG5vdCBhICJNb2RpZmljYXRpb24uIgorMS4yIC0gSWYgWW91IGFyZSBhbiBpbmRpdmlkdWFsIGFjdGluZyBvbiBiZWhhbGYgb2YgYSBjb3Jwb3JhdGlvbiBvciBvdGhlciBlbnRpdHksIFlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIGlzIHN1YmplY3QgdG8gWW91ciBoYXZpbmcgdGhlIGF1dGhvcml0eSB0byBiaW5kIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IHRvIHRoaXMgQWdyZWVtZW50LiBQcm92aWRpbmcgY29waWVzIHRvIHBlcnNvbnMgd2l0aGluIHN1Y2ggY29ycG9yYXRpb24gb3IgZW50aXR5IGlzIG5vdCBjb25zaWRlcmVkIGRpc3RyaWJ1dGlvbiBmb3IgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisxLjMgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBkbyBzbyBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IHdpdGggWW91ciBkaXN0cmlidXRpb24uIFdpdGggcmVzcGVjdCB0byBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYXBwbHkgdG8gWW91IGluIHRoZSBzYW1lIHdheSB0aG9zZSB0ZXJtcyBhcHBseSB0byBWTXdhcmUgd2l0aCByZXNwZWN0IHRvIHRoZSBTb2Z0d2FyZS4gSW4gb3RoZXIgd29yZHMsIHdoZW4gWW91IGFyZSBkaXN0cmlidXRpbmcgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCwgWW91ICJzdGFuZCBpbiB0aGUgc2hvZXMiIG9mIFZNd2FyZSBpbiB0ZXJtcyBvZiB0aGUgcmlnaHRzIFlvdSBncmFudCBhbmQgaG93IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSB0byBZb3UgYW5kIHRoZSBsaWNlbnNlZXMgb2YgWW91ciBNb2RpZmljYXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgd2hlbiBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgVk13YXJlLCBZb3UgYXJlIG5vdCBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gcHJvdmlzaW9uIHVuZGVyIFNlY3Rpb24gNywgd2hpY2ggcmVxdWlyZXMgYWxsIGRpc3B1dGVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRvIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBub3J0aGVybiBDYWxpZm9ybmlhLgorMS40IC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCwgWW91IG11c3QgYWxzbyBwcm92aWRlIHJlY2lwaWVudHMgd2l0aCBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiBpbiBzb3VyY2UgY29kZSBmb3JtYXQgYWxvbmcgd2l0aCBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQuIFRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbnMgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0IG1heSBiZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJbiBhZGRpdGlvbiwgWW91IG11c3QgbWFrZSBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IGxpY2Vuc2UgdGVybXMgYXBwbHlpbmcgdG8gc3VjaCBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gdGhhdCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUgYW5kIG5vdCBieSBWTXdhcmUsIGFuZCB0aGF0IHN1Y2ggbGljZW5zZSBkb2VzIG5vdCByZXN0cmljdCByZWNpcGllbnRzIGZyb20gZXhlcmNpc2luZyByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSBTb2Z0d2FyZSBncmFudGVkIGJ5IFZNd2FyZSB1bmRlciB0aGlzIEFncmVlbWVudCBvciByaWdodHMgaW4gdGhlIHNvdXJjZSBjb2RlIHRvIGFueSBNb2RpZmljYXRpb24gZ3JhbnRlZCBieSBZb3UgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMS4zLgorMS41IC0gVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgbGltaXQgWW91ciByaWdodCB0byBkaXN0cmlidXRlIGZpbGVzIHRoYXQgYXJlIGVudGlyZWx5IFlvdXIgb3duIHdvcmsgKGkuZS4sIHdoaWNoIGRvIG5vdCBpbmNvcnBvcmF0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUgYW5kIGFyZSBub3QgTW9kaWZpY2F0aW9ucykgdW5kZXIgYW55IHRlcm1zIFlvdSBjaG9vc2UuCisyLiBTdXBwb3J0CitWTXdhcmUgaGFzIG5vIG9ibGlnYXRpb24gdG8gcHJvdmlkZSB0ZWNobmljYWwgc3VwcG9ydCBvciB1cGRhdGVzIHRvIFlvdS4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCByZXF1aXJlcyBWTXdhcmUgdG8gZW50ZXIgaW50byBhbnkgbGljZW5zZSB3aXRoIFlvdSBmb3IgYW55IG90aGVyIGVkaXRpb24gb2YgdGhlIFNvZnR3YXJlLgorMy4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cworMy4xIC0gRXhjZXB0IGZvciB0aGUgbGljZW5zZSBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciBjb3B5cmlnaHQgaW4gU2VjdGlvbiAxLjEsIG5vIHJpZ2h0cywgbGljZW5zZXMgb3IgZm9yYmVhcmFuY2VzIGFyZSBncmFudGVkIG9yIG1heSBhcmlzZSBpbiByZWxhdGlvbiB0byB0aGlzIEFncmVlbWVudCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGV4aGF1c3Rpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cywgaW5jbHVkaW5nIGFsbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCB0aGF0IGFyZSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIGhlcmVieSByZXNlcnZlZC4KKzMuMiAtIEluIGFueSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvciBpbiBhbnkgTW9kaWZpY2F0aW9uIHlvdSBjcmVhdGUsIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlLCBhbnkgYW5kIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgU29mdHdhcmUgaW4gdGhlIHNhbWUgZm9ybSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgU29mdHdhcmUuIFRoaXMgaW5jbHVkZXMgdGhlIHByZXNlcnZhdGlvbiBvZiBhdHRyaWJ1dGlvbiBub3RpY2VzIGluIHRoZSBmb3JtIG9mIHRyYWRlbWFya3Mgb3IgbG9nb3MgdGhhdCBleGlzdCB3aXRoaW4gYSB1c2VyIGludGVyZmFjZSBvZiB0aGUgU29mdHdhcmUuCiszLjMgLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgWW91IHJpZ2h0cyB0byB1c2UgYW55IHBhcnR5YHMgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcywgZXhjZXB0IHNvbGVseSBhcyBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjIuCis0LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBWTVdBUkUgTUFLRVMgTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBPUiBTVEFUVVRPUlkgUkVHQVJESU5HIE9SIFJFTEFUSU5HIFRPIFRIRSBTT0ZUV0FSRS4gU1BFQ0lGSUNBTExZLCBWTVdBUkUgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIEVSUk9SIEZSRUUgT1IgV0lMTCBQRVJGT1JNIElOIEFOIFVOSU5URVJSVVBURUQgTUFOTkVSLiBUTyBUSEUgR1JFQVRFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBWTVdBUkUgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgKEVWRU4gSUYgVk1XQVJFIEhBRCBCRUVOIElORk9STUVEIE9GIFNVQ0ggUFVSUE9TRSksIEFORCBOT05JTkZSSU5HRU1FTlQgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRSwgQU5ZIE1PRElGSUNBVElPTlMgVEhFUkVUTyBBTkQgV0lUSCBSRVNQRUNUIFRPIFRIRSBVU0UgT0YgVEhFIEZPUkVHT0lORy4KKzUuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5CitJTiBOTyBFVkVOVCBXSUxMIFZNV0FSRSBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NTIE9GIFBST0ZJVFMsIExPU1MgT0YgVVNFLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgREFUQSwgQ09TVCBPRiBDT1ZFUikgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRIRSBGVVJOSVNISU5HLCBQRVJGT1JNQU5DRSBPUiBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIEFOWSBPVEhFUiBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIFdIRVRIRVIgQUxMRUdFRCBBUyBBIEJSRUFDSCBPRiBDT05UUkFDVCBPUiBUT1JUSU9VUyBDT05EVUNULCBJTkNMVURJTkcgTkVHTElHRU5DRSwgQU5EIEVWRU4gSUYgVk1XQVJFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKzYuIFRlcm0gYW5kIFRlcm1pbmF0aW9uCis2LjEgLSBUaGlzIEFncmVlbWVudCB3aWxsIGNvbnRpbnVlIGluIGVmZmVjdCB1bmxlc3MgYW5kIHVudGlsIHRlcm1pbmF0ZWQgZWFybGllciBwdXJzdWFudCB0byB0aGlzIFNlY3Rpb24gNi4KKzYuMiAtIEluIHRoZSBldmVudCBZb3UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIFZNd2FyZSBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50LgorNi4zIC0gQWxsIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyIHNoYWxsIHRlcm1pbmF0ZSB1cG9uIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4gVGVybWluYXRpb24gd2lsbCBiZSBpbiBhZGRpdGlvbiB0byBhbnkgcmlnaHRzIGFuZCByZW1lZGllcyBhdmFpbGFibGUgdG8gVk13YXJlIGF0IGxhdyBvciBlcXVpdHkgb3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCis2LjQgLSBUZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBhZmZlY3QgdGhlIHByb3Zpc2lvbnMgcmVnYXJkaW5nIHJlc2VydmF0aW9uIG9mIHJpZ2h0cyAoU2VjdGlvbiAzLjEpLCBwcm92aXNpb25zIGRpc2NsYWltaW5nIG9yIGxpbWl0aW5nIFZNd2FyZWBzIGxpYWJpbGl0eSAoU2VjdGlvbnMgNCBhbmQgNSksIFRlcm1pbmF0aW9uIChTZWN0aW9uIDYpIG9yIE1pc2NlbGxhbmVvdXMgKFNlY3Rpb24gNyksIHdoaWNoIHByb3Zpc2lvbnMgd2lsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorNy4gTWlzY2VsbGFuZW91cworVGhpcyBBZ3JlZW1lbnQgY29udGFpbnMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBhbmQgc3VwZXJzZWRlcyBhbGwgcHJldmlvdXMgY29tbXVuaWNhdGlvbnMsIHJlcHJlc2VudGF0aW9ucywgdW5kZXJzdGFuZGluZ3MgYW5kIGFncmVlbWVudHMsIGVpdGhlciBvcmFsIG9yIHdyaXR0ZW4sIGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHNhaWQgc3ViamVjdCBtYXR0ZXIuIFRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHBhcnRpZXMgaGVyZXVuZGVyIGlzIHRoYXQgb2YgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMsIGFuZCB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBwYXJ0aWVzLiBJZiBhbnkgdGVybSwgY29uZGl0aW9uLCBvciBwcm92aXNpb24gaW4gdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdG8gYmUgaW52YWxpZCwgdW5sYXdmdWwgb3IgdW5lbmZvcmNlYWJsZSB0byBhbnkgZXh0ZW50LCB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGNvbnN0cnVlZCBpbiBhIG1hbm5lciB0aGF0IG1vc3QgY2xvc2VseSBlZmZlY3R1YXRlcyB0aGUgaW50ZW50IG9mIHRoaXMgQWdyZWVtZW50LiBTdWNoIGludmFsaWQgdGVybSwgY29uZGl0aW9uIG9yIHByb3Zpc2lvbiB3aWxsIGJlIHNldmVyZWQgZnJvbSB0aGUgcmVtYWluaW5nIHRlcm1zLCBjb25kaXRpb25zIGFuZCBwcm92aXNpb25zLCB3aGljaCB3aWxsIGNvbnRpbnVlIHRvIGJlIHZhbGlkIGFuZCBlbmZvcmNlYWJsZSB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBhbmQgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgd2l0aG91dCByZWdhcmQgdG8gY29uZmxpY3Qgb2YgbGF3IHByaW5jaXBsZXMuIFRoZSBVLk4uIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIEFncmVlbWVudC4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50IGludm9sdmluZyBWTXdhcmUgb3IgYW55IG9mIGl0cyBzdWJzaWRpYXJpZXMgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBmZWRlcmFsIG9yIHN0YXRlIGNvdXJ0cyBvZiBub3J0aGVybiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYS4gTm8gcmlnaHRzIG1heSBiZSBhc3NpZ25lZCwgbm8gb2JsaWdhdGlvbnMgbWF5IGJlIGRlbGVnYXRlZCwgYW5kIHRoaXMgQWdyZWVtZW50IG1heSBub3QgYmUgdHJhbnNmZXJyZWQgYnkgWW91LCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aGV0aGVyIHZvbHVudGFyeSBvciBieSBvcGVyYXRpb24gb2YgbGF3LCBpbmNsdWRpbmcgYnkgd2F5IG9mIHNhbGUgb2YgYXNzZXRzLCBtZXJnZXIgb3IgY29uc29saWRhdGlvbiwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFZNd2FyZSwgYW5kIGFueSBwdXJwb3J0ZWQgYXNzaWdubWVudCwgZGVsZWdhdGlvbiBvciB0cmFuc2ZlciB3aXRob3V0IHN1Y2ggY29uc2VudCBzaGFsbCBiZSB2b2lkIGFiIGluaXRpby4gQW55IHdhaXZlciBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBvZiBhIHBhcnR5YHMgcmlnaHRzIG9yIHJlbWVkaWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW4gd3JpdGluZyB0byBiZSBlZmZlY3RpdmUuIEZhaWx1cmUsIG5lZ2xlY3Qgb3IgZGVsYXkgYnkgYSBwYXJ0eSB0byBlbmZvcmNlIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIGl0cyByaWdodHMgb3IgcmVtZWRpZXMgYXQgYW55IHRpbWUsIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBvciBiZSBkZWVtZWQgdG8gYmUgYSB3YWl2ZXIgb2Ygc3VjaCBwYXJ0eWBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgd2lsbCBub3QgaW4gYW55IHdheSBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSB3aG9sZSBvciBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBvciBwcmVqdWRpY2Ugc3VjaCBwYXJ0eWBzIHJpZ2h0IHRvIHRha2Ugc3Vic2VxdWVudCBhY3Rpb24uCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmxpYiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGIzODg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9abGliCkBAIC0wLDAgKzEsMjEgQEAKKworemxpYiBMaWNlbnNlCisKKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBhcy1pc2AsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisgIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisKKyAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisgIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyAgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisgICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorICAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9iemlwMiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvYnppcDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNTk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvYnppcDIKQEAgLTAsMCArMSw0MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBwcm9ncmFtLCAiYnppcDIiLCB0aGUgYXNzb2NpYXRlZCBsaWJyYXJ5ICJsaWJiemlwMiIsIGFuZCBhbGwKK2RvY3VtZW50YXRpb24sIGFyZSBjb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCBKdWxpYW4gUiBTZXdhcmQuICBBbGwKK3JpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3QKKyAgIG5vdCBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuICBJZiB5b3UgdXNlIHRoaXMKKyAgIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QKKyAgIGRvY3VtZW50YXRpb24gd291bGQgYmUgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKworMy4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdAorICAgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKworNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKK0dPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitKdWxpYW4gU2V3YXJkLCBqc2V3YXJkQGJ6aXAub3JnCitiemlwMi9saWJiemlwMiB2ZXJzaW9uIDEuMC42IG9mIDYgU2VwdGVtYmVyIDIwMTAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZUNvcy0yLjAgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2VDb3MtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YjVkNjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2VDb3MtMi4wCkBAIC0wLDAgKzEsMTggQEAKKworVGhlIGVDb3MgbGljZW5zZSB2ZXJzaW9uIDIuMAorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBlQ29zLCB0aGUgRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0uIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCitlQ29zIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitlQ29zIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIGVDb3M7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciB3b3JrcyB0byBwcm9kdWNlIGEgd29yayBiYXNlZCBvbiB0aGlzIGZpbGUsIHRoaXMgZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBIb3dldmVyIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBmaWxlIG11c3Qgc3RpbGwgYmUgbWFkZSBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gKDMpIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworQWx0ZXJuYXRpdmUgbGljZW5zZXMgZm9yIGVDb3MgbWF5IGJlIGFycmFuZ2VkIGJ5IGNvbnRhY3RpbmcgUmVkIEhhdCwgSW5jLiBhdCBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2Vjb3MvZWNvcy1saWNlbnNlLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMjIyNFQ09TR1BMQ09QWVJJR0hURU5EIyMjIworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4NjM4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMQpAQCAtMCwwICsxLDM4MCBAQAorCitnU09BUCBQdWJsaWMgTGljZW5zZQorCitWZXJzaW9uIDEuM2IKKworVGhlIGdTT0FQIHB1YmxpYyBsaWNlbnNlIGlzIGRlcml2ZWQgZnJvbSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAoTVBMMS4xKS4KK1RoZSBzZWN0aW9ucyB0aGF0IHdlcmUgZGVsZXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBNUEwxLjEgdGV4dCBhcmUgMS4wLjEsIDIuMS4KKyhjKSwoZCksIDIuMi4oYyksKGQpLCA4LjIuKGIpLCAxMCwgYW5kIDExLiBTZWN0aW9uIDMuOCB3YXMgYWRkZWQuIFRoZSBtb2RpZmllZAorc2VjdGlvbnMgYXJlIDIuMS4oYiksIDIuMi4oYiksIDMuMiAoc2ltcGxpZmllZCksIDMuNSAoZGVsZXRlZCB0aGUgbGFzdAorc2VudGVuY2UpLCBhbmQgMy42IChzaW1wbGlmaWVkKS4KK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIHRoZSBnU09BUCBzb2Z0d2FyZSBwYWNrYWdlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlCitzb2FwY3BwMiBhbmQgd3NkbDJoIHNvdXJjZSBjb2RlIGxvY2F0ZWQgaW4gZ3NvYXAvc3JjIGFuZCBnc29hcC93c2RsLCBhbGwgY29kZQorZ2VuZXJhdGVkIGJ5IHNvYXBjcHAyIGFuZCB3c2RsMmgsIHRoZSBVRERJIHNvdXJjZSBjb2RlIGdzb2FwL3VkZGkyLCBhbmQgdGhlIFdlYgorc2VydmVyIHNhbXBsZSBzb3VyY2UgY29kZSBzYW1wbGVzL3dlYnNlcnZlci4gVG8gdXNlIGFueSBvZiB0aGVzZSBzb2Z0d2FyZSB0b29scworYW5kIGNvbXBvbmVudHMgY29tbWVyY2lhbGx5LCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyByZXF1aXJlZCBhbmQgY2FuIGJlCitvYnRhaW5lZCBmcm9tIHd3dy5nZW5pdmlhLmNvbS4KKzEgREVGSU5JVElPTlMuCisKKzEuMC4xLgorMS4xLiAiQ29udHJpYnV0b3IiCittZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIgorbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYQorQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMy4gIkNvdmVyZWQgQ29kZSIKK21lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUsIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iCittZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IKK3RoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUuICJFeGVjdXRhYmxlIgorbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYuICJJbml0aWFsIERldmVsb3BlciIKK21lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUKK1NvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcuICJMYXJnZXIgV29yayIKK21lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorMS44LiAiTGljZW5zZSIKK21lYW5zIHRoaXMgZG9jdW1lbnQuCisxLjguMS4gIkxpY2Vuc2FibGUiCittZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlCit0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cworY29udmV5ZWQgaGVyZWluLgorMS45LiAiTW9kaWZpY2F0aW9ucyIKK21lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUKK09yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEKK3NlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBLgorQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsCitDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLgorQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yIHByZXZpb3VzCitNb2RpZmljYXRpb25zLgorMS4xMC4gIk9yaWdpbmFsIENvZGUiCittZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlCitDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZgoraXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIKK21lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkKK2dyYW50b3IuCisxLjExLiAiU291cmNlIENvZGUiCittZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsCitpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24KK2ZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsCitvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IKK2Fub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZQorU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUKK2RlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKzEuMTIuICJZb3UiIChvciAiWW91ciIpCittZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nCit3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZQoraXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueQorZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4KK0ZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLAorZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCit3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudAorKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzIgU09VUkNFIENPREUgTElDRU5TRS4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKQordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlCitieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlCithbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0CitNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvCittYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZQorT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50Cit0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yCitpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlLCB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgb3IgYW55Citjb21iaW5hdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLgorKGMpCisoZCkKKworMi4yLiBDb250cmlidXRvciBHcmFudC4KKworU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZQorYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikKK2VpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IKK2FzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBtYWtlLAoraGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQiKSB0aGUgQ29udHJpYnV0b3IKK1ZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMKK3JlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aAorb3RoZXIgc29mdHdhcmUsIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKyhjKQorKGQpCiszIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieQordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdQorbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24KK3RoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUKK3JlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50CitvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IE1vZGlmaWNhdGlvbiBjcmVhdGVkIGJ5IFlvdSB3aWxsIGJlIHByb3ZpZGVkIHRvIHRoZSBJbml0aWFsIERldmVsb3BlciBpbgorU291cmNlIENvZGUgZm9ybSBhbmQgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUKK2RvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YKK2FueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcworZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UKK0NvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uCitpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZQorQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlCitwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8KK2NvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlCithdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlCitMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2UKK290aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3Citrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQKK0NvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0bworaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTAorZmlsZS4KKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkKK2Fib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3Incworb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUKK3JpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmCitpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0bworaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYQorcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmCitZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IKK3RvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluCithbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgb3IKK293bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvCitjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUKK29yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93bgorYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YKK1NlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyCitjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UKK2FyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluCit0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91CitkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0CithYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieQorWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gSWYgeW91IGRpc3RyaWJ1dGUKK2V4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbmluZyBDb3ZlcmVkIENvZGUgYXMgcGFydCBvZiBhIHByb2R1Y3QsIHlvdSBtdXN0CityZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworcHJvdmlkZWQgd2l0aCB0aGUgcHJvZHVjdC4KKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworMy44LiBSZXN0cmljdGlvbnMuCisKK1lvdSBtYXkgbm90IHJlbW92ZSBhbnkgcHJvZHVjdCBpZGVudGlmaWNhdGlvbiwgY29weXJpZ2h0LCBwcm9wcmlldGFyeSBub3RpY2VzCitvciBsYWJlbHMgZnJvbSBnU09BUC4KKzQgSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3dpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwKK29yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlCittYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkKK2FmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuCitFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0CitiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuCis1IEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZQorbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCis2IFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KKworR3JhbnRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvCit0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwKK1lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YKK3RoZSBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCisKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbworaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZSAiZ1NPQVAiCitvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlCit0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyCit0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgZ1NPQVAKK1B1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IKK0NvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZQorZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKzcgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgSU5URUxMRUNUVUFMIFBST1BFUlRZCitSSUdIVFMsIEFORCBBTlkgV0FSUkFOVFkgVEhBVCBNQVkgQVJJU0UgQlkgUkVBU09OIE9GIFRSQURFIFVTQUdFLCBDVVNUT00sIE9SCitDT1VSU0UgT0YgREVBTElORy4gV0lUSE9VVCBMSU1JVElORyBUSEUgRk9SRUdPSU5HLCBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSEUKK1NPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIQVQgVEhFIEFVVEhPUlMgRE8gTk9UIFdBUlJBTlQgVEhFCitTT0ZUV0FSRSBXSUxMIFJVTiBVTklOVEVSUlVQVEVEIE9SIEVSUk9SIEZSRUUuIExJTUlURUQgTElBQklMSVRZIFRIRSBFTlRJUkUKK1JJU0sgQVMgVE8gUkVTVUxUUyBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIElTIEFTU1VNRUQgQlkgWU9VLiBVTkRFUiBOTworQ0lSQ1VNU1RBTkNFUyBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLAorRVhFTVBMQVJZIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCBPUiBOQVRVUkUgV0hBVFNPRVZFUiwgV0hFVEhFUgorQkFTRUQgT04gQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IKK09USEVSV0lTRSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBUSEUKK0FVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT04gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFIE9SIElGIFNVQ0ggREFNQUdFCitDT1VMRCBIQVZFIEJFRU4gUkVBU09OQUJMWSBGT1JFU0VFTiwgQU5EIE5PVFdJVEhTVEFORElORyBBTlkgRkFJTFVSRSBPRgorRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIEVYQ0xVU0lWRSBSRU1FRFkgUFJPVklERUQuIFNVQ0ggTElNSVRBVElPTiBPTiBEQU1BR0VTCitJTkNMVURFUywgQlVUIElTIE5PVCBMSU1JVEVEIFRPLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBMT1NUIFBST0ZJVFMsCitMT1NTIE9GIERBVEEgT1IgU09GVFdBUkUsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04gT1IKK0lNUEFJUk1FTlQgT0YgT1RIRVIgR09PRFMuIElOIE5PIEVWRU5UIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBUSEUgQ09TVFMKK09GIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgU09GVFdBUkUgT1IgU0VSVklDRVMuIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFRISVMKK1NPRlRXQVJFIElTIE5PVCBERVNJR05FRCBGT1IgVVNFIElOIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMKK1NVQ0ggQVMgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUiBDT05UUk9MLCBPUgorTElGRS1DUklUSUNBTCBBUFBMSUNBVElPTlMuIFRIRSBBVVRIT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTlkgTElBQklMSVRZCitSRVNVTFRJTkcgRlJPTSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUworRU5WSVJPTk1FTlRTIEFORCBBQ0NFUFRTIE5PIExJQUJJTElUWSBJTiBSRVNQRUNUIE9GIEFOWSBBQ1RJT05TIE9SIENMQUlNUyBCQVNFRAorT04gVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTCitFTlZJUk9OTUVOVFMgQlkgWU9VLiBGT1IgUFVSUE9TRVMgT0YgVEhJUyBQQVJBR1JBUEgsIFRIRSBURVJNICJMSUZFLQorQ1JJVElDQUwgQVBQTElDQVRJT04iIE1FQU5TIEFOIEFQUExJQ0FUSU9OIElOIFdISUNIIFRIRSBGVU5DVElPTklORyBPUgorTUFMRlVOQ1RJT05JTkcgT0YgVEhFIFNPRlRXQVJFIE1BWSBSRVNVTFQgRElSRUNUTFkgT1IgSU5ESVJFQ1RMWSBJTiBQSFlTSUNBTAorSU5KVVJZIE9SIExPU1MgT0YgSFVNQU4gTElGRS4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOCitFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQKK0hFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorOCBURVJNSU5BVElPTi4KKworOC4xLgorVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYKK1lvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaAorYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuCis4LjMuCitJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQKK3N1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueQorcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0bwordGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mCit0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUKK3Rha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCitsaWNlbnNlLgorOC40LgorSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlcgorbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbgordmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsCitzdXJ2aXZlIHRlcm1pbmF0aW9uLgorOSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkKK09USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZCitPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwKK0RBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sCitPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwKK0hBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HCitGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0gKK0xJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVAorQVBQTFkgVE8gWU9VLgorMTAgVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworMTEgTUlTQ0VMTEFORU9VUy4KKworMTIgUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZQorZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uCitvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZAorQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcKK2hlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KK0VYSElCSVQgQS4KKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKzEuMyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL3d3dy5jcy5mc3UuZWR1LyBlbmdlbGVuL3NvYXBsaWNlbnNlLmh0bWwKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKK2ZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitUaGUgT3JpZ2luYWwgQ29kZSBvZiB0aGUgZ1NPQVAgU29mdHdhcmUgaXM6IHN0ZHNvYXAuaCwgc3Rkc29hcDIuaCwgc3Rkc29hcC5jLAorc3Rkc29hcDIuYywgc3Rkc29hcC5jcHAsIHN0ZHNvYXAyLmNwcCwgc29hcGNwcDIuaCwgc29hcGNwcDIuYywgc29hcGNwcDJfbGV4LmwsCitzb2FwY3BwMl95YWNjLnksIGVycm9yMi5oLCBlcnJvcjIuYywgc3ltYm9sMi5jLCBpbml0Mi5jLCBzb2FwZG9jMi5odG1sLCBhbmQKK3NvYXBkb2MyLnBkZiwgaHR0cGdldC5oLCBodHRwZ2V0LmMsIHN0bC5oLCBzdGxkZXF1ZS5oLCBzdGxsaXN0LmgsIHN0bHZlY3Rvci5oLAorc3Rsc2V0LmguCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLiBQb3J0aW9ucworY3JlYXRlZCBieSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4gYXJlIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IFJvYmVydCBBLiB2YW4KK0VuZ2VsZW4sIEdlbml2aWEgaW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3Iocyk6CisiX19fX19fX19fX19fX19fX19fX19fX19fLiIKK1tOb3RlOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZvcm0gdGhlIHRleHQgb2YgdGhlCitub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgY29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQKK29mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlCitmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KK0VYSElCSVQgQi4KKworIlBhcnQgb2YgdGhlIHNvZnR3YXJlIGVtYmVkZGVkIGluIHRoaXMgcHJvZHVjdCBpcyBnU09BUCBzb2Z0d2FyZS4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgZ1NPQVAgYXJlIENvcHlyaWdodCAoQykgMjAwMS0yMDA5IFJvYmVydCBBLiB2YW4gRW5nZWxlbiwKK0dlbml2aWEgaW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorVEhFIFNPRlRXQVJFIElOIFRISVMgUFJPRFVDVCBXQVMgSU4gUEFSVCBQUk9WSURFRCBCWSBHRU5JVklBIElOQyBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKK09SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIKKworCisKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMS4zYiBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMS4zYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM5NDJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xLjNiCkBAIC0wLDAgKzEsMTU3IEBACisKK2dTT0FQIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4zYgorCitUaGUgZ1NPQVAgcHVibGljIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIChNUEwxLjEpLiBUaGUgc2VjdGlvbnMgdGhhdCB3ZXJlIGRlbGV0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgTVBMMS4xIHRleHQgYXJlIDEuMC4xLCAyLjEuKGMpLChkKSwgMi4yLihjKSwoZCksIDguMi4oYiksIDEwLCBhbmQgMTEuIFNlY3Rpb24gMy44IHdhcyBhZGRlZC4gVGhlIG1vZGlmaWVkIHNlY3Rpb25zIGFyZSAyLjEuKGIpLCAyLjIuKGIpLCAzLjIgKHNpbXBsaWZpZWQpLCAzLjUgKGRlbGV0ZWQgdGhlIGxhc3Qgc2VudGVuY2UpLCBhbmQgMy42IChzaW1wbGlmaWVkKS4KK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIHRoZSBnU09BUCBzb2Z0d2FyZSBwYWNrYWdlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHNvYXBjcHAyIGFuZCB3c2RsMmggc291cmNlIGNvZGUgbG9jYXRlZCBpbiBnc29hcC9zcmMgYW5kIGdzb2FwL3dzZGwsIGFsbCBjb2RlIGdlbmVyYXRlZCBieSBzb2FwY3BwMiBhbmQgd3NkbDJoLCB0aGUgVURESSBzb3VyY2UgY29kZSBnc29hcC91ZGRpMiwgYW5kIHRoZSBXZWIgc2VydmVyIHNhbXBsZSBzb3VyY2UgY29kZSBzYW1wbGVzL3dlYnNlcnZlci4gVG8gdXNlIGFueSBvZiB0aGVzZSBzb2Z0d2FyZSB0b29scyBhbmQgY29tcG9uZW50cyBjb21tZXJjaWFsbHksIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIHJlcXVpcmVkIGFuZCBjYW4gYmUgb2J0YWluZWQgZnJvbSB3d3cuZ2VuaXZpYS5jb20uCisxICBERUZJTklUSU9OUy4KKworMS4wLjEuCisxLjEuICJDb250cmlidXRvciIKK21lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCittZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMuICJDb3ZlcmVkIENvZGUiCittZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iCittZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNS4gIkV4ZWN1dGFibGUiCittZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIgorbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorMS43LiAiTGFyZ2VyIFdvcmsiCittZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorMS44LiAiTGljZW5zZSIKK21lYW5zIHRoaXMgZG9jdW1lbnQuCisxLjguMS4gIkxpY2Vuc2FibGUiCittZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKzEuOS4gIk1vZGlmaWNhdGlvbnMiCittZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0EuCitBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4KK0FueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorMS4xMC4gIk9yaWdpbmFsIENvZGUiCittZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIKK21lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorMS4xMS4gIlNvdXJjZSBDb2RlIgorbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyLiAiWW91IiAob3IgIllvdXIiKQorbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzIgIFNPVVJDRSBDT0RFIExJQ0VOU0UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpCit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQiKSB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgb3IgcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueSBjb21iaW5hdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLgorKGMpCisoZCkKKworMi4yLiBDb250cmlidXRvciBHcmFudC4KKworU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKQordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpCit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQiKSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKyhjKQorKGQpCiszICBESVNUUklCVVRJT04gT0JMSUdBVElPTlMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuIAorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IE1vZGlmaWNhdGlvbiBjcmVhdGVkIGJ5IFlvdSB3aWxsIGJlIHByb3ZpZGVkIHRvIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiBTb3VyY2UgQ29kZSBmb3JtIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIAorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4gCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIAorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gSWYgeW91IGRpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSBhcyBwYXJ0IG9mIGEgcHJvZHVjdCwgeW91IG11c3QgcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgcHJvZHVjdC4gCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuIAorCiszLjguIFJlc3RyaWN0aW9ucy4KKworWW91IG1heSBub3QgcmVtb3ZlIGFueSBwcm9kdWN0IGlkZW50aWZpY2F0aW9uLCBjb3B5cmlnaHQsIHByb3ByaWV0YXJ5IG5vdGljZXMgb3IgbGFiZWxzIGZyb20gZ1NPQVAuCis0ICBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCis1ICBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCis2ICBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworNi4xLiBOZXcgVmVyc2lvbnMuCisKK0dyYW50b3IgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAKKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZS4gCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZSAiZ1NPQVAiIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgZ1NPQVAgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKzcgIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMsIEFORCBBTlkgV0FSUkFOVFkgVEhBVCBNQVkgQVJJU0UgQlkgUkVBU09OIE9GIFRSQURFIFVTQUdFLCBDVVNUT00sIE9SIENPVVJTRSBPRiBERUFMSU5HLiBXSVRIT1VUIExJTUlUSU5HIFRIRSBGT1JFR09JTkcsIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEFUIFRIRSBBVVRIT1JTIERPIE5PVCBXQVJSQU5UIFRIRSBTT0ZUV0FSRSBXSUxMIFJVTiBVTklOVEVSUlVQVEVEIE9SIEVSUk9SIEZSRUUuIExJTUlURUQgTElBQklMSVRZIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBSRVNVTFRTIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUgSVMgQVNTVU1FRCBCWSBZT1UuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgRVhFTVBMQVJZIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCBPUiBOQVRVUkUgV0hBVFNPRVZFUiwgV0hFVEhFUiBCQVNFRCBPTiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEFSSVNJTkcgT1VUIE9GIE9SIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEVWRU4gSUYgVEhFIEFVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT04gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFIE9SIElGIFNVQ0ggREFNQUdFIENPVUxEIEhBVkUgQkVFTiBSRUFTT05BQkxZIEZPUkVTRUVOLCBBTkQgTk9UV0lUSFNUQU5ESU5HIEFOWSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBFWENMVVNJVkUgUkVNRURZIFBST1ZJREVELiBTVUNIIExJTUlUQVRJT04gT04gREFNQUdFUyBJTkNMVURFUywgQlVUIElTIE5PVCBMSU1JVEVEIFRPLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBMT1NUIFBST0ZJVFMsIExPU1MgT0YgREFUQSBPUiBTT0ZUV0FSRSwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiBPUiBJTVBBSVJNRU5UIE9GIE9USEVSIEdPT0RTLiBJTiBOTyBFVkVOVCBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgVEhFIENPU1RTIE9GIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgU09GVFdBUkUgT1IgU0VSVklDRVMuIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFRISVMgU09GVFdBUkUgSVMgTk9UIERFU0lHTkVEIEZPUiBVU0UgSU4gT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBTVUNIIEFTIE9QRVJBVElPTiBPRiBOVUNMRUFSIEZBQ0lMSVRJRVMsIEFJUkNSQUZUIE5BVklHQVRJT04gT1IgQ09OVFJPTCwgT1IgTElGRS1DUklUSUNBTCBBUFBMSUNBVElPTlMuIFRIRSBBVVRIT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTlkgTElBQklMSVRZIFJFU1VMVElORyBGUk9NIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBBTkQgQUNDRVBUUyBOTyBMSUFCSUxJVFkgSU4gUkVTUEVDVCBPRiBBTlkgQUNUSU9OUyBPUiBDTEFJTVMgQkFTRUQgT04gVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBCWSBZT1UuIEZPUiBQVVJQT1NFUyBPRiBUSElTIFBBUkFHUkFQSCwgVEhFIFRFUk0gIkxJRkUtQ1JJVElDQUwgQVBQTElDQVRJT04iIE1FQU5TIEFOIEFQUExJQ0FUSU9OIElOIFdISUNIIFRIRSBGVU5DVElPTklORyBPUiBNQUxGVU5DVElPTklORyBPRiBUSEUgU09GVFdBUkUgTUFZIFJFU1VMVCBESVJFQ1RMWSBPUiBJTkRJUkVDVExZIElOIFBIWVNJQ0FMIElOSlVSWSBPUiBMT1NTIE9GIEhVTUFOIExJRkUuIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4ICBURVJNSU5BVElPTi4KKworOC4xLgorVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLgorOC4zLgorSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKzguNC4KK0luIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKzkgIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisxMCAgVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworMTEgIE1JU0NFTExBTkVPVVMuCisKKzEyICBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCitFWEhJQklUIEEuCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBnU09BUCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3LmNzLmZzdS5lZHUvIGVuZ2VsZW4vc29hcGxpY2Vuc2UuaHRtbAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitUaGUgT3JpZ2luYWwgQ29kZSBvZiB0aGUgZ1NPQVAgU29mdHdhcmUgaXM6IHN0ZHNvYXAuaCwgc3Rkc29hcDIuaCwgc3Rkc29hcC5jLCBzdGRzb2FwMi5jLCBzdGRzb2FwLmNwcCwgc3Rkc29hcDIuY3BwLCBzb2FwY3BwMi5oLCBzb2FwY3BwMi5jLCBzb2FwY3BwMl9sZXgubCwgc29hcGNwcDJfeWFjYy55LCBlcnJvcjIuaCwgZXJyb3IyLmMsIHN5bWJvbDIuYywgaW5pdDIuYywgc29hcGRvYzIuaHRtbCwgYW5kIHNvYXBkb2MyLnBkZiwgaHR0cGdldC5oLCBodHRwZ2V0LmMsIHN0bC5oLCBzdGxkZXF1ZS5oLCBzdGxsaXN0LmgsIHN0bHZlY3Rvci5oLCBzdGxzZXQuaC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4uIFBvcnRpb25zIGNyZWF0ZWQgYnkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4sIEdlbml2aWEgaW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3Iocyk6CisiX19fX19fX19fX19fX19fX19fX19fX19fLiIKK1tOb3RlOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZvcm0gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBjb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KK0VYSElCSVQgQi4KKworIlBhcnQgb2YgdGhlIHNvZnR3YXJlIGVtYmVkZGVkIGluIHRoaXMgcHJvZHVjdCBpcyBnU09BUCBzb2Z0d2FyZS4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgZ1NPQVAgYXJlIENvcHlyaWdodCAoQykgMjAwMS0yMDA5IFJvYmVydCBBLiB2YW4gRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIEdFTklWSUEgSU5DIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3RjbCBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDQ5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3RjbApAQCAtMCwwICsxLDQwIEBACitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mCitDYWxpZm9ybmlhLCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBTY3JpcHRpY3MgQ29ycG9yYXRpb24sIEFjdGl2ZVN0YXRlCitDb3Jwb3JhdGlvbiBhbmQgb3RoZXIgcGFydGllcy4gIFRoZSBmb2xsb3dpbmcgdGVybXMgYXBwbHkgdG8gYWxsIGZpbGVzCithc3NvY2lhdGVkIHdpdGggdGhlIHNvZnR3YXJlIHVubGVzcyBleHBsaWNpdGx5IGRpc2NsYWltZWQgaW4KK2luZGl2aWR1YWwgZmlsZXMuCisKK1RoZSBhdXRob3JzIGhlcmVieSBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLAorYW5kIGxpY2Vuc2UgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZAordGhhdCBleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCB0aGlzCitub3RpY2UgaXMgaW5jbHVkZWQgdmVyYmF0aW0gaW4gYW55IGRpc3RyaWJ1dGlvbnMuIE5vIHdyaXR0ZW4gYWdyZWVtZW50LAorbGljZW5zZSwgb3Igcm95YWx0eSBmZWUgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUgYXV0aG9yaXplZCB1c2VzLgorTW9kaWZpY2F0aW9ucyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSBjb3B5cmlnaHRlZCBieSB0aGVpciBhdXRob3JzCithbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcgdGVybXMgZGVzY3JpYmVkIGhlcmUsIHByb3ZpZGVkIHRoYXQKK3RoZSBuZXcgdGVybXMgYXJlIGNsZWFybHkgaW5kaWNhdGVkIG9uIHRoZSBmaXJzdCBwYWdlIG9mIGVhY2ggZmlsZSB3aGVyZQordGhleSBhcHBseS4KKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgRElTVFJJQlVUT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkKK0ZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgSVRTIERPQ1VNRU5UQVRJT04sIE9SIEFOWQorREVSSVZBVElWRVMgVEhFUkVPRiwgRVZFTiBJRiBUSEUgQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUSEUgQVVUSE9SUyBBTkQgRElTVFJJQlVUT1JTIFNQRUNJRklDQUxMWSBESVNDTEFJTSBBTlkgV0FSUkFOVElFUywKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4gIFRISVMgU09GVFdBUkUKK0lTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQVVUSE9SUyBBTkQgRElTVFJJQlVUT1JTIEhBVkUKK05PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUgorTU9ESUZJQ0FUSU9OUy4KKworR09WRVJOTUVOVCBVU0U6IElmIHlvdSBhcmUgYWNxdWlyaW5nIHRoaXMgc29mdHdhcmUgb24gYmVoYWxmIG9mIHRoZQorVS5TLiBnb3Zlcm5tZW50LCB0aGUgR292ZXJubWVudCBzaGFsbCBoYXZlIG9ubHkgIlJlc3RyaWN0ZWQgUmlnaHRzIgoraW4gdGhlIHNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgRmVkZXJhbAorQWNxdWlzaXRpb24gUmVndWxhdGlvbnMgKEZBUnMpIGluIENsYXVzZSA1Mi4yMjcuMTkgKGMpICgyKS4gIElmIHlvdQorYXJlIGFjcXVpcmluZyB0aGUgc29mdHdhcmUgb24gYmVoYWxmIG9mIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2UsIHRoZQorc29mdHdhcmUgc2hhbGwgYmUgY2xhc3NpZmllZCBhcyAiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSIgYW5kIHRoZQorR292ZXJubWVudCBzaGFsbCBoYXZlIG9ubHkgIlJlc3RyaWN0ZWQgUmlnaHRzIiBhcyBkZWZpbmVkIGluIENsYXVzZQorMjUyLjIyNy03MDE0IChiKSAoMykgb2YgREZBUnMuICBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgdGhlCithdXRob3JzIGdyYW50IHRoZSBVLlMuIEdvdmVybm1lbnQgYW5kIG90aGVycyBhY3RpbmcgaW4gaXRzIGJlaGFsZgorcGVybWlzc2lvbiB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKK3Rlcm1zIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3VuZnMzIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy91bmZzMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJiNTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy91bmZzMwpAQCAtMCwwICsxLDI0IEBACitVTkZTMyB1c2VyLXNwYWNlIE5GU3YzIHNlcnZlcgorKEMpIDIwMDMsIFBhc2NhbCBTY2htaWR0IDx1bmZzMy1zZXJ2ZXJAZXdldGVsLm5ldD4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCitFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKK09SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKK09USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWMxODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQKQEAgLTAsMCArMSw4IEBACitGaWxlcyBpbiB0aGUgZGVwbG95IGRpcmVjdG9yeSB3aWxsIG5vdCBiZSByZS1jcmVhdGVkIGF1dG9tYXRpY2FsbHkgaWYgeW91CitkZWxldGUgdGhlbS4gSWYgeW91IGRvIGRlbGV0ZSBhIGZpbGUsIHlvdSB3aWxsIG5lZWQgdG8gcnVuOgorCisgIGJpdGJha2UgLWMgY2xlYW4gVEFSR0VUCisgIGJpdGJha2UgVEFSR0VUCisKK3doZXJlIFRBUkdFVCBpcyB0aGUgbmFtZSBvZiB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZSBvciB0YXJnZXQgZS5nLgorInZpcnR1YWwva2VybmVsIiBmb3IgdGhlIGtlcm5lbCwgYW4gaW1hZ2UsIGV0Yy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODkxY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0CkBAIC0wLDAgKzEsMzUgQEAKKyM8cGF0aD4JPHR5cGU+IDxtb2RlPgk8dWlkPgk8Z2lkPgk8bWFqb3I+CTxtaW5vcj4JPHN0YXJ0Pgk8aW5jPgk8Y291bnQ+CisjL2Rldi9tZW0gICAgYyAgICAgIDY0MCAgICAgIDAgICAgICAgMCAgICAgICAxICAgICAgIDEgICAgICAgMCAgICAgICAgMCAgICAgICAgLQorIworI3R5cGUgY2FuIGJlIG9uZSBvZjogCisjICAgIGYJQSByZWd1bGFyIGZpbGUKKyMgICAgZAlEaXJlY3RvcnkKKyMgICAgYwlDaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2UgZmlsZQorIyAgICBiCUJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGUKKyMgICAgcAlGaWZvIChuYW1lZCBwaXBlKQorCisvZGV2CQlkCTc1NQlyb290CXJvb3QJLQktCS0JLQktCisvZGV2L2NvbnNvbGUJYwk2NjIJcm9vdAl0dHkJNQkxCS0JLQktCisvZGV2L2ZiMAljCTYwMAlyb290CXJvb3QJMjkJMAktCS0JLQorL2Rldi9oZGEJYgk2NjAJcm9vdAlkaXNrCTMJMAktCS0JLQorL2Rldi9oZGEJYgk2NjAJcm9vdAlkaXNrCTMJMQkxCTEJNAorL2Rldi9rbWVtCWMJNjQwCXJvb3QJa21lbQkxCTIJLQktCS0KKy9kZXYva21zZwljCTYwMAlyb290CXJvb3QJMQkxMQktCS0JLQorL2Rldi9tZW0JYwk2NDAJcm9vdAlrbWVtCTEJMQktCS0JLQorL2Rldi9tbWNibGswCWIJNjYwCXJvb3QJZGlzawkxNzkJMAktCS0JLQorL2Rldi9tbWNibGswcAliCTY2MAlyb290CWRpc2sJMTc5CTEJMQkxCTQKKy9kZXYvbXRkCWMJNjYwCXJvb3QJZGlzawk5MAkwCTAJMgk4CisvZGV2L210ZGJsb2NrCWIJNjQwCXJvb3QJcm9vdAkzMQkwCTAJMQk4CisvZGV2L251bGwJYwk2NjYJcm9vdAlyb290CTEJMwktCS0JLQorL2Rldi9yYW0JYgk2NDAJcm9vdAlyb290CTEJMAkwCTEJNAorL2Rldi9yYW5kb20JYwk2NDQJcm9vdAlyb290CTEJOAktCS0JLQorL2Rldi9ydGMJYwk2NDQJcm9vdAlyb290CTI1NAkwCTAJMQkyCisvZGV2L3NkYQliCTY2MAlyb290CWRpc2sJOAkwCS0JLQktCisvZGV2L3NkYQliCTY2MAlyb290CWRpc2sJOAkxCTEJMQk0CisvZGV2L3NkYgliCTY2MAlyb290CWRpc2sJOAkxNgktCS0JLQorL2Rldi9zZGIJYgk2NjAJcm9vdAlkaXNrCTgJMTcJMQkxCTQKKy9kZXYvdHR5CWMJNjYyCXJvb3QJdHR5CTUJMAktCS0JLQorL2Rldi90dHkJYwk2NjYJcm9vdAl0dHkJNAkwCTAJMQk4CisvZGV2L3R0eVMJYwk2NDAJcm9vdAl0dHkJNAk2NAkwCTEJMgorL2Rldi91cmFuZG9tCWMJNjQ0CXJvb3QJcm9vdAkxCTkJLQktCS0KKy9kZXYvemVybwljCTY0NAlyb290CXJvb3QJMQk1CS0JLQktCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvZnMtcGVybXMudHh0IGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2ZzLXBlcm1zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDljYmU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL2ZzLXBlcm1zLnR4dApAQCAtMCwwICsxLDY3IEBACisjIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGgga25vd24gcGVybWlzc2lvbnMuCisjIEl0IGlzIHVzZWQgYnkgdGhlIHBhY2thZ2luZyBjbGFzcyB0byBlbnN1cmUgdGhhdCB0aGUgcGVybWlzc2lvbnMsIG93bmVycyBhbmQKKyMgZ3JvdXAgb2YgbGlzdGVkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBhcmUgaW4gc3luYyBhY3Jvc3MgdGhlIHN5c3RlbS4KKyMKKyMgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgCisjCisjPHBhdGg+CTxtb2RlPgk8dWlkPgk8Z2lkPgk8d2Fsaz4JPGZtb2RlPgk8ZnVpZD4JPGZnaWQ+CisjCisjIG9yCisjCisjPHBhdGg+IGxpbmsgPHRhcmdldD4KKyMKKyMgPHBhdGg+OiBkaXJlY3RvcnkgcGF0aAorIyA8bW9kZT46IG1vZGUgZm9yIGRpcmVjdG9yeQorIyA8dWlkPjogIHVpZCBmb3IgZGlyZWN0b3J5CisjIDxnaWQ+OiAgZ2lkIGZvciBkaXJlY3RvcnkKKyMgPHdhbGs+OiByZWN1cnNpdmVseSB3YWxrIHRoZSBkaXJlY3Rvcnk/ICB0cnVlIG9yIGZhbHNlCisjIDxmbW9kZT46IGlmIHdhbGtpbmcsIG5ldyBtb2RlIGZvciBmaWxlcworIyA8ZnVpZD46ICBpZiB3YWxraW5nLCBuZXcgdWlkIGZvciBmaWxlcworIyA8ZmdpZD46ICBpZiB3YWxraW5nLCBuZXcgZ2lkIGZvciBmaWxlcworIyA8dGFyZ2V0PjogdHVybiB0aGUgZGlyZWN0b3J5IGludG8gYSBzeW1saW5rIHBvaW50IHRvIHRhcmdldAorIworIyBpbiBtb2RlLCB1aWQgb3IgZ2lkLCBhICItIiBtZWFucyBkb24ndCBjaGFuZ2UgYW55IGV4aXN0aW5nIHZhbHVlcworIworIyAvdXNyL3NyYwkJMDc1NQlyb290CXJvb3QJZmFsc2UJLQktCS0KKyMgL3Vzci9zaGFyZS9tYW4JMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorCisjIE5vdGU6IGFsbCBzdGFuZGFyZCBjb25maWcgZGlyZWN0b3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgIjA3NTUgcm9vdCByb290IGZhbHNlIC0gLSAtIgorCisjIERvY3VtZW50YXRpb24gc2hvdWxkIGFsd2F5cyBiZSBjb3JyZWN0ZWQKKyR7bWFuZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtpbmZvZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtkb2NkaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2RhdGFkaXJ9L2d0ay1kb2MJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorCisjIEZpeHVwIGxvY2FsZXMKKyR7ZGF0YWRpcn0vbG9jYWxlCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKworIyBDbGVhbnVwIGhlYWRlcnMKKyR7aW5jbHVkZWRpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7b2xkaW5jbHVkZWRpcn0JMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorCisjIENsZWFudXAgZGVidWcgc3JjCisvdXNyL3NyYy9kZWJ1ZwkJMDc1NQlyb290CXJvb3QJdHJ1ZQktCXJvb3QJcm9vdAorCisjIEl0ZW1zIGZyb20gYmFzZS1maWxlcworIyBMaW5rcworJHtsb2NhbHN0YXRlZGlyfS9ydW4JbGluawkvcnVuCiske2xvY2Fsc3RhdGVkaXJ9L2xvZwlsaW5rCXZvbGF0aWxlL2xvZworJHtsb2NhbHN0YXRlZGlyfS9sb2NrCWxpbmsJL3J1bi9sb2NrCiske2xvY2Fsc3RhdGVkaXJ9L3RtcAlsaW5rCXZvbGF0aWxlL3RtcAorCisvaG9tZQkJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorL3NydgkJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorJHtwcmVmaXh9L3NyYwkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCiske2xvY2Fsc3RhdGVkaXJ9L2xvY2FsCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNwZWNpYWwgcGVybWlzc2lvbnMgZnJvbSBiYXNlLWZpbGVzCisjIFNldCAxNzc3CisvdG1wCQkJCTAxNzc3CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZS90bXAJMDE3NzcJcm9vdAlyb290CWZhbHNlIC0gLSAtCisKKyMgU2V0IDc1NS1sc2IKKy9zcnYJCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKworIyBTZXQgMjc3NS1sc2IKKy92YXIvbWFpbAkJCTAyNzc1CXJvb3QJbWFpbAlmYWxzZSAtIC0gLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2ggYi95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDBhNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2gKQEAgLTAsMCArMSwxODkgQEAKKyMhL2Jpbi9iYXNoCisKK0lOU1RfQVJDSD0kKHVuYW1lIC1tIHwgc2VkIC1lICJzL2lbMy02XTg2L2l4ODYvIiAtZSAicy94ODZbLV9dNjQveDg2XzY0LyIpCitTREtfQVJDSD0kKGVjaG8gQFNES19BUkNIQCB8IHNlZCAtZSAicy9pWzMtNl04Ni9peDg2LyIgLWUgInMveDg2Wy1fXTY0L3g4Nl82NC8iKQorCit2ZXJsdGUgKCkgeworCVsgICIkMSIgPSAiYHByaW50ZiAiJDFcbiQyIiB8IHNvcnQgLVYgfCBoZWFkIC1uMWAiIF0KK30KKwordmVybHQoKSB7CisJWyAiJDEiID0gIiQyIiBdICYmIHJldHVybiAxIHx8IHZlcmx0ZSAkMSAkMgorfQorCit2ZXJsdCBgdW5hbWUgLXJgIEBPTERFU1RfS0VSTkVMQAoraWYgWyAkPyA9IDAgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBUaGUgU0RLIG5lZWRzIGEga2VybmVsID4gQE9MREVTVF9LRVJORUxAIgorCWV4aXQgMQorZmkKKworaWYgWyAiJElOU1RfQVJDSCIgIT0gIiRTREtfQVJDSCIgXTsgdGhlbgorCSMgQWxsb3cgZm9yIGluc3RhbGxhdGlvbiBvZiBpeDg2IFNESyBvbiB4ODZfNjQgaG9zdAorCWlmIFsgIiRJTlNUX0FSQ0giICE9IHg4Nl82NCAtbyAiJFNES19BUkNIIiAhPSBpeDg2IF07IHRoZW4KKwkJZWNobyAiRXJyb3I6IEluc3RhbGxhdGlvbiBtYWNoaW5lIG5vdCBzdXBwb3J0ZWQhIgorCQlleGl0IDEKKwlmaQorZmkKKworREVGQVVMVF9JTlNUQUxMX0RJUj0iQFNES1BBVEhAIgorU1VET19FWEVDPSIiCit0YXJnZXRfc2RrX2Rpcj0iIgorYW5zd2VyPSIiCityZWxvY2F0ZT0xCitzYXZlc2NyaXB0cz0wCit2ZXJib3NlPTAKK3doaWxlIGdldG9wdHMgIjp5ZDpuRFJTIiBPUFQ7IGRvCisJY2FzZSAkT1BUIGluCisJeSkKKwkJYW5zd2VyPSJZIgorCQk7OworCWQpCisJCXRhcmdldF9zZGtfZGlyPSRPUFRBUkcKKwkJOzsKKwluKQorCQlwcmVwYXJlX2J1aWxkc3lzdGVtPSJubyIKKwkJOzsKKwlEKQorCQl2ZXJib3NlPTEKKwkJOzsKKwlSKQorCQlyZWxvY2F0ZT0wCisJCXNhdmVzY3JpcHRzPTEKKwkJOzsKKwlTKQorCQlzYXZlc2NyaXB0cz0xCisJCTs7CisJKikKKwkJZWNobyAiVXNhZ2U6ICQoYmFzZW5hbWUgJDApIFsteV0gWy1kIDxkaXI+XSIKKwkJZWNobyAiICAteSAgICAgICAgIEF1dG9tYXRpYyB5ZXMgdG8gYWxsIHByb21wdHMiCisJCWVjaG8gIiAgLWQgPGRpcj4gICBJbnN0YWxsIHRoZSBTREsgdG8gPGRpcj4iCisJCWVjaG8gIj09PT09PT09IEV4dGVuc2libGUgU0RLIG9ubHkgb3B0aW9ucyA9PT09PT09PT09PT0iCisJCWVjaG8gIiAgLW4gICAgICAgICBEbyBub3QgcHJlcGFyZSB0aGUgYnVpbGQgc3lzdGVtIgorCQllY2hvICI9PT09PT09PSBBZHZhbmNlZCBERUJVR0dJTkcgT05MWSBPUFRJT05TID09PT09PT09IgorCQllY2hvICIgIC1TICAgICAgICAgU2F2ZSByZWxvY2F0aW9uIHNjcmlwdHMiCisJCWVjaG8gIiAgLVIgICAgICAgICBEbyBub3QgcmVsb2NhdGUgZXhlY3V0YWJsZXMiCisJCWVjaG8gIiAgLUQgICAgICAgICB1c2Ugc2V0IC14IHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIgorCQlleGl0IDEKKwkJOzsKKwllc2FjCitkb25lCisKK2VjaG8gIkBTREtfVElUTEVAIGluc3RhbGxlciB2ZXJzaW9uIEBTREtfVkVSU0lPTkAiCitlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKworaWYgWyAkdmVyYm9zZSA9IDEgXSA7IHRoZW4KKwlzZXQgLXgKK2ZpCisKK0BTREtfUFJFX0lOU1RBTExfQ09NTUFOREAKKworIyBTREtfRVhURU5TSUJMRSBpcyBleHBvc2VkIGZyb20gdGhlIFNES19QUkVfSU5TVEFMTF9DT01NQU5EIGFib3ZlCitpZiBbICIkU0RLX0VYVEVOU0lCTEUiID0gIjEiIF07IHRoZW4KKwlERUZBVUxUX0lOU1RBTExfRElSPSJAU0RLRVhUUEFUSEAiCitmaQorCitpZiBbICIkdGFyZ2V0X3Nka19kaXIiID0gIiIgXTsgdGhlbgorCWlmIFsgIiRhbnN3ZXIiID0gIlkiIF07IHRoZW4KKwkJdGFyZ2V0X3Nka19kaXI9IiRERUZBVUxUX0lOU1RBTExfRElSIgorCWVsc2UKKwkJcmVhZCAtZSAtcCAiRW50ZXIgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgU0RLIChkZWZhdWx0OiAkREVGQVVMVF9JTlNUQUxMX0RJUik6ICIgdGFyZ2V0X3Nka19kaXIKKwkJWyAiJHRhcmdldF9zZGtfZGlyIiA9ICIiIF0gJiYgdGFyZ2V0X3Nka19kaXI9JERFRkFVTFRfSU5TVEFMTF9ESVIKKwlmaQorZmkKKworZXZhbCB0YXJnZXRfc2RrX2Rpcj0kKGVjaG8gIiR0YXJnZXRfc2RrX2RpciJ8c2VkICdzLyAvXFwgL2cnKQoraWYgWyAtZCAiJHRhcmdldF9zZGtfZGlyIiBdOyB0aGVuCisJdGFyZ2V0X3Nka19kaXI9JChjZCAiJHRhcmdldF9zZGtfZGlyIjsgcHdkKQorZWxzZQorCXRhcmdldF9zZGtfZGlyPSQocmVhZGxpbmsgLW0gIiR0YXJnZXRfc2RrX2RpciIpCitmaQorCitpZiBbICIkU0RLX0VYVEVOU0lCTEUiID0gIjEiIF07IHRoZW4KKwkjIFdlJ3JlIGdvaW5nIHRvIGJlIHJ1bm5pbmcgdGhlIGJ1aWxkIHN5c3RlbSwgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgYXBwbHkKKwlpZiBlY2hvICIkdGFyZ2V0X3Nka19kaXIiIHwgZ3JlcCAtcSAnWytcIEBdJzsgdGhlbgorCQllY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkdGFyZ2V0X3Nka19kaXIpIGNvbnRhaW5zIGlsbGVnYWwiIFwKKwkJICAgICAiY2hhcmFjdGVycyBzdWNoIGFzIHNwYWNlcywgQCBvciArLiBBYm9ydCEiCisJCWV4aXQgMQorCWZpCitlbHNlCisJaWYgWyAtbiAiJChlY2hvICR0YXJnZXRfc2RrX2RpcnxncmVwICcgJykiIF07IHRoZW4KKwkJZWNobyAiVGhlIHRhcmdldCBkaXJlY3RvcnkgcGF0aCAoJHRhcmdldF9zZGtfZGlyKSBjb250YWlucyBzcGFjZXMuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKK2ZpCisKK2lmIFsgLWUgIiR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cC1AUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU0AiIF07IHRoZW4KKwllY2hvICJUaGUgZGlyZWN0b3J5IFwiJHRhcmdldF9zZGtfZGlyXCIgYWxyZWFkeSBjb250YWlucyBhIFNESyBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuIgorCXByaW50ZiAiSWYgeW91IGNvbnRpbnVlLCBleGlzdGluZyBmaWxlcyB3aWxsIGJlIG92ZXJ3cml0dGVuISBQcm9jZWVkW3kvTl0/ICIKKworCWRlZmF1bHRfYW5zd2VyPSJuIgorZWxzZQorCXByaW50ZiAiWW91IGFyZSBhYm91dCB0byBpbnN0YWxsIHRoZSBTREsgdG8gXCIkdGFyZ2V0X3Nka19kaXJcIi4gUHJvY2VlZFtZL25dPyAiCisKKwlkZWZhdWx0X2Fuc3dlcj0ieSIKK2ZpCisKK2lmIFsgIiRhbnN3ZXIiID0gIiIgXTsgdGhlbgorCXJlYWQgYW5zd2VyCisJWyAiJGFuc3dlciIgPSAiIiBdICYmIGFuc3dlcj0iJGRlZmF1bHRfYW5zd2VyIgorZWxzZQorCWVjaG8gJGFuc3dlcgorZmkKKworaWYgWyAiJGFuc3dlciIgIT0gIlkiIC1hICIkYW5zd2VyIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIkluc3RhbGxhdGlvbiBhYm9ydGVkISIKKwlleGl0IDEKK2ZpCisKKyMgVHJ5IHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5ICh0aGlzIHdpbGwgbm90IHN1Y2NlZWQgaWYgdXNlciBkb2Vzbid0IGhhdmUgcmlnaHRzKQorbWtkaXIgLXAgJHRhcmdldF9zZGtfZGlyID4vZGV2L251bGwgMj4mMQorCisjIGlmIGRvbid0IGhhdmUgdGhlIHJpZ2h0IHRvIGFjY2VzcyBkaXIsIGdhaW4gYnkgc3VkbyAKK2lmIFsgISAteCAkdGFyZ2V0X3Nka19kaXIgLW8gISAtdyAkdGFyZ2V0X3Nka19kaXIgLW8gISAtciAkdGFyZ2V0X3Nka19kaXIgXTsgdGhlbiAKKwlpZiBbICIkU0RLX0VYVEVOU0lCTEUiID0gIjEiIF07IHRoZW4KKwkJZWNobyAiVW5hYmxlIHRvIGFjY2VzcyBcIiR0YXJnZXRfc2RrX2RpclwiLCB3aWxsIG5vdCBhdHRlbXB0IHRvIHVzZSIgXAorCQkgICAgICJzdWRvIGFzIGFzIGV4dGVuc2libGUgU0RLIGNhbm5vdCBiZSB1c2VkIGFzIHJvb3QuIgorCQlleGl0IDEKKwlmaQorCisJU1VET19FWEVDPSQod2hpY2ggInN1ZG8iKQorCWlmIFsgLXogJFNVRE9fRVhFQyBdOyB0aGVuCisJCWVjaG8gIk5vIGNvbW1hbmQgJ3N1ZG8nIGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBzdWRvIGZpcnN0LiBBYm9ydCEiCisJCWV4aXQgMQorCWZpCisKKwkjIHRlc3Qgc3VkbyBjb3VsZCBnYWluIHJvb3QgcmlnaHQKKwkkU1VET19FWEVDIHB3ZCA+L2Rldi9udWxsIDI+JjEKKwlbICQ/IC1uZSAwIF0gJiYgZWNobyAiU29ycnksIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gZXhlY3V0ZSBhcyByb290LiIgJiYgZXhpdCAxCisKKwkjIG5vdyB0aGF0IHdlIGhhdmUgc3VkbyByaWdodHMsIGNyZWF0ZSB0aGUgZGlyZWN0b3J5CisJJFNVRE9fRVhFQyBta2RpciAtcCAkdGFyZ2V0X3Nka19kaXIgPi9kZXYvbnVsbCAyPiYxCitmaQorCitwYXlsb2FkX29mZnNldD0kKCgkKGdyZXAgLW5hIC1tMSAiXk1BUktFUjokIiAkMHxjdXQgLWQnOicgLWYxKSArIDEpKQorCitwcmludGYgIkV4dHJhY3RpbmcgU0RLLi4uIgordGFpbCAtbiArJHBheWxvYWRfb2Zmc2V0ICQwfCAkU1VET19FWEVDIHRhciB4aiAtQyAkdGFyZ2V0X3Nka19kaXIKK2VjaG8gImRvbmUiCisKK3ByaW50ZiAiU2V0dGluZyBpdCB1cC4uLiIKKyMgZml4IGVudmlyb25tZW50IHBhdGhzCitmb3IgZW52X3NldHVwX3NjcmlwdCBpbiBgbHMgJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLSpgOyBkbworCSRTVURPX0VYRUMgc2VkIC1lICJzOkBTREtQQVRIQDokdGFyZ2V0X3Nka19kaXI6ZyIgLWkgJGVudl9zZXR1cF9zY3JpcHQKK2RvbmUKKworQFNES19QT1NUX0lOU1RBTExfQ09NTUFOREAKKworIyBkZWxldGUgdGhlIHJlbG9jYXRpbmcgc2NyaXB0LCBzbyB0aGF0IHVzZXIgaXMgZm9yY2VkIHRvIHJlLXJ1biB0aGUgaW5zdGFsbGVyCisjIGlmIGhlL3NoZSB3YW50cyBhbm90aGVyIGxvY2F0aW9uIGZvciB0aGUgc2RrCitpZiBbICRzYXZlc2NyaXB0cyA9IDAgXSA7IHRoZW4KKwkkU1VET19FWEVDIHJtIC1mICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnB5ICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCitmaQorCitlY2hvICJTREsgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldCB1cCBhbmQgaXMgcmVhZHkgdG8gYmUgdXNlZC4iCitlY2hvICJFYWNoIHRpbWUgeW91IHdpc2ggdG8gdXNlIHRoZSBTREsgaW4gYSBuZXcgc2hlbGwgc2Vzc2lvbiwgeW91IG5lZWQgdG8gc291cmNlIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgZS5nLiIKK2VjaG8gIiBcJCAuICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cC1AUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU0AiCisKK2V4aXQgMAorCitNQVJLRVI6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2ggYi95b2N0by1wb2t5L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiOGUxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaApAQCAtMCwwICsxLDUwIEBACisjIGZpeCBkeW5hbWljIGxvYWRlciBwYXRocyBpbiBhbGwgRUxGIFNESyBiaW5hcmllcworbmF0aXZlX3N5c3Jvb3Q9JCgkU1VET19FWEVDIGNhdCAkZW52X3NldHVwX3NjcmlwdCB8Z3JlcCAnT0VDT1JFX05BVElWRV9TWVNST09UPSd8Y3V0IC1kJz0nIC1mMnx0ciAtZCAnIicpCitkbF9wYXRoPSQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdC9saWIgLW5hbWUgImxkLWxpbnV4KiIpCitpZiBbICIkZGxfcGF0aCIgPSAiIiBdIDsgdGhlbgorCWVjaG8gIlNESyBjb3VsZCBub3QgYmUgc2V0IHVwLiBSZWxvY2F0ZSBzY3JpcHQgdW5hYmxlIHRvIGZpbmQgbGQtbGludXguc28uIEFib3J0ISIKKwlleGl0IDEKK2ZpCitleGVjdXRhYmxlX2ZpbGVzPSQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdCAtdHlwZSBmIFwKKwlcKCAtcGVybSAtMDEwMCAtbyAtcGVybSAtMDAxMCAtbyAtcGVybSAtMDAwMSBcKSAtcHJpbnRmICInJWgvJWYnICIpCisKK3RkaXI9YG1rdGVtcCAtZGAKK2lmIFsgeCR0ZGlyID0geCBdIDsgdGhlbgorICAgZWNobyAiU0RLIHJlbG9jYXRlIGZhaWxlZCwgY291bGQgbm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkiCisgICBleGl0IDEKK2ZpCitlY2hvICIjIS9iaW4vYmFzaCIgPiAkdGRpci9yZWxvY2F0ZV9zZGsuc2gKK2VjaG8gZXhlYyAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5weSAkdGFyZ2V0X3Nka19kaXIgJGRsX3BhdGggJGV4ZWN1dGFibGVfZmlsZXMgPj4gJHRkaXIvcmVsb2NhdGVfc2RrLnNoCiskU1VET19FWEVDIG12ICR0ZGlyL3JlbG9jYXRlX3Nkay5zaCAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5zaAorJFNVRE9fRVhFQyBjaG1vZCA3NTUgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKK3JtIC1yZiAkdGRpcgoraWYgWyAkcmVsb2NhdGUgPSAxIF0gOyB0aGVuCisJJFNVRE9fRVhFQyAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5zaAorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQllY2hvICJTREsgY291bGQgbm90IGJlIHNldCB1cC4gUmVsb2NhdGUgc2NyaXB0IGZhaWxlZC4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorZmkKKworIyByZXBsYWNlIEBTREtQQVRIQCB3aXRoIHRoZSBuZXcgcHJlZml4IGluIGFsbCB0ZXh0IGZpbGVzOiBjb25maWdzL3NjcmlwdHMvZXRjCitmb3IgcmVwbGFjZSBpbiAiJHRhcmdldF9zZGtfZGlyIC1tYXhkZXB0aCAxIiAiJG5hdGl2ZV9zeXNyb290IjsgZG8KKwkkU1VET19FWEVDIGZpbmQgJHJlcGxhY2UgLXR5cGUgZiAtZXhlYyBmaWxlICd7fScgXDsgfCBcCisJCWdyZXAgIjouKlwoQVNDSUlcfHNjcmlwdFx8c291cmNlXCkuKnRleHQiIHwgXAorCQlhd2sgLUYnOicgJ3twcmludGYgIlwiJXNcIlxuIiwgJDF9JyB8IFwKKwkJZ3JlcCAtdiAiJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLSoiIHwgXAorCQkkU1VET19FWEVDIHhhcmdzIC1uMzIgc2VkIC1pIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRElSOiR0YXJnZXRfc2RrX2RpcjpnIgorZG9uZQorCisjIGNoYW5nZSBhbGwgc3ltbGlua3MgcG9pbnRpbmcgdG8gQFNES1BBVEhACitmb3IgbCBpbiAkKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QgLXR5cGUgbCk7IGRvCisJJFNVRE9fRVhFQyBsbiAtc2ZuICQocmVhZGxpbmsgJGx8JFNVRE9fRVhFQyBzZWQgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9ESVI6JHRhcmdldF9zZGtfZGlyOiIpICRsCitkb25lCisKKyMgZmluZCBvdXQgYWxsIHBlcmwgc2NyaXB0cyBpbiAkbmF0aXZlX3N5c3Jvb3QgYW5kIG1vZGlmeSB0aGVtIHJlcGxhY2luZyB0aGUKKyMgaG9zdCBwZXJsIHdpdGggU0RLIHBlcmwuCitmb3IgcGVybF9zY3JpcHQgaW4gJCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290IC10eXBlIGYgLWV4ZWMgZ3JlcCAtbCAiXiMhLipwZXJsIiAne30nIFw7KTsgZG8KKwkkU1VET19FWEVDIHNlZCAtaSAtZSAiczpeIyEgKi91c3IvYmluL3BlcmwuKjojISAvdXNyL2Jpbi9lbnYgcGVybDpnIiAtZSBcCisJCSJzOiAvdXNyL2Jpbi9wZXJsOiAvdXNyL2Jpbi9lbnYgcGVybDpnIiAkcGVybF9zY3JpcHQKK2RvbmUKKworZWNobyBkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5NTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIgQEAKK2Zyb20gcGtndXRpbCBpbXBvcnQgZXh0ZW5kX3BhdGgKK19fcGF0aF9fID0gZXh0ZW5kX3BhdGgoX19wYXRoX18sIF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9idWlsZGhpc3RvcnlfYW5hbHlzaXMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk1Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9idWlsZGhpc3RvcnlfYW5hbHlzaXMucHkKQEAgLTAsMCArMSw0NTYgQEAKKyMgUmVwb3J0IHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIHRoZSBidWlsZGhpc3RvcnkgcmVwb3NpdG9yeSBzaW5jZSBhIHNwZWNpZmljIHJldmlzaW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3I6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorIworIyBOb3RlOiByZXF1aXJlcyBHaXRQeXRob24gMC4zLjErCisjCisjIFlvdSBjYW4gdXNlIHRoaXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGJ5IHJ1bm5pbmcgc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZgorIworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBnaXQKK2ltcG9ydCByZQoraW1wb3J0IGJiLnV0aWxzCisKKworIyBIb3cgdG8gZGlzcGxheSBmaWVsZHMKK2xpc3RfZmllbGRzID0gWydERVBFTkRTJywgJ1JQUk9WSURFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnLCAnRklMRVMnLCAnRklMRUxJU1QnLCAnVVNFUl9DTEFTU0VTJywgJ0lNQUdFX0NMQVNTRVMnLCAnSU1BR0VfRkVBVFVSRVMnLCAnSU1BR0VfTElOR1VBUycsICdJTUFHRV9JTlNUQUxMJywgJ0JBRF9SRUNPTU1FTkRBVElPTlMnLCAnUEFDS0FHRV9FWENMVURFJ10KK2xpc3Rfb3JkZXJfZmllbGRzID0gWydQQUNLQUdFUyddCitkZWZhdWx0dmFsX21hcCA9IHsnUEtHJzogJ1BLRycsICdQS0dFJzogJ1BFJywgJ1BLR1YnOiAnUFYnLCAnUEtHUic6ICdQUid9CitudW1lcmljX2ZpZWxkcyA9IFsnUEtHU0laRScsICdJTUFHRVNJWkUnXQorIyBGaWVsZHMgdG8gbW9uaXRvcgorbW9uaXRvcl9maWVsZHMgPSBbJ1JQUk9WSURFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdQQUNLQUdFUycsICdGSUxFTElTVCcsICdQS0dTSVpFJywgJ0lNQUdFU0laRScsICdQS0cnXQordmVyX21vbml0b3JfZmllbGRzID0gWydQS0dFJywgJ1BLR1YnLCAnUEtHUiddCisjIFBlcmNlbnRhZ2UgY2hhbmdlIHRvIGFsZXJ0IGZvciBudW1lcmljIGZpZWxkcworbW9uaXRvcl9udW1lcmljX3RocmVzaG9sZCA9IDEwCisjIEltYWdlIGZpbGVzIHRvIG1vbml0b3IgKG5vdGUgdGhhdCBpbWFnZS1pbmZvLnR4dCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkpCitpbWdfbW9uaXRvcl9maWxlcyA9IFsnaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0JywgJ2ZpbGVzLWluLWltYWdlLnR4dCddCisjIFJlbGF0ZWQgY29udGV4dCBmaWVsZHMgZm9yIHJlcG9ydGluZyAobm90ZTogUEUsIFBWICYgUFIgYXJlIGFsd2F5cyByZXBvcnRlZCBmb3IgbW9uaXRvcmVkIHBhY2thZ2UgZmllbGRzKQorcmVsYXRlZF9maWVsZHMgPSB7fQorcmVsYXRlZF9maWVsZHNbJ1JERVBFTkRTJ10gPSBbJ0RFUEVORFMnXQorcmVsYXRlZF9maWVsZHNbJ1JSRUNPTU1FTkRTJ10gPSBbJ0RFUEVORFMnXQorcmVsYXRlZF9maWVsZHNbJ0ZJTEVMSVNUJ10gPSBbJ0ZJTEVTJ10KK3JlbGF0ZWRfZmllbGRzWydQS0dTSVpFJ10gPSBbJ0ZJTEVMSVNUJ10KK3JlbGF0ZWRfZmllbGRzWydmaWxlcy1pbi1pbWFnZS50eHQnXSA9IFsnaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0JywgJ1VTRVJfQ0xBU1NFUycsICdJTUFHRV9DTEFTU0VTJywgJ1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EJywgJ0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnXQorcmVsYXRlZF9maWVsZHNbJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCddID0gWydJTUFHRV9GRUFUVVJFUycsICdJTUFHRV9MSU5HVUFTJywgJ0lNQUdFX0lOU1RBTEwnLCAnQkFEX1JFQ09NTUVOREFUSU9OUycsICdOT19SRUNPTU1FTkRBVElPTlMnLCAnUEFDS0FHRV9FWENMVURFJ10KKworCitjbGFzcyBDaGFuZ2VSZWNvcmQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGZpZWxkbmFtZSwgb2xkdmFsdWUsIG5ld3ZhbHVlLCBtb25pdG9yZWQpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYuZmllbGRuYW1lID0gZmllbGRuYW1lCisgICAgICAgIHNlbGYub2xkdmFsdWUgPSBvbGR2YWx1ZQorICAgICAgICBzZWxmLm5ld3ZhbHVlID0gbmV3dmFsdWUKKyAgICAgICAgc2VsZi5tb25pdG9yZWQgPSBtb25pdG9yZWQKKyAgICAgICAgc2VsZi5yZWxhdGVkID0gW10KKyAgICAgICAgc2VsZi5maWxlY2hhbmdlcyA9IE5vbmUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RyX2ludGVybmFsKFRydWUpCisKKyAgICBkZWYgX3N0cl9pbnRlcm5hbChzZWxmLCBvdXRlcik6CisgICAgICAgIGlmIG91dGVyOgorICAgICAgICAgICAgaWYgJy9pbWFnZS1maWxlcy8nIGluIHNlbGYucGF0aDoKKyAgICAgICAgICAgICAgICBwcmVmaXggPSAnJXM6ICcgJSBzZWxmLnBhdGguc3BsaXQoJy9pbWFnZS1maWxlcy8nKVswXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVmaXggPSAnJXM6ICcgJSBzZWxmLnBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisKKyAgICAgICAgZGVmIHBrZ2xpc3RfY29tYmluZShkZXB2ZXIpOgorICAgICAgICAgICAgcGtnbGlzdCA9IFtdCisgICAgICAgICAgICBmb3Igayx2IGluIGRlcHZlci5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiB2OgorICAgICAgICAgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZCgiJXMgKCVzKSIgJSAoayx2KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZChrKQorICAgICAgICAgICAgcmV0dXJuIHBrZ2xpc3QKKworICAgICAgICBpZiBzZWxmLmZpZWxkbmFtZSBpbiBsaXN0X2ZpZWxkcyBvciBzZWxmLmZpZWxkbmFtZSBpbiBsaXN0X29yZGVyX2ZpZWxkczoKKyAgICAgICAgICAgIGlmIHNlbGYuZmllbGRuYW1lIGluIFsnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUyddOgorICAgICAgICAgICAgICAgIChkZXB2ZXJhLCBkZXB2ZXJiKSA9IGNvbXBhcmVfcGtnX2xpc3RzKHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgICAgICAgICAgYWl0ZW1zID0gcGtnbGlzdF9jb21iaW5lKGRlcHZlcmEpCisgICAgICAgICAgICAgICAgYml0ZW1zID0gcGtnbGlzdF9jb21iaW5lKGRlcHZlcmIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFpdGVtcyA9IHNlbGYub2xkdmFsdWUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGJpdGVtcyA9IHNlbGYubmV3dmFsdWUuc3BsaXQoKQorICAgICAgICAgICAgcmVtb3ZlZCA9IGxpc3Qoc2V0KGFpdGVtcykgLSBzZXQoYml0ZW1zKSkKKyAgICAgICAgICAgIGFkZGVkID0gbGlzdChzZXQoYml0ZW1zKSAtIHNldChhaXRlbXMpKQorCisgICAgICAgICAgICBpZiByZW1vdmVkIG9yIGFkZGVkOgorICAgICAgICAgICAgICAgIGlmIHJlbW92ZWQgYW5kIG5vdCBiaXRlbXM6CisgICAgICAgICAgICAgICAgICAgIG91dCA9ICclczogcmVtb3ZlZCBhbGwgaXRlbXMgIiVzIicgJSAoc2VsZi5maWVsZG5hbWUsICcgJy5qb2luKHJlbW92ZWQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dCA9ICclczolcyVzJyAlIChzZWxmLmZpZWxkbmFtZSwgJyByZW1vdmVkICIlcyInICUgJyAnLmpvaW4ocmVtb3ZlZCkgaWYgcmVtb3ZlZCBlbHNlICcnLCAnIGFkZGVkICIlcyInICUgJyAnLmpvaW4oYWRkZWQpIGlmIGFkZGVkIGVsc2UgJycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIG9yZGVyJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gbnVtZXJpY19maWVsZHM6CisgICAgICAgICAgICBhdmFsID0gaW50KHNlbGYub2xkdmFsdWUgb3IgMCkKKyAgICAgICAgICAgIGJ2YWwgPSBpbnQoc2VsZi5uZXd2YWx1ZSBvciAwKQorICAgICAgICAgICAgaWYgYXZhbCAhPSAwOgorICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAoKGJ2YWwgLSBhdmFsKSAvIGZsb2F0KGF2YWwpKSAqIDEwMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwZXJjZW50Y2hnID0gMTAwCisgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZCBmcm9tICVzIHRvICVzICglcyVkJSUpJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSBvciAiJyciLCBzZWxmLm5ld3ZhbHVlIG9yICInJyIsICcrJyBpZiBwZXJjZW50Y2hnID4gMCBlbHNlICcnLCBwZXJjZW50Y2hnKQorICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIGRlZmF1bHR2YWxfbWFwOgorICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5maWVsZG5hbWUsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgICAgICBpZiBzZWxmLmZpZWxkbmFtZSA9PSAnUEtHJyBhbmQgJ1tkZWZhdWx0XScgaW4gc2VsZi5uZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBvdXQgKz0gJyAtIG1heSBpbmRpY2F0ZSBkZWJpYW4gcmVuYW1pbmcgZmFpbHVyZScKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBbJ3BrZ19wcmVpbnN0JywgJ3BrZ19wb3N0aW5zdCcsICdwa2dfcHJlcm0nLCAncGtnX3Bvc3RybSddOgorICAgICAgICAgICAgaWYgc2VsZi5vbGR2YWx1ZSBhbmQgc2VsZi5uZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZDpcbiAgJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBlbGlmIHNlbGYubmV3dmFsdWU6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGFkZGVkOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5vbGR2YWx1ZToKKyAgICAgICAgICAgICAgICBvdXQgPSAnJXMgY2xlYXJlZDpcbiAgJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBhbGluZXMgPSBzZWxmLm9sZHZhbHVlLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgYmxpbmVzID0gc2VsZi5uZXd2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIGRpZmYgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihhbGluZXMsIGJsaW5lcywgc2VsZi5maWVsZG5hbWUsIHNlbGYuZmllbGRuYW1lLCBsaW5ldGVybT0nJykKKyAgICAgICAgICAgIG91dCArPSAnXG4gICcuam9pbihsaXN0KGRpZmYpWzI6XSkKKyAgICAgICAgICAgIG91dCArPSAnXG4gIC0tJworICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIGltZ19tb25pdG9yX2ZpbGVzIG9yICcvaW1hZ2UtZmlsZXMvJyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICBmaWVsZG5hbWUgPSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgaWYgJy9pbWFnZS1maWxlcy8nIGluIHNlbGYucGF0aDoKKyAgICAgICAgICAgICAgICBmaWVsZG5hbWUgPSBvcy5wYXRoLmpvaW4oJy8nICsgc2VsZi5wYXRoLnNwbGl0KCcvaW1hZ2UtZmlsZXMvJylbMV0sIHNlbGYuZmllbGRuYW1lKQorICAgICAgICAgICAgICAgIG91dCA9ICdDaGFuZ2VzIHRvICVzOlxuICAnICUgZmllbGRuYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG91dGVyOgorICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnQ2hhbmdlcyB0byAlcyAnICUgc2VsZi5wYXRoCisgICAgICAgICAgICAgICAgb3V0ID0gJyglcyk6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgaWYgc2VsZi5maWxlY2hhbmdlczoKKyAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4oWyclcycgJSBpIGZvciBpIGluIHNlbGYuZmlsZWNoYW5nZXNdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhbGluZXMgPSBzZWxmLm9sZHZhbHVlLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgIGJsaW5lcyA9IHNlbGYubmV3dmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGFsaW5lcywgYmxpbmVzLCBmaWVsZG5hbWUsIGZpZWxkbmFtZSwgbGluZXRlcm09JycpCisgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgJy5qb2luKGxpc3QoZGlmZikpCisgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgLS0nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZCBmcm9tICIlcyIgdG8gIiVzIicgJSAoc2VsZi5maWVsZG5hbWUsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisKKyAgICAgICAgaWYgc2VsZi5yZWxhdGVkOgorICAgICAgICAgICAgZm9yIGNoZyBpbiBzZWxmLnJlbGF0ZWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IG91dGVyIGFuZCBjaGcuZmllbGRuYW1lIGluIFsnUEUnLCAnUFYnLCAnUFInXToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjaGcuX3N0cl9pbnRlcm5hbChGYWxzZSkuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAqICVzJyAlIGxpbmUKKworICAgICAgICByZXR1cm4gJyVzJXMnICUgKHByZWZpeCwgb3V0KQorCitjbGFzcyBGaWxlQ2hhbmdlOgorICAgIGNoYW5nZXR5cGVfYWRkID0gJ0EnCisgICAgY2hhbmdldHlwZV9yZW1vdmUgPSAnUicKKyAgICBjaGFuZ2V0eXBlX3R5cGUgPSAnVCcKKyAgICBjaGFuZ2V0eXBlX3Blcm1zID0gJ1AnCisgICAgY2hhbmdldHlwZV9vd25lcmdyb3VwID0gJ08nCisgICAgY2hhbmdldHlwZV9saW5rID0gJ0wnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgY2hhbmdldHlwZSwgb2xkdmFsdWUgPSBOb25lLCBuZXd2YWx1ZSA9IE5vbmUpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYuY2hhbmdldHlwZSA9IGNoYW5nZXR5cGUKKyAgICAgICAgc2VsZi5vbGR2YWx1ZSA9IG9sZHZhbHVlCisgICAgICAgIHNlbGYubmV3dmFsdWUgPSBuZXd2YWx1ZQorCisgICAgZGVmIF9mdHlwZV9zdHIoc2VsZiwgZnR5cGUpOgorICAgICAgICBpZiBmdHlwZSA9PSAnLSc6CisgICAgICAgICAgICByZXR1cm4gJ2ZpbGUnCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ2QnOgorICAgICAgICAgICAgcmV0dXJuICdkaXJlY3RvcnknCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ2wnOgorICAgICAgICAgICAgcmV0dXJuICdzeW1saW5rJworICAgICAgICBlbGlmIGZ0eXBlID09ICdjJzoKKyAgICAgICAgICAgIHJldHVybiAnY2hhciBkZXZpY2UnCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ2InOgorICAgICAgICAgICAgcmV0dXJuICdibG9jayBkZXZpY2UnCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ3AnOgorICAgICAgICAgICAgcmV0dXJuICdmaWZvJworICAgICAgICBlbGlmIGZ0eXBlID09ICdzJzoKKyAgICAgICAgICAgIHJldHVybiAnc29ja2V0JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICd1bmtub3duICglcyknICUgZnR5cGUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX2FkZDoKKyAgICAgICAgICAgIHJldHVybiAnJXMgd2FzIGFkZGVkJyAlIHNlbGYucGF0aAorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfcmVtb3ZlOgorICAgICAgICAgICAgcmV0dXJuICclcyB3YXMgcmVtb3ZlZCcgJSBzZWxmLnBhdGgKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX3R5cGU6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgdHlwZSBmcm9tICVzIHRvICVzJyAlIChzZWxmLnBhdGgsIHNlbGYuX2Z0eXBlX3N0cihzZWxmLm9sZHZhbHVlKSwgc2VsZi5fZnR5cGVfc3RyKHNlbGYubmV3dmFsdWUpKQorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfcGVybXM6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgcGVybWlzc2lvbnMgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfb3duZXJncm91cDoKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCBvd25lci9ncm91cCBmcm9tICVzIHRvICVzJyAlIChzZWxmLnBhdGgsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9saW5rOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIHN5bWxpbmsgdGFyZ2V0IGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCAodW5rbm93biknICUgc2VsZi5wYXRoCisKKworZGVmIGJsb2JfdG9fZGljdChibG9iKToKKyAgICBhbGluZXMgPSBibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICBhZGljdCA9IHt9CisgICAgZm9yIGxpbmUgaW4gYWxpbmVzOgorICAgICAgICBzcGxpdHYgPSBbaS5zdHJpcCgpIGZvciBpIGluIGxpbmUuc3BsaXQoJz0nLDEpXQorICAgICAgICBpZiBsZW4oc3BsaXR2KSA+IDE6CisgICAgICAgICAgICBhZGljdFtzcGxpdHZbMF1dID0gc3BsaXR2WzFdCisgICAgcmV0dXJuIGFkaWN0CisKKworZGVmIGZpbGVfbGlzdF90b19kaWN0KGxpbmVzKToKKyAgICBhZGljdCA9IHt9CisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICMgTGVhdmUgdGhlIGxhc3QgZmV3IGZpZWxkcyBpbnRhY3Qgc28gd2UgaGFuZGxlIGZpbGUgbmFtZXMgY29udGFpbmluZyBzcGFjZXMKKyAgICAgICAgc3BsaXR2ID0gbGluZS5zcGxpdChOb25lLDQpCisgICAgICAgICMgR3JhYiB0aGUgcGF0aCBhbmQgcmVtb3ZlIHRoZSBsZWFkaW5nIC4KKyAgICAgICAgcGF0aCA9IHNwbGl0dls0XVsxOl0uc3RyaXAoKQorICAgICAgICAjIEhhbmRsZSBzeW1saW5rcworICAgICAgICBpZignIC0+ICcgaW4gcGF0aCk6CisgICAgICAgICAgICB0YXJnZXQgPSBwYXRoLnNwbGl0KCcgLT4gJylbMV0KKyAgICAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCcgLT4gJylbMF0KKyAgICAgICAgICAgIGFkaWN0W3BhdGhdID0gc3BsaXR2WzA6M10gKyBbdGFyZ2V0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRpY3RbcGF0aF0gPSBzcGxpdHZbMDozXQorICAgIHJldHVybiBhZGljdAorCisKK2RlZiBjb21wYXJlX2ZpbGVfbGlzdHMoYWxpbmVzLCBibGluZXMpOgorICAgIGFkaWN0ID0gZmlsZV9saXN0X3RvX2RpY3QoYWxpbmVzKQorICAgIGJkaWN0ID0gZmlsZV9saXN0X3RvX2RpY3QoYmxpbmVzKQorICAgIGZpbGVjaGFuZ2VzID0gW10KKyAgICBmb3IgcGF0aCwgc3BsaXR2IGluIGFkaWN0Lml0ZXJpdGVtcygpOgorICAgICAgICBuZXdzcGxpdHYgPSBiZGljdC5wb3AocGF0aCwgTm9uZSkKKyAgICAgICAgaWYgbmV3c3BsaXR2OgorICAgICAgICAgICAgIyBDaGVjayB0eXBlCisgICAgICAgICAgICBvbGR2YWx1ZSA9IHNwbGl0dlswXVswXQorICAgICAgICAgICAgbmV3dmFsdWUgPSBuZXdzcGxpdHZbMF1bMF0KKyAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV90eXBlLCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgIyBDaGVjayBwZXJtaXNzaW9ucworICAgICAgICAgICAgb2xkdmFsdWUgPSBzcGxpdHZbMF1bMTpdCisgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3NwbGl0dlswXVsxOl0KKyAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9wZXJtcywgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgICMgQ2hlY2sgb3duZXIvZ3JvdXAKKyAgICAgICAgICAgIG9sZHZhbHVlID0gJyVzLyVzJyAlIChzcGxpdHZbMV0sIHNwbGl0dlsyXSkKKyAgICAgICAgICAgIG5ld3ZhbHVlID0gJyVzLyVzJyAlIChuZXdzcGxpdHZbMV0sIG5ld3NwbGl0dlsyXSkKKyAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9vd25lcmdyb3VwLCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgIyBDaGVjayBzeW1saW5rIHRhcmdldAorICAgICAgICAgICAgaWYgbmV3c3BsaXR2WzBdWzBdID09ICdsJzoKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXR2KSA+IDM6CisgICAgICAgICAgICAgICAgICAgIG9sZHZhbHVlID0gc3BsaXR2WzNdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb2xkdmFsdWUgPSBOb25lCisgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBuZXdzcGxpdHZbM10KKyAgICAgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX2xpbmssIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfcmVtb3ZlKSkKKworICAgICMgV2hhdGV2ZXIgaXMgbGVmdCBvdmVyIGhhcyBiZWVuIGFkZGVkCisgICAgZm9yIHBhdGggaW4gYmRpY3Q6CisgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9hZGQpKQorCisgICAgcmV0dXJuIGZpbGVjaGFuZ2VzCisKKworZGVmIGNvbXBhcmVfbGlzdHMoYWxpbmVzLCBibGluZXMpOgorICAgIHJlbW92ZWQgPSBsaXN0KHNldChhbGluZXMpIC0gc2V0KGJsaW5lcykpCisgICAgYWRkZWQgPSBsaXN0KHNldChibGluZXMpIC0gc2V0KGFsaW5lcykpCisKKyAgICBmaWxlY2hhbmdlcyA9IFtdCisgICAgZm9yIHBrZyBpbiByZW1vdmVkOgorICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwa2csIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9yZW1vdmUpKQorICAgIGZvciBwa2cgaW4gYWRkZWQ6CisgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBrZywgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX2FkZCkpCisKKyAgICByZXR1cm4gZmlsZWNoYW5nZXMKKworCitkZWYgY29tcGFyZV9wa2dfbGlzdHMoYXN0ciwgYnN0cik6CisgICAgZGVwdmVyYSA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihhc3RyKQorICAgIGRlcHZlcmIgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoYnN0cikKKworICAgICMgU3RyaXAgb3V0IGNoYW5nZXMgd2hlcmUgdGhlIHZlcnNpb24gaGFzIGluY3JlYXNlZAorICAgIHJlbW92ZSA9IFtdCisgICAgZm9yIGsgaW4gZGVwdmVyYToKKyAgICAgICAgaWYgayBpbiBkZXB2ZXJiOgorICAgICAgICAgICAgZHZhID0gZGVwdmVyYVtrXQorICAgICAgICAgICAgZHZiID0gZGVwdmVyYltrXQorICAgICAgICAgICAgaWYgZHZhIGFuZCBkdmIgYW5kIGxlbihkdmEpID09IGxlbihkdmIpOgorICAgICAgICAgICAgICAgICMgU2luY2UgbGVuZ3RoIGlzIHRoZSBzYW1lLCBzb3J0IHNvIHRoYXQgcHJlZml4ZXMgKGUuZy4gPj0pIHdpbGwgbGluZSB1cAorICAgICAgICAgICAgICAgIGR2YS5zb3J0KCkKKyAgICAgICAgICAgICAgICBkdmIuc29ydCgpCisgICAgICAgICAgICAgICAgcmVtb3ZlaXQgPSBUcnVlCisgICAgICAgICAgICAgICAgZm9yIGR2YWksIGR2YmkgaW4gemlwKGR2YSwgZHZiKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZHZhaSAhPSBkdmJpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWlwcmVmaXggPSBkdmFpLnNwbGl0KCcgJylbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJpcHJlZml4ID0gZHZiaS5zcGxpdCgnICcpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhaXByZWZpeCA9PSBiaXByZWZpeCBhbmQgYWlwcmVmaXggaW4gWyc+PScsICc9J106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmIudXRpbHMudmVyY21wKGJiLnV0aWxzLnNwbGl0X3ZlcnNpb24oZHZhaSksIGJiLnV0aWxzLnNwbGl0X3ZlcnNpb24oZHZiaSkpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlaXQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVpdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiByZW1vdmVpdDoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlLmFwcGVuZChrKQorCisgICAgZm9yIGsgaW4gcmVtb3ZlOgorICAgICAgICBkZXB2ZXJhLnBvcChrKQorICAgICAgICBkZXB2ZXJiLnBvcChrKQorCisgICAgcmV0dXJuIChkZXB2ZXJhLCBkZXB2ZXJiKQorCisKK2RlZiBjb21wYXJlX2RpY3RfYmxvYnMocGF0aCwgYWJsb2IsIGJibG9iLCByZXBvcnRfYWxsLCByZXBvcnRfdmVyKToKKyAgICBhZGljdCA9IGJsb2JfdG9fZGljdChhYmxvYikKKyAgICBiZGljdCA9IGJsb2JfdG9fZGljdChiYmxvYikKKworICAgIHBrZ25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCisKKyAgICBkZWZhdWx0dmFscyA9IHt9CisgICAgZGVmYXVsdHZhbHNbJ1BLRyddID0gcGtnbmFtZQorICAgIGRlZmF1bHR2YWxzWydQS0dFJ10gPSAnMCcKKworICAgIGNoYW5nZXMgPSBbXQorICAgIGtleXMgPSBsaXN0KHNldChhZGljdC5rZXlzKCkpIHwgc2V0KGJkaWN0LmtleXMoKSkgfCBzZXQoZGVmYXVsdHZhbF9tYXAua2V5cygpKSkKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIGFzdHIgPSBhZGljdC5nZXQoa2V5LCAnJykKKyAgICAgICAgYnN0ciA9IGJkaWN0LmdldChrZXksICcnKQorICAgICAgICBpZiBrZXkgaW4gdmVyX21vbml0b3JfZmllbGRzOgorICAgICAgICAgICAgbW9uaXRvcmVkID0gcmVwb3J0X3ZlciBvciBhc3RyIG9yIGJzdHIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vbml0b3JlZCA9IGtleSBpbiBtb25pdG9yX2ZpZWxkcworICAgICAgICBtYXBwZWRfa2V5ID0gZGVmYXVsdHZhbF9tYXAuZ2V0KGtleSwgJycpCisgICAgICAgIGlmIG1hcHBlZF9rZXk6CisgICAgICAgICAgICBpZiBub3QgYXN0cjoKKyAgICAgICAgICAgICAgICBhc3RyID0gJyVzIFtkZWZhdWx0XScgJSBhZGljdC5nZXQobWFwcGVkX2tleSwgZGVmYXVsdHZhbHMuZ2V0KGtleSwgJycpKQorICAgICAgICAgICAgaWYgbm90IGJzdHI6CisgICAgICAgICAgICAgICAgYnN0ciA9ICclcyBbZGVmYXVsdF0nICUgYmRpY3QuZ2V0KG1hcHBlZF9rZXksIGRlZmF1bHR2YWxzLmdldChrZXksICcnKSkKKworICAgICAgICBpZiBhc3RyICE9IGJzdHI6CisgICAgICAgICAgICBpZiAobm90IHJlcG9ydF9hbGwpIGFuZCBrZXkgaW4gbnVtZXJpY19maWVsZHM6CisgICAgICAgICAgICAgICAgYXZhbCA9IGludChhc3RyIG9yIDApCisgICAgICAgICAgICAgICAgYnZhbCA9IGludChic3RyIG9yIDApCisgICAgICAgICAgICAgICAgaWYgYXZhbCAhPSAwOgorICAgICAgICAgICAgICAgICAgICBwZXJjZW50Y2hnID0gKChidmFsIC0gYXZhbCkgLyBmbG9hdChhdmFsKSkgKiAxMDAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwZXJjZW50Y2hnID0gMTAwCisgICAgICAgICAgICAgICAgaWYgYWJzKHBlcmNlbnRjaGcpIDwgbW9uaXRvcl9udW1lcmljX3RocmVzaG9sZDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgKG5vdCByZXBvcnRfYWxsKSBhbmQga2V5IGluIGxpc3RfZmllbGRzOgorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAiRklMRUxJU1QiIGFuZCBwYXRoLmVuZHN3aXRoKCItZGJnIikgYW5kIGJzdHIuc3RyaXAoKSAhPSAnJzoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gWydSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJ106CisgICAgICAgICAgICAgICAgICAgIChkZXB2ZXJhLCBkZXB2ZXJiKSA9IGNvbXBhcmVfcGtnX2xpc3RzKGFzdHIsIGJzdHIpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcHZlcmEgPT0gZGVwdmVyYjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgYWxpc3QgPSBhc3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBhbGlzdC5zb3J0KCkKKyAgICAgICAgICAgICAgICBibGlzdCA9IGJzdHIuc3BsaXQoKQorICAgICAgICAgICAgICAgIGJsaXN0LnNvcnQoKQorICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVtb3ZhbCBvZiBzZWxmLWRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGlmIHBrZ25hbWUgaW4gYWxpc3QgYW5kIG5vdCBwa2duYW1lIGluIGJsaXN0OgorICAgICAgICAgICAgICAgICAgICBhbGlzdC5yZW1vdmUocGtnbmFtZSkKKyAgICAgICAgICAgICAgICBpZiAnICcuam9pbihhbGlzdCkgPT0gJyAnLmpvaW4oYmxpc3QpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwga2V5LCBhc3RyLCBic3RyLCBtb25pdG9yZWQpCisgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgcmV0dXJuIGNoYW5nZXMKKworCitkZWYgcHJvY2Vzc19jaGFuZ2VzKHJlcG9wYXRoLCByZXZpc2lvbjEsIHJldmlzaW9uMj0nSEVBRCcsIHJlcG9ydF9hbGw9RmFsc2UsIHJlcG9ydF92ZXI9RmFsc2UpOgorICAgIHJlcG8gPSBnaXQuUmVwbyhyZXBvcGF0aCkKKyAgICBhc3NlcnQgcmVwby5iYXJlID09IEZhbHNlCisgICAgY29tbWl0ID0gcmVwby5jb21taXQocmV2aXNpb24xKQorICAgIGRpZmYgPSBjb21taXQuZGlmZihyZXZpc2lvbjIpCisKKyAgICBjaGFuZ2VzID0gW10KKyAgICBmb3IgZCBpbiBkaWZmLml0ZXJfY2hhbmdlX3R5cGUoJ00nKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnbGF0ZXN0JzoKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmV4dGVuZChjb21wYXJlX2RpY3RfYmxvYnMocGF0aCwgZC5hX2Jsb2IsIGQuYl9ibG9iLCByZXBvcnRfYWxsLCByZXBvcnRfdmVyKSkKKyAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgnbGF0ZXN0LicpOgorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIFRydWUpCisgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICBlbGlmIHBhdGguc3RhcnRzd2l0aCgnaW1hZ2VzLycpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSBpbiBpbWdfbW9uaXRvcl9maWxlczoKKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnZmlsZXMtaW4taW1hZ2UudHh0JzoKKyAgICAgICAgICAgICAgICAgICAgYWxpbmVzID0gZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBibGluZXMgPSBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzID0gY29tcGFyZV9maWxlX2xpc3RzKGFsaW5lcyxibGluZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBOb25lLCBOb25lLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hnLmZpbGVjaGFuZ2VzID0gZmlsZWNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICAgICAgICAgICAgICBlbGlmIGZpbGVuYW1lID09ICdpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnOgorICAgICAgICAgICAgICAgICAgICBhbGluZXMgPSBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGJsaW5lcyA9IGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMgPSBjb21wYXJlX2xpc3RzKGFsaW5lcyxibGluZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBOb25lLCBOb25lLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hnLmZpbGVjaGFuZ2VzID0gZmlsZWNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgICAgICBlbGlmIGZpbGVuYW1lID09ICdpbWFnZS1pbmZvLnR4dCc6CisgICAgICAgICAgICAgICAgY2hhbmdlcy5leHRlbmQoY29tcGFyZV9kaWN0X2Jsb2JzKHBhdGgsIGQuYV9ibG9iLCBkLmJfYmxvYiwgcmVwb3J0X2FsbCwgcmVwb3J0X3ZlcikpCisgICAgICAgICAgICBlbGlmICcvaW1hZ2UtZmlsZXMvJyBpbiBwYXRoOgorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIFRydWUpCisgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorCisgICAgIyBMb29rIGZvciBhZGRlZCBwcmVpbnN0L3Bvc3RpbnN0L3ByZXJtL3Bvc3RybQorICAgICMgKHdpdGhvdXQgcmVwb3J0aW5nIG5ld2x5IGFkZGVkIHJlY2lwZXMpCisgICAgYWRkZWRwa2dzID0gW10KKyAgICBhZGRlZGNoYW5nZXMgPSBbXQorICAgIGZvciBkIGluIGRpZmYuaXRlcl9jaGFuZ2VfdHlwZSgnQScpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGQuYl9ibG9iLnBhdGgpCisgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5iX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdsYXRlc3QnOgorICAgICAgICAgICAgICAgIGFkZGVkcGtncy5hcHBlbmQocGF0aCkKKyAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgnbGF0ZXN0LicpOgorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZVs3Ol0sICcnLCBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIFRydWUpCisgICAgICAgICAgICAgICAgYWRkZWRjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgZm9yIGNoZyBpbiBhZGRlZGNoYW5nZXM6CisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIHBrZyBpbiBhZGRlZHBrZ3M6CisgICAgICAgICAgICBpZiBjaGcucGF0aC5zdGFydHN3aXRoKHBrZyk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorCisgICAgIyBMb29rIGZvciBjbGVhcmVkIHByZWluc3QvcG9zdGluc3QvcHJlcm0vcG9zdHJtCisgICAgZm9yIGQgaW4gZGlmZi5pdGVyX2NoYW5nZV90eXBlKCdEJyk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgIT0gJ2xhdGVzdCcgYW5kIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ2xhdGVzdC4nKToKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWVbNzpdLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksICcnLCBUcnVlKQorICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKworICAgICMgTGluayByZWxhdGVkIGNoYW5nZXMKKyAgICBmb3IgY2hnIGluIGNoYW5nZXM6CisgICAgICAgIGlmIGNoZy5tb25pdG9yZWQ6CisgICAgICAgICAgICBmb3IgY2hnMiBpbiBjaGFuZ2VzOgorICAgICAgICAgICAgICAgICMgKENoZWNrIGRpcm5hbWUgaW4gdGhlIGNhc2Ugb2YgZmllbGRzIGZyb20gcmVjaXBlIGluZm8gZmlsZXMpCisgICAgICAgICAgICAgICAgaWYgY2hnLnBhdGggPT0gY2hnMi5wYXRoIG9yIG9zLnBhdGguZGlybmFtZShjaGcucGF0aCkgPT0gY2hnMi5wYXRoOgorICAgICAgICAgICAgICAgICAgICBpZiBjaGcyLmZpZWxkbmFtZSBpbiByZWxhdGVkX2ZpZWxkcy5nZXQoY2hnLmZpZWxkbmFtZSwgW10pOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hnLnJlbGF0ZWQuYXBwZW5kKGNoZzIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgY2hnLnBhdGggPT0gY2hnMi5wYXRoIGFuZCBjaGcucGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKSBhbmQgY2hnMi5maWVsZG5hbWUgaW4gWydQRScsICdQVicsICdQUiddOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hnLnJlbGF0ZWQuYXBwZW5kKGNoZzIpCisKKyAgICBpZiByZXBvcnRfYWxsOgorICAgICAgICByZXR1cm4gY2hhbmdlcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBbY2hnIGZvciBjaGcgaW4gY2hhbmdlcyBpZiBjaGcubW9uaXRvcmVkXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jYWNoZWRwYXRoLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jYWNoZWRwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDBjYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NhY2hlZHBhdGgucHkKQEAgLTAsMCArMSwyMzMgQEAKKyMKKyMgQmFzZWQgb24gc3RhbmRhcmQgcHl0aG9uIGxpYnJhcnkgZnVuY3Rpb25zIGJ1dCBhdm9pZAorIyByZXBlYXRlZCBzdGF0IGNhbGxzLiBJdHMgYXNzdW1lZCB0aGUgZmlsZXMgd2lsbCBub3QgY2hhbmdlIGZyb20gdW5kZXIgdXMKKyMgc28gd2UgY2FuIGNhY2hlIHN0YXQgY2FsbHMuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgc3RhdCBhcyBzdGF0bW9kCisKK2NsYXNzIENhY2hlZFBhdGgob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGNhY2hlID0ge30KKyAgICAgICAgc2VsZi5sc3RhdGNhY2hlID0ge30KKyAgICAgICAgc2VsZi5ub3JtcGF0aGNhY2hlID0ge30KKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgdXBkYXRlY2FjaGUoc2VsZiwgeCk6CisgICAgICAgIHggPSBzZWxmLm5vcm1wYXRoKHgpCisgICAgICAgIGlmIHggaW4gc2VsZi5zdGF0Y2FjaGU6CisgICAgICAgICAgICBkZWwgc2VsZi5zdGF0Y2FjaGVbeF0KKyAgICAgICAgaWYgeCBpbiBzZWxmLmxzdGF0Y2FjaGU6CisgICAgICAgICAgICBkZWwgc2VsZi5sc3RhdGNhY2hlW3hdCisKKyAgICBkZWYgbm9ybXBhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5ub3JtcGF0aGNhY2hlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubm9ybXBhdGhjYWNoZVtwYXRoXQorICAgICAgICBuZXdwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorICAgICAgICBzZWxmLm5vcm1wYXRoY2FjaGVbcGF0aF0gPSBuZXdwYXRoCisgICAgICAgIHJldHVybiBuZXdwYXRoCisKKyAgICBkZWYgX2NhbGxzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoIGluIHNlbGYuc3RhdGNhY2hlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGNhY2hlW3BhdGhdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQorICAgICAgICAgICAgc2VsZi5zdGF0Y2FjaGVbcGF0aF0gPSBzdAorICAgICAgICAgICAgcmV0dXJuIHN0CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBXZSBtaWdodCBhcyB3ZWxsIGNhbGwgbHN0YXQgYW5kIHRoZW4gb25seSAKKyAgICAjIGNhbGwgc3RhdCBhcyB3ZWxsIGluIHRoZSBzeW1ib2xpYyBsaW5rIGNhc2UKKyAgICAjIHNpbmNlIHRoaXMgdHVybnMgb3V0IHRvIGJlIG11Y2ggbW9yZSBvcHRpbWFsCisgICAgIyBpbiByZWFsIHdvcmxkIHVzYWdlIG9mIHRoaXMgY2FjaGUKKyAgICBkZWYgY2FsbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHBhdGggPSBzZWxmLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIHNlbGYuY2FsbGxzdGF0KHBhdGgpCisgICAgICAgIHJldHVybiBzZWxmLnN0YXRjYWNoZVtwYXRoXQorCisgICAgZGVmIGNhbGxsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcGF0aCA9IHNlbGYubm9ybXBhdGgocGF0aCkKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmxzdGF0Y2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5sc3RhdGNhY2hlW3BhdGhdCisgICAgICAgICNiYi5lcnJvcigiTFN0YXRwYXRoOiIgKyBwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsc3QgPSBvcy5sc3RhdChwYXRoKQorICAgICAgICAgICAgc2VsZi5sc3RhdGNhY2hlW3BhdGhdID0gbHN0CisgICAgICAgICAgICBpZiBub3Qgc3RhdG1vZC5TX0lTTE5LKGxzdC5zdF9tb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IGxzdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsc3RhdChwYXRoKQorICAgICAgICAgICAgcmV0dXJuIGxzdAorICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxzdGF0Y2FjaGVbcGF0aF0gPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5zdGF0Y2FjaGVbcGF0aF0gPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIFRoaXMgZm9sbG93cyBzeW1ib2xpYyBsaW5rcywgc28gYm90aCBpc2xpbmsoKSBhbmQgaXNkaXIoKSBjYW4gYmUgdHJ1ZQorICAgICMgZm9yIHRoZSBzYW1lIHBhdGggb25vIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHN5bWxpbmtzCisgICAgZGVmIGlzZmlsZShzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgorICAgICAgICBzdCA9IHNlbGYuY2FsbHN0YXQocGF0aCkKKyAgICAgICAgaWYgbm90IHN0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzdGF0bW9kLlNfSVNSRUcoc3Quc3RfbW9kZSkKKworICAgICMgSXMgYSBwYXRoIGEgZGlyZWN0b3J5PworICAgICMgVGhpcyBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLCBzbyBib3RoIGlzbGluaygpIGFuZCBpc2RpcigpCisgICAgIyBjYW4gYmUgdHJ1ZSBmb3IgdGhlIHNhbWUgcGF0aCBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBzeW1saW5rcworICAgIGRlZiBpc2RpcihzZWxmLCBzKToKKyAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIHBhdGhuYW1lIHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnkuIiIiCisgICAgICAgIHN0ID0gc2VsZi5jYWxsc3RhdChzKQorICAgICAgICBpZiBub3Qgc3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRtb2QuU19JU0RJUihzdC5zdF9tb2RlKQorCisgICAgZGVmIGlzbGluayhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsiIiIKKyAgICAgICAgc3QgPSBzZWxmLmNhbGxsc3RhdChwYXRoKQorICAgICAgICBpZiBub3Qgc3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRtb2QuU19JU0xOSyhzdC5zdF9tb2RlKQorCisgICAgIyBEb2VzIGEgcGF0aCBleGlzdD8KKyAgICAjIFRoaXMgaXMgZmFsc2UgZm9yIGRhbmdsaW5nIHN5bWJvbGljIGxpbmtzIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZW0uCisgICAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIEZhbHNlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKKyAgICAgICAgaWYgc2VsZi5jYWxsc3RhdChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGxleGlzdHMoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKKyAgICAgICAgaWYgc2VsZi5jYWxsbHN0YXQocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jYWxsc3RhdChwYXRoKQorCisgICAgZGVmIGxzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jYWxsbHN0YXQocGF0aCkKKworICAgIGRlZiB3YWxrKHNlbGYsIHRvcCwgdG9wZG93bj1UcnVlLCBvbmVycm9yPU5vbmUsIGZvbGxvd2xpbmtzPUZhbHNlKToKKyAgICAgICAgIyBNYXRjaGVzIG9zLndhbGssIG5vdCBvcy5wYXRoLndhbGsoKQorCisgICAgICAgICMgV2UgbWF5IG5vdCBoYXZlIHJlYWQgcGVybWlzc2lvbiBmb3IgdG9wLCBpbiB3aGljaCBjYXNlIHdlIGNhbid0CisgICAgICAgICMgZ2V0IGEgbGlzdCBvZiB0aGUgZmlsZXMgdGhlIGRpcmVjdG9yeSBjb250YWlucy4gIG9zLnBhdGgud2FsaworICAgICAgICAjIGFsd2F5cyBzdXBwcmVzc2VkIHRoZSBleGNlcHRpb24gdGhlbiwgcmF0aGVyIHRoYW4gYmxvdyB1cCBmb3IgYQorICAgICAgICAjIG1pbm9yIHJlYXNvbiB3aGVuIChzYXkpIGEgdGhvdXNhbmQgcmVhZGFibGUgZGlyZWN0b3JpZXMgYXJlIHN0aWxsCisgICAgICAgICMgbGVmdCB0byB2aXNpdC4gIFRoYXQgbG9naWMgaXMgY29waWVkIGhlcmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcih0b3ApCisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBpZiBvbmVycm9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGlycywgbm9uZGlycyA9IFtdLCBbXQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIHNlbGYuaXNkaXIob3MucGF0aC5qb2luKHRvcCwgbmFtZSkpOgorICAgICAgICAgICAgICAgIGRpcnMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vbmRpcnMuYXBwZW5kKG5hbWUpCisKKyAgICAgICAgaWYgdG9wZG93bjoKKyAgICAgICAgICAgIHlpZWxkIHRvcCwgZGlycywgbm9uZGlycworICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAgICAgICAgICAgbmV3X3BhdGggPSBvcy5wYXRoLmpvaW4odG9wLCBuYW1lKQorICAgICAgICAgICAgaWYgZm9sbG93bGlua3Mgb3Igbm90IHNlbGYuaXNsaW5rKG5ld19wYXRoKToKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBzZWxmLndhbGsobmV3X3BhdGgsIHRvcGRvd24sIG9uZXJyb3IsIGZvbGxvd2xpbmtzKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICBpZiBub3QgdG9wZG93bjoKKyAgICAgICAgICAgIHlpZWxkIHRvcCwgZGlycywgbm9uZGlycworCisgICAgIyMgcmVhbHBhdGgoKSByZWxhdGVkIGZ1bmN0aW9ucworICAgIGRlZiBfX2lzX3BhdGhfYmVsb3coc2VsZiwgZmlsZSwgcm9vdCk6CisgICAgICAgIHJldHVybiAoZmlsZSArIG9zLnBhdGguc2VwKS5zdGFydHN3aXRoKHJvb3QpCisKKyAgICBkZWYgX19yZWFscGF0aF9yZWwoc2VsZiwgc3RhcnQsIHJlbF9wYXRoLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgICAgICIiIkNhbGN1bGF0ZXMgcmVhbCBwYXRoIG9mIHN5bWxpbmsgJ3N0YXJ0JyArICdyZWxfcGF0aCcgYmVsb3cKKyAgICAgICAgJ3Jvb3QnOyBubyBwYXJ0IG9mICdzdGFydCcgYmVsb3cgJ3Jvb3QnIG11c3QgY29udGFpbiBzeW1saW5rcy4gIiIiCisgICAgICAgIGhhdmVfZGlyID0gVHJ1ZQorCisgICAgICAgIGZvciBkIGluIHJlbF9wYXRoLnNwbGl0KG9zLnBhdGguc2VwKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXZlX2RpciBhbmQgbm90IGFzc3VtZV9kaXI6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTk9FTlQsICJubyBzdWNoIGRpcmVjdG9yeSAlcyIgJSBzdGFydCkKKworICAgICAgICAgICAgaWYgZCA9PSBvcy5wYXRoLnBhcmRpcjogIyAnLi4nCisgICAgICAgICAgICAgICAgaWYgbGVuKHN0YXJ0KSA+PSBsZW4ocm9vdCk6CisgICAgICAgICAgICAgICAgICAgICMgZG8gbm90IGZvbGxvdyAnLi4nIGJlZm9yZSByb290CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gb3MucGF0aC5kaXJuYW1lKHN0YXJ0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgZW1pdCB3YXJuaW5nPworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIChzdGFydCwgaGF2ZV9kaXIpID0gc2VsZi5fX3JlYWxwYXRoKG9zLnBhdGguam9pbihzdGFydCwgZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisKKyAgICAgICAgICAgIGFzc2VydChzZWxmLl9faXNfcGF0aF9iZWxvdyhzdGFydCwgcm9vdCkpCisKKyAgICAgICAgcmV0dXJuIHN0YXJ0CisKKyAgICBkZWYgX19yZWFscGF0aChzZWxmLCBmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgICAgIHdoaWxlIHNlbGYuaXNsaW5rKGZpbGUpIGFuZCBsZW4oZmlsZSkgPj0gbGVuKHJvb3QpOgorICAgICAgICAgICAgaWYgbG9vcF9jbnQgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVMT09QLCBmaWxlKQorCisgICAgICAgICAgICBsb29wX2NudCAtPSAxCisgICAgICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnJlYWRsaW5rKGZpbGUpKQorICAgIAorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnModGFyZ2V0KToKKyAgICAgICAgICAgICAgICB0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpCisgICAgICAgICAgICAgICAgYXNzZXJ0KHNlbGYuX19pc19wYXRoX2JlbG93KHRkaXIsIHJvb3QpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0ZGlyID0gcm9vdAorCisgICAgICAgICAgICBmaWxlID0gc2VsZi5fX3JlYWxwYXRoX3JlbCh0ZGlyLCB0YXJnZXQsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlzX2RpciA9IHNlbGYuaXNkaXIoZmlsZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaXNfZGlyID0gRmFsc2UKKworICAgICAgICByZXR1cm4gKGZpbGUsIGlzX2RpcikKKworICAgIGRlZiByZWFscGF0aChzZWxmLCBmaWxlLCByb290LCB1c2VfcGh5c2RpciA9IFRydWUsIGxvb3BfY250ID0gMTAwLCBhc3N1bWVfZGlyID0gRmFsc2UpOgorICAgICAgICAiIiIgUmV0dXJucyB0aGUgY2Fub25pY2FsIHBhdGggb2YgJ2ZpbGUnIHdpdGggYXNzdW1pbmcgYQorICAgICAgICB0b3BsZXZlbCAncm9vdCcgZGlyZWN0b3J5LiBXaGVuICd1c2VfcGh5c2RpcicgaXMgc2V0LCBhbGwKKyAgICAgICAgcHJlY2VkaW5nIHBhdGggY29tcG9uZW50cyBvZiAnZmlsZScgd2lsbCBiZSByZXNvbHZlZCBmaXJzdDsKKyAgICAgICAgdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgdW5sZXNzIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBpcworICAgICAgICBubyBzeW1saW5rIGluIHRoZSBwYXRoLiBXaGVuICdhc3N1bWVfZGlyJyBpcyBub3Qgc2V0LCBtaXNzaW5nCisgICAgICAgIHBhdGggY29tcG9uZW50cyB3aWxsIHJhaXNlIGFuIEVOT0VOVCBlcnJvciIiIgorCisgICAgICAgIHJvb3QgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3QpCisgICAgICAgIGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGZpbGUpCisKKyAgICAgICAgaWYgbm90IHJvb3QuZW5kc3dpdGgob3MucGF0aC5zZXApOgorICAgICAgICAgICAgIyBsZXR0aW5nIHJvb3QgZW5kIHdpdGggJy8nIG1ha2VzIHNvbWUgdGhpbmdzIGVhc2llcgorICAgICAgICAgICAgcm9vdCA9IHJvb3QgKyBvcy5wYXRoLnNlcAorCisgICAgICAgIGlmIG5vdCBzZWxmLl9faXNfcGF0aF9iZWxvdyhmaWxlLCByb290KToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUlOVkFMLCAiZmlsZSAnJXMnIGlzIG5vdCBiZWxvdyByb290IiAlIGZpbGUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdXNlX3BoeXNkaXI6CisgICAgICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19yZWFscGF0aF9yZWwocm9vdCwgZmlsZVsobGVuKHJvb3QpIC0gMSk6XSwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9fcmVhbHBhdGgoZmlsZSwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpWzBdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVMT09QOgorICAgICAgICAgICAgICAgICMgbWFrZSBFTE9PUCBtb3JlIHJlYWRhYmxlOyB3aXRob3V0IGNhdGNoaW5nIGl0LCB0aGVyZSB3aWxsCisgICAgICAgICAgICAgICAgIyBiZSBwcmludGVkIGEgYmFja3RyYWNlIHdpdGggMTAwcyBvZiBPU0Vycm9yIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICAjIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVMT09QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtdWNoIHJlY3Vyc2lvbnMgd2hpbGUgcmVzb2x2aW5nICclcyc7IGxvb3AgaW4gJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUsIGUuc3RyZXJyb3IpKQorCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc2V4dGVuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTA3ZWNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc2V4dGVuZC5weQpAQCAtMCwwICsxLDEyMCBAQAorY2xhc3MgQ2xhc3NFeHRlbmRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRuYW1lLCBkKToKKyAgICAgICAgc2VsZi5leHRuYW1lID0gZXh0bmFtZQorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucGtnc19tYXBwaW5nID0gW10KKworICAgIGRlZiBleHRlbmRfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJrZXJuZWwtIikgb3IgbmFtZSA9PSAidmlydHVhbC9rZXJuZWwiOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJydGxkIik6CisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCItY3Jvc3NzZGsiKToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoIi0iICsgc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoIi0iICsgc2VsZi5leHRuYW1lLCAiIikKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJ2aXJ0dWFsLyIpOgorICAgICAgICAgICAgc3VicyA9IG5hbWUuc3BsaXQoIi8iLCAxKVsxXQorICAgICAgICAgICAgaWYgbm90IHN1YnMuc3RhcnRzd2l0aChzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiAidmlydHVhbC8iICsgc2VsZi5leHRuYW1lICsgIi0iICsgc3VicworICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0aChzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0bmFtZSArICItIiArIG5hbWUKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIGRlZiBtYXBfdmFyaWFibGUoc2VsZiwgdmFybmFtZSwgc2V0dmFyID0gVHJ1ZSk6CisgICAgICAgIHZhciA9IHNlbGYuZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHZhcjoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICB2YXIgPSB2YXIuc3BsaXQoKQorICAgICAgICBuZXd2YXIgPSBbXQorICAgICAgICBmb3IgdiBpbiB2YXI6CisgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKHNlbGYuZXh0ZW5kX25hbWUodikpCisgICAgICAgIG5ld2RhdGEgPSAgIiAiLmpvaW4obmV3dmFyKQorICAgICAgICBpZiBzZXR2YXI6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKHZhcm5hbWUsIG5ld2RhdGEpCisgICAgICAgIHJldHVybiBuZXdkYXRhCisKKyAgICBkZWYgbWFwX3JlZ2V4cF92YXJpYWJsZShzZWxmLCB2YXJuYW1lLCBzZXR2YXIgPSBUcnVlKToKKyAgICAgICAgdmFyID0gc2VsZi5kLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBub3QgdmFyOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHZhciA9IHZhci5zcGxpdCgpCisgICAgICAgIG5ld3ZhciA9IFtdCisgICAgICAgIGZvciB2IGluIHZhcjoKKyAgICAgICAgICAgIGlmIHYuc3RhcnRzd2l0aCgiXiIgKyBzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQodikKKyAgICAgICAgICAgIGVsaWYgdi5zdGFydHN3aXRoKCJeIik6CisgICAgICAgICAgICAgICAgbmV3dmFyLmFwcGVuZCgiXiIgKyBzZWxmLmV4dG5hbWUgKyAiLSIgKyB2WzE6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3dmFyLmFwcGVuZChzZWxmLmV4dGVuZF9uYW1lKHYpKQorICAgICAgICBuZXdkYXRhID0gICIgIi5qb2luKG5ld3ZhcikKKyAgICAgICAgaWYgc2V0dmFyOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcih2YXJuYW1lLCBuZXdkYXRhKQorICAgICAgICByZXR1cm4gbmV3ZGF0YQorCisgICAgZGVmIG1hcF9kZXBlbmRzKHNlbGYsIGRlcCk6CisgICAgICAgIGlmIGRlcC5lbmRzd2l0aCgoIi1uYXRpdmUiLCAiLW5hdGl2ZS1ydW50aW1lIikpIG9yICgnbmF0aXZlc2RrLScgaW4gZGVwKSBvciAoJ2Nyb3NzLWNhbmFkaWFuJyBpbiBkZXApIG9yICgnLWNyb3Nzc2RrLScgaW4gZGVwKToKKyAgICAgICAgICAgIHJldHVybiBkZXAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRG8gbm90IGV4dGVuZCBmb3IgdGhhdCBhbHJlYWR5IGhhdmUgbXVsdGlsaWIgcHJlZml4CisgICAgICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpCisgICAgICAgICAgICBpZiB2YXI6CisgICAgICAgICAgICAgICAgdmFyID0gdmFyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBmb3IgdiBpbiB2YXI6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcC5zdGFydHN3aXRoKHYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0ZW5kX25hbWUoZGVwKQorCisgICAgZGVmIG1hcF9kZXBlbmRzX3ZhcmlhYmxlKHNlbGYsIHZhcm5hbWUsIHN1ZmZpeCA9ICIiKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIHByZXNlcnZlIEVYVEVORFBLR1Ygc28gaXQgY2FuIGJlIGV4cGFuZGVkIGNvcnJlY3RseSBsYXRlcgorICAgICAgICBpZiBzdWZmaXg6CisgICAgICAgICAgICB2YXJuYW1lID0gdmFybmFtZSArICJfIiArIHN1ZmZpeAorICAgICAgICBvcmlnID0gc2VsZi5kLmdldFZhcigiRVhURU5EUEtHViIsIEZhbHNlKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJFWFRFTkRQS0dWIiwgIkVYVEVORFBLR1YiKQorICAgICAgICBkZXBzID0gc2VsZi5kLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBub3QgZGVwczoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkVYVEVORFBLR1YiLCBvcmlnKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcykKKyAgICAgICAgbmV3ZGVwcyA9IHt9CisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIG5ld2RlcHNbc2VsZi5tYXBfZGVwZW5kcyhkZXApXSA9IGRlcHNbZGVwXQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIodmFybmFtZSwgYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHMsIEZhbHNlKS5yZXBsYWNlKCJFWFRFTkRQS0dWIiwgIiR7RVhURU5EUEtHVn0iKSkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRVhURU5EUEtHViIsIG9yaWcpCisKKyAgICBkZWYgbWFwX3BhY2thZ2V2YXJzKHNlbGYpOgorICAgICAgICBmb3IgcGtnIGluIChzZWxmLmQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkgKyBbIiJdKToKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJERVBFTkRTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUlJFQ09NTUVORFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSU1VHR0VTVFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSUFJPVklERVMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSUkVQTEFDRVMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSQ09ORkxJQ1RTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUEtHIiwgcGtnKQorCisgICAgZGVmIHJlbmFtZV9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgZm9yIHBrZyBpbiAoc2VsZi5kLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICAgICBzZWxmLnBrZ3NfbWFwcGluZy5hcHBlbmQoW3BrZy5zcGxpdChzZWxmLmV4dG5hbWUgKyAiLSIpWzFdLCBwa2ddKQorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYucGtnc19tYXBwaW5nLmFwcGVuZChbcGtnLCBzZWxmLmV4dGVuZF9uYW1lKHBrZyldKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBBQ0tBR0VTIiwgIiAiLmpvaW4oW3Jvd1sxXSBmb3Igcm93IGluIHNlbGYucGtnc19tYXBwaW5nXSkpCisKKyAgICBkZWYgcmVuYW1lX3BhY2thZ2VfdmFyaWFibGVzKHNlbGYsIHZhcmlhYmxlcyk6CisgICAgICAgIGZvciBwa2dfbWFwcGluZyBpbiBzZWxmLnBrZ3NfbWFwcGluZzoKKyAgICAgICAgICAgIGZvciBzdWJzIGluIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICBzZWxmLmQucmVuYW1lVmFyKCIlc18lcyIgJSAoc3VicywgcGtnX21hcHBpbmdbMF0pLCAiJXNfJXMiICUgKHN1YnMsIHBrZ19tYXBwaW5nWzFdKSkKKworY2xhc3MgTmF0aXZlc2RrQ2xhc3NFeHRlbmRlcihDbGFzc0V4dGVuZGVyKToKKyAgICBkZWYgbWFwX2RlcGVuZHMoc2VsZiwgZGVwKToKKyAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBkZXAKKyAgICAgICAgaWYgZGVwLmVuZHN3aXRoKCgiLWdjYy1pbml0aWFsIiwgIi1nY2MiLCAiLWcrKyIpKToKKyAgICAgICAgICAgIHJldHVybiBkZXAgKyAiLWNyb3Nzc2RrIgorICAgICAgICBlbGlmIGRlcC5lbmRzd2l0aCgoIi1uYXRpdmUiLCAiLW5hdGl2ZS1ydW50aW1lIikpIG9yICgnbmF0aXZlc2RrLScgaW4gZGVwKSBvciAoJy1jcm9zcy0nIGluIGRlcCkgb3IgKCctY3Jvc3NzZGstJyBpbiBkZXApOgorICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0ZW5kX25hbWUoZGVwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTg4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2NsYXNzdXRpbHMucHkKQEAgLTAsMCArMSw0MyBAQAorY2xhc3MgQ2xhc3NSZWdpc3RyeSh0eXBlKToKKyAgICAiIiJNYWludGFpbiBhIHJlZ2lzdHJ5IG9mIGNsYXNzZXMsIGluZGV4ZWQgYnkgbmFtZS4KKworTm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhhdCB0aGUgbmFtZXMgYmUgdW5pcXVlLCBhcyBpdCB1c2VzCithIGRpY3Rpb25hcnkgdG8gaG9sZCB0aGUgY2xhc3NlcyBieSBuYW1lLgorCitUaGUgbmFtZSBpbiB0aGUgcmVnaXN0cnkgY2FuIGJlIG92ZXJyaWRkZW4gdmlhIHRoZSAnbmFtZScgYXR0cmlidXRlIG9mIHRoZQorY2xhc3MsIGFuZCB0aGUgJ3ByaW9yaXR5JyBhdHRyaWJ1dGUgY29udHJvbHMgcHJpb3JpdHkuIFRoZSBwcmlvcml0aXplZCgpCittZXRob2QgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBjbGFzc2VzIGluIHByaW9yaXR5IG9yZGVyLgorCitTdWJjbGFzc2VzIG9mIENsYXNzUmVnaXN0cnkgbWF5IGRlZmluZSBhbiAnaW1wbGVtZW50ZWQnIHByb3BlcnR5IHRvIGV4ZXJ0Citjb250cm9sIG92ZXIgd2hldGhlciB0aGUgY2xhc3Mgd2lsbCBiZSBhZGRlZCB0byB0aGUgcmVnaXN0cnkgKGUuZy4gdG8ga2VlcAorYWJzdHJhY3QgYmFzZSBjbGFzc2VzIG91dCBvZiB0aGUgcmVnaXN0cnkpLiIiIgorICAgIHByaW9yaXR5ID0gMAorICAgIGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6CisgICAgICAgICIiIkdpdmUgZWFjaCBDbGFzc1JlZ2lzdHJ5IHRoZWlyIG93biByZWdpc3RyeSIiIgorICAgICAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICAgICAgY2xzLnJlZ2lzdHJ5ID0ge30KKyAgICAgICAgICAgIHR5cGUuX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpCisKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICBzdXBlcihDbGFzc1JlZ2lzdHJ5LCBjbHMpLl9faW5pdF9fKG5hbWUsIGJhc2VzLCBhdHRycykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGNscy5pbXBsZW1lbnRlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNscy5uYW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGNscy5uYW1lID0gbmFtZQorICAgICAgICBjbHMucmVnaXN0cnlbY2xzLm5hbWVdID0gY2xzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcHJpb3JpdGl6ZWQodGNscyk6CisgICAgICAgIHJldHVybiBzb3J0ZWQodGNscy5yZWdpc3RyeS52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZXk9bGFtYmRhIHY6IHYucHJpb3JpdHksIHJldmVyc2U9VHJ1ZSkKKworICAgIGRlZiB1bnJlZ2lzdGVyKGNscyk6CisgICAgICAgIGZvciBrZXkgaW4gY2xzLnJlZ2lzdHJ5LmtleXMoKToKKyAgICAgICAgICAgIGlmIGNscy5yZWdpc3RyeVtrZXldIGlzIGNsczoKKyAgICAgICAgICAgICAgICBkZWwgY2xzLnJlZ2lzdHJ5W2tleV0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk1NzhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5CkBAIC0wLDAgKzEsMTAxIEBACisjIFRoaXMgY2xhc3Mgc2hvdWxkIHByb3ZpZGUgZWFzeSBhY2Nlc3MgdG8gdGhlIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZQorIyBidWlsZHN5c3RlbSBzdWNoIGFzIGxheWVycywgYml0YmFrZSBsb2NhdGlvbiwgZXRjLgoraW1wb3J0IHN0YXQKK2ltcG9ydCBzaHV0aWwKKworZGVmIF9zbWFydF9jb3B5KHNyYywgZGVzdCk6CisgICAgIyBzbWFydF9jb3B5IHdpbGwgY2hvb3NlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgICMgc291cmNlIGlzIGEgZmlsZSBvciBhIGRpcmVjdG9yeS4KKyAgICBtb2RlID0gb3Muc3RhdChzcmMpLnN0X21vZGUKKyAgICBpZiBzdGF0LlNfSVNESVIobW9kZSk6CisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmMsIGRlc3QsIHN5bWxpbmtzPVRydWUpCisgICAgZWxzZToKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZGVzdCkKKyAgICAgICAgc2h1dGlsLmNvcHltb2RlKHNyYywgZGVzdCkKKworY2xhc3MgQnVpbGRTeXN0ZW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5sYXllcmRpcnMgPSBkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICBkZWYgY29weV9iaXRiYWtlX2FuZF9sYXllcnMoc2VsZiwgZGVzdGRpcik6CisgICAgICAgICMgQ29weSBpbiBhbGwgbWV0YWRhdGEgbGF5ZXJzICsgYml0YmFrZSAoYXMgcmVwb3NpdG9yaWVzKQorICAgICAgICBsYXllcnNfY29waWVkID0gW10KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RkaXIpCisgICAgICAgIGxheWVycyA9IGxpc3Qoc2VsZi5sYXllcmRpcnMpCisKKyAgICAgICAgY29yZWJhc2UgPSBzZWxmLmQuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpCisgICAgICAgIGxheWVycy5hcHBlbmQoY29yZWJhc2UpCisKKyAgICAgICAgY29yZWJhc2VfZmlsZXMgPSBzZWxmLmQuZ2V0VmFyKCdDT1JFQkFTRV9GSUxFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgY29yZWJhc2VfZmlsZXMgPSBbY29yZWJhc2UgKyAnLycgK3ggZm9yIHggaW4gY29yZWJhc2VfZmlsZXNdCisgICAgICAgICMgTWFrZSBzdXJlIGJpdGJha2UgZ29lcyBpbgorICAgICAgICBiaXRiYWtlX2RpciA9IGJiLl9fZmlsZV9fLnJzcGxpdCgnLycsIDMpWzBdCisgICAgICAgIGNvcmViYXNlX2ZpbGVzLmFwcGVuZChiaXRiYWtlX2RpcikKKworICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgbGF5ZXJjb25mID0gb3MucGF0aC5qb2luKGxheWVyLCAnY29uZicsICdsYXllci5jb25mJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxheWVyY29uZik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyY29uZiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBpZiBmLnJlYWRsaW5lKCkuc3RhcnRzd2l0aCgiIyAjIyMgd29ya3NwYWNlIGxheWVyIGF1dG8tZ2VuZXJhdGVkIGJ5IGRldnRvb2wgIyMjIik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJTa2lwcGluZyBsb2NhbCB3b3Jrc3BhY2UgbGF5ZXIgJXMiICUgbGF5ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIElmIHRoZSBsYXllciB3YXMgYWxyZWFkeSB1bmRlciBjb3JlYmFzZSwgbGVhdmUgaXQgdGhlcmUKKyAgICAgICAgICAgICMgc2luY2UgbGF5ZXJzIHN1Y2ggYXMgbWV0YSBoYXZlIGlzc3VlcyB3aGVuIG1vdmVkLgorICAgICAgICAgICAgbGF5ZXJkZXN0cGF0aCA9IGRlc3RkaXIKKyAgICAgICAgICAgIGlmIGNvcmViYXNlID09IG9zLnBhdGguZGlybmFtZShsYXllcik6CisgICAgICAgICAgICAgICAgbGF5ZXJkZXN0cGF0aCArPSAnLycgKyBvcy5wYXRoLmJhc2VuYW1lKGNvcmViYXNlKQorICAgICAgICAgICAgbGF5ZXJkZXN0cGF0aCArPSAnLycgKyBvcy5wYXRoLmJhc2VuYW1lKGxheWVyKQorCisgICAgICAgICAgICBsYXllcl9yZWxhdGl2ZSA9IG9zLnBhdGgucmVscGF0aChsYXllcmRlc3RwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGRpcikKKyAgICAgICAgICAgIGxheWVyc19jb3BpZWQuYXBwZW5kKGxheWVyX3JlbGF0aXZlKQorCisgICAgICAgICAgICAjIFRyZWF0IGNvcmViYXNlIGFzIHNwZWNpYWwgc2luY2UgaXQgdHlwaWNhbGx5IHdpbGwgY29udGFpbgorICAgICAgICAgICAgIyBidWlsZCBkaXJlY3RvcmllcyBvciBvdGhlciBjdXN0b20gaXRlbXMuCisgICAgICAgICAgICBpZiBjb3JlYmFzZSA9PSBsYXllcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobGF5ZXJkZXN0cGF0aCkKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBjb3JlYmFzZV9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgZl9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZikKKyAgICAgICAgICAgICAgICAgICAgZGVzdG5hbWUgPSBvcy5wYXRoLmpvaW4obGF5ZXJkZXN0cGF0aCwgZl9iYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgX3NtYXJ0X2NvcHkoZiwgZGVzdG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxheWVyZGVzdHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJTa2lwcGluZyBsYXllciAlcywgYWxyZWFkeSBoYW5kbGVkIiAlIGxheWVyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF9zbWFydF9jb3B5KGxheWVyLCBsYXllcmRlc3RwYXRoKQorCisgICAgICAgIHJldHVybiBsYXllcnNfY29waWVkCisKK2RlZiBnZW5lcmF0ZV9sb2NrZWRfc2lncyhzaWdmaWxlLCBkKToKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHNpZ2ZpbGUpKQorICAgIGRlcGQgPSBkLmdldFZhcignQkJfVEFTS0RFUERBVEEnLCBUcnVlKQorICAgIHRhc2tzID0gWyclcy4lcycgJSAodlsyXSwgdlsxXSkgZm9yIHYgaW4gZGVwZC5pdGVydmFsdWVzKCldCisgICAgYmIucGFyc2Uuc2lnZ2VuLmR1bXBfbG9ja2Vkc2lncyhzaWdmaWxlLCB0YXNrcykKKworZGVmIHBydW5lX2xvY2tlZHNpZ3MoYWxsb3dlZF90YXNrcywgZXhjbHVkZWRfdGFyZ2V0cywgbG9ja2Vkc2lncywgcHJ1bmVkX291dHB1dCk6CisgICAgd2l0aCBvcGVuKGxvY2tlZHNpZ3MsICdyJykgYXMgaW5maWxlOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHBydW5lZF9vdXRwdXQpKQorICAgICAgICB3aXRoIG9wZW4ocHJ1bmVkX291dHB1dCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgaW52YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgbGluZSBpbiBpbmZpbGU6CisgICAgICAgICAgICAgICAgaWYgaW52YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgnXFxcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXR2YWxbMV0gaW4gYWxsb3dlZF90YXNrcyBhbmQgbm90IHNwbGl0dmFsWzBdIGluIGV4Y2x1ZGVkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgaW52YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NJR0dFTl9MT0NLRURTSUdTJyk6CisgICAgICAgICAgICAgICAgICAgIGludmFsdWUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKworZGVmIGNyZWF0ZV9sb2NrZWRfc3N0YXRlX2NhY2hlKGxvY2tlZHNpZ3MsIGlucHV0X3NzdGF0ZV9jYWNoZSwgb3V0cHV0X3NzdGF0ZV9jYWNoZSwgZCwgZml4ZWRsc2JzdHJpbmc9IiIpOgorICAgIGJiLm5vdGUoJ0dlbmVyYXRpbmcgc3N0YXRlLWNhY2hlLi4uJykKKworICAgIGJiLnByb2Nlc3MucnVuKCJnZW4tbG9ja2Vkc2lnLWNhY2hlICVzICVzICVzIiAlIChsb2NrZWRzaWdzLCBpbnB1dF9zc3RhdGVfY2FjaGUsIG91dHB1dF9zc3RhdGVfY2FjaGUpKQorICAgIGlmIGZpeGVkbHNic3RyaW5nOgorICAgICAgICBvcy5yZW5hbWUob3V0cHV0X3NzdGF0ZV9jYWNoZSArICcvJyArIGQuZ2V0VmFyKCdOQVRJVkVMU0JTVFJJTkcnLCBUcnVlKSwKKyAgICAgICAgb3V0cHV0X3NzdGF0ZV9jYWNoZSArICcvJyArIGZpeGVkbHNic3RyaW5nKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kYXRhLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzBlMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2RhdGEucHkKQEAgLTAsMCArMSwxNyBAQAoraW1wb3J0IG9lLm1ha2V0eXBlCisKK2RlZiB0eXBlZF92YWx1ZShrZXksIGQpOgorICAgICIiIkNvbnN0cnVjdCBhIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIG1ldGFkYXRhIHZhcmlhYmxlLCB1c2luZyBpdHMgZmxhZ3MKKyAgICB0byBkZXRlcm1pbmUgdGhlIHR5cGUgYW5kIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGlvbi4iIiIKKyAgICB2YXJfdHlwZSA9IGQuZ2V0VmFyRmxhZyhrZXksICd0eXBlJykKKyAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZ3Moa2V5KQorICAgIGlmIGZsYWdzIGlzIG5vdCBOb25lOgorICAgICAgICBmbGFncyA9IGRpY3QoKGZsYWcsIGQuZXhwYW5kKHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgIGZvciBmbGFnLCB2YWx1ZSBpbiBmbGFncy5pdGVyaXRlbXMoKSkKKyAgICBlbHNlOgorICAgICAgICBmbGFncyA9IHt9CisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBvZS5tYWtldHlwZS5jcmVhdGUoZC5nZXRWYXIoa2V5LCBUcnVlKSBvciAnJywgdmFyX3R5cGUsICoqZmxhZ3MpCisgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpLCBleGM6CisgICAgICAgIGJiLm1zZy5mYXRhbCgiRGF0YSIsICIlczogJXMiICUgKGtleSwgc3RyKGV4YykpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kaXN0cm9fY2hlY2sucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ1YjBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9kaXN0cm9fY2hlY2sucHkKQEAgLTAsMCArMSwzODMgQEAKK2RlZiBnZXRfbGlua3NfZnJvbV91cmwodXJsKToKKyAgICAiUmV0dXJuIGFsbCB0aGUgaHJlZiBsaW5rcyBmb3VuZCBvbiB0aGUgd2ViIGxvY2F0aW9uIgorCisgICAgaW1wb3J0IHVybGxpYiwgc2dtbGxpYgorICAgIAorICAgIGNsYXNzIExpbmtzUGFyc2VyKHNnbWxsaWIuU0dNTFBhcnNlcik6CisgICAgICAgIGRlZiBwYXJzZShzZWxmLCBzKToKKyAgICAgICAgICAgICJQYXJzZSB0aGUgZ2l2ZW4gc3RyaW5nICdzJy4iCisgICAgICAgICAgICBzZWxmLmZlZWQocykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgIAorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmVyYm9zZT0wKToKKyAgICAgICAgICAgICJJbml0aWFsaXNlIGFuIG9iamVjdCBwYXNzaW5nICd2ZXJib3NlJyB0byB0aGUgc3VwZXJjbGFzcy4iCisgICAgICAgICAgICBzZ21sbGliLlNHTUxQYXJzZXIuX19pbml0X18oc2VsZiwgdmVyYm9zZSkKKyAgICAgICAgICAgIHNlbGYuaHlwZXJsaW5rcyA9IFtdCisgICAgCisgICAgICAgIGRlZiBzdGFydF9hKHNlbGYsIGF0dHJpYnV0ZXMpOgorICAgICAgICAgICAgIlByb2Nlc3MgYSBoeXBlcmxpbmsgYW5kIGl0cyAnYXR0cmlidXRlcycuIgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiaHJlZiI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaHlwZXJsaW5rcy5hcHBlbmQodmFsdWUuc3RyaXAoJy8nKSkKKyAgICAKKyAgICAgICAgZGVmIGdldF9oeXBlcmxpbmtzKHNlbGYpOgorICAgICAgICAgICAgIlJldHVybiB0aGUgbGlzdCBvZiBoeXBlcmxpbmtzLiIKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmh5cGVybGlua3MKKworICAgIHNvY2sgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgd2VicGFnZSA9IHNvY2sucmVhZCgpCisgICAgc29jay5jbG9zZSgpCisKKyAgICBsaW5rc3BhcnNlciA9IExpbmtzUGFyc2VyKCkKKyAgICBsaW5rc3BhcnNlci5wYXJzZSh3ZWJwYWdlKQorICAgIHJldHVybiBsaW5rc3BhcnNlci5nZXRfaHlwZXJsaW5rcygpCisKK2RlZiBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UodXJsKToKKyAgICAiRmluZCB0aGUgbGF0ZXN0IGxpc3RlZCBudW1lcmljIHJlbGVhc2Ugb24gdGhlIGdpdmVuIHVybCIKKyAgICBtYXg9MAorICAgIG1heHN0cj0iIgorICAgIGZvciBsaW5rIGluIGdldF9saW5rc19mcm9tX3VybCh1cmwpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWxlYXNlID0gZmxvYXQobGluaykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmVsZWFzZSA9IDAKKyAgICAgICAgaWYgcmVsZWFzZSA+IG1heDoKKyAgICAgICAgICAgIG1heCA9IHJlbGVhc2UKKyAgICAgICAgICAgIG1heHN0ciA9IGxpbmsKKyAgICByZXR1cm4gbWF4c3RyCisKK2RlZiBpc19zcmNfcnBtKG5hbWUpOgorICAgICJDaGVjayBpZiB0aGUgbGluayBpcyBwb2ludGluZyB0byBhIHNyYy5ycG0gZmlsZSIKKyAgICBpZiBuYW1lWy04Ol0gPT0gIi5zcmMucnBtIjoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIHBhY2thZ2VfbmFtZV9mcm9tX3NycG0oc3JwbSk6CisgICAgIlN0cmlwIG91dCB0aGUgcGFja2FnZSBuYW1lIGZyb20gdGhlIHNyYy5ycG0gZmlsZW5hbWUiCisgICAgc3RyaW5ncyA9IHNycG0uc3BsaXQoJy0nKQorICAgIHBhY2thZ2VfbmFtZSA9IHN0cmluZ3NbMF0KKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4gKHN0cmluZ3MpIC0gMSk6CisgICAgICAgIHN0ciA9IHN0cmluZ3NbaV0KKyAgICAgICAgaWYgbm90IHN0clswXS5pc2RpZ2l0KCk6CisgICAgICAgICAgICBwYWNrYWdlX25hbWUgKz0gJy0nICsgc3RyCisgICAgcmV0dXJuIHBhY2thZ2VfbmFtZQorCitkZWYgY2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbGlzdCk6CisgICAgIlJlbW92ZXMgbXVsdGlwbGUgZW50cmllcyBvZiBwYWNrYWdlcyBhbmQgc29ydHMgdGhlIGxpc3QiCisgICAgc2V0ID0ge30KKyAgICBtYXAoc2V0Ll9fc2V0aXRlbV9fLCBwYWNrYWdlX2xpc3QsIFtdKQorICAgIHJldHVybiBzZXQua2V5cygpCisKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfbWVlZ29fc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgbWVlZ28gZGlzdHJvIgorCisgICAgcGFja2FnZV9uYW1lcyA9IFtdCisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbigiL3RtcC9NZWVnby0xLjEiLCAiciIpCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBwYWNrYWdlX25hbWVzLmFwcGVuZChsaW5lWzotMV0gKyAiOiIgKyAibWFpbiIpICMgQWxzbyBzdHJpcCB0aGUgJ1xuJyBhdCB0aGUgZW5kCisgICAgZXhjZXB0IElPRXJyb3I6IHBhc3MKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuICIxLjAiLCBwYWNrYWdlX2xpc3QKKworZGVmIGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKHVybCwgc2VjdGlvbik6CisgICAgIlJldHVybiBhIHNlY3Rpb25lZCBsaXN0IG9mIHBhY2thZ2UgbmFtZXMgZnJvbSBhIFVSTCBsaXN0IgorCisgICAgYmIubm90ZSgiUmVhZGluZyAlczogJXMiICUgKHVybCwgc2VjdGlvbikpCisgICAgbGlua3MgPSBnZXRfbGlua3NfZnJvbV91cmwodXJsKQorICAgIHNycG1zID0gZmlsdGVyKGlzX3NyY19ycG0sIGxpbmtzKQorICAgIG5hbWVzX2xpc3QgPSBtYXAocGFja2FnZV9uYW1lX2Zyb21fc3JwbSwgc3JwbXMpCisKKyAgICBuZXdfcGtncyA9IFtdCisgICAgZm9yIHBrZ3MgaW4gbmFtZXNfbGlzdDoKKyAgICAgICBuZXdfcGtncy5hcHBlbmQocGtncyArICI6IiArIHNlY3Rpb24pCisKKyAgICByZXR1cm4gbmV3X3BrZ3MKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfZmVkb3JhX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IGZlZG9yYSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfbnVtZXJpY19yZWxlYXNlKCJodHRwOi8vYXJjaGl2ZS5mZWRvcmFwcm9qZWN0Lm9yZy9wdWIvZmVkb3JhL2xpbnV4L3JlbGVhc2VzLyIpCisKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9hcmNoaXZlLmZlZG9yYXByb2plY3Qub3JnL3B1Yi9mZWRvcmEvbGludXgvcmVsZWFzZXMvJXMvRmVkb3JhL3NvdXJjZS9TUlBNUy8iICUgbGF0ZXN0LCAibWFpbiIpCisKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rvd25sb2FkLmZlZG9yYS5yZWRoYXQuY29tL3B1Yi9mZWRvcmEvbGludXgvcmVsZWFzZXMvJXMvRXZlcnl0aGluZy9zb3VyY2UvU1BSTVMvIiAlIGxhdGVzdCwgImV2ZXJ5dGhpbmciKQorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9hcmNoaXZlLmZlZG9yYXByb2plY3Qub3JnL3B1Yi9mZWRvcmEvbGludXgvdXBkYXRlcy8lcy9TUlBNUy8iICUgbGF0ZXN0LCAidXBkYXRlcyIpCisKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgICAgIAorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9vcGVuc3VzZV9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBvcGVuc3VzZSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfbnVtZXJpY19yZWxlYXNlKCJodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3NvdXJjZS9kaXN0cmlidXRpb24vIikKKworICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy9zb3VyY2UvZGlzdHJpYnV0aW9uLyVzL3JlcG8vb3NzL3N1c2Uvc3JjLyIgJSBsYXRlc3QsICJtYWluIikKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3VwZGF0ZS8lcy9ycG0vc3JjLyIgJSBsYXRlc3QsICJ1cGRhdGVzIikKKworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfbWFuZHJpdmFfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgbWFuZHJpdmEgZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSgiaHR0cDovL2Rpc3RyaWItY29mZmVlLmlwc2wuanVzc2lldS5mci9wdWIvbGludXgvTWFuZHJpdmFMaW51eC9vZmZpY2lhbC8iKQorICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rpc3RyaWItY29mZmVlLmlwc2wuanVzc2lldS5mci9wdWIvbGludXgvTWFuZHJpdmFMaW51eC9vZmZpY2lhbC8lcy9TUlBNUy9tYWluL3JlbGVhc2UvIiAlIGxhdGVzdCwgIm1haW4iKQorIyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL2NvbnRyaWIvcmVsZWFzZS8iICUgbGF0ZXN0LCAiY29udHJpYiIpCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rpc3RyaWItY29mZmVlLmlwc2wuanVzc2lldS5mci9wdWIvbGludXgvTWFuZHJpdmFMaW51eC9vZmZpY2lhbC8lcy9TUlBNUy9tYWluL3VwZGF0ZXMvIiAlIGxhdGVzdCwgInVwZGF0ZXMiKQorCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgZmluZF9sYXRlc3RfZGViaWFuX3JlbGVhc2UodXJsKToKKyAgICAiRmluZCB0aGUgbGF0ZXN0IGxpc3RlZCBkZWJpYW4gcmVsZWFzZSBvbiB0aGUgZ2l2ZW4gdXJsIgorCisgICAgcmVsZWFzZXMgPSBbXQorICAgIGZvciBsaW5rIGluIGdldF9saW5rc19mcm9tX3VybCh1cmwpOgorICAgICAgICBpZiBsaW5rWzo2XSA9PSAiRGViaWFuIjoKKyAgICAgICAgICAgIGlmICc7JyBub3QgaW4gbGluazoKKyAgICAgICAgICAgICAgICByZWxlYXNlcy5hcHBlbmQobGluaykKKyAgICByZWxlYXNlcy5zb3J0KCkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiByZWxlYXNlcy5wb3AoKVs2Ol0KKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiAiX05vdEZvdW5kXyIKKworZGVmIGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsIHNlY3Rpb24pOgorICAgICJSZXR1cm4gdGhlIGxpc3Qgb2YgcGFja2FnZS1uYW1lcyBzdG9yZWQgaW4gdGhlIGRlYmlhbiBzdHlsZSBTb3VyY2VzLmd6IGZpbGUiCisgICAgaW1wb3J0IHVybGxpYgorICAgIHNvY2sgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgdG1wZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3YicsIHByZWZpeD0nb2Vjb3JlLicsIHN1ZmZpeD0nLnRtcCcsIGRlbGV0ZT1GYWxzZSkKKyAgICB0bXBmaWxlbmFtZT10bXBmaWxlLm5hbWUKKyAgICB0bXBmaWxlLndyaXRlKHNvY2sucmVhZCgpKQorICAgIHNvY2suY2xvc2UoKQorICAgIHRtcGZpbGUuY2xvc2UoKQorICAgIGltcG9ydCBnemlwCisgICAgYmIubm90ZSgiUmVhZGluZyAlczogJXMiICUgKHVybCwgc2VjdGlvbikpCisKKyAgICBmID0gZ3ppcC5vcGVuKHRtcGZpbGVuYW1lKQorICAgIHBhY2thZ2VfbmFtZXMgPSBbXQorICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgIGlmIGxpbmVbOjldID09ICJQYWNrYWdlOiAiOgorICAgICAgICAgICAgcGFja2FnZV9uYW1lcy5hcHBlbmQobGluZVs5Oi0xXSArICI6IiArIHNlY3Rpb24pICMgQWxzbyBzdHJpcCB0aGUgJ1xuJyBhdCB0aGUgZW5kCisgICAgb3MudW5saW5rKHRtcGZpbGVuYW1lKQorCisgICAgcmV0dXJuIHBhY2thZ2VfbmFtZXMKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfZGViaWFuX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IGRlYmlhbiBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfZGViaWFuX3JlbGVhc2UoImh0dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vZGlzdHMvIikKKyAgICB1cmwgPSAiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy9zdGFibGUvbWFpbi9zb3VyY2UvU291cmNlcy5neiIgCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJtYWluIikKKyMgICAgdXJsID0gImh0dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vZGlzdHMvc3RhYmxlL2NvbnRyaWIvc291cmNlL1NvdXJjZXMuZ3oiIAorIyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJjb250cmliIikKKyAgICB1cmwgPSAiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy9zdGFibGUtcHJvcG9zZWQtdXBkYXRlcy9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJ1cGRhdGVzIikKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBmaW5kX2xhdGVzdF91YnVudHVfcmVsZWFzZSh1cmwpOgorICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIHVidW50dSByZWxlYXNlIG9uIHRoZSBnaXZlbiB1cmwiCisgICAgdXJsICs9ICI/Qz1NO089RCIgIyBEZXNjZW5kaW5nIFNvcnQgYnkgTGFzdCBNb2RpZmllZAorICAgIGZvciBsaW5rIGluIGdldF9saW5rc19mcm9tX3VybCh1cmwpOgorICAgICAgICBpZiBsaW5rWy04Ol0gPT0gIi11cGRhdGVzIjoKKyAgICAgICAgICAgIHJldHVybiBsaW5rWzotOF0KKyAgICByZXR1cm4gIl9Ob3RGb3VuZF8iCisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX3VidW50dV9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCB1YnVudHUgZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X3VidW50dV9yZWxlYXNlKCJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9kaXN0cy8iKQorICAgIHVybCA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9kaXN0cy8lcy9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAlIGxhdGVzdAorICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAibWFpbiIpCisjICAgIHVybCA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9kaXN0cy8lcy9tdWx0aXZlcnNlL3NvdXJjZS9Tb3VyY2VzLmd6IiAlIGxhdGVzdAorIyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJtdWx0aXZlcnNlIikKKyMgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzL3VuaXZlcnNlL3NvdXJjZS9Tb3VyY2VzLmd6IiAlIGxhdGVzdAorIyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJ1bml2ZXJzZSIpCisgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzLXVwZGF0ZXMvbWFpbi9zb3VyY2UvU291cmNlcy5neiIgJSBsYXRlc3QKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJ1cGRhdGVzIikKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBjcmVhdGVfZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2Rpcik6CisgICAgcGtnbHN0X2RpciA9IG9zLnBhdGguam9pbihkaXN0cm9fY2hlY2tfZGlyLCAicGFja2FnZV9saXN0cyIpCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIgKHBrZ2xzdF9kaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhwa2dsc3RfZGlyKQorICAgICMgZmlyc3QgY2xlYXIgb2xkIHN0dWZmCisgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihwa2dsc3RfZGlyKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihwa2dsc3RfZGlyLCBmaWxlKSkKKyAKKyAgICBwZXJfZGlzdHJvX2Z1bmN0aW9ucyA9IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIkRlYmlhbiIsIGdldF9sYXRlc3RfcmVsZWFzZWRfZGViaWFuX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiVWJ1bnR1IiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF91YnVudHVfc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJGZWRvcmEiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX2ZlZG9yYV9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk9wZW5TdVNFIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9vcGVuc3VzZV9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk1hbmRyaXZhIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tYW5kcml2YV9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk1lZWdvIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tZWVnb19zb3VyY2VfcGFja2FnZV9saXN0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorIAorICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisgICAgYmVnaW4gPSBkYXRldGltZS5ub3coKQorICAgIGZvciBkaXN0cm8gaW4gcGVyX2Rpc3Ryb19mdW5jdGlvbnM6CisgICAgICAgIG5hbWUgPSBkaXN0cm9bMF0KKyAgICAgICAgcmVsZWFzZSwgcGFja2FnZV9saXN0ID0gZGlzdHJvWzFdKCkKKyAgICAgICAgYmIubm90ZSgiRGlzdHJvOiAlcywgTGF0ZXN0IFJlbGVhc2U6ICVzLCAjIHNyYyBwYWNrYWdlczogJWQiICUgKG5hbWUsIHJlbGVhc2UsIGxlbihwYWNrYWdlX2xpc3QpKSkKKyAgICAgICAgcGFja2FnZV9saXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnbHN0X2RpciwgbmFtZSArICItIiArIHJlbGVhc2UpCisgICAgICAgIGYgPSBvcGVuKHBhY2thZ2VfbGlzdF9maWxlLCAidytiIikKKyAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlX2xpc3Q6CisgICAgICAgICAgICBmLndyaXRlKHBrZyArICJcbiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgIGVuZCA9IGRhdGV0aW1lLm5vdygpCisgICAgZGVsdGEgPSBlbmQgLSBiZWdpbgorICAgIGJiLm5vdGUoInBhY2thZ2VfbGlzdCBnZW5lcmF0aW9zbiB0b29rIHRoaXMgbXVjaCB0aW1lOiAlZCBzZWNvbmRzIiAlIGRlbHRhLnNlY29uZHMpCisKK2RlZiB1cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpOgorICAgICIiIgorICAgICAgICBJZiBkaXN0cm8gcGFja2FnZXMgbGlzdCBkYXRhIGlzIG9sZCB0aGVuIHJlYnVpbGQgaXQuCisgICAgICAgIFRoZSBvcGVyYXRpb25zIGhhcyB0byBiZSBwcm90ZWN0ZWQgYnkgYSBsb2NrIHNvIHRoYXQKKyAgICAgICAgb25seSBvbmUgdGhyZWFkIHBlcmZvcm1lcyBpdCBhdCBhIHRpbWUuCisgICAgIiIiCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIgKGRpc3Ryb19jaGVja19kaXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlICgiTWFraW5nIG5ldyBkaXJlY3Rvcnk6ICVzIiAlIGRpc3Ryb19jaGVja19kaXIpCisgICAgICAgICAgICBvcy5tYWtlZGlycyAoZGlzdHJvX2NoZWNrX2RpcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5ICVzJyAlIChkaXN0cm9fY2hlY2tfZGlyKSkKKworCisgICAgZGF0ZXRpbWVfZmlsZSA9IG9zLnBhdGguam9pbihkaXN0cm9fY2hlY2tfZGlyLCAiYnVpbGRfZGF0ZXRpbWUiKQorICAgIHNhdmVkX2RhdGV0aW1lID0gIl9pbnZhbGlkXyIKKyAgICBpbXBvcnQgZmNudGwKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkYXRldGltZV9maWxlKToKKyAgICAgICAgICAgIG9wZW4oZGF0ZXRpbWVfZmlsZSwgJ3crYicpLmNsb3NlKCkgIyB0b3VjaCB0aGUgZmlsZSBzbyB0aGF0IHRoZSBuZXh0IG9wZW4gd29uJ3QgZmFpbAorCisgICAgICAgIGYgPSBvcGVuKGRhdGV0aW1lX2ZpbGUsICJyK2IiKQorICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYKQorICAgICAgICBzYXZlZF9kYXRldGltZSA9IGYucmVhZCgpCisgICAgICAgIGlmIHNhdmVkX2RhdGV0aW1lWzA6OF0gIT0gZGF0ZXRpbWVbMDo4XToKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZSBidWlsZCBkYXRldGltZSBkaWQgbm90IG1hdGNoOiBzYXZlZDolcyBjdXJyZW50OiVzIiAlIChzYXZlZF9kYXRldGltZSwgZGF0ZXRpbWUpKQorICAgICAgICAgICAgYmIubm90ZSgiUmVnZW5lcmF0aW5nIGRpc3RybyBwYWNrYWdlIGxpc3RzIikKKyAgICAgICAgICAgIGNyZWF0ZV9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBmLndyaXRlKGRhdGV0aW1lKQorCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5hYmxlIHRvIHJlYWQvd3JpdGUgdGhpcyBmaWxlOiAlcycgJSAoZGF0ZXRpbWVfZmlsZSkpCisgICAgZmluYWxseToKKyAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKKyAgICAgICAgZi5jbG9zZSgpCisgCitkZWYgY29tcGFyZV9pbl9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyLCBkKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkaXN0cm9fY2hlY2tfZGlyKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJjb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0OiBpbnZhbGlkIGRpc3Ryb19jaGVja19kaXIgcGFzc2VkIikKKyAgICAgICAgCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgcGtnbHN0X2RpciA9IG9zLnBhdGguam9pbihkaXN0cm9fY2hlY2tfZGlyLCAicGFja2FnZV9saXN0cyIpCisgICAgbWF0Y2hpbmdfZGlzdHJvcyA9IFtdCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIHJlY2lwZV9uYW1lID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCJDaGVja2luZzogJXMiICUgcG4pCisKKyAgICB0cmltX2RpY3QgPSBkaWN0KHsiLW5hdGl2ZSI6Ii1uYXRpdmUiLCAiLWNyb3NzIjoiLWNyb3NzIiwgIi1pbml0aWFsIjoiLWluaXRpYWwifSkKKworICAgIGlmIHBuLmZpbmQoIi1uYXRpdmUiKSAhPSAtMToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItbmF0aXZlIikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgcmVjaXBlX25hbWUgPSBwbnN0cmlwcGVkWzBdCisKKyAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgibmF0aXZlc2RrLSIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFsxXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHJlY2lwZV9uYW1lID0gcG5zdHJpcHBlZFsxXQorCisgICAgaWYgcG4uZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWNyb3NzIikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgcmVjaXBlX25hbWUgPSBwbnN0cmlwcGVkWzBdCisKKyAgICBpZiBwbi5maW5kKCItaW5pdGlhbCIpICE9IC0xOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1pbml0aWFsIikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgcmVjaXBlX25hbWUgPSBwbnN0cmlwcGVkWzBdCisKKyAgICBiYi5ub3RlKCJSZWNpcGU6ICVzIiAlIHJlY2lwZV9uYW1lKQorICAgIHRtcCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RJU1RST19QTl9BTElBUycsIFRydWUpCisKKyAgICBkaXN0cm9fZXhjZXB0aW9ucyA9IGRpY3QoeyJPRS1Db3JlIjonT0UtQ29yZScsICJPcGVuZWRIYW5kIjonT3BlbmVkSGFuZCcsICJJbnRlbCI6J0ludGVsJywgIlVwc3RyZWFtIjonVXBzdHJlYW0nLCAiV2luZHJpdmVyIjonV2luZHJpdmVyJywgIk9TUERUIjonT1NQRFQgQXBwcm92ZWQnLCAiUG9reSI6J3Bva3knfSkKKworICAgIGlmIHRtcDoKKyAgICAgICAgbGlzdCA9IHRtcC5zcGxpdCgnICcpCisgICAgICAgIGZvciBzdHIgaW4gbGlzdDoKKyAgICAgICAgICAgIGlmIHN0ciBhbmQgc3RyLmZpbmQoIj0iKSA9PSAtMSBhbmQgZGlzdHJvX2V4Y2VwdGlvbnNbc3RyXToKKyAgICAgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChzdHIpCisKKyAgICBkaXN0cm9fcG5fYWxpYXNlcyA9IHt9CisgICAgaWYgdG1wOgorICAgICAgICBsaXN0ID0gdG1wLnNwbGl0KCcgJykKKyAgICAgICAgZm9yIHN0ciBpbiBsaXN0OgorICAgICAgICAgICAgaWYgc3RyLmZpbmQoIj0iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAoZGlzdCwgcG5fYWxpYXMpID0gc3RyLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBkaXN0cm9fcG5fYWxpYXNlc1tkaXN0LnN0cmlwKCkubG93ZXIoKV0gPSBwbl9hbGlhcy5zdHJpcCgpCisgCisgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihwa2dsc3RfZGlyKToKKyAgICAgICAgKGRpc3RybywgZGlzdHJvX3JlbGVhc2UpID0gZmlsZS5zcGxpdCgiLSIpCisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihwa2dsc3RfZGlyLCBmaWxlKSwgInJiIikKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIChwa2csIHNlY3Rpb24pID0gbGluZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBpZiBkaXN0cm8ubG93ZXIoKSBpbiBkaXN0cm9fcG5fYWxpYXNlczoKKyAgICAgICAgICAgICAgICBwbiA9IGRpc3Ryb19wbl9hbGlhc2VzW2Rpc3Ryby5sb3dlcigpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwbiA9IHJlY2lwZV9uYW1lCisgICAgICAgICAgICBpZiBwbiA9PSBwa2c6CisgICAgICAgICAgICAgICAgbWF0Y2hpbmdfZGlzdHJvcy5hcHBlbmQoZGlzdHJvICsgIi0iICsgc2VjdGlvbls6LTFdKSAjIHN0cmlwIHRoZSBcbiBhdCB0aGUgZW5kCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAKKyAgICBpZiB0bXAgIT0gTm9uZToKKwlsaXN0ID0gdG1wLnNwbGl0KCcgJykKKwlmb3IgaXRlbSBpbiBsaXN0OgorICAgICAgICAgICAgbWF0Y2hpbmdfZGlzdHJvcy5hcHBlbmQoaXRlbSkKKyAgICBiYi5ub3RlKCJNYXRjaGluZzogJXMiICUgbWF0Y2hpbmdfZGlzdHJvcykKKyAgICByZXR1cm4gbWF0Y2hpbmdfZGlzdHJvcworCitkZWYgY3JlYXRlX2xvZ19maWxlKGQsIGxvZ25hbWUpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICBsb2dmbiwgbG9nc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dChsb2duYW1lKQorICAgIGxvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgIiVzLiVzJXMiICUgKGxvZ2ZuLCBkLmdldFZhcignREFURVRJTUUnLCBUcnVlKSwgbG9nc3VmZml4KSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9nZmlsZSk6CisgICAgICAgICAgICBzbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCBsb2duYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2xvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2xvZ2ZpbGUpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoInRvdWNoICVzIiAlIGxvZ2ZpbGUsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBvcy5zeW1saW5rKGxvZ2ZpbGUsIHNsb2dmaWxlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0xPR19GSUxFJywgbG9nZmlsZSkKKyAgICByZXR1cm4gbG9nZmlsZQorCisKK2RlZiBzYXZlX2Rpc3Ryb19jaGVja19yZXN1bHQocmVzdWx0LCBkYXRldGltZSwgcmVzdWx0X2ZpbGUsIGQpOgorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsb2dkaXIgPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgaWYgbm90IGxvZ2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIkxPR19ESVIgdmFyaWFibGUgaXMgbm90IGRlZmluZWQsIGNhbid0IHdyaXRlIHRoZSBkaXN0cm9fY2hlY2sgcmVzdWx0cyIpCisgICAgICAgIHJldHVybgorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGxvZ2Rpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKGxvZ2RpcikKKyAgICBsaW5lID0gcG4KKyAgICBmb3IgaSBpbiByZXN1bHQ6CisgICAgICAgIGxpbmUgPSBsaW5lICsgIiwiICsgaQorICAgIGYgPSBvcGVuKHJlc3VsdF9maWxlLCAiYSIpCisgICAgaW1wb3J0IGZjbnRsCisgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19FWCkKKyAgICBmLnNlZWsoMCwgb3MuU0VFS19FTkQpICMgc2VlayB0byB0aGUgZW5kIG9mIGZpbGUKKyAgICBmLndyaXRlKGxpbmUgKyAiXG4iKQorICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfVU4pCisgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL2ltYWdlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9pbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU5YmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9pbWFnZS5weQpAQCAtMCwwICsxLDM4OCBAQAorZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCisKKworZGVmIGdlbmVyYXRlX2ltYWdlKGFyZyk6CisgICAgKHR5cGUsIHN1YmltYWdlcywgY3JlYXRlX2ltZ19jbWQpID0gYXJnCisKKyAgICBiYi5ub3RlKCJSdW5uaW5nIGltYWdlIGNyZWF0aW9uIHNjcmlwdCBmb3IgJXM6ICVzIC4uLiIgJQorICAgICAgICAgICAgKHR5cGUsIGNyZWF0ZV9pbWdfY21kKSkKKworICAgIHRyeToKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY3JlYXRlX2ltZ19jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuKCJFcnJvcjogVGhlIGltYWdlIGNyZWF0aW9uIHNjcmlwdCAnJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBiYi5ub3RlKCJTY3JpcHQgb3V0cHV0OlxuJXMiICUgb3V0cHV0KQorCisgICAgcmV0dXJuIE5vbmUKKworCisiIiIKK1RoaXMgY2xhc3Mgd2lsbCBoZWxwIGNvbXB1dGUgSU1BR0VfRlNUWVBFIGRlcGVuZGVuY2llcyBhbmQgZ3JvdXAgdGhlbSBpbiBiYXRjaGVzCit0aGF0IGNhbiBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbC4KKworVGhlIG5leHQgZXhhbXBsZSBpcyBmb3IgaWxsdXN0cmF0aW9uIHB1cnBvc2VzLCBoaWdobHkgdW5saWtlbHkgdG8gaGFwcGVuIGluIHJlYWwgbGlmZS4KK0l0J3MganVzdCBvbmUgb2YgdGhlIHRlc3QgY2FzZXMgSSB1c2VkIHRvIHRlc3QgdGhlIGFsZ29yaXRobToKKworRm9yOgorSU1BR0VfRlNUWVBFUyA9ICJpMSBpMiBpMyBpNCBpNSIKK0lNQUdFX1RZUEVERVBfaTQgPSAiaTIiCitJTUFHRV9UWVBFREVQX2k1ID0gImk2IGk0IgorSU1BR0VfVFlQRURFUF9pNiA9ICJpNyIKK0lNQUdFX1RZUEVERVBfaTcgPSAiaTIiCisKK1dlIGdldCB0aGUgZm9sbG93aW5nIGxpc3Qgb2YgYmF0Y2hlcyB0aGF0IGNhbiBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbCwgaGF2aW5nIHRoZQorZGVwZW5kZW5jaWVzIHNhdGlzZmllZDoKKworW1snaTEnLCAnaTMnLCAnaTInXSwgWydpNCcsICdpNyddLCBbJ2k2J10sIFsnaTUnXV0KKyIiIgorY2xhc3MgSW1hZ2VEZXBHcmFwaChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmdyYXBoID0gZGljdCgpCisgICAgICAgIHNlbGYuZGVwc19hcnJheSA9IGRpY3QoKQorCisgICAgZGVmIF9jb25zdHJ1Y3RfZGVwX2dyYXBoKHNlbGYsIGltYWdlX2ZzdHlwZXMpOgorICAgICAgICBncmFwaCA9IGRpY3QoKQorCisgICAgICAgIGRlZiBhZGRfbm9kZShub2RlKToKKyAgICAgICAgICAgIGJhc2VfdHlwZSA9IHNlbGYuX2ltYWdlX2Jhc2VfdHlwZShub2RlKQorICAgICAgICAgICAgZGVwcyA9IChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9UWVBFREVQXycgKyBub2RlLCBUcnVlKSBvciAiIikKKyAgICAgICAgICAgIGJhc2VfZGVwcyA9IChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9UWVBFREVQXycgKyBiYXNlX3R5cGUsIFRydWUpIG9yICIiKQorICAgICAgICAgICAgaWYgZGVwcyAhPSAiIiBvciBiYXNlX2RlcHMgIT0gIiI6CisgICAgICAgICAgICAgICAgZ3JhcGhbbm9kZV0gPSBkZXBzCisKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHMuc3BsaXQoKSArIGJhc2VfZGVwcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGVwIGluIGdyYXBoOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX25vZGUoZGVwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBncmFwaFtub2RlXSA9ICIiCisKKyAgICAgICAgZm9yIGZzdHlwZSBpbiBpbWFnZV9mc3R5cGVzOgorICAgICAgICAgICAgYWRkX25vZGUoZnN0eXBlKQorCisgICAgICAgIHJldHVybiBncmFwaAorCisgICAgZGVmIF9jbGVhbl9ncmFwaChzZWxmKToKKyAgICAgICAgIyBMaXZlIGFuZCBWTURLL1ZESSBpbWFnZXMgd2lsbCBiZSBwcm9jZXNzZWQgdmlhIGluaGVyaXRpbmcKKyAgICAgICAgIyBiYmNsYXNzIGFuZCBkb2VzIG5vdCBnZXQgcHJvY2Vzc2VkIGhlcmUuIFJlbW92ZSB0aGVtIGZyb20gdGhlIGZzdHlwZXMKKyAgICAgICAgIyBncmFwaC4gVGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IGFkZGVkLCBzbyBubyB3b3JyaWVzIGhlcmUuCisgICAgICAgIHJlbW92ZV9saXN0ID0gKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1RZUEVTX01BU0tFRCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gcmVtb3ZlX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmdyYXBoLnBvcChpdGVtLCBOb25lKQorCisgICAgZGVmIF9pbWFnZV9iYXNlX3R5cGUoc2VsZiwgdHlwZSk6CisgICAgICAgIGN0eXBlcyA9IHNlbGYuZC5nZXRWYXIoJ0NPTVBSRVNTSU9OVFlQRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGlmIHR5cGUgaW4gWyJ2bWRrIiwgInZkaSIsICJxY293MiIsICJsaXZlIiwgImlzbyIsICJoZGRpbWciXToKKyAgICAgICAgICAgIHR5cGUgPSAiZXh0NCIKKyAgICAgICAgYmFzZXR5cGUgPSB0eXBlCisgICAgICAgIGZvciBjdHlwZSBpbiBjdHlwZXM6CisgICAgICAgICAgICBpZiB0eXBlLmVuZHN3aXRoKCIuIiArIGN0eXBlKToKKyAgICAgICAgICAgICAgICBiYXNldHlwZSA9IHR5cGVbOi1sZW4oIi4iICsgY3R5cGUpXQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIGJhc2V0eXBlCisKKyAgICBkZWYgX2NvbXB1dGVfZGVwZW5kZW5jaWVzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJucyBkaWN0IG9iamVjdCBvZiBub2RlcyB3aXRoIFtub19vZl9kZXBlbmRzX29uLCBub19vZl9kZXBlbmRlZF9ieV0KKyAgICAgICAgZm9yIGVhY2ggbm9kZQorICAgICAgICAiIiIKKyAgICAgICAgZGVwc19hcnJheSA9IGRpY3QoKQorICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgZGVwc19hcnJheVtub2RlXSA9IFswLCAwXQorCisgICAgICAgIGZvciBub2RlIGluIHNlbGYuZ3JhcGg6CisgICAgICAgICAgICBkZXBzID0gc2VsZi5ncmFwaFtub2RlXS5zcGxpdCgpCisgICAgICAgICAgICBkZXBzX2FycmF5W25vZGVdWzBdICs9IGxlbihkZXBzKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGRlcHNfYXJyYXlbZGVwXVsxXSArPSAxCisKKyAgICAgICAgcmV0dXJuIGRlcHNfYXJyYXkKKworICAgIGRlZiBfc29ydF9ncmFwaChzZWxmKToKKyAgICAgICAgc29ydGVkX2xpc3QgPSBbXQorICAgICAgICBncm91cCA9IFtdCisgICAgICAgIGZvciBub2RlIGluIHNlbGYuZ3JhcGg6CisgICAgICAgICAgICBpZiBub2RlIG5vdCBpbiBzZWxmLmRlcHNfYXJyYXk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVwZW5kc19vbiA9IHNlbGYuZGVwc19hcnJheVtub2RlXVswXQorCisgICAgICAgICAgICBpZiBkZXBlbmRzX29uID09IDA6CisgICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKG5vZGUpCisKKyAgICAgICAgaWYgbGVuKGdyb3VwKSA9PSAwIGFuZCBsZW4oc2VsZi5kZXBzX2FycmF5KSAhPSAwOgorICAgICAgICAgICAgYmIuZmF0YWwoInBvc3NpYmxlIGZzdHlwZSBjaXJjdWxhciBkZXBlbmRlbmN5Li4uIikKKworICAgICAgICBzb3J0ZWRfbGlzdC5hcHBlbmQoZ3JvdXApCisKKyAgICAgICAgIyByZW1vdmUgYWRkZWQgbm9kZXMgZnJvbSBkZXBzX2FycmF5CisgICAgICAgIGZvciBpdGVtIGluIGdyb3VwOgorICAgICAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgICAgICBpZiBpdGVtIGluIHNlbGYuZ3JhcGhbbm9kZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBzX2FycmF5W25vZGVdWzBdIC09IDEKKworICAgICAgICAgICAgc2VsZi5kZXBzX2FycmF5LnBvcChpdGVtLCBOb25lKQorCisgICAgICAgIGlmIGxlbihzZWxmLmRlcHNfYXJyYXkpOgorICAgICAgICAgICAgIyByZWN1cnNpdmUgY2FsbCwgdG8gZmluZCB0aGUgbmV4dCBncm91cAorICAgICAgICAgICAgc29ydGVkX2xpc3QgKz0gc2VsZi5fc29ydF9ncmFwaCgpCisKKyAgICAgICAgcmV0dXJuIHNvcnRlZF9saXN0CisKKyAgICBkZWYgZ3JvdXBfZnN0eXBlcyhzZWxmLCBpbWFnZV9mc3R5cGVzKToKKyAgICAgICAgc2VsZi5ncmFwaCA9IHNlbGYuX2NvbnN0cnVjdF9kZXBfZ3JhcGgoaW1hZ2VfZnN0eXBlcykKKworICAgICAgICBzZWxmLl9jbGVhbl9ncmFwaCgpCisKKyAgICAgICAgc2VsZi5kZXBzX2FycmF5ID0gc2VsZi5fY29tcHV0ZV9kZXBlbmRlbmNpZXMoKQorCisgICAgICAgIGFsbHR5cGVzID0gW25vZGUgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaF0KKworICAgICAgICByZXR1cm4gKGFsbHR5cGVzLCBzZWxmLl9zb3J0X2dyYXBoKCkpCisKKworY2xhc3MgSW1hZ2UoSW1hZ2VEZXBHcmFwaCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisKKyAgICAgICAgc3VwZXIoSW1hZ2UsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICBkZWYgX2dldF9yb290ZnNfc2l6ZShzZWxmKToKKyAgICAgICAgIiIiY29tcHV0ZSB0aGUgcm9vdGZzIHNpemUiIiIKKyAgICAgICAgcm9vdGZzX2FsaWdubWVudCA9IGludChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlNfQUxJR05NRU5UJywgVHJ1ZSkpCisgICAgICAgIG92ZXJoZWFkX2ZhY3RvciA9IGZsb2F0KHNlbGYuZC5nZXRWYXIoJ0lNQUdFX09WRVJIRUFEX0ZBQ1RPUicsIFRydWUpKQorICAgICAgICByb290ZnNfcmVxX3NpemUgPSBpbnQoc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTX1NJWkUnLCBUcnVlKSkKKyAgICAgICAgcm9vdGZzX2V4dHJhX3NwYWNlID0gZXZhbChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnLCBUcnVlKSkKKyAgICAgICAgcm9vdGZzX21heHNpemUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlNfTUFYU0laRScsIFRydWUpCisKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydkdScsICcta3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSldKQorICAgICAgICBzaXplX2tiID0gaW50KG91dHB1dC5zcGxpdCgpWzBdKQorICAgICAgICBiYXNlX3NpemUgPSBzaXplX2tiICogb3ZlcmhlYWRfZmFjdG9yCisgICAgICAgIGJhc2Vfc2l6ZSA9IChiYXNlX3NpemUsIHJvb3Rmc19yZXFfc2l6ZSlbYmFzZV9zaXplIDwgcm9vdGZzX3JlcV9zaXplXSArIFwKKyAgICAgICAgICAgIHJvb3Rmc19leHRyYV9zcGFjZQorCisgICAgICAgIGlmIGJhc2Vfc2l6ZSAhPSBpbnQoYmFzZV9zaXplKToKKyAgICAgICAgICAgIGJhc2Vfc2l6ZSA9IGludChiYXNlX3NpemUgKyAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzZV9zaXplID0gaW50KGJhc2Vfc2l6ZSkKKworICAgICAgICBiYXNlX3NpemUgKz0gcm9vdGZzX2FsaWdubWVudCAtIDEKKyAgICAgICAgYmFzZV9zaXplIC09IGJhc2Vfc2l6ZSAlIHJvb3Rmc19hbGlnbm1lbnQKKworICAgICAgICAjIENoZWNrIHRoZSByb290ZnMgc2l6ZSBhZ2FpbnN0IElNQUdFX1JPT1RGU19NQVhTSVpFIChpZiBzZXQpCisgICAgICAgIGlmIHJvb3Rmc19tYXhzaXplOgorICAgICAgICAgICAgcm9vdGZzX21heHNpemVfaW50ID0gaW50KHJvb3Rmc19tYXhzaXplKQorICAgICAgICAgICAgaWYgYmFzZV9zaXplID4gcm9vdGZzX21heHNpemVfaW50OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgcm9vdGZzIHNpemUgJWQoSykgb3ZlcnJpZGVzIHRoZSBtYXggc2l6ZSAlZChLKSIgJSBcCisgICAgICAgICAgICAgICAgICAgIChiYXNlX3NpemUsIHJvb3Rmc19tYXhzaXplX2ludCkpCisKKyAgICAgICAgcmV0dXJuIGJhc2Vfc2l6ZQorCisgICAgZGVmIF9jcmVhdGVfc3ltbGlua3Moc2VsZiwgc3ViaW1hZ2VzKToKKyAgICAgICAgIiIiY3JlYXRlIHN5bWxpbmtzIHRvIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIiIiCisgICAgICAgIGRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgaW1nX25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSkKKyAgICAgICAgbGlua19uYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSkKKyAgICAgICAgbWFuaWZlc3RfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX01BTklGRVNUJywgVHJ1ZSkKKworICAgICAgICBvcy5jaGRpcihkZXBsb3lfZGlyKQorCisgICAgICAgIGlmIGxpbmtfbmFtZToKKyAgICAgICAgICAgIGZvciB0eXBlIGluIHN1YmltYWdlczoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbWdfbmFtZSArICIucm9vdGZzLiIgKyB0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgZHN0ID0gbGlua19uYW1lICsgIi4iICsgdHlwZQorICAgICAgICAgICAgICAgICAgICBzcmMgPSBpbWdfbmFtZSArICIucm9vdGZzLiIgKyB0eXBlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIHN5bWxpbms6ICVzIC0+ICVzIiAlIChkc3QsIHNyYykpCisgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkc3QpCisKKyAgICAgICAgICAgIGlmIG1hbmlmZXN0X25hbWUgaXMgbm90IE5vbmUgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMobWFuaWZlc3RfbmFtZSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgbm90IG9zLnBhdGguZXhpc3RzKGxpbmtfbmFtZSArICIubWFuaWZlc3QiKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUobWFuaWZlc3RfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX25hbWUgKyAiLm1hbmlmZXN0IikKKworICAgIGRlZiBfcmVtb3ZlX29sZF9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIiIicmVtb3ZlIHRoZSBzeW1saW5rcyB0byBvbGQgYmluYXJpZXMiIiIKKworICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5LX05BTUUnLCBUcnVlKToKKyAgICAgICAgICAgIGRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBpbWcgaW4gb3MubGlzdGRpcihkZXBsb3lfZGlyKToKKyAgICAgICAgICAgICAgICBpZiBpbWcuZmluZChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5LX05BTUUnLCBUcnVlKSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgaW1nID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsIGltZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoaW1nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JNX09MRF9JTUFHRScsIFRydWUpID09ICIxIiBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLnJlYWxwYXRoKGltZykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLnJlYWxwYXRoKGltZykpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShpbWcpCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwganVzdCBmaWx0ZXIgb3V0IHRoZSBjb21wcmVzc2VkIGltYWdlIHR5cGVzIGZyb20gdGhlCisgICAgZnN0eXBlIGdyb3VwcyByZXR1cm5pbmcgYSAoZmlsdGVyZWRfZnN0eXBlX2dyb3VwcywgY2ltYWdlcykgdHVwbGUuCisgICAgIiIiCisgICAgZGVmIF9maWx0ZXJfb3V0X2NvbW1wcmVzc2VkKHNlbGYsIGZzdHlwZV9ncm91cHMpOgorICAgICAgICBjdHlwZXMgPSBzZWxmLmQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBjaW1hZ2VzID0ge30KKworICAgICAgICBmaWx0ZXJlZF9ncm91cHMgPSBbXQorICAgICAgICBmb3IgZ3JvdXAgaW4gZnN0eXBlX2dyb3VwczoKKyAgICAgICAgICAgIGZpbHRlcmVkX2dyb3VwID0gW10KKyAgICAgICAgICAgIGZvciB0eXBlIGluIGdyb3VwOgorICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBjdHlwZSBpbiBjdHlwZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUuZW5kc3dpdGgoIi4iICsgY3R5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJhc2V0eXBlIG5vdCBpbiBmaWx0ZXJlZF9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cC5hcHBlbmQoYmFzZXR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYXNldHlwZSBub3QgaW4gY2ltYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW1hZ2VzW2Jhc2V0eXBlXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdHlwZSBub3QgaW4gY2ltYWdlc1tiYXNldHlwZV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ltYWdlc1tiYXNldHlwZV0uYXBwZW5kKGN0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYmFzZXR5cGUgYW5kIHR5cGUgbm90IGluIGZpbHRlcmVkX2dyb3VwOgorICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cC5hcHBlbmQodHlwZSkKKworICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXBzLmFwcGVuZChmaWx0ZXJlZF9ncm91cCkKKworICAgICAgICByZXR1cm4gKGZpbHRlcmVkX2dyb3VwcywgY2ltYWdlcykKKworICAgIGRlZiBfZ2V0X2ltYWdlX3R5cGVzKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIGEgKHR5cGVzLCBjaW1hZ2VzKSB0dXBsZSIiIgorCisgICAgICAgIGFsbHR5cGVzLCBmc3R5cGVfZ3JvdXBzID0gc2VsZi5ncm91cF9mc3R5cGVzKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKS5zcGxpdCgpKQorCisgICAgICAgIGZpbHRlcmVkX2dyb3VwcywgY2ltYWdlcyA9IHNlbGYuX2ZpbHRlcl9vdXRfY29tbXByZXNzZWQoZnN0eXBlX2dyb3VwcykKKworICAgICAgICByZXR1cm4gKGFsbHR5cGVzLCBmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMpCisKKyAgICBkZWYgX3dyaXRlX3NjcmlwdChzZWxmLCB0eXBlLCBjbWRzKToKKyAgICAgICAgdGVtcGRpciA9IHNlbGYuZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgICAgICBzY3JpcHRfbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAiY3JlYXRlX2ltYWdlLiIgKyB0eXBlKQorICAgICAgICByb290ZnNfc2l6ZSA9IHNlbGYuX2dldF9yb290ZnNfc2l6ZSgpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignaW1nX2NyZWF0aW9uX2Z1bmMnLCAnXG4nLmpvaW4oY21kcykpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCdpbWdfY3JlYXRpb25fZnVuYycsICdmdW5jJywgMSkKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWcoJ2ltZ19jcmVhdGlvbl9mdW5jJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgc2VsZi5kLnNldFZhcignUk9PVEZTX1NJWkUnLCBzdHIocm9vdGZzX3NpemUpKQorCisgICAgICAgIHdpdGggb3BlbihzY3JpcHRfbmFtZSwgIncrIikgYXMgc2NyaXB0OgorICAgICAgICAgICAgc2NyaXB0LndyaXRlKCIlcyIgJSBiYi5idWlsZC5zaGVsbF90cmFwX2NvZGUoKSkKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiZXhwb3J0IFJPT1RGU19TSVpFPSVkXG4iICUgcm9vdGZzX3NpemUpCisgICAgICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYygnaW1nX2NyZWF0aW9uX2Z1bmMnLCBzY3JpcHQsIHNlbGYuZCkKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiaW1nX2NyZWF0aW9uX2Z1bmNcbiIpCisKKyAgICAgICAgb3MuY2htb2Qoc2NyaXB0X25hbWUsIDA3NzUpCisKKyAgICAgICAgcmV0dXJuIHNjcmlwdF9uYW1lCisKKyAgICBkZWYgX2dldF9pbWFnZWNtZHMoc2VsZik6CisgICAgICAgIG9sZF9vdmVycmlkZXMgPSBzZWxmLmQuZ2V0VmFyKCdPVkVSUklERVMnLCAwKQorCisgICAgICAgIGFsbHR5cGVzLCBmc3R5cGVfZ3JvdXBzLCBjaW1hZ2VzID0gc2VsZi5fZ2V0X2ltYWdlX3R5cGVzKCkKKworICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzID0gW10KKworICAgICAgICBiYi5ub3RlKCJUaGUgaW1hZ2UgY3JlYXRpb24gZ3JvdXBzIGFyZTogJXMiICUgc3RyKGZzdHlwZV9ncm91cHMpKQorICAgICAgICBmb3IgZnN0eXBlX2dyb3VwIGluIGZzdHlwZV9ncm91cHM6CisgICAgICAgICAgICBpbWFnZV9jbWRzID0gW10KKyAgICAgICAgICAgIGZvciB0eXBlIGluIGZzdHlwZV9ncm91cDoKKyAgICAgICAgICAgICAgICBjbWRzID0gW10KKyAgICAgICAgICAgICAgICBzdWJpbWFnZXMgPSBbXQorCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYuZCkKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAnJXM6JXMnICUgKHR5cGUsIG9sZF9vdmVycmlkZXMpKQorICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ3R5cGUnLCB0eXBlKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfY21kID0gbG9jYWxkYXRhLmdldFZhcigiSU1BR0VfQ01EIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBpbWFnZV9jbWQ6CisgICAgICAgICAgICAgICAgICAgIGNtZHMuYXBwZW5kKCJcdCIgKyBpbWFnZV9jbWQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIElNQUdFX0NNRCBkZWZpbmVkIGZvciBJTUFHRV9GU1RZUEVTIGVudHJ5ICclcycgLSBwb3NzaWJseSBpbnZhbGlkIHR5cGUgbmFtZSBvciBtaXNzaW5nIHN1cHBvcnQgY2xhc3MiICUgdHlwZSkKKyAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZChsb2NhbGRhdGEuZXhwYW5kKCJcdGNkICR7REVQTE9ZX0RJUl9JTUFHRX0iKSkKKworICAgICAgICAgICAgICAgIGlmIHR5cGUgaW4gY2ltYWdlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGN0eXBlIGluIGNpbWFnZXNbdHlwZV06CisgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZCgiXHQiICsgbG9jYWxkYXRhLmdldFZhcigiQ09NUFJFU1NfQ01EXyIgKyBjdHlwZSwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZXMuYXBwZW5kKHR5cGUgKyAiLiIgKyBjdHlwZSkKKworICAgICAgICAgICAgICAgIGlmIHR5cGUgbm90IGluIGFsbHR5cGVzOgorICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZChsb2NhbGRhdGEuZXhwYW5kKCJcdHJtICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZXMuYXBwZW5kKHR5cGUpCisKKyAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX3dyaXRlX3NjcmlwdCh0eXBlLCBjbWRzKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfY21kcy5hcHBlbmQoKHR5cGUsIHN1YmltYWdlcywgc2NyaXB0X25hbWUpKQorCisgICAgICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzLmFwcGVuZChpbWFnZV9jbWRzKQorCisgICAgICAgIHJldHVybiBpbWFnZV9jbWRfZ3JvdXBzCisKKyAgICBkZWYgX3dyaXRlX3dpY19lbnYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBieSB3aWMKKyAgICAgICAgdG8gdG1wL3N5c3Jvb3RzLzxtYWNoaW5lPi9pbWdkYXRhLzxpbWFnZT4uZW52CisgICAgICAgICIiIgorICAgICAgICBzdGRpciA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgICAgIG91dGRpciA9IG9zLnBhdGguam9pbihzdGRpciwgJ2ltZ2RhdGEnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0ZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG91dGRpcikKKyAgICAgICAgYmFzZW5hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9CQVNFTkFNRScsIFRydWUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3V0ZGlyLCBiYXNlbmFtZSkgKyAnLmVudicsICd3JykgYXMgZW52ZjoKKyAgICAgICAgICAgIGZvciB2YXIgaW4gc2VsZi5kLmdldFZhcignV0lDVkFSUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgZW52Zi53cml0ZSgnJXM9IiVzIlxuJyAlICh2YXIsIHZhbHVlLnN0cmlwKCkpKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiIyMjIyMjIEdlbmVyYXRlIGltYWdlcyAjIyMjIyMjIikKKyAgICAgICAgcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoIklNQUdFX1BSRVBST0NFU1NfQ09NTUFORCIsIFRydWUpCisgICAgICAgIHBvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCIsIFRydWUpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLl9yZW1vdmVfb2xkX3N5bWxpbmtzKCkKKworICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzID0gc2VsZi5fZ2V0X2ltYWdlY21kcygpCisKKyAgICAgICAgc2VsZi5fd3JpdGVfd2ljX2VudigpCisKKyAgICAgICAgZm9yIGltYWdlX2NtZHMgaW4gaW1hZ2VfY21kX2dyb3VwczoKKyAgICAgICAgICAgICMgY3JlYXRlIHRoZSBpbWFnZXMgaW4gcGFyYWxsZWwKKyAgICAgICAgICAgIG5wcm9jID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBwb29sID0gYmIudXRpbHMubXVsdGlwcm9jZXNzaW5ncG9vbChucHJvYykKKyAgICAgICAgICAgIHJlc3VsdHMgPSBsaXN0KHBvb2wuaW1hcChnZW5lcmF0ZV9pbWFnZSwgaW1hZ2VfY21kcykpCisgICAgICAgICAgICBwb29sLmNsb3NlKCkKKyAgICAgICAgICAgIHBvb2wuam9pbigpCisKKyAgICAgICAgICAgIGZvciByZXN1bHQgaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKHJlc3VsdCkKKworICAgICAgICAgICAgZm9yIGltYWdlX3R5cGUsIHN1YmltYWdlcywgc2NyaXB0IGluIGltYWdlX2NtZHM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgc3ltbGlua3MgZm9yICVzIGltYWdlIC4uLiIgJSBpbWFnZV90eXBlKQorICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9zeW1saW5rcyhzdWJpbWFnZXMpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF9wcm9jZXNzX2NtZHMpCisKKworZGVmIGNyZWF0ZV9pbWFnZShkKToKKyAgICBJbWFnZShkKS5jcmVhdGUoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIEltYWdlIGNyZWF0aW9uIGNhbiBiZSBjYWxsZWQgaW5kZXBlbmRlbnQgZnJvbSBiaXRiYWtlIGVudmlyb25tZW50LgorICAgICIiIgorICAgICIiIgorICAgIFRCRAorICAgICIiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9saWNlbnNlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9saWNlbnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZjY2MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL2xpY2Vuc2UucHkKQEAgLTAsMCArMSwyMTcgQEAKKyMgdmk6c3RzPTQ6c3c9NDpldAorIiIiQ29kZSBmb3IgcGFyc2luZyBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisKK2ltcG9ydCBhc3QKK2ltcG9ydCByZQorZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoY2FzZSBhcyBmbm1hdGNoCisKK2RlZiBsaWNlbnNlX29rKGxpY2Vuc2UsIGRvbnRfd2FudF9saWNlbnNlcyk6CisgICAgIiIiIFJldHVybiBGYWxzZSBpZiBMaWNlbnNlIGV4aXN0IGluIGRvbnRfd2FudF9saWNlbnNlcyBlbHNlIFRydWUgIiIiCisgICAgZm9yIGR3bCBpbiBkb250X3dhbnRfbGljZW5zZXM6CisgICAgICAgICMgSWYgeW91IHdhbnQgdG8gZXhjbHVkZSBsaWNlbnNlIG5hbWVkIGdlbmVyaWNhbGx5ICdYJywgd2UKKyAgICAgICAgIyBzdXJlbHkgd2FudCB0byBleGNsdWRlICdYKycgYXMgd2VsbC4gIEluIGNvbnNlcXVlbmNlLCB3ZQorICAgICAgICAjIHdpbGwgZXhjbHVkZSBhIHRyYWlsaW5nICcrJyBjaGFyYWN0ZXIgZnJvbSBMSUNFTlNFIGluCisgICAgICAgICMgY2FzZSBJTkNPTVBBVElCTEVfTElDRU5TRSBpcyBub3QgYSAnWCsnIGxpY2Vuc2UuCisgICAgICAgIGxpYyA9IGxpY2Vuc2UKKyAgICAgICAgaWYgbm90IHJlLnNlYXJjaCgnXCskJywgZHdsKToKKyAgICAgICAgICAgIGxpYyA9IHJlLnN1YignXCsnLCAnJywgbGljZW5zZSkKKyAgICAgICAgaWYgZm5tYXRjaChsaWMsIGR3bCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBMaWNlbnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIExpY2Vuc2VTeW50YXhFcnJvcihMaWNlbnNlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaWNlbnNlc3RyLCBleGMpOgorICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgPSBsaWNlbnNlc3RyCisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIExpY2Vuc2VFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiZXJyb3IgaW4gJyVzJzogJXMiICUgKHNlbGYubGljZW5zZXN0ciwgc2VsZi5leGMpCisKK2NsYXNzIEludmFsaWRMaWNlbnNlKExpY2Vuc2VFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpY2Vuc2UpOgorICAgICAgICBzZWxmLmxpY2Vuc2UgPSBsaWNlbnNlCisgICAgICAgIExpY2Vuc2VFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGxpY2Vuc2UgJyVzJyIgJSBzZWxmLmxpY2Vuc2UKKworbGljZW5zZV9vcGVyYXRvcl9jaGFycyA9ICcmfCgpICcKK2xpY2Vuc2Vfb3BlcmF0b3IgPSByZS5jb21waWxlKCcoWycgKyBsaWNlbnNlX29wZXJhdG9yX2NoYXJzICsgJ10pJykKK2xpY2Vuc2VfcGF0dGVybiA9IHJlLmNvbXBpbGUoJ1thLXpBLVowLTkuK19cLV0rJCcpCisKK2NsYXNzIExpY2Vuc2VWaXNpdG9yKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgIiIiR2V0IGVsZW1lbnRzIGJhc2VkIG9uIE9wZW5FbWJlZGRlZCBsaWNlbnNlIHN0cmluZ3MiIiIKKyAgICBkZWYgZ2V0X2VsZW1lbnRzKHNlbGYsIGxpY2Vuc2VzdHIpOgorICAgICAgICBuZXdfZWxlbWVudHMgPSBbXQorICAgICAgICBlbGVtZW50cyA9IGZpbHRlcihsYW1iZGEgeDogeC5zdHJpcCgpLCBsaWNlbnNlX29wZXJhdG9yLnNwbGl0KGxpY2Vuc2VzdHIpKQorICAgICAgICBmb3IgcG9zLCBlbGVtZW50IGluIGVudW1lcmF0ZShlbGVtZW50cyk6CisgICAgICAgICAgICBpZiBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICAgICAgaWYgcG9zID4gMCBhbmQgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnRzW3Bvcy0xXSk6CisgICAgICAgICAgICAgICAgICAgIG5ld19lbGVtZW50cy5hcHBlbmQoJyYnKQorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSAnIicgKyBlbGVtZW50ICsgJyInCisgICAgICAgICAgICBlbGlmIG5vdCBsaWNlbnNlX29wZXJhdG9yLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRMaWNlbnNlKGVsZW1lbnQpCisgICAgICAgICAgICBuZXdfZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCisKKyAgICAgICAgcmV0dXJuIG5ld19lbGVtZW50cworCisgICAgIiIiU3ludGF4IHRyZWUgdmlzaXRvciB3aGljaCBjYW4gYWNjZXB0IGVsZW1lbnRzIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHdpdGgKKyAgICBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmciIiIKKyAgICBkZWYgdmlzaXRfZWxlbWVudHMoc2VsZiwgZWxlbWVudHMpOgorICAgICAgICBzZWxmLnZpc2l0KGFzdC5wYXJzZSgnICcuam9pbihlbGVtZW50cykpKQorCisgICAgIiIiU3ludGF4IHRyZWUgdmlzaXRvciB3aGljaCBjYW4gYWNjZXB0IE9wZW5FbWJlZGRlZCBsaWNlbnNlIHN0cmluZ3MiIiIKKyAgICBkZWYgdmlzaXRfc3RyaW5nKHNlbGYsIGxpY2Vuc2VzdHIpOgorICAgICAgICBzZWxmLnZpc2l0X2VsZW1lbnRzKHNlbGYuZ2V0X2VsZW1lbnRzKGxpY2Vuc2VzdHIpKQorCitjbGFzcyBGbGF0dGVuVmlzaXRvcihMaWNlbnNlVmlzaXRvcik6CisgICAgIiIiRmxhdHRlbiBhIGxpY2Vuc2UgdHJlZSAocGFyc2VkIGZyb20gYSBzdHJpbmcpIGJ5IHNlbGVjdGluZyBvbmUgb2YgZWFjaAorICAgIHNldCBvZiBPUiBvcHRpb25zLCBpbiB0aGUgd2F5IHRoZSB1c2VyIHNwZWNpZmllcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaG9vc2VfbGljZW5zZXMpOgorICAgICAgICBzZWxmLmNob29zZV9saWNlbnNlcyA9IGNob29zZV9saWNlbnNlcworICAgICAgICBzZWxmLmxpY2Vuc2VzID0gW10KKyAgICAgICAgTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubGljZW5zZXMuYXBwZW5kKG5vZGUucykKKworICAgIGRlZiB2aXNpdF9CaW5PcChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLm9wLCBhc3QuQml0T3IpOgorICAgICAgICAgICAgbGVmdCA9IEZsYXR0ZW5WaXNpdG9yKHNlbGYuY2hvb3NlX2xpY2Vuc2VzKQorICAgICAgICAgICAgbGVmdC52aXNpdChub2RlLmxlZnQpCisKKyAgICAgICAgICAgIHJpZ2h0ID0gRmxhdHRlblZpc2l0b3Ioc2VsZi5jaG9vc2VfbGljZW5zZXMpCisgICAgICAgICAgICByaWdodC52aXNpdChub2RlLnJpZ2h0KQorCisgICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGYuY2hvb3NlX2xpY2Vuc2VzKGxlZnQubGljZW5zZXMsIHJpZ2h0LmxpY2Vuc2VzKQorICAgICAgICAgICAgc2VsZi5saWNlbnNlcy5leHRlbmQoc2VsZWN0ZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworZGVmIGZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlc3RyLCBjaG9vc2VfbGljZW5zZXMpOgorICAgICIiIkdpdmVuIGEgbGljZW5zZSBzdHJpbmcgYW5kIGNob29zZV9saWNlbnNlcyBmdW5jdGlvbiwgcmV0dXJuIGEgZmxhdCBsaXN0IG9mIGxpY2Vuc2VzIiIiCisgICAgZmxhdHRlbiA9IEZsYXR0ZW5WaXNpdG9yKGNob29zZV9saWNlbnNlcykKKyAgICB0cnk6CisgICAgICAgIGZsYXR0ZW4udmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgTGljZW5zZVN5bnRheEVycm9yKGxpY2Vuc2VzdHIsIGV4YykKKyAgICByZXR1cm4gZmxhdHRlbi5saWNlbnNlcworCitkZWYgaXNfaW5jbHVkZWQobGljZW5zZXN0ciwgd2hpdGVsaXN0PU5vbmUsIGJsYWNrbGlzdD1Ob25lKToKKyAgICAiIiJHaXZlbiBhIGxpY2Vuc2Ugc3RyaW5nIGFuZCB3aGl0ZWxpc3QgYW5kIGJsYWNrbGlzdCwgZGV0ZXJtaW5lIGlmIHRoZQorICAgIGxpY2Vuc2Ugc3RyaW5nIG1hdGNoZXMgdGhlIHdoaXRlbGlzdCBhbmQgZG9lcyBub3QgbWF0Y2ggdGhlIGJsYWNrbGlzdC4KKworICAgIFJldHVybnMgYSB0dXBsZSBob2xkaW5nIHRoZSBib29sZWFuIHN0YXRlIGFuZCBhIGxpc3Qgb2YgdGhlIGFwcGxpY2FibGUKKyAgICBsaWNlbnNlcyB3aGljaCB3ZXJlIGV4Y2x1ZGVkIChvciBOb25lLCBpZiB0aGUgc3RhdGUgaXMgVHJ1ZSkKKyAgICAiIiIKKworICAgIGRlZiBpbmNsdWRlX2xpY2Vuc2UobGljZW5zZSk6CisgICAgICAgIHJldHVybiBhbnkoZm5tYXRjaChsaWNlbnNlLCBwYXR0ZXJuKSBmb3IgcGF0dGVybiBpbiB3aGl0ZWxpc3QpCisKKyAgICBkZWYgZXhjbHVkZV9saWNlbnNlKGxpY2Vuc2UpOgorICAgICAgICByZXR1cm4gYW55KGZubWF0Y2gobGljZW5zZSwgcGF0dGVybikgZm9yIHBhdHRlcm4gaW4gYmxhY2tsaXN0KQorCisgICAgZGVmIGNob29zZV9saWNlbnNlcyhhbHBoYSwgYmV0YSk6CisgICAgICAgICIiIlNlbGVjdCB0aGUgb3B0aW9uIGluIGFuIE9SIHdoaWNoIGlzIHRoZSAnYmVzdCcgKGhhcyB0aGUgbW9zdAorICAgICAgICBpbmNsdWRlZCBsaWNlbnNlcykuIiIiCisgICAgICAgIGFscGhhX3dlaWdodCA9IGxlbihmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBhbHBoYSkpCisgICAgICAgIGJldGFfd2VpZ2h0ID0gbGVuKGZpbHRlcihpbmNsdWRlX2xpY2Vuc2UsIGJldGEpKQorICAgICAgICBpZiBhbHBoYV93ZWlnaHQgPiBiZXRhX3dlaWdodDoKKyAgICAgICAgICAgIHJldHVybiBhbHBoYQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGJldGEKKworICAgIGlmIG5vdCB3aGl0ZWxpc3Q6CisgICAgICAgIHdoaXRlbGlzdCA9IFsnKiddCisKKyAgICBpZiBub3QgYmxhY2tsaXN0OgorICAgICAgICBibGFja2xpc3QgPSBbXQorCisgICAgbGljZW5zZXMgPSBmbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZXN0ciwgY2hvb3NlX2xpY2Vuc2VzKQorICAgIGV4Y2x1ZGVkID0gZmlsdGVyKGxhbWJkYSBsaWM6IGV4Y2x1ZGVfbGljZW5zZShsaWMpLCBsaWNlbnNlcykKKyAgICBpbmNsdWRlZCA9IGZpbHRlcihsYW1iZGEgbGljOiBpbmNsdWRlX2xpY2Vuc2UobGljKSwgbGljZW5zZXMpCisgICAgaWYgZXhjbHVkZWQ6CisgICAgICAgIHJldHVybiBGYWxzZSwgZXhjbHVkZWQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gVHJ1ZSwgaW5jbHVkZWQKKworY2xhc3MgTWFuaWZlc3RWaXNpdG9yKExpY2Vuc2VWaXNpdG9yKToKKyAgICAiIiJXYWxrIGxpY2Vuc2UgdHJlZSAocGFyc2VkIGZyb20gYSBzdHJpbmcpIHJlbW92aW5nIHRoZSBpbmNvbXBhdGlibGUKKyAgICBsaWNlbnNlcyBzcGVjaWZpZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCk6CisgICAgICAgIHNlbGYuX2RvbnRfd2FudF9saWNlbnNlcyA9IGRvbnRfd2FudF9saWNlbnNlcworICAgICAgICBzZWxmLl9jYW5vbmljYWxfbGljZW5zZSA9IGNhbm9uaWNhbF9saWNlbnNlCisgICAgICAgIHNlbGYuX2QgPSBkCisgICAgICAgIHNlbGYuX29wZXJhdG9ycyA9IFtdCisKKyAgICAgICAgc2VsZi5saWNlbnNlcyA9IFtdCisgICAgICAgIHNlbGYubGljZW5zZXN0ciA9ICcnCisKKyAgICAgICAgTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuU3RyKToKKyAgICAgICAgICAgIGxpYyA9IG5vZGUucworCisgICAgICAgICAgICBpZiBsaWNlbnNlX29rKHNlbGYuX2Nhbm9uaWNhbF9saWNlbnNlKHNlbGYuX2QsIGxpYyksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RvbnRfd2FudF9saWNlbnNlcykgPT0gVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVyYXRvcnM6CisgICAgICAgICAgICAgICAgICAgIG9wcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiBzZWxmLl9vcGVyYXRvcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcCA9PSAnWyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzLmFwcGVuZChvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3AgPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBvcHNbLTFdIGluIFsnWycsICddJ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzWy0xXSA9IG9wIAorCisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcCA9PSAnWycgb3Igb3AgPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSBvcAorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmxpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSAnICcgKyBvcCArICcgJworCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wZXJhdG9ycyA9IFtdCisKKyAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gbGljCisgICAgICAgICAgICAgICAgc2VsZi5saWNlbnNlcy5hcHBlbmQobGljKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LkJpdEFuZCk6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCImIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5CaXRPcik6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCJ8IikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5MaXN0KToKKyAgICAgICAgICAgIHNlbGYuX29wZXJhdG9ycy5hcHBlbmQoIlsiKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LkxvYWQpOgorICAgICAgICAgICAgc2VsZi5saWNlbnNlc3RyICs9ICJdIgorCisgICAgICAgIHNlbGYuZ2VuZXJpY192aXNpdChub2RlKQorCitkZWYgbWFuaWZlc3RfbGljZW5zZXMobGljZW5zZXN0ciwgZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCk6CisgICAgIiIiR2l2ZW4gYSBsaWNlbnNlIHN0cmluZyBhbmQgZG9udF93YW50X2xpY2Vuc2VzIGxpc3QsCisgICAgICAgcmV0dXJuIGxpY2Vuc2Ugc3RyaW5nIGZpbHRlcmVkIGFuZCBhIGxpc3Qgb2YgbGljZW5zZXMiIiIKKyAgICBtYW5pZmVzdCA9IE1hbmlmZXN0VmlzaXRvcihkb250X3dhbnRfbGljZW5zZXMsIGNhbm9uaWNhbF9saWNlbnNlLCBkKQorCisgICAgdHJ5OgorICAgICAgICBlbGVtZW50cyA9IG1hbmlmZXN0LmdldF9lbGVtZW50cyhsaWNlbnNlc3RyKQorCisgICAgICAgICMgUmVwbGFjZSAnKCknIHRvICdbXScgZm9yIGhhbmRsZSBpbiBhc3QgYXMgTGlzdCBhbmQgTG9hZCB0eXBlcy4KKyAgICAgICAgZWxlbWVudHMgPSBbJ1snIGlmIGUgPT0gJygnIGVsc2UgZSBmb3IgZSBpbiBlbGVtZW50c10KKyAgICAgICAgZWxlbWVudHMgPSBbJ10nIGlmIGUgPT0gJyknIGVsc2UgZSBmb3IgZSBpbiBlbGVtZW50c10KKworICAgICAgICBtYW5pZmVzdC52aXNpdF9lbGVtZW50cyhlbGVtZW50cykKKyAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBMaWNlbnNlU3ludGF4RXJyb3IobGljZW5zZXN0ciwgZXhjKQorCisgICAgIyBSZXBsYWNlICdbXScgdG8gJygpJyBmb3Igb3V0cHV0IGNvcnJlY3QgbGljZW5zZS4KKyAgICBtYW5pZmVzdC5saWNlbnNlc3RyID0gbWFuaWZlc3QubGljZW5zZXN0ci5yZXBsYWNlKCdbJywgJygnKS5yZXBsYWNlKCddJywgJyknKQorCisgICAgcmV0dXJuIChtYW5pZmVzdC5saWNlbnNlc3RyLCBtYW5pZmVzdC5saWNlbnNlcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbHNiLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9sc2IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmZTcxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvbHNiLnB5CkBAIC0wLDAgKzEsODMgQEAKK2RlZiByZWxlYXNlX2RpY3QoKToKKyAgICAiIiJSZXR1cm4gdGhlIG91dHB1dCBvZiBsc2JfcmVsZWFzZSAtaXIgYXMgYSBkaWN0aW9uYXJ5IiIiCisgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQSVBFCisKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCwgZXJyID0gYmIucHJvY2Vzcy5ydW4oWydsc2JfcmVsZWFzZScsICctaXInXSwgc3RkZXJyPVBJUEUpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZXhjOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGF0YSA9IHt9CisgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCItZSIpOiBsaW5lID0gbGluZVszOl0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmUuc3BsaXQoIjpcdCIsIDEpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIGRhdGEKKworZGVmIHJlbGVhc2VfZGljdF9maWxlKCk6CisgICAgIiIiIFRyeSB0byBnYXRoZXIgTFNCIHJlbGVhc2UgaW5mb3JtYXRpb24gbWFudWFsbHkgd2hlbiBsc2JfcmVsZWFzZSB0b29sIGlzIHVuYXZhaWxhYmxlICIiIgorICAgIGRhdGEgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy9sc2ItcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvbHNiLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWUuc3RyaXAoKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL3JlZGhhdC1yZWxlYXNlJyk6CisgICAgICAgICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIHdpdGggb3BlbignL2V0Yy9yZWRoYXQtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZGlzdHJvID0gZi5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJyguKikgcmVsZWFzZSAoLiopIFwoKC4qKVwpJywgZGlzdHJvKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9JRCddID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IG1hdGNoLmdyb3VwKDIpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvb3MtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvb3MtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdOQU1FPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9JRCddID0gbGluZVs1Ol0ucnN0cmlwKCkuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1ZFUlNJT05fSUQ9Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IGxpbmVbMTE6XS5yc3RyaXAoKS5zdHJpcCgnIicpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvU3VTRS1yZWxlYXNlJyk6CisgICAgICAgICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9ICdTVVNFIExJTlVYJworICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL1N1U0UtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdWRVJTSU9OID0gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IGxpbmVbMTA6XS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBkYXRhCisKK2RlZiBkaXN0cm9faWRlbnRpZmllcihhZGp1c3RfaG9vaz1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBkaXN0cm8gaWRlbnRpZmllciBzdHJpbmcgYmFzZWQgdXBvbiBsc2JfcmVsZWFzZSAtcmksCisgICAgICAgd2l0aCBvcHRpb25hbCBhZGp1c3RtZW50IHZpYSBhIGhvb2siIiIKKworICAgIGxzYl9kYXRhID0gcmVsZWFzZV9kaWN0KCkKKyAgICBpZiBsc2JfZGF0YToKKyAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gbHNiX2RhdGFbJ0Rpc3RyaWJ1dG9yIElEJ10sIGxzYl9kYXRhWydSZWxlYXNlJ10KKyAgICBlbHNlOgorICAgICAgICBsc2JfZGF0YV9maWxlID0gcmVsZWFzZV9kaWN0X2ZpbGUoKQorICAgICAgICBpZiBsc2JfZGF0YV9maWxlOgorICAgICAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gbHNiX2RhdGFfZmlsZVsnRElTVFJJQl9JRCddLCBsc2JfZGF0YV9maWxlLmdldCgnRElTVFJJQl9SRUxFQVNFJywgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IE5vbmUsIE5vbmUKKworICAgIGlmIGFkanVzdF9ob29rOgorICAgICAgICBkaXN0cm9faWQsIHJlbGVhc2UgPSBhZGp1c3RfaG9vayhkaXN0cm9faWQsIHJlbGVhc2UpCisgICAgaWYgbm90IGRpc3Ryb19pZDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duIgorICAgIGlmIHJlbGVhc2U6CisgICAgICAgIGlkX3N0ciA9ICd7MH0tezF9Jy5mb3JtYXQoZGlzdHJvX2lkLCByZWxlYXNlKQorICAgIGVsc2U6CisgICAgICAgIGlkX3N0ciA9IGRpc3Ryb19pZAorICAgIHJldHVybiBpZF9zdHIucmVwbGFjZSgnICcsJy0nKS5yZXBsYWNlKCcvJywnLScpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL21ha2V0eXBlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYWtldHlwZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzlmMzMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYWtldHlwZS5weQpAQCAtMCwwICsxLDk5IEBACisiIiJPcGVuRW1iZWRkZWQgdmFyaWFibGUgdHlwaW5nIHN1cHBvcnQKKworVHlwZXMgYXJlIGRlZmluZWQgaW4gdGhlIG1ldGFkYXRhIGJ5IG5hbWUsIHVzaW5nIHRoZSAndHlwZScgZmxhZyBvbiBhCit2YXJpYWJsZS4gIE90aGVyIGZsYWdzIG1heSBiZSB1dGlsaXplZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSB0eXBlcy4gIFNlZQordGhlIGFyZ3VtZW50cyBvZiB0aGUgdHlwZSdzIGZhY3RvcnkgZm9yIGRldGFpbHMuCisiIiIKKworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCB0eXBlcworCithdmFpbGFibGVfdHlwZXMgPSB7fQorCitjbGFzcyBNaXNzaW5nRmxhZyhUeXBlRXJyb3IpOgorICAgICIiIkEgcGFydGljdWxhciBmbGFnIGlzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgdHlwZSwgYnV0IGhhcyBub3QgYmVlbgorICAgIHByb3ZpZGVkLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGFnLCB0eXBlKToKKyAgICAgICAgc2VsZi5mbGFnID0gZmxhZworICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIFR5cGVFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVHlwZSAnJXMnIHJlcXVpcmVzIGZsYWcgJyVzJyIgJSAoc2VsZi50eXBlLCBzZWxmLmZsYWcpCisKK2RlZiBmYWN0b3J5KHZhcl90eXBlKToKKyAgICAiIiJSZXR1cm4gdGhlIGZhY3RvcnkgZm9yIGEgc3BlY2lmaWVkIHR5cGUuIiIiCisgICAgaWYgdmFyX3R5cGUgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJObyB0eXBlIHNwZWNpZmllZC4gVmFsaWQgdHlwZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oYXZhaWxhYmxlX3R5cGVzKSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBhdmFpbGFibGVfdHlwZXNbdmFyX3R5cGVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkludmFsaWQgdHlwZSAnJXMnOlxuICBWYWxpZCB0eXBlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YXJfdHlwZSwgJywgJy5qb2luKGF2YWlsYWJsZV90eXBlcykpKQorCitkZWYgY3JlYXRlKHZhbHVlLCB2YXJfdHlwZSwgKipmbGFncyk6CisgICAgIiIiQ3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUsIGdpdmVuIHRoZSBzcGVjaWZpZWQgZmxhZ3MgYW5kCisgICAgc3RyaW5nIHZhbHVlLiIiIgorICAgIG9iaiA9IGZhY3RvcnkodmFyX3R5cGUpCisgICAgb2JqZmxhZ3MgPSB7fQorICAgIGZvciBmbGFnIGluIG9iai5mbGFnczoKKyAgICAgICAgaWYgZmxhZyBub3QgaW4gZmxhZ3M6CisgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBvYmoub3B0ZmxhZ3M6CisgICAgICAgICAgICAgICAgcmFpc2UgTWlzc2luZ0ZsYWcoZmxhZywgdmFyX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvYmpmbGFnc1tmbGFnXSA9IGZsYWdzW2ZsYWddCisKKyAgICByZXR1cm4gb2JqKHZhbHVlLCAqKm9iamZsYWdzKQorCitkZWYgZ2V0X2NhbGxhYmxlX2FyZ3Mob2JqKToKKyAgICAiIiJHcmFiIGFsbCBidXQgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBzcGVjaWZpZWQgY2FsbGFibGUsIHJldHVybmluZworICAgIHRoZSBsaXN0LCBhcyB3ZWxsIGFzIGEgbGlzdCBvZiB3aGljaCBvZiB0aGUgYXJndW1lbnRzIGhhdmUgZGVmYXVsdAorICAgIHZhbHVlcy4iIiIKKyAgICBpZiB0eXBlKG9iaikgaXMgdHlwZToKKyAgICAgICAgb2JqID0gb2JqLl9faW5pdF9fCisKKyAgICBhcmdzLCB2YXJhcmdzLCBrZXl3b3JkcywgZGVmYXVsdHMgPSBpbnNwZWN0LmdldGFyZ3NwZWMob2JqKQorICAgIGZsYWdsaXN0ID0gW10KKyAgICBpZiBhcmdzOgorICAgICAgICBpZiBsZW4oYXJncykgPiAxIGFuZCBhcmdzWzBdID09ICdzZWxmJzoKKyAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzE6XQorICAgICAgICBmbGFnbGlzdC5leHRlbmQoYXJncykKKworICAgIG9wdGlvbmFsID0gc2V0KCkKKyAgICBpZiBkZWZhdWx0czoKKyAgICAgICAgb3B0aW9uYWwgfD0gc2V0KGZsYWdsaXN0Wy1sZW4oZGVmYXVsdHMpOl0pCisgICAgcmV0dXJuIGZsYWdsaXN0LCBvcHRpb25hbAorCitkZWYgZmFjdG9yeV9zZXR1cChuYW1lLCBvYmopOgorICAgICIiIlByZXBhcmUgYSBmYWN0b3J5IGZvciB1c2UuIiIiCisgICAgYXJncywgb3B0aW9uYWwgPSBnZXRfY2FsbGFibGVfYXJncyhvYmopCisgICAgZXh0cmFfYXJncyA9IGFyZ3NbMTpdCisgICAgaWYgZXh0cmFfYXJnczoKKyAgICAgICAgb2JqLmZsYWdzLCBvcHRpb25hbCA9IGV4dHJhX2FyZ3MsIG9wdGlvbmFsCisgICAgICAgIG9iai5vcHRmbGFncyA9IHNldChvcHRpb25hbCkKKyAgICBlbHNlOgorICAgICAgICBvYmouZmxhZ3MgPSBvYmoub3B0ZmxhZ3MgPSAoKQorCisgICAgaWYgbm90IGhhc2F0dHIob2JqLCAnbmFtZScpOgorICAgICAgICBvYmoubmFtZSA9IG5hbWUKKworZGVmIHJlZ2lzdGVyKG5hbWUsIGZhY3RvcnkpOgorICAgICIiIlJlZ2lzdGVyIGEgdHlwZSwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGEgZmFjdG9yeSBjYWxsYWJsZS4KKworICAgIERldGVybWluZXMgdGhlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBmbGFncyBmcm9tIHRoZSBmYWN0b3J5J3MKKyAgICBhcmd1bWVudHMuIiIiCisgICAgZmFjdG9yeV9zZXR1cChuYW1lLCBmYWN0b3J5KQorICAgIGF2YWlsYWJsZV90eXBlc1tmYWN0b3J5Lm5hbWVdID0gZmFjdG9yeQorCisKKyMgUmVnaXN0ZXIgYWxsIG91ciBpbmNsdWRlZCB0eXBlcworZm9yIG5hbWUgaW4gZGlyKHR5cGVzKToKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgY29udGludWUKKworICAgIG9iaiA9IGdldGF0dHIodHlwZXMsIG5hbWUpCisgICAgaWYgbm90IGNhbGxhYmxlKG9iaik6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICByZWdpc3RlcihuYW1lLCBvYmopCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL21hbmlmZXN0LnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjgzMmYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weQpAQCAtMCwwICsxLDM0NSBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiCisKKworY2xhc3MgTWFuaWZlc3Qob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgUEtHX1RZUEVfTVVTVF9JTlNUQUxMID0gIm1pcCIKKyAgICBQS0dfVFlQRV9NVUxUSUxJQiA9ICJtbHAiCisgICAgUEtHX1RZUEVfTEFOR1VBR0UgPSAibGdwIgorICAgIFBLR19UWVBFX0FUVEVNUFRfT05MWSA9ICJhb3AiCisKKyAgICBNQU5JRkVTVF9UWVBFX0lNQUdFID0gImltYWdlIgorICAgIE1BTklGRVNUX1RZUEVfU0RLX0hPU1QgPSAic2RrX2hvc3QiCisgICAgTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUID0gInNka190YXJnZXQiCisKKyAgICB2YXJfbWFwcyA9IHsKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9JTUFHRTogeworICAgICAgICAgICAgIlBBQ0tBR0VfSU5TVEFMTCI6IFBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgICAgICJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiOiBQS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgICAgICAiTElOR1VBU19JTlNUQUxMIjogUEtHX1RZUEVfTEFOR1VBR0UKKyAgICAgICAgfSwKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9TREtfSE9TVDogeworICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0siOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSI6IFBLR19UWVBFX0FUVEVNUFRfT05MWQorICAgICAgICB9LAorICAgICAgICBNQU5JRkVTVF9UWVBFX1NES19UQVJHRVQ6IHsKKyAgICAgICAgICAgICJUT09MQ0hBSU5fVEFSR0VUX1RBU0siOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIjogUEtHX1RZUEVfQVRURU1QVF9PTkxZCisgICAgICAgIH0KKyAgICB9CisKKyAgICBJTlNUQUxMX09SREVSID0gWworICAgICAgICBQS0dfVFlQRV9MQU5HVUFHRSwKKyAgICAgICAgUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICBQS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgIFBLR19UWVBFX01VTFRJTElCCisgICAgXQorCisgICAgaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlciA9IFwKKyAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBhbmQgY29udGFpbnMgdGhlIHBhY2thZ2VzXG4iIFwKKyAgICAgICAgIiMgcGFzc2VkIG9uIHRvIHRoZSBwYWNrYWdlIG1hbmFnZXIgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZSByb290ZnMuXG5cbiIgXAorICAgICAgICAiIyBGb3JtYXQ6XG4iIFwKKyAgICAgICAgIiMgIDxwYWNrYWdlX3R5cGU+LDxwYWNrYWdlX25hbWU+XG4iIFwKKyAgICAgICAgIiMgd2hlcmU6XG4iIFwKKyAgICAgICAgIiMgICA8cGFja2FnZV90eXBlPiBjYW4gYmU6XG4iIFwKKyAgICAgICAgIiMgICAgICAnbWlwJyA9IG11c3QgaW5zdGFsbCBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnYW9wJyA9IGF0dGVtcHQgb25seSBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnbWxwJyA9IG11bHRpbGliIHBhY2thZ2VcbiIgXAorICAgICAgICAiIyAgICAgICdsZ3AnID0gbGFuZ3VhZ2UgcGFja2FnZVxuXG4iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUsIG1hbmlmZXN0X3R5cGU9TUFOSUZFU1RfVFlQRV9JTUFHRSk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5tYW5pZmVzdF90eXBlID0gbWFuaWZlc3RfdHlwZQorCisgICAgICAgIGlmIG1hbmlmZXN0X2RpciBpcyBOb25lOgorICAgICAgICAgICAgaWYgbWFuaWZlc3RfdHlwZSAhPSBzZWxmLk1BTklGRVNUX1RZUEVfSU1BR0U6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gbWFuaWZlc3RfZGlyCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYubWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYuaW5pdGlhbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2luaXRpYWxfbWFuaWZlc3QiICUgbWFuaWZlc3RfdHlwZSkKKyAgICAgICAgc2VsZi5maW5hbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2ZpbmFsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisgICAgICAgIHNlbGYuZnVsbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2Z1bGxfbWFuaWZlc3QiICUgbWFuaWZlc3RfdHlwZSkKKworICAgICAgICAjIHBhY2thZ2VzIGluIHRoZSBmb2xsb3dpbmcgdmFycyB3aWxsIGJlIHNwbGl0IGluICdtdXN0IGluc3RhbGwnIGFuZAorICAgICAgICAjICdtdWx0aWxpYicKKyAgICAgICAgc2VsZi52YXJzX3RvX3NwbGl0ID0gWyJQQUNLQUdFX0lOU1RBTEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyJdCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgYSBzdGFuZGFyZCBpbml0aWFsIG1hbmlmZXN0IGZvciBjb3JlLWltYWdlLShtaW5pbWFsfHNhdG98c2F0by1zZGspLgorICAgIFRoaXMgd2lsbCBiZSB1c2VkIGZvciB0ZXN0aW5nIHVudGlsIHRoZSBjbGFzcyBpcyBpbXBsZW1lbnRlZCBwcm9wZXJseSEKKyAgICAiIiIKKyAgICBkZWYgX2NyZWF0ZV9kdW1teV9pbml0aWFsKHNlbGYpOgorICAgICAgICBpbWFnZV9yb290ZnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICBwa2dfbGlzdCA9IGRpY3QoKQorICAgICAgICBpZiBpbWFnZV9yb290ZnMuZmluZCgiY29yZS1pbWFnZS1zYXRvLXNkayIpID4gMDoKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMXSA9IFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvIHBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zZGsgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcgcGFja2FnZWdyb3VwLWNvcmUtcXQtZGVtb2FwcHMgIiBcCisgICAgICAgICAgICAgICAgImFwdCBwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIHBzcGxhc2ggIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggZHBrZyBrZXJuZWwtZGV2IgorICAgICAgICAgICAgcGtnX2xpc3Rbc2VsZi5QS0dfVFlQRV9MQU5HVUFHRV0gPSBcCisgICAgICAgICAgICAgICAgImxvY2FsZS1iYXNlLWVuLXVzIGxvY2FsZS1iYXNlLWVuLWdiIgorICAgICAgICBlbGlmIGltYWdlX3Jvb3Rmcy5maW5kKCJjb3JlLWltYWdlLXNhdG8iKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhciBwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by1nYW1lcyAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgcHNwbGFzaCBhcHQgZHBrZyBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8gcGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKKyAgICAgICAgICAgIHBrZ19saXN0WydsZ3AnXSA9IFwKKyAgICAgICAgICAgICAgICAibG9jYWxlLWJhc2UtZW4tdXMgbG9jYWxlLWJhc2UtZW4tZ2IiCisgICAgICAgIGVsaWYgaW1hZ2Vfcm9vdGZzLmZpbmQoImNvcmUtaW1hZ2UtbWluaW1hbCIpID4gMDoKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMXSA9ICJydW4tcG9zdGluc3RzIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QiCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCwgIncrIikgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBtYW5pZmVzdC53cml0ZShzZWxmLmluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIpCisKKyAgICAgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dfbGlzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0W3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICAiIiIKKyAgICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBpbml0aWFsIG1hbmlmZXN0IHdoaWNoIHdpbGwgYmUgdXNlZCBieSBSb290ZnMgY2xhc3MgdG8KKyAgICBnZW5lcmF0ZSB0aGUgcm9vdGZzCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgdGhlIG1hbmlmZXN0IGFmdGVyIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gaW5zdGFsbGVkLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIFRoaXMgY3JlYXRlcyB0aGUgbWFuaWZlc3QgYWZ0ZXIgdGhlIHBhY2thZ2UgaW4gaW5pdGlhbCBtYW5pZmVzdCBoYXMgYmVlbgorICAgIGR1bW15IGluc3RhbGxlZC4gSXQgbGlzdHMgYWxsICp0byBiZSBpbnN0YWxsZWQqIHBhY2thZ2VzLiBUaGVyZSBpcyBubyByZWFsCisgICAgaW5zdGFsbGF0aW9uLCBqdXN0IGEgdGVzdC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHBhcnNlcyBhbiBpbml0aWFsIG1hbmlmZXN0IGFuZCByZXR1cm5zIGEgZGljdGlvbmFyeQorICAgIG9iamVjdCB3aXRoIHRoZSBtdXN0IGluc3RhbGwsIGF0dGVtcHQgb25seSwgbXVsdGlsaWIgYW5kIGxhbmd1YWdlIHBhY2thZ2VzLgorICAgICIiIgorICAgIGRlZiBwYXJzZV9pbml0aWFsX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCkgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBtYW5pZmVzdC5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgY29tbWVudCA9IHJlLm1hdGNoKCJeIy4qIiwgbGluZSkKKyAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIl4oJXN8JXN8JXN8JXMpLCguKikkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlBLR19UWVBFX01VTFRJTElCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9MQU5HVUFHRSkKKyAgICAgICAgICAgICAgICBwa2cgPSByZS5tYXRjaChwYXR0ZXJuLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgY29tbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHBrZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3R5cGUgPSBwa2cuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWUgPSBwa2cuZ3JvdXAoMikKKworICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdID0gW3BrZ19uYW1lXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0uYXBwZW5kKHBrZ19uYW1lKQorCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICAnJycKKyAgICBUaGlzIGZvbGxvd2luZyBmdW5jdGlvbiBwYXJzZXMgYSBmdWxsIG1hbmlmZXN0IGFuZCByZXR1cm4gYSBsaXN0CisgICAgb2JqZWN0IHdpdGggcGFja2FnZXMuCisgICAgJycnCisgICAgZGVmIHBhcnNlX2Z1bGxfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgIGluc3RhbGxlZF9wa2dzID0gbGlzdCgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmZ1bGxfbWFuaWZlc3QpOgorICAgICAgICAgICAgYmIubm90ZSgnZnVsbCBtYW5pZmVzdCBub3QgZXhpc3QnKQorICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZnVsbF9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLmFwcGVuZChwa2cuc3RyaXAoKSkKKworICAgICAgICByZXR1cm4gaW5zdGFsbGVkX3BrZ3MKKworCitjbGFzcyBScG1NYW5pZmVzdChNYW5pZmVzdCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2JqZWN0IHdpdGggbWlwIGFuZCBtbHAgcGFja2FnZXMuCisgICAgIiIiCisgICAgZGVmIF9zcGxpdF9tdWx0aWxpYihzZWxmLCBwa2dfbGlzdCk6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMCisKKyAgICAgICAgICAgIG1sX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGZvciBtbF92YXJpYW50IGluIG1sX3ZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKG1sX3ZhcmlhbnQgKyAnLScpOgorICAgICAgICAgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVMVElMSUIKKworICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gPSBwa2cKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gKz0gIiAiICsgcGtnCisKKyAgICAgICAgcmV0dXJuIHBrZ3MKKworICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJzX3RvX3NwbGl0OgorICAgICAgICAgICAgICAgICAgICBzcGxpdF9wa2dzID0gc2VsZi5fc3BsaXRfbXVsdGlsaWIoc2VsZi5kLmdldFZhcih2YXIsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QocGtncy5pdGVtcygpICsgc3BsaXRfcGtncy5pdGVtcygpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ19saXN0ID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1tzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXV0gPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBwYXNzCisKKworY2xhc3MgT3BrZ01hbmlmZXN0KE1hbmlmZXN0KToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSBvYmplY3Qgd2l0aCBtaXAgYW5kIG1scCBwYWNrYWdlcy4KKyAgICAiIiIKKyAgICBkZWYgX3NwbGl0X211bHRpbGliKHNlbGYsIHBrZ19saXN0KToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnX2xpc3Quc3BsaXQoKToKKyAgICAgICAgICAgIHBrZ190eXBlID0gc2VsZi5QS0dfVFlQRV9NVVNUX0lOU1RBTEwKKworICAgICAgICAgICAgbWxfdmFyaWFudHMgPSBzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpLnNwbGl0KCkKKworICAgICAgICAgICAgZm9yIG1sX3ZhcmlhbnQgaW4gbWxfdmFyaWFudHM6CisgICAgICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgobWxfdmFyaWFudCArICctJyk6CisgICAgICAgICAgICAgICAgICAgIHBrZ190eXBlID0gc2VsZi5QS0dfVFlQRV9NVUxUSUxJQgorCisgICAgICAgICAgICBpZiBub3QgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSA9IHBrZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSArPSAiICIgKyBwa2cKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCwgIncrIikgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBtYW5pZmVzdC53cml0ZShzZWxmLmluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIpCisKKyAgICAgICAgICAgIGZvciB2YXIgaW4gc2VsZi52YXJfbWFwc1tzZWxmLm1hbmlmZXN0X3R5cGVdOgorICAgICAgICAgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcnNfdG9fc3BsaXQ6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0X3BrZ3MgPSBzZWxmLl9zcGxpdF9tdWx0aWxpYihzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0X3BrZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzID0gZGljdChwa2dzLml0ZW1zKCkgKyBzcGxpdF9wa2dzLml0ZW1zKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX2xpc3QgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3NlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXVt2YXJdXSA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ3NbcGtnX3R5cGVdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKCIlcywlc1xuIiAlIChwa2dfdHlwZSwgcGtnKSkKKworICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGVfZnVsbChzZWxmLCBwbSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmluaXRpYWxfbWFuaWZlc3QpOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfaW5pdGlhbCgpCisKKyAgICAgICAgaW5pdGlhbF9tYW5pZmVzdCA9IHNlbGYucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IGxpc3QoKQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gaW5pdGlhbF9tYW5pZmVzdDoKKyAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCArPSBpbml0aWFsX21hbmlmZXN0W3BrZ190eXBlXQorICAgICAgICBpZiBsZW4ocGtnc190b19pbnN0YWxsKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3V0cHV0ID0gcG0uZHVtbXlfaW5zdGFsbChwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZnVsbF9tYW5pZmVzdCwgJ3crJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBwa2dfcmUgPSByZS5jb21waWxlKCdeSW5zdGFsbGluZyAoW14gXSspIFteIF0uKicpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzZXQob3V0cHV0LnNwbGl0KCdcbicpKToKKyAgICAgICAgICAgICAgICBtID0gcGtnX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUobS5ncm91cCgxKSArICdcbicpCisKKyAgICAgICAgcmV0dXJuCisKKworY2xhc3MgRHBrZ01hbmlmZXN0KE1hbmlmZXN0KToKKyAgICBkZWYgY3JlYXRlX2luaXRpYWwoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBwa2dfbGlzdCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorCisgICAgICAgICAgICAgICAgaWYgcGtnX2xpc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnX2xpc3Quc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXVt2YXJdLCBwa2cpKQorCisgICAgZGVmIGNyZWF0ZV9maW5hbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisKK2RlZiBjcmVhdGVfbWFuaWZlc3QoZCwgZmluYWxfbWFuaWZlc3Q9RmFsc2UsIG1hbmlmZXN0X2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfSU1BR0UpOgorICAgIG1hbmlmZXN0X21hcCA9IHsncnBtJzogUnBtTWFuaWZlc3QsCisgICAgICAgICAgICAgICAgICAgICdpcGsnOiBPcGtnTWFuaWZlc3QsCisgICAgICAgICAgICAgICAgICAgICdkZWInOiBEcGtnTWFuaWZlc3R9CisKKyAgICBtYW5pZmVzdCA9IG1hbmlmZXN0X21hcFtkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpXShkLCBtYW5pZmVzdF9kaXIsIG1hbmlmZXN0X3R5cGUpCisKKyAgICBpZiBmaW5hbF9tYW5pZmVzdDoKKyAgICAgICAgbWFuaWZlc3QuY3JlYXRlX2ZpbmFsKCkKKyAgICBlbHNlOgorICAgICAgICBtYW5pZmVzdC5jcmVhdGVfaW5pdGlhbCgpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2UucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3NjQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZS5weQpAQCAtMCwwICsxLDEyNSBAQAorZGVmIHJ1bnN0cmlwKGFyZyk6CisgICAgIyBGdW5jdGlvbiB0byBzdHJpcCBhIHNpbmdsZSBmaWxlLCBjYWxsZWQgZnJvbSBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgYmVsb3cKKyAgICAjIEEgd29ya2luZyAnZmlsZScgKG9uZSB3aGljaCB3b3JrcyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSkKKyAgICAjCisgICAgIyBUaGUgZWxmdHlwZSBpcyBhIGJpdCBwYXR0ZXJuIChleHBsYWluZWQgaW4gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzKSB0byB0ZWxsCisgICAgIyB1cyB3aGF0IHR5cGUgb2YgZmlsZSB3ZSdyZSBwcm9jZXNzaW5nLi4uCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKworICAgIGltcG9ydCBjb21tYW5kcywgc3RhdCwgc3VicHJvY2VzcworCisgICAgKGZpbGUsIGVsZnR5cGUsIHN0cmlwKSA9IGFyZworCisgICAgbmV3bW9kZSA9IE5vbmUKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGZpbGUsIG9zLldfT0spIG9yIG9zLmFjY2VzcyhmaWxlLCBvcy5SX09LKToKKyAgICAgICAgb3JpZ21vZGUgPSBvcy5zdGF0KGZpbGUpW3N0YXQuU1RfTU9ERV0KKyAgICAgICAgbmV3bW9kZSA9IG9yaWdtb2RlIHwgc3RhdC5TX0lXUklURSB8IHN0YXQuU19JUkVBRAorICAgICAgICBvcy5jaG1vZChmaWxlLCBuZXdtb2RlKQorCisgICAgZXh0cmFmbGFncyA9ICIiCisKKyAgICAjIGtlcm5lbCBtb2R1bGUgICAgCisgICAgaWYgZWxmdHlwZSAmIDE2OgorICAgICAgICBleHRyYWZsYWdzID0gIi0tc3RyaXAtZGVidWcgLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tcHJlc2VydmUtZGF0ZXMiCisgICAgIyAuc28gYW5kIHNoYXJlZCBsaWJyYXJ5CisgICAgZWxpZiAiLnNvIiBpbiBmaWxlIGFuZCBlbGZ0eXBlICYgODoKKyAgICAgICAgZXh0cmFmbGFncyA9ICItLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50IC0tcmVtb3ZlLXNlY3Rpb249Lm5vdGUgLS1zdHJpcC11bm5lZWRlZCIKKyAgICAjIHNoYXJlZCBvciBleGVjdXRhYmxlOgorICAgIGVsaWYgZWxmdHlwZSAmIDggb3IgZWxmdHlwZSAmIDQ6CisgICAgICAgIGV4dHJhZmxhZ3MgPSAiLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIgorCisgICAgc3RyaXBjbWQgPSAiJyVzJyAlcyAnJXMnIiAlIChzdHJpcCwgZXh0cmFmbGFncywgZmlsZSkKKyAgICBiYi5kZWJ1ZygxLCAicnVuc3RyaXA6ICVzIiAlIHN0cmlwY21kKQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChzdHJpcGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBiYi5lcnJvcigicnVuc3RyaXA6ICclcycgc3RyaXAgY29tbWFuZCBmYWlsZWQgd2l0aCAlcyAoJXMpIiAlIChzdHJpcGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBpZiBuZXdtb2RlOgorICAgICAgICBvcy5jaG1vZChmaWxlLCBvcmlnbW9kZSkKKworICAgIHJldHVybgorCisKK2RlZiBmaWxlX3RyYW5zbGF0ZShmaWxlKToKKyAgICBmdCA9IGZpbGUucmVwbGFjZSgiQCIsICJAYXRAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIiAiLCAiQHNwYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJcdCIsICJAdGFiQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJbIiwgIkBvcGVuYnJhY2VAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIl0iLCAiQGNsb3NlYnJhY2VAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIl8iLCAiQHVuZGVyc2NvcmVAIikKKyAgICByZXR1cm4gZnQKKworZGVmIGZpbGVkZXBydW5uZXIoYXJnKToKKyAgICBpbXBvcnQgcmUsIHN1YnByb2Nlc3MsIHNobGV4CisKKyAgICAocGtnLCBwa2dmaWxlcywgcnBtZGVwcywgcGtnZGVzdCkgPSBhcmcKKyAgICBwcm92aWRlcyA9IHt9CisgICAgcmVxdWlyZXMgPSB7fQorCisgICAgciA9IHJlLmNvbXBpbGUocidbPD49XSsgK1teIF0qJykKKworICAgIGRlZiBwcm9jZXNzX2RlcHMocGlwZSwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpOgorICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICAgICAgZiA9IGxpbmUuc3BsaXQoIiAiLCAxKVswXS5zdHJpcCgpCisgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgiICIsIDEpWzFdLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJSZXF1aXJlczoiKToKKyAgICAgICAgICAgICAgICBpID0gcmVxdWlyZXMKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJQcm92aWRlczoiKToKKyAgICAgICAgICAgICAgICBpID0gcHJvdmlkZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZmlsZSA9IGYucmVwbGFjZShwa2dkZXN0ICsgIi8iICsgcGtnLCAiIikKKyAgICAgICAgICAgIGZpbGUgPSBmaWxlX3RyYW5zbGF0ZShmaWxlKQorICAgICAgICAgICAgdmFsdWUgPSBsaW5lLnNwbGl0KCI6IiwgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgdmFsdWUgPSByLnN1YihyJyhcZzwwPiknLCB2YWx1ZSkKKworICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgicnBtbGliKCIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB2YWx1ZSA9PSAicHl0aG9uIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlsZSBub3QgaW4gaToKKyAgICAgICAgICAgICAgICBpW2ZpbGVdID0gW10KKyAgICAgICAgICAgIGlbZmlsZV0uYXBwZW5kKHZhbHVlKQorCisgICAgICAgIHJldHVybiBwcm92aWRlcywgcmVxdWlyZXMKKworICAgIHRyeToKKyAgICAgICAgZGVwX3BvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdChycG1kZXBzKSArIHBrZ2ZpbGVzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwcm92aWRlcywgcmVxdWlyZXMgPSBwcm9jZXNzX2RlcHMoZGVwX3BvcGVuLnN0ZG91dCwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoInJwbWRlcHM6ICclcycgY29tbWFuZCBmYWlsZWQsICclcyciICUgKHNobGV4LnNwbGl0KHJwbWRlcHMpICsgcGtnZmlsZXMsIGUpKQorICAgICAgICByYWlzZSBlCisKKyAgICByZXR1cm4gKHBrZywgcHJvdmlkZXMsIHJlcXVpcmVzKQorCisKK2RlZiByZWFkX3NobGliX3Byb3ZpZGVycyhkKToKKyAgICBpbXBvcnQgcmUKKworICAgIHNobGliX3Byb3ZpZGVyID0ge30KKyAgICBzaGxpYnNfZGlycyA9IGQuZ2V0VmFyKCdTSExJQlNESVJTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGxpc3RfcmUgPSByZS5jb21waWxlKCdeKC4qKVwubGlzdCQnKQorICAgICMgR28gZnJvbSBsZWFzdCB0byBtb3N0IHNwZWNpZmljIHNpbmNlIHRoZSBsYXN0IG9uZSBmb3VuZCB3aW5zCisgICAgZm9yIGRpciBpbiByZXZlcnNlZChzaGxpYnNfZGlycyk6CisgICAgICAgIGJiLmRlYnVnKDIsICJSZWFkaW5nIHNobGliIHByb3ZpZGVycyBpbiAlcyIgJSAoZGlyKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKGRpcik6CisgICAgICAgICAgICBtID0gbGlzdF9yZS5tYXRjaChmaWxlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkZXBfcGtnID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGZkID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmaWxlKSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBzID0gbC5zdHJpcCgpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgaWYgc1swXSBub3QgaW4gc2hsaWJfcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXSA9IHt9CisgICAgICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW3NbMF1dW3NbMV1dID0gKGRlcF9wa2csIHNbMl0pCisgICAgcmV0dXJuIHNobGliX3Byb3ZpZGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZV9tYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmVkNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weQpAQCAtMCwwICsxLDE5MDAgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IG9zCitpbXBvcnQgZ2xvYgoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCByZQoraW1wb3J0IGJiCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBvZS51dGlscworCisKKyMgdGhpcyBjYW4gYmUgdXNlZCBieSBhbGwgUE0gYmFja2VuZHMgdG8gY3JlYXRlIHRoZSBpbmRleCBmaWxlcyBpbiBwYXJhbGxlbAorZGVmIGNyZWF0ZV9pbmRleChhcmcpOgorICAgIGluZGV4X2NtZCA9IGFyZworCisgICAgdHJ5OgorICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgJyVzJyAuLi4iICUgaW5kZXhfY21kKQorICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChpbmRleF9jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuKCJJbmRleCBjcmVhdGlvbiBjb21tYW5kICclcycgZmFpbGVkIHdpdGggcmV0dXJuIGNvZGUgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGlmIHJlc3VsdDoKKyAgICAgICAgYmIubm90ZShyZXN1bHQpCisKKyAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIEluZGV4ZXIob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIGRlcGxveV9kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IGRlcGxveV9kaXIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJwbUluZGV4ZXIoSW5kZXhlcik6CisgICAgZGVmIGdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3Qoc2VsZiwgYXJjaF92YXI9Tm9uZSwgb3NfdmFyPU5vbmUpOgorICAgICAgICBwYWNrYWdlX2FyY2hzID0geworICAgICAgICAgICAgJ2RlZmF1bHQnOiBbXSwKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldF9vcyA9IHsKKyAgICAgICAgICAgICdkZWZhdWx0JzogIiIsCisgICAgICAgIH0KKworICAgICAgICBpZiBhcmNoX3ZhciBpcyBub3QgTm9uZSBhbmQgb3NfdmFyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcihhcmNoX3ZhciwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddLnJldmVyc2UoKQorICAgICAgICAgICAgdGFyZ2V0X29zWydkZWZhdWx0J10gPSBzZWxmLmQuZ2V0VmFyKG9zX3ZhciwgVHJ1ZSkuc3RyaXAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcigiUEFDS0FHRV9BUkNIUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgICMgYXJjaCBvcmRlciBpcyByZXZlcnNlZC4gIFRoaXMgZW5zdXJlcyB0aGUgLWJlc3QtIG1hdGNoIGlzCisgICAgICAgICAgICAjIGxpc3RlZCBmaXJzdCEKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXS5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRhcmdldF9vc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkuc3RyaXAoKQorICAgICAgICAgICAgbXVsdGlsaWJzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBleHQgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmVfa2V5ID0gIkRFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0iICsgZWV4dFsxXQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmUgPSBsb2NhbGRhdGEuZ2V0VmFyKGRlZmF1bHRfdHVuZV9rZXksIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0X3R1bmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdHVuZV9rZXkgPSAiREVGQVVMVFRVTkVfTUxfIiArIGVleHRbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdHVuZSA9IGxvY2FsZGF0YS5nZXRWYXIoZGVmYXVsdF90dW5lX2tleSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlZmF1bHRfdHVuZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgZGVmYXVsdF90dW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2FyY2hzW2VleHRbMV1dID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9BUkNIUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2FyY2hzW2VleHRbMV1dLnJldmVyc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X29zW2VleHRbMV1dID0gbG9jYWxkYXRhLmdldFZhcigiVEFSR0VUX09TIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkuc3RyaXAoKQorCisgICAgICAgIG1sX3ByZWZpeF9saXN0ID0gZGljdCgpCisgICAgICAgIGZvciBtbGliIGluIHBhY2thZ2VfYXJjaHM6CisgICAgICAgICAgICBpZiBtbGliID09ICdkZWZhdWx0JzoKKyAgICAgICAgICAgICAgICBtbF9wcmVmaXhfbGlzdFttbGliXSA9IHBhY2thZ2VfYXJjaHNbbWxpYl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0gPSBsaXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBwYWNrYWdlX2FyY2hzW21saWJdOgorICAgICAgICAgICAgICAgICAgICBpZiBhcmNoIGluIFsnYWxsJywgJ25vYXJjaCcsICdhbnknXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdLmFwcGVuZChhcmNoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0uYXBwZW5kKG1saWIgKyAiXyIgKyBhcmNoKQorCisgICAgICAgIHJldHVybiAobWxfcHJlZml4X2xpc3QsIHRhcmdldF9vcykKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2RrX3BrZ19hcmNocyA9IChzZWxmLmQuZ2V0VmFyKCdTREtfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisgICAgICAgIGFsbF9tbGJfcGtnX2FyY2hzID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKworICAgICAgICBtbGJfcHJlZml4X2xpc3QgPSBzZWxmLmdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3QoKVswXQorCisgICAgICAgIGFyY2hzID0gc2V0KCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gbWxiX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgYXJjaHMgPSBhcmNocy51bmlvbihzZXQoaS5yZXBsYWNlKCctJywgJ18nKSBmb3IgaSBpbiBtbGJfcHJlZml4X2xpc3RbaXRlbV0pKQorCisgICAgICAgIGlmIGxlbihhcmNocykgPT0gMDoKKyAgICAgICAgICAgIGFyY2hzID0gYXJjaHMudW5pb24oc2V0KGFsbF9tbGJfcGtnX2FyY2hzKSkKKworICAgICAgICBhcmNocyA9IGFyY2hzLnVuaW9uKHNldChzZGtfcGtnX2FyY2hzKSkKKworICAgICAgICBycG1fY3JlYXRlcmVwbyA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiY3JlYXRlcmVwbyIpCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgcGtnZmVlZF9ncGdfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfTkFNRScsIFRydWUpCisgICAgICAgICAgICBwa2dmZWVkX2dwZ19wYXNzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX0dQR19QQVNTUEhSQVNFX0ZJTEUnLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnZmVlZF9ncGdfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX3Bhc3MgPSBOb25lCisgICAgICAgIGdwZ19iaW4gPSBzZWxmLmQuZ2V0VmFyKCdHUEdfQklOJywgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgICAgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJncGciKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICByZXBvX3NpZ25fY21kcyA9IFtdCisgICAgICAgIHJwbV9kaXJzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGFyY2ggaW4gYXJjaHM6CisgICAgICAgICAgICBkYnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLCAncnBtZGInLCBhcmNoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGJwYXRoKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZGJwYXRoLCBUcnVlKQorICAgICAgICAgICAgYXJjaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJjaF9kaXIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGluZGV4X2NtZHMuYXBwZW5kKCIlcyAtLWRicGF0aCAlcyAtLXVwZGF0ZSAtcSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChycG1fY3JlYXRlcmVwbywgZGJwYXRoLCBhcmNoX2RpcikpCisgICAgICAgICAgICBpZiBwa2dmZWVkX2dwZ19uYW1lOgorICAgICAgICAgICAgICAgIHJlcG9tZF9maWxlID0gb3MucGF0aC5qb2luKGFyY2hfZGlyLCAncmVwb2RhdGEnLCAncmVwb21kLnhtbCcpCisgICAgICAgICAgICAgICAgZ3BnX2NtZCA9ICIlcyAtLWRldGFjaC1zaWduIC0tYXJtb3IgLS1iYXRjaCAtLW5vLXR0eSAtLXllcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcGFzc3BocmFzZS1maWxlICclcycgLXUgJyVzJyAlcyIgJSAoZ3BnX2JpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnZmVlZF9ncGdfcGFzcywgcGtnZmVlZF9ncGdfbmFtZSwgcmVwb21kX2ZpbGUpCisgICAgICAgICAgICAgICAgcmVwb19zaWduX2NtZHMuYXBwZW5kKGdwZ19jbWQpCisKKyAgICAgICAgICAgIHJwbV9kaXJzX2ZvdW5kID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBycG1fZGlyc19mb3VuZDoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyBpbiAlcyIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENyZWF0ZSByZXBvZGF0YQorICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorICAgICAgICAjIFNpZ24gcmVwb21kCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHJlcG9fc2lnbl9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorICAgICAgICAjIENvcHkgcHVia2V5KHMpIHRvIHJlcG8KKyAgICAgICAgZGlzdHJvX3ZlcnNpb24gPSBzZWxmLmQuZ2V0VmFyKCdESVNUUk9fVkVSU0lPTicsIFRydWUpIG9yICJvZS4wIgorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5MihzZWxmLmQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSUE0tR1BHLUtFWS0lcycgJSBkaXN0cm9fdmVyc2lvbikpCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfUFVCS0VZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JFUE9EQVRBLUdQRy1LRVktJXMnICUgZGlzdHJvX3ZlcnNpb24pKQorCisKK2NsYXNzIE9wa2dJbmRleGVyKEluZGV4ZXIpOgorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgYXJjaF92YXJzID0gWyJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsCisgICAgICAgICAgICAgICAgICAgICAiU0RLX1BBQ0tBR0VfQVJDSFMiLAorICAgICAgICAgICAgICAgICAgICAgIk1VTFRJTElCX0FSQ0hTIl0KKworICAgICAgICBvcGtnX2luZGV4X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1tYWtlLWluZGV4IikKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgIlBhY2thZ2VzIikpOgorICAgICAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCAiUGFja2FnZXMiKSwgInciKS5jbG9zZSgpCisKKyAgICAgICAgaW5kZXhfY21kcyA9IFtdCisgICAgICAgIGZvciBhcmNoX3ZhciBpbiBhcmNoX3ZhcnM6CisgICAgICAgICAgICBhcmNocyA9IHNlbGYuZC5nZXRWYXIoYXJjaF92YXIsIFRydWUpCisgICAgICAgICAgICBpZiBhcmNocyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcGtnc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgICAgIHBrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihwa2dzX2RpciwgIlBhY2thZ2VzIikKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBrZ3NfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dzX2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBvcGVuKHBrZ3NfZmlsZSwgInciKS5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZCgnJXMgLXIgJXMgLXAgJXMgLW0gJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BrZ19pbmRleF9jbWQsIHBrZ3NfZmlsZSwgcGtnc19maWxlLCBwa2dzX2RpcikpCisKKyAgICAgICAgaWYgbGVuKGluZGV4X2NtZHMpID09IDA6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgaW4gJXMhIiAlIHNlbGYuZGVwbG95X2RpcikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKGluZGV4X2NtZHMsIGNyZWF0ZV9pbmRleCkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgYmIuZmF0YWwoJyVzJyAlICgnXG4nLmpvaW4ocmVzdWx0KSkpCisKKworCitjbGFzcyBEcGtnSW5kZXhlcihJbmRleGVyKToKKyAgICBkZWYgX2NyZWF0ZV9jb25maWdzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJsaXN0cyIsICJwYXJ0aWFsIikpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJhcHQuY29uZi5kIikpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJwcmVmZXJlbmNlcy5kIikpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInByZWZlcmVuY2VzIiksCisgICAgICAgICAgICAgICAgInciKSBhcyBwcmVmc19maWxlOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAic291cmNlcy5saXN0IiksCisgICAgICAgICAgICAgICAgIncrIikgYXMgc291cmNlc19maWxlOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggb3BlbihzZWxmLmFwdF9jb25mX2ZpbGUsICJ3IikgYXMgYXB0X2NvbmY6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZC5leHBhbmQoIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfSIpLAorICAgICAgICAgICAgICAgICJhcHQiLCAiYXB0LmNvbmYuc2FtcGxlIikpIGFzIGFwdF9jb25mX3NhbXBsZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBhcHRfY29uZl9zYW1wbGUucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjUk9PVEZTIyIsICIvZGV2L251bGwiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjQVBUQ09ORiMiLCBzZWxmLmFwdF9jb25mX2RpciwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYXB0X2NvbmYud3JpdGUobGluZSArICJcbiIpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5leHBhbmQoIiR7QVBUQ09ORl9UQVJHRVR9IiksCisgICAgICAgICAgICAgICAgImFwdC1mdHBhcmNoaXZlIikKKyAgICAgICAgc2VsZi5hcHRfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAiYXB0LmNvbmYiKQorICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlncygpCisKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgcGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpCisgICAgICAgIGlmIHBrZ19hcmNocyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyY2hfbGlzdCA9IHBrZ19hcmNocy5zcGxpdCgpCisgICAgICAgIHNka19wa2dfYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKCdTREtfUEFDS0FHRV9BUkNIUycsIFRydWUpCisgICAgICAgIGlmIHNka19wa2dfYXJjaHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgYSBpbiBzZGtfcGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgYSBub3QgaW4gcGtnX2FyY2hzOgorICAgICAgICAgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGEpCisKKyAgICAgICAgYWxsX21sYl9wa2dfYXJjaF9saXN0ID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKyAgICAgICAgYXJjaF9saXN0LmV4dGVuZChhcmNoIGZvciBhcmNoIGluIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCBpZiBhcmNoIG5vdCBpbiBhcmNoX2xpc3QpCisKKyAgICAgICAgYXB0X2Z0cGFyY2hpdmUgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImFwdC1mdHBhcmNoaXZlIikKKyAgICAgICAgZ3ppcCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZ3ppcCIpCisKKyAgICAgICAgaW5kZXhfY21kcyA9IFtdCisgICAgICAgIGRlYl9kaXJzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgYXJjaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJjaF9kaXIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNtZCA9ICJjZCAlczsgUFNFVURPX1VOTE9BRD0xICVzIHBhY2thZ2VzIC4gPiBQYWNrYWdlczsiICUgKGFyY2hfZGlyLCBhcHRfZnRwYXJjaGl2ZSkKKworICAgICAgICAgICAgY21kICs9ICIlcyAtZmMgUGFja2FnZXMgPiBQYWNrYWdlcy5nejsiICUgZ3ppcAorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGFyY2hfZGlyLCAiUmVsZWFzZSIpLCAidysiKSBhcyByZWxlYXNlOgorICAgICAgICAgICAgICAgIHJlbGVhc2Uud3JpdGUoIkxhYmVsOiAlc1xuIiAlIGFyY2gpCisKKyAgICAgICAgICAgIGNtZCArPSAiUFNFVURPX1VOTE9BRD0xICVzIHJlbGVhc2UgLiA+PiBSZWxlYXNlIiAlIGFwdF9mdHBhcmNoaXZlCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluZGV4X2NtZHMuYXBwZW5kKGNtZCkKKworICAgICAgICAgICAgZGViX2RpcnNfZm91bmQgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IGRlYl9kaXJzX2ZvdW5kOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIGluICVzIiAlIHNlbGYuZGVwbG95X2RpcikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKGluZGV4X2NtZHMsIGNyZWF0ZV9pbmRleCkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgYmIuZmF0YWwoJyVzJyAlICgnXG4nLmpvaW4ocmVzdWx0KSkpCisKKworCitjbGFzcyBQa2dzTGlzdChvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2Rpcik6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5yb290ZnNfZGlyID0gcm9vdGZzX2RpcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgUnBtUGtnc0xpc3QoUGtnc0xpc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCByb290ZnNfZGlyLCBhcmNoX3Zhcj1Ob25lLCBvc192YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJwbVBrZ3NMaXN0LCBzZWxmKS5fX2luaXRfXyhkLCByb290ZnNfZGlyKQorCisgICAgICAgIHNlbGYucnBtX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtIikKKyAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIgPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZnNfZGlyLCAndmFyL2xpYi9ycG0nKQorCisgICAgICAgIHNlbGYubWxfcHJlZml4X2xpc3QsIHNlbGYubWxfb3NfbGlzdCA9IFwKKyAgICAgICAgICAgIFJwbUluZGV4ZXIoZCwgcm9vdGZzX2RpcikuZ2V0X21sX3ByZWZpeF9hbmRfb3NfbGlzdChhcmNoX3Zhciwgb3NfdmFyKQorCisgICAgICAgICMgRGV0ZXJtaW5lIHJwbSB2ZXJzaW9uCisgICAgICAgIGNtZCA9ICIlcyAtLXZlcnNpb24iICUgc2VsZi5ycG1fY21kCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJHZXR0aW5nIHJwbSB2ZXJzaW9uIGZhaWxlZC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICBzZWxmLnJwbV92ZXJzaW9uID0gaW50KG91dHB1dC5zcGxpdCgpWy0xXS5zcGxpdCgnLicpWzBdKQorCisgICAgJycnCisgICAgVHJhbnNsYXRlIHRoZSBSUE0vU21hcnQgZm9ybWF0IG5hbWVzIHRvIHRoZSBPRSBtdWx0aWxpYiBmb3JtYXQgbmFtZXMKKyAgICAnJycKKyAgICBkZWYgX3BrZ190cmFuc2xhdGVfc21hcnRfdG9fb2Uoc2VsZiwgcGtnLCBhcmNoKToKKyAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICBuZXdfYXJjaCA9IGFyY2gKKyAgICAgICAgZml4ZWRfYXJjaCA9IGFyY2gucmVwbGFjZSgnXycsICctJykKKyAgICAgICAgZm91bmQgPSAwCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfcHJlZml4X2xpc3Q6CisgICAgICAgICAgICBmb3IgY21wX2FyY2ggaW4gc2VsZi5tbF9wcmVmaXhfbGlzdFttbGliXToKKyAgICAgICAgICAgICAgICBmaXhlZF9jbXBfYXJjaCA9IGNtcF9hcmNoLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICAgICAgaWYgZml4ZWRfYXJjaCA9PSBmaXhlZF9jbXBfYXJjaDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gcGtnCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJjaCA9IGNtcF9hcmNoCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gbWxpYiArICctJyArIHBrZworICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHN0cmlwIG9mZiB0aGUgJHttbGlifV8gcHJlZml4IG9uIHRoZSBhcmNoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJjaCA9IGNtcF9hcmNoLnJlcGxhY2UobWxpYiArICdfJywgJycpCisKKyAgICAgICAgICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBidWcgMzU2NS4gU2ltcGx5IGxvb2sgdG8gc2VlIGlmIHdlCisgICAgICAgICAgICAgICAgICAgICMga25vdyBvZiBhIHBhY2thZ2Ugd2l0aCB0aGF0IG5hbWUsIGlmIG5vdCB0cnkgYWdhaW4hCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW50aW1lLXJldmVyc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGZvdW5kID09IDEgYW5kIGZpeGVkX2FyY2ggPT0gZml4ZWRfY21wX2FyY2g6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgI2JiLm5vdGUoJyVzLCAlcyAtPiAlcywgJXMnICUgKHBrZywgYXJjaCwgbmV3X3BrZywgbmV3X2FyY2gpKQorICAgICAgICByZXR1cm4gbmV3X3BrZywgbmV3X2FyY2gKKworICAgIGRlZiBfbGlzdF9wa2dfZGVwcyhzZWxmKToKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtcmVzb2x2ZSIpLAorICAgICAgICAgICAgICAgIi10Iiwgc2VsZi5pbWFnZV9ycG1saWJdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCB0aGUgcGFja2FnZSBkZXBlbmRlbmNpZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCInZGVwcycgZm9ybWF0IGRlcGVuZGVuY3kgbGlzdGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBycG0gNCBzaW5jZSBycG1yZXNvbHZlIGRvZXMgbm90IHdvcmsiKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RfcGtnX2RlcHMoKQorCisgICAgICAgIGNtZCA9IHNlbGYucnBtX2NtZCArICcgLS1yb290ICcgKyBzZWxmLnJvb3Rmc19kaXIKKyAgICAgICAgY21kICs9ICcgLUQgIl9kYnBhdGggL3Zhci9saWIvcnBtIiAtcWEnCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgIGNtZCArPSAiIC0tcWYgJ1sle05BTUV9ICV7QVJDSH0gJXtWRVJTSU9OfVxuXSciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgKz0gIiAtLXFmICdbJXtOQU1FfSAle0FSQ0h9ICV7VkVSU0lPTn0gJXtQQUNLQUdFT1JJR0lOfVxuXSciCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKQorCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgb3V0cHV0ID0gbGlzdCgpCisgICAgICAgIGZvciBsaW5lIGluIHRtcF9vdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiBsZW4obGluZS5zdHJpcCgpKSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwa2cgPSBsaW5lLnNwbGl0KClbMF0KKyAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoKVsyXQorICAgICAgICAgICAgIyBTa2lwIEdQRyBrZXlzCisgICAgICAgICAgICBpZiBwa2cgPT0gJ2dwZy1wdWJrZXknOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICAgICAgcGtnb3JpZ2luID0gInVua25vd24iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ29yaWdpbiA9IGxpbmUuc3BsaXQoKVszXQorICAgICAgICAgICAgbmV3X3BrZywgbmV3X2FyY2ggPSBzZWxmLl9wa2dfdHJhbnNsYXRlX3NtYXJ0X3RvX29lKHBrZywgYXJjaCkKKworICAgICAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcycgJSAobmV3X3BrZywgbmV3X2FyY2gpKQorICAgICAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzICVzICVzJyAlIChuZXdfcGtnLCBwa2dvcmlnaW4sIG5ld19hcmNoKSkKKyAgICAgICAgICAgIGVsaWYgZm9ybWF0ID09ICJ2ZXIiOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzICVzICVzJyAlIChuZXdfcGtnLCBuZXdfYXJjaCwgdmVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJXMnICUgKG5ld19wa2cpKQorCisgICAgICAgICAgICBvdXRwdXQuc29ydCgpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihvdXRwdXQpCisKKworY2xhc3MgT3BrZ1BrZ3NMaXN0KFBrZ3NMaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2RpciwgY29uZmlnX2ZpbGUpOgorICAgICAgICBzdXBlcihPcGtnUGtnc0xpc3QsIHNlbGYpLl9faW5pdF9fKGQsIHJvb3Rmc19kaXIpCisKKyAgICAgICAgc2VsZi5vcGtnX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZyIpCisgICAgICAgIHNlbGYub3BrZ19hcmdzID0gIi1mICVzIC1vICVzICIgJSAoY29uZmlnX2ZpbGUsIHJvb3Rmc19kaXIpCisgICAgICAgIHNlbGYub3BrZ19hcmdzICs9IHNlbGYuZC5nZXRWYXIoIk9QS0dfQVJHUyIsIFRydWUpCisKKyAgICBkZWYgbGlzdChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIG9wa2dfcXVlcnlfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvcGtnLXF1ZXJ5LWhlbHBlci5weSIpCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtYSIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgY21kID0gIiVzICVzIHN0YXR1cyB8ICVzIC1mIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsIG9wa2dfcXVlcnlfY21kKQorICAgICAgICBlbGlmIGZvcm1hdCA9PSAidmVyIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtdiIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgY21kID0gIiVzICVzIHN0YXR1cyB8ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsIG9wa2dfcXVlcnlfY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzICVzIGxpc3RfaW5zdGFsbGVkIHwgY3V0IC1kJyAnIC1mMSIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgaWYgb3V0cHV0IGFuZCBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgdG1wX291dHB1dCA9ICIiCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgcGtnLCBwa2dfZmlsZSwgcGtnX2FyY2ggPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZnNfZGlyLCBwa2dfYXJjaCwgcGtnX2ZpbGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgdG1wX291dHB1dCArPSAiJXMgJXMgJXNcbiIgJSAocGtnLCBmdWxsX3BhdGgsIHBrZ19hcmNoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoKQorCisgICAgICAgICAgICBvdXRwdXQgPSB0bXBfb3V0cHV0CisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIERwa2dQa2dzTGlzdChQa2dzTGlzdCk6CisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJkcGtnLXF1ZXJ5IiksCisgICAgICAgICAgICAgICAiLS1hZG1pbmRpcj0lcy92YXIvbGliL2Rwa2ciICUgc2VsZi5yb290ZnNfZGlyLAorICAgICAgICAgICAgICAgIi1XIl0KKworICAgICAgICBpZiBmb3JtYXQgPT0gImFyY2giOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2VBcmNofVxuIikKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2V9XyR7VmVyc2lvbn1fJHtBcmNoaXRlY3R1cmV9LmRlYiAke1BhY2thZ2VBcmNofVxuIikKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gInZlciI6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj0ke1BhY2thZ2V9ICR7UGFja2FnZUFyY2h9ICR7VmVyc2lvbn1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPVBhY2thZ2U6ICR7UGFja2FnZX1cbkRlcGVuZHM6ICR7RGVwZW5kc31cblJlY29tbWVuZHM6ICR7UmVjb21tZW5kc31cblxuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX1cbiIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIGxpc3QuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSAiIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHVwbGUob3V0cHV0LnNwbGl0KCdcbicpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgcGtnX2FyY2gsIHBrZ19maWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgZnVsbF9wYXRoLCBwa2dfYXJjaCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIHBrZ19maWxlLCBwa2dfYXJjaCkKKworICAgICAgICAgICAgb3V0cHV0ID0gdG1wX291dHB1dAorICAgICAgICBlbGlmIGZvcm1hdCA9PSAiZGVwcyI6CisgICAgICAgICAgICBvcGtnX3F1ZXJ5X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1xdWVyeS1oZWxwZXIucHkiKQorICAgICAgICAgICAgZmlsZV9vdXQgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgZmlsZV9vdXQud3JpdGUob3V0cHV0KQorICAgICAgICAgICAgZmlsZV9vdXQuZmx1c2goKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImNhdCAlcyB8ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVfb3V0Lm5hbWUsIG9wa2dfcXVlcnlfY21kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGZpbGVfb3V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGNvbXB1dGUgcGFja2FnZXMgZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgICAgIGZpbGVfb3V0LmNsb3NlKCkKKworICAgICAgICByZXR1cm4gb3V0cHV0CisKKworY2xhc3MgUGFja2FnZU1hbmFnZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IE5vbmUKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IE5vbmUKKyAgICAgICAgc2VsZi5mZWVkX3VyaXMgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfVVJJUycsIFRydWUpIG9yICIiCisgICAgICAgIHNlbGYuZmVlZF9wcmVmaXggPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfUFJFRklYJywgVHJ1ZSkgb3IgIiIKKworICAgICIiIgorICAgIFVwZGF0ZSB0aGUgcGFja2FnZSBtYW5hZ2VyIHBhY2thZ2UgZGF0YWJhc2UuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgSW5zdGFsbCBhIGxpc3Qgb2YgcGFja2FnZXMuICdwa2dzJyBpcyBhIGxpc3Qgb2JqZWN0LiBJZiAnYXR0ZW1wdF9vbmx5JyBpcworICAgIFRydWUsIGluc3RhbGxhdGlvbiBmYWlsdXJlcyBhcmUgaWdub3JlZC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBSZW1vdmUgYSBsaXN0IG9mIHBhY2thZ2VzLiAncGtncycgaXMgYSBsaXN0IG9iamVjdC4gSWYgJ3dpdGhfZGVwZW5kZW5jaWVzJworICAgIGlzIEZhbHNlLCB0aGUgYW55IGRlcGVuZGVuY2llcyBhcmUgbGVmdCBpbiBwbGFjZS4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGluZGV4IGZpbGVzCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIEluc3RhbGwgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBiYXNlZCB1cG9uIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBpbnN0YWxsZWQKKyAgICBwYWNrYWdlcyBlLmcuIGxvY2FsZXMsICotZGV2LCAqLWRiZywgZXRjLiBUaGlzIHdpbGwgb25seSBhdHRlbXB0IHRvIGluc3RhbGwKKyAgICB0aGVzZSBwYWNrYWdlcywgaWYgdGhleSBkb24ndCBleGlzdCB0aGVuIG5vIGVycm9yIHdpbGwgb2NjdXIuICBOb3RlOiBldmVyeQorICAgIGJhY2tlbmQgbmVlZHMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgYWZ0ZXIgdGhlIG5vcm1hbCBwYWNrYWdlCisgICAgaW5zdGFsbGF0aW9uCisgICAgIiIiCisgICAgZGVmIGluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLCBnbG9icz1Ob25lKToKKyAgICAgICAgIyB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyB0byBhIGZpbGUgYmVjYXVzZSB0aGUKKyAgICAgICAgIyBvZS1wa2dkYXRhLXV0aWwgcmVhZHMgaXQgZnJvbSBhIGZpbGUKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGxlZF9wa2dzLnR4dCIpCisgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19maWxlLCAidysiKSBhcyBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLndyaXRlKHNlbGYubGlzdF9pbnN0YWxsZWQoImFyY2giKSkKKworICAgICAgICBpZiBnbG9icyBpcyBOb25lOgorICAgICAgICAgICAgZ2xvYnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKQorICAgICAgICAgICAgc3BsaXRfbGluZ3VhcyA9IHNldCgpCisKKyAgICAgICAgICAgIGZvciB0cmFuc2xhdGlvbiBpbiBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5HVUFTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5ndWFzLmFkZCh0cmFuc2xhdGlvbikKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5ndWFzLmFkZCh0cmFuc2xhdGlvbi5zcGxpdCgnLScpWzBdKQorCisgICAgICAgICAgICBzcGxpdF9saW5ndWFzID0gc29ydGVkKHNwbGl0X2xpbmd1YXMpCisKKyAgICAgICAgICAgIGZvciBsYW5nIGluIHNwbGl0X2xpbmd1YXM6CisgICAgICAgICAgICAgICAgZ2xvYnMgKz0gIiAqLWxvY2FsZS0lcyIgJSBsYW5nCisKKyAgICAgICAgaWYgZ2xvYnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9IFtiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9lLXBrZ2RhdGEtdXRpbCIpLAorICAgICAgICAgICAgICAgIi1wIiwgc2VsZi5kLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKSwgImdsb2IiLCBpbnN0YWxsZWRfcGtnc19maWxlLAorICAgICAgICAgICAgICAgZ2xvYnNdCisgICAgICAgIGV4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREVfQ09NUExFTUVOVEFSWScsIFRydWUpCisgICAgICAgIGlmIGV4Y2x1ZGU6CisgICAgICAgICAgICBjbWQuZXh0ZW5kKFsnLXgnLCBleGNsdWRlXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIC4uLiIpCisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbXB1dGUgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmluc3RhbGwoY29tcGxlbWVudGFyeV9wa2dzLnNwbGl0KCksIGF0dGVtcHRfb25seT1UcnVlKQorCisgICAgZGVmIGRlcGxveV9kaXJfbG9jayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZXBsb3lfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImRlcGxveV9kaXIgaXMgbm90IHNldCEiKQorCisgICAgICAgIGxvY2tfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgImRlcGxveS5sb2NrIikKKworICAgICAgICBzZWxmLmRlcGxveV9sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja19maWxlX25hbWUpCisKKyAgICBkZWYgZGVwbG95X2Rpcl91bmxvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVwbG95X2xvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoc2VsZi5kZXBsb3lfbG9jaykKKworICAgICAgICBzZWxmLmRlcGxveV9sb2NrID0gTm9uZQorCisKK2NsYXNzIFJwbVBNKFBhY2thZ2VNYW5hZ2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgZCwKKyAgICAgICAgICAgICAgICAgdGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0X3ZlbmRvciwKKyAgICAgICAgICAgICAgICAgdGFza19uYW1lPSd0YXJnZXQnLAorICAgICAgICAgICAgICAgICBwcm92aWRlbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBhcmNoX3Zhcj1Ob25lLAorICAgICAgICAgICAgICAgICBvc192YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJwbVBNLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYudGFyZ2V0X3ZlbmRvciA9IHRhcmdldF92ZW5kb3IKKyAgICAgICAgc2VsZi50YXNrX25hbWUgPSB0YXNrX25hbWUKKyAgICAgICAgc2VsZi5wcm92aWRlbmFtZSA9IHByb3ZpZGVuYW1lCisgICAgICAgIHNlbGYuZnVsbHBrZ2xpc3QgPSBsaXN0KCkKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKQorICAgICAgICBzZWxmLmV0Y3JwbV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAiZXRjL3JwbSIpCisgICAgICAgIHNlbGYuaW5zdGFsbF9kaXJfbmFtZSA9ICJvZV9pbnN0YWxsIgorICAgICAgICBzZWxmLmluc3RhbGxfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLmluc3RhbGxfZGlyX25hbWUpCisgICAgICAgIHNlbGYucnBtX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtIikKKyAgICAgICAgc2VsZi5zbWFydF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInNtYXJ0IikKKyAgICAgICAgc2VsZi5zbWFydF9vcHQgPSAiLS1sb2ctbGV2ZWw9d2FybmluZyAtLWRhdGEtZGlyPSIgKyBvcy5wYXRoLmpvaW4odGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXIvbGliL3NtYXJ0JykKKyAgICAgICAgc2VsZi5zY3JpcHRsZXRfd3JhcHBlciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vc2NyaXB0bGV0X3dyYXBwZXInKQorICAgICAgICBzZWxmLnNvbHV0aW9uX21hbmlmZXN0ID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lc19zb2x1dGlvbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgc2VsZi5zYXZlZF9ycG1saWIgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkLyVzJyAlIHNlbGYudGFza19uYW1lKQorICAgICAgICBzZWxmLmltYWdlX3JwbWxpYiA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsICd2YXIvbGliL3JwbScpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKQorCisgICAgICAgIHNlbGYuaW5kZXhlciA9IFJwbUluZGV4ZXIoc2VsZi5kLCBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgIHNlbGYucGtnc19saXN0ID0gUnBtUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMsIGFyY2hfdmFyLCBvc192YXIpCisgICAgICAgIHNlbGYucnBtX3ZlcnNpb24gPSBzZWxmLnBrZ3NfbGlzdC5ycG1fdmVyc2lvbgorCisgICAgICAgIHNlbGYubWxfcHJlZml4X2xpc3QsIHNlbGYubWxfb3NfbGlzdCA9IHNlbGYuaW5kZXhlci5nZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KGFyY2hfdmFyLCBvc192YXIpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBMaXN0IG11c3QgYmUgcHJlZmVyZWQgdG8gbGVhc3QgcHJlZmVycmVkIG9yZGVyCisgICAgICAgIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IHNldCgpCisgICAgICAgIGJiZXh0ZW5kdmFyaWFudCA9IHNlbGYuZC5nZXRWYXIoJ0JCRVhURU5EVkFSSUFOVCcsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfb3NfbGlzdDoKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgcGx0ID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKSArICctLiotJyArIHNlbGYubWxfb3NfbGlzdFttbGliXQorICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gYmJleHRlbmR2YXJpYW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYS5hZGQocGx0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9leHRyYS5hZGQocGx0KQorCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gcGxhdGZvcm1fZXh0cmEudW5pb24oZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSkKKworICAgICAgICBhcmNoX2xpc3QgPSBbXQorICAgICAgICBmb3IgY2Fub25pY2FsX2FyY2ggaW4gcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICBhcmNoID0gY2Fub25pY2FsX2FyY2guc3BsaXQoJy0nKVswXQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYXJjaF9saXN0LmFwcGVuZChhcmNoKQorCisgICAgICAgIHVyaV9pdGVyYXRvciA9IDAKKyAgICAgICAgY2hhbm5lbF9wcmlvcml0eSA9IDEwICsgNSAqIGxlbihzZWxmLmZlZWRfdXJpcy5zcGxpdCgpKSAqIGxlbihhcmNoX2xpc3QpCisKKyAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgZnVsbF91cmkgPSB1cmkKKyAgICAgICAgICAgIGlmIHNlbGYuZmVlZF9wcmVmaXg6CisgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBTbWFydCBjaGFubmVsIHVybCVkJXMgKCVzKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHVybCVkLSVzIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMvJXMgLXknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHVyaV9pdGVyYXRvciwgYXJjaCwgZnVsbF91cmksIGFyY2gpKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLXNldCB1cmwlZC0lcyBwcmlvcml0eT0lZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJpX2l0ZXJhdG9yLCBhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5IC09IDUKKyAgICAgICAgICAgIHVyaV9pdGVyYXRvciArPSAxCisKKyAgICAnJycKKyAgICBDcmVhdGUgY29uZmlncyBmb3IgcnBtIGFuZCBzbWFydCwgYW5kIG11bHRpbGliIGlzIHN1cHBvcnRlZAorICAgICcnJworICAgIGRlZiBjcmVhdGVfY29uZmlncyhzZWxmKToKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSBzZWxmLmQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgICAgIHBsYXRmb3JtID0gJyVzJXMtJXMnICUgKHRhcmdldF9hcmNoLnJlcGxhY2UoJy0nLCAnXycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF92ZW5kb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWxfb3NfbGlzdFsnZGVmYXVsdCddKQorCisgICAgICAgICMgTGlzdCBtdXN0IGJlIHByZWZlcmVkIHRvIGxlYXN0IHByZWZlcnJlZCBvcmRlcgorICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhID0gbGlzdCgpCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gbGlzdCgpCisgICAgICAgIGJiZXh0ZW5kdmFyaWFudCA9IHNlbGYuZC5nZXRWYXIoJ0JCRVhURU5EVkFSSUFOVCcsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfb3NfbGlzdDoKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgcGx0ID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKSArICctLiotJyArIHNlbGYubWxfb3NfbGlzdFttbGliXQorICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gYmJleHRlbmR2YXJpYW50OgorICAgICAgICAgICAgICAgICAgICBpZiBwbHQgbm90IGluIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhLmFwcGVuZChwbHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGx0IG5vdCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2V4dHJhLmFwcGVuZChwbHQpCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSArIHBsYXRmb3JtX2V4dHJhCisKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MocGxhdGZvcm0sIHBsYXRmb3JtX2V4dHJhKQorCisgICAgZGVmIF9pbnZva2Vfc21hcnQoc2VsZiwgYXJncyk6CisgICAgICAgIGNtZCA9ICIlcyAlcyAlcyIgJSAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBhcmdzKQorICAgICAgICAjIGJiLm5vdGUoY21kKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKQorICAgICAgICAgICAgIyBiYi5ub3RlKGNvbXBsZW1lbnRhcnlfcGtncykKKyAgICAgICAgICAgIHJldHVybiBjb21wbGVtZW50YXJ5X3BrZ3MKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGludm9rZSBzbWFydC4gQ29tbWFuZCAiCisgICAgICAgICAgICAgICAgICAgICAiJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgZGVmIF9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMoc2VsZiwgcGtnLCBmZWVkX2FyY2hzKToKKyAgICAgICAgZm9yIGFyY2ggaW4gZmVlZF9hcmNoczoKKyAgICAgICAgICAgIGFyY2ggPSBhcmNoLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAgICAgICByZWdleF9tYXRjaCA9IHJlLmNvbXBpbGUociJeJXMtW14tXSotW14tXSpAJXMkIiAlIFwKKyAgICAgICAgICAgICAgICAocmUuZXNjYXBlKHBrZyksIHJlLmVzY2FwZShhcmNoKSkpCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bGxwa2dsaXN0OgorICAgICAgICAgICAgICAgIGlmIHJlZ2V4X21hdGNoLm1hdGNoKHApIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIEZpcnN0IGZvdW5kIGlzIGJlc3QgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgIyBiYi5ub3RlKCclcyAtPiAlcycgJSAocGtnLCBwa2cgKyAnQCcgKyBhcmNoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBrZyArICdAJyArIGFyY2gKKworICAgICAgICAjIFNlYXJjaCBwcm92aWRlcyBpZiBub3QgZm91bmQgYnkgcGtnbmFtZS4KKyAgICAgICAgYmIubm90ZSgnTm90IGZvdW5kICVzIGJ5IG5hbWUsIHNlYXJjaGluZyBwcm92aWRlcyAuLi4nICUgcGtnKQorICAgICAgICBjbWQgPSAiJXMgJXMgcXVlcnkgLS1wcm92aWRlcyAlcyAtLXNob3ctZm9ybWF0PSckbmFtZS0kdmVyc2lvbiciICUgXAorICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsIHBrZykKKyAgICAgICAgY21kICs9ICIgfCBzZWQgLW5lICdzLyAqUHJvdmlkZXM6Ly9wJyIKKyAgICAgICAgYmIubm90ZSgnY21kOiAlcycgJSBjbWQpCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAjIEZvdW5kIGEgcHJvdmlkZXIKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgYmIubm90ZSgnRm91bmQgcHJvdmlkZXJzIGZvciAlczogJXMnICUgKHBrZywgb3V0cHV0KSkKKyAgICAgICAgICAgIGZvciBwIGluIG91dHB1dC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGZlZWRfYXJjaHM6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBhcmNoLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAgICAgICAgICAgICAgIGlmIHAucnN0cmlwKCkuZW5kc3dpdGgoJ0AnICsgYXJjaCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcAorCisgICAgICAgIHJldHVybiAiIgorCisgICAgJycnCisgICAgVHJhbnNsYXRlIHRoZSBPRSBtdWx0aWxpYiBmb3JtYXQgbmFtZXMgdG8gdGhlIFJQTS9TbWFydCBmb3JtYXQgbmFtZXMKKyAgICBJdCBzZWFyY2hlZCB0aGUgUlBNL1NtYXJ0IGZvcm1hdCBuYW1lcyBpbiBwcm9iYWJsZSBtdWx0aWxpYiBmZWVkcyBmaXJzdCwKKyAgICBhbmQgdGhlbiBzZWFyY2hlZCB0aGUgZGVmYXVsdCBiYXNlIGZlZWQuCisgICAgJycnCisgICAgZGVmIF9wa2dfdHJhbnNsYXRlX29lX3RvX3NtYXJ0KHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIG5ld19wa2dzID0gbGlzdCgpCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAgICAgIyBTZWFyY2ggbmV3X3BrZyBpbiBwcm9iYWJsZSBtdWx0aWxpYnMgZmlyc3QKKyAgICAgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfcHJlZml4X2xpc3Q6CisgICAgICAgICAgICAgICAgIyBKdW1wIHRoZSBkZWZhdWx0IGFyY2hzCisgICAgICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzdWJzdCA9IHBrZy5yZXBsYWNlKG1saWIgKyAnLScsICcnKQorICAgICAgICAgICAgICAgICMgaWYgdGhlIHBrZyBpbiB0aGlzIG11bHRpbGliIGZlZWQKKyAgICAgICAgICAgICAgICBpZiBzdWJzdCAhPSBwa2c6CisgICAgICAgICAgICAgICAgICAgIGZlZWRfYXJjaHMgPSBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdCisgICAgICAgICAgICAgICAgICAgIG5ld19wa2cgPSBzZWxmLl9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMoc3Vic3QsIGZlZWRfYXJjaHMpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdfcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGYWlsZWQgdG8gdHJhbnNsYXRlLCBwYWNrYWdlIG5vdCBmb3VuZCEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAnJXMgbm90IGZvdW5kIGluIHRoZSAlcyBmZWVkcyAoJXMpLlxuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCBtbGliLCAiICIuam9pbihmZWVkX2FyY2hzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhdHRlbXB0X29ubHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyArPSAiICIuam9pbihzZWxmLmZ1bGxwa2dsaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtncy5hcHBlbmQobmV3X3BrZykKKworICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIEFwcGFyZW50bHkgbm90IGEgbXVsdGlsaWIgcGFja2FnZS4uLgorICAgICAgICAgICAgaWYgcGtnID09IG5ld19wa2c6CisgICAgICAgICAgICAgICAgIyBTZWFyY2ggbmV3X3BrZyBpbiBkZWZhdWx0IGFyY2hzCisgICAgICAgICAgICAgICAgZGVmYXVsdF9hcmNocyA9IHNlbGYubWxfcHJlZml4X2xpc3RbJ2RlZmF1bHQnXQorICAgICAgICAgICAgICAgIG5ld19wa2cgPSBzZWxmLl9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMocGtnLCBkZWZhdWx0X2FyY2hzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdfcGtnOgorICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gJyVzIG5vdCBmb3VuZCBpbiB0aGUgYmFzZSBmZWVkcyAoJXMpLlxuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csICcgJy5qb2luKGRlZmF1bHRfYXJjaHMpKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyArPSAiICIuam9pbihzZWxmLmZ1bGxwa2dsaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoZXJyX21zZykKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybihlcnJfbXNnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld19wa2dzLmFwcGVuZChuZXdfcGtnKQorCisgICAgICAgIHJldHVybiBuZXdfcGtncworCisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmLCBwbGF0Zm9ybSwgcGxhdGZvcm1fZXh0cmEpOgorICAgICAgICAjIFNldHVwIGJhc2Ugc3lzdGVtIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgUlBNIHBsYXRmb3JtIHNldHRpbmdzIikKKworICAgICAgICAjIENvbmZpZ3VyZSBpbnRlcm5hbCBSUE0gZW52aXJvbm1lbnQgd2hlbiB1c2luZyBTbWFydAorICAgICAgICBvcy5lbnZpcm9uWydSUE1fRVRDUlBNJ10gPSBzZWxmLmV0Y3JwbV9kaXIKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZXRjcnBtX2RpcikKKworICAgICAgICAjIFNldHVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgLS0gaW5zdGFsbC4uLgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmluc3RhbGxfZGlyX3BhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW5zdGFsbF9kaXJfcGF0aCwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyX3BhdGgsICd0bXAnKSkKKworICAgICAgICBjaGFubmVsX3ByaW9yaXR5ID0gNQorICAgICAgICBwbGF0Zm9ybV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5ldGNycG1fZGlyLCAicGxhdGZvcm0iKQorICAgICAgICBzZGtvcyA9IHNlbGYuZC5nZXRWYXIoIlNES19PUyIsIFRydWUpCisgICAgICAgIHdpdGggb3BlbihwbGF0Zm9ybV9kaXIsICJ3KyIpIGFzIHBsYXRmb3JtX2ZkOgorICAgICAgICAgICAgcGxhdGZvcm1fZmQud3JpdGUocGxhdGZvcm0gKyAnXG4nKQorICAgICAgICAgICAgZm9yIHB0IGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgKz0gNQorICAgICAgICAgICAgICAgIGlmIHNka29zOgorICAgICAgICAgICAgICAgICAgICB0bXAgPSByZS5zdWIoIi0lcyQiICUgc2Rrb3MsICItJXNcbiIgJSBzZGtvcywgcHQpCisgICAgICAgICAgICAgICAgdG1wID0gcmUuc3ViKCItbGludXguKiQiLCAiLWxpbnV4LipcbiIsIHRtcCkKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybV9mZC53cml0ZSh0bXApCisKKyAgICAgICAgIyBUZWxsIFJQTSB0aGF0IHRoZSAiLyIgZGlyZWN0b3J5IGV4aXN0IGFuZCBpcyBhdmFpbGFibGUKKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgUlBNIHN5c3RlbSBwcm92aWRlcyIpCisgICAgICAgIHN5c2luZm9fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZXRjcnBtX2RpciwgInN5c2luZm8iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3lzaW5mb19kaXIpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3lzaW5mb19kaXIsICJEaXJuYW1lcyIpLCAidysiKSBhcyBkaXJuYW1lczoKKyAgICAgICAgICAgIGRpcm5hbWVzLndyaXRlKCIvXG4iKQorCisgICAgICAgIGlmIHNlbGYucHJvdmlkZW5hbWU6CisgICAgICAgICAgICBwcm92aWRlbmFtZV9kaXIgPSBvcy5wYXRoLmpvaW4oc3lzaW5mb19kaXIsICJQcm92aWRlbmFtZSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJvdmlkZW5hbWVfZGlyKToKKyAgICAgICAgICAgICAgICBwcm92aWRlbmFtZV9jb250ZW50ID0gJ1xuJy5qb2luKHNlbGYucHJvdmlkZW5hbWUpCisgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWVfY29udGVudCArPSAnXG4nCisgICAgICAgICAgICAgICAgb3Blbihwcm92aWRlbmFtZV9kaXIsICJ3KyIpLndyaXRlKHByb3ZpZGVuYW1lX2NvbnRlbnQpCisKKyAgICAgICAgIyBDb25maWd1cmUgUlBNLi4uIHdlIGVuZm9yY2UgdGhlc2Ugc2V0dGluZ3MhCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBEQiBzZXR0aW5ncyIpCisgICAgICAgICMgQWZ0ZXIgY2hhbmdlIHRoZSBfX2RiLiogY2FjaGUgc2l6ZSwgbG9nIGZpbGUgd2lsbCBub3QgYmUKKyAgICAgICAgIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgdGhhdCB3aWxsIHJhaXNlIHNvbWUgd2FybmluZ3MsCisgICAgICAgICMgc28gdG91Y2ggYSBiYXJlIGxvZyBmb3IgcnBtIHdyaXRlIGludG8gaXQuCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNToKKyAgICAgICAgICAgIHJwbWxpYl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9ycG1saWIsICdsb2cnLCAnbG9nLjAwMDAwMDAwMDEnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJwbWxpYl9sb2cpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9ycG1saWIsICdsb2cnKSkKKyAgICAgICAgICAgICAgICBvcGVuKHJwbWxpYl9sb2csICd3KycpLmNsb3NlKCkKKworICAgICAgICAgICAgREJfQ09ORklHX0NPTlRFTlQgPSAiIyA9PT09PT09PT09PT09PT09IEVudmlyb25tZW50XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2RhdGFfZGlyIC5cbiIgXAorICAgICAgICAgICAgICAgICJzZXRfY3JlYXRlX2RpciAuXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xnX2RpciAuL2xvZ1xuIiBcCisgICAgICAgICAgICAgICAgInNldF90bXBfZGlyIC4vdG1wXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2ZsYWdzIGRiX2xvZ19hdXRvcmVtb3ZlIG9uXG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyAtLSB0aHJlYWRfY291bnQgbXVzdCBiZSA+PSA4XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X3RocmVhZF9jb3VudCA2NFxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBMb2dnaW5nXG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyA9PT09PT09PT09PT09PT09IE1lbW9yeSBQb29sXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2NhY2hlc2l6ZSAwIDEwNDg1NzYgMFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9tcF9tbWFwc2l6ZSAyNjg0MzU0NTZcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gTG9ja2luZ1xuIiBcCisgICAgICAgICAgICAgICAgInNldF9sa19tYXhfbG9ja3MgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X2xvY2tlcnMgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X29iamVjdHMgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJtdXRleF9zZXRfbWF4IDE2Mzg0MFxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBSZXBsaWNhdGlvblxuIgorCisgICAgICAgICAgICBkYl9jb25maWdfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnREJfQ09ORklHJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkYl9jb25maWdfZGlyKToKKyAgICAgICAgICAgICAgICBvcGVuKGRiX2NvbmZpZ19kaXIsICd3KycpLndyaXRlKERCX0NPTkZJR19DT05URU5UKQorCisgICAgICAgICMgQ3JlYXRlIGRhdGFiYXNlIHNvIHRoYXQgc21hcnQgZG9lc24ndCBjb21wbGFpbiAobGF6eSBpbml0KQorICAgICAgICBvcHQgPSAiLXFhIgorICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICBvcHQgPSAiLS1pbml0ZGIiCisgICAgICAgIGNtZCA9ICIlcyAtLXJvb3QgJXMgLS1kYnBhdGggL3Zhci9saWIvcnBtICVzID4gL2Rldi9udWxsIiAlICgKKyAgICAgICAgICAgICAgc2VsZi5ycG1fY21kLCBzZWxmLnRhcmdldF9yb290ZnMsIG9wdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNyZWF0ZSBycG0gZGF0YWJhc2UgZmFpbGVkLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICMgSW1wb3J0IEdQRyBrZXkgdG8gUlBNIGRhdGFiYXNlIG9mIHRoZSB0YXJnZXQgc3lzdGVtCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgcHVia2V5X3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCisgICAgICAgICAgICBjbWQgPSAiJXMgLS1yb290ICVzIC0tZGJwYXRoIC92YXIvbGliL3JwbSAtLWltcG9ydCAlcyA+IC9kZXYvbnVsbCIgJSAoCisgICAgICAgICAgICAgICAgICBzZWxmLnJwbV9jbWQsIHNlbGYudGFyZ2V0X3Jvb3RmcywgcHVia2V5X3BhdGgpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjIENvbmZpZ3VyZSBzbWFydAorICAgICAgICBiYi5ub3RlKCJjb25maWd1cmluZyBTbWFydCBzZXR0aW5ncyIpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLXJvb3Q9JXMnICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tZGJwYXRoPS92YXIvbGliL3JwbScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3Zhcj0lcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbG9jYWxzdGF0ZWRpcicsIFRydWUpKQorICAgICAgICBjbWQgPSAiY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3RtcHBhdGg9LyVzL3RtcCIgJSAoc2VsZi5pbnN0YWxsX2Rpcl9uYW1lKQorCisgICAgICAgIHByZWZlcl9jb2xvciA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QUkVGRVJfRUxGX0FSQ0gnLCBUcnVlKQorICAgICAgICBpZiBwcmVmZXJfY29sb3I6CisgICAgICAgICAgICBpZiBwcmVmZXJfY29sb3Igbm90IGluIFsnMCcsICcxJywgJzInLCAnNCddOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIFJQTV9QUkVGRVJfRUxGX0FSQ0g6ICVzLCBpdCBzaG91bGQgYmUgb25lIG9mOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0MTogRUxGMzIgd2luc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0MjogRUxGNjQgd2luc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0NDogRUxGNjQgTjMyIHdpbnMgKG1pcHM2NCBvciBtaXBzNjRlbCBvbmx5KSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVyX2NvbG9yKQorICAgICAgICAgICAgaWYgcHJlZmVyX2NvbG9yID09ICI0IiBhbmQgc2VsZi5kLmdldFZhcigiVFVORV9BUkNIIiwgVHJ1ZSkgbm90IGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbWlwczY0JywgJ21pcHM2NGVsJ106CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlJQTV9QUkVGRVJfRUxGX0FSQ0ggPSBcIjRcIiBpcyBmb3IgbWlwczY0IG9yIG1pcHM2NGVsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib25seS4iKQorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWV4dHJhLW1hY3Jvcy5fcHJlZmVyX2NvbG9yPSVzJworICAgICAgICAgICAgICAgICAgICAgICAgJSBwcmVmZXJfY29sb3IpCisKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWlnbm9yZXNpemU9MScpCisKKyAgICAgICAgIyBXcml0ZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgaG9zdCBhbmQgdGFyZ2V0IHVzYWdlCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1ub2xpbmt0b3M9MScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1ub3BhcmVudGRpcnM9MScpCisgICAgICAgIGNoZWNrX3NpZ25hdHVyZSA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9DSEVDS19TSUdOQVRVUkVTJywgVHJ1ZSkKKyAgICAgICAgaWYgY2hlY2tfc2lnbmF0dXJlIGFuZCBjaGVja19zaWduYXR1cmUuc3RyaXAoKSA9PSAiMCI6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tY2hlY2stc2lnbmF0dXJlcz1mYWxzZScpCisgICAgICAgIGZvciBpIGluIHNlbGYuZC5nZXRWYXIoJ0JBRF9SRUNPTU1FTkRBVElPTlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdmbGFnIC0tc2V0IGlnbm9yZS1yZWNvbW1lbmRzICVzJyAlIGkpCisKKyAgICAgICAgIyBEbyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGhlcmUsIHRvIGF2b2lkIHRoZW0gYmVpbmcKKyAgICAgICAgIyBzYXZlZCBmb3IgZmllbGQgdXBncmFkZQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdOT19SRUNPTU1FTkRBVElPTlMnLCBUcnVlKS5zdHJpcCgpID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IGlnbm9yZS1hbGwtcmVjb21tZW5kcz0xJykKKyAgICAgICAgcGtnX2V4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgaSBpbiBwa2dfZXhjbHVkZS5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdmbGFnIC0tc2V0IGV4Y2x1ZGUtcGFja2FnZXMgJXMnICUgaSkKKworICAgICAgICAjIE9wdGlvbmFsIGRlYnVnZ2luZworICAgICAgICAjIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1sb2ctbGV2ZWw9ZGVidWcnKQorICAgICAgICAjIGNtZCA9ICdjb25maWcgLS1zZXQgcnBtLWxvZy1maWxlPS90bXAvc21hcnQtZGVidWctbG9nZmlsZScKKyAgICAgICAgIyBzZWxmLl9pbnZva2Vfc21hcnQoY21kKQorICAgICAgICBjaF9hbHJlYWR5X2FkZGVkID0gW10KKyAgICAgICAgZm9yIGNhbm9uaWNhbF9hcmNoIGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgYXJjaCA9IGNhbm9uaWNhbF9hcmNoLnNwbGl0KCctJylbMF0KKyAgICAgICAgICAgIGFyY2hfY2hhbm5lbCA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcmNoX2NoYW5uZWwpIGFuZCBub3QgYXJjaCBpbiBjaF9hbHJlYWR5X2FkZGVkOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBTbWFydCBjaGFubmVsICVzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgJXMgdHlwZT1ycG0tbWQgYmFzZXVybD0lcyAteScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoYXJjaCwgYXJjaF9jaGFubmVsKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1zZXQgJXMgcHJpb3JpdHk9JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsIGNoYW5uZWxfcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgLT0gNQorCisgICAgICAgICAgICAgICAgY2hfYWxyZWFkeV9hZGRlZC5hcHBlbmQoYXJjaCkKKworICAgICAgICBiYi5ub3RlKCdhZGRpbmcgU21hcnQgUlBNIERCIGNoYW5uZWwnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgcnBtc3lzIHR5cGU9cnBtLXN5cyAteScpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgaW5zdGFsbCBzY3JpcHRsZXQgd3JhcHBlci4KKyAgICAgICAgIyBTY3JpcHRzIG5lZWQgdG8gYmUgb3JkZXJlZCB3aGVuIGV4ZWN1dGVkLCB0aGlzIGVuc3VyZXMgbnVtZXJpYyBvcmRlci4KKyAgICAgICAgIyBJZiB3ZSBldmVyIHJ1biBpbnRvIG5lZWRpbmcgbW9yZSB0aGUgODk5IHNjcmlwdHMsIHdlJ2xsIGhhdmUgdG8uCisgICAgICAgICMgY2hhbmdlIG51bSB0byBzdGFydCB3aXRoIDEwMDAuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgc2NyaXB0bGV0Y21kID0gIiQyICQzICQ0XG4iCisgICAgICAgICAgICBzY3JpcHRwYXRoID0gIiQzIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2NyaXB0bGV0Y21kID0gIiQyICQxLyQzICQ0XG4iCisgICAgICAgICAgICBzY3JpcHRwYXRoID0gIiQxLyQzIgorCisgICAgICAgIFNDUklQVExFVF9GT1JNQVQgPSAiIyEvYmluL2Jhc2hcbiIgXAorICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAiZXhwb3J0IFBBVEg9JXNcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBEPSVzXG4iIFwKKyAgICAgICAgICAgICdleHBvcnQgT0ZGTElORV9ST09UPSIkRCJcbicgXAorICAgICAgICAgICAgJ2V4cG9ydCBJUEtHX09GRkxJTkVfUk9PVD0iJEQiXG4nIFwKKyAgICAgICAgICAgICdleHBvcnQgT1BLR19PRkZMSU5FX1JPT1Q9IiREIlxuJyBcCisgICAgICAgICAgICAiZXhwb3J0IElOVEVSQ0VQVF9ESVI9JXNcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBOQVRJVkVfUk9PVD0lc1xuIiBcCisgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICsgc2NyaXB0bGV0Y21kICsgXAorICAgICAgICAgICAgImlmIFsgJD8gLW5lIDAgXTsgdGhlblxuIiBcCisgICAgICAgICAgICAiICBpZiBbICQ0IC1lcSAxIF07IHRoZW5cbiIgXAorICAgICAgICAgICAgIiAgICBta2RpciAtcCAkMS9ldGMvcnBtLXBvc3RpbnN0c1xuIiBcCisgICAgICAgICAgICAiICAgIG51bT0xMDBcbiIgXAorICAgICAgICAgICAgIiAgICB3aGlsZSBbIC1lICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0qIF07IGRvIG51bT0kKChudW0gKyAxKSk7IGRvbmVcbiIgXAorICAgICAgICAgICAgIiAgICBuYW1lPWBoZWFkIC0xICIgKyBzY3JpcHRwYXRoICsgIiB8IGN1dCAtZFwnIFwnIC1mIDJgXG4iIFwKKyAgICAgICAgICAgICcgICAgZWNobyAiIyEkMiIgPiAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tJHtuYW1lfVxuJyBcCisgICAgICAgICAgICAnICAgIGVjaG8gIiMgQXJnOiAkNCIgPj4gJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbicgXAorICAgICAgICAgICAgIiAgICBjYXQgIiArIHNjcmlwdHBhdGggKyAiID4+ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4iIFwKKyAgICAgICAgICAgICIgICAgY2htb2QgK3ggJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbiIgXAorICAgICAgICAgICAgIiAgZWxzZVxuIiBcCisgICAgICAgICAgICAnICAgIGVjaG8gIkVycm9yOiBwcmUvcG9zdCByZW1vdmUgc2NyaXB0bGV0IGZhaWxlZCJcbicgXAorICAgICAgICAgICAgIiAgZmlcbiIgXAorICAgICAgICAgICAgImZpXG4iCisKKyAgICAgICAgaW50ZXJjZXB0X2RpciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vaW50ZXJjZXB0X3NjcmlwdHMnKQorICAgICAgICBuYXRpdmVfcm9vdCA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisgICAgICAgIHNjcmlwdGxldF9jb250ZW50ID0gU0NSSVBUTEVUX0ZPUk1BVCAlIChvcy5lbnZpcm9uWydQQVRIJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3Jvb3QpCisgICAgICAgIG9wZW4oc2VsZi5zY3JpcHRsZXRfd3JhcHBlciwgJ3crJykud3JpdGUoc2NyaXB0bGV0X2NvbnRlbnQpCisKKyAgICAgICAgYmIubm90ZSgiTm90ZTogY29uZmlndXJpbmcgUlBNIGNyb3NzLWluc3RhbGwgc2NyaXB0bGV0X3dyYXBwZXIiKQorICAgICAgICBvcy5jaG1vZChzZWxmLnNjcmlwdGxldF93cmFwcGVyLCAwNzU1KQorICAgICAgICBjbWQgPSAnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyPSVzJyAlIFwKKyAgICAgICAgICAgICAgc2VsZi5zY3JpcHRsZXRfd3JhcHBlcgorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoY21kKQorCisgICAgICAgICMgRGVidWcgdG8gc2hvdyBzbWFydCBjb25maWcgaW5mbworICAgICAgICAjIGJiLm5vdGUoc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zaG93JykpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ3VwZGF0ZSBycG1zeXMnKQorCisgICAgJycnCisgICAgSW5zdGFsbCBwa2dzIHdpdGggc21hcnQsIHRoZSBwa2cgbmFtZSBpcyBvZSBmb3JtYXQKKyAgICAnJycKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorCisgICAgICAgIGlmIG5vdCBwa2dzOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIHRvIGluc3RhbGwiKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgdGhlIGZvbGxvd2luZyBwYWNrYWdlczogJXMiICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgIHBrZ3MgPSBzZWxmLl9wa2dfdHJhbnNsYXRlX29lX3RvX3NtYXJ0KHBrZ3MsIGF0dGVtcHRfb25seSkKKworICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgYmIubm90ZSgndG8gYmUgaW5zdGFsbGVkOiAlcycgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC15ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgYmIubm90ZShjbWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5ub3RlKCdpbnN0YWxsaW5nIGF0dGVtcHQgb25seSBwYWNrYWdlcy4uLicpCisgICAgICAgICAgICBiYi5ub3RlKCdBdHRlbXB0aW5nICVzJyAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLS1hdHRlbXB0IC15ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgYmIubm90ZShvdXRwdXQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAnJycKKyAgICBSZW1vdmUgcGtncyB3aXRoIHNtYXJ0LCB0aGUgcGtnIG5hbWUgaXMgc21hcnQvcnBtIGZvcm1hdAorICAgICcnJworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGJiLm5vdGUoJ3RvIGJlIHJlbW92ZWQ6ICcgKyAnICcuam9pbihwa2dzKSkKKworICAgICAgICBpZiBub3Qgd2l0aF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBjbWQgPSAiJXMgLWUgLS1ub2RlcHMgIiAlIHNlbGYucnBtX2NtZAorICAgICAgICAgICAgY21kICs9ICItLXJvb3Q9JXMgIiAlIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICAgICAgY21kICs9ICItLWRicGF0aD0vdmFyL2xpYi9ycG0gIgorICAgICAgICAgICAgY21kICs9ICItLWRlZmluZT0nX2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyICVzJyAiICUgXAorICAgICAgICAgICAgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIKKyAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmU9J190bXBwYXRoIC8lcy90bXAnICVzIiAlIChzZWxmLmluc3RhbGxfZGlyX25hbWUsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgICAgICAjICAgYmIubm90ZSgnRGVidWc6IFdoYXQgcmVxdWlyZWQ6ICVzJyAlIHBrZykKKyAgICAgICAgICAgICMgICBiYi5ub3RlKHNlbGYuX2ludm9rZV9zbWFydCgncXVlcnkgJXMgLS1zaG93LXJlcXVpcmVkYnknICUgcGtnKSkKKworICAgICAgICAgICAgY21kID0gIiVzICVzIHJlbW92ZSAteSAlcyIgJSAoc2VsZi5zbWFydF9jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0X29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB1cGdyYWRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCdzbWFydCB1cGdyYWRlJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCd1cGdyYWRlJykKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbmRleGVyLndyaXRlX2luZGV4KCkKKworICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9ycG1saWIsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsICd2YXIvbGliL29wa2cnKSwgVHJ1ZSkKKworICAgICAgICAjIHJlbW92ZSB0ZW1wIGRpcmVjdG9yeQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbnN0YWxsX2Rpcl9wYXRoLCBUcnVlKQorCisgICAgZGVmIGJhY2t1cF9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBTYXZlIHRoZSBycG1saWIgZm9yIGluY3JlbWVudCBycG0gaW1hZ2UgZ2VuZXJhdGlvbgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX3JwbWxpYik6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zYXZlZF9ycG1saWIsIFRydWUpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLmltYWdlX3JwbWxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZWRfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiByZWNvdmVyeV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBNb3ZlIHRoZSBycG1saWIgYmFjaworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX3JwbWxpYik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmltYWdlX3JwbWxpYik6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2VfcnBtbGliLCBUcnVlKQorCisgICAgICAgICAgICBiYi5ub3RlKCdSZWNvdmVyeSBwYWNrYWdpbmcgZGF0YScpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5zYXZlZF9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBrZ3NfbGlzdC5saXN0KGZvcm1hdCkKKworICAgICcnJworICAgIElmIGluY3JlbWVudGFsIGluc3RhbGwsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgd2UndmUgZ290LAorICAgIHdoYXQgd2UgbmVlZCB0byBhZGQsIGFuZCB3aGF0IHRvIHJlbW92ZS4uLgorICAgIFRoZSBkdW1wX2luc3RhbGxfc29sdXRpb24gd2lsbCBkdW1wIGFuZCBzYXZlIHRoZSBuZXcgaW5zdGFsbAorICAgIHNvbHV0aW9uLgorICAgICcnJworICAgIGRlZiBkdW1wX2luc3RhbGxfc29sdXRpb24oc2VsZiwgcGtncyk6CisgICAgICAgIGJiLm5vdGUoJ2NyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsJykKKyAgICAgICAgaWYgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa2dzID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChwa2dzLCBGYWxzZSkKKyAgICAgICAgaW5zdGFsbF9wa2dzID0gbGlzdCgpCisKKyAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLXkgLS1kdW1wICVzIDI+JXMiICUgIFwKKyAgICAgICAgICAgICAgKHNlbGYuc21hcnRfY21kLAorICAgICAgICAgICAgICAgc2VsZi5zbWFydF9vcHQsCisgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSwKKyAgICAgICAgICAgICAgIHNlbGYuc29sdXRpb25fbWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRGlzYWJsZSBycG1zeXMgY2hhbm5lbCBmb3IgdGhlIGZha2UgaW5zdGFsbAorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBycG1zeXMnKQorCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvbHV0aW9uX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIGR1bXAgaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICMgUmVjb3ZlcnkgcnBtc3lzIGNoYW5uZWwKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tZW5hYmxlIHJwbXN5cycpCisgICAgICAgIHJldHVybiBpbnN0YWxsX3BrZ3MKKworICAgICcnJworICAgIElmIGluY3JlbWVudGFsIGluc3RhbGwsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgd2UndmUgZ290LAorICAgIHdoYXQgd2UgbmVlZCB0byBhZGQsIGFuZCB3aGF0IHRvIHJlbW92ZS4uLgorICAgIFRoZSBsb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uIHdpbGwgbG9hZCB0aGUgcHJldmlvdXMgaW5zdGFsbAorICAgIHNvbHV0aW9uCisgICAgJycnCisgICAgZGVmIGxvYWRfb2xkX2luc3RhbGxfc29sdXRpb24oc2VsZik6CisgICAgICAgIGJiLm5vdGUoJ2xvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGwnKQorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IGxpc3QoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCk6CisgICAgICAgICAgICBiYi5ub3RlKCdvbGQgaW5zdGFsbCBzb2x1dGlvbiBub3QgZXhpc3QnKQorICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc29sdXRpb25fbWFuaWZlc3QsICdyJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQocGtnLnN0cmlwKCkpCisKKyAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAnJycKKyAgICBEdW1wIGFsbCBhdmFpbGFibGUgcGFja2FnZXMgaW4gZmVlZHMsIGl0IHNob3VsZCBiZSBpbnZva2VkIGFmdGVyIHRoZQorICAgIG5ld2VzdCBycG0gaW5kZXggd2FzIGNyZWF0ZWQKKyAgICAnJycKKyAgICBkZWYgZHVtcF9hbGxfYXZhaWxhYmxlX3BrZ3Moc2VsZik6CisgICAgICAgIGF2YWlsYWJsZV9tYW5pZmVzdCA9IHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQvYXZhaWxhYmxlX3BrZ3MudHh0JykKKyAgICAgICAgYXZhaWxhYmxlX3BrZ3MgPSBsaXN0KCkKKyAgICAgICAgY21kID0gIiVzICVzIHF1ZXJ5IC0tb3V0cHV0ICVzIiAlICBcCisgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsIGF2YWlsYWJsZV9tYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYXZhaWxhYmxlX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3BrZ3MuYXBwZW5kKHBrZy5zdHJpcCgpKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlVuYWJsZSB0byBsaXN0IGFsbCBhdmFpbGFibGUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHNlbGYuZnVsbHBrZ2xpc3QgPSBhdmFpbGFibGVfcGtncworCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNhdmVfcnBtcG9zdGluc3Qoc2VsZiwgcGtnKToKKyAgICAgICAgbWxpYnMgPSAoc2VsZi5kLmdldFZhcignTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywgRmFsc2UpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAjIFJlbW92ZSBhbnkgbXVsdGlsaWIgcHJlZml4IGZyb20gdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICBmb3IgbWxpYiBpbiBtbGliczoKKyAgICAgICAgICAgIGlmIG1saWIgaW4gcGtnOgorICAgICAgICAgICAgICAgIG5ld19wa2cgPSBwa2cucmVwbGFjZShtbGliICsgJy0nLCAnJykKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGJiLm5vdGUoJyAgKiBwb3N0cG9uaW5nICVzJyAlIG5ld19wa2cpCisgICAgICAgIHNhdmVkX2RpciA9IHNlbGYudGFyZ2V0X3Jvb3RmcyArIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcnBtLXBvc3RpbnN0cy8nKSArIG5ld19wa2cKKworICAgICAgICBjbWQgPSBzZWxmLnJwbV9jbWQgKyAnIC1xIC0tc2NyaXB0cyAtLXJvb3QgJyArIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBjbWQgKz0gJyAtLWRicGF0aD0vdmFyL2xpYi9ycG0gJyArIG5ld19wa2cKKyAgICAgICAgY21kICs9ICcgfCBzZWQgLW4gLWUgIi9ecG9zdGluc3RhbGwgc2NyaXB0bGV0ICh1c2luZyAuKik6JC8sL14uKiBzY3JpcHRsZXQgKHVzaW5nIC4qKTokLyB7Ly4qL3B9IicKKyAgICAgICAgY21kICs9ICcgfCBzZWQgLWUgIi9wb3N0aW5zdGFsbCBzY3JpcHRsZXQgKHVzaW5nIFwoLipcKSk6JC9kIicKKyAgICAgICAgY21kICs9ICcgLWUgIi9eLiogc2NyaXB0bGV0ICh1c2luZyAuKik6JC9kIiA+ICVzJyAlIHNhdmVkX2RpcgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLnN0cmlwKCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICAgICAgb3MuY2htb2Qoc2F2ZWRfZGlyLCAwNzU1KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZva2Ugc2F2ZV9ycG1wb3N0aW5zdCBmYWlsZWQuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICcnJ1dyaXRlIGNvbW1vbiBjb25maWd1cmF0aW9uIGZvciB0YXJnZXQgdXNhZ2UnJycKKyAgICBkZWYgcnBtX3NldHVwX3NtYXJ0X3RhcmdldF9jb25maWcoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKworICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9saW5rdG9zPTEnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9wYXJlbnRkaXJzPTEnKQorICAgICAgICBmb3IgaSBpbiBzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBpZ25vcmUtcmVjb21tZW5kcyAlcycgJSBpKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgcnBtc3lzIHR5cGU9cnBtLXN5cyAteScpCisKKyAgICAnJycKKyAgICBUaGUgcnBtIGRiIGxvY2sgZmlsZXMgd2VyZSBwcm9kdWNlZCBhZnRlciBpbnZva2luZyBycG0gdG8gcXVlcnkgb24KKyAgICBidWlsZCBzeXN0ZW0sIGFuZCB0aGV5IGNhdXNlZCB0aGUgcnBtIG9uIHRhcmdldCBkaWRuJ3Qgd29yaywgc28gd2UKKyAgICBuZWVkIHRvIHVubG9jayB0aGUgcnBtIGRiIGJ5IHJlbW92aW5nIHRoZSBsb2NrIGZpbGVzLgorICAgICcnJworICAgIGRlZiB1bmxvY2tfcnBtX2RiKHNlbGYpOgorICAgICAgICAjIFJlbW92ZSBycG0gZGIgbG9jayBmaWxlcworICAgICAgICBycG1fZGJfbG9ja3MgPSBnbG9iLmdsb2IoJyVzL3Zhci9saWIvcnBtL19fZGIuKicgJSBzZWxmLnRhcmdldF9yb290ZnMpCisgICAgICAgIGZvciBmIGluIHJwbV9kYl9sb2NrczoKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShmLCBUcnVlKQorCisKK2NsYXNzIE9wa2dQTShQYWNrYWdlTWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHRhcmdldF9yb290ZnMsIGNvbmZpZ19maWxlLCBhcmNocywgdGFza19uYW1lPSd0YXJnZXQnKToKKyAgICAgICAgc3VwZXIoT3BrZ1BNLCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3RmcyA9IHRhcmdldF9yb290ZnMKKyAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IGNvbmZpZ19maWxlCisgICAgICAgIHNlbGYucGtnX2FyY2hzID0gYXJjaHMKKyAgICAgICAgc2VsZi50YXNrX25hbWUgPSB0YXNrX25hbWUKKworICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCJERVBMT1lfRElSX0lQSyIsIFRydWUpCisgICAgICAgIHNlbGYuZGVwbG95X2xvY2tfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJkZXBsb3kubG9jayIpCisgICAgICAgIHNlbGYub3BrZ19jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ciKQorICAgICAgICBzZWxmLm9wa2dfYXJncyA9ICItLXZvbGF0aWxlLWNhY2hlIC1mICVzIC1vICVzICIgJSAoc2VsZi5jb25maWdfZmlsZSwgdGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgc2VsZi5vcGtnX2FyZ3MgKz0gc2VsZi5kLmdldFZhcigiT1BLR19BUkdTIiwgVHJ1ZSkKKworICAgICAgICBvcGtnX2xpYl9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdPUEtHTElCRElSJywgVHJ1ZSkKKyAgICAgICAgaWYgb3BrZ19saWJfZGlyWzBdID09ICIvIjoKKyAgICAgICAgICAgIG9wa2dfbGliX2RpciA9IG9wa2dfbGliX2RpclsxOl0KKworICAgICAgICBzZWxmLm9wa2dfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9yb290ZnMsIG9wa2dfbGliX2RpciwgIm9wa2ciKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLm9wa2dfZGlyKQorCisgICAgICAgIHNlbGYuc2F2ZWRfb3BrZ19kaXIgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkLyVzJyAlIHNlbGYudGFza19uYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkJykpCisKKyAgICAgICAgaWYgKHNlbGYuZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkgb3IgIiIpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25maWcoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2N1c3RvbV9jb25maWcoKQorCisgICAgICAgIHNlbGYuaW5kZXhlciA9IE9wa2dJbmRleGVyKHNlbGYuZCwgc2VsZi5kZXBsb3lfZGlyKQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNoYW5nZSBhIHBhY2thZ2UncyBzdGF0dXMgaW4gL3Zhci9saWIvb3BrZy9zdGF0dXMgZmlsZS4KKyAgICBJZiAncGFja2FnZXMnIGlzIE5vbmUgdGhlbiB0aGUgbmV3X3N0YXR1cyB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsCisgICAgcGFja2FnZXMKKyAgICAiIiIKKyAgICBkZWYgbWFya19wYWNrYWdlcyhzZWxmLCBzdGF0dXNfdGFnLCBwYWNrYWdlcz1Ob25lKToKKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vcGtnX2RpciwgInN0YXR1cyIpCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAiciIpIGFzIHNmOgorICAgICAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlICsgIi50bXAiLCAidysiKSBhcyB0bXBfc2Y6CisgICAgICAgICAgICAgICAgaWYgcGFja2FnZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHJlLnN1YihyIlBhY2thZ2U6ICguKj8pXG4oKD86W15cbl0rXG4pKj8pU3RhdHVzOiAoLiopKD86dW5wYWNrZWR8aW5zdGFsbGVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJQYWNrYWdlOiBcMVxuXDJTdGF0dXM6IFwzJXMiICUgc3RhdHVzX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZi5yZWFkKCkpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUocGFja2FnZXMpLl9fbmFtZV9fICE9ICJsaXN0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJ3BhY2thZ2VzJyBzaG91bGQgYmUgYSBsaXN0IG9iamVjdCIpCisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc2YucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSByZS5zdWIociJQYWNrYWdlOiAlc1xuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiICUgcGtnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogJXNcblwxU3RhdHVzOiBcMiVzIiAlIChwa2csIHN0YXR1c190YWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cykKKworICAgICAgICAgICAgICAgICAgICB0bXBfc2Yud3JpdGUoc3RhdHVzKQorCisgICAgICAgIG9zLnJlbmFtZShzdGF0dXNfZmlsZSArICIudG1wIiwgc3RhdHVzX2ZpbGUpCisKKyAgICBkZWYgX2NyZWF0ZV9jdXN0b21fY29uZmlnKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJCdWlsZGluZyBmcm9tIGZlZWRzIGFjdGl2YXRlZCEiKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ19maWxlLCAidysiKSBhcyBjb25maWdfZmlsZToKKyAgICAgICAgICAgIHByaW9yaXR5ID0gMQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBjb25maWdfZmlsZS53cml0ZSgiYXJjaCAlcyAlZFxuIiAlIChhcmNoLCBwcmlvcml0eSkpCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgKz0gNQorCisgICAgICAgICAgICBmb3IgbGluZSBpbiAoc2VsZi5kLmdldFZhcignSVBLX0ZFRURfVVJJUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZlZWRfbWF0Y2ggPSByZS5tYXRjaCgiXlsgXHRdKiguKikjIyhbXiBcdF0qKVsgXHRdKiQiLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgZmVlZF9tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZmVlZF9uYW1lID0gZmVlZF9tYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBmZWVkX3VyaSA9IGZlZWRfbWF0Y2guZ3JvdXAoMikKKworICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJBZGQgJXMgZmVlZCB3aXRoIFVSTCAlcyIgJSAoZmVlZF9uYW1lLCBmZWVkX3VyaSkpCisKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYy9neiAlcyAlc1xuIiAlIChmZWVkX25hbWUsIGZlZWRfdXJpKSkKKworICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBBbGxvdyB0byB1c2UgcGFja2FnZSBkZXBsb3kgZGlyZWN0b3J5IGNvbnRlbnRzIGFzIHF1aWNrIGRldmVsLXRlc3RpbmcKKyAgICAgICAgICAgIGZlZWQuIFRoaXMgY3JlYXRlcyBpbmRpdmlkdWFsIGZlZWQgY29uZmlncyBmb3IgZWFjaCBhcmNoIHN1YmRpciBvZiB0aG9zZQorICAgICAgICAgICAgc3BlY2lmaWVkIGFzIGNvbXBhdGlibGUgZm9yIHRoZSBjdXJyZW50IG1hY2hpbmUuCisgICAgICAgICAgICBOT1RFOiBEZXZlbG9wbWVudC1oZWxwZXIgZmVhdHVyZSwgTk9UIGEgZnVsbC1mbGVkZ2VkIGZlZWQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdGRUVEX0RFUExPWURJUl9CQVNFX1VSSScsIFRydWUpIG9yICIiKSAhPSAiIjoKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBjZmdfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJzeXNjb25mZGlyIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wa2ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbC0lcy1mZWVkLmNvbmYiICUgYXJjaCkKKworICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2ZnX2ZpbGVfbmFtZSwgIncrIikgYXMgY2ZnX2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBjZmdfZmlsZS53cml0ZSgic3JjL2d6IGxvY2FsLSVzICVzLyVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdGRUVEX0RFUExPWURJUl9CQVNFX1VSSScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gpKQorCisgICAgZGVmIF9jcmVhdGVfY29uZmlnKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgIncrIikgYXMgY29uZmlnX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDEKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoImFyY2ggJXMgJWRcbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYyBvZSBmaWxlOiVzXG4iICUgc2VsZi5kZXBsb3lfZGlyKQorCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ3NfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBrZ3NfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYyBvZS0lcyBmaWxlOiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsIHBrZ3NfZGlyKSkKKworICAgIGRlZiBpbnNlcnRfZmVlZHNfdXJpcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mZWVkX3VyaXMgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByb290ZnNfY29uZmlnID0gb3MucGF0aC5qb2luKCclcy9ldGMvb3BrZy9iYXNlLWZlZWRzLmNvbmYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLnRhcmdldF9yb290ZnMpCisKKyAgICAgICAgd2l0aCBvcGVuKHJvb3Rmc19jb25maWcsICJ3KyIpIGFzIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgdXJpX2l0ZXJhdG9yID0gMAorICAgICAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mZWVkX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBvcGtnIGZlZWQgdXJsLSVzLSVkICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCB1cmlfaXRlcmF0b3IsIGZ1bGxfdXJpKSkKKworICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZS53cml0ZSgic3JjL2d6IHVyaS0lcy0lZCAlcy8lc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCB1cmlfaXRlcmF0b3IsIGZ1bGxfdXJpLCBhcmNoKSkKKyAgICAgICAgICAgICAgICB1cmlfaXRlcmF0b3IgKz0gMQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyB1cGRhdGUiICUgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFja2FnZSBpbmRleCBmaWxlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKyAgICAgICAgaWYgYXR0ZW1wdF9vbmx5IGFuZCBsZW4ocGtncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsICVzIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgb3MuZW52aXJvblsnRCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lQS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT1BLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJTlRFUkNFUFRfRElSJ10gPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKyAgICAgICAgb3MuZW52aXJvblsnTkFUSVZFX1JPT1QnXSA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOiAlcyIgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIChiYi5mYXRhbCwgYmIubm90ZSlbYXR0ZW1wdF9vbmx5XSgiVW5hYmxlIHRvIGluc3RhbGwgcGFja2FnZXMuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCAnJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGlmIHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgY21kID0gIiVzICVzIC0tZm9yY2UtZGVwZW5kcyAtLWZvcmNlLXJlbW92ZSAtLWZvcmNlLXJlbW92YWwtb2YtZGVwZW5kZW50LXBhY2thZ2VzIHJlbW92ZSAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyAtLWZvcmNlLWRlcGVuZHMgcmVtb3ZlICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYub3BrZ19kaXIsIFRydWUpCisgICAgICAgICMgY3JlYXRlIHRoZSBkaXJlY3RvcnkgYmFjaywgaXQncyBuZWVkZWQgYnkgUE0gbG9jaworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5vcGtnX2RpcikKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMsIHNlbGYuY29uZmlnX2ZpbGUpLmxpc3QoZm9ybWF0KQorCisgICAgZGVmIGhhbmRsZV9iYWRfcmVjb21tZW5kYXRpb25zKHNlbGYpOgorICAgICAgICBiYWRfcmVjb21tZW5kYXRpb25zID0gc2VsZi5kLmdldFZhcigiQkFEX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGJhZF9yZWNvbW1lbmRhdGlvbnMuc3RyaXAoKSA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYub3BrZ19kaXIsICJzdGF0dXMiKQorCisgICAgICAgICMgSWYgc3RhdHVzIGZpbGUgZXhpc3RlZCwgaXQgbWVhbnMgdGhlIGJhZCByZWNvbW1lbmRhdGlvbnMgaGFzIGFscmVhZHkKKyAgICAgICAgIyBiZWVuIGhhbmRsZWQKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdHVzX2ZpbGUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgY21kID0gIiVzICVzIGluZm8gIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJ3KyIpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gYmFkX3JlY29tbWVuZGF0aW9ucy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ19pbmZvID0gY21kICsgcGtnCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHBrZ19pbmZvLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCBwYWNrYWdlIGluZm8uIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChwa2dfaW5mbywgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklnbm9yZWQgYmFkIHJlY29tbWVuZGF0aW9uOiAnJXMnIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgcGFja2FnZSIgJSBwa2cpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiU3RhdHVzOiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKCJTdGF0dXM6IGRlaW5zdGFsbCBob2xkIG5vdC1pbnN0YWxsZWRcbiIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMud3JpdGUobGluZSArICJcbiIpCisKKyAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBwYWNrYWdlIGVudHJ5IHRvIGVuc3VyZSB0aGF0IGl0CisgICAgICAgICAgICAgICAgIyBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKCJcbiIpCisKKyAgICAnJycKKyAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGR1bW15IGluc3RhbGxzIHBrZ3MgYW5kIHJldHVybnMgdGhlIGxvZyBvZiBvdXRwdXQuCisgICAgJycnCisgICAgZGVmIGR1bW15X2luc3RhbGwoc2VsZiwgcGtncyk6CisgICAgICAgIGlmIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDcmVhdGUgYW4gdGVtcCBkaXIgYXMgb3BrZyByb290IGZvciBkdW1teSBpbnN0YWxsYXRpb24KKyAgICAgICAgdGVtcF9yb290ZnMgPSBzZWxmLmQuZXhwYW5kKCcke1R9L29wa2cnKQorICAgICAgICB0ZW1wX29wa2dfZGlyID0gb3MucGF0aC5qb2luKHRlbXBfcm9vdGZzLCAndmFyL2xpYi9vcGtnJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRlbXBfb3BrZ19kaXIpCisKKyAgICAgICAgb3BrZ19hcmdzID0gIi1mICVzIC1vICVzICIgJSAoc2VsZi5jb25maWdfZmlsZSwgdGVtcF9yb290ZnMpCisgICAgICAgIG9wa2dfYXJncyArPSBzZWxmLmQuZ2V0VmFyKCJPUEtHX0FSR1MiLCBUcnVlKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyB1cGRhdGUiICUgKHNlbGYub3BrZ19jbWQsIG9wa2dfYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICAjIER1bW15IGluc3RhbGxhdGlvbgorICAgICAgICBjbWQgPSAiJXMgJXMgLS1ub2FjdGlvbiBpbnN0YWxsICVzICIgJSAoc2VsZi5vcGtnX2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wa2dfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luKHBrZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGR1bW15IGluc3RhbGwgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodGVtcF9yb290ZnMsIFRydWUpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIGJhY2t1cF9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBTYXZlIHRoZSBvcGtnbGliIGZvciBpbmNyZW1lbnQgaXBrIGltYWdlIGdlbmVyYXRpb24KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9vcGtnX2Rpcik6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zYXZlZF9vcGtnX2RpciwgVHJ1ZSkKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYub3BrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVkX29wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiByZWNvdmVyX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICAjIE1vdmUgdGhlIG9wa2dsaWIgYmFjaworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX29wa2dfZGlyKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYub3BrZ19kaXIpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLm9wa2dfZGlyLCBUcnVlKQorCisgICAgICAgICAgICBiYi5ub3RlKCdSZWNvdmVyIHBhY2thZ2luZyBkYXRhJykKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLnNhdmVkX29wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3BrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworCitjbGFzcyBEcGtnUE0oUGFja2FnZU1hbmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXRfcm9vdGZzLCBhcmNocywgYmFzZV9hcmNocywgYXB0X2NvbmZfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihEcGtnUE0sIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3RmcyA9IHRhcmdldF9yb290ZnMKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9ERUInLCBUcnVlKQorICAgICAgICBpZiBhcHRfY29uZl9kaXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtBUFRDT05GX1RBUkdFVH0vYXB0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gYXB0X2NvbmZfZGlyCisgICAgICAgIHNlbGYuYXB0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgImFwdC5jb25mIikKKyAgICAgICAgc2VsZi5hcHRfZ2V0X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiYXB0LWdldCIpCisKKyAgICAgICAgc2VsZi5hcHRfYXJncyA9IGQuZ2V0VmFyKCJBUFRfQVJHUyIsIFRydWUpCisKKyAgICAgICAgc2VsZi5hbGxfYXJjaF9saXN0ID0gYXJjaHMuc3BsaXQoKQorICAgICAgICBhbGxfbWxiX3BrZ19hcmNoX2xpc3QgPSAoc2VsZi5kLmdldFZhcignQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICdfJykuc3BsaXQoKQorICAgICAgICBzZWxmLmFsbF9hcmNoX2xpc3QuZXh0ZW5kKGFyY2ggZm9yIGFyY2ggaW4gYWxsX21sYl9wa2dfYXJjaF9saXN0IGlmIGFyY2ggbm90IGluIHNlbGYuYWxsX2FyY2hfbGlzdCkKKworICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlncyhhcmNocywgYmFzZV9hcmNocykKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBEcGtnSW5kZXhlcihzZWxmLmQsIHNlbGYuZGVwbG95X2RpcikKKworICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgYSBwYWNrYWdlJ3Mgc3RhdHVzIGluIC92YXIvbGliL2Rwa2cvc3RhdHVzIGZpbGUuCisgICAgSWYgJ3BhY2thZ2VzJyBpcyBOb25lIHRoZW4gdGhlIG5ld19zdGF0dXMgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbAorICAgIHBhY2thZ2VzCisgICAgIiIiCisgICAgZGVmIG1hcmtfcGFja2FnZXMoc2VsZiwgc3RhdHVzX3RhZywgcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSwgInIiKSBhcyBzZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSArICIudG1wIiwgIncrIikgYXMgdG1wX3NmOgorICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShyZS5zdWIociJQYWNrYWdlOiAoLio/KVxuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogXDFcblwyU3RhdHVzOiBcMyVzIiAlIHN0YXR1c190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YucmVhZCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKHBhY2thZ2VzKS5fX25hbWVfXyAhPSAibGlzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIidwYWNrYWdlcycgc2hvdWxkIGJlIGEgbGlzdCBvYmplY3QiKQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmUuc3ViKHIiUGFja2FnZTogJXNcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiAlIHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6ICVzXG5cMVN0YXR1czogXDIlcyIgJSAocGtnLCBzdGF0dXNfdGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpCisKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHN0YXR1cykKKworICAgICAgICBvcy5yZW5hbWUoc3RhdHVzX2ZpbGUgKyAiLnRtcCIsIHN0YXR1c19maWxlKQorCisgICAgIiIiCisgICAgUnVuIHRoZSBwcmUvcG9zdCBpbnN0YWxscyBmb3IgcGFja2FnZSAicGFja2FnZV9uYW1lIi4gSWYgcGFja2FnZV9uYW1lIGlzCisgICAgTm9uZSwgdGhlbiBydW4gYWxsIHByZS9wb3N0IGluc3RhbGwgc2NyaXB0bGV0cy4KKyAgICAiIiIKKyAgICBkZWYgcnVuX3ByZV9wb3N0X2luc3RhbGxzKHNlbGYsIHBhY2thZ2VfbmFtZT1Ob25lKToKKyAgICAgICAgaW5mb19kaXIgPSBzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9pbmZvIgorICAgICAgICBzdWZmaXhlcyA9IFsoIi5wcmVpbnN0IiwgIlByZWluc3RhbGwiKSwgKCIucG9zdGluc3QiLCAiUG9zdGluc3RhbGwiKV0KKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9zdGF0dXMiCisgICAgICAgIGluc3RhbGxlZF9wa2dzID0gW10KKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJyIikgYXMgc3RhdHVzOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzLnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl5QYWNrYWdlOiAoLiopIiwgbGluZSkKKyAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQobS5ncm91cCgxKSkKKworICAgICAgICBpZiBwYWNrYWdlX25hbWUgaXMgbm90IE5vbmUgYW5kIG5vdCBwYWNrYWdlX25hbWUgaW4gaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcy5lbnZpcm9uWydEJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnSVBLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydPUEtHX09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lOVEVSQ0VQVF9ESVInXSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJjZXB0X3NjcmlwdHMiKQorICAgICAgICBvcy5lbnZpcm9uWydOQVRJVkVfUk9PVCddID0gc2VsZi5kLmdldFZhcignU1RBR0lOR19ESVJfTkFUSVZFJywgVHJ1ZSkKKworICAgICAgICBmYWlsZWRfcGtncyA9IFtdCisgICAgICAgIGZvciBwa2dfbmFtZSBpbiBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgcF9mdWxsID0gb3MucGF0aC5qb2luKGluZm9fZGlyLCBwa2dfbmFtZSArIHN1ZmZpeFswXSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwX2Z1bGwpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgJXMgZm9yIHBhY2thZ2U6ICVzIC4uLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1ZmZpeFsxXS5sb3dlcigpLCBwa2dfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChwX2Z1bGwsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCIlcyBmb3IgcGFja2FnZSAlcyBmYWlsZWQgd2l0aCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWZmaXhbMV0sIHBrZ19uYW1lLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZF9wa2dzLmFwcGVuZChwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbGVuKGZhaWxlZF9wa2dzKToKKyAgICAgICAgICAgIHNlbGYubWFya19wYWNrYWdlcygidW5wYWNrZWQiLCBmYWlsZWRfcGtncykKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIG9zLmVudmlyb25bJ0FQVF9DT05GSUcnXSA9IHNlbGYuYXB0X2NvbmZfZmlsZQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICBjbWQgPSAiJXMgdXBkYXRlIiAlIHNlbGYuYXB0X2dldF9jbWQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gdXBkYXRlIHRoZSBwYWNrYWdlIGluZGV4IGZpbGVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIGlmIGF0dGVtcHRfb25seSBhbmQgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAtLWZvcmNlLXllcyAtLWFsbG93LXVuYXV0aGVudGljYXRlZCAlcyIgJSBcCisgICAgICAgICAgICAgIChzZWxmLmFwdF9nZXRfY21kLCBzZWxmLmFwdF9hcmdzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6ICVzIiAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAoYmIuZmF0YWwsIGJiLm5vdGUpW2F0dGVtcHRfb25seV0oIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgIyByZW5hbWUgKi5kcGtnLW5ldyBmaWxlcy9kaXJzCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudGFyZ2V0X3Jvb3Rmcyk6CisgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgbmV3X2RpciA9IHJlLnN1YigiXC5kcGtnLW5ldyIsICIiLCBkaXIpCisgICAgICAgICAgICAgICAgaWYgZGlyICE9IG5ld19kaXI6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShvcy5wYXRoLmpvaW4ocm9vdCwgZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCBuZXdfZGlyKSkKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbmV3X2ZpbGUgPSByZS5zdWIoIlwuZHBrZy1uZXciLCAiIiwgZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBmaWxlICE9IG5ld19maWxlOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKHJvb3QsIGZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHJvb3QsIG5ld19maWxlKSkKKworCisgICAgZGVmIHJlbW92ZShzZWxmLCBwa2dzLCB3aXRoX2RlcGVuZGVuY2llcz1UcnVlKToKKyAgICAgICAgaWYgd2l0aF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKyAgICAgICAgICAgIGNtZCA9ICIlcyBwdXJnZSAlcyIgJSAoc2VsZi5hcHRfZ2V0X2NtZCwgJyAnLmpvaW4ocGtncykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgLS1hZG1pbmRpcj0lcy92YXIvbGliL2Rwa2cgLS1pbnN0ZGlyPSVzIiBcCisgICAgICAgICAgICAgICAgICAiIC1QIC0tZm9yY2UtZGVwZW5kcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJkcGtnIiksCisgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLnRhcmdldF9yb290ZnMsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byByZW1vdmUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfbG9jaygpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbmRleGVyLndyaXRlX2luZGV4KCkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc291cmNlc19jb25mID0gb3MucGF0aC5qb2luKCIlcy9ldGMvYXB0L3NvdXJjZXMubGlzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBhcmNoX2xpc3QgPSBbXQorCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYWxsX2FyY2hfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB3aXRoIG9wZW4oc291cmNlc19jb25mLCAidysiKSBhcyBzb3VyY2VzX2ZpbGU6CisgICAgICAgICAgICBmb3IgdXJpIGluIHNlbGYuZmVlZF91cmlzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZnVsbF91cmkgPSB1cmkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZlZWRfcHJlZml4OgorICAgICAgICAgICAgICAgICAgICBmdWxsX3VyaSA9IG9zLnBhdGguam9pbih1cmksIHNlbGYuZmVlZF9wcmVmaXgpCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgZHBrZyBjaGFubmVsIGF0ICglcyknICUgdXJpKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2VzX2ZpbGUud3JpdGUoImRlYiAlcy8lcyAuL1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVsbF91cmksIGFyY2gpKQorCisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmLCBhcmNocywgYmFzZV9hcmNocyk6CisgICAgICAgIGJhc2VfYXJjaHMgPSByZS5zdWIoIl8iLCAiLSIsIGJhc2VfYXJjaHMpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5hcHRfY29uZl9kaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuYXB0X2NvbmZfZGlyLCBUcnVlKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuYXB0X2NvbmZfZGlyICsgIi9saXN0cy9wYXJ0aWFsLyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpciArICIvYXB0LmNvbmYuZC8iKQorCisgICAgICAgIGFyY2hfbGlzdCA9IFtdCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYWxsX2FyY2hfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAicHJlZmVyZW5jZXMiKSwgIncrIikgYXMgcHJlZnNfZmlsZToKKyAgICAgICAgICAgIHByaW9yaXR5ID0gODAxCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgcHJlZnNfZmlsZS53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICpcbiIKKyAgICAgICAgICAgICAgICAgICAgIlBpbjogcmVsZWFzZSBsPSVzXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW4tUHJpb3JpdHk6ICVkXG5cbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgKz0gNQorCisgICAgICAgICAgICBwa2dfZXhjbHVkZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19leGNsdWRlLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcHJlZnNfZmlsZS53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW46IHJlbGVhc2UgKlxuIgorICAgICAgICAgICAgICAgICAgICAiUGluLVByaW9yaXR5OiAtMVxuXG4iICUgcGtnKQorCisgICAgICAgIGFyY2hfbGlzdC5yZXZlcnNlKCkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAic291cmNlcy5saXN0IiksICJ3KyIpIGFzIHNvdXJjZXNfZmlsZToKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICBzb3VyY2VzX2ZpbGUud3JpdGUoImRlYiBmaWxlOiVzLyAuL1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKQorCisgICAgICAgIGJhc2VfYXJjaF9saXN0ID0gYmFzZV9hcmNocy5zcGxpdCgpCisgICAgICAgIG11bHRpbGliX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKTsKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gbXVsdGlsaWJfdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHZhcmlhbnQgPT0gImxpYjMyIjoKKyAgICAgICAgICAgICAgICBiYXNlX2FyY2hfbGlzdC5hcHBlbmQoImkzODYiKQorICAgICAgICAgICAgZWxpZiB2YXJpYW50ID09ICJsaWI2NCI6CisgICAgICAgICAgICAgICAgYmFzZV9hcmNoX2xpc3QuYXBwZW5kKCJhbWQ2NCIpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuYXB0X2NvbmZfZmlsZSwgIncrIikgYXMgYXB0X2NvbmY6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5kLmV4cGFuZCgiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L2FwdC9hcHQuY29uZi5zYW1wbGUiKSkgYXMgYXB0X2NvbmZfc2FtcGxlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGFwdF9jb25mX3NhbXBsZS5yZWFkKCkuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoX2FyY2ggPSByZS5tYXRjaCgiICBBcmNoaXRlY3R1cmUgXCIuKlwiOyQiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hfYXJjaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlX2FyY2ggaW4gYmFzZV9hcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyArPSAiXCIlc1wiOyIgJSBiYXNlX2FyY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKCIgIEFyY2hpdGVjdHVyZXMgeyVzfTtcbiIgJSBhcmNoaXRlY3R1cmVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKCIgIEFyY2hpdGVjdHVyZSBcIiVzXCI7XG4iICUgYmFzZV9hcmNocykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIiNST09URlMjIiwgc2VsZi50YXJnZXRfcm9vdGZzLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI0FQVENPTkYjIiwgc2VsZi5hcHRfY29uZl9kaXIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZShsaW5lICsgIlxuIikKKworICAgICAgICB0YXJnZXRfZHBrZ19kaXIgPSAiJXMvdmFyL2xpYi9kcGtnIiAlIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImluZm8iKSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInVwZGF0ZXMiKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInN0YXR1cyIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInN0YXR1cyIpLCAidysiKS5jbG9zZSgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGFyZ2V0X2Rwa2dfZGlyLCAiYXZhaWxhYmxlIikpOgorICAgICAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4odGFyZ2V0X2Rwa2dfZGlyLCAiYXZhaWxhYmxlIiksICJ3KyIpLmNsb3NlKCkKKworICAgIGRlZiByZW1vdmVfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ29wa2dsaWJkaXInLCBUcnVlKSksIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy8iLCBUcnVlKQorCisgICAgZGVmIGZpeF9icm9rZW5fZGVwZW5kZW5jaWVzKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBjbWQgPSAiJXMgJXMgLWYgaW5zdGFsbCIgJSAoc2VsZi5hcHRfZ2V0X2NtZCwgc2VsZi5hcHRfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZml4IGJyb2tlbiBkZXBlbmRlbmNpZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBEcGtnUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMpLmxpc3QoKQorCisKK2RlZiBnZW5lcmF0ZV9pbmRleF9maWxlcyhkKToKKyAgICBjbGFzc2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VfQ0xBU1NFUycsIFRydWUpLnJlcGxhY2UoInBhY2thZ2VfIiwgIiIpLnNwbGl0KCkKKworICAgIGluZGV4ZXJfbWFwID0geworICAgICAgICAicnBtIjogKFJwbUluZGV4ZXIsIGQuZ2V0VmFyKCdERVBMT1lfRElSX1JQTScsIFRydWUpKSwKKyAgICAgICAgImlwayI6IChPcGtnSW5kZXhlciwgZC5nZXRWYXIoJ0RFUExPWV9ESVJfSVBLJywgVHJ1ZSkpLAorICAgICAgICAiZGViIjogKERwa2dJbmRleGVyLCBkLmdldFZhcignREVQTE9ZX0RJUl9ERUInLCBUcnVlKSkKKyAgICB9CisKKyAgICByZXN1bHQgPSBOb25lCisKKyAgICBmb3IgcGtnX2NsYXNzIGluIGNsYXNzZXM6CisgICAgICAgIGlmIG5vdCBwa2dfY2xhc3MgaW4gaW5kZXhlcl9tYXA6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGluZGV4ZXJfbWFwW3BrZ19jbGFzc11bMV0pOgorICAgICAgICAgICAgcmVzdWx0ID0gaW5kZXhlcl9tYXBbcGtnX2NsYXNzXVswXShkLCBpbmRleGVyX21hcFtwa2dfY2xhc3NdWzFdKS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgIiIiCisgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gcnVuIHRoaXMgYXMgYSBzdGFuZGFsb25lIHNjcmlwdCwgZnJvbSBvdXRzaWRlIGJpdGJha2UKKyAgICBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICAiIiIKKyAgICBUQkQKKyAgICAiIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWRhdGEucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWYwNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5CkBAIC0wLDAgKzEsOTQgQEAKK2ltcG9ydCBjb2RlY3MKKworZGVmIHBhY2thZ2VkKHBrZywgZCk6CisgICAgcmV0dXJuIG9zLmFjY2VzcyhnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKSArICcucGFja2FnZWQnLCBvcy5SX09LKQorCitkZWYgcmVhZF9wa2dkYXRhZmlsZShmbik6CisgICAgcGtnZGF0YSA9IHt9CisKKyAgICBkZWYgZGVjb2RlKHN0cik6CisgICAgICAgIGMgPSBjb2RlY3MuZ2V0ZGVjb2Rlcigic3RyaW5nX2VzY2FwZSIpCisgICAgICAgIHJldHVybiBjKHN0cilbMF0KKworICAgIGlmIG9zLmFjY2Vzcyhmbiwgb3MuUl9PSyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBmID0gb3BlbihmbiwgJ3InKQorICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHIgPSByZS5jb21waWxlKCIoW146XSspOlxzKiguKikiKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHBrZ2RhdGFbbS5ncm91cCgxKV0gPSBkZWNvZGUobS5ncm91cCgyKSkKKworICAgIHJldHVybiBwa2dkYXRhCisKK2RlZiBnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKToKKyAgICByZXR1cm4gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9L3J1bnRpbWUvJXMnICUgcGtnKQorCitkZWYgaGFzX3N1YnBrZ2RhdGEocGtnLCBkKToKKyAgICByZXR1cm4gb3MuYWNjZXNzKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpLCBvcy5SX09LKQorCitkZWYgcmVhZF9zdWJwa2dkYXRhKHBrZywgZCk6CisgICAgcmV0dXJuIHJlYWRfcGtnZGF0YWZpbGUoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkpCisKK2RlZiBoYXNfcGtnZGF0YShwbiwgZCk6CisgICAgZm4gPSBkLmV4cGFuZCgnJHtQS0dEQVRBX0RJUn0vJXMnICUgcG4pCisgICAgcmV0dXJuIG9zLmFjY2Vzcyhmbiwgb3MuUl9PSykKKworZGVmIHJlYWRfcGtnZGF0YShwbiwgZCk6CisgICAgZm4gPSBkLmV4cGFuZCgnJHtQS0dEQVRBX0RJUn0vJXMnICUgcG4pCisgICAgcmV0dXJuIHJlYWRfcGtnZGF0YWZpbGUoZm4pCisKKyMKKyMgQ29sbGFwc2UgRk9PX3BrZyB2YXJpYWJsZXMgaW50byBGT08KKyMKK2RlZiByZWFkX3N1YnBrZ2RhdGFfZGljdChwa2csIGQpOgorICAgIHJldCA9IHt9CisgICAgc3ViZCA9IHJlYWRfcGtnZGF0YWZpbGUoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkpCisgICAgZm9yIHZhciBpbiBzdWJkOgorICAgICAgICBuZXd2YXIgPSB2YXIucmVwbGFjZSgiXyIgKyBwa2csICIiKQorICAgICAgICBpZiBuZXd2YXIgPT0gdmFyIGFuZCB2YXIgKyAiXyIgKyBwa2cgaW4gc3ViZDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldFtuZXd2YXJdID0gc3ViZFt2YXJdCisgICAgcmV0dXJuIHJldAorCitkZWYgX3BrZ21hcChkKToKKyAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcgcGFja2FnZSB0byByZWNpcGUgbmFtZS4iIiIKKworICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorCisgICAgcGtnbWFwID0ge30KKyAgICB0cnk6CisgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwa2dkYXRhZGlyKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBiYi53YXJuKCJObyBmaWxlcyBpbiAlcz8iICUgcGtnZGF0YWRpcikKKyAgICAgICAgZmlsZXMgPSBbXQorCisgICAgZm9yIHBuIGluIGZpbHRlcihsYW1iZGEgZjogbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIGYpKSwgZmlsZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwa2dkYXRhID0gcmVhZF9wa2dkYXRhZmlsZShvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgcG4pKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcGFja2FnZXMgPSBwa2dkYXRhLmdldCgiUEFDS0FHRVMiKSBvciAiIgorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBwa2dtYXBbcGtnXSA9IHBuCisKKyAgICByZXR1cm4gcGtnbWFwCisKK2RlZiBwa2dtYXAoZCk6CisgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHBhY2thZ2UgdG8gcmVjaXBlIG5hbWUuCisgICAgQ2FjaGUgdGhlIG1hcHBpbmcgaW4gdGhlIG1ldGFkYXRhIiIiCisKKyAgICBwa2dtYXBfZGF0YSA9IGQuZ2V0VmFyKCJfX3BrZ21hcF9kYXRhIiwgRmFsc2UpCisgICAgaWYgcGtnbWFwX2RhdGEgaXMgTm9uZToKKyAgICAgICAgcGtnbWFwX2RhdGEgPSBfcGtnbWFwKGQpCisgICAgICAgIGQuc2V0VmFyKCJfX3BrZ21hcF9kYXRhIiwgcGtnbWFwX2RhdGEpCisKKyAgICByZXR1cm4gcGtnbWFwX2RhdGEKKworZGVmIHJlY2lwZW5hbWUocGtnLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHJlY2lwZSBuYW1lIGZvciB0aGUgZ2l2ZW4gYmluYXJ5IHBhY2thZ2UgbmFtZS4iIiIKKworICAgIHJldHVybiBwa2dtYXAoZCkuZ2V0KHBrZykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9wYWNrYWdlZ3JvdXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlYjQyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5CkBAIC0wLDAgKzEsMzYgQEAKK2ltcG9ydCBpdGVydG9vbHMKKworZGVmIGlzX29wdGlvbmFsKGZlYXR1cmUsIGQpOgorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIkZFQVRVUkVfUEFDS0FHRVNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkKKyAgICBpZiBwYWNrYWdlczoKKyAgICAgICAgcmV0dXJuIGJvb2woZC5nZXRWYXJGbGFnKCJGRUFUVVJFX1BBQ0tBR0VTXyVzIiAlIGZlYXR1cmUsICJvcHRpb25hbCIpKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBib29sKGQuZ2V0VmFyRmxhZygiUEFDS0FHRV9HUk9VUF8lcyIgJSBmZWF0dXJlLCAib3B0aW9uYWwiKSkKKworZGVmIHBhY2thZ2VzKGZlYXR1cmVzLCBkKToKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcigiRkVBVFVSRV9QQUNLQUdFU18lcyIgJSBmZWF0dXJlLCBUcnVlKQorICAgICAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFX0dST1VQXyVzIiAlIGZlYXR1cmUsIFRydWUpCisgICAgICAgIGZvciBwa2cgaW4gKHBhY2thZ2VzIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgeWllbGQgcGtnCisKK2RlZiByZXF1aXJlZF9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgcmVxID0gZmlsdGVyKGxhbWJkYSBmZWF0dXJlOiBub3QgaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIHJldHVybiBwYWNrYWdlcyhyZXEsIGQpCisKK2RlZiBvcHRpb25hbF9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgb3B0ID0gZmlsdGVyKGxhbWJkYSBmZWF0dXJlOiBpc19vcHRpb25hbChmZWF0dXJlLCBkKSwgZmVhdHVyZXMpCisgICAgcmV0dXJuIHBhY2thZ2VzKG9wdCwgZCkKKworZGVmIGFjdGl2ZV9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgcmV0dXJuIGl0ZXJ0b29scy5jaGFpbihyZXF1aXJlZF9wYWNrYWdlcyhmZWF0dXJlcywgZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wYWNrYWdlcyhmZWF0dXJlcywgZCkpCisKK2RlZiBhY3RpdmVfcmVjaXBlcyhmZWF0dXJlcywgZCk6CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICBmb3IgcGtnIGluIGFjdGl2ZV9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgICAgIHJlY2lwZSA9IG9lLnBhY2thZ2VkYXRhLnJlY2lwZW5hbWUocGtnLCBkKQorICAgICAgICBpZiByZWNpcGU6CisgICAgICAgICAgICB5aWVsZCByZWNpcGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0Y2gucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOGJmMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGNoLnB5CkBAIC0wLDAgKzEsNjU5IEBACitpbXBvcnQgb2UucGF0aAorCitjbGFzcyBOb3RGb3VuZEVycm9yKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJFcnJvcjogJXMgbm90IGZvdW5kLiIgJSBzZWxmLnBhdGgKKworY2xhc3MgQ21kRXJyb3IoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhpdHN0YXR1cywgb3V0cHV0KToKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBleGl0c3RhdHVzCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kIEVycm9yOiBleGl0IHN0YXR1czogJWQgIE91dHB1dDpcbiVzIiAlIChzZWxmLnN0YXR1cywgc2VsZi5vdXRwdXQpCisKKworZGVmIHJ1bmNtZChhcmdzLCBkaXIgPSBOb25lKToKKyAgICBpbXBvcnQgcGlwZXMKKworICAgIGlmIGRpcjoKKyAgICAgICAgb2xkZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKGRpcikKKyAgICAgICAgb3MuY2hkaXIoZGlyKQorICAgICAgICAjIHByaW50KCJjd2Q6ICVzIC0+ICVzIiAlIChvbGRkaXIsIGRpcikpCisKKyAgICB0cnk6CisgICAgICAgIGFyZ3MgPSBbIHBpcGVzLnF1b3RlKHN0cihhcmcpKSBmb3IgYXJnIGluIGFyZ3MgXQorICAgICAgICBjbWQgPSAiICIuam9pbihhcmdzKQorICAgICAgICAjIHByaW50KCJjbWQ6ICVzIiAlIGNtZCkKKyAgICAgICAgKGV4aXRzdGF0dXMsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiBleGl0c3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBDbWRFcnJvcihleGl0c3RhdHVzID4+IDgsIG91dHB1dCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZmluYWxseToKKyAgICAgICAgaWYgZGlyOgorICAgICAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorCitjbGFzcyBQYXRjaEVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJQYXRjaCBFcnJvcjogJXMiICUgc2VsZi5tc2cKKworY2xhc3MgUGF0Y2hTZXQob2JqZWN0KToKKyAgICBkZWZhdWx0cyA9IHsKKyAgICAgICAgInN0cmlwcGF0aCI6IDEKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBkKToKKyAgICAgICAgc2VsZi5kaXIgPSBkaXIKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnBhdGNoZXMgPSBbXQorICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgZGVmIGN1cnJlbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jdXJyZW50CisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbiBvdXQgdGhlIHBhdGNoIHNldC4gIEdlbmVyYWxseSBpbmNsdWRlcyB1bmFwcGx5aW5nIGFsbAorICAgICAgICBwYXRjaGVzIGFuZCB3aXBpbmcgb3V0IGFsbCBhc3NvY2lhdGVkIG1ldGFkYXRhLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSk6CisgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoImZpbGUiKToKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlBhdGNoIGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgaW4gcGF0Y2ggaW1wb3J0LiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhdGNoWyJmaWxlIl0gPSBiYi5mZXRjaDIubG9jYWxwYXRoKHBhdGNoWyJyZW1vdGUiXSwgc2VsZi5kKQorCisgICAgICAgIGZvciBwYXJhbSBpbiBQYXRjaFNldC5kZWZhdWx0czoKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQocGFyYW0pOgorICAgICAgICAgICAgICAgIHBhdGNoW3BhcmFtXSA9IFBhdGNoU2V0LmRlZmF1bHRzW3BhcmFtXQorCisgICAgICAgIGlmIHBhdGNoLmdldCgicmVtb3RlIik6CisgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZGF0YS5leHBhbmQoYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCksIHNlbGYuZCkKKworICAgICAgICBwYXRjaFsiZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbImZpbGUiXSkKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUG9wKHNlbGYsIGZvcmNlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmVmcmVzaChzZWxmLCByZW1vdGUgPSBOb25lLCBhbGwgPSBOb25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldFBhdGNoZWRGaWxlcyhwYXRjaGZpbGUsIHN0cmlwbGV2ZWwsIHNyY2Rpcj1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlYWQgYSBwYXRjaCBmaWxlIGFuZCBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgaXQgd2lsbCBtb2RpZnkuCisgICAgICAgIFBhcmFtczoKKyAgICAgICAgICAgIHBhdGNoZmlsZTogdGhlIHBhdGNoIGZpbGUgdG8gcmVhZAorICAgICAgICAgICAgc3RyaXBsZXZlbDogdGhlIHN0cmlwIGxldmVsIGF0IHdoaWNoIHRoZSBwYXRjaCBpcyBnb2luZyB0byBiZSBhcHBsaWVkCisgICAgICAgICAgICBzcmNkaXI6IG9wdGlvbmFsIHBhdGggdG8gam9pbiBvbnRvIHRoZSBwYXRjaGVkIGZpbGUgcGF0aHMKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgbGlzdCBvZiB0dXBsZXMgb2YgZmlsZSBwYXRoIGFuZCBjaGFuZ2UgbW9kZSAoJ0EnIGZvciBhZGQsCisgICAgICAgICAgICAnRCcgZm9yIGRlbGV0ZSBvciAnTScgZm9yIG1vZGlmeSkKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIHBhdGNoZWRwYXRoKHBhdGNobGluZSk6CisgICAgICAgICAgICBmaWxlcHRoID0gcGF0Y2hsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgIGlmIGZpbGVwdGguZW5kc3dpdGgoJy9kZXYvbnVsbCcpOgorICAgICAgICAgICAgICAgIHJldHVybiAnL2Rldi9udWxsJworICAgICAgICAgICAgZmlsZXNwbGl0ID0gZmlsZXB0aC5zcGxpdChvcy5zZXApCisgICAgICAgICAgICBpZiBzdHJpcGxldmVsID4gbGVuKGZpbGVzcGxpdCk6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoJ1BhdGNoICVzIGhhcyBpbnZhbGlkIHN0cmlwIGxldmVsICVkJyAlIChwYXRjaGZpbGUsIHN0cmlwbGV2ZWwpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gb3Muc2VwLmpvaW4oZmlsZXNwbGl0W3N0cmlwbGV2ZWw6XSkKKworICAgICAgICBjb3BpZWRtb2RlID0gRmFsc2UKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICB3aXRoIG9wZW4ocGF0Y2hmaWxlKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy0tLSAnKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hwdGggPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGF0Y2hwdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBjb3BpZWRtb2RlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gcGF0Y2hwdGgKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRmaWxlID0gcGF0Y2hwdGgKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKysrICcpOgorICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWRkZWRmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKioqICcpOgorICAgICAgICAgICAgICAgICAgICBjb3BpZWRtb2RlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkZmlsZSA9IHBhdGNoZWRwYXRoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZW1vdmVkZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGlmIGFkZGVkZmlsZSBhbmQgcmVtb3ZlZGZpbGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWRmaWxlID09ICcvZGV2L251bGwnOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICdBJworICAgICAgICAgICAgICAgICAgICBlbGlmIGFkZGVkZmlsZSA9PSAnL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnRCcKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnTScKKyAgICAgICAgICAgICAgICAgICAgaWYgc3JjZGlyOgorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNyY2RpciwgYWRkZWRmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gYWRkZWRmaWxlCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZCgoZnVsbHBhdGgsIG1vZGUpKQorCisgICAgICAgIHJldHVybiBmaWxlbGlzdAorCisKK2NsYXNzIFBhdGNoVHJlZShQYXRjaFNldCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIFBhdGNoU2V0Ll9faW5pdF9fKHNlbGYsIGRpciwgZCkKKyAgICAgICAgc2VsZi5wYXRjaGRpciA9IG9zLnBhdGguam9pbihzZWxmLmRpciwgJ3BhdGNoZXMnKQorICAgICAgICBzZWxmLnNlcmllc3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJywgJ3NlcmllcycpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnBhdGNoZGlyKQorCisgICAgZGVmIF9hcHBlbmRQYXRjaEZpbGUoc2VsZiwgcGF0Y2gsIHN0cmlwcGF0aCk6CisgICAgICAgIHdpdGggb3BlbihzZWxmLnNlcmllc3BhdGgsICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUob3MucGF0aC5iYXNlbmFtZShwYXRjaCkgKyAiLCIgKyBzdHJpcHBhdGggKyAiXG4iKQorICAgICAgICBzaGVsbGNtZCA9IFsiY2F0IiwgcGF0Y2gsICI+IiAsIHNlbGYucGF0Y2hkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKV0KKyAgICAgICAgcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgIGRlZiBfcmVtb3ZlUGF0Y2goc2VsZiwgcCk6CisgICAgICAgIHBhdGNoID0ge30KKyAgICAgICAgcGF0Y2hbJ2ZpbGUnXSA9IHAuc3BsaXQoIiwiKVswXQorICAgICAgICBwYXRjaFsnc3RyaXBwYXRoJ10gPSBwLnNwbGl0KCIsIilbMV0KKyAgICAgICAgc2VsZi5fYXBwbHlwYXRjaChwYXRjaCwgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgX3JlbW92ZVBhdGNoRmlsZShzZWxmLCBhbGwgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnNlcmllc3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNlcmllc3BhdGgsICdyKycpIGFzIGY6CisgICAgICAgICAgICBwYXRjaGVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBmb3IgcCBpbiByZXZlcnNlZChwYXRjaGVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaChvcy5wYXRoLmpvaW4oc2VsZi5wYXRjaGRpciwgcC5zdHJpcCgpKSkKKyAgICAgICAgICAgIHBhdGNoZXMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlUGF0Y2gob3MucGF0aC5qb2luKHNlbGYucGF0Y2hkaXIsIHBhdGNoZXNbLTFdLnN0cmlwKCkpKQorICAgICAgICAgICAgcGF0Y2hlcy5wb3AoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmb3IgcCBpbiBwYXRjaGVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUocCkKKyAgICAgICAgIAorICAgIGRlZiBJbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlID0gTm9uZSk6CisgICAgICAgICIiIiIiIgorICAgICAgICBQYXRjaFNldC5JbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlKQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpID0gc2VsZi5fY3VycmVudCArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgIHNlbGYucGF0Y2hlcy5pbnNlcnQoaSwgcGF0Y2gpCisKKyAgICBkZWYgX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlID0gRmFsc2UsIHJldmVyc2UgPSBGYWxzZSwgcnVuID0gVHJ1ZSk6CisgICAgICAgIHNoZWxsY21kID0gWyJjYXQiLCBwYXRjaFsnZmlsZSddLCAifCIsICJwYXRjaCIsICItcCIsIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgICAgIHNoZWxsY21kLmFwcGVuZCgnLVInKQorCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gInNoIiArICItYyIgKyAiICIuam9pbihzaGVsbGNtZCkKKworICAgICAgICBpZiBub3QgZm9yY2U6CisgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy0tZHJ5LXJ1bicpCisKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNoZWxsY21kLnBvcChsZW4oc2hlbGxjbWQpIC0gMSkKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICBpZiBub3QgcmV2ZXJzZToKKyAgICAgICAgICAgIHNlbGYuX2FwcGVuZFBhdGNoRmlsZShwYXRjaFsnZmlsZSddLCBwYXRjaFsnc3RyaXBwYXRoJ10pCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIFB1c2goc2VsZiwgZm9yY2UgPSBGYWxzZSwgYWxsID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBiYi5ub3RlKCJzZWxmLl9jdXJyZW50IGlzICVzIiAlIHNlbGYuX2N1cnJlbnQpCisgICAgICAgIGJiLm5vdGUoInBhdGNoZXMgaXMgJXMiICUgc2VsZi5wYXRjaGVzKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLnBhdGNoZXM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiYXBwbHlpbmcgcGF0Y2ggJXMiICUgaSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hcHBseXBhdGNoKGksIGZvcmNlKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5leHQgPSBzZWxmLl9jdXJyZW50ICsgMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXh0ID0gMAorCisgICAgICAgICAgICBiYi5ub3RlKCJhcHBseWluZyBwYXRjaCAlcyIgJSBzZWxmLnBhdGNoZXNbbmV4dF0pCisgICAgICAgICAgICByZXQgPSBzZWxmLl9hcHBseXBhdGNoKHNlbGYucGF0Y2hlc1tuZXh0XSwgZm9yY2UpCisKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBuZXh0CisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgUG9wKHNlbGYsIGZvcmNlID0gTm9uZSwgYWxsID0gTm9uZSk6CisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoRmlsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoRmlsZShGYWxzZSkKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50ID09IDA6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gc2VsZi5fY3VycmVudCAtIDEKKworICAgIGRlZiBDbGVhbihzZWxmKToKKyAgICAgICAgIiIiIiIiCisgICAgICAgIHNlbGYuUG9wKGFsbD1UcnVlKQorCitjbGFzcyBHaXRBcHBseVRyZWUoUGF0Y2hUcmVlKToKKyAgICBwYXRjaF9saW5lX3ByZWZpeCA9ICclJSBvcmlnaW5hbCBwYXRjaCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFRyZWUuX19pbml0X18oc2VsZiwgZGlyLCBkKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0UGF0Y2hIZWFkZXIocGF0Y2hmaWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4dHJhY3QganVzdCB0aGUgaGVhZGVyIGxpbmVzIGZyb20gdGhlIHRvcCBvZiBhIHBhdGNoIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHBhdGNoZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0luZGV4OiAnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ2RpZmYgLScpIG9yIGxpbmUuc3RhcnRzd2l0aCgnLS0tJyk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcmVwYXJlQ29tbWl0KHBhdGNoZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgZ2l0IGNvbW1pdCBjb21tYW5kIGxpbmUgYmFzZWQgb24gdGhlIGhlYWRlciBmcm9tIGEgcGF0Y2ggZmlsZQorICAgICAgICAodHlwaWNhbGx5IHRoaXMgaXMgdXNlZnVsIGZvciBwYXRjaGVzIHRoYXQgY2Fubm90IGJlIGFwcGxpZWQgd2l0aCAiZ2l0IGFtIiBkdWUgdG8gZm9ybWF0dGluZykKKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgYXV0aG9yX3JlID0gcmUuY29tcGlsZSgnW1xTIF0rIDxcUytAXFMrXC5cUys+JykKKyAgICAgICAgIyBQcm9jZXNzIHBhdGNoIGhlYWRlciBhbmQgZXh0cmFjdCB1c2VmdWwgaW5mb3JtYXRpb24KKyAgICAgICAgbGluZXMgPSBHaXRBcHBseVRyZWUuZXh0cmFjdFBhdGNoSGVhZGVyKHBhdGNoZmlsZSkKKyAgICAgICAgb3V0bGluZXMgPSBbXQorICAgICAgICBhdXRob3IgPSBOb25lCisgICAgICAgIGRhdGUgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTdWJqZWN0OiAnKToKKyAgICAgICAgICAgICAgICBzdWJqZWN0ID0gbGluZS5zcGxpdCgnOicsIDEpWzFdCisgICAgICAgICAgICAgICAgIyBSZW1vdmUgYW55IFtQQVRDSF1bb2UtY29yZV0gZXRjLgorICAgICAgICAgICAgICAgIHN1YmplY3QgPSByZS5zdWIocidcWy4rP1xdXHMqJywgJycsIHN1YmplY3QpCisgICAgICAgICAgICAgICAgb3V0bGluZXMuaW5zZXJ0KDAsICclc1xuXG4nICUgc3ViamVjdC5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0Zyb206ICcpIG9yIGxpbmUuc3RhcnRzd2l0aCgnQXV0aG9yOiAnKToKKyAgICAgICAgICAgICAgICBhdXRob3J2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKS5yZXBsYWNlKCciJywgJycpCisgICAgICAgICAgICAgICAgIyBnaXQgaXMgZnVzc3kgYWJvdXQgYXV0aG9yIGZvcm1hdHRpbmcgaS5lLiBpdCBtdXN0IGJlIE5hbWUgPGVtYWlsQGRvbWFpbj4KKyAgICAgICAgICAgICAgICBpZiBhdXRob3JfcmUubWF0Y2goYXV0aG9ydmFsKToKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gYXV0aG9ydmFsCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RhdGU6ICcpOgorICAgICAgICAgICAgICAgIGlmIGRhdGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGF0ZXZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICMgVmVyeSBjcnVkZSBjaGVjayBmb3IgZGF0ZSBmb3JtYXQsIHNpbmNlIGdpdCB3aWxsIGJsb3cgdXAgaWYgaXQncyBub3QgaW4gdGhlIHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICMgZm9ybWF0LiBXaXRob3V0IGUuZy4gYSBweXRob24tZGF0ZXV0aWxzIGRlcGVuZGVuY3kgd2UgY2FuJ3QgZG8gYSB3aG9sZSBsb3QgbW9yZQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZGF0ZXZhbCkgPiAxMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRldmFsCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU2lnbmVkLW9mZi1ieTogJyk6CisgICAgICAgICAgICAgICAgYXV0aG9ydmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkucmVwbGFjZSgnIicsICcnKQorICAgICAgICAgICAgICAgICMgZ2l0IGlzIGZ1c3N5IGFib3V0IGF1dGhvciBmb3JtYXR0aW5nIGkuZS4gaXQgbXVzdCBiZSBOYW1lIDxlbWFpbEBkb21haW4+CisgICAgICAgICAgICAgICAgaWYgYXV0aG9yX3JlLm1hdGNoKGF1dGhvcnZhbCk6CisgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IGF1dGhvcnZhbAorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICMgV3JpdGUgb3V0IGNvbW1pdCBtZXNzYWdlIHRvIGEgZmlsZQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgICAgICB0bXBmaWxlID0gdGYubmFtZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0bGluZXM6CisgICAgICAgICAgICAgICAgdGYud3JpdGUobGluZSkKKyAgICAgICAgIyBQcmVwYXJlIGdpdCBjb21tYW5kCisgICAgICAgIGNtZCA9IFsiZ2l0IiwgImNvbW1pdCIsICItRiIsIHRtcGZpbGVdCisgICAgICAgICMgZ2l0IGRvZXNuJ3QgbGlrZSBwbGFpbiBlbWFpbCBhZGRyZXNzZXMgYXMgYXV0aG9ycworICAgICAgICBpZiBhdXRob3IgYW5kICc8JyBpbiBhdXRob3I6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWF1dGhvcj0iJXMiJyAlIGF1dGhvcikKKyAgICAgICAgaWYgZGF0ZToKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tZGF0ZT0iJXMiJyAlIGRhdGUpCisgICAgICAgIHJldHVybiAodG1wZmlsZSwgY21kKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0UGF0Y2hlcyh0cmVlLCBzdGFydGNvbW1pdCwgb3V0ZGlyKToKKyAgICAgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdvZXBhdGNoJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJmb3JtYXQtcGF0Y2giLCBzdGFydGNvbW1pdCwgIi1vIiwgdGVtcGRpcl0KKyAgICAgICAgICAgIG91dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgdHJlZSkKKyAgICAgICAgICAgIGlmIG91dDoKKyAgICAgICAgICAgICAgICBmb3Igc3JjZmlsZSBpbiBvdXQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihzcmNmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChHaXRBcHBseVRyZWUucGF0Y2hfbGluZV9wcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gbGluZS5zcGxpdCgpWy0xXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShzcmNmaWxlKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dGRpciwgb3V0ZmlsZSksICd3JykgYXMgb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBwYXRjaGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mLndyaXRlKGxpbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICBkZWYgX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlID0gRmFsc2UsIHJldmVyc2UgPSBGYWxzZSwgcnVuID0gVHJ1ZSk6CisgICAgICAgIGltcG9ydCBzaHV0aWwKKworICAgICAgICBkZWYgX2FwcGx5cGF0Y2hoZWxwZXIoc2hlbGxjbWQsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICAgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy1SJykKKworICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKHBhdGNoWydmaWxlJ10pCisKKyAgICAgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICAgICAgcmV0dXJuICJzaCIgKyAiLWMiICsgIiAiLmpvaW4oc2hlbGxjbWQpCisKKyAgICAgICAgICAgIHJldHVybiBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorCisgICAgICAgICMgQWRkIGhvb2tzIHdoaWNoIGFkZCBhIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIHBhdGNoIGZpbGUgbmFtZSBpbiB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgcmVwb3Jvb3QgPSAocnVuY21kKCJnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCIuc3BsaXQoKSwgc2VsZi5kaXIpIG9yICcnKS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCByZXBvcm9vdDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2Fubm90IGdldCByZXBvc2l0b3J5IHJvb3QgZm9yIGRpcmVjdG9yeSAlcyIgJSBzZWxmLmRpcikKKyAgICAgICAgY29tbWl0aG9vayA9IG9zLnBhdGguam9pbihyZXBvcm9vdCwgJy5naXQnLCAnaG9va3MnLCAnY29tbWl0LW1zZycpCisgICAgICAgIGNvbW1pdGhvb2tfYmFja3VwID0gY29tbWl0aG9vayArICcuZGV2dG9vbC1vcmlnJworICAgICAgICBhcHBseWhvb2sgPSBvcy5wYXRoLmpvaW4ocmVwb3Jvb3QsICcuZ2l0JywgJ2hvb2tzJywgJ2FwcGx5cGF0Y2gtbXNnJykKKyAgICAgICAgYXBwbHlob29rX2JhY2t1cCA9IGFwcGx5aG9vayArICcuZGV2dG9vbC1vcmlnJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21taXRob29rKToKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGNvbW1pdGhvb2ssIGNvbW1pdGhvb2tfYmFja3VwKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcHBseWhvb2spOgorICAgICAgICAgICAgc2h1dGlsLm1vdmUoYXBwbHlob29rLCBhcHBseWhvb2tfYmFja3VwKQorICAgICAgICB3aXRoIG9wZW4oY29tbWl0aG9vaywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgIyBOT1RFOiB0aGUgZm9ybWF0dGluZyBoZXJlIGlzIHNpZ25pZmljYW50OyBpZiB5b3UgY2hhbmdlIGl0IHlvdSdsbCBhbHNvIG5lZWQgdG8KKyAgICAgICAgICAgICMgY2hhbmdlIG90aGVyIHBsYWNlcyB3aGljaCByZWFkIGl0IGJhY2sKKyAgICAgICAgICAgIGYud3JpdGUoJ2VjaG8gPj4gJDFcbicpCisgICAgICAgICAgICBmLndyaXRlKCdlY2hvICIlczogJFBBVENIRklMRSIgPj4gJDFcbicgJSBHaXRBcHBseVRyZWUucGF0Y2hfbGluZV9wcmVmaXgpCisgICAgICAgIG9zLmNobW9kKGNvbW1pdGhvb2ssIDA3NTUpCisgICAgICAgIHNodXRpbC5jb3B5Mihjb21taXRob29rLCBhcHBseWhvb2spCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGNoZmlsZXZhciA9ICdQQVRDSEZJTEU9IiVzIicgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWydmaWxlJ10pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbcGF0Y2hmaWxldmFyLCAiZ2l0IiwgIi0td29yay10cmVlPSVzIiAlIHJlcG9yb290LCAiYW0iLCAiLTMiLCAiLS1rZWVwLWNyIiwgIi1wJXMiICUgcGF0Y2hbJ3N0cmlwcGF0aCddXQorICAgICAgICAgICAgICAgIHJldHVybiBfYXBwbHlwYXRjaGhlbHBlcihzaGVsbGNtZCwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIGFib3J0IHRoZSBnaXQgYW0sIG9yIHdlJ2xsIHN0aWxsIGJlIHdpdGhpbiBpdCBhdCB0aGUgZW5kCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaGVsbGNtZCA9IFsiZ2l0IiwgIi0td29yay10cmVlPSVzIiAlIHJlcG9yb290LCAiYW0iLCAiLS1hYm9ydCJdCisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgIyBGYWxsIGJhY2sgdG8gZ2l0IGFwcGx5CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICItLWdpdC1kaXI9JXMiICUgcmVwb3Jvb3QsICJhcHBseSIsICItcCVzIiAlIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9hcHBseXBhdGNoaGVscGVyKHNoZWxsY21kLCBwYXRjaCwgZm9yY2UsIHJldmVyc2UsIHJ1bikKKyAgICAgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIHBhdGNoCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IFBhdGNoVHJlZS5fYXBwbHlwYXRjaChzZWxmLCBwYXRjaCwgZm9yY2UsIHJldmVyc2UsIHJ1bikKKyAgICAgICAgICAgICAgICAjIEFkZCBhbGwgZmlsZXMKKyAgICAgICAgICAgICAgICBzaGVsbGNtZCA9IFsiZ2l0IiwgImFkZCIsICItZiIsICItQSIsICIuIl0KKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKyAgICAgICAgICAgICAgICAjIEV4Y2x1ZGUgdGhlIHBhdGNoZXMgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJyZXNldCIsICJIRUFEIiwgc2VsZi5wYXRjaGRpcl0KKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKyAgICAgICAgICAgICAgICAjIENvbW1pdCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAgKHRtcGZpbGUsIHNoZWxsY21kKSA9IHNlbGYucHJlcGFyZUNvbW1pdChwYXRjaFsnZmlsZSddKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxjbWQuaW5zZXJ0KDAsIHBhdGNoZmlsZXZhcikKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRtcGZpbGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKGNvbW1pdGhvb2spCisgICAgICAgICAgICBvcy5yZW1vdmUoYXBwbHlob29rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tbWl0aG9va19iYWNrdXApOgorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGNvbW1pdGhvb2tfYmFja3VwLCBjb21taXRob29rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwbHlob29rX2JhY2t1cCk6CisgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoYXBwbHlob29rX2JhY2t1cCwgYXBwbHlob29rKQorCisKK2NsYXNzIFF1aWx0VHJlZShQYXRjaFNldCk6CisgICAgZGVmIF9ydW5jbWQoc2VsZiwgYXJncywgcnVuID0gVHJ1ZSk6CisgICAgICAgIHF1aWx0cmMgPSBzZWxmLmQuZ2V0VmFyKCdRVUlMVFJDRklMRScsIFRydWUpCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gWyJxdWlsdCJdICsgWyItLXF1aWx0cmMiXSArIFtxdWlsdHJjXSArIGFyZ3MKKyAgICAgICAgcnVuY21kKFsicXVpbHQiXSArIFsiLS1xdWlsdHJjIl0gKyBbcXVpbHRyY10gKyBhcmdzLCBzZWxmLmRpcikKKworICAgIGRlZiBfcXVpbHRwYXRjaHBhdGgoc2VsZiwgZmlsZSk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwgb3MucGF0aC5iYXNlbmFtZShmaWxlKSkKKworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIFBhdGNoU2V0Ll9faW5pdF9fKHNlbGYsIGRpciwgZCkKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IEZhbHNlCisgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHApOgorICAgICAgICAgICAgb3MubWFrZWRpcnMocCkKKworICAgIGRlZiBDbGVhbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuY21kKFsicG9wIiwgIi1hIiwgIi1mIl0pCisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwic2VyaWVzIikpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICBkZWYgSW5pdEZyb21EaXIoc2VsZik6CisgICAgICAgICMgcmVhZCBzZXJpZXMgLT4gc2VsZi5wYXRjaGVzCisgICAgICAgIHNlcmllc3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJywgJ3NlcmllcycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRpcik6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKHNlbGYuZGlyKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZXJpZXNwYXRoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZXJpZXNwYXRoLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2ggPSB7fQorICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHBhdGNoWyJxdWlsdGZpbGUiXSA9IHNlbGYuX3F1aWx0cGF0Y2hwYXRoKHBhcnRzWzBdKQorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicXVpbHRmaWxlbWQ1Il0gPSBiYi51dGlscy5tZDVfZmlsZShwYXRjaFsicXVpbHRmaWxlIl0pCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInN0cmlwcGF0aCJdID0gcGFydHNbMV1bMjpdCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQocGF0Y2gpCisKKyAgICAgICAgICAgICMgZGV0ZXJtaW5lIHdoaWNoIHBhdGNoZXMgYXJlIGFwcGxpZWQgLT4gc2VsZi5fY3VycmVudAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInF1aWx0IiwgImFwcGxpZWQiXSwgc2VsZi5kaXIpCisgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIGlmIHN5cy5leGNfdmFsdWUub3V0cHV0LnN0cmlwKCkgPT0gIk5vIHBhdGNoZXMgYXBwbGllZCI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBvdXRwdXQgPSBbdmFsIGZvciB2YWwgaW4gb3V0cHV0LnNwbGl0KCdcbicpIGlmIG5vdCB2YWwuc3RhcnRzd2l0aCgnIycpXQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNlbGYucGF0Y2hlczoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSkgPT0gb3V0cHV0Wy0xXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYucGF0Y2hlcy5pbmRleChwYXRjaCkKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKworICAgIGRlZiBJbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlID0gTm9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmluaXRpYWxpemVkOgorICAgICAgICAgICAgc2VsZi5Jbml0RnJvbURpcigpCisgICAgICAgIFBhdGNoU2V0LkltcG9ydChzZWxmLCBwYXRjaCwgZm9yY2UpCisgICAgICAgIG9lLnBhdGguc3ltbGluayhwYXRjaFsiZmlsZSJdLCBzZWxmLl9xdWlsdHBhdGNocGF0aChwYXRjaFsiZmlsZSJdKSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgInBhdGNoZXMiLCAic2VyaWVzIiksICJhIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUob3MucGF0aC5iYXNlbmFtZShwYXRjaFsiZmlsZSJdKSArICIgLXAiICsgcGF0Y2hbInN0cmlwcGF0aCJdICsgIlxuIikKKyAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZSJdID0gc2VsZi5fcXVpbHRwYXRjaHBhdGgocGF0Y2hbImZpbGUiXSkKKyAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdKQorCisgICAgICAgICMgVE9ETzogZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGJlaW5nIGltcG9ydGVkOgorICAgICAgICAjICAgICAgMSkgaXMgYWxyZWFkeSBpbXBvcnRlZCwgYW5kIGlzIHRoZSBzYW1lCisgICAgICAgICMgICAgICAyKSBpcyBhbHJlYWR5IGltcG9ydGVkLCBidXQgZGlmZmVycworCisgICAgICAgIHNlbGYucGF0Y2hlcy5pbnNlcnQoc2VsZi5fY3VycmVudCBvciAwLCBwYXRjaCkKKworCisgICAgZGVmIFB1c2goc2VsZiwgZm9yY2UgPSBGYWxzZSwgYWxsID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICAjIHF1aWx0IHB1c2ggWy1mXQorCisgICAgICAgIGFyZ3MgPSBbInB1c2giXQorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItZiIpCisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItYSIpCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuY21kKGFyZ3MsIHJ1bikKKworICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gMAorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSA9IE5vbmUsIGFsbCA9IE5vbmUpOgorICAgICAgICAjIHF1aWx0IHBvcCBbLWZdCisgICAgICAgIGFyZ3MgPSBbInBvcCJdCisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1mIikKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1hIikKKworICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50ID09IDA6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gc2VsZi5fY3VycmVudCAtIDEKKworICAgIGRlZiBSZWZyZXNoKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgaWYga3dhcmdzLmdldCgicmVtb3RlIik6CisgICAgICAgICAgICBwYXRjaCA9IHNlbGYucGF0Y2hlc1trd2FyZ3NbInBhdGNoIl1dCisgICAgICAgICAgICBpZiBub3QgcGF0Y2g6CisgICAgICAgICAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcigiTm8gcGF0Y2ggZm91bmQgYXQgaW5kZXggJXMgaW4gcGF0Y2hzZXQuIiAlIGt3YXJnc1sicGF0Y2giXSkKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaFsicmVtb3RlIl0pCisgICAgICAgICAgICBpZiB0eXBlID09ICJmaWxlIjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgICAgICAgICAgaWYgbm90IHBhdGNoLmdldCgiZmlsZSIpIGFuZCBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCkKKworICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShwYXRjaFsicXVpbHRmaWxlIl0sIHBhdGNoWyJmaWxlIl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlVuYWJsZSB0byBkbyBhIHJlbW90ZSByZWZyZXNoIG9mICVzLCB1bnN1cHBvcnRlZCByZW1vdGUgdXJsIHNjaGVtZSAlcy4iICUgKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbInF1aWx0ZmlsZSJdKSwgdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHF1aWx0IHJlZnJlc2gKKyAgICAgICAgICAgIGFyZ3MgPSBbInJlZnJlc2giXQorICAgICAgICAgICAgaWYga3dhcmdzLmdldCgicXVpbHRmaWxlIik6CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShrd2FyZ3NbInF1aWx0ZmlsZSJdKSkKKyAgICAgICAgICAgIGVsaWYga3dhcmdzLmdldCgicGF0Y2giKToKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChvcy5wYXRoLmJhc2VuYW1lKHNlbGYucGF0Y2hlc1trd2FyZ3NbInBhdGNoIl1dWyJxdWlsdGZpbGUiXSkpCisgICAgICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworY2xhc3MgUmVzb2x2ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2hzZXQsIHRlcm1pbmFsKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmVzb2x2ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmV2ZXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBGaW5hbGl6ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKK2NsYXNzIE5PT1BSZXNvbHZlcihSZXNvbHZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBwYXRjaHNldAorICAgICAgICBzZWxmLnRlcm1pbmFsID0gdGVybWluYWwKKworICAgIGRlZiBSZXNvbHZlKHNlbGYpOgorICAgICAgICBvbGRkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihzZWxmLnBhdGNoc2V0LmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5QdXNoKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKyAgICAgICAgICAgIHJhaXNlCisKKyMgUGF0Y2ggcmVzb2x2ZXIgd2hpY2ggcmVsaWVzIG9uIHRoZSB1c2VyIGRvaW5nIGFsbCB0aGUgd29yayBpbnZvbHZlZCBpbiB0aGUKKyMgcmVzb2x1dGlvbiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHJlZnJlc2hpbmcgdGhlIHJlbW90ZSBjb3B5IG9mIHRoZSBwYXRjaAorIyBmaWxlcyAodGhlIHVybHMpLgorY2xhc3MgVXNlclJlc29sdmVyKFJlc29sdmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2hzZXQsIHRlcm1pbmFsKToKKyAgICAgICAgc2VsZi5wYXRjaHNldCA9IHBhdGNoc2V0CisgICAgICAgIHNlbGYudGVybWluYWwgPSB0ZXJtaW5hbAorCisgICAgIyBGb3JjZSBhIHB1c2ggaW4gdGhlIHBhdGNoc2V0LCB0aGVuIGRyb3AgdG8gYSBzaGVsbCBmb3IgdGhlIHVzZXIgdG8KKyAgICAjIHJlc29sdmUgYW55IHJlamVjdGVkIGh1bmtzCisgICAgZGVmIFJlc29sdmUoc2VsZik6CisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgICAgIG9zLmNoZGlyKHNlbGYucGF0Y2hzZXQuZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhdGNoc2V0LlB1c2goRmFsc2UpCisgICAgICAgIGV4Y2VwdCBDbWRFcnJvciBhcyB2OgorICAgICAgICAgICAgIyBQYXRjaCBhcHBsaWNhdGlvbiBmYWlsZWQKKyAgICAgICAgICAgIHBhdGNoY21kID0gc2VsZi5wYXRjaHNldC5QdXNoKFRydWUsIEZhbHNlLCBGYWxzZSkKKworICAgICAgICAgICAgdCA9IHNlbGYucGF0Y2hzZXQuZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHQ6CisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJCdWlsZCIsICJUIG5vdCBzZXQiKQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHQpCisgICAgICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgICAgICByY2ZpbGUgPSAiJXMvYmFzaHJjLiVzLiVzIiAlICh0LCBzdHIob3MuZ2V0cGlkKCkpLCByYW5kb20ucmFuZG9tKCkpCisgICAgICAgICAgICB3aXRoIG9wZW4ocmNmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnKioqIE1hbnVhbCBwYXRjaCByZXNvbHV0aW9uIG1vZGUgKioqJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICdEcm9wcGluZyB0byBhIHNoZWxsLCBzbyBwYXRjaCByZWplY3RzIGNhbiBiZSBmaXhlZCBtYW51YWxseS4nXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoImVjaG8gJ1J1biBcInF1aWx0IHJlZnJlc2hcIiB3aGVuIHBhdGNoIGlzIGNvcnJlY3RlZCwgcHJlc3MgQ1RSTCtEIHRvIGV4aXQuJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICcnXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIiAiLmpvaW4ocGF0Y2hjbWQpICsgIlxuIikKKyAgICAgICAgICAgIG9zLmNobW9kKHJjZmlsZSwgMDc3NSkKKworICAgICAgICAgICAgc2VsZi50ZXJtaW5hbCgiYmFzaCAtLXJjZmlsZSAiICsgcmNmaWxlLCAnUGF0Y2ggUmVqZWN0czogUGxlYXNlIGZpeCBwYXRjaCByZWplY3RzIG1hbnVhbGx5Jywgc2VsZi5wYXRjaHNldC5kKQorCisgICAgICAgICAgICAjIENvbnN0cnVjdCBhIG5ldyBQYXRjaFNldCBhZnRlciB0aGUgdXNlcidzIGNoYW5nZXMsIGNvbXBhcmUgdGhlCisgICAgICAgICAgICAjIHNldHMsIGNoZWNraW5nIHBhdGNoZXMgZm9yIG1vZGlmaWNhdGlvbnMsIGFuZCBkb2luZyBhIHJlbW90ZQorICAgICAgICAgICAgIyByZWZyZXNoIG9uIGVhY2guCisgICAgICAgICAgICBvbGRwYXRjaHNldCA9IHNlbGYucGF0Y2hzZXQKKyAgICAgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBvbGRwYXRjaHNldC5fX2NsYXNzX18oc2VsZi5wYXRjaHNldC5kaXIsIHNlbGYucGF0Y2hzZXQuZCkKKworICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNlbGYucGF0Y2hzZXQucGF0Y2hlczoKKyAgICAgICAgICAgICAgICBvbGRwYXRjaCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Igb3BhdGNoIGluIG9sZHBhdGNoc2V0LnBhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIG9wYXRjaFsicXVpbHRmaWxlIl0gPT0gcGF0Y2hbInF1aWx0ZmlsZSJdOgorICAgICAgICAgICAgICAgICAgICAgICAgb2xkcGF0Y2ggPSBvcGF0Y2gKKworICAgICAgICAgICAgICAgIGlmIG9sZHBhdGNoOgorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicmVtb3RlIl0gPSBvbGRwYXRjaFsicmVtb3RlIl0KKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0Y2hbInF1aWx0ZmlsZSJdID09IG9sZHBhdGNoWyJxdWlsdGZpbGUiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGNoWyJxdWlsdGZpbGVtZDUiXSAhPSBvbGRwYXRjaFsicXVpbHRmaWxlbWQ1Il06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiUGF0Y2ggJXMgaGFzIGNoYW5nZWQsIHVwZGF0aW5nIHJlbW90ZSB1cmwgJXMiICUgKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbInF1aWx0ZmlsZSJdKSwgcGF0Y2hbInJlbW90ZSJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVzZXIgY2hhbmdlPyAgcmVtb3RlIHJlZnJlc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoc2V0LlJlZnJlc2gocmVtb3RlPVRydWUsIHBhdGNoPXNlbGYucGF0Y2hzZXQucGF0Y2hlcy5pbmRleChwYXRjaCkpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBkaWQgbm90IGZpeCB0aGUgcHJvYmxlbS4gIEFib3J0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlBhdGNoIGFwcGxpY2F0aW9uIGZhaWxlZCwgYW5kIHVzZXIgZGlkIG5vdCBmaXggYW5kIHJlZnJlc2ggdGhlIHBhdGNoLiIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBvcy5jaGRpcihvbGRkaXIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGgucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzZWJmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcGF0aC5weQpAQCAtMCwwICsxLDI0MyBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgZ2xvYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcy5wYXRoCisKK2RlZiBqb2luKCpwYXRocyk6CisgICAgIiIiTGlrZSBvcy5wYXRoLmpvaW4gYnV0IGRvZXNuJ3QgdHJlYXQgYWJzb2x1dGUgUkhTIHNwZWNpYWxseSIiIgorICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKCIvIi5qb2luKHBhdGhzKSkKKworZGVmIHJlbGF0aXZlKHNyYywgZGVzdCk6CisgICAgIiIiIFJldHVybiBhIHJlbGF0aXZlIHBhdGggZnJvbSBzcmMgdG8gZGVzdC4KKworICAgID4+PiByZWxhdGl2ZSgiL3Vzci9iaW4iLCAiL3RtcC9mb28vYmFyIikKKyAgICAuLi8uLi90bXAvZm9vL2JhcgorCisgICAgPj4+IHJlbGF0aXZlKCIvdXNyL2JpbiIsICIvdXNyL2xpYiIpCisgICAgLi4vbGliCisKKyAgICA+Pj4gcmVsYXRpdmUoIi90bXAiLCAiL3RtcC9mb28vYmFyIikKKyAgICBmb28vYmFyCisgICAgIiIiCisKKyAgICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKGRlc3QsIHNyYykKKworZGVmIG1ha2VfcmVsYXRpdmVfc3ltbGluayhwYXRoKToKKyAgICAiIiIgQ29udmVydCBhbiBhYnNvbHV0ZSBzeW1saW5rIHRvIGEgcmVsYXRpdmUgb25lICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisgICAgbGluayA9IG9zLnJlYWRsaW5rKHBhdGgpCisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobGluayk6CisgICAgICAgIHJldHVybgorCisgICAgIyBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3IgZGlyZWN0b3J5CisgICAgYW5jZXN0b3IgPSBwYXRoCisgICAgZGVwdGggPSAwCisgICAgd2hpbGUgYW5jZXN0b3IgYW5kIG5vdCBsaW5rLnN0YXJ0c3dpdGgoYW5jZXN0b3IpOgorICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnJwYXJ0aXRpb24oJy8nKVswXQorICAgICAgICBkZXB0aCArPSAxCisKKyAgICBpZiBub3QgYW5jZXN0b3I6CisgICAgICAgIHByaW50KCJtYWtlX3JlbGF0aXZlX3N5bWxpbmsoKSBFcnJvcjogdW5hYmxlIHRvIGZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiAlcyBhbmQgaXRzIHRhcmdldCIgJSBwYXRoKQorICAgICAgICByZXR1cm4KKworICAgIGJhc2UgPSBsaW5rLnBhcnRpdGlvbihhbmNlc3RvcilbMl0uc3RyaXAoJy8nKQorICAgIHdoaWxlIGRlcHRoID4gMToKKyAgICAgICAgYmFzZSA9ICIuLi8iICsgYmFzZQorICAgICAgICBkZXB0aCAtPSAxCisKKyAgICBvcy5yZW1vdmUocGF0aCkKKyAgICBvcy5zeW1saW5rKGJhc2UsIHBhdGgpCisKK2RlZiBmb3JtYXRfZGlzcGxheShwYXRoLCBtZXRhZGF0YSk6CisgICAgIiIiIFByZXBhcmUgYSBwYXRoIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLiAiIiIKKyAgICByZWwgPSByZWxhdGl2ZShtZXRhZGF0YS5nZXRWYXIoIlRPUERJUiIsIFRydWUpLCBwYXRoKQorICAgIGlmIGxlbihyZWwpID4gbGVuKHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZWwKKworZGVmIGNvcHl0cmVlKHNyYywgZHN0KToKKyAgICAjIFdlIGNvdWxkIHVzZSBzb21ldGhpbmcgbGlrZSBzaHV0aWwuY29weXRyZWUgaGVyZSBidXQgaXQgdHVybnMgb3V0IHRvCisgICAgIyB0byBiZSBzbG93LiBJdCB0YWtlcyB0d2ljZSBhcyBsb25nIGNvcHlpbmcgdG8gYW4gZW1wdHkgZGlyZWN0b3J5LiAKKyAgICAjIElmIGRzdCBhbHJlYWR5IGhhcyBjb250ZW50cyBwZXJmb3JtYW5jZSBjYW4gYmUgMTUgdGltZSBzbG93ZXIKKyAgICAjIFRoaXMgd2F5IHdlIGFsc28gcHJlc2VydmUgaGFyZGxpbmtzIGJldHdlZW4gZmlsZXMgaW4gdGhlIHRyZWUuCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZHN0KQorICAgIGNtZCA9ICd0YXIgLWNmIC0gLUMgJXMgLXAgLiB8IHRhciAteGYgLSAtQyAlcycgJSAoc3JjLCBkc3QpCisgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgY29weWhhcmRsaW5rdHJlZShzcmMsIGRzdCk6CisgICAgIiIiIE1ha2UgdGhlIGhhcmQgbGluayB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgY29weS4gIiIiCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKKyAgICBpZiBvcy5wYXRoLmlzZGlyKHNyYykgYW5kIG5vdCBsZW4ob3MubGlzdGRpcihzcmMpKToKKyAgICAgICAgcmV0dXJuCQorCisgICAgaWYgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gIG9zLnN0YXQoZHN0KS5zdF9kZXYpOgorICAgICAgICAjIE5lZWQgdG8gY29weSBkaXJlY3RvcmllcyBvbmx5IHdpdGggdGFyIGZpcnN0IHNpbmNlIGNwIHdpbGwgZXJyb3IgaWYgdHdvIAorICAgICAgICAjIHdyaXRlcnMgdHJ5IGFuZCBjcmVhdGUgYSBkaXJlY3RvcnkgYXQgdGhlIHNhbWUgdGltZQorICAgICAgICBjbWQgPSAnY2QgJXM7IGZpbmQgLiAtdHlwZSBkIC1wcmludCB8IHRhciAtY2YgLSAtQyAlcyAtcCAtLWZpbGVzLWZyb20gLSAtLW5vLXJlY3Vyc2lvbiB8IHRhciAteGYgLSAtQyAlcycgJSAoc3JjLCBzcmMsIGRzdCkKKyAgICAgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBjbWQgPSAnY2QgJXM7IGZpbmQgLiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJXMnICUgKHNyYywgZHN0KQorICAgICAgICBjaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgZWxzZToKKyAgICAgICAgY29weXRyZWUoc3JjLCBkc3QpCisKK2RlZiByZW1vdmUocGF0aCwgcmVjdXJzZT1UcnVlKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIHJtIC1mIG9yIHJtIC1yZiIiIgorICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIHJlY3Vyc2UgYW5kIGV4Yy5lcnJubyA9PSBlcnJuby5FSVNESVI6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShuYW1lKQorICAgICAgICAgICAgZWxpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBzeW1saW5rKHNvdXJjZSwgZGVzdGluYXRpb24sIGZvcmNlPUZhbHNlKToKKyAgICAiIiJDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIiIiCisgICAgdHJ5OgorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIHJlbW92ZShkZXN0aW5hdGlvbikKKyAgICAgICAgb3Muc3ltbGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUIG9yIG9zLnJlYWRsaW5rKGRlc3RpbmF0aW9uKSAhPSBzb3VyY2U6CisgICAgICAgICAgICByYWlzZQorCitjbGFzcyBDYWxsZWRQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0Y29kZSwgY21kLCBvdXRwdXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5yZXRjb2RlID0gcmV0Y29kZQorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZCB3aXRoIG91dHB1dCAlcyIgJSAoc2VsZi5jbWQsIHNlbGYucmV0Y29kZSwgc2VsZi5vdXRwdXQpCisKKyMgTm90IG5lZWRlZCB3aGVuIHdlIG1vdmUgdG8gcHl0aG9uIDIuNworZGVmIGNoZWNrX291dHB1dCgqcG9wZW5hcmdzLCAqKmt3YXJncyk6CisgICAgciIiIlJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzIGFuZCByZXR1cm4gaXRzIG91dHB1dCBhcyBhIGJ5dGUgc3RyaW5nLgorCisgICAgSWYgdGhlIGV4aXQgY29kZSB3YXMgbm9uLXplcm8gaXQgcmFpc2VzIGEgQ2FsbGVkUHJvY2Vzc0Vycm9yLiAgVGhlCisgICAgQ2FsbGVkUHJvY2Vzc0Vycm9yIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlIGluIHRoZSByZXR1cm5jb2RlCisgICAgYXR0cmlidXRlIGFuZCBvdXRwdXQgaW4gdGhlIG91dHB1dCBhdHRyaWJ1dGUuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIFBvcGVuIGNvbnN0cnVjdG9yLiAgRXhhbXBsZToKKworICAgID4+PiBjaGVja19vdXRwdXQoWyJscyIsICItbCIsICIvZGV2L251bGwiXSkKKyAgICAnY3J3LXJ3LXJ3LSAxIHJvb3Qgcm9vdCAxLCAzIE9jdCAxOCAgMjAwNyAvZGV2L251bGxcbicKKworICAgIFRoZSBzdGRvdXQgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQgYXMgaXQgaXMgdXNlZCBpbnRlcm5hbGx5LgorICAgIFRvIGNhcHR1cmUgc3RhbmRhcmQgZXJyb3IgaW4gdGhlIHJlc3VsdCwgdXNlIHN0ZGVycj1TVERPVVQuCisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsiL2Jpbi9zaCIsICItYyIsCisgICAgLi4uICAgICAgICAgICAgICAgImxzIC1sIG5vbl9leGlzdGVudF9maWxlIDsgZXhpdCAwIl0sCisgICAgLi4uICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQorICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKKyAgICAiIiIKKyAgICBpZiAnc3Rkb3V0JyBpbiBrd2FyZ3M6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhcmd1bWVudCBub3QgYWxsb3dlZCwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLicpCisgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgKnBvcGVuYXJncywgKiprd2FyZ3MpCisgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgcmV0Y29kZSA9IHByb2Nlc3MucG9sbCgpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgY21kID0ga3dhcmdzLmdldCgiYXJncyIpCisgICAgICAgIGlmIGNtZCBpcyBOb25lOgorICAgICAgICAgICAgY21kID0gcG9wZW5hcmdzWzBdCisgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBjbWQsIG91dHB1dD1vdXRwdXQpCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgZmluZChkaXIsICoqd2Fsa29wdGlvbnMpOgorICAgICIiIiBHaXZlbiBhIGRpcmVjdG9yeSwgcmVjdXJzZXMgaW50byB0aGF0IGRpcmVjdG9yeSwKKyAgICByZXR1cm5pbmcgYWxsIGZpbGVzIGFzIGFic29sdXRlIHBhdGhzLiAiIiIKKworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpciwgKip3YWxrb3B0aW9ucyk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgeWllbGQgb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisKKworIyMgcmVhbHBhdGgoKSByZWxhdGVkIGZ1bmN0aW9ucworZGVmIF9faXNfcGF0aF9iZWxvdyhmaWxlLCByb290KToKKyAgICByZXR1cm4gKGZpbGUgKyBvcy5wYXRoLnNlcCkuc3RhcnRzd2l0aChyb290KQorCitkZWYgX19yZWFscGF0aF9yZWwoc3RhcnQsIHJlbF9wYXRoLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgIiIiQ2FsY3VsYXRlcyByZWFsIHBhdGggb2Ygc3ltbGluayAnc3RhcnQnICsgJ3JlbF9wYXRoJyBiZWxvdworICAgICdyb290Jzsgbm8gcGFydCBvZiAnc3RhcnQnIGJlbG93ICdyb290JyBtdXN0IGNvbnRhaW4gc3ltbGlua3MuICIiIgorICAgIGhhdmVfZGlyID0gVHJ1ZQorCisgICAgZm9yIGQgaW4gcmVsX3BhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICBpZiBub3QgaGF2ZV9kaXIgYW5kIG5vdCBhc3N1bWVfZGlyOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTk9FTlQsICJubyBzdWNoIGRpcmVjdG9yeSAlcyIgJSBzdGFydCkKKworICAgICAgICBpZiBkID09IG9zLnBhdGgucGFyZGlyOiAjICcuLicKKyAgICAgICAgICAgIGlmIGxlbihzdGFydCkgPj0gbGVuKHJvb3QpOgorICAgICAgICAgICAgICAgICMgZG8gbm90IGZvbGxvdyAnLi4nIGJlZm9yZSByb290CisgICAgICAgICAgICAgICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUoc3RhcnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZW1pdCB3YXJuaW5nPworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChzdGFydCwgaGF2ZV9kaXIpID0gX19yZWFscGF0aChvcy5wYXRoLmpvaW4oc3RhcnQsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorCisgICAgICAgIGFzc2VydChfX2lzX3BhdGhfYmVsb3coc3RhcnQsIHJvb3QpKQorCisgICAgcmV0dXJuIHN0YXJ0CisKK2RlZiBfX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICB3aGlsZSBvcy5wYXRoLmlzbGluayhmaWxlKSBhbmQgbGVuKGZpbGUpID49IGxlbihyb290KToKKyAgICAgICAgaWYgbG9vcF9jbnQgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsIGZpbGUpCisKKyAgICAgICAgbG9vcF9jbnQgLT0gMQorICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnJlYWRsaW5rKGZpbGUpKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICAgICAgICAgICB0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpCisgICAgICAgICAgICBhc3NlcnQoX19pc19wYXRoX2JlbG93KHRkaXIsIHJvb3QpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGRpciA9IHJvb3QKKworICAgICAgICBmaWxlID0gX19yZWFscGF0aF9yZWwodGRpciwgdGFyZ2V0LCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgIHRyeToKKyAgICAgICAgaXNfZGlyID0gb3MucGF0aC5pc2RpcihmaWxlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgaXNfZGlyID0gZmFsc2UKKworICAgIHJldHVybiAoZmlsZSwgaXNfZGlyKQorCitkZWYgcmVhbHBhdGgoZmlsZSwgcm9vdCwgdXNlX3BoeXNkaXIgPSBUcnVlLCBsb29wX2NudCA9IDEwMCwgYXNzdW1lX2RpciA9IEZhbHNlKToKKyAgICAiIiIgUmV0dXJucyB0aGUgY2Fub25pY2FsIHBhdGggb2YgJ2ZpbGUnIHdpdGggYXNzdW1pbmcgYQorICAgIHRvcGxldmVsICdyb290JyBkaXJlY3RvcnkuIFdoZW4gJ3VzZV9waHlzZGlyJyBpcyBzZXQsIGFsbAorICAgIHByZWNlZGluZyBwYXRoIGNvbXBvbmVudHMgb2YgJ2ZpbGUnIHdpbGwgYmUgcmVzb2x2ZWQgZmlyc3Q7CisgICAgdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgdW5sZXNzIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBpcworICAgIG5vIHN5bWxpbmsgaW4gdGhlIHBhdGguIFdoZW4gJ2Fzc3VtZV9kaXInIGlzIG5vdCBzZXQsIG1pc3NpbmcKKyAgICBwYXRoIGNvbXBvbmVudHMgd2lsbCByYWlzZSBhbiBFTk9FTlQgZXJyb3IiIiIKKworICAgIHJvb3QgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3QpCisgICAgZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZSkKKworICAgIGlmIG5vdCByb290LmVuZHN3aXRoKG9zLnBhdGguc2VwKToKKyAgICAgICAgIyBsZXR0aW5nIHJvb3QgZW5kIHdpdGggJy8nIG1ha2VzIHNvbWUgdGhpbmdzIGVhc2llcgorICAgICAgICByb290ID0gcm9vdCArIG9zLnBhdGguc2VwCisKKyAgICBpZiBub3QgX19pc19wYXRoX2JlbG93KGZpbGUsIHJvb3QpOgorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlZBTCwgImZpbGUgJyVzJyBpcyBub3QgYmVsb3cgcm9vdCIgJSBmaWxlKQorCisgICAgdHJ5OgorICAgICAgICBpZiB1c2VfcGh5c2RpcjoKKyAgICAgICAgICAgIGZpbGUgPSBfX3JlYWxwYXRoX3JlbChyb290LCBmaWxlWyhsZW4ocm9vdCkgLSAxKTpdLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGUgPSBfX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKVswXQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUxPT1A6CisgICAgICAgICAgICAjIG1ha2UgRUxPT1AgbW9yZSByZWFkYWJsZTsgd2l0aG91dCBjYXRjaGluZyBpdCwgdGhlcmUgd2lsbAorICAgICAgICAgICAgIyBiZSBwcmludGVkIGEgYmFja3RyYWNlIHdpdGggMTAwcyBvZiBPU0Vycm9yIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICMgZWxzZQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTE9PUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtdWNoIHJlY3Vyc2lvbnMgd2hpbGUgcmVzb2x2aW5nICclcyc7IGxvb3AgaW4gJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgZS5zdHJlcnJvcikpCisKKyAgICAgICAgcmFpc2UKKworICAgIHJldHVybiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Byc2VydmljZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcHJzZXJ2aWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2JjYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Byc2VydmljZS5weQpAQCAtMCwwICsxLDEyNiBAQAorCitkZWYgcHJzZXJ2X21ha2VfY29ubihkLCBjaGVjayA9IEZhbHNlKToKKyAgICBpbXBvcnQgcHJzZXJ2LnNlcnYKKyAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoIlBSU0VSVl9IT1NUIiwgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgdHJ5OgorICAgICAgICBjb25uID0gTm9uZQorICAgICAgICBjb25uID0gcHJzZXJ2LnNlcnYuUFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3RfcGFyYW1zWzBdLCBpbnQoaG9zdF9wYXJhbXNbMV0pKQorICAgICAgICBpZiBjaGVjazoKKyAgICAgICAgICAgIGlmIG5vdCBjb25uLnBpbmcoKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3NlcnZpY2Ugbm90IGF2YWlsYWJsZScpCisgICAgICAgIGQuc2V0VmFyKCJfX1BSU0VSVl9DT05OIixjb25uKQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoIkNvbm5lY3RpbmcgdG8gUFIgc2VydmljZSAlczolcyBmYWlsZWQ6ICVzIiAlIChob3N0X3BhcmFtc1swXSwgaG9zdF9wYXJhbXNbMV0sIHN0cihleGMpKSkKKworICAgIHJldHVybiBjb25uCisKK2RlZiBwcnNlcnZfZHVtcF9kYihkKToKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSk6CisgICAgICAgIGJiLmVycm9yKCJOb3QgdXNpbmcgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICBjb25uID0gcHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5lcnJvcigiTWFraW5nIGNvbm5lY3Rpb24gZmFpbGVkIHRvIHJlbW90ZSBQUiBzZXJ2aWNlIikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjZHVtcCBkYgorICAgIG9wdF92ZXJzaW9uID0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04nLCBUcnVlKQorICAgIG9wdF9wa2dhcmNoID0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1BLR0FSQ0gnLCBUcnVlKQorICAgIG9wdF9jaGVja3N1bSA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DSEVDS1NVTScsIFRydWUpCisgICAgb3B0X2NvbCA9ICgiMSIgPT0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX0NPTCcsIFRydWUpKQorICAgIHJldHVybiBjb25uLmV4cG9ydChvcHRfdmVyc2lvbiwgb3B0X3BrZ2FyY2gsIG9wdF9jaGVja3N1bSwgb3B0X2NvbCkKKworZGVmIHByc2Vydl9pbXBvcnRfZGIoZCwgZmlsdGVyX3ZlcnNpb249Tm9uZSwgZmlsdGVyX3BrZ2FyY2g9Tm9uZSwgZmlsdGVyX2NoZWNrc3VtPU5vbmUpOgorICAgIGlmIG5vdCBkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKToKKyAgICAgICAgYmIuZXJyb3IoIk5vdCB1c2luZyBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UiKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgY29ubiA9IGQuZ2V0VmFyKCJfX1BSU0VSVl9DT05OIiwgVHJ1ZSkKKyAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgIGNvbm4gPSBwcnNlcnZfbWFrZV9jb25uKGQpCisgICAgICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgICAgIGJiLmVycm9yKCJNYWtpbmcgY29ubmVjdGlvbiBmYWlsZWQgdG8gcmVtb3RlIFBSIHNlcnZpY2UiKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAjZ2V0IHRoZSBlbnRyeSB2YWx1ZXMKKyAgICBpbXBvcnRlZCA9IFtdCisgICAgcHJlZml4ID0gIlBSQVVUTyQiCisgICAgZm9yIHYgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIHYuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgKHJlbWFpbiwgc2VwLCBjaGVja3N1bSkgPSB2LnJwYXJ0aXRpb24oJyQnKQorICAgICAgICAgICAgKHJlbWFpbiwgc2VwLCBwa2dhcmNoKSA9IHJlbWFpbi5ycGFydGl0aW9uKCckJykKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgdmVyc2lvbikgPSByZW1haW4ucnBhcnRpdGlvbignJCcpCisgICAgICAgICAgICBpZiAocmVtYWluICsgJyQnICE9IHByZWZpeCkgb3IgXAorICAgICAgICAgICAgICAgKGZpbHRlcl92ZXJzaW9uIGFuZCBmaWx0ZXJfdmVyc2lvbiAhPSB2ZXJzaW9uKSBvciBcCisgICAgICAgICAgICAgICAoZmlsdGVyX3BrZ2FyY2ggYW5kIGZpbHRlcl9wa2dhcmNoICE9IHBrZ2FyY2gpIG9yIFwKKyAgICAgICAgICAgICAgIChmaWx0ZXJfY2hlY2tzdW0gYW5kIGZpbHRlcl9jaGVja3N1bSAhPSBjaGVja3N1bSk6CisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gaW50KGQuZ2V0VmFyKHJlbWFpbiArICckJyArIHZlcnNpb24gKyAnJCcgKyBwa2dhcmNoICsgJyQnICsgY2hlY2tzdW0sIFRydWUpKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKCJOb3QgdmFsaWQgdmFsdWUgb2YgJXM6JXMiICUgKHYsc3RyKGV4YykpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXQgPSBjb25uLmltcG9ydG9uZSh2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUpCisgICAgICAgICAgICBpZiByZXQgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoImltcG9ydGluZyglcywlcywlcywlZCkgZmFpbGVkLiBEQiBtYXkgaGF2ZSBsYXJnZXIgdmFsdWUgJWQiICUgKHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSxyZXQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgIGltcG9ydGVkLmFwcGVuZCgodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKSkKKyAgICByZXR1cm4gaW1wb3J0ZWQKKworZGVmIHByc2Vydl9leHBvcnRfdG9maWxlKGQsIG1ldGFpbmZvLCBkYXRhaW5mbywgbG9ja2Rvd24sIG5vbWF4PUZhbHNlKToKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICAjaW5pdGlsaXplIHRoZSBvdXRwdXQgZmlsZQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcignUFJTRVJWX0RVTVBESVInLCBUcnVlKSkKKyAgICBkZiA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUEZJTEUnLCBUcnVlKQorICAgICN3cml0ZSBkYXRhCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBkZikKKyAgICBmID0gb3BlbihkZiwgImEiKQorICAgIGlmIG1ldGFpbmZvOgorICAgICAgICAjZHVtcCBjb2x1bW4gaW5mbyAKKyAgICAgICAgZi53cml0ZSgiI1BSX2NvcmVfdmVyID0gXCIlc1wiXG5cbiIgJSBtZXRhaW5mb1snY29yZV92ZXInXSk7CisgICAgICAgIGYud3JpdGUoIiNUYWJsZTogJXNcbiIgJSBtZXRhaW5mb1sndGJsX25hbWUnXSkKKyAgICAgICAgZi53cml0ZSgiI0NvbHVtbnM6XG4iKQorICAgICAgICBmLndyaXRlKCIjbmFtZSAgICAgIFx0IHR5cGUgICAgXHQgbm90biAgICBcdCBkZmx0ICAgIFx0IHBrXG4iKQorICAgICAgICBmLndyaXRlKCIjLS0tLS0tLS0tLVx0IC0tLS0tLS0tXHQgLS0tLS0tLS1cdCAtLS0tLS0tLVx0IC0tLS1cbiIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihtZXRhaW5mb1snY29sX2luZm8nXSkpOgorICAgICAgICAgICAgZi53cml0ZSgiIyUxMHNcdCAlOHNcdCAlOHNcdCAlOHNcdCAlNHNcbiIgJSAKKyAgICAgICAgICAgICAgICAgICAgKG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWyduYW1lJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ3R5cGUnXSwgCisgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnbm90bnVsbCddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWydkZmx0X3ZhbHVlJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ3BrJ10pKQorICAgICAgICBmLndyaXRlKCJcbiIpCisKKyAgICBpZiBsb2NrZG93bjoKKyAgICAgICAgZi53cml0ZSgiUFJTRVJWX0xPQ0tET1dOID0gXCIxXCJcblxuIikKKworICAgIGlmIGRhdGFpbmZvOgorICAgICAgICBpZHggPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YWluZm8pKToKKyAgICAgICAgICAgIHBrZ2FyY2ggPSBkYXRhaW5mb1tpXVsncGtnYXJjaCddCisgICAgICAgICAgICB2YWx1ZSA9IGRhdGFpbmZvW2ldWyd2YWx1ZSddCisgICAgICAgICAgICBpZiBwa2dhcmNoIG5vdCBpbiBpZHg6CisgICAgICAgICAgICAgICAgaWR4W3BrZ2FyY2hdID0gaQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA+IGRhdGFpbmZvW2lkeFtwa2dhcmNoXV1bJ3ZhbHVlJ106CisgICAgICAgICAgICAgICAgaWR4W3BrZ2FyY2hdID0gaQorICAgICAgICAgICAgZi53cml0ZSgiUFJBVVRPJCVzJCVzJCVzID0gXCIlc1wiXG4iICUgCisgICAgICAgICAgICAgICAgKHN0cihkYXRhaW5mb1tpXVsndmVyc2lvbiddKSwgcGtnYXJjaCwgc3RyKGRhdGFpbmZvW2ldWydjaGVja3N1bSddKSwgc3RyKHZhbHVlKSkpCisgICAgICAgIGlmIG5vdCBub21heDoKKyAgICAgICAgICAgIGZvciBpIGluIGlkeDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJQUkFVVE9fJXNfJXMgPSBcIiVzXCJcbiIgJSAoc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3ZlcnNpb24nXSksc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3BrZ2FyY2gnXSksc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3ZhbHVlJ10pKSkKKyAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCitkZWYgcHJzZXJ2X2NoZWNrX2F2YWlsKGQpOgorICAgIGhvc3RfcGFyYW1zID0gZmlsdGVyKE5vbmUsIChkLmdldFZhcigiUFJTRVJWX0hPU1QiLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKSkKKyAgICB0cnk6CisgICAgICAgIGlmIGxlbihob3N0X3BhcmFtcykgIT0gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW50KGhvc3RfcGFyYW1zWzFdKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGJiLmZhdGFsKCdVbmRlZmluZWQvaW5jb3JyZWN0IFBSU0VSVl9IT1NUIHZhbHVlLiBGb3JtYXQ6ICJob3N0OnBvcnQiJykKKyAgICBlbHNlOgorICAgICAgICBwcnNlcnZfbWFrZV9jb25uKGQsIFRydWUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3FhLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9xYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNkYWEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9xYS5weQpAQCAtMCwwICsxLDExMSBAQAorY2xhc3MgRUxGRmlsZToKKyAgICBFSV9OSURFTlQgPSAxNgorCisgICAgRUlfQ0xBU1MgICAgICA9IDQKKyAgICBFSV9EQVRBICAgICAgID0gNQorICAgIEVJX1ZFUlNJT04gICAgPSA2CisgICAgRUlfT1NBQkkgICAgICA9IDcKKyAgICBFSV9BQklWRVJTSU9OID0gOAorCisgICAgIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVJX0NMQVNTCisgICAgRUxGQ0xBU1NOT05FID0gMAorICAgIEVMRkNMQVNTMzIgICA9IDEKKyAgICBFTEZDTEFTUzY0ICAgPSAyCisKKyAgICAjIHBvc3NpYmxlIHZhbHVlIGZvciBFSV9WRVJTSU9OCisgICAgRVZfQ1VSUkVOVCAgID0gMQorCisgICAgIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVJX0RBVEEKKyAgICBFTEZEQVRBTk9ORSAgPSAwCisgICAgRUxGREFUQTJMU0IgID0gMQorICAgIEVMRkRBVEEyTVNCICA9IDIKKworICAgIGRlZiBteV9hc3NlcnQoc2VsZiwgZXhwZWN0YXRpb24sIHJlc3VsdCk6CisgICAgICAgIGlmIG5vdCBleHBlY3RhdGlvbiA9PSByZXN1bHQ6CisgICAgICAgICAgICAjcHJpbnQgIicleCcsJyV4JyAlcyIgJSAob3JkKGV4cGVjdGF0aW9uKSwgb3JkKHJlc3VsdCksIHNlbGYubmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiaXRzID0gMCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5iaXRzID0gYml0cworICAgICAgICBzZWxmLm9iamR1bXBfb3V0cHV0ID0ge30KKworICAgIGRlZiBvcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlKHNlbGYubmFtZSwgInIiKQorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLmZpbGUucmVhZChFTEZGaWxlLkVJX05JREVOVCs0KQorCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KGxlbihzZWxmLmRhdGEpLCBFTEZGaWxlLkVJX05JREVOVCs0KQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMF0sIGNocigweDdmKSApCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVsxXSwgJ0UnKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMl0sICdMJykKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzNdLCAnRicpCisgICAgICAgIGlmIHNlbGYuYml0cyA9PSAwOgorICAgICAgICAgICAgaWYgc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdID09IGNocihFTEZGaWxlLkVMRkNMQVNTMzIpOgorICAgICAgICAgICAgICAgIHNlbGYuYml0cyA9IDMyCisgICAgICAgICAgICBlbGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBjaHIoRUxGRmlsZS5FTEZDTEFTUzY0KToKKyAgICAgICAgICAgICAgICBzZWxmLmJpdHMgPSA2NAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vdCAzMi1iaXQgb3IgNjQuLiBsZXRzIGFzc2VydAorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRUxGIGJ1dCBub3QgMzIgb3IgNjQgYml0LiIpCisgICAgICAgIGVsaWYgc2VsZi5iaXRzID09IDMyOgorICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBjaHIoRUxGRmlsZS5FTEZDTEFTUzMyKSkKKyAgICAgICAgZWxpZiBzZWxmLmJpdHMgPT0gNjQ6CisgICAgICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10sIGNocihFTEZGaWxlLkVMRkNMQVNTNjQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IHNwZWNpZnkgdW5rbm93biwgMzIgb3IgNjQgYml0IHNpemUuIikKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfVkVSU0lPTl0sIGNocihFTEZGaWxlLkVWX0NVUlJFTlQpICkKKworICAgICAgICBzZWxmLnNleCA9IHNlbGYuZGF0YVtFTEZGaWxlLkVJX0RBVEFdCisgICAgICAgIGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEFOT05FKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2VsZi5zZXggPT0gRUxGREFUQU5PTkUiKQorICAgICAgICBlbGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEEyTFNCKToKKyAgICAgICAgICAgIHNlbGYuc2V4ID0gIjwiCisgICAgICAgIGVsaWYgc2VsZi5zZXggPT0gY2hyKEVMRkZpbGUuRUxGREFUQTJNU0IpOgorICAgICAgICAgICAgc2VsZi5zZXggPSAiPiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBzZWxmLnNleCIpCisKKyAgICBkZWYgb3NBYmkoc2VsZik6CisgICAgICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfT1NBQkldKQorCisgICAgZGVmIGFiaVZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQUJJVkVSU0lPTl0pCisKKyAgICBkZWYgYWJpU2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYml0cworCisgICAgZGVmIGlzTGl0dGxlRW5kaWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXggPT0gIjwiCisKKyAgICBkZWYgaXNCaWdFbmdpYW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNleCA9PSAiPiIKKworICAgIGRlZiBtYWNoaW5lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2Uga25vdyB0aGUgc2V4IHN0b3JlZCBpbiBzZWxmLnNleCBhbmQgd2UKKyAgICAgICAga25vdyB0aGUgcG9zaXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBzdHJ1Y3QKKyAgICAgICAgKGEsKSA9IHN0cnVjdC51bnBhY2soc2VsZi5zZXgrIkgiLCBzZWxmLmRhdGFbMTg6MjBdKQorICAgICAgICByZXR1cm4gYQorCisgICAgZGVmIHJ1bl9vYmpkdW1wKHNlbGYsIGNtZCwgZCk6CisgICAgICAgIGltcG9ydCBiYi5wcm9jZXNzCisgICAgICAgIGltcG9ydCBzeXMKKworICAgICAgICBpZiBjbWQgaW4gc2VsZi5vYmpkdW1wX291dHB1dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0KKworICAgICAgICBvYmpkdW1wID0gZC5nZXRWYXIoJ09CSkRVTVAnLCBUcnVlKQorCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsiTENfQUxMIl0gPSAiQyIKKyAgICAgICAgZW52WyJQQVRIIl0gPSBkLmdldFZhcignUEFUSCcsIFRydWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiJXMgJXMgJXMiICUgKG9iamR1bXAsIGNtZCwgc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYub2JqZHVtcF9vdXRwdXRbY21kXSA9IGJiLnByb2Nlc3MucnVuKFtvYmpkdW1wLCBjbWQsIHNlbGYubmFtZV0sIGVudj1lbnYsIHNoZWxsPUZhbHNlKVswXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYub2JqZHVtcF9vdXRwdXRbY21kXQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCIlcyAlcyAlcyBmYWlsZWQ6ICVzIiAlIChvYmpkdW1wLCBjbWQsIHNlbGYubmFtZSwgZSkpCisgICAgICAgICAgICByZXR1cm4gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvcmVjaXBldXRpbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmE3MjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5CkBAIC0wLDAgKzEsNzQwIEBACisjIFV0aWxpdHkgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCBtb2RpZnlpbmcgcmVjaXBlcworIworIyBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSB0aGUgT0UgbGF5ZXIgaW5kZXgKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGV4dHdyYXAKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgdXRpbHMKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCByZQoraW1wb3J0IGZubWF0Y2gKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0LCBkZWZhdWx0ZGljdAorCisKKyMgSGVscCB1cyB0byBmaW5kIHBsYWNlcyB0byBpbnNlcnQgdmFsdWVzCityZWNpcGVfcHJvZ3Jlc3Npb24gPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJywgJ0xJQ0VOU0UnLCAnTElDX0ZJTEVTX0NIS1NVTScsICdQUk9WSURFUycsICdERVBFTkRTJywgJ1BSJywgJ1BWJywgJ1NSQ1JFVicsICdTUkNfVVJJJywgJ1MnLCAnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJywgJ2RvX3BhdGNoJywgJ0VYVFJBX09FQ09ORicsICdkb19jb25maWd1cmUnLCAnRVhUUkFfT0VNQUtFJywgJ2RvX2NvbXBpbGUnLCAnZG9faW5zdGFsbCcsICdkb19wb3B1bGF0ZV9zeXNyb290JywgJ0lOSVRTQ1JJUFQnLCAnVVNFUkFERCcsICdHUk9VUEFERCcsICdQQUNLQUdFUycsICdGSUxFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlBST1ZJREVTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ0FMTE9XX0VNUFRZJywgJ2RvX3BhY2thZ2UnLCAnZG9fZGVwbG95J10KKyMgVmFyaWFibGVzIHRoYXQgc29tZXRpbWVzIGFyZSBhIGJpdCBsb25nIGJ1dCBzaG91bGRuJ3QgYmUgd3JhcHBlZAorbm93cmFwX3ZhcnMgPSBbJ1NVTU1BUlknLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUiddCitsaXN0X3ZhcnMgPSBbJ1NSQ19VUkknLCAnTElDX0ZJTEVTX0NIS1NVTSddCittZXRhX3ZhcnMgPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJ10KKworCitkZWYgcG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pOgorICAgICIiIkNvbnZlcnQgYSByZWNpcGUgbmFtZSAoUE4pIHRvIHRoZSBwYXRoIHRvIHRoZSByZWNpcGUgZmlsZSIiIgorICAgIGltcG9ydCBiYi5wcm92aWRlcnMKKworICAgIGlmIHBuIGluIGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG46CisgICAgICAgIGZpbGVuYW1lcyA9IGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG5bcG5dCisgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwgY29va2VyLmRhdGEsIGNvb2tlci5yZWNpcGVjYWNoZSwgY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbikKKyAgICAgICAgcmV0dXJuIGJlc3RbM10KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2RlZiBnZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKToKKyAgICAiIiJJZiBhIHJlY2lwZSBjb3VsZCBub3QgYmUgZm91bmQsIGZpbmQgb3V0IHdoeSBpZiBwb3NzaWJsZSIiIgorICAgIGltcG9ydCBiYi50YXNrZGF0YQorICAgIHRhc2tkYXRhID0gYmIudGFza2RhdGEuVGFza0RhdGEoTm9uZSwgc2tpcGxpc3Q9Y29va2VyLnNraXBsaXN0KQorICAgIHJldHVybiB0YXNrZGF0YS5nZXRfcmVhc29ucyhwbikKKworCitkZWYgcGFyc2VfcmVjaXBlKGZuLCBhcHBlbmRmaWxlcywgZCk6CisgICAgIiIiCisgICAgUGFyc2UgYW4gaW5kaXZpZHVhbCByZWNpcGUgZmlsZSwgb3B0aW9uYWxseSB3aXRoIGEgbGlzdCBvZgorICAgIGJiYXBwZW5kIGZpbGVzLgorICAgICIiIgorICAgIGltcG9ydCBiYi5jYWNoZQorICAgIGVudmRhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGFwcGVuZGZpbGVzLCBkKQorICAgIHJldHVybiBlbnZkYXRhCisKKworZGVmIHBhcnNlX3JlY2lwZV9zaW1wbGUoY29va2VyLCBwbiwgZCwgYXBwZW5kcz1UcnVlKToKKyAgICAiIiIKKyAgICBQYXJzZSBhIHJlY2lwZSBhbmQgb3B0aW9uYWxseSBhbGwgYmJhcHBlbmRzIHRoYXQgYXBwbHkgdG8gaXQKKyAgICBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgICIiIgorICAgIGltcG9ydCBiYi5wcm92aWRlcnMKKworICAgIHJlY2lwZWZpbGUgPSBwbl90b19yZWNpcGUoY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgc2tpcHJlYXNvbnMgPSBnZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKQorICAgICAgICAjIFdlIG1heSBhcyB3ZWxsIHJlLXVzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlciBoZXJlCisgICAgICAgIGlmIHNraXByZWFzb25zOgorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoc2tpcHJlYXNvbnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcignVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICVzJyAlIHBuKQorICAgIGlmIGFwcGVuZHM6CisgICAgICAgIGFwcGVuZGZpbGVzID0gY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQorICAgIHJldHVybiBwYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kZmlsZXMsIGQpCisKKworZGVmIGdldF92YXJfZmlsZXMoZm4sIHZhcmxpc3QsIGQpOgorICAgICIiIkZpbmQgdGhlIGZpbGUgaW4gd2hpY2ggZWFjaCBvZiBhIGxpc3Qgb2YgdmFyaWFibGVzIGlzIHNldC4KKyAgICBOb3RlOiByZXF1aXJlcyB2YXJpYWJsZSBoaXN0b3J5IHRvIGJlIGVuYWJsZWQgd2hlbiBwYXJzaW5nLgorICAgICIiIgorICAgIHZhcmZpbGVzID0ge30KKyAgICBmb3IgdiBpbiB2YXJsaXN0OgorICAgICAgICBoaXN0b3J5ID0gZC52YXJoaXN0b3J5LnZhcmlhYmxlKHYpCisgICAgICAgIGZpbGVzID0gW10KKyAgICAgICAgZm9yIGV2ZW50IGluIGhpc3Rvcnk6CisgICAgICAgICAgICBpZiAnZmlsZScgaW4gZXZlbnQgYW5kIG5vdCAnZmxhZycgaW4gZXZlbnQ6CisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGV2ZW50WydmaWxlJ10pCisgICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZpbGVzWy0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IE5vbmUKKyAgICAgICAgdmFyZmlsZXNbdl0gPSBhY3R1YWxmaWxlCisKKyAgICByZXR1cm4gdmFyZmlsZXMKKworCitkZWYgcGF0Y2hfcmVjaXBlX2ZpbGUoZm4sIHZhbHVlcywgcGF0Y2g9RmFsc2UsIHJlbHBhdGg9JycpOgorICAgICIiIlVwZGF0ZSBvciBpbnNlcnQgdmFyaWFibGUgdmFsdWVzIGludG8gYSByZWNpcGUgZmlsZSAoYXNzdW1pbmcgeW91CisgICAgICAgaGF2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIGV4YWN0IGZpbGUgeW91IHdhbnQgdG8gdXBkYXRlLikKKyAgICAgICBOb3RlIHRoYXQgc29tZSBtYW51YWwgaW5zcGVjdGlvbi9pbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkCisgICAgICAgc2luY2UgdGhpcyBjYW5ub3QgaGFuZGxlIGFsbCBzaXR1YXRpb25zLgorICAgICIiIgorICAgIHJlbWFpbmluZ25hbWVzID0ge30KKyAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICByZW1haW5pbmduYW1lc1trXSA9IHJlY2lwZV9wcm9ncmVzc2lvbi5pbmRleChrKSBpZiBrIGluIHJlY2lwZV9wcm9ncmVzc2lvbiBlbHNlIC0xCisgICAgcmVtYWluaW5nbmFtZXMgPSBPcmRlcmVkRGljdChzb3J0ZWQocmVtYWluaW5nbmFtZXMuaXRlcml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFsxXSkpCisKKyAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgIGRlZiBvdXRwdXR2YWx1ZShuYW1lKToKKyAgICAgICAgICAgIHJhd3RleHQgPSAnJXMgPSAiJXMiXG4nICUgKG5hbWUsIHZhbHVlc1tuYW1lXSkKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gbm93cmFwX3ZhcnM6CisgICAgICAgICAgICAgICAgdGYud3JpdGUocmF3dGV4dCkKKyAgICAgICAgICAgIGVsaWYgbmFtZSBpbiBsaXN0X3ZhcnM6CisgICAgICAgICAgICAgICAgc3BsaXR2YWx1ZSA9IHZhbHVlc1tuYW1lXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsdWUpID4gMToKKyAgICAgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gJyBcXFxuJyArICgnICcgKiAobGVuKG5hbWUpICsgNCkpCisgICAgICAgICAgICAgICAgICAgIHRmLndyaXRlKCclcyA9ICIlcyVzIlxuJyAlIChuYW1lLCBsaW5lc3BsaXQuam9pbihzcGxpdHZhbHVlKSwgbGluZXNwbGl0KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShyYXd0ZXh0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3cmFwcGVkID0gdGV4dHdyYXAud3JhcChyYXd0ZXh0KQorICAgICAgICAgICAgICAgIGZvciB3cmFwbGluZSBpbiB3cmFwcGVkWzotMV06CisgICAgICAgICAgICAgICAgICAgIHRmLndyaXRlKCclcyBcXFxuJyAlIHdyYXBsaW5lKQorICAgICAgICAgICAgICAgIHRmLndyaXRlKCclc1xuJyAlIHdyYXBwZWRbLTFdKQorCisgICAgICAgIHRmbiA9IHRmLm5hbWUKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAjIEZpcnN0IHJ1bnRocm91Z2ggLSBmaW5kIGV4aXN0aW5nIG5hbWVzIChzbyB3ZSBrbm93IG5vdCB0byBpbnNlcnQgYmFzZWQgb24gcmVjaXBlX3Byb2dyZXNzaW9uKQorICAgICAgICAgICAgIyBTZWNvbmQgcnVudGhyb3VnaCAtIG1ha2UgdGhlIGNoYW5nZXMKKyAgICAgICAgICAgIGV4aXN0aW5nbmFtZXMgPSBbXQorICAgICAgICAgICAgZm9yIHJ1bnRocm91Z2ggaW4gWzEsIDJdOgorICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcmVjaXBlX3Byb2dyZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgnXiVzKF9wcmVwZW5kfF9hcHBlbmQpKlsgPzo9KF0nICUgcCwgbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1haW5pbmduYW1lc1trXSA+IC0xIGFuZCByZWNpcGVfcHJvZ3Jlc3Npb24uaW5kZXgocCkgPiByZW1haW5pbmduYW1lc1trXSBhbmQgcnVudGhyb3VnaCA+IDEgYW5kIG5vdCBrIGluIGV4aXN0aW5nbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcmVtYWluaW5nbmFtZXNba10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJ14lc1sgPzo9XScgJSBrLCBsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycm5hbWUgPSBrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJ1bnRocm91Z2ggPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nbmFtZXMuYXBwZW5kKGspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcmVtYWluaW5nbmFtZXNba10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJuYW1lIGFuZCBydW50aHJvdWdoID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXR2YWx1ZShjdXJybmFtZSkKKworICAgICAgICAgICAgICAgICAgICBpZiBjdXJybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNsaW5lLmVuZHN3aXRoKCdcXCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgcnVudGhyb3VnaCA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShsaW5lKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICBpZiByZW1haW5pbmduYW1lczoKKyAgICAgICAgICAgIHRmLndyaXRlKCdcbicpCisgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoaykKKworICAgIHdpdGggb3Blbih0Zm4sICdVJykgYXMgZjoKKyAgICAgICAgdG9saW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBpZiBwYXRjaDoKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAnVScpIGFzIGY6CisgICAgICAgICAgICBmcm9tbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIHJlbGZuID0gb3MucGF0aC5yZWxwYXRoKGZuLCByZWxwYXRoKQorICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZnJvbWxpbmVzLCB0b2xpbmVzLCAnYS8lcycgJSByZWxmbiwgJ2IvJXMnICUgcmVsZm4pCisgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisgICAgICAgIHJldHVybiBkaWZmCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlbGluZXModG9saW5lcykKKyAgICAgICAgb3MucmVtb3ZlKHRmbikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGxvY2FsaXNlX2ZpbGVfdmFycyhmbiwgdmFyZmlsZXMsIHZhcmxpc3QpOgorICAgICIiIkdpdmVuIGEgbGlzdCBvZiB2YXJpYWJsZXMgYW5kIHZhcmlhYmxlIGhpc3RvcnkgKGZldGNoZWQgd2l0aCBnZXRfdmFyX2ZpbGVzKCkpCisgICAgZmluZCB3aGVyZSBlYWNoIHZhcmlhYmxlIHNob3VsZCBiZSBzZXQvY2hhbmdlZC4gVGhpcyBoYW5kbGVzIGZvciBleGFtcGxlIHdoZXJlIGEKKyAgICByZWNpcGUgaW5jbHVkZXMgYW4gaW5jIGZpbGUgd2hlcmUgdmFyaWFibGVzIG1pZ2h0IGJlIGNoYW5nZWQgLSBpbiBtb3N0IGNhc2VzCisgICAgd2Ugd2FudCB0byB1cGRhdGUgdGhlIGluYyBmaWxlIHdoZW4gY2hhbmdpbmcgdGhlIHZhcmlhYmxlIHZhbHVlIHJhdGhlciB0aGFuIGFkZGluZworICAgIGl0IHRvIHRoZSByZWNpcGUgaXRzZWxmLgorICAgICIiIgorICAgIGZuZGlyID0gb3MucGF0aC5kaXJuYW1lKGZuKSArIG9zLnNlcAorCisgICAgZmlyc3RfbWV0YV9maWxlID0gTm9uZQorICAgIGZvciB2IGluIG1ldGFfdmFyczoKKyAgICAgICAgZiA9IHZhcmZpbGVzLmdldCh2LCBOb25lKQorICAgICAgICBpZiBmOgorICAgICAgICAgICAgYWN0dWFsZGlyID0gb3MucGF0aC5kaXJuYW1lKGYpICsgb3Muc2VwCisgICAgICAgICAgICBpZiBhY3R1YWxkaXIuc3RhcnRzd2l0aChmbmRpcik6CisgICAgICAgICAgICAgICAgZmlyc3RfbWV0YV9maWxlID0gZgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBmaWxldmFycyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgZm9yIHYgaW4gdmFybGlzdDoKKyAgICAgICAgZiA9IHZhcmZpbGVzW3ZdCisgICAgICAgICMgT25seSByZXR1cm4gZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSByZWNpcGUgb3IgaW4gc29tZSBkaXJlY3RvcnkgYmVsb3cgdGhlcmUKKyAgICAgICAgIyAodGhpcyBleGNsdWRlcyBiYmNsYXNzIGZpbGVzIGFuZCBjb21tb24gaW5jIGZpbGVzIHRoYXQgd291bGRuJ3QgYmUgYXBwcm9wcmlhdGUgdG8gc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAjIGluIGlmIHdlIHdlcmUgZ29pbmcgdG8gc2V0IGEgdmFsdWUgc3BlY2lmaWMgdG8gdGhpcyByZWNpcGUpCisgICAgICAgIGlmIGY6CisgICAgICAgICAgICBhY3R1YWxmaWxlID0gZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBWYXJpYWJsZSBpc24ndCBpbiBhIGZpbGUsIGlmIGl0J3Mgb25lIG9mIHRoZSAibWV0YSIgdmFycywgdXNlIHRoZSBmaXJzdCBmaWxlIHdpdGggYSBtZXRhIHZhciBpbiBpdAorICAgICAgICAgICAgaWYgZmlyc3RfbWV0YV9maWxlOgorICAgICAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmaXJzdF9tZXRhX2ZpbGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZuCisKKyAgICAgICAgYWN0dWFsZGlyID0gb3MucGF0aC5kaXJuYW1lKGFjdHVhbGZpbGUpICsgb3Muc2VwCisgICAgICAgIGlmIG5vdCBhY3R1YWxkaXIuc3RhcnRzd2l0aChmbmRpcik6CisgICAgICAgICAgICBhY3R1YWxmaWxlID0gZm4KKyAgICAgICAgZmlsZXZhcnNbYWN0dWFsZmlsZV0uYXBwZW5kKHYpCisKKyAgICByZXR1cm4gZmlsZXZhcnMKKworZGVmIHBhdGNoX3JlY2lwZShkLCBmbiwgdmFydmFsdWVzLCBwYXRjaD1GYWxzZSwgcmVscGF0aD0nJyk6CisgICAgIiIiTW9kaWZ5IGEgbGlzdCBvZiB2YXJpYWJsZSB2YWx1ZXMgaW4gdGhlIHNwZWNpZmllZCByZWNpcGUuIEhhbmRsZXMgaW5jIGZpbGVzIGlmCisgICAgdXNlZCBieSB0aGUgcmVjaXBlLgorICAgICIiIgorICAgIHZhcmxpc3QgPSB2YXJ2YWx1ZXMua2V5cygpCisgICAgdmFyZmlsZXMgPSBnZXRfdmFyX2ZpbGVzKGZuLCB2YXJsaXN0LCBkKQorICAgIGxvY3MgPSBsb2NhbGlzZV9maWxlX3ZhcnMoZm4sIHZhcmZpbGVzLCB2YXJsaXN0KQorICAgIHBhdGNoZXMgPSBbXQorICAgIGZvciBmLHYgaW4gbG9jcy5pdGVyaXRlbXMoKToKKyAgICAgICAgdmFscyA9IHtrOiB2YXJ2YWx1ZXNba10gZm9yIGsgaW4gdn0KKyAgICAgICAgcGF0Y2hkYXRhID0gcGF0Y2hfcmVjaXBlX2ZpbGUoZiwgdmFscywgcGF0Y2gsIHJlbHBhdGgpCisgICAgICAgIGlmIHBhdGNoOgorICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQocGF0Y2hkYXRhKQorCisgICAgaWYgcGF0Y2g6CisgICAgICAgIHJldHVybiBwYXRjaGVzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCisKK2RlZiBjb3B5X3JlY2lwZV9maWxlcyhkLCB0Z3RfZGlyLCB3aG9sZV9kaXI9RmFsc2UsIGRvd25sb2FkPVRydWUpOgorICAgICIiIkNvcHkgKGxvY2FsKSByZWNpcGUgZmlsZXMsIGluY2x1ZGluZyBib3RoIGZpbGVzIGluY2x1ZGVkIHZpYSBpbmNsdWRlL3JlcXVpcmUsCisgICAgYW5kIGZpbGVzIHJlZmVycmVkIHRvIGluIHRoZSBTUkNfVVJJIHZhcmlhYmxlLiIiIgorICAgIGltcG9ydCBiYi5mZXRjaDIKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgIyBGSVhNRSBuZWVkIGEgd2FybmluZyBpZiB0aGUgdW5leHBhbmRlZCBTUkNfVVJJIHZhbHVlIGNvbnRhaW5zIHZhcmlhYmxlIHJlZmVyZW5jZXMKKworICAgIHVyaXMgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHVyaXMsIGQpCisgICAgaWYgZG93bmxvYWQ6CisgICAgICAgIGZldGNoLmRvd25sb2FkKCkKKworICAgICMgQ29weSBsb2NhbCBmaWxlcyB0byB0YXJnZXQgZGlyZWN0b3J5IGFuZCBnYXRoZXIgYW55IHJlbW90ZSBmaWxlcworICAgIGJiX2RpciA9IG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScsIFRydWUpKSArIG9zLnNlcAorICAgIHJlbW90ZXMgPSBbXQorICAgIGluY2x1ZGVzID0gW3BhdGggZm9yIHBhdGggaW4gZC5nZXRWYXIoJ0JCSU5DTFVERUQnLCBUcnVlKS5zcGxpdCgpIGlmCisgICAgICAgICAgICAgICAgcGF0aC5zdGFydHN3aXRoKGJiX2RpcikgYW5kIG9zLnBhdGguZXhpc3RzKHBhdGgpXQorICAgIGZvciBwYXRoIGluIGZldGNoLmxvY2FscGF0aHMoKSArIGluY2x1ZGVzOgorICAgICAgICAjIE9ubHkgaW1wb3J0IGZpbGVzIHRoYXQgYXJlIHVuZGVyIHRoZSBtZXRhIGRpcmVjdG9yeQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoYmJfZGlyKToKKyAgICAgICAgICAgIGlmIG5vdCB3aG9sZV9kaXI6CisgICAgICAgICAgICAgICAgcmVscGF0aCA9IG9zLnBhdGgucmVscGF0aChwYXRoLCBiYl9kaXIpCisgICAgICAgICAgICAgICAgc3ViZGlyID0gb3MucGF0aC5qb2luKHRndF9kaXIsIG9zLnBhdGguZGlybmFtZShyZWxwYXRoKSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3ViZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoc3ViZGlyKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MihwYXRoLCBvcy5wYXRoLmpvaW4odGd0X2RpciwgcmVscGF0aCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZW1vdGVzLmFwcGVuZChwYXRoKQorICAgICMgU2ltcGx5IGNvcHkgd2hvbGUgbWV0YSBkaXIsIGlmIHJlcXVlc3RlZAorICAgIGlmIHdob2xlX2RpcjoKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGJiX2RpciwgdGd0X2RpcikKKworICAgIHJldHVybiByZW1vdGVzCisKKworZGVmIGdldF9yZWNpcGVfcGF0Y2hlcyhkKToKKyAgICAiIiJHZXQgYSBsaXN0IG9mIHRoZSBwYXRjaGVzIGluY2x1ZGVkIGluIFNSQ19VUkkgd2l0aGluIGEgcmVjaXBlLiIiIgorICAgIHBhdGNoZmlsZXMgPSBbXQorICAgICMgRXhlY3V0ZSBzcmNfcGF0Y2hlcygpIGRlZmluZWQgaW4gcGF0Y2guYmJjbGFzcyAtIHRoaXMgd29ya3Mgc2luY2UgdGhhdCBjbGFzcworICAgICMgaXMgaW5oZXJpdGVkIGdsb2JhbGx5CisgICAgcGF0Y2hlcyA9IGJiLnV0aWxzLmV4ZWNfZmxhdF9weXRob25fZnVuYygnc3JjX3BhdGNoZXMnLCBkKQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgcGF0Y2hmaWxlcy5hcHBlbmQobG9jYWwpCisgICAgcmV0dXJuIHBhdGNoZmlsZXMKKworCitkZWYgZ2V0X3JlY2lwZV9wYXRjaGVkX2ZpbGVzKGQpOgorICAgICIiIgorICAgIEdldCB0aGUgbGlzdCBvZiBwYXRjaGVzIGZvciBhIHJlY2lwZSBhbG9uZyB3aXRoIHRoZSBmaWxlcyBlYWNoIHBhdGNoIG1vZGlmaWVzLgorICAgIFBhcmFtczoKKyAgICAgICAgZDogdGhlIGRhdGFzdG9yZSBmb3IgdGhlIHJlY2lwZQorICAgIFJldHVybnM6CisgICAgICAgIGEgZGljdCBtYXBwaW5nIHBhdGNoIGZpbGUgcGF0aCB0byBhIGxpc3Qgb2YgdHVwbGVzIG9mIGNoYW5nZWQgZmlsZXMgYW5kCisgICAgICAgIGNoYW5nZSBtb2RlICgnQScgZm9yIGFkZCwgJ0QnIGZvciBkZWxldGUgb3IgJ00nIGZvciBtb2RpZnkpCisgICAgIiIiCisgICAgaW1wb3J0IG9lLnBhdGNoCisgICAgIyBFeGVjdXRlIHNyY19wYXRjaGVzKCkgZGVmaW5lZCBpbiBwYXRjaC5iYmNsYXNzIC0gdGhpcyB3b3JrcyBzaW5jZSB0aGF0IGNsYXNzCisgICAgIyBpcyBpbmhlcml0ZWQgZ2xvYmFsbHkKKyAgICBwYXRjaGVzID0gYmIudXRpbHMuZXhlY19mbGF0X3B5dGhvbl9mdW5jKCdzcmNfcGF0Y2hlcycsIGQpCisgICAgcGF0Y2hlZGZpbGVzID0ge30KKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgXywgXywgcGF0Y2hmaWxlLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBzdHJpcGxldmVsID0gaW50KHBhcm1bJ3N0cmlwbGV2ZWwnXSkKKyAgICAgICAgcGF0Y2hlZGZpbGVzW3BhdGNoZmlsZV0gPSBvZS5wYXRjaC5QYXRjaFNldC5nZXRQYXRjaGVkRmlsZXMocGF0Y2hmaWxlLCBzdHJpcGxldmVsLCBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1MnLCBUcnVlKSwgcGFybS5nZXQoJ3BhdGNoZGlyJywgJycpKSkKKyAgICByZXR1cm4gcGF0Y2hlZGZpbGVzCisKKworZGVmIHZhbGlkYXRlX3BuKHBuKToKKyAgICAiIiJQZXJmb3JtIHZhbGlkYXRpb24gb24gYSByZWNpcGUgbmFtZSAoUE4pIGZvciBhIG5ldyByZWNpcGUuIiIiCisgICAgcmVzZXJ2ZWRfbmFtZXMgPSBbJ2ZvcmNldmFyaWFibGUnLCAnYXBwZW5kJywgJ3ByZXBlbmQnLCAncmVtb3ZlJ10KKyAgICBpZiBub3QgcmUubWF0Y2goJ1swLTlhLXotLl0rJywgcG4pOgorICAgICAgICByZXR1cm4gJ1JlY2lwZSBuYW1lICIlcyIgaXMgaW52YWxpZDogb25seSBjaGFyYWN0ZXJzIDAtOSwgYS16LCAtIGFuZCAuIGFyZSBhbGxvd2VkJyAlIHBuCisgICAgZWxpZiBwbiBpbiByZXNlcnZlZF9uYW1lczoKKyAgICAgICAgcmV0dXJuICdSZWNpcGUgbmFtZSAiJXMiIGlzIGludmFsaWQ6IGlzIGEgcmVzZXJ2ZWQga2V5d29yZCcgJSBwbgorICAgIGVsaWYgcG4uc3RhcnRzd2l0aCgncG4tJyk6CisgICAgICAgIHJldHVybiAnUmVjaXBlIG5hbWUgIiVzIiBpcyBpbnZhbGlkOiBuYW1lcyBzdGFydGluZyB3aXRoICJwbi0iIGFyZSByZXNlcnZlZCcgJSBwbgorICAgIHJldHVybiAnJworCisKK2RlZiBnZXRfYmJhcHBlbmRfcGF0aChkLCBkZXN0bGF5ZXJkaXIsIHdpbGRjYXJkdmVyPUZhbHNlKToKKyAgICAiIiJEZXRlcm1pbmUgaG93IGEgYmJhcHBlbmQgZm9yIGEgcmVjaXBlIHNob3VsZCBiZSBuYW1lZCBhbmQgbG9jYXRlZCB3aXRoaW4gYW5vdGhlciBsYXllciIiIgorCisgICAgaW1wb3J0IGJiLmNvb2tlcmRhdGEKKworICAgIGRlc3RsYXllcmRpciA9IG9zLnBhdGguYWJzcGF0aChkZXN0bGF5ZXJkaXIpCisgICAgcmVjaXBlZmlsZSA9IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICByZWNpcGVmbiA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSlbMF0KKyAgICBpZiB3aWxkY2FyZHZlciBhbmQgJ18nIGluIHJlY2lwZWZuOgorICAgICAgICByZWNpcGVmbiA9IHJlY2lwZWZuLnNwbGl0KCdfJywgMSlbMF0gKyAnXyUnCisgICAgYXBwZW5kZm4gPSByZWNpcGVmbiArICcuYmJhcHBlbmQnCisKKyAgICAjIFBhcnNlIHRoZSBzcGVjaWZpZWQgbGF5ZXIncyBsYXllci5jb25mIGZpbGUgZGlyZWN0bHksIGluIGNhc2UgdGhlIGxheWVyIGlzbid0IGluIGJibGF5ZXJzLmNvbmYKKyAgICBjb25mZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgY29uZmRhdGEuc2V0VmFyKCdCQkZJTEVTJywgJycpCisgICAgY29uZmRhdGEuc2V0VmFyKCdMQVlFUkRJUicsIGRlc3RsYXllcmRpcikKKyAgICBkZXN0bGF5ZXJjb25mID0gb3MucGF0aC5qb2luKGRlc3RsYXllcmRpciwgImNvbmYiLCAibGF5ZXIuY29uZiIpCisgICAgY29uZmRhdGEgPSBiYi5jb29rZXJkYXRhLnBhcnNlX2NvbmZpZ19maWxlKGRlc3RsYXllcmNvbmYsIGNvbmZkYXRhKQorCisgICAgb3JpZ2xheWVyZGlyID0gZmluZF9sYXllcmRpcihyZWNpcGVmaWxlKQorICAgIGlmIG5vdCBvcmlnbGF5ZXJkaXI6CisgICAgICAgIHJldHVybiAoTm9uZSwgRmFsc2UpCisgICAgIyBOb3cgam9pbiB0aGlzIHRvIHRoZSBwYXRoIHdoZXJlIHRoZSBiYmFwcGVuZCBpcyBnb2luZyBhbmQgY2hlY2sgaWYgaXQgaXMgY292ZXJlZCBieSBCQkZJTEVTCisgICAgYXBwZW5kcGF0aCA9IG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsIG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIG9yaWdsYXllcmRpciksIGFwcGVuZGZuKQorICAgIGNsb3NlcGF0aCA9ICcnCisgICAgcGF0aG9rID0gVHJ1ZQorICAgIGZvciBiYmZpbGVzcGVjIGluIGNvbmZkYXRhLmdldFZhcignQkJGSUxFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoYXBwZW5kcGF0aCwgYmJmaWxlc3BlYyk6CisgICAgICAgICAgICAjIE91ciBhcHBlbmQgcGF0aCB3b3Jrcywgd2UncmUgZG9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiBiYmZpbGVzcGVjLnN0YXJ0c3dpdGgoZGVzdGxheWVyZGlyKSBhbmQgZm5tYXRjaC5mbm1hdGNoY2FzZSgndGVzdC5iYmFwcGVuZCcsIG9zLnBhdGguYmFzZW5hbWUoYmJmaWxlc3BlYykpOgorICAgICAgICAgICAgIyBUcnkgdG8gZmluZCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBwYXRoCisgICAgICAgICAgICBpZiBsZW4oYmJmaWxlc3BlYykgPiBsZW4oY2xvc2VwYXRoKToKKyAgICAgICAgICAgICAgICBjbG9zZXBhdGggPSBiYmZpbGVzcGVjCisgICAgZWxzZToKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHRoZSBiYmFwcGVuZCBsYXllciBhbmQgdGhlIG9yaWdpbmFsIHJlY2lwZSdzIGxheWVyIGRvbid0IGhhdmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgIGlmIGNsb3NlcGF0aDoKKyAgICAgICAgICAgICMgYmJhcHBlbmQgbGF5ZXIncyBsYXllci5jb25mIGF0IGxlYXN0IGhhcyBhIHNwZWMgdGhhdCBwaWNrcyB1cCAuYmJhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICMgTm93IHdlIGp1c3QgbmVlZCB0byBzdWJzdGl0dXRlIG91dCBhbnkgd2lsZGNhcmRzCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKGNsb3NlcGF0aCksIGRlc3RsYXllcmRpcikKKyAgICAgICAgICAgIGlmICdyZWNpcGVzLSonIGluIGFwcGVuZHN1YmRpcjoKKyAgICAgICAgICAgICAgICAjIFRyeSB0byBjb3B5IHRoaXMgcGFydCBmcm9tIHRoZSBvcmlnaW5hbCByZWNpcGUgcGF0aAorICAgICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaCgnL3JlY2lwZXMtW14vXSsvJywgcmVjaXBlZmlsZSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZHN1YmRpciA9IGFwcGVuZHN1YmRpci5yZXBsYWNlKCcvcmVjaXBlcy0qLycsIHJlcy5ncm91cCgwKSkKKyAgICAgICAgICAgICMgVGhpcyBpcyBjcnVkZSwgYnV0IHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnKicsIHJlY2lwZWZuLnNwbGl0KCdfJylbMF0pCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnPycsICdhJykKKyAgICAgICAgICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCBhcHBlbmRzdWJkaXIsIGFwcGVuZGZuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aG9rID0gRmFsc2UKKyAgICByZXR1cm4gKGFwcGVuZHBhdGgsIHBhdGhvaykKKworCitkZWYgYmJhcHBlbmRfcmVjaXBlKHJkLCBkZXN0bGF5ZXJkaXIsIHNyY2ZpbGVzLCBpbnN0YWxsPU5vbmUsIHdpbGRjYXJkdmVyPUZhbHNlLCBtYWNoaW5lPU5vbmUsIGV4dHJhbGluZXM9Tm9uZSwgcmVtb3ZldmFsdWVzPU5vbmUpOgorICAgICIiIgorICAgIFdyaXRlcyBhIGJiYXBwZW5kIGZpbGUgZm9yIGEgcmVjaXBlCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgcmQ6IGRhdGEgZGljdGlvbmFyeSBmb3IgdGhlIHJlY2lwZQorICAgICAgICBkZXN0bGF5ZXJkaXI6IGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBsYXllciB0byBwbGFjZSB0aGUgYmJhcHBlbmQgaW4KKyAgICAgICAgICAgIChzdWJkaXJlY3RvcnkgcGF0aCBmcm9tIHRoZXJlIHdpbGwgYmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5KQorICAgICAgICBzcmNmaWxlczogZGljdCBvZiBzb3VyY2UgZmlsZXMgdG8gYWRkIHRvIFNSQ19VUkksIHdoZXJlIHRoZSB2YWx1ZQorICAgICAgICAgICAgaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSB0byBiZSBhZGRlZCwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUKKyAgICAgICAgICAgIG9yaWdpbmFsIGZpbGVuYW1lIGFzIGl0IHdvdWxkIGFwcGVhciBpbiBTUkNfVVJJIG9yIE5vbmUgaWYgaXQKKyAgICAgICAgICAgIGlzbid0IGFscmVhZHkgcHJlc2VudC4gWW91IG1heSBwYXNzIE5vbmUgZm9yIHRoaXMgcGFyYW1ldGVyIGlmCisgICAgICAgICAgICB5b3Ugc2ltcGx5IHdhbnQgdG8gc3BlY2lmeSB5b3VyIG93biBjb250ZW50IHZpYSB0aGUgZXh0cmFsaW5lcworICAgICAgICAgICAgcGFyYW1ldGVyLgorICAgICAgICBpbnN0YWxsOiBkaWN0IG1hcHBpbmcgZW50cmllcyBpbiBzcmNmaWxlcyB0byBhIHR1cGxlIG9mIHR3byBlbGVtZW50czoKKyAgICAgICAgICAgIGluc3RhbGwgcGF0aCAoKndpdGhvdXQqICR7RH0gcHJlZml4KSBhbmQgcGVybWlzc2lvbiB2YWx1ZSAoYXMgYQorICAgICAgICAgICAgc3RyaW5nLCBlLmcuICcwNjQ0JykuCisgICAgICAgIHdpbGRjYXJkdmVyOiBUcnVlIHRvIHVzZSBhICUgd2lsZGNhcmQgaW4gdGhlIGJiYXBwZW5kIGZpbGVuYW1lLCBvcgorICAgICAgICAgICAgRmFsc2UgdG8gbWFrZSB0aGUgYmJhcHBlbmQgc3BlY2lmaWMgdG8gdGhlIHJlY2lwZSB2ZXJzaW9uLgorICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgSWYgc3BlY2lmaWVkLCBtYWtlIHRoZSBjaGFuZ2VzIGluIHRoZSBiYmFwcGVuZCBzcGVjaWZpYyB0byB0aGlzCisgICAgICAgICAgICBtYWNoaW5lLiBUaGlzIHdpbGwgYWxzbyBjYXVzZSBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorICAgICAgICAgICAgdG8gYmUgYWRkZWQgdG8gdGhlIGJiYXBwZW5kLgorICAgICAgICBleHRyYWxpbmVzOgorICAgICAgICAgICAgRXh0cmEgbGluZXMgdG8gYWRkIHRvIHRoZSBiYmFwcGVuZC4gVGhpcyBtYXkgYmUgYSBkaWN0IG9mIG5hbWUKKyAgICAgICAgICAgIHZhbHVlIHBhaXJzLCBvciBzaW1wbHkgYSBsaXN0IG9mIHRoZSBsaW5lcy4KKyAgICAgICAgcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgVmFyaWFibGUgdmFsdWVzIHRvIHJlbW92ZSAtIGEgZGljdCBvZiBuYW1lcy92YWx1ZXMuCisgICAgIiIiCisKKyAgICBpZiBub3QgcmVtb3ZldmFsdWVzOgorICAgICAgICByZW1vdmV2YWx1ZXMgPSB7fQorCisgICAgIyBEZXRlcm1pbmUgaG93IHRoZSBiYmFwcGVuZCBzaG91bGQgYmUgbmFtZWQKKyAgICBhcHBlbmRwYXRoLCBwYXRob2sgPSBnZXRfYmJhcHBlbmRfcGF0aChyZCwgZGVzdGxheWVyZGlyLCB3aWxkY2FyZHZlcikKKyAgICBpZiBub3QgYXBwZW5kcGF0aDoKKyAgICAgICAgYmIuZXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgbGF5ZXIgZGlyZWN0b3J5IGNvbnRhaW5pbmcgJXMnICUgcmVjaXBlZmlsZSkKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorICAgIGlmIG5vdCBwYXRob2s6CisgICAgICAgIGJiLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgY29ycmVjdCBzdWJkaXJlY3RvcnkgcGF0aCBmb3IgYmJhcHBlbmQgZmlsZSAtIGNoZWNrIHRoYXQgd2hhdCAlcyBhZGRzIHRvIEJCRklMRVMgYWxzbyBtYXRjaGVzIC5iYmFwcGVuZCBmaWxlcy4gVXNpbmcgJXMgZm9yIG5vdywgYnV0IHVudGlsIHlvdSBmaXggdGhpcyB0aGUgYmJhcHBlbmQgd2lsbCBub3QgYmUgYXBwbGllZC4nICUgKG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgb3MucGF0aC5kaXJuYW1lKGFwcGVuZHBhdGgpKSkKKworICAgIGFwcGVuZGRpciA9IG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihhcHBlbmRkaXIpCisKKyAgICAjIEZJWE1FIGNoZWNrIGlmIHRoZSBiYmFwcGVuZCBkb2Vzbid0IGdldCBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyIHByaW9yaXR5IGxheWVyPworCisgICAgbGF5ZXJkaXJzID0gW29zLnBhdGguYWJzcGF0aChsYXllcmRpcikgZm9yIGxheWVyZGlyIGluIHJkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKS5zcGxpdCgpXQorICAgIGlmIG5vdCBvcy5wYXRoLmFic3BhdGgoZGVzdGxheWVyZGlyKSBpbiBsYXllcmRpcnM6CisgICAgICAgIGJiLndhcm4oJ1NwZWNpZmllZCBsYXllciBpcyBub3QgY3VycmVudGx5IGVuYWJsZWQgaW4gYmJsYXllcnMuY29uZiwgeW91IHdpbGwgbmVlZCB0byBhZGQgaXQgYmVmb3JlIHRoaXMgYmJhcHBlbmQgd2lsbCBiZSBhY3RpdmUnKQorCisgICAgYmJhcHBlbmRsaW5lcyA9IFtdCisgICAgaWYgZXh0cmFsaW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleHRyYWxpbmVzLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBleHRyYWxpbmVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKChuYW1lLCAnPScsIHZhbHVlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRG8gb3VyIGJlc3QgdG8gc3BsaXQgaXQKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGV4dHJhbGluZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoTm9uZSwgMikKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA9PSAzOgorICAgICAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCh0dXBsZShzcGxpdGxpbmUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCBleHRyYWxpbmVzIHZhbHVlIHBhc3NlZCcpCisKKyAgICBkZWYgcG9wbGluZSh2YXJuYW1lKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihiYmFwcGVuZGxpbmVzKSk6CisgICAgICAgICAgICBpZiBiYmFwcGVuZGxpbmVzW2ldWzBdID09IHZhcm5hbWU6CisgICAgICAgICAgICAgICAgbGluZSA9IGJiYXBwZW5kbGluZXMucG9wKGkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBhcHBlbmRsaW5lKHZhcm5hbWUsIG9wLCB2YWx1ZSk6CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgorICAgICAgICAgICAgaXRlbSA9IGJiYXBwZW5kbGluZXNbaV0KKyAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0gdmFybmFtZToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzW2ldID0gKGl0ZW1bMF0sIGl0ZW1bMV0sIGl0ZW1bMl0gKyAnICcgKyB2YWx1ZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKHZhcm5hbWUsIG9wLCB2YWx1ZSkpCisKKyAgICBkZXN0c3ViZGlyID0gcmQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaWYgc3JjZmlsZXM6CisgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKCgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQnLCAnOj0nLCAnJHtUSElTRElSfS8ke1BOfTonKSkKKworICAgIGFwcGVuZG92ZXJyaWRlID0gJycKKyAgICBpZiBtYWNoaW5lOgorICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ1BBQ0tBR0VfQVJDSCcsICc9JywgJyR7TUFDSElORV9BUkNIfScpKQorICAgICAgICBhcHBlbmRvdmVycmlkZSA9ICdfJXMnICUgbWFjaGluZQorICAgIGNvcHlmaWxlcyA9IHt9CisgICAgaWYgc3JjZmlsZXM6CisgICAgICAgIGluc3RmdW5jbGluZXMgPSBbXQorICAgICAgICBmb3IgbmV3ZmlsZSwgb3JpZ3NyY2ZpbGUgaW4gc3JjZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzcmNmaWxlID0gb3JpZ3NyY2ZpbGUKKyAgICAgICAgICAgIHNyY3VyaWVudHJ5ID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHNyY2ZpbGU6CisgICAgICAgICAgICAgICAgc3JjZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUobmV3ZmlsZSkKKyAgICAgICAgICAgICAgICBzcmN1cmllbnRyeSA9ICdmaWxlOi8vJXMnICUgc3JjZmlsZQorICAgICAgICAgICAgICAgICMgRG91YmxlLWNoZWNrIGl0J3Mgbm90IHRoZXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAjIEZJWE1FIGRvIHdlIGNhcmUgaWYgdGhlIGVudHJ5IGlzIGFkZGVkIGJ5IGFub3RoZXIgYmJhcHBlbmQgdGhhdCBtaWdodCBnbyBhd2F5PworICAgICAgICAgICAgICAgIGlmIG5vdCBzcmN1cmllbnRyeSBpbiByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kbGluZSgnU1JDX1VSSV9hcHBlbmQlcycgJSBhcHBlbmRvdmVycmlkZSwgJz0nLCAnICcgKyBzcmN1cmllbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGxpbmUoJ1NSQ19VUkknLCAnKz0nLCBzcmN1cmllbnRyeSkKKyAgICAgICAgICAgIGNvcHlmaWxlc1tuZXdmaWxlXSA9IHNyY2ZpbGUKKyAgICAgICAgICAgIGlmIGluc3RhbGw6CisgICAgICAgICAgICAgICAgaW5zdGl0ZW0gPSBpbnN0YWxsLnBvcChuZXdmaWxlLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIGluc3RpdGVtOgorICAgICAgICAgICAgICAgICAgICAoZGVzdHBhdGgsIHBlcm1zKSA9IGluc3RpdGVtCisgICAgICAgICAgICAgICAgICAgIGluc3RkZXN0cGF0aCA9IHJlcGxhY2VfZGlyX3ZhcnMoZGVzdHBhdGgsIHJkKQorICAgICAgICAgICAgICAgICAgICBpbnN0ZGlybGluZSA9ICdpbnN0YWxsIC1kICR7RH0lcycgJSBvcy5wYXRoLmRpcm5hbWUoaW5zdGRlc3RwYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5zdGRpcmxpbmUgaW4gaW5zdGZ1bmNsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMuYXBwZW5kKGluc3RkaXJsaW5lKQorICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZCgnaW5zdGFsbCAtbSAlcyAke1dPUktESVJ9LyVzICR7RH0lcycgJSAocGVybXMsIG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSksIGluc3RkZXN0cGF0aCkpCisgICAgICAgIGlmIGluc3RmdW5jbGluZXM6CisgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ2RvX2luc3RhbGxfYXBwZW5kJXMoKScgJSBhcHBlbmRvdmVycmlkZSwgJycsIGluc3RmdW5jbGluZXMpKQorCisgICAgYmIubm90ZSgnV3JpdGluZyBhcHBlbmQgZmlsZSAlcycgJSBhcHBlbmRwYXRoKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwZW5kcGF0aCk6CisgICAgICAgICMgV29yayBhcm91bmQgbGFjayBvZiBub25sb2NhbCBpbiBweXRob24gMgorICAgICAgICBleHR2YXJzID0geydkZXN0c3ViZGlyJzogZGVzdHN1YmRpcn0KKworICAgICAgICBkZWYgYXBwZW5kZmlsZV92YXJmdW5jKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJzoKKyAgICAgICAgICAgICAgICBpZiBvcmlndmFsdWUuc3RhcnRzd2l0aCgnJHtUSElTRElSfS8nKToKKyAgICAgICAgICAgICAgICAgICAgcG9wbGluZSgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQnKQorICAgICAgICAgICAgICAgICAgICBleHR2YXJzWydkZXN0c3ViZGlyJ10gPSByZC5leHBhbmQob3JpZ3ZhbHVlLnNwbGl0KCcke1RISVNESVJ9LycsIDEpWzFdLnJzdHJpcCgnOicpKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lID09ICdQQUNLQUdFX0FSQ0gnOgorICAgICAgICAgICAgICAgIGlmIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIHBvcGxpbmUoJ1BBQ0tBR0VfQVJDSCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAobWFjaGluZSwgTm9uZSwgNCwgRmFsc2UpCisgICAgICAgICAgICBlbGlmIHZhcm5hbWUuc3RhcnRzd2l0aCgnZG9faW5zdGFsbF9hcHBlbmQnKToKKyAgICAgICAgICAgICAgICBmdW5jID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIGZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIG9yaWd2YWx1ZS5zdHJpcCgnXG4nKS5zcGxpdGxpbmVzKCldCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZ1bmNbMl06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBpbiBpbnN0ZnVuY2xpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW5zdGZ1bmNsaW5lcywgTm9uZSwgNCwgRmFsc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gb3JpZ3ZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZW1vdmV2YXIgPSB2YXJuYW1lCisgICAgICAgICAgICAgICAgaWYgdmFybmFtZSBpbiBbJ1NSQ19VUkknLCAnU1JDX1VSSV9hcHBlbmQlcycgJSBhcHBlbmRvdmVycmlkZV06CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXZhciA9ICdTUkNfVVJJJworICAgICAgICAgICAgICAgICAgICBsaW5lID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZVsyXSBub3QgaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwuYXBwZW5kKGxpbmVbMl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBbbGluZVsyXV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBpZiByZW1vdmV2YXIgaW4gcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSByZW1vdmV2YWx1ZXNbcmVtb3ZldmFyXQorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlbW92ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmUgaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwucmVtb3ZlKHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJlbW92ZWl0ZW0gaW4gcmVtb3ZlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWl0ZW0gaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLnJlbW92ZShyZW1vdmVpdGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBzcGxpdHZhbAorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obmV3dmFsdWUpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSBpdCdzIHdyaXR0ZW4gb3V0IGFzIG9uZSBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnX2FwcGVuZCcgaW4gdmFybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9ICcgJyArIG5ld3ZhbHVlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3dmFsdWVbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlIGFuZCAob3AgaW4gWycrPScsICcuPSddIG9yICdfYXBwZW5kJyBpbiB2YXJuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBwb2ludCBhcHBlbmRpbmcgbm90aGluZworICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHZhcm5hbWUuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSA0CisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAtMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ld3ZhbHVlLCBOb25lLCBpbmRlbnQsIFRydWUpCisgICAgICAgICAgICByZXR1cm4gKG9yaWd2YWx1ZSwgTm9uZSwgNCwgRmFsc2UpCisKKyAgICAgICAgdmFybmFtZXMgPSBbaXRlbVswXSBmb3IgaXRlbSBpbiBiYmFwcGVuZGxpbmVzXQorICAgICAgICBpZiByZW1vdmV2YWx1ZXM6CisgICAgICAgICAgICB2YXJuYW1lcy5leHRlbmQocmVtb3ZldmFsdWVzLmtleXMoKSkKKworICAgICAgICB3aXRoIG9wZW4oYXBwZW5kcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgKHVwZGF0ZWQsIG5ld2xpbmVzKSA9IGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEoZiwgdmFybmFtZXMsIGFwcGVuZGZpbGVfdmFyZnVuYykKKworICAgICAgICBkZXN0c3ViZGlyID0gZXh0dmFyc1snZGVzdHN1YmRpciddCisgICAgZWxzZToKKyAgICAgICAgdXBkYXRlZCA9IEZhbHNlCisgICAgICAgIG5ld2xpbmVzID0gW10KKworICAgIGlmIGJiYXBwZW5kbGluZXM6CisgICAgICAgIGZvciBsaW5lIGluIGJiYXBwZW5kbGluZXM6CisgICAgICAgICAgICBpZiBsaW5lWzBdLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMge1xuICAgICVzXG59XG4nICUgKGxpbmVbMF0sICdcbiAgICAnLmpvaW4obGluZVsyXSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICVzICIlcyJcblxuJyAlIGxpbmUpCisgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisKKyAgICBpZiB1cGRhdGVkOgorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKG5ld2xpbmVzKQorCisgICAgaWYgY29weWZpbGVzOgorICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgZGVzdHN1YmRpciA9IG9zLnBhdGguam9pbihkZXN0c3ViZGlyLCBtYWNoaW5lKQorICAgICAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBjb3B5ZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmaWxlZGVzdCA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIGRlc3RzdWJkaXIsIG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmFic3BhdGgobmV3ZmlsZSkgIT0gb3MucGF0aC5hYnNwYXRoKGZpbGVkZXN0KToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdDb3B5aW5nICVzIHRvICVzJyAlIChuZXdmaWxlLCBmaWxlZGVzdCkpCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmaWxlZGVzdCkpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG5ld2ZpbGUsIGZpbGVkZXN0KQorCisgICAgcmV0dXJuIChhcHBlbmRwYXRoLCBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCBkZXN0c3ViZGlyKSkKKworCitkZWYgZmluZF9sYXllcmRpcihmbik6CisgICAgIiIiIEZpZ3VyZSBvdXQgcmVsYXRpdmUgcGF0aCB0byBiYXNlIG9mIGxheWVyIGZvciBhIGZpbGUgKGUuZy4gYSByZWNpcGUpIiIiCisgICAgcHRoID0gb3MucGF0aC5kaXJuYW1lKGZuKQorICAgIGxheWVyZGlyID0gJycKKyAgICB3aGlsZSBwdGg6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICdjb25mJywgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgICAgICBsYXllcmRpciA9IHB0aAorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHRoID0gb3MucGF0aC5kaXJuYW1lKHB0aCkKKyAgICByZXR1cm4gbGF5ZXJkaXIKKworCitkZWYgcmVwbGFjZV9kaXJfdmFycyhwYXRoLCBkKToKKyAgICAiIiJSZXBsYWNlIGNvbW1vbiBkaXJlY3RvcnkgcGF0aHMgd2l0aCBhcHByb3ByaWF0ZSB2YXJpYWJsZSByZWZlcmVuY2VzIChlLmcuIC9ldGMgYmVjb21lcyAke3N5c2NvbmZkaXJ9KSIiIgorICAgIGRpcnZhcnMgPSB7fQorICAgICMgU29ydCBieSBsZW5ndGggc28gd2UgZ2V0IHRoZSB2YXJpYWJsZXMgd2UncmUgaW50ZXJlc3RlZCBpbiBmaXJzdAorICAgIGZvciB2YXIgaW4gc29ydGVkKGQua2V5cygpLCBrZXk9bGVuKToKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKCdkaXInKSBhbmQgdmFyLmxvd2VyKCkgPT0gdmFyOgorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCcvJykgYW5kIG5vdCAnXG4nIGluIHZhbHVlIGFuZCB2YWx1ZSBub3QgaW4gZGlydmFyczoKKyAgICAgICAgICAgICAgICBkaXJ2YXJzW3ZhbHVlXSA9IHZhcgorICAgIGZvciBkaXJwYXRoIGluIHNvcnRlZChkaXJ2YXJzLmtleXMoKSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShkaXJwYXRoLCAnJHslc30nICUgZGlydmFyc1tkaXJwYXRoXSkKKyAgICByZXR1cm4gcGF0aAorCitkZWYgZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2LCB1cmlfdHlwZSk6CisgICAgIiIiCisgICAgR2V0IFBWIHdpdGhvdXQgU1JDUFYgY29tbW9uIGluIFNDTSdzIGZvciBub3cgb25seQorICAgIHN1cHBvcnQgZ2l0LgorCisgICAgUmV0dXJucyB0dXBsZSB3aXRoIHB2LCBwcmVmaXggYW5kIHN1ZmZpeC4KKyAgICAiIiIKKyAgICBwZnggPSAnJworICAgIHNmeCA9ICcnCisKKyAgICBpZiB1cmlfdHlwZSA9PSAnZ2l0JzoKKyAgICAgICAgZ2l0X3JlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPHBmeD52PykoP1A8dmVyPlteXCtdKikoKD9QPHNmeD5cKyhnaXQpP3I/KEFVVE9JTkNcKykpKD9QPHJldj4uKikpPyIpCisgICAgICAgIG0gPSBnaXRfcmVnZXgubWF0Y2gocHYpCisKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHB2ID0gbS5ncm91cCgndmVyJykKKyAgICAgICAgICAgIHBmeCA9IG0uZ3JvdXAoJ3BmeCcpCisgICAgICAgICAgICBzZnggPSBtLmdyb3VwKCdzZngnKQorICAgIGVsc2U6CisgICAgICAgIHJlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPHBmeD4odnxyKT8pKD9QPHZlcj4uKikiKQorICAgICAgICBtID0gcmVnZXgubWF0Y2gocHYpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwdiA9IG0uZ3JvdXAoJ3ZlcicpCisgICAgICAgICAgICBwZnggPSBtLmdyb3VwKCdwZngnKQorCisgICAgcmV0dXJuIChwdiwgcGZ4LCBzZngpCisKK2RlZiBnZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24ocmQpOgorICAgICIiIgorICAgICAgICBHZXQgdXBzdHJlYW0gdmVyc2lvbiBvZiByZWNpcGUgdXNpbmcgYmIuZmV0Y2gyIG1ldGhvZHMgd2l0aCBzdXBwb3J0IGZvcgorICAgICAgICBodHRwLCBodHRwcywgZnRwIGFuZCBnaXQuCisKKyAgICAgICAgYmIuZmV0Y2gyIGV4Y2VwdGlvbnMgY2FuIGJlIHJhaXNlZCwKKyAgICAgICAgICAgIEZldGNoRXJyb3Igd2hlbiBkb24ndCBoYXZlIG5ldHdvcmsgYWNjZXNzIG9yIHVwc3RyZWFtIHNpdGUgZG9uJ3QgcmVzcG9uc2UuCisgICAgICAgICAgICBOb01ldGhvZEVycm9yIHdoZW4gdXJpIGxhdGVzdF92ZXJzaW9uc3RyaW5nIG1ldGhvZCBpc24ndCBpbXBsZW1lbnRlZC4KKworICAgICAgICBSZXR1cm5zIGEgZGljdG9uYXJ5IHdpdGggdmVyc2lvbiwgdHlwZSBhbmQgZGF0ZXRpbWUuCisgICAgICAgIFR5cGUgY2FuIGJlIEEgZm9yIEF1dG9tYXRpYywgTSBmb3IgTWFudWFsIGFuZCBVIGZvciBVbmtub3duLgorICAgICIiIgorICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBkZWNvZGV1cmwKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorCisgICAgcnUgPSB7fQorICAgIHJ1Wyd2ZXJzaW9uJ10gPSAnJworICAgIHJ1Wyd0eXBlJ10gPSAnVScKKyAgICBydVsnZGF0ZXRpbWUnXSA9ICcnCisKKyAgICAjIFhYWDogSWYgZG9uJ3QgaGF2ZSBTUkNfVVJJIG1lYW5zIHRoYXQgZG9uJ3QgaGF2ZSB1cHN0cmVhbSBzb3VyY2VzIHNvCisgICAgIyByZXR1cm5zIDEuMC4KKyAgICBzcmNfdXJpcyA9IHJkLmdldFZhcignU1JDX1VSSScsIFRydWUpCisgICAgaWYgbm90IHNyY191cmlzOgorICAgICAgICBydVsndmVyc2lvbiddID0gJzEuMCcKKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdNJworICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHJldHVybiBydQorCisgICAgIyBYWFg6IHdlIHN1cHBvc2UgdGhhdCB0aGUgZmlyc3QgZW50cnkgcG9pbnRzIHRvIHRoZSB1cHN0cmVhbSBzb3VyY2VzCisgICAgc3JjX3VyaSA9IHNyY191cmlzLnNwbGl0KClbMF0KKyAgICB1cmlfdHlwZSwgXywgXywgXywgXywgXyA9ICBkZWNvZGV1cmwoc3JjX3VyaSkKKworICAgIHB2ID0gcmQuZ2V0VmFyKCdQVicsIFRydWUpCisKKyAgICBtYW51YWxfdXBzdHJlYW1fdmVyc2lvbiA9IHJkLmdldFZhcigiUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04iLCBUcnVlKQorICAgIGlmIG1hbnVhbF91cHN0cmVhbV92ZXJzaW9uOgorICAgICAgICAjIG1hbnVhbCB0cmFja2luZyBvZiB1cHN0cmVhbSB2ZXJzaW9uLgorICAgICAgICBydVsndmVyc2lvbiddID0gbWFudWFsX3Vwc3RyZWFtX3ZlcnNpb24KKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdNJworCisgICAgICAgIG1hbnVhbF91cHN0cmVhbV9kYXRlID0gcmQuZ2V0VmFyKCJDSEVDS19EQVRFIiwgVHJ1ZSkKKyAgICAgICAgaWYgbWFudWFsX3Vwc3RyZWFtX2RhdGU6CisgICAgICAgICAgICBkYXRlID0gZGF0ZXRpbWUuc3RycHRpbWUobWFudWFsX3Vwc3RyZWFtX2RhdGUsICIlYiAlZCwgJVkiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHJ1WydkYXRldGltZSddID0gZGF0ZQorCisgICAgZWxpZiB1cmlfdHlwZSA9PSAiZmlsZSI6CisgICAgICAgICMgZmlsZXMgYXJlIGFsd2F5cyB1cC10by1kYXRlCisgICAgICAgIHJ1Wyd2ZXJzaW9uJ10gPSAgcHYKKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdBJworICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGV0aW1lLm5vdygpCisgICAgZWxzZToKKyAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKHNyY191cmksIHJkKQorICAgICAgICBwdXB2ZXIgPSB1ZC5tZXRob2QubGF0ZXN0X3ZlcnNpb25zdHJpbmcodWQsIHJkKQorICAgICAgICAodXB2ZXJzaW9uLCByZXZpc2lvbikgPSBwdXB2ZXIKKworICAgICAgICAjIGZvcm1hdCBnaXQgdmVyc2lvbiB2ZXJzaW9uK2dpdEFVVE9JTkMrSEFTSAorICAgICAgICBpZiB1cmlfdHlwZSA9PSAnZ2l0JzoKKyAgICAgICAgICAgIChwdiwgcGZ4LCBzZngpID0gZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2LCB1cmlfdHlwZSkKKworICAgICAgICAgICAgIyBpZiBjb250YWlucyByZXZpc2lvbiBidXQgbm90IHVwdmVyc2lvbiB1c2UgY3VycmVudCBwdgorICAgICAgICAgICAgaWYgdXB2ZXJzaW9uID09ICcnIGFuZCByZXZpc2lvbjoKKyAgICAgICAgICAgICAgICB1cHZlcnNpb24gPSBwdgorCisgICAgICAgICAgICBpZiB1cHZlcnNpb246CisgICAgICAgICAgICAgICAgdG1wID0gdXB2ZXJzaW9uCisgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gJycKKworICAgICAgICAgICAgICAgIGlmIHBmeDoKKyAgICAgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gcGZ4ICsgdG1wCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gdG1wCisKKyAgICAgICAgICAgICAgICBpZiBzZng6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHVwdmVyc2lvbiArIHNmeCArIHJldmlzaW9uWzoxMF0KKworICAgICAgICBpZiB1cHZlcnNpb246CisgICAgICAgICAgICBydVsndmVyc2lvbiddID0gdXB2ZXJzaW9uCisgICAgICAgICAgICBydVsndHlwZSddID0gJ0EnCisKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorCisgICAgcmV0dXJuIHJ1CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Jvb3Rmcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvcm9vdGZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTNmY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Jvb3Rmcy5weQpAQCAtMCwwICsxLDk4NCBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCAqCitmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCAqCitpbXBvcnQgb2UucGF0aAoraW1wb3J0IGZpbGVjbXAKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCByZQorCisKK2NsYXNzIFJvb3RmcyhvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIERvIG5vdCBpbnN0YW50aWF0ZSB0aGlzIGRpcmVjdGx5LgorICAgICIiIgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wbSA9IE5vbmUKKyAgICAgICAgc2VsZi5pbWFnZV9yb290ZnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKworICAgICAgICBzZWxmLmluc3RhbGxfb3JkZXIgPSBNYW5pZmVzdC5JTlNUQUxMX09SREVSCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfbG9nX2NoZWNrKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2xvZ19jaGVja193YXJuKHNlbGYpOgorICAgICAgICByID0gcmUuY29tcGlsZSgnXih3YXJufFdhcm58Tk9URTogd2FybnxOT1RFOiBXYXJufFdBUk5JTkc6KScpCisgICAgICAgIGxvZ19wYXRoID0gc2VsZi5kLmV4cGFuZCgiJHtUfS9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgd2l0aCBvcGVuKGxvZ19wYXRoLCAncicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxvZzoKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lIG9yICdOT1RFOicgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCBhIHdhcm5pbmcgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZSAoa2V5d29yZCBcJyVzXCcpOlxuW2xvZ19jaGVja10gJXMnCisJCQkJICAgICUgKHNlbGYuZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG0uZ3JvdXAoKSwgbGluZSkpCisKKyAgICBkZWYgX2xvZ19jaGVja19lcnJvcihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoc2VsZi5sb2dfY2hlY2tfcmVnZXgpCisgICAgICAgIGxvZ19wYXRoID0gc2VsZi5kLmV4cGFuZCgiJHtUfS9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgd2l0aCBvcGVuKGxvZ19wYXRoLCAncicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMAorICAgICAgICAgICAgbWVzc2FnZSA9ICJcbiIKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxvZzoKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbSA9IHIuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBsb2dmaWxlIChrZXl3b3JkIFwnJXNcJyk6XG5bbG9nX2NoZWNrXSAlcycKKwkJCQkgICAgJSAoc2VsZi5kLmdldFZhcignUE4nLCBUcnVlKSwgbS5ncm91cCgpLCBsaW5lKSkKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID49IDEgYW5kIGZvdW5kX2Vycm9yIDw9IDU6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gbGluZSArICdcbicKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgKz0gMQorCisgICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPT0gNjoKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwobWVzc2FnZSkKKworICAgIGRlZiBfaW5zZXJ0X2ZlZWRfdXJpcyhzZWxmKToKKyAgICAgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBzZWxmLnBtLmluc2VydF9mZWVkc191cmlzKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfaGFuZGxlX2ludGVyY2VwdF9mYWlsdXJlKHNlbGYsIGZhaWxlZF9zY3JpcHQpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGUgX2NsZWFudXAoKSBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgdG8gY2xlYW4tdXAgc3R1ZmYgdGhhdCB3ZSBkb24ndCByZWFsbHkKKyAgICB3YW50IHRvIGVuZCB1cCBvbiB0YXJnZXQuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBSUE0sIHRoZSBEQiBsb2Nrcy4KKyAgICBUaGUgbWV0aG9kIGlzIGNhbGxlZCwgb25jZSwgYXQgdGhlIGVuZCBvZiBjcmVhdGUoKSBtZXRob2QuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3NldHVwX2RiZ19yb290ZnMoc2VsZiwgZGlycyk6CisgICAgICAgIGdlbl9kZWJ1Z2ZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfR0VOX0RFQlVHRlMnLCBUcnVlKSBvciAnMCcKKyAgICAgICAgaWYgZ2VuX2RlYnVnZnMgIT0gJzEnOgorICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYi5ub3RlKCIgIFJlbmFtaW5nIHRoZSBvcmlnaW5hbCByb290ZnMuLi4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMsIHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJykKKworICAgICAgICBiYi5ub3RlKCIgIENyZWF0aW5nIGRlYnVnIHJvb3Rmcy4uLiIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcykKKworICAgICAgICBiYi5ub3RlKCIgIENvcHlpbmcgYmFjayBwYWNrYWdlIGRhdGFiYXNlLi4uIikKKyAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzICsgb3MucGF0aC5kaXJuYW1lKGRpcikpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnICsgZGlyLCBzZWxmLmltYWdlX3Jvb3RmcyArIGRpcikKKworICAgICAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgICAgICMgQ29weSBmaWxlcyBsb2NhdGVkIGluIC91c3IvbGliL2RlYnVnIG9yIC91c3Ivc3JjL2RlYnVnCisgICAgICAgIGZvciBkaXIgaW4gWyIvdXNyL2xpYi9kZWJ1ZyIsICIvdXNyL3NyYy9kZWJ1ZyJdOgorICAgICAgICAgICAgc3JjID0gc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnICsgZGlyCisgICAgICAgICAgICBpZiBjcGF0aC5leGlzdHMoc3JjKToKKyAgICAgICAgICAgICAgICBkc3QgPSBzZWxmLmltYWdlX3Jvb3RmcyArIGRpcgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZHN0KSkKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjLCBkc3QpCisKKyAgICAgICAgIyBDb3B5IGZpbGVzIHdpdGggc3VmZml4ICcuZGVidWcnIG9yIGxvY2F0ZWQgaW4gJy5kZWJ1ZycgZGlyLgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpOgorICAgICAgICAgICAgcmVsYXRpdmVfZGlyID0gcm9vdFtsZW4oc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnKTpdCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuZGVidWcnKSBvciAnLy5kZWJ1ZycgaW4gcmVsYXRpdmVfZGlyOgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMgKyByZWxhdGl2ZV9kaXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KG9zLnBhdGguam9pbihyb290LCBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9yb290ZnMgKyByZWxhdGl2ZV9kaXIpCisKKyAgICAgICAgYmIubm90ZSgiICBJbnN0YWxsIGNvbXBsZW1lbnRhcnkgJyotZGJnJyBwYWNrYWdlcy4uLiIpCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCcqLWRiZycpCisKKyAgICAgICAgYmIubm90ZSgiICBSZW5hbWUgZGVidWcgcm9vdGZzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmltYWdlX3Jvb3RmcyArICctZGJnJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMsIHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1kYmcnKQorCisgICAgICAgIGJiLm5vdGUoIiAgUmVzdG9yZWluZyBvcmlnaW5hbCByb290ZnMuLi4iKQorICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnLCBzZWxmLmltYWdlX3Jvb3RmcykKKworICAgIGRlZiBfZXhlY19zaGVsbF9jbWQoc2VsZiwgY21kKToKKyAgICAgICAgZmFrZXJvb3RjbWQgPSBzZWxmLmQuZ2V0VmFyKCdGQUtFUk9PVCcsIFRydWUpCisgICAgICAgIGlmIGZha2Vyb290Y21kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZXhlY19jbWQgPSBbZmFrZXJvb3RjbWQsIGNtZF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZWNfY21kID0gY21kCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoZXhlY19jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICByZXR1cm4oIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIiMjIyMjIyBHZW5lcmF0ZSByb290ZnMgIyMjIyMjIyIpCisgICAgICAgIHByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUFJFUFJPQ0VTU19DT01NQU5EIiwgVHJ1ZSkKKyAgICAgICAgcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCIsIFRydWUpCisKKyAgICAgICAgcG9zdGluc3RfaW50ZXJjZXB0c19kaXIgPSBzZWxmLmQuZ2V0VmFyKCJQT1NUSU5TVF9JTlRFUkNFUFRTX0RJUiIsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdF9pbnRlcmNlcHRzX2RpcjoKKyAgICAgICAgICAgIHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzIikKKyAgICAgICAgaW50ZXJjZXB0c19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJjZXB0X3NjcmlwdHMiKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShpbnRlcmNlcHRzX2RpciwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUocG9zdGluc3RfaW50ZXJjZXB0c19kaXIsIGludGVyY2VwdHNfZGlyKQorCisgICAgICAgIHNodXRpbC5jb3B5KHNlbGYuZC5leHBhbmQoIiR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQiKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlICsKKyAgICAgICAgICAgICAgICAgICAgIi9SRUFETUVfLV9ET19OT1RfREVMRVRFX0ZJTEVTX0lOX1RISVNfRElSRUNUT1JZLnR4dCIpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICAjIGNhbGwgdGhlIHBhY2thZ2UgbWFuYWdlciBkZXBlbmRlbnQgY3JlYXRlIG1ldGhvZAorICAgICAgICBzZWxmLl9jcmVhdGUoKQorCisgICAgICAgIHN5c2NvbmZkaXIgPSBzZWxmLmltYWdlX3Jvb3RmcyArIHNlbGYuZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3lzY29uZmRpcikKKyAgICAgICAgd2l0aCBvcGVuKHN5c2NvbmZkaXIgKyAiL3ZlcnNpb24iLCAidysiKSBhcyB2ZXI6CisgICAgICAgICAgICB2ZXIud3JpdGUoc2VsZi5kLmdldFZhcignQlVJTEROQU1FJywgVHJ1ZSkgKyAiXG4iKQorCisgICAgICAgIHNlbGYuX3J1bl9pbnRlcmNlcHRzKCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBwb3N0X3Byb2Nlc3NfY21kcykKKworICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBkZWxheWVkX3Bvc3RpbnN0cyA9IHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0cygpCisgICAgICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgY29uZmlndXJlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9mZmxpbmUgYW5kIHJvb3RmcyBpcyByZWFkLW9ubHk6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMpCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignVVNFX0RFVkZTJywgVHJ1ZSkgIT0gIjEiOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2RldmZzKCkKKworICAgICAgICBzZWxmLl91bmluc3RhbGxfdW5uZWVkZWQoKQorCisgICAgICAgIHNlbGYuX2luc2VydF9mZWVkX3VyaXMoKQorCisgICAgICAgIHNlbGYuX3J1bl9sZGNvbmZpZygpCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignVVNFX0RFUE1PRCcsIFRydWUpICE9ICIwIjoKKyAgICAgICAgICAgIHNlbGYuX2dlbmVyYXRlX2tlcm5lbF9tb2R1bGVfZGVwcygpCisKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisgICAgICAgIHNlbGYuX2xvZ19jaGVjaygpCisKKyAgICBkZWYgX3VuaW5zdGFsbF91bm5lZWRlZChzZWxmKToKKyAgICAgICAgIyBSZW1vdmUgdW5uZWVkZWQgaW5pdCBzY3JpcHQgc3ltbGlua3MKKyAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMgPSBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKQorICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBOb25lOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9pbml0LmQvcnVuLXBvc3RpbnN0cyIpKToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbInVwZGF0ZS1yYy5kIiwgIi1mIiwgIi1yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydW4tcG9zdGluc3RzIiwgInJlbW92ZSJdKQorCisgICAgICAgIHJ1bnRpbWVfcGtnbWFuYWdlID0gYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgc3lzdmNvbXBhdF9pbl9kaXN0cm8gPSBiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgWyAic3lzdGVtZCIsICJzeXN2aW5pdCIgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBGYWxzZSwgc2VsZi5kKQorICAgICAgICBpbWFnZV9yb3JmcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJyZWFkLW9ubHktcm9vdGZzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBGYWxzZSwgc2VsZi5kKQorICAgICAgICBpZiBzeXN2Y29tcGF0X2luX2Rpc3RybyBhbmQgbm90IGltYWdlX3JvcmZzOgorICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gInVwZGF0ZS1yYy5kIgorICAgICAgICBpZiBub3QgcnVudGltZV9wa2dtYW5hZ2U6CisgICAgICAgICAgICAjIFJlbW92ZSBjb21wb25lbnRzIHRoYXQgd2UgZG9uJ3QgbmVlZCBpZiB3ZSdyZSBub3QgZ29pbmcgdG8gaW5zdGFsbAorICAgICAgICAgICAgIyBhZGRpdGlvbmFsIHBhY2thZ2VzIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgIGlmIGRlbGF5ZWRfcG9zdGluc3RzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZGlyID0gc2VsZi5kLmV4cGFuZCgnJHtXT1JLRElSfS9pbnN0YWxsZWRfcGtncy50eHQnKQorICAgICAgICAgICAgICAgIHBrZ3NfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGluc3RhbGxlZF9wa2dzX2RpciwgInIrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NfaW5zdGFsbGVkID0gaW5zdGFsbGVkX3BrZ3MucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnX2luc3RhbGxlZCBpbiBwa2dzX2luc3RhbGxlZFs6XToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IHBrZ19pbnN0YWxsZWQuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIGluIFsidXBkYXRlLXJjLmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZS1wYXNzd2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhZG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZS1hbHRlcm5hdGl2ZXMiLCBwa2dfdG9fcmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJST09URlNfQk9PVFNUUkFQX0lOU1RBTEwiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnc19pbnN0YWxsZWQucmVtb3ZlKHBrZ19pbnN0YWxsZWQpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGtnc190b19yZW1vdmUpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnc190b19yZW1vdmUsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAjIFVwZGF0ZSBpbnN0YWxsZWRfcGtncy50eHQKKyAgICAgICAgICAgICAgICAgICAgb3BlbihpbnN0YWxsZWRfcGtnc19kaXIsICJ3KyIpLndyaXRlKCdcbicuam9pbihwa2dzX2luc3RhbGxlZCkpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2F2ZV9wb3N0aW5zdHMoKQorCisgICAgICAgIHBvc3RfdW5pbnN0YWxsX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EIiwgVHJ1ZSkKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF91bmluc3RhbGxfY21kcykKKworICAgICAgICBpZiBub3QgcnVudGltZV9wa2dtYW5hZ2U6CisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgcGFja2FnZSBtYW5hZ2VyIGRhdGEgZmlsZXMKKyAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgIGRlZiBfcnVuX2ludGVyY2VwdHMoc2VsZik6CisgICAgICAgIGludGVyY2VwdHNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKworICAgICAgICBiYi5ub3RlKCJSdW5uaW5nIGludGVyY2VwdCBzY3JpcHRzOiIpCisgICAgICAgIG9zLmVudmlyb25bJ0QnXSA9IHNlbGYuaW1hZ2Vfcm9vdGZzCisgICAgICAgIGZvciBzY3JpcHQgaW4gb3MubGlzdGRpcihpbnRlcmNlcHRzX2Rpcik6CisgICAgICAgICAgICBzY3JpcHRfZnVsbCA9IG9zLnBhdGguam9pbihpbnRlcmNlcHRzX2Rpciwgc2NyaXB0KQorCisgICAgICAgICAgICBpZiBzY3JpcHQgPT0gInBvc3RpbnN0X2ludGVyY2VwdCIgb3Igbm90IG9zLmFjY2VzcyhzY3JpcHRfZnVsbCwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYmIubm90ZSgiPiBFeGVjdXRpbmcgJXMgaW50ZXJjZXB0IC4uLiIgJSBzY3JpcHQpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoc2NyaXB0X2Z1bGwpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCJUaGUgcG9zdGluc3RhbGwgaW50ZXJjZXB0IGhvb2sgJyVzJyBmYWlsZWQgKGV4aXQgY29kZTogJWQpISBTZWUgbG9nIGZvciBkZXRhaWxzISIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHNjcmlwdCwgZS5yZXR1cm5jb2RlKSkKKworICAgICAgICAgICAgICAgIHdpdGggb3BlbihzY3JpcHRfZnVsbCkgYXMgaW50ZXJjZXB0OgorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkX3BrZ3MgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGludGVyY2VwdC5yZWFkKCkuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl4jI1BLR1M6KC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRfcGtncyA9IG0uZ3JvdXAoMSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVnaXN0ZXJlZF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVGhlIHBvc3RpbnN0YWxscyBmb3IgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWxsIGJlIHBvc3Rwb25lZCBmb3IgZmlyc3QgYm9vdDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZF9wa2dzKQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgdGhlIGJhY2tlbmQgZGVwZW5kZW50IGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShyZWdpc3RlcmVkX3BrZ3MpCisKKyAgICBkZWYgX3J1bl9sZGNvbmZpZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignTERDT05GSUdERVBFTkQnLCBUcnVlKToKKyAgICAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZzogbGRjb25maWcgLXIiICsgc2VsZi5pbWFnZV9yb290ZnMgKyAiLWMgbmV3IC12IikKKyAgICAgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsnbGRjb25maWcnLCAnLXInLCBzZWxmLmltYWdlX3Jvb3RmcywgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3JywgJy12J10pCisKKyAgICBkZWYgX2NoZWNrX2Zvcl9rZXJuZWxfbW9kdWxlcyhzZWxmLCBtb2R1bGVzX2Rpcik6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG1vZHVsZXNfZGlyLCB0b3Bkb3duPVRydWUpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZm91bmRfa28gPSBuYW1lLmVuZHN3aXRoKCIua28iKQorICAgICAgICAgICAgICAgIGlmIGZvdW5kX2tvOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRfa28KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2dlbmVyYXRlX2tlcm5lbF9tb2R1bGVfZGVwcyhzZWxmKToKKyAgICAgICAgbW9kdWxlc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsICdsaWInLCAnbW9kdWxlcycpCisgICAgICAgICMgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9kdWxlcyBkb24ndCBib3RoZXIgdG8gZG8gdGhlIGRlcG1vZAorICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfZm9yX2tlcm5lbF9tb2R1bGVzKG1vZHVsZXNfZGlyKToKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vIEtlcm5lbCBNb2R1bGVzIGZvdW5kLCBub3QgcnVubmluZyBkZXBtb2QiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga2VybmVsX2FiaV92ZXJfZmlsZSA9IG9lLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLCAia2VybmVsLWRlcG1vZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlcm5lbC1hYml2ZXJzaW9uJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGtlcm5lbF9hYmlfdmVyX2ZpbGUpOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGtlcm5lbC1hYml2ZXJzaW9uIGZpbGUgZm91bmQgKCVzKSwgY2Fubm90IHJ1biBkZXBtb2QsIGFib3J0aW5nIiAlIGtlcm5lbF9hYmlfdmVyX2ZpbGUpCisKKyAgICAgICAga2VybmVsX3ZlciA9IG9wZW4oa2VybmVsX2FiaV92ZXJfZmlsZSkucmVhZCgpLnN0cmlwKCcgXG4nKQorICAgICAgICB2ZXJzaW9uZWRfbW9kdWxlc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsIG1vZHVsZXNfZGlyLCBrZXJuZWxfdmVyKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih2ZXJzaW9uZWRfbW9kdWxlc19kaXIpCisKKyAgICAgICAgc2VsZi5fZXhlY19zaGVsbF9jbWQoWydkZXBtb2R3cmFwcGVyJywgJy1hJywgJy1iJywgc2VsZi5pbWFnZV9yb290ZnMsIGtlcm5lbF92ZXJdKQorCisgICAgIiIiCisgICAgQ3JlYXRlIGRldmZzOgorICAgICogSU1BR0VfREVWSUNFX1RBQkxFIGlzIHRoZSBvbGQgbmFtZSB0byBhbiBhYnNvbHV0ZSBwYXRoIHRvIGEgZGV2aWNlIHRhYmxlIGZpbGUKKyAgICAqIElNQUdFX0RFVklDRV9UQUJMRVMgaXMgYSBuZXcgbmFtZSBmb3IgYSBmaWxlLCBvciBsaXN0IG9mIGZpbGVzLCBzZWFjaGVkCisgICAgICBmb3IgaW4gdGhlIEJCUEFUSAorICAgIElmIG5laXRoZXIgYXJlIHNwZWNpZmllZCB0aGVuIHRoZSBkZWZhdWx0IG5hbWUgb2YgZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0CisgICAgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBCQlBBVEggKHNhbWUgYXMgdGhlIG9sZCB2ZXJzaW9uLikKKyAgICAiIiIKKyAgICBkZWYgX2NyZWF0ZV9kZXZmcyhzZWxmKToKKyAgICAgICAgZGV2dGFibGVfbGlzdCA9IFtdCisgICAgICAgIGRldnRhYmxlID0gc2VsZi5kLmdldFZhcignSU1BR0VfREVWSUNFX1RBQkxFJywgVHJ1ZSkKKyAgICAgICAgaWYgZGV2dGFibGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZXZ0YWJsZV9saXN0LmFwcGVuZChkZXZ0YWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRldnRhYmxlcyA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0RFVklDRV9UQUJMRVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgZGV2dGFibGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGV2dGFibGVzID0gJ2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCcKKyAgICAgICAgICAgIGZvciBkZXZ0YWJsZSBpbiBkZXZ0YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBkZXZ0YWJsZV9saXN0LmFwcGVuZCgiJXMiICUgYmIudXRpbHMud2hpY2goc2VsZi5kLmdldFZhcignQkJQQVRIJywgVHJ1ZSksIGRldnRhYmxlKSkKKworICAgICAgICBmb3IgZGV2dGFibGUgaW4gZGV2dGFibGVfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsibWFrZWRldnMiLCAiLXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLCAiLUQiLCBkZXZ0YWJsZV0pCisKKworY2xhc3MgUnBtUm9vdGZzKFJvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKFJwbVJvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5sb2dfY2hlY2tfcmVnZXggPSAnKHVucGFja2luZyBvZiBhcmNoaXZlIGZhaWxlZHxDYW5ub3QgZmluZCBwYWNrYWdlJ1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfGV4aXQgMXxFUlJPUjogfEVycm9yOiB8RXJyb3IgfEVSUk9SICdcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3xGYWlsZWQgfEZhaWxlZDogfEZhaWxlZCR8RmFpbGVkXChcZCtcKTopJworICAgICAgICBzZWxmLm1hbmlmZXN0ID0gUnBtTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYucG0gPSBScG1QTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignVEFSR0VUX1ZFTkRPUicsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9IHNlbGYuZC5nZXRWYXIoJ0lOQ19SUE1fSU1BR0VfR0VOJywgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiAhPSAiMSI6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBtLnJlY292ZXJ5X3BhY2thZ2luZ19kYXRhKCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1RFTVBfUk9PVEZTJywgVHJ1ZSksIFRydWUpCisKKyAgICAgICAgc2VsZi5wbS5jcmVhdGVfY29uZmlncygpCisKKyAgICAnJycKKyAgICBXaGlsZSBycG0gaW5jcmVtZW50YWwgaW1hZ2UgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLCBpdCB3aWxsIHJlbW92ZSB0aGUKKyAgICB1bm5lZWRlZCBwa2dzIGJ5IGNvbXBhcmluZyB0aGUgbmV3IGluc3RhbGwgc29sdXRpb24gbWFuaWZlc3QgYW5kIHRoZQorICAgIG9sZCBpbnN0YWxsZWQgbWFuaWZlc3QuCisgICAgJycnCisgICAgZGVmIF9jcmVhdGVfaW5jcmVtZW50YWwoc2VsZiwgcGtnc19pbml0aWFsX2luc3RhbGwpOgorICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKworICAgICAgICAgICAgcGtnc190b19pbnN0YWxsID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc19pbml0aWFsX2luc3RhbGw6CisgICAgICAgICAgICAgICAgcGtnc190b19pbnN0YWxsICs9IHBrZ3NfaW5pdGlhbF9pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgICAgICBpbnN0YWxsZWRfbWFuaWZlc3QgPSBzZWxmLnBtLmxvYWRfb2xkX2luc3RhbGxfc29sdXRpb24oKQorICAgICAgICAgICAgc29sdXRpb25fbWFuaWZlc3QgPSBzZWxmLnBtLmR1bXBfaW5zdGFsbF9zb2x1dGlvbihwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgICAgIHBrZ190b19yZW1vdmUgPSBsaXN0KCkKKyAgICAgICAgICAgIGZvciBwa2cgaW4gaW5zdGFsbGVkX21hbmlmZXN0OgorICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gc29sdXRpb25fbWFuaWZlc3Q6CisgICAgICAgICAgICAgICAgICAgIHBrZ190b19yZW1vdmUuYXBwZW5kKHBrZykKKworICAgICAgICAgICAgc2VsZi5wbS51cGRhdGUoKQorCisgICAgICAgICAgICBiYi5ub3RlKCdpbmNyZW1lbnRhbCB1cGRhdGUgLS0gdXBncmFkZSBwYWNrYWdlcyBpbiBwbGFjZSAnKQorICAgICAgICAgICAgc2VsZi5wbS51cGdyYWRlKCkKKyAgICAgICAgICAgIGlmIHBrZ190b19yZW1vdmUgIT0gW106CisgICAgICAgICAgICAgICAgYmIubm90ZSgnaW5jcmVtZW50YWwgcmVtb3ZlZDogJXMnICUgJyAnLmpvaW4ocGtnX3RvX3JlbW92ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnX3RvX3JlbW92ZSkKKworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBycG1fcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgcnBtX3Bvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKworICAgICAgICAjIHVwZGF0ZSBQTSBpbmRleCBmaWxlcworICAgICAgICBzZWxmLnBtLndyaXRlX2luZGV4KCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBycG1fcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLmR1bXBfYWxsX2F2YWlsYWJsZV9wa2dzKCkKKworICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9pbmNyZW1lbnRhbChwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgc2VsZi5wbS51cGRhdGUoKQorCisgICAgICAgIHBrZ3MgPSBbXQorICAgICAgICBwa2dzX2F0dGVtcHQgPSBbXQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgPT0gTWFuaWZlc3QuUEtHX1RZUEVfQVRURU1QVF9PTkxZOgorICAgICAgICAgICAgICAgIHBrZ3NfYXR0ZW1wdCArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvZXRjL3JwbScsICcvdmFyL2xpYi9ycG0nLCAnL3Zhci9saWIvc21hcnQnXSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBycG1fcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrKCkKKworICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0uYmFja3VwX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBzZWxmLnBtLnJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RlcGVuZHNfbGlzdCgpOgorICAgICAgICByZXR1cm4gWydERVBMT1lfRElSX1JQTScsICdJTkNfUlBNX0lNQUdFX0dFTicsICdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsCisgICAgICAgICAgICAgICAgJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsICdSUE1fUFJFRkVSX0VMRl9BUkNIJ10KKworICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMiKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBvc3RpbnN0X2Rpcik6CisgICAgICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIocG9zdGluc3RfZGlyKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgnRGVsYXllZCBwYWNrYWdlIHNjcmlwdGxldDogJXMnICUgZikKKyAgICAgICAgICAgIHJldHVybiBmaWxlcworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICAjIHRoaXMgaXMganVzdCBhIHN0dWIuIEZvciBSUE0sIHRoZSBmYWlsZWQgcG9zdGluc3RhbGxzIGFyZQorICAgICAgICAjIGFscmVhZHkgc2F2ZWQgaW4gL2V0Yy9ycG0tcG9zdGluc3RzCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbG9nX2NoZWNrX2Vycm9yKHNlbGYpOgorICAgICAgICByID0gcmUuY29tcGlsZSgnKHVucGFja2luZyBvZiBhcmNoaXZlIGZhaWxlZHxDYW5ub3QgZmluZCBwYWNrYWdlfGV4aXQgMXxFUlJ8RmFpbCknKQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3VuZF9lcnJvciA9IDAKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiXG4iCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2cucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGlmICdsb2dfY2hlY2snIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBzaCAteCBtYXkgZW1pdCBjb2RlIHdoaWNoIGlzbid0IGFjdHVhbGx5IGV4ZWN1dGVkCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrJyk6CisJCSAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbSA9IHIuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ2xvZ19jaGVjazogVGhlcmUgd2VyZSBlcnJvciBtZXNzYWdlcyBpbiB0aGUgbG9nZmlsZScpCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ2xvZ19jaGVjazogTWF0Y2hlZCBrZXl3b3JkOiBbJXNdXG5cbicgJSBtLmdyb3VwKCkpCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA+PSAxIGFuZCBmb3VuZF9lcnJvciA8PSA1OgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGxpbmUgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yICs9IDEKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID09IDY6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgcnBtX3Bvc3RpbnN0c19kaXIgPSBzZWxmLmltYWdlX3Jvb3RmcyArIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcnBtLXBvc3RpbnN0cy8nKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocnBtX3Bvc3RpbnN0c19kaXIpCisKKyAgICAgICAgIyBTYXZlIHRoZSBwYWNrYWdlIHBvc3RpbnN0YWxscyBpbiAvZXRjL3JwbS1wb3N0aW5zdHMKKyAgICAgICAgZm9yIHBrZyBpbiByZWdpc3RlcmVkX3BrZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYucG0uc2F2ZV9ycG1wb3N0aW5zdChwa2cpCisKKyAgICBkZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAgICMgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgcG9zdHByb2Nlc3MgY29tbWFuZHMsIHJwbSBpcyBjYWxsZWQgc2V2ZXJhbAorICAgICAgICAjIHRpbWVzIHRvIGdldCB0aGUgZmlsZXMgaW5zdGFsbGVkLCBkZXBlbmRlbmNpZXMsIGV0Yy4gVGhpcyBjcmVhdGVzIHRoZQorICAgICAgICAjIF9fZGIuMDAqIChCZXJrZWxleSBEQiBmaWxlcyB0aGF0IGhvbGQgbG9ja3MsIHJwbSBzcGVjaWZpYyBlbnZpcm9ubWVudAorICAgICAgICAjIHNldHRpbmdzLCBldGMuKSwgdGhhdCBzaG91bGQgbm90IGdldCBpbnRvIHRoZSBmaW5hbCByb290ZnMKKyAgICAgICAgc2VsZi5wbS51bmxvY2tfcnBtX2RiKCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGggKyAiL3RtcCIpIGFuZCBub3Qgb3MubGlzdGRpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGggKyAiL3RtcCIpOgorICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiLCBUcnVlKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCkgYW5kIG5vdCBvcy5saXN0ZGlyKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCk6CisgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgsIFRydWUpCisKK2NsYXNzIERwa2dPcGtnUm9vdGZzKFJvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihEcGtnT3BrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKworICAgIGRlZiBfZ2V0X3BrZ3NfcG9zdGluc3RzKHNlbGYsIHN0YXR1c19maWxlKToKKyAgICAgICAgZGVmIF9nZXRfcGtnX2RlcGVuZHNfbGlzdChwa2dfZGVwZW5kcyk6CisgICAgICAgICAgICBwa2dfZGVwZW5kc19saXN0ID0gW10KKyAgICAgICAgICAgICMgZmlsdGVyIHZlcnNpb24gcmVxdWlyZW1lbnRzIGxpa2UgbGliYyAoPj0gMS4xKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBwa2dfZGVwZW5kcy5zcGxpdCgnLCAnKToKKyAgICAgICAgICAgICAgICBtX2RlcCA9IHJlLm1hdGNoKCJeKC4qKSBcKC4qXCkkIiwgZGVwKQorICAgICAgICAgICAgICAgIGlmIG1fZGVwOgorICAgICAgICAgICAgICAgICAgICBkZXAgPSBtX2RlcC5ncm91cCgxKQorICAgICAgICAgICAgICAgIHBrZ19kZXBlbmRzX2xpc3QuYXBwZW5kKGRlcCkKKworICAgICAgICAgICAgcmV0dXJuIHBrZ19kZXBlbmRzX2xpc3QKKworICAgICAgICBwa2dzID0ge30KKyAgICAgICAgcGtnX25hbWUgPSAiIgorICAgICAgICBwa2dfc3RhdHVzX21hdGNoID0gRmFsc2UKKyAgICAgICAgcGtnX2RlcGVuZHMgPSAiIgorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSkgYXMgc3RhdHVzOgorICAgICAgICAgICAgZGF0YSA9IHN0YXR1cy5yZWFkKCkKKyAgICAgICAgICAgIHN0YXR1cy5jbG9zZSgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBkYXRhLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIG1fcGtnID0gcmUubWF0Y2goIl5QYWNrYWdlOiAoLiopIiwgbGluZSkKKyAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IHJlLm1hdGNoKCJeU3RhdHVzOi4qdW5wYWNrZWQiLCBsaW5lKQorICAgICAgICAgICAgICAgIG1fZGVwZW5kcyA9IHJlLm1hdGNoKCJeRGVwZW5kczogKC4qKSIsIGxpbmUpCisKKyAgICAgICAgICAgICAgICBpZiBtX3BrZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnX25hbWUgYW5kIHBrZ19zdGF0dXNfbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ19uYW1lXSA9IF9nZXRfcGtnX2RlcGVuZHNfbGlzdChwa2dfZGVwZW5kcykKKworICAgICAgICAgICAgICAgICAgICBwa2dfbmFtZSA9IG1fcGtnLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHBrZ19zdGF0dXNfbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBwa2dfZGVwZW5kcyA9ICIiCisgICAgICAgICAgICAgICAgZWxpZiBtX3N0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3N0YXR1c19tYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIG1fZGVwZW5kcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX2RlcGVuZHMgPSBtX2RlcGVuZHMuZ3JvdXAoMSkKKworICAgICAgICAjIHJlbW92ZSBwYWNrYWdlIGRlcGVuZGVuY2llcyBub3QgaW4gcG9zdGluc3RzCisgICAgICAgIHBrZ19uYW1lcyA9IHBrZ3Mua2V5cygpCisgICAgICAgIGZvciBwa2dfbmFtZSBpbiBwa2dfbmFtZXM6CisgICAgICAgICAgICBkZXBzID0gcGtnc1twa2dfbmFtZV1bOl0KKworICAgICAgICAgICAgZm9yIGQgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkIG5vdCBpbiBwa2dfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX25hbWVdLnJlbW92ZShkKQorCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0c19jb21tb24oc2VsZiwgc3RhdHVzX2ZpbGUpOgorICAgICAgICBkZWYgX2RlcF9yZXNvbHZlKGdyYXBoLCBub2RlLCByZXNvbHZlZCwgc2Vlbik6CisgICAgICAgICAgICBzZWVuLmFwcGVuZChub2RlKQorCisgICAgICAgICAgICBmb3IgZWRnZSBpbiBncmFwaFtub2RlXToKKyAgICAgICAgICAgICAgICBpZiBlZGdlIG5vdCBpbiByZXNvbHZlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZWRnZSBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJQYWNrYWdlcyAlcyBhbmQgJXMgaGF2ZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBwb3N0aW5zdHMgc2NyaXB0cy4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobm9kZSwgZWRnZSkpCisgICAgICAgICAgICAgICAgICAgIF9kZXBfcmVzb2x2ZShncmFwaCwgZWRnZSwgcmVzb2x2ZWQsIHNlZW4pCisKKyAgICAgICAgICAgIHJlc29sdmVkLmFwcGVuZChub2RlKQorCisgICAgICAgIHBrZ19saXN0ID0gW10KKworICAgICAgICBwa2dzID0gc2VsZi5fZ2V0X3BrZ3NfcG9zdGluc3RzKHN0YXR1c19maWxlKQorICAgICAgICBpZiBwa2dzOgorICAgICAgICAgICAgcm9vdCA9ICJfX3BhY2thZ2Vncm91cF9wb3N0aW5zdF9fIgorICAgICAgICAgICAgcGtnc1tyb290XSA9IHBrZ3Mua2V5cygpCisgICAgICAgICAgICBfZGVwX3Jlc29sdmUocGtncywgcm9vdCwgcGtnX2xpc3QsIFtdKQorICAgICAgICAgICAgcGtnX2xpc3QucmVtb3ZlKHJvb3QpCisKKyAgICAgICAgaWYgbGVuKHBrZ19saXN0KSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gcGtnX2xpc3QKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHNfY29tbW9uKHNlbGYsIGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpOgorICAgICAgICBudW0gPSAwCisgICAgICAgIGZvciBwIGluIHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0cygpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdF9wb3N0aW5zdF9kaXIpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmNfcG9zdGluc3RfZGlyLCBwICsgIi5wb3N0aW5zdCIpKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4oc3JjX3Bvc3RpbnN0X2RpciwgcCArICIucG9zdGluc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZHN0X3Bvc3RpbnN0X2RpciwgIiUwM2QtJXMiICUgKG51bSwgcCkpKQorCisgICAgICAgICAgICBudW0gKz0gMQorCitjbGFzcyBEcGtnUm9vdGZzKERwa2dPcGtnUm9vdGZzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKKyAgICAgICAgc3VwZXIoRHBrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5sb2dfY2hlY2tfcmVnZXggPSAnXkU6JworCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmltYWdlX3Jvb3RmcywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1RFTVBfUk9PVEZTJywgVHJ1ZSksIFRydWUpCisgICAgICAgIHNlbGYubWFuaWZlc3QgPSBEcGtnTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorICAgICAgICBzZWxmLnBtID0gRHBrZ1BNKGQsIGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdEUEtHX0FSQ0gnLCBUcnVlKSkKKworCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IHNlbGYubWFuaWZlc3QucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIGRlYl9wcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignREVCX1BSRVBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorICAgICAgICBkZWJfcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdERUJfUE9TVFBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorCisgICAgICAgIGFsdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30vdmFyL2xpYi9kcGtnL2FsdGVybmF0aXZlcyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhbHRfZGlyKQorCisgICAgICAgICMgdXBkYXRlIFBNIGluZGV4IGZpbGVzCisgICAgICAgIHNlbGYucG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIGRlYl9wcmVfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBmb3IgcGtnX3R5cGUgaW4gc2VsZi5pbnN0YWxsX29yZGVyOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRmFsc2UsIFRydWVdW3BrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWV0pCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvdmFyL2xpYi9kcGtnJ10pCisKKyAgICAgICAgc2VsZi5wbS5maXhfYnJva2VuX2RlcGVuZGVuY2llcygpCisKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJpbnN0YWxsZWQiKQorCisgICAgICAgIHNlbGYucG0ucnVuX3ByZV9wb3N0X2luc3RhbGxzKCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBkZWJfcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnREVQTE9ZX0RJUl9ERUInLCAnREVCX1NES19BUkNIJywgJ0FQVENPTkZfVEFSR0VUJywgJ0FQVF9BUkdTJywgJ0RQS0dfQVJDSCcsICdERUJfUFJFUFJPQ0VTU19DT01NQU5EUycsICdERUJfUE9TVFBST0NFU1NfQ09NTUFORFMnXQorCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi5pbWFnZV9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9zdGF0dXMiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHNfY29tbW9uKHN0YXR1c19maWxlKQorCisgICAgZGVmIF9zYXZlX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgZHN0X3Bvc3RpbnN0X2RpciA9IHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGViLXBvc3RpbnN0cyIpCisgICAgICAgIHNyY19wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30vdmFyL2xpYi9kcGtnL2luZm8iKQorICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9wb3N0aW5zdHNfY29tbW9uKGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpCisKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCByZWdpc3RlcmVkX3BrZ3MpOgorICAgICAgICBzZWxmLnBtLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgT3BrZ1Jvb3RmcyhEcGtnT3BrZ1Jvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKE9wa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJyhleGl0IDF8Q29sbGVjdGVkIGVycm9ycyknCisKKyAgICAgICAgc2VsZi5tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBtYW5pZmVzdF9kaXIpCisgICAgICAgIHNlbGYub3BrZ19jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfVEFSR0VUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wa2dfYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIFRydWUpCisKKyAgICAgICAgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPSBzZWxmLmQuZ2V0VmFyKCdJTkNfSVBLX0lNQUdFX0dFTicsIFRydWUpIG9yICIiCisgICAgICAgIGlmIHNlbGYuX3JlbW92ZV9vbGRfcm9vdGZzKCk6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgICAgICBzZWxmLnBtID0gT3BrZ1BNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dfYXJjaHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBtID0gT3BrZ1BNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dfYXJjaHMpCisgICAgICAgICAgICBzZWxmLnBtLnJlY292ZXJfcGFja2FnaW5nX2RhdGEoKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorCisgICAgZGVmIF9wcmVsaW5rX2ZpbGUoc2VsZiwgcm9vdF9kaXIsIGZpbGVuYW1lKToKKyAgICAgICAgYmIubm90ZSgncHJlbGluayAlcyBpbiAlcycgJSAoZmlsZW5hbWUsIHJvb3RfZGlyKSkKKyAgICAgICAgcHJlbGlua19jZmcgPSBvZS5wYXRoLmpvaW4ocm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mJykpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwcmVsaW5rX2NmZyk6CisgICAgICAgICAgICBzaHV0aWwuY29weShzZWxmLmQuZXhwYW5kKCcke1NUQUdJTkdfRElSX05BVElWRX0ke3N5c2NvbmZkaXJfbmF0aXZlfS9wcmVsaW5rLmNvbmYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWxpbmtfY2ZnKQorCisgICAgICAgIGNtZF9wcmVsaW5rID0gc2VsZi5kLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0vcHJlbGluaycpCisgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFtjbWRfcHJlbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXJvb3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFtUicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mJyldKQorCisgICAgJycnCisgICAgQ29tcGFyZSB0d28gZmlsZXMgd2l0aCB0aGUgc2FtZSBrZXkgdHdpY2UgdG8gc2VlIGlmIHRoZXkgYXJlIGVxdWFsLgorICAgIElmIHRoZXkgYXJlIG5vdCBlcXVhbCwgaXQgbWVhbnMgdGhleSBhcmUgZHVwbGljYXRlZCBhbmQgY29tZSBmcm9tCisgICAgZGlmZmVyZW50IHBhY2thZ2VzLgorICAgIDFzdDogQ29tYXByZSB0aGVtIGRpcmVjdGx5OworICAgIDJuZDogV2hpbGUgaW5jcmVtZW50YWwgaW1hZ2UgY3JlYXRpb24gaXMgZW5hYmxlZCwgb25lIG9mIHRoZQorICAgICAgICAgZmlsZXMgY291bGQgYmUgcHJvYmFseSBwcmVsaW5rZWQgaW4gdGhlIHByZXZpb3VzIGltYWdlCisgICAgICAgICBjcmVhdGlvbiBhbmQgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCwgc28gd2UgbmVlZCB0bworICAgICAgICAgcHJlbGluayB0aGUgb3RoZXIgb25lIGFuZCBjb21wYXJlIHRoZW0uCisgICAgJycnCisgICAgZGVmIF9maWxlX2VxdWFsKHNlbGYsIGtleSwgZjEsIGYyKToKKworICAgICAgICAjIEJvdGggb2YgdGhlbSBhcmUgbm90IHByZWxpbmtlZAorICAgICAgICBpZiBmaWxlY21wLmNtcChmMSwgZjIpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiBzZWxmLmltYWdlX3Jvb3RmcyBub3QgaW4gZjE6CisgICAgICAgICAgICBzZWxmLl9wcmVsaW5rX2ZpbGUoZjEucmVwbGFjZShrZXksICcnKSwgZjEpCisKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9yb290ZnMgbm90IGluIGYyOgorICAgICAgICAgICAgc2VsZi5fcHJlbGlua19maWxlKGYyLnJlcGxhY2Uoa2V5LCAnJyksIGYyKQorCisgICAgICAgICMgQm90aCBvZiB0aGVtIGFyZSBwcmVsaW5rZWQKKyAgICAgICAgaWYgZmlsZWNtcC5jbXAoZjEsIGYyKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBOb3QgZXF1YWwKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdhcyByZXVzZWQgZnJvbSB0aGUgb2xkIGltcGxlbWVudGF0aW9uLgorICAgIFNlZSBjb21taXQ6ICJpbWFnZS5iYmNsYXNzOiBBZGRlZCB2YXJpYWJsZXMgZm9yIG11bHRpbGliIHN1cHBvcnQuIiBieQorICAgIExpYW5oYW8gTHUuCisgICAgIiIiCisgICAgZGVmIF9tdWx0aWxpYl9zYW5pdHlfdGVzdChzZWxmLCBkaXJzKToKKworICAgICAgICBhbGxvd19yZXBsYWNlID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJSRV9BTExPV19SRVAiLCBUcnVlKQorICAgICAgICBpZiBhbGxvd19yZXBsYWNlIGlzIE5vbmU6CisgICAgICAgICAgICBhbGxvd19yZXBsYWNlID0gIiIKKworICAgICAgICBhbGxvd19yZXAgPSByZS5jb21waWxlKHJlLnN1YigiXHwkIiwgIiIsIGFsbG93X3JlcGxhY2UpKQorICAgICAgICBlcnJvcl9wcm9tcHQgPSAiTXVsdGlsaWIgY2hlY2sgZXJyb3I6IgorCisgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgZm9yIHJvb3QsIHN1YmZvbGRlcnMsIHN1YmZpbGVzIGluIG9zLndhbGsoZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBzdWJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgICAgICAgICBrZXkgPSBzdHIob3MucGF0aC5qb2luKCIvIiwgb3MucGF0aC5yZWxwYXRoKGl0ZW0sIGRpcikpKQorCisgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2sgd2hldGhlciB0aGUgZmlsZSBpcyBhbGxvdyB0byByZXBsYWNlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbGxvd19yZXAubWF0Y2goa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXNba2V5XSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhpdGVtKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2VxdWFsKGtleSwgZmlsZXNba2V5XSwgaXRlbSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGR1cGxpY2F0ZSBmaWxlcyAlcyAlcyBpcyBub3QgdGhlIHNhbWVcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3JfcHJvbXB0LCBpdGVtLCBmaWxlc1trZXldKSkKKworICAgICAgICAgICAgICAgICAgICAjcGFzcyB0aGUgY2hlY2ssIGFkZCB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNba2V5XSA9IGl0ZW0KKworICAgIGRlZiBfbXVsdGlsaWJfdGVzdF9pbnN0YWxsKHNlbGYsIHBrZ3MpOgorICAgICAgICBtbF90ZW1wID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVEVNUF9ST09URlMiLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobWxfdGVtcCkKKworICAgICAgICBkaXJzID0gW3NlbGYuaW1hZ2Vfcm9vdGZzXQorCisgICAgICAgIGZvciB2YXJpYW50IGluIHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIG1sX3RhcmdldF9yb290ZnMgPSBvcy5wYXRoLmpvaW4obWxfdGVtcCwgdmFyaWFudCkKKworICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKG1sX3RhcmdldF9yb290ZnMsIFRydWUpCisKKyAgICAgICAgICAgIG1sX29wa2dfY29uZiA9IG9zLnBhdGguam9pbihtbF90ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgKyAiLSIgKyBvcy5wYXRoLmJhc2VuYW1lKHNlbGYub3BrZ19jb25mKSkKKworICAgICAgICAgICAgbWxfcG0gPSBPcGtnUE0oc2VsZi5kLCBtbF90YXJnZXRfcm9vdGZzLCBtbF9vcGtnX2NvbmYsIHNlbGYucGtnX2FyY2hzKQorCisgICAgICAgICAgICBtbF9wbS51cGRhdGUoKQorICAgICAgICAgICAgbWxfcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgICAgICBkaXJzLmFwcGVuZChtbF90YXJnZXRfcm9vdGZzKQorCisgICAgICAgIHNlbGYuX211bHRpbGliX3Nhbml0eV90ZXN0KGRpcnMpCisKKyAgICAnJycKKyAgICBXaGlsZSBpcGsgaW5jcmVtZW50YWwgaW1hZ2UgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLCBpdCB3aWxsIHJlbW92ZSB0aGUKKyAgICB1bm5lZWRlZCBwa2dzIGJ5IGNvbXBhcmluZyB0aGUgb2xkIGZ1bGwgbWFuaWZlc3QgaW4gcHJldmlvdXMgZXhpc3RpbmcKKyAgICBpbWFnZSBhbmQgdGhlIG5ldyBmdWxsIG1hbmlmZXN0IGluIHRoZSBjdXJyZW50IGltYWdlLgorICAgICcnJworICAgIGRlZiBfcmVtb3ZlX2V4dHJhX3BhY2thZ2VzKHNlbGYsIHBrZ3NfaW5pdGlhbF9pbnN0YWxsKToKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPT0gIjEiOgorICAgICAgICAgICAgIyBQYXJzZSBmdWxsIG1hbmlmZXN0IGluIHByZXZpb3VzIGV4aXN0aW5nIGltYWdlIGNyZWF0aW9uIHNlc3Npb24KKyAgICAgICAgICAgIG9sZF9mdWxsX21hbmlmZXN0ID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9mdWxsX21hbmlmZXN0KCkKKworICAgICAgICAgICAgIyBDcmVhdGUgZnVsbCBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgaW1hZ2Ugc2Vzc2lvbiwgdGhlIG9sZCBvbmUKKyAgICAgICAgICAgICMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbmV3IG9uZS4KKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3QuY3JlYXRlX2Z1bGwoc2VsZi5wbSkKKworICAgICAgICAgICAgIyBQYXJzZSBmdWxsIG1hbmlmZXN0IGluIGN1cnJlbnQgaW1hZ2UgY3JlYXRpb24gc2Vzc2lvbgorICAgICAgICAgICAgbmV3X2Z1bGxfbWFuaWZlc3QgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2Z1bGxfbWFuaWZlc3QoKQorCisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIG9sZF9mdWxsX21hbmlmZXN0OgorICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gbmV3X2Z1bGxfbWFuaWZlc3Q6CisgICAgICAgICAgICAgICAgICAgIHBrZ190b19yZW1vdmUuYXBwZW5kKHBrZykKKworICAgICAgICAgICAgaWYgcGtnX3RvX3JlbW92ZSAhPSBbXToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdkZWNyZW1lbnRhbCByZW1vdmVkOiAlcycgJSAnICcuam9pbihwa2dfdG9fcmVtb3ZlKSkKKyAgICAgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZShwa2dfdG9fcmVtb3ZlKQorCisgICAgJycnCisgICAgQ29tcGFyZSB3aXRoIHByZXZpb3VzIGV4aXN0aW5nIGltYWdlIGNyZWF0aW9uLCBpZiBzb21lIGNvbmRpdGlvbnMKKyAgICB0cmlnZ2VyZWQsIHRoZSBwcmV2aW91cyBvbGQgaW1hZ2Ugc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgVGhlIGNvbmRpdGlvbnMgaW5jbHVkZSBhbnkgb2YgJ1BBQ0tBR0VfRVhDTFVERSwgTk9fUkVDT01NRU5EQVRJT05TCisgICAgYW5kIEJBRF9SRUNPTU1FTkRBVElPTlMnIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgJycnCisgICAgZGVmIF9yZW1vdmVfb2xkX3Jvb3RmcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gIT0gIjEiOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB2YXJzX2xpc3RfZmlsZSA9IHNlbGYuZC5leHBhbmQoJyR7VH0vdmFyc19saXN0JykKKworICAgICAgICBvbGRfdmFyc19saXN0ID0gIiIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModmFyc19saXN0X2ZpbGUpOgorICAgICAgICAgICAgb2xkX3ZhcnNfbGlzdCA9IG9wZW4odmFyc19saXN0X2ZpbGUsICdyKycpLnJlYWQoKQorCisgICAgICAgIG5ld192YXJzX2xpc3QgPSAnJXM6JXM6JXNcbicgJSBcCisgICAgICAgICAgICAgICAgKChzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkgb3IgJycpLnN0cmlwKCksCisgICAgICAgICAgICAgICAgIChzZWxmLmQuZ2V0VmFyKCdOT19SRUNPTU1FTkRBVElPTlMnLCBUcnVlKSBvciAnJykuc3RyaXAoKSwKKyAgICAgICAgICAgICAgICAgKHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScsIFRydWUpIG9yICcnKS5zdHJpcCgpKQorICAgICAgICBvcGVuKHZhcnNfbGlzdF9maWxlLCAndysnKS53cml0ZShuZXdfdmFyc19saXN0KQorCisgICAgICAgIGlmIG9sZF92YXJzX2xpc3QgIT0gbmV3X3ZhcnNfbGlzdDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGtnc190b19pbnN0YWxsID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKyAgICAgICAgb3BrZ19wcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgb3BrZ19wb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorICAgICAgICByb290ZnNfcG9zdF9pbnN0YWxsX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdST09URlNfUE9TVElOU1RBTExfQ09NTUFORCcsIFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgUE0gaW5kZXggZmlsZXMsIHVubGVzcyB1c2VycyBwcm92aWRlIHRoZWlyIG93biBmZWVkcworICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKSBvciAiIikgIT0gIjEiOgorICAgICAgICAgICAgc2VsZi5wbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgb3BrZ19wcmVfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBzZWxmLnBtLmhhbmRsZV9iYWRfcmVjb21tZW5kYXRpb25zKCkKKworICAgICAgICBpZiBzZWxmLmluY19vcGtnX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfZXh0cmFfcGFja2FnZXMocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBzZWxmLmluc3RhbGxfb3JkZXI6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICAgICAgIyBGb3IgbXVsdGlsaWIsIHdlIHBlcmZvcm0gYSBzYW5pdHkgdGVzdCBiZWZvcmUgZmluYWwgaW5zdGFsbAorICAgICAgICAgICAgICAgICMgSWYgc2FuaXR5IHRlc3QgZmFpbHMsIGl0IHdpbGwgYXV0b21hdGljYWxseSBkbyBhIGJiLmZhdGFsKCkKKyAgICAgICAgICAgICAgICAjIGFuZCB0aGUgaW5zdGFsbGF0aW9uIHdpbGwgc3RvcAorICAgICAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX01VTFRJTElCOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdWx0aWxpYl90ZXN0X2luc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSkKKworICAgICAgICAgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRmFsc2UsIFRydWVdW3BrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWV0pCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvdmFyL2xpYi9vcGtnJ10pCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgb3BrZ19wb3N0X3Byb2Nlc3NfY21kcykKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcm9vdGZzX3Bvc3RfaW5zdGFsbF9jbWRzKQorCisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0uYmFja3VwX3BhY2thZ2luZ19kYXRhKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RlcGVuZHNfbGlzdCgpOgorICAgICAgICByZXR1cm4gWydJUEtHQ09ORl9TREsnLCAnSVBLX0ZFRURfVVJJUycsICdERVBMT1lfRElSX0lQSycsICdJUEtHQ09ORl9UQVJHRVQnLCAnSU5DX0lQS19JTUFHRV9HRU4nLCAnT1BLR19BUkdTJywgJ09QS0dMSUJESVInLCAnT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnT1BLR0xJQkRJUiddCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ09QS0dMSUJESVInLCBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BrZyIsICJzdGF0dXMiKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzX2NvbW1vbihzdGF0dXNfZmlsZSkKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIGRzdF9wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2lway1wb3N0aW5zdHMiKQorICAgICAgICBzcmNfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtPUEtHTElCRElSfS9vcGtnL2luZm8iKQorICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9wb3N0aW5zdHNfY29tbW9uKGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpCisKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCByZWdpc3RlcmVkX3BrZ3MpOgorICAgICAgICBzZWxmLnBtLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKK2RlZiBnZXRfY2xhc3NfZm9yX3R5cGUoaW1ndHlwZSk6CisgICAgcmV0dXJuIHsicnBtIjogUnBtUm9vdGZzLAorICAgICAgICAgICAgImlwayI6IE9wa2dSb290ZnMsCisgICAgICAgICAgICAiZGViIjogRHBrZ1Jvb3Rmc31baW1ndHlwZV0KKworZGVmIHZhcmlhYmxlX2RlcGVuZHMoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGltZ190eXBlID0gZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgIGNscyA9IGdldF9jbGFzc19mb3JfdHlwZShpbWdfdHlwZSkKKyAgICByZXR1cm4gY2xzLl9kZXBlbmRzX2xpc3QoKQorCitkZWYgY3JlYXRlX3Jvb3RmcyhkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgZW52X2JrcCA9IG9zLmVudmlyb24uY29weSgpCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgUnBtUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBPcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICBEcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKworICAgIG9zLmVudmlyb24uY2xlYXIoKQorICAgIG9zLmVudmlyb24udXBkYXRlKGVudl9ia3ApCisKKworZGVmIGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIGZvcm1hdD1Ob25lLCByb290ZnNfZGlyPU5vbmUpOgorICAgIGlmIG5vdCByb290ZnNfZGlyOgorICAgICAgICByb290ZnNfZGlyID0gZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgcmV0dXJuIFJwbVBrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImlwayI6CisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGlzIGFzIGEgc3RhbmRhbG9uZSBzY3JpcHQsIGZyb20gb3V0c2lkZSBiaXRiYWtlCisgICAgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgIiIiCisgICAgVEJECisgICAgIiIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Nkay5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc2RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGEwZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Nkay5weQpAQCAtMCwwICsxLDM0OSBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2Zyb20gb2UubWFuaWZlc3QgaW1wb3J0ICoKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCAqCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBnbG9iCisKKworY2xhc3MgU2RrKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuc2RrX291dHB1dCA9IHNlbGYuZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKQorICAgICAgICBzZWxmLnNka19uYXRpdmVfcGF0aCA9IHNlbGYuZC5nZXRWYXIoJ1NES1BBVEhOQVRJVkUnLCBUcnVlKS5zdHJpcCgnLycpCisgICAgICAgIHNlbGYudGFyZ2V0X3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgVHJ1ZSkuc3RyaXAoJy8nKQorICAgICAgICBzZWxmLnN5c2NvbmZkaXIgPSBzZWxmLmQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkuc3RyaXAoJy8nKQorCisgICAgICAgIHNlbGYuc2RrX3RhcmdldF9zeXNyb290ID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi50YXJnZXRfcGF0aCkKKyAgICAgICAgc2VsZi5zZGtfaG9zdF9zeXNyb290ID0gc2VsZi5zZGtfb3V0cHV0CisKKyAgICAgICAgaWYgbWFuaWZlc3RfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2RpciA9IHNlbGYuZC5nZXRWYXIoIlNES19ESVIiLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBtYW5pZmVzdF9kaXIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zZGtfb3V0cHV0LCBUcnVlKQorCisgICAgICAgIHNlbGYuaW5zdGFsbF9vcmRlciA9IE1hbmlmZXN0LklOU1RBTExfT1JERVIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfcG9wdWxhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuc2RrX291dHB1dCkKKworICAgICAgICAjIGNhbGwgYmFja2VuZCBkZXBlbmRlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgc2VsZi5fcG9wdWxhdGUoKQorCisgICAgICAgICMgRG9uJ3Qgc2hpcCBhbnkgbGliR0wgaW4gdGhlIFNESworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbGliZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYkdMKiIpKQorCisgICAgICAgICMgRml4IG9yIHJlbW92ZSBicm9rZW4gLmxhIGZpbGVzCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsaWJkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKi5sYSIpKQorCisgICAgICAgICMgTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0cyBmaWxlc3lzdGVtCisgICAgICAgIGxpbmtfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zeXNjb25mZGlyLCAibGQuc28uY2FjaGUiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGxpbmtfbmFtZSkpCisgICAgICAgIG9zLnN5bWxpbmsoIi9ldGMvbGQuc28uY2FjaGUiLCBsaW5rX25hbWUpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcignU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCBUcnVlKSkKKworCitjbGFzcyBScG1TZGsoU2RrKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1TZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCkKKyAgICAgICAgc2VsZi5ob3N0X21hbmlmZXN0ID0gUnBtTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgdGFyZ2V0X3Byb3ZpZGVuYW1lID0gWycvYmluL3NoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvYmluL2Jhc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL2VudicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9iaW4vcGVybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGtnY29uZmlnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gUnBtUE0oZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka190YXJnZXRfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdUQVJHRVRfVkVORE9SJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Byb3ZpZGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNka19wcm92aWRlbmFtZSA9IFsnL2Jpbi9zaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnL2Jpbi9iYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9lbnYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL3BlcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZ2NvbmZpZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliR0wuc28oKSg2NGJpdCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYkdMLnNvJworICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IFJwbVBNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignU0RLX1ZFTkRPUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNka19wcm92aWRlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNES19QQUNLQUdFX0FSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNES19PUyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIHBtLmNyZWF0ZV9jb25maWdzKCkKKyAgICAgICAgcG0ud3JpdGVfaW5kZXgoKQorICAgICAgICBwbS5kdW1wX2FsbF9hdmFpbGFibGVfcGtncygpCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5yZW1vdmVfcGFja2FnaW5nX2RhdGEoKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLmhvc3RfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICAjIE1vdmUgaG9zdCBSUE0gbGlicmFyeSBkYXRhCisgICAgICAgIG5hdGl2ZV9ycG1fc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJycG0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG5hdGl2ZV9ycG1fc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiIpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1vdmVmaWxlKGYsIG5hdGl2ZV9ycG1fc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKyAgICAgICAgIyBNb3ZlIGhvc3Qgc3lzY29uZmlnIGRhdGEKKyAgICAgICAgbmF0aXZlX3N5c2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignc3lzY29uZmRpcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfc3lzY29uZl9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAiZXRjIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfc3lzY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAiZXRjIiksIFRydWUpCisKKworY2xhc3MgT3BrZ1NkayhTZGspOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKE9wa2dTZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfVEFSR0VUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5ob3N0X2NvbmYgPSBzZWxmLmQuZ2V0VmFyKCJJUEtHQ09ORl9TREsiLCBUcnVlKQorCisgICAgICAgIHNlbGYudGFyZ2V0X21hbmlmZXN0ID0gT3BrZ01hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0gPSBPcGtnUE0oZCwgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsIHNlbGYudGFyZ2V0X2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi5ob3N0X3BtID0gT3BrZ1BNKGQsIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwgc2VsZi5ob3N0X2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJTREtfUEFDS0FHRV9BUkNIUyIsIFRydWUpKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpIG9yICIiKSAhPSAiMSI6CisgICAgICAgICAgICBwbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgcG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3MpCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIFRBUkdFVCBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi50YXJnZXRfcG0sIHNlbGYudGFyZ2V0X21hbmlmZXN0KQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtLmluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLmQuZ2V0VmFyKCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICB0YXJnZXRfc3lzY29uZmRpciA9IG9zLnBhdGguam9pbihzZWxmLnNka190YXJnZXRfc3lzcm9vdCwgc2VsZi5zeXNjb25mZGlyKQorICAgICAgICBob3N0X3N5c2NvbmZkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfaG9zdF9zeXNyb290LCBzZWxmLnN5c2NvbmZkaXIpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRhcmdldF9zeXNjb25mZGlyKQorICAgICAgICBzaHV0aWwuY29weShzZWxmLnRhcmdldF9jb25mLCB0YXJnZXRfc3lzY29uZmRpcikKKyAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKHRhcmdldF9zeXNjb25mZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzZWxmLnRhcmdldF9jb25mKSksIDA2NDQpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGhvc3Rfc3lzY29uZmRpcikKKyAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5ob3N0X2NvbmYsIGhvc3Rfc3lzY29uZmRpcikKKyAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGhvc3Rfc3lzY29uZmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5ob3N0X2NvbmYpKSwgMDY0NCkKKworICAgICAgICBuYXRpdmVfb3BrZ19zdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAib3BrZyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfb3BrZ19zdGF0ZV9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiwgImxpYiIsICJvcGtnIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfb3BrZ19zdGF0ZV9kaXIpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsICJ2YXIiKSwgVHJ1ZSkKKworCitjbGFzcyBEcGtnU2RrKFNkayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoRHBrZ1Nkaywgc2VsZikuX19pbml0X18oZCwgbWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYudGFyZ2V0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoIkFQVENPTkZfVEFSR0VUIiwgVHJ1ZSksICJhcHQiKQorICAgICAgICBzZWxmLmhvc3RfY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcigiQVBUQ09ORl9UQVJHRVQiLCBUcnVlKSwgImFwdC1zZGsiKQorCisgICAgICAgIHNlbGYudGFyZ2V0X21hbmlmZXN0ID0gRHBrZ01hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IERwa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0gPSBEcGtnUE0oZCwgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiRFBLR19BUkNIIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X2NvbmZfZGlyKQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IERwa2dQTShkLCBzZWxmLnNka19ob3N0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJTREtfUEFDS0FHRV9BUkNIUyIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiREVCX1NES19BUkNIIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvc3RfY29uZl9kaXIpCisKKyAgICBkZWYgX2NvcHlfYXB0X2Rpcl90byhzZWxmLCBkc3RfZGlyKToKKyAgICAgICAgc3RhZ2luZ19ldGNkaXJfbmF0aXZlID0gc2VsZi5kLmdldFZhcigiU1RBR0lOR19FVENESVJfTkFUSVZFIiwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoZHN0X2RpciwgVHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUob3MucGF0aC5qb2luKHN0YWdpbmdfZXRjZGlyX25hdGl2ZSwgImFwdCIpLCBkc3RfZGlyKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIHBtLndyaXRlX2luZGV4KCkKKyAgICAgICAgcG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3MpCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIFRBUkdFVCBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi50YXJnZXRfcG0sIHNlbGYudGFyZ2V0X21hbmlmZXN0KQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtLmluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLmQuZ2V0VmFyKCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIHNlbGYuX2NvcHlfYXB0X2Rpcl90byhvcy5wYXRoLmpvaW4oc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsICJldGMiLCAiYXB0IikpCisKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBOQVRJVkVTREsgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYuaG9zdF9wbSwgc2VsZi5ob3N0X21hbmlmZXN0KQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoIlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIHNlbGYuX2NvcHlfYXB0X2Rpcl90byhvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRjIiwgImFwdCIpKQorCisgICAgICAgIG5hdGl2ZV9kcGtnX3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhciIsICJsaWIiLCAiZHBrZyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfZHBrZ19zdGF0ZV9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiwgImxpYiIsICJkcGtnIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfZHBrZ19zdGF0ZV9kaXIpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsICJ2YXIiKSwgVHJ1ZSkKKworCitkZWYgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIHRhcmdldCwgZm9ybWF0PU5vbmUsIHJvb3Rmc19kaXI9Tm9uZSk6CisgICAgaWYgcm9vdGZzX2RpciBpcyBOb25lOgorICAgICAgICBzZGtfb3V0cHV0ID0gZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKQorICAgICAgICB0YXJnZXRfcGF0aCA9IGQuZ2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgVHJ1ZSkuc3RyaXAoJy8nKQorCisgICAgICAgIHJvb3Rmc19kaXIgPSBbc2RrX291dHB1dCwgb3MucGF0aC5qb2luKHNka19vdXRwdXQsIHRhcmdldF9wYXRoKV1bdGFyZ2V0IGlzIFRydWVdCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgYXJjaF92YXIgPSBbIlNES19QQUNLQUdFX0FSQ0hTIiwgTm9uZV1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIG9zX3ZhciA9IFsiU0RLX09TIiwgTm9uZV1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIHJldHVybiBScG1Qa2dzTGlzdChkLCByb290ZnNfZGlyLCBhcmNoX3Zhciwgb3NfdmFyKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBjb25mX2ZpbGVfdmFyID0gWyJJUEtHQ09ORl9TREsiLCAiSVBLR0NPTkZfVEFSR0VUIl1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgZC5nZXRWYXIoY29uZl9maWxlX3ZhciwgVHJ1ZSkpLmxpc3QoZm9ybWF0KQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImRlYiI6CisgICAgICAgIHJldHVybiBEcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpcikubGlzdChmb3JtYXQpCisKK2RlZiBwb3B1bGF0ZV9zZGsoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGVudl9ia3AgPSBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIFJwbVNkayhkLCBtYW5pZmVzdF9kaXIpLnBvcHVsYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBPcGtnU2RrKGQsIG1hbmlmZXN0X2RpcikucG9wdWxhdGUoKQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImRlYiI6CisgICAgICAgIERwa2dTZGsoZCwgbWFuaWZlc3RfZGlyKS5wb3B1bGF0ZSgpCisKKyAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS9zc3RhdGVzaWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NjcxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5CkBAIC0wLDAgKzEsMjkxIEBACitpbXBvcnQgYmIuc2lnZ2VuCisKK2RlZiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNpZ2dlbiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKToKKyAgICAjIFJldHVybiBUcnVlIGlmIHdlIHNob3VsZCBrZWVwIHRoZSBkZXBlbmRlbmN5LCBGYWxzZSB0byBkcm9wIGl0CisgICAgZGVmIGlzTmF0aXZlKHgpOgorICAgICAgICByZXR1cm4geC5lbmRzd2l0aCgiLW5hdGl2ZSIpCisgICAgZGVmIGlzQ3Jvc3MoeCk6CisgICAgICAgIHJldHVybiAiLWNyb3NzLSIgaW4geAorICAgIGRlZiBpc05hdGl2ZVNESyh4KToKKyAgICAgICAgcmV0dXJuIHguc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpCisgICAgZGVmIGlzS2VybmVsKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gaW5oZXJpdHMuZmluZCgiL21vZHVsZS1iYXNlLmJiY2xhc3MiKSAhPSAtMSBvciBpbmhlcml0cy5maW5kKCIvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcyIpICE9IC0xCisgICAgZGVmIGlzUGFja2FnZUdyb3VwKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gIi9wYWNrYWdlZ3JvdXAuYmJjbGFzcyIgaW4gaW5oZXJpdHMKKyAgICBkZWYgaXNBbGxBcmNoKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gIi9hbGxhcmNoLmJiY2xhc3MiIGluIGluaGVyaXRzCisgICAgZGVmIGlzSW1hZ2UoZm4pOgorICAgICAgICByZXR1cm4gIi9pbWFnZS5iYmNsYXNzIiBpbiAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorCisgICAgIyBBbHdheXMgaW5jbHVkZSBvdXIgb3duIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisgICAgaWYgcmVjaXBlbmFtZSA9PSBkZXBuYW1lOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBRdWlsdCAocGF0Y2ggYXBwbGljYXRpb24pIGNoYW5naW5nIGlzbid0IGxpa2VseSB0byBhZmZlY3QgYW55dGhpbmcKKyAgICBleGNsdWRlbGlzdCA9IFsncXVpbHQtbmF0aXZlJywgJ3N1YnZlcnNpb24tbmF0aXZlJywgJ2dpdC1uYXRpdmUnXQorICAgIGlmIGRlcG5hbWUgaW4gZXhjbHVkZWxpc3QgYW5kIHJlY2lwZW5hbWUgIT0gZGVwbmFtZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIEV4Y2x1ZGUgd2VsbCBkZWZpbmVkIHJlY2lwZS0+ZGVwZW5kZW5jeQorICAgIGlmICIlcy0+JXMiICUgKHJlY2lwZW5hbWUsIGRlcG5hbWUpIGluIHNpZ2dlbi5zYWZlcmVjaXBlZGVwczoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIERvbid0IGNoYW5nZSBuYXRpdmUvY3Jvc3MvbmF0aXZlc2RrIHJlY2lwZSBkZXBlbmRlbmNpZXMgYW55IGZ1cnRoZXIKKyAgICBpZiBpc05hdGl2ZShyZWNpcGVuYW1lKSBvciBpc0Nyb3NzKHJlY2lwZW5hbWUpIG9yIGlzTmF0aXZlU0RLKHJlY2lwZW5hbWUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBPbmx5IHRhcmdldCBwYWNrYWdlcyBiZXlvbmQgaGVyZQorCisgICAgIyBhbGxhcmNoIHBhY2thZ2Vncm91cHMgYXJlIGFzc3VtZWQgdG8gaGF2ZSB3ZWxsIGJlaGF2ZWQgbmFtZXMgd2hpY2ggZG9uJ3QgY2hhbmdlIGJldHdlZW4gYXJjaGl0ZWN1cmVzL3R1bmVzCisgICAgaWYgaXNQYWNrYWdlR3JvdXAoZm4pIGFuZCBpc0FsbEFyY2goZm4pOgorICAgICAgICByZXR1cm4gRmFsc2UgIAorCisgICAgIyBFeGNsdWRlIHdlbGwgZGVmaW5lZCBtYWNoaW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGRvbid0IGNoYW5nZSBBQkkKKyAgICBpZiBkZXBuYW1lIGluIHNpZ2dlbi5hYmlzYWZlcmVjaXBlcyBhbmQgbm90IGlzSW1hZ2UoZm4pOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgS2VybmVsIG1vZHVsZXMgYXJlIHdlbGwgbmFtZXNwYWNlZC4gV2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24gdGhlIGtlcm5lbCdzIGNoZWNrc3VtCisgICAgIyBpZiB3ZSdyZSBqdXN0IGRvaW5nIGFuIFJSRUNPTU1FTkRTX3h4eCA9ICJrZXJuZWwtbW9kdWxlLSoiLCBub3QgbGVhc3QgYmVjYXVzZSB0aGUgY2hlY2tzdW0KKyAgICAjIGlzIG1hY2hpbmUgc3BlY2lmaWMuCisgICAgIyBUaGVyZWZvcmUgaWYgd2UncmUgbm90IGEga2VybmVsIG9yIGEgbW9kdWxlIHJlY2lwZSAoaW5oZXJpdGluZyB0aGUga2VybmVsIGNsYXNzZXMpCisgICAgIyBhbmQgd2UgcmVjY29tZW5kIGEga2VybmVsLW1vZHVsZSwgd2UgZXhjbHVkZSB0aGUgZGVwZW5kZW5jeS4KKyAgICBkZXBmbiA9IGRlcC5yc3BsaXQoIi4iLCAxKVswXQorICAgIGlmIGRhdGFDYWNoZSBhbmQgaXNLZXJuZWwoZGVwZm4pIGFuZCBub3QgaXNLZXJuZWwoZm4pOgorICAgICAgICBmb3IgcGtnIGluIGRhdGFDYWNoZS5ydW5yZWNzW2ZuXToKKyAgICAgICAgICAgIGlmICIgIi5qb2luKGRhdGFDYWNoZS5ydW5yZWNzW2ZuXVtwa2ddKS5maW5kKCJrZXJuZWwtbW9kdWxlLSIpICE9IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBEZWZhdWx0IHRvIGtlZXAgZGVwZW5kZW5jaWVzCisgICAgcmV0dXJuIFRydWUKKworZGVmIHNzdGF0ZV9sb2NrZWRzaWdzKGQpOgorICAgIHNpZ3MgPSB7fQorICAgIHR5cGVzID0gKGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU19UWVBFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIHQgaW4gdHlwZXM6CisgICAgICAgIGxvY2tlZHNpZ3MgPSAoZC5nZXRWYXIoIlNJR0dFTl9MT0NLRURTSUdTXyVzIiAlIHQsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBscyBpbiBsb2NrZWRzaWdzOgorICAgICAgICAgICAgcG4sIHRhc2ssIGggPSBscy5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICBpZiBwbiBub3QgaW4gc2lnczoKKyAgICAgICAgICAgICAgICBzaWdzW3BuXSA9IHt9CisgICAgICAgICAgICBzaWdzW3BuXVt0YXNrXSA9IGgKKyAgICByZXR1cm4gc2lncworCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpYyk6CisgICAgbmFtZSA9ICJPRUJhc2ljIgorICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFiaXNhZmVyZWNpcGVzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHNlbGYuc2FmZXJlY2lwZWRlcHMgPSAoZGF0YS5nZXRWYXIoIlNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBwYXNzCisgICAgZGVmIHJ1bmRlcF9jaGVjayhzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIHNzdGF0ZV9ydW5kZXBmaWx0ZXIoc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKQorCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljSGFzaChiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoKToKKyAgICBuYW1lID0gIk9FQmFzaWNIYXNoIgorICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFiaXNhZmVyZWNpcGVzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHNlbGYuc2FmZXJlY2lwZWRlcHMgPSAoZGF0YS5nZXRWYXIoIlNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLmxvY2tlZHNpZ3MgPSBzc3RhdGVfbG9ja2Vkc2lncyhkYXRhKQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hlcyA9IHt9CisgICAgICAgIHNlbGYubG9ja2VkcG5tYXAgPSB7fQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hmbiA9IHt9CisgICAgICAgIHNlbGYubWFjaGluZSA9IGRhdGEuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5taXNtYXRjaF9tc2dzID0gW10KKyAgICAgICAgcGFzcworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSkKKworICAgIGRlZiBnZXRfdGFza2RhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5nZXRfdGFza2RhdGEoKQorICAgICAgICByZXR1cm4gKGRhdGEsIHNlbGYubG9ja2VkcG5tYXAsIHNlbGYubG9ja2VkaGFzaGZuKQorCisgICAgZGVmIHNldF90YXNrZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgY29yZWRhdGEsIHNlbGYubG9ja2VkcG5tYXAsIHNlbGYubG9ja2VkaGFzaGZuID0gZGF0YQorICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5zZXRfdGFza2RhdGEoY29yZWRhdGEpCisKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuZHVtcF9sb2NrZWRzaWdzKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2gsIHNlbGYpLmR1bXBfc2lncyhkYXRhQ2FjaGUsIG9wdGlvbnMpCisKKyAgICBkZWYgZ2V0X3Rhc2toYXNoKHNlbGYsIGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpOgorICAgICAgICBoID0gc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZ2V0X3Rhc2toYXNoKGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpCisKKyAgICAgICAgcmVjaXBlbmFtZSA9IGRhdGFDYWNoZS5wa2dfZm5bZm5dCisgICAgICAgIHNlbGYubG9ja2VkcG5tYXBbZm5dID0gcmVjaXBlbmFtZQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hmbltmbl0gPSBkYXRhQ2FjaGUuaGFzaGZuW2ZuXQorICAgICAgICBpZiByZWNpcGVuYW1lIGluIHNlbGYubG9ja2Vkc2lnczoKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5sb2NrZWRzaWdzW3JlY2lwZW5hbWVdOgorICAgICAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgICAgICAgICBoX2xvY2tlZCA9IHNlbGYubG9ja2Vkc2lnc1tyZWNpcGVuYW1lXVt0YXNrXQorICAgICAgICAgICAgICAgIHNlbGYubG9ja2VkaGFzaGVzW2tdID0gaF9sb2NrZWQKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2toYXNoW2tdID0gaF9sb2NrZWQKKyAgICAgICAgICAgICAgICAjYmIud2FybigiVXNpbmcgJXMgJXMgJXMiICUgKHJlY2lwZW5hbWUsIHRhc2ssIGgpKQorCisgICAgICAgICAgICAgICAgaWYgaCAhPSBoX2xvY2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taXNtYXRjaF9tc2dzLmFwcGVuZCgnVGhlICVzOiVzIHNpZyAoJXMpIGNoYW5nZWQsIHVzZSBsb2NrZWQgc2lnICVzIHRvIGluc3RlYWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChyZWNpcGVuYW1lLCB0YXNrLCBoLCBoX2xvY2tlZCkpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gaF9sb2NrZWQKKyAgICAgICAgI2JiLndhcm4oIiVzICVzICVzIiAlIChyZWNpcGVuYW1lLCB0YXNrLCBoKSkKKyAgICAgICAgcmV0dXJuIGgKKworICAgIGRlZiBkdW1wX3NpZ3Rhc2soc2VsZiwgZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSk6CisgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgaWYgayBpbiBzZWxmLmxvY2tlZGhhc2hlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSkKKworICAgIGRlZiBkdW1wX2xvY2tlZHNpZ3Moc2VsZiwgc2lnZmlsZT1Ob25lLCB0YXNrZmlsdGVyPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2lnZmlsZToKKyAgICAgICAgICAgIHNpZ2ZpbGUgPSBvcy5nZXRjd2QoKSArICIvbG9ja2VkLXNpZ3MuaW5jIgorCisgICAgICAgIGJiLnBsYWluKCJXcml0aW5nIGxvY2tlZCBzaWdzIHRvICVzIiAlIHNpZ2ZpbGUpCisgICAgICAgIHR5cGVzID0ge30KKyAgICAgICAgZm9yIGsgaW4gc2VsZi5ydW50YXNrZGVwczoKKyAgICAgICAgICAgIGlmIHRhc2tmaWx0ZXI6CisgICAgICAgICAgICAgICAgaWYgbm90IGsgaW4gdGFza2ZpbHRlcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZuID0gay5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICB0ID0gc2VsZi5sb2NrZWRoYXNoZm5bZm5dLnNwbGl0KCIgIilbMV0uc3BsaXQoIjoiKVs1XQorICAgICAgICAgICAgdCA9ICd0LScgKyB0LnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICBpZiB0IG5vdCBpbiB0eXBlczoKKyAgICAgICAgICAgICAgICB0eXBlc1t0XSA9IFtdCisgICAgICAgICAgICB0eXBlc1t0XS5hcHBlbmQoaykKKworICAgICAgICB3aXRoIG9wZW4oc2lnZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZm9yIHQgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfJXMgPSAiXFxcbicgJSB0KQorICAgICAgICAgICAgICAgIHR5cGVzW3RdLnNvcnQoKQorICAgICAgICAgICAgICAgIHNvcnRlZGsgPSBzb3J0ZWQodHlwZXNbdF0sIGtleT1sYW1iZGEgazogc2VsZi5sb2NrZWRwbm1hcFtrLnJzcGxpdCgiLiIsMSlbMF1dKQorICAgICAgICAgICAgICAgIGZvciBrIGluIHNvcnRlZGs6CisgICAgICAgICAgICAgICAgICAgIGZuID0gay5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBrLnJzcGxpdCgiLiIsMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiAgICAiICsgc2VsZi5sb2NrZWRwbm1hcFtmbl0gKyAiOiIgKyB0YXNrICsgIjoiICsgc2VsZi50YXNraGFzaFtrXSArICIgXFxcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgICJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdTSUdHRU5fTE9DS0VEU0lHU19UWVBFU18lcyA9ICIlcyInICUgKHNlbGYubWFjaGluZSwgIiAiLmpvaW4odHlwZXMua2V5cygpKSkpCisKKyAgICBkZWYgY2hlY2toYXNoZXMoc2VsZiwgbWlzc2VkLCByZXQsIHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQpOgorICAgICAgICBjaGVja2xldmVsID0gZC5nZXRWYXIoIlNJR0dFTl9MT0NLRURTSUdTX0NIRUNLX0xFVkVMIiwgVHJ1ZSkKKyAgICAgICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiByZXQ6CisgICAgICAgICAgICAgICAgZm9yIHBuIGluIHNlbGYubG9ja2Vkc2lnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgc3FfaGFzaFt0YXNrXSBpbiBzZWxmLmxvY2tlZHNpZ3NbcG5dLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncy5hcHBlbmQoIkxvY2tlZCBzaWcgaXMgc2V0IGZvciAlczolcyAoJXMpIHlldCBub3QgaW4gc3N0YXRlIGNhY2hlPyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocG4sIHNxX3Rhc2tbdGFza10sIHNxX2hhc2hbdGFza10pKQorCisgICAgICAgIGlmIHNlbGYubWlzbWF0Y2hfbXNncyBhbmQgY2hlY2tsZXZlbCA9PSAnd2Fybic6CisgICAgICAgICAgICBiYi53YXJuKCJcbiIuam9pbihzZWxmLm1pc21hdGNoX21zZ3MpKQorICAgICAgICBlbGlmIHNlbGYubWlzbWF0Y2hfbXNncyBhbmQgY2hlY2tsZXZlbCA9PSAnZXJyb3InOgorICAgICAgICAgICAgYmIuZmF0YWwoIlxuIi5qb2luKHNlbGYubWlzbWF0Y2hfbXNncykpCisKKworIyBJbnNlcnQgdGhlc2UgY2xhc3NlcyBpbnRvIHNpZ2dlbidzIG5hbWVzcGFjZSBzbyBpdCBjYW4gc2VlIGFuZCBzZWxlY3QgdGhlbQorYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvck9FQmFzaWMgPSBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljCitiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2ggPSBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljSGFzaAorCisKK2RlZiBmaW5kX3NpZ2luZm8ocG4sIHRhc2tuYW1lLCB0YXNraGFzaGxpc3QsIGQpOgorICAgICIiIiBGaW5kIHNpZ25hdHVyZSBkYXRhIGZpbGVzIGZvciBjb21wYXJpc29uIHB1cnBvc2VzICIiIgorCisgICAgaW1wb3J0IGZubWF0Y2gKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgaWYgdGFza2hhc2hsaXN0OgorICAgICAgICBoYXNoZmlsZXMgPSB7fQorCisgICAgaWYgbm90IHRhc2tuYW1lOgorICAgICAgICAjIFdlIGhhdmUgdG8gZGVyaXZlIHBuIGFuZCB0YXNrbmFtZQorICAgICAgICBrZXkgPSBwbgorICAgICAgICBzcGxpdGl0ID0ga2V5LnNwbGl0KCcuYmIuJykKKyAgICAgICAgdGFza25hbWUgPSBzcGxpdGl0WzFdCisgICAgICAgIHBuID0gb3MucGF0aC5iYXNlbmFtZShzcGxpdGl0WzBdKS5zcGxpdCgnXycpWzBdCisgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCd2aXJ0dWFsOm5hdGl2ZTonKToKKyAgICAgICAgICAgIHBuID0gcG4gKyAnLW5hdGl2ZScKKworICAgIGZpbGVkYXRlcyA9IHt9CisKKyAgICAjIEZpcnN0IHNlYXJjaCBpbiBzdGFtcHMgZGlyCisgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdNVUxUSU1BQ0hfVEFSR0VUX1NZUycsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsIHBuKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BWJywgJyonKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSJywgJyonKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0VYVEVORFBFJywgJycpCisgICAgc3RhbXAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVEFNUCcsIFRydWUpCisgICAgZmlsZXNwZWMgPSAnJXMuJXMuc2lnZGF0YS4qJyAlIChzdGFtcCwgdGFza25hbWUpCisgICAgZm91bmRhbGwgPSBGYWxzZQorICAgIGltcG9ydCBnbG9iCisgICAgZm9yIGZ1bGxwYXRoIGluIGdsb2IuZ2xvYihmaWxlc3BlYyk6CisgICAgICAgIG1hdGNoID0gRmFsc2UKKyAgICAgICAgaWYgdGFza2hhc2hsaXN0OgorICAgICAgICAgICAgZm9yIHRhc2toYXNoIGluIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmdWxscGF0aC5lbmRzd2l0aCgnLiVzJyAlIHRhc2toYXNoKToKKyAgICAgICAgICAgICAgICAgICAgaGFzaGZpbGVzW3Rhc2toYXNoXSA9IGZ1bGxwYXRoCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IGxlbih0YXNraGFzaGxpc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRhbGwgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbGVkYXRlc1tmdWxscGF0aF0gPSBvcy5zdGF0KGZ1bGxwYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgIGlmIG5vdCB0YXNraGFzaGxpc3Qgb3IgKGxlbihmaWxlZGF0ZXMpIDwgMiBhbmQgbm90IGZvdW5kYWxsKToKKyAgICAgICAgIyBUaGF0IGRpZG4ndCB3b3JrLCBsb29rIGluIHNzdGF0ZS1jYWNoZQorICAgICAgICBoYXNoZXMgPSB0YXNraGFzaGxpc3Qgb3IgWycqJ10KKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGZvciBoYXNodmFsIGluIGhhc2hlczoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsICcqJykKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdUQVJHRVRfT1MnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsIHBuKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFYnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUicsICcqJykKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX1RBU0tIQVNIJywgaGFzaHZhbCkKKyAgICAgICAgICAgIHN3c3BlYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9TV1NQRUMnLCBUcnVlKQorICAgICAgICAgICAgaWYgdGFza25hbWUgaW4gWydkb19mZXRjaCcsICdkb191bnBhY2snLCAnZG9fcGF0Y2gnLCAnZG9fcG9wdWxhdGVfbGljJywgJ2RvX3ByZWNvbmZpZ3VyZSddIGFuZCBzd3NwZWM6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1NUQVRFX1BLR1NQRUMnLCAnJHtTU1RBVEVfU1dTUEVDfScpCisgICAgICAgICAgICBlbGlmIHBuLmVuZHN3aXRoKCctbmF0aXZlJykgb3IgIi1jcm9zcy0iIGluIHBuIG9yICItY3Jvc3NzZGstIiBpbiBwbjoKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTU1RBVEVfRVhUUkFQQVRIJywgIiR7TkFUSVZFTFNCU1RSSU5HfS8iKQorICAgICAgICAgICAgc3N0YXRlbmFtZSA9IHRhc2tuYW1lWzM6XQorICAgICAgICAgICAgZmlsZXNwZWMgPSAnJXNfJXMuKi5zaWdpbmZvJyAlIChsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSksIHNzdGF0ZW5hbWUpCisKKyAgICAgICAgICAgIGlmIGhhc2h2YWwgIT0gJyonOgorICAgICAgICAgICAgICAgIHNzdGF0ZWRpciA9ICIlcy8lcyIgJSAoZC5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKSwgaGFzaHZhbFs6Ml0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNzdGF0ZWRpciA9IGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3N0YXRlZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZnVsbHBhdGgsIGZpbGVzcGVjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoZmlsZXNbaGFzaHZhbF0gPSBmdWxscGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVkYXRlc1tmdWxscGF0aF0gPSBvcy5zdGF0KGZ1bGxwYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgcmV0dXJuIGhhc2hmaWxlcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmaWxlZGF0ZXMKKworYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyA9IGZpbmRfc2lnaW5mbworCisKK2RlZiBzc3RhdGVfZ2V0X21hbmlmZXN0X2ZpbGVuYW1lKHRhc2ssIGQpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgc3N0YXRlIG1hbmlmZXN0IGZpbGUgcGF0aCBmb3IgYSBwYXJ0aWN1bGFyIHRhc2suCisgICAgQWxzbyByZXR1cm5zIHRoZSBkYXRhc3RvcmUgdGhhdCBjYW4gYmUgdXNlZCB0byBxdWVyeSByZWxhdGVkIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBkMiA9IGQuY3JlYXRlQ29weSgpCisgICAgZXh0cmFpbmYgPSBkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3RhbXAtZXh0cmEtaW5mbycsIFRydWUpCisgICAgaWYgZXh0cmFpbmY6CisgICAgICAgIGQyLnNldFZhcigiU1NUQVRFX01BTk1BQ0giLCBleHRyYWluZikKKyAgICByZXR1cm4gKGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFORklMRVBSRUZJWH0uJXMiICUgdGFzayksIGQyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXJtaW5hbC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVybWluYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhODkxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVybWluYWwucHkKQEAgLTAsMCArMSwyNjMgQEAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb2UuY2xhc3N1dGlscworaW1wb3J0IHNobGV4Citmcm9tIGJiLnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBFeGVjdXRpb25FcnJvcgorZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLk9FLlRlcm1pbmFsJykKKworCitjbGFzcyBVbnN1cHBvcnRlZFRlcm1pbmFsKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBOb1N1cHBvcnRlZFRlcm1pbmFscyhFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBSZWdpc3RyeShvZS5jbGFzc3V0aWxzLkNsYXNzUmVnaXN0cnkpOgorICAgIGNvbW1hbmQgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICBzdXBlcihSZWdpc3RyeSwgY2xzKS5fX2luaXRfXyhuYW1lLmxvd2VyKCksIGJhc2VzLCBhdHRycykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbXBsZW1lbnRlZChjbHMpOgorICAgICAgICByZXR1cm4gYm9vbChjbHMuY29tbWFuZCkKKworCitjbGFzcyBUZXJtaW5hbChQb3Blbik6CisgICAgX19tZXRhY2xhc3NfXyA9IFJlZ2lzdHJ5CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgZm10X3NoX2NtZCA9IHNlbGYuZm9ybWF0X2NvbW1hbmQoc2hfY21kLCB0aXRsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgUG9wZW4uX19pbml0X18oc2VsZiwgZm10X3NoX2NtZCwgZW52PWVudikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoc2VsZi5uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGZvcm1hdF9jb21tYW5kKHNlbGYsIHNoX2NtZCwgdGl0bGUpOgorICAgICAgICBmbXQgPSB7J3RpdGxlJzogdGl0bGUgb3IgJ1Rlcm1pbmFsJywgJ2NvbW1hbmQnOiBzaF9jbWR9CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzaGxleC5zcGxpdChzZWxmLmNvbW1hbmQuZm9ybWF0KCoqZm10KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbZWxlbWVudC5mb3JtYXQoKipmbXQpIGZvciBlbGVtZW50IGluIHNlbGYuY29tbWFuZF0KKworY2xhc3MgWFRlcm1pbmFsKFRlcm1pbmFsKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoJ0RJU1BMQVknKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoc2VsZi5uYW1lKQorCitjbGFzcyBHbm9tZShYVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnZ25vbWUtdGVybWluYWwgLXQgInt0aXRsZX0iIC0tZGlzYWJsZS1mYWN0b3J5IC14IHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICAjIFJlY2VudCB2ZXJzaW9ucyBvZiBnbm9tZS10ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IG5vbi1VVEY4IGNoYXJzZXQ6CisgICAgICAgICMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjEyNzsgYXMgYSB3b3JrYXJvdW5kLAorICAgICAgICAjIGNsZWFyaW5nIHRoZSBMQ19BTEwgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gaXQgdXNlcyB0aGUgbG9jYWxlLgorICAgICAgICAjIE9uY2UgZml4ZWQgb24gdGhlIGdub21lLXRlcm1pbmFsIHByb2plY3QsIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgICAgIGlmIG9zLmdldGVudignTENfQUxMJyk6IG9zLnB1dGVudignTENfQUxMJywnJykKKworICAgICAgICAjIENoZWNrIHZlcnNpb24KKyAgICAgICAgdmVybnVtID0gY2hlY2tfdGVybWluYWxfdmVyc2lvbigiZ25vbWUtdGVybWluYWwiKQorICAgICAgICBpZiB2ZXJudW0gYW5kIExvb3NlVmVyc2lvbih2ZXJudW0pID49ICczLjEwJzoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnR25vbWUtVGVybWluYWwgMy4xMCBvciBsYXRlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGlzYWJsZS1mYWN0b3J5JykKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICdnbm9tZS10ZXJtaW5hbCAtdCAie3RpdGxlfSIgLXgge2NvbW1hbmR9JworICAgICAgICBYVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBNYXRlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdtYXRlLXRlcm1pbmFsIC10ICJ7dGl0bGV9IiAteCB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIFhmY2UoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3hmY2U0LXRlcm1pbmFsIC1UICJ7dGl0bGV9IiAtZSAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIKKworY2xhc3MgVGVybWlub2xvZ3koWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3Rlcm1pbm9sb2d5IC1UPSJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIEtvbnNvbGUoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ2tvbnNvbGUgLS1ub2ZvcmsgLXAgdGFidGl0bGU9Int0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICAjIENoZWNrIHZlcnNpb24KKyAgICAgICAgdmVybnVtID0gY2hlY2tfdGVybWluYWxfdmVyc2lvbigia29uc29sZSIpCisgICAgICAgIGlmIHZlcm51bSBhbmQgTG9vc2VWZXJzaW9uKHZlcm51bSkgPCAnMi4wLjAnOgorICAgICAgICAgICAgIyBLb25zb2xlIGZyb20gS0RFIDMueAorICAgICAgICAgICAgc2VsZi5jb21tYW5kID0gJ2tvbnNvbGUgLVQgInt0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICAgICAgWFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgWFRlcm0oWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3h0ZXJtIC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAxCisKK2NsYXNzIFJ4dnQoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3J4dnQgLVQgInt0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDEKKworY2xhc3MgU2NyZWVuKFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3NjcmVlbiAtRCAtbSAtdCAie3RpdGxlfSIgLVMgZGV2c2hlbGwge2NvbW1hbmR9JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIHNfaWQgPSAiZGV2c2hlbGxfJWkiICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgc2VsZi5jb21tYW5kID0gInNjcmVlbiAtRCAtbSAtdCBcInt0aXRsZX1cIiAtUyAlcyB7Y29tbWFuZH0iICUgc19pZAorICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgIG1zZyA9ICdTY3JlZW4gc3RhcnRlZC4gUGxlYXNlIGNvbm5lY3QgaW4gYW5vdGhlciB0ZXJtaW5hbCB3aXRoICcgXAorICAgICAgICAgICAgJyJzY3JlZW4gLXIgJXMiJyAlIHNfaWQKKyAgICAgICAgaWYgKGQpOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Mb2dFeGVjVFRZKG1zZywgInNjcmVlbiAtciAlcyIgJSBzX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSwgMTApLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorCitjbGFzcyBUbXV4UnVubmluZyhUZXJtaW5hbCk6CisgICAgIiIiT3BlbiBhIG5ldyBwYW5lIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgdG11eCB3aW5kb3ciIiIKKyAgICBuYW1lID0gJ3RtdXgtcnVubmluZycKKyAgICBjb21tYW5kID0gJ3RtdXggc3BsaXQtd2luZG93ICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMi43NQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IG9zLmdldGVudignVE1VWCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgcnVubmluZycpCisKKyAgICAgICAgaWYgbm90IGNoZWNrX3RtdXhfcGFuZV9zaXplKCd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IHBhbmUgdG9vIHNtYWxsJykKKworICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisKK2NsYXNzIFRtdXhOZXdXaW5kb3coVGVybWluYWwpOgorICAgICIiIk9wZW4gYSBuZXcgd2luZG93IGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgdG11eCBzZXNzaW9uIiIiCisgICAgbmFtZSA9ICd0bXV4LW5ldy13aW5kb3cnCisgICAgY29tbWFuZCA9ICd0bXV4IG5ldy13aW5kb3cgLW4gInt0aXRsZX0iICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMi43MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IG9zLmdldGVudignVE1VWCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgcnVubmluZycpCisKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBUbXV4KFRlcm1pbmFsKToKKyAgICAiIiJTdGFydCBhIG5ldyB0bXV4IHNlc3Npb24gYW5kIHdpbmRvdyIiIgorICAgIGNvbW1hbmQgPSAndG11eCBuZXcgLWQgLXMgZGV2c2hlbGwgLW4gZGV2c2hlbGwgIntjb21tYW5kfSInCisgICAgcHJpb3JpdHkgPSAwLjc1CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgaWYgbm90IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAndG11eCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgaW5zdGFsbGVkJykKKworICAgICAgICAjIFRPRE86IGNvbnNpZGVyIHVzaW5nIGEgJ2RldnNoZWxsJyBzZXNzaW9uIHNoYXJlZCBhbW9uZ3N0IGFsbAorICAgICAgICAjIGRldnNoZWxscywgaWYgaXQncyBhbHJlYWR5IHRoZXJlLCBhZGQgYSBuZXcgd2luZG93IHRvIGl0LgorICAgICAgICB3aW5kb3dfbmFtZSA9ICdkZXZzaGVsbC0laScgJSBvcy5nZXRwaWQoKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9ICd0bXV4IG5ldyAtZCAtcyB7MH0gLW4gezB9ICJ7e2NvbW1hbmR9fSInLmZvcm1hdCh3aW5kb3dfbmFtZSkKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCisgICAgICAgIGF0dGFjaF9jbWQgPSAndG11eCBhdHQgLXQgezB9Jy5mb3JtYXQod2luZG93X25hbWUpCisgICAgICAgIG1zZyA9ICdUbXV4IHN0YXJ0ZWQuIFBsZWFzZSBjb25uZWN0IGluIGFub3RoZXIgdGVybWluYWwgd2l0aCBgdG11eCBhdHQgLXQgezB9YCcuZm9ybWF0KHdpbmRvd19uYW1lKQorICAgICAgICBpZiBkOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Mb2dFeGVjVFRZKG1zZywgYXR0YWNoX2NtZCwgMC41LCAxMCksIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIud2Fybihtc2cpCisKK2NsYXNzIEN1c3RvbShUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdmYWxzZScgIyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIKKyAgICBwcmlvcml0eSA9IDMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBzZWxmLmNvbW1hbmQgPSBkIGFuZCBkLmdldFZhcignT0VfVEVSTUlOQUxfQ1VTVE9NQ01EJywgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5jb21tYW5kOgorICAgICAgICAgICAgaWYgbm90ICd7Y29tbWFuZH0nIGluIHNlbGYuY29tbWFuZDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQgKz0gJyB7Y29tbWFuZH0nCisgICAgICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgICAgICBsb2dnZXIud2FybignQ3VzdG9tIHRlcm1pbmFsIHdhcyBzdGFydGVkLicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ05vIGN1c3RvbSB0ZXJtaW5hbCAoT0VfVEVSTUlOQUxfQ1VTVE9NQ01EKSBzZXQnKQorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgnT0VfVEVSTUlOQUxfQ1VTVE9NQ01EIG5vdCBzZXQnKQorCisKK2RlZiBwcmlvcml0aXplZCgpOgorICAgIHJldHVybiBSZWdpc3RyeS5wcmlvcml0aXplZCgpCisKK2RlZiBzcGF3bl9wcmVmZXJyZWQoc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAiIiJTcGF3biB0aGUgZmlyc3Qgc3VwcG9ydGVkIHRlcm1pbmFsLCBieSBwcmlvcml0eSIiIgorICAgIGZvciB0ZXJtaW5hbCBpbiBwcmlvcml0aXplZCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGF3bih0ZXJtaW5hbC5uYW1lLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgICAgICBicmVhaworICAgICAgICBleGNlcHQgVW5zdXBwb3J0ZWRUZXJtaW5hbDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgTm9TdXBwb3J0ZWRUZXJtaW5hbHMoKQorCitkZWYgc3Bhd24obmFtZSwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAiIiJTcGF3biB0aGUgc3BlY2lmaWVkIHRlcm1pbmFsLCBieSBuYW1lIiIiCisgICAgbG9nZ2VyLmRlYnVnKDEsICdBdHRlbXB0aW5nIHRvIHNwYXduIHRlcm1pbmFsICIlcyInLCBuYW1lKQorICAgIHRyeToKKyAgICAgICAgdGVybWluYWwgPSBSZWdpc3RyeS5yZWdpc3RyeVtuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbChuYW1lKQorCisgICAgcGlwZSA9IHRlcm1pbmFsKHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKyAgICBvdXRwdXQgPSBwaXBlLmNvbW11bmljYXRlKClbMF0KKyAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmFpc2UgRXhlY3V0aW9uRXJyb3Ioc2hfY21kLCBwaXBlLnJldHVybmNvZGUsIG91dHB1dCkKKworZGVmIGNoZWNrX3RtdXhfcGFuZV9zaXplKHRtdXgpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorICAgIHRyeToKKyAgICAgICAgcCA9IHN1Yi5Qb3BlbignJXMgbGlzdC1wYW5lcyAtRiAiI3s/cGFuZV9hY3RpdmUsI3twYW5lX2hlaWdodH0sfSInICUgdG11eCwKKyAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNpemUgPSBpbnQob3V0LnN0cmlwKCkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorICAgIGlmIHNpemUvMiA+PSAxOToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24odGVybWluYWxOYW1lKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICB0cnk6CisgICAgICAgIHAgPSBzdWIuUG9wZW4oWydzaCcsICctYycsICclcyAtLXZlcnNpb24nICUgdGVybWluYWxOYW1lXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICB2ZXJfaW5mbyA9IG91dC5yc3RyaXAoKS5zcGxpdCgnXG4nKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKyAgICB2ZXJudW0gPSBOb25lCisgICAgZm9yIHZlciBpbiB2ZXJfaW5mbzoKKyAgICAgICAgaWYgdmVyLnN0YXJ0c3dpdGgoJ0tvbnNvbGUnKToKKyAgICAgICAgICAgIHZlcm51bSA9IHZlci5zcGxpdCgnICcpWy0xXQorICAgICAgICBpZiB2ZXIuc3RhcnRzd2l0aCgnR05PTUUgVGVybWluYWwnKToKKyAgICAgICAgICAgIHZlcm51bSA9IHZlci5zcGxpdCgnICcpWy0xXQorICAgIHJldHVybiB2ZXJudW0KKworZGVmIGRpc3Ryb19uYW1lKCk6CisgICAgdHJ5OgorICAgICAgICBwID0gUG9wZW4oWydsc2JfcmVsZWFzZScsICctaSddKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBkaXN0cm8gPSBvdXQuc3BsaXQoJzonKVsxXS5zdHJpcCgpLmxvd2VyKCkKKyAgICBleGNlcHQ6CisgICAgICAgIGRpc3RybyA9ICJ1bmtub3duIgorICAgIHJldHVybiBkaXN0cm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfbGljZW5zZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF9saWNlbnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODg4ODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfbGljZW5zZS5weQpAQCAtMCwwICsxLDY4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvZS5saWNlbnNlCisKK2NsYXNzIFNlZW5WaXNpdG9yKG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zZWVuID0gW10KKyAgICAgICAgb2UubGljZW5zZS5MaWNlbnNlVmlzaXRvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIHZpc2l0X1N0cihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5zZWVuLmFwcGVuZChub2RlLnMpCisKK2NsYXNzIFRlc3RTaW5nbGVMaWNlbnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsaWNlbnNlcyA9IFsKKyAgICAgICAgIkdQTHYyIiwKKyAgICAgICAgIkxHUEwtMi4wIiwKKyAgICAgICAgIkFydGlzdGljIiwKKyAgICAgICAgIk1JVCIsCisgICAgICAgICJHUEx2MysiLAorICAgICAgICAiRk9PX0JBUiIsCisgICAgXQorICAgIGludmFsaWRfbGljZW5zZXMgPSBbIkdQTC9CU0QiXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwYXJzZShsaWNlbnNlc3RyKToKKyAgICAgICAgdmlzaXRvciA9IFNlZW5WaXNpdG9yKCkKKyAgICAgICAgdmlzaXRvci52aXNpdF9zdHJpbmcobGljZW5zZXN0cikKKyAgICAgICAgcmV0dXJuIHZpc2l0b3Iuc2VlbgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2xpY2Vuc2VzKHNlbGYpOgorICAgICAgICBmb3IgbGljZW5zZSBpbiBzZWxmLmxpY2Vuc2VzOgorICAgICAgICAgICAgbGljZW5zZXMgPSBzZWxmLnBhcnNlKGxpY2Vuc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaWNlbnNlcywgW2xpY2Vuc2VdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9saWNlbnNlcyhzZWxmKToKKyAgICAgICAgZm9yIGxpY2Vuc2UgaW4gc2VsZi5pbnZhbGlkX2xpY2Vuc2VzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhvZS5saWNlbnNlLkludmFsaWRMaWNlbnNlKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGxpY2Vuc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5saWNlbnNlLCBsaWNlbnNlKQorCitjbGFzcyBUZXN0U2ltcGxlQ29tYmluYXRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0ZXN0cyA9IHsKKyAgICAgICAgIkZPTyZCQVIiOiBbIkZPTyIsICJCQVIiXSwKKyAgICAgICAgIkJBWiAmIE1PTyI6IFsiQkFaIiwgIk1PTyJdLAorICAgICAgICAiQUxQSEF8QkVUQSI6IFsiQUxQSEEiXSwKKyAgICAgICAgIkJBWiZNT098Rk9PIjogWyJGT08iXSwKKyAgICAgICAgIkZPTyZCQVJ8QkFaIjogWyJGT08iLCAiQkFSIl0sCisgICAgfQorICAgIHByZWZlcnJlZCA9IFsiQUxQSEEiLCAiRk9PIiwgIkJBUiJdCisKKyAgICBkZWYgdGVzdF90ZXN0cyhzZWxmKToKKyAgICAgICAgZGVmIGNob29zZShhLCBiKToKKyAgICAgICAgICAgIGlmIGFsbChsaWMgaW4gc2VsZi5wcmVmZXJyZWQgZm9yIGxpYyBpbiBiKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYQorCisgICAgICAgIGZvciBsaWNlbnNlLCBleHBlY3RlZCBpbiBzZWxmLnRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBsaWNlbnNlcyA9IG9lLmxpY2Vuc2UuZmxhdHRlbmVkX2xpY2Vuc2VzKGxpY2Vuc2UsIGNob29zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpY2Vuc2VzLCBleHBlY3RlZCkKKworY2xhc3MgVGVzdENvbXBsZXhDb21iaW5hdGlvbnMoVGVzdFNpbXBsZUNvbWJpbmF0aW9ucyk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICJGT08gJiAoQkFSIHwgQkFaKSZNT08iOiBbIkZPTyIsICJCQVIiLCAiTU9PIl0sCisgICAgICAgICIoQUxQSEF8KEJFVEEmVEhFVEEpfE9NRUdBKSZERUxUQSI6IFsiT01FR0EiLCAiREVMVEEiXSwKKyAgICAgICAgIigoQUxQSEF8QkVUQSkmRk9PKXxCQVoiOiBbIkJFVEEiLCAiRk9PIl0sCisgICAgICAgICIoR1BMLTIuMHxQcm9wcmlldGFyeSkmQlNELTQtY2xhdXNlJk1JVCI6IFsiR1BMLTIuMCIsICJCU0QtNC1jbGF1c2UiLCAiTUlUIl0sCisgICAgfQorICAgIHByZWZlcnJlZCA9IFsiQkFSIiwgIk9NRUdBIiwgIkJFVEEiLCAiR1BMLTIuMCJdCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfcGF0aC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF9wYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDFjZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfcGF0aC5weQpAQCAtMCwwICsxLDg5IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvZSwgb2UucGF0aAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHNodXRpbAorCitjbGFzcyBUZXN0UmVhbFBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIERJUlMgPSBbICJhIiwgImIiLCAiZXRjIiwgInNiaW4iLCAidXNyIiwgInVzci9iaW4iLCAidXNyL2JpblgiLCAidXNyL3NiaW4iLCAidXNyL2luY2x1ZGUiLCAidXNyL2luY2x1ZGUvZ2RibSIgXQorICAgIEZJTEVTID0gWyAiZXRjL3Bhc3N3ZCIsICJiL2ZpbGUiIF0KKyAgICBMSU5LUyA9IFsKKyAgICAgICAgKCAiYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiApLAorICAgICAgICAoICJiaW5YIiwgICAgICAgICAgICAidXNyL2JpblgiLCAgICAgICAgICAgICAiL3Vzci9iaW5YIiApLAorICAgICAgICAoICJjIiwgICAgICAgICAgICAgICAiYnJva2VuIiwgICAgICAgICAgICAgICAiL2Jyb2tlbiIgKSwKKyAgICAgICAgKCAiZXRjL3Bhc3N3ZC0xIiwgICAgInBhc3N3ZCIsICAgICAgICAgICAgICAgIi9ldGMvcGFzc3dkIiApLAorICAgICAgICAoICJldGMvcGFzc3dkLTIiLCAgICAicGFzc3dkLTEiLCAgICAgICAgICAgICAiL2V0Yy9wYXNzd2QiICksCisgICAgICAgICggImV0Yy9wYXNzd2QtMyIsICAgICIvZXRjL3Bhc3N3ZC0xIiwgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKKyAgICAgICAgKCAiZXRjL3NoYWRvdy0xIiwgICAgIi9ldGMvc2hhZG93IiwgICAgICAgICAgIi9ldGMvc2hhZG93IiApLAorICAgICAgICAoICJldGMvc2hhZG93LTIiLCAgICAiL2V0Yy9zaGFkb3ctMSIsICAgICAgICAiL2V0Yy9zaGFkb3ciICksCisgICAgICAgICggInByb2ctQSIsICAgICAgICAgICJiaW4vcHJvZy1BIiwgICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUEiICksCisgICAgICAgICggInByb2ctQiIsICAgICAgICAgICIvYmluL3Byb2ctQiIsICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUIiICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1DIiwgICIuLi8uLi9zYmluL3Byb2ctQyIsICAgICIvc2Jpbi9wcm9nLUMiICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1EIiwgICIvc2Jpbi9wcm9nLUQiLCAgICAgICAgICIvc2Jpbi9wcm9nLUQiICksCisgICAgICAgICggInVzci9iaW5YL3Byb2ctRSIsICIuLi9zYmluL3Byb2ctRSIsICAgICAgIE5vbmUgKSwKKyAgICAgICAgKCAidXNyL2Jpbi9wcm9nLUYiLCAgIi4uLy4uLy4uL3NiaW4vcHJvZy1GIiwgIi9zYmluL3Byb2ctRiIgKSwKKyAgICAgICAgKCAibG9vcCIsICAgICAgICAgICAgImEvbG9vcCIsICAgICAgICAgICAgICAgTm9uZSApLAorICAgICAgICAoICJhL2xvb3AiLCAgICAgICAgICAiLi4vbG9vcCIsICAgICAgICAgICAgICBOb25lICksCisgICAgICAgICggImIvdGVzdCIsICAgICAgICAgICJmaWxlL2ZvbyIsICAgICAgICAgICAgICIvYi9maWxlL2ZvbyIgKSwKKyAgICBdCisKKyAgICBMSU5LU19QSFlTID0gWworICAgICAgICAoICIuLyIsICAgICAgICAgICIvIiwgICAgICAgICAgICAgICAgIiIgKSwKKyAgICAgICAgKCAiYmluWC9wcm9nLUUiLCAiL3Vzci9zYmluL3Byb2ctRSIsICIvc2Jpbi9wcm9nLUUiICksCisgICAgXQorCisgICAgRVhDRVBUSU9OUyA9IFsKKyAgICAgICAgKCAibG9vcCIsICAgZXJybm8uRUxPT1AgKSwKKyAgICAgICAgKCAiYi90ZXN0IiwgZXJybm8uRU5PRU5UICksCisgICAgXQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICNvcy5zeXN0ZW0oInRyZWUgLUYgJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudG1wZGlyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXggPSAib2UtdGVzdF9wYXRoIikKKyAgICAgICAgc2VsZi5yb290ID0gb3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiUiIpCisKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiX3JlYWwiKSkKKyAgICAgICAgb3Muc3ltbGluaygiX3JlYWwiLCBzZWxmLnJvb3QpCisKKyAgICAgICAgZm9yIGQgaW4gc2VsZi5ESVJTOgorICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZCkpCisgICAgICAgIGZvciBmIGluIHNlbGYuRklMRVM6CisgICAgICAgICAgICBmaWxlKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGYpLCAidyIpCisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1M6CisgICAgICAgICAgICBvcy5zeW1saW5rKGxbMV0sIG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGxbMF0pKQorCisgICAgZGVmIF9fcmVhbHBhdGgoc2VsZiwgZmlsZSwgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBUcnVlKToKKyAgICAgICAgcmV0dXJuIG9lLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZmlsZSksIHNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBhc3N1bWVfZGlyKQorCisgICAgZGVmIHRlc3Rfbm9ybShzZWxmKToKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LUzoKKyAgICAgICAgICAgIGlmIGxbMl0gPT0gTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0YXJnZXRfcCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBUcnVlKQorICAgICAgICAgICAgdGFyZ2V0X2wgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgRmFsc2UpCisKKyAgICAgICAgICAgIGlmIGxbMl0gIT0gRmFsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRfcCwgdGFyZ2V0X2wpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzJdLCB0YXJnZXRfcFtsZW4oc2VsZi5yb290KTpdKQorCisgICAgZGVmIHRlc3RfcGh5cyhzZWxmKToKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LU19QSFlTOgorICAgICAgICAgICAgdGFyZ2V0X3AgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgVHJ1ZSkKKyAgICAgICAgICAgIHRhcmdldF9sID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIEZhbHNlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMV0sIHRhcmdldF9wW2xlbihzZWxmLnJvb3QpOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMl0sIHRhcmdldF9sW2xlbihzZWxmLnJvb3QpOl0pCisKKyAgICBkZWYgdGVzdF9sb29wKHNlbGYpOgorICAgICAgICBmb3IgZSBpbiBzZWxmLkVYQ0VQVElPTlM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChPU0Vycm9yLCByJ1xbRXJybm8gJXVcXScgJSBlWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3JlYWxwYXRoLCBlWzBdLCBGYWxzZSwgRmFsc2UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdHlwZXMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdHlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3Y2MzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF90eXBlcy5weQpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2UubWFrZXR5cGUgaW1wb3J0IGNyZWF0ZSwgZmFjdG9yeQorCitjbGFzcyBUZXN0VHlwZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRJc0luc3RhbmNlKHNlbGYsIG9iaiwgY2xzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iaiwgY2xzKSkKKworICAgIGRlZiBhc3NlcnRJc05vdChzZWxmLCBvYmosIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0RmFsc2Uob2JqIGlzIG90aGVyKQorCisgICAgZGVmIGFzc2VydEZhY3RvcnlDcmVhdGVkKHNlbGYsIHZhbHVlLCB0eXBlLCAqKmZsYWdzKToKKyAgICAgICAgY2xzID0gZmFjdG9yeSh0eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGNscywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNyZWF0ZSh2YWx1ZSwgdHlwZSwgKipmbGFncyksIGNscykKKworY2xhc3MgVGVzdEJvb2xlYW5UeXBlKFRlc3RUeXBlcyk6CisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnJywgJ2Jvb2xlYW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjcmVhdGUsICdmb28nLCAnYm9vbGVhbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3JlYXRlLCBvYmplY3QoKSwgJ2Jvb2xlYW4nKQorCisgICAgZGVmIHRlc3RfdHJ1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgneScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3llcycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJzEnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0JywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1ZScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ1RSVUUnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0cnVFJywgJ2Jvb2xlYW4nKSkKKworICAgIGRlZiB0ZXN0X2ZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbicsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdubycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCcwJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2YnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFsc2UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnRkFMU0UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFMc2UnLCAnYm9vbGVhbicpKQorCisgICAgZGVmIHRlc3RfYm9vbF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCd5JywgJ2Jvb2xlYW4nKSwgRmFsc2UpCisKK2NsYXNzIFRlc3RMaXN0KFRlc3RUeXBlcyk6CisgICAgZGVmIGFzc2VydExpc3RFcXVhbChzZWxmLCB2YWx1ZSwgdmFsaWQsIHNlcD1Ob25lKToKKyAgICAgICAgb2JqID0gY3JlYXRlKHZhbHVlLCAnbGlzdCcsIHNlcGFyYXRvcj1zZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB2YWxpZCkKKyAgICAgICAgaWYgc2VwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc2VwYXJhdG9yLCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG9iaiksIG9iai5zZXBhcmF0b3Iuam9pbihvYmopKQorCisgICAgZGVmIHRlc3RfbGlzdF9ub3NlcChzZWxmKToKKyAgICAgICAgdGVzdGxpc3QgPSBbJ2FscGhhJywgJ2JldGEnLCAndGhldGEnXQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgYmV0YSB0aGV0YScsIHRlc3RsaXN0KQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgIGJldGFcdHRoZXRhJywgdGVzdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdhbHBoYScsIFsnYWxwaGEnXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfdXNlcnNlcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2ZvbzpiYXInLCBbJ2ZvbycsICdiYXInXSwgJzonKQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnZm9vOmJhcjpiYXonLCBbJ2ZvbycsICdiYXInLCAnYmF6J10sICc6JykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF91dGlscy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDlhYzUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3V0aWxzLnB5CkBAIC0wLDAgKzEsNTEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZS51dGlscyBpbXBvcnQgcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0KKworY2xhc3MgVGVzdFBhY2thZ2VzRmlsdGVyT3V0U3lzdGVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHRoYXQgb2UudXRpbHMucGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0gd29ya3MuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgYmIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ2Fubm90IGltcG9ydCBiYiIpCisKKyAgICAgICAgZCA9IGJiLmRhdGFfc21hcnQuRGF0YVNtYXJ0KCkKKyAgICAgICAgZC5zZXRWYXIoIlBOIiwgImZvbyIpCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZG9jIGZvby1kZXYiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kb2MgZm9vLWRhdGEgZm9vLWRldiIpCisgICAgICAgIHBrZ3MgPSBwYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ3MsIFsiZm9vLWRhdGEiXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1sb2NhbGUtZW4tZ2IiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kYXRhIGZvby1sb2NhbGUtZW4tZ2IiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbImZvby1kYXRhIl0pCisKKworY2xhc3MgVGVzdFRyaW1WZXJzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF92ZXJzaW9uX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKE5vbmUsIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbigoMSwgMiwgMyksIDIpCisKKyAgICBkZWYgdGVzdF9udW1fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oIjEuMi4zIiwgLTEpCisKKyAgICBkZWYgdGVzdF92YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMSksICIxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMiksICIxLjIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyaW1fdmVyc2lvbigiMS4yLjMiLCAzKSwgIjEuMi4zIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgNCksICIxLjIuMyIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lL3R5cGVzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjQ3YzE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZS90eXBlcy5weQpAQCAtMCwwICsxLDE1MyBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBvcworCisKK2NsYXNzIE9FTGlzdChsaXN0KToKKyAgICAiIiJPcGVuRW1iZWRkZWQgJ2xpc3QnIHR5cGUKKworICAgIEFjdHMgYXMgYW4gb3JkaW5hcnkgbGlzdCwgYnV0IGlzIGNvbnN0cnVjdGVkIGZyb20gYSBzdHJpbmcgdmFsdWUgYW5kIGEKKyAgICBzZXBhcmF0b3IgKG9wdGlvbmFsKSwgYW5kIHJlLWpvaW5zIGl0c2VsZiB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZyB3aXRoCisgICAgc3RyKCkuICBTZXQgdGhlIHZhcmlhYmxlIHR5cGUgZmxhZyB0byAnbGlzdCcgdG8gdXNlIHRoaXMgdHlwZSwgYW5kIHRoZQorICAgICdzZXBhcmF0b3InIGZsYWcgbWF5IGJlIHNwZWNpZmllZCAoZGVmYXVsdGluZyB0byB3aGl0ZXNwYWNlKS4iIiIKKworICAgIG5hbWUgPSAibGlzdCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgc2VwYXJhdG9yID0gTm9uZSk6CisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmLCB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIGlmIHNlcGFyYXRvciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5zZXBhcmF0b3IgPSAiICIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VwYXJhdG9yID0gc2VwYXJhdG9yCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VwYXJhdG9yLmpvaW4oc2VsZikKKworZGVmIGNob2ljZSh2YWx1ZSwgY2hvaWNlcyk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdjaG9pY2UnIHR5cGUKKworICAgIEFjdHMgYXMgYSBtdWx0aXBsZSBjaG9pY2UgZm9yIHRoZSB1c2VyLiAgVG8gdXNlIHRoaXMsIHNldCB0aGUgdmFyaWFibGUKKyAgICB0eXBlIGZsYWcgdG8gJ2Nob2ljZScsIGFuZCBzZXQgdGhlICdjaG9pY2VzJyBmbGFnIHRvIGEgc3BhY2Ugc2VwYXJhdGVkCisgICAgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNob2ljZSBhY2NlcHRzIGEgc3RyaW5nLCBub3QgJyVzJyIgJSB0eXBlKHZhbHVlKSkKKworICAgIHZhbHVlID0gdmFsdWUubG93ZXIoKQorICAgIGNob2ljZXMgPSBjaG9pY2VzLmxvd2VyKCkKKyAgICBpZiB2YWx1ZSBub3QgaW4gY2hvaWNlcy5zcGxpdCgpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGNob2ljZSAnJXMnLiAgVmFsaWQgY2hvaWNlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGNob2ljZXMpKQorICAgIHJldHVybiB2YWx1ZQorCitjbGFzcyBOb01hdGNoKG9iamVjdCk6CisgICAgIiIiU3R1YiBweXRob24gcmVnZXggcGF0dGVybiBvYmplY3Qgd2hpY2ggbmV2ZXIgbWF0Y2hlcyBhbnl0aGluZyIiIgorICAgIGRlZiBmaW5kYWxsKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZmluZGl0ZXIoc2VsZiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBtYXRjaChzZWxmLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZWFyY2goc2VsZiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzcGxpdChzZWxmLCBzdHJpbmcsIG1heHNwbGl0PTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGNvdW50PTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN1Ym4ocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworTm9NYXRjaCA9IE5vTWF0Y2goKQorCitkZWYgcmVnZXgodmFsdWUsIHJlZ2V4ZmxhZ3M9Tm9uZSk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdyZWdleCcgdHlwZQorCisgICAgQWN0cyBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgcmV0dXJuaW5nIHRoZSBwcmUtY29tcGlsZWQgcmVndWxhcgorICAgIGV4cHJlc3Npb24gcGF0dGVybiBvYmplY3QuICBUbyB1c2UgdGhpcyB0eXBlLCBzZXQgdGhlIHZhcmlhYmxlIHR5cGUgZmxhZworICAgIHRvICdyZWdleCcsIGFuZCBvcHRpb25hbGx5LCBzZXQgdGhlICdyZWdleGZsYWdzJyB0eXBlIHRvIGEgc3BhY2Ugc2VwYXJhdGVkCisgICAgbGlzdCBvZiB0aGUgZmxhZ3MgdG8gY29udHJvbCB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIChlLmcuCisgICAgRk9PW3JlZ2V4ZmxhZ3NdICs9ICdpZ25vcmVjYXNlJykuICBTZWUgdGhlIHB5dGhvbiBkb2N1bWVudGF0aW9uIG9uIHRoZQorICAgICdyZScgbW9kdWxlIGZvciBhIGxpc3Qgb2YgdmFsaWQgZmxhZ3MuIiIiCisKKyAgICBmbGFndmFsID0gMAorICAgIGlmIHJlZ2V4ZmxhZ3M6CisgICAgICAgIGZvciBmbGFnIGluIHJlZ2V4ZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIGZsYWcgPSBmbGFnLnVwcGVyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmbGFndmFsIHw9IGdldGF0dHIocmUsIGZsYWcpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCByZWdleCBmbGFnICclcyciICUgZmxhZykKKworICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgIyBMZXQncyBlbnN1cmUgdGhhdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYW4gdW5kZWZpbmVkIG9yIGVtcHR5CisgICAgICAgICMgdmFyaWFibGUgaXMgdG8gbWF0Y2ggbm90aGluZy4gSWYgdGhlIHVzZXIgZXhwbGljaXRseSB3YW50cyB0byBtYXRjaAorICAgICAgICAjIGFueXRoaW5nLCB0aGV5IGNhbiBtYXRjaCAnLionIGluc3RlYWQuCisgICAgICAgIHJldHVybiBOb01hdGNoCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiByZS5jb21waWxlKHZhbHVlLCBmbGFndmFsKQorICAgIGV4Y2VwdCByZS5lcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcmVnZXggdmFsdWUgJyVzJzogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGV4Yy5hcmdzWzBdKSkKKworZGVmIGJvb2xlYW4odmFsdWUpOgorICAgICIiIk9wZW5FbWJlZGRlZCAnYm9vbGVhbicgdHlwZQorCisgICAgVmFsaWQgdmFsdWVzIGZvciB0cnVlOiAneWVzJywgJ3knLCAndHJ1ZScsICd0JywgJzEnCisgICAgVmFsaWQgdmFsdWVzIGZvciBmYWxzZTogJ25vJywgJ24nLCAnZmFsc2UnLCAnZicsICcwJworICAgICIiIgorCisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImJvb2xlYW4gYWNjZXB0cyBhIHN0cmluZywgbm90ICclcyciICUgdHlwZSh2YWx1ZSkpCisKKyAgICB2YWx1ZSA9IHZhbHVlLmxvd2VyKCkKKyAgICBpZiB2YWx1ZSBpbiAoJ3llcycsICd5JywgJ3RydWUnLCAndCcsICcxJyk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiB2YWx1ZSBpbiAoJ25vJywgJ24nLCAnZmFsc2UnLCAnZicsICcwJyk6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgYm9vbGVhbiB2YWx1ZSAnJXMnIiAlIHZhbHVlKQorCitkZWYgaW50ZWdlcih2YWx1ZSwgbnVtYmVyYmFzZT0xMCk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdpbnRlZ2VyJyB0eXBlCisKKyAgICBEZWZhdWx0cyB0byBiYXNlIDEwLCBidXQgdGhpcyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBvcHRpb25hbAorICAgICdudW1iZXJiYXNlJyBmbGFnLiIiIgorCisgICAgcmV0dXJuIGludCh2YWx1ZSwgaW50KG51bWJlcmJhc2UpKQorCitfZmxvYXQgPSBmbG9hdAorZGVmIGZsb2F0KHZhbHVlLCBmcm9taGV4PSdmYWxzZScpOgorICAgICIiIk9wZW5FbWJlZGRlZCBmbG9hdGluZyBwb2ludCB0eXBlCisKKyAgICBUbyB1c2UgdGhpcyB0eXBlLCBzZXQgdGhlIHR5cGUgZmxhZyB0byAnZmxvYXQnLCBhbmQgb3B0aW9uYWxseSBzZXQgdGhlCisgICAgJ2Zyb21oZXgnIGZsYWcgdG8gYSB0cnVlIHZhbHVlIChvYmV5aW5nIHRoZSBzYW1lIHJ1bGVzIGFzIGZvciB0aGUKKyAgICAnYm9vbGVhbicgdHlwZSkgaWYgdGhlIHZhbHVlIGlzIGluIGJhc2UgMTYgcmF0aGVyIHRoYW4gYmFzZSAxMC4iIiIKKworICAgIGlmIGJvb2xlYW4oZnJvbWhleCk6CisgICAgICAgIHJldHVybiBfZmxvYXQuZnJvbWhleCh2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX2Zsb2F0KHZhbHVlKQorCitkZWYgcGF0aCh2YWx1ZSwgcmVsYXRpdmV0bz0nJywgbm9ybWFsaXplPSd0cnVlJywgbXVzdGV4aXN0PSdmYWxzZScpOgorICAgIHZhbHVlID0gb3MucGF0aC5qb2luKHJlbGF0aXZldG8sIHZhbHVlKQorCisgICAgaWYgYm9vbGVhbihub3JtYWxpemUpOgorICAgICAgICB2YWx1ZSA9IG9zLnBhdGgubm9ybXBhdGgodmFsdWUpCisKKyAgICBpZiBib29sZWFuKG11c3RleGlzdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW4odmFsdWUsICdyJykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ7MH06IHsxfSIuZm9ybWF0KHZhbHVlLCBvcy5zdHJlcnJvcihlcnJuby5FTk9FTlQpKSkKKworICAgIHJldHVybiB2YWx1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZS91dGlscy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlMDg3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2UvdXRpbHMucHkKQEAgLTAsMCArMSwyNzMgQEAKK3RyeToKKyAgICAjIFB5dGhvbiAyCisgICAgaW1wb3J0IGNvbW1hbmRzIGFzIGNtZHN0YXR1cworZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHl0aG9uIDMKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBjbWRzdGF0dXMKKworZGVmIHJlYWRfZmlsZShmaWxlbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbiggZmlsZW5hbWUsICJyIiApCisgICAgZXhjZXB0IElPRXJyb3IgYXMgcmVhc29uOgorICAgICAgICByZXR1cm4gIiIgIyBXQVJOSU5HOiBjYW4ndCByYWlzZSBhbiBlcnJvciBub3cgYmVjYXVzZSBvZiB0aGUgbmV3IFJERVBFTkRTIGhhbmRsaW5nLiBUaGlzIGlzIGEgYml0IHVnbHkuIDpNOgorICAgIGVsc2U6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZGF0YQorICAgIHJldHVybiBOb25lCisKK2RlZiBpZmVsc2UoY29uZGl0aW9uLCBpZnRydWUgPSBUcnVlLCBpZmZhbHNlID0gRmFsc2UpOgorICAgIGlmIGNvbmRpdGlvbjoKKyAgICAgICAgcmV0dXJuIGlmdHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBpZmZhbHNlCisKK2RlZiBjb25kaXRpb25hbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICBpZiBkLmdldFZhcih2YXJpYWJsZSwxKSA9PSBjaGVja3ZhbHVlOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGxlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgaWYgZmxvYXQoZC5nZXRWYXIodmFyaWFibGUsMSkpIDw9IGZsb2F0KGNoZWNrdmFsdWUpOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIHZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKGQuZ2V0VmFyKHZhcmlhYmxlLFRydWUpLCBjaGVja3ZhbHVlKQorICAgIGlmIHJlc3VsdCA8PSAwOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGJvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCk6CisgICAgdmFsMSA9IGQuZ2V0VmFyKHZhcmlhYmxlMSwgVHJ1ZSkKKyAgICB2YWwyID0gZC5nZXRWYXIodmFyaWFibGUyLCBUcnVlKQorICAgIHZhbDEgPSBzZXQodmFsMS5zcGxpdCgpKQorICAgIHZhbDIgPSBzZXQodmFsMi5zcGxpdCgpKQorICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgIGNoZWNrdmFsdWUgPSBzZXQoY2hlY2t2YWx1ZS5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIGNoZWNrdmFsdWUgPSBzZXQoY2hlY2t2YWx1ZSkKKyAgICBpZiBjaGVja3ZhbHVlLmlzc3Vic2V0KHZhbDEpIGFuZCBjaGVja3ZhbHVlLmlzc3Vic2V0KHZhbDIpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oY2hlY2t2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiIKKworZGVmIHNldF9pbnRlcnNlY3QodmFyaWFibGUxLCB2YXJpYWJsZTIsIGQpOgorICAgICIiIgorICAgIEV4cGFuZCBib3RoIHZhcmlhYmxlcywgaW50ZXJwcmV0IHRoZW0gYXMgbGlzdHMgb2Ygc3RyaW5ncywgYW5kIHJldHVybiB0aGUKKyAgICBpbnRlcnNlY3Rpb24gYXMgYSBmbGF0dGVuZWQgc3RyaW5nLgorCisgICAgRm9yIGV4YW1wbGU6CisgICAgczEgPSAiYSBiIGMiCisgICAgczIgPSAiYiBjIGQiCisgICAgczMgPSBzZXRfaW50ZXJzZWN0KHMxLCBzMikKKyAgICA9PiBzMyA9ICJiIGMiCisgICAgIiIiCisgICAgdmFsMSA9IHNldChkLmdldFZhcih2YXJpYWJsZTEsIFRydWUpLnNwbGl0KCkpCisgICAgdmFsMiA9IHNldChkLmdldFZhcih2YXJpYWJsZTIsIFRydWUpLnNwbGl0KCkpCisgICAgcmV0dXJuICIgIi5qb2luKHZhbDEgJiB2YWwyKQorCitkZWYgcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgICMgU2VlIGlmIHZhciBlbmRzIHdpdGggYW55IG9mIHRoZSBzdWZmaXhlcyBsaXN0ZWQgYW5kCisgICAgIyByZW1vdmUgaXQgaWYgZm91bmQKKyAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICBpZiB2YXIuZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgIHZhciA9IHZhci5yZXBsYWNlKHN1ZmZpeCwgIiIpCisKKyAgICBwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgIGlmIHByZWZpeCBhbmQgdmFyLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgdmFyID0gdmFyLnJlcGxhY2UocHJlZml4LCAiIikKKworICAgIHJldHVybiB2YXIKKworZGVmIHN0cl9maWx0ZXIoZiwgc3RyLCBkKToKKyAgICBmcm9tIHJlIGltcG9ydCBtYXRjaAorICAgIHJldHVybiAiICIuam9pbihmaWx0ZXIobGFtYmRhIHg6IG1hdGNoKGYsIHgsIDApLCBzdHIuc3BsaXQoKSkpCisKK2RlZiBzdHJfZmlsdGVyX291dChmLCBzdHIsIGQpOgorICAgIGZyb20gcmUgaW1wb3J0IG1hdGNoCisgICAgcmV0dXJuICIgIi5qb2luKGZpbHRlcihsYW1iZGEgeDogbm90IG1hdGNoKGYsIHgsIDApLCBzdHIuc3BsaXQoKSkpCisKK2RlZiBwYXJhbV9ib29sKGNmZywgZmllbGQsIGRmbHQgPSBOb25lKToKKyAgICAiIiJMb29rdXAgPGZpZWxkPiBpbiA8Y2ZnPiBtYXAgYW5kIGNvbnZlcnQgaXQgdG8gYSBib29sZWFuOyB0YWtlCisgICAgPGRmbHQ+IHdoZW4gdGhpcyA8ZmllbGQ+IGRvZXMgbm90IGV4aXN0IiIiCisgICAgdmFsdWUgPSBjZmcuZ2V0KGZpZWxkLCBkZmx0KQorICAgIHN0cnZhbHVlID0gc3RyKHZhbHVlKS5sb3dlcigpCisgICAgaWYgc3RydmFsdWUgaW4gKCd5ZXMnLCAneScsICd0cnVlJywgJ3QnLCAnMScpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgc3RydmFsdWUgaW4gKCdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHZhbHVlIGZvciBib29sZWFuIHBhcmFtZXRlciAnJXMnOiAnJXMnIiAlIChmaWVsZCwgdmFsdWUpKQorCitkZWYgaW5oZXJpdHMoZCwgKmNsYXNzZXMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBtZXRhZGF0YSBpbmhlcml0cyBhbnkgb2YgdGhlIHNwZWNpZmllZCBjbGFzc2VzIiIiCisgICAgcmV0dXJuIGFueShiYi5kYXRhLmluaGVyaXRzX2NsYXNzKGNscywgZCkgZm9yIGNscyBpbiBjbGFzc2VzKQorCitkZWYgZmVhdHVyZXNfYmFja2ZpbGwodmFyLGQpOgorICAgICMgVGhpcyBjb25zdHJ1Y3QgYWxsb3dzIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgdG8gdmFyaWFibGUgc3BlY2lmaWVkCisgICAgIyBhcyB2YXIKKyAgICAjIEV4YW1wbGUgZm9yIHZhciA9ICJESVNUUk9fRkVBVFVSRVMiCisgICAgIyBUaGlzIGNvbnN0cnVjdCBhbGxvd3MgdGhlIGFkZGl0aW9uIG9mIG5ldyBmZWF0dXJlcyB0byBESVNUUk9fRkVBVFVSRVMKKyAgICAjIHRoYXQgaWYgbm90IHByZXNlbnQgd291bGQgZGlzYWJsZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5LCB3aXRob3V0CisgICAgIyBkaXN0dXJiaW5nIGRpc3RyaWJ1dGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgc2V0IERJU1RST19GRUFUVVJFUy4KKyAgICAjIERpc3RyaWJ1dGlvbnMgd2FudGluZyB0byBlbGlkZSBhIHZhbHVlIGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTCBzaG91bGQKKyAgICAjIGFkZCB0aGUgZmVhdHVyZSB0byBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRAorICAgIGZlYXR1cmVzID0gKGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBiYWNrZmlsbCA9IChkLmdldFZhcih2YXIrIl9CQUNLRklMTCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgY29uc2lkZXJlZCA9IChkLmdldFZhcih2YXIrIl9CQUNLRklMTF9DT05TSURFUkVEIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGFkZGZlYXR1cmVzID0gW10KKyAgICBmb3IgZmVhdHVyZSBpbiBiYWNrZmlsbDoKKyAgICAgICAgaWYgZmVhdHVyZSBub3QgaW4gZmVhdHVyZXMgYW5kIGZlYXR1cmUgbm90IGluIGNvbnNpZGVyZWQ6CisgICAgICAgICAgICBhZGRmZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSkKKworICAgIGlmIGFkZGZlYXR1cmVzOgorICAgICAgICBkLmFwcGVuZFZhcih2YXIsICIgIiArICIgIi5qb2luKGFkZGZlYXR1cmVzKSkKKworCitkZWYgcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgbGlzdCBvZiBwYWNrYWdlcyBmcm9tIFBBQ0tBR0VTIHdpdGggdGhlICJzeXN0ZW0iIHBhY2thZ2VzIHN1Y2ggYXMKKyAgICBQTi1kYmcgUE4tZG9jIFBOLWxvY2FsZS1lYi1nYiByZW1vdmVkLgorICAgICIiIgorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBibGFja2xpc3QgPSBtYXAobGFtYmRhIHN1ZmZpeDogcG4gKyBzdWZmaXgsICgnJywgJy1kYmcnLCAnLWRldicsICctZG9jJywgJy1sb2NhbGUnLCAnLXN0YXRpY2RldicpKQorICAgIGxvY2FsZXBrZyA9IHBuICsgIi1sb2NhbGUtIgorICAgIHBrZ3MgPSBbXQorCisgICAgZm9yIHBrZyBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBwa2cgbm90IGluIGJsYWNrbGlzdCBhbmQgbG9jYWxlcGtnIG5vdCBpbiBwa2c6CisgICAgICAgICAgICBwa2dzLmFwcGVuZChwa2cpCisgICAgcmV0dXJuIHBrZ3MKKworZGVmIGdldHN0YXR1c291dHB1dChjbWQpOgorICAgIHJldHVybiBjbWRzdGF0dXMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKworCitkZWYgdHJpbV92ZXJzaW9uKHZlcnNpb24sIG51bV9wYXJ0cz0yKToKKyAgICAiIiIKKyAgICBSZXR1cm4ganVzdCB0aGUgZmlyc3QgPG51bV9wYXJ0cz4gb2YgPHZlcnNpb24+LCBzcGxpdCBieSBwZXJpb2RzLiAgRm9yCisgICAgZXhhbXBsZSwgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIDIpIHdpbGwgcmV0dXJuICIxLjIiLgorICAgICIiIgorICAgIGlmIHR5cGUodmVyc2lvbikgaXMgbm90IHN0cjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJWZXJzaW9uIHNob3VsZCBiZSBhIHN0cmluZyIpCisgICAgaWYgbnVtX3BhcnRzIDwgMToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHNwbGl0IHRvIHBhcnRzIDwgMSIpCisKKyAgICBwYXJ0cyA9IHZlcnNpb24uc3BsaXQoIi4iKQorICAgIHRyaW1tZWQgPSAiLiIuam9pbihwYXJ0c1s6bnVtX3BhcnRzXSkKKyAgICByZXR1cm4gdHJpbW1lZAorCitkZWYgY3B1X2NvdW50KCk6CisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKKworZGVmIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhkLCBjbWRzKToKKyAgICBpZiBjbWRzIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgZm9yIGNtZCBpbiBjbWRzLnN0cmlwKCkuc3BsaXQoJzsnKToKKyAgICAgICAgY21kID0gY21kLnN0cmlwKCkKKyAgICAgICAgaWYgY21kICE9ICcnOgorICAgICAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICVzIC4uLiIgJSBjbWQpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoY21kLCBkKQorCitkZWYgbXVsdGlwcm9jZXNzX2V4ZWMoY29tbWFuZHMsIGZ1bmN0aW9uKToKKyAgICBpbXBvcnQgc2lnbmFsCisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworCisgICAgaWYgbm90IGNvbW1hbmRzOgorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBpbml0X3dvcmtlcigpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgbnByb2MgPSBtaW4obXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpLCBsZW4oY29tbWFuZHMpKQorICAgIHBvb2wgPSBiYi51dGlscy5tdWx0aXByb2Nlc3Npbmdwb29sKG5wcm9jLCBpbml0X3dvcmtlcikKKyAgICBpbWFwID0gcG9vbC5pbWFwKGZ1bmN0aW9uLCBjb21tYW5kcykKKworICAgIHRyeToKKyAgICAgICAgcmVzID0gbGlzdChpbWFwKQorICAgICAgICBwb29sLmNsb3NlKCkKKyAgICAgICAgcG9vbC5qb2luKCkKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGZvciByZXN1bHQgaW4gcmVzOgorICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcG9vbC50ZXJtaW5hdGUoKQorICAgICAgICBwb29sLmpvaW4oKQorICAgICAgICByYWlzZQorCitkZWYgc3F1YXNoc3BhY2VzKHN0cmluZyk6CisgICAgaW1wb3J0IHJlCisgICAgcmV0dXJuIHJlLnN1YigiXHMrIiwgIiAiLCBzdHJpbmcpLnN0cmlwKCkKKworIworIyBQeXRob24gMi43IGRvZXNuJ3QgaGF2ZSB0aHJlYWRlZCBwb29scyAoanVzdCBtdWx0aXByb2Nlc3NpbmcpCisjIHNvIGltcGxlbWVudCBhIHZlcnNpb24gaGVyZQorIworCitmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQorZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorCitjbGFzcyBUaHJlYWRlZFdvcmtlcihUaHJlYWQpOgorICAgICIiIlRocmVhZCBleGVjdXRpbmcgdGFza3MgZnJvbSBhIGdpdmVuIHRhc2tzIHF1ZXVlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2tzLCB3b3JrZXJfaW5pdCwgd29ya2VyX2VuZCk6CisgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnRhc2tzID0gdGFza3MKKyAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisKKyAgICAgICAgc2VsZi53b3JrZXJfaW5pdCA9IHdvcmtlcl9pbml0CisgICAgICAgIHNlbGYud29ya2VyX2VuZCA9IHdvcmtlcl9lbmQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGZyb20gUXVldWUgaW1wb3J0IEVtcHR5CisKKyAgICAgICAgaWYgc2VsZi53b3JrZXJfaW5pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud29ya2VyX2luaXQoc2VsZikKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMsIGFyZ3MsIGthcmdzID0gc2VsZi50YXNrcy5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi53b3JrZXJfZW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndvcmtlcl9lbmQoc2VsZikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCAqYXJncywgKiprYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcHJpbnQgZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tzLnRhc2tfZG9uZSgpCisKK2NsYXNzIFRocmVhZGVkUG9vbDoKKyAgICAiIiJQb29sIG9mIHRocmVhZHMgY29uc3VtaW5nIHRhc2tzIGZyb20gYSBxdWV1ZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fd29ya2VycywgbnVtX3Rhc2tzLCB3b3JrZXJfaW5pdD1Ob25lLAorICAgICAgICAgICAgd29ya2VyX2VuZD1Ob25lKToKKyAgICAgICAgc2VsZi50YXNrcyA9IFF1ZXVlKG51bV90YXNrcykKKyAgICAgICAgc2VsZi53b3JrZXJzID0gW10KKworICAgICAgICBmb3IgXyBpbiByYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXIgPSBUaHJlYWRlZFdvcmtlcihzZWxmLnRhc2tzLCB3b3JrZXJfaW5pdCwgd29ya2VyX2VuZCkKKyAgICAgICAgICAgIHNlbGYud29ya2Vycy5hcHBlbmQod29ya2VyKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisKKyAgICBkZWYgYWRkX3Rhc2soc2VsZiwgZnVuYywgKmFyZ3MsICoqa2FyZ3MpOgorICAgICAgICAiIiJBZGQgYSB0YXNrIHRvIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLnB1dCgoZnVuYywgYXJncywga2FyZ3MpKQorCisgICAgZGVmIHdhaXRfY29tcGxldGlvbihzZWxmKToKKyAgICAgICAgIiIiV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhbGwgdGhlIHRhc2tzIGluIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLmpvaW4oKQorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5qb2luKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkYTkyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIG1vZHVsZXMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9tYXN0ZXJpbWFnZS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9tYXN0ZXJpbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJmOWViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5CkBAIC0wLDAgKzEsMjAxIEBACisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgdG8gdGVzdGltYWdlLmJiY2xhc3MgdG8gZGVwbG95IGltYWdlcyBhbmQgcnVuCisjIHRlc3RzIHVzaW5nIGEgIm1hc3RlciBpbWFnZSIgLSB0aGlzIGlzIGEgImtub3duIGdvb2QiIGltYWdlIHRoYXQgaXMKKyMgaW5zdGFsbGVkIG9udG8gdGhlIGRldmljZSBhcyBwYXJ0IG9mIGluaXRpYWwgc2V0dXAgYW5kIHdpbGwgYmUgYm9vdGVkIGludG8KKyMgd2l0aCBubyBpbnRlcmFjdGlvbjsgd2UgY2FuIHRoZW4gdXNlIGl0IHRvIGRlcGxveSB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkCisjIHRvIGEgc2Vjb25kIHBhcnRpdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHMuCisjCisjIEZvciBhbiBleGFtcGxlIG1hc3RlciBpbWFnZSwgc2VlIGNvcmUtaW1hZ2UtdGVzdG1hc3RlcgorIyAobWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIpCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdGltZQoraW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0IG9lcWEudGFyZ2V0Y29udHJvbAoraW1wb3J0IG9lcWEudXRpbHMuc3NoY29udHJvbCBhcyBzc2hjb250cm9sCitpbXBvcnQgb2VxYS51dGlscy5jb21tYW5kcyBhcyBjb21tYW5kcworZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKKworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2NsYXNzIE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQob2VxYS50YXJnZXRjb250cm9sLkJhc2VUYXJnZXQpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gWyd0YXIuZ3onLCAndGFyLmJ6MiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICAgICAgIyB0YXJnZXQgaXAKKyAgICAgICAgYWRkciA9IGQuZ2V0VmFyKCJURVNUX1RBUkdFVF9JUCIsIFRydWUpIG9yIGJiLmZhdGFsKCdQbGVhc2Ugc2V0IFRFU1RfVEFSR0VUX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgeW91IHdhbnQgdG8gcnVuIHRoZSB0ZXN0cyBvbi4nKQorICAgICAgICBzZWxmLmlwID0gYWRkci5zcGxpdCgiOiIpWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IGFkZHIuc3BsaXQoIjoiKVsxXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IE5vbmUKKyAgICAgICAgYmIubm90ZSgiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGQuZ2V0VmFyKCJURVNUX1NFUlZFUl9JUCIsIFRydWUpCisgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9pcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnaXAnLCAncm91dGUnLCAnZ2V0Jywgc2VsZi5pcCBdKS5zcGxpdCgiXG4iKVswXS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3N0IElQIGFkZHJlc3MgKGFsdGVybmF0aXZlbHkgeW91IGNhbiBzZXQgVEVTVF9TRVJWRVJfSVAgd2l0aCB0aGUgSVAgYWRkcmVzcyBvZiB0aGlzIG1hY2hpbmUpOiAlcyIgJSBlKQorICAgICAgICBiYi5ub3RlKCJTZXJ2ZXIgSVA6ICVzIiAlIHNlbGYuc2VydmVyX2lwKQorCisgICAgICAgICMgdGVzdCByb290ZnMgKyBrZXJuZWwKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGUgPSBzZWxmLmdldF9pbWFnZV9mc3R5cGUoZCkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgJy4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYua2VybmVsID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFIiwgRmFsc2UpICsgJy0nICsgZC5nZXRWYXIoJ01BQ0hJTkUnLCBGYWxzZSkgKyAnLmJpbicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICAjIHdlIGNvdWxkJ3ZlIGNoZWNrZWQgdGhhdCBJTUFHRV9GU1RZUEVTIGNvbnRhaW5zIHRhci5neiBidXQgdGhlIGNvbmZpZyBmb3IgcnVubmluZyB0ZXN0aW1hZ2UgbWlnaHQgbm90IGJlCisgICAgICAgICAgICAjIHRoZSBzYW1lIGFzIHRoZSBjb25maWcgd2l0aCB3aGljaCB0aGUgaW1hZ2Ugd2FzIGJ1aWxkLCBpZQorICAgICAgICAgICAgIyB5b3UgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8gd2l0aCBJTUFHRV9GU1RZUEVTICs9ICJ0YXIuZ3oiCisgICAgICAgICAgICAjIGFuZCB5b3VyIGF1dG9idWlsZGVyIG92ZXJ3cml0ZXMgdGhlIGNvbmZpZywgYWRkcyB0aGUgdGVzdCBiaXRzIGFuZCBydW5zIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZQorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHJvb3RmcyBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgaW1hZ2UgP1xuSWYgeWVzLCBkaWQgeW91IGJ1aWxkIGl0IHdpdGggSU1BR0VfRlNUWVBFUyArPSBcInRhci5nelwiID8gXAorICAgICAgICAgICAgICAgICAgICAgIFxuRXhwZWN0ZWQgcGF0aDogJXMiICUgc2VsZi5yb290ZnMpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLmtlcm5lbCk6CisgICAgICAgICAgICBiYi5mYXRhbCgiTm8ga2VybmVsIGZvdW5kLiBFeHBlY3RlZCBwYXRoOiAlcyIgJSBzZWxmLmtlcm5lbCkKKworICAgICAgICAjIG1hc3RlciBzc2ggY29ubmVjdGlvbgorICAgICAgICBzZWxmLm1hc3RlciA9IE5vbmUKKyAgICAgICAgIyBpZiB0aGUgdXNlciBrbm93cyB3aGF0IHRoZXkgYXJlIGRvaW5nLCB0aGVuIGJ5IGFsbCBtZWFucy4uLgorICAgICAgICBzZWxmLnVzZXJfY21kcyA9IGQuZ2V0VmFyKCJURVNUX0RFUExPWV9DTURTIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IE5vbmUKKworICAgICAgICAjIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdGhhdCBjb250cm9scyB0aGUgcG93ZXIgZm9yIGEgYm9hcmQKKyAgICAgICAgIyBlLmc6IFRFU1RfUE9XRVJDT05UUk9MX0NNRCA9ICIvaG9tZS91c2VyL215c2NyaXB0cy9wb3dlcmNvbnRyb2wucHkgJHtNQUNISU5FfSB3aGF0LWV2ZXItb3RoZXItYXJncy10aGUtc2NyaXB0LXdhbnRzIgorICAgICAgICAjIHRoZSBjb21tYW5kIHNob3VsZCB0YWtlIGFzIHRoZSBsYXN0IGFyZ3VtZW50ICJvZmYiIGFuZCAib24iIGFuZCAiY3ljbGUiIChvZmYsIG9uKQorICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9jbWQgPSBkLmdldFZhcigiVEVTVF9QT1dFUkNPTlRST0xfQ01EIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9hcmdzID0gZC5nZXRWYXIoIlRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1MiLCBGYWxzZSkgb3IgIiIKKworICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfY21kID0gZC5nZXRWYXIoIlRFU1RfU0VSSUFMQ09OVFJPTF9DTUQiLCBUcnVlKSBvciBOb25lCisgICAgICAgIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzID0gZC5nZXRWYXIoIlRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTIiwgRmFsc2UpIG9yICIiCisKKyAgICAgICAgc2VsZi5vcmlnZW52ID0gb3MuZW52aXJvbgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQgb3Igc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgICMgdGhlIGV4dGVybmFsIHNjcmlwdCBmb3IgY29udHJvbGxpbmcgcG93ZXIgbWlnaHQgdXNlIHNzaAorICAgICAgICAgICAgIyBzc2ggKyBrZXlzIG1lYW5zIHdlIG5lZWQgdGhlIG9yaWdpbmFsIHVzZXIgZW52CisgICAgICAgICAgICBiYm9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKSBvciB7fQorICAgICAgICAgICAgZm9yIGtleSBpbiBiYm9yaWdlbnY6CisgICAgICAgICAgICAgICAgdmFsID0gYmJvcmlnZW52LmdldFZhcihrZXksIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdlbnZba2V5XSA9IHN0cih2YWwpCisKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9jbWQgPSAiJXMgJXMiICUgKHNlbGYucG93ZXJjb250cm9sX2NtZCwgc2VsZi5wb3dlcmNvbnRyb2xfYXJncykKKyAgICAgICAgaWYgc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzOgorICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsY29udHJvbF9jbWQgPSAiJXMgJXMiICUgKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzKQorCisgICAgZGVmIHBvd2VyX2N0bChzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQ6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMiICUgKHNlbGYucG93ZXJjb250cm9sX2NtZCwgbXNnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbW1hbmRzLnJ1bkNtZChjbWQsIGFzc2VydF9lcnJvcj1GYWxzZSwgcHJlZXhlY19mbj1vcy5zZXRzaWQsIGVudj1zZWxmLm9yaWdlbnYpCisgICAgICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoc3RyKGUpKQorCisgICAgZGVmIHBvd2VyX2N5Y2xlKHNlbGYsIGNvbm4pOgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQ6CisgICAgICAgICAgICAjIGJlIG5pY2UsIGRvbid0IGp1c3QgY3V0IHBvd2VyCisgICAgICAgICAgICBjb25uLnJ1bigic2h1dGRvd24gLWggbm93IikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICBzZWxmLnBvd2VyX2N0bCgiY3ljbGUiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBjb25uLnJ1bigicmVib290IikKKyAgICAgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJGYWlsZWQgcmVib290aW5nIHRhcmdldCBhbmQgbm8gcG93ZXIgY29udHJvbCBjb21tYW5kIGRlZmluZWQuIFlvdSBuZWVkIHRvIG1hbnVhbGx5IHJlc2V0IHRoZSBkZXZpY2UuXG4lcyIgJSBvdXRwdXQpCisKKyAgICBkZWYgX3dhaXRfdW50aWxfYm9vdGVkKHNlbGYpOgorICAgICAgICAnJycgV2FpdHMgdW50aWwgdGhlIHRhcmdldCBkZXZpY2UgaGFzIGJvb3RlZCAoaWYgd2UgaGF2ZSBqdXN0IHBvd2VyIGN5Y2xlZCBpdCkgJycnCisgICAgICAgICMgU3ViY2xhc3NlcyB3aXRoIGJldHRlciBtZXRob2RzIG9mIGRldGVybWluaW5nIGJvb3QgY2FuIG92ZXJyaWRlIHRoaXMKKyAgICAgICAgdGltZS5zbGVlcCgxMjApCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICAjIGJhc2UgY2xhc3MganVzdCBzZXRzIHRoZSBzc2ggbG9nIGZpbGUgZm9yIHVzCisgICAgICAgIHN1cGVyKE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCisgICAgICAgIHNlbGYubWFzdGVyID0gc3NoY29udHJvbC5TU0hDb250cm9sKGlwPXNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHRpbWVvdXQ9NjAwLCBwb3J0PXNlbGYucG9ydCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzZWxmLm1hc3Rlci5ydW4oImNhdCAvZXRjL21hc3RlcmltYWdlIikKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICAjIFdlJ3JlIG5vdCBib290ZWQgaW50byB0aGUgbWFzdGVyIGltYWdlLCBzbyB0cnkgcmVib290aW5nCisgICAgICAgICAgICBiYi5wbGFpbigiJXMgLSBib290aW5nIGludG8gdGhlIG1hc3RlciBpbWFnZSIgJSBzZWxmLnBuKQorICAgICAgICAgICAgc2VsZi5wb3dlcl9jdGwoImN5Y2xlIikKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfdW50aWxfYm9vdGVkKCkKKworICAgICAgICBiYi5wbGFpbigiJXMgLSBkZXBsb3lpbmcgaW1hZ2Ugb24gdGFyZ2V0IiAlIHNlbGYucG4pCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5tYXN0ZXIucnVuKCJjYXQgL2V0Yy9tYXN0ZXJpbWFnZSIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHNzaCBjb25uZWN0aXZpdHkgb3IgdGFyZ2V0IGlzbid0IHJ1bm5pbmcgYSBtYXN0ZXIgaW1hZ2UuXG4lcyIgJSBvdXRwdXQpCisgICAgICAgIGlmIHNlbGYudXNlcl9jbWRzOgorICAgICAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IHNlbGYudXNlcl9jbWRzLnNwbGl0KCJcbiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RlcGxveSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgZGVwbG95aW5nIHRlc3QgaW1hZ2U6ICVzIiAlIGUpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gYm9vdCB0ZXN0IGltYWdlIG9uIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzZWxmLl9zdGFydCgpCisgICAgICAgICMgc2V0IHRoZSBzc2ggb2JqZWN0IGZvciB0aGUgdGFyZ2V0L3Rlc3QgaW1hZ2UKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc3NoY29udHJvbC5TU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHBvcnQ9c2VsZi5wb3J0KQorICAgICAgICBiYi5wbGFpbigiJXMgLSBzdGFydCBydW5uaW5nIHRlc3RzIiAlIHNlbGYucG4pCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gcmVib290L3Bvd2VyY3ljbGUgdGFyZ2V0IiAlIHNlbGYucG4pCisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5jb25uZWN0aW9uKQorCisKK2NsYXNzIEd1bW1pYm9vdFRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoR3VtbWlib290VGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICAjIHRoaXMgdGhlIHZhbHVlIHdlIG5lZWQgdG8gc2V0IGluIHRoZSBMb2FkZXJFbnRyeU9uZVNob3QgRUZJIHZhcmlhYmxlCisgICAgICAgICMgc28gdGhlIHN5c3RlbSBib290cyB0aGUgJ3Rlc3QnIGJvb3Rsb2FkZXIgbGFiZWwgYW5kIG5vdCB0aGUgZGVmYXVsdAorICAgICAgICAjIFRoZSBmaXJzdCBmb3VyIGJ5dGVzIGFyZSBFRkkgYml0cywgYW5kIHRoZSByZXN0IGlzIGFuIHV0Zi0xNmxlIHN0cmluZworICAgICAgICAjIChFRkkgdmFycyB2YWx1ZXMgbmVlZCB0byBiZSB1dGYtMTYpCisgICAgICAgICMgJCBlY2hvIC1lbiAidGVzdFwwIiB8IGljb252IC1mIGFzY2lpIC10IHV0Zi0xNmxlIHwgaGV4ZHVtcCAtQworICAgICAgICAjIDAwMDAwMDAwICA3NCAwMCA2NSAwMCA3MyAwMCA3NCAwMCAgMDAgMDAgICAgICAgICAgICAgICAgICAgIHx0LmUucy50Li4ufAorICAgICAgICBzZWxmLmVmaXZhcnZhbHVlID0gcidceDA3XHgwMFx4MDBceDAwXHg3NFx4MDBceDY1XHgwMFx4NzNceDAwXHg3NFx4MDBceDAwXHgwMCcKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IFsKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgYm9vdCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW9kcHJvYmUgZWZpdmFyZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtdCBlZml2YXJmcyBlZml2YXJmcyAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzJywKKyAgICAgICAgICAgICAgICAnY3Agfi90ZXN0LWtlcm5lbCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgJ3ByaW50ZiAiJXMiID4gL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFycy9Mb2FkZXJFbnRyeU9uZVNob3QtNGE2N2IwODItMGE0Yy00MWNmLWI2YzctNDQwYjI5YmI4YzRmJyAlIHNlbGYuZWZpdmFydmFsdWUKKyAgICAgICAgICAgICAgICBdCisKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IG1vdW50ZWQKKyAgICAgICAgc2VsZi5tYXN0ZXIucnVuKCJ1bW91bnQgL2Jvb3Q7IHVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IHVtb3VudCAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzOyIpCisgICAgICAgICMgZnJvbSBub3cgb24sIGV2ZXJ5IGRlcGxveSBjbWQgc2hvdWxkIHJldHVybiAwCisgICAgICAgICMgZWxzZSBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gYnkgc3NoY29udHJvbAorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuIiArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgIyB0aGVyZSBhcmUgYmV0dGVyIHdheXMgdGhhbiBhIHRpbWVvdXQgYnV0IHRoaXMgc2hvdWxkIHdvcmsgZm9yIG5vdworICAgICAgICB0aW1lLnNsZWVwKDEyMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy90ZXN0dGFyZ2V0bG9hZGVyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL3Rlc3R0YXJnZXRsb2FkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiN2IxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy90ZXN0dGFyZ2V0bG9hZGVyLnB5CkBAIC0wLDAgKzEsNzAgQEAKK2ltcG9ydCB0eXBlcworaW1wb3J0IGJiCitpbXBvcnQgb3MKKworIyBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGEgdGVzdCB0YXJnZXQgY29udHJvbGxlcgorY2xhc3MgVGVzdFRhcmdldExvYWRlcjoKKworICAgICMgU2VhcmNoIG9lcWEuY29udHJvbGxlcnMgbW9kdWxlIGRpcmVjdG9yeSBmb3IgYW5kIHJldHVybiBhIGNvbnRyb2xsZXIgIAorICAgICMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gdGFyZ2V0IG5hbWUuIAorICAgICMgQXR0cmlidXRlRXJyb3IgcmFpc2VkIGlmIG5vdCBmb3VuZC4KKyAgICAjIEltcG9ydEVycm9yIHJhaXNlZCBpZiBhIHByb3ZpZGVkIG1vZHVsZSBjYW4gbm90IGJlIGltcG9ydGVkLgorICAgIGRlZiBnZXRfY29udHJvbGxlcl9tb2R1bGUoc2VsZiwgdGFyZ2V0LCBiYnBhdGgpOgorICAgICAgICBjb250cm9sbGVyc2xpc3QgPSBzZWxmLmdldF9jb250cm9sbGVyX21vZHVsZW5hbWVzKGJicGF0aCkKKyAgICAgICAgYmIubm90ZSgiQXZhaWxhYmxlIGNvbnRyb2xsZXIgbW9kdWxlczogJXMiICUgc3RyKGNvbnRyb2xsZXJzbGlzdCkpCisgICAgICAgIGNvbnRyb2xsZXIgPSBzZWxmLmxvYWRfY29udHJvbGxlcl9mcm9tX25hbWUodGFyZ2V0LCBjb250cm9sbGVyc2xpc3QpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyCisKKyAgICAjIFJldHVybiBhIGxpc3Qgb2YgYWxsIHB5dGhvbiBtb2R1bGVzIGluIGxpYi9vZXFhL2NvbnRyb2xsZXJzIGZvciBlYWNoCisgICAgIyBsYXllciBpbiBiYnBhdGgKKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXJfbW9kdWxlbmFtZXMoc2VsZiwgYmJwYXRoKToKKworICAgICAgICBjb250cm9sbGVyc2xpc3QgPSBbXQorCisgICAgICAgIGRlZiBhZGRfY29udHJvbGxlcl9saXN0KHBhdGgpOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ0NvbnRyb2xsZXJzIGRpcmVjdG9yeSAlcyBleGlzdHMgYnV0IGlzIG1pc3NpbmcgX19pbml0X18ucHknICUgcGF0aCkKKyAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIocGF0aCkgaWYgZi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoJ18nKV0pCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSAnb2VxYS5jb250cm9sbGVycy4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiBjb250cm9sbGVyc2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzbGlzdC5hcHBlbmQobW9kdWxlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkR1cGxpY2F0ZSBjb250cm9sbGVyIG1vZHVsZSBmb3VuZCBmb3IgJXMsIG9ubHkgb25lIGFkZGVkLiBMYXllcnMgc2hvdWxkIGNyZWF0ZSB1bmlxdWUgY29udHJvbGxlciBtb2R1bGUgbmFtZXMiICUgbW9kdWxlKQorCisgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgIGNvbnRyb2xsZXJwYXRoID0gb3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsICdjb250cm9sbGVycycpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnU2VhcmNoaW5nIGZvciB0YXJnZXQgY29udHJvbGxlcnMgaW4gJXMnICUgY29udHJvbGxlcnBhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb250cm9sbGVycGF0aCk6CisgICAgICAgICAgICAgICAgYWRkX2NvbnRyb2xsZXJfbGlzdChjb250cm9sbGVycGF0aCkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJzbGlzdAorCisgICAgIyBTZWFyY2ggZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyIGZyb20gZ2l2ZW4gdGFyZ2V0IG5hbWUgYW5kCisgICAgIyBzZXQgb2YgbW9kdWxlIG5hbWVzLiAKKyAgICAjIFJhaXNlIEF0dHJpYnV0ZUVycm9yIGlmIG5vdCBmb3VuZC4KKyAgICAjIFJhaXNlIEltcG9ydEVycm9yIGlmIGEgcHJvdmlkZWQgbW9kdWxlIGNhbiBub3QgYmUgaW1wb3J0ZWQKKyAgICBkZWYgbG9hZF9jb250cm9sbGVyX2Zyb21fbmFtZShzZWxmLCB0YXJnZXQsIG1vZHVsZW5hbWVzKToKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlbmFtZXM6CisgICAgICAgICAgICBvYmogPSBzZWxmLmxvYWRfY29udHJvbGxlcl9mcm9tX21vZHVsZSh0YXJnZXQsIG5hbWUpCisgICAgICAgICAgICBpZiBvYmo6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiVW5hYmxlIHRvIGxvYWQgezB9IGZyb20gYXZhaWxhYmxlIG1vZHVsZXM6IHsxfSIuZm9ybWF0KHRhcmdldCwgc3RyKG1vZHVsZW5hbWVzKSkpCisKKyAgICAjIFNlYXJjaCBmb3IgYW5kIHJldHVybiBhIGNvbnRyb2xsZXIgb3IgTm9uZSBmcm9tIGdpdmVuIG1vZHVsZSBuYW1lCisgICAgZGVmIGxvYWRfY29udHJvbGxlcl9mcm9tX21vZHVsZShzZWxmLCB0YXJnZXQsIG1vZHVsZW5hbWUpOgorICAgICAgICBvYmogPSBOb25lCisgICAgICAgICMgaW1wb3J0IG1vZHVsZSwgYWxsb3dpbmcgaXQgdG8gcmFpc2UgaW1wb3J0IGV4Y2VwdGlvbgorICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZW5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFt0YXJnZXRdKQorICAgICAgICAjIGxvb2sgZm9yIHRhcmdldCBjbGFzcyBpbiB0aGUgbW9kdWxlLCBjYXRjaGluZyBhbnkgZXhjZXB0aW9ucyBhcyBpdAorICAgICAgICAjIGlzIHZhbGlkIHRoYXQgYSBtb2R1bGUgbWF5IG5vdCBoYXZlIHRoZSB0YXJnZXQgY2xhc3MuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCB0YXJnZXQpCisgICAgICAgICAgICBpZiBvYmo6IAorICAgICAgICAgICAgICAgIGZyb20gb2VxYS50YXJnZXRjb250cm9sIGltcG9ydCBCYXNlVGFyZ2V0CisgICAgICAgICAgICAgICAgaWYgKG5vdCBpc2luc3RhbmNlKG9iaiwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpKToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVGFyZ2V0IHswfSBmb3VuZCwgYnV0IG5vdCBvZiB0eXBlIENsYXNzIi5mb3JtYXQodGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBpZiggbm90IGlzc3ViY2xhc3Mob2JqLCBCYXNlVGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRhcmdldCB7MH0gZm91bmQsIGJ1dCBzdWJjbGFzcyBpcyBub3QgQmFzZVRhcmdldCIuZm9ybWF0KHRhcmdldCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgcmV0dXJuIG9iagpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL29ldGVzdC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZmODliNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkKQEAgLTAsMCArMSwyMjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIE1haW4gdW5pdHRlc3QgbW9kdWxlIHVzZWQgYnkgdGVzdGltYWdlLmJiY2xhc3MKKyMgVGhpcyBwcm92aWRlcyB0aGUgb2VSdW50aW1lVGVzdCBiYXNlIGNsYXNzIHdoaWNoIGlzIGluaGVyaXRlZCBieSBhbGwgdGVzdHMgaW4gbWV0YS9saWIvb2VxYS9ydW50aW1lLgorCisjIEl0IGFsc28gaGFzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBhbmQgaXQncyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc3RhcnRpbmcgdGhlIHRlc3RzCisKK2ltcG9ydCBvcywgcmUsIG1tYXAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYmIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCBMb2dSZXN1bHRzLCBnZXR0YWcKK2Zyb20gc3lzIGltcG9ydCBleGNfaW5mbywgZXhjX2NsZWFyCisKK2RlZiBnZXRWYXIob2JqKToKKyAgICAjZXh0ZW5kIGZvcm0gZGljdCwgaWYgYSB2YXJpYWJsZSBkaWRuJ3QgZXhpc3RzLCBuZWVkIGZpbmQgaXQgaW4gdGVzdGNhc2UKKyAgICBjbGFzcyBWYXJEaWN0KGRpY3QpOgorICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgIHJldHVybiBnZXR0YWcob2JqLCBrZXkpCisgICAgcmV0dXJuIFZhckRpY3QoKQorCitkZWYgY2hlY2tUYWdzKHRjLCB0YWdleHApOgorICAgIHJldHVybiBldmFsKHRhZ2V4cCwgTm9uZSwgZ2V0VmFyKHRjKSkKKworCitkZWYgZmlsdGVyQnlUYWdFeHAodGVzdHN1aXRlLCB0YWdleHApOgorICAgIGlmIG5vdCB0YWdleHA6CisgICAgICAgIHJldHVybiB0ZXN0c3VpdGUKKyAgICBjYXNlTGlzdCA9IFtdCisgICAgZm9yIGVhY2ggaW4gdGVzdHN1aXRlOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlYWNoLCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlKToKKyAgICAgICAgICAgIGlmIGNoZWNrVGFncyhlYWNoLCB0YWdleHApOgorICAgICAgICAgICAgICAgIGNhc2VMaXN0LmFwcGVuZChlYWNoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FzZUxpc3QuYXBwZW5kKGZpbHRlckJ5VGFnRXhwKGVhY2gsIHRhZ2V4cCkpCisgICAgcmV0dXJuIHRlc3RzdWl0ZS5fX2NsYXNzX18oY2FzZUxpc3QpCisKK2RlZiBsb2FkVGVzdHModGMsIHR5cGU9InJ1bnRpbWUiKToKKyAgICBpZiB0eXBlID09ICJydW50aW1lIjoKKyAgICAgICAgIyBzZXQgdGhlIGNvbnRleHQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB0ZXN0IGNsYXNzCisgICAgICAgIHNldGF0dHIob2VUZXN0LCAidGMiLCB0YykKKyAgICAgICAgIyBzZXQgcHMgY29tbWFuZCB0byB1c2UKKyAgICAgICAgc2V0YXR0cihvZVJ1bnRpbWVUZXN0LCAicHNjbWQiLCAicHMgLWVmIiBpZiBvZVRlc3QuaGFzUGFja2FnZSgicHJvY3BzIikgZWxzZSAicHMiKQorICAgICAgICAjIHByZXBhcmUgdGVzdCBzdWl0ZSwgbG9hZGVyIGFuZCBydW5uZXIKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGVsaWYgdHlwZSA9PSAic2RrIjoKKyAgICAgICAgIyBzZXQgdGhlIGNvbnRleHQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB0ZXN0IGNsYXNzCisgICAgICAgIHNldGF0dHIob2VUZXN0LCAidGMiLCB0YykKKyAgICB0ZXN0bG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgdGVzdGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKyAgICBzdWl0ZXMgPSBbdGVzdGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShuYW1lKSBmb3IgbmFtZSBpbiB0Yy50ZXN0c2xpc3RdCisgICAgc3VpdGVzID0gZmlsdGVyQnlUYWdFeHAoc3VpdGVzLCBnZXRhdHRyKHRjLCAidGFnZXhwIiwgTm9uZSkpCisKKyAgICBkZWYgZ2V0VGVzdHModGVzdCk6CisgICAgICAgICcnJ1JldHVybiBhbGwgaW5kaXZpZHVhbCB0ZXN0cyBleGVjdXRlZCB3aGVuIHJ1bm5pbmcgdGhlIHN1aXRlLicnJworICAgICAgICAjIFVuZm9ydHVuYXRlbHkgdW5pdHRlc3QgZG9lcyBub3QgaGF2ZSBhbiBBUEkgZm9yIHRoaXMsIHNvIHdlIGhhdmUKKyAgICAgICAgIyB0byByZWx5IG9uIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFRoaXMgb25seSBuZWVkcyB0byB3b3JrCisgICAgICAgICMgZm9yIFRlc3RTdWl0ZSBjb250YWluaW5nIFRlc3RDYXNlLgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHRlc3QsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKQorICAgICAgICBpZiBtZXRob2Q6CisgICAgICAgICAgICAjIGxlYWYgY2FzZTogYSBUZXN0Q2FzZQorICAgICAgICAgICAgeWllbGQgdGVzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBMb29rIGludG8gVGVzdFN1aXRlLgorICAgICAgICAgICAgdGVzdHMgPSBnZXRhdHRyKHRlc3QsICdfdGVzdHMnLCBbXSkKKyAgICAgICAgICAgIGZvciB0MSBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBmb3IgdDIgaW4gZ2V0VGVzdHModDEpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0MgorCisgICAgIyBEZXRlcm1pbmUgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VpdGVzIGJ5IGxvb2tpbmcgZm9yIEBza2lwVW5sZXNzUGFzc2VkCisgICAgIyBtZXRob2QgYW5ub3RhdGlvbnMuIFN1aXRlIEEgZGVwZW5kcyBvbiBzdWl0ZSBCIGlmIGFueSBtZXRob2QgaW4gQQorICAgICMgZGVwZW5kcyBvbiBhIG1ldGhvZCBvbiBCLgorICAgIGZvciBzdWl0ZSBpbiBzdWl0ZXM6CisgICAgICAgIHN1aXRlLmRlcGVuZGVuY2llcyA9IFtdCisgICAgICAgIHN1aXRlLmRlcHRoID0gMAorICAgICAgICBmb3IgdGVzdCBpbiBnZXRUZXN0cyhzdWl0ZSk6CisgICAgICAgICAgICBtZXRob2RuYW1lID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RNZXRob2ROYW1lJywgTm9uZSkKKyAgICAgICAgICAgIGlmIG1ldGhvZG5hbWU6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih0ZXN0LCBtZXRob2RuYW1lKQorICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBnZXRhdHRyKG1ldGhvZCwgJ19kZXBlbmRzX29uJywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwX3N1aXRlIGluIHN1aXRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcGVuZHNfb24gaW4gW2dldGF0dHIodCwgJ190ZXN0TWV0aG9kTmFtZScsIE5vbmUpIGZvciB0IGluIGdldFRlc3RzKGRlcF9zdWl0ZSldOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcF9zdWl0ZSBub3QgaW4gc3VpdGUuZGVwZW5kZW5jaWVzIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwX3N1aXRlIGlzIG5vdCBzdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGUuZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBfc3VpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRlc3QgJXMgd2FzIGRlY2xhcmVkIGFzIEBza2lwVW5sZXNzUGFzc2VkKCclcycpIGJ1dCB0aGF0IHRlc3QgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIG5vdCBhY3RpdmUuIFdpbGwgcnVuIHRoZSB0ZXN0IGFueXdheS4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3QsIGRlcGVuZHNfb24pKQorICAgICMgVXNlIGJydXRlLWZvcmNlIHRvcG9sb2dpY2FsIHNvcnQgdG8gZGV0ZXJtaW5lIG9yZGVyaW5nLiBTb3J0IGJ5CisgICAgIyBkZXB0aCAoaGlnaGVyIGRlcHRoID0gbXVzdCBydW4gbGF0ZXIpLCB3aXRoIG9yaWdpbmFsIG9yZGVyaW5nIHRvCisgICAgIyBicmVhayB0aWVzLgorICAgIGRlZiBzZXRfc3VpdGVfZGVwdGgoc3VpdGUpOgorICAgICAgICBmb3IgZGVwIGluIHN1aXRlLmRlcGVuZGVuY2llczoKKyAgICAgICAgICAgIG5ld19kZXB0aCA9IHNldF9zdWl0ZV9kZXB0aChkZXApICsgMQorICAgICAgICAgICAgaWYgbmV3X2RlcHRoID4gc3VpdGUuZGVwdGg6CisgICAgICAgICAgICAgICAgc3VpdGUuZGVwdGggPSBuZXdfZGVwdGgKKyAgICAgICAgcmV0dXJuIHN1aXRlLmRlcHRoCisgICAgZm9yIGluZGV4LCBzdWl0ZSBpbiBlbnVtZXJhdGUoc3VpdGVzKToKKyAgICAgICAgc2V0X3N1aXRlX2RlcHRoKHN1aXRlKQorICAgICAgICBzdWl0ZS5pbmRleCA9IGluZGV4CisgICAgc3VpdGVzLnNvcnQoY21wPWxhbWJkYSBhLGI6IGNtcCgoYS5kZXB0aCwgYS5pbmRleCksIChiLmRlcHRoLCBiLmluZGV4KSkpCisgICAgcmV0dXJuIHRlc3Rsb2FkZXIuc3VpdGVDbGFzcyhzdWl0ZXMpCisKK2RlZiBydW5UZXN0cyh0YywgdHlwZT0icnVudGltZSIpOgorCisgICAgc3VpdGUgPSBsb2FkVGVzdHModGMsIHR5cGUpCisgICAgYmIubm90ZSgiVGVzdCBtb2R1bGVzICAlcyIgJSB0Yy50ZXN0c2xpc3QpCisgICAgaWYgaGFzYXR0cih0YywgInRhZ2V4cCIpIGFuZCB0Yy50YWdleHA6CisgICAgICAgIGJiLm5vdGUoIkZpbHRlciB0ZXN0IGNhc2VzIGJ5IHRhZ3M6ICVzIiAlIHRjLnRhZ2V4cCkKKyAgICBiYi5ub3RlKCJGb3VuZCAlcyB0ZXN0cyIgJSBzdWl0ZS5jb3VudFRlc3RDYXNlcygpKQorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKQorICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisKKyAgICByZXR1cm4gcmVzdWx0CisKK0BMb2dSZXN1bHRzCitjbGFzcyBvZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGFzUGFja2FnZShzZWxmLCBwa2cpOgorICAgICAgICBmb3IgaXRlbSBpbiBvZVRlc3QudGMucGtnbWFuaWZlc3Quc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiByZS5tYXRjaChwa2csIGl0ZW0pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhc0ZlYXR1cmUoc2VsZixmZWF0dXJlKToKKworICAgICAgICBpZiBmZWF0dXJlIGluIG9lVGVzdC50Yy5pbWFnZWZlYXR1cmVzIG9yIFwKKyAgICAgICAgICAgICAgICBmZWF0dXJlIGluIG9lVGVzdC50Yy5kaXN0cm9mZWF0dXJlczoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3Mgb2VSdW50aW1lVGVzdChvZVRlc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIHNlbGYudGFyZ2V0ID0gb2VSdW50aW1lVGVzdC50Yy50YXJnZXQKKyAgICAgICAgc3VwZXIob2VSdW50aW1lVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBDaGVjayBpZiB0ZXN0IG5lZWRzIHRvIHJ1bgorICAgICAgICBpZiBzZWxmLnRjLnNpZ3Rlcm06CisgICAgICAgICAgICBzZWxmLmZhaWwoIkdvdCBTSUdURVJNIikKKyAgICAgICAgZWxpZiAodHlwZShzZWxmLnRhcmdldCkuX19uYW1lX18gPT0gIlFlbXVUYXJnZXQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRhcmdldC5jaGVjaygpLCBtc2cgPSAiUWVtdSBub3QgcnVubmluZz8iKQorCisgICAgICAgIHNlbGYuc2V0VXBMb2NhbCgpCisKKyAgICAjIGEgc2V0dXAgbWV0aG9kIGJlZm9yZSB0ZXN0cyBidXQgYWZ0ZXIgdGhlIGNsYXNzIGluc3RhbnRpYXRpb24KKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIElmIGEgdGVzdCBmYWlscyBvciB0aGVyZSBpcyBhbiBleGNlcHRpb24KKyAgICAgICAgaWYgbm90IGV4Y19pbmZvKCkgPT0gKE5vbmUsIE5vbmUsIE5vbmUpOgorICAgICAgICAgICAgZXhjX2NsZWFyKCkKKyAgICAgICAgICAgICNPbmx5IGR1bXAgZm9yIFFlbXVUYXJnZXQKKyAgICAgICAgICAgIGlmICh0eXBlKHNlbGYudGFyZ2V0KS5fX25hbWVfXyA9PSAiUWVtdVRhcmdldCIpOgorICAgICAgICAgICAgICAgIHNlbGYudGMuaG9zdF9kdW1wZXIuY3JlYXRlX2RpcihzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQudGFyZ2V0X2R1bXBlci5kdW1wX3RhcmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGMuaG9zdF9kdW1wZXIuZHVtcF9kaXIpCisgICAgICAgICAgICAgICAgcHJpbnQgKCIlcyBkdW1wIGRhdGEgc3RvcmVkIGluICVzIiAlIChzZWxmLl90ZXN0TWV0aG9kTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfZGlyKSkKKworICAgICNUT0RPOiB1c2UgcGFja2FnZV9tYW5hZ2VyLnB5IHRvIGluc3RhbGwgcGFja2FnZXMgb24gYW55IHR5cGUgb2YgaW1hZ2UKKyAgICBkZWYgaW5zdGFsbF9wYWNrYWdlcyhzZWxmLCBwYWNrYWdlbGlzdCk6CisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgKHN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bigic21hcnQgaW5zdGFsbCAteSAiK3BhY2thZ2UpCisgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKK2NsYXNzIG9lU0RLVGVzdChvZVRlc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIHNlbGYuc2RrdGVzdGRpciA9IG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyCisgICAgICAgIHN1cGVyKG9lU0RLVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBoYXNIb3N0UGFja2FnZShzZWxmLCBwa2cpOgorCisgICAgICAgIGlmIHJlLnNlYXJjaChwa2csIG9lVGVzdC50Yy5ob3N0cGtnbWFuaWZlc3QpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQorCitkZWYgZ2V0bW9kdWxlKHBvcz0yKToKKyAgICAjIHN0YWNrIHJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyBjb250YWluZyBmcmFtZSBpbmZvcm1hdGlvbgorICAgICMgRmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdCB0aGUgaXMgY3VycmVudCBmcmFtZSwgY2FsbGVyIGlzIDEKKyAgICBmcmFtZWluZm8gPSBpbnNwZWN0LnN0YWNrKClbcG9zXQorICAgIG1vZG5hbWUgPSBpbnNwZWN0LmdldG1vZHVsZW5hbWUoZnJhbWVpbmZvWzFdKQorICAgICNtb2RuYW1lID0gaW5zcGVjdC5nZXRtb2R1bGUoZnJhbWVpbmZvWzBdKS5fX25hbWVfXworICAgIHJldHVybiBtb2RuYW1lCisKK2RlZiBza2lwTW9kdWxlKHJlYXNvbiwgcG9zPTIpOgorICAgIG1vZG5hbWUgPSBnZXRtb2R1bGUocG9zKQorICAgIGlmIG1vZG5hbWUgbm90IGluIG9lVGVzdC50Yy50ZXN0c3JlcXVpcmVkOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiJXM6ICVzIiAlIChtb2RuYW1lLCByZWFzb24pKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiXG5UZXN0ICVzIHdhbnRzIHRvIGJlIHNraXBwZWQuXG5SZWFzb24gaXM6ICVzIiBcCisgICAgICAgICAgICAgICAgIlxuVGVzdCB3YXMgcmVxdWlyZWQgaW4gVEVTVF9TVUlURVMsIHNvIGVpdGhlciB0aGUgY29uZGl0aW9uIGZvciBza2lwcGluZyBpcyB3cm9uZyIgXAorICAgICAgICAgICAgICAgICJcbm9yIHRoZSBpbWFnZSByZWFsbHkgZG9lc24ndCBoYXZlIHRoZSByZXF1aXJlZCBmZWF0dXJlL3BhY2thZ2Ugd2hlbiBpdCBzaG91bGQuIiAlIChtb2RuYW1lLCByZWFzb24pKQorCitkZWYgc2tpcE1vZHVsZUlmKGNvbmQsIHJlYXNvbik6CisKKyAgICBpZiBjb25kOgorICAgICAgICBza2lwTW9kdWxlKHJlYXNvbiwgMykKKworZGVmIHNraXBNb2R1bGVVbmxlc3MoY29uZCwgcmVhc29uKToKKworICAgIGlmIG5vdCBjb25kOgorICAgICAgICBza2lwTW9kdWxlKHJlYXNvbiwgMykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjQ0MmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bmV4cG9ydGVkLnB5CkBAIC0wLDAgKzEsMTQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIHNjcmlwdCBzaG91bGQgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0gdG8gcnVuIGltYWdlIHRlc3RzLgorIyBJdCBuZWVkcyBhIGpzb24gZmlsZSBhcyBpbnB1dCBhcyBleHBvcnRlZCBieSB0aGUgYnVpbGQuCisjIEUuZyBmb3IgYW4gYWxyZWFkeSBidWlsdCBpbWFnZToKKyMtIGV4cG9ydCB0aGUgdGVzdHM6CisjICAgVEVTVF9FWFBPUlRfT05MWSA9ICIxIgorIyAgIFRFU1RfVEFSR0VUICA9ICJzaW1wbGVyZW1vdGUiCisjICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC43LjIiCisjICAgVEVTVF9TRVJWRVJfSVAgPSAiMTkyLjE2OC43LjEiCisjIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZQorIyBTZXR1cCB5b3VyIHRhcmdldCwgZS5nIGZvciBxZW11OiBydW5xZW11IGNvcmUtaW1hZ2Utc2F0bworIyBjZCBidWlsZC90bXAvdGVzdGltYWdlL2NvcmUtaW1hZ2Utc2F0bworIyAuL3J1bmV4cG9ydGVkLnB5IHRlc3RkYXRhLmpzb24KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisKK3RyeToKKyAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IGpzb24KKworc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIm9lcWEiKSkpCisKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IHJ1blRlc3RzCitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAorZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IGdldF9ob3N0X2R1bXBlcgorCisjIHRoaXMgaXNuJ3QgcHJldHR5IGJ1dCB3ZSBuZWVkIGEgZmFrZSB0YXJnZXQgb2JqZWN0CisjIGZvciBydW5uaW5nIHRoZSB0ZXN0cyBleHRlcm5hbGx5IGFzIHdlIGRvbid0IGNhcmUKKyMgYWJvdXQgZGVwbG95L3N0YXJ0IHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY29ubmVjdGlvbiBtZXRob2RzIChydW4sIGNvcHkpCitjbGFzcyBGYWtlVGFyZ2V0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorICAgICAgICBzZWxmLmRhdGV0aW1lID0gdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJyx0aW1lLmdtdGltZSgpKQorICAgICAgICBzZWxmLnRlc3RkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICBkZWYgZXhwb3J0U3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuc3NobG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIHNzaGxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAic3NoX3RhcmdldF9sb2ciKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhzc2hsb2dsaW5rKToKKyAgICAgICAgICAgIG9zLnVubGluayhzc2hsb2dsaW5rKQorICAgICAgICBvcy5zeW1saW5rKHNlbGYuc3NobG9nLCBzc2hsb2dsaW5rKQorICAgICAgICBwcmludCgiU1NIIGxvZyBmaWxlOiAlcyIgJSAgc2VsZi5zc2hsb2cpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woc2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKworICAgIGRlZiBydW4oc2VsZiwgY21kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJ1bihjbWQsIHRpbWVvdXQpCisKKyAgICBkZWYgY29weV90byhzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfdG8obG9jYWxwYXRoLCByZW1vdGVwYXRoKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfZnJvbShyZW1vdGVwYXRoLCBsb2NhbHBhdGgpCisKKworY2xhc3MgTXlEYXRhRGljdChkaWN0KToKKyAgICBkZWYgZ2V0VmFyKHNlbGYsIGtleSwgdW51c2VkID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldChrZXksICIiKQorCitjbGFzcyBUZXN0Q29udGV4dChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kID0gTm9uZQorICAgICAgICBzZWxmLnRhcmdldCA9IE5vbmUKKworZGVmIG1haW4oKToKKworICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbb3B0aW9uc10gPGpzb24gZmlsZT4iCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRhcmdldC1pcCIsIGRlc3Q9ImlwIiwgaGVscD0iVGhlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBtYWNoaW5lLiBVc2UgdGhpcyB0byBcCisgICAgICAgICAgICBvdmVyd3JpdGUgdGhlIHZhbHVlIGRldGVybWluZWQgZnJvbSBURVNUX1RBUkdFVF9JUCBhdCBidWlsZCB0aW1lIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1zZXJ2ZXItaXAiLCBkZXN0PSJzZXJ2ZXJfaXAiLCBoZWxwPSJUaGUgSVAgYWRkcmVzcyBvZiB0aGlzIG1hY2hpbmUuIFVzZSB0aGlzIHRvIFwKKyAgICAgICAgICAgIG92ZXJ3cml0ZSB0aGUgdmFsdWUgZGV0ZXJtaW5lZCBmcm9tIFRFU1RfU0VSVkVSX0lQIGF0IGJ1aWxkIHRpbWUuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWQiLCAiLS1kZXBsb3ktZGlyIiwgZGVzdD0iZGVwbG95X2RpciIsIGhlbHA9IkZ1bGwgcGF0aCB0byB0aGUgcGFja2FnZSBmZWVkcywgdGhhdCB0aGlzIFwKKyAgICAgICAgICAgIHRoZSBjb250ZW50cyBvZiB3aGF0IHVzZWQgdG8gYmUgREVQTE9ZX0RJUiBvbiB0aGUgYnVpbGQgbWFjaGluZS4gSWYgbm90IHNwZWNpZmllZCBpdCB3aWxsIHVzZSB0aGUgdmFsdWUgXAorICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBqc29uIGlmIHRoYXQgZGlyZWN0b3J5IGFjdHVhbGx5IGV4aXN0cyBvciBpdCB3aWxsIGVycm9yIG91dC4iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxvZy1kaXIiLCBkZXN0PSJsb2dfZGlyIiwgaGVscD0iVGhpcyBzZXRzIHRoZSBwYXRoIGZvciBURVNUX0xPR19ESVIuIElmIG5vdCBzcGVjaWZpZWQgXAorICAgICAgICAgICAgdGhlIGN1cnJlbnQgZGlyIGlzIHVzZWQuIFRoaXMgaXMgdXNlZCBmb3IgdXN1YWxseSBjcmVhdGluZyBhIHNzaCBsb2cgZmlsZSBhbmQgYSBzY3AgdGVzdCBmaWxlLiIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHBhcnNlci5lcnJvcigiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuIFRoZSBvbmUgYW5kIG9ubHkgYXJndW1lbnQgc2hvdWxkIGJlIGEganNvbiBmaWxlIGV4cG9ydGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0iKQorCisgICAgd2l0aCBvcGVuKGFyZ3NbMF0sICJyIikgYXMgZjoKKyAgICAgICAgbG9hZGVkID0ganNvbi5sb2FkKGYpCisKKyAgICBpZiBvcHRpb25zLmlwOgorICAgICAgICBsb2FkZWRbInRhcmdldCJdWyJpcCJdID0gb3B0aW9ucy5pcAorICAgIGlmIG9wdGlvbnMuc2VydmVyX2lwOgorICAgICAgICBsb2FkZWRbInRhcmdldCJdWyJzZXJ2ZXJfaXAiXSA9IG9wdGlvbnMuc2VydmVyX2lwCisKKyAgICBkID0gTXlEYXRhRGljdCgpCisgICAgZm9yIGtleSBpbiBsb2FkZWRbImQiXS5rZXlzKCk6CisgICAgICAgIGRba2V5XSA9IGxvYWRlZFsiZCJdW2tleV0KKworICAgIGlmIG9wdGlvbnMubG9nX2RpcjoKKyAgICAgICAgZFsiVEVTVF9MT0dfRElSIl0gPSBvcHRpb25zLmxvZ19kaXIKKyAgICBlbHNlOgorICAgICAgICBkWyJURVNUX0xPR19ESVIiXSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQorICAgIGlmIG9wdGlvbnMuZGVwbG95X2RpcjoKKyAgICAgICAgZFsiREVQTE9ZX0RJUiJdID0gb3B0aW9ucy5kZXBsb3lfZGlyCisgICAgZWxzZToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZFsiREVQTE9ZX0RJUiJdKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhlIHBhdGggdG8gREVQTE9ZX0RJUiBkb2VzIG5vdCBleGlzdHM6ICVzIiAlIGRbIkRFUExPWV9ESVIiXSkKKworCisgICAgdGFyZ2V0ID0gRmFrZVRhcmdldChkKQorICAgIGZvciBrZXkgaW4gbG9hZGVkWyJ0YXJnZXQiXS5rZXlzKCk6CisgICAgICAgIHNldGF0dHIodGFyZ2V0LCBrZXksIGxvYWRlZFsidGFyZ2V0Il1ba2V5XSkKKworICAgIGhvc3RfZHVtcGVyID0gZ2V0X2hvc3RfZHVtcGVyKGQpCisgICAgaG9zdF9kdW1wZXIucGFyZW50X2RpciA9IGxvYWRlZFsiaG9zdF9kdW1wZXIiXVsicGFyZW50X2RpciJdCisgICAgaG9zdF9kdW1wZXIuY21kcyA9IGxvYWRlZFsiaG9zdF9kdW1wZXIiXVsiY21kcyJdCisKKyAgICB0YyA9IFRlc3RDb250ZXh0KCkKKyAgICBzZXRhdHRyKHRjLCAiZCIsIGQpCisgICAgc2V0YXR0cih0YywgInRhcmdldCIsIHRhcmdldCkKKyAgICBzZXRhdHRyKHRjLCAiaG9zdF9kdW1wZXIiLCBob3N0X2R1bXBlcikKKyAgICBmb3Iga2V5IGluIGxvYWRlZC5rZXlzKCk6CisgICAgICAgIGlmIGtleSAhPSAiZCIgYW5kIGtleSAhPSAidGFyZ2V0IiBhbmQga2V5ICE9ICJob3N0X2R1bXBlciI6CisgICAgICAgICAgICBzZXRhdHRyKHRjLCBrZXksIGxvYWRlZFtrZXldKQorCisgICAgdGFyZ2V0LmV4cG9ydFN0YXJ0KCkKKyAgICBydW5UZXN0cyh0YykKKworICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmM2ZhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19wdGVzdC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19wdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5YzQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3B0ZXN0LnB5CkBAIC0wLDAgKzEsMTI1IEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCBzaHV0aWwKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMubG9ncGFyc2VyIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMuaHR0cHNlcnZlciBpbXBvcnQgSFRUUFNlcnZpY2UKK2ltcG9ydCBiYgoraW1wb3J0IGdsb2IKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCBScG1Qa2dzTGlzdAoraW1wb3J0IHN1YnByb2Nlc3MKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZmVhdHVyZSIpCisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic21hcnQiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHNtYXJ0IGluc3RhbGxlZCIpCisgICAgaWYgInBhY2thZ2VfcnBtIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJQQUNLQUdFX0NMQVNTRVMiLCBUcnVlKS5zcGxpdCgpWzBdOgorICAgICAgICBza2lwTW9kdWxlKCJScG0gaXMgbm90IHRoZSBwcmltYXJ5IHBhY2thZ2UgbWFuYWdlciIpCisKK2NsYXNzIFB0ZXN0UnVubmVyVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgICMgYSBwdGVzdCBsb2cgcGFyc2VyCisgICAgZGVmIHBhcnNlX3B0ZXN0KHNlbGYsIGxvZ2ZpbGUpOgorICAgICAgICBwYXJzZXIgPSBMcGFyc2VyKHRlc3RfMF9wYXNzX3JlZ2V4PSJeUEFTUzooLispIiwgdGVzdF8wX2ZhaWxfcmVnZXg9Il5GQUlMOiguKykiLCBzZWN0aW9uXzBfYmVnaW5fcmVnZXg9Il5CRUdJTjogLiovKC4rKS9wdGVzdCIsIHNlY3Rpb25fMF9lbmRfcmVnZXg9Il5FTkQ6IC4qLyguKykvcHRlc3QiKQorICAgICAgICBwYXJzZXIuaW5pdCgpCisgICAgICAgIHJlc3VsdCA9IFJlc3VsdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHJlc3VsdF90dXBsZSA9IHBhcnNlci5wYXJzZV9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdF90dXBsZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBsaW5lX3R5cGUsIGNhdGVnb3J5LCBzdGF0dXMsIG5hbWUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICdzZWN0aW9uJyBhbmQgc3RhdHVzID09ICdiZWdpbic6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9zZWN0aW9uID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICd0ZXN0JyBhbmQgc3RhdHVzID09ICdwYXNzJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3JlKGN1cnJlbnRfc2VjdGlvbiwgbmFtZSwgc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICd0ZXN0JyBhbmQgc3RhdHVzID09ICdmYWlsJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3JlKGN1cnJlbnRfc2VjdGlvbiwgbmFtZSwgc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJlc3VsdC5zb3J0X3Rlc3RzKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgICNub3RlIHRoZSBleGlzdGluZyBjaGFubmVscyB0aGF0IGFyZSBvbiB0aGUgYm9hcmQgYmVmb3JlIGNyZWF0aW5nIG5ldyBvbmVzCisjICAgICAgICBzZWxmLmV4aXN0aW5nY2hhbm5lbHMgPSBzZXQoKQorIyAgICAgICAgKHN0YXR1cywgcmVzdWx0KSA9IG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bignc21hcnQgY2hhbm5lbCAtLXNob3cgfCBncmVwICJcWyInLCAwKQorIyAgICAgICAgZm9yIHggaW4gcmVzdWx0LnNwbGl0KCJcbiIpOgorIyAgICAgICAgICAgIHNlbGYuZXhpc3RpbmdjaGFubmVscy5hZGQoeCkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlciA9IEhUVFBTZXJ2aWNlKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuc2VydmVyX2lwKQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0YXJ0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0b3AoKQorICAgICAgICAjcmVtb3ZlIGNyZWF0ZWQgY2hhbm5lbHMgdG8gYmUgYWJsZSB0byByZXBlYXQgdGhlIHRlc3RzIG9uIHNhbWUgaW1hZ2UKKyMgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1zaG93IHwgZ3JlcCAiXFsiJywgMCkKKyMgICAgICAgIGZvciB4IGluIHJlc3VsdC5zcGxpdCgiXG4iKToKKyMgICAgICAgICAgICBpZiB4IG5vdCBpbiBzZWxmLmV4aXN0aW5nY2hhbm5lbHM6CisjICAgICAgICAgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bignc21hcnQgY2hhbm5lbCAtLXJlbW92ZSAnK3hbMTotMV0rJyAteScsIDApCisKKyAgICBkZWYgYWRkX3NtYXJ0X2NoYW5uZWwoc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBzZWxmLnRjLmQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZGVwbG95X3VybCA9ICdodHRwOi8vJXM6JXMvJXMnICUoc2VsZi50YXJnZXQuc2VydmVyX2lwLCBzZWxmLnJlcG9fc2VydmVyLnBvcnQsIGltYWdlX3BrZ3R5cGUpCisgICAgICAgIHBrZ2FyY2hzID0gc2VsZi50Yy5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnJlcGxhY2UoIi0iLCJfIikuc3BsaXQoKQorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKCclcy8lcycgJSAoc2VsZi5yZXBvX3NlcnZlci5yb290X2RpciwgaW1hZ2VfcGtndHlwZSkpOgorICAgICAgICAgICAgaWYgYXJjaCBpbiBwa2dhcmNoczoKKyAgICAgICAgICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLXkgLS1hZGQge2F9IHR5cGU9cnBtLW1kIGJhc2V1cmw9e3V9L3thfScuZm9ybWF0KGE9YXJjaCwgdT1kZXBsb3lfdXJsKSwgMCkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzbWFydCB1cGRhdGUnLCAwKQorCisgICAgZGVmIGluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLCBnbG9icz1Ob25lKToKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGxlZF9wa2dzLnR4dCIpCisgICAgICAgIHNlbGYucGtnc19saXN0ID0gUnBtUGtnc0xpc3Qob2VSdW50aW1lVGVzdC50Yy5kLCBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignYXJjaF92YXInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignb3NfdmFyJywgVHJ1ZSkpCisgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19maWxlLCAidysiKSBhcyBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLndyaXRlKHNlbGYucGtnc19saXN0Lmxpc3QoImFyY2giKSkKKworICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvZS1wa2dkYXRhLXV0aWwiKSwKKyAgICAgICAgICAgICAgICItcCIsIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksICJnbG9iIiwgaW5zdGFsbGVkX3BrZ3NfZmlsZSwKKyAgICAgICAgICAgICAgIGdsb2JzXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgLi4uIikKKyAgICAgICAgICAgIGNvbXBsZW1lbnRhcnlfcGtncyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDb3VsZCBub3QgY29tcHV0ZSBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGxpc3QuIENvbW1hbmQgIgorICAgICAgICAgICAgICAgICAgICAgIiclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBjb21wbGVtZW50YXJ5X3BrZ3Muc3BsaXQoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnB0ZXN0X2xvZyA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLFRydWUpLCAicHRlc3QtJXMubG9nIiAlIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkpCisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3B0ZXN0cnVubmVyKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9zbWFydF9jaGFubmVsKCkKKyAgICAgICAgKHJ1bm5lcnN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bignd2hpY2ggcHRlc3QtcnVubmVyJywgMCkKKyAgICAgICAgY29uZCA9IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgicHRlc3QtcnVubmVyIikgYW5kIG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicHRlc3QiKSBhbmQgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCItcHRlc3QiKSBhbmQgKHJ1bm5lcnN0YXR1cyAhPSAwKQorICAgICAgICBpZiBjb25kOgorICAgICAgICAgICAgc2VsZi5pbnN0YWxsX3BhY2thZ2VzKHNlbGYuaW5zdGFsbF9jb21wbGVtZW50YXJ5KCIqLXB0ZXN0IikpCisgICAgICAgICAgICBzZWxmLmluc3RhbGxfcGFja2FnZXMoWydwdGVzdC1ydW5uZXInXSkKKworICAgICAgICAocnVubmVyc3RhdHVzLCByZXN1bHQpID0gc2VsZi50YXJnZXQucnVuKCcvdXNyL2Jpbi9wdGVzdC1ydW5uZXIgPiAvdG1wL3B0ZXN0LmxvZyAyPiYxJywgMCkKKyAgICAgICAgI2V4aXQgY29kZSBpcyAhPTAgZXZlbiBpZiBwdGVzdC1ydW5uZXIgZXhlY3V0ZXMgYmVjYXVzZSBzb21lIHB0ZXN0IHRlc3RzIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXJzdGF0dXMgIT0gMTI3LCBtc2c9IkNhbm5vdCBleGVjdXRlIHB0ZXN0LXJ1bm5lciEiKQorICAgICAgICBzZWxmLnRhcmdldC5jb3B5X2Zyb20oJy90bXAvcHRlc3QubG9nJywgc2VsZi5wdGVzdF9sb2cpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLnB0ZXN0X2xvZywgInB0ZXN0LmxvZyIpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJzZV9wdGVzdCgicHRlc3QubG9nIikKKyAgICAgICAgbG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24gPSAiLi9yZXN1bHRzIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2dfcmVzdWx0c190b19sb2NhdGlvbik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uKQorICAgICAgICBvcy5tYWtlZGlycyhsb2dfcmVzdWx0c190b19sb2NhdGlvbikKKworICAgICAgICByZXN1bHQubG9nX2FzX2ZpbGVzKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uLCB0ZXN0X3N0YXR1cyA9IFsncGFzcycsJ2ZhaWwnXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19xZW11dGlueS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL19xZW11dGlueS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MyOWYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3FlbXV0aW55LnB5CkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMucWVtdXRpbnlydW5uZXIgaW1wb3J0ICoKKworY2xhc3MgUWVtdVRpbnlUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHRlc3RfYm9vdF90aW55KHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuX3NlcmlhbCgndW5hbWUgLWEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInlvY3RvLXRpbnkiIGluIG91dHB1dCwgbXNnPSJDYW5ub3QgZGV0ZWN0IHBva3kgdGlueSBib290ISIpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRjdnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGN2cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTZjYmZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRjdnMucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgQnVpbGRDdnNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9mdHAuZ251Lm9yZy9ub24tZ251L2N2cy9zb3VyY2UvZmVhdHVyZS8xLjEyLjEzL2N2cy0xLjEyLjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfY3ZzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRpcHRhYmxlcy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllMjUyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgQnVpbGRJcHRhYmxlc1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gVGFyZ2V0QnVpbGRQcm9qZWN0KG9lUnVudGltZVRlc3QudGMudGFyZ2V0LCBvZVJ1bnRpbWVUZXN0LnRjLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL25ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvaXB0YWJsZXMtMS40LjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfaXB0YWJsZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkc3Vkb2t1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmIwNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weQpAQCAtMCwwICsxLDI4IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBUYXJnZXRCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCitjbGFzcyBTdWRva3VUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50L3N1ZG9rdS1zYXZhbnQtMS4zL3N1ZG9rdS1zYXZhbnQtMS4zLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nvbm5tYW4ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjllNWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5CkBAIC0wLDAgKzEsNTQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiY29ubm1hbiIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBjb25ubWFuIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIENvbm5tYW5UZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNlcnZpY2Vfc3RhdHVzKHNlbGYsIHNlcnZpY2UpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInN5c3RlbWQiKToKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCBzdGF0dXMgLWwgJXMnICUgc2VydmljZSkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGdldCBzdGF0dXMgb3IgbG9ncyBmb3IgJXMiICUgc2VydmljZQorCisgICAgQHRlc3RjYXNlKDk2MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2Nvbm5tYW5kX2hlbHAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy91c3Ivc2Jpbi9jb25ubWFuZCAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgyMjEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfY29ubm1hbmRfaGVscCcpCisgICAgZGVmIHRlc3RfY29ubm1hbmRfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCcpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcHJpbnQgc2VsZi5zZXJ2aWNlX3N0YXR1cygiY29ubm1hbiIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGNvbm5tYW5kIHByb2Nlc3MgcnVubmluZyIpCisKKyAgICBAdGVzdGNhc2UoMjIzKQorICAgIGRlZiB0ZXN0X29ubHlfb25lX2Nvbm5tYW5kX2luX2JhY2tncm91bmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgT25seSBvbmUgY29ubm1hbmQgaW4gYmFja2dyb3VuZAorICAgICAgICBFeHBlY3RlZDogICAgVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBjb25ubWFuZCBpbnN0YW5jZSBpbiBiYWNrZ3JvdW5kLgorICAgICAgICBQcm9kdWN0OiAgICAgQlNQcworICAgICAgICBBdXRob3I6ICAgICAgQWxleGFuZHJ1IEdlb3JnZXNjdSA8YWxleGFuZHJ1LmMuZ2Vvcmdlc2N1QGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCAnY29ubm1hbmQnIGlzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZAorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbY11vbm5tYW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gZmluZCAiY29ubm1hbmQiIHByb2Nlc3MgcnVubmluZyBpbiBiYWNrZ3JvdW5kLicpCisKKyAgICAgICAgIyBTdGFydCBhIG5ldyBpbnN0YW5jZSBvZiAnY29ubm1hbmQnCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2Nvbm5tYW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gc3RhcnQgYSBuZXcgImNvbm5tYW5kIiBwcm9jZXNzLicpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBvbmx5IG9uZSAnY29ubm1hbmQnIGlzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZAorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbY11vbm5tYW5kIHwgd2MgLWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBmaW5kICJjb25ubWFuZCIgcHJvY2VzcyBydW5uaW5nIGluIGJhY2tncm91bmQuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBpbnQob3V0cHV0KSwgJ0ZvdW5kIHt9IGNvbm5tYW5kIHByb2Nlc3NlcyBydW5uaW5nLCBleHBlY3RlZCAxLicuZm9ybWF0KG91dHB1dCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kYXRlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThmZTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weQpAQCAtMCwwICsxLDMxIEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgoraW1wb3J0IHJlCisKK2NsYXNzIERhdGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSkgPT0gInN5c3RlbWQiOgorICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RvcCBzeXN0ZW1kLXRpbWVzeW5jZCcpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKSA9PSAic3lzdGVtZCI6CisgICAgICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCBzdGFydCBzeXN0ZW1kLXRpbWVzeW5jZCcpCisKKyAgICBAdGVzdGNhc2UoMjExKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfZGF0ZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZGF0ZSArIiVZLSVtLSVkICVUIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byBnZXQgaW5pdGlhbCBkYXRlLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgb2xkRGF0ZSA9IG91dHB1dAorCisgICAgICAgIHNhbXBsZURhdGUgPSAnIjIwMTYtMDgtMDkgMTA6MDA6MDAiJworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJkYXRlIC1zICVzIiAlIHNhbXBsZURhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkRhdGUgc2V0IGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGF0ZSAtUiIpCisgICAgICAgIHAgPSByZS5tYXRjaCgnVHVlLCAwOSBBdWcgMjAxNiAxMDowMDouLiBcKzAwMDAnLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLCBtc2c9IlRoZSBkYXRlIHdhcyBub3Qgc2V0IGNvcnJlY3RseSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZGF0ZSAtcyAiJXMiJyAlIG9sZERhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byByZXNldCBkYXRlLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RmLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1NjlkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RmLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworCitjbGFzcyBEZlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjM0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfZGYoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGYgLyB8IHNlZCAtbiAnMnAnIHwgYXdrICd7cHJpbnQgJDR9JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQob3V0cHV0KT41MTIwLCBtc2c9Ik5vdCBlbm91Z2ggc3BhY2Ugb24gaW1hZ2UuIEN1cnJlbnQgc2l6ZSBpcyAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kbWVzZy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RtZXNnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MzE0NzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9kbWVzZy5weQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKworY2xhc3MgRG1lc2dUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIxNSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2RtZXNnKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdkbWVzZyB8IGdyZXAgLXYgbW1jaS1wbDE4eCB8IGdyZXAgLXYgImVycm9yIGNoYW5naW5nIG5ldCBpbnRlcmZhY2UgbmFtZSIgfCBncmVwIC1pdiAiZG1hIHRpbWVvdXQiIHwgZ3JlcCAtdiB1c2JoaWQgfCBncmVwIC1pIGVycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDEsIG1zZyA9ICJFcnJvciBtZXNzYWdlcyBpbiBkbWVzZyBsb2c6ICVzIiAlIG91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kLmMgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODMzOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK3N0YXRpYyBpbnQgX19pbml0IGhlbGxvX2luaXQodm9pZCkKK3sKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiSGVsbG8gd29ybGQhXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoZWxsb19jbGVhbnVwKHZvaWQpCit7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkNsZWFuaW5nIHVwIGhlbGxvbW9kLlxuIik7Cit9CisKK21vZHVsZV9pbml0KGhlbGxvX2luaXQpOworbW9kdWxlX2V4aXQoaGVsbG9fY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kX21ha2VmaWxlIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2RfbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyZDVjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kX21ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorb2JqLW0gOj0gaGVsbG9tb2QubworS0RJUiA6PSAvdXNyL3NyYy9rZXJuZWwKKworYWxsOgorCSQoTUFLRSkgLUMgJChLRElSKSBNPSQoUFdEKSBtb2R1bGVzCisKK2NsZWFuOgorCSQoTUFLRSkgLUMgJChLRElSKSBNPSQoUFdEKSBjbGVhbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODM4OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmMKQEAgLTAsMCArMSwyNiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitkb3VibGUgY29udmVydChsb25nIGxvbmcgbCkKK3sKKyAgcmV0dXJuIChkb3VibGUpbDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pIHsKKworICBsb25nIGxvbmcgbCA9IDEwOworICBkb3VibGUgZjsKKyAgZG91YmxlIGNoZWNrID0gMTAuMDsKKworICBmID0gY29udmVydChsKTsKKyAgcHJpbnRmKCJjb252ZXJ0OiAlbGxkID0+ICVmXG4iLCBsLCBmKTsKKyAgaWYgKCBmICE9IGNoZWNrICkgZXhpdCgxKTsKKworICBmID0gMTIzNC42NzsKKyAgY2hlY2sgPSAxMjM0LjA7CisgIHByaW50ZigiZmxvb3JmKCVmKSA9ICVmXG4iLCBmLCBmbG9vcmYoZikpOworICBpZiAoIGZsb29yZihmKSAhPSBjaGVjaykgZXhpdCgxKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuY3BwIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxYTc2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuY3BwCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGxpbWl0cz4KKworaW50IG1haW4oKSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucGwgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OWM4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsCkBAIC0wLDAgKzEsMiBAQAorJGEgPSA5LjAxZSsyMSAtIDkuMDFlKzIxICsgMC4wMTsKK3ByaW50ICgidGhlIHZhbHVlIG9mIGEgaXMgIiwgJGEsICJcbiIpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhMjI3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgb3MKKworb3Muc3lzdGVtKCd0b3VjaCAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCisKK2EgPSA5LjAxZSsyMSAtIDkuMDFlKzIxICsgMC4wMQorcHJpbnQgInRoZSB2YWx1ZSBvZiBhIGlzICVzIiAlIGEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3RtYWtlZmlsZSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3RtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE4NDRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdG1ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAordGVzdDogdGVzdC5vCisJZ2NjIC1vIHRlc3QgdGVzdC5vIC1sbQordGVzdC5vOiB0ZXN0LmMKKwlnY2MgLWMgdGVzdC5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2djYy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2djYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTBjZDE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZ2NjLnB5CkBAIC0wLDAgKzEsNDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgR2NjQ29tcGlsZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3QuYyIpLCAiL3RtcC90ZXN0LmMiKQorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdG1ha2VmaWxlIiksICIvdG1wL3Rlc3RtYWtlZmlsZSIpCisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LmNwcCIpLCAiL3RtcC90ZXN0LmNwcCIpCisKKyAgICBAdGVzdGNhc2UoMjAzKQorICAgIGRlZiB0ZXN0X2djY19jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnY2MgL3RtcC90ZXN0LmMgLW8gL3RtcC90ZXN0IC1sbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9ImdjYyBjb21waWxlIGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy90bXAvdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgY29tcGlsZWQgZmlsZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMjAwKQorICAgIGRlZiB0ZXN0X2dwcF9jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnKysgL3RtcC90ZXN0LmMgLW8gL3RtcC90ZXN0IC1sbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9ImcrKyBjb21waWxlIGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy90bXAvdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgY29tcGlsZWQgZmlsZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE0MikKKyAgICBkZWYgdGVzdF9ncHAyX2NvbXBpbGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2crKyAvdG1wL3Rlc3QuY3BwIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnKysgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIwNCkKKyAgICBkZWYgdGVzdF9tYWtlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdjZCAvdG1wOyBtYWtlIC1mIHRlc3RtYWtlZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgbWFrZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QuYyAvdG1wL3Rlc3QubyAvdG1wL3Rlc3QgL3RtcC90ZXN0bWFrZWZpbGUiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUva2VybmVsbW9kdWxlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUva2VybmVsbW9kdWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODE3MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9rZXJuZWxtb2R1bGUucHkKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworCitjbGFzcyBLZXJuZWxNb2R1bGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAiaGVsbG9tb2QuYyIpLCAiL3RtcC9oZWxsb21vZC5jIikKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgImhlbGxvbW9kX21ha2VmaWxlIiksICIvdG1wL01ha2VmaWxlIikKKworICAgIEB0ZXN0Y2FzZSgnMzE2JykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X2djY19jb21waWxlJykKKyAgICBkZWYgdGVzdF9rZXJuZWxfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbWRzID0gWworICAgICAgICAgICAgJ2NkIC91c3Ivc3JjL2tlcm5lbCAmJiBtYWtlIHNjcmlwdHMnLAorICAgICAgICAgICAgJ2NkIC90bXAgJiYgbWFrZScsCisgICAgICAgICAgICAnY2QgL3RtcCAmJiBpbnNtb2QgaGVsbG9tb2Qua28nLAorICAgICAgICAgICAgJ2xzbW9kIHwgZ3JlcCBoZWxsb21vZCcsCisgICAgICAgICAgICAnZG1lc2cgfCBncmVwIEhlbGxvJywKKyAgICAgICAgICAgICdybW1vZCBoZWxsb21vZCcsICdkbWVzZyB8IGdyZXAgIkNsZWFuaW5nIHVwIGhlbGxvbW9kIicKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIGNtZCBpbiBjbWRzOgorICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihjbWQsIDkwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlxuIi5qb2luKFtjbWQsIG91dHB1dF0pKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3JtIC1mIC90bXAvTWFrZWZpbGUgL3RtcC9oZWxsb21vZC5jJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xkZC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xkZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2IzODg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbGRkLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCitjbGFzcyBMZGRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2MikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2xkZF9leGlzdHMoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIGxkZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAibGRkIGRvZXMgbm90IGV4aXN0IGluIFBBVEg6IHdoaWNoIGxkZDogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIzOSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9sZGRfZXhpc3RzJykKKyAgICBkZWYgdGVzdF9sZGRfcnRsZGxpc3RfY2hlY2soc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2ZvciBpIGluICQod2hpY2ggbGRkIHwgeGFyZ3MgY2F0IHwgZ3JlcCAiXlJUTERMSVNUInxjdXQgLWRcJz1cJyAtZjJ8dHIgLWQgXCciXCcpOyBkbyB0ZXN0IC1mICRpICYmIGVjaG8gJGkgJiYgYnJlYWs7IGRvbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gImxkZCBwYXRoIG5vdCBjb3JyZWN0IG9yIFJUTERMSVNUIGZpbGVzIGRvbid0IGV4aXN0LiAiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbG9ncm90YXRlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbG9ncm90YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZDc5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9sb2dyb3RhdGUucHkKQEAgLTAsMCArMSwyOCBAQAorIyBUaGlzIHRlc3Qgc2hvdWxkIGNvdmVyIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy90cl9zaG93X2Nhc2UuY2dpP2Nhc2VfaWQ9Mjg5IHRlc3RjYXNlCisjIE5vdGUgdGhhdCB0aGUgaW1hZ2UgdW5kZXIgdGVzdCBtdXN0IGhhdmUgbG9ncm90YXRlIGluc3RhbGxlZAorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImxvZ3JvdGF0ZSIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBsb2dyb3RhdGUgcGFja2FnZSBpbiBpbWFnZSIpCisKKworY2xhc3MgTG9ncm90YXRlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfMV9sb2dyb3RhdGVfc2V0dXAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiQ291bGQgbm90IGNyZWF0ZSBsb2dyb3RhdGVfZGlyLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigic2VkIC1pICdzI3d0bXAgeyN3dG1wIHtcXG4gICAgb2xkZGlyIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpciMnIC9ldGMvbG9ncm90YXRlLmNvbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkNvdWxkIG5vdCB3cml0ZSB0byBsb2dyb3RhdGUuY29uZiBmaWxlLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzKSIgJSAoc3RhdHVzLCBvdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDI4OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF8xX2xvZ3JvdGF0ZV9zZXR1cCIpCisgICAgZGVmIHRlc3RfMl9sb2dyb3RhdGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ3JvdGF0ZSAtZiAvZXRjL2xvZ3JvdGF0ZS5jb25mJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJsb2dyb3RhdGUgc2VydmljZSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuIFN0YXR1cyBhbmQgb3V0cHV0OiAlcyBhbmQgJXMiICUgKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKCdscyAtbGEgL2hvbWUvcm9vdC9sb2dyb3RhdGVfZGlyLyB8IHdjIC1sJylbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChvdXRwdXQpPj0zLCBtc2cgPSAibmV3IGxvZ2ZpbGUgY291bGQgbm90IGJlIGNyZWF0ZWQuIExpc3Qgb2YgZmlsZXMgd2l0aGluIGxvZyBkaXJlY3Rvcnk6ICVzIiAlKHNlbGYudGFyZ2V0LnJ1bignbHMgLWxhIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpcicpWzFdKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL211bHRpbGliLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbXVsdGlsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiY2M0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL211bHRpbGliLnB5CkBAIC0wLDAgKzEsNDggQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgbXVsdGlsaWJzID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiTVVMVElMSUJTIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiAibXVsdGlsaWI6bGliMzIiIG5vdCBpbiBtdWx0aWxpYnM6CisgICAgICAgIHNraXBNb2R1bGUoInRoaXMgaXNuJ3QgYSBtdWx0aWxpYjpsaWIzMiBpbWFnZSIpCisKKworY2xhc3MgTXVsdGlsaWJUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIHMpOgorICAgICAgICAiIiIKKyAgICAgICAgUGFyc2UgdGhlIG91dHB1dCBvZiByZWFkZWxmIC1oIGFuZCByZXR1cm4gdGhlIGJpbmFyeSBjbGFzcywgb3IgZmFpbC4KKyAgICAgICAgIiIiCisgICAgICAgIGwgPSBbbC5zcGxpdCgpWzFdIGZvciBsIGluIHMuc3BsaXQoJ1xuJykgaWYgIkNsYXNzOiIgaW4gbF0KKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHJldHVybiBsWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNhbm5vdCBwYXJzZSByZWFkZWxmIG91dHB1dFxuIiArIHMpCisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2NoZWNrX211bHRpbGliX2xpYmMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGF0IGEgbXVsdGlsaWIgaW1hZ2UgaGFzIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbGliYyBpbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvbGliL2xpYmMuc28uNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL2xpYi9saWJjLnNvLjYiKQorICAgICAgICBjbGFzczMyID0gc2VsZi5wYXJzZShvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvbGliNjQvbGliYy5zby42IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJGYWlsZWQgdG8gcmVhZGVsZiAvbGliNjQvbGliYy5zby42IikKKyAgICAgICAgY2xhc3M2NCA9IHNlbGYucGFyc2Uob3V0cHV0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3MzMiwgIkVMRjMyIiwgbXNnPSIvbGliL2xpYmMuc28uNiBpc24ndCBFTEYzMiAoaXMgJXMpIiAlIGNsYXNzMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3M2NCwgIkVMRjY0IiwgbXNnPSIvbGliNjQvbGliYy5zby42IGlzbid0IEVMRjY0IChpcyAlcykiICUgY2xhc3M2NCkKKworICAgIEB0ZXN0Y2FzZSgnMjc5JykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9jaGVja19tdWx0aWxpYl9saWJjJykKKyAgICBkZWYgdGVzdF9maWxlX2Nvbm5tYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoJ2xpYjMyLWNvbm5tYW4tZ25vbWUnKSwgbXNnPSJUaGlzIHRlc3QgYXNzdW1lcyBsaWIzMi1jb25ubWFuLWdub21lIGlzIGluc3RhbGxlZCIpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvdXNyL2Jpbi9jb25ubWFuLWFwcGxldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL3Vzci9iaW4vY29ubm1hbi1hcHBsZXQiKQorICAgICAgICB0aGVjbGFzcyA9IHNlbGYucGFyc2Uob3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWNsYXNzLCAiRUxGMzIiLCBtc2c9ImNvbm5tYW4tYXBwbGV0IGlzbid0IEVMRjMyIChpcyAlcykiICUgdGhlY2xhc3MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wYW0ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wYW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyMDVjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhbS5weQpAQCAtMCwwICsxLDI1IEBACisjIFRoaXMgdGVzdCBzaG91bGQgY292ZXIgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD0yODcgdGVzdGNhc2UKKyMgTm90ZSB0aGF0IHRoZSBpbWFnZSB1bmRlciB0ZXN0IG11c3QgaGF2ZSAicGFtIiBpbiBESVNUUk9fRkVBVFVSRVMKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJwYW0iKToKKyAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSAncGFtJyBpbiBESVNUUk9fRkVBVFVSRVMiKQorCisKK2NsYXNzIFBhbUJhc2ljVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyODcpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wYW0oc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ2luIC0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAxLCBtc2cgPSAibG9naW4gY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdwYXNzd2QgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJwYXNzd2QgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdSAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInN1IGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndXNlcmFkZCAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInVzZXJhZGQgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFyc2Vsb2dzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFyc2Vsb2dzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDk0N2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wYXJzZWxvZ3MucHkKQEAgLTAsMCArMSwyNTcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworI2luIHRoZSBmdXR1cmUgdGhlc2UgbGlzdHMgY291bGQgYmUgbW92ZWQgb3V0c2lkZSBvZiBtb2R1bGUKK2Vycm9ycyA9IFsiZXJyb3IiLCAiY2Fubm90IiwgImNhblwndCIsICJmYWlsZWQiXQorCitjb21tb25fZXJyb3JzID0gWworICAgICIoV1cpIHdhcm5pbmcsIChFRSkgZXJyb3IsIChOSSkgbm90IGltcGxlbWVudGVkLCAoPz8pIHVua25vd24uIiwKKyAgICAiZG1hIHRpbWVvdXQiLAorICAgICJjYW5cJ3QgYWRkIGhpZCBkZXZpY2U6IiwKKyAgICAidXNiaGlkOiBwcm9iZSBvZiAiLAorICAgICJfT1NDIGZhaWxlZCAoQUVfRVJST1IpIiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX1NVUFBPUlQpIiwKKyAgICAiQUVfQUxSRUFEWV9FWElTVFMiLAorICAgICJBQ1BJIF9PU0MgcmVxdWVzdCBmYWlsZWQgKEFFX1NVUFBPUlQpIiwKKyAgICAiY2FuXCd0IGRpc2FibGUgQVNQTSIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcInZlc2FcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSB2ZXNhIiwKKyAgICAiRmFpbGVkIHRvIGxvYWQgbW9kdWxlIFwibW9kZXNldHRpbmdcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBtb2Rlc2V0dGluZyIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcImdseFwiIiwKKyAgICAiRmFpbGVkIHRvIGxvYWQgbW9kdWxlIFwiZmJkZXZcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBmYmRldiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBnbHgiLAorICAgICJbZHJtXSBDYW5ub3QgZmluZCBhbnkgY3J0YyBvciBzaXplcyAtIGdvaW5nIDEwMjR4NzY4IiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX05PVF9GT1VORCk7IGRpc2FibGluZyBBU1BNIiwKKyAgICAiT3BlbiBBQ1BJIGZhaWxlZCAoL3Zhci9ydW4vYWNwaWQuc29ja2V0KSAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkiLAorICAgICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uIGNhbm5vdCBiZSBlbmFibGVkOiBub24tUEFFIGtlcm5lbCEiLAorICAgICJoZC46IHBvc3NpYmx5IGZhaWxlZCBvcGNvZGUiLAorICAgICdORVRMSU5LIElOSVRJQUxJWkFUSU9OIEZBSUxFRCcsCisgICAgJ2tlcm5lbDogQ2Fubm90IGZpbmQgbWFwIGZpbGUnLAorICAgICdvbWFwX2h3bW9kOiBkZWJ1Z3NzOiBfd2FpdF90YXJnZXRfZGlzYWJsZSBmYWlsZWQnLAorICAgICdWR0EgYXJiaXRlcjogY2Fubm90IG9wZW4ga2VybmVsIGFyYml0ZXIsIG5vIG11bHRpLWNhcmQgc3VwcG9ydCcsCisgICAgJ0ZhaWxlZCB0byBmaW5kIFVSTDpodHRwOi8vaXB2NC5jb25ubWFuLm5ldC9vbmxpbmUvc3RhdHVzLmh0bWwnLAorICAgICdPbmxpbmUgY2hlY2sgZmFpbGVkIGZvcicsCisgICAgXQorCit4ODZfY29tbW9uID0gWworICAgICdbZHJtOnBzYl9kb19pbml0XSAqRVJST1IqIERlYnVnIGlzJywKKyAgICAnd3JvbmcgRUxGIGNsYXNzJywKKyAgICAnQ291bGQgbm90IGVuYWJsZSBQb3dlckJ1dHRvbiBldmVudCcsCisgICAgJ3Byb2JlIG9mIExOWFBXUkJOOjAwIGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCitdICsgY29tbW9uX2Vycm9ycworCitxZW11eDg2X2NvbW1vbiA9IFsKKyAgICAnRmFzdCBUU0MgY2FsaWJyYXRpb24nLCAKKyAgICAnd3JvbmcgRUxGIGNsYXNzJywKKyAgICAiZmFpbCB0byBhZGQgTU1DT05GSUcgaW5mb3JtYXRpb24sIGNhbid0IGFjY2VzcyBleHRlbmRlZCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSB1bmRlciB0aGlzIGJyaWRnZS4iLAorICAgICJjYW4ndCBjbGFpbSBCQVIgIiwKK10gKyBjb21tb25fZXJyb3JzCisKK2lnbm9yZV9lcnJvcnMgPSB7IAorICAgICdkZWZhdWx0JyA6IGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXV4ODYnIDogWworICAgICAgICAnRmFpbGVkIHRvIGFjY2VzcyBwZXJmY3RyIG1zciAoTVNSJywKKyAgICAgICAgXSArIHFlbXV4ODZfY29tbW9uLAorICAgICdxZW11eDg2LTY0JyA6IHFlbXV4ODZfY29tbW9uLAorICAgICdxZW11bWlwcycgOiBbCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInLAorICAgICAgICAncGNpIDAwMDA6MDA6MDAuMDogW0Zpcm13YXJlIEJ1Z106IHJlZyAweC4uOiBpbnZhbGlkIEJBUiAoY2FuXCd0IHNpemUpJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXVtaXBzNjQnIDogWworICAgICAgICAncGNpIDAwMDA6MDA6MDAuMDogW0Zpcm13YXJlIEJ1Z106IHJlZyAweC4uOiBpbnZhbGlkIEJBUiAoY2FuXCd0IHNpemUpJywKKyAgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11cHBjJyA6IFsKKyAgICAgICAgJ1BDSSAwMDAwOjAwIENhbm5vdCByZXNlcnZlIExlZ2FjeSBJTyBbaW8gIDB4MDAwMC0weDBmZmZdJywKKyAgICAgICAgJ2hvc3Qgc2lkZSA4MC13aXJlIGNhYmxlIGRldGVjdGlvbiBmYWlsZWQsIGxpbWl0aW5nIG1heCBzcGVlZCcsCisgICAgICAgICdtb2RlICI2NDB4NDgwIiB0ZXN0IGZhaWxlZCcsCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdWFybScgOiBbCisgICAgICAgICdtbWNpLXBsMTh4OiBwcm9iZSBvZiBmcGdhOjA1IGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCisgICAgICAgICdtbWNpLXBsMTh4OiBwcm9iZSBvZiBmcGdhOjBiIGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11YXJtNjQnIDogWworICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCisgICAgICAgICcoRUUpIFNlcnZlciB0ZXJtaW5hdGVkIHdpdGggZXJyb3IgKDEpLiBDbG9zaW5nIGxvZyBmaWxlLicsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdlbWVubG93JyA6IFsKKyAgICAgICAgJ1tGaXJtd2FyZSBCdWddOiBBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2JkcnYiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYmRydicsCisgICAgICAgICcoRUUpIG9wZW4gL2Rldi9mYjA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLAorICAgICAgICAnKEVFKSBBSUdMWDogcmV2ZXJ0aW5nIHRvIHNvZnR3YXJlIHJlbmRlcmluZycsCisgICAgICAgIF0gKyB4ODZfY29tbW9uLAorICAgICdjb3JlMl8zMicgOiBbCisgICAgICAgICdBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnW0Zpcm13YXJlIEJ1Z106IEFDUEk6IE5vIF9CUUMgbWV0aG9kLCBjYW5ub3QgZGV0ZXJtaW5lIGluaXRpYWwgYnJpZ2h0bmVzcycsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSAicHNiIicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSBwc2InLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYmRydiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiZHJ2JywKKyAgICAgICAgJyhFRSkgb3BlbiAvZGV2L2ZiMDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsCisgICAgICAgICcoRUUpIEFJR0xYOiByZXZlcnRpbmcgdG8gc29mdHdhcmUgcmVuZGVyaW5nJywKKyAgICAgICAgXSArIHg4Nl9jb21tb24sCisgICAgJ2ludGVsLWNvcmVpNy02NCcgOiBbCisgICAgICAgICJjb250cm9sbGVyIGNhbid0IGRvIERFVlNMUCwgdHVybmluZyBvZmYiLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnY3Jvd25iYXknIDogeDg2X2NvbW1vbiwKKyAgICAnZ2VuZXJpY3g4NicgOiB4ODZfY29tbW9uLAorICAgICdnZW5lcmljeDg2LTY0JyA6IHg4Nl9jb21tb24sCisgICAgJ2VkZ2Vyb3V0ZXInIDogWworICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdtaW5ub3cnIDogWworICAgICAgICAnbmV0bGluayBpbml0IGZhaWxlZCcsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdqYXNwZXJmb3Jlc3QnIDogWworICAgICAgICAnQWN0aXZhdGVkIHNlcnZpY2UgXCdvcmcuYmx1ZXpcJyBmYWlsZWQ6JywKKyAgICAgICAgJ1VuYWJsZSB0byBmaW5kIE5GQyBuZXRsaW5rIGZhbWlseScsCisgICAgICAgICduZXRsaW5rIGluaXQgZmFpbGVkJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCit9CisKK2xvZ19sb2NhdGlvbnMgPSBbIi92YXIvbG9nLyIsIi92YXIvbG9nL2RtZXNnIiwgIi90bXAvZG1lc2dfb3V0cHV0LmxvZyJdCisKK2NsYXNzIFBhcnNlTG9nc1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5pZ25vcmVfZXJyb3JzID0gaWdub3JlX2Vycm9ycworICAgICAgICBzZWxmLmxvZ19sb2NhdGlvbnMgPSBsb2dfbG9jYXRpb25zCisgICAgICAgIHNlbGYubXNnID0gIiIKKworICAgIGRlZiBnZXRNYWNoaW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiTUFDSElORSIsIFRydWUpCisKKyAgICAjZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIENQVSBvZiB0aGUgbWFjaGluZSB0byBkaXNwbGF5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dC4gVGhpcyBpbmZvIG1pZ2h0IGJlIHVzZWZ1bCBpbiBzb21lIGNhc2VzLgorICAgIGRlZiBnZXRIYXJkd2FyZUluZm8oc2VsZik6CisgICAgICAgIGh3aSA9ICIiCisgICAgICAgIChzdGF0dXMsIGNwdV9uYW1lKSA9IHNlbGYudGFyZ2V0LnJ1bigiY2F0IC9wcm9jL2NwdWluZm8gfCBncmVwIFwibW9kZWwgbmFtZVwiIHwgaGVhZCAtbjEgfCBhd2sgJ0JFR0lOe0ZTPVwiOlwifXtwcmludCAkMn0nIikKKyAgICAgICAgKHN0YXR1cywgY3B1X3BoeXNpY2FsX2NvcmVzKSA9IHNlbGYudGFyZ2V0LnJ1bigiY2F0IC9wcm9jL2NwdWluZm8gfCBncmVwIFwiY3B1IGNvcmVzXCIgfCBoZWFkIC1uMSB8IGF3ayB7J3ByaW50ICQ0J30iKQorICAgICAgICAoc3RhdHVzLCBjcHVfbG9naWNhbF9jb3JlcykgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcInByb2Nlc3NvclwiIHwgd2MgLWwiKQorICAgICAgICAoc3RhdHVzLCBjcHVfYXJjaCkgPSBzZWxmLnRhcmdldC5ydW4oInVuYW1lIC1tIikKKyAgICAgICAgaHdpICs9ICJNYWNoaW5lIGluZm9ybWF0aW9uOiBcbiIKKyAgICAgICAgaHdpICs9ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgIGh3aSArPSAiTWFjaGluZSBuYW1lOiAiK3NlbGYuZ2V0TWFjaGluZSgpKyJcbiIKKyAgICAgICAgaHdpICs9ICJDUFU6ICIrc3RyKGNwdV9uYW1lKSsiXG4iCisgICAgICAgIGh3aSArPSAiQXJjaDogIitzdHIoY3B1X2FyY2gpKyJcbiIKKyAgICAgICAgaHdpICs9ICJQaHlzaWNhbCBjb3JlczogIitzdHIoY3B1X3BoeXNpY2FsX2NvcmVzKSsiXG4iCisgICAgICAgIGh3aSArPSAiTG9naWNhbCBjb3JlczogIitzdHIoY3B1X2xvZ2ljYWxfY29yZXMpKyJcbiIKKyAgICAgICAgaHdpICs9ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgIHJldHVybiBod2kKKworICAgICNnbyB0aHJvdWdoIHRoZSBsb2cgbG9jYXRpb25zIHByb3ZpZGVkIGFuZCBpZiBpdCdzIGEgZm9sZGVyIGNyZWF0ZSBhIGxpc3Qgd2l0aCBhbGwgdGhlIC5sb2cgZmlsZXMgaW4gaXQsIGlmIGl0J3MgYSBmaWxlIGp1c3QgYWRkIAorICAgICNpdCB0byB0aGF0IGxpc3QKKyAgICBkZWYgZ2V0TG9nTGlzdChzZWxmLCBsb2dfbG9jYXRpb25zKToKKyAgICAgICAgbG9ncyA9IFtdCisgICAgICAgIGZvciBsb2NhdGlvbiBpbiBsb2dfbG9jYXRpb25zOgorICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigidGVzdCAtZiAiK3N0cihsb2NhdGlvbikpCisgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKHN0cihsb2NhdGlvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInRlc3QgLWQgIitzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCk6CisgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImZpbmQgIitzdHIobG9jYXRpb24pKyIvKi5sb2cgLW1heGRlcHRoIDEgLXR5cGUgZiIpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCk6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbG9nZmlsZSBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ncy5hcHBlbmQob3MucGF0aC5qb2luKGxvY2F0aW9uLHN0cihsb2dmaWxlKSkpCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICAjY29weSB0aGUgbG9nIGZpbGVzIHRvIGJlIHBhcnNlZCBsb2NhbGx5CisgICAgZGVmIHRyYW5zZmVyX2xvZ3Moc2VsZiwgbG9nX2xpc3QpOgorICAgICAgICB0YXJnZXRfbG9ncyA9ICd0YXJnZXRfbG9ncycKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9sb2dzKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRhcmdldF9sb2dzKQorICAgICAgICBmb3IgZiBpbiBsb2dfbGlzdDoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LmNvcHlfZnJvbShmLCB0YXJnZXRfbG9ncykKKworICAgICNnZXQgdGhlIGxvY2FsIGxpc3Qgb2YgbG9ncworICAgIGRlZiBnZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZiwgbG9nX2xvY2F0aW9ucyk6CisgICAgICAgIHNlbGYudHJhbnNmZXJfbG9ncyhzZWxmLmdldExvZ0xpc3QobG9nX2xvY2F0aW9ucykpCisgICAgICAgIGxvZ3MgPSBbIG9zLnBhdGguam9pbigndGFyZ2V0X2xvZ3MnLGYpIGZvciBmIGluIG9zLmxpc3RkaXIoJ3RhcmdldF9sb2dzJykgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKCd0YXJnZXRfbG9ncycsZikpIF0KKyAgICAgICAgcmV0dXJuIGxvZ3MKKworICAgICNidWlsZCB0aGUgZ3JlcCBjb21tYW5kIHRvIGJlIHVzZWQgd2l0aCBmaWx0ZXJzIGFuZCBleGNsdXNpb25zCisgICAgZGVmIGJ1aWxkX2dyZXBjbWQoc2VsZiwgZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2cpOgorICAgICAgICBncmVwY21kID0gImdyZXAgIgorICAgICAgICBncmVwY21kICs9Ii1FaSBcIiIKKyAgICAgICAgZm9yIGVycm9yIGluIGVycm9yczoKKyAgICAgICAgICAgIGdyZXBjbWQgKz0gZXJyb3IrInwiCisgICAgICAgIGdyZXBjbWQgPSBncmVwY21kWzotMV0KKyAgICAgICAgZ3JlcGNtZCArPSAiXCIgIitzdHIobG9nKSsiIHwgZ3JlcCAtRWl2IFwnIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnJvcmxpc3QgPSBpZ25vcmVfZXJyb3JzW3NlbGYuZ2V0TWFjaGluZSgpXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLm1zZyArPSAiTm8gaWdub3JlIGxpc3QgZm91bmQgZm9yIHRoaXMgbWFjaGluZSwgdXNpbmcgZGVmYXVsdFxuIgorICAgICAgICAgICAgZXJyb3JsaXN0ID0gaWdub3JlX2Vycm9yc1snZGVmYXVsdCddCisgICAgICAgIGZvciBpZ25vcmVfZXJyb3IgaW4gZXJyb3JsaXN0OgorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIigiLCAiXCgiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIikiLCAiXCkiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIiciLCAiLiIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiPyIsICJcPyIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiWyIsICJcWyIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiXSIsICJcXSIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiKiIsICJcKiIpCisgICAgICAgICAgICBncmVwY21kICs9IGlnbm9yZV9lcnJvcisifCIKKyAgICAgICAgZ3JlcGNtZCA9IGdyZXBjbWRbOi0xXQorICAgICAgICBncmVwY21kICs9ICJcJyIKKyAgICAgICAgcmV0dXJuIGdyZXBjbWQKKworICAgICNncmVwIG9ubHkgdGhlIGVycm9ycyBzbyB0aGF0IHRoZWlyIGNvbnRleHQgY291bGQgYmUgY29sbGVjdGVkLiBEZWZhdWx0IGNvbnRleHQgaXMgMTAgbGluZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZXJyb3IgaXRzZWxmCisgICAgZGVmIHBhcnNlX2xvZ3Moc2VsZiwgZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2dzLCBsaW5lc19iZWZvcmUgPSAxMCwgbGluZXNfYWZ0ZXIgPSAxMCk6CisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICByZXogPSBbXQorICAgICAgICBncmVwX291dHB1dCA9ICcnCisgICAgICAgIGZvciBsb2cgaW4gbG9nczoKKyAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgICAgIHRoZWdyZXAgPSBzZWxmLmJ1aWxkX2dyZXBjbWQoZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2cpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQodGhlZ3JlcCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiAocmVzdWx0IGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICByZXN1bHRzW2xvZy5yZXBsYWNlKCd0YXJnZXRfbG9ncy8nLCcnKV0gPSB7fQorICAgICAgICAgICAgICAgIHJleiA9IHJlc3VsdC5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmb3IgeHJleiBpbiByZXo6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAiZ3JlcCBcIlxcIitzdHIoeHJleikrIlwiIC1CICIrc3RyKGxpbmVzX2JlZm9yZSkrIiAtQSAiK3N0cihsaW5lc19hZnRlcikrIiAiK3N0cihsb2cpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY29tbWFuZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2xvZy5yZXBsYWNlKCd0YXJnZXRfbG9ncy8nLCcnKV1beHJlel09Z3JlcF9vdXRwdXQKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgICNnZXQgdGhlIG91dHB1dCBvZiBkbWVzZyBhbmQgd3JpdGUgaXQgaW4gYSBmaWxlLiBUaGlzIGZpbGUgaXMgYWRkZWQgdG8gbG9nX2xvY2F0aW9ucy4KKyAgICBkZWYgd3JpdGVfZG1lc2coc2VsZik6CisgICAgICAgIChzdGF0dXMsIGRtZXNnKSA9IHNlbGYudGFyZ2V0LnJ1bigiZG1lc2ciKQorICAgICAgICAoc3RhdHVzLCBkbWVzZzIpID0gc2VsZi50YXJnZXQucnVuKCJlY2hvIFwiIitzdHIoZG1lc2cpKyJcIiA+IC90bXAvZG1lc2dfb3V0cHV0LmxvZyIpCisKKyAgICBAdGVzdGNhc2UoMTA1OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3BhcnNlbG9ncyhzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9kbWVzZygpCisgICAgICAgIGxvZ19saXN0ID0gc2VsZi5nZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZi5sb2dfbG9jYXRpb25zKQorICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlX2xvZ3Moc2VsZi5lcnJvcnMsIHNlbGYuaWdub3JlX2Vycm9ycywgbG9nX2xpc3QpCisgICAgICAgIHByaW50IHNlbGYuZ2V0SGFyZHdhcmVJbmZvKCkKKyAgICAgICAgZXJyY291bnQgPSAwCisgICAgICAgIGZvciBsb2cgaW4gcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIkxvZzogIitsb2crIlxuIgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICBmb3IgZXJyb3IgaW4gcmVzdWx0W2xvZ106CisgICAgICAgICAgICAgICAgZXJyY291bnQgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICJDZW50cmFsIGVycm9yOiAiK3N0cihlcnJvcikrIlxuIgorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICAiKioqKioqKioqKioqKioqKioqKioqKipcbiIKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAgcmVzdWx0W3N0cihsb2cpXVtzdHIoZXJyb3IpXSsiXG4iCisgICAgICAgICAgICAgICAgc2VsZi5tc2cgKz0gICIqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICBzZWxmLm1zZyArPSAiJXMgZXJyb3JzIGZvdW5kIGluIGxvZ3MuIiAlIGVycmNvdW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyY291bnQsIDAsIG1zZz1zZWxmLm1zZykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BlcmwucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDRkMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5CkBAIC0wLDAgKzEsMzAgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJwZXJsIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHBlcmwgcGFja2FnZSBpbiB0aGUgaW1hZ2UiKQorCisKK2NsYXNzIFBlcmxUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LnBsIiksICIvdG1wL3Rlc3QucGwiKQorCisgICAgQHRlc3RjYXNlKDExNDEpCisgICAgZGVmIHRlc3RfcGVybF9leGlzdHMoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIHBlcmwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQZXJsIGJpbmFyeSBub3QgaW4gUEFUSCBvciBub3Qgb24gdGFyZ2V0LiIpCisKKyAgICBAdGVzdGNhc2UoMjA4KQorICAgIGRlZiB0ZXN0X3Blcmxfd29ya3Moc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3BlcmwgL3RtcC90ZXN0LnBsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iRXhpdCBzdGF0dXMgd2FzIG5vdCAwLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICJ0aGUgdmFsdWUgb2YgYSBpcyAwLjAxIiwgbXNnPSJJbmNvcnJlY3Qgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QucGwiKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGluZy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjNDYwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2NsYXNzIFBpbmdUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2NCkKKyAgICBkZWYgdGVzdF9waW5nKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgNjAKKyAgICAgICAgd2hpbGUgY291bnQgPCA1IGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CisgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigicGluZyAtYyAxICVzIiAlIHNlbGYudGFyZ2V0LmlwLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgb3V0cHV0ICs9IHByb2MuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgaWYgcHJvYy5wb2xsKCkgPT0gMDoKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCA1LCBtc2cgPSAiRXhwZWN0ZWQgNSBjb25zZWN1dGl2ZSByZXBsaWVzLCBnb3QgJWQuXG5waW5nIG91dHB1dCBpczpcbiVzIiAlIChjb3VudCxvdXRwdXQpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcHl0aG9uLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcHl0aG9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWRiN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKQEAgLTAsMCArMSwzNSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInB5dGhvbiIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBweXRob24gcGFja2FnZSBpbiB0aGUgaW1hZ2UiKQorCisKK2NsYXNzIFB5dGhvblRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3QucHkiKSwgIi90bXAvdGVzdC5weSIpCisKKyAgICBAdGVzdGNhc2UoMTE0NSkKKyAgICBkZWYgdGVzdF9weXRob25fZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBweXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQeXRob24gYmluYXJ5IG5vdCBpbiBQQVRIIG9yIG5vdCBvbiB0YXJnZXQuIikKKworICAgIEB0ZXN0Y2FzZSg5NjUpCisgICAgZGVmIHRlc3RfcHl0aG9uX3N0ZG91dChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncHl0aG9uIC90bXAvdGVzdC5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkV4aXQgc3RhdHVzIHdhcyBub3QgMC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNDYpCisgICAgZGVmIHRlc3RfcHl0aG9uX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdscyAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlB5dGhvbiB0ZXN0IGZpbGUgZ2VuZXJhdGUgZmFpbGVkLiIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QucHkgL3RtcC90ZXN0ZmlsZS5weXRob24iKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcnBtLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcnBtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYWFlMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKQEAgLTAsMCArMSwxMDEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgZm5tYXRjaAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJycG0gbW9kdWxlIHNraXBwZWQ6IHRhcmdldCBkb2Vzbid0IGhhdmUgcGFja2FnZS1tYW5hZ2VtZW50IGluIElNQUdFX0ZFQVRVUkVTIikKKyAgICBpZiAicGFja2FnZV9ycG0iICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlBBQ0tBR0VfQ0xBU1NFUyIsIFRydWUpLnNwbGl0KClbMF06CisgICAgICAgICAgICBza2lwTW9kdWxlKCJycG0gbW9kdWxlIHNraXBwZWQ6IHRhcmdldCBkb2Vzbid0IGhhdmUgcnBtIGFzIHByaW1hcnkgcGFja2FnZSBtYW5hZ2VyIikKKworCitjbGFzcyBScG1CYXNpY1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoOTYwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3RfcnBtX2hlbHAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxOTEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2hlbHAnKQorICAgIGRlZiB0ZXN0X3JwbV9xdWVyeShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1xIHJwbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InN0YXR1cyBhbmQgb3V0cHV0OiAlcyBhbmQgJXMiICUgKHN0YXR1cyxvdXRwdXQpKQorCitjbGFzcyBScG1JbnN0YWxsUmVtb3ZlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBwa2dhcmNoID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSkucmVwbGFjZSgiLSIsICJfIikKKyAgICAgICAgcnBtZGlyID0gb3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKSwgInJwbSIsIHBrZ2FyY2gpCisgICAgICAgICMgcGljayBycG0tZG9jIGFzIGEgdGVzdCBmaWxlIHRvIGdldCBpbnN0YWxsZWQsIGJlY2F1c2UgaXQncyBzbWFsbCBhbmQgaXQgd2lsbCBhbHdheXMgYmUgYnVpbHQgZm9yIHN0YW5kYXJkIHRhcmdldHMKKyAgICAgICAgZm9yIGYgaW4gZm5tYXRjaC5maWx0ZXIob3MubGlzdGRpcihycG1kaXIpLCAicnBtLWRvYy0qLiVzLnJwbSIgJSBwa2dhcmNoKToKKyAgICAgICAgICAgIHRlc3RycG1maWxlID0gZgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihycG1kaXIsdGVzdHJwbWZpbGUpLCAiL3RtcC9ycG0tZG9jLnJwbSIpCisKKyAgICBAdGVzdGNhc2UoMTkyKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3JwbV9oZWxwJykKKyAgICBkZWYgdGVzdF9ycG1faW5zdGFsbChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1pdmggL3RtcC9ycG0tZG9jLnJwbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byBpbnN0YWxsIHJwbS1kb2MgcGFja2FnZTogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDE5NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faW5zdGFsbCcpCisgICAgZGVmIHRlc3RfcnBtX3JlbW92ZShzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWUgcnBtLWRvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byByZW1vdmUgcnBtLWRvYyBwYWNrYWdlOiAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA5NikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3JwbV9xdWVyeV9ub25yb290KHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd1c2VyYWRkIHRlc3QxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXR1cyA9PSAwLCBtc2c9IkZhaWxlZCB0byBjcmVhdGUgbmV3IHVzZXIiKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdWRvIC11IHRlc3QxIGlkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcodGVzdDEpJyBpbiBvdXRwdXQsIG1zZz0iRmFpbGVkIHRvIGV4ZWN1dGUgYXMgbmV3IHVzZXIiKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdWRvIC11IHRlc3QxIHJwbSAtcWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXM6ICVzLiBDYW5ub3QgcnVuIHJwbSAtcWEiICUgc3RhdHVzKQorCisgICAgQHRlc3RjYXNlKDE5NSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faW5zdGFsbCcpCisgICAgZGVmIHRlc3RfY2hlY2tfcnBtX2luc3RhbGxfcmVtb3ZhbF9sb2dfZmlsZV9zaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIHJwbSBpbnN0YWxsL3JlbW92YWwgbG9nIGZpbGUgc2l6ZQorICAgICAgICBFeHBlY3RlZDogICAgVGhlcmUgc2hvdWxkIGJlIHNvbWUgbWV0aG9kIHRvIGtlZXAgcnBtIGxvZyBpbiBhIHNtYWxsIHNpemUgLgorICAgICAgICBQcm9kdWN0OiAgICAgQlNQcworICAgICAgICBBdXRob3I6ICAgICAgQWxleGFuZHJ1IEdlb3JnZXNjdSA8YWxleGFuZHJ1LmMuZ2Vvcmdlc2N1QGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisgICAgICAgIGRiX2ZpbGVzX2NtZCA9ICdscyAvdmFyL2xpYi9ycG0vX19kYi4qJworICAgICAgICBnZXRfbG9nX3NpemVfY21kID0gImR1IC92YXIvbGliL3JwbS9sb2cvbG9nLiogfCBhd2sgJ3twcmludCAkMX0nIgorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgc29tZSBkYXRhYmFzZSBmaWxlcyBhcmUgdW5kZXIgL3Zhci9saWIvcnBtIGFzICdfX2RiLnh4eCcKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihkYl9maWxlc19jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGZpbmQgZGF0YWJhc2UgZmlsZXMgdW5kZXIgL3Zhci9saWIvcnBtLyBhcyBfX2RiLnh4eCcpCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIHBhY2thZ2UganVzdCBpbiBjYXNlCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorCisgICAgICAgICMgSW5zdGFsbC9SZW1vdmUgYSBwYWNrYWdlIDEwIHRpbWVzCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtaXZoIC90bXAvcnBtLWRvYy5ycG0nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICJGYWlsZWQgdG8gaW5zdGFsbCBycG0tZG9jIHBhY2thZ2UuIFJlYXNvbjoge30iLmZvcm1hdChvdXRwdXQpKQorCisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWUgcnBtLWRvYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgIkZhaWxlZCB0byByZW1vdmUgcnBtLWRvYyBwYWNrYWdlLiBSZWFzb246IHt9Ii5mb3JtYXQob3V0cHV0KSkKKworICAgICAgICAjIEdldCB0aGUgc2l6ZSBvZiBsb2cgZmlsZQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKGdldF9sb2dfc2l6ZV9jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGdldCB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgbG9nIGZpbGUuJykKKworICAgICAgICAjIENvbXBhcmUgZWFjaCBsb2cgc2l6ZQorICAgICAgICBmb3IgbG9nX2ZpbGVfc2l6ZSBpbiBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChpbnQobG9nX2ZpbGVfc2l6ZSksIDExMjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTG9nIGZpbGUgc2l6ZSBpcyBncmVhdGVyIHRoYXQgZXhwZWN0ZWQgKH4xME1CKSwgZm91bmQge30gYnl0ZXMnLmZvcm1hdChsb2dfZmlsZV9zaXplKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3JtIC1mIC90bXAvcnBtLWRvYy5ycG0nKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zY2FuZWxmLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2EwMjRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weQpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInBheC11dGlscyIpOgorICAgICAgICBza2lwTW9kdWxlKCJwYXgtdXRpbHMgcGFja2FnZSBub3QgaW5zdGFsbGVkIikKKworY2xhc3MgU2NhbmVsZlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2NhbmNtZCA9ICdzY2FuZWxmIC0tcXVpZXQgLS1yZWN1cnNpdmUgLS1tb3VudCAtLWxkcGF0aCAtLXBhdGgnCisKKyAgICBAdGVzdGNhc2UoOTY2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NhbmVsZl90ZXh0cmVsKHNlbGYpOgorICAgICAgICAjIHByaW50IFRFWFRSRUwgaW5mb3JtYXRpb24KKyAgICAgICAgc2VsZi5zY2FuY21kICs9ICIgLS10ZXh0cmVsIgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKHNlbGYuc2NhbmNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgIiIsICJcbiIuam9pbihbc2VsZi5zY2FuY21kLCBvdXRwdXRdKSkKKworICAgIEB0ZXN0Y2FzZSg5NjcpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zY2FuZWxmX3JwYXRoKHNlbGYpOgorICAgICAgICAjIHByaW50IFJQQVRIIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuc2NhbmNtZCArPSAiIC0tcnBhdGgiCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oc2VsZi5zY2FuY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5zdHJpcCgpLCAiIiwgIlxuIi5qb2luKFtzZWxmLnNjYW5jbWQsIG91dHB1dF0pKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NwLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTg3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zY3AucHkKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgc2tpcFVubGVzc1Bhc3NlZCwgdGVzdGNhc2UKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IChvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImRyb3BiZWFyIikgb3Igb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJvcGVuc3NoLXNzaGQiKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHNzaCBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU2NwVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMjApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zY3BfZmlsZShzZWxmKToKKyAgICAgICAgdGVzdF9sb2dfZGlyID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgdGVzdF9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9sb2dfZGlyLCAndGVzdF9zY3BfZmlsZScpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X2ZpbGVfcGF0aCwgJ3cnKSBhcyB0ZXN0X3NjcF9maWxlOgorICAgICAgICAgICAgdGVzdF9zY3BfZmlsZS5zZWVrKDIgKiogMjIgLSAxKQorICAgICAgICAgICAgdGVzdF9zY3BfZmlsZS53cml0ZShvcy5saW5lc2VwKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQuY29weV90byh0ZXN0X2ZpbGVfcGF0aCwgJy90bXAvdGVzdF9zY3BfZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiRmlsZSBjb3VsZCBub3QgYmUgY29waWVkLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigibHMgLWxhIC90bXAvdGVzdF9zY3BfZmlsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiU0NQIHRlc3QgZmFpbGVkIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NrZWxldG9uaW5pdC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NrZWxldG9uaW5pdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjBjYjliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2tlbGV0b25pbml0LnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgVGhpcyB0ZXN0IHNob3VsZCBjb3ZlciBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvdHJfc2hvd19jYXNlLmNnaT9jYXNlX2lkPTI4NCB0ZXN0Y2FzZQorIyBOb3RlIHRoYXQgdGhlIGltYWdlIHVuZGVyIHRlc3QgbXVzdCBoYXZlIG1ldGEtc2tlbGV0b24gbGF5ZXIgaW4gYmJsYXllcnMgYW5kIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBzZXJ2aWNlIiBpbiBsb2NhbC5jb25mCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic2VydmljZSIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzZXJ2aWNlIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIFNrZWxldG9uQmFzaWNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIGRlZiB0ZXN0X3NrZWxldG9uX2F2YWlsYWJpbGl0eShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbHMgL2V0Yy9pbml0LmQvc2tlbGV0b24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInNrZWxldG9uIGluaXQgc2NyaXB0IG5vdCBmb3VuZC4gT3V0cHV0OlxuJXMgIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9ICBzZWxmLnRhcmdldC5ydW4oJ2xzIC91c3Ivc2Jpbi9za2VsZXRvbi10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJza2VsZXRvbi10ZXN0IG5vdCBmb3VuZC4gT3V0cHV0OlxuJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDI4NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9za2VsZXRvbl9hdmFpbGFiaWxpdHknKQorICAgIEB1bml0dGVzdC5za2lwSWYoInN5c3RlbWQiID09IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBGYWxzZSksICJOb3QgYXBwcm9waWF0ZSBmb3Igc3lzdGVtZCBpbWFnZSIpCisgICAgZGVmIHRlc3Rfc2tlbGV0b25fc2NyaXB0KHNlbGYpOgorICAgICAgICBvdXRwdXQxID0gc2VsZi50YXJnZXQucnVuKCIvZXRjL2luaXQuZC9za2VsZXRvbiBzdGFydCIpWzFdCisgICAgICAgIChzdGF0dXMsIG91dHB1dDIpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbc11rZWxldG9uLXRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIlNrZWxldG9uIHNjcmlwdCBjb3VsZCBub3QgYmUgc3RhcnRlZDpcbiVzXG4lcyIgJSAob3V0cHV0MSwgb3V0cHV0MikpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zbWFydC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NtYXJ0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MTY2OGQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkKQEAgLTAsMCArMSwxNzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQorICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKKyAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQorCitjbGFzcyBTbWFydFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9oZWxwJykKKyAgICBkZWYgc21hcnQoc2VsZiwgY29tbWFuZCwgZXhwZWN0ZWQgPSAwKToKKyAgICAgICAgY29tbWFuZCA9ICdzbWFydCAlcycgJSBjb21tYW5kCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKGNvbW1hbmQsIDE1MDApCisgICAgICAgIG1lc3NhZ2UgPSBvcy5saW5lc2VwLmpvaW4oW2NvbW1hbmQsIG91dHB1dF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBleHBlY3RlZCwgbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSIgaW4gb3V0cHV0LCBtZXNzYWdlKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKK2NsYXNzIFNtYXJ0QmFzaWNUZXN0KFNtYXJ0VGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzE2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS1oZWxwJykKKworICAgIEB0ZXN0Y2FzZSg5NjgpCisgICAgZGVmIHRlc3Rfc21hcnRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS12ZXJzaW9uJykKKworICAgIEB0ZXN0Y2FzZSg3MjEpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5mbyBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNDIxKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3F1ZXJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdxdWVyeSBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNzIwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3NlYXJjaChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnc2VhcmNoIHB5dGhvbi1zbWFydHBtJykKKworICAgIEB0ZXN0Y2FzZSg3MjIpCisgICAgZGVmIHRlc3Rfc21hcnRfc3RhdHMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3N0YXRzJykKKworY2xhc3MgU21hcnRSZXBvVGVzdChTbWFydFRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb2xpc3QgPSBbXQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyID0gSFRUUFNlcnZpY2Uob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpLCBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5zZXJ2ZXJfaXApCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RhcnQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RvcCgpCisgICAgICAgIGZvciBpIGluIHNlbGYucmVwb2xpc3Q6CisgICAgICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLXkgLS1yZW1vdmUgJytzdHIoaSkpCisKKyAgICBAdGVzdGNhc2UoMTE0MykKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsJywgMSkKKworICAgIEB0ZXN0Y2FzZSg3MTkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9hZGQoc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBzZWxmLnRjLmQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZGVwbG95X3VybCA9ICdodHRwOi8vJXM6JXMvJXMnICUoc2VsZi50YXJnZXQuc2VydmVyX2lwLCBzZWxmLnJlcG9fc2VydmVyLnBvcnQsIGltYWdlX3BrZ3R5cGUpCisgICAgICAgIHBrZ2FyY2hzID0gc2VsZi50Yy5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnJlcGxhY2UoIi0iLCJfIikuc3BsaXQoKQorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKCclcy8lcycgJSAoc2VsZi5yZXBvX3NlcnZlci5yb290X2RpciwgaW1hZ2VfcGtndHlwZSkpOgorICAgICAgICAgICAgaWYgYXJjaCBpbiBwa2dhcmNoczoKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC15IC0tYWRkIHthfSB0eXBlPXJwbS1tZCBiYXNldXJsPXt1fS97YX0nLmZvcm1hdChhPWFyY2gsIHU9ZGVwbG95X3VybCkpCisgICAgICAgICAgICAgICAgc2VsZi5yZXBvbGlzdC5hcHBlbmQoYXJjaCkKKyAgICAgICAgc2VsZi5zbWFydCgndXBkYXRlJykKKworICAgIEB0ZXN0Y2FzZSg5NjkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0taGVscCcpCisKKyAgICBAdGVzdGNhc2UoOTcwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorCisgICAgQHRlc3RjYXNlKDk3MSkKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX3Nob3coc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93JykKKworICAgIEB0ZXN0Y2FzZSg3MTcpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9ycG1zeXMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1kaXNhYmxlIHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1lbmFibGUgcnBtc3lzJykKKworICAgIEB0ZXN0Y2FzZSgxMTQ0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyOCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyMykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5zdGFsbF9mcm9tX2Rpc2soc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IC4vcHNwbGFzaC1kZWZhdWx0KicpCisKKyAgICBAdGVzdGNhc2UoNzI1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2Zyb21faHR0cChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnZG93bmxvYWQgLS11cmxzIHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHVybCA9IHJlLnNlYXJjaCgnKGh0dHA6Ly8uKi9wc3BsYXNoLWRlZmF1bHQuKlwucnBtKScsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybCwgbXNnPSJDb3Vsbid0IGZpbmQgZG93bmxvYWQgdXJsIGluICVzIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgJXMnICUgdXJsLmdyb3VwKDApKQorCisgICAgQHRlc3RjYXNlKDcyOSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZWluc3RhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyNykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfcmVtb3RlX3JlcG8oc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3VwZGF0ZScpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgcHNwbGFzaCcpCisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKworICAgIEB0ZXN0Y2FzZSg3MjYpCisgICAgZGVmIHRlc3Rfc21hcnRfbG9jYWxfZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2NkIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoJykKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorICAgICAgICBmb3IgaSBpbiBvdXRwdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiAoInJwbXN5cyIgIT0gc3RyKGkpKSBhbmQgKCJteXJwbWRpciIgIT0gc3RyKGkpKToKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdjZCAvaG9tZS9yb290JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCBwc3BsYXNoJykKKyAgICAgICAgZm9yIGkgaW4gb3V0cHV0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgaWYgKCJycG1zeXMiICE9IHN0cihpKSkgYW5kICgibXlycG1kaXIiICE9IHN0cihpKSk6CisgICAgICAgICAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLXJlbW92ZSBteXJwbWRpciAteScpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigicm0gLXJmIC90bXAvbXlycG1kaXIiKQorCisgICAgQHRlc3RjYXNlKDcxOCkKKyAgICBkZWYgdGVzdF9zbWFydF9hZGRfcnBtZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJkaXNhYmxlZCA9IHllcyIgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBkaXNhYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZW5hYmxlICBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiZGlzYWJsZWQgPSB5ZXMiIGluIG91dHB1dCwgbXNnPSJGYWlsZWQgdG8gZW5hYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tcmVtb3ZlIG15cnBtZGlyIC15JykKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCJybSAtcmYgL3RtcC9teXJwbWRpciIpCisKKyAgICBAdGVzdGNhc2UoNzMxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZW1vdmVfcGFja2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NzaC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc2ZDVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3NoLnB5CkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJkcm9wYmVhciIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgib3BlbnNzaCIpKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc3NoIHBhY2thZ2UgaW4gaW1hZ2UiKQorCitjbGFzcyBTc2hUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIyNCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9waW5nJykKKyAgICBkZWYgdGVzdF9zc2goc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VuYW1lIC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iU1NIIFRlc3QgZmFpbGVkOiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2NhdCAvZXRjL21hc3RlcmltYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDEsIG1zZz0iVGhpcyBpc24ndCB0aGUgcmlnaHQgaW1hZ2UgIC0gL2V0Yy9tYXN0ZXJpbWFnZSBzaG91bGRuJ3QgYmUgaGVyZSAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXNsb2cucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXNsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwMWRkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJidXN5Ym94LXN5c2xvZyIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic3lza2xvZ2QiKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHN5c2xvZyBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU3lzbG9nVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMDEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX2hlbHAiKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19ydW5uaW5nKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCBncmVwIC1pIFtzXXlzbG9nZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9Im5vIHN5c2xvZ2QgcHJvY2VzcywgcHMgb3V0cHV0OiAlcyIgJSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZClbMV0pCisKK2NsYXNzIFN5c2xvZ1Rlc3RDb25maWcob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE0OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfcnVubmluZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX2xvZ2dlcihzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIHRlc3QgLWUgL3Zhci9sb2cvbWVzc2FnZXMgJiYgZ3JlcCBmb29iYXIgL3Zhci9sb2cvbWVzc2FnZXMgfHwgbG9ncmVhZCB8IGdyZXAgZm9vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iVGVzdCBsb2cgc3RyaW5nIG5vdCBmb3VuZCBpbiAvdmFyL2xvZy9tZXNzYWdlcy4gT3V0cHV0OiAlcyAiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX3J1bm5pbmciKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19yZXN0YXJ0KHNlbGYpOgorICAgICAgICBpZiAic3lzdGVtZCIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKToKKyAgICAgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL2V0Yy9pbml0LmQvc3lzbG9nIHJlc3RhcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgcmVzdGFydCBzeXNsb2cuc2VydmljZScpCisKKyAgICBAdGVzdGNhc2UoMjAyKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19yZXN0YXJ0IikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfbG9nZ2VyIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIEB1bml0dGVzdC5za2lwSWYob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJzeXNrbG9nZCIpIG9yIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImJ1c3lib3giKSwgIk5vbi1idXN5Ym94IHN5c2xvZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX3N0YXJ0dXBfY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2VjaG8gIkxPR0ZJTEU9L3Zhci9sb2cvdGVzdCIgPj4gL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mJykKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvZXRjL2luaXQuZC9zeXNsb2cgcmVzdGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkNvdWxkIG5vdCByZXN0YXJ0IHN5c2xvZyBzZXJ2aWNlLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIGdyZXAgZm9vYmFyIC92YXIvbG9nL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJUZXN0IGxvZyBzdHJpbmcgbm90IGZvdW5kLiBPdXRwdXQ6ICVzICIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigic2VkIC1pICdzI0xPR0ZJTEU9L3Zhci9sb2cvdGVzdCMjJyAvZXRjL3N5c2xvZy1zdGFydHVwLmNvbmYiKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJy9ldGMvaW5pdC5kL3N5c2xvZyByZXN0YXJ0JykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDM5NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5CkBAIC0wLDAgKzEsMTAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgic3lzdGVtZCIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSBzeXN0ZW1kIGluIERJU1RST19GRUFUVVJFUyIpCisgICAgaWYgInN5c3RlbWQiICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoInN5c3RlbWQgaXMgbm90IHRoZSBpbml0IG1hbmFnZXIgZm9yIHRoaXMgaW1hZ2UiKQorCisKK2NsYXNzIFN5c3RlbWRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHN5c3RlbWN0bChzZWxmLCBhY3Rpb24gPSAnJywgdGFyZ2V0ID0gJycsIGV4cGVjdGVkID0gMCwgdmVyYm9zZSA9IEZhbHNlKToKKyAgICAgICAgY29tbWFuZCA9ICdzeXN0ZW1jdGwgJXMgJXMnICUgKGFjdGlvbiwgdGFyZ2V0KQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bihjb21tYW5kKQorICAgICAgICBtZXNzYWdlID0gJ1xuJy5qb2luKFtjb21tYW5kLCBvdXRwdXRdKQorICAgICAgICBpZiBzdGF0dXMgIT0gZXhwZWN0ZWQgYW5kIHZlcmJvc2U6CisgICAgICAgICAgICBtZXNzYWdlICs9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHN0YXR1cyAtLWZ1bGwgJXMnICUgdGFyZ2V0KVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgZXhwZWN0ZWQsIG1lc3NhZ2UpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBTeXN0ZW1kQmFzaWNUZXN0cyhTeXN0ZW1kVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCctLXZlcnNpb24nKQorCisgICAgQHRlc3RjYXNlKDU1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1fYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2xpc3QtdW5pdC1maWxlcycpCisKKyAgICBkZWYgc2V0dGxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQmxvY2sgdW50aWwgc3lzdGVtZCBoYXMgZmluaXNoZWQgYWN0aXZhdGluZyBhbnkgdW5pdHMgYmVpbmcgYWN0aXZhdGVkLAorICAgICAgICBvciB1bnRpbCB0d28gbWludXRlcyBoYXMgZWxhcHNlZC4KKworICAgICAgICBSZXR1cm5zIGEgdHVwbGUsIGVpdGhlciAoVHJ1ZSwgJycpIGlmIGFsbCB1bml0cyBoYXZlIGZpbmlzaGVkCisgICAgICAgIGFjdGl2YXRpbmcsIG9yIChGYWxzZSwgbWVzc2FnZSBzdHJpbmcpIGlmIHRoZXJlIGFyZSBzdGlsbCB1bml0cworICAgICAgICBhY3RpdmF0aW5nIChnZW5lcmFsbHksIGZhaWxpbmcgdW5pdHMgdGhhdCByZXN0YXJ0KS4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArICg2MCAqIDIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIC0tc3RhdGU9YWN0aXZhdGluZycpCisgICAgICAgICAgICBpZiAiMCBsb2FkZWQgdW5pdHMgbGlzdGVkIiBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChUcnVlLCAnJykKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID49IGVuZHRpbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgb3V0cHV0KQorICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgIEB0ZXN0Y2FzZSg1NTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9mYWlsZWQoc2VsZik6CisgICAgICAgIHNldHRsZWQsIG91dHB1dCA9IHNlbGYuc2V0dGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldHRsZWQsIG1zZz0iVGltZWQgb3V0IHdhaXRpbmcgZm9yIHN5c3RlbWQgdG8gc2V0dGxlOlxuIiArIG91dHB1dCkKKworICAgICAgICBvdXRwdXQgPSBzZWxmLnN5c3RlbWN0bCgnbGlzdC11bml0cycsICctLWZhaWxlZCcpCisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCIwIGxvYWRlZCB1bml0cyBsaXN0ZWQiLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIG91dHB1dCArPSBzZWxmLnN5c3RlbWN0bCgnc3RhdHVzIC0tZnVsbCAtLWZhaWxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCwgbXNnPSJTb21lIHN5c3RlbWQgdW5pdHMgZmFpbGVkOlxuJXMiICUgb3V0cHV0KQorCisKK2NsYXNzIFN5c3RlbWRTZXJ2aWNlVGVzdHMoU3lzdGVtZFRlc3QpOgorCisgICAgZGVmIGNoZWNrX2Zvcl9hdmFoaShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzUGFja2FnZSgnYXZhaGktZGFlbW9uJyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiBuZWVkIGF2YWhpLWRhZW1vbiBpbnN0YWxsZWQgb24gdGFyZ2V0IikKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RhdHVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9hdmFoaSgpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGF0dXMgLS1mdWxsJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworICAgIEB0ZXN0Y2FzZSg2OTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9zdGF0dXMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RvcF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnc3RvcCcsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1hY3RpdmUnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnLCBleHBlY3RlZD0zLCB2ZXJib3NlPVRydWUpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGFydCcsJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2lzLWFjdGl2ZScsICdhdmFoaS1kYWVtb24uc2VydmljZScsIHZlcmJvc2U9VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg2OTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9kaXNhYmxlX2VuYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnZGlzYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJywgZXhwZWN0ZWQ9MSkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2VuYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworY2xhc3MgU3lzdGVtZEpvdXJuYWxUZXN0cyhTeXN0ZW1kVGVzdCk6CisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2pvdXJuYWwoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2pvdXJuYWxjdGwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvdm5jLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvdm5jLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWRlZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS92bmMucHkKQEAgLTAsMCArMSwyMCBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZVVubGVzcworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2ltcG9ydCByZQorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBza2lwTW9kdWxlVW5sZXNzKG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgneDExdm5jJyksICJObyB4MTF2bmMgcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFZOQ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjEzKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfdm5jKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd4MTF2bmMgLWRpc3BsYXkgOjAgLWJnIC1vIHgxMXZuYy5sb2cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJ4MTF2bmMgc2VydmVyIGZhaWxlZCB0byBzdGFydDogJXMiICUgb3V0cHV0KQorICAgICAgICBwb3J0ID0gcmUuc2VhcmNoKCdQT1JUPVswLTldKicsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQsIG1zZz0iTGlzdGVuaW5nIHBvcnQgbm90IHNwZWNpZmllZCBpbiBjb21tYW5kIG91dHB1dDogJXMiICVvdXRwdXQpCisKKyAgICAgICAgdm5jcG9ydCA9IHBvcnQuZ3JvdXAoMCkuc3BsaXQoJz0nKVsxXQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGwgfCBncmVwICI6JXMiJyAlIHZuY3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IngxMXZuYyBzZXJ2ZXIgbm90IHJ1bm5pbmcgb24gcG9ydCAlc1xuXG4lcyIgJSAodm5jcG9ydCwgc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGw7IGNhdCB4MTF2bmMubG9nJylbMV0pKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveDMybGliLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveDMybGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWUyMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS94MzJsaWIucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgI2NoZWNrIGlmIERFRkFVTFRUVU5FIGlzIHNldCBhbmQgaXQncyB2YWx1ZSBpczogeDg2LTY0LXgzMgorICAgICAgICBkZWZhdWx0dHVuZSA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICAgICAgaWYgIng4Ni02NC14MzIiIG5vdCBpbiBkZWZhdWx0dHVuZToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoIkRFRkFVTFRUVU5FIGlzIG5vdCBzZXQgdG8geDg2LTY0LXgzMiIpCisKK2NsYXNzIFgzMmxpYlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjgxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfeDMyX2ZpbGUoc2VsZik6CisgICAgICAgIHN0YXR1czEgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2Jpbi9scyB8IGdyZXAgQ2xhc3MgfCBncmVwIEVMRjMyIilbMF0KKyAgICAgICAgc3RhdHVzMiA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIHwgZ3JlcCBNYWNoaW5lIHwgZ3JlcCBYODYtNjQiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdHVzMSA9PSAwIGFuZCBzdGF0dXMyID09IDAsIG1zZz0iL2Jpbi9scyBpc24ndCBhbiBYODYtNjQgRUxGMzIgYmluYXJ5LiByZWFkZWxmIHNheXM6ICVzIiAlIHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIilbMV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvcnVudGltZS94b3JnLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmJjZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoIngxMS1iYXNlIik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJ0YXJnZXQgZG9lc24ndCBoYXZlIHgxMSBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgWG9yZ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3hvcmdfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8ICBncmVwIC12IHhpbml0IHwgZ3JlcCBbWF1vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJYb3JnIGRvZXMgbm90IGFwcGVhciB0byBiZSBydW5uaW5nICVzIiAlIHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kKVsxXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjNmYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRjdnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MTQ2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5CkBAIC0wLDAgKzEsMjUgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgU0RLQnVpbGRQcm9qZWN0CisKK2NsYXNzIEJ1aWxkQ3ZzVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFNES0J1aWxkUHJvamVjdChvZVNES1Rlc3QudGMuc2RrdGVzdGRpciArICIvY3ZzLyIsIG9lU0RLVGVzdC50Yy5zZGtlbnYsIG9lU0RLVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9mdHAuZ251Lm9yZy9ub24tZ251L2N2cy9zb3VyY2UvZmVhdHVyZS8xLjEyLjEzL2N2cy0xLjEyLjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBkZWYgdGVzdF9jdnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkaXB0YWJsZXMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2RrL2J1aWxkaXB0YWJsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYyZTUzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQpAQCAtMCwwICsxLDI2IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFNES0J1aWxkUHJvamVjdAorCisKK2NsYXNzIEJ1aWxkSXB0YWJsZXNUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9pcHRhYmxlcy8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0xLjQuMTMudGFyLmJ6MiIpCisgICAgICAgIHNlbGYucHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKKworICAgIGRlZiB0ZXN0X2lwdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZHN1ZG9rdS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhNzdjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkKQEAgLTAsMCArMSwyNiBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lU0RLVGVzdC5oYXNQYWNrYWdlKCJndGtcKyIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgZ3RrKyBpbiBtYW5pZmVzdCIpCisKK2NsYXNzIFN1ZG9rdVRlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBTREtCdWlsZFByb2plY3Qob2VTREtUZXN0LnRjLnNka3Rlc3RkaXIgKyAiL3N1ZG9rdS8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9nY2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5OTRiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5CkBAIC0wLDAgKzEsMzYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIG1hY2hpbmUgPSBvZVNES1Rlc3QudGMuZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0iICsgbWFjaGluZSk6CisgICAgICAgIHNraXBNb2R1bGUoIlNESyBkb2Vzbid0IGNvbnRhaW4gYSBjcm9zcy1jYW5hZGlhbiB0b29sY2hhaW4iKQorCisKK2NsYXNzIEdjY0NvbXBpbGVUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gWyd0ZXN0LmMnLCAndGVzdC5jcHAnLCAndGVzdG1ha2VmaWxlJ106CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHNlbGYudGMuZmlsZXNkaXIsIGYpLCBzZWxmLnRjLnNka3Rlc3RkaXIgKyBmKQorCisgICAgZGVmIHRlc3RfZ2NjX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENDICVzL3Rlc3QuYyAtbyAlcy90ZXN0IC1sbScgJSAoc2VsZi50Yy5zZGt0ZXN0ZGlyLCBzZWxmLnRjLnNka3Rlc3RkaXIpKQorCisgICAgZGVmIHRlc3RfZ3BwX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENYWCAlcy90ZXN0LmMgLW8gJXMvdGVzdCAtbG0nICUgKHNlbGYudGMuc2RrdGVzdGRpciwgc2VsZi50Yy5zZGt0ZXN0ZGlyKSkKKworICAgIGRlZiB0ZXN0X2dwcDJfY29tcGlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCckQ1hYICVzL3Rlc3QuY3BwIC1vICVzL3Rlc3QgLWxtJyAlIChzZWxmLnRjLnNka3Rlc3RkaXIsIHNlbGYudGMuc2RrdGVzdGRpcikpCisKKyAgICBkZWYgdGVzdF9tYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIC1mIHRlc3RtYWtlZmlsZScgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZiBmb3IgZiBpbiBbJ3Rlc3QuYycsICd0ZXN0LmNwcCcsICd0ZXN0Lm8nLCAndGVzdCcsICd0ZXN0bWFrZWZpbGUnXV0KKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcGVybC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcGVybC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWY0MjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9wZXJsLnB5CkBAIC0wLDAgKzEsMjggQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1wZXJsIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHBlcmwgcGFja2FnZSBpbiB0aGUgU0RLIikKKworCitjbGFzcyBQZXJsVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5wbCddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKyAgICAgICAgc2VsZi50ZXN0ZmlsZSA9IHNlbGYudGMuc2RrdGVzdGRpciArICJ0ZXN0LnBsIgorCisgICAgZGVmIHRlc3RfcGVybF9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcGVybCcpCisKKyAgICBkZWYgdGVzdF9wZXJsX3dvcmtzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3BlcmwgJXMvdGVzdC5wbCcgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKCIlcy90ZXN0LnBsIiAlIHNlbGYudGMuc2RrdGVzdGRpcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3Nkay9weXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2ZmFiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5CkBAIC0wLDAgKzEsMzIgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1weXRob24iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcHl0aG9uIHBhY2thZ2UgaW4gdGhlIFNESyIpCisKKworY2xhc3MgUHl0aG9uVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5weSddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcHl0aG9uJykKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zdGRvdXQoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYuX3J1bigncHl0aG9uICVzL3Rlc3QucHknICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5zdHJpcCgpLCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2xzIC90bXAvdGVzdGZpbGUucHl0aG9uJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoIiVzL3Rlc3QucHkiICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoIi90bXAvdGVzdGZpbGUucHl0aG9uIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5NTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fc3N0YXRldGVzdHNfbm9hdXRvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOWFlN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpAQCAtMCwwICsxLDk1IEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnNlbGZ0ZXN0LnNzdGF0ZSBpbXBvcnQgU1N0YXRlQmFzZQorCisKK2NsYXNzIFJlYnVpbGRGcm9tU1N0YXRlKFNTdGF0ZUJhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJykpCisKKyAgICBkZWYgZ2V0X2RlcF90YXJnZXRzKHNlbGYsIHByaW1hcnlfdGFyZ2V0cyk6CisgICAgICAgIGZvdW5kX3RhcmdldHMgPSBbXQorICAgICAgICBiaXRiYWtlKCItZyAiICsgJyAnLmpvaW4obWFwKHN0ciwgcHJpbWFyeV90YXJnZXRzKSkpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpLCAncicpIGFzIHBuZmlsZToKKyAgICAgICAgICAgIGZvdW5kX3RhcmdldHMgPSBwbmZpbGUucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICByZXR1cm4gZm91bmRfdGFyZ2V0cworCisgICAgZGVmIGNvbmZpZ3VyZV9idWlsZGRpcihzZWxmLCBidWlsZGRpcik6CisgICAgICAgIG9zLm1rZGlyKGJ1aWxkZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGJ1aWxkZGlyKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mJykpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2xvY2FsLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9sb2NhbC5jb25mJykpCisgICAgICAgIGNvbmZpZyA9IHt9CisgICAgICAgIGNvbmZpZ1snZGVmYXVsdF9zc3RhdGVfZGlyJ10gPSAiU1NUQVRFX0RJUiA/PSBcIiR7VE9QRElSfS9zc3RhdGUtY2FjaGVcIiIKKyAgICAgICAgY29uZmlnWydudWxsX3NzdGF0ZV9taXJyb3JzJ10gPSAiU1NUQVRFX01JUlJPUlMgPSBcIlwiIgorICAgICAgICBjb25maWdbJ2RlZmF1bHRfdG1wX2RpciddID0gIlRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcFwiIgorICAgICAgICBmb3Iga2V5IGluIGNvbmZpZzoKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL3NlbGZ0ZXN0LmluYycpLCBjb25maWdba2V5XSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYmJsYXllcnMuY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2JibGF5ZXJzLmNvbmYnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYXV0by5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvYXV0by5jb25mJykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBoYXJkbGlua190cmVlKHNlbGYsIHNyYywgZHN0KToKKyAgICAgICAgb3MubWtkaXIoZHN0KQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGRzdCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjKToKKyAgICAgICAgICAgIGlmIHJvb3QgPT0gc3JjOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZHN0LCByb290LnNwbGl0KHNyYylbMV1bMTpdKSkKKyAgICAgICAgICAgIGZvciBzc3RhdGVfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBvcy5saW5rKG9zLnBhdGguam9pbihyb290LCBzc3RhdGVfZmlsZSksIG9zLnBhdGguam9pbihkc3QsIHJvb3Quc3BsaXQoc3JjKVsxXVsxOl0sIHNzdGF0ZV9maWxlKSkKKworICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmLCBwcmltYXJ5X3RhcmdldHMsIHJlbG9jYXRlPUZhbHNlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1GYWxzZSk6CisgICAgICAgIGJ1aWxkQSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnYnVpbGRBJykKKyAgICAgICAgaWYgcmVsb2NhdGU6CisgICAgICAgICAgICBidWlsZEIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2J1aWxkQicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZEIgPSBidWlsZEEKKworICAgICAgICBpZiByZWJ1aWxkX2RlcGVuZGVuY2llczoKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHNlbGYuZ2V0X2RlcF90YXJnZXRzKHByaW1hcnlfdGFyZ2V0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHByaW1hcnlfdGFyZ2V0cworCisgICAgICAgIHNlbGYuY29uZmlndXJlX2J1aWxkZGlyKGJ1aWxkQSkKKyAgICAgICAgcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQSkpICsgJ2JpdGJha2UgICcgKyAnICcuam9pbihtYXAoc3RyLCBwcmltYXJ5X3RhcmdldHMpKSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5oYXJkbGlua190cmVlKG9zLnBhdGguam9pbihidWlsZEEsICdzc3RhdGUtY2FjaGUnKSwgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJykpCisgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRBKQorCisgICAgICAgIGZhaWxlZF9yZWJ1aWxkID0gW10KKyAgICAgICAgZmFpbGVkX2NsZWFuc3N0YXRlID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiByZWJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9idWlsZGRpcihidWlsZEIpCisgICAgICAgICAgICBzZWxmLmhhcmRsaW5rX3RyZWUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJyksIG9zLnBhdGguam9pbihidWlsZEIsICdzc3RhdGUtY2FjaGUnKSkKKworICAgICAgICAgICAgcmVzdWx0X2NsZWFuc3N0YXRlID0gcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQikpICsgJ2JpdGJha2UgLWNjbGVhbnNzdGF0ZSAnICsgdGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUsIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0X2NsZWFuc3N0YXRlLnN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIGZhaWxlZF9jbGVhbnNzdGF0ZS5hcHBlbmQodGFyZ2V0KQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRCKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZCA9IHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEIpKSArICdiaXRiYWtlICcgKyB0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfYnVpbGQuc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgZmFpbGVkX3JlYnVpbGQuYXBwZW5kKHRhcmdldCkKKworICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZEIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfcmVidWlsZCwgbXNnPSJUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBmYWlsZWQgdG8gcmVidWlsZDogJXMiICUgJyAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX3JlYnVpbGQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfY2xlYW5zc3RhdGUsIG1zZz0iVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgZmFpbGVkIGNsZWFuc3N0YXRlKGFsbCBvdGhlcnMgaGF2ZSBwYXNzZWQgYm90aCBjbGVhbnNzdGF0ZSBhbmQgcmVidWlsZCBmcm9tIHNzdGF0ZSB0ZXN0cyk6ICVzIiAlICcgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9jbGVhbnNzdGF0ZSkpKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX3JlbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoWydjb3JlLWltYWdlLXNhdG8tc2RrJ10sIHJlbG9jYXRlPVRydWUsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfcmVidWlsZChbJ2NvcmUtaW1hZ2Utc2F0by1zZGsnXSwgcmVsb2NhdGU9RmFsc2UsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3RvYXN0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNDY1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fdG9hc3Rlci5weQpAQCAtMCwwICsxLDMyMCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaGxleCwgc3VicHJvY2VzcworaW1wb3J0IHVybGxpYiwgY29tbWFuZHMsIHRpbWUsIGdldHBhc3MsIHJlLCBqc29uLCBzaGxleAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uLy4uLy4uLy4uLycsICdiaXRiYWtlL2xpYi90b2FzdGVyJykpKQorb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIFRvYXN0ZXJTZXR1cChvZVNlbGZUZXN0KToKKworICAgIGRlZiByZWNpcGVfcGFyc2Uoc2VsZiwgZmlsZV9wYXRoLCB2YXIpOgorICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGZpbGVfcGF0aCwncicpOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKHZhcikgPiAtMToKKyAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCIgPSAiKVsxXS5yZXBsYWNlKCJcIiIsICIiKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIGZpeF9maWxlX3BhdGgoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgICAgaWYgIjoiIGluIGZpbGVfcGF0aDoKKyAgICAgICAgICAgIGZpbGVfcGF0aD1maWxlX3BhdGguc3BsaXQoIjoiKVsyXQorICAgICAgICByZXR1cm4gZmlsZV9wYXRoCisKK2NsYXNzIFRvYXN0ZXJfREJfVGVzdHMoVG9hc3RlclNldHVwKToKKworICAgICMgQ2hlY2sgaWYgYnVpbGQgbmFtZSBpcyB1bmlxdWUgLSB0Y19pZD03OTUKKyAgICBAdGVzdGNhc2UoNzk1KQorICAgIGRlZiB0ZXN0X0J1aWxkX1VuaXF1ZV9OYW1lKHNlbGYpOgorICAgICAgICBhbGxfYnVpbGRzID0gQnVpbGQub2JqZWN0cy5hbGwoKS5jb3VudCgpCisgICAgICAgIGRpc3RpbmN0X2J1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RpbmN0X2J1aWxkcywgYWxsX2J1aWxkcywgbXNnID0gJ0J1aWxkIG5hbWUgaXMgbm90IHVuaXF1ZScpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIGNvb2NrZXIgbG9nIHBhdGggaXMgdW5pcXVlIC0gdGNfaWQ9ODE5CisgICAgQHRlc3RjYXNlKDgxOSkKKyAgICBkZWYgdGVzdF9CdWlsZF9VbmlxdWVfQ29va2VyX0xvZ19QYXRoKHNlbGYpOgorICAgICAgICBkaXN0aW5jdF9wYXRoID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2Nvb2tlcl9sb2dfcGF0aCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICB0b3RhbF9idWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKS5jb3VudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdGluY3RfcGF0aCwgdG90YWxfYnVpbGRzLCBtc2cgPSAnQnVpbGQgY29vY2tlciBsb2cgcGF0aCBpcyBub3QgdW5pcXVlJykKKworICAgICMgQ2hlY2sgaWYgdGFzayBvcmRlciBpcyB1bmlxdWUgZm9yIG9uZSBidWlsZCAtIHRjPTgyNAorICAgIEB0ZXN0Y2FzZSg4MjQpCisgICAgZGVmIHRlc3RfVGFza19VbmlxdWVfT3JkZXIoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdG90YWxfdGFza19vcmRlciA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZFsnaWQnXSkudmFsdWVzKCdvcmRlcicpLmNvdW50KCkKKyAgICAgICAgICAgIGRpc3RpbmN0X3Rhc2tfb3JkZXIgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRbJ2lkJ10pLnZhbHVlcygnb3JkZXInKS5kaXN0aW5jdCgpLmNvdW50KCkKKyAgICAgICAgICAgIGlmICh0b3RhbF90YXNrX29yZGVyICE9IGRpc3RpbmN0X3Rhc2tfb3JkZXIpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGJ1aWxkWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgYnVpbGQgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRhc2sgb3JkZXIgc2VxdWVuY2UgZm9yIG9uZSBidWlsZCAtIHRjPTgyNQorICAgIEB0ZXN0Y2FzZSg4MjUpCisgICAgZGVmIHRlc3RfVGFza19PcmRlcl9TZXF1ZW5jZShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIoUShidWlsZCA9IGJ1aWxkWydpZCddKSwgflEob3JkZXIgPSBOb25lKSwgflEodGFza19uYW1lX19jb250YWlucyA9ICdfc2V0c2NlbmUnKSkudmFsdWVzKCdpZCcsICdvcmRlcicpLm9yZGVyX2J5KCJvcmRlciIpCisgICAgICAgICAgICBjbnRfdGFza3MgPSAwCisgICAgICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBjbnRfdGFza3MgKz0gMQorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvcmRlciddICE9IGNudF90YXNrcyk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBkaXNrX2lvIG1hdGNoZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBFbmRUaW1lSU8gYW5kIFN0YXJ0VGltZUlPIGluIGJ1aWxkIHN0YXRzIC0gdGM9ODI4CisgICAgIyMjIHRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZCAjIyMKKyAgICAjZGVmIHRlc3RfVGFza19EaXNrX0lPX1RDODI4KHNlbGYpOgorCisgICAgIyBDaGVjayBpZiBvdXRjb21lID0gMiAoU1NUQVRFKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAzIChSRVNUT1JFRCkgLSB0Yz04MzIKKyAgICBAdGVzdGNhc2UoODMyKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8yX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8zKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDIpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmIChyb3dbJ3NzdGF0ZV9yZXN1bHQnXSAhPSAzKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSA9IDEgKENPVkVSRUQpIG9yIDMgKEVYSVNUSU5HKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChTU1RBVEVfTkEpIC0gdGM9ODMzCisgICAgQHRlc3RjYXNlKDgzMykKKyAgICBkZWYgdGVzdF9UYXNrX0lmX091dGNvbWVfMV8zX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMSwgMykpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gIT0gMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIG91dGNvbWUgaXMgMCAoU1VDQ0VTUykgb3IgNCAoRkFJTEVEKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChOQSksIDEgKE1JU1MpIG9yIDIgKEZBSUxFRCkgLSB0Yz04MzQKKyAgICBAdGVzdGNhc2UoODM0KQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8wXzRfU3N0YXRlX1Jlc3VsdF9NdXN0X0JlXzBfMV8yKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMCwgNCkpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gbm90IGluIFswLCAxLCAyXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHRhc2tfZXhlY3V0ZWQgPSBUUlVFICgxKSwgc2NyaXB0X3R5cGUgbXVzdCBiZSAwIChDT0RJTkdfTkEpLCAyIChDT0RJTkdfUFlUSE9OKSwgMyAoQ09ESU5HX1NIRUxMKSAtIHRjPTg5MQorICAgIEB0ZXN0Y2FzZSg4OTEpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX1RydWVfU2NyaXB0X1R5cGVfMF8yXzMoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkID0gMSkudmFsdWVzKCdpZCcsICdzY3JpcHRfdHlwZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzY3JpcHRfdHlwZSddIG5vdCBpbiBbMCwgMiwgM10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gVFJVRSAoMSksIG91dGNvbWUgbXVzdCBiZSAwIChTVUNDRVNTKSBvciA0IChGQUlMRUQpIC0gdGM9ODM2CisgICAgQHRlc3RjYXNlKDgzNikKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfVHJ1ZV9PdXRjb21lXzBfNChzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKHRhc2tfZXhlY3V0ZWQgPSAxKS52YWx1ZXMoJ2lkJywgJ291dGNvbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snb3V0Y29tZSddIG5vdCBpbiBbMCwgNF0pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gRkFMU0UgKDApLCBzY3JpcHRfdHlwZSBtdXN0IGJlIDAgLSB0Yz04OTAKKyAgICBAdGVzdGNhc2UoODkwKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfVGFza19FeGVjdXRlZF9GYWxzZV9TY3JpcHRfVHlwZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIodGFza19leGVjdXRlZCA9IDApLnZhbHVlcygnaWQnLCAnc2NyaXB0X3R5cGUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc2NyaXB0X3R5cGUnXSAhPSAwKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IEZBTFNFICgwKSBhbmQgYnVpbGQgb3V0Y29tZSA9IFNVQ0NFRURFRCAoMCksIHRhc2sgb3V0Y29tZSBtdXN0IGJlIDEgKENPVkVSRUQpLCAyIChDQUNIRUQpLCAzIChQUkVCVUlMVCksIDUgKEVNUFRZKSAtIHRjPTgzNworICAgIEB0ZXN0Y2FzZSg4MzcpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX0ZhbHNlX091dGNvbWVfMV8yXzNfNShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkWydpZCddLCB0YXNrX2V4ZWN1dGVkID0gMCkudmFsdWVzKCdpZCcsICdvdXRjb21lJykKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvdXRjb21lJ10gbm90IGluIFsxLCAyLCAzLCA1XSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg4CisgICAgQHRlc3RjYXNlKDg4OCkKKyAgICBkZWYgdGVzdF9UYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uoc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3RhcmdldF9pZCcsICdwYWNrYWdlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciByb3cgaW4gcm93czoKKyAgICAgICAgICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFyZ2V0X2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWQgPSByb3dbJ3BhY2thZ2VfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHRhcmdldCBvciBub3QgcGFja2FnZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocm93WydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFyZ2V0IGluc3RhbGxlZCBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg5CisgICAgQHRlc3RjYXNlKDg4OSkKKyAgICBkZWYgdGVzdF9UYXNrX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3Rhc2tfaWQnLCAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICB0YXNrX2lkID0gVGFzay5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFza19pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGRlcGVuZHNfb25faWQgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGlkID0gcm93WydkZXBlbmRzX29uX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCB0YXNrX2lkIG9yIG5vdCBkZXBlbmRzX29uX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChyb3dbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGRlcGVuZGVuY3kgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIHRhcmdldCBmaWxlX25hbWUgaXMgcG9wdWxhdGVkIG9ubHkgaWYgaXNfaW1hZ2U9dHJ1ZSBBTkQgb3JtX2J1aWxkLm91dGNvbWU9MCB0aGVuIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgaXRzIHNpemUgbWF0Y2hlcyB0aGUgZmlsZV9zaXplIHZhbHVlCisgICAgIyMjIE5lZWQgdG8gYWRkIHRoZSB0YyBpbiB0aGUgdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzNykKKyAgICBkZWYgdGVzdF9UYXJnZXRfRmlsZV9OYW1lX1BvcHVsYXRlZChzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdGFyZ2V0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZF9pZCA9IGJ1aWxkWydpZCddLCBpc19pbWFnZSA9IDEpLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgIHRhcmdldF9maWxlcyA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHRhcmdldF9pZCA9IHRhcmdldFsnaWQnXSkudmFsdWVzKCdpZCcsICdmaWxlX25hbWUnLCAnZmlsZV9zaXplJykKKyAgICAgICAgICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZmlsZV9pbmZvIGluIHRhcmdldF9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkID0gZmlsZV9pbmZvWydpZCddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX25hbWUgPSBmaWxlX2luZm9bJ2ZpbGVfbmFtZSddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX3NpemUgPSBmaWxlX2luZm9bJ2ZpbGVfc2l6ZSddCisgICAgICAgICAgICAgICAgICAgIGlmIChub3QgdGFyZ2V0X2ZpbGVfbmFtZSBvciBub3QgdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9maWxlX25hbWUpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcy5wYXRoLmdldHNpemUodGFyZ2V0X2ZpbGVfbmFtZSkgIT0gdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhcmdldCBpbWFnZSBmaWxlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg0CisgICAgQHRlc3RjYXNlKDg4NCkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBkZXBzID0gUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKCdpZCcsICdwYWNrYWdlX2lkJywgJ2RlcGVuZHNfb25faWQnKQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBpZiAoZGVwWydwYWNrYWdlX2lkJ10gPT0gZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgZGVwZW5kZW5jeSBpZDogJXMnICUgY250X2VycikKKworICAgICMgUmVjaXBlIGtleSB2ZXJpZmljYXRpb24sIHJlY2lwZSBuYW1lIGRvZXMgbm90IGRlcGVuZHMgb24gYSByZWNpcGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgLSB0Yz04ODMKKyAgICBAdGVzdGNhc2UoODgzKQorICAgIGRlZiB0ZXN0X1JlY2lwZV9EZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBkZXBzID0gUmVjaXBlX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3JlY2lwZV9pZCcsICdkZXBlbmRzX29uX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIChub3QgZGVwWydyZWNpcGVfaWQnXSBvciBub3QgZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihpZCA9IGRlcFsncmVjaXBlX2lkJ10pLnZhbHVlcygnbmFtZScpCisgICAgICAgICAgICAgICAgZGVwX25hbWUgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoaWQgPSBkZXBbJ2RlcGVuZHNfb25faWQnXSkudmFsdWVzKCduYW1lJykKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBkZXBfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHJlY2lwZSBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIG51bWJlciAoMC05KSAtIHRjPTg0NgorICAgIEB0ZXN0Y2FzZSg4NDYpCisgICAgZGVmIHRlc3RfUGFja2FnZV9OYW1lX0Zvcl9OdW1iZXIoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ25hbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiAocGFja2FnZVsnbmFtZSddWzBdLmlzZGlnaXQoKSBpcyBUcnVlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSB2ZXJzaW9uIHN0YXJ0cyB3aXRoIGEgbnVtYmVyICgwLTkpIC0gdGM9ODQ3CisgICAgQHRlc3RjYXNlKDg0NykKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1ZlcnNpb25fU3RhcnRzX1dpdGhfTnVtYmVyKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICd2ZXJzaW9uJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgKHBhY2thZ2VbJ3ZlcnNpb24nXVswXS5pc2RpZ2l0KCkgaXMgRmFsc2UpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIHJldmlzaW9uIHN0YXJ0cyB3aXRoICdyJyAtIHRjPTg0OAorICAgIEB0ZXN0Y2FzZSg4NDgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9SZXZpc2lvbl9TdGFydHNfV2l0aF9yKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICdyZXZpc2lvbicpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIChwYWNrYWdlWydyZXZpc2lvbiddWzBdLnN0YXJ0c3dpdGgoInIiKSBpcyBGYWxzZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGFja2FnZSBidWlsZF9pZAorICAgICMjIyBUQyBtdXN0IGJlIGFkZGVkIGluIHRlc3QgcnVuCisgICAgQHRlc3RjYXNlKDEwMzgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9CdWlsZF9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAnYnVpbGRfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBidWlsZF9pZCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsnYnVpbGRfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IGJ1aWxkX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHBhY2thZ2UgcmVjaXBlX2lkCisgICAgIyMjIFRDIG11c3QgYmUgYWRkZWQgaW4gdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzOSkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1JlY2lwZV9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAncmVjaXBlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgcmVjaXBlX2lkID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsncmVjaXBlX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCByZWNpcGVfaWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIGluc3RhbGxlZF9zaXplIGZpZWxkIGlzIG5vdCBudWxsCisgICAgIyMjIFRDIG11c3QgYmUgYWRlZCBpbiB0ZXN0IHJ1bgorICAgIEB0ZXN0Y2FzZSgxMDQwKQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfSW5zdGFsbGVkX1NpemVfTm90X05VTEwoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpbnN0YWxsZWRfc2l6ZV9faXNudWxsID0gVHJ1ZSkudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBhbGwgbGF5ZXJzIHJlcXVlc3RzIHJldHVybiBleGl0IGNvZGUgaXMgMjAwIC0gdGM9ODQzCisgICAgQHRlc3RjYXNlKDg0MykKKyAgICBkZWYgdGVzdF9MYXllcnNfUmVxdWVzdHNfRXhpdF9Db2RlKHNlbGYpOgorICAgICAgICBsYXllcnMgPSBMYXllci5vYmplY3RzLnZhbHVlcygnaWQnLCAnbGF5ZXJfaW5kZXhfdXJsJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICByZXNwID0gdXJsbGliLnVybG9wZW4obGF5ZXJbJ2xheWVyX2luZGV4X3VybCddKQorICAgICAgICAgICAgaWYgKHJlc3AuZ2V0Y29kZSgpICE9IDIwMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQobGF5ZXJbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBsYXllciBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgZGphbmdvIHNlcnZlciBzdGFydHMgcmVnYXJkbGVzcyBvZiB0aGUgdGltZXpvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIC0gdGM9OTA1CisgICAgQHRlc3RjYXNlKDkwNSkKKyAgICBkZWYgdGVzdF9TdGFydF9EamFuZ29fVGltZXpvbmUoc2VsZik6CisgICAgICAgIGN1cnJlbnRfcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHpvbmVmaWxlbGlzdCA9IFtdCisgICAgICAgIFpPTkVJTkZPUEFUSCA9ICcvdXNyL3NoYXJlL3pvbmVpbmZvLycKKyAgICAgICAgb3MuY2hkaXIoIi4uL2JpdGJha2UvbGliL3RvYXN0ZXIvIikKKyAgICAgICAgY250X2VyciA9IDAKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoWk9ORUlORk9QQVRIKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihaT05FSU5GT1BBVEgsIGZpbGVuYW1lKSk6CisgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgZm9yIGsgaW4gcmFuZ2UobGVuKHpvbmVmaWxlbGlzdCkpOgorICAgICAgICAgICAgaWYgayA8PSA1OgorICAgICAgICAgICAgICAgIGZpbGVzID0gem9uZWZpbGVsaXN0W2tdCisgICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJleHBvcnQgVFo9IitzdHIoZmlsZXMpKyI7IHB5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyID4gL2Rldi9udWxsIDI+JjEgJiIpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICAgICAgICAgIHBpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJwcyBhdXggfCBncmVwICdbL3Vdc3IvYmluL3B5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyJyB8IGF3ayAne3ByaW50ICQyfSciLCBzaGVsbCA9IFRydWUpCisgICAgICAgICAgICAgICAgaWYgcGlkOgorICAgICAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oImtpbGwgLTkgIitzdHIocGlkKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh6b25lZmlsZWxpc3Rba10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY250X2VyciwgMCwgbXNnID0gJ0Vycm9ycyBkamFuZ28gc2VydmVyIGRvZXMgbm90IHN0YXJ0IHdpdGggdGltZXpvbmU6ICVzJyAlIGNudF9lcnIpCisgICAgICAgIG9zLmNoZGlyKGN1cnJlbnRfcGF0aCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmYWE2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5CkBAIC0wLDAgKzEsMTUzIEBACisjIENvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworCisjIERFU0NSSVBUSU9OCisjIEJhc2UgY2xhc3MgaW5oZXJpdGVkIGJ5IHRlc3QgY2xhc3NlcyBpbiBtZXRhL2xpYi9zZWxmdGVzdAorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBlcnJubworCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCBMb2dSZXN1bHRzCisKK0BMb2dSZXN1bHRzCitjbGFzcyBvZVNlbGZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdC5iYXNlIikKKyAgICBsb25nTWVzc2FnZSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSJydW5UZXN0Iik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgICAgICBzZWxmLmxvY2FsY29uZl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKQorICAgICAgICBzZWxmLnRlc3RpbmNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9zZWxmdGVzdC5pbmMiKQorICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmluYyIpCisgICAgICAgIHNlbGYudGVzdGxheWVyX3BhdGggPSBvZVNlbGZUZXN0LnRlc3RsYXllcl9wYXRoCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcyA9IFtdCisgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKyAgICAgICAgc3VwZXIob2VTZWxmVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZGRpcikKKyAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHByZXZpb3VzIHRlc3QgbGVmdCBhcm91bmQgaW4gY29uZmlnIG9yIGluYyBmaWxlcworICAgICAgICAjIGlmIGl0IGZhaWxlZCBzbyB3ZSBuZWVkIGEgZnJlc2ggc3RhcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYudGVzdGluY19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZXN0bGF5ZXJfcGF0aCk6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHRlc3RzIG1pZ2h0IG5lZWQgdGhlaXIgb3duIHNldHVwCisgICAgICAgICMgYnV0IGlmIHRoZXkgb3ZlcndyaXRlIHRoaXMgb25lIHRoZXkgaGF2ZSB0byBjYWxsCisgICAgICAgICMgc3VwZXIgZWFjaCB0aW1lLCBzbyBsZXQncyBnaXZlIHRoZW0gYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgc2VsZi5zZXRVcExvY2FsKCkKKworICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kczoKKyAgICAgICAgICAgIGZhaWxlZF9leHRyYV9jb21tYW5kcyA9IFtdCisgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0LnN0YXR1cyA9PSAgMDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkX2V4dHJhX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKQorICAgICAgICAgICAgaWYgZmFpbGVkX2V4dHJhX2NvbW1hbmRzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoInRlYXJEb3duIGNvbW1hbmRzIGhhdmUgZmFpbGVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX2V4dHJhX2NvbW1hbmRzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIlRyeWluZyB0byBtb3ZlIG9uLiIpCisgICAgICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQorCisgICAgICAgIGlmIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5fdHJhY2tfZm9yX2NsZWFudXA6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKworICAgICAgICBzZWxmLnRlYXJEb3duTG9jYWwoKQorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMgYWRkIHRlc3Qgc3BlY2lmaWMgY29tbWFuZHMgdG8gdGhlIHRlYXJEb3duIG1ldGhvZC4KKyAgICBkZWYgYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBZGRpbmcgY29tbWFuZCAnJXMnIHRvIHRlYXJEb3duIGZvciB0aGlzIHRlc3QuIiAlIGNvbW1hbmQpCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCkKKyAgICAjIGFkZCB0ZXN0IHNwZWNpZmljIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIHJlbW92ZWQgaW4gdGhlIHRlYXJEb3duIG1ldGhvZAorICAgIGRlZiB0cmFja19mb3JfY2xlYW51cChzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFkZGluZyBwYXRoICclcycgdG8gYmUgY2xlYW5lZCB1cCB3aGVuIHRlc3QgaXMgb3ZlciIgJSBwYXRoKQorICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cC5hcHBlbmQocGF0aCkKKworICAgICMgd3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYworICAgIGRlZiB3cml0ZV9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgYXBwZW5kIHRvIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgYXBwZW5kX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgcmVtb3ZlX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJlbW92aW5nIGZyb206ICVzXG5cJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgd3JpdGUgdG8gbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jCisgICAgZGVmIHdyaXRlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyBhcHBlbmQgZGF0YSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMKKyAgICBkZWYgYXBwZW5kX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYworICAgIGRlZiByZW1vdmVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSwgZGF0YSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoaW5jX2ZpbGUsIGRhdGEpCisKKyAgICAjIGRlbGV0ZSBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMgZmlsZQorICAgIGRlZiBkZWxldGVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiRGVsZXRpbmcgZmlsZTogJXMiICUgaW5jX2ZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbmNfZmlsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAjIHdyaXRlIHRvIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMKKyAgICBkZWYgd3JpdGVfYmJsYXllcnNfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCisKKyAgICAjIGFwcGVuZCB0byA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIGFwcGVuZF9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKKworICAgICMgcmVtb3ZlIGRhdGEgZnJvbSA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIHJlbW92ZV9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuXCVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJsYXllcnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJsYXllcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjMTdlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYmxheWVycy5weQpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlTGF5ZXJzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc1NikKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3djcm9zc2RlcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhc3BlbGwnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBkZXBlbmRlbmNpZXMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSg4MykKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dsYXllcnMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21ldGEtc2VsZnRlc3QnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBsYXllcnMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkzKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd2FwcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9InhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQgZmlsZSB3YXMgbm90IHJlY29nbmlzZWQuICBiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkwKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd292ZXJsYXllZChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9ImFzcGVsbCBvdmVybGF5ZWQgcmVjaXBlIHdhcyBub3QgcmVjb2duaXNlZCBiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbihzZWxmKToKKyAgICAgICAgdGVzdG91dGRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNkaXIodGVzdG91dGRpciksIG1zZyA9ICJ0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbiBzaG91bGQgbm90IGV4aXN0IGF0IHRoaXMgcG9pbnQgaW4gdGltZSIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVzdG91dGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBmbGF0dGVuICVzJyAlIHRlc3RvdXRkaXIpCisgICAgICAgIGJiX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdG91dGRpciwgJ3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGJiX2ZpbGUpLCBtc2cgPSAiQ2Fubm90IGZpbmQgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYiBpbiB0aGUgdGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4gbG9jYWwgZGlyLiIpCisgICAgICAgIGNvbnRlbnRzID0gZnRvb2xzLnJlYWRfZmlsZShiYl9maWxlKQorICAgICAgICBmaW5kX2luX2NvbnRlbnRzID0gcmUuc2VhcmNoKCIjIyMjIyBiYmFwcGVuZGVkIGZyb20gbWV0YS1zZWxmdGVzdCAjIyMjI1xuKC4qXG4pKmluY2x1ZGUgdGVzdF9yZWNpcGUuaW5jIiwgY29udGVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2luX2NvbnRlbnRzLCBtc2cgPSAiRmxhdHRlbmluZyBsYXllcnMgZGlkIG5vdCB3b3JrLiBiaXRiYWtlLWxheWVycyBmbGF0dGVuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfYWRkX3JlbW92ZShzZWxmKToKKyAgICAgICAgdGVzdF9sYXllciA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgIlRoaXMgdGVzdCBjYW5ub3QgcnVuIHdpdGggbWV0YS1za2VsZXRvbiBpbiBiYmxheWVycy5jb25mLiBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIlNvbWV0aGluZyB3cm9uZyBoYXBwZW5lZC4gbWV0YS1za2VsZXRvbiBsYXllciB3YXMgbm90IGFkZGVkIHRvIGNvbmYvYmJsYXllcnMuY29uZi4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAibWV0YS1za2VsZXRvbiBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYXQgdGhpcyBzdGVwLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZXN0X2xheWVyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJTb21ldGhpbmcgd3JvbmcgaGFwcGVuZWQuIG1ldGEtc2tlbGV0b24gbGF5ZXIgd2FzIG5vdCBhZGRlZCB0byBjb25mL2JibGF5ZXJzLmNvbmYuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIm1ldGEtc2tlbGV0b24gc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGF0IHRoaXMgc3RlcC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JidGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q2ODYwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5CkBAIC0wLDAgKzEsMjAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzg5KQorICAgIGRlZiB0ZXN0X3J1bl9iaXRiYWtlX2Zyb21fZGlyXzEoc2VsZik6CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpdGJha2UoJy1lJykuc3RhdHVzLCAwLCBtc2cgPSAiYml0YmFrZSBjb3VsZG4ndCBydW4gZnJvbSBcImNvbmZcIiBkaXIiKQorCisgICAgQHRlc3RjYXNlKDc5MCkKKyAgICBkZWYgdGVzdF9ydW5fYml0YmFrZV9mcm9tX2Rpcl8yKHNlbGYpOgorICAgICAgICBteV9lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBteV9lbnZbJ0JCUEFUSCddID0gbXlfZW52WydCVUlMRERJUiddCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5lbnZpcm9uWydCVUlMRERJUiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaXRiYWtlKCctZScsIGVudj1teV9lbnYpLnN0YXR1cywgMCwgbXNnID0gImJpdGJha2UgY291bGRuJ3QgcnVuIGZyb20gYnVpbGRkaXIiKQorCisgICAgQHRlc3RjYXNlKDgwNikKKyAgICBkZWYgdGVzdF9ldmVudF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVCArPSBcInRlc3RfZXZlbnRzXCIiKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtNC1uYXRpdmUnKQorICAgICAgICBmaW5kX2J1aWxkX3N0YXJ0ZWQgPSByZS5zZWFyY2goIk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRTdGFydGVkKFxuLiopKk5PVEU6IFByZXBhcmluZyBSdW5RdWV1ZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZpbmRfYnVpbGRfY29tcGxldGVkID0gcmUuc2VhcmNoKCJUYXNrcyBTdW1tYXJ5Oi4qKFxuLiopKk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRDb21wbGV0ZWQiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9idWlsZF9zdGFydGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2J1aWxkX2NvbXBsZXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1Rlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlwiVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50XCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBwcm9jZXNzLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMpCisgICAgZGVmIHRlc3RfbG9jYWxfc3N0YXRlKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZSAtY2NsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgZmluZF9zZXRzY2VuZSA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLipkb18uKl9zZXRzY2VuZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3NldHNjZW5lLCBtc2cgPSAiTm8gXCJtNC1uYXRpdmUuKmRvXy4qX3NldHNjZW5lXCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBtNC1uYXRpdmUuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0ICkKKworICAgIEB0ZXN0Y2FzZSgxMDUpCisgICAgZGVmIHRlc3RfYml0YmFrZV9pbnZhbGlkX3JlY2lwZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICdhc2RmJyIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBhc2RmIHJlY2lwZSBkb2Vzbid0IGV4aXN0LCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA3KQorICAgIGRlZiB0ZXN0X2JpdGJha2VfaW52YWxpZF90YXJnZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ2FzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IE5vdGhpbmcgUFJPVklERVMgJ2FzZGYnIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vICdhc2RmJyB0YXJnZXQgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA2KQorICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZmluZF93YXJuaW5ncyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogV0FSTklORyBtZXNzYWdlcyogc2hvd24iLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmaW5kX2Vycm9ycyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogRVJST1IgbWVzc2FnZXMqIHNob3duIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfd2FybmluZ3MsIG1zZz0iRGlkIG5vdCBmaW5kIHRoZSBtdW1iZXIgb2Ygd2FybmluZ3MgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQ6XG4iICsgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfZXJyb3JzLCBtc2c9IkRpZCBub3QgZmluZCB0aGUgbXVtYmVyIG9mIGVycm9ycyBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZDpcbiIgKyByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwOCkKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3BhdGNoKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgJ1NSQ19VUkkgKz0gImZpbGU6Ly9tYW4tMS41aDEtbWFrZS5wYXRjaCInKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtYW4gLWMgcGF0Y2gnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnbWFuJykKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbiBtYW4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IHBhdGNoX2RvX3BhdGNoIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vIG1hbi0xLjVoMS1tYWtlLnBhdGNoIGZpbGUgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTYzKQorICAgIGRlZiB0ZXN0X2ZvcmNlX3Rhc2soc2VsZik6CisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gbTQtbmF0aXZlJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLUMgY29tcGlsZSBtNC1uYXRpdmUnKQorICAgICAgICBsb29rX2Zvcl90YXNrcyA9IFsnZG9fY29tcGlsZScsICdkb19pbnN0YWxsJywgJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnXQorICAgICAgICBmb3IgdGFzayBpbiBsb29rX2Zvcl90YXNrczoKKyAgICAgICAgICAgIGZpbmRfdGFzayA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLiolcyIgJSB0YXNrLCByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfdGFzaywgbXNnID0gIkNvdWxkbid0IGZpbmQgJXMgdGFzay4gYml0YmFrZSBvdXRwdXQgJXMiICUgKHRhc2ssIHJlc3VsdC5vdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDE2NykKKyAgICBkZWYgdGVzdF9iaXRiYWtlX2coc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1nIGNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lJykKKyAgICAgICAgZm9yIGYgaW4gWydwbi1idWlsZGxpc3QnLCAncG4tZGVwZW5kcy5kb3QnLCAncGFja2FnZS1kZXBlbmRzLmRvdCcsICd0YXNrLWRlcGVuZHMuZG90J106CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05PVEU6IFBOIGJ1aWxkIGxpc3Qgc2F2ZWQgdG8gXCdwbi1idWlsZGxpc3RcJycgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIk5vIGRlcGVuZGVuY3kgXCJwbi1idWlsZGxpc3RcIiBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiB0YXNrIHRhcmdldC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnb3BlbnNzaCcgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpKSwgbXNnID0gIk5vIFwib3BlbnNzaFwiIGRlcGVuZGVuY3kgZm91bmQgaW4gcG4tYnVpbGRsaXN0IGZpbGUuIikKKworICAgIEB0ZXN0Y2FzZSg4OTkpCisgICAgZGVmIHRlc3RfaW1hZ2VfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoIkRFUExPWV9ESVJfSU1BR0UiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGltYWdlbmFtZSA9IGdldF9iYl92YXIoIklNQUdFX0xJTktfTkFNRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWFnZW5hbWUgKyAiLm1hbmlmZXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKG1hbmlmZXN0KSwgbXNnPSJObyBtYW5pZmVzdCBmaWxlIGNyZWF0ZWQgZm9yIGltYWdlLiBJdCBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gJXMiICUgbWFuaWZlc3QpCisKKyAgICBAdGVzdGNhc2UoMTY4KQorICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVjaXBlX3NyY191cmkoc2VsZik6CisgICAgICAgIGRhdGEgPSAnU1JDX1VSSSA9ICJmaWxlOi8vaW52YWxpZCInCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCBkYXRhKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitTU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorIiIiKQorICAgICAgICBiaXRiYWtlKCctY2NsZWFuYWxsIG1hbicpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1jIGZldGNoIG1hbicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBtYW4nKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ21hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJDb21tYW5kIHN1Y2NlZGVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgZmFpbGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGZXRjaGVyIGZhaWx1cmU6IFVuYWJsZSB0byBmaW5kIGZpbGUgZmlsZTovL2ludmFsaWQgYW55d2hlcmUuIFRoZSBwYXRocyB0aGF0IHdlcmUgc2VhcmNoZWQgd2VyZTonIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBubyBlcnJvciBtZXNzYWdlIGVuY291bnRlcmVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBGZXRjaGVyIGZhaWx1cmUgZm9yIFVSTDogXCdmaWxlOi8vaW52YWxpZFwnLiBVbmFibGUgdG8gZmV0Y2ggVVJMIGZyb20gYW55IHNvdXJjZS4nIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBmZXRjaGVyIGRpZG4ndCByZXBvcnQgYW55IGVycm9yLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxNzEpCisgICAgZGVmIHRlc3RfcmVuYW1lX2Rvd25sb2FkZWRfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKKyIiIikKKyAgICAgICAgZGF0YSA9ICdTUkNfVVJJX2FwcGVuZCA9ICI7ZG93bmxvYWRmaWxlbmFtZT10ZXN0LWFzcGVsbC50YXIuZ3oiJworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnYXNwZWxsJywgZGF0YSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBhc3BlbGwnKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYyBmZXRjaCBhc3BlbGwnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnYXNwZWxsJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJpdGJha2UsICctY2NsZWFuYWxsIGFzcGVsbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgbXNnID0gIkNvdWxkbid0IGZldGNoIGFzcGVsbC4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJETF9ESVIiKSwgJ3Rlc3QtYXNwZWxsLnRhci5neicpKSwgbXNnID0gIkZpbGUgcmVuYW1lIGZhaWxlZC4gTm8gY29ycmVzcG9uZGluZyB0ZXN0LWFzcGVsbC50YXIuZ3ogZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIkRMX0RJUiIpLCAndGVzdC1hc3BlbGwudGFyLmd6LmRvbmUnKSksICJGaWxlIHJlbmFtZSBmYWlsZWQuIE5vIGNvcnJlc3BvbmRpbmcgdGVzdC1hc3BlbGwudGFyLmd6LmRvbmUgZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorCisgICAgQHRlc3RjYXNlKDEwMjgpCisgICAgZGVmIHRlc3RfZW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiVEVTVF9FTlY9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX0VOVj1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1lIHwgZ3JlcCBURVNUX0VOVj0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2FsY29uZicgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gImJpdGJha2UgZGlkbid0IHJlcG9ydCBhbnkgdmFsdWUgZm9yIFRFU1RfRU5WIHZhcmlhYmxlLiBUbyB0ZXN0LCBydW4gJ2JpdGJha2UgLWUgfCBncmVwIFRFU1RfRU5WPSciKQorCisgICAgQHRlc3RjYXNlKDEwMjkpCisgICAgZGVmIHRlc3RfZHJ5X3J1bihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1uIG00LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgImJpdGJha2UgZHJ5IHJ1biBkaWRuJ3QgcnVuIGFzIGV4cGVjdGVkLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzApCisgICAgZGVmIHRlc3RfanVzdF9wYXJzZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiZXJyb3JzIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyByZWNpcGVzLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzEpCisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1zIHwgZ3JlcCB3Z2V0JykKKyAgICAgICAgZmluZCA9IHJlLnNlYXJjaCgid2dldCAqOihbMC05YS16QS1aXC5cLV0rKSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kLCAiTm8gdmVyc2lvbiByZXR1cm5lZCBmb3Igc2VhcmNoZWQgcmVjaXBlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMyKQorICAgIGRlZiB0ZXN0X3ByZWZpbGUoc2VsZik6CisgICAgICAgIHByZWNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvcHJlZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwcmVjb25mKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShwcmVjb25mICwiVEVTVF9QUkVGSUxFPVwicHJlZmlsZVwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdwcmVmaWxlJyBpbiByZXN1bHQub3V0cHV0LCAiUHJlY29uZmlndXJlIGZpbGUgXCJwcmVmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiAiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucmVtb3ZlX2NvbmZpZywgIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NhbGNvbmYnIGluIHJlc3VsdC5vdXRwdXQsICJQcmVjb25maWd1cmUgZmlsZSBcInByZWZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIikKKworICAgIEB0ZXN0Y2FzZSgxMDMzKQorICAgIGRlZiB0ZXN0X3Bvc3RmaWxlKHNlbGYpOgorICAgICAgICBwb3N0Y29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9wb3N0ZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwb3N0Y29uZikKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmYgLCAiVEVTVF9QT1NURklMRT1cInBvc3RmaWxlXCIiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUE9TVEZJTEU9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX1BPU1RGSUxFPVwibG9jYWxjb25mXCIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLVIgY29uZi9wb3N0ZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BPU1RGSUxFPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncG9zdGZpbGUnIGluIHJlc3VsdC5vdXRwdXQsICJQb3N0Y29uZmlndXJlIGZpbGUgXCJwb3N0ZmlsZS5jb25mXCJ3YXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4iKQorCisgICAgQHRlc3RjYXNlKDEwMzQpCisgICAgZGVmIHRlc3RfY2hlY2t1cmkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtYyBjaGVja3VyaSBtNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgbXNnID0gIlwiY2hlY2t1cmlcIiB0YXNrIHdhcyBub3QgZXhlY3V0ZWQuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzUpCisgICAgZGVmIHRlc3RfY29udGludWUoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK1NTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCisiIiIpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCJcbmRvX2ZhaWxfdGFzayAoKSB7XG5leGl0IDEgXG59XG5cbmFkZHRhc2sgZG9fZmFpbF90YXNrIGJlZm9yZSBkb19mZXRjaFxuIiApCisgICAgICAgIHJ1bkNtZCgnYml0YmFrZSAtYyBjbGVhbmFsbCBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtaycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZXJyb3Jwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ0VSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IGRvX2ZhaWxfdGFzaycpCisgICAgICAgIG1hbnZlciA9IHJlLnNlYXJjaCgiTk9URTogcmVjaXBlIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtKC4qPyk6IHRhc2sgZG9fdW5wYWNrOiBTdGFydGVkIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgY29udGludWVwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ05PVEU6IHJlY2lwZSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLSVzOiB0YXNrIGRvX3VucGFjazogU3RhcnRlZCcgJSBtYW52ZXIuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlcnJvcnBvcyxjb250aW51ZXBvcywgbXNnID0gImJpdGJha2UgZGlkbid0IHBhc3MgZG9fZmFpbF90YXNrLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTE5KQorICAgIGRlZiB0ZXN0X25vbl9ncGx2MyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICdJTkNPTVBBVElCTEVfTElDRU5TRSA9ICJHUEx2MyInCisgICAgICAgIGNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvbG9jYWwuY29uZicpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShjb25mICxkYXRhKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUsIGNvbmYgLGRhdGEpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ3JlYWRsaW5lJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICJCaXRiYWtlIGZhaWxlZCwgZXhpdCBjb2RlICVzLCBvdXRwdXQgJXMiICUgKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndG1wL2RlcGxveS9saWNlbnNlcy9yZWFkbGluZS9nZW5lcmljX0dQTHYzJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0bXAvZGVwbG95L2xpY2Vuc2VzL3JlYWRsaW5lL2dlbmVyaWNfR1BMdjInKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRoaXN0b3J5LnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGNhZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgQ29tbWFuZCwgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIEJ1aWxkaGlzdG9yeUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgY29uZmlnX2J1aWxkaGlzdG9yeShzZWxmLCB0bXBfYmhfbG9jYXRpb249RmFsc2UpOgorICAgICAgICBpZiAobm90ICdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ1VTRVJfQ0xBU1NFUycpKSBhbmQgKG5vdCAnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdJTkhFUklUJykpOgorICAgICAgICAgICAgYWRkX2J1aWxkaGlzdG9yeV9jb25maWcgPSAnSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IlxuQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhhZGRfYnVpbGRoaXN0b3J5X2NvbmZpZykKKworICAgICAgICBpZiB0bXBfYmhfbG9jYXRpb246CisgICAgICAgICAgICAjIFVzaW5nIGEgdGVtcG9yYXJ5IGJ1aWxkaGlzdG9yeSBsb2NhdGlvbiBmb3IgdGVzdGluZworICAgICAgICAgICAgdG1wX2JoX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAidG1wX2J1aWxkaGlzdG9yeV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBidWlsZGhpc3RvcnlfZGlyX2NvbmZpZyA9ICJCVUlMREhJU1RPUllfRElSID0gXCIlc1wiIiAlIHRtcF9iaF9kaXIKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhidWlsZGhpc3RvcnlfZGlyX2NvbmZpZykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG1wX2JoX2RpcikKKworICAgIGRlZiBydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbihzZWxmLCB0YXJnZXQsIGdsb2JhbF9jb25maWc9JycsIHRhcmdldF9jb25maWc9JycsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPUZhbHNlLCBlcnJvcl9yZWdleD0nJyk6CisgICAgICAgIGlmIGNoYW5nZV9iaF9sb2NhdGlvbjoKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IEZhbHNlCisgICAgICAgIHNlbGYuY29uZmlnX2J1aWxkaGlzdG9yeSh0bXBfYmhfbG9jYXRpb24pCisKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWcpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW4gJXMiICUgdGFyZ2V0KQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZykKKworICAgICAgICBpZiBleHBlY3RfZXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsIG1zZz0iRXJyb3IgZXhwZWN0ZWQgZm9yIGdsb2JhbCBjb25maWcgJyVzJyBhbmQgdGFyZ2V0IGNvbmZpZyAnJXMnIiAlIChnbG9iYWxfY29uZmlnLCB0YXJnZXRfY29uZmlnKSkKKyAgICAgICAgICAgIHNlYXJjaF9mb3JfZXJyb3IgPSByZS5zZWFyY2goZXJyb3JfcmVnZXgsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VhcmNoX2Zvcl9lcnJvciwgbXNnPSJDb3VsZCBub3QgZmluZCBkZXNpcmVkIGVycm9yIGluIG91dHB1dDogJXMiICUgZXJyb3JfcmVnZXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZz0iQ29tbWFuZCAnYml0YmFrZSAlcycgaGFzIGZhaWxlZCB1bmV4cGVjdGVkbHk6ICVzIiAlICh0YXJnZXQsIHJlc3VsdC5vdXRwdXQpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzODAzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkKQEAgLTAsMCArMSwxNDkgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgZ2xvYiBhcyBnCitpbXBvcnQgcGV4cGVjdCBhcyBwCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgoraW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIEltYWdlT3B0aW9uc1Rlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc2MSkKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbF9pbWFnZV9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gZ2V0X2JiX3ZhcigiSU1BR0VfUEtHVFlQRSIpCisgICAgICAgIGlmIGltYWdlX3BrZ3R5cGUgIT0gJ3JwbSc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdOb3QgdXNpbmcgUlBNIGFzIG1haW4gcGFja2FnZSBmb3JtYXQnKQorICAgICAgICBiaXRiYWtlKCItYyBjbGVhbmFsbCBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU5DX1JQTV9JTUFHRV9HRU4gPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0lNQUdFX0ZFQVRVUkVTICs9ICJzc2gtc2VydmVyLW9wZW5zc2giJykKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbG9nX2RhdGFfZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwgImNvcmUtaW1hZ2UtbWluaW1hbCIpLCAidGVtcC9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgbG9nX2RhdGFfY3JlYXRlZCA9IGZ0b29scy5yZWFkX2ZpbGUobG9nX2RhdGFfZmlsZSkKKyAgICAgICAgaW5jcmVtZW50YWxfY3JlYXRlZCA9IHJlLnNlYXJjaCgiTk9URTogbG9hZCBvbGQgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbFxuTk9URTogb2xkIGluc3RhbGwgc29sdXRpb24gbm90IGV4aXN0XG5OT1RFOiBjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbChcbi4qKSpOT1RFOiBJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6LipwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIsIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfY3JlYXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGxvZ19kYXRhX3JlbW92ZWQgPSBmdG9vbHMucmVhZF9maWxlKGxvZ19kYXRhX2ZpbGUpCisgICAgICAgIGluY3JlbWVudGFsX3JlbW92ZWQgPSByZS5zZWFyY2goIk5PVEU6IGxvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGxcbk5PVEU6IGNyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsKFxuLiopKk5PVEU6IGluY3JlbWVudGFsIHJlbW92ZWQ6LipvcGVuc3NoLXNzaGQtLioiLCBsb2dfZGF0YV9yZW1vdmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfcmVtb3ZlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX3JlbW92ZWQpCisKKyAgICBAdGVzdGNhc2UoOTI1KQorICAgIGRlZiB0ZXN0X3JtX29sZF9pbWFnZShzZWxmKToKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgZGVwbG95ZGlyID0gZ2V0X2JiX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgaW1hZ2VuYW1lID0gZ2V0X2JiX3ZhcigiSU1BR0VfTElOS19OQU1FIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgdHJhY2tfb3JpZ2luYWxfZmlsZXMgPSBbXQorICAgICAgICBmb3IgaW1hZ2VfZmlsZSBpbiBkZXBsb3lkaXJfZmlsZXM6CisgICAgICAgICAgICBpZiBpbWFnZW5hbWUgaW4gaW1hZ2VfZmlsZSBhbmQgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VfZmlsZSkpOgorICAgICAgICAgICAgICAgIHRyYWNrX29yaWdpbmFsX2ZpbGVzLmFwcGVuZChvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltYWdlX2ZpbGUpKSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJSTV9PTERfSU1BR0UgPSBcIjFcIiIpCisgICAgICAgIGJpdGJha2UoIi1DIHJvb3RmcyBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFtwYXRoIGZvciBwYXRoIGluIHRyYWNrX29yaWdpbmFsX2ZpbGVzIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgaW4gZGVwbG95ZGlyX2ZpbGVzXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQsIG1zZz0iXG5UaGUgZm9sbG93aW5nIGltYWdlIGZpbGVzIHdlcmUgbm90IHJlbW92ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCByZW1haW5pbmdfbm90X2V4cGVjdGVkKSkpCisKKyAgICBAdGVzdGNhc2UoMjg2KQorICAgIGRlZiB0ZXN0X2NjYWNoZV90b29sKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCJjY2FjaGUtbmF0aXZlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpLCAiY2NhY2hlIikpLCBtc2cgPSAiTm8gY2NhY2hlIGZvdW5kIHVuZGVyICVzIiAlIHN0cihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpKSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0lOSEVSSVQgKz0gImNjYWNoZSInKQorICAgICAgICBiaXRiYWtlKCJtNCAtYyBjbGVhbnNzdGF0ZSIpCisgICAgICAgIGJpdGJha2UoIm00IC1jIGNvbXBpbGUiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYml0YmFrZSwgJ2NjYWNoZS1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIHJlcyA9IHJ1bkNtZCgiZ3JlcCBjY2FjaGUgJXMiICUgKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwibTQiKSwidGVtcC9sb2cuZG9fY29tcGlsZSIpKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMsIG1zZz0iTm8gbWF0Y2ggZm9yIGNjYWNoZSBpbiBtNCBsb2cuZG9fY29tcGlsZS4gRm9yIGZ1cnRoZXIgZGV0YWlsczogJXMiICUgb3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCJtNCIpLCJ0ZW1wL2xvZy5kb19jb21waWxlIikpCisKKworY2xhc3MgRGlza01vblRlc3Qob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjc3KQorICAgIGRlZiB0ZXN0X3N0b3B0YXNrX2JlaGF2aW9yKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IiwgaWdub3JlX3N0YXR1cyA9IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRVJST1I6IE5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIlNUT1BUQVNLUyIhJyBpbiByZXMub3V0cHV0LCBtc2cgPSAiVGFza3Mgc2hvdWxkIGhhdmUgc3RvcHBlZC4gRGlzayBtb25pdG9yIGlzIHNldCB0byBTVE9QVEFTSzogJXMiICUgcmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAxLCBtc2cgPSAiYml0YmFrZSByZXBvcnRlZCBleGl0IGNvZGUgJXMuIEl0IHNob3VsZCBoYXZlIGJlZW4gMS4gQml0YmFrZSBvdXRwdXQ6ICVzIiAlIChzdHIocmVzLnN0YXR1cyksIHJlcy5vdXRwdXQpKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogSW1tZWRpYXRlbHkgYWJvcnQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIkFCT1JUIiEnIGluIHJlcy5vdXRwdXQsICJUYXNrcyBzaG91bGQgaGF2ZSBiZWVuIGFib3J0ZWQgaW1tZWRpYXRlbGx5LiBEaXNrIG1vbml0b3IgaXMgc2V0IHRvIEFCT1JUOiAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiV0FSTiwke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdXQVJOSU5HOiBUaGUgZnJlZSBzcGFjZScgaW4gcmVzLm91dHB1dCwgbXNnID0gIkEgd2FybmluZyBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCBmb3IgZGlzayBtb25pdG9yIGlzIHNldCB0byBXQVJOOiAlcyIgJXJlcy5vdXRwdXQpCisKK2NsYXNzIFNhbml0eU9wdGlvbnNUZXN0KG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDkyNykKKyAgICBkZWYgdGVzdF9vcHRpb25zX3dhcm5xYV9lcnJvcnFhX3N3aXRjaChzZWxmKToKKyAgICAgICAgYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtY2NsZWFuc3N0YXRlIikKKworICAgICAgICBpZiAicGFja2FnZXMtbGlzdCIgbm90IGluIGdldF9iYl92YXIoIkVSUk9SX1FBIik6CisgICAgICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiRVJST1JfUUFfYXBwZW5kID0gXCIgcGFja2FnZXMtbGlzdFwiIikKKworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdQQUNLQUdFUyArPSBcIiR7UE59LWRiZ1wiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogUUEgSXNzdWU6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtZGJnIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnUEFDS0FHRVMgKz0gXCIke1BOfS1kYmdcIicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnRVJST1JfUUFfcmVtb3ZlID0gInBhY2thZ2VzLWxpc3QiJykKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdXQVJOX1FBX2FwcGVuZCA9ICIgcGFja2FnZXMtbGlzdCInKQorICAgICAgICBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIC1jY2xlYW5zc3RhdGUiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIikKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJXQVJOSU5HOiBRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIiBpbiByZXMub3V0cHV0LCBtc2c9cmVzLm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyNzgpCisgICAgZGVmIHRlc3Rfc2FuaXR5X3VzZXJzcGFjZV9kZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ1dBUk5fUUFfYXBwZW5kID0gIiB1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyB1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIicpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgZ3ppcCBuZnMtdXRpbHMiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJnemlwIG5mcy11dGlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IGd6aXAiIGluIHJlcy5vdXRwdXQsICJXQVJOSU5HOiBRQSBJc3N1ZTogZ3ppcCBtZXNzYWdlIGlzIG5vdCBwcmVzZW50IGluIGJpdGJha2UncyBvdXRwdXQ6ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IG5mcy11dGlscyIgaW4gcmVzLm91dHB1dCwgIldBUk5JTkc6IFFBIElzc3VlOiBuZnMtdXRpbHMgbWVzc2FnZSBpcyBub3QgcHJlc2VudCBpbiBiaXRiYWtlJ3Mgb3V0cHV0OiAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBCdWlsZGhpc3RvcnlUZXN0cyhCdWlsZGhpc3RvcnlCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgyOTMpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKSwgImJ1aWxkaGlzdG9yeSBkaXIgd2FzIG5vdCBjcmVhdGVkLiIpCisKKyAgICBAdGVzdGNhc2UoMjk0KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9idWlsZHRpbWVfcHJfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgZXJyb3IgPSAiRVJST1I6IFFBIElzc3VlOiBQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICguKi1yMSB0byAuKi1yMCkiICUgdGFyZ2V0CisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjFcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1UcnVlKQorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIwXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249RmFsc2UsIGV4cGVjdF9lcnJvcj1UcnVlLCBlcnJvcl9yZWdleD1lcnJvcikKKworY2xhc3MgQnVpbGRJbWFnZXNUZXN0KG9lU2VsZlRlc3QpOgorICAgIEB0ZXN0Y2FzZSg1NjMpCisgICAgZGVmIHRlc3RfZGlyZWN0ZmIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHRlc3QgdGhlIGJ1aWxkIG9mIGRpcmVjdGZiIGltYWdlIGZvciBhcm0gYXJjaC4KKyAgICAgICAgSW4gZXNzZW5jZSB3ZSBidWlsZCBhIGNvcmVpbWFnZWRpcmVjdGZiIGFuZCB0ZXN0IHRoZSBleGl0Y29kZSBvZiBiaXRiYWtlIHRoYXQgaW4gY2FzZSBvZiBzdWNjZXNzIGlzIDAuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJESVNUUk9fRkVBVFVSRVNfcmVtb3ZlID0gXCJ4MTFcIlxuRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9IFwiIGRpcmVjdGZiXCJcbk1BQ0hJTkUgPz89IFwicWVtdWFybVwiIikKKyAgICAgICAgcmVzID0gYml0YmFrZSgiY29yZS1pbWFnZS1kaXJlY3RmYiIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAwLCAiXG5jb3JlaW1hZ2VkaXJlY3RmYiBmYWlsZWQgdG8gYnVpbGQuIFBsZWFzZSBjaGVjayBsb2dzIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBBcmNoaXZlclRlc3Qob2VTZWxmVGVzdCk6CisgICAgQHRlc3RjYXNlKDkyNikKKyAgICBkZWYgdGVzdF9hcmNoX3dvcmtfZGlyX2FuZF9leHBvcnRfc291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBmb3IgYXJjaGl2aW5nIHRoZSB3b3JrIGRpcmVjdG9yeSBhbmQgZXhwb3J0aW5nIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUID0gXCJhcmNoaXZlclwiXG5BUkNISVZFUl9NT0RFW3NyY10gPSBcIm9yaWdpbmFsXCJcbkFSQ0hJVkVSX01PREVbc3JwbV0gPSBcIjFcIiIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgIlxuQ291bGRuJ3QgYnVpbGQgeGN1cnNvcnRyYW5zcGFyZW50dGhlbWUuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBwa2dzX3BhdGggPSBnLmdsb2Ioc3RyKHNlbGYuYnVpbGRkaXIpICsgIi90bXAvZGVwbG95L3NvdXJjZXMvYWxsYXJjaCoveGN1cnMqIikKKyAgICAgICAgc3JjX2ZpbGVfZ2xvYiA9IHN0cihwa2dzX3BhdGhbMF0pICsgIi94Y3Vyc29yKi5zcmMucnBtIgorICAgICAgICB0YXJfZmlsZV9nbG9iID0gc3RyKHBrZ3NfcGF0aFswXSkgKyAiL3hjdXJzb3IqLnRhci5neiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChnLmdsb2Ioc3JjX2ZpbGVfZ2xvYikgYW5kIGcuZ2xvYih0YXJfZmlsZV9nbG9iKSksICJDb3VsZG4ndCBmaW5kIC5zcmMucnBtIGFuZCAudGFyLmd6IGZpbGVzIHVuZGVyIHRtcC9kZXBsb3kvc291cmNlcy9hbGxhcmNoKi94Y3Vyc29yKiIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9kZXZ0b29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzMxZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQpAQCAtMCwwICsxLDk3MSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGdsb2IKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllciwgcnVucWVtdQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIERldnRvb2xCYXNlKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIF90ZXN0X3JlY2lwZV9jb250ZW50cyhzZWxmLCByZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGNoZWNraW5oZXJpdHMpOgorICAgICAgICB3aXRoIG9wZW4ocmVjaXBlZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgICAgIHZhciA9IHNwbGl0bGluZVswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0bGluZVsxXS5zdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyIGluIGNoZWNrdmFyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWR2YWx1ZSA9IGNoZWNrdmFycy5wb3AodmFyKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbmVlZHZhbHVlLCAndmFsdWVzIGZvciAlcyBkbyBub3QgbWF0Y2gnICUgdmFyKQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaW5oZXJpdCAnKToKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBsaW5lLnNwbGl0KClbMTpdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja3ZhcnMsIHt9LCAnU29tZSB2YXJpYWJsZXMgbm90IGZvdW5kOiAlcycgJSBjaGVja3ZhcnMpCisKKyAgICAgICAgZm9yIGluaGVyaXQgaW4gY2hlY2tpbmhlcml0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5oZXJpdCwgaW5oZXJpdHMsICdNaXNzaW5nIGluaGVyaXQgb2YgJXMnICUgaW5oZXJpdCkKKworICAgIGRlZiBfY2hlY2tfYmJhcHBlbmQoc2VsZiwgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMnLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0bGluZXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBpbnJlY2lwZSA9IEZhbHNlCisgICAgICAgIGJiYXBwZW5kcyA9IFtdCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0bGluZXM6CisgICAgICAgICAgICBpZiBpbnJlY2lwZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKKyAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRzLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgbGluZSA9PSAnJXM6JyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSk6CisgICAgICAgICAgICAgICAgaW5yZWNpcGUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGxlbihiYmFwcGVuZHMpLCAyLCAnJXMgcmVjaXBlIGlzIGJlaW5nIGJiYXBwZW5kZWQgYnkgYW5vdGhlciBsYXllciAtIGJiYXBwZW5kcyBmb3VuZDpcbiAgJXMnICUgKHRlc3RyZWNpcGUsICdcbiAgJy5qb2luKGJiYXBwZW5kcykpKQorICAgICAgICBmb3IgYmJhcHBlbmQgaW4gYmJhcHBlbmRzOgorICAgICAgICAgICAgaWYgYmJhcHBlbmQuc3RhcnRzd2l0aChhcHBlbmRkaXIpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGJiYXBwZW5kCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYmJhcHBlbmQgZm9yIHJlY2lwZSAlcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGNyZWF0ZWQgaW4gdGVzdCBsYXllcicgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlCisKKyAgICBkZWYgX2NyZWF0ZV90ZW1wX2xheWVyKHNlbGYsIHRlbXBsYXllcmRpciwgYWRkbGF5ZXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5PTk5OSwgcmVjaXBlcGF0aHNwZWM9J3JlY2lwZXMtKi8qJyk6CisgICAgICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHksIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBpZiBhZGRsYXllcjoKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcyB8fCB0cnVlJyAlIHRlbXBsYXllcmRpcikKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisKKyAgICBkZWYgX3Byb2Nlc3NfbHNfb3V0cHV0KHNlbGYsIG91dHB1dCk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZXJ0IGxzIC1sIG91dHB1dCB0byBhIGZvcm1hdCB3ZSBjYW4gcmVhc29uYWJseSBjb21wYXJlIGZyb20gb25lIGNvbnRleHQKKyAgICAgICAgdG8gYW5vdGhlciAoZS5nLiBmcm9tIGhvc3QgdG8gdGFyZ2V0KQorICAgICAgICAiIiIKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAjIFJlbW92ZSB0cmFpbGluZyAuIG9uIHBlcm1zCisgICAgICAgICAgICBzcGxpdGxpbmVbMF0gPSBzcGxpdGxpbmVbMF0ucnN0cmlwKCcuJykKKyAgICAgICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgLiBvbiBwYXRocworICAgICAgICAgICAgc3BsaXRsaW5lWy0xXSA9IHNwbGl0bGluZVstMV0ubHN0cmlwKCcuJykKKyAgICAgICAgICAgICMgRHJvcCBmaWVsZHMgd2UgZG9uJ3Qgd2FudCB0byBjb21wYXJlCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzddCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzZdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzVdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzRdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzFdCisgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoJyAnLmpvaW4oc3BsaXRsaW5lKSkKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CisKKworY2xhc3MgRGV2dG9vbFRlc3RzKERldnRvb2xCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgxMTU4KQorICAgIGRlZiB0ZXN0X2NyZWF0ZV93b3Jrc3BhY2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvd29ya3NwYWNlJyBub3QgaW4gcmVzdWx0Lm91dHB1dCwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgbGF5ZXIgaW4gYmJsYXllcnMuY29uZicpCisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgd29ya3NwYWNlIGxheWVyIHdpdGggYSBzcGVjaWZpYyBwYXRoCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFRyeSBjcmVhdGluZyBhIHdvcmtzcGFjZSBsYXllciB3aXRoIHRoZSBkZWZhdWx0IHBhdGgKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHdvcmtzcGFjZWRpciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTU5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHVybCA9ICdodHRwOi8vd3d3Lml2YXJjaC5jb20vcHJvZ3JhbXMvc291cmNlcy9wdi0xLjUuMy50YXIuYnoyJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3dnZXQgJXMnICUgdXJsLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd0YXIgeGZ2IHB2LTEuNS4zLnRhci5iejInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdwdi0xLjUuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlIHNjcmlwdCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIHB2JykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCBwdiAlcycgJSBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncHYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZSAoaGF2ZSB0byBkbyB0aGlzICphZnRlciogZGV2dG9vbCBhZGQgc2luY2UgdGhlIHJlY2lwZSBvbmx5IGV4aXN0cyB0aGVuKQorICAgICAgICBiaXRiYWtlKCdwdiAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBwdicpCisgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgJ3B2JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3RhbGxkaXIsICdDb3VsZCBub3QgcXVlcnkgaW5zdGFsbGRpciB2YXJpYWJsZScpCisgICAgICAgIGJpbmRpciA9IGdldF9iYl92YXIoJ2JpbmRpcicsICdwdicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiaW5kaXIsICdDb3VsZCBub3QgcXVlcnkgYmluZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgYmluZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIGJpbmRpciA9IGJpbmRpclsxOl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihpbnN0YWxsZGlyLCBiaW5kaXIsICdwdicpKSwgJ3B2IGJpbmFyeSBub3QgZm91bmQgaW4gRCcpCisKKyAgICBAdGVzdGNhc2UoMTE2MikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9saWJyYXJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBXZSBkb24ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHBpY2sgdXAgdGhpcyBkZXBlbmRlbmN5IGF1dG9tYXRpY2FsbHkgeWV0Li4uCisgICAgICAgIGJpdGJha2UoJ2xpYnVzYjEnKQorICAgICAgICAjIEZldGNoIHNvdXJjZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cuaW50cmEybmV0LmNvbS9lbi9kZXZlbG9wZXIvbGliZnRkaS9kb3dubG9hZC9saWJmdGRpMS0xLjEudGFyLmJ6MicKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd3Z2V0ICVzJyAlIHVybCwgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgndGFyIHhmdiBsaWJmdGRpMS0xLjEudGFyLmJ6MicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xpYmZ0ZGkxLTEuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnQ01ha2VMaXN0cy50eHQnKSksICdVbmFibGUgdG8gZmluZCBDTWFrZUxpc3RzLnR4dCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkIChhbmQgdXNlIC1WIHNvIHdlIHRlc3QgdGhhdCB0b28pCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkIGxpYmZ0ZGkgJXMgLVYgMS4xJyAlIHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJmdGRpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUgKGhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIGRldnRvb2wgYWRkIHNpbmNlIHRoZSByZWNpcGUgb25seSBleGlzdHMgdGhlbikKKyAgICAgICAgYml0YmFrZSgnbGliZnRkaSAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBsaWJmdGRpJykKKyAgICAgICAgc3RhZ2luZ19saWJkaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0xJQkRJUicsICdsaWJmdGRpJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YWdpbmdfbGliZGlyLCAnQ291bGQgbm90IHF1ZXJ5IFNUQUdJTkdfTElCRElSIHZhcmlhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFnaW5nX2xpYmRpciwgJ2xpYmZ0ZGkxLnNvLjIuMS4wJykpLCAibGliZnRkaSBiaW5hcnkgbm90IGZvdW5kIGluIFNUQUdJTkdfTElCRElSLiBPdXRwdXQgb2YgZGV2dG9vbCBidWlsZCBsaWJmdGRpICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHJlc2V0CisgICAgICAgIHN0YW1wcHJlZml4ID0gZ2V0X2JiX3ZhcignU1RBTVAnLCAnbGliZnRkaScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCBsaWJmdGRpJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYmZ0ZGknLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgbGliZnRkaScpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXggKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlcywgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgbGliZnRkaSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHN0YWdpbmdfbGliZGlyLCAnbGliZnRkaTEuc28uMi4xLjAnKSksICdsaWJmdGRpIGJpbmFyeSBzdGlsbCBmb3VuZCBpbiBTVEFHSU5HX0xJQkRJUiBhZnRlciBjbGVhbmluZycpCisKKyAgICBAdGVzdGNhc2UoMTE2MCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB0ZXN0dmVyID0gJzAuMjMnCisgICAgICAgIHVybCA9ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYXJrdXBTYWZlL01hcmt1cFNhZmUtJXMudGFyLmd6JyAlIHRlc3R2ZXIKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdweXRob24tbWFya3Vwc2FmZScKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICVzJyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZC4gJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXMuYmInICUgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9NYXJrdXBTYWZlLSVzJyAlIHRlc3R2ZXIKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKyAgICAgICAgIyBUcnkgd2l0aCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMgLVYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsLCB0ZXN0dmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXNfJXMuYmInICUgKHRlc3RyZWNpcGUsIHRlc3R2ZXIpLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L01hcmt1cFNhZmUtJHtQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UodGVzdHZlciwgJyR7UFZ9JykKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEB0ZXN0Y2FzZSgxMTYxKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2ZldGNoX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB1cmwgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIGNoZWNrcmV2ID0gJzQ2MmYwNjUyMDU1ZDg5YzY0OGRkZDU0ZmQ3YjAzZjE3NWMyYzY5NzMnCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbGlibWF0Y2hib3gyJworICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkOiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMCtnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9ICcke0FVVE9SRVZ9JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICAjIFRyeSB3aXRoIHJldmlzaW9uIGFuZCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHVybF9yZXYgPSAnJXM7cmV2PSVzJyAlICh1cmwsIGNoZWNrcmV2KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICIlcyIgLVYgMS41JyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybF9yZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuNStnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IGNoZWNrcmV2CisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAdGVzdGNhc2UoMTE2NCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuIG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSBtZGFkbSAteCAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnbWRhZG1fKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWRhZG0nLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcKKyAgICAgICAgYml0YmFrZSgnbWRhZG0nKQorICAgICAgICAjIFRyeSBtYWtpbmcgKG1pbm9yKSBtb2RpZmljYXRpb25zIHRvIHRoZSBzb3VyY2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgLWkgJ3MhXlwuVEguKiEuVEggTURBRE0gOCBcIlwiIHY5Ljk5OS1jdXN0b20hJyAlcyIgJSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ21kYWRtLjguaW4nKSkKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgcGFja2FnZScpCisgICAgICAgIHBrZ2QgPSBnZXRfYmJfdmFyKCdQS0dEJywgJ21kYWRtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBrZ2QsICdDb3VsZCBub3QgcXVlcnkgUEtHRCB2YXJpYWJsZScpCisgICAgICAgIG1hbmRpciA9IGdldF9iYl92YXIoJ21hbmRpcicsICdtZGFkbScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5kaXIsICdDb3VsZCBub3QgcXVlcnkgbWFuZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgbWFuZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIG1hbmRpciA9IG1hbmRpclsxOl0KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkLCBtYW5kaXIsICdtYW44JywgJ21kYWRtLjgnKSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy5USCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUucnN0cmlwKCksICcuVEggTURBRE0gOCAiIiB2OS45OTktY3VzdG9tJywgJ21hbiBmaWxlIG5vdCBtb2RpZmllZC4gbWFuIHNlYXJjaGVkIGZpbGUgcGF0aDogJXMnICUgb3MucGF0aC5qb2luKHBrZ2QsIG1hbmRpciwgJ21hbjgnLCAnbWRhZG0uOCcpKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCByZXNldAorICAgICAgICBzdGFtcHByZWZpeCA9IGdldF9iYl92YXIoJ1NUQU1QJywgJ21kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21kYWRtJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4LCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlIG1kYWRtJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeCArICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRjaGVzLCAnU3RhbXAgZmlsZXMgZXhpc3QgZm9yIHJlY2lwZSBtZGFkbSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisKKyAgICBAdGVzdGNhc2UoMTE2NikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9pbnZhbGlkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgdGVzdHJlY2lwZXMgPSAncGVyZiBrZXJuZWwtZGV2c3JjIHBhY2thZ2UtaW5kZXggY29yZS1pbWFnZS1taW5pbWFsIG1ldGEtdG9vbGNoYWluIHBhY2thZ2Vncm91cC1jb3JlLXNkayBtZXRhLWlkZS1zdXBwb3J0Jy5zcGxpdCgpCisgICAgICAgICMgRmluZCBhY3R1YWwgbmFtZSBvZiBnY2Mtc291cmNlIHNpbmNlIGl0IG5vdyBpbmNsdWRlcyB0aGUgdmVyc2lvbiAtIGNydWRlLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoaXMgcHVycG9zZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctcmVjaXBlcyBnY2Mtc291cmNlKicpCisgICAgICAgIHJlYWRpbmcgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnPT0nKToKKyAgICAgICAgICAgICAgICByZWFkaW5nID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiByZWFkaW5nIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCcgJyk6CisgICAgICAgICAgICAgICAgdGVzdHJlY2lwZXMuYXBwZW5kKGxpbmUuc3BsaXQoJzonKVswXSkKKyAgICAgICAgZm9yIHRlc3RyZWNpcGUgaW4gdGVzdHJlY2lwZXM6CisgICAgICAgICAgICAjIENoZWNrIGl0J3MgYSB2YWxpZCByZWNpcGUKKyAgICAgICAgICAgIGJpdGJha2UoJyVzIC1lJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgZXh0cmFjdCBzaG91bGQgZmFpbAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgJXMgJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAodGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdGZXRjaGluZyAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGVycm9yZWQgb3V0IGJlZm9yZSB0cnlpbmcgdG8gZmV0Y2gnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGdpdmVuIGFuIEVSUk9SJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgbW9kaWZ5IHNob3VsZCBmYWlsCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAgKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBnaXZlbiBhbiBFUlJPUicgJSB0ZXN0cmVjaXBlKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfbmF0aXZlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgYmJjbGFzc2V4dGVuZGVkID0gRmFsc2UKKyAgICAgICAgaW5oZXJpdG5hdGl2ZSA9IEZhbHNlCisgICAgICAgIHRlc3RyZWNpcGVzID0gJ210b29scy1uYXRpdmUgYXB0LW5hdGl2ZSBkZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlJy5zcGxpdCgpCisgICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgorICAgICAgICAgICAgY2hlY2tleHRlbmQgPSAnbmF0aXZlJyBpbiAoZ2V0X2JiX3ZhcignQkJDTEFTU0VYVEVORCcsIHRlc3RyZWNpcGUpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgYmJjbGFzc2V4dGVuZGVkOgorICAgICAgICAgICAgICAgIGJiY2xhc3NleHRlbmRlZCA9IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICBpZiBub3QgaW5oZXJpdG5hdGl2ZToKKyAgICAgICAgICAgICAgICBpbmhlcml0bmF0aXZlID0gbm90IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIG1vZGlmeSBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCBidWlsZCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCByZXNldCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiY2xhc3NleHRlbmRlZCwgJ05vbmUgb2YgdGhlc2UgcmVjaXBlcyBhcmUgQkJDTEFTU0VYVEVORGVkIHRvIG5hdGl2ZSAtIG5lZWQgdG8gYWRqdXN0IHRlc3RyZWNpcGVzIGxpc3Q6ICVzJyAlICcsICcuam9pbih0ZXN0cmVjaXBlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmhlcml0bmF0aXZlLCAnTm9uZSBvZiB0aGVzZSByZWNpcGVzIGRvICJpbmhlcml0IG5hdGl2ZSIgLSBuZWVkIHRvIGFkanVzdCB0ZXN0cmVjaXBlcyBsaXN0OiAlcycgJSAnLCAnLmpvaW4odGVzdHJlY2lwZXMpKQorCisKKyAgICBAdGVzdGNhc2UoMTE2NSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21rZWxmaW1hZ2UnCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW5zc3RhdGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21rZWxmaW1hZ2VfKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIFRyeSBidWlsZGluZworICAgICAgICBiaXRiYWtlKHRlc3RyZWNpcGUpCisKKyAgICBAdGVzdGNhc2UoMTE2NykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9sb2NhbGZpbGVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdsaWdodHRwZCcKKyAgICAgICAgc3JjX3VyaSA9IChnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgZm91bmRsb2NhbCA9IEZhbHNlCisgICAgICAgIGZvciBpdGVtIGluIHNyY191cmk6CisgICAgICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgJy5wYXRjaCcgbm90IGluIGl0ZW06CisgICAgICAgICAgICAgICAgZm91bmRsb2NhbCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmRsb2NhbCwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gZmV0Y2ggbG9jYWwgZmlsZXMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgbm8gbG9uZ2VyIGRvZXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25maWd1cmUuYWMnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnJXNfKi5iYmFwcGVuZCcgJSB0ZXN0cmVjaXBlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVHJ5IGJ1aWxkaW5nCisgICAgICAgIGJpdGJha2UodGVzdHJlY2lwZSkKKworICAgIEB0ZXN0Y2FzZSgxMTY5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWluaWNvbScKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIE5PVCBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb3VwbGUgb2YgY29tbWl0cworICAgICAgICAjIEZJWE1FOiB0aGlzIG9ubHkgdGVzdHMgYWRkaW5nLCBuZWVkIHRvIGFsc28gdGVzdCB1cGRhdGUgYW5kIHJlbW92ZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkFkZGl0aW9uYWwgbGluZSIgPj4gUkVBRE1FJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBSRUFETUUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQSBuZXcgZmlsZSIgPiBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGFkZCBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIGEgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAlcy8qLnBhdGNoOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIHNob3VsZCBiZSBtb2RpZmllZCcgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzdGF0dXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0dXMpLCAzLCAnTGVzcy9tb3JlIGZpbGVzIG1vZGlmaWVkIHRoYW4gZXhwZWN0ZWQuIEVudGlyZSBzdGF0dXM6XG4lcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCcwMDAxLUNoYW5nZS10aGUtUkVBRE1FLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLmVuZHN3aXRoKCcwMDAyLUFkZC1hLW5ldy1maWxlLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiByZS5zZWFyY2goJyVzX1teX10qLmJiJCcgJSB0ZXN0cmVjaXBlLCBsaW5lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnIE0gJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gc3RhdHVzOiAlcycgJSBsaW5lKQorCisgICAgQHRlc3RjYXNlKDExNzIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbXRkLXV0aWxzJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHBhdGNoZXMgPSBbXQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZCBlbnRyeS5lbmRzd2l0aCgnLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQoZW50cnlbNzpdLnNwbGl0KCc7JylbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ocGF0Y2hlcyksIDAsICdUaGUgJXMgcmVjaXBlIGRvZXMgbm90IGFwcGVhciB0byBjb250YWluIGFueSBwYXRjaGVzLCBzbyB0aGlzIHRlc3Qgd2lsbCBub3QgYmUgZWZmZWN0aXZlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY291cGxlIG9mIGNvbW1pdHMKKyAgICAgICAgIyBGSVhNRTogdGhpcyBvbmx5IHRlc3RzIGFkZGluZywgbmVlZCB0byBhbHNvIHRlc3QgdXBkYXRlIGFuZCByZW1vdmUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICIjIEFkZGl0aW9uYWwgbGluZSIgPj4gTWFrZWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkEgbmV3IGZpbGUiID4gZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBhZGQgZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBhIG5ldyBmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLXJmICVzOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBzaG91bGQgYmUgbW9kaWZpZWQnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzOgorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChwYXRjaCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgRCAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCclc19bXl9dKi5iYiQnICUgdGVzdHJlY2lwZSwgbGluZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgTSAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignVW5leHBlY3RlZCBtb2RpZmllZCBmaWxlIGluIHN0YXR1czogJXMnICUgbGluZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgZGlmZiAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBhZGRsaW5lcyA9IFsnU1JDUkVWID0gIi4qIicsICdTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQiJ10KKyAgICAgICAgc3JjdXJpbGluZXMgPSBzcmNfdXJpLnNwbGl0KCkKKyAgICAgICAgc3JjdXJpbGluZXNbMF0gPSAnU1JDX1VSSSA9ICInICsgc3JjdXJpbGluZXNbMF0KKyAgICAgICAgc3JjdXJpbGluZXMuYXBwZW5kKCciJykKKyAgICAgICAgcmVtb3ZlbGluZXMgPSBbJ1NSQ1JFViA9ICIuKiInXSArIHNyY3VyaWxpbmVzCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrKysnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGFkZGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChpdGVtLCBsaW5lWzE6XS5zdHJpcCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVkLCAnVW5leHBlY3RlZCBkaWZmIGFkZCBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goaXRlbSwgbGluZVsxOl0uc3RyaXAoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlZCwgJ1VuZXhwZWN0ZWQgZGlmZiByZW1vdmUgbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggYXV0byBtb2RlCisgICAgICAgIHJ1bkNtZCgnY2QgJXM7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCcpCisgICAgICAgIHRvcGxldmVsZGlyID0gcmVzdWx0Lm91dHB1dC5zdHJpcCgpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgcmVscGF0Y2hwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRvcGxldmVsZGlyKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZXhwZWN0ZWRzdGF0dXMgPSBbKCdNJywgb3MucGF0aC5yZWxwYXRoKHJlY2lwZWZpbGUsIHRvcGxldmVsZGlyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMS1DaGFuZ2UtdGhlLU1ha2VmaWxlLnBhdGNoJyAlIHJlbHBhdGNocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMi1BZGQtYS1uZXctZmlsZS5wYXRjaCcgJSByZWxwYXRjaHBhdGgpXQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBzdGF0dXNsaW5lID0gbGluZS5zcGxpdChOb25lLCAxKQorICAgICAgICAgICAgZm9yIGZzdGF0dXMsIGZuIGluIGV4cGVjdGVkc3RhdHVzOgorICAgICAgICAgICAgICAgIGlmIGZuID09IHN0YXR1c2xpbmVbMV06CisgICAgICAgICAgICAgICAgICAgIGlmIGZzdGF0dXMgIT0gc3RhdHVzbGluZVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gbGluZTogJXMnICUgbGluZSkKKworICAgIEB0ZXN0Y2FzZSgxMTcwKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9hcHBlbmQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gTk9UIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgdGVtcHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc291cmNlJykKKyAgICAgICAgdGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsYXllcicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wc3JjZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcHNyY2RpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb21taXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgJ3MhXFwoI2RlZmluZSBWRVJTSU9OXFxXKlwiW15cIl0qXFwpXCIhXFwxLWN1c3RvbVwiIScgLWkgUmVhZE1lLmMiLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJBZGQgb3VyIGN1c3RvbSB2ZXJzaW9uIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLWYgJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0IC4nICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSkpCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGxheWVyIGFuZCBhZGQgaXQgdG8gYmJsYXllcnMuY29uZgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIFRydWUsICdzZWxmdGVzdHVwZGF0ZXJlY2lwZScpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzonLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZSBpcyBzdGlsbCBjbGVhbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDaGVjayBiYmFwcGVuZCB3YXMgY3JlYXRlZAorICAgICAgICBzcGxpdHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkuc3BsaXQob3Muc2VwKQorICAgICAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCBzcGxpdHBhdGhbLTJdLCBzcGxpdHBhdGhbLTFdKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBhcHBlbmRkaXIpCisgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUsICcwMDAxLUFkZC1vdXItY3VzdG9tLXZlcnNpb24ucGF0Y2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1BZGQtb3VyLWN1c3RvbS12ZXJzaW9uLnBhdGNoIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisKKyAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgcGF0Y2ggZ2V0cyBkZWxldGVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSksICdQYXRjaCBmaWxlIG5vdCBkZWxldGVkJykKKyAgICAgICAgZXhwZWN0ZWRsaW5lczIgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzMiwgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgorICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkFkZCBvdXIgY3VzdG9tIHZlcnNpb24iJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQgKHdpdGggZGlzYWJsZWQgbGF5ZXIpJykKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNzEpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2FwcGVuZF9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ210ZC11dGlscycKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICAgICAgZ2l0X3VyaSA9IGVudHJ5CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHRlbXBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3NvdXJjZScpCisgICAgICAgIHRlbXBsYXllcmRpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbGF5ZXInKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcHNyY2RpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBzcmNkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY29tbWl0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiIyBBZGRpdGlvbmFsIGxpbmUiID4+IE1ha2VmaWxlJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1mICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAuJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUpKQorICAgICAgICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBsYXllcgorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAib2VzZWxmdGVzdHRlbXBsYXllciJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIl4ke0xBWUVSRElSfS8iXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BSSU9SSVRZX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiOTk5IlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIjEiXG4nKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMgfHwgdHJ1ZScgJSB0ZW1wbGF5ZXJkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUgaXMgc3RpbGwgY2xlYW4KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgd2FzIGNyZWF0ZWQKKyAgICAgICAgc3BsaXRwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLnNwbGl0KG9zLnNlcCkKKyAgICAgICAgYXBwZW5kZGlyID0gb3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgc3BsaXRwYXRoWy0yXSwgc3BsaXRwYXRoWy0xXSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKworICAgICAgICAjIENoZWNrIHdlIGNhbiBydW4gaXQgYWdhaW4gYW5kIGJiYXBwZW5kIGlzbid0IG1vZGlmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgU1JDUkVWIGNoYW5nZXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmVzZXQgSEVBRF4nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIFB1dCBjb21taXQgYmFjayBhbmQgY2hlY2sgd2UgY2FuIHJ1biBpdCBpZiBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgICAgIG9zLnJlbW92ZShiYmFwcGVuZGZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNjMpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9leHRyYWN0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAjIFRyeSBkZXZ0b29sIGV4dHJhY3QKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgcmVtYWtlICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlLmFtJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKworICAgIEB0ZXN0Y2FzZSgxMTY4KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfcmVzZXRfYWxsKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICB0ZXN0cmVjaXBlMSA9ICdtZGFkbScKKyAgICAgICAgdGVzdHJlY2lwZTIgPSAnY3JvbmllJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlICh0ZXN0cmVjaXBlMSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUxKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHRlc3RyZWNpcGUyLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZTIpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHN0YW1wcHJlZml4MSA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDEsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTEpCisgICAgICAgIHN0YW1wcHJlZml4MiA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDIsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTEsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUxLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzMSA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDEgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczEsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICBtYXRjaGVzMiA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDIgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczIsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUyKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9kZXBsb3lfdGFyZ2V0KHNlbGYpOgorICAgICAgICAjIE5PVEU6IFdoaWxzdCB0aGlzIHRlc3Qgd291bGQgc2VlbWluZ2x5IGJlIGJldHRlciBwbGFjZWQgYXMgYSBydW50aW1lIHRlc3QsCisgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgcnVudGltZSB0ZXN0cyBydW4gdW5kZXIgYml0YmFrZSBhbmQgeW91IGNhbid0IHJ1bgorICAgICAgICAjIGRldnRvb2wgd2l0aGluIGJpdGJha2UgKHNpbmNlIGRldnRvb2wgbmVlZHMgdG8gcnVuIGJpdGJha2UgaXRzZWxmKS4KKyAgICAgICAgIyBBZGRpdGlvbmFsbHkgd2UgYXJlIHRlc3RpbmcgYnVpbGQtdGltZSBmdW5jdGlvbmFsaXR5IGFzIHdlbGwsIHNvCisgICAgICAgICMgcmVhbGx5IHRoaXMgaGFzIHRvIGJlIGRvbmUgYXMgYW4gb2Utc2VsZnRlc3QgdGVzdC4KKyAgICAgICAgIworICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBpZiBub3QgbWFjaGluZS5zdGFydHN3aXRoKCdxZW11Jyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3Qgb25seSB3b3JrcyB3aXRoIHFlbXUgbWFjaGluZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9ldGMvcnVucWVtdS1ub3N1ZG8nKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ1lvdSBtdXN0IHNldCB1cCB0YXAgZGV2aWNlcyB3aXRoIHNjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ1BBVEg9IiRQQVRIOi9zYmluOi91c3Ivc2JpbiIgaXAgdHVudGFwIHNob3cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnUEFUSD0iJFBBVEg6L3NiaW46L3Vzci9zYmluIiBpZmNvbmZpZyAtYScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGlmIHRhcCBkZXZpY2VzIGV4aXN0IHdpdGggaWZjb25maWcgb3IgaXA6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0YXAnKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnTm8gdGFwIGRldmljZXMgZm91bmQgLSB5b3UgbXVzdCBzZXQgdXAgdGFwIGRldmljZXMgd2l0aCBzY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0JykKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBEZWZpbml0aW9ucworICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICB0ZXN0ZmlsZSA9ICcvc2Jpbi9tZGFkbScKKyAgICAgICAgdGVzdGltYWdlID0gJ29lLXNlbGZ0ZXN0LWltYWdlJworICAgICAgICB0ZXN0Y29tbWFuZCA9ICcvc2Jpbi9tZGFkbSAtLWhlbHAnCisgICAgICAgICMgQnVpbGQgYW4gaW1hZ2UgdG8gcnVuCisgICAgICAgIGJpdGJha2UoIiVzIHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIgJSB0ZXN0aW1hZ2UpCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0aW1hZ2UpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1mICVzLyVzKicgJSAoZGVwbG95X2Rpcl9pbWFnZSwgdGVzdGltYWdlKSkKKyAgICAgICAgIyBDbGVhbiByZWNpcGUgc28gdGhlIGZpcnN0IGRlcGxveSB3aWxsIGZhaWwKKyAgICAgICAgYml0YmFrZSgiJXMgLWMgY2xlYW4iICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgZGV2dG9vbCBtb2RpZnkKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIFRlc3QgdGhhdCBkZXBsb3ktdGFyZ2V0IGF0IHRoaXMgcG9pbnQgZmFpbHMgKHByb3Blcmx5KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZGVwbG95LXRhcmdldCAtbiAlcyByb290QGxvY2FsaG9zdCcgJSB0ZXN0cmVjaXBlLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dCwgMCwgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQsIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZXN1bHQub3V0cHV0LCAnVHJhY2ViYWNrJywgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQgd2l0aCBhIHByb3BlciBlcnJvciBub3QgYSB0cmFjZWJhY2ssIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QgdHJ5IGEgZHJ5LXJ1biBvZiBkZXBsb3ktdGFyZ2V0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1uICVzIHJvb3RAbG9jYWxob3N0JyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyAgJXMnICUgdGVzdGZpbGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQm9vdCB0aGUgaW1hZ2UKKyAgICAgICAgd2l0aCBydW5xZW11KHRlc3RpbWFnZSwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgTm93IHJlYWxseSB0ZXN0IGRlcGxveS10YXJnZXQKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1jICVzIHJvb3RAJXMnICUgKHRlc3RyZWNpcGUsIHFlbXUuaXApKQorICAgICAgICAgICAgIyBSdW4gYSB0ZXN0IGNvbW1hbmQgdG8gc2VlIGlmIGl0IHdhcyBpbnN0YWxsZWQgcHJvcGVybHkKKyAgICAgICAgICAgIHNzaGFyZ3MgPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3NzaCAlcyByb290QCVzICVzJyAlIChzc2hhcmdzLCBxZW11LmlwLCB0ZXN0Y29tbWFuZCkpCisgICAgICAgICAgICAjIENoZWNrIGlmIGl0IGRlcGxveWVkIGFsbCBvZiB0aGUgZmlsZXMgd2l0aCB0aGUgcmlnaHQgb3duZXJzaGlwL3Blcm1zCisgICAgICAgICAgICAjIEZpcnN0IGxvb2sgb24gdGhlIGhvc3QgLSBuZWVkIHRvIGRvIHRoaXMgdW5kZXIgcHNldWRvIHRvIGdldCB0aGUgY29ycmVjdCBvd25lcnNoaXAvcGVybXMKKyAgICAgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIGZha2Vyb290ZW52ID0gZ2V0X2JiX3ZhcignRkFLRVJPT1RFTlYnLCB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgZmFrZXJvb3RjbWQgPSBnZXRfYmJfdmFyKCdGQUtFUk9PVENNRCcsIHRlc3RyZWNpcGUpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJyVzICVzIGZpbmQgLiAtdHlwZSBmIC1leGVjIGxzIC1sIHt9IFw7JyAlIChmYWtlcm9vdGVudiwgZmFrZXJvb3RjbWQpLCBjd2Q9aW5zdGFsbGRpcikKKyAgICAgICAgICAgIGZpbGVsaXN0MSA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgICAgICMgTm93IGxvb2sgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgdGVtcGRpcjIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcjIpCisgICAgICAgICAgICB0bXBmaWxlbGlzdCA9IG9zLnBhdGguam9pbih0ZW1wZGlyMiwgJ2ZpbGVzLnR4dCcpCisgICAgICAgICAgICB3aXRoIG9wZW4odG1wZmlsZWxpc3QsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlbGlzdDE6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNwbGl0bGluZVstMV0gKyAnXG4nKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdjYXQgJXMgfCBzc2ggLXEgJXMgcm9vdEAlcyBcJ3hhcmdzIGxzIC1sXCcnICUgKHRtcGZpbGVsaXN0LCBzc2hhcmdzLCBxZW11LmlwKSkKKyAgICAgICAgICAgIGZpbGVsaXN0MiA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBmaWxlbGlzdDEuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBmaWxlbGlzdDIuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVsaXN0MSwgZmlsZWxpc3QyKQorICAgICAgICAgICAgIyBUZXN0IHVuZGVwbG95LXRhcmdldAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVuZGVwbG95LXRhcmdldCAtYyAlcyByb290QCVzJyAlICh0ZXN0cmVjaXBlLCBxZW11LmlwKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIDAsICd1bmRlcGxveS10YXJnZXQgZGlkIG5vdCByZW1vdmUgY29tbWFuZCBhcyBpdCBzaG91bGQgaGF2ZScpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2J1aWxkX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGRldnRvb2wgYnVpbGQtaW1hZ2UgcGx1Z2luIiIiCisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIGltYWdlKQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbicgJSBpbWFnZSkKKyAgICAgICAgIyBBZGQgdGFyZ2V0IGFuZCBuYXRpdmUgcmVjaXBlcyB0byB3b3Jrc3BhY2UKKyAgICAgICAgZm9yIHJlY2lwZSBpbiAoJ21kYWRtJywgJ3BhcnRlZC1uYXRpdmUnKToKKyAgICAgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgcmVjaXBlKQorICAgICAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAocmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBUcnkgdG8gYnVpbGQgaW1hZ2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkLWltYWdlICVzJyAlIGltYWdlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgMCwgJ2RldnRvb2wgYnVpbGQtaW1hZ2UgZmFpbGVkJykKKyAgICAgICAgIyBDaGVjayBpZiBpbWFnZS5iYmFwcGVuZCBoYXMgcmVxdWlyZWQgY29udGVudAorICAgICAgICBiYmFwcGVuZCA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgaW1hZ2UrJy5iYmFwcGVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShiYmFwcGVuZCksICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIE5PVEU6IG5hdGl2ZSByZWNpcGUgcGFydGVkLW5hdGl2ZSBzaG91bGQgbm90IGJlIGluIElNQUdFX0lOU1RBTExfYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG1kYWRtIlxuJyBpbiBvcGVuKGJiYXBwZW5kKS5yZWFkbGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgbWRhZG0iIG5vdCBmb3VuZCBpbiAlcycgJSBiYmFwcGVuZCkKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBncmFkZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2hlY2sgcGFyYW1ldGVycworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAtaCcpCisgICAgICAgIGZvciBwYXJhbSBpbiAncmVjaXBlbmFtZSBzcmN0cmVlIC0tdmVyc2lvbiAtViAtLWJyYW5jaCAtYiAtLWtlZXAtdGVtcCAtLW5vLXBhdGNoJy5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJhbSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBGb3IgdGhlIG1vbWVudCwgd2UgYXJlIHVzaW5nIGEgcmVhbCByZWNpcGUuCisgICAgICAgIHJlY2lwZT0nZGV2dG9vbC11cGdyYWRlJworICAgICAgICB2ZXJzaW9uPScwLjInCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHVwZ3JhZGUuIENvZGUgZG9lcyBub3QgY2hlY2sgaWYgbmV3IFBWIGlzIG9sZGVyIG9yIG5ld2VyIHRoYXQgY3VycmVudCBQViwgc28sIGl0IG1heSBiZSB0aGF0CisgICAgICAgICMgd2UgYXJlIGRvd25ncmFkaW5nIGluc3RlYWQgb2YgdXBncmFkaW5nLgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAlcyAlcyAtViAlcycgJSAocmVjaXBlLCB0ZW1wZGlyLCB2ZXJzaW9uKSkKKyAgICAgICAgIyBDaGVjayBpZiBzcmN0cmVlIGF0IGxlYXN0IGlzIHBvcHVsYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9zLmxpc3RkaXIodGVtcGRpcikpID4gMCwgJ3NjcnRyZWUgKCVzKSBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbmV3ICglcykgc291cmNlIGNvZGUnICUgKHRlbXBkaXIsIHZlcnNpb24pKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZm9sZGVyIGlzIHByZXNlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsJ3JlY2lwZXMnLHJlY2lwZSkpLCAnUmVjaXBlIGZvbGRlciBzaG91bGQgZXhpc3QnKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZmlsZSBpcyBwcmVzZW50CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCdyZWNpcGVzJyxyZWNpcGUsIiVzXyVzLmJiIiAlIChyZWNpcGUsdmVyc2lvbikpKSwgJ1JlY2lwZSBmb2xkZXIgc2hvdWxkIGV4aXN0JykKKyAgICAgICAgIyBDaGVjayBkZXZ0b29sIHN0YXR1cyBhbmQgbWFrZSBzdXJlIHJlY2lwZSBpcyBwcmVzZW50CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIGRldnRvb2wgcmVzZXQgcmVjaXBlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAlcyAtbicgJSByZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2ltYWdlZmVhdHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmZmM0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5CkBAIC0wLDAgKzEsMTY4IEBACitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworY2xhc3MgSW1hZ2VGZWF0dXJlcyhvZVNlbGZUZXN0KToKKworICAgIHRlc3RfdXNlciA9ICd0ZXN0ZXInCisgICAgcm9vdF91c2VyID0gJ3Jvb3QnCisKKyAgICBAdGVzdGNhc2UoMTEwNykKKyAgICBkZWYgdGVzdF9ub25fcm9vdF91c2VyX2Nhbl9jb25uZWN0X3ZpYV9zc2hfd2l0aG91dF9wYXNzd29yZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGlmIG5vbiByb290IHVzZXIgY2FuIGNvbm5lY3QgdmlhIHNzaCB3aXRob3V0IHBhc3N3b3JkCisgICAgICAgIEV4cGVjdGVkOiAxLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHJvb3QgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgMi4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyB0ZXN0ZXIgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0VYVFJBX0lNQUdFX0ZFQVRVUkVTID0gInNzaC1zZXJ2ZXItb3BlbnNzaCBlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciAlcyBmYWlsZWQgd2l0aCAlcycgJSAodXNlciwgb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxMTE1KQorICAgIGRlZiB0ZXN0X2FsbF91c2Vyc19jYW5fY29ubmVjdF92aWFfc3NoX3dpdGhvdXRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgYWxsIHVzZXJzIGNhbiBjb25uZWN0IHZpYSBzc2ggd2l0aG91dCBwYXNzd29yZAorICAgICAgICBFeHBlY3RlZDogMS4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyByb290IHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgTk9UIGJlIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAyLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHRlc3RlciB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAic3NoLXNlcnZlci1vcGVuc3NoIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgaWYgdXNlciA9PSAncm9vdCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdHVzLCAwLCAnc3NoIHRvIHVzZXIgcm9vdCB3YXMgYWxsb3dlZCB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSBiZWVuJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyIHRlc3RlciBmYWlsZWQgd2l0aCAlcycgJSBvdXRwdXQpCisKKworICAgIEB0ZXN0Y2FzZSgxMTE0KQorICAgIGRlZiB0ZXN0X3JwbV92ZXJzaW9uXzRfc3VwcG9ydF9vbl9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBycG0gdmVyc2lvbiA0IHN1cHBvcnQgb24gaW1hZ2UKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFJwbSB2ZXJzaW9uIG11c3QgYmUgNC54CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnUFJFRkVSUkVEX1ZFUlNJT05fcnBtID0gIjQuJSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1BSRUZFUlJFRF9WRVJTSU9OX3JwbS1uYXRpdmUgPSAiNC4lIlxuJworICAgICAgICAjIFVzZSBvcGVuc3NoIGluIElNQUdFX0lOU1RBTEwgaW5zdGVhZCBvZiBzc2gtc2VydmVyLW9wZW5zc2ggaW4gRVhUUkFfSU1BR0VfRkVBVFVSRVMgYXMgYSB3b3JrYXJvdW5kIGZvciBidWcgODA0NworICAgICAgICBmZWF0dXJlcyArPSAnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG9wZW5zc2giXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIHBhY2thZ2UtbWFuYWdlbWVudCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1JQTVJPT1RGU0RFUEVORFNfcmVtb3ZlID0gInJwbXJlc29sdmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiJworCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgICMgQ2hlY2sgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHJwbSBpcyBjb3JyZWN0CisgICAgICAgIG5hdGl2ZV9iaW5kaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQob3MucGF0aC5qb2luKG5hdGl2ZV9iaW5kaXIsICdycG0nKSArICcgLS12ZXJzaW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndmVyc2lvbiA0LicsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayBtYW5pZmVzdCBmb3IgdGhlIHJwbSBwYWNrYWdlCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBpbWduYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWduYW1lKSArICcubWFuaWZlc3QnLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdGxpbmUpID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcnBtX3ZlcnNpb24gPSBzcGxpdGxpbmVbMl0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lWzBdID09ICdycG0nOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJwbV92ZXJzaW9uLnN0YXJ0c3dpdGgoJzQuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdycG0gdmVyc2lvbiAlcyBmb3VuZCBpbiBpbWFnZSwgZXhwZWN0ZWQgNC54JyAlIHJwbV92ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBycG0gcGFja2FnZSBmb3VuZCBpbiBpbWFnZScpCisKKyAgICAgICAgIyBOb3cgZG8gYSBjb3VwbGUgb2YgcnVudGltZSB0ZXN0cworICAgICAgICB3aXRoIHJ1bnFlbXUoImNvcmUtaW1hZ2UtbWluaW1hbCIsIHNlbGYpIGFzIHFlbXU6CisgICAgICAgICAgICBjb21tYW5kID0gInJwbSAtLXZlcnNpb24iCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuKGNvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBydW4gY29tbWFuZCAiJXMiOiAlcycgJSAoY29tbWFuZCwgb3V0cHV0KSkKKyAgICAgICAgICAgIGZvdW5kX3JwbV92ZXJzaW9uID0gb3V0cHV0LnN0cmlwKCkKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHJldHJpZXZlZCBycG0gdmVyc2lvbiBpcyB0aGUgZXhwZWN0ZWQgb25lCisgICAgICAgICAgICBpZiBycG1fdmVyc2lvbiBub3QgaW4gZm91bmRfcnBtX3ZlcnNpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSUE0gdmVyc2lvbiBpcyBub3Qge30sIGZvdW5kIGluc3RlYWQge30uJy5mb3JtYXQocnBtX3ZlcnNpb24sIGZvdW5kX3JwbV92ZXJzaW9uKSkKKworICAgICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIHJwbSBkYXRhYmFzZSBpcyB0aGVyZSBhbmQgd29ya2luZworICAgICAgICAgICAgY29tbWFuZCA9ICJycG0gLXFhIgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bihjb21tYW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNvbW1hbmQsIG91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwYWNrYWdlZ3JvdXAtY29yZS1ib290Jywgb3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYnVzeWJveCcsIG91dHB1dCkKKworCisgICAgQHRlc3RjYXNlKDExMTYpCisgICAgZGVmIHRlc3RfY2x1dHRlcl9pbWFnZV9jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgY2x1dHRlciBpbWFnZSBjYW4gYmUgYnVpbHQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIGNvcmUtaW1hZ2UtY2x1dHRlciBjYW4gYmUgYnVpbHQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1jbHV0dGVyCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtY2x1dHRlcicpCisKKyAgICBAdGVzdGNhc2UoMTExNykKKyAgICBkZWYgdGVzdF93YXlsYW5kX3N1cHBvcnRfaW5faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgV2F5bGFuZCBzdXBwb3J0IGluIGltYWdlCisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBXYXlsYW5kIGltYWdlIGNhbiBiZSBidWlsZAorICAgICAgICAgICAgICAgICAgICAgMi4gV2F5bGFuZCBmZWF0dXJlIGNhbiBiZSBpbnN0YWxsZWQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB3YXlsYW5kIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMICs9ICJ3YXlsYW5kIHdlc3RvbiInCisKKyAgICAgICAgIyBBcHBlbmQgJ2ZlYXR1cmVzJyB0byBsb2NhbC5jb25mCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS13ZXN0b24KKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS13ZXN0b24nKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGF5ZXJhcHBlbmQucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvbGF5ZXJhcHBlbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyYTZjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9sYXllcmFwcGVuZC5weQpAQCAtMCwwICsxLDk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQorCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJ1aWxkaGlzdG9yeSBpbXBvcnQgQnVpbGRoaXN0b3J5QmFzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMYXllckFwcGVuZFRlc3RzKG9lU2VsZlRlc3QpOgorICAgIGxheWVyY29uZiA9ICIiIgorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFwcGVuZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgYSByZWNpcGVzIGRpcmVjdG9yeSwgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMqLyouYmIgJHtMQVlFUkRJUn0vcmVjaXBlcyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJtZXRhLWxheWVySU5UIgorQkJGSUxFX1BBVFRFUk5fbWV0YS1sYXllcklOVCA6PSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9tZXRhLWxheWVySU5UID0gIjYiCisiIiIKKyAgICByZWNpcGUgPSAiIiIKK0xJQ0VOU0U9IkNMT1NFRCIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK3B5dGhvbiBkb19idWlsZCgpIHsKKyAgICBiYi5wbGFpbignQnVpbGRpbmcgLi4uJykKK30KK2FkZHRhc2sgYnVpbGQKKyIiIgorICAgIGFwcGVuZCA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2FwcGVuZHRlc3QudHh0IgorCitzeXNyb290X3N0YWdlX2FsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9hcHBlbmR0ZXN0LnR4dCAke1NZU1JPT1RfREVTVERJUn0vCit9CisKKyIiIgorCisgICAgYXBwZW5kMiA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovL2FwcGVuZHRlc3QudHh0IgorIiIiCisgICAgbGF5ZXJhcHBlbmQgPSAiQkJMQVlFUlMgKz0gXCJDT1JFQkFTRS9tZXRhLWxheWVydGVzdDAgQ09SRUJBU0UvbWV0YS1sYXllcnRlc3QxIENPUkVCQVNFL21ldGEtbGF5ZXJ0ZXN0MlwiIgorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorCisgICAgQHRlc3RjYXNlKDExOTYpCisgICAgZGVmIHRlc3RfbGF5ZXJfYXBwZW5kcyhzZWxmKToKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCJDT1JFQkFTRSIpCisgICAgICAgIHN0YWdpbmdkaXIgPSBnZXRfYmJfdmFyKCJTVEFHSU5HX0RJUl9UQVJHRVQiKQorICAgICAgICBmb3IgbCBpbiBbIjAiLCAiMSIsICIyIl06CisgICAgICAgICAgICBsYXllciA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgIm1ldGEtbGF5ZXJ0ZXN0IiArIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGxheWVyKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL2NvbmYiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9jb25mL2xheWVyLmNvbmYiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmxheWVyY29uZi5yZXBsYWNlKCJJTlQiLCBsKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QiKQorICAgICAgICAgICAgaWYgbCA9PSAiMCI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYucmVjaXBlKQorICAgICAgICAgICAgZWxpZiBsID09ICIxIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmJhcHBlbmQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hcHBlbmQpCisgICAgICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QiKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiTGF5ZXIgMSB0ZXN0IikKKyAgICAgICAgICAgIGVsaWYgbCA9PSAiMiI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiYXBwZW5kIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXBwZW5kMikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdCIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsYXllcikKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisgICAgICAgIG9zLnJlbW92ZShjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDEgdGVzdCIpCisgICAgICAgIHdpdGggb3Blbihjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzYjlhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgYml0YmFrZQorZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMaWNlbnNlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICAjIFZlcmlmeSB0aGF0IGNoYW5naW5nIGEgbGljZW5zZSBmaWxlIHRoYXQgaGFzIGFuIGFic29sdXRlIHBhdGggY2F1c2VzCisgICAgIyB0aGUgbGljZW5zZSBxYSB0byBmYWlsIGR1ZSB0byBhIG1pc21hdGNoZWQgbWQ1c3VtLgorICAgIEB0ZXN0Y2FzZSgxMTk3KQorICAgIGRlZiB0ZXN0X25vbm1hdGNoaW5nX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBiaXRiYWtlX2NtZCA9ICctYyBjb25maWd1cmUgZW1wdHl0ZXN0JworICAgICAgICBlcnJvcl9tc2cgPSAnRVJST1I6IGVtcHR5dGVzdDogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMgOGQ3NzdmMzg1ZDNkZmVjODgxNWQyMGY3NDk2MDI2ZGMnCisKKyAgICAgICAgbGljX2ZpbGUsIGxpY19wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIG9zLmNsb3NlKGxpY19maWxlKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGxpY19wYXRoKQorCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdlbXB0eXRlc3QnLCAnSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9yZWNpcGVpbmMoJ2VtcHR5dGVzdCcsICdMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8lczttZDU9ZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiJyAlIGxpY19wYXRoKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKGJpdGJha2VfY21kKQorCisgICAgICAgIHdpdGggb3BlbihsaWNfcGF0aCwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCisKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBpZiBlcnJvcl9tc2cgbm90IGluIHJlc3VsdC5vdXRwdXQ6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihyZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lc2NyaXB0cy5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZDUwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IENvbW1hbmQsIHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBUZXN0U2NyaXB0cyhvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgzMDApCisgICAgZGVmIHRlc3RfY2xlYW51cF93b3JrZGlyKHNlbGYpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorICAgICAgICBvbGRfdmVyc2lvbl9yZWNpcGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiJykKKyAgICAgICAgb2xkX3ZlcnNpb24gPSAnMS4zLjEyJworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIGd6aXAiKQorICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIC1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnZXRfYmJfdmFyKCdXT1JLRElSJywgJ2d6aXAnKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgaW5pdGlhbF9jb250ZW50cyA9IG9zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluaXRpYWxfY29udGVudHMgPSBbXQorCisgICAgICAgIGJpdGJha2UoJ2d6aXAnKQorICAgICAgICBpbnRlcm1lZGlhcnlfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgIGJpdGJha2UoIi1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgcnVuQ21kKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICByZW1haW5pbmdfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisKKyAgICAgICAgZXhwZWN0ZWRfY29udGVudHMgPSBbeCBmb3IgeCBpbiBpbnRlcm1lZGlhcnlfY29udGVudHMgaWYgeCBub3QgaW4gaW5pdGlhbF9jb250ZW50c10KKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFt4IGZvciB4IGluIHJlbWFpbmluZ19jb250ZW50cyBpZiB4IG5vdCBpbiBleHBlY3RlZF9jb250ZW50c10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfbm90X2V4cGVjdGVkLCBtc2c9Ik5vdCBhbGwgbmVjZXNzYXJ5IGNvbnRlbnQgaGFzIGJlZW4gZGVsZXRlZCBmcm9tICVzOiAlcyIgJSAocGF0aCwgJywgJy5qb2luKG1hcChzdHIsIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQpKSkpCisgICAgICAgIGV4cGVjdGVkX25vdF9yZW1haW5pbmcgPSBbeCBmb3IgeCBpbiBleHBlY3RlZF9jb250ZW50cyBpZiB4IG5vdCBpbiByZW1haW5pbmdfY29udGVudHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X3JlbWFpbmluZywgbXNnPSJUaGUgc2NyaXB0IHJlbW92ZWQgZXh0cmEgY29udGVudHMgZnJvbSAlczogJXMiICUgKHBhdGgsICcsICcuam9pbihtYXAoc3RyLCBleHBlY3RlZF9ub3RfcmVtYWluaW5nKSkpKQorCitjbGFzcyBCdWlsZGhpc3RvcnlEaWZmVGVzdHMoQnVpbGRoaXN0b3J5QmFzZSk6CisKKyAgICBAdGVzdGNhc2UoMjk1KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9kaWZmKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMVwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPVRydWUpCisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjBcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPVRydWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiYnVpbGRoaXN0b3J5LWRpZmYgLXAgJXMiICUgZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKQorICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSAnUFIgY2hhbmdlZCBmcm9tICJyMSIgdG8gInIwIicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX291dHB1dCBpbiByZXN1bHQub3V0cHV0LCBtc2c9IkRpZCBub3QgZmluZCBleHBlY3RlZCBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9wa2dkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOGIwM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQpAQCAtMCwwICsxLDIyNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBmbm1hdGNoCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIE9lUGtnZGF0YVV0aWxUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCdnbGliYyBidXN5Ym94IHpsaWIgYmFzaCcpCisKKyAgICBAdGVzdGNhc2UoMTIwMykKKyAgICBkZWYgdGVzdF9sb29rdXBfcGtnKHNlbGYpOgorICAgICAgICAjIEZvcndhcmQgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAiZ2xpYmMgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNlxuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgemxpYi1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJ6LWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorICAgICAgICAjIFJldmVyc2UgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAtciAibGliYzYgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliY1xuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbGliei1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliLWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorCisgICAgQHRlc3RjYXNlKDEyMDUpCisgICAgZGVmIHRlc3RfcmVhZF92YWx1ZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQTiBsaWJ6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCByZWFkLXZhbHVlIFBLR1NJWkUgYmFzaCcpCisgICAgICAgIHBrZ3NpemUgPSBpbnQocmVzdWx0Lm91dHB1dC5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocGtnc2l6ZSwgMSwgIlNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExOTgpCisgICAgZGVmIHRlc3RfZmluZF9wYXRoKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2xpYi9saWJjLnNvLjYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliYzogL2xpYi9saWJjLnNvLjYnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnYmFzaDogL2Jpbi9iYXNoJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC9ub3QvZXhpc3QnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBwcm9kdWNpbmcgcGF0aCAvbm90L2V4aXN0JykKKworICAgIEB0ZXN0Y2FzZSgxMjA0KQorICAgIGRlZiB0ZXN0X2xvb2t1cF9yZWNpcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgImxpYmM2LXN0YXRpY2RldiBidXN5Ym94IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2dsaWJjXG5idXN5Ym94JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXJlY2lwZSBsaWJ6LWRiZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKKworICAgIEB0ZXN0Y2FzZSgxMjAyKQorICAgIGRlZiB0ZXN0X2xpc3RfcGtncyhzZWxmKToKKyAgICAgICAgIyBObyBhcmd1bWVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzJykKKyAgICAgICAgcGtnbGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnbGliYy11dGlscycsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBObyBwa2dzcGVjLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcicpCisgICAgICAgIHBrZ2xpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliYzYtdXRpbHMnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBrZ2xpc3QucmVtb3ZlKCd6bGliLXB0ZXN0JykgIyBpbiBjYXNlIHB0ZXN0IGlzIGRpc2FibGVkCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYicsICd6bGliLWRiZycsICd6bGliLWRldicsICd6bGliLWRvYycsICd6bGliLXN0YXRpY2RldiddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnbGlzdC5yZW1vdmUoJ2xpYnotcHRlc3QnKSAjIGluIGNhc2UgcHRlc3QgaXMgZGlzYWJsZWQKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYycsICdsaWJ6LXN0YXRpY2RldicsICdsaWJ6MSddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXUnKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1sb2NhbGUnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgdW5wYWNrYWdlZCwgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtdSAtcicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCBwa2dzcGVjCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliICIqLWQqIicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYi1kYmcnLCAnemxpYi1kZXYnLCAnemxpYi1kb2MnXSwgIlBhY2thZ2VzIGxpc3RlZDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHBrZ3NwZWMsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXIgIiotZCoiJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYyddLCAiUGFja2FnZXMgbGlzdGVkOiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEyMDEpCisgICAgZGVmIHRlc3RfbGlzdF9wa2dfZmlsZXMoc2VsZik6CisgICAgICAgIGRlZiBzcGxpdG91dHB1dChvdXRwdXQpOgorICAgICAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICAgICAgY3VycGtnID0gTm9uZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1x0Jyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdXJwa2csICdVbmV4cGVjdGVkIG5vbi1wYWNrYWdlIGxpbmU6XG4lcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUucnN0cmlwKCkuZW5kc3dpdGgoJzonKSwgJ0ludmFsaWQgcGFja2FnZSBsaW5lIGluIG91dHB1dDpcbiVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGN1cnBrZyA9IGxpbmUuc3BsaXQoJzonKVswXQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddID0gW10KKyAgICAgICAgICAgIHJldHVybiBmaWxlcworICAgICAgICBiYXNlX2xpYmRpciA9IGdldF9iYl92YXIoJ2Jhc2VfbGliZGlyJykKKyAgICAgICAgbGliZGlyID0gZ2V0X2JiX3ZhcignbGliZGlyJykKKyAgICAgICAgaW5jbHVkZWRpciA9IGdldF9iYl92YXIoJ2luY2x1ZGVkaXInKQorICAgICAgICBtYW5kaXIgPSBnZXRfYmJfdmFyKCdtYW5kaXInKQorICAgICAgICAjIFRlc3QgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyB6bGliLWRldiB6bGliLWRvYycpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgICMgVGVzdCBydW50aW1lIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtciBsaWJ6MSBsaWJ6LWRldicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihmaWxlc1snbGliejEnXSksIDEpCisgICAgICAgIGxpYnNwZWMgPSBvcy5wYXRoLmpvaW4oYmFzZV9saWJkaXIsICdsaWJ6LnNvLjEuKicpCisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVzWydsaWJ6MSddOgorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmaWxlaXRlbSwgbGlic3BlYyk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnQ291bGQgbm90IGZpbmQgemxpYiBsaWJyYXJ5IGZpbGUgJXMgaW4gbGliejEgcGFja2FnZSBmaWxlIGxpc3Q6ICVzJyAlIChsaWJzcGVjLCBmaWxlc1snbGliejEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICAjIChpZ25vcmUgcHRlc3QsIG1pZ2h0IG5vdCBiZSB0aGVyZSBkZXBlbmRpbmcgb24gY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWyd6bGliLXN0YXRpY2RldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXInKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUsIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtdScpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snemxpYi1zdGF0aWNkZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZSwgcnVudGltZSwgdW5wYWNrYWdlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC1yIC11JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ2xpYnotZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snbGliei1zdGF0aWNkZXYnXSkKKworICAgIEB0ZXN0Y2FzZSgxMjAwKQorICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncGtnZGF0YXFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBwa2dsaXN0ZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAncGtnbGlzdCcpCisgICAgICAgIHdpdGggb3Blbihwa2dsaXN0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnbGliYzZcbicpCisgICAgICAgICAgICBmLndyaXRlKCdsaWJ6MVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2J1c3lib3hcbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotZGV2IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgZGVzaXJlZHJlc3VsdCA9IFsnbGliYzYtZGV2JywgJ2xpYnotZGV2JywgJ2J1c3lib3gtZGV2J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKSwgc29ydGVkKGRlc2lyZWRyZXN1bHQpKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIG5vdCBlcnJvciAoYmVjYXVzZSB3aGVuIHdlIHVzZSB0aGlzIGR1cmluZyByb290ZnMgY29uc3RydWN0aW9uLCBzb21ldGltZXMgdGhlIGNvbXBsZW1lbnRhcnkgcGFja2FnZSB3b24ndCBleGlzdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZ2xvYiAlcyAiKi1ub25leGlzdGVudCInICUgcGtnbGlzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJycpCisgICAgICAgICMgVGVzdCBleGNsdWRlIG9wdGlvbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLWRldiAqLWRiZyIgLXggIl5saWJ6IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgcmVzdWx0bGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJ6LWRldicsIHJlc3VsdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotZGJnJywgcmVzdWx0bGlzdCkKKworICAgIEB0ZXN0Y2FzZSgxMjA2KQorICAgIGRlZiB0ZXN0X3NwZWNpZnlfcGtnZGF0YWRpcihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgLXAgJXMgbG9va3VwLXBrZyBnbGliYycgJSBnZXRfYmJfdmFyKCdQS0dEQVRBX0RJUicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNicpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcHJzZXJ2aWNlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3ZmJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weQpAQCAtMCwwICsxLDEyMSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBkYXRldGltZQorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlUHJUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIGRlZiBnZXRfcHJfdmVyc2lvbihzZWxmLCBwYWNrYWdlX25hbWUpOgorICAgICAgICBwa2dkYXRhX2RpciA9IGdldF9iYl92YXIoJ1BLR0RBVEFfRElSJykKKyAgICAgICAgcGFja2FnZV9kYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgcGFja2FnZV9uYW1lKQorICAgICAgICBwYWNrYWdlX2RhdGEgPSBmdG9vbHMucmVhZF9maWxlKHBhY2thZ2VfZGF0YV9maWxlKQorICAgICAgICBmaW5kX3ByID0gcmUuc2VhcmNoKCJQS0dSOiByWzAtOV0rXC4oWzAtOV0rKSIsIHBhY2thZ2VfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfcHIsICJObyBQS0cgcmV2aXNpb24gZm91bmQgaW4gJXMiICUgcGFja2FnZV9kYXRhX2ZpbGUpCisgICAgICAgIHJldHVybiBpbnQoZmluZF9wci5ncm91cCgxKSkKKworICAgIGRlZiBnZXRfdGFza19zdGFtcChzZWxmLCBwYWNrYWdlX25hbWUsIHJlY2lwZV90YXNrKToKKyAgICAgICAgc3RhbXBkYXRhID0gZ2V0X2JiX3ZhcignU1RBTVAnLCB0YXJnZXQ9cGFja2FnZV9uYW1lKS5zcGxpdCgnLycpCisgICAgICAgIHByZWZpeCA9IHN0YW1wZGF0YVstMV0KKyAgICAgICAgcGFja2FnZV9zdGFtcHNfcGF0aCA9ICIvIi5qb2luKHN0YW1wZGF0YVs6LTFdKQorICAgICAgICBzdGFtcHMgPSBbXQorICAgICAgICBmb3Igc3RhbXAgaW4gb3MubGlzdGRpcihwYWNrYWdlX3N0YW1wc19wYXRoKToKKyAgICAgICAgICAgIGZpbmRfc3RhbXAgPSByZS5tYXRjaCgiJXNcLiVzXC4oW2EtejAtOV17MzJ9KSIgJSAocHJlZml4LCByZWNpcGVfdGFzayksIHN0YW1wKQorICAgICAgICAgICAgaWYgZmluZF9zdGFtcDoKKyAgICAgICAgICAgICAgICBzdGFtcHMuYXBwZW5kKGZpbmRfc3RhbXAuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN0YW1wcykgPT0gMCwgbXNnPSJDb3VuZCBub3QgZmluZCBzdGFtcCBmb3IgdGFzayAlcyBmb3IgcmVjaXBlICVzIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3RhbXBzKSA+IDEsIG1zZz0iRm91bmQgbXVsdGlwbGUgJXMgc3RhbXBzIGZvciB0aGUgJXMgcmVjaXBlIGluIHRoZSAlcyBkaXJlY3RvcnkuIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3N0YW1wc19wYXRoKSkKKyAgICAgICAgcmV0dXJuIHN0cihzdGFtcHNbMF0pCisKKyAgICBkZWYgaW5jcmVtZW50X3BhY2thZ2VfcHIoc2VsZiwgcGFja2FnZV9uYW1lKToKKyAgICAgICAgaW5jX2RhdGEgPSAiZG9fcGFja2FnZV9hcHBlbmQoKSB7XG5iYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3Rlc3RfcHJzZXJ2JywgZClcbn1cbmRvX3Rlc3RfcHJzZXJ2KCkge1xuZWNobyBcIlRoZSBjdXJyZW50IGRhdGUgaXM6ICVzXCJcbn0iICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMocGFja2FnZV9uYW1lLCBpbmNfZGF0YSkKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSAlcyIgJSBwYWNrYWdlX25hbWUpCisgICAgICAgIHJlcyA9IGJpdGJha2UocGFja2FnZV9uYW1lLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYyhwYWNrYWdlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiTk9URTogU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZSIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisKKyAgICBkZWYgY29uZmlnX3ByX3Rlc3RzKHNlbGYsIHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlPSdycG0nLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIGNvbmZpZ19wYWNrYWdlX2RhdGEgPSAnUEFDS0FHRV9DTEFTU0VTID0gInBhY2thZ2VfJXMiJyAlIHBhY2thZ2VfdHlwZQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWdfcGFja2FnZV9kYXRhKQorICAgICAgICBjb25maWdfc2VydmVyX2RhdGEgPSAnUFJTRVJWX0hPU1QgPSAiJXMiJyAlIHByX3NvY2tldAorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NlcnZlcl9kYXRhKQorCisgICAgZGVmIHJ1bl90ZXN0X3ByX3NlcnZpY2Uoc2VsZiwgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3R5cGU9J3JwbScsIHRyYWNrX3Rhc2s9J2RvX3BhY2thZ2UnLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIHNlbGYuY29uZmlnX3ByX3Rlc3RzKHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlLCBwcl9zb2NrZXQpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc3RhbXBfMSA9IHNlbGYuZ2V0X3Rhc2tfc3RhbXAocGFja2FnZV9uYW1lLCB0cmFja190YXNrKQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8yID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisgICAgICAgIHN0YW1wXzIgPSBzZWxmLmdldF90YXNrX3N0YW1wKHBhY2thZ2VfbmFtZSwgdHJhY2tfdGFzaykKKworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlICVzIiAlIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wXzEgIT0gc3RhbXBfMiwgIkRpZmZlcmVudCBwa2cgcmV2LiBidXQgc2FtZSBzdGFtcDogJXMiICUgc3RhbXBfMSkKKworICAgIGRlZiBydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVwbGFjZV9jdXJyZW50X2RiPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKworICAgICAgICBleHBvcnRlZF9kYl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdleHBvcnQuaW5jJykKKyAgICAgICAgZXhwb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cG9ydF9yZXN1bHQuc3RhdHVzLCAwLCBtc2c9IlBSIFNlcnZpY2UgZGF0YWJhc2UgZXhwb3J0IGZhaWxlZDogJXMiICUgZXhwb3J0X3Jlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgaWYgcmVwbGFjZV9jdXJyZW50X2RiOgorICAgICAgICAgICAgY3VycmVudF9kYl9wYXRoID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ1BFUlNJU1RFTlRfRElSJyksICdwcnNlcnYuc3FsaXRlMycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY3VycmVudF9kYl9wYXRoKSwgbXNnPSJQYXRoIHRvIGN1cnJlbnQgUFIgU2VydmljZSBkYXRhYmFzZSBpcyBpbnZhbGlkOiAlcyIgJSBjdXJyZW50X2RiX3BhdGgpCisgICAgICAgICAgICBvcy5yZW1vdmUoY3VycmVudF9kYl9wYXRoKQorCisgICAgICAgIGltcG9ydF9yZXN1bHQgPSBydW5DbWQoImJpdGJha2UtcHJzZXJ2LXRvb2wgaW1wb3J0ICVzIiAlIGV4cG9ydGVkX2RiX3BhdGgsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgb3MucmVtb3ZlKGV4cG9ydGVkX2RiX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3Jlc3VsdC5zdGF0dXMsIDAsIG1zZz0iUFIgU2VydmljZSBkYXRhYmFzZSBpbXBvcnQgZmFpbGVkOiAlcyIgJSBpbXBvcnRfcmVzdWx0Lm91dHB1dCkKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgJXMiICUgcGFja2FnZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJfMiAtIHByXzEgPT0gMSwgIlN0ZXAgYmV0d2VlbiBzYW1lIHBrZy4gcmV2aXNpb24gaXMgZ3JlYXRlciB0aGFuIDEiKQorCisgICAgQHRlc3RjYXNlKDkzMCkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X3JlcGxhY2VfZGIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfZXhwb3J0X2ltcG9ydCgnbTQnKQorCisgICAgQHRlc3RjYXNlKDkzMSkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X292ZXJyaWRlX2RiKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX2V4cG9ydF9pbXBvcnQoJ200JywgcmVwbGFjZV9jdXJyZW50X2RiPUZhbHNlKQorCisgICAgQHRlc3RjYXNlKDkzMikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2RlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdycG0nLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTM0KQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfZGViX2FyY2hfZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ2RlYicsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzMpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9pcGtfYXJjaF9kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNSkKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAncnBtJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNykKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2RlYl9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnZGViJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2lwa19hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3QvcmVjaXBldG9vbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRhZDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKQEAgLTAsMCArMSw1NTQgQEAKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVybHBhcnNlCisKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCitmcm9tIG9lcWEuc2VsZnRlc3QgaW1wb3J0IGRldnRvb2wKKworCit0ZW1wbGF5ZXJkaXIgPSBOb25lCisKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgZ2xvYmFsIHRlbXBsYXllcmRpcgorICAgIHRlbXBsYXllcmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29scWEnKQorICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgJ3NlbGZ0ZXN0cmVjaXBldG9vbCcpCisgICAgcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyKQorCisKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgIHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgIHJ1bkNtZCgncm0gLXJmICVzJyAlIHRlbXBsYXllcmRpcikKKworCitjbGFzcyBSZWNpcGV0b29sQmFzZShkZXZ0b29sLkRldnRvb2xCYXNlKToKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wbGF5ZXJkaXIgPSB0ZW1wbGF5ZXJkaXIKKyAgICAgICAgc2VsZi50ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50ZW1wZGlyKQorICAgICAgICBzZWxmLnRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZVxuJykKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICBydW5DbWQoJ3JtIC1yZiAlcy9yZWNpcGVzLSonICUgc2VsZi50ZW1wbGF5ZXJkaXIpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChzZWxmLCBjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXM9Tm9uZSk6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayB0aGUgYmJhcHBlbmQgd2FzIGNyZWF0ZWQgYW5kIGFwcGxpZXMgcHJvcGVybHkKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBzZWxmLnRlbXBsYXllcmRpcikKKworICAgICAgICAjIENoZWNrIHRoZSBiYmFwcGVuZCBjb250ZW50cworICAgICAgICBpZiBleHBlY3RlZGxpbmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSwgIkV4cGVjdGVkIGxpbmVzIGFyZSBub3QgcHJlc2VudCBpbiAlcyIgJSBiYmFwcGVuZGZpbGUpCisKKyAgICAgICAgIyBDaGVjayBmaWxlIHdhcyBjb3BpZWQKKyAgICAgICAgZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJiYXBwZW5kZmlsZSksIHRlc3RyZWNpcGUpCisgICAgICAgIGZvciBleHBlY3RlZGZpbGUgaW4gZXhwZWN0ZWRmaWxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGV4cGVjdGVkZmlsZSkpLCAnRXhwZWN0ZWQgZmlsZSAlcyB0byBiZSBjb3BpZWQgbmV4dCB0byBiYmFwcGVuZCwgYnV0IGl0IHdhc25cJ3QnICUgZXhwZWN0ZWRmaWxlKQorCisgICAgICAgICMgQ2hlY2sgbm8gb3RoZXIgZmlsZXMgY3JlYXRlZAorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhmaWxlc2Rpcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBjcmVhdGVkZmlsZXMuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIGZpbGVzZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvcnRlZChjcmVhdGVkZmlsZXMpLCBzb3J0ZWQoZXhwZWN0ZWRmaWxlcykpCisKKyAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZSwgcmVzdWx0Lm91dHB1dAorCisKK2NsYXNzIFJlY2lwZXRvb2xUZXN0cyhSZWNpcGV0b29sQmFzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBzaGxpYnMvcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCctYyBwYWNrYWdlZGF0YSBiYXNlLWZpbGVzIGNvcmV1dGlscyBidXN5Ym94IHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAjIFNob3VsZG4ndCBsZWF2ZSBhbnkgdHJhY2VzIG9mIHRoaXMgYXJ0aWZpY2lhbCByZWNpcGUgYmVoaW5kCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuc3N0YXRlIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoc2VsZiwgZGVzdGZpbGUsIG5ld2ZpbGUsIGNoZWNrZXJyb3IpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnQ29tbWFuZCAiJXMiIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgZGlkblwndCcgJSBjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBlcnJvcnN0ciBpbiBjaGVja2Vycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlcnJvcnN0ciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTc3KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdiYXNlLWZpbGVzJywgJy9ldGMvbW90ZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ21vdGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODMpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ludmFsaWQoc2VsZik6CisgICAgICAgICMgVGVzdCBzb21lIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGVycm9yCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy9wYXNzd2QnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3Bhc3N3ZCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnLCAndXNlcmFkZCcsICdleHRyYXVzZXJzJ10pCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy90aW1lc3RhbXAnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3RpbWVzdGFtcCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnXSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZGV2L2NvbnNvbGUnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZGV2L2NvbnNvbGUgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyB0b29sJ10pCisKKyAgICBAdGVzdGNhc2UoMTE3NikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWx0ZXJuYXRpdmVzKHNlbGYpOgorICAgICAgICAjIE5vdyB0cnkgd2l0aCBhIGZpbGUgd2Uga25vdyBzaG91bGQgYmUgYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgIyAodGhpcyBpcyB2ZXJ5IG11Y2ggYSBmYWtlIGV4YW1wbGUsIGJ1dCBvbmUgd2Uga25vdyBpcyByZWxpYWJseSBhbiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvYmluL2xzJywgc2VsZi50ZXN0ZmlsZSwgWydFUlJPUjogRmlsZSAvYmluL2xzIGlzIGFuIGFsdGVybmF0aXZlIHBvc3NpYmx5IHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVjaXBlczonLCAnY29yZXV0aWxzJywgJ2J1c3lib3gnXSkKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCdDT1JFQkFTRScpCisgICAgICAgICMgTmVlZCBhIHRlc3QgZmlsZSAtIHNob3VsZCBiZSBleGVjdXRhYmxlCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly8lcyJcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnY29yZXV0aWxzJywgJy9iaW4vbHMnLCB0ZXN0ZmlsZTIsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgTm93IHRyeSBiYmFwcGVuZGluZyB0aGUgc2FtZSBmaWxlIGFnYWluLCBjb250ZW50cyBzaG91bGQgbm90IGNoYW5nZQorICAgICAgICBiYmFwcGVuZGZpbGUsIF8gPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdjb3JldXRpbHMnLCAnL2Jpbi9scycsIHNlbGYudGVzdGZpbGUsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgQnV0IGZpbGUgc2hvdWxkIGhhdmUKKyAgICAgICAgY29waWVkZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgJ2NvcmV1dGlscycsIHRlc3RmaWxlMm5hbWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGlmZiAtcSAlcyAlcycgJSAodGVzdGZpbGUyLCBjb3BpZWRmaWxlKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdOZXcgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBidXQgd2FzIG5vdCAlcycgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNzgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2JpbmFyeShzZWxmKToKKyAgICAgICAgIyBUcnkgYXBwZW5kaW5nIGEgYmluYXJ5IGZpbGUKKyAgICAgICAgIyAvYmluL2xzIGNhbiBiZSBhIHN5bWxpbmsgdG8gL3Vzci9iaW4vbHMKKyAgICAgICAgbHMgPSBvcy5wYXRoLnJlYWxwYXRoKCIvYmluL2xzIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2Jpbi9scyAlcyAtciBjb3JldXRpbHMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBscykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6ICcsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGEgYmluYXJ5JywgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTczKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGQoc2VsZik6CisgICAgICAgIGNvcmViYXNlID0gZ2V0X2JiX3ZhcignQ09SRUJBU0UnKQorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zb21ldGhpbmcnLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgIyBUcnkgYWRkaW5nIGFub3RoZXIgZmlsZSwgdGhpcyB0aW1lIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBpcyBleGVjdXRhYmxlCisgICAgICAgICMgKHNvIHdlJ3JlIHRlc3RpbmcgdGhhdCwgcGx1cyBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgYmJhcHBlbmQpCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSBcXFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZmlsZTovLyVzIFxcXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc29tZXRoaW5nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7ZGF0YWRpcn0vc2NyaXB0bmFtZVxuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zY3JpcHRuYW1lJywgdGVzdGZpbGUyLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnLCB0ZXN0ZmlsZTJuYW1lXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGRfYmluZGlyKHNlbGYpOgorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUsIHRoaXMgdGltZSB0byBhIGxvY2F0aW9uIHN1Y2ggdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGV4ZWN1dGFibGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2JpbmRpcn0vc2VsZnRlc3QtcmVjaXBldG9vbC10ZXN0YmluXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3IvYmluL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtdGVzdGJpbicsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE3NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkX21hY2hpbmUoc2VsZik6CisgICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZSwgdGhpcyB0aW1lIHRvIGEgbG9jYXRpb24gc3VjaCB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgZXhlY3V0YWJsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklfYXBwZW5kX215bWFjaGluZSA9ICIgZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZF9teW1hY2hpbmUoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NvbWV0aGluZycsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlIC1tIG15bWFjaGluZScsIGV4cGVjdGVkbGluZXMsIFsnbXltYWNoaW5lL3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9vcmlnKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhbmQgaW4gZG9faW5zdGFsbCB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTkxKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV90b2RpcihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYW5kIGluIGRvX2luc3RhbGwgd2l0aCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgcmF0aGVyIHRoYW4gZmlsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpcicsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcmVuYW1lZChzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXJlbmFtZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydmaWxlMSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE5MCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3ViZGlyKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBpbiBhIHN1YmRpcgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXInLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3JjX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFzIGEgZ2xvYgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGVcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4MSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF9nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gZG9faW5zdGFsbCBhcyBhIGdsb2IKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZScsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X3RvZGlyX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBkb19pbnN0YWxsIGFzIGEgZ2xvYiB3aXRoIGRlc3RpbmF0aW9uIGFzIGEgZGlyZWN0b3J5CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcGF0Y2goc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBhZGRlZCBieSBhIHBhdGNoIGluIFNSQ19VUkkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtzeXNjb25mZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcGF0Y2hlZFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy9ldGMvc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdXQVJOSU5HOiAnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdhZGQtZmlsZS5wYXRjaCcsIGxpbmUsICdVbmV4cGVjdGVkIHdhcm5pbmcgZm91bmQgaW4gb3V0cHV0OlxuJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdQYXRjaCB3YXJuaW5nIG5vdCBmb3VuZCBpbiBvdXRwdXQ6XG4lcycgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc2NyaXB0KHNlbGYpOgorICAgICAgICAjIE5vdywgYSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGJ1dCBpbnN0YWxsZWQgYnkgYSBzY3JpcHQgKHNvIG5vIG1lbnRpb24gaW4gZG9faW5zdGFsbCkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc2NyaXB0ZWRcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zY3JpcHRlZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgwKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X2Z1bmMoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbnN0YWxsZWQgZnJvbSBhIGZ1bmN0aW9uIGNhbGxlZCBieSBkb19pbnN0YWxsCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODYpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3Bvc3RpbnN0YWxsKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgY3JlYXRlZCBieSBhIHBvc3RpbnN0YWxsIHNjcmlwdCAoYW5kIGV4cGxpY2l0bHkgbWVudGlvbmVkIGluIGl0KQorICAgICAgICAjIEZpcnN0IHRyeSB3aXRob3V0IHNwZWNpZnlpbmcgcmVjaXBlCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QnLCBzZWxmLnRlc3RmaWxlLCBbJ0ZpbGUgL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QgbWF5IGJlIHdyaXR0ZW4gb3V0IGluIGEgcHJlL3Bvc3RpbnN0YWxsIHNjcmlwdCBvZiB0aGUgZm9sbG93aW5nIHJlY2lwZXM6JywgJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZSddKQorICAgICAgICAjIE5vdyBzcGVjaWZ5IHJlY2lwZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0Jywgc2VsZi50ZXN0ZmlsZSwgJy1yIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc5KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9leHRsYXllcihzZWxmKToKKyAgICAgICAgIyBUcnkgY3JlYXRpbmcgYSBiYmFwcGVuZCBpbiBhIGxheWVyIHRoYXQncyBub3QgaW4gYmJsYXllcnMuY29uZiBhbmQgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICAgICAgICBleHR0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnZXh0bGF5ZXInKQorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcihleHR0ZW1wbGF5ZXJkaXIsIEZhbHNlLCAnb2VzZWxmdGVzdGV4dGxheWVyJywgcmVjaXBlcGF0aHNwZWM9J21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy0qLyonKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnICVzJyAlIChleHR0ZW1wbGF5ZXJkaXIsIHNlbGYudGVzdGZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhleHR0ZW1wbGF5ZXJkaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgY3JlYXRlZGZpbGVzLmFwcGVuZChvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGYpLCBleHR0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBjcmVhdGVkZmlsZXMucmVtb3ZlKCdjb25mL2xheWVyLmNvbmYnKQorICAgICAgICBleHBlY3RlZGZpbGVzID0gWydtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtdGVzdC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLXRlc3Qvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGNyZWF0ZWRmaWxlcyksIHNvcnRlZChleHBlY3RlZGZpbGVzKSkKKworICAgIEB0ZXN0Y2FzZSgxMTkyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV93aWxkY2FyZChzZWxmKToKKworICAgICAgICBkZWYgdHJ5X2FwcGVuZGZpbGVfd2Mob3B0aW9ucyk6CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvZXRjL3Byb2ZpbGUgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBzZWxmLnRlc3RmaWxlLCBvcHRpb25zKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBiYmFwcGVuZGZpbGUgPSBOb25lCisgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRlbXBsYXllcmRpcik6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gZgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBiYmFwcGVuZGZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBiYmFwcGVuZCBmaWxlIGNyZWF0ZWQnKQorICAgICAgICAgICAgcnVuQ21kKCdybSAtcmYgJXMvcmVjaXBlcy0qJyAlIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZQorCisgICAgICAgICMgQ2hlY2sgd2l0aG91dCB3aWxkY2FyZCBvcHRpb24KKyAgICAgICAgcmVjaXBlZm4gPSBvcy5wYXRoLmJhc2VuYW1lKGdldF9iYl92YXIoJ0ZJTEUnLCAnYmFzZS1maWxlcycpKQorICAgICAgICBmaWxlbmFtZSA9IHRyeV9hcHBlbmRmaWxlX3djKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVuYW1lLCByZWNpcGVmbi5yZXBsYWNlKCcuYmInLCAnLmJiYXBwZW5kJykpCisgICAgICAgICMgTm93IGNoZWNrIHdpdGggd2lsZGNhcmQgb3B0aW9uCisgICAgICAgIGZpbGVuYW1lID0gdHJ5X2FwcGVuZGZpbGVfd2MoJy13JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgcmVjaXBlZm4uc3BsaXQoJ18nKVswXSArICdfJS5iYmFwcGVuZCcpCisKKyAgICBAdGVzdGNhc2UoMTE5MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbG9ncm90YXRlXzMuOC43LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0zLjguNy50YXIuZ3onCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSkKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSAnR1BMdjInCisgICAgICAgIGNoZWNrdmFyc1snTElDX0ZJTEVTX0NIS1NVTSddID0gJ2ZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCcKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvby9sb2dyb3RhdGUvbG9ncm90YXRlLSR7UFZ9LnRhci5neicKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW21kNXN1bV0nXSA9ICc5OWUwODUwM2VmMjRjM2UyZTNmZjc0Y2M1ZjNiZTIxMycKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW3NoYTI1NnN1bV0nXSA9ICdmNmJhNjkxZjQwZTMwZTY0MGVmYTI3NTJjMWY5NDk5YTNmOTczODI1NzY2MDk5NGRlNzBhNDVmZTAwZDEyYjY0JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQHRlc3RjYXNlKDExOTQpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGVfZ2l0KHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHNobGlicy9wa2dkYXRhCisgICAgICAgIGJpdGJha2UoJ2xpYnBuZyBwYW5nbyBsaWJ4MTEgbGlieGV4dCBqcGVnJykKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbGlibWF0Y2hib3guYmInKQorICAgICAgICBzcmN1cmkgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSwgJ3JlY2lwZXRvb2wgZGlkIG5vdCBjcmVhdGUgcmVjaXBlIGZpbGU7IG91dHB1dDpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0xHUEx2Mi4xJworICAgICAgICBjaGVja3ZhcnNbJ0xJQ19GSUxFU19DSEtTVU0nXSA9ICdmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQnCisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JworICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMS4wK2dpdCR7U1JDUFZ9JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHNyY3VyaQorICAgICAgICBjaGVja3ZhcnNbJ0RFUEVORFMnXSA9ICdsaWJwbmcgcGFuZ28gbGlieDExIGxpYnhleHQganBlZycKKyAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scycsICdwa2djb25maWcnXQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQorCisKK2NsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKFJlY2lwZXRvb2xCYXNlKToKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlICVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lLCBleHBlY3RlZGZpbGVzPU5vbmUsIGRlc3RkaXI9Tm9uZSwgb3B0aW9ucz0nJyk6CisKKyAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgIG9wdGlvbnMgKz0gJyAtRCAlcycgJSBkZXN0ZGlyCisKKyAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKGYpIGZvciBmIGluIG5ld2ZpbGVzXQorCisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgJyAnLmpvaW4obmV3ZmlsZXMpKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9mYWlsKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBjaGVja2Vycm9yKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlIG9yICcnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ0NvbW1hbmQgIiVzIiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG5cJ3QnICUgY21kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgZXJyb3JzdHIgaW4gY2hlY2tlcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3JzdHIsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZmlyc3RfZmlsZV91cmkocmVjaXBlKToKKyAgICAgICAgJycnUmV0dXJuIHRoZSBmaXJzdCBmaWxlOi8vIGluIFNSQ19VUkkgZm9yIHRoZSBzcGVjaWZpZWQgcmVjaXBlLicnJworICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHJlY2lwZSkuc3BsaXQoKQorICAgICAgICBmb3IgdXJpIGluIHNyY191cmk6CisgICAgICAgICAgICBwID0gdXJscGFyc2UudXJscGFyc2UodXJpKQorICAgICAgICAgICAgaWYgcC5zY2hlbWUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBwLm5ldGxvYyArIHAucGF0aAorCisgICAgZGVmIF90ZXN0X2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZmlsZW5hbWU9Tm9uZSwgZGVzdGRpcj1Ob25lLCBoYXNfc3JjX3VyaT1UcnVlLCBzcmNkaXI9Tm9uZSwgbmV3ZmlsZT1Ob25lLCBvcHRpb25zPScnKToKKyAgICAgICAgaWYgbmV3ZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgbmV3ZmlsZSA9IHNlbGYudGVzdGZpbGUKKworICAgICAgICBpZiBzcmNkaXI6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IG9zLnBhdGguam9pbihzcmNkaXIsIGRlc3RkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IHNyY2RpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucyArPSAiIC1XIgorICAgICAgICAgICAgZXhwZWN0ZWRfc3ViZGlyID0gZGVzdGRpcgorCisgICAgICAgIGlmIGZpbGVuYW1lOgorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSBmaWxlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG5ld2ZpbGUpCisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gZGVzdGRpciArIG9zLnNlcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9ICcuJyArIG9zLnNlcAorCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgaWYgaGFzX3NyY191cmk6CisgICAgICAgICAgICB1cmkgPSAnZmlsZTovLyVzJyAlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiBleHBlY3RlZF9zdWJkaXI6CisgICAgICAgICAgICAgICAgdXJpICs9ICc7c3ViZGlyPSVzJyAlIGV4cGVjdGVkX3N1YmRpcgorICAgICAgICAgICAgZXhwZWN0ZWRsaW5lc1swOjBdID0gWydTUkNfVVJJICs9ICIlcyJcbicgJSB1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKworICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0cGF0aCwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgW2ZpbGVuYW1lXSkKKworICAgIGRlZiBfdGVzdF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRmaWxlcz1Ob25lLCBkZXN0ZGlyPU5vbmUsIG9wdGlvbnM9JycpOgorICAgICAgICBpZiBleHBlY3RlZGZpbGVzIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZGZpbGVzID0gW29zLnBhdGguYmFzZW5hbWUobikgZm9yIG4gaW4gbmV3ZmlsZXNdCisKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXModGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkZmlsZXM9ZXhwZWN0ZWRmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPW9wdGlvbnMpCisKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKS5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGV4cGVjdGVkZmlsZXM6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGU6Ly8lcztzdWJkaXI9JXMnICUgKGYsIGRlc3RkaXIpLCBzcmNfdXJpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlOi8vJXMnICUgZiwgc3JjX3VyaSkKKworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZmlsZXNleHRyYXBhdGhzID0gZ2V0X2JiX3ZhcignRklMRVNFWFRSQVBBVEhTJywgdGVzdHJlY2lwZSkuc3BsaXQoJzonKQorICAgICAgICBzZWxmLmFzc2VydEluKGZpbGVzZGlyLCBmaWxlc2V4dHJhcGF0aHMpCisKKworY2xhc3MgUmVjaXBldG9vbEFwcGVuZHNyY1Rlc3RzKFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKToKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsICdhLWZpbGUnKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2Jhc2ljX3dpbGRjYXJkKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgb3B0aW9ucz0nLXcnKQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoYmJhcHBlbmRmaWxlKSwgJyVzXyUlLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCAnYS1maWxlJywgJ3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljX2RpcmRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsIGRlc3RkaXI9J3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3JjZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2gnCisgICAgICAgIHNyY2RpciA9IGdldF9iYl92YXIoJ1MnLCB0ZXN0cmVjaXBlKQorICAgICAgICB3b3JrZGlyID0gZ2V0X2JiX3ZhcignV09SS0RJUicsIHRlc3RyZWNpcGUpCisgICAgICAgIHN1YmRpciA9IG9zLnBhdGgucmVscGF0aChzcmNkaXIsIHdvcmtkaXIpCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgc3JjZGlyPXN1YmRpcikKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9leGlzdGluZ19pbl9zcmNfdXJpKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIGZpbGVwYXRoID0gc2VsZi5fZ2V0X2ZpcnN0X2ZpbGVfdXJpKHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlcGF0aCwgJ1VuYWJsZSB0byB0ZXN0LCBubyBmaWxlOi8vIHVyaSBmb3VuZCBpbiBTUkNfVVJJIGZvciAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIGhhc19zcmNfdXJpPUZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2V4aXN0aW5nX2luX3NyY191cmlfZGlmZl9wYXJhbXMoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzZS1maWxlcycKKyAgICAgICAgc3ViZGlyID0gJ3RtcCcKKyAgICAgICAgZmlsZXBhdGggPSBzZWxmLl9nZXRfZmlyc3RfZmlsZV91cmkodGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVwYXRoLCAnVW5hYmxlIHRvIHRlc3QsIG5vIGZpbGU6Ly8gdXJpIGZvdW5kIGluIFNSQ19VUkkgZm9yICVzJyAlIHRlc3RyZWNpcGUpCisKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBzdWJkaXIsIGhhc19zcmNfdXJpPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCd3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzJyBpbiBsIGZvciBsIGluIG91dHB1dCkpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfcmVwbGFjZV9maWxlX3NyY2RpcihzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNoJworICAgICAgICBmaWxlcGF0aCA9ICdNYWtlZmlsZS5pbicKKyAgICAgICAgc3JjZGlyID0gZ2V0X2JiX3ZhcignUycsIHRlc3RyZWNpcGUpCisgICAgICAgIHdvcmtkaXIgPSBnZXRfYmJfdmFyKCdXT1JLRElSJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHNyY2Rpciwgd29ya2RpcikKKworICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIHNyY2Rpcj1zdWJkaXIpCisgICAgICAgIGJpdGJha2UoJyVzOmRvX3VucGFjaycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3InKS5yZWFkKCksIG9wZW4ob3MucGF0aC5qb2luKHNyY2RpciwgZmlsZXBhdGgpLCAncicpLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoc2VsZiwgZGVzdGRpcj1Ob25lKToKKyAgICAgICAgbmV3ZmlsZXMgPSBbc2VsZi50ZXN0ZmlsZV0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNSk6CisgICAgICAgICAgICB0ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICd0ZXN0ZmlsZSVkJyAlIGkpCisgICAgICAgICAgICB3aXRoIG9wZW4odGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdUZXN0IGZpbGUgJWRcbicgJSBpKQorICAgICAgICAgICAgbmV3ZmlsZXMuYXBwZW5kKHRlc3RmaWxlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGVzKCdnY2MnLCBuZXdmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPSctVycpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzX2Jhc2ljX3N1YmRpcihzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoZGVzdGRpcj0ndGVzdGRpcicpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRlLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTg5NzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weQpAQCAtMCwwICsxLDUzIEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIFNTdGF0ZUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVfcGF0aCA9IGdldF9iYl92YXIoJ1NTVEFURV9ESVInKQorICAgICAgICBzZWxmLmRpc3RybyA9IGdldF9iYl92YXIoJ05BVElWRUxTQlNUUklORycpCisgICAgICAgIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSA9IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoLCBzZWxmLmRpc3RybykKKworICAgICMgQ3JlYXRlcyBhIHNwZWNpYWwgc3N0YXRlIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgb3B0aW9uIHRvIGFkZCBzc3RhdGUgbWlycm9ycworICAgIGRlZiBjb25maWdfc3N0YXRlKHNlbGYsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPUZhbHNlLCBhZGRfbG9jYWxfbWlycm9ycz1bXSk6CisgICAgICAgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb24gPSB0ZW1wX3NzdGF0ZV9sb2NhdGlvbgorCisgICAgICAgIGlmIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb246CisgICAgICAgICAgICB0ZW1wX3NzdGF0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0ZW1wX3NzdGF0ZV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBjb25maWdfdGVtcF9zc3RhdGUgPSAiU1NUQVRFX0RJUiA9IFwiJXNcIiIgJSB0ZW1wX3NzdGF0ZV9wYXRoCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3RlbXBfc3N0YXRlKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wX3NzdGF0ZV9wYXRoKQorICAgICAgICBzZWxmLnNzdGF0ZV9wYXRoID0gZ2V0X2JiX3ZhcignU1NUQVRFX0RJUicpCisgICAgICAgIHNlbGYuZGlzdHJvID0gZ2V0X2JiX3ZhcignTkFUSVZFTFNCU1RSSU5HJykKKyAgICAgICAgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlID0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgsIHNlbGYuZGlzdHJvKQorCisgICAgICAgIGlmIGFkZF9sb2NhbF9taXJyb3JzOgorICAgICAgICAgICAgY29uZmlnX3NldF9zc3RhdGVfaWZfbm90X3NldCA9ICdTU1RBVEVfTUlSUk9SUyA/PSAiIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfc2V0X3NzdGF0ZV9pZl9ub3Rfc2V0KQorICAgICAgICAgICAgZm9yIGxvY2FsX21pcnJvciBpbiBhZGRfbG9jYWxfbWlycm9yczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguam9pbihsb2NhbF9taXJyb3IpID09IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoKSwgbXNnPSdDYW5ub3QgYWRkIHRoZSBjdXJyZW50IHNzdGF0ZSBwYXRoIGFzIGEgc3N0YXRlIG1pcnJvcicpCisgICAgICAgICAgICAgICAgY29uZmlnX3NzdGF0ZV9taXJyb3IgPSAiU1NUQVRFX01JUlJPUlMgKz0gXCJmaWxlOi8vLiogZmlsZTovLy8lcy9QQVRIXCIiICUgbG9jYWxfbWlycm9yCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zc3RhdGVfbWlycm9yKQorCisgICAgIyBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHNzdGF0ZSBmaWxlcworICAgIGRlZiBzZWFyY2hfc3N0YXRlKHNlbGYsIGZpbGVuYW1lX3JlZ2V4LCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNzdGF0ZV9wYXRoKToKKyAgICAgICAgICAgIGlmIGRpc3Ryb19zcGVjaWZpYyBhbmQgcmUuc2VhcmNoKCIlcy9bYS16MC05XXsyfSQiICUgc2VsZi5kaXN0cm8sIHJvb3QpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goZmlsZW5hbWVfcmVnZXgsIGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgICAgICAgICAgaWYgZGlzdHJvX25vbnNwZWNpZmljIGFuZCByZS5zZWFyY2goIiVzL1thLXowLTldezJ9JCIgJSBzZWxmLnNzdGF0ZV9wYXRoLCByb290KToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKGZpbGVuYW1lX3JlZ2V4LCBmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZikKKyAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZXRlc3RzLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZXRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZWZjNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKQEAgLTAsMCArMSwzMjIgQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IGdsb2IKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnNlbGZ0ZXN0LnNzdGF0ZSBpbXBvcnQgU1N0YXRlQmFzZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIFNTdGF0ZVRlc3RzKFNTdGF0ZUJhc2UpOgorCisgICAgIyBUZXN0IHNzdGF0ZSBmaWxlcyBjcmVhdGlvbiBhbmQgdGhlaXIgbG9jYXRpb24KKyAgICBkZWYgcnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKHNlbGYsIHRhcmdldHMsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbikKKworICAgICAgICBpZiAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbjoKKyAgICAgICAgICAgIGJpdGJha2UoWyctY2NsZWFuJ10gKyB0YXJnZXRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBmaWxlX3RyYWNrZXIgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgaWYgc2hvdWxkX3Bhc3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZV90cmFja2VyICwgbXNnPSJDb3VsZCBub3QgZmluZCBzc3RhdGUgZmlsZXMgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmaWxlX3RyYWNrZXIgLCBtc2c9IkZvdW5kIHNzdGF0ZSBmaWxlcyBpbiB0aGUgd3JvbmcgcGxhY2UgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgQHRlc3RjYXNlKDk3NSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX3NwZWNpZmljX3Bhc3Moc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2JpbnV0aWxzLWNyb3NzLScrIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzUpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NyZWF0aW9uX2Rpc3Ryb19zcGVjaWZpY19mYWlsKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydiaW51dGlscy1jcm9zcy0nKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPUZhbHNlKQorCisgICAgQHRlc3RjYXNlKDk3NikKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX25vbnNwZWNpZmljX3Bhc3Moc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDk3NikKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX25vbnNwZWNpZmljX2ZhaWwoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBzaG91bGRfcGFzcz1GYWxzZSkKKworCisgICAgIyBUZXN0IHRoZSBzc3RhdGUgZmlsZXMgZGVsZXRpb24gcGFydCBvZiB0aGUgZG9fY2xlYW5zc3RhdGUgdGFzaworICAgIGRlZiBydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKHNlbGYsIHRhcmdldHMsIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbikKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIHRnel9jcmVhdGVkID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Z3pfY3JlYXRlZCwgbXNnPSJDb3VsZCBub3QgZmluZCBzc3RhdGUgLnRneiBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgc2lnaW5mb19jcmVhdGVkID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wuc2lnaW5mbyQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2lnaW5mb19jcmVhdGVkLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSAuc2lnaW5mbyBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisgICAgICAgIHRnel9yZW1vdmVkID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdGd6X3JlbW92ZWQsIG1zZz0iZG9fY2xlYW5zc3RhdGUgZGlkbid0IHJlbW92ZSAudGd6IHNzdGF0ZSBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICBAdGVzdGNhc2UoOTc3KQorICAgIGRlZiB0ZXN0X2NsZWFuc3N0YXRlX3Rhc2tfZGlzdHJvX3NwZWNpZmljX25vbnNwZWNpZmljKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKFsnYmludXRpbHMtY3Jvc3MtJyArIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnLCAnZ2xpYmMtaW5pdGlhbCddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc3KQorICAgIGRlZiB0ZXN0X2NsZWFuc3N0YXRlX3Rhc2tfZGlzdHJvX25vbnNwZWNpZmljKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc3KQorICAgIGRlZiB0ZXN0X2NsZWFuc3N0YXRlX3Rhc2tfZGlzdHJvX3NwZWNpZmljKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9jbGVhbnNzdGF0ZV90YXNrKFsnYmludXRpbHMtY3Jvc3MtJysgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZScsICdnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKworICAgICMgVGVzdCByZWJ1aWxkaW5nIG9mIGRpc3Ryby1zcGVjaWZpYyBzc3RhdGUgZmlsZXMKKyAgICBkZWYgcnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKHNlbGYsIHRhcmdldHMsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb24pCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW5zc3RhdGUnXSArIHRhcmdldHMpCisKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSkgPT0gW10sIG1zZz0iRm91bmQgZGlzdHJvIG5vbi1zcGVjaWZpYyBzc3RhdGUgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorICAgICAgICBmaWxlX3RyYWNrZXJfMSA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZV90cmFja2VyXzEpID49IGxlbih0YXJnZXRzKSwgbXNnID0gIk5vdCBhbGwgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUgKyAiX29sZCIpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUsIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSArICJfb2xkIikKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpc3Ryb19zcGVjaWZpY19zc3RhdGUpCisKKyAgICAgICAgYml0YmFrZShbJy1jY2xlYW4nXSArIHRhcmdldHMpCisgICAgICAgIGJpdGJha2UodGFyZ2V0cykKKyAgICAgICAgZmlsZV90cmFja2VyXzIgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVfdHJhY2tlcl8yKSA+PSBsZW4odGFyZ2V0cyksIG1zZyA9ICJOb3QgYWxsIHNzdGF0ZSBmaWxlcyB3YXJlIGNyZWF0ZWQgZm9yOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgdGFyZ2V0cykpKQorCisgICAgICAgIG5vdF9yZWNyZWF0ZWQgPSBbeCBmb3IgeCBpbiBmaWxlX3RyYWNrZXJfMSBpZiB4IG5vdCBpbiBmaWxlX3RyYWNrZXJfMl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdF9yZWNyZWF0ZWQgPT0gW10sIG1zZz0iVGhlIGZvbGxvd2luZyBzc3RhdGUgZmlsZXMgd2FyZSBub3QgcmVjcmVhdGVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgbm90X3JlY3JlYXRlZCkpKQorCisgICAgICAgIGNyZWF0ZWRfb25jZSA9IFt4IGZvciB4IGluIGZpbGVfdHJhY2tlcl8yIGlmIHggbm90IGluIGZpbGVfdHJhY2tlcl8xXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlZF9vbmNlID09IFtdLCBtc2c9IlRoZSBmb2xsb3dpbmcgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBvbmx5IGluIHRoZSBzZWNvbmQgcnVuOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgY3JlYXRlZF9vbmNlKSkpCisKKyAgICBAdGVzdGNhc2UoMTc1KQorICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9jcm9zc19uYXRpdmVfdGFyZ2V0cyhzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKFsnYmludXRpbHMtY3Jvc3MtJyArIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSgxNzUpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX2Nyb3NzX3RhcmdldChzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlKFsnYmludXRpbHMtY3Jvc3MtJyArIHRhcmdldGFyY2hdLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDE3NSkKKyAgICBkZWYgdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGVfbmF0aXZlX3RhcmdldChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1uYXRpdmUnXSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworCisgICAgIyBUZXN0IHRoZSBzc3RhdGUtY2FjaGUtbWFuYWdlbWVudCBzY3JpcHQuIEVhY2ggZWxlbWVudCBpbiB0aGUgZ2xvYmFsX2NvbmZpZyBsaXN0IGlzIHVzZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIHRoZSB0YXJnZXRfY29uZmlnIGxpc3QKKyAgICAjIGdsb2JhbF9jb25maWcgZWxlbWVudHMgYXJlIGV4cGVjdGVkIHRvIG5vdCBnZW5lcmF0ZSBhbnkgc3N0YXRlIGZpbGVzIHRoYXQgd291bGQgYmUgcmVtb3ZlZCBieSBzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCAoc3VjaCBhcyBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgTUFDSElORSkKKyAgICBkZWYgcnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KHNlbGYsIHRhcmdldCwgZ2xvYmFsX2NvbmZpZz1bJyddLCB0YXJnZXRfY29uZmlnPVsnJ10sIGlnbm9yZV9wYXR0ZXJucz1bXSk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnbG9iYWxfY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0X2NvbmZpZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihnbG9iYWxfY29uZmlnKSA9PSBsZW4odGFyZ2V0X2NvbmZpZyksIG1zZz0nTGlzdHMgZ2xvYmFsX2NvbmZpZyBhbmQgdGFyZ2V0X2NvbmZpZyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMnKQorICAgICAgICBzZWxmLmNvbmZpZ19zc3RhdGUodGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgYWRkX2xvY2FsX21pcnJvcnM9W3NlbGYuc3N0YXRlX3BhdGhdKQorCisgICAgICAgICMgSWYgYnVpbGRoaXN0b3J5IGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gZGlzYWJsZSB2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyBRQSBjaGVja3MgZm9yIHRoaXMgdGVzdC4gSXQgbWF5IHJlcG9ydCBlcnJvcnMgb3RoZXJ3aXNlLgorICAgICAgICBpZiAoJ2J1aWxkaGlzdG9yeScgaW4gZ2V0X2JiX3ZhcignVVNFUl9DTEFTU0VTJykpIG9yICgnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdJTkhFUklUJykpOgorICAgICAgICAgICAgcmVtb3ZlX2Vycm9yc19jb25maWcgPSAnRVJST1JfUUFfcmVtb3ZlID0gInZlcnNpb24tZ29pbmctYmFja3dhcmRzIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhyZW1vdmVfZXJyb3JzX2NvbmZpZykKKworICAgICAgICAjIEZvciBub3QgdGhpcyBvbmx5IGNoZWNrcyBpZiByYW5kb20gc3N0YXRlIHRhc2tzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSBhcyBhIGdyb3VwLgorICAgICAgICAjIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkIGFkZCBjb250cm9sIG92ZXIgd2hhdCB0YXNrcyB3ZSBjaGVjayBmb3IuCisKKyAgICAgICAgc3N0YXRlX2FyY2hzX2xpc3QgPSBbXQorICAgICAgICBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlID0gW10KKyAgICAgICAgZm9yIGlkeCBpbiByYW5nZShsZW4odGFyZ2V0X2NvbmZpZykpOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGdsb2JhbF9jb25maWdbaWR4XSkKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWdbaWR4XSkKKyAgICAgICAgICAgIHNzdGF0ZV9hcmNoID0gZ2V0X2JiX3ZhcignU1NUQVRFX1BLR0FSQ0gnLCB0YXJnZXQpCisgICAgICAgICAgICBpZiBub3Qgc3N0YXRlX2FyY2ggaW4gc3N0YXRlX2FyY2hzX2xpc3Q6CisgICAgICAgICAgICAgICAgc3N0YXRlX2FyY2hzX2xpc3QuYXBwZW5kKHNzdGF0ZV9hcmNoKQorICAgICAgICAgICAgaWYgdGFyZ2V0X2NvbmZpZ1tpZHhdID09IHRhcmdldF9jb25maWdbLTFdOgorICAgICAgICAgICAgICAgIHRhcmdldF9zc3RhdGVfYmVmb3JlX2J1aWxkID0gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKQorICAgICAgICAgICAgYml0YmFrZSgiLWNjbGVhbiAlcyIgJSB0YXJnZXQpCisgICAgICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgaWYgdGFyZ2V0X2NvbmZpZ1tpZHhdID09IHRhcmdldF9jb25maWdbLTFdOgorICAgICAgICAgICAgICAgIHRhcmdldF9zc3RhdGVfYWZ0ZXJfYnVpbGQgPSBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZSArPSBbeCBmb3IgeCBpbiB0YXJnZXRfc3N0YXRlX2FmdGVyX2J1aWxkIGlmIHggbm90IGluIHRhcmdldF9zc3RhdGVfYmVmb3JlX2J1aWxkIGlmIG5vdCBhbnkocGF0dGVybiBpbiB4IGZvciBwYXR0ZXJuIGluIGlnbm9yZV9wYXR0ZXJucyldCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoZ2xvYmFsX2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCBtc2cgPSAiYnVpbGQgb2YgJXMgZmFpbGVkIHdpdGggJXMiICUgKHRhcmdldCwgcmVzdWx0Lm91dHB1dCkpCisKKyAgICAgICAgcnVuQ21kKCJzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCAteSAtLWNhY2hlLWRpcj0lcyAtLXJlbW92ZS1kdXBsaWNhdGVkIC0tZXh0cmEtYXJjaHM9JXMiICUgKHNlbGYuc3N0YXRlX3BhdGgsICcsJy5qb2luKG1hcChzdHIsIHNzdGF0ZV9hcmNoc19saXN0KSkpKQorICAgICAgICBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZSA9IFt4IGZvciB4IGluIHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykgaWYgbm90IGFueShwYXR0ZXJuIGluIHggZm9yIHBhdHRlcm4gaW4gaWdub3JlX3BhdHRlcm5zKV0KKworICAgICAgICBhY3R1YWxfbm90X2V4cGVjdGVkID0gW3ggZm9yIHggaW4gYWN0dWFsX3JlbWFpbmluZ19zc3RhdGUgaWYgeCBub3QgaW4gZXhwZWN0ZWRfcmVtYWluaW5nX3NzdGF0ZV0KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhY3R1YWxfbm90X2V4cGVjdGVkLCBtc2c9IkZpbGVzIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBidXQgd2FyZSBub3Q6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBhY3R1YWxfbm90X2V4cGVjdGVkKSkpCisgICAgICAgIGV4cGVjdGVkX25vdF9hY3R1YWwgPSBbeCBmb3IgeCBpbiBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlIGlmIHggbm90IGluIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV4cGVjdGVkX25vdF9hY3R1YWwsIG1zZz0iRXh0cmEgZmlsZXMgd2FyZSByZW1vdmVkOiAlcyIgJywgJy5qb2luKG1hcChzdHIsIGV4cGVjdGVkX25vdF9hY3R1YWwpKSkKKworICAgIEB0ZXN0Y2FzZSg5NzMpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzEoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIwIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzgpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzIoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIwIicpCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCcnKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCisKKyAgICBAdGVzdGNhc2UoOTc5KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19wcl8zKHNlbGYpOgorICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KKyAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYtNjQiJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoZ2xvYmFsX2NvbmZpZ1swXSkKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjEiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4NiInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdCgnbTQnLCBnbG9iYWxfY29uZmlnLCAgdGFyZ2V0X2NvbmZpZywgaWdub3JlX3BhdHRlcm5zPVsncG9wdWxhdGVfbGljJ10pCisKKyAgICBAdGVzdGNhc2UoOTc0KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jYWNoZV9tYW5hZ2VtZW50X3NjcmlwdF91c2luZ19tYWNoaW5lKHNlbGYpOgorICAgICAgICBnbG9iYWxfY29uZmlnID0gW10KKyAgICAgICAgdGFyZ2V0X2NvbmZpZyA9IFtdCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYtNjQiJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIGdsb2JhbF9jb25maWcuYXBwZW5kKCdNQUNISU5FID0gInFlbXV4ODYiJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSgxMjcwKQorICAgIGRlZiB0ZXN0X3NzdGF0ZV8zMl82NF9zYW1lX2hhc2goc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBmb3IgYm90aCBuYXRpdmUgYW5kIHRhcmdldCBzaG91bGQgbm90IHZhcnkgd2hldGhlcgorICAgICAgICB0aGV5J3JlIGJ1aWx0IG9uIGEgMzIgb3IgNjQgYml0IHN5c3RlbS4gUmF0aGVyIHRoYW4gcmVxdWlyaW5nIHR3byBkaWZmZXJlbnQgCisgICAgICAgIGJ1aWxkIG1hY2hpbmVzIGFuZCBydW5uaW5nIGEgYnVpbGRzLCBvdmVycmlkZSB0aGUgdmFyaWFibGVzIGNhbGxpbmcgdW5hbWUoKQorICAgICAgICBtYW51YWxseSBhbmQgY2hlY2sgdXNpbmcgYml0YmFrZSAtUy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdG9wZGlyID0gZ2V0X2JiX3ZhcignVE9QRElSJykKKyAgICAgICAgdGFyZ2V0dmVuZG9yID0gZ2V0X2JiX3ZhcignVEFSR0VUX1ZFTkRPUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK0JVSUxEX0FSQ0ggPSBcIng4Nl82NFwiCitCVUlMRF9PUyA9IFwibGludXhcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgorQlVJTERfQVJDSCA9IFwiaTY4NlwiCitCVUlMRF9PUyA9IFwibGludXhcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmLmV4dGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkgZm9yIG5hbWUgaW4gZmlsZXMpCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikucmVwbGFjZSgiaTY4Ni1saW51eCIsICJ4ODZfNjQtbGludXgiKS5yZXBsYWNlKCJpNjg2IiArIHRhcmdldHZlbmRvciArICItbGludXgiLCAieDg2XzY0IiArIHRhcmdldHZlbmRvciArICItbGludXgiLCApIGZvciB4IGluIGZpbGVzMl0KKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisKKyAgICBAdGVzdGNhc2UoMTI3MSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfbmF0aXZlbHNic3RyaW5nX3NhbWVfaGFzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIgTkFUSVZFTFNCU1RSSU5HIGlzCisgICAgICAgIGRldGVjdGVkLiBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdHdvIGRpZmZlcmVudCBidWlsZCBtYWNoaW5lcyBhbmQgcnVubmluZyAKKyAgICAgICAgYnVpbGRzLCBvdmVycmlkZSB0aGUgdmFyaWFibGVzIG1hbnVhbGx5IGFuZCBjaGVjayB1c2luZyBiaXRiYWtlIC1TLgorICAgICAgICAiIiIKKworICAgICAgICB0b3BkaXIgPSBnZXRfYmJfdmFyKCdUT1BESVInKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaFwiCitOQVRJVkVMU0JTVFJJTkcgPSBcIkRpc3Ryb0FcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiIKK1RNUERJUiA9IFwiJHtUT1BESVJ9L3RtcC1zc3RhdGVzYW1laGFzaDJcIgorTkFUSVZFTFNCU1RSSU5HID0gXCJEaXN0cm9CXCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisKKyAgICAgICAgZGVmIGdldF9maWxlcyhkKToKKyAgICAgICAgICAgIGYgPSBbXQorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZCk6CisgICAgICAgICAgICAgICAgZi5leHRlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpIGZvciBuYW1lIGluIGZpbGVzKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy8iKQorICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy8iKQorICAgICAgICBmaWxlczIgPSBbeC5yZXBsYWNlKCJ0bXAtc3N0YXRlc2FtZWhhc2gyIiwgInRtcC1zc3RhdGVzYW1laGFzaCIpIGZvciB4IGluIGZpbGVzMl0KKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX2FsbGFyY2hfc2FtZXNpZ3Moc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc3N0YXRlIGNoZWNrc3VtcyBvZmYgYWxsYXJjaCBwYWNrYWdlcyBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2Ygd2hpY2hldmVyIAorICAgICAgICBNQUNISU5FIGlzIHNldC4gQ2hlY2sgdGhpcyB1c2luZyBiaXRiYWtlIC1TLgorICAgICAgICBBbHNvLCByYXRoZXIgdGhhbiBkdXBsaWNhdGUgdGhlIHRlc3QsIGNoZWNrIG5hdGl2ZXNkayBzdGFtcHMgYXJlIHRoZSBzYW1lIGJldHdlZW4KKyAgICAgICAgdGhlIHR3byBNQUNISU5FIHZhbHVlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgdG9wZGlyID0gZ2V0X2JiX3ZhcignVE9QRElSJykKKyAgICAgICAgdGFyZ2V0b3MgPSBnZXRfYmJfdmFyKCdUQVJHRVRfT1MnKQorICAgICAgICB0YXJnZXR2ZW5kb3IgPSBnZXRfYmJfdmFyKCdUQVJHRVRfVkVORE9SJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgorTUFDSElORSA9IFwicWVtdXg4NlwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJ3b3JsZCBtZXRhLXRvb2xjaGFpbiAtUyBub25lIikKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2gyXCIKK01BQ0hJTkUgPSBcInFlbXVhcm1cIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoIndvcmxkIG1ldGEtdG9vbGNoYWluIC1TIG5vbmUiKQorCisgICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6CisgICAgICAgICAgICBmID0gW10KKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiAibWV0YS1lbnZpcm9ubWVudCIgaW4gcm9vdCBvciAiY3Jvc3MtY2FuYWRpYW4iIGluIHJvb3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiAiZG9fYnVpbGQiIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgZi5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZmlsZXMxID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy9hbGwiICsgdGFyZ2V0dmVuZG9yICsgIi0iICsgdGFyZ2V0b3MpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzL2FsbCIgKyB0YXJnZXR2ZW5kb3IgKyAiLSIgKyB0YXJnZXRvcykKKyAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKSBmb3IgeCBpbiBmaWxlczJdCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZpbGVzMSwgZmlsZXMyKQorCisgICAgICAgIG5hdGl2ZXNka2RpciA9IG9zLnBhdGguYmFzZW5hbWUoZ2xvYi5nbG9iKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoL3N0YW1wcy8qLW5hdGl2ZXNkayotbGludXgiKVswXSkKKworICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIgKyBuYXRpdmVzZGtkaXIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIgKyBuYXRpdmVzZGtkaXIpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmaWxlczEsIGZpbGVzMikKKyAgICAgICAgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3dpYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGM1NGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3dpYy5weQpAQCAtMCwwICsxLDIzNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQVVUSE9SUworIyBFZCBCYXJ0b3NoIDxlZC5iYXJ0b3NoQGxpbnV4LmludGVsLmNvbT4KKworIiIiVGVzdCBjYXNlcyBmb3Igd2ljLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSBnbG9iIGltcG9ydCBnbG9iCitmcm9tIHNodXRpbCBpbXBvcnQgcm10cmVlCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorCitjbGFzcyBXaWMob2VTZWxmVGVzdCk6CisgICAgIiIiV2ljIHRlc3QgY2xhc3MuIiIiCisKKyAgICByZXN1bHRkaXIgPSAiL3Zhci90bXAvd2ljL2J1aWxkLyIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICIiIkJ1aWxkIHdpYyBydW50aW1lIGRlcGVuZGVuY2llcy4iIiIKKyAgICAgICAgYml0YmFrZSgnc3lzbGludXggc3lzbGludXgtbmF0aXZlIHBhcnRlZC1uYXRpdmUgZ3B0ZmRpc2stbmF0aXZlICcKKyAgICAgICAgICAgICAgICAnZG9zZnN0b29scy1uYXRpdmUgbXRvb2xzLW5hdGl2ZScpCisgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IEZhbHNlCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIlRoaXMgY29kZSBpcyBleGVjdXRlZCBiZWZvcmUgZWFjaCB0ZXN0IG1ldGhvZC4iIiIKKyAgICAgICAgaWYgbm90IFdpYy5pbWFnZV9pc19yZWFkeToKKyAgICAgICAgICAgICMgYnVpbGQgY29yZS1pbWFnZS1taW5pbWFsIHdpdGggcmVxdWlyZWQgZmVhdHVyZXMKKyAgICAgICAgICAgIGZlYXR1cmVzID0gJ0lNQUdFX0ZTVFlQRVMgKz0gIiBoZGRpbWciXG5NQUNISU5FX0ZFQVRVUkVTX2FwcGVuZCA9ICIgZWZpIlxuJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGZlYXR1cmVzKQorICAgICAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS1taW5pbWFsJykKKyAgICAgICAgICAgICMgc2V0IHRoaXMgY2xhc3MgdmFyaWFibGUgdG8gYXZvaWQgYnVpZGluZyBpbWFnZSBtYW55IHRpbWVzCisgICAgICAgICAgICBXaWMuaW1hZ2VfaXNfcmVhZHkgPSBUcnVlCisKKyAgICAgICAgcm10cmVlKHNlbGYucmVzdWx0ZGlyLCBpZ25vcmVfZXJyb3JzPVRydWUpCisKKyAgICBkZWYgdGVzdDAxX2hlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIC0taGVscCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIC0taGVscCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDJfY3JlYXRlaGVscChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgY3JlYXRlIC0taGVscCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGNyZWF0ZSAtLWhlbHAnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDAzX2xpc3RoZWxwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBsaXN0IC0taGVscCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGxpc3QgLS1oZWxwJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwNF9idWlsZF9pbWFnZV9uYW1lKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJkaXJlY3RkaXNrLSouZGlyZWN0IikpKQorCisgICAgZGVmIHRlc3QwNV9idWlsZF9hcnRpZmFjdHMoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIHByb3ZpZGluZyBhbGwgYXJ0aWZhY3RzLiIiIgorICAgICAgICB2YXJzID0gZGljdCgodmFyLmxvd2VyKCksIGdldF9iYl92YXIodmFyLCAnY29yZS1pbWFnZS1taW5pbWFsJykpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2YXIgaW4gKCdTVEFHSU5HX0RBVEFESVInLCAnREVQTE9ZX0RJUl9JTUFHRScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1RBR0lOR19ESVJfTkFUSVZFJywgJ0lNQUdFX1JPT1RGUycpKQorICAgICAgICBzdGF0dXMgPSBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWIgJShzdGFnaW5nX2RhdGFkaXIpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWsgJShkZXBsb3lfZGlyX2ltYWdlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1uICUoc3RhZ2luZ19kaXJfbmF0aXZlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1yICUoaW1hZ2Vfcm9vdGZzKXMiICUgdmFycykuc3RhdHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBkZWYgdGVzdDA2X2dwdF9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBjb3JlLWltYWdlLW1pbmltYWwgd2l0aCBncHQgdGFibGUgYW5kIFVVSUQgYm9vdCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrLWdwdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBkZWYgdGVzdDA3X3Vuc3VwcG9ydGVkX3N1YmNvbW1hbmQoc2VsZik6CisgICAgICAgICIiIlRlc3QgdW5zdXBwb3J0ZWQgc3ViY29tbWFuZCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJ1bkNtZCgnd2ljIHVuc3VwcG9ydGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDhfbm9fY29tbWFuZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgd2l0aG91dCBjb21tYW5kIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCd3aWMnLCBpZ25vcmVfc3RhdHVzPVRydWUpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDlfaGVscF9raWNrc3RhcnQoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGhlbHAgb3ZlcnZpZXciIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIG92ZXJ2aWV3Jykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxMF9oZWxwX3BsdWdpbnMoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGhlbHAgcGx1Z2lucyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgcGx1Z2lucycpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MTFfaGVscF9raWNrc3RhcnQoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGhlbHAga2lja3N0YXJ0IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBraWNrc3RhcnQnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDEyX2NvbXByZXNzX2d6aXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCBnemlwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyBnemlwIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0ZGlzay0qLmRpcmVjdC5neiIpKSkKKworICAgIGRlZiB0ZXN0MTNfY29tcHJlc3NfZ3ppcChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIGJ6aXAyIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyBiemlwMiIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdGRpc2stKi5kaXJlY3QuYnoyIikpKQorCisgICAgZGVmIHRlc3QxNF9jb21wcmVzc19nemlwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXByZXNzaW5nIGFuIGltYWdlIHdpdGggeHoiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIHh6Iikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0ZGlzay0qLmRpcmVjdC54eiIpKSkKKworICAgIGRlZiB0ZXN0MTVfd3JvbmdfY29tcHJlc3NvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBob3cgd2ljIGJyZWFrcyBpZiB3cm9uZyBjb21wcmVzc29yIGlzIHByb3ZpZGVkIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyB3cm9uZyIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxNl9yb290ZnNfaW5kaXJlY3RfcmVjaXBlcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1c2FnZSBvZiByb290ZnMgcGx1Z2luIHdpdGggcm9vdGZzIHJlY2lwZXMiIiIKKyAgICAgICAgd2tzID0gImRpcmVjdGRpc2stbXVsdGktcm9vdGZzIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzIHJvb3RmczE9Y29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzIHJvb3RmczI9Y29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgd2tzKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMqLmRpcmVjdCIgJSB3a3MpKSkKKworICAgIGRlZiB0ZXN0MTdfcm9vdGZzX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1c2FnZSBvZiByb290ZnMgcGx1Z2luIHdpdGggcm9vdGZzIHBhdGhzIiIiCisgICAgICAgIHZhcnMgPSBkaWN0KCh2YXIubG93ZXIoKSwgZ2V0X2JiX3Zhcih2YXIsICdjb3JlLWltYWdlLW1pbmltYWwnKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhciBpbiAoJ1NUQUdJTkdfREFUQURJUicsICdERVBMT1lfRElSX0lNQUdFJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnSU1BR0VfUk9PVEZTJykpCisgICAgICAgIHZhcnNbJ3drcyddID0gImRpcmVjdGRpc2stbXVsdGktcm9vdGZzIgorICAgICAgICBzdGF0dXMgPSBydW5DbWQoIndpYyBjcmVhdGUgJSh3a3MpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWIgJShzdGFnaW5nX2RhdGFkaXIpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLWsgJShkZXBsb3lfZGlyX2ltYWdlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1uICUoc3RhZ2luZ19kaXJfbmF0aXZlKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzLWRpciByb290ZnMxPSUoaW1hZ2Vfcm9vdGZzKXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIi0tcm9vdGZzLWRpciByb290ZnMyPSUoaW1hZ2Vfcm9vdGZzKXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgdmFycykuc3RhdHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKHdrcylzLSouZGlyZWN0IiAlIHZhcnMpKSkKKworICAgIGRlZiB0ZXN0MThfaXNvX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGh5YnJpZCBpc28gaW1hZ2V3aXRoIGxlZ2FjeSBhbmQgRUZJIGJvb3QiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgbWtoeWJyaWRpc28gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1pbWFnZS1uYW1lIGNvcmUtaW1hZ2UtbWluaW1hbCIpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJIWUJSSURfSVNPX0lNRy0qLmRpcmVjdCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICJIWUJSSURfSVNPX0lNRy0qLmlzbyIpKSkKKworICAgIGRlZiB0ZXN0MTlfaW1hZ2VfZW52KHNlbGYpOgorICAgICAgICAiIiJUZXN0IGdlbmVyYXRpb24gb2YgPGltYWdlPi5lbnYgZmlsZXMuIiIiCisgICAgICAgIGltYWdlID0gJ2NvcmUtaW1hZ2UtbWluaW1hbCcKKyAgICAgICAgc3RkaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBpbWFnZSkKKyAgICAgICAgaW1nZGF0YWRpciA9IG9zLnBhdGguam9pbihzdGRpciwgJ2ltZ2RhdGEnKQorCisgICAgICAgIGJhc2VuYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfQkFTRU5BTUUnLCBpbWFnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlbmFtZSwgaW1hZ2UpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oaW1nZGF0YWRpciwgYmFzZW5hbWUpICsgJy5lbnYnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShwYXRoKSkKKworICAgICAgICB3aWN2YXJzID0gc2V0KGdldF9iYl92YXIoJ1dJQ1ZBUlMnLCBpbWFnZSkuc3BsaXQoKSkKKyAgICAgICAgIyBmaWx0ZXIgb3V0IG9wdGlvbmFsIHZhcmlhYmxlcworICAgICAgICB3aWN2YXJzID0gd2ljdmFycy5kaWZmZXJlbmNlKCgnSERERElSJywgJ0lNQUdFX0JPT1RfRklMRVMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU5JVFJEJywgJ0lTT0RJUicpKQorICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZW52ZmlsZToKKyAgICAgICAgICAgIGNvbnRlbnQgPSBkaWN0KGxpbmUuc3BsaXQoIj0iLCAxKSBmb3IgbGluZSBpbiBlbnZmaWxlKQorICAgICAgICAgICAgIyB0ZXN0IGlmIHZhcmlhYmxlcyB1c2VkIGJ5IHdpYyBwcmVzZW50IGluIHRoZSAuZW52IGZpbGUKKyAgICAgICAgICAgIGZvciB2YXIgaW4gd2ljdmFyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFyIGluIGNvbnRlbnQsICIlcyBpcyBub3QgaW4gLmVudiBmaWxlIiAlIHZhcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGVudFt2YXJdKQorCisgICAgZGVmIHRlc3QyMF93aWNfaW1hZ2VfdHlwZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBidWlsZGluZyB3aWMgaW1hZ2VzIGJ5IGJpdGJha2UiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiaXRiYWtlKCd3aWMtaW1hZ2UtbWluaW1hbCcpLnN0YXR1cykKKworICAgICAgICBkZXBsb3lfZGlyID0gZ2V0X2JiX3ZhcignREVQTE9ZX0RJUl9JTUFHRScpCisgICAgICAgIG1hY2hpbmUgPSBnZXRfYmJfdmFyKCdNQUNISU5FJykKKyAgICAgICAgcHJlZml4ID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsICd3aWMtaW1hZ2UtbWluaW1hbC0lcy4nICUgbWFjaGluZSkKKyAgICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIHJlc3VsdCBpbWFnZSBhbmQgbWFuaWZlc3RzIHN5bWxpbmtzCisgICAgICAgICMgcG9pbnRpbmcgdG8gZXhpc3RpbmcgZmlsZXMKKyAgICAgICAgZm9yIHN1ZmZpeCBpbiAoJ3dpYy5iejInLCAnbWFuaWZlc3QnKToKKyAgICAgICAgICAgIHBhdGggPSBwcmVmaXggKyBzdWZmaXgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzbGluayhwYXRoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLnJlYWxwYXRoKHBhdGgpKSkKKworICAgIGRlZiB0ZXN0MjFfcWVtdXg4Nl9kaXJlY3RkaXNrKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIHFlbXV4LTg2LWRpcmVjdGRpc2sgaW1hZ2UiIiIKKyAgICAgICAgaW1hZ2UgPSAicWVtdXg4Ni1kaXJlY3RkaXNrIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbWFnZSkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKKworICAgIGRlZiB0ZXN0MjJfbWtndW1taWRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgbWtndW1taWRpc2sgaW1hZ2UiIiIKKyAgICAgICAgaW1hZ2UgPSAibWtndW1taWRpc2siCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGltYWdlKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSBpbWFnZSkpKQorCisgICAgZGVmIHRlc3QyM19ta2VmaWRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgbWtlZmlkaXNrIGltYWdlIiIiCisgICAgICAgIGltYWdlID0gIm1rZWZpZGlzayIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW1hZ2UpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIGltYWdlKSkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzBkMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weQpAQCAtMCwwICsxLDI0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgaXMgdXNlZCBieSB0ZXN0aW1hZ2UuYmJjbGFzcyBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgYSB0YXJnZXQgbWFjaGluZS4KKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGJiCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2Zyb20gb2VxYS51dGlscy5xZW11cnVubmVyIGltcG9ydCBRZW11UnVubmVyCitmcm9tIG9lcWEudXRpbHMucWVtdXRpbnlydW5uZXIgaW1wb3J0IFFlbXVUaW55UnVubmVyCitmcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgVGFyZ2V0RHVtcGVyCitmcm9tIG9lcWEuY29udHJvbGxlcnMudGVzdHRhcmdldGxvYWRlciBpbXBvcnQgVGVzdFRhcmdldExvYWRlcgorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2RlZiBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIoZCk6CisgICAgdGVzdHRhcmdldCA9IGQuZ2V0VmFyKCJURVNUX1RBUkdFVCIsIFRydWUpCisgICAgIyBvbGQsIHNpbXBsZSBuYW1lcworICAgIGlmIHRlc3R0YXJnZXQgPT0gInFlbXUiOgorICAgICAgICByZXR1cm4gUWVtdVRhcmdldChkKQorICAgIGVsaWYgdGVzdHRhcmdldCA9PSAic2ltcGxlcmVtb3RlIjoKKyAgICAgICAgcmV0dXJuIFNpbXBsZVJlbW90ZVRhcmdldChkKQorICAgIGVsc2U6CisgICAgICAgICMgdXNlIHRoZSBjbGFzcyBuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaXMgaXQgYSBjb3JlIGNsYXNzIGRlZmluZWQgaGVyZT8KKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBnZXRhdHRyKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgdGVzdHRhcmdldCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBub3BlLCBwZXJoYXBzIGEgbGF5ZXIgZGVmaW5lZCBvbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIHRlc3R0YXJnZXRsb2FkZXIgPSBUZXN0VGFyZ2V0TG9hZGVyKCkKKyAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gdGVzdHRhcmdldGxvYWRlci5nZXRfY29udHJvbGxlcl9tb2R1bGUodGVzdHRhcmdldCwgYmJwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZhaWxlZCB0byBpbXBvcnQgezB9IGZyb20gYXZhaWxhYmxlIGNvbnRyb2xsZXIgbW9kdWxlczpcbnsxfSIuZm9ybWF0KHRlc3R0YXJnZXQsdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBURVNUX1RBUkdFVCAtICIgKyBzdHIoZSkpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyKGQpCisKKworY2xhc3MgQmFzZVRhcmdldChvYmplY3QpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gW10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRldGltZSA9IGQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpCisgICAgICAgIHNlbGYudGVzdGRpciA9IGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKQorICAgICAgICBzZWxmLnBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBkZXBsb3koc2VsZik6CisKKyAgICAgICAgc2VsZi5zc2hsb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAic3NoX3RhcmdldF9sb2cuJXMiICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgc3NobG9nbGluayA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZyIpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHNzaGxvZ2xpbmspOgorICAgICAgICAgICAgb3MudW5saW5rKHNzaGxvZ2xpbmspCisgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5zc2hsb2csIHNzaGxvZ2xpbmspCisgICAgICAgIGJiLm5vdGUoIlNTSCBsb2cgZmlsZTogJXMiICUgIHNlbGYuc3NobG9nKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXRfZXh0cmFfZmlsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWF0Y2hfaW1hZ2VfZnN0eXBlKHNlbGYsIGQsIGltYWdlX2ZzdHlwZXM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBpbWFnZV9mc3R5cGVzOgorICAgICAgICAgICAgaW1hZ2VfZnN0eXBlcyA9IGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkuc3BsaXQoJyAnKQorICAgICAgICBwb3NzaWJsZV9pbWFnZV9mc3R5cGVzID0gW2ZzdHlwZSBmb3IgZnN0eXBlIGluIHNlbGYuc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgaWYgZnN0eXBlIGluIGltYWdlX2ZzdHlwZXNdCisgICAgICAgIGlmIHBvc3NpYmxlX2ltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICByZXR1cm4gcG9zc2libGVfaW1hZ2VfZnN0eXBlc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfaW1hZ2VfZnN0eXBlKHNlbGYsIGQpOgorICAgICAgICBpbWFnZV9mc3R5cGUgPSBzZWxmLm1hdGNoX2ltYWdlX2ZzdHlwZShkKQorICAgICAgICBpZiBpbWFnZV9mc3R5cGU6CisgICAgICAgICAgICByZXR1cm4gaW1hZ2VfZnN0eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5mYXRhbCgiSU1BR0VfRlNUWVBFUyBzaG91bGQgY29udGFpbiBhIFRhcmdldCBDb250cm9sbGVyIHN1cHBvcnRlZCBpbWFnZSBmc3R5cGU6ICVzICIgJSAnLCAnLmpvaW4obWFwKHN0ciwgc2VsZi5zdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcykpKQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICBzZWxmLnN0YXJ0KHBhcmFtcykKKworICAgIGRlZiBydW4oc2VsZiwgY21kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJ1bihjbWQsIHRpbWVvdXQpCisKKyAgICBkZWYgY29weV90byhzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfdG8obG9jYWxwYXRoLCByZW1vdGVwYXRoKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfZnJvbShyZW1vdGVwYXRoLCBsb2NhbHBhdGgpCisKKworCitjbGFzcyBRZW11VGFyZ2V0KEJhc2VUYXJnZXQpOgorCisgICAgc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgPSBbJ2V4dDMnLCAnZXh0NCcsICdjcGlvLmd6J10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKworICAgICAgICBzdXBlcihRZW11VGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYucWVtdWxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJxZW11X2Jvb3RfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIHNlbGYub3JpZ3Jvb3RmcyA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCAgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgJy4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYucm9vdGZzID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgJy10ZXN0aW1hZ2UuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLmtlcm5lbCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCBkLmdldFZhcigiS0VSTkVMX0lNQUdFVFlQRSIsIEZhbHNlKSArICctJyArIGQuZ2V0VmFyKCdNQUNISU5FJywgRmFsc2UpICsgJy5iaW4nKQorICAgICAgICBkdW1wX3RhcmdldF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX3RhcmdldCIsIFRydWUpCisgICAgICAgIGR1bXBfaG9zdF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX2hvc3QiLCBUcnVlKQorICAgICAgICBkdW1wX2RpciA9IGQuZ2V0VmFyKCJURVNUSU1BR0VfRFVNUF9ESVIiLCBUcnVlKQorCisgICAgICAgICMgTG9nIFFlbXVSdW5uZXIgbG9nIG91dHB1dCB0byBhIGZpbGUKKyAgICAgICAgaW1wb3J0IG9lLnBhdGgKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGRpcikKKyAgICAgICAgc2VsZi5xZW11cnVubmVybG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgJ3FlbXVydW5uZXJfbG9nLiVzJyAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLlFlbXVSdW5uZXInKQorICAgICAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcihzZWxmLnFlbXVydW5uZXJsb2cpCisgICAgICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgICAgICBvZS5wYXRoLnN5bWxpbmsob3MucGF0aC5iYXNlbmFtZShzZWxmLnFlbXVydW5uZXJsb2cpLCBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAncWVtdXJ1bm5lcl9sb2cnKSwgZm9yY2U9VHJ1ZSkKKworICAgICAgICBpZiBkLmdldFZhcigiRElTVFJPIiwgVHJ1ZSkgPT0gInBva3ktdGlueSI6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFFlbXVUaW55UnVubmVyKG1hY2hpbmU9ZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnM9c2VsZi5yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wZGlyID0gZC5nZXRWYXIoIlRNUERJUiIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKS5nZXRWYXIoIkRJU1BMQVkiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dmaWxlID0gc2VsZi5xZW11bG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCA9IHNlbGYua2VybmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3R0aW1lID0gaW50KGQuZ2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiLCBUcnVlKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJ1bm5lciA9IFFlbXVSdW5uZXIobWFjaGluZT1kLmdldFZhcigiTUFDSElORSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmcz1zZWxmLnJvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBkaXIgPSBkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSBzZWxmLnFlbXVsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdHRpbWUgPSBpbnQoZC5nZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsIFRydWUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wX2RpciA9IGR1bXBfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfaG9zdF9jbWRzID0gZC5nZXRWYXIoInRlc3RpbWFnZV9kdW1wX2hvc3QiLCBUcnVlKSkKKworICAgICAgICBzZWxmLnRhcmdldF9kdW1wZXIgPSBUYXJnZXREdW1wZXIoZHVtcF90YXJnZXRfY21kcywgZHVtcF9kaXIsIHNlbGYucnVubmVyKQorCisgICAgZGVmIGRlcGxveShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGRpcikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLm9yaWdyb290ZnMsIHNlbGYucm9vdGZzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiRXJyb3IgY29weWluZyByb290ZnM6ICVzIiAlIGUpCisKKyAgICAgICAgcWVtdWxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAicWVtdV9ib290X2xvZyIpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKHFlbXVsb2dsaW5rKToKKyAgICAgICAgICAgIG9zLnVubGluayhxZW11bG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnFlbXVsb2csIHFlbXVsb2dsaW5rKQorCisgICAgICAgIGJiLm5vdGUoInJvb3RmcyBmaWxlOiAlcyIgJSAgc2VsZi5yb290ZnMpCisgICAgICAgIGJiLm5vdGUoIlFlbXUgbG9nIGZpbGU6ICVzIiAlIHNlbGYucWVtdWxvZykKKyAgICAgICAgc3VwZXIoUWVtdVRhcmdldCwgc2VsZikuZGVwbG95KCkKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucnVubmVyLnN0YXJ0KHBhcmFtcyk6CisgICAgICAgICAgICBzZWxmLmlwID0gc2VsZi5ydW5uZXIuaXAKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX2lwID0gc2VsZi5ydW5uZXIuc2VydmVyX2lwCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKGlwPXNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5xZW11bG9nKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5xZW11bG9nLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJRZW11IGxvZyBvdXRwdXQgZnJvbSAlczpcbiVzIiAlIChzZWxmLnFlbXVsb2csIGYucmVhZCgpKSkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIHRvIHN0YXJ0IHFlbXUgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBib290IGxvZyIgJSBzZWxmLnBuKQorCisgICAgZGVmIGNoZWNrKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5uZXIuaXNfYWxpdmUoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVubmVyLnN0b3AoKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJ1bm5lci5yZXN0YXJ0KHBhcmFtcyk6CisgICAgICAgICAgICBzZWxmLmlwID0gc2VsZi5ydW5uZXIuaXAKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX2lwID0gc2VsZi5ydW5uZXIuc2VydmVyX2lwCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKGlwPXNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtIEZBSUxFRCB0byByZS1zdGFydCBxZW11IC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgYm9vdCBsb2ciICUgc2VsZi5wbikKKworICAgIGRlZiBydW5fc2VyaWFsKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5uZXIucnVuX3NlcmlhbChjb21tYW5kKQorCisKK2NsYXNzIFNpbXBsZVJlbW90ZVRhcmdldChCYXNlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoU2ltcGxlUmVtb3RlVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBhZGRyID0gZC5nZXRWYXIoIlRFU1RfVEFSR0VUX0lQIiwgVHJ1ZSkgb3IgYmIuZmF0YWwoJ1BsZWFzZSBzZXQgVEVTVF9UQVJHRVRfSVAgd2l0aCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgbWFjaGluZSB5b3Ugd2FudCB0byBydW4gdGhlIHRlc3RzIG9uLicpCisgICAgICAgIHNlbGYuaXAgPSBhZGRyLnNwbGl0KCI6IilbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wb3J0ID0gYWRkci5zcGxpdCgiOiIpWzFdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgc2VsZi5wb3J0ID0gTm9uZQorICAgICAgICBiYi5ub3RlKCJUYXJnZXQgSVA6ICVzIiAlIHNlbGYuaXApCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gZC5nZXRWYXIoIlRFU1RfU0VSVkVSX0lQIiwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyX2lwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2lwID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydpcCcsICdyb3V0ZScsICdnZXQnLCBzZWxmLmlwIF0pLnNwbGl0KCJcbiIpWzBdLnNwbGl0KClbLTFdCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkZhaWxlZCB0byBkZXRlcm1pbmUgdGhlIGhvc3QgSVAgYWRkcmVzcyAoYWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNldCBURVNUX1NFUlZFUl9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoaXMgbWFjaGluZSk6ICVzIiAlIGUpCisgICAgICAgIGJiLm5vdGUoIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICBzdXBlcihTaW1wbGVSZW1vdGVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHBvcnQ9c2VsZi5wb3J0KQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2MDA0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE1IEBACisjIEVuYWJsZSBvdGhlciBsYXllcnMgdG8gaGF2ZSBtb2R1bGVzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCisKKworIyBCb3Jyb3dlZCBmcm9tIENhbGxlZFByb2Nlc3NFcnJvcgorCitjbGFzcyBDb21tYW5kRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0Y29kZSwgY21kLCBvdXRwdXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5yZXRjb2RlID0gcmV0Y29kZQorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZCB3aXRoIG91dHB1dDogJXMiICUgKHNlbGYuY21kLCBzZWxmLnJldGNvZGUsIHNlbGYub3V0cHV0KQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlMmNiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9jb21tYW5kcy5weQpAQCAtMCwwICsxLDIyNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBpcyBtYWlubHkgdXNlZCBieSBzY3JpcHRzL29lLXNlbGZ0ZXN0IGFuZCBtb2R1bGVzIHVuZGVyIG1ldGEvb2VxYS9zZWxmdGVzdAorIyBJdCBwcm92aWRlcyBhIGNsYXNzIGFuZCBtZXRob2RzIGZvciBydW5uaW5nIGNvbW1hbmRzIG9uIHRoZSBob3N0IGluIGEgY29udmllbmVudCB3YXkgZm9yIHRlc3RzLgorCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgQ29tbWFuZEVycm9yCitmcm9tIG9lcWEudXRpbHMgaW1wb3J0IGZ0b29scworaW1wb3J0IHJlCitpbXBvcnQgY29udGV4dGxpYgorCitjbGFzcyBDb21tYW5kKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmQsIGJnPUZhbHNlLCB0aW1lb3V0PU5vbmUsIGRhdGE9Tm9uZSwgKipvcHRpb25zKToKKworICAgICAgICBzZWxmLmRlZmF1bHRvcHRzID0geworICAgICAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICJzdGRlcnIiOiBzdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICJzdGRpbiI6IE5vbmUsCisgICAgICAgICAgICAic2hlbGwiOiBGYWxzZSwKKyAgICAgICAgICAgICJidWZzaXplIjogLTEsCisgICAgICAgIH0KKworICAgICAgICBzZWxmLmNtZCA9IGNvbW1hbmQKKyAgICAgICAgc2VsZi5iZyA9IGJnCisgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorCisgICAgICAgIHNlbGYub3B0aW9ucyA9IGRpY3Qoc2VsZi5kZWZhdWx0b3B0cykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmNtZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBzZWxmLm9wdGlvbnNbInNoZWxsIl0gPSBUcnVlCisgICAgICAgIGlmIHNlbGYuZGF0YToKKyAgICAgICAgICAgIHNlbGYub3B0aW9uc1snc3RkaW4nXSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBzZWxmLm9wdGlvbnMudXBkYXRlKG9wdGlvbnMpCisKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBOb25lCisgICAgICAgIHNlbGYub3V0cHV0ID0gTm9uZQorICAgICAgICBzZWxmLmVycm9yID0gTm9uZQorICAgICAgICBzZWxmLnRocmVhZCA9IE5vbmUKKworICAgICAgICBzZWxmLmxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ1dGlscy5jb21tYW5kcyIpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuY21kLCAqKnNlbGYub3B0aW9ucykKKworICAgICAgICBkZWYgY29tbVRocmVhZCgpOgorICAgICAgICAgICAgc2VsZi5vdXRwdXQsIHNlbGYuZXJyb3IgPSBzZWxmLnByb2Nlc3MuY29tbXVuaWNhdGUoc2VsZi5kYXRhKQorCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y29tbVRocmVhZCkKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSdW5uaW5nIGNvbW1hbmQgJyVzJyIgJSBzZWxmLmNtZCkKKworICAgICAgICBpZiBub3Qgc2VsZi5iZzoKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oc2VsZi50aW1lb3V0KQorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRocmVhZC5pc0FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3MudGVybWluYXRlKCkKKyAgICAgICAgICAgICMgbGV0J3MgZ2l2ZSBpdCBtb3JlIHRpbWUgdG8gdGVybWluYXRlIGdyYWNlZnVsbHkgYmVmb3JlIGtpbGxpbmcgaXQKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oNSkKKyAgICAgICAgICAgIGlmIHNlbGYudGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBzZWxmLm91dHB1dC5yc3RyaXAoKQorICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucHJvY2Vzcy5wb2xsKCkKKworICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiQ29tbWFuZCAnJXMnIHJldHVybmVkICVkIGFzIGV4aXQgY29kZS4iICUgKHNlbGYuY21kLCBzZWxmLnN0YXR1cykpCisgICAgICAgICMgbG9nZ2luZyB0aGUgY29tcGxldGUgb3V0cHV0IGlzIGluc2FuZQorICAgICAgICAjIGJpdGJha2UgLWUgb3V0cHV0IGlzIHJlYWxseSBiaWcKKyAgICAgICAgIyBhbmQgbWFrZXMgdGhlIGxvZyBmaWxlIHVzZWxlc3MKKyAgICAgICAgaWYgc2VsZi5zdGF0dXM6CisgICAgICAgICAgICBsb3V0ID0gIlxuIi5qb2luKHNlbGYub3V0cHV0LnNwbGl0bGluZXMoKVstMjA6XSkKKyAgICAgICAgICAgIHNlbGYubG9nLmRlYnVnKCJMYXN0IDIwIGxpbmVzOlxuJXMiICUgbG91dCkKKworCitjbGFzcyBSZXN1bHQob2JqZWN0KToKKyAgICBwYXNzCisKKworZGVmIHJ1bkNtZChjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlLCB0aW1lb3V0PU5vbmUsIGFzc2VydF9lcnJvcj1UcnVlLCAqKm9wdGlvbnMpOgorICAgIHJlc3VsdCA9IFJlc3VsdCgpCisKKyAgICBjbWQgPSBDb21tYW5kKGNvbW1hbmQsIHRpbWVvdXQ9dGltZW91dCwgKipvcHRpb25zKQorICAgIGNtZC5ydW4oKQorCisgICAgcmVzdWx0LmNvbW1hbmQgPSBjb21tYW5kCisgICAgcmVzdWx0LnN0YXR1cyA9IGNtZC5zdGF0dXMKKyAgICByZXN1bHQub3V0cHV0ID0gY21kLm91dHB1dAorICAgIHJlc3VsdC5waWQgPSBjbWQucHJvY2Vzcy5waWQKKworICAgIGlmIHJlc3VsdC5zdGF0dXMgYW5kIG5vdCBpZ25vcmVfc3RhdHVzOgorICAgICAgICBpZiBhc3NlcnRfZXJyb3I6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkOlxuJXMiICUgKGNvbW1hbmQsIHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ29tbWFuZEVycm9yKHJlc3VsdC5zdGF0dXMsIGNvbW1hbmQsIHJlc3VsdC5vdXRwdXQpCisKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGJpdGJha2UoY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSwgdGltZW91dD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUsICoqb3B0aW9ucyk6CisKKyAgICBpZiBwb3N0Y29uZmlnOgorICAgICAgICBwb3N0Y29uZmlnX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdvZXFhLXBvc3QuY29uZicpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKHBvc3Rjb25maWdfZmlsZSwgcG9zdGNvbmZpZykKKyAgICAgICAgZXh0cmFfYXJncyA9ICItUiAlcyIgJSBwb3N0Y29uZmlnX2ZpbGUKKyAgICBlbHNlOgorICAgICAgICBleHRyYV9hcmdzID0gIiIKKworICAgIGlmIGlzaW5zdGFuY2UoY29tbWFuZCwgYmFzZXN0cmluZyk6CisgICAgICAgIGNtZCA9ICJiaXRiYWtlICIgKyBleHRyYV9hcmdzICsgIiAiICsgY29tbWFuZAorICAgIGVsc2U6CisgICAgICAgIGNtZCA9IFsgImJpdGJha2UiIF0gKyBbYSBmb3IgYSBpbiAoY29tbWFuZCArIGV4dHJhX2FyZ3Muc3BsaXQoIiAiKSkgaWYgYSBub3QgaW4gWyIiXV0KKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXMsIHRpbWVvdXQsICoqb3B0aW9ucykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBwb3N0Y29uZmlnOgorICAgICAgICAgICAgb3MucmVtb3ZlKHBvc3Rjb25maWdfZmlsZSkKKworCitkZWYgZ2V0X2JiX2Vudih0YXJnZXQ9Tm9uZSwgcG9zdGNvbmZpZz1Ob25lKToKKyAgICBpZiB0YXJnZXQ6CisgICAgICAgIHJldHVybiBiaXRiYWtlKCItZSAlcyIgJSB0YXJnZXQsIHBvc3Rjb25maWc9cG9zdGNvbmZpZykub3V0cHV0CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGJpdGJha2UoIi1lIiwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKS5vdXRwdXQKKworZGVmIGdldF9iYl92YXIodmFyLCB0YXJnZXQ9Tm9uZSwgcG9zdGNvbmZpZz1Ob25lKToKKyAgICB2YWwgPSBOb25lCisgICAgYmJlbnYgPSBnZXRfYmJfZW52KHRhcmdldCwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgIGxhc3RsaW5lID0gTm9uZQorICAgIGZvciBsaW5lIGluIGJiZW52LnNwbGl0bGluZXMoKToKKyAgICAgICAgaWYgcmUuc2VhcmNoKCJeKGV4cG9ydCApPyVzPSIgJSB2YXIsIGxpbmUpOgorICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnPScsIDEpWzFdCisgICAgICAgICAgICB2YWwgPSB2YWwuc3RyaXAoJ1wiJykKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsaWYgcmUubWF0Y2goInVuc2V0ICVzJCIgJSB2YXIsIGxpbmUpOgorICAgICAgICAgICAgIyBIYW5kbGUgW3VuZXhwb3J0XSB2YXJpYWJsZXMKKyAgICAgICAgICAgIGlmIGxhc3RsaW5lLnN0YXJ0c3dpdGgoJyMgICAiJyk6CisgICAgICAgICAgICAgICAgdmFsID0gbGFzdGxpbmUuc3BsaXQoJ1wiJylbMV0KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBsYXN0bGluZSA9IGxpbmUKKyAgICByZXR1cm4gdmFsCisKK2RlZiBnZXRfdGVzdF9sYXllcigpOgorICAgIGxheWVycyA9IGdldF9iYl92YXIoIkJCTEFZRVJTIikuc3BsaXQoKQorICAgIHRlc3RsYXllciA9IE5vbmUKKyAgICBmb3IgbCBpbiBsYXllcnM6CisgICAgICAgIGlmICd+JyBpbiBsOgorICAgICAgICAgICAgbCA9IG9zLnBhdGguZXhwYW5kdXNlcihsKQorICAgICAgICBpZiAiL21ldGEtc2VsZnRlc3QiIGluIGwgYW5kIG9zLnBhdGguaXNkaXIobCk6CisgICAgICAgICAgICB0ZXN0bGF5ZXIgPSBsCisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0ZXN0bGF5ZXIKKworZGVmIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHk9OTk5LCByZWNpcGVwYXRoc3BlYz0ncmVjaXBlcy0qLyonKToKKyAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicpKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVTICs9ICIke0xBWUVSRElSfS8lcy8qLmJiIFxcJyAlIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBmLndyaXRlKCcgICAgICAgICAgICAke0xBWUVSRElSfS8lcy8qLmJiYXBwZW5kIlxuJyAlIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVfQ09MTEVDVElPTlMgKz0gIiVzIlxuJyAlIHRlbXBsYXllcm5hbWUpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOXyVzID0gIl4ke0xBWUVSRElSfS8iXG4nICUgdGVtcGxheWVybmFtZSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BSSU9SSVRZXyVzID0gIiVkIlxuJyAlICh0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eSkpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV8lcyA9ICIxIlxuJyAlIHRlbXBsYXllcm5hbWUpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBydW5xZW11KHBuLCB0ZXN0KToKKworICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgaW1wb3J0IGJiLmJ1aWxkCisKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICB0aW5mb2lsLnByZXBhcmUoRmFsc2UpCisgICAgdHJ5OgorICAgICAgICB0aW5mb2lsLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk5JTkcpCisgICAgICAgIGltcG9ydCBvZXFhLnRhcmdldGNvbnRyb2wKKyAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoIlRFU1RfTE9HX0RJUiIsICIke1dPUktESVJ9L3Rlc3RpbWFnZSIpCisgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuc2V0VmFyKCJURVNUX1FFTVVCT09UX1RJTUVPVVQiLCAiMTAwMCIpCisgICAgICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgICAgICByZWNpcGVmaWxlID0gb2UucmVjaXBldXRpbHMucG5fdG9fcmVjaXBlKHRpbmZvaWwuY29va2VyLCBwbikKKyAgICAgICAgcmVjaXBlZGF0YSA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShyZWNpcGVmaWxlLCBbXSwgdGluZm9pbC5jb25maWdfZGF0YSkKKworICAgICAgICAjIFRoZSBRZW11UnVubmVyIGxvZyBpcyBzYXZlZCBvdXQsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSBpdCBpcyBhdCB0aGUgcmlnaHQKKyAgICAgICAgIyBsb2cgbGV2ZWwgKGFuZCB0aGVuIGVuc3VyZSB0aGF0IHNpbmNlIGl0J3MgYSBjaGlsZCBvZiB0aGUgQml0QmFrZSBsb2dnZXIsCisgICAgICAgICMgd2UgZGlzYWJsZSBwcm9wYWdhdGlvbiBzbyB3ZSBkb24ndCB0aGVuIHNlZSB0aGUgbG9nIGV2ZW50cyBvbiB0aGUgY29uc29sZSkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUWVtdVJ1bm5lcicpCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgbG9nZGlyID0gcmVjaXBlZGF0YS5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisKKyAgICAgICAgcWVtdSA9IG9lcWEudGFyZ2V0Y29udHJvbC5RZW11VGFyZ2V0KHJlY2lwZWRhdGEpCisgICAgZmluYWxseToKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNodXQgZG93biB0aW5mb2lsIGVhcmx5IGhlcmUgaW4gY2FzZSB3ZSBhY3R1YWxseSB3YW50CisgICAgICAgICMgdG8gcnVuIHRpbmZvaWwtdXNpbmcgdXRpbGl0aWVzIHdpdGggdGhlIHJ1bm5pbmcgUUVNVSBpbnN0YW5jZS4KKyAgICAgICAgIyBMdWNraWx5IFFlbXVUYXJnZXQgZG9lc24ndCBuZWVkIGl0IGFmdGVyIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisKKyAgICB0cnk6CisgICAgICAgIHFlbXUuZGVwbG95KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcWVtdS5zdGFydCgpCisgICAgICAgIGV4Y2VwdCBiYi5idWlsZC5GdW5jRmFpbGVkOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgUUVNVSAtIHNlZSB0aGUgbG9ncyBpbiAlcycgJSBsb2dkaXIpCisKKyAgICAgICAgeWllbGQgcWVtdQorCisgICAgZmluYWxseToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcWVtdS5zdG9wKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmFkY2IxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkKQEAgLTAsMCArMSwyNDcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFNvbWUgY3VzdG9tIGRlY29yYXRvcnMgdGhhdCBjYW4gYmUgdXNlZCBieSB1bml0dGVzdHMKKyMgTW9zdCB1c2VmdWwgaXMgc2tpcFVubGVzc1Bhc3NlZCB3aGljaCBjYW4gYmUgdXNlZCBmb3IKKyMgY3JlYXRpbmcgZGVwZW5kZWNpZXMgYmV0d2VlbiB0d28gdGVzdCBtZXRob2RzLgorCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBzaWduYWwKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCisjZ2V0IHRoZSAicmVzdWx0IiBvYmplY3QgZnJvbSBvbmUgb2YgdGhlIHVwcGVyIGZyYW1lcyBwcm92aWRlZCB0aGF0IG9uZSBvZiB0aGVzZSB1cHBlciBmcmFtZXMgaXMgYSB1bml0dGVzdC5jYXNlIGZyYW1lCitjbGFzcyBnZXRSZXN1bHRzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHRoZSB1bml0dGVzdC5jYXNlIGZyYW1lIGFuZCB1c2UgaXQgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSB0ZXN0IG1ldGhvZAorICAgICAgICBpZGVudCA9IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50CisgICAgICAgIHVwcGVyZiA9IHN5cy5fY3VycmVudF9mcmFtZXMoKVtpZGVudF0KKyAgICAgICAgd2hpbGUgKHVwcGVyZi5mX2dsb2JhbHNbJ19fbmFtZV9fJ10gIT0gJ3VuaXR0ZXN0LmNhc2UnKToKKyAgICAgICAgICAgIHVwcGVyZiA9IHVwcGVyZi5mX2JhY2sKKworICAgICAgICBkZWYgaGFuZGxlTGlzdChpdGVtcyk6CisgICAgICAgICAgICByZXQgPSBbXQorICAgICAgICAgICAgIyBpdGVtcyBpcyBhIGxpc3Qgb2YgdHVwbGVzLCAodGVzdCwgZmFpbHVyZSkgb3IgKF9FcnJvckhhbmRsZXIoKSwgRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBmb3IgaSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBzID0gaVswXS5pZCgpCisgICAgICAgICAgICAgICAgI0hhbmRsZSB0aGUgX0Vycm9ySG9sZGVyIG9iamVjdHMgZnJvbSBza2lwTW9kdWxlIGZhaWx1cmVzCisgICAgICAgICAgICAgICAgaWYgInNldFVwTW9kdWxlICgiIGluIHM6CisgICAgICAgICAgICAgICAgICAgIHJldC5hcHBlbmQocy5yZXBsYWNlKCJzZXRVcE1vZHVsZSAoIiwgIiIpLnJlcGxhY2UoIikiLCIiKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHMpCisgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIHNlbGYuZmFpbGxpc3QgPSBoYW5kbGVMaXN0KHVwcGVyZi5mX2xvY2Fsc1sncmVzdWx0J10uZmFpbHVyZXMpCisgICAgICAgIHNlbGYuZXJyb3JsaXN0ID0gaGFuZGxlTGlzdCh1cHBlcmYuZl9sb2NhbHNbJ3Jlc3VsdCddLmVycm9ycykKKyAgICAgICAgc2VsZi5za2lwbGlzdCA9IGhhbmRsZUxpc3QodXBwZXJmLmZfbG9jYWxzWydyZXN1bHQnXS5za2lwcGVkKQorCisgICAgZGVmIGdldEZhaWxMaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mYWlsbGlzdAorCisgICAgZGVmIGdldEVycm9yTGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXJyb3JsaXN0CisKKyAgICBkZWYgZ2V0U2tpcExpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNraXBsaXN0CisKK2NsYXNzIHNraXBJZkZhaWx1cmUob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZixmKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncyk6CisgICAgICAgICAgICByZXMgPSBnZXRSZXN1bHRzKCkKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdGNhc2UgaW4gKHJlcy5nZXRGYWlsTGlzdCgpIG9yIHJlcy5nZXRFcnJvckxpc3QoKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGRlcGVuZGVuY3kgbm90IG1ldDogJXMiICUgc2VsZi50ZXN0Y2FzZSkKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmLl9fbmFtZV9fCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3Mgc2tpcElmU2tpcHBlZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdGVzdGNhc2UpOgorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJlcyA9IGdldFJlc3VsdHMoKQorICAgICAgICAgICAgaWYgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0U2tpcExpc3QoKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiAlcyIgJSBzZWxmLnRlc3RjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi5fX25hbWVfXyA9IGYuX19uYW1lX18KKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyBza2lwVW5sZXNzUGFzc2VkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZix0ZXN0Y2FzZSk6CisgICAgICAgIHNlbGYudGVzdGNhc2UgPSB0ZXN0Y2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsZik6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCisgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRTa2lwTGlzdCgpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0RmFpbExpc3QoKSBvciBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UgaW4gcmVzLmdldEVycm9yTGlzdCgpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBkZXBlbmRlbmN5IG5vdCBtZXQ6ICVzIiAlIHNlbGYudGVzdGNhc2UpCisgICAgICAgICAgICByZXR1cm4gZigqYXJncykKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZi5fX25hbWVfXworICAgICAgICB3cmFwcGVkX2YuX2RlcGVuZHNfb24gPSBzZWxmLnRlc3RjYXNlCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3MgdGVzdGNhc2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpOgorICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmMpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YudGVzdF9jYXNlID0gc2VsZi50ZXN0X2Nhc2UKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisKK2NsYXNzIE5vUGFyc2luZ0ZpbHRlcihsb2dnaW5nLkZpbHRlcik6CisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICByZXR1cm4gcmVjb3JkLmxldmVsbm8gPT0gMTAwCisKK2RlZiBMb2dSZXN1bHRzKG9yaWdpbmFsX2NsYXNzKToKKyAgICBvcmlnX21ldGhvZCA9IG9yaWdpbmFsX2NsYXNzLnJ1bgorCisgICAgI3Jld3JpdGUgdGhlIHJ1biBtZXRob2Qgb2YgdW5pdHRlc3QuVGVzdENhc2UgdG8gYWRkIHRlc3RjYXNlIGxvZ2dpbmcKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCwgKmFyZ3MsICoqa3dzKToKKyAgICAgICAgb3JpZ19tZXRob2Qoc2VsZiwgcmVzdWx0LCAqYXJncywgKiprd3MpCisgICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisgICAgICAgICNpZiB0ZXN0IGNhc2UgaXMgZGVjb3JhdGVkIHRoZW4gdXNlIGl0J3MgbnVtYmVyLCBlbHNlIHVzZSBpdCdzIG5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9jYXNlID0gdGVzdE1ldGhvZC50ZXN0X2Nhc2UKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgdGVzdF9jYXNlID0gc2VsZi5fdGVzdE1ldGhvZE5hbWUKKworICAgICAgICBjbGFzc19uYW1lID0gc3RyKHRlc3RNZXRob2QuaW1fY2xhc3MpLnNwbGl0KCInIilbMV0KKworICAgICAgICAjY3JlYXRlIGN1c3RvbSBsb2dnaW5nIGxldmVsIGZvciBmaWx0ZXJpbmcuCisgICAgICAgIGN1c3RvbV9sb2dfbGV2ZWwgPSAxMDAKKyAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoY3VzdG9tX2xvZ19sZXZlbCwgJ1JFU1VMVFMnKQorICAgICAgICBjYWxsZXIgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorCisgICAgICAgIGRlZiByZXN1bHRzKHNlbGYsIG1lc3NhZ2UsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICBpZiBzZWxmLmlzRW5hYmxlZEZvcihjdXN0b21fbG9nX2xldmVsKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZyhjdXN0b21fbG9nX2xldmVsLCBtZXNzYWdlLCAqYXJncywgKiprd3MpCisgICAgICAgIGxvZ2dpbmcuTG9nZ2VyLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT1vcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksJ3Jlc3VsdHMtJytjYWxsZXIrJy5sb2cnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0ndycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpcyAtICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSclSDolTTolUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9Y3VzdG9tX2xvZ19sZXZlbCkKKyAgICAgICAgZm9yIGhhbmRsZXIgaW4gbG9nZ2luZy5yb290LmhhbmRsZXJzOgorICAgICAgICAgICAgaGFuZGxlci5hZGRGaWx0ZXIoTm9QYXJzaW5nRmlsdGVyKCkpCisgICAgICAgIGxvY2FsX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKGNhbGxlcikKKworICAgICAgICAjY2hlY2sgc3RhdHVzIG9mIHRlc3RzIGFuZCByZWNvcmQgaXQKKworICAgICAgICBmb3IgKG5hbWUsIG1zZykgaW4gcmVzdWx0LmVycm9yczoKKyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBzdHIobmFtZSkuc3BsaXQoJyAnKVswXSkgYW5kIChjbGFzc19uYW1lIGluIHN0cihuYW1lKS5zcGxpdCgnICcpWzFdKToKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBFUlJPUiIpCisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjpcbiIrbXNnKQorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgIGZvciAobmFtZSwgbXNnKSBpbiByZXN1bHQuZmFpbHVyZXM6CisgICAgICAgICAgICBpZiAoc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gc3RyKG5hbWUpLnNwbGl0KCcgJylbMF0pIGFuZCAoY2xhc3NfbmFtZSBpbiBzdHIobmFtZSkuc3BsaXQoJyAnKVsxXSk6CisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogRkFJTEVEIikKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOlxuIittc2cpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgZm9yIChuYW1lLCBtc2cpIGluIHJlc3VsdC5za2lwcGVkOgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IHN0cihuYW1lKS5zcGxpdCgnICcpWzBdKSBhbmQgKGNsYXNzX25hbWUgaW4gc3RyKG5hbWUpLnNwbGl0KCcgJylbMV0pOgorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IFNLSVBQRUQiKQorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgIGlmIHBhc3NlZDoKKyAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IFBBU1NFRCIpCisKKyAgICBvcmlnaW5hbF9jbGFzcy5ydW4gPSBydW4KKyAgICByZXR1cm4gb3JpZ2luYWxfY2xhc3MKKworY2xhc3MgVGltZU91dChCYXNlRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiB0aW1lb3V0KHNlY29uZHMpOgorICAgIGRlZiBkZWNvcmF0b3IoZm4pOgorICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJyk6CisgICAgICAgICAgICBAd3JhcHMoZm4pCisgICAgICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgICAgICBjdXJyZW50X2ZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisgICAgICAgICAgICAgICAgZGVmIHJhaXNlVGltZU91dChzaWduYWwsIGZyYW1lKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZnJhbWUgaXMgbm90IGN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lT3V0KCclcyBzZWNvbmRzJyAlIHNlY29uZHMpCisgICAgICAgICAgICAgICAgcHJldl9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgcmFpc2VUaW1lT3V0KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKHNlY29uZHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbigqYXJncywgKiprdykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgcHJldl9oYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGZuCisgICAgcmV0dXJuIGRlY29yYXRvcgorCitfX3RhZ19wcmVmaXggPSAidGFnX18iCitkZWYgdGFnKCphcmdzLCAqKmt3YXJncyk6CisgICAgIiIiRGVjb3JhdG9yIHRoYXQgYWRkcyBhdHRyaWJ1dGVzIHRvIGNsYXNzZXMgb3IgZnVuY3Rpb25zCisgICAgZm9yIHVzZSB3aXRoIHRoZSBBdHRyaWJ1dGUgKC1hKSBwbHVnaW4uCisgICAgIiIiCisgICAgZGVmIHdyYXBfb2Iob2IpOgorICAgICAgICBmb3IgbmFtZSBpbiBhcmdzOgorICAgICAgICAgICAgc2V0YXR0cihvYiwgX190YWdfcHJlZml4ICsgbmFtZSwgVHJ1ZSkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGt3YXJncy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIob2IsIF9fdGFnX3ByZWZpeCArIG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm4gb2IKKyAgICByZXR1cm4gd3JhcF9vYgorCitkZWYgZ2V0dGFnKG9iaiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgIGtleSA9IF9fdGFnX3ByZWZpeCArIGtleQorICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihvYmosIGtleSwgZGVmYXVsdCkKKyAgICB0Y19tZXRob2QgPSBnZXRhdHRyKG9iaiwgb2JqLl90ZXN0TWV0aG9kTmFtZSkKKyAgICByZXQgPSBnZXRhdHRyKHRjX21ldGhvZCwga2V5LCBnZXRhdHRyKG9iaiwga2V5LCBkZWZhdWx0KSkKKyAgICByZXR1cm4gcmV0CisKK2RlZiBnZXRBbGxUYWdzKG9iaik6CisgICAgZGVmIF9fZ2V0dGFncyhvKToKKyAgICAgICAgciA9IHtrW2xlbihfX3RhZ19wcmVmaXgpOl06Z2V0YXR0cihvLGspIGZvciBrIGluIGRpcihvKSBpZiBrLnN0YXJ0c3dpdGgoX190YWdfcHJlZml4KX0KKyAgICAgICAgcmV0dXJuIHIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcmV0dXJuIF9fZ2V0dGFncyhvYmopCisgICAgdGNfbWV0aG9kID0gZ2V0YXR0cihvYmosIG9iai5fdGVzdE1ldGhvZE5hbWUpCisgICAgcmV0ID0gX19nZXR0YWdzKG9iaikKKyAgICByZXQudXBkYXRlKF9fZ2V0dGFncyh0Y19tZXRob2QpKQorICAgIHJldHVybiByZXQKKworZGVmIHRpbWVvdXRfaGFuZGxlcihzZWNvbmRzKToKKyAgICBkZWYgZGVjb3JhdG9yKGZuKToKKyAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdhbGFybScpOgorICAgICAgICAgICAgQHdyYXBzKGZuKQorICAgICAgICAgICAgZGVmIHdyYXBwZWRfZihzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICAgICAgY3VycmVudF9mcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorICAgICAgICAgICAgICAgIGRlZiByYWlzZVRpbWVPdXQoc2lnbmFsLCBmcmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZyYW1lIGlzIG5vdCBjdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LnJlc3RhcnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVPdXQoJyVzIHNlY29uZHMnICUgc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lT3V0KCclcyBzZWNvbmRzJyAlIHNlY29uZHMpCisgICAgICAgICAgICAgICAgcHJldl9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgcmFpc2VUaW1lT3V0KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKHNlY29uZHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbihzZWxmLCAqYXJncywgKiprdykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgcHJldl9oYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGZuCisgICAgcmV0dXJuIGRlY29yYXRvcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZHVtcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU4NzFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkKQEAgLTAsMCArMSw4NyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGl0ZXJ0b29scworZnJvbSBjb21tYW5kcyBpbXBvcnQgcnVuQ21kCisKK2RlZiBnZXRfaG9zdF9kdW1wZXIoZCk6CisgICAgY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IiwgVHJ1ZSkKKyAgICBwYXJlbnRfZGlyID0gZC5nZXRWYXIoIlRFU1RJTUFHRV9EVU1QX0RJUiIsIFRydWUpCisgICAgcmV0dXJuIEhvc3REdW1wZXIoY21kcywgcGFyZW50X2RpcikKKworCitjbGFzcyBCYXNlRHVtcGVyKG9iamVjdCk6CisgICAgIiIiIEJhc2UgY2xhc3MgdG8gZHVtcCBjb21tYW5kcyBmcm9tIGhvc3QvdGFyZ2V0ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIpOgorICAgICAgICBzZWxmLmNtZHMgPSBbXQorICAgICAgICBzZWxmLnBhcmVudF9kaXIgPSBwYXJlbnRfZGlyCisgICAgICAgIGlmIG5vdCBjbWRzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBjbWQgaW4gY21kcy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGNtZCA9IGNtZC5sc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGNtZCBvciBjbWRbMF0gPT0gJyMnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmNtZHMuYXBwZW5kKGNtZCkKKworICAgIGRlZiBjcmVhdGVfZGlyKHNlbGYsIGRpcl9zdWZmaXgpOgorICAgICAgICBkdW1wX3N1YmRpciA9ICgiJXNfJXMiICUgKAorICAgICAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJyksCisgICAgICAgICAgICAgICAgZGlyX3N1ZmZpeCkpCisgICAgICAgIGR1bXBfZGlyID0gb3MucGF0aC5qb2luKHNlbGYucGFyZW50X2RpciwgZHVtcF9zdWJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGR1bXBfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBpZiBlcnIuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgorICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKworICAgIGRlZiBfd3JpdGVfZHVtcChzZWxmLCBjb21tYW5kLCBvdXRwdXQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIEhvc3REdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gImhvc3QiCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBUYXJnZXREdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gInRhcmdldCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICJ1bmtub3duIgorICAgICAgICBmb3IgaSBpbiBpdGVydG9vbHMuY291bnQoKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gIiVzXyUwMmRfJXMiICUgKHByZWZpeCwgaSwgY29tbWFuZCkKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZHVtcF9kaXIsIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICB3aXRoIG9wZW4oZnVsbG5hbWUsICd3JykgYXMgZHVtcF9maWxlOgorICAgICAgICAgICAgZHVtcF9maWxlLndyaXRlKG91dHB1dCkKKworCitjbGFzcyBIb3N0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0aGUgaG9zdCBydW5uaW5nIHRoZSB0ZXN0cyAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzLCBwYXJlbnRfZGlyKToKKyAgICAgICAgc3VwZXIoSG9zdER1bXBlciwgc2VsZikuX19pbml0X18oY21kcywgcGFyZW50X2RpcikKKworICAgIGRlZiBkdW1wX2hvc3Qoc2VsZiwgZHVtcF9kaXI9IiIpOgorICAgICAgICBpZiBkdW1wX2RpcjoKKyAgICAgICAgICAgIHNlbGYuZHVtcF9kaXIgPSBkdW1wX2RpcgorICAgICAgICBmb3IgY21kIGluIHNlbGYuY21kczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIHJlc3VsdC5vdXRwdXQpCisKKworY2xhc3MgVGFyZ2V0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0YXJnZXQsIGl0IG9ubHkgd29ya3Mgd2l0aCBRZW11UnVubmVyICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIsIHFlbXVydW5uZXIpOgorICAgICAgICBzdXBlcihUYXJnZXREdW1wZXIsIHNlbGYpLl9faW5pdF9fKGNtZHMsIHBhcmVudF9kaXIpCisgICAgICAgIHNlbGYucnVubmVyID0gcWVtdXJ1bm5lcgorCisgICAgZGVmIGR1bXBfdGFyZ2V0KHNlbGYsIGR1bXBfZGlyPSIiKToKKyAgICAgICAgaWYgZHVtcF9kaXI6CisgICAgICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmNtZHM6CisgICAgICAgICAgICAjIFdlIGNhbiBjb250aW51ZSB3aXRoIHRoZSB0ZXN0aW5nIGlmIHNlcmlhbCBjb21tYW5kcyBmYWlsCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVubmVyLnJ1bl9zZXJpYWwoY21kKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIG91dHB1dCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmludCgiVHJpZWQgdG8gZHVtcCBpbmZvIGZyb20gdGFyZ2V0IGJ1dCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic2VyaWFsIGNvbnNvbGUgZmFpbGVkIikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9mdG9vbHMucHkgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWJlM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5CkBAIC0wLDAgKzEsMjcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2RlZiB3cml0ZV9maWxlKHBhdGgsIGRhdGEpOgorICAgIHdkYXRhID0gZGF0YS5yc3RyaXAoKSArICJcbiIKKyAgICB3aXRoIG9wZW4ocGF0aCwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgYXBwZW5kX2ZpbGUocGF0aCwgZGF0YSk6CisgICAgd2RhdGEgPSBkYXRhLnJzdHJpcCgpICsgIlxuIgorICAgIHdpdGggb3BlbihwYXRoLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgcmVhZF9maWxlKHBhdGgpOgorICAgIGRhdGEgPSBOb25lCisgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiByZW1vdmVfZnJvbV9maWxlKHBhdGgsIGRhdGEpOgorICAgIGxpbmVzID0gcmVhZF9maWxlKHBhdGgpLnNwbGl0bGluZXMoKQorICAgIHJtZGF0YSA9IGRhdGEuc3RyaXAoKS5zcGxpdGxpbmVzKCkKKyAgICBmb3IgbCBpbiBybWRhdGE6CisgICAgICAgIGZvciBjIGluIHJhbmdlKDAsIGxpbmVzLmNvdW50KGwpKToKKyAgICAgICAgICAgIGkgPSBsaW5lcy5pbmRleChsKQorICAgICAgICAgICAgZGVsKGxpbmVzW2ldKQorICAgIHdyaXRlX2ZpbGUocGF0aCwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2h0dHBzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MThkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKKworY2xhc3MgSFRUUFNlcnZlcihTaW1wbGVIVFRQU2VydmVyLkJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorCisgICAgZGVmIHNlcnZlcl9zdGFydChzZWxmLCByb290X2Rpcik6CisgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2lnbmFsLlNJR19ERkwpCisgICAgICAgIG9zLmNoZGlyKHJvb3RfZGlyKQorICAgICAgICBzZWxmLnNlcnZlX2ZvcmV2ZXIoKQorCitjbGFzcyBIVFRQUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdF9zdHIsICphcmdzKToKKyAgICAgICAgcGFzcworCitjbGFzcyBIVFRQU2VydmljZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RfZGlyLCBob3N0PScnKToKKyAgICAgICAgc2VsZi5yb290X2RpciA9IHJvb3RfZGlyCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gMAorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IEhUVFBTZXJ2ZXIoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwgSFRUUFJlcXVlc3RIYW5kbGVyKQorICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2VydmVyLnNlcnZlcl9wb3J0CisgICAgICAgIHNlbGYucHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLnNlcnZlci5zZXJ2ZXJfc3RhcnQsIGFyZ3M9W3NlbGYucm9vdF9kaXJdKQorICAgICAgICBzZWxmLnByb2Nlc3Muc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9jbG9zZSgpCisgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICBzZWxmLnByb2Nlc3Muam9pbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2I1MDM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQpAQCAtMCwwICsxLDEyNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgZnRvb2xzCisKKworIyBBIHBhcnNlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHdlYXRoZXIgYSBsaW5lIGlzIGEgdGVzdCByZXN1bHQgb3IgYSBzZWN0aW9uIHN0YXRlbWVudC4KK2NsYXNzIExwYXJzZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0XzBfcGFzc19yZWdleCwgdGVzdF8wX2ZhaWxfcmVnZXgsIHNlY3Rpb25fMF9iZWdpbl9yZWdleD1Ob25lLCBzZWN0aW9uXzBfZW5kX3JlZ2V4PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSBhcmd1bWVudHMgZGljdGlvbmFyeQorICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBrd2FyZ3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IHt9CisKKyAgICAgICAgIyBBZGQgdGhlIGRlZmF1bHQgYXJncyB0byB0aGUgZGljdGlvbmFyeQorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9wYXNzX3JlZ2V4J10gPSB0ZXN0XzBfcGFzc19yZWdleAorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9mYWlsX3JlZ2V4J10gPSB0ZXN0XzBfZmFpbF9yZWdleAorICAgICAgICBpZiBzZWN0aW9uXzBfYmVnaW5fcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9iZWdpbl9yZWdleCddID0gc2VjdGlvbl8wX2JlZ2luX3JlZ2V4CisgICAgICAgIGlmIHNlY3Rpb25fMF9lbmRfcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9lbmRfcmVnZXgnXSA9IHNlY3Rpb25fMF9lbmRfcmVnZXgKKworICAgICAgICBzZWxmLnRlc3RfcG9zc2libGVfc3RhdHVzID0gWydwYXNzJywgJ2ZhaWwnLCAnZXJyb3InXQorICAgICAgICBzZWxmLnNlY3Rpb25fcG9zc2libGVfc3RhdHVzID0gWydiZWdpbicsICdlbmQnXQorCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorCisKKyAgICAjIEluaXRpYWxpemUgdGhlIHBhcnNlciB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKyAgICBkZWYgaW5pdChzZWxmKToKKworICAgICAgICAjIGV4dHJhIGFyZ3VtZW50cyBjYW4gYmUgYWRkZWQgYnkgdGhlIHVzZXIgdG8gZGVmaW5lIG5ldyB0ZXN0IGFuZCBzZWN0aW9uIGNhdGVnb3JpZXMuIFRoZXkgbXVzdCBmb2xsb3cgYSBwcmUtZGVmaW5lZCBwYXR0ZXJuOiA8dHlwZT5fPGNhdGVnb3J5X25hbWU+XzxzdGF0dXM+X3JlZ2V4CisgICAgICAgIHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuID0gIl50ZXN0XyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi50ZXN0X3Bvc3NpYmxlX3N0YXR1cykpCisgICAgICAgIHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuID0gIl5zZWN0aW9uXyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi5zZWN0aW9uX3Bvc3NpYmxlX3N0YXR1cykpCisKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSB0ZXN0IGFuZCBzZWN0aW9uIHJlZ2V4IGRpY3Rpb25hcmllcworICAgICAgICBzZWxmLnRlc3RfcmVnZXggPSB7fQorICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXggPXt9CisKKyAgICAgICAgZm9yIGFyZywgdmFsdWUgaW4gc2VsZi5hcmdzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaGUgdmFsdWUgb2YgcHJvdmlkZWQgYXJndW1lbnQgJXMgaXMgJXMuIFNob3VsZCBoYXZlIGEgdmFsaWQgdmFsdWUuJyAlIChrZXksIHZhbHVlKSkKKyAgICAgICAgICAgIGlzX3Rlc3QgPSAgcmUuc2VhcmNoKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpc19zZWN0aW9uID0gcmUuc2VhcmNoKHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpZiBpc190ZXN0OgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc190ZXN0Lmdyb3VwKDEpIGluIHNlbGYudGVzdF9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZ2V4W2lzX3Rlc3QuZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnZXhbaXNfdGVzdC5ncm91cCgxKV1baXNfdGVzdC5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBpc19zZWN0aW9uOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19zZWN0aW9uLmdyb3VwKDEpIGluIHNlbGYuc2VjdGlvbl9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWN0aW9uX3JlZ2V4W2lzX3NlY3Rpb24uZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXhbaXNfc2VjdGlvbi5ncm91cCgxKV1baXNfc2VjdGlvbi5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRPRE86IE1ha2UgdGhlc2UgY2FsbCBhIHRyYWNlYmFjayBpbnN0ZWFkIG9mIGEgc2ltcGxlIGV4Y2VwdGlvbi4uCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgbmFtZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSB2YWxpZCB0eXBlLiBQbGVhc2UgZ2l2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczpcbmZvciB0ZXN0czogJXNcbmZvciBzZWN0aW9uczogJXMiICUgKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBzZWxmLnNlY3Rpb25fYXJndW1lbnRfcGF0dGVybikpCisKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKworICAgICMgUGFyc2UgYSBsaW5lIGFuZCByZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIHRoZSB0eXBlIG9mIHJlc3VsdCAodGVzdC9zZWN0aW9uKSBhbmQgaXRzIGNhdGVnb3J5LCBzdGF0dXMgYW5kIG5hbWUKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwYXJzZXIgaXMgbm90IGluaXRpYWxpemVkLi4iKQorCisgICAgICAgIGZvciB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1c19saXN0IGluIHNlbGYudGVzdF9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHRlc3Rfc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gdGVzdF9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3Rlc3QnLCB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1cywgdGVzdF9uYW1lLmdyb3VwKDEpXQorCisgICAgICAgIGZvciBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1c19saXN0IGluIHNlbGYuc2VjdGlvbl9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHNlY3Rpb25fc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gc2VjdGlvbl9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25fbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBzZWN0aW9uX25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3NlY3Rpb24nLCBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1cywgc2VjdGlvbl9uYW1lLmdyb3VwKDEpXQorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdF9kaWN0ID0ge30KKworICAgIGRlZiBzdG9yZShzZWxmLCBzZWN0aW9uLCB0ZXN0LCBzdGF0dXMpOgorICAgICAgICBpZiBub3Qgc2VjdGlvbiBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXSA9IFtdCisKKyAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXS5hcHBlbmQoKHRlc3QsIHN0YXR1cykpCisKKyAgICAjIHNvcnQgdGVzdHMgYnkgdGhlIHRlc3QgbmFtZSh0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUpLCBmb3IgZWFjaCBzZWN0aW9uLiBUaGlzIGNhbiBiZSBoZWxwZnVsIHdoZW4gdXNpbmcgZ2l0IHRvIGRpZmYgZm9yIGNoYW5nZXMgYnkgbWFraW5nIHN1cmUgdGhleSBhcmUgYWx3YXlzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgIGRlZiBzb3J0X3Rlc3RzKHNlbGYpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc29ydGVkX3Jlc3VsdHMgPSBzb3J0ZWQoc2VsZi5yZXN1bHRfZGljdFtwYWNrYWdlXSwga2V5PWxhbWJkYSB0dXA6IHR1cFswXSkKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2RpY3RbcGFja2FnZV0gPSBzb3J0ZWRfcmVzdWx0cworCisgICAgIyBMb2cgdGhlIHJlc3VsdHMgYXMgZmlsZXMuIFRoZSBmaWxlIG5hbWUgaXMgdGhlIHNlY3Rpb24gbmFtZSBhbmQgdGhlIGNvbnRlbnRzIGFyZSB0aGUgdGVzdHMgaW4gdGhhdCBzZWN0aW9uLgorICAgIGRlZiBsb2dfYXNfZmlsZXMoc2VsZiwgdGFyZ2V0X2RpciwgdGVzdF9zdGF0dXMpOgorICAgICAgICBzdGF0dXNfcmVnZXggPSByZS5jb21waWxlKCd8Jy5qb2luKG1hcChzdHIsIHRlc3Rfc3RhdHVzKSkpCisgICAgICAgIGlmIG5vdCB0eXBlKHRlc3Rfc3RhdHVzKSA9PSB0eXBlKFtdKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigidGVzdF9zdGF0dXMgc2hvdWxkIGJlIGEgbGlzdC4gR290ICIgKyBzdHIodGVzdF9zdGF0dXMpICsgIiBpbnN0ZWFkLiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfZGlyKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJXMiICUgdGFyZ2V0X2RpcikKKworICAgICAgICBmb3Igc2VjdGlvbiwgdGVzdF9yZXN1bHRzIGluIHNlbGYucmVzdWx0X2RpY3QuaXRlbXMoKToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgICAgICBmb3IgeCBpbiB0ZXN0X3N0YXR1czoKKyAgICAgICAgICAgICAgICBwcmVmaXggKz14KycuJworICAgICAgICAgICAgaWYgKHNlY3Rpb24gIT0gJycpOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBzZWN0aW9uCisgICAgICAgICAgICBzZWN0aW9uX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgcHJlZml4KQorICAgICAgICAgICAgIyBwdXJnZSB0aGUgZmlsZSBjb250ZW50cyBpZiBpdCBleGlzdHMKKyAgICAgICAgICAgIG9wZW4oc2VjdGlvbl9maWxlLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIGZvciB0ZXN0X3Jlc3VsdCBpbiB0ZXN0X3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgKHRlc3RfbmFtZSwgc3RhdHVzKSA9IHRlc3RfcmVzdWx0CisgICAgICAgICAgICAgICAgIyB3ZSBsb2cgb25seSB0aGUgdGVzdHMgd2l0aCBzdGF0dXMgaW4gdGhlIHRlc3Rfc3RhdHVzIGxpc3QKKyAgICAgICAgICAgICAgICBtYXRjaF9zdGF0dXMgPSBzdGF0dXNfcmVnZXguc2VhcmNoKHN0YXR1cykKKyAgICAgICAgICAgICAgICBpZiBtYXRjaF9zdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWN0aW9uX2ZpbGUsIHN0YXR1cyArICI6ICIgKyB0ZXN0X25hbWUpCisKKyAgICAjIE5vdCB5ZXQgaW1wbGVtZW50ZWQhCisgICAgZGVmIGxvZ190b19sYXZhKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9xZW11cnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmM5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQpAQCAtMCwwICsxLDUxOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyBmb3Igc3RhcnRpbmcgcWVtdSBpbWFnZXMgdXNpbmcgcnVucWVtdS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgZXJybm8KK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBIb3N0RHVtcGVyCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5RZW11UnVubmVyIikKKworY2xhc3MgUWVtdVJ1bm5lcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwgYm9vdHRpbWUsIGR1bXBfZGlyLCBkdW1wX2hvc3RfY21kcyk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisgICAgICAgIHNlbGYubG9nZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi50aHJlYWQgPSBOb25lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIgPSBIb3N0RHVtcGVyKGR1bXBfaG9zdF9jbWRzLCBkdW1wX2RpcikKKworICAgIGRlZiBjcmVhdGVfc29ja2V0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc29jay5iaW5kKCgiMTI3LjAuMC4xIiwwKSkKKyAgICAgICAgICAgIHNvY2subGlzdGVuKDIpCisgICAgICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ3JlYXRlZCBsaXN0ZW5pbmcgc29ja2V0IGZvciBxZW11IHNlcmlhbCBjb25zb2xlIG9uOiAxMjcuMC4wLjE6JXMiICUgcG9ydCkKKyAgICAgICAgICAgIHJldHVybiAoc29jaywgcG9ydCkKKworICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJXMiICUgbXNnKQorCisgICAgZGVmIGdldE91dHB1dChzZWxmLCBvKToKKyAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgIGZsID0gZmNudGwuZmNudGwobywgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwobywgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICByZXR1cm4gb3MucmVhZChvLmZpbGVubygpLCAxMDAwMDAwKQorCisKKyAgICBkZWYgaGFuZGxlU0lHQ0hMRChzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaWYgc2VsZi5ydW5xZW11IGFuZCBzZWxmLnJ1bnFlbXUucG9sbCgpOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KHNlbGYucnVucWVtdS5zdGRvdXQpKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBpZiBzZWxmLmRpc3BsYXk6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJESVNQTEFZIl0gPSBzZWxmLmRpc3BsYXkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVG8gc3RhcnQgcWVtdSBJIG5lZWQgYSBYIGRlc2t0b3AsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MSkiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgVE1QRElSIHBhdGggJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIk9FX1RNUERJUiJdID0gc2VsZi50bXBkaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgREVQTE9ZX0RJUl9JTUFHRSBwYXRoICVzIiAlIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiREVQTE9ZX0RJUl9JTUFHRSJdID0gc2VsZi5kZXBsb3lfZGlyX2ltYWdlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGhyZWFkc29jaywgdGhyZWFkcG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQsIHNlbGYuc2VydmVycG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIgJSBtc2dbMV0pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIFNldCB0aGlzIGZsYWcgc28gdGhhdCBRZW11IGRvZXNuJ3QgZG8gYW55IGdyYWJzIGFzIFNETCBncmFicyBpbnRlcmFjdAorICAgICAgICAjIGJhZGx5IHdpdGggc2NyZWVuc2F2ZXJzLgorICAgICAgICBvcy5lbnZpcm9uWyJRRU1VX0RPTlRfR1JBQiJdID0gIjEiCisgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9ICdib290cGFyYW1zPSJjb25zb2xlPXR0eTEgY29uc29sZT10dHlTMCwxMTUyMDBuOCIgcWVtdXBhcmFtcz0iLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOnt9IicuZm9ybWF0KHRocmVhZHBvcnQpCisgICAgICAgIGlmIHFlbXVwYXJhbXM6CisgICAgICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSBzZWxmLnFlbXVwYXJhbXNbOi0xXSArICIgIiArIHFlbXVwYXJhbXMgKyAiICIgKyAnXCInCisKKyAgICAgICAgc2VsZi5vcmlnY2hsZGhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdDSExEKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLmhhbmRsZVNJR0NITEQpCisKKyAgICAgICAgbGF1bmNoX2NtZCA9ICdydW5xZW11IHRjcHNlcmlhbD0lcyAlcyAlcyAlcycgJSAoc2VsZi5zZXJ2ZXJwb3J0LCBzZWxmLm1hY2hpbmUsIHNlbGYucm9vdGZzLCBzZWxmLnFlbXVwYXJhbXMpCisgICAgICAgICMgRklYTUU6IFdlIHBhc3MgaW4gc3RkaW49c3VicHJvY2Vzcy5QSVBFIGhlcmUgdG8gd29yayBhcm91bmQgc3R0eQorICAgICAgICAjIGJsb2NraW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnFlbXUgc2NyaXB0IHdoZW4gdXNpbmcgdGhpcyB3aXRoaW4KKyAgICAgICAgIyBvZS1zZWxmdGVzdCAodGhpcyBtYWtlcyBzdHR5IGVycm9yIG91dCBpbW1lZGlhdGVseSkuIFRoZXJlIG91Z2h0CisgICAgICAgICMgdG8gYmUgYSBwcm9wZXIgZml4IGJ1dCB0aGlzIHdpbGwgc3VmZmljZSBmb3Igbm93LgorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBwcmVleGVjX2ZuPW9zLnNldHBncnApCisgICAgICAgIG91dHB1dCA9IHNlbGYucnVucWVtdS5zdGRvdXQKKworICAgICAgICAjCisgICAgICAgICMgV2UgbmVlZCB0aGUgcHJlZXhlY19mbiBhYm92ZSBzbyB0aGF0IGFsbCBydW5xZW11IHByb2Nlc3NlcyBjYW4gZWFzaWx5IGJlIGtpbGxlZCAKKyAgICAgICAgIyAoYnkga2lsbGluZyB0aGVpciBwcm9jZXNzIGdyb3VwKS4gVGhpcyBwcmVzZW50cyBhIHByb2JsZW0gaWYgdGhpcyBjb250cm9sbGluZworICAgICAgICAjIHByb2Nlc3MgaXRzZWxmIGlzIGtpbGxlZCBob3dldmVyIHNpbmNlIHRob3NlIHByb2Nlc3NlcyBkb24ndCBub3RpY2UgdGhlIGRlYXRoIAorICAgICAgICAjIG9mIHRoZSBwYXJlbnQgYW5kIG1lcnJpbHkgY29udGludWUgb24uCisgICAgICAgICMKKyAgICAgICAgIyBSYXRoZXIgdGhhbiBoYWNrIHJ1bnFlbXUgdG8gZGVhbCB3aXRoIHRoaXMsIHdlIGFkZCBzb21ldGhpbmcgaGVyZSBpbnN0ZWFkLiAKKyAgICAgICAgIyBCYXNpY2FsbHkgd2UgZm9yayBvZmYgYW5vdGhlciBwcm9jZXNzIHdoaWNoIGhvbGRzIGFuIG9wZW4gcGlwZSB0byB0aGUgcGFyZW50CisgICAgICAgICMgYW5kIGFsc28gaXMgc2V0cGdycC4gSWYvd2hlbiB0aGUgcGlwZSBzZWVzIEVPRiBmcm9tIHRoZSBwYXJlbnQgZGllaW5nLCBpdCBraWxscworICAgICAgICAjIHRoZSBwcm9jZXNzIGdyb3VwLiBUaGlzIGlzIGxpa2UgcGN0cmwncyBQREVBVEhTSUcgYnV0IGZvciBhIHByb2Nlc3MgZ3JvdXAKKyAgICAgICAgIyByYXRoZXIgdGhhbiBhIHNpbmdsZSBwcm9jZXNzLgorICAgICAgICAjCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5tb25pdG9ycGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHNlbGYubW9uaXRvcnBpZDoKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICBzZWxmLm1vbml0b3JwaXBlID0gb3MuZmRvcGVuKHcsICJ3IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2hpbGQgcHJvY2VzcworICAgICAgICAgICAgb3Muc2V0cGdycCgpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgciA9IG9zLmZkb3BlbihyKQorICAgICAgICAgICAgeCA9IHIucmVhZCgpCisgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJydW5xZW11IHN0YXJ0ZWQsIHBpZCBpcyAlcyIgJSBzZWxmLnJ1bnFlbXUucGlkKQorICAgICAgICBsb2dnZXIuaW5mbygid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnBvbGwoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICAgICAgIyBObyBwb2ludCB3YWl0aW5nIGFueSBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBzZWxmLmdldE91dHB1dChvdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygicWVtdSBzdGFydGVkIC0gcWVtdSBwcm9jY2VzIHBpZCBpcyAlcyIgJSBzZWxmLnFlbXVwaWQpCisgICAgICAgICAgICBjbWRsaW5lID0gJycKKyAgICAgICAgICAgIHdpdGggb3BlbignL3Byb2MvJXMvY21kbGluZScgJSBzZWxmLnFlbXVwaWQpIGFzIHA6CisgICAgICAgICAgICAgICAgY21kbGluZSA9IHAucmVhZCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXBzID0gcmUuZmluZGFsbCgiKCg/OlswLTldezEsM31cLil7M31bMC05XXsxLDN9KSIsIGNtZGxpbmUuc3BsaXQoImlwPSIpWzFdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpcHMgb3IgbGVuKGlwcykgIT0gMzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaXAgPSBpcHNbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBpcHNbMV0KKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yLCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZG4ndCBnZXQgaXAgZnJvbSBxZW11IHByb2Nlc3MgYXJndW1lbnRzISBIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCBvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJxZW11IGNtZGxpbmUgdXNlZDpcbnt9Ii5mb3JtYXQoY21kbGluZSkpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGluZyBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgICAgICBzZWxmLnRocmVhZCA9IExvZ2dpbmdUaHJlYWQoc2VsZi5sb2csIHRocmVhZHNvY2ssIGxvZ2dlcikKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRocmVhZC5jb25uZWN0aW9uX2VzdGFibGlzaGVkLndhaXQoc2VsZi5ib290dGltZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJEaWRuJ3QgcmVjZWl2ZSBhIGNvbnNvbGUgY29ubmVjdGlvbiBmcm9tIHFlbXUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlcmUgaXMgdGhlIHFlbXUgY29tbWFuZCBsaW5lIHVzZWQ6XG4lc1xuYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSAoY21kbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXYWl0aW5nIGF0IG1vc3QgJWQgc2Vjb25kcyBmb3IgbG9naW4gYmFubmVyIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLmJvb3R0aW1lCisgICAgICAgICAgICBzb2NrbGlzdCA9IFtzZWxmLnNlcnZlcl9zb2NrZXRdCisgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBGYWxzZQorICAgICAgICAgICAgc3RvcHJlYWQgPSBGYWxzZQorICAgICAgICAgICAgcWVtdXNvY2sgPSBOb25lCisgICAgICAgICAgICBib290bG9nID0gJycKKyAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgZW5kdGltZSBhbmQgbm90IHN0b3ByZWFkOgorICAgICAgICAgICAgICAgIHNyZWFkLCBzd3JpdGUsIHNlcnJvciA9IHNlbGVjdC5zZWxlY3Qoc29ja2xpc3QsIFtdLCBbXSwgNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBzZWxmLnNlcnZlcl9zb2NrZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBxZW11c29jaywgYWRkciA9IHNlbGYuc2VydmVyX3NvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcWVtdXNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LmFwcGVuZChxZW11c29jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzZWxmLnNlcnZlcl9zb2NrZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiAlIGFkZHIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2cgKz0gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgiLiogbG9naW46IiwgYm9vdGxvZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IHFlbXVzb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZWFjaGVkIGxvZ2luIGJhbm5lciIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBub3QgcmVhY2hlZGxvZ2luOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXJnZXQgZGlkbid0IHJlYWNoZWQgbG9naW4gYm9vdCBpbiAlZCBzZWNvbmRzIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICAgICAgbGluZXMgPSAiXG4iLmpvaW4oYm9vdGxvZy5zcGxpdGxpbmVzKClbLTI1Ol0pCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxhc3QgMjUgbGluZXMgb2YgdGV4dDpcbiVzIiAlIGxpbmVzKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDaGVjayBmdWxsIGJvb3QgbG9nOiAlcyIgJSBzZWxmLmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAjIElmIHdlIGFyZSBub3QgYWJsZSB0byBsb2dpbiB0aGUgdGVzdHMgY2FuIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVuX3NlcmlhbCgicm9vdFxuIiwgcmF3PVRydWUpCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJyb290QFthLXpBLVowLTlcLV0rOn4jIiwgb3V0cHV0KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJMb2dnZWQgYXMgcm9vdCBpbiBzZXJpYWwgY29uc29sZSIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkbid0IGxvZ2luIGludG8gc2VyaWFsIGNvbnNvbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhcyByb290IHVzaW5nIGJsYW5rIHBhc3N3b3JkIikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VyaWFsIGNvbnNvbGUgZmFpbGVkIHdoaWxlIHRyeWluZyB0byBsb2dpbiIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJRZW11IHBpZCBkaWRuJ3QgYXBwZWFyZWQgaW4gJXMgc2Vjb25kcyIgJSBzZWxmLnJ1bnFlbXV0aW1lKQorICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgIGlmIHNlbGYucnVucWVtdToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYub3JpZ2NobGRoYW5kbGVyKQorICAgICAgICAgICAgb3Mua2lsbChzZWxmLm1vbml0b3JwaWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byBydW5xZW11IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVNSQ0g6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLnJ1bnFlbXV0aW1lCisgICAgICAgICAgICB3aGlsZSBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZW5kdGltZToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHS0lMTCB0byBydW5xZW11IikKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NlcnZlcl9zb2NrZXQnKSBhbmQgc2VsZi5zZXJ2ZXJfc29ja2V0OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5xZW11cGlkID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLm9yaWdjaGxkaGFuZGxlcikKKworICAgIGRlZiBzdG9wX3RocmVhZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50aHJlYWQgYW5kIHNlbGYudGhyZWFkLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLnRocmVhZC5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBsb2dnZXIuaW5mbygiUmVzdGFydGluZyBxZW11IHByb2Nlc3MiKQorICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICBpZiBzZWxmLnN0YXJ0KHFlbXVwYXJhbXMpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bnFlbXU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcWVtdV9jaGlsZCA9IHNlbGYuZmluZF9jaGlsZChzdHIoc2VsZi5ydW5xZW11LnBpZCkpCisgICAgICAgIGlmIHFlbXVfY2hpbGQ6CisgICAgICAgICAgICBzZWxmLnFlbXVwaWQgPSBxZW11X2NoaWxkWzBdCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2MvIiArIHN0cihzZWxmLnFlbXVwaWQpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB0Y3AiIGluIGNvbW1hbmRzW3BdOgorICAgICAgICAgICAgICAgIHJldHVybiBbaW50KHApLGNvbW1hbmRzW3BdXQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCwgcmF3PUZhbHNlKToKKyAgICAgICAgIyBXZSBhc3N1bWUgdGFyZ2V0IHN5c3RlbSBoYXZlIGVjaG8gdG8gZ2V0IGNvbW1hbmQgc3RhdHVzCisgICAgICAgIGlmIG5vdCByYXc6CisgICAgICAgICAgICBjb21tYW5kID0gIiVzOyBlY2hvICQ/XG4iICUgY29tbWFuZAorICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuc2VuZGFsbChjb21tYW5kKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgIHNyZWFkLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2ZXJfc29ja2V0XSxbXSxbXSw1KQorICAgICAgICAgICAgZm9yIHNvY2sgaW4gc3JlYWQ6CisgICAgICAgICAgICAgICAgYW5zd2VyID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAjIFNlYXJjaCB0aGUgcHJvbXB0IHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJbYS16QS1aMC05XStAW2EtekEtWjAtOVwtXSs6fiMiLCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gc2VyaWFsIGNvbnNvbGUgc29ja2V0IikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIGlmIHJhdzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGZpcnN0IGxpbmUgKGNvbW1hbmQgbGluZSkgYW5kIGxhc3QgbGluZSAocHJvbXB0KQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEuZmluZCgnJD9cclxuJykrNDpkYXRhLnJmaW5kKCdcclxuJyldCisgICAgICAgICAgICAgICAgaW5kZXggPSBkYXRhLnJmaW5kKCdcclxuJykKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGFbaW5kZXgrMjpdCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzppbmRleF0KKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX2NtZCA9PSAiMCIpOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgIHJldHVybiAoc3RhdHVzLCBzdHIoZGF0YSkpCisKKworICAgIGRlZiBfZHVtcF9ob3N0KHNlbGYpOgorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmNyZWF0ZV9kaXIoInFlbXUiKQorICAgICAgICBsb2dnZXIud2FybigiUWVtdSBlbmRlZCB1bmV4cGVjdGVkbHksIGR1bXAgZGF0YSBmcm9tIGhvc3QiCisgICAgICAgICAgICAgICAgIiBpcyBpbiAlcyIgJSBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfZGlyKQorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfaG9zdCgpCisKKyMgVGhpcyBjbGFzcyBpcyBmb3IgcmVhZGluZyBkYXRhIGZyb20gYSBzb2NrZXQgYW5kIHBhc3NpbmcgaXQgdG8gbG9nZnVuYworIyB0byBiZSBwcm9jZXNzZWQuIEl0J3MgY29tcGxldGVseSBldmVudCBkcml2ZW4gYW5kIGhhcyBhIHN0cmFpZ2h0Zm9yd2FyZAorIyBldmVudCBsb29wLiBUaGUgbWVjaGFuaXNtIGZvciBzdG9wcGluZyB0aGUgdGhyZWFkIGlzIGEgc2ltcGxlIHBpcGUgd2hpY2gKKyMgd2lsbCB3YWtlIHVwIHRoZSBwb2xsIGFuZCBhbGxvdyBmb3IgdGVhcmluZyBldmVyeXRoaW5nIGRvd24uCitjbGFzcyBMb2dnaW5nVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dmdW5jLCBzb2NrLCBsb2dnZXIpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnNlcnZlcnNvY2sgPSBzb2NrCisgICAgICAgIHNlbGYubG9nZnVuYyA9IGxvZ2Z1bmMKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2VsZi5yZWFkc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKworICAgICAgICBzZWxmLmVycm9yZXZlbnRzID0gc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTEhVUCB8IHNlbGVjdC5QT0xMTlZBTAorICAgICAgICBzZWxmLnJlYWRldmVudHMgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYsIHRhcmdldD1zZWxmLnRocmVhZHRhcmdldCkKKworICAgIGRlZiB0aHJlYWR0YXJnZXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRsb29wKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudGVhcmRvd24oKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RhcnRpbmcgbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICBzZWxmLnJlYWRwaXBlLCBzZWxmLndyaXRlcGlwZSA9IG9zLnBpcGUoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnJ1bihzZWxmKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3BwaW5nIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgaWYgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi53cml0ZXBpcGUsICJzdG9wIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiVGVhcmluZyBkb3duIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgc2VsZi5jbG9zZV9zb2NrZXQoc2VsZi5zZXJ2ZXJzb2NrKQorCisgICAgICAgIGlmIHNlbGYucmVhZHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNsb3NlX3NvY2tldChzZWxmLnJlYWRzb2NrKQorCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYucmVhZHBpcGUpCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYud3JpdGVwaXBlKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIGV2ZW50bG9vcChzZWxmKToKKyAgICAgICAgcG9sbCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgZXZlbnRtYXNrID0gc2VsZi5lcnJvcmV2ZW50cyB8IHNlbGYucmVhZGV2ZW50cworICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYuc2VydmVyc29jay5maWxlbm8oKSkKKyAgICAgICAgcG9sbC5yZWdpc3RlcihzZWxmLnJlYWRwaXBlLCBldmVudG1hc2spCisKKyAgICAgICAgYnJlYWtvdXQgPSBGYWxzZQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0YXJ0aW5nIHRocmVhZCBldmVudCBsb29wIikKKyAgICAgICAgd2hpbGUgbm90IGJyZWFrb3V0OgorICAgICAgICAgICAgZXZlbnRzID0gcG9sbC5wb2xsKCkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBvY2N1cnJlZCwgYmFpbCBvdXQKKyAgICAgICAgICAgICAgICBpZiBldmVudFsxXSAmIHNlbGYuZXJyb3JldmVudHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihzZWxmLnN0cmluZ2lmeV9ldmVudChldmVudFsxXSkpCisKKyAgICAgICAgICAgICAgICAjIEV2ZW50IHRvIHN0b3AgdGhlIHRocmVhZAorICAgICAgICAgICAgICAgIGlmIHNlbGYucmVhZHBpcGUgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3AgZXZlbnQgcmVjZWl2ZWQiKQorICAgICAgICAgICAgICAgICAgICBicmVha291dCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgQSBjb25uZWN0aW9uIHJlcXVlc3Qgd2FzIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnNlcnZlcnNvY2suZmlsZW5vKCkgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkNvbm5lY3Rpb24gcmVxdWVzdCByZWNlaXZlZCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZHNvY2ssIF8gPSBzZWxmLnNlcnZlcnNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnVucmVnaXN0ZXIoc2VsZi5zZXJ2ZXJzb2NrLmZpbGVubygpKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYucmVhZHNvY2suZmlsZW5vKCkpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU2V0dGluZyBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGV2ZW50IikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2VzdGFibGlzaGVkLnNldCgpCisKKyAgICAgICAgICAgICAgICAjIEFjdHVhbCBkYXRhIHRvIGJlIGxvZ2dlZAorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5yZWFkc29jay5maWxlbm8oKSA9PSBldmVudFswXToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2Z1bmMoZGF0YSkKKworICAgICMgU2luY2UgdGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcgbWFrZSBzdXJlIHRvIGhvbm9yIEVBR0FJTgorICAgICMgYW5kIEVXT1VMREJMT0NLLgorICAgIGRlZiByZWN2KHNlbGYsIGNvdW50KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZHNvY2sucmVjdihjb3VudCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUdBSU4gb3IgZS5lcnJubyA9PSBlcnJuby5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gcmVhZCByZWFkeSBzb2NrZXQiKQorICAgICAgICBlbGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgIyBUaGlzIGFjdHVhbGx5IG1lYW5zIGFuIG9yZGVybHkgc2h1dGRvd24KKyAgICAgICAgICAgICMgaGFwcGVuZWQuIEJ1dCBmb3IgdGhpcyBjb2RlIGl0IGNvdW50cyBhcyBhbgorICAgICAgICAgICAgIyBlcnJvciBzaW5jZSB0aGUgY29ubmVjdGlvbiBzaG91bGRuJ3QgZ28gYXdheQorICAgICAgICAgICAgIyB1bnRpbCBxZW11IGV4aXRzLgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb25zb2xlIGNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseSIpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzdHJpbmdpZnlfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICB2YWwgPSAnJworICAgICAgICBpZiBzZWxlY3QuUE9MTEVSUiA9PSBldmVudDoKKyAgICAgICAgICAgIHZhbCA9ICdQT0xMRVInCisgICAgICAgIGVsaWYgc2VsZWN0LlBPTExIVVAgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTEhVUCcKKyAgICAgICAgZWxpZiBzZWxlY3QuUE9MTE5WQUwgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTE5WQUwnCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBjbG9zZV9zb2NrZXQoc2VsZiwgc29jayk6CisgICAgICAgIHNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBkZWYgY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYsIGZkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5IGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXV0aW55cnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTUxMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXRpbnlydW5uZXIucHkKQEAgLTAsMCArMSwxNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgZm9yIHN0YXJ0aW5nIHFlbXUgaW1hZ2VzIG9mIHBva3kgdGlueS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgYmIKK2Zyb20gcWVtdXJ1bm5lciBpbXBvcnQgUWVtdVJ1bm5lcgorCitjbGFzcyBRZW11VGlueVJ1bm5lcihRZW11UnVubmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwga2VybmVsLCBib290dGltZSk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuc29ja2V0ZmlsZSA9ICJjb25zb2xlLnNvY2siCisgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXJuZWwgPSBrZXJuZWwKKworCisgICAgZGVmIGNyZWF0ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHRyaWVzID0gMworICAgICAgICB3aGlsZSB0cmllcyA+IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jb25uZWN0KHNlbGYuc29ja2V0ZmlsZSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGVkIGxpc3RlbmluZyBzb2NrZXQgZm9yIHFlbXUgc2VyaWFsIGNvbnNvbGUuIikKKyAgICAgICAgICAgICAgICB0cmllcyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQuIikKKyAgICAgICAgICAgICAgICB0cmllcyAtPSAxCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorCisgICAgICAgIGlmIHNlbGYuZGlzcGxheToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRJU1BMQVkiXSA9IHNlbGYuZGlzcGxheQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoIlRvIHN0YXJ0IHFlbXUgSSBuZWVkIGEgWCBkZXNrdG9wLCBwbGVhc2Ugc2V0IERJU1BMQVkgY29ycmVjdGx5IChlLmcuIERJU1BMQVk9OjEpIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgYmIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBiYi5lcnJvcigiSW52YWxpZCBUTVBESVIgcGF0aCAlcyIgJSBzZWxmLnRtcGRpcikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiT0VfVE1QRElSIl0gPSBzZWxmLnRtcGRpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgICAgIGJiLmVycm9yKCJJbnZhbGlkIERFUExPWV9ESVJfSU1BR0UgcGF0aCAlcyIgJSBzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRFUExPWV9ESVJfSU1BR0UiXSA9IHNlbGYuZGVwbG95X2Rpcl9pbWFnZQorCisgICAgICAgICMgU2V0IHRoaXMgZmxhZyBzbyB0aGF0IFFlbXUgZG9lc24ndCBkbyBhbnkgZ3JhYnMgYXMgU0RMIGdyYWJzIGludGVyYWN0CisgICAgICAgICMgYmFkbHkgd2l0aCBzY3JlZW5zYXZlcnMuCisgICAgICAgIG9zLmVudmlyb25bIlFFTVVfRE9OVF9HUkFCIl0gPSAiMSIKKyAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gJy0tYXBwZW5kICJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwIiAtbm9ncmFwaGljIC1zZXJpYWwgdW5peDolcyxzZXJ2ZXIsbm93YWl0JyAlIHNlbGYuc29ja2V0ZmlsZQorCisgICAgICAgIGxhdW5jaF9jbWQgPSAncWVtdS1zeXN0ZW0taTM4NiAta2VybmVsICVzIC1pbml0cmQgJXMgJXMnICUgKHNlbGYua2VybmVsLCBzZWxmLnJvb3Rmcywgc2VsZi5xZW11cGFyYW1zKQorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsc2hlbGw9VHJ1ZSxzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCxwcmVleGVjX2ZuPW9zLnNldHBncnApCisKKyAgICAgICAgYmIubm90ZSgicnVucWVtdSBzdGFydGVkLCBwaWQgaXMgJXMiICUgc2VsZi5ydW5xZW11LnBpZCkKKyAgICAgICAgYmIubm90ZSgid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIGJiLm5vdGUoInFlbXUgc3RhcnRlZCAtIHFlbXUgcHJvY2NlcyBwaWQgaXMgJXMiICUgc2VsZi5xZW11cGlkKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlFlbXUgcGlkIGRpZG4ndCBhcHBlYXJlZCBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bnFlbXUuc3Rkb3V0CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgYmIubm90ZSgiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIG91dHB1dC5yZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgcnVuX3NlcmlhbChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LnNlbmRhbGwoY29tbWFuZCsnXG4nKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgICAgICBzcmVhZCwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc2VydmVyX3NvY2tldF0sW10sW10sNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlciA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgcmV0dXJuIChzdGF0dXMsIHN0cihkYXRhKSkKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB1bml4IiBpbiBjb21tYW5kc1twXToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2ludChwKSxjb21tYW5kc1twXV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy9zc2hjb250cm9sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjUwNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgUHJvdmlkZXMgYSBjbGFzcyBmb3Igc2V0dGluZyB1cCBzc2ggY29ubmVjdGlvbnMsCisjIHJ1bm5pbmcgY29tbWFuZHMgYW5kIGNvcHlpbmcgZmlsZXMgdG8vZnJvbSBhIHRhcmdldC4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzIGFuZCB0ZXN0cyBpbiBsaWIvb2VxYS9ydW50aW1lLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdAorCisKK2NsYXNzIFNTSFByb2Nlc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipvcHRpb25zKToKKworICAgICAgICBzZWxmLmRlZmF1bHRvcHRzID0geworICAgICAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICJzdGRlcnIiOiBzdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICJzdGRpbiI6IE5vbmUsCisgICAgICAgICAgICAic2hlbGwiOiBGYWxzZSwKKyAgICAgICAgICAgICJidWZzaXplIjogLTEsCisgICAgICAgICAgICAicHJlZXhlY19mbiI6IG9zLnNldHNpZCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBkaWN0KHNlbGYuZGVmYXVsdG9wdHMpCisgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBOb25lCisgICAgICAgIHNlbGYub3V0cHV0ID0gTm9uZQorICAgICAgICBzZWxmLnByb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gTm9uZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBOb25lCisKKyAgICAgICAgIyBVbnNldCBESVNQTEFZIHdoaWNoIG1lYW5zIHdlIHdvbid0IHRyaWdnZXIgU1NIX0FTS1BBU1MKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgaWYgIkRJU1BMQVkiIGluIGVudjoKKyAgICAgICAgICAgIGRlbCBlbnZbJ0RJU1BMQVknXQorICAgICAgICBzZWxmLm9wdGlvbnNbJ2VudiddID0gZW52CisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzIiAlIG1zZykKKworICAgIGRlZiBfcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG91dHB1dCA9ICcnCisgICAgICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgKipzZWxmLm9wdGlvbnMpCisgICAgICAgIGlmIHRpbWVvdXQ6CisgICAgICAgICAgICBlbmR0aW1lID0gc2VsZi5zdGFydHRpbWUgKyB0aW1lb3V0CisgICAgICAgICAgICBlb2YgPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCBlbmR0aW1lIGFuZCBub3QgZW9mOgorICAgICAgICAgICAgICAgIGlmIHNlbGVjdC5zZWxlY3QoW3NlbGYucHJvY2Vzcy5zdGRvdXRdLCBbXSwgW10sIDUpWzBdICE9IFtdOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnByb2Nlc3Muc3Rkb3V0LmZpbGVubygpLCAxMDI0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisKKworICAgICAgICAgICAgIyBwcm9jZXNzIGhhc24ndCByZXR1cm5lZCB5ZXQKKyAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbGFzdGxpbmUgPSAiXG5Qcm9jZXNzIGtpbGxlZCAtIG5vIG91dHB1dCBmb3IgJWQgc2Vjb25kcy4gVG90YWwgcnVubmluZyB0aW1lOiAlZCBzZWNvbmRzLiIgJSAodGltZW91dCwgdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0dGltZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZyhsYXN0bGluZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGFzdGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBzZWxmLmxvZyhvdXRwdXQucnN0cmlwKCkpCisKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnByb2Nlc3Mud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0LnJzdHJpcCgpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuKGNvbW1hbmQsIHRpbWVvdXQsIGxvZ2ZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgTmVlZCB0byBndWFyZCBhZ2FpbnN0IGEgU3lzdGVtRXhpdCBvciBvdGhlciBleGNlcHRpb24gb2NjdXJpbmcgd2hpbHN0IHJ1bm5pbmcKKyAgICAgICAgICAgICMgYW5kIGVuc3VyZSB3ZSBkb24ndCBsZWF2ZSBhIHByb2Nlc3MgYmVoaW5kLgorICAgICAgICAgICAgaWYgc2VsZi5wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiAoc2VsZi5zdGF0dXMsIHNlbGYub3V0cHV0KQorCitjbGFzcyBTU0hDb250cm9sKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlwLCBsb2dmaWxlPU5vbmUsIHRpbWVvdXQ9MzAwLCB1c2VyPSdyb290JywgcG9ydD1Ob25lKToKKyAgICAgICAgc2VsZi5pcCA9IGlwCisgICAgICAgIHNlbGYuZGVmYXVsdHRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuaWdub3JlX3N0YXR1cyA9IFRydWUKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisgICAgICAgIHNlbGYuc3NoX29wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgJy1vJywgJ1VzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwnLAorICAgICAgICAgICAgICAgICctbycsICdTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nLAorICAgICAgICAgICAgICAgICctbycsICdMb2dMZXZlbD1FUlJPUicKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuc3NoID0gWydzc2gnLCAnLWwnLCBzZWxmLnVzZXIgXSArIHNlbGYuc3NoX29wdGlvbnMKKyAgICAgICAgc2VsZi5zY3AgPSBbJ3NjcCddICsgc2VsZi5zc2hfb3B0aW9ucworICAgICAgICBpZiBwb3J0OgorICAgICAgICAgICAgc2VsZi5zc2ggPSBzZWxmLnNzaCArIFsgJy1wJywgcG9ydCBdCisgICAgICAgICAgICBzZWxmLnNjcCA9IHNlbGYuc2NwICsgWyAnLVAnLCBwb3J0IF0KKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9pbnRlcm5hbF9ydW4oc2VsZiwgY29tbWFuZCwgdGltZW91dD1Ob25lLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSk6CisgICAgICAgIHNlbGYubG9nKCJbUnVubmluZ10kICVzIiAlICIgIi5qb2luKGNvbW1hbmQpKQorCisgICAgICAgIHByb2MgPSBTU0hQcm9jZXNzKCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBwcm9jLnJ1bihjb21tYW5kLCB0aW1lb3V0LCBsb2dmaWxlPXNlbGYubG9nZmlsZSkKKworICAgICAgICBzZWxmLmxvZygiW0NvbW1hbmQgcmV0dXJuZWQgJyVkJyBhZnRlciAlLjJmIHNlY29uZHNdIiAlIChzdGF0dXMsIHRpbWUudGltZSgpIC0gcHJvYy5zdGFydHRpbWUpKQorCisgICAgICAgIGlmIHN0YXR1cyBhbmQgbm90IGlnbm9yZV9zdGF0dXM6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkOlxuJXMiICUgKGNvbW1hbmQsIHN0YXR1cywgb3V0cHV0KSkKKworICAgICAgICByZXR1cm4gKHN0YXR1cywgb3V0cHV0KQorCisgICAgZGVmIHJ1bihzZWxmLCBjb21tYW5kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZCAtIHNzaCBjb21tYW5kIHRvIHJ1bgorICAgICAgICB0aW1lb3V0PTx2YWw+IC0ga2lsbCBjb21tYW5kIGlmIHRoZXJlIGlzIG5vIG91dHB1dCBhZnRlciA8dmFsPiBzZWNvbmRzCisgICAgICAgIHRpbWVvdXQ9Tm9uZSAtIGtpbGwgY29tbWFuZCBpZiB0aGVyZSBpcyBubyBvdXRwdXQgYWZ0ZXIgYSBkZWZhdWx0IHZhbHVlIHNlY29uZHMKKyAgICAgICAgdGltZW91dD0wIC0gbm8gdGltZW91dCwgbGV0IGNvbW1hbmQgcnVuIHVudGlsIGl0IHJldHVybnMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNvdXJjZSAvZXRjL3Byb2ZpbGUgZm9yIGEgcHJvcGVyIFBBVEggb24gdGhlIHRhcmdldAorICAgICAgICBjb21tYW5kID0gc2VsZi5zc2ggKyBbc2VsZi5pcCwgJyAuIC9ldGMvcHJvZmlsZTsgJyArIGNvbW1hbmRdCisKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBzZWxmLmRlZmF1bHR0aW1lb3V0LCBzZWxmLmlnbm9yZV9zdGF0dXMpCisgICAgICAgIGlmIHRpbWVvdXQgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgTm9uZSwgc2VsZi5pZ25vcmVfc3RhdHVzKQorICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIHRpbWVvdXQsIHNlbGYuaWdub3JlX3N0YXR1cykKKworICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6CisgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFtsb2NhbHBhdGgsICclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICBjb21tYW5kID0gc2VsZi5zY3AgKyBbJyVzQCVzOiVzJyAlIChzZWxmLnVzZXIsIHNlbGYuaXAsIHJlbW90ZXBhdGgpLCBsb2NhbHBhdGhdCisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weSBiL3lvY3RvLXBva3kvbWV0YS9saWIvb2VxYS91dGlscy90YXJnZXRidWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODUwZDc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL2xpYi9vZXFhL3V0aWxzL3RhcmdldGJ1aWxkLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBQcm92aWRlcyBhIGNsYXNzIGZvciBhdXRvbWF0aW5nIGJ1aWxkIHRlc3RzIGZvciBwcm9qZWN0cworCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2NsYXNzIEJ1aWxkUHJvamVjdCgpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWU9Tm9uZSwgdG1wZGlyPSIvdG1wLyIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuYXJjaGl2ZSA9IG9zLnBhdGguYmFzZW5hbWUodXJpKQorICAgICAgICBzZWxmLmxvY2FsYXJjaGl2ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsc2VsZi5hcmNoaXZlKQorICAgICAgICBzZWxmLmZuYW1lID0gcmUuc3ViKHInLnRhci5iejJ8dGFyLmd6JCcsICcnLCBzZWxmLmFyY2hpdmUpCisgICAgICAgIGlmIGZvbGRlcm5hbWU6CisgICAgICAgICAgICBzZWxmLmZuYW1lID0gZm9sZGVybmFtZQorCisgICAgIyBEb3dubG9hZCBzZWxmLmFyY2hpdmUgdG8gc2VsZi5sb2NhbGFyY2hpdmUKKyAgICBkZWYgX2Rvd25sb2FkX2FyY2hpdmUoc2VsZik6CisKKyAgICAgICAgZGxfZGlyID0gc2VsZi5kLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgaWYgZGxfZGlyIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGxfZGlyLCBzZWxmLmFyY2hpdmUpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKG9zLnBhdGguam9pbihkbF9kaXIsIHNlbGYuYXJjaGl2ZSksIHNlbGYubG9jYWxhcmNoaXZlKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZXhwb3J0dmFycyA9IFsnSFRUUF9QUk9YWScsICdodHRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnSFRUUFNfUFJPWFknLCAnaHR0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdGVFBfUFJPWFknLCAnZnRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnRlRQU19QUk9YWScsICdmdHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnTk9fUFJPWFknLCAnbm9fcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdBTExfUFJPWFknLCAnYWxsX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnU09DS1M1X1VTRVInLCAnU09DS1M1X1BBU1NXRCddCisKKyAgICAgICAgY21kID0gJycKKyAgICAgICAgZm9yIHZhciBpbiBleHBvcnR2YXJzOgorICAgICAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICAgICAgY21kID0gJ2V4cG9ydCAnICsgdmFyICsgJz1cIiVzXCI7ICVzJyAlICh2YWwsIGNtZCkKKworICAgICAgICBjbWQgPSBjbWQgKyAid2dldCAtTyAlcyAlcyIgJSAoc2VsZi5sb2NhbGFyY2hpdmUsIHNlbGYudXJpKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgIyBUaGlzIG1ldGhvZCBzaG91bGQgcHJvdmlkZSBhIHdheSB0byBydW4gYSBjb21tYW5kIGluIHRoZSBkZXNpcmVkIGVudmlyb25tZW50LgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHBhc3MKKworICAgICMgVGhlIHRpbWVvdXQgcGFyYW1ldGVyIG9mIHRhcmdldC5ydW4gaXMgc2V0IHRvIDAgdG8gbWFrZSB0aGUgc3NoIGNvbW1hbmQKKyAgICAjIHJ1biB3aXRoIG5vIHRpbWVvdXQuCisgICAgZGVmIHJ1bl9jb25maWd1cmUoc2VsZiwgY29uZmlndXJlX2FyZ3M9JycsIGV4dHJhX2NtZHM9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuKCdjZCAlczsgJXMgLi9jb25maWd1cmUgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBleHRyYV9jbWRzLCBjb25maWd1cmVfYXJncykpCisKKyAgICBkZWYgcnVuX21ha2Uoc2VsZiwgbWFrZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bignY2QgJXM7IG1ha2UgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBtYWtlX2FyZ3MpKQorCisgICAgZGVmIHJ1bl9pbnN0YWxsKHNlbGYsIGluc3RhbGxfYXJncz0nJyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIGluc3RhbGwgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBpbnN0YWxsX2FyZ3MpKQorCisgICAgZGVmIGNsZWFuKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3JtIC1yZiAlcycgJSBzZWxmLnRhcmdldGRpcikKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCdybSAtZiAlcycgJSBzZWxmLmxvY2FsYXJjaGl2ZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgcGFzcworCitjbGFzcyBUYXJnZXRCdWlsZFByb2plY3QoQnVpbGRQcm9qZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXQsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSAifi8iCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj0iL3RtcCIpCisKKyAgICBkZWYgZG93bmxvYWRfYXJjaGl2ZShzZWxmKToKKworICAgICAgICBzZWxmLl9kb3dubG9hZF9hcmNoaXZlKCkKKworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQuY29weV90byhzZWxmLmxvY2FsYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29weSBhcmNoaXZlIHRvIHRhcmdldCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndGFyIHhmICVzJXMgLUMgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBzZWxmLmFyY2hpdmUsIHNlbGYudGFyZ2V0ZGlyKSkKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBleHRyYWN0IGFyY2hpdmUsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgICNDaGFuZ2UgdGFyZ2V0ZGlyIHRvIHByb2plY3QgZm9sZGVyCisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gc2VsZi50YXJnZXRkaXIgKyBzZWxmLmZuYW1lCisKKyAgICAjIFRoZSB0aW1lb3V0IHBhcmFtZXRlciBvZiB0YXJnZXQucnVuIGlzIHNldCB0byAwIHRvIG1ha2UgdGhlIHNzaCBjb21tYW5kCisgICAgIyBydW4gd2l0aCBubyB0aW1lb3V0LgorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5ydW4oY21kLCAwKVswXQorCisKK2NsYXNzIFNES0J1aWxkUHJvamVjdChCdWlsZFByb2plY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RwYXRoLCBzZGtlbnYsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi5zZGtlbnYgPSBzZGtlbnYKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gdGVzdHBhdGgKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSB0ZXN0cGF0aAorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdHBhdGgpCisgICAgICAgIHNlbGYuZGF0ZXRpbWUgPSBkLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBzZWxmLnRlc3Rsb2dkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGxvZ2RpcikKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxvZ2RpciwgInNka190YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj10ZXN0cGF0aCkKKworICAgIGRlZiBkb3dubG9hZF9hcmNoaXZlKHNlbGYpOgorCisgICAgICAgIHNlbGYuX2Rvd25sb2FkX2FyY2hpdmUoKQorCisgICAgICAgIGNtZCA9ICd0YXIgeGYgJXMlcyAtQyAlcycgJSAoc2VsZi50YXJnZXRkaXIsIHNlbGYuYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgI0NoYW5nZSB0YXJnZXRkaXIgdG8gcHJvamVjdCBmb2xkZXIKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSBzZWxmLnRhcmdldGRpciArIHNlbGYuZm5hbWUKKworICAgIGRlZiBydW5fY29uZmlndXJlKHNlbGYsIGNvbmZpZ3VyZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2NvbmZpZ3VyZShjb25maWd1cmVfYXJncz0oY29uZmlndXJlX2FyZ3Mgb3IgJyRDT05GSUdVUkVfRkxBR1MnKSwgZXh0cmFfY21kcz0nIGdudS1jb25maWdpemU7ICcpCisKKyAgICBkZWYgcnVuX2luc3RhbGwoc2VsZiwgaW5zdGFsbF9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2luc3RhbGwoaW5zdGFsbF9hcmdzPShpbnN0YWxsX2FyZ3Mgb3IgIkRFU1RESVI9JXMvLi4vaW5zdGFsbCIgJSBzZWxmLnRhcmdldGRpcikpCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgc2VsZi5sb2coIlJ1bm5pbmcgLiAlczsgIiAlIHNlbGYuc2RrZW52ICsgY21kKQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKCIuICVzOyAiICUgc2VsZi5zZGtlbnYgKyBjbWQsIHNoZWxsPVRydWUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTU2MTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQSBkYWVtb24gZm9yIGRlbGl2ZXJpbmcgQUNQSSBldmVudHMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjcGlkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0zMzE0MCZhdGlkPTQwNzM0MSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9hY3BpZDIvYWNwaWQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vYWNwaWQuc2VydmljZSBcCisgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJhY3BpZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYWNwaWQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1lICdzLC91c3Ivc2Jpbiwke3NiaW5kaXJ9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hY3BpZAorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYWNwaWQKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9ldmVudHMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hY3BpZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FjcGlkLnNlcnZpY2UKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2FjcGlkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwZTc0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QUNQSSBFdmVudCBEYWVtb24KK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYWNwaWQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGZmMzg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQKQEAgLTAsMCArMSwzMSBAQAorIyEgL2Jpbi9zaCAtZQorCit0ZXN0IC14IC91c3Ivc2Jpbi9hY3BpZCB8fCBleGl0IDAKK3Rlc3QgLWQgL3Byb2MvYWNwaSB8fCBleGl0IDAKK21rZGlyIC1wIC9ldGMvYWNwaS9ldmVudHMKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGVjaG8gLW4gIlN0YXJ0aW5nIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSBkYWVtb246ICIKKyAgICBpZiBbICEgLWQgL2V0Yy9hY3BpL2V2ZW50cyBdOyB0aGVuCisgICAgICAgIGVjaG8gIlRoZXJlIGlzIG5vdCBhbnkgcnVsZSBjb25maWd1cmF0aW9uIGZpbGUuIgorICAgIGVsc2UKKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLVMgLXggL3Vzci9zYmluL2FjcGlkIC0tIC1jIC9ldGMvYWNwaS9ldmVudHMKKyAgICAgICAgZWNobyAiYWNwaWQuIgorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvIC1uICJTdG9wcGluZyBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgZGFlbW9uOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLUsgLXggL3Vzci9zYmluL2FjcGlkCisgICAgZWNobyAiYWNwaWQuIgorICAgIDs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKSAKKyAgICAkMCBzdG9wCisgICAgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9hY3BpZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkXzIuMC4yMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzMTdhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGFjcGlkLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hY3BpZC5oO2VuZGxpbmU9MjQ7bWQ1PTMyNGE5Y2YyMjVhZTY5ZGRhYWQxYmY5ZDk0MjExNWI1IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDdiY2RjZGVmY2Q1M2IwMzczMGU1MGJhODQyNTU0ZWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDM5NmFhZWMxMzUxMGMzYTFmYWE5NDFhMTVhNGI1MzM1YjZhZTRmYmVjODQzOGI5MjQ5Yjg4YzNiNjYxODdlZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjdiYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29weXJpZ2h0IE1hdHRoaWFzIEhlbnRnZXMgPGRldmVsQGhlbnRnZXMubmV0PiAoYykgMjAwNworIyBMaWNlbnNlOiBNSVQgKHNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorIyAgICAgICAgICAgICAgIGZvciBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UpCisjCisjIEZpbGVuYW1lOiBhbHNhLXN0YXRlLmJiCisKK1NVTU1BUlkgPSAiQWxzYSBzY2VuYXJpbyBmaWxlcyB0byBlbmFibGUgYWxzYSBzdGF0ZSByZXN0b3JhdGlvbiIKK0RFU0NSSVBUSU9OID0gIkFsc2EgU2NlbmFyaW8gRmlsZXMgLSBhbiBpbml0IHNjcmlwdCBhbmQgc3RhdGUgZmlsZXMgdG8gcmVzdG9yZSBcCitzb3VuZCBzdGF0ZSBhdCBzeXN0ZW0gYm9vdCBhbmQgc2F2ZSBpdCBhdCBzeXN0ZW0gc2h1dCBkb3duLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQViA9ICIwLjIuMCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gIlwKKyAgZmlsZTovL2Fzb3VuZC5jb25mIFwKKyAgZmlsZTovL2Fzb3VuZC5zdGF0ZSBcCisgIGZpbGU6Ly9hbHNhLXN0YXRlLWluaXQgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgQXMgdGhlIHJlY2lwZSBkb2Vzbid0IGluaGVyaXQgc3lzdGVtZC5iYmNsYXNzLCB3ZSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlCisjIG1hbnVhbGx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHBvc3RpbnN0L3ByZWluc3QgZ2VuZXJhdGVkLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYWxzYS1zdGF0ZSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDM5IFMgLiBzdG9wIDMxIDAgNiAuIgorCitkb19pbnN0YWxsKCkgeworICAgICMgT25seSBpbnN0YWxsIHRoZSBpbml0IHNjcmlwdCB3aGVuICdzeXN2aW5pdCcgaXMgaW4gRElTVFJPX0ZFQVRVUkVTLgorICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJc2VkIC1pIC1lICJzOiNTVEFURURJUiM6JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYTpnIiAke1dPUktESVJ9L2Fsc2Etc3RhdGUtaW5pdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxzYS1zdGF0ZS1pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hbHNhLXN0YXRlCisgICAgZmkKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Fzb3VuZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5zdGF0ZSAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYQorfQorCitQQUNLQUdFUyArPSAiYWxzYS1zdGF0ZXMiCisKK1JSRUNPTU1FTkRTX2Fsc2Etc3RhdGUgPSAiYWxzYS1zdGF0ZXMiCisKK1JERVBFTkRTXyR7UE59ID0gImFsc2EtdXRpbHMtYWxzYWN0bCIKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kICR7c3lzY29uZmRpcn0vYXNvdW5kLmNvbmYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9hc291bmQuY29uZiIKKworRklMRVNfYWxzYS1zdGF0ZXMgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS8qLnN0YXRlIgorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisJaWYgdGVzdCAteiAiJEQiCisJdGhlbgorCQlpZiB0ZXN0IC14ICR7c2JpbmRpcn0vYWxzYWN0bAorCQl0aGVuCisJCQkke3NiaW5kaXJ9L2Fsc2FjdGwgLWYgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS9hc291bmQuc3RhdGUgcmVzdG9yZQorCQlmaQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS1pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZTU5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdApAQCAtMCwwICsxLDM5IEBACisjISAvYmluL3NoCisjCisjIENvcHlyaWdodCBNYXR0aGlhcyBIZW50Z2VzIDxkZXZlbEBoZW50Z2VzLm5ldD4gKGMpIDIwMDcKKyMgTGljZW5zZTogR1BMIChzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQgZm9yIGEgY29weSBvZiB0aGUgbGljZW5zZSkKKyMKKyMgRmlsZW5hbWU6IGFsc2Etc3RhdGUKKyMgRGF0ZTogMjAwNzAzMDggKFlNRCkKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworYXNvdW5kX3Jlc3RvcmUoKXsKKwllY2hvICJBTFNBOiBSZXN0b3JpbmcgbWl4ZXIgc2V0dGluZ3MuLi4iCisJaWYgdGVzdCAteCAvdXNyL3NiaW4vYWxzYWN0bCAtYSAtZSAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZQorCXRoZW4KKwkJL3Vzci9zYmluL2Fsc2FjdGwgLWYgI1NUQVRFRElSIy9hc291bmQuc3RhdGUgcmVzdG9yZSAmCisJZmkKK30KKworYXNvdW5kX3N0b3JlKCl7CisJZWNobyAiQUxTQTogU3RvcmluZyBtaXhlciBzZXR0aW5ncy4uLiIKKwlpZiB0ZXN0IC14IC91c3Ivc2Jpbi9hbHNhY3RsCisJdGhlbgorCQkvdXNyL3NiaW4vYWxzYWN0bCAtZiAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZSBzdG9yZQorCWZpCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCQlhc291bmRfcmVzdG9yZSA7Oworc3RvcCkJCWFzb3VuZF9zdG9yZSA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9hbHNhY3RsOworICAgIGV4aXQgJD8KKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYWxzYS1zdGF0ZSB7c3RhcnR8c3RvcHxzdGF0dXN9IgorICAgIGV4aXQgMQorICA7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2NTNjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYKQEAgLTAsMCArMSBAQAorIyBHbG9iYWwgYWxzYS1saWIgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fzb3VuZC5zdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGQxY2NlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUKQEAgLTAsMCArMSBAQAorIyBEdW1teSBmaWxlLCBkbyBub3QgZGVsZXRlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYWI4MjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZQpAQCAtMCwwICsxLDcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KK0FmdGVyPXJlbW90ZS1mcy50YXJnZXQKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L2FwbWQKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYXBtZCAtUCBAU1lTQ09ORkRJUkAvYXBtL2FwbWRfcHJveHkgJEFQTUQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDhlZTRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5CkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorIyAKKyMgYXBtZF9wcm94eSAtIHByb2dyYW0gZGlzcGF0Y2hlciBmb3IgQVBNIGRhZW1vbgorIworIyBXcml0dGVuIGJ5IENyYWlnIE1hcmt3YXJkdCAoY3JhaWdtQGxoZWFtYWlsLmdzZmMubmFzYS5nb3YpIDIxIE1heSAxOTk5CisjIE1vZGlmaWVkIGZvciBEZWJpYW4gYnkgQXZlcnkgUGVubmFydW4KKyMKKyMgVGhpcyBzaGVsbCBzY3JpcHQgaXMgY2FsbGVkIGJ5IHRoZSBBUE0gZGFlbW9uIChhcG1kKSB3aGVuIGEgcG93ZXIKKyMgbWFuYWdlbWVudCBldmVudCBvY2N1cnMuICBJdHMgZmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudHMgZGVzY3JpYmUgdGhlCisjIGV2ZW50LiAgRm9yIGV4YW1wbGUsIGFwbWQgd2lsbCBjYWxsICJhcG1kX3Byb3h5IHN1c3BlbmQgc3lzdGVtIiBqdXN0CisjIGJlZm9yZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4KKyMKKyMgSGVyZSBhcmUgdGhlIHBvc3NpYmxlIGFyZ3VtZW50czoKKyMKKyMgc3RhcnQgICAgICAgICAgICAgIC0gQVBNIGRhZW1vbiBoYXMgc3RhcnRlZAorIyBzdG9wICAgICAgICAgICAgICAgLSBBUE0gZGFlbW9uIGlzIHNodXR0aW5nIGRvd24KKyMgc3VzcGVuZCBjcml0aWNhbCAgIC0gQVBNIHN5c3RlbSBpbmRpY2F0ZXMgY3JpdGljYWwgc3VzcGVuZCAoKyspCisjIHN1c3BlbmQgc3lzdGVtICAgICAtIEFQTSBzeXN0ZW0gaGFzIHJlcXVlc3RlZCBzdXNwZW5kIG1vZGUKKyMgc3VzcGVuZCB1c2VyICAgICAgIC0gVXNlciBoYXMgcmVxdWVzdGVkIHN1c3BlbmQgbW9kZQorIyBzdGFuZGJ5IHN5c3RlbSAgICAgLSBBUE0gc3lzdGVtIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlIAorIyBzdGFuZGJ5IHVzZXIgICAgICAgLSBVc2VyIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlCisjIHJlc3VtZSBzdXNwZW5kICAgICAtIFN5c3RlbSBoYXMgcmVzdW1lZCBmcm9tIHN1c3BlbmQgbW9kZQorIyByZXN1bWUgc3RhbmRieSAgICAgLSBTeXN0ZW0gaGFzIHJlc3VtZWQgZnJvbSBzdGFuZGJ5IG1vZGUKKyMgcmVzdW1lIGNyaXRpY2FsICAgIC0gU3lzdGVtIGhhcyByZXN1bWVkIGZyb20gY3JpdGljYWwgc3VzcGVuZAorIyBjaGFuZ2UgYmF0dGVyeSAgICAgLSBBUE0gc3lzdGVtIHJlcG9ydGVkIGxvdyBiYXR0ZXJ5CisjIGNoYW5nZSBwb3dlciAgICAgICAtIEFQTSBzeXN0ZW0gcmVwb3J0ZWQgQUMvYmF0dGVyeSBjaGFuZ2UKKyMgY2hhbmdlIHRpbWUgICAgICAgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCB0aW1lIGNoYW5nZSAoKikKKyMgY2hhbmdlIGNhcGFiaWxpdHkgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCBjb25maWcuIGNoYW5nZSAoKykKKyMKKyMgKCopIC0gQVBNIGRhZW1vbiBtYXkgYmUgY29uZmlndXJlZCB0byBub3QgY2FsbCB0aGVzZSBzZXF1ZW5jZXMKKyMgKCspIC0gQXZhaWxhYmxlIGlmIEFQTSBrZXJuZWwgc3VwcG9ydHMgaXQuCisjICgrKykgLSAic3VzcGVuZCBjcml0aWNhbCIgaXMgbmV2ZXIgcGFzc2VkIHRvIGFwbWQgZnJvbSB0aGUga2VybmVsLAorIyAgIHNvIHdlIHdpbGwgbmV2ZXIgc2VlIGl0IGhlcmUuICBTY3JpcHRzIHRoYXQgcHJvY2VzcyAicmVzdW1lCisjICAgY3JpdGljYWwiIGV2ZW50cyBuZWVkIHRvIHRha2UgdGhpcyBpbnRvIGFjY291bnQuCisjCisjIEl0IGlzIHRoZSBwcm94eSBzY3JpcHQncyByZXNwb25zaWJpbGl0eSB0byBleGFtaW5lIHRoZSBBUE0gc3RhdHVzCisjICh2aWEgL3Byb2MvYXBtKSBvciBvdGhlciBzdGF0dXMgYW5kIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9ucy4KKyMgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgbWlnaHQgdW5tb3VudCBuZXR3b3JrIGRyaXZlcyBiZWZvcmUgdGhlCisjIG1hY2hpbmUgaXMgc3VzcGVuZGVkLgorIworIyBJbiBEZWJpYW4sIHRoZSB1c3VhbCB3YXkgb2YgYWRkaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHByb3h5IGlzIHRvCisjIGFkZCBhIHNjcmlwdCB0byAvZXRjL2FwbS9ldmVudC5kLiAgVGhpcyBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgYnkKKyMgYXBtZF9wcm94eSAodmlhIHJ1bi1wYXJ0cykgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuCisjCisjIElmIGl0IGlzIGltcG9ydGFudCB0aGF0IGEgY2VydGFpbiBzZXQgb2Ygc2NyaXB0IGJlIHJ1biBpbiBhIGNlcnRhaW4KKyMgb3JkZXIgb24gc3VzcGVuZCBhbmQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgb24gcmVzdW1lLCB0aGVuIHB1dCBhbGwKKyMgdGhlIHNjcmlwdHMgaW4gL2V0Yy9hcG0vc2NyaXB0cy5kIGluc3RlYWQgb2YgL2V0Yy9hcG0vZXZlbnQuZCBhbmQKKyMgc3ltbGluayB0byB0aGVzZSBmcm9tIC9ldGMvYXBtL3N1c3BlbmQuZCwgL2V0Yy9hcG0vcmVzdW1lLmQgYW5kCisjIC9ldGMvYXBtL290aGVyLmQgdXNpbmcgbmFtZXMgd2hvc2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyIGlzIHRoZSBzYW1lCisjIGFzIHRoZSBkZXNpcmVkIG9yZGVyIG9mIGV4ZWN1dGlvbi4KKyMKKyMgSWYgdGhlIGtlcm5lbCdzIEFQTSBkcml2ZXIgc3VwcG9ydHMgaXQsIGFwbWRfcHJveHkgY2FuIHJldHVybiBhIG5vbi16ZXJvCisjIGV4aXQgc3RhdHVzIG9uIHN1c3BlbmQgYW5kIHN0YW5kYnkgZXZlbnRzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1c3BlbmQKKyMgb3Igc3RhbmRieSBldmVudCBzaG91bGQgYmUgcmVqZWN0ZWQuCisjCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc2V0IC1lCisKKyMgVGhlIGZvbGxvd2luZyBkb2Vzbid0IHlldCB3b3JrLCBiZWNhdXNlIGN1cnJlbnQga2VybmVscyAodXAgdG8gYXQgbGVhc3QKKyMgMi40LjIwKSBkbyBub3Qgc3VwcG9ydCByZWplY3Rpb24gb2YgQVBNIGV2ZW50cy4gIFN1cHBvcnRpbmcgdGhpcyB3b3VsZAorIyByZXF1aXJlIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFQTSBkcml2ZXIuICBXZSB3aWxsIHJlLWVuYWJsZQorIyB0aGlzIGZlYXR1cmUgaWYgdGhlIGRyaXZlciBpcyBldmVyIG1vZGlmaWVkLiAgICAgICAtLSBjcGhAZGViaWFuLm9yZworIworI1NVU1BFTkRfT05fQUM9ZmFsc2UKKyNbIC1yIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZiBdICYmIC4gL2V0Yy9hcG0vYXBtZF9wcm94eS5jb25mCisjCisjaWYgWyAiJHtTVVNQRU5EX09OX0FDfSIgPSAiZmFsc2UiIC1hICIkezJ9IiA9ICJzeXN0ZW0iIF0gXAorIwkmJiBvbl9hY19wb3dlciA+L2Rldi9udWxsOyB0aGVuCisjICAgICMgUmVqZWN0IHN5c3RlbSBzdXNwZW5kcyBhbmQgc3RhbmRieXMgaWYgd2UgYXJlIG9uIEFDIHBvd2VyCisjICAgIGV4aXQgMSAgIyBSZWplY3QgKE5PVEUga2VybmVsIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkKQorI2ZpCisKK2lmIFsgIiR7MX0iID0gInN1c3BlbmQiIC1vICIkezF9IiA9ICJzdGFuZGJ5IiBdOyB0aGVuCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vc3VzcGVuZC5kIF07IHRoZW4KKyAgICAgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vc3VzcGVuZC5kCisgICAgZmkKK2VsaWYgWyAiJHsxfSIgPSAicmVzdW1lIiBdOyB0aGVuCisgICAgaWYgWyAtZCAvZXRjL2FwbS9yZXN1bWUuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL3Jlc3VtZS5kCisgICAgZmkKKyAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9ldmVudC5kCitlbHNlCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vb3RoZXIuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL290aGVyLmQKKyAgICBmaQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvYXBtZF9wcm94eS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MTE0NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZjogY29uZmlndXJhdGlvbiBmaWxlIGZvciBhcG1kLgorIworIyBUaGlzIGZpbGUgaXMgbWFuYWdlZCBieSBkZWJjb25mIHdoZW4gaW5zdGFsbGluZyBvciByZWNvbmZpZ3VyaW5nIHRoZQorIyBwYWNrYWdlLiAgSXQgaXMgZ2VuZXJhdGVkIGJ5IG1lcmdpbmcgdGhlIGFuc3dlcnMgZ2F0aGVyZWQgYnkgZGViY29uZgorIyBpbnRvIHRoZSB0ZW1wbGF0ZSBmaWxlICIvdXNyL3NoYXJlL2FwbWQvYXBtZF9wcm94eS5jb25mIi4KKworIyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgeWV0IHdvcmssIGJlY2F1c2UgY3VycmVudCBrZXJuZWxzICh1cCB0byBhdCBsZWFzdAorIyAyLjQuMjApIGRvIG5vdCBzdXBwb3J0IHJlamVjdGlvbiBvZiBBUE0gZXZlbnRzLiAgU3VwcG9ydGluZyB0aGlzIHdvdWxkCisjIHJlcXVpcmUgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgQVBNIGRyaXZlci4gIFdlIHdpbGwgcmUtZW5hYmxlCisjIHRoaXMgZmVhdHVyZSBpZiB0aGUgZHJpdmVyIGlzIGV2ZXIgbW9kaWZpZWQuICAgICAgIC0tIGNwaEBkZWJpYW4ub3JnCisjCisjIFNldCB0aGUgZm9sbG93aW5nIHRvICJmYWxzZSIgaWYgeW91IHdhbnQgdG8gcmVqZWN0IHN5c3RlbSBzdXNwZW5kIG9yCisjIHN5c3RlbSBzdGFuZGJ5IHJlcXVlc3RzIHdoZW4gdGhlIGNvbXB1dGVyIGlzIHJ1bm5pbmcgb24gQUMgcG93ZXIuCisjIE90aGVyd2lzZSBzZXQgdGhpcyB0byAidHJ1ZSIuICBTdWNoIHJlcXVlc3RzIGFyZSBuZXZlciByZWplY3RlZCB3aGVuCisjIHRoZSBjb21wdXRlciBpcyBydW5uaW5nIG9uIGJhdHRlcnkgcG93ZXIuCisjU1VTUEVORF9PTl9BQz10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2RlZmF1bHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2RlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3OTY1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMKKyMgRGVmYXVsdCBmb3IgL2V0Yy9pbml0LmQvYXBtZAorIworCisjIEFzIGFwbWQgY2FuIGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cywgd2UgdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUKKyMgdG8gc3RvcmUgdGhlbSwgZS5nLiwgQVBNRD0iLXcgNSAtcCAyIi4KKyMgU2VlIHRoZSBtYW51YWwgcGFnZSBhcG1kKDgpIGZvciBkZXRhaWxzLgorQVBNRD0iLS1wcm94eS10aW1lb3V0IDMwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwYjQxYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2luaXQKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBhcG1kCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluCisKK1sgLWYgL2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvYXBtZCBdICYmIC4gL2V0Yy9kZWZhdWx0L2FwbWQKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgYWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCBkYWVtb246ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAteCAvdXNyL3NiaW4vYXBtZCAtLSBcCisJCS1QIC9ldGMvYXBtL2FwbWRfcHJveHkgJEFQTUQKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJICAgIGVjaG8gImFwbWQuIgorCWVsc2UKKwkgICAgZWNobyAiKGZhaWxlZC4pIgorCWZpCisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nIGFkdmFuY2VkIHBvd2VyIG1hbmFnZW1lbnQgZGFlbW9uOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgXAorCQkteCAvdXNyL3NiaW4vYXBtZAorCWVjaG8gImFwbWQuIgorCTs7CisgICAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4vYXBtZDsKKwlleGl0ICQ/CisJOzsKKyAgICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkgCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJZXhpdAorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYXBtZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGI4OTVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSwxMzMgQEAKK0Zyb20gMzU5NTkzM2QyMjFmMGJhODM2OTE3ZGViYzA3NzZiODcyMzk3MmVjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMSBBdWcgMjAxNSAxNzo0MDo1MCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gUGF0Y2ggd2l0aCBmaXhlcyBwcm92aWRlZCBieSBEZWJpYW4uCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi0xNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIE1ha2VmaWxlIHwgIDIgKy0KKyBhcG0uYyAgICB8ICAzICsrLQorIGFwbS5oICAgIHwgIDkgKysrKysrKysrCisgYXBtZC5jICAgfCAxNSArKysrKysrKy0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBiZjM0NmQ5Li45MmZjMGZkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNDMsNyArNDMsNyBAQCBERVNURElSPQorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSBcCisrWFRSQUNGTEFHUz0tV2FsbCAtcGlwZSAtSS4gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIC1JL3Vzci9YMTFSNi9pbmNsdWRlIFwKKyAJCS1JL3Vzci9zcmMvbGludXgtMi4yL2luY2x1ZGUgLUkgL3Vzci9zcmMvbGludXgtMi4wL2luY2x1ZGUgXAorIAkJLURWRVJTSU9OPVwiJChWRVJTSU9OKVwiIFwKKyAJCS1EREVGQVVMVF9QUk9YWV9OQU1FPVwiJChQUk9YWV9ESVIpL2FwbWRfcHJveHlcIgorZGlmZiAtLWdpdCBhL2FwbS5jIGIvYXBtLmMKK2luZGV4IGIyMWMwNTcuLjAzNTliMWMgMTAwNjQ0CistLS0gYS9hcG0uYworKysrIGIvYXBtLmMKK0BAIC0yMTksMTIgKzIxOSwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl9CisgCX0KKyAJCQkJCQkJCQkJCQkJICAgIAorLQorKyNpZiAwCisgICAgIGlmICghKGkuYXBtX2ZsYWdzICYgQVBNXzMyX0JJVF9TVVBQT1JUKSkKKyAgICAgeworIAlmcHJpbnRmKHN0ZGVyciwgIjMyLWJpdCBBUE0gaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWRcbiIpOworIAlleGl0KDEpOworICAgICB9CisrI2VuZGlmCisgCisgICAgIGlmICh2ZXJib3NlICYmIChpLmFwbV9mbGFncyAmIDB4MTApKQorIAlwcmludGYoIkFQTSBCSU9TIFBvd2VyIE1hbmFnZW1lbnQgaXMgY3VycmVudGx5IGRpc2FibGVkXG4iKTsKK2RpZmYgLS1naXQgYS9hcG0uaCBiL2FwbS5oCitpbmRleCBmYjI0ZGZkLi44MjRjYzA2IDEwMDY0NAorLS0tIGEvYXBtLmgKKysrKyBiL2FwbS5oCitAQCAtMjAsNiArMjAsMTMgQEAKKyAgKiAkSWQ6IGFwbS5oLHYgMS43IDE5OTkvMDcvMDUgMjI6MzE6MTEgYXBlbndhcnIgRXhwICQKKyAgKiAKKyAgKi8KKysjaWZuZGVmIF9BUE1fSAorKyNkZWZpbmUgX0FQTV9IIDEKKysKKysjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworKyNkZWZpbmUgX19LRVJORUxfU1RSSUNUX05BTUVTCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorQEAgLTkzLDMgKzEwMCw1IEBAIGV4dGVybiBpbnQgYXBtX3JlamVjdChpbnQgZmQpOworICNlbHNlCisgI2RlZmluZSBhcG1fcmVqZWN0KGZkKSAgICgtRUlOVkFMKQorICNlbmRpZgorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2FwbWQuYyBiL2FwbWQuYworaW5kZXggNDllZDNhMS4uNTYwZjUzNiAxMDA2NDQKKy0tLSBhL2FwbWQuYworKysrIGIvYXBtZC5jCitAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCS8qIHBhcmVudCAqLworIAkJaW50IHN0YXR1cywgcmV0dmFsOworIAkJc3NpemVfdCBsZW47CistCQl0aW1lX3QgdGltZV9saW1pdDsKKysJCXRpbWVfdCBjb3VudGRvd247CisgCisgCQlpZiAocGlkIDwgMCkgeworIAkJCS8qIENvdWxkbid0IGZvcmsgKi8KK0BAIC0zNTYsOCArMzU2LDkgQEAgc3RhdGljIGludCBjYWxsX3Byb3h5KGFwbV9ldmVudF90IGV2ZW50KQorIAkJLyogQ2FwdHVyZSB0aGUgY2hpbGQncyBvdXRwdXQsIGlmIGFueSwgYnV0IG9ubHkgdW50aWwgaXQgdGVybWluYXRlcyAqLworIAkJY2xvc2UoZmRzWzFdKTsKKyAJCWZjbnRsKGZkc1swXSwgRl9TRVRGTCwgT19SRE9OTFl8T19OT05CTE9DSyk7CistCQl0aW1lX2xpbWl0ID0gdGltZSgwKSArIHByb3h5X3RpbWVvdXQ7CisrCQljb3VudGRvd24gPSBwcm94eV90aW1lb3V0OworIAkJZG8geworKwkJCWNvdW50ZG93biAtPSAxOworIAkJCXdoaWxlICgobGVuID0gcmVhZChmZHNbMF0sIGxpbmUsIHNpemVvZihsaW5lKS0xKSkgPiAwKSB7CisgCQkJCWxpbmVbbGVuXSA9IDA7CisgCQkJCUFQTURfU1lTTE9HKExPR19JTkZPLCAiKyAlcyIsIGxpbmUpOworQEAgLTM3MiwxNiArMzczLDE2IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCQkJZ290byBwcm94eV9kb25lOworIAkJCX0KKyAJCQkJCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAkJfSB3aGlsZSAoCistCQkJKHRpbWUoMCkgPCB0aW1lX2xpbWl0KQorKwkJCShjb3VudGRvd24gPj0gMCkKKyAJCQl8fCAocHJveHlfdGltZW91dCA8IDApCisgCQkpOworIAorIAkJQVBNRF9TWVNMT0coTE9HX05PVElDRSwgIlByb3h5IGhhcyBiZWVuIHJ1bm5pbmcgbW9yZSB0aGFuICVkIHNlY29uZHM7IGtpbGxpbmcgaXQiLCBwcm94eV90aW1lb3V0KTsKKyAKKyAJCWtpbGwocGlkLCBTSUdURVJNKTsKKy0JCXRpbWVfbGltaXQgPSB0aW1lKDApICsgNTsKKysJCWNvdW50ZG93biA9IDU7CisgCQlkbyB7CisgCQkJcmV0dmFsID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIFdOT0hBTkcpOworIAkJCWlmIChyZXR2YWwgPT0gcGlkKQorQEAgLTM5Miw5ICszOTMsOSBAQCBzdGF0aWMgaW50IGNhbGxfcHJveHkoYXBtX2V2ZW50X3QgZXZlbnQpCisgCQkJCWdvdG8gcHJveHlfZG9uZTsKKyAJCQl9CisgCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAorLQkJfSB3aGlsZSAodGltZSgwKSA8IHRpbWVfbGltaXQpOworKwkJfSB3aGlsZSAoY291bnRkb3duID49IDApOworIAorIAkJa2lsbChwaWQsIFNJR0tJTEwpOworIAkJc3RhdHVzID0gX19XX0VYSVRDT0RFKDAsIFNJR0tJTEwpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0ZWUwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgYnkgUlAgdG8gYWRkcmVzcyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIiBlcnJvcjoKKyAgIGNvbW1pdCAzNWRlMDVlNjFiODhjMDgwOGE1ZTg4NWJiMGVmZGY0MjA1NTVkNWFkCisgICBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KKyAgIERhdGU6ICAgU3VuIEp1biAxIDE2OjEzOjM4IDIwMDggKzAwMDAKKworICAgYXBtZDogVXNlIGxpYnRvb2wgLS10YWcgb3B0aW9ucyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxpYnRvb2wgMi4yLjQgKGZyb20gcG9reSkKKworSG93ZXZlciBJIGRpZG4ndCBzZWUgc2FtZSBpc3N1ZSB3aXRoIGN1cnJlbnQgbGlidG9vbC0yLjIuMTAuIEFsc28gcGVyIG15IHVuZGVyc3RhbmRpbmcsCit0aGUgZGVmYXVsdCB0YWcsIGlmIG5vdCBzcGVjaWZpZWQsIGZhbGxzIGJhY2sgdG8gQ0MuIFNvIGRpc2FibGUgaXQgZnJvbSBwYXRjaGluZywgYnV0CitrZWVwIGl0IGhlcmUuIElmIHdlIGVuY291bnRlciBzaW1pbGFyIGlzc3VlIGluIHRoZSBmdXR1cmUsIHdlIGNvdWxkIHRoZW4gcHVzaCB1cHN0cmVhbQorCitDb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcG1kLTMuMi4yLm9yaWcub3JpZy9NYWtlZmlsZQkyMDA0LTAxLTA0IDA4OjEzOjE4LjAwMDAwMDAwMCArMDAwMAorKysrIGFwbWQtMy4yLjIub3JpZy9NYWtlZmlsZQkyMDA4LTA0LTIxIDE3OjEwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTU4LDkgKzU3LDggQEAKKyAjQ0ZMQUdTPS1PMyAtbTQ4NiAtZm9taXQtZnJhbWUtcG9pbnRlcgorICNMREZMQUdTPS1zCisgCistTElCVE9PTD1saWJ0b29sIC0tcXVpZXQKKy1MVF9DT01QSUxFID0gJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENDKQorLUxUX0xJTksgPSAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpCisrTFRfQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykKKytMVF9MSU5LID0gJChMSUJUT09MKSAgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKKyBMVF9JTlNUQUxMID0gJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBpbnN0YWxsCisgTFRfQ0xFQU4gPSAkKExJQlRPT0wpIC0tbW9kZT1jbGVhbiBybQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC91bmxpbnV4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC91bmxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL3VubGludXgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorY29weSBPRSBjb21taXQgbWVzc2FnZSBoZXJlOgorICAgY29tbWl0IDk0NTZjZGMxY2Y0M2UzYmE5ZTZkODhjNjM1NjBjMWI2ZmRlZTQzNTkKKyAgIEF1dGhvcjogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorICAgRGF0ZTogICBUdWUgTWF5IDI5IDEyOjI3OjQ1IDIwMDcgKzAwMDAKKworICAgYXBtZDogcHJldmVudCBidWlsZCBmcm9tIGludGVyZmVycmluZyB3aXRoIGhvc3Qga2VybmVsIGhlYWRlcnMuIENsb3NlcyAjMTI1NworCitjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKysrKyBhcG1kLTMuMi4yL01ha2VmaWxlCitAQCAtNDMsOCArNDMsNyBAQAorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtSS91c3IvWDExUjYvaW5jbHVkZSBcCistCQktSS91c3Ivc3JjL2xpbnV4LTIuMi9pbmNsdWRlIC1JIC91c3Ivc3JjL2xpbnV4LTIuMC9pbmNsdWRlIFwKKytYVFJBQ0ZMQUdTPS1XYWxsIC1waXBlIC1JLiBcCisgCQktRFZFUlNJT049XCIkKFZFUlNJT04pXCIgXAorIAkJLURERUZBVUxUX1BST1hZX05BTUU9XCIkKFBST1hZX0RJUikvYXBtZF9wcm94eVwiCisgTERGTEFHUz0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWRfMy4yLjItMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTA1MjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IgorREVTQ1JJUFRJT04gPSAiVGhlIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgKEFQTSkgc3VwcG9ydCBwcm92aWRlcyBcCithY2Nlc3MgdG8gYmF0dGVyeSBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIGEgc2V0IG9mIHRvb2xzIGZvciBtYW5hZ2luZyBcCitub3RlYm9vayBwb3dlciBjb25zdW1wdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vYXBlbndhcnIuY2EvYXBtZC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwbS5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTdkNGFjYzEyNTA5MTBhODlmODRjZTNjYzY1NTdjNGMyIgorREVQRU5EUyA9ICJsaWJ0b29sLWNyb3NzIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBmaWxlOi8vbGVnYWN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5saW51eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vYXBtZF9wcm94eSBcCisgICAgICAgICAgIGZpbGU6Ly9hcG1kX3Byb3h5LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXBtZC5zZXJ2aWNlIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJiMWU2MzA5ZTgzMzFlMGY0ZTZlZmQzMTFjMmQ5N2ZhOCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjdmN2Q5ZjYwYjc3NjZiODUyODgxZDQwYjhmZjkxZDhlMzlmY2NiMGQxZDkxMzEwMmE1Yzc1YTJkYmI1MjMzMmQiCisKK1MgPSAiJHtXT1JLRElSfS9hcG1kLTMuMi4yLm9yaWciCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXBtZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYXBtZC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitkb19jb21waWxlKCkgeworCSMgYXBtZCBkb2Vzbid0IHVzZSB3aG9sZSBhdXRvdG9vbHMuIEp1c3QgbGlidG9vbCBmb3IgaW5zdGFsbGF0aW9uCisJb2VfcnVubWFrZSAiTElCVE9PTD0ke1NUQUdJTkdfQklORElSX0NST1NTfS8ke0hPU1RfU1lTfS1saWJ0b29sIiBhcG0gYXBtZAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL2V2ZW50LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9vdGhlci5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vc3VzcGVuZC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vcmVzdW1lLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9zY3JpcHRzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwbWQKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlpbnN0YWxsIC1tIDQ3NTUgJHtTfS8ubGlicy9hcG0gJHtEfSR7YmluZGlyfS9hcG0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS8ubGlicy9hcG1kICR7RH0ke3NiaW5kaXJ9L2FwbWQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9hcG1kX3Byb3h5ICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hcG1kX3Byb3h5LmNvbmYgJHtEfSR7ZGF0YWRpcn0vYXBtZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvYXBtZAorCW9lX2xpYmluc3RhbGwgLXNvIGxpYmFwbSAke0R9JHtsaWJkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IGFwbS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlzZWQgLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZzsgcywvZXRjLCR7c3lzY29uZmRpcn0sZzsnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisJY2htb2QgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXBtZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FwbWQuc2VydmljZQorfQorCitQQUNLQUdFUyA9KyAibGliYXBtIGFwbSIKKworRklMRVNfbGliYXBtID0gIiR7bGliZGlyfS9saWJhcG0ke1NPTElCU30iCitGSUxFU19hcG0gPSAiJHtiaW5kaXJ9L2FwbSoiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2VlZS1hY3BpLXNjcmlwdHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYTAyYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gImVlZVBDIHNwZWNpZmljIEFDUEkgc2NyaXB0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9kZWJpYW4tZWVlcGMvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9NzdlZjgzYWI1ZjRhZjkzOGE5M2VkYjYxZjdiNzRmMmMiCisKK1NSQ1JFViA9ICI5ZDRjZGVkY2EyNWIzOTY0MDVmODU4N2Y5YzRmYmY4MjI5ZTA0MWMyIgorUFYgPSAiMS4xLjEyK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZWJpYW4ub3JnL2dpdC9kZWJpYW4tZWVlcGMvZWVlcGMtYWNwaS1zY3JpcHRzLmdpdCBcCisJICAgZmlsZTovL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9wb3dlcmJ0bi5wYXRjaCBcCisJICAgZmlsZTovL3BvbGljeS1mdW5jcyAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vYWNwaS1zdXBwb3J0LyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2VlZXBjLWFjcGktc2NyaXB0cyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYWNwaS8iCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvYWN0aW9ucy8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvZXZlbnRzLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9saWIvdWRldi9ydWxlcy5kCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9lZWVwYy1hY3BpLXNjcmlwdHMvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9ldmVudHMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2V2ZW50cy8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2xpYi91ZGV2L3J1bGVzLmQvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2xpYi91ZGV2L3J1bGVzLmQvCisJaW5zdGFsbCAke1N9L2FjdGlvbnMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2FjdGlvbnMvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYWNwaWxpYi9mdW5jdGlvbnMuc2ggJHtEfSR7ZGF0YWRpcn0vZWVlcGMtYWNwaS1zY3JpcHRzLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvbGljeS1mdW5jcyAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZGViaWFuL2VlZXBjLWFjcGktc2NyaXB0cy5kZWZhdWx0KiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0LworfQorCitSREVQRU5EU18ke1BOfSA9ICJwbS11dGlscyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG9saWN5LWZ1bmNzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG9saWN5LWZ1bmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDk5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb2xpY3ktZnVuY3MKQEAgLTAsMCArMSw4IEBACitDaGVja1BvbGljeSgpIHsKKwlpZiBwaWRvZiBnbm9tZS1wb3dlci1tYW5hZ2VyIGtwb3dlcnNhdmUgPiAvZGV2L251bGwgfHwKKwkgICAocGlkb2YgZGNvcHNlcnZlciA+IC9kZXYvbnVsbCAmJiB0ZXN0IC14IC91c3IvYmluL2Rjb3AgJiYgL3Vzci9iaW4vZGNvcCBrZGVkIGtkZWQgbG9hZGVkTW9kdWxlcyB8IGdyZXAgLXEga2xhcHRvcGRhZW1vbikgOyB0aGVuCisJCWVjaG8gMDsKKwllbHNlCisJCWVjaG8gMTsKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb3dlcmJ0bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDNlNTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorLS0tCisgYWN0aW9ucy9wb3dlci5zaCB8ICAgIDMgKysrCisgZXZlbnRzL3Bvd2VyYnRuICB8ICAgIDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCitJbmRleDogZ2l0L2V2ZW50cy9wb3dlcmJ0bgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9ldmVudHMvcG93ZXJidG4JMjAwOC0xMC0wOCAxNzo0MzozNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMiBAQAorK2V2ZW50PWJ1dHRvbi9wb3dlciBQV1JGCisrYWN0aW9uPS9ldGMvYWNwaS9hY3Rpb25zL3Bvd2VyLnNoCitJbmRleDogZ2l0L2FjdGlvbnMvcG93ZXIuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQvYWN0aW9ucy9wb3dlci5zaAkyMDA4LTEwLTA4IDE3OjQ1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzIEBACisrIyEvYmluL3NoCisrCisrL3NiaW4vc2h1dGRvd24gLWggbm93ICJQb3dlciBidXR0b24gcHJlc3NlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjNkY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKKy0tLQorIGFjdGlvbnMvaG90a2V5LnNoICAgICB8ICAgIDMgLS0tCisgYWN0aW9ucy9zdXNwZW5kLnNoICAgIHwgICAgMyAtLS0KKyBhY3Rpb25zL3ZnYS10b2dnbGUuc2ggfCAgICAzIC0tLQorIGFjdGlvbnMvdm9sdW1lLnNoICAgICB8ICAgIDMgLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lZWVwYy1hY3BpLXNjcmlwdHMvdm9sdW1lLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gJMjAxMS0xMS0yOSAxOTo0MTozNi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zLDEyICszLDEwIEBACisgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMgXSB8fCBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy13bWkgXSB8fCBleGl0IDAKKyAjIFZvbHVtZSBjb250cm9scworIAorLSMgZG8gbm90aGluZyBpZiBwYWNrYWdlIGlzIHJlbW92ZWQKKyBQS0c9ZWVlcGMtYWNwaS1zY3JpcHRzCisgUEtHX0RJUj0vdXNyL3NoYXJlL2FjcGktc3VwcG9ydC8kUEtHCisgRlVOQ19MSUI9JFBLR19ESVIvbGliL2Z1bmN0aW9ucy5zaAorIERFRkFVTFQ9L2V0Yy9kZWZhdWx0LyRQS0cKKy1bIC1lICIkRlVOQ19MSUIiIF0gfHwgZXhpdCAwCisgCisgLiAkRlVOQ19MSUIKKyAuICRQS0dfRElSL2xpYi9zb3VuZC5zaAorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWVlcGMtYWNwaS1zY3JpcHRzL2hvdGtleS5zaAkyMDExLTExLTI5IDE5OjIxOjU1LjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCTIwMTEtMTEtMjkgMTk6Mzk6NTEuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBjYXNlICQocnVubGV2ZWwpIGluCisgICAgICowfCo2KQorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvdmdhLXRvZ2dsZS5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6NDA6MjQuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBpZiBbIC1lICIkREVGQVVMVCIgXTsgdGhlbiAuICIkREVGQVVMVCI7IGZpCisgLiAkRlVOQ19MSUIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTA2NmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCitpZiBbIC1lIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnIF07IHRoZW4KKyAgICAuIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnCitmaQorCitpZiBbIC16ICIkSEFWRV9UT1VDSFNDUkVFTiIgXTsgdGhlbgorICAgIEhBVkVfVE9VQ0hTQ1JFRU49MAorZmkKKworaWYgWyAteiAiJEhBVkVfS0VZQk9BUkQiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEPTAKK2ZpCisKK2lmIFsgLXogIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiBdOyB0aGVuCisgICAgSEFWRV9LRVlCT0FSRF9QT1JUUkFJVD0wCitmaQorCitpZiBbIC16ICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEX0xBTkRTQ0FQRT0wCitmaQorCitpZiBbIC16ICIkRElTUExBWV9DQU5fUk9UQVRFIiBdOyB0aGVuCisgICAgRElTUExBWV9DQU5fUk9UQVRFPTAKK2ZpCisKK2lmIFsgLXogIiRESVNQTEFZX09SSUVOVEFUSU9OIiBdOyB0aGVuCisgICAgRElTUExBWV9PUklFTlRBVElPTj0wCitmaQorCitpZiBbIC1lICIvZGV2L2ZiIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJERJU1BMQVlfV0lEVEhfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfV0lEVEhfUElYRUxTPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQyIH0nYAorICAgIGZpCisKKyAgICBpZiBbIC16ICIkRElTUExBWV9IRUlHSFRfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfSEVJR0hUX1BJWEVMUz1gL3Vzci9zYmluL2Zic2V0IHwgZ3JlcCBnZW9tZXRyeSB8IGF3ayAneyBwcmludCAkMyB9J2AKKyAgICBmaQorCisgICAgaWYgWyAteiAiJERJU1BMQVlfQlBQIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfQlBQPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQ2IH0nYAorICAgIGZpCitmaQorCisjIAorIyBObyB3YXkgdG8gZ3Vlc3MgdGhlc2Ugb3IgaGF2ZSBhbnkgZGVmYXVsdHMKKyMKKyNESVNQTEFZX1dJRFRIX01NCisjRElTUExBWV9IRUlHSFRfTU0KKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm0vbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm0vbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybS9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjYvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ny9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVtaXBzL21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2Nzc3YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVwcGMvbWFjaGNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVwcGMvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZWEyMjcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXBwYy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz04MDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz02MDAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni02NC9tYWNoY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni02NC9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2LTY0L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2L21hY2hjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzMGJkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRGV2aWNlIGZvcm1mYWN0b3IgaW5mb3JtYXRpb24iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUFIgPSAicjQ1IgorCitTUkNfVVJJID0gImZpbGU6Ly9jb25maWcgZmlsZTovL21hY2hjb25maWciCitTID0gIiR7V09SS0RJUn0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCSMgSW5zdGFsbCBmaWxlIG9ubHkgaWYgaXQgaGFzIGNvbnRlbnRzCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJaWYgWyAtcyAiJHtTfS9tYWNoY29uZmlnIiBdOyB0aGVuCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9tYWNoY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvZ251LWVmaS1NYWtlLXNldGptcC5TLXBvcnRhYmxlLXRvLUFSTS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQxMjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gOGEzNTZkNGI2YTI0MmNlNjNiNzM5MjBkM2VkMzNmODhmOWUxMmZlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCA2IFNlcCAyMDE1IDA1OjIwOjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudS1lZmk6IE1ha2Ugc2V0am1wLlMgcG9ydGFibGUgdG8gQVJNCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhlIGZvbGxvd2luZyBlcnJvcjoKKworICAuLi4vbGliL2FybS9zZXRqbXAuUzoxODogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorICAuLi4vbGliL2FybS9zZXRqbXAuUzoyNjogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorCitUaGUgcHJvYmxlbSBpcyB0aGUgYXNzZW1ibHkgc3ludGF4IHRoYXQgaXMgdXNlZCBpcyBub3QgcG9ydGFibGUgdG8gQVJNLAord2hlcmUgdGhlICdAJyBzeW1ib2wgaXMgYSBjb21tZW50OgorCisgID4gTm90ZSBvbiB0YXJnZXRzIHdoZXJlIHRoZSBAIGNoYXJhY3RlciBpcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50CisgID4gKGVnIEFSTSkgdGhlbiBhbm90aGVyIGNoYXJhY3RlciBpcyB1c2VkIGluc3RlYWQuIEZvciBleGFtcGxlIHRoZQorICA+IEFSTSBwb3J0IHVzZXMgdGhlICUgY2hhcmFjdGVyLgorCisoRnJvbSBodHRwczovL3NvdXJjZXdhcmUub3JnL2JpbnV0aWxzL2RvY3MtMi4yNS9hcy9TZWN0aW9uLmh0bWwjU2VjdGlvbikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2FybS9zZXRqbXAuUyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYXJtL3NldGptcC5TIGIvbGliL2FybS9zZXRqbXAuUworaW5kZXggNmUzZmJmMC4uODVjODcwNSAxMDA2NDQKKy0tLSBhL2xpYi9hcm0vc2V0am1wLlMKKysrKyBiL2xpYi9hcm0vc2V0am1wLlMKK0BAIC0xNSw3ICsxNSw3IEBAIEJBU0lTLAorIAkudGV4dAorIAkuYXJtCisgCS5nbG9ibAlzZXRqbXAKKy0JLnR5cGUJc2V0am1wLCBAZnVuY3Rpb24KKysJLnR5cGUJc2V0am1wLCAlZnVuY3Rpb24KKyBzZXRqbXA6CisgCW1vdglyMywgcjEzCisgCXN0bWlhCXIwLCB7cjMtcjEyLHIxNH0KK0BAIC0yMyw2ICsyMyw2IEBAIHNldGptcDoKKyAJYngJbHIKKyAKKyAJLmdsb2JsCWxvbmdqbXAKKy0JLnR5cGUJbG9uZ2ptcCwgQGZ1bmN0aW9uCisrCS50eXBlCWxvbmdqbXAsICVmdW5jdGlvbgorIGxvbmdqbXA6CisgCWxkbWlhCXIwLCB7cjMtcjEyLHIxNH0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmFlMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2xpYi1NYWtlZmlsZS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwZGFhMzU0YTE2YWEzY2FkZTU2ZWQ0MjNkMGY4YTA0Y2YxYzIyZjlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDIzIEFwciAyMDE1IDAxOjQ5OjMxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYi9NYWtlZmlsZTogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBydW50aW1lL3J0bG9jay5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvcnRkYXRhLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgcnVudGltZS92bS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvZWZpcnRsaWIubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCitpbmRleCBkYzRiOTRhLi5mNjRkMWVkIDEwMDY0NAorLS0tIGEvbGliL01ha2VmaWxlCisrKysgYi9saWIvTWFrZWZpbGUKK0BAIC03Myw2ICs3Myw4IEBAIGFsbDogbGlic3ViZGlycyBsaWJlZmkuYQorIGxpYnN1YmRpcnM6CisgCWZvciBzZGlyIGluICQoU1VCRElSUyk7IGRvIG1rZGlyIC1wICQkc2RpcjsgZG9uZQorIAorKyQoT0JKUyk6IGxpYnN1YmRpcnMKKysKKyBsaWJlZmkuYTogJChPQkpTKQorIAkkKEFSKSBydiAkQCAkKE9CSlMpCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9wYXJhbGxlbC1tYWtlLWFyY2hpdmVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9wYXJhbGxlbC1tYWtlLWFyY2hpdmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YjQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRml4IHBhcmFsbGVsIG1ha2UgZmFpbHVyZSBmb3IgYXJjaGl2ZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBsaWIgYW5kIGdudWVmaSBtYWtlZmlsZXMgd2VyZSB1c2luZyB0aGUgbGliLmEoKSBmb3JtIHdoaWNoIGNvbXBpbGVzCithbmQgYXIncyBhcyBhIHBhaXIgaW5zdGVhZCBvZiBjb21waWxpbmcgYWxsIGFuZCB0aGVuIGFyJ2luZyB3aGljaCBjYW4KK3BhcmFsbGVsaXplIGJldHRlci4gVGhpcyB3YXMgcmVzdWx0aW5nIGluIGJ1aWxkIGZhaWx1cmVzIG9uIGxhcmdlciB2YWx1ZXMKK29mIC1qLgorCitTZWUgaHR0cDovL3d3dy5jaGVtaWUuZnUtYmVybGluLmRlL2NoZW1uZXQvdXNlL2luZm8vbWFrZS9tYWtlX3RvYy5odG1sI1RPQzEwNQorZm9yIGRldGFpbHMuCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCistLS0KKyBnbnVlZmkvTWFrZWZpbGUgfCAgICAzICsrLQorIGxpYi9NYWtlZmlsZSAgICB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnbnUtZWZpLTMuMC9saWIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnUtZWZpLTMuMC5vcmlnL2xpYi9NYWtlZmlsZQorKysrIGdudS1lZmktMy4wL2xpYi9NYWtlZmlsZQorQEAgLTY2LDcgKzY2LDggQEAgYWxsOiBsaWJzdWJkaXJzIGxpYmVmaS5hCisgbGlic3ViZGlyczoKKyAJZm9yIHNkaXIgaW4gJChTVUJESVJTKTsgZG8gbWtkaXIgLXAgJCRzZGlyOyBkb25lCisgCistbGliZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJlZmkuYSglKSwkKE9CSlMpKQorK2xpYmVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgbGliZWZpLmEgKn4gJChPQkpTKSAqLyoubworSW5kZXg6IGdudS1lZmktMy4wL2dudWVmaS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1lZmktMy4wLm9yaWcvZ251ZWZpL01ha2VmaWxlCisrKysgZ251LWVmaS0zLjAvZ251ZWZpL01ha2VmaWxlCitAQCAtNTEsNyArNTEsOCBAQCBUQVJHRVRTCT0gY3J0MC1lZmktJChBUkNIKS5vIGxpYmdudWVmaS5hCisgCisgYWxsOgkkKFRBUkdFVFMpCisgCistbGliZ251ZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJnbnVlZmkuYSglKSwkKE9CSlMpKQorK2xpYmdudWVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgJChUQVJHRVRTKSAqfiAqLm8gJChPQkpTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExYmE0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJMaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBFRkkgYmluYXJpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dudS1lZmkvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFybS5TO2JlZ2lubGluZT00O2VuZGxpbmU9OTttZDU9MjI0MGQ3YmJkZjA5MjgyOTRjMmY0YTY4YjE0ZDY1OTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFhcmNoNjQuUztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT1lNTgyNzY0YTQ3NzZlNjBjOTViZjlhYjYxNzM0M2QzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxpbnRmLmg7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjA7bWQ1PTIwMjc2NmI3OWQ3MDhlZmYzY2M3MGZjZTE1ZmI4MGM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luYy9lZmlzaGVsbHBhcm0uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTExO21kNT00NjhiMTIzMWIwNWJiYzg0YmFlM2EwZDU3NzRlM2JiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2RpdjY0LlM7YmVnaW5saW5lPTY7ZW5kbGluZT0xMjttZDU9YTk2Yzg0ZjVhZDEyYjRmMDExZjk4YjVkMDM5MjQyZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9tYXRoLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMDttZDU9NjRkZDE5ODdjZWUxZGNmNTlkMTFhYTU3MmNmYTY0NGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9pbml0cGxhdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTA7bWQ1PTY0ZGQxOTg3Y2VlMWRjZjU5ZDExYWE1NzJjZmE2NDRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vbGliMWZ1bmNzLlM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9ZjU2ZDVlYmJjODcxMzZiYzY2Y2ZlMjRkYjgyYmNmMDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FhcmNoNjQvbWF0aC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PWNmYWRlNGM1NjBlMDMzYTdiYjAyZGFiMjgyODcyYzdkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L2luaXRwbGF0LmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9OTAwY2IxZmZiZTNlMWRlZDM0NDEwMmJlOTIxODMwZjEgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjE1YTRiY2JjMThhOWE1ZTgxMTBlZDk1NTk3MDYyMmU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1MzBmMjFhMTVmZDljMjE0ZGQ5MmQyOWE2Y2FhMjBmYWM5ODkyODkyNjc1MTIwMjBiNmRhMWY1ZTZmNWI0Y2IiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKiktbGludXgiCisKK2RlZiBnbnVfZWZpX2FyY2goZCk6CisgICAgaW1wb3J0IHJlCisgICAgdGFyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHJlLm1hdGNoKCJpWzM0NTY3ODldODYiLCB0YXJjaCk6CisgICAgICAgIHJldHVybiAiaWEzMiIKKyAgICByZXR1cm4gdGFyY2gKKworRVhUUkFfT0VNQUtFID0gIidBUkNIPSR7QGdudV9lZmlfYXJjaChkKX0nICdDQz0ke0NDfScgJ0FTPSR7QVN9JyAnTEQ9JHtMRH0nICdBUj0ke0FSfScgXAorICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyAnT0JKQ09QWT0ke09CSkNPUFl9JyAnUFJFRklYPSR7cHJlZml4fScgJ0xJQkRJUj0ke2xpYmRpcn0nIFwKKyAgICAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0iJHtEfSIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLmxkcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLUZpeC1idWlsZC13aXRoLWdsaWJjLTIuMjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhYWE5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDI3NWZlMDI2OWVjYzAwYWY0Nzg4YWZhZjlkYzE1MWE1MGIyNTY0NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyOCBBdWcgMjAxNCAxOToyNjoxNCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgd2l0aCBnbGliYyAyLjIwCisKKyogZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jOiBzcXVhaGVzIGJlbG93IHdhcm5pbmcKKyAgd2FybmluZzogI3dhcm5pbmcgIl9CU0RfU09VUkNFIGFuZCBfU1ZJRF9TT1VSQ0UgYXJlIGRlcHJlY2F0ZWQsIHVzZSBfREVGQVVMVF9TT1VSQ0UiCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKy0tLQorIGdydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyBiL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworaW5kZXggN2U3MjVmNi4uOGRkOGU2NSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworKysrIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitAQCAtMTksNyArMTksNyBAQAorIAorICNpbmNsdWRlIDxjb25maWctdXRpbC5oPgorIAorLSNkZWZpbmUgX0JTRF9TT1VSQ0UKKysjZGVmaW5lIF9ERUZBVUxUX1NPVVJDRQorICNpbmNsdWRlIDxncnViL2ZzLmg+CisgI2luY2x1ZGUgPGdydWIvZmlsZS5oPgorICNpbmNsdWRlIDxncnViL2Rpc2suaD4KKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkYzExNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvZ251bGliL01ha2VmaWxlLmFtCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KK0BAIC00MTAsNyArNDEwLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTVlM2ViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT3JpZ2luYWwgY29tbWl0OiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9ncnViLmdpdC9jb21taXQvZ3J1Yi1jb3JlL25ldC9ib290cC5jP2lkPWYwNmMyMTcyYzBiMzIwNTJmMjJlMzc1MjM0NDVjZjhlN2FmZmFlYTMKKworRnJvbSAxNDlkMmExNGY0NzIzNzc4Y2VkMjNmNDM5NDg3MjAxY2NiZjFhMmM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjMgQXByIDIwMTUgMDc6MDM6MzQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFyc2VfZGhjcF92ZW5kb3I6IEFkZCBtaXNzaW5nIGNvbnN0IHF1YWxpZmllcnMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBncnViLWNvcmUvbmV0L2Jvb3RwLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jIGIvZ3J1Yi1jb3JlL25ldC9ib290cC5jCitpbmRleCBiYzA3ZDUzLi40NDEzMWVkIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jCisrKysgYi9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKK0BAIC01Miw5ICs1Miw5IEBAIHNldF9lbnZfbGltbl9ybyAoY29uc3QgY2hhciAqaW50ZXJuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgsCisgfQorIAorIHN0YXRpYyB2b2lkCistcGFyc2VfZGhjcF92ZW5kb3IgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZlbmQsIGludCBsaW1pdCwgaW50ICptYXNrKQorK3BhcnNlX2RoY3BfdmVuZG9yIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2ZW5kLCBpbnQgbGltaXQsIGludCAqbWFzaykKKyB7CistICBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisrICBjb25zdCBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisgCisgICBwdHIgPSBwdHIwID0gdmVuZDsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTUzZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jZmcKQEAgLTAsMCArMSwyIEBACitzZWFyY2guZmlsZSAoJGNtZHBhdGgpL0VGSS9CT09UL2dydWIuY2ZnIHJvb3QKK3NldCBwcmVmaXg9KCRyb290KS9FRkkvQk9PVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlY2UwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRGlzYWJsZSBsaWJsem1hIGlmIC0tZW5hYmxlLWxpYmx6bWE9bm8KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTAyOSwxMCArMTAyOSwyMCBAQCBmaQorIAorIEFDX1NVQlNUKFtMSUJHRU9NXSkKKyAKKy1BQ19DSEVDS19MSUIoW2x6bWFdLCBbbHptYV9jb2RlXSwKKy0gICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKy0gICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9MSUJMWk1BXSwgWzFdLAorLSAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTFpNQSBsaWJyYXJ5Ll0pXSwpCisrQUNfQVJHX0VOQUJMRShbbGlibHptYV0sCisrICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmx6bWFdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgbGlibHptYSBpbnRlZ3JhdGlvbiAoZGVmYXVsdD1ndWVzc2VkKV0pXSkKKytpZiB0ZXN0IHgiJGVuYWJsZV9saWJsem1hIiA9IHhubyA7IHRoZW4KKysgIGxpYmx6bWFfZXhjdXNlPSJleHBsaWNpdGx5IGRpc2FibGVkIgorK2ZpCisrCisraWYgdGVzdCB4IiRsaWJsem1hX2V4Y3VzZSIgPSB4IDsgdGhlbgorKyAgQUNfQ0hFQ0tfTElCKFtsem1hXSwgW2x6bWFfY29kZV0sCisrICAgICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0xJQkxaTUFdLCBbMV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIExaTUEgbGlicmFyeS5dKV0sKQorK2ZpCisrCisgQUNfU1VCU1QoW0xJQkxaTUFdKQorIAorIEFDX0FSR19FTkFCTEUoW2xpYnpmc10sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzk5OTJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitncnViLWNvcmUvbmV0L3RmdHAuYzogZml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KKworCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisJKHRmdHBfcmVjZWl2ZSk6IExpa2V3aXNlLgorCVJlcG9ydGVkIGJ5OiBNaWNoYWVsIERhdmlkc2F2ZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggODFiZGFlOS4uYzJmNDJkNSAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDkgQEAKKysyMDEyLTA3LTAyICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisrCisrCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisrCSh0ZnRwX3JlY2VpdmUpOiBMaWtld2lzZS4KKysJUmVwb3J0ZWQgYnk6IE1pY2hhZWwgRGF2aWRzYXZlci4KKysKKyAyMDEyLTA2LTI3ICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi4wMC4KK2RpZmYgLS1naXQgYS9ncnViLWNvcmUvbmV0L3RmdHAuYyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitpbmRleCA5YzcwZWZiLi5kMGYzOWVhIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKKysrKyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitAQCAtMTQzLDcgKzE0Myw3IEBAIGFjayAodGZ0cF9kYXRhX3QgZGF0YSwgZ3J1Yl91aW50MTZfdCBibG9jaykKKyAKKyAgIHRmdHBoX2FjayA9IChzdHJ1Y3QgdGZ0cGhkciAqKSBuYl9hY2suZGF0YTsKKyAgIHRmdHBoX2Fjay0+b3Bjb2RlID0gZ3J1Yl9jcHVfdG9fYmUxNiAoVEZUUF9BQ0spOworLSAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGJsb2NrOworKyAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGdydWJfY3B1X3RvX2JlMTYgKGJsb2NrKTsKKyAKKyAgIGVyciA9IGdydWJfbmV0X3NlbmRfdWRwX3BhY2tldCAoZGF0YS0+c29jaywgJm5iX2Fjayk7CisgICBpZiAoZXJyKQorQEAgLTIyNSw3ICsyMjUsNyBAQCB0ZnRwX3JlY2VpdmUgKGdydWJfbmV0X3VkcF9zb2NrZXRfdCBzb2NrIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJICAgIGdydWJfcHJpb3JpdHlfcXVldWVfcG9wIChkYXRhLT5wcSk7CisgCisgCSAgICBpZiAoZmlsZS0+ZGV2aWNlLT5uZXQtPnBhY2tzLmNvdW50IDwgNTApCistCSAgICAgIGVyciA9IGFjayAoZGF0YSwgdGZ0cGgtPnUuZGF0YS5ibG9jayk7CisrCSAgICAgIGVyciA9IGFjayAoZGF0YSwgZGF0YS0+YmxvY2sgKyAxKTsKKyAJICAgIGVsc2UKKyAJICAgICAgeworIAkJZmlsZS0+ZGV2aWNlLT5uZXQtPnN0YWxsID0gMTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWlzc3VlLXdpdGgtZmxleC0yLjUuMzcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhZTJmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworVGhpcyBmaXhlcyBjb21waWxhdGlvbiBpc3N1ZXMgd2hlbiB1c2luZyBmbGV4LTIuNS4zNy4gSXQgd2FzIHRha2VuIGZyb20gdXBzdHJlYW0uCisKK09yaWdpbmFsIGF1dGhvciBpczogVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCTIwMTItMDYtMDggMjM6MjQ6MTUuMDAwMDAwMDAwICswMzAwCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9zY3JpcHQveXlsZXgubAkyMDEzLTA3LTMxIDE0OjM0OjQwLjcwODEwMDk4MiArMDMwMAorQEAgLTI5LDYgKzI5LDggQEAKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyIKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaWduLWNvbXBhcmUiCisgCisgI2RlZmluZSB5eWZyZWUgICAgZ3J1Yl9sZXhlcl95eWZyZWUKKyAjZGVmaW5lIHl5YWxsb2MgICBncnViX2xleGVyX3l5YWxsb2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi0yLjAwLWFkZC1vZS1rZXJuZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4OTE2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gN2FiNTc2YTdjNjE0MDZiN2U2MzczOWQxYjExMDE3YWUzMzZiOTAwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAzIE1hciAyMDE0IDAzOjM0OjQ4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdydWIuZC8xMF9saW51eC5pbjogYWRkIG9lJ3Mga2VybmVsIG5hbWUKKworT3VyIGtlcm5lbCdzIG5hbWUgaXMgYnpJbWFnZSwgd2UgbmVlZCBhZGQgaXQgdG8gZ3J1Yi5kLzEwX2xpbnV4LmluIHNvCit0aGF0IHRoZSBncnViLW1rY29uZmlnIGFuZCBncnViLWluc3RhbGwgY2FuIHdvcmsgY29ycmVjdGx5LgorCitXZSBvbmx5IG5lZWQgYWRkIHRoZSBiekltYWdlIHRvIHV0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluLCBidXQgYWxzbyBhZGQgaXQKK3RvIHV0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiB0byBrZWVwIGNvbXBhdGliaWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdXRpbC9ncnViLmQvMTBfbGludXguaW4gICAgIHwgICAgNCArKy0tCisgdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC9ncnViLmQvMTBfbGludXguaW4gYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgoraW5kZXggMTQ0MDJlOC4uYzU4ZjQxNyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCisrKysgYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgorQEAgLTE1MywxMSArMTUzLDExIEBAIEVPRgorIG1hY2hpbmU9YHVuYW1lIC1tYAorIGNhc2UgIngkbWFjaGluZSIgaW4KKyAgICAgeGk/ODYgfCB4eDg2XzY0KQorLQlsaXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnV6LSogL3ZtbGludXotKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisrCWxpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2UtKiAvYnpJbWFnZS0qIC9ib290L3ZtbGludXotKiAvdm1saW51ei0qIC9ib290L2tlcm5lbC0qIDsgZG8KKyAgICAgICAgICAgICAgICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIiA7IHRoZW4gZWNobyAtbiAiJGkgIiA7IGZpCisgICAgICAgICAgICAgICBkb25lYCA7OworICAgICAqKSAKKy0JbGlzdD1gZm9yIGkgaW4gL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvdm1saW51ei0qIC92bWxpbnV4LSogL2Jvb3Qva2VybmVsLSogOyBkbworKwlsaXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlLSogL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvYnpJbWFnZS0qIC92bWxpbnV6LSogL3ZtbGludXgtKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisgICAgICAgICAgICAgICAgICAgaWYgZ3J1Yl9maWxlX2lzX25vdF9nYXJiYWdlICIkaSIgOyB0aGVuIGVjaG8gLW4gIiRpICIgOyBmaQorIAkgICAgIGRvbmVgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiBiL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgoraW5kZXggMWQ5NDUwMi4uYjJkZWNmMyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgorKysrIGIvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCitAQCAtMTM4LDcgKzEzOCw3IEBAIEVPRgorIEVPRgorIH0KKyAKKy1saW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnVbeHpdLSogL3ZtbGludVt4el0tKiAvYm9vdC9rZXJuZWwtKjsgZG8KKytsaW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlW3h6XS0qIC9iekltYWdlW3h6XS0qIC9ib290L3ZtbGludVt4el0tKiAvdm1saW51W3h6XS0qIC9ib290L2tlcm5lbC0qOyBkbworICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIjsgdGhlbgorICAgICAJYmFzZW5hbWU9JChiYXNlbmFtZSAkaSkKKyAJdmVyc2lvbj0kKGVjaG8gJGJhc2VuYW1lIHwgc2VkIC1lICJzLF5bXjAtOV0qLSwsZyIpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZWY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgY29uZmlndXJlIGZhaWx1cmUKKworY29uZmlndXJlOjIwMzA2OiBjaGVja2luZyB3aGV0aGVyIGBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cnIGdlbmVyYXRlcyBjYWxscyB0byBgX19lbmFibGVfZXhlY3V0ZV9zdGFjaygpJworY29uZmlndXJlOjIwMzIwOiBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtbWZwbWF0aD0zODcgLWZuby1kd2FyZjItY2ZpLWFzbSAtbTMyIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1XZXJyb3IgLVduby10cmFtcG9saW5lcyAtZmFsaWduLWxvb3BzPTEgLVMgY29uZnRlc3QuYworY29uZnRlc3QuYzozMDg6NjogZXJyb3I6IG5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ2cnIFstV2Vycm9yPW1pc3NpbmctcHJvdG90eXBlc10KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCitjb25maWd1cmU6MjAzMjM6ICQ/ID0gMQorY29uZmlndXJlOjIwMzI3OiBlcnJvcjogY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9idWlsZGRpc2svYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9lbWVubG93IGZhaWxlZCB0byBwcm9kdWNlIGFzc2VtYmx5IGNvZGUKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDQvMTMKKworSW5kZXg6IGdydWItMi4wMC9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9hY2luY2x1ZGUubTQKKysrKyBncnViLTIuMDAvYWNpbmNsdWRlLm00CitAQCAtMzE3LDYgKzMxNyw3IEBAIGRubCBDaGVjayBpZiB0aGUgQyBjb21waWxlciBnZW5lcmF0ZXMgY2EKKyBBQ19ERUZVTihbZ3J1Yl9DSEVDS19FTkFCTEVfRVhFQ1VURV9TVEFDS10sWworIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBgJENDJyBnZW5lcmF0ZXMgY2FsbHMgdG8gYF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2soKSddKQorIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFtbCisrdm9pZCBnIChpbnQpOworIHZvaWQgZiAoaW50ICgqcCkgKHZvaWQpKTsKKyB2b2lkIGcgKGludCBpKQorIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTdmMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHRoaXMgY29uZmlndXJlIGlzc3VlIGZvciBncnViIHdoZW4gLW1mcG1hdGg9c3NlIGlzIGluIHRoZSBnY2MgcGFyYW1ldGVycy4KKworY29uZmlndXJlOjIwNTc0OiBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vdXNyL2xvY2FsL2Rldi95b2N0by9ncnVidGVzdDIvYnVpbGQvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtZm5vLWR3YXJmMi1jZmktYXNtIC1tMzIgLWZuby1zdGFjay1wcm90ZWN0b3IgLW1uby1zdGFjay1hcmctcHJvYmUgLVdlcnJvciAtbm9zdGRsaWIgLVdsLC0tZGVmc3ltLF9fX21haW49MHg4MTAwICAtV2FsbCAtVyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAtREdSVUJfTUFDSElORV9QQ0JJT1M9MSAtREdSVUJfTUFDSElORT1JMzg2X1BDIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIGNvbmZ0ZXN0LmMgID4mNQorY29uZnRlc3QuYzoxOjA6IGVycm9yOiBTU0UgaW5zdHJ1Y3Rpb24gc2V0IGRpc2FibGVkLCB1c2luZyAzODcgYXJpdGhtZXRpY3MgWy1XZXJyb3JdCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNC8xMworCitJbmRleDogZ3J1Yi0xLjk5L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdydWItMS45OS9jb25maWd1cmUuYWMKK0BAIC0zNzgsNyArMzc4LDcgQEAgaWYgdGVzdCAieCR0YXJnZXRfY3B1IiA9IHhpMzg2OyB0aGVuCisgCisgICAjIFNvbWUgdG9vbGNoYWlucyBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYnkgZGVmYXVsdCwgYnV0IHRoZXkgbmVlZAorICAgIyByZWdpc3RlcnMgdGhhdCBhcmVuJ3Qgc2V0IHVwIHByb3Blcmx5IGluIEdSVUIuCistICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyIKKysgIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTIC1tbm8tbW14IC1tbm8tc3NlIC1tbm8tc3NlMiAtbW5vLTNkbm93IC1tZnBtYXRoPTM4NyIKKyBmaQorIAorICMgQnkgZGVmYXVsdCwgR0NDIDQuNCBnZW5lcmF0ZXMgLmVoX2ZyYW1lIHNlY3Rpb25zIGNvbnRhaW5pbmcgdW53aW5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWFsbG93LWEtY29tcGlsYXRpb24td2l0aG91dC1tY21vZGVsLWxhcmdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODhmY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaApAQCAtMCwwICsxLDEzMSBAQAorQWxsb3cgYSBjb21waWxhdGlvbiB3aXRob3V0IC1tY21vZGVsPWxhcmdlCisKK0l0J3MgcHJvdmlkZWQgYnkgVmxhZGltaXIgU2VyYmluZW5rbywgYW5kIGhlIHdpbGwgY29tbWl0CitpdCB1cHN0cmVhbSBzbyBpdCBzaG91bGQgYmUgYmFja3BvcnQgcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworLS0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmOGZiOGEuLjJjNWU2ZWQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcyMyw5ICs3MjMsNyBAQCBpZiB0ZXN0ICIkdGFyZ2V0X2NwdSIgPSB4ODZfNjQ7IHRoZW4KKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9eWVzXSwKKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9bm9dKQorICAgXSkKKy0gIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHhubzsgdGhlbgorLSAgICBBQ19NU0dfRVJST1IoWy1tY21vZGVsPWxhcmdlIG5vdCBzdXBwb3J0ZWQuIFVwZ3JhZGUgeW91ciBnY2MuXSkKKy0gIGVsc2UKKysgIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHh5ZXM7IHRoZW4KKyAgICAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLW1jbW9kZWw9bGFyZ2UiCisgICBmaQorIGZpCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworaW5kZXggMTQwOWI1ZC4uNmU5ZGFjZSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworQEAgLTMyLDYgKzMyLDEyIEBACisgI2RlZmluZSBCWVRFU19UT19QQUdFUyhieXRlcykJKCgoYnl0ZXMpICsgMHhmZmYpID4+IDEyKQorICNkZWZpbmUgUEFHRVNfVE9fQllURVMocGFnZXMpCSgocGFnZXMpIDw8IDEyKQorCisrI2lmIGRlZmluZWQgKF9fY29kZV9tb2RlbF9sYXJnZV9fKSB8fCAhZGVmaW5lZCAoX194ODZfNjRfXykKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweGZmZmZmZmZmCisrI2Vsc2UKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweDdmZmZmZmZmCisrI2VuZGlmCisrCisgLyogVGhlIHNpemUgb2YgYSBtZW1vcnkgbWFwIG9idGFpbmVkIGZyb20gdGhlIGZpcm13YXJlLiBUaGlzIG11c3QgYmUKKyAgICBhIG11bHRpcGxpZXIgb2YgNEtCLiAgKi8KKyAjZGVmaW5lIE1FTU9SWV9NQVBfU0laRQkweDMwMDAKK0BAIC01OCw3ICs2NCw3IEBAIGdydWJfZWZpX2FsbG9jYXRlX3BhZ2VzIChncnViX2VmaV9waHlzaWNhbF9hZGRyZXNzX3QgYWRkcmVzcywKKworICNpZiAxCisgICAvKiBMaW1pdCB0aGUgbWVtb3J5IGFjY2VzcyB0byBsZXNzIHRoYW4gNEdCIGZvciAzMi1iaXQgcGxhdGZvcm1zLiAgKi8KKy0gIGlmIChhZGRyZXNzID4gMHhmZmZmZmZmZikKKysgIGlmIChhZGRyZXNzID4gTUFYX1VTQUJMRV9BRERSRVNTKQorICAgICByZXR1cm4gMDsKKyAjZW5kaWYKKworQEAgLTY2LDcgKzcyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgaWYgKGFkZHJlc3MgPT0gMCkKKyAgICAgeworICAgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9NQVhfQUREUkVTUzsKKy0gICAgICBhZGRyZXNzID0gMHhmZmZmZmZmZjsKKysgICAgICBhZGRyZXNzID0gTUFYX1VTQUJMRV9BRERSRVNTOworICAgICB9CisgICBlbHNlCisgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9BRERSRVNTOworQEAgLTg2LDcgKzkyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgICB7CisgICAgICAgLyogVWdnaCwgdGhlIGFkZHJlc3MgMCB3YXMgYWxsb2NhdGVkLi4uIFRoaXMgaXMgdG9vIGFubm95aW5nLAorIAkgc28gcmVhbGxvY2F0ZSBhbm90aGVyIG9uZS4gICovCistICAgICAgYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisrICAgICAgYWRkcmVzcyA9IE1BWF9VU0FCTEVfQUREUkVTUzsKKyAgICAgICBzdGF0dXMgPSBlZmlfY2FsbF80IChiLT5hbGxvY2F0ZV9wYWdlcywgdHlwZSwgR1JVQl9FRklfTE9BREVSX0RBVEEsIHBhZ2VzLCAmYWRkcmVzcyk7CisgICAgICAgZ3J1Yl9lZmlfZnJlZV9wYWdlcyAoMCwgcGFnZXMpOworICAgICAgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfU1VDQ0VTUykKK0BAIC0zMTksNyArMzI1LDcgQEAgZmlsdGVyX21lbW9yeV9tYXAgKGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9yX3QgKm1lbW9yeV9tYXAsCisgICAgIHsKKyAgICAgICBpZiAoZGVzYy0+dHlwZSA9PSBHUlVCX0VGSV9DT05WRU5USU9OQUxfTUVNT1JZCisgI2lmIDEKKy0JICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCA8PSAweGZmZmZmZmZmCisrCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgPD0gTUFYX1VTQUJMRV9BRERSRVNTCisgI2VuZGlmCisgCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgKyBQQUdFU19UT19CWVRFUyAoZGVzYy0+bnVtX3BhZ2VzKSA+IDB4MTAwMDAwCisgCSAgJiYgZGVzYy0+bnVtX3BhZ2VzICE9IDApCitAQCAtMzM3LDkgKzM0Myw5IEBAIGZpbHRlcl9tZW1vcnlfbWFwIChncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90ICptZW1vcnlfbWFwLAorICNpZiAxCisgCSAgaWYgKEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkKKyAJICAgICAgKyBmaWx0ZXJlZF9kZXNjLT5udW1fcGFnZXMKKy0JICAgICAgPiBCWVRFU19UT19QQUdFUyAoMHgxMDAwMDAwMDBMTCkpCisrCSAgICAgID4gQllURVNfVE9fUEFHRVMgKE1BWF9VU0FCTEVfQUREUkVTUysxTEwpKQorIAkgICAgZmlsdGVyZWRfZGVzYy0+bnVtX3BhZ2VzCistCSAgICAgID0gKEJZVEVTX1RPX1BBR0VTICgweDEwMDAwMDAwMExMKQorKwkgICAgICA9IChCWVRFU19UT19QQUdFUyAoTUFYX1VTQUJMRV9BRERSRVNTKzFMTCkKKyAJCSAtIEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkpOworICNlbmRpZgorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworaW5kZXggNjVmMDllZi4uMTdjMTIxNSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCisrKysgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworQEAgLTEwMCwxNCArMTAwLDMyIEBAIGdydWJfYXJjaF9kbF9yZWxvY2F0ZV9zeW1ib2xzIChncnViX2RsX3QgbW9kLCB2b2lkICplaGRyKQorIAkJICAgIGJyZWFrOworCisgCQkgIGNhc2UgUl9YODZfNjRfUEMzMjoKKy0JCSAgICAqYWRkcjMyICs9IHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlIC0KKy0JCSAgICAgICAgICAgICAgKEVsZjY0X1h3b3JkKSBzZWctPmFkZHIgLSByZWwtPnJfb2Zmc2V0OworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZTsKKysJCSAgICAgIHZhbHVlID0gKChncnViX2ludDMyX3QpICphZGRyMzIpICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWUgLQorKwkJCShFbGY2NF9Yd29yZCkgc2VnLT5hZGRyIC0gcmVsLT5yX29mZnNldDsKKysJCSAgICAgIGlmICh2YWx1ZSAhPSAoZ3J1Yl9pbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorIAkJICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgY2FzZSBSX1g4Nl82NF8zMjoKKysJCSAgICB7CisrCQkgICAgICBncnViX3VpbnQ2NF90IHZhbHVlID0gKmFkZHIzMiArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX3VpbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorKwkJICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgIGNhc2UgUl9YODZfNjRfMzJTOgorLSAgICAgICAgICAgICAgICAgICAgKmFkZHIzMiArPSByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZSA9ICgoZ3J1Yl9pbnQzMl90KSAqYWRkcjMyKSArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX2ludDMyX3QpIHZhbHVlKQorKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKKysJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKKysJCSAgICB9CisrCQkgICAgYnJlYWs7CisKKyAJCSAgZGVmYXVsdDoKKyAJCSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZWI2MzY4ZTY1ZjY5ODhlZWJhZDI2Y2ViZGVjMDU3Zjc5N2JjZWI0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IFNlcCAyMDE0IDAwOjAyOjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIGdsaWJjIDIuMjAKKworKiBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmM6IHNxdWFoZXMgYmVsb3cgd2FybmluZworICB3YXJuaW5nOiAjd2FybmluZyAiX0JTRF9TT1VSQ0UgYW5kIF9TVklEX1NPVVJDRSBhcmUgZGVwcmVjYXRlZCwgdXNlIF9ERUZBVUxUX1NPVVJDRSIKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitpbmRleCAzY2IwODljLi5hNTFlZTMyIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKK0BAIC0xNiw3ICsxNiw3IEBACisgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgKi8KKy0jZGVmaW5lIF9CU0RfU09VUkNFCisrI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UKKyAjaW5jbHVkZSA8Z3J1Yi9mcy5oPgorICNpbmNsdWRlIDxncnViL2ZpbGUuaD4KKyAjaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1pbnN0YWxsLmluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1pbnN0YWxsLmluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjk1MWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWluc3RhbGwuaW4ucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworT3VyIHVzZSBvZiBncnViLWluc3RhbGwgZG9lc24ndCByZXF1aXJlIHRoZSAteCBvcHRpb24sIHNvIHdlIHNob3VsZCBiZQorYmUgYWJsZSBtYWtlIHVzZSBvZiBncmVwIHZlcnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdC4KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGdydWItMS45OS91dGlsL2dydWItaW5zdGFsbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MjAuMDkzOTA2Njc5IC0wNTAwCisrKysgZ3J1Yi0xLjk5L3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MzAuODU0NzM3ODgyIC0wNTAwCitAQCAtNTEwLDcgKzUxMCw3IEBACisgCisgaWYgWyAieCR7ZGV2YWJzdHJhY3Rpb25fbW9kdWxlfSIgPSAieCIgXSA7IHRoZW4KKyAgICAgaWYgWyB4IiR7aW5zdGFsbF9kZXZpY2V9IiAhPSB4IF07IHRoZW4KKy0gICAgICBpZiBlY2hvICIke2luc3RhbGxfZGV2aWNlfSIgfCBncmVwIC1xeCAiKC4qKSIgOyB0aGVuCisrICAgICAgaWYgZWNobyAiJHtpbnN0YWxsX2RldmljZX0iIHwgZ3JlcCAtcSAiKC4qKSIgOyB0aGVuCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSIke2luc3RhbGxfZGV2aWNlfSIKKyAgICAgICBlbHNlCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSJgIiRncnViX3Byb2JlIiAtLWRldmljZS1tYXA9IiR7ZGV2aWNlX21hcH0iIC0tdGFyZ2V0PWRyaXZlIC0tZGV2aWNlICIke2luc3RhbGxfZGV2aWNlfSJgIiB8fCBleGl0IDEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItbm8tdW51c2VkLXJlc3VsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2JkMDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1NpZ25lZC1vZmYtYnk6IFJhZHUgTW9pc2FuIDxyYWR1Lm1vaXNhbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSSBoYWQgYW4gZXJyb3IgYmVjYXVzZSBvZiBhbiB1bnVzZWQgcmV0dXJuIHZhbHVlIGZvciByZWFkKCkuCitJIGFkZGVkIC1Xbm8tdW51c2VkLXJlc3VsdC4KKworSW5kZXg6IGdydWItMi4wMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9jb25maWd1cmUuYWMJMjAxMi0wOC0xMyAxNjozMjozMy4wMDAwMDAwMDAgKzAzMDAKKysrKyBncnViLTIuMDAvY29uZmlndXJlLmFjCTIwMTItMDgtMTMgMTY6Mzg6MjIuMDAwMDAwMDAwICswMzAwCitAQCAtMzk0LDcgKzM5NCw3IEBACisgTElCUz0iIgorIAorICMgZGVidWcgZmxhZ3MuCistV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1XdmFyaWFkaWMtbWFjcm9zIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdwb2ludGVyLXNpZ24iCisrV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1Xbm8tdW51c2VkLXJlc3VsdCAtV3ZhcmlhZGljLW1hY3JvcyAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciAtV3dyaXRlLXN0cmluZ3MgLVduZXN0ZWQtZXh0ZXJucyAtV3N0cmljdC1wcm90b3R5cGVzIC1XcG9pbnRlci1zaWduIgorIEhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgJFdBUk5fRkxBR1MiCisgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgJFdBUk5fRkxBR1MgLWcgLVdyZWR1bmRhbnQtZGVjbHMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyBUQVJHRVRfQ0NBU0ZMQUdTPSIkVEFSR0VUX0NDQVNGTEFHUyAtZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTRmNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gOGZiYjE1MGE1Njk2NmVkZGU0ZGMwN2I4ZDAxYmU1ZWIxNDliNjVhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvbGluIFdhdHNvbiA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KK0RhdGU6IFN1biwgMjAgSmFuIDIwMTMgMjM6MDM6MzUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdICogZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgKGdydWJfY21kX2luaXRyZCk6IERvbid0CisgYWRkIHRoZSBpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorIHRoaXMgYWRkcmVzcy4KKworY29tbWl0IDZhMGRlYmJkOTE2N2U4Zjc5Y2RlZjU0OTdhNzNkMjNlNTgwYzBjZDQgdXBzdHJlYW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTaGFuIEhhaSA8c2hhbi5oYWlAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKKyBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGMyZjQyZDUuLjQwY2I1MDggMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSw5IEBACisrMjAxMy0wMS0yMCAgQ29saW4gV2F0c29uICA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KKysKKysJKiBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyAoZ3J1Yl9jbWRfaW5pdHJkKTogRG9uJ3QgYWRkIHRoZQorKwlpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorKwl0aGlzIGFkZHJlc3MuCisrCisgMjAxMi0wNy0wMiAgVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorIAorIAkqIGdydWItY29yZS9uZXQvdGZ0cC5jIChhY2spOiBGaXggZW5kaWFubmVzcyBwcm9ibGVtLgorZGlmZiAtLWdpdCBhL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK2luZGV4IDYyMDg3Y2YuLmUyNDI1YzggMTAwNjQ0CistLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYworKysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK0BAIC0xMDk4LDggKzEwOTgsNyBAQCBncnViX2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICB3b3JzZSB0aGFuIHRoYXQgb2YgTGludXggMi4zLnh4LCBzbyBhdm9pZCB0aGUgbGFzdCA2NGtiLiAgKi8KKyAgIGFkZHJfbWF4IC09IDB4MTAwMDA7CisgCistICBhZGRyX21pbiA9IChncnViX2FkZHJfdCkgcHJvdF9tb2RlX3RhcmdldCArIHByb3RfaW5pdF9zcGFjZQorLSAgICAgICAgICAgICArIHBhZ2VfYWxpZ24gKHNpemUpOworKyAgYWRkcl9taW4gPSAoZ3J1Yl9hZGRyX3QpIHByb3RfbW9kZV90YXJnZXQgKyBwcm90X2luaXRfc3BhY2U7CisgCisgICAvKiBQdXQgdGhlIGluaXRyZCBhcyBoaWdoIGFzIHBvc3NpYmxlLCA0S2lCIGFsaWduZWQuICAqLworICAgYWRkciA9IChhZGRyX21heCAtIHNpemUpICYgfjB4RkZGOworLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1OWExYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworcmVtb3ZlIHRoZSBncnViLXNwYXJjNjQtc2V0dXAgZmlsZXMgZnJvbSB0aGUgeDg2IGJ1aWxkcy4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworLS0tIGEvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQxOjAyLjQ0MTAxMTI3OCAtMDcwMAorKysrIGIvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQ0OjI2LjI0NTAyMTE0MiAtMDcwMAorQEAgLTQ2OTIsOSArNDY5Miw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2VtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3MTUsOSArNDcxNSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcGMKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00NzM4LDkgKzQ3MzgsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X2VmaQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3NjEsOSArNDc2MSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcWVtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3ODQsOSArNDc4NCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfY29yZWJvb3QKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODA3LDkgKzQ4MDcsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X211bHRpYm9vdAorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ4MzAsOSArNDgzMCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfaWVlZTEyNzUKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODUzLDkgKzQ4NTMsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF94ODZfNjRfZWZpCistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2Y3ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdydWItMS45OS9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTEuOTkub3JpZy9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgJMjAxMC0xMi0wMSAwNjo0NTo0My4wMDAwMDAwMDAgLTA4MDAKKysrKyBncnViLTEuOTkvZ3J1Yi1jb3JlL2dudWxpYi9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MjU6MDIuMDU3MDk5MTA3IC0wNzAwCitAQCAtMTQwLDggKzE0MCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvYXV0b2hlbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvYXV0b2hlbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2MjA3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9hdXRvaGVsbC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBncnViLTAuOTcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0wLjk3Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDktMTIgMTc6Mzk6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3J1Yi0wLjk3L2NvbmZpZ3VyZS5hYwkyMDA4LTA5LTEyIDE3OjQwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTYwLDggKzYwLDggQEAgQUNfUFJPR19DQworIF9BTV9ERVBFTkRFTkNJRVMoQ0MpCisgCisgZG5sIEJlY2F1c2UgcmVjZW50IGF1dG9tYWtlIGNvbXBsYWlucyBhYm91dCBBUywgc2V0IGl0IGhlcmUuCistQ0NBUz0iJENDIgorLUFDX1NVQlNUKENDQVMpCisrQU1fUFJPR19BUworK0FDX1NVQlNUKEFTKQorIAorIEFDX0FSR19XSVRIKGJpbnV0aWxzLAorICAgWyAgLS13aXRoLWJpbnV0aWxzPURJUiAgICAgc2VhcmNoIHRoZSBkaXJlY3RvcnkgRElSIHRvIGZpbmQgYmludXRpbHNdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWItc3VwcG9ydC0yNTZieXRlLWlub2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWItc3VwcG9ydC0yNTZieXRlLWlub2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjVkMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yi1zdXBwb3J0LTI1NmJ5dGUtaW5vZGUucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbTm8gTG9uZ2VyIE1haW50YWluZWRdCisKK2RpZmYgLU5hdXIgZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYyBncnViLTAuOTctODEwL3N0YWdlMi9mc3lzX2V4dDJmcy5jCistLS0gZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYwkyMDA4LTA3LTIxIDAwOjQwOjIxLjY2ODg3OTQ3NSAtMDYwMAorKysrIGdydWItMC45Ny04MTAvc3RhZ2UyL2ZzeXNfZXh0MmZzLmMJMjAwOC0wNy0yMSAwMTowMToxMS4wNjM5NTM3NzMgLTA2MDAKK0BAIC03OSw3ICs3OSw1MiBAQAorICAgICBfX3UzMiBzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisgICAgIF9fdTE2IHNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKyAgICAgX191MTYgc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworLSAgICBfX3UzMiBzX3Jlc2VydmVkWzIzNV07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKysgICAgLyoKKysgICAgICogVGhlc2UgZmllbGRzIGFyZSBmb3IgRVhUMl9EWU5BTUlDX1JFViBzdXBlcmJsb2NrcyBvbmx5LgorKyAgICAgKgorKyAgICAgKiBOb3RlOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb21wYXRpYmxlIGZlYXR1cmUgc2V0IGFuZAorKyAgICAgKiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IGlzIHRoYXQgaWYgdGhlcmUgaXMgYSBiaXQgc2V0CisrICAgICAqIGluIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgdGhhdCB0aGUga2VybmVsIGRvZXNuJ3QKKysgICAgICoga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKysgICAgICoKKysgICAgICogZTJmc2NrJ3MgcmVxdWlyZW1lbnRzIGFyZSBtb3JlIHN0cmljdDsgaWYgaXQgZG9lc24ndCBrbm93CisrICAgICAqIGFib3V0IGEgZmVhdHVyZSBpbiBlaXRoZXIgdGhlIGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlCisrICAgICAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisrICAgICAqIHRoaW5ncyBpdCBkb2Vzbid0IHVuZGVyc3RhbmQuLi4KKysgICAgICovCisrICAgIF9fdTMyIHNfZmlyc3RfaW5vOwkJLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2RlICovCisrICAgIF9fdTE2IHNfaW5vZGVfc2l6ZTsJCS8qIHNpemUgb2YgaW5vZGUgc3RydWN0dXJlICovCisrICAgIF9fdTE2IHNfYmxvY2tfZ3JvdXBfbnI7CS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisrICAgIF9fdTMyIHNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX2luY29tcGF0OwkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX3JvX2NvbXBhdDsJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworKyAgICBfX3U4ICBzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciB2b2x1bWUgKi8KKysgICAgY2hhciAgc192b2x1bWVfbmFtZVsxNl07CS8qIHZvbHVtZSBuYW1lICovCisrICAgIGNoYXIgIHNfbGFzdF9tb3VudGVkWzY0XTsJLyogZGlyZWN0b3J5IHdoZXJlIGxhc3QgbW91bnRlZCAqLworKyAgICBfX3UzMiBzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7IC8qIEZvciBjb21wcmVzc2lvbiAqLworKyAgICAvKgorKyAgICAgKiBQZXJmb3JtYW5jZSBoaW50cy4gIERpcmVjdG9yeSBwcmVhbGxvY2F0aW9uIHNob3VsZCBvbmx5CisrICAgICAqIGhhcHBlbiBpZiB0aGUgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgZmxhZyBpcyBvbi4KKysgICAgICovCisrICAgIF9fdTggIHNfcHJlYWxsb2NfYmxvY2tzOwkvKiBOciBvZiBibG9ja3MgdG8gdHJ5IHRvIHByZWFsbG9jYXRlKi8KKysgICAgX191OCAgc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX2dkdF9ibG9ja3M7LyogUGVyIGdyb3VwIHRhYmxlIGZvciBvbmxpbmUgZ3Jvd3RoICovCisrICAgIC8qCisrICAgICAqIEpvdXJuYWxpbmcgc3VwcG9ydCB2YWxpZCBpZiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMIHNldC4KKysgICAgICovCisrICAgIF9fdTggc19qb3VybmFsX3V1aWRbMTZdOwkvKiB1dWlkIG9mIGpvdXJuYWwgc3VwZXJibG9jayAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfaW51bTsJLyogaW5vZGUgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfZGV2OwkvKiBkZXZpY2UgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2xhc3Rfb3JwaGFuOwkvKiBzdGFydCBvZiBsaXN0IG9mIGlub2RlcyB0byBkZWxldGUgKi8KKysgICAgX191MzIgc19oYXNoX3NlZWRbNF07CS8qIEhUUkVFIGhhc2ggc2VlZCAqLworKyAgICBfX3U4ICBzX2RlZl9oYXNoX3ZlcnNpb247CS8qIERlZmF1bHQgaGFzaCB2ZXJzaW9uIHRvIHVzZSAqLworKyAgICBfX3U4ICBzX2pubF9iYWNrdXBfdHlwZTsgCS8qIERlZmF1bHQgdHlwZSBvZiBqb3VybmFsIGJhY2t1cCAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX3dvcmRfcGFkOworKyAgICBfX3UzMiBzX2RlZmF1bHRfbW91bnRfb3B0czsKKysgICAgX191MzIgc19maXJzdF9tZXRhX2JnOwkvKiBGaXJzdCBtZXRhYmxvY2sgZ3JvdXAgKi8KKysgICAgX191MzIgc19ta2ZzX3RpbWU7CQkvKiBXaGVuIHRoZSBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkICovCisrICAgIF9fdTMyIHNfam5sX2Jsb2Nrc1sxN107IAkvKiBCYWNrdXAgb2YgdGhlIGpvdXJuYWwgaW5vZGUgKi8KKysgICAgX191MzIgc19yZXNlcnZlZFsxNzJdOwkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisgICB9OworIAorIHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK0BAIC0yMTgsNiArMjYzLDE0IEBACisgI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLKHMpICAgICAgICAgIChFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyAjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0tfQklUUyhzKQkJKGxvZzIoRVhUMl9BRERSX1BFUl9CTE9DSyhzKSkpCisgCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX1JFViAgIDAgICAvKiBUaGUgZ29vZCBvbGQgKG9yaWdpbmFsKSBmb3JtYXQgKi8KKysjZGVmaW5lIEVYVDJfRFlOQU1JQ19SRVYgICAgMSAgIC8qIFYyIGZvcm1hdCB3LyBkeW5hbWljIGlub2RlIHNpemVzICovCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisrI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykgICgoKHMpLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgPyBcCisrICAgICAgICAgICAgICAgICBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiBcCisrICAgICAgICAgICAgICAgICAocyktPnNfaW5vZGVfc2l6ZSkKKysjZGVmaW5lIEVYVDJfSU5PREVTX1BFUl9CTE9DSyhzKQkoRVhUMl9CTE9DS19TSVpFKHMpL0VYVDJfSU5PREVfU0laRShzKSkKKysKKyAvKiBsaW51eC9leHQyX2ZzLmggKi8KKyAjZGVmaW5lIEVYVDJfQkxPQ0tfU0laRV9CSVRTKHMpICAgICAgICAoKHMpLT5zX2xvZ19ibG9ja19zaXplICsgMTApCisgLyoga2luZCBvZiBmcm9tIGV4dDIvc3VwZXIuYyAqLworQEAgLTU1Myw3ICs2MDYsNyBAQAorICAgICAgIGdkcCA9IEdST1VQX0RFU0M7CisgICAgICAgaW5vX2JsayA9IGdkcFtkZXNjXS5iZ19pbm9kZV90YWJsZSArCisgCSgoKGN1cnJlbnRfaW5vIC0gMSkgJSAoU1VQRVJCTE9DSy0+c19pbm9kZXNfcGVyX2dyb3VwKSkKKy0JID4+IGxvZzIgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSkpOworKwkgPj4gbG9nMiAoRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSkpOworICNpZmRlZiBFMkRFQlVHCisgICAgICAgcHJpbnRmICgiaW5vZGUgdGFibGUgZnNibG9jaz0lZFxuIiwgaW5vX2Jsayk7CisgI2VuZGlmIC8qIEUyREVCVUcgKi8KK0BAIC01NjUsMTMgKzYxOCwxMiBAQAorICAgICAgIC8qIHJlc2V0IGluZGlyZWN0IGJsb2NrcyEgKi8KKyAgICAgICBtYXBibG9jazIgPSBtYXBibG9jazEgPSAtMTsKKyAKKy0gICAgICByYXdfaW5vZGUgPSBJTk9ERSArCistCSgoY3VycmVudF9pbm8gLSAxKQorLQkgJiAoRVhUMl9CTE9DS19TSVpFIChTVVBFUkJMT0NLKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpIC0gMSkpOworKyAgICAgIHJhd19pbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSgoY2hhciAqKUlOT0RFICsKKysJKChjdXJyZW50X2lubyAtIDEpICYgKEVYVDJfSU5PREVTX1BFUl9CTE9DSyAoU1VQRVJCTE9DSykgLSAxKSkgKgorKwlFWFQyX0lOT0RFX1NJWkUgKFNVUEVSQkxPQ0spKTsKKyAjaWZkZWYgRTJERUJVRworICAgICAgIHByaW50ZiAoImlwYj0lZCwgc2l6ZW9mKGlub2RlKT0lZFxuIiwKKy0JICAgICAgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSksCistCSAgICAgIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpKTsKKysJICAgICAgRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSwgRVhUMl9JTk9ERV9TSVpFIChTVVBFUkJMT0NLKSk7CisgICAgICAgcHJpbnRmICgiaW5vZGU9JXgsIHJhd19pbm9kZT0leFxuIiwgSU5PREUsIHJhd19pbm9kZSk7CisgICAgICAgcHJpbnRmICgib2Zmc2V0IGludG8gaW5vZGUgdGFibGUgYmxvY2s9JWRcbiIsIChpbnQpIHJhd19pbm9kZSAtIChpbnQpIElOT0RFKTsKKyAgICAgICBmb3IgKGkgPSAodW5zaWduZWQgY2hhciAqKSBJTk9ERTsgaSA8PSAodW5zaWduZWQgY2hhciAqKSByYXdfaW5vZGU7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmN2RjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDc0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU3ViamVjdDogW1BBVENIXSBncnViOiBmaXggZm9yIGF1dG9tYWtlLTEuMTIKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBzdGFnZTEvTWFrZWZpbGUuYW06MjogZXJyb3I6ICdwa2dsaWJkaXInIGlzIG5vdCBhIGxlZ2l0aW1hdGUgZGlyZWN0b3J5IGZvciAnREFUQScKK3wgc3RhZ2UyL01ha2VmaWxlLmFtOjM1OiBlcnJvcjogJ3BrZ2xpYmRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgZm9yICdEQVRBJworfCBzdGFnZTIvTWFrZWZpbGUuYW06NDY6IGVycm9yOiAncGtnbGliZGlyJyBpcyBub3QgYSBsZWdpdGltYXRlIGRpcmVjdG9yeSBmb3IgJ0RBVEEnCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCisKK1RoZSB1cHN0cmVhbSBzdGF0dXMgaXMgbWFya2VkIGFzICdJbmFwcHJvcHJpYXRlJyBiZWNhdXNlIHRoaXMgcHJvYmxlbSBpcyBub3QgdW5jb21tb24sCitpdCBoYXMgYmVlbiB0aGVyZSBmb3IgYSBsb25nIHRpbWUgYW5kIG5vIGNoYW5nZSBpbiB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ3J1Yi0wLjk3L3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xLDcgKzEsNyBAQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCistbm9kaXN0X3BrZ2xpYl9EQVRBID0gc3RhZ2UxCisrcGtnZGF0YWRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCisrbm9kaXN0X3BrZ2RhdGFfREFUQSA9IHN0YWdlMQorIAorLUNMRUFORklMRVMgPSAkKG5vZGlzdF9wa2dsaWJfREFUQSkKKytDTEVBTkZJTEVTID0gJChub2Rpc3RfcGtnZGF0YV9EQVRBKQorIAorICMgV2UgY2FuJ3QgdXNlIGJ1aWx0aW5zIG9yIHN0YW5kYXJkIGluY2x1ZGVzLgorIEFNX0NDQVNGTEFHUyA9ICQoU1RBR0UxX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYworSW5kZXg6IGdydWItMC45Ny9zdGFnZTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3N0YWdlMi9NYWtlZmlsZS5hbQorKysrIGIvc3RhZ2UyL01ha2VmaWxlLmFtCitAQCAtMjcsMTIgKzI3LDEyIEBAIGxpYmdydWJfYV9DRkxBR1MgPSAkKEdSVUJfQ0ZMQUdTKSAtSSQodG9wX3NyY2RpcikvbGliIFwKKyAJLURVU0VfTUQ1X1BBU1NXT1JEUz0xIC1EU1VQUE9SVF9TRVJJQUw9MSAtRFNVUFBPUlRfSEVSQ1VMRVM9MQorIAorICMgU3RhZ2UgMiBhbmQgU3RhZ2UgMS41J3MuCistcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKytwa2dkYXRhZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKyAKKyBFWFRSQV9QUk9HUkFNUyA9IG5ibG9hZGVyLmV4ZWMgcHhlbG9hZGVyLmV4ZWMgZGlza2xlc3MuZXhlYworIAorIGlmIERJU0tMRVNTX1NVUFBPUlQKKy1wa2dsaWJfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorK3BrZ2RhdGFfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorIAlmZnNfc3RhZ2UxXzUgaXNvOTY2MF9zdGFnZTFfNSBqZnNfc3RhZ2UxXzUgbWluaXhfc3RhZ2UxXzUgXAorIAlyZWlzZXJmc19zdGFnZTFfNSB1ZnMyX3N0YWdlMV81IHZzdGFmc19zdGFnZTFfNSB4ZnNfc3RhZ2UxXzUgXAorIAluYmdydWIgcHhlZ3J1YgorQEAgLTQzLDcgKzQzLDcgQEAgbm9pbnN0X1BST0dSQU1TID0gcHJlX3N0YWdlMi5leGVjIHN0YXJ0LmV4ZWMgc3RhcnRfZWx0b3JpdG8uZXhlYyBcCisgCXJlaXNlcmZzX3N0YWdlMV81LmV4ZWMgdWZzMl9zdGFnZTFfNS5leGVjIHZzdGFmc19zdGFnZTFfNS5leGVjIFwKKyAJeGZzX3N0YWdlMV81LmV4ZWMgbmJsb2FkZXIuZXhlYyBweGVsb2FkZXIuZXhlYyBkaXNrbGVzcy5leGVjCisgZWxzZQorLXBrZ2xpYl9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisrcGtnZGF0YV9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisgCWZmc19zdGFnZTFfNSBpc285NjYwX3N0YWdlMV81IGpmc19zdGFnZTFfNSBtaW5peF9zdGFnZTFfNSBcCisgCXJlaXNlcmZzX3N0YWdlMV81IHVmczJfc3RhZ2UxXzUgdnN0YWZzX3N0YWdlMV81IHhmc19zdGFnZTFfNQorIG5vaW5zdF9EQVRBID0gcHJlX3N0YWdlMiBzdGFydCBzdGFydF9lbHRvcml0bworQEAgLTEwNSw3ICsxMDUsNyBAQCBlbHNlCisgQlVJTFRfU09VUkNFUyA9IHN0YWdlMl9zaXplLmgKKyBlbmRpZgorIAorLUNMRUFORklMRVMgPSAkKHBrZ2xpYl9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisrQ0xFQU5GSUxFUyA9ICQocGtnZGF0YV9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisgCisgc3RhZ2UyX3NpemUuaDogcHJlX3N0YWdlMgorIAktcm0gLWYgc3RhZ2UyX3NpemUuaAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9uby1yZW9yZGVyLWZ1bmN0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9uby1yZW9yZGVyLWZ1bmN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAzN2U0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L25vLXJlb3JkZXItZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitBZnRlciB0aGUgY29tbWl0ICJ0Y21vZGUtZGVmYXVsdDogc3dpdGNoIHRvIGdjYyA0LjYuMCBmb3IgeDg2LCB4ODYtNjQgJiBhcm0iLAord2UgZ290IGJ1ZyAxMDk5IChodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OSk6CisKK1J1bm5pbmcgImluc3RhbGwgLS1zdGFnZTI9L3NzZC9ib290L2dydWIvc3RhZ2UyIC9ib290L2dydWIvc3RhZ2UxKGhkMCkKKyAgICAgL2Jvb3QvZ3J1Yi9zdGFnZTIgcCAvYm9vdC9ncnViL21lbnUgbGlzdCIgZmFpbGVkCitFcnJvciA2OiBNaXNtYXRjaGVkIG9yIGNvcnJ1cHQgdmVyc2lvbiBvZiBzdGFnZTEvc3RhZ2UyCisKK1RoaXMgdHVybmVkIG91dCB0byBiZSBhIGdjYydzIGJ1Zy4gU2VlCitodHRwczovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYwNTEzCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM5MzMzCisKK1Vwc3RyZWFtIGdjYyBzZWVtcyB1bmludGVyZXN0ZWQgaW4gdGhlIGJ1Zywgc28gYXQgcHJlc2VudCB3ZSBjYW4gZGlzYWJsZSB0aGUKK29wdGlvbiBhcyBhIHdvcmthcm91bmQuIFRoYW5rcyBSeWFuIEhpbGwgZm9yIHRoZSBpbnZlc3RpZ2F0aW9uIGFuZCB0aGUKK3dvcmthcm91bmQgcGF0Y2guCisKK0RleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorV2VkIEp1biAyOSAyMDoyMTozOSBDU1QgMjAxMQorCistLS0gZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbS5vcmlnCisrKysgZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTc5LDcgKzc5LDcgQEAKKyBIRVJDVUxFU19GTEFHUyA9CisgZW5kaWYKKyAKKy1TVEFHRTJfQ09NUElMRSA9ICQoU1RBR0UyX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisrU1RBR0UyX0NPTVBJTEUgPSAkKFNUQUdFMl9DRkxBR1MpIC1mbm8tcmVvcmRlci1mdW5jdGlvbnMgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisgCSQoTkVUQk9PVF9GTEFHUykgJChTRVJJQUxfRkxBR1MpICQoSEVSQ1VMRVNfRkxBR1MpCisgCisgU1RBR0UxXzVfTElOSyA9IC1ub3N0ZGxpYiAtV2wsLU4gLVdsLC1UdGV4dCAtV2wsMjAwMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvb2JqY29weS1hYnNvbHV0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhlMGE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorCitUaGlzIHBhdGNoIGlzIGZyb20gdWJ1bnR1OgorICAqIG9iamNvcHktYWJzb2x1dGUuZGlmZiAodXBkYXRlKTogUmVtb3ZlIC5ub3RlLCAuY29tbWVudCwgYW5kCisgICAgLm5vdGUuZ251LmJ1aWxkLWlkIHNlY3Rpb25zIGZyb20gaW1hZ2VzIChMUDogIzQ0NDcwMykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gbG9uZ2VyIG1haW50YWluZWRdCisKK0luZGV4OiBiL2FjaW5jbHVkZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvYWNpbmNsdWRlLm00CisrKysgYi9hY2luY2x1ZGUubTQKK0BAIC02MSw3ICs2MSw3IEBACisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbJHtDQy1jY30gY2Fubm90IGxpbmsgYXQgYWRkcmVzcyAkbGlua19hZGRyXSkKKyAgIGZpCistICBpZiBBQ19UUllfQ09NTUFORChbJHtPQkpDT1BZLW9iamNvcHl9IC1PIGJpbmFyeSBjb25mdGVzdC5leGVjIGNvbmZ0ZXN0XSk7IHRoZW4gOgorKyAgaWYgQUNfVFJZX0NPTU1BTkQoWyR7T0JKQ09QWS1vYmpjb3B5fSAtLW9ubHktc2VjdGlvbj0udGV4dCAtTyBiaW5hcnkgY29uZnRlc3QuZXhlYyBjb25mdGVzdF0pOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFske09CSkNPUFktb2JqY29weX0gY2Fubm90IGNyZWF0ZSBiaW5hcnkgZmlsZXNdKQorICAgZmkKK0luZGV4OiBiL3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xMiw0ICsxMiw0IEBACisKKyBTVUZGSVhFUyA9IC5leGVjCisgLmV4ZWM6CistCSQoT0JKQ09QWSkgLU8gYmluYXJ5ICQ8ICRACisrCSQoT0JKQ09QWSkgLU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5idWlsZC1pZCAkPCAkQAorSW5kZXg6IGIvc3RhZ2UyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zdGFnZTIvTWFrZWZpbGUuYW0KKysrKyBiL3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTI5Myw0ICsyOTMsNCBAQAorICMgR2VuZXJhbCBydWxlIGZvciBtYWtpbmcgYSByYXcgYmluYXJ5LgorIFNVRkZJWEVTID0gLmV4ZWMKKyAuZXhlYzoKKy0JJChPQkpDT1BZKSAtTyBiaW5hcnkgJDwgJEAKKysJJChPQkpDT1BZKSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmJ1aWxkLWlkICQ8ICRACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjQ0ZWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYgpAQCAtMCwwICsxLDY2IEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTX2NsYXNzLXRhcmdldCA9ICJncnViLWVmaS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjMiCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9jZmcgXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dydWItJHtQVn0iCisKKyMgRGV0ZXJtaW5lIHRoZSB0YXJnZXQgYXJjaCBmb3IgdGhlIGdydWIgbW9kdWxlcworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICB0YXJnZXQgPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIGlmIHRhcmdldCA9PSAieDg2XzY0IjoKKyAgICAgICAgZ3J1YnRhcmdldCA9ICd4ODZfNjQnCisgICAgICAgIGdydWJpbWFnZSA9ICJib290eDY0LmVmaSIKKyAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0KToKKyAgICAgICAgZ3J1YnRhcmdldCA9ICdpMzg2JworICAgICAgICBncnViaW1hZ2UgPSAiYm9vdGlhMzIuZWZpIgorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJncnViLWVmaSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUgdGFyZ2V0KQorICAgIGQuc2V0VmFyKCJHUlVCX1RBUkdFVCIsIGdydWJ0YXJnZXQpCisgICAgZC5zZXRWYXIoIkdSVUJfSU1BR0UiLCBncnViaW1hZ2UpCit9CisKK2luaGVyaXQgZGVwbG95CisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0hFTFAyTUFOPSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGxhdGZvcm09ZWZpIC0tZGlzYWJsZS1ncnViLW1rZm9udCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZWZpZW11PW5vIC0tcHJvZ3JhbS1wcmVmaXg9JycgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gNzU1IGdydWItbWtpbWFnZSAke0R9JHtiaW5kaXJ9Cit9CisKK0dSVUJfQlVJTERJTiA/PSAiYm9vdCBsaW51eCBleHQyIGZhdCBzZXJpYWwgcGFydF9tc2RvcyBwYXJ0X2dwdCBub3JtYWwgZWZpX2dvcCBpc285NjYwIHNlYXJjaCIKKworZG9fZGVwbG95KCkgeworCSMgU2VhcmNoIGZvciB0aGUgZ3J1Yi5jZmcgb24gdGhlIGxvY2FsIGJvb3QgbWVkaWEgYnkgdXNpbmcgdGhlCisJIyBidWlsdCBpbiBjZmcgZmlsZSBwcm92aWRlZCB2aWEgdGhpcyByZWNpcGUKKwlncnViLW1raW1hZ2UgLWMgLi4vY2ZnIC1wIC9FRkkvQk9PVCAtZCAuL2dydWItY29yZS8gXAorCSAgICAgICAgICAgICAgIC1PICR7R1JVQl9UQVJHRVR9LWVmaSAtbyAuLyR7R1JVQl9JTUFHRX0gXAorCSAgICAgICAgICAgICAgICR7R1JVQl9CVUlMRElOfQorCWluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtHUlVCX0lNQUdFfSAke0RFUExPWURJUn0KK30KKworZG9fZGVwbG95X2NsYXNzLW5hdGl2ZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2J1aWxkCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgL2Jvb3QvZWZpL0VGSS9CT09ULyR7R1JVQl9UQVJHRVR9LWVmaS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dydWIgXAorICAgICAgICAgICAgICAgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi9hdXRvZ2VuLnNoLWV4Y2x1ZGUtcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1YWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZmY4ZjY4Y2M0OGZkM2MzMGQ1NWUxZDU3MGQ1MWYyZTA5NTJjOTY4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyNSBKYW4gMjAxNCAyMzo0OTo0NCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBhdXRvZ2VuLnNoOiBleGNsdWRlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluCisKK0V4Y2x1ZGUgdGhlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluIHNpbmNlIHF1aWx0IHVzZXMgInBhdGNoIC0tYmFja3VwIiwKK3doaWNoIHdpbGwgY3JlYXRlIHRoZSBiYWNrdXAgZmlsZSB1bmRlciAucGMsIHRoaXMgbWF5IGNhdXNlIHVuZXhwZWN0ZWQKK2Vycm9ycywgZm9yIGV4YW1wbGUsIG9uIENlbnRPUyA1LngsIGlmIHRoZSBiYWNrdXAgZmlsZSBpcyBudWxsCisobmV3ZmlsZSksIGl0J3MgbW9kZSB3aWxsIGJlIDAwMCwgdGhlbiB3ZSB3aWxsIGdldCBlcnJvcnMgd2hlbiB4Z2V0dGV4dAordHJ5IHRvIHJlYWQgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXV0b2dlbi5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCitpbmRleCA3NDI0NDI4Li44NDM2MTllIDEwMDc1NQorLS0tIGEvYXV0b2dlbi5zaAorKysrIGIvYXV0b2dlbi5zaAorQEAgLTUsNyArNSw3IEBAIHNldCAtZQorIGV4cG9ydCBMQ19DT0xMQVRFPUMKKyB1bnNldCBMQ19BTEwKKyAKKy1maW5kIC4gLWluYW1lICcqLltjaF0nICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0LWdydWIvKicgISAtaXBhdGggJy4vYnVpbGQtYXV4LyonICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9taXNjLmMnICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9nbG9iYWwuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL3NlY21lbS5jJyAgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi13aWR0aHNwZWMuYycgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi1hc2NpaWguYycgfHNvcnQgPiBwby9QT1RGSUxFUy5pbgorK2ZpbmQgLiAtaW5hbWUgJyouW2NoXScgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQtZ3J1Yi8qJyAhIC1pcGF0aCAnLi9idWlsZC1hdXgvKicgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL21pc2MuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL2dsb2JhbC5jJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvc2VjbWVtLmMnICAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLXdpZHRoc3BlYy5jJyAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLWFzY2lpaC5jJyAhIC1wYXRoICcuLy5wYy8qJyB8IHNvcnQgPiBwby9QT1RGSUxFUy5pbgorIGZpbmQgdXRpbCAtaW5hbWUgJyouaW4nICEgLW5hbWUgTWFrZWZpbGUuaW4gIHxzb3J0ID4gcG8vUE9URklMRVMtc2hlbGwuaW4KKyAKKyBlY2hvICJJbXBvcnRpbmcgdW5pY29kZS4uLiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1YjIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1YjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMjc3MWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJHUlVCMiBpcyB0aGUgbmV4dC1nZW5lcmF0aW9uIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciIKKworREVTQ1JJUFRJT04gPSAiR1JVQjIgaXMgdGhlIG5leHQgZ2VuZXJhaW9uIG9mIGEgR1BMZWQgYm9vdGxvYWRlciBcCitpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IG9wZXJhdGluZyBzeXN0ZW1zLiBJbiBcCithZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dydWIvIgorU0VDVElPTiA9ICJib290bG9hZGVycyIKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnUub3JnL2dudS9ncnViL2dydWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLWluc3RhbGwuaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgeHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlOTI3NTQwYjZlZGE4YjAyNGZiMDM5MWVlYWE0MDkxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NWIzOWEwNTU4ZjhjODAyMjA5YzU3NGY0ZDAyY2EyNjNhODA0ZThhNTY0YmM2Y2FmMWNkMGZkM2IzY2MxMWUzIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKiktKGxpbnV4fGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tncnViLW1vdW50XSA9ICItLWVuYWJsZS1ncnViLW1vdW50LC0tZGlzYWJsZS1ncnViLW1vdW50LGZ1c2UiCitQQUNLQUdFQ09ORklHW2RldmljZS1tYXBwZXJdID0gIi0tZW5hYmxlLWRldmljZS1tYXBwZXIsLS1kaXNhYmxlLWRldmljZS1tYXBwZXIsbHZtMiIKKworIyBncnViIGFuZCBncnViLWVmaSdzIHN5c3Jvb3QvJHtkYXRhZGlyfS9ncnViL2dydWItbWtjb25maWdfbGliIGFyZQorIyBjb25mbGljdGVkLCByZW1vdmUgaXQgc2luY2Ugbm8gb25lIHVzZXMgaXQuCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfY2xhc3MtdGFyZ2V0ICs9ICJyZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIiCityZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIoKSB7CisgICAgcm0gLXIgIiR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZ3J1Yi9ncnViLW1rY29uZmlnX2xpYiIKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8wLjk3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8wLjk3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5N2EwNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzAuOTcuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJHUlVCIGlzIHRoZSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIiCitERVNDUklQVElPTiA9ICJHUlVCIGlzIGEgR1BMZWQgYm9vdGxvYWRlciBpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IFwKK29wZXJhdGluZyBzeXN0ZW1zLiBJbiBhZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncnViLyIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3J1Yi9tYWluLmM7YmVnaW5saW5lPTM7ZW5kbGluZT05O21kNT0yMmE1ZjI4ZDIxMzBmZmY5ZjJhMTdlZDU0YmU5MGVkNiIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiZnRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvZ3J1Yi9ncnViLSR7UFZ9LnRhci5nejsgXAorICAgICAgICAgICBmaWxlOi8vbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2hlbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqY29weS1hYnNvbHV0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZDNmM2ViNTQ0NDZiZTYwMDMxNTYxNThkNTFmNDg4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZTFkMTVkMTJkYmQzZTkyMDgxMTFkNmI4MDZhZDVhOTg1N2NhODg1MGM0Nzg3N2QzNjU3NWI5MDQ1NTkyNjBiIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0NPTVBBVElCTEVfSE9TVCA9ICJpLjg2LiotbGludXgiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtY3Vyc2VzIgorCitkb19pbnN0YWxsX2FwcGVuZF92bXdhcmUoKSB7CisJbWtkaXIgLXAgJHtEfS9ib290LworCWxuIC1zZiAuLi91c3IvbGliL2dydWIveyRUQVJHRVRfQVJDSH17JFRBUkdFVF9WRU5ET1J9LyAke0R9L2Jvb3QvZ3J1YgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl8yLjAwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YTcwOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzIuMDAuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBncnViMi5pbmMKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS9pMzg2LXBjLy5kZWJ1ZyIKKworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPXBjIC0tZGlzYWJsZS1ncnViLW1rZm9udCAtLXByb2dyYW0tcHJlZml4PSIiIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2dydWIuZAorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzYwYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTICs9ICJhdXRvZ2VuLW5hdGl2ZSIKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorREVGQVVMVF9QUkVGRVJFTkNFX2FybSA9ICIxIgorCitQViA9ICIyLjAwKyR7U1JDUFZ9IgorU1JDUkVWID0gIjg3ZGU2NmQ5ZDgzNDQ2ZWNkZGIyOWNmYmRmNzM2OTEwMmM4ZTIwOWUiCitTUkNfVVJJID0gImdpdDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dydWIuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0LiopLShsaW51eC4qfGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCisjIGNvbmZpZ3VyZS5hYyBoYXMgY29kZSB0byBzZXQgdGhpcyBhdXRvbWFnaWNhbGx5IGZyb20gdGhlIHRhcmdldCB0dXBsZQorIyBidXQgdGhlIE9FIGZyZWVmb3JtIG9uZSAoY29yZTItZm9vLWJhci1saW51eCkgZG9uJ3Qgd29yayB3aXRoIHRoYXQuCisKK0dSVUJQTEFURk9STV9hcm0gPSAidWJvb3QiCitHUlVCUExBVEZPUk1fYWFyY2g2NCA9ICJlZmkiCitHUlVCUExBVEZPUk0gPz89ICJwYyIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wbGF0Zm9ybT0ke0dSVUJQTEFURk9STX0gLS1kaXNhYmxlLWdydWItbWtmb250IC0tcHJvZ3JhbS1wcmVmaXg9IiIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICggY2QgJHtTfQorICAgICAgJHtTfS9hdXRvZ2VuLnNoICkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCisgCit9CisKKyMgZGVidWdlZGl0IGNob2tlcyBvbiBiYXJlIG1ldGFsIGJpbmFyaWVzCitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LyovLmRlYnVnIgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290L2ZpeC1vYmpjb3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjU1OTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDBmN2Y5ZTNiYjFkMGUxYjkzZjNhZDhhMWQ1ZDdiZGQzZmJmMjc0OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjcgTWFyIDIwMTQgMDc6MjA6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuYW06IHVzZSBvYmpjb3B5IGZyb20gdGhlIGVudgorCitJdCB1c2VzIHRoZSAib2JqY29weSIgZGlyZWN0bHksIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSBmb3IgY3Jvc3MgY29tcGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTE5LDYgKzE5LDggQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAke0FDTE9DQUxfRkxBR1N9CisgQU1fTUFLRUZMQUdTID0gLS1uby1wcmludC1kaXJlY3RvcnkKKyAKKytPQkpDT1BZID89IG9iamNvcHkKKysKKyBndW1taWJvb3RsaWJkaXIgPSAkKHByZWZpeCkvbGliL2d1bW1pYm9vdAorIAorIEFNX0NQUEZMQUdTID0gLWluY2x1ZGUgY29uZmlnLmgKK0BAIC0xNDgsNyArMTUwLDcgQEAgJChndW1taWJvb3Rfc29saWIpOiAkKGd1bW1pYm9vdF9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChndW1taWJvb3QpOiAkKGd1bW1pYm9vdF9zb2xpYikKKy0JJChBTV9WX0dFTikgb2JqY29weSAtaiAudGV4dCAtaiAuc2RhdGEgLWogLmRhdGEgLWogLmR5bmFtaWMgXAorKwkkKEFNX1ZfR0VOKSAkKE9CSkNPUFkpIC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisgCSAgLWogLmR5bnN5bSAtaiAucmVsIC1qIC5yZWxhIC1qIC5yZWxvYyBcCisgCSAgLS10YXJnZXQ9ZWZpLWFwcC0kKEFSQ0gpICQ8ICRACisgCitAQCAtMTgzLDcgKzE4NSw3IEBAICQoc3R1Yl9zb2xpYik6ICQoc3R1Yl9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChzdHViKTogJChzdHViX3NvbGliKQorLQkkKEFNX1ZfR0VOKSBvYmpjb3B5IC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisrCSQoQU1fVl9HRU4pICQoT0JKQ09QWSkgLWogLnRleHQgLWogLnNkYXRhIC1qIC5kYXRhIC1qIC5keW5hbWljIFwKKyAJICAtaiAuZHluc3ltIC1qIC5yZWwgLWogLnJlbGEgLWogLnJlbG9jIFwKKyAJICAtLXRhcmdldD1lZmktYXBwLSQoQVJDSCkgJDwgJEAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ndW1taWJvb3QvZ3VtbWlib290X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMzZGI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3RfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiR3VtbWlib290IGlzIGEgc2ltcGxlIFVFRkkgYm9vdCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIGNvbmZpZ3VyZWQgRUZJIGltYWdlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZ251LWVmaSB1dGlsLWxpbnV4IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK2luaGVyaXQgZGVwbG95CisKK1BWID0gIjQ4K2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjJiY2Q5MTljNjgxYzk1MmViODY3ZWYxYmRiNDU4ZjFiYzQ5YzJkNTUiCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2d1bW1pYm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtb2JqY29weS5wYXRjaCBcCisgICAgICAgICAgIgorCisjIE5vdGU6IEFkZCBDT01QQVRJQkxFX0hPU1QgaGVyZSBpcyBvbmx5IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBnbnUtZWZpCisjIHdoaWNoIGhhcyBzZXQgdGhlIENPTVBBVElCTEVfSE9TVCwgdGhlIGd1bW1pYm9vdCBpdHNlbGYgbWF5IHdvcmsgb24KKyMgbW9yZSBob3N0cy4KK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qKS1saW51eCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1tYW5wYWdlcyAtLXdpdGgtZWZpLWluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGRzZGlyPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSIKKworRVhUUkFfT0VNQUtFICs9ICJndW1taWJvb3RsaWJkaXI9JHtsaWJkaXJ9L2d1bW1pYm9vdCIKKworZG9fZGVwbG95ICgpIHsKKyAgICAgICAgaW5zdGFsbCAke0J9L2d1bW1pYm9vdCouZWZpICR7REVQTE9ZRElSfQorfQorYWRkdGFzayBkZXBsb3kgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvQ09QWUlORy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvQ09QWUlORy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM3MGM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9DT1BZSU5HLnBhdGNoCkBAIC0wLDAgKzEsMzQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitkaWZmIC1ydU4gaG9zdGFwLWNvbmYtMS4wLW9yaWcvQ09QWUlORyBob3N0YXAtY29uZi0xLjAvQ09QWUlORworLS0tIGhvc3RhcC1jb25mLTEuMC1vcmlnL0NPUFlJTkcJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBob3N0YXAtY29uZi0xLjAvQ09QWUlORwkyMDEwLTEyLTA5IDE2OjM2OjQ4LjAwMDAwMDAwMCArMDgwMAorQEAgLTAsMCArMSwzNDAgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKwwKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysMCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysMCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysMCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysMCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXAtZnctbG9hZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwYmRjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWR+aG9zdGFwLWZ3LWxvYWQKKysrKyBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWQKK0BAIC02LDkgKzYsOSBAQAorICMgRmlybXdhcmUgaW1hZ2VzIGZvciB0aGUgY2FyZAorICMgVE9ETzogY291bGQgdHJ5IHRvIHNlbGVjdCBjb3JyZWN0IGZpcm13YXJlIHR5cGUgYXV0b21hdGljYWxseQorIAorLVBSST0vZXRjL3BjbWNpYS9QTTAxMDEwMi5IRVgKKy1TVEE9L2V0Yy9wY21jaWEvUkYwMTA4MDIuSEVYCistUFJJU00yX1NSRUM9L3Vzci9sb2NhbC9iaW4vcHJpc20yX3NyZWMKKytQUkk9L2V0Yy9wY21jaWEvcG0wMTAxMDIuaGV4CisrU1RBPS9ldGMvcGNtY2lhL3JmMDEwODA0LmhleAorK1BSSVNNMl9TUkVDPS91c3Ivc2Jpbi9wcmlzbTJfc3JlYworIAorIHNldCAtZQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkYTgyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYKQEAgLTAsMCArMSwxOTMgQEAKK21vZHVsZSAiaG9zdGFwX2NzIiBvcHRzICJjaGFubmVsPTMgaXdfbW9kZT0yIGVzc2lkPWFueSBpZ25vcmVfY2lzX3ZjYz0xIgorCitjYXJkICJBY3Rpb250ZWMgODAyQ0kyIgorICBtYW5maWQgMHgxNjY4LCAweDAxMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJXYXkgODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgICN2ZXJzaW9uICJBaXJXYXkiLCAiODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgIG1hbmZpZCAweDAyNjEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFzdXMgU3BhY2VMaW5rIFdMMTEwIgorICAgbWFuZmlkIDB4MDJhYSwweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworIyMgaGFuZGhlbGRzLm9yZyBidWcgOTY0CitjYXJkICJCZWxraW4gRjVENjA2MCBFdGhlcm5ldCIKKyAgICN2ZXJzaW9uICJQQ01DSUEiLCAiMTFNIFdMQU4gQ2FyZCB2Mi41IiwgIklTTDM3MzAwUCIsICJSZXZBIgorICAgbWFuZmlkIDB4MDI3NCwgMHgxNjEyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSAxMU1icHMgV2lyZWxlc3MgUEMgQ2FyZCIKKyAgbWFuZmlkIDB4MDI4YSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIFdMMTAwIDExIE1icHMgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4MDEzOCwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIEhOVy0xMDAgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFdMLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFJDLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERSQy02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRENGNjYwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDUKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJGYXJhbGxvbiBTa3lMSU5FIgorICB2ZXJzaW9uICJJTlRFUlNJTCIsICJIRkEzODR4L0lFRUUiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiSHlwZXJMaW5rIFdpcmVsZXNzIFBDIENhcmQgMTFNYnBzIgorICB2ZXJzaW9uICJIeXBlckxpbmsiLCAiV2lyZWxlc3MgUEMgQ2FyZCAxMU1icHMiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBjYXJkICJJbnRlcnNpbCBQUklTTTIgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorIyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMQTQxMTEgU3BlY3RydW0yNCBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIKKyAgdmVyc2lvbiAiU3ltYm9sIFRlY2hub2xvZ2llcyIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCIKKyAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0NGMTEgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDI3NCwgMHgzMzAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGJpbmQgImhvc3RhcF9jcyIgCisKKyMjIGhhbmRoZWxkcy5vcmcgYnVnICM3OTAKK2NhcmQgIkxpbmtzeXMgV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQgV0NGMTIiCisgIG1hbmZpZCAweDAyOGEsIDB4MDY3MworICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0xBTiBDRiBDYXJkIgorICBtYW5maWQgMHgwMjc0LCAweDMzMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJORVRHRUFSIE1BNzAxIFdpcmVsZXNzIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5vcnRlbCBOZXR3b3JrcyBlTW9iaWxpdHkgODAyLjExIFdpcmVsZXNzIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAxZWIsIDB4MDgwYQorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlBMQU5FWCBHZW9XYXZlIEdXLUNGMTEwIgorICB2ZXJzaW9uICJQTEFORVgiLCAiR2VvV2F2ZS9HVy1DRjExMCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQUk9YSU0gTEFOIFBDIENBUkQgSEFSTU9OWSA4MDIxMUIiCisgIHZlcnNpb24gIlBST1hJTSIsICJMQU4gUEMgQ0FSRCBIQVJNT05ZIDgwMjExQiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQcm94aW0gUmFuZ2VMQU4vRFMiCisgIHZlcnNpb24gIlBST1hJTSIsIlJhbmdlTEFOLURTL0xBTiBQQyBDQVJEIgorICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYWZld2F5IDgwMi4xMWIgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU0FNU1VORyAxMU1icHMgV0xBTiBDYXJkIgorICB2ZXJzaW9uICJTQU1TVU5HIiwgIjExTWJwcyBXTEFOIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBuZWVkcyBmaXJtd2FyZSB1cGxvYWQgdmlhIGhvc3RhcF9md19sb2FkCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIE9FTSAoME1CKSIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAxMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisjIG5lZWRzIHNwZWNpYWwgYWN0aXZhdGlvbiAoPj1ob3N0YXAgMC4zLjIgb25seSkgcGx1cyBmaXJtd2FyZSB1cGxvYWQKK2NhcmQgIlNhbkRpc2sgQ29ubmVjdFBsdXMgdy8gTWVtb3J5IgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisjICAgYmluZCAiaWRlLWNzIiB0byAxCisKK2NhcmQgIlNlbmFvL09yaWdvIDgwMjExYiBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMDBiLDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTaXRlY29tIFdMLTAwNyBXTEFOIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwNAorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNNQzI2MzIgODAyLjExIChwcmlzbTIpIENhcmQiCisgIHZlcnNpb24gIlNNQyIsICJTTUMyNjMyVyIsICJWZXJzaW9uIDAxLjAyIiwgIiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTcGVlZFN0cmVhbSBTUzEwMjEgV2lyZWxlc3MgQWRhcHRlciIKKyAgI3ZlcnNpb24gIlNpZW1lbnMiLCAiU3BlZWRTdHJlYW0gV2lyZWxlc3MgUENNQ0lBIgorICBtYW5maWQgMHgwMmFjLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaQ09NQVggQWlyUnVubmVyL1hJLTMwMCIKKyAgI3ZlcnNpb24gIlpDT01BWCIsICJBaXJSdW5uZXIvWEktMzAwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJab25ldCBaQ0YxMTAwIgorICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorICAKK2NhcmQgIldpcmVsZXNzIExBTiBBZGFwdGVyIFZlcnNpb24gMDEuMDIiCisgICB2ZXJzaW9uICJXaXJlbGVzcyIsICJMQU4gQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICB2ZXJzaW9uICJBbWJpQ29tIiwgIldMMTEwMEMgODAyLjExYiBDRi1DYXJkIiwgIjIuMiIKKyAgbWFuZmlkIDB4ZDYwMSwweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICBtYW5maWQgMHhkNjAxLDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbmRpc2sgQ29ubmVjdCBTRFdDRkItMDAwIgorICBtYW5maWQgMHhkNjAxLDB4MDAwNQorICBiaW5kICJob3N0YXBfY3MiCisKKyMgQ2FyZHMgd2l0aCBJbnRlcnNpbCBmaXJtd2FyZSAoUHJpc20gY2hpcHNldCkKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQiCisgIHZlcnNpb24gIlRoZSBMaW5rc3lzIEdyb3VwLCBJbmMuIiwgIkluc3RhbnQgV2lyZWxlc3MgTmV0d29yayBQQyBDYXJkIiwgIklTTDM3MzAwUCIsICJSZXZBIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgQ29tcGFjdEZsYXNoIFdpcmVsZXNzIENhcmQiCisgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQUNUSU9OVEVDIFBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkIgorICB2ZXJzaW9uICJBQ1RJT05URUMiLCAiUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSBWZXJzaW9uIDMiCisgIG1hbmZpZCAweDAyNzQsMHgxNjEzCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQkVOUSBBV0wxMDAiCisgIHZlcnNpb24gIkJFTlEiLCAiQVdMMTAwIFBDTUNJQSBBREFQVEVSIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByZXRlYyBXTEFOIgorICB2ZXJzaW9uICJQcmV0ZWMiLCAiQ29tcGFjdFdMQU4gQ2FyZCA4MDIuMTFiIiwgIjIuNSIKKyAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiVHJlbmROZXQgVEVXIFBDMTYiCisgIG1hbmZpZCAweDAyNzQsIDB4MTYwMQorICBiaW5kICJob3N0YXBfY3MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mLXVwc3RyZWFtIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjczODVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbQpAQCAtMCwwICsxLDE5MSBAQAorZGV2aWNlICJob3N0YXBfY3MiCisgICBjbGFzcyAibmV0d29yayIgbW9kdWxlICJob3N0YXAiLCAiaG9zdGFwX2NzIgorCitjYXJkICJJbnRlcnNpbCBQUklTTTIgUmVmZXJlbmNlIERlc2lnbiAxMU1iL3MgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wxMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAxMzgsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wyMDAiCisgICB2ZXJzaW9uICJDb21wYXEiLCAiV0wyMDBfMTFNYnBzX1dpcmVsZXNzX1BDSV9DYXJkIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJFTVRBQyBBMjQyNGkgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGMyNTAsIDB4MDAwMgorIyAgIGNpcyAiY2lzL0VtdGFjLmRhdCIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAyLjUgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAyNzQsIDB4MTYxMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAzIDExTWJwcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjc0LCAweDE2MTMKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXQ0YxMiBXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIKKyAgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJEIiwgIkxpbmsgRFdMLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiCisjICB2ZXJzaW9uICJEIiwgIkxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWm9vbUFpciA0MTAwIDExTWIvcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJab29tQWlyIDExTWJwcyBIaWdoIiwgIlJhdGUgd2lyZWxlc3MgTmV0d29ya2luZyIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWRkdHJvbiBBV1AtMTAwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJBZGR0cm9uIiwgIkFXUC0xMDAgV2lyZWxlc3MgUENNQ0lBIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbXN1bmcgU1dMMjAwMC1OIDExTWIvcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjUwLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU01DIDI2MzJXIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJTTUMiLCAiU01DMjYzMlciLCAiVmVyc2lvbiAwMS4wMiIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnJvTWF4IEZyZWVwb3J0IDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJJbnRlcnNpbCIsICJQUklTTSAyXzUgUENNQ0lBIEFEQVBURVIiLCAiSVNMMzczMDBQIiwgIkV2YWwtUmV2QSIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWi1Db20gWEkzMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaY29tYXggWEktMzI1SCAyMDBtVyIKKyMgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDA1CisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIjNDb20gQWlyQ29ubmVjdCBQQ0kgNzc3QSIKKyAgIG1hbmZpZCAweDAxMDEsIDB4MDc3NworICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJVLlMuIFJvYm90aWNzIElFRUUgODAyLjExYiBQQy1DQVJEIgorICAgdmVyc2lvbiAiVS5TLiBSb2JvdGljcyIsICJJRUVFIDgwMi4xMWIgUEMtQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMb25nc2hpbmUgTENSLTg1MzEgMTFNYnBzIFdMQU4gUENNQ0lBIENBUkQiCisgICB2ZXJzaW9uICJPRU0iLCAiUFJJU00yIElFRUUgODAyLjExIFBDLUNhcmQiLCAiVmVyc2lvbiAwMS4wMiIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUGhpbGlwcyA4MDIuMTFiIFdMQU4gUENNQ0lBIgorICAgbWFuZmlkIDB4MDAwYiwgMHg3MzAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByb3hpbSBSYW5nZUxBTiIKKyMgICB2ZXJzaW9uICJQUk9YSU0iLCAiUmFuZ2VMQU4tRFMvTEFOIFBDIENBUkQiCisgICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnVmZmFsbyBXTEktQ0YtUzExRyIKKyAgIHZlcnNpb24gIkJVRkZBTE8iLCAiV0xJLUNGLVMxMUciCisjICBtYW5maWQgMHgwMjZmLCAweDAzMGIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGV2ZWwtT25lIFdQQy0wMTAwIgorICAgdmVyc2lvbiAiRGlnaXRhbCBEYXRhIENvbW11bmljYXRpb25zIiwgIldQQy0wMTAwIiwgIlZlcnNpb24gMDAuMDAiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQmVsa2luIDgwMi4xMWIgV0xBTiBQQ01DSUEiCisgICB2ZXJzaW9uICJCZWxraW4iLCAiMTFNYnBzIFdpcmVsZXNzIE5vdGVib29rIE5ldHdvcmsgQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNlbmFvIFNMLTIwMTFDRC9TTC0yMDExQ0RQTFVTIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRnVsYm9uZCBBaXJib25kIFhJLTMwMEIiCisgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5ldGdlYXIgTUE0MDEiCisgICB2ZXJzaW9uICJORVRHRUFSIE1BNDAxIFdpcmVsZXNzIFBDIiwgIkNhcmQiLCAiVmVyc2lvbiAwMS4wMCIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERXTC02NTAgUmV2LiBQMSIKKyAgIHZlcnNpb24gIkQtTGluayIsICJEV0wtNjUwIFdpcmVsZXNzIFBDIENhcmQgUmV2UCIsICJJU0wzNzEwMVAtMTAiLCAiQTMiCisjICAgbWFuZmlkIDB4MDAwYiwgMHg3MTEwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNvbmljV0FMTCBMb25nIFJhbmdlIFdpcmVsZXNzIENhcmQiCisgICB2ZXJzaW9uICJTb25pY1dBTEwiLCAiTG9uZyBSYW5nZSBXaXJlbGVzcyBDYXJkIiwgIklTTDM3MTAwUCIsICIxLjAiCisgICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2VuYW8gTkwtMjAxMUNEIFBMVVMgRXh0MiBNZXJjdXJ5IgorICAgdmVyc2lvbiAiV0xBTiIsICIxMU1icHNfUEMtQ2FyZF8zLjAiLCAiSVNMMzcxMDBQIiwgIkV2YWwtUmV2QSIKKyAgIG1hbmZpZCAweDAwMGIsIDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJ2YXN0IFdMMTAwIgorICAgdmVyc2lvbiAiQUlSVkFTVCIsICJJRUVFIDgwMi4xMWIgV2lyZWxlc3MgUENNQ0lBIENhcmQiLCAiSEZBMzg2MyIKKyAgIG1hbmZpZCAweDUwYzIsIDB4MDAwMQorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJNaWNyb3NvZnQgV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAgMS4wLjMiCisgICB2ZXJzaW9uICJNaWNyb3NvZnQiLCAiV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAiLCAiIiwgIjEuMC4zIgorICAgbWFuZmlkIDB4MDJkMiwgMHgwMDAxCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5FVEdFQVIgTUE0MDFSQSIKKyAgIHZlcnNpb24gIk5FVEdFQVIgTUE0MDFSQSBXaXJlbGVzcyBQQyIsICJDYXJkIiwgIklTTDM3MzAwUCIsICJFdmFsLVJldkEiCisgICBtYW5maWQgMHgwMDBiLCAweDczMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWxsaWVkIFRlbGVzeW4gQVQtV0NMNDUyIgorICAgdmVyc2lvbiAiQWxsaWVkIFRlbGVzeW4iLCAiQVQtV0NMNDUyIFdpcmVsZXNzIFBDTUNJQSBSYWRpbyIsICJWZXIuIDEuMDAiCisgICBtYW5maWQgMHhjMDBmLCAweDAwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiY29yZWdhIFdMIFBDQ0wtMTEiCisgICB2ZXJzaW9uICJjb3JlZ2EiLCAiV0wgUENDTC0xMSIsICJJU0wzNzMwMFAiLCAiUmV2QSIKKyAgIG1hbmZpZCAweGMwMGYsIDB4MDAwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisgICBiaW5kICJpZGUtY3MiIHRvIDEKKworY2FyZCAiQVNVUyBXTC0xMDAgODAxMWIgV0xBTiBQQyBDYXJkIgorICAgdmVyc2lvbiAiQVNVUyIsICI4MDJfMTFiX1BDX0NBUkRfMjUiLCAiVmVyc2lvbiAwMS4wMCIKKyAgIG1hbmZpZCAweDAyYWEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaeVhlbCBaeWFpciBCLTEwMSA4MDIuMTFiIFdMQU4gY2FyZCIKKyAgIHZlcnNpb24gIiAiLCAiSUVFRSA4MDIuMTEgV2lyZWxlc3MgTEFOL1BDIENhcmQiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMTAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiV0xBTiBQUklTTSBQQ01DSUEgQ0FSRCAzNzMwMFAgUmV2QjYiCisgICB2ZXJzaW9uICJXTEFOIiwgIlBSSVNNIFBDTUNJQSBDQVJEIiwgIjM3MzAwUCIsICJSZXZpc2lvbiBCNiIKKyAgIG1hbmZpZCAweDUwYzIsIDB4NzMwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisKKyMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBob3N0YXBfY3MubworIyBtb2R1bGUgImhvc3RhcF9jcyIgb3B0cyAiY2hhbm5lbD0zIGl3X21vZGU9MyBlc3NpZD10ZXN0IGlnbm9yZV9jaXNfdmNjPTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLm1vZGFsaWFzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDgzNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcwpAQCAtMCwwICsxLDI4IEBACisjIHByb2R1Y3QgaW5mbzogIlByZXRlYyIsICJDb21wYWN0V0xBTiBDYXJkIDgwMi4xMWIiLCAiMi41IgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYTFDQUREM0U1cGJFNjk3NjM2Q3BjN0E1QkZDRjFwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIG1hbnVmYWN0dXJlciBJRCB3aGljaCBleGlzdCBpbiBvcmlub2NvX2NzIEFORCBpbiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDAwQmM3MTAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMDBCYzczMDBmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAxMjZjODAwMGYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDEzOGMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjUwYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyNzRjMTYxMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDI3NGMxNjEzZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjhBYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyQUFjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptNTBDMmM3MzAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm1ENjAxYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bUQ2MDFjMDAwNWYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKKworIyBwcm9kdWN0IGluZm86ICJMaW5rc3lzIiwgIldpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIiwgIiIsICIiCithbGlhcyBwY21jaWE6bTAyOEFjMDY3M2YwNmZuMDBwZm4wMHBhMDczM0NDODFwYjBDNTJGMzk1cGMwMDAwMDAwMHBkMDAwMDAwMDAgaG9zdGFwX2NzCisKKyMgcHJvZHVjdCBpbmZvOiJQTEFORVggQ09NTVVOSUNBVElPTiBJTkMiLCJQTEFORVggR1ctQ0YxMVggV2lyZWxlc3MgQ0YgQ2FyZCIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm1ENjAxYzAwMTBmMDZmbjAwcGZuMDBwYTQ3MDNDRjY4cGJGQUQ3MzE4RHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIDB4MDE1NiwgMHgwMDAyIGFuZCAiVmVyc2lvbiAwMS4wMiIgb25seSBhcHBlYXIgZm9yIFByaXNtIGJhc2VkIGNhcmRzLgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYzRCNzRCQUEwcGQwMDAwMDAwMCBob3N0YXBfY3MKKworIyAiQlVGRkFMTyIsICJXTEktQ0YtUzExRyIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm0wMjZGYzAzMEJmMDZmbjAwcGZuMDBwYTJERUNFQ0UzcGI4MjA2N0MxOHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC1jb25mXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWQ0YzU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJDb25maWd1cmF0aW9uIGZpbGVzIGZvciBIb3N0QVAgKHdpZmkpIGRyaXZlciIKK0RFU0NSSVBUSU9OID0gIlBDTUNJQS1jcyBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB3aXJlbGVzcyBMQU4gY2FyZHMgYmFzZWQgb24gSW50ZXJzaWwncyBQcmlzbTIvMi41LzMgY2hpcHNldC4iCitTRUNUSU9OID0gImtlcm5lbC9tb2R1bGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImZpbGU6Ly9ob3N0YXBfY3MubW9kYWxpYXMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5wYXRjaCIKKworaW5oZXJpdCBhbGxhcmNoCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQKKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2hvc3RhcF9jcy5tb2RhbGlhcyAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kL2hvc3RhcF9jcy5jb25mCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLTAuNC43L2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTlkMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBob3N0YXAtdXRpbHMtMC40Ljcub3JpZy9NYWtlZmlsZQorKysrIGhvc3RhcC11dGlscy0wLjQuNy9NYWtlZmlsZQorQEAgLTE0LDE3ICsxNCwxNyBAQCBwcmlzbTJfc3JlYy5vOiBwcmlzbTJfc3JlYy5jIHV0aWwuaAorIGhvc3RhcF9jcnlwdF9jb25mOiBob3N0YXBfY3J5cHRfY29uZi5jCisKKyBob3N0YXBfZGlhZzogaG9zdGFwX2RpYWcubyB1dGlsLm8KKy0JJChDQykgLW8gaG9zdGFwX2RpYWcgJChDRkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisrCSQoQ0MpIC1vIGhvc3RhcF9kaWFnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisKKyBob3N0YXBfZGlhZy5vOiBob3N0YXBfZGlhZy5jIHV0aWwuaAorCisgdXRpbC5vOiB1dGlsLmMgdXRpbC5oCisKKyBob3N0YXBfaW9fZGVidWc6IGhvc3RhcF9pb19kZWJ1Zy5jCistCSQoQ0MpIC1vIGhvc3RhcF9pb19kZWJ1ZyAkKENGTEFHUykgaG9zdGFwX2lvX2RlYnVnLmMKKysJJChDQykgLW8gaG9zdGFwX2lvX2RlYnVnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9pb19kZWJ1Zy5jCisKKyBob3N0YXBfcmlkOiBob3N0YXBfcmlkLm8gdXRpbC5vCistCSQoQ0MpIC1vIGhvc3RhcF9yaWQgJChDRkxBR1MpIGhvc3RhcF9yaWQubyB1dGlsLm8KKysJJChDQykgLW8gaG9zdGFwX3JpZCAkKENGTEFHUykgJChMREZMQUdTKSBob3N0YXBfcmlkLm8gdXRpbC5vCisKKyBob3N0YXBfcmlkLm86IGhvc3RhcF9yaWQuYyB1dGlsLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ5NzdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiVXNlciBtb2RlIGhlbHBlcnMgZm9yIHRoZSBob3N0YXAgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiVGhlIGhvc3RhcCBkcml2ZXIgc3VwcG9ydHMgSG9zdCBBUCBtb2RlLCBpdCBhbGxvd3MgZm9yIElFRUUgODAyLjExIFwKK21hbmFnZW1lbnQgZnVuY3Rpb25zIG9uIHRoZSBob3N0IGNvbXB1dGVyIGFuZCBhbGxvd3MgdGhlIHN5c3RlbSB0byBhY3QgYXMgYW4gYWNjZXNzIHBvaW50LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL2J1Z3ovIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly91dGlsLmM7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT1kM2I5MjgwODUxMzAyZTViYTM0ZTVmYjcxNzQ4OWI2ZCIKK1NFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL3JlbGVhc2VzL2hvc3RhcC11dGlscy0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9ob3N0YXAtZnctbG9hZC5wYXRjaCIKK1MgPSAiJHtXT1JLRElSfS9ob3N0YXAtdXRpbHMtJHtQVn0iCisKK0JJTkFSSUVTID0gImhvc3RhcF9jcnlwdF9jb25mIGhvc3RhcF9kaWFnIGhvc3RhcF9md19sb2FkIGhvc3RhcF9pb19kZWJ1ZyBcCisJICAgIGhvc3RhcF9yaWQgcHJpc20yX3BhcmFtIHByaXNtMl9zcmVjIHNwbGl0X2NvbWJpbmVkX2hleCIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9LworCWZvciBmIGluICR7QklOQVJJRVN9CisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRmICR7RH0ke3NiaW5kaXJ9LworCWRvbmUKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlsc18wLjQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU0ODFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGhvc3RhcC11dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2xkZmxhZ3MucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiYWZlMDQxNTgxYjhmMDE2NjZlMzUzYmVjMjA5MTdjODUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzZmNTk4ZDhlMzU2YzE2MjBmYTAwOWVjYTBhNzAwYmYxMTA1ZTE2ODE3ZWVmZDc3ZDg5MTk5NDI2MTAwOTM1NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMvR1BMdjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlODE4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoCkBAIC0wLDAgKzEsMzQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMva2V5bWFwLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMvZmlsZXMva2V5bWFwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYmM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9rZXltYXAuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisjCisjIGxvYWQga2V5bWFwLCBpZiBleGlzdGluZworCitLRVJORUxfTUFKTUlOPWB1bmFtZSAtciB8IGN1dCAtZCAnLicgLWYgMSwyYAoraWYgWyAtZSAvZXRjL2tleW1hcC0kS0VSTkVMX01BSk1JTi5tYXAgXTsgdGhlbgorCWxvYWRrZXlzIC9ldGMva2V5bWFwLSRLRVJORUxfTUFKTUlOLm1hcAorZmkKKworaWYgKCBscyAiL2V0YyIgfCBncmVwIC1xICJrZXltYXAtZXh0ZW5zaW9uLSR7S0VSTkVMX01BSk1JTn0iICkKK3RoZW4KKwlmb3IgZXh0ZW5zaW9uIGluIGBscyAtMSAvZXRjL2tleW1hcC1leHRlbnNpb24tJEtFUk5FTF9NQUpNSU4qYCAKKwlkbwkKKwkJbG9hZGtleXMgIiRleHRlbnNpb24iCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2tleW1hcHMva2V5bWFwc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5M2E3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiS2V5Ym9hcmQgbWFwcyIKK0RFU0NSSVBUSU9OID0gIktleW1hcHMgYW5kIGluaXRzY3JpcHQgdG8gc2V0IHRoZSBrZXltYXAgb24gYm9vdHVwLiIKK1NFQ1RJT04gPSAiYmFzZSIKKworUkRFUEVORFNfJHtQTn0gPSAia2JkIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorUFIgPSAicjMxIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworU1JDX1VSSSA9ICJmaWxlOi8va2V5bWFwLnNoIFwKKwkgICBmaWxlOi8vR1BMdjIucGF0Y2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJrZXltYXAuc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMSBTIC4iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgIyBPbmx5IGluc3RhbGwgdGhlIHNjcmlwdCBpZiAnc3lzdmluaXQnIGlzIGluIERJU1RST19GRUFUVVJFUworICAgICMgVEhlIHVsaXRpdHkgdGhpcyBzY3JpcHQgcHJvdmlkZXMgY291bGQgYmUgYWNoaWV2ZWQgYnkgc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9rZXltYXAuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGZpCit9CisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGtleW1hcC5zZXJ2aWNlCisJZmkKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NDI0YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2xpYmFjcGk6IFJlbW92ZSBRQSB3YXJuaW5nOiBObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorICBVc2VmdWwgd2l0aGluIGJpdGJha2UgZW52aXJvbm1lbnQgb25seS4KKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0KKyBNYWtlZmlsZSAgfCAgICAzICsrLQorIGNvbmZpZy5tayB8ICAgIDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSw3IEBAIG9wdGlvbnM6CisgCUBlY2hvICJDRkxBR1MgICA9ICR7Q0ZMQUdTfSIKKyAJQGVjaG8gIkNDICAgICAgID0gJHtDQ30iCisgCUBlY2hvICJTT0ZMQUdTICA9ICR7U09GTEFHU30iCisrCUBlY2hvICJMREZMQUdTICA9ICR7TERGTEFHU30iCisgCUBlY2hvICJMRCAgICAgICA9ICR7TER9IgorIAorIC5jLm86CitAQCAtMzQsNyArMzUsNyBAQCBsaWJhY3BpLmE6ICR7T0JKfQorIAorIGxpYmFjcGkuc286ICR7T0JKfQorIAlAZWNobyBMRCAkQAorLQlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisrCUAke0NDfSAke1NPRkxBR1N9ICR7TERGTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorIAorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5taworKysrIGxpYmFjcGktMC4yL2NvbmZpZy5taworQEAgLTEwLDYgKzEwLDcgQEAgTUFOUFJFRklYID0gJHtQUkVGSVh9L3NoYXJlL21hbgorIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKyBBUkZMQUdTID0gY3IKKytMREZMQUdTID0KKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVkMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IGxpYmFjcGkgZm9yIHgzMgorICAgIAorICAgIGxpYmFjcGkgZG9lc24ndCB1c2UgYmFzZV9saWJkaXIgZm9yIGluc3RhbGwuICBUaGlzIHBhdGNoIGFkZHMKKyAgICBiYXNlX2xpYmRpciBzdXBwb3J0IHNvIHRoYXQgeDMyIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIHByb3Blcmx5LgorCitQYXRjaCBSZWNlaXZlZCBmcm9tOiAgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNQorCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC04LDYgKzgsMTAgQEAgU1JDX3Rlc3QgPSB0ZXN0LWxpYmFjcGkuYyBsaWJhY3BpLmMgbGlzdAorIE9CSiA9ICR7U1JDOi5jPS5vfQorIE9CSl90ZXN0ID0gJHtTUkNfdGVzdDouYz0ub30KKyAKKytpZm5kZWYgYmFzZV9saWJkaXIKKytiYXNlX2xpYmRpcj0vbGliCisrZW5kaWYKKysKKyBhbGw6IG9wdGlvbnMgbGliYWNwaS5hIGxpYmFjcGkuc28gdGVzdC1saWJhY3BpCisgCisgb3B0aW9uczoKK0BAIC00MiwxMyArNDYsMTMgQEAgaW5zdGFsbDogYWxsCisgCUBta2RpciAtcCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNwIC1mIGxpYmFjcGkuaCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUvbGliYWNwaS5oCistCUBlY2hvIGluc3RhbGxpbmcgbGlicmFyeSB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfS9saWIKKy0JQGNwIC1mIGxpYmFjcGkuYSAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuYQorLQlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLworLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLyR7U09OQU1FfQorLQlAbG4gLXMgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuc28KKysJQGVjaG8gaW5zdGFsbGluZyBsaWJyYXJ5IHRvICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfQorKwlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjcCAtZiBsaWJhY3BpLmEgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuYQorKwlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfS8KKysJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0vJHtTT05BTUV9CisrCUBsbiAtcyAke1NPTkFNRX0gJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuc28KKyAJQGVjaG8gaW5zdGFsbGluZyB0ZXN0LWxpYmFjcGkgdG8gJHtERVNURElSfSR7UFJFRklYfS9iaW4KKyAJQG1rZGlyIC1wICR7REVTVERJUn0ke1BSRUZJWH0vYmluCisgCUBjcCAtZiB0ZXN0LWxpYmFjcGkgJHtERVNURElSfSR7UFJFRklYfS9iaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL21ha2VmaWxlLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL21ha2VmaWxlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbWFrZWZpbGUtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBNYWtlZmlsZSAgfCAgICA2ICsrKy0tLQorIGNvbmZpZy5tayB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsaWJhY3BpLTAuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFjcGktMC4yLm9yaWcvTWFrZWZpbGUJMjAwNy0wNy0yOSAxNDowOTozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJhY3BpLTAuMi9NYWtlZmlsZQkyMDA4LTA5LTI2IDEwOjM0OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDE2ICsyNSwxNiBAQCAke09CSn06IGNvbmZpZy5tayBsaWJhY3BpLmgKKyAKKyBsaWJhY3BpLmE6ICR7T0JKfQorIAlAZWNobyBBUiAkQAorLQlAJHtBUn0gJEAgJHtPQkp9CisrCSR7QVJ9ICR7QVJGTEFHU30gJEAgJHtPQkp9CisgCUAke1JBTkxJQn0gJEAKKyAKKyBsaWJhY3BpLnNvOiAke09CSn0KKyAJQGVjaG8gTEQgJEAKKy0JQCR7TER9ICR7U09GTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorKwlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisgCisgdGVzdC1saWJhY3BpOiAke09CSl90ZXN0fQorIAlAZWNobyBMRCAkQAorLQlAJHtMRH0gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorKwlAJHtDQ30gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorIAlAc3RyaXAgJEAKKyAKKyBpbnN0YWxsOiBhbGwKK0luZGV4OiBsaWJhY3BpLTAuMi9jb25maWcubWsKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5tawkyMDA3LTA3LTI5IDE0OjA5OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmFjcGktMC4yL2NvbmZpZy5tawkyMDA4LTA5LTI2IDEwOjM0OjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTksOSArOSwxMCBAQCBNQU5QUkVGSVggPSAke1BSRUZJWH0vc2hhcmUvbWFuCisgIyBmbGFncworIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKytBUkZMQUdTID0gY3IKKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCisgTEQgPSAke0NDfQorLUFSID0gYXIgY3IKKytBUiA9IGFyCisgUkFOTElCID0gcmFubGliCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTc1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXNlZCB0aGUgY3Jvc3Mgc3RyaXAgaW5zdGVhZCBvZiBob3N0IHN0cmlwIHRvIGF2b2lkIHRoaXMgYnVpbGQgZXJyb3I6CisKK3wgc3RyaXA6IFVuYWJsZSB0byByZWNvZ25pc2UgdGhlIGZvcm1hdCBvZiB0aGUgaW5wdXQgZmlsZSBgdGVzdC1saWJhY3BpJworfCBtYWtlOiAqKiogW3Rlc3QtbGliYWNwaV0gRXJyb3IgMQorfCBFUlJPUjogb2VfcnVubWFrZSBmYWlsZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNworCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0zOSw3ICszOSw3IEBAIGxpYmFjcGkuc286ICR7T0JKfQorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKyAJQCR7Q0N9IC1vICRAICR7T0JKX3Rlc3R9ICR7TERGTEFHU30KKy0JQHN0cmlwICRACisrCUAke1NUUklQfSAkQAorIAorIGluc3RhbGw6IGFsbAorIAlAZWNobyBpbnN0YWxsaW5nIGhlYWRlciB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvbGliYWNwaV8wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzMDJmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQUNQSSBkYXRhIGdhdGhlcmluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR2VuZXJhbCBwdXJwb3NlIHNoYXJlZCBsaWJyYXJ5IGZvciBwcm9ncmFtcyBnYXRoZXJpbmcgQUNQSSBkYXRhIG9uIExpbnV4LiBcCitUaGVybWFsIHpvbmVzLCBiYXR0ZXJ5IGluZm9tcmF0aW9uLCBmYW4gaW5mb3JtYXRpb24gYW5kIEFDIHN0YXRlcyBhcmUgaW1wbGVtZW50ZWQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvbGliYWNwaS5odG1sIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mZWMxN2Y4MmYxNjYzMGFkZjJkZmI3ZDJhNDZmMjFjNSIKK1BSID0gInI2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubmdvbGRlLmRlL2Rvd25sb2FkL2xpYmFjcGktJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBcCisJICAgZmlsZTovL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoIFwKKwkgICBmaWxlOi8vbGRmbGFncy5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNWI1M2RkN2JlYWQ2NmRkYTM1ZmVjNTAyYjkxMDY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMzA4NmUzMWQ0MjhiOWMxMjU5NTRkNDhhYzQ5N2I3NTRiYmJjZTJlZjM0ZWEyOWVjZDkwM2U4MmUyNWJhZDI5IgorCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisKK0NGTEFHUyArPSAiLWZQSUMiCitFWFRSQV9PRU1BS0UgKz0gJ1NUUklQPSJlY2hvIicKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtleGVjX3ByZWZpeH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYWNkZWZpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyY2Y0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0FkZCBhIGRlc2NyaXB0aW9uIHRvIHRoZSBBQ19ERUZJTkUgZm9yIExPQ0FMRURJUiBzbyB0aGF0IGl0IGFwcGVhcnMgaW4gY29uZmlnLmgKK2FuZCBzaWxlbmNlcyBhIGZhdGFsIHdhcm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBjMTA0NjBjLi5hYTIwMjYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yNTgsNyArMjU4LDcgQEAgQUNfU1VCU1QoTElCUykKKyAKKyBBTV9HTlVfR0VUVEVYVAorIAorLUFDX0RFRklORV9VTlFVT1RFRChMT0NBTEVESVIsIiRwcmVmaXgvJERBVEFESVJOQU1FIikKKytBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIsW2xvY2FsZSBkaXJlY3RvcnldKQorIAorIEFDX09VVFBVVChbTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlICBtNC9NYWtlZmlsZSBcCisgbWFuL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIHNyYy9NYWtlZmlsZSBkZWJpYW4vcnVsZXMgU3BlY2ZpbGUgc3lzdHlwZSBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hdXRvdG9vbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0NTE5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNH5hdXRvdG9vbHMJMTk5OC0xMi0yNyAxNzowODo1OS4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNAkyMDA0LTA1LTA5IDIyOjI2OjE5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTEsMTIgKzEsMTEgQEAKKyBkbmwgQUNfUkVQTEFDRV9HTlVfR0VUT1BUCistQUNfREVGVU4oQUNfUkVQTEFDRV9HTlVfR0VUT1BULAorLVtBQ19DSEVDS19GVU5DKGdldG9wdF9sb25nLCAsIFtMSUJPQkpTPSIkTElCT0JKUyBnZXRvcHQxLm8gZ2V0b3B0Lm8iXSkKKy1BQ19TVUJTVChMSUJPQkpTKWRubAorLV0pCisrQUNfREVGVU4oW0FDX1JFUExBQ0VfR05VX0dFVE9QVF0sCisrW0FDX0NIRUNLX0ZVTkMoZ2V0b3B0X2xvbmcsICwgW0FDX0xJQk9CSihbZ2V0b3B0MV0pCisrQUNfTElCT0JKKFtnZXRvcHRdKWRubF0pXSkKKyAKKyBkbmwKKyBkbmwgdGFrZW4gZnJvbSB0YXlsb3IgdXVjcAorLUFDX0RFRlVOKExSWlNaX0VSUk5PX0RFQ0wsWworK0FDX0RFRlVOKFtMUlpTWl9FUlJOT19ERUNMXSxbCisgQUNfTVNHX0NIRUNLSU5HKGZvciBlcnJubyBkZWNsYXJhdGlvbikKKyBBQ19DQUNIRV9WQUwobHJ6c3pfY3ZfZGVjbF9lcnJubywKKyBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxlcnJuby5oPl0sIFtpbnQgaSA9IGVycm5vOyBlcnJubyA9IDE7XSwKK0BAIC0yMyw3ICsyMSw3IEBACisgXSkKKyAKKyBkbmwgTFJaU1pfVFlQRV9TUEVFRF9UCistQUNfREVGVU4oTFJaU1pfVFlQRV9TUEVFRF9ULFsKKytBQ19ERUZVTihbTFJaU1pfVFlQRV9TUEVFRF9UXSxbCisgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorIEFDX1JFUVVJUkUoW0xSWlNaX0hFQURFUlNfVEVSTV9JT10pZG5sCisgQUNfTVNHX0NIRUNLSU5HKGZvciBzcGVlZF90KQorQEAgLTYxLDcgKzU5LDcgQEAKKyBmaQorIF0pCisgCistQUNfREVGVU4obHJ6c3pfSEVBREVSX1NZU19TRUxFQ1QsCisrQUNfREVGVU4oW2xyenN6X0hFQURFUl9TWVNfU0VMRUNUXSwKKyBbQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3lzL3RpbWUuaCBhbmQgc3lzL3NlbGVjdC5oIG1heSBib3RoIGJlIGluY2x1ZGVkXSwKKyAgIGxyenN6X2N2X2hlYWRlcl9zeXNfc2VsZWN0LAorIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvZ2V0dGV4dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyNGExZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2gKQEAgLTAsMCArMSwyMTg4NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL0FCT1VULU5MUwkxOTk4LTA0LTI2IDA5OjIyOjMwLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvQUJPVVQtTkxTCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzIzNzUyOTUyIC0wNDAwCitAQCAtMSwxNCArMSwxNCBAQAorIE5vdGVzIG9uIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgCistICAgRnJlZSBzb2Z0d2FyZSBpcyBnb2luZyBpbnRlcm5hdGlvbmFsISAgVGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorLWlzIGEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAorK0ZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKKythIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKKyB0b2dldGhlciwgc28gdGhhdCB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55IGxhbmd1YWdlcy4KKyBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpciBtZXNzYWdlcy4KKyAKKyAgICBJZiB5b3UgZm91bmQgdGhpcyBgQUJPVVQtTkxTJyBmaWxlIGluc2lkZSBhIGRpc3RyaWJ1dGlvbiwgeW91IG1heQorIGFzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIGRvZXMgdXNlIEdOVSBgZ2V0dGV4dCcgaW50ZXJuYWxseSwKKy1pdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyAqbm90KgorK2l0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCisgbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKKyB0aGlzIHBhY2thZ2Ugd2l0aCBtZXNzYWdlcyB0cmFuc2xhdGVkLgorIAorQEAgLTIyLDEwICsyMiwxMCBAQAorIGBnZXR0ZXh0JyB3aGljaCBpcyB1c2VkLiAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyBgaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KKyAKKy1PbmUgYWR2aXNlIGluIGFkdmFuY2UKKy09PT09PT09PT09PT09PT09PT09PT0KKytRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorKz09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistICAgSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91CisrSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91Cisgc2hvdWxkIGNvbmZpZ3VyZSBpdCB1c2luZworIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKK0BAIC0zNCw0MiArMzQsNDAgQEAKKyBwYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKKyBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHRoaXMgcGFja2FnZSBpcyBiZWluZyBpbnN0YWxsZWQuICBTbyBmYXIsIG9ubHkKKyB0aGUgYGdldHRleHQnIGltcGxlbWVudGF0aW9uIGluIHRoZSBHTlUgQyBsaWJyYXJ5IHZlcnNpb24gMiBwcm92aWRlcyBhcworLW1hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzIG9yIG1lc3NhZ2UgaW5oZXJpdGFuY2UpIGFzIHRoZQorLWltcGxlbWVudGF0aW9uIGhlcmUuICBJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwKKy1mdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhIGBjYXRnZXRzJyBpbXBsZW1lbnRhdGlvbi4gIEZ1dHVyZSB2ZXJzaW9ucyBvZgorLUdOVSBgZ2V0dGV4dCcgd2lsbCB2ZXJ5IGxpa2VseSBjb252ZXkgZXZlbiBtb3JlIGZ1bmN0aW9uYWxpdHkuICBTbyBpdAorLW1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisrbWFueSBmZWF0dXJlcyAoc3VjaCBhcyBsb2NhbGUgYWxpYXMsIG1lc3NhZ2UgaW5oZXJpdGFuY2UsIGF1dG9tYXRpYworK2NoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCisrSXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gb2ZmZXIgdGhpcyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgb24gdG9wCisrb2YgYSBgY2F0Z2V0cycgaW1wbGVtZW50YXRpb24uICBGdXR1cmUgdmVyc2lvbnMgb2YgR05VIGBnZXR0ZXh0JyB3aWxsCisrdmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKKyt0byBjaGFuZ2UgdG8gR05VIGBnZXR0ZXh0JyBhcyBzb29uIGFzIHBvc3NpYmxlLgorIAorLSAgIFNvIHlvdSBuZWVkIG5vdCBwcm92aWRlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgdXNpbmcgR05VIGxpYmMgMiBvcgorKyAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCisgeW91IGhhdmUgaW5zdGFsbGVkIGEgcmVjZW50IGNvcHkgb2YgdGhlIEdOVSBnZXR0ZXh0IHBhY2thZ2Ugd2l0aCB0aGUKKyBpbmNsdWRlZCBgbGliaW50bCcuCisgCisgSU5TVEFMTCBNYXR0ZXJzCisgPT09PT09PT09PT09PT09CisgCistICAgU29tZSBwYWNrYWdlcyBhcmUgImxvY2FsaXphYmxlIiB3aGVuIHByb3Blcmx5IGluc3RhbGxlZDsgdGhlCistcHJvZ3JhbXMgdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4KKy1Nb3N0IHN1Y2ggcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93bgorLXdheXMgdG8gaW50ZXJuYXRpb25hbGl6YXRpb24sIHByZWRhdGluZyBHTlUgYGdldHRleHQnLgorK1NvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcworK3RoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuICBNb3N0IHN1Y2gKKytwYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duIHdheXMgdG8KKytpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisgCisgICAgQnkgZGVmYXVsdCwgdGhpcyBwYWNrYWdlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIGFsbG93IHRyYW5zbGF0aW9uIG9mCistbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBwcm92aWRlcworLXVzYWJsZSBgY2F0Z2V0cycgKGlmIHVzaW5nIHRoaXMgaXMgc2VsZWN0ZWQgYnkgdGhlIGluc3RhbGxlcikgb3IKKy1gZ2V0dGV4dCcgZnVuY3Rpb25zLiAgSWYgbmVpdGhlciBpcyBhdmFpbGFibGUsIHRoZSBHTlUgYGdldHRleHQnIG93bgorK21lc3NhZ2VzLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeQorK3Byb3ZpZGVzIHRoZSBHTlUgYGdldHRleHQnIGZ1bmN0aW9ucy4gIElmIG5vdCwgdGhlIEdOVSBgZ2V0dGV4dCcgb3duCisgbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhpcworIHBhY2thZ2UsIHVzdWFsbHkgaW4gdGhlIGBpbnRsLycgc3ViZGlyZWN0b3J5LCBzbyBwcmlvciBpbnN0YWxsYXRpb24gb2YKKy10aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzICpub3QqIHJlcXVpcmVkLiAgSW5zdGFsbGVycyBtYXkgdXNlCisrdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQorIHNwZWNpYWwgb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0CisgYmVoYXZpb3VyLiAgVGhlIGNvbW1hbmRzOgorIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKy0gICAgIC4vY29uZmlndXJlIC0td2l0aC1jYXRnZXRzCisgICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisgCistd2lsbCByZXNwZWN0aXZlbHkgYnlwYXNzIGFueSBwcmUtZXhpc3RpbmcgYGNhdGdldHMnIG9yIGBnZXR0ZXh0JyB0byB1c2UKKy10aGUgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzIHBhY2thZ2UsIGVuYWJsZQorLXRoZSB1c2Ugb2YgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgKGlmIGZvdW5kIG9uIHRoZSBsb2NhbGUgc3lzdGVtKSwgb3IKKy1lbHNlLCAqdG90YWxseSogZGlzYWJsZSB0cmFuc2xhdGlvbiBvZiBtZXNzYWdlcy4KKyt3aWxsIHJlc3BlY3RpdmVseSBieXBhc3MgYW55IHByZS1leGlzdGluZyBgZ2V0dGV4dCcgdG8gdXNlIHRoZQorK2ludGVybmF0aW9uYWxpemluZyByb3V0aW5lcyBwcm92aWRlZCB3aXRoaW4gdGhpcyBwYWNrYWdlLCBvciBlbHNlLAorK190b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorIAorICAgIFdoZW4geW91IGFscmVhZHkgaGF2ZSBHTlUgYGdldHRleHQnIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhbmQgcnVuCisgY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCitAQCAtODMsMTggKzgxLDEwIEBACisgCisgdG8gcHJldmVudCBhdXRvLWRldGVjdGlvbi4KKyAKKy0gICBCeSBkZWZhdWx0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJworLWZ1bmN0aW9uIGFuZCB0aGVyZWZvcmUgdGhleSB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbnMgYXJlIGFscmVhZHkKKy1naXZlbiBhYm92ZTogdGhlIGVtdWxhdGlvbiBvbiB0b3Agb2YgYGNhdGdldHMnIGNhbm5vdCBwcm92aWRlIGFsbCB0aGUKKy1leHRlbnNpb25zIHByb3ZpZGVkIGJ5IHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBJZiB5b3UgbmV2ZXJ0aGVsZXNzCistd2FudCB0byB1c2UgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgdXNlCistCistICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtY2F0Z2V0cworLQorLXRvIGVuYWJsZSB0aGUgdGVzdCBmb3IgYGNhdGdldHMnICh0aGlzIGNhdXNlcyBubyBoYXJtIGlmIGBjYXRnZXRzJyBpcworLW5vdCBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0pLiAgSWYgeW91IHJlYWxseSBzZWxlY3QgdGhpcyBvcHRpb24gd2UKKy13b3VsZCBsaWtlIHRvIGhlYXIgYWJvdXQgdGhlIHJlYXNvbnMgYmVjYXVzZSB3ZSBjYW5ub3QgdGhpbmsgb2YgYW55CistZ29vZCBvbmUgb3Vyc2VsZi4KKysgICBUaGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHdpbGwgbm90IHRlc3QgZm9yIHRoZSBgY2F0Z2V0cycgZnVuY3Rpb24KKythbmQgdGhlcmVmb3JlIGl0IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBhbgorK2VtdWxhdGlvbiBvZiBgZ2V0dGV4dCcgb24gdG9wIG9mIGBjYXRnZXRzJyBjb3VsZCBub3QgcHJvdmlkZSBhbGwgdGhlCisrZXh0ZW5zaW9ucyBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LgorIAorICAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIGhhdmUgdXN1YWxseSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCisgTEwgZ2l2ZXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGNvZGUgaWRlbnRpZnlpbmcgdGhlIGxhbmd1YWdlLiAgVW5sZXNzCitAQCAtMTA4LDU3ICs5OCw3MyBAQAorIFVzaW5nIFRoaXMgUGFja2FnZQorID09PT09PT09PT09PT09PT09PQorIAorLSAgIEFzIGEgdXNlciwgaWYgeW91ciBsYW5ndWFnZSBoYXMgYmVlbiBpbnN0YWxsZWQgZm9yIHRoaXMgcGFja2FnZSwgeW91CisrQXMgYSB1c2VyLCBpZiB5b3VyIGxhbmd1YWdlIGhhcyBiZWVuIGluc3RhbGxlZCBmb3IgdGhpcyBwYWNrYWdlLCB5b3UKKyBvbmx5IGhhdmUgdG8gc2V0IHRoZSBgTEFORycgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGFwcHJvcHJpYXRlCistSVNPIDYzOSBgTEwnIHR3by1sZXR0ZXIgY29kZSBwcmlvciB0byB1c2luZyB0aGUgcHJvZ3JhbXMgaW4gdGhlCistcGFja2FnZS4gIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIHRoYXQgeW91IHNwZWFrIEdlcm1hbi4gIEF0IHRoZQorLXNoZWxsIHByb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlJyAoaW4gYGNzaCcpLAorLWBleHBvcnQgTEFORzsgTEFORz1kZScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZScgKGluIGBiYXNoJykuICBUaGlzCistY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yIGFsbC4KKytgTExfQ0MnIGNvbWJpbmF0aW9uLiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLAorK2FuZCBgQ0MnIGlzIGFuIElTTyAzMTY2IHR3by1sZXR0ZXIgY291bnRyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIGxldCdzCisrc3VwcG9zZSB0aGF0IHlvdSBzcGVhayBHZXJtYW4gYW5kIGxpdmUgaW4gR2VybWFueS4gIEF0IHRoZSBzaGVsbAorK3Byb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAorK2BleHBvcnQgTEFORzsgTEFORz1kZV9ERScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZV9ERScgKGluIGBiYXNoJykuCisrVGhpcyBjYW4gYmUgZG9uZSBmcm9tIHlvdXIgYC5sb2dpbicgb3IgYC5wcm9maWxlJyBmaWxlLCBvbmNlIGFuZCBmb3IKKythbGwuCisgCistICAgQW4gb3BlcmF0aW5nIHN5c3RlbSBtaWdodCBhbHJlYWR5IG9mZmVyIG1lc3NhZ2UgbG9jYWxpemF0aW9uIGZvcgorLW1hbnkgb2YgaXRzIHByb2dyYW1zLCB3aGlsZSBvdGhlciBwcm9ncmFtcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGxvY2FsbHkKKy13aXRoIHRoZSBmdWxsIGNhcGFiaWxpdGllcyBvZiBHTlUgYGdldHRleHQnLiAgSnVzdCB1c2luZyBgZ2V0dGV4dCcKKy1leHRlbmRlZCBzeW50YXggZm9yIGBMQU5HJyB3b3VsZCBicmVhayBwcm9wZXIgbG9jYWxpemF0aW9uIG9mIGFscmVhZHkKKy1hdmFpbGFibGUgb3BlcmF0aW5nIHN5c3RlbSBwcm9ncmFtcy4gIEluIHRoaXMgY2FzZSwgdXNlcnMgc2hvdWxkIHNldAorLWJvdGggYExBTkdVQUdFJyBhbmQgYExBTkcnIHZhcmlhYmxlcyBpbiB0aGVpciBlbnZpcm9ubWVudCwgYXMgcHJvZ3JhbXMKKy11c2luZyBHTlUgYGdldHRleHQnIGdpdmUgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnLiAgRm9yIGV4YW1wbGUsIHNvbWUKKy1Td2VkaXNoIHVzZXJzIHdvdWxkIHJhdGhlciByZWFkIHRyYW5zbGF0aW9ucyBpbiBHZXJtYW4gdGhhbiBFbmdsaXNoIGZvcgorLXdoZW4gU3dlZGlzaCBpcyBub3QgYXZhaWxhYmxlLiAgVGhpcyBpcyBlYXNpbHkgYWNjb21wbGlzaGVkIGJ5IHNldHRpbmcKKy1gTEFOR1VBR0UnIHRvIGBzdjpkZScgd2hpbGUgbGVhdmluZyBgTEFORycgdG8gYHN2Jy4KKysgICBZb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGUgY291bnRyeSBjb2RlIHNwZWNpZmljYXRpb24gaXMgcmVkdW5kYW50LgorK0J1dCBpbiBmYWN0LCBzb21lIGxhbmd1YWdlcyBoYXZlIGRpYWxlY3RzIGluIGRpZmZlcmVudCBjb3VudHJpZXMuICBGb3IKKytleGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKKytjb3VudHJ5IGNvZGUgc2VydmVzIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWFsZWN0cy4KKysKKysgICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKKytsYW5ndWFnZSBhbmQgYENDJyBkZW5vdGluZyB0aGUgY291bnRyeSwgaXMgdGhlIG9uZSB1c2Ugb24gc3lzdGVtcyBiYXNlZAorK29uIEdOVSBsaWJjLiAgT24gb3RoZXIgc3lzdGVtcywgc29tZSB2YXJpYXRpb25zIG9mIHRoaXMgc2NoZW1lIGFyZQorK3VzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKKytsb2NhbGVzIHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSBmb3IgeW91ciBjb3VudHJ5IGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQKKytgbG9jYWxlIC1hIHwgZ3JlcCAnXkxMJycuCisrCisrICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCisrRW5nbGlzaCBtZXNzYWdlIGlzIHNob3duIGluIHBsYWNlIG9mIGEgbm9uZXhpc3RlbnQgdHJhbnNsYXRpb24uICBJZiB5b3UKKyt1bmRlcnN0YW5kIG90aGVyIGxhbmd1YWdlcywgeW91IGNhbiBzZXQgdXAgYSBwcmlvcml0eSBsaXN0IG9mIGxhbmd1YWdlcy4KKytUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCisrYExBTkdVQUdFJy4gIEdOVSBgZ2V0dGV4dCcgZ2l2ZXMgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnIG92ZXIgYExBTkcnCisrZm9yIHRoZSBwdXJwb3NlIG9mIG1lc3NhZ2UgaGFuZGxpbmcsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBoYXZlIGBMQU5HJworK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKKytzeXN0ZW0gbGlicmFyaWVzLiAgRm9yIGV4YW1wbGUsIHNvbWUgU3dlZGlzaCB1c2VycyB3aG8gd291bGQgcmF0aGVyCisrcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3Igd2hlbiBTd2VkaXNoIGlzIG5vdAorK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorKworKyAgIFNwZWNpYWwgYWR2aWNlIGZvciBOb3J3ZWdpYW4gdXNlcnM6IFRoZSBsYW5ndWFnZSBjb2RlIGZvciBOb3J3ZWdpYW4KKytib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQorK3RyYW5zaXRpb24gcGVyaW9kLCB3aGlsZSBzb21lIG1lc3NhZ2UgY2F0YWxvZ3MgZm9yIHRoaXMgbGFuZ3VhZ2UgYXJlCisraW5zdGFsbGVkIHVuZGVyIGBuYicgYW5kIHNvbWUgb2xkZXIgb25lcyB1bmRlciBgbm8nLCBpdCdzIHJlY29tbWVuZGVkCisrZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKKytvbGRlciB0cmFuc2xhdGlvbnMgYXJlIHVzZWQuCisrCisrICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJworK2Vudmlyb25tZW50IHZhcmlhYmxlLCBgTExfQ0MnIGNvbWJpbmF0aW9ucyBjYW4gYmUgYWJicmV2aWF0ZWQgYXMgYExMJworK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50CisrdG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJworKyhQb3J0dWd1ZXNlIGFzIHNwb2tlbiBpbiBQb3J0dWdhbCkgaW4gdGhpcyBjb250ZXh0LgorIAorIFRyYW5zbGF0aW5nIFRlYW1zCisgPT09PT09PT09PT09PT09PT0KKyAKKy0gICBGb3IgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCB0byBiZSBhIHN1Y2Nlc3MsIHdlIG5lZWQgaW50ZXJlc3RlZAorK0ZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCisgcGVvcGxlIHdobyBsaWtlIHRoZWlyIG93biBsYW5ndWFnZSBhbmQgd3JpdGUgaXQgd2VsbCwgYW5kIHdobyBhcmUgYWxzbworIGFibGUgdG8gc3luZXJnaXplIHdpdGggb3RoZXIgdHJhbnNsYXRvcnMgc3BlYWtpbmcgdGhlIHNhbWUgbGFuZ3VhZ2UuCistRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdCwgY291cnRlc3kgb2YgTGludXgKKy1JbnRlcm5hdGlvbmFsLiAgWW91IG1heSByZWFjaCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0gYXQgdGhlIGFkZHJlc3MKKy1gTExAbGkub3JnJywgcmVwbGFjaW5nIExMIGJ5IHRoZSB0d28tbGV0dGVyIElTTyA2MzkgY29kZSBmb3IgeW91cgorLWxhbmd1YWdlLiAgTGFuZ3VhZ2UgY29kZXMgYXJlICpub3QqIHRoZSBzYW1lIGFzIHRoZSBjb3VudHJ5IGNvZGVzIGdpdmVuCistaW4gSVNPIDMxNjYuICBUaGUgZm9sbG93aW5nIHRyYW5zbGF0aW9uIHRlYW1zIGV4aXN0LCBhcyBvZiBBdWd1c3QgMTk5NzoKKy0KKy0gICAgIENoaW5lc2UgYHpoJywgQ3plY2ggYGNzJywgRGFuaXNoIGBkYScsIER1dGNoIGBubCcsIEVuZ2xpc2ggYGVuJywKKy0gICAgIEVzcGVyYW50byBgZW8nLCBGaW5uaXNoIGBmaScsIEZyZW5jaCBgZnInLCBHZXJtYW4gYGRlJywgSHVuZ2FyaWFuCistICAgICBgaHUnLCBJcmlzaCBgZ2EnLCBJdGFsaWFuIGBpdCcsIEluZG9uZXNpYW4gYGlkJywgSmFwYW5lc2UgYGphJywKKy0gICAgIEtvcmVhbiBga28nLCBMYXRpbiBgbGEnLCBOb3J3ZWdpYW4gYG5vJywgUGVyc2lhbiBgZmEnLCBQb2xpc2gKKy0gICAgIGBwbCcsIFBvcnR1Z3Vlc2UgYHB0JywgUnVzc2lhbiBgcnUnLCBTbG92ZW5pYW4gYHNsJywgU3BhbmlzaCBgZXMnLAorLSAgICAgU3dlZGlzaCBgc3YnLCBhbmQgVHVya2lzaCBgdHInLgorLQorLUZvciBleGFtcGxlLCB5b3UgbWF5IHJlYWNoIHRoZSBDaGluZXNlIHRyYW5zbGF0aW9uIHRlYW0gYnkgd3JpdGluZyB0bworLWB6aEBsaS5vcmcnLgorK0VhY2ggdHJhbnNsYXRpb24gdGVhbSBoYXMgaXRzIG93biBtYWlsaW5nIGxpc3QuICBUaGUgdXAtdG8tZGF0ZSBsaXN0IG9mCisrdGVhbXMgY2FuIGJlIGZvdW5kIGF0IHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QncyBob21lcGFnZSwKKytgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC8nLCBpbiB0aGUgIk5hdGlvbmFsIHRlYW1zIgorK2FyZWEuCisgCistICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gKndvcmsqIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKKysgICBJZiB5b3UnZCBsaWtlIHRvIHZvbHVudGVlciB0byBfd29ya18gYXQgdHJhbnNsYXRpbmcgbWVzc2FnZXMsIHlvdQorIHNob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorLVRoZSBzdWJzY3JpYmluZyBhZGRyZXNzIGlzICpub3QqIHRoZSBzYW1lIGFzIHRoZSBsaXN0IGl0c2VsZiwgaXQgaGFzCisrVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKKyBgLXJlcXVlc3QnIGFwcGVuZGVkLiAgRm9yIGV4YW1wbGUsIHNwZWFrZXJzIG9mIFN3ZWRpc2ggY2FuIHNlbmQgYQorIG1lc3NhZ2UgdG8gYHN2LXJlcXVlc3RAbGkub3JnJywgaGF2aW5nIHRoaXMgbWVzc2FnZSBib2R5OgorIAorICAgICAgc3Vic2NyaWJlCisgCisgICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorLSphY3RpdmVseSogaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorK19hY3RpdmVseV8gaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorIHJhdGhlciB0aGFuIG1lcmVseSBsdXJraW5nIGFyb3VuZC4gIElmIHlvdXIgdGVhbSBkb2VzIG5vdCBleGlzdCB5ZXQgYW5kCisgeW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworIGdldCBzdGFydGVkLCBwbGVhc2Ugd3JpdGUgdG8gYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIHJlYWNoIHRoZQorQEAgLTE3MSw0MyArMTc3LDU1OSBAQAorIEF2YWlsYWJsZSBQYWNrYWdlcworID09PT09PT09PT09PT09PT09PQorIAorLSAgIExhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKKy1tYXRyaXggc2hvd3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFzIG9mIEF1Z3VzdAorLTE5OTcuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCistUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24uCisrTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworK21hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgSmFudWFyeQorKzIwMDQuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCisrUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24sIHdpdGggYQorK3RyYW5zbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYXQgbGVhc3QgNTAlLgorIAorLSAgICAgUmVhZHkgUE8gZmlsZXMgICAgY3MgZGEgZGUgZW4gZXMgZmkgZnIgaXQgamEga28gbmwgbm8gcGwgcHQgc2wgc3YKKy0gICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy0gICAgIGJhc2ggICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGJpc29uICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgIFtdIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKy0gICAgIGNwaW8gICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwgIDUKKy0gICAgIGRpZmZ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGVuc2NyaXB0ICAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwgIDYKKy0gICAgIGZpbGV1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGZpbmR1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdIFtdICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDgKKy0gICAgIGZsZXggICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIHwgIDQKKy0gICAgIGdjYWwgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGdldHRleHQgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTEKKy0gICAgIGdyZXAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIHwgIDkKKy0gICAgIGhlbGxvICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGlkLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDMKKy0gICAgIGluZGVudCAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgIHwgIDQKKy0gICAgIGxpYmMgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDcKKy0gICAgIG00ICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIG1ha2UgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwgIDYKKy0gICAgIG11c2ljICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDIKKy0gICAgIHB0eCAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDgKKy0gICAgIHJlY29kZSAgICAgICAgICB8ICAgIFtdIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdIFtdIFtdIHwgIDkKKy0gICAgIHNoLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDcKKy0gICAgIHNoYXJ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIHRhciAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIHRleGluZm8gICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKy0gICAgIHRleHR1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIHwgIDkKKy0gICAgIHdkaWZmICAgICAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdICAgICAgIFtdIHwgIDgKKy0gICAgICAgICAgICAgICAgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKy0gICAgICAgMTYgbGFuZ3VhZ2VzICAgIGNzIGRhIGRlIGVuIGVzIGZpIGZyIGl0IGphIGtvIG5sIG5vIHBsIHB0IHNsIHN2CistICAgICAgIDI3IHBhY2thZ2VzICAgICAgMyAgMiAyNCAgMSAxNyAgMSAyNiAgMiAgMSAxMSAyMCAgOSAxOSAgNyAgNyAxNyAgMTY3CisrICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9HQiBlbyBlcworKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgICAgfAorKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgKCkgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ251cGcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgICAgKCkgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgcHR4ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgfAorKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgIFtdICAgICAgW10gfAorKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGZyZWU4Nl94a2JfeG1sICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWYgYW0gYXIgYXogYmUgYmcgYnMgY2EgY3MgZGEgZGUgZWwgZW4gZW5fR0IgZW8gZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAwICAwICAxICA5ICA0ICAxIDQwIDQxIDYwIDc4IDE3ICAxICAgNSAgIDEzIDY4CisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGV1IGZhIGZpIGZyIGdhIGdsIGhlIGhyIGh1IGlkIGlzIGl0IGphIGtvIGxnCisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICBhMnBzICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSAgICB8CisrICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgICAoKSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBmaWxldXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBmaW5kdXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnYmlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVwZyAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8zICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBwdHggICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBzaC11dGlscyAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAoKSAgICAgICAoKSAgICAgICAgICB8CisrICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAoKSBbXSAgICAgICB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB4ZnJlZTg2X3hrYl94bWwgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAgICAgICAgICAgICAgICAgICAgICBldCBldSBmYSBmaSBmciBnYSBnbCBoZSBociBodSBpZCBpcyBpdCBqYSBrbyBsZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjIgIDIgIDEgMjYgMTA2IDI4IDI0ICA4IDEwIDQxIDMzICAxIDI2IDMzIDEyICAwCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICgpICAgICAoKSAgICAgW10gICBbXSBbXSB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgKCkgICAgICAgICAgW10gICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICgpICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICgpICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKysgICAgIGdudXBnICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdICAgIFtdIFtdIFtdIFtdICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgW10gW10gIFtdICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdICgpIHwKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICBbXSAgICAgW10gICAgICAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdIFtdICBbXSAgICAgICAgIHwKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIHwKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSBbXSAgW10gICBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICBbXSB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDIgIDAgIDMgMTIgIDAgMTAgNjkgIDYgIDcgIDEgIDQwIDI2ICAzNiAgIDc2IDYzCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8ICA4CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgIHwgMTIKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIzCisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKysgICAgIGVycm9yICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE1CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIHwgMTcKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgW10gW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTYKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE0CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyMgorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTMKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAgOQorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDgKKysgICAgIGdudXBnICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE3CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMworKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTIKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTEKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI2CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDM0CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDI3CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICBbXSAgICAgICAgW10gICAgW10gICAgICB8ICA5CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgKCkgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTEKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDIwCisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgIFtdICAgICBbXSAgICAgICAgICAgIHwgMjcKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICB8ICAwCisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNgorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyCisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgIDIKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNworKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE4CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyNAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8IFtdICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDExCisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgNjMgdGVhbXMgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgIDEzMSBkb21haW5zICAgICAgICAgNDcgMTkgMjggODMgIDAgIDAgNTkgMTMgIDEgICAxIDExICAwICAyMiAgICAyMiAgICAwICAxMzczCisgCisgICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgorIHZpc2libGUgYmxvY2tzIGxldCB1cyBleHBlY3QuICBUaGlzIGlzIGJlY2F1c2UgYSBmZXcgZXh0cmEgUE8gZmlsZXMgYXJlCitAQCAtMjIwLDYgKzc0MiwyNyBAQAorIGxhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCisgZGlzdHJpYnV0aW9uLgorIAorLSAgIElmIEF1Z3VzdCAxOTk3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKKy10aGlzIGBBQk9VVC1OTFMnIGZpbGUgb24gbW9zdCBHTlUgYXJjaGl2ZSBzaXRlcy4KKysgICBJZiBKYW51YXJ5IDIwMDQgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weSBvZgorK3RoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QgdXAtdG8tZGF0ZQorK21hdHJpeCB3aXRoIGZ1bGwgcGVyY2VudGFnZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBhdAorK2BodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9IVE1ML21hdHJpeC5odG1sJy4KKysKKytVc2luZyBgZ2V0dGV4dCcgaW4gbmV3IHBhY2thZ2VzCisrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworK0lmIHlvdSBhcmUgd3JpdGluZyBhIGZyZWVseSBhdmFpbGFibGUgcHJvZ3JhbSBhbmQgd2FudCB0bworK2ludGVybmF0aW9uYWxpemUgaXQgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSBHTlUgYGdldHRleHQnIGluIHlvdXIKKytwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrTGljZW5zZSB3aGljaCBjb3ZlcnMgdGhlIHVzZSBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgVGhpcyBtZWFucworK2luIHBhcnRpY3VsYXIgdGhhdCBldmVuIG5vbi1mcmVlIHByb2dyYW1zIGNhbiB1c2UgYGxpYmludGwnIGFzIGEgc2hhcmVkCisrbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKKytsaWJyYXJ5IG9yIHVzZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBgbGliaW50bCcuCisrCisrICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQorK3RoZSB1c2Ugb2YgYGdldHRleHQnIHRoZSBvbmx5IHRoaW5nIG1pc3NpbmcgYXJlIHRoZSB0cmFuc2xhdGlvbnMuICBUaGUKKytGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMgYWxzbyBhdmFpbGFibGUgZm9yIHBhY2thZ2VzIHdoaWNoIGFyZSBub3QKKytkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKKythcHBsaWVzIGFsc28gZm9yIGV2ZXJ5IG90aGVyIEZyZWUgU29mdHdhcmUgUHJvamVjdC4gIENvbnRhY3QKKytgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gbWFrZSB0aGUgYC5wb3QnIGZpbGVzIGF2YWlsYWJsZSB0bworK3RoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvQ2hhbmdlTG9nCTE5OTgtMTItMjkgMTc6NDk6NTYuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNS44NDY1MjE0NTYgLTA0MDAKK0BAIC0xLDMgKzEsMTEgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IE5ldyB2YXJpYWJsZS4KKysJKEVYVFJBX0RJU1QpOiBBZGQgY29uZmlnLnJwYXRoLgorKwkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogQWRkIG00L01ha2VmaWxlLgorKwkoQUNfT1VUUFVUKTogUmVtb3ZlIGNvbW1hbmQgdGhhdCBjcmVhdGVkIHBvL01ha2VmaWxlLgorKwkoQUNfTElOS19GSUxFUyk6IFJlbW92ZSBpbnZvY2F0aW9uLgorKworIDE5OTgtMTItMjkJVXdlIE9oc2UgIDx1d2VAb2hzZS5kZT4KKyAKKyAJKiBzcmMvbHJ6LmM6IHJlbW92ZWQgc3RwY3B5IGNhbGwuCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2NvbmZpZy5ycGF0aAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvY29uZmlnLnJwYXRoCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzI5NzUyMDQwIC0wNDAwCitAQCAtMCwwICsxLDU0OCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorKyMKKysjICAgQ29weXJpZ2h0IDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKyMKKysjICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorKyMgICBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKysjICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKysjICAgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKysjIG9yCisrIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKysjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisrIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisrIworKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorKworKyMgS25vd24gbGltaXRhdGlvbnM6CisrIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKysjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisrIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisrCisrIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE0kVkMsCisrIyB3aGljaCBuZWVkcyAnLmxpYicpLgorK2xpYmV4dD1hCisrc2hyZXh0PS5zbworKworK2hvc3Q9IiQxIgorK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisrCisrIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisrCisrd2w9CisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgIHdsPSctV2wsJworK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKysgICAgICA7OworKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG5ld3NvczYpCisrICAgICAgOzsKKysgICAgbGludXgqKQorKyAgICAgIGNhc2UgJENDIGluCisrICAgICAgICBpY2N8ZWNjKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICAgIGNjYykKKysgICAgICAgICAgd2w9Jy1XbCwnCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzY28zLjJ2NSopCisrICAgICAgOzsKKysgICAgc29sYXJpcyopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICB3bD0nLVFvcHRpb24gbGQgJworKyAgICAgIDs7CisrICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzeXN2NCpNUCopCisrICAgICAgOzsKKysgICAgdXRzNCopCisrICAgICAgOzsKKysgIGVzYWMKKytmaQorKworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgorKworK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKytoYXJkY29kZV9kaXJlY3Q9bm8KKytoYXJkY29kZV9taW51c19MPW5vCisrCisrY2FzZSAiJGhvc3Rfb3MiIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKysgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKysgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgd2l0aF9nbnVfbGQ9bm8KKysgICAgZmkKKysgICAgOzsKKysgIG9wZW5ic2QqKQorKyAgICB3aXRoX2dudV9sZD1ubworKyAgICA7OworK2VzYWMKKysKKytsZF9zaGxpYnM9eWVzCisraWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKysgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisrICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGFtaWdhb3MqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisrICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKysgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKysgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbiB1c2UKKysgICAgICAjIHRoZW0uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYmVvcyopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgIGVsc2UKKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgbmV0YnNkKikKKysgICAgICA7OworKyAgICBzb2xhcmlzKiB8IHN5c3Y1KikKKysgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIDoKKysgICAgICBlbHNlCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIHN1bm9zNCopCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIDs7CisrICAgICopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgZXNhYworKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSB5ZXM7IHRoZW4KKysgICAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKKysgICAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgorKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICBmaQorK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgzKikKKysgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKysgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhaXg0KiB8IGFpeDUqKQorKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisrICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKysgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKysgICAgICBlbHNlCisrICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisrICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKysgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQorKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKysgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKysgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisrICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKysgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKysgICAgICAgICAgdGhlbgorKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorKyAgICAgICAgICBmaQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KKyt9J2AKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9CisrfSdgCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKysgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICBlbHNlCisrICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhbWlnYW9zKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYnNkaTQqKQorKyAgICAgIDs7CisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysgICAgICBsaWJleHQ9bGliCisrICAgICAgOzsKKysgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKysgICAgICBpZiAkQ0MgLXYgMj4mMSB8IGdyZXAgJ0FwcGxlJyA+L2Rldi9udWxsIDsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBkZ3V4KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgOzsKKysgICAgZnJlZWJzZDEqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICAgIGZyZWVic2QyLjIqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgZnJlZWJzZDIqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIDs7CisrICAgIGZyZWVic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDkqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisrICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgIGhwcGEqNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgIGlhNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKysgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgKikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKysgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICA7OworKyAgICBuZXRic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgbmV3c29zNikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIG9wZW5ic2QqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgZWxzZQorKyAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgICopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgb3MyKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICA7OworKyAgICBvc2YzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgOzsKKysgICAgb3NmNCogfCBvc2Y1KikKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGVsc2UKKysgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisrICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKysgICAgICBmaQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIHNjbzMuMnY1KikKKysgICAgICA7OworKyAgICBzb2xhcmlzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgc3lzdjQpCisrICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKysgICAgICAgIHNuaSkKKysgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKysgICAgICAgICAgOzsKKysgICAgICAgIHNpZW1lbnMpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICA7OworKyAgICAgICAgbW90b3JvbGEpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIHN5c3Y0LjMqKQorKyAgICAgIDs7CisrICAgIHN5c3Y0Kk1QKikKKysgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9eWVzCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBzeXN2NC4ydXcyKikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbWludXNfTD1ubworKyAgICAgIDs7CisrICAgIHN5c3Y1T3BlblVOSVg4KiB8IHN5c3Y1VW5peFdhcmU3KiB8ICBzeXN2NXV3Wzc4XSogfCB1bml4d2FyZTcqKQorKyAgICAgIDs7CisrICAgIHN5c3Y1KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorKyAgICAgIDs7CisrICAgIHV0czQqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICBlc2FjCisrZmkKKysKKysjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKytsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworK2Nhc2UgIiRob3N0X29zIiBpbgorKyAgYWl4MyopCisrICAgIDs7CisrICBhaXg0KiB8IGFpeDUqKQorKyAgICA7OworKyAgYW1pZ2FvcyopCisrICAgIDs7CisrICBiZW9zKikKKysgICAgOzsKKysgIGJzZGk0KikKKysgICAgOzsKKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgc2hyZXh0PS5kbGwKKysgICAgOzsKKysgIGRhcndpbiogfCByaGFwc29keSopCisrICAgIHNocmV4dD0uZHlsaWIKKysgICAgOzsKKysgIGRndXgqKQorKyAgICA7OworKyAgZnJlZWJzZDEqKQorKyAgICA7OworKyAgZnJlZWJzZCopCisrICAgIDs7CisrICBnbnUqKQorKyAgICA7OworKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICBpYTY0KikKKysgICAgICAgIHNocmV4dD0uc28KKysgICAgICAgIDs7CisrICAgICAgaHBwYSo2NCopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICAgICopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgY2FzZSAkTEQgaW4KKysgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKysgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisrICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisrICAgIDs7CisrICBsaW51eCopCisrICAgIDs7CisrICBuZXRic2QqKQorKyAgICA7OworKyAgbmV3c29zNikKKysgICAgOzsKKysgIG50by1xbngpCisrICAgIDs7CisrICBvcGVuYnNkKikKKysgICAgOzsKKysgIG9zMiopCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNocmV4dD0uZGxsCisrICAgIDs7CisrICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIDs7CisrICBzY28zLjJ2NSopCisrICAgIDs7CisrICBzb2xhcmlzKikKKysgICAgOzsKKysgIHN1bm9zNCopCisrICAgIDs7CisrICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisrICAgIDs7CisrICBzeXN2NCpNUCopCisrICAgIDs7CisrICB1dHM0KikKKysgICAgOzsKKytlc2FjCisrCisrc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKytlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKworK3NlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorKworKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0iJGVzY2FwZWRfd2wiCisrCisrIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCisrbGliZXh0PSIkbGliZXh0IgorKworKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KKytzaGxpYmV4dD0iJHNobGliZXh0IgorKworKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKytoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKworKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrCisrIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysjIHJlc3VsdGluZyBiaW5hcnkuCisraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorKworKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrIyByZXN1bHRpbmcgYmluYXJ5LgorK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorKworK0VPRgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9jb25maWd1cmUuaW4JMjAwNC0wOS0xMiAxNDozOTo1NS4xNjE3MDY0ODggLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM1LjgxNjUyNjAxNiAtMDQwMAorQEAgLTI2MCwxMSArMjYwLDEwIEBACisgQU1fR05VX0dFVFRFWFQKKyAKKyBBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIpCistQUNfTElOS19GSUxFUygkbmxzX2N2X2hlYWRlcl9saWJndCwgJG5sc19jdl9oZWFkZXJfaW50bCkKKyAKKy1BQ19PVVRQVVQoW01ha2VmaWxlIGludGwvTWFrZWZpbGUgbGliL01ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBcCisrQUNfT1VUUFVUKFtNYWtlZmlsZSBpbnRsL01ha2VmaWxlIGxpYi9NYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgIG00L01ha2VmaWxlIFwKKyBtYW4vTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gc3JjL01ha2VmaWxlIGRlYmlhbi9ydWxlcyBTcGVjZmlsZSBzeXN0eXBlIFwKKyBzcmMvbHJ6c3pidWddLAorLVtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IAorK1sKKyBjaG1vZCAreCBkZWJpYW4vcnVsZXM7CisgdGVzdCAteiAiJENPTkZJR19IRUFERVJTIiB8fCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2JpbmR0ZXh0ZG9tLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvYmluZHRleHRkb20uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM0Mzc0OTkxMiAtMDQwMAorQEAgLTEsNTkgKzEsNzUgQEAKKyAvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluZHRleHRkb21haW4oMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZWxzZQorLXZvaWQgZnJlZSAoKTsKKy0jIGVuZGlmCistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kaXJuYW1lIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lCisrIyBkZWZpbmUgX25sX2RvbWFpbl9iaW5kaW5ncyBsaWJpbnRsX25sX2RvbWFpbl9iaW5kaW5ncworKyNlbmRpZgorKworKy8qIFNvbWUgY29tcGlsZXJzLCBsaWtlIFN1bk9TNCBjYywgZG9uJ3QgaGF2ZSBvZmZzZXRvZiBpbiA8c3RkZGVmLmg+LiAgKi8KKysjaWZuZGVmIG9mZnNldG9mCisrIyBkZWZpbmUgb2Zmc2V0b2YodHlwZSxpZGVudCkgKChzaXplX3QpJigoKHR5cGUqKTApLT5pZGVudCkpCisgI2VuZGlmCistI2luY2x1ZGUgImdldHRleHQuaCIKKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lX2ludGVybmFsW10gYXR0cmlidXRlX2hpZGRlbjsKKysjZWxzZQorKyMgZGVmaW5lIElOVFVTRShuYW1lKSBuYW1lCisrI2VuZGlmCisgCisgLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMuICAqLworIGV4dGVybiBzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKyAKKysvKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKytfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKworIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKyAgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCitAQCAtNjEsMjMgKzc3LDQxIEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBCSU5EVEVYVERPTUFJTiBfX2JpbmR0ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisrIyBpZm5kZWYgc3RyZHVwCisrIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisrIyBlbmRpZgorICNlbHNlCistIyBkZWZpbmUgQklORFRFWFRET01BSU4gYmluZHRleHRkb21haW5fXworKyMgZGVmaW5lIEJJTkRURVhURE9NQUlOIGxpYmludGxfYmluZHRleHRkb21haW4KKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisgI2VuZGlmCisgCistLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCistICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworLWNoYXIgKgorLUJJTkRURVhURE9NQUlOIChkb21haW5uYW1lLCBkaXJuYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU7CisrLyogU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgbmFtZSAqRElSTkFNRVAgYW5kIHRoZSBvdXRwdXQgY29kZXNldCAqQ09ERVNFVFAKKysgICB0byBiZSB1c2VkIGZvciB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cuCisrICAgSWYgKkRJUk5BTUVQIG9yICpDT0RFU0VUUCBpcyBOVUxMLCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaXMgbm90CisrICAgbW9kaWZpZWQsIG9ubHkgdGhlIGN1cnJlbnQgdmFsdWUgaXMgcmV0dXJuZWQuCisrICAgSWYgRElSTkFNRVAgb3IgQ09ERVNFVFAgaXMgTlVMTCwgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG5laXRoZXIKKysgICBtb2RpZmllZCBub3IgcmV0dXJuZWQuICAqLworK3N0YXRpYyB2b2lkCisrc2V0X2JpbmRpbmdfdmFsdWVzIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJICAgIGNvbnN0IGNoYXIgKipkaXJuYW1lcCwgY29uc3QgY2hhciAqKmNvZGVzZXRwKQorIHsKKyAgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgaW50IG1vZGlmaWVkOworIAorICAgLyogU29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwgfHwgZG9tYWlubmFtZVswXSA9PSAnXDAnKQorLSAgICByZXR1cm4gTlVMTDsKKysgICAgeworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJKmRpcm5hbWVwID0gTlVMTDsKKysgICAgICBpZiAoY29kZXNldHApCisrCSpjb2Rlc2V0cCA9IE5VTEw7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3dybG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgbW9kaWZpZWQgPSAwOworIAorICAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKyAgICAgeworQEAgLTkzLDgxICsxMjcsMTczIEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKy0gICAgLyogVGhlIGN1cnJlbnQgYmluZGluZyBoYXMgYmUgdG8gcmV0dXJuZWQuICAqLworLSAgICByZXR1cm4gYmluZGluZyA9PSBOVUxMID8gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZSA6IGJpbmRpbmctPmRpcm5hbWU7CistCisgICBpZiAoYmluZGluZyAhPSBOVUxMKQorICAgICB7CistICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorLQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorLQkgb2xkIGJpbmRpbmcuICAqLworLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIGJpbmRpbmctPmRpcm5hbWUpICE9IDApCisrICAgICAgaWYgKGRpcm5hbWVwKQorIAl7CistCSAgY2hhciAqbmV3X2Rpcm5hbWU7CisrCSAgY29uc3QgY2hhciAqZGlybmFtZSA9ICpkaXJuYW1lcDsKKyAKKy0JICBpZiAoc3RyY21wIChkaXJuYW1lLCBfbmxfZGVmYXVsdF9kaXJuYW1lKSA9PSAwKQorLQkgICAgbmV3X2Rpcm5hbWUgPSAoY2hhciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOworKwkgIGlmIChkaXJuYW1lID09IE5VTEwpCisrCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCisrCSAgICAqZGlybmFtZXAgPSBiaW5kaW5nLT5kaXJuYW1lOworIAkgIGVsc2UKKyAJICAgIHsKKysJICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorKwkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKysJCSBvbGQgYmluZGluZy4gICovCisrCSAgICAgIGNoYXIgKnJlc3VsdCA9IGJpbmRpbmctPmRpcm5hbWU7CisrCSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIHJlc3VsdCkgIT0gMCkKKysJCXsKKysJCSAgaWYgKHN0cmNtcCAoZGlybmFtZSwgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKSA9PSAwKQorKwkJICAgIHJlc3VsdCA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysJCSAgZWxzZQorKwkJICAgIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgICAgIG5ld19kaXJuYW1lID0gc3RyZHVwIChkaXJuYW1lKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisgI2Vsc2UKKy0JICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworLQkgICAgICBuZXdfZGlybmFtZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKy0KKy0JICAgICAgbWVtY3B5IChuZXdfZGlybmFtZSwgZGlybmFtZSwgbGVuKTsKKysJCSAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisrCQkJbWVtY3B5IChyZXN1bHQsIGRpcm5hbWUsIGxlbik7CisgI2VuZGlmCisrCQkgICAgfQorKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChiaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJCQlmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKysKKysJCSAgICAgIGJpbmRpbmctPmRpcm5hbWUgPSByZXN1bHQ7CisrCQkgICAgICBtb2RpZmllZCA9IDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICAqZGlybmFtZXAgPSByZXN1bHQ7CisgCSAgICB9CisrCX0KKyAKKy0JICBpZiAoYmluZGluZy0+ZGlybmFtZSAhPSBfbmxfZGVmYXVsdF9kaXJuYW1lKQorLQkgICAgZnJlZSAoYmluZGluZy0+ZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwl7CisrCSAgY29uc3QgY2hhciAqY29kZXNldCA9ICpjb2Rlc2V0cDsKKyAKKy0JICBiaW5kaW5nLT5kaXJuYW1lID0gbmV3X2Rpcm5hbWU7CisrCSAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKysJICAgICpjb2Rlc2V0cCA9IGJpbmRpbmctPmNvZGVzZXQ7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCisrCQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorKwkJIG9sZCBiaW5kaW5nLiAgKi8KKysJICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+Y29kZXNldDsKKysJICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8IHN0cmNtcCAoY29kZXNldCwgcmVzdWx0KSAhPSAwKQorKwkJeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChjb2Rlc2V0KTsKKysjZWxzZQorKwkJICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCQkgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICBtZW1jcHkgKHJlc3VsdCwgY29kZXNldCwgbGVuKTsKKysjZW5kaWYKKysKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICB7CisrCQkgICAgICBpZiAoYmluZGluZy0+Y29kZXNldCAhPSBOVUxMKQorKwkJCWZyZWUgKGJpbmRpbmctPmNvZGVzZXQpOworKworKwkJICAgICAgYmluZGluZy0+Y29kZXNldCA9IHJlc3VsdDsKKysJCSAgICAgIGJpbmRpbmctPmNvZGVzZXRfY250cisrOworKwkJICAgICAgbW9kaWZpZWQgPSAxOworKwkJICAgIH0KKysJCX0KKysJICAgICAgKmNvZGVzZXRwID0gcmVzdWx0OworKwkgICAgfQorIAl9CisgICAgIH0KKysgIGVsc2UgaWYgKChkaXJuYW1lcCA9PSBOVUxMIHx8ICpkaXJuYW1lcCA9PSBOVUxMKQorKwkgICAmJiAoY29kZXNldHAgPT0gTlVMTCB8fCAqY29kZXNldHAgPT0gTlVMTCkpCisrICAgIHsKKysgICAgICAvKiBTaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcy4gICovCisrICAgICAgaWYgKGRpcm5hbWVwKQorKwkqZGlybmFtZXAgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwkqY29kZXNldHAgPSBOVUxMOworKyAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nLiAgKi8KKy0gICAgICBzaXplX3QgbGVuOworKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpICsgMTsKKyAgICAgICBzdHJ1Y3QgYmluZGluZyAqbmV3X2JpbmRpbmcgPQorLQkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChzaXplb2YgKCpuZXdfYmluZGluZykpOworKwkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChvZmZzZXRvZiAoc3RydWN0IGJpbmRpbmcsIGRvbWFpbm5hbWUpICsgbGVuKTsKKyAKKy0gICAgICBpZiAobmV3X2JpbmRpbmcgPT0gTlVMTCkKKy0JcmV0dXJuIE5VTEw7CisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5ld19iaW5kaW5nID09IE5VTEwsIDApKQorKwlnb3RvIGZhaWxlZDsKKyAKKysgICAgICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lLCBkb21haW5uYW1lLCBsZW4pOworKworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJeworKwkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CisrCisrCSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKysJICAgIGRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpID09IDApCisrCQlkaXJuYW1lID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGNoYXIgKnJlc3VsdDsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSBzdHJkdXAgKGRvbWFpbm5hbWUpOworLSAgICAgIGlmIChuZXdfYmluZGluZy0+ZG9tYWlubmFtZSA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChkaXJuYW1lKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCSAgICBnb3RvIGZhaWxlZF9kaXJuYW1lOworICNlbHNlCistICAgICAgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lID09IE5VTEwpCistCXJldHVybiBOVUxMOworLSAgICAgIG1lbWNweSAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGxlbik7CisrCQkgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisrCQkgIG1lbWNweSAocmVzdWx0LCBkaXJuYW1lLCBsZW4pOworICNlbmRpZgorLQorLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIF9ubF9kZWZhdWx0X2Rpcm5hbWUpID09IDApCistCW5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZTsKKysJCSAgZGlybmFtZSA9IHJlc3VsdDsKKysJCX0KKysJICAgIH0KKysJICAqZGlybmFtZXAgPSBkaXJuYW1lOworKwkgIG5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgZGlybmFtZTsKKysJfQorICAgICAgIGVsc2UKKysJLyogVGhlIGRlZmF1bHQgdmFsdWUuICAqLworKwluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysKKysgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyID0gMDsKKysKKysgICAgICBpZiAoY29kZXNldHApCisgCXsKKysJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworKworKwkgIGlmIChjb2Rlc2V0ICE9IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnJlc3VsdDsKKysKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSBzdHJkdXAgKGRpcm5hbWUpOworLQkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSA9PSBOVUxMKQorLQkgICAgcmV0dXJuIE5VTEw7CisrCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoY29kZXNldCk7CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisrCQlnb3RvIGZhaWxlZF9jb2Rlc2V0OworICNlbHNlCistCSAgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lID09IE5VTEwpCistCSAgICByZXR1cm4gTlVMTDsKKy0JICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kaXJuYW1lLCBkaXJuYW1lLCBsZW4pOworKwkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CisrCSAgICAgIG1lbWNweSAocmVzdWx0LCBjb2Rlc2V0LCBsZW4pOworICNlbmRpZgorKwkgICAgICBjb2Rlc2V0ID0gcmVzdWx0OworKwkgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyKys7CisrCSAgICB9CisrCSAgKmNvZGVzZXRwID0gY29kZXNldDsKKysJICBuZXdfYmluZGluZy0+Y29kZXNldCA9IChjaGFyICopIGNvZGVzZXQ7CisgCX0KKysgICAgICBlbHNlCisrCW5ld19iaW5kaW5nLT5jb2Rlc2V0ID0gTlVMTDsKKyAKKyAgICAgICAvKiBOb3cgZW5xdWV1ZSBpdC4gICovCisgICAgICAgaWYgKF9ubF9kb21haW5fYmluZGluZ3MgPT0gTlVMTAorQEAgLTE4NywxMyArMzEzLDUxIEBACisgCSAgYmluZGluZy0+bmV4dCA9IG5ld19iaW5kaW5nOworIAl9CisgCistICAgICAgYmluZGluZyA9IG5ld19iaW5kaW5nOworKyAgICAgIG1vZGlmaWVkID0gMTsKKysKKysgICAgICAvKiBIZXJlIHdlIGRlYWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4gICovCisrICAgICAgaWYgKDApCisrCXsKKysJZmFpbGVkX2NvZGVzZXQ6CisrCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJICAgIGZyZWUgKG5ld19iaW5kaW5nLT5kaXJuYW1lKTsKKysJZmFpbGVkX2Rpcm5hbWU6CisrCSAgZnJlZSAobmV3X2JpbmRpbmcpOworKwlmYWlsZWQ6CisrCSAgaWYgKGRpcm5hbWVwKQorKwkgICAgKmRpcm5hbWVwID0gTlVMTDsKKysJICBpZiAoY29kZXNldHApCisrCSAgICAqY29kZXNldHAgPSBOVUxMOworKwl9CisgICAgIH0KKyAKKy0gIHJldHVybiBiaW5kaW5nLT5kaXJuYW1lOworKyAgLyogSWYgd2UgbW9kaWZpZWQgYW55IGJpbmRpbmcsIHdlIGZsdXNoIHRoZSBjYWNoZXMuICAqLworKyAgaWYgKG1vZGlmaWVkKQorKyAgICArK19ubF9tc2dfY2F0X2NudHI7CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworK30KKysKKysvKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKysgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCisrY2hhciAqCisrQklORFRFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCisreworKyAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCAmZGlybmFtZSwgTlVMTCk7CisrICByZXR1cm4gKGNoYXIgKikgZGlybmFtZTsKKyt9CisrCisrLyogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZQorKyAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworK2NoYXIgKgorK0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpjb2Rlc2V0KQorK3sKKysgIHNldF9iaW5kaW5nX3ZhbHVlcyAoZG9tYWlubmFtZSwgTlVMTCwgJmNvZGVzZXQpOworKyAgcmV0dXJuIChjaGFyICopIGNvZGVzZXQ7CisgfQorIAorICNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworKy8qIEFsaWFzZXMgZm9yIGZ1bmN0aW9uIG5hbWVzIGluIEdOVSBDIExpYnJhcnkuICAqLworIHdlYWtfYWxpYXMgKF9fYmluZHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKTsKKyt3ZWFrX2FsaWFzIChfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LCBiaW5kX3RleHRkb21haW5fY29kZXNldCk7CisgI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvY2F0LWNvbXBhdC5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NhdC1jb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMjYyICswLDAgQEAKKy0vKiBDb21wYXRpYmlsaXR5IGNvZGUgZm9yIGdldHRleHQtdXNpbmctY2F0Z2V0cyBpbnRlcmZhY2UuCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZmRlZiBTVERDX0hFQURFUlMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZmRlZiBIQVZFX05MX1RZUEVTX0gKKy0jIGluY2x1ZGUgPG5sX3R5cGVzLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgYHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKy0gICBgYERpcmVjdHMgYHNldGxvY2FsZSgpJyB0byBxdWVyeSBgY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKy0gICAgIHNldHRpbmcgb2YgYGxvY2FsJy4nJworLSAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgQW5kIGV2ZW4gd29yc2U6IFBPU0lYCistICAgZGVmaW5lcyB0aGlzIG5vdCBhdCBhbGwuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkCistICAgc3lzdGVtIChlLmcuIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBIQVZFX0xPQ0FMRV9OVUxMCistI2VuZGlmCistCistLyogVGhlIGNhdGFsb2cgZGVzY3JpcHRvci4gICovCistc3RhdGljIG5sX2NhdGQgY2F0YWxvZyA9IChubF9jYXRkKSAtMTsKKy0KKy0vKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGNhdGFsb2cuICAqLworLXN0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRfY2F0YWxvZ19uYW1lW10gPSAibWVzc2FnZXMiOworLQorLS8qIE5hbWUgb2YgY3VycmVudGx5IHVzZWQgY2F0YWxvZy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLS8qIEdldCBJRCBmb3IgZ2l2ZW4gc3RyaW5nLiAgSWYgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludCBtc2dfdG9fY2F0X2lkIFBBUkFNUyAoKGNvbnN0IGNoYXIgKm1zZykpOworLQorLS8qIFN1YnN0aXR1dGlvbiBmb3Igc3lzdGVtcyBsYWNraW5nIHRoaXMgZnVuY3Rpb24gaW4gdGhlaXIgQyBsaWJyYXJ5LiAgKi8KKy0jaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7CistI2VuZGlmCistCistCistLyogU2V0IGN1cnJlbnRseSB1c2VkIGRvbWFpbi9jYXRhbG9nLiAgKi8KKy1jaGFyICoKKy10ZXh0ZG9tYWluIChkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy17CistICBubF9jYXRkIG5ld19jYXRhbG9nOworLSAgY2hhciAqbmV3X25hbWU7CistICBzaXplX3QgbmV3X25hbWVfbGVuOworLSAgY2hhciAqbGFuZzsKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgXAorLSAgICAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwKKy0gIGxhbmcgPSBzZXRsb2NhbGUgKExDX01FU1NBR0VTLCBOVUxMKTsKKy0jZWxzZQorLSAgbGFuZyA9IGdldGVudiAoIkxDX0FMTCIpOworLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBsYW5nID0gZ2V0ZW52ICgiTENfTUVTU0FHRVMiKTsKKy0gICAgICBpZiAobGFuZyA9PSBOVUxMIHx8IGxhbmdbMF0gPT0gJ1wwJykKKy0JbGFuZyA9IGdldGVudiAoIkxBTkciKTsKKy0gICAgfQorLSNlbmRpZgorLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIGxhbmcgPSAiQyI7CistCistICAvKiBTZWUgd2hldGhlciBuYW1lIG9mIGN1cnJlbnRseSB1c2VkIGRvbWFpbiBpcyBhc2tlZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLQorLSAgaWYgKGRvbWFpbm5hbWVbMF0gPT0gJ1wwJykKKy0gICAgZG9tYWlubmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgKi8KKy0gIG5ld19uYW1lX2xlbiA9IHNpemVvZiAoTE9DQUxFRElSKSAtIDEgKyAxICsgc3RybGVuIChsYW5nKQorLQkJICsgc2l6ZW9mICgiL0xDX01FU1NBR0VTLyIpIC0gMSArIHNpemVvZiAoUEFDS0FHRSkgLSAxCistCQkgKyBzaXplb2YgKCIuY2F0Iik7CistCistICBuZXdfbmFtZSA9IChjaGFyICopIG1hbGxvYyAobmV3X25hbWVfbGVuKTsKKy0gIGlmIChuZXdfbmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIHN0cmNweSAobmV3X25hbWUsIFBBQ0tBR0UpOworLSAgbmV3X2NhdGFsb2cgPSBjYXRvcGVuIChuZXdfbmFtZSwgMCk7CistCistICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLSAgICB7CistICAgICAgLyogTkxTUEFUSCBzZWFyY2ggZGlkbid0IHdvcmssIHRyeSBhYnNvbHV0ZSBwYXRoICovCistICAgICAgc3ByaW50ZiAobmV3X25hbWUsICIlcy8lcy9MQ19NRVNTQUdFUy8lcy5jYXQiLCBMT0NBTEVESVIsIGxhbmcsCistCSAgICAgICBQQUNLQUdFKTsKKy0gICAgICBuZXdfY2F0YWxvZyA9IGNhdG9wZW4gKG5ld19uYW1lLCAwKTsKKy0KKy0gICAgICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLQl7CistCSAgZnJlZSAobmV3X25hbWUpOworLQkgIHJldHVybiAoY2hhciAqKSBjYXRhbG9nX25hbWU7CistCX0KKy0gICAgfQorLQorLSAgLyogQ2xvc2Ugb2xkIGNhdGFsb2cuICAqLworLSAgaWYgKGNhdGFsb2cgIT0gKG5sX2NhdGQpIC0xKQorLSAgICBjYXRjbG9zZSAoY2F0YWxvZyk7CistICBpZiAoY2F0YWxvZ19uYW1lICE9IGRlZmF1bHRfY2F0YWxvZ19uYW1lKQorLSAgICBmcmVlICgoY2hhciAqKSBjYXRhbG9nX25hbWUpOworLQorLSAgY2F0YWxvZyA9IG5ld19jYXRhbG9nOworLSAgY2F0YWxvZ19uYW1lID0gbmV3X25hbWU7CistCistICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLX0KKy0KKy1jaGFyICoKKy1iaW5kdGV4dGRvbWFpbiAoZG9tYWlubmFtZSwgZGlybmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICpkaXJuYW1lOworLXsKKy0jaWYgSEFWRV9TRVRFTlYgfHwgSEFWRV9QVVRFTlYKKy0gIGNoYXIgKm9sZF92YWwsICpuZXdfdmFsLCAqY3A7CistICBzaXplX3QgbmV3X3ZhbF9sZW47CistCistICAvKiBUaGlzIGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSBoZXJlIGJ1dCB0byBiZSBjb21wYXRpYmxlIGRvIGl0LiAgKi8KKy0gIGlmIChkb21haW5uYW1lID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgSWYgd2UgdXNlIHNldGVudiB3ZSBkb24ndCBuZWVkCistICAgICB0aGUgZmlyc3QgYnl0cyBmb3IgTkxTUEFUSD0sIGJ1dCB3aHkgY29tcGxpY2F0ZSB0aGUgY29kZSBmb3IgdGhpcworLSAgICAgcGVhbnV0cy4gICovCistICBuZXdfdmFsX2xlbiA9IHNpemVvZiAoIk5MU1BBVEg9IikgLSAxICsgc3RybGVuIChkaXJuYW1lKQorLQkJKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistCistICBvbGRfdmFsID0gZ2V0ZW52ICgiTkxTUEFUSCIpOworLSAgaWYgKG9sZF92YWwgPT0gTlVMTCB8fCBvbGRfdmFsWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBvbGRfdmFsID0gTlVMTDsKKy0gICAgICBuZXdfdmFsX2xlbiArPSAxICsgc2l6ZW9mIChMT0NBTEVESVIpIC0gMQorLQkgICAgICAgICAgICAgKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistICAgIH0KKy0gIGVsc2UKKy0gICAgbmV3X3ZhbF9sZW4gKz0gc3RybGVuIChvbGRfdmFsKTsKKy0KKy0gIG5ld192YWwgPSAoY2hhciAqKSBtYWxsb2MgKG5ld192YWxfbGVuKTsKKy0gIGlmIChuZXdfdmFsID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIGNwID0gbmV3X3ZhbDsKKy0jIGVsc2UKKy0gIGNwID0gc3RwY3B5IChuZXdfdmFsLCAiTkxTUEFUSD0iKTsKKy0jIGVuZGlmCistCistICBjcCA9IHN0cGNweSAoY3AsIGRpcm5hbWUpOworLSAgY3AgPSBzdHBjcHkgKGNwLCAiLyVML0xDX01FU1NBR0VTLyVOLmNhdDoiKTsKKy0KKy0gIGlmIChvbGRfdmFsID09IE5VTEwpCistICAgIHsKKy0jIGlmIF9fU1REQ19fCistICAgICAgc3RwY3B5IChjcCwgTE9DQUxFRElSICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbHNlCistCistICAgICAgY3AgPSBzdHBjcHkgKGNwLCBMT0NBTEVESVIpOworLSAgICAgIHN0cGNweSAoY3AsICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbmRpZgorLSAgICB9CistICBlbHNlCistICAgIHN0cGNweSAoY3AsIG9sZF92YWwpOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIHNldGVudiAoIk5MU1BBVEgiLCBuZXdfdmFsLCAxKTsKKy0gIGZyZWUgKG5ld192YWwpOworLSMgZWxzZQorLSAgcHV0ZW52IChuZXdfdmFsKTsKKy0gIC8qIERvICpub3QqIGZyZWUgdGhlIGVudmlyb25tZW50IGVudHJ5IHdlIGp1c3QgZW50ZXJlZC4gIEl0IGlzIHVzZWQKKy0gICAgIGZyb20gbm93IG9uLiAgICovCistIyBlbmRpZgorLQorLSNlbmRpZgorLQorLSAgcmV0dXJuIChjaGFyICopIGRvbWFpbm5hbWU7CistfQorLQorLSN1bmRlZiBnZXR0ZXh0CistY2hhciAqCistZ2V0dGV4dCAobXNnKQorLSAgICAgY29uc3QgY2hhciAqbXNnOworLXsKKy0gIGludCBtc2dpZDsKKy0KKy0gIGlmIChtc2cgPT0gTlVMTCB8fCBjYXRhbG9nID09IChubF9jYXRkKSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIC8qIEdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBjYXRhbG9nLiAgV2UgYWx3YXlzIHVzZSBzZXQgbnVtYmVyIDEuCistICAgICBUaGUgbWVzc2FnZSBJRCBpcyBjb21wdXRlZCBieSB0aGUgZnVuY3Rpb24gYG1zZ190b19jYXRfaWQnCistICAgICB3aGljaCB3b3JrcyBvbiB0aGUgdGFibGUgZ2VuZXJhdGVkIGJ5IGBwby10by10YmwnLiAgKi8KKy0gIG1zZ2lkID0gbXNnX3RvX2NhdF9pZCAobXNnKTsKKy0gIGlmIChtc2dpZCA9PSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIHJldHVybiBjYXRnZXRzIChjYXRhbG9nLCAxLCBtc2dpZCwgKGNoYXIgKikgbXNnKTsKKy19CistCistLyogTG9vayB0aHJvdWdoIHRoZSB0YWJsZSBgX21zZ190YmwnIHdoaWNoIGhhcyBgX21zZ190YmxfbGVuZ3RoJyBlbnRyaWVzCistICAgZm9yIHRoZSBvbmUgZXF1YWwgdG8gbXNnLiAgSWYgaXQgaXMgZm91bmQgcmV0dXJuIHRoZSBJRC4gIEluIGNhc2Ugd2hlbgorLSAgIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludAorLW1zZ190b19jYXRfaWQgKG1zZykKKy0gICAgIGNvbnN0IGNoYXIgKm1zZzsKKy17CistICBpbnQgY250OworLQorLSAgZm9yIChjbnQgPSAwOyBjbnQgPCBfbXNnX3RibF9sZW5ndGg7ICsrY250KQorLSAgICBpZiAoc3RyY21wIChtc2csIF9tc2dfdGJsW2NudF0uX21zZykgPT0gMCkKKy0gICAgICByZXR1cm4gX21zZ190YmxbY250XS5fbXNnX251bWJlcjsKKy0KKy0gIHJldHVybiAtMTsKKy19CistCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9DaGFuZ2VMb2cJMTk5OC0wNC0yNiAwOToyMjozNS4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzQ5NzQ5MDAwIC0wNDAwCitAQCAtMSwxMDIyICsxLDQgQEAKKy0xOTk3LTA5LTA2IDAyOjEwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBSZWZvcm1hdCBjb3B5cmlnaHQuCistCistMTk5Ny0wOC0xOSAxNToyMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IFJlbW92ZSB3cm9uZyBjb21tZW50LgorLQorLTE5OTctMDgtMTYgMDA6MTMgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRhdGEpOiBEb24ndCBjaGFuZ2UgZGlyZWN0b3J5IHRvIGluc3RhbGwuCistCistMTk5Ny0wOC0wMSAxNDozMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogY2F0LWNvbXBhdC5jOiBGaXggY29weXJpZ2h0LgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IFVwZGF0ZSBjb3B5cmlnaHQuICBGaXggdHlwb3MuCistCistCSogbDEwbmZsaXN0LmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0JKF9ubF9tYWtlX2wxMG5mbGlzdCk6IEhhbmRsZSBzcG9uc29yIGFuZCByZXZpc2lvbiBjb3JyZWN0bHkuCistCistCSogZ2V0dGV4dC5jOiBVcGRhdGUgY29weXJpZ2h0LgorLQkqIGdldHRleHQuaDogTGlrZXdpc2UuCistCSogaGFzaC1zdHJpbmcuaDogTGlrZXdpc2UuCistCistCSogZmluZGRvbWFpbi5jOiBSZW1vYXZlIGRlYWQgY29kZS4gIERlZmluZSBzdHJjaHIgb25seSBpZgorLQkhSEFWRV9TVFJDSFIuCistCistCSogZXhwbG9kZW5hbWUuYzogSW5jbHVkZSA8c3lzL3R5cGVzLmg+LgorLQorLQkqIGV4cGxvZGVuYW1lLmM6IFJlZm9ybWF0IGNvcHlyaWdodCB0ZXh0LgorLQkoX25sX2V4cGxvZGVfbmFtZSk6IEZpeCB0eXBvLgorLQorLQkqIGRjZ2V0dGV4dC5jOiBEZWZpbmUgYW5kIHVzZSBfX3NldF9lcnJuby4KKy0JKGd1ZXNzX2NhdGVnb3J5X3ZhbHVlKTogRG9uJ3QgdXNlIHNldGxvY2FsZSBpZiBIQVZFX0xDX01FU1NBR0VTIGlzCistCW5vdCBkZWZpbmVkLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6IFByZXR0eSBwcmludGluZy4KKy0KKy0xOTk3LTA1LTAxIDAyOjI1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUpOiBEb24ndCBkZXBlbmQgb24KKy0JSEFWRV9MQ19NRVNTQUdFUy4gIFdlIGRvbid0IG5lZWQgdGhlIG1hY3JvIGhlcmUuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6IERvTid0IHJlZmVyIHRvIEhBVkVfU0VUTE9DQUxFX05VTEwKKy0JbWFjcm8uICBJbnN0ZWFkIHVzZSBIQVZFX0xPQ0FMRV9OVUxMIGFuZCBkZWZpbmUgaXQgd2hlbiB1c2luZworLQlnbGliYywgYXMgaW4gZGNnZXR0ZXh0LmMuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIE1ha2VmaWxlLmluIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZS4gIFJlcG9ydGVkIGJ5IEZyYW5jLG9pcworLQlQaW5hcmQuCistCistTW9uIE1hciAxMCAwNjo1MToxNyAxOTk3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogSW1wbGVtZW50IGhhbmRsaW5nIG9mIGxpYnRvb2wuCistCistCSogZ2V0dGV4dFAuaDogQ2hhbmdlIGRhdGEgc3RydWN0dXJlcyBmb3IgdXNlIG9mIGdlbmVyaWMgbG93bGV2ZWwKKy0JaTE4biBmaWxlIGhhbmRsaW5nLgorLQorLVdlZCBEZWMgIDQgMjA6MjE6MTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBQdXQgcGFyZW50aGVzZXMgYXJvdW5kIGFyZ3VtZW50cyBvZiBtZW1jcHkgbWFjcm8KKy0JZGVmaW5pdGlvbi4KKy0JKiBsb2NhbGVhbGlhcy5jOiBMaWtld2lzZS4KKy0JKiBsMTBuZmxpc3QuYzogTGlrZXdpc2UuCistCSogZmluZGRvbWFpbi5jOiBMaWtld2lzZS4KKy0JKiBiaW5kdGV4dGRvbS5jOiBMaWtld2lzZS4KKy0JUmVwb3J0ZWQgYnkgVGhvbWFzIEVza2VuLgorLQorLU1vbiBOb3YgMjUgMjI6NTc6NTEgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBNb3ZlIGRlZmluaXRpb24gb2YgYG1lbWNweWAgbWFjcm8gdG8gcmlnaHQKKy0JcG9zaXRpb24uCistCistRnJpIE5vdiAyMiAwNDowMTo1OCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgWyFIQVZFX1NUUklOR19IICYmICFfTElCQ106IERlZmluZSBtZW1jcHkgdXNpbmcKKy0gCWJjb3B5IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuICBSZXBvcnRlZCBieSBUaG9tYXMgRXNrZW4uCistCSogYmluZHRleHRkb20uYzogTGlrZXdpc2UuCistCSogbDEwbmZsaXN0LmM6IExpa2V3aXNlLgorLQkqIGxvY2FsZWFsaWFzLmM6IExpa2V3aXNlLgorLQkqIHRleHRkb21haW4uYzogTGlrZXdpc2UuCistCistVHVlIE9jdCAyOSAxMToxMDoyNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyKTogQ2hhbmdlIHRvIHVzZSBleGVjX3ByZWZpeCBpbnN0ZWFkIG9mCistIAlwcmVmaXguICBSZXBvcnRlZCBieSBLbnV0LUjldmFyZEFrc25lcyA8ZXRva25hQGV0by5lcmljc3Nvbi5zZT4uCistCistU2F0IEF1ZyAzMSAwMzowNzowOSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX25sX25vcm1hbGl6ZV9jb2Rlc2V0KTogV2UgY29udmVydCB0byBsb3dlciBjYXNlLAorLQlzbyBkb24ndCBwcmVwZW5kIHVwcGVyY2FzZSBgSVNPJyBmb3Igb25seSBudW1lcmljIGFyZy4KKy0KKy1GcmkgSnVsIDE5IDAwOjE1OjQ2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jOiBNb3ZlIGluY2x1c2lvbiBvZiBhcmd6LmgsIGN0eXBlLmgsIHN0ZGxpYi5oIGFmdGVyCistCWRlZmluaXRpb24gb2YgX0dOVV9TT1VSQ0UuICBQYXRjaCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogRml4IGFub3RoZXIgYnVnIHdpdGggYGZvcicgbG9vcCBhbmQKKy0JZW1wdHkgYXJndW1lbnRzLiAgUGF0Y2ggYnkgSmltIE1leWVyaW5nLiAgQ29ycmVjdCBuYW1lIG9zCistCXVuaW5zdGFsbGVkIGZpbGVzOiBubyBpbnRsLSBwcmVmaXggYW55bW9yZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kYXRhKTogQWdhaW4gd29yayBhcm91bmQgc2hlbGxzIHdoaWNoCistCWNhbm5vdCBoYW5kbGUgbXB0eSBmb3IgbGlzdC4gIFJlcG9ydGVkIGJ5IEppbSBNZXllcmluZy4KKy0KKy1TYXQgSnVsIDEzIDE4OjExOjM1IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogU3BsaXQgZ29hbC4gIE5vdyBkZXBlbmQgb24gaW5zdGFsbC1leGVjCistICAgICAgICBhbmQgaW5zdGFsbC1kYXRhLgorLQkoaW5zdGFsbC1leGVjLCBpbnN0YWxsLWRhdGEpOiBOZXcgZ29hbHMuICBDcmVhdGVkIGZyb20gZm9ybWVyCistCWluc3RhbGwgZ29hbC4KKy0JUmVwb3J0ZWQgYnkgS2FybCBCZXJyeS4KKy0KKy1TYXQgSnVuIDIyIDA0OjU4OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChNS0lOU1RBTExESVJTKTogTmV3IHZhcmlhYmxlLiAgUGF0aCB0bworLSAgICAgICAgbWtpbnN0YWxsZGlycyBzY3JpcHQuCistCShpbnN0YWxsKTogdXNlIE1LSU5TVEFMTERJUlMgdmFyaWFibGUgb3IgaWYgdGhlIHNjcmlwdCBpcyBub3QgcHJlc2VudAorLQl0cnkgdG8gZmluZCBpdCBpbiB0aGUgJHRvcF9zY3JkaXIpLgorLQorLVdlZCBKdW4gMTkgMDI6NTY6NTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmM6IExpbnV4IGxpYmMgKnBhcnRseSogaW5jbHVkZXMgdGhlIGFyZ3pfKiBmdW5jdGlvbnMuCistCUdyci4gIFdvcmsgYXJvdW5kIGJ5IHJlbmFtaW5nIHRoZSBzdGF0aWMgdmVyc2lvbiBhbmQgdXNlIG1hY3JvcworLQlmb3IgcmVuYW1pbmcuCistCistVHVlIEp1biAxOCAyMDoxMToxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYzogQ29ycmVjdCBwcmVzZW5jZSB0ZXN0IG1hY3JvcyBvZiBfX2FyZ3pfKiBmdW5jdGlvbnMuCistCistCSogbDEwbmZsaXN0LmM6IEluY2x1ZGUgPGFyZ3ouaD4gYmFzZWQgb24gdGVzdCBvZiBpdCBpbnN0ZWFkIHdoZW4KKy0JX19hcmd6XyogZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCistCVJlcG9ydGVkIGJ5IEFuZHJlYXMgU2Nod2FiLgorLQorLVRodSBKdW4gMTMgMTU6MTc6NDQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZXhwbG9kZW5hbWUuYywgbDEwbmZsaXN0LmM6IERlZmluZSBOVUxMIGZvciBkdW1iIHN5c3RlbXMuCistCistVHVlIEp1biAxMSAxNzowNToxMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluLCBsaWJnZXR0ZXh0LmggKGRjZ2V0dGV4dCk6IFJlbmFtZSBsb2NhbCB2YXJpYWJsZQorLQlyZXN1bHQgdG8gX19yZXN1bHQgdG8gcHJldmVudCBuYW1lIGNsYXNoLgorLQorLQkqIGwxMG5mbGlzdC5jLCBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYzogRGVmaW5lIF9HTlVfU09VUkNFIHRvCistICAgICAgICBnZXQgcHJvdG90eXBlIGZvciBzdHBjcHkgYW5kIHN0cmNhc2VjbXAuCistCistCSogaW50bGguaW5zdC5pbiwgbGliZ2V0dGV4dC5oOiBNb3ZlIGRlY2xhcmF0aW9uIG9mCistCWBfbmxfbXNnX2NhdF9jbnRyJyBvdXRzaWRlIF9fZXh0ZW5zaW9uX18gYmxvY2sgdG8gcHJldmVudCB3YXJuaW5nCistCWZyb20gZ2NjJ3MgLVduZXN0ZWQtZXh0ZXJuIG9wdGlvbi4KKy0KKy1GcmkgSnVuICA3IDAxOjU4OjAwIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVtb3ZlIGNvbW1lbnQuCistCistVGh1IEp1biAgNiAxNzoyODoxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFdvcmsgYXJvdW5kIGZvciBhbm90aGVyIEJ1Z2xpeCBzdHVwaWRpdHkuCistCUFsd2F5cyB1c2UgYW4gYGVsc2UnIGNsb3NlIGZvciBgaWYncy4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW50bGguaW5zdCk6IENvcnJlY3QgdHlwbyBpbiBwaG9ueSBydWxlLgorLQlSZXBvcnRlZCBieSBOZWxzb24gQmVlYmUuCistCistVGh1IEp1biAgNiAwMTo0OTo1MiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcmlhYmxlIGFsbG9jYV9saXN0IHRvCistCWJsb2NrX2xpc3QgYXMgdGhlIG1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbG9jYWxlYWxpYXMuYyBbIUhBVkVfQUxMT0NBXTogRGVmaW5lIGFsbG9jYSBhcyBtYWNybyB1c2luZworLSAgICAgICAgbWFsbG9jLgorLQkocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcnJpYWJlIGFsbG9jYV9saXN0IHRvIGJsb2NrX2xpc3QgYXMgdGhlCistCW1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbDEwbmZsaXN0LmM6IENvcnJlY3QgY29uZGl0aW9uYWwgZm9yIDxhcmd6Lmg+IGluY2x1c2lvbi4KKy0JUmVwb3J0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCistCistCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlcGVuZCBvbiBhbGwtQFVTRV9JTkNMVURFRF9MSUJJTlRMQCwgbm90CistICAgICAgICBhbGwtQFVTRV9OTFNALgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogaW50bGguaW5zdCBjb21lcyBmcm9tIGxvY2FsIGRpciwgbm90CistICAgICAgICAkKHNyY2RpcikuCistCistCSogTWFrZWZpbGUuaW4gKGludGxoLmluc3QpOiBTcGVjaWFsIGhhbmRsaW5nIG9mIHRoaXMgZ29hbC4gIElmCistCXVzZWQgaW4gZ2V0dGV4dCwgdGhpcyBpcyByZWFsbHkgYSBydWwgdG8gY29uc3RydWN0IHRoaXMgZmlsZS4gIElmCistCXVzZWQgaW4gYW55IG90aGVyIHBhY2thZ2UgaXQgaXMgZGVmaW5lZCBhcyBhIC5QSE9OWSBydWxlIHdpdGgKKy0JZW1wdHkgYm9keS4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEV4dHJhY3QgbG9jYWxlIGZpbGUgaW5mb3JtYXRpb24gaGFuZGxpbmcgaW50bworLQlsMTBuZmlsZS5jLiAgUmVuYW1lIGxvY2FsIHN0cGNweV9fIGZ1bmN0aW9uIHRvIHN0cGNweS4KKy0KKy0JKiBkY2dldHRleHQuYyAoc3RwY3B5KTogQWRkIGxvY2FsIGRlZmluaXRpb24uCistCistCSogbDEwbmZsaXN0LmM6IFNvbHZlIHNvbWUgcG9ydGFiaWxpdHkgcHJvYmxlbXMuICBQYXRjaGVzIHBhcnRseSBieQorLQlUaG9tYXMgRXNrZW4uICBBZGQgbG9jYWwgZGVmaW5pdGlvbiBvZiBzdHBjcHkuCistCistVHVlIEp1biAgNCAwMjo0Nzo0OSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBEb24ndCBkZXBlbmQgaW5jbHVkaW5nIDxsb2NhbGUuaD4gb24KKy0JSEFWRV9MT0NBTEVfSC4gIEluc3RlYWQgY29uZmlndXJlIG11c3QgcmV3cml0ZSB0aGlzIGZpaWxlCistCWRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmUgcnVuLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogbGliaW50bC5pbnN0IGlzIG5vdyBjYWxsZWQgaW50bGguaW5zdC4KKy0JQWRkIHJ1bGVzIGZvciB1cGRhdGluZyBpbnRsaC5pbnN0IGZyb20gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsaWJpbnRsLmluc3Q6IFJlbmFtZWQgdG8gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYyBbX19HTlVDX19dOiBEZWZpbmUgSEFWRV9BTExPQ0EgdG8gMQorLSAgICAgICAgYmVjYXVzZSBnY2MgaGFzIF9fYnVpdGxpbl9hbGxvY2EuCistCVJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLU1vbiBKdW4gIDMgMDA6MzI6MTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGxjaGVjayk6IE5ldyBnb2FsIHRvIGZ1bGZpbGwgbmVlZHMgb2YKKy0gICAgICAgIGF1dG9tYWtlJ3MgZGlzdGNoZWNrLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVvcmRlciBjb21tYW5kcyBzbyB0aGF0IFZFUlNJT04gaXMKKy0gICAgICAgIGZvdW5kLgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogTm93IHVzZSBzdWJkaXJlY3RvcnkgaW50bC8gaW4KKy0gICAgICAgIEBkYXRhZGlyQC9nZXR0ZXh0LgorLQkoQ09NU1JDUyk6IEFkZCBsMTBuZmlsZS5jLgorLQkoT0JKRUNUUyk6IEFkZCBsMTBuZmlsZS5vLgorLQkoRElTVEZJTEVTKTogUmVuYW1lIHRvIERJU1RGSUxFLm5vcm1hbC4gIFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoRElTVEZJTEUuZ2V0dGV4dCk6IFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoYWxsLWdldHRleHQpOiBSZW1vdmUgZ29hbC4KKy0JKGluc3RhbGwpOiBJZiAkKFBBQ0tBR0UpID0gZ2V0dGV4dCBpbnN0YWxsLCBvdGhlcndvc2UgZG8gbm90aGluZy4gIE5vCistCXBhY2thZ2UgYnV0IGdldHRleHQgaXRzZWxmIHNob3VsZCBpbnN0YWxsIGxpYmludGwuaCArIGhlYWRlcnMuCistCShkaXN0KTogRXh0ZW5kIGdvYWwgdG8gd29yayBmb3IgZ2V0dGV4dCwgdG9vLgorLQkoZGlzdC1nZXR0ZXh0KTogUmVtb3ZlIGdvYWwuCistCistCSogZGNnZXR0ZXh0LmMgWyFIQVZFX0FMTE9DQV06IERlZmluZSBtYWNybyBhbGxvY2EgYnkgdXNpbmcgbWFsbG9jLgorLQorLVN1biBKdW4gIDIgMTc6MzM6MDYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOiBQYXJhbWV0ZXIgaXMgbm93IGNvbWVzIGZyb20KKy0gICAgICAgIGZpbmRfbDEwbmZpbGUuCistCistU2F0IEp1biAgMSAwMjoyMzowMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX19hcmd6X25leHQpOiBBZGQgZGVmaW5pdGlvbi4KKy0KKy0JKiBkY2dldHRleHQuYyBbIUhBVkVfQUxMT0NBXTogQWRkIGNvZGUgZm9yIGhhbmRsaW5nIG1pc3NpbmcgYWxsb2NhCistCWNvZGUuICBVc2UgbmV3IGwxMG5maWxlIGhhbmRsaW5nLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgWyFIQVZFX0FMTE9DQV06IEFkZCBjb2RlIGZvciBoYW5kbGluZyBtaXNzaW5nCistICAgICAgICBhbGxvY2EgY29kZS4KKy0KKy0JKiBsMTBuZmxpc3QuYzogSW5pdGlhbCByZXZpc2lvbi4KKy0KKy1UdWUgQXByICAyIDE4OjUxOjE4IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGFsbC1nZXR0ZXh0KTogTmV3IGdvYWwuICBTYW1lIGFzIGFsbC15ZXMuCistCistVGh1IE1hciAyOCAyMzowMToyMiAxOTk2ICBLYXJsIEVpY2h3YWxkZXIgIDxrZUBrZS5jZW50cmFsLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogRGVmaW5lIHVzaW5nIEBkYXRhZGlyQC4KKy0KKy1UdWUgTWFyIDI2IDEyOjM5OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jOiBJbmNsdWRlIDxjdHlwZS5oPi4gIFJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVNhdCBNYXIgMjMgMDI6MDA6MzUgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IFJlbmFtZSB0byBzdHBjcHlfXyB0byBwcmV2ZW50IGNsYXNoaW5nCistICAgICAgICB3aXRoIGV4dGVybmFsIGRlY2xhcmF0aW9uLgorLQorLVNhdCBNYXIgIDIgMDA6NDc6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsLW5vKTogUmVuYW1lIGZyb20gYWxsX25vLgorLQorLVNhdCBGZWIgMTcgMDA6MjU6NTkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIFtsb2FkZWRfZG9tYWluXTogQXJyYXkgYHN1Y2Nlc3NvcicgbXVzdCBub3cgY29udGFpbiB1cAorLSAgICAgICAgdG8gNjMgZWxlbWVudHMgKGJlY2F1c2Ugb2YgY29kZXNldCBuYW1lIG5vcm1hbGl6YXRpb24pLgorLQorLQkqIGZpbmRkb21haW4uYzogSW1wbGVtZW50IGNvZGVzZXQgbmFtZSBub3JtYWxpemF0aW9uLgorLQorLVRodSBGZWIgMTUgMDQ6Mzk6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsKTogRGVmaW5lIHRvIGBhbGwtQFVTRV9OTFNAJy4KKy0JKGFsbC15ZXMsIGFsbF9ubyk6IE5ldyBnb2Fscy4gIGBhbGwtbm8nIGlzIG5vb3AsIGBhbGwteWVzJworLQlpcyBmb3JtZXIgYWxsLgorLQorLU1vbiBKYW4gMTUgMjE6NDY6MDEgMTk5NiAgSG93YXJkIEdheWxlICA8aG93YXJkQGhhbC5jb20+CistCistCSogbG9jYWxlYWxpYXMuYyAoYWxpYXNfY29tcGFyZSk6IEluY3JlbWVudCBzdHJpbmcgcG9pbnRlcnMgaW4gbG9vcAorLSAgICAgICAgb2Ygc3RyY2FzZWNtcCByZXBsYWNlbWVudC4KKy0KKy1GcmkgRGVjIDI5IDIxOjE2OjM0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKTogV2hvIGNvbW1lbnRlZCB0aGlzIGdvYWwgb3V0ID8gOi0pCistCistRnJpIERlYyAyOSAxNTowODoxNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOiBTYXZlIGBlcnJubycuICBGYWlsaW5nIHN5c3RlbSBjYWxscworLQlzaG91bGQgbm90IGVmZmVjdCBpdCBiZWNhdXNlIGEgbWlzc2luZyBjYXRhbG9nIGlzIG5vIGVycm9yLgorLQlSZXBvcnRlZCBieSBIYXJhbGQgSzxvOj5uaWcgPGtvZW5pZ0B0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGU+LgorLQorLVR1ZSBEZWMgMTkgMjI6MDk6MTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoTWFrZWZpbGUpOiBFeHBsaWNpdGx5IHVzZSAkKFNIRUxMKSBmb3IgcnVubmluZworLSAgICAgICAgc2hlbGwgc2NyaXB0cy4KKy0KKy1GcmkgRGVjIDE1IDE3OjM0OjU5IDE5OTUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IE9ubHkgaW5zdGFsbCBsaWJyYXJ5IGFuZCBoZWFkZXIgd2hlbgorLQl3ZSB1c2UgdGhlIG93biBpbXBsZW1lbnRhdGlvbi4gIERvbid0IGRvIGl0IHdoZW4gdXNpbmcgdGhlCistCXN5c3RlbSdzIGdldHRleHQgb3IgY2F0Z2V0cyBmdW5jdGlvbnMuCistCistCSogZGNnZXR0ZXh0LmMgKGZpbmRfbXNnKTogTXVzdCBub3Qgc3dhcCBkb21haW4tPmhhc2hfc2l6ZSBoZXJlLgorLQorLVNhdCBEZWMgIDkgMTY6MjQ6MzcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBsaWJpbnRsLmluc3QsIGxpYmdldHRleHQuaCwgaGFzaC1zdHJpbmcuaCwKKy0JZ2V0dGV4dFAuaCwgZmluZGRvbWFpbi5jLCBkY2dldHRleHQuYywgY2F0LWNvbXBhdC5jOgorLQlVc2UgUEFSQU1TIGluc3RlYWQgb2YgX19QLiAgU3VnZ2VzdGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBEZWMgIDUgMTE6Mzk6MTQgMTk5NSAgTGFycnkgU2Nod2ltbWVyICA8cm9zZWJ1ZEBjeWNsb25lLnN0YW5mb3JkLmVkdT4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFVzZSBgI2lmICFkZWZpbmVkIChfTElCSU5UTF9IKScgaW5zdGVhZCBvZiBgI2lmCistCSFfTElCSU5UTF9IJyBiZWNhdXNlIFNvbGFyaXMgZGVmaW5lcyBfTElCSU5UTF9IIGFzIGVtcHR5LgorLQorLU1vbiBEZWMgIDQgMTU6NDI6MDcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOgorLQlJbnN0YWxsIGxpYmludGwuaW5zdCBpbnN0ZWFkIG9mIGxpYmludGwuaC5pbnN0YWxsLgorLQorLVNhdCBEZWMgIDIgMjI6NTE6MzggMTk5NSAgTWFyY3VzIERhbmllbHMgIDxtYXJjdXNAc3lzYy5wZHguZWR1PgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6CistCVJldmVyc2Ugb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXJlIHRyaWVkIHlvdSBsb2FkLiAgRmlyc3QKKy0JdHJ5IGxvY2FsIGZpbGUsIHdoZW4gdGhpcyBmYWlsZWQgYWJzb2x1dGUgcGF0aC4KKy0KKy1XZWQgTm92IDI5IDAyOjAzOjUzIDE5OTUgIE5lbHNvbiBILiBGLiBCZWViZSAgPGJlZWJlQG1hdGgudXRhaC5lZHU+CistCistCSogY2F0LWNvbXBhdC5jIChiaW5kdGV4dGRvbWFpbik6IEFkZCBtaXNzaW5nIHsgfS4KKy0KKy1TdW4gTm92IDI2IDE4OjIxOjQxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliaW50bC5pbnN0OiBBZGQgbWlzc2luZyBfX1AgZGVmaW5pdGlvbi4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JQWRkIGR1bW15IGBhbGwnIGFuZCBgZHZpJyBnb2Fscy4gIFJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistU2F0IE5vdiAyNSAxNjoxMjowMSAxOTk1ICBGcmFuYyxvaXMgUGluYXJkICA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+CistCistCSogaGFzaC1zdHJpbmcuaDogQ2FwaXRhbGl6ZSBhcmd1bWVudHMgb2YgbWFjcm9zLgorLQorLVNhdCBOb3YgMjUgMTI6MDE6MzYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogUHJldmVudCBmaWxlcyBuYW1lcyBsb25nZXIgdGhhbiAxMworLQljaGFyYWN0ZXJzLiAgbGliaW50bC5oLmdsaWJjLT5saWJpbnRsLmdsaWJjLAorLQlsaWJpbnRsLmguaW5zdGFsbC0+bGliaW50bC5pbnN0LiAgUmVwb3J0ZWQgYnkgSm9zaHVhIFIuIFBvdWxzb24uCistCistU2F0IE5vdiAyNSAxMTozMToxMiAxOTk1ICBFcmljIEJhY2t1cyAgPGVyaWNiQGxzaWQuaHAuY29tPgorLQorLQkqIGRjZ2V0dGV4dC5jOiBGaXggYnVnIGluIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMuCistCistU2F0IE5vdiAyNSAwMjozNToyNyAxOTk1ICBOZWxzb24gSC4gRi4gQmVlYmUgIDxiZWViZUBtYXRoLnV0YWguZWR1PgorLQorLQkqIGxpYmdldHRleHQuaDogU29sYXJpcyBjYyBkb2VzIG5vdCB1bmRlcnN0YW5kCistCSAjaWYgIVNZTUJPTDEgJiYgIVNZTUJPTDIuICBTYWQJYnV0IHRydWUuCistCistVGh1IE5vdiAyMyAxNjoyMjoxNCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGhhc2gtc3RyaW5nLmggKGhhc2hfc3RyaW5nKToKKy0JRml4IGZvciBtYWNoaW5lIHdpdGggPjMyIGJpdCBgdW5zaWduZWQgbG9uZydzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOgorLQlGaXggaG9ycmlibGUgYnVnIGluIGxvb3AgZm9yIGFsdGVybmF0aXZlIHRyYW5zbGF0aW9uLgorLQorLVRodSBOb3YgMjMgMDE6NDU6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluLCBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOgorLQlTb21lIGZ1cnRoZXIgc2ltcGxpZmljYXRpb25zIGluIG1lc3NhZ2UgbnVtYmVyIGdlbmVyYXRpb24uCistCistTW9uIE5vdiAyMCAyMTowODo0MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmludGwuaC5nbGliYzogVXNlIF9fY29uc3QgaW5zdGVhZCBvZiBjb25zdCBpbiBwcm90b3R5cGVzLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6CistCUluc3RhbGwgbGliaW50bC5oLmluc3RhbGwgaW5zdGVhZCBvZiBsaWJpbnRsLmguICBUaGlzCistCWlzIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uLiAgU3VnZ2VzdGVkIGJ5IFBldGVyIE1pbGxlci4KKy0KKy0JKiBsaWJpbnRsLmguaW5zdGFsbCwgbGliaW50bC5oLmdsaWJjOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKF9ubF9leHBhbmRfYWxpYXMsIHJlYWRfYWxpYXNfZmlsZSk6CistCVByb3RlY3QgcHJvdG90eXBlcyBpbiB0eXBlIGNhc3RzIGJ5IF9fUC4KKy0KKy1UdWUgTm92IDE0IDE2OjQzOjU4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogaGFzaC1zdHJpbmcuaDogQ29ycmVjdCBwcm90b3R5cGUgZm9yIGhhc2hfc3RyaW5nLgorLQorLVN1biBOb3YgMTIgMTI6NDI6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6IEFkZCBwcm90b3R5cGUuCistCistCSogZ2V0dGV4dFAuaDogRml4IGNvcHlyaWdodC4KKy0JKFNXQVApOiBBZGQgcHJvdG90eXBlLgorLQorLVdlZCBOb3YgIDggMjI6NTY6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOiBGb3Jnb3Qgc2l6ZW9mLgorLQlBdm9pZCBjYWxsaW5nICpwcmludGYgZnVuY3Rpb24uICBUaGlzIGludHJvZHVjZXMgYSBiaWcgb3ZlcmhlYWQuCistCVBhdGNoIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBOb3YgIDcgMTQ6MjE6MDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMsIGNhdC1jb21wYXQuYzogV3JvbmcgaW5kZW50YXRpb24gaW4gI2lmIGZvciBzdHBjcHkuCistCistCSogZmluZGRvbWFpbi5jIChzdHBjcHkpOgorLQlEZWZpbmUgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGxvY2FsLiAgVGhlIG1hY3JvIHdhcyB0byBmbGFreS4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEZpeCB0eXBvLgorLQorLQkqIHhvcGVuLW1zZy5zZWQsIGxpbnV4LW1zZy5zZWQ6CistCVdoaWxlIGJyaW5naW5nIG1lc3NhZ2UgbnVtYmVyIHRvIHJpZ2h0IHBsYWNlIG9ubHkgYWNjZXB0IGRpZ2l0cy4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBOb3cgdGhhdCB0aGUgY291bnRlciBkb2VzIG5vdCBoYXZlCistCWxlYWRpbmcgMHMgd2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgdGhlbS4gIFJlcG9ydGVkIGJ5IE1hcmN1cworLQlEYW5pZWxzLgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOiBVc2UgJCh0b3Bfc3JkaXIpIGluCistCWRlcGVuZGVuY3kuICBSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IChzdHBjcHkpIFshX0xJQkMgJiYgIUhBVkVfU1RQQ1BZXTogRGVmaW5lIHJlcGxhY2VtZW50LgorLQlHZW5lcmFsbHkgY2xlYW51cCB1c2luZyAjaWYgaW5zdGVhZCBvZiAjaWZuZGVmLgorLQorLQkqIE1ha2VmaWxlLmluOiBDb3JyZWN0IHR5cG9zIGluIGNvbW1lbnQuICBCeSBGcmFuYyxvaXMgUGluYXJkLgorLQorLU1vbiBOb3YgIDYgMDA6Mjc6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOiBEb24ndCBpbnN0YWxsIGxpYmludGwuaCBhbmQgbGliaW50bC5hCistCWlmIHdlIHVzZSBhbiBhdmFpbGFibGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4KKy0KKy1TdW4gTm92ICA1IDIyOjAyOjA4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliZ2V0dGV4dC5oOiBGaXggdHlwbzogSEFWRV9DQVRHRVRUUyAtPiBIQVZFX0NBVEdFVFMuICBSZXBvcnRlZAorLQlieSBGcmFuYyxvaXMgUGluYXJkLgorLQorLQkqIGxpYmdldHRleHQuaDogVXNlICNpZiBpbnN0ZWFkIG9mICNpZmRlZi8jaWZuZGVmLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JQ29tbWVudHMgZGVzY3JpYmluZyB3aGF0IGhhcyB0byBiZSBkb25lIHNob3VsZCBzdGFydCB3aXRoIEZJWE1FLgorLQorLVN1biBOb3YgIDUgMTk6Mzg6MDEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogU3BsaXQuICBVc2UgRElTVEZJTEVTIHdpdGggbm9ybWFsIG1lYW5pbmcuCistCURJU1RGSUxFUy5jb21tb24gbmFtZXMgdGhlIGZpbGVzIGNvbW1vbiB0byBib3RoIGRpc3QgZ29hbHMuCistCURJU1RGSUxFUy5nZXR0ZXh0IGFyZSB0aGUgZmlsZXMgb25seSBkaXN0cmlidXRlZCBpbiBHTlUgZ2V0dGV4dC4KKy0KKy1TdW4gTm92ICA1IDE3OjMyOjU0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IENvcnJlY3Qgc2VhcmNoaW5nIGluIGRlcml2ZWQgbG9jYWxlcy4KKy0JVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIGEgY2hhbmdlIGluIF9ubF9maW5kX21zZyBzZXZlcmFsIHdlZWtzCistCWFnby4gIEkgcmVhbGx5IGRvbid0IGtub3cgdGhpcyBpcyBzdGlsbCBub3QgZml4ZWQuCistCistU3VuIE5vdiAgNSAxMjo0MzoxMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKTogVGVzdCBmb3IgRklMRU5BTUUgPT0gTlVMTC4gIFRoaXMKKy0JbWlnaHQgbWFyayBhIHNwZWNpYWwgY29uZGl0aW9uLgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOiBEb24ndCBtYWtlIGlsbGVnYWwgZW50cnkgYXMgZGVjaWRlZC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZGlzdCk6IFN1cHByZXNzIGVycm9yIG1lc3NhZ2Ugd2hlbiBsbiBmYWlsZWQuCistCUdldCBmaWxlcyBmcm9tICQoc3JjZGlyKSBleHBsaWNpdGx5LgorLQorLQkqIGxpYmdldHRleHQuaCAoZ2V0dGV4dF9jb25zdCk6IFJlbmFtZSB0byBnZXR0ZXh0X25vb3AuCistCistRnJpIE5vdiAgMyAwNzozNjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOgorLQlQcm90ZWN0IGFnYWluc3Qgd3JvbmcgbG9jYWxlIG5hbWVzIGJ5IHRlc3RpbmcgbWFzay4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKGdldHRleHRfY29uc3QpOiBBZGQgbWFjcm8gZGVmaW5pdGlvbi4KKy0JQ2FwaXRhbGl6ZSBtYWNybyBhcmd1bWVudHMuCistCistVGh1IE5vdiAgMiAyMzoxNTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JVGVzdCBmb3IgcG9pbnRlciAhPSBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgdmFsdWUuCistCVJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistCSogZ2V0dGV4dC5jIChOVUxMKToKKy0JRGVmaW5lIGFzICh2b2lkKikwIGluc3RhZCBvZiAwLiAgUmVwb3J0ZWQgYnkgRnJhbmMsb2lzIFBpbmFyZC4KKy0KKy1Nb24gT2N0IDMwIDIxOjI4OjUyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogcG8ydGJsLnNlZC5pbjogU2VyaW91cyB0eXBvIGJ1ZyBmaXhlZCBieSBKaW0gTWV5ZXJpbmcuCistCistU2F0IE9jdCAyOCAyMzoyMDo0NyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmdldHRleHQuaDogRGlzYWJsZSBkY2dldHRleHQgb3B0aW1pemF0aW9uIGZvciBTb2xhcmlzIDIuMy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChhbGlhc19jb21wYXJlKToKKy0JUGV0ZXIgTWlsbGVyIHJlcG9ydGVkIHRoYXQgdG9sb3dlciBpbiBzb21lIHN5c3RlbXMgaXMKKy0JZXZlbiBkdW1iZXIgdGhhbiBJIHRob3VnaHQuICBQcm90ZWN0IGNhbGwgYnkgYGlzdXBwZXInLgorLQorLUZyaSBPY3QgMjcgMjI6MjI6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyLCBpbmNsdWRlZGlyKTogTmV3IHZhcmlhYmxlcy4KKy0JKGluc3RhbGwtc3JjKTogSW5zdGFsbCBsaWJpbnRsLmEgYW5kIGxpYmludGwuaCBpbiBjb3JyZWN0IGRpcnMuCistCistRnJpIE9jdCAyNyAyMjowNzoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogRml4IHR5cG86IGludHJsLmNvbXBhdC5jIC0+IGludGwtY29tcGF0LmMuCistCistCSogcG8ydGJsLnNlZC5pbjogUGF0Y2ggZm9yIGJ1Z2d5IFNFRHMgYnkgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMuCistCistCSogbG9jYWxlYWxpYXMuYzoKKy0JRml4IHR5cG8gYW5kIHN1cGVyZmxvdXMgdGVzdC4gIFJlcG9ydGVkIGJ5IENocmlzdGlhbiB2b24gUm9xdWVzLgorLQorLUZyaSBPY3QgIDYgMTE6NTI6MDUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUNvcnJlY3Qgc29tZSByZW1haW5kZXIgZnJvbSB0aGUgcHJlLUNFTiBzeW50YXguICBOb3cKKy0Jd2UgZG9uJ3QgaGF2ZSBhIGNvbnN0YW50IG51bWJlciBvZiBzdWNjZXNzb3JzIGFueW1vcmUuCistCistV2VkIFNlcCAyNyAyMTo0MToxMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBBZGQgbGliaW50bC5oLmdsaWJjLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0LWxpYmMpOiBBZGQgZ29hbCBmb3IgcGFja2luZyBzb3VyY2VzIGZvciBnbGliYy4KKy0JKENPTVNSQ1MsIENPTUhEUlMpOiBTcGxpdHRlZCB0byBzZXBhcmF0ZSBzb3VyY2VzIHNoYXJlZCB3aXRoIGdsaWJjLgorLQorLQkqIGxvYWRtc2djYXQuYzogRm9yZ2V0IHRvIGNvbnRpbnVlICNpZiBsaW5lLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6CistCVtfTElCQ106IFJlbmFtZSBzdHJjYXNlY21wIHRvIF9fc3RyY2FzZWNtcCB0byBrZWVwIEFOU0kgQyBuYW1lCistCXNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jLCBmaW5kZG9tYWluLmM6IEJldHRlciBjb21tZW50IHRvIGxhc3QgY2hhbmdlLgorLQorLQkqIGxvYWRtc2djYXQuYzoKKy0JW19MSUJDXTogUmVuYW1lIGZzdGF0LCBvcGVuLCBjbG9zZSwgcmVhZCwgbW1hcCwgYW5kIG11bm1hcCB0bworLQlfX2ZzdGF0LCBfX29wZW4sIF9fY2xvc2UsIF9fcmVhZCwgX19tbWFwLCBhbmQgX19tdW5tYXAgcmVzcAorLQl0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JW19MSUJDXTogUmVuYW1lIHN0cGNweSB0byBfX3N0cGNweSB0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlbX0xJQkNdOiBSZW5hbWUgZ2V0Y2VkIGFuZCBzdHBjcHkgdG8gX19nZXRjd2QgYW5kIF9fc3RwY3B5IHJlc3AgdG8KKy0Ja2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCUluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIHRob3NlIG9sZCBTeXNWIHN5c3RlbXMgb3V0IHRoZXJlLgorLQlSZXBvcnRlZCBieSBGcmFuY2VzY28gUG90b3J0aWAuCistCistCSogbG9hZG1zZ2NhdC5jICh1c2VfbW1hcCk6IERlZmluZSBpZiBjb21waWxlZCBmb3IgZ2xpYmMuCistCistCSogYmluZHRleHRkb20uYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEZpeCAyIHRpbWVzIGRlZmllbmQgLT4gZGVmaW5lZC4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IEluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4KKy0JY29tcGlsaW5nIGZvciBnbGliYy4gIEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMKKy0JdW5jb25kaXRpb25hbGx5IGlmIF9MSUJDIGlzIGRlZmluZWQuCistCistCSogbG9jYWxlYWxpYXMuYywgbG9hZG1zZ2NhdC5jOiBQcmVwYXJlIHRvIGJlIGNvbXBpbGVkIGluIGdsaWJjLgorLQorLQkqIGdldHRleHQuYzoKKy0JSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbiBjb21waWxpbmcgZm9yIGdsaWJjLgorLQlHZXQgTlVMTCBmcm9tIHN0ZGRlZi5oIGlmIHdlIGNvbXBpbGUgZm9yIGdsaWJjLgorLQorLQkqIGZpbmRkb21haW4uYzogSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbgorLQljb21waWxpbmcgZm9yIGdsaWJjLiAgSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkY2dldHRleHQuYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycyB1bmNvbmRpdGlvbmFsbHkKKy0JaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkZ2V0dGV4dC5jOiBJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mCistCWxpYmdldHRleHQuaC4KKy0JKGxvY2FsZS5oKTogRG9uJ3QgcmVseSBvbiBIQVZFX0xPQ0FMRV9IIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBkY2dldHRleHQuYzogSWYgY29tcGlsZWQgaW4gZ2xpYmMgaW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZgorLQlsaWJnZXR0ZXh0LmguCistCShnZXRjd2QpOiBEb24ndCByZWx5IG9uIEhBVkVfR0VUQ1dEIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOgorLQlJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mIGxpYmdldHRleHQuaC4KKy0KKy1Nb24gU2VwIDI1IDIyOjIzOjA2IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYyAoX25sX2V4cGFuZF9hbGlhcyk6IERvbid0IGNhbGwgYnNlYXJjaCBpZiBOTUFQIDw9IDAuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlTdHJpbmcgdXNlZCBpbiBwdXRlbnYgbXVzdCBub3QgYmUgcmVjeWNsZWQuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGxpYmdldHRleHQuaCAoX19VU0VfR05VX0dFVFRFWFQpOgorLQlBZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgR05VIGdldHRleHQKKy0JbGlicmFyeS4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKGJpbmR0ZXh0ZG9tYWluKToKKy0JRml4IGJ1ZyB3aXRoIHRoZSBzdHJhbmdlIHN0cGNweSByZXBsYWNlbWVudC4KKy0JUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgorLQorLVNhdCBTZXAgMjMgMDg6MjM6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEluY2x1ZGUgPHN0cmluZy5oPiBmb3Igc3RwY3B5IHByb3RvdHlwZS4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlXaGlsZSBleHBhbmQgc3RyZHVwIGNvZGUgdGVtcG9yYXJ5IHZhcmlhYmxlIGBjcCcgaGlkZWQKKy0JaGlnaGVyIGxldmVsIHZhcmlhYmxlIHdpdGggc2FtZSBuYW1lLiAgUmVuYW1lIHRvIGB0cCcuCistCistCSogdGV4dGRvbWFpbi5jICh0ZXh0ZG9tYWluKToKKy0JQXZvaWQgd2FybmluZyBieSB1c2luZyB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gc3RyZHVwIGNvZGUuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBhcHBsaWNhdGlvbicuCistCistVGh1IFNlcCAyMSAxNTo1MTo0NCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKGFsaWFzX2NvbXBhcmUpOgorLQlVc2Ugc3RyY2FzZWNtcCgpIG9ubHkgaWYgYXZhaWxhYmxlLiAgRWxzZSB1c2UKKy0JaW1wbGVtZW50YXRpb24gaW4gcGxhY2UuCistCistCSogaW50bC1jb21wYXQuYzoKKy0JV3JhcHBlciBmdW5jdGlvbnMgbm93IGNhbGwgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIF9fKi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IERlY2xhcmUgcHJvdG90eXBlcyBmb3IgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIGZvciBfXyouCistCistCSogY2F0LWNvbXBhdC5jLCBsb2FkbXNnY2F0LmM6CistCURvbid0IHVzZSB4bWFsbG9jLCB4c3RyZHVwLCBhbmQgc3RwY3B5LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydAorLQlvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCistCXN0YW5kYWxvbmUuCistCistCSogYmluZHRleHRkb20uYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JUmVuYW1lIHRvIGJpbmR0ZXh0ZG9tYWluX18gaWYgbm90IHVzZWQgaW4gR05VIEMgTGlicmFyeS4KKy0KKy0JKiBkZ2V0dGV4dC5jOgorLQlSZW5hbWUgZnVuY3Rpb24gdG8gZGdldHRleHRfXyBpZiBub3QgdXNlZCBpbiBHTlUgQyBMaWJyYXJ5LgorLQorLQkqIGdldHRleHQuYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JRnVuY3Rpb25zIG5vdyBjYWxsZWQgZ2V0dGV4dF9fIGlmIG5vdCB1c2VkIGluIEdOVSBDIExpYnJhcnkuCistCistCSogZGNnZXR0ZXh0LmMsIGxvY2FsZWFsaWFzLmMsIHRleHRkb21haW4uYywgZmluZGRvbWFpbi5jOgorLQlEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKKy0Jb2YgdGhlIHN0YW5kYXJkIGxpYmMgYW5kIHNvIHByZXZlbnQgbGliaW50bC5hIGZyb20gYmVpbmcgdXNlZAorLQlzdGFuZGFsb25lLgorLQorLVN1biBTZXAgMTcgMjM6MTQ6NDkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IENvcnJlY3Qgc29tZSBidWdzIGluIGhhbmRsaW5nIG9mIENFTiBzdGFuZGFyZAorLSAJbG9jYWxlIGRlZmluaXRpb25zLgorLQorLVRodSBTZXAgIDcgMDE6NDk6MjggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEltcGxlbWVudCBDRU4gc3ludGF4LgorLQorLQkqIGdldHRleHRQLmggKGxvYWRlZF9kb21haW4pOiBFeHRlbmQgbnVtYmVyIG9mIHN1Y2Nlc3NvcnMgdG8gMzEuCistCistU2F0IEF1ZyAxOSAxOToyNToyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBSZW1vdmUgcGF0aCB0byBYMTEgbG9jYWxlIGRpci4KKy0KKy0JKiBNYWtlZmlsZS5pbjogTWFrZSBpbnN0YWxsLXNyYyBkZXBlbmQgb24gaW5zdGFsbC4gIFRoaXMgaGVscHMKKy0gCWdldHRleHQgdG8gaW5zdGFsbCB0aGUgc291cmNlcyBhbmQgb3RoZXIgcGFja2FnZXMgY2FuIHVzZSB0aGUKKy0gCWluc3RhbGwgZ29hbC4KKy0KKy1TYXQgQXVnIDE5IDE1OjE5OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IFJlbW92ZSBzdHVmZiBpbnN0YWxsZWQgYnkgaW5zdGFsbC1zcmMuCistCistVHVlIEF1ZyAxNSAxMzoxMzo1MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIFZFUlNJT04uaW46IEluaXRpYWwgcmV2aXNpb24uCistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6CistCUFkZCBWRVJTSU9OIGZpbGUuICBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGdldHRleHQsIGJ1dAorLQlmb3Igb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhpcyBsaWJyYXJ5LgorLQorLVR1ZSBBdWcgMTUgMDY6MTY6NDQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIChfbmxfZmluZF9kb21haW4pOgorLQlOZXcgcHJvdG90eXBlIGFmdGVyIGNoYW5naW5nIHNlYXJjaCBzdHJhdGVneS4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCVdlIG5vdyB0cnkgb25seSB0byBmaW5kIGEgc3BlY2lmaWVkIGNhdGFsb2cuICBGYWxsIGJhY2sgdG8gb3RoZXIKKy0JY2F0YWxvZ3MgbGlzdGVkIGluIHRoZSBsb2NhbGUgbGlzdCBpcyBub3cgZG9uZSBpbiBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkY2dldHRleHQuYyAoX19kY2dldHRleHQpOgorLQlOb3cgd2UgcHJvdmlkZSBtZXNzYWdlIGZhbGwgYmFjayBldmVuIHRvIGRpZmZlcmVudCBsYW5ndWFnZXMuCistCUkuZS4gaWYgYSBtZXNzYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4gb25lIGxhbmd1YWdlIGFsbCB0aGUgb3RoZXIKKy0gCWluIHRoZSBsb2NhbGUgbGlzdCBhIHRyaWVkLiAgRm9ybWVybHkgZmFsbCBiYWNrIHdhcyBvbmx5IHBvc3NpYmxlCistIAl3aXRoaW4gb25lIGxhbmd1YWdlLiAgSW1wbGVtZW50ZWQgYnkgbW92aW5nIG9uZSBsb29wIGZyb20KKy0gCV9ubF9maW5kX2RvbWFpbiB0byBoZXJlLgorLQorLU1vbiBBdWcgMTQgMjM6NDU6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZ2V0dGV4dHNyY2Rpcik6CistCURpcmVjdG9yeSB3aGVyZSBzb3VyY2Ugb2YgR05VIGdldHRleHQgbGlicmFyeSBhcmUgbWFkZQorLQlhdmFpbGFibGUuCistCShJTlNUQUxMLCBJTlNUQUxMX0RBVEEpOiBQcm9ncmFtcyB1c2VkIGZvciBpbnN0YWxsaW5nIHNvdXJjZXMuCistCShnZXR0ZXh0LXNyYyk6IE5ldy4gIFJ1bGUgdG8gaW5zdGFsbCBHTlUgZ2V0dGV4dCBzb3VyY2VzIGZvciB1c2UgaW4KKy0JZ2V0dGV4dGl6ZSBzaGVsbCBzY3JpcHQuCistCistU3VuIEF1ZyAxMyAxNDo0MDo0OCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKToKKy0JVXNlIG1tYXAgZm9yIGxvYWRpbmcgb25seSB3aGVuIG11bm1hcCBmdW5jdGlvbiBpcworLQlhbHNvIGF2YWlsYWJsZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IERlcGVuZCBvbiBgYWxsJyBnb2FsLgorLQorLVdlZCBBdWcgIDkgMTE6MDQ6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlEbyBub3Qgb3ZlcndyaXRlICdcbicgd2hlbiB0ZXJtaW5hdGluZyBhbGlhcyB2YWx1ZSBzdHJpbmcuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JSGFuZGxlIGxvbmcgbGluZXMuICBJZ25vcmUgdGhlIHJlc3Qgbm90IGZpdHRpbmcgaW4KKy0JdGhlIGJ1ZmZlciBhZnRlciB0aGUgaW5pdGlhbCBgZmdldHMnIGNhbGwuCistCistV2VkIEF1ZyAgOSAwMDo1NDoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGdldHRleHRQLmggKF9ubF9sb2FkX2RvbWFpbik6CistCUFkZCBwcm90b3R5cGUsIHJlcGxhY2luZyBwcm90b3R5cGUgZm9yIF9ubF9sb2FkX21zZ19jYXQuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlSZW1vdmUgdW5uZWVkZWQgdmFyaWFibGUgZmlsZW5hbWUgYW5kIGZpbGVuYW1lX2xlbi4KKy0JKGV4cGFuZF9hbGlhcyk6IFJlbW92ZSBwcm90b3R5cGUgYmVjYXVzZSBmdW5jdGlvbnMgZG9lcyBub3QKKy0gCWV4aXN0IGFueW1vcmUuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JQ2hhbmdlIHR5cGUgb2YgZm5hbWVfbGVuIHBhcmFtZXRlciB0byBpbnQuCistCSh4bWFsbG9jKTogQWRkIHByb3RvdHlwZS4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IEJldHRlciBwcm90b3R5cGVzIGZvciB4bWFsbG9jLgorLQorLVR1ZSBBdWcgIDggMjI6MzA6MzkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUFsbG93IGFsaWFzIG5hbWUgdG8gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgZm91ciBjb21wb25lbnRzLgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBOZXcgdmFyaWFibGUuICBTZXQgdG8gcHJlbGltaW5hcnkgdmFsdWUuCistCShTT1VSQ0VTKTogQWRkIGxvY2FsZWFsaWFzLmMuCistCShPQkpFQ1RTKTogQWRkIGxvY2FsZWFsaWFzLm8uCistCistCSogZ2V0dGV4dFAuaDogQWRkIHByb3RvdHlwZSBmb3IgX25sX2V4cGFuZF9hbGlhcy4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEFsaWFzaW5nIGhhbmRsZWQgaW4gaW50bC9sb2NhbGVhbGlhcy5jLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IEFsaWFzaW5nIGZvciBsb2NhbGUgbmFtZXMuCistCistCSogYmluZHRleHRkb20uYzogQmV0dGVyIHByb3RvdHlwZXMgZm9yIHhtYWxsb2MgYW5kIHhzdHJkdXAuCistCistTW9uIEF1ZyAgNyAyMzo0Nzo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBnZXR0ZXh0LnBlcmwgaXMgbm93IGZvdW5kIGluIG1pc2MvLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlDb3JyZWN0IGltcGxlbWVudGF0aW9uLiAgZGlybmFtZSBwYXJhbWV0ZXIgd2FzIG5vdCB1c2VkLgorLQlSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBnZXR0ZXh0UC5oIChsb2FkZWRfZG9tYWluKToKKy0JTmV3IGZpZWxkcyBgc3VjY2Vzc29yJyBhbmQgYGRlY2lkZWQnIGZvciBvbywgbGF6eQorLQltZXNzYWdlIGhhbmRsaW5nIGltcGxlbWVudGF0aW9uLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlBZG9wdCBmb3Igb28sIGxhenkgbWVzc2FnZSBoYW5kbGlpbmcuCistICAJTm93IHdlIGNhbiBpbmhlcml0IHRyYW5zbGF0aW9ucyBmcm9tIGxlc3Mgc3BlY2lmaWMgbG9jYWxlcy4KKy0JKGZpbmRfbXNnKTogTmV3IGZ1bmN0aW9uLgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOgorLQlDb21wbGV0ZSByZXdyaXRlLiAgSW1wbGVtZW50IG9vLCBsYXp5IG1lc3NhZ2UgaGFuZGxpbmcgOi0pLgorLSAgCVdlIG5vdyBoYXZlIGFuIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgYExBTkdVQUdFJyB3aXRoCistIAlhIGhpZ2hlciBwcmlvcml0eSB0aGFuIExDX0FMTCBmb3IgdGhlIExDX01FU1NBR0UgbG9jYWxlLgorLSAgCUhlcmUgd2UgY2FuIHNldCBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHNwZWNpZmljYXRpb25zIGVhY2gKKy0gCW9mIHRoZSBmb3JtIGBsYW5ndWFnZVtfdGVycml0b3J5Wy5jb2Rlc2V0XV1bQG1vZGlmaWVyXScuCistCistU2F0IEF1ZyAgNSAwOTo1NTo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAodW5pc3RkLmgpOgorLQlJbmNsdWRlIHRvIGdldCBfUENfUEFUSF9NQVggZGVmaW5lZCBvbiBzeXN0ZW0gaGF2aW5nIGl0LgorLQorLUZyaSBBdWcgIDQgMjI6NDI6MDAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IEluY2x1ZGUgcHJvdG90eXBlLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0KTogUmVtb3ZlIGBjb3B5aW5nIGluc3RlYWQnIG1lc3NhZ2UuCistCistV2VkIEF1ZyAgMiAxODo1MjowMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChJRCwgVEFHUyk6IERvIG5vdCB1c2UgJF4uCistCistVHVlIEF1ZyAgMSAyMDowNzoxMSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChUQUdTLCBJRCk6IFVzZSAkXiBhcyBjb21tYW5kIGFyZ3VtZW50LgorLQkoVEFHUyk6IEdpdmUgZXRhZ3MgLW8gb3B0aW9uIHQgd3JpdGUgdG8gY3VycmVudCBkaXJlY3RvcnksCistIAlub3QgJChzcmNkaXIpLgorLQkoSUQpOiBVc2UgJChzcmNkaXIpIGluc3RlYWQgb3MgJCh0b3Bfc3JjZGlyKS9zcmMuCistCShkaXN0Y2xlYW4pOiBSZW1vdmUgSUQuCistCistU3VuIEp1bCAzMCAxMTo1MTo0NiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChnbnVsb2NhbGVkaXIpOgorLQlOZXcgdmFyaWFibGUsIGFsd2F5cyB1c2luZyBzaGFyZS8gZm9yIGRhdGEgZGlyZWN0b3J5LgorLQkoREVGUyk6IEFkZCBHTlVMT0NBTEVESVIsIHVzZWQgaW4gZmluZGRvbWFpbi5jLgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2RlZmF1bHRfZGlybmFtZSk6CistCVNldCB0byBHTlVMT0NBTEVESVIsIGJlY2F1c2UgaXQgYWx3YXlzIGhhcyB0byBwb2ludAorLQl0byB0aGUgZGlyZWN0b3J5IHdoZXJlIEdOVSBnZXR0ZXh0IExpYnJhcnkgd3JpdGVzIGl0IHRvLgorLQorLQkqIGludGwtY29tcGF0LmMgKHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKToKKy0JVW5kZWZpbmUgbWFjcm9zIGJlZm9yZSBmdW5jdGlvbiBkZWZpbml0aW9uLgorLQorLVNhdCBKdWwgMjIgMDE6MTA6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKF9MSUJJTlRMX0gpOgorLQlQcm90ZWN0IGRlZmluaXRpb24gaW4gY2FzZSB3aGVyZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYXMKKy0JbGliZ2V0dGV4dC5oIG9uIFNvbGFyaXMgbWFjaGluZXMuICBBZGQgY29tbWVudCBhYm91dCB0aGlzLgorLQorLVdlZCBKdWwgMTkgMDI6MzY6NDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jICh0ZXh0ZG9tYWluKTogQ29ycmVjdCB0eXBvLgorLQorLVdlZCBKdWwgMTkgMDE6NTE6MzUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZGNnZXR0ZXh0KTogRnVuY3Rpb24gbm93IGNhbGxlZCBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkZ2V0dGV4dC5jIChkZ2V0dGV4dCk6IE5vdyBjYWxsZWQgX19kZ2V0dGV4dCBhbmQgY2FsbHMKKy0gCV9fZGNnZXR0ZXh0LgorLQorLQkqIGdldHRleHQuYyAoZ2V0dGV4dCk6CistCUZ1bmN0aW9uIG5vdyBjYWxsZWQgX19nZXR0ZXh0IGFuZCBjYWxscyBfX2RnZXR0ZXh0LgorLQorLQkqIHRleHRkb21haW4uYyAodGV4dGRvbWFpbik6IEZ1bmN0aW9uIG5vdyBjYWxsZWQgX190ZXh0ZG9tYWluLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmMgKGJpbmR0ZXh0ZG9tYWluKTogRnVuY3Rpb24gbm93IGNhbGxlZAorLSAJX19iaW5kdGV4dGRvbWFpbi4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogQWRkIGludGwtY29tcGF0LmMuCistCShPQkpFQ1RTKTogV2UgYWx3YXlzIGNvbXBpbGUgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgZnVuY3Rpb25zLgorLSAgCU9CSkVDVFMgY29udGFpbnMgYWxsIG9iamVjdHMgYnV0IGNhdC1jb21wYXQubywgLi4vcG8vY2F0LWlmLXRibC5vLAorLSAJYW5kIGludGwtY29tcGF0Lm8uCistICAJKEdFVFRPQkpTKTogQ29udGFpbnMgbm93IG9ubHkgaW50bC1jb21wYXQuby4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCVJlLWluY2x1ZGUgcHJvdGVjdGlvbiBtYXRjaGVzIGR1YWxpc3RpYyBjaGFyYWN0ZXIgb2YgbGliZ2V0dGV4dC5oLgorLQlGb3IgYWxsIGZ1bmN0aW9ucyBpbiBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGRlZmluZSBfXyBjb3VudGVyIHBhcnQuCistCistCSogZmluZGRvbWFpbi5jIChzdHJjaHIpOiBEZWZpbmUgYXMgaW5kZXggaWYgbm90IGZvdW5kIGluIEMgbGlicmFyeS4KKy0JKF9ubF9maW5kX2RvbWFpbik6IEZvciByZWxhdGl2ZSBwYXRocyBwYXN0ZSAvIGluIGJldHdlZW4uCistCistVHVlIEp1bCAxOCAxNjozNzo0NSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOiBBZGQgaW5jbHVzaW9uIG9mIHN5cy90eXBlcy5oLgorLQorLQkqIHhvcGVuLW1zZy5zZWQ6IEZpeCBidWcgd2l0aCBgbXNnc3RyICIiJyBsaW5lcy4KKy0JQSBsaXR0bGUgYml0IGJldHRlciBjb21tZW50cy4KKy0KKy1UdWUgSnVsIDE4IDAxOjE4OjI3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW46CistCXBvLW1vZGUuZWwsIG1ha2VsaW5rcywgY29tYmluZS1zaCBhcmUgbm93IGZvdW5kIGluIC4uL21pc2MuCistCistCSogcG8tbW9kZS5lbCwgbWFrZWxpbmtzLCBjb21iaW5lLXNoLCBlbGlzcC1jb21wOgorLQlNb3ZlZCB0byAuLi9taXNjLy4KKy0KKy0JKiBsaWJnZXR0ZXh0LmgsIGdldHRleHRQLmgsIGdldHRleHQuaDogVW5pZm9ybSB0ZXN0IGZvciBfX1NURENfXy4KKy0KKy1TdW4gSnVsIDE2IDIyOjMzOjAyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKElOU1RBTEwsIElOU1RBTExfREFUQSk6IE5ldyB2YXJpYWJsZXMuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEluc3RhbGwvdW5pbnN0YWxsIC5lbGMgZmlsZS4KKy0KKy0JKiBwby1tb2RlLmVsIChJbnN0YWxsYXRpb24gY29tbWVudCk6CistCUFkZCAucG94IGFzIHBvc3NpYmxlIGV4dGVuc2lvbiBvZiAucG8gZmlsZXMuCistCistU3VuIEp1bCAxNiAxMzoyMzoyNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGVsaXNwLWNvbXA6IENvbXBsZXRlIG5ldyB2ZXJzaW9uIGJ5IEZyYW5jLG9pczogVGhpcyBkb2VzIG5vdAorLSAJZmFpbCB3aGVuIG5vdCBjb21waWxpbmcgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistCistU3VuIEp1bCAxNiAwMDoxMjoxNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOgorLQlVc2UgJChNQUtFKSBpbnN0ZWFkIG9mIG1ha2UgZm9yIHJlY3Vyc2l2ZSBtYWtlLgorLQorLQkqIE1ha2VmaWxlLmluICguZWwuZWxjKTogVXNlICQoU0hFTEwpIGluc3RlYWQgb2YgL2Jpbi9zaC4KKy0JKGluc3RhbGwtZXhlYyk6IEFkZCBtaXNzaW5nIGR1bW15IGdvYWwuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEAgaW4gbXVsdGktbGluZSBzaGVsbCBjb21tYW5kIGF0CistIAliZWdpbm5pbmcsIG5vdCBpbiBmcm9udCBvZiBlY2hvLiAgUmVwb3J0ZWQgYnkgRXJpYyBCYWNrdXMuCistCistU2F0IEp1bCAxNSAwMDoyMToyOCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgorLQlSZW5hbWUgbGliZ2V0dGV4dC5wZXJsIHRvIGdldHRleHQucGVybCB0byBmaXQgaW4gMTQgY2hhcnMKKy0JZmlsZSBzeXN0ZW1zLgorLQorLQkqIGdldHRleHQucGVybDoKKy0gCVJlbmFtZSB0byBnZXR0ZXh0LnBlcmwgdG8gZml0IGluIDE0IGNoYXJzIGZpbGUgc3lzdGVtcy4KKy0KKy1UaHUgSnVsIDEzIDIzOjE3OjIwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogY2F0LWNvbXBhdC5jOiBJZiAhU1REQ19IRUFERVJTIHRyeSB0byBpbmNsdWRlIG1hbGxvYy5oLgorLQorLVRodSBKdWwgMTMgMjA6NTU6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluOiBQcmV0dHkgcHJpbnRpbmcuCistCistCSogbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDoKKy0JQ29ycmVjdCBidWdzIHdpdGggaGFuZGxpbmcgc3Vic3RpdHV0ZSBmbGFncyBpbiBicmFuY2hlcy4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6CistCU9sZCBLJlIgY29tcGlsZXJzIGRvbid0IHVuZGVyIHN0YW5kIGB1bnNpZ25lZCBjaGFyJy4KKy0KKy0JKiBnZXR0ZXh0LmggKG5sc191aW50MzIpOgorLQlTb21lIG9sZCBLJlIgY29tcGlsZXJzIChlZyBIUCkgZG9uJ3QgdW5kZXJzdGFuZCBgdW5zaWduZWQgaW50Jy4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKG1zZ190b19jYXRfaWQpOiBEZS1BTlNJLWZ5IHByb3RvdHlwZXMuCistCistVGh1IEp1bCAxMyAwMTozNDozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChFTENGSUxFUyk6IE5ldyB2YXJpYWJsZS4KKy0JKERJU1RGSUxFUyk6IEFkZCBlbGlzcC1jb21wLgorLQlBZGQgaW1wbGljaXQgcnVsZSBmb3IgLmVsIC0+IC5lbGMgY29tcGlsYXRpb24uCistCShpbnN0YWxsLWRhdGEpOiBpbnN0YWxsICRFTENGSUxFUworLQkoY2xlYW4pOiByZW5hbWVkIHBvLXRvLXRibCBhbmQgcG8tdG8tbXNnIHRvIHBvMnRibCBhbmQgcG8ybXNnIHJlc3AuCistCistCSogZWxpc3AtY29tcDogSW5pdGlhbCByZXZpc2lvbgorLQorLVdlZCBKdWwgMTIgMTY6MTQ6NTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JY2F0LWlkLXRibC5jIGlzIG5vdyBmb3VuZCBpbiBwby8uICBUaGlzIGVuYWJsZXMgdXMgdG8gdXNlIGFuIGlkZW50aWNhbAorLQlpbnRsLyBkaXJlY3RvcnkgaW4gYWxsIHBhY2thZ2VzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChkY2dldHRleHQpOiBoYXNoaW5nIGRvZXMgbm90IHdvcmsgZm9yIHRhYmxlIHNpemUgPD0gMi4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IGZpeCB0eXBvICgjaWYgZGVmIC0+ICNpZiBkZWZpbmVkKQorLQorLVR1ZSBKdWwgMTEgMTg6NDQ6NDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoc3RhbXAtY2F0LWlkKTogdXNlIHRvcF9zcmNkaXIgdG8gYWRkcmVzcyBzb3VyY2UgZmlsZXMKKy0JKERJU1RGSUxFUyxkaXN0Y2xlYW4pOiBtb3ZlIHR1cGRhdGUucGVybCB0byBzcmMvCistCistCSogcG8tdG8tdGJsLnNlZC5pbjoKKy0JYWRkIGFkZGl0aW9uYWwganVtcCB0byBjbGVhciBjaGFuZ2UgZmxhZyB0byByZWNvZ25pemUgbXVsdGlsaW5lIHN0cmluZ3MKKy0KKy1UdWUgSnVsIDExIDAxOjMyOjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdGV4dGRvbWFpbi5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaCBhbmQgc3RyaW5nLmguCistCistCSogbG9hZG1zZ2NhdC5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaC4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFByb3RlY3QgaW5jbHVzaW9uIG9mIGxvY2FsZS5oLgorLQlBbGxvdyB1c2UgaW4gQysrIHByb2dyYW1zLgorLQlEZWZpbmUgTlVMTCBpcyBub3QgaGFwcGVuZWQgYWxyZWFkeS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogc2hpcCBwby10by10Ymwuc2VkLmluIGluc3RlYWQgb2YKKy0JcG8tdG8tdGJsLnNlZC4KKy0JKGRpc3RjbGVhbik6IHJlbW92ZSBwby10by10Ymwuc2VkIGFuZCB0dXBkYXRlLnBlcmwuCistCistCSogdHVwZGF0ZS5wZXJsLmluOiBTdWJzdGl0dXRlIFBlcmwgcGF0aCBldmVuIGluIGV4ZWMgbGluZS4KKy0JRG9uJ3QgaW5jbHVkZSBlbnRyaWVzIHdpdGhvdXQgdHJhbnNsYXRpb24gZnJvbSBvbGQgLnBvIGZpbGUuCistCistVHVlIEp1bCAgNCAwMDo0MTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHR1cGRhdGUucGVybC5pbjogdXNlICJVcGRhdGVkOiAiIGluIG1zZ2lkICIiLgorLQorLQkqIGNhdC1jb21wYXQuYzogRml4IHR5cG8gKExPQ0FMRElSIC0+IExPQ0FMRURJUikuCistIAlEZWZpbmUgZ2V0ZW52IGlmICFfX1NURENfXy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOiBQcm90ZWN0IHN0ZGxpYi5oIGFuZCBzdHJpbmcuaCBpbmNsdXNpb24uCistIAlEZWZpbmUgZnJlZSBpZiAhX19TVERDX18uCistCistCSogZmluZGRvbWFpbi5jOiBDaGFuZ2UgREVGX01TR19ET01fRElSIHRvIExPQ0FMRURJUi4KKy0gCURlZmluZSBmcmVlIGlmICFfX1NURENfXy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IENoYW5nZSBERUZfTVNHX0RPTV9ESVIgdG8gTE9DQUxFRElSLgorLQorLU1vbiBKdWwgIDMgMjM6NTY6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogVXNlIExPQ0FMRURJUiBpbnN0ZWFkIG9mIERFRl9NU0dfRE9NX0RJUi4KKy0JUmVtb3ZlIHVubmVlZGVkICQoc3JjZGlyKSBmcm9tIE1ha2VmaWxlLmluIGRlcGVuZGVuY3kuCistCistCSogbWFrZWxpbmtzOiBBZGQgY29weXJpZ2h0IGFuZCBzaG9ydCBkZXNjcmlwdGlvbi4KKy0KKy0JKiBwby1tb2RlLmVsOiBMYXN0IHZlcnNpb24gZm9yIDAuNy4KKy0KKy0JKiB0dXBkYXRlLnBlcmwuaW46IEZpeCBkaWUgbWVzc2FnZS4KKy0KKy0JKiBkY2dldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0cmluZy5oLgorLQorLQkqIGdldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0ZGxpYi5oIGFuZCBmdXJ0aGVyIHRyaWVzIHRvIGdldCBOVUxMLgorLQorLQkqIGZpbmRkb21haW4uYzogU29tZSBjb3JyZWN0aW9ucyBpbiBpbmNsdWRlcy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoSU5DTFVERVMpOiBQcnVuZSBsaXN0IGNvcnJlY3QgcGF0aCB0byBNYWtlZmlsZS5pbi4KKy0KKy0JKiBwby10by10Ymwuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy1TdW4gSnVsICAyIDIzOjU1OjAzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdHVwZGF0ZS5wZXJsLmluOiBDb21wbGV0ZSByZXdyaXRlIGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgorKzIwMDQtMDEtMjkgIEdOVSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorIAorLVN1biBKdWwgIDIgMDI6MDY6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKysJKiBWZXJzaW9uIDAuMTQuMSByZWxlYXNlZC4KKyAKKy0JKiBGaXJzdCBvZmZpY2lhbCByZWxlYXNlLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBjb2RlCistCW5lZWRlZCB0byBpbnRlcm5hdGlvbmFsaXplIG93biBwYWNrYWdlcy4gIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucworLQl3aGljaCBhbGxvdyB0byB1c2UgdGhlIFgvT3BlbiBjYXRnZXRzIGZ1bmN0aW9uIHdpdGggYW4gaW50ZXJmYWNlCistCWxpa2UgdGhlIFVuaWZvcnVtIGdldHRleHQgZnVuY3Rpb24uICBGb3Igc3lzdGVtIHdoaWNoIGRvZXMgbm90CistCWhhdmUgbmVpdGhlciBvZiB0aG9zZSBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2NvbmZpZy5jaGFyc2V0CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NvbmZpZy5jaGFyc2V0CTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU0NzQ4MjQwIC0wNDAwCitAQCAtMCwwICsxLDYwOCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMuCisrIworKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBUaGUgdGFibGUgY29uc2lzdHMgb2YgbGluZXMgb2YgdGhlIGZvcm0KKysjICAgIEFMSUFTICBDQU5PTklDQUwKKysjCisrIyBBTElBUyBpcyB0aGUgKHN5c3RlbSBkZXBlbmRlbnQpIHJlc3VsdCBvZiAibmxfbGFuZ2luZm8gKENPREVTRVQpIi4KKysjIEFMSUFTIGlzIGNvbXBhcmVkIGluIGEgY2FzZSBzZW5zaXRpdmUgd2F5LgorKyMKKysjIENBTk9OSUNBTCBpcyB0aGUgR05VIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIGNoYXJhY3RlciBlbmNvZGluZy4KKysjIEl0IG11c3QgYmUgYW4gZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IGxpYmljb252LiBTdXBwb3J0IGJ5IEdOVSBsaWJjIGlzCisrIyBhbHNvIGRlc2lyYWJsZS4gQ0FOT05JQ0FMIGlzIGNhc2UgaW5zZW5zaXRpdmUuIFVzdWFsbHkgYW4gdXBwZXIgY2FzZQorKyMgTUlNRSBjaGFyc2V0IG5hbWUgaXMgcHJlZmVycmVkLgorKyMgVGhlIGN1cnJlbnQgbGlzdCBvZiBHTlUgY2Fub25pY2FsIGNoYXJzZXQgbmFtZXMgaXMgYXMgZm9sbG93cy4KKysjCisrIyAgICAgICBuYW1lICAgICAgICAgICAgICBNSU1FPyAgICAgICAgICAgICB1c2VkIGJ5IHdoaWNoIHN5c3RlbXMKKysjICAgQVNDSUksIEFOU0lfWDMuNC0xOTY4ICAgICAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMyAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMKKysjICAgSVNPLTg4NTktNCAgICAgICAgICAgICAgWSAgIG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTUgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTYgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBzb2xhcmlzCisrIyAgIElTTy04ODU5LTcgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisrIyAgIElTTy04ODU5LTggICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS05ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS0xMyAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgSVNPLTg4NTktMTQgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIElTTy04ODU5LTE1ICAgICAgICAgICAgICAgICBnbGliYyBhaXggb3NmIHNvbGFyaXMgZnJlZWJzZAorKyMgICBLT0k4LVIgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBLT0k4LVUgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgZnJlZWJzZCBkYXJ3aW4KKysjICAgS09JOC1UICAgICAgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIENQNDM3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A3NzUgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1MCAgICAgICAgICAgICAgICAgICAgICAgYWl4IG9zZiBkb3MKKysjICAgQ1A4NTIgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODU2ICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A4NTcgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2MSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODYyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjQgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODY2ICAgICAgICAgICAgICAgICAgICAgICBmcmVlYnNkIGRhcndpbiBkb3MKKysjICAgQ1A4NjkgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQOTIyICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A5MzIgICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMiBkb3MKKysjICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDk0OSAgICAgICAgICAgICAgICAgICAgICAgb3NmIHdvZTMyIGRvcworKyMgICBDUDk1MCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMTI0ICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDExMjUgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMjUwICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIENQMTI1MSAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzIGRhcndpbiB3b2UzMgorKyMgICBDUDEyNTIgICAgICAgICAgICAgICAgICAgICAgYWl4IHdvZTMyCisrIyAgIENQMTI1MyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTQgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgQ1AxMjU1ICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHdvZTMyCisrIyAgIENQMTI1NiAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTcgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgR0IyMzEyICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtSlAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtS1IgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtVFcgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBCSUc1ICAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgQklHNS1IS1NDUyAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKysjICAgR0IxODAzMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgU0hJRlRfSklTICAgICAgICAgICAgICAgWSAgIGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSk9IQUIgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgd29lMzIKKysjICAgVElTLTYyMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCisrIyAgIFZJU0NJSSAgICAgICAgICAgICAgICAgIFkgICBnbGliYworKyMgICBUQ1ZONTcxMi0xICAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgR0VPUkdJQU4tUFMgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIEhQLVJPTUFOOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUFSQUJJQzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUdSRUVLOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUhFQlJFVzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLVRVUktJU0g4ICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUtBTkE4ICAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIERFQy1LQU5KSSAgICAgICAgICAgICAgICAgICBvc2YKKysjICAgREVDLUhBTllVICAgICAgICAgICAgICAgICAgIG9zZgorKyMgICBVVEYtOCAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKysjCisrIyBOb3RlOiBOYW1lcyB3aGljaCBhcmUgbm90IG1hcmtlZCBhcyBiZWluZyBhIE1JTUUgbmFtZSBzaG91bGQgbm90IGJlIHVzZWQgaW4KKysjIEludGVybmV0IHByb3RvY29scyBmb3IgaW5mb3JtYXRpb24gaW50ZXJjaGFuZ2UgKG1haWwsIG5ld3MsIGV0Yy4pLgorKyMKKysjIE5vdGU6IEFTQ0lJIGFuZCBBTlNJX1gzLjQtMTk2OCBhcmUgc3lub255bW91cyBjYW5vbmljYWwgbmFtZXMuIEFwcGxpY2F0aW9ucworKyMgbXVzdCB1bmRlcnN0YW5kIGJvdGggbmFtZXMgYW5kIHRyZWF0IHRoZW0gYXMgZXF1aXZhbGVudC4KKysjCisrIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKysjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisrIyBvcgorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisrCisraG9zdD0iJDEiCisrb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAtZSAncy9eW14tXSotW14tXSotXCguKlwpJC9cMS8nYAorK2VjaG8gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMsIgorK2VjaG8gIiMgc3VpdGFibGUgZm9yIG9wZXJhdGluZyBzeXN0ZW0gJyR7b3N9Jy4iCisrZWNobyAiIyBJdCB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb25maWcuY2hhcnNldC4iCisrIyBMaXN0IG9mIHJlZmVyZW5jZXMsIHVwZGF0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbjoKKytlY2hvICIjIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogIgorK2Nhc2UgIiRvcyIgaW4KKysgICAgbGludXgtZ251bGliYzEqKQorKwkjIExpbnV4IGxpYmM1IGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiQyBBU0NJSSIKKysJZWNobyAiUE9TSVggQVNDSUkiCisrCWZvciBsIGluIGFmIGFmX1pBIGNhIGNhX0VTIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIFwKKysJICAgICAgICAgZW4gZW5fQVUgZW5fQlcgZW5fQ0EgZW5fREsgZW5fR0IgZW5fSUUgZW5fTlogZW5fVVMgZW5fWkEgXAorKwkgICAgICAgICBlbl9aVyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19ETyBlc19FQyBlc19FUyBlc19HVCBcCisrCSAgICAgICAgIGVzX0hOIGVzX01YIGVzX1BBIGVzX1BFIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IFwKKysJICAgICAgICAgZXRfRUUgZXUgZXVfRVMgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgXAorKwkgICAgICAgICBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBpZCBpZF9JRCBpbiBpbl9JRCBpcyBpc19JUyBpdCBpdF9DSCBcCisrCSAgICAgICAgIGl0X0lUIGtsIGtsX0dMIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIHB0IHB0X0JSIHB0X1BUIHN2IFwKKysJICAgICAgICAgc3ZfRkkgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5pc28tODg1OS0xIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTUgSVNPLTg4NTktMTUiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTVAZXVybyBJU08tODg1OS0xNSIKKysJICBlY2hvICIkbEBldXJvIElTTy04ODU5LTE1IgorKwkgIGVjaG8gIiRsLmNwLTQzNyBDUDQzNyIKKysJICBlY2hvICIkbC5jcC04NTAgQ1A4NTAiCisrCSAgZWNobyAiJGwuY3AtMTI1MiBDUDEyNTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MkBldXJvIENQMTI1MiIKKysJICAjZWNobyAiJGwuYXRhcmktc3QgQVRBUkktU1QiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gY3MgY3NfQ1ogaHIgaHJfSFIgaHUgaHVfSFUgcGwgcGxfUEwgcm8gcm9fUk8gc2sgc2tfU0sgc2wgXAorKwkgICAgICAgICBzbF9TSSBzciBzcl9DUyBzcl9ZVTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS0yIgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTIgSVNPLTg4NTktMiIKKysJICBlY2hvICIkbC5jcC04NTIgQ1A4NTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MCBDUDEyNTAiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gbWsgbWtfTUsgcnUgcnVfUlU7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5pc28tODg1OS01IElTTy04ODU5LTUiCisrCSAgZWNobyAiJGwua29pOC1yIEtPSTgtUiIKKysJICBlY2hvICIkbC5jcC04NjYgQ1A4NjYiCisrCSAgZWNobyAiJGwuY3AtMTI1MSBDUDEyNTEiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gYXIgYXJfU0E7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNiIKKysJICBlY2hvICIkbC5pc28tODg1OS02IElTTy04ODU5LTYiCisrCSAgZWNobyAiJGwuY3AtODY0IENQODY0IgorKwkgICNlY2hvICIkbC5jcC04NjggQ1A4NjgiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLmNwLTEyNTYgQ1AxMjU2IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGVsIGVsX0dSIGdyIGdyX0dSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTciCisrCSAgZWNobyAiJGwuaXNvLTg4NTktNyBJU08tODg1OS03IgorKwkgIGVjaG8gIiRsLmNwLTg2OSBDUDg2OSIKKysJICBlY2hvICIkbC5jcC0xMjUzIENQMTI1MyIKKysJICBlY2hvICIkbC5jcC0xMjUzQGV1cm8gQ1AxMjUzIgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gaGUgaGVfSUwgaXcgaXdfSUw7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktOCIKKysJICBlY2hvICIkbC5pc28tODg1OS04IElTTy04ODU5LTgiCisrCSAgZWNobyAiJGwuY3AtODYyIENQODYyIgorKwkgIGVjaG8gIiRsLmNwLTEyNTUgQ1AxMjU1IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIHRyIHRyX1RSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTkiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktOSBJU08tODg1OS05IgorKwkgIGVjaG8gIiRsLmNwLTg1NyBDUDg1NyIKKysJICBlY2hvICIkbC5jcC0xMjU0IENQMTI1NCIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBsdCBsdF9MVCBsdiBsdl9MVjsgZG8KKysJICAjZWNobyAiJGwgQkFMVElDIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKysJICBlY2hvICIkbCBJU08tODg1OS0xMyIKKysJZG9uZQorKwlmb3IgbCBpbiBydV9VQSB1ayB1a19VQTsgZG8KKysJICBlY2hvICIkbCBLT0k4LVUiCisrCWRvbmUKKysJZm9yIGwgaW4gemggemhfQ047IGRvCisrCSAgI2VjaG8gIiRsIEdCXzIzMTItODAiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorKwkgIGVjaG8gIiRsIEdCMjMxMiIKKysJZG9uZQorKwlmb3IgbCBpbiBqYSBqYV9KUCBqYV9KUC5FVUM7IGRvCisrCSAgZWNobyAiJGwgRVVDLUpQIgorKwlkb25lCisrCWZvciBsIGluIGtvIGtvX0tSOyBkbworKwkgIGVjaG8gIiRsIEVVQy1LUiIKKysJZG9uZQorKwlmb3IgbCBpbiB0aCB0aF9USDsgZG8KKysJICBlY2hvICIkbCBUSVMtNjIwIgorKwlkb25lCisrCWZvciBsIGluIGZhIGZhX0lSOyBkbworKwkgICNlY2hvICIkbCBJU0lSSS0zMzQyIiAjIGEgYnJva2VuIGVuY29kaW5nCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJOzsKKysgICAgbGludXgqIHwgKi1nbnUqKQorKwkjIFdpdGggZ2xpYmMtMi4xIG9yIG5ld2VyLCB3ZSBkb24ndCBuZWVkIGFueSBjYW5vbmljYWxpemF0aW9uLAorKwkjIGJlY2F1c2UgZ2xpYmMgaGFzIGljb252IGFuZCBib3RoIGdsaWJjIGFuZCBsaWJpY29udiBzdXBwb3J0IGFsbAorKwkjIEdOVSBjYW5vbmljYWwgbmFtZXMgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIE1ha2VmaWxlIGRvZXMgbm90CisrCSMgbmVlZCB0byBpbnN0YWxsIHRoZSBhbGlhcyBmaWxlIGF0IGFsbC4KKysJIyBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSB0byBnbGliYy0yLjAueCBhbmQgb2xkZXIgbGliY3MuCisrCWVjaG8gIklTT182NDYuSVJWOjE5ODMgQVNDSUkiCisrCTs7CisrICAgIGFpeCopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJJQk0tODUwIENQODUwIgorKwllY2hvICJJQk0tODU2IENQODU2IgorKwllY2hvICJJQk0tOTIxIElTTy04ODU5LTEzIgorKwllY2hvICJJQk0tOTIyIENQOTIyIgorKwllY2hvICJJQk0tOTMyIENQOTMyIgorKwllY2hvICJJQk0tOTQzIENQOTQzIgorKwllY2hvICJJQk0tMTA0NiBDUDEwNDYiCisrCWVjaG8gIklCTS0xMTI0IENQMTEyNCIKKysJZWNobyAiSUJNLTExMjkgQ1AxMTI5IgorKwllY2hvICJJQk0tMTI1MiBDUDEyNTIiCisrCWVjaG8gIklCTS1ldWNDTiBHQjIzMTIiCisrCWVjaG8gIklCTS1ldWNKUCBFVUMtSlAiCisrCWVjaG8gIklCTS1ldWNLUiBFVUMtS1IiCisrCWVjaG8gIklCTS1ldWNUVyBFVUMtVFciCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiVElTLTYyMCBUSVMtNjIwIgorKwllY2hvICJVVEYtOCBVVEYtOCIKKysJOzsKKysgICAgaHB1eCopCisrCWVjaG8gImlzbzg4NTkxIElTTy04ODU5LTEiCisrCWVjaG8gImlzbzg4NTkyIElTTy04ODU5LTIiCisrCWVjaG8gImlzbzg4NTk1IElTTy04ODU5LTUiCisrCWVjaG8gImlzbzg4NTk2IElTTy04ODU5LTYiCisrCWVjaG8gImlzbzg4NTk3IElTTy04ODU5LTciCisrCWVjaG8gImlzbzg4NTk4IElTTy04ODU5LTgiCisrCWVjaG8gImlzbzg4NTk5IElTTy04ODU5LTkiCisrCWVjaG8gImlzbzg4NTkxNSBJU08tODg1OS0xNSIKKysJZWNobyAicm9tYW44IEhQLVJPTUFOOCIKKysJZWNobyAiYXJhYmljOCBIUC1BUkFCSUM4IgorKwllY2hvICJncmVlazggSFAtR1JFRUs4IgorKwllY2hvICJoZWJyZXc4IEhQLUhFQlJFVzgiCisrCWVjaG8gInR1cmtpc2g4IEhQLVRVUktJU0g4IgorKwllY2hvICJrYW5hOCBIUC1LQU5BOCIKKysJZWNobyAidGlzNjIwIFRJUy02MjAiCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJldWNLUiBFVUMtS1IiCisrCWVjaG8gImV1Y1RXIEVVQy1UVyIKKysJZWNobyAiaHAxNUNOIEdCMjMxMiIKKysJI2VjaG8gImNjZGMgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwllY2hvICJ1dGY4IFVURi04IgorKwk7OworKyAgICBpcml4KikKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJldWNDTiBHQjIzMTIiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiZXVjS1IgRVVDLUtSIgorKwllY2hvICJldWNUVyBFVUMtVFciCisrCTs7CisrICAgIG9zZiopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJjcDg1MCBDUDg1MCIKKysJZWNobyAiYmlnNSBCSUc1IgorKwllY2hvICJkZWNoYW55dSBERUMtSEFOWVUiCisrCWVjaG8gImRlY2hhbnppIEdCMjMxMiIKKysJZWNobyAiZGVja2FuamkgREVDLUtBTkpJIgorKwllY2hvICJkZWNrb3JlYW4gRVVDLUtSIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJHQksgR0JLIgorKwllY2hvICJLU0M1NjAxIENQOTQ5IgorKwllY2hvICJzZGVja2FuamkgRVVDLUpQIgorKwllY2hvICJTSklTIFNISUZUX0pJUyIKKysJZWNobyAiVEFDVElTIFRJUy02MjAiCisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBzb2xhcmlzKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktMyBJU08tODg1OS0zIgorKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJrb2k4LXIgS09JOC1SIgorKwllY2hvICJhbnNpLTEyNTEgQ1AxMjUxIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIkJpZzUtSEtTQ1MgQklHNS1IS1NDUyIKKysJZWNobyAiZ2IyMzEyIEdCMjMxMiIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiR0IxODAzMCBHQjE4MDMwIgorKwllY2hvICJjbnMxMTY0MyBFVUMtVFciCisrCWVjaG8gIjU2MDEgRVVDLUtSIgorKwllY2hvICJrb19LUi5qb2hhcDkyIEpPSEFCIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gIlBDSyBTSElGVF9KSVMiCisrCWVjaG8gIlRJUzYyMC4yNTMzIFRJUy02MjAiCisrCSNlY2hvICJzdW5fZXVfZ3JlZWsgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBmcmVlYnNkKiB8IG9zMiopCisrCSMgRnJlZUJTRCA0LjIgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwkjIExpa2V3aXNlIGZvciBPUy8yLiBPUy8yIGhhcyBYRnJlZTg2IGp1c3QgbGlrZSBGcmVlQlNELiBKdXN0CisrCSMgcmV1c2UgRnJlZUJTRCdzIGxvY2FsZSBkYXRhIGZvciBPUy8yLgorKwllY2hvICJDIEFTQ0lJIgorKwllY2hvICJVUy1BU0NJSSBBU0NJSSIKKysJZm9yIGwgaW4gbGFfTE4gbHRfTE47IGRvCisrCSAgZWNobyAiJGwuQVNDSUkgQVNDSUkiCisrCWRvbmUKKysJZm9yIGwgaW4gZGFfREsgZGVfQVQgZGVfQ0ggZGVfREUgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgZXNfRVMgXAorKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBsYV9MTiBcCisrCSAgICAgICAgIGx0X0xOIG5sX0JFIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworKwkgIGVjaG8gIiRsLklTT184ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5ESVNfODg1OS0xNSBJU08tODg1OS0xNSIKKysJZG9uZQorKwlmb3IgbCBpbiBjc19DWiBocl9IUiBodV9IVSBsYV9MTiBsdF9MTiBwbF9QTCBzbF9TSTsgZG8KKysJICBlY2hvICIkbC5JU09fODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNCBJU08tODg1OS00IgorKwlkb25lCisrCWZvciBsIGluIHJ1X1JVIHJ1X1NVOyBkbworKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNSBJU08tODg1OS01IgorKwkgIGVjaG8gIiRsLkNQODY2IENQODY2IgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAiamFfSlAuU2hpZnRfSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgbmV0YnNkKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZWNobyAiZXVjQ04gR0IyMzEyIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwk7OworKyAgICBkYXJ3aW4qKQorKwkjIERhcndpbiA2LjggZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwllY2hvICJDIEFTQ0lJIgorKwlmb3IgbCBpbiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBsYV9MTjsgZG8KKysJICBlY2hvICIkbC5VUy1BU0NJSSBBU0NJSSIKKysJZG9uZQorKwlmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisrCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIG5sX0JFIFwKKysJICAgICAgICAgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorKwlkb25lCisrCWZvciBsIGluIGxhX0xOOyBkbworKwkgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWRvbmUKKysJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gcGxfUEwgc2xfU0k7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS00IElTTy04ODU5LTQiCisrCWRvbmUKKysJZm9yIGwgaW4gcnVfUlU7IGRvCisrCSAgZWNobyAiJGwuS09JOC1SIEtPSTgtUiIKKysJICBlY2hvICIkbC5JU084ODU5LTUgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKysJZG9uZQorKwlmb3IgbCBpbiBiZ19CRzsgZG8KKysJICBlY2hvICIkbC5DUDEyNTEgQ1AxMjUxIgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgYmVvcyopCisrCSMgQmVPUyBoYXMgYSBzaW5nbGUgbG9jYWxlLCBhbmQgaXQgaGFzIFVURi04IGVuY29kaW5nLgorKwllY2hvICIqIFVURi04IgorKwk7OworKyAgICBtc2Rvc2RqZ3BwKikKKysJIyBESkdQUCAyLjAzIGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiIyIKKysJZWNobyAiIyBUaGUgZW5jb2RpbmdzIGdpdmVuIGhlcmUgbWF5IG5vdCBhbGwgYmUgY29ycmVjdC4iCisrCWVjaG8gIiMgSWYgeW91IGZpbmQgdGhhdCB0aGUgZW5jb2RpbmcgZ2l2ZW4gZm9yIHlvdXIgbGFuZ3VhZ2UgYW5kIgorKwllY2hvICIjIGNvdW50cnkgaXMgbm90IHRoZSBvbmUgeW91ciBET1MgbWFjaGluZSBhY3R1YWxseSB1c2VzLCBqdXN0IgorKwllY2hvICIjIGNvcnJlY3QgaXQgaW4gdGhpcyBmaWxlLCBhbmQgc2VuZCBhIG1haWwgdG8iCisrCWVjaG8gIiMgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPHN0MDAxOTA2QGhyejEuaHJ6LnR1LWRhcm1zdGFkdC5kZT4iCisrCWVjaG8gIiMgYW5kIEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4iCisrCWVjaG8gIiMiCisrCWVjaG8gIkMgQVNDSUkiCisrCSMgSVNPLTg4NTktMSBsYW5ndWFnZXMKKysJZWNobyAiY2EgQ1A4NTAiCisrCWVjaG8gImNhX0VTIENQODUwIgorKwllY2hvICJkYSBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAiZGFfREsgQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gImRlIENQODUwIgorKwllY2hvICJkZV9BVCBDUDg1MCIKKysJZWNobyAiZGVfQ0ggQ1A4NTAiCisrCWVjaG8gImRlX0RFIENQODUwIgorKwllY2hvICJlbiBDUDg1MCIKKysJZWNobyAiZW5fQVUgQ1A4NTAiICMgbm90IENQNDM3ID8/CisrCWVjaG8gImVuX0NBIENQODUwIgorKwllY2hvICJlbl9HQiBDUDg1MCIKKysJZWNobyAiZW5fTlogQ1A0MzciCisrCWVjaG8gImVuX1VTIENQNDM3IgorKwllY2hvICJlbl9aQSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiZXMgQ1A4NTAiCisrCWVjaG8gImVzX0FSIENQODUwIgorKwllY2hvICJlc19CTyBDUDg1MCIKKysJZWNobyAiZXNfQ0wgQ1A4NTAiCisrCWVjaG8gImVzX0NPIENQODUwIgorKwllY2hvICJlc19DUiBDUDg1MCIKKysJZWNobyAiZXNfQ1UgQ1A4NTAiCisrCWVjaG8gImVzX0RPIENQODUwIgorKwllY2hvICJlc19FQyBDUDg1MCIKKysJZWNobyAiZXNfRVMgQ1A4NTAiCisrCWVjaG8gImVzX0dUIENQODUwIgorKwllY2hvICJlc19ITiBDUDg1MCIKKysJZWNobyAiZXNfTVggQ1A4NTAiCisrCWVjaG8gImVzX05JIENQODUwIgorKwllY2hvICJlc19QQSBDUDg1MCIKKysJZWNobyAiZXNfUFkgQ1A4NTAiCisrCWVjaG8gImVzX1BFIENQODUwIgorKwllY2hvICJlc19TViBDUDg1MCIKKysJZWNobyAiZXNfVVkgQ1A4NTAiCisrCWVjaG8gImVzX1ZFIENQODUwIgorKwllY2hvICJldCBDUDg1MCIKKysJZWNobyAiZXRfRUUgQ1A4NTAiCisrCWVjaG8gImV1IENQODUwIgorKwllY2hvICJldV9FUyBDUDg1MCIKKysJZWNobyAiZmkgQ1A4NTAiCisrCWVjaG8gImZpX0ZJIENQODUwIgorKwllY2hvICJmciBDUDg1MCIKKysJZWNobyAiZnJfQkUgQ1A4NTAiCisrCWVjaG8gImZyX0NBIENQODUwIgorKwllY2hvICJmcl9DSCBDUDg1MCIKKysJZWNobyAiZnJfRlIgQ1A4NTAiCisrCWVjaG8gImdhIENQODUwIgorKwllY2hvICJnYV9JRSBDUDg1MCIKKysJZWNobyAiZ2QgQ1A4NTAiCisrCWVjaG8gImdkX0dCIENQODUwIgorKwllY2hvICJnbCBDUDg1MCIKKysJZWNobyAiZ2xfRVMgQ1A4NTAiCisrCWVjaG8gImlkIENQODUwIiAgICAjIG5vdCBDUDQzNyA/PworKwllY2hvICJpZF9JRCBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiaXMgQ1A4NjEiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gImlzX0lTIENQODYxIiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJpdCBDUDg1MCIKKysJZWNobyAiaXRfQ0ggQ1A4NTAiCisrCWVjaG8gIml0X0lUIENQODUwIgorKwllY2hvICJsdCBDUDc3NSIKKysJZWNobyAibHRfTFQgQ1A3NzUiCisrCWVjaG8gImx2IENQNzc1IgorKwllY2hvICJsdl9MViBDUDc3NSIKKysJZWNobyAibmIgQ1A4NjUiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gIm5iX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJubCBDUDg1MCIKKysJZWNobyAibmxfQkUgQ1A4NTAiCisrCWVjaG8gIm5sX05MIENQODUwIgorKwllY2hvICJubiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibm5fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gIm5vIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJub19OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAicHQgQ1A4NTAiCisrCWVjaG8gInB0X0JSIENQODUwIgorKwllY2hvICJwdF9QVCBDUDg1MCIKKysJZWNobyAic3YgQ1A4NTAiCisrCWVjaG8gInN2X1NFIENQODUwIgorKwkjIElTTy04ODU5LTIgbGFuZ3VhZ2VzCisrCWVjaG8gImNzIENQODUyIgorKwllY2hvICJjc19DWiBDUDg1MiIKKysJZWNobyAiaHIgQ1A4NTIiCisrCWVjaG8gImhyX0hSIENQODUyIgorKwllY2hvICJodSBDUDg1MiIKKysJZWNobyAiaHVfSFUgQ1A4NTIiCisrCWVjaG8gInBsIENQODUyIgorKwllY2hvICJwbF9QTCBDUDg1MiIKKysJZWNobyAicm8gQ1A4NTIiCisrCWVjaG8gInJvX1JPIENQODUyIgorKwllY2hvICJzayBDUDg1MiIKKysJZWNobyAic2tfU0sgQ1A4NTIiCisrCWVjaG8gInNsIENQODUyIgorKwllY2hvICJzbF9TSSBDUDg1MiIKKysJZWNobyAic3EgQ1A4NTIiCisrCWVjaG8gInNxX0FMIENQODUyIgorKwllY2hvICJzciBDUDg1MiIgICAgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9DUyBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9ZVSBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwkjIElTTy04ODU5LTMgbGFuZ3VhZ2VzCisrCWVjaG8gIm10IENQODUwIgorKwllY2hvICJtdF9NVCBDUDg1MCIKKysJIyBJU08tODg1OS01IGxhbmd1YWdlcworKwllY2hvICJiZSBDUDg2NiIKKysJZWNobyAiYmVfQkUgQ1A4NjYiCisrCWVjaG8gImJnIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworKwllY2hvICJiZ19CRyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKysJZWNobyAibWsgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CisrCWVjaG8gIm1rX01LIENQODY2IiAjIG5vdCBDUDg1NSA/PworKwllY2hvICJydSBDUDg2NiIKKysJZWNobyAicnVfUlUgQ1A4NjYiCisrCWVjaG8gInVrIENQMTEyNSIKKysJZWNobyAidWtfVUEgQ1AxMTI1IgorKwkjIElTTy04ODU5LTYgbGFuZ3VhZ2VzCisrCWVjaG8gImFyIENQODY0IgorKwllY2hvICJhcl9BRSBDUDg2NCIKKysJZWNobyAiYXJfRFogQ1A4NjQiCisrCWVjaG8gImFyX0VHIENQODY0IgorKwllY2hvICJhcl9JUSBDUDg2NCIKKysJZWNobyAiYXJfSVIgQ1A4NjQiCisrCWVjaG8gImFyX0pPIENQODY0IgorKwllY2hvICJhcl9LVyBDUDg2NCIKKysJZWNobyAiYXJfTUEgQ1A4NjQiCisrCWVjaG8gImFyX09NIENQODY0IgorKwllY2hvICJhcl9RQSBDUDg2NCIKKysJZWNobyAiYXJfU0EgQ1A4NjQiCisrCWVjaG8gImFyX1NZIENQODY0IgorKwkjIElTTy04ODU5LTcgbGFuZ3VhZ2VzCisrCWVjaG8gImVsIENQODY5IgorKwllY2hvICJlbF9HUiBDUDg2OSIKKysJIyBJU08tODg1OS04IGxhbmd1YWdlcworKwllY2hvICJoZSBDUDg2MiIKKysJZWNobyAiaGVfSUwgQ1A4NjIiCisrCSMgSVNPLTg4NTktOSBsYW5ndWFnZXMKKysJZWNobyAidHIgQ1A4NTciCisrCWVjaG8gInRyX1RSIENQODU3IgorKwkjIEphcGFuZXNlCisrCWVjaG8gImphIENQOTMyIgorKwllY2hvICJqYV9KUCBDUDkzMiIKKysJIyBDaGluZXNlCisrCWVjaG8gInpoX0NOIEdCSyIKKysJZWNobyAiemhfVFcgQ1A5NTAiICMgbm90IENQOTM4ID8/CisrCSMgS29yZWFuCisrCWVjaG8gImtyIENQOTQ5IiAgICAjIG5vdCBDUDkzNCA/PworKwllY2hvICJrcl9LUiBDUDk0OSIgIyBub3QgQ1A5MzQgPz8KKysJIyBUaGFpCisrCWVjaG8gInRoIENQODc0IgorKwllY2hvICJ0aF9USCBDUDg3NCIKKysJIyBPdGhlcgorKwllY2hvICJlbyBDUDg1MCIKKysJZWNobyAiZW9fRU8gQ1A4NTAiCisrCTs7CisrZXNhYworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RjZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RjZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU5NzQ3NDgwIC0wNDAwCitAQCAtMSw1OTMgKzEsNTYgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorLSMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKy0jZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKy0jIGVsc2UKKy0jICBpZmRlZiBfQUlYCistICNwcmFnbWEgYWxsb2NhCistIyAgZWxzZQorLSMgICBpZm5kZWYgYWxsb2NhCistY2hhciAqYWxsb2NhICgpOworLSMgICBlbmRpZgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpZm5kZWYgZXJybm8KKy1leHRlcm4gaW50IGVycm5vOworLSNlbmRpZgorLSNpZm5kZWYgX19zZXRfZXJybm8KKy0jIGRlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5vID0gKHZhbCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbHNlCistdm9pZCBmcmVlICgpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBfR05VX1NPVVJDRQorLSMgIGRlZmluZSBfR05VX1NPVVJDRQkxCistIyBlbmRpZgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHVuaXN0ZC5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKy0jaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmZGVmIF9MSUJDCistLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCistICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorLSAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKy0jIGRlZmluZSBzdHBjcHkgX19zdHBjcHkKKy0jZWxzZQorLSMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKy1jaGFyICpnZXR3ZCAoKTsKKy0jICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorLSMgZWxzZQorLWNoYXIgKmdldGN3ZCAoKTsKKy0jIGVuZGlmCistIyBpZm5kZWYgSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqc3RwY3B5IFBBUkFNUyAoKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBBbW91bnQgdG8gaW5jcmVhc2UgYnVmZmVyIHNpemUgYnkgaW4gZWFjaCB0cnkuICAqLworLSNkZWZpbmUgUEFUSF9JTkNSIDMyCistCistLyogVGhlIGZvbGxvd2luZyBpcyBmcm9tIHBhdGhtYXguaC4gICovCistLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUgZ2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCistICAgUEFUSF9NQVggYnV0IG1pZ2h0IGNhdXNlIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyB3aGVuIHN5cy9wYXJhbS5oIGlzCistICAgbGF0ZXIgaW5jbHVkZWQgKGFzIG9uIE1PUkUvQlNEIDQuMykuICAqLworLSNpZiBkZWZpbmVkKF9QT1NJWF9WRVJTSU9OKSB8fCAoZGVmaW5lZChIQVZFX0xJTUlUU19IKSAmJiAhZGVmaW5lZChfX0dOVUNfXykpCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIF9QT1NJWF9QQVRIX01BWAorLSMgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTUKKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoX1BDX1BBVEhfTUFYKQorLSMgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorLSNlbmRpZgorLQorLS8qIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggaWYgaXQgYWxyZWFkeSBoYXMgYmVlbi4gICovCistI2lmIGRlZmluZWQoSEFWRV9TWVNfUEFSQU1fSCkgJiYgIWRlZmluZWQoUEFUSF9NQVgpICYmICFkZWZpbmVkKE1BWFBBVEhMRU4pCistIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoTUFYUEFUSExFTikKKy0jIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCistI2VuZGlmCistCistI2lmbmRlZiBQQVRIX01BWAorLSMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorLSNlbmRpZgorLQorLS8qIFhQRzMgZGVmaW5lcyB0aGUgcmVzdWx0IG9mIGBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKScgYXM6CistICAgYGBEaXJlY3RzIGBzZXRsb2NhbGUoKScgdG8gcXVlcnkgYGNhdGVnb3J5JyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50CistICAgICBzZXR0aW5nIG9mIGBsb2NhbCcuJycKKy0gICBIb3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIGV4YWN0IGZvcm1hdC4gIEFuZCBldmVuIHdvcnNlOiBQT1NJWAorLSAgIGRlZmluZXMgdGhpcyBub3QgYXQgYWxsLiAgU28gd2UgY2FuIHVzZSB0aGlzIGZlYXR1cmUgb25seSBvbiBzZWxlY3RlZAorLSAgIHN5c3RlbSAoZS5nLiB0aG9zZSB1c2luZyBHTlUgQyBMaWJyYXJ5KS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorLSNlbmRpZgorLQorLS8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKy0gICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdID0gIm1lc3NhZ2VzIjsKKy0KKy0vKiBWYWx1ZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGRvbWFpbiBmb3IgZ2V0dGV4dCgzKS4gICovCistY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKy0KKy0vKiBDb250YWlucyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBjYXRhbG9ncy4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBHTlVMT0NBTEVESVI7CistCistLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMgY3JlYXRlZCBieSBiaW5kdGV4dGRvbWFpbigpCistICAgY2FsbHMuICAqLworLXN0cnVjdCBiaW5kaW5nICpfbmxfZG9tYWluX2JpbmRpbmdzOworLQorLS8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCistc3RhdGljIGNoYXIgKmZpbmRfbXNnIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorLQkJCSAgICAgICBjb25zdCBjaGFyICptc2dpZCkpOworLXN0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIFBBUkFNUyAoKGludCBjYXRlZ29yeSkpOworLXN0YXRpYyBjb25zdCBjaGFyICpndWVzc19jYXRlZ29yeV92YWx1ZSBQQVJBTVMgKChpbnQgY2F0ZWdvcnksCistCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkpOworLQorLQorLS8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorLSAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCistI2lmZGVmIEhBVkVfQUxMT0NBCistLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHJlc3MpIC8qIG5vdGhpbmcgKi8KKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3RoaW5nICovCistI2Vsc2UKKy1zdHJ1Y3QgYmxvY2tfbGlzdAorLXsKKy0gIHZvaWQgKmFkZHJlc3M7CistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV4dDsKKy19OworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyKQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHN0cnVjdCBibG9ja19saXN0ICpuZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAorLSAgICAvKiBJZiB3ZSBjYW5ub3QgZ2V0IGEgZnJlZSBibG9jayB3ZSBjYW5ub3QgYWRkIHRoZSBuZXcgZWxlbWVudCB0bwkgICAgICBcCistICAgICAgIHRoZSBsaXN0LiAgKi8JCQkJCQkJICAgICAgXAorLSAgICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5hZGRyZXNzID0gKGFkZHIpOwkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5uZXh0ID0gKGxpc3QpOwkJCQkJCSAgICAgIFwKKy0gICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewkJCQkJCSAgICAgIFwKKy0gICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwKKy0gICAgICBsaXN0ID0gbGlzdC0+bmV4dDsJCQkJCQkgICAgICBcCistICAgICAgZnJlZSAob2xkKTsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIHVuZGVmIGFsbG9jYQorLSMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKKy0jZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKy0KKy0KKyAvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKyAjZWxzZQorLSMgZGVmaW5lIERDR0VUVEVYVCBkY2dldHRleHRfXworKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisgICAgbG9jYWxlLiAgKi8KKyBjaGFyICoKKy1EQ0dFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKy0gICAgIGludCBjYXRlZ29yeTsKKytEQ0dFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCisgeworLSNpZm5kZWYgSEFWRV9BTExPQ0EKKy0gIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKy0jZW5kaWYKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKy0gIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKy0gIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKy0gIGNoYXIgKnNpbmdsZV9sb2NhbGU7CistICBjaGFyICpyZXR2YWw7CistICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKy0KKy0gIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworLSAgaWYgKG1zZ2lkID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorLSAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCistICAgICBkZWZpbnRpb24gbGVmdCB0aGlzIHVuZGVmaW5lZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICBkb21haW5uYW1lID0gX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CistCistICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAqLworLSAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKy0gICAgeworLSAgICAgIGludCBjb21wYXJlID0gc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKKy0gICAgICBpZiAoY29tcGFyZSA9PSAwKQorLQkvKiBXZSBmb3VuZCBpdCEgICovCistCWJyZWFrOworLSAgICAgIGlmIChjb21wYXJlIDwgMCkKKy0JeworLQkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCistCSAgYmluZGluZyA9IE5VTEw7CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKKy0gICAgZGlybmFtZSA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CistICBlbHNlIGlmIChiaW5kaW5nLT5kaXJuYW1lWzBdID09ICcvJykKKy0gICAgZGlybmFtZSA9IGJpbmRpbmctPmRpcm5hbWU7CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUgbm93LiAgKi8KKy0gICAgICBzaXplX3QgZGlybmFtZV9sZW4gPSBzdHJsZW4gKGJpbmRpbmctPmRpcm5hbWUpICsgMTsKKy0gICAgICBzaXplX3QgcGF0aF9tYXg7CistICAgICAgY2hhciAqcmV0OworLQorLSAgICAgIHBhdGhfbWF4ID0gKHVuc2lnbmVkKSBQQVRIX01BWDsKKy0gICAgICBwYXRoX21heCArPSAyOwkJLyogVGhlIGdldGN3ZCBkb2NzIHNheSB0byBkbyB0aGlzLiAgKi8KKy0KKy0gICAgICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0gICAgICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQorLSAgICAgIF9fc2V0X2Vycm5vICgwKTsKKy0gICAgICB3aGlsZSAoKHJldCA9IGdldGN3ZCAoZGlybmFtZSwgcGF0aF9tYXgpKSA9PSBOVUxMICYmIGVycm5vID09IEVSQU5HRSkKKy0JeworLQkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKy0JICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0JICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQkgIF9fc2V0X2Vycm5vICgwKTsKKy0JfQorLQorLSAgICAgIGlmIChyZXQgPT0gTlVMTCkKKy0JeworLQkgIC8qIFdlIGNhbm5vdCBnZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBEb24ndCBzaWduYWwgYW4KKy0JICAgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworLQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgIHJldHVybiAoY2hhciAqKSBtc2dpZDsKKy0JfQorLQorLSAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRpcm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKKy0gICAgfQorLQorLSAgLyogTm93IGRldGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8KKy0gIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKy0gIGNhdGVnb3J5dmFsdWUgPSBndWVzc19jYXRlZ29yeV92YWx1ZSAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSk7CistCistICB4ZG9tYWlubmFtZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeW5hbWUpCistCQkJCSArIHN0cmxlbiAoZG9tYWlubmFtZSkgKyA1KTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworLQorLSAgc3RwY3B5IChzdHBjcHkgKHN0cGNweSAoc3RwY3B5ICh4ZG9tYWlubmFtZSwgY2F0ZWdvcnluYW1lKSwgIi8iKSwKKy0JCSAgZG9tYWlubmFtZSksCistCSAgIi5tbyIpOworLQorLSAgLyogQ3JlYXRpbmcgd29ya2luZyBhcmVhLiAgKi8KKy0gIHNpbmdsZV9sb2NhbGUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnl2YWx1ZSkgKyAxKTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2luZ2xlX2xvY2FsZSk7CistCistCistICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlzIGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKKy0gICAgIGdvdCBhbiBvcmRlcmVkIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGNvbnNpZGVyIGZvciB0aCB0cmFuc2xhdGlvbi4gICovCistICB3aGlsZSAoMSkKKy0gICAgeworLSAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKy0gICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorLQkrK2NhdGVnb3J5dmFsdWU7CistICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKy0JeworLQkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorLQkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKy0JICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorLQkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCistCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKy0JICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKy0JICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorLQkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworLQkgICpjcCA9ICdcMCc7CistCX0KKy0KKy0gICAgICAvKiBJZiB0aGUgY3VycmVudCBsb2NhbGUgdmFsdWUgaXMgQyAob3IgUE9TSVgpIHdlIGRvbid0IGxvYWQgYQorLQkgZG9tYWluLiAgUmV0dXJuIHRoZSBNU0dJRC4gICovCistICAgICAgaWYgKHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIkMiKSA9PSAwCistCSAgfHwgc3RyY21wIChzaW5nbGVfbG9jYWxlLCAiUE9TSVgiKSA9PSAwKQorLQl7CistCSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CistCSAgcmV0dXJuIChjaGFyICopIG1zZ2lkOworLQl9CistCistCistICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorLQkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworLSAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUpOworLQorLSAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKy0JeworLQkgIHJldHZhbCA9IGZpbmRfbXNnIChkb21haW4sIG1zZ2lkKTsKKy0KKy0JICBpZiAocmV0dmFsID09IE5VTEwpCistCSAgICB7CistCSAgICAgIGludCBjbnQ7CistCistCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKy0JCXsKKy0JCSAgcmV0dmFsID0gZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIG1zZ2lkKTsKKy0KKy0JCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQkJICAgIGJyZWFrOworLQkJfQorLQkgICAgfQorLQorLQkgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgICAgICByZXR1cm4gcmV0dmFsOworLQkgICAgfQorLQl9CistICAgIH0KKy0gIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiBEQ0lHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgTlVMTCwgMCwgMCwgY2F0ZWdvcnkpOworIH0KKyAKKyAjaWZkZWYgX0xJQkMKKyAvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKytJTlRERUYoX19kY2dldHRleHQpCisgd2Vha19hbGlhcyAoX19kY2dldHRleHQsIGRjZ2V0dGV4dCk7CisgI2VuZGlmCistCistCistc3RhdGljIGNoYXIgKgorLWZpbmRfbXNnIChkb21haW5fZmlsZSwgbXNnaWQpCistICAgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLXsKKy0gIHNpemVfdCB0b3AsIGFjdCwgYm90dG9tOworLSAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlKTsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKy0KKy0gIC8qIExvY2F0ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCistICBpZiAoZG9tYWluLT5oYXNoX3NpemUgPiAyICYmIGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCistICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CistICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKy0gICAgICBubHNfdWludDMyIG5zdHIgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKy0KKy0gICAgICBpZiAobnN0ciA9PSAwKQorLQkvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgKi8KKy0JcmV0dXJuIE5VTEw7CistCistICAgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICYmIHN0cmNtcCAobXNnaWQsCistCQkgICAgIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkgICAgICAgZG9tYWluLT5vcmlnX3RhYltuc3RyIC0gMV0ub2Zmc2V0KSkgPT0gMCkKKy0JcmV0dXJuIChjaGFyICopIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkJICBkb21haW4tPnRyYW5zX3RhYltuc3RyIC0gMV0ub2Zmc2V0KTsKKy0KKy0gICAgICB3aGlsZSAoMSkKKy0JeworLQkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorLQkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKy0JICBlbHNlCistCSAgICBpZHggKz0gaW5jcjsKKy0KKy0JICBuc3RyID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CistCSAgaWYgKG5zdHIgPT0gMCkKKy0JICAgIC8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLworLQkgICAgcmV0dXJuIE5VTEw7CistCistCSAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICAgICAmJiBzdHJjbXAgKG1zZ2lkLAorLQkJCSBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJCSAgIGRvbWFpbi0+b3JpZ190YWJbbnN0ciAtIDFdLm9mZnNldCkpCistCSAgICAgICAgID09IDApCistCSAgICByZXR1cm4gKGNoYXIgKikgZG9tYWluLT5kYXRhCistCSAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW25zdHIgLSAxXS5vZmZzZXQpOworLQl9CistICAgICAgLyogTk9UUkVBQ0hFRCAqLworLSAgICB9CistCistICAvKiBOb3cgd2UgdHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZAorLSAgICAgYXJyYXkgb2YgbWVzc2FnZXMuICAqLworLSAgYm90dG9tID0gMDsKKy0gIHRvcCA9IGRvbWFpbi0+bnN0cmluZ3M7CistICB3aGlsZSAoYm90dG9tIDwgdG9wKQorLSAgICB7CistICAgICAgaW50IGNtcF92YWw7CistCistICAgICAgYWN0ID0gKGJvdHRvbSArIHRvcCkgLyAyOworLSAgICAgIGNtcF92YWwgPSBzdHJjbXAgKG1zZ2lkLCBkb21haW4tPmRhdGEKKy0JCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJICAgIGRvbWFpbi0+b3JpZ190YWJbYWN0XS5vZmZzZXQpKTsKKy0gICAgICBpZiAoY21wX3ZhbCA8IDApCistCXRvcCA9IGFjdDsKKy0gICAgICBlbHNlIGlmIChjbXBfdmFsID4gMCkKKy0JYm90dG9tID0gYWN0ICsgMTsKKy0gICAgICBlbHNlCistCWJyZWFrOworLSAgICB9CistCistICAvKiBJZiBhbiB0cmFuc2xhdGlvbiBpcyBmb3VuZCByZXR1cm4gdGhpcy4gICovCistICByZXR1cm4gYm90dG9tID49IHRvcCA/IE5VTEwgOiAoY2hhciAqKSBkb21haW4tPmRhdGEKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCSAgICAgZG9tYWluLT50cmFuc190YWJbYWN0XS5vZmZzZXQpOworLX0KKy0KKy0KKy0vKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGxvY2FsZSBDQVRFR09SWS4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KQorLSAgICAgaW50IGNhdGVnb3J5OworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIHN3aXRjaCAoY2F0ZWdvcnkpCistICB7CistI2lmZGVmIExDX0NPTExBVEUKKy0gIGNhc2UgTENfQ09MTEFURToKKy0gICAgcmV0dmFsID0gIkxDX0NPTExBVEUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQ1RZUEUKKy0gIGNhc2UgTENfQ1RZUEU6CistICAgIHJldHZhbCA9ICJMQ19DVFlQRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NT05FVEFSWQorLSAgY2FzZSBMQ19NT05FVEFSWToKKy0gICAgcmV0dmFsID0gIkxDX01PTkVUQVJZIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX05VTUVSSUMKKy0gIGNhc2UgTENfTlVNRVJJQzoKKy0gICAgcmV0dmFsID0gIkxDX05VTUVSSUMiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfVElNRQorLSAgY2FzZSBMQ19USU1FOgorLSAgICByZXR2YWwgPSAiTENfVElNRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NRVNTQUdFUworLSAgY2FzZSBMQ19NRVNTQUdFUzoKKy0gICAgcmV0dmFsID0gIkxDX01FU1NBR0VTIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX1JFU1BPTlNFCistICBjYXNlIExDX1JFU1BPTlNFOgorLSAgICByZXR2YWwgPSAiTENfUkVTUE9OU0UiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQUxMCistICBjYXNlIExDX0FMTDoKKy0gICAgLyogVGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSBidXQgaXMgcGVyaGFwcyBiZXR0ZXIgdGhhbiBhbnkgb3RoZXIKKy0gICAgICAgdmFsdWUuICAqLworLSAgICByZXR2YWwgPSAiTENfQUxMIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistICBkZWZhdWx0OgorLSAgICAvKiBJZiB5b3UgaGF2ZSBhIGJldHRlciBpZGVhIGZvciBhIGRlZmF1bHQgdmFsdWUgbGV0IG1lIGtub3cuICAqLworLSAgICByZXR2YWwgPSAiTENfWFhYIjsKKy0gIH0KKy0KKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLS8qIEd1ZXNzIHZhbHVlIG9mIGN1cnJlbnQgbG9jYWxlIGZyb20gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKQorLSAgICAgaW50IGNhdGVnb3J5OworLSAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CistICAgICB2YXJpYWJsZS4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxBTkdVQUdFIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBgTEFOR1VBR0UnIGlzIG5vdCBzZXQuICBTbyB3ZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVgKKy0gICAgIG1ldGhvZHMgb2YgbG9va2luZyB0byBgTENfQUxMJywgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lCistICAgICBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCistI2lmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorLSAgcmV0dXJuIHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpOworLSNlbHNlCistICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVyd3JpdGVzIGFsbCBvdGhlci4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIC8qIE5leHQgY29tZXMgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgY2F0ZWdvcnkuICAqLworLSAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLQorLSAgLyogTGFzdCBwb3NzaWJpbGl0eSBpcyB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMgaW1wbGVtZW50YXRpb24KKy0gICAgIGRlZmluZWQuICAqLworLSAgcmV0dXJuICJDIjsKKy0jZW5kaWYKKy19CistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY2lnZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNpZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzY5NzQ1OTYwIC0wNDAwCitAQCAtMCwwICsxLDEyMTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYWwgZGNpZ2V0dGV4dCBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysjaWZkZWYgX19HTlVDX18KKysjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKysjZWxzZQorKyMgaWZkZWYgX01TQ19WRVIKKysjICBpbmNsdWRlIDxtYWxsb2MuaD4KKysjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKysjIGVsc2UKKysjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICBlbHNlCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYQorK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2lmbmRlZiBlcnJubworK2V4dGVybiBpbnQgZXJybm87CisrI2VuZGlmCisrI2lmbmRlZiBfX3NldF9lcnJubworKyMgZGVmaW5lIF9fc2V0X2Vycm5vKHZhbCkgZXJybm8gPSAodmFsKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZmRlZiBfTElCQworKyAgLyogR3Vlc3Mgd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuCisrICAgICBTZXQgdG8gMSBvbmx5IGlmIHlvdSBrbm93IGZvciBzdXJlLiAgSW4gY2FzZSBvZiBkb3VidCwgc2V0IHRvIDAuICAqLworKyMgaWYgZGVmaW5lZCBfX2FscGhhX18gfHwgZGVmaW5lZCBfX2FybV9fIHx8IGRlZmluZWQgX19pMzg2X18gXAorKyAgICAgfHwgZGVmaW5lZCBfX202OGtfXyB8fCBkZWZpbmVkIF9fczM5MF9fCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAxCisrIyBlbHNlCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAwCisrIyBlbmRpZgorKyNlbmRpZgorKyNpZiAhSU5URElWMF9SQUlTRVNfU0lHRlBFCisrIyBpbmNsdWRlIDxzaWduYWwuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKysKKysvKiBUaHJlYWQgc2FmZXR5bmVzcy4gICovCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKyNlbHNlCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUywgTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoQ0xBU1MsIE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19yZGxvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3VubG9jayhOQU1FKQorKyNlbmRpZgorKworKy8qIEFsaWdubWVudCBvZiB0eXBlcy4gICovCisrI2lmIGRlZmluZWQgX19HTlVDX18gJiYgX19HTlVDX18gPj0gMgorKyMgZGVmaW5lIGFsaWdub2YoVFlQRSkgX19hbGlnbm9mX18gKFRZUEUpCisrI2Vsc2UKKysjIGRlZmluZSBhbGlnbm9mKFRZUEUpIFwKKysgICAgKChpbnQpICYoKHN0cnVjdCB7IGNoYXIgZHVtbXkxOyBUWVBFIGR1bW15MjsgfSAqKSAwKS0+ZHVtbXkyKQorKyNlbmRpZgorKworKy8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKysgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworKyNpZiAhZGVmaW5lZCBfTElCQworKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKysjIGRlZmluZSBfbmxfZG9tYWluX2JpbmRpbmdzIGxpYmludGxfbmxfZG9tYWluX2JpbmRpbmdzCisrI2VuZGlmCisrCisrLyogU29tZSBjb21waWxlcnMsIGxpa2UgU3VuT1M0IGNjLCBkb24ndCBoYXZlIG9mZnNldG9mIGluIDxzdGRkZWYuaD4uICAqLworKyNpZm5kZWYgb2Zmc2V0b2YKKysjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrI2lmZGVmIF9MSUJDCisrLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisrICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorKyAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKysjIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKysjIGlmbmRlZiBzdHBjcHkKKysjICBkZWZpbmUgc3RwY3B5IF9fc3RwY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIHRmaW5kIF9fdGZpbmQKKysjZWxzZQorKyMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKytjaGFyICpnZXR3ZCAoKTsKKysjICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorKyMgZWxzZQorKyMgIGlmIFZNUworKyMgICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSAoZ2V0Y3dkKSAoYnVmLCBtYXgsIDApCisrIyAgZWxzZQorK2NoYXIgKmdldGN3ZCAoKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX1NUUENQWQorK3N0YXRpYyBjaGFyICpzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfTUVNUENQWQorK3N0YXRpYyB2b2lkICptZW1wY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogQW1vdW50IHRvIGluY3JlYXNlIGJ1ZmZlciBzaXplIGJ5IGluIGVhY2ggdHJ5LiAgKi8KKysjZGVmaW5lIFBBVEhfSU5DUiAzMgorKworKy8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBwYXRobWF4LmguICAqLworKy8qIE5vbi1QT1NJWCBCU0Qgc3lzdGVtcyBtaWdodCBoYXZlIGdjYydzIGxpbWl0cy5oLCB3aGljaCBkb2Vzbid0IGRlZmluZQorKyAgIFBBVEhfTUFYIGJ1dCBtaWdodCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcworKyAgIGxhdGVyIGluY2x1ZGVkIChhcyBvbiBNT1JFL0JTRCA0LjMpLiAgKi8KKysjaWYgZGVmaW5lZCBfUE9TSVhfVkVSU0lPTiB8fCAoZGVmaW5lZCBIQVZFX0xJTUlUU19IICYmICFkZWZpbmVkIF9fR05VQ19fKQorKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKKysjIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU1CisrI2VuZGlmCisrCisrI2lmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYCisrIyBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCisrI2VuZGlmCisrCisrLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisrI2VuZGlmCisrCisrI2lmbmRlZiBQQVRIX01BWAorKyMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorKyNlbmRpZgorKworKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisrICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisrICAgSVNfQUJTT0xVVEVfUEFUSChQKSAgdGVzdHMgd2hldGhlciBQIGlzIGFuIGFic29sdXRlIHBhdGguICBJZiBpdCBpcyBub3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJQ0UgKFApKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgXAorKyAgICAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwgfHwgc3RyY2hyIChQLCAnXFwnKSAhPSBOVUxMIHx8IEhBU19ERVZJQ0UgKFApKQorKyNlbHNlCisrICAvKiBVbml4ICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKysjZW5kaWYKKysKKysvKiBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKKysgICBhcmUgc3RvcmVkLiAgKi8KKytzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdAorK3sKKysgIC8qIERvbWFpbiBpbiB3aGljaCB0byBzZWFyY2guICAqLworKyAgY2hhciAqZG9tYWlubmFtZTsKKysKKysgIC8qIFRoZSBjYXRlZ29yeS4gICovCisrICBpbnQgY2F0ZWdvcnk7CisrCisrICAvKiBTdGF0ZSBvZiB0aGUgY2F0YWxvZyBjb3VudGVyIGF0IHRoZSBwb2ludCB0aGUgc3RyaW5nIHdhcyBmb3VuZC4gICovCisrICBpbnQgY291bnRlcjsKKysKKysgIC8qIENhdGFsb2cgd2hlcmUgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLworKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworKworKyAgLyogQW5kIGZpbmFsbHkgdGhlIHRyYW5zbGF0aW9uLiAgKi8KKysgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uOworKyAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsKKysKKysgIC8qIFBvaW50ZXIgdG8gdGhlIHN0cmluZyBpbiBxdWVzdGlvbi4gICovCisrICBjaGFyIG1zZ2lkW1pFUk9dOworK307CisrCisrLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xhdGlvbnMuICBXZSBjYW4gdXNlIHRoaXMKKysgICBvbmx5IGlmIHRoZSBzeXN0ZW0gcHJvdmlkZXMgdGhlIGB0c2VhcmNoJyBmdW5jdGlvbiBmYW1pbHkuICAqLworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzZWFyY2guaD4KKysKKytzdGF0aWMgdm9pZCAqcm9vdDsKKysKKysjIGlmZGVmIF9MSUJDCisrIyAgZGVmaW5lIHRzZWFyY2ggX190c2VhcmNoCisrIyBlbmRpZgorKworKy8qIEZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrc3RhdGljIGludAorK3RyYW5zY21wIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisreworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMxOworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMyOworKyAgaW50IHJlc3VsdDsKKysKKysgIHMxID0gKGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopIHAxOworKyAgczIgPSAoY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikgcDI7CisrCisrICByZXN1bHQgPSBzdHJjbXAgKHMxLT5tc2dpZCwgczItPm1zZ2lkKTsKKysgIGlmIChyZXN1bHQgPT0gMCkKKysgICAgeworKyAgICAgIHJlc3VsdCA9IHN0cmNtcCAoczEtPmRvbWFpbm5hbWUsIHMyLT5kb21haW5uYW1lKTsKKysgICAgICBpZiAocmVzdWx0ID09IDApCisrCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVnb3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAorKwkgICBvcGVyYXRpb24pIHNpbmNlIGl0IGlzIGhvcGVmdWxseSBhbHdheXMgdGhlIHNhbWUgKG5hbWVseQorKwkgICBMQ19NRVNTQUdFUykuICAqLworKwlyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CisrICAgIH0KKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyNlbmRpZgorKworKyNpZm5kZWYgSU5UVkFSREVGCisrIyBkZWZpbmUgSU5UVkFSREVGKG5hbWUpCisrI2VuZGlmCisrI2lmbmRlZiBJTlRVU0UKKysjIGRlZmluZSBJTlRVU0UobmFtZSkgbmFtZQorKyNlbmRpZgorKworKy8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKysgICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW4gPSAibWVzc2FnZXMiOworKworKy8qIFZhbHVlIHVzZWQgYXMgdGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KKytjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuCisrICAgICA9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluOworKworKy8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KKysjaWYgZGVmaW5lZCBfX0VNWF9fCisrZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdOworKyNlbHNlCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBMT0NBTEVESVI7CisrSU5UVkFSREVGIChfbmxfZGVmYXVsdF9kaXJuYW1lKQorKyNlbmRpZgorKworKy8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zIGNyZWF0ZWQgYnkgYmluZHRleHRkb21haW4oKQorKyAgIGNhbGxzLiAgKi8KKytzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBjaGFyICpwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sCisrCQkJICAgIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCQkJICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLCBzaXplX3QgdHJhbnNsYXRpb25fbGVuKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIGNvbnN0IGNoYXIgKmd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksCisrCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorKyMgZGVmaW5lIGNhdGVnb3J5X3RvX25hbWUoY2F0ZWdvcnkpCV9ubF9jYXRlZ29yeV9uYW1lc1tjYXRlZ29yeV0KKysjZWxzZQorK3N0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIChpbnQgY2F0ZWdvcnkpIGludGVybmFsX2Z1bmN0aW9uOworKyNlbmRpZgorKworKworKy8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorKyAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCisrI2lmZGVmIEhBVkVfQUxMT0NBCisrLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCisrIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCisrIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyNlbHNlCisrc3RydWN0IGJsb2NrX2xpc3QKKyt7CisrICB2b2lkICphZGRyZXNzOworKyAgc3RydWN0IGJsb2NrX2xpc3QgKm5leHQ7CisrfTsKKysjIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCisrICBkbyB7CQkJCQkJCQkJICAgICAgXAorKyAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV3cCA9IChzdHJ1Y3QgYmxvY2tfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsgIFwKKysgICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorKyAgICAgICB0aGUgbGlzdC4gICovCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKG5ld3AgIT0gTlVMTCkgewkJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+bmV4dCA9IChsaXN0KTsJCQkJCQkgICAgICBcCisrICAgICAgKGxpc3QpID0gbmV3cDsJCQkJCQkJICAgICAgXAorKyAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysjIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KQkJCQkJCSAgICAgIFwKKysgIGRvIHsJCQkJCQkJCQkgICAgICBcCisrICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsJCQkJCQkgICAgICBcCisrICAgICAgc3RydWN0IGJsb2NrX2xpc3QgKm9sZCA9IGxpc3Q7CQkJCQkgICAgICBcCisrICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZC0+YWRkcmVzcyk7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZCk7CQkJCQkJCSAgICAgIFwKKysgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrIyB1bmRlZiBhbGxvY2EKKysjIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBMaXN0IG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRyYW5zbGF0aW9ucy4gICovCisrdHlwZWRlZiBzdHJ1Y3QgdHJhbnNtZW1fbGlzdAorK3sKKysgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpuZXh0OworKyAgY2hhciBkYXRhW1pFUk9dOworK30gdHJhbnNtZW1fYmxvY2tfdDsKKytzdGF0aWMgc3RydWN0IHRyYW5zbWVtX2xpc3QgKnRyYW5zbWVtX2xpc3Q7CisrI2Vsc2UKKyt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHJhbnNtZW1fYmxvY2tfdDsKKysjZW5kaWYKKysKKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisrICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKysjZWxzZQorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrI2lmZGVmIF9MSUJDCisrX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKCwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysjZW5kaWYKKysKKysvKiBDaGVja2luZyB3aGV0aGVyIHRoZSBiaW5hcmllcyBydW5zIFNVSUQgbXVzdCBiZSBkb25lIGFuZCBnbGliYyBwcm92aWRlcworKyAgIGVhc2llciBtZXRob2RzIHRoZXJlZm9yZSB3ZSBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBFTkFCTEVfU0VDVVJFIF9fbGliY19lbmFibGVfc2VjdXJlCisrIyBkZWZpbmUgREVURVJNSU5FX1NFQ1VSRQorKyNlbHNlCisrIyBpZm5kZWYgSEFWRV9HRVRVSUQKKysjICBkZWZpbmUgZ2V0dWlkKCkgMAorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX0dFVEdJRAorKyMgIGRlZmluZSBnZXRnaWQoKSAwCisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfR0VURVVJRAorKyMgIGRlZmluZSBnZXRldWlkKCkgZ2V0dWlkKCkKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9HRVRFR0lECisrIyAgZGVmaW5lIGdldGVnaWQoKSBnZXRnaWQoKQorKyMgZW5kaWYKKytzdGF0aWMgaW50IGVuYWJsZV9zZWN1cmU7CisrIyBkZWZpbmUgRU5BQkxFX1NFQ1VSRSAoZW5hYmxlX3NlY3VyZSA9PSAxKQorKyMgZGVmaW5lIERFVEVSTUlORV9TRUNVUkUgXAorKyAgaWYgKGVuYWJsZV9zZWN1cmUgPT0gMCkJCQkJCQkgICAgICBcCisrICAgIHsJCQkJCQkJCQkgICAgICBcCisrICAgICAgaWYgKGdldHVpZCAoKSAhPSBnZXRldWlkICgpIHx8IGdldGdpZCAoKSAhPSBnZXRlZ2lkICgpKQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gMTsJCQkJCQkgICAgICBcCisrICAgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gLTE7CQkJCQkJICAgICAgXAorKyAgICB9CisrI2VuZGlmCisrCisrLyogR2V0IHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSB0aGUgcGx1cmFsIGV4cHJlc3Npb24uICAqLworKyNpbmNsdWRlICJldmFsLXBsdXJhbC5oIgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIENBVEVHT1JZIGxvY2FsZSBhbmQsIGlmIFBMVVJBTCBpcyBub256ZXJvLCBzZWFyY2ggb3ZlciBzdHJpbmcKKysgICBkZXBlbmRpbmcgb24gdGhlIHBsdXJhbCBmb3JtIGRldGVybWluZWQgYnkgTi4gICovCisrY2hhciAqCisrRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisrCSAgICBpbnQgcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBuLCBpbnQgY2F0ZWdvcnkpCisreworKyNpZm5kZWYgSEFWRV9BTExPQ0EKKysgIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKysjZW5kaWYKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKysgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKysgIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKysgIGNoYXIgKnNpbmdsZV9sb2NhbGU7CisrICBjaGFyICpyZXR2YWw7CisrICBzaXplX3QgcmV0bGVuOworKyAgaW50IHNhdmVkX2Vycm5vOworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqc2VhcmNoOworKyAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKipmb3VuZHAgPSBOVUxMOworKyAgc2l6ZV90IG1zZ2lkX2xlbjsKKysjZW5kaWYKKysgIHNpemVfdCBkb21haW5uYW1lX2xlbjsKKysKKysgIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworKyAgaWYgKG1zZ2lkMSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysjaWZkZWYgX0xJQkMKKysgIGlmIChjYXRlZ29yeSA8IDAgfHwgY2F0ZWdvcnkgPj0gX19MQ19MQVNUIHx8IGNhdGVnb3J5ID09IExDX0FMTCkKKysgICAgLyogQm9ndXMuICAqLworKyAgICByZXR1cm4gKHBsdXJhbCA9PSAwCisrCSAgICA/IChjaGFyICopIG1zZ2lkMQorKwkgICAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgICA6IG4gPT0gMSA/IChjaGFyICopIG1zZ2lkMSA6IChjaGFyICopIG1zZ2lkMik7CisrI2VuZGlmCisrCisrICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorKyAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCisrICAgICBkZWZpbml0aW9uIGxlZnQgdGhpcyB1bmRlZmluZWQuICAqLworKyAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKysgICAgZG9tYWlubmFtZSA9IF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKworKyAgLyogT1MvMiBzcGVjaWZpYzogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpYmludGwgdmVyc2lvbnMgICovCisrI2lmZGVmIExDX01FU1NBR0VTX0NPTVBBVAorKyAgaWYgKGNhdGVnb3J5ID09IExDX01FU1NBR0VTX0NPTVBBVCkKKysgICAgY2F0ZWdvcnkgPSBMQ19NRVNTQUdFUzsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworKyAgbXNnaWRfbGVuID0gc3RybGVuIChtc2dpZDEpICsgMTsKKysKKysgIC8qIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBhbW9uZyB0aG9zZSB3aGljaCB3ZSBmb3VuZCBhdAorKyAgICAgc29tZSB0aW1lLiAgKi8KKysgIHNlYXJjaCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkgICBhbGxvY2EgKG9mZnNldG9mIChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCwgbXNnaWQpICsgbXNnaWRfbGVuKTsKKysgIG1lbWNweSAoc2VhcmNoLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworKyAgc2VhcmNoLT5kb21haW5uYW1lID0gKGNoYXIgKikgZG9tYWlubmFtZTsKKysgIHNlYXJjaC0+Y2F0ZWdvcnkgPSBjYXRlZ29yeTsKKysKKysgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikgdGZpbmQgKHNlYXJjaCwgJnJvb3QsIHRyYW5zY21wKTsKKysgIGZyZWVhIChzZWFyY2gpOworKyAgaWYgKGZvdW5kcCAhPSBOVUxMICYmICgqZm91bmRwKS0+Y291bnRlciA9PSBfbmxfbXNnX2NhdF9jbnRyKQorKyAgICB7CisrICAgICAgLyogTm93IGRlYWwgd2l0aCBwbHVyYWwuICAqLworKyAgICAgIGlmIChwbHVyYWwpCisrCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKCgqZm91bmRwKS0+ZG9tYWluLCBuLCAoKmZvdW5kcCktPnRyYW5zbGF0aW9uLAorKwkJCQkoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCk7CisrICAgICAgZWxzZQorKwlyZXR2YWwgPSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOworKworKyAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKyNlbmRpZgorKworKyAgLyogUHJlc2VydmUgdGhlIGBlcnJubycgdmFsdWUuICAqLworKyAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysKKysgIC8qIFNlZSB3aGV0aGVyIHRoaXMgaXMgYSBTVUlEIGJpbmFyeSBvciBub3QuICAqLworKyAgREVURVJNSU5FX1NFQ1VSRTsKKysKKysgIC8qIEZpcnN0IGZpbmQgbWF0Y2hpbmcgYmluZGluZy4gICovCisrICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorKyAgICB7CisrICAgICAgaW50IGNvbXBhcmUgPSBzdHJjbXAgKGRvbWFpbm5hbWUsIGJpbmRpbmctPmRvbWFpbm5hbWUpOworKyAgICAgIGlmIChjb21wYXJlID09IDApCisrCS8qIFdlIGZvdW5kIGl0ISAgKi8KKysJYnJlYWs7CisrICAgICAgaWYgKGNvbXBhcmUgPCAwKQorKwl7CisrCSAgLyogSXQgaXMgbm90IGluIHRoZSBsaXN0LiAgKi8KKysJICBiaW5kaW5nID0gTlVMTDsKKysJICBicmVhazsKKysJfQorKyAgICB9CisrCisrICBpZiAoYmluZGluZyA9PSBOVUxMKQorKyAgICBkaXJuYW1lID0gKGNoYXIgKikgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKyAgZWxzZSBpZiAoSVNfQUJTT0xVVEVfUEFUSCAoYmluZGluZy0+ZGlybmFtZSkpCisrICAgIGRpcm5hbWUgPSBiaW5kaW5nLT5kaXJuYW1lOworKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogV2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGguICBNYWtlIGl0IGFic29sdXRlIG5vdy4gICovCisrICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJuYW1lKSArIDE7CisrICAgICAgc2l6ZV90IHBhdGhfbWF4OworKyAgICAgIGNoYXIgKnJldDsKKysKKysgICAgICBwYXRoX21heCA9ICh1bnNpZ25lZCBpbnQpIFBBVEhfTUFYOworKyAgICAgIHBhdGhfbWF4ICs9IDI7CQkvKiBUaGUgZ2V0Y3dkIGRvY3Mgc2F5IHRvIGRvIHRoaXMuICAqLworKworKyAgICAgIGZvciAoOzspCisrCXsKKysJICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKysJICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworKworKwkgIF9fc2V0X2Vycm5vICgwKTsKKysJICByZXQgPSBnZXRjd2QgKGRpcm5hbWUsIHBhdGhfbWF4KTsKKysJICBpZiAocmV0ICE9IE5VTEwgfHwgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgYnJlYWs7CisrCisrCSAgcGF0aF9tYXggKz0gcGF0aF9tYXggLyAyOworKwkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKysJfQorKworKyAgICAgIGlmIChyZXQgPT0gTlVMTCkKKysJLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERvbid0IHNpZ25hbCBhbgorKwkgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworKwlnb3RvIHJldHVybl91bnRyYW5zbGF0ZWQ7CisrCisrICAgICAgc3RwY3B5IChzdHBjcHkgKHN0cmNociAoZGlybmFtZSwgJ1wwJyksICIvIiksIGJpbmRpbmctPmRpcm5hbWUpOworKyAgICB9CisrCisrICAvKiBOb3cgZGV0ZXJtaW5lIHRoZSBzeW1ib2xpYyBuYW1lIG9mIENBVEVHT1JZIGFuZCBpdHMgdmFsdWUuICAqLworKyAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworKyAgY2F0ZWdvcnl2YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysKKysgIGRvbWFpbm5hbWVfbGVuID0gc3RybGVuIChkb21haW5uYW1lKTsKKysgIHhkb21haW5uYW1lID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKKysJCQkJICsgZG9tYWlubmFtZV9sZW4gKyA1KTsKKysgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworKworKyAgc3RwY3B5IChtZW1wY3B5IChzdHBjcHkgKHN0cGNweSAoeGRvbWFpbm5hbWUsIGNhdGVnb3J5bmFtZSksICIvIiksCisrCQkgIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuKSwKKysJICAiLm1vIik7CisrCisrICAvKiBDcmVhdGluZyB3b3JraW5nIGFyZWEuICAqLworKyAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOworKyAgQUREX0JMT0NLIChibG9ja19saXN0LCBzaW5nbGVfbG9jYWxlKTsKKysKKysKKysgIC8qIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHN0cmluZy4gIFRoaXMgaXMgYSBsb29wIGJlY2F1c2Ugd2UgcGVyaGFwcworKyAgICAgZ290IGFuIG9yZGVyZWQgbGlzdCBvZiBsYW5ndWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoZSB0cmFuc2xhdGlvbi4gICovCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKysgICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorKwkrK2NhdGVnb3J5dmFsdWU7CisrICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorKwkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKysJICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorKwkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCisrCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKysJICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKysJICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorKwkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworKwkgICpjcCA9ICdcMCc7CisrCisrCSAgLyogV2hlbiB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgd2UgbXVzdCBub3QgYWxsb3cgYWNjZXNzaW5nIGZpbGVzCisrCSAgICAgb3V0c2lkZSB0aGUgZGVkaWNhdGVkIGRpcmVjdG9yaWVzLiAgKi8KKysJICBpZiAoRU5BQkxFX1NFQ1VSRSAmJiBJU19QQVRIX1dJVEhfRElSIChzaW5nbGVfbG9jYWxlKSkKKysJICAgIC8qIEluZ29yZSB0aGlzIGVudHJ5LiAgKi8KKysJICAgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbG9jYWxlIHZhbHVlIGlzIEMgKG9yIFBPU0lYKSB3ZSBkb24ndCBsb2FkIGEKKysJIGRvbWFpbi4gIFJldHVybiB0aGUgTVNHSUQuICAqLworKyAgICAgIGlmIChzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJDIikgPT0gMAorKwkgIHx8IHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIlBPU0lYIikgPT0gMCkKKysJYnJlYWs7CisrCisrICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorKwkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworKyAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUsIGJpbmRpbmcpOworKworKyAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKysJeworKwkgIHJldHZhbCA9IF9ubF9maW5kX21zZyAoZG9tYWluLCBiaW5kaW5nLCBtc2dpZDEsICZyZXRsZW4pOworKworKwkgIGlmIChyZXR2YWwgPT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgaW50IGNudDsKKysKKysJICAgICAgZm9yIChjbnQgPSAwOyBkb21haW4tPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorKwkJeworKwkJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIGJpbmRpbmcsCisrCQkJCQkgbXNnaWQxLCAmcmV0bGVuKTsKKysKKysJCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIGRvbWFpbiA9IGRvbWFpbi0+c3VjY2Vzc29yW2NudF07CisrCQkgICAgICBicmVhazsKKysJCSAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICAvKiBGb3VuZCB0aGUgdHJhbnNsYXRpb24gb2YgTVNHSUQxIGluIGRvbWFpbiBET01BSU46CisrCQkgc3RhcnRpbmcgYXQgUkVUVkFMLCBSRVRMRU4gYnl0ZXMuICAqLworKwkgICAgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CisrI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKysJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMKQorKwkJeworKwkJICAvKiBDcmVhdGUgYSBuZXcgZW50cnkgYW5kIGFkZCBpdCB0byB0aGUgc2VhcmNoIHRyZWUuICAqLworKwkJICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqbmV3cDsKKysKKysJCSAgbmV3cCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkJICAgIG1hbGxvYyAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKKysJCQkgICAgKyBtc2dpZF9sZW4gKyBkb21haW5uYW1lX2xlbiArIDEpOworKwkJICBpZiAobmV3cCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIG5ld3AtPmRvbWFpbm5hbWUgPQorKwkJCW1lbXBjcHkgKG5ld3AtPm1zZ2lkLCBtc2dpZDEsIG1zZ2lkX2xlbik7CisrCQkgICAgICBtZW1jcHkgKG5ld3AtPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuICsgMSk7CisrCQkgICAgICBuZXdwLT5jYXRlZ29yeSA9IGNhdGVnb3J5OworKwkJICAgICAgbmV3cC0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CisrCQkgICAgICBuZXdwLT5kb21haW4gPSBkb21haW47CisrCQkgICAgICBuZXdwLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgICAgIG5ld3AtPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKysKKysJCSAgICAgIC8qIEluc2VydCB0aGUgZW50cnkgaW4gdGhlIHNlYXJjaCB0cmVlLiAgKi8KKysJCSAgICAgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikKKysJCQl0c2VhcmNoIChuZXdwLCAmcm9vdCwgdHJhbnNjbXApOworKwkJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMCisrCQkJICB8fCBfX2J1aWx0aW5fZXhwZWN0ICgqZm91bmRwICE9IG5ld3AsIDApKQorKwkJCS8qIFRoZSBpbnNlcnQgZmFpbGVkLiAgKi8KKysJCQlmcmVlIChuZXdwKTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogV2UgY2FuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkuICAqLworKwkJICAoKmZvdW5kcCktPmNvdW50ZXIgPSBfbmxfbXNnX2NhdF9jbnRyOworKwkJICAoKmZvdW5kcCktPmRvbWFpbiA9IGRvbWFpbjsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGggPSByZXRsZW47CisrCQl9CisrI2VuZGlmCisrCSAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisrCisrCSAgICAgIC8qIE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KKysJICAgICAgaWYgKHBsdXJhbCkKKysJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRvbWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOworKworKwkgICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKwkgICAgICByZXR1cm4gcmV0dmFsOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgcmV0dXJuX3VudHJhbnNsYXRlZDoKKysgIC8qIFJldHVybiB0aGUgdW50cmFuc2xhdGVkIE1TR0lELiAgKi8KKysgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrI2lmbmRlZiBfTElCQworKyAgaWYgKCFFTkFCTEVfU0VDVVJFKQorKyAgICB7CisrICAgICAgZXh0ZXJuIHZvaWQgX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLAorKwkJCQkJY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorKwkJCQkJaW50IHBsdXJhbCk7CisrICAgICAgY29uc3QgY2hhciAqbG9nZmlsZW5hbWUgPSBnZXRlbnYgKCJHRVRURVhUX0xPR19VTlRSQU5TTEFURUQiKTsKKysKKysgICAgICBpZiAobG9nZmlsZW5hbWUgIT0gTlVMTCAmJiBsb2dmaWxlbmFtZVswXSAhPSAnXDAnKQorKwlfbmxfbG9nX3VudHJhbnNsYXRlZCAobG9nZmlsZW5hbWUsIGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBwbHVyYWwpOworKyAgICB9CisrI2VuZGlmCisrICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworKyAgcmV0dXJuIChwbHVyYWwgPT0gMAorKwkgID8gKGNoYXIgKikgbXNnaWQxCisrCSAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dpZDEgOiAoY2hhciAqKSBtc2dpZDIpOworK30KKysKKysKKytjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9maW5kX21zZyAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCisrCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJICAgICAgc2l6ZV90ICpsZW5ndGhwKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgc2l6ZV90IGFjdDsKKysgIGNoYXIgKnJlc3VsdDsKKysgIHNpemVfdCByZXN1bHRsZW47CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0gMCkKKysgICAgX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZyk7CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CisrCisrICBuc3RyaW5ncyA9IGRvbWFpbi0+bnN0cmluZ3M7CisrCisrICAvKiBMb2NhdGUgdGhlIE1TR0lEIGFuZCBpdHMgdHJhbnNsYXRpb24uICAqLworKyAgaWYgKGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CisrICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysgICAgICB3aGlsZSAoMSkKKysJeworKwkgIG5sc191aW50MzIgbnN0ciA9CisrCSAgICBXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKysKKysJICBpZiAobnN0ciA9PSAwKQorKwkgICAgLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gICovCisrCSAgICByZXR1cm4gTlVMTDsKKysKKysJICBuc3RyLS07CisrCisrCSAgLyogQ29tcGFyZSBtc2dpZCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgaW5kZXggbnN0ci4KKysJICAgICBXZSBjb21wYXJlIHRoZSBsZW5ndGhzIHdpdGggPj0sIG5vdCA9PSwgYmVjYXVzZSBwbHVyYWwgZW50cmllcworKwkgICAgIGFyZSByZXByZXNlbnRlZCBieSBzdHJpbmdzIHdpdGggYW4gZW1iZWRkZWQgTlVMLiAgKi8KKysJICBpZiAobnN0ciA8IG5zdHJpbmdzCisrCSAgICAgID8gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ubGVuZ3RoKSA+PSBsZW4KKysJCSYmIChzdHJjbXAgKG1zZ2lkLAorKwkJCSAgICBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJCSAgICAgIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ub2Zmc2V0KSkKKysJCSAgICA9PSAwKQorKwkgICAgICA6IGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ubGVuZ3RoID4gbGVuCisrCQkmJiAoc3RyY21wIChtc2dpZCwKKysJCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWJbbnN0ciAtIG5zdHJpbmdzXS5wb2ludGVyKQorKwkJICAgID09IDApKQorKwkgICAgeworKwkgICAgICBhY3QgPSBuc3RyOworKwkgICAgICBnb3RvIGZvdW5kOworKwkgICAgfQorKworKwkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorKwkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJICBlbHNlCisrCSAgICBpZHggKz0gaW5jcjsKKysJfQorKyAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogVHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZCBhcnJheSBvZgorKwkgbWVzc2FnZXMuICAqLworKyAgICAgIHNpemVfdCB0b3AsIGJvdHRvbTsKKysKKysgICAgICBib3R0b20gPSAwOworKyAgICAgIHRvcCA9IG5zdHJpbmdzOworKyAgICAgIHdoaWxlIChib3R0b20gPCB0b3ApCisrCXsKKysJICBpbnQgY21wX3ZhbDsKKysKKysJICBhY3QgPSAoYm90dG9tICsgdG9wKSAvIDI7CisrCSAgY21wX3ZhbCA9IHN0cmNtcCAobXNnaWQsIChkb21haW4tPmRhdGEKKysJCQkJICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCQkgZG9tYWluLT5vcmlnX3RhYlthY3RdLm9mZnNldCkpKTsKKysJICBpZiAoY21wX3ZhbCA8IDApCisrCSAgICB0b3AgPSBhY3Q7CisrCSAgZWxzZSBpZiAoY21wX3ZhbCA+IDApCisrCSAgICBib3R0b20gPSBhY3QgKyAxOworKwkgIGVsc2UKKysJICAgIGdvdG8gZm91bmQ7CisrCX0KKysgICAgICAvKiBObyB0cmFuc2xhdGlvbiB3YXMgZm91bmQuICAqLworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrIGZvdW5kOgorKyAgLyogVGhlIHRyYW5zbGF0aW9uIHdhcyBmb3VuZCBhdCBpbmRleCBBQ1QuICBJZiB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlCisrICAgICBzdHJpbmcgdG8gdXNlIGEgZGlmZmVyZW50IGNoYXJhY3RlciBzZXQsIHRoaXMgaXMgdGhlIHRpbWUuICAqLworKyAgaWYgKGFjdCA8IG5zdHJpbmdzKQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gKGNoYXIgKikKKysJKGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLm9mZnNldCkpOworKyAgICAgIHJlc3VsdGxlbiA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLmxlbmd0aCkgKyAxOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICByZXN1bHQgPSAoY2hhciAqKSBkb21haW4tPnRyYW5zX3N5c2RlcF90YWJbYWN0IC0gbnN0cmluZ3NdLnBvaW50ZXI7CisrICAgICAgcmVzdWx0bGVuID0gZG9tYWluLT50cmFuc19zeXNkZXBfdGFiW2FjdCAtIG5zdHJpbmdzXS5sZW5ndGg7CisrICAgIH0KKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICBpZiAoZG9tYWluLT5jb2Rlc2V0X2NudHIKKysgICAgICAhPSAoZG9tYWluYmluZGluZyAhPSBOVUxMID8gZG9tYWluYmluZGluZy0+Y29kZXNldF9jbnRyIDogMCkpCisrICAgIHsKKysgICAgICAvKiBUaGUgZG9tYWluJ3MgY29kZXNldCBoYXMgY2hhbmdlZCB0aHJvdWdoIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkKKysJIHNpbmNlIHRoZSBtZXNzYWdlIGNhdGFsb2cgd2FzIGluaXRpYWxpemVkIG9yIGxhc3QgYWNjZXNzZWQuICBXZQorKwkgaGF2ZSB0byByZWluaXRpYWxpemUgdGhlIGNvbnZlcnRlci4gICovCisrICAgICAgX25sX2ZyZWVfZG9tYWluX2NvbnYgKGRvbWFpbik7CisrICAgICAgX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKyAgICB9CisrCisrICBpZiAoCisrIyBpZmRlZiBfTElCQworKyAgICAgIGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMQorKyMgZWxzZQorKyMgIGlmIEhBVkVfSUNPTlYKKysgICAgICBkb21haW4tPmNvbnYgIT0gKGljb252X3QpIC0xCisrIyAgZW5kaWYKKysjIGVuZGlmCisrICAgICAgKQorKyAgICB7CisrICAgICAgLyogV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGEgY29udmVyc2lvbi4gIEZpcnN0IGFsbG9jYXRlIGFuCisrCSBhcHByb3ByaWF0ZSB0YWJsZSB3aXRoIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyB0aGUgdGFibGUKKysJIG9mIHRyYW5zbGF0aW9ucyBpbiB0aGUgZmlsZSwgd2hlcmUgd2UgY2FuIHB1dCB0aGUgcG9pbnRlcnMKKysJIHRvIHRoZSBjb252ZXJ0ZWQgc3RyaW5ncyBpbi4KKysJIFRoZXJlIGlzIGEgc2xpZ2h0IGNvbXBsaWNhdGlvbiB3aXRoIHBsdXJhbCBlbnRyaWVzLiAgVGhleQorKwkgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnNlY3V0aXZlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBXZQorKwkgaGFuZGxlIHRoaXMgY2FzZSBieSBjb252ZXJ0aW5nIFJFU1VMVExFTiBieXRlcywgaW5jbHVkaW5nCisrCSBOVUxzLiAgKi8KKysKKysgICAgICBpZiAoZG9tYWluLT5jb252X3RhYiA9PSBOVUxMCisrCSAgJiYgKChkb21haW4tPmNvbnZfdGFiID0KKysJCSAoY2hhciAqKikgY2FsbG9jIChuc3RyaW5ncyArIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncywKKysJCQkJICAgc2l6ZW9mIChjaGFyICopKSkKKysJICAgICAgPT0gTlVMTCkpCisrCS8qIE1hcmsgdGhhdCB3ZSBkaWRuJ3Qgc3VjY2VlZCBhbGxvY2F0aW5nIGEgdGFibGUuICAqLworKwlkb21haW4tPmNvbnZfdGFiID0gKGNoYXIgKiopIC0xOworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkb21haW4tPmNvbnZfdGFiID09IChjaGFyICoqKSAtMSwgMCkpCisrCS8qIE5vdGhpbmcgd2UgY2FuIGRvLCBubyBtb3JlIG1lbW9yeS4gICovCisrCWdvdG8gY29udmVydGVkOworKworKyAgICAgIGlmIChkb21haW4tPmNvbnZfdGFiW2FjdF0gPT0gTlVMTCkKKysJeworKwkgIC8qIFdlIGhhdmVuJ3QgdXNlZCB0aGlzIHN0cmluZyBzbyBmYXIsIHNvIGl0IGlzIG5vdAorKwkgICAgIHRyYW5zbGF0ZWQgeWV0LiAgRG8gdGhpcyBub3cuICAqLworKwkgIC8qIFdlIHVzZSBhIGJpdCBtb3JlIGVmZmljaWVudCBtZW1vcnkgaGFuZGxpbmcuCisrCSAgICAgV2UgYWxsb2NhdGUgYWx3YXlzIGxhcmdlciBibG9ja3Mgd2hpY2ggZ2V0IHVzZWQgb3ZlcgorKwkgICAgIHRpbWUuICBUaGlzIGlzIGZhc3RlciB0aGFuIG1hbnkgc21hbGwgYWxsb2NhdGlvbnMuICAgKi8KKysJICBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jaykKKysjIGRlZmluZSBJTklUSUFMX0JMT0NLX1NJWkUJNDA4MAorKwkgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpmcmVlbWVtOworKwkgIHN0YXRpYyBzaXplX3QgZnJlZW1lbV9zaXplOworKworKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmOworKwkgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKKysJICBpbnQgbWFsbG9jX2NvdW50OworKyMgaWZuZGVmIF9MSUJDCisrCSAgdHJhbnNtZW1fYmxvY2tfdCAqdHJhbnNtZW1fbGlzdCA9IE5VTEw7CisrIyBlbmRpZgorKworKwkgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKworKwkgIGluYnVmID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVzdWx0OworKwkgIG91dGJ1ZiA9IGZyZWVtZW0gKyBzaXplb2YgKHNpemVfdCk7CisrCisrCSAgbWFsbG9jX2NvdW50ID0gMDsKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgdHJhbnNtZW1fYmxvY2tfdCAqbmV3bWVtOworKyMgaWZkZWYgX0xJQkMKKysJICAgICAgc2l6ZV90IG5vbl9yZXZlcnNpYmxlOworKwkgICAgICBpbnQgcmVzOworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgcmVzID0gX19nY29udiAoZG9tYWluLT5jb252LAorKwkJCSAgICAgJmluYnVmLCBpbmJ1ZiArIHJlc3VsdGxlbiwKKysJCQkgICAgICZvdXRidWYsCisrCQkJICAgICBvdXRidWYgKyBmcmVlbWVtX3NpemUgLSBzaXplb2YgKHNpemVfdCksCisrCQkJICAgICAmbm9uX3JldmVyc2libGUpOworKworKwkgICAgICBpZiAocmVzID09IF9fR0NPTlZfT0sgfHwgcmVzID09IF9fR0NPTlZfRU1QVFlfSU5QVVQpCisrCQlicmVhazsKKysKKysJICAgICAgaWYgKHJlcyAhPSBfX0dDT05WX0ZVTExfT1VUUFVUKQorKwkJeworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysJICAgICAgaW5idWYgPSByZXN1bHQ7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgICAgICBjb25zdCBjaGFyICppbnB0ciA9IChjb25zdCBjaGFyICopIGluYnVmOworKwkgICAgICBzaXplX3QgaW5sZWZ0ID0gcmVzdWx0bGVuOworKwkgICAgICBjaGFyICpvdXRwdHIgPSAoY2hhciAqKSBvdXRidWY7CisrCSAgICAgIHNpemVfdCBvdXRsZWZ0OworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgb3V0bGVmdCA9IGZyZWVtZW1fc2l6ZSAtIHNpemVvZiAoc2l6ZV90KTsKKysJICAgICAgaWYgKGljb252IChkb21haW4tPmNvbnYsCisrCQkJIChJQ09OVl9DT05TVCBjaGFyICoqKSAmaW5wdHIsICZpbmxlZnQsCisrCQkJICZvdXRwdHIsICZvdXRsZWZ0KQorKwkJICAhPSAoc2l6ZV90KSAoLTEpKQorKwkJeworKwkJICBvdXRidWYgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdHI7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBpZiAoZXJybm8gIT0gRTJCSUcpCisrCQl7CisrCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrCQkgIGdvdG8gY29udmVydGVkOworKwkJfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKwkgICAgcmVzaXplX2ZyZWVtZW06CisrCSAgICAgIC8qIFdlIG11c3QgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIG9yIHJlc2l6ZSB0aGUgb2xkIG9uZS4gICovCisrCSAgICAgIGlmIChtYWxsb2NfY291bnQgPiAwKQorKwkJeworKwkJICArK21hbGxvY19jb3VudDsKKysJCSAgZnJlZW1lbV9zaXplID0gbWFsbG9jX2NvdW50ICogSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSByZWFsbG9jICh0cmFuc21lbV9saXN0LAorKwkJCQkJCQkgZnJlZW1lbV9zaXplKTsKKysjIGlmZGVmIF9MSUJDCisrCQkgIGlmIChuZXdtZW0gIT0gTlVMTCkKKysJCSAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpvbGQgPSB0cmFuc21lbV9saXN0OworKworKwkJICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrCQkgICAgICBmcmVlIChvbGQpOworKwkJICAgIH0KKysjIGVuZGlmCisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgbWFsbG9jX2NvdW50ID0gMTsKKysJCSAgZnJlZW1lbV9zaXplID0gSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSBtYWxsb2MgKGZyZWVtZW1fc2l6ZSk7CisrCQl9CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuZXdtZW0gPT0gTlVMTCwgMCkpCisrCQl7CisrCQkgIGZyZWVtZW0gPSBOVUxMOworKwkJICBmcmVlbWVtX3NpemUgPSAwOworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysjIGlmZGVmIF9MSUJDCisrCSAgICAgIC8qIEFkZCB0aGUgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgYmxvY2tzIHdlIGhhdmUgdG8gZnJlZQorKyAgICAgICAgICAgICAgICAgYXQgc29tZSBwb2ludC4gICovCisrCSAgICAgIG5ld21lbS0+bmV4dCA9IHRyYW5zbWVtX2xpc3Q7CisrCSAgICAgIHRyYW5zbWVtX2xpc3QgPSBuZXdtZW07CisrCisrCSAgICAgIGZyZWVtZW0gPSBuZXdtZW0tPmRhdGE7CisrCSAgICAgIGZyZWVtZW1fc2l6ZSAtPSBvZmZzZXRvZiAoc3RydWN0IHRyYW5zbWVtX2xpc3QsIGRhdGEpOworKyMgZWxzZQorKwkgICAgICB0cmFuc21lbV9saXN0ID0gbmV3bWVtOworKwkgICAgICBmcmVlbWVtID0gbmV3bWVtOworKyMgZW5kaWYKKysKKysJICAgICAgb3V0YnVmID0gZnJlZW1lbSArIHNpemVvZiAoc2l6ZV90KTsKKysJICAgIH0KKysKKysJICAvKiBXZSBoYXZlIG5vdyBpbiBvdXIgYnVmZmVyIGEgY29udmVydGVkIHN0cmluZy4gIFB1dCB0aGlzCisrCSAgICAgaW50byB0aGUgdGFibGUgb2YgY29udmVyc2lvbnMuICAqLworKwkgICooc2l6ZV90ICopIGZyZWVtZW0gPSBvdXRidWYgLSBmcmVlbWVtIC0gc2l6ZW9mIChzaXplX3QpOworKwkgIGRvbWFpbi0+Y29udl90YWJbYWN0XSA9IChjaGFyICopIGZyZWVtZW07CisrCSAgLyogU2hyaW5rIGZyZWVtZW0sIGJ1dCBrZWVwIGl0IGFsaWduZWQuICAqLworKwkgIGZyZWVtZW1fc2l6ZSAtPSBvdXRidWYgLSBmcmVlbWVtOworKwkgIGZyZWVtZW0gPSBvdXRidWY7CisrCSAgZnJlZW1lbSArPSBmcmVlbWVtX3NpemUgJiAoYWxpZ25vZiAoc2l6ZV90KSAtIDEpOworKwkgIGZyZWVtZW1fc2l6ZSA9IGZyZWVtZW1fc2l6ZSAmIH4gKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKKysKKysJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwl9CisrCisrICAgICAgLyogTm93IGRvbWFpbi0+Y29udl90YWJbYWN0XSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24gb2YgYWxsCisrCSB0aGUgcGx1cmFsIHZhcmlhbnRzLiAgKi8KKysgICAgICByZXN1bHQgPSBkb21haW4tPmNvbnZfdGFiW2FjdF0gKyBzaXplb2YgKHNpemVfdCk7CisrICAgICAgcmVzdWx0bGVuID0gKihzaXplX3QgKikgZG9tYWluLT5jb252X3RhYlthY3RdOworKyAgICB9CisrCisrIGNvbnZlcnRlZDoKKysgIC8qIFRoZSByZXN1bHQgc3RyaW5nIGlzIGNvbnZlcnRlZC4gICovCisrCisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysKKysgICpsZW5ndGhwID0gcmVzdWx0bGVuOworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrLyogTG9vayB1cCBhIHBsdXJhbCB2YXJpYW50LiAgKi8KKytzdGF0aWMgY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICAgICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiwgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbikKKyt7CisrICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluZGF0YSA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW4tPmRhdGE7CisrICB1bnNpZ25lZCBsb25nIGludCBpbmRleDsKKysgIGNvbnN0IGNoYXIgKnA7CisrCisrICBpbmRleCA9IHBsdXJhbF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOworKyAgaWYgKGluZGV4ID49IGRvbWFpbmRhdGEtPm5wbHVyYWxzKQorKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBJdCBtZWFucyB0aGUgcGx1cmFsIGV4cHJlc3Npb24gYW5kIHRoZQorKyAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRvIG5vdCBtYXRjaC4gICovCisrICAgIGluZGV4ID0gMDsKKysKKysgIC8qIFNraXAgSU5ERVggc3RyaW5ncyBhdCBUUkFOU0xBVElPTi4gICovCisrICBwID0gdHJhbnNsYXRpb247CisrICB3aGlsZSAoaW5kZXgtLSA+IDApCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBwID0gX19yYXdtZW1jaHIgKHAsICdcMCcpOworKyNlbHNlCisrICAgICAgcCA9IHN0cmNociAocCwgJ1wwJyk7CisrI2VuZGlmCisrICAgICAgLyogQW5kIHNraXAgb3ZlciB0aGUgTlVMIGJ5dGUuICAqLworKyAgICAgIHArKzsKKysKKysgICAgICBpZiAocCA+PSB0cmFuc2xhdGlvbiArIHRyYW5zbGF0aW9uX2xlbikKKysJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSXQgbWVhbnMgdGhlIHBsdXJhbCBleHByZXNzaW9uCisrCSAgIGV2YWx1YXRlZCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgdmFyaWFudHMKKysJICAgYXZhaWxhYmxlIGZvciBNU0dJRDEuICAqLworKwlyZXR1cm4gKGNoYXIgKikgdHJhbnNsYXRpb247CisrICAgIH0KKysgIHJldHVybiAoY2hhciAqKSBwOworK30KKysKKysjaWZuZGVmIF9MSUJDCisrLyogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBsb2NhbGUgQ0FURUdPUlkuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2NhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkKKyt7CisrICBjb25zdCBjaGFyICpyZXR2YWw7CisrCisrICBzd2l0Y2ggKGNhdGVnb3J5KQorKyAgeworKyNpZmRlZiBMQ19DT0xMQVRFCisrICBjYXNlIExDX0NPTExBVEU6CisrICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0NUWVBFCisrICBjYXNlIExDX0NUWVBFOgorKyAgICByZXR2YWwgPSAiTENfQ1RZUEUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTU9ORVRBUlkKKysgIGNhc2UgTENfTU9ORVRBUlk6CisrICAgIHJldHZhbCA9ICJMQ19NT05FVEFSWSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19OVU1FUklDCisrICBjYXNlIExDX05VTUVSSUM6CisrICAgIHJldHZhbCA9ICJMQ19OVU1FUklDIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX1RJTUUKKysgIGNhc2UgTENfVElNRToKKysgICAgcmV0dmFsID0gIkxDX1RJTUUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTUVTU0FHRVMKKysgIGNhc2UgTENfTUVTU0FHRVM6CisrICAgIHJldHZhbCA9ICJMQ19NRVNTQUdFUyI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19SRVNQT05TRQorKyAgY2FzZSBMQ19SRVNQT05TRToKKysgICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0FMTAorKyAgY2FzZSBMQ19BTEw6CisrICAgIC8qIFRoaXMgbWlnaHQgbm90IG1ha2Ugc2Vuc2UgYnV0IGlzIHBlcmhhcHMgYmV0dGVyIHRoYW4gYW55IG90aGVyCisrICAgICAgIHZhbHVlLiAgKi8KKysgICAgcmV0dmFsID0gIkxDX0FMTCI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyAgZGVmYXVsdDoKKysgICAgLyogSWYgeW91IGhhdmUgYSBiZXR0ZXIgaWRlYSBmb3IgYSBkZWZhdWx0IHZhbHVlIGxldCBtZSBrbm93LiAgKi8KKysgICAgcmV0dmFsID0gIkxDX1hYWCI7CisrICB9CisrCisrICByZXR1cm4gcmV0dmFsOworK30KKysjZW5kaWYKKysKKysvKiBHdWVzcyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2d1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKyt7CisrICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKysgIGNvbnN0IGNoYXIgKnJldHZhbDsKKysKKysgIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CisrICAgICB2YXJpYWJsZS4gIEJ1dCB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlIGlmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKysgICAgIGxvY2FsZSBpcyB0aGUgQyBsb2NhbGUuICBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4gICovCisrICBsYW5ndWFnZSA9IGdldGVudiAoIkxBTkdVQUdFIik7CisrICBpZiAobGFuZ3VhZ2UgIT0gTlVMTCAmJiBsYW5ndWFnZVswXSA9PSAnXDAnKQorKyAgICBsYW5ndWFnZSA9IE5VTEw7CisrCisrICAvKiBXZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvIGBMQ19BTEwnLAorKyAgICAgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUKKysgICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisrI2lmZGVmIF9MSUJDCisrICByZXR2YWwgPSBfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KTsKKysjZWxzZQorKyAgcmV0dmFsID0gX25sX2xvY2FsZV9uYW1lIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKysgIC8qIElnbm9yZSBMQU5HVUFHRSBpZiB0aGUgbG9jYWxlIGlzIHNldCB0byAiQyIgYmVjYXVzZQorKyAgICAgMS4gIkMiIGxvY2FsZSB1c3VhbGx5IHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nLCBhbmQgbW9zdCBpbnRlcm5hdGlvbmFsCisrCW1lc3NhZ2VzIHVzZSBub24tQVNDSUkgY2hhcmFjdGVycy4gVGhlc2UgY2hhcmFjdGVycyBnZXQgZGlzcGxheWVkCisrCWFzIHF1ZXN0aW9uIG1hcmtzIChpZiB1c2luZyBnbGliYydzIGljb252KCkpIG9yIGFzIGludmFsaWQgOC1iaXQKKysJY2hhcmFjdGVycyAoYmVjYXVzZSBvdGhlciBpY29udigpcyByZWZ1c2UgdG8gY29udmVydCBtb3N0IG5vbi1BU0NJSQorKwljaGFyYWN0ZXJzIHRvIEFTQ0lJKS4gSW4gYW55IGNhc2UsIHRoZSBvdXRwdXQgaXMgdWdseS4KKysgICAgIDIuIFRoZSBwcmVjaXNlIG91dHB1dCBvZiBzb21lIHByb2dyYW1zIGluIHRoZSAiQyIgbG9jYWxlIGlzIHNwZWNpZmllZAorKwlieSBQT1NJWCBhbmQgc2hvdWxkIG5vdCBkZXBlbmQgb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UKKysJIkxBTkdVQUdFIi4gIFdlIGFsbG93IHN1Y2ggcHJvZ3JhbXMgdG8gdXNlIGdldHRleHQoKS4gICovCisrICByZXR1cm4gbGFuZ3VhZ2UgIT0gTlVMTCAmJiBzdHJjbXAgKHJldHZhbCwgIkMiKSAhPSAwID8gbGFuZ3VhZ2UgOiByZXR2YWw7CisrfQorKworKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworKworKy8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCisrICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKysgICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFsc28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQorKyAgIHRvIGJlIGRlZmluZWQuICAqLworKyNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCisrc3RhdGljIGNoYXIgKgorK3N0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQorK3sKKysgIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKysgICAgLyogRG8gbm90aGluZy4gKi8gOworKyAgcmV0dXJuIGRlc3QgLSAxOworK30KKysjZW5kaWYKKysKKysjaWYgIV9MSUJDICYmICFIQVZFX01FTVBDUFkKKytzdGF0aWMgdm9pZCAqCisrbWVtcGNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKKyt7CisrICByZXR1cm4gKHZvaWQgKikgKChjaGFyICopIG1lbWNweSAoZGVzdCwgc3JjLCBuKSArIG4pOworK30KKysjZW5kaWYKKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBJZiB3ZSB3YW50IHRvIGZyZWUgYWxsIHJlc291cmNlcyB3ZSBoYXZlIHRvIGRvIHNvbWUgd29yayBhdAorKyAgIHByb2dyYW0ncyBlbmQuICAqLworK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisreworKyAgdm9pZCAqb2xkOworKworKyAgd2hpbGUgKF9ubF9kb21haW5fYmluZGluZ3MgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHN0cnVjdCBiaW5kaW5nICpvbGRwID0gX25sX2RvbWFpbl9iaW5kaW5nczsKKysgICAgICBfbmxfZG9tYWluX2JpbmRpbmdzID0gX25sX2RvbWFpbl9iaW5kaW5ncy0+bmV4dDsKKysgICAgICBpZiAob2xkcC0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisrCS8qIFllcywgdGhpcyBpcyBhIHBvaW50ZXIgY29tcGFyaXNvbi4gICovCisrCWZyZWUgKG9sZHAtPmRpcm5hbWUpOworKyAgICAgIGZyZWUgKG9sZHAtPmNvZGVzZXQpOworKyAgICAgIGZyZWUgKG9sZHApOworKyAgICB9CisrCisrICBpZiAoX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworKyAgICBmcmVlICgoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbik7CisrCisrICAvKiBSZW1vdmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrICBfX3RkZXN0cm95IChyb290LCBmcmVlKTsKKysgIHJvb3QgPSBOVUxMOworKworKyAgd2hpbGUgKHRyYW5zbWVtX2xpc3QgIT0gTlVMTCkKKysgICAgeworKyAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CisrICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrICAgICAgZnJlZSAob2xkKTsKKysgICAgfQorK30KKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY25nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNuZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzc1NzQ1MDQ4IC0wNDAwCitAQCAtMCwwICsxLDU3IEBACisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRjbmdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbHNlCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrI2VuZGlmCisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKysgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisrICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisrICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisrICAgbG9jYWxlLiAgKi8KKytjaGFyICoKKytEQ05HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICBpbnQgY2F0ZWdvcnkpCisreworKyAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCAxLCBuLCBjYXRlZ29yeSk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fZGNuZ2V0dGV4dCwgZGNuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZGdldHRleHQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzgwNzQ0Mjg4IC0wNDAwCitAQCAtMSwzMiArMSwzMyBAQAorLS8qIGRnZXR0ZXh0LmMgLS0gaW1wbGVtZW50YXRpb24gb2YgdGhlIGRnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgSEFWRV9MT0NBTEVfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCitAQCAtMzcsMTggKzM4LDE2IEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBER0VUVEVYVCBfX2RnZXR0ZXh0CistIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyAjZWxzZQorLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKy0jIGRlZmluZSBEQ0dFVFRFWFQgZGNnZXR0ZXh0X18KKysjIGRlZmluZSBER0VUVEVYVCBsaWJpbnRsX2RnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgb2YgdGhlIGN1cnJlbnQKKyAgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworIGNoYXIgKgorLURHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytER0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQpCisgeworICAgcmV0dXJuIERDR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIExDX01FU1NBR0VTKTsKKyB9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZG5nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZG5nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zODU3NDM1MjggLTA0MDAKK0BAIC0wLDAgKzEsNTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIEROR0VUVEVYVCBfX2RuZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBETkdFVFRFWFQgbGliaW50bF9kbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIG9mIHRoZSBjdXJyZW50CisrICAgTENfTUVTU0FHRVMgbG9jYWxlIGFuZCBza2lwIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBwbHVyYWwgZm9ybS4gICovCisrY2hhciAqCisrRE5HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyt7CisrICByZXR1cm4gRENOR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4sIExDX01FU1NBR0VTKTsKKyt9CisrCisrI2lmZGVmIF9MSUJDCisrLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrd2Vha19hbGlhcyAoX19kbmdldHRleHQsIGRuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZXZhbC1wbHVyYWwuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9ldmFsLXBsdXJhbC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzkwNzQyNzY4IC0wNDAwCitAQCAtMCwwICsxLDEwOCBAQAorKy8qIFBsdXJhbCBleHByZXNzaW9uIGV2YWx1YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgU1RBVElDCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrI2VuZGlmCisrCisrLyogRXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLworK1NUQVRJQworK3Vuc2lnbmVkIGxvbmcgaW50CisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfZXZhbCAoc3RydWN0IGV4cHJlc3Npb24gKnBleHAsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgc3dpdGNoIChwZXhwLT5uYXJncykKKysgICAgeworKyAgICBjYXNlIDA6CisrICAgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCisrCXsKKysJY2FzZSB2YXI6CisrCSAgcmV0dXJuIG47CisrCWNhc2UgbnVtOgorKwkgIHJldHVybiBwZXhwLT52YWwubnVtOworKwlkZWZhdWx0OgorKwkgIGJyZWFrOworKwl9CisrICAgICAgLyogTk9UUkVBQ0hFRCAqLworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDE6CisrICAgICAgeworKwkvKiBwZXhwLT5vcGVyYXRpb24gbXVzdCBiZSBsbm90LiAgKi8KKysJdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuICEgYXJnOworKyAgICAgIH0KKysgICAgY2FzZSAyOgorKyAgICAgIHsKKysJdW5zaWduZWQgbG9uZyBpbnQgbGVmdGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisrCWlmIChwZXhwLT5vcGVyYXRpb24gPT0gbG9yKQorKwkgIHJldHVybiBsZWZ0YXJnIHx8IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UgaWYgKHBleHAtPm9wZXJhdGlvbiA9PSBsYW5kKQorKwkgIHJldHVybiBsZWZ0YXJnICYmIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UKKysJICB7CisrCSAgICB1bnNpZ25lZCBsb25nIGludCByaWdodGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCisrCSAgICBzd2l0Y2ggKHBleHAtPm9wZXJhdGlvbikKKysJICAgICAgeworKwkgICAgICBjYXNlIG11bHQ6CisrCQlyZXR1cm4gbGVmdGFyZyAqIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGRpdmlkZToKKysjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorKwkJaWYgKHJpZ2h0YXJnID09IDApCisrCQkgIHJhaXNlIChTSUdGUEUpOworKyNlbmRpZgorKwkJcmV0dXJuIGxlZnRhcmcgLyByaWdodGFyZzsKKysJICAgICAgY2FzZSBtb2R1bGU6CisrI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKysJCWlmIChyaWdodGFyZyA9PSAwKQorKwkJICByYWlzZSAoU0lHRlBFKTsKKysjZW5kaWYKKysJCXJldHVybiBsZWZ0YXJnICUgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgcGx1czoKKysJCXJldHVybiBsZWZ0YXJnICsgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgbWludXM6CisrCQlyZXR1cm4gbGVmdGFyZyAtIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGxlc3NfdGhhbjoKKysJCXJldHVybiBsZWZ0YXJnIDwgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl90aGFuOgorKwkJcmV0dXJuIGxlZnRhcmcgPiByaWdodGFyZzsKKysJICAgICAgY2FzZSBsZXNzX29yX2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPD0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl9vcl9lcXVhbDoKKysJCXJldHVybiBsZWZ0YXJnID49IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGVxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPT0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2Ugbm90X2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgIT0gcmlnaHRhcmc7CisrCSAgICAgIGRlZmF1bHQ6CisrCQlicmVhazsKKysJICAgICAgfQorKwkgIH0KKysJLyogTk9UUkVBQ0hFRCAqLworKwlicmVhazsKKysgICAgICB9CisrICAgIGNhc2UgMzoKKysgICAgICB7CisrCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIHFtb3AuICAqLworKwl1bnNpZ25lZCBsb25nIGludCBib29sYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1tib29sYXJnID8gMSA6IDJdLCBuKTsKKysgICAgICB9CisrICAgIH0KKysgIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9leHBsb2RlbmFtZS5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2V4cGxvZGVuYW1lLmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zOTU3NDIwMDggLTA0MDAKK0BAIC0xLDE5ICsxLDIwIEBACistLyogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CitAQCAtMzYsMTggKzM3LDIzIEBACisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorK2NoYXIgKgorK19ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHdoaWxlIChuYW1lWzBdICE9ICdcMCcgJiYgbmFtZVswXSAhPSAnXycgJiYgbmFtZVswXSAhPSAnQCcKKysJICYmIG5hbWVbMF0gIT0gJysnICYmIG5hbWVbMF0gIT0gJywnKQorKyAgICArK25hbWU7CisrCisrICByZXR1cm4gKGNoYXIgKikgbmFtZTsKKyt9CisrCisrCisgaW50CistX25sX2V4cGxvZGVfbmFtZSAobmFtZSwgbGFuZ3VhZ2UsIG1vZGlmaWVyLCB0ZXJyaXRvcnksIGNvZGVzZXQsCistCQkgIG5vcm1hbGl6ZWRfY29kZXNldCwgc3BlY2lhbCwgc3BvbnNvciwgcmV2aXNpb24pCistICAgICBjaGFyICpuYW1lOworLSAgICAgY29uc3QgY2hhciAqKmxhbmd1YWdlOworLSAgICAgY29uc3QgY2hhciAqKm1vZGlmaWVyOworLSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0OworLSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldDsKKy0gICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsOworLSAgICAgY29uc3QgY2hhciAqKnNwb25zb3I7CistICAgICBjb25zdCBjaGFyICoqcmV2aXNpb247CisrX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwKKysJCSAgY29uc3QgY2hhciAqKmxhbmd1YWdlLCBjb25zdCBjaGFyICoqbW9kaWZpZXIsCisrCQkgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LCBjb25zdCBjaGFyICoqc3BlY2lhbCwKKysJCSAgY29uc3QgY2hhciAqKnNwb25zb3IsIGNvbnN0IGNoYXIgKipyZXZpc2lvbikKKyB7CisgICBlbnVtIHsgdW5kZWNpZGVkLCB4cGcsIGNlbiB9IHN5bnRheDsKKyAgIGNoYXIgKmNwOworQEAgLTY3LDkgKzczLDcgQEAKKyAgIG1hc2sgPSAwOworICAgc3ludGF4ID0gdW5kZWNpZGVkOworICAgKmxhbmd1YWdlID0gY3AgPSBuYW1lOworLSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJ18nICYmIGNwWzBdICE9ICdAJworLQkgJiYgY3BbMF0gIT0gJysnICYmIGNwWzBdICE9ICcsJykKKy0gICAgKytjcDsKKysgIGNwID0gX25sX2ZpbmRfbGFuZ3VhZ2UgKCpsYW5ndWFnZSk7CisgCisgICBpZiAoKmxhbmd1YWdlID09IGNwKQorICAgICAvKiBUaGlzIGRvZXMgbm90IG1ha2Ugc2Vuc2U6IGxhbmd1YWdlIGhhcyB0byBiZSBzcGVjaWZpZWQuICBVc2UKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9maW5kZG9tYWluLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZmluZGRvbWFpbi5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDE1NzM4OTY4IC0wNDAwCitAQCAtMSw2NCArMSw0MCBAQAorIC8qIEhhbmRsZSBsaXN0IG9mIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxjdHlwZS5oPgorLSNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorICNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKyAjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC03MCwxMCArNDYsOSBAQAorICAgIHRoZSBET01BSU5OQU1FIGFuZCBDQVRFR09SWSBwYXJhbWV0ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudGx5CisgICAgZXN0YWJsaXNoZWQgYmluZGluZ3MuICAqLworIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgbG9jYWxlLCBkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKy0gICAgIGNoYXIgKmxvY2FsZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNoYXIgKmxvY2FsZSwKKysJCSBjb25zdCBjaGFyICpkb21haW5uYW1lLCBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpyZXR2YWw7CisgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKK0BAIC05NSw5ICs3MCw5IEBACisgCisgCWxhbmd1YWdlW190ZXJyaXRvcnldWythdWRpZW5jZV1bK3NwZWNpYWxdWyxbc3BvbnNvcl1bX3JldmlzaW9uXV0KKyAKKy0gICAgIEJlc2lkZSB0aGUgZmlyc3QgYWxsIG9mIHRoZW0gYXJlIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gIElmIHRoZQorLSAgICAgZnVsbCBzcGVjaWZpZWQgbG9jYWxlIGlzIG5vdCBmb3VuZCwgdGhlIGxlc3Mgc3BlY2lmaWMgb25lIGFyZQorLSAgICAgbG9va2VkIGZvci4gIFRoZSB2YXJpb3VzIHBhcnQgd2lsbCBiZSBzdHJpcHBlZCBvZiBhY2NvcmRpbmcgdG8KKysgICAgIEJlc2lkZSB0aGUgZmlyc3QgcGFydCBhbGwgb2YgdGhlbSBhcmUgYWxsb3dlZCB0byBiZSBtaXNzaW5nLiAgSWYKKysgICAgIHRoZSBmdWxsIHNwZWNpZmllZCBsb2NhbGUgaXMgbm90IGZvdW5kLCB0aGUgbGVzcyBzcGVjaWZpYyBvbmUgYXJlCisrICAgICBsb29rZWQgZm9yLiAgVGhlIHZhcmlvdXMgcGFydHMgd2lsbCBiZSBzdHJpcHBlZCBvZmYgYWNjb3JkaW5nIHRvCisgICAgICB0aGUgZm9sbG93aW5nIG9yZGVyOgorIAkJKDEpIHJldmlzaW9uCisgCQkoMikgc3BvbnNvcgorQEAgLTExOSw3ICs5NCw3IEBACisgICAgICAgaW50IGNudDsKKyAKKyAgICAgICBpZiAocmV0dmFsLT5kZWNpZGVkID09IDApCistCV9ubF9sb2FkX2RvbWFpbiAocmV0dmFsKTsKKysJX25sX2xvYWRfZG9tYWluIChyZXR2YWwsIGRvbWFpbmJpbmRpbmcpOworIAorICAgICAgIGlmIChyZXR2YWwtPmRhdGEgIT0gTlVMTCkKKyAJcmV0dXJuIHJldHZhbDsKK0BAIC0xMjcsNyArMTAyLDcgQEAKKyAgICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisgCXsKKyAJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA9PSAwKQorLQkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdKTsKKysJICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSwgZG9tYWluYmluZGluZyk7CisgCisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRhdGEgIT0gTlVMTCkKKyAJICAgIGJyZWFrOworQEAgLTE0MiwxMiArMTE3LDE4IEBACisgICBhbGlhc192YWx1ZSA9IF9ubF9leHBhbmRfYWxpYXMgKGxvY2FsZSk7CisgICBpZiAoYWxpYXNfdmFsdWUgIT0gTlVMTCkKKyAgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysgICAgICBsb2NhbGUgPSBzdHJkdXAgKGFsaWFzX3ZhbHVlKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbHNlCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoYWxpYXNfdmFsdWUpICsgMTsKKyAgICAgICBsb2NhbGUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisgICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMKQorIAlyZXR1cm4gTlVMTDsKKyAKKyAgICAgICBtZW1jcHkgKGxvY2FsZSwgYWxpYXNfdmFsdWUsIGxlbik7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorQEAgLTE2OCwxNCArMTQ5LDE0IEBACisgICAgIHJldHVybiBOVUxMOworIAorICAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbCk7CisrICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKyAgIGlmIChyZXR2YWwtPmRhdGEgPT0gTlVMTCkKKyAgICAgeworICAgICAgIGludCBjbnQ7CisgICAgICAgZm9yIChjbnQgPSAwOyByZXR2YWwtPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorIAl7CisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRlY2lkZWQgPT0gMCkKKy0JICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSk7CisrCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0sIGRvbWFpbmJpbmRpbmcpOworIAkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kYXRhICE9IE5VTEwpCisgCSAgICBicmVhazsKKyAJfQorQEAgLTE4NSw1ICsxNjYsMjcgQEAKKyAgIGlmIChhbGlhc192YWx1ZSAhPSBOVUxMKQorICAgICBmcmVlIChsb2NhbGUpOworIAorKyAgLyogVGhlIHNwYWNlIGZvciBub3JtYWxpemVkX2NvZGVzZXQgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAgRnJlZSBpdC4gICovCisrICBpZiAobWFzayAmIFhQR19OT1JNX0NPREVTRVQpCisrICAgIGZyZWUgKCh2b2lkICopIG5vcm1hbGl6ZWRfY29kZXNldCk7CisrCisgICByZXR1cm4gcmV0dmFsOworIH0KKysKKysKKysjaWZkZWYgX0xJQkMKKytsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJ1bnAgPSBfbmxfbG9hZGVkX2RvbWFpbnM7CisrCisrICB3aGlsZSAocnVucCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqaGVyZSA9IHJ1bnA7CisrICAgICAgaWYgKHJ1bnAtPmRhdGEgIT0gTlVMTCkKKysJX25sX3VubG9hZF9kb21haW4gKChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBydW5wLT5kYXRhKTsKKysgICAgICBydW5wID0gcnVucC0+bmV4dDsKKysgICAgICBmcmVlICgoY2hhciAqKSBoZXJlLT5maWxlbmFtZSk7CisrICAgICAgZnJlZSAoaGVyZSk7CisrICAgIH0KKyt9CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2dldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQyMDczODIwOCAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KK0BAIC0yMywyMSArMjQsMTQgQEAKKyAjIGRlZmluZSBfX25lZWRfTlVMTAorICMgaW5jbHVkZSA8c3RkZGVmLmg+CisgI2Vsc2UKKy0jIGlmZGVmIFNURENfSEVBREVSUworLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCistIyBlbHNlCistIyAgaWZkZWYgSEFWRV9TVFJJTkdfSAorLSMgICBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jICBlbHNlCistIyAgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorLSMgIGVuZGlmCistIyBlbmRpZgorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKyAjZW5kaWYKKyAKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC00OCwyMCArNDIsMTkgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIEdFVFRFWFQgX19nZXR0ZXh0CistIyBkZWZpbmUgREdFVFRFWFQgX19kZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBJTlRVU0UoX19kY2dldHRleHQpCisgI2Vsc2UKKy0jIGRlZmluZSBHRVRURVhUIGdldHRleHRfXworLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKysjIGRlZmluZSBHRVRURVhUIGxpYmludGxfZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorICNlbmRpZgorIAorIC8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisgICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKyAgICB0ZXh0KS4gICovCisgY2hhciAqCistR0VUVEVYVCAobXNnaWQpCistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytHRVRURVhUIChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gREdFVFRFWFQgKE5VTEwsIG1zZ2lkKTsKKysgIHJldHVybiBEQ0dFVFRFWFQgKE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUyk7CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2dldHRleHQuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwNSArMCwwIEBACistLyogSW50ZXJuYWwgaGVhZGVyIGZvciBHTlUgZ2V0dGV4dCBpbnRlcm5hdGlvbmFsaXphdGlvbiBmdW5jdGlvbnMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCistICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorLSAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9HRVRURVhUX0gKKy0jZGVmaW5lIF9HRVRURVhUX0ggMQorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZiBIQVZFX0xJTUlUU19IIHx8IF9MSUJDCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogVGhlIG1hZ2ljIG51bWJlciBvZiB0aGUgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQuICAqLworLSNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKy0jZGVmaW5lIF9NQUdJQ19TV0FQUEVEIDB4ZGUxMjA0OTUKKy0KKy0vKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCistI2RlZmluZSBNT19SRVZJU0lPTl9OVU1CRVIgMAorLQorLS8qIFRoZSBmb2xsb3dpbmcgY29udG9ydGlvbnMgYXJlIGFuIGF0dGVtcHQgdG8gdXNlIHRoZSBDIHByZXByb2Nlc3NvcgorLSAgIHRvIGRldGVybWluZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgMzIgYml0cyB3aWRlLiAgQW4KKy0gICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorLSAgIGRvaW5nIHRoYXQgd291bGQgcmVxdWlyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGNvbXBpbGUgYW5kICpydW4qCistICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlLiAgTG9jYWxseSBydW5uaW5nIGNyb3NzLWNvbXBpbGVkIGV4ZWN1dGFibGVzCistICAgaXMgdXN1YWxseSBub3QgcG9zc2libGUuICAqLworLQorLSNpZiBfX1NURENfXworLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKy0jZWxzZQorLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorLSNlbmRpZgorLQorLS8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCistICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCistICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCistICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKy0KKy0jaWZuZGVmIFVJTlRfTUFYCistIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworLSNlbmRpZgorLQorLSNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworLSNlbHNlCistIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKy0jIGVsc2UKKy0jICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworLSMgIGVsc2UKKy0gIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworLSAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCistICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKy0vKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworLXN0cnVjdCBtb19maWxlX2hlYWRlcgorLXsKKy0gIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworLSAgbmxzX3VpbnQzMiBtYWdpYzsKKy0gIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKy0gIG5sc191aW50MzIgcmV2aXNpb247CistICAvKiBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgcGFpcnMuICAqLworLSAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3RyaW5ncy4gICovCistICBubHNfdWludDMyIG9yaWdfdGFiX29mZnNldDsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRpb24gc3RyaW5ncy4gICovCistICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CistICAvKiBTaXplIG9mIGhhc2hpbmcgdGFibGUuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9zaXplOworLSAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2hpbmcgZW50cnkuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9vZmZzZXQ7CistfTsKKy0KKy1zdHJ1Y3Qgc3RyaW5nX2Rlc2MKKy17CistICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZy4gICovCistICBubHNfdWludDMyIGxlbmd0aDsKKy0gIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCistICBubHNfdWludDMyIG9mZnNldDsKKy19OworLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLSNlbmRpZgkvKiBnZXR0ZXh0LmggICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dFAuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0UC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDI2NzM3Mjk2IC0wNDAwCitAQCAtMSwzMyArMSw1MyBAQAorLS8qIEhlYWRlciBkZXNjcmliaW5nIGludGVybmFscyBvZiBnZXR0ZXh0IGxpYnJhcnkKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogSGVhZGVyIGRlc2NyaWJpbmcgaW50ZXJuYWxzIG9mIGxpYmludGwgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZm5kZWYgX0dFVFRFWFRQX0gKKyAjZGVmaW5lIF9HRVRURVhUUF9ICisgCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogR2V0IHNpemVfdC4gICovCisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9pY29udi9nY29udl9pbnQuaCIKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyMgIGluY2x1ZGUgPGljb252Lmg+CisrIyBlbmRpZgorKyNlbmRpZgorKworICNpbmNsdWRlICJsb2FkaW5mby5oIgorIAorKyNpbmNsdWRlICJnbW8uaCIJCS8qIEdldCBubHNfdWludDMyLiAgKi8KKysKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmbmRlZiBQQVJBTVMKKy0jIGlmIF9fU1REQ19fCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCistIyBlbHNlCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSAoKQorLSMgZW5kaWYKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysjaWZuZGVmIGF0dHJpYnV0ZV9oaWRkZW4KKysjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisrI2VuZGlmCisrCisrLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworKyAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9FWFBFQ1QKKysjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCisgI2VuZGlmCisgCisgI2lmbmRlZiBXCitAQCAtMzUsMzggKzU1LDE2MCBAQAorICNlbmRpZgorIAorIAorLXN0YXRpYyBubHNfdWludDMyIFNXQVAgUEFSQU1TICgobmxzX3VpbnQzMiBpKSk7CistCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorKyMgZGVmaW5lIFNXQVAoaSkgYnN3YXBfMzIgKGkpCisrI2Vsc2UKKyBzdGF0aWMgaW5saW5lIG5sc191aW50MzIKKyBTV0FQIChpKQorICAgICAgbmxzX3VpbnQzMiBpOworIHsKKyAgIHJldHVybiAoaSA8PCAyNCkgfCAoKGkgJiAweGZmMDApIDw8IDgpIHwgKChpID4+IDgpICYgMHhmZjAwKSB8IChpID4+IDI0KTsKKyB9CisrI2VuZGlmCisrCisgCisrLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjCisreworKyAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHNpemVfdCBsZW5ndGg7CisrICAvKiBQb2ludGVyIHRvIGFkZHJlc3NlZCBzdHJpbmcuICAqLworKyAgY29uc3QgY2hhciAqcG9pbnRlcjsKKyt9OworIAorKy8qIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhbiBvcGVuZWQgbWVzc2FnZSBjYXRhbG9nLiAgKi8KKyBzdHJ1Y3QgbG9hZGVkX2RvbWFpbgorIHsKKysgIC8qIFBvaW50ZXIgdG8gbWVtb3J5IGNvbnRhaW5pbmcgdGhlIC5tbyBmaWxlLiAgKi8KKyAgIGNvbnN0IGNoYXIgKmRhdGE7CisrICAvKiAxIGlmIHRoZSBtZW1vcnkgaXMgbW1hcCgpZWQsIDAgaWYgdGhlIG1lbW9yeSBpcyBtYWxsb2MoKWVkLiAgKi8KKysgIGludCB1c2VfbW1hcDsKKysgIC8qIFNpemUgb2YgbW1hcCgpZWQgbWVtb3J5LiAgKi8KKysgIHNpemVfdCBtbWFwX3NpemU7CisrICAvKiAxIGlmIHRoZSAubW8gZmlsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworICAgaW50IG11c3Rfc3dhcDsKKysgIC8qIFBvaW50ZXIgdG8gYWRkaXRpb25hbCBtYWxsb2MoKWVkIG1lbW9yeS4gICovCisrICB2b2lkICptYWxsb2NlZDsKKysKKysgIC8qIE51bWJlciBvZiBzdGF0aWMgc3RyaW5ncyBwYWlycy4gICovCisgICBubHNfdWludDMyIG5zdHJpbmdzOworLSAgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKy0gIHN0cnVjdCBzdHJpbmdfZGVzYyAqdHJhbnNfdGFiOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqb3JpZ190YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncyBpbiB0aGUgZmlsZS4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKnRyYW5zX3RhYjsKKysKKysgIC8qIE51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzeXNkZXAgc3RyaW5ncy4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICpvcmlnX3N5c2RlcF90YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqdHJhbnNfc3lzZGVwX3RhYjsKKysKKysgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgICBubHNfdWludDMyIGhhc2hfc2l6ZTsKKy0gIG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogUG9pbnRlciB0byBoYXNoIHRhYmxlLiAgKi8KKysgIGNvbnN0IG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogMSBpZiB0aGUgaGFzaCB0YWJsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworKyAgaW50IG11c3Rfc3dhcF9oYXNoX3RhYjsKKysKKysgIGludCBjb2Rlc2V0X2NudHI7CisrI2lmZGVmIF9MSUJDCisrICBfX2djb252X3QgY29udjsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWNvbnZfdCBjb252OworKyMgZW5kaWYKKysjZW5kaWYKKysgIGNoYXIgKipjb252X3RhYjsKKysKKysgIHN0cnVjdCBleHByZXNzaW9uICpwbHVyYWw7CisrICB1bnNpZ25lZCBsb25nIGludCBucGx1cmFsczsKKyB9OworIAorKy8qIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0LiAgQnV0IElTTyBDCisrICAgZG9lc24ndCBhbGxvdyB6ZXJvIHNpemVkIGFycmF5cy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgWkVSTyAwCisrI2Vsc2UKKysjIGRlZmluZSBaRVJPIDEKKysjZW5kaWYKKysKKysvKiBBIHNldCBvZiBzZXR0aW5ncyBib3VuZCB0byBhIG1lc3NhZ2UgZG9tYWluLiAgVXNlZCB0byBzdG9yZSBzZXR0aW5ncworKyAgIGZyb20gYmluZHRleHRkb21haW4oKSBhbmQgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKS4gICovCisgc3RydWN0IGJpbmRpbmcKKyB7CisgICBzdHJ1Y3QgYmluZGluZyAqbmV4dDsKKy0gIGNoYXIgKmRvbWFpbm5hbWU7CisgICBjaGFyICpkaXJuYW1lOworKyAgaW50IGNvZGVzZXRfY250cjsJLyogSW5jcmVtZW50ZWQgZWFjaCB0aW1lIGNvZGVzZXQgY2hhbmdlcy4gICovCisrICBjaGFyICpjb2Rlc2V0OworKyAgY2hhciBkb21haW5uYW1lW1pFUk9dOworIH07CisgCistc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX25sX2ZpbmRfZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwKKy0JCQkJCQkgY2hhciAqX19sb2NhbGUsCistCQkJCQkJIGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkpOworLXZvaWQgX25sX2xvYWRfZG9tYWluIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluKSk7CisrLyogQSBjb3VudGVyIHdoaWNoIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBzb21lIHByZXZpb3VzIHRyYW5zbGF0aW9ucworKyAgIGJlY29tZSBpbnZhbGlkLgorKyAgIFRoaXMgdmFyaWFibGUgaXMgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQUJJIG9mIHRoZSBHTlUgbGliaW50bC4gICovCisrZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworKworKyNpZm5kZWYgX0xJQkMKKytjb25zdCBjaGFyICpfbmxfbG9jYWxlX25hbWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKytzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwgY2hhciAqX19sb2NhbGUsCisrCQkJCQkgY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW4sCisrCQkgICAgICBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrdm9pZCBfbmxfdW5sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrY29uc3QgY2hhciAqX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluX2ZpbGUsCisrCQkJCSAgc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluLAorKwkJCQkgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqX19kb21haW4pCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKytjaGFyICpfbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJCSAgICBzaXplX3QgKmxlbmd0aHApCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY2hhciAqX19nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSB1bnNpZ25lZCBsb25nIGludCBfX24pOworK2V4dGVybiBjaGFyICpfX2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrZXh0ZXJuIGNoYXIgKl9fZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgIGludCBfX3BsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAorKwkJCSAgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX190ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworK2V4dGVybiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7CisrZXh0ZXJuIGNoYXIgKl9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKl9fY29kZXNldCk7CisrI2Vsc2UKKysvKiBEZWNsYXJlIHRoZSBleHBvcnRlZCBsaWJpbnRsXyogZnVuY3Rpb25zLCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0bworKyAgIGNhbGwgdGhlbSB1bmRlciB0aGVpciByZWFsIG5hbWUuICAqLworKyMgdW5kZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSBpbnQgX19wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwKKysJCQkJIGludCBfX2NhdGVnb3J5KTsKKysjZW5kaWYKKyAKKyAvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9nbW8uaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nbW8uaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzMTczNjUzNiAtMDQwMAorQEAgLTAsMCArMSwxNDkgQEAKKysvKiBEZXNjcmlwdGlvbiBvZiBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdDogZ2VuZXJhbCBmaWxlIGxheW91dC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfR0VUVEVYVF9ICisrI2RlZmluZSBfR0VUVEVYVF9IIDEKKysKKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIFRoZSBtYWdpYyBudW1iZXIgb2YgdGhlIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0LiAgKi8KKysjZGVmaW5lIF9NQUdJQyAweDk1MDQxMmRlCisrI2RlZmluZSBfTUFHSUNfU1dBUFBFRCAweGRlMTIwNDk1CisrCisrLyogUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgdXNlZCAubW8gKGJpbmFyeSkgZmlsZSBmb3JtYXQuICAqLworKyNkZWZpbmUgTU9fUkVWSVNJT05fTlVNQkVSIDAKKysjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUl9XSVRIX1NZU0RFUF9JIDEKKysKKysvKiBUaGUgZm9sbG93aW5nIGNvbnRvcnRpb25zIGFyZSBhbiBhdHRlbXB0IHRvIHVzZSB0aGUgQyBwcmVwcm9jZXNzb3IKKysgICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCisrICAgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gdXNlIGF1dG9jb25mJ3MgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvLCBidXQKKysgICBhcyBvZiB2ZXJzaW9uIGF1dG9jb25mLTIuMTMsIHRoZSBBQ19DSEVDS19TSVpFT0YgbWFjcm8gZG9lc24ndCB3b3JrCisrICAgd2hlbiBjcm9zcy1jb21waWxpbmcuICAqLworKworKyNpZiBfX1NURENfXworKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKysjZWxzZQorKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorKyNlbmRpZgorKworKy8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCisrICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCisrICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCisrICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKysKKysjaWZuZGVmIFVJTlRfTUFYCisrIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworKyNlbmRpZgorKworKyNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCisrdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworKyNlbHNlCisrIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKysjIGVsc2UKKysjICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworKyMgIGVsc2UKKysgIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworKyAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCisrICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysKKysvKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworK3N0cnVjdCBtb19maWxlX2hlYWRlcgorK3sKKysgIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworKyAgbmxzX3VpbnQzMiBtYWdpYzsKKysgIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKysgIG5sc191aW50MzIgcmV2aXNpb247CisrCisrICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWFqb3IgcmV2aXNpb24gMCBvciAxLiAgKi8KKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3RyaW5ncyBwYWlycy4gICovCisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiBvcmlnaW5hbCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgb3JpZ190YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiB0cmFuc190YWJfb2Zmc2V0OworKyAgLyogU2l6ZSBvZiBoYXNoIHRhYmxlLiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfc2l6ZTsKKysgIC8qIE9mZnNldCBvZiBmaXJzdCBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfb2Zmc2V0OworKworKyAgLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc2VnbWVudHM7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgZGVzY3JpYmluZyBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgc3lzZGVwX3NlZ21lbnRzX29mZnNldDsKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIHBhaXJzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc3RyaW5nczsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiBvcmlnX3N5c2RlcF90YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN5c2RlcCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgdHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQ7CisrfTsKKysKKysvKiBEZXNjcmlwdG9yIGZvciBzdGF0aWMgc3RyaW5nIGNvbnRhaW5lZCBpbiB0aGUgYmluYXJ5IC5tbyBmaWxlLiAgKi8KKytzdHJ1Y3Qgc3RyaW5nX2Rlc2MKKyt7CisrICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIG5sc191aW50MzIgbGVuZ3RoOworKyAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKysgIG5sc191aW50MzIgb2Zmc2V0OworK307CisrCisrLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQuICAqLworK3N0cnVjdCBzeXNkZXBfc2VnbWVudAorK3sKKysgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisrICBubHNfdWludDMyIGxlbmd0aDsKKysgIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCisrICBubHNfdWludDMyIG9mZnNldDsKKyt9OworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZworK3sKKysgIC8qIE9mZnNldCBvZiBzdGF0aWMgc3RyaW5nIHNlZ21lbnRzIGluIGZpbGUuICAqLworKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisrICAvKiBBbHRlcm5hdGluZyBzZXF1ZW5jZSBvZiBzdGF0aWMgYW5kIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuCisrICAgICBUaGUgbGFzdCBzZWdtZW50IGlzIGEgc3RhdGljIHNlZ21lbnQsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHN0cnVjdCBzZWdtZW50X3BhaXIKKysgIHsKKysgICAgLyogU2l6ZSBvZiBzdGF0aWMgc2VnbWVudC4gICovCisrICAgIG5sc191aW50MzIgc2Vnc2l6ZTsKKysgICAgLyogUmVmZXJlbmNlIHRvIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQsIG9yIH4wIGF0IHRoZSBlbmQuICAqLworKyAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysgIH0gc2VnbWVudHNbMV07CisrfTsKKysKKysvKiBNYXJrZXIgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnRzW10gYXJyYXkuICBUaGlzIGhhcyB0aGUgdmFsdWUgMHhGRkZGRkZGRiwKKysgICByZWdhcmRsZXNzIHdoZXRoZXIgJ2ludCcgaXMgMTYgYml0LCAzMiBiaXQsIG9yIDY0IGJpdC4gICovCisrI2RlZmluZSBTRUdNRU5UU19FTkQgKChubHNfdWludDMyKSB+MCkKKysKKysvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKysKKysjZW5kaWYJLyogZ2V0dGV4dC5oICAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2hhc2gtc3RyaW5nLmgJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvaGFzaC1zdHJpbmcuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzNjczNTc3NiAtMDQwMAorQEAgLTEsMzUgKzEsMjMgQEAKKy0vKiBJbXBsZW1lbnRzIGEgc3RyaW5nIGhhc2hpbmcgZnVuY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIERlc2NyaXB0aW9uIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0OiBzdHJpbmcgaGFzaGluZyBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTctMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorLSAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKy0gICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfVkFMVUVTX0gKKy0jIGluY2x1ZGUgPHZhbHVlcy5oPgorLSNlbmRpZgorKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpIEFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpICgpCistIyBlbmRpZgorLSNlbmRpZgorLQorIC8qIFdlIGFzc3VtZSB0byBoYXZlIGB1bnNpZ25lZCBsb25nIGludCcgdmFsdWUgd2l0aCBhdCBsZWFzdCAzMiBiaXRzLiAgKi8KKyAjZGVmaW5lIEhBU0hXT1JEQklUUyAzMgorIAorQEAgLTM3LDExICsyNSw4IEBACisgLyogRGVmaW5lcyB0aGUgc28gY2FsbGVkIGBoYXNocGp3JyBmdW5jdGlvbiBieSBQLkouIFdlaW5iZXJnZXIKKyAgICBbc2VlIEFoby9TZXRoaS9VbGxtYW4sIENPTVBJTEVSUzogUHJpbmNpcGxlcywgVGVjaG5pcXVlcyBhbmQgVG9vbHMsCisgICAgMTk4NiwgMTk4NyBCZWxsIFRlbGVwaG9uZSBMYWJvcmF0b3JpZXMsIEluYy5dICAqLworLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhhc2hfc3RyaW5nIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fc3RyX3BhcmFtKSk7CistCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCistaGFzaF9zdHJpbmcgKHN0cl9wYXJhbSkKKy0gICAgIGNvbnN0IGNoYXIgKnN0cl9wYXJhbTsKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cl9wYXJhbSkKKyB7CisgICB1bnNpZ25lZCBsb25nIGludCBodmFsLCBnOworICAgY29uc3QgY2hhciAqc3RyID0gc3RyX3BhcmFtOworQEAgLTUxLDggKzM2LDggQEAKKyAgIHdoaWxlICgqc3RyICE9ICdcMCcpCisgICAgIHsKKyAgICAgICBodmFsIDw8PSA0OworLSAgICAgIGh2YWwgKz0gKHVuc2lnbmVkIGxvbmcpICpzdHIrKzsKKy0gICAgICBnID0gaHZhbCAmICgodW5zaWduZWQgbG9uZykgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisrICAgICAgaHZhbCArPSAodW5zaWduZWQgY2hhcikgKnN0cisrOworKyAgICAgIGcgPSBodmFsICYgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisgICAgICAgaWYgKGcgIT0gMCkKKyAJeworIAkgIGh2YWwgXj0gZyA+PiAoSEFTSFdPUkRCSVRTIC0gOCk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvaW50bC1jb21wYXQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9pbnRsLWNvbXBhdC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDQxNzM1MDE2IC0wNDAwCitAQCAtMSw3NiArMSwxMzEgQEAKKyAvKiBpbnRsLWNvbXBhdC5jIC0gU3R1YiBmdW5jdGlvbnMgdG8gY2FsbCBnZXR0ZXh0IGZ1bmN0aW9ucyBmcm9tIEdOVSBnZXR0ZXh0CisgICAgTGlicmFyeS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMjAwMC0yMDAzIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisrLyogVGhpcyBmaWxlIHJlZGlyZWN0cyB0aGUgZ2V0dGV4dCBmdW5jdGlvbnMgKHdpdGhvdXQgcHJlZml4KSB0byB0aG9zZQorKyAgIGRlZmluZWQgaW4gdGhlIGluY2x1ZGVkIEdOVSBsaWJpbnRsIGxpYnJhcnkgKHdpdGggImxpYmludGxfIiBwcmVmaXgpLgorKyAgIEl0IGlzIGNvbXBpbGVkIGludG8gbGliaW50bCBpbiBvcmRlciB0byBtYWtlIHRoZSBBTV9HTlVfR0VUVEVYVCB0ZXN0CisrICAgb2YgZ2V0dGV4dCA8PSAwLjExLjIgd29yayB3aXRoIHRoZSBsaWJpbnRsIGxpYnJhcnkgPj0gMC4xMS4zIHdoaWNoCisrICAgaGFzIHRoZSByZWRpcmVjdGlvbnMgcHJpbWFyaWx5IGluIHRoZSA8bGliaW50bC5oPiBpbmNsdWRlIGZpbGUuCisrICAgSXQgaXMgYWxzbyBjb21waWxlZCBpbnRvIGxpYmdudWludGwgc28gdGhhdCBsaWJnbnVpbnRsLnNvIGNhbiBiZSB1c2VkCisrICAgYXMgTERfUFJFTE9BRGFibGUgbGlicmFyeSBvbiBnbGliYyBzeXN0ZW1zLCB0byBwcm92aWRlIHRoZSBleHRyYQorKyAgIGZlYXR1cmVzIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGliYyBkb24ndCBoYXZlIChuYW1lbHksIGxvZ2dpbmcpLiAgKi8KKysKKyAKKyAjdW5kZWYgZ2V0dGV4dAorICN1bmRlZiBkZ2V0dGV4dAorICN1bmRlZiBkY2dldHRleHQKKysjdW5kZWYgbmdldHRleHQKKysjdW5kZWYgZG5nZXR0ZXh0CisrI3VuZGVmIGRjbmdldHRleHQKKyAjdW5kZWYgdGV4dGRvbWFpbgorICN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kX3RleHRkb21haW5fY29kZXNldAorKworKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistYmluZHRleHRkb21haW4gKGRvbWFpbm5hbWUsIGRpcm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKytnZXR0ZXh0IChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gYmluZHRleHRkb21haW5fXyAoZG9tYWlubmFtZSwgZGlybmFtZSk7CisrICByZXR1cm4gbGliaW50bF9nZXR0ZXh0IChtc2dpZCk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWRjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLSAgICAgaW50IGNhdGVnb3J5OworK2RnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gZGNnZXR0ZXh0X18gKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisrICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpOworIH0KKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy1kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrZGNnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQorIHsKKy0gIHJldHVybiBkZ2V0dGV4dF9fIChkb21haW5uYW1lLCBtc2dpZCk7CisrICByZXR1cm4gbGliaW50bF9kY2dldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWdldHRleHQgKG1zZ2lkKQorLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrbmdldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorIHsKKy0gIHJldHVybiBnZXR0ZXh0X18gKG1zZ2lkKTsKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChtc2dpZDEsIG1zZ2lkMiwgbik7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLXRleHRkb21haW4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisgeworLSAgcmV0dXJuIHRleHRkb21haW5fXyAoZG9tYWlubmFtZSk7CisrICByZXR1cm4gbGliaW50bF9kbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuLAorKwkgICAgaW50IGNhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuLCBjYXRlZ29yeSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK3RleHRkb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoZG9tYWlubmFtZSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpkaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmNvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGRvbWFpbm5hbWUsIGNvZGVzZXQpOworIH0KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sMTBuZmxpc3QuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sMTBuZmxpc3QuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ1NzczMjU4NCAtMDQwMAorQEAgLTEsNTIgKzEsNDAgQEAKKy0vKiBIYW5kbGUgbGlzdCBvZiBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc3RwY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIF9HTlVfU09VUkNFCistIyAgZGVmaW5lIF9HTlVfU09VUkNFCTEKKy0jIGVuZGlmCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorLSNlbmRpZgorLSNpZiAhSEFWRV9TVFJDSFIgJiYgIWRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBzdHJjaHIKKy0jICBkZWZpbmUgc3RyY2hyIGluZGV4CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfQVJHWl9ICisgIyBpbmNsdWRlIDxhcmd6Lmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgI2luY2x1ZGUgImxvYWRpbmZvLmgiCisgCitAQCAtNjUsMjMgKzUzLDM5IEBACisgLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisgICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBzdHBjcHkoZGVzdCwgc3JjKSBfX3N0cGNweShkZXN0LCBzcmMpCisrIyBpZm5kZWYgc3RwY3B5CisrIyAgZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIF9fc3RwY3B5KGRlc3QsIHNyYykKKysjIGVuZGlmCisgI2Vsc2UKKyAjIGlmbmRlZiBIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7Cisrc3RhdGljIGNoYXIgKnN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpdCBtYXkgYmUgY29uY2F0ZW5hdGVkIHRvIGEgZGlyZWN0b3J5IHBhdGhuYW1lLgorKyAqLworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorKyMgZGVmaW5lIEhBU19ERVZJQ0UoUCkgXAorKyAgICAoKCgoUClbMF0gPj0gJ0EnICYmIChQKVswXSA8PSAnWicpIHx8ICgoUClbMF0gPj0gJ2EnICYmIChQKVswXSA8PSAneicpKSBcCisrICAgICAmJiAoUClbMV0gPT0gJzonKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgKElTU0xBU0ggKChQKVswXSkgfHwgSEFTX0RFVklDRSAoUCkpCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgSVNTTEFTSCAoKFApWzBdKQorKyNlbmRpZgorKworIC8qIERlZmluZSBmdW5jdGlvbiB3aGljaCBhcmUgdXN1YWxseSBub3QgYXZhaWxhYmxlLiAgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfQ09VTlQKKyAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiBBUkdaLiAgKi8KKy1zdGF0aWMgc2l6ZV90IGFyZ3pfY291bnRfXyBQQVJBTVMgKChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKSk7CistCisgc3RhdGljIHNpemVfdAorLWFyZ3pfY291bnRfXyAoYXJneiwgbGVuKQorLSAgICAgY29uc3QgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CisrYXJnel9jb3VudF9fIChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKQorIHsKKyAgIHNpemVfdCBjb3VudCA9IDA7CisgICB3aGlsZSAobGVuID4gMCkKK0BAIC05NSwxOCArOTksMTcgQEAKKyB9CisgIyB1bmRlZiBfX2FyZ3pfY291bnQKKyAjIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBhcmd6X2NvdW50X18gKGFyZ3osIGxlbikKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X2NvdW50KGFyZ3osIGxlbikgSU5UVVNFKF9fYXJnel9jb3VudCkgKGFyZ3osIGxlbikKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfQ09VTlQgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfU1RSSU5HSUZZCisgLyogTWFrZSAnXDAnIHNlcGFyYXRlZCBhcmcgdmVjdG9yIEFSR1ogcHJpbnRhYmxlIGJ5IGNvbnZlcnRpbmcgYWxsIHRoZSAnXDAncworICAgIGV4Y2VwdCB0aGUgbGFzdCBpbnRvIHRoZSBjaGFyYWN0ZXIgU0VQLiAgKi8KKy1zdGF0aWMgdm9pZCBhcmd6X3N0cmluZ2lmeV9fIFBBUkFNUyAoKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApKTsKKy0KKyBzdGF0aWMgdm9pZAorLWFyZ3pfc3RyaW5naWZ5X18gKGFyZ3osIGxlbiwgc2VwKQorLSAgICAgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CistICAgICBpbnQgc2VwOworK2FyZ3pfc3RyaW5naWZ5X18gKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApCisgeworICAgd2hpbGUgKGxlbiA+IDApCisgICAgIHsKK0BAIC0xMTksMTcgKzEyMiwxNiBAQAorIH0KKyAjIHVuZGVmIF9fYXJnel9zdHJpbmdpZnkKKyAjIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBhcmd6X3N0cmluZ2lmeV9fIChhcmd6LCBsZW4sIHNlcCkKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgXAorKyAgSU5UVVNFKF9fYXJnel9zdHJpbmdpZnkpIChhcmd6LCBsZW4sIHNlcCkKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfU1RSSU5HSUZZICovCisgCisgI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX05FWFQKKy1zdGF0aWMgY2hhciAqYXJnel9uZXh0X18gUEFSQU1TICgoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLAorLQkJCQkgIGNvbnN0IGNoYXIgKmVudHJ5KSk7CistCisgc3RhdGljIGNoYXIgKgorLWFyZ3pfbmV4dF9fIChhcmd6LCBhcmd6X2xlbiwgZW50cnkpCistICAgICBjaGFyICphcmd6OworLSAgICAgc2l6ZV90IGFyZ3pfbGVuOworLSAgICAgY29uc3QgY2hhciAqZW50cnk7CisrYXJnel9uZXh0X18gKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgY29uc3QgY2hhciAqZW50cnkpCisgeworICAgaWYgKGVudHJ5KQorICAgICB7CitAQCAtMTUwLDExICsxNTIsOCBAQAorIAorIAorIC8qIFJldHVybiBudW1iZXIgb2YgYml0cyBzZXQgaW4gWC4gICovCistc3RhdGljIGludCBwb3AgUEFSQU1TICgoaW50IHgpKTsKKy0KKyBzdGF0aWMgaW5saW5lIGludAorLXBvcCAoeCkKKy0gICAgIGludCB4OworK3BvcCAoaW50IHgpCisgeworICAgLyogV2UgYXNzdW1lIHRoYXQgbm8gbW9yZSB0aGFuIDE2IGJpdHMgYXJlIHVzZWQuICAqLworICAgeCA9ICgoeCAmIH4weDU1NTUpID4+IDEpICsgKHggJiAweDU1NTUpOworQEAgLTE2NywzMSArMTY2LDI3IEBACisgCisgDAorIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlybGlzdCwgZGlybGlzdF9sZW4sIG1hc2ssIGxhbmd1YWdlLAorLQkJICAgIHRlcnJpdG9yeSwgY29kZXNldCwgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKy0JCSAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIGRvX2FsbG9jYXRlKQorLSAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3Q7CistICAgICBjb25zdCBjaGFyICpkaXJsaXN0OworLSAgICAgc2l6ZV90IGRpcmxpc3RfbGVuOworLSAgICAgaW50IG1hc2s7CistICAgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKy0gICAgIGNvbnN0IGNoYXIgKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICptb2RpZmllcjsKKy0gICAgIGNvbnN0IGNoYXIgKnNwZWNpYWw7CistICAgICBjb25zdCBjaGFyICpzcG9uc29yOworLSAgICAgY29uc3QgY2hhciAqcmV2aXNpb247CistICAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKy0gICAgIGludCBkb19hbGxvY2F0ZTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwKKysJCSAgICBpbnQgbWFzaywgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSkKKyB7CisgICBjaGFyICphYnNfZmlsZW5hbWU7CistICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpsYXN0ID0gTlVMTDsKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsYXN0cDsKKyAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKyAgIGNoYXIgKmNwOworKyAgc2l6ZV90IGRpcmxpc3RfY291bnQ7CisgICBzaXplX3QgZW50cmllczsKKyAgIGludCBjbnQ7CisgCisrICAvKiBJZiBMQU5HVUFHRSBjb250YWlucyBhbiBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgd2UgaWdub3JlCisrICAgICBESVJMSVNULiAgKi8KKysgIGlmIChJU19BQlNPTFVURV9QQVRIIChsYW5ndWFnZSkpCisrICAgIGRpcmxpc3RfbGVuID0gMDsKKysKKyAgIC8qIEFsbG9jYXRlIHJvb20gZm9yIHRoZSBmdWxsIGZpbGUgbmFtZS4gICovCisgICBhYnNfZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcmxpc3RfbGVuCisgCQkJCSAgKyBzdHJsZW4gKGxhbmd1YWdlKQorQEAgLTIwOSw3ICsyMDQsNyBAQAorIAkJCQkgICsgKCgobWFzayAmIENFTl9TUE9OU09SKSAhPSAwCisgCQkJCSAgICAgIHx8IChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwKQorIAkJCQkgICAgID8gKDEgKyAoKG1hc2sgJiBDRU5fU1BPTlNPUikgIT0gMAorLQkJCQkJICAgICA/IHN0cmxlbiAoc3BvbnNvcikgKyAxIDogMCkKKysJCQkJCSAgICAgPyBzdHJsZW4gKHNwb25zb3IpIDogMCkKKyAJCQkJCSsgKChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwCisgCQkJCQkgICA/IHN0cmxlbiAocmV2aXNpb24pICsgMSA6IDApKSA6IDApCisgCQkJCSAgKyAxICsgc3RybGVuIChmaWxlbmFtZSkgKyAxKTsKK0BAIC0yMTcsMTQgKzIxMiwxNiBAQAorICAgaWYgKGFic19maWxlbmFtZSA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIHJldHZhbCA9IE5VTEw7CistICBsYXN0ID0gTlVMTDsKKy0KKyAgIC8qIENvbnN0cnVjdCBmaWxlIG5hbWUuICAqLworLSAgbWVtY3B5IChhYnNfZmlsZW5hbWUsIGRpcmxpc3QsIGRpcmxpc3RfbGVuKTsKKy0gIF9fYXJnel9zdHJpbmdpZnkgKGFic19maWxlbmFtZSwgZGlybGlzdF9sZW4sICc6Jyk7CistICBjcCA9IGFic19maWxlbmFtZSArIChkaXJsaXN0X2xlbiAtIDEpOworLSAgKmNwKysgPSAnLyc7CisrICBjcCA9IGFic19maWxlbmFtZTsKKysgIGlmIChkaXJsaXN0X2xlbiA+IDApCisrICAgIHsKKysgICAgICBtZW1jcHkgKGNwLCBkaXJsaXN0LCBkaXJsaXN0X2xlbik7CisrICAgICAgX19hcmd6X3N0cmluZ2lmeSAoY3AsIGRpcmxpc3RfbGVuLCBQQVRIX1NFUEFSQVRPUik7CisrICAgICAgY3AgKz0gZGlybGlzdF9sZW47CisrICAgICAgY3BbLTFdID0gJy8nOworKyAgICB9CisrCisgICBjcCA9IHN0cGNweSAoY3AsIGxhbmd1YWdlKTsKKyAKKyAgIGlmICgobWFzayAmIFRFUlJJVE9SWSkgIT0gMCkKK0BAIC0yNzEsNyArMjY4LDcgQEAKKyAKKyAgIC8qIExvb2sgaW4gbGlzdCBvZiBhbHJlYWR5IGxvYWRlZCBkb21haW5zIHdoZXRoZXIgaXQgaXMgYWxyZWFkeQorICAgICAgYXZhaWxhYmxlLiAgKi8KKy0gIGxhc3QgPSBOVUxMOworKyAgbGFzdHAgPSBsMTBuZmlsZV9saXN0OworICAgZm9yIChyZXR2YWwgPSAqbDEwbmZpbGVfbGlzdDsgcmV0dmFsICE9IE5VTEw7IHJldHZhbCA9IHJldHZhbC0+bmV4dCkKKyAgICAgaWYgKHJldHZhbC0+ZmlsZW5hbWUgIT0gTlVMTCkKKyAgICAgICB7CitAQCAtMjg2LDcgKzI4Myw3IEBACisgCSAgICBicmVhazsKKyAJICB9CisgCistCWxhc3QgPSByZXR2YWw7CisrCWxhc3RwID0gJnJldHZhbC0+bmV4dDsKKyAgICAgICB9CisgCisgICBpZiAocmV0dmFsICE9IE5VTEwgfHwgZG9fYWxsb2NhdGUgPT0gMCkKK0BAIC0yOTUsNDggKzI5Miw2NiBAQAorICAgICAgIHJldHVybiByZXR2YWw7CisgICAgIH0KKyAKKy0gIHJldHZhbCA9IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopCistICAgIG1hbGxvYyAoc2l6ZW9mICgqcmV0dmFsKSArIChfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKQorLQkJCQkqICgxIDw8IHBvcCAobWFzaykpCistCQkJCSogc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopKSk7CisrICBkaXJsaXN0X2NvdW50ID0gKGRpcmxpc3RfbGVuID4gMCA/IF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pIDogMSk7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBsb2FkZWRfbDEwbmZpbGUuICAqLworKyAgcmV0dmFsID0KKysgICAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKysgICAgbWFsbG9jIChzaXplb2YgKCpyZXR2YWwpCisrCSAgICArICgoKGRpcmxpc3RfY291bnQgPDwgcG9wIChtYXNrKSkgKyAoZGlybGlzdF9jb3VudCA+IDEgPyAxIDogMCkpCisrCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKyAgIHJldHZhbC0+ZmlsZW5hbWUgPSBhYnNfZmlsZW5hbWU7CistICByZXR2YWwtPmRlY2lkZWQgPSAoX19hcmd6X2NvdW50IChkaXJsaXN0LCBkaXJsaXN0X2xlbikgIT0gMQorKworKyAgLyogV2Ugc2V0IHJldHZhbC0+ZGF0YSB0byBOVUxMIGhlcmU7IGl0IGlzIGZpbGxlZCBpbiBsYXRlci4KKysgICAgIFNldHRpbmcgcmV0dmFsLT5kZWNpZGVkIHRvIDEgaGVyZSBtZWFucyB0aGF0IHJldHZhbCBkb2VzIG5vdAorKyAgICAgY29ycmVzcG9uZCB0byBhIHJlYWwgZmlsZSAoZGlybGlzdF9jb3VudCA+IDEpIG9yIGlzIG5vdCB3b3J0aAorKyAgICAgbG9va2luZyB1cCAoaWYgYW4gdW5ub3JtYWxpemVkIGNvZGVzZXQgd2FzIHNwZWNpZmllZCkuICAqLworKyAgcmV0dmFsLT5kZWNpZGVkID0gKGRpcmxpc3RfY291bnQgPiAxCisgCQkgICAgIHx8ICgobWFzayAmIFhQR19DT0RFU0VUKSAhPSAwCisgCQkJICYmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkgIT0gMCkpOworICAgcmV0dmFsLT5kYXRhID0gTlVMTDsKKyAKKy0gIGlmIChsYXN0ID09IE5VTEwpCistICAgIHsKKy0gICAgICByZXR2YWwtPm5leHQgPSAqbDEwbmZpbGVfbGlzdDsKKy0gICAgICAqbDEwbmZpbGVfbGlzdCA9IHJldHZhbDsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcmV0dmFsLT5uZXh0ID0gbGFzdC0+bmV4dDsKKy0gICAgICBsYXN0LT5uZXh0ID0gcmV0dmFsOworLSAgICB9CisrICByZXR2YWwtPm5leHQgPSAqbGFzdHA7CisrICAqbGFzdHAgPSByZXR2YWw7CisgCisgICBlbnRyaWVzID0gMDsKKy0gIC8qIElmIHRoZSBESVJMSVNUIGlzIGEgcmVhbCBsaXN0IHRoZSBSRVRWQUwgZW50cnkgY29ycmVzcG9uZHMgbm90IHRvCistICAgICBhIHJlYWwgZmlsZS4gIFNvIHdlIGhhdmUgdG8gdXNlIHRoZSBESVJMSVNUIHNlcGFyYXRpb24gbWVjaGFuaXNtCistICAgICBvZiB0aGUgaW5uZXIgbG9vcC4gICovCistICBjbnQgPSBfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSA9PSAxID8gbWFzayAtIDEgOiBtYXNrOworLSAgZm9yICg7IGNudCA+PSAwOyAtLWNudCkKKysgIC8qIFJlY3Vyc2UgdG8gZmlsbCB0aGUgaW5oZXJpdGFuY2UgbGlzdCBvZiBSRVRWQUwuCisrICAgICBJZiB0aGUgRElSTElTVCBpcyBhIHJlYWwgbGlzdCAoaS5lLiBESVJMSVNUX0NPVU5UID4gMSksIHRoZSBSRVRWQUwKKysgICAgIGVudHJ5IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGZpbGU7IHJldHZhbC0+ZmlsZW5hbWUgY29udGFpbnMKKysgICAgIGNvbG9ucy4gIEluIHRoaXMgY2FzZSB3ZSBsb29wIGFjcm9zcyBhbGwgZWxlbWVudHMgb2YgRElSTElTVCBhbmQKKysgICAgIGFjcm9zcyBhbGwgYml0IHBhdHRlcm5zIGRvbWluYXRlZCBieSBNQVNLLgorKyAgICAgSWYgdGhlIERJUkxJU1QgaXMgYSBzaW5nbGUgZGlyZWN0b3J5IG9yIGVudGlyZWx5IHJlZHVuZGFudCAoaS5lLgorKyAgICAgRElSTElTVF9DT1VOVCA9PSAxKSwgd2UgbG9vcCBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkKKysgICAgIE1BU0ssIGV4Y2x1ZGluZyBNQVNLIGl0c2VsZi4KKysgICAgIEluIGVpdGhlciBjYXNlLCB3ZSBsb29wIGRvd24gZnJvbSBNQVNLIHRvIDAuICBUaGlzIGhhcyB0aGUgZWZmZWN0CisrICAgICB0aGF0IHRoZSBleHRyYSBiaXRzIGluIHRoZSBsb2NhbGUgbmFtZSBhcmUgZHJvcHBlZCBpbiB0aGlzIG9yZGVyOgorKyAgICAgZmlyc3QgdGhlIG1vZGlmaWVyLCB0aGVuIHRoZSB0ZXJyaXRvcnksIHRoZW4gdGhlIGNvZGVzZXQsIHRoZW4gdGhlCisrICAgICBub3JtYWxpemVkX2NvZGVzZXQuICAqLworKyAgZm9yIChjbnQgPSBkaXJsaXN0X2NvdW50ID4gMSA/IG1hc2sgOiBtYXNrIC0gMTsgY250ID49IDA7IC0tY250KQorICAgICBpZiAoKGNudCAmIH5tYXNrKSA9PSAwCisgCSYmICgoY250ICYgQ0VOX1NQRUNJRklDKSA9PSAwIHx8IChjbnQgJiBYUEdfU1BFQ0lGSUMpID09IDApCisgCSYmICgoY250ICYgWFBHX0NPREVTRVQpID09IDAgfHwgKGNudCAmIFhQR19OT1JNX0NPREVTRVQpID09IDApKQorICAgICAgIHsKKy0JLyogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBvZiB0aGUgRElSTElTVC4gICovCistCWNoYXIgKmRpciA9IE5VTEw7CisrCWlmIChkaXJsaXN0X2NvdW50ID4gMSkKKysJICB7CisrCSAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIHRoZSBESVJMSVNULiAgKi8KKysJICAgIGNoYXIgKmRpciA9IE5VTEw7CisgCistCXdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorLQkgICAgICAgIT0gTlVMTCkKKysJICAgIHdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorKwkJICAgIT0gTlVMTCkKKysJICAgICAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorKwkJPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpciwgc3RybGVuIChkaXIpICsgMSwKKysJCQkJICAgICAgY250LCBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkJCQkgICAgICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorKwkJCQkgICAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIDEpOworKwkgIH0KKysJZWxzZQorIAkgIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXMrK10KKy0JICAgID0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXIsIHN0cmxlbiAoZGlyKSArIDEsIGNudCwKKy0JCQkJICBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkgICAgPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpcmxpc3QsIGRpcmxpc3RfbGVuLAorKwkJCQkgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKyAJCQkJICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorIAkJCQkgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgMSk7CisgICAgICAgfQorQEAgLTM0NywxMSArMzYyLDEwIEBACisgDAorIC8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKyAgICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorLSAgIG5hbWVzLiAgKi8KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKyBjb25zdCBjaGFyICoKKy1fbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvZGVzZXQsIG5hbWVfbGVuKQorLSAgICAgY29uc3QgY2hhciAqY29kZXNldDsKKy0gICAgIHNpemVfdCBuYW1lX2xlbjsKKytfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsIHNpemVfdCBuYW1lX2xlbikKKyB7CisgICBpbnQgbGVuID0gMDsKKyAgIGludCBvbmx5X2RpZ2l0ID0gMTsKK0BAIC0zNjAsMTEgKzM3NCwxMSBAQAorICAgc2l6ZV90IGNudDsKKyAKKyAgIGZvciAoY250ID0gMDsgY250IDwgbmFtZV9sZW47ICsrY250KQorLSAgICBpZiAoaXNhbG51bSAoY29kZXNldFtjbnRdKSkKKysgICAgaWYgKGlzYWxudW0gKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorICAgICAgIHsKKyAJKytsZW47CisgCistCWlmIChpc2FscGhhIChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgb25seV9kaWdpdCA9IDA7CisgICAgICAgfQorIAorQEAgLTM3OCw5ICszOTIsOSBAQAorIAl3cCA9IHJldHZhbDsKKyAKKyAgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKy0JaWYgKGlzYWxwaGEgKGNvZGVzZXRbY250XSkpCistCSAgKndwKysgPSB0b2xvd2VyIChjb2Rlc2V0W2NudF0pOworLQllbHNlIGlmIChpc2RpZ2l0IChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisrCSAgKndwKysgPSB0b2xvd2VyICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKTsKKysJZWxzZSBpZiAoaXNkaWdpdCAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgKndwKysgPSBjb2Rlc2V0W2NudF07CisgCisgICAgICAgKndwID0gJ1wwJzsKK0BAIC0zOTgsOSArNDEyLDcgQEAKKyAgICB0byBiZSBkZWZpbmVkLiAgKi8KKyAjaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorIHN0YXRpYyBjaGFyICoKKy1zdHBjcHkgKGRlc3QsIHNyYykKKy0gICAgIGNoYXIgKmRlc3Q7CistICAgICBjb25zdCBjaGFyICpzcmM7Cisrc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCisgeworICAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorICAgICAvKiBEbyBub3RoaW5nLiAqLyA7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGliZ2V0dGV4dC5oCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xpYmdldHRleHQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTgyICswLDAgQEAKKy0vKiBNZXNzYWdlIGNhdGFsb2dzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0vKiBCZWNhdXNlIG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKSB3ZSBzb21ldGltZXMgaGF2ZSB0byBpbmNsdWRlCistICAgdGhlIHN5c3RlbXMgbGliaW50bC5oIGFzIHdlbGwgYXMgdGhpcyBmaWxlIHdlIGhhdmUgbW9yZSBjb21wbGV4CistICAgaW5jbHVkZSBwcm90ZWN0aW9uIGFib3ZlLiAgQnV0IHRoZSBzeXN0ZW1zIGhlYWRlciBtaWdodCBwZXJoYXBzIGFsc28KKy0gICBkZWZpbmUgX0xJQklOVExfSCBhbmQgdGhlcmVmb3JlIHdlIGhhdmUgdG8gcHJvdGVjdCB0aGUgZGVmaW5pdGlvbiBoZXJlLiAgKi8KKy0KKy0jaWYgIWRlZmluZWQgKF9MSUJJTlRMX0gpIHx8ICFkZWZpbmVkIChfTElCR0VUVEVYVF9IKQorLSNpZiAhZGVmaW5lZCAoX0xJQklOVExfSCkKKy0jIGRlZmluZSBfTElCSU5UTF9ICTEKKy0jZW5kaWYKKy0jZGVmaW5lIF9MSUJHRVRURVhUX0gJMQorLQorLS8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorLSAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworLSNkZWZpbmUgX19VU0VfR05VX0dFVFRFWFQgMQorLQorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgSEFWRV9MT0NBTEVfSAorLSMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCistCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLSNpZm5kZWYgUEFSQU1TCistIyBpZiBfX1NURENfXworLSMgIGRlZmluZSBQQVJBTVMoYXJncykgYXJncworLSMgZWxzZQorLSMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmbmRlZiBOVUxMCistIyBpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fR05VQ19fCistIyAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCistIyBlbHNlCistIyAgZGVmaW5lIE5VTEwgKDApCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiAhSEFWRV9MQ19NRVNTQUdFUworLS8qIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBnZXR0ZXh0KCkgYW5kIGRnZXR0ZXh0KCkKKy0gICBmdW5jdGlvbi4gIEJ1dCBzb21lIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoaXMgZGVmaW5lZC4gIERlZmluZSBpdAorLSAgIHRvIGEgZGVmYXVsdCB2YWx1ZS4gICovCistIyBkZWZpbmUgTENfTUVTU0FHRVMgKC0xKQorLSNlbmRpZgorLQorLQorLS8qIERlY2xhcmF0aW9ucyBmb3IgZ2V0dGV4dC11c2luZy1jYXRnZXRzIGludGVyZmFjZS4gIERlcml2ZWQgZnJvbQorLSAgIEppbSBNZXllcmluZydzIGxpYmludGwuaC4gICovCistc3RydWN0IF9tc2dfZW50CisteworLSAgY29uc3QgY2hhciAqX21zZzsKKy0gIGludCBfbXNnX251bWJlcjsKKy19OworLQorLQorLSNpZiBIQVZFX0NBVEdFVFMKKy0vKiBUaGVzZSB0d28gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoZSBhdXRvbWF0aWNhbGx5IGJ5IHBvLXRvLXRibC5zZWQKKy0gICBnZW5lcmF0ZWQgZmlsZSBgY2F0LWlkLXRibC5jJy4gICovCistZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbXNnX2VudCBfbXNnX3RibFtdOworLWV4dGVybiBpbnQgX21zZ190YmxfbGVuZ3RoOworLSNlbmRpZgorLQorLQorLS8qIEZvciBhdXRvbWF0aWNhbCBleHRyYWN0aW9uIG9mIG1lc3NhZ2VzIHNvbWV0aW1lcyBubyByZWFsCistICAgdHJhbnNsYXRpb24gaXMgbmVlZGVkLiAgSW5zdGVhZCB0aGUgc3RyaW5nIGl0c2VsZiBpcyB0aGUgcmVzdWx0LiAgKi8KKy0jZGVmaW5lIGdldHRleHRfbm9vcChTdHIpIChTdHIpCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKy0gICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorLSAgIHRleHQpLiAgKi8KKy1leHRlcm4gY2hhciAqZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmdldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CistICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKy1leHRlcm4gY2hhciAqZGdldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0X18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCQkgY29uc3QgY2hhciAqX19tc2dpZCkpOworLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorLSAgIGxvY2FsZS4gICovCistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCistCQkJCWludCBfX2NhdGVnb3J5KSk7CistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX21zZ2lkLCBpbnQgX19jYXRlZ29yeSkpOworLQorLQorLS8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorLSAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCistICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCistZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7CistZXh0ZXJuIGNoYXIgKnRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKKy0KKy0vKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKy0gICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCistZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy1leHRlcm4gY2hhciAqYmluZHRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy0KKy0jaWYgRU5BQkxFX05MUworLQorLS8qIFNvbGFyaXMgMi4zIGhhcyB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBidXQgZGNnZXR0ZXh0IGlzIG1pc3NpbmcuCistICAgU28gd2Ugb21pdCB0aGlzIG9wdGltaXphdGlvbiBmb3IgU29sYXJpcyAyLjMuICBCVFcsIFNvbGFyaXMgMi40CistICAgaGFzIGRjZ2V0dGV4dC4gICovCistIyBpZiAhSEFWRV9DQVRHRVRTICYmICghSEFWRV9HRVRURVhUIHx8IEhBVkVfRENHRVRURVhUKQorLQorLSMgIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKQkJCQkJCSAgICAgIFwKKy0gICAgIGRnZXR0ZXh0IChOVUxMLCBNc2dpZCkKKy0KKy0jICBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpCQkJCQkgICAgICBcCistICAgICBkY2dldHRleHQgKERvbWFpbm5hbWUsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKy0KKy0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNworLS8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gbG9hZG1zZ2NhdC5jLiAgV2UgbmVlZCBhIHNpZ24sCistICAgd2hldGhlciBhIG5ldyBjYXRhbG9nIHdhcyBsb2FkZWQsIHdoaWNoIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYWxsCistICAgdHJhbnNsYXRpb25zLiAgKi8KKy1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CistCistIyAgIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KQkJCSAgICAgIFwKKy0gIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKy0gICAoewkJCQkJCQkJCSAgICAgIFwKKy0gICAgIGNoYXIgKl9fcmVzdWx0OwkJCQkJCQkgICAgICBcCistICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKE1zZ2lkKSkJCQkJCSAgICAgIFwKKy0gICAgICAgewkJCQkJCQkJICAgICAgXAorLQkgc3RhdGljIGNoYXIgKl9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKy0JIHN0YXRpYyBpbnQgX19jYXRhbG9nX2NvdW50ZXJfXzsJCQkJICAgICAgXAorLQkgaWYgKCEgX190cmFuc2xhdGlvbl9fIHx8IF9fY2F0YWxvZ19jb3VudGVyX18gIT0gX25sX21zZ19jYXRfY250cikgICAgXAorLQkgICB7CQkJCQkJCQkgICAgICBcCistCSAgICAgX190cmFuc2xhdGlvbl9fID0JCQkJCQkgICAgICBcCistCSAgICAgICBkY2dldHRleHRfXyAoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KTsJCSAgICAgIFwKKy0JICAgICBfX2NhdGFsb2dfY291bnRlcl9fID0gX25sX21zZ19jYXRfY250cjsJCQkgICAgICBcCistCSAgIH0JCQkJCQkJCSAgICAgIFwKKy0JIF9fcmVzdWx0ID0gX190cmFuc2xhdGlvbl9fOwkJCQkJICAgICAgXAorLSAgICAgICB9CQkJCQkJCQkgICAgICBcCistICAgICBlbHNlCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fcmVzdWx0ID0gZGNnZXR0ZXh0X18gKERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSk7CQkgICAgICBcCistICAgICBfX3Jlc3VsdDsJCQkJCQkJCSAgICAgIFwKKy0gICAgfSkpCistIyAgZW5kaWYKKy0jIGVuZGlmCistCistI2Vsc2UKKy0KKy0jIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKSAoTXNnaWQpCistIyBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpIChNc2dpZCkKKy0jIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoTXNnaWQpCistIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSB3aGlsZSAoMCkgLyogbm90aGluZyAqLworLSMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKERvbWFpbm5hbWUsIERpcm5hbWUpIHdoaWxlICgwKSAvKiBub3RoaW5nICovCistCistI2VuZGlmCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistfQorLSNlbmRpZgorLQorLSNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xpYmdudWludGwuaC5pbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saWJnbnVpbnRsLmguaW4JMjAwNC0wOS0xMiAxNDo0MDozNC40NjI3MzE4MjQgLTA0MDAKK0BAIC0wLDAgKzEsMzgzIEBACisrLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfTElCSU5UTF9ICisrI2RlZmluZSBfTElCSU5UTF9ICTEKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrLyogVGhlIExDX01FU1NBR0VTIGxvY2FsZSBjYXRlZ29yeSBpcyB0aGUgY2F0ZWdvcnkgdXNlZCBieSB0aGUgZnVuY3Rpb25zCisrICAgZ2V0dGV4dCgpIGFuZCBkZ2V0dGV4dCgpLiAgSXQgaXMgc3BlY2lmaWVkIGluIFBPU0lYLCBidXQgbm90IGluIEFOU0kgQy4KKysgICBPbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgZGVmaW5lIGl0LCB1c2UgYW4gYXJiaXRyYXJ5IHZhbHVlIGluc3RlYWQuCisrICAgT24gU29sYXJpcywgPGxvY2FsZS5oPiBkZWZpbmVzIF9fTE9DQUxFX0ggKG9yIF9MT0NBTEVfSCBpbiBTb2xhcmlzIDIuNSkKKysgICB0aGVuIGluY2x1ZGVzIDxsaWJpbnRsLmg+IChpLmUuIHRoaXMgZmlsZSEpIGFuZCB0aGVuIG9ubHkgZGVmaW5lcworKyAgIExDX01FU1NBR0VTLiAgVG8gYXZvaWQgYSByZWRlZmluaXRpb24gd2FybmluZywgZG9uJ3QgZGVmaW5lIExDX01FU1NBR0VTCisrICAgaW4gdGhpcyBjYXNlLiAgKi8KKysjaWYgIWRlZmluZWQgTENfTUVTU0FHRVMgJiYgIShkZWZpbmVkIF9fTE9DQUxFX0ggfHwgKGRlZmluZWQgX0xPQ0FMRV9IICYmIGRlZmluZWQgX19zdW4pKQorKyMgZGVmaW5lIExDX01FU1NBR0VTIDE3MjkKKysjZW5kaWYKKysKKysvKiBXZSBkZWZpbmUgYW4gYWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIHRoZSBHTlUKKysgICBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0LiAgKi8KKysjZGVmaW5lIF9fVVNFX0dOVV9HRVRURVhUIDEKKysKKysvKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXBwb3J0ZWQgZmlsZSBmb3JtYXRzLiAgUmV0dXJucyB0aGUKKysgICBtYXhpbXVtIG1pbm9yIHJldmlzaW9uIG51bWJlciBzdXBwb3J0ZWQgZm9yIGEgZ2l2ZW4gbWFqb3IgcmV2aXNpb24uICAqLworKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpIFwKKysgICgobWFqb3IpID09IDAgPyAxIDogLTEpCisrCisrLyogUmVzb2x2ZSBhIHBsYXRmb3JtIHNwZWNpZmljIGNvbmZsaWN0IG9uIERKR1BQLiAgR05VIGdldHRleHQgdGFrZXMKKysgICBwcmVjZWRlbmNlIG92ZXIgX2NvbmlvX2dldHRleHQuICAqLworKyNpZmRlZiBfX0RKR1BQX18KKysjIHVuZGVmIGdldHRleHQKKysjZW5kaWYKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBXZSByZWRpcmVjdCB0aGUgZnVuY3Rpb25zIHRvIHRob3NlIHByZWZpeGVkIHdpdGggImxpYmludGxfIi4gIFRoaXMgaXMKKysgICBuZWNlc3NhcnksIGJlY2F1c2Ugc29tZSBzeXN0ZW1zIGRlZmluZSBnZXR0ZXh0L3RleHRkb21haW4vLi4uIGluIHRoZSBDCisrICAgbGlicmFyeSAobmFtZWx5LCBTb2xhcmlzIDIuNCBhbmQgbmV3ZXIsIGFuZCBHTlUgbGliYyAyLjAgYW5kIG5ld2VyKS4KKysgICBJZiB3ZSB1c2VkIHRoZSB1bnByZWZpeGVkIG5hbWVzLCB0aGVyZSB3b3VsZCBiZSBjYXNlcyB3aGVyZSB0aGUKKysgICBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiB0aGUgbGliaW50bC5zbworKyAgIHNoYXJlZCBsaWJyYXJ5LiAgUmVjYWxsIHRoYXQgb24gRUxGIHN5c3RlbXMsIHRoZSBzeW1ib2xzIGFyZSBsb29rZWQKKysgICB1cCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorKyAgICAgMS4gaW4gdGhlIGV4ZWN1dGFibGUsCisrICAgICAyLiBpbiB0aGUgc2hhcmVkIGxpYnJhcmllcyBzcGVjaWZpZWQgb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lLCBpbiBvcmRlciwKKysgICAgIDMuIGluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rCisrICAgICAgICBjb21tYW5kIGxpbmUsCisrICAgICA0LiBpbiB0aGUgZGxvcGVuKCllZCBzaGFyZWQgbGlicmFyaWVzLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCisrICAgICAgICBkbG9wZW4oKWVkLgorKyAgIFRoZSBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiBsaWJpbnRsLnNvIGlmCisrICAgZWl0aGVyCisrICAgICAqIC1sYyBpcyBnaXZlbiBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUgYW5kIC1saW50bCBpc24ndCwgb3IKKysgICAgICogLWxjIGlzIGdpdmVuIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSBiZWZvcmUgLWxpbnRsLCBvcgorKyAgICAgKiBsaWJpbnRsLnNvIGlzIGEgZGVwZW5kZW5jeSBvZiBhIGRsb3BlbigpZWQgc2hhcmVkIGxpYnJhcnkgYnV0IG5vdAorKyAgICAgICBsaW5rZWQgdG8gdGhlIGV4ZWN1dGFibGUgYXQgbGluayB0aW1lLgorKyAgIFNpbmNlIFNvbGFyaXMgZ2V0dGV4dCgpIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiBHTlUgZ2V0dGV4dCgpLCB0aGlzCisrICAgd291bGQgYmUgdW5hY2NlcHRhYmxlLgorKworKyAgIFRoZSByZWRpcmVjdGlvbiBoYXBwZW5zIGJ5IGRlZmF1bHQgdGhyb3VnaCBtYWNyb3MgaW4gQywgc28gdGhhdCAmZ2V0dGV4dAorKyAgIGlzIGluZGVwZW5kZW50IG9mIHRoZSBjb21waWxhdGlvbiB1bml0LCBidXQgdGhyb3VnaCBpbmxpbmUgZnVuY3Rpb25zIGluCisrICAgQysrLCBpbiBvcmRlciBub3QgdG8gaW50ZXJmZXJlIHdpdGggdGhlIG5hbWUgbWFuZ2xpbmcgb2YgY2xhc3MgZmllbGRzIG9yCisrICAgY2xhc3MgbWV0aG9kcyBjYWxsZWQgJ2dldHRleHQnLiAgKi8KKysKKysvKiBUaGUgdXNlciBjYW4gZGVmaW5lIF9JTlRMX1JFRElSRUNUX0lOTElORSBvciBfSU5UTF9SRURJUkVDVF9NQUNST1MuCisrICAgSWYgaGUgZG9lc24ndCwgd2UgY2hvb3NlIHRoZSBtZXRob2QuICBBIHRoaXJkIHBvc3NpYmxlIG1ldGhvZCBpcworKyAgIF9JTlRMX1JFRElSRUNUX0FTTSwgc3VwcG9ydGVkIG9ubHkgYnkgR0NDLiAgKi8KKysjaWYgIShkZWZpbmVkIF9JTlRMX1JFRElSRUNUX0lOTElORSB8fCBkZWZpbmVkIF9JTlRMX1JFRElSRUNUX01BQ1JPUykKKysjIGlmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19BUFBMRV9DQ19fICYmICFkZWZpbmVkIF9fTUlOR1czMl9fICYmICEoX19HTlVDX18gPT0gMiAmJiBkZWZpbmVkIF9BSVgpICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX0FTTQorKyMgZWxzZQorKyMgIGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKysjICBlbHNlCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysvKiBBdXhpbGlhcnkgbWFjcm9zLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfQVNNCisrIyBkZWZpbmUgX0lOVExfQVNNKGNuYW1lKSBfX2FzbV9fIChfSU5UTF9BU01OQU1FIChfX1VTRVJfTEFCRUxfUFJFRklYX18sICNjbmFtZSkpCisrIyBkZWZpbmUgX0lOVExfQVNNTkFNRShwcmVmaXgsY25hbWVzdHJpbmcpIF9JTlRMX1NUUklOR0lGWSAocHJlZml4KSBjbmFtZXN0cmluZworKyMgZGVmaW5lIF9JTlRMX1NUUklOR0lGWShwcmVmaXgpICNwcmVmaXgKKysjZWxzZQorKyMgZGVmaW5lIF9JTlRMX0FTTShjbmFtZSkKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisrICAgdGV4dCkuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAoX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGdldHRleHQgbGliaW50bF9nZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZGdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRnZXR0ZXh0IGxpYmludGxfZGdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKysgICBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkJaW50IF9fY2F0ZWdvcnkpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisrCQkJICAgICAgIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkLCBfX2NhdGVnb3J5KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZGNnZXR0ZXh0IGxpYmludGxfZGNnZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorKwkJCWludCBfX2NhdGVnb3J5KQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGNnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysKKysvKiBTaW1pbGFyIHRvIGBnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorKyAgIG51bWJlciBOLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKm5nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIG5nZXR0ZXh0IGxpYmludGxfbmdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9uZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrLyogU2ltaWxhciB0byBgZGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCisrCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAorKwkJCSAgICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RuZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRuZ2V0dGV4dCBsaWJpbnRsX2RuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQljb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJdW5zaWduZWQgbG9uZyBpbnQgX19uKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZG5nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBTaW1pbGFyIHRvIGBkY2dldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCQl1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZDEsIF9fbXNnaWQyLCBfX24sIF9fY2F0ZWdvcnkpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBkY25nZXR0ZXh0IGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RjbmdldHRleHQpOworKyNlbmRpZgorKworKworKy8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorKyAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCisrICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX3RleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoX19kb21haW5uYW1lKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgdGV4dGRvbWFpbiBsaWJpbnRsX3RleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfdGV4dGRvbWFpbik7CisrI2VuZGlmCisrCisrLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisrICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChfX2RvbWFpbm5hbWUsIF9fZGlybmFtZSk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluIGxpYmludGxfYmluZHRleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19kaXJuYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfYmluZHRleHRkb21haW4pOworKyNlbmRpZgorKworKy8qIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB3aGljaCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKKysgICBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIHJldHVybmVkLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCSAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fZG9tYWlubmFtZSwgX19jb2Rlc2V0KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCk7CisrI2VuZGlmCisrCisrCisrLyogU3VwcG9ydCBmb3IgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMgaW4gKnByaW50ZigpLCBmb2xsb3dpbmcgdGhlCisrICAgUE9TSVgvWFNJIHNwZWNpZmljYXRpb24uCisrICAgTm90ZTogVGhlc2UgcmVwbGFjZW1lbnRzIGZvciB0aGUgKnByaW50ZigpIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbmx5CisrICAgaW4gc291cmNlIGZpbGVzIHRoYXQgI2luY2x1ZGUgPGxpYmludGwuaD4gb3IgI2luY2x1ZGUgImdldHRleHQuaCIuCisrICAgUGFja2FnZXMgdGhhdCB1c2UgKnByaW50ZigpIGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IHJlZmVyIHRvIF8oKQorKyAgIG9yIGdldHRleHQoKSBidXQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUKKysgICBvZiBfKCkgb3IgZ2V0dGV4dCgpIG5lZWQgdG8gYWRkIHRoaXMgI2luY2x1ZGUuICBPaCB3ZWxsLiAgKi8KKysKKysjaWYgIUBIQVZFX1BPU0lYX1BSSU5URkAKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpZiBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIKKysjIGluY2x1ZGUgPHN0ZGFyZy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDx2YXJhcmdzLmg+CisrI2VuZGlmCisrCisrI3VuZGVmIGZwcmludGYKKysjZGVmaW5lIGZwcmludGYgbGliaW50bF9mcHJpbnRmCisrZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdmZwcmludGYKKysjZGVmaW5lIHZmcHJpbnRmIGxpYmludGxfdmZwcmludGYKKytleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHByaW50ZgorKyNkZWZpbmUgcHJpbnRmIGxpYmludGxfcHJpbnRmCisrZXh0ZXJuIGludCBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnByaW50ZgorKyNkZWZpbmUgdnByaW50ZiBsaWJpbnRsX3ZwcmludGYKKytleHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHNwcmludGYKKysjZGVmaW5lIHNwcmludGYgbGliaW50bF9zcHJpbnRmCisrZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnNwcmludGYKKysjZGVmaW5lIHZzcHJpbnRmIGxpYmludGxfdnNwcmludGYKKytleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2lmIEBIQVZFX1NOUFJJTlRGQAorKworKyN1bmRlZiBzbnByaW50ZgorKyNkZWZpbmUgc25wcmludGYgbGliaW50bF9zbnByaW50ZgorK2V4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZzbnByaW50ZgorKyNkZWZpbmUgdnNucHJpbnRmIGxpYmludGxfdnNucHJpbnRmCisrZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNpZiBASEFWRV9BU1BSSU5URkAKKysKKysjdW5kZWYgYXNwcmludGYKKysjZGVmaW5lIGFzcHJpbnRmIGxpYmludGxfYXNwcmludGYKKytleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZhc3ByaW50ZgorKyNkZWZpbmUgdmFzcHJpbnRmIGxpYmludGxfdmFzcHJpbnRmCisrZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2VuZGlmCisrCisrI2lmIEBIQVZFX1dQUklOVEZACisrCisrI3VuZGVmIGZ3cHJpbnRmCisrI2RlZmluZSBmd3ByaW50ZiBsaWJpbnRsX2Z3cHJpbnRmCisrZXh0ZXJuIGludCBmd3ByaW50ZiAoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZmd3ByaW50ZgorKyNkZWZpbmUgdmZ3cHJpbnRmIGxpYmludGxfdmZ3cHJpbnRmCisrZXh0ZXJuIGludCB2ZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKKysKKysjdW5kZWYgd3ByaW50ZgorKyNkZWZpbmUgd3ByaW50ZiBsaWJpbnRsX3dwcmludGYKKytleHRlcm4gaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKysjdW5kZWYgdndwcmludGYKKysjZGVmaW5lIHZ3cHJpbnRmIGxpYmludGxfdndwcmludGYKKytleHRlcm4gaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyN1bmRlZiBzd3ByaW50ZgorKyNkZWZpbmUgc3dwcmludGYgbGliaW50bF9zd3ByaW50ZgorK2V4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZzd3ByaW50ZgorKyNkZWZpbmUgdnN3cHJpbnRmIGxpYmludGxfdnN3cHJpbnRmCisrZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNlbmRpZgorKworKworKy8qIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrI2RlZmluZSBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorK2V4dGVybiB2b2lkCisrICAgICAgIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeCwKKysJCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogbGliaW50bC5oICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGludXgtbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saW51eC1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDAgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gTGludXggc3R5bGUgLm1zZyBmaWxlCistIyBDb3B5cmlnaHQgKEMpIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKy0jCistIworLSMgVGhlIGZpcnN0IGRpcmVjdGl2ZSBpbiB0aGUgLm1zZyBzaG91bGQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlCistIyBtZXNzYWdlIHNldCBudW1iZXIuICBXZSB1c2UgYWx3YXlzIHNldCBudW1iZXIgMS4KKy0jCistMSB7CistICBpXAorLSRzZXQgMSAjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBwbzJtc2cuc2VkCistICBoCistICBzLy4qLzAvCistICB4CistfQorLSMKKy0jIE1pdGNoJ3Mgb2xkIGNhdGFsb2cgZm9ybWF0IGRvZXMgbm90IGFsbG93IGNvbW1lbnRzLgorLSMKKy0jIFdlIGNvcHkgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgYXMgYSBjb21tZW50IGludG8gdGhlIC5tc2cgZmlsZS4KKy0jCistL15tc2dpZC8geworLSAgcy9tc2dpZFsgCV0qIi8vCistIworLSMgVGhpcyBkb2VzIG5vdCB3b3JrIG5vdyB3aXRoIHRoZSBuZXcgZm9ybWF0LgorLSMgLyIkLyEgeworLSMgICBzL1xcJC8vCistIyAgIHMvJC8gLi4uIChtb3JlIGxpbmVzIGZvbGxvd2luZykiLworLSMgfQorLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSAgRworLSAgcy9cKC4qXCkiXG5cKFswLTldKlwpLyQgI1wyIE9yaWdpbmFsIE1lc3NhZ2U6KFwxKS9wCistfQorLSMKKy0jIFRoZSAubXNnIGZpbGUgY29udGFpbnMsIG90aGVyIHRoZW4gdGhlIC5wbyBmaWxlLCBvbmx5IHRoZSB0cmFuc2xhdGlvbnMKKy0jIGJ1dCBlYWNoIGdpdmVuIGEgdW5pcXVlIElELiAgU3RhcnRpbmcgZnJvbSAxIGFuZCBpbmNyZW1lbnRpbmcgYnkgMSBmb3IKKy0jIGVhY2ggbWVzc2FnZSB3ZSBhc3NpZ24gdGhlbSB0byB0aGUgbWVzc2FnZXMuCistIyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgLnBvIGZpbGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2F0LWlkLXRibC5jIGZpbGUKKy0jICh3aXRoIHBvLXRvLXRibCkgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSB1c2VkIGhlcmUuICAoQXQgbGVhc3QgdGhlIG9yZGVyCistIyBvZiBkZWNsYXJhdGlvbnMgbXVzdCBub3QgYmUgY2hhbmdlZC4pCistIworLS9ebXNnc3RyLyB7CistICBzL21zZ3N0clsgCV0qIlwoLipcKSIvIyBcMS8KKy0jIENsZWFyIHN1YnN0aXR1dGlvbiBmbGFnLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBjb250aW51YXRpb24gbGluZS4KKy0gIHMvXCguKlxuXCkiXCguKlwpIi9cMVwyLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistICBQCistICBECistIyBOb3RlIHRoYXQgRCBpbmNsdWRlcyBhIGp1bXAgdG8gdGhlIHN0YXJ0ISEKKy0jIFdlIGZvdW5kIGEgY29udGludWF0aW9uIGxpbmUuICBCdXQgYmVmb3JlIHByaW50aW5nIGluc2VydCAnXCcuCistICA6YQorLSAgcy9cKC4qXClcKFxuLipcKS9cMVxcXDIvCistICBQCistIyBXZSBjYW5ub3QgdXNlIEQgaGVyZS4KKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2FkaW5mby5oCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvYWRpbmZvLmgJMjAwNC0wOS0xMiAxNDo0MDozNC40Njg3MzA5MTIgLTA0MDAKK0BAIC0xLDkgKzEsNTQgQEAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpIGFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpICgpCistIyBlbmRpZgorKy8qIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQURJTkZPX0gKKysjZGVmaW5lIF9MT0FESU5GT19ICTEKKysKKysvKiBEZWNsYXJhdGlvbnMgb2YgbG9jYWxlIGRlcGVuZGVudCBjYXRhbG9nIGxvb2t1cCBmdW5jdGlvbnMuCisrICAgSW1wbGVtZW50ZWQgaW4KKysKKysgICAgIGxvY2FsZWFsaWFzLmMgICAgUG9zc2libHkgcmVwbGFjZSBhIGxvY2FsZSBuYW1lIGJ5IGFub3RoZXIuCisrICAgICBleHBsb2RlbmFtZS5jICAgIFNwbGl0IGEgbG9jYWxlIG5hbWUgaW50byBpdHMgdmFyaW91cyBmaWVsZHMuCisrICAgICBsMTBuZmxpc3QuYyAgICAgIEdlbmVyYXRlIGEgbGlzdCBvZiBmaWxlbmFtZXMgb2YgcG9zc2libGUgbWVzc2FnZSBjYXRhbG9ncy4KKysgICAgIGZpbmRkb21haW4uYyAgICAgRmluZCBhbmQgb3BlbiB0aGUgcmVsZXZhbnQgbWVzc2FnZSBjYXRhbG9ncy4KKysKKysgICBUaGUgbWFpbiBmdW5jdGlvbiBfbmxfZmluZF9kb21haW4oKSBpbiBmaW5kZG9tYWluLmMgaXMgZGVjbGFyZWQKKysgICBpbiBnZXR0ZXh0UC5oLgorKyAqLworKworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKy8qIFRlbGwgdGhlIGNvbXBpbGVyIHdoZW4gYSBjb25kaXRpb25hbCBvciBpbnRlZ2VyIGV4cHJlc3Npb24gaXMKKysgICBhbG1vc3QgYWx3YXlzIHRydWUgb3IgYWxtb3N0IGFsd2F5cyBmYWxzZS4gICovCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisrIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpIChleHByKQorKyNlbmRpZgorKworKy8qIFNlcGFyYXRvciBpbiBQQVRIIGxpa2UgbGlzdHMgb2YgcGF0aG5hbWVzLiAgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzsnCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyAjZW5kaWYKKyAKKyAvKiBFbmNvZGluZyBvZiBsb2NhbGUgbmFtZSBwYXJ0cy4gICovCitAQCAtMzIsMjcgKzc3LDY5IEBACisgfTsKKyAKKyAKKy1leHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKmNvZGVzZXQsCistCQkJCQkJICBzaXplX3QgbmFtZV9sZW4pKTsKKysvKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CisrICAgbmFtZXMuICBOb3JtYWxpemF0aW9uIGFsbG93cyB0aGUgdXNlciB0byB1c2UgYW55IG9mIHRoZSBjb21tb24KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb25zdCBjaGFyICpjb2Rlc2V0LAorKwkJCQkJICBzaXplX3QgbmFtZV9sZW4pOworIAorKy8qIExvb2t1cCBhIGxvY2FsZSBkZXBlbmRlbnQgZmlsZS4KKysgICAqTDEwTkZJTEVfTElTVCBkZW5vdGVzIGEgcG9vbCBvZiBsb29rdXAgcmVzdWx0cyBvZiBsb2NhbGUgZGVwZW5kZW50CisrICAgZmlsZXMgb2YgdGhlIHNhbWUga2luZCwgc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgLT5maWxlbmFtZS4KKysgICBESVJMSVNUIGFuZCBESVJMSVNUX0xFTiBhcmUgYW4gYXJneiBsaXN0IG9mIGRpcmVjdG9yaWVzIGluIHdoaWNoIHRvCisrICAgbG9vaywgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgZGlyZWN0b3J5IChpLmUuIERJUkxJU1RfTEVOID4gMCkuCisrICAgTUFTSywgTEFOR1VBR0UsIFRFUlJJVE9SWSwgQ09ERVNFVCwgTk9STUFMSVpFRF9DT0RFU0VULCBNT0RJRklFUiwKKysgICBTUEVDSUFMLCBTUE9OU09SLCBSRVZJU0lPTiBhcmUgdGhlIHBpZWNlcyBvZiB0aGUgbG9jYWxlIG5hbWUsIGFzCisrICAgcHJvZHVjZWQgYnkgX25sX2V4cGxvZGVfbmFtZSgpLiAgRklMRU5BTUUgaXMgdGhlIGZpbGVuYW1lIHN1ZmZpeC4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsb29rdXAgcmVzdWx0LCBlaXRoZXIgZm91bmQgaW4gKkwxME5GSUxFX0xJU1QsCisrICAgb3IgLSBpZiBET19BTExPQ0FURSBpcyBub256ZXJvIC0gZnJlc2hseSBhbGxvY2F0ZWQsIG9yIHBvc3NpYmx5IE5VTEwuCisrICAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub24tTlVMTCwgaXQgaXMgYWRkZWQgdG8gKkwxME5GSUxFX0xJU1QsIGFuZAorKyAgIGl0cyAtPm5leHQgZmllbGQgZGVub3RlcyB0aGUgY2hhaW5pbmcgaW5zaWRlICpMMTBORklMRV9MSVNULCBhbmQKKysgICBmdXJ0aGVybW9yZSBpdHMgLT5zdWNjZXNzb3JbXSBmaWVsZCBjb250YWlucyBhIGxpc3Qgb2Ygb3RoZXIgbG9va3VwCisrICAgcmVzdWx0cyBmcm9tIHdoaWNoIHRoaXMgbG9va3VwIHJlc3VsdCBpbmhlcml0cy4gICovCisgZXh0ZXJuIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCBQQVJBTVMgKChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKy0JCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLCBpbnQgbWFzaywKKy0JCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKy0JCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwKKy0JCQkgICAgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKy0JCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCistCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpKTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssCisrCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSk7CisgCisrLyogTG9va3VwIHRoZSByZWFsIGxvY2FsZSBuYW1lIGZvciBhIGxvY2FsZSBhbGlhcyBOQU1FLCBvciBOVUxMIGlmCisrICAgTkFNRSBpcyBub3QgYSBsb2NhbGUgYWxpYXMgKGJ1dCBwb3NzaWJseSBhIHJlYWwgbG9jYWxlIG5hbWUpLgorKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIG11c3Qgbm90IGJlIGZyZWVkLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSk7CisgCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgUEFSQU1TICgoY29uc3QgY2hhciAqbmFtZSkpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGl0cyBwaWVjZXM6IGxhbmd1YWdlLCBtb2RpZmllciwKKysgICB0ZXJyaXRvcnksIGNvZGVzZXQsIHNwZWNpYWwsIHNwb25zb3IsIHJldmlzaW9uLgorKyAgIE5BTUUgZ2V0cyBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkOiBOVUwgYnl0ZXMgYXJlIGluc2VydGVkIGhlcmUgYW5kCisrICAgdGhlcmUuICAqTEFOR1VBR0UgZ2V0cyBhc3NpZ25lZCBOQU1FLiAgRWFjaCBvZiAqTU9ESUZJRVIsICpURVJSSVRPUlksCisrICAgKkNPREVTRVQsICpTUEVDSUFMLCAqU1BPTlNPUiwgKlJFVklTSU9OIGdldHMgYXNzaWduZWQgZWl0aGVyIGEKKysgICBwb2ludGVyIGludG8gdGhlIG9sZCBOQU1FIHN0cmluZywgb3IgTlVMTC4gICpOT1JNQUxJWkVEX0NPREVTRVQKKysgICBnZXRzIGFzc2lnbmVkIHRoZSBleHBhbmRlZCAqQ09ERVNFVCwgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gKkNPREVTRVQ7CisrICAgdGhpcyBvbmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lCisrICAgZmlsbGVkLWluIHZhbHVlOgorKyAgICAgWFBHX01PRElGSUVSLCBDRU5fQVVESUVOQ0UgIGZvciAqTU9ESUZJRVIsCisrICAgICBURVJSSVRPUlkgICAgICAgICAgICAgICAgICAgZm9yICpURVJSSVRPUlksCisrICAgICBYUEdfQ09ERVNFVCAgICAgICAgICAgICAgICAgZm9yICpDT0RFU0VULAorKyAgICAgWFBHX05PUk1fQ09ERVNFVCAgICAgICAgICAgIGZvciAqTk9STUFMSVpFRF9DT0RFU0VULAorKyAgICAgQ0VOX1NQRUNJQUwgICAgICAgICAgICAgICAgIGZvciAqU1BFQ0lBTCwKKysgICAgIENFTl9TUE9OU09SICAgICAgICAgICAgICAgICBmb3IgKlNQT05TT1IsCisrICAgICBDRU5fUkVWSVNJT04gICAgICAgICAgICAgICAgZm9yICpSRVZJU0lPTi4KKysgKi8KKytleHRlcm4gaW50IF9ubF9leHBsb2RlX25hbWUgKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKiptb2RpZmllciwgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJCSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldCwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLCBjb25zdCBjaGFyICoqc3BvbnNvciwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbik7CisgCistZXh0ZXJuIGludCBfbmxfZXhwbG9kZV9uYW1lIFBBUkFNUyAoKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXIsCistCQkJCSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqY29kZXNldCwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcG9uc29yLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbikpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGEgbGVhZGluZyBsYW5ndWFnZSBwYXJ0IGFuZCBhbGwgdGhlCisrICAgcmVzdC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgbGFuZ3VhZ2UsCisrICAgaS5lLiB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzdC4gICovCisrZXh0ZXJuIGNoYXIgKl9ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKTsKKysKKysjZW5kaWYJLyogbG9hZGluZm8uaCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvYWRtc2djYXQuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2FkbXNnY2F0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40NzM3MzAxNTIgLTA0MDAKK0BAIC0xLDQyICsxLDQ1NSBAQAorLS8qIExvYWQgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogTG9hZCBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiAgYWxsb2NhCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisgI2lmIGRlZmluZWQgSEFWRV9VTklTVERfSCB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVApIHx8IGRlZmluZWQgX0xJQkMKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBpbmNsdWRlIDxsb2NhbGUuaD4KKysjZW5kaWYKKysKKysjaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorKyAgICB8fCAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9QT1NJWF9NQVBQRURfRklMRVMpCisgIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorKyMgdW5kZWYgSEFWRV9NTUFQCisrIyBkZWZpbmUgSEFWRV9NTUFQCTEKKysjZWxzZQorKyMgdW5kZWYgSEFWRV9NTUFQCisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKysjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ21vLmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisrI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisrI2VuZGlmCisrCisrLyogUHJvdmlkZSBmYWxsYmFjayB2YWx1ZXMgZm9yIG1hY3JvcyB0aGF0IG91Z2h0IHRvIGJlIGRlZmluZWQgaW4gPGludHR5cGVzLmg+LgorKyAgIE5vdGUgdGhhdCBvdXIgZmFsbGJhY2sgdmFsdWVzIG5lZWQgbm90IGJlIGxpdGVyYWwgc3RyaW5ncywgYmVjYXVzZSB3ZSBkb24ndAorKyAgIHVzZSB0aGVtIHdpdGggcHJlcHJvY2Vzc29yIHN0cmluZyBjb25jYXRlbmF0aW9uLiAgKi8KKysjaWYgIWRlZmluZWQgUFJJZDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWQ4CisrIyBkZWZpbmUgUFJJZDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWk4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpOAorKyMgZGVmaW5lIFBSSWk4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJbzgKKysjIGRlZmluZSBQUklvOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXU4CisrIyBkZWZpbmUgUFJJdTggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4OAorKyMgZGVmaW5lIFBSSXg4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWDgKKysjIGRlZmluZSBQUklYOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMTYKKysjIGRlZmluZSBQUklkMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTE2CisrIyBkZWZpbmUgUFJJaTE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8xNgorKyMgZGVmaW5lIFBSSW8xNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MTYKKysjIGRlZmluZSBQUkl1MTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDE2CisrIyBkZWZpbmUgUFJJeDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgxNgorKyMgZGVmaW5lIFBSSVgxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMzIKKysjIGRlZmluZSBQUklkMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTMyCisrIyBkZWZpbmUgUFJJaTMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8zMgorKyMgZGVmaW5lIFBSSW8zMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MzIKKysjIGRlZmluZSBQUkl1MzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDMyCisrIyBkZWZpbmUgUFJJeDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgzMgorKyMgZGVmaW5lIFBSSVgzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkNjQKKysjIGRlZmluZSBQUklkNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsZCIgOiAibGxkIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpNjQKKysjIGRlZmluZSBQUklpNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsaSIgOiAibGxpIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJbzY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvNjQKKysjIGRlZmluZSBQUklvNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1NjQKKysjIGRlZmluZSBQUkl1NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsdSIgOiAibGx1IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4NjQKKysjIGRlZmluZSBQUkl4NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJseCIgOiAibGx4IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYNjQKKysjIGRlZmluZSBQUklYNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZExFQVNUOAorKyMgZGVmaW5lIFBSSWRMRUFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlMRUFTVDgKKysjIGRlZmluZSBQUklpTEVBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTEVBU1Q4CisrIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUxFQVNUOAorKyMgZGVmaW5lIFBSSXVMRUFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhMRUFTVDgKKysjIGRlZmluZSBQUkl4TEVBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTEVBU1Q4CisrIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDE2CisrIyBkZWZpbmUgUFJJZExFQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QxNgorKyMgZGVmaW5lIFBSSWlMRUFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMTYKKysjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDE2CisrIyBkZWZpbmUgUFJJdUxFQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QxNgorKyMgZGVmaW5lIFBSSXhMRUFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMTYKKysjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDMyCisrIyBkZWZpbmUgUFJJZExFQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QzMgorKyMgZGVmaW5lIFBSSWlMRUFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMzIKKysjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDMyCisrIyBkZWZpbmUgUFJJdUxFQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QzMgorKyMgZGVmaW5lIFBSSXhMRUFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMzIKKysjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDY0CisrIyBkZWZpbmUgUFJJZExFQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1Q2NAorKyMgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUNjQKKysjIGRlZmluZSBQUklvTEVBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDY0CisrIyBkZWZpbmUgUFJJdUxFQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1Q2NAorKyMgZGVmaW5lIFBSSXhMRUFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUNjQKKysjIGRlZmluZSBQUklYTEVBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkRkFTVDgKKysjIGRlZmluZSBQUklkRkFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUZBU1Q4CisrIyBkZWZpbmUgUFJJaUZBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9GQVNUOAorKyMgZGVmaW5lIFBSSW9GQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1RkFTVDgKKysjIGRlZmluZSBQUkl1RkFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeEZBU1Q4CisrIyBkZWZpbmUgUFJJeEZBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhGQVNUOAorKyMgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QxNgorKyMgZGVmaW5lIFBSSWRGQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMTYKKysjIGRlZmluZSBQUklpRkFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDE2CisrIyBkZWZpbmUgUFJJb0ZBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QxNgorKyMgZGVmaW5lIFBSSXVGQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMTYKKysjIGRlZmluZSBQUkl4RkFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDE2CisrIyBkZWZpbmUgUFJJWEZBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QzMgorKyMgZGVmaW5lIFBSSWRGQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMzIKKysjIGRlZmluZSBQUklpRkFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDMyCisrIyBkZWZpbmUgUFJJb0ZBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QzMgorKyMgZGVmaW5lIFBSSXVGQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMzIKKysjIGRlZmluZSBQUkl4RkFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDMyCisrIyBkZWZpbmUgUFJJWEZBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1Q2NAorKyMgZGVmaW5lIFBSSWRGQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUNjQKKysjIGRlZmluZSBQUklpRkFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDY0CisrIyBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1Q2NAorKyMgZGVmaW5lIFBSSXVGQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUNjQKKysjIGRlZmluZSBQUkl4RkFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDY0CisrIyBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZE1BWAorKyMgZGVmaW5lIFBSSWRNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6ICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTUFYCisrIyBkZWZpbmUgUFJJaU1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibGkiIDogImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9NQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9NQVgKKysjIGRlZmluZSBQUklvTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdU1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdU1BWAorKyMgZGVmaW5lIFBSSXVNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6ICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TUFYCisrIyBkZWZpbmUgUFJJeE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibHgiIDogImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhNQVgKKysjIGRlZmluZSBQUklYTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZFBUUgorKyMgZGVmaW5lIFBSSWRQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gImQiIDogXAorKyAgICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpUFRSCisrIyBkZWZpbmUgUFJJaVBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibGkiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiaSIgOiBcCisrICAgImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9QVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9QVFIKKysjIGRlZmluZSBQUklvUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJvIiA6IFwKKysgICAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdVBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdVBUUgorKyMgZGVmaW5lIFBSSXVQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gInUiIDogXAorKyAgICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4UFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4UFRSCisrIyBkZWZpbmUgUFJJeFBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibHgiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAieCIgOiBcCisrICAgImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhQVFIKKysjIGRlZmluZSBQUklYUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJYIiA6IFwKKysgICAibGxYIikKKysjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCitAQCAtNDQsNyArNDU3LDYgQEAKKyAvKiBSZW5hbWUgdGhlIG5vbiBJU08gQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorICAgIGJlY2F1c2Ugc29tZSBJU08gQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBmc3RhdCAgX19mc3RhdAorICMgZGVmaW5lIG9wZW4gICBfX29wZW4KKyAjIGRlZmluZSBjbG9zZSAgX19jbG9zZQorICMgZGVmaW5lIHJlYWQgICBfX3JlYWQKK0BAIC01MiwzMCArNDY0LDQ3MSBAQAorICMgZGVmaW5lIG11bm1hcCBfX211bm1hcAorICNlbmRpZgorIAorKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrICAgc29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KKysjaWZkZWYgSEFWRV9BTExPQ0EKKysjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisrI2Vsc2UKKysjIGRlZmluZSBhbGxvY2EobikgbWFsbG9jIChuKQorKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisrI2VuZGlmCisrCisrLyogRm9yIHN5c3RlbXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBJL08uCisrICAgT19CSU5BUlkgaXMgdXN1YWxseSBkZWNsYXJlZCBpbiA8ZmNudGwuaD4uICovCisrI2lmICFkZWZpbmVkIE9fQklOQVJZICYmIGRlZmluZWQgX09fQklOQVJZCisrICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKysjIGRlZmluZSBPX0JJTkFSWSBfT19CSU5BUlkKKysjIGRlZmluZSBPX1RFWFQgX09fVEVYVAorKyNlbmRpZgorKyNpZmRlZiBfX0JFT1NfXworKyAgLyogQmVPUyA1IGhhcyBPX0JJTkFSWSBhbmQgT19URVhULCBidXQgdGhleSBoYXZlIG5vIGVmZmVjdC4gICovCisrIyB1bmRlZiBPX0JJTkFSWQorKyMgdW5kZWYgT19URVhUCisrI2VuZGlmCisrLyogT24gcmVhc29uYWJsZSBzeXN0ZW1zLCBiaW5hcnkgSS9PIGlzIHRoZSBkZWZhdWx0LiAgKi8KKysjaWZuZGVmIE9fQklOQVJZCisrIyBkZWZpbmUgT19CSU5BUlkgMAorKyNlbmRpZgorKworKworIC8qIFdlIG5lZWQgYSBzaWduLCB3aGV0aGVyIGEgbmV3IGNhdGFsb2cgd2FzIGxvYWRlZCwgd2hpY2ggY2FuIGJlIGFzc29jaWF0ZWQKKyAgICB3aXRoIGFsbCB0cmFuc2xhdGlvbnMuICBUaGlzIGlzIGltcG9ydGFudCBpZiB0aGUgdHJhbnNsYXRpb25zIGFyZQorICAgIGNhY2hlZCBieSBvbmUgb2YgR0NDJ3MgZmVhdHVyZXMuICAqLworLWludCBfbmxfbXNnX2NhdF9jbnRyID0gMDsKKytpbnQgX25sX21zZ19jYXRfY250cjsKKyAKKyAKKysvKiBFeHBhbmQgYSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgUmV0dXJuIE5VTEwgaWYgdW5zdXBwb3J0ZWQuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfc3lzZGVwX3NlZ21lbnRfdmFsdWUgKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgLyogVGVzdCBmb3IgYW4gSVNPIEMgOTkgc2VjdGlvbiA3LjguMSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZS4KKysgICAgIFN5bnRheDoKKysgICAgIFAgUiBJIHsgZCB8IGkgfCBvIHwgdSB8IHggfCBYIH0KKysgICAgIHsgeyB8IExFQVNUIHwgRkFTVCB9IHsgOCB8IDE2IHwgMzIgfCA2NCB9IHwgTUFYIHwgUFRSIH0gICovCisrICAvKiBXZSBkb24ndCB1c2UgYSB0YWJsZSBvZiAxNCB0aW1lcyA2ICdjb25zdCBjaGFyIConIHN0cmluZ3MgaGVyZSwgYmVjYXVzZQorKyAgICAgZGF0YSByZWxvY2F0aW9ucyBjb3N0IHN0YXJ0dXAgdGltZS4gICovCisrICBpZiAobmFtZVswXSA9PSAnUCcgJiYgbmFtZVsxXSA9PSAnUicgJiYgbmFtZVsyXSA9PSAnSScpCisrICAgIHsKKysgICAgICBpZiAobmFtZVszXSA9PSAnZCcgfHwgbmFtZVszXSA9PSAnaScgfHwgbmFtZVszXSA9PSAnbycgfHwgbmFtZVszXSA9PSAndScKKysJICB8fCBuYW1lWzNdID09ICd4JyB8fCBuYW1lWzNdID09ICdYJykKKysJeworKwkgIGlmIChuYW1lWzRdID09ICc4JyAmJiBuYW1lWzVdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWk4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJbzg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1ODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXg4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWDg7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICcxJyAmJiBuYW1lWzVdID09ICc2JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMTY7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICczJyAmJiBuYW1lWzVdID09ICcyJyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMzI7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICc2JyAmJiBuYW1lWzVdID09ICc0JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYNjQ7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdMJyAmJiBuYW1lWzVdID09ICdFJyAmJiBuYW1lWzZdID09ICdBJworKwkgICAgICAmJiBuYW1lWzddID09ICdTJyAmJiBuYW1lWzhdID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOV0gPT0gJzgnICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpTEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9MRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4TEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhMRUFTVDg7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMScgJiYgbmFtZVsxMF0gPT0gJzYnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMTY7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMycgJiYgbmFtZVsxMF0gPT0gJzInICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnNicgJiYgbmFtZVsxMF0gPT0gJzQnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUNjQ7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdGJyAmJiBuYW1lWzVdID09ICdBJyAmJiBuYW1lWzZdID09ICdTJworKwkgICAgICAmJiBuYW1lWzddID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzgnICYmIG5hbWVbOV0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUODsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzhdID09ICcxJyAmJiBuYW1lWzldID09ICc2JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvRkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYRkFTVDE2OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzMnICYmIG5hbWVbOV0gPT0gJzInICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZEZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpRkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4RkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs4XSA9PSAnNicgJiYgbmFtZVs5XSA9PSAnNCcgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0ZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWEZBU1Q2NDsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ00nICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1gnCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpTUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb01BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4TUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWE1BWDsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ1AnICYmIG5hbWVbNV0gPT0gJ1QnICYmIG5hbWVbNl0gPT0gJ1InCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpUFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb1BUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4UFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWFBUUjsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgLyogVGVzdCBmb3IgYSBnbGliYyBzcGVjaWZpYyBwcmludGYoKSBmb3JtYXQgZGlyZWN0aXZlIGZsYWcuICAqLworKyAgaWYgKG5hbWVbMF0gPT0gJ0knICYmIG5hbWVbMV0gPT0gJ1wwJykKKysgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKQorKyAgICAgIC8qIFRoZSAnSScgZmxhZywgaW4gbnVtZXJpYyBmb3JtYXQgZGlyZWN0aXZlcywgcmVwbGFjZXMgQVNDSUkgZGlnaXRzCisrCSB3aXRoIHRoZSAnb3V0ZGlnaXRzJyBkZWZpbmVkIGluIHRoZSBMQ19DVFlQRSBsb2NhbGUgZmFjZXQuICBUaGlzIGlzCisrCSB1c2VkIGZvciBGYXJzaSAoUGVyc2lhbikgYW5kIG1heWJlIEFyYWJpYy4gICovCisrICAgICAgcmV0dXJuICJJIjsKKysjZWxzZQorKyAgICAgIHJldHVybiAiIjsKKysjZW5kaWYKKysgICAgfQorKyAgLyogT3RoZXIgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFyZSBub3QgdmFsaWQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEluaXRpYWxpemUgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuCisrICAgUmV0dXJuIHRoZSBoZWFkZXIgZW50cnkuICAqLworK2NvbnN0IGNoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbiwKKysJCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQorK3sKKysgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4KKysgICAgIFRoaXMgY2FuIGJlIGZvdW5kIChpbiB0ZXh0dWFsIGZvcm0pIGluIHRoZSBlbnRyeSAiIi4gIElmIHRoaXMKKysgICAgIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoaXMgZG9lcyBub3QgY29udGFpbiB0aGUgYGNoYXJzZXQ9JworKyAgICAgaW5mb3JtYXRpb24sIHdlIHdpbGwgYXNzdW1lIHRoZSBjaGFyc2V0IG1hdGNoZXMgdGhlIG9uZSB0aGUKKysgICAgIGN1cnJlbnQgbG9jYWxlIGFuZCB3ZSBkb24ndCBoYXZlIHRvIHBlcmZvcm0gYW55IGNvbnZlcnNpb24uICAqLworKyAgY2hhciAqbnVsbGVudHJ5OworKyAgc2l6ZV90IG51bGxlbnRyeWxlbjsKKysKKysgIC8qIFByZWluaXRpYWxpemUgZmllbGRzLCB0byBhdm9pZCByZWN1cnNpb24gZHVyaW5nIF9ubF9maW5kX21zZy4gICovCisrICBkb21haW4tPmNvZGVzZXRfY250ciA9CisrICAgIChkb21haW5iaW5kaW5nICE9IE5VTEwgPyBkb21haW5iaW5kaW5nLT5jb2Rlc2V0X2NudHIgOiAwKTsKKysjaWZkZWYgX0xJQkMKKysgIGRvbWFpbi0+Y29udiA9IChfX2djb252X3QpIC0xOworKyNlbHNlCisrIyBpZiBIQVZFX0lDT05WCisrICBkb21haW4tPmNvbnYgPSAoaWNvbnZfdCkgLTE7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgZG9tYWluLT5jb252X3RhYiA9IE5VTEw7CisrCisrICAvKiBHZXQgdGhlIGhlYWRlciBlbnRyeS4gICovCisrICBudWxsZW50cnkgPSBfbmxfZmluZF9tc2cgKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nLCAiIiwgJm51bGxlbnRyeWxlbik7CisrCisrICBpZiAobnVsbGVudHJ5ICE9IE5VTEwpCisrICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICAgICAgY29uc3QgY2hhciAqY2hhcnNldHN0cjsKKysKKysgICAgICBjaGFyc2V0c3RyID0gc3Ryc3RyIChudWxsZW50cnksICJjaGFyc2V0PSIpOworKyAgICAgIGlmIChjaGFyc2V0c3RyICE9IE5VTEwpCisrCXsKKysJICBzaXplX3QgbGVuOworKwkgIGNoYXIgKmNoYXJzZXQ7CisrCSAgY29uc3QgY2hhciAqb3V0Y2hhcnNldDsKKysKKysJICBjaGFyc2V0c3RyICs9IHN0cmxlbiAoImNoYXJzZXQ9Iik7CisrCSAgbGVuID0gc3RyY3NwbiAoY2hhcnNldHN0ciwgIiBcdFxuIik7CisrCisrCSAgY2hhcnNldCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTUVNUENQWQorKwkgICooKGNoYXIgKikgbWVtcGNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKSkgPSAnXDAnOworKyMgZWxzZQorKwkgIG1lbWNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKTsKKysJICBjaGFyc2V0W2xlbl0gPSAnXDAnOworKyMgZW5kaWYKKysKKysJICAvKiBUaGUgb3V0cHV0IGNoYXJzZXQgc2hvdWxkIG5vcm1hbGx5IGJlIGRldGVybWluZWQgYnkgdGhlCisrCSAgICAgbG9jYWxlLiAgQnV0IHNvbWV0aW1lcyB0aGUgbG9jYWxlIGlzIG5vdCB1c2VkIG9yIG5vdCBjb3JyZWN0bHkKKysJICAgICBzZXQgdXAsIHNvIHdlIHByb3ZpZGUgYSBwb3NzaWJpbGl0eSBmb3IgdGhlIHVzZXIgdG8gb3ZlcnJpZGUKKysJICAgICB0aGlzLiAgTW9yZW92ZXIsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaAorKwkgICAgIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IG92ZXJyaWRlcyBib3RoLiAgKi8KKysJICBpZiAoZG9tYWluYmluZGluZyAhPSBOVUxMICYmIGRvbWFpbmJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKysJICAgIG91dGNoYXJzZXQgPSBkb21haW5iaW5kaW5nLT5jb2Rlc2V0OworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgb3V0Y2hhcnNldCA9IGdldGVudiAoIk9VVFBVVF9DSEFSU0VUIik7CisrCSAgICAgIGlmIChvdXRjaGFyc2V0ID09IE5VTEwgfHwgb3V0Y2hhcnNldFswXSA9PSAnXDAnKQorKwkJeworKyMgaWZkZWYgX0xJQkMKKysJCSAgb3V0Y2hhcnNldCA9IF9OTF9DVVJSRU5UIChMQ19DVFlQRSwgQ09ERVNFVCk7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkJICBleHRlcm4gY29uc3QgY2hhciAqbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKwkJICBvdXRjaGFyc2V0ID0gbG9jYWxlX2NoYXJzZXQgKCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCQl9CisrCSAgICB9CisrCisrIyBpZmRlZiBfTElCQworKwkgIC8qIFdlIGFsd2F5cyB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRpb24uICAqLworKwkgIG91dGNoYXJzZXQgPSBub3JtX2FkZF9zbGFzaGVzIChvdXRjaGFyc2V0LCAiVFJBTlNMSVQiKTsKKysJICBjaGFyc2V0ID0gbm9ybV9hZGRfc2xhc2hlcyAoY2hhcnNldCwgTlVMTCk7CisrCSAgaWYgKF9fZ2NvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCwgJmRvbWFpbi0+Y29udiwKKysJCQkgICAgR0NPTlZfQVZPSURfTk9DT05WKQorKwkgICAgICAhPSBfX0dDT05WX09LKQorKwkgICAgZG9tYWluLT5jb252ID0gKF9fZ2NvbnZfdCkgLTE7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgIC8qIFdoZW4gdXNpbmcgR05VIGxpYmMgPj0gMi4yIG9yIEdOVSBsaWJpY29udiA+PSAxLjUsCisrCSAgICAgd2Ugd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKysjICAgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSB8fCBfX0dMSUJDX18gPiAyIFwKKysgICAgICAgfHwgX0xJQklDT05WX1ZFUlNJT04gPj0gMHgwMTA1CisrCSAgaWYgKHN0cmNociAob3V0Y2hhcnNldCwgJy8nKSA9PSBOVUxMKQorKwkgICAgeworKwkgICAgICBjaGFyICp0bXA7CisrCisrCSAgICAgIGxlbiA9IHN0cmxlbiAob3V0Y2hhcnNldCk7CisrCSAgICAgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMTAgKyAxKTsKKysJICAgICAgbWVtY3B5ICh0bXAsIG91dGNoYXJzZXQsIGxlbik7CisrCSAgICAgIG1lbWNweSAodG1wICsgbGVuLCAiLy9UUkFOU0xJVCIsIDEwICsgMSk7CisrCSAgICAgIG91dGNoYXJzZXQgPSB0bXA7CisrCisrCSAgICAgIGRvbWFpbi0+Y29udiA9IGljb252X29wZW4gKG91dGNoYXJzZXQsIGNoYXJzZXQpOworKworKwkgICAgICBmcmVlYSAob3V0Y2hhcnNldCk7CisrCSAgICB9CisrCSAgZWxzZQorKyMgICBlbmRpZgorKwkgICAgZG9tYWluLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrCSAgZnJlZWEgKGNoYXJzZXQpOworKwl9CisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysgICAgfQorKworKyAgcmV0dXJuIG51bGxlbnRyeTsKKyt9CisrCisrLyogRnJlZXMgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuICAqLworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPmNvbnZfdGFiICE9IE5VTEwgJiYgZG9tYWluLT5jb252X3RhYiAhPSAoY2hhciAqKikgLTEpCisrICAgIGZyZWUgKGRvbWFpbi0+Y29udl90YWIpOworKworKyNpZmRlZiBfTElCQworKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMSkKKysgICAgX19nY29udl9jbG9zZSAoZG9tYWluLT5jb252KTsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoaWNvbnZfdCkgLTEpCisrICAgIGljb252X2Nsb3NlIChkb21haW4tPmNvbnYpOworKyMgZW5kaWYKKysjZW5kaWYKKyt9CisrCisgLyogTG9hZCB0aGUgbWVzc2FnZSBjYXRhbG9ncyBzcGVjaWZpZWQgYnkgRklMRU5BTUUuICBJZiBpdCBpcyBubyB2YWxpZAorICAgIG1lc3NhZ2UgY2F0YWxvZyBkbyBub3RoaW5nLiAgKi8KKyB2b2lkCistX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSkKKy0gICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlOworK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKysJCSBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBpbnQgZmQ7CisrICBzaXplX3Qgc2l6ZTsKKysjaWZkZWYgX0xJQkMKKysgIHN0cnVjdCBzdGF0NjQgc3Q7CisrI2Vsc2UKKyAgIHN0cnVjdCBzdGF0IHN0OworKyNlbmRpZgorICAgc3RydWN0IG1vX2ZpbGVfaGVhZGVyICpkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMTsKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisgICBpbnQgdXNlX21tYXAgPSAwOworLSNlbmRpZgorICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKysgIGludCByZXZpc2lvbjsKKysgIGNvbnN0IGNoYXIgKm51bGxlbnRyeTsKKyAKKyAgIGRvbWFpbl9maWxlLT5kZWNpZGVkID0gMTsKKyAgIGRvbWFpbl9maWxlLT5kYXRhID0gTlVMTDsKKyAKKysgIC8qIE5vdGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VsZXNzIHRvIHN0b3JlIGRvbWFpbmJpbmRpbmcgaW4gZG9tYWluX2ZpbGUKKysgICAgIGJlY2F1c2UgZG9tYWluYmluZGluZyBtaWdodCBiZSA9PSBOVUxMIG5vdyBidXQgIT0gTlVMTCBsYXRlciAoYWZ0ZXIKKysgICAgIGEgY2FsbCB0byBiaW5kX3RleHRkb21haW5fY29kZXNldCkuICAqLworKworICAgLyogSWYgdGhlIHJlY29yZCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBsb2NhbGUgdGhlIEZJTEVOQU1FCisgICAgICBtaWdodCBiZSBOVUxMLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgorICAgICAgc3BlY2lmaWNhdGlvbiB0aGUgbG9jYWxlIGZpbGUgbmFtZSBpcyBkaWZmZXJlbnQgZm9yIFhQRyBhbmQgQ0VOCitAQCAtODQsMjcgKzkzNywzMiBAQAorICAgICByZXR1cm47CisgCisgICAvKiBUcnkgdG8gb3BlbiB0aGUgYWRkcmVzc2VkIGZpbGUuICAqLworLSAgZmQgPSBvcGVuIChkb21haW5fZmlsZS0+ZmlsZW5hbWUsIE9fUkRPTkxZKTsKKysgIGZkID0gb3BlbiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKKyAgIGlmIChmZCA9PSAtMSkKKyAgICAgcmV0dXJuOworIAorICAgLyogV2UgbXVzdCBrbm93IGFib3V0IHRoZSBzaXplIG9mIHRoZSBmaWxlLiAgKi8KKy0gIGlmIChmc3RhdCAoZmQsICZzdCkgIT0gMAorLSAgICAgICYmIHN0LnN0X3NpemUgPCAob2ZmX3QpIHNpemVvZiAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyKSkKKysgIGlmICgKKysjaWZkZWYgX0xJQkMKKysgICAgICBfX2J1aWx0aW5fZXhwZWN0IChmc3RhdDY0IChmZCwgJnN0KSAhPSAwLCAwKQorKyNlbHNlCisrICAgICAgX19idWlsdGluX2V4cGVjdCAoZnN0YXQgKGZkLCAmc3QpICE9IDAsIDApCisrI2VuZGlmCisrICAgICAgfHwgX19idWlsdGluX2V4cGVjdCAoKHNpemUgPSAoc2l6ZV90KSBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplLCAwKQorKyAgICAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKHNpemUgPCBzaXplb2YgKHN0cnVjdCBtb19maWxlX2hlYWRlciksIDApKQorICAgICB7CisgICAgICAgLyogU29tZXRoaW5nIHdlbnQgd3JvbmcuICAqLworICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyNpZmRlZiBIQVZFX01NQVAKKyAgIC8qIE5vdyB3ZSBhcmUgcmVhZHkgdG8gbG9hZCB0aGUgZmlsZS4gIElmIG1tYXAoKSBpcyBhdmFpbGFibGUgd2UgdHJ5CisgICAgICB0aGlzIGZpcnN0LiAgSWYgbm90IGF2YWlsYWJsZSBvciBpdCBmYWlsZWQgd2UgdHJ5IHRvIGxvYWQgaXQuICAqLworLSAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELAorKyAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELAorIAkJCQkJIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgCistICBpZiAoZGF0YSAhPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEgIT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSwgMSkpCisgICAgIHsKKyAgICAgICAvKiBtbWFwKCkgY2FsbCB3YXMgc3VjY2Vzc2Z1bC4gICovCisgICAgICAgY2xvc2UgKGZkKTsKK0BAIC0xMTYsMjQgKzk3NCwyNyBAQAorICAgICAgaXQgbWFudWFsbHkuICAqLworICAgaWYgKGRhdGEgPT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSkKKyAgICAgeworLSAgICAgIG9mZl90IHRvX3JlYWQ7CisrICAgICAgc2l6ZV90IHRvX3JlYWQ7CisgICAgICAgY2hhciAqcmVhZF9wdHI7CisgCistICAgICAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbWFsbG9jIChzdC5zdF9zaXplKTsKKysgICAgICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtYWxsb2MgKHNpemUpOworICAgICAgIGlmIChkYXRhID09IE5VTEwpCisgCXJldHVybjsKKyAKKy0gICAgICB0b19yZWFkID0gc3Quc3Rfc2l6ZTsKKysgICAgICB0b19yZWFkID0gc2l6ZTsKKyAgICAgICByZWFkX3B0ciA9IChjaGFyICopIGRhdGE7CisgICAgICAgZG8KKyAJeworIAkgIGxvbmcgaW50IG5iID0gKGxvbmcgaW50KSByZWFkIChmZCwgcmVhZF9wdHIsIHRvX3JlYWQpOworLQkgIGlmIChuYiA9PSAtMSkKKysJICBpZiAobmIgPD0gMCkKKyAJICAgIHsKKysjaWZkZWYgRUlOVFIKKysJICAgICAgaWYgKG5iID09IC0xICYmIGVycm5vID09IEVJTlRSKQorKwkJY29udGludWU7CisrI2VuZGlmCisgCSAgICAgIGNsb3NlIChmZCk7CisgCSAgICAgIHJldHVybjsKKyAJICAgIH0KKy0KKyAJICByZWFkX3B0ciArPSBuYjsKKyAJICB0b19yZWFkIC09IG5iOworIAl9CitAQCAtMTQ0LDQ3ICsxMDA1LDM3OCBAQAorIAorICAgLyogVXNpbmcgdGhlIG1hZ2ljIG51bWJlciB3ZSBjYW4gdGVzdCB3aGV0aGVyIGl0IHJlYWxseSBpcyBhIG1lc3NhZ2UKKyAgICAgIGNhdGFsb2cgZmlsZS4gICovCistICBpZiAoZGF0YS0+bWFnaWMgIT0gX01BR0lDICYmIGRhdGEtPm1hZ2ljICE9IF9NQUdJQ19TV0FQUEVEKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEtPm1hZ2ljICE9IF9NQUdJQyAmJiBkYXRhLT5tYWdpYyAhPSBfTUFHSUNfU1dBUFBFRCwKKysJCQkwKSkKKyAgICAgeworICAgICAgIC8qIFRoZSBtYWdpYyBudW1iZXIgaXMgd3Jvbmc6IG5vdCBhIG1lc3NhZ2UgY2F0YWxvZyBmaWxlLiAgKi8KKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistICBkb21haW5fZmlsZS0+ZGF0YQorLSAgICA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxvYWRlZF9kb21haW4pKTsKKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorKyAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbikpOworKyAgaWYgKGRvbWFpbiA9PSBOVUxMKQorICAgICByZXR1cm47CisrICBkb21haW5fZmlsZS0+ZGF0YSA9IGRvbWFpbjsKKyAKKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKyAgIGRvbWFpbi0+ZGF0YSA9IChjaGFyICopIGRhdGE7CisrICBkb21haW4tPnVzZV9tbWFwID0gdXNlX21tYXA7CisrICBkb21haW4tPm1tYXBfc2l6ZSA9IHNpemU7CisgICBkb21haW4tPm11c3Rfc3dhcCA9IGRhdGEtPm1hZ2ljICE9IF9NQUdJQzsKKysgIGRvbWFpbi0+bWFsbG9jZWQgPSBOVUxMOworIAorICAgLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGF2YWlsYWJsZSB0YWJsZXMuICAqLworLSAgc3dpdGNoIChXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pKQorKyAgcmV2aXNpb24gPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pOworKyAgLyogV2Ugc3VwcG9ydCBvbmx5IHRoZSBtYWpvciByZXZpc2lvbnMgMCBhbmQgMS4gICovCisrICBzd2l0Y2ggKHJldmlzaW9uID4+IDE2KQorICAgICB7CisgICAgIGNhc2UgMDoKKysgICAgY2FzZSAxOgorICAgICAgIGRvbWFpbi0+bnN0cmluZ3MgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bnN0cmluZ3MpOworLSAgICAgIGRvbWFpbi0+b3JpZ190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT5vcmlnX3RhYiA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKyAJKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ190YWJfb2Zmc2V0KSk7CistICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICopCisgCSgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnRyYW5zX3RhYl9vZmZzZXQpKTsKKyAgICAgICBkb21haW4tPmhhc2hfc2l6ZSA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9zaXplKTsKKy0gICAgICBkb21haW4tPmhhc2hfdGFiID0gKG5sc191aW50MzIgKikKKy0JKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSk7CisrICAgICAgZG9tYWluLT5oYXNoX3RhYiA9CisrCShkb21haW4tPmhhc2hfc2l6ZSA+IDIKKysJID8gKGNvbnN0IG5sc191aW50MzIgKikKKysJICAgKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSkKKysJIDogTlVMTCk7CisrICAgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSBkb21haW4tPm11c3Rfc3dhcDsKKysKKysgICAgICAvKiBOb3cgZGlzcGF0Y2ggb24gdGhlIG1pbm9yIHJldmlzaW9uLiAgKi8KKysgICAgICBzd2l0Y2ggKHJldmlzaW9uICYgMHhmZmZmKQorKwl7CisrCWNhc2UgMDoKKysJICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkgIGJyZWFrOworKwljYXNlIDE6CisrCWRlZmF1bHQ6CisrCSAgeworKwkgICAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKworKwkgICAgaWYgKGRvbWFpbi0+aGFzaF90YWIgPT0gTlVMTCkKKysJICAgICAgLyogVGhpcyBpcyBpbnZhbGlkLiAgVGhlc2UgbWlub3IgcmV2aXNpb25zIG5lZWQgYSBoYXNoIHRhYmxlLiAgKi8KKysJICAgICAgZ290byBpbnZhbGlkOworKworKwkgICAgbl9zeXNkZXBfc3RyaW5ncyA9CisrCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uX3N5c2RlcF9zdHJpbmdzKTsKKysJICAgIGlmIChuX3N5c2RlcF9zdHJpbmdzID4gMCkKKysJICAgICAgeworKwkJbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKysJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqc3lzZGVwX3NlZ21lbnRzOworKwkJY29uc3QgY2hhciAqKnN5c2RlcF9zZWdtZW50X3ZhbHVlczsKKysJCWNvbnN0IG5sc191aW50MzIgKm9yaWdfc3lzZGVwX3RhYjsKKysJCWNvbnN0IG5sc191aW50MzIgKnRyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyIG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQlzaXplX3QgbWVtbmVlZDsKKysJCWNoYXIgKm1lbTsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX29yaWdfc3lzZGVwX3RhYjsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX3RyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyICppbm1lbV9oYXNoX3RhYjsKKysJCXVuc2lnbmVkIGludCBpLCBqOworKworKwkJLyogR2V0IHRoZSB2YWx1ZXMgb2YgdGhlIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworKwkJbl9zeXNkZXBfc2VnbWVudHMgPQorKwkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bl9zeXNkZXBfc2VnbWVudHMpOworKwkJc3lzZGVwX3NlZ21lbnRzID0gKGNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+c3lzZGVwX3NlZ21lbnRzX29mZnNldCkpOworKwkJc3lzZGVwX3NlZ21lbnRfdmFsdWVzID0KKysJCSAgYWxsb2NhIChuX3N5c2RlcF9zZWdtZW50cyAqIHNpemVvZiAoY29uc3QgY2hhciAqKSk7CisrCQlmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc2VnbWVudHM7IGkrKykKKysJCSAgeworKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPQorKwkJICAgICAgKGNoYXIgKikgZGF0YQorKwkJICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3NlZ21lbnRzW2ldLm9mZnNldCk7CisrCQkgICAgbmxzX3VpbnQzMiBuYW1lbGVuID0KKysJCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ubGVuZ3RoKTsKKysKKysJCSAgICBpZiAoIShuYW1lbGVuID4gMCAmJiBuYW1lW25hbWVsZW4gLSAxXSA9PSAnXDAnKSkKKysJCSAgICAgIHsKKysJCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJCQlnb3RvIGludmFsaWQ7CisrCQkgICAgICB9CisrCisrCQkgICAgc3lzZGVwX3NlZ21lbnRfdmFsdWVzW2ldID0gZ2V0X3N5c2RlcF9zZWdtZW50X3ZhbHVlIChuYW1lKTsKKysJCSAgfQorKworKwkJb3JpZ19zeXNkZXBfdGFiID0gKGNvbnN0IG5sc191aW50MzIgKikKKysJCSAgKChjaGFyICopIGRhdGEKKysJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm9yaWdfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysJCXRyYW5zX3N5c2RlcF90YWIgPSAoY29uc3QgbmxzX3VpbnQzMiAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+dHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysKKysJCS8qIENvbXB1dGUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQorKwkJICAgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFuZCB0aGUgYXVnbWVudGVkIGhhc2ggdGFibGUuCisrCQkgICBBdCB0aGUgc2FtZSB0aW1lLCBhbHNvIGRyb3Agc3RyaW5nIHBhaXJzIHdoaWNoIHJlZmVyIHRvCisrCQkgICBhbiB1bmRlZmluZWQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50LiAgKi8KKysJCW5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJbWVtbmVlZCA9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysJCWZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgIHsKKysJCSAgICBpbnQgdmFsaWQgPSAxOworKwkJICAgIHNpemVfdCBuZWVkc1syXTsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJICAgICAgeworKwkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkgIChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqKQorKwkJCSAgKChjaGFyICopIGRhdGEKKysJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQlqID09IDAKKysJCQkJPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJc2l6ZV90IG5lZWQgPSAwOworKwkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQlpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZikgIT0gU0VHTUVOVFNfRU5EKQorKwkJCSAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisrCQkJICAgIHsKKysJCQkgICAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysKKysJCQkgICAgICBuZWVkICs9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKysKKysJCQkgICAgICBzeXNkZXByZWYgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkgICAgICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJYnJlYWs7CisrCisrCQkJICAgICAgaWYgKHN5c2RlcHJlZiA+PSBuX3N5c2RlcF9zZWdtZW50cykKKysJCQkJeworKwkJCQkgIC8qIEludmFsaWQuICAqLworKwkJCQkgIGZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworKwkJCQkgIGdvdG8gaW52YWxpZDsKKysJCQkJfQorKworKwkJCSAgICAgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQl7CisrCQkJCSAgLyogVGhpcyBwYXJ0aWN1bGFyIHN0cmluZyBwYWlyIGlzIGludmFsaWQuICAqLworKwkJCQkgIHZhbGlkID0gMDsKKysJCQkJICBicmVhazsKKysJCQkJfQorKworKwkJCSAgICAgIG5lZWQgKz0gc3RybGVuIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSk7CisrCQkJICAgIH0KKysKKysJCQluZWVkc1tqXSA9IG5lZWQ7CisrCQkJaWYgKCF2YWxpZCkKKysJCQkgIGJyZWFrOworKwkJICAgICAgfQorKworKwkJICAgIGlmICh2YWxpZCkKKysJCSAgICAgIHsKKysJCQluX2lubWVtX3N5c2RlcF9zdHJpbmdzKys7CisrCQkJbWVtbmVlZCArPSBuZWVkc1swXSArIG5lZWRzWzFdOworKwkJICAgICAgfQorKwkJICB9CisrCQltZW1uZWVkICs9IDIgKiBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKworKwkJaWYgKG5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPiAwKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgaW50IGs7CisrCisrCQkgICAgLyogQWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkuICAqLworKwkJICAgIG1lbSA9IChjaGFyICopIG1hbGxvYyAobWVtbmVlZCk7CisrCQkgICAgaWYgKG1lbSA9PSBOVUxMKQorKwkJICAgICAgZ290byBpbnZhbGlkOworKworKwkJICAgIGRvbWFpbi0+bWFsbG9jZWQgPSBtZW07CisrCQkgICAgaW5tZW1fb3JpZ19zeXNkZXBfdGFiID0gKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKikgbWVtOworKwkJICAgIG1lbSArPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKwkJICAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWIgPSAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqKSBtZW07CisrCQkgICAgbWVtICs9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKysJCQkgICAqIHNpemVvZiAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyk7CisrCQkgICAgaW5tZW1faGFzaF90YWIgPSAobmxzX3VpbnQzMiAqKSBtZW07CisrCQkgICAgbWVtICs9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysKKysJCSAgICAvKiBDb21wdXRlIHRoZSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MuICAqLworKwkJICAgIGsgPSAwOworKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgICAgICB7CisrCQkJaW50IHZhbGlkID0gMTsKKysKKysJCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJCSAgeworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqc3lzZGVwX3N0cmluZyA9CisrCQkJICAgICAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisrCQkJICAgICAgKChjaGFyICopIGRhdGEKKysJCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJICAgIGogPT0gMAorKwkJCQkgICAgPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJICAgIDogdHJhbnNfc3lzZGVwX3RhYltpXSkpOworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKysJCQkgICAgICBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQkgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpCisrCQkJCSE9IFNFR01FTlRTX0VORCkKKysJCQkgICAgICBmb3IgKHAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czs7IHArKykKKysJCQkJeworKwkJCQkgIG5sc191aW50MzIgc3lzZGVwcmVmOworKworKwkJCQkgIHN5c2RlcHJlZiA9CisrCQkJCSAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkJICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJICAgIGJyZWFrOworKworKwkJCQkgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQkgICAgeworKwkJCQkgICAgICAvKiBUaGlzIHBhcnRpY3VsYXIgc3RyaW5nIHBhaXIgaXMKKysJCQkJCSBpbnZhbGlkLiAgKi8KKysJCQkJICAgICAgdmFsaWQgPSAwOworKwkJCQkgICAgICBicmVhazsKKysJCQkJICAgIH0KKysJCQkJfQorKworKwkJCSAgICBpZiAoIXZhbGlkKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgfQorKworKwkJCWlmICh2YWxpZCkKKysJCQkgIHsKKysJCQkgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKysJCQkgICAgICB7CisrCQkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkJICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKysJCQkJICAoKGNoYXIgKikgZGF0YQorKwkJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQkJaiA9PSAwCisrCQkJCQk/IG9yaWdfc3lzZGVwX3RhYltpXQorKwkJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJCWNvbnN0IGNoYXIgKnN0YXRpY19zZWdtZW50cyA9CisrCQkJCSAgKGNoYXIgKikgZGF0YQorKwkJCQkgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHN5c2RlcF9zdHJpbmctPm9mZnNldCk7CisrCQkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPQorKwkJCQkgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworKworKwkJCQkvKiBDb25jYXRlbmF0ZSB0aGUgc2VnbWVudHMsIGFuZCBmaWxsCisrCQkJCSAgIGlubWVtX29yaWdfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMCkgYW5kCisrCQkJCSAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWJba10gKGZvciBqID09IDEpLiAgKi8KKysKKysJCQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdGFiX2VudHJ5ID0KKysJCQkJICAoaiA9PSAwCisrCQkJCSAgID8gaW5tZW1fb3JpZ19zeXNkZXBfdGFiCisrCQkJCSAgIDogaW5tZW1fdHJhbnNfc3lzZGVwX3RhYikKKysJCQkJICArIGs7CisrCisrCQkJCWlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKQorKwkJCQkgICAgPT0gU0VHTUVOVFNfRU5EKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIE9ubHkgb25lIHN0YXRpYyBzZWdtZW50LiAgKi8KKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+bGVuZ3RoID0KKysJCQkJICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gc3RhdGljX3NlZ21lbnRzOworKwkJCQkgIH0KKysJCQkJZWxzZQorKwkJCQkgIHsKKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlciA9IG1lbTsKKysKKysJCQkJICAgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorKwkJCQkgICAgICB7CisrCQkJCQlubHNfdWludDMyIHNlZ3NpemUgPQorKwkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CisrCQkJCQlubHNfdWludDMyIHN5c2RlcHJlZiA9CisrCQkJCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworKwkJCQkJc2l6ZV90IG47CisrCisrCQkJCQlpZiAoc2Vnc2l6ZSA+IDApCisrCQkJCQkgIHsKKysJCQkJCSAgICBtZW1jcHkgKG1lbSwgc3RhdGljX3NlZ21lbnRzLCBzZWdzaXplKTsKKysJCQkJCSAgICBtZW0gKz0gc2Vnc2l6ZTsKKysJCQkJCSAgICBzdGF0aWNfc2VnbWVudHMgKz0gc2Vnc2l6ZTsKKysJCQkJCSAgfQorKworKwkJCQkJaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisrCQkJCQkgIGJyZWFrOworKworKwkJCQkJbiA9IHN0cmxlbiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0pOworKwkJCQkJbWVtY3B5IChtZW0sIHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdLCBuKTsKKysJCQkJCW1lbSArPSBuOworKwkJCQkgICAgICB9CisrCisrCQkJCSAgICBpbm1lbV90YWJfZW50cnktPmxlbmd0aCA9CisrCQkJCSAgICAgIG1lbSAtIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKworKwkJCSAgICBrKys7CisrCQkJICB9CisrCQkgICAgICB9CisrCQkgICAgaWYgKGsgIT0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncykKKysJCSAgICAgIGFib3J0ICgpOworKworKwkJICAgIC8qIENvbXB1dGUgdGhlIGF1Z21lbnRlZCBoYXNoIHRhYmxlLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgZG9tYWluLT5oYXNoX3NpemU7IGkrKykKKysJCSAgICAgIGlubWVtX2hhc2hfdGFiW2ldID0KKysJCQlXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpXSk7CisrCQkgICAgZm9yIChpID0gMDsgaSA8IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7IGkrKykKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICptc2dpZCA9IGlubWVtX29yaWdfc3lzZGVwX3RhYltpXS5wb2ludGVyOworKwkJCW5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOworKwkJCW5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKysJCQlubHNfdWludDMyIGluY3IgPQorKwkJCSAgMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysJCQlmb3IgKDs7KQorKwkJCSAgeworKwkJCSAgICBpZiAoaW5tZW1faGFzaF90YWJbaWR4XSA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gIFVzZSBpdC4gICovCisrCQkJCWlubWVtX2hhc2hfdGFiW2lkeF0gPSAxICsgZG9tYWluLT5uc3RyaW5ncyArIGk7CisrCQkJCWJyZWFrOworKwkJCSAgICAgIH0KKysKKysJCQkgICAgaWYgKGlkeCA+PSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3IpCisrCQkJICAgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJCQkgICAgZWxzZQorKwkJCSAgICAgIGlkeCArPSBpbmNyOworKwkJCSAgfQorKwkJICAgICAgfQorKworKwkJICAgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBpbm1lbV9vcmlnX3N5c2RlcF90YWI7CisrCQkgICAgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gaW5tZW1fdHJhbnNfc3lzZGVwX3RhYjsKKysKKysJCSAgICBkb21haW4tPmhhc2hfdGFiID0gaW5tZW1faGFzaF90YWI7CisrCQkgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSAwOworKwkJICB9CisrCQllbHNlCisrCQkgIHsKKysJCSAgICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJCSAgICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkJICB9CisrCisrCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworKwkJZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gTlVMTDsKKysJICAgICAgfQorKwkgIH0KKysJICBicmVhazsKKysJfQorICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorLSAgICAgIC8qIFRoaXMgaXMgYW4gaWxsZWdhbCByZXZpc2lvbi4gICovCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyAgICAgIC8qIFRoaXMgaXMgYW4gaW52YWxpZCByZXZpc2lvbi4gICovCisrICAgIGludmFsaWQ6CisrICAgICAgLyogVGhpcyBpcyBhbiBpbnZhbGlkIC5tbyBmaWxlLiAgKi8KKysgICAgICBpZiAoZG9tYWluLT5tYWxsb2NlZCkKKysJZnJlZSAoZG9tYWluLT5tYWxsb2NlZCk7CisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CitAQCAtMTkzLDcgKzEzODUsMzYgQEAKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIC8qIFNob3cgdGhhdCBvbmUgZG9tYWluIGlzIGNoYW5nZWQuICBUaGlzIG1pZ2h0IG1ha2Ugc29tZSBjYWNoZWQKKy0gICAgIHRyYW5zbGF0aW9ucyBpbnZhbGlkLiAgKi8KKy0gICsrX25sX21zZ19jYXRfY250cjsKKysgIC8qIE5vdyBpbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgc2V0IGNvbnZlcnRlciBmcm9tIHRoZSBjaGFyYWN0ZXIgc2V0CisrICAgICB0aGUgZmlsZSBpcyBlbmNvZGVkIHdpdGggKGZvdW5kIGluIHRoZSBoZWFkZXIgZW50cnkpIHRvIHRoZSBkb21haW4ncworKyAgICAgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQgb3IgdGhlIGxvY2FsZSdzIGNoYXJhY3RlciBzZXQuICAqLworKyAgbnVsbGVudHJ5ID0gX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKworKyAgLyogQWxzbyBsb29rIGZvciBhIHBsdXJhbCBzcGVjaWZpY2F0aW9uLiAgKi8KKysgIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKG51bGxlbnRyeSwgJmRvbWFpbi0+cGx1cmFsLCAmZG9tYWluLT5ucGx1cmFscyk7CisgfQorKworKworKyNpZmRlZiBfTElCQworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF91bmxvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPnBsdXJhbCAhPSAmX19nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbCkKKysgICAgX19nZXR0ZXh0X2ZyZWVfZXhwIChkb21haW4tPnBsdXJhbCk7CisrCisrICBfbmxfZnJlZV9kb21haW5fY29udiAoZG9tYWluKTsKKysKKysgIGlmIChkb21haW4tPm1hbGxvY2VkKQorKyAgICBmcmVlIChkb21haW4tPm1hbGxvY2VkKTsKKysKKysjIGlmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKysgIGlmIChkb21haW4tPnVzZV9tbWFwKQorKyAgICBtdW5tYXAgKChjYWRkcl90KSBkb21haW4tPmRhdGEsIGRvbWFpbi0+bW1hcF9zaXplKTsKKysgIGVsc2UKKysjIGVuZGlmCS8qIF9QT1NJWF9NQVBQRURfRklMRVMgKi8KKysgICAgZnJlZSAoKHZvaWQgKikgZG9tYWluLT5kYXRhKTsKKysKKysgIGZyZWUgKGRvbWFpbik7CisrfQorKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsY2hhcnNldC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsY2hhcnNldC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDc4NzI5MzkyIC0wNDAwCitAQCAtMCwwICsxLDM5OCBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorKworKyNpZiBIQVZFX1NURERFRl9ICisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaWYgSEFWRV9TVFJJTkdfSAorKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrIyB1bmRlZiBXSU4zMiAgIC8qIGF2b2lkIHdhcm5pbmcgb24gbWluZ3czMiAqLworKyMgZGVmaW5lIFdJTjMyCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTVhfXworKy8qIEFzc3VtZSBFTVggcHJvZ3JhbSBydW5zIG9uIE9TLzIsIGV2ZW4gaWYgY29tcGlsZWQgdW5kZXIgRE9TLiAgKi8KKysjIGRlZmluZSBPUzIKKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgV0lOMzIKKysjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorKyMgIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBlbHNlCisrIyAgaWYgSEFWRV9TRVRMT0NBTEUKKysjICAgaW5jbHVkZSA8bG9jYWxlLmg+CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBPUzIKKysjIGRlZmluZSBJTkNMX0RPUworKyMgaW5jbHVkZSA8b3MyLmg+CisrI2VuZGlmCisrCisrI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorKyMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysjZWxzZQorKyMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisrI2VuZGlmCisrCisrI2lmbmRlZiBESVJFQ1RPUllfU0VQQVJBVE9SCisrIyBkZWZpbmUgRElSRUNUT1JZX1NFUEFSQVRPUiAnLycKKysjZW5kaWYKKysKKysjaWZuZGVmIElTU0xBU0gKKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gRElSRUNUT1JZX1NFUEFSQVRPUikKKysjZW5kaWYKKysKKysjaWYgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQKKysjIHVuZGVmIGdldGMKKysjIGRlZmluZSBnZXRjIGdldGNfdW5sb2NrZWQKKysjZW5kaWYKKysKKysvKiBUaGUgZm9sbG93aW5nIHN0YXRpYyB2YXJpYWJsZSBpcyBkZWNsYXJlZCAndm9sYXRpbGUnIHRvIGF2b2lkIGEKKysgICBwb3NzaWJsZSBtdWx0aXRocmVhZCBwcm9ibGVtIGluIHRoZSBmdW5jdGlvbiBnZXRfY2hhcnNldF9hbGlhc2VzLiBJZiB3ZQorKyAgIGFyZSBydW5uaW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIGFuZCBpZiB0d28gdGhyZWFkcyBpbml0aWFsaXplCisrICAgJ2NoYXJzZXRfYWxpYXNlcycgc2ltdWx0YW5lb3VzbHksIGJvdGggd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHZhbHVlLAorKyAgIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgb2sgaWYgdGhlIHR3byBhc3NpZ25tZW50cyB0byAnY2hhcnNldF9hbGlhc2VzJworKyAgIGFyZSBhdG9taWMuIEJ1dCBJIGRvbid0IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIG1peC4gICovCisrI2lmIF9fU1REQ19fICE9IDEKKysjIGRlZmluZSB2b2xhdGlsZSAvKiBlbXB0eSAqLworKyNlbmRpZgorKy8qIFBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUsIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4KKysgICByZWFkLCBlbHNlIE5VTEwuICBJdHMgZm9ybWF0IGlzOgorKyAgIEFMSUFTXzEgJ1wwJyBDQU5PTklDQUxfMSAnXDAnIC4uLiBBTElBU19uICdcMCcgQ0FOT05JQ0FMX24gJ1wwJyAnXDAnICAqLworK3N0YXRpYyBjb25zdCBjaGFyICogdm9sYXRpbGUgY2hhcnNldF9hbGlhc2VzOworKworKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfY2hhcnNldF9hbGlhc2VzICgpCisreworKyAgY29uc3QgY2hhciAqY3A7CisrCisrICBjcCA9IGNoYXJzZXRfYWxpYXNlczsKKysgIGlmIChjcCA9PSBOVUxMKQorKyAgICB7CisrI2lmICEoZGVmaW5lZCBWTVMgfHwgZGVmaW5lZCBXSU4zMikKKysgICAgICBGSUxFICpmcDsKKysgICAgICBjb25zdCBjaGFyICpkaXIgPSByZWxvY2F0ZSAoTElCRElSKTsKKysgICAgICBjb25zdCBjaGFyICpiYXNlID0gImNoYXJzZXQuYWxpYXMiOworKyAgICAgIGNoYXIgKmZpbGVfbmFtZTsKKysKKysgICAgICAvKiBDb25jYXRlbmF0ZSBkaXIgYW5kIGJhc2UgaW50byBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlX25hbWUuICAqLworKyAgICAgIHsKKysJc2l6ZV90IGRpcl9sZW4gPSBzdHJsZW4gKGRpcik7CisrCXNpemVfdCBiYXNlX2xlbiA9IHN0cmxlbiAoYmFzZSk7CisrCWludCBhZGRfc2xhc2ggPSAoZGlyX2xlbiA+IDAgJiYgIUlTU0xBU0ggKGRpcltkaXJfbGVuIC0gMV0pKTsKKysJZmlsZV9uYW1lID0gKGNoYXIgKikgbWFsbG9jIChkaXJfbGVuICsgYWRkX3NsYXNoICsgYmFzZV9sZW4gKyAxKTsKKysJaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorKwkgIHsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lLCBkaXIsIGRpcl9sZW4pOworKwkgICAgaWYgKGFkZF9zbGFzaCkKKysJICAgICAgZmlsZV9uYW1lW2Rpcl9sZW5dID0gRElSRUNUT1JZX1NFUEFSQVRPUjsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lICsgZGlyX2xlbiArIGFkZF9zbGFzaCwgYmFzZSwgYmFzZV9sZW4gKyAxKTsKKysJICB9CisrICAgICAgfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIpKSA9PSBOVUxMKQorKwkvKiBPdXQgb2YgbWVtb3J5IG9yIGZpbGUgbm90IGZvdW5kLCB0cmVhdCBpdCBhcyBlbXB0eS4gICovCisrCWNwID0gIiI7CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogUGFyc2UgdGhlIGZpbGUncyBjb250ZW50cy4gICovCisrCSAgaW50IGM7CisrCSAgY2hhciBidWYxWzUwKzFdOworKwkgIGNoYXIgYnVmMls1MCsxXTsKKysJICBjaGFyICpyZXNfcHRyID0gTlVMTDsKKysJICBzaXplX3QgcmVzX3NpemUgPSAwOworKwkgIHNpemVfdCBsMSwgbDI7CisrCisrCSAgZm9yICg7OykKKysJICAgIHsKKysJICAgICAgYyA9IGdldGMgKGZwKTsKKysJICAgICAgaWYgKGMgPT0gRU9GKQorKwkJYnJlYWs7CisrCSAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorKwkJY29udGludWU7CisrCSAgICAgIGlmIChjID09ICcjJykKKysJCXsKKysJCSAgLyogU2tpcCBjb21tZW50LCB0byBlbmQgb2YgbGluZS4gICovCisrCQkgIGRvCisrCQkgICAgYyA9IGdldGMgKGZwKTsKKysJCSAgd2hpbGUgKCEoYyA9PSBFT0YgfHwgYyA9PSAnXG4nKSk7CisrCQkgIGlmIChjID09IEVPRikKKysJCSAgICBicmVhazsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICAgIHVuZ2V0YyAoYywgZnApOworKwkgICAgICBpZiAoZnNjYW5mIChmcCwgIiU1MHMgJTUwcyIsIGJ1ZjEsIGJ1ZjIpIDwgMikKKysJCWJyZWFrOworKwkgICAgICBsMSA9IHN0cmxlbiAoYnVmMSk7CisrCSAgICAgIGwyID0gc3RybGVuIChidWYyKTsKKysJICAgICAgaWYgKHJlc19zaXplID09IDApCisrCQl7CisrCQkgIHJlc19zaXplID0gbDEgKyAxICsgbDIgKyAxOworKwkJICByZXNfcHRyID0gKGNoYXIgKikgbWFsbG9jIChyZXNfc2l6ZSArIDEpOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHJlc19zaXplICs9IGwxICsgMSArIGwyICsgMTsKKysJCSAgcmVzX3B0ciA9IChjaGFyICopIHJlYWxsb2MgKHJlc19wdHIsIHJlc19zaXplICsgMSk7CisrCQl9CisrCSAgICAgIGlmIChyZXNfcHRyID09IE5VTEwpCisrCQl7CisrCQkgIC8qIE91dCBvZiBtZW1vcnkuICovCisrCQkgIHJlc19zaXplID0gMDsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSkgLSAobDEgKyAxKSwgYnVmMSk7CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSksIGJ1ZjIpOworKwkgICAgfQorKwkgIGZjbG9zZSAoZnApOworKwkgIGlmIChyZXNfc2l6ZSA9PSAwKQorKwkgICAgY3AgPSAiIjsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICoocmVzX3B0ciArIHJlc19zaXplKSA9ICdcMCc7CisrCSAgICAgIGNwID0gcmVzX3B0cjsKKysJICAgIH0KKysJfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgIT0gTlVMTCkKKysJZnJlZSAoZmlsZV9uYW1lKTsKKysKKysjZWxzZQorKworKyMgaWYgZGVmaW5lZCBWTVMKKysgICAgICAvKiBUbyBhdm9pZCB0aGUgdHJvdWJsZXMgb2YgYW4gZXh0cmEgZmlsZSBjaGFyc2V0LmFsaWFzX3ZtcyBpbiB0aGUKKysJIHNvdXJjZXMgb2YgbWFueSBHTlUgcGFja2FnZXMsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisrICAgICAgLyogVGhlIGxpc3Qgb2YgZW5jb2RpbmdzIGlzIHRha2VuIGZyb20gdGhlIE9wZW5WTVMgNy4zLTEgZG9jdW1lbnRhdGlvbgorKwkgIkNvbXBhcSBDIFJ1bi1UaW1lIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCBmb3IgT3BlblZNUyBzeXN0ZW1zIgorKwkgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKysgICAgICBjcCA9ICJJU084ODU5LTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIklTTzg4NTktMiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorKwkgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisrCSAgICJJU084ODU5LTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIklTTzg4NTktOCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorKwkgICAiSVNPODg1OS05IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisrCSAgIC8qIEphcGFuZXNlICovCisrCSAgICJldWNKUCIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKysJICAgIkRFQ0tBTkpJIiAiXDAiICJERUMtS0FOSkkiICJcMCIKKysJICAgIlNERUNLQU5KSSIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgIC8qIENoaW5lc2UgKi8KKysJICAgImV1Y1RXIiAiXDAiICJFVUMtVFciICJcMCIKKysJICAgIkRFQ0hBTllVIiAiXDAiICJERUMtSEFOWVUiICJcMCIKKysJICAgIkRFQ0hBTlpJIiAiXDAiICJHQjIzMTIiICJcMCIKKysJICAgLyogS29yZWFuICovCisrCSAgICJERUNLT1JFQU4iICJcMCIgIkVVQy1LUiIgIlwwIjsKKysjIGVuZGlmCisrCisrIyBpZiBkZWZpbmVkIFdJTjMyCisrICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGluc3RhbGxpbmcgYSBzZXBhcmF0ZSBmaWxlIGluIHRoZSBzYW1lCisrCSBkaXJlY3RvcnkgYXMgdGhlIERMTCBhbmQgb2YgcmV0cmlldmluZyB0aGUgRExMJ3MgZGlyZWN0b3J5IGF0CisrCSBydW50aW1lLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworKworKyAgICAgIGNwID0gIkNQOTM2IiAiXDAiICJHQksiICJcMCIKKysJICAgIkNQMTM2MSIgIlwwIiAiSk9IQUIiICJcMCIKKysJICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCisrCSAgICJDUDIwODY2IiAiXDAiICJLT0k4LVIiICJcMCIKKysJICAgIkNQMjE4NjYiICJcMCIgIktPSTgtUlUiICJcMCIKKysJICAgIkNQMjg1OTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIkNQMjg1OTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKysJICAgIkNQMjg1OTMiICJcMCIgIklTTy04ODU5LTMiICJcMCIKKysJICAgIkNQMjg1OTQiICJcMCIgIklTTy04ODU5LTQiICJcMCIKKysJICAgIkNQMjg1OTUiICJcMCIgIklTTy04ODU5LTUiICJcMCIKKysJICAgIkNQMjg1OTYiICJcMCIgIklTTy04ODU5LTYiICJcMCIKKysJICAgIkNQMjg1OTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIkNQMjg1OTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKysJICAgIkNQMjg1OTkiICJcMCIgIklTTy04ODU5LTkiICJcMCIKKysJICAgIkNQMjg2MDUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjaGFyc2V0X2FsaWFzZXMgPSBjcDsKKysgICAgfQorKworKyAgcmV0dXJuIGNwOworK30KKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytjb25zdCBjaGFyICoKKytsb2NhbGVfY2hhcnNldCAoKQorK3sKKysgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CisrICBjb25zdCBjaGFyICphbGlhc2VzOworKworKyNpZiAhKGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBPUzIpCisrCisrIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysKKysgIC8qIE1vc3Qgc3lzdGVtcyBzdXBwb3J0IG5sX2xhbmdpbmZvIChDT0RFU0VUKSBub3dhZGF5cy4gICovCisrICBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworKworKyMgZWxzZQorKworKyAgLyogT24gb2xkIHN5c3RlbXMgd2hpY2ggbGFjayBpdCwgdXNlIHNldGxvY2FsZSBvciBnZXRlbnYuICAqLworKyAgY29uc3QgY2hhciAqbG9jYWxlID0gTlVMTDsKKysKKysgIC8qIEJ1dCBtb3N0IG9sZCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbG9jYWxlcy4gIFNvbWUKKysgICAgIChsaWtlIFN1bk9TIDQgb3IgREpHUFApIGhhdmUgb25seSB0aGUgQyBsb2NhbGUuICBUaGVyZWZvcmUgd2UgZG9uJ3QKKysgICAgIHVzZSBzZXRsb2NhbGUgaGVyZTsgaXQgd291bGQgcmV0dXJuICJDIiB3aGVuIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKysgICAgIGxvY2FsZSBuYW1lIHRoZSB1c2VyIGhhcyBzZXQuICAqLworKyMgIGlmIEhBVkVfU0VUTE9DQUxFICYmIDAKKysgIGxvY2FsZSA9IHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpOworKyMgIGVuZGlmCisrICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrICAgIHsKKysgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrCXsKKysJICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworKwkgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysJICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKysJfQorKyAgICB9CisrCisrICAvKiBPbiBzb21lIG9sZCBzeXN0ZW1zLCBvbmUgdXNlZCB0byBzZXQgbG9jYWxlID0gImlzbzg4NTlfMSIuIE9uIG90aGVycywKKysgICAgIHlvdSBzZXQgaXQgdG8gImxhbmd1YWdlX0NPVU5UUlkuY2hhcnNldCIuIEluIGFueSBjYXNlLCB3ZSByZXNvbHZlIGl0CisrICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgY29kZXNldCA9IGxvY2FsZTsKKysKKysjIGVuZGlmCisrCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKworKyAgc3RhdGljIGNoYXIgYnVmWzIgKyAxMCArIDFdOworKworKyAgLyogV29lMzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICBzcHJpbnRmIChidWYsICJDUCV1IiwgR2V0QUNQICgpKTsKKysgIGNvZGVzZXQgPSBidWY7CisrCisrI2VsaWYgZGVmaW5lZCBPUzIKKysKKysgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKysgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKysgIFVMT05HIGNwWzNdOworKyAgVUxPTkcgY3BsZW47CisrCisrICAvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBjb2Rlc2V0LCBhcyBzZXQgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0sCisrICAgICB3aXRoIHN0YW5kYXJkIGxhbmd1YWdlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCisrICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysgICAgeworKyAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisrICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKwlsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisrICAgIH0KKysgIGlmIChsb2NhbGUgIT0gTlVMTCAmJiBsb2NhbGVbMF0gIT0gJ1wwJykKKysgICAgeworKyAgICAgIC8qIElmIHRoZSBsb2NhbGUgbmFtZSBjb250YWlucyBhbiBlbmNvZGluZyBhZnRlciB0aGUgZG90LCByZXR1cm4gaXQuICAqLworKyAgICAgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNociAobG9jYWxlLCAnLicpOworKworKyAgICAgIGlmIChkb3QgIT0gTlVMTCkKKysJeworKwkgIGNvbnN0IGNoYXIgKm1vZGlmaWVyOworKworKwkgIGRvdCsrOworKwkgIC8qIExvb2sgZm9yIHRoZSBwb3NzaWJsZSBALi4uIHRyYWlsZXIgYW5kIHJlbW92ZSBpdCwgaWYgYW55LiAgKi8KKysJICBtb2RpZmllciA9IHN0cmNociAoZG90LCAnQCcpOworKwkgIGlmIChtb2RpZmllciA9PSBOVUxMKQorKwkgICAgcmV0dXJuIGRvdDsKKysJICBpZiAobW9kaWZpZXIgLSBkb3QgPCBzaXplb2YgKGJ1ZikpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAoYnVmLCBkb3QsIG1vZGlmaWVyIC0gZG90KTsKKysJICAgICAgYnVmIFttb2RpZmllciAtIGRvdF0gPSAnXDAnOworKwkgICAgICByZXR1cm4gYnVmOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogUmVzb2x2ZSB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgICAgIGNvZGVzZXQgPSBsb2NhbGU7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIE9TLzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICAgICAgaWYgKERvc1F1ZXJ5Q3AgKHNpemVvZiAoY3ApLCBjcCwgJmNwbGVuKSkKKysJY29kZXNldCA9ICIiOworKyAgICAgIGVsc2UKKysJeworKwkgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBjcFswXSk7CisrCSAgY29kZXNldCA9IGJ1ZjsKKysJfQorKyAgICB9CisrCisrI2VuZGlmCisrCisrICBpZiAoY29kZXNldCA9PSBOVUxMKQorKyAgICAvKiBUaGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQuICAqLworKyAgICBjb2Rlc2V0ID0gIiI7CisrCisrICAvKiBSZXNvbHZlIGFsaWFzLiAqLworKyAgZm9yIChhbGlhc2VzID0gZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKTsKKysgICAgICAgKmFsaWFzZXMgIT0gJ1wwJzsKKysgICAgICAgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSwgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSkKKysgICAgaWYgKHN0cmNtcCAoY29kZXNldCwgYWxpYXNlcykgPT0gMAorKwl8fCAoYWxpYXNlc1swXSA9PSAnKicgJiYgYWxpYXNlc1sxXSA9PSAnXDAnKSkKKysgICAgICB7CisrCWNvZGVzZXQgPSBhbGlhc2VzICsgc3RybGVuIChhbGlhc2VzKSArIDE7CisrCWJyZWFrOworKyAgICAgIH0KKysKKysgIC8qIERvbid0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcuICBHTlUgbGliYyBhbmQgR05VIGxpYmljb252IGludGVycHJldAorKyAgICAgdGhlIGVtcHR5IHN0cmluZyBhcyBkZW5vdGluZyAidGhlIGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZyIsCisrICAgICB0aHVzIEdOVSBsaWJpY29udiB3b3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYSBzZWNvbmQgdGltZS4gICovCisrICBpZiAoY29kZXNldFswXSA9PSAnXDAnKQorKyAgICBjb2Rlc2V0ID0gIkFTQ0lJIjsKKysKKysgIHJldHVybiBjb2Rlc2V0OworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGNoYXJzZXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGNoYXJzZXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ4MzcyODYzMiAtMDQwMAorQEAgLTAsMCArMSw0MiBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDSEFSU0VUIExpYnJhcnkuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQ0FMQ0hBUlNFVF9ICisrI2RlZmluZSBfTE9DQUxDSEFSU0VUX0gKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworK2V4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysKKysjZW5kaWYgLyogX0xPQ0FMQ0hBUlNFVF9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlLmFsaWFzCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZS5hbGlhcwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ5OTcyNjIwMCAtMDQwMAorQEAgLTAsMCArMSw3OCBAQAorKyMgTG9jYWxlIG5hbWUgYWxpYXMgZGF0YSBiYXNlLgorKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjIFVTQS4KKysKKysjIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9mCisrIyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB3aGljaCBub3JtYWxseSBjYW4gYmUgZm91bmQgaW4KKysjCS91c3IvbGliL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzCisrIyBBIHNpbmdsZSBsaW5lIGNvbnRhaW5zIHR3byBmaWVsZHM6IGFuIGFsaWFzIGFuZCBhIHN1YnN0aXR1dGlvbiB2YWx1ZS4KKysjIEFsbCBlbnRyaWVzIGFyZSBjYXNlIGluZGVwZW5kZW50LgorKworKyMgTm90ZTogVGhpcyBmaWxlIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiAgSWYgeW91IGhhdmUgYSB2YWx1ZSBmb3IKKysjIHlvdXIgb3duIHNpdGUgd2hpY2ggeW91IHRoaW5rIG1pZ2h0IGJlIHVzZWZ1bCBmb3Igb3RoZXJzIHRvbywgc2hhcmUKKysjIGl0IHdpdGggdGhlIHJlc3Qgb2YgdXMuICBTZW5kIGl0IHVzaW5nIHRoZSBgZ2xpYmNidWcnIHNjcmlwdCB0bworKyMgYnVnc0BnbnUub3JnLgorKworKyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAKKysKKytib2ttYWwJCW5iX05PLklTTy04ODU5LTEKKytib2tt5WwJCW5iX05PLklTTy04ODU5LTEKKytjYXRhbGFuCQljYV9FUy5JU08tODg1OS0xCisrY3JvYXRpYW4JaHJfSFIuSVNPLTg4NTktMgorK2N6ZWNoCQljc19DWi5JU08tODg1OS0yCisrZGFuaXNoICAgICAgICAgIGRhX0RLLklTTy04ODU5LTEKKytkYW5zawkJZGFfREsuSVNPLTg4NTktMQorK2RldXRzY2gJCWRlX0RFLklTTy04ODU5LTEKKytkdXRjaAkJbmxfTkwuSVNPLTg4NTktMQorK2Vlc3RpCQlldF9FRS5JU08tODg1OS0xCisrZXN0b25pYW4JZXRfRUUuSVNPLTg4NTktMQorK2Zpbm5pc2ggICAgICAgICBmaV9GSS5JU08tODg1OS0xCisrZnJhbudhaXMJZnJfRlIuSVNPLTg4NTktMQorK2ZyZW5jaAkJZnJfRlIuSVNPLTg4NTktMQorK2dhbGVnbwkJZ2xfRVMuSVNPLTg4NTktMQorK2dhbGljaWFuCWdsX0VTLklTTy04ODU5LTEKKytnZXJtYW4JCWRlX0RFLklTTy04ODU5LTEKKytncmVlayAgICAgICAgICAgZWxfR1IuSVNPLTg4NTktNworK2hlYnJldyAgICAgICAgICBoZV9JTC5JU08tODg1OS04CisraHJ2YXRza2kJaHJfSFIuSVNPLTg4NTktMgorK2h1bmdhcmlhbiAgICAgICBodV9IVS5JU08tODg1OS0yCisraWNlbGFuZGljICAgICAgIGlzX0lTLklTTy04ODU5LTEKKytpdGFsaWFuICAgICAgICAgaXRfSVQuSVNPLTg4NTktMQorK2phcGFuZXNlCWphX0pQLmV1Y0pQCisramFwYW5lc2UuZXVjCWphX0pQLmV1Y0pQCisramFfSlAJCWphX0pQLmV1Y0pQCisramFfSlAudWppcwlqYV9KUC5ldWNKUAorK2phcGFuZXNlLnNqaXMJamFfSlAuU0pJUworK2tvcmVhbgkJa29fS1IuZXVjS1IKKytrb3JlYW4uZXVjIAlrb19LUi5ldWNLUgorK2tvX0tSCQlrb19LUi5ldWNLUgorK2xpdGh1YW5pYW4gICAgICBsdF9MVC5JU08tODg1OS0xMworK25vX05PCQluYl9OTy5JU08tODg1OS0xCisrbm9fTk8uSVNPLTg4NTktMSBuYl9OTy5JU08tODg1OS0xCisrbm9yd2VnaWFuICAgICAgIG5iX05PLklTTy04ODU5LTEKKytueW5vcnNrCQlubl9OTy5JU08tODg1OS0xCisrcG9saXNoICAgICAgICAgIHBsX1BMLklTTy04ODU5LTIKKytwb3J0dWd1ZXNlICAgICAgcHRfUFQuSVNPLTg4NTktMQorK3JvbWFuaWFuICAgICAgICByb19STy5JU08tODg1OS0yCisrcnVzc2lhbiAgICAgICAgIHJ1X1JVLklTTy04ODU5LTUKKytzbG92YWsgICAgICAgICAgc2tfU0suSVNPLTg4NTktMgorK3Nsb3ZlbmUgICAgICAgICBzbF9TSS5JU08tODg1OS0yCisrc2xvdmVuaWFuICAgICAgIHNsX1NJLklTTy04ODU5LTIKKytzcGFuaXNoICAgICAgICAgZXNfRVMuSVNPLTg4NTktMQorK3N3ZWRpc2ggICAgICAgICBzdl9TRS5JU08tODg1OS0xCisrdGhhaQkJdGhfVEguVElTLTYyMAorK3R1cmtpc2ggICAgICAgICB0cl9UUi5JU08tODg1OS05CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlYWxpYXMuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTA1NzI1Mjg4IC0wNDAwCitAQCAtMSwyMCArMSwyNyBAQAorLS8qIEhhbmRsZSBhbGlhc2VzIGZvciBsb2NhbGUgbmFtZXMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisrLyogSGFuZGxlIGFsaWFzZXMgZm9yIGxvY2FsZSBuYW1lcy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorQEAgLTIyLDU2ICsyOSw0NSBAQAorIAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9fX0ZTRVRMT0NLSU5HCisrIyBpbmNsdWRlIDxzdGRpb19leHQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCisgI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiBhbGxvY2EKKyAjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorICMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKyAjZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisgIyBlbHNlCistIyAgaWZkZWYgX0FJWAorLSAjcHJhZ21hIGFsbG9jYQorKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorICMgIGVsc2UKKy0jICAgaWZuZGVmIGFsbG9jYQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKyBjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorICMgICBlbmRpZgorICMgIGVuZGlmCisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLWNoYXIgKmdldGVudiAoKTsKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgX0dOVV9TT1VSQ0UKKy0jICBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSMgZW5kaWYKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKworKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKysjIGluY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisgI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKysjIGRlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorICNlbmRpZgorIAorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorICNpZmRlZiBfTElCQworQEAgLTc5LDQzICs3NSw0OSBAQAorICAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKysKKysjIGlmbmRlZiBtZW1wY3B5CisrIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIEhBVkVfTUVNUENQWQkxCisrIyBkZWZpbmUgSEFWRV9fX0ZTRVRMT0NLSU5HCTEKKysKKysvKiBXZSBuZWVkIGxvY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYW4gYmUgY2FsbGVkIGZyb20gZGlmZmVyZW50IHBsYWNlcy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKworK19fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKyAjZW5kaWYKKyAKKysvKiBTb21lIG9wdGltaXphdGlvbnMgZm9yIGdsaWJjLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZl91bmxvY2tlZCAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHNfdW5sb2NrZWQgKGJ1ZiwgbiwgZnApCisrI2Vsc2UKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZiAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHMgKGJ1ZiwgbiwgZnApCisrI2VuZGlmCisgCistLyogRm9yIHRob3NlIGxvb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrLyogRm9yIHRob3NlIGxvc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKyAgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworICNpZmRlZiBIQVZFX0FMTE9DQQorLS8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIGZyZWVhKHApIC8qIG5vdGhpbmcgKi8KKyAjZWxzZQorLXN0cnVjdCBibG9ja19saXN0CisteworLSAgdm9pZCAqYWRkcmVzczsKKy0gIHN0cnVjdCBibG9ja19saXN0ICpuZXh0OworLX07CistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHIpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgc3RydWN0IGJsb2NrX2xpc3QgKm5ld3AgPSAoc3RydWN0IGJsb2NrX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7ICBcCistICAgIC8qIElmIHdlIGNhbm5vdCBnZXQgYSBmcmVlIGJsb2NrIHdlIGNhbm5vdCBhZGQgdGhlIG5ldyBlbGVtZW50IHRvCSAgICAgIFwKKy0gICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCistICAgIGlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPmFkZHJlc3MgPSAoYWRkcik7CQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAgICAgXAorLSAgICAgIChsaXN0KSA9IG5ld3A7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJICAgICAgXAorLSAgICAgIHN0cnVjdCBibG9ja19saXN0ICpvbGQgPSBsaXN0OwkJCQkJICAgICAgXAorLSAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwkJCQkJCSAgICAgIFwKKy0gICAgICBmcmVlIChvbGQpOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgdW5kZWYgYWxsb2NhCistIyBkZWZpbmUgYWxsb2NhKHNpemUpIChtYWxsb2MgKHNpemUpKQorLSNlbmRpZgkvKiBoYXZlIGFsbG9jYSAqLworKyMgZGVmaW5lIGFsbG9jYShuKSBtYWxsb2MgKG4pCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQ19SRUVOVFJBTlQgfHwgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VECisrIyB1bmRlZiBmZ2V0cworKyMgZGVmaW5lIGZnZXRzKGJ1ZiwgbGVuLCBzKSBmZ2V0c191bmxvY2tlZCAoYnVmLCBsZW4sIHMpCisrI2VuZGlmCisrI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisrIyB1bmRlZiBmZW9mCisrIyBkZWZpbmUgZmVvZihzKSBmZW9mX3VubG9ja2VkIChzKQorKyNlbmRpZgorIAorIAorIHN0cnVjdCBhbGlhc19tYXAKK0BAIC0xMjUsMjYgKzEyNyw0MSBAQAorIH07CisgCisgCistc3RhdGljIHN0cnVjdCBhbGlhc19tYXAgKm1hcDsKKy1zdGF0aWMgc2l6ZV90IG5tYXAgPSAwOworLXN0YXRpYyBzaXplX3QgbWF4bWFwID0gMDsKKysjaWZuZGVmIF9MSUJDCisrIyBkZWZpbmUgbGliY19mcmVlcmVzX3B0cihkZWNsKSBkZWNsCisrI2VuZGlmCisrCisrbGliY19mcmVlcmVzX3B0ciAoc3RhdGljIGNoYXIgKnN0cmluZ19zcGFjZSk7Cisrc3RhdGljIHNpemVfdCBzdHJpbmdfc3BhY2VfYWN0OworK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX21heDsKKytsaWJjX2ZyZWVyZXNfcHRyIChzdGF0aWMgc3RydWN0IGFsaWFzX21hcCAqbWFwKTsKKytzdGF0aWMgc2l6ZV90IG5tYXA7Cisrc3RhdGljIHNpemVfdCBtYXhtYXA7CisgCisgCisgLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKy1zdGF0aWMgc2l6ZV90IHJlYWRfYWxpYXNfZmlsZSBQQVJBTVMgKChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikpOworLXN0YXRpYyB2b2lkIGV4dGVuZF9hbGlhc190YWJsZSBQQVJBTVMgKCh2b2lkKSk7Cistc3RhdGljIGludCBhbGlhc19jb21wYXJlIFBBUkFNUyAoKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCistCQkJCSAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMikpOworK3N0YXRpYyBzaXplX3QgcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBpbnQgZXh0ZW5kX2FsaWFzX3RhYmxlICh2b2lkKTsKKytzdGF0aWMgaW50IGFsaWFzX2NvbXBhcmUgKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCisrCQkJICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKTsKKyAKKyAKKyBjb25zdCBjaGFyICoKKy1fbmxfZXhwYW5kX2FsaWFzIChuYW1lKQorLSAgICBjb25zdCBjaGFyICpuYW1lOworK19ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKm5hbWUpCisgeworLSAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICBzdGF0aWMgY29uc3QgY2hhciAqbG9jYWxlX2FsaWFzX3BhdGg7CisgICBzdHJ1Y3QgYWxpYXNfbWFwICpyZXR2YWw7CisrICBjb25zdCBjaGFyICpyZXN1bHQgPSBOVUxMOworICAgc2l6ZV90IGFkZGVkOworIAorKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrI2VuZGlmCisrCisrICBpZiAobG9jYWxlX2FsaWFzX3BhdGggPT0gTlVMTCkKKysgICAgbG9jYWxlX2FsaWFzX3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKysKKyAgIGRvCisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYWxpYXNfbWFwIGl0ZW07CitAQCAtMTU0LDE1ICsxNzEsMTggQEAKKyAgICAgICBpZiAobm1hcCA+IDApCisgCXJldHZhbCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIGJzZWFyY2ggKCZpdGVtLCBtYXAsIG5tYXAsCisgCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSwKKy0JCQkJCSAgICAgICAoaW50ICgqKSBQQVJBTVMgKChjb25zdCB2b2lkICosCistCQkJCQkJCQkgY29uc3Qgdm9pZCAqKSkKKysJCQkJCSAgICAgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLAorKwkJCQkJCQkgY29uc3Qgdm9pZCAqKQorIAkJCQkJCSkgYWxpYXNfY29tcGFyZSk7CisgICAgICAgZWxzZQorIAlyZXR2YWwgPSBOVUxMOworIAorICAgICAgIC8qIFdlIHJlYWxseSBmb3VuZCBhbiBhbGlhcy4gIFJldHVybiB0aGUgdmFsdWUuICAqLworICAgICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JcmV0dXJuIHJldHZhbC0+dmFsdWU7CisrCXsKKysJICByZXN1bHQgPSByZXR2YWwtPnZhbHVlOworKwkgIGJyZWFrOworKwl9CisgCisgICAgICAgLyogUGVyaGFwcyB3ZSBjYW4gZmluZCBhbm90aGVyIGFsaWFzIGZpbGUuICAqLworICAgICAgIGFkZGVkID0gMDsKK0BAIC0xNzAsMTEgKzE5MCwxMiBAQAorIAl7CisgCSAgY29uc3QgY2hhciAqc3RhcnQ7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdID09ICc6JykKKysJICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gPT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAkgIHN0YXJ0ID0gbG9jYWxlX2FsaWFzX3BhdGg7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICdcMCcgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJzonKQorKwkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSAhPSAnXDAnCisrCQkgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAorIAkgIGlmIChzdGFydCA8IGxvY2FsZV9hbGlhc19wYXRoKQorQEAgLTE4Myw3OCArMjA0LDg3IEBACisgICAgIH0KKyAgIHdoaWxlIChhZGRlZCAhPSAwKTsKKyAKKy0gIHJldHVybiBOVUxMOworKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysjZW5kaWYKKysKKysgIHJldHVybiByZXN1bHQ7CisgfQorIAorIAorIHN0YXRpYyBzaXplX3QKKy1yZWFkX2FsaWFzX2ZpbGUgKGZuYW1lLCBmbmFtZV9sZW4pCistICAgICBjb25zdCBjaGFyICpmbmFtZTsKKy0gICAgIGludCBmbmFtZV9sZW47CisraW50ZXJuYWxfZnVuY3Rpb24KKytyZWFkX2FsaWFzX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZm5hbWVfbGVuKQorIHsKKy0jaWZuZGVmIEhBVkVfQUxMT0NBCistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CistI2VuZGlmCisgICBGSUxFICpmcDsKKyAgIGNoYXIgKmZ1bGxfZm5hbWU7CisgICBzaXplX3QgYWRkZWQ7CisgICBzdGF0aWMgY29uc3QgY2hhciBhbGlhc2ZpbGVbXSA9ICIvbG9jYWxlLmFsaWFzIjsKKyAKKyAgIGZ1bGxfZm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKGZuYW1lX2xlbiArIHNpemVvZiBhbGlhc2ZpbGUpOworLSAgQUREX0JMT0NLIChibG9ja19saXN0LCBmdWxsX2ZuYW1lKTsKKysjaWZkZWYgSEFWRV9NRU1QQ1BZCisrICBtZW1wY3B5IChtZW1wY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKSwKKysJICAgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZWxzZQorICAgbWVtY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKTsKKyAgIG1lbWNweSAoJmZ1bGxfZm5hbWVbZm5hbWVfbGVuXSwgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZW5kaWYKKyAKKy0gIGZwID0gZm9wZW4gKGZ1bGxfZm5hbWUsICJyIik7CisrICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyIik7CisrICBmcmVlYSAoZnVsbF9mbmFtZSk7CisgICBpZiAoZnAgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorKyAgICByZXR1cm4gMDsKKysKKysjaWZkZWYgSEFWRV9fX0ZTRVRMT0NLSU5HCisrICAvKiBObyB0aHJlYWRzIHByZXNlbnQuICAqLworKyAgX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKysjZW5kaWYKKyAKKyAgIGFkZGVkID0gMDsKKy0gIHdoaWxlICghZmVvZiAoZnApKQorKyAgd2hpbGUgKCFGRU9GIChmcCkpCisgICAgIHsKKyAgICAgICAvKiBJdCBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gdXNlIGEgZml4IGJ1ZmZlciBoZXJlIGJlY2F1c2UKKyAJIGEpIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IHR3byBmaWVsZHMKKyAJIGIpIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHVzYWJsZSBhcyBmaWxlIG5hbWVzIGFuZCBzbyBtdXN0IG5vdAorIAkgICAgYmUgdGhhdCBsb25nCistICAgICAgICovCistICAgICAgY2hhciBidWZbQlVGU0laXTsKKysJIFdlIGF2b2lkIGEgbXVsdGkta2lsb2J5dGUgYnVmZmVyIGhlcmUgc2luY2UgdGhpcyB3b3VsZCB1c2UgdXAKKysJIHN0YWNrIHNwYWNlIHdoaWNoIHdlIG1pZ2h0IG5vdCBoYXZlIGlmIHRoZSBwcm9ncmFtIHJhbiBvdXQgb2YKKysJIG1lbW9yeS4gICovCisrICAgICAgY2hhciBidWZbNDAwXTsKKyAgICAgICBjaGFyICphbGlhczsKKyAgICAgICBjaGFyICp2YWx1ZTsKKyAgICAgICBjaGFyICpjcDsKKyAKKy0gICAgICBpZiAoZmdldHMgKGJ1ZiwgQlVGU0laLCBmcCkgPT0gTlVMTCkKKysgICAgICBpZiAoRkdFVFMgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApID09IE5VTEwpCisgCS8qIEVPRiByZWFjaGVkLiAgKi8KKyAJYnJlYWs7CisgCisgICAgICAgY3AgPSBidWY7CisgICAgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2UuICAqLworLSAgICAgIHdoaWxlIChpc3NwYWNlIChjcFswXSkpCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisgCSsrY3A7CisgCisgICAgICAgLyogQSBsZWFkaW5nICcjJyBzaWduYWxzIGEgY29tbWVudCBsaW5lLiAgKi8KKyAgICAgICBpZiAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnIycpCisgCXsKKyAJICBhbGlhcyA9IGNwKys7CistCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCSAgLyogVGVybWluYXRlIGFsaWFzIG5hbWUuICAqLworIAkgIGlmIChjcFswXSAhPSAnXDAnKQorIAkgICAgKmNwKysgPSAnXDAnOworIAorIAkgIC8qIE5vdyBsb29rIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2YWx1ZS4gICovCistCSAgd2hpbGUgKGlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCisgCSAgaWYgKGNwWzBdICE9ICdcMCcpCisgCSAgICB7CistCSAgICAgIGNoYXIgKnRwOworLQkgICAgICBzaXplX3QgbGVuOworKwkgICAgICBzaXplX3QgYWxpYXNfbGVuOworKwkgICAgICBzaXplX3QgdmFsdWVfbGVuOworIAorIAkgICAgICB2YWx1ZSA9IGNwKys7CistCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlIChjcFswXSkpCisrCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorIAkJKytjcDsKKyAJICAgICAgLyogVGVybWluYXRlIHZhbHVlLiAgKi8KKyAJICAgICAgaWYgKGNwWzBdID09ICdcbicpCitAQCAtMjY5LDI4ICsyOTksNDQgQEAKKyAJCSpjcCsrID0gJ1wwJzsKKyAKKyAJICAgICAgaWYgKG5tYXAgPj0gbWF4bWFwKQorLQkJZXh0ZW5kX2FsaWFzX3RhYmxlICgpOworLQorLQkgICAgICAvKiBXZSBjYW5ub3QgZGVwZW5kIG9uIHN0cmR1cCBhdmFpbGFibGUgaW4gdGhlIGxpYmMuICBTaWdoISAgKi8KKy0JICAgICAgbGVuID0gc3RybGVuIChhbGlhcykgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCistCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysJCWlmIChfX2J1aWx0aW5fZXhwZWN0IChleHRlbmRfYWxpYXNfdGFibGUgKCksIDApKQorIAkJICByZXR1cm4gYWRkZWQ7CistCQl9CistCSAgICAgIG1lbWNweSAodHAsIGFsaWFzLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0uYWxpYXMgPSB0cDsKKyAKKy0JICAgICAgbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCisrCSAgICAgIGFsaWFzX2xlbiA9IHN0cmxlbiAoYWxpYXMpICsgMTsKKysJICAgICAgdmFsdWVfbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworKworKwkgICAgICBpZiAoc3RyaW5nX3NwYWNlX2FjdCArIGFsaWFzX2xlbiArIHZhbHVlX2xlbiA+IHN0cmluZ19zcGFjZV9tYXgpCisgCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JCSAgcmV0dXJuIGFkZGVkOworKwkJICAvKiBJbmNyZWFzZSBzaXplIG9mIG1lbW9yeSBwb29sLiAgKi8KKysJCSAgc2l6ZV90IG5ld19zaXplID0gKHN0cmluZ19zcGFjZV9tYXgKKysJCQkJICAgICArIChhbGlhc19sZW4gKyB2YWx1ZV9sZW4gPiAxMDI0CisrCQkJCQk/IGFsaWFzX2xlbiArIHZhbHVlX2xlbiA6IDEwMjQpKTsKKysJCSAgY2hhciAqbmV3X3Bvb2wgPSAoY2hhciAqKSByZWFsbG9jIChzdHJpbmdfc3BhY2UsIG5ld19zaXplKTsKKysJCSAgaWYgKG5ld19wb29sID09IE5VTEwpCisrCQkgICAgcmV0dXJuIGFkZGVkOworKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoc3RyaW5nX3NwYWNlICE9IG5ld19wb29sLCAwKSkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgaTsKKysKKysJCSAgICAgIGZvciAoaSA9IDA7IGkgPCBubWFwOyBpKyspCisrCQkJeworKwkJCSAgbWFwW2ldLmFsaWFzICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCSAgbWFwW2ldLnZhbHVlICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCX0KKysJCSAgICB9CisrCisrCQkgIHN0cmluZ19zcGFjZSA9IG5ld19wb29sOworKwkJICBzdHJpbmdfc3BhY2VfbWF4ID0gbmV3X3NpemU7CisgCQl9CistCSAgICAgIG1lbWNweSAodHAsIHZhbHVlLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0udmFsdWUgPSB0cDsKKysKKysJICAgICAgbWFwW25tYXBdLmFsaWFzID0gbWVtY3B5ICgmc3RyaW5nX3NwYWNlW3N0cmluZ19zcGFjZV9hY3RdLAorKwkJCQkJYWxpYXMsIGFsaWFzX2xlbik7CisrCSAgICAgIHN0cmluZ19zcGFjZV9hY3QgKz0gYWxpYXNfbGVuOworKworKwkgICAgICBtYXBbbm1hcF0udmFsdWUgPSBtZW1jcHkgKCZzdHJpbmdfc3BhY2Vbc3RyaW5nX3NwYWNlX2FjdF0sCisrCQkJCQl2YWx1ZSwgdmFsdWVfbGVuKTsKKysJICAgICAgc3RyaW5nX3NwYWNlX2FjdCArPSB2YWx1ZV9sZW47CisgCisgCSAgICAgICsrbm1hcDsKKyAJICAgICAgKythZGRlZDsKK0BAIC0yOTksMTQgKzM0NSwxMSBAQAorIAorICAgICAgIC8qIFBvc3NpYmx5IG5vdCB0aGUgd2hvbGUgbGluZSBmaXRzIGludG8gdGhlIGJ1ZmZlci4gIElnbm9yZQorIAkgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuICAqLworLSAgICAgIHdoaWxlIChzdHJjaHIgKGNwLCAnXG4nKSA9PSBOVUxMKQorLQl7CistCSAgY3AgPSBidWY7CistCSAgaWYgKGZnZXRzIChidWYsIEJVRlNJWiwgZnApID09IE5VTEwpCistCSAgICAvKiBNYWtlIHN1cmUgdGhlIGlubmVyIGxvb3Agd2lsbCBiZSBsZWZ0LiAgVGhlIG91dGVyIGxvb3AKKy0JICAgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworLQkgICAgKmNwID0gJ1xuJzsKKy0JfQorKyAgICAgIHdoaWxlIChzdHJjaHIgKGJ1ZiwgJ1xuJykgPT0gTlVMTCkKKysJaWYgKEZHRVRTIChidWYsIHNpemVvZiBidWYsIGZwKSA9PSBOVUxMKQorKwkgIC8qIE1ha2Ugc3VyZSB0aGUgaW5uZXIgbG9vcCB3aWxsIGJlIGxlZnQuICBUaGUgb3V0ZXIgbG9vcAorKwkgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworKwkgIGJyZWFrOworICAgICB9CisgCisgICAvKiBTaG91bGQgd2UgdGVzdCBmb3IgZmVycm9yKCk/ICBJIHRoaW5rIHdlIGhhdmUgdG8gc2lsZW50bHkgaWdub3JlCitAQCAtMzE1LDQwICszNTgsMzMgQEAKKyAKKyAgIGlmIChhZGRlZCA+IDApCisgICAgIHFzb3J0IChtYXAsIG5tYXAsIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCksCistCSAgIChpbnQgKCopIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkpIGFsaWFzX2NvbXBhcmUpOworKwkgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBhbGlhc19jb21wYXJlKTsKKyAKKy0gIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKyAgIHJldHVybiBhZGRlZDsKKyB9CisgCisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgaW50CisgZXh0ZW5kX2FsaWFzX3RhYmxlICgpCisgeworICAgc2l6ZV90IG5ld19zaXplOworICAgc3RydWN0IGFsaWFzX21hcCAqbmV3X21hcDsKKyAKKyAgIG5ld19zaXplID0gbWF4bWFwID09IDAgPyAxMDAgOiAyICogbWF4bWFwOworLSAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIG1hbGxvYyAobmV3X3NpemUKKy0JCQkJCSAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworKyAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIHJlYWxsb2MgKG1hcCwgKG5ld19zaXplCisrCQkJCQkJKiBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApKSk7CisgICBpZiAobmV3X21hcCA9PSBOVUxMKQorICAgICAvKiBTaW1wbHkgZG9uJ3QgZXh0ZW5kOiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGNvcmUuICAqLworLSAgICByZXR1cm47CistCistICBtZW1jcHkgKG5ld19tYXAsIG1hcCwgbm1hcCAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworLQorLSAgaWYgKG1heG1hcCAhPSAwKQorLSAgICBmcmVlIChtYXApOworKyAgICByZXR1cm4gLTE7CisgCisgICBtYXAgPSBuZXdfbWFwOworICAgbWF4bWFwID0gbmV3X3NpemU7CisrICByZXR1cm4gMDsKKyB9CisgCisgCisgc3RhdGljIGludAorLWFsaWFzX2NvbXBhcmUgKG1hcDEsIG1hcDIpCistICAgICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxOworLSAgICAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMjsKKythbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLCBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKQorIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSQ0FTRUNNUAorICAgcmV0dXJuIHN0cmNhc2VjbXAgKG1hcDEtPmFsaWFzLCBtYXAyLT5hbGlhcyk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlbmFtZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZW5hbWUuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUxMDcyNDUyOCAtMDQwMAorQEAgLTAsMCArMSwxMTQyIEBACisrLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxvY2FsZS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5vcmc+LCAxOTk1LiAgKi8KKysvKiBXaW4zMiBjb2RlIHdyaXR0ZW4gYnkgVG9yIExpbGxxdmlzdCA8dG1sQGlraS5maT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworKyMgdW5kZWYgV0lOMzIgICAvKiBhdm9pZCB3YXJuaW5nIG9uIG1pbmd3MzIgKi8KKysjIGRlZmluZSBXSU4zMgorKyNlbmRpZgorKworKyNpZmRlZiBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysvKiBMaXN0IG9mIGxhbmd1YWdlIGNvZGVzLCBzb3J0ZWQgYnkgdmFsdWU6CisrICAgMHgwMSBMQU5HX0FSQUJJQworKyAgIDB4MDIgTEFOR19CVUxHQVJJQU4KKysgICAweDAzIExBTkdfQ0FUQUxBTgorKyAgIDB4MDQgTEFOR19DSElORVNFCisrICAgMHgwNSBMQU5HX0NaRUNICisrICAgMHgwNiBMQU5HX0RBTklTSAorKyAgIDB4MDcgTEFOR19HRVJNQU4KKysgICAweDA4IExBTkdfR1JFRUsKKysgICAweDA5IExBTkdfRU5HTElTSAorKyAgIDB4MGEgTEFOR19TUEFOSVNICisrICAgMHgwYiBMQU5HX0ZJTk5JU0gKKysgICAweDBjIExBTkdfRlJFTkNICisrICAgMHgwZCBMQU5HX0hFQlJFVworKyAgIDB4MGUgTEFOR19IVU5HQVJJQU4KKysgICAweDBmIExBTkdfSUNFTEFORElDCisrICAgMHgxMCBMQU5HX0lUQUxJQU4KKysgICAweDExIExBTkdfSkFQQU5FU0UKKysgICAweDEyIExBTkdfS09SRUFOCisrICAgMHgxMyBMQU5HX0RVVENICisrICAgMHgxNCBMQU5HX05PUldFR0lBTgorKyAgIDB4MTUgTEFOR19QT0xJU0gKKysgICAweDE2IExBTkdfUE9SVFVHVUVTRQorKyAgIDB4MTcgTEFOR19SSEFFVE9fUk9NQU5DRQorKyAgIDB4MTggTEFOR19ST01BTklBTgorKyAgIDB4MTkgTEFOR19SVVNTSUFOCisrICAgMHgxYSBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKyAgIDB4MWIgTEFOR19TTE9WQUsKKysgICAweDFjIExBTkdfQUxCQU5JQU4KKysgICAweDFkIExBTkdfU1dFRElTSAorKyAgIDB4MWUgTEFOR19USEFJCisrICAgMHgxZiBMQU5HX1RVUktJU0gKKysgICAweDIwIExBTkdfVVJEVQorKyAgIDB4MjEgTEFOR19JTkRPTkVTSUFOCisrICAgMHgyMiBMQU5HX1VLUkFJTklBTgorKyAgIDB4MjMgTEFOR19CRUxBUlVTSUFOCisrICAgMHgyNCBMQU5HX1NMT1ZFTklBTgorKyAgIDB4MjUgTEFOR19FU1RPTklBTgorKyAgIDB4MjYgTEFOR19MQVRWSUFOCisrICAgMHgyNyBMQU5HX0xJVEhVQU5JQU4KKysgICAweDI4IExBTkdfVEFKSUsKKysgICAweDI5IExBTkdfRkFSU0kKKysgICAweDJhIExBTkdfVklFVE5BTUVTRQorKyAgIDB4MmIgTEFOR19BUk1FTklBTgorKyAgIDB4MmMgTEFOR19BWkVSSQorKyAgIDB4MmQgTEFOR19CQVNRVUUKKysgICAweDJlIExBTkdfU09SQklBTgorKyAgIDB4MmYgTEFOR19NQUNFRE9OSUFOCisrICAgMHgzMCBMQU5HX1NVVFUKKysgICAweDMxIExBTkdfVFNPTkdBCisrICAgMHgzMiBMQU5HX1RTV0FOQQorKyAgIDB4MzMgTEFOR19WRU5EQQorKyAgIDB4MzQgTEFOR19YSE9TQQorKyAgIDB4MzUgTEFOR19aVUxVCisrICAgMHgzNiBMQU5HX0FGUklLQUFOUworKyAgIDB4MzcgTEFOR19HRU9SR0lBTgorKyAgIDB4MzggTEFOR19GQUVST0VTRQorKyAgIDB4MzkgTEFOR19ISU5ESQorKyAgIDB4M2EgTEFOR19NQUxURVNFCisrICAgMHgzYiBMQU5HX1NBQU1JCisrICAgMHgzYyBMQU5HX0dBRUxJQworKyAgIDB4M2QgTEFOR19ZSURESVNICisrICAgMHgzZSBMQU5HX01BTEFZCisrICAgMHgzZiBMQU5HX0tBWkFLCisrICAgMHg0MCBMQU5HX0tZUkdZWgorKyAgIDB4NDEgTEFOR19TV0FISUxJCisrICAgMHg0MiBMQU5HX1RVUktNRU4KKysgICAweDQzIExBTkdfVVpCRUsKKysgICAweDQ0IExBTkdfVEFUQVIKKysgICAweDQ1IExBTkdfQkVOR0FMSQorKyAgIDB4NDYgTEFOR19QVU5KQUJJCisrICAgMHg0NyBMQU5HX0dVSkFSQVRJCisrICAgMHg0OCBMQU5HX09SSVlBCisrICAgMHg0OSBMQU5HX1RBTUlMCisrICAgMHg0YSBMQU5HX1RFTFVHVQorKyAgIDB4NGIgTEFOR19LQU5OQURBCisrICAgMHg0YyBMQU5HX01BTEFZQUxBTQorKyAgIDB4NGQgTEFOR19BU1NBTUVTRQorKyAgIDB4NGUgTEFOR19NQVJBVEhJCisrICAgMHg0ZiBMQU5HX1NBTlNLUklUCisrICAgMHg1MCBMQU5HX01PTkdPTElBTgorKyAgIDB4NTEgTEFOR19USUJFVEFOCisrICAgMHg1MiBMQU5HX1dFTFNICisrICAgMHg1MyBMQU5HX0NBTUJPRElBTgorKyAgIDB4NTQgTEFOR19MQU8KKysgICAweDU1IExBTkdfQlVSTUVTRQorKyAgIDB4NTYgTEFOR19HQUxJQ0lBTgorKyAgIDB4NTcgTEFOR19LT05LQU5JCisrICAgMHg1OCBMQU5HX01BTklQVVJJCisrICAgMHg1OSBMQU5HX1NJTkRISQorKyAgIDB4NWEgTEFOR19TWVJJQUMKKysgICAweDViIExBTkdfU0lOSEFMRVNFCisrICAgMHg1YyBMQU5HX0NIRVJPS0VFCisrICAgMHg1ZCBMQU5HX0lOVUtUSVRVVAorKyAgIDB4NWUgTEFOR19BTUhBUklDCisrICAgMHg1ZiBMQU5HX1RBTUFaSUdIVAorKyAgIDB4NjAgTEFOR19LQVNITUlSSQorKyAgIDB4NjEgTEFOR19ORVBBTEkKKysgICAweDYyIExBTkdfRlJJU0lBTgorKyAgIDB4NjMgTEFOR19QQVNIVE8KKysgICAweDY0IExBTkdfVEFHQUxPRworKyAgIDB4NjUgTEFOR19ESVZFSEkKKysgICAweDY2IExBTkdfRURPCisrICAgMHg2NyBMQU5HX0ZVTEZVTERFCisrICAgMHg2OCBMQU5HX0hBVVNBCisrICAgMHg2OSBMQU5HX0lCSUJJTworKyAgIDB4NmEgTEFOR19ZT1JVQkEKKysgICAweDcwIExBTkdfSUdCTworKyAgIDB4NzEgTEFOR19LQU5VUkkKKysgICAweDcyIExBTkdfT1JPTU8KKysgICAweDczIExBTkdfVElHUklOWUEKKysgICAweDc0IExBTkdfR1VBUkFOSQorKyAgIDB4NzUgTEFOR19IQVdBSUlBTgorKyAgIDB4NzYgTEFOR19MQVRJTgorKyAgIDB4NzcgTEFOR19TT01BTEkKKysgICAweDc4IExBTkdfWUkKKysgICAweDc5IExBTkdfUEFQSUFNRU5UVQorKyovCisrLyogTWluZ3cgaGVhZGVycyBkb24ndCBoYXZlIGxhdGVzdCBsYW5ndWFnZSBhbmQgc3VibGFuZ3VhZ2UgY29kZXMuICAqLworKyMgaWZuZGVmIExBTkdfQUZSSUtBQU5TCisrIyBkZWZpbmUgTEFOR19BRlJJS0FBTlMgMHgzNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FMQkFOSUFOCisrIyBkZWZpbmUgTEFOR19BTEJBTklBTiAweDFjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQU1IQVJJQworKyMgZGVmaW5lIExBTkdfQU1IQVJJQyAweDVlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVJBQklDCisrIyBkZWZpbmUgTEFOR19BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FSTUVOSUFOCisrIyBkZWZpbmUgTEFOR19BUk1FTklBTiAweDJiCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVNTQU1FU0UKKysjIGRlZmluZSBMQU5HX0FTU0FNRVNFIDB4NGQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BWkVSSQorKyMgZGVmaW5lIExBTkdfQVpFUkkgMHgyYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0JBU1FVRQorKyMgZGVmaW5lIExBTkdfQkFTUVVFIDB4MmQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRUxBUlVTSUFOCisrIyBkZWZpbmUgTEFOR19CRUxBUlVTSUFOIDB4MjMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRU5HQUxJCisrIyBkZWZpbmUgTEFOR19CRU5HQUxJIDB4NDUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CVVJNRVNFCisrIyBkZWZpbmUgTEFOR19CVVJNRVNFIDB4NTUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19DQU1CT0RJQU4KKysjIGRlZmluZSBMQU5HX0NBTUJPRElBTiAweDUzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0FUQUxBTgorKyMgZGVmaW5lIExBTkdfQ0FUQUxBTiAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0hFUk9LRUUKKysjIGRlZmluZSBMQU5HX0NIRVJPS0VFIDB4NWMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ESVZFSEkKKysjIGRlZmluZSBMQU5HX0RJVkVISSAweDY1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRURPCisrIyBkZWZpbmUgTEFOR19FRE8gMHg2NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0VTVE9OSUFOCisrIyBkZWZpbmUgTEFOR19FU1RPTklBTiAweDI1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRkFFUk9FU0UKKysjIGRlZmluZSBMQU5HX0ZBRVJPRVNFIDB4MzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19GQVJTSQorKyMgZGVmaW5lIExBTkdfRkFSU0kgMHgyOQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZSSVNJQU4KKysjIGRlZmluZSBMQU5HX0ZSSVNJQU4gMHg2MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZVTEZVTERFCisrIyBkZWZpbmUgTEFOR19GVUxGVUxERSAweDY3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0FFTElDCisrIyBkZWZpbmUgTEFOR19HQUVMSUMgMHgzYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dBTElDSUFOCisrIyBkZWZpbmUgTEFOR19HQUxJQ0lBTiAweDU2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0VPUkdJQU4KKysjIGRlZmluZSBMQU5HX0dFT1JHSUFOIDB4MzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUFSQU5JCisrIyBkZWZpbmUgTEFOR19HVUFSQU5JIDB4NzQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUpBUkFUSQorKyMgZGVmaW5lIExBTkdfR1VKQVJBVEkgMHg0NworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0hBVVNBCisrIyBkZWZpbmUgTEFOR19IQVVTQSAweDY4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSEFXQUlJQU4KKysjIGRlZmluZSBMQU5HX0hBV0FJSUFOIDB4NzUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19IRUJSRVcKKysjIGRlZmluZSBMQU5HX0hFQlJFVyAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSElOREkKKysjIGRlZmluZSBMQU5HX0hJTkRJIDB4MzkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19JQklCSU8KKysjIGRlZmluZSBMQU5HX0lCSUJJTyAweDY5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSUdCTworKyMgZGVmaW5lIExBTkdfSUdCTyAweDcwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5ET05FU0lBTgorKyMgZGVmaW5lIExBTkdfSU5ET05FU0lBTiAweDIxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5VS1RJVFVUCisrIyBkZWZpbmUgTEFOR19JTlVLVElUVVQgMHg1ZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTk5BREEKKysjIGRlZmluZSBMQU5HX0tBTk5BREEgMHg0YgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTlVSSQorKyMgZGVmaW5lIExBTkdfS0FOVVJJIDB4NzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LQVNITUlSSQorKyMgZGVmaW5lIExBTkdfS0FTSE1JUkkgMHg2MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBWkFLCisrIyBkZWZpbmUgTEFOR19LQVpBSyAweDNmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS09OS0FOSQorKyMgZGVmaW5lIExBTkdfS09OS0FOSSAweDU3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS1lSR1laCisrIyBkZWZpbmUgTEFOR19LWVJHWVogMHg0MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBTworKyMgZGVmaW5lIExBTkdfTEFPIDB4NTQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19MQVRJTgorKyMgZGVmaW5lIExBTkdfTEFUSU4gMHg3NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBVFZJQU4KKysjIGRlZmluZSBMQU5HX0xBVFZJQU4gMHgyNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xJVEhVQU5JQU4KKysjIGRlZmluZSBMQU5HX0xJVEhVQU5JQU4gMHgyNworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BQ0VET05JQU4KKysjIGRlZmluZSBMQU5HX01BQ0VET05JQU4gMHgyZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTEFZCisrIyBkZWZpbmUgTEFOR19NQUxBWSAweDNlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFMQVlBTEFNCisrIyBkZWZpbmUgTEFOR19NQUxBWUFMQU0gMHg0YworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTFRFU0UKKysjIGRlZmluZSBMQU5HX01BTFRFU0UgMHgzYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTklQVVJJCisrIyBkZWZpbmUgTEFOR19NQU5JUFVSSSAweDU4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFSQVRISQorKyMgZGVmaW5lIExBTkdfTUFSQVRISSAweDRlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTU9OR09MSUFOCisrIyBkZWZpbmUgTEFOR19NT05HT0xJQU4gMHg1MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX05FUEFMSQorKyMgZGVmaW5lIExBTkdfTkVQQUxJIDB4NjEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19PUklZQQorKyMgZGVmaW5lIExBTkdfT1JJWUEgMHg0OAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX09ST01PCisrIyBkZWZpbmUgTEFOR19PUk9NTyAweDcyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFQSUFNRU5UVQorKyMgZGVmaW5lIExBTkdfUEFQSUFNRU5UVSAweDc5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFTSFRPCisrIyBkZWZpbmUgTEFOR19QQVNIVE8gMHg2MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1BVTkpBQkkKKysjIGRlZmluZSBMQU5HX1BVTkpBQkkgMHg0NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1JIQUVUT19ST01BTkNFCisrIyBkZWZpbmUgTEFOR19SSEFFVE9fUk9NQU5DRSAweDE3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0FBTUkKKysjIGRlZmluZSBMQU5HX1NBQU1JIDB4M2IKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TQU5TS1JJVAorKyMgZGVmaW5lIExBTkdfU0FOU0tSSVQgMHg0ZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NFUkJJQU4KKysjIGRlZmluZSBMQU5HX1NFUkJJQU4gMHgxYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NJTkRISQorKyMgZGVmaW5lIExBTkdfU0lOREhJIDB4NTkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TSU5IQUxFU0UKKysjIGRlZmluZSBMQU5HX1NJTkhBTEVTRSAweDViCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0xPVkFLCisrIyBkZWZpbmUgTEFOR19TTE9WQUsgMHgxYgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NPTUFMSQorKyMgZGVmaW5lIExBTkdfU09NQUxJIDB4NzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TT1JCSUFOCisrIyBkZWZpbmUgTEFOR19TT1JCSUFOIDB4MmUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TVVRVCisrIyBkZWZpbmUgTEFOR19TVVRVIDB4MzAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TV0FISUxJCisrIyBkZWZpbmUgTEFOR19TV0FISUxJIDB4NDEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TWVJJQUMKKysjIGRlZmluZSBMQU5HX1NZUklBQyAweDVhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFHQUxPRworKyMgZGVmaW5lIExBTkdfVEFHQUxPRyAweDY0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFKSUsKKysjIGRlZmluZSBMQU5HX1RBSklLIDB4MjgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQU1BWklHSFQKKysjIGRlZmluZSBMQU5HX1RBTUFaSUdIVCAweDVmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFNSUwKKysjIGRlZmluZSBMQU5HX1RBTUlMIDB4NDkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQVRBUgorKyMgZGVmaW5lIExBTkdfVEFUQVIgMHg0NAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RFTFVHVQorKyMgZGVmaW5lIExBTkdfVEVMVUdVIDB4NGEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USEFJCisrIyBkZWZpbmUgTEFOR19USEFJIDB4MWUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUJFVEFOCisrIyBkZWZpbmUgTEFOR19USUJFVEFOIDB4NTEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUdSSU5ZQQorKyMgZGVmaW5lIExBTkdfVElHUklOWUEgMHg3MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RTT05HQQorKyMgZGVmaW5lIExBTkdfVFNPTkdBIDB4MzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UU1dBTkEKKysjIGRlZmluZSBMQU5HX1RTV0FOQSAweDMyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVFVSS01FTgorKyMgZGVmaW5lIExBTkdfVFVSS01FTiAweDQyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVUtSQUlOSUFOCisrIyBkZWZpbmUgTEFOR19VS1JBSU5JQU4gMHgyMgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VSRFUKKysjIGRlZmluZSBMQU5HX1VSRFUgMHgyMAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VaQkVLCisrIyBkZWZpbmUgTEFOR19VWkJFSyAweDQzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVkVOREEKKysjIGRlZmluZSBMQU5HX1ZFTkRBIDB4MzMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19WSUVUTkFNRVNFCisrIyBkZWZpbmUgTEFOR19WSUVUTkFNRVNFIDB4MmEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19XRUxTSAorKyMgZGVmaW5lIExBTkdfV0VMU0ggMHg1MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1hIT1NBCisrIyBkZWZpbmUgTEFOR19YSE9TQSAweDM0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWUkKKysjIGRlZmluZSBMQU5HX1lJIDB4NzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZSURESVNICisrIyBkZWZpbmUgTEFOR19ZSURESVNIIDB4M2QKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZT1JVQkEKKysjIGRlZmluZSBMQU5HX1lPUlVCQSAweDZhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWlVMVQorKyMgZGVmaW5lIExBTkdfWlVMVSAweDM1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQSAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0lSQVEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19JUkFRIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfRUdZUFQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19FR1lQVCAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xJQllBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTElCWUEgMHgwNAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19BTEdFUklBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQUxHRVJJQSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPIDB4MDYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVFVOSVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1RVTklTSUEgMHgwNworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19PTUFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfT01BTiAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1lFTUVOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfWUVNRU4gMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TWVJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NZUklBIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfSk9SREFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSk9SREFOIDB4MGIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfTEVCQU5PTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xFQkFOT04gMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19LVVdBSVQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19VQUUKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19VQUUgMHgwZQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQkFIUkFJTiAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1FBVEFSCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfUUFUQVIgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0gKKysjIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSCAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVQorKyMgZGVmaW5lIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQSAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU4KKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOIDB4MDkKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0JFTElaRQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUgMHgwYQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ET05FU0lBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORworKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORyAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRJQSAweDEwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQSAweDExCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkUKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFIDB4MTIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT05BQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ08gMHgwNgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUyAweDA3CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1JFVU5JT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OIDB4MDgKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ09OR08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT05HTyAweDA5CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUwKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTiAweDBiCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPVEVESVZPSVJFCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NQUxJCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTUFMSSAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPIDB4MGUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfSEFJVEkKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkcKKysjIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHIDB4MDQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTgorKyMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0tBU0hNSVJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19LQVNITUlSSV9JTkRJQSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUEKKysjIGRlZmluZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTQorKyMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX05FUEFMSV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfTkVQQUxJX0lORElBIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9ST01BTklBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9ST01BTklBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDIDB4MDMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TSU5ESElfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1NJTkRISV9JTkRJQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQSAweDA0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBTkFNQSAweDA2CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9ET01JTklDQU5fUkVQVUJMSUMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1ZFTkVaVUVMQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEgMHgwOAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEgMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEVSVQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QRVJVIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0FSR0VOVElOQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUgorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SIDB4MGMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NISUxFCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NISUxFIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1VSVUdVQVkKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9CT0xJVklBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IgMHgxMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMgMHgxMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQSAweDEzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTworKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTyAweDE0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5ECisrIyBkZWZpbmUgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMKKysjIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTgorKyMgZGVmaW5lIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQQorKyMgZGVmaW5lIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEKKysjIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfUEFLSVNUQU4KKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfSU5ESUEgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19VWkJFS19MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVVpCRUtfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgJ3NldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKysgICAiRGlyZWN0cyAnc2V0bG9jYWxlKCknIHRvIHF1ZXJ5ICdjYXRlZ29yeScgYW5kIHJldHVybiB0aGUgY3VycmVudAorKyAgICBzZXR0aW5nIG9mICdsb2NhbCcuIgorKyAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgTmVpdGhlciBkbyBTVVNWMiBhbmQKKysgICBJU08gQyA5OS4gIFNvIHdlIGNhbiB1c2UgdGhpcyBmZWF0dXJlIG9ubHkgb24gc2VsZWN0ZWQgc3lzdGVtcyAoZS5nLgorKyAgIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID49IDIpCisrIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorKyNlbmRpZgorKworKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBuYW1lLCBhbmQgY2Fub25pY2FsaXplIGl0IGludG8gWFBHIHN5bnRheAorKyAgICAgbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKysgICBUaGUgY29kZXNldCBwYXJ0IGluIHRoZSByZXN1bHQgaXMgbm90IHJlbGlhYmxlOyB0aGUgbG9jYWxlX2NoYXJzZXQoKQorKyAgIHNob3VsZCBiZSB1c2VkIGZvciBjb2Rlc2V0IGluZm9ybWF0aW9uIGluc3RlYWQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuICAqLworKworK2NvbnN0IGNoYXIgKgorK19ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisreworKyAgY29uc3QgY2hhciAqcmV0dmFsOworKworKyNpZm5kZWYgV0lOMzIKKysKKysgIC8qIFVzZSB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvICdMQ19BTEwnLCAnTENfeHh4JywgYW5kICdMQU5HJy4KKysgICAgIE9uIHNvbWUgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZSAnc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworKyMgaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgJiYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9OVUxMCisrICByZXR2YWwgPSBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKTsKKysjIGVsc2UKKysgIC8qIFNldHRpbmcgb2YgTENfQUxMIG92ZXJ3cml0ZXMgYWxsIG90aGVyLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCA9PSBOVUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQorKyAgICB7CisrICAgICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCisrICAgICAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgICAgIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIExhc3QgcG9zc2liaWxpdHkgaXMgdGhlIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGUuICAqLworKwkgIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKysJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisrCSAgICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMKKysJICAgICAgIGltcGxlbWVudGF0aW9uIGRlZmluZWQuICAqLworKwkgICAgcmV0dmFsID0gIkMiOworKwl9CisrICAgIH0KKysjIGVuZGlmCisrCisrICByZXR1cm4gcmV0dmFsOworKworKyNlbHNlIC8qIFdJTjMyICovCisrCisrICAvKiBSZXR1cm4gYW4gWFBHIHN0eWxlIGxvY2FsZSBuYW1lIGxhbmd1YWdlW190ZXJyaXRvcnldW0Btb2RpZmllcl0uCisrICAgICBEb24ndCBldmVuIGJvdGhlciBkZXRlcm1pbmluZyB0aGUgY29kZXNldDsgaXQncyBub3QgdXNlZnVsIGluIHRoaXMKKysgICAgIGNvbnRleHQsIGJlY2F1c2UgbWVzc2FnZSBjYXRhbG9ncyBhcmUgbm90IHNwZWNpZmljIHRvIGEgc2luZ2xlCisrICAgICBjb2Rlc2V0LiAgKi8KKysKKysgIExDSUQgbGNpZDsKKysgIExBTkdJRCBsYW5naWQ7CisrICBpbnQgcHJpbWFyeSwgc3ViOworKworKyAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBzeXN0ZW0gc2V0dGluZ3MgdGhyb3VnaCBlbnZpcm9ubWVudAorKyAgICAgdmFyaWFibGVzLCBhcyBvbiBQT1NJWCBzeXN0ZW1zLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52ICgiTEFORyIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKworKyAgLyogVXNlIG5hdGl2ZSBXaW4zMiBBUEkgbG9jYWxlIElELiAgKi8KKysgIGxjaWQgPSBHZXRUaHJlYWRMb2NhbGUgKCk7CisrCisrICAvKiBTdHJpcCBvZmYgdGhlIHNvcnRpbmcgcnVsZXMsIGtlZXAgb25seSB0aGUgbGFuZ3VhZ2UgcGFydC4gICovCisrICBsYW5naWQgPSBMQU5HSURGUk9NTENJRCAobGNpZCk7CisrCisrICAvKiBTcGxpdCBpbnRvIGxhbmd1YWdlIGFuZCB0ZXJyaXRvcnkgcGFydC4gICovCisrICBwcmltYXJ5ID0gUFJJTUFSWUxBTkdJRCAobGFuZ2lkKTsKKysgIHN1YiA9IFNVQkxBTkdJRCAobGFuZ2lkKTsKKysKKysgIC8qIERpc3BhdGNoIG9uIGxhbmd1YWdlLgorKyAgICAgU2VlIGFsc28gaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL29ubGluZWRhdC9sYW5ndWFnZXMuaHRtbCAuCisrICAgICBGb3IgZGV0YWlscyBhYm91dCBsYW5ndWFnZXMsIHNlZSBodHRwOi8vd3d3LmV0aG5vbG9ndWUuY29tLyAuICAqLworKyAgc3dpdGNoIChwcmltYXJ5KQorKyAgICB7CisrICAgIGNhc2UgTEFOR19BRlJJS0FBTlM6IHJldHVybiAiYWZfWkEiOworKyAgICBjYXNlIExBTkdfQUxCQU5JQU46IHJldHVybiAic3FfQUwiOworKyAgICBjYXNlIExBTkdfQU1IQVJJQzogcmV0dXJuICJhbV9FVCI7CisrICAgIGNhc2UgTEFOR19BUkFCSUM6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUE6IHJldHVybiAiYXJfU0EiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0lSQVE6IHJldHVybiAiYXJfSVEiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0VHWVBUOiByZXR1cm4gImFyX0VHIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19MSUJZQTogcmV0dXJuICJhcl9MWSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfQUxHRVJJQTogcmV0dXJuICJhcl9EWiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfTU9ST0NDTzogcmV0dXJuICJhcl9NQSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVFVOSVNJQTogcmV0dXJuICJhcl9UTiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfT01BTjogcmV0dXJuICJhcl9PTSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfWUVNRU46IHJldHVybiAiYXJfWUUiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1NZUklBOiByZXR1cm4gImFyX1NZIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19KT1JEQU46IHJldHVybiAiYXJfSk8iOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0xFQkFOT046IHJldHVybiAiYXJfTEIiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0tVV0FJVDogcmV0dXJuICJhcl9LVyI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVUFFOiByZXR1cm4gImFyX0FFIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOOiByZXR1cm4gImFyX0JIIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19RQVRBUjogcmV0dXJuICJhcl9RQSI7CisrCX0KKysgICAgICByZXR1cm4gImFyIjsKKysgICAgY2FzZSBMQU5HX0FSTUVOSUFOOiByZXR1cm4gImh5X0FNIjsKKysgICAgY2FzZSBMQU5HX0FTU0FNRVNFOiByZXR1cm4gImFzX0lOIjsKKysgICAgY2FzZSBMQU5HX0FaRVJJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCS8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIEF6ZXJiYWlqYW5pIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKwljYXNlIFNVQkxBTkdfQVpFUklfTEFUSU46IHJldHVybiAiYXpfQVpAbGF0aW4iOworKwljYXNlIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUM6IHJldHVybiAiYXpfQVpAY3lyaWxsaWMiOworKwl9CisrICAgICAgcmV0dXJuICJheiI7CisrICAgIGNhc2UgTEFOR19CQVNRVUU6CisrICAgICAgcmV0dXJuICJldSI7IC8qIEFtYmlndW91czogY291bGQgYmUgImV1X0VTIiBvciAiZXVfRlIiLiAgKi8KKysgICAgY2FzZSBMQU5HX0JFTEFSVVNJQU46IHJldHVybiAiYmVfQlkiOworKyAgICBjYXNlIExBTkdfQkVOR0FMSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQkVOR0FMSV9JTkRJQTogcmV0dXJuICJibl9JTiI7CisrCWNhc2UgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0g6IHJldHVybiAiYm5fQkQiOworKwl9CisrICAgICAgcmV0dXJuICJibiI7CisrICAgIGNhc2UgTEFOR19CVUxHQVJJQU46IHJldHVybiAiYmdfQkciOworKyAgICBjYXNlIExBTkdfQlVSTUVTRTogcmV0dXJuICJteV9NTSI7CisrICAgIGNhc2UgTEFOR19DQU1CT0RJQU46IHJldHVybiAia21fS0giOworKyAgICBjYXNlIExBTkdfQ0FUQUxBTjogcmV0dXJuICJjYV9FUyI7CisrICAgIGNhc2UgTEFOR19DSEVST0tFRTogcmV0dXJuICJjaHJfVVMiOworKyAgICBjYXNlIExBTkdfQ0hJTkVTRToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9UUkFESVRJT05BTDogcmV0dXJuICJ6aF9UVyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTVBMSUZJRUQ6IHJldHVybiAiemhfQ04iOworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9IT05HS09ORzogcmV0dXJuICJ6aF9ISyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTkdBUE9SRTogcmV0dXJuICJ6aF9TRyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX01BQ0FVOiByZXR1cm4gInpoX01PIjsKKysJfQorKyAgICAgIHJldHVybiAiemgiOworKyAgICBjYXNlIExBTkdfQ1JPQVRJQU46CQkvKiBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKwkJCQkgKiBXaGF0IHVzZWQgdG8gYmUgY2FsbGVkIFNlcmJvLUNyb2F0aWFuCisrCQkJCSAqIHNob3VsZCByZWFsbHkgbm93IGJlIHR3byBzZXBhcmF0ZQorKwkJCQkgKiBsYW5ndWFnZXMgYmVjYXVzZSBvZiBwb2xpdGljYWwgcmVhc29ucy4KKysJCQkJICogKFNheXMgdG1sLCB3aG8ga25vd3Mgbm90aGluZyBhYm91dCBTZXJiaWFuCisrCQkJCSAqIG9yIENyb2F0aWFuLikKKysJCQkJICogKEkgY2FuIGZlZWwgdGhvc2UgZmxhbWVzIGNvbWluZyBhbHJlYWR5LikKKysJCQkJICovCisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAiaHJfSFIiOworKwljYXNlIFNVQkxBTkdfU0VSQklBTl9MQVRJTjogcmV0dXJuICJzcl9DUyI7CisrCWNhc2UgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDOiByZXR1cm4gInNyX0NTQGN5cmlsbGljIjsKKysJfQorKyAgICAgIHJldHVybiAiaHIiOworKyAgICBjYXNlIExBTkdfQ1pFQ0g6IHJldHVybiAiY3NfQ1oiOworKyAgICBjYXNlIExBTkdfREFOSVNIOiByZXR1cm4gImRhX0RLIjsKKysgICAgY2FzZSBMQU5HX0RJVkVISTogcmV0dXJuICJkdl9NViI7CisrICAgIGNhc2UgTEFOR19EVVRDSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRFVUQ0g6IHJldHVybiAibmxfTkwiOworKwljYXNlIFNVQkxBTkdfRFVUQ0hfQkVMR0lBTjogLyogRkxFTUlTSCwgVkxBQU1TICovIHJldHVybiAibmxfQkUiOworKwl9CisrICAgICAgcmV0dXJuICJubCI7CisrICAgIGNhc2UgTEFOR19FRE86IHJldHVybiAiYmluX05HIjsKKysgICAgY2FzZSBMQU5HX0VOR0xJU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJLyogU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gSGVoLiBJIHRob3VnaHQKKysJICogRW5nbGlzaCB3YXMgdGhlIGxhbmd1YWdlIHNwb2tlbiBpbiBFbmdsYW5kLgorKwkgKiBPaCB3ZWxsLgorKwkgKi8KKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfVVM6IHJldHVybiAiZW5fVVMiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9VSzogcmV0dXJuICJlbl9HQiI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0FVUzogcmV0dXJuICJlbl9BVSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0NBTjogcmV0dXJuICJlbl9DQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX05aOiByZXR1cm4gImVuX05aIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfRUlSRTogcmV0dXJuICJlbl9JRSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1NPVVRIX0FGUklDQTogcmV0dXJuICJlbl9aQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0E6IHJldHVybiAiZW5fSk0iOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU46IHJldHVybiAiZW5fR0QiOyAvKiBHcmVuYWRhPyAqLworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9CRUxJWkU6IHJldHVybiAiZW5fQloiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRDogcmV0dXJuICJlbl9UVCI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFOiByZXR1cm4gImVuX1pXIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVM6IHJldHVybiAiZW5fUEgiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUE6IHJldHVybiAiZW5fSUQiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORzogcmV0dXJuICJlbl9ISyI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0lORElBOiByZXR1cm4gImVuX0lOIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUE6IHJldHVybiAiZW5fTVkiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkU6IHJldHVybiAiZW5fU0ciOworKwl9CisrICAgICAgcmV0dXJuICJlbiI7CisrICAgIGNhc2UgTEFOR19FU1RPTklBTjogcmV0dXJuICJldF9FRSI7CisrICAgIGNhc2UgTEFOR19GQUVST0VTRTogcmV0dXJuICJmb19GTyI7CisrICAgIGNhc2UgTEFOR19GQVJTSTogcmV0dXJuICJmYV9JUiI7CisrICAgIGNhc2UgTEFOR19GSU5OSVNIOiByZXR1cm4gImZpX0ZJIjsKKysgICAgY2FzZSBMQU5HX0ZSRU5DSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRlJFTkNIOiByZXR1cm4gImZyX0ZSIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9CRUxHSUFOOiAvKiBXQUxMT09OICovIHJldHVybiAiZnJfQkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NBTkFESUFOOiByZXR1cm4gImZyX0NBIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TV0lTUzogcmV0dXJuICJmcl9DSCI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRzogcmV0dXJuICJmcl9MVSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTU9OQUNPOiByZXR1cm4gImZyX01DIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTOiByZXR1cm4gImZyIjsgLyogQ2FyaWJiZWFuPyAqLworKwljYXNlIFNVQkxBTkdfRlJFTkNIX1JFVU5JT046IHJldHVybiAiZnJfUkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NPTkdPOiByZXR1cm4gImZyX0NHIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMOiByZXR1cm4gImZyX1NOIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTjogcmV0dXJuICJmcl9DTSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkU6IHJldHVybiAiZnJfQ0kiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01BTEk6IHJldHVybiAiZnJfTUwiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01PUk9DQ086IHJldHVybiAiZnJfTUEiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0hBSVRJOiByZXR1cm4gImZyX0hUIjsKKysJfQorKyAgICAgIHJldHVybiAiZnIiOworKyAgICBjYXNlIExBTkdfRlJJU0lBTjogcmV0dXJuICJmeV9OTCI7CisrICAgIGNhc2UgTEFOR19GVUxGVUxERToKKysgICAgICAvKiBTcG9rZW4gaW4gTmlnZXJpYSwgR3VpbmVhLCBTZW5lZ2FsLCBNYWxpLCBOaWdlciwgQ2FtZXJvb24sIEJlbmluLiAqLworKyAgICAgIHJldHVybiAiZmZfTkciOworKyAgICBjYXNlIExBTkdfR0FFTElDOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgMHgwMTogLyogU0NPVFRJU0ggKi8gcmV0dXJuICJnZF9HQiI7CisrCWNhc2UgMHgwMjogLyogSVJJU0ggKi8gcmV0dXJuICJnYV9JRSI7CisrCX0KKysgICAgICByZXR1cm4gIkMiOworKyAgICBjYXNlIExBTkdfR0FMSUNJQU46IHJldHVybiAiZ2xfRVMiOworKyAgICBjYXNlIExBTkdfR0VPUkdJQU46IHJldHVybiAia2FfR0UiOworKyAgICBjYXNlIExBTkdfR0VSTUFOOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19HRVJNQU46IHJldHVybiAiZGVfREUiOworKwljYXNlIFNVQkxBTkdfR0VSTUFOX1NXSVNTOiByZXR1cm4gImRlX0NIIjsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTl9BVVNUUklBTjogcmV0dXJuICJkZV9BVCI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTFVYRU1CT1VSRzogcmV0dXJuICJkZV9MVSI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTjogcmV0dXJuICJkZV9MSSI7CisrCX0KKysgICAgICByZXR1cm4gImRlIjsKKysgICAgY2FzZSBMQU5HX0dSRUVLOiByZXR1cm4gImVsX0dSIjsKKysgICAgY2FzZSBMQU5HX0dVQVJBTkk6IHJldHVybiAiZ25fUFkiOworKyAgICBjYXNlIExBTkdfR1VKQVJBVEk6IHJldHVybiAiZ3VfSU4iOworKyAgICBjYXNlIExBTkdfSEFVU0E6IHJldHVybiAiaGFfTkciOworKyAgICBjYXNlIExBTkdfSEFXQUlJQU46CisrICAgICAgLyogRklYTUU6IERvIHRoZXkgbWVhbiBIYXdhaWlhbiAoImhhd19VUyIsIDEwMDAgc3BlYWtlcnMpCisrCSBvciBIYXdhaWkgQ3Jlb2xlIEVuZ2xpc2ggKCJjcGVfVVMiLCA2MDAwMDAgc3BlYWtlcnMpPyAgKi8KKysgICAgICByZXR1cm4gImNwZV9VUyI7CisrICAgIGNhc2UgTEFOR19IRUJSRVc6IHJldHVybiAiaGVfSUwiOworKyAgICBjYXNlIExBTkdfSElOREk6IHJldHVybiAiaGlfSU4iOworKyAgICBjYXNlIExBTkdfSFVOR0FSSUFOOiByZXR1cm4gImh1X0hVIjsKKysgICAgY2FzZSBMQU5HX0lCSUJJTzogcmV0dXJuICJuaWNfTkciOworKyAgICBjYXNlIExBTkdfSUNFTEFORElDOiByZXR1cm4gImlzX0lTIjsKKysgICAgY2FzZSBMQU5HX0lHQk86IHJldHVybiAiaWdfTkciOworKyAgICBjYXNlIExBTkdfSU5ET05FU0lBTjogcmV0dXJuICJpZF9JRCI7CisrICAgIGNhc2UgTEFOR19JTlVLVElUVVQ6IHJldHVybiAiaXVfQ0EiOworKyAgICBjYXNlIExBTkdfSVRBTElBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfSVRBTElBTjogcmV0dXJuICJpdF9JVCI7CisrCWNhc2UgU1VCTEFOR19JVEFMSUFOX1NXSVNTOiByZXR1cm4gIml0X0NIIjsKKysJfQorKyAgICAgIHJldHVybiAiaXQiOworKyAgICBjYXNlIExBTkdfSkFQQU5FU0U6IHJldHVybiAiamFfSlAiOworKyAgICBjYXNlIExBTkdfS0FOTkFEQTogcmV0dXJuICJrbl9JTiI7CisrICAgIGNhc2UgTEFOR19LQU5VUkk6IHJldHVybiAia3JfTkciOworKyAgICBjYXNlIExBTkdfS0FTSE1JUkk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAia3NfUEsiOworKwljYXNlIFNVQkxBTkdfS0FTSE1JUklfSU5ESUE6IHJldHVybiAia3NfSU4iOworKwl9CisrICAgICAgcmV0dXJuICJrcyI7CisrICAgIGNhc2UgTEFOR19LQVpBSzogcmV0dXJuICJra19LWiI7CisrICAgIGNhc2UgTEFOR19LT05LQU5JOgorKyAgICAgIC8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIHN1Y2ggbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrICAgICAgcmV0dXJuICJrb2tfSU4iOworKyAgICBjYXNlIExBTkdfS09SRUFOOiByZXR1cm4gImtvX0tSIjsKKysgICAgY2FzZSBMQU5HX0tZUkdZWjogcmV0dXJuICJreV9LRyI7CisrICAgIGNhc2UgTEFOR19MQU86IHJldHVybiAibG9fTEEiOworKyAgICBjYXNlIExBTkdfTEFUSU46IHJldHVybiAibGFfVkEiOworKyAgICBjYXNlIExBTkdfTEFUVklBTjogcmV0dXJuICJsdl9MViI7CisrICAgIGNhc2UgTEFOR19MSVRIVUFOSUFOOiByZXR1cm4gImx0X0xUIjsKKysgICAgY2FzZSBMQU5HX01BQ0VET05JQU46IHJldHVybiAibWtfTUsiOworKyAgICBjYXNlIExBTkdfTUFMQVk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBOiByZXR1cm4gIm1zX01ZIjsKKysJY2FzZSBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNOiByZXR1cm4gIm1zX0JOIjsKKysJfQorKyAgICAgIHJldHVybiAibXMiOworKyAgICBjYXNlIExBTkdfTUFMQVlBTEFNOiByZXR1cm4gIm1sX0lOIjsKKysgICAgY2FzZSBMQU5HX01BTFRFU0U6IHJldHVybiAibXRfTVQiOworKyAgICBjYXNlIExBTkdfTUFOSVBVUkk6CisrICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysgICAgICByZXR1cm4gIm1uaV9JTiI7CisrICAgIGNhc2UgTEFOR19NQVJBVEhJOiByZXR1cm4gIm1yX0lOIjsKKysgICAgY2FzZSBMQU5HX01PTkdPTElBTjoKKysgICAgICByZXR1cm4gIm1uIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAibW5fQ04iIG9yICJtbl9NTiIuICAqLworKyAgICBjYXNlIExBTkdfTkVQQUxJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gIm5lX05QIjsKKysJY2FzZSBTVUJMQU5HX05FUEFMSV9JTkRJQTogcmV0dXJuICJuZV9JTiI7CisrCX0KKysgICAgICByZXR1cm4gIm5lIjsKKysgICAgY2FzZSBMQU5HX05PUldFR0lBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTDogcmV0dXJuICJub19OTyI7CisrCWNhc2UgU1VCTEFOR19OT1JXRUdJQU5fTllOT1JTSzogcmV0dXJuICJubl9OTyI7CisrCX0KKysgICAgICByZXR1cm4gIm5vIjsKKysgICAgY2FzZSBMQU5HX09SSVlBOiByZXR1cm4gIm9yX0lOIjsKKysgICAgY2FzZSBMQU5HX09ST01POiByZXR1cm4gIm9tX0VUIjsKKysgICAgY2FzZSBMQU5HX1BBUElBTUVOVFU6IHJldHVybiAicGFwX0FOIjsKKysgICAgY2FzZSBMQU5HX1BBU0hUTzoKKysgICAgICByZXR1cm4gInBzIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAicHNfUEsiIG9yICJwc19BRiIuICAqLworKyAgICBjYXNlIExBTkdfUE9MSVNIOiByZXR1cm4gInBsX1BMIjsKKysgICAgY2FzZSBMQU5HX1BPUlRVR1VFU0U6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0U6IHJldHVybiAicHRfUFQiOworKwkvKiBIbW0uIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4gPT0gU1VCTEFOR19ERUZBVUxULgorKwkgICBTYW1lIHBoZW5vbWVub24gYXMgU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gKi8KKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOOiByZXR1cm4gInB0X0JSIjsKKysJfQorKyAgICAgIHJldHVybiAicHQiOworKyAgICBjYXNlIExBTkdfUFVOSkFCSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9JTkRJQTogcmV0dXJuICJwYV9JTiI7IC8qIEd1cm11a2hpIHNjcmlwdCAqLworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTjogcmV0dXJuICJwYV9QSyI7IC8qIEFyYWJpYyBzY3JpcHQgKi8KKysJfQorKyAgICAgIHJldHVybiAicGEiOworKyAgICBjYXNlIExBTkdfUkhBRVRPX1JPTUFOQ0U6IHJldHVybiAicm1fQ0giOworKyAgICBjYXNlIExBTkdfUk9NQU5JQU46CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUE6IHJldHVybiAicm9fUk8iOworKwljYXNlIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQTogcmV0dXJuICJyb19NRCI7CisrCX0KKysgICAgICByZXR1cm4gInJvIjsKKysgICAgY2FzZSBMQU5HX1JVU1NJQU46CisrICAgICAgcmV0dXJuICJydSI7IC8qIEFtYmlndW91czogY291bGQgYmUgInJ1X1JVIiBvciAicnVfVUEiIG9yICJydV9NRCIuICAqLworKyAgICBjYXNlIExBTkdfU0FBTUk6IC8qIGFjdHVhbGx5IE5vcnRoZXJuIFNhbWkgKi8gcmV0dXJuICJzZV9OTyI7CisrICAgIGNhc2UgTEFOR19TQU5TS1JJVDogcmV0dXJuICJzYV9JTiI7CisrICAgIGNhc2UgTEFOR19TSU5ESEk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NJTkRISV9JTkRJQTogcmV0dXJuICJzZF9JTiI7CisrCWNhc2UgU1VCTEFOR19TSU5ESElfUEFLSVNUQU46IHJldHVybiAic2RfUEsiOworKwl9CisrICAgICAgcmV0dXJuICJzZCI7CisrICAgIGNhc2UgTEFOR19TSU5IQUxFU0U6IHJldHVybiAic2lfTEsiOworKyAgICBjYXNlIExBTkdfU0xPVkFLOiByZXR1cm4gInNrX1NLIjsKKysgICAgY2FzZSBMQU5HX1NMT1ZFTklBTjogcmV0dXJuICJzbF9TSSI7CisrICAgIGNhc2UgTEFOR19TT01BTEk6IHJldHVybiAic29fU08iOworKyAgICBjYXNlIExBTkdfU09SQklBTjoKKysgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKyAgICAgIHJldHVybiAid2VuX0RFIjsKKysgICAgY2FzZSBMQU5HX1NQQU5JU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0g6IHJldHVybiAiZXNfRVMiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9NRVhJQ0FOOiByZXR1cm4gImVzX01YIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTU9ERVJOOgorKwkgIHJldHVybiAiZXNfRVNAbW9kZXJuIjsJLyogbm90IHNlZW4gb24gVW5peCAqLworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9HVUFURU1BTEE6IHJldHVybiAiZXNfR1QiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBOiByZXR1cm4gImVzX0NSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BOiByZXR1cm4gImVzX1BBIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDOiByZXR1cm4gImVzX0RPIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBOiByZXR1cm4gImVzX1ZFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUE6IHJldHVybiAiZXNfQ08iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QRVJVOiByZXR1cm4gImVzX1BFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BOiByZXR1cm4gImVzX0FSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUjogcmV0dXJuICJlc19FQyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0NISUxFOiByZXR1cm4gImVzX0NMIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWTogcmV0dXJuICJlc19VWSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1BBUkFHVUFZOiByZXR1cm4gImVzX1BZIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQTogcmV0dXJuICJlc19CTyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SOiByZXR1cm4gImVzX1NWIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVM6IHJldHVybiAiZXNfSE4iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9OSUNBUkFHVUE6IHJldHVybiAiZXNfTkkiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTzogcmV0dXJuICJlc19QUiI7CisrCX0KKysgICAgICByZXR1cm4gImVzIjsKKysgICAgY2FzZSBMQU5HX1NVVFU6IHJldHVybiAiYm50X1RaIjsgLyogb3IgInN0X0xTIiBvciAibnNvX1pBIj8gKi8KKysgICAgY2FzZSBMQU5HX1NXQUhJTEk6IHJldHVybiAic3dfS0UiOworKyAgICBjYXNlIExBTkdfU1dFRElTSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJzdl9TRSI7CisrCWNhc2UgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQ6IHJldHVybiAic3ZfRkkiOworKwl9CisrICAgICAgcmV0dXJuICJzdiI7CisrICAgIGNhc2UgTEFOR19TWVJJQUM6IHJldHVybiAic3lyX1RSIjsgLyogQW4gZXh0aW5jdCBsYW5ndWFnZS4gICovCisrICAgIGNhc2UgTEFOR19UQUdBTE9HOiByZXR1cm4gInRsX1BIIjsKKysgICAgY2FzZSBMQU5HX1RBSklLOiByZXR1cm4gInRnX1RKIjsKKysgICAgY2FzZSBMQU5HX1RBTUFaSUdIVDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBUYW1hemlnaHQgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrCWNhc2UgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDOiByZXR1cm4gImJlcl9NQUBhcmFiaWMiOworKwljYXNlIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOOiByZXR1cm4gImJlcl9NQUBsYXRpbiI7CisrCX0KKysgICAgICByZXR1cm4gImJlcl9NQSI7CisrICAgIGNhc2UgTEFOR19UQU1JTDoKKysgICAgICByZXR1cm4gInRhIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAidGFfSU4iIG9yICJ0YV9MSyIgb3IgInRhX1NHIi4gICovCisrICAgIGNhc2UgTEFOR19UQVRBUjogcmV0dXJuICJ0dF9SVSI7CisrICAgIGNhc2UgTEFOR19URUxVR1U6IHJldHVybiAidGVfSU4iOworKyAgICBjYXNlIExBTkdfVEhBSTogcmV0dXJuICJ0aF9USCI7CisrICAgIGNhc2UgTEFOR19USUJFVEFOOiByZXR1cm4gImJvX0NOIjsKKysgICAgY2FzZSBMQU5HX1RJR1JJTllBOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQTogcmV0dXJuICJ0aV9FVCI7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBOiByZXR1cm4gInRpX0VSIjsKKysJfQorKyAgICAgIHJldHVybiAidGkiOworKyAgICBjYXNlIExBTkdfVFNPTkdBOiByZXR1cm4gInRzX1pBIjsKKysgICAgY2FzZSBMQU5HX1RTV0FOQTogcmV0dXJuICJ0bl9CVyI7CisrICAgIGNhc2UgTEFOR19UVVJLSVNIOiByZXR1cm4gInRyX1RSIjsKKysgICAgY2FzZSBMQU5HX1RVUktNRU46IHJldHVybiAidGtfVE0iOworKyAgICBjYXNlIExBTkdfVUtSQUlOSUFOOiByZXR1cm4gInVrX1VBIjsKKysgICAgY2FzZSBMQU5HX1VSRFU6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU46IHJldHVybiAidXJfUEsiOworKwljYXNlIFNVQkxBTkdfVVJEVV9JTkRJQTogcmV0dXJuICJ1cl9JTiI7CisrCX0KKysgICAgICByZXR1cm4gInVyIjsKKysgICAgY2FzZSBMQU5HX1VaQkVLOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19VWkJFS19MQVRJTjogcmV0dXJuICJ1el9VWiI7CisrCWNhc2UgU1VCTEFOR19VWkJFS19DWVJJTExJQzogcmV0dXJuICJ1el9VWkBjeXJpbGxpYyI7CisrCX0KKysgICAgICByZXR1cm4gInV6IjsKKysgICAgY2FzZSBMQU5HX1ZFTkRBOiByZXR1cm4gInZlX1pBIjsKKysgICAgY2FzZSBMQU5HX1ZJRVROQU1FU0U6IHJldHVybiAidmlfVk4iOworKyAgICBjYXNlIExBTkdfV0VMU0g6IHJldHVybiAiY3lfR0IiOworKyAgICBjYXNlIExBTkdfWEhPU0E6IHJldHVybiAieGhfWkEiOworKyAgICBjYXNlIExBTkdfWUk6IHJldHVybiAic2l0X0NOIjsKKysgICAgY2FzZSBMQU5HX1lJRERJU0g6IHJldHVybiAieWlfSUwiOworKyAgICBjYXNlIExBTkdfWU9SVUJBOiByZXR1cm4gInlvX05HIjsKKysgICAgY2FzZSBMQU5HX1pVTFU6IHJldHVybiAienVfWkEiOworKyAgICBkZWZhdWx0OiByZXR1cm4gIkMiOworKyAgICB9CisrCisrI2VuZGlmCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvZy5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvZy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTE1NzIzNzY4IC0wNDAwCitAQCAtMCwwICsxLDk4IEBACisrLyogTG9nIGZpbGUgb3V0cHV0LgorKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFByaW50IGFuIEFTQ0lJIHN0cmluZyB3aXRoIHF1b3RlcyBhbmQgZXNjYXBlIHNlcXVlbmNlcyB3aGVyZSBuZWVkZWQuICAqLworK3N0YXRpYyB2b2lkCisrcHJpbnRfZXNjYXBlZCAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIpCisreworKyAgcHV0YyAoJyInLCBzdHJlYW0pOworKyAgZm9yICg7ICpzdHIgIT0gJ1wwJzsgc3RyKyspCisrICAgIGlmICgqc3RyID09ICdcbicpCisrICAgICAgeworKwlmcHV0cyAoIlxcblwiIiwgc3RyZWFtKTsKKysJaWYgKHN0clsxXSA9PSAnXDAnKQorKwkgIHJldHVybjsKKysJZnB1dHMgKCJcblwiIiwgc3RyZWFtKTsKKysgICAgICB9CisrICAgIGVsc2UKKysgICAgICB7CisrCWlmICgqc3RyID09ICciJyB8fCAqc3RyID09ICdcXCcpCisrCSAgcHV0YyAoJ1xcJywgc3RyZWFtKTsKKysJcHV0YyAoKnN0ciwgc3RyZWFtKTsKKysgICAgICB9CisrICBwdXRjICgnIicsIHN0cmVhbSk7CisrfQorKworKy8qIEFkZCB0byB0aGUgbG9nIGZpbGUgYW4gZW50cnkgZGVub3RpbmcgYSBmYWlsZWQgdHJhbnNsYXRpb24uICAqLworK3ZvaWQKKytfbmxfbG9nX3VudHJhbnNsYXRlZCAoY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkgICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgaW50IHBsdXJhbCkKKyt7CisrICBzdGF0aWMgY2hhciAqbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrICBzdGF0aWMgRklMRSAqbGFzdF9sb2dmaWxlID0gTlVMTDsKKysgIEZJTEUgKmxvZ2ZpbGU7CisrCisrICAvKiBDYW4gd2UgcmV1c2UgdGhlIGxhc3Qgb3BlbmVkIGxvZ2ZpbGU/ICAqLworKyAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgPT0gTlVMTCB8fCBzdHJjbXAgKGxvZ2ZpbGVuYW1lLCBsYXN0X2xvZ2ZpbGVuYW1lKSAhPSAwKQorKyAgICB7CisrICAgICAgLyogQ2xvc2UgdGhlIGxhc3QgdXNlZCBsb2dmaWxlLiAgKi8KKysgICAgICBpZiAobGFzdF9sb2dmaWxlbmFtZSAhPSBOVUxMKQorKwl7CisrCSAgaWYgKGxhc3RfbG9nZmlsZSAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBmY2xvc2UgKGxhc3RfbG9nZmlsZSk7CisrCSAgICAgIGxhc3RfbG9nZmlsZSA9IE5VTEw7CisrCSAgICB9CisrCSAgZnJlZSAobGFzdF9sb2dmaWxlbmFtZSk7CisrCSAgbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrCX0KKysgICAgICAvKiBPcGVuIHRoZSBsb2dmaWxlLiAgKi8KKysgICAgICBsYXN0X2xvZ2ZpbGVuYW1lID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKGxvZ2ZpbGVuYW1lKSArIDEpOworKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lID09IE5VTEwpCisrCXJldHVybjsKKysgICAgICBzdHJjcHkgKGxhc3RfbG9nZmlsZW5hbWUsIGxvZ2ZpbGVuYW1lKTsKKysgICAgICBsYXN0X2xvZ2ZpbGUgPSBmb3BlbiAobG9nZmlsZW5hbWUsICJhIik7CisrICAgICAgaWYgKGxhc3RfbG9nZmlsZSA9PSBOVUxMKQorKwlyZXR1cm47CisrICAgIH0KKysgIGxvZ2ZpbGUgPSBsYXN0X2xvZ2ZpbGU7CisrCisrICBmcHJpbnRmIChsb2dmaWxlLCAiZG9tYWluICIpOworKyAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgZG9tYWlubmFtZSk7CisrICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZCAiKTsKKysgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMSk7CisrICBpZiAocGx1cmFsKQorKyAgICB7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnaWRfcGx1cmFsICIpOworKyAgICAgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMik7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnc3RyWzBdIFwiXCJcbiIpOworKyAgICB9CisrICBlbHNlCisrICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0ciBcIlwiXG4iKTsKKysgIHB1dGMgKCdcbicsIGxvZ2ZpbGUpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9NYWtlZmlsZS5pbgkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9NYWtlZmlsZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjUyMTcyMjg1NiAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0jIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgaW4gR05VIE5MUyBVdGlsaXRpZXMuCistIyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBNYWtlZmlsZSBmb3IgZGlyZWN0b3J5IHdpdGggbWVzc2FnZSBjYXRhbG9nIGhhbmRsaW5nIGxpYnJhcnkgb2YgR05VIGdldHRleHQKKysjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICMgYW55IGxhdGVyIHZlcnNpb24uCisgIworICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAjCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyBVU0EuCisgCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKK0BAIC0yMywxMTggKzI0LDM0MSBAQAorIHNyY2RpciA9IEBzcmNkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIHRvcF9idWlsZGRpciA9IC4uCistVlBBVEggPSBAc3JjZGlyQAorKyNWUEFUSCA9ICQoc3JjZGlyKQorIAorIHByZWZpeCA9IEBwcmVmaXhACisgZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACisgdHJhbnNmb3JtID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACistbGliZGlyID0gJChleGVjX3ByZWZpeCkvbGliCistaW5jbHVkZWRpciA9ICQocHJlZml4KS9pbmNsdWRlCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrbGliZGlyID0gQGxpYmRpckAKKytpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACisrZGF0YWRpciA9IEBkYXRhZGlyQAorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCistZ251bG9jYWxlZGlyID0gJChwcmVmaXgpL3NoYXJlL2xvY2FsZQorLWdldHRleHRzcmNkaXIgPSBAZGF0YWRpckAvZ2V0dGV4dC9pbnRsCistYWxpYXNwYXRoID0gJChsb2NhbGVkaXIpOi4KKytnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L2ludGwKKythbGlhc3BhdGggPSAkKGxvY2FsZWRpcikKKyBzdWJkaXIgPSBpbnRsCisgCisgSU5TVEFMTCA9IEBJTlNUQUxMQAorIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisgTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKE1LSU5TVEFMTERJUlMpCisgCistbCA9IEBsQAorK2wgPSBASU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhACisgCisgQVIgPSBhcgorIENDID0gQENDQAorIExJQlRPT0wgPSBATElCVE9PTEAKKyBSQU5MSUIgPSBAUkFOTElCQAorK1lBQ0MgPSBASU5UTEJJU09OQCAteSAtZAorK1lGTEFHUyA9IC0tbmFtZS1wcmVmaXg9X19nZXR0ZXh0CisgCistREVGUyA9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgLURHTlVMT0NBTEVESVI9XCIkKGdudWxvY2FsZWRpcilcIiBcCistLURMT0NBTEVfQUxJQVNfUEFUSD1cIiQoYWxpYXNwYXRoKVwiIEBERUZTQAorK0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBcCisrLURMSUJESVI9XCIkKGxpYmRpcilcIiAtRElOX0xJQklOVEwgXAorKy1ERU5BQkxFX1JFTE9DQVRBQkxFPTEgLURJTl9MSUJSQVJZIC1ESU5TVEFMTERJUj1cIiQobGliZGlyKVwiIC1ETk9fWE1BTExPQyBcCisrLURzZXRfcmVsb2NhdGlvbl9wcmVmaXg9bGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggXAorKy1EcmVsb2NhdGU9bGliaW50bF9yZWxvY2F0ZSBcCisrLURERVBFTkRTX09OX0xJQklDT05WPTEgQERFRlNACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACisrTElCUyA9IEBMSUJTQAorIAorIENPTVBJTEUgPSAkKENDKSAtYyAkKERFRlMpICQoSU5DTFVERVMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpCisgCistSEVBREVSUyA9ICQoQ09NSERSUykgbGliZ2V0dGV4dC5oIGxvYWRpbmZvLmgKKy1DT01IRFJTID0gZ2V0dGV4dC5oIGdldHRleHRQLmggaGFzaC1zdHJpbmcuaAorLVNPVVJDRVMgPSAkKENPTVNSQ1MpIGludGwtY29tcGF0LmMgY2F0LWNvbXBhdC5jCistQ09NU1JDUyA9IGJpbmR0ZXh0ZG9tLmMgZGNnZXR0ZXh0LmMgZGdldHRleHQuYyBnZXR0ZXh0LmMgXAorLWZpbmRkb21haW4uYyBsb2FkbXNnY2F0LmMgbG9jYWxlYWxpYXMuYyB0ZXh0ZG9tYWluLmMgbDEwbmZsaXN0LmMgXAorLWV4cGxvZGVuYW1lLmMKKy1PQkpFQ1RTID0gQElOVExPQkpTQCBiaW5kdGV4dGRvbS4kbG8gZGNnZXR0ZXh0LiRsbyBkZ2V0dGV4dC4kbG8gZ2V0dGV4dC4kbG8gXAorLWZpbmRkb21haW4uJGxvIGxvYWRtc2djYXQuJGxvIGxvY2FsZWFsaWFzLiRsbyB0ZXh0ZG9tYWluLiRsbyBsMTBuZmxpc3QuJGxvIFwKKy1leHBsb2RlbmFtZS4kbG8KKy1DQVRPQkpTID0gY2F0LWNvbXBhdC4kbG8gLi4vcG8vY2F0LWlkLXRibC4kbG8KKy1HRVRUT0JKUyA9IGludGwtY29tcGF0LiRsbworLURJU1RGSUxFUy5jb21tb24gPSBDaGFuZ2VMb2cgTWFrZWZpbGUuaW4gbGludXgtbXNnLnNlZCBwbzJ0Ymwuc2VkLmluIFwKKy14b3Blbi1tc2cuc2VkICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0hFQURFUlMgPSBcCisrICBnbW8uaCBcCisrICBnZXR0ZXh0UC5oIFwKKysgIGhhc2gtc3RyaW5nLmggXAorKyAgbG9hZGluZm8uaCBcCisrICBwbHVyYWwtZXhwLmggXAorKyAgZXZhbC1wbHVyYWwuaCBcCisrICBsb2NhbGNoYXJzZXQuaCBcCisrICByZWxvY2F0YWJsZS5oIFwKKysgIHhzaXplLmggXAorKyAgcHJpbnRmLWFyZ3MuaCBwcmludGYtYXJncy5jIFwKKysgIHByaW50Zi1wYXJzZS5oIHdwcmludGYtcGFyc2UuaCBwcmludGYtcGFyc2UuYyBcCisrICB2YXNucHJpbnRmLmggdmFzbndwcmludGYuaCB2YXNucHJpbnRmLmMgXAorKyAgb3MyY29tcGF0LmggXAorKyAgbGliZ251aW50bC5oLmluCisrU09VUkNFUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLmMgXAorKyAgZGNnZXR0ZXh0LmMgXAorKyAgZGdldHRleHQuYyBcCisrICBnZXR0ZXh0LmMgXAorKyAgZmluZGRvbWFpbi5jIFwKKysgIGxvYWRtc2djYXQuYyBcCisrICBsb2NhbGVhbGlhcy5jIFwKKysgIHRleHRkb21haW4uYyBcCisrICBsMTBuZmxpc3QuYyBcCisrICBleHBsb2RlbmFtZS5jIFwKKysgIGRjaWdldHRleHQuYyBcCisrICBkY25nZXR0ZXh0LmMgXAorKyAgZG5nZXR0ZXh0LmMgXAorKyAgbmdldHRleHQuYyBcCisrICBwbHVyYWwueSBcCisrICBwbHVyYWwtZXhwLmMgXAorKyAgbG9jYWxjaGFyc2V0LmMgXAorKyAgcmVsb2NhdGFibGUuYyBcCisrICBsb2NhbGVuYW1lLmMgXAorKyAgbG9nLmMgXAorKyAgcHJpbnRmLmMgXAorKyAgb3NkZXAuYyBcCisrICBvczJjb21wYXQuYyBcCisrICBpbnRsLWNvbXBhdC5jCisrT0JKRUNUUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLiRsbyBcCisrICBkY2dldHRleHQuJGxvIFwKKysgIGRnZXR0ZXh0LiRsbyBcCisrICBnZXR0ZXh0LiRsbyBcCisrICBmaW5kZG9tYWluLiRsbyBcCisrICBsb2FkbXNnY2F0LiRsbyBcCisrICBsb2NhbGVhbGlhcy4kbG8gXAorKyAgdGV4dGRvbWFpbi4kbG8gXAorKyAgbDEwbmZsaXN0LiRsbyBcCisrICBleHBsb2RlbmFtZS4kbG8gXAorKyAgZGNpZ2V0dGV4dC4kbG8gXAorKyAgZGNuZ2V0dGV4dC4kbG8gXAorKyAgZG5nZXR0ZXh0LiRsbyBcCisrICBuZ2V0dGV4dC4kbG8gXAorKyAgcGx1cmFsLiRsbyBcCisrICBwbHVyYWwtZXhwLiRsbyBcCisrICBsb2NhbGNoYXJzZXQuJGxvIFwKKysgIHJlbG9jYXRhYmxlLiRsbyBcCisrICBsb2NhbGVuYW1lLiRsbyBcCisrICBsb2cuJGxvIFwKKysgIHByaW50Zi4kbG8gXAorKyAgb3NkZXAuJGxvIFwKKysgIGludGwtY29tcGF0LiRsbworK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbiBcCisrY29uZmlnLmNoYXJzZXQgbG9jYWxlLmFsaWFzIHJlZi1hZGQuc2luIHJlZi1kZWwuc2luICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0RJU1RGSUxFUy5nZW5lcmF0ZWQgPSBwbHVyYWwuYworIERJU1RGSUxFUy5ub3JtYWwgPSBWRVJTSU9OCistRElTVEZJTEVTLmdldHRleHQgPSBsaWJpbnRsLmdsaWJjIGludGxoLmluc3QuaW4KKytESVNURklMRVMuZ2V0dGV4dCA9IENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgbGliaW50bC5nbGliYyBcCisrbGliZ251aW50bC5oX3ZtcyBNYWtlZmlsZS52bXMgXAorK2xpYmdudWludGwuaC5tc3ZjLXN0YXRpYyBsaWJnbnVpbnRsLmgubXN2Yy1zaGFyZWQgUkVBRE1FLndvZTMyIE1ha2VmaWxlLm1zdmMKKytESVNURklMRVMub2Jzb2xldGUgPSB4b3Blbi1tc2cuc2VkIGxpbnV4LW1zZy5zZWQgcG8ydGJsLnNlZC5pbiBjYXQtY29tcGF0LmMgXAorK0NPUFlJTkcuTElCLTIgZ2V0dGV4dC5oIGxpYmdldHRleHQuaCBwbHVyYWwtZXZhbC5jIGxpYmdudWludGwuaAorKworK2FsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKythbGwteWVzOiBsaWJpbnRsLiRsYSBsaWJpbnRsLmggY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCByZWYtZGVsLnNlZAorK2FsbC1ubzogYWxsLW5vLUBCVUlMRF9JTkNMVURFRF9MSUJJTlRMQAorK2FsbC1uby15ZXM6IGxpYmdudWludGwuJGxhCisrYWxsLW5vLW5vOgorKworK2xpYmludGwuYSBsaWJnbnVpbnRsLmE6ICQoT0JKRUNUUykKKysJcm0gLWYgJEAKKysJJChBUikgY3J1ICRAICQoT0JKRUNUUykKKysJJChSQU5MSUIpICRACisrCisrbGliaW50bC5sYSBsaWJnbnVpbnRsLmxhOiAkKE9CSkVDVFMpCisrCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgXAorKwkgICQoQ0MpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgXAorKwkgICQoT0JKRUNUUykgQExUTElCSUNPTlZAICQoTElCUykgLWxjIFwKKysJICAtdmVyc2lvbi1pbmZvICQoTFRWX0NVUlJFTlQpOiQoTFRWX1JFVklTSU9OKTokKExUVl9BR0UpIFwKKysJICAtcnBhdGggJChsaWJkaXIpIFwKKysJICAtbm8tdW5kZWZpbmVkCisrCisrIyBMaWJ0b29sJ3MgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJpbnRsLgorKyMgQmVmb3JlIG1ha2luZyBhIGdldHRleHQgcmVsZWFzZSwgdGhlIGdldHRleHQgbWFpbnRhaW5lciBtdXN0IGNoYW5nZSB0aGlzCisrIyBhY2NvcmRpbmcgdG8gdGhlIGxpYnRvb2wgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAiTGlicmFyeSBpbnRlcmZhY2UgdmVyc2lvbnMiLgorKyMgTWFpbnRhaW5lcnMgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCBpbmNsdWRlIHRoZSBpbnRsIGRpcmVjdG9yeSBtdXN0ICpub3QqCisrIyBjaGFuZ2UgdGhlc2UgdmFsdWVzLgorK0xUVl9DVVJSRU5UPTcKKytMVFZfUkVWSVNJT049MAorK0xUVl9BR0U9NAorIAorIC5TVUZGSVhFUzoKKy0uU1VGRklYRVM6IC5jIC5vIC5sbworKy5TVUZGSVhFUzogLmMgLnkgLm8gLmxvIC5zaW4gLnNlZAorKworIC5jLm86CisgCSQoQ09NUElMRSkgJDwKKy0uYy5sbzoKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQ8CisgCistSU5DTFVERVMgPSAtSS4uIC1JLiAtSSQodG9wX3NyY2RpcikvaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisrLnkuYzoKKysJJChZQUNDKSAkKFlGTEFHUykgLS1vdXRwdXQgJEAgJDwKKysJcm0gLWYgJCouaAorIAorLWFsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKytiaW5kdGV4dGRvbS5sbzogJChzcmNkaXIpL2JpbmR0ZXh0ZG9tLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCisrZGNnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2dldHRleHQuYworK2RnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RnZXR0ZXh0LmMKKytnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZ2V0dGV4dC5jCisrZmluZGRvbWFpbi5sbzogJChzcmNkaXIpL2ZpbmRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ZpbmRkb21haW4uYworK2xvYWRtc2djYXQubG86ICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKytsb2NhbGVhbGlhcy5sbzogJChzcmNkaXIpL2xvY2FsZWFsaWFzLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCisrdGV4dGRvbWFpbi5sbzogJChzcmNkaXIpL3RleHRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3RleHRkb21haW4uYworK2wxMG5mbGlzdC5sbzogJChzcmNkaXIpL2wxMG5mbGlzdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbDEwbmZsaXN0LmMKKytleHBsb2RlbmFtZS5sbzogJChzcmNkaXIpL2V4cGxvZGVuYW1lLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCisrZGNpZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjaWdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjaWdldHRleHQuYworK2RjbmdldHRleHQubG86ICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKytkbmdldHRleHQubG86ICQoc3JjZGlyKS9kbmdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RuZ2V0dGV4dC5jCisrbmdldHRleHQubG86ICQoc3JjZGlyKS9uZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbmdldHRleHQuYworK3BsdXJhbC5sbzogJChzcmNkaXIpL3BsdXJhbC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLmMKKytwbHVyYWwtZXhwLmxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrbG9jYWxjaGFyc2V0LmxvOiAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuYworK3JlbG9jYXRhYmxlLmxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3JlbG9jYXRhYmxlLmMKKytsb2NhbGVuYW1lLmxvOiAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrbG9nLmxvOiAkKHNyY2RpcikvbG9nLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2cuYworK3ByaW50Zi5sbzogJChzcmNkaXIpL3ByaW50Zi5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcHJpbnRmLmMKKytvc2RlcC5sbzogJChzcmNkaXIpL29zZGVwLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9vc2RlcC5jCisraW50bC1jb21wYXQubG86ICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvaW50bC1jb21wYXQuYworIAorLWFsbC15ZXM6IGxpYmludGwuJGxhIGludGxoLmluc3QKKy1hbGwtbm86CisrcmVmLWFkZC5zZWQ6ICQoc3JjZGlyKS9yZWYtYWRkLnNpbgorKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWFkZC5zaW4gPiB0LXJlZi1hZGQuc2VkCisrCW12IHQtcmVmLWFkZC5zZWQgcmVmLWFkZC5zZWQKKytyZWYtZGVsLnNlZDogJChzcmNkaXIpL3JlZi1kZWwuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvQFBBQ0tBR0VAL2cnICQoc3JjZGlyKS9yZWYtZGVsLnNpbiA+IHQtcmVmLWRlbC5zZWQKKysJbXYgdC1yZWYtZGVsLnNlZCByZWYtZGVsLnNlZAorIAorLWxpYmludGwuYTogJChPQkpFQ1RTKQorLQlybSAtZiAkQAorLQkkKEFSKSBjcnUgJEAgJChPQkpFQ1RTKQorLQkkKFJBTkxJQikgJEAKKytJTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSS4uCisgCistbGliaW50bC5sYTogJChPQkpFQ1RTKQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChPQkpFQ1RTKSBcCistCQkgICAtdmVyc2lvbi1pbmZvIDE6MCAtcnBhdGggJChsaWJkaXIpCisrbGliZ251aW50bC5oOiAkKHNyY2RpcikvbGliZ251aW50bC5oLmluCisrCXNlZCAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfQVNQUklOVEYnJ0AsQEhBVkVfQVNQUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCisrCSAgPCAkKHNyY2RpcikvbGliZ251aW50bC5oLmluID4gbGliZ251aW50bC5oCisgCistLi4vcG8vY2F0LWlkLXRibC4kbG86IC4uL3BvL2NhdC1pZC10YmwuYyAkKHRvcF9zcmNkaXIpL3BvLyQoUEFDS0FHRSkucG90CistCWNkIC4uL3BvICYmICQoTUFLRSkgY2F0LWlkLXRibC4kbG8KKytsaWJpbnRsLmg6IGxpYmdudWludGwuaAorKwljcCBsaWJnbnVpbnRsLmggbGliaW50bC5oCisgCistY2hlY2s6IGFsbAorK2NoYXJzZXQuYWxpYXM6ICQoc3JjZGlyKS9jb25maWcuY2hhcnNldAorKwkkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJ0Bob3N0QCcgPiB0LSRACisrCW12IHQtJEAgJEAKKyAKKy0jIFRoaXMgaW5zdGFsbGF0aW9uIGdvYWwgaXMgb25seSB1c2VkIGluIEdOVSBnZXR0ZXh0LiAgUGFja2FnZXMgd2hpY2gKKy0jIG9ubHkgdXNlIHRoZSBsaWJyYXJ5IHNob3VsZCB1c2UgaW5zdGFsbCBpbnN0ZWFkLgorK2NoZWNrOiBhbGwKKyAKKyAjIFdlIG11c3Qgbm90IGluc3RhbGwgdGhlIGxpYmludGwuaC9saWJpbnRsLmEgZmlsZXMgaWYgd2UgYXJlIG9uIGEKKy0jIHN5c3RlbSB3aGljaCBoYXMgdGhlIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKy0jIHNlcGFyYXRlIGxpYnJhcnkgb3IgdXNlIHRoZSBjYXRnZXRzIGludGVyZmFjZS4gIEEgc3BlY2lhbCBjYXNlIGlzCistIyB3aGVyZSBjb25maWd1cmUgZm91bmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyMgc3lzdGVtIHdoaWNoIGhhcyB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKysjIHNlcGFyYXRlIGxpYnJhcnkuCisgIyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uZSB3aGljaCBjb21lcyB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUKKyAjIHBhY2thZ2UsIHlvdSBoYXZlIHRvIHVzZSBgY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0Jy4KKyBpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCisgaW5zdGFsbC1leGVjOiBhbGwKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCIgXAorLQkgICAmJiB0ZXN0ICdASU5UTE9CSlNAJyA9ICckKEdFVFRPQkpTKSc7IHRoZW4gXAorLQkgIGlmIHRlc3QgLXIgJChNS0lOU1RBTExESVJTKTsgdGhlbiBcCistCSAgICAkKE1LSU5TVEFMTERJUlMpICQobGliZGlyKSAkKGluY2x1ZGVkaXIpOyBcCistCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChsaWJkaXIpICQoaW5jbHVkZWRpcik7IFwKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliaW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLiRsYTsgXAorKwkgIGlmIHRlc3QgIkBSRUxPQ0FUQUJMRUAiID0geWVzOyB0aGVuIFwKKysJICAgIGRlcGVuZGVuY2llcz1gc2VkIC1uIC1lICdzLF5kZXBlbmRlbmN5X2xpYnM9XCguKlwpLFwxLHAnIDwgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhIHwgc2VkIC1lICJzLF4nLCwiIC1lICJzLCdcJCQsLCJgOyBcCisrCSAgICBpZiB0ZXN0IC1uICIkJGRlcGVuZGVuY2llcyI7IHRoZW4gXAorKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGE7IFwKKysJICAgIGZpOyBcCisgCSAgZmk7IFwKKy0JICAkKElOU1RBTExfREFUQSkgaW50bGguaW5zdCAkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmEgJChsaWJkaXIpL2xpYmludGwuYTsgXAorIAllbHNlIFwKKyAJICA6IDsgXAorIAlmaQorLWluc3RhbGwtZGF0YTogYWxsCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFwKKy0JICBpZiB0ZXN0IC1yICQoTUtJTlNUQUxMRElSUyk7IHRoZW4gXAorLQkgICAgJChNS0lOU1RBTExESVJTKSAkKGdldHRleHRzcmNkaXIpOyBcCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliZ251aW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorKwkgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuc28gJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKysJICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwkgIHRlbXA9JChERVNURElSKSQobGliZGlyKS90LWNoYXJzZXQuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyB0aGVuIFwKKysJICAgIG9yaWc9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisgCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChnZXR0ZXh0c3JjZGlyKTsgXAorKwkgICAgaWYgdGVzdCBAR0xJQkMyMUAgPSBubzsgdGhlbiBcCisrCSAgICAgIG9yaWc9Y2hhcnNldC5hbGlhczsgXAorKwkgICAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgICAgIHJtIC1mICQkdGVtcDsgXAorKwkgICAgZmk7IFwKKyAJICBmaTsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBWRVJTSU9OICQoZ2V0dGV4dHNyY2RpcikvVkVSU0lPTjsgXAorLQkgIGRpc3RzPSIkKERJU1RGSUxFUy5jb21tb24pIjsgXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorKwkgIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorKwkgICAgJiYgb3JpZz0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhcyBcCisrCSAgICB8fCBvcmlnPSQoc3JjZGlyKS9sb2NhbGUuYWxpYXM7IFwKKysJICB0ZW1wPSQoREVTVERJUikkKGxvY2FsZWRpcikvdC1sb2NhbGUuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgcm0gLWYgJCR0ZW1wOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisraW5zdGFsbC1kYXRhOiBhbGwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKysJICAkKElOU1RBTExfREFUQSkgVkVSU0lPTiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9WRVJTSU9OOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpIENoYW5nZUxvZy5pbnN0ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL0NoYW5nZUxvZzsgXAorKwkgIGRpc3RzPSJDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikiOyBcCisgCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisgCSAgZG9uZTsgXAorKwkgIGNobW9kIGEreCAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9jb25maWcuY2hhcnNldDsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5nZW5lcmF0ZWQpIjsgXAorKwkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKysJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIGRpcj0uOyBlbHNlIGRpcj0kKHNyY2Rpcik7IGZpOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRkaXIvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5vYnNvbGV0ZSkiOyBcCisrCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKworK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKysKKytpbnN0YWxsZGlyczoKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgdGVzdCBAR0xJQkMyMUAgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsb2NhbGVkaXIpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisgCWVsc2UgXAorIAkgIDogOyBcCisgCWZpCitAQCAtMTQzLDIyICszNjcsNzYgQEAKKyBpbnN0YWxsY2hlY2s6CisgCisgdW5pbnN0YWxsOgorLQlkaXN0cz0iJChESVNURklMRVMuY29tbW9uKSI7IFwKKy0JZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgIHJtIC1mICQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCWRvbmUKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHJtIC1mICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCisrCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCisrCSAgICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorKwkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKysJICAgICAgcm0gLWYgJCRkZXN0OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICAgIGZpOyBcCisrCSAgICBybSAtZiAkJHRlbXA7IFwKKysJICBmaTsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IHRoZW4gXAorKwkgICAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWRlbC5zZWQgJCRkZXN0ID4gJCR0ZW1wOyBcCisrCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorKwkgICAgICBybSAtZiAkJGRlc3Q7IFwKKysJICAgIGVsc2UgXAorKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgZmk7IFwKKysJICAgIHJtIC1mICQkdGVtcDsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICBmb3IgZmlsZSBpbiBWRVJTSU9OIENoYW5nZUxvZyBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKTsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorIAorLWluZm8gZHZpOgorK2luZm8gZHZpIHBzIHBkZiBodG1sOgorIAorLSQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdldHRleHQuaAorLWJpbmR0ZXh0ZG9tLiRsbyBmaW5kZG9tYWluLiRsbyBsb2FkbXNnY2F0LiRsbzogZ2V0dGV4dFAuaCBnZXR0ZXh0LmggbG9hZGluZm8uaAorLWRjZ2V0dGV4dC4kbG86IGdldHRleHRQLmggZ2V0dGV4dC5oIGhhc2gtc3RyaW5nLmggbG9hZGluZm8uaAorKyQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdudWludGwuaAorK2JpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRjaWdldHRleHQuJGxvIGRjbmdldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBkbmdldHRleHQuJGxvIGZpbmRkb21haW4uJGxvIGdldHRleHQuJGxvIGludGwtY29tcGF0LiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbmdldHRleHQuJGxvIHRleHRkb21haW4uJGxvOiAkKHNyY2RpcikvZ2V0dGV4dFAuaCAkKHNyY2RpcikvZ21vLmggJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbzogJChzcmNkaXIpL2hhc2gtc3RyaW5nLmgKKytleHBsb2RlbmFtZS4kbG8gbDEwbmZsaXN0LiRsbzogJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbyBwbHVyYWwuJGxvIHBsdXJhbC1leHAuJGxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5oCisrZGNpZ2V0dGV4dC4kbG86ICQoc3JjZGlyKS9ldmFsLXBsdXJhbC5oCisrbG9jYWxjaGFyc2V0LiRsbzogJChzcmNkaXIpL2xvY2FsY2hhcnNldC5oCisrbG9jYWxlYWxpYXMuJGxvIGxvY2FsY2hhcnNldC4kbG8gcmVsb2NhdGFibGUuJGxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuaAorK3ByaW50Zi4kbG86ICQoc3JjZGlyKS9wcmludGYtYXJncy5oICQoc3JjZGlyKS9wcmludGYtYXJncy5jICQoc3JjZGlyKS9wcmludGYtcGFyc2UuaCAkKHNyY2Rpcikvd3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS94c2l6ZS5oICQoc3JjZGlyKS9wcmludGYtcGFyc2UuYyAkKHNyY2RpcikvdmFzbnByaW50Zi5oICQoc3JjZGlyKS92YXNud3ByaW50Zi5oICQoc3JjZGlyKS92YXNucHJpbnRmLmMKKyAKKyB0YWdzOiBUQUdTCisgCisgVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisgCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBldGFncyAtbyAkJGhlcmUvVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKyAKKytjdGFnczogQ1RBR1MKKysKKytDVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBjdGFncyAtbyAkJGhlcmUvQ1RBR1MgJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCisgaWQ6IElECisgCisgSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorQEAgLTE2NiwxMiArNDQ0LDE5IEBACisgCisgCisgbW9zdGx5Y2xlYW46CistCXJtIC1mICouYSAqLm8gKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiAqLmEgKi5sYSAqLm8gKi5vYmogKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiBsaWJnbnVpbnRsLmggbGliaW50bC5oIGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKysJcm0gLWYgLXIgLmxpYnMgX2xpYnMKKyAKKyBjbGVhbjogbW9zdGx5Y2xlYW4KKyAKKyBkaXN0Y2xlYW46IGNsZWFuCistCXJtIC1mIE1ha2VmaWxlIElEIFRBR1MgcG8ybXNnLnNlZCBwbzJ0Ymwuc2VkIGxpYmludGwuaAorKwlybSAtZiBNYWtlZmlsZSBJRCBUQUdTCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgIHJtIC1mIENoYW5nZUxvZy5pbnN0ICQoRElTVEZJTEVTLm5vcm1hbCk7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKK0BAIC0xODEsMzMgKzQ2NiwyNyBAQAorICMgR05VIGdldHRleHQgbmVlZHMgbm90IGNvbnRhaW4gdGhlIGZpbGUgYFZFUlNJT04nIGJ1dCBjb250YWlucyBzb21lCisgIyBvdGhlciBmaWxlcyB3aGljaCBzaG91bGQgbm90IGJlIGRpc3RyaWJ1dGVkIGluIG90aGVyIHBhY2thZ2VzLgorIGRpc3RkaXIgPSAuLi8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCistZGlzdCBkaXN0ZGlyOiBNYWtlZmlsZSAkKERJU1RGSUxFUykKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSBnZXR0ZXh0OyB0aGVuIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKytkaXN0IGRpc3RkaXI6IE1ha2VmaWxlCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICA6IDsgXAorIAllbHNlIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5ub3JtYWwpIjsgXAorLQlmaTsgXAorLQlmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pICQkYWRkaXRpb25hbDsgZG8gXAorLQkgIGxuICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSAyPiAvZGV2L251bGwgXAorLQkgICAgfHwgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpOyBcCistCWRvbmUKKy0KKy1kaXN0LWxpYmM6CistCXRhciB6Y3ZmIGludGwtZ2xpYmMudGFyLmd6ICQoQ09NU1JDUykgJChDT01IRFJTKSBsaWJpbnRsLmguZ2xpYmMKKy0KKy1NYWtlZmlsZTogTWFrZWZpbGUuaW4gLi4vY29uZmlnLnN0YXR1cworLQljZCAuLiBcCistCSAgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisrCSAgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIjsgdGhlbiBcCisrCSAgICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKysJICBlbHNlIFwKKysJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCisrCSAgZmk7IFwKKysJICAkKE1BS0UpICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKSAkJGFkZGl0aW9uYWw7IFwKKysJICBmb3IgZmlsZSBpbiBDaGFuZ2VMb2cgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgZG8gXAorKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKysJICAgIGNwIC1wICQkZGlyLyQkZmlsZSAkKGRpc3RkaXIpOyBcCisrCSAgZG9uZTsgXAorKwlmaQorIAorLSMgVGhlIGRlcGVuZGVuY3kgZm9yIGludGxoLmluc3QgaXMgZGlmZmVyZW50IGluIGdldHRleHQgYW5kIGFsbCBvdGhlcgorLSMgcGFja2FnZXMuICBCZWNhdXNlIHdlIGNhbm5vdCB5b3UgR05VIG1ha2UgZmVhdHVyZXMgd2UgaGF2ZSB0byBzb2x2ZQorLSMgdGhlIHByb2JsZW0gd2hpbGUgcmV3cml0aW5nIE1ha2VmaWxlLmluLgorLUBHVF9ZRVNAaW50bGguaW5zdDogaW50bGguaW5zdC5pbiAuLi9jb25maWcuc3RhdHVzCistQEdUX1lFU0AJY2QgLi4gXAorLUBHVF9ZRVNACSYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9IFwKKy1AR1RfWUVTQAkgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworLUBHVF9OT0AuUEhPTlk6IGludGxoLmluc3QKKy1AR1RfTk9AaW50bGguaW5zdDoKKytNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisrCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKysjIFRoaXMgd291bGQgYmUgbW9yZSBlZmZpY2llbnQsIGJ1dCBkb2Vzbid0IHdvcmsgYW55IG1vcmUgd2l0aCBhdXRvY29uZi0yLjU3LAorKyMgd2hlbiBBQ19DT05GSUdfRklMRVMoW2ludGwvTWFrZWZpbGU6c29tZWRpci9NYWtlZmlsZS5pbl0pIGlzIHVzZWQuCisrIwljZCAkKHRvcF9idWlsZGRpcikgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisgCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9uZ2V0dGV4dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL25nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC41MzM3MjEwMzIgLTA0MDAKK0BAIC0wLDAgKzEsNjUgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIF9fbmVlZF9OVUxMCisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZWxzZQorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIE5HRVRURVhUIF9fbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyNlbHNlCisrIyBkZWZpbmUgTkdFVFRFWFQgbGliaW50bF9uZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorKyAgIHRleHQpLiAgKi8KKytjaGFyICoKKytOR0VUVEVYVCAoY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgcmV0dXJuIERDTkdFVFRFWFQgKE5VTEwsIG1zZ2lkMSwgbXNnaWQyLCBuLCBMQ19NRVNTQUdFUyk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fbmdldHRleHQsIG5nZXR0ZXh0KTsKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUzOTcyMDEyMCAtMDQwMAorQEAgLTAsMCArMSw5OCBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNkZWZpbmUgT1MyX0FXQVJFCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrCisrLyogQSB2ZXJzaW9uIG9mIGdldGVudigpIHRoYXQgd29ya3MgZnJvbSBETExzICovCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRG9zU2NhbkVudiAoY29uc3QgdW5zaWduZWQgY2hhciAqcHN6TmFtZSwgdW5zaWduZWQgY2hhciAqKnBwc3pWYWx1ZSk7CisrCisrY2hhciAqCisrX25sX2dldGVudiAoY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICB1bnNpZ25lZCBjaGFyICp2YWx1ZTsKKysgIGlmIChEb3NTY2FuRW52IChuYW1lLCAmdmFsdWUpKQorKyAgICByZXR1cm4gTlVMTDsKKysgIGVsc2UKKysgICAgcmV0dXJuIHZhbHVlOworK30KKysKKysvKiBBIGZpeGVkIHNpemUgYnVmZmVyLiAgKi8KKytjaGFyIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lW01BWFBBVEhMRU4rMV07CisrCisrY2hhciAqX25sb3MyX2xpYmRpciA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWRpciA9IE5VTEw7CisrCisrc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZAorK25sb3MyX2luaXRpYWxpemUgKCkKKyt7CisrICBjaGFyICpyb290ID0gZ2V0ZW52ICgiVU5JWFJPT1QiKTsKKysgIGNoYXIgKmdudWxvY2FsZWRpciA9IGdldGVudiAoIkdOVUxPQ0FMRURJUiIpOworKworKyAgX25sb3MyX2xpYmRpciA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xpYmRpcikKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbGliZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTElCRElSKSArIDEpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9saWJkaXIsIHJvb3QsIHNsKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbGliZGlyICsgc2wsIExJQkRJUiwgc3RybGVuIChMSUJESVIpICsgMSk7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgX25sb3MyX2xpYmRpciA9IExJQkRJUjsKKysgICAgfQorKworKyAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xvY2FsZWFsaWFzcGF0aCkKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCwgcm9vdCwgc2wpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggKyBzbCwgTE9DQUxFX0FMSUFTX1BBVEgsIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICAgIH0KKysKKysgIF9ubG9zMl9sb2NhbGVkaXIgPSBnbnVsb2NhbGVkaXI7CisrICBpZiAoIV9ubG9zMl9sb2NhbGVkaXIpCisrICAgIHsKKysgICAgICBpZiAocm9vdCkKKysgICAgICAgIHsKKysgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKysgICAgICAgICAgX25sb3MyX2xvY2FsZWRpciA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExPQ0FMRURJUikgKyAxKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlZGlyLCByb290LCBzbCk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciArIHNsLCBMT0NBTEVESVIsIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIF9ubG9zMl9sb2NhbGVkaXIgPSBMT0NBTEVESVI7CisrICAgIH0KKysKKysgIGlmIChzdHJsZW4gKF9ubG9zMl9sb2NhbGVkaXIpIDw9IE1BWFBBVEhMRU4pCisrICAgIHN0cmNweSAobGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUsIF9ubG9zMl9sb2NhbGVkaXIpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjU0NDcxOTM2MCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBkZWZpbmVzLgorKyAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBmcm9tIGNvbmZpZy5oCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdoZW4gaW5jbHVkZWQgZnJvbSBvczJjb21wYXQuaCB3ZSBuZWVkIGFsbCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbnMgKi8KKysjaWZuZGVmIE9TMl9BV0FSRQorKworKyN1bmRlZiBMSUJESVIKKysjZGVmaW5lIExJQkRJUgkJCV9ubG9zMl9saWJkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xpYmRpcjsKKysKKysjdW5kZWYgTE9DQUxFRElSCisrI2RlZmluZSBMT0NBTEVESVIJCV9ubG9zMl9sb2NhbGVkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWRpcjsKKysKKysjdW5kZWYgTE9DQUxFX0FMSUFTX1BBVEgKKysjZGVmaW5lIExPQ0FMRV9BTElBU19QQVRICV9ubG9zMl9sb2NhbGVhbGlhc3BhdGgKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aDsKKysKKysjZW5kaWYKKysKKysjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisrI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorKyNkZWZpbmUgc3RyY2FzZWNtcCBzdHJpY21wCisrI2RlZmluZSBzdHJuY2FzZWNtcCBzdHJuaWNtcAorKworKy8qIFdlIGhhdmUgb3VyIG93biBnZXRlbnYoKSB3aGljaCB3b3JrcyBldmVuIGlmIGxpYnJhcnkgaXMgY29tcGlsZWQgYXMgRExMICovCisrI2RlZmluZSBnZXRlbnYgX25sX2dldGVudgorKworKy8qIE9sZGVyIHZlcnNpb25zIG9mIGdldHRleHQgdXNlZCAtMSBhcyB0aGUgdmFsdWUgb2YgTENfTUVTU0FHRVMgKi8KKysjZGVmaW5lIExDX01FU1NBR0VTX0NPTVBBVCAoLTEpCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvb3NkZXAuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vc2RlcC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTUwNzE4NDQ4IC0wNDAwCitAQCAtMCwwICsxLDI0IEBACisrLyogT1MgZGVwZW5kZW50IHBhcnRzIG9mIGxpYmludGwuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZiBkZWZpbmVkIF9fRU1YX18KKysjIGluY2x1ZGUgIm9zMmNvbXBhdC5jIgorKyNlbHNlCisrLyogQXZvaWQgQUlYIGNvbXBpbGVyIHdhcm5pbmcuICAqLworK3R5cGVkZWYgaW50IGR1bW15OworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BsdXJhbC5jCTIwMDQtMDktMTIgMTQ6NDA6MzYuNTcxNDExMjU2IC0wNDAwCitAQCAtMCwwICsxLDE0OTAgQEAKKysvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHBsdXJhbC55CisrICAgYnkgR05VIGJpc29uIDEuMzUuICAqLworKworKyNkZWZpbmUgWVlCSVNPTiAxICAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworKworKyNkZWZpbmUgeXlwYXJzZSBfX2dldHRleHRwYXJzZQorKyNkZWZpbmUgeXlsZXggX19nZXR0ZXh0bGV4CisrI2RlZmluZSB5eWVycm9yIF9fZ2V0dGV4dGVycm9yCisrI2RlZmluZSB5eWx2YWwgX19nZXR0ZXh0bHZhbAorKyNkZWZpbmUgeXljaGFyIF9fZ2V0dGV4dGNoYXIKKysjZGVmaW5lIHl5ZGVidWcgX19nZXR0ZXh0ZGVidWcKKysjZGVmaW5lIHl5bmVycnMgX19nZXR0ZXh0bmVycnMKKysjIGRlZmluZQlFUVVPUDIJMjU3CisrIyBkZWZpbmUJQ01QT1AyCTI1OAorKyMgZGVmaW5lCUFERE9QMgkyNTkKKysjIGRlZmluZQlNVUxPUDIJMjYwCisrIyBkZWZpbmUJTlVNQkVSCTI2MQorKworKyNsaW5lIDEgInBsdXJhbC55IgorKworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKworKyNsaW5lIDQ5ICJwbHVyYWwueSIKKysjaWZuZGVmIFlZU1RZUEUKKyt0eXBlZGVmIHVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30geXlzdHlwZTsKKysjIGRlZmluZSBZWVNUWVBFIHl5c3R5cGUKKysjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorKyNlbmRpZgorKyNsaW5lIDU1ICJwbHVyYWwueSIKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKTsKKytzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzdHIpOworKworKy8qIEFsbG9jYXRpb24gb2YgZXhwcmVzc2lvbnMuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cCAoaW50IG5hcmdzLCBlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqIGNvbnN0ICphcmdzKQorK3sKKysgIGludCBpOworKyAgc3RydWN0IGV4cHJlc3Npb24gKm5ld3A7CisrCisrICAvKiBJZiBhbnkgb2YgdGhlIGFyZ3VtZW50IGNvdWxkIG5vdCBiZSBtYWxsb2MnZWQsIGp1c3QgcmV0dXJuIE5VTEwuICAqLworKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgaWYgKGFyZ3NbaV0gPT0gTlVMTCkKKysgICAgICBnb3RvIGZhaWw7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBleHByZXNzaW9uLiAgKi8KKysgIG5ld3AgPSAoc3RydWN0IGV4cHJlc3Npb24gKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7CisrICBpZiAobmV3cCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgbmV3cC0+bmFyZ3MgPSBuYXJnczsKKysgICAgICBuZXdwLT5vcGVyYXRpb24gPSBvcDsKKysgICAgICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKwluZXdwLT52YWwuYXJnc1tpXSA9IGFyZ3NbaV07CisrICAgICAgcmV0dXJuIG5ld3A7CisrICAgIH0KKysKKysgZmFpbDoKKysgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIEZSRUVfRVhQUkVTU0lPTiAoYXJnc1tpXSk7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8wIChlbnVtIG9wZXJhdG9yIG9wKQorK3sKKysgIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMSAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworKworKyAgYXJnc1swXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzIgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpsZWZ0LCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMl07CisrCisrICBhcmdzWzBdID0gbGVmdDsKKysgIGFyZ3NbMV0gPSByaWdodDsKKysgIHJldHVybiBuZXdfZXhwICgyLCBvcCwgYXJncyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMyAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCisrCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKysKKysgIGFyZ3NbMF0gPSBiZXhwOworKyAgYXJnc1sxXSA9IHRicmFuY2g7CisrICBhcmdzWzJdID0gZmJyYW5jaDsKKysgIHJldHVybiBuZXdfZXhwICgzLCBvcCwgYXJncyk7CisrfQorKworKyNpZm5kZWYgWVlERUJVRworKyMgZGVmaW5lIFlZREVCVUcgMAorKyNlbmRpZgorKworKworKworKyNkZWZpbmUJWVlGSU5BTAkJMjcKKysjZGVmaW5lCVlZRkxBRwkJLTMyNzY4CisrI2RlZmluZQlZWU5UQkFTRQkxNgorKworKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gKi8KKysjZGVmaW5lIFlZVFJBTlNMQVRFKHgpICgodW5zaWduZWQpKHgpIDw9IDI2MSA/IHl5dHJhbnNsYXRlW3hdIDogMTgpCisrCisrLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAqLworK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPQorK3sKKysgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA1LCAgICAgMiwKKysgICAgICAxNCwgICAgMTUsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDEyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAxMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgMTEKKyt9OworKworKyNpZiBZWURFQlVHCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cHJoc1tdID0KKyt7CisrICAgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDgsICAgIDEyLCAgICAxNiwgICAgMjAsICAgIDI0LCAgICAyOCwgICAgMzIsCisrICAgICAgMzUsICAgIDM3LCAgICAzOQorK307Cisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmhzW10gPQorK3sKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgMywgICAgMTcsICAgIDEyLCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNCwKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNSwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDYsICAgIDE3LCAgICAgMCwKKysgICAgICAxNywgICAgIDcsICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA4LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgOSwKKysgICAgICAxNywgICAgIDAsICAgIDEwLCAgICAxNywgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTEsICAgICAwLCAgICAxNCwKKysgICAgICAxNywgICAgMTUsICAgICAwCisrfTsKKysKKysjZW5kaWYKKysKKysjaWYgWVlERUJVRworKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmxpbmVbXSA9CisreworKyAgICAgICAwLCAgIDE1MCwgICAxNTgsICAgMTYyLCAgIDE2NiwgICAxNzAsICAgMTc0LCAgIDE3OCwgICAxODIsICAgMTg2LAorKyAgICAgMTkwLCAgIDE5NCwgICAxOTkKKyt9OworKyNlbmRpZgorKworKworKyNpZiAoWVlERUJVRykgfHwgZGVmaW5lZCBZWUVSUk9SX1ZFUkJPU0UKKysKKysvKiBZWVROQU1FW1RPS0VOX05VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHRva2VuIFRPS0VOX05VTS4gKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KKyt7CisrICAiJCIsICJlcnJvciIsICIkdW5kZWZpbmVkLiIsICInPyciLCAiJ3wnIiwgIicmJyIsICJFUVVPUDIiLCAiQ01QT1AyIiwgCisrICAiQURET1AyIiwgIk1VTE9QMiIsICInISciLCAiTlVNQkVSIiwgIic6JyIsICInbiciLCAiJygnIiwgIicpJyIsIAorKyAgInN0YXJ0IiwgImV4cCIsIDAKKyt9OworKyNlbmRpZgorKworKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9CisreworKyAgICAgICAwLCAgICAxNiwgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LAorKyAgICAgIDE3LCAgICAxNywgICAgMTcKKyt9OworKworKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAqLworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXIyW10gPQorK3sKKysgICAgICAgMCwgICAgIDEsICAgICA1LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKKysgICAgICAgMSwgICAgIDEsICAgICAzCisrfTsKKysKKysvKiBZWURFRkFDVFtTXSAtLSBkZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUgUyB3aGVuIFlZVEFCTEUKKysgICBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuCisrICAgZXJyb3IuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmYWN0W10gPQorK3sKKysgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMCwgICAgIDAsICAgICAxLCAgICAgOSwgICAgIDAsICAgICAwLCAgICAgMCwKKysgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDAKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmdvdG9bXSA9CisreworKyAgICAgIDI1LCAgICAgNQorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cGFjdFtdID0KKyt7CisrICAgICAgLTksICAgIC05LC0zMjc2OCwtMzI3NjgsICAgIC05LCAgICAzNCwtMzI3NjgsICAgIDExLCAgICAtOSwgICAgLTksCisrICAgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksICAgIC05LC0zMjc2OCwgICAgMjQsICAgIDM5LCAgICA0MywgICAgMTYsCisrICAgICAgMjYsICAgIC0zLC0zMjc2OCwgICAgLTksICAgIDM0LCAgICAyMSwgICAgNTMsLTMyNzY4CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0KKyt7CisrICAtMzI3NjgsICAgIC0xCisrfTsKKysKKysKKysjZGVmaW5lCVlZTEFTVAkJNTMKKysKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXl0YWJsZVtdID0KKyt7CisrICAgICAgIDYsICAgICAxLCAgICAgMiwgICAgIDcsICAgICAzLCAgICAgNCwgICAgMTQsICAgIDE2LCAgICAxNywgICAgMTgsCisrICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisrICAgICAgMTQsICAgIDI2LCAgICAyNCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEzLCAgICAxNCwgICAgMjMsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTEsCisrICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMjcKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPQorK3sKKysgICAgICAgMSwgICAgMTAsICAgIDExLCAgICAgNCwgICAgMTMsICAgIDE0LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMCwKKysgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgIDAsICAgIDIzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxNSwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMiwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNiwKKysgICAgICAgNywgICAgIDgsICAgICA5LCAgICAgMAorK307CisrI2RlZmluZSBZWVBVUkUgMQorKworKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxlcnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisrI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrLyogU2tlbGV0b24gb3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisrICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKysgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworKworKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyIHdoZW4KKysgICB0aGUgJXNlbWFudGljX3BhcnNlciBkZWNsYXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgorKyAgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorKyAgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisrCisrLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKysgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKysgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKysgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworKworKyNpZiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkKKysKKysvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisrCisrIyBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKysjIGVsc2UKKysjICBpZm5kZWYgWVlTVEFDS19VU0VfQUxMT0NBCisrIyAgIGlmIGRlZmluZWQgKGFsbG9jYSkgfHwgZGVmaW5lZCAoX0FMTE9DQV9IKQorKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmZGVmIF9fR05VQ19fCisrIyAgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKysgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICovCisrIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisrIyAgZW5kaWYKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBtYWxsb2MKKysjICBkZWZpbmUgWVlTVEFDS19GUkVFIGZyZWUKKysjIGVuZGlmCisrI2VuZGlmIC8qICEgZGVmaW5lZCAoeXlvdmVyZmxvdykgfHwgZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKworKworKyNpZiAoISBkZWZpbmVkICh5eW92ZXJmbG93KSBcCisrICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAorKwkgfHwgKFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKysKKysvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KKyt1bmlvbiB5eWFsbG9jCisreworKyAgc2hvcnQgeXlzczsKKysgIFlZU1RZUEUgeXl2czsKKysjIGlmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxzOworKyMgZW5kaWYKKyt9OworKworKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisrIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKysKKysvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKysgICBOIGVsZW1lbnRzLiAgKi8KKysjIGlmIFlZTFNQX05FRURFRAorKyMgIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKysgICAgICgoTikgKiAoc2l6ZW9mIChzaG9ydCkgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkJXAorKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWCkKKysjIGVsc2UKKysjICBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisrICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSkJCQkJXAorKyAgICAgICsgWVlTVEFDS19HQVBfTUFYKQorKyMgZW5kaWYKKysKKysvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKysgICBub3Qgb3ZlcmxhcC4gICovCisrIyBpZm5kZWYgWVlDT1BZCisrIyAgaWYgMSA8IF9fR05VQ19fCisrIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisrICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisrICAgICAgZG8JCQkJCVwKKysJewkJCQkJXAorKwkgIHJlZ2lzdGVyIFlZU0laRV9UIHl5aTsJCVwKKysJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisrCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKysJfQkJCQkJXAorKyAgICAgIHdoaWxlICgwKQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisrICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKysgICBzdGFjay4gICovCisrIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKysgICAgZG8JCQkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisrCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKKysJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKysJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYOwlcCisrCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICB3aGlsZSAoMCkKKysKKysjZW5kaWYKKysKKysKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkgJiYgZGVmaW5lZCAoX19TSVpFX1RZUEVfXykKKysjIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKHNpemVfdCkKKysjIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjZW5kaWYKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkKKysjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKysjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisrIyBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisrI2VuZGlmCisrCisrI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorKyNkZWZpbmUgWVlFTVBUWQkJLTIKKysjZGVmaW5lIFlZRU9GCQkwCisrI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisrI2RlZmluZSBZWUFCT1JUIAlnb3RvIHl5YWJvcnRsYWIKKysjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisrLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisrICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisrI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisrI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCisrZG8JCQkJCQkJCVwKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKysgICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKysgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwKKysgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorKyAgZWxzZQkJCQkJCQkJXAorKyAgICB7IAkJCQkJCQkJXAorKyAgICAgIHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7CQkJXAorKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorK3doaWxlICgwKQorKworKyNkZWZpbmUgWVlURVJST1IJMQorKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorKworKworKy8qIFlZTExPQ19ERUZBVUxUIC0tIENvbXB1dGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gKGJlZm9yZSB0aGUgYWN0aW9ucworKyAgIGFyZSBydW4pLgorKworKyAgIFdoZW4gWVlMTE9DX0RFRkFVTFQgaXMgcnVuLCBDVVJSRU5UIGlzIHNldCB0aGUgbG9jYXRpb24gb2YgdGhlCisrICAgZmlyc3QgdG9rZW4uICBCeSBkZWZhdWx0LCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgcmFuZ2VzLCBleHRlbmQKKysgICBpdHMgcmFuZ2UgdG8gdGhlIGxhc3Qgc3ltYm9sLiAgKi8KKysKKysjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisrIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAJXAorKyAgIEN1cnJlbnQubGFzdF9saW5lICAgPSBSaHNbTl0ubGFzdF9saW5lOwlcCisrICAgQ3VycmVudC5sYXN0X2NvbHVtbiA9IFJoc1tOXS5sYXN0X2NvbHVtbjsKKysjZW5kaWYKKysKKysKKysvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKysKKysjaWYgWVlQVVJFCisrIyBpZiBZWUxTUF9ORUVERUQKKysjICBpZmRlZiBZWUxFWF9QQVJBTQorKyMgICBkZWZpbmUgWVlMRVgJCXl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCisrIyAgZW5kaWYKKysjIGVsc2UgLyogIVlZTFNQX05FRURFRCAqLworKyMgIGlmZGVmIFlZTEVYX1BBUkFNCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCkKKysjICBlbmRpZgorKyMgZW5kaWYgLyogIVlZTFNQX05FRURFRCAqLworKyNlbHNlIC8qICFZWVBVUkUgKi8KKysjIGRlZmluZSBZWUxFWAkJCXl5bGV4ICgpCisrI2VuZGlmIC8qICFZWVBVUkUgKi8KKysKKysKKysvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisrI2lmIFlZREVCVUcKKysKKysjIGlmbmRlZiBZWUZQUklOVEYKKysjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisrIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisrIyBlbmRpZgorKworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKKytkbyB7CQkJCQkJXAorKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisrICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCisrfSB3aGlsZSAoMCkKKysvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKysgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KKytpbnQgeXlkZWJ1ZzsKKysjZWxzZSAvKiAhWVlERUJVRyAqLworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorKyNlbmRpZiAvKiAhWVlERUJVRyAqLworKworKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKysjaWZuZGVmCVlZSU5JVERFUFRICisrIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisrI2VuZGlmCisrCisrLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKysgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKysKKysgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorKyAgIFNJWkVfTUFYIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKysgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKysKKysjaWYgWVlNQVhERVBUSCA9PSAwCisrIyB1bmRlZiBZWU1BWERFUFRICisrI2VuZGlmCisrCisrI2lmbmRlZiBZWU1BWERFUFRICisrIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorKyNlbmRpZgorKwwKKysjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisrCisrIyBpZm5kZWYgeXlzdHJsZW4KKysjICBpZiBkZWZpbmVkIChfX0dMSUJDX18pICYmIGRlZmluZWQgKF9TVFJJTkdfSCkKKysjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorKyMgIGVsc2UKKysvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisrc3RhdGljIFlZU0laRV9UCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisrIyAgIGVsc2UKKyt5eXN0cmxlbiAoeXlzdHIpCisrICAgICBjb25zdCBjaGFyICp5eXN0cjsKKysjICAgZW5kaWYKKyt7CisrICByZWdpc3RlciBjb25zdCBjaGFyICp5eXMgPSB5eXN0cjsKKysKKysgIHdoaWxlICgqeXlzKysgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlzIC0geXlzdHIgLSAxOworK30KKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmbmRlZiB5eXN0cGNweQorKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKSAmJiBkZWZpbmVkIChfR05VX1NPVVJDRSkKKysjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorKyMgIGVsc2UKKysvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisrICAgWVlERVNULiAgKi8KKytzdGF0aWMgY2hhciAqCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKysjICAgZWxzZQorK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorKyAgICAgY2hhciAqeXlkZXN0OworKyAgICAgY29uc3QgY2hhciAqeXlzcmM7CisrIyAgIGVuZGlmCisreworKyAgcmVnaXN0ZXIgY2hhciAqeXlkID0geXlkZXN0OworKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisrCisrICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlkIC0gMTsKKyt9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrDAorKyNsaW5lIDMxNSAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrCisrLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorKyAgIGludG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKysgICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4gb2JqZWN0LgorKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisrICAgdG8gdGhlIHByb3BlciBwb2ludGVyIHR5cGUuICAqLworKworKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisrIyBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIHZvaWQgKllZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisrIyBlbHNlCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIFlZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisrIyBlbmRpZgorKyNlbHNlIC8qICFZWVBBUlNFX1BBUkFNICovCisrIyBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcKKysjIGRlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKysjZW5kaWYgLyogIVlZUEFSU0VfUEFSQU0gKi8KKysKKysvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdzdHJpY3QtcHJvdG90eXBlcy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBpZmRlZiBZWVBBUlNFX1BBUkFNCisraW50IHl5cGFyc2UgKHZvaWQgKik7CisrIyBlbHNlCisraW50IHl5cGFyc2UgKHZvaWQpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBZWV9ERUNMX1ZBUklBQkxFUyAtLSBkZXBlbmRpbmcgd2hldGhlciB3ZSB1c2UgYSBwdXJlIHBhcnNlciwKKysgICB2YXJpYWJsZXMgYXJlIGdsb2JhbCwgb3IgbG9jYWwgdG8gWVlQQVJTRS4gICovCisrCisrI2RlZmluZSBZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCQkJXAorKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8JCQkJXAorK2ludCB5eWNoYXI7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAqLwlcCisrWVlTVFlQRSB5eWx2YWw7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogTnVtYmVyIG9mIHBhcnNlIGVycm9ycyBzbyBmYXIuICAqLwkJCVwKKytpbnQgeXluZXJyczsKKysKKysjaWYgWVlMU1BfTkVFREVECisrIyBkZWZpbmUgWVlfREVDTF9WQVJJQUJMRVMJCQlcCisrWVlfREVDTF9OT05fTFNQX1ZBUklBQkxFUwkJCVwKKysJCQkJCQlcCisrLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwlcCisrWVlMVFlQRSB5eWxsb2M7CisrI2Vsc2UKKysjIGRlZmluZSBZWV9ERUNMX1ZBUklBQkxFUwkJCVwKKytZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCisrI2VuZGlmCisrCisrCisrLyogSWYgbm9ucmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrCisrI2lmICFZWVBVUkUKKytZWV9ERUNMX1ZBUklBQkxFUworKyNlbmRpZiAgLyogIVlZUFVSRSAqLworKworK2ludAorK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU1fQVJHKQorKyAgICAgWVlQQVJTRV9QQVJBTV9ERUNMCisreworKyAgLyogSWYgcmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrI2lmIFlZUFVSRQorKyAgWVlfREVDTF9WQVJJQUJMRVMKKysjZW5kaWYgIC8qICFZWVBVUkUgKi8KKysKKysgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworKyAgcmVnaXN0ZXIgaW50IHl5bjsKKysgIGludCB5eXJlc3VsdDsKKysgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworKyAgaW50IHl5ZXJyc3RhdHVzOworKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworKyAgaW50IHl5Y2hhcjEgPSAwOworKworKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKysgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCisrICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorKyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKysKKysgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisrCisrICAvKiBUaGUgc3RhdGUgc3RhY2suICovCisrICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07CisrICBzaG9ydCAqeXlzcyA9IHl5c3NhOworKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworKworKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKysgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOworKyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisrCisrI2lmIFlZTFNQX05FRURFRAorKyAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KKysgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOworKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworKyAgWVlMVFlQRSAqeXlsc3A7CisrI2VuZGlmCisrCisrI2lmIFlZTFNQX05FRURFRAorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKysjZWxzZQorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSkKKysjZW5kaWYKKysKKysgIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisrCisrCisrICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKysgIFlZU1RZUEUgeXl2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxvYzsKKysjZW5kaWYKKysKKysgIC8qIFdoZW4gcmVkdWNpbmcsIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkCisrICAgICBydWxlLiAqLworKyAgaW50IHl5bGVuOworKworKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKysKKysgIHl5c3RhdGUgPSAwOworKyAgeXllcnJzdGF0dXMgPSAwOworKyAgeXluZXJycyA9IDA7CisrICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKysKKysgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisrICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKysgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKysgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKysKKysgIHl5c3NwID0geXlzczsKKysgIHl5dnNwID0geXl2czsKKysjaWYgWVlMU1BfTkVFREVECisrICB5eWxzcCA9IHl5bHM7CisrI2VuZGlmCisrICBnb3RvIHl5c2V0c3RhdGU7CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrIHl5bmV3c3RhdGU6CisrICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLgorKyAgICAgKi8KKysgIHl5c3NwKys7CisrCisrIHl5c2V0c3RhdGU6CisrICAqeXlzc3AgPSB5eXN0YXRlOworKworKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisrICAgIHsKKysgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKysgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworKworKyNpZmRlZiB5eW92ZXJmbG93CisrICAgICAgeworKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suIFVzZSBjb3BpZXMgb2YKKysJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworKwkgICBtZW1vcnkuICAqLworKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCisrCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gICovCisrIyBpZiBZWUxTUF9ORUVERUQKKysJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworKwkvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisrCSAgIGJ1dCB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworKwl5eW92ZXJmbG93ICgicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKysJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKysJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKysJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKysJCSAgICAmeXlzdGFja3NpemUpOworKwl5eWxzID0geXlsczE7CisrIyBlbHNlCisrCXl5b3ZlcmZsb3cgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisrIyBlbmRpZgorKwl5eXNzID0geXlzczE7CisrCXl5dnMgPSB5eXZzMTsKKysgICAgICB9CisrI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKysgICAgICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrIyBlbHNlCisrICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisrICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisrCWdvdG8geXlvdmVyZmxvd2xhYjsKKysgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisrCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKysKKysgICAgICB7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKysJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworKwlpZiAoISB5eXB0cikKKysJICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOworKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKysjIGlmIFlZTFNQX05FRURFRAorKwlZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsKKysjIGVuZGlmCisrIyB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisrCWlmICh5eXNzMSAhPSB5eXNzYSkKKysJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKysgICAgICB9CisrIyBlbmRpZgorKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisrCisrICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKysgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworKyNpZiBZWUxTUF9ORUVERUQKKysgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOworKyNlbmRpZgorKworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKysJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworKworKyAgICAgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorKwlZWUFCT1JUOworKyAgICB9CisrCisrICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworKworKyAgZ290byB5eWJhY2t1cDsKKysKKysKKysvKi0tLS0tLS0tLS0tLgorK3wgeXliYWNrdXAuICB8CisrYC0tLS0tLS0tLS0tKi8KKyt5eWJhY2t1cDoKKysKKysvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKysvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysvKiB5eXJlc3VtZTogKi8KKysKKysgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworKworKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworKyAgaWYgKHl5biA9PSBZWUZMQUcpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysKKysgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRgorKyAgICAgb3IgYSB2YWxpZCB0b2tlbiBpbiBleHRlcm5hbCBmb3JtLiAgKi8KKysKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKysgICAgeworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworKyAgICAgIHl5Y2hhciA9IFlZTEVYOworKyAgICB9CisrCisrICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworKworKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gMDsKKysgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKysKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisrCisrI2lmIFlZREVCVUcKKysgICAgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMKKysJd2hpY2ggYXJlIGRlZmluZWQgb25seSBpZiBgWVlERUJVRycgaXMgc2V0LiAgKi8KKysgICAgICBpZiAoeXlkZWJ1ZykKKysJeworKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLAorKwkJICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlCisrCSAgICAgbWVhbmluZyBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisrIyBpZmRlZiBZWVBSSU5UCisrCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisrIyBlbmRpZgorKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiKVxuIik7CisrCX0KKysjZW5kaWYKKysgICAgfQorKworKyAgeXluICs9IHl5Y2hhcjE7CisrICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IHl5Y2hhcjEpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKworKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorKyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1bGUgbnVtYmVyLgorKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisrICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCisrICAgICAgIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCisrICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisrCisrICBpZiAoeXluIDwgMCkKKysgICAgeworKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorKwlnb3RvIHl5ZXJybGFiOworKyAgICAgIHl5biA9IC15eW47CisrICAgICAgZ290byB5eXJlZHVjZTsKKysgICAgfQorKyAgZWxzZSBpZiAoeXluID09IDApCisrICAgIGdvdG8geXllcnJsYWI7CisrCisrICBpZiAoeXluID09IFlZRklOQUwpCisrICAgIFlZQUNDRVBUOworKworKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisrICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyB0b2tlbiAlZCAoJXMpLCAiLAorKwkgICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysKKysgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisrICBpZiAoeXljaGFyICE9IFlZRU9GKQorKyAgICB5eWNoYXIgPSBZWUVNUFRZOworKworKyAgKisreXl2c3AgPSB5eWx2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgKisreXlsc3AgPSB5eWxsb2M7CisrI2VuZGlmCisrCisrICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisrICAgICBzdGF0dXMuICAqLworKyAgaWYgKHl5ZXJyc3RhdHVzKQorKyAgICB5eWVycnN0YXR1cy0tOworKworKyAgeXlzdGF0ZSA9IHl5bjsKKysgIGdvdG8geXluZXdzdGF0ZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWRlZmF1bHQ6CisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gMCkKKysgICAgZ290byB5eWVycmxhYjsKKysgIGdvdG8geXlyZWR1Y2U7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlyZWR1Y2U6CisrICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworKyAgeXlsZW4gPSB5eXIyW3l5bl07CisrCisrICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKysgICAgIGAkJCA9ICQxJy4KKysKKysgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gdGhlIHNlbWFudGljIHZhbHVlIG9mCisrICAgICB0aGUgbG9va2FoZWFkIHRva2VuLiAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisrICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisrICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKysKKysjaWYgWVlMU1BfTkVFREVECisrICAvKiBTaW1pbGFybHkgZm9yIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgTGV0IHRoZSB1c2VyIHJ1biBhZGRpdGlvbmFsCisrICAgICBjb21tYW5kcyBpZiBmb3IgaW5zdGFuY2UgbG9jYXRpb25zIGFyZSByYW5nZXMuICAqLworKyAgeXlsb2MgPSB5eWxzcFsxLXl5bGVuXTsKKysgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMgd2hpY2gKKysgICAgIGFyZSBkZWZpbmVkIG9ubHkgaWYgYFlZREVCVUcnIGlzIHNldC4gICovCisrICBpZiAoeXlkZWJ1ZykKKysgICAgeworKyAgICAgIGludCB5eWk7CisrCisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisrCQkgeXluLCB5eXJsaW5lW3l5bl0pOworKworKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworKyAgICAgIGZvciAoeXlpID0geXlwcmhzW3l5bl07IHl5cmhzW3l5aV0gPiAwOyB5eWkrKykKKysJWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lW3l5cmhzW3l5aV1dKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgc3dpdGNoICh5eW4pIHsKKysKKytjYXNlIDE6CisrI2xpbmUgMTUxICJwbHVyYWwueSIKKyt7CisrCSAgICBpZiAoeXl2c3BbMF0uZXhwID09IE5VTEwpCisrCSAgICAgIFlZQUJPUlQ7CisrCSAgICAoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPnJlcyA9IHl5dnNwWzBdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMjoKKysjbGluZSAxNTkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMyAocW1vcCwgeXl2c3BbLTRdLmV4cCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMzoKKysjbGluZSAxNjMgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAobG9yLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA0OgorKyNsaW5lIDE2NyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yIChsYW5kLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA1OgorKyNsaW5lIDE3MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDY6CisrI2xpbmUgMTc1ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgNzoKKysjbGluZSAxNzkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA4OgorKyNsaW5lIDE4MyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDk6CisrI2xpbmUgMTg3ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzEgKGxub3QsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEwOgorKyNsaW5lIDE5MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8wICh2YXIpOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAxMToKKysjbGluZSAxOTUgInBsdXJhbC55IgorK3sKKysJICAgIGlmICgoeXl2YWwuZXhwID0gbmV3X2V4cF8wIChudW0pKSAhPSBOVUxMKQorKwkgICAgICB5eXZhbC5leHAtPnZhbC5udW0gPSB5eXZzcFswXS5udW07CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEyOgorKyNsaW5lIDIwMCAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0geXl2c3BbLTFdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK30KKysKKysjbGluZSA3MDUgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24vYmlzb24uc2ltcGxlIgorKworKwwKKysgIHl5dnNwIC09IHl5bGVuOworKyAgeXlzc3AgLT0geXlsZW47CisrI2lmIFlZTFNQX05FRURFRAorKyAgeXlsc3AgLT0geXlsZW47CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAic3RhdGUgc3RhY2sgbm93Iik7CisrICAgICAgd2hpbGUgKHl5c3NwMSAhPSB5eXNzcCkKKysJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgKisreXl2c3AgPSB5eXZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bG9jOworKyNlbmRpZgorKworKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKysgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworKworKyAgeXluID0geXlyMVt5eW5dOworKworKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKysgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisrICBlbHNlCisrICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworKworKyAgZ290byB5eW5ld3N0YXRlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJybGFiOgorKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisrICBpZiAoIXl5ZXJyc3RhdHVzKQorKyAgICB7CisrICAgICAgKyt5eW5lcnJzOworKworKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKysgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisrCisrICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisrCXsKKysJICBZWVNJWkVfVCB5eXNpemUgPSAwOworKwkgIGNoYXIgKnl5bXNnOworKwkgIGludCB5eXgsIHl5Y291bnQ7CisrCisrCSAgeXljb3VudCA9IDA7CisrCSAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorKwkgICAgIFlZQ0hFQ0suICAqLworKwkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkgICAgICAgeXl4IDwgKGludCkgKHNpemVvZiAoeXl0bmFtZSkgLyBzaXplb2YgKGNoYXIgKikpOyB5eXgrKykKKysJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorKwkgICAgICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbeXl4XSkgKyAxNSwgeXljb3VudCsrOworKwkgIHl5c2l6ZSArPSB5eXN0cmxlbiAoInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpICsgMTsKKysJICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbWVlUUkFOU0xBVEUgKHl5Y2hhcildKTsKKysJICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5c2l6ZSk7CisrCSAgaWYgKHl5bXNnICE9IDApCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnl5cCA9IHl5c3RwY3B5ICh5eW1zZywgInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpOworKwkgICAgICB5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXRuYW1lW1lZVFJBTlNMQVRFICh5eWNoYXIpXSk7CisrCisrCSAgICAgIGlmICh5eWNvdW50IDwgNSkKKysJCXsKKysJCSAgeXljb3VudCA9IDA7CisrCQkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsKKysJCSAgICAgICB5eXgrKykKKysJCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCkKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICp5eXEgPSAhIHl5Y291bnQgPyAiLCBleHBlY3RpbmcgIiA6ICIgb3IgIjsKKysJCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXEpOworKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbeXl4XSk7CisrCQkJeXljb3VudCsrOworKwkJICAgICAgfQorKwkJfQorKwkgICAgICB5eWVycm9yICh5eW1zZyk7CisrCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBleGhhdXN0ZWQiKTsKKysJfQorKyAgICAgIGVsc2UKKysjZW5kaWYgLyogZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKwl5eWVycm9yICgicGFyc2UgZXJyb3IiKTsKKysgICAgfQorKyAgZ290byB5eWVycmxhYjE7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJybGFiMSAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJsYWIxOgorKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisrICAgIHsKKysgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCisrCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisrCisrICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisrICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKysJWVlBQk9SVDsKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLAorKwkJICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysgICAgICB5eWNoYXIgPSBZWUVNUFRZOworKyAgICB9CisrCisrICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKysgICAgIHRva2VuLiAgKi8KKysKKysgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworKworKyAgZ290byB5eWVycmhhbmRsZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycmRlZmF1bHQgLS0gY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgfAorK3wgZXJyb3IgdG9rZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJkZWZhdWx0OgorKyNpZiAwCisrICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKysgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKysKKysgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4gICovCisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4pCisrICAgIGdvdG8geXlkZWZhdWx0OworKyNlbmRpZgorKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJwb3AgLS0gcG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgfAorK3wgZXJyb3IgdG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJycG9wOgorKyAgaWYgKHl5c3NwID09IHl5c3MpCisrICAgIFlZQUJPUlQ7CisrICB5eXZzcC0tOworKyAgeXlzdGF0ZSA9ICotLXl5c3NwOworKyNpZiBZWUxTUF9ORUVERUQKKysgIHl5bHNwLS07CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisrCVlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKisreXlzc3AxKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisrICAgIH0KKysjZW5kaWYKKysKKysvKi0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJoYW5kbGUuICB8CisrYC0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycmhhbmRsZToKKysgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gWVlGTEFHKQorKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKysKKysgIHl5biArPSBZWVRFUlJPUjsKKysgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisrICAgIGdvdG8geXllcnJkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKyAgaWYgKHl5biA8IDApCisrICAgIHsKKysgICAgICBpZiAoeXluID09IFlZRkxBRykKKysJZ290byB5eWVycnBvcDsKKysgICAgICB5eW4gPSAteXluOworKyAgICAgIGdvdG8geXlyZWR1Y2U7CisrICAgIH0KKysgIGVsc2UgaWYgKHl5biA9PSAwKQorKyAgICBnb3RvIHl5ZXJycG9wOworKworKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorKyAgICBZWUFDQ0VQVDsKKysKKysgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIGVycm9yIHRva2VuLCAiKSk7CisrCisrICAqKyt5eXZzcCA9IHl5bHZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bGxvYzsKKysjZW5kaWYKKysKKysgIHl5c3RhdGUgPSB5eW47CisrICBnb3RvIHl5bmV3c3RhdGU7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlhY2NlcHRsYWI6CisrICB5eXJlc3VsdCA9IDA7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5YWJvcnRsYWI6CisrICB5eXJlc3VsdCA9IDE7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlvdmVyZmxvd2FiIC0tIHBhcnNlciBvdmVyZmxvdyBjb21lcyBoZXJlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5b3ZlcmZsb3dsYWI6CisrICB5eWVycm9yICgicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7CisrICB5eXJlc3VsdCA9IDI7CisrICAvKiBGYWxsIHRocm91Z2guICAqLworKworK3l5cmV0dXJuOgorKyNpZm5kZWYgeXlvdmVyZmxvdworKyAgaWYgKHl5c3MgIT0geXlzc2EpCisrICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisrI2VuZGlmCisrICByZXR1cm4geXlyZXN1bHQ7CisrfQorKyNsaW5lIDIwNSAicGx1cmFsLnkiCisrCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwtZXhwLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcGx1cmFsLWV4cC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTc4NzE0MTkyIC0wNDAwCitAQCAtMCwwICsxLDE1NCBAQAorKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrI2lmIChkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fQVBQTEVfQ0NfXykgXAorKyAgICB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKysKKysvKiBUaGVzZSBzdHJ1Y3RzIGFyZSB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiBmb3IgdGhlIGdlcm1hbmljIHBsdXJhbAorKyAgIGZvcm0gZGV0ZXJtaW5hdGlvbi4gIEl0IHJlcHJlc2VudHMgdGhlIGV4cHJlc3Npb24gICJuICE9IDEiLiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGx2YXIgPQorK3sKKysgIC5uYXJncyA9IDAsCisrICAub3BlcmF0aW9uID0gdmFyLAorK307Cisrc3RhdGljIGNvbnN0IHN0cnVjdCBleHByZXNzaW9uIHBsb25lID0KKyt7CisrICAubmFyZ3MgPSAwLAorKyAgLm9wZXJhdGlvbiA9IG51bSwKKysgIC52YWwgPQorKyAgeworKyAgICAubnVtID0gMQorKyAgfQorK307Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMID0KKyt7CisrICAubmFyZ3MgPSAyLAorKyAgLm9wZXJhdGlvbiA9IG5vdF9lcXVhbCwKKysgIC52YWwgPQorKyAgeworKyAgICAuYXJncyA9CisrICAgIHsKKysgICAgICBbMF0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsdmFyLAorKyAgICAgIFsxXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGxvbmUKKysgICAgfQorKyAgfQorK307CisrCisrIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKQorKworKyNlbHNlCisrCisrLyogRm9yIGNvbXBpbGVycyB3aXRob3V0IHN1cHBvcnQgZm9yIElTTyBDIDk5IHN0cnVjdC91bmlvbiBpbml0aWFsaXplcnM6CisrICAgSW5pdGlhbGl6YXRpb24gYXQgcnVuLXRpbWUuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiBwbHZhcjsKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGxvbmU7Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMOworKworK3N0YXRpYyB2b2lkCisraW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKyt7CisrICBpZiAocGxvbmUudmFsLm51bSA9PSAwKQorKyAgICB7CisrICAgICAgcGx2YXIubmFyZ3MgPSAwOworKyAgICAgIHBsdmFyLm9wZXJhdGlvbiA9IHZhcjsKKysKKysgICAgICBwbG9uZS5uYXJncyA9IDA7CisrICAgICAgcGxvbmUub3BlcmF0aW9uID0gbnVtOworKyAgICAgIHBsb25lLnZhbC5udW0gPSAxOworKworKyAgICAgIEdFUk1BTklDX1BMVVJBTC5uYXJncyA9IDI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLm9wZXJhdGlvbiA9IG5vdF9lcXVhbDsKKysgICAgICBHRVJNQU5JQ19QTFVSQUwudmFsLmFyZ3NbMF0gPSAmcGx2YXI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzFdID0gJnBsb25lOworKyAgICB9CisrfQorKworKyMgZGVmaW5lIElOSVRfR0VSTUFOSUNfUExVUkFMKCkgaW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKysKKysjZW5kaWYKKysKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksIHN0cnVjdCBleHByZXNzaW9uICoqcGx1cmFscCwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorK3sKKysgIGlmIChudWxsZW50cnkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKnBsdXJhbDsKKysgICAgICBjb25zdCBjaGFyICpucGx1cmFsczsKKysKKysgICAgICBwbHVyYWwgPSBzdHJzdHIgKG51bGxlbnRyeSwgInBsdXJhbD0iKTsKKysgICAgICBucGx1cmFscyA9IHN0cnN0ciAobnVsbGVudHJ5LCAibnBsdXJhbHM9Iik7CisrICAgICAgaWYgKHBsdXJhbCA9PSBOVUxMIHx8IG5wbHVyYWxzID09IE5VTEwpCisrCWdvdG8gbm9fcGx1cmFsOworKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmVuZHA7CisrCSAgdW5zaWduZWQgbG9uZyBpbnQgbjsKKysJICBzdHJ1Y3QgcGFyc2VfYXJncyBhcmdzOworKworKwkgIC8qIEZpcnN0IGdldCB0aGUgbnVtYmVyLiAgKi8KKysJICBucGx1cmFscyArPSA5OworKwkgIHdoaWxlICgqbnBsdXJhbHMgIT0gJ1wwJyAmJiBpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKm5wbHVyYWxzKSkKKysJICAgICsrbnBsdXJhbHM7CisrCSAgaWYgKCEoKm5wbHVyYWxzID49ICcwJyAmJiAqbnBsdXJhbHMgPD0gJzknKSkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKyNpZiBkZWZpbmVkIEhBVkVfU1RSVE9VTCB8fCBkZWZpbmVkIF9MSUJDCisrCSAgbiA9IHN0cnRvdWwgKG5wbHVyYWxzLCAmZW5kcCwgMTApOworKyNlbHNlCisrCSAgZm9yIChlbmRwID0gbnBsdXJhbHMsIG4gPSAwOyAqZW5kcCA+PSAnMCcgJiYgKmVuZHAgPD0gJzknOyBlbmRwKyspCisrCSAgICBuID0gbiAqIDEwICsgKCplbmRwIC0gJzAnKTsKKysjZW5kaWYKKysJICBpZiAobnBsdXJhbHMgPT0gZW5kcCkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKwkgICpucGx1cmFsc3AgPSBuOworKworKwkgIC8qIER1ZSB0byB0aGUgcmVzdHJpY3Rpb25zIGJpc29uIGltcG9zZXMgb250byB0aGUgaW50ZXJmYWNlIG9mIHRoZQorKwkgICAgIHNjYW5uZXIgZnVuY3Rpb24gd2UgaGF2ZSB0byBwdXQgdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIHJlc3VsdAorKwkgICAgIHBhc3NlZCB1cCBmcm9tIHRoZSBwYXJzZXIgaW50byB0aGUgc2FtZSBzdHJ1Y3R1cmUgd2hpY2ggYWRkcmVzcworKwkgICAgIGlzIHBhc3NlZCBkb3duIHRvIHRoZSBwYXJzZXIuICAqLworKwkgIHBsdXJhbCArPSA3OworKwkgIGFyZ3MuY3AgPSBwbHVyYWw7CisrCSAgaWYgKFBMVVJBTF9QQVJTRSAoJmFyZ3MpICE9IDApCisrCSAgICBnb3RvIG5vX3BsdXJhbDsKKysJICAqcGx1cmFscCA9IGFyZ3MucmVzOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIEJ5IGRlZmF1bHQgd2UgYXJlIHVzaW5nIHRoZSBHZXJtYW5pYyBmb3JtOiBzaW5ndWxhciBmb3JtIG9ubHkKKysgICAgICAgICBmb3IgYG9uZScsIHRoZSBwbHVyYWwgZm9ybSBvdGhlcndpc2UuICBZZXMsIHRoaXMgaXMgYWxzbyB3aGF0CisrICAgICAgICAgRW5nbGlzaCBpcyB1c2luZyBzaW5jZSBFbmdsaXNoIGlzIGEgR2VybWFuaWMgbGFuZ3VhZ2UuICAqLworKyAgICBub19wbHVyYWw6CisrICAgICAgSU5JVF9HRVJNQU5JQ19QTFVSQUwgKCk7CisrICAgICAgKnBsdXJhbHAgPSAmR0VSTUFOSUNfUExVUkFMOworKyAgICAgICpucGx1cmFsc3AgPSAyOworKyAgICB9CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC1leHAuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwtZXhwLmgJMjAwNC0wOS0xMiAxNDo0MDozNC41ODQ3MTMyODAgLTA0MDAKK0BAIC0wLDAgKzEsMTE4IEBACisrLyogRXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBldmFsdWF0aW9uIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUExVUkFMX0VYUF9ICisrI2RlZmluZSBfUExVUkFMX0VYUF9ICisrCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisrIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorKyNlbmRpZgorKworKworKy8qIFRoaXMgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHByZXNzaW9ucyB0byBkZXRlcm1pbmUgdGhlCisrICAgcGx1cmFsIGZvcm0uICAqLworK3N0cnVjdCBleHByZXNzaW9uCisreworKyAgaW50IG5hcmdzOwkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMuICAqLworKyAgZW51bSBvcGVyYXRvcgorKyAgeworKyAgICAvKiBXaXRob3V0IGFyZ3VtZW50czogICovCisrICAgIHZhciwJCQkvKiBUaGUgdmFyaWFibGUgIm4iLiAgKi8KKysgICAgbnVtLAkJCS8qIERlY2ltYWwgbnVtYmVyLiAgKi8KKysgICAgLyogVW5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgbG5vdCwJCQkvKiBMb2dpY2FsIE5PVC4gICovCisrICAgIC8qIEJpbmFyeSBvcGVyYXRvcnM6ICAqLworKyAgICBtdWx0LAkJCS8qIE11bHRpcGxpY2F0aW9uLiAgKi8KKysgICAgZGl2aWRlLAkJCS8qIERpdmlzaW9uLiAgKi8KKysgICAgbW9kdWxlLAkJCS8qIE1vZHVsbyBvcGVyYXRpb24uICAqLworKyAgICBwbHVzLAkJCS8qIEFkZGl0aW9uLiAgKi8KKysgICAgbWludXMsCQkJLyogU3VidHJhY3Rpb24uICAqLworKyAgICBsZXNzX3RoYW4sCQkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfdGhhbiwJCS8qIENvbXBhcmlzb24uICAqLworKyAgICBsZXNzX29yX2VxdWFsLAkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKysgICAgZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuICAqLworKyAgICBub3RfZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgaW5lcXVhbGl0eS4gICovCisrICAgIGxhbmQsCQkJLyogTG9naWNhbCBBTkQuICAqLworKyAgICBsb3IsCQkJLyogTG9naWNhbCBPUi4gICovCisrICAgIC8qIFRlcm5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgcW1vcAkJCS8qIFF1ZXN0aW9uIG1hcmsgb3BlcmF0b3IuICAqLworKyAgfSBvcGVyYXRpb247CisrICB1bmlvbgorKyAgeworKyAgICB1bnNpZ25lZCBsb25nIGludCBudW07CS8qIE51bWJlciB2YWx1ZSBmb3IgYG51bScuICAqLworKyAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsJLyogVXAgdG8gdGhyZWUgYXJndW1lbnRzLiAgKi8KKysgIH0gdmFsOworK307CisrCisrLyogVGhpcyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgcGFyc2VyIGFuZCBnZXQKKysgICB0aGUgcmVzdWx0IGluIGEgdGhyZWFkLXNhZmUgd2F5LiAgKi8KKytzdHJ1Y3QgcGFyc2VfYXJncworK3sKKysgIGNvbnN0IGNoYXIgKmNwOworKyAgc3RydWN0IGV4cHJlc3Npb24gKnJlczsKKyt9OworKworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoaXMgc291cmNlIGNvZGUgaXMgdXNlZAorKyAgIDEuIGluIHRoZSBHTlUgQyBMaWJyYXJ5IGxpYnJhcnksCisrICAgMi4gaW4gdGhlIEdOVSBsaWJpbnRsIGxpYnJhcnksCisrICAgMy4gaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLgorKyAgIFRoZSBmdW5jdGlvbiBuYW1lcyBpbiBlYWNoIHNpdHVhdGlvbiBtdXN0IGJlIGRpZmZlcmVudCwgdG8gYWxsb3cgZm9yCisrICAgYmluYXJ5IGluY29tcGF0aWJsZSBjaGFuZ2VzIGluICdzdHJ1Y3QgZXhwcmVzc2lvbicuICBGdXJ0aGVybW9yZSwKKysgICAxLiBpbiB0aGUgR05VIEMgTGlicmFyeSBsaWJyYXJ5LCB0aGUgbmFtZXMgaGF2ZSBhIF9fIHByZWZpeCwKKysgICAyLiszLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSBhbmQgaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLCB0aGUgbmFtZXMKKysgICAgICAgICBtdXN0IGZvbGxvdyBBTlNJIEMgYW5kIG5vdCBzdGFydCB3aXRoIF9fLgorKyAgIFNvIHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggdGhlIHRocmVlIGNhc2VzLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gX19nZXR0ZXh0X2ZyZWVfZXhwCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIF9fZ2V0dGV4dHBhcnNlCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIF9fZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwKKysjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIF9fZ2V0dGV4dF9leHRyYWN0X3BsdXJhbAorKyNlbGlmIGRlZmluZWQgKElOX0xJQklOVEwpCisrIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIGxpYmludGxfZ2V0dGV4dF9mcmVlX2V4cAorKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBsaWJpbnRsX2dldHRleHRwYXJzZQorKyMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBsaWJpbnRsX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsCisrIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKysjZWxzZQorKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBmcmVlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIHBhcnNlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIGdlcm1hbmljX3BsdXJhbAorKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gZXh0cmFjdF9wbHVyYWxfZXhwcmVzc2lvbgorKyNlbmRpZgorKworK2V4dGVybiB2b2lkIEZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK2V4dGVybiBpbnQgUExVUkFMX1BBUlNFICh2b2lkICphcmcpOworK2V4dGVybiBzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUwgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gdm9pZCBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksCisrCQkJCSAgICAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqKnBsdXJhbHAsCisrCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrI2lmICFkZWZpbmVkIChfTElCQykgJiYgIWRlZmluZWQgKElOX0xJQklOVEwpCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHBsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwKKysJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9QTFVSQUxfRVhQX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwueQkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwueQkyMDA0LTA5LTEyIDE0OjQwOjM0LjU4OTcxMjUyMCAtMDQwMAorQEAgLTAsMCArMSwzODEgQEAKKysleworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKyV9CisrJXB1cmVfcGFyc2VyCisrJWV4cGVjdCA3CisrCisrJXVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30KKysKKysleworKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApOworK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CisrCisrLyogQWxsb2NhdGlvbiBvZiBleHByZXNzaW9ucy4gICovCisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwIChpbnQgbmFyZ3MsIGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICogY29uc3QgKmFyZ3MpCisreworKyAgaW50IGk7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqbmV3cDsKKysKKysgIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCisrICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorKyAgICAgIGdvdG8gZmFpbDsKKysKKysgIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworKyAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKysgIGlmIChuZXdwICE9IE5VTEwpCisrICAgIHsKKysgICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworKyAgICAgIG5ld3AtPm9wZXJhdGlvbiA9IG9wOworKyAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKysgICAgICByZXR1cm4gbmV3cDsKKysgICAgfQorKworKyBmYWlsOgorKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzAgKGVudW0gb3BlcmF0b3Igb3ApCisreworKyAgcmV0dXJuIG5ld19leHAgKDAsIG9wLCBOVUxMKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8xIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CisrCisrICBhcmdzWzBdID0gcmlnaHQ7CisrICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworK30KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMiAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKysKKysgIGFyZ3NbMF0gPSBsZWZ0OworKyAgYXJnc1sxXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8zIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqYmV4cCwKKysJICAgc3RydWN0IGV4cHJlc3Npb24gKnRicmFuY2gsIHN0cnVjdCBleHByZXNzaW9uICpmYnJhbmNoKQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOworKworKyAgYXJnc1swXSA9IGJleHA7CisrICBhcmdzWzFdID0gdGJyYW5jaDsKKysgIGFyZ3NbMl0gPSBmYnJhbmNoOworKyAgcmV0dXJuIG5ld19leHAgKDMsIG9wLCBhcmdzKTsKKyt9CisrCisrJX0KKysKKysvKiBUaGlzIGRlY2xhcmVzIHRoYXQgYWxsIG9wZXJhdG9ycyBoYXZlIHRoZSBzYW1lIGFzc29jaWF0aXZpdHkgYW5kIHRoZQorKyAgIHByZWNlZGVuY2Ugb3JkZXIgYXMgaW4gQy4gIFNlZSBbSGFyYmlzb24sIFN0ZWVsZTogQywgQSBSZWZlcmVuY2UgTWFudWFsXS4KKysgICBUaGVyZSBpcyBubyB1bmFyeSBtaW51cyBhbmQgbm8gYml0d2lzZSBvcGVyYXRvcnMuCisrICAgT3BlcmF0b3JzIHdpdGggdGhlIHNhbWUgc3ludGFjdGljIGJlaGF2aW91ciBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYSBzaW5nbGUKKysgICB0b2tlbiwgdG8gc2F2ZSBzcGFjZSBpbiB0aGUgYXJyYXkgZ2VuZXJhdGVkIGJ5IGJpc29uLiAgKi8KKyslcmlnaHQgJz8nCQkvKiAgID8JCSovCisrJWxlZnQgJ3wnCQkvKiAgIHx8CQkqLworKyVsZWZ0ICcmJwkJLyogICAmJgkJKi8KKyslbGVmdCBFUVVPUDIJCS8qICAgPT0gIT0JKi8KKyslbGVmdCBDTVBPUDIJCS8qICAgPCA+IDw9ID49CSovCisrJWxlZnQgQURET1AyCQkvKiAgICsgLQkqLworKyVsZWZ0IE1VTE9QMgkJLyogICAqIC8gJQkqLworKyVyaWdodCAnIScJCS8qICAgIQkJKi8KKysKKysldG9rZW4gPG9wPiBFUVVPUDIgQ01QT1AyIEFERE9QMiBNVUxPUDIKKysldG9rZW4gPG51bT4gTlVNQkVSCisrJXR5cGUgPGV4cD4gZXhwCisrCisrJSUKKysKKytzdGFydDoJICBleHAKKysJICB7CisrCSAgICBpZiAoJDEgPT0gTlVMTCkKKysJICAgICAgWVlBQk9SVDsKKysJICAgICgoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+cmVzID0gJDE7CisrCSAgfQorKwk7CisrCisrZXhwOgkgIGV4cCAnPycgZXhwICc6JyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMyAocW1vcCwgJDEsICQzLCAkNSk7CisrCSAgfQorKwl8IGV4cCAnfCcgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKGxvciwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwICcmJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAobGFuZCwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIEVRVU9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCBDTVBPUDIgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgQURET1AyIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIE1VTE9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8ICchJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMSAobG5vdCwgJDIpOworKwkgIH0KKysJfCAnbicKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMCAodmFyKTsKKysJICB9CisrCXwgTlVNQkVSCisrCSAgeworKwkgICAgaWYgKCgkJCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKysJICAgICAgJCQtPnZhbC5udW0gPSAkMTsKKysJICB9CisrCXwgJygnIGV4cCAnKScKKysJICB7CisrCSAgICAkJCA9ICQyOworKwkgIH0KKysJOworKworKyUlCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbzJ0Ymwuc2VkLmluCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BvMnRibC5zZWQuaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwMiArMCwwIEBACistIyBwbzJ0Ymwuc2VkIC0gQ29udmVydCBVbmlmb3J1bSBzdHlsZSAucG8gZmlsZSB0byBsb29rdXAgdGFibGUgZm9yIGNhdGdldHMKKy0jIENvcHlyaWdodCAoQykgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorLSMKKy0xIHsKKy0gIGlcCistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIEBQQUNLQUdFIE5BTUVALnBvdC4gICovXAorLVwKKy0jaWYgSEFWRV9DT05GSUdfSFwKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPlwKKy0jZW5kaWZcCistXAorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiXAorLVwKKy1jb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXSA9IHsKKy0gIGgKKy0gIHMvLiovMC8KKy0gIHgKKy19CistIworLSMgV3JpdGUgbXNnaWQgZW50cmllcyBpbiBDIGFycmF5IGZvcm0uCistIworLS9ebXNnaWQvIHsKKy0gIHMvbXNnaWRbIAldKlwoIi4qIlwpLyAge1wxLworLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lCistICA6YgorLSAgTgorLSMgTG9vayB3aGV0aGVyIHNlY29uZCBwYXJ0IGlzIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXCkiXChcblwpIlwoLioiXCkvXDFcMlwzLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistIyBCZWNhdXNlIHdlIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBmaWxlIGNvcnJlY3RseSBmb3JtZWQgdGhlIGxpbmUKKy0jIGp1c3QgcmVhZCBjYW5ub3QgYmUgYWdhaW4gYmUgYSBtc2dpZCBsaW5lLiAgU28gaXQncyBzYWZlIHRvIGlnbm9yZQorLSMgaXQuCistICBzL1woLipcKVxuLiovXDEvCistICBiYworLSMgV2UgZm91bmQgYSBjb250aW51YXRpb24gbGluZS4gIEJ1dCBiZWZvcmUgcHJpbnRpbmcgaW5zZXJ0ICdcJy4KKy0gIDphCistICBzL1woLipcKVwoXG4uKlwpL1wxXFxcMi8KKy0gIFAKKy0jIFdlIGNhbm5vdCB1c2UgRCBoZXJlLgorLSAgcy8uKlxuXCguKlwpL1wxLworLSMgU29tZSBidWdneSBzZWRzIGRvIG5vdCBjbGVhciB0aGUgYHN1Y2Nlc3NmdWwgc3Vic3RpdHV0aW9uIHNpbmNlIGxhc3QgYGB0JycnCistIyBmbGFnIG9uIGBOJywgc28gd2UgZG8gYSBgdCcgaGVyZSB0byBjbGVhciBpdC4KKy0gIHRiCistIyBOb3QgcmVhY2hlZAorLSAgOmMKKy0gIHgKKy0jIFRoZSBmb2xsb3dpbmcgbmljZSBzb2x1dGlvbiBpcyBieQorLSMgQnJ1bm8gPEhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CistICB0ZAorLSMgSW5jcmVtZW50IGEgZGVjaW1hbCBudW1iZXIgaW4gcGF0dGVybiBzcGFjZS4KKy0jIEZpcnN0IGhpZGUgdHJhaWxpbmcgYDknIGRpZ2l0cy4KKy0gIDpkCistICBzLzlcKF8qXCkkL19cMS8KKy0gIHRkCistIyBBc3N1cmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGlzIGF2YWlsYWJsZS4KKy0gIHMvXlwoXypcKSQvMFwxLworLSMgSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0LgorLSAgcy84XChfKlwpJC85XDEvCistICBzLzdcKF8qXCkkLzhcMS8KKy0gIHMvNlwoXypcKSQvN1wxLworLSAgcy81XChfKlwpJC82XDEvCistICBzLzRcKF8qXCkkLzVcMS8KKy0gIHMvM1woXypcKSQvNFwxLworLSAgcy8yXChfKlwpJC8zXDEvCistICBzLzFcKF8qXCkkLzJcMS8KKy0gIHMvMFwoXypcKSQvMVwxLworLSMgQ29udmVydCB0aGUgaGlkZGVuIGA5JyBkaWdpdHMgdG8gYDAncy4KKy0gIHMvXy8wL2cKKy0gIHgKKy0gIEcKKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wxLCBcMn0sLworLSAgcy9cKC4qXCkiJC9cMS8KKy0gIHAKKy19CistIworLSMgTGFzdCBsaW5lLgorLSMKKy0kIHsKKy0gIGlcCistfTtcCistCistICBnCistICBzLzAqXCguKlwpL2ludCBfbXNnX3RibF9sZW5ndGggPSBcMTsvcAorLX0KKy1kCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLWFyZ3MuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtYXJncy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTk1NzExNjA4IC0wNDAwCitAQCAtMCwwICsxLDExOSBAQAorKy8qIERlY29tcG9zZWQgcHJpbnRmIGFyZ3VtZW50IGxpc3QuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKysKKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2VuZGlmCisraW50CisrcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpCisreworKyAgc2l6ZV90IGk7CisrICBhcmd1bWVudCAqYXA7CisrCisrICBmb3IgKGkgPSAwLCBhcCA9ICZhLT5hcmdbMF07IGkgPCBhLT5jb3VudDsgaSsrLCBhcCsrKQorKyAgICBzd2l0Y2ggKGFwLT50eXBlKQorKyAgICAgIHsKKysgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCWFwLT5hLmFfc2NoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qc2lnbmVkIGNoYXIqLyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCWFwLT5hLmFfdWNoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgY2hhciovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9TSE9SVDoKKysJYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6CisrCWFwLT5hLmFfdXNob3J0ID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIHNob3J0Ki8gaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0lOVDoKKysJYXAtPmEuYV9pbnQgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VSU5UOgorKwlhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwlhcC0+YS5hX2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgorKwlhcC0+YS5hX3Vsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGludCk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJYXAtPmEuYV9sb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCWFwLT5hLmFfdWxvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGxvbmcgaW50KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKysJYXAtPmEuYV9kb3VibGUgPSB2YV9hcmcgKGFyZ3MsIGRvdWJsZSk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCWFwLT5hLmFfbG9uZ2RvdWJsZSA9IHZhX2FyZyAoYXJncywgbG9uZyBkb3VibGUpOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJYXAtPmEuYV9jaGFyID0gdmFfYXJnIChhcmdzLCBpbnQpOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKwlhcC0+YS5hX3dpZGVfY2hhciA9IHZhX2FyZyAoYXJncywgd2ludF90KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX1NUUklORzoKKysJYXAtPmEuYV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGNoYXIgKik7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisrCWFwLT5hLmFfd2lkZV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IHdjaGFyX3QgKik7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGNhc2UgVFlQRV9QT0lOVEVSOgorKwlhcC0+YS5hX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHZvaWQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNpZ25lZCBjaGFyICopOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaG9ydCAqKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBpbnQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgZGVmYXVsdDoKKysJLyogVW5rbm93biB0eXBlLiAgKi8KKysJcmV0dXJuIC0xOworKyAgICAgIH0KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtYXJncy5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi1hcmdzLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42MDE3MTA2OTYgLTA0MDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX0FSR1NfSAorKyNkZWZpbmUgX1BSSU5URl9BUkdTX0gKKysKKysvKiBHZXQgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHdjaGFyX3QuICAqLworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyNlbmRpZgorKworKy8qIEdldCB3aW50X3QuICAqLworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKworKy8qIEFyZ3VtZW50IHR5cGVzICovCisrdHlwZWRlZiBlbnVtCisreworKyAgVFlQRV9OT05FLAorKyAgVFlQRV9TQ0hBUiwKKysgIFRZUEVfVUNIQVIsCisrICBUWVBFX1NIT1JULAorKyAgVFlQRV9VU0hPUlQsCisrICBUWVBFX0lOVCwKKysgIFRZUEVfVUlOVCwKKysgIFRZUEVfTE9OR0lOVCwKKysgIFRZUEVfVUxPTkdJTlQsCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICBUWVBFX0xPTkdMT05HSU5ULAorKyAgVFlQRV9VTE9OR0xPTkdJTlQsCisrI2VuZGlmCisrICBUWVBFX0RPVUJMRSwKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKyAgVFlQRV9MT05HRE9VQkxFLAorKyNlbmRpZgorKyAgVFlQRV9DSEFSLAorKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgVFlQRV9XSURFX0NIQVIsCisrI2VuZGlmCisrICBUWVBFX1NUUklORywKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICBUWVBFX1dJREVfU1RSSU5HLAorKyNlbmRpZgorKyAgVFlQRV9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUiwKKysgIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrLCBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVIKKysjZW5kaWYKKyt9IGFyZ190eXBlOworKworKy8qIFBvbHltb3JwaGljIGFyZ3VtZW50ICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBhcmdfdHlwZSB0eXBlOworKyAgdW5pb24KKysgIHsKKysgICAgc2lnbmVkIGNoYXIJCQlhX3NjaGFyOworKyAgICB1bnNpZ25lZCBjaGFyCQlhX3VjaGFyOworKyAgICBzaG9ydAkJCWFfc2hvcnQ7CisrICAgIHVuc2lnbmVkIHNob3J0CQlhX3VzaG9ydDsKKysgICAgaW50CQkJCWFfaW50OworKyAgICB1bnNpZ25lZCBpbnQJCWFfdWludDsKKysgICAgbG9uZyBpbnQJCQlhX2xvbmdpbnQ7CisrICAgIHVuc2lnbmVkIGxvbmcgaW50CQlhX3Vsb25naW50OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICBsb25nIGxvbmcgaW50CQlhX2xvbmdsb25naW50OworKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CWFfdWxvbmdsb25naW50OworKyNlbmRpZgorKyAgICBmbG9hdAkJCWFfZmxvYXQ7CisrICAgIGRvdWJsZQkJCWFfZG91YmxlOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgIGxvbmcgZG91YmxlCQkJYV9sb25nZG91YmxlOworKyNlbmRpZgorKyAgICBpbnQJCQkJYV9jaGFyOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgICB3aW50X3QJCQlhX3dpZGVfY2hhcjsKKysjZW5kaWYKKysgICAgY29uc3QgY2hhcioJCQlhX3N0cmluZzsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICAgIGNvbnN0IHdjaGFyX3QqCQlhX3dpZGVfc3RyaW5nOworKyNlbmRpZgorKyAgICB2b2lkKgkJCWFfcG9pbnRlcjsKKysgICAgc2lnbmVkIGNoYXIgKgkJYV9jb3VudF9zY2hhcl9wb2ludGVyOworKyAgICBzaG9ydCAqCQkJYV9jb3VudF9zaG9ydF9wb2ludGVyOworKyAgICBpbnQgKgkJCWFfY291bnRfaW50X3BvaW50ZXI7CisrICAgIGxvbmcgaW50ICoJCQlhX2NvdW50X2xvbmdpbnRfcG9pbnRlcjsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgbG9uZyBsb25nIGludCAqCQlhX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXI7CisrI2VuZGlmCisrICB9CisrICBhOworK30KKythcmd1bWVudDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGFyZ3VtZW50ICphcmc7CisrfQorK2FyZ3VtZW50czsKKysKKysKKysvKiBGZXRjaCB0aGUgYXJndW1lbnRzLCBwdXR0aW5nIHRoZW0gaW50byBhLiAqLworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZWxzZQorK2V4dGVybgorKyNlbmRpZgorK2ludCBwcmludGZfZmV0Y2hhcmdzICh2YV9saXN0IGFyZ3MsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfQVJHU19IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42MDc3MDk3ODQgLTA0MDAKK0BAIC0wLDAgKzEsMzcxIEBACisrLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLCB1c2luZyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZiAhSEFWRV9QT1NJWF9QUklOVEYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisrCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrCisrLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInByaW50Zi1hcmdzLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuYyIKKysKKysvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNucHJpbnRmIGxpYmludGxfdmFzbnByaW50ZgorKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisrI2lmIDAgLyogbm90IG5lZWRlZCAqLworKyNkZWZpbmUgYXNucHJpbnRmIGxpYmludGxfYXNucHJpbnRmCisrI2luY2x1ZGUgImFzbnByaW50Zi5jIgorKyNlbmRpZgorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdmZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaW50IHJldHZhbCA9IC0xOworKyAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKysJeworKwkgIGlmIChmd3JpdGUgKHJlc3VsdCwgMSwgbGVuZ3RoLCBzdHJlYW0pID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2ZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdnByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9wcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzcHJpbnRmIChjaGFyICpyZXN1bHRidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gdnNwcmludGYgKHJlc3VsdGJ1ZiwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGggPSAoc2l6ZV90KSB+MCAvICg0ICogc2l6ZW9mIChjaGFyKSk7CisrICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3NwcmludGYgKGNoYXIgKnJlc3VsdGJ1ZiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c3ByaW50ZiAocmVzdWx0YnVmLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNpZiBIQVZFX1NOUFJJTlRGCisrCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgX3ZzbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBzeXN0ZW1fdnNucHJpbnRmIHZzbnByaW50ZgorKyMgZW5kaWYKKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKHJlc3VsdGJ1ZiwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKysJeworKwkgIGlmIChtYXhsZW5ndGggPiAwKQorKwkgICAgeworKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorKwkJYWJvcnQgKCk7CisrCSAgICAgIG1lbWNweSAocmVzdWx0YnVmLCByZXN1bHQsIG1heGxlbmd0aCAtIDEpOworKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAnXDAnOworKwkgICAgfQorKwkgIGZyZWUgKHJlc3VsdCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gbGVuZ3RoOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNlbmRpZgorKworKyNpZiBIQVZFX0FTUFJJTlRGCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92YXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBzaXplX3QgbGVuZ3RoOworKyAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorKyAgICByZXR1cm4gLTE7CisrICAqcmVzdWx0cCA9IHJlc3VsdDsKKysgIHJldHVybiBsZW5ndGg7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfYXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3Zhc3ByaW50ZiAocmVzdWx0cCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjaWYgSEFWRV9GV1BSSU5URgorKworKyNpbmNsdWRlIDx3Y2hhci5oPgorKworKyNkZWZpbmUgV0lERV9DSEFSX1ZFUlNJT04gMQorKworKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ3cHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNud3ByaW50ZiBsaWJpbnRsX3Zhc253cHJpbnRmCisrI2luY2x1ZGUgInZhc25wcmludGYuYyIKKysjaWYgMCAvKiBub3QgbmVlZGVkICovCisrI2RlZmluZSBhc253cHJpbnRmIGxpYmludGxfYXNud3ByaW50ZgorKyNpbmNsdWRlICJhc25wcmludGYuYyIKKysjZW5kaWYKKysKKysjIGlmIEhBVkVfREVDTF9fU05XUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c3dwcmludGYgX3ZzbndwcmludGYKKysjIGVsc2UKKysgICAvKiBVbml4LiAgKi8KKysjICBkZWZpbmUgc3lzdGVtX3Zzd3ByaW50ZiB2c3dwcmludGYKKysjIGVuZGlmCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92ZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHdjc2NociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGg7CisrICAgICAgd2NoYXJfdCAqcmVzdWx0ID0gbGliaW50bF92YXNud3ByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpbnQgcmV0dmFsID0gLTE7CisrICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKwl7CisrCSAgc2l6ZV90IGk7CisrCSAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorKwkgICAgaWYgKGZwdXR3YyAocmVzdWx0W2ldLCBzdHJlYW0pID09IFdFT0YpCisrCSAgICAgIGJyZWFrOworKwkgIGlmIChpID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdmZ3cHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92d3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZ3cHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92d3ByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3Zzd3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBpZiAobWF4bGVuZ3RoID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGxlbmd0aCA8IG1heGxlbmd0aCkKKysJCWFib3J0ICgpOworKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCAobWF4bGVuZ3RoIC0gMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysJICAgICAgcmVzdWx0YnVmW21heGxlbmd0aCAtIDFdID0gMDsKKysJICAgIH0KKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3N3cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnN3cHJpbnRmIChyZXN1bHRidWYsIGxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtcGFyc2UuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtcGFyc2UuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjYyMjcwNzUwNCAtMDQwMAorQEAgLTAsMCArMSw1MzcgQEAKKysvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBHZXQgc2l6ZV90LCBOVUxMLiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IGludG1heF90LiAgKi8KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjIGluY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisrIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorKworKy8qIG1hbGxvYygpLCByZWFsbG9jKCksIGZyZWUoKS4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKy8qIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4gICovCisrI2luY2x1ZGUgInhzaXplLmgiCisrCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrI2Vsc2UKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgQ0hBUl9UIGNoYXIKKysjIGRlZmluZSBESVJFQ1RJVkUgY2hhcl9kaXJlY3RpdmUKKysjIGRlZmluZSBESVJFQ1RJVkVTIGNoYXJfZGlyZWN0aXZlcworKyNlbmRpZgorKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytpbnQKKytQUklOVEZfUEFSU0UgKGNvbnN0IENIQVJfVCAqZm9ybWF0LCBESVJFQ1RJVkVTICpkLCBhcmd1bWVudHMgKmEpCisreworKyAgY29uc3QgQ0hBUl9UICpjcCA9IGZvcm1hdDsJCS8qIHBvaW50ZXIgaW50byBmb3JtYXQgKi8KKysgIHNpemVfdCBhcmdfcG9zbiA9IDA7CQkvKiBudW1iZXIgb2YgcmVndWxhciBhcmd1bWVudHMgY29uc3VtZWQgKi8KKysgIHNpemVfdCBkX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgZC0+ZGlyICovCisrICBzaXplX3QgYV9hbGxvY2F0ZWQ7CQkJLyogYWxsb2NhdGVkIGVsZW1lbnRzIG9mIGEtPmFyZyAqLworKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGggPSAwOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMDsKKysKKysgIGQtPmNvdW50ID0gMDsKKysgIGRfYWxsb2NhdGVkID0gMTsKKysgIGQtPmRpciA9IG1hbGxvYyAoZF9hbGxvY2F0ZWQgKiBzaXplb2YgKERJUkVDVElWRSkpOworKyAgaWYgKGQtPmRpciA9PSBOVUxMKQorKyAgICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKysgICAgcmV0dXJuIC0xOworKworKyAgYS0+Y291bnQgPSAwOworKyAgYV9hbGxvY2F0ZWQgPSAwOworKyAgYS0+YXJnID0gTlVMTDsKKysKKysjZGVmaW5lIFJFR0lTVEVSX0FSRyhfaW5kZXhfLF90eXBlXykgXAorKyAgewkJCQkJCQkJCVwKKysgICAgc2l6ZV90IG4gPSAoX2luZGV4Xyk7CQkJCQkJXAorKyAgICBpZiAobiA+PSBhX2FsbG9jYXRlZCkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJc2l6ZV90IG1lbW9yeV9zaXplOwkJCQkJCVwKKysJYXJndW1lbnQgKm1lbW9yeTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwlhX2FsbG9jYXRlZCA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIDIpOwkJCQlcCisrCWlmIChhX2FsbG9jYXRlZCA8PSBuKQkJCQkJCVwKKysJICBhX2FsbG9jYXRlZCA9IHhzdW0gKG4sIDEpOwkJCQkJXAorKwltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIHNpemVvZiAoYXJndW1lbnQpKTsJCVwKKysJaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQlcCisrCSAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCQkJXAorKwkgIGdvdG8gZXJyb3I7CQkJCQkJCVwKKysJbWVtb3J5ID0gKGEtPmFyZwkJCQkJCVwKKysJCSAgPyByZWFsbG9jIChhLT5hcmcsIG1lbW9yeV9zaXplKQkJCVwKKysJCSAgOiBtYWxsb2MgKG1lbW9yeV9zaXplKSk7CQkJCVwKKysJaWYgKG1lbW9yeSA9PSBOVUxMKQkJCQkJCVwKKysJICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8JCQkJCQlcCisrCSAgZ290byBlcnJvcjsJCQkJCQkJXAorKwlhLT5hcmcgPSBtZW1vcnk7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKQkJCQkJCVwKKysgICAgICBhLT5hcmdbYS0+Y291bnQrK10udHlwZSA9IFRZUEVfTk9ORTsJCQkJXAorKyAgICBpZiAoYS0+YXJnW25dLnR5cGUgPT0gVFlQRV9OT05FKQkJCQkJXAorKyAgICAgIGEtPmFyZ1tuXS50eXBlID0gKF90eXBlXyk7CQkJCQlcCisrICAgIGVsc2UgaWYgKGEtPmFyZ1tuXS50eXBlICE9IChfdHlwZV8pKQkJCQlcCisrICAgICAgLyogQW1iaWd1b3VzIHR5cGUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLwkJCVwKKysgICAgICBnb3RvIGVycm9yOwkJCQkJCQlcCisrICB9CisrCisrICB3aGlsZSAoKmNwICE9ICdcMCcpCisrICAgIHsKKysgICAgICBDSEFSX1QgYyA9ICpjcCsrOworKyAgICAgIGlmIChjID09ICclJykKKysJeworKwkgIHNpemVfdCBhcmdfaW5kZXggPSBBUkdfTk9ORTsKKysJICBESVJFQ1RJVkUgKmRwID0gJmQtPmRpcltkLT5jb3VudF07LyogcG9pbnRlciB0byBuZXh0IGRpcmVjdGl2ZSAqLworKworKwkgIC8qIEluaXRpYWxpemUgdGhlIG5leHQgZGlyZWN0aXZlLiAgKi8KKysJICBkcC0+ZGlyX3N0YXJ0ID0gY3AgLSAxOworKwkgIGRwLT5mbGFncyA9IDA7CisrCSAgZHAtPndpZHRoX3N0YXJ0ID0gTlVMTDsKKysJICBkcC0+d2lkdGhfZW5kID0gTlVMTDsKKysJICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IE5VTEw7CisrCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBOVUxMOworKwkgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPmFyZ19pbmRleCA9IEFSR19OT05FOworKworKwkgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworKwkgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJOworKwkgICAgICBpZiAoKm5wID09ICckJykKKysJCXsKKysJCSAgc2l6ZV90IG4gPSAwOworKworKwkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCSAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisrCQkgIGlmIChuID09IDApCisrCQkgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCSAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBhcmdfaW5kZXggPSBuIC0gMTsKKysJCSAgY3AgPSBucCArIDE7CisrCQl9CisrCSAgICB9CisrCisrCSAgLyogUmVhZCB0aGUgZmxhZ3MuICAqLworKwkgIGZvciAoOzspCisrCSAgICB7CisrCSAgICAgIGlmICgqY3AgPT0gJ1wnJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfR1JPVVA7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnLScpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX0xFRlQ7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnKycpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX1NIT1dTSUdOOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJyAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19TUEFDRTsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICcjJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfQUxUOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJzAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19aRVJPOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgZmllbGQgd2lkdGguICAqLworKwkgIGlmICgqY3AgPT0gJyonKQorKwkgICAgeworKwkgICAgICBkcC0+d2lkdGhfc3RhcnQgPSBjcDsKKysJICAgICAgY3ArKzsKKysJICAgICAgZHAtPndpZHRoX2VuZCA9IGNwOworKwkgICAgICBpZiAobWF4X3dpZHRoX2xlbmd0aCA8IDEpCisrCQltYXhfd2lkdGhfbGVuZ3RoID0gMTsKKysKKysJICAgICAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisrCSAgICAgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCQl7CisrCQkgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCQkgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJICAgIDsKKysJCSAgaWYgKCpucCA9PSAnJCcpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG4gPSAwOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJbiA9IHhzdW0gKHh0aW1lcyAobiwgMTApLCAqbnAgLSAnMCcpOworKwkJICAgICAgaWYgKG4gPT0gMCkKKysJCQkvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworKwkJCWdvdG8gZXJyb3I7CisrCQkgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCQlnb3RvIGVycm9yOworKwkJICAgICAgZHAtPndpZHRoX2FyZ19pbmRleCA9IG4gLSAxOworKwkJICAgICAgY3AgPSBucCArIDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCXsKKysJCSAgZHAtPndpZHRoX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CisrCQkgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIC8qIGFyZ19wb3NuIHdyYXBwZWQgYXJvdW5kLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJfQorKwkgICAgICBSRUdJU1RFUl9BUkcgKGRwLT53aWR0aF9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJICAgIH0KKysJICBlbHNlIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCB3aWR0aF9sZW5ndGg7CisrCisrCSAgICAgIGRwLT53aWR0aF9zdGFydCA9IGNwOworKwkgICAgICBmb3IgKDsgKmNwID49ICcwJyAmJiAqY3AgPD0gJzknOyBjcCsrKQorKwkJOworKwkgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisrCSAgICAgIHdpZHRoX2xlbmd0aCA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCSAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgd2lkdGhfbGVuZ3RoKQorKwkJbWF4X3dpZHRoX2xlbmd0aCA9IHdpZHRoX2xlbmd0aDsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgcHJlY2lzaW9uLiAgKi8KKysJICBpZiAoKmNwID09ICcuJykKKysJICAgIHsKKysJICAgICAgY3ArKzsKKysJICAgICAgaWYgKCpjcCA9PSAnKicpCisrCQl7CisrCQkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBjcCAtIDE7CisrCQkgIGNwKys7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IDIpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAyOworKworKwkJICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKysJCSAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKysJCSAgICB7CisrCQkgICAgICBjb25zdCBDSEFSX1QgKm5wOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJOworKwkJICAgICAgaWYgKCpucCA9PSAnJCcpCisrCQkJeworKwkJCSAgc2l6ZV90IG4gPSAwOworKworKwkJCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJICAgIG4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKysJCQkgIGlmIChuID09IDApCisrCQkJICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkgICAgLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeQorKwkJCSAgICAgICBsYXRlci4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IG4gLSAxOworKwkJCSAgY3AgPSBucCArIDE7CisrCQkJfQorKwkJICAgIH0KKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIHsKKysJCSAgICAgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKKysJCSAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCQkvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisrCQkJZ290byBlcnJvcjsKKysJCSAgICB9CisrCQkgIFJFR0lTVEVSX0FSRyAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBzaXplX3QgcHJlY2lzaW9uX2xlbmd0aDsKKysKKysJCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IGNwIC0gMTsKKysJCSAgZm9yICg7ICpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JzsgY3ArKykKKysJCSAgICA7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIHByZWNpc2lvbl9sZW5ndGggPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IHByZWNpc2lvbl9sZW5ndGgpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSBwcmVjaXNpb25fbGVuZ3RoOworKwkJfQorKwkgICAgfQorKworKwkgIHsKKysJICAgIGFyZ190eXBlIHR5cGU7CisrCisrCSAgICAvKiBQYXJzZSBhcmd1bWVudCB0eXBlL3NpemUgc3BlY2lmaWVycy4gICovCisrCSAgICB7CisrCSAgICAgIGludCBmbGFncyA9IDA7CisrCisrCSAgICAgIGZvciAoOzspCisrCQl7CisrCQkgIGlmICgqY3AgPT0gJ2gnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9ICgxIDw8IChmbGFncyAmIDEpKTsKKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ0wnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9IDQ7CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoKmNwID09ICdsJykKKysJCSAgICB7CisrCQkgICAgICBmbGFncyArPSA4OworKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2lmZGVmIEhBVkVfSU5UTUFYX1QKKysJCSAgZWxzZSBpZiAoKmNwID09ICdqJykKKysJCSAgICB7CisrCQkgICAgICBpZiAoc2l6ZW9mIChpbnRtYXhfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIGludG1heF90ID0gbG9uZyBsb25nICovCisrCQkJICBmbGFncyArPSAxNjsKKysJCQl9CisrCQkgICAgICBlbHNlIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBpbnRtYXhfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2VuZGlmCisrCQkgIGVsc2UgaWYgKCpjcCA9PSAneicgfHwgKmNwID09ICdaJykKKysJCSAgICB7CisrCQkgICAgICAvKiAneicgaXMgc3RhbmRhcmRpemVkIGluIElTTyBDIDk5LCBidXQgZ2xpYmMgdXNlcyAnWicKKysJCQkgYmVjYXVzZSB0aGUgd2FybmluZyBmYWNpbGl0eSBpbiBnY2MtMi45NS4yIHVuZGVyc3RhbmRzCisrCQkJIG9ubHkgJ1onIChzZWUgZ2NjLTIuOTUuMi9nY2MvYy1jb21tb24uYzoxNzg0KS4gICovCisrCQkgICAgICBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChsb25nKSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nIGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDE2OworKwkJCX0KKysJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAoc2l6ZV90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nICovCisrCQkJICBmbGFncyArPSA4OworKwkJCX0KKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ3QnKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gMTY7CisrCQkJfQorKwkJICAgICAgZWxzZSBpZiAoc2l6ZW9mIChwdHJkaWZmX3QpID4gc2l6ZW9mIChpbnQpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICBicmVhazsKKysJCX0KKysKKysJICAgICAgLyogUmVhZCB0aGUgY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLworKwkgICAgICBjID0gKmNwKys7CisrCSAgICAgIHN3aXRjaCAoYykKKysJCXsKKysJCWNhc2UgJ2QnOiBjYXNlICdpJzoKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdJTlQ7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMikKKysJCSAgICB0eXBlID0gVFlQRV9TQ0hBUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorKwkJICAgIHR5cGUgPSBUWVBFX1NIT1JUOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ28nOiBjYXNlICd1JzogY2FzZSAneCc6IGNhc2UgJ1gnOgorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisrCQkgICAgdHlwZSA9IFRZUEVfVUxPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX1VMT05HSU5UOworKwkJICBlbHNlIGlmIChmbGFncyAmIDIpCisrCQkgICAgdHlwZSA9IFRZUEVfVUNIQVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9VU0hPUlQ7CisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9VSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ2YnOiBjYXNlICdGJzogY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQljYXNlICdhJzogY2FzZSAnQSc6CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdET1VCTEU7CisrCQkgIGVsc2UKKysjZW5kaWYKKysJCSAgdHlwZSA9IFRZUEVfRE9VQkxFOworKwkJICBicmVhazsKKysJCWNhc2UgJ2MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysJCSAgICB0eXBlID0gVFlQRV9XSURFX0NIQVI7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ0hBUjsKKysJCSAgYnJlYWs7CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrCQljYXNlICdDJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworKwkJICBjID0gJ2MnOworKwkJICBicmVhazsKKysjZW5kaWYKKysJCWNhc2UgJ3MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQkgICAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfU1RSSU5HOworKwkJICBicmVhazsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQljYXNlICdTJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrCQkgIGMgPSAncyc7CisrCQkgIGJyZWFrOworKyNlbmRpZgorKwkJY2FzZSAncCc6CisrCQkgIHR5cGUgPSBUWVBFX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnbic6CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfSU5UX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnJSc6CisrCQkgIHR5cGUgPSBUWVBFX05PTkU7CisrCQkgIGJyZWFrOworKwkJZGVmYXVsdDoKKysJCSAgLyogVW5rbm93biBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCisrCQkgIGdvdG8gZXJyb3I7CisrCQl9CisrCSAgICB9CisrCisrCSAgICBpZiAodHlwZSAhPSBUWVBFX05PTkUpCisrCSAgICAgIHsKKysJCWRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7CisrCQlpZiAoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCSAgeworKwkJICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfcG9zbisrOworKwkJICAgIGlmIChkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgICAgLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworKwkJICAgICAgZ290byBlcnJvcjsKKysJCSAgfQorKwkJUkVHSVNURVJfQVJHIChkcC0+YXJnX2luZGV4LCB0eXBlKTsKKysJICAgICAgfQorKwkgICAgZHAtPmNvbnZlcnNpb24gPSBjOworKwkgICAgZHAtPmRpcl9lbmQgPSBjcDsKKysJICB9CisrCisrCSAgZC0+Y291bnQrKzsKKysJICBpZiAoZC0+Y291bnQgPj0gZF9hbGxvY2F0ZWQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtZW1vcnlfc2l6ZTsKKysJICAgICAgRElSRUNUSVZFICptZW1vcnk7CisrCisrCSAgICAgIGRfYWxsb2NhdGVkID0geHRpbWVzIChkX2FsbG9jYXRlZCwgMik7CisrCSAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChkX2FsbG9jYXRlZCwgc2l6ZW9mIChESVJFQ1RJVkUpKTsKKysJICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQorKwkJLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBtZW1vcnkgPSByZWFsbG9jIChkLT5kaXIsIG1lbW9yeV9zaXplKTsKKysJICAgICAgaWYgKG1lbW9yeSA9PSBOVUxMKQorKwkJLyogT3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBkLT5kaXIgPSBtZW1vcnk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgZC0+ZGlyW2QtPmNvdW50XS5kaXJfc3RhcnQgPSBjcDsKKysKKysgIGQtPm1heF93aWR0aF9sZW5ndGggPSBtYXhfd2lkdGhfbGVuZ3RoOworKyAgZC0+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKysgIHJldHVybiAwOworKworK2Vycm9yOgorKyAgaWYgKGEtPmFyZykKKysgICAgZnJlZSAoYS0+YXJnKTsKKysgIGlmIChkLT5kaXIpCisrICAgIGZyZWUgKGQtPmRpcik7CisrICByZXR1cm4gLTE7CisrfQorKworKyN1bmRlZiBESVJFQ1RJVkVTCisrI3VuZGVmIERJUkVDVElWRQorKyN1bmRlZiBDSEFSX1QKKysjdW5kZWYgUFJJTlRGX1BBUlNFCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLXBhcnNlLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42Mjg3MDY1OTIgLTA0MDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBQYXJzZSBwcmludGYgZm9ybWF0IHN0cmluZy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKysjZGVmaW5lIF9QUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCBjaGFyKiBkaXJfc3RhcnQ7CisrICBjb25zdCBjaGFyKiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3QgY2hhciogd2lkdGhfc3RhcnQ7CisrICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgY2hhciBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK2NoYXJfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgY2hhcl9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKytjaGFyX2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfUEFSU0VfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3JlZi1hZGQuc2luCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlZi1hZGQuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjMzNzA1ODMyIC0wNDAwCitAQCAtMCwwICsxLDMxIEBACisrIyBBZGQgdGhpcyBwYWNrYWdlIHRvIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICB0YQorKyAgOmEKKysgIHMvIEBQQUNLQUdFQCAvIEBQQUNLQUdFQCAvCisrICB0YgorKyAgcy8gJC8gQFBBQ0tBR0VAIC8KKysgIDpiCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWYtZGVsLnNpbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWYtZGVsLnNpbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjYzODcwNTA3MiAtMDQwMAorQEAgLTAsMCArMSwyNiBAQAorKyMgUmVtb3ZlIHRoaXMgcGFja2FnZSBmcm9tIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICBzLyBAUEFDS0FHRUAgLyAvCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWxvY2F0YWJsZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlbG9jYXRhYmxlLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NDQ3MDQxNjAgLTA0MDAKK0BAIC0wLDAgKzEsNDQ5IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgZ2V0bGluZSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysKKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2lmZGVmIE5PX1hNQUxMT0MKKysjIGRlZmluZSB4bWFsbG9jIG1hbGxvYworKyNlbHNlCisrIyBpbmNsdWRlICJ4YWxsb2MuaCIKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKysjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisrIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisrI2VuZGlmCisrCisrI2lmIERFUEVORFNfT05fTElCQ0hBUlNFVAorKyMgaW5jbHVkZSA8bGliY2hhcnNldC5oPgorKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklDT05WICYmIEhBVkVfSUNPTlYKKysjIGluY2x1ZGUgPGljb252Lmg+CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSU5UTCAmJiBFTkFCTEVfTkxTCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2VuZGlmCisrCisrLyogRmFrZWQgY2hlYXAgJ2Jvb2wnLiAgKi8KKysjdW5kZWYgYm9vbAorKyN1bmRlZiBmYWxzZQorKyN1bmRlZiB0cnVlCisrI2RlZmluZSBib29sIGludAorKyNkZWZpbmUgZmFsc2UgMAorKyNkZWZpbmUgdHJ1ZSAxCisrCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIFwKKysgICAgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMIHx8IHN0cmNociAoUCwgJ1xcJykgIT0gTlVMTCB8fCBIQVNfREVWSUNFIChQKSkKKysjIGRlZmluZSBGSUxFU1lTVEVNX1BSRUZJWF9MRU4oUCkgKEhBU19ERVZJQ0UgKFApID8gMiA6IDApCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMKQorKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAwCisrI2VuZGlmCisrCisrLyogT3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKm9yaWdfcHJlZml4OworK3N0YXRpYyBzaXplX3Qgb3JpZ19wcmVmaXhfbGVuOworKy8qIEN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKmN1cnJfcHJlZml4OworK3N0YXRpYyBzaXplX3QgY3Vycl9wcmVmaXhfbGVuOworKy8qIFRoZXNlIHByZWZpeGVzIGRvIG5vdCBlbmQgaW4gYSBzbGFzaC4gIEFueXRoaW5nIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQKKysgICB0byB0aGVtIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGlzIG1vZHVsZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrc3RhdGljIHZvaWQKKytzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLAorKwkJCSAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgaWYgKG9yaWdfcHJlZml4X2FyZyAhPSBOVUxMICYmIGN1cnJfcHJlZml4X2FyZyAhPSBOVUxMCisrICAgICAgLyogT3B0aW1pemF0aW9uOiBpZiBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggYXJlIGVxdWFsLCB0aGUKKysJIHJlbG9jYXRpb24gaXMgYSBub3AuICAqLworKyAgICAgICYmIHN0cmNtcCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpICE9IDApCisrICAgIHsKKysgICAgICAvKiBEdXBsaWNhdGUgdGhlIGFyZ3VtZW50IHN0cmluZ3MuICAqLworKyAgICAgIGNoYXIgKm1lbW9yeTsKKysKKysgICAgICBvcmlnX3ByZWZpeF9sZW4gPSBzdHJsZW4gKG9yaWdfcHJlZml4X2FyZyk7CisrICAgICAgY3Vycl9wcmVmaXhfbGVuID0gc3RybGVuIChjdXJyX3ByZWZpeF9hcmcpOworKyAgICAgIG1lbW9yeSA9IChjaGFyICopIHhtYWxsb2MgKG9yaWdfcHJlZml4X2xlbiArIDEgKyBjdXJyX3ByZWZpeF9sZW4gKyAxKTsKKysjaWZkZWYgTk9fWE1BTExPQworKyAgICAgIGlmIChtZW1vcnkgIT0gTlVMTCkKKysjZW5kaWYKKysJeworKwkgIG1lbWNweSAobWVtb3J5LCBvcmlnX3ByZWZpeF9hcmcsIG9yaWdfcHJlZml4X2xlbiArIDEpOworKwkgIG9yaWdfcHJlZml4ID0gbWVtb3J5OworKwkgIG1lbW9yeSArPSBvcmlnX3ByZWZpeF9sZW4gKyAxOworKwkgIG1lbWNweSAobWVtb3J5LCBjdXJyX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2xlbiArIDEpOworKwkgIGN1cnJfcHJlZml4ID0gbWVtb3J5OworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrICBvcmlnX3ByZWZpeCA9IE5VTEw7CisrICBjdXJyX3ByZWZpeCA9IE5VTEw7CisrICAvKiBEb24ndCB3b3JyeSBhYm91dCB3YXN0ZWQgbWVtb3J5IGhlcmUgLSB0aGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgb25seQorKyAgICAgY2FsbGVkIG9uY2UuICAqLworK30KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrdm9pZAorK3NldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLCBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgc2V0X3RoaXNfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKysKKysgIC8qIE5vdyBub3RpZnkgYWxsIGRlcGVuZGVudCBsaWJyYXJpZXMuICAqLworKyNpZiBERVBFTkRTX09OX0xJQkNIQVJTRVQKKysgIGxpYmNoYXJzZXRfc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OViAmJiBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDkKKysgIGxpYmljb252X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklOVEwgJiYgRU5BQkxFX05MUyAmJiBkZWZpbmVkIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4CisrICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorK30KKysKKysjaWYgIWRlZmluZWQgSU5fTElCUkFSWSB8fCAoZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSKQorKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKysjaWZkZWYgSU5fTElCUkFSWQorKyNkZWZpbmUgY29tcHV0ZV9jdXJyX3ByZWZpeCBsb2NhbF9jb21wdXRlX2N1cnJfcHJlZml4Cisrc3RhdGljCisrI2VuZGlmCisrY29uc3QgY2hhciAqCisrY29tcHV0ZV9jdXJyX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorKwkJICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkgICAgIGNvbnN0IGNoYXIgKmN1cnJfcGF0aG5hbWUpCisreworKyAgY29uc3QgY2hhciAqY3Vycl9pbnN0YWxsZGlyOworKyAgY29uc3QgY2hhciAqcmVsX2luc3RhbGxkaXI7CisrCisrICBpZiAoY3Vycl9wYXRobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIERldGVybWluZSB0aGUgcmVsYXRpdmUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHByZWZpeC4KKysgICAgIFRoaXMgaXMgc2ltcGx5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZ19pbnN0YWxscHJlZml4IGFuZAorKyAgICAgb3JpZ19pbnN0YWxsZGlyLiAgKi8KKysgIGlmIChzdHJuY21wIChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpKQorKyAgICAgICE9IDApCisrICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gLSBub3RoaW5nIHNob3VsZCBiZSBpbnN0YWxsZWQgb3V0c2lkZSAkKHByZWZpeCkuICAqLworKyAgICByZXR1cm4gTlVMTDsKKysgIHJlbF9pbnN0YWxsZGlyID0gb3JpZ19pbnN0YWxsZGlyICsgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpOworKworKyAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICAqLworKyAgeworKyAgICBjb25zdCBjaGFyICpwX2Jhc2UgPSBjdXJyX3BhdGhuYW1lICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX3BhdGhuYW1lKTsKKysgICAgY29uc3QgY2hhciAqcCA9IGN1cnJfcGF0aG5hbWUgKyBzdHJsZW4gKGN1cnJfcGF0aG5hbWUpOworKyAgICBjaGFyICpxOworKworKyAgICB3aGlsZSAocCA+IHBfYmFzZSkKKysgICAgICB7CisrCXAtLTsKKysJaWYgKElTU0xBU0ggKCpwKSkKKysJICBicmVhazsKKysgICAgICB9CisrCisrICAgIHEgPSAoY2hhciAqKSB4bWFsbG9jIChwIC0gY3Vycl9wYXRobmFtZSArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgIGlmIChxID09IE5VTEwpCisrICAgICAgcmV0dXJuIE5VTEw7CisrI2VuZGlmCisrICAgIG1lbWNweSAocSwgY3Vycl9wYXRobmFtZSwgcCAtIGN1cnJfcGF0aG5hbWUpOworKyAgICBxW3AgLSBjdXJyX3BhdGhuYW1lXSA9ICdcMCc7CisrICAgIGN1cnJfaW5zdGFsbGRpciA9IHE7CisrICB9CisrCisrICAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggYnkgcmVtb3ZpbmcgdGhlIHRyYWlsaW5nCisrICAgICByZWxfaW5zdGFsbGRpciBmcm9tIGl0LiAgKi8KKysgIHsKKysgICAgY29uc3QgY2hhciAqcnAgPSByZWxfaW5zdGFsbGRpciArIHN0cmxlbiAocmVsX2luc3RhbGxkaXIpOworKyAgICBjb25zdCBjaGFyICpjcCA9IGN1cnJfaW5zdGFsbGRpciArIHN0cmxlbiAoY3Vycl9pbnN0YWxsZGlyKTsKKysgICAgY29uc3QgY2hhciAqY3BfYmFzZSA9CisrICAgICAgY3Vycl9pbnN0YWxsZGlyICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX2luc3RhbGxkaXIpOworKworKyAgICB3aGlsZSAocnAgPiByZWxfaW5zdGFsbGRpciAmJiBjcCA+IGNwX2Jhc2UpCisrICAgICAgeworKwlib29sIHNhbWUgPSBmYWxzZTsKKysJY29uc3QgY2hhciAqcnBpID0gcnA7CisrCWNvbnN0IGNoYXIgKmNwaSA9IGNwOworKworKwl3aGlsZSAocnBpID4gcmVsX2luc3RhbGxkaXIgJiYgY3BpID4gY3BfYmFzZSkKKysJICB7CisrCSAgICBycGktLTsKKysJICAgIGNwaS0tOworKwkgICAgaWYgKElTU0xBU0ggKCpycGkpIHx8IElTU0xBU0ggKCpjcGkpKQorKwkgICAgICB7CisrCQlpZiAoSVNTTEFTSCAoKnJwaSkgJiYgSVNTTEFTSCAoKmNwaSkpCisrCQkgIHNhbWUgPSB0cnVlOworKwkJYnJlYWs7CisrCSAgICAgIH0KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrCSAgICAvKiBXaW4zMiwgT1MvMiwgRE9TIC0gY2FzZSBpbnNpZ25pZmljYW50IGZpbGVzeXN0ZW0gKi8KKysJICAgIGlmICgoKnJwaSA+PSAnYScgJiYgKnJwaSA8PSAneicgPyAqcnBpIC0gJ2EnICsgJ0EnIDogKnJwaSkKKysJCSE9ICgqY3BpID49ICdhJyAmJiAqY3BpIDw9ICd6JyA/ICpjcGkgLSAnYScgKyAnQScgOiAqY3BpKSkKKysJICAgICAgYnJlYWs7CisrI2Vsc2UKKysJICAgIGlmICgqcnBpICE9ICpjcGkpCisrCSAgICAgIGJyZWFrOworKyNlbmRpZgorKwkgIH0KKysJaWYgKCFzYW1lKQorKwkgIGJyZWFrOworKwkvKiBUaGUgbGFzdCBwYXRobmFtZSBjb21wb25lbnQgd2FzIHRoZSBzYW1lLiAgb3BpIGFuZCBjcGkgbm93IHBvaW50CisrCSAgIHRvIHRoZSBzbGFzaCBiZWZvcmUgaXQuICAqLworKwlycCA9IHJwaTsKKysJY3AgPSBjcGk7CisrICAgICAgfQorKworKyAgICBpZiAocnAgPiByZWxfaW5zdGFsbGRpcikKKysgICAgICAvKiBVbmV4cGVjdGVkOiBUaGUgY3Vycl9pbnN0YWxsZGlyIGRvZXMgbm90IGVuZCB3aXRoIHJlbF9pbnN0YWxsZGlyLiAgKi8KKysgICAgICByZXR1cm4gTlVMTDsKKysKKysgICAgeworKyAgICAgIHNpemVfdCBjdXJyX3ByZWZpeF9sZW4gPSBjcCAtIGN1cnJfaW5zdGFsbGRpcjsKKysgICAgICBjaGFyICpjdXJyX3ByZWZpeDsKKysKKysgICAgICBjdXJyX3ByZWZpeCA9IChjaGFyICopIHhtYWxsb2MgKGN1cnJfcHJlZml4X2xlbiArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgICAgaWYgKGN1cnJfcHJlZml4ID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbmRpZgorKyAgICAgIG1lbWNweSAoY3Vycl9wcmVmaXgsIGN1cnJfaW5zdGFsbGRpciwgY3Vycl9wcmVmaXhfbGVuKTsKKysgICAgICBjdXJyX3ByZWZpeFtjdXJyX3ByZWZpeF9sZW5dID0gJ1wwJzsKKysKKysgICAgICByZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgIH0KKysgIH0KKyt9CisrCisrI2VuZGlmIC8qICFJTl9MSUJSQVJZIHx8IFBJQyAqLworKworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysKKysvKiBGdWxsIHBhdGhuYW1lIG9mIHNoYXJlZCBsaWJyYXJ5LCBvciBOVUxMLiAgKi8KKytzdGF0aWMgY2hhciAqc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrCisrLyogRGV0ZXJtaW5lIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB3aGVuIGl0IGlzIGxvYWRlZC4gICovCisrCisrQk9PTCBXSU5BUEkKKytEbGxNYWluIChISU5TVEFOQ0UgbW9kdWxlX2hhbmRsZSwgRFdPUkQgZXZlbnQsIExQVk9JRCByZXNlcnZlZCkKKyt7CisrICAodm9pZCkgcmVzZXJ2ZWQ7CisrCisrICBpZiAoZXZlbnQgPT0gRExMX1BST0NFU1NfQVRUQUNIKQorKyAgICB7CisrICAgICAgLyogVGhlIERMTCBpcyBiZWluZyBsb2FkZWQgaW50byBhbiBhcHBsaWNhdGlvbidzIGFkZHJlc3MgcmFuZ2UuICAqLworKyAgICAgIHN0YXRpYyBjaGFyIGxvY2F0aW9uW01BWF9QQVRIXTsKKysKKysgICAgICBpZiAoIUdldE1vZHVsZUZpbGVOYW1lIChtb2R1bGVfaGFuZGxlLCBsb2NhdGlvbiwgc2l6ZW9mIChsb2NhdGlvbikpKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIGlmICghSVNfUEFUSF9XSVRIX0RJUiAobG9jYXRpb24pKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gc3RyZHVwIChsb2NhdGlvbik7CisrICAgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysjZWxzZSAvKiBVbml4ICovCisrCisrc3RhdGljIHZvaWQKKytmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpCisreworKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiBfX0dMSUJDX18gPj0gMgorKyAgLyogTGludXggaGFzIC9wcm9jL3NlbGYvbWFwcy4gZ2xpYmMgMiBoYXMgdGhlIGdldGxpbmUoKSBmdW5jdGlvbi4gICovCisrICBGSUxFICpmcDsKKysKKysgIC8qIE9wZW4gdGhlIGN1cnJlbnQgcHJvY2VzcycgbWFwcyBmaWxlLiAgSXQgZGVzY3JpYmVzIG9uZSBWTUEgcGVyIGxpbmUuICAqLworKyAgZnAgPSBmb3BlbiAoIi9wcm9jL3NlbGYvbWFwcyIsICJyIik7CisrICBpZiAoZnApCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgJmZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrICAgICAgZm9yICg7OykKKysJeworKwkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKysJICBpbnQgYzsKKysKKysJICBpZiAoZnNjYW5mIChmcCwgIiVseC0lbHgiLCAmc3RhcnQsICZlbmQpICE9IDIpCisrCSAgICBicmVhazsKKysJICBpZiAoYWRkcmVzcyA+PSBzdGFydCAmJiBhZGRyZXNzIDw9IGVuZCAtIDEpCisrCSAgICB7CisrCSAgICAgIC8qIEZvdW5kIGl0LiAgTm93IHNlZSBpZiB0aGlzIGxpbmUgY29udGFpbnMgYSBmaWxlbmFtZS4gICovCisrCSAgICAgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicgJiYgYyAhPSAnLycpCisrCQljb250aW51ZTsKKysJICAgICAgaWYgKGMgPT0gJy8nKQorKwkJeworKwkJICBzaXplX3Qgc2l6ZTsKKysJCSAgaW50IGxlbjsKKysKKysJCSAgdW5nZXRjIChjLCBmcCk7CisrCQkgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gTlVMTDsgc2l6ZSA9IDA7CisrCQkgIGxlbiA9IGdldGxpbmUgKCZzaGFyZWRfbGlicmFyeV9mdWxsbmFtZSwgJnNpemUsIGZwKTsKKysJCSAgaWYgKGxlbiA+PSAwKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFN1Y2Nlc3M6IGZpbGxlZCBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZS4gICovCisrCQkgICAgICBpZiAobGVuID4gMCAmJiBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZVtsZW4gLSAxXSA9PSAnXG4nKQorKwkJCXNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID0gJ1wwJzsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicpCisrCSAgICBjb250aW51ZTsKKysJfQorKyAgICAgIGZjbG9zZSAoZnApOworKyAgICB9CisrI2VuZGlmCisrfQorKworKyNlbmRpZiAvKiBXSU4zMiAvIFVuaXggKi8KKysKKysvKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCisrICAgUmV0dXJuIE5VTEwgaWYgdW5rbm93bi4KKysgICBHdWFyYW50ZWVkIHRvIHdvcmsgb25seSBvbiBMaW51eCBhbmQgV29lMzIuICAqLworK3N0YXRpYyBjaGFyICoKKytnZXRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKKyt7CisrI2lmICEoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pCisrICBzdGF0aWMgYm9vbCB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworKyAgaWYgKCF0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lKQorKyAgICB7CisrICAgICAgZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKTsKKysgICAgICB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gdHJ1ZTsKKysgICAgfQorKyNlbmRpZgorKyAgcmV0dXJuIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworK30KKysKKysjZW5kaWYgLyogUElDICovCisrCisrLyogUmV0dXJucyB0aGUgcGF0aG5hbWUsIHJlbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uCisrICAgZGlyZWN0b3J5LiAgKi8KKytjb25zdCBjaGFyICoKKytyZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpCisreworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisrCisrICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciBhIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKysgIGlmICghaW5pdGlhbGl6ZWQpCisrICAgIHsKKysgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggbGlrZWx5IGhhdmUgYWxyZWFkeSBiZWVuCisrCSBzZXQgdGhyb3VnaCB0aGUgbWFpbiBwcm9ncmFtJ3Mgc2V0X3Byb2dyYW1fbmFtZV9hbmRfaW5zdGFsbGRpcgorKwkgZnVuY3Rpb24uICBUaGlzIGlzIHN1ZmZpY2llbnQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgbGlicmFyeSBoYXMKKysJIGluaXRpYWxseSBiZWVuIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBvcmlnX3ByZWZpeC4gIEJ1dCB3ZSBjYW4gZG8KKysJIGJldHRlciwgdG8gYWxzbyBjb3ZlciB0aGUgY2FzZXMgdGhhdCAxLiBpdCBoYXMgYmVlbiBpbnN0YWxsZWQKKysJIGluIGEgZGlmZmVyZW50IHByZWZpeCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gb3JpZ19wcmVmaXggYW5kIChsYXRlcikKKysJIHRvIGN1cnJfcHJlZml4LCAyLiB1bmxpa2UgdGhlIHByb2dyYW0sIGl0IGhhcyBub3QgbW92ZWQgYXdheSBmcm9tCisrCSBvcmlnX3ByZWZpeC4gICovCisrICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4ID0gSU5TVEFMTFBSRUZJWDsKKysgICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIgPSBJTlNUQUxMRElSOworKyAgICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2JldHRlcjsKKysKKysgICAgICBjdXJyX3ByZWZpeF9iZXR0ZXIgPQorKwljb21wdXRlX2N1cnJfcHJlZml4IChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwKKysJCQkgICAgIGdldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKSk7CisrICAgICAgaWYgKGN1cnJfcHJlZml4X2JldHRlciA9PSBOVUxMKQorKwljdXJyX3ByZWZpeF9iZXR0ZXIgPSBjdXJyX3ByZWZpeDsKKysKKysgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgY3Vycl9wcmVmaXhfYmV0dGVyKTsKKysKKysgICAgICBpbml0aWFsaXplZCA9IDE7CisrICAgIH0KKysjZW5kaWYKKysKKysgIC8qIE5vdGU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaGVyZSwKKysgICAgIGV2ZW4gZm9yIERPUy1saWtlIGZpbGVzeXN0ZW1zLCBiZWNhdXNlIHRoZSBwYXRobmFtZSBhcmd1bWVudCB3YXMKKysgICAgIHR5cGljYWxseSBjcmVhdGVkIGZyb20gdGhlIHNhbWUgTWFrZWZpbGUgdmFyaWFibGUgYXMgb3JpZ19wcmVmaXggY2FtZQorKyAgICAgZnJvbS4gICovCisrICBpZiAob3JpZ19wcmVmaXggIT0gTlVMTCAmJiBjdXJyX3ByZWZpeCAhPSBOVUxMCisrICAgICAgJiYgc3RybmNtcCAocGF0aG5hbWUsIG9yaWdfcHJlZml4LCBvcmlnX3ByZWZpeF9sZW4pID09IDApCisrICAgIHsKKysgICAgICBpZiAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSA9PSAnXDAnKQorKwkvKiBwYXRobmFtZSBlcXVhbHMgb3JpZ19wcmVmaXguICAqLworKwlyZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgICAgaWYgKElTU0xBU0ggKHBhdGhuYW1lW29yaWdfcHJlZml4X2xlbl0pKQorKwl7CisrCSAgLyogcGF0aG5hbWUgc3RhcnRzIHdpdGggb3JpZ19wcmVmaXguICAqLworKwkgIGNvbnN0IGNoYXIgKnBhdGhuYW1lX3RhaWwgPSAmcGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXTsKKysJICBjaGFyICpyZXN1bHQgPQorKwkgICAgKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgc3RybGVuIChwYXRobmFtZV90YWlsKSArIDEpOworKworKyNpZmRlZiBOT19YTUFMTE9DCisrCSAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKyNlbmRpZgorKwkgICAgeworKwkgICAgICBtZW1jcHkgKHJlc3VsdCwgY3Vycl9wcmVmaXgsIGN1cnJfcHJlZml4X2xlbik7CisrCSAgICAgIHN0cmNweSAocmVzdWx0ICsgY3Vycl9wcmVmaXhfbGVuLCBwYXRobmFtZV90YWlsKTsKKysJICAgICAgcmV0dXJuIHJlc3VsdDsKKysJICAgIH0KKysJfQorKyAgICB9CisrICAvKiBOb3RoaW5nIHRvIHJlbG9jYXRlLiAgKi8KKysgIHJldHVybiBwYXRobmFtZTsKKyt9CisrCisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcmVsb2NhdGFibGUuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWxvY2F0YWJsZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjUxNzAzMDk2IC0wNDAwCitAQCAtMCwwICsxLDc3IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1JFTE9DQVRBQkxFX0gKKysjZGVmaW5lIF9SRUxPQ0FUQUJMRV9ICisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrCisrLyogVGhpcyBjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmUgLS1lbmFibGUtcmVsb2NhdGFibGUgb3B0aW9uLiAgKi8KKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrLyogV2hlbiBidWlsZGluZyBhIERMTCwgd2UgbXVzdCBleHBvcnQgc29tZSBmdW5jdGlvbnMuICBOb3RlIHRoYXQgYmVjYXVzZQorKyAgIHRoaXMgaXMgYSBwcml2YXRlIC5oIGZpbGUsIHdlIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorKyAgIGluIGFueSBjYXNlLiAgKi8KKysjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBCVUlMRElOR19ETEwKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisrI2Vsc2UKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQKKysjZW5kaWYKKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrZXh0ZXJuIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRCB2b2lkCisrICAgICAgIHNldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXgsCisrCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKy8qIFJldHVybnMgdGhlIHBhdGhuYW1lLCByZWxvY2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbgorKyAgIGRpcmVjdG9yeS4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiByZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpOworKworKy8qIE1lbW9yeSBtYW5hZ2VtZW50OiByZWxvY2F0ZSgpIGxlYWtzIG1lbW9yeSwgYmVjYXVzZSBpdCBoYXMgdG8gY29uc3RydWN0CisrICAgYSBmcmVzaCBwYXRobmFtZS4gIElmIHRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgeW91ciBwcm9ncmFtIGNhbGxzCisrICAgcmVsb2NhdGUoKSBmcmVxdWVudGx5LCB0aGluayBhYm91dCBjYWNoaW5nIHRoZSByZXN1bHQuICAqLworKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqIGNvbXB1dGVfY3Vycl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCwKKysJCQkJCSBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkJCQkgY29uc3QgY2hhciAqY3Vycl9wYXRobmFtZSk7CisrCisrI2Vsc2UKKysKKysvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgdGhlIGhhcmR3aXJlZCBwYXRobmFtZXMuICAqLworKyNkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKysKKysjZW5kaWYKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9SRUxPQ0FUQUJMRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdGV4dGRvbWFpbi5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3RleHRkb21haW4uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjY1NjcwMjMzNiAtMDQwMAorQEAgLTEsNTEgKzEsNjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4KKysjIGRlZmluZSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4KKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogTmFtZSBvZiB0aGUgZGVmYXVsdCB0ZXh0IGRvbWFpbi4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW5bXTsKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogRGVmYXVsdCB0ZXh0IGRvbWFpbiBpbiB3aGljaCBlbnRyaWVzIGZvciBnZXR0ZXh0KDMpIGFyZSB0byBiZSBmb3VuZC4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworK2V4dGVybiBjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuOworIAorIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKK0BAIC01NCw1MCArNjMsNzYgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIFRFWFRET01BSU4gX190ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGlmbmRlZiBzdHJkdXAKKysjICBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGVuZGlmCisgI2Vsc2UKKy0jIGRlZmluZSBURVhURE9NQUlOIHRleHRkb21haW5fXworKyMgZGVmaW5lIFRFWFRET01BSU4gbGliaW50bF90ZXh0ZG9tYWluCisgI2VuZGlmCisgCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysKKyAvKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKyAgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworIGNoYXIgKgorLVRFWFRET01BSU4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK1RFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisgeworLSAgY2hhciAqb2xkOworKyAgY2hhciAqbmV3X2RvbWFpbjsKKysgIGNoYXIgKm9sZF9kb21haW47CisgCisgICAvKiBBIE5VTEwgcG9pbnRlciByZXF1ZXN0cyB0aGUgY3VycmVudCBzZXR0aW5nLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisgICAgIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKy0gIG9sZCA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgX19saWJjX3J3bG9ja193cmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysKKysgIG9sZF9kb21haW4gPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKyAgIC8qIElmIGRvbWFpbiBuYW1lIGlzIHRoZSBudWxsIHN0cmluZyBzZXQgdG8gZGVmYXVsdCBkb21haW4gIm1lc3NhZ2VzIi4gICovCisgICBpZiAoZG9tYWlubmFtZVswXSA9PSAnXDAnCisgICAgICAgfHwgc3RyY21wIChkb21haW5uYW1lLCBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikgPT0gMCkKKy0gICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKysgICAgeworKyAgICAgIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CisrICAgICAgbmV3X2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgICB9CisrICBlbHNlIGlmIChzdHJjbXAgKGRvbWFpbm5hbWUsIG9sZF9kb21haW4pID09IDApCisrICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBhbmQgcGVvcGxlIHdpbGwgdXNlIGl0IHRvIHNpZ25hbCB0aGF0IHNvbWUKKysgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlZC4gICovCisrICAgIG5ld19kb21haW4gPSBvbGRfZG9tYWluOworICAgZWxzZQorICAgICB7CisgICAgICAgLyogSWYgdGhlIGZvbGxvd2luZyBtYWxsb2MgZmFpbHMgYF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluJworIAkgd2lsbCBiZSBOVUxMLiAgVGhpcyB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIGFuZCBzbyBzaWduYWxzIHdlCisgCSBhcmUgb3V0IG9mIGNvcmUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0gICAgICBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisrICAgICAgbmV3X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisgI2Vsc2UKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgY2hhciAqY3AgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKGNwICE9IE5VTEwpCistCW1lbWNweSAoY3AsIGRvbWFpbm5hbWUsIGxlbik7CistICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBjcDsKKysgICAgICBuZXdfZG9tYWluID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisrCW1lbWNweSAobmV3X2RvbWFpbiwgZG9tYWlubmFtZSwgbGVuKTsKKyAjZW5kaWYKKysKKysgICAgICBpZiAobmV3X2RvbWFpbiAhPSBOVUxMKQorKwlfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IG5ld19kb21haW47CisgICAgIH0KKyAKKy0gIGlmIChvbGQgIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCistICAgIGZyZWUgKG9sZCk7CisrICAvKiBXZSB1c2UgdGhpcyBwb3NzaWJpbGl0eSB0byBzaWduYWwgYSBjaGFuZ2Ugb2YgdGhlIGxvYWRlZCBjYXRhbG9ncworKyAgICAgc2luY2UgdGhpcyBpcyBtb3N0IGxpa2VseSB0aGUgY2FzZSBhbmQgdGhlcmUgaXMgbm8gb3RoZXIgZWFzeSB3ZQorKyAgICAgdG8gZG8gaXQuICBEbyBpdCBvbmx5IHdoZW4gdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuICAqLworKyAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKysgICAgeworKyAgICAgICsrX25sX21zZ19jYXRfY250cjsKKyAKKy0gIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKysgICAgICBpZiAob2xkX2RvbWFpbiAhPSBuZXdfZG9tYWluICYmIG9sZF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrCWZyZWUgKG9sZF9kb21haW4pOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgcmV0dXJuIG5ld19kb21haW47CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3Zhc25wcmludGYuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC92YXNucHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NjI3MDE0MjQgLTA0MDAKK0BAIC0wLDAgKzEsODg3IEBACisrLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc25wcmludGYoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrI2lmbmRlZiBJTl9MSUJJTlRMCisrIyBpbmNsdWRlIDxhbGxvY2EuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGluY2x1ZGUgInZhc253cHJpbnRmLmgiCisrI2Vsc2UKKysjIGluY2x1ZGUgInZhc25wcmludGYuaCIKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4JLyogc25wcmludGYoKSwgc3ByaW50ZigpICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgkvKiBhYm9ydCgpLCBtYWxsb2MoKSwgcmVhbGxvYygpLCBmcmVlKCkgKi8KKysjaW5jbHVkZSA8c3RyaW5nLmg+CS8qIG1lbWNweSgpLCBzdHJsZW4oKSAqLworKyNpbmNsdWRlIDxlcnJuby5oPgkvKiBlcnJubyAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4JLyogQ0hBUl9CSVQgKi8KKysjaW5jbHVkZSA8ZmxvYXQuaD4JLyogREJMX01BWF9FWFAsIExEQkxfTUFYX0VYUCAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuICAqLworKyNpbmNsdWRlICJ4c2l6ZS5oIgorKworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGlmZGVmIEhBVkVfV0NTTEVOCisrIyAgZGVmaW5lIGxvY2FsX3djc2xlbiB3Y3NsZW4KKysjIGVsc2UKKysgICAvKiBTb2xhcmlzIDIuNS4xIGhhcyB3Y3NsZW4oKSBpbiBhIHNlcGFyYXRlIGxpYnJhcnkgbGlidy5zby4gVG8gYXZvaWQKKysgICAgICBhIGRlcGVuZGVuY3kgdG93YXJkcyB0aGlzIGxpYnJhcnksIGhlcmUgaXMgYSBsb2NhbCBzdWJzdGl0dXRlLgorKyAgICAgIERlZmluZSB0aGlzIHN1YnN0aXR1dGUgb25seSBvbmNlLCBldmVuIGlmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAorKyAgICAgIHR3aWNlIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuICAqLworKyMgIGlmbmRlZiBsb2NhbF93Y3NsZW5fZGVmaW5lZAorKyMgICBkZWZpbmUgbG9jYWxfd2NzbGVuX2RlZmluZWQgMQorK3N0YXRpYyBzaXplX3QKKytsb2NhbF93Y3NsZW4gKGNvbnN0IHdjaGFyX3QgKnMpCisreworKyAgY29uc3Qgd2NoYXJfdCAqcHRyOworKworKyAgZm9yIChwdHIgPSBzOyAqcHRyICE9ICh3Y2hhcl90KSAwOyBwdHIrKykKKysgICAgOworKyAgcmV0dXJuIHB0ciAtIHM7CisrfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbndwcmludGYKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBVU0VfU05QUklOVEYgMQorKyMgaWYgSEFWRV9ERUNMX19TTldQUklOVEYKKysgICAvKiBPbiBXaW5kb3dzLCB0aGUgZnVuY3Rpb24gc3dwcmludGYoKSBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlIHRoYW4KKysgICAgICBvbiBVbml4OyB3ZSB1c2UgdGhlIF9zbndwcmludGYoKSBmdW5jdGlvbiBpbnN0ZWFkLiAgKi8KKysjICBkZWZpbmUgU05QUklOVEYgX3Nud3ByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzd3ByaW50ZgorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbnByaW50ZgorKyMgZGVmaW5lIENIQVJfVCBjaGFyCisrIyBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCisrIyBkZWZpbmUgRElSRUNUSVZFUyBjaGFyX2RpcmVjdGl2ZXMKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgVVNFX1NOUFJJTlRGIChIQVZFX0RFQ0xfX1NOUFJJTlRGIHx8IEhBVkVfU05QUklOVEYpCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIFNOUFJJTlRGIF9zbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzbnByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKytDSEFSX1QgKgorK1ZBU05QUklOVEYgKENIQVJfVCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgRElSRUNUSVZFUyBkOworKyAgYXJndW1lbnRzIGE7CisrCisrICBpZiAoUFJJTlRGX1BBUlNFIChmb3JtYXQsICZkLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgZXJybm8gPSBFSU5WQUw7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysjZGVmaW5lIENMRUFOVVAoKSBcCisrICBmcmVlIChkLmRpcik7CQkJCQkJCQlcCisrICBpZiAoYS5hcmcpCQkJCQkJCQlcCisrICAgIGZyZWUgKGEuYXJnKTsKKysKKysgIGlmIChwcmludGZfZmV0Y2hhcmdzIChhcmdzLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgQ0xFQU5VUCAoKTsKKysgICAgICBlcnJubyA9IEVJTlZBTDsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgeworKyAgICBzaXplX3QgYnVmX25lZWRlZGxlbmd0aDsKKysgICAgQ0hBUl9UICpidWY7CisrICAgIENIQVJfVCAqYnVmX21hbGxvY2VkOworKyAgICBjb25zdCBDSEFSX1QgKmNwOworKyAgICBzaXplX3QgaTsKKysgICAgRElSRUNUSVZFICpkcDsKKysgICAgLyogT3V0cHV0IHN0cmluZyBhY2N1bXVsYXRvci4gICovCisrICAgIENIQVJfVCAqcmVzdWx0OworKyAgICBzaXplX3QgYWxsb2NhdGVkOworKyAgICBzaXplX3QgbGVuZ3RoOworKworKyAgICAvKiBBbGxvY2F0ZSBhIHNtYWxsIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCBhIGRpcmVjdGl2ZSBwYXNzZWQgdG8KKysgICAgICAgc3ByaW50ZiBvciBzbnByaW50Zi4gICovCisrICAgIGJ1Zl9uZWVkZWRsZW5ndGggPQorKyAgICAgIHhzdW00ICg3LCBkLm1heF93aWR0aF9sZW5ndGgsIGQubWF4X3ByZWNpc2lvbl9sZW5ndGgsIDYpOworKyNpZiBIQVZFX0FMTE9DQQorKyAgICBpZiAoYnVmX25lZWRlZGxlbmd0aCA8IDQwMDAgLyBzaXplb2YgKENIQVJfVCkpCisrICAgICAgeworKwlidWYgPSAoQ0hBUl9UICopIGFsbG9jYSAoYnVmX25lZWRlZGxlbmd0aCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCWJ1Zl9tYWxsb2NlZCA9IE5VTEw7CisrICAgICAgfQorKyAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKwlzaXplX3QgYnVmX21lbXNpemUgPSB4dGltZXMgKGJ1Zl9uZWVkZWRsZW5ndGgsIHNpemVvZiAoQ0hBUl9UKSk7CisrCWlmIChzaXplX292ZXJmbG93X3AgKGJ1Zl9tZW1zaXplKSkKKysJICBnb3RvIG91dF9vZl9tZW1vcnlfMTsKKysJYnVmID0gKENIQVJfVCAqKSBtYWxsb2MgKGJ1Zl9tZW1zaXplKTsKKysJaWYgKGJ1ZiA9PSBOVUxMKQorKwkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworKwlidWZfbWFsbG9jZWQgPSBidWY7CisrICAgICAgfQorKworKyAgICBpZiAocmVzdWx0YnVmICE9IE5VTEwpCisrICAgICAgeworKwlyZXN1bHQgPSByZXN1bHRidWY7CisrCWFsbG9jYXRlZCA9ICpsZW5ndGhwOworKyAgICAgIH0KKysgICAgZWxzZQorKyAgICAgIHsKKysJcmVzdWx0ID0gTlVMTDsKKysJYWxsb2NhdGVkID0gMDsKKysgICAgICB9CisrICAgIGxlbmd0aCA9IDA7CisrICAgIC8qIEludmFyaWFudHM6CisrICAgICAgIHJlc3VsdCBpcyBlaXRoZXIgPT0gcmVzdWx0YnVmIG9yID09IE5VTEwgb3IgbWFsbG9jLWFsbG9jYXRlZC4KKysgICAgICAgSWYgbGVuZ3RoID4gMCwgdGhlbiByZXN1bHQgIT0gTlVMTC4gICovCisrCisrICAgIC8qIEVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgPj0gbmVlZGVkLiAgQWJvcnRzIHRocm91Z2ggYSBqdW1wIHRvCisrICAgICAgIG91dF9vZl9tZW1vcnkgaWYgbmVlZGVkIGlzIFNJWkVfTUFYIG9yIG90aGVyd2lzZSB0b28gYmlnLiAgKi8KKysjZGVmaW5lIEVOU1VSRV9BTExPQ0FUSU9OKG5lZWRlZCkgXAorKyAgICBpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkJICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgXAorKwlzaXplX3QgbWVtb3J5X3NpemU7CQkJCQkJICAgICBcCisrCUNIQVJfVCAqbWVtb3J5OwkJCQkJCQkgICAgIFwKKysJCQkJCQkJCQkgICAgIFwKKysJYWxsb2NhdGVkID0gKGFsbG9jYXRlZCA+IDAgPyB4dGltZXMgKGFsbG9jYXRlZCwgMikgOiAxMik7CSAgICAgXAorKwlpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkgICAgIFwKKysJICBhbGxvY2F0ZWQgPSAobmVlZGVkKTsJCQkJCQkgICAgIFwKKysJbWVtb3J5X3NpemUgPSB4dGltZXMgKGFsbG9jYXRlZCwgc2l6ZW9mIChDSEFSX1QpKTsJCSAgICAgXAorKwlpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCQkJCSAgICAgXAorKwkgIGdvdG8gb3V0X29mX21lbW9yeTsJCQkJCQkgICAgIFwKKysJaWYgKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSBtYWxsb2MgKG1lbW9yeV9zaXplKTsJCQkgICAgIFwKKysJZWxzZQkJCQkJCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIG1lbW9yeV9zaXplKTsJCSAgICAgXAorKwlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJICAgICBcCisrCSAgZ290byBvdXRfb2ZfbWVtb3J5OwkJCQkJCSAgICAgXAorKwlpZiAocmVzdWx0ID09IHJlc3VsdGJ1ZiAmJiBsZW5ndGggPiAwKQkJCQkgICAgIFwKKysJICBtZW1jcHkgKG1lbW9yeSwgcmVzdWx0LCBsZW5ndGggKiBzaXplb2YgKENIQVJfVCkpOwkJICAgICBcCisrCXJlc3VsdCA9IG1lbW9yeTsJCQkJCQkgICAgIFwKKysgICAgICB9CisrCisrICAgIGZvciAoY3AgPSBmb3JtYXQsIGkgPSAwLCBkcCA9ICZkLmRpclswXTsgOyBjcCA9IGRwLT5kaXJfZW5kLCBpKyssIGRwKyspCisrICAgICAgeworKwlpZiAoY3AgIT0gZHAtPmRpcl9zdGFydCkKKysJICB7CisrCSAgICBzaXplX3QgbiA9IGRwLT5kaXJfc3RhcnQgLSBjcDsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoID0geHN1bSAobGVuZ3RoLCBuKTsKKysKKysJICAgIEVOU1VSRV9BTExPQ0FUSU9OIChhdWdtZW50ZWRfbGVuZ3RoKTsKKysJICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCBjcCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCSAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworKwkgIH0KKysJaWYgKGkgPT0gZC5jb3VudCkKKysJICBicmVhazsKKysKKysJLyogRXhlY3V0ZSBhIHNpbmdsZSBkaXJlY3RpdmUuICAqLworKwlpZiAoZHAtPmNvbnZlcnNpb24gPT0gJyUnKQorKwkgIHsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoOworKworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKwkgICAgYXVnbWVudGVkX2xlbmd0aCA9IHhzdW0gKGxlbmd0aCwgMSk7CisrCSAgICBFTlNVUkVfQUxMT0NBVElPTiAoYXVnbWVudGVkX2xlbmd0aCk7CisrCSAgICByZXN1bHRbbGVuZ3RoXSA9ICclJzsKKysJICAgIGxlbmd0aCA9IGF1Z21lbnRlZF9sZW5ndGg7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCAhPSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKworKwkgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICduJykKKysJICAgICAgeworKwkJc3dpdGNoIChhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlKQorKwkJICB7CisrCQkgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2NoYXJfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKwkJICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKyNlbmRpZgorKwkJICBkZWZhdWx0OgorKwkJICAgIGFib3J0ICgpOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJYXJnX3R5cGUgdHlwZSA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGU7CisrCQlDSEFSX1QgKnA7CisrCQl1bnNpZ25lZCBpbnQgcHJlZml4X2NvdW50OworKwkJaW50IHByZWZpeGVzWzJdOworKyNpZiAhVVNFX1NOUFJJTlRGCisrCQlzaXplX3QgdG1wX2xlbmd0aDsKKysJCUNIQVJfVCB0bXBidWZbNzAwXTsKKysJCUNIQVJfVCAqdG1wOworKworKwkJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSBmb3IgY2FsbGluZworKwkJICAgc3ByaW50Zi4gICovCisrCQl7CisrCQkgIHNpemVfdCB3aWR0aDsKKysJCSAgc2l6ZV90IHByZWNpc2lvbjsKKysKKysJCSAgd2lkdGggPSAwOworKwkJICBpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkJeworKwkJCSAgaW50IGFyZzsKKysKKysJCQkgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorKwkJCSAgICBhYm9ydCAoKTsKKysJCQkgIGFyZyA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICB3aWR0aCA9IChhcmcgPCAwID8gKHVuc2lnbmVkIGludCkgKC1hcmcpIDogYXJnKTsKKysJCQl9CisrCQkgICAgICBlbHNlCisrCQkJeworKwkJCSAgY29uc3QgQ0hBUl9UICpkaWdpdHAgPSBkcC0+d2lkdGhfc3RhcnQ7CisrCisrCQkJICBkbworKwkJCSAgICB3aWR0aCA9IHhzdW0gKHh0aW1lcyAod2lkdGgsIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKysJCQkgIHdoaWxlIChkaWdpdHAgIT0gZHAtPndpZHRoX2VuZCk7CisrCQkJfQorKwkJICAgIH0KKysKKysJCSAgcHJlY2lzaW9uID0gNjsKKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJCXsKKysJCQkgIGludCBhcmc7CisrCisrCQkJICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkJICAgIGFib3J0ICgpOworKwkJCSAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBwcmVjaXNpb24gPSAoYXJnIDwgMCA/IDAgOiBhcmcpOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQl7CisrCQkJICBjb25zdCBDSEFSX1QgKmRpZ2l0cCA9IGRwLT5wcmVjaXNpb25fc3RhcnQgKyAxOworKworKwkJCSAgcHJlY2lzaW9uID0gMDsKKysJCQkgIGRvCisrCQkJICAgIHByZWNpc2lvbiA9IHhzdW0gKHh0aW1lcyAocHJlY2lzaW9uLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisrCQkJICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKTsKKysJCQl9CisrCQkgICAgfQorKworKwkJICBzd2l0Y2ggKGRwLT5jb252ZXJzaW9uKQorKwkJICAgIHsKKysKKysJCSAgICBjYXNlICdkJzogY2FzZSAnaSc6IGNhc2UgJ3UnOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBlbHNlCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ28nOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3gnOiBjYXNlICdYJzoKKysjIGlmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLworKwkJICAgICAgZWxzZQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisrCQkJCQkgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduIG9yIGFsdGVybmF0ZSBmb3JtICovCisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdmJzogY2FzZSAnRic6CisrIyBpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoTERCTF9NQVhfRVhQCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChEQkxfTUFYX0VYUAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDEwOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQkgICAgY2FzZSAnYSc6IGNhc2UgJ0EnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJMTI7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQsIGV4cG9uZW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnYyc6CisrIyBpZiBkZWZpbmVkIEhBVkVfV0lOVF9UICYmICFXSURFX0NIQVJfVkVSU0lPTgorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX0NIQVIpCisrCQkJdG1wX2xlbmd0aCA9IE1CX0NVUl9NQVg7CisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJCXRtcF9sZW5ndGggPSAxOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAncyc6CisrIyBpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9TVFJJTkcpCisrCQkJeworKwkJCSAgdG1wX2xlbmd0aCA9CisrCQkJICAgIGxvY2FsX3djc2xlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nKTsKKysKKysjICBpZiAhV0lERV9DSEFSX1ZFUlNJT04KKysJCQkgIHRtcF9sZW5ndGggPSB4dGltZXMgKHRtcF9sZW5ndGgsIE1CX0NVUl9NQVgpOworKyMgIGVuZGlmCisrCQkJfQorKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0gc3RybGVuIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc3RyaW5nKTsKKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3AnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJKHVuc2lnbmVkIGludCkgKHNpemVvZiAodm9pZCAqKSAqIENIQVJfQklUCisrCQkJCQkqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCSAgICAgICApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyAweCAqLworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgZGVmYXVsdDoKKysJCSAgICAgIGFib3J0ICgpOworKwkJICAgIH0KKysKKysJCSAgaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKKysJCSAgICB0bXBfbGVuZ3RoID0gd2lkdGg7CisrCisrCQkgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxKTsgLyogYWNjb3VudCBmb3IgdHJhaWxpbmcgTlVMICovCisrCQl9CisrCisrCQlpZiAodG1wX2xlbmd0aCA8PSBzaXplb2YgKHRtcGJ1ZikgLyBzaXplb2YgKENIQVJfVCkpCisrCQkgIHRtcCA9IHRtcGJ1ZjsKKysJCWVsc2UKKysJCSAgeworKwkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChDSEFSX1QpKTsKKysKKysJCSAgICBpZiAoc2l6ZV9vdmVyZmxvd19wICh0bXBfbWVtc2l6ZSkpCisrCQkgICAgICAvKiBPdmVyZmxvdywgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5LiAgKi8KKysJCSAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKysJCSAgICB0bXAgPSAoQ0hBUl9UICopIG1hbGxvYyAodG1wX21lbXNpemUpOworKwkJICAgIGlmICh0bXAgPT0gTlVMTCkKKysJCSAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworKwkJICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworKwkJICB9CisrI2VuZGlmCisrCisrCQkvKiBDb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGNhbGxpbmcgc25wcmludGYgb3IKKysJCSAgIHNwcmludGYuICAqLworKwkJcCA9IGJ1ZjsKKysJCSpwKysgPSAnJSc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19HUk9VUCkKKysJCSAgKnArKyA9ICdcJyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKQorKwkJICAqcCsrID0gJy0nOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfU0hPV1NJR04pCisrCQkgICpwKysgPSAnKyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19TUEFDRSkKKysJCSAgKnArKyA9ICcgJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0FMVCkKKysJCSAgKnArKyA9ICcjJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1pFUk8pCisrCQkgICpwKysgPSAnMCc7CisrCQlpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCQkgICAgbWVtY3B5IChwLCBkcC0+d2lkdGhfc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKwkJaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKKysJCSAgICBtZW1jcHkgKHAsIGRwLT5wcmVjaXNpb25fc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKworKwkJc3dpdGNoICh0eXBlKQorKwkJICB7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKysJCSAgICAqcCsrID0gJ2wnOworKwkJICAgIC8qRkFMTFRIUk9VR0gqLworKyNlbmRpZgorKwkJICBjYXNlIFRZUEVfTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HSU5UOgorKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorKyNlbmRpZgorKwkJICAgICpwKysgPSAnbCc7CisrCQkgICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCQkgICAgKnArKyA9ICdMJzsKKysJCSAgICBicmVhazsKKysjZW5kaWYKKysJCSAgZGVmYXVsdDoKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkJKnAgPSBkcC0+Y29udmVyc2lvbjsKKysjaWYgVVNFX1NOUFJJTlRGCisrCQlwWzFdID0gJyUnOworKwkJcFsyXSA9ICduJzsKKysJCXBbM10gPSAnXDAnOworKyNlbHNlCisrCQlwWzFdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCS8qIENvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yIHNwcmludGYuICAqLworKwkJcHJlZml4X2NvdW50ID0gMDsKKysJCWlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJICB7CisrCQkgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworKwkJICB9CisrCQlpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkgIHsKKysJCSAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKysJCSAgfQorKworKyNpZiBVU0VfU05QUklOVEYKKysJCS8qIFByZXBhcmUgY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIHRoZSBjb3VudAorKwkJICAgdmlhICVuLiAgKi8KKysJCUVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIDEpKTsKKysJCXJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCWZvciAoOzspCisrCQkgIHsKKysJCSAgICBzaXplX3QgbWF4bGVuOworKwkJICAgIGludCBjb3VudDsKKysJCSAgICBpbnQgcmV0Y291bnQ7CisrCisrCQkgICAgbWF4bGVuID0gYWxsb2NhdGVkIC0gbGVuZ3RoOworKwkJICAgIGNvdW50ID0gLTE7CisrCQkgICAgcmV0Y291bnQgPSAwOworKworKyNpZiBVU0VfU05QUklOVEYKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBhcmcsICZjb3VudCk7CQkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDE6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgYXJnLCAmY291bnQpOwkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sIGFyZywgXAorKwkJCQkJICAgICAmY291bnQpOwkJCSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGRlZmF1bHQ6CQkJCQkJICAgIFwKKysJCQlhYm9ydCAoKTsJCQkJCSAgICBcCisrCQkgICAgICB9CisrI2Vsc2UKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBhcmcpOwkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAxOgkJCQkJCSAgICBcCisrCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIGFyZyk7CSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAorKwkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIHByZWZpeGVzWzBdLCBwcmVmaXhlc1sxXSxcCisrCQkJCQkgYXJnKTsJCQkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgZGVmYXVsdDoJCQkJCQkgICAgXAorKwkJCWFib3J0ICgpOwkJCQkJICAgIFwKKysJCSAgICAgIH0KKysjZW5kaWYKKysKKysJCSAgICBzd2l0Y2ggKHR5cGUpCisrCQkgICAgICB7CisrCQkgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91Y2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zaG9ydDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVVNIT1JUOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdXNob3J0OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9JTlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91aW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjZW5kaWYKKysJCSAgICAgIGNhc2UgVFlQRV9ET1VCTEU6CisrCQkJeworKwkJCSAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKysJCQl7CisrCQkJICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJCQl7CisrCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NoYXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKysJCQl7CisrCQkJICB3aW50X3QgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfU1RSSU5HOgorKwkJCXsKKysJCQkgIGNvbnN0IGNoYXIgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKysJCQl7CisrCQkJICBjb25zdCB3Y2hhcl90ICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNlbmRpZgorKwkJICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisrCQkJeworKwkJCSAgdm9pZCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3BvaW50ZXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgZGVmYXVsdDoKKysJCQlhYm9ydCAoKTsKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogUG9ydGFiaWxpdHk6IE5vdCBhbGwgaW1wbGVtZW50YXRpb25zIG9mIHNucHJpbnRmKCkKKysJCSAgICAgICBhcmUgSVNPIEMgOTkgY29tcGxpYW50LiAgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKKysJCSAgICAgICBieXRlcyB0aGF0IHNucHJpbnRmKCkgaGFzIHByb2R1Y2VkIG9yIHdvdWxkIGhhdmUKKysJCSAgICAgICBwcm9kdWNlZC4gICovCisrCQkgICAgaWYgKGNvdW50ID49IDApCisrCQkgICAgICB7CisrCQkJLyogVmVyaWZ5IHRoYXQgc25wcmludGYoKSBoYXMgTlVMLXRlcm1pbmF0ZWQgaXRzCisrCQkJICAgcmVzdWx0LiAgKi8KKysJCQlpZiAoY291bnQgPCBtYXhsZW4gJiYgcmVzdWx0W2xlbmd0aCArIGNvdW50XSAhPSAnXDAnKQorKwkJCSAgYWJvcnQgKCk7CisrCQkJLyogUG9ydGFiaWxpdHkgaGFjay4gICovCisrCQkJaWYgKHJldGNvdW50ID4gY291bnQpCisrCQkJICBjb3VudCA9IHJldGNvdW50OworKwkJICAgICAgfQorKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQkvKiBzbnByaW50ZigpIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJworKwkJCSAgIGRpcmVjdGl2ZS4gICovCisrCQkJaWYgKHBbMV0gIT0gJ1wwJykKKysJCQkgIHsKKysJCQkgICAgLyogRG9uJ3QgdXNlIHRoZSAnJW4nIGRpcmVjdGl2ZTsgaW5zdGVhZCwgbG9vaworKwkJCSAgICAgICBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworKwkJCSAgICBwWzFdID0gJ1wwJzsKKysJCQkgICAgY29udGludWU7CisrCQkJICB9CisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBMb29rIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisrCQkJICAgIGlmIChyZXRjb3VudCA8IDApCisrCQkJICAgICAgeworKwkJCQkvKiBIUC1VWCAxMC4yMCBzbnByaW50ZigpIGlzIGRvdWJseSBkZWZpY2llbnQ6CisrCQkJCSAgIEl0IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJyBkaXJlY3RpdmUsCisrCQkJCSAgICphbmQqIGl0IHJldHVybnMgLTEgKHJhdGhlciB0aGFuIHRoZSBsZW5ndGgKKysJCQkJICAgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQpIHdoZW4gdGhlCisrCQkJCSAgIGJ1ZmZlciBpcyB0b28gc21hbGwuICAqLworKwkJCQlzaXplX3QgYmlnZ2VyX25lZWQgPQorKwkJCQkgIHhzdW0gKHh0aW1lcyAoYWxsb2NhdGVkLCAyKSwgMTIpOworKwkJCQlFTlNVUkVfQUxMT0NBVElPTiAoYmlnZ2VyX25lZWQpOworKwkJCQljb250aW51ZTsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UKKysJCQkgICAgICBjb3VudCA9IHJldGNvdW50OworKwkJCSAgfQorKwkJICAgICAgfQorKyNlbmRpZgorKworKwkJICAgIC8qIEF0dGVtcHQgdG8gaGFuZGxlIGZhaWx1cmUuICAqLworKwkJICAgIGlmIChjb3VudCA8IDApCisrCQkgICAgICB7CisrCQkJaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisrCQkJICBmcmVlIChyZXN1bHQpOworKwkJCWlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysJCQkgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisrCQkJQ0xFQU5VUCAoKTsKKysJCQllcnJubyA9IEVJTlZBTDsKKysJCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIH0KKysKKysjaWYgIVVTRV9TTlBSSU5URgorKwkJICAgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorKwkJICAgICAgLyogdG1wX2xlbmd0aCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRlZCAtIGZpeCB0aGUKKysJCQkgY29kZSBhYm92ZSEgICovCisrCQkgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysKKysJCSAgICAvKiBNYWtlIHJvb20gZm9yIHRoZSByZXN1bHQuICAqLworKwkJICAgIGlmIChjb3VudCA+PSBtYXhsZW4pCisrCQkgICAgICB7CisrCQkJLyogTmVlZCBhdCBsZWFzdCBjb3VudCBieXRlcy4gIEJ1dCBhbGxvY2F0ZQorKwkJCSAgIHByb3BvcnRpb25hbGx5LCB0byBhdm9pZCBsb29waW5nIGV0ZXJuYWxseSBpZgorKwkJCSAgIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbCBjb3VudC4gICovCisrCQkJc2l6ZV90IG4gPQorKwkJCSAgeG1heCAoeHN1bSAobGVuZ3RoLCBjb3VudCksIHh0aW1lcyAoYWxsb2NhdGVkLCAyKSk7CisrCisrCQkJRU5TVVJFX0FMTE9DQVRJT04gKG4pOworKyNpZiBVU0VfU05QUklOVEYKKysJCQljb250aW51ZTsKKysjZW5kaWYKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogVGhlIHNucHJpbnRmKCkgcmVzdWx0IGRpZCBmaXQuICAqLworKyNlbHNlCisrCQkgICAgLyogQXBwZW5kIHRoZSBzcHJpbnRmKCkgcmVzdWx0LiAgKi8KKysJCSAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgdG1wLCBjb3VudCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCQkgICAgaWYgKHRtcCAhPSB0bXBidWYpCisrCQkgICAgICBmcmVlICh0bXApOworKyNlbmRpZgorKworKwkJICAgIGxlbmd0aCArPSBjb3VudDsKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysgICAgLyogQWRkIHRoZSBmaW5hbCBOVUwuICAqLworKyAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCAxKSk7CisrICAgIHJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysKKysgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYgJiYgbGVuZ3RoICsgMSA8IGFsbG9jYXRlZCkKKysgICAgICB7CisrCS8qIFNocmluayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBwb3NzaWJsZS4gICovCisrCUNIQVJfVCAqbWVtb3J5OworKworKwltZW1vcnkgPSAoQ0hBUl9UICopIHJlYWxsb2MgKHJlc3VsdCwgKGxlbmd0aCArIDEpICogc2l6ZW9mIChDSEFSX1QpKTsKKysJaWYgKG1lbW9yeSAhPSBOVUxMKQorKwkgIHJlc3VsdCA9IG1lbW9yeTsKKysgICAgICB9CisrCisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgICBDTEVBTlVQICgpOworKyAgICAqbGVuZ3RocCA9IGxlbmd0aDsKKysgICAgcmV0dXJuIHJlc3VsdDsKKysKKysgIG91dF9vZl9tZW1vcnk6CisrICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorKyAgICAgIGZyZWUgKHJlc3VsdCk7CisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgb3V0X29mX21lbW9yeV8xOgorKyAgICBDTEVBTlVQICgpOworKyAgICBlcnJubyA9IEVOT01FTTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrfQorKworKyN1bmRlZiBTTlBSSU5URgorKyN1bmRlZiBVU0VfU05QUklOVEYKKysjdW5kZWYgUFJJTlRGX1BBUlNFCisrI3VuZGVmIERJUkVDVElWRVMKKysjdW5kZWYgRElSRUNUSVZFCisrI3VuZGVmIENIQVJfVAorKyN1bmRlZiBWQVNOUFJJTlRGCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdmFzbnByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc25wcmludGYuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjY2NzcwMDY2NCAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKy8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9WQVNOUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOUFJJTlRGX0gKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IF9fU1RSSUNUX0FOU0lfXworKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQorKyMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAorKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKysgICBzaXplIGluICpMRU5HVEhQOyBvdGhlcndpc2UgeW91IHBhc3MgUkVTVUxUQlVGID0gTlVMTC4KKysgICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0cmluZyAodGhpcyBtYXkgYmUgPSBSRVNVTFRCVUYKKysgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisrICAgbnVtYmVyIG9mIHJlc3VsdGluZyBieXRlcywgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICBVcG9uIGVycm9yLCBzZXQKKysgICBlcnJubyBhbmQgcmV0dXJuIE5VTEwuICAqLworK2V4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisrICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworK2V4dGVybiBjaGFyICogdmFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorKyAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC92YXNud3ByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc253cHJpbnRmLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42NzM2OTk3NTIgLTA0MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysvKiB2c3dwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1ZBU05XUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOV1BSSU5URl9ICisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysvKiBHZXQgd2NoYXJfdCwgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2lmZGVmCV9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKysgICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCisrICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCisrICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisrICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorKyAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0CisrICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KKytleHRlcm4gd2NoYXJfdCAqIGFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLik7CisrZXh0ZXJuIHdjaGFyX3QgKiB2YXNud3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOV1BSSU5URl9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvVkVSU0lPTgkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9WRVJTSU9OCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjc5Njk4ODQwIC0wNDAwCitAQCAtMSArMSBAQAorLUdOVSBnZXR0ZXh0IGxpYnJhcnkgZnJvbSBnZXR0ZXh0LTAuMTAuMzIKKytHTlUgZ2V0dGV4dCBsaWJyYXJ5IGZyb20gZ2V0dGV4dC0wLjE0LjEKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC93cHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvd3ByaW50Zi1wYXJzZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjk1Njk2NDA4IC0wNDAwCitAQCAtMCwwICsxLDc1IEBACisrLyogUGFyc2UgcHJpbnRmIGZvcm1hdCBzdHJpbmcuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1dQUklOVEZfUEFSU0VfSAorKyNkZWZpbmUgX1dQUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3Qgd2NoYXJfdCogd2lkdGhfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgd2NoYXJfdCBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK3djaGFyX3RfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgd2NoYXJfdF9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKyt3Y2hhcl90X2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHdwcmludGZfcGFyc2UgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgd2NoYXJfdF9kaXJlY3RpdmVzICpkLCBhcmd1bWVudHMgKmEpOworKworKyNlbmRpZiAvKiBfV1BSSU5URl9QQVJTRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwveG9wZW4tbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC94b3Blbi1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDQgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gWC9PcGVuIHN0eWxlIC5tc2cgZmlsZQorLSMgQ29weXJpZ2h0IChDKSAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCistIworLSMKKy0jIFRoZSBmaXJzdCBkaXJlY3RpdmUgaW4gdGhlIC5tc2cgc2hvdWxkIGJlIHRoZSBkZWZpbml0aW9uIG9mIHRoZQorLSMgbWVzc2FnZSBzZXQgbnVtYmVyLiAgV2UgdXNlIGFsd2F5cyBzZXQgbnVtYmVyIDEuCistIworLTEgeworLSAgaVwKKy0kc2V0IDEgIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgcG8ybXNnLnNlZAorLSAgaAorLSAgcy8uKi8wLworLSAgeAorLX0KKy0jCistIyBXZSBjb3B5IGFsbCBjb21tZW50cyBpbnRvIHRoZSAubXNnIGZpbGUuICBQZXJoYXBzIHRoZXkgY2FuIGhlbHAuCistIworLS9eIy8gcy9eI1sgCV0qLyQgL3AKKy0jCistIyBXZSBjb3B5IHRoZSBvcmlnaW5hbCBtZXNzYWdlIGFzIGEgY29tbWVudCBpbnRvIHRoZSAubXNnIGZpbGUuCistIworLS9ebXNnaWQvIHsKKy0jIERvZXMgbm90IHdvcmsgbm93CistIyAgLyIkLyEgeworLSMgICAgcy9cXCQvLworLSMgICAgcy8kLyAuLi4gKG1vcmUgbGluZXMgZm9sbG93aW5nKSIvCistIyAgfQorLSAgcy9ebXNnaWRbIAldKiJcKC4qXCkiJC8kIE9yaWdpbmFsIE1lc3NhZ2U6IFwxLworLSAgcAorLX0KKy0jCistIyBUaGUgLm1zZyBmaWxlIGNvbnRhaW5zLCBvdGhlciB0aGVuIHRoZSAucG8gZmlsZSwgb25seSB0aGUgdHJhbnNsYXRpb25zCistIyBidXQgZWFjaCBnaXZlbiBhIHVuaXF1ZSBJRC4gIFN0YXJ0aW5nIGZyb20gMSBhbmQgaW5jcmVtZW50aW5nIGJ5IDEgZm9yCistIyBlYWNoIG1lc3NhZ2Ugd2UgYXNzaWduIHRoZW0gdG8gdGhlIG1lc3NhZ2VzLgorLSMgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIC5wbyBmaWxlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNhdC1pZC10YmwuYyBmaWxlCistIyAod2l0aCBwby10by10YmwpIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgdXNlZCBoZXJlLiAgKEF0IGxlYXN0IHRoZSBvcmRlcgorLSMgb2YgZGVjbGFyYXRpb25zIG11c3Qgbm90IGJlIGNoYW5nZWQuKQorLSMKKy0vXm1zZ3N0ci8geworLSAgcy9tc2dzdHJbIAldKiJcKC4qXCkiL1wxLworLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSMgQnJpbmcgdGhlIGxpbmUgaW4gdGhlIGZvcm1hdCBgPG51bWJlcj4gPG1lc3NhZ2U+JworLSAgRworLSAgcy9eW15cbl0qJC8mIC8KKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wyIFwxLworLSMgQ2xlYXIgZmxhZyBmcm9tIGxhc3Qgc3Vic3RpdHV0aW9uLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBhIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXG5cKSJcKC4qXCkiL1wxXDIvCistIyBZZXMsIHRoZW4gYnJhbmNoLgorLSAgdGEKKy0gIFAKKy0gIEQKKy0jIE5vdGUgdGhhdCBgRCcgaW5jbHVkZXMgYSBqdW1wIHRvIHRoZSBzdGFydCEhCistIyBXZSBmb3VuZCBhIGNvbnRpbnVhdGlvbiBsaW5lLiAgQnV0IGJlZm9yZSBwcmludGluZyBpbnNlcnQgJ1wnLgorLSAgOmEKKy0gIHMvXCguKlwpXChcbi4qXCkvXDFcXFwyLworLSAgUAorLSMgV2UgY2Fubm90IHVzZSB0aGUgc2VkIGNvbW1hbmQgYEQnIGhlcmUKKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC94c2l6ZS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3hzaXplLmgJMjAwNC0wOS0xMiAxNDo0MDozNC43MDA2OTU2NDggLTA0MDAKK0BAIC0wLDAgKzEsMTA5IEBACisrLyogeHNpemUuaCAtLSBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9YU0laRV9ICisrI2RlZmluZSBfWFNJWkVfSAorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvKiBHZXQgU0laRV9NQVguICAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWYgSEFWRV9TVERJTlRfSAorKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrCisrLyogVGhlIHNpemUgb2YgbWVtb3J5IG9iamVjdHMgaXMgb2Z0ZW4gY29tcHV0ZWQgdGhyb3VnaCBleHByZXNzaW9ucyBvZgorKyAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorKyAgICAgIHZvaWQqIHAgPSBtYWxsb2MgKGhlYWRlcl9zaXplICsgbiAqIGVsZW1lbnRfc2l6ZSkuCisrICAgVGhlc2UgY29tcHV0YXRpb25zIGNhbiBsZWFkIHRvIG92ZXJmbG93LiAgV2hlbiB0aGlzIGhhcHBlbnMsIG1hbGxvYygpCisrICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCisrICAgY3Jhc2hlcyB3aGlsZSBhdHRlbXB0aW5nIHRvIGZpbGwgdGhlIG1lbW9yeS4KKysgICBUbyBhdm9pZCB0aGlzLCB0aGUgZnVuY3Rpb25zIGFuZCBtYWNyb3MgaW4gdGhpcyBmaWxlIGNoZWNrIGZvciBvdmVyZmxvdy4KKysgICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCisrICAgbWFsbG9jIChTSVpFX01BWCkgaXMgbm90IGd1YXJhbnRlZWQgdG8gZmFpbCAtLSB0aGluayBvZiBhIG1hbGxvYworKyAgIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyBtbWFwIC0tLCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBzaXplX292ZXJmbG93X3AoKQorKyAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCisrICAgVGhlIGV4YW1wbGUgdGh1cyBiZWNvbWVzOgorKyAgICAgIHNpemVfdCBzaXplID0geHN1bSAoaGVhZGVyX3NpemUsIHh0aW1lcyAobiwgZWxlbWVudF9zaXplKSk7CisrICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKysqLworKworKy8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworKyNkZWZpbmUgeGNhc3Rfc2l6ZV90KE4pIFwKKysgICgoTikgPD0gU0laRV9NQVggPyAoc2l6ZV90KSAoTikgOiBTSVpFX01BWCkKKysKKysvKiBTdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKKyt7CisrICBzaXplX3Qgc3VtID0gc2l6ZTEgKyBzaXplMjsKKysgIHJldHVybiAoc3VtID49IHNpemUxID8gc3VtIDogU0laRV9NQVgpOworK30KKysKKysvKiBTdW0gb2YgdGhyZWUgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3hzdW0zIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMiwgc2l6ZV90IHNpemUzKQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyk7CisrfQorKworKy8qIFN1bSBvZiBmb3VyIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyksIHNpemU0KTsKKyt9CisrCisrLyogTWF4aW11bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3htYXggKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyKQorK3sKKysgIC8qIE5vIGV4cGxpY2l0IGNoZWNrIGlzIG5lZWRlZCBoZXJlLCBiZWNhdXNlIGZvciBhbnkgbjoKKysgICAgIG1heCAoU0laRV9NQVgsIG4pID09IFNJWkVfTUFYIGFuZCBtYXggKG4sIFNJWkVfTUFYKSA9PSBTSVpFX01BWC4gICovCisrICByZXR1cm4gKHNpemUxID49IHNpemUyID8gc2l6ZTEgOiBzaXplMik7CisrfQorKworKy8qIE11bHRpcGxpY2F0aW9uIG9mIGEgY291bnQgd2l0aCBhbiBlbGVtZW50IHNpemUsIHdpdGggb3ZlcmZsb3cgY2hlY2suCisrICAgVGhlIGNvdW50IG11c3QgYmUgPj0gMCBhbmQgdGhlIGVsZW1lbnQgc2l6ZSBtdXN0IGJlID4gMC4KKysgICBUaGlzIGlzIGEgbWFjcm8sIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IGV2ZW4KKysgICB3aGVuIE4gaXMgb2YgYSB3aWRlciB0dXBlIGFuZCBOID4gU0laRV9NQVguICAqLworKyNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorKyAgKChOKSA8PSBTSVpFX01BWCAvIChFTFNJWkUpID8gKHNpemVfdCkgKE4pICogKEVMU0laRSkgOiBTSVpFX01BWCkKKysKKysvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworKyNkZWZpbmUgc2l6ZV9vdmVyZmxvd19wKFNJWkUpIFwKKysgICgoU0laRSkgPT0gU0laRV9NQVgpCisrLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCisrI2RlZmluZSBzaXplX2luX2JvdW5kc19wKFNJWkUpIFwKKysgICgoU0laRSkgIT0gU0laRV9NQVgpCisrCisrI2VuZGlmIC8qIF9YU0laRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L0NoYW5nZUxvZwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDU0NjQxODQwIC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrMjAwNC0wOS0xMiAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorKworKwkqIGNvZGVzZXQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdldHRleHQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdsaWJjMjEubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGljb252Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRkaXYwLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRtYXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludHR5cGVzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlc19oLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlcy1wcmkubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGlzYy1wb3NpeC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbGNtZXNzYWdlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItbGQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxpYi1saW5rLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItcHJlZml4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nZG91YmxlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nbG9uZy5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbmxzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwby5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcHJpbnRmLXBvc2l4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwcm9ndGVzdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc2lnbmVkLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBzaXplX21heC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc3RkaW50X2gubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHVpbnRtYXhfdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogdWxvbmdsb25nLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3Y2hhcl90Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3aW50X3QubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHhzaXplLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBNYWtlZmlsZS5hbTogTmV3IGZpbGUuCisrCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2NvZGVzZXQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2NvZGVzZXQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjA2Nzc0MDggLTA0MDAKK0BAIC0wLDAgKzEsMjMgQEAKKysjIGNvZGVzZXQubTQgc2VyaWFsIEFNMSAoZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKysgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTtdLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisrICAgIF0pCisrICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2dldHRleHQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2dldHRleHQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjY2NzY0OTYgLTA0MDAKK0BAIC0wLDAgKzEsNDg3IEBACisrIyBnZXR0ZXh0Lm00IHNlcmlhbCAyOCAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KKytkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKysKKytkbmwgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorK2RubCBJTlRMU1lNQk9MIGNhbiBiZSBvbmUgb2YgJ2V4dGVybmFsJywgJ25vLWxpYnRvb2wnLCAndXNlLWxpYnRvb2wnLiBUaGUKKytkbmwgICAgZGVmYXVsdCAoaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBlbXB0eSkgaXMgJ25vLWxpYnRvb2wnLgorK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorK2RubCAgICBhbmQgJ25vLWxpYnRvb2wnIG9yICd1c2UtbGlidG9vbCcgZm9yIHBhY2thZ2VzIHdpdGggYW4gaW50bCBkaXJlY3RvcnkuCisrZG5sICAgIElmIElOVExTWU1CT0wgaXMgJ3VzZS1saWJ0b29sJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCisrZG5sICAgIGRlcGVuZGluZyBvbiAtLXtlbmFibGUsZGlzYWJsZX0te3NoYXJlZCxzdGF0aWN9IGFuZCBvbiB0aGUgcHJlc2VuY2Ugb2YKKytkbmwgICAgQU0tRElTQUJMRS1TSEFSRUQpLiBJZiBJTlRMU1lNQk9MIGlzICduby1saWJ0b29sJywgYSBzdGF0aWMgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorK2RubCBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMgJ25lZWQtbmdldHRleHQnLCB0aGVuIEdOVSBnZXR0ZXh0CisrZG5sICAgIGltcGxlbWVudGF0aW9ucyAoaW4gbGliYyBvciBsaWJpbnRsKSB3aXRob3V0IHRoZSBuZ2V0dGV4dCgpIGZ1bmN0aW9uCisrZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworK2RubCAgICAnbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zJywgdGhlbiBHTlUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb24ndAorK2RubCAgICBzdXBwb3J0IHRoZSBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9ybWF0c3RyaW5nIG1hY3JvcyB3aWxsIGJlIGlnbm9yZWQuCisrZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorK2RubCAgICB0aGUgdmFsdWUgYCQodG9wX2J1aWxkZGlyKS9pbnRsLycgaXMgdXNlZC4KKytkbmwKKytkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CisrZG5sIDEpIEdOVSBnZXR0ZXh0LCBhcyBpbmNsdWRlZCBpbiB0aGUgaW50bCBzdWJkaXJlY3RvcnksIHdpbGwgYmUgY29tcGlsZWQKKytkbmwgICAgYW5kIHVzZWQuCisrZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorK2RubCAyKSBHTlUgZ2V0dGV4dCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3lzdGVtJ3MgQyBsaWJyYXJ5LgorK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKKytkbmwgMykgTm8gaW50ZXJuYXRpb25hbGl6YXRpb24sIGFsd2F5cyB1c2UgRW5nbGlzaCBtc2dpZC4KKytkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IG5vbmUKKytkbmwgSWYgSU5UTFNZTUJPTCBpcyAnZXh0ZXJuYWwnLCBvbmx5IGNhc2VzIDIgYW5kIDMgY2FuIG9jY3VyLgorK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKKytkbmwgR05VIGZvcm1hdCBjYXRhbG9ncyB3aGVuIGJ1aWxkaW5nIG9uIGEgcGxhdGZvcm0gd2l0aCBhbiBYL09wZW4gZ2V0dGV4dCksCisrZG5sIGJ1dCB3ZSBrZWVwIGl0IGluIG9yZGVyIG5vdCB0byBmb3JjZSBpcnJlbGV2YW50IGZpbGVuYW1lIGNoYW5nZXMgb24gdGhlCisrZG5sIG1haW50YWluZXJzLgorK2RubAorK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF0sCisrWworKyAgZG5sIEFyZ3VtZW50IGNoZWNraW5nLgorKyAgaWZlbHNlKFskMV0sIFtdLCAsIFtpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgLCBbaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgLCBbaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sICwKKysgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorK10pXSldKV0pXSkKKysgIGlmZWxzZShbJDJdLCBbXSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAsCisrICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCisrXSldKV0pXSkKKysgIGRlZmluZShndF9pbmNsdWRlZF9pbnRsLCBpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgW25vXSwgW3llc10pKQorKyAgZGVmaW5lKGd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeCwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorKworKyAgQUNfUkVRVUlSRShbQU1fUE9fU1VCRElSU10pZG5sCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKKysgIF0pCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KKysgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisrICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorKyAgZG5sICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisrICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorKyAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCisrICBkbmwgYWdhaW4sIG91dHNpZGUgYW55ICdpZicuIFRoZXJlIGFyZSB0d28gc29sdXRpb25zOgorKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisrICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgorKyAgZG5sIFNpbmNlIEFDX1BST1ZJREVfSUZFTFNFIGlzIG9ubHkgaW4gYXV0b2NvbmYgPj0gMi41MiBhbmQgbm90CisrICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKysgICAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQorKyAgXSkKKysKKysgIGRubCBTZXQgVVNFX05MUy4KKysgIEFNX05MUworKworKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCisrICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPW5vCisrICBdKQorKyAgTElCSU5UTD0KKysgIExUTElCSU5UTD0KKysgIFBPU1VCPQorKworKyAgZG5sIElmIHdlIHVzZSBOTFMgZmlndXJlIG91dCB3aGF0IG1ldGhvZAorKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKysgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQorKyAgICAgIEFDX0FSR19XSVRIKGluY2x1ZGVkLWdldHRleHQsCisrICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCisrICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsLAorKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD1ubykKKysgICAgICBBQ19NU0dfUkVTVUxUKCRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0KQorKworKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorKyAgICBdKQorKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorKyAgICAgICAgZG5sIHRvIHVzZS4gIElmIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcy4gIEVsc2Ugd2UgaGF2ZQorKyAgICAgICAgZG5sIHRvIGZhbGwgYmFjayB0byBHTlUgTkxTIGxpYnJhcnkuCisrCisrICAgICAgICBkbmwgQWRkIGEgdmVyc2lvbiBudW1iZXIgdG8gdGhlIGNhY2hlIG1hY3Jvcy4KKysgICAgICAgIGRlZmluZShbZ3RfYXBpX3ZlcnNpb25dLCBpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sIDMsIGlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIDIsIDEpKSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJjXSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGxdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJpbnRsXSkKKysKKysgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjLAorKyAgICAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5ncztdLAorKyAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKKytyZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpXWlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIFsgKyAoaW50KSBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAorKyAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcywKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliYz1ubyldKQorKworKyAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiAhPSAieWVzIjsgdGhlbgorKyAgICAgICAgICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisrICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworKyAgICAgICAgICAgIEFNX0lDT05WX0xJTksKKysgICAgICAgICAgXSkKKysgICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAorKyAgICAgICAgICBkbmwgYWNjb3JkaW5nbHkuIERvbid0IHVzZSBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdLFtpY29udl0pCisrICAgICAgICAgIGRubCBiZWNhdXNlIHRoYXQgd291bGQgYWRkICItbGljb252IiB0byBMSUJJTlRMIGFuZCBMVExJQklOVEwKKysgICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KKysgICAgICAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSkKKysgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsXSwKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCwKKysgICAgICAgICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkSU5DSU5UTCIKKysgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArIChpbnQpIG5nZXR0ZXh0ICgiIiwgIiIsIDApXSwgW10pWyArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoMCldLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8pCisrICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiICE9IHllcyAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisrICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisrICAgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CisrcmV0dXJuIChpbnQpIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKGludCkgbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKV0sCisrICAgICAgICAgICAgICAgW0xJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKKysgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgorKyAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMKKysgICAgICAgICAgICAgICBdKQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgorKyAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKysgICAgICAgIGZpCisrCisrICAgICAgICBkbmwgSWYgYW4gYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZCBHTlUgZ2V0dGV4dCgpIGlzIGZvdW5kLAorKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKysgICAgICAgIGRubCBnZXR0ZXh0IGlzIGFscmVhZHkgcHJlaW5zdGFsbGVkIGluIGxpYmludGwsIHdlIHVwZGF0ZSB0aGlzCisrICAgICAgICBkbmwgbGliaW50bC4gIChDZi4gdGhlIGluc3RhbGwgcnVsZSBpbiBpbnRsL01ha2VmaWxlLmluLikKKysgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliYyIgPSAieWVzIiBcCisrICAgICAgICAgICB8fCB7IHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIiBcCisrICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorKyAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisrICAgICAgICAgIExJQklOVEw9CisrICAgICAgICAgIExUTElCSU5UTD0KKysgICAgICAgICAgSU5DSU5UTD0KKysgICAgICAgIGZpCisrCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisrICAgICAgICAgIGRubCBHTlUgZ2V0dGV4dCBpcyBub3QgZm91bmQgaW4gdGhlIEMgbGlicmFyeS4KKysgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyAgICAgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PXllcworKyAgICAgICAgZmkKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorKyAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPXllcworKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WIgorKyAgICAgICAgTFRMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTFRMSUJJQ09OViIKKysgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHRvIHVzZSBHTlUgZ2V0dGV4dCB0b29scy4KKysgICAgICAgIENBVE9CSkVYVD0uZ21vCisrICAgICAgZmkKKysgICAgXSkKKysKKysgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisrICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgQUNfREVGSU5FKEVOQUJMRV9OTFMsIDEsCisrICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQorKyAgIGlzIHJlcXVlc3RlZC5dKQorKyAgICBlbHNlCisrICAgICAgVVNFX05MUz1ubworKyAgICBmaQorKyAgZmkKKysKKysgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKKysgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKKysgICAgICBlbHNlCisrICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisrICAgIGZpCisrICAgIEFDX01TR19SRVNVTFQoWyRndF9zb3VyY2VdKQorKyAgZmkKKysKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKKysgICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKKysgICAgICAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lOVExdKQorKyAgICAgIGZpCisrCisrICAgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIHBhY2thZ2VzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICAgIEFDX0RFRklORShIQVZFX0dFVFRFWFQsIDEsCisrICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorKyAgICAgIEFDX0RFRklORShIQVZFX0RDR0VUVEVYVCwgMSwKKysgICAgICAgW0RlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKKysgICAgZmkKKysKKysgICAgZG5sIFdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgcG8vIGRpcmVjdG9yeS4KKysgICAgUE9TVUI9cG8KKysgIGZpCisrCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorKyAgICBkbmwgdG8gJ3llcycgYmVjYXVzZSBzb21lIG9mIHRoZSB0ZXN0c3VpdGUgcmVxdWlyZXMgaXQuCisrICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisrICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgZmkKKysKKysgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisrICAgIEFDX1NVQlNUKEJVSUxEX0lOQ0xVREVEX0xJQklOVEwpCisrICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorKyAgICBBQ19TVUJTVChDQVRPQkpFWFQpCisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisrICAgIG5sc19jdl9oZWFkZXJfbGliZ3Q9CisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIERBVEFESVJOQU1FPXNoYXJlCisrICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBJTlNUT0JKRVhUPS5tbworKyAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBHRU5DQVQ9Z2VuY2F0CisrICAgIEFDX1NVQlNUKEdFTkNBVCkKKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgaWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9IHllczsgdGhlbgorKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisrICAgIGZpCisrICAgIEFDX1NVQlNUKElOVExPQkpTKQorKworKyAgICBkbmwgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBpZiB0aGUgc3Vycm91bmRpbmcgcGFja2FnZSB3aXNoZXMgaXQuCisrICAgIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYPWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeAorKyAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKKysgIF0pCisrCisrICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgSU5UTExJQlM9IiRMSUJJTlRMIgorKyAgQUNfU1VCU1QoSU5UTExJQlMpCisrCisrICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisrICBBQ19TVUJTVChMSUJJTlRMKQorKyAgQUNfU1VCU1QoTFRMSUJJTlRMKQorKyAgQUNfU1VCU1QoUE9TVUIpCisrXSkKKysKKysKKytkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgaW50bCBzdWJkaXJlY3RvcnksCisrZG5sIGV4Y2VwdCBmb3IgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVggKGFuZCBwb3NzaWJseSBMSUJUT09MKSwgSU5UTE9CSlMsCisrZG5sICAgICAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEwsIEJVSUxEX0lOQ0xVREVEX0xJQklOVEwuCisrQUNfREVGVU4oW0FNX0lOVExfU1VCRElSXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTUtJTlNUQUxMRElSU10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0lTQ19QT1NJWF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DX0NPTlNUXSlkbmwKKysgIEFDX1JFUVVJUkUoW2JoX0NfU0lHTkVEXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1RZUEVfT0ZGX1RdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorKyAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9MT05HX0xPTkddKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9MT05HRE9VQkxFXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9UWVBFX1dJTlRfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9JTlRNQVhfVF0pCisrICBBQ19SRVFVSVJFKFtndF9QUklOVEZfUE9TSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19NTUFQXSlkbmwKKysgIEFDX1JFUVVJUkUoW2ptX0dMSUJDMjFdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfSU5URElWMF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9IRUFERVJfSU5UVFlQRVNfSF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKWRubAorKyAgQUNfUkVRVUlSRShbZ2xfWFNJWkVdKWRubAorKworKyAgQUNfQ0hFQ0tfVFlQRShbcHRyZGlmZl90XSwgLAorKyAgICBbQUNfREVGSU5FKFtwdHJkaWZmX3RdLCBbbG9uZ10sCisrICAgICAgIFtEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKKysgICAgXSkKKysgIEFDX0NIRUNLX0hFQURFUlMoW2FyZ3ouaCBsaW1pdHMuaCBsb2NhbGUuaCBubF90eXBlcy5oIG1hbGxvYy5oIHN0ZGRlZi5oIFwKKytzdGRsaWIuaCBzdHJpbmcuaCB1bmlzdGQuaCBzeXMvcGFyYW0uaF0pCisrICBBQ19DSEVDS19GVU5DUyhbYXNwcmludGYgZndwcmludGYgZ2V0Y3dkIGdldGVnaWQgZ2V0ZXVpZCBnZXRnaWQgZ2V0dWlkIFwKKyttZW1wY3B5IG11bm1hcCBwdXRlbnYgc2V0ZW52IHNldGxvY2FsZSBzbnByaW50ZiBzdHBjcHkgc3RyY2FzZWNtcCBzdHJkdXAgXAorK3N0cnRvdWwgdHNlYXJjaCB3Y3NsZW4gX19hcmd6X2NvdW50IF9fYXJnel9zdHJpbmdpZnkgX19hcmd6X25leHQgXAorK19fZnNldGxvY2tpbmddKQorKworKyAgZG5sIFVzZSB0aGUgX3NucHJpbnRmIGZ1bmN0aW9uIG9ubHkgaWYgaXQgaXMgZGVjbGFyZWQgKGJlY2F1c2Ugb24gTmV0QlNEIGl0CisrICBkbmwgaXMgZGVmaW5lZCBhcyBhIHdlYWsgYWxpYXMgb2Ygc25wcmludGY7IHdlIHByZWZlciB0byB1c2UgdGhlIGxhdHRlcikuCisrICBndF9DSEVDS19ERUNMKF9zbnByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKF9zbndwcmludGYsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKworKyAgZG5sIFVzZSB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgb25seSBpZiB0aGV5IGFyZSBkZWNsYXJlZC4KKysgIGRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWZpbmVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgaW4gU29sYXJpcworKyAgZG5sIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdAorKyAgZG5sIG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuIG9uIFNvbGFyaXMgMi42KS4KKysgIGRubCBEb24ndCB1c2UgQUNfQ0hFQ0tfREVDTFMgYmVjYXVzZSBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gYXV0b2NvbmYtMi4xMy4KKysgIGd0X0NIRUNLX0RFQ0woZmVvZl91bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKGZnZXRzX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysgIGd0X0NIRUNLX0RFQ0woZ2V0Y191bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrCisrICBjYXNlICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCBpbgorKyAgICAqeWVzKSBIQVZFX1BPU0lYX1BSSU5URj0xIDs7CisrICAgICopIEhBVkVfUE9TSVhfUFJJTlRGPTAgOzsKKysgIGVzYWMKKysgIEFDX1NVQlNUKFtIQVZFX1BPU0lYX1BSSU5URl0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9BU1BSSU5URj0xCisrICBlbHNlCisrICAgIEhBVkVfQVNQUklOVEY9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX0FTUFJJTlRGXSkKKysgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgorKyAgICBIQVZFX1NOUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9TTlBSSU5URj0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfU05QUklOVEZdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9XUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9XUFJJTlRGPTAKKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9XUFJJTlRGXSkKKysKKysgIEFNX0lDT05WCisrICBBTV9MQU5HSU5GT19DT0RFU0VUCisrICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKysgICAgQU1fTENfTUVTU0FHRVMKKysgIGZpCisrCisrICBkbmwgaW50bC9wbHVyYWwuYyBpcyBnZW5lcmF0ZWQgZnJvbSBpbnRsL3BsdXJhbC55LiBJdCByZXF1aXJlcyBiaXNvbiwKKysgIGRubCBiZWNhdXNlIHBsdXJhbC55IHVzZXMgYmlzb24gc3BlY2lmaWMgZmVhdHVyZXMuIEl0IHJlcXVpcmVzIGF0IGxlYXN0CisrICBkbmwgYmlzb24tMS4yNiBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbnMgZ2VuZXJhdGUgYSBwbHVyYWwuYyB0aGF0IGRvZXNuJ3QKKysgIGRubCBjb21waWxlLgorKyAgZG5sIGJpc29uIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgbWFpbnRhaW5lciAod2hvIHRvdWNoZXMgcGx1cmFsLnkpLiBCdXQgaW4KKysgIGRubCBvcmRlciB0byBhdm9pZCBzZXBhcmF0ZSBNYWtlZmlsZXMgb3IgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlLCB3ZSBwdXQKKysgIGRubCB0aGUgcnVsZSBpbiBnZW5lcmFsIE1ha2VmaWxlLiBOb3csIHNvbWUgcGVvcGxlIGNhcmVsZXNzbHkgdG91Y2ggdGhlCisrICBkbmwgZmlsZXMgb3IgaGF2ZSBhIGJyb2tlbiAibWFrZSIgcHJvZ3JhbSwgaGVuY2UgdGhlIHBsdXJhbC5jIHJ1bGUgd2lsbAorKyAgZG5sIHNvbWV0aW1lcyBmaXJlLiBUbyBhdm9pZCBhbiBlcnJvciwgZGVmaW5lcyBCSVNPTiB0byAiOiIgaWYgaXQgaXMgbm90CisrICBkbmwgcHJlc2VudCBvciB0b28gb2xkLgorKyAgQUNfQ0hFQ0tfUFJPR1MoW0lOVExCSVNPTl0sIFtiaXNvbl0pCisrICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorKyAgICBhY192ZXJjX2ZhaWw9eWVzCisrICBlbHNlCisrICAgIGRubCBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3ZlcnNpb24gb2YgYmlzb25dKQorK2NoYW5nZXF1b3RlKDw8LD4+KWRubAorKyAgICBhY19wcm9nX3ZlcnNpb249YCRJTlRMQklTT04gLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIEJpc29uLiogXChbMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKysgICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCisrICAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgICAgMS4yWzYtOV0qIHwgMS5bMy05XVswLTldKiB8IFsyLTldLiopCisrY2hhbmdlcXVvdGUoWyxdKWRubAorKyAgICAgICAgIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgb2siOyBhY192ZXJjX2ZhaWw9bm87OworKyAgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgIGVzYWMKKysgICAgQUNfTVNHX1JFU1VMVChbJGFjX3Byb2dfdmVyc2lvbl0pCisrICBmaQorKyAgaWYgdGVzdCAkYWNfdmVyY19mYWlsID0geWVzOyB0aGVuCisrICAgIElOVExCSVNPTj06CisrICBmaQorK10pCisrCisrCisrZG5sIGd0X0NIRUNLX0RFQ0woRlVOQywgSU5DTFVERVMpCisrZG5sIENoZWNrIHdoZXRoZXIgYSBmdW5jdGlvbiBpcyBkZWNsYXJlZC4KKytBQ19ERUZVTihbZ3RfQ0hFQ0tfREVDTF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJDEgaXMgZGVjbGFyZWRdLCBhY19jdl9oYXZlX2RlY2xfJDEsCisrICAgIFtBQ19UUllfQ09NUElMRShbJDJdLCBbCisrI2lmbmRlZiAkMQorKyAgY2hhciAqcCA9IChjaGFyICopICQxOworKyNlbmRpZgorK10sIGFjX2N2X2hhdmVfZGVjbF8kMT15ZXMsIGFjX2N2X2hhdmVfZGVjbF8kMT1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsXyQxID0geWVzOyB0aGVuCisrICAgIGd0X3ZhbHVlPTEKKysgIGVsc2UKKysgICAgZ3RfdmFsdWU9MAorKyAgZmkKKysgIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9ERUNMX110cmFuc2xpdCgkMSwgW2Etel0sIFtBLVpdKSwgWyRndF92YWx1ZV0sCisrICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYCQxJywgYW5kIHRvIDAgaWYgeW91IGRvbid0Ll0pCisrXSkKKysKKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCisrQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX1ZFUlNJT05dLCBbXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvZ2xpYmMyMS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvZ2xpYmMyMS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjgzMzY3NTQzMiAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgZ2xpYmMyMS5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMS4zLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisrIyBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbam1fR0xJQkMyMV0sCisrICBbCisrICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlciwKKysgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisrICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorKwlbCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fR05VX0xJQlJBUllfXworKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKysgIEx1Y2t5IEdOVSB1c2VyCisrICNlbmRpZgorKyNlbmRpZgorKwldLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8pCisrICAgICAgXQorKyAgICApCisrICAgIEFDX1NVQlNUKEdMSUJDMjEpCisrICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisrICBdCisrKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pY29udi5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaWNvbnYubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44Mzk2NzQ1MjAgLTA0MDAKK0BAIC0wLDAgKzEsMTAzIEBACisrIyBpY29udi5tNCBzZXJpYWwgQU00IChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ljb252XSkKKytdKQorKworK0FDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKytbCisrICBkbmwgU29tZSBzeXN0ZW1zIGhhdmUgaWNvbnYgaW4gbGliYywgc29tZSBoYXZlIGl0IGluIGxpYmljb252IChPU0YvMSBhbmQKKysgIGRubCB0aG9zZSB3aXRoIHRoZSBzdGFuZGFsb25lIHBvcnRhYmxlIEdOVSBsaWJpY29udiBpbnN0YWxsZWQpLgorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKysKKysgIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJpY29udiBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYmljb252LXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LiBUaGUgZmlyc3QKKysgIGRubCBBQ19UUllfTElOSyB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19UUllfTElOSyB3aWxsIHN1Y2NlZWQuCisrICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJQ09OVl0pCisrCisrICBBQ19DQUNIRV9DSEVDSyhmb3IgaWNvbnYsIGFtX2N2X2Z1bmNfaWNvbnYsIFsKKysgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgorKyAgICBhbV9jdl9saWJfaWNvbnY9bm8KKysgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8aWNvbnYuaD5dLAorKyAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworKyAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKysgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+XSwKKysgICAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisrICAgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisrICAgICAgICBhbV9jdl9saWJfaWNvbnY9eWVzCisrICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorKyAgICBmaQorKyAgXSkKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9JQ09OViwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbi5dKQorKyAgZmkKKysgIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCisrICAgIEFDX01TR19SRVNVTFQoWyRMSUJJQ09OVl0pCisrICBlbHNlCisrICAgIGRubCBJZiAkTElCSUNPTlYgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZCAkSU5DSUNPTlYKKysgICAgZG5sIGVpdGhlci4KKysgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorKyAgICBMSUJJQ09OVj0KKysgICAgTFRMSUJJQ09OVj0KKysgIGZpCisrICBBQ19TVUJTVChMSUJJQ09OVikKKysgIEFDX1NVQlNUKExUTElCSUNPTlYpCisrXSkKKysKKytBQ19ERUZVTihbQU1fSUNPTlZdLAorK1sKKysgIEFNX0lDT05WX0xJTksKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBkZWNsYXJhdGlvbl0pCisrICAgIEFDX0NBQ0hFX1ZBTChhbV9jdl9wcm90b19pY29udiwgWworKyAgICAgIEFDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCisrc2l6ZV90IGljb252IChpY29udl90IGNkLCBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOworKyNlbHNlCisrc2l6ZV90IGljb252KCk7CisrI2VuZGlmCisrXSwgW10sIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiIsIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0IikKKysgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiXSkKKysgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCisrICAgIEFDX01TR19SRVNVTFQoWyRde2FjX3Q6LQorKyAgICAgICAgIH1bJF1hbV9jdl9wcm90b19pY29udikKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKElDT05WX0NPTlNULCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSwKKysgICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludGRpdjAubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludGRpdjAubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NDU2NzM2MDggLTA0MDAKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludG1heC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50bWF4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODU1NjcyMDg4IC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyBpbnRtYXgubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciB0aGUgc3lzdGVtIGhhcyB0aGUgJ2ludG1heF90JyB0eXBlLCBidXQgZG9uJ3QgYXR0ZW1wdCB0bworK2RubCBmaW5kIGEgcmVwbGFjZW1lbnQgaWYgaXQgaXMgbGFja2luZy4KKysKKytBQ19ERUZVTihbZ3RfVFlQRV9JTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIEFDX0NBQ0hFX0NIRUNLKGZvciBpbnRtYXhfdCwgZ3RfY3ZfY19pbnRtYXhfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkZGVmLmg+IAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKytdLCBbaW50bWF4X3QgeCA9IC0xO10sIGd0X2N2X2NfaW50bWF4X3Q9eWVzLCBndF9jdl9jX2ludG1heF90PW5vKV0pCisrICBpZiB0ZXN0ICRndF9jdl9jX2ludG1heF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0lOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlc19oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlc19oLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODY4NjcwMTEyIC0wNDAwCitAQCAtMCwwICsxLDI4IEBACisrIyBpbnR0eXBlc19oLm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLAorKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisrCisrQUNfREVGVU4oW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFtBQ19UUllfQ09NUElMRSgKKysgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorKyAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlcy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50dHlwZXMubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NjE2NzExNzYgLTA0MDAKK0BAIC0wLDAgKzEsMjcgQEAKKysjIGludHR5cGVzLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0ggaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoCisrIyA8c3lzL3R5cGVzLmg+LgorKworK0FDX0RFRlVOKFtndF9IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbCisrICAgIEFDX1RSWV9DT01QSUxFKAorKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgICBbXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubykKKysgIF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19ILCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50dHlwZXMtcHJpLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlcy1wcmkubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NzQ2NjkyMDAgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGludHR5cGVzLXByaS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworKyMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKKysjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorKworK0FDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAorK1sKKysgIEFDX1JFUVVJUkUoW2d0X0hFQURFUl9JTlRUWVBFU19IXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisrICAgICAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiwKKysgICAgICBbCisrICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2lmZGVmIFBSSWQzMgorK2NoYXIgKnAgPSBQUklkMzI7CisrI2VuZGlmCisrXSwgW10sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49bm8sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzKQorKyAgICAgIF0pCisrICBmaQorKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaXNjLXBvc2l4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pc2MtcG9zaXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44ODU2Njc1MjggLTA0MDAKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGNtZXNzYWdlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sY21lc3NhZ2UubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45MDI2NjQ5NDQgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKysKKysjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisrCisrQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKysgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisrICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xpYi1sZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbGliLWxkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTA4NjY0MDMyIC0wNDAwCitAQCAtMCwwICsxLDExMiBAQAorKyMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCisrZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KKytkbmwgd2l0aCBsaWJ0b29sLm00LgorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEX0dOVV0sCisrW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGFjbF9jdl9wcm9nX2dudV9sZCwKKytbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKytjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKypHTlUqIHwgKid3aXRoIEJGRCcqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKKytlc2FjXSkKKyt3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCisrXSkKKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKKytbQUNfQVJHX1dJVEgoZ251LWxkLAorK1sgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub11dLAorK3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCisrQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorK2ZpCisrYWNfcHJvZz1sZAorK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyopCisrICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworKyAgKikKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworKyAgZXNhYworKyAgY2FzZSAkYWNfcHJvZyBpbgorKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKysgICAgW1tcXC9dKiB8IFtBLVphLXpdOltcXC9dKildCisrICAgICAgW3JlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLyddCisrICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKysgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAorKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisrICAgICAgZG9uZQorKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorKyAgICAgIDs7CisrICAiIikKKysgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisrICAgIGFjX3Byb2c9bGQKKysgICAgOzsKKysgICopCisrICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKysgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorKyAgICA7OworKyAgZXNhYworK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKytlbHNlCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKKytmaQorK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKKytbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKKysgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisrICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisrICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKysgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisrICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KKysgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworKyAgICAgICopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrZWxzZQorKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrZmldKQorK0xEPSIkYWNsX2N2X3BhdGhfTEQiCisraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVCgkTEQpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCisrQUNfTElCX1BST0dfTERfR05VCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGliLWxpbmsubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xpYi1saW5rLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTE0NjYzMTIwIC0wNDAwCitAQCAtMCwwICsxLDU1MSBAQAorKyMgbGliLWxpbmsubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKKytkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKKysgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2xpYnM9IiRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKysgIF0pCisrICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorKyAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisrICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorKyAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisrICBIQVZFX0xJQltdTkFNRT15ZXMKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUpCisrZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCisrZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCisrZG5sIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIHNwZWNpZmllZCB0ZXN0Y29kZS4gSWYgZm91bmQsIGl0CisrZG5sIHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfSBhbmQKKytkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKKytkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCisrZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgorK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysKKysgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKysgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliW11OYW1lIGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgorKyAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorKyAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgXSkKKysgIGlmIHRlc3QgIiRhY19jdl9saWJbXU5hbWUiID0geWVzOyB0aGVuCisrICAgIEhBVkVfTElCW11OQU1FPXllcworKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKysgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQorKyAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKKysgIGVsc2UKKysgICAgSEFWRV9MSUJbXU5BTUU9bm8KKysgICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAorKyAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCisrICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKysgICAgTElCW11OQU1FPQorKyAgICBMVExJQltdTkFNRT0KKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9MSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKKytkbmwgbGliZXh0LCBzaGxpYmV4dCwgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgaGFyZGNvZGVfZGlyZWN0LCBoYXJkY29kZV9taW51c19MLgorK0FDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKSAgICAgICAgICAgICAgICBkbmwgd2UgdXNlICRDQywgJEdDQywgJExERkxBR1MKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUk9HX0xEXSkgICAgICAgICAgICBkbmwgd2UgdXNlICRMRCwgJHdpdGhfZ251X2xkCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorKyAgQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pIGRubCB3ZSB1c2UgJGFjX2F1eF9kaXIKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luXSwgYWNsX2N2X3JwYXRoLCBbCisrICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKysgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisrICAgIC4gLi9jb25mdGVzdC5zaAorKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisrICAgIGFjbF9jdl9ycGF0aD1kb25lCisrICBdKQorKyAgd2w9IiRhY2xfY3Zfd2wiCisrICBsaWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorKyAgc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisrICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisrICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrICBoYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorKyAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KKysgIEFDX0FSR19FTkFCTEUocnBhdGgsCisrICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorKyAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQorK10pCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliJDEtcHJlZml4XSwKKytbICAtLXdpdGgtbGliJDEtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliJDEtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQKKysgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKysgIExJQltdTkFNRT0KKysgIExUTElCW11OQU1FPQorKyAgSU5DW11OQU1FPQorKyAgcnBhdGhkaXJzPQorKyAgbHRycGF0aGRpcnM9CisrICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisrICBuYW1lc19uZXh0X3JvdW5kPSckMSAkMicKKysgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKysgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisrICAgIG5hbWVzX25leHRfcm91bmQ9CisrICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKysgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorKyAgICAgICAgZG5sIFNlZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NhdGVkIGJ5IGFuIGVhcmxpZXIgQUNfTElCX0xJTktGTEFHUworKyAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgorKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKysgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisrICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCisrICAgICAgICAgICAgZG5sIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZXhpc3QuIFNvIGp1c3QgZHJvcCBpdC4KKysgICAgICAgICAgICA6CisrICAgICAgICAgIGZpCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUworKyAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCisrICAgICAgICAgIGZvdW5kX2Rpcj0KKysgICAgICAgICAgZm91bmRfbGE9CisrICAgICAgICAgIGZvdW5kX3NvPQorKyAgICAgICAgICBmb3VuZF9hPQorKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisrICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCisrICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKysgICAgICAgICAgICAgIGRubCBzdGFuZGFyZCAvdXNyL2xpYi4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG5sIFRoZSBoYXJkY29kaW5nIGludG8gJExJQk5BTUUgaXMgc3lzdGVtIGRlcGVuZGVudC4KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQgaWYgaXQncyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgTERGTEFHUworKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQorKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIEFzc3VtZSB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgbmVhcmJ5LgorKyAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKysgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorKyAgICAgICAgICAgICAgKi9saWIgfCAqL2xpYi8pCisrICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAncywvbGliLyokLCwnYAorKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisrICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICBJTkNbXU5BTUU9IiR7SU5DW11OQU1FfSR7SU5DW11OQU1FOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgTG9vayBmb3IgZGVwZW5kZW5jaWVzLgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisrICAgICAgICAgICAgICBkbmwgZGxuYW1lLCBsaWJyYXJ5X25hbWVzLCBvbGRfbGlicmFyeSwgZGVwZW5kZW5jeV9saWJzLCBjdXJyZW50LAorKyAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KKysgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgorKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorKyAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorKyAgICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkTElCTkFNRSwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1SKikKKysgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtbCopCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqLmxhKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworKyAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKKysgICAgICAgICAgICAgICAgICAgIGRubCBvcHRpb24uCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBEaWRuJ3QgZmluZCB0aGUgbGlicmFyeTsgYXNzdW1lIGl0IGlzIGluIHRoZSBzeXN0ZW0gZGlyZWN0b3JpZXMKKysgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorKyAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQorKyAgICAgICAgICAgIGRubCBydW50aW1lIGxvYWRlciwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMgc2V2ZXJlbHkgbWlzY29uZmlndXJlZC4pCisrICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgZG9uZQorKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKysgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisrICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisrICAgICAgYWxsZGlycz0KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorKyAgICAgIGRvbmUKKysgICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgIGVsc2UKKysgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKysgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgICAgZG9uZQorKyAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBkbmwgV2hlbiB1c2luZyBsaWJ0b29sLCB0aGUgb3B0aW9uIHRoYXQgd29ya3MgZm9yIGJvdGggbGlicmFyaWVzIGFuZAorKyAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1SJGZvdW5kX2RpciIKKysgICAgZG9uZQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorK2RubCB1bmxlc3MgYWxyZWFkeSBwcmVzZW50IGluIFZBUi4KKytkbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcworK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCisrQUNfREVGVU4oW0FDX0xJQl9BUFBFTkRUT1ZBUl0sCisrWworKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKysgICAgaGF2ZWl0PQorKyAgICBmb3IgeCBpbiAkWyQxXTsgZG8KKysgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorKyAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgYnJlYWsKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgWyQxXT0iJHtbJDFdfSR7WyQxXTorIH0kZWxlbWVudCIKKysgICAgZmkKKysgIGRvbmUKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9saWItcHJlZml4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9saWItcHJlZml4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTIxNjYyMDU2IC0wNDAwCitAQCAtMCwwICsxLDE1NSBAQAorKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCisrZG5sIHNpbWlsYXIgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYgMi41Mi4uLjIuNTcgZXhjZXB0IHRoYXQgaXMgZG9lc24ndAorK2RubCByZXF1aXJlIGV4Y2Vzc2l2ZSBicmFja2V0aW5nLgorK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCisrW0FDX0RFRlVOKFtBQ19MSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbWyQyXV0sWyQzXSxbJDRdKV0pXSwKKytbQUNfREVGVU4oW0FDX11bTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sWyQyXSxbJDNdLFskNF0pXSldKQorKworK2RubCBBQ19MSUJfUFJFRklYIGFkZHMgdG8gdGhlIENQUEZMQUdTIGFuZCBMREZMQUdTIHRoZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQKKytkbmwgdG8gYWNjZXNzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGxpYnJhcmllcy4gVGhlIGJhc2ljIGFzc3VtcHRpb24gaXMgdGhhdAorK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorK2RubCB3aXRoIHRoZSBzYW1lIC0tcHJlZml4IG9wdGlvbi4KKytkbmwgVGhpcyBtYWNybyBpcyBub3QgbmVlZGVkIGlmIG9ubHkgQUNfTElCX0xJTktGTEFHUyBpcyB1c2VkIHRvIGxvY2F0ZQorK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFRklYXSwKKytbCisrICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWItcHJlZml4XSwKKytbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJExERkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9JHtMREZMQUdTOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKKytkbmwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gd2hpY2ggJHByZWZpeCBhbmQKKytkbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCisrWworKyAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCisrICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisrICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKysgIGZpCisrICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZmkKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCisrCisrZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKKytkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorK2RubCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAorK1sKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisrICAkMQorKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nZG91YmxlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sb25nZG91YmxlLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTQyNjU4ODY0IC0wNDAwCitAQCAtMCwwICsxLDMwIEBACisrIyBsb25nZG91YmxlLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX0xPTkdET1VCTEVdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbG9uZyBkb3VibGVdLCBndF9jdl9jX2xvbmdfZG91YmxlLAorKyAgICBbaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgZ3RfY3ZfY19sb25nX2RvdWJsZT15ZXMKKysgICAgIGVsc2UKKysgICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyAgICAgICAgIC8qIFRoZSBTdGFyZGVudCBWaXN0cmEga25vd3Mgc2l6ZW9mKGxvbmcgZG91YmxlKSwgYnV0IGRvZXMgbm90IHN1cHBvcnQgaXQuICAqLworKyAgICAgICAgIGxvbmcgZG91YmxlIGZvbyA9IDAuMDsKKysgICAgICAgICAvKiBPbiBVbHRyaXggNC4zIGNjLCBsb25nIGRvdWJsZSBpcyA0IGFuZCBkb3VibGUgaXMgOC4gICovCisrICAgICAgICAgaW50IGFycmF5IFsyKihzaXplb2YobG9uZyBkb3VibGUpID49IHNpemVvZihkb3VibGUpKSAtIDFdOworKyAgICAgICAgIF0sICwKKysgICAgICAgICBndF9jdl9jX2xvbmdfZG91YmxlPXllcywgZ3RfY3ZfY19sb25nX2RvdWJsZT1ubykKKysgICAgIGZpXSkKKysgIGlmIHRlc3QgJGd0X2N2X2NfbG9uZ19kb3VibGUgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGRvdWJsZScgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nbG9uZy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NDk2NTc4MDAgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIGxvbmdsb25nLm00IHNlcmlhbCA0CisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9MT05HX0xPTkcgaWYgJ2xvbmcgbG9uZycgd29ya3MuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFtsb25nIGxvbmcgbGwgPSAxTEw7IGludCBpID0gNjM7XSwKKysgICAgW2xvbmcgbG9uZyBsbG1heCA9IChsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIGxsIDw8IGkgfCBsbCA+PiBpIHwgbGxtYXggLyBsbCB8IGxsbWF4ICUgbGw7XSwKKysgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGxvbmcnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvTWFrZWZpbGUuYW0JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQ4NjQyNzUyIC0wNDAwCitAQCAtMCwwICsxIEBACisrRVhUUkFfRElTVCA9IGNvZGVzZXQubTQgZ2V0dGV4dC5tNCBnbGliYzIxLm00IGljb252Lm00IGludGRpdjAubTQgaW50bWF4Lm00IGludHR5cGVzLm00IGludHR5cGVzX2gubTQgaW50dHlwZXMtcHJpLm00IGlzYy1wb3NpeC5tNCBsY21lc3NhZ2UubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbG9uZ2RvdWJsZS5tNCBsb25nbG9uZy5tNCBubHMubTQgcG8ubTQgcHJpbnRmLXBvc2l4Lm00IHByb2d0ZXN0Lm00IHNpZ25lZC5tNCBzaXplX21heC5tNCBzdGRpbnRfaC5tNCB1aW50bWF4X3QubTQgdWxvbmdsb25nLm00IHdjaGFyX3QubTQgd2ludF90Lm00IHhzaXplLm00CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L25scy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbmxzLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTU1NjU2ODg4IC0wNDAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBubHMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCisrZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorKyAgZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKysgIEFDX0FSR19FTkFCTEUobmxzLAorKyAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKysgICAgVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKysgIEFDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrICBBQ19TVUJTVChVU0VfTkxTKQorK10pCisrCisrQUNfREVGVU4oW0FNX01LSU5TVEFMTERJUlNdLAorK1sKKysgIGRubCBJZiB0aGUgQUNfQ09ORklHX0FVWF9ESVIgbWFjcm8gZm9yIGF1dG9jb25mIGlzIHVzZWQgd2UgcG9zc2libHkKKysgIGRubCBmaW5kIHRoZSBta2luc3RhbGxkaXJzIHNjcmlwdCBpbiBhbm90aGVyIHN1YmRpciBidXQgJCh0b3Bfc3JjZGlyKS4KKysgIGRubCBUcnkgdG8gbG9jYXRlIGl0LgorKyAgTUtJTlNUQUxMRElSUz0KKysgIGlmIHRlc3QgLW4gIiRhY19hdXhfZGlyIjsgdGhlbgorKyAgICBjYXNlICIkYWNfYXV4X2RpciIgaW4KKysgICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKysgICAgICAqKSBNS0lOU1RBTExESVJTPSJcJCh0b3BfYnVpbGRkaXIpLyRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiIDs7CisrICAgIGVzYWMKKysgIGZpCisrICBpZiB0ZXN0IC16ICIkTUtJTlNUQUxMRElSUyI7IHRoZW4KKysgICAgTUtJTlNUQUxMRElSUz0iXCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIKKysgIGZpCisrICBBQ19TVUJTVChNS0lOU1RBTExESVJTKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3BvLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9wby5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk2MTY1NTk3NiAtMDQwMAorQEAgLTAsMCArMSw0MjYgQEAKKysjIHBvLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorKworK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBwbyBzdWJkaXJlY3RvcnkuCisrQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FNX01LSU5TVEFMTERJUlNdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKysKKysgIGRubCBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGVzdHMgYWxzbyBpZiAtLWRpc2FibGUtbmxzIGhhcyBiZWVuIGdpdmVuLAorKyAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ2ZtdCBpbiB0aGUgUEFUSC4KKysgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KKysgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCisrICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR0ZNVCwgbXNnZm10LAorKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKysgICAgOikKKysgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIHhnZXR0ZXh0IDAuMTIgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisrICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIHhnZXR0ZXh0LgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisrICAgIDopCisrICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgcm0gLWYgbWVzc2FnZXMucG8KKysKKysgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dtZXJnZSAwLjExIG9yIG5ld2VyIGluIHRoZSBQQVRILgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxXSwgOikKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSBtc2dmbXQuCisrICBpZiB0ZXN0ICIkR01TR0ZNVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgbXNnZm10IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisrICAgIGRubCBNYWtlZmlsZXMgc3RpbGwgY2FuIHdvcmsuCisrICAgIGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAgIChpZiAkR01TR0ZNVCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEdNU0dGTVQ9YGVjaG8gIiRHTVNHRk1UIiB8IHNlZCAtZSAncyxeLiovLCwnYAorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgJEdNU0dGTVQgcHJvZ3JhbSBpcyBub3QgR05VIG1zZ2ZtdDsgaWdub3JlIGl0XSkKKysgICAgICBHTVNHRk1UPSI6IgorKyAgICBmaQorKyAgZmkKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSB4Z2V0dGV4dC4KKysgIGlmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgeGdldHRleHQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKKysgICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KKysgICAgaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgICAoaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXRdKQorKyAgICAgIFhHRVRURVhUPSI6IgorKyAgICBmaQorKyAgICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgICBybSAtZiBtZXNzYWdlcy5wbworKyAgZmkKKysKKysgIEFDX09VVFBVVF9DT01NQU5EUyhbCisrICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCisrICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgorKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorKyAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKysgICAgICBlc2FjCisrICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisrICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCisrICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKysgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKysgICAgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKysgICAgICAgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKysgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgorKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKysgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKKysgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisrICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJworKyAgICAgICAgICBmaQorKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisrICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisrICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworKyAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgICBQT0ZJTEVTPQorKyAgICAgICAgICBVUERBVEVQT0ZJTEVTPQorKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisrICAgICAgICAgIEdNT0ZJTEVTPQorKyAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKysgICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKysgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKysgICAgICAgICAgSU5TVF9MSU5HVUFTPQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIHVzZWl0PW5vCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisrICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKysgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisrICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisrICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgQ0FUQUxPR1M9CisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisrICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgorKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKyAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCisrICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisrICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGRvbmUKKysgICAgICAgIGZpCisrICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZG9uZV0sCisrICAgWyMgQ2FwdHVyZSB0aGUgdmFsdWUgb2Ygb2Jzb2xldGUgQUxMX0xJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUKKysgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKysgICAgIyBmcm9tIGF1dG9tYWtlLgorKyAgICBldmFsICdPQlNPTEVURV9BTExfTElOR1VBUycnPSIkQUxMX0xJTkdVQVMiJworKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisrICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKysgICBdKQorK10pCisrCisrZG5sIFBvc3Rwcm9jZXNzZXMgYSBNYWtlZmlsZSBpbiBhIGRpcmVjdG9yeSBjb250YWluaW5nIFBPIGZpbGVzLgorK0FDX0RFRlVOKFtBTV9QT1NUUFJPQ0VTU19QT19NQUtFRklMRV0sCisrWworKyAgIyBXaGVuIHRoaXMgY29kZSBpcyBydW4sIGluIGNvbmZpZy5zdGF0dXMsIHR3byB2YXJpYWJsZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKysgICMgc2V0OgorKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisrICAjIC0gTElOR1VBUyBpcyB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExJTkdVQVMgYXQgY29uZmlndXJlCisrICAjICAgdGltZS4KKysKKytjaGFuZ2VxdW90ZSgsKWRubAorKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisrICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisrICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKysgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKysgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKysgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKysgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKysgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKysgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisrICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisrICBlc2FjCisrCisrICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKysgIGlmIHRlc3QgIlhgKGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgIGd0X2VjaG89J2VjaG8nCisrICBlbHNlCisrICAgIGlmIHRlc3QgIlhgKHByaW50ZiAnJXNcbicgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgICAgZ3RfZWNobz0ncHJpbnRmICVzXG4nCisrICAgIGVsc2UKKysgICAgICBlY2hvX2Z1bmMgKCkgeworKyAgICAgICAgY2F0IDw8RU9UCisrJCoKKytFT1QKKysgICAgICB9CisrICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworKyAgICBmaQorKyAgZmkKKysKKysgICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KKysgIHNlZF94X3ZhcmlhYmxlPScKKysjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisreAorK3MvUC9QLworK3gKKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgorKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisrICAjIFNlZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKysgIGJhCisrfQorK2JkCisrOmEKKysjIEhlcmUgd2UgYXJlIHByb2Nlc3NpbmcgYSBsaW5lIGZyb20gdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrIyBSZW1vdmUgY29tbWVudCwgbW9yZSBwcmVjaXNlbHkgcmVwbGFjZSBpdCB3aXRoIGEgc3BhY2UuCisrcy8jLiokLyAvCisrIyBTZWUgaWYgdGhlIGxpbmUgZW5kcyBpbiBhIGJhY2tzbGFzaC4KKyt0YgorKzpiCisrcy9cXCQvLworKyMgUHJpbnQgdGhlIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGJhY2tzbGFzaC4KKytwCisrdGMKKysjIFRoZXJlIHdhcyBubyB0cmFpbGluZyBiYWNrc2xhc2guIFRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gaXMKKysjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorK3MvXi4qJC8vCisreAorK2JkCisrOmMKKysjIEEgdHJhaWxpbmcgYmFja3NsYXNoIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gY29udGludWVzIGluIHRoZQorKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorK3MvXi4qJC9QLworK3gKKys6ZAorKycKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrCisrICAjIFNldCBQT1RGSUxFUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIFBPVEZJTEVTLgorKyAgc2VkX3hfUE9URklMRVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9QT1RGSUxFUy9nJ2AiCisrICBQT1RGSUxFUz1gc2VkIC1uIC1lICIkc2VkX3hfUE9URklMRVMiIDwgIiRhY19maWxlImAKKysgICMgQ29tcHV0ZSBQT1RGSUxFU19ERVBTIGFzCisrICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisrICBQT1RGSUxFU19ERVBTPQorKyAgZm9yIGZpbGUgaW4gJFBPVEZJTEVTOyBkbworKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKysgIGRvbmUKKysgIFBPTUFLRUZJTEVERVBTPSIiCisrCisrICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisrICBmaQorKyAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisrICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorKyAgZWxzZQorKyAgICAjIFNldCBBTExfTElOR1VBUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJTkdVQVMuCisrICAgIHNlZF94X0xJTkdVQVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYCIKKysgICAgQUxMX0xJTkdVQVNfPWBzZWQgLW4gLWUgIiRzZWRfeF9MSU5HVUFTIiA8ICIkYWNfZmlsZSJgCisrICBmaQorKyAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZS4KKysgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICMgQ29tcHV0ZSBQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKysgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAjIENvbXB1dGUgUFJPUEVSVElFU0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisrICAjIENvbXB1dGUgQ0xBU1NGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5jbGFzcykKKysgICMgQ29tcHV0ZSBRTUZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5xbSkKKysgICMgQ29tcHV0ZSBNU0dGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisrICAjIENvbXB1dGUgUkVTT1VSQ0VTRExMRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkvJChET01BSU4pLnJlc291cmNlcy5kbGwpCisrICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorKyAgICAuKSBzcmNkaXJwcmU9IDs7CisrICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgIGVzYWMKKysgIFBPRklMRVM9CisrICBVUERBVEVQT0ZJTEVTPQorKyAgRFVNTVlQT0ZJTEVTPQorKyAgR01PRklMRVM9CisrICBQUk9QRVJUSUVTRklMRVM9CisrICBDTEFTU0ZJTEVTPQorKyAgUU1GSUxFUz0KKysgIE1TR0ZJTEVTPQorKyAgUkVTT1VSQ0VTRExMRklMRVM9CisrICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKysgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorKyAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisrICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisrICAgIENMQVNTRklMRVM9IiRDTEFTU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcuY2xhc3MiCisrICAgIFFNRklMRVM9IiRRTUZJTEVTICRzcmNkaXJwcmUkbGFuZy5xbSIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKysgICAgTVNHRklMRVM9IiRNU0dGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnYAorKyAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgZG9uZQorKyAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisrICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorKyAgSU5TVF9MSU5HVUFTPQorKyAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorKyAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIHVzZWl0PW5vCisrICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisrICAgICAgZWxzZQorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorKyAgICAgIGZpCisrICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKysgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKysgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisrICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKysgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworKyAgICAgICAgZXNhYworKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorKyAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKysgICAgICBmaQorKyAgICBkb25lCisrICBmaQorKyAgQ0FUQUxPR1M9CisrICBKQVZBQ0FUQUxPR1M9CisrICBRVENBVEFMT0dTPQorKyAgVENMQ0FUQUxPR1M9CisrICBDU0hBUlBDQVRBTE9HUz0KKysgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisrICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisrICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKysgICAgICBRVENBVEFMT0dTPSIkUVRDQVRBTE9HUyAkbGFuZy5xbSIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorKyAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgQ1NIQVJQQ0FUQUxPR1M9IiRDU0hBUlBDQVRBTE9HUyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgICBkb25lCisrICBmaQorKworKyAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorKyAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKysgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKysgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisrICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIHRlc3QgLW4gIiRQT01BS0VGSUxFREVQUyI7IHRoZW4KKysgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrTWFrZWZpbGU6ICRQT01BS0VGSUxFREVQUworK0VPRgorKyAgZmkKKysgIG12ICIkYWNfZmlsZS50bXAiICIkYWNfZmlsZSIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcmludGYtcG9zaXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3ByaW50Zi1wb3NpeC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk3NDY1NDAwMCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTMuMSkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoCisrZG5sIHBvc2l0aW9ucy4KKysKKytBQ19ERUZVTihbZ3RfUFJJTlRGX1BPU0lYXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5nc10sCisrICAgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4LAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKysgICBkb2xsYXIgZXhwYW5zaW9uIChwb3NzaWJseSBhbiBhdXRvY29uZiBidWcpLiAgKi8KKytzdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9OworK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworK2ludCBtYWluICgpCisreworKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisrICByZXR1cm4gKHN0cmNtcCAoYnVmLCAiNTUgMzMiKSAhPSAwKTsKKyt9XSwgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9eWVzLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD1ubywKKysgICAgICBbCisrICAgICAgICBBQ19FR1JFUF9DUFAobm90cG9zaXgsIFsKKysjaWYgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18KKysgIG5vdHBvc2l4CisrI2VuZGlmCisrICAgICAgICBdLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3Npbmcgbm8iLAorKyAgICAgICAgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIHllcyIpCisrICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisrICAgICp5ZXMpCisrICAgICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfUFJJTlRGLCAxLAorKyAgICAgICAgW0RlZmluZSBpZiB5b3VyIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLl0pCisrICAgICAgOzsKKysgIGVzYWMKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcm9ndGVzdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvcHJvZ3Rlc3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45OTA2NTE1NjggLTA0MDAKK0BAIC0wLDAgKzEsOTEgQEAKKysjIHByb2d0ZXN0Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKysKKysjIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgorKworK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKKytkbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCisrQUNfREVGVU4oW0FNX1BBVEhfUFJPR19XSVRIX1RFU1RdLAorK1sKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorKworKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCisrY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgorKyMhIC9iaW4vc2gKKytleGl0IDAKKytfQVNFT0YKKytjaG1vZCAreCBjb25mJCQuZmlsZQorK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCisrZWxzZQorKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorK2ZpCisrcm0gLWYgY29uZiQkLmZpbGUKKysKKysjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiQyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorK0FDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKKytBQ19DQUNIRV9WQUwoYWNfY3ZfcGF0aF8kMSwKKytbY2FzZSAiWyRdJDEiIGluCisrICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisrICAgIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKysgICAgOzsKKysgICopCisrICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKysgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKysgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgICAgICAgaWYgWyQzXTsgdGhlbgorKyAgICAgICAgICAgIGFjX2N2X3BhdGhfJDE9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisrICAgICAgICAgICAgYnJlYWsgMgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgIGRvbmUKKysgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisrZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKKytkbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KKytpZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgorK10pZG5sCisrICAgIDs7CisrZXNhY10pZG5sCisrJDE9IiRhY19jdl9wYXRoXyQxIgorK2lmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoWyRdJDEpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK0FDX1NVQlNUKCQxKWRubAorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpZ25lZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvc2lnbmVkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTk2NjUwNjU2IC0wNDAwCitAQCAtMCwwICsxLDE5IEBACisrIyBzaWduZWQubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2JoX0NfU0lHTkVEXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNpZ25lZF0sIGJoX2N2X2Nfc2lnbmVkLAorKyAgIFtBQ19UUllfQ09NUElMRSgsIFtzaWduZWQgY2hhciB4O10sIGJoX2N2X2Nfc2lnbmVkPXllcywgYmhfY3ZfY19zaWduZWQ9bm8pXSkKKysgIGlmIHRlc3QgJGJoX2N2X2Nfc2lnbmVkID0gbm87IHRoZW4KKysgICAgQUNfREVGSU5FKHNpZ25lZCwgLAorKyAgICAgICAgICAgICAgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUgQyBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBrZXl3b3JkLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpemVfbWF4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zaXplX21heC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwMzY0OTU5MiAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKyMgc2l6ZV9tYXgubTQgc2VyaWFsIDIKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtnbF9TSVpFX01BWF0sCisrWworKyAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpbnQuaCkKKysgIGRubCBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5IGhhcyBTSVpFX01BWC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIFNJWkVfTUFYXSkKKysgIHJlc3VsdD0KKysgIEFDX0VHUkVQX0NQUChbRm91bmQgaXRdLCBbCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpZiBIQVZFX1NURElOVF9ICisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZmRlZiBTSVpFX01BWAorK0ZvdW5kIGl0CisrI2VuZGlmCisrXSwgcmVzdWx0PXllcykKKysgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgIGRubCBEZWZpbmUgaXQgb3Vyc2VsdmVzLiBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSB0eXBlICdzaXplX3QnIGlzIG5vdCB3aWRlcgorKyAgICBkbmwgdGhhbiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZycuCisrICAgIGRubCBUaGUgX0FDX0NPTVBVVEVfSU5UIG1hY3JvIHdvcmtzIHVwIHRvIExPTkdfTUFYLCBzaW5jZSBpdCB1c2VzICdleHByJywKKysgICAgZG5sIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gd29yayBmcm9tIExPTkdfTUlOIHRvIExPTkdfTUFYLgorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgLyAxMF0sIHJlc19oaSwKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgJSAxMF0sIHJlc19sbywKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW3NpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCldLCBmaXRzX2luX3VpbnQsCisrICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCByZXN1bHQ9PykKKysgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgZG5sIEV2ZW4gdGhvdWdoIFNJWkVfTUFYIGZpdHMgaW4gYW4gdW5zaWduZWQgaW50LCBpdCBtdXN0IGJlIG9mIHR5cGUKKysgICAgICBkbmwgJ3Vuc2lnbmVkIGxvbmcnIGlmIHRoZSB0eXBlICdzaXplX3QnIGlzIHRoZSBzYW1lIGFzICd1bnNpZ25lZCBsb25nJy4KKysgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyAgICAgICAgZXh0ZXJuIHNpemVfdCBmb287CisrICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287CisrICAgICAgICBdLCBbXSwgZml0c19pbl91aW50PTApCisrICAgIGZpCisrICAgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlUKKysgICAgICBlbHNlCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlVMCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGRubCBTaG91bGRuJ3QgaGFwcGVuLCBidXQgd2hvIGtub3dzLi4uCisrICAgICAgcmVzdWx0PSd+KHNpemVfdCkwJworKyAgICBmaQorKyAgZmkKKysgIEFDX01TR19SRVNVTFQoWyRyZXN1bHRdKQorKyAgaWYgdGVzdCAiJHJlc3VsdCIgIT0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChbU0laRV9NQVhdLCBbJHJlc3VsdF0sCisrICAgICAgW0RlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3N0ZGludF9oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zdGRpbnRfaC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwOTY0ODY4MCAtMDQwMAorQEAgLTAsMCArMSwyOCBAQAorKyMgc3RkaW50X2gubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWludG1heF90Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91aW50bWF4X3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjE2NDY4NTYgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byAndW5zaWduZWQgbG9uZycgb3IgJ3Vuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10pCisrICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKKysgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKysgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworKyAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKKysgICAgICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgICAgIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGVsc2UKKysgICAgQUNfREVGSU5FKEhBVkVfVUlOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1aW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWxvbmdsb25nLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91bG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjg2NDU3OTIgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMworK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIHdvcmtzLgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDFVTEw7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3djaGFyX3QubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3djaGFyX3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMzQ2NDQ4ODAgLTA0MDAKK0BAIC0wLDAgKzEsMjIgQEAKKysjIHdjaGFyX3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciA8c3RkZGVmLmg+IGhhcyB0aGUgJ3djaGFyX3QnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX1dDSEFSX1RdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2NoYXJfdF0sIGd0X2N2X2Nfd2NoYXJfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkZGVmLmg+CisrICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2NoYXJfdD15ZXMsIGd0X2N2X2Nfd2NoYXJfdD1ubyldKQorKyAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dDSEFSX1QsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3dpbnRfdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvd2ludF90Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQwNjQzOTY4IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyB3aW50X3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgPHdjaGFyLmg+IGhhcyB0aGUgJ3dpbnRfdCcgdHlwZS4KKytkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisrCisrQUNfREVGVU4oW2d0X1RZUEVfV0lOVF9UXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbnRfdF0sIGd0X2N2X2Nfd2ludF90LAorKyAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx3Y2hhci5oPgorKyAgICAgICB3aW50X3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2ludF90PXllcywgZ3RfY3ZfY193aW50X3Q9bm8pXSkKKysgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dJTlRfVCwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC94c2l6ZS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQveHNpemUubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wNDc2NDI5MDQgLTA0MDAKK0BAIC0wLDAgKzEsMTQgQEAKKysjIHhzaXplLm00IHNlcmlhbCAyCisrZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9YU0laRV0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzaXplLmguCisrICBBQ19SRVFVSVJFKFtnbF9TSVpFX01BWF0pCisrICBBQ19DSEVDS19IRUFERVJTKHN0ZGludC5oKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL01ha2VmaWxlLmFtCTE5OTgtMTItMzAgMDY6MTk6NDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9NYWtlZmlsZS5hbQkyMDA0LTA5LTEyIDE0OjQwOjM1LjEyMTYzMTY1NiAtMDQwMAorQEAgLTEsNSArMSw1IEBACisgU1VCRElSUyA9IGxpYiBpbnRsIHNyYyBwbyBtYW4gdGVzdHN1aXRlCistRVhUUkFfRElTVCA9IGNoZWNrLmxyenN6IENPTVBBVEFCSUxJVFkgUkVBRE1FLmN2cyBSRUFETUUuaXNkbjRsaW51eCBcCisrRVhUUkFfRElTVCA9IGNvbmZpZy5ycGF0aCAgY2hlY2subHJ6c3ogQ09NUEFUQUJJTElUWSBSRUFETUUuY3ZzIFJFQURNRS5pc2RuNGxpbnV4IFwKKyAJUkVBRE1FLmdldHRleHQgcnBtcmMgYnVpbGRycG0gc3lzdHlwZS5pbiBmYXN0Y2hlY2suc2ggUkVBRE1FLnRlc3RzIFwKKyAJYmVvcy1ydW5waXBlZC5jIGZhc3RjaGVjay5iZW9zCisgbm9pbnN0X1NDUklQVFM9c3lzdHlwZQorQEAgLTgzLDMgKzgzLDUgQEAKKyBycG06ICQoUFIpLnRhci5neiBTcGVjZmlsZQorIAkkKHNyY2RpcikvYnVpbGRycG0gJChzcmNkaXIpCisgCisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvTWFrZWZpbGUuaW4JMTk5OC0xMi0zMCAxMTozMTo0MC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL01ha2VmaWxlLmluCTIwMDQtMDktMTIgMTQ6NDA6MzUuMTA5NjMzNDgwIC0wNDAwCitAQCAtMTI1LDcgKzEyNSw3IEBACisgCSAgJiYgQ09ORklHX0ZJTEVTPSRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKyAKKyAkKEFDTE9DQUxfTTQpOiAgY29uZmlndXJlLmluICBhY2luY2x1ZGUubTQKKy0JY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkKKysJY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgLUkgbTQKKyAKKyBjb25maWcuc3RhdHVzOiAkKHNyY2RpcikvY29uZmlndXJlCisgCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbWtpbnN0YWxsZGlycwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvbWtpbnN0YWxsZGlycwkyMDA0LTA5LTEyIDE0OjQwOjM0LjMzNzc1MDgyNCAtMDQwMAorQEAgLTEsMzQgKzEsMTUwIEBACisgIyEgL2Jpbi9zaAorICMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CistIyBBdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKysKKytzY3JpcHR2ZXJzaW9uPTIwMDQtMDItMTUuMjAKKysKKysjIE9yaWdpbmFsIGF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorICMgQ3JlYXRlZDogMTk5My0wNS0xNgorLSMgTGFzdCBtb2RpZmllZDogMTk5NS0wMy0wNQorLSMgUHVibGljIGRvbWFpbgorKyMgUHVibGljIGRvbWFpbi4KKysjCisrIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisgCisgZXJyc3RhdHVzPTAKKytkaXJtb2RlPSIiCisgCistZm9yIGZpbGUgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICBzZXQgZm5vcmQgYGVjaG8gIjokZmlsZSIgfCBzZWQgLW5lICdzL146XC8vIy87cy9eOi8vO3MvXC8vIC9nO3MvXiMvXC8vO3AnYAorLSAgIHNoaWZ0CisrdXNhZ2U9IlwKKytVc2FnZTogbWtpbnN0YWxsZGlycyBbLWhdIFstLWhlbHBdIFstLXZlcnNpb25dIFstbSBNT0RFXSBESVIgLi4uCisgCistICAgcGF0aGNvbXA9CistICAgZm9yIGQgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKy0gICAgIGNhc2UgIiRwYXRoY29tcCIgaW4KKy0gICAgICAgLSogKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworLSAgICAgZXNhYworK0NyZWF0ZSBlYWNoIGRpcmVjdG9yeSBESVIgKHdpdGggbW9kZSBNT0RFLCBpZiBzcGVjaWZpZWQpLCBpbmNsdWRpbmcgYWxsCisrbGVhZGluZyBmaWxlIG5hbWUgY29tcG9uZW50cy4KKyAKKy0gICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorLSAgICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIiAxPiYyCistICAgICAgICBta2RpciAiJHBhdGhjb21wIiA+IC9kZXYvbnVsbCAyPiYxIHx8IGxhc3RlcnI9JD8KKy0gICAgIGZpCisrUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisgCistICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKysjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworKyAgY2FzZSAkMSBpbgorKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorKyAgICAgIGVjaG8gIiR1c2FnZSIKKysgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworKyAgICAgIHNoaWZ0CisrICAgICAgdGVzdCAkIyAtZXEgMCAmJiB7IGVjaG8gIiR1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisrICAgICAgZGlybW9kZT0kMQorKyAgICAgIHNoaWZ0CisrICAgICAgOzsKKysgICAgLS12ZXJzaW9uKQorKyAgICAgIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIgorKyAgICAgIGV4aXQgMAorKyAgICAgIDs7CisrICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKysgICAgICBzaGlmdAorKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgICAgLSopICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBvcHRpb24KKysgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKysgICAgICBleGl0IDEKKysgICAgICA7OworKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZworKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgIGVzYWMKKytkb25lCisrCisrZm9yIGZpbGUKKytkbworKyAgaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisrICAgIHNoaWZ0CisrICBlbHNlCisrICAgIGJyZWFrCisrICBmaQorK2RvbmUKKysKKytjYXNlICQjIGluCisrICAwKSBleGl0IDAgOzsKKytlc2FjCisrCisrIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisrIyBta2RpciAtcCBhL2MgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB3aWxsIGRldGVjdCB0aGF0IGEgaXMgbWlzc2luZywKKysjIG9uZSB3aWxsIGNyZWF0ZSBhLCB0aGVuIHRoZSBvdGhlciB3aWxsIHRyeSB0byBjcmVhdGUgYSBhbmQgZGllIHdpdGgKKysjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisrIyBmcm9tIGEgcGFyYWxsZWwgbWFrZS4gIFdlIHVzZSAtLXZlcnNpb24gaW4gdGhlIHByb2JlIHRvIHJlc3RyaWN0CisrIyBvdXJzZWx2ZXMgdG8gR05VIG1rZGlyLCB3aGljaCBpcyB0aHJlYWQtc2FmZS4KKytjYXNlICRkaXJtb2RlIGluCisrICAnJykKKysgICAgaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorKyAgICAgIGV4ZWMgbWtkaXIgLXAgLS0gIiRAIgorKyAgICBlbHNlCisrICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKysgICAgICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKysgICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorKyAgICAgICMgZXhpc3RzLgorKyAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisrICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorKyAgICBmaQorKyAgICA7OworKyAgKikKKysgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisrICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCisrICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKysgICAgZWxzZQorKyAgICAgICMgQ2xlYW4gdXAgYWZ0ZXIgTmV4dFN0ZXAgYW5kIE9wZW5TdGVwIG1rZGlyLgorKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisrICAgICAgZG8KKysgICAgICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKysgICAgICBkb25lCisrICAgIGZpCisrICAgIDs7CisrZXNhYworKworK2ZvciBmaWxlCisrZG8KKysgIHNldCBmbm9yZCBgZWNobyAiOiRmaWxlIiB8IHNlZCAtbmUgJ3MvXjpcLy8jLztzL146Ly87cy9cLy8gL2c7cy9eIy9cLy87cCdgCisrICBzaGlmdAorKworKyAgcGF0aGNvbXA9CisrICBmb3IgZAorKyAgZG8KKysgICAgcGF0aGNvbXA9IiRwYXRoY29tcCRkIgorKyAgICBjYXNlICRwYXRoY29tcCBpbgorKyAgICAgIC0qKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworKyAgICBlc2FjCisrCisrICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKKysKKysgICAgICBta2RpciAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisrCisrICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgCWVycnN0YXR1cz0kbGFzdGVycgorLSAgICAgZmkKKysgICAgICBlbHNlCisrCWlmIHRlc3QgISAteiAiJGRpcm1vZGUiOyB0aGVuCisrCSAgZWNobyAiY2htb2QgJGRpcm1vZGUgJHBhdGhjb21wIgorKwkgIGxhc3RlcnI9IiIKKysJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKyAKKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorLSAgIGRvbmUKKysJICBpZiB0ZXN0ICEgLXogIiRsYXN0ZXJyIjsgdGhlbgorKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisrCSAgZmkKKysJZmkKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKysgIGRvbmUKKyBkb25lCisgCisgZXhpdCAkZXJyc3RhdHVzCisrCisrIyBMb2NhbCBWYXJpYWJsZXM6CisrIyBtb2RlOiBzaGVsbC1zY3JpcHQKKysjIHNoLWluZGVudGF0aW9uOiAyCisrIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisrIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisrIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKysjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKysjIEVuZDoKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vYm9sZHF1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9ib2xkcXVvdC5zZWQJMjAwNC0wOS0xMiAxNDo0MDozNC43MjM2OTIxNTIgLTA0MDAKK0BAIC0wLDAgKzEsMTAgQEAKKytzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKKytzL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCisrcy8gJ1woW15gJ10qXCknIC8g4oCYXDHigJkgL2cKKytzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCisrcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZworK3Mv4oCc4oCdLyIiL2cKKytzL+KAnC/igJwbWzFtL2cKKytzL+KAnS8bWzBt4oCdL2cKKytzL+KAmC/igJgbWzFtL2cKKytzL+KAmS8bWzBt4oCZL2cKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vY2F0LWlkLXRibC5jCTE5OTgtMTItMjkgMDQ6MjQ6MjQuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9jYXQtaWQtdGJsLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDIzNCArMCwwIEBACistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIGxyenN6LnBvdC4gICovCistCistI2lmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCistCistY29uc3Qgc3RydWN0IF9tc2dfZW50IF9tc2dfdGJsW10gPSB7CistICB7IiIsIDF9LAorLSAgeyJpb19tb2RlKCwyKSBpbiByYnNiLmMgbm90IGltcGxlbWVudGVkXG4iLCAyfSwKKy0gIHsiY2F1Z2h0IHNpZ25hbCAlZDsgZXhpdGluZyIsIDN9LAorLSAgeyJjb21tYW5kIHRyaWVzIiwgNH0sCistICB7InBhY2tldGxlbmd0aCIsIDV9LAorLSAgeyJwYWNrZXRsZW5ndGggb3V0IG9mIHJhbmdlIDI0Li4lbGQiLCA2fSwKKy0gIHsiZnJhbWVsZW5ndGgiLCA3fSwKKy0gIHsiZnJhbWVsZW5ndGggb3V0IG9mIHJhbmdlIDMyLi4lbGQiLCA4fSwKKy0gIHsibWluX2JwcyIsIDl9LAorLSAgeyJtaW5fYnBzIG11c3QgYmUgPj0gMCIsIDEwfSwKKy0gIHsibWluX2Jwc190aW1lIiwgMTF9LAorLSAgeyJtaW5fYnBzX3RpbWUgbXVzdCBiZSA+IDEiLCAxMn0sCistICB7ImhvdXIgdG8gbGFyZ2UgKDAuLjIzKSIsIDEzfSwKKy0gIHsidW5wYXJzYWJsZSBzdG9wIHRpbWVcbiIsIDE0fSwKKy0gIHsibWludXRlIHRvIGxhcmdlICgwLi41OSkiLCAxNX0sCistICB7InN0b3AgdGltZSB0byBzbWFsbCIsIDE2fSwKKy0gIHsic3RvcC1hdCIsIDE3fSwKKy0gIHsidGltZW91dCIsIDE4fSwKKy0gIHsidGltZW91dCBvdXQgb2YgcmFuZ2UgMTAuLjEwMDAiLCAxOX0sCistICB7InNlY3VyaXR5IHZpb2xhdGlvbjogY2FuJ3QgZG8gdGhhdCB1bmRlciByZXN0cmljdGVkIHNoZWxsXG4iLCAyMH0sCistICB7IndpbmRvdyBzaXplIiwgMjF9LAorLSAgeyJjYW5ub3QgdHVybm9mZiBzeXNsb2ciLCAyMn0sCistICB7InN0YXJ0dXAgZGVsYXkiLCAyM30sCistICB7Im91dCBvZiBtZW1vcnkiLCAyNH0sCistICB7InRoaXMgcHJvZ3JhbSB3YXMgbmV2ZXIgaW50ZW5kZWQgdG8gYmUgdXNlZCBzZXR1aWRcbiIsIDI1fSwKKy0gIHsibmVlZCBhdCBsZWFzdCBvbmUgZmlsZSB0byBzZW5kIiwgMjZ9LAorLSAgeyJDYW4ndCBzZW5kIGNvbW1hbmQgaW4gcmVzdHJpY3RlZCBtb2RlXG4iLCAyN30sCistICB7Imhvc3RuYW1lIHRvbyBsb25nXG4iLCAyOH0sCistICB7ImlsbGVnYWwgc2VydmVyIGFkZHJlc3NcbiIsIDI5fSwKKy0gIHsiY2FuIHJlYWQgb25seSBvbmUgZmlsZSBmcm9tIHN0ZGluIiwgMzB9LAorLSAgeyJUcmFuc2ZlciBpbmNvbXBsZXRlXG4iLCAzMX0sCistICB7IlRyYW5zZmVyIGNvbXBsZXRlXG4iLCAzMn0sCistICB7InNlbmRfcHNldWRvICVzOiBjYW5ub3Qgb3BlbiB0bXBmaWxlICVzOiAlcyIsIDMzfSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCBsc3RhdCB0bXBmaWxlICVzOiAlcyIsIDM0fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGF2b2lkaW5nIHN5bWxpbmsgdHJhcCIsIDM1fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCB3cml0ZSB0byB0bXBmaWxlICVzOiAlcyIsIDM2fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGZhaWxlZCIsIDM3fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IG9rIiwgMzh9LAorLSAgeyJ0Y3AgcHJvdG9jb2wgaW5pdCBmYWlsZWRcbiIsIDM5fSwKKy0gIHsiQW5zd2VyaW5nIFRJTUVTWU5DIGF0ICVzIiwgNDB9LAorLSAgeyJ0aW1lem9uZSIsIDQxfSwKKy0gIHsidGltZXpvbmUgdW5rbm93biIsIDQyfSwKKy0gIHsiQ2FuJ3Qgb3BlbiBhbnkgcmVxdWVzdGVkIGZpbGVzLiIsIDQzfSwKKy0gIHsic2VjdXJpdHkgdmlvbGF0aW9uOiBub3QgYWxsb3dlZCB0byB1cGxvYWQgZnJvbSAlcyIsIDQ0fSwKKy0gIHsiY2Fubm90IG9wZW4gJXMiLCA0NX0sCistICB7ImlzIG5vdCBhIGZpbGU6ICVzIiwgNDZ9LAorLSAgeyIlcy8lczogZXJyb3Igb2NjdXJlZCIsIDQ3fSwKKy0gIHsic2tpcHBlZDogJXMiLCA0OH0sCistICB7IiVzLyVzOiBza2lwcGVkIiwgNDl9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQgICBCUFM6JS04bGQgICAgICAgICAgICAgICAgICAgICAgICBcbiIsIDUwfSwKKy0gIHsiU2VuZGluZyAlcywgJWxkIGJsb2NrczogIiwgNTF9LAorLSAgeyJHaXZlIHlvdXIgbG9jYWwgWE1PREVNIHJlY2VpdmUgY29tbWFuZCBub3cuIiwgNTJ9LAorLSAgeyJTZW5kaW5nOiAlc1xuIiwgNTN9LAorLSAgeyJUaW1lb3V0IG9uIHBhdGhuYW1lIiwgNTR9LAorLSAgeyJSZWNlaXZlciBDYW5jZWxsZWQiLCA1NX0sCistICB7Ik5vIEFDSyBvbiBFT1QiLCA1Nn0sCistICB7Ilhtb2RlbSBzZWN0b3JzL2tieXRlcyBzZW50OiAlM2QvJTJkayIsIDU3fSwKKy0gIHsiWW1vZGVtIHNlY3RvcnMva2J5dGVzIHNlbnQ6ICUzZC8lMmRrIiwgNTh9LAorLSAgeyJDYW5jZWxsZWQiLCA1OX0sCistICB7IlRpbWVvdXQgb24gc2VjdG9yIEFDSyIsIDYwfSwKKy0gIHsiTkFLIG9uIHNlY3RvciIsIDYxfSwKKy0gIHsiR290IGJ1cnN0IGZvciBzZWN0b3IgQUNLIiwgNjJ9LAorLSAgeyJHb3QgJTAyeCBmb3Igc2VjdG9yIEFDSyIsIDYzfSwKKy0gIHsiUmV0cnkgQ291bnQgRXhjZWVkZWQiLCA2NH0sCistICB7IlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIsIDY1fSwKKy0gIHsiJXMgdmVyc2lvbiAlc1xuIiwgNjZ9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIGZpbGUgLi4uXG4iLCA2N30sCistICB7IiAgIG9yOiAlcyBbb3B0aW9uc10gLXtjfGl9IENPTU1BTkRcbiIsIDY4fSwKKy0gIHsiU2VuZCBmaWxlKHMpIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDY5fSwKKy0gIHsiXAorLSAgICAoWCkgPSBvcHRpb24gYXBwbGllcyB0byBYTU9ERU0gb25seVxuXAorLSAgICAoWSkgPSBvcHRpb24gYXBwbGllcyB0byBZTU9ERU0gb25seVxuXAorLSAgICAoWikgPSBvcHRpb24gYXBwbGllcyB0byBaTU9ERU0gb25seVxuIiwgNzB9LAorLSAgeyJcCistICAtKywgLS1hcHBlbmQgICAgICAgICAgICAgICAgYXBwZW5kIHRvIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUgKFopXG5cCistICAtMiwgLS10d29zdG9wICAgICAgICAgICAgICAgdXNlIDIgc3RvcCBiaXRzXG5cCistICAtNCwgLS10cnktNGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gNEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC00ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA0SyBibG9ja3NpemUgKGRvZXNuJ3QgdHJ5IDgpXG5cCistICAtOCwgLS10cnktOGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gOEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC04ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA4SyBibG9ja3NpemVcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLWNvbW1hbmQgQ09NTUFORCAgICAgICBleGVjdXRlIHJlbW90ZSBjb21tYW5kIENPTU1BTkQgKFopXG5cCistICAtQywgLS1jb21tYW5kLXRyaWVzIE4gICAgICAgdHJ5IE4gdGltZXMgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgKFopXG5cCistICAtZCwgLS1kb3QtdG8tc2xhc2ggICAgICAgICAgY2hhbmdlICcuJyB0byAnLycgaW4gcGF0aG5hbWVzIChZL1opXG5cCistICAgICAgLS1kZWxheS1zdGFydHVwIE4gICAgICAgc2xlZXAgTiBzZWNvbmRzIGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuXAorLSAgLWUsIC0tZXNjYXBlICAgICAgICAgICAgICAgIGVzY2FwZSBhbGwgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIGZvcmNlIHJlY2VpdmVyIHRvIHJlbmFtZSBmaWxlcyBpdCBhbHJlYWR5IGhhc1xuXAorLSAgLWYsIC0tZnVsbC1wYXRoICAgICAgICAgICAgIHNlbmQgZnVsbCBwYXRobmFtZSAoWS9aKVxuXAorLSAgLWksIC0taW1tZWRpYXRlLWNvbW1hbmQgQ01EIHNlbmQgcmVtb3RlIENNRCwgcmV0dXJuIGltbWVkaWF0ZWx5IChaKVxuXAorLSAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgdXNhZ2UgbWVzc2FnZVxuXAorLSAgLWssIC0tMWsgICAgICAgICAgICAgICAgICAgIHNlbmQgMTAyNCBieXRlIHBhY2tldHMgKFgpXG5cCistICAtTCwgLS1wYWNrZXRsZW4gTiAgICAgICAgICAgbGltaXQgc3VicGFja2V0IGxlbmd0aCB0byBOIGJ5dGVzIChaKVxuXAorLSAgLWwsIC0tZnJhbWVsZW4gTiAgICAgICAgICAgIGxpbWl0IGZyYW1lIGxlbmd0aCB0byBOIGJ5dGVzIChsPj1MKSAoWilcblwKKy0gIC1tLCAtLW1pbi1icHMgTiAgICAgICAgICAgICBzdG9wIHRyYW5zbWlzc2lvbiBpZiBCUFMgYmVsb3cgTlxuXAorLSAgLU0sIC0tbWluLWJwcy10aW1lIE4gICAgICAgICAgZm9yIGF0IGxlYXN0IE4gc2Vjb25kcyAoZGVmYXVsdDogMTIwKVxuIiwgNzF9LAorLSAgeyJcCistICAtbiwgLS1uZXdlciAgICAgICAgICAgICAgICAgc2VuZCBmaWxlIGlmIHNvdXJjZSBuZXdlciAoWilcblwKKy0gIC1OLCAtLW5ld2VyLW9yLWxvbmdlciAgICAgICBzZW5kIGZpbGUgaWYgc291cmNlIG5ld2VyIG9yIGxvbmdlciAoWilcblwKKy0gIC1vLCAtLTE2LWJpdC1jcmMgICAgICAgICAgICB1c2UgMTYgYml0IENSQyBpbnN0ZWFkIG9mIDMyIGJpdCBDUkMgKFopXG5cCistICAtTywgLS1kaXNhYmxlLXRpbWVvdXRzICAgICAgZGlzYWJsZSB0aW1lb3V0IGNvZGUsIHdhaXQgZm9yZXZlclxuXAorLSAgLXAsIC0tcHJvdGVjdCAgICAgICAgICAgICAgIHByb3RlY3QgZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSAoWilcblwKKy0gIC1yLCAtLXJlc3VtZSAgICAgICAgICAgICAgICByZXN1bWUgaW50ZXJydXB0ZWQgZmlsZSB0cmFuc2ZlciAoWilcblwKKy0gIC1SLCAtLXJlc3RyaWN0ZWQgICAgICAgICAgICByZXN0cmljdGVkLCBtb3JlIHNlY3VyZSBtb2RlXG5cCistICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICAgcXVpZXQgKG5vIHByb2dyZXNzIHJlcG9ydHMpXG5cCistICAtcywgLS1zdG9wLWF0IHtISDpNTXwrTn0gICAgc3RvcCB0cmFuc21pc3Npb24gYXQgSEg6TU0gb3IgaW4gTiBzZWNvbmRzXG5cCistICAgICAgLS10Y3AgICAgICAgICAgICAgICAgICAgYnVpbGQgYSBUQ1AgY29ubmVjdGlvbiB0byB0cmFuc21pdCBmaWxlc1xuXAorLSAgICAgIC0tdGNwLXNlcnZlciAgICAgICAgICAgIG9wZW4gc29ja2V0LCB3YWl0IGZvciBjb25uZWN0aW9uXG5cCistICAtdSwgLS11bmxpbmsgICAgICAgICAgICAgICAgdW5saW5rIGZpbGUgYWZ0ZXIgdHJhbnNtaXNzaW9uXG5cCistICAtVSwgLS11bnJlc3RyaWN0ICAgICAgICAgICAgdHVybiBvZmYgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCwgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlc1xuXAorLSAgLVksIC0tb3ZlcndyaXRlLW9yLXNraXAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcywgZWxzZSBza2lwXG5cCistICAgICAgLS15bW9kZW0gICAgICAgICAgICAgICAgdXNlIFlNT0RFTSBwcm90b2NvbFxuXAorLSAgLVosIC0tem1vZGVtICAgICAgICAgICAgICAgIHVzZSBaTU9ERU0gcHJvdG9jb2xcblwKKy1cblwKKy1zaG9ydCBvcHRpb25zIHVzZSB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIGxvbmcgb25lc1xuIiwgNzJ9LAorLSAgeyJnb3QgWlJRSU5JVCIsIDczfSwKKy0gIHsiZ290IFpDQU4iLCA3NH0sCistICB7ImJsa2xlbiBub3cgJWRcbiIsIDc1fSwKKy0gIHsienNlbmRmZGF0YTogYnBzIHJhdGUgJWxkIGJlbG93IG1pbiAlbGQiLCA3Nn0sCistICB7InpzZW5kZmRhdGE6IHJlYWNoZWQgc3RvcCB0aW1lIiwgNzd9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQvJTdsZCAgIEJQUzolLThsZCBFVEEgJTAyZDolMDJkICAiLCA3OH0sCistICB7ImNhbGNfYmxrbGVuOiByZWR1Y2VkIHRvICVkIGR1ZSB0byBlcnJvclxuIiwgNzl9LAorLSAgeyJjYWxjX2Jsa2xlbjogcmV0dXJuZWQgb2xkIHZhbHVlICVkIGR1ZSB0byBsb3cgYnBlIGRpZmZcbiIsIDgwfSwKKy0gIHsiY2FsY19ibGtsZW46IG9sZCAlbGQsIG5ldyAlbGQsIGQgJWxkXG4iLCA4MX0sCistICB7ImNhbGNfYmxrbGVuOiBjYWxjIHRvdGFsX2J5dGVzPSVsZCwgYnBlPSVsZCwgZWM9JWxkXG4iLCA4Mn0sCistICB7ImNhbGNfYmxrbGVuOiBibGtsZW4gJWQsIG9rICVsZCwgZmFpbGVkICVsZCAtPiAlbHVcbiIsIDgzfSwKKy0gIHsiY2FsY19ibGtsZW46IHJldHVybmVkICVkIGFzIGJlc3RcbiIsIDg0fSwKKy0gIHsiXAorLVxuXAorLWNvdW50ZW06IFRvdGFsICVkICVsZFxuIiwgODV9LAorLSAgeyJCYWQgZXNjYXBlIHNlcXVlbmNlICV4IiwgODZ9LAorLSAgeyJTZW5kZXIgQ2FuY2VsZWQiLCA4N30sCistICB7IlRJTUVPVVQiLCA4OH0sCistICB7IkJhZCBkYXRhIHN1YnBhY2tldCIsIDg5fSwKKy0gIHsiRGF0YSBzdWJwYWNrZXQgdG9vIGxvbmciLCA5MH0sCistICB7IkdhcmJhZ2UgY291bnQgZXhjZWVkZWQiLCA5MX0sCistICB7IkdvdCAlcyIsIDkyfSwKKy0gIHsiUmV0cnkgJWQ6ICIsIDkzfSwKKy0gIHsiZG9uJ3QgaGF2ZSBzZXR0aW1lb2ZkYXksIHdpbGwgbm90IHNldCB0aW1lXG4iLCA5NH0sCistICB7Im5vdCBydW5uaW5nIGFzIHJvb3QgKHRoaXMgaXMgZ29vZCEpLCBjYW4gbm90IHNldCB0aW1lXG4iLCA5NX0sCistICB7ImJ5dGVzX3Blcl9lcnJvciIsIDk2fSwKKy0gIHsiYnl0ZXMtcGVyLWVycm9yIHNob3VsZCBiZSA+MTAwIiwgOTd9LAorLSAgeyJPX1NZTkMgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsIiwgOTh9LAorLSAgeyJnYXJiYWdlIG9uIGNvbW1hbmRsaW5lIiwgOTl9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIFtmaWxlbmFtZS5pZi54bW9kZW1dXG4iLCAxMDB9LAorLSAgeyJSZWNlaXZlIGZpbGVzIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDEwMX0sCistICB7IlwKKy0gIC0rLCAtLWFwcGVuZCAgICAgICAgICAgICAgICBhcHBlbmQgdG8gZXhpc3RpbmcgZmlsZXNcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLXdpdGgtY3JjICAgICAgICAgICAgICBVc2UgMTYgYml0IENSQyAoWClcblwKKy0gIC1DLCAtLWFsbG93LXJlbW90ZS1jb21tYW5kcyBhbGxvdyBleGVjdXRpb24gb2YgcmVtb3RlIGNvbW1hbmRzIChaKVxuXAorLSAgLUQsIC0tbnVsbCAgICAgICAgICAgICAgICAgIHdyaXRlIGFsbCByZWNlaXZlZCBkYXRhIHRvIC9kZXYvbnVsbFxuXAorLSAgICAgIC0tZGVsYXktc3RhcnR1cCBOICAgICAgIHNsZWVwIE4gc2Vjb25kcyBiZWZvcmUgZG9pbmcgYW55dGhpbmdcblwKKy0gIC1lLCAtLWVzY2FwZSAgICAgICAgICAgICAgICBFc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIHJlbmFtZSBhbnkgZmlsZXMgYWxyZWFkeSBleGlzdGluZ1xuXAorLSAgICAgIC0tZXJyb3JzIE4gICAgICAgICAgICAgIGdlbmVyYXRlIENSQyBlcnJvciBldmVyeSBOIGJ5dGVzIChkZWJ1Z2dpbmcpXG5cCistICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgSGVscCwgcHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlXG5cCistICAtbSwgLS1taW4tYnBzIE4gICAgICAgICAgICAgc3RvcCB0cmFuc21pc3Npb24gaWYgQlBTIGJlbG93IE5cblwKKy0gIC1NLCAtLW1pbi1icHMtdGltZSBOICAgICAgICAgIGZvciBhdCBsZWFzdCBOIHNlY29uZHMgKGRlZmF1bHQ6IDEyMClcblwKKy0gIC1PLCAtLWRpc2FibGUtdGltZW91dHMgICAgICBkaXNhYmxlIHRpbWVvdXQgY29kZSwgd2FpdCBmb3JldmVyIGZvciBkYXRhXG5cCistICAgICAgLS1vLXN5bmMgICAgICAgICAgICAgICAgb3BlbiBvdXRwdXQgZmlsZShzKSBpbiBzeW5jaHJvbm91cyB3cml0ZSBtb2RlXG5cCistICAtcCwgLS1wcm90ZWN0ICAgICAgICAgICAgICAgcHJvdGVjdCBleGlzdGluZyBmaWxlc1xuXAorLSAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgIHF1aWV0LCBubyBwcm9ncmVzcyByZXBvcnRzXG5cCistICAtciwgLS1yZXN1bWUgICAgICAgICAgICAgICAgdHJ5IHRvIHJlc3VtZSBpbnRlcnJ1cHRlZCBmaWxlIHRyYW5zZmVyIChaKVxuXAorLSAgLVIsIC0tcmVzdHJpY3RlZCAgICAgICAgICAgIHJlc3RyaWN0ZWQsIG1vcmUgc2VjdXJlIG1vZGVcblwKKy0gIC1zLCAtLXN0b3AtYXQge0hIOk1NfCtOfSAgICBzdG9wIHRyYW5zbWlzc2lvbiBhdCBISDpNTSBvciBpbiBOIHNlY29uZHNcblwKKy0gIC1TLCAtLXRpbWVzeW5jICAgICAgICAgICAgICByZXF1ZXN0IHJlbW90ZSB0aW1lICh0d2ljZTogc2V0IGxvY2FsIHRpbWUpXG5cCistICAgICAgLS1zeXNsb2dbPW9mZl0gICAgICAgICAgdHVybiBzeXNsb2cgb24gb3Igb2ZmLCBpZiBwb3NzaWJsZVxuXAorLSAgLXQsIC0tdGltZW91dCBOICAgICAgICAgICAgIHNldCB0aW1lb3V0IHRvIE4gdGVudGhzIG9mIGEgc2Vjb25kXG5cCistICAtdSwgLS1rZWVwLXVwcGVyY2FzZSAgICAgICAga2VlcCB1cHBlciBjYXNlIGZpbGVuYW1lc1xuXAorLSAgLVUsIC0tdW5yZXN0cmljdCAgICAgICAgICAgIGRpc2FibGUgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCAgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIFllcywgY2xvYmJlciBleGlzdGluZyBmaWxlIGlmIGFueVxuXAorLSAgICAgIC0teW1vZGVtICAgICAgICAgICAgICAgIHVzZSBZTU9ERU0gcHJvdG9jb2xcblwKKy0gIC1aLCAtLXptb2RlbSAgICAgICAgICAgICAgICB1c2UgWk1PREVNIHByb3RvY29sXG5cCistXG5cCistc2hvcnQgb3B0aW9ucyB1c2UgdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBsb25nIG9uZXNcbiIsIDEwMn0sCistICB7IiVzIHdhaXRpbmcgdG8gcmVjZWl2ZS4iLCAxMDN9LAorLSAgeyJcckJ5dGVzIHJlY2VpdmVkOiAlN2xkLyU3bGQgICBCUFM6JS02bGQgICAgICAgICAgICAgICAgXHJcbiIsIDEwNH0sCistICB7IiVzOiByZWFkeSB0byByZWNlaXZlICVzIiwgMTA1fSwKKy0gIHsiXHJCeXRlcyByZWNlaXZlZDogJTdsZCAgIEJQUzolLTZsZCAgICAgICAgICAgICAgICBcclxuIiwgMTA2fSwKKy0gIHsiXAorLVxyXG5cCistJXM6ICVzIHJlbW92ZWQuXHJcbiIsIDEwN30sCistICB7IlBhdGhuYW1lIGZldGNoIHJldHVybmVkIEVPVCIsIDEwOH0sCistICB7IlJlY2VpdmVkIGR1cCBTZWN0b3IiLCAxMDl9LAorLSAgeyJTeW5jIEVycm9yIiwgMTEwfSwKKy0gIHsiQ1JDIiwgMTExfSwKKy0gIHsiQ2hlY2tzdW0iLCAxMTJ9LAorLSAgeyJTZWN0b3IgbnVtYmVyIGdhcmJsZWQiLCAxMTN9LAorLSAgeyJTZW5kZXIgQ2FuY2VsbGVkIiwgMTE0fSwKKy0gIHsiR290IDAlbyBzZWN0b3IgaGVhZGVyIiwgMTE1fSwKKy0gIHsiZmlsZSBuYW1lIGVuZHMgd2l0aCBhIC8sIHNraXBwZWQ6ICVzXG4iLCAxMTZ9LAorLSAgeyJ6bWFuYWc9JWQsIEx6bWFuYWc9JWRcbiIsIDExN30sCistICB7Inpjb252PSVkXG4iLCAxMTh9LAorLSAgeyJmaWxlIGV4aXN0cywgc2tpcHBlZDogJXNcbiIsIDExOX0sCistICB7IlRJTUVTWU5DOiBoZXJlICVsZCwgcmVtb3RlICVsZCwgZGlmZiAlbGQgc2Vjb25kc1xuIiwgMTIwfSwKKy0gIHsiVElNRVNZTkM6IGNhbm5vdCBzZXQgdGltZTogJXNcbiIsIDEyMX0sCistICB7ImNhbm5vdCB0bXBmaWxlKCkgZm9yIHRjcCBwcm90b2NvbCBzeW5jaHJvbml6YXRpb24iLCAxMjJ9LAorLSAgeyJUb3BpcGUiLCAxMjN9LAorLSAgeyJSZWNlaXZpbmc6ICVzXG4iLCAxMjR9LAorLSAgeyJCbG9ja3MgcmVjZWl2ZWQ6ICVkIiwgMTI1fSwKKy0gIHsiJXM6ICVzIGV4aXN0c1xuIiwgMTI2fSwKKy0gIHsiJXM6XHRTZWN1cml0eSBWaW9sYXRpb24iLCAxMjd9LAorLSAgeyJyZW1vdGUgY29tbWFuZCBleGVjdXRpb24gcmVxdWVzdGVkIiwgMTI4fSwKKy0gIHsibm90IGV4ZWN1dGVkIiwgMTI5fSwKKy0gIHsiZ290IFpSSU5JVCIsIDEzMH0sCistICB7IlNraXBwZWQiLCAxMzF9LAorLSAgeyJyemZpbGU6IGJwcyByYXRlICVsZCBiZWxvdyBtaW4gJWxkIiwgMTMyfSwKKy0gIHsicnpmaWxlOiByZWFjaGVkIHN0b3AgdGltZSIsIDEzM30sCistICB7IlxyQnl0ZXMgcmVjZWl2ZWQ6ICU3bGQvJTdsZCAgIEJQUzolLTZsZCBFVEEgJTAyZDolMDJkICAiLCAxMzR9LAorLSAgeyJmZ2V0cyBmb3IgdGNwIHByb3RvY29sIHN5bmNocm9uaXphdGlvbiBmYWlsZWQ6ICIsIDEzNX0sCistICB7ImZpbGUgY2xvc2UgZXJyb3IiLCAxMzZ9LAorLX07CistCistaW50IF9tc2dfdGJsX2xlbmd0aCA9IDEzNjsKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vQ2hhbmdlTG9nCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNC43OTM2ODE1MTIgLTA0MDAKK0BAIC0xLDMgKzEsMTUgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogYm9sZHF1b3Quc2VkOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBlbkBib2xkcXVvdC5oZWFkZXI6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGVuQHF1b3QuaGVhZGVyOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnNlcnQtaGVhZGVyLnNpbjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcXVvdC5zZWQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHJlbW92ZS1wb3RjZGF0ZS5zaW46IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIFJ1bGVzLXF1b3Q6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGNhdC1pZC10YmwuYzogUmVtb3ZlIGZpbGUuCisrCSogc3RhbXAtY2F0LWlkOiBSZW1vdmUgZmlsZS4KKysKKyAvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwbzJ0Ymwuc2VkIGZyb20gbHJ6c3oucG90LiAgKi8KKyAKKyAjaWYgSEFWRV9DT05GSUdfSAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9lbkBib2xkcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQGJvbGRxdW90LmhlYWRlcgkyMDA0LTA5LTEyIDE0OjQwOjM0LjczMTY5MDkzNiAtMDQwMAorQEAgLTAsMCArMSwyNSBAQAorKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKysjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisrIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisrIworKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisrIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKysjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKysjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisrIworKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisrIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjCisrIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCisrIyBib2xkIGZhY2UsIGFzc3VtaW5nIHRoZSBWVDEwMC9YVGVybSBlc2NhcGUgc2VxdWVuY2VzLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vZW5AcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQHF1b3QuaGVhZGVyCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzM3NjkwMDI0IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisrIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisrIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKysjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKysjCisrIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKysjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKysjCisrIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisrIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisrIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vaW5zZXJ0LWhlYWRlci5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2luc2VydC1oZWFkZXIuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzQzNjg5MTEyIC0wNDAwCitAQCAtMCwwICsxLDIzIEBACisrIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorKyMKKysjIEF0IGVhY2ggb2NjdXJyZW5jZSBvZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCAibXNnaWQgIiwgd2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCisrIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMsIGRvIG5vdGhpbmcuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMgaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXm1zZ2lkIC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL20vbS8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVhZCB0aGUgZmlsZS4KKytyIEhFQURFUgorKyMgT3V0cHV0IHRoZSBmaWxlJ3MgY29udGVudHMgYnkgcmVhZGluZyB0aGUgbmV4dCBsaW5lLiBCdXQgZG9uJ3QgbG9zZSB0aGUKKysjIGN1cnJlbnQgbGluZSB3aGlsZSBkb2luZyB0aGlzLgorK2cKKytOCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9NYWtldmFycwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vTWFrZXZhcnMJMjAwNC0wOS0xMiAxNDo0MDozNC43NDg2ODgzNTIgLTA0MDAKK0BAIC0wLDAgKzEsNDEgQEAKKysjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorKworKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KKytET01BSU4gPSAkKFBBQ0tBR0UpCisrCisrIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCisrc3ViZGlyID0gcG8KKyt0b3BfYnVpbGRkaXIgPSAuLgorKworKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKysKKysjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKysjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisrIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisrIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKysjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisrIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKysjIHRoZWlyIGNvcHlyaWdodC4KKytDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisrIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKysjIC0gU3RyaW5ncyB3aGljaCBhcmUgbm90IGVudGlyZSBzZW50ZW5jZXMsIHNlZSB0aGUgbWFpbnRhaW5lciBndWlkZWxpbmVzCisrIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisrIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKysjICAgdW5kZXJzdG9vZC4KKysjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorKyMgICBtb25leS4KKysjIC0gUGx1cmFsaXNhdGlvbiBwcm9ibGVtcy4KKysjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisrIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorKyMgSXQgY2FuIGJlIHlvdXIgZW1haWwgYWRkcmVzcywgb3IgYSBtYWlsaW5nIGxpc3QgYWRkcmVzcyB3aGVyZSB0cmFuc2xhdG9ycworKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKysjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCisrTVNHSURfQlVHU19BRERSRVNTID0KKysKKysjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KKytFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3F1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9xdW90LnNlZAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc1NDY4NzQ0MCAtMDQwMAorQEAgLTAsMCArMSw2IEBACisrcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCisrcy9gXChbXmAnXSpcKScv4oCYXDHigJkvZworK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCisrcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZworK3MvXidcKFteYCddKlwpJyAv4oCYXDHigJkgL2cKKytzL+KAnOKAnS8iIi9nCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMjAwNC0wOS0xMiAxNDo0MDozNC43NjI2ODYyMjQgLTA0MDAKK0BAIC0wLDAgKzEsMTkgQEAKKysjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorKyMgZnJvbSBhIFBPVCBmaWxlLgorKyMKKysjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKysjIHBhdHRlcm4gaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXiJQT1QtQ3JlYXRpb24tRGF0ZTogLioiJC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL1AvUC8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVtb3ZlIHRoZSBsaW5lLgorK2cKKytkCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9SdWxlcy1xdW90CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9SdWxlcy1xdW90CTIwMDQtMDktMTIgMTQ6NDA6MzQuNzc4NjgzNzkyIC0wNDAwCitAQCAtMCwwICsxLDQ3IEBACisrIyBTcGVjaWFsIE1ha2VmaWxlIHJ1bGVzIGZvciBFbmdsaXNoIG1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCBxdW90YXRpb24gbWFya3MuCisrCisrRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKKysKKysuU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KKysKKytlbkBxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQorK2VuQGJvbGRxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBib2xkcXVvdC5wby11cGRhdGUKKysKKytlbkBxdW90LnBvLXVwZGF0ZTogZW5AcXVvdC5wby11cGRhdGUtZW4KKytlbkBib2xkcXVvdC5wby11cGRhdGU6IGVuQGJvbGRxdW90LnBvLXVwZGF0ZS1lbgorKworKy5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKKysJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUtZW4kJC8vJ2A7IFwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKysJdG1wZGlyPWBwd2RgOyBcCisrCWVjaG8gIiQkbGFuZzoiOyBcCisrCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCisrCUxDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBcCisrCWNkICQoc3JjZGlyKTsgXAorKwlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwkgIGVsc2UgXAorKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorKwkgICAgICA6OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKysJICAgICAgZXhpdCAxOyBcCisrCSAgICBmaTsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisrCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwlmaQorKworK2VuQHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKysJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK2VuQGJvbGRxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBib2xkcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1xdW90CisrbW9zdGx5Y2xlYW4tcXVvdDoKKysJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3N0YW1wLWNhdC1pZAkxOTk4LTEyLTMwIDAyOjUwOjAxLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vc3RhbXAtY2F0LWlkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSArMCwwIEBACistdGltZXN0YW1wCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3NyYy9NYWtlZmlsZS5hbQkxOTk4LTEyLTI4IDAzOjM4OjQ3LjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvc3JjL01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6NTMuNjY1ODEyNTEyIC0wNDAwCitAQCAtMiwxMiArMiwxMiBAQAorIGxyel9TT1VSQ0VTPWxyei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIGxzel9TT1VSQ0VTPWxzei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIG5vaW5zdF9IRUFERVJTID0gdGltaW5nLmggemdsb2JhbC5oIHptb2RlbS5oCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrZGF0YWRpciA9ICQocHJlZml4KS9zaGFyZQorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCisgQ0ZMQUdTPUBDRkxBR1NACisgRElTVENMRUFOX0ZJTEVTPWxyenN6YnVnCisgCistTERBREQgPSAuLi9saWIvbGliem1vZGVtLmEgQElOVExMSUJTQAorK0xEQUREID0gLi4vbGliL2xpYnptb2RlbS5hIEBMSUJJTlRMQAorIEFVVE9NQUtFX09QVElPTlM9YW5zaTJrbnIKKyBFWFRSQV9ESVNUID0gYW5zaTJrbnIuMSBhbnNpMmtuci5jIGxyenN6YnVnLmluCisgSU5DTFVERVMgPSAtSS4uIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMgLUkuLi9pbnRsIC1JJCh0b3Bfc3JjZGlyKS9saWIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3otY2hlY2stbG9jYWxlLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NmRmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMjhiNDczYzNjOTY2ODJhODIwZTI5MmNjMWJlMDA2ZTE5YWVlMTFiYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IE1heSAyMDEzIDAxOjA3OjI0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxyenN6IGNoZWNrIGxvY2FsZS5oCisKK2ZpeCB0aGUgYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIC1PMCBpbiBhIGRlYnVnIGJ1aWxkOgorbHJ6LmM6Mjg0OjEzOiBlcnJvcjogJ0xDX0FMTCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFt1d2VAb2hzZS5kZV0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggNmUyMDY0Yy4uYzEwNDYwYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTMwLDcgKzEzMCw3IEBAIEFDX0NIRUNLX0hFQURFUlMoZmNudGwuaCBsaW1pdHMuaCBzeXMvaW9jdGwuaCBzeXMvdGltZS5oIHVuaXN0ZC5oIHN5cy90aW1lcy5oKQorIExSWlNaX0hFQURFUlNfVEVSTV9JTworIEFDX0NIRUNLX0hFQURFUlModGVybWlvcy5oIHN5cy90ZXJtaW9zLmggdGVybWlvLmggc3lzL3Rlcm1pby5oIHNndHR5LmgpCisgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvbW1hbi5oIHV0aW1lLmggc3lzbG9nLmggc3lzL3N5c2xvZy5oIHN5cy9wYXJhbS5oKQorLUFDX0NIRUNLX0hFQURFUlMoc3lzL3NlbGVjdC5oIHN0cmluZ3MuaCBhcnBhL2luZXQuaCkKKytBQ19DSEVDS19IRUFERVJTKHN5cy9zZWxlY3QuaCBzdHJpbmdzLmggbG9jYWxlLmggYXJwYS9pbmV0LmgpCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfVFlQRV9TSVpFX1QKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzel9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzel9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1MjlmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgY29uZmlndXJlLmluOjk1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisuLi4KK3wgbGliL01ha2VmaWxlLmFtOjM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgbGliL01ha2VmaWxlLmFtOiBpbnN0YWxsaW5nICcuL2RlcGNvbXAnCit8IHNyYy9NYWtlZmlsZS5hbToxMTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxyenN6LTAuMTIuMjAub3JpZy9jb25maWd1cmUuaW4KKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorQEAgLTkyLDcgKzkyLDYgQEAgQUNfUFJPR19SQU5MSUIKKyBBQ19JU0NfUE9TSVgKKyBBQ19BSVgKKyBBQ19NSU5JWAorLUFNX0NfUFJPVE9UWVBFUworIEFDX0NfQ09OU1QKKyBBQ19DX0lOTElORQorIAorSW5kZXg6IGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHJ6c3otMC4xMi4yMC5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDUgQEAKKyBub2luc3RfTElCUkFSSUVTPWxpYnptb2RlbS5hCisgQ0ZMQUdTPUBDRkxBR1NACistQVVUT01BS0VfT1BUSU9OUz1hbnNpMmtucgorIAorIEVYVFJBX0RJU1QgPSBhbGxvY2EuYyBhbnNpMmtuci4xIGFuc2kya25yLmMgXAorIAlnZXRvcHQuYyBnZXRvcHQxLmMgbWtkaXIuYyBta3RpbWUuYyBcCitJbmRleDogbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBscnpzei0wLjEyLjIwLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KK0BAIC04LDcgKzgsNiBAQCBDRkxBR1M9QENGTEFHU0AKKyBESVNUQ0xFQU5fRklMRVM9bHJ6c3pidWcKKyAKKyBMREFERCA9IC4uL2xpYi9saWJ6bW9kZW0uYSBATElCSU5UTEAKKy1BVVRPTUFLRV9PUFRJT05TPWFuc2kya25yCisgRVhUUkFfRElTVCA9IGFuc2kya25yLjEgYW5zaTJrbnIuYyBscnpzemJ1Zy5pbgorIElOQ0xVREVTID0gLUkuLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2Rpcikvc3JjIC1JLi4vaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisgI0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ET1M9XCJAaG9zdF9vc0BcIiAtRENQVT1cIkBob3N0X2NwdUBcIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2U1OTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluIGxyenN6LTAuMTIuMjBfcGF0Y2gvc3JjL01ha2VmaWxlLmluCistLS0gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluCTE5OTgtMTItMzAgMTc6MzE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgbHJ6c3otMC4xMi4yMF9wYXRjaC9zcmMvTWFrZWZpbGUuaW4JMjAwNC0wNC0yOSAxMzo1NzozMy40MzQ5MDk2NTYgKzAyMDAKK0BAIC0zNzIsMTMgKzM3MiwxMyBAQAorIAlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCistCXJtIC1mICQoYmluZGlyKS9gZWNobyBsc3ggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisrCXJtIC1mICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKyAJbG4gJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHN6IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIFwKKyAJCSQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8c2VkIC1lICckKHRyYW5zZm9ybSknYCAKKy0Jcm0gLWYgJChiaW5kaXIpL2BlY2hvIGxyYiB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKysJcm0gLWYgJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorIAlsbiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnogfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgXAorIAkJJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIAorLQlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ4IHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorKwlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCisgIwlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ6c3pidWcgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzel8wLjEyLjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2U1N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB6bW9kZW0veG1vZGVtL3ltb2RlbSBmaWxlIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiTHJ6c3ogaXMgYSBjb3NtZXRpY2FsbHkgbW9kaWZpZWQgem1vZGVtL3ltb2RlbS94bW9kZW0gcGFja2FnZSBidWlsdCBmcm9tIFwKK3RoZSBwdWJsaWMtZG9tYWluIHZlcnNpb24gb2YgQ2h1Y2sgRm9yc2JlcmcncyByenN6IHBhY2thZ2UuIFwKK1RoZXNlIHByb2dyYW1zIHVzZSBlcnJvciBjb3JyZWN0aW5nIHByb3RvY29scyAoe3oseCx5fW1vZGVtKSB0byBzZW5kIChzeiwgc3gsIHNiKSBhbmQgXAorcmVjZWl2ZSAocnosIHJ4LCByYikgZmlsZXMgb3ZlciBhIGRpYWwtaW4gc2VyaWFsIHBvcnQgZnJvbSBhIHZhcmlldHkgb2YgcHJvZ3JhbXMgXAorcnVubmluZyB1bmRlciB2YXJpb3VzIG9wZXJhdGluZyBzeXN0ZW1zLiAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9oc2UuZGUvdXdlL3NvZnR3YXJlL2xyenN6Lmh0bWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly9zcmMvbHJ6LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9NTI3Njk1NjM3M2ZmN2Q4NzU4ODM3ZjYzOTlhMTA0NWYiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vaHNlLmRlL3V3ZS9yZWxlYXNlcy9scnpzei0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisJICAgZmlsZTovL2dldHRleHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9hY2RlZmluZS5wYXRjaCBcCisJICAgZmlsZTovL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI1Y2U2YTc0YWJjOWI5ZWIyYWY5NGRmZmRmZDM3MmE0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMyOGIzNmIxNGJkZGIwMTRkOWU5Yzk3YzUyNDU5ODUyZjk3YmQ0MDVmODkxMTNmMzBiZWU0NWVkOTI3MjhmZjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IHNyYy9scnogc3JjL2xzeiAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJyeiByeCByYiBzeiBzeCBzYiIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J6XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3J4XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3JiXSA9ICIke2JpbmRpcn0vbHJ6IgorCitBTFRFUk5BVElWRV9UQVJHRVRbc3pdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc3hdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc2JdID0gIiR7YmluZGlyfS9sc3oiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmM5ZjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKy0tLQorCis3LzMwLzIwMTAgLSByZWJhc2VkIHRvIDMuMS41IGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorMS8yMi8yMDEyIC0gcmViYXNlZCB0byAzLjEuOSBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciBhZjJiMTBjYzNjMTQgTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvTWFrZWZpbGUJU3VuIEphbiAyMiAxODozODo1NCAyMDEyICswODAwCitAQCAtMzcsNyArMzcsNiBAQAorICMgQ29tbWFuZHMKKyBJTlNUQUxMPWluc3RhbGwKKyBESVJJTlNUQUxMPWluc3RhbGwgLWQKKy1TVFJJUD0tcworIENDPSQoQ1JPU1NfQ09NUElMRSlnY2MKKyBBUj0kKENST1NTX0NPTVBJTEUpYXIKKyBSQU5MSUI9JChDUk9TU19DT01QSUxFKXJhbmxpYgorQEAgLTg2LDcgKzg1LDcgQEAKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExETElCUykgLW8gJEAKKysJJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisgCisgJS44ICUuNzogJS5tYW4KKyAJTT1gZWNobyAkKERBVEUpIHwgc2VkICdzLy0wMS0vLUphbnVhcnktLztzLy0wMi0vLUZlYnJ1YXJ5LS87cy8tMDMtLy1NYXJjaC0vO3MvLTA0LS8tQXByaWwtLztzLy0wNS0vLU1heS0vO3MvLTA2LS8tSnVuZS0vO3MvLTA3LS8tSnVseS0vO3MvLTA4LS8tQXVndXN0LS87cy8tMDktLy1TZXB0ZW1iZXItLztzLy0xMC0vLU9jdG9iZXItLztzLy0xMS0vLU5vdmVtYmVyLS87cy8tMTItLy1EZWNlbWJlci0vO3MvXCguKlwpLVwoLipcKS1cKC4qXCkvXDMgXDIgXDEvJ2AgOyBzZWQgPCQ8ID4kQCAicy9AVE9EQVlALyQkTS87cy9AVkVSU0lPTkAvcGNpdXRpbHMtJChWRVJTSU9OKS87cyNASURTRElSQCMkKElEU0RJUikjIgorQEAgLTEwMSw3ICsxMDAsNyBAQAorIGluc3RhbGw6IGFsbAorICMgLWMgaXMgaWdub3JlZCBvbiBMaW51eCwgYnV0IHJlcXVpcmVkIG9uIEZyZWVCU0QKKyAJJChESVJJTlNUQUxMKSAtbSA3NTUgJChERVNURElSKSQoU0JJTkRJUikgJChERVNURElSKSQoSURTRElSKSAkKERFU1RESVIpJChNQU5ESVIpL21hbjggJChERVNURElSKSQoTUFORElSKS9tYW43CistCSQoSU5TVEFMTCkgLWMgLW0gNzU1ICQoU1RSSVApIGxzcGNpIHNldHBjaSAkKERFU1RESVIpJChTQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSBsc3BjaSBzZXRwY2kgJChERVNURElSKSQoU0JJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA3NTUgdXBkYXRlLXBjaWlkcyAkKERFU1RESVIpJChTQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCAkKFBDSV9JRFMpICQoREVTVERJUikkKElEU0RJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA2NDQgbHNwY2kuOCBzZXRwY2kuOCB1cGRhdGUtcGNpaWRzLjggJChERVNURElSKSQoTUFORElSKS9tYW44CitkaWZmIC1yIGFmMmIxMGNjM2MxNCBsaWIvY29uZmlndXJlCistLS0gYS9saWIvY29uZmlndXJlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvbGliL2NvbmZpZ3VyZQlTdW4gSmFuIDIyIDE4OjM4OjU0IDIwMTIgKzA4MDAKK0BAIC0xNCw2ICsxNCwxMCBAQAorIAlmaQorIH0KKyAKKytWRVJTSU9OPSQxCisrSURTRElSPSQyCisrRE5TPXllcworKworIGlmIFsgLXogIiRWRVJTSU9OIiAtbyAteiAiJElEU0RJUiIgXSA7IHRoZW4KKyAJZWNobyA+JjIgIlBsZWFzZSBydW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZnJvbSB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIgorIAlleGl0IDEKK0BAIC0yMSw4ICsyNSw4IEBACisgCisgZWNob19uICJDb25maWd1cmluZyBsaWJwY2kgZm9yIHlvdXIgc3lzdGVtLi4uIgorIGlmIFsgLXogIiRIT1NUIiBdIDsgdGhlbgorLQlzeXM9YHVuYW1lIC1zYAorLQlyZWw9YHVuYW1lIC1yYAorKwlzeXM9JHszOi1gdW5hbWUgLXNgfQorKwlyZWw9CisgCXJlYWxzeXM9IiRzeXMiCisgCWlmIFsgIiRzeXMiID0gIkFJWCIgLWEgLXggL3Vzci9iaW4vb3NsZXZlbCAtYSAteCAvdXNyL3NiaW4vbHNhdHRyIF0KKyAJdGhlbgorQEAgLTMwLDcgKzM0LDcgQEAKKyAJCXByb2M9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIC1GIG5hbWUgfCBoZWFkIC0xYAorIAkJY3B1PWAvdXNyL3NiaW4vbHNhdHRyIC1GIHZhbHVlIC1sICRwcm9jIC1hIHR5cGUgfCBzZWQgJ3MvXy4qLy8nYAorIAllbHNlCistCQljcHU9YHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYAorKwkJY3B1PSR7NDotYHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYH0KKyAJZmkKKyAJaWYgWyAiJHN5cyIgPSAiR05VL2tGcmVlQlNEIiAtbyAiJHN5cyIgPSAiRHJhZ29uRmx5IiBdCisgCXRoZW4KK0BAIC00MCw3ICs0NCw3IEBACisgCXRoZW4KKyAJCXN5cz1jeWd3aW4KKyAJZmkKKy0JSE9TVD0kezM6LSRjcHUtJHN5c30KKysJSE9TVD0kY3B1LSRzeXMKKyBmaQorIFsgLW4gIiRSRUxFQVNFIiBdICYmIHJlbD0iJHtSRUxFQVNFfSIKKyAjIENBVkVBVDogdHIgb24gU29sYXJpcyBpcyBhIGJpdCB3ZWlyZCBhbmQgdGhlIGV4dHJhIFtdIGlzIG90aGVyd2lzZSBoYXJtbGVzcy4KK0BAIC00OSw2ICs1MywyMSBAQAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorK2lmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKyt0aGVuCisrCXN5cz1saW51eAorK2ZpCisrCisgYz1jb25maWcuaAorIG09Y29uZmlnLm1rCisgZWNobyA+JGMgJyNkZWZpbmUgUENJX0NPTkZJR19IJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwYjRhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAordGhlIG9yaWdpbmFsIGd1ZXNzIGFsZ29yaXRobSBpcyBicm9rZW4gZm9yIG1hbnkgYXJjaHMKK2ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byB3b3VsZCBicmVhazoKKwlhcm0tbGludXgtZ251ZWFiaSAgLS0+IHN5cz1nbnVlYWJpCisJeDg2XzY0LXVua25vd24tcGMtbGludXgtZ251ICAtLT4gc3lzID0gcGMtbGludXgtZ251CisKK3VzZSBhIHNpbXBsZXIgc2NoZW1lIGhlcmUgYW5kIGhvcGUgaXQgd29ya3MgZm9yIGFsbCB0aGUgY2FzZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzcvMzAvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWIvY29uZmlndXJlIGIvbGliL2NvbmZpZ3VyZQoraW5kZXggNDMxOGIwNS4uODRmNmFjYiAxMDA3NTUKKy0tLSBhL2xpYi9jb25maWd1cmUKKysrKyBiL2xpYi9jb25maWd1cmUKK0BAIC01MywyMCArNTMsNyBAQCBjcHU9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKy10aGVuCistCXN5cz1saW51eAorLWZpCisreyBlY2hvICIkaG9zdCIgfCBncmVwIGxpbnV4OyB9ICYmIHN5cz1saW51eAorIAorIGM9Y29uZmlnLmgKKyBtPWNvbmZpZy5tawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZmJjNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBJb251dCBSYWR1IDxpb251dHgucmFkdUBpbnRlbC5jb20+CisKK0luZGV4OiBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBjaXV0aWxzLTMuMi4wLm9yaWcvTWFrZWZpbGUKKysrKyBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorQEAgLTM1LDcgKzM1LDcgQEAgU0hBUkVESVI9JChQUkVGSVgpL3NoYXJlCisgSURTRElSPSQoU0hBUkVESVIpCisgTUFORElSOj0kKHNoZWxsIGlmIFsgLWQgJChQUkVGSVgpL3NoYXJlL21hbiBdIDsgdGhlbiBlY2hvICQoUFJFRklYKS9zaGFyZS9tYW4gOyBlbHNlIGVjaG8gJChQUkVGSVgpL21hbiA7IGZpKQorIElOQ0RJUj0kKFBSRUZJWCkvaW5jbHVkZQorLUxJQkRJUj0kKFBSRUZJWCkvbGliCisrTElCRElSPSQobGliZGlyKQorIFBLR0NGRElSPSQoTElCRElSKS9wa2djb25maWcKKyAKKyAjIENvbW1hbmRzCitAQCAtOTQsNyArOTQsNyBAQCBleGFtcGxlOiBleGFtcGxlLm8gbGliLyQoUENJTElCX0RFVikKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisrCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAkKExETElCUykgLW8gJEAKKyAKKyAlLjggJS43OiAlLm1hbgorIAlNPWBlY2hvICQoREFURSkgfCBzZWQgJ3MvLTAxLS8tSmFudWFyeS0vO3MvLTAyLS8tRmVicnVhcnktLztzLy0wMy0vLU1hcmNoLS87cy8tMDQtLy1BcHJpbC0vO3MvLTA1LS8tTWF5LS87cy8tMDYtLy1KdW5lLS87cy8tMDctLy1KdWx5LS87cy8tMDgtLy1BdWd1c3QtLztzLy0wOS0vLVNlcHRlbWJlci0vO3MvLTEwLS8tT2N0b2Jlci0vO3MvLTExLS8tTm92ZW1iZXItLztzLy0xMi0vLURlY2VtYmVyLS87cy9cKC4qXCktXCguKlwpLVwoLipcKS9cMyBcMiBcMS8nYCA7IHNlZCA8JDwgPiRAICJzL0BUT0RBWUAvJCRNLztzL0BWRVJTSU9OQC9wY2l1dGlscy0kKFZFUlNJT04pLztzI0BJRFNESVJAIyQoSURTRElSKSMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHNfMy4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhOGNkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjMuMS5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIlBDSSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICdUaGUgUENJIFV0aWxpdGllcyBwYWNrYWdlIGNvbnRhaW5zIGEgbGlicmFyeSBmb3IgcG9ydGFibGUgYWNjZXNzIFwKK3RvIFBDSSBidXMgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgc2V2ZXJhbCB1dGlsaXRpZXMgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LicKK0hPTUVQQUdFID0gImh0dHA6Ly9hdHJleS5rYXJsaW4ubWZmLmN1bmkuY3ovfm1qL3BjaXV0aWxzLnNodG1sIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorREVQRU5EUyA9ICJ6bGliIGttb2QiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS91dGlscy9wY2l1dGlscy9wY2l1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d1ZXNzLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjRjMzQwYTMxNzk4N2Q2MWExMWVlMmNmMTM5ZWYxMTkxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNGEzYmRiNzdlNGNkYmU5ZTk3MGUxODg1YWY0NmUwYmEyMDExYmY5NzM2NDM2OGM0NTVhZGUwZWRkNGUzYTkiCisKK2luaGVyaXQgbXVsdGlsaWJfaGVhZGVyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnaHdkYicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2h3ZGJdID0gIkhXREI9eWVzLEhXREI9bm8sdWRldiIKKworUENJX0NPTkZfRkxBRyA9ICJaTElCPXllcyBETlM9eWVzIFNIQVJFRD15ZXMiCisKKyMgc2VlIGNvbmZpZ3VyZS5wYXRjaAorZG9fY29uZmlndXJlICgpIHsKKwkoCisJICBjZCBsaWIgJiYgXAorCSAgIyBFWFRSQV9PRUNPTkYgZm9yIHRoaXMgcmVjaXBlIGNvdWxkIG9ubHkgcG9zc2libHkgY29udGFpbiAnSFdEQj15ZXMvbm8nLCBzbyB3ZSBwdXQgaXQKKwkgICMgYmVmb3JlIC4vY29uZmlndXJlCisJICAke1BDSV9DT05GX0ZMQUd9ICR7RVhUUkFfT0VDT05GfSAuL2NvbmZpZ3VyZSAke1BWfSAke2RhdGFkaXJ9ICR7VEFSR0VUX09TfSAke1RBUkdFVF9BUkNIfQorCSkKK30KKworZXhwb3J0IFBSRUZJWCA9ICIke3ByZWZpeH0iCitleHBvcnQgU0JJTkRJUiA9ICIke3NiaW5kaXJ9IgorZXhwb3J0IFNIQVJFRElSID0gIiR7ZGF0YWRpcn0iCitleHBvcnQgTUFORElSID0gIiR7bWFuZGlyfSIKKworRVhUUkFfT0VNQUtFICs9ICIke1BDSV9DT05GX0ZMQUd9IgorCisjIFRoZSBjb25maWd1cmUgc2NyaXB0IGJyZWFrcyBpZiB0aGUgSE9TVCB2YXJpYWJsZSBpcyBzZXQKK0hPU1RbdW5leHBvcnRdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwgaW5zdGFsbC1saWIKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWxuIC1zIC4uL3NiaW4vbHNwY2kgJHtEfSR7YmluZGlyfS9sc3BjaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHBjaS9jb25maWcuaAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0taWRzIGxpYnBjaSIKK0ZJTEVTXyR7UE59LWlkcyA9ICIke2RhdGFkaXJ9L3BjaS5pZHMqIgorRklMRVNfbGlicGNpID0gIiR7bGliZGlyfS9saWJwY2kuc28uKiIKK1NVTU1BUllfJHtQTn0taWRzID0gIlBDSSB1dGlsaXRpZXMgLSBkZXZpY2UgSUQgZGF0YWJhc2UiCitERVNDUklQVElPTl8ke1BOfS1pZHMgPSAiUGFja2FnZSBwcm92aWRpbmcgdGhlIFBDSSBkZXZpY2UgSUQgZGF0YWJhc2UgZm9yIHBjaXV0aWxzLiIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1pZHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4LzAwMDEtZml4LWEtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4LzAwMDEtZml4LWEtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwMTA0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDVhNzkzYTFhOWZiMzQ3NzcxOWFhYmY3ZTI3ZmYyMmVkMWFjZGY1NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE5IE1heSAyMDE1IDE1OjU0OjI0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBhIHBhcmFsbGVsIGJ1aWxkaW5nIGlzc3VlCisKK0ZpeGVkOgorfCAgIHNyYy9sZXhfY29uZmlnLmM6MzQ6MjU6IGZhdGFsIGVycm9yOiB5YWNjX2NvbmZpZy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8Cit8ICAgICNpbmNsdWRlICJ5YWNjX2NvbmZpZy5oIgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCit8ICAgY29tcGlsYXRpb24gdGVybWluYXRlZC4KKworQW5kOgorQ29tcGlsaW5nIGxleF9jb25maWcuYy4KKyAgc3JjL2xleF9jb25maWcubDozNDoyNTogZmF0YWwgZXJyb3I6IHlhY2NfY29uZmlnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3RoZXJlIGFyZSB0d28gTWFrZWZpbGUgcnVsZXMgdG8gZ2VuZXJhdGUgbGV4X2NvbmZpZy5vLCBvbmUgaXMgdG8gZ2VuZXJhdGUKK2xleF9jb25maWcubyBvdGhlciBpcyB0byBnZW5lcmF0ZSBzcmMvbGV4X2NvbmZpZy5vLCBzbyB3ZSBjYW4gcmVtb3ZlIG9uZS4KK2FuZCBhZGQgdGhlIG5lZWRlZCBkZXBlbmRlbmNlIGZvciBsZXhfY29uZmlnLm8KKworCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8IDMgKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZDQ1ZmRjMy4uNGM1M2JjMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTI0Niw4ICsyNDYsNyBAQCAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCk6ICQoTElCQykgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZworIAkkKFFVSUVUKSAkKExEKSAkKExERkxBR1MpIC1vICRAICQoQ1JUMCkgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZy5vICQoTElCX09CSlMpICQoQVJDSF9MSUJfT0JKUykKKyAJJChRVUlFVCkgJChTVFJJUENNRCkgJEAKKyAKKy15YWNjX2NvbmZpZy5vIGxleF9jb25maWcubzogJS5vOiAlLmMKKy0JJChDQykgLWMgLU1EIC1PIC1waXBlICQoQ1BQRkxBR1MpICQ8Cisrc3JjL2xleF9jb25maWcubzpzcmMveWFjY19jb25maWcuaAorIAorIGRlYnVndG9vbHM6IGNjZHYgJChDQkRVTVApICQoQ0lTRFVNUCkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMtMDE4L21ha2VmaWxlX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBjZTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSGFyZGNvZGVkIHBhdGhzIGFyZSBiYWQuLi4KK1RoaXMgbGV0cyB1cyB1c2UgdGhlIGluc3RhbGwgZnJvbSBPRSdzIG5hdGl2ZSBzeXNyb290CityZWJhc2UgdGhlIHBhdGNoIHRvIDAxOCwgcmVtb3ZpbmcgaGFyZGNvZGVkIHBhdGggZm9yIHRydWUKK2FzIHdlbGwuIFJlbW92aW5nIG9mIC1EIGluIGluc3RhbGwgaW52b2NhdGlvbiBpcyBhIGxpdHRsZQorcXVlc3Rpb25hYmxlLCBpcyBpdCBzb21lIEdOVSBleHRlbnRpb24/CisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcGNtY2lhdXRpbHMtMDE4L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGNtY2lhdXRpbHMtMDE4Lm9yaWcvTWFrZWZpbGUKKysrKyBwY21jaWF1dGlscy0wMTgvTWFrZWZpbGUKK0BAIC03Niw3ICs3Niw3IEBAIHNiaW5kaXIgPQkke2V4ZWNfcHJlZml4fS9zYmluCisgbWFuZGlyID0JJHtwcmVmaXh9L3Vzci9zaGFyZS9tYW4KKyB1ZGV2ZGlyID0JJHtwcmVmaXh9L2xpYi91ZGV2CisgCistSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKKytJTlNUQUxMID0gaW5zdGFsbCAtYworIElOU1RBTExfUFJPR1JBTSA9ICR7SU5TVEFMTH0KKyBJTlNUQUxMX0RBVEEgID0gJHtJTlNUQUxMfSAtbSA2NDQKKyBJTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTF9QUk9HUkFNfQorQEAgLTE4MCw3ICsxODAsNyBAQCBlbmRpZgorICMgaWYgREVCVUcgaXMgZW5hYmxlZCwgdGhlbiB3ZSBkbyBub3Qgc3RyaXAgb3Igb3B0aW1pemUKKyBpZmVxICgkKHN0cmlwICQoREVCVUcpKSx0cnVlKQorIAlDRkxBR1MgICs9IC1PMSAtZyAtRERFQlVHIC1EX0dOVV9TT1VSQ0UKKy0JU1RSSVBDTUQgPSAvYmluL3RydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKKysJU1RSSVBDTUQgPSB0cnVlIC1TaW5jZV93ZV9hcmVfZGVidWdnaW5nCisgZWxzZQorIAlDRkxBR1MgICs9ICQoT1BUSU1JWkFUSU9OKSAtZm9taXQtZnJhbWUtcG9pbnRlciAtRF9HTlVfU09VUkNFCisgCVNUUklQQ01EID0gJChTVFJJUCkgLXMgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAtLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50CitAQCAtMjczLDMwICsyNzMsMzIgQEAgY2xlYW46CisgCisgaW5zdGFsbC1ob3RwbHVnOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKGhvdHBsdWdkaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYS5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhLnJjICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLmFnZW50CisrCSQoSU5TVEFMTF9QUk9HUkFNKSBob3RwbHVnL3BjbWNpYS5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEucmMKKyAKKyB1bmluc3RhbGwtaG90cGx1ZzoKKyAJLSBybSAtZiAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLnJjCisgCisgaW5zdGFsbC1zb2NrZXQtaG90cGx1ZzoKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LmFnZW50CistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYV9zb2NrZXQucmMgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWFfc29ja2V0LmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQKKysJJChJTlNUQUxMX1BST0dSQU0pIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LnJjCisgCisgdW5pbnN0YWxsLXNvY2tldC1ob3RwbHVnOgorIAktIHJtIC1mICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworIAorIGluc3RhbGwtc29ja2V0LXRvb2xzOgorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgJChQQ01DSUFfU09DS0VUX1NUQVJUVVApICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKQorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfU09DS0VUX1NUQVJUVVApCisgCisgdW5pbnN0YWxsLXNvY2tldC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkKKyAKKyBpbnN0YWxsLXRvb2xzOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHNiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChQQ0NBUkRDVEwpCisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQodWRldmhlbHBlcmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoUENDQVJEQ1RMKSAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKKyAJJChTWU1MSU5LKSAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChMU1BDTUNJQSkKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EICQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKSAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKQorIAorIHVuaW5zdGFsbC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKK0BAIC0zMDUsMjIgKzMwNywyNCBAQCB1bmluc3RhbGwtdG9vbHM6CisgCisgaW5zdGFsbC1jb25maWc6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGNtY2lhY29uZmRpcikKKy0JJChJTlNUQUxMX0RBVEEpICAtRCBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKysJJChJTlNUQUxMX0RBVEEpICBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAJaWYgWyAtZiBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSBdOyB0aGVuIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAtRCBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0czsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGNvbmZpZy9jb25maWcub3B0cy4kKEFSQ0gpICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzOyBcCisgCWZpCisgCisgdW5pbnN0YWxsLWNvbmZpZzoKKyAjCS0gcm0gLWYgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAKKyBpbnN0YWxsLXVkZXY6CistCSQoSU5TVEFMTF9EQVRBKSAtRCAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpCisrCSQoSU5TVEFMTF9EQVRBKSAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKyAKKyB1bmluc3RhbGwtdWRldjoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpLzYwLXBjbWNpYS5ydWxlcworIAorIGluc3RhbGwtbWFuOgorLQkkKElOU1RBTExfREFUQSkgLUQgbWFuL21hbjgvcGNjYXJkY3RsLjggJChERVNURElSKSQobWFuZGlyKS9tYW44L3BjY2FyZGN0bC44CisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQobWFuZGlyKS9tYW44CisrCSQoSU5TVEFMTF9EQVRBKSBtYW4vbWFuOC9wY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGNjYXJkY3RsLjgKKyAJJChTWU1MSU5LKSBwY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvbHNwY21jaWEuOAorIAorIHVuaW5zdGFsbC1tYW46CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFjNTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYwpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCB1c2VybGFuZCB1dGlsaXRpZXMgZm9yIHRoZSBQQ01DSUEgc3Vic3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8iCitTRUNUSU9OID0gImtlcm5lbC91c2VybGFuZCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInVkZXYgc3lzZnN1dGlscyBmbGV4LW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYgbW9kdWxlLWluaXQtdG9vbHMiCisKK1NSQ19VUkkgPSAiaHR0cDovL21pcnJvci5saW51eC5vcmcuYXUvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8ke0JQfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vcGNtY2lhdXRpbHMtJHtQVn0iCisKK2V4cG9ydCBIT1NUQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgZXRjZGlyID0gIiR7c3lzY29uZmRpcn0iCitleHBvcnQgc2JpbmRpciA9ICIke2Jhc2Vfc2JpbmRpcn0iCitleHBvcnQgcGNtY2lhY29uZmRpciA9ICIke3N5c2NvbmZkaXJ9L3BjbWNpYSIKK2V4cG9ydCB1ZGV2ZGlyID0gImBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YCIKK2V4cG9ydCB1ZGV2cnVsZXNkaXIgPSAiYHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQiCitleHBvcnQgVURFViA9ICIxIgorTEQgPSAiJHtDQ30iCitDRkxBR1MgPSsgIi1JJHtTfS9zcmMiCitDRkxBR1MgPSsgIi1EUENNQ0lBVVRJTFNfVkVSU0lPTj1cXCIke1BWfVxcIiIKKworRVhUUkFfT0VNQUtFID0gIi1lICdTVFJJUD1lY2hvJyAnTElCX09CSlM9LWxjIC1sc3lzZnMnICdMRVg9ZmxleCciCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vcGNtY2lhL2NvbmZpZy5vcHRzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3YmQwNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBwY21jaWF1dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL21ha2VmaWxlX2ZpeC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZDg1NjY5YjM0NDBiYWE0NTMyMzYzZGE2Y2FhZjFiNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OWU2YWU0NDEyNzhlMTc4YzA3NTAxZDQ5MjM5NGVkMmMwMzI2ZmRiNjY4OTRmNmQwNDBlYzgxMWIwZGM4ZWQ1IgorCitQUiA9ICJyMSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIqL3VkZXYvLmRlYnVnICovKi91ZGV2Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59ICs9ICIqL3VkZXYgKi8qL3VkZXYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG0tdXRpbHMvcG0tdXRpbHNfMS40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG0tdXRpbHMvcG0tdXRpbHNfMS40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzNTE4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wbS11dGlscy9wbS11dGlsc18xLjQuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTRUNUSU9OID0gImJhc2UiCitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgc2NyaXB0cyBmb3IgcG93ZXIgbWFuYWdlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBzaGVsbCBjb21tYW5kIGxpbmUgdG9vbHMgdG8gc3VzcGVuZCBhbmQgaGliZXJuYXRlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wbS11dGlscy5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BtLXBtdS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjI7bWQ1PTNjMWRkYmM1NGU3MzVmYjRhMDM4NmUxNGM3OGEzMTQ3IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG0tdXRpbHMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL3BtLXV0aWxzLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjE3NDJhNTU2MDg5YzM2YzNhODllYjFiOTU3ZGE1YTYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlZDg5OTAzMjg2NmQ4OGIyOTMzYTFkMzRjYzc1ZThhZTQyZGNkZTIwZTFjYzIxODM2YmFhYWUzZDQzNzBjMGIiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scworCitSREVQRU5EU18ke1BOfSA9ICJncmVwIGJhc2giCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307IGF1dG9yZWNvbmYgLWYgLWkgLXMgKQorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59L2Jpbi8uZGVidWcgXAorCQkgICAgJHtkYXRhZGlyfS9kb2MvcG0tdXRpbHMvUkVBRE1FLmRlYnVnZ2luZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y1MjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9DT1BZSU5HCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBpcyBhIGJsYW5rIENPUFlJTkcgZmlsZSwgYW5kIHNob3VsZCBiZSBmaWxsZWQgaW4gYnkgb3JpZ2luYWwgYXV0aG9yIGluIGZ1dHVyZS4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3BvaW50ZXJjYWwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ni9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACis4MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjcvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkODRjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdW1pcHMvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdW1pcHMvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXBwYy9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDZlMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni02NC9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDA1M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACisxMjgwIDAgMTAwMiAwIDk2MCAzMjggNjU1MzYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMDUzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzEyODAgMCAxMDAyIDAgOTYwIDMyOCA2NTUzNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsXzAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjczNWE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBkYXRhIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjVmY2ZjODdmYjYxNTg2MGQzOThiNWUzODY4NWVkZiIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9pbnRlcmNhbCBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBPbmx5IGluc3RhbGwgZmlsZSBpZiBpdCBoYXMgYSBjb250ZW50cworCWlmIFsgLXMgJHtTfS9wb2ludGVyY2FsIF07IHRoZW4KKwkgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCit9CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2FkZF9zdGRsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGYyNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyMgVGhpcyBwYXRjaCBhZGRlcyBzdGRsaWIuaCB0byBmaXggY29tcGlsZXIgd2FybmluZ3MgZHVlIHRvIHRoZSBleGl0CisjIGJ1aWx0LWluIG5vdCBiZWluZyBkZWZpbmVkIGFuZCBnZXR0aW5nIGFuIGluY29ycmVjdCBpbXBsaWNpdCBkZWZpbml0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDcmVhdGVkLWJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKKy0tLSBzZXRzZXJpYWwtMi4xNy9zZXRzZXJpYWwuYwkyMDEwLTA5LTAyIDE0OjExOjI3LjU2OTc2MzA4OCAtMDcwMAorKysrIHNldHNlcmlhbC0yLjE3X2ZpeGVkL3NldHNlcmlhbC5jCTIwMTAtMDktMDIgMTQ6MTE6MDguNTQ2MjY0MTM5IC0wNzAwCitAQCAtMTEsNiArMTEsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dGVybWlvcy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0YWRjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHNldHNlcmlhbC0yLjE3Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBzZXRzZXJpYWwtMi4xNy9NYWtlZmlsZS5pbgorQEAgLTEzLDYgKzEzLDcgQEAgU1RSSVAgPSBAU1RSSVBACisgQ0MgPSBAQ0NACisgUk0gPSBybSAtZgorIENGTEFHUyA9IEBDRkxBR1NACisrTERGTEFHUyA9IEBMREZMQUdTQAorIERFRlMgPSBAREVGU0AKKyBJTkNTID0gLUkuCisgVEFSID0gdGFyCitAQCAtMjAsNyArMjEsNyBAQCBUQVIgPSB0YXIKKyBhbGw6IHNldHNlcmlhbCBzZXRzZXJpYWwuY2F0CisKKyBzZXRzZXJpYWw6IHNldHNlcmlhbC5jCistCSQoQ0MpICQoQ0ZMQUdTKSAkKERFRlMpICQoSU5DUykgc2V0c2VyaWFsLmMgLW8gc2V0c2VyaWFsCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoREVGUykgJChJTkNTKSBzZXRzZXJpYWwuYyAtbyBzZXRzZXJpYWwKKworIHNldHNlcmlhbC5jYXQ6IHNldHNlcmlhbC44CisJbnJvZmYgLW1hbiBzZXRzZXJpYWwuOCA+IHNldHNlcmlhbC5jYXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsXzIuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYmRkZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQ29udHJvbHMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc2VyaWFsIHBvcnRzIgorREVTQ1JJUFRJT04gPSAic2V0c2VyaWFsIGlzIGEgcHJvZ3JhbSBkZXNpZ25lZCB0byBzZXQgYW5kL29yIHJlcG9ydCB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzZXJpYWwgcG9ydCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZXRzZXJpYWwuc291cmNlZm9yZ2UubmV0IgorQVVUSE9SID0gIlRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT02O21kNT0yZTdjNTljYjllNTdlMzU2YWU4MWY1MGY0ZTRkZmQ5OSIKK1BSID0gInIzIgorCitERVBFTkRTICs9ICJncm9mZi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zZXRzZXJpYWwvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRfc3RkbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM0ODY3ZDcyYzQxNTY0MzE4ZTAxMDc3NDVlYjdhMGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdlNDQ4N2QzMjBhYzMxNTU4NTYzNDI0MTg5NDM1ZDM5NmRkZjc3OTUzYmIyMzExMWExN2EzZDE0ODdiNTc5NGEiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgKKworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3NldHNlcmlhbCAgICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXRzZXJpYWwuOCAke0R9JHttYW5kaXJ9L21hbjgKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTUuMDcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjdhMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgZndfcHJpbnRlbnYvc2V0ZW52IHV0aWxpdGllcyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT0wNTA3Y2Q3ZGE4ZTdhZDZkNjcwMTkyNmVjOWI4NGM5NSIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlciIKK0RFUEVORFMgPSAibXRkLXV0aWxzIgorCisjIFRoaXMgcmV2aXNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRhZyAidjIwMTUuMDciCisjIFdlIHVzZSB0aGUgcmV2aXNpb24gaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGZldGNoIGl0IGZyb20gdGhlCisjIHJlcG8gZHVyaW5nIHBhcnNlCitTUkNSRVYgPSAiMzM3MTFiZGQ0YTRkY2U5NDJmYjVhZTg1YTY4ODk5YTgzNTdiZGQ5NCIKKworUFYgPSAidjIwMTUuMDcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhbHJlYWR5LXN0cmlwcGVkIgorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICdDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBWPTEnCitFWFRSQV9PRU1BS0VfY2xhc3MtY3Jvc3MgPSAnQVJDSD0ke1RBUkdFVF9BUkNIfSBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFY9MScKKworaW5oZXJpdCB1Ym9vdC1jb25maWcKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSAke1VCT09UX01BQ0hJTkV9CisJb2VfcnVubWFrZSBlbnYKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZndfcHJpbnRlbnYKKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Z3X3NldGVudgorCWluc3RhbGwgLW0gMDY0NCAke1N9L3Rvb2xzL2Vudi9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKK30KKworZG9faW5zdGFsbF9jbGFzcy1jcm9zcyAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3N9CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmluZGlyX2Nyb3NzfS9md19wcmludGVudgorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2JpbmRpcl9jcm9zc30vZndfc2V0ZW52Cit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19jbGFzcy1jcm9zcyA9ICJ1Ym9vdF9md191dGlsc19jcm9zcyIKK3Vib290X2Z3X3V0aWxzX2Nyb3NzKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3N9Cit9CisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitCQkNMQVNTRVhURU5EID0gImNyb3NzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtbWtpbWFnZV8yMDE1LjA3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QtbWtpbWFnZV8yMDE1LjA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMjliYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1ta2ltYWdlXzIwMTUuMDcuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJVLUJvb3QgYm9vdGxvYWRlciBpbWFnZSBjcmVhdGlvbiB0b29sIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlcy9SRUFETUU7bWQ1PTA1MDdjZDdkYThlN2FkNmQ2NzAxOTI2ZWM5Yjg0Yzk1IgorU0VDVElPTiA9ICJib290bG9hZGVyIgorCitERVBFTkRTID0gIm9wZW5zc2wiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZGVueC5kZS91LWJvb3QuZ2l0O2JyYW5jaD1tYXN0ZXIiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICdDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IiBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFNUUklQPXRydWUgVj0xJworCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIHNhbmRib3hfZGVmY29uZmlnCisJb2VfcnVubWFrZSBjcm9zc190b29scyBOT19TREw9MQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgdG9vbHMvbWtpbWFnZSAke0R9JHtiaW5kaXJ9L3Vib290LW1raW1hZ2UKKwlsbiAtc2YgdWJvb3QtbWtpbWFnZSAke0R9JHtiaW5kaXJ9L21raW1hZ2UKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NmZmZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKQEAgLTAsMCArMSwyOTAgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsIEJvb3QgTG9hZGVyIGZvciBlbWJlZGRlZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZW54LmRlL3dpa2kvVS1Cb290L1dlYkhvbWUiCitTRUNUSU9OID0gImJvb3Rsb2FkZXJzIgorUFJPVklERVMgPSAidmlydHVhbC9ib290bG9hZGVyIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2VzL1JFQURNRTttZDU9MDUwN2NkN2RhOGU3YWQ2ZDY3MDE5MjZlYzliODRjOTUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHVib290LWNvbmZpZyBkZXBsb3kKKworRVhUUkFfT0VNQUtFID0gJ0NST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBDQz0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RPT0xDSEFJTl9PUFRJT05TfSIgVj0xJworRVhUUkFfT0VNQUtFICs9ICdIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IicKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCisjIHUtYm9vdCB3aWxsIGNvbXBpbGUgaXRzIG93biB0b29scyBkdXJpbmcgdGhlIGJ1aWxkLCB3aXRoIHNwZWNpZmljCisjIGNvbmZpZ3VyYXRpb25zIChha2Egd2hlbiBDT05GSUdfRklUX1NJR05BVFVSRSBpcyBlbmFibGVkKSBvcGVuc3NsIGlzIG5lZWRlZCBhcworIyBhIGhvc3QgYnVpbGQgZGVwZW5kZW5jeS4KK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLCxvcGVuc3NsLW5hdGl2ZSIKKworIyBBbGxvdyBzZXR0aW5nIGFuIGFkZGl0aW9uYWwgdmVyc2lvbiBzdHJpbmcgdGhhdCB3aWxsIGJlIHBpY2tlZCB1cCBieSB0aGUKKyMgdS1ib290IGJ1aWxkIHN5c3RlbSBhbmQgYXBwZW5kZWQgdG8gdGhlIHUtYm9vdCB2ZXJzaW9uLiAgSWYgdGhlIC5zY212ZXJzaW9uCisjIGZpbGUgYWxyZWFkeSBleGlzdHMgaXQgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4uCitVQk9PVF9MT0NBTFZFUlNJT04gPz0gIiIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCB1c2UgLmJpbiBhbmQgb3RoZXJzIHVzZSAuaW1nLiAgQnkgZGVmYXVsdCB1c2UgLmJpbgorIyBidXQgZW5hYmxlIGluZGl2aWR1YWwgcmVjaXBlcyB0byBjaGFuZ2UgdGhpcyB2YWx1ZS4KK1VCT09UX1NVRkZJWCA/Pz0gImJpbiIKK1VCT09UX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9CSU5BUlkgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9TWU1MSU5LID89ICJ1LWJvb3QtJHtNQUNISU5FfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9NQUtFX1RBUkdFVCA/PSAiYWxsIgorCisjIE91dHB1dCB0aGUgRUxGIGdlbmVyYXRlZC4gU29tZSBwbGF0Zm9ybXMgY2FuIHVzZSB0aGUgRUxGIGZpbGUgYW5kIGRpcmVjdGx5CisjIGxvYWQgaXQgKEpUQUcgYm9vdGluZywgUUVNVSkgYWRkaXRpb25hbGx5IHRoZSBFTEYgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZworIyBwdXJwb3Nlcy4KK1VCT09UX0VMRiA/PSAiIgorVUJPT1RfRUxGX1NVRkZJWCA/PSAiZWxmIgorVUJPT1RfRUxGX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9IgorVUJPT1RfRUxGX0JJTkFSWSA/PSAidS1ib290LiR7VUJPT1RfRUxGX1NVRkZJWH0iCitVQk9PVF9FTEZfU1lNTElOSyA/PSAidS1ib290LSR7TUFDSElORX0uJHtVQk9PVF9FTEZfU1VGRklYfSIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCBidWlsZCBhbiBTUEwgKFNlY29uZCBQcm9ncmFtIExvYWRlcikgaW1hZ2UgdGhhdAorIyBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB0aGUgdS1ib290IGJpbmFyeSBhcyB3ZWxsIGFzIHBsYWNlZCBpbiB0aGUKKyMgZGVwbG95IGRpcmVjdG9yeS4gIEZvciB0aG9zZSB2ZXJzaW9ucyB0aGV5IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKKyMgdG8gYWxsb3cgcGFja2FnaW5nIHRoZSBTUEwuCitTUExfQklOQVJZID89ICIiCitTUExfSU1BR0UgPz0gIiR7U1BMX0JJTkFSWX0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfSIKK1NQTF9TWU1MSU5LID89ICIke1NQTF9CSU5BUll9LSR7TUFDSElORX0iCisKKyMgQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgYSBzY3JpcHQgY2FuIGJlIGluc3RhbGxlZCBhbG9uZ3NpZGUKKyMgdS1ib290IHRvIGJlIHVzZWQgYXV0b21hdGljYWxseSBvbiBib290LiAgVGhpcyBmaWxlLCB0eXBpY2FsbHkgJ3VFbnYudHh0JworIyBvciAnYm9vdC5zY3InLCBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB1LWJvb3QgYXMgd2VsbCBhcyBwbGFjZWQgaW4gdGhlCisjIGRlcGxveSBkaXJlY3RvcnkuICBNYWNoaW5lIGNvbmZpZ3VyYXRpb25zIG5lZWRpbmcgb25lIG9mIHRoZXNlIGZpbGVzIHNob3VsZAorIyBpbmNsdWRlIGl0IGluIHRoZSBTUkNfVVJJIGFuZCBzZXQgdGhlIFVCT09UX0VOViBwYXJhbWV0ZXIuCitVQk9PVF9FTlZfU1VGRklYID89ICJ0eHQiCitVQk9PVF9FTlYgPz0gIiIKK1VCT09UX0VOVl9CSU5BUlkgPz0gIiR7VUJPT1RfRU5WfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX0lNQUdFID89ICIke1VCT09UX0VOVn0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX1NZTUxJTksgPz0gIiR7VUJPT1RfRU5WfS0ke01BQ0hJTkV9LiR7VUJPT1RfRU5WX1NVRkZJWH0iCisKK2RvX2NvbXBpbGUgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICdsZC1pcy1nb2xkJywgJycsIGQpfSIgPSAibGQtaXMtZ29sZCIgXSA7IHRoZW4KKwkJc2VkIC1pICdzLyQoQ1JPU1NfQ09NUElMRSlsZCQvJChDUk9TU19DT01QSUxFKWxkLmJmZC9nJyBjb25maWcubWsKKwlmaQorCisJdW5zZXQgTERGTEFHUworCXVuc2V0IENGTEFHUworCXVuc2V0IENQUEZMQUdTCisKKwlpZiBbICEgLWUgJHtCfS8uc2NtdmVyc2lvbiAtYSAhIC1lICR7U30vLnNjbXZlcnNpb24gXQorCXRoZW4KKwkJZWNobyAke1VCT09UX0xPQ0FMVkVSU0lPTn0gPiAke0J9Ly5zY212ZXJzaW9uCisJCWVjaG8gJHtVQk9PVF9MT0NBTFZFUlNJT059ID4gJHtTfS8uc2NtdmVyc2lvbgorCWZpCisgICAgCisgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgIGZvciB0eXBlICBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtjb25maWd9CisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtVQk9PVF9NQUtFX1RBUkdFVH0KKyAgICAgICAgICAgICAgICAgICAgY3AgICR7U30vJHtjb25maWd9LyR7VUJPT1RfQklOQVJZfSAgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgIGRvbmUKKyAgICAgICAgdW5zZXQgIGkKKyAgICBlbHNlCisgICAgICAgIG9lX3J1bm1ha2UgJHtVQk9PVF9NQUNISU5FfQorICAgICAgICBvZV9ydW5tYWtlICR7VUJPT1RfTUFLRV9UQVJHRVR9CisgICAgZmkKKworfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9L3UtYm9vdC0ke3R5cGV9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCAgagorICAgICAgICBkb25lCisgICAgICAgIHVuc2V0ICBpCisgICAgZWxzZQorICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0lNQUdFfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9JTUFHRX0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIHVuc2V0IGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0IGkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvJHtVQk9PVF9FTEZfSU1BR0V9CisgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0VMRl9CSU5BUll9CisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmIFsgLWUgJHtXT1JLRElSfS9md19lbnYuY29uZmlnIF0gOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKKyAgICBmaQorCisgICAgaWYgWyAieCR7U1BMX0JJTkFSWX0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICB0aGVuCisgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7U1BMX0JJTkFSWX0gJHtEfS9ib290LyR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7RH0vYm9vdC8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke1NQTF9CSU5BUll9ICR7RH0vYm9vdC8ke1NQTF9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0R9L2Jvb3QvJHtVQk9PVF9FTlZfQklOQVJZfQorICAgIGZpCit9CisKK0ZJTEVTXyR7UE59ID0gIi9ib290ICR7c3lzY29uZmRpcn0iCisjIEVuc3VyZSB0aGUgc3BsaXQgZGVidWcgcGFydCBvZiBhbnkgZWxmIGZpbGVzIGFyZSBwdXQgaW50byBkYmcKK0ZJTEVTXyR7UE59LWRiZyArPSAiL2Jvb3QvLmRlYnVnIgorCitkb19kZXBsb3kgKCkgeworICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9ICR7REVQTE9ZRElSfS91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgZmkgCisgICAgICAgICAgICBkb25lIAorICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgZG9uZQorICAgICAgICB1bnNldCAgaQorICAgIGVsc2UKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFUExPWURJUn0KKyAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9JTUFHRX0KKyAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgIHJtIC1mICR7VUJPT1RfQklOQVJZfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX0JJTkFSWX0KKyAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0RFUExPWURJUn0vdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfU1lNTElOS30KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgagorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9FTEZ9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX1NZTUxJTkt9CisgICAgICAgIGZpCisgICAgZmkKKworCisgICAgIGlmIFsgIngke1NQTF9CSU5BUll9IiAhPSAieCIgXQorICAgICB0aGVuCisgICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICAgdGhlbgorICAgICAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9CisgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX0lNQUdFfQorICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgZmkKKyAgICAgZmkKKworCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0VOVl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfU1lNTElOS30KKyAgICBmaQorfQorCithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QvMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3QvMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmNkNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC8wMDAxLXUtYm9vdC1tcGM4NXh4LXUtYm9vdC0ubGRzLXJlbW92ZS1fR0xPQkFMX09GRlNFVF9UQUIucGF0Y2gKQEAgLTAsMCArMSwxODQgQEAKK0Zyb20gOTI1OThlMTUxNWIyZWMzODUxYWYxZjA2NDA3NWQwNDU3ZjAxMjcyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCA5IEZlYiAyMDE1IDE4OjMzOjU2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBvd2VycGMvY3B1LyovdS1ib290Ki5sZHM6IHJlbW92ZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8KKyBkZWZpbml0aW9uCitPcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitJbiBiaW51dGlscy0yLjI1LCB0aGUgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHN5bWJvbHMgZGVmaW5lZCBieSBQUk9WSURFIGluCit1LWJvb3QubGRzIG92ZXJyaWRlcyB0aGUgbGlua2VyIGJ1aWx0LWluIHN5bWJvbHMKKyhodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC9naXR3ZWIuY2dpP3A9YmludXRpbHMtZ2RiLmdpdDthPWNvbW1pdGRpZmY7aD1iODkzMzk3YTRiMTMxNjYxMGY0OTgxOTM0NDgxNzcxNWU0MzA1ZGU5KSwKK3NvIHRoZSBsaW5rZXIgaXMgdHJlYXRpbmcgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGFzIGEgZGVmaW5pdGlvbiBpbnRvIHRoZSAucmVsb2Mgc2VjdGlvbi4KKworVG8gYWxpZ24gd2l0aCB0aGUgY2hhbmdlIG9mIGJpbnV0aWxzLTIuMjUsIHRoZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8gc3ltYm9sCitzaG91bGQgbm90IGJlIGRlZmluZWQgaW4gc2VjdGlvbnMsIGFuZCB0aGUgc3ltYm9scyBpbiBsaW5rZXIgZ2VuZXJhdGVkIC5nb3QKK3NlY3Rpb24gc2hvdWxkIGJlIHVzZWQoaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA4LTA5L21zZzAwMTIyLmh0bWwpLgorCitGaXhlZCB0aGUgZm9sbG93aW5nIGJ1aWxkIGVycm9ycyB3aXRoIGJpbnV0aWxzLTIuMjU6Cit8IHBvd2VycGMtcG9reS1saW51eC1nbnVzcGUtbGQuYmZkOiBfR0xPQkFMX09GRlNFVF9UQUJMRV8gbm90IGRlZmluZWQgaW4gbGlua2VyIGNyZWF0ZWQgLmdvdAorCitTaWduZWQtb2ZmLWJ5OiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMgICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcyAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcyAgICAgICAgICAgfCAxIC0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK2luZGV4IDk2NThiMjEuLmIzMmY3NGUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK0BAIC0yNCw3ICsyNCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgICAgKiguZml4dXApCitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMKK2luZGV4IDcxOTg0NjUuLjZhNTM1NzEgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCitAQCAtMzMsNyArMzMsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworaW5kZXggY2Q5ZTIzZi4uYWE4MGQzZCAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworQEAgLTI4LDcgKzI4LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK2luZGV4IDUwY2JmODUuLjQ2OWZjMjkgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK0BAIC0yNyw3ICsyNyw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDc3NDc3MmIuLjQxMDFlYWYgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI0LDcgKzI0LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCX0KKyAJX19nb3QyX2VudHJpZXMgPSAoKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMikgLSAxOworIAorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK2luZGV4IDNjMTc3ZmEuLmRiZDhiYmUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK0BAIC0yNiw3ICsyNiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcworaW5kZXggZjkzM2IyMS4uMDM5OWY5MyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKK0BAIC00NCw3ICs0NCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitpbmRleCBiODNjNTUzLi5mMDQ0NTY0IDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitAQCAtMjIsNyArMjIsNiBAQCBTRUNUSU9OUworIAkJX0dPVDJfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZ290MikpCisgCQlLRUVQKCooLmdvdCkpCistCQlQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAJCV9GSVhVUF9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5maXh1cCkpCisgCX0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDVhZTdiM2UuLjg4OWE0YzIgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI5LDcgKzI5LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCQlfRklYVVBfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZml4dXApKQorIAl9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworaW5kZXggMmNmMGIyNS4uZjE1ZWFmMyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworQEAgLTUwLDcgKzUwLDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK2luZGV4IDU4NDY3YzIuLjZjNDhmNDAgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK0BAIC0zMiw3ICszMiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcworaW5kZXggMTk4MDUwOC4uNTVkZDRlMSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKK0BAIC00Niw3ICs0Niw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KKy0tIAorMi40LjYKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3RfMjAxNS4wNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0NmMzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB1LWJvb3QuaW5jCisKK0RFUEVORFMgKz0gImR0Yy1uYXRpdmUiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoIgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgS0NGTEFHUz0tZmdudTg5LWlubGluZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTQ0YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiSW5pdHNjcmlwdCBmb3IgZW5hYmxpbmcgVVNCIGdhZGdldCBFdGhlcm5ldCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vQ09QWUlORy5HUEw7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmaWxlOi8vdXNiLWdldGhlciBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIHVzYi1nZXRoZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgYWxsYXJjaAorCitJTklUU0NSSVBUX05BTUUgPSAidXNiLWdldGhlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvQ09QWUlORy5HUEwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTE5MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvdXNiLWdldGhlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvdXNiLWdldGhlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODBhMGJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC91c2ItZ2V0aGVyCkBAIC0wLDAgKzEsMjMgQEAKKyMhIC9iaW4vc2gKKyMKKyMgdXNiLWV0aGVyIAlTdGFydCB1cCB0aGUgZ2FkZ2V0IHVzYiBldGhlcm5ldCBpbnRlcmZhY2UuCisjCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0fCIiKQorCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiSW5pdGlhbGl6aW5nIGdfZXRoZXIgZ2FkZ2V0Li4uIgorCQltb2Rwcm9iZSBnX2V0aGVyCisJCWlmdXAgdXNiMAorCQk7OworCXN0b3ApCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJEaXNhYmxpbmcgZ19ldGhlci4uLiIKKwkJaWZkb3duIHVzYjAKKwkJcm1tb2QgZ19ldGhlcgorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiB1c2ItZXRoZXIge3N0YXJ0fHN0b3B9IiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzLTAwOC9pY29udi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1NTU2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRldGVjdGluZyBpY29udiBzdXBwb3J0IHVzaW5nIGF1dG90b29scwordWNsaWJjIGRvZXMgbm90IGhhdmUgaWNvbnYgaW1wbGVtZW50YXRpb24gaW5zaWRlIGxpYmMgbGlrZSBnbGliYywgdGhlcmVmb3JlCit0aGUgZXhpc3RpbmcgY2hlY2tzIHdlcmUgbm90IHN1ZmZpY2llbnQsIGl0IHdvcmtlZCBmb3IgZ2xpYmMgYnV0IG5vdCBmb3IKK3VjbGliYy4gVGhlIG5ldyBwYXRjaCBwb3J0YWJseSBkZXRlY3RzIHRoZSBpY29udiBzdXBwb3J0IGFuZCBhZGRzIHRoZQorbGliaWNvbnYgdG8gbGlua2VyIGNtZGxpbmUKKworVGhpcyBwYXRjaCBzaG91bGQgYmUgc3VibWl0dGVkIHVwc3RyZWFtIHRvbworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHVzYnV0aWxzLTAwOC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1c2J1dGlscy0wMDgub3JpZy9jb25maWd1cmUuYWMKKysrKyB1c2J1dGlscy0wMDgvY29uZmlndXJlLmFjCitAQCAtMTAsNyArMTAsOSBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhbYnl0ZXN3YXAuaF0pCistQUNfQ0hFQ0tfRlVOQ1MoW25sX2xhbmdpbmZvIGljb252XSkKKysKKytBTV9HTlVfR0VUVEVYVAorK0FNX0lDT05WCisgCisgUEtHX0NIRUNLX01PRFVMRVMoTElCVVNCLCBsaWJ1c2ItMS4wID49IDEuMC4wKQorIAorSW5kZXg6IHVzYnV0aWxzLTAwOC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwOC5vcmlnL01ha2VmaWxlLmFtCisrKysgdXNidXRpbHMtMDA4L01ha2VmaWxlLmFtCitAQCAtMjksNyArMjksOCBAQCBsc3VzYl9DUFBGTEFHUyA9IFwKKyAKKyBsc3VzYl9MREFERCA9IFwKKyAJJChMSUJVU0JfTElCUykgXAorLQkkKFVERVZfTElCUykKKysJJChVREVWX0xJQlMpIFwKKysJJChMSUJJQ09OVikKKyAKKyBtYW5fTUFOUyA9IFwKKyAJbHN1c2IuOAlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZmRjNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGaXggTlVMTCBwb2ludGVyIGNyYXNoLgorCitCZWZvcmUgdXNlIHVzYmJ1c2xpc3QsIHdlIHNob3VsZCBjaGVjayBpZiBpdCBpcyB2YWxpZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBsc3VzYi10LmMgfCAgICA0ICsrKysKKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xzdXNiLXQuYyBiL2xzdXNiLXQuYworaW5kZXggZjYwNDE1NS4uNTgzYTQ2YSAxMDA2NDQKKy0tLSBhL2xzdXNiLXQuYworKysrIGIvbHN1c2ItdC5jCitAQCAtNjQzLDYgKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBzb3J0X2J1c3Nlcyh2b2lkKQorIAkvKiBuZWVkIHRvIHJldmVyc2Ugc29ydCBidXMgbnVtYmVycyAqLworIAlzdHJ1Y3QgdXNiYnVzbm9kZSAqdCwgKnAsICoqcHA7CisgCWludCBzd2FwcGVkOworKworKwlpZiAoIXVzYmJ1c2xpc3QpCisrCQlyZXR1cm47CisrCisgCWRvIHsKKyAJCXAgPSB1c2JidXNsaXN0OworIAkJcHAgPSAmdXNiYnVzbGlzdDsKKy0tIAorMS43LjQuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvaWNvbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvaWNvbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1NzMzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9pY29udi5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIGljb252IHN1cHBvcnQgdXNpbmcgYXV0b3Rvb2xzCit1Y2xpYmMgZG9lcyBub3QgaGF2ZSBpY29udiBpbXBsZW1lbnRhdGlvbiBpbnNpZGUgbGliYyBsaWtlIGdsaWJjLCB0aGVyZWZvcmUKK3RoZSBleGlzdGluZyBjaGVja3Mgd2VyZSBub3Qgc3VmZmljaWVudCwgaXQgd29ya2VkIGZvciBnbGliYyBidXQgbm90IGZvcgordWNsaWJjLiBUaGUgbmV3IHBhdGNoIHBvcnRhYmx5IGRldGVjdHMgdGhlIGljb252IHN1cHBvcnQgYW5kIGFkZHMgdGhlCitsaWJpY29udiB0byBsaW5rZXIgY21kbGluZQorCitUaGlzIHBhdGNoIHNob3VsZCBiZSBzdWJtaXR0ZWQgdXBzdHJlYW0gdG9vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogdXNidXRpbHMtMDA3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHVzYnV0aWxzLTAwNy9jb25maWd1cmUuYWMKK0BAIC0xMCw3ICsxMCw5IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX1NZU19MQVJHRUZJTEUKKyAKKyBBQ19DSEVDS19IRUFERVJTKFtieXRlc3dhcC5oXSkKKy1BQ19DSEVDS19GVU5DUyhbbmxfbGFuZ2luZm8gaWNvbnZdKQorKworK0FNX0dOVV9HRVRURVhUCisrQU1fSUNPTlYKKyAKKyBBQ19BUkdfRU5BQkxFKHpsaWIsCisgCUFTX0hFTFBfU1RSSU5HKC0tZGlzYWJsZS16bGliLGRpc2FibGUgc3VwcG9ydCBmb3IgemxpYikpCitJbmRleDogdXNidXRpbHMtMDA3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXNidXRpbHMtMDA3Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyB1c2J1dGlscy0wMDcvTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGxzdXNiX0NQUEZMQUdTID0gXAorIAktRERBVEFESVI9XCIkKGRhdGFkaXIpXCIKKyAKKyBsc3VzYl9MREFERCA9IFwKKy0JJChMSUJVU0JfTElCUykKKysJJChMSUJVU0JfTElCUykgJChMSUJJQ09OVikKKyAKKyBpZiBIQVZFX1pMSUIKKyBsc3VzYl9DUFBGTEFHUyArPSAtREhBVkVfTElCWgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiMjQxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzMzNkNWZiYmMwMzQ4MWYxYWEyMjJiZDY4YzI2MDlkYjE2OGFlM2UwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI2IEp1bCAyMDEyIDEwOjM3OjMyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzYi1kZXZpY2VzOiBhdm9pZCBkZXBlbmRlbmN5IG9uIGJhc2gKKworQnkgdmlydHVlIG9mIGhhdmluZyAjIS9iaW4vYmFzaCB0aGlzIHNjcmlwdCBkZWNsYXJlZCB0aGF0IGl0IHJlcXVpcmVzCitiYXNoLCBob3dldmVyIG1hbnVhbCBleGFtaW5hdGlvbiwgY2hlY2tiYXNoaXNtcyBhbmQgdGVzdHMgd2l0aCBkYXNoCithbmQgYnVzeWJveCBzaG93IHRoYXQgaXQgZG9lc24ndCBjb250YWluIGFueSBiYXNoaXNtcywgc28gY2hhbmdlIHRoZQoraGVhZGVyIHRvIGF2b2lkIHRoZSBkZXBlbmRlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyB1c2ItZGV2aWNlcyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3VzYi1kZXZpY2VzIGIvdXNiLWRldmljZXMKK2luZGV4IGIyMDUyZTIuLjE0YTUzNTggMTAwNzU1CistLS0gYS91c2ItZGV2aWNlcworKysrIGIvdXNiLWRldmljZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBDb3B5cmlnaHQ6IDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAjICAgICAgICAgICAgMjAwOSBSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2IyYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiSG9zdCBzaWRlIFVTQiBjb25zb2xlIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIkNvbnRhaW5zIHRoZSBsc3VzYiB1dGlsaXR5IGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgVVNCIGJ1cy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmciCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAibGlidXNiIHpsaWIgdmlydHVhbC9saWJpY29udiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3VzYi91c2J1dGlscy91c2J1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaWNvbnYucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJlNmM0MjI5NGJlNWM5NDBmMjA4MTkwZDM0NzlkNTBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2NWMyMzRjYWRmN2M4MWI2YjE1NjdjNDQwZTNiOWIzMWI0NGY1MWMyN2RmM2U0NTc0MWI4ODg0OGQ4YjM3ZDMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2Ugb25seSBuZWVkIHRoZSBjb21wcmVzc2VkIGNvcHksIHJlbW92ZSB0aGUgdW5jb21wcmVzc2VkIHZlcnNpb24KKwlybSAtZiAke0R9JHtkYXRhZGlyfS91c2IuaWRzCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1pZHMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnIgorRklMRVNfJHtQTn0taWRzID0gIiR7ZGF0YWRpcn0vdXNiKiIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0taWRzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYyZDhkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJIb3N0IHNpZGUgVVNCIGNvbnNvbGUgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIGxzdXNiIHV0aWxpdHkgZm9yIGluc3BlY3RpbmcgdGhlIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBVU0IgYnVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtdXNiLm9yZyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJsaWJ1c2IgemxpYiB2aXJ0dWFsL2xpYmljb252IHN5c3RlbWQiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy91c2IvdXNidXRpbHMvdXNidXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYjIwMTQ4YzJlNzg0NTc3ZTkyNGE3YjRjNTYwYzhmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZDVmMTZjMjk2MWRmMzdlMjJlNDkyYzczNmEzZTE2MmE4ZmRlMjQ0ODBmMjNhNDBkODVmNzlhZjgwZDNmZTk1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgVGhpcyB2ZXJzaW9uIG9mIHVzYnV0aWxzIHJlbGllcyBvbiB0aGUgdWRldiBmcm9tIHN5c3RlbWQsIHNvIHVubGVzcyAKKyMgd2UgY2FuIGRlY291cGxlIHVkZXYgZnJvbSBzeXN0ZW0sIHdlIHJlcXVpcmUgc3lzdGVtZCBmb3Igbm93LgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9wa2djb25maWciCisKK1JERVBFTkRTXyR7UE59ID0gImxpYnVkZXYiCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJsaWJib29zdC1zeXN0ZW0gbGliYm9vc3QtdGhyZWFkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL1VwZGF0ZS14ODZlbXUtZnJvbS1YLm9yZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDllMmEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2gKQEAgLTAsMCArMSwyMTc2NiBAQAorRnJvbSAxYTQxMGFlNThmMjhlZWFiMzJmYTg3NjI2Y2ZkNWE2NjNiYTMzYzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQmVybmhhcmQgV2FsbGUgPGJlcm5oYXJkQGJ3YWxsZS5kZT4KK0RhdGU6IFR1ZSwgMTMgTWF5IDIwMTQgMjM6NDA6NTYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFVwZGF0ZSB4ODZlbXUgZnJvbSBYLm9yZworCitUaGlzIGNvbW1pdCB1cGRhdGVzIHRoZSB4ODZlbXUgY29weSBmcm9tIFgub3JnIHRhcmJhbGwKKyhmdHA6Ly9taXJyb3IuY3NjbHViLnV3YXRlcmxvby5jYS94Lm9yZy9jdXJyZW50L3NyYy94c2VydmVyL3hvcmctc2VydmVyLTEuMTIuMi50YXIuYnoyKS4KKworVGhpcyBmaXhlcyBhIGNvbXBhdGliaWxpdHkgaXNzdWUgYmV0d2VlbiB2ODZkIGFuZCBTZWFCSU9TIFZHQSBCSU9TIHdoZXJlCit0aGUgbGVhbCBpbnN0cnVjdGlvbiBpcyBub3QgZGVjb2RlZCBwcm9wZXJseS4gUmVhZCB0aGUKK2h0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuZW11bGF0b3JzLnFlbXUvMjcxODA2IHRocmVhZCBmb3IgbW9yZQorZGV0YWlscy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBXYWxsZSA8YmVybmhhcmRAYndhbGxlLmRlPgorLS0tCisgbGlicy94ODZlbXUvTElDRU5TRSAgICAgICAgICAgICAgIHwgICAxNyAtCisgbGlicy94ODZlbXUvZGVidWcuYyAgICAgICAgICAgICAgIHwgIDUwOSArKystLS0KKyBsaWJzL3g4NmVtdS9kZWNvZGUuYyAgICAgICAgICAgICAgfCAxMDY5ICsrKysrKy0tLS0tLQorIGxpYnMveDg2ZW11L2ZwdS5jICAgICAgICAgICAgICAgICB8ICA0NjMgKysrLS0tCisgbGlicy94ODZlbXUvb3BzLmMgICAgICAgICAgICAgICAgIHwgMjk0MCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9vcHMyLmMgICAgICAgICAgICAgICAgfCAxOTI5ICsrKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9wcmltX29wcy5jICAgICAgICAgICAgfCAzMjE5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9zeXMuYyAgICAgICAgICAgICAgICAgfCAgNTgzICsrKy0tLS0KKyBsaWJzL3g4NmVtdS92YWxpZGF0ZS5jICAgICAgICAgICAgfCAgIDUyICstCisgbGlicy94ODZlbXUveDg2ZW11LmggICAgICAgICAgICAgIHwgICA3NSArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oICAgICAgICB8ICAxNjMgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmggICAgICAgfCAgIDU3ICstCisgbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oICAgICAgICAgIHwgICAyMyArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oICAgICB8ICAgNDQgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvb3BzLmggICAgICAgICAgfCAgICA2ICstCisgbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggICAgIHwgIDI1MSArKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCAgICAgfCAgMTg4ICstLQorIGxpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaCB8ICAgNzcgKworIGxpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggICAgICAgICB8ICAxMDEgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCAgICAgICAgfCAgIDUwICstCisgbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaCAgICAgIHwgICAzNCArLQorIDIxIGZpbGVzIGNoYW5nZWQsIDYzNzkgaW5zZXJ0aW9ucygrKSwgNTQ3MSBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgbGlicy94ODZlbXUvTElDRU5TRQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKKworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L0xJQ0VOU0UgYi9saWJzL3g4NmVtdS9MSUNFTlNFCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGEzZWRlNGEuLjAwMDAwMDAKKy0tLSBhL2xpYnMveDg2ZW11L0xJQ0VOU0UKKysrKyAvZGV2L251bGwKK0BAIC0xLDE3ICswLDAgQEAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZSBpbmZvcm1hdGlvbgorLSAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCistCistVGhlIHg4NmVtdSBsaWJyYXJ5IGlzIHVuZGVyIGEgQlNEIHN0eWxlIGxpY2Vuc2UsIGNvbWFwdGlibGUKKy13aXRoIHRoZSBYRnJlZTg2IGFuZCBYIGxpY2Vuc2VzIHVzZWQgYnkgWEZyZWU4Ni4gVGhlCistb3JpZ2luYWwgeDg2ZW11IGxpYnJhcmllcyB3ZXJlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy1MaWNlbnNlLiBEdWUgdG8gbGljZW5zZSBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIHRoZSBHUEwKKy1hbmQgdGhlIFhGcmVlODYgbGljZW5zZSwgdGhlIG9yaWdpbmFsIGF1dGhvcnMgb2YgdGhlIGNvZGUKKy1kZWNpZGVkIHRvIGFsbG93IGEgbGljZW5zZSBjaGFuZ2UuIElmIHlvdSBoYXZlIHN1Ym1pdHRlZAorLWNvZGUgdG8gdGhlIG9yaWdpbmFsIHg4NmVtdSBwcm9qZWN0LCBhbmQgeW91IGRvbid0IGFncmVlCistd2l0aCB0aGUgbGljZW5zZSBjaGFuZ2UsIHBsZWFzZSBjb250YWN0IHVzIGFuZCBsZXQgeW91Cista25vdy4gWW91ciBjb2RlIHdpbGwgYmUgcmVtb3ZlZCB0byBjb21wbHkgd2l0aCB5b3VyIHdpc2hlcy4KKy0KKy1JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMsIHBsZWFzZSBzZW5kIGVtYWlsIHRvCisteDg2ZW11QGxpbnV4bGFicy5jb20gb3IgS2VuZGFsbEJAc2NpdGVjaHNvZnQuY29tIGZvcgorLWNsYXJpZmljYXRpb24uCistCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZGVidWcuYyBiL2xpYnMveDg2ZW11L2RlYnVnLmMKK2luZGV4IDZmZDdmMTEuLjFhOGQxZDYgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWJ1Zy5jCisrKysgYi9saWJzL3g4NmVtdS9kZWJ1Zy5jCitAQCAtMzgsNiArMzgsOCBAQAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisgI2luY2x1ZGUgIng4NmVtdS94ODZlbXVpLmgiCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTQ3LDQ2ICs0OSw1MSBAQAorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyB2b2lkICAgICBwcmludF9lbmNvZGVkX2J5dGVzICh1MTYgcywgdTE2IG8pOworLXN0YXRpYyB2b2lkICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKTsKKy1zdGF0aWMgaW50ICAgICAgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKTsKKy0gIAorK3N0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKTsKKytzdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKHZvaWQpOworK3N0YXRpYyBpbnQgcGFyc2VfbGluZShjaGFyICpzLCBpbnQgKnBzLCBpbnQgKm4pOworKworIC8qIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIGRlYnVnJ3Mgb3V0cHV0LiAqLworLXZvaWQgWDg2RU1VX3RyYWNlX3JlZ3MgKHZvaWQpCisrdm9pZAorK1g4NkVNVV90cmFjZV9yZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfcmVncygpOworKyAgICBpZiAoREVCVUdfVFJBQ0UoKSkgeworKyAgICAgICAgeDg2ZW11X2R1bXBfcmVncygpOworICAgICB9CistCWlmIChERUJVR19ERUNPREUoKSAmJiAhIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkpIHsKKy0JCXByaW50aygiJTA0eDolMDR4ICIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKy0JCXByaW50X2VuY29kZWRfYnl0ZXMoIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CistCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIGlmIChERUJVR19ERUNPREUoKSAmJiAhREVCVUdfREVDT0RFX05PUFJJTlQoKSkgeworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKyAgICAgfQorIH0KKyAKKy12b2lkIFg4NkVNVV90cmFjZV94cmVncyAodm9pZCkKKyt2b2lkCisrWDg2RU1VX3RyYWNlX3hyZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfeHJlZ3MoKTsKKysgICAgaWYgKERFQlVHX1RSQUNFKCkpIHsKKysgICAgICAgIHg4NmVtdV9kdW1wX3hyZWdzKCk7CisgICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSAodm9pZCkKKyt2b2lkCisreDg2ZW11X2p1c3RfZGlzYXNzZW1ibGUodm9pZCkKKyB7CisgICAgIC8qCisgICAgICAqIFRoaXMgcm91dGluZSBjYWxsZWQgaWYgdGhlIGZsYWcgREVCVUdfRElTQVNTRU1CTEUgaXMgc2V0IGtpbmQKKyAgICAgICogb2YgYSBoYWNrIQorICAgICAgKi8KKy0JcHJpbnRrKCIlMDR4OiUwNHggIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9lbmNvZGVkX2J5dGVzKCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4ICIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKytzdGF0aWMgdm9pZAorK2Rpc2Fzc2VtYmxlX2ZvcndhcmQodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgeworLQlYODZFTVVfc3lzRW52IHRyZWdzOworLQlpbnQgaTsKKy0JdTggb3AxOworKyAgICBYODZFTVVfc3lzRW52IHRyZWdzOworKyAgICBpbnQgaTsKKysgICAgdTggb3AxOworKworICAgICAvKgorICAgICAgKiBoYWNrLCBoYWNrLCBoYWNrLiAgV2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGV4YWN0IG1hY2hpbmVyeSBzZXQgdXAKKyAgICAgICogZm9yIGV4ZWN1dGlvbiwgZXhjZXB0IHRoYXQgbm93IHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgc3RhdGUKK0BAIC0xMTEsMTcgKzExOCwxNyBAQCBzdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKyAgICAgICogVGhpcyB3YXMgZG9uZSBmb3IgYW4gZW50aXJlbHkgZGlmZmVyZW50IHJlYXNvbiwgYnV0IG1ha2VzIGEKKyAgICAgICogbmljZSB3YXkgdG8gZ2V0IHRoZSBzeXN0ZW0gdG8gaGVscCBkZWJ1ZyBjb2Rlcy4KKyAgICAgICovCistCXRyZWdzID0gTTsKKysgICAgdHJlZ3MgPSBNOworICAgICB0cmVncy54ODYuUl9JUCA9IG9mZjsKKyAgICAgdHJlZ3MueDg2LlJfQ1MgPSBzZWc7CistICAgIAorKworICAgICAvKiByZXNldCB0aGUgZGVjb2RpbmcgYnVmZmVycyAqLworICAgICB0cmVncy54ODYuZW5jX3N0cl9wb3MgPSAwOworICAgICB0cmVncy54ODYuZW5jX3BvcyA9IDA7CistICAgIAorKworICAgICAvKiB0dXJuIG9uIHRoZSAiZGlzYXNzZW1ibGUgb25seSwgbm8gZXhlY3V0ZSIgZmxhZyAqLworICAgICB0cmVncy54ODYuZGVidWcgfD0gREVCVUdfRElTQVNTRU1CTEVfRjsKKy0gCisrCisgICAgIC8qIERVTVAgTkVYVCBuIGluc3RydWN0aW9ucyB0byBzY3JlZW4gaW4gc3RyYWlnaHRfbGluZSBmYXNoaW9uICovCisgICAgIC8qCisgICAgICAqIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVndWxhciBpbnN0cnVjdGlvbiBmZXRjaCBzdHJlYW0sIGV4Y2VwdAorQEAgLTEzMCwyOTkgKzEzNywzNTkgQEAgc3RhdGljIHZvaWQgZGlzYXNzZW1ibGVfZm9yd2FyZCAodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgICAgICAqIHRoZSBpbnN0cnVjdGlvbi4gIFhYWCAtLS0gQ0hFQ0sgVEhBVCBNRU0gSVMgTk9UIEFGRkVDVEVEISEhCisgICAgICAqIE5vdGUgdGhlIHVzZSBvZiBhIGNvcHkgb2YgdGhlIHJlZ2lzdGVyIHN0cnVjdHVyZS4uLgorICAgICAgKi8KKy0gICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7CistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1M8PDQpICsgKE0ueDg2LlJfSVArKykpOworLQkJKHg4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICh4ODZlbXVfb3B0YWJbb3AxXSkgKG9wMSk7CisgICAgIH0KKyAgICAgLyogZW5kIG1ham9yIGhhY2sgbW9kZS4gKi8KKyB9CisgCistdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpCisgeworICAgICAvKiBOVUxMIGFzIG9mIG5vdyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9jaGVja19zcF9hY2Nlc3Modm9pZCkKKyB7CisgfQorIAorLXZvaWQgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MgKHUzMiBkdW1teSkKKyt2b2lkCisreDg2ZW11X2NoZWNrX21lbV9hY2Nlc3ModTMyIGR1bW15KQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyAodWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3ModWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbiAoaW50IHgpCisrdm9pZAorK3g4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCkKKyB7CistCU0ueDg2LmVuY19wb3MgKz0geDsKKysgICAgTS54ODYuZW5jX3BvcyArPSB4OworIH0KKyAKKy12b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmIChjaGFyICp4KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50Zihjb25zdCBjaGFyICp4KQorIHsKKy0Jc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZitNLng4Ni5lbmNfc3RyX3BvcywiJXMiLHgpOworLQlNLng4Ni5lbmNfc3RyX3BvcyArPSBzdHJsZW4oeCk7CisrICAgIHNwcmludGYoTS54ODYuZGVjb2RlZF9idWYgKyBNLng4Ni5lbmNfc3RyX3BvcywgIiVzIiwgeCk7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zICs9IHN0cmxlbih4KTsKKyB9CisgCistdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIgKGNoYXIgKngsIGludCB5KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpCisgeworLQljaGFyIHRlbXBbMTAwXTsKKy0Jc3ByaW50Zih0ZW1wLHgseSk7CistCXNwcmludGYoTS54ODYuZGVjb2RlZF9idWYrTS54ODYuZW5jX3N0cl9wb3MsIiVzIix0ZW1wKTsKKy0JTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworKyAgICBjaGFyIHRlbXBbMTAwXTsKKysKKysgICAgc25wcmludGYodGVtcCwgc2l6ZW9mKHRlbXApLCB4LCB5KTsKKysgICAgc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZiArIE0ueDg2LmVuY19zdHJfcG9zLCAiJXMiLCB0ZW1wKTsKKysgICAgTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworIH0KKyAKKy12b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9lbmRfaW5zdHIodm9pZCkKKyB7CistCU0ueDg2LmVuY19zdHJfcG9zID0gMDsKKy0JTS54ODYuZW5jX3BvcyA9IDA7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zID0gMDsKKysgICAgTS54ODYuZW5jX3BvcyA9IDA7CisgfQorIAorLXN0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXMgKHUxNiBzLCB1MTYgbykKKytzdGF0aWMgdm9pZAorK3ByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKQorIHsKKyAgICAgaW50IGk7CisgICAgIGNoYXIgYnVmMVs2NF07CistCWZvciAoaT0wOyBpPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKy0JCXNwcmludGYoYnVmMSsyKmksIiUwMngiLCBmZXRjaF9kYXRhX2J5dGVfYWJzKHMsbytpKSk7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKysgICAgICAgIHNwcmludGYoYnVmMSArIDIgKiBpLCAiJTAyeCIsIGZldGNoX2RhdGFfYnl0ZV9hYnMocywgbyArIGkpKTsKKyAgICAgfQorLQlwcmludGsoIiUtMjBzIixidWYxKTsKKysgICAgcHJpbnRrKCIlLTIwcyIsIGJ1ZjEpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKQorK3N0YXRpYyB2b2lkCisrcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbih2b2lkKQorIHsKKy0JcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKysgICAgcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKyB9CisgCistdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdikKKyt2b2lkCisreDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdikKKyB7CistCXUxNiBzZWcsb2ZmOworKyAgICB1MTYgc2VnLCBvZmY7CisgCistCWlmIChpdiA+IDI1NikgcmV0dXJuOworLQlzZWcgICA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCxpdio0KTsKKy0Jb2ZmICAgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKDAsaXYqNCsyKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworKyAgICBpZiAoaXYgPiAyNTYpCisrICAgICAgICByZXR1cm47CisrICAgIHNlZyA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCwgaXYgKiA0KTsKKysgICAgb2ZmID0gZmV0Y2hfZGF0YV93b3JkX2FicygwLCBpdiAqIDQgKyAyKTsKKysgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworIH0KKyAKKy12b2lkIFg4NkVNVV9kdW1wX21lbW9yeSAodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCkKKyt2b2lkCisrWDg2RU1VX2R1bXBfbWVtb3J5KHUxNiBzZWcsIHUxNiBvZmYsIHUzMiBhbXQpCisgeworLQl1MzIgc3RhcnQgPSBvZmYgJiAweGZmZmZmZmYwOworLQl1MzIgZW5kICA9IChvZmYrMTYpICYgMHhmZmZmZmZmMDsKKy0JdTMyIGk7CistCXUzMiBjdXJyZW50OworLQorLQljdXJyZW50ID0gc3RhcnQ7CistCXdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CistCQlwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKy0JCWZvciAoaT1zdGFydDsgaTwgb2ZmOyBpKyspCistCQkgIHByaW50aygiICAgIik7CistCQlmb3IgKCAgICAgICA7IGk8IGVuZDsgaSsrKQorLQkJICBwcmludGsoIiUwMnggIiwgZmV0Y2hfZGF0YV9ieXRlX2FicyhzZWcsaSkpOworLQkJcHJpbnRrKCJcbiIpOworLQkJc3RhcnQgPSBlbmQ7CistCQllbmQgPSBzdGFydCArIDE2OworLQl9CisrICAgIHUzMiBzdGFydCA9IG9mZiAmIDB4ZmZmZmZmZjA7CisrICAgIHUzMiBlbmQgPSAob2ZmICsgMTYpICYgMHhmZmZmZmZmMDsKKysgICAgdTMyIGk7CisrICAgIHUzMiBjdXJyZW50OworKworKyAgICBjdXJyZW50ID0gc3RhcnQ7CisrICAgIHdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CisrICAgICAgICBwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKysgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgb2ZmOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIgICAiKTsKKysgICAgICAgIGZvciAoOyBpIDwgZW5kOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIGZldGNoX2RhdGFfYnl0ZV9hYnMoc2VnLCBpKSk7CisrICAgICAgICBwcmludGsoIlxuIik7CisrICAgICAgICBzdGFydCA9IGVuZDsKKysgICAgICAgIGVuZCA9IHN0YXJ0ICsgMTY7CisrICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9zaW5nbGVfc3RlcCh2b2lkKQorIHsKKyAgICAgY2hhciBzWzEwMjRdOworICAgICBpbnQgcHNbMTBdOworICAgICBpbnQgbnRvazsKKyAgICAgaW50IGNtZDsKKyAgICAgaW50IGRvbmU7CistCQlpbnQgc2VnbWVudDsKKysgICAgaW50IHNlZ21lbnQ7CisgICAgIGludCBvZmZzZXQ7CisgICAgIHN0YXRpYyBpbnQgYnJlYWtwb2ludDsKKyAgICAgc3RhdGljIGludCBub0RlY29kZSA9IDE7CistICAgIAorKworICAgICBjaGFyICpwOworIAorLQkJaWYgKERFQlVHX0JSRUFLKCkpIHsKKy0JCQkJaWYgKE0ueDg2LnNhdmVkX2lwICE9IGJyZWFrcG9pbnQpIHsKKy0JCQkJCQlyZXR1cm47CistCQkJCX0gZWxzZSB7CistIAkgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQkJCQkJTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKy0JCQkJCQlNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKy0JCQkJCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICgpOworLQkJCQkJCVg4NkVNVV90cmFjZV9yZWdzKCk7CistCQkJCX0KKy0JCX0KKy0gICAgZG9uZT0wOworLQlvZmZzZXQgPSBNLng4Ni5zYXZlZF9pcDsKKysgICAgaWYgKERFQlVHX0JSRUFLKCkpIHsKKysgICAgICAgIGlmIChNLng4Ni5zYXZlZF9pcCAhPSBicmVha3BvaW50KSB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKysgICAgICAgICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBkb25lID0gMDsKKysgICAgb2Zmc2V0ID0gTS54ODYuc2F2ZWRfaXA7CisgICAgIHdoaWxlICghZG9uZSkgeworICAgICAgICAgcHJpbnRrKCItIik7CisgICAgICAgICBwID0gZmdldHMocywgMTAyMywgc3RkaW4pOworICAgICAgICAgY21kID0gcGFyc2VfbGluZShzLCBwcywgJm50b2spOworLSAgICAgICAgc3dpdGNoKGNtZCkgeworLSAgICAgICAgICBjYXNlICd1JzoKKy0JCQlkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCh1MTYpb2Zmc2V0LDEwKTsKKysgICAgICAgIHN3aXRjaCAoY21kKSB7CisrICAgICAgICBjYXNlICd1JzoKKysgICAgICAgICAgICBkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCAodTE2KSBvZmZzZXQsIDEwKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZCc6ICAKKy0JCQkJCQkJaWYgKG50b2sgPT0gMikgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1sxXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgaWYgKG50b2sgPT0gMykgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBwc1sxXTsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1syXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9CisrICAgICAgICBjYXNlICdkJzoKKysgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisrICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHNbMV07CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChudG9rID09IDMpIHsKKysgICAgICAgICAgICAgICAgc2VnbWVudCA9IHBzWzFdOworKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwc1syXTsKKysgICAgICAgICAgICAgICAgWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsICh1MTYpIG9mZnNldCwgMTYpOworKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICBzZWdtZW50ID0gTS54ODYuc2F2ZWRfY3M7CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnYyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfVFJBQ0VDQUxMX0Y7CisrICAgICAgICBjYXNlICdjJzoKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyBePSBERUJVR19UUkFDRUNBTExfRjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAncyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworKyAgICAgICAgY2FzZSAncyc6CisrICAgICAgICAgICAgTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdyJzoKKy0JCQlYODZFTVVfdHJhY2VfcmVncygpOworKyAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAneCc6CistCQkJWDg2RU1VX3RyYWNlX3hyZWdzKCk7CisrICAgICAgICBjYXNlICd4JzoKKysgICAgICAgICAgICBYODZFTVVfdHJhY2VfeHJlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZyc6CisrICAgICAgICBjYXNlICdnJzoKKyAgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQgPSBwc1sxXTsKKy0JCWlmIChub0RlY29kZSkgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQl9IGVsc2UgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworLQkJfQorLQkJTS54ODYuZGVidWcgJj0gfkRFQlVHX1RSQUNFX0Y7CistCQlNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworLQkJZG9uZSA9IDE7CisrICAgICAgICAgICAgICAgIGlmIChub0RlY29kZSkgeworKyAgICAgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfREVDT0RFX05PUFJJTlRfRjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19UUkFDRV9GOworKyAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworKyAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3EnOgorLSAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19FWElUOworLSAgICAgICAgICByZXR1cm47CistCSAgY2FzZSAnUCc6CistCSAgICAgIG5vRGVjb2RlID0gKG5vRGVjb2RlKT8wOjE7CistCSAgICAgIHByaW50aygiVG9nZ2xlZCBkZWNvZGluZyB0byAlc1xuIiwobm9EZWNvZGUpPyJGQUxTRSI6IlRSVUUiKTsKKy0JICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3QnOgorLQkgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgJ3EnOgorKyAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0VYSVQ7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgY2FzZSAnUCc6CisrICAgICAgICAgICAgbm9EZWNvZGUgPSAobm9EZWNvZGUpID8gMCA6IDE7CisrICAgICAgICAgICAgcHJpbnRrKCJUb2dnbGVkIGRlY29kaW5nIHRvICVzXG4iLCAobm9EZWNvZGUpID8gIkZBTFNFIiA6ICJUUlVFIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlICd0JzoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gICAKKysgICAgICAgIH0KKyAgICAgfQorIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29uKHZvaWQpCisraW50CisrWDg2RU1VX3RyYWNlX29uKHZvaWQpCisgeworLQlyZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworKyAgICByZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29mZih2b2lkKQorK2ludAorK1g4NkVNVV90cmFjZV9vZmYodm9pZCkKKyB7CistCXJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisrICAgIHJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisgfQorIAorLXN0YXRpYyBpbnQgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKQorK3N0YXRpYyBpbnQKKytwYXJzZV9saW5lKGNoYXIgKnMsIGludCAqcHMsIGludCAqbikKKyB7CisgICAgIGludCBjbWQ7CisgCisgICAgICpuID0gMDsKKy0gICAgd2hpbGUoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpIHMrKzsKKysgICAgd2hpbGUgKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKQorKyAgICAgICAgcysrOworICAgICBwc1sqbl0gPSAqczsKKyAgICAgc3dpdGNoICgqcykgeworLSAgICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXG4nOgorICAgICAgICAgKm4gKz0gMTsKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBjbWQgPSAqczsKKyAgICAgICAgICpuICs9IDE7CisgICAgIH0KKyAKKy0Jd2hpbGUgKDEpIHsKKy0JCXdoaWxlICgqcyAhPSAnICcgJiYgKnMgIT0gJ1x0JyAmJiAqcyAhPSAnXG4nKSAgcysrOworLQkJCistCQlpZiAoKnMgPT0gJ1xuJykKKy0JCQlyZXR1cm4gY21kOworLQkJCistCQl3aGlsZSgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykgcysrOworLQkJCistCQlzc2NhbmYocywiJXgiLCZwc1sqbl0pOworLQkJKm4gKz0gMTsKKy0JfQorKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgd2hpbGUgKCpzICE9ICcgJyAmJiAqcyAhPSAnXHQnICYmICpzICE9ICdcbicpCisrICAgICAgICAgICAgcysrOworKworKyAgICAgICAgaWYgKCpzID09ICdcbicpCisrICAgICAgICAgICAgcmV0dXJuIGNtZDsKKysKKysgICAgICAgIHdoaWxlICgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykKKysgICAgICAgICAgICBzKys7CisrCisrICAgICAgICBzc2NhbmYocywgIiV4IiwgJnBzWypuXSk7CisrICAgICAgICAqbiArPSAxOworKyAgICB9CisgfQorIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKy12b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9kdW1wX3JlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRBWD0lMDR4ICAiLCBNLng4Ni5SX0FYICk7CistCXByaW50aygiQlg9JTA0eCAgIiwgTS54ODYuUl9CWCApOworLQlwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1ggKTsKKy0JcHJpbnRrKCJEWD0lMDR4ICAiLCBNLng4Ni5SX0RYICk7CistCXByaW50aygiU1A9JTA0eCAgIiwgTS54ODYuUl9TUCApOworLQlwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlAgKTsKKy0JcHJpbnRrKCJTST0lMDR4ICAiLCBNLng4Ni5SX1NJICk7CistCXByaW50aygiREk9JTA0eFxuIiwgTS54ODYuUl9ESSApOworLQlwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyApOworLQlwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMgKTsKKy0JcHJpbnRrKCJTUz0lMDR4ICAiLCBNLng4Ni5SX1NTICk7CistCXByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyApOworLQlwcmludGsoIklQPSUwNHggICAiLCBNLng4Ni5SX0lQICk7CistCWlmIChBQ0NFU1NfRkxBRyhGX09GKSkgICAgcHJpbnRrKCJPViAiKTsgICAgIC8qIENIRUNLRUQuLi4gKi8KKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlYgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgcHJpbnRrKCJETiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiVVAgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0lGKSkgICAgcHJpbnRrKCJFSSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiREkgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1NGKSkgICAgcHJpbnRrKCJORyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUEwgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1pGKSkgICAgcHJpbnRrKCJaUiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlogIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0FGKSkgICAgcHJpbnRrKCJBQyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkEgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1BGKSkgICAgcHJpbnRrKCJQRSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUE8gIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgICAgcHJpbnRrKCJDWSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkMgIik7CistCXByaW50aygiXG4iKTsKKysgICAgcHJpbnRrKCJcdEFYPSUwNHggICIsIE0ueDg2LlJfQVgpOworKyAgICBwcmludGsoIkJYPSUwNHggICIsIE0ueDg2LlJfQlgpOworKyAgICBwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1gpOworKyAgICBwcmludGsoIkRYPSUwNHggICIsIE0ueDg2LlJfRFgpOworKyAgICBwcmludGsoIlNQPSUwNHggICIsIE0ueDg2LlJfU1ApOworKyAgICBwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlApOworKyAgICBwcmludGsoIlNJPSUwNHggICIsIE0ueDg2LlJfU0kpOworKyAgICBwcmludGsoIkRJPSUwNHhcbiIsIE0ueDg2LlJfREkpOworKyAgICBwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyk7CisrICAgIHByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyk7CisrICAgIHByaW50aygiU1M9JTA0eCAgIiwgTS54ODYuUl9TUyk7CisrICAgIHByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyk7CisrICAgIHByaW50aygiSVA9JTA0eCAgICIsIE0ueDg2LlJfSVApOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpCisrICAgICAgICBwcmludGsoIk9WICIpOyAgICAgICAgICAvKiBDSEVDS0VELi4uICovCisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlYgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkKKysgICAgICAgIHByaW50aygiRE4gIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiVVAgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0lGKSkKKysgICAgICAgIHByaW50aygiRUkgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiREkgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1NGKSkKKysgICAgICAgIHByaW50aygiTkcgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUEwgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKKysgICAgICAgIHByaW50aygiWlIgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlogIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0FGKSkKKysgICAgICAgIHByaW50aygiQUMgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkEgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKKysgICAgICAgIHByaW50aygiUEUgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUE8gIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHByaW50aygiQ1kgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkMgIik7CisrICAgIHByaW50aygiXG4iKTsKKyB9CisgCistdm9pZCB4ODZlbXVfZHVtcF94cmVncyAodm9pZCkKKyt2b2lkCisreDg2ZW11X2R1bXBfeHJlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRFQVg9JTA4eCAgIiwgTS54ODYuUl9FQVggKTsKKy0JcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlggKTsKKy0JcHJpbnRrKCJFQ1g9JTA4eCAgIiwgTS54ODYuUl9FQ1ggKTsKKy0JcHJpbnRrKCJFRFg9JTA4eCAgXG4iLCBNLng4Ni5SX0VEWCApOworLQlwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQICk7CistCXByaW50aygiRUJQPSUwOHggICIsIE0ueDg2LlJfRUJQICk7CistCXByaW50aygiRVNJPSUwOHggICIsIE0ueDg2LlJfRVNJICk7CistCXByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJICk7CistCXByaW50aygiXHREUz0lMDR4ICAiLCBNLng4Ni5SX0RTICk7CistCXByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyApOworLQlwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MgKTsKKy0JcHJpbnRrKCJDUz0lMDR4ICAiLCBNLng4Ni5SX0NTICk7CistCXByaW50aygiRUlQPSUwOHhcblx0IiwgTS54ODYuUl9FSVAgKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfT0YpKSAgICBwcmludGsoIk9WICIpOyAgICAgLyogQ0hFQ0tFRC4uLiAqLworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOViAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICBwcmludGsoIkROICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJVUCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfSUYpKSAgICBwcmludGsoIkVJICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJESSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfU0YpKSAgICBwcmludGsoIk5HICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfWkYpKSAgICBwcmludGsoIlpSICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOWiAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQUYpKSAgICBwcmludGsoIkFDICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfUEYpKSAgICBwcmludGsoIlBFICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTyAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSAgICBwcmludGsoIkNZICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQyAiKTsKKy0JcHJpbnRrKCJcbiIpOworKyAgICBwcmludGsoIlx0RUFYPSUwOHggICIsIE0ueDg2LlJfRUFYKTsKKysgICAgcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlgpOworKyAgICBwcmludGsoIkVDWD0lMDh4ICAiLCBNLng4Ni5SX0VDWCk7CisrICAgIHByaW50aygiRURYPSUwOHggIFxuIiwgTS54ODYuUl9FRFgpOworKyAgICBwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQKTsKKysgICAgcHJpbnRrKCJFQlA9JTA4eCAgIiwgTS54ODYuUl9FQlApOworKyAgICBwcmludGsoIkVTST0lMDh4ICAiLCBNLng4Ni5SX0VTSSk7CisrICAgIHByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJKTsKKysgICAgcHJpbnRrKCJcdERTPSUwNHggICIsIE0ueDg2LlJfRFMpOworKyAgICBwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMpOworKyAgICBwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MpOworKyAgICBwcmludGsoIkNTPSUwNHggICIsIE0ueDg2LlJfQ1MpOworKyAgICBwcmludGsoIkVJUD0lMDh4XG5cdCIsIE0ueDg2LlJfRUlQKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorKyAgICAgICAgcHJpbnRrKCJPViAiKTsgICAgICAgICAgLyogQ0hFQ0tFRC4uLiAqLworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5WICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpCisrICAgICAgICBwcmludGsoIkROICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlVQICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9JRikpCisrICAgICAgICBwcmludGsoIkVJICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIkRJICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9TRikpCisrICAgICAgICBwcmludGsoIk5HICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBMICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCisrICAgICAgICBwcmludGsoIlpSICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5aICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9BRikpCisrICAgICAgICBwcmludGsoIkFDICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5BICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9QRikpCisrICAgICAgICBwcmludGsoIlBFICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBPICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICBwcmludGsoIkNZICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5DICIpOworKyAgICBwcmludGsoIlxuIik7CisgfQorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L2RlY29kZS5jIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK2luZGV4IDdkOWEzNGEuLjEyZjhmYjggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWNvZGUuYworKysrIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK0BAIC00NiwyNSArNDYsMjcgQEAKKyBSRU1BUktTOgorIEhhbmRsZXMgYW55IHBlbmRpbmcgYXN5Y2hyb25vdXMgaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdV9pbnRyX2hhbmRsZSh2b2lkKQorK3N0YXRpYyB2b2lkCisreDg2ZW11X2ludHJfaGFuZGxlKHZvaWQpCisgeworLQl1OAlpbnRubzsKKy0KKy0JaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSB7CistCQlpbnRubyA9IE0ueDg2LmludG5vOworLQkJaWYgKF9YODZFTVVfaW50clRhYltpbnRub10pIHsKKy0JCQkoKl9YODZFTVVfaW50clRhYltpbnRub10pKGludG5vKTsKKy0JCX0gZWxzZSB7CistCQkJcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworLQkJCUNMRUFSX0ZMQUcoRl9JRik7CistCQkJQ0xFQVJfRkxBRyhGX1RGKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9DUyk7CistCQkJTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQgKyAyKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistCQkJTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQpOworLQkJCU0ueDg2LmludHIgPSAwOworLQkJfQorLQl9CisrICAgIHU4IGludG5vOworKworKyAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpIHsKKysgICAgICAgIGludG5vID0gTS54ODYuaW50bm87CisrICAgICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgeworKyAgICAgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgKGludG5vKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKysgICAgICAgICAgICBNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCArIDIpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKysgICAgICAgICAgICBNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCk7CisrICAgICAgICAgICAgTS54ODYuaW50ciA9IDA7CisrICAgICAgICB9CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC03NSwxMSArNzcsMTEgQEAgUkVNQVJLUzoKKyBSYWlzZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdCB0byBiZSBoYW5kbGVkIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIHRoZQorIG5leHQgaW5zdHJ1Y3Rpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHg4NmVtdV9pbnRyX3JhaXNlKAorLQl1OCBpbnRybnVtKQorK3ZvaWQKKyt4ODZlbXVfaW50cl9yYWlzZSh1OCBpbnRybnVtKQorIHsKKy0JTS54ODYuaW50bm8gPSBpbnRybnVtOworLQlNLng4Ni5pbnRyIHw9IElOVFJfU1lOQ0g7CisrICAgIE0ueDg2LmludG5vID0gaW50cm51bTsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX1NZTkNIOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTg4LDM5ICs5MCwzOSBAQCBNYWluIGV4ZWN1dGlvbiBsb29wIGZvciB0aGUgZW11bGF0b3IuIFdlIHJldHVybiBmcm9tIGhlcmUgd2hlbiB0aGUgc3lzdGVtCisgaGFsdHMsIHdoaWNoIGlzIG5vcm1hbGx5IGNhdXNlZCBieSBhIHN0YWNrIGZhdWx0IHdoZW4gd2UgcmV0dXJuIGZyb20gdGhlCisgb3JpZ2luYWwgcmVhbCBtb2RlIGNhbGwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9leGVjKHZvaWQpCisrdm9pZAorK1g4NkVNVV9leGVjKHZvaWQpCisgeworLQl1OCBvcDE7CistCistCU0ueDg2LmludHIgPSAwOworLQlEQih4ODZlbXVfZW5kX2luc3RyKCk7KQorLQorLSAgICBmb3IgKDs7KSB7CistREIoCQlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JCS8qIElmIGRlYnVnZ2luZywgc2F2ZSB0aGUgSVAgYW5kIENTIHZhbHVlcy4gKi8KKy0JCVNBVkVfSVBfQ1MoTS54ODYuUl9DUywgTS54ODYuUl9JUCk7CistCQlJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0JCWlmIChNLng4Ni5pbnRyKSB7CistCQkJaWYgKE0ueDg2LmludHIgJiBJTlRSX0hBTFRFRCkgeworLURCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgICAgICAgICAgICAgICAgICBwcmludGsoImhhbHRlZFxuIik7CistICAgICAgICAgICAgICAgICAgICBYODZFTVVfdHJhY2VfcmVncygpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKy0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlNlcnZpY2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuIik7CistICAgICAgICAgICAgICAgICAgICB9KQorLQkJCQlyZXR1cm47CisrICAgIHU4IG9wMTsKKysKKysgICAgTS54ODYuaW50ciA9IDA7CisrICAgIERCKHg4NmVtdV9lbmRfaW5zdHIoKTsKKysgICAgICAgICkKKysKKysgICAgICAgIGZvciAoOzspIHsKKysgICAgICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgICAgICAvKiBJZiBkZWJ1Z2dpbmcsIHNhdmUgdGhlIElQIGFuZCBDUyB2YWx1ZXMuICovCisrICAgICAgICAgICAgU0FWRV9JUF9DUyhNLng4Ni5SX0NTLCBNLng4Ni5SX0lQKTsKKysgICAgICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworKyAgICAgICAgaWYgKE0ueDg2LmludHIpIHsKKysgICAgICAgICAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfSEFMVEVEKSB7CisrICAgICAgICAgICAgICAgIERCKGlmIChNLng4Ni5SX1NQICE9IDApIHsKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJoYWx0ZWRcbiIpOyBYODZFTVVfdHJhY2VfcmVncygpO30KKysgICAgICAgICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJTZXJ2aWNlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIpO30KKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgIH0KKy0JCQlpZiAoKChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgJiYgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CistCQkJCSFBQ0NFU1NfRkxBRyhGX0lGKSkgeworLQkJCQl4ODZlbXVfaW50cl9oYW5kbGUoKTsKKy0JCQl9CistCQl9CistCistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CistCQkoKng4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICAgICAgICAgIGlmICgoKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAmJgorKyAgICAgICAgICAgICAgICAgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CisrICAgICAgICAgICAgICAgICFBQ0NFU1NfRkxBRyhGX0lGKSkgeworKyAgICAgICAgICAgICAgICB4ODZlbXVfaW50cl9oYW5kbGUoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICgqeDg2ZW11X29wdGFiW29wMV0pIChvcDEpOworICAgICAgICAgaWYgKE0ueDg2LmRlYnVnICYgREVCVUdfRVhJVCkgeworICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19FWElUOworICAgICAgICAgICAgIHJldHVybjsKK0BAIC0xMzIsOSArMTM0LDEwIEBAIERCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CisgUkVNQVJLUzoKKyBIYWx0cyB0aGUgc3lzdGVtIGJ5IHNldHRpbmcgdGhlIGhhbHRlZCBzeXN0ZW0gZmxhZy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX2hhbHRfc3lzKHZvaWQpCisrdm9pZAorK1g4NkVNVV9oYWx0X3N5cyh2b2lkKQorIHsKKy0JTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0xNDksMTkgKzE1MiwxNyBAQCBuZXh0IGluc3RydWN0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmRiKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKAorLQlpbnQgKm1vZCwKKy0JaW50ICpyZWdoLAorLQlpbnQgKnJlZ2wpCisrdm9pZAorK2ZldGNoX2RlY29kZV9tb2RybShpbnQgKm1vZCwgaW50ICpyZWdoLCBpbnQgKnJlZ2wpCisgeworLQlpbnQgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCSptb2QgID0gKGZldGNoZWQgPj4gNikgJiAweDAzOworLQkqcmVnaCA9IChmZXRjaGVkID4+IDMpICYgMHgwNzsKKysgICAgaW50IGZldGNoZWQ7CisrCisrICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgZmV0Y2hlZCA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKysgICAgKm1vZCA9IChmZXRjaGVkID4+IDYpICYgMHgwMzsKKysgICAgKnJlZ2ggPSAoZmV0Y2hlZCA+PiAzKSAmIDB4MDc7CisgICAgICpyZWdsID0gKGZldGNoZWQgPj4gMCkgJiAweDA3OworIH0KKyAKK0BAIC0xNzUsMTUgKzE3NiwxNiBAQCBtb3ZlcyB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciB0byB0aGUgbmV4dCB2YWx1ZS4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24sIGFzICgqc3lzX3JkYikgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9ieXRlX2ltbSh2b2lkKQorK3U4CisrZmV0Y2hfYnl0ZV9pbW0odm9pZCkKKyB7CistCXU4IGZldGNoZWQ7CisrICAgIHU4IGZldGNoZWQ7CisgCistREIoCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkJeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCXJldHVybiBmZXRjaGVkOworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTE5NiwxNiArMTk4LDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF93b3JkX2ltbSh2b2lkKQorK3UxNgorK2ZldGNoX3dvcmRfaW1tKHZvaWQpCisgeworLQl1MTYJZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCQl4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQlmZXRjaGVkID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVApKTsKKy0JTS54ODYuUl9JUCArPSAyOworLQlJTkNfREVDT0RFRF9JTlNUX0xFTigyKTsKKy0JcmV0dXJuIGZldGNoZWQ7CisrICAgIHUxNiBmZXRjaGVkOworKworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZHcpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CisrICAgIE0ueDg2LlJfSVAgKz0gMjsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMik7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTIxOCwxNiArMjIxLDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKQorK3UzMgorK2ZldGNoX2xvbmdfaW1tKHZvaWQpCisgeworLQl1MzIgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkbCkoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CistCU0ueDg2LlJfSVAgKz0gNDsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oNCk7CistCXJldHVybiBmZXRjaGVkOworKyAgICB1MzIgZmV0Y2hlZDsKKysKKysgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICBmZXRjaGVkID0gKCpzeXNfcmRsKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCkpOworKyAgICBNLng4Ni5SX0lQICs9IDQ7CisrICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDQpOworKyAgICByZXR1cm4gZmV0Y2hlZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNTksMzggKzI2MywzOSBAQCBjcHUtc3RhdGUtdmFyaWJsZSBNLng4Ni5tb2RlLiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgc3RhdGVzOgorIAorIEVhY2ggb2YgdGhlIGFib3ZlIDcgaXRlbXMgYXJlIGhhbmRsZWQgd2l0aCBhIGJpdCBpbiB0aGUgbW9kZSBmaWVsZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLV9JTkxJTkUgdTMyIGdldF9kYXRhX3NlZ21lbnQodm9pZCkKKytfSU5MSU5FIHUzMgorK2dldF9kYXRhX3NlZ21lbnQodm9pZCkKKyB7CisgI2RlZmluZQlHRVRfU0VHTUVOVChzZWdtZW50KQorLQlzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKy0JICBjYXNlIDA6CQkJCQkvKiBkZWZhdWx0IGNhc2U6IHVzZSBkcyByZWdpc3RlciAqLworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRFM6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0RTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6CS8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfQ1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9DUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0VTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRVMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9FUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0ZTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9GUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfR1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9HUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX1NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfU1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBkZWZhdWx0OgorKyAgICBzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBjYXNlOiB1c2UgZHMgcmVnaXN0ZXIgKi8KKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRFM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6ICAgIC8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKysgICAgICAgIHJldHVybiBNLng4Ni5SX1NTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9DUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlM6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0ZTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9HUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfU1M7CisrICAgIGRlZmF1bHQ6CisgI2lmZGVmCURFQlVHCistCQlwcmludGsoImVycm9yOiBzaG91bGQgbm90IGhhcHBlbjogIG11bHRpcGxlIG92ZXJyaWRlcy5cbiIpOworKyAgICAgICAgcHJpbnRrKCJlcnJvcjogc2hvdWxkIG5vdCBoYXBwZW46ICBtdWx0aXBsZSBvdmVycmlkZXMuXG4iKTsKKyAjZW5kaWYKKy0JCUhBTFRfU1lTKCk7CistCQlyZXR1cm4gMDsKKy0JfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAyLDE0ICszMDcsMTQgQEAgQnl0ZSB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGZldGNoX2RhdGFfYnl0ZSgKKy0JdWludCBvZmZzZXQpCisrdTgKKytmZXRjaF9kYXRhX2J5dGUodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkYikgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTMyMSwxNCArMzI2LDE0IEBAIFdvcmQgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgZmV0Y2hfZGF0YV93b3JkKAorLQl1aW50IG9mZnNldCkKKyt1MTYKKytmZXRjaF9kYXRhX3dvcmQodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmR3KSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkdykgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM0MCwxNCArMzQ1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nKAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmcodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM2MCwxNSArMzY1LDE0IEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9kYXRhX2J5dGVfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3U4CisrZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkYikoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZGIpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzgxLDE1ICszODUsMTQgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3UxNgorK2ZldGNoX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZHcpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmR3KSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQwMiwxNSArNDA1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MjQsMTUgKzQyNiwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2J5dGUoCistCXVpbnQgb2Zmc2V0LAorLQl1OCB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfYnl0ZSh1aW50IG9mZnNldCwgdTggdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3JiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cmIpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ0NiwxNSArNDQ3LDE0IEBAIHRoZSBjdXJyZW50ICdkZWZhdWx0JyBzZWdtZW50LCB3aGljaCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfd29yZCgKKy0JdWludCBvZmZzZXQsCistCXUxNiB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfd29yZCh1aW50IG9mZnNldCwgdTE2IHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dydykoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3J3KSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjgsMTUgKzQ2OCwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmcoCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmcodWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDkwLDE2ICs0ODksMTQgQEAgV3JpdGVzIGEgYnl0ZSB2YWx1ZSB0byBhbiBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQsCistCXU4IHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmIpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dyYikgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUxMywxNiArNTEwLDE0IEBAIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MTYgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUxNiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cncpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUzNiwxNiArNTMxLDE0IEBAIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTU1OSwzNyArNTUyLDM3IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGJ5dGUgb3BlcmFuZHMuIEFsc28gZW5hYmxlcyB0aGUgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTgqIGRlY29kZV9ybV9ieXRlX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3U4ICoKKytkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0gICAgICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FMOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNMIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ0w7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiREwiKTsKKy0JCXJldHVybiAmTS54ODYuUl9ETDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JMOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkFIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQUg7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQ0giKTsKKy0JCXJldHVybiAmTS54ODYuUl9DSDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJESCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RIOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkJIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQkg7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BTDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0wiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DTDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ETDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CTDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BSDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DSDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESDsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CSDsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworKyAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UIFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTYwMywzNiArNTk2LDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMuICBBbHNvIGVuYWJsZXMgdGhlIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiogZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ1g7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9EWDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIlNQIik7CistCQlyZXR1cm4gJk0ueDg2LlJfU1A7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9CUDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJTSSIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkRJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfREk7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BWDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EWDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CWDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1AiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlAiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CUDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TSTsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREkiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY0NywzNiArNjQwLDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGR3b3JkIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIqIGRlY29kZV9ybV9sb25nX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3UzMiAqCisrZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZykKKyB7CisgICAgIHN3aXRjaCAocmVnKSB7CistICAgICAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiRUFYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUFYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkVDWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VDWDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJFRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiRUJYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUJYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkVTUCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VTUDsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJFQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FQlA7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiRVNJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVNJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkVESSIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VESTsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICBjYXNlIDA6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQVg7CisrICAgIGNhc2UgMToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVDWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VDWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRURYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRURYOworKyAgICBjYXNlIDM6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQlg7CisrICAgIGNhc2UgNDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVTUCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VTUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRUJQIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRUJQOworKyAgICBjYXNlIDY6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FU0k7CisrICAgIGNhc2UgNzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVESSIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY5MiwxMjYgKzY4NSwxMjkgQEAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMsIG1vZGlmaWVkIGZyb20gYWJvdmUgZm9yIHRoZSB3ZWlyZG8KKyBzcGVjaWFsIGNhc2Ugb2Ygc2VncmVnIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYqIGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpCisgeworLQlzd2l0Y2ggKHJlZykgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIkVTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVM7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiQ1MiKTsKKy0JCXJldHVybiAmTS54ODYuUl9DUzsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJTUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NTOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIkRTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRFM7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiRlMiKTsKKy0JCXJldHVybiAmTS54ODYuUl9GUzsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJHUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0dTOworLQkgIGNhc2UgNjoKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworLQkJYnJlYWs7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRVMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FUzsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DUzsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUzsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EUzsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRlMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9GUzsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiR1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9HUzsKKysgICAgY2FzZSA2OgorKyAgICBjYXNlIDc6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgSEFMVF9TWVMoKTsKKysgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKyB9CisgCisgLyoKKyAgKgorICAqIHJldHVybiBvZmZzZXQgZnJvbSB0aGUgU0lCIEJ5dGUKKyAgKi8KKy11MzIgZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisrdTMyCisrZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisgeworICAgICB1MzIgYmFzZSA9IDAsIGkgPSAwLCBzY2FsZSA9IDE7CisgCistICAgIHN3aXRjaChzaWIgJiAweDA3KSB7CisrICAgIHN3aXRjaCAoc2liICYgMHgwNykgeworICAgICBjYXNlIDA6CistCURFQ09ERV9QUklOVEYoIltFQVhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUFYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0JREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRUNYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQ1hdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYXSIpOworLQliYXNlID0gTS54ODYuUl9FRFg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VEWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDM6CistCURFQ09ERV9QUklOVEYoIltFQlhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUJYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNDoKKy0JREVDT0RFX1BSSU5URigiW0VTUF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNQOworLQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU1BdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU1A7CisrICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JaWYgKG1vZCA9PSAwKSB7CistCSAgICBiYXNlID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0JICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworLQkgICAgYmFzZSA9IE0ueDg2LlJfRVNQOworLQkgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChtb2QgPT0gMCkgeworKyAgICAgICAgICAgIGJhc2UgPSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworKyAgICAgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VTUDsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU0k7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA3OgorLQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQliYXNlID0gTS54ODYuUl9FREk7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VESV0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHN3aXRjaCAoKHNpYiA+PiAzKSAmIDB4MDcpIHsKKyAgICAgY2FzZSAwOgorLQlERUNPREVfUFJJTlRGKCJbRUFYIik7CistCWkgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQVg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlERUNPREVfUFJJTlRGKCJbRUNYIik7CistCWkgPSBNLng4Ni5SX0VDWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUNYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYIik7CistCWkgPSBNLng4Ni5SX0VEWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRURYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FRFg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAzOgorLQlERUNPREVfUFJJTlRGKCJbRUJYIik7CistCWkgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQlg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA0OgorLQlpID0gMDsKKy0JYnJlYWs7CisrICAgICAgICBpID0gMDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDU6CistCURFQ09ERV9QUklOVEYoIltFQlAiKTsKKy0JaSA9IE0ueDg2LlJfRUJQOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlAiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VCUDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDY6CistCURFQ09ERV9QUklOVEYoIltFU0kiKTsKKy0JaSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0kiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VTSTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDc6CistCURFQ09ERV9QUklOVEYoIltFREkiKTsKKy0JaSA9IE0ueDg2LlJfRURJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFREkiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHNjYWxlID0gMSA8PCAoKHNpYiA+PiA2KSAmIDB4MDMpOworICAgICBpZiAoKChzaWIgPj4gMykgJiAweDA3KSAhPSA0KSB7CistCWlmIChzY2FsZSA9PSAxKSB7CistCSAgICBERUNPREVfUFJJTlRGKCJdIik7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKy0JfQorKyAgICAgICAgaWYgKHNjYWxlID09IDEpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJdIik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKysgICAgICAgIH0KKyAgICAgfQorICAgICByZXR1cm4gYmFzZSArIChpICogc2NhbGUpOworIH0KK0BAIC04MzYsNzQgKzgzMiw3NSBAQCBOT1RFOiAJVGhlIGNvZGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKGRzIHZzIHNzKQorIAkJaWYgYSBTUyBhY2Nlc3MgaXMgbmVlZGVkLCBzZXQgdGhpcyBiaXQuICBPdGhlcndpc2UsIERTIGFjY2VzcworIAkJb2NjdXJzICh1bmxlc3MgYW55IG9mIHRoZSBzZWdtZW50IG92ZXJyaWRlIGJpdHMgYXJlIHNldCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZGVjb2RlX3JtMDBfYWRkcmVzcygKKy0JaW50IHJtKQorK3UzMgorK2RlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKQorIHsKKyAgICAgdTMyIG9mZnNldDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJbRUNYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRUNYOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIltFRFhdIik7CistCQlyZXR1cm4gTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VCWDsKKy0JICBjYXNlIDQ6CistCQlzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworLQkJcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDApOworLQkgIGNhc2UgNToKKy0JCW9mZnNldCA9IGZldGNoX2xvbmdfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSTsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJOworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQVg7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1g7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FRFg7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlg7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMCk7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgb2Zmc2V0ID0gZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKysgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVNJOworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFREldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJbQlgrU0ldIik7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JYK1NJXSIpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfU0kpICYgMHhmZmZmOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIltCWCtESV0iKTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlgrREldIik7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiW0JQK1NJXSIpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlArU0ldIik7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJKSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJbQlArREldIik7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCUCtESV0iKTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfREkpICYgMHhmZmZmOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIltTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX1NJOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIltESV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0RJOworLQkgIGNhc2UgNjoKKy0JCW9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwNHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiW0JYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfQlg7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfU0k7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0RJXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0RJOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIG9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIlslMDR4XSIsIG9mZnNldCk7CisrICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlhdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfQlg7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOworIH0KK0BAIC05MTksNzkgKzkxNiw4MCBAQCBSRU1BUktTOgorIFJldHVybiB0aGUgb2Zmc2V0IGdpdmVuIGJ5IG1vZD0wMSBhZGRyZXNzaW5nLiAgQWxzbyBlbmFibGVzIHRoZQorIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBkZWNvZGVfcm0wMV9hZGRyZXNzKAorLQlpbnQgcm0pCisrdTMyCisrZGVjb2RlX3JtMDFfYWRkcmVzcyhpbnQgcm0pCisgeworICAgICBpbnQgZGlzcGxhY2VtZW50ID0gMDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgLyogRmV0Y2ggZGlzcDggaWYgbm8gU0lCIGJ5dGUgKi8KKyAgICAgaWYgKCEoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSAmJiAocm0gPT0gNCkpKQorLQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VBWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNDoKKy0JCXNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CistCQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMSkgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1ggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VEWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUJYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIHNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDEpICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlAgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK1NJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArREldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JQXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCUF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAvKiBTSE9VTEQgTk9UIEhBUFBFTiAqLworIH0KK0BAIC0xMDA3LDg2ICsxMDA1LDg3IEBAIFJFTUFSS1M6CisgUmV0dXJuIHRoZSBvZmZzZXQgZ2l2ZW4gYnkgbW9kPTEwIGFkZHJlc3NpbmcuICBBbHNvIGVuYWJsZXMgdGhlCisgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoCistCWludCBybSkKKyt1MzIKKytkZWNvZGVfcm0xMF9hZGRyZXNzKGludCBybSkKKyB7CisgICAgIHUzMiBkaXNwbGFjZW1lbnQgPSAwOworICAgICBpbnQgc2liOworIAorICAgICAvKiBGZXRjaCBkaXNwMTYgaWYgMTYtYml0IGFkZHIgbW9kZSAqLworICAgICBpZiAoIShNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikpCistCWRpc3BsYWNlbWVudCA9ICh1MTYpZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MTYpIGZldGNoX3dvcmRfaW1tKCk7CisgICAgIGVsc2UgeworLQkvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKy0JaWYgKHJtICE9IDQpCistCSAgICBkaXNwbGFjZW1lbnQgPSAodTMyKWZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICAvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKysgICAgICAgIGlmIChybSAhPSA0KQorKyAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MzIpIGZldGNoX2xvbmdfaW1tKCk7CisgICAgIH0KKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLSAgICAgIHN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQVhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRUJYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA0OgorLQkJc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCWRpc3BsYWNlbWVudCA9ICh1MzIpZmV0Y2hfbG9uZ19pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAyKSArIGRpc3BsYWNlbWVudDsKKy0JCWJyZWFrOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRVNJICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VESV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VDWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSAodTMyKSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMikgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUJQXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgLyogMTYtYml0IGFkZHJlc3NpbmcgKi8KKy0gICAgICBzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK1NJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK0RJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgfQorICAgICByZXR1cm4gMDsKKyAgICAgLypOT1RSRUFDSEVEICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZnB1LmMgYi9saWJzL3g4NmVtdS9mcHUuYworaW5kZXggYjcyZGUxZS4uMGRhYjA1YyAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L2ZwdS5jCisrKysgYi9saWJzL3g4NmVtdS9mcHUuYworQEAgLTQyLDcgKzQyLDggQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIG9wY29kZT0weGQ4ICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFU0MgRDhcbiIpOworQEAgLTUyLDcgKzUzLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKyAgICAgIkZMRFx0RFdPUkQgUFRSICIsICJFU0NfRDlcdCIsICJGU1RcdERXT1JEIFBUUiAiLCAiRlNUUFx0RFdPUkQgUFRSICIsCisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIAorQEAgLTYzLDcgKzY0LDcgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiW10gPSB7CisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIH07CisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYjFbXSA9IHsKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAKK0BAIC04OSwxMCArOTAsMTEgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworICAgICAiRlJORElOVCIsICJGU0NBTEUiLCAiRVNDX0Q5IiwgIkVTQ19EOSIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZDkgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0xMDMsNTYgKzEwNSw1OCBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICNpZmRlZiBERUJVRworICAgICBpZiAobW9kICE9IDMpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kOV90YWIsIG1vZCwgcmgsIHJsKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoeDg2ZW11X2ZwdV9vcF9kOV90YWIxWyhyaCA8PCAzKSArIHJsXSk7CisgICAgIH0KKyAjZW5kaWYKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworLQkJaWYgKHJoIDwgNCkgeworLQkJCQlERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKy0JCX0gZWxzZSB7CistCQkJCURFQ09ERV9QUklOVEYoIlxuIik7CistCQl9CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKysgICAgICAgIGlmIChyaCA8IDQpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnhjaChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1Jfbm9wKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZjaHMoWDg2RU1VX0ZQVV9TVEtUT1ApOworQEAgLTE3MywxMzMgKzE3NywxMzMgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwydChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwyZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZHBpKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbGcyKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbG4yKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkeihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAvKiA3ICovCisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZjJ4bTEoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meWwyeChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnBhdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnh0cmFjdChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2RlY3N0cCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9pbmNzdHAoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwcmVtKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnlsMnhwMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzcXJ0KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnJuZGludChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzY2FsZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorLSAgICAgICAgICAgICAgY2FzZSA3OgorLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkZW52KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZGN3KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdGVudihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RjdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworLSNlbmRpZiAvKiBYODZFTVVfRlBVX1BSRVNFTlQgKi8KKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWDg2RU1VX0ZQVV9QUkVTRU5UICovCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CisgfQorIAorICNpZmRlZiBERUJVRworIAorLWNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7CisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMDksNyArMzEzLDcgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYV90YWJbXSA9IHsKKyAgICAgIkZJQ09NUFx0RFdPUkQgUFRSICIsCisgICAgICJGSVNVQlx0RFdPUkQgUFRSICIsICJGSVNVQlJcdERXT1JEIFBUUiAiLCAiRklESVZcdERXT1JEIFBUUiAiLAorICAgICAiRklESVZSXHREV09SRCBQVFIgIiwKKy0gICAgCisrCisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMTksMTAgKzMyMywxMSBAQCBjaGFyICp4ODZlbXVfZnB1X29wX2RhX3RhYltdID0geworICAgICAiRVNDX0RBICAgICAiLCAiRVNDX0RBICIsICJFU0NfREEgICAiLCAiRVNDX0RBICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGEgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0zMzIsNTkgKzMzNyw1OSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGFfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pYWRkKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ltdWwoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWNvbShYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pY29tcChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pc3ViKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lzdWJyKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lkaXYoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWRpdnIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtMzkyLDcgKzM5Nyw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkZJTERcdERXT1JEIFBUUiAiLCAiRVNDX0RCXHQxOSIsICJGSVNUXHREV09SRCBQVFIgIiwgIkZJU1RQXHREV09SRCBQVFIgIiwKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgCitAQCAtNDAzLDEwICs0MDgsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGIgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC00MTYsMTA0ICs0MjIsMTA2IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgI2lmZGVmIERFQlVHCisgICAgIGlmIChtb2QgIT0gMykgeworICAgICAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RiX3RhYiwgbW9kLCByaCwgcmwpOworLSAgICB9IGVsc2UgaWYgKHJoID09IDQpIHsgICAgICAgLyogPT09IDExIDEwIDAgbm5uICovCisrICAgIH0KKysgICAgZWxzZSBpZiAocmggPT0gNCkgeyAgICAgICAgIC8qID09PSAxMSAxMCAwIG5ubiAqLworICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRkVOSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGRElTSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGQ0xFWFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGSU5JVFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiRVNDX0RCICUweFxuIiwgKG1vZCA8PCA2KSArIChyaCA8PCAzKSArIChybCkpOworICAgICB9CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICAvKiBleGVjdXRlICovCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmVuaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGlzaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY2xleCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9maW5pdCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0KFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3RwKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKKyB9CisgCisgI2lmZGVmIERFQlVHCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdFFXT1JEIFBUUiAiLCAiRk1VTFx0UVdPUkQgUFRSICIsICJGQ09NXHRRV09SRCBQVFIgIiwKKyAgICAgIkZDT01QXHRRV09SRCBQVFIgIiwKKyAgICAgIkZTVUJcdFFXT1JEIFBUUiAiLCAiRlNVQlJcdFFXT1JEIFBUUiAiLCAiRkRJVlx0UVdPUkQgUFRSICIsCitAQCAtNTMyLDEwICs1NDAsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdCIsICJGTVVMXHQiLCAiRkNPTVx0IiwgIkZDT01QXHQiLAorICAgICAiRlNVQlJcdCIsICJGU1VCXHQiLCAiRkRJVlJcdCIsICJGRElWXHQiLAorIH07CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRjICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNTQ1LDg1ICs1NTQsODUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RjX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZhZGQoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZtdWwoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb20oc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3VicihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXYoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYWRkKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbXVsKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tcChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YnIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXYoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXZyKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC02MzEsNyArNjQwLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKyAgICAgIkZMRFx0UVdPUkQgUFRSICIsICJFU0NfRERcdDI5LCIsICJGU1RcdFFXT1JEIFBUUiAiLCAiRlNUUFx0UVdPUkQgUFRSICIsCisgICAgICJGUlNUT1JcdCIsICJFU0NfRERcdDJELCIsICJGU0FWRVx0IiwgIkZTVFNXXHQiLAorIAorQEAgLTY0NSwxMCArNjU0LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RkX3RhYltdID0geworICAgICAiRVNDX0REXHQyQywiLCAiRVNDX0REXHQyRCwiLCAiRVNDX0REXHQyRSwiLCAiRVNDX0REXHQyRiwiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRkICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNjU4LDc1ICs2NjgsNzUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RkX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZnJlZShzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meGNoKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdChzdGtlbGVtKTsgIC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3RwKHN0a2VsZW0pOyAvKiByZWdpc3RlciB2ZXJzaW9uICovCisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0KFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mcnN0b3IoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzYXZlKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0c3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC03MzQsOCArNzQ0LDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisteworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RlX3RhYltdID0geworICAgICAiRklBRERcdFdPUkQgUFRSICIsICJGSU1VTFx0V09SRCBQVFIgIiwgIkZJQ09NXHRXT1JEIFBUUiAiLAorICAgICAiRklDT01QXHRXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdFdPUkQgUFRSICIsICJGSVNVQlJcdFdPUkQgUFRSICIsICJGSURJVlx0V09SRCBQVFIgIiwKK0BAIC03NTUsMTAgKzc2NCwxMSBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisgICAgICJGU1VCUlBcdCIsICJGU1VCUFx0IiwgIkZESVZSUFx0IiwgIkZESVZQXHQiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRlICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNzY4LDg3ICs3NzgsODcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RlX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mYWRkcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZm11bHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIGlmIChzdGtlbGVtID09IDEpCistICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXBwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKysgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisrICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXZycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWFkZChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbXVsKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmljb20oWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWNvbXAoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN1YihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3VicihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpZGl2KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlkaXZyKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtODU2LDcgKzg2Niw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7CisgICAgIC8qIG1vZCA9PSAwMCAqLworICAgICAiRklMRFx0V09SRCBQVFIgIiwgIkVTQ19ERlx0MzlcbiIsICJGSVNUXHRXT1JEIFBUUiAiLCAiRklTVFBcdFdPUkQgUFRSICIsCisgICAgICJGQkxEXHRUQllURSBQVFIgIiwgIkZJTERcdFFXT1JEIFBUUiAiLCAiRkJTVFBcdFRCWVRFIFBUUiAiLAorQEAgLTg3NywxMCArODg3LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RmX3RhYltdID0geworICAgICAiRVNDX0RGXHQzQywiLCAiRVNDX0RGXHQzRCwiLCAiRVNDX0RGXHQzRSwiLCAiRVNDX0RGXHQzRiwiCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGYgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC04OTAsNzUgKzkwMSw3NSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGZfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0cChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZibGQoWDg2RU1VX0ZQVV9CU0QsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYnN0cChYODZFTVVfRlBVX0JTRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9vcHMuYyBiL2xpYnMveDg2ZW11L29wcy5jCitpbmRleCA0ZjUwNGM5Li43NmI4MzU4IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzLmMKKysrKyBiL2xpYnMveDg2ZW11L29wcy5jCitAQCAtODEsMTcgKzgxLDE3IEBAIG9wMSAtIEluc3RydWN0aW9uIG9wIGNvZGUKKyBSRU1BUktTOgorIEhhbmRsZXMgaWxsZWdhbCBvcGNvZGVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaWxsZWdhbF9vcCgKKy0gICAgdTggb3AxKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaWxsZWdhbF9vcCh1OCBvcDEpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgWDg2IE9QQ09ERVxuIik7CistICAgIFRSQUNFX1JFR1MoKTsKKy0gICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggSUxMRUdBTCBYODYgT1BDT0RFIVxuIiwKKy0gICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMSxvcDEpOworLSAgICBIQUxUX1NZUygpOworLSAgICAgICAgfQorKyAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBYODYgT1BDT0RFXG4iKTsKKysgICAgICAgIFRSQUNFX1JFR1MoKTsKKysgICAgICAgIERCKHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUCAtIDEsIG9wMSkpOworKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorICAgICBlbHNlIHsKKyAgICAgICAgIC8qIElmIHdlIGdldCBoZXJlLCBpdCBtZWFucyB0aGUgc3RhY2sgcG9pbnRlciBpcyBiYWNrIHRvIHplcm8KKyAgICAgICAgICAqIHNvIHdlIGFyZSBqdXN0IHJldHVybmluZyBmcm9tIGFuIGVtdWxhdG9yIHNlcnZpY2UgY2FsbAorQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorICAgICAgICAgICogY2FsbC4KKyAgICAgICAgICAqLworICAgICAgICAgWDg2RU1VX2hhbHRfc3lzKCk7CistICAgICAgICB9CisrICAgIH0KKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorQEAgLTEwOCw3ICsxMDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE0OSw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBhZGRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTY2LDcgKzE2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE4OCw3ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjE1LDcgKzIxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNDIsNyArMjQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI1Niw5ICsyNjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjY2LDggKzI3MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjg2LDcgKzI5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMzI0LDcgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gYWRkX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTM0MSw3ICszNDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTM2Miw3ICszNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zODcsNyArMzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNDEyLDcgKzQyMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTQyNSw5ICs0MzYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQzNSw4ICs0NDYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQ1NSw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTQ3Myw3ICs0ODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTQ4MSw3ICs0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNDg5LDggKzUwNCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBhZGRfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBhZGRfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gYWRkX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTUwMCw3ICs1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTXG4iKTsKK0BAIC01MTQsNyArNTMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNcbiIpOworQEAgLTUyOCw3ICs1NDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTU2OSw3ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IG9yX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTU4Niw3ICs2MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDgsNyArNjI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02MzUsNyArNjU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NjIsNyArNjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NzYsOSArNjk5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjg2LDggKzcwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTcwNiw3ICs3MzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTc0NCw3ICs3NjksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtNzYxLDcgKzc4Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNzgyLDcgKzgwOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC04MDcsNyArODM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTgzMiw3ICs4NjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtODQ1LDkgKzg3NCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTg1NSw4ICs4ODQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC04NzUsNyArOTA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC04OTMsNyArOTI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC05MDEsNyArOTMzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9SXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTkwOSw4ICs5NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBvcl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTkyMCw3ICs5NTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0Q1NcbiIpOworQEAgLTkzNCwxOCArOTY5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZi4gRXNjYXBlIGZvciB0d28tYnl0ZSBvcGNvZGUgKDI4NiBvciBiZXR0ZXIpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCBvcDIgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgIHU4IG9wMiA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKworICAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0gICAgKCp4ODZlbXVfb3B0YWIyW29wMl0pKG9wMik7CisrICAgICgqeDg2ZW11X29wdGFiMltvcDJdKSAob3AyKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTk4Niw3ICsxMDI0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gYWRjX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTEwMDMsNyArMTA0MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTEwMjUsNyArMTA2NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xMDUyLDcgKzEwOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTA3OSw3ICsxMTIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTEwOTMsOSArMTEzNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMTAzLDggKzExNDUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTExMjMsNyArMTE2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMTE2MSw3ICsxMjA1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMTE3OCw3ICsxMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xMTk5LDcgKzEyNDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjI0LDcgKzEyNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjQ5LDcgKzEyOTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjYyLDkgKzEzMTAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY193b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEyNzIsOCArMTMyMCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTI5Miw3ICsxMzQxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0xMzEwLDcgKzEzNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTEzMTgsNyArMTM2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0xMzI2LDggKzEzNzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYWRjX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYWRjX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFkY193b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0xMzM3LDcgKzEzOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNTXG4iKTsKK0BAIC0xMzUxLDcgKzE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTU1xuIik7CitAQCAtMTM2NSw3ICsxNDIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE0MDYsNyArMTQ2Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHNiYl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0xNDIzLDcgKzE0NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xNDQ1LDcgKzE1MDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTQ3Miw3ICsxNTMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE0OTksNyArMTU1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xNTEzLDkgKzE1NzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTUyMyw4ICsxNTgzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNTQzLDcgKzE2MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE1ODEsNyArMTY0Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc2JiX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTE1OTgsNyArMTY2MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTYxOSw3ICsxNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY0NCw3ICsxNzA4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY2OSw3ICsxNzM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY4Miw5ICsxNzQ4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNjkyLDggKzE3NTgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3MTIsNyArMTc3OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMTczMCw3ICsxNzk4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0xNzM4LDcgKzE4MDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMTc0Niw4ICsxODE2LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNiYl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHNiYl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzYmJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMTc1Nyw3ICsxODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHREU1xuIik7CitAQCAtMTc3MSw3ICsxODQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RFNcbiIpOworQEAgLTE3ODUsNyArMTg1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0xODMwLDcgKzE5MDQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworIAorLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTg0Nyw3ICsxOTIxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTg2OSw3ICsxOTQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE4OTYsNyArMTk3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xOTIzLDcgKzIwMDAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTkzNyw5ICsyMDE1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE5NDcsOCArMjAyNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTk2Nyw3ICsyMDQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yMDA1LDcgKzIwODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IGFuZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yMDIyLDcgKzIxMDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIwNDMsNyArMjEyNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTIwNjksNyArMjE1MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMDk0LDcgKzIxNzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMTA3LDkgKzIxOTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTIxMTcsOCArMjIwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjEzNyw3ICsyMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0yMTU1LDcgKzIyNDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTIxNjMsNyArMjI1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0yMTcxLDggKzIyNTksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYW5kX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYW5kX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFuZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMTgyLDcgKzIyNzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFUzpcbiIpOworQEAgLTIxOTksNyArMjI4OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBQVxuIik7CitAQCAtMjIxMyw3ICsyMzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTIyNTQsNyArMjM0Niw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHN1Yl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0yMjcxLDcgKzIzNjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0yMjkzLDcgKzIzODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjMyMCw3ICsyNDE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTIzNDcsNyArMjQ0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yMzYxLDkgKzI0NTcsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjM3MSw4ICsyNDY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yMzkxLDcgKzI0ODgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTI0MjksNyArMjUyNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3ViX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTI0NDYsNyArMjU0NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjQ2Nyw3ICsyNTY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjQ5Miw3ICsyNTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUxNyw3ICsyNjE4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUzMCw5ICsyNjMyLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yNTQwLDggKzI2NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI1NjAsNyArMjY2Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMjU3OCw3ICsyNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0yNTg2LDcgKzI2OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMjU5NCw4ICsyNzAwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHN1Yl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHN1Yl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzdWJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMjYwNSw3ICsyNzEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQ1M6XG4iKTsKK0BAIC0yNjE5LDcgKzI3MjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEQVNcbiIpOworQEAgLTI2MzMsNyArMjc0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yNjc0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSB4b3JfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMjY5MSw3ICsyODAxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMjcxMyw3ICsyODI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI3NDAsNyArMjg1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNzY3LDcgKzI4ODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjc4MSw5ICsyODk1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI3OTEsOCArMjkwNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjgxMSw3ICsyOTI2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yODQ5LDcgKzI5NjUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHhvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yODY2LDcgKzI5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI4ODcsNyArMzAwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MTIsNyArMzAzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MzcsNyArMzA1Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5NTAsOSArMzA3MCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjk2MCw4ICszMDgwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yOTgwLDcgKzMxMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTI5OTgsNyArMzEyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMzAwNiw3ICszMTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTMwMTQsOCArMzEzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSB4b3JfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSB4b3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0geG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTMwMjUsNyArMzE1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNTOlxuIik7CitAQCAtMzAzOSw3ICszMTY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFBXG4iKTsKK0BAIC0zMDUzLDcgKzMxODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTMwOTEsNyArMzIxOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0zMTA4LDcgKzMyMzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0zMTI5LDcgKzMyNTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMzE1NCw3ICszMjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTMxNzksNyArMzMxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0zMTkyLDkgKzMzMjQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBjbXBfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjAyLDggKzMzMzQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjIyLDcgKzMzNTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTMyNjAsNyArMzM5NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0zMjc3LDcgKzM0MTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTMyOTgsNyArMzQzMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zMzIzLDcgKzM0NTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMzM0OCw3ICszNDg1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTMzNjEsOSArMzQ5OSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGNtcF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzNzEsOCArMzUwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzOTEsNyArMzUzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMzQwOSw3ICszNTQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0zNDE3LDcgKzM1NTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMzQyNSw4ICszNTY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0zNDM2LDcgKzM1NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEUzpcbiIpOworQEAgLTM0NTAsNyArMzU5NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkFBU1xuIik7CitAQCAtMzQ2NCwxOCArMzYwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBpbmNfbG9uZyhNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gaW5jX3dvcmQoTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM0ODYsMTggKzM2MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gaW5jX2xvbmcoTS54ODYuUl9FQ1gpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IGluY193b3JkKE0ueDg2LlJfQ1gpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTA4LDE4ICszNjU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IGluY19sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBpbmNfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzUzMCwxOCArMzY4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlggPSBpbmNfbG9uZyhNLng4Ni5SX0VCWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gaW5jX3dvcmQoTS54ODYuUl9CWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1NTIsMTggKzM3MDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gaW5jX2xvbmcoTS54ODYuUl9FU1ApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IGluY193b3JkKE0ueDg2LlJfU1ApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTc0LDE4ICszNzM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IGluY19sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBpbmNfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzU5NiwxOCArMzc1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0U0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU0kgPSBpbmNfbG9uZyhNLng4Ni5SX0VTSSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gaW5jX3dvcmQoTS54ODYuUl9TSSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2MTgsMTggKzM3ODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gaW5jX2xvbmcoTS54ODYuUl9FREkpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IGluY193b3JkKE0ueDg2LlJfREkpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNjQwLDE4ICszODA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGRlY19sb25nKE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBkZWNfd29yZChNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzY2MiwxOCArMzgzNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBkZWNfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0NYID0gZGVjX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2ODQsMTggKzM4NTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gZGVjX2xvbmcoTS54ODYuUl9FRFgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9EWCA9IGRlY193b3JkKE0ueDg2LlJfRFgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzA2LDE4ICszODg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IGRlY19sb25nKE0ueDg2LlJfRUJYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlggPSBkZWNfd29yZChNLng4Ni5SX0JYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzcyOCwxOCArMzkwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBkZWNfbG9uZyhNLng4Ni5SX0VTUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NQID0gZGVjX3dvcmQoTS54ODYuUl9TUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3NTAsMTggKzM5MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gZGVjX2xvbmcoTS54ODYuUl9FQlApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CUCA9IGRlY193b3JkKE0ueDg2LlJfQlApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzcyLDE4ICszOTU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IGRlY19sb25nKE0ueDg2LlJfRVNJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU0kgPSBkZWNfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzc5NCwxOCArMzk4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBkZWNfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RJID0gZGVjX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4MTYsMTggKzQwMDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zODM4LDE4ICs0MDM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4NjAsMTggKzQwNTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzg4MiwxOCArNDA4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQlgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQlgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTA0LDIzICs0MTA5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorLQkgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworLQkgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCistCSAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCXB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CistCX0gZWxzZSB7CistCQlwdXNoX3dvcmQoKHUxNikoTS54ODYuUl9TUCkpOworKyAgICAvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorKyAgICAgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworKyAgICAgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCisrICAgICAqLworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgKE0ueDg2LlJfU1ApKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTM5MzAsMTggKzQxMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0QlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzk1MiwxOCArNDE2MywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfU0kpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTc0LDE4ICs0MTg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM5OTYsMTggKzQyMTMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDAxOCwxOCArNDIzOCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQwNDAsMTggKzQyNjMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MDYyLDE4ICs0Mjg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDA4NCwxOCArNDMxMywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxMDYsMTggKzQzMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MTI4LDE4ICs0MzYzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDE1MCwxOCArNDM4OCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxNzIsMTIgKzQ0MTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEFEXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hBXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTQxOTIsNyArNDQzNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCUCk7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHUxNiBvbGRfc3AgPSBNLng4Ni5SX1NQOworIAorICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworQEAgLTQyMTIsMTIgKzQ0NTYsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQURcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC00MjI1LDE2ICs0NDcxLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FU0kgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQlAgPSBwb3BfbG9uZygpOworLSAgICAgICAgTS54ODYuUl9FU1AgKz0gNDsgICAgICAgICAgICAgIC8qIHNraXAgRVNQICovCisrICAgICAgICBNLng4Ni5SX0VTUCArPSA0OyAgICAgICAvKiBza2lwIEVTUCAqLworICAgICAgICAgTS54ODYuUl9FQlggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQVggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworLSAgICAgICAgTS54ODYuUl9TUCArPSAyOyAgICAgICAgICAgICAgIC8qIHNraXAgU1AgKi8KKysgICAgICAgIE0ueDg2LlJfU1AgKz0gMjsgICAgICAgIC8qIHNraXAgU1AgKi8KKyAgICAgICAgIE0ueDg2LlJfQlggPSBwb3Bfd29yZCgpOworICAgICAgICAgTS54ODYuUl9EWCA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX0NYID0gcG9wX3dvcmQoKTsKK0BAIC00MjUxLDcgKzQ0OTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiRlM6XG4iKTsKK0BAIC00MjY4LDcgKzQ1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJHUzpcbiIpOworQEAgLTQyODUsNyArNDUzNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY2IC0gcHJlZml4IGZvciAzMi1iaXQgcmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBVEE6XG4iKTsKK0BAIC00Mjk5LDcgKzQ1NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wcmVmaXhfZGF0YSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY3IC0gcHJlZml4IGZvciAzMi1iaXQgYWRkcmVzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUREUjpcbiIpOworQEAgLTQzMTMsMjIgKzQ1NjQsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBpbW07CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URjIoIlBVU0hcdCV4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhpbW0pOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcHVzaF93b3JkKCh1MTYpaW1tKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSBpbW0pOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNDMzOCw3ICs0NTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC00MzUxLDcgKzQ2MDYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDM1OSwxOCArNDYxNCwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00MzgxLDI0ICs0NjM4LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQwNiwxOCArNDY2NSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDI4LDI0ICs0Njg5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQ1MywxOCArNDcxNiwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDc1LDQyICs0NzQwLDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqc3JjcmVnLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogc3JjcmVnLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiByZXM7CisgICAgICAgICAgICAgczE2IGltbTsKKyAKK0BAIC00NTE4LDE2ICs0Nzg3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqc3JjcmVnICogKHMxNilpbW07CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIHNyY3JlZyAqIChzMTYpIGltbTsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNDUzOSwxOCArNDgwOSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzMTYgaW1tOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworLSAgICBpbW0gPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiUFVTSFx0JWRcbiIsIGltbSk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQlwdXNoX2xvbmcoKHMzMilpbW0pOworLSAgICB9IGVsc2UgeworLQlwdXNoX3dvcmQoaW1tKTsKKysgICAgICAgIHB1c2hfbG9uZygoczMyKSBpbW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKGltbSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC00NTYwLDExICs0ODMyLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CistICAgIHM4ICBpbW07CisrICAgIHM4IGltbTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtNDU3NCwyNSArNDg0NywyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjAyLDQyICs0ODc3LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjQ3LDQyICs0OTI2LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjkyLDU3ICs0OTc1LDYyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIHNyY3JlZywgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MzIgcmVzOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpzcmNyZWcgKiAoczE2KWltbTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogc3JjcmVnICogKHMxNikgaW1tOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC00NzU0LDcgKzUwNDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOU0JcbiIpOworQEAgLTQ3NjgsMTMgKzUwNTcsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlNEXG4iKTsKKyAgICAgICAgIGlucyg0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOU1dcbiIpOworICAgICAgICAgaW5zKDIpOworICAgICB9CitAQCAtNDc4Nyw3ICs1MDc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRTQlxuIik7CitAQCAtNDgwMSwxMyArNTA5MywxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFNEXG4iKTsKKyAgICAgICAgIG91dHMoNCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRTV1xuIik7CisgICAgICAgICBvdXRzKDIpOworICAgICB9CitAQCAtNDgyMCw3ICs1MTE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00ODI4LDggKzUxMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorQEAgLTQ4NDIsNyArNTEzNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NTAsOCArNTE0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgaXMgbm90IHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX09GKSkKK0BAIC00ODY0LDcgKzUxNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NzIsOCArNTE2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBjYXJyeSBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkJcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorQEAgLTQ4ODYsNyArNTE4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4OTQsOCArNTE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgY2FycnkgZmxhZyBpcyBjbGVhci4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9DRikpCitAQCAtNDkwOCw3ICs1MjA2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00OTE2LDggKzUyMTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQorQEAgLTQ5MzAsNyArNTIyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ5MzgsOCArNTIzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIGNsZWFyLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1pGKSkKK0BAIC00OTUyLDcgKzUyNTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk2MSw4ICs1MjYyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgZmxhZyBpcyBzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpCRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpCitAQCAtNDk3NSw3ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk4NCw4ICs1Mjg2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSkpCitAQCAtNDk5OCw3ICs1MzAwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTAwNiw4ICs1MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlNcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwMjAsNyArNTMyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwMjgsOCArNTMzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgc2lnbiBmbGFnIGlzIGNsZWFyICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOU1x0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwNDIsNyArNTM0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTA1MCw4ICs1MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIHNldCAoZXZlbiBwYXJpdHkpICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpQXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDY0LDcgKzUzNjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDcyLDggKzUzNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIGNsZWFyIChvZGQgcGFyaXR5KSAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDg2LDcgKzUzOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwOTUsOCArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBzaWduIGZsYWcgbm90IGVxdWFsIHRvIG92ZXJmbG93IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpMXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTExLDcgKzU0MTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTIwLDggKzU0MjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBub3QgZXF1YWwgdG8gb3ZlcmZsb3cgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTM3LDcgKzU0NDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTE0Nyw4ICs1NDU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgb3IgdGhlIHplcm8gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkxFXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTYzLDcgKzU0NzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTczLDggKzU0ODMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgYW5kIHRoZSB6ZXJvIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CitAQCAtNTE4NSwyMyArNTQ5NSwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1OCAoKm9wYzgwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIGFkZF9ieXRlLCAgICAgICAgICAgLyogMDAgKi8KKy0gICAgb3JfYnl0ZSwgICAgICAgICAgICAvKiAwMSAqLworLSAgICBhZGNfYnl0ZSwgICAgICAgICAgIC8qIDAyICovCistICAgIHNiYl9ieXRlLCAgICAgICAgICAgLyogMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKiAwNCAqLworLSAgICBzdWJfYnl0ZSwgICAgICAgICAgIC8qIDA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyogMDYgKi8KKy0gICAgY21wX2J5dGUsICAgICAgICAgICAvKiAwNyAqLworK3N0YXRpYyB1OCgqb3BjODBfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IGQsIHU4IHMpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyogMDAgKi8KKysgICAgICAgIG9yX2J5dGUsICAgICAgICAgICAgICAgIC8qIDAxICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKiAwMiAqLworKyAgICAgICAgc2JiX2J5dGUsICAgICAgICAgICAgICAgLyogMDMgKi8KKysgICAgICAgIGFuZF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA0ICovCisrICAgICAgICBzdWJfYnl0ZSwgICAgICAgICAgICAgICAvKiAwNSAqLworKyAgICAgICAgeG9yX2J5dGUsICAgICAgICAgICAgICAgLyogMDYgKi8KKysgICAgICAgIGNtcF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA3ICovCisgfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC01MjkwLDcgKzU2MDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKK0BAIC01MzA1LDM1ICs1NjE1LDM0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1MTYgKCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSh1MTYgZCwgdTE2IHMpID0KKy17CistICAgIGFkZF93b3JkLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl93b3JkLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX3dvcmQsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl93b3JkLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfd29yZCwgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfd29yZCwgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTE2KCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSAodTE2IGQsIHUxNiBzKSA9IHsKKysgICAgYWRkX3dvcmQsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX3dvcmQsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY193b3JkLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl93b3JkLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF93b3JkLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF93b3JkLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorLXN0YXRpYyB1MzIgKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSh1MzIgZCwgdTMyIHMpID0KKy17CistICAgIGFkZF9sb25nLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl9sb25nLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX2xvbmcsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl9sb25nLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfbG9uZywgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfbG9uZywgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTMyKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSAodTMyIGQsIHUzMiBzKSA9IHsKKysgICAgYWRkX2xvbmcsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX2xvbmcsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY19sb25nLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl9sb25nLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF9sb25nLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF9sb25nLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDgxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01Mzg3LDcgKzU2OTYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTM5OSw4ICs1NzA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTQxNiw3ICs1NzI2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQyOCw4ICs1NzM4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQ0NSw3ICs1NzU2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ1Nyw4ICs1NzY4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ3MiwxMCArNTc4NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC01NDg1LDkgKzU3OTcsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU1MDQsMjMgKzU4MTcsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHU4ICgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkodTggcywgdTggZCkgPQorLXsKKy0gICAgYWRkX2J5dGUsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2J5dGUsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19ieXRlLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfYnl0ZSwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2J5dGUsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9ieXRlLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1OCgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IHMsIHU4IGQpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfYnl0ZSwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfYnl0ZSwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfYnl0ZSwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9ieXRlLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9ieXRlLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2J5dGUsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtNTYwNiw3ICs1OTE5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworQEAgLTU2MjAsMzUgKzU5MzMsMzQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHUxNiAoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pKHUxNiBzLCB1MTYgZCkgPQorLXsKKy0gICAgYWRkX3dvcmQsICAgICAgICAgICAvKjAwICovCistICAgIG9yX3dvcmQsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY193b3JkLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfd29yZCwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX3dvcmQsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF93b3JkLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MTYoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pICh1MTYgcywgdTE2IGQpID0geworKyAgICBhZGRfd29yZCwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3Jfd29yZCwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfd29yZCwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfd29yZCwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfd29yZCwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX3dvcmQsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCistc3RhdGljIHUzMiAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1MzIgZCkgPQorLXsKKy0gICAgYWRkX2xvbmcsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2xvbmcsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19sb25nLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfbG9uZywgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2xvbmcsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9sb25nLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MzIoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTMyIGQpID0geworKyAgICBhZGRfbG9uZywgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfbG9uZywgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfbG9uZywgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfbG9uZywgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfbG9uZywgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2xvbmcsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTU2NjcsNyArNTk3OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisgICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUgCisgICAgICAgICAgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCistICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJBRERcdCIpOworICAgICAgICAgICAgIGJyZWFrOworQEAgLTU3MDAsNyArNjAxMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzExLDggKzYwMjMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzI3LDcgKzYwNDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzM4LDggKzYwNTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzU0LDcgKzYwNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01NzY1LDggKzYwNzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01Nzc5LDEwICs2MDk0LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworQEAgLTU3OTEsOSArNjEwNiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CitAQCAtNTgxMyw3ICs2MTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC01ODUxLDcgKzYxNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgdGVzdF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC01ODY4LDcgKzYxODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01ODg5LDcgKzYyMDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTE0LDcgKzYyMzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTM5LDcgKzYyNTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTUyLDkgKzYyNzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU5NjIsOCArNjI4Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgdGVzdF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNTk4Miw3ICs2MzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MDMwLDcgKzYzNTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC02MDQ5LDcgKzYzNzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDYxLDcgKzYzODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjA3Myw5ICs2Mzk3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqc3JjcmVnID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYwOTIsNyArNjQxNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpzcmNyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTA0LDkgKzY0MjksMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOworICAgICAgICAgICAgIGRlc3R2YWwgPSB0bXA7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjEyMyw3ICs2NDQ5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYxMzUsOSArNjQ2MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTUxLDkgKzY0NzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKK0BAIC02MTY0LDggKzY0OTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKKyAgICAgICAgICAgICAqc3JjcmVnID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB0bXA7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUxNiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02MTg3LDcgKzY1MTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MjIxLDcgKzY1NTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTYyMzgsNyArNjU2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTMyIGRlc3RvZmZzZXQ7CitAQCAtNjI1Nyw3ICs2NTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNjI3OCw3ICs2NjA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNjI5OSw3ICs2NjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNjMxMCw5ICs2NjQzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzMjAsOCArNjY1Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzNDAsNyArNjY3NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjM3OCw3ICs2NzEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTYzOTUsNyArNjczMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNjQxNiw3ICs2NzUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTY0NDEsNyArNjc3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC02NDY2LDcgKzY4MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNjQ3OSw3ICs2ODE4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCitAQCAtNjQ4OSw3ICs2ODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKK0BAIC02NTA5LDcgKzY4NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY1NDcsNyArNjg4OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAqc3JjcmVnOworICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworQEAgLTY1NjQsNDcgKzY5MDUsNzcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fU1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xlYV93b3JkX1JfTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CistICAgIHUxNiAqc3JjcmVnOworICAgICB1aW50IGRlc3RvZmZzZXQ7CisgCistLyoKKy0gKiBUT0RPOiBOZWVkIHRvIGhhbmRsZSBhZGRyZXNzIHNpemUgcHJlZml4IQorLSAqCistICogbGVhICBlYXgsW2VheCtlYngqMl0gPz8KKy0gKi8KKy0gICAgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxFQVx0Iik7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CistICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTMyKSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MTYpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKy0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MzIpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUxNikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CistICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUzMikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTE2KSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogdW5kZWZpbmVkLiAgRG8gbm90aGluZy4gKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNjYxNiw3ICs2OTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY2NTQsNyArNzAyNiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02Njc3LDcgKzcwNDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTY2OTksNyArNzA3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTY3MTgsNyArNzA5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTY3MzcsNyArNzExMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTY3NDcsNyArNzEyMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTY3NTUsNyArNzEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gcG9wX2xvbmcoKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02NzczLDcgKzcxNTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX25vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJOT1BcbiIpOworQEAgLTY3ODYsMTQgKzcxNjQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MDEsMTAgKzcxODEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VDWDsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0NYOworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4MTQsMTQgKzcxOTUsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MjksMTAgKzcyMTIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VEWDsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RYOworLSAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NDIsMTQgKzcyMjYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4NTcsMTAgKzcyNDMsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCWDsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JYOworLSAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NzAsMTQgKzcyNTcsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4ODUsMTAgKzcyNzQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTUDsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NQOworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4OTgsMTQgKzcyODgsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5MTMsMTAgKzczMDUsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCUDsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JQOworLSAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5MjYsMTQgKzczMTksMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NDEsMTAgKzczMzYsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTSTsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NJOworLSAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5NTQsMTQgKzczNTAsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NjksMTAgKzczNjcsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VESTsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RJOworLSAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5ODIsMjUgKzczODEsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jYncodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDV0RFXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNCV1xuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRUFYIHw9IDB4ZmZmZjAwMDA7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9FQVggJj0gMHgwMDAwZmZmZjsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FMICYgMHg4MCkgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweGZmOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweDA7CisgICAgICAgICB9CisgICAgIH0KK0BAIC03MDEyLDEyICs3NDE2LDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY3dkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ0RRXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNXRFxuIik7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URigiQ1dEXG4iKTsKK0BAIC03MDI1LDEzICs3NDMxLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2N3ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaWYgKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRURYID0gMHhmZmZmZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDB4MDsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FYICYgMHg4MDAwKSB7CisgICAgICAgICAgICAgTS54ODYuUl9EWCA9IDB4ZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0RYID0gMHgwOworICAgICAgICAgfQorICAgICB9CitAQCAtNzA0MywxNyArNzQ1MiwyNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgZmFyc2VnLCBmYXJvZmY7CisrICAgIHUzMiBmYXJzZWcsIGZhcm9mZjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CistCWZhcm9mZiA9IGZldGNoX3dvcmRfaW1tKCk7CistCWZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4OiIsIGZhcnNlZyk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBmYXJvZmYpOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgZmFyc2VnLCBmYXJvZmYsICJGQVIgIik7CisrICAgIERFQ09ERV9QUklOVEYoIkNBTExcdCIpOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGZhcm9mZiA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBmYXJzZWcgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgZmFyb2ZmID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHg6IiwgZmFyc2VnKTsKKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGZhcm9mZik7CisrICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBmYXJzZWcsIGZhcm9mZiwgIkZBUiAiKTsKKyAKKyAgICAgLyogWFhYCisgICAgICAqIAorQEAgLTcwNjQsOCArNzQ4MCwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisgICAgIE0ueDg2LlJfQ1MgPSBmYXJzZWc7CistICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKy0gICAgTS54ODYuUl9JUCA9IGZhcm9mZjsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICB9CisrICAgIE0ueDg2LlJfRUlQID0gZmFyb2ZmICYgMHhmZmZmOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC03MDc0LDcgKzc0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfd2FpdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF93YWl0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIldBSVQiKTsKK0BAIC03MDg4LDE0ICs3NTEwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3dhaXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBmbGFnczsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIRkRcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEZcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNzEwNCw4ICs3NTI4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGZsYWdzID0gKE0ueDg2LlJfRUZMRyAmIEZfTVNLKSB8IEZfQUxXQVlTX09OOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhmbGFncyk7CistICAgIH0gZWxzZSB7CistICAgICAgICBwdXNoX3dvcmQoKHUxNilmbGFncyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgZmxhZ3MpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzExNSwxOCArNzU0MCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGRFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUZMRyA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0ZMRyA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTcxMzcsNyArNzU2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDllCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU0FIRlxuIik7CitAQCAtNzE1NCwxMiArNzU4MywxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGFoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMQUhGXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JTS54ODYuUl9BSCA9ICh1OCkoTS54ODYuUl9GTEcgJiAweGZmKTsKKysgICAgTS54ODYuUl9BSCA9ICh1OCkgKE0ueDg2LlJfRkxHICYgMHhmZik7CisgICAgIC8qdW5kb2N1bWVudGVkIFRDKysgYmVoYXZpb3I/Pz8gTm9wZS4gIEl0J3MgZG9jdW1lbnRlZCwgYnV0CisgICAgICAgIHlvdSBoYXZlIHRvbyBsb29rIHJlYWwgaGFyZCB0byBub3RpY2UgaXQuICovCisgICAgIE0ueDg2LlJfQUggfD0gMHgyOworQEAgLTcxNzEsNyArNzYwMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FMX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcxODksNyArNzYyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X0FYX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzE5NywxMyArNzYyOSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdEVBWCxbJTA0eF1cbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRBWCxbJTA0eF1cbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhvZmZzZXQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BWCA9IGZldGNoX2RhdGFfd29yZChvZmZzZXQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC03MjE0LDcgKzc2NDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcyMzIsNyArNzY2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X01fQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzI0MCwxMyArNzY3NiwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdFslMDR4XSxFQVhcbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRbJTA0eF0sQVhcbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBzdG9yZV9kYXRhX2xvbmcob2Zmc2V0LCBNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzdG9yZV9kYXRhX3dvcmQob2Zmc2V0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNzI1NywxNSArNzY5NSwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCAgdmFsOworKyAgICB1OCB2YWw7CisgICAgIHUzMiBjb3VudDsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTU9WU1x0QllURVxuIik7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03MjkyLDcgKzc3MzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdmFsOworICAgICBpbnQgaW5jOworQEAgLTczMDEsMTMgKzc3NDEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03MzI1LDkgKzc3NjYsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNil2YWwpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNikgdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM0MCw3ICs3NzgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMSwgdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03MzQ4LDcgKzc3OTEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTczNTksNyArNzgwMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CisgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKysgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM2Nyw3ICs3ODEwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworLSAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworKyAgICB9CisrICAgIGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworICAgICAgICAgLyogUkVQTkUgICovCisgICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKK0BAIC03MzgxLDcgKzc4MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKK0BAIC03Mzk2LDIxICs3ODQxLDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUzMiB2YWwxLHZhbDI7CisrICAgIHUzMiB2YWwxLCB2YWwyOworICAgICBpbnQgaW5jOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc0MjQsMTAgKzc4NzEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KSB2YWwxLCAodTE2KSB2YWwyKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworQEAgLTc0MzYsNyArNzg4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzQ0NCwxMCArNzg5MywxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICAgICAgY21wX2xvbmcodmFsMSwgdmFsMik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7CisrICAgICAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzQ1NiwxNSArNzkwNiwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03NDc3LDcgKzc5MjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGltbTsKKyAKK0BAIC03NDg2LDcgKzc5MzksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQl0ZXN0X2J5dGUoTS54ODYuUl9BTCwgKHU4KWltbSk7CisrICAgIHRlc3RfYnl0ZShNLng4Ni5SX0FMLCAodTgpIGltbSk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTc0OTUsNyArNzk0OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtNzUwMyw3ICs3OTU3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03NTExLDggKzc5NjYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgdGVzdF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgdGVzdF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHRlc3Rfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzUyMiwxMyArNzk3OCwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNUT1NcdEJZVEVcbiIpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzU0Miw3ICs3OTk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FMKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICB9CitAQCAtNzU1NCw3ICs4MDEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAgICAgdTMyIGNvdW50OworQEAgLTc1NjIsMTMgKzgwMjEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03NTg1LDcgKzgwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0VBWCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FYKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc1OTgsMTQgKzgwNTksMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTE9EU1x0QllURVxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03NjE4LDcgKzgwODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KK0BAIC03NjMwLDcgKzgwOTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworICAgICB1MzIgY291bnQ7CitAQCAtNzYzOCwxMyArODEwMiwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc2NjEsNyArODEyNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0FYID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzY3NCw3ICs4MTQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03NjgyLDcgKzgxNDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTQ0FTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTc2OTgsNyArODE2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzcxMCw3ICs4MTc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZShNLng4Ni5SX0FMLCB2YWwyKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc3MjMsNyArODE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgICAgIHUzMiB2YWw7CitAQCAtNzczMSwxMyArODIwMSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc3NTAsOSArODIyMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc2MCwxNiArODIzMiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CistICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisrICAgIH0KKysgICAgZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisgICAgICAgICAvKiBSRVBORSAgKi8KKyAgICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc3NywxMyArODI1MSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorQEAgLTc3OTUsNyArODI3MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODEzLDcgKzgyOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0NMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzgzMSw3ICs4MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9ETF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4NDksNyArODMyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQkxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODY3LDcgKzgzNDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0FIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzg4NSw3ICs4MzY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9DSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc5MDMsNyArODM4NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfREhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03OTIxLDcgKzg0MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0JIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzkzOSw3ICs4NDIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC03OTQ3LDcgKzg0MzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNzk1NSw4ICs4NDQxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC03OTY2LDcgKzg0NTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTc5NzQsNyArODQ2Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQ1gsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRDWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03OTgyLDggKzg0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTc5OTMsNyArODQ4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODAwMSw3ICs4NDkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVEWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdERYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwMDksOCArODUwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRFggPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RYID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RYID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODAyMCw3ICs4NTEzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MDI4LDcgKzg1MjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUJYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QlgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODAzNiw4ICs4NTMxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQlggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQlggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MDQ3LDcgKzg1NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgwNTUsNyArODU1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFU1AsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRTUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MDYzLDggKzg1NjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgwNzQsNyArODU3Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODA4Miw3ICs4NTgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVCUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEJQLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwOTAsOCArODU5MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlAgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0JQID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0JQID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODEwMSw3ICs4NjAzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MTA5LDcgKzg2MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RVNJLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0U0ksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODExNyw4ICs4NjIxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MTI4LDcgKzg2MzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRElfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgxMzYsNyArODY0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFREksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRESSwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MTQ0LDMxICs4NjUxLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RJID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RJID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMCwgZDAsIGFuZCBkMi4gKi8KKy1zdGF0aWMgdTgoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIHJvbF9ieXRlLAorLSAgICByb3JfYnl0ZSwKKy0gICAgcmNsX2J5dGUsCistICAgIHJjcl9ieXRlLAorLSAgICBzaGxfYnl0ZSwKKy0gICAgc2hyX2J5dGUsCistICAgIHNobF9ieXRlLCAgICAgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCistICAgIHNhcl9ieXRlLAorLX07Cisrc3RhdGljIHU4KCpvcGNEMF9ieXRlX29wZXJhdGlvbltdKSAodTggZCwgdTggcykgPSB7CisrICAgIHJvbF9ieXRlLCByb3JfYnl0ZSwgcmNsX2J5dGUsIHJjcl9ieXRlLCBzaGxfYnl0ZSwgc2hyX2J5dGUsIHNobF9ieXRlLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfYnl0ZSx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTgyNTEsNyArODc1Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CitAQCAtODI2NSwzNiArODc2NiwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMSwgZDEsIGFuZCBkMy4gKi8KKy1zdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSh1MTYgcywgdTggZCkgPQorLXsKKy0gICAgcm9sX3dvcmQsCistICAgIHJvcl93b3JkLAorLSAgICByY2xfd29yZCwKKy0gICAgcmNyX3dvcmQsCistICAgIHNobF93b3JkLAorLSAgICBzaHJfd29yZCwKKy0gICAgc2hsX3dvcmQsICAgICAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKy0gICAgc2FyX3dvcmQsCistfTsKKytzdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSAodTE2IHMsIHU4IGQpID0geworKyAgICByb2xfd29yZCwgcm9yX3dvcmQsIHJjbF93b3JkLCByY3Jfd29yZCwgc2hsX3dvcmQsIHNocl93b3JkLCBzaGxfd29yZCwgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCisrc2FyX3dvcmQsfTsKKyAKKyAvKiB1c2VkIGJ5IG9wY29kZXMgYzEsIGQxLCBhbmQgZDMuICovCistc3RhdGljIHUzMiAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1OCBkKSA9CisteworLSAgICByb2xfbG9uZywKKy0gICAgcm9yX2xvbmcsCistICAgIHJjbF9sb25nLAorLSAgICByY3JfbG9uZywKKy0gICAgc2hsX2xvbmcsCistICAgIHNocl9sb25nLAorLSAgICBzaGxfbG9uZywgICAgICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworLSAgICBzYXJfbG9uZywKKy19OworK3N0YXRpYyB1MzIoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTggZCkgPSB7CisrICAgIHJvbF9sb25nLCByb3JfbG9uZywgcmNsX2xvbmcsIHJjcl9sb25nLCBzaGxfbG9uZywgc2hyX2xvbmcsIHNobF9sb25nLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfbG9uZyx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC04MzU3LDcgKzg4NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04MzgyLDcgKzg4NjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDA3LDcgKzg4OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDIwLDcgKzg5MDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTg0MjksNyArODkxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTg0NDgsNyArODkzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IGltbTsKKyAKK0BAIC04NDU2LDggKzg5NDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRcdCIpOworICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CistCVJFVFVSTl9UUkFDRSgiUkVUIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVUIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfU1AgKz0gaW1tOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtODQ2OCwxMiArODk1OSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVUXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVQiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVQiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04NDgzLDcgKzg5NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sZXNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CitAQCAtODUyMCw3ICs5MDEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfRVMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtODUzMiw3ICs5MDI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xkc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKK0BAIC04NTY5LDcgKzkwNjMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9EUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC04NTgxLDcgKzkwNzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg2MjAsNyArOTExNSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGltbSk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJTJ4XG4iLCBpbW0pOworQEAgLTg2MzYsNyArOTEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTg2NTksNyArOTE1NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODY4MCw3ICs5MTc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NzAxLDcgKzkxOTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg3MTIsMTkgKzkyMTEsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgaW1tKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiAqZGVzdHJlZzsKKy0JCQl1MzIgaW1tOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKysgICAgICAgICAgICB1MzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBpbW07CistICAgICAgICB9IGVsc2UgeworLQkJCXUxNiAqZGVzdHJlZzsKKy0JCQl1MTYgaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworKyAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworQEAgLTg3NDIsMTAgKzkyNDIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUxNiBsb2NhbCxmcmFtZV9wb2ludGVyOworLSAgICB1OCAgbmVzdGluZzsKKysgICAgdTE2IGxvY2FsLCBmcmFtZV9wb2ludGVyOworKyAgICB1OCBuZXN0aW5nOworICAgICBpbnQgaTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC04NzYwLDExICs5MjYxLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBuZXN0aW5nOyBpKyspIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0JQIC09IDI7CisgICAgICAgICAgICAgcHVzaF93b3JkKGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9TUywgTS54ODYuUl9CUCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKyAgICAgICAgIH0KKysgICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKysgICAgfQorICAgICBNLng4Ni5SX0JQID0gZnJhbWVfcG9pbnRlcjsKKy0gICAgTS54ODYuUl9TUCA9ICh1MTYpKE0ueDg2LlJfU1AgLSBsb2NhbCk7CisrICAgIE0ueDg2LlJfU1AgPSAodTE2KSAoTS54ODYuUl9TUCAtIGxvY2FsKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtODc3Myw3ICs5Mjc0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZW50ZXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTEVBVkVcbiIpOworQEAgLTg3ODgsNyArOTI5MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlYXZlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBpbW07CisgCitAQCAtODc5Niw4ICs5Mjk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRGXHQiKTsKKyAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworLQlSRVRVUk5fVFJBQ0UoIlJFVEYiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVRGIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfQ1MgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX1NQICs9IGltbTsKK0BAIC04ODA5LDEyICs5MzEyLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJSRVRGXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVRGIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVURiIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX0NTID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTg4MjUsMTUgKzkzMjksMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnQzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludDModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UIDNcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiWzNdKSB7CistCSgqX1g4NkVNVV9pbnRyVGFiWzNdKSgzKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiWzNdKSAoMyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CitAQCAtODg0OSw3ICs5MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50Myh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW50bnVtOworIAorQEAgLTg4NTksOSArOTM2NiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbnRudW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIHsKKy0JKCpfWDg2RU1VX2ludHJUYWJbaW50bnVtXSkoaW50bnVtKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIChpbnRudW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg4NzcsMTYgKzkzODUsMTggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRvKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UT1xuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkgeworLQlpZiAoX1g4NkVNVV9pbnRyVGFiWzRdKSB7CistCSAgICAoKl9YODZFTVVfaW50clRhYls0XSkoNCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgIGlmIChfWDg2RU1VX2ludHJUYWJbNF0pIHsKKysgICAgICAgICAgICAoKl9YODZFTVVfaW50clRhYls0XSkgKDQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOworICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg5MDMsNyArOTQxMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaXJldCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pcmV0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklSRVRcbiIpOworQEAgLTg5MjEsNyArOTQzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2lyZXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg5OTksNyArOTUxMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTkwMTUsNyArOTUyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTkwNzUsNyArOTU4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTA5OCw3ICs5NjEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MTIxLDcgKzk2MzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworQEAgLTkxMzMsMTkgKzk2NDksMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgZGVzdHZhbDsKKy0JCQl1MzIgKmRlc3RyZWc7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIDEpOworICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJdTE2IGRlc3R2YWw7CistCQkJdTE2ICpkZXN0cmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworQEAgLTkxNjMsNyArOTY4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC05MjQzLDcgKzk3NjEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtOTI1OSw3ICs5Nzc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtOTMyMSw3ICs5ODQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MzQ0LDcgKzk4NjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkzNjcsNyArOTg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTM3OSw3ICs5OTAxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTkzODcsNyArOTkwOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtOTQwNSwxNiArOTkyOCwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhbSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYW0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFNXG4iKTsKKy0gICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgLyogdGhpcyBpcyBhIHN0dXBpZCBlbmNvZGluZy4gKi8KKysgICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgIC8qIHRoaXMgaXMgYSBzdHVwaWQgZW5jb2RpbmcuICovCisgICAgIGlmIChhICE9IDEwKSB7CistCS8qIGZpeDogYWRkIGJhc2UgZGVjb2RpbmcKKy0JICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworICAgICAgICAgREVDT0RFX1BSSU5URigiRVJST1IgREVDT0RJTkcgQUFNXG4iKTsKKyAgICAgICAgIFRSQUNFX1JFR1MoKTsKKyAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtOTQzMCw3ICs5OTU0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFtKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKK0BAIC05NDM4LDggKzk5NjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJBQURcbiIpOworICAgICBhID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgaWYgKGEgIT0gMTApIHsKKy0JLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworLQkgICBhYWRfd29yZCh1MTYgdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFkX3dvcmQodTE2IHZhbCwgaW50IGJhc2UgYSkgKi8KKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkVSUk9SIERFQ09ESU5HIEFBTVxuIik7CisgICAgICAgICBUUkFDRV9SRUdTKCk7CisgICAgICAgICBIQUxUX1NZUygpOworQEAgLTk0NTYsMTQgKzk5ODEsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hsYXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGxhdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgYWRkcjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiWExBVFxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistCWFkZHIgPSAodTE2KShNLng4Ni5SX0JYICsgKHU4KU0ueDg2LlJfQUwpOworKyAgICBhZGRyID0gKHUxNikgKE0ueDg2LlJfQlggKyAodTgpIE0ueDg2LlJfQUwpOworICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKGFkZHIpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0NzUsNyArMTAwMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94bGF0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk0ODYsNyArMTAwMTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgaXApOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0NYIC09IDE7CistICAgIGlmIChNLng4Ni5SX0NYICE9IDAgJiYgIUFDQ0VTU19GTEFHKEZfWkYpKSAgICAgIC8qIENYICE9IDAgYW5kICFaRiAqLworKyAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmICFBQ0NFU1NfRkxBRyhGX1pGKSkgIC8qIENYICE9IDAgYW5kICFaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0OTYsNyArMTAwMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MDcsNyArMTAwMzUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKy0gICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAgICAgLyogQ1ggIT0gMCBhbmQgWkYgKi8KKysgICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAvKiBDWCAhPSAwIGFuZCBaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk1MTcsNyArMTAwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MzgsMTYgKzEwMDY3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfamN4eih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qY3h6KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiB0YXJnZXQ7CistICAgIHM4ICBvZmZzZXQ7CisrICAgIHM4IG9mZnNldDsKKyAKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBvdmVyZmxvdyBmbGFnIGlzIHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKQ1haXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYuUl9DWCA9PSAwKQorQEAgLTk1NjAsMTYgKzEwMDkwLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2pjeHoodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggcG9ydDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBNLng4Ni5SX0FMID0gKCpzeXNfaW5iKShwb3J0KTsKKysgICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikgKHBvcnQpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NTc4LDIzICsxMDEwOSwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlx0Iik7CistCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIkVBWCwleFxuIiwgcG9ydCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiQVgsJXhcbiIsIHBvcnQpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpKHBvcnQpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykocG9ydCk7CisrICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkgKHBvcnQpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykgKHBvcnQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTYwNCwxNiArMTAxMzgsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0lNTV9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShwb3J0LCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKHBvcnQsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NjIyLDIzICsxMDE1NywyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9JTU1fQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X3dvcmRfSU1NX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleCxFQVhcbiIsIHBvcnQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4LEFYXG4iLCBwb3J0KTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICgqc3lzX291dGwpKHBvcnQsIE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgICgqc3lzX291dHcpKHBvcnQsIE0ueDg2LlJfQVgpOworKyAgICAgICAgKCpzeXNfb3V0bCkgKHBvcnQsIE0ueDg2LlJfRUFYKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICgqc3lzX291dHcpIChwb3J0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk2NDgsMTkgKzEwMTg2LDM1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgczE2IGlwOworKyAgICBzMTYgaXAxNjsKKysgICAgczMyIGlwMzI7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CistCURFQ09ERV9QUklOVEYoIkNBTExcdCIpOworLQlpcCA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CistCWlwICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgIC8qIENIRUNLIFNJR04gKi8KKy0JREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpaXApOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgTS54ODYuUl9DUywgaXAsICIiKTsKKysgICAgREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgaXAzMiA9IChzMzIpIGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBpcDMyICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgICAgIC8qIENIRUNLIFNJR04gKi8KKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcDMyKTsKKysgICAgICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBNLng4Ni5SX0NTLCBpcDMyLCAiIik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcDE2ID0gKHMxNikgZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGlwMTYgKz0gKHMxNikgTS54ODYuUl9JUDsgICAgICAgLyogQ0hFQ0sgU0lHTiAqLworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpIGlwMTYpOworKyAgICAgICAgQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIE0ueDg2LlJfQ1MsIGlwMTYsICIiKTsKKysgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDMyICYgMHhmZmZmOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDE2OworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2NjksMTcgKzEwMjIzLDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIGludCBpcDsKKysgICAgdTMyIGlwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBpcCA9IChzMTYpZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgaXAgKz0gKHMxNilNLng4Ni5SX0lQOworLSAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNilpcCk7CistICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSAodTE2KWlwOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGlwID0gKHUzMikgZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgIGlwICs9ICh1MzIpIE0ueDg2LlJfRUlQOworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhcbiIsICh1MzIpIGlwKTsKKysgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICBNLng4Ni5SX0VJUCA9ICh1MzIpIGlwOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgaXAgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgaXAgKz0gKHMxNikgTS54ODYuUl9JUDsKKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcCk7CisrICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIGlwOworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2ODgsMTggKzEwMjUyLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgY3MsIGlwOworKyAgICB1MTYgY3M7CisrICAgIHUzMiBpcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk1QXHRGQVIgIik7CistICAgIGlwID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBpcCA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKyAgICAgY3MgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJTA0eDoiLCBjcyk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgTS54ODYuUl9FSVAgPSBpcCAmIDB4ZmZmZjsKKyAgICAgTS54ODYuUl9DUyA9IGNzOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk3MDksMTUgKzEwMjgwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IHRhcmdldDsKKyAgICAgczggb2Zmc2V0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIG9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CitAQCAtOTcyOSwxMiArMTAzMDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX2J5dGVfQUxfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdEFMLERYXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikoTS54ODYuUl9EWCk7CisrICAgIE0ueDg2LlJfQUwgPSAoKnN5c19pbmIpIChNLng4Ni5SX0RYKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTc0MywxOSArMTAzMTYsMjIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlx0RUFYLERYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOXHRBWCxEWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkoTS54ODYuUl9EWCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KShNLng4Ni5SX0RYKTsKKysgICAgICAgIE0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKSAoTS54ODYuUl9EWCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KSAoTS54ODYuUl9EWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NzY1LDEyICsxMDM0MSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQUxcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShNLng4Ni5SX0RYLCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05Nzc5LDE5ICsxMDM1NiwyMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9EWF9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsRUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgKCpzeXNfb3V0dykoTS54ODYuUl9EWCwgTS54ODYuUl9BWCk7CisrICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTgwMSw3ICsxMDM4MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0RYX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9jayh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMT0NLOlxuIik7CitAQCAtOTgxNiw3ICsxMDM5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQTkVcbiIpOworQEAgLTk4MzAsNyArMTA0MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGYzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQRVxuIik7CitAQCAtOTg0NCw3ICsxMDQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaGFsdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkhBTFRcbiIpOworQEAgLTk4NTgsNyArMTA0NDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbWModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY29tcGxlbWVudCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC05ODczLDcgKzEwNDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21jKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTk4ODUsOSArMTA0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLworKyAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTk5NTMsOSArMTA1MzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAwICovCistICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKysgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDAyMSw5ICsxMDYwNyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDEgKi8KKy0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworKyAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMDg5LDkgKzEwNjc1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdCIpOworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMTIzLDcgKzEwNzA5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgbXVsX2J5dGUoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLworKyAgICAgICAgICAgIG11bF9ieXRlKCpkZXN0cmVnKTsgLyohISEgICovCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTAxNTcsNyArMTA3NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xMDE2NywxMSArMTA3NTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAwICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMTAxODEsOCArMTA3NjgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC0xMDIwOSw3ICsxMDc5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0V09SRCBQVFIgIik7CitAQCAtMTAyMzIsNyArMTA4MjEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdFdPUkQgUFRSICIpOworQEAgLTEwMjU0LDcgKzEwODQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIG11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI3NSw3ICsxMDg2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI5Niw3ICsxMDg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMTcsNyArMTA5MTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMzAsMTEgKzEwOTI0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDAgKi8KKy0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLworKyAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0xMDM0NCw4ICsxMDkzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTEwMzcyLDcgKzEwOTY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBub3RfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDM5NSw3ICsxMDk5MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0V09SRCBQVFIgIik7CitAQCAtMTA0MTcsNyArMTEwMTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDM4LDcgKzExMDM2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDU5LDcgKzExMDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ4MCw3ICsxMTA4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ5MywxMSArMTEwOTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMSAqLworLSAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTEwICovCisrICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdERXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTEwNTA3LDggKzExMTA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCBzcmN2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtMTA1MzUsNyArMTExMzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdFdPUkQgUFRSICIpOworQEAgLTEwNTU4LDcgKzExMTYxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBuZWdfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDU4MCw3ICsxMTE4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MDEsNyArMTEyMDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaW11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MjIsNyArMTEyMjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjQzLDcgKzExMjUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGlkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjU2LDkgKzExMjY0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgICAgIHUzMiBzcmN2YWw7CitAQCAtMTA2NzAsNyArMTEyNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMDY5Niw3ICsxMTMwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IG5vdF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdCIpOworQEAgLTEwNzE1LDcgKzExMzI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gbmVnX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0Iik7CitAQCAtMTA3MzMsMTUgKzExMzQ0LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICAgICBtdWxfbG9uZygqZGVzdHJlZyk7ICAgICAgLyohISEgICovCistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgbXVsX2xvbmcoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0Iik7CisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgICAgIG11bF93b3JkKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KKysgICAgICAgICAgICAgICAgbXVsX3dvcmQoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSA1OgorQEAgLTEwNzUzLDcgKzExMzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTA3NzIsNyArMTEzODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0Iik7CitAQCAtMTA3OTEsNyArMTE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHQiKTsKK0BAIC0xMDgxMiw3ICsxMTQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDgyNyw3ICsxMTQ0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIHNldCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDg0Miw3ICsxMTQ1OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0Yyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2xpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNsZWFyIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NTcsNyArMTE0NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0aSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBlbmFibGUgIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NzIsNyArMTE0OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODg3LDcgKzExNTA3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY2xlYXIgaW50ZXJydXB0cy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDkwMiw3ICsxMTUyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZFX2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1OCBkZXN0dmFsOworQEAgLTEwOTQ0LDEzICsxMTU2NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfYnl0ZShkZXN0dmFsKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfYnl0ZShkZXN0dmFsKTsKK0BAIC0xMTAxOSwxMiArMTE2NDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkVfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworLQl1MTYgKmRlc3RyZWc7CistCXUxNiBkZXN0dmFsLGRlc3R2YWwyOworKyAgICB1MTYgKmRlc3RyZWc7CisrICAgIHUxNiBkZXN0dmFsLCBkZXN0dmFsMjsKKyAKKyAgICAgLyogWWV0IGFub3RoZXIgc3BlY2lhbCBjYXNlIGluc3RydWN0aW9uLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTExMDQwLDE0ICsxMTY2MywxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREV09SRCBQVFIgIik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERXT1JEIFBUUiAiKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CitAQCAtMTEwNzgsNyArMTE3MDMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorQEAgLTExMDg2LDcgKzExNzExLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTA5NSw3ICsxMTcyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAxOiAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKK0BAIC0xMTEwMyw3ICsxMTcyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExMTIsMTMgKzExNzM5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMTI3LDI2ICsxMTc1NCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMTY4LDcgKzExNzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTE4NSw3ICsxMTgxNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExOTQsMTMgKzExODI0LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjA5LDI2ICsxMTgzOSwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMjUwLDcgKzExODgxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTI2Nyw3ICsxMTg5OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEyNzYsMTMgKzExOTA5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjkxLDI2ICsxMTkyNCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMzMwLDcgKzExOTY0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gaW5jX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTEzNDcsNyArMTE5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZWNfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC0xMTM1NiwyNiArMTE5OTIsMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVjX3dvcmQoKmRlc3RyZWcpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk9QRVJBVElPTiBVTkRFRklORUQgMFhGRiBcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSAodTE2KSAoKmRlc3RyZWcpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJPUEVSQVRJT04gVU5ERUZJTkVEIDBYRkYgXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtMTEzODgsNyArMTIwMjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgcHVzaF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTExNDA3LDggKzEyMDQ0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIFNpbmdsZSBieXRlIG9wZXJhdGlvbiBjb2RlIHRhYmxlOgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisteworK3ZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkgKHU4KSA9IHsKKyAvKiAgMHgwMCAqLyB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SLAorIC8qICAweDAxICovIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IsCisgLyogIDB4MDIgKi8geDg2ZW11T3BfYWRkX2J5dGVfUl9STSwKK0BAIC0xMTQxNyw3ICsxMjA1Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgwNSAqLyB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0sCisgLyogIDB4MDYgKi8geDg2ZW11T3BfcHVzaF9FUywKKyAvKiAgMHgwNyAqLyB4ODZlbXVPcF9wb3BfRVMsCistCisgLyogIDB4MDggKi8geDg2ZW11T3Bfb3JfYnl0ZV9STV9SLAorIC8qICAweDA5ICovIHg4NmVtdU9wX29yX3dvcmRfUk1fUiwKKyAvKiAgMHgwYSAqLyB4ODZlbXVPcF9vcl9ieXRlX1JfUk0sCitAQCAtMTE0MjYsNyArMTIwNjEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MGQgKi8geDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0sCisgLyogIDB4MGUgKi8geDg2ZW11T3BfcHVzaF9DUywKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcF90d29fYnl0ZSwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcF9hZGNfYnl0ZV9STV9SLAorIC8qICAweDExICovIHg4NmVtdU9wX2FkY193b3JkX1JNX1IsCisgLyogIDB4MTIgKi8geDg2ZW11T3BfYWRjX2J5dGVfUl9STSwKK0BAIC0xMTQzNSw3ICsxMjA2OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgxNSAqLyB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0sCisgLyogIDB4MTYgKi8geDg2ZW11T3BfcHVzaF9TUywKKyAvKiAgMHgxNyAqLyB4ODZlbXVPcF9wb3BfU1MsCistCisgLyogIDB4MTggKi8geDg2ZW11T3Bfc2JiX2J5dGVfUk1fUiwKKyAvKiAgMHgxOSAqLyB4ODZlbXVPcF9zYmJfd29yZF9STV9SLAorIC8qICAweDFhICovIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0sCitAQCAtMTE0NDQsNyArMTIwNzcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NLAorIC8qICAweDFlICovIHg4NmVtdU9wX3B1c2hfRFMsCisgLyogIDB4MWYgKi8geDg2ZW11T3BfcG9wX0RTLAorLQorIC8qICAweDIwICovIHg4NmVtdU9wX2FuZF9ieXRlX1JNX1IsCisgLyogIDB4MjEgKi8geDg2ZW11T3BfYW5kX3dvcmRfUk1fUiwKKyAvKiAgMHgyMiAqLyB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNLAorQEAgLTExNDUzLDcgKzEyMDg1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDI1ICovIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSwKKyAvKiAgMHgyNiAqLyB4ODZlbXVPcF9zZWdvdnJfRVMsCisgLyogIDB4MjcgKi8geDg2ZW11T3BfZGFhLAorLQorIC8qICAweDI4ICovIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IsCisgLyogIDB4MjkgKi8geDg2ZW11T3Bfc3ViX3dvcmRfUk1fUiwKKyAvKiAgMHgyYSAqLyB4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNLAorQEAgLTExNDYyLDcgKzEyMDkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDJkICovIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcF9zZWdvdnJfQ1MsCisgLyogIDB4MmYgKi8geDg2ZW11T3BfZGFzLAorLQorIC8qICAweDMwICovIHg4NmVtdU9wX3hvcl9ieXRlX1JNX1IsCisgLyogIDB4MzEgKi8geDg2ZW11T3BfeG9yX3dvcmRfUk1fUiwKKyAvKiAgMHgzMiAqLyB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNLAorQEAgLTExNDcxLDcgKzEyMTAxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDM1ICovIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSwKKyAvKiAgMHgzNiAqLyB4ODZlbXVPcF9zZWdvdnJfU1MsCisgLyogIDB4MzcgKi8geDg2ZW11T3BfYWFhLAorLQorIC8qICAweDM4ICovIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IsCisgLyogIDB4MzkgKi8geDg2ZW11T3BfY21wX3dvcmRfUk1fUiwKKyAvKiAgMHgzYSAqLyB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNLAorQEAgLTExNDgwLDcgKzEyMTA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDNkICovIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcF9zZWdvdnJfRFMsCisgLyogIDB4M2YgKi8geDg2ZW11T3BfYWFzLAorLQorIC8qICAweDQwICovIHg4NmVtdU9wX2luY19BWCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcF9pbmNfQ1gsCisgLyogIDB4NDIgKi8geDg2ZW11T3BfaW5jX0RYLAorQEAgLTExNDg5LDcgKzEyMTE3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDQ1ICovIHg4NmVtdU9wX2luY19CUCwKKyAvKiAgMHg0NiAqLyB4ODZlbXVPcF9pbmNfU0ksCisgLyogIDB4NDcgKi8geDg2ZW11T3BfaW5jX0RJLAorLQorIC8qICAweDQ4ICovIHg4NmVtdU9wX2RlY19BWCwKKyAvKiAgMHg0OSAqLyB4ODZlbXVPcF9kZWNfQ1gsCisgLyogIDB4NGEgKi8geDg2ZW11T3BfZGVjX0RYLAorQEAgLTExNDk4LDcgKzEyMTI1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wX2RlY19CUCwKKyAvKiAgMHg0ZSAqLyB4ODZlbXVPcF9kZWNfU0ksCisgLyogIDB4NGYgKi8geDg2ZW11T3BfZGVjX0RJLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wX3B1c2hfQVgsCisgLyogIDB4NTEgKi8geDg2ZW11T3BfcHVzaF9DWCwKKyAvKiAgMHg1MiAqLyB4ODZlbXVPcF9wdXNoX0RYLAorQEAgLTExNTA3LDcgKzEyMTMzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDU1ICovIHg4NmVtdU9wX3B1c2hfQlAsCisgLyogIDB4NTYgKi8geDg2ZW11T3BfcHVzaF9TSSwKKyAvKiAgMHg1NyAqLyB4ODZlbXVPcF9wdXNoX0RJLAorLQorIC8qICAweDU4ICovIHg4NmVtdU9wX3BvcF9BWCwKKyAvKiAgMHg1OSAqLyB4ODZlbXVPcF9wb3BfQ1gsCisgLyogIDB4NWEgKi8geDg2ZW11T3BfcG9wX0RYLAorQEAgLTExNTE2LDE2ICsxMjE0MSwxNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3BfcG9wX0JQLAorIC8qICAweDVlICovIHg4NmVtdU9wX3BvcF9TSSwKKyAvKiAgMHg1ZiAqLyB4ODZlbXVPcF9wb3BfREksCistCisgLyogIDB4NjAgKi8geDg2ZW11T3BfcHVzaF9hbGwsCisgLyogIDB4NjEgKi8geDg2ZW11T3BfcG9wX2FsbCwKKy0vKiAgMHg2MiAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLCAgIC8qIGJvdW5kICovCistLyogIDB4NjMgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBhcnBsICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4NjIgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBib3VuZCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDYzICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJwbCAqLworIC8qICAweDY0ICovIHg4NmVtdU9wX3NlZ292cl9GUywKKyAvKiAgMHg2NSAqLyB4ODZlbXVPcF9zZWdvdnJfR1MsCisgLyogIDB4NjYgKi8geDg2ZW11T3BfcHJlZml4X2RhdGEsCisgLyogIDB4NjcgKi8geDg2ZW11T3BfcHJlZml4X2FkZHIsCistCisgLyogIDB4NjggKi8geDg2ZW11T3BfcHVzaF93b3JkX0lNTSwKKyAvKiAgMHg2OSAqLyB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NLAorIC8qICAweDZhICovIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0sCitAQCAtMTE1MzQsNyArMTIxNTksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NmQgKi8geDg2ZW11T3BfaW5zX3dvcmQsCisgLyogIDB4NmUgKi8geDg2ZW11T3Bfb3V0c19ieXRlLAorIC8qICAweDZmICovIHg4NmVtdU9wX291dHNfd29yZCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTywKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTk8sCisgLyogIDB4NzIgKi8geDg2ZW11T3BfanVtcF9uZWFyX0IsCitAQCAtMTE1NDMsNyArMTIxNjcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NzUgKi8geDg2ZW11T3BfanVtcF9uZWFyX05aLAorIC8qICAweDc2ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9CRSwKKyAvKiAgMHg3NyAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkJFLAorLQorIC8qICAweDc4ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9TLAorIC8qICAweDc5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OUywKKyAvKiAgMHg3YSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfUCwKK0BAIC0xMTU1Miw3ICsxMjE3NSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg3ZCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkwsCisgLyogIDB4N2UgKi8geDg2ZW11T3BfanVtcF9uZWFyX0xFLAorIC8qICAweDdmICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OTEUsCistCisgLyogIDB4ODAgKi8geDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0sCisgLyogIDB4ODEgKi8geDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0sCisgLyogIDB4ODIgKi8geDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0sCitAQCAtMTE1NjEsNyArMTIxODMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ODUgKi8geDg2ZW11T3BfdGVzdF93b3JkX1JNX1IsCisgLyogIDB4ODYgKi8geDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IsCisgLyogIDB4ODcgKi8geDg2ZW11T3BfeGNoZ193b3JkX1JNX1IsCistCisgLyogIDB4ODggKi8geDg2ZW11T3BfbW92X2J5dGVfUk1fUiwKKyAvKiAgMHg4OSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9STV9SLAorIC8qICAweDhhICovIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0sCitAQCAtMTE1NzAsNyArMTIxOTEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3BfbGVhX3dvcmRfUl9NLAorIC8qICAweDhlICovIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNLAorIC8qICAweDhmICovIHg4NmVtdU9wX3BvcF9STSwKKy0KKyAvKiAgMHg5MCAqLyB4ODZlbXVPcF9ub3AsCisgLyogIDB4OTEgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYLAorIC8qICAweDkyICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCwKK0BAIC0xMTU3OSw3ICsxMjE5OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5NSAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAsCisgLyogIDB4OTYgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJLAorIC8qICAweDk3ICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSwKKy0KKyAvKiAgMHg5OCAqLyB4ODZlbXVPcF9jYncsCisgLyogIDB4OTkgKi8geDg2ZW11T3BfY3dkLAorIC8qICAweDlhICovIHg4NmVtdU9wX2NhbGxfZmFyX0lNTSwKK0BAIC0xMTU4OCw3ICsxMjIwNyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcF9wb3BmX3dvcmQsCisgLyogIDB4OWUgKi8geDg2ZW11T3Bfc2FoZiwKKyAvKiAgMHg5ZiAqLyB4ODZlbXVPcF9sYWhmLAorLQorIC8qICAweGEwICovIHg4NmVtdU9wX21vdl9BTF9NX0lNTSwKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0sCisgLyogIDB4YTIgKi8geDg2ZW11T3BfbW92X01fQUxfSU1NLAorQEAgLTExNjA1LDggKzEyMjIzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGFkICovIHg4NmVtdU9wX2xvZHNfd29yZCwKKyAvKiAgMHhhYyAqLyB4ODZlbXVPcF9zY2FzX2J5dGUsCisgLyogIDB4YWQgKi8geDg2ZW11T3Bfc2Nhc193b3JkLAorLQorLQorIC8qICAweGIwICovIHg4NmVtdU9wX21vdl9ieXRlX0FMX0lNTSwKKyAvKiAgMHhiMSAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9DTF9JTU0sCisgLyogIDB4YjIgKi8geDg2ZW11T3BfbW92X2J5dGVfRExfSU1NLAorQEAgLTExNjE1LDcgKzEyMjMxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGI1ICovIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSwKKyAvKiAgMHhiNiAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0sCisgLyogIDB4YjcgKi8geDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NLAorLQorIC8qICAweGI4ICovIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSwKKyAvKiAgMHhiOSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0sCisgLyogIDB4YmEgKi8geDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NLAorQEAgLTExNjI0LDcgKzEyMjM5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGJkICovIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSwKKyAvKiAgMHhiZSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0sCisgLyogIDB4YmYgKi8geDg2ZW11T3BfbW92X3dvcmRfRElfSU1NLAorLQorIC8qICAweGMwICovIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNLAorIC8qICAweGMxICovIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNLAorIC8qICAweGMyICovIHg4NmVtdU9wX3JldF9uZWFyX0lNTSwKK0BAIC0xMTY0MSwxNCArMTIyNTUsMTQgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGNkICovIHg4NmVtdU9wX2ludF9JTU0sCisgLyogIDB4Y2UgKi8geDg2ZW11T3BfaW50bywKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcF9pcmV0LAorLQorIC8qICAweGQwICovIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSwKKyAvKiAgMHhkMSAqLyB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEsCisgLyogIDB4ZDIgKi8geDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCwKKyAvKiAgMHhkMyAqLyB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMLAorIC8qICAweGQ0ICovIHg4NmVtdU9wX2FhbSwKKyAvKiAgMHhkNSAqLyB4ODZlbXVPcF9hYWQsCistLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisgLyogIDB4ZDcgKi8geDg2ZW11T3BfeGxhdCwKKyAvKiAgMHhkOCAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4LAorIC8qICAweGQ5ICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDksCitAQCAtMTE2NTgsNyArMTIyNzIsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZGQgKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlLAorIC8qICAweGRmICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYsCistCisgLyogIDB4ZTAgKi8geDg2ZW11T3BfbG9vcG5lLAorIC8qICAweGUxICovIHg4NmVtdU9wX2xvb3BlLAorIC8qICAweGUyICovIHg4NmVtdU9wX2xvb3AsCitAQCAtMTE2NjcsNyArMTIyODAsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZTUgKi8geDg2ZW11T3BfaW5fd29yZF9BWF9JTU0sCisgLyogIDB4ZTYgKi8geDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMLAorIC8qICAweGU3ICovIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCwKKy0KKyAvKiAgMHhlOCAqLyB4ODZlbXVPcF9jYWxsX25lYXJfSU1NLAorIC8qICAweGU5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0sCisgLyogIDB4ZWEgKi8geDg2ZW11T3BfanVtcF9mYXJfSU1NLAorQEAgLTExNjc2LDcgKzEyMjg4LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wX2luX3dvcmRfQVhfRFgsCisgLyogIDB4ZWUgKi8geDg2ZW11T3Bfb3V0X2J5dGVfRFhfQUwsCisgLyogIDB4ZWYgKi8geDg2ZW11T3Bfb3V0X3dvcmRfRFhfQVgsCistCisgLyogIDB4ZjAgKi8geDg2ZW11T3BfbG9jaywKKyAvKiAgMHhmMSAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wX3JlcG5lLAorQEAgLTExNjg1LDcgKzEyMjk2LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGY1ICovIHg4NmVtdU9wX2NtYywKKyAvKiAgMHhmNiAqLyB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNLAorIC8qICAweGY3ICovIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0sCistCisgLyogIDB4ZjggKi8geDg2ZW11T3BfY2xjLAorIC8qICAweGY5ICovIHg4NmVtdU9wX3N0YywKKyAvKiAgMHhmYSAqLyB4ODZlbXVPcF9jbGksCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvb3BzMi5jIGIvbGlicy94ODZlbXUvb3BzMi5jCitpbmRleCAwNmI3ZjU2Li41ZWQyYmY2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzMi5jCisrKysgYi9saWJzL3g4NmVtdS9vcHMyLmMKK0BAIC01NSwxNiArNTUsMTQgQEAgb3AxIC0gSW5zdHJ1Y3Rpb24gb3AgY29kZQorIFJFTUFSS1M6CisgSGFuZGxlcyBpbGxlZ2FsIG9wY29kZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKy0JdTggb3AyKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2lsbGVnYWxfb3AodTggb3AyKQorIHsKKy0JaW50IG1vZCwgcmwsIHJoOworLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworLQlUUkFDRV9SRUdTKCk7CistCXByaW50aygiJTA0eDolMDR4OiAlMDJYIC8lZCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUhIChtb2Q9JWQgcmw9JWQpXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0yLG9wMiwgcmgsIG1vZCwgcmwpOworKyAgICBTVEFSVF9PRl9JTlNUUigpOworKyAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICBUUkFDRV9SRUdTKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICBNLng4Ni5SX0NTLCBNLng4Ni5SX0lQIC0gMiwgb3AyKTsKKyAgICAgSEFMVF9TWVMoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTczLDU1ICs3MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CistSGFuZGxlcyBvcGNvZGUgMHgwZiwweDAxCistKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfZ3JvdXBfZyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisteworLQlpbnQgbW9kLCBybCwgcmg7CistCXUxNiAqZGVzdHJlZzsKKy0JdWludCBkZXN0b2Zmc2V0OworLQorLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlzd2l0Y2ggKHJoKSB7CistCQljYXNlIDQ6IC8vIFNNU1cgKFN0b3JlIE1hY2hpbmUgU3RhdHVzIFdvcmQpCistCQkJLy8gRGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCistCQkJLy8gQWx3YXlzIHJldHVybnMgMHgxMCAoaW5pdGlhbCB2YWx1ZSBhcyBwZXIgaW50ZWwgbWFudWFsIHZvbHVtZSAzLCBmaWd1cmUgOC0xCistCQkJc3dpdGNoIChtb2QpIHsKKy0JCQkJY2FzZSAwOgorLQkJCQkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkJCQkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIDB4MTApOworLQkJCQkJYnJlYWs7CistCQkJCWNhc2UgMToKKy0JCQkJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JCQkJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAweDEwKTsKKy0JCQkJCWJyZWFrOworLQkJCQljYXNlIDI6CistCQkJCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCQkJCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgMHgxMCk7CistCQkJCQlicmVhazsKKy0JCQkJY2FzZSAzOgorLQkJCQkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JCQkJCSpkZXN0cmVnID0gMHgxMDsKKy0JCQkJCWJyZWFrOworLQkJCX0KKy0JCQlicmVhazsKKy0JCWRlZmF1bHQ6CistCQkJREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIElOIDBGIDAxXG4iKTsKKy0JCQlUUkFDRV9SRUdTKCk7CistCQkJcHJpbnRrKCIlMDR4OiUwNHg6IDBGICUwMlggLyVkIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSEgKG1vZD0lZCBybD0lZClcbiIsCistCQkJCU0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMixvcDIsIHJoLCBtb2QsIHJsKTsKKy0JCQlIQUxUX1NZUygpOworLQkJCWJyZWFrOworLQl9CistCUVORF9PRl9JTlNUUigpOworLX0KKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLVJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcmR0c2ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCisgICAgIHN0YXRpYyB1NjQgY291bnRlciA9IDA7CitAQCAtMTU1LDkwICsxMDgsOTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHg4MC0weDhGCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbG9uZ19qdW1wKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sb25nX2p1bXAodTggb3AyKQorIHsKKyAgICAgczMyIHRhcmdldDsKKy0gICAgY2hhciAqbmFtZSA9IDA7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIC8qIGNvbmRpdGlvbmFsIGp1bXAgdG8gd29yZCBvZmZzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDgwOgorKyAgICBjYXNlIDB4ODA6CisgICAgICAgICBuYW1lID0gIkpPXHQiOworLSAgICAgICAgY29uZCA9ICBBQ0NFU1NfRkxBRyhGX09GKTsKKysgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4MToKKysgICAgY2FzZSAweDgxOgorICAgICAgICAgbmFtZSA9ICJKTk9cdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgyOgorKyAgICBjYXNlIDB4ODI6CisgICAgICAgICBuYW1lID0gIkpCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgzOgorKyAgICBjYXNlIDB4ODM6CisgICAgICAgICBuYW1lID0gIkpOQlx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9DRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODQ6CisrICAgIGNhc2UgMHg4NDoKKyAgICAgICAgIG5hbWUgPSAiSlpcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODU6CisrICAgIGNhc2UgMHg4NToKKyAgICAgICAgIG5hbWUgPSAiSk5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4NjoKKysgICAgY2FzZSAweDg2OgorICAgICAgICAgbmFtZSA9ICJKQkVcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODc6CisrICAgIGNhc2UgMHg4NzoKKyAgICAgICAgIG5hbWUgPSAiSk5CRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4ODoKKysgICAgY2FzZSAweDg4OgorICAgICAgICAgbmFtZSA9ICJKU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4OToKKysgICAgY2FzZSAweDg5OgorICAgICAgICAgbmFtZSA9ICJKTlNcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfU0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhhOgorKyAgICBjYXNlIDB4OGE6CisgICAgICAgICBuYW1lID0gIkpQXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfUEYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhiOgorKyAgICBjYXNlIDB4OGI6CisgICAgICAgICBuYW1lID0gIkpOUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGM6CisrICAgIGNhc2UgMHg4YzoKKyAgICAgICAgIG5hbWUgPSAiSkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhkOgorKyAgICBjYXNlIDB4OGQ6CisgICAgICAgICBuYW1lID0gIkpOTFx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGU6CisrICAgIGNhc2UgMHg4ZToKKyAgICAgICAgIG5hbWUgPSAiSkxFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhmOgorKyAgICBjYXNlIDB4OGY6CisgICAgICAgICBuYW1lID0gIkpOTEVcdCI7CisgICAgICAgICBjb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9QUklOVEYobmFtZSk7CistICAgICh2b2lkKW5hbWU7CisrICAgICh2b2lkKSBuYW1lOworICAgICB0YXJnZXQgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworICAgICB0YXJnZXQgKz0gKHMxNikgTS54ODYuUl9JUDsKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChjb25kKQorLSAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpdGFyZ2V0OworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIHRhcmdldDsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtMjQ3LDg1ICsyMDEsODYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xvbmdfanVtcCh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4OTAtMHg5RgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0gICAgdTggICpkZXN0cmVnOworLSAgICBjaGFyICpuYW1lID0gMDsKKysgICAgdTggKmRlc3RyZWc7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDkwOgorKyAgICBjYXNlIDB4OTA6CisgICAgICAgICBuYW1lID0gIlNFVE9cdCI7CistICAgICAgICBjb25kID0gIEFDQ0VTU19GTEFHKEZfT0YpOworKyAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkxOgorKyAgICBjYXNlIDB4OTE6CisgICAgICAgICBuYW1lID0gIlNFVE5PXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5MjoKKysgICAgY2FzZSAweDkyOgorICAgICAgICAgbmFtZSA9ICJTRVRCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkzOgorKyAgICBjYXNlIDB4OTM6CisgICAgICAgICBuYW1lID0gIlNFVE5CXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX0NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NDoKKysgICAgY2FzZSAweDk0OgorICAgICAgICAgbmFtZSA9ICJTRVRaXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk1OgorKyAgICBjYXNlIDB4OTU6CisgICAgICAgICBuYW1lID0gIlNFVE5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NjoKKysgICAgY2FzZSAweDk2OgorICAgICAgICAgbmFtZSA9ICJTRVRCRVx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NzoKKysgICAgY2FzZSAweDk3OgorICAgICAgICAgbmFtZSA9ICJTRVROQkVcdCI7CisgICAgICAgICBjb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTg6CisrICAgIGNhc2UgMHg5ODoKKyAgICAgICAgIG5hbWUgPSAiU0VUU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5OToKKysgICAgY2FzZSAweDk5OgorICAgICAgICAgbmFtZSA9ICJTRVROU1x0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9TRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWE6CisrICAgIGNhc2UgMHg5YToKKyAgICAgICAgIG5hbWUgPSAiU0VUUFx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1BGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5YjoKKysgICAgY2FzZSAweDliOgorICAgICAgICAgbmFtZSA9ICJTRVROUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWM6CisrICAgIGNhc2UgMHg5YzoKKyAgICAgICAgIG5hbWUgPSAiU0VUTFx0IjsKKyAgICAgICAgIGNvbmQgPSB4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWQ6CisrICAgIGNhc2UgMHg5ZDoKKyAgICAgICAgIG5hbWUgPSAiU0VUTkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDllOgorKyAgICBjYXNlIDB4OWU6CisgICAgICAgICBuYW1lID0gIlNFVExFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDlmOgorKyAgICBjYXNlIDB4OWY6CisgICAgICAgICBuYW1lID0gIlNFVE5MRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorICAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URihuYW1lKTsKKy0gICAgKHZvaWQpbmFtZTsKKysgICAgKHZvaWQpIG5hbWU7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0zNDMsNyArMjk4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgY29uZCA/IDB4MDEgOiAweDAwKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBjb25kID8gMHgwMSA6IDB4MDA7CitAQCAtMzU3LDcgKzMxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEZTXG4iKTsKK0BAIC0zNzEsNyArMzI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRGU1xuIik7CitAQCAtMzg1LDcgKzM0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6IENQVUlEIHRha2VzIEVBWC9FQ1ggYXMgaW5wdXRzLCB3cml0ZXMgRUFYL0VCWC9FQ1gvRURYIGFzIG91dHB1dAorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9jcHVpZCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDUFVJRFxuIik7CitAQCAtMzk5LDExICszNTcsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFx0Iik7CitAQCAtNDE5LDEwICszNzgsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC00MzEsOSArMzkxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorQEAgLTQ0NiwxMCArNDA2LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNDU4LDkgKzQxOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKK0BAIC00NzMsMTAgKzQzNCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTQ4NSwzMCArNDQ3LDMxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTUyMCwxMSArNDgzLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0JdTggc2hpZnQ7CisrICAgIHU4IHNoaWZ0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTSExEXHQiKTsKK0BAIC01NDMsOSArNTA3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNTU3LDcgKzUyMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNTc0LDkgKzUzOSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTU4OCw3ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTYwNSw5ICs1NzEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02MTksMTMgKzU4NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjM0LDkgKzYwMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjQ1LDcgKzYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTY1Nyw3ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02NzcsOSArNjQ2LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02ODksNyArNjU5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTcwNCw5ICs2NzQsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTcxNiw3ICs2ODcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNzMxLDkgKzcwMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNzQzLDI5ICs3MTUsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfbG9uZygqZGVzdHJlZywgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTc3Nyw3ICs3NTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEdTXG4iKTsKK0BAIC03OTEsNyArNzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRHU1xuIik7CitAQCAtODA1LDExICs3ODAsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3BvcF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworQEAgLTgxNyw3ICs3OTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTgyNSwxMyArODAxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtODM5LDE2ICs4MTYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC04NTYsMTMgKzgzMywxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTg3MCwxNiArODQ4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtODg3LDUxICs4NjUsNTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUzMiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyB8PSBtYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKyAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05NDQsMTEgKzkyNCwxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGFjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworLQl1OCBzaGlmdDsKKysgICAgdTggc2hpZnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNITERcdCIpOworQEAgLTk2Nyw5ICs5NDgsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC05ODEsNyArOTYzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05OTgsOSArOTgwLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTAxMiw3ICs5OTUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTEwMjksOSArMTAxMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTEwNDMsMTMgKzEwMjcsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwNTgsOSArMTA0MiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTA2OSw3ICsxMDU0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTA4MSw3ICsxMDY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTEwMSw5ICsxMDg3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTEzLDcgKzExMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTEyOCw5ICsxMTE1LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTQwLDcgKzExMjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTE1NSw5ICsxMTQzLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTY3LDI5ICsxMTU2LDMwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfbG9uZygqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0xMjAxLDcgKzExOTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTEyMTQsMjMgKzEyMDUsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpkZXN0cmVnLChzMzIpc3JjdmFsKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogZGVzdHJlZywgKHMzMikgc3JjdmFsKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtMTI0MCwzOCArMTIzMyw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSBzcmN2YWw7CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIGRlc3RyZWcsIChzMzIpIHNyY3ZhbCk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTEyODEsMzggKzEyNzcsNDEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNilzcmN2YWw7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBkZXN0cmVnICogKHMxNikgc3JjdmFsOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMilzcmN2YWwpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSBzcmN2YWwpOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC0xMzIyLDUxICsxMzIxLDU1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpc3JjdmFsOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogZGVzdHJlZyAqIChzMTYpIHNyY3ZhbDsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKSpzcmNyZWcpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSAqIHNyY3JlZyk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTMyIHJlczsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpKnNyY3JlZzsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSAqIHNyY3JlZzsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTM3OCw5ICsxMzgxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKy0JaW50IG1vZCwgcmgsIHJsOworKyAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworICAgICB1aW50IHNyY29mZnNldDsKKyAKK0BAIC0xNDE1LDcgKzE0MTksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfU1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtMTQyNywxNDggKzE0MzEsMTU0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRyX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0cl9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CistCWludCBtb2QsIHJsLCByaDsKKy0JdWludCBzcmNvZmZzZXQ7CistCWludCBiaXQsZGlzcDsKKy0KKy0JU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0Jc3dpdGNoIChtb2QpIHsKKy0JY2FzZSAwOgorLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyIHNyY3ZhbCxtYXNrOworLQkJCXUzMiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCX0gZWxzZSB7CistCQkJdTE2IHNyY3ZhbCxtYXNrOworLQkJCXUxNiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgJiB+bWFzaykpOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMToKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiBzcmN2YWwsbWFzazsKKy0JCQl1MzIgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgJiB+bWFzayk7CistCQl9IGVsc2UgeworLQkJCXUxNiBzcmN2YWwsbWFzazsKKy0JCQl1MTYgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsICYgfm1hc2spKTsKKy0JCX0KKy0JCWJyZWFrOworLQljYXNlIDI6CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgc3JjdmFsLG1hc2s7CistCQkJdTMyICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsICYgfm1hc2spOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgc3JjdmFsLG1hc2s7CistCQkJdTE2ICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCAmIH5tYXNrKSk7CistCQl9CistCQlicmVhazsKKy0JY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTMyIG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnICY9IH5tYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyAmPSB+bWFzazsKKy0JCX0KKy0JCWJyZWFrOworLQl9CistCURFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKy0JRU5EX09GX0lOU1RSKCk7CisrICAgIGludCBtb2QsIHJsLCByaDsKKysgICAgdWludCBzcmNvZmZzZXQ7CisrICAgIGludCBiaXQsIGRpc3A7CisrCisrICAgIFNUQVJUX09GX0lOU1RSKCk7CisrICAgIERFQ09ERV9QUklOVEYoIkJUUlx0Iik7CisrICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisrICAgIHN3aXRjaCAobW9kKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCAmIH5tYXNrKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAxOgorKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsICYgfm1hc2spKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDI6CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgJiB+bWFzaykpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUxNiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICB9CisrICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKysgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2MDMsNyArMTYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9GUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjE1LDkgKzE2MjUsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xnc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2NTIsNyArMTY2Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9HUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjY0LDcgKzE2NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGdzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTY4NSw3ICsxNjk3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE3MTAsNyArMTcyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNzM1LDcgKzE3NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTc0OCwxMCArMTc2MywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3NTksOSArMTc3NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3ODAsNyArMTc5Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3Z6eF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODE5LDcgKzE4MzYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTgzNiw3ICsxODUzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODQ2LDIzICsxODY0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgY2FzZSA0OgorLQlERUNPREVfUFJJTlRGKCJCVFx0Iik7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiQlRcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JREVDT0RFX1BSSU5URigiQlRTXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFJcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNzoKKy0JREVDT0RFX1BSSU5URigiQlRDXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CistCURFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERVxuIik7CistCVRSQUNFX1JFR1MoKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0zLG9wMiwgKG1vZDw8Nil8KHJoPDwzKXxybCk7CistCUhBTFRfU1lTKCk7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICAgICAgVFJBQ0VfUkVHUygpOworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorKyAgICAgICAgICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAgLSAzLCBvcDIsIChtb2QgPDwgNikgfCAocmggPDwgMykgfCBybCk7CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0xODc2LDIyICsxODk0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1OCBzaGlmdDsKKyAKK0BAIC0xOTAxLDIxICsxOTIwLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CitAQCAtMTkyOSwyMiArMTk0OCwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTggc2hpZnQ7CisgCitAQCAtMTk1NCwyMSArMTk3NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorQEAgLTE5ODIsMjIgKzIwMDIsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHU4IHNoaWZ0OworIAorQEAgLTIwMDcsNzQgKzIwMjgsNzUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0JICAgIHUzMiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTMyIG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJKnNyY3JlZyB8PSBtYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQkqc3JjcmVnICY9IH5tYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQkqc3JjcmVnIF49IG1hc2s7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgKnNyY3JlZyB8PSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0JICAgIHUxNiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQkqc3JjcmVnIHw9IG1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCSpzcmNyZWcgJj0gfm1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCSpzcmNyZWcgXj0gbWFzazsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnICY9IH5tYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0yMDg2LDExICsyMTA4LDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworQEAgLTIwOTgsNyArMjEyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMjEwNiwxMyArMjEyOSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTIxMjAsMTYgKzIxNDQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsIF4gbWFzaykpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgXiBtYXNrKSk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0yMTM3LDEzICsyMTYxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtMjE1MSwxNiArMjE3NiwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgXiBtYXNrKSk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCBeIG1hc2spKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTIxNjgsMTMgKzIxOTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC0yMTgyLDE2ICsyMjA4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCBeIG1hc2spKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsIF4gbWFzaykpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgICAgICAgICAgICAgdTMyIG1hc2s7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworQEAgLTIyMDAsMTkgKzIyMjYsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnIF49IG1hc2s7CistCQl9IGVsc2UgeworLQkJCXUxNiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MTYgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MTYgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTIyMjUsNyArMjI1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic2YodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2JzZih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIyMzMsMTA1ICsyMjYxLDExNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNGXHQiKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0gICAgc3dpdGNoKG1vZCkgeworKyAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKy0gICAgY2FzZSAzOgkJCQkvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMzQxLDcgKzIzODEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzcih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnNyKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjM0OSwxMDUgKzIzOTAsMTE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCU1JcdCIpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLSAgICBzd2l0Y2gobW9kKSB7CisrICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworLSAgICBjYXNlIDM6CQkJCS8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTI0NTcsNyArMjUxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yNDc0LDE4ICsyNTI4LDE5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMzMikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjQ5OSwxOCArMjU1NCwxOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMxNikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczE2KSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworQEAgLTI1MjQsNDQgKzI1ODAsNDYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMxNikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSAoczMyKSgoczgpKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHMzMikgKChzOCkgKiBzcmNyZWcpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHU4ICAqc3JjcmVnOworKyAgICAgICAgICAgIHU4ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpKChzOCkqc3JjcmVnKTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpICgoczgpICogc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMjU3Myw3ICsyNjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI1ODksNyArMjY0OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisrICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHMxNikgZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKK0BAIC0yNTk4LDcgKzI2NTcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjYwNywxOCArMjY2NiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqZGVzdHJlZyA9IChzMzIpKChzMTYpKnNyY3JlZyk7CisrICAgICAgICAqZGVzdHJlZyA9IChzMzIpICgoczE2KSAqIHNyY3JlZyk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMjYyNiw0MCArMjY4NSw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB9CisgCisgLyogSGFuZGxlcyBvcGNvZGVzIDB4YzgtMHhjZiAqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3dhcCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnN3YXAodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNXQVBcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworIAorICAgICBzd2l0Y2ggKG9wMikgeworLQljYXNlIDB4Yzg6CistCSAgICBNLng4Ni5SX0VBWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUFYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Yzk6CistCSAgICBNLng4Ni5SX0VDWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUNYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2E6CistCSAgICBNLng4Ni5SX0VEWCA9IGJzd2FwXzMyKE0ueDg2LlJfRURYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2I6CistCSAgICBNLng4Ni5SX0VCWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2M6CistCSAgICBNLng4Ni5SX0VTUCA9IGJzd2FwXzMyKE0ueDg2LlJfRVNQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Q6CistCSAgICBNLng4Ni5SX0VCUCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2U6CistCSAgICBNLng4Ni5SX0VTSSA9IGJzd2FwXzMyKE0ueDg2LlJfRVNJKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Y6CistCSAgICBNLng4Ni5SX0VESSA9IGJzd2FwXzMyKE0ueDg2LlJfRURJKTsKKy0JICAgIGJyZWFrOworLQlkZWZhdWx0OgorLQkgICAgLyogY2FuJ3QgaGFwcGVuICovCistCSAgICBicmVhazsKKysgICAgY2FzZSAweGM4OgorKyAgICAgICAgTS54ODYuUl9FQVggPSBic3dhcF8zMihNLng4Ni5SX0VBWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGM5OgorKyAgICAgICAgTS54ODYuUl9FQ1ggPSBic3dhcF8zMihNLng4Ni5SX0VDWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNhOgorKyAgICAgICAgTS54ODYuUl9FRFggPSBic3dhcF8zMihNLng4Ni5SX0VEWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNiOgorKyAgICAgICAgTS54ODYuUl9FQlggPSBic3dhcF8zMihNLng4Ni5SX0VCWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNjOgorKyAgICAgICAgTS54ODYuUl9FU1AgPSBic3dhcF8zMihNLng4Ni5SX0VTUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNkOgorKyAgICAgICAgTS54ODYuUl9FQlAgPSBic3dhcF8zMihNLng4Ni5SX0VCUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNlOgorKyAgICAgICAgTS54ODYuUl9FU0kgPSBic3dhcF8zMihNLng4Ni5SX0VTSSk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNmOgorKyAgICAgICAgTS54ODYuUl9FREkgPSBic3dhcF8zMihNLng4Ni5SX0VESSk7CisrICAgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIC8qIGNhbid0IGhhcHBlbiAqLworKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTI2NjksMjUgKzI3MjksMzIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzd2FwKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRG91YmxlIGJ5dGUgb3BlcmF0aW9uIGNvZGUgdGFibGU6CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisteworLS8qICAweDAwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogR3JvdXAgRiAocmluZyAwIFBNKSAgICAgICovCistLyogIDB4MDEgKi8geDg2ZW11T3AyX2dyb3VwX2csICAgICAvKiBHcm91cCBHIChyaW5nIDAgUE0pICAgICAgKi8KKy0vKiAgMHgwMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworLS8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbHNsIChyaW5nIDAgUE0pICAgICAgICAgICovCisrdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkgKHU4KSA9IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEYgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEcgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxzbCAocmluZyAwIFBNKSAgICAgICAgICAqLworIC8qICAweDA0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLS8qICAweDA1ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbG9hZGFsbCAodW5kb2N1bWVudGVkKSAgICovCistLyogIDB4MDYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKy0vKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxvYWRhbGwgKHVuZG9jdW1lbnRlZCkgICAqLworLS8qICAweDA4ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogaW52ZCAocmluZyAwIFBNKSAgICAgICAgICovCistLyogIDB4MDkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnZkIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKyAvKiAgMHgwYSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzA0LDE0ICsyNzcxLDE5IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCistLyogIDB4MjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworLS8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLGRyZWcgKHJpbmcgMCBQTSkgKi8KKy0vKiAgMHgyMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiBjcmVnLHJlZzMyIChyaW5nIDAgUE0pICovCistLyogIDB4MjMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworLS8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLHRyZWcgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMixkcmVnIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IGNyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMix0cmVnIChyaW5nIDAgUE0pICovCisgLyogIDB4MjUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistLyogIDB4MjYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgdHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI2ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiB0cmVnLHJlZzMyIChyaW5nIDAgUE0pICovCisgLyogIDB4MjcgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjggKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjcyMSw3ICsyNzkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgyZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgzMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzMSAqLyB4ODZlbXVPcDJfcmR0c2MsCisgLyogIDB4MzIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjczOCw3ICsyODA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgzZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg0MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzU1LDcgKzI4MjUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3NzIsNyArMjg0MSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4NjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjc4OSw3ICsyODU3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg2ZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yODA2LDcgKzI4NzMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDdkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDgwICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCisgLyogIDB4ODEgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4MiAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorQEAgLTI4MjMsNyArMjg4OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4ZSAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorIC8qICAweDhmICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCistCisgLyogIDB4OTAgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDkxICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKyAvKiAgMHg5MiAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCitAQCAtMjg0MCw3ICsyOTA1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCisgLyogIDB4OWUgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDlmICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKy0KKyAvKiAgMHhhMCAqLyB4ODZlbXVPcDJfcHVzaF9GUywKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcDJfcG9wX0ZTLAorIC8qICAweGEyICovIHg4NmVtdU9wMl9jcHVpZCwKK0BAIC0yODU3LDkgKzI5MjEsMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhhZCAqLyB4ODZlbXVPcDJfc2hyZF9DTCwKKyAvKiAgMHhhZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhhZiAqLyB4ODZlbXVPcDJfaW11bF9SX1JNLAorLQorLS8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworLS8qICAweGIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IGNtcHhjaGcgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhiMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiBjbXB4Y2hnICovCisgLyogIDB4YjIgKi8geDg2ZW11T3AyX2xzc19SX0lNTSwKKyAvKiAgMHhiMyAqLyB4ODZlbXVPcDJfYnRyX1IsCisgLyogIDB4YjQgKi8geDg2ZW11T3AyX2xmc19SX0lNTSwKK0BAIC0yODc0LDkgKzI5MzksMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhiZCAqLyB4ODZlbXVPcDJfYnNyLAorIC8qICAweGJlICovIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0sCisgLyogIDB4YmYgKi8geDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSwKKy0KKy0vKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKy0vKiAgMHhjMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiB4YWRkICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4YzEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogeGFkZCAqLworIC8qICAweGMyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGMzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGM0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI4OTEsNyArMjk1Nyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4Y2QgKi8geDg2ZW11T3AyX2Jzd2FwLAorIC8qICAweGNlICovIHg4NmVtdU9wMl9ic3dhcCwKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcDJfYnN3YXAsCistCisgLyogIDB4ZDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjkwOCw3ICsyOTczLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhkZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHhlMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yOTI1LDcgKzI5ODksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweGYwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3ByaW1fb3BzLmMgYi9saWJzL3g4NmVtdS9wcmltX29wcy5jCitpbmRleCBmZjE3YzNmLi4yNGY3NmI0IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvcHJpbV9vcHMuYworKysrIGIvbGlicy94ODZlbXUvcHJpbV9vcHMuYworQEAgLTEwMiwxOCArMTAyLDIzIEBACisgI2RlZmluZQlQUklNX09QU19OT19SRURFRklORV9BU00KKyAjaW5jbHVkZSAieDg2ZW11L3g4NmVtdWkuaCIKKyAKKysjaWYgZGVmaW5lZChfX0dOVUNfXykKKysjaWYgZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pCisrI2luY2x1ZGUgIng4NmVtdS9wcmltX3g4Nl9nY2MuaCIKKysjZW5kaWYKKysjZW5kaWYKKysKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorLXsKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKytzdGF0aWMgdTMyIHg4NmVtdV9wYXJpdHlfdGFiWzhdID0geworKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorIH07CisgCisgI2RlZmluZSBQQVJJVFkoeCkgICAoKCh4ODZlbXVfcGFyaXR5X3RhYlsoeCkgLyAzMl0gPj4gKCh4KSAlIDMyKSkgJiAxKSA9PSAwKQorQEAgLTEyNSw4OCArMTMwLDk2IEBAIHN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFhX3dvcmQodTE2IGQpCisrdTE2CisrYWFhX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkICs9IDB4NjsKKy0JCWQgKz0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCArPSAweDY7CisrICAgICAgICBkICs9IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFzX3dvcmQodTE2IGQpCisrdTE2CisrYWFzX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkIC09IDB4NjsKKy0JCWQgLT0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCAtPSAweDY7CisrICAgICAgICBkIC09IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFkX3dvcmQodTE2IGQpCisrdTE2CisrYWFkX3dvcmQodTE2IGQpCisgeworLQl1MTYgbDsKKy0JdTggaGIsIGxiOworKyAgICB1MTYgbDsKKysgICAgdTggaGIsIGxiOworIAorLQloYiA9ICh1OCkoKGQgPj4gOCkgJiAweGZmKTsKKy0JbGIgPSAodTgpKChkICYgMHhmZikpOworLQlsID0gKHUxNikoKGxiICsgMTAgKiBoYikgJiAweEZGKTsKKysgICAgaGIgPSAodTgpICgoZCA+PiA4KSAmIDB4ZmYpOworKyAgICBsYiA9ICh1OCkgKChkICYgMHhmZikpOworKyAgICBsID0gKHUxNikgKChsYiArIDEwICogaGIpICYgMHhGRik7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CistCXJldHVybiBsOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhsICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShsICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFBTSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFhbV93b3JkKHU4IGQpCisrdTE2CisrYWFtX3dvcmQodTggZCkKKyB7CisgICAgIHUxNiBoLCBsOworIAorLQloID0gKHUxNikoZCAvIDEwKTsKKy0JbCA9ICh1MTYpKGQgJSAxMCk7CistCWwgfD0gKHUxNikoaCA8PCA4KTsKKysgICAgaCA9ICh1MTYpIChkIC8gMTApOworKyAgICBsID0gKHUxNikgKGQgJSAxMCk7CisrICAgIGwgfD0gKHUxNikgKGggPDwgOCk7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiBsOworIH0KKyAKK0BAIC0yMTQsMTU1ICsyMjcsMTYxIEBAIHUxNiBhYW1fd29yZCh1OCBkKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQURDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBhZGNfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrYWRjX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKy0JCXJlcyA9IDEgKyBkICsgczsKKy0JZWxzZQorLQkJcmVzID0gZCArIHM7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHJlcyA9IDEgKyBkICsgczsKKysgICAgZWxzZQorKyAgICAgICAgcmVzID0gZCArIHM7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhZGNfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYWRjX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorLQkJcmVzID0gMSArIGQgKyBzOworLQllbHNlCistCQlyZXMgPSBkICsgczsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcmVzID0gMSArIGQgKyBzOworKyAgICBlbHNlCisrICAgICAgICByZXMgPSBkICsgczsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGNfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRjX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJbG8gPSAxICsgKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gMSArIGQgKyBzOworLQkJfQorLQllbHNlIHsKKy0JCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gZCArIHM7CistCQl9CistCWhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICBsbyA9IDEgKyAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CisrICAgICAgICByZXMgPSAxICsgZCArIHM7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgICAgIHJlcyA9IGQgKyBzOworKyAgICB9CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKythZGRfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUREIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2FkZF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGRfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRkX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQlyZXMgPSBkICsgczsKKy0JaGkgPSAobG8gPj4gMTYpICsgKGQgPj4gMTYpICsgKHMgPj4gMTYpOworKyAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKyAgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworICAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKyAKKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMzcxLDM5ICszOTAsNDEgQEAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggYW5kX2J5dGUodTggZCwgdTggcykKKyt1OAorK2FuZF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBzZXQgdGhlIGZsYWdzICAqLworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBTkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhbmRfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYW5kX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorICAgICByZXMgPSBkICYgczsKKyAKKyAgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiByZXM7CisgfQorIAorQEAgLTQxMSw0MzMgKzQzMiw0NTYgQEAgdTE2IGFuZF93b3JkKHUxNiBkLCB1MTYgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKythbmRfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIENNUCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggY21wX2J5dGUodTggZCwgdTggcykKKyt1OAorK2NtcF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2NtcF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIGQ7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgY21wX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK2NtcF9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERBQSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZGFhX2J5dGUodTggZCkKKyt1OAorK2RhYV9ieXRlKHU4IGQpCisgeworLQl1MzIgcmVzID0gZDsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCXJlcyArPSA2OworLQkJU0VUX0ZMQUcoRl9BRik7CistCX0KKy0JaWYgKHJlcyA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCXJlcyArPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweEZGKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIHUzMiByZXMgPSBkOworKworKyAgICBpZiAoKGQgJiAweGYpID4gOSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgcmVzICs9IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAocmVzID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgcmVzICs9IDB4NjA7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4RkYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBEQVMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGRhc19ieXRlKHU4IGQpCisrdTgKKytkYXNfYnl0ZSh1OCBkKQorIHsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCWQgLT0gNjsKKy0JCVNFVF9GTEFHKEZfQUYpOworLQl9CistCWlmIChkID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJZCAtPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhkID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkoZCAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIGQ7CisrICAgIGlmICgoZCAmIDB4ZikgPiA5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CisrICAgICAgICBkIC09IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAoZCA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgIGQgLT0gMHg2MDsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICB9CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGQgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGQgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREVDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBkZWNfYnl0ZSh1OCBkKQorK3U4CisrZGVjX2J5dGUodTggZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCistCWJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworLQkvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBERUMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBkZWNfd29yZCh1MTYgZCkKKyt1MTYKKytkZWNfd29yZCh1MTYgZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICAvKiBiYXNlZCBvbiB0aGUgc3ViX2J5dGUgcm91dGluZSwgd2l0aCBzPT0xICovCisgICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworICAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERFQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY19sb25nKHUzMiBkKQorK3UzMgorK2RlY19sb25nKHUzMiBkKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCisgICAgIHJlcyA9IGQgLSAxOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKy0JLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggaW5jX2J5dGUodTggZCkKKyt1OAorK2luY19ieXRlKHU4IGQpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIDE7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoKDEgJiBkKSB8ICh+cmVzKSkgJiAoMSB8IGQpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9ICgoMSAmIGQpIHwgKH5yZXMpKSAmICgxIHwgZCk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGluY193b3JkKHUxNiBkKQorK3UxNgorK2luY193b3JkKHUxNiBkKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoMSAmIGQpIHwgKCh+cmVzKSAmICgxIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTkMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBpbmNfbG9uZyh1MzIgZCkKKyt1MzIKKytpbmNfbG9uZyh1MzIgZCkKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9ICgxICYgZCkgfCAoKH5yZXMpICYgKDEgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggb3JfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrb3JfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTggcmVzOyAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTggcmVzOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIHwgczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIHwgczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBvcl93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKytvcl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUxNiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUxNiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CistCS8qIHNldCB0aGUgY2FycnkgZmxhZyB0byBiZSBiaXQgOCAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgfCBzOworKyAgICAvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBvcl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CisrICAgIHJlcyA9IGQgfCBzOworIAorLQkvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBjYXJyeSBmbGFnIHRvIGJlIGJpdCA4ICovCisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggbmVnX2J5dGUodTggcykKKyt1OAorK25lZ19ieXRlKHU4IHMpCisgeworICAgICByZWdpc3RlciB1OCByZXM7CisgICAgIHJlZ2lzdGVyIHU4IGJjOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTgpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCistCSAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKy0JICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCistCSAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorLQkgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCistCWJjID0gcmVzIHwgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHU4KSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbmVnX3dvcmQodTE2IHMpCisteworLQlyZWdpc3RlciB1MTYgcmVzOworLQlyZWdpc3RlciB1MTYgYmM7CistCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CistCXJlcyA9ICh1MTYpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKy0JICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworLQkgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKy0JICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CistCSAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKy0JYmMgPSByZXMgfCBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKyt1MTYKKytuZWdfd29yZCh1MTYgcykKKyt7CisrICAgIHJlZ2lzdGVyIHUxNiByZXM7CisrICAgIHJlZ2lzdGVyIHUxNiBiYzsKKysKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHUxNikgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5lZ19sb25nKHUzMiBzKQorK3UzMgorK25lZ19sb25nKHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsKKy0JcmVnaXN0ZXIgdTMyIGJjOworLQorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTMyKS1zOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorLQkgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CistCSAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorLQkgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKy0JICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworLQliYyA9IHJlcyB8IHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworKyAgICByZXMgPSAodTMyKSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrCisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorKyAgICAgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CisrICAgICAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorKyAgICAgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKysgICAgICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworKyAgICBiYyA9IHJlcyB8IHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBub3RfYnl0ZSh1OCBzKQorK3U4Cisrbm90X2J5dGUodTggcykKKyB7CistCXJldHVybiB+czsKKysgICAgcmV0dXJuIH5zOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbm90X3dvcmQodTE2IHMpCisrdTE2Cisrbm90X3dvcmQodTE2IHMpCisgeworLQlyZXR1cm4gfnM7CisrICAgIHJldHVybiB+czsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE5PVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5vdF9sb25nKHUzMiBzKQorK3UzMgorK25vdF9sb25nKHUzMiBzKQorIHsKKy0JcmV0dXJuIH5zOworKyAgICByZXR1cm4gfnM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytyY2xfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrLCBjZjsKKyAKKyAgICAgLyogcyBpcyB0aGUgcm90YXRlIGRpc3RhbmNlLiAgSXQgdmFyaWVzIGZyb20gMCAtIDguICovCistCS8qIGhhdmUKKysgICAgLyogaGF2ZQorIAorICAgICAgICBDRiAgQl83IEJfNiBCXzUgQl80IEJfMyBCXzIgQl8xIEJfMCAKKyAKK0BAIC04NjEsOSArOTA1LDkgQEAgdTggcmNsX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXzAKKyAgICAgICAgMykgQl8obi0xKSA8LSBjZgorICAgICAgICA0KSBCXyhuLTIpIC4uIEJfMCA8LSAgYl83IC4uIGJfKDgtKG4tMSkpCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyg4LW4pICAgICAgICAgICAgICovCisgICAgICAgICBjZiA9IChkID4+ICg4IC0gY250KSkgJiAweDE7CitAQCAtODcyLDcgKzkxNiw3IEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICBpbnRvIHRoZSByYW5nZSBCXzcgLi4gQl9jbnQgKi8KKyAgICAgICAgIC8qIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8wICAqLworICAgICAgICAgLyogbm90ZSB0aGF0IHRoZSByaWdodCBoYW5kIHNpZGUgZG9uZSBieSB0aGUgbWFzayAqLworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmY7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpICYgMHhmZjsKKyAKKyAgICAgICAgIC8qIG5vdyB0aGUgaGlnaCBzdHVmZiB3aGljaCByb3RhdGVkIGFyb3VuZCAKKyAgICAgICAgICAgIGludG8gdGhlIHBvc2l0aW9ucyBCX2NudC0yIC4uIEJfMCAqLworQEAgLTg4NCw4MSArOTI4LDgxIEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICByZXMgfD0gKGQgPj4gKDkgLSBjbnQpKSAmIG1hc2s7CisgCisgICAgICAgICAvKiBpZiB0aGUgY2FycnkgZmxhZyB3YXMgc2V0LCBvciBpdCBpbi4gICovCistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisgICAgICAgICAgICAgLyogIEJfKG4tMSkgPC0gY2YgKi8KKyAgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisgICAgICAgICB9CisgICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBiYXNlZCBvbiB0aGUgdmFyaWFibGUgImNmIiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIGNudD09MSwgdGhlbiBpdCBpcyB0aGUgCisgICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKyAgICAgICAgIC8qIHBhcmVudGhlc2l6ZWQgdGhpcyBleHByZXNzaW9uIHNpbmNlIGl0IGFwcGVhcnMgdG8KKyAgICAgICAgICAgIGJlIGNhdXNpbmcgT0YgdG8gYmUgbWlzc2V0ICovCistICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gNikgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworIAorICAgICB9CistCXJldHVybiAodTgpcmVzOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByY2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyY2xfd29yZCh1MTYgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQljZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKy0JCW1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCQlyZXMgfD0gMSA8PCAoY250IC0gMSk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY2xfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyY2xfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CistCQljZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CistCQltYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CisrICAgICAgICBtYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcmNyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jjcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1MzIJcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisgICAgIC8qIAorICAgICAgICBzIGlzIHRoZSByb3RhdGUgZGlzdGFuY2UuICBJdCB2YXJpZXMgZnJvbSAwIC0gOC4KKyAgICAgICAgZCBpcyB0aGUgYnl0ZSBvYmplY3Qgcm90YXRlZC4gIAorQEAgLTk3OSw5ICsxMDIzLDkgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiXyhuKQorICAgICAgICAzKSBCXyg4LW4pIDwtIGNmCisgICAgICAgIDQpIEJfKDcpIC4uIEJfKDgtKG4tMSkpIDwtICBiXyhuLTIpIC4uIGJfKDApCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyhuLTEpICAgICAgICAgICAgICAqLworICAgICAgICAgaWYgKGNudCA9PSAxKSB7CitAQCAtOTkwLDExICsxMDM0LDEyIEBAIHU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICAgICAgMCBpZiBmbGFnIG5vdCBzZXQKKyAgICAgICAgICAgICAgICBub24temVybyBpZiBmbGFnIGlzIHNldC4KKyAgICAgICAgICAgICAgICBkb2luZyBhY2Nlc3NfZmxhZyguLikgIT0gMCBjYXN0cyB0aGF0IGludG8gZWl0aGVyIAorLQkJCSAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorKyAgICAgICAgICAgICAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorICAgICAgICAgICAgICAgIChpLmUuIHBhY2tlZCBiaXQgYXJyYXkgb3IgdW5wYWNrZWQuKQorICAgICAgICAgICAgICAqLworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICBvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIGNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKyAKKyAgICAgICAgIC8qIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl9uICAqLworQEAgLTEwMTYsOTMgKzEwNjEsOTUgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgIHJlcyB8PSAoZCA8PCAoOSAtIGNudCkpOworIAorICAgICAgICAgLyogaWYgdGhlIGNhcnJ5IGZsYWcgd2FzIHNldCwgb3IgaXQgaW4uICAqLworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworICAgICAgICAgICAgIC8qICBCXyg4LW4pIDwtIGNmICovCisgICAgICAgICAgICAgcmVzIHw9IDEgPDwgKDggLSBjbnQpOworICAgICAgICAgfQorICAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgYmFzZWQgb24gdGhlIHZhcmlhYmxlICJjZiIgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKyAgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBjbnQ9PTEsIHRoZW4gaXQgaXMgdGhlIAorICAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCisgICAgICAgICAvKiBwYXJlbnRoZXNpemVkLi4uICovCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkJIEZfT0YpOworLQkJfQorLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gNikgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcmNyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2CisrcmNyX3dvcmQodTE2IGQsIHU4IHMpCisgeworLQl1MzIgcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQljZiA9IGQgJiAweDE7CistCQkJb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKy0JCX0gZWxzZQorLQkJCWNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKy0JCW1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CistCQlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCXJlcyB8PSAoZCA8PCAoMTcgLSBjbnQpKTsKKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJCXJlcyB8PSAxIDw8ICgxNiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAxNCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICByZXMgfD0gKGQgPDwgKDE3IC0gY250KSk7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoMTYgLSBjbnQpOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY3JfbG9uZyh1MzIgZCwgdTggcykKKy17CistCXUzMiByZXMsIGNudDsKKy0JdTMyIG1hc2ssIGNmLCBvY2YgPSAwOworLQorLQkvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMykgIT0gMCkgeworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJY2YgPSBkICYgMHgxOworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistCQl9IGVsc2UKKy0JCQljZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlpZiAoY250ICE9IDEpCistCQkJcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3Jjcl9sb25nKHUzMiBkLCB1OCBzKQorK3sKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisrCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICBpZiAoY250ICE9IDEpCisrICAgICAgICAgICAgcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9sX2J5dGUodTggZCwgdTggcykKKyt1OAorK3JvbF9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTEyMSw4NyArMTE2OCw5MCBAQCB1OCByb2xfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICBJRiBuID4gMCAKKyAgICAgICAgMSkgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKQorICAgICAgICAyKSBCXyhuLTEpIC4uIEJfKDApIDwtICBiXyg3KSAuLiBiXyg4LW4pCistCSAqLworKyAgICAgKi8KKyAgICAgcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworLQkJLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworLQkJcmVzID0gKGQgPDwgY250KTsKKysgICAgaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworKyAgICAgICAgLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworKyAgICAgICAgcmVzID0gKGQgPDwgY250KTsKKyAKKy0JCS8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKysgICAgICAgIC8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKysgICAgICAgIG1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKyAKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCS8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorLQkJICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKy0JCQkJCQkJIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb2xfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8IGNudCk7CistCQltYXNrID0gKDEgPDwgY250KSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorLQkJCQkJCQkgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHJvbF9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3JvbF9sb25nKHUzMiBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgY250KTsKKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMzIgLSBjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCistCQkJCQkJCSBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gMzApICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMzIpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMyIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDMwKSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTIxOSw5ICsxMjY5LDkgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgSUYgbiA+IDAgCisgICAgICAgIDEpIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl8obikKKyAgICAgICAgMikgQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKQorLQkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeyAgICAgICAgICAgLyogbm90IGEgdHlwbywgZG8gbmFkYSBpZiBjbnQ9PTAgKi8KKysgICAgICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDgpICE9IDApIHsgICAvKiBub3QgYSB0eXBvLCBkbyBuYWRhIGlmIGNudD09MCAqLworICAgICAgICAgLyogQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKSAqLworICAgICAgICAgcmVzID0gKGQgPDwgKDggLSBjbnQpKTsKKyAKK0BAIC0xMjMxLDI5MSArMTI4MSwzMTcgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAKKyAgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyIAorICAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfQ0YpOworLQkJLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorICAgICAgICAgICAgeG9yIG9mIHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzLiAgQmxlY2NrLiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDYpLCBGX09GKTsKKy0JfSBlbHNlIGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9DRik7CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gNiksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb3Jfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb3Jfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworLQkJbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByb3JfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyb3JfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzazsKKysgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworKyAgICAgICAgcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2hsX2J5dGUodTggZCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCQkvKiBsYXN0IGJpdCBzaGlmdGVkIG91dCBnb2VzIGludG8gY2FycnkgZmxhZyAqLworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSBkIDw8IGNudDsKKy0JCQljZiA9IGQgJiAoMSA8PCAoOCAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gKHU4KSBkOworLQkJfQorKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKworKyAgICAgICAgLyogbGFzdCBiaXQgc2hpZnRlZCBvdXQgZ29lcyBpbnRvIGNhcnJ5IGZsYWcgKi8KKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDggLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTgpIGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQkvKiBOZWVkcyBzaW1wbGlmaWNhdGlvbi4gKi8KKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwKSA9PSAweDgwKSBeCistCQkJCQkJCQkJIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksCistCQkJLyogd2FzIChNLng4Ni5SX0ZMRyZGX0NGKT09Rl9DRikpLCAqLworLQkJCQkJCQkJCUZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgLyogTmVlZHMgc2ltcGxpZmljYXRpb24uICovCisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MCkgPT0gMHg4MCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyAoTS54ODYuUl9GTEcmRl9DRik9PUZfQ0YpKSwgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2hsX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2hsX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9ICh1MTYpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJCSAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorLQkJCQkJCQkJCUZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICAgICAgfQorLSAgICB9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBpZiAocyA8IDE2KSB7CisrICAgICAgICBjbnQgPSBzICUgMTY7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IGQgPDwgY250OworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTE2KSBkOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwKSA9PSAweDgwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsX2xvbmcodTMyIGQsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgzMiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKy0JCQkJCQkJCSAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuIHJlczsKKyt1MzIKKytzaGxfbG9uZyh1MzIgZCwgdTggcykKKyt7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrCisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2hyX2J5dGUodTggZCwgdTggcykKKy17CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gZCA+PiBjbnQ7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAodTgpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiA2KSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMtMSkpICYgMHgxLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKyt1OAorK3Nocl9ieXRlKHU4IGQsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IGQgPj4gY250OworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9ICh1OCkgZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDYpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMgLSAxKSkgJiAweDEsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocl93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3Nocl93b3JkKHUxNiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKyAKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworICAgICAgICAgfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNocl9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3Nocl9sb25nKHUzMiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAzMikgeworLQkJY250ID0gcyAlIDMyOworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICByZXMgPSBkOworICAgICAgICAgfQorICAgICAgICAgaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHJlcyA9IDA7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgIH0KKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMTUyNCw1OTIgKzE2MDAsNjM0IEBAIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNBUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2FyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Nhcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZiwgbWFzaywgc2Y7CisgCistCXJlcyA9IGQ7CistCXNmID0gZCAmIDB4ODA7CisrICAgIHJlcyA9IGQ7CisrICAgIHNmID0gZCAmIDB4ODA7CisgICAgIGNudCA9IHMgJSA4OworLQlpZiAoY250ID4gMCAmJiBjbnQgPCA4KSB7CistCQltYXNrID0gKDEgPDwgKDggLSBjbnQpKSAtIDE7CistCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoc2YpIHsKKy0JCQlyZXMgfD0gfm1hc2s7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDgpIHsKKysgICAgaWYgKGNudCA+IDAgJiYgY250IDwgOCkgeworKyAgICAgICAgbWFzayA9ICgxIDw8ICg4IC0gY250KSkgLSAxOworKyAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKHNmKSB7CisrICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKGNudCA+PSA4KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IDA7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2FyX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwOworICAgICBjbnQgPSBzICUgMTY7CistCXJlcyA9IGQ7CistCWlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisgICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKyAgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworICAgICAgICAgfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgfSBlbHNlIGlmIChjbnQgPj0gMTYpIHsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDE2KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmY7CistCQkJU0VUX0ZMQUcoRl9DRik7CistCQkJQ0xFQVJfRkxBRyhGX1pGKTsKKy0JCQlTRVRfRkxBRyhGX1NGKTsKKy0JCQlTRVRfRkxBRyhGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrc2FyX2xvbmcodTMyIGQsIHU4IHMpCisgeworICAgICB1MzIgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwMDAwMDsKKyAgICAgY250ID0gcyAlIDMyOworLQlyZXMgPSBkOworLQlpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworKyAgICByZXMgPSBkOworKyAgICBpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworICAgICAgICAgbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKy0JCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworICAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgfD0gfm1hc2s7CisgICAgICAgICB9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDMyKSB7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDMyKSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmZmZmZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gMDsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNobGRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorLXsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2LWNudCkpOworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKyt1MTYKKytzaGxkX3dvcmQodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3sKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysKKysgICAgaWYgKHMgPCAxNikgeworKyAgICAgICAgY250ID0gcyAlIDE2OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2IC0gY250KSk7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSExEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzItY250KSk7CistCQkJY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3NobGRfbG9uZyh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDMyKSB7CisrICAgICAgICBjbnQgPSBzICUgMzI7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocmRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3UxNgorK3NocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gKGQgPj4gY250KSB8IChmaWxsIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFJEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hyZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisrdTMyCisrc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMzIpIHsKKy0JCWNudCA9IHMgJSAzMjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgaWYgKHMgPCAzMikgeworKyAgICAgICAgY250ID0gcyAlIDMyOworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IChkID4+IGNudCkgfCAoZmlsbCA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiByZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0JCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzYmJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2JiX2J5dGUodTggZCwgdTggcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCistCQlyZXMgPSBkIC0gcyAtIDE7CistCWVsc2UKKy0JCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICByZXMgPSBkIC0gcyAtIDE7CisrICAgIGVsc2UKKysgICAgICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQkIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzYmJfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2Cisrc2JiX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorICAgICAgICAgcmVzID0gZCAtIHMgLSAxOworICAgICBlbHNlCisgICAgICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNCQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzYmJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKyAgICAgICAgIHJlcyA9IGQgLSBzIC0gMTsKKyAgICAgZWxzZQorICAgICAgICAgcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzdWJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc3ViX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK3N1Yl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNVQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzdWJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2J5dGUodTggZCwgdTggcykKKyt2b2lkCisrdGVzdF9ieXRlKHU4IGQsIHU4IHMpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCisgICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworICAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFRFU1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyt2b2lkCisrdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCAmIHM7CisrICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIC8qIEFGID09IGRvbnQgY2FyZSAqLworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorK3ZvaWQKKyt0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkICYgczsKKysgICAgcmVzID0gZCAmIHM7CisgCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFhPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggeG9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3hvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgXiBzOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBYT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiB4b3Jfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisreG9yX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIF4gczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIF4gczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgWE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgeG9yX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK3hvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCBeIHM7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2J5dGUodTggcykKKyt2b2lkCisraW11bF9ieXRlKHU4IHMpCisgeworLQlzMTYgcmVzID0gKHMxNikoKHM4KU0ueDg2LlJfQUwgKiAoczgpcyk7CisrICAgIHMxNiByZXMgPSAoczE2KSAoKHM4KSBNLng4Ni5SX0FMICogKHM4KSBzKTsKKyAKKy0JTS54ODYuUl9BWCA9IHJlczsKKy0JaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW11bF93b3JkKHUxNiBzKQorK3ZvaWQKKytpbXVsX3dvcmQodTE2IHMpCisgeworLQlzMzIgcmVzID0gKHMxNilNLng4Ni5SX0FYICogKHMxNilzOworKyAgICBzMzIgcmVzID0gKHMxNikgTS54ODYuUl9BWCAqIChzMTYpIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKy0JfQorKyAgICBNLng4Ni5SX0FYID0gKHUxNikgcmVzOworKyAgICBNLng4Ni5SX0RYID0gKHUxNikgKHJlcyA+PiAxNik7CisrICAgIGlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmdfZGlyZWN0KHUzMiAqcmVzX2xvLCB1MzIqIHJlc19oaSx1MzIgZCwgdTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZ19kaXJlY3QodTMyICogcmVzX2xvLCB1MzIgKiByZXNfaGksIHUzMiBkLCB1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXM2NCByZXMgPSAoczMyKWQgKiAoczMyKXM7CisrICAgIHM2NCByZXMgPSAoczY0KSAoczMyKSBkICogKHMzMikgczsKKyAKKy0JKnJlc19sbyA9ICh1MzIpcmVzOworLQkqcmVzX2hpID0gKHUzMikocmVzID4+IDMyKTsKKysgICAgKnJlc19sbyA9ICh1MzIpIHJlczsKKysgICAgKnJlc19oaSA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglkX2xvLGRfaGksZF9zaWduOworLQl1MzIJc19sbyxzX2hpLHNfc2lnbjsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlpZiAoKGRfc2lnbiA9IGQgJiAweDgwMDAwMDAwKSAhPSAwKQorLQkJZCA9IC1kOworLQlkX2xvID0gZCAmIDB4RkZGRjsKKy0JZF9oaSA9IGQgPj4gMTY7CistCWlmICgoc19zaWduID0gcyAmIDB4ODAwMDAwMDApICE9IDApCistCQlzID0gLXM7CistCXNfbG8gPSBzICYgMHhGRkZGOworLQlzX2hpID0gcyA+PiAxNjsKKy0JcmxvX2xvID0gZF9sbyAqIHNfbG87CistCXJsb19oaSA9IChkX2hpICogc19sbyArIGRfbG8gKiBzX2hpKSArIChybG9fbG8gPj4gMTYpOworLQlyaGlfbG8gPSBkX2hpICogc19oaSArIChybG9faGkgPj4gMTYpOworLQkqcmVzX2xvID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JKnJlc19oaSA9IHJoaV9sbzsKKy0JaWYgKGRfc2lnbiAhPSBzX3NpZ24pIHsKKy0JCWQgPSB+KnJlc19sbzsKKy0JCXMgPSAoKChkICYgMHhGRkZGKSArIDEpID4+IDE2KSArIChkID4+IDE2KTsKKy0JCSpyZXNfbG8gPSB+KnJlc19sbysxOworLQkJKnJlc19oaSA9IH4qcmVzX2hpKyhzID4+IDE2KTsKKy0JCX0KKysgICAgdTMyIGRfbG8sIGRfaGksIGRfc2lnbjsKKysgICAgdTMyIHNfbG8sIHNfaGksIHNfc2lnbjsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGlmICgoZF9zaWduID0gZCAmIDB4ODAwMDAwMDApICE9IDApCisrICAgICAgICBkID0gLWQ7CisrICAgIGRfbG8gPSBkICYgMHhGRkZGOworKyAgICBkX2hpID0gZCA+PiAxNjsKKysgICAgaWYgKChzX3NpZ24gPSBzICYgMHg4MDAwMDAwMCkgIT0gMCkKKysgICAgICAgIHMgPSAtczsKKysgICAgc19sbyA9IHMgJiAweEZGRkY7CisrICAgIHNfaGkgPSBzID4+IDE2OworKyAgICBybG9fbG8gPSBkX2xvICogc19sbzsKKysgICAgcmxvX2hpID0gKGRfaGkgKiBzX2xvICsgZF9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CisrICAgIHJoaV9sbyA9IGRfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CisrICAgICpyZXNfbG8gPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICAqcmVzX2hpID0gcmhpX2xvOworKyAgICBpZiAoZF9zaWduICE9IHNfc2lnbikgeworKyAgICAgICAgZCA9IH4qcmVzX2xvOworKyAgICAgICAgcyA9ICgoKGQgJiAweEZGRkYpICsgMSkgPj4gMTYpICsgKGQgPj4gMTYpOworKyAgICAgICAgKnJlc19sbyA9IH4qcmVzX2xvICsgMTsKKysgICAgICAgICpyZXNfaGkgPSB+KnJlc19oaSArIChzID4+IDE2KTsKKysgICAgfQorICNlbmRpZgorIH0KKyAKK0BAIC0yMTE3LDUzICsyMjM1LDU5IEBAIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmcodTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZyh1MzIgcykKKyB7CistCWltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCZNLng4Ni5SX0VEWCxNLng4Ni5SX0VBWCxzKTsKKy0JaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CistCQkoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworLQl9CisrICAgIGltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCAmTS54ODYuUl9FRFgsIE0ueDg2LlJfRUFYLCBzKTsKKysgICAgaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CisrICAgICAgICAoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX2J5dGUodTggcykKKyt2b2lkCisrbXVsX2J5dGUodTggcykKKyB7CistCXUxNiByZXMgPSAodTE2KShNLng4Ni5SX0FMICogcyk7CisrICAgIHUxNiByZXMgPSAodTE2KSAoTS54ODYuUl9BTCAqIHMpOworIAorLQlNLng4Ni5SX0FYID0gcmVzOworLQlpZiAoTS54ODYuUl9BSCA9PSAwKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKE0ueDg2LlJfQUggPT0gMCkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX3dvcmQodTE2IHMpCisrdm9pZAorK211bF93b3JkKHUxNiBzKQorIHsKKy0JdTMyIHJlcyA9IE0ueDg2LlJfQVggKiBzOworKyAgICB1MzIgcmVzID0gTS54ODYuUl9BWCAqIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmIChNLng4Ni5SX0RYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICB9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIHJlczsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIChyZXMgPj4gMTYpOworKyAgICBpZiAoTS54ODYuUl9EWCA9PSAwKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisgICAgIH0KKyB9CisgCitAQCAtMjE3MSwzNiArMjI5NSwzOCBAQCB2b2lkIG11bF93b3JkKHUxNiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIG11bF9sb25nKHUzMiBzKQorK3ZvaWQKKyttdWxfbG9uZyh1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXU2NCByZXMgPSAodTMyKU0ueDg2LlJfRUFYICogKHUzMilzOworKyAgICB1NjQgcmVzID0gKHU2NCkgTS54ODYuUl9FQVggKiBzOworIAorLQlNLng4Ni5SX0VBWCA9ICh1MzIpcmVzOworLQlNLng4Ni5SX0VEWCA9ICh1MzIpKHJlcyA+PiAzMik7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgcmVzOworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglhLGFfbG8sYV9oaTsKKy0JdTMyCXNfbG8sc19oaTsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlhID0gTS54ODYuUl9FQVg7CistCWFfbG8gPSBhICYgMHhGRkZGOworLQlhX2hpID0gYSA+PiAxNjsKKy0Jc19sbyA9IHMgJiAweEZGRkY7CistCXNfaGkgPSBzID4+IDE2OworLQlybG9fbG8gPSBhX2xvICogc19sbzsKKy0JcmxvX2hpID0gKGFfaGkgKiBzX2xvICsgYV9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CistCXJoaV9sbyA9IGFfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CistCU0ueDg2LlJfRUFYID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JTS54ODYuUl9FRFggPSByaGlfbG87CisrICAgIHUzMiBhLCBhX2xvLCBhX2hpOworKyAgICB1MzIgc19sbywgc19oaTsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGEgPSBNLng4Ni5SX0VBWDsKKysgICAgYV9sbyA9IGEgJiAweEZGRkY7CisrICAgIGFfaGkgPSBhID4+IDE2OworKyAgICBzX2xvID0gcyAmIDB4RkZGRjsKKysgICAgc19oaSA9IHMgPj4gMTY7CisrICAgIHJsb19sbyA9IGFfbG8gKiBzX2xvOworKyAgICBybG9faGkgPSAoYV9oaSAqIHNfbG8gKyBhX2xvICogc19oaSkgKyAocmxvX2xvID4+IDE2KTsKKysgICAgcmhpX2xvID0gYV9oaSAqIHNfaGkgKyAocmxvX2hpID4+IDE2KTsKKysgICAgTS54ODYuUl9FQVggPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICBNLng4Ni5SX0VEWCA9IHJoaV9sbzsKKyAjZW5kaWYKKyAKKy0JaWYgKE0ueDg2LlJfRURYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgaWYgKE0ueDg2LlJfRURYID09IDApIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKyAgICAgfQorIH0KKyAKK0BAIC0yMjA4LDMwOSArMjMzNCwzMTkgQEAgdm9pZCBtdWxfbG9uZyh1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaWRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2lkaXZfYnl0ZSh1OCBzKQorIHsKKyAgICAgczMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IChzMTYpTS54ODYuUl9BWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgIGR2ZCA9IChzMTYpIE0ueDg2LlJfQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzOCkgczsKKysgICAgbW9kID0gZHZkICUgKHM4KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKyAgICAgICAgIHJldHVybjsKKy0JfQorLQlkaXYgPSBkdmQgLyAoczgpczsKKy0JbW9kID0gZHZkICUgKHM4KXM7CistCWlmIChhYnMoZGl2KSA+IDB4N2YpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKy0JTS54ODYuUl9BSCA9IChzOCkgbW9kOworKyAgICB9CisrICAgIE0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKysgICAgTS54ODYuUl9BSCA9IChzOCkgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSURJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpZGl2X3dvcmQodTE2IHMpCisrdm9pZAorK2lkaXZfd29yZCh1MTYgcykKKyB7CistCXMzMiBkdmQsIGRpdiwgbW9kOworKyAgICBzMzIgZHZkLCBkaXYsIG1vZDsKKyAKKy0JZHZkID0gKCgoczMyKU0ueDg2LlJfRFgpIDw8IDE2KSB8IE0ueDg2LlJfQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMTYpczsKKy0JbW9kID0gZHZkICUgKHMxNilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgZHZkID0gKCgoczMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAoczE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAoczE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9BWCA9ICh1MTYpZGl2OworLQlNLng4Ni5SX0RYID0gKHUxNiltb2Q7CisrICAgIE0ueDg2LlJfQVggPSAodTE2KSBkaXY7CisrICAgIE0ueDg2LlJfRFggPSAodTE2KSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGlkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisraWRpdl9sb25nKHUzMiBzKQorIHsKKyAjaWZkZWYJX19IQVNfTE9OR19MT05HX18KKy0JczY0IGR2ZCwgZGl2LCBtb2Q7CistCistCWR2ZCA9ICgoKHM2NClNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMzIpczsKKy0JbW9kID0gZHZkICUgKHMzMilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmZmZmZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorKyAgICBzNjQgZHZkLCBkaXYsIG1vZDsKKysKKysgICAgZHZkID0gKCgoczY0KSBNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzMzIpIHM7CisrICAgIG1vZCA9IGR2ZCAlIChzMzIpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4N2ZmZmZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisgI2Vsc2UKKy0JczMyIGRpdiA9IDAsIG1vZDsKKy0JczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CistCXUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworLQl1MzIgYWJzX3MgPSBzICYgMHg3RkZGRkZGRjsKKy0JdTMyIGFic19oX2R2ZCA9IGhfZHZkICYgMHg3RkZGRkZGRjsKKy0JdTMyIGhfcyA9IGFic19zID4+IDE7CistCXUzMiBsX3MgPSBhYnNfcyA8PCAzMTsKKy0JaW50IGNvdW50ZXIgPSAzMTsKKy0JaW50IGNhcnJ5OworLQorLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkbyB7CistCQlkaXYgPDw9IDE7CistCQljYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7CistCQkKKy0JCWlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQlhYnNfaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKy0JCQlsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKy0JCQkJOiAobF9kdmQgLSBsX3MpOworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBhYnNfcyA8PCAoLS1jb3VudGVyKTsKKy0JCQlkaXYgfD0gMTsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0JCQorLQl9IHdoaWxlIChjb3VudGVyID4gLTEpOworLQkvKiBvdmVyZmxvdyAqLworLQlpZiAoYWJzX2hfZHZkIHx8IChsX2R2ZCA+IGFic19zKSkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JLyogc2lnbiAqLworLQlkaXYgfD0gKChoX2R2ZCAmIDB4MTAwMDAwMDApIF4gKHMgJiAweDEwMDAwMDAwKSk7CistCW1vZCA9IGxfZHZkOworKyAgICBzMzIgZGl2ID0gMCwgbW9kOworKyAgICBzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKysgICAgdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CisrICAgIHUzMiBhYnNfcyA9IHMgJiAweDdGRkZGRkZGOworKyAgICB1MzIgYWJzX2hfZHZkID0gaF9kdmQgJiAweDdGRkZGRkZGOworKyAgICB1MzIgaF9zID0gYWJzX3MgPj4gMTsKKysgICAgdTMyIGxfcyA9IGFic19zIDw8IDMxOworKyAgICBpbnQgY291bnRlciA9IDMxOworKyAgICBpbnQgY2Fycnk7CisrCisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRvIHsKKysgICAgICAgIGRpdiA8PD0gMTsKKysgICAgICAgIGNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKysKKysgICAgICAgIGlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CisrICAgICAgICAgICAgaF9zID4+PSAxOworKyAgICAgICAgICAgIGxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgYWJzX2hfZHZkIC09IChoX3MgKyBjYXJyeSk7CisrICAgICAgICAgICAgbF9kdmQgPSBjYXJyeSA/ICgoMHhGRkZGRkZGRiAtIGxfcykgKyBsX2R2ZCArIDEpCisrICAgICAgICAgICAgICAgIDogKGxfZHZkIC0gbF9zKTsKKysgICAgICAgICAgICBoX3MgPj49IDE7CisrICAgICAgICAgICAgbF9zID0gYWJzX3MgPDwgKC0tY291bnRlcik7CisrICAgICAgICAgICAgZGl2IHw9IDE7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisrCisrICAgIH0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CisrICAgIC8qIG92ZXJmbG93ICovCisrICAgIGlmIChhYnNfaF9kdmQgfHwgKGxfZHZkID4gYWJzX3MpKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICAvKiBzaWduICovCisrICAgIGRpdiB8PSAoKGhfZHZkICYgMHgxMDAwMDAwMCkgXiAocyAmIDB4MTAwMDAwMDApKTsKKysgICAgbW9kID0gbF9kdmQ7CisgCisgI2VuZGlmCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCVNFVF9GTEFHKEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9FQVggPSAodTMyKWRpdjsKKy0JTS54ODYuUl9FRFggPSAodTMyKW1vZDsKKysgICAgTS54ODYuUl9FQVggPSAodTMyKSBkaXY7CisrICAgIE0ueDg2LlJfRURYID0gKHUzMikgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2Rpdl9ieXRlKHU4IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IE0ueDg2LlJfQVg7CisrICAgIGR2ZCA9IE0ueDg2LlJfQVg7CisgICAgIGlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisgICAgICAgICByZXR1cm47CisgICAgIH0KKy0JZGl2ID0gZHZkIC8gKHU4KXM7CistCW1vZCA9IGR2ZCAlICh1OClzOworLQlpZiAoYWJzKGRpdikgPiAweGZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZGl2ID0gZHZkIC8gKHU4KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTgpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4ZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAodTgpZGl2OworLQlNLng4Ni5SX0FIID0gKHU4KW1vZDsKKysgICAgfQorKyAgICBNLng4Ni5SX0FMID0gKHU4KSBkaXY7CisrICAgIE0ueDg2LlJfQUggPSAodTgpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfd29yZCh1MTYgcykKKyt2b2lkCisrZGl2X3dvcmQodTE2IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9ICgoKHUzMilNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZHZkID0gKCgodTMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAodTE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworICAgICB9CistCWRpdiA9IGR2ZCAvICh1MTYpczsKKy0JbW9kID0gZHZkICUgKHUxNilzOworLQlpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZGl2ID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworIAorLQlNLng4Ni5SX0FYID0gKHUxNilkaXY7CistCU0ueDg2LlJfRFggPSAodTE2KW1vZDsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIGRpdjsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisrZGl2X2xvbmcodTMyIHMpCisgeworICNpZmRlZglfX0hBU19MT05HX0xPTkdfXworLQl1NjQgZHZkLCBkaXYsIG1vZDsKKy0KKy0JZHZkID0gKCgodTY0KU0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZGl2ID0gZHZkIC8gKHUzMilzOworLQltb2QgPSBkdmQgJSAodTMyKXM7CistCWlmIChhYnMoZGl2KSA+IDB4ZmZmZmZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CisrICAgIHU2NCBkdmQsIGRpdiwgbW9kOworKworKyAgICBkdmQgPSAoKCh1NjQpIE0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHUzMikgczsKKysgICAgbW9kID0gZHZkICUgKHUzMikgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHhmZmZmZmZmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKyAjZWxzZQorLQlzMzIgZGl2ID0gMCwgbW9kOworLQlzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKy0JdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CistCistCXUzMiBoX3MgPSBzOworLQl1MzIgbF9zID0gMDsKKy0JaW50IGNvdW50ZXIgPSAzMjsKKy0JaW50IGNhcnJ5OworLQkJCistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRvIHsKKy0JCWRpdiA8PD0gMTsKKy0JCWNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKy0JCQorLQkJaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQloX2R2ZCAtPSAoaF9zICsgY2FycnkpOworLQkJCWxfZHZkID0gY2FycnkgPyAoKDB4RkZGRkZGRkYgLSBsX3MpICsgbF9kdmQgKyAxKQorLQkJCQk6IChsX2R2ZCAtIGxfcyk7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IHMgPDwgKC0tY291bnRlcik7CistCQkJZGl2IHw9IDE7CistCQkJY29udGludWU7CistCQl9CistCQkKKy0JfSB3aGlsZSAoY291bnRlciA+IC0xKTsKKy0JLyogb3ZlcmZsb3cgKi8KKy0JaWYgKGhfZHZkIHx8IChsX2R2ZCA+IHMpKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQltb2QgPSBsX2R2ZDsKKysgICAgczMyIGRpdiA9IDAsIG1vZDsKKysgICAgczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CisrICAgIHUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworKworKyAgICB1MzIgaF9zID0gczsKKysgICAgdTMyIGxfcyA9IDA7CisrICAgIGludCBjb3VudGVyID0gMzI7CisrICAgIGludCBjYXJyeTsKKysKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZG8geworKyAgICAgICAgZGl2IDw8PSAxOworKyAgICAgICAgY2FycnkgPSAobF9kdmQgPj0gbF9zKSA/IDAgOiAxOworKworKyAgICAgICAgaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKysgICAgICAgICAgICBsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKysgICAgICAgICAgICAgICAgOiAobF9kdmQgLSBsX3MpOworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGRpdiB8PSAxOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICB9IHdoaWxlIChjb3VudGVyID4gLTEpOworKyAgICAvKiBvdmVyZmxvdyAqLworKyAgICBpZiAoaF9kdmQgfHwgKGxfZHZkID4gcykpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIG1vZCA9IGxfZHZkOworICNlbmRpZgorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlTRVRfRkxBRyhGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisgCistCU0ueDg2LlJfRUFYID0gKHUzMilkaXY7CistCU0ueDg2LlJfRURYID0gKHUzMiltb2Q7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgZGl2OworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbnMoaW50IHNpemUpCisrdm9pZAorK2lucyhpbnQgc2l6ZSkKKyB7CistCWludCBpbmMgPSBzaXplOworKyAgICBpbnQgaW5jID0gc2l6ZTsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7CistCQlpbmMgPSAtc2l6ZTsKKy0JfQorLQlpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICAgICAgaW5jID0gLXNpemU7CisrICAgIH0KKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogaW4gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKy0JCXUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKy0JCQkJCSBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworKyAgICAgICAgdTMyIGNvdW50ID0gKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgPworKyAgICAgICAgICAgICAgICAgICAgIE0ueDg2LlJfRUNYIDogTS54ODYuUl9DWCk7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmIpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmIpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbncpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbncpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmwpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmwpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistCQlNLng4Ni5SX0NYID0gMDsKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCU0ueDg2LlJfRUNYID0gMDsKKysgICAgICAgIE0ueDg2LlJfQ1ggPSAwOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworICAgICAgICAgfQorLQkJTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICBjYXNlIDE6CistCQkJc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5iKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5iKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW53KShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW53KSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CistCQkJc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5sKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5sKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorIH0KKyAKK0BAIC0yNTE4LDYzICsyNjU0LDY1IEBAIHZvaWQgaW5zKGludCBzaXplKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1VUIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBvdXRzKGludCBzaXplKQorK3ZvaWQKKytvdXRzKGludCBzaXplKQorIHsKKyAgICAgaW50IGluYyA9IHNpemU7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpIHsKKyAgICAgICAgIGluYyA9IC1zaXplOworICAgICB9CistCWlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogb3V0IHVudGlsIENYIGlzIFpFUk8uICovCistCQl1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CistCQkJCQkgTS54ODYuUl9FQ1ggOiBNLng4Ni5SX0NYKTsKKysgICAgICAgIHUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKysgICAgICAgICAgICAgICAgICAgICBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQkoKnN5c19vdXRiKShNLng4Ni5SX0RYLAorLQkJCQkJCSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKy0JCQkJTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICAgICAgICAgICgqc3lzX291dGIpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCSgqc3lzX291dHcpKE0ueDg2LlJfRFgsCistCQkJCQkJIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworLQkJCQlNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwKKy0JCQkJCQkgZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CistCQkJCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9DWCA9IDA7CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQlNLng4Ni5SX0VDWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0NYID0gMDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIE0ueDg2LlJfRUNYID0gMDsKKyAgICAgICAgIH0KKy0JCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorLQkJCSgqc3lzX291dGIpKE0ueDg2LlJfRFgsCistCQkJCQkgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJKCpzeXNfb3V0dykoTS54ODYuUl9EWCwKKy0JCQkJCSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAoKnN5c19vdXR3KSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKy0JCQkoKnN5c19vdXRsKShNLng4Ni5SX0RYLAorLQkJCQkJIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICgqc3lzX291dGwpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0JCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KKyB9CisgCitAQCAtMjU4NSwxMSArMjcyMywxMiBAQCBhZGRyCS0gQWRkcmVzcyB0byBmZXRjaCB3b3JkIGZyb20KKyBSRU1BUktTOgorIEZldGNoZXMgYSB3b3JkIGZyb20gZW11bGF0b3IgbWVtb3J5IHVzaW5nIGFuIGFic29sdXRlIGFkZHJlc3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKQorK3UxNgorK21lbV9hY2Nlc3Nfd29yZChpbnQgYWRkcikKKyB7CistREIoCWlmIChDSEVDS19NRU1fQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorLQlyZXR1cm4gKCpzeXNfcmR3KShhZGRyKTsKKysgICAgREIoaWYgKENIRUNLX01FTV9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorKyAgICAgICAgcmV0dXJuICgqc3lzX3JkdykgKGFkZHIpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI1OTgsMTIgKzI3MzcsMTMgQEAgUHVzaGVzIGEgd29yZCBvbnRvIHRoZSBzdGFjay4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMsIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHB1c2hfd29yZCh1MTYgdykKKyt2b2lkCisrcHVzaF93b3JkKHUxNiB3KQorIHsKKy1EQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCistCU0ueDg2LlJfU1AgLT0gMjsKKy0JKCpzeXNfd3J3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1AsIHcpOworKyAgICBEQihpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCisrICAgICAgICBNLng4Ni5SX1NQIC09IDI7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCwgdyk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjYxMiwxMiArMjc1MiwxMyBAQCBQdXNoZXMgYSBsb25nIG9udG8gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgcHVzaF9sb25nKHUzMiB3KQorK3ZvaWQKKytwdXNoX2xvbmcodTMyIHcpCisgeworLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JTS54ODYuUl9TUCAtPSA0OworLQkoKnN5c193cmwpKCgodTMyKU0ueDg2LlJfU1MgPDwgNCkgICsgTS54ODYuUl9TUCwgdyk7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIE0ueDg2LlJfU1AgLT0gNDsKKysgICAgKCpzeXNfd3JsKSAoKCh1MzIpIE0ueDg2LlJfU1MgPDwgNCkgKyBNLng4Ni5SX1NQLCB3KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjI2LDE1ICsyNzY3LDE2IEBAIFBvcHMgYSB3b3JkIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBwb3Bfd29yZCh2b2lkKQorK3UxNgorK3BvcF93b3JkKHZvaWQpCisgeworLQlyZWdpc3RlciB1MTYgcmVzOworKyAgICByZWdpc3RlciB1MTYgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDI7CistCXJldHVybiByZXM7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkdykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gMjsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjQzLDE0ICsyNzg1LDE1IEBAIFBvcHMgYSBsb25nIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBwb3BfbG9uZyh2b2lkKQorK3UzMgorK3BvcF9sb25nKHZvaWQpCisgeworICAgICByZWdpc3RlciB1MzIgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmRsKSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDQ7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkbCkgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gNDsKKyAgICAgcmV0dXJuIHJlczsKKyB9CisgCitAQCAtMjY1OCw0NSArMjgwMSw1OSBAQCBEQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorIFJFTUFSS1M6CisgQ1BVSUQgdGFrZXMgRUFYL0VDWCBhcyBpbnB1dHMsIHdyaXRlcyBFQVgvRUJYL0VDWC9FRFggYXMgb3V0cHV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGNwdWlkICh2b2lkKQorLXsKKy0JdTMyIGZlYXR1cmUgPSBNLng4Ni5SX0VBWDsKKy0KKy0Jc3dpdGNoIChmZWF0dXJlKSB7CistCWNhc2UgMDoKKy0JCS8qIFJlZ2FyZGxlc3MgaWYgd2UgaGF2ZSByZWFsIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUsIHRoZSBlbXVsYXRvcgorLQkJICogd2lsbCBvbmx5IHN1cHBvcnQgdXB0byBmZWF0dXJlIDEsIHdoaWNoIHdlIHNldCBpbiByZWdpc3RlciBFQVguCistCQkgKiBSZWdpc3RlcnMgRUJYOkVEWDpFQ1ggY29udGFpbiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgQ1BVLgorLQkJICovCistCQlNLng4Ni5SX0VBWCA9IDE7CistCQkvKiBFQlg6RURYOkVDWCA9ICJHZW51aW5lSW50ZWwiICovCistCQlNLng4Ni5SX0VCWCA9IDB4NzU2ZTY1NDc7CistCQlNLng4Ni5SX0VEWCA9IDB4NDk2NTZlNjk7CistCQlNLng4Ni5SX0VDWCA9IDB4NmM2NTc0NmU7CistCQlicmVhazsKKy0JY2FzZSAxOgorLQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSB4ODYgY29tcGF0aWJsZSBoYXJkd2FyZSwgd2UgcmV0dXJuIHZhbHVlcyBmcm9tIGFuCistCQkgKiBJbnRlbCA0ODZkeDQ7IHdoaWNoIHdhcyBvbmUgb2YgdGhlIGZpcnN0IHByb2Nlc3NvcnMgdG8gaGF2ZSBDUFVJRC4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAweDAwMDAwNDgwOworLQkJTS54ODYuUl9FQlggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FQ1ggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FRFggPSAweDAwMDAwMDAyOwkvKiBWTUUgKi8KKy0JCS8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCistCQkgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKy0JCSAqLworLQkJTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKy0JCWJyZWFrOworLQlkZWZhdWx0OgorLQkJLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworLQkJICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorLQkJICogbnVtYmVycy4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAwOworLQkJTS54ODYuUl9FQlggPSAwOworLQkJTS54ODYuUl9FQ1ggPSAwOworLQkJTS54ODYuUl9FRFggPSAwOworLQkJYnJlYWs7CistCX0KKy19Cisrdm9pZAorK2NwdWlkKHZvaWQpCisreworKyAgICB1MzIgZmVhdHVyZSA9IE0ueDg2LlJfRUFYOworIAorKyNpZmRlZiBYODZFTVVfSEFTX0hXX0NQVUlECisrICAgIC8qIElmIHRoZSBwbGF0Zm9ybSBhbGxvd3MgaXQsIHdlIHdpbGwgYmFzZSBvdXIgdmFsdWVzIG9uIHRoZSByZWFsCisrICAgICAqIHJlc3VsdHMgZnJvbSB0aGUgQ1BVSUQgaW5zdHJ1Y3Rpb24uICBXZSBsaW1pdCBzdXBwb3J0IHRvIHRoZQorKyAgICAgKiBmaXJzdCB0d28gZmVhdHVyZXMsIGFuZCB0aGUgcmVzdWx0cyBvZiB0aG9zZSBhcmUgc2FuaXRpemVkLgorKyAgICAgKi8KKysgICAgaWYgKGZlYXR1cmUgPD0gMSkKKysgICAgICAgIGh3X2NwdWlkKCZNLng4Ni5SX0VBWCwgJk0ueDg2LlJfRUJYLCAmTS54ODYuUl9FQ1gsICZNLng4Ni5SX0VEWCk7CisrI2VuZGlmCisrCisrICAgIHN3aXRjaCAoZmVhdHVyZSkgeworKyAgICBjYXNlIDA6CisrICAgICAgICAvKiBSZWdhcmRsZXNzIGlmIHdlIGhhdmUgcmVhbCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlLCB0aGUgZW11bGF0b3IKKysgICAgICAgICAqIHdpbGwgb25seSBzdXBwb3J0IHVwdG8gZmVhdHVyZSAxLCB3aGljaCB3ZSBzZXQgaW4gcmVnaXN0ZXIgRUFYLgorKyAgICAgICAgICogUmVnaXN0ZXJzIEVCWDpFRFg6RUNYIGNvbnRhaW4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIENQVS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAxOworKyNpZm5kZWYgWDg2RU1VX0hBU19IV19DUFVJRAorKyAgICAgICAgLyogRUJYOkVEWDpFQ1ggPSAiR2VudWluZUludGVsIiAqLworKyAgICAgICAgTS54ODYuUl9FQlggPSAweDc1NmU2NTQ3OworKyAgICAgICAgTS54ODYuUl9FRFggPSAweDQ5NjU2ZTY5OworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAweDZjNjU3NDZlOworKyNlbmRpZgorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMToKKysjaWZuZGVmIFg4NkVNVV9IQVNfSFdfQ1BVSUQKKysgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgeDg2IGNvbXBhdGlibGUgaGFyZHdhcmUsIHdlIHJldHVybiB2YWx1ZXMgZnJvbSBhbgorKyAgICAgICAgICogSW50ZWwgNDg2ZHg0OyB3aGljaCB3YXMgb25lIG9mIHRoZSBmaXJzdCBwcm9jZXNzb3JzIHRvIGhhdmUgQ1BVSUQuCisrICAgICAgICAgKi8KKysgICAgICAgIE0ueDg2LlJfRUFYID0gMHgwMDAwMDQ4MDsKKysgICAgICAgIE0ueDg2LlJfRUJYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRUNYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRURYID0gMHgwMDAwMDAwMjsgICAgICAgLyogVk1FICovCisrI2Vsc2UKKysgICAgICAgIC8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCisrICAgICAgICAgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKysjZW5kaWYKKysgICAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworKyAgICAgICAgICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorKyAgICAgICAgICogbnVtYmVycy4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAwOworKyAgICAgICAgTS54ODYuUl9FQlggPSAwOworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworKyAgICAgICAgTS54ODYuUl9FRFggPSAwOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvc3lzLmMgYi9saWJzL3g4NmVtdS9zeXMuYworaW5kZXggNGQ5MGVhMy4uYzUxNGRkZSAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3N5cy5jCisrKysgYi9saWJzL3g4NmVtdS9zeXMuYworQEAgLTQ3LDIyMyArNDcsMTMzIEBACisgI2luY2x1ZGUgIng4NmVtdS9wcmltX29wcy5oIgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrI2VuZGlmCisgCistWDg2RU1VX3N5c0VudgkJX1g4NkVNVV9lbnY7CQkvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZSAqLworLVg4NkVNVV9pbnRyRnVuY3MJX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisrI2lmZGVmIF9fR05VQ19fCisgCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy0jaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkKKy0vKiB0byBjb3BlIHdpdGggYnJva2VuIGVnY3MtMS4xLjIgOi0oKCgoICovCistCistI2RlZmluZSBBTFBIQV9VQUxPQURTCistLyoKKy0gKiBpbmxpbmUgZnVuY3Rpb25zIHRvIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcworLSAqIGZyb20gbGludXgvaW5jbHVkZS9hc20tYWxwaGEvdW5hbGlnbmVkLmgKKy0gKi8KKy0KKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy0KKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistc3RydWN0IF9fdW5hX3U2NCB7IHVuc2lnbmVkIGxvbmcgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UzMiB7IHVuc2lnbmVkIGludCAgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UxNiB7IHVuc2lnbmVkIHNob3J0IHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07CistI2VuZGlmCisrLyogRGVmaW5lIHNvbWUgcGFja2VkIHN0cnVjdHVyZXMgdG8gdXNlIHdpdGggdW5hbGlnbmVkIGFjY2Vzc2VzICovCisrCisrc3RydWN0IF9fdW5hX3U2NCB7CisrICAgIHU2NCB4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyt9OworK3N0cnVjdCBfX3VuYV91MzIgeworKyAgICB1MzIgeCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisrfTsKKytzdHJ1Y3QgX191bmFfdTE2IHsKKysgICAgdTE2IHggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworK307CisrCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBsb2FkcyAqLworIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbGRxX3UodW5zaWduZWQgbG9uZyAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1NjQKKytsZHFfdSh1NjQgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dHFsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRxaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoNysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkbF91KHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1MzIKKytsZGxfdSh1MzIgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dGxsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRsaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoMysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkd191KHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0JY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlyZXR1cm4gcHRyLT54OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjI7CistCV9fYXNtX18oImxkcV91ICUwLCUzXG5cdCIKKy0JCSJsZHFfdSAlMSwlNFxuXHQiCistCQkiZXh0d2wgJTAsJTIsJTBcblx0IgorLQkJImV4dHdoICUxLCUyLCUxIgorLQkJOiI9JnIiIChyMSksICI9JnIiIChyMikKKy0JCToiciIgKHIxMSksCistCQkgIm0iICgqcjExKSwKKy0JCSAibSIgKCooY29uc3QgdW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpKTsKKy0JcmV0dXJuIHIxIHwgcjI7CistI2VuZGlmCisrICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICopIHA7CisrCisrICAgIHJldHVybiBwdHItPng7CisgfQorIAorLS8qCistICogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgCistICovCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgKi8KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0cV91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3FoICU2LCU3LCU1XG5cdCIKKy0JCSJpbnNxbCAlNiwlNywlNFxuXHQiCistCQkibXNrcWggJTMsJTcsJTNcblx0IgorLQkJIm1za3FsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSg3KyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0bF91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RsX3UodTMyIHZhbCwgdTMyICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQlzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistCXB0ci0+eCA9IHI1OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjIscjMscjQ7CistCistCV9fYXNtX18oImxkcV91ICUzLCUxXG5cdCIKKy0JCSJsZHFfdSAlMiwlMFxuXHQiCistCQkiaW5zbGggJTYsJTcsJTVcblx0IgorLQkJImluc2xsICU2LCU3LCU0XG5cdCIKKy0JCSJtc2tsaCAlMywlNywlM1xuXHQiCistCQkibXNrbGwgJTIsJTcsJTJcblx0IgorLQkJImJpcyAlMywlNSwlM1xuXHQiCistCQkiYmlzICUyLCU0LCUyXG5cdCIKKy0JCSJzdHFfdSAlMywlMVxuXHQiCistCQkic3RxX3UgJTIsJTAiCistCQk6Ij1tIiAoKnIxMSksCistCQkgIj1tIiAoKih1bnNpZ25lZCBsb25nICopKDMrKGNoYXIgKikgcjExKSksCistCQkgIj0mciIgKHIxKSwgIj0mciIgKHIyKSwgIj0mciIgKHIzKSwgIj0mciIgKHI0KQorLQkJOiJyIiAocjUpLCAiciIgKHIxMSkpOworLSNlbmRpZgorKyAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICBwdHItPnggPSB2YWw7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3R3X3UodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0d191KHUxNiB2YWwsIHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3doICU2LCU3LCU1XG5cdCIKKy0JCSJpbnN3bCAlNiwlNywlNFxuXHQiCistCQkibXNrd2ggJTMsJTcsJTNcblx0IgorLQkJIm1za3dsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0dOVUNfXyAqLworIAorLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPCAzKSkgJiYgXAorLSAgICAgICAgICAgICAoZGVmaW5lZCAoX19pYTY0X18pIHx8IGRlZmluZWQgKGlhNjRfXykpCistI2RlZmluZSBJQTY0X1VBTE9BRFMKKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy1zdHJ1Y3QgX191bmFfdTY0IHsgdW5zaWduZWQgbG9uZyAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTMyIHsgdW5zaWduZWQgaW50ICAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTE2IHsgdW5zaWduZWQgc2hvcnQgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy0KKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCistX191bGRxIChjb25zdCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHU2NAorK2xkcV91KHU2NCAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHU2NCByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKKy11bGRsIChjb25zdCB1bnNpZ25lZCBpbnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTMyCisrbGRsX3UodTMyICogcCkKKyB7CistICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0gICAgcmV0dXJuIHB0ci0+eDsKKysgICAgdTMyIHJldDsKKysKKysgICAgbWVtbW92ZSgmcmV0LCBwLCBzaXplb2YoKnApKTsKKysgICAgcmV0dXJuIHJldDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworLXVsZHcgKGNvbnN0IHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHUxNiByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKKy11c3RxICh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1NjQgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0bCAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgaW50ICogcjExKQorK3N0bF91KHUzMiB2YWwsIHUzMiAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1MzIgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0dyAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3R3X3UodTE2IHZhbCwgdTE2ICogcCkKKyB7CistICAgIHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTE2ICopIHIxMTsKKy0gICAgcHRyLT54ID0gcjU7CisrICAgIHUxNiB0bXAgPSB2YWw7CisrCisrICAgIG1lbW1vdmUocCwgJnRtcCwgc2l6ZW9mKCpwKSk7CisgfQorIAorLSNlbmRpZgorKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19HTlVDX18gKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK1g4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7ICAgICAgLyogR2xvYmFsIGVtdWxhdG9yIG1hY2hpbmUgc3RhdGUgKi8KKytYODZFTVVfaW50ckZ1bmNzIF9YODZFTVVfaW50clRhYlsyNTZdOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBQQVJBTUVURVJTOgorQEAgLTI3NSwxOSArMTg1LDIwIEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIGVtdWxhdG9yIG1lbW9yeS4KKyBSRU1BUktTOgorIFJlYWRzIGEgYnl0ZSB2YWx1ZSBmcm9tIHRoZSBlbXVsYXRvciBtZW1vcnkuIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggWDg2QVBJIHJkYigKKy0gICAgdTMyIGFkZHIpCisrdTggWDg2QVBJCisrcmRiKHUzMiBhZGRyKQorIHsKKy0JdTggdmFsOworLQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAxKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JdmFsID0gKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistCXJldHVybiB2YWw7CisrICAgIHU4IHZhbDsKKysKKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMSkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIHZhbCA9ICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAwLDMyICsyMTEsMjcgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gZW11bGF0b3IgbWVtb3J5LgorIFJFTUFSS1M6CisgUmVhZHMgYSB3b3JkIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBYODZBUEkgcmR3KAorLQl1MzIgYWRkcikKKyt1MTYgWDg2QVBJCisrcmR3KHUzMiBhZGRyKQorIHsKKy0JdTE2IHZhbCA9IDA7CisrICAgIHUxNiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMikgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgxKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSB8CistCQkJICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkpOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JCXZhbCA9IGxkd191KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmICBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgICB2YWwgPSB1bGR3KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCQl2YWwgPSAqKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgIHZhbCA9ICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkcikgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistCQlEQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAyIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIHJldHVybiB2YWw7CisrICAgICAgICB2YWwgPSBsZHdfdSgodTE2ICopIChNLm1lbV9iYXNlICsgYWRkcikpOworKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggMiAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgcmV0dXJuIHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zMzcsMzQgKzI0MywyOSBAQCBMb25nIHZhbHVlIHJlYWQgZnJvbSBlbXVsYXRvciBtZW1vcnkuCisgUkVNQVJLUzoKKyBSZWFkcyBhIGxvbmcgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBYODZBUEkgcmRsKAorLQl1MzIgYWRkcikKKyt1MzIgWDg2QVBJCisrcmRsKHUzMiBhZGRyKQorIHsKKy0JdTMyIHZhbCA9IDA7CisrICAgIHUzMiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSA0KSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgzKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpIHwKKy0JCQkgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA8PCAxNikgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpIDw8IDI0KSk7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkJdmFsID0gbGRsX3UoKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2VsaWYgIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgICAgdmFsID0gdWxkbCgodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxzZQorLQkJdmFsID0gKih1MzIqKShNLm1lbV9iYXNlICsgYWRkcik7CisrICAgIGlmIChhZGRyICYgMHgzKSB7CisrICAgICAgICB2YWwgPSAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDIpIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPDwgMjQpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggNCAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlyZXR1cm4gdmFsOworKyAgICAgICAgdmFsID0gbGRsX3UoKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDQgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzc1LDE3ICsyNzYsMTcgQEAgdmFsCQktIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBXcml0ZXMgYSBieXRlIHZhbHVlIHRvIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdyYigKKy0JdTMyIGFkZHIsCistCXU4IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dyYih1MzIgYWRkciwgdTggdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKy0JCURCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKysgICAgICAgICAgICBEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICAgICApCisrICAgICAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zOTYsMzAgKzI5NywyNCBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZBUEkgd3J3KAorLQl1MzIgYWRkciwKKy0JdTE2IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dydyh1MzIgYWRkciwgdTE2IHZhbCkKKyB7CistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggMiA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCAyIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CisrICAgICAgICAgICAgREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICAgICAgfQorICNpZmRlZiBfX0JJR19FTkRJQU5fXworLQlpZiAoYWRkciAmIDB4MSkgeworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiA4KSAmIDB4ZmY7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkgc3R3X3UodmFsLCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgdXN0dyh2YWwsKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2Vsc2UKKy0JICoodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworKyAgICBpZiAoYWRkciAmIDB4MSkgeworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gMCkgJiAweGZmOworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0d191KHZhbCwgKHUxNiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MzAsMzIgKzMyNSwyNiBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdybCgKKy0JdTMyIGFkZHIsCistCXUzMiB2YWwpCisrdm9pZCBYODZBUEkKKyt3cmwodTMyIGFkZHIsIHUzMiB2YWwpCisgeworLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDQgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworLQkJREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggNCA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgICAgIERCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgICAgICkKKysgICAgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKyAjaWZkZWYgX19CSUdfRU5ESUFOX18KKy0JaWYgKGFkZHIgJiAweDEpIHsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAgMCkgJiAweGZmOworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+ICA4KSAmIDB4ZmY7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JIHN0bF91KHZhbCwodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxpZiBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgIHVzdGwodmFsLCh1MzIqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCSAqKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+IDgpICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPSAodmFsID4+IDE2KSAmIDB4ZmY7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0bF91KHZhbCwgKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjYsMTIgKzM1NSwxMiBAQCBSRVRVUk46CisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHJlYWQgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIGluYi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB1OCBYODZBUEkgcF9pbmIoCistCVg4NkVNVV9waW9BZGRyIGFkZHIpCisrc3RhdGljIHU4IFg4NkFQSQorK3BfaW5iKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDgyLDEyICszNzEsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gd29yZCByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbncuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTE2IFg4NkFQSSBwX2ludygKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTE2IFg4NkFQSQorK3BfaW53KFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDk4LDEyICszODcsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gbG9uZyByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbmwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTMyIFg4NkFQSSBwX2lubCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTMyIFg4NkFQSQorK3BfaW5sKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTEzLDEzICs0MDIsMTIgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRiLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0YigKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTggdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0YihYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygib3V0YiAlIzAyeCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorLSAgICByZXR1cm47CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoIm91dGIgJSMwMnggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKysgICAgICAgIHJldHVybjsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01MjksMTMgKzQxNywxMiBAQCB2YWwgICAgIC0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIHdvcmQgd3JpdGUgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIG91dHcuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCBYODZBUEkgcF9vdXR3KAorLQlYODZFTVVfcGlvQWRkciBhZGRyLAorLQl1MTYgdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0dyhYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoIm91dHcgJSMwNHggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKy0JcmV0dXJuOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJvdXR3ICUjMDR4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCisrICAgICAgICByZXR1cm47CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTQ1LDI5ICs0MzIsMjkgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyA7b25nIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRsLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0bCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTMyIHZhbCkKKytzdGF0aWMgdm9pZCBYODZBUEkKKytwX291dGwoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCkKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJvdXRsICUjMDh4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCistICAgIHJldHVybjsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygib3V0bCAlIzA4eCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuOworIH0KKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXU4ICAJKFg4NkFQSVAgc3lzX3JkYikodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRiOworLXUxNiAJKFg4NkFQSVAgc3lzX3JkdykodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmR3OworLXUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRsOworLXZvaWQgCShYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCkgCQkgICAgICAgICAgICA9IHdyYjsKKy12b2lkIAkoWDg2QVBJUCBzeXNfd3J3KSh1MzIgYWRkcix1MTYgdmFsKSAJICAgICAgICAgICAgPSB3cnc7Cistdm9pZCAJKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCkgCSAgICAgICAgICAgID0gd3JsOworLXU4ICAJKFg4NkFQSVAgc3lzX2luYikoWDg2RU1VX3Bpb0FkZHIgYWRkcikJICAgICAgICAgICAgPSBwX2luYjsKKy11MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpCSAgICAgICAgICAgID0gcF9pbnc7CistdTMyIAkoWDg2QVBJUCBzeXNfaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKSAgICAgICAgICAgICAgPSBwX2lubDsKKy12b2lkIAkoWDg2QVBJUCBzeXNfb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSAJPSBwX291dGI7Cistdm9pZCAJKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpCT0gcF9vdXR3OworLXZvaWQgCShYODZBUElQIHN5c19vdXRsKShYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKQk9IHBfb3V0bDsKKyt1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcikgPSByZGI7CisrdTE2KFg4NkFQSVAgc3lzX3JkdykgKHUzMiBhZGRyKSA9IHJkdzsKKyt1MzIoWDg2QVBJUCBzeXNfcmRsKSAodTMyIGFkZHIpID0gcmRsOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpID0gd3JiOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dydykgKHUzMiBhZGRyLCB1MTYgdmFsKSA9IHdydzsKKyt2b2lkIChYODZBUElQIHN5c193cmwpICh1MzIgYWRkciwgdTMyIHZhbCkgPSB3cmw7CisrCisrdTgoWDg2QVBJUCBzeXNfaW5iKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2luYjsKKyt1MTYoWDg2QVBJUCBzeXNfaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2ludzsKKyt1MzIoWDg2QVBJUCBzeXNfaW5sKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2lubDsKKyt2b2lkIChYODZBUElQIHN5c19vdXRiKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSA9IHBfb3V0YjsKKyt2b2lkIChYODZBUElQIHN5c19vdXR3KSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCkgPSBwX291dHc7Cisrdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpID0gcF9vdXRsOworIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCitAQCAtNTgwLDggKzQ2Nyw4IEBAIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB3aGljaCBhY2Nlc3MKKyBtZW1vcnkgc3BhY2UsIGFsbG93aW5nIHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucworIGFuZCBob29rIHRoZW0gb3V0IGFzIG5lY2Vzc2FyeSBmb3IgdGhlaXIgYXBwbGljYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9zZXR1cE1lbUZ1bmNzKAorLQlYODZFTVVfbWVtRnVuY3MgKmZ1bmNzKQorK3ZvaWQKKytYODZFTVVfc2V0dXBNZW1GdW5jcyhYODZFTVVfbWVtRnVuY3MgKiBmdW5jcykKKyB7CisgICAgIHN5c19yZGIgPSBmdW5jcy0+cmRiOworICAgICBzeXNfcmR3ID0gZnVuY3MtPnJkdzsKK0BAIC02MDAsOCArNDg3LDggQEAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zIHdoaWNoIGFjY2VzcworIEkvTyBzcGFjZSwgYWxsb3dpbmcgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zCisgYW5kIGhvb2sgdGhlbSBvdXQgYXMgbmVjZXNzYXJ5IGZvciB0aGVpciBhcHBsaWNhdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3NldHVwUGlvRnVuY3MoCistCVg4NkVNVV9waW9GdW5jcyAqZnVuY3MpCisrdm9pZAorK1g4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKQorIHsKKyAgICAgc3lzX2luYiA9IGZ1bmNzLT5pbmI7CisgICAgIHN5c19pbncgPSBmdW5jcy0+aW53OworQEAgLTYyNCwxNyArNTExLDE3IEBAIGluIHRoZSBlbXVsYXRvciB2aWEgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUuIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbgorIHRvIGdldCBjb250cm9sIHdoZW4gdGhlIGNvZGUgYmVpbmcgZW11bGF0ZWQgZXhlY3V0ZXMgc3BlY2lmaWMgc29mdHdhcmUKKyBpbnRlcnJ1cHRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoCistCVg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyt2b2lkCisrWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyB7CisgICAgIGludCBpOworLSAgICAKKy0JZm9yIChpPTA7IGkgPCAyNTY7IGkrKykKKy0JCV9YODZFTVVfaW50clRhYltpXSA9IE5VTEw7CistCWlmIChmdW5jcykgeworLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorLQkJCV9YODZFTVVfaW50clRhYltpXSA9IGZ1bmNzW2ldOworLQkJfQorKworKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBOVUxMOworKyAgICBpZiAoZnVuY3MpIHsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKysgICAgICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBmdW5jc1tpXTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTY0OSwxNSArNTM2LDE1IEBAIHNvIHRoYXQgdGhlIGNvZGUgaW4gdGhlIGVtdWxhdG9yIHdpbGwgY29udGludWUgcHJvY2Vzc2luZyB0aGUgc29mdHdhcmUKKyBpbnRlcnJ1cHQgYXMgcGVyIG5vcm1hbC4gVGhpcyBlc3NlbnRpYWxseSBhbGxvd3Mgc3lzdGVtIGNvZGUgdG8gYWN0aXZlbHkKKyBob29rIGFuZCBoYW5kbGUgY2VydGFpbiBzb2Z0d2FyZSBpbnRlcnJ1cHRzIGFzIG5lY2Vzc2FyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3ByZXBhcmVGb3JJbnQoCistCWludCBudW0pCisrdm9pZAorK1g4NkVNVV9wcmVwYXJlRm9ySW50KGludCBudW0pCisgeworLSAgICBwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisrICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKyAgICAgTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0ICsgMik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0KTsKKy0JTS54ODYuaW50ciA9IDA7CisrICAgIE0ueDg2LmludHIgPSAwOworIH0KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS92YWxpZGF0ZS5jIGIvbGlicy94ODZlbXUvdmFsaWRhdGUuYworaW5kZXggMjM5ZjZjMS4uNGMzNmUxZCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKKysrKyBiL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKK0BAIC01OTEsNTggKzU5MSw2MiBAQAorICAgICAgICAgcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQorIAorLXZvaWQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3ZvaWQKKytwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisgeworICAgICB2YV9saXN0IGFyZ3B0cjsKKysKKyAgICAgdmFfc3RhcnQoYXJncHRyLCBmbXQpOworICAgICB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXJncHRyKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgIHZhX2VuZChhcmdwdHIpOworIH0KKyAKKy1jaGFyICogcHJpbnRfZmxhZ3MoY2hhciAqYnVmLHVsb25nIGZsYWdzKQorK2NoYXIgKgorK3ByaW50X2ZsYWdzKGNoYXIgKmJ1ZiwgdWxvbmcgZmxhZ3MpCisgeworICAgICBjaGFyICpzZXBhcmF0b3IgPSAiIjsKKyAKKyAgICAgYnVmWzBdID0gMDsKKyAgICAgaWYgKGZsYWdzICYgRl9DRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiQ0YiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiQ0YiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1BGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJQRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJQRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfQUYpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIkFGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIkFGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9aRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiWkYiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiWkYiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1NGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJTRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJTRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfT0YpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIk9GIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIk9GIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKHNlcGFyYXRvclswXSA9PSAwKQorLSAgICAgICAgc3RyY3B5KGJ1ZiwiTm9uZSIpOworKyAgICAgICAgc3RyY3B5KGJ1ZiwgIk5vbmUiKTsKKyAgICAgcmV0dXJuIGJ1ZjsKKyB9CisgCistaW50IG1haW4oaW50IGFyZ2MpCisraW50CisrbWFpbihpbnQgYXJnYykKKyB7CistICAgIHVsb25nICAgZGVmX2ZsYWdzOworKyAgICB1bG9uZyBkZWZfZmxhZ3M7CisgICAgIGludCB0cmFjZSA9IGZhbHNlOworIAorICAgICBpZiAoYXJnYyA+IDEpCitAQCAtNjczLDcgKzY3Nyw3IEBAIGludCBtYWluKGludCBhcmdjKQorICAgICBWQUxfTE9OR19MT05HX0JJTkFSWShjbXBfbG9uZyk7CisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRhYV9ieXRlKTsKKy0gICAgVkFMX0JZVEVfVU5BUlkoZGFzX2J5dGUpOyAgIC8vIEZhaWxzIGZvciAweDlBIChvdXQgb2YgcmFuZ2UgYW55d2F5KQorKyAgICBWQUxfQllURV9VTkFSWShkYXNfYnl0ZSk7ICAgLyogRmFpbHMgZm9yIDB4OUEgKG91dCBvZiByYW5nZSBhbnl3YXkpICovCisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRlY19ieXRlKTsKKyAgICAgVkFMX1dPUkRfVU5BUlkoZGVjX3dvcmQpOworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS5oIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK2luZGV4IDc5NWUyZDYuLjUwMWRkOTEgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK0BAIC01Niw3ICs1Niw3IEBAIHR5cGVkZWYgaW50IFg4NkVNVV9waW9BZGRyOworIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmIFBBQ0sKKy0jIHByYWdtYQlQQUNLICAgLyogRG9uJ3QgcGFjayBzdHJ1Y3RzIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMhICovCisrI3ByYWdtYQlQQUNLICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBwYWNrIHN0cnVjdHMgd2l0aCBmdW5jdGlvbiBwb2ludGVycyEgKi8KKyAjZW5kaWYKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTgxLDEzICs4MSwxMyBAQCBvdXR3ICAgIC0gRnVuY3Rpb24gdG8gd3JpdGUgYSB3b3JkIHRvIGFuIEkvTyBwb3J0Cisgb3V0bCAgICAtIEZ1bmN0aW9uIHRvIHdyaXRlIGEgZHdvcmQgdG8gYW4gSS9PIHBvcnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCBpbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLQl1MTYgCShYODZBUElQIGludykoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistCXUzMiAJKFg4NkFQSVAgaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0dykoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQgCShYODZBUElQIG91dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworLQl9IFg4NkVNVV9waW9GdW5jczsKKysgICAgdTgoWDg2QVBJUCBpbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIHUzMihYODZBUElQIGlubCkgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICB2b2lkIChYODZBUElQIG91dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICB2b2lkIChYODZBUElQIG91dHcpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKTsKKysgICAgdm9pZCAoWDg2QVBJUCBvdXRsKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCk7CisrfSBYODZFTVVfcGlvRnVuY3M7CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorQEAgLTExMiwxMyArMTEyLDEzIEBAIHdydyAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIHdvcmQgdG8gYW4gYWRkcmVzcworIHdybCAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIGR3b3JkIHRvIGFuIGFkZHJlc3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCByZGIpKHUzMiBhZGRyKTsKKy0JdTE2IAkoWDg2QVBJUCByZHcpKHUzMiBhZGRyKTsKKy0JdTMyIAkoWDg2QVBJUCByZGwpKHUzMiBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3JiKSh1MzIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3J3KSh1MzIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQJKFg4NkFQSVAgd3JsKSh1MzIgYWRkciwgdTMyIHZhbCk7CistCX0gWDg2RU1VX21lbUZ1bmNzOworKyAgICB1OChYODZBUElQIHJkYikgKHUzMiBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgcmR3KSAodTMyIGFkZHIpOworKyAgICB1MzIoWDg2QVBJUCByZGwpICh1MzIgYWRkcik7CisrICAgIHZvaWQgKFg4NkFQSVAgd3JiKSAodTMyIGFkZHIsIHU4IHZhbCk7CisrICAgIHZvaWQgKFg4NkFQSVAgd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICB2b2lkIChYODZBUElQIHdybCkgKHUzMiBhZGRyLCB1MzIgdmFsKTsKKyt9IFg4NkVNVV9tZW1GdW5jczsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgSGVyZSBhcmUgdGhlIGRlZmF1bHQgbWVtb3J5IHJlYWQgYW5kIHdyaXRlCitAQCAtMTMyLDI5ICsxMzIsMjkgQEAgZXh0ZXJuIHZvaWQgWDg2QVBJIHdydyh1MzIgYWRkciwgdTE2IHZhbCk7CisgZXh0ZXJuIHZvaWQgWDg2QVBJIHdybCh1MzIgYWRkciwgdTMyIHZhbCk7CisgCisgI2lmZGVmIEVORF9QQUNLCistIyBwcmFnbWEJRU5EX1BBQ0sKKysjcHJhZ21hCUVORF9QQUNLCisgI2VuZGlmCisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistdHlwZWRlZiB2b2lkIChYODZBUElQIFg4NkVNVV9pbnRyRnVuY3MpKGludCBudW0pOworK3R5cGVkZWYgdm9pZCAoWDg2QVBJUCBYODZFTVVfaW50ckZ1bmNzKSAoaW50IG51bSk7CisgZXh0ZXJuIFg4NkVNVV9pbnRyRnVuY3MgX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwUGlvRnVuY3MoWDg2RU1VX3Bpb0Z1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSk7Cistdm9pZCAJWDg2RU1VX3ByZXBhcmVGb3JJbnQoaW50IG51bSk7CisrICAgIHZvaWQgWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICogZnVuY3MpOworKyAgICB2b2lkIFg4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKTsKKysgICAgdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoWDg2RU1VX2ludHJGdW5jcyBmdW5jc1tdKTsKKysgICAgdm9pZCBYODZFTVVfcHJlcGFyZUZvckludChpbnQgbnVtKTsKKyAKKyAvKiBkZWNvZGUuYyAqLworIAorLXZvaWQgCVg4NkVNVV9leGVjKHZvaWQpOworLXZvaWQgCVg4NkVNVV9oYWx0X3N5cyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZXhlYyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfaGFsdF9zeXModm9pZCk7CisgCisgI2lmZGVmCURFQlVHCisgI2RlZmluZQlIQUxUX1NZUygpCVwKK0BAIC0xNjYsOCArMTY2LDggQEAgdm9pZCAJWDg2RU1VX2hhbHRfc3lzKHZvaWQpOworIAorIC8qIERlYnVnIG9wdGlvbnMgKi8KKyAKKy0jZGVmaW5lIERFQlVHX0RFQ09ERV9GICAgICAgICAgIDB4MDAwMDAxIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCistI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAvKiBkdW1wIHJlZ3MgYmVmb3JlL2FmdGVyIGV4ZWN1dGlvbiAqLworKyNkZWZpbmUgREVCVUdfREVDT0RFX0YgICAgICAgICAgMHgwMDAwMDEgICAgICAgIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCisrI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAgICAgICAgLyogZHVtcCByZWdzIGJlZm9yZS9hZnRlciBleGVjdXRpb24gKi8KKyAjZGVmaW5lIERFQlVHX1NURVBfRiAgICAgICAgICAgIDB4MDAwMDA0CisgI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRV9GICAgICAweDAwMDAwOAorICNkZWZpbmUgREVCVUdfQlJFQUtfRiAgICAgICAgICAgMHgwMDAwMTAKK0BAIC0xNzUsMjQgKzE3NSwyMyBAQCB2b2lkIAlYODZFTVVfaGFsdF9zeXModm9pZCk7CisgI2RlZmluZSBERUJVR19TQVZFX0lQX0NTX0YgICAgICAweDAwMDA0MAorICNkZWZpbmUgREVCVUdfRlNfRiAgICAgICAgICAgICAgMHgwMDAwODAKKyAjZGVmaW5lIERFQlVHX1BST0NfRiAgICAgICAgICAgIDB4MDAwMTAwCistI2RlZmluZSBERUJVR19TWVNJTlRfRiAgICAgICAgICAweDAwMDIwMCAvKiBiaW9zIHN5c3RlbSBpbnRlcnJ1cHRzLiAqLworKyNkZWZpbmUgREVCVUdfU1lTSU5UX0YgICAgICAgICAgMHgwMDAyMDAgICAgICAgIC8qIGJpb3Mgc3lzdGVtIGludGVycnVwdHMuICovCisgI2RlZmluZSBERUJVR19UUkFDRUNBTExfRiAgICAgICAweDAwMDQwMAorICNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVF9GICAgICAgMHgwMDA4MDAKKy0jZGVmaW5lIERFQlVHX01FTV9UUkFDRV9GICAgICAgIDB4MDAxMDAwIAorLSNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAgCisrI2RlZmluZSBERUJVR19NRU1fVFJBQ0VfRiAgICAgICAweDAwMTAwMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAKKyAjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YgIDB4MDA0MDAwCistI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVF9GICAweDAwODAwMCAKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YgIDB4MDA4MDAwCisgI2RlZmluZSBERUJVR19FWElUICAgICAgICAgICAgICAweDAxMDAwMAorICNkZWZpbmUgREVCVUdfU1lTX0YgICAgICAgICAgICAgKERFQlVHX1NWQ19GfERFQlVHX0ZTX0Z8REVCVUdfUFJPQ19GKQorIAorLXZvaWQgCVg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworLXZvaWQgCVg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKy12b2lkIAlYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CistaW50IAlYODZFTVVfdHJhY2Vfb24odm9pZCk7CistaW50IAlYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb24odm9pZCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9YODZFTVVfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK2luZGV4IDQ3YWFjYjYuLjM4NWI4MDQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK0BAIC00NSw2NSArNDUsNjUgQEAKKyAKKyAjZGVmaW5lIENIRUNLX0lQX0ZFVENIX0YgICAgICAgICAgICAgICAgMHgxCisgI2RlZmluZSBDSEVDS19TUF9BQ0NFU1NfRiAgICAgICAgICAgICAgIDB4MgorLSNkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTU19GICAgICAgICAgICAgICAweDQgLyp1c2luZyByZWd1bGFyIGxpbmVhciBwb2ludGVyICovCistI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTU19GICAgICAgICAgICAgIDB4OCAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0Ki8KKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1NfRiAgICAgICAgICAgICAgMHg0ICAgICAvKnVzaW5nIHJlZ3VsYXIgbGluZWFyIHBvaW50ZXIgKi8KKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTX0YgICAgICAgICAgICAgMHg4ICAgICAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0ICovCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0goKSAgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0lQX0ZFVENIX0YpCistIyBkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTKCkgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX1NQX0FDQ0VTU19GKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCistIyBkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1MoKSAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0RBVEFfQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19JUF9GRVRDSCgpICAgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfSVBfRkVUQ0hfRikKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpICAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19TUF9BQ0NFU1NfRikKKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTUygpICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfREFUQV9BQ0NFU1NfRikKKyAjZWxzZQorLSMgZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKy0jIGRlZmluZSBDSEVDS19TUF9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpCisrI2RlZmluZSBDSEVDS19NRU1fQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9GKQorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKy0jIGRlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RJU0FTU0VNQkxFX0YpCistIyBkZWZpbmUgREVCVUdfQlJFQUsoKSAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19CUkVBS19GKQorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCistIyBkZWZpbmUgREVCVUdfU0FWRV9JUF9DUygpICAgICAoTS54ODYuZGVidWcgJiBERUJVR19TQVZFX0lQX0NTX0YpCistCistIyBkZWZpbmUgREVCVUdfRlMoKSAgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19GU19GKQorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1lTSU5UX0YpCistIyBkZWZpbmUgREVCVUdfVFJBQ0VDQUxMKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRUNBTExfRikKKy0jIGRlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCistIyBkZWZpbmUgREVCVUdfU1lTKCkgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNfRikKKy0jIGRlZmluZSBERUJVR19NRU1fVFJBQ0UoKSAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX01FTV9UUkFDRV9GKQorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIChNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YpCisrI2RlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX0YpCisrI2RlZmluZSBERUJVR19UUkFDRSgpICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFX0YpCisrI2RlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKysjZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRElTQVNTRU1CTEVfRikKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfQlJFQUtfRikKKysjZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIChNLng4Ni5kZWJ1ZyAmIERFQlVHX1NBVkVfSVBfQ1NfRikKKysKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRlNfRikKKysjZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorKyNkZWZpbmUgREVCVUdfU1lTSU5UKCkgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNJTlRfRikKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VDQUxMX0YpCisrI2RlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NZU19GKQorKyNkZWZpbmUgREVCVUdfTUVNX1RSQUNFKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19NRU1fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX05PUFJJTlRfRikKKyAjZWxzZQorLSMgZGVmaW5lIERFQlVHX0lOU1RSVU1FTlQoKSAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NURVAoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJMAorLSMgZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1MoKSAgICAgMAorLSMgZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTFJFR1MoKSAJMAorLSMgZGVmaW5lIERFQlVHX1NZUygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgMAorKyNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVCgpICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1RFUCgpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCTAKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1ZDKCkgICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIDAKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfUFJPQygpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TWVNJTlQoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMUkVHUygpIAkwCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0UoKSAgICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIDAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYoeCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYyKHgseSkKKyAKKyAvKgorQEAgLTEyMywxMCArMTIzLDEwIEBACisgCQlNLng4Ni5zYXZlZF9pcCA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgCX0KKyAjZWxzZQorLSMgZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCistIyBkZWZpbmUgREVDT0RFX1BSSU5URih4KQorLSMgZGVmaW5lIERFQ09ERV9QUklOVEYyKHgseSkKKy0jIGRlZmluZSBTQVZFX0lQX0NTKHgseSkKKysjZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpCisrI2RlZmluZSBTQVZFX0lQX0NTKHgseSkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKK0BAIC0xMzcsMTMgKzEzNywxMyBAQAorIAl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAJaWYgKERFQlVHX1RSQUNFKCkgfHwgREVCVUdfREVDT0RFKCkpIFg4NkVNVV90cmFjZV9yZWdzKCkKKyAjZWxzZQorLSMgZGVmaW5lIFRSQUNFX1JFR1MoKQorKyNkZWZpbmUgVFJBQ0VfUkVHUygpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU0lOR0xFX1NURVAoKQkJaWYgKERFQlVHX1NURVAoKSkgeDg2ZW11X3NpbmdsZV9zdGVwKCkKKysjZGVmaW5lIFNJTkdMRV9TVEVQKCkJCWlmIChERUJVR19TVEVQKCkpIHg4NmVtdV9zaW5nbGVfc3RlcCgpCisgI2Vsc2UKKy0jIGRlZmluZSBTSU5HTEVfU1RFUCgpCisrI2RlZmluZSBTSU5HTEVfU1RFUCgpCisgI2VuZGlmCisgCisgI2RlZmluZSBUUkFDRV9BTkRfU1RFUCgpCVwKK0BAIC0xNTEsMjkgKzE1MSwyOSBAQAorIAlTSU5HTEVfU1RFUCgpCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUigpCQlFbmRPZlRoZUluc3RydWN0aW9uUHJvY2VkdXJlOiB4ODZlbXVfZW5kX2luc3RyKCk7CistIyBkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkJeDg2ZW11X2VuZF9pbnN0cigpOworKyNkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSKCkJCUVuZE9mVGhlSW5zdHJ1Y3Rpb25Qcm9jZWR1cmU6IHg4NmVtdV9lbmRfaW5zdHIoKTsKKysjZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCXg4NmVtdV9lbmRfaW5zdHIoKTsKKyAjZWxzZQorLSMgZGVmaW5lIFNUQVJUX09GX0lOU1RSKCkKKy0jIGRlZmluZSBFTkRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCisrI2RlZmluZSBTVEFSVF9PRl9JTlNUUigpCisrI2RlZmluZSBFTkRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSAgQ0FMTF9UUkFDRSh1LHYsdyx4LHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgIENBTExfVFJBQ0UodSx2LHcseCxzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6IENBTEwgJXMlMDR4OiUwNHhcbiIsIHUgLCB2LCBzLCB3LCB4KTsKKy0jIGRlZmluZSBSRVRVUk5fVFJBQ0Uobix1LHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6ICVzXG4iLHUsdixuKTsKKyAjZWxzZQorLSMgZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorLSMgZGVmaW5lIFJFVFVSTl9UUkFDRShuLHUsdikKKysjZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworQEAgLTE4NSwyNiArMTg1LDI1IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11X2luY19kZWNvZGVkX2luc3RfbGVuIChpbnQgeCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYgKGNoYXIgKngpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmMiAoY2hhciAqeCwgaW50IHkpOworLWV4dGVybiB2b2lkIHg4NmVtdV9qdXN0X2Rpc2Fzc2VtYmxlICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3hyZWdzICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdik7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2luc3RydW1lbnRfaW5zdHJ1Y3Rpb24gKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzICh1MzIgcCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzICh1aW50IHMsIHVpbnQgbyk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmKGNvbnN0IGNoYXIgKngpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3NpbmdsZV9zdGVwKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZW5kX2luc3RyKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF9yZWdzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF94cmVncyh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdik7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbnN0cnVtZW50X2luc3RydWN0aW9uKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfbWVtX2FjY2Vzcyh1MzIgcCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2Vzcyh1aW50IHMsIHVpbnQgbyk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfREVCVUdfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVCVUdfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAoraW5kZXggNjFjZDRkYy4uNDlhMWY3YiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oCitAQCAtNTIsMzcgKzUyLDM2IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJeDg2ZW11X2ludHJfcmFpc2UgKHU4IHR5cGUpOworLXZvaWQgICAgZmV0Y2hfZGVjb2RlX21vZHJtIChpbnQgKm1vZCxpbnQgKnJlZ2gsaW50ICpyZWdsKTsKKy11OCAgICAgIGZldGNoX2J5dGVfaW1tICh2b2lkKTsKKy11MTYgICAgIGZldGNoX3dvcmRfaW1tICh2b2lkKTsKKy11MzIgICAgIGZldGNoX2xvbmdfaW1tICh2b2lkKTsKKy11OCAgICAgIGZldGNoX2RhdGFfYnl0ZSAodWludCBvZmZzZXQpOworLXU4ICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CistdTE2ICAgICBmZXRjaF9kYXRhX3dvcmQgKHVpbnQgb2Zmc2V0KTsKKy11MTYgICAgIGZldGNoX2RhdGFfd29yZF9hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworLXUzMiAgICAgZmV0Y2hfZGF0YV9sb25nICh1aW50IG9mZnNldCk7CistdTMyICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKy12b2lkICAgIHN0b3JlX2RhdGFfYnl0ZSAodWludCBvZmZzZXQsIHU4IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX2J5dGVfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV93b3JkICh1aW50IG9mZnNldCwgdTE2IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX3dvcmRfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MTYgdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfbG9uZyAodWludCBvZmZzZXQsIHUzMiB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV9sb25nX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTMyIHZhbCk7CistdTgqIAlkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKTsKKy11MzIqIAlkZWNvZGVfcm1fbG9uZ19yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpOworLXUzMglkZWNvZGVfcm0wMF9hZGRyZXNzKGludCBybSk7CistdTMyCWRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKy11MzIJZGVjb2RlX3JtMTBfYWRkcmVzcyhpbnQgcm0pOworLXUzMglkZWNvZGVfc2liX2FkZHJlc3MoaW50IHNpYiwgaW50IG1vZCk7CisrICAgIHZvaWQgeDg2ZW11X2ludHJfcmFpc2UodTggdHlwZSk7CisrICAgIHZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKGludCAqbW9kLCBpbnQgKnJlZ2gsIGludCAqcmVnbCk7CisrICAgIHU4IGZldGNoX2J5dGVfaW1tKHZvaWQpOworKyAgICB1MTYgZmV0Y2hfd29yZF9pbW0odm9pZCk7CisrICAgIHUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0KTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKysgICAgdTE2IGZldGNoX2RhdGFfd29yZCh1aW50IG9mZnNldCk7CisrICAgIHUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworKyAgICB1MzIgZmV0Y2hfZGF0YV9sb25nKHVpbnQgb2Zmc2V0KTsKKysgICAgdTMyIGZldGNoX2RhdGFfbG9uZ19hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTggdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX3dvcmQodWludCBvZmZzZXQsIHUxNiB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTE2IHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9sb25nKHVpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpOworKyAgICB1OCAqZGVjb2RlX3JtX2J5dGVfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUzMiAqZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihpbnQgcmVnKTsKKysgICAgdTMyIGRlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9zaWJfYWRkcmVzcyhpbnQgc2liLCBpbnQgbW9kKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9ERUNPREVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVDT0RFX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmggYi9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKK2luZGV4IDVmYjI3MTQuLjFjMTE0OTggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHUuaAorQEAgLTQwLDIyICs0MCwyMSBAQAorICNkZWZpbmUgX19YODZFTVVfRlBVX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCisgLyogdGhlc2UgaGF2ZSB0byBiZSBkZWZpbmVkLCB3aGV0aGVyIDgwODcgc3VwcG9ydCBjb21waWxlZCBpbiBvciBub3QuICovCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5ICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYiAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmICh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggb3AxKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9GUFVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitpbmRleCBlNTliODA3Li41YTc4MGU2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitAQCAtNDIsMjMgKzQyLDIzIEBACisgI2lmZGVmIFg4Nl9GUFVfU1VQUE9SVAorIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qIEJhc2ljIDgwODcgcmVnaXN0ZXIgY2FuIGhvbGQgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAqLworIAorIHVuaW9uIHg4Nl9mcHVfcmVnX3UgeworLSAgICBzOCAgICAgICAgICAgICAgICAgIHRlbmJ5dGVzWzEwXTsKKy0gICAgZG91YmxlICAgICAgICAgICAgICBkdmFsOworLSAgICBmbG9hdCAgICAgICAgICAgICAgIGZ2YWw7CistICAgIHMxNiAgICAgICAgICAgICAgICAgc3ZhbDsKKy0gICAgczMyICAgICAgICAgICAgICAgICBsdmFsOworLQl9OworKyAgICBzOCB0ZW5ieXRlc1sxMF07CisrICAgIGRvdWJsZSBkdmFsOworKyAgICBmbG9hdCBmdmFsOworKyAgICBzMTYgc3ZhbDsKKysgICAgczMyIGx2YWw7CisrfTsKKyAKKyBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeworLQl1bmlvbiB4ODZfZnB1X3JlZ191IHJlZzsKKy0JY2hhciAgICAgICAgICAgICAgICB0YWc7CistCX07CisrICAgIHVuaW9uIHg4Nl9mcHVfcmVnX3UgcmVnOworKyAgICBjaGFyIHRhZzsKKyt9OworIAorIC8qCisgICogU2luY2Ugd2UgYXJlIG5vdCBnb2luZyB0byB3b3JyeSBhYm91dCB0aGUgcHJvYmxlbXMgb2YgYWxpYXNpbmcKK0BAIC04MywxNCArODMsMTQgQEAgc3RydWN0IHg4Nl9mcHVfcmVnIHsKKyAjZGVmaW5lICBYODZfRlBVX1NUS1RPUCAgMAorIAorIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CistICAgIHN0cnVjdCB4ODZfZnB1X3JlZyAgeDg2X2ZwdV9zdGFja1s4XTsKKy0gICAgaW50ICAgICAgICAgICAgICAgICB4ODZfZnB1X2ZsYWdzOworLSAgICBpbnQgICAgICAgICAgICAgICAgIHg4Nl9mcHVfY29uZmlnOyAgICAgICAgIC8qIHJvdW5kaW5nIG1vZGVzLCBldGMuICovCistICAgIHNob3J0ICAgICAgICAgICAgICAgeDg2X2ZwdV90b3MsIHg4Nl9mcHVfYm9zOworLQl9OworKyAgICBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeDg2X2ZwdV9zdGFja1s4XTsKKysgICAgaW50IHg4Nl9mcHVfZmxhZ3M7CisrICAgIGludCB4ODZfZnB1X2NvbmZpZzsgICAgICAgICAvKiByb3VuZGluZyBtb2RlcywgZXRjLiAqLworKyAgICBzaG9ydCB4ODZfZnB1X3RvcywgeDg2X2ZwdV9ib3M7CisrfTsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKgorQEAgLTEwNCwxNiArMTA0LDE2IEBAIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CisgICogaW5zdHJ1Y3Rpb25zLgorICAqLworIAorLSNlbmRpZiAvKiBYODZfRlBVX1NVUFBPUlQgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFg4Nl9GUFVfU1VQUE9SVCAqLworIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpICAgICAJXAorKyNkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkgICAgIAlcCisgCURFQ09ERV9QUklOVEYodFsobW9kPDwzKSsocmgpXSk7CistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIyNTYodCxtb2QscmgscmwpICAgIAlcCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkgICAgCVwKKyAJREVDT0RFX1BSSU5URih0Wyhtb2Q8PDYpKyhyaDw8MykrKHJsKV0pOworICNlbHNlCistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKysjZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKyAjZW5kaWYKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAoraW5kZXggNjVlYTY3Ni4uMWJjMDdhNCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L29wcy5oCitAQCAtMzksNyArMzksNyBAQAorICNpZm5kZWYgX19YODZFTVVfT1BTX0gKKyAjZGVmaW5lIF9fWDg2RU1VX09QU19ICisgCistZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSh1OCBvcDEpOworLWV4dGVybiB2b2lkICgqeDg2ZW11X29wdGFiMlsweDEwMF0pKHU4IG9wMik7CisrZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSAodTggb3AxKTsKKytleHRlcm4gdm9pZCAoKng4NmVtdV9vcHRhYjJbMHgxMDBdKSAodTggb3AyKTsKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX09QU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAoraW5kZXggZTAyM2NmOC4uYWNhMTMyYiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAorQEAgLTQ5LDE0ICs0OSwxNiBAQAorICNkZWZpbmUJX19IQVZFX0lOTElORV9BU1NFTUJMRVJfXworICNlbmRpZgorIAorLXUzMgkJZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKyt1MzIgZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKysKKyAjcHJhZ21hIGF1eCBnZXRfZmxhZ3NfYXNtID0JCQlcCisgCSJwdXNoZiIgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkicG9wCWVheCIgICAgICAgICAgICAgICAgICAJXAorIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXUxNiAgICAgYWFhX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBhYWFfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBhYWFfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3LDcgKzY5LDggQEAgdTE2ICAgICBhYWFfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MTYgICAgIGFhc193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgYWFzX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggYWFzX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03OCw3ICs4MSw4IEBAIHUxNiAgICAgYWFzX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTE2ICAgICBhYWRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGFhZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGFhZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODksNyArOTMsOCBAQCB1MTYgICAgIGFhZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUxNiAgICAgYWFtX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTE2IGFhbV93b3JkX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggYWFtX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMDAsNyArMTA1LDggQEAgdTE2ICAgICBhYW1fd29yZF9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXU4ICAgICAgYWRjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggYWRjX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTExMSw3ICsxMTcsOCBAQCB1OCAgICAgIGFkY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBhZGNfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMjIsNyArMTI5LDggQEAgdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBhZGNfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMzMsNyArMTQxLDggQEAgdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGFkZF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IGFkZF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggYWRkX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xNDQsNyArMTUzLDggQEAgdTggICAgICBhZGRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgYWRkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGFkZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTU1LDcgKzE2NSw4IEBAIHUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgYWRkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGFkZF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTY2LDcgKzE3Nyw4IEBAIHUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBhbmRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBhbmRfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGFuZF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTc3LDcgKzE4OSw4IEBAIHU4ICAgICAgYW5kX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IGFuZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE4OCw3ICsyMDEsOCBAQCB1MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIGFuZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE5OSw3ICsyMTMsOCBAQCB1MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgY21wX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggY21wX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBjbXBfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTIxMCw3ICsyMjUsOCBAQCB1OCAgICAgIGNtcF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBjbXBfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMjEsNyArMjM3LDggQEAgdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBjbXBfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMzIsNyArMjQ5LDggQEAgdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGRhYV9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IGRhYV9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggZGFhX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNDMsNyArMjYxLDggQEAgdTggICAgICBkYWFfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXU4ICAgICAgZGFzX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggZGFzX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBkYXNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI1NCw3ICsyNzMsOCBAQCB1OCAgICAgIGRhc19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTggICAgICBkZWNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBkZWNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGRlY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjY1LDcgKzI4NSw4IEBAIHU4ICAgICAgZGVjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGRlY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgZGVjX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNzYsNyArMjk3LDggQEAgdTE2ICAgICBkZWNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGRlY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgZGVjX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yODcsNyArMzA5LDggQEAgdTMyICAgICBkZWNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBpbmNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBpbmNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGluY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjk4LDcgKzMyMSw4IEBAIHU4ICAgICAgaW5jX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGluY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgaW5jX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMDksNyArMzMzLDggQEAgdTE2ICAgICBpbmNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGluY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgaW5jX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMjAsNyArMzQ1LDggQEAgdTMyICAgICBpbmNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzMxLDcgKzM1Nyw4IEBAIHU4ICAgICAgb3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzQyLDcgKzM2OSw4IEBAIHUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIG9yX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zNTMsNyArMzgxLDggQEAgdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgbmVnX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbmVnX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBuZWdfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM2NCw3ICszOTMsOCBAQCB1OCAgICAgIG5lZ19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBuZWdfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5lZ193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5lZ193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzc1LDcgKzQwNSw4IEBAIHUxNiAgICAgbmVnX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBuZWdfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5lZ19sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5lZ19sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzg2LDcgKzQxNyw4IEBAIHUzMiAgICAgbmVnX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgbm90X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbm90X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBub3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM5Nyw3ICs0MjksOCBAQCB1OCAgICAgIG5vdF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBub3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5vdF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5vdF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDA4LDcgKzQ0MSw4IEBAIHUxNiAgICAgbm90X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBub3RfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5vdF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5vdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDE5LDcgKzQ1Myw4IEBAIHUzMiAgICAgbm90X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgcmNsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQzMCw3ICs0NjUsOCBAQCB1OCAgICAgIHJjbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDQxLDcgKzQ3Nyw4IEBAIHUxNiAgICAgcmNsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDUyLDcgKzQ4OSw4IEBAIHUzMiAgICAgcmNsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcmNyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ2Myw3ICs1MDEsOCBAQCB1OCAgICAgIHJjcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDc0LDcgKzUxMyw4IEBAIHUxNiAgICAgcmNyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDg1LDcgKzUyNSw4IEBAIHUzMiAgICAgcmNyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9sX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9sX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ5Niw3ICs1MzcsOCBAQCB1OCAgICAgIHJvbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTA3LDcgKzU0OSw4IEBAIHUxNiAgICAgcm9sX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTE4LDcgKzU2MSw4IEBAIHUzMiAgICAgcm9sX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTUyOSw3ICs1NzMsOCBAQCB1OCAgICAgIHJvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTQwLDcgKzU4NSw4IEBAIHUxNiAgICAgcm9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTUxLDcgKzU5Nyw4IEBAIHUzMiAgICAgcm9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU2Miw3ICs2MDksOCBAQCB1OCAgICAgIHNobF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaGxfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNobF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTczLDcgKzYyMSw4IEBAIHUxNiAgICAgc2hsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaGxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNobF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTg0LDcgKzYzMyw4IEBAIHUzMiAgICAgc2hsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU5NSw3ICs2NDUsOCBAQCB1OCAgICAgIHNocl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaHJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNocl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjA2LDcgKzY1Nyw4IEBAIHUxNiAgICAgc2hyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaHJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNocl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjE3LDcgKzY2OSw4IEBAIHUzMiAgICAgc2hyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2FyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2FyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYXJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTYyOCw3ICs2ODEsOCBAQCB1OCAgICAgIHNhcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzYXJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNhcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjM5LDcgKzY5Myw4IEBAIHUxNiAgICAgc2FyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzYXJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNhcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjUwLDcgKzcwNSw4IEBAIHUzMiAgICAgc2FyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrdTE2IHNobGRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjYxLDcgKzcxNyw4IEBAIHUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGR4IGNsXTsKKyAKKy11MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworK3UzMiBzaGxkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobGRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3Miw3ICs3MjksOCBAQCB1MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWR4IGNsXTsKKyAKKy11MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworK3UxNiBzaHJkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY4Myw3ICs3NDEsOCBAQCB1MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBkeCBjbF07CisgCistdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyt1MzIgc2hyZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJkX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02OTQsNyArNzUzLDggQEAgdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVkeCBjbF07CisgCistdTggICAgICBzYmJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzYmJfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNiYl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzA1LDcgKzc2NSw4IEBAIHU4ICAgICAgc2JiX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IHNiYl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcxNiw3ICs3NzcsOCBAQCB1MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIHNiYl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcyNyw3ICs3ODksOCBAQCB1MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgc3ViX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc3ViX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzdWJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTczOCw3ICs4MDEsOCBAQCB1OCAgICAgIHN1Yl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBzdWJfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NDksNyArODEzLDggQEAgdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBzdWJfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NjAsNyArODI1LDggQEAgdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt2b2lkIHRlc3RfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHRlc3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc3MCw3ICs4MzYsOCBAQCB2b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJcGFybSBbZWRpXSBbYWxdIFtibF0gICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXZvaWQJdGVzdF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7Cisrdm9pZCB0ZXN0X3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IHRlc3Rfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc4MCw3ICs4NDcsOCBAQCB2b2lkCXRlc3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAlwYXJtIFtlZGldIFtheF0gW2J4XSAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdm9pZAl0ZXN0X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt2b2lkIHRlc3RfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggdGVzdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzkwLDcgKzg1OCw4IEBAIHZvaWQJdGVzdF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VheF0gW2VieF0gICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgeG9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggeG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCB4b3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTgwMSw3ICs4NzAsOCBAQCB1OCAgICAgIHhvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiB4b3Jfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MTIsNyArODgyLDggQEAgdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiB4b3JfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MjMsNyArODk0LDggQEAgdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkICAgIGltdWxfYnl0ZV9hc20odTMyICpmbGFncyx1MTYgKmF4LHU4IGQsdTggcyk7Cisrdm9pZCBpbXVsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggaW11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODM0LDcgKzkwNiw4IEBAIHZvaWQgICAgaW11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbYWxdIFtibF0gICAgICBcCisgCW1vZGlmeSBleGFjdCBbZXNpIGF4IGJsXTsKKyAKKy12b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworK3ZvaWQgaW11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGltdWxfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg0Niw3ICs5MTksOCBAQCB2b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJ4IGR4XTsKKyAKKy12b2lkICAgIGltdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBpbXVsX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpbXVsX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04NTgsNyArOTMyLDggQEAgdm9pZCAgICBpbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkICAgIG11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyt2b2lkIG11bF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IG11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODY5LDcgKzk0NCw4IEBAIHZvaWQgICAgbXVsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1OCBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFthbF0gW2JsXSAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgYXggYmxdOworIAorLXZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyt2b2lkIG11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IG11bF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODgxLDcgKzk1Nyw4IEBAIHZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBieCBkeF07CisgCistdm9pZCAgICBtdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBtdWxfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiAqIGVheCwgdTMyICogZWR4LCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG11bF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODkzLDcgKzk3MCw4IEBAIHZvaWQgICAgbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgaWRpdl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggKiBhbCwgdTggKiBhaCwgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkwNSw3ICs5ODMsOCBAQCB2b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2JsXVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJsXTsKKyAKKy12b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGlkaXZfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1MTYgKiBkeCwgdTE2IGRsbywgdTE2IGRoaSwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkxNyw3ICs5OTYsOCBAQCB2b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtkeF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGR4IGJ4XTsKKyAKKy12b2lkCWlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgaWRpdl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyICogZWF4LCB1MzIgKiBlZHgsIHUzMiBkbG8sIHUzMiBkaGksIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpZGl2X2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05MjksNyArMTAwOSw4IEBAIHZvaWQJaWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2VheF0gW2VkeF0gW2VieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBlYXggZWR4IGVieF07CisgCistdm9pZAlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgZGl2X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCAqIGFsLCB1OCAqIGFoLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NDEsNyArMTAyMiw4IEBAIHZvaWQJZGl2X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggKmFsLHU4ICphaCx1MTYgZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtibF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBibF07CisgCistdm9pZAlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGRpdl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZGxvLCB1MTYgZGhpLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NTMsNyArMTAzNSw4IEBAIHZvaWQJZGl2X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkbG8sdTE2IGRoaSx1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbZHhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBkeCBieF07CisgCistdm9pZAlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgZGl2X2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGRsbywgdTMyIGRoaSwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGRpdl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTY3LDQgKzEwNTAsNCBAQCB2b2lkCWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCisgI2VuZGlmCisgCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitpbmRleCBiZWE4MzU3Li4wZjBlNzhkIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitAQCAtNDAsMTAyICs0MCwxMDIgQEAKKyAjZGVmaW5lIF9fWDg2RU1VX1BSSU1fT1BTX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdTE2ICAgICBhYWFfd29yZCAodTE2IGQpOworLXUxNiAgICAgYWFzX3dvcmQgKHUxNiBkKTsKKy11MTYgICAgIGFhZF93b3JkICh1MTYgZCk7CistdTE2ICAgICBhYW1fd29yZCAodTggZCk7CistdTggICAgICBhZGNfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBhZGNfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGFkY19sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgYWRkX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgYWRkX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBhZGRfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIGFuZF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIGFuZF93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgYW5kX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBjbXBfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBjbXBfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGNtcF9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgZGFhX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGFzX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGVjX2J5dGUgKHU4IGQpOworLXUxNiAgICAgZGVjX3dvcmQgKHUxNiBkKTsKKy11MzIgICAgIGRlY19sb25nICh1MzIgZCk7CistdTggICAgICBpbmNfYnl0ZSAodTggZCk7CistdTE2ICAgICBpbmNfd29yZCAodTE2IGQpOworLXUzMiAgICAgaW5jX2xvbmcgKHUzMiBkKTsKKy11OCAgICAgIG9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgb3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIG9yX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBuZWdfYnl0ZSAodTggcyk7CistdTE2ICAgICBuZWdfd29yZCAodTE2IHMpOworLXUzMiAgICAgbmVnX2xvbmcgKHUzMiBzKTsKKy11OCAgICAgIG5vdF9ieXRlICh1OCBzKTsKKy11MTYgICAgIG5vdF93b3JkICh1MTYgcyk7CistdTMyICAgICBub3RfbG9uZyAodTMyIHMpOworLXU4ICAgICAgcmNsX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcmNsX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJjbF9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICByY3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICByY3Jfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgcmNyX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHJvbF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHJvbF93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICByb2xfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgcm9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcm9yX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJvcl9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICBzaGxfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzaGxfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgc2hsX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHNocl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHNocl93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICBzaHJfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgc2FyX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc2FyX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHNhcl9sb25nICh1MzIgZCwgdTggcyk7CistdTE2ICAgICBzaGxkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaGxkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTE2ICAgICBzaHJkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaHJkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTggICAgICBzYmJfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzYmJfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHNiYl9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgc3ViX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc3ViX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBzdWJfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIHRlc3RfYnl0ZSAodTggZCwgdTggcyk7Cistdm9pZCAgICB0ZXN0X3dvcmQgKHUxNiBkLCB1MTYgcyk7Cistdm9pZCAgICB0ZXN0X2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICB4b3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICB4b3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHhvcl9sb25nICh1MzIgZCwgdTMyIHMpOworLXZvaWQgICAgaW11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIGltdWxfd29yZCAodTE2IHMpOworLXZvaWQgICAgaW11bF9sb25nICh1MzIgcyk7Cistdm9pZCAJaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIG11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIG11bF93b3JkICh1MTYgcyk7Cistdm9pZCAgICBtdWxfbG9uZyAodTMyIHMpOworLXZvaWQgICAgaWRpdl9ieXRlICh1OCBzKTsKKy12b2lkICAgIGlkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgaWRpdl9sb25nICh1MzIgcyk7Cistdm9pZCAgICBkaXZfYnl0ZSAodTggcyk7Cistdm9pZCAgICBkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgZGl2X2xvbmcgKHUzMiBzKTsKKy12b2lkICAgIGlucyAoaW50IHNpemUpOworLXZvaWQgICAgb3V0cyAoaW50IHNpemUpOworLXUxNiAgICAgbWVtX2FjY2Vzc193b3JkIChpbnQgYWRkcik7Cistdm9pZCAgICBwdXNoX3dvcmQgKHUxNiB3KTsKKy12b2lkICAgIHB1c2hfbG9uZyAodTMyIHcpOworLXUxNiAgICAgcG9wX3dvcmQgKHZvaWQpOworLXUzMgkJcG9wX2xvbmcgKHZvaWQpOworKyAgICB1MTYgYWFhX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFzX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFkX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFtX3dvcmQodTggZCk7CisrICAgIHU4IGFkY19ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRjX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkY19sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFuZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYW5kX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGNtcF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGNtcF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGRhYV9ieXRlKHU4IGQpOworKyAgICB1OCBkYXNfYnl0ZSh1OCBkKTsKKysgICAgdTggZGVjX2J5dGUodTggZCk7CisrICAgIHUxNiBkZWNfd29yZCh1MTYgZCk7CisrICAgIHUzMiBkZWNfbG9uZyh1MzIgZCk7CisrICAgIHU4IGluY19ieXRlKHU4IGQpOworKyAgICB1MTYgaW5jX3dvcmQodTE2IGQpOworKyAgICB1MzIgaW5jX2xvbmcodTMyIGQpOworKyAgICB1OCBvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgb3Jfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgb3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBuZWdfYnl0ZSh1OCBzKTsKKysgICAgdTE2IG5lZ193b3JkKHUxNiBzKTsKKysgICAgdTMyIG5lZ19sb25nKHUzMiBzKTsKKysgICAgdTggbm90X2J5dGUodTggcyk7CisrICAgIHUxNiBub3Rfd29yZCh1MTYgcyk7CisrICAgIHUzMiBub3RfbG9uZyh1MzIgcyk7CisrICAgIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcmNsX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcmNsX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCByY3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHJjcl93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHJjcl9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggcm9sX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiByb2xfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiByb2xfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHJvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcm9yX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcm9yX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHNobF93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHNobF9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggc2hyX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzaHJfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHNhcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1MTYgc2hsZF93b3JkKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrICAgIHUzMiBzaGxkX2xvbmcodTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysgICAgdTE2IHNocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKyAgICB1MzIgc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrICAgIHU4IHNiYl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2JiX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IHN1Yl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHZvaWQgdGVzdF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB2b2lkIHRlc3Rfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB2b2lkIHRlc3RfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCB4b3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHhvcl93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiB4b3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB2b2lkIGltdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpbXVsX3dvcmQodTE2IHMpOworKyAgICB2b2lkIGltdWxfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKiByZXNfbG8sIHUzMiAqIHJlc19oaSwgdTMyIGQsIHUzMiBzKTsKKysgICAgdm9pZCBtdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBtdWxfd29yZCh1MTYgcyk7CisrICAgIHZvaWQgbXVsX2xvbmcodTMyIHMpOworKyAgICB2b2lkIGlkaXZfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGlkaXZfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgZGl2X2J5dGUodTggcyk7CisrICAgIHZvaWQgZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGRpdl9sb25nKHUzMiBzKTsKKysgICAgdm9pZCBpbnMoaW50IHNpemUpOworKyAgICB2b2lkIG91dHMoaW50IHNpemUpOworKyAgICB1MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKTsKKysgICAgdm9pZCBwdXNoX3dvcmQodTE2IHcpOworKyAgICB2b2lkIHB1c2hfbG9uZyh1MzIgdyk7CisrICAgIHUxNiBwb3Bfd29yZCh2b2lkKTsKKysgICAgdTMyIHBvcF9sb25nKHZvaWQpOworKyAgICB2b2lkIGNwdWlkKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NDZlYzlkCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK0BAIC0wLDAgKzEsNzcgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoKKysqIElubGluZSBoZWxwZXJzIGZvciB4ODZlbXUKKysqCisrKiBDb3B5cmlnaHQgKEMpIDIwMDggQmFydCBUcm9qYW5vd3NraSwgU3ltYmlvIFRlY2hub2xvZ2llcywgTExDCisrKgorKyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyoKKysqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZAorKyogIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKysqICBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0CisrKiAgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCisrKiAgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycyBub3QgYmUgdXNlZAorKyogIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKysqICB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgYXV0aG9ycyBtYWtlcyBubworKyogIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisrKiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKysqCisrKiAgVEhFIEFVVEhPUlMgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisrKiAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworKyogIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisrKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRgorKyogIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgorKyogIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKysqICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyoKKysqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysqCisrKiBMYW5ndWFnZTogICAgIEdOVSBDCisrKiBFbnZpcm9ubWVudDogIEdDQyBvbiBpMzg2IG9yIHg4Ni02NAorKyogRGV2ZWxvcGVyOiAgICBCYXJ0IFRyb2phbm93c2tpCisrKgorKyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBhIGZldyB4ODYgbWFjcm9zIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlCisrKiAgICAgICAgICAgICAgIGVtdWxhdG9yIHRvIGV4ZWN1dGUgbmF0aXZlIGluc3RydWN0aW9ucy4KKysqCisrKiAgICAgICAgICAgICAgIEZvciBQSUMgdnMgbm9uLVBJQyBjb2RlIHJlZmVyIHRvOgorKyogICAgICAgICAgICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKKysqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjaWZuZGVmIF9fWDg2RU1VX1BSSU1fWDg2X0dDQ19ICisrI2RlZmluZSBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSAorKworKyNpbmNsdWRlICJ4ODZlbXUvdHlwZXMuaCIKKysKKysjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8ICEoZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pKQorKyNlcnJvciBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBnY2Mgb24gaTM4NiBvciB4ODYtNjQgc3lzdGVtCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoX19QSUNfXykgJiYgZGVmaW5lZChfX2kzODZfXykKKysKKysjZGVmaW5lIFg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJSVlYnggICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAiY3B1aWQgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAibW92bCAlJWVieCwgJTEgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAicG9wbCAlJWVieCAgICAgICBcblx0IjoiPWEiKCphKSwgIj1yIigqYiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICI9YyIoKmMpLCAiPWQiKCpkKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImEiKCphKSwgImMiKCpjKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImNjIik7CisrfQorKworKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogISAoX19QSUNfXyAmJiBfX2kzODZfXykgKi8KKysKKysjZGVmaW5lIHg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY3B1aWQiOiI9YSIoKmEpLCAiPWIiKCpiKSwgIj1jIigqYyksICI9ZCIoKmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiYSIoKmEpLCAiYyIoKmMpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiY2MiKTsKKyt9CisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1BJQ19fICYmIF9faTM4Nl9fICovCisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcmVncy5oCitpbmRleCA1MmNmOGU0Li42YmQwNjExIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorQEAgLTQyLDcgKzQyLDcgQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFjcm9zIGFuZCB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qCitAQCAtNjQsNDggKzY0LDQ4IEBACisgCisgdHlwZWRlZiBzdHJ1Y3QgeworICAgICB1MzIgZV9yZWc7CistCX0gSTMyX3JlZ190OworK30gSTMyX3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTE2IGZpbGxlcjAsIHhfcmVnOworLQl9IEkxNl9yZWdfdDsKKysgICAgdTE2IGZpbGxlcjAsIHhfcmVnOworK30gSTE2X3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggZmlsbGVyMCwgZmlsbGVyMSwgaF9yZWcsIGxfcmVnOworLQl9IEk4X3JlZ190OworKyAgICB1OCBmaWxsZXIwLCBmaWxsZXIxLCBoX3JlZywgbF9yZWc7CisrfSBJOF9yZWdfdDsKKyAKKy0jZWxzZSAvKiAhX19CSUdfRU5ESUFOX18gKi8KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0JJR19FTkRJQU5fXyAqLworIAorIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgdTMyIGVfcmVnOworLQl9IEkzMl9yZWdfdDsKKyt9IEkzMl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXUxNiB4X3JlZzsKKy0JfSBJMTZfcmVnX3Q7CisrICAgIHUxNiB4X3JlZzsKKyt9IEkxNl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXU4IGxfcmVnLCBoX3JlZzsKKy0JfSBJOF9yZWdfdDsKKysgICAgdTggbF9yZWcsIGhfcmVnOworK30gSThfcmVnX3Q7CisgCistI2VuZGlmIC8qIEJJR19FTkRJQU4gKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJJR19FTkRJQU4gKi8KKyAKKyB0eXBlZGVmIHVuaW9uIHsKKy0JSTMyX3JlZ190ICAgSTMyX3JlZzsKKy0JSTE2X3JlZ190ICAgSTE2X3JlZzsKKy0JSThfcmVnX3QgICAgSThfcmVnOworLQl9IGkzODZfZ2VuZXJhbF9yZWdpc3RlcjsKKysgICAgSTMyX3JlZ190IEkzMl9yZWc7CisrICAgIEkxNl9yZWdfdCBJMTZfcmVnOworKyAgICBJOF9yZWdfdCBJOF9yZWc7CisrfSBpMzg2X2dlbmVyYWxfcmVnaXN0ZXI7CisgCisgc3RydWN0IGkzODZfZ2VuZXJhbF9yZWdzIHsKKy0JaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIEEsIEIsIEMsIEQ7CistCX07CisrICAgIGkzODZfZ2VuZXJhbF9yZWdpc3RlciBBLCBCLCBDLCBEOworK307CisgCisgdHlwZWRlZiBzdHJ1Y3QgaTM4Nl9nZW5lcmFsX3JlZ3MgR2VuX3JlZ190OworIAorIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyB7CistCWkzODZfZ2VuZXJhbF9yZWdpc3RlciBTUCwgQlAsIFNJLCBESSwgSVA7CistCXUzMiBGTEFHUzsKKy0JfTsKKysgICAgaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIFNQLCBCUCwgU0ksIERJLCBJUDsKKysgICAgdTMyIEZMQUdTOworK307CisgCisgLyogIAorICAqIFNlZ21lbnQgcmVnaXN0ZXJzIGhlcmUgcmVwcmVzZW50IHRoZSAxNiBiaXQgcXVhbnRpdGllcworQEAgLTExNCw3ICsxMTQsNyBAQCBzdHJ1Y3QgaTM4Nl9zcGVjaWFsX3JlZ3MgeworIAorIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyB7CisgICAgIHUxNiBDUywgRFMsIFNTLCBFUywgRlMsIEdTOworLQl9OworK307CisgCisgLyogOCBiaXQgcmVnaXN0ZXJzICovCisgI2RlZmluZSBSX0FIICBnZW4uQS5JOF9yZWcuaF9yZWcKK0BAIC0yNTgsOSArMjU4LDkgQEAgc3RydWN0IGkzODZfc2VnbWVudF9yZWdzIHsKKyAjZGVmaW5lICBJTlRSX0hBTFRFRCAgICAgICAgICAweDQKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyAgICBnZW47CistICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyAgICBzcGM7CistICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyAgICBzZWc7CisrICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyBnZW47CisrICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyBzcGM7CisrICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyBzZWc7CisgICAgIC8qCisgICAgICAqIE1PREUgY29udGFpbnMgaW5mb3JtYXRpb24gb246CisgICAgICAqICBSRVBFIHByZWZpeCAgICAgICAgICAgICAyIGJpdHMgIHJlcGUscmVwbmUKK0BAIC0yNzMsMjEgKzI3MywyMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAqICBFeHRlcm4gaW50ZXJydXB0ICAgICAgICAxIGJpdHMKKyAgICAgICogIEhhbHRlZCAgICAgICAgICAgICAgICAgIDEgYml0cworICAgICAgKi8KKy0gICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU7CistICAgIHZvbGF0aWxlIGludCAgICAgICAgICAgICAgICBpbnRyOyAgIC8qIG1hc2sgb2YgcGVuZGluZyBpbnRlcnJ1cHRzICovCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZzsKKysgICAgdTMyIG1vZGU7CisrICAgIHZvbGF0aWxlIGludCBpbnRyOyAgICAgICAgICAvKiBtYXNrIG9mIHBlbmRpbmcgaW50ZXJydXB0cyAqLworKyAgICBpbnQgZGVidWc7CisgI2lmZGVmIERFQlVHCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazsKKy0gICAgdTE2ICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkX2lwOworLSAgICB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRfY3M7CistICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBlbmNfcG9zOworLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX3N0cl9wb3M7CistICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfYnVmWzMyXTsgLyogZW5jb2RlZCBieXRlIHN0cmVhbSAgKi8KKy0gICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfYnVmWzI1Nl07IC8qIGRpc2Fzc2VtYmxlZCBzdHJpbmdzICovCisrICAgIGludCBjaGVjazsKKysgICAgdTE2IHNhdmVkX2lwOworKyAgICB1MTYgc2F2ZWRfY3M7CisrICAgIGludCBlbmNfcG9zOworKyAgICBpbnQgZW5jX3N0cl9wb3M7CisrICAgIGNoYXIgZGVjb2RlX2J1ZlszMl07ICAgICAgICAvKiBlbmNvZGVkIGJ5dGUgc3RyZWFtICAqLworKyAgICBjaGFyIGRlY29kZWRfYnVmWzI1Nl07ICAgICAgLyogZGlzYXNzZW1ibGVkIHN0cmluZ3MgKi8KKyAjZW5kaWYKKy0gICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgIGludG5vOworLSAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYWRbM107CistCX0gWDg2RU1VX3JlZ3M7CisrICAgIHU4IGludG5vOworKyAgICB1OCBfX3BhZFszXTsKKyt9IFg4NkVNVV9yZWdzOworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKK0BAIC0zMDAsMjAgKzMwMCwyMCBAQCBwcml2YXRlCQkJLSBwcml2YXRlIGRhdGEgcG9pbnRlcgorIHg4NgkJCS0gWDg2IHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1bnNpZ25lZCBsb25nCW1lbV9iYXNlOworLQl1bnNpZ25lZCBsb25nCW1lbV9zaXplOworLQl2b2lkKiAgICAgICAgCXByaXZhdGU7CistCVg4NkVNVV9yZWdzCQl4ODY7CistCX0gWDg2RU1VX3N5c0VudjsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKKysgICAgdm9pZCAqcHJpdmF0ZTsKKysgICAgWDg2RU1VX3JlZ3MgeDg2OworK30gWDg2RU1VX3N5c0VudjsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKyAvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZS4KK0BAIC0zMjEsMTcgKzMyMSwxNiBAQCBleHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICAqIFdlIGtlZXAgaXQgZ2xvYmFsIHRvIGF2b2lkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBjb2RlIGZvciBzcGVlZC4KKyAgKi8KKyAKKy1leHRlcm4gICAgWDg2RU1VX3N5c0VudglfWDg2RU1VX2VudjsKKysgICAgZXh0ZXJuIFg4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7CisgI2RlZmluZSAgIE0gICAgICAgICAgICAgX1g4NkVNVV9lbnYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIEZ1bmN0aW9uIHRvIGxvZyBpbmZvcm1hdGlvbiBhdCBydW50aW1lICovCisgCistdm9pZAlwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworKyAgICB2b2lkIHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfUkVHU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9SRUdTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitpbmRleCBjMGMwOWMxLi41YTZlZjAxIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitAQCAtMzYsNyArMzYsNiBAQAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLQorICNpZm5kZWYgX19YODZFTVVfVFlQRVNfSAorICNkZWZpbmUgX19YODZFTVVfVFlQRVNfSAorIAorQEAgLTYxLDQ2ICs2MCwyMSBAQAorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistLyogQ3VycmVudGx5IG9ubHkgZm9yIExpbnV4LzMyYml0ICovCistI3VuZGVmICBfX0hBU19MT05HX0xPTkdfXworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChOT19MT05HX0xPTkcpCistI2RlZmluZSBfX0hBU19MT05HX0xPTkdfXworLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKy0vKiBUYWtlbiBmcm9tIFhtZC5oICovCistI3VuZGVmIE5VTTMyCistI2lmIGRlZmluZWQgKF9MUDY0KSB8fCBcCistICAgIGRlZmluZWQoX19hbHBoYSkgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChpYTY0KSB8fCBcCistICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKy0gICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKy0gICAgKGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19MUDY0KSkgfHwgXAorLSAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorLSAgICAoZGVmaW5lZChfX3NnaSkgJiYgKF9NSVBTX1NaTE9ORyA9PSA2NCkpCistI2RlZmluZSBOVU0zMiBpbnQKKy0jZWxzZQorLSNkZWZpbmUgTlVNMzIgbG9uZworLSNlbmRpZgorK3R5cGVkZWYgdWludDhfdCB1ODsKKyt0eXBlZGVmIHVpbnQxNl90IHUxNjsKKyt0eXBlZGVmIHVpbnQzMl90IHUzMjsKKyt0eXBlZGVmIHVpbnQ2NF90IHU2NDsKKyAKKy10eXBlZGVmIHVuc2lnbmVkIGNoYXIgCQl1ODsKKy10eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkJdTE2OworLXR5cGVkZWYgdW5zaWduZWQgTlVNMzIgCQl1MzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgCXU2NDsKKy0jZW5kaWYKKyt0eXBlZGVmIGludDhfdCBzODsKKyt0eXBlZGVmIGludDE2X3QgczE2OworK3R5cGVkZWYgaW50MzJfdCBzMzI7CisrdHlwZWRlZiBpbnQ2NF90IHM2NDsKKyAKKy10eXBlZGVmIGNoYXIgCQkJCXM4OworLXR5cGVkZWYgc2hvcnQgCQkJCXMxNjsKKy10eXBlZGVmIE5VTTMyIAkJCQlzMzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiBsb25nIGxvbmcgCQkJczY0OworLSNlbmRpZgorLQorLXR5cGVkZWYgdW5zaWduZWQgaW50CQkJdWludDsKKy10eXBlZGVmIGludCAJCQkJc2ludDsKKyt0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OworK3R5cGVkZWYgaW50IHNpbnQ7CisgCisgdHlwZWRlZiB1MTYgWDg2RU1VX3Bpb0FkZHI7CisgCistI3VuZGVmIE5VTTMyCistCistI2VuZGlmCS8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oIGIvbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaAoraW5kZXggMTEyZWUzNi4uZjExZGMxMCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKK0BAIC0zOCw3ICszOCw2IEBACisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCistCisgI2lmbmRlZiBfX1g4NkVNVV9YODZFTVVJX0gKKyAjZGVmaW5lIF9fWDg2RU1VX1g4NkVNVUlfSAorIAorQEAgLTc0LDI5ICs3MywyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKyNlbmRpZgorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElubGluZSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19yZGIpKHUzMiBhZGRyKTsKKy1leHRlcm4gdTE2IAkoWDg2QVBJUCBzeXNfcmR3KSh1MzIgYWRkcik7CistZXh0ZXJuIHUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dydykodTMyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcik7CisrICAgIGV4dGVybiB1MTYoWDg2QVBJUCBzeXNfcmR3KSAodTMyIGFkZHIpOworKyAgICBleHRlcm4gdTMyKFg4NkFQSVAgc3lzX3JkbCkgKHUzMiBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3JsKSAodTMyIGFkZHIsIHUzMiB2YWwpOworIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19pbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MzIgCShYODZBUElQIHN5c19pbmwpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXRiKShYODZFTVVfcGlvQWRkciBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQJKFg4NkFQSVAgc3lzX291dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19pbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUxNihYODZBUElQIHN5c19pbncpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUzMihYODZBUElQIHN5c19pbmwpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0dykgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVUlfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfWDg2RU1VSV9IICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvYXItZnJvbS1lbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkY2JjNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0ZpeCBjcm9zcyBsaW5rIHVzaW5nIGhvc3QtY3Jvc3MgYXIKKworSWYgYnVpbGRpbmcgb24gMzJiaXQgaG9zdCBhbmQgY3JlYXRpbmcgNjRiaXQgbGlicmFyaWVzLCB0aGUgdGFyZ2V0CitwYWNrYWdlIGJ1aWxkcyBzaG91bGQgbm90IGludm9rZSB0aGUgMzJiaXQgaG9zdHMncyBhci4gIFNwZWNpZmljYWxseQoreW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgbGlrZToKKworeDg2XzY0LWxpbnV4LWdjYyAgLW02NCAtLXN5c3Jvb3Q9L29wdC9xZW11eDg2LTY0L3RtcC9zeXNyb290cy9xZW11eDg2LTY0IC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1MbGlicy94ODZlbXUgdjg2X3g4NmVtdS5vIHY4Nl9tZW0ubyB2ODZfY29tbW9uLm8gIHY4Ni5vIC1seDg2ZW11IC1vIHY4NmQKK2xpYnMveDg2ZW11L2xpYng4NmVtdS5hOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBBcmNoaXZlIGhhcyBubyBpbmRleDsgcnVuIHJhbmxpYiB0byBhZGQgb25lCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGxpYnMveDg2ZW11L01ha2VmaWxlIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2xpYnMveDg2ZW11L01ha2VmaWxlCisrKysgYi9saWJzL3g4NmVtdS9NYWtlZmlsZQorQEAgLTEsNyArMSwxMSBAQAorIE9CSlMgPSBkZWNvZGUubyBmcHUubyBvcHMubyBvcHMyLm8gcHJpbV9vcHMubyBzeXMubworIAorK2lmZXEgKCQoQVIpLCkKKysJQVIgPSBhcgorK2VuZGlmCisrCisgbGlieDg2ZW11LmE6ICQoT0JKUykKKy0JYXIgcnYgJEAgJCsKKysJJChBUikgcnYgJEAgJCsKKyAKKyAlLm86ICUuYworIAkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvZmJzZXR1cCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvZmJzZXR1cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTQwOWNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9mYnNldHVwCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoIAorCisvc2Jpbi9tb2Rwcm9iZSB1dmVzYWZiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvdXZlc2FmYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzg5NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZgpAQCAtMCwwICsxLDIgQEAKKyMgTG9hZCB1dmVzYWZiLmtvIGF0IGJvb3QKK3V2ZXNhZmIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZF8wLjEuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwMjA3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiCkBAIC0wLDAgKzEsNjkgQEAKK1NVTU1BUlkgPSAiVXNlciBzdXBwb3J0IGJpbmFyeSBmb3IgdGhlIHV2ZXNhZmIga2VybmVsIG1vZHVsZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+c3BvY2svcHJvamVjdHMvdXZlc2FmYi8iCisKKyMgdGhlIGNvcHlyaWdodCBpbmZvIGlzIGF0IHRoZSBib3R0b20gb2YgUkVBRE1FLCBleHBlY3QgYnJlYWsKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTk0YWMxOTcxZTRmMjMwOWRjMzIyZDU5OGU3YjFmN2RkIgorCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS11dmVzYWZiIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1VwZGF0ZS14ODZlbXUtZnJvbS1YLm9yZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mYnNldHVwIFwKKyAgICAgICAgICAgZmlsZTovL3V2ZXNhZmIuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9hci1mcm9tLWVudi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxYzc5MmJhN2I4NzRhZDhjNDNmMGQzZGE0Y2ZhYmUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzNDk2NGFlMThlZjY4Yzg0OTNhZGQyY2UxNTBlM2I0NTAyYmFkZWIwZDkxOTRiNGJkODEyNDFkMjVlNjczNWMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitJTklUU0NSSVBUX05BTUUgPSAiZmJzZXR1cCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAgUyAuIgorCitkb19jb25maWd1cmUgKCkgeworCS4vY29uZmlndXJlIC0td2l0aC14ODZlbXUKK30KKworZG9fY29tcGlsZSAoKSB7CisJS0RJUj0iJHtTVEFHSU5HX0RJUl9IT1NUfS91c3IiIG1ha2UKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCB2ODZkICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisKKyAgICAgICAgIyBPbmx5IGluc3RhbGwgZmJzZXR1cCBzY3JpcHQgaWYgJ3N5c3Zpbml0JyBpcyBpbiBESVNUUk9fRkVBVFVSRVMKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZmJzZXR1cCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZmJzZXR1cAorICAgICAgICBmaQorCisgICAgICAgICMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKyAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3V2ZXNhZmIuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZAorICAgICAgICBmaQorfQorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZmJzZXR1cC5zZXJ2aWNlCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYTRkNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiCkBAIC0wLDAgKzEsNzIgQEAKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmg7ZW5kbGluZT0yNTttZDU9YjFkMWQyY2RhMWMwN2ViODQ4ZWE3ZDYyMTU3MTJkOWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY29yZS9kbnMuaDtlbmRsaW5lPTIzO21kNT02ZmU4MjU5MGI4MWFhMGRkZWE1MDk1YjU0OGUyZmRjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1kYWVtb24vbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTllZTc3MzY4YzU0MDdhZjc3Y2FhZWYxYjA3Mjg1OTY5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNsaWVudC9jbGllbnQuaDtlbmRsaW5lPTIzO21kNT1mNGFjNzQxYTI1YzRmNDM0MDM5YmEzZTE4Yzg2NzRjZiIKKworcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZQorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbiwtLWRpc2FibGUtcHl0aG9uLHB5dGhvbi1uYXRpdmUgcHl0aG9uIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJmMjI3NDViOGY3MzY4YWQ1YTBhM2ZkZGFjMzQzZjJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzNzI3MTliMjRlMmRkNzVkZTZmNTliYjEzMTVlNjAwZGI0ZmQwOTI4MDViZDEyMDFlZDBjYjY1MWEyZGFiNDgiCisKK0RFUEVORFMgKz0gImF2YWhpIGd0aysgbGliZ2xhZGUiCisKK0FWQUhJX0dUSyA9ICItLWVuYWJsZS1ndGsgLS1kaXNhYmxlLWd0azMiCisKK1MgPSAiJHtXT1JLRElSfS9hdmFoaS0ke1BWfSIKKworUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXRpbHMgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jIHB5dGhvbi1hdmFoaSBhdmFoaS1kaXNjb3ZlciBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkqLnNvLioiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGliYXZhaC11aSoiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJhdmFoaS11aSR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpLmEiCisKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9iKiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9iKiIKKworRklMRVNfcHl0aG9uLWF2YWhpID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpX2Rpc2NvdmVyIgorRklMRVNfYXZhaGktZGlzY292ZXIgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9pbnRlcmZhY2VzL2F2YWhpLWRpc2NvdmVyKiIKK0ZJTEVTX2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludGVyZmFjZXMvYXZhaGktZGlzY292ZXIuZ2xhZGUiCisKK1JERVBFTkRTX2F2YWhpLWRpc2NvdmVyID0gInB5dGhvbi1hdmFoaSBweXRob24tcHlndGsiCitSREVQRU5EU19weXRob24tYXZhaGkgPSAicHl0aG9uLWNvcmUgcHl0aG9uLWRidXMiCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke3N5c2NvbmZkaXJ9IC1yZgorCXJtICR7RH0ke2Jhc2VfbGliZGlyfSAtcmYKKwlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9IC1yZgorCSMgVGhlICR7c3lzdGVtZF91bml0ZGlyfSBpcyAvbGliL3N5c3RlbWQsIHNvIHdlIG5lZWQgcm1kaXIgL2xpYiwKKwkjIGJ1dCBub3QgJHtiYXNlX2xpYmRpcn0gaGVyZS4gQW5kIHRoZSAvbGliIG1heSBub3QgZXhpc3QKKwkjIHdoaXRob3V0IHN5c3RlbWQuCisJWyAhIC1kICR7RH0vbGliIF0gfHwgcm1kaXIgJHtEfS9saWIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLWIqCisJcm0gJHtEfSR7YmluZGlyfS9hdmFoaS1wKgorCXJtICR7RH0ke2JpbmRpcn0vYXZhaGktcioKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLXMqCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktYyogLXJmCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktZyogLXJmCisJcm0gJHtEfSR7bGliZGlyfS9saWJhdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vbGliYXZhaGktZyoKKwlybSAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9hdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2F2YWhpLWcqCisJcm0gJHtEfSR7c2JpbmRpcn0gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vYXZhaGkvYSoKKwlybSAke0R9JHtkYXRhZGlyfS9hdmFoaS9zKgorCXJtICR7RH0ke2RhdGFkaXJ9L2xvY2FsZS8gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vZGJ1cyogLXJmCisJcm0gJHtEfSR7bWFuZGlyfS9tYW4xL2EqCisJcm0gJHtEfSR7bWFuZGlyfS9tYW41IC1yZgorCXJtICR7RH0ke21hbmRpcn0vbWFuOCAtcmYKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1MTk3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKQEAgLTAsMCArMSwxNTggQEAKK1NVTU1BUlkgPSAiQXZhaGkgSVB2NExMIG5ldHdvcmsgYWRkcmVzcyBjb25maWd1cmF0aW9uIGRhZW1vbiIKK0RFU0NSSVBUSU9OID0gJ0F2YWhpIGlzIGEgZnVsbHkgTEdQTCBmcmFtZXdvcmsgZm9yIE11bHRpY2FzdCBETlMgU2VydmljZSBEaXNjb3ZlcnkuIEl0IFwKK2FsbG93cyBwcm9ncmFtcyB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBzZXJ2aWNlcyBhbmQgaG9zdHMgcnVubmluZyBvbiBhIGxvY2FsIG5ldHdvcmsgXAord2l0aCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGlzIHRvb2wgaW1wbGVtZW50cyBJUHY0TEwsICJEeW5hbWljIENvbmZpZ3VyYXRpb24gb2YgXAorSVB2NCBMaW5rLUxvY2FsIEFkZHJlc3NlcyIgKElFVEYgUkZDMzkyNyksIGEgcHJvdG9jb2wgZm9yIGF1dG9tYXRpYyBJUCBhZGRyZXNzIFwKK2NvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbGluay1sb2NhbCAxNjkuMjU0LjAuMC8xNiByYW5nZSB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGNlbnRyYWwgXAorc2VydmVyLicKK0FVVEhPUiA9ICJMZW5uYXJ0IFBvZXR0ZXJpbmcgPGxlbm5hcnRAcG9ldHRlcmluZy5uZXQ+IgorSE9NRVBBR0UgPSAiaHR0cDovL2F2YWhpLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2F2YWhpLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gIm5ldHdvcmsiCisKKyMgbWFqb3IgcGFydCBpcyB1bmRlciBMR1BMdjIuMSssIGJ1dCBzZXZlcmFsIC5kdGQsIC54c2wsIGluaXRzY3JpcHRzIGFuZAorIyBweXRob24gc2NyaXB0cyBhcmUgdW5kZXIgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKKworSU5DX1BSID0gInIxMSIKKworREVQRU5EUyA9ICJleHBhdCBsaWJjYXAgbGliZGFlbW9uIGRidXMgZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiaHR0cDovL2F2YWhpLm9yZy9kb3dubG9hZC9hdmFoaS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly8wMGF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly85OWF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly9pbml0c2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL291dC1vZi10cmVlLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vcmV1c2Vwb3J0LWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWF1dG9pcGQiCitVU0VSQUREX1BBUkFNX2F2YWhpLWRhZW1vbiA9ICItLXN5c3RlbSAtLWhvbWUgL3Zhci9ydW4vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBhdmFoaSIKKworVVNFUkFERF9QQVJBTV9hdmFoaS1hdXRvaXBkID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9hdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYyBcIkF2YWhpIGF1dG9pcCBkYWVtb25cIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaS1hdXRvaXBkIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgZ2V0dGV4dCB1c2VyYWRkCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisgICAgICAgICAgICAgLS13aXRoLWF2YWhpLXByaXYtYWNjZXNzLWdyb3VwPWFkbSBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YWNrLXByb3RlY3RvciBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWdkYm0gXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1tb25vIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtbW9ub2RvYyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0MyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0NCBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXB5dGhvbiBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jIFwKKyAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9TWVNWSU5JVH0gXAorICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1NZU1RFTUR9IFwKKyAgICAgICAgICAgICAke0FWQUhJX0dUS30gXAorICAgICAgICAgICAiCisKKyMgVGhlIGRpc3RybyBjaG9pY2UgZGV0ZXJtaW5lcyB3aGF0IGluaXQgc2NyaXB0cyBhcmUgaW5zdGFsbGVkCitFWFRSQV9PRUNPTkZfU1lTVklOSVQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnLS13aXRoLWRpc3Rybz1kZWJpYW4nLCctLXdpdGgtZGlzdHJvPW5vbmUnLGQpfSIKK0VYVFJBX09FQ09ORl9TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJywnLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyJyxkKX0iCisKK0FWQUhJX0dUSyA/PSAiLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtZ3RrMyIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saW50bCIKK0xERkxBR1NfYXBwZW5kX3VjbGludXgtdWNsaWJjID0gIiAtbGludGwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAnczpBTV9DSEVDS19QWU1PRDplY2hvICJubyBweW1vZCIgI0FNX0NIRUNLX1BZTU9EOmcnIC1pICR7U30vY29uZmlndXJlLmFjCit9CisKKworUEFDS0FHRVMgPSsgImF2YWhpLWRhZW1vbiBsaWJhdmFoaS1jb21tb24gbGliYXZhaGktY29yZSBsaWJhdmFoaS1jbGllbnQgYXZhaGktZG5zY29uZmQgbGliYXZhaGktZ2xpYiBsaWJhdmFoaS11aSBhdmFoaS1hdXRvaXBkIGF2YWhpLXV0aWxzIgorCisjIEFzIGF2YWhpIGRvZXNuJ3QgcHV0IGFueSBmaWxlcyBpbnRvIFBOLCBjbGVhciB0aGUgZmlsZXMgbGlzdCB0byBhdm9pZCBwcm9ibGVtcworIyBpZiBleHRyYSBsaWJyYXJpZXMgYXBwZWFyLgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfYXZhaGktYXV0b2lwZCA9ICIke3NiaW5kaXJ9L2F2YWhpLWF1dG9pcGQgXAorICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWF1dG9pcGQuYWN0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kaGNwLyovYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdWRoY3BjLmQvMDBhdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGhjcGMuZC85OWF2YWhpLWF1dG9pcGQiCitGSUxFU19saWJhdmFoaS1jb21tb24gPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWNvbW1vbi5zby4qIgorRklMRVNfbGliYXZhaGktY29yZSA9ICIke2xpYmRpcn0vbGliYXZhaGktY29yZS5zby4qIgorRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c2JpbmRpcn0vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2hvc3RzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMSBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludHJvc3BlY3Rpb24vKi5pbnRyb3NwZWN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2F2YWhpLXNlcnZpY2UuZHRkIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL3NlcnZpY2UtdHlwZXMgXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyIKK0ZJTEVTX2xpYmF2YWhpLWNsaWVudCA9ICIke2xpYmRpcn0vbGliYXZhaGktY2xpZW50LnNvLioiCitGSUxFU19saWJhdmFoaS11aSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkuc28uKiIKK0ZJTEVTX2F2YWhpLWRuc2NvbmZkID0gIiR7c2JpbmRpcn0vYXZhaGktZG5zY29uZmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9hdmFoaS1kbnNjb25mZC5hY3Rpb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZG5zY29uZmQiCitGSUxFU19saWJhdmFoaS1nbGliID0gIiR7bGliZGlyfS9saWJhdmFoaS1nbGliLnNvLioiCitGSUxFU19saWJhdmFoaS1nb2JqZWN0ID0gIiR7bGliZGlyfS9saWJhdmFoaS1nb2JqZWN0LnNvLioiCitGSUxFU19hdmFoaS11dGlscyA9ICIke2JpbmRpcn0vYXZhaGktKiIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gImF2YWhpLWRhZW1vbiAoPSAke0VYVEVORFBLR1Z9KSBsaWJhdmFoaS1jb3JlICg9ICR7RVhURU5EUEtHVn0pIGxpYmF2YWhpLWNsaWVudCAoPSAke0VYVEVORFBLR1Z9KSIKKworIyB1Y2xpYmMgaGFzIG5vIG5zcworUlJFQ09NTUVORFNfYXZhaGktZGFlbW9uX2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKKworUlJFQ09NTUVORFNfYXZhaGktZGV2ID0gImV4cGF0LWRldiBsaWJjYXAtZGV2IGxpYmRhZW1vbi1kZXYgZGJ1cy1kZXYgZ2xpYi0yLjAtZGV2IHVwZGF0ZS1yYy5kLWRldiIKK1JSRUNPTU1FTkRTX2F2YWhpLWRldl9hcHBlbmRfbGliYy1nbGliYyA9ICIgZ2V0dGV4dC1kZXYiCisKK1JSRUNPTU1FTkRTX2F2YWhpLWRldltub2RlcHJyZWNzXSA9ICIxIgorCitDT05GRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c3lzY29uZmRpcn0vYXZhaGkvYXZhaGktZGFlbW9uLmNvbmYiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkIgorSU5JVFNDUklQVF9OQU1FX2F2YWhpLWRhZW1vbiA9ICJhdmFoaS1kYWVtb24iCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kYWVtb24gPSAiZGVmYXVsdHMgMjEgMTkiCitJTklUU0NSSVBUX05BTUVfYXZhaGktZG5zY29uZmQgPSAiYXZhaGktZG5zY29uZmQiCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kbnNjb25mZCA9ICJkZWZhdWx0cyAyMiAxOSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkb24ndCBpbnN0YWxsIC92YXIvcnVuIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKKwkjIC92YXIvcnVuIG9mIGN1cnJlbnQgdmVyc2lvbiBpcyBlbXB0eSwgc28ganVzdCByZW1vdmUgaXQuCisJIyBpZiAvdmFyL3J1biBiZWNvbWUgbm9uLWVtcHR5IGluIHRoZSBmdXR1cmUsIG5lZWQgdG8gaW5zdGFsbCBpdCB2aWEgdm9sYXRpbGUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZGJ1cy0xL2ludGVyZmFjZXMKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtkYXRhZGlyfS9kYnVzLTEKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9hdmFoaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCWluc3RhbGwgJHtXT1JLRElSfS8wMGF2YWhpLWF1dG9pcGQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQKKwlpbnN0YWxsICR7V09SS0RJUn0vOTlhdmFoaS1hdXRvaXBkICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kCit9CisKKyMgQXQgdGhlIHRpbWUgdGhlIHBvc3RpbnN0IHJ1bnMsIGRidXMgbWlnaHQgbm90IGJlIHNldHVwIHNvIG9ubHkgcmVzdGFydCBpZiBydW5uaW5nIAorIyBEb24ndCBleGl0IGVhcmx5LCBiZWNhdXNlIHVwZGF0ZS1yYy5kIG5lZWRzIHRvIHJ1biBzdWJzZXF1ZW50bHkuCisKK3BrZ19wb3N0aW5zdF9hdmFoaS1kYWVtb24gKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorZmkKK30KKworcGtnX3Bvc3RybV9hdmFoaS1kYWVtb24gKCkgeworCWRlbHVzZXIgYXZhaGkgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpIHx8IHRydWUKK30KKworcGtnX3Bvc3RybV9hdmFoaS1hdXRvaXBkICgpIHsKKwlkZWx1c2VyIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpXzAuNi4zMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3OTZhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBzeXN0ZW1kCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tZGFlbW9uICR7UE59LWRuc2NvbmZkIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWRhZW1vbiA9ICJhdmFoaS1kYWVtb24uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1kbnNjb25mZCA9ICJhdmFoaS1kbnNjb25mZC5zZXJ2aWNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jb21tb24vYWRkcmVzcy5oO2VuZGxpbmU9MjU7bWQ1PWIxZDFkMmNkYTFjMDdlYjg0OGVhN2Q2MjE1NzEyZDlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvcmUvZG5zLmg7ZW5kbGluZT0yMzttZDU9NmZlODI1OTBiODFhYTBkZGVhNTA5NWI1NDhlMmZkY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktZGFlbW9uL21haW4uYztlbmRsaW5lPTIxO21kNT05ZWU3NzM2OGM1NDA3YWY3N2NhYWVmMWIwNzI4NTk2OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jbGllbnQvY2xpZW50Lmg7ZW5kbGluZT0yMzttZDU9ZjRhYzc0MWEyNWM0ZjQzNDAzOWJhM2UxOGM4Njc0Y2YiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmYyMjc0NWI4ZjczNjhhZDVhMGEzZmRkYWMzNDNmMmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM3MjcxOWIyNGUyZGQ3NWRlNmY1OWJiMTMxNWU2MDBkYjRmZDA5MjgwNWJkMTIwMWVkMGNiNjUxYTJkYWI0OCIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitQQUNLQUdFUyA9KyAibGliYXZhaGktZ29iamVjdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWF2YWhpLWZpeC1hdmFoaS1zdGF0dXMtY29tbWFuZC1lcnJvci1wcm9tcHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTBkZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZjc3NGFjMjVmNDM2YTc4MmNjY2NjNGRiZTY4Mzc4YTY4NDU5Njc5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCA3IE5vdiAyMDEzIDE0OjM2OjI4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGF2YWhpOiBmaXggYXZhaGkgc3RhdHVzIGNvbW1hbmQgZXJyb3IgcHJvbXB0CisKK3NlcnZpY2UgLS1zdGF0dXMtYWxsIGNvbW1hbmQgd2lsbCBkaXNwbGF5IHdyb25nIHN0YXR1cyBmb3IgYXZhaGktZGFlbW9uLgorVGhpcyBjb21taXQgZml4IHRoaXMgZXJyb3IgcHJvbXB0IGFuZCBtYWtlIHNlcnZpY2UgZGlzcGxheSByaWdodCBzdGF0dXMKK2ZvciBhdmFoaS1kYWVtb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiB8ICAgMTQgKysrKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggNDc5M2I0Ni4uNDllYzM1OCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMTUzLDcgKzE1MywxNSBAQCBkX3JlbG9hZCgpIHsKKyAjICAgICAgIEZ1bmN0aW9uIHRoYXQgY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgZGFlbW9uL3NlcnZpY2UuCisgIworIGRfc3RhdHVzKCkgeworLSAgICAkREFFTU9OIC1jICYmIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciIHx8IGVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nIgorKyAgICAkREFFTU9OIC1jCisrICAgIHN0YXR1cz0kPworKyAgICBpZiBbICRzdGF0dXMgPSAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciCisrICAgICAgICByZXR1cm4gMAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZyIKKysgICAgICAgIHJldHVybiAzCisrICAgIGZpCisgfQorIAorIGNhc2UgIiQxIiBpbgorQEAgLTE4Miw5ICsxOTAsOSBAQCBjYXNlICIkMSIgaW4KKyAgICAgICAgIGRfc3RhdHVzCisgCTs7CisgICAgICopCistICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfSIgPiYyCisrICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfHN0YXR1c30iID4mMgorICAgICAgICAgZXhpdCAxCisgICAgICAgICA7OworIGVzYWMKKyAKKy1leGl0IDAKKytleGl0ICQ/CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwYXZhaGktYXV0b2lwZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhYjgxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1sgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdWRoY3BjIiAmJiBleGl0IDEKKworY2FzZSAiJDEiIGluCisKKwlkZWNvbmZpZ3xyZW5ld3xib3VuZCkKKwkJL3Vzci9zYmluL2F2YWhpLWF1dG9pcGQgLWsgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy85OWF2YWhpLWF1dG9pcGQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNGNkYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHVkaGNwYyIgJiYgZXhpdCAxCisKK2Nhc2UgIiQxIiBpbgorCisJbGVhc2VmYWlsKQorCQkvdXNyL3NiaW4vYXZhaGktYXV0b2lwZCAtd0QgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9hdmFoaV9maXhfaW5zdGFsbF9pc3N1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9hdmFoaV9maXhfaW5zdGFsbF9pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmYyMGVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2F2YWhpX2ZpeF9pbnN0YWxsX2lzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXhlcyB0aGlzIGluc3RhbGwgaXNzdWUKKyN8IC9iaW4vc2g6IGxpbmUgMDogY2Q6IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2F2YWhpLTAuNi4zMS1yMy4wL2ltYWdlLy91c3IvYmluOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorQEAgLTU0LDYgKzU0LDcgQEAgYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MgPSAkKEFNX0NGTEFHUworIGF2YWhpX3NldF9ob3N0X25hbWVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKyAKKyBpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIAljZCAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisgCQlybSAtZiBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSBhdmFoaS1yZXNvbHZlLWFkZHJlc3MgYXZhaGktYnJvd3NlLWRvbWFpbnMgYXZhaGktcHVibGlzaC1hZGRyZXNzIGF2YWhpLXB1Ymxpc2gtc2VydmljZSAmJiBcCisgCQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXAorSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCisrKysgYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCitAQCAtOTA2LDYgKzkwNiw3IEBAIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TCisgCisgCisgQEhBVkVfREJVU19UUlVFQGluc3RhbGwtZXhlYy1sb2NhbDoKKytASEFWRV9EQlVTX1RSVUVACSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJY2QgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lIGF2YWhpLXJlc29sdmUtYWRkcmVzcyBhdmFoaS1icm93c2UtZG9tYWlucyBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgYXZhaGktcHVibGlzaC1zZXJ2aWNlICYmIFwKKyBASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2ZpeF9mb3JfYXV0b21ha2VfMS4xMi54LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2ZpeF9mb3JfYXV0b21ha2VfMS4xMi54LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzRjMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvZml4X2Zvcl9hdXRvbWFrZV8xLjEyLngucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9hbWtlIDEuMTIueCBoYXMgZGVwcmljYXRlZCB1c2Ugb2YgbWtkaXJfcCAsIGFuZCByZWNvbW1lbmRzIHVzZSBvZiBNS0RJUl9QCitpbnN0ZWFkLiBGaXhlZCB0aGUgYXV0b21ha2UgZmlsZXMgYWNjb3JkaW5nbHkgdG8gYXZvaWQgd2FybmluZy1lcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8wOQorCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQorQEAgLTE2OSw3ICsxNjksNyBAQCB4bWxsaW50OgorIAlkb25lCisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOgorLQl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorKwl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorIAorIHVwZGF0ZS1zeXN0ZW1kOgorIAljdXJsIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9zeXN0ZW1kL3BsYWluL3NyYy9zZC1kYWVtb24uYyA+IHNkLWRhZW1vbi5jCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KK0BAIC03Niw3ICs3Niw3IEBAIGRoY2xpZW50ZW50ZXJkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGgKKyBkaGNsaWVudGV4aXRkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcy5kCisgCisgaW5zdGFsbC1leGVjLWhvb2s6IGRoY2xpZW50LWV4aXQtaG9vayBkaGNsaWVudC1lbnRlci1ob29rCistCSQobWtkaXJfcCkgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKQorKwkkKE1LRElSX1ApICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpICQoREVTVERJUikkKGRoY2xpZW50ZXhpdGRpcikKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1lbnRlci1ob29rICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpL2F2YWhpLWF1dG9pcGQKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1leGl0LWhvb2sgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKS9hdmFoaS1hdXRvaXBkCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9pbml0c2NyaXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Mzg4OWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggMzBhMmMyZi4uYjU4NDhhOCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMSwyICsxLDE0IEBACisgIyEvYmluL3NoCistCisrIyMjIEJFR0lOIElOSVQgSU5GTworKyMgUHJvdmlkZXM6ICAgICAgICAgIGF2YWhpCisrIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyBkYnVzCisrIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyBkYnVzCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBEYWVtb24KKysjIERlc2NyaXB0aW9uOiAgICAgICBaZXJvY29uZiBkYWVtb24gZm9yIGNvbmZpZ3VyaW5nIHlvdXIgbmV0d29yayAKKysjICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5CisrIyMjIEVORCBJTklUIElORk8KKysjCitkaWZmIC0tZ2l0IGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZG5zY29uZmQuaW4gYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgoraW5kZXggYWMzNDgwNC4uZjk1YzM0MCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluCisrKysgYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgorQEAgLTEsMSArMSwxNCBAQAorICMhL2Jpbi9zaAorKyMjIyBCRUdJTiBJTklUIElORk8KKysjIFByb3ZpZGVzOiAgICAgICAgICBhdmFoaS1kbnNjb25mZAorKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgYXZhaGkKKysjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIGF2YWhpCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBETlMgY29uZmlndXJhdGlvbgorKyMgRGVzY3JpcHRpb246ICAgICAgIFplcm9jb25mIGRhZW1vbiBmb3IgY29uZmlndXJpbmcgeW91ciBuZXR3b3JrIAorKyMgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkKKysjIyMgRU5EIElOSVQgSU5GTworKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9vdXQtb2YtdHJlZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9vdXQtb2YtdHJlZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ3NmNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL291dC1vZi10cmVlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBhNjJkYzk1ZDc1NjkxZWE0YWVmYTg2ZDhiYmU1NGM2MmFmZDc4ZmY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTI6Mjc6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQtc3lzOiBmaXggb3V0LW9mLXRyZWUgYnVpbGRzIHdpdGhvdXQgeG1sdG9tYW4KKworSWYgbWFucGFnZXMgYXJlIGVuYWJsZWQgYnV0IHhtbHRvbWFuIGlzbid0IHByZXNlbnQsIG91dC1vZi10cmVlIGJ1aWxkcyBmYWlsCitiZWNhdXNlIGl0IGNoZWNrcyBpbnNpZGUgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIHByZS1nZW5lcmF0ZWQgbWFucGFnZXMuCisKK0ZpeCB0aGlzIGJ5IHVzaW5nICRzcmNkaXIgd2hlbiBsb29raW5nIGZvciBmaWxlcyBpbnNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlkZWJjZTIuLjA0N2M3YWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwMjEsNyArMTAyMSw3IEBAIGlmIHRlc3QgeCRtYW5wYWdlcyA9IHh5ZXMgOyB0aGVuCisgICAgIGZpCisgCisgICAgIGlmIHRlc3QgeCRoYXZlX3htbHRvbWFuID0geG5vIC1vIHgkeG1sdG9tYW4gPSB4bm87IHRoZW4KKy0gICAgICAgIGlmICEgdGVzdCAtZSBtYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisrICAgICAgICBpZiAhIHRlc3QgLWUgJHNyY2Rpci9tYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFsqKiogeG1sdG9tYW4gd2FzIG5vdCBmb3VuZCBvciB3YXMgZGlzYWJsZWQsIGl0IGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYW5wYWdlcyBhcyB0aGV5IGhhdmUgbm90IGJlZW4gcHJlLWJ1aWx0LCBpbnN0YWxsIHhtbHRvbWFuLCBwYXNzIC0tZGlzYWJsZS1tYW5wYWdlcyBvciBkb250IHBhc3MgLS1kaXNhYmxlLXhtbHRvbWFuXSkKKyAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgIGZpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9yZXVzZXBvcnQtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiODFjMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0ZpeCBhdmFoaS1kYWVtb24gd2hlbiBydW5uaW5nIG9uIGtlcm5lbCA8IDMuOSAocGF0Y2ggdGFrZW4gZnJvbSBVYnVudHUpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgKHVubWFpbnRhaW5lZCB1cHN0cmVhbSkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Rlc2NyaXB0aW9uOiBTT19SRVVTRVBPUlQgbWF5IG5vdCBleGlzdCBpbiBydW5uaW5nIGtlcm5lbAorIFdoZW4gdXNlcnNwYWNlIGRlZmluZXMgU09fUkVVU0VQT1JUIHdlIHdpbGwgYXR0ZW1wdCB0byBlbmFibGUgc29ja2V0CisgcG9ydCBudW1iZXIgcmV1c2UuICBIb3dldmVyIGlmIHRoZSBydW5uaW5nIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0CisgdGhpcyBjYWxsIGl0IHdpbGwgZmFpbCBwcmV2ZW50aW5nIGRhZW1vbiBzdGFydHVwLiAgSWYgdGhpcyBjYWxsIGlzCisgcHJlc2VudCBidXQgZmFpbHMgRU5PUFJPVE9PUFQgdGhlbiB3ZSBrbm93IHRoYXQgYWN0dWFsbHkgdGhlIGtlcm5lbAorIGRvZXMgbm90IHN1cHBvcnQgaXQgYW5kIHdlIHNob3VsZCBjb250aW51ZSBhcyBpZiB3ZSBkaWQgbm90IGhhdmUgdGhlCisgY2FsbCBhdCBhbGwuICAoTFA6ICMxMjI4MjA0KQorIC4KKyBUaGlzIHBhdGNoIGNvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGViaWFuIHBhY2thZ2UgYWZ0ZXIgamVzc2llIHJlbGVhc2UuCitBdXRob3I6IEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KKworSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktY29yZS9zb2NrZXQuYwkyMDEzLTA5LTIwIDE2OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCTIwMTMtMDktMjAgMTY6Mzg6MjMuNzgxODYzNjQ0ICswMTAwCitAQCAtMTc3LDcgKzE3Nyw4IEBACisgICAgIHllcyA9IDE7CisgICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRVBPUlQsICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJTT19SRVVTRVBPUlQgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CistICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICBpZiAoZXJybm8gIT0gRU5PUFJPVE9PUFQpCisrICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICB9CisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjUyNTFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaApAQCAtMCwwICsxLDQyIEBACit4bWwyLWNvbmZpZyBpcyBkaXNhYmxlZCwgc28gY2hhbmdlIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBwa2djb25maWcgdG8gZmluZAorbGlieG1sMi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0KKyBjb25maWd1cmUuaW4gfCAxOCArKystLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZDU2NmUxYy4uYzllZjNhNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMjEwMiwyMSArMjEwMiw5IEBAIGNhc2UgIiR1c2VfbGlieG1sMiIgaW4KKyAJCURTVF9MSUJYTUwyX0lOQz0iIgorIAkJOzsKKyAJYXV0b3x5ZXMpCistCQljYXNlIFhgKHhtbDItY29uZmlnIC0tdmVyc2lvbikgMj4vZGV2L251bGxgIGluCistCQlYMi5bWzY3ODldXS4qKQorLQkJCWxpYnhtbDJfbGlicz1geG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWB4bWwyLWNvbmZpZyAtLWNmbGFnc2AKKy0JCQk7OworLQkJKikKKy0JCQlsaWJ4bWwyX2xpYnM9CistCQkJbGlieG1sMl9jZmxhZ3M9CistCQkJOzsKKy0JCWVzYWMKKy0JCTs7CistCSopCistCQlpZiB0ZXN0IC1mICIkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIiA7IHRoZW4KKy0JCQlsaWJ4bWwyX2xpYnM9YCR1c2VfbGlieG1sMi9iaW4veG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWAkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIC0tY2ZsYWdzYAorKwkJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyBsaWJ4bWwtMi4wIDsgdGhlbgorKwkJCWxpYnhtbDJfbGlicz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tbGlic2AKKysJCQlsaWJ4bWwyX2NmbGFncz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tY2ZsYWdzYAorIAkJZmkKKyAJCTs7CisgZXNhYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvMDAwMS1nZW4uYy1leHRlbmQtRElSTkFNRVNJWkUtZnJvbS0yNTYtdG8tNTEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMTUwOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZ2VuLmM6IGV4dGVuZCBESVJOQU1FU0laRSBmcm9tIDI1NiB0byA1MTIKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2Rucy9nZW4uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kbnMvZ2VuLmMgYi9saWIvZG5zL2dlbi5jCitpbmRleCA3YTdkYWZiLi41MWEwNDM1IDEwMDY0NAorLS0tIGEvbGliL2Rucy9nZW4uYworKysrIGIvbGliL2Rucy9nZW4uYworQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBjb3B5cmlnaHRbXSA9CisgI2RlZmluZSBUWVBFQ0xBU1NCVUYgKFRZUEVDTEFTU0xFTiArIDEpCisgI2RlZmluZSBUWVBFQ0xBU1NGTVQgIiUiIFNUUihUWVBFQ0xBU1NMRU4pICJbLTAtOWEtel1fJWQiCisgI2RlZmluZSBBVFRSSUJVVEVTSVpFIDI1NgorLSNkZWZpbmUgRElSTkFNRVNJWkUgMjU2CisrI2RlZmluZSBESVJOQU1FU0laRSA1MTIKKyAKKyBzdGF0aWMgc3RydWN0IGNjIHsKKyAJc3RydWN0IGNjICpuZXh0OworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1jb25mZ2VuLWJ1aWxkLXVuaXguby1vbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NmQ1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDliNDA2MTlmZjZmZGRmZWYyNzU4YmE3OTc3ODlmODQ4N2Y0MTJkZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgRmViIDIwMTUgMDA6NTA6MDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmdlbjogZG9uJ3QgYnVpbGQgdW5peC5vIHR3aWNlCisKK0ZpeGVkOgordW5peC9vcy5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoaXMgaXMgYmVjYXVzZSBvcy5vIHdhcyBidWlsdCB0d2ljZToKKyogVGhlIGltcGxpY2l0eSBydWxlIChkZXBlbmRzIG9uIHVuaXgvb3MubykKKyogVGhlICJtYWtlIGFsbCIgaW4gdW5peCBzdWJkaXIgKGRlcGVuZHMgb24gdW5peC9vcy5vKQorCitEZXBlbmQgb24gc3ViZGlycyB3aGljaCBpcyB1bml4IG9ubHkgcmF0aGVyIHRoYW4gdW5peC9vcy5vIHdpbGwgZml4IHRoZQorcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgoraW5kZXggOGIzZTVhYS4uNDg2OGEyNCAxMDA2NDQKKy0tLSBhL2Jpbi9jb25mZ2VuL01ha2VmaWxlLmluCisrKysgYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgorQEAgLTc0LDExICs3NCwxMSBAQCBybmRjLWNvbmZnZW4uQE9AOiBybmRjLWNvbmZnZW4uYworIGRkbnMtY29uZmdlbi5AT0A6IGRkbnMtY29uZmdlbi5jCisgCSR7TElCVE9PTF9NT0RFX0NPTVBJTEV9ICR7Q0N9ICR7QUxMX0NGTEFHU30gLWMgJHtzcmNkaXJ9L2RkbnMtY29uZmdlbi5jCisgCistcm5kYy1jb25mZ2VuQEVYRUVYVEA6IHJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSAke0NPTkZERVBMSUJTfSAKKytybmRjLWNvbmZnZW5ARVhFRVhUQDogcm5kYy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7Q09ORkRFUExJQlN9ICQoU1VCRElSUykKKyAJZXhwb3J0IEJBU0VPQkpTPSJybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30iOyBcCisgCSR7RklOQUxCVUlMRENNRH0KKyAKKy1kZG5zLWNvbmZnZW5ARVhFRVhUQDogZGRucy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7VU9CSlN9ICR7Q09ORkRFUExJQlN9IAorK2RkbnMtY29uZmdlbkBFWEVFWFRAOiBkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtDT05GREVQTElCU30gJChTVUJESVJTKQorIAlleHBvcnQgQkFTRU9CSlM9ImRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSI7IFwKKyAJJHtGSU5BTEJVSUxEQ01EfQorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2RmM2JiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gOTQ3M2QyOTg0MzU3OTgwMmU5NmIwMjkzYTNlOTUzZmVkOTNkZTgyYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjIyOjAwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGJpbmQ6IGVuc3VyZSBzZWFyY2hpbmcgZm9yIGpzb24gaGVhZGVycyBzZWFyY2hlcyBzeXNyb290CisKK0JpbmQgY2FuIGZhaWwgY29uZmlndXJlIGJ5IGRldGVjdGluZyBoZWFkZXJzIHcvbyBsaWJzWzFdLCBvcgoraXQgY2FuIGZhaWwgdGhlIGhvc3QgY29udGFtaW5hdGlvbiBjaGVjayBhcyBwZXIgYmVsb3c6CisKK0VSUk9SOiBUaGlzIGF1dG9jb25mIGxvZyBpbmRpY2F0ZXMgZXJyb3JzLCBpdCBsb29rZWQgYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdoaWxlIGRldGVybWluaW5nIHN5c3RlbSBjYXBhYmlsaXRpZXMuCitSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICdidWlsZC90bXAvd29yay9jb3JlMi02NC1wb2t5LWxpbnV4L2JpbmQvOS4xMC4yLXIxL2J1aWxkJworRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogZG9fcWFfY29uZmlndXJlCitFUlJPUjogTG9nZmlsZSBvZiBmYWlsdXJlIHN0b3JlZCBpbjogYnVpbGQvdG1wL3dvcmsvY29yZTItNjQtcG9reS1saW51eC9iaW5kLzkuMTAuMi1yMS90ZW1wL2xvZy5kb19jb25maWd1cmUuNTI0MgorRVJST1I6IFRhc2sgNSAobWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKK05PVEU6IFRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCA3NzMgdGFza3Mgb2Ygd2hpY2ggNzY4IGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCAxIGZhaWxlZC4KK05vIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzICg3NzMgb2YgNzgxKQorCitTdW1tYXJ5OiAxIHRhc2sgZmFpbGVkOgorICAvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUKKworT25lIHdheSB0byBmaXggaXQgd291bGQgYmUgdG8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUganNvbiBpbiBiaW5kCitjb25maWd1cmVbMl0gYnV0IGhlcmUgd2UgZml4IGl0IGJ5IHVzaW5nIHRoZSBwYXRoIHRvIHdoZXJlIHdlIHdvdWxkCitwdXQgdGhlIGhlYWRlciBpZiB3ZSBoYWQganNvbiBpbiB0aGUgc3lzcm9vdCwgaW4gY2FzZSBzb21lb25lIHdhbnRzCit0byBtYWtlIHVzZSBvZiB0aGUgY29tYmluYXRpb24gc29tZSBkYXkuCisKK1sxXSBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3RpY2tldC80NTMwNQorWzJdIGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvY2hhbmdlc2V0LzEyNjQwNgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGM5ZWYzYTYwMTM0My4uMTdhMWY2MTNlOWFjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yMTM5LDcgKzIxMzksNyBAQCBjYXNlICIkdXNlX2xpYmpzb24iIGluCisgCQlsaWJqc29uX2xpYnM9IiIKKyAJCTs7CisgCWF1dG98eWVzKQorLQkJZm9yIGQgaW4gL3VzciAvdXNyL2xvY2FsIC9vcHQvbG9jYWwKKysJCWZvciBkIGluICIke1NUQUdJTkdfSU5DRElSfSIKKyAJCWRvCisgCQkJaWYgdGVzdCAtZiAiJHtkfS9pbmNsdWRlL2pzb24vanNvbi5oIgorIAkJCXRoZW4KKy0tIAorMi40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kOSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4Njc5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkKQEAgLTAsMCArMSwyIEBACisjIHN0YXJ0dXAgb3B0aW9ucyBmb3IgdGhlIHNlcnZlcgorT1BUSU9OUz0iLXUgYmluZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQzNDVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9jb25mLnBhdGNoCkBAIC0wLDAgKzEsMzMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK3RoZSBwYXRjaCBpcyBpbXBvcnRlZCBmcm9tIG9wZW5lbWJlZGRlZCBwcm9qZWN0CisKKzExLzMwLzIwMTAgLSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjAgYmluZC05LjMuMS9jb25mL2RiLjAKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4wCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjAJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTIgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBicm9hZGNhc3Qgem9uZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4xMjcgYmluZC05LjMuMS9jb25mL2RiLjEyNworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjEyNwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi4xMjcJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTMgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBsb2NhbCBsb29wYmFjayBpbnRlcmZhY2UKKys7CisrJFRUTAk2MDQ4MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgNjA0ODAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCisrMS4wLjAJSU4JUFRSCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eSBiaW5kLTkuMy4xL2NvbmYvZGIuZW1wdHkKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi5lbXB0eQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNCBAQAorKzsgQklORCByZXZlcnNlIGRhdGEgZmlsZSBmb3IgZW1wdHkgcmZjMTkxOCB6b25lCisrOworKzsgRE8gTk9UIEVESVQgVEhJUyBGSUxFIC0gaXQgaXMgdXNlZCBmb3IgbXVsdGlwbGUgem9uZXMuCisrOyBJbnN0ZWFkLCBjb3B5IGl0LCBlZGl0IG5hbWVkLmNvbmYsIGFuZCB1c2UgdGhhdCBjb3B5LgorKzsKKyskVFRMCTg2NDAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJICA4NjQwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjI1NSBiaW5kLTkuMy4xL2NvbmYvZGIuMjU1CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMjU1CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjI1NQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKzsKKys7IEJJTkQgcmVzZXJ2ZSBkYXRhIGZpbGUgZm9yIGJyb2FkY2FzdCB6b25lCisrOworKyRUVEwJNjA0ODAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJIDYwNDgwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsIGJpbmQtOS4zLjEvY29uZi9kYi5sb2NhbAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLmxvY2FsCTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzIEBACisrOworKzsgQklORCBkYXRhIGZpbGUgZm9yIGxvY2FsIGxvb3BiYWNrIGludGVyZmFjZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KKytACUlOCUEJMTI3LjAuMC4xCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIucm9vdCBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLnJvb3QJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0NSBAQAorKworKzsgPDw+PiBEaUcgOS4yLjMgPDw+PiBucyAuIEBhLnJvb3Qtc2VydmVycy5uZXQuCisrOzsgZ2xvYmFsIG9wdGlvbnM6ICBwcmludGNtZAorKzs7IEdvdCBhbnN3ZXI6CisrOzsgLT4+SEVBREVSPDwtIG9wY29kZTogUVVFUlksIHN0YXR1czogTk9FUlJPUiwgaWQ6IDE4OTQ0CisrOzsgZmxhZ3M6IHFyIGFhIHJkOyBRVUVSWTogMSwgQU5TV0VSOiAxMywgQVVUSE9SSVRZOiAwLCBBRERJVElPTkFMOiAxMworKworKzs7IFFVRVNUSU9OIFNFQ1RJT046CisrOy4JCQkJSU4JTlMKKysKKys7OyBBTlNXRVIgU0VDVElPTjoKKysuCQkJNTE4NDAwCUlOCU5TCUEuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUIuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUMuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUQuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUUuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUYuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUcuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUguUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUkuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUouUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUsuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUwuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCU0uUk9PVC1TRVJWRVJTLk5FVC4KKysKKys7OyBBRERJVElPTkFMIFNFQ1RJT046CisrQS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjQxLjAuNAorK0IuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMjguNzkuMjAxCisrQy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjMzLjQuMTIKKytELlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguOC4xMC45MAorK0UuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMDMuMjMwLjEwCisrRi5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjUuNS4yNDEKKytHLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMTEyLjM2LjQKKytILlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguNjMuMi41MworK0kuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4zNi4xNDguMTcKKytKLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuNTguMTI4LjMwCisrSy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkzLjAuMTQuMTI5CisrTC5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjMyLjY0LjEyCisrTS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMjAyLjEyLjI3LjMzCisrCisrOzsgUXVlcnkgdGltZTogODEgbXNlYworKzs7IFNFUlZFUjogMTk4LjQxLjAuNCM1MyhhLnJvb3Qtc2VydmVycy5uZXQuKQorKzs7IFdIRU46IFN1biBGZWIgIDEgMTE6Mjc6MTQgMjAwNAorKzs7IE1TRyBTSVpFICByY3ZkOiA0MzYKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCTIwMDUtMDctMTAgMjI6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQ5IEBACisrLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBCSU5EIEROUyBzZXJ2ZXIgbmFtZWQuCisrLy8KKysvLyBJZiB5b3UgYXJlIGp1c3QgYWRkaW5nIHpvbmVzLCBwbGVhc2UgZG8gdGhhdCBpbiAvZXRjL2JpbmQvbmFtZWQuY29uZi5sb2NhbAorKworK2luY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLm9wdGlvbnMiOworKworKy8vIHByaW1lIHRoZSBzZXJ2ZXIgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlIHJvb3Qgc2VydmVycworK3pvbmUgIi4iIHsKKysJdHlwZSBoaW50OworKwlmaWxlICIvZXRjL2JpbmQvZGIucm9vdCI7CisrfTsKKysKKysvLyBiZSBhdXRob3JpdGF0aXZlIGZvciB0aGUgbG9jYWxob3N0IGZvcndhcmQgYW5kIHJldmVyc2Ugem9uZXMsIGFuZCBmb3IKKysvLyBicm9hZGNhc3Qgem9uZXMgYXMgcGVyIFJGQyAxOTEyCisrCisrem9uZSAibG9jYWxob3N0IiB7CisrCXR5cGUgbWFzdGVyOworKwlmaWxlICIvZXRjL2JpbmQvZGIubG9jYWwiOworK307CisrCisrem9uZSAiMTI3LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjEyNyI7CisrfTsKKysKKyt6b25lICIwLmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjAiOworK307CisrCisrem9uZSAiMjU1LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjI1NSI7CisrfTsKKysKKysvLyB6b25lICJjb20iIHsgdHlwZSBkZWxlZ2F0aW9uLW9ubHk7IH07CisrLy8gem9uZSAibmV0IiB7IHR5cGUgZGVsZWdhdGlvbi1vbmx5OyB9OworKworKy8vIEZyb20gdGhlIHJlbGVhc2Ugbm90ZXM6CisrLy8gIEJlY2F1c2UgbWFueSBvZiBvdXIgdXNlcnMgYXJlIHVuY29tZm9ydGFibGUgcmVjZWl2aW5nIHVuZGVsZWdhdGVkIGFuc3dlcnMKKysvLyAgZnJvbSByb290IG9yIHRvcCBsZXZlbCBkb21haW5zLCBvdGhlciB0aGFuIGEgZmV3IGZvciB3aG9tIHRoYXQgYmVoYXZpb3VyCisrLy8gIGhhcyBiZWVuIHRydXN0ZWQgYW5kIGV4cGVjdGVkIGZvciBxdWl0ZSBzb21lIGxlbmd0aCBvZiB0aW1lLCB3ZSBoYXZlIG5vdworKy8vICBpbnRyb2R1Y2VkIHRoZSAicm9vdC1kZWxlZ2F0aW9ucy1vbmx5IiBmZWF0dXJlIHdoaWNoIGFwcGxpZXMgZGVsZWdhdGlvbi1vbmx5CisrLy8gIGxvZ2ljIHRvIGFsbCB0b3AgbGV2ZWwgZG9tYWlucywgYW5kIHRvIHRoZSByb290IGRvbWFpbi4gIEFuIGV4Y2VwdGlvbiBsaXN0CisrLy8gIHNob3VsZCBiZSBzcGVjaWZpZWQsIGluY2x1ZGluZyAiTVVTRVVNIiBhbmQgIkRFIiwgYW5kIGFueSBvdGhlciB0b3AgbGV2ZWwKKysvLyAgZG9tYWlucyBmcm9tIHdob20gdW5kZWxlZ2F0ZWQgcmVzcG9uc2VzIGFyZSBleHBlY3RlZCBhbmQgdHJ1c3RlZC4KKysvLyByb290LWRlbGVnYXRpb24tb25seSBleGNsdWRlIHsgIkRFIjsgIk1VU0VVTSI7IH07CisrCisraW5jbHVkZSAiL2V0Yy9iaW5kL25hbWVkLmNvbmYubG9jYWwiOworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYubG9jYWwgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsOCBAQAorKy8vCisrLy8gRG8gYW55IGxvY2FsIGNvbmZpZ3VyYXRpb24gaGVyZQorKy8vCisrCisrLy8gQ29uc2lkZXIgYWRkaW5nIHRoZSAxOTE4IHpvbmVzIGhlcmUsIGlmIHRoZXkgYXJlIG5vdCB1c2VkIGluIHlvdXIKKysvLyBvcmdhbml6YXRpb24KKysvL2luY2x1ZGUgIi9ldGMvYmluZC96b25lcy5yZmMxOTE4IjsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYub3B0aW9ucworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYub3B0aW9ucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjQgQEAKKytvcHRpb25zIHsKKysJZGlyZWN0b3J5ICIvdmFyL2NhY2hlL2JpbmQiOworKworKwkvLyBJZiB0aGVyZSBpcyBhIGZpcmV3YWxsIGJldHdlZW4geW91IGFuZCBuYW1lc2VydmVycyB5b3Ugd2FudAorKwkvLyB0byB0YWxrIHRvLCB5b3UgbWlnaHQgbmVlZCB0byB1bmNvbW1lbnQgdGhlIHF1ZXJ5LXNvdXJjZQorKwkvLyBkaXJlY3RpdmUgYmVsb3cuICBQcmV2aW91cyB2ZXJzaW9ucyBvZiBCSU5EIGFsd2F5cyBhc2tlZAorKwkvLyBxdWVzdGlvbnMgdXNpbmcgcG9ydCA1MywgYnV0IEJJTkQgOC4xIGFuZCBsYXRlciB1c2UgYW4gdW5wcml2aWxlZ2VkCisrCS8vIHBvcnQgYnkgZGVmYXVsdC4KKysKKysJLy8gcXVlcnktc291cmNlIGFkZHJlc3MgKiBwb3J0IDUzOworKworKwkvLyBJZiB5b3VyIElTUCBwcm92aWRlZCBvbmUgb3IgbW9yZSBJUCBhZGRyZXNzZXMgZm9yIHN0YWJsZSAKKysJLy8gbmFtZXNlcnZlcnMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGVtIGFzIGZvcndhcmRlcnMuICAKKysJLy8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgYmxvY2ssIGFuZCBpbnNlcnQgdGhlIGFkZHJlc3NlcyByZXBsYWNpbmcgCisrCS8vIHRoZSBhbGwtMCdzIHBsYWNlaG9sZGVyLgorKworKwkvLyBmb3J3YXJkZXJzIHsKKysJLy8gCTAuMC4wLjA7CisrCS8vIH07CisrCisrCWF1dGgtbnhkb21haW4gbm87ICAgICMgY29uZm9ybSB0byBSRkMxMDM1CisrCisrfTsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi96b25lcy5yZmMxOTE4IGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvem9uZXMucmZjMTkxOAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CTIwMDUtMDctMTAgMjI6MTQ6MTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIwIEBACisrem9uZSAiMTAuaW4tYWRkci5hcnBhIiAgICAgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07CisrIAorK3pvbmUgIjE2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIyLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIzLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI0LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI1LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworKworK3pvbmUgIjE2OC4xOTIuaW4tYWRkci5hcnBhIiB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9pbml0LmQgYmluZC05LjMuMS9pbml0LmQKKy0tLSBiaW5kLTkuMy4xLm9yaWcvaW5pdC5kCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9pbml0LmQJMjAwNS0wNy0xMCAyMzowOTo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNzAgQEAKKysjIS9iaW4vc2gKKysKKytQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisrCisrIyBmb3IgYSBjaHJvb3RlZCBzZXJ2ZXI6ICItdSBiaW5kIC10IC92YXIvbGliL25hbWVkIgorKyMgRG9uJ3QgbW9kaWZ5IHRoaXMgbGluZSwgY2hhbmdlIG9yIGNyZWF0ZSAvZXRjL2RlZmF1bHQvYmluZDkuCisrT1BUSU9OUz0iIgorKworK3Rlc3QgLWYgL2V0Yy9kZWZhdWx0L2JpbmQ5ICYmIC4gL2V0Yy9kZWZhdWx0L2JpbmQ5CisrCisrdGVzdCAteCAvdXNyL3NiaW4vcm5kYyB8fCBleGl0IDAKKysKKytjYXNlICIkMSIgaW4KKysgICAgc3RhcnQpCisrCWVjaG8gLW4gIlN0YXJ0aW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKworKwltb2Rwcm9iZSBjYXBhYmlsaXR5ID4vZGV2L251bGwgMj4mMSB8fCB0cnVlCisrCWlmIFsgISAtZiAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorKwkgICAgL3Vzci9zYmluL3JuZGMtY29uZmdlbiAtYSAtYiA1MTIgLXIgL2Rldi91cmFuZG9tCisrCSAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorKwlmaQorKwlpZiBbIC1mIC92YXIvcnVuL25hbWVkL25hbWVkLnBpZCBdOyB0aGVuCisrCSAgICBwcyBgY2F0IC92YXIvcnVuL25hbWVkL25hbWVkLnBpZGAgPiAvZGV2L251bGwgJiYgZXhpdCAxCisrCWZpCisrCisrCSMgZGlycyB1bmRlciAvdmFyL3J1biBjYW4gZ28gYXdheSBvbiByZWJvb3RzLgorKwlta2RpciAtcCAvdmFyL3J1bi9uYW1lZAorKwlta2RpciAtcCAvdmFyL2NhY2hlL2JpbmQKKysJY2htb2QgNzc1IC92YXIvcnVuL25hbWVkCisrCWNob3duIHJvb3Q6YmluZCAvdmFyL3J1bi9uYW1lZCA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorKworKwlpZiBbICEgLXggL3Vzci9zYmluL25hbWVkIF07IHRoZW4KKysJICAgIGVjaG8gIm5hbWVkIGJpbmFyeSBtaXNzaW5nIC0gbm90IHN0YXJ0aW5nIgorKwkgICAgZXhpdCAxCisrCWZpCisrCWlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL25hbWVkIFwKKysJCS0tcGlkZmlsZSAvdmFyL3J1bi9uYW1lZC9uYW1lZC5waWQgLS0gJE9QVElPTlM7IHRoZW4KKysJICAgIGlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdIDsgdGhlbgorKwkJZWNobyAibmFtZXNlcnZlciAxMjcuMC4wLjEiIHwgL3NiaW4vcmVzb2x2Y29uZiAtYSBsbworKwkgICAgZmkKKysJZmkKKysJZWNobyAiLiIJCisrICAgIDs7CisrCisrICAgIHN0b3ApCisrCWVjaG8gLW4gIlN0b3BwaW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKwlpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXTsgdGhlbgorKwkgICAgL3NiaW4vcmVzb2x2Y29uZiAtZCBsbworKwlmaQorKwkvdXNyL3NiaW4vcm5kYyBzdG9wID4vZGV2L251bGwgMj4mMQorKwllY2hvICIuIgkKKysgICAgOzsKKysKKysgICAgcmVsb2FkKQorKwkvdXNyL3NiaW4vcm5kYyByZWxvYWQKKysgICAgOzsKKysKKysgICAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisrCSQwIHN0b3AKKysJc2xlZXAgMgorKwkkMCBzdGFydAorKyAgICA7OworKyAgICAKKysgICAgKikKKysJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2JpbmQge3N0YXJ0fHN0b3B8cmVsb2FkfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisrCWV4aXQgMQorKyAgICA7OworK2VzYWMKKysKKytleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZG9udC10ZXN0LW9uLWhvc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODlkNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmluZC05LjkuNS5vcmlnL2Jpbi9NYWtlZmlsZS5pbgorKysrIGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCitAQCAtMTksNyArMTksNyBAQCBzcmNkaXIgPQlAc3JjZGlyQAorIFZQQVRIID0JCUBzcmNkaXJACisgdG9wX3NyY2RpciA9CUB0b3Bfc3JjZGlyQAorIAorLVNVQkRJUlMgPQluYW1lZCBybmRjIGRpZyBkZWx2IGRuc3NlYyB0b29scyB0ZXN0cyBuc3VwZGF0ZSBcCisrU1VCRElSUyA9CW5hbWVkIHJuZGMgZGlnIGRlbHYgZG5zc2VjIHRvb2xzIG5zdXBkYXRlIFwKKyAJCWNoZWNrIGNvbmZnZW4gQFBZVEhPTl9UT09MU0AgQFBLQ1MxMV9UT09MU0AKKyBUQVJHRVRTID0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZ2VuZXJhdGUtcm5kYy1rZXkuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjAxMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2lmIFsgISAtcyAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorICAgIGVjaG8gLW4gIkdlbmVyYXRpbmcgL2V0Yy9iaW5kL3JuZGMua2V5OiIKKyAgICAvdXNyL3NiaW4vcm5kYy1jb25mZ2VuIC1hIC1iIDUxMiAtciAvZGV2L3VyYW5kb20KKyAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9pbml0LmQtYWRkLXN1cHBvcnQtZm9yLXJlYWQtb25seS1yb290ZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkYjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1N1YmplY3Q6IGluaXQuZDogYWRkIHN1cHBvcnQgZm9yIHJlYWQtb25seSByb290ZnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5pdC5kIHwgICA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2luaXQuZCBiL2luaXQuZAoraW5kZXggMDExMWVkNC4uMjQ2NzdjOCAxMDA2NDQKKy0tLSBhL2luaXQuZAorKysrIGIvaW5pdC5kCitAQCAtNiw4ICs2LDQ4IEBAIFBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKyAjIERvbid0IG1vZGlmeSB0aGlzIGxpbmUsIGNoYW5nZSBvciBjcmVhdGUgL2V0Yy9kZWZhdWx0L2JpbmQ5LgorIE9QVElPTlM9IiIKKyAKKyt0ZXN0IC1mIC9ldGMvZGVmYXVsdC9yY1MgJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisgdGVzdCAtZiAvZXRjL2RlZmF1bHQvYmluZDkgJiYgLiAvZXRjL2RlZmF1bHQvYmluZDkKKyAKKysjIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSBiZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCAvdmFyIGFuZCAvIGFyZSBvbiBkaWZmZXJlbnQgcGFydGl0aW9ucy4KKytpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uICgpIHsKKysgICAgRElSRUNUT1JZPSQxCisrICAgIGRpcj1gcmVhZGxpbmsgLWYgJERJUkVDVE9SWWAKKysgICAgd2hpbGUgdHJ1ZTsgZG8KKysJaWYgWyAhIC1kICIkZGlyIiBdOyB0aGVuCisrCSAgICBlY2hvICJFUlJPUjogJGRpciBpcyBub3QgYSBkaXJlY3RvcnkiCisrCSAgICBleGl0IDEKKysJZWxzZQorKwkgICAgZm9yIGZsYWcgaW4gYGF3ayAtdiBkaXI9JGRpciAneyBpZiAoJDIgPT0gZGlyKSB7IHByaW50ICJGT1VORCI7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBcCisrCQlFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwgL3Byb2MvbW91bnRzYDsgZG8KKysJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisrCQlbICIkZmxhZyIgPSAicm8iIF0gJiYgeyBwYXJ0aXRpb249InJlYWQtb25seSI7IGJyZWFrOyB9CisrCSAgICBkb25lCisrCSAgICBpZiBbICIkZGlyIiA9ICIvIiAtbyAtbiAiJHBhcnRpdGlvbiIgXTsgdGhlbgorKwkJYnJlYWsKKysJICAgIGVsc2UKKysJCWRpcj1gZGlybmFtZSAkZGlyYAorKwkgICAgZmkKKysJZmkKKysgICAgZG9uZQorKyAgICBbICIkcGFydGl0aW9uIiA9ICJyZWFkLW9ubHkiIF0gJiYgZWNobyAieWVzIiB8fCBlY2hvICJubyIKKyt9CisrCisrYmluZF9tb3VudCAoKSB7CisrICAgIG9sZGRpcj0kMQorKyAgICBuZXdkaXI9JDIKKysgICAgbWtkaXIgLXAgJG9sZGRpcgorKyAgICBjcCAtYSAkbmV3ZGlyLyogJG9sZGRpcgorKyAgICBtb3VudCAtLWJpbmQgJG9sZGRpciAkbmV3ZGlyCisrfQorKworKyMgRGVhbCB3aXRoIHJlYWQtb25seSByb290ZnMKKytpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisrICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAiV0FSTjogc3RhcnQgYmluZCBzZXJ2aWNlIGluIHJlYWQtb25seSByb290ZnMiCisrICAgIFsgYGlzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gL2V0Yy9iaW5kYCA9ICJ5ZXMiIF0gJiYgYmluZF9tb3VudCAvdmFyL3ZvbGF0aWxlL2JpbmQvZXRjIC9ldGMvYmluZAorKyAgICBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbmFtZWRgID0gInllcyIgXSAmJiBiaW5kX21vdW50IC92YXIvdm9sYXRpbGUvYmluZC9uYW1lZCAvdmFyL25hbWVkCisrZmkKKysKKyB0ZXN0IC14IC91c3Ivc2Jpbi9ybmRjIHx8IGV4aXQgMAorIAorIGNhc2UgIiQxIiBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWFrZS1ldGMtaW5pdGQtYmluZC1zdG9wLXdvcmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NmYzZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK2JpbmQ6IG1ha2UgIi9ldGMvaW5pdC5kL2JpbmQgc3RvcCIgd29yaworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0FkZCBzb21lIGNvbmZpZ3VyYXRpb25zLCBtYWtlIHJuZGMgY29tbWFuZCBiZSBhYmxlIHRvIGNvbnRyb2xzCit0aGUgbmFtZWQgZGFlbW9uLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25mL25hbWVkLmNvbmYgfCAgICA1ICsrKysrCisgY29uZi9ybmRjLmNvbmYgIHwgICAgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY29uZi9ybmRjLmNvbmYKKworZGlmZiAtLWdpdCBhL2NvbmYvbmFtZWQuY29uZiBiL2NvbmYvbmFtZWQuY29uZgoraW5kZXggOTU4MjljZi4uYzg4OTllNyAxMDA2NDQKKy0tLSBhL2NvbmYvbmFtZWQuY29uZgorKysrIGIvY29uZi9uYW1lZC5jb25mCitAQCAtNDcsMyArNDcsOCBAQCB6b25lICIyNTUuaW4tYWRkci5hcnBhIiB7CisgLy8gcm9vdC1kZWxlZ2F0aW9uLW9ubHkgZXhjbHVkZSB7ICJERSI7ICJNVVNFVU0iOyB9OworIAorIGluY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLmxvY2FsIjsKKytpbmNsdWRlICIvZXRjL2JpbmQvcm5kYy5rZXkiIDsKKytjb250cm9scyB7CisrCWluZXQgMTI3LjAuMC4xIGFsbG93IHsgbG9jYWxob3N0OyB9CisrCWtleXMgeyBybmRjLWtleTsgfTsKKyt9OworZGlmZiAtLWdpdCBhL2NvbmYvcm5kYy5jb25mIGIvY29uZi9ybmRjLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMGI0ODFkCistLS0gL2Rldi9udWxsCisrKysgYi9jb25mL3JuZGMuY29uZgorQEAgLTAsMCArMSw1IEBACisraW5jbHVkZSAiL2V0Yy9iaW5kL3JuZGMua2V5IjsKKytvcHRpb25zIHsKKysJZGVmYXVsdC1zZXJ2ZXIgIGxvY2FsaG9zdDsKKysJZGVmYXVsdC1rZXkgICAgIHJuZGMta2V5OworK307CisKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTMwNzk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZgpAQCAtMCwwICsxLDEwNCBAQAorYmluZDogcG9ydCBhIHBhdGNoIHRvIGZpeCBhIGJ1aWxkIGZhaWx1cmUKKworbWlwczEgZG9lcyBub3Qgc3VwcG9ydCBsbCBhbmQgc2MgaW5zdHJ1Y3Rpb25zLCBhbmQgbGVhZCB0byBiZWxvdyBlcnJvciwgbm93Cit3ZSBwb3J0IGEgcGF0Y2ggZnJvbSBkZWJpYW4gdG8gZml4IGl0CitbaHR0cDovL3NlY3VyaXR5LmRlYmlhbi5vcmcvZGViaWFuLXNlY3VyaXR5L3Bvb2wvdXBkYXRlcy9tYWluL2IvYmluZDkvYmluZDlfOS44LjQuZGZzZy5QMS02K25tdTIrZGViN3UxLmRpZmYuZ3pdCisKK3wge3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgorfCB7c3RhbmRhcmQgaW5wdXR9OjQ3OiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYGxsICQzLDAoJDYpJworfCB7c3RhbmRhcmQgaW5wdXR9OjUwOiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYHNjICQzLDAoJDYpJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYmluZDktOS44LjQuZGZzZy5QMS5vcmlnL2xpYi9pc2MvbWlwcy9pbmNsdWRlL2lzYy9hdG9taWMuaAorKysrIGJpbmQ5LTkuOC40LmRmc2cuUDEvbGliL2lzYy9taXBzL2luY2x1ZGUvaXNjL2F0b21pYy5oCitAQCAtMzEsMTggKzMxLDIwIEBACisgaXNjX2F0b21pY194YWRkKGlzY19pbnQzMl90ICpwLCBpbnQgdmFsKSB7CisgCWlzY19pbnQzMl90IG9yaWc7CisgCistCS8qIGFkZCBpcyBhIGNoZWF0LCBzaW5jZSBNSVBTIGhhcyBubyBtb3YgaW5zdHJ1Y3Rpb24gKi8KKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJhZGQgJDMsICQzLCAlMlxuIgorLQkgICAgInNjICQzLCAlMVxuIgorLQkgICAgImJlcSAkMywgMCwgMWIiCistCSAgICA6ICI9JnIiKG9yaWcpCistCSAgICA6ICJtIigqcCksICJyIih2YWwpCistCSAgICA6ICJtZW1vcnkiLCAiJDMiCistCQkpOworKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisrCSIJLnNldAlwdXNoCQlcbiIKKysJIgkuc2V0CW1pcHMyCQlcbiIKKysJIgkuc2V0CW5vcmVvcmRlcglcbiIKKysJIgkuc2V0CW5vYXQJCVxuIgorKwkiMToJbGwJJDEsICUxCQlcbiIKKysJIglhZGR1CSUwLCAkMSwgJTIJXG4iCisrCSIJc2MJJTAsICUxCQlcbiIKKysJIgliZXF6CSUwLCAxYgkJXG4iCisrCSIJbW92ZQklMCwgJDEJCVxuIgorKwkiCS5zZXQJcG9wCQlcbiIKKysJOiAiPSZyIiAob3JpZyksICIrUiIgKCpwKQorKwk6ICJyIiAodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CitAQCAtNTIsMTYgKzU0LDcgQEAKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBpc2NfYXRvbWljX3N0b3JlKGlzY19pbnQzMl90ICpwLCBpc2NfaW50MzJfdCB2YWwpIHsKKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUwXG4iCistCSAgICAiYWRkICQzLCAkMCwgJTFcbiIKKy0JICAgICJzYyAkMywgJTBcbiIKKy0JICAgICJiZXEgJDMsIDAsIDFiIgorLQkgICAgOgorLQkgICAgOiAibSIoKnApLCAiciIodmFsKQorLQkgICAgOiAibWVtb3J5IiwgIiQzIgorLQkJKTsKKysJKnAgPSB2YWw7CisgfQorIAorIC8qCitAQCAtNzIsMjAgKzY1LDIzIEBACisgc3RhdGljIGlubGluZSBpc2NfaW50MzJfdAorIGlzY19hdG9taWNfY21weGNoZyhpc2NfaW50MzJfdCAqcCwgaW50IGNtcHZhbCwgaW50IHZhbCkgeworIAlpc2NfaW50MzJfdCBvcmlnOworKwlpc2NfaW50MzJfdCB0bXA7CisgCistCV9fYXNtX18gdm9sYXRpbGUoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJibmUgJDMsICUyLCAyZlxuIgorLQkgICAgImFkZCAkMywgJDAsICUzXG4iCistCSAgICAic2MgJDMsICUxXG4iCistCSAgICAiYmVxICQzLCAwLCAxYlxuIgorLQkgICAgIjI6IgorLQkgICAgOiAiPSZyIihvcmlnKQorLQkgICAgOiAibSIoKnApLCAiciIoY21wdmFsKSwgInIiKHZhbCkKKy0JICAgIDogIm1lbW9yeSIsICIkMyIKKy0JCSk7CisrCV9fYXNtX18gX192b2xhdGlsZV9fICgKKysJIgkuc2V0CXB1c2gJCVxuIgorKwkiCS5zZXQJbWlwczIJCVxuIgorKwkiCS5zZXQJbm9yZW9yZGVyCVxuIgorKwkiCS5zZXQJbm9hdAkJXG4iCisrCSIxOglsbAkkMSwgJTEJCVxuIgorKwkiCWJuZQkkMSwgJTMsIDJmCVxuIgorKwkiCW1vdmUJJTIsICU0CQlcbiIKKysJIglzYwklMiwgJTEJCVxuIgorKwkiCWJlcXoJJTIsIDFiCQlcbiIKKysJIjI6CW1vdmUJJTAsICQxCQlcbiIKKysJIgkuc2V0CXBvcAkJXG4iCisrCTogIj0mciIob3JpZyksICIrUiIgKCpwKSwgIj1yIiAodG1wKQorKwk6ICJyIihjbXB2YWwpLCAiciIodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL25hbWVkLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL25hbWVkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhNTZlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbmFtZWQuc2VydmljZQpAQCAtMCwwICsxLDIyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUJlcmtlbGV5IEludGVybmV0IE5hbWUgRG9tYWluIChETlMpCitXYW50cz1uc3MtbG9va3VwLnRhcmdldAorQmVmb3JlPW5zcy1sb29rdXAudGFyZ2V0CitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvYmluZDkKK1BJREZpbGU9L3J1bi9uYW1lZC9uYW1lZC5waWQKKworRXhlY1N0YXJ0UHJlPUBTQklORElSQC9nZW5lcmF0ZS1ybmRjLWtleS5zaAorRXhlY1N0YXJ0PUBTQklORElSQC9uYW1lZCAkT1BUSU9OUworCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAvc2ggLWMgJ0BTQklORElSQC9ybmRjIHJlbG9hZCA+IC9kZXYvbnVsbCAyPiYxIHx8IEBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElEJworCitFeGVjU3RvcD1AQkFTRV9CSU5ESVJAL3NoIC1jICdAU0JJTkRJUkAvcm5kYyBzdG9wID4gL2Rldi9udWxsIDI+JjEgfHwgQEJBU0VfQklORElSQC9raWxsIC1URVJNICRNQUlOUElEJworCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kXzkuMTAuMi1QNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFlMjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiSVNDIEludGVybmV0IERvbWFpbiBOYW1lIFNlcnZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaXNjLm9yZy9zdy9iaW5kLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIklTQyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9MGE5NWY1MmEwYWI2YzVmNTJkZWRjOWE0NWU3YWJiM2YiCisKK0RFUEVORFMgPSAib3BlbnNzbCBsaWJjYXAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2JpbmQ5LyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LXRlc3Qtb24taG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1ybmRjLWtleS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9uYW1lZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2JpbmQ5IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4YjFmNTA2NDgzNzc1NmM5MzhlYWRjMTUzN2RlYzVjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMDBiMjFlYzFkZWYyMTI5NTdmMjhlZmU5ZDEwYWFjNTJkNmVjNTE1ZTg0ZmJmMmM0MjE0M2Y1ZDcxNDI5Y2I4IgorCitFTkFCTEVfSVBWNiA9ICItLWVuYWJsZS1pcHY2PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICd5ZXMnLCAnbm8nLCBkKX0iCitFWFRSQV9PRUNPTkYgPSAiICR7RU5BQkxFX0lQVjZ9IC0td2l0aC1yYW5kb21kZXY9L2Rldi9yYW5kb20gLS1kaXNhYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGV2cG9sbCAtLWRpc2FibGUtZXBvbGwgLS13aXRoLWdvc3Q9bm8gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZ3NzYXBpPW5vIC0td2l0aC1lY2RzYT15ZXMgXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9iaW5kIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLW9wZW5zc2w9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIgoraW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZCB1c2VyYWRkIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICIiCitQQUNLQUdFQ09ORklHW2h0dHBzdGF0c10gPSAiLS13aXRoLWxpYnhtbDIsLS13aXRob3V0LWxpYnhtbDIsbGlieG1sMiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvY2FjaGUvYmluZCAtLW5vLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGJpbmQiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJiaW5kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuYW1lZC5zZXJ2aWNlIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWNvcmUiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitQQUNLQUdFX0JFRk9SRV9QTiArPSAiJHtQTn0tdXRpbHMiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vaG9zdCAke2JpbmRpcn0vZGlnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vaXNjLWNvbmZpZy5oIgorRklMRVNfJHtQTn0gKz0gIiR7c2JpbmRpcn0vZ2VuZXJhdGUtcm5kYy1rZXkuc2giCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwkjIGNsZWFuIGhvc3QgcGF0aCBpbiBpc2MtY29uZmlnLnNoIGJlZm9yZSB0aGUgaGFyZGxpbmsgY3JlYXRlZAorCSMgYnkgIm1ha2UgaW5zdGFsbCI6CisJIyAgIGJpbmQ5LWNvbmZpZyAtPiBpc2MtY29uZmlnLnNoCisJc2VkIC1pIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSwiICR7Qn0vaXNjLWNvbmZpZy5zaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAiJHtEfSR7YmluZGlyfS9uc2xvb2t1cCIKKwlybSAiJHtEfSR7bWFuZGlyfS9tYW4xL25zbG9va3VwLjEiCisJcm1kaXIgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biIKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0iCisJaW5zdGFsbCAtZCAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYmluZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9iaW5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCIKKwlpbnN0YWxsIC1tIDY0NCAke1N9L2NvbmYvKiAiJHtEfSR7c3lzY29uZmRpcn0vYmluZC8iCisJaW5zdGFsbCAtbSA3NTUgIiR7U30vaW5pdC5kIiAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2JpbmQiCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhIC91c3IvYmluL2VudiBweXRob24sJyAke0R9JHtzYmluZGlyfS9kbnNzZWMtY292ZXJhZ2UgJHtEfSR7c2JpbmRpcn0vZG5zc2VjLWNoZWNrZHMKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS9nZW5lcmF0ZS1ybmRjLWtleS5zaCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uYW1lZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL25hbWVkLnNlcnZpY2UKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JpbmQ5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiBcCisJJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYgXAorCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mLmxvY2FsIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZi5vcHRpb25zIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuMCBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLjEyNyBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLmVtcHR5IFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIubG9jYWwgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi5yb290IFwKKwkiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzljNDQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIkxpbnV4IEJsdWV0b290aCBTdGFjayBVc2VybGFuZCBWNSIKK0RFU0NSSVBUSU9OID0gIkxpbnV4IEJsdWV0b290aCBzdGFjayBWNSB1c2VybGFuZCBjb21wb25lbnRzLiAgVGhlc2UgaW5jbHVkZSBhIHN5c3RlbSBjb25maWd1cmF0aW9ucywgZGFlbW9ucywgdG9vbHMgYW5kIHN5c3RlbSBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ibHVlei5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYjUwNGI2N2M1MDMzMWZjNzg3MzRmZWQ5MGZiMGUwOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTliYzU0YjkzY2Q3ZTE3YmYwM2Y1MjUxM2YzOWY5MjZlIgorREVQRU5EUyA9ICJ1ZGV2IGxpYnVzYiBkYnVzLWdsaWIgZ2xpYi0yLjAgbGliY2hlY2sgcmVhZGxpbmUiCitQUk9WSURFUyArPSAiYmx1ZXotaGNpZHVtcCIKK1JQUk9WSURFU18ke1BOfSArPSAiYmx1ZXotaGNpZHVtcCIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJibHVlejQiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvYmV4LXByb2ZpbGVzIgorUEFDS0FHRUNPTkZJR1tvYmV4LXByb2ZpbGVzXSA9ICItLWVuYWJsZS1vYmV4LC0tZGlzYWJsZS1vYmV4LGxpYmljYWwiCitQQUNLQUdFQ09ORklHW2V4cGVyaW1lbnRhbF0gPSAiLS1lbmFibGUtZXhwZXJpbWVudGFsLC0tZGlzYWJsZS1leHBlcmltZW50YWwsIgorCitTUkNfVVJJID0gIlwKKyAgICAke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2JsdWV0b290aC9ibHVlei0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9ibHVldG9vdGguY29uZiBcCisiCitTID0gIiR7V09SS0RJUn0vYmx1ZXotJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLWVuYWJsZS10b29scyBcCisgIC0tZGlzYWJsZS1jdXBzIFwKKyAgLS1lbmFibGUtdGVzdCBcCisgIC0tZW5hYmxlLWRhdGFmaWxlcyBcCisgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS1zeXN0ZW1kJywgJy0tZGlzYWJsZS1zeXN0ZW1kJywgZCl9IFwKKyAgLS1lbmFibGUtbGlicmFyeSBcCisiCisKKyMgYmx1ZXo1IGJ1aWxkcyBhIGxhcmdlIG51bWJlciBvZiB1c2VmdWwgdXRpbGl0aWVzIGJ1dCBkb2VzIG5vdAorIyBpbnN0YWxsIHRoZW0uICBTcGVjaWZ5IHdoaWNoIG9uZXMgd2Ugd2FudCBwdXQgaW50byAke1BOfS1ub2luc3QtdG9vbHMuCitOT0lOU1RfVE9PTFNfUkVBRExJTkUgPz89ICIiCitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID8/PSAiIgorTk9JTlNUX1RPT0xTID0gIiBcCisgICAgJHtOT0lOU1RfVE9PTFNfUkVBRExJTkV9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdleHBlcmltZW50YWwnLCAnJHtOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMfScsICcnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvYXVkaW8vYXVkaW8uY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2F1ZGlvL2F1ZGlvLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCWlmIFsgLWYgJHtTfS9wcm9maWxlcy9uZXR3b3JrL25ldHdvcmsuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL25ldHdvcmsvbmV0d29yay5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJZmkKKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvaW5wdXQvaW5wdXQuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2lucHV0L2lucHV0LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCSMgYXRfY29uc29sZSBkb2Vzbid0IHJlYWxseSB3b3JrIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgT0UsIHNvIHB1bmNoIHNvbWUgbW9yZSBob2xlcyBzbyBwZW9wbGUgY2FuIGFjdHVhbGx5IHVzZSBCVAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JsdWV0b290aC5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvCisKKwkjIEluc3RhbGwgZGVzaXJlZCB0b29scyB0aGF0IHVwc3RyZWFtIGxlYXZlcyBpbiBidWlsZCBhcmVhCisgICAgICAgIGZvciBmIGluICR7Tk9JTlNUX1RPT0xTfSA7IGRvCisJICAgIGluc3RhbGwgLW0gNzU1ICR7Qn0vJGYgJHtEfS8ke2JpbmRpcn0KKwlkb25lCit9CisKK0FMTE9XX0VNUFRZX2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXogPSAiMSIKK1BBQ0tBR0VTID0rICJsaWJhc291bmQtbW9kdWxlLWJsdWV6ICR7UE59LXRlc3R0b29scyAke1BOfS1vYmV4ICR7UE59LW5vaW5zdC10b29scyIKKworRklMRVNfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIke2xpYmRpcn0vYWxzYS1saWIvbGliKi5zbyAke2RhdGFkaXJ9L2Fsc2EiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyouc28gJHtiYXNlX2xpYmRpcn0vdWRldi8gJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2LyAke3N5c3RlbWRfdW5pdGRpcn0vICR7ZGF0YWRpcn0vZGJ1cy0xIgorRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEgXAorIgorCitGSUxFU18ke1BOfS1vYmV4ID0gIiR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoL29iZXhkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3RlbWQvdXNlci9vYmV4LnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy9vcmcuYmx1ZXoub2JleC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tb2JleCA9ICJvYmV4LnNlcnZpY2UiCisKK0ZJTEVTXyR7UE59LXRlc3R0b29scyA9ICIke2xpYmRpcn0vYmx1ZXovdGVzdC8qIgorCitkZWYgZ2V0X25vaW5zdF90b29sc19wYXRocyAoZCwgYmIsIHRvb2xzKToKKyAgICBzID0gbGlzdCgpCisgICAgYmluZGlyID0gZC5nZXRWYXIoImJpbmRpciIsIFRydWUpCisgICAgZm9yIGJkcCBpbiB0b29scy5zcGxpdCgpOgorICAgICAgICBmID0gb3MucGF0aC5iYXNlbmFtZShiZHApCisgICAgICAgIHMuYXBwZW5kKCIlcy8lcyIgJSAoYmluZGlyLCBmKSkKKyAgICByZXR1cm4gIlxuIi5qb2luKHMpCisKK0ZJTEVTXyR7UE59LW5vaW5zdC10b29scyA9ICIke0BnZXRfbm9pbnN0X3Rvb2xzX3BhdGhzKGQsIGJiLCBkLmdldFZhcignTk9JTlNUX1RPT0xTJywgVHJ1ZSkpfSIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoLy5kZWJ1ZyBcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8uZGVidWcgXAorICAke2xpYmRpcn0vKi8uZGVidWcgXAorICAqL3VkZXYvLmRlYnVnIFwKKyAgKi8qL3VkZXYvLmRlYnVnIFwKKyAgIgorCitSREVQRU5EU18ke1BOfS10ZXN0dG9vbHMgKz0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYmx1ZXRvb3RoLnNlcnZpY2UiCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS9ibHVldG9vdGguY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjg0NWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYKQEAgLTAsMCArMSwxNyBAQAorPCEtLSBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkIHNlY3VyaXR5IHBvbGljaWVzCisgICAgIGZvciBCbHVldG9vdGggY29yZSBkYWVtb24gdG8gd29yay4gLS0+CisKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisKKyAgPCEtLSAuLi9zeXN0ZW0uY29uZiBoYXZlIGRlbmllZCBldmVyeXRoaW5nLCBzbyB3ZSBqdXN0IHB1bmNoIHNvbWUgaG9sZXMgLS0+CisKKyAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KKyAgICA8YWxsb3cgb3duPSJvcmcuYmx1ZXoiLz4KKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLmJsdWV6Ii8+CisgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJvcmcuYmx1ZXouQWdlbnQxIi8+CisgICAgPGFsbG93IHNlbmRfdHlwZT0ibWV0aG9kX2NhbGwiLz4KKyAgPC9wb2xpY3k+CisKKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS4zMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjNzM5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIKQEAgLTAsMCArMSw1MiBAQAorcmVxdWlyZSBibHVlejUuaW5jCitTUkNfVVJJW21kNXN1bV0gPSAiNzg3ODJkYzMzZDlhOGI2MzQ0YzRjYzFhZjcwYzhhOTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTgwMTgwN2ExMzUwNjY3OGNiZmViMTVjNmE0Yjg5ZWNiNTczOWVmZTEwNjdlYjQ2NGRhNjY0MWQ3MzE0MzZkMyIKKworIyBub2luc3QgcHJvZ3JhbXMgaW4gTWFrZWZpbGUudG9vbHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gUkVBRExJTkUKKyMgc3VwcG9ydAorTk9JTlNUX1RPT0xTX1JFQURMSU5FID89ICIgXAorICAgIGF0dHJpYi9nYXR0dG9vbCBcCisgICAgdG9vbHMvb2JleC1jbGllbnQtdG9vbCBcCisgICAgdG9vbHMvb2JleC1zZXJ2ZXItdG9vbCBcCisgICAgdG9vbHMvYmx1ZXRvb3RoLXBsYXllciBcCisgICAgdG9vbHMvb2JleGN0bCBcCisiCisKKyMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIEVYUEVSSU1FTlRBTAorIyBzdXBwb3J0CitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID89ICIgXAorICAgIGVtdWxhdG9yL2J0dmlydCBcCisgICAgZW11bGF0b3IvYjFlZSBcCisgICAgZW11bGF0b3IvaGZwIFwKKyAgICB0b29scy8zZHNwIFwKKyAgICB0b29scy9tZ210LXRlc3RlciBcCisgICAgdG9vbHMvZ2FwLXRlc3RlciBcCisgICAgdG9vbHMvbDJjYXAtdGVzdGVyIFwKKyAgICB0b29scy9zY28tdGVzdGVyIFwKKyAgICB0b29scy9zbXAtdGVzdGVyIFwKKyAgICB0b29scy9oY2ktdGVzdGVyIFwKKyAgICB0b29scy9yZmNvbW0tdGVzdGVyIFwKKyAgICB0b29scy9iZGFkZHIgXAorICAgIHRvb2xzL2F2aW5mbyBcCisgICAgdG9vbHMvYXZ0ZXN0IFwKKyAgICB0b29scy9zY290ZXN0IFwKKyAgICB0b29scy9hbXB0ZXN0IFwKKyAgICB0b29scy9od2RiIFwKKyAgICB0b29scy9oY2lldmVudG1hc2sgXAorICAgIHRvb2xzL2hjaXNlY2ZpbHRlciBcCisgICAgdG9vbHMvYnRtZ210IFwKKyAgICB0b29scy9idGluZm8gXAorICAgIHRvb2xzL2J0YXR0YWNoIFwKKyAgICB0b29scy9idHNub29wIFwKKyAgICB0b29scy9idHByb3h5IFwKKyAgICB0b29scy9idGlvdGVzdCBcCisgICAgdG9vbHMvbWNhcHRlc3QgXAorICAgIHRvb2xzL2NsdGVzdCBcCisgICAgdG9vbHMvb29idGVzdCBcCisgICAgdG9vbHMvc2VxMmJzZXEgXAorICAgIHRvb2xzL2liZWFjb24gXAorICAgIHRvb2xzL2J0Z2F0dC1jbGllbnQgXAorICAgIHRvb2xzL2J0Z2F0dC1zZXJ2ZXIgXAorICAgIHRvb2xzL2dhdHQtc2VydmljZSBcCisgICAgcHJvZmlsZXMvaWFwL2lhcGQgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGMyOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJDb25ubWFuIGNvbmZpZyB0byBzZXR1cCB3aXJlZCBpbnRlcmZhY2Ugb24gcWVtdSBtYWNoaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgdGhlIENvbm5NYW4gY29uZmlndXJhdGlvbiB0byBzZXQgdXAgYSBXaXJlZCBcCituZXR3b3JrIGludGVyZmFjZSBmb3IgYSBxZW11IG1hY2hpbmUuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitTUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gIiBmaWxlOi8vd2lyZWQuY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXJlZC1zZXR1cCBcCisiCitQUiA9ICJyMiIKKworUyA9ICIke1dPUktESVJ9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitGSUxFU18ke1BOfSA9ICIke2xvY2Fsc3RhdGVkaXJ9LyogJHtsaWJkaXJ9LyoiCisKK2RvX2luc3RhbGwoKSB7CisgICAgI0NvbmZpZ3VyZSBXaXJlZCBuZXR3b3JrIGludGVyZmFjZSBpbiBjYXNlIG9mIHFlbXUqIG1hY2hpbmVzCisgICAgaWYgdGVzdCAtZSAke1dPUktESVJ9L3dpcmVkLmNvbmZpZyAmJiB0ZXN0IC1lICR7V09SS0RJUn0vd2lyZWQtc2V0dXA7IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvY29ubm1hbgorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS93aXJlZC5jb25maWcgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vd2lyZWQtc2V0dXAgJHtEfSR7bGliZGlyfS9jb25ubWFuCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQtc2V0dXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2ODk5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitDT05GSUdGPS92YXIvbGliL2Nvbm5tYW4vd2lyZWQuY29uZmlnCisKKyMgRXh0cmFjdCB3aXJlZCBuZXR3b3JrIGNvbmZpZyBmcm9tIC9wcm9jL2NtZGxpbmUKK05FVF9DT05GPWBjYXQgL3Byb2MvY21kbGluZSB8c2VkIC1uZSAncy9eLippcD1cKFteIF0qXCk6XChbXiBdKlwpOlwoW14gXSpcKTpcKFteIF0qXCkuKiQvXDFcL1w0XC9cMy9wJ2AKKworIyBDaGVjayBpZiBldGgwIGlzIGFscmVhZHkgc2V0IHZpYSBrZXJuZWwgY21kbGluZQoraWYgWyAieCRORVRfQ09ORiIgPSAieCIgXTsgdGhlbgorCSMgV2lyZWQgaW50ZXJmYWNlIGlzIG5vdCBjb25maWd1cmVkIHZpYSBrZXJuZWwgY21kbGluZQorCSMgUmVtb3ZlIGNvbm5tYW4gY29uZmlnIGZpbGUgdGVtcGxhdGUKKwlybSAtZiAke0NPTkZJR0Z9CitlbHNlCisJIyBTZXR1cCBhIGNvbm5tYW4gY29uZmlnIGFjY29yZGluZ2x5CisJc2VkIC1pIC1lICJzfF5JUHY0ID0uKnxJUHY0ID0gJHtORVRfQ09ORn18IiAke0NPTkZJR0Z9CitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQuY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1jb25mL3FlbXVhbGwvd2lyZWQuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC5jb25maWcKQEAgLTAsMCArMSw5IEBACitbZ2xvYmFsXQorTmFtZSA9IFdpcmVkCitEZXNjcmlwdGlvbiA9IFdpcmVkIG5ldHdvcmsgY29uZmlndXJhdGlvbgorCitbc2VydmljZV9ldGhlcm5ldF0KK1R5cGUgPSBldGhlcm5ldAorSVB2NCA9CitNQUMgPSA1Mjo1NDowMDoxMjozNDo1NgorTmFtZXNlcnZlcnMgPSA4LjguOC44CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lLzAwMDEtUmVtb3ZlZC1pY29uLWZyb20tY29ubm1hbi1nbm9tZS1hYm91dC1hcHBsZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lLzAwMDEtUmVtb3ZlZC1pY29uLWZyb20tY29ubm1hbi1nbm9tZS1hYm91dC1hcHBsZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1NzUwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1SZW1vdmVkLWljb24tZnJvbS1jb25ubWFuLWdub21lLWFib3V0LWFwcGxldC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDU5MDdhMjNhZDJmNDk3MDI5NjBhMzNmOWUyMDM5NTUyNjczZWFiYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBNb24sIDE3IERlYyAyMDEyIDE0OjAxOjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZWQgaWNvbiBmcm9tIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQKKworVGhlIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQgc2hvd2VkIGEgcGljdHVyZSB0aGF0CitjYW4gbm90IGJlIGRpc3BsYXllZC4gVGhlcmUgaXMgbm8gZGVzaWduYXRlZCBwaWN0dXJlCitpbiBjb25ubWFuLWdub21lIHRvIGJlIHVzZWQgaW4gdGhlIGFib3V0IHNlY3Rpb24sIHNvCitpdCB3YXMgcmVtb3ZlZC4KKworW09FLUNvcmUgIzI1MDldCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBhcHBsZXQvbWFpbi5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXBwbGV0L21haW4uYyBiL2FwcGxldC9tYWluLmMKK2luZGV4IGYxMmQzNzEuLmM3YjNjN2YgMTAwNjQ0CistLS0gYS9hcHBsZXQvbWFpbi5jCisrKysgYi9hcHBsZXQvbWFpbi5jCitAQCAtMjEyLDcgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGFib3V0X2NhbGxiYWNrKEd0a1dpZGdldCAqaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorIAkJCSJjb21tZW50cyIsIF8oIkEgY29ubmVjdGlvbiBtYW5hZ2VyIGZvciB0aGUgR05PTUUgZGVza3RvcCIpLAorIAkJCSJhdXRob3JzIiwgYXV0aG9ycywKKyAJCQkidHJhbnNsYXRvci1jcmVkaXRzIiwgXygidHJhbnNsYXRvci1jcmVkaXRzIiksCistCQkJImxvZ28taWNvbi1uYW1lIiwgIm5ldHdvcmstd2lyZWxlc3MiLCBOVUxMKTsKKysJCQlOVUxMKTsKKyB9CisgCisgc3RhdGljIHZvaWQgc2V0dGluZ3NfY2FsbGJhY2soR3RrV2lkZ2V0ICppdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9jb25ubWFuLWdub21lLWZpeC1kYnVzLWludGVyZmFjZS1uYW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9jb25ubWFuLWdub21lLWZpeC1kYnVzLWludGVyZmFjZS1uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDQ5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK2Nvbm5tYW4tZ25vbWU6IGZpeCBkYnVzIGludGVyZmFjZSBuYW1lCisKK1RoaXMgcGF0Y2ggcmVzb2x2ZXMgZm9sbG93aW5nIGVycm9yOgorCisiY29ubm1hbi1kYnVzLnhtbCI6ICJjb25ubWFuIiBpcyBub3QgYSB2YWxpZCBELUJ1cyBpbnRlcmZhY2UgbmFtZQorCitodHRwczovLzUwMjU1Mi5idWdzLmdlbnRvby5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9MzgwNjUyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb21tb24vY29ubm1hbi1jbGllbnQuYyB8IDI0ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGNvbW1vbi9jb25ubWFuLWNsaWVudC5oIHwgIDQgKystLQorIGNvbW1vbi9jb25ubWFuLWRidXMuYyAgIHwgIDYgKysrLS0tCisgY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuYyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitpbmRleCBjNTVlMjVjLi45ZDgxOGIyIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitAQCAtMjg5LDcgKzI4OSw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAKKyAJZ192YWx1ZV9pbml0KCZ2YWx1ZSwgREJVU19UWVBFX0dfRElDVElPTkFSWSk7CisgCWdfdmFsdWVfc2V0X2JveGVkKCZ2YWx1ZSwgaXB2NCk7CistCXJldCA9IGNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKysJcmV0ID0gbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIAorQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHBvd2VyZWQpOworIAorIAllcnJvciA9IE5VTEw7CistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKysJbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKyAJaWYoIGVycm9yICkKKyAJCWZwcmludGYgKHN0ZGVyciwgImVycm9yOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworIAorQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyB9CisgCisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQljb25ubWFuX3NjYW5fcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSkKKysJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCisgeworIAlDb25ubWFuQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IENPTk5NQU5fQ0xJRU5UX0dFVF9QUklWQVRFKGNsaWVudCk7CisgCURCdXNHUHJveHkgKnByb3h5OworQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NjYW4oQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKy0JY29ubm1hbl9zY2FuX2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKKysJbmV0X2Nvbm5tYW5fc2Nhbl9hc3luYyhwcm94eSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyB9CitAQCAtMzUzLDcgKzM1Myw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X2dldF9vZmZsaW5lX3N0YXR1cyhDb25ubWFuQ2xpZW50ICpjbGllbnQpCisgCisgCURCRygiY2xpZW50ICVwIiwgY2xpZW50KTsKKyAKKy0JcmV0ID0gY29ubm1hbl9nZXRfcHJvcGVydGllcyhwcml2LT5tYW5hZ2VyLCAmaGFzaCwgTlVMTCk7CisrCXJldCA9IG5ldF9jb25ubWFuX2dldF9wcm9wZXJ0aWVzKHByaXYtPm1hbmFnZXIsICZoYXNoLCBOVUxMKTsKKyAKKyAJaWYgKHJldCA9PSBGQUxTRSkKKyAJCWdvdG8gZG9uZTsKK0BAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfb2ZmbGluZW1vZGUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBnYm9vbGVhbiBzdGF0dXMpCisgCWdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9CT09MRUFOKTsKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHN0YXR1cyk7CisgCistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByaXYtPm1hbmFnZXIsICJPZmZsaW5lTW9kZSIsICZ2YWx1ZSwgTlVMTCk7CisrCW5ldF9jb25ubWFuX3NldF9wcm9wZXJ0eShwcml2LT5tYW5hZ2VyLCAiT2ZmbGluZU1vZGUiLCAmdmFsdWUsIE5VTEwpOworIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorIAkJcmV0dXJuIFRSVUU7CisgCisgCWlmICh0eXBlID09IENPTk5NQU5fVFlQRV9XSUZJKQorLQkJY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKysJCW5ldF9jb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgCitAQCAtNDIyLDEzICs0MjIsMTMgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9jb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KKyAKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCWNvbm5tYW5fY29ubmVjdF9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcmRhdGEpCisrCQluZXRfY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSkKKyB7CisgCUNvbm5tYW5DbGllbnRQcml2YXRlICpwcml2ID0gQ09OTk1BTl9DTElFTlRfR0VUX1BSSVZBVEUoY2xpZW50KTsKKyAJREJ1c0dQcm94eSAqcHJveHk7CitAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdF9hc3luYyhDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCWdvdG8gZG9uZTsKKyAKKy0JY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworKwluZXRfY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworIAorIGRvbmU6CisgCXJldHVybjsKK0BAIC00NzYsNyArNDc2LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9kaXNjb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK0BAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9yZW1vdmUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaykKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlyZXR1cm47CisgCistCWNvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKysJbmV0X2Nvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuaCBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitpbmRleCA5ZTJlNmQ1Li45ODI0MWRlIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmgKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitAQCAtNzAsMTMgKzcwLDEzIEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X3Bvd2VyZWQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJCQkJc3RydWN0IGlwdjRfY29uZmlnICppcHY0X2NvbmZpZyk7Cisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQkJY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworKwkJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworIAorIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Rpc2Nvbm5lY3QoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yayk7CisgZ2NoYXIgKmNvbm5tYW5fY2xpZW50X2dldF9zZWN1cml0eShDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCQkJY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSk7CisrCQkJCW5ldF9jb25ubWFuX2Nvbm5lY3RfcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJkYXRhKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9yZW1lbWJlcihDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAkJCQkJCQlnYm9vbGVhbiByZW1lbWJlcik7CisgCitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jIGIvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCitpbmRleCBiODJiM2UxLi41NDNlYjQzIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLmMKK0BAIC02NTUsMTUgKzY1NSwxNSBAQCBEQnVzR1Byb3h5ICpjb25ubWFuX2RidXNfY3JlYXRlX21hbmFnZXIoREJ1c0dDb25uZWN0aW9uICpjb25uLAorIAorIAlEQkcoImdldHRpbmcgbWFuYWdlciBwcm9wZXJ0aWVzIik7CisgCistCWNvbm5tYW5fZ2V0X3Byb3BlcnRpZXNfYXN5bmMocHJveHksIG1hbmFnZXJfcHJvcGVydGllcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfcHJvcGVydGllc19hc3luYyhwcm94eSwgbWFuYWdlcl9wcm9wZXJ0aWVzLCBzdG9yZSk7CisgCisgCURCRygiZ2V0dGluZyB0ZWNobm9sb2dpZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworIAorIAlEQkcoImdldHRpbmcgc2VydmljZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfc2VydmljZXNfYXN5bmMocHJveHksIG1hbmFnZXJfc2VydmljZXMsIHN0b3JlKTsKKysJbmV0X2Nvbm5tYW5fZ2V0X3NlcnZpY2VzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3NlcnZpY2VzLCBzdG9yZSk7CisgCisgCXJldHVybiBwcm94eTsKKyB9CitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAoraW5kZXggNTZiOTU4Mi4uMDE5OWQ1MiAxMDA2NDQKKy0tLSBhL2NvbW1vbi9jb25ubWFuLWRidXMueG1sCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAorQEAgLTEsNyArMSw3IEBACisgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CisgCisgPG5vZGUgbmFtZT0iLyI+CistICA8aW50ZXJmYWNlIG5hbWU9ImNvbm5tYW4iPgorKyAgPGludGVyZmFjZSBuYW1lPSJuZXQuY29ubm1hbiI+CisgICAgIDxtZXRob2QgbmFtZT0iR2V0UHJvcGVydGllcyI+CisgICAgICAgPGFyZyB0eXBlPSJhe3N2fSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgPC9tZXRob2Q+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAxLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzI0N2MxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAyLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTRmYjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAzLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWViNDA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA0LnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU0NDE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA1LnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvaW1hZ2VzL2Nvbm5tYW4tc2lnbmFsLTA1LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQwYWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjFjZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0luIG5ldHdvcmtzIHRoYXQgZG9uJ3QgaGF2ZSBhIERIQ1Agc2VydmVyIGNvbmZpZ3VyZWQsIGlwdjQgYWRkcmVzcworYWxsb2NhdGlvbiBmYWlscyBhbmQgdGhlIGlwdjQgc3RydWN0dXJlIGRvZXNuJ3QgZ2V0IHBvcHVsYXRlZC4gV2hlbgordGhlIEdVSSBpcyB0cnlpbmcgdG8gcmVhZCB0aGUgaXB2NF9jb25maWcubWV0aG9kIGZpZWxkIHRvIHNlZSB3aGV0aGVyCitpdCBjb250YWlucyAiZGhjcCIgc3RyaW5nLCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpcyBnZW5lcmF0ZWQuCisKK0V0aGVybmV0IG1hbnVhbCBjb25maWd1cmF0aW9uIGJlaGF2aW9yIHJlbWFpbnMgdW5jaGFuZ2VkIGFmdGVyIHRoaXMgZml4LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRW1pbGlhIENpb2JhbnUgPGVtaWxpYS5tYXJpYS5zaWx2aWEuY2lvYmFudUBpbnRlbC5jb20+CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvZXRoZXJuZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Byb3BlcnRpZXMvZXRoZXJuZXQuYworKysrIGdpdC9wcm9wZXJ0aWVzL2V0aGVybmV0LmMKK0BAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBhZGRfZXRoZXJuZXRfc2VydmljZShHdGtXaWRnZXQgKm1haQorCisgCWRhdGEtPmJ1dHRvbiA9IGJ1dHRvbjsKKworLQlpZiAoZ19zdHJfZXF1YWwoaXB2NF9jb25maWcubWV0aG9kLCAiZGhjcCIpID09IFRSVUUpCisrCWlmICghaXB2NF9jb25maWcubWV0aG9kIHx8IGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorIAkJdXBkYXRlX2V0aGVybmV0X2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV9ldGhlcm5ldF9pcHY0KGRhdGEsIENPTk5NQU5fUE9MSUNZX01BTlVBTCk7CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvd2lmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvcHJvcGVydGllcy93aWZpLmMKKysrKyBnaXQvcHJvcGVydGllcy93aWZpLmMKK0BAIC0yMzAsNyArMjMwLDcgQEAgc3RhdGljIHZvaWQgd2lmaV9pcGNvbmZpZyhHdGtXaWRnZXQgKnRhYgorCisgCWRhdGEtPmlwdjRfY29uZmlnID0gaXB2NF9jb25maWc7CisKKy0JaWYgKGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorKwlpZiAoIWlwdjRfY29uZmlnLm1ldGhvZCB8fCBnX3N0cl9lcXVhbChpcHY0X2NvbmZpZy5tZXRob2QsICJkaGNwIikgPT0gVFJVRSkKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfTUFOVUFMKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZV8wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1NzVkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiR1RLKyBmcm9udGVuZCBmb3IgdGhlIENvbm5NYW4gbmV0d29yayBjb25uZWN0aW9uIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wcm9wZXJ0aWVzL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT01MGM3N2M4MTg3MTMwOGIwMzNhYjdhMTUwNDYyNmFmYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY29ubm1hbi1kYnVzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZGU2YjQ4NWMwZTcxN2EwMjM2NDAyZDIyMDE4NzcxN2EiCisKK0RFUEVORFMgPSAiZ3RrKyBkYnVzLWdsaWIgaW50bHRvb2wtbmF0aXZlIgorCisjIDAuNyB0YWcKK1NSQ1JFViA9ICJjZjNjMzI1YjIzZGFlODQzYzU0OTlhMTEzNTkxY2ZiYzk4YWNiMTQzIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Nvbm5lY3Rpdml0eS9jb25ubWFuLWdub21lLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ltYWdlcy8qIFwKKyAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGd0ay1pY29uLWNhY2hlIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfSA9ICJjb25ubWFuIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbWFnZXMvKiAke0R9L3Vzci9zaGFyZS9pY29ucy9oaWNvbG9yLzIyeDIyL2FwcHMvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZGM0YjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYwpAQCAtMCwwICsxLDIxMSBAQAorU1VNTUFSWSA9ICJBIGRhZW1vbiBmb3IgbWFuYWdpbmcgaW50ZXJuZXQgY29ubmVjdGlvbnMgd2l0aGluIGVtYmVkZGVkIGRldmljZXMiCitERVNDUklQVElPTiA9ICJUaGUgQ29ubk1hbiBwcm9qZWN0IHByb3ZpZGVzIGEgZGFlbW9uIGZvciBtYW5hZ2luZyBcCitpbnRlcm5ldCBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIENvbm5lY3Rpb24gTWFuYWdlciBpcyBkZXNpZ25lZCB0byBiZSBzbGltIGFuZCBcCit0byB1c2UgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZSwgc28gaXQgY2FuIGJlIGVhc2lseSBpbnRlZ3JhdGVkLiBcCitJdCBpcyBhIGZ1bGx5IG1vZHVsYXIgc3lzdGVtIHRoYXQgY2FuIGJlIGV4dGVuZGVkLCB0aHJvdWdoIHBsdWctaW5zLCBcCit0byBzdXBwb3J0IGFsbCBraW5kcyBvZiB3aXJlZCBvciB3aXJlbGVzcyB0ZWNobm9sb2dpZXMuIEFsc28sIFwKK2NvbmZpZ3VyYXRpb24gbWV0aG9kcywgbGlrZSBESENQIGFuZCBkb21haW4gbmFtZSByZXNvbHZpbmcsIGFyZSBcCitpbXBsZW1lbnRlZCB1c2luZyBwbHVnLWlucy4iCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovLzAxLm9yZy9qaXJhL2Jyb3dzZS9DTSIKK0xJQ0VOU0UgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT00ODZhMjc5YTZhYjBjOGQxNTJiY2RhM2E1YjVlZGMzNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgYmx1ZXRvb3RoCisKK0RFUEVORFMgID0gImRidXMgZ2xpYi0yLjAgcHBwIGlwdGFibGVzIgorCitJTkNfUFIgPSAicjIwIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICBhY19jdl9wYXRoX1dQQVNVUFBMSUNBTlQ9JHtzYmluZGlyfS93cGFfc3VwcGxpY2FudCBcCisgICAgYWNfY3ZfcGF0aF9QUFBEPSR7c2JpbmRpcn0vcHBwZCBcCisgICAgLS1lbmFibGUtZGVidWcgXAorICAgIC0tZW5hYmxlLWxvb3BiYWNrIFwKKyAgICAtLWVuYWJsZS1ldGhlcm5ldCBcCisgICAgLS1lbmFibGUtdG9vbHMgXAorICAgIC0tZW5hYmxlLXRlc3QgXAorICAgIC0tZGlzYWJsZS1wb2xraXQgXAorICAgIC0tZW5hYmxlLWNsaWVudCBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ3aXNwciBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsJ3dpZmknLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCczZycsICcnLCBkKX0gXAorIgorCisjIElmIHlvdSB3YW50IENvbm5NYW4gdG8gc3VwcG9ydCBWUE4sIGFkZCBmb2xsb3dpbmcgc3RhdGVtZW50IGludG8KKyMgbG9jYWwuY29uZiBvciBkaXN0cm8gY29uZmlnCisjIFBBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLWNvbm5tYW4gPSAiIG9wZW52cG4gdnBuYyBsMnRwIHBwdHAiCisKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW3dpZmldID0gIi0tZW5hYmxlLXdpZmksIC0tZGlzYWJsZS13aWZpLCB3cGEtc3VwcGxpY2FudCwgd3BhLXN1cHBsaWNhbnQiCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9LCAke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbM2ddID0gIi0tZW5hYmxlLW9mb25vLCAtLWRpc2FibGUtb2Zvbm8sIG9mb25vLCBvZm9ubyIKK1BBQ0tBR0VDT05GSUdbdGlzdF0gPSAiLS1lbmFibGUtdGlzdCwtLWRpc2FibGUtdGlzdCwiCitQQUNLQUdFQ09ORklHW29wZW52cG5dID0gIi0tZW5hYmxlLW9wZW52cG4gLS13aXRoLW9wZW52cG49JHtzYmluZGlyfS9vcGVudnBuLC0tZGlzYWJsZS1vcGVudnBuLCxvcGVudnBuIgorUEFDS0FHRUNPTkZJR1t2cG5jXSA9ICItLWVuYWJsZS12cG5jIC0td2l0aC12cG5jPSR7c2JpbmRpcn0vdnBuYywtLWRpc2FibGUtdnBuYywsdnBuYyIKK1BBQ0tBR0VDT05GSUdbbDJ0cF0gPSAiLS1lbmFibGUtbDJ0cCAtLXdpdGgtbDJ0cD0ke3NiaW5kaXJ9L3hsMnRwZCwtLWRpc2FibGUtbDJ0cCwseGwydHBkIgorUEFDS0FHRUNPTkZJR1twcHRwXSA9ICItLWVuYWJsZS1wcHRwIC0td2l0aC1wcHRwPSR7c2JpbmRpcn0vcHB0cCwtLWRpc2FibGUtcHB0cCwscHB0cC1saW51eCIKKyMgV0lTUHIgc3VwcG9ydCBmb3IgbG9nZ2luZyBpbnRvIGhvdHNwb3RzLCByZXF1aXJlcyBUTFMKK1BBQ0tBR0VDT05GSUdbd2lzcHJdID0gIi0tZW5hYmxlLXdpc3ByLC0tZGlzYWJsZS13aXNwcixnbnV0bHMsIgorCitJTklUU0NSSVBUX05BTUUgPSAiY29ubm1hbiIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDA1IDUgMiAzIC4gc3RvcCAyMiAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHN5c3RlbWRfcGFja2FnZXMgPSAiJHtQTn0iCisgICAgcGtnY29uZmlnID0gZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKQorICAgIGlmICgnb3BlbnZwbicgb3IgJ3ZwbmMnIG9yICdsMnRwJyBvciAncHB0cCcpIGluIHBrZ2NvbmZpZy5zcGxpdCgpOgorICAgICAgICBzeXN0ZW1kX3BhY2thZ2VzICs9ICIgJHtQTn0tdnBuIgorICAgIGQuc2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgc3lzdGVtZF9wYWNrYWdlcykKK30KKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS12cG4gPSAiY29ubm1hbi12cG4uc2VydmljZSIKK1NZU1RFTURfV0lSRURfU0VUVVAgPSAiRXhlY1N0YXJ0UHJlPS0ke2xpYmRpcn0vY29ubm1hbi93aXJlZC1zZXR1cCIKKworIyBUaGlzIGFsbG93cyAqZXZlcnlvbmUqIHRvIGFjY2VzcyBDb25uTWFuIG92ZXIgREJ1cywgd2l0aG91dCBhbnkgYWNjZXNzCisjIGNvbnRyb2wuICBSZWFsbHkgdGhlIGF0X2NvbnNvbGUgZmxhZyBzaG91bGQgd29yaywgd2hpY2ggd291bGQgbWVhbiB0aGF0CisjIGJvdGggdGhpcyBhbmQgdGhlIHh1c2VyIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgorZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vdnBuL3Zwbi1kYnVzLmNvbmYKKworCXNlZCAtaSAicyNFeGVjU3RhcnQ9IyR7U1lTVEVNRF9XSVJFRF9TRVRVUH1cbkV4ZWNTdGFydD0jIiAke0J9L3NyYy9jb25ubWFuLnNlcnZpY2UKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY29ubm1hbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvY29ubm1hbgorCQlzZWQgLWkgcyVATElCRElSQCUke2xpYmRpcn0lICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jb25ubWFuCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L3Rvb2xzLyotdGVzdCAke0R9JHtiaW5kaXJ9CisJaWYgWyAtZSAke0J9L3Rvb2xzL3dpc3ByIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdG9vbHMvd2lzcHIgJHtEfSR7YmluZGlyfQorCWZpCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vY2xpZW50L2Nvbm5tYW5jdGwgJHtEfSR7YmluZGlyfQorCisJIyBXZSBkb24ndCBuZWVkIHRvIHBhY2thZ2UgYW4gZW1wdHkgZGlyZWN0b3J5CisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMKKworCSMgQXV0b21ha2UgMS4xMiB3b24ndCBpbnN0YWxsIGVtcHR5IGRpcmVjdG9yaWVzLCBidXQgd2UgbmVlZCB0aGUKKwkjIHBsdWdpbnMgZGlyZWN0b3J5IHRvIGJlIHByZXNlbnQgZm9yIG93bmVyc2hpcAorCW1rZGlyIC1wICR7RH0ke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zCit9CisKKyMgVGhlc2UgdXNlZCB0byBiZSBwbHVnaW5zLCBidXQgbm93IHRoZXkgYXJlIGNvcmUKK1JQUk9WSURFU18ke1BOfSA9ICJcCisJY29ubm1hbi1wbHVnaW4tbG9vcGJhY2sgXAorCWNvbm5tYW4tcGx1Z2luLWV0aGVybmV0IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdibHVldG9vdGgnLCdjb25ubWFuLXBsdWdpbi1ibHVldG9vdGgnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd3aWZpJywnY29ubm1hbi1wbHVnaW4td2lmaScsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJzNnJywnY29ubm1hbi1wbHVnaW4tb2Zvbm8nLCAnJywgZCl9IFwKKwkiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKwlkYnVzIFwKKwkke0BiYXNlX2NvbmRpdGlvbmFsKCdST09UTEVTU19YJywgJzEnLCAneHVzZXItYWNjb3VudCcsICcnLCBkKX0gXAorCSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UE59LXBsdWdpbi0uKiIKKworZGVmIGFkZF9yZGVwZW5kcyhiYiwgZCwgZmlsZSwgcGtnLCBkZXBtYXAsIG11bHRpbGliX3ByZWZpeCwgYWRkX2luc2FuZV9za2lwKToKKyAgICBwbHVnaW50eXBlID0gcGtnLnNwbGl0KCAnLScgKVstMV0KKyAgICBpZiBwbHVnaW50eXBlIGluIGRlcG1hcDoKKyAgICAgICAgcmRlcGVuZHMgPSBtYXAobGFtYmRhIHg6IG11bHRpbGliX3ByZWZpeCArIHgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVwbWFwW3BsdWdpbnR5cGVdLnNwbGl0KCkpCisgICAgICAgIGQuc2V0VmFyKCJSREVQRU5EU18lcyIgJSBwa2csICIgIi5qb2luKHJkZXBlbmRzKSkKKyAgICBpZiBhZGRfaW5zYW5lX3NraXA6CisgICAgICAgIGQuYXBwZW5kVmFyKCJJTlNBTkVfU0tJUF8lcyIgJSBwa2csICJkZXYtc28iKQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBkZXBtYXAgPSBkaWN0KHBwcGQ9InBwcCIpCisgICAgbXVsdGlsaWJfcHJlZml4ID0gKGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIEZhbHNlKQorICAgIHBsdWdpbl9kaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgJ14oLiopLnNvJCcsIHBsdWdpbl9uYW1lLCBcCisgICAgICAgICcke1BOfSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgaG9vaz1ob29rLCBwcmVwZW5kPVRydWUgKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIFRydWUpCisgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi12cG4tJXMnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbl9kaXIsICdeKC4qKS5zbyQnLCBwbHVnaW5fbmFtZSwgXAorICAgICAgICAnJHtQTn0gVlBOIHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBob29rPWhvb2ssIHByZXBlbmQ9VHJ1ZSApCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyAke1BOfS10ZXN0cyAke1BOfS1jbGllbnQiCisKK0ZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS93aXNwciIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9LyotdGVzdCAke2xpYmRpcn0vJHtCUE59L3Rlc3QvKiIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QgcHl0aG9uLXRleHR1dGlscyBweXRob24tc3VicHJvY2VzcyBweXRob24tZmNudGwgcHl0aG9uLW5ldGNsaWVudCIKKworRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7YmluZGlyfS9jb25ubWFuY3RsIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyogJHtsaWJleGVjZGlyfS8qICR7bGliZGlyfS9saWIqLnNvLiogXAorICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucyBcCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vKiAke2Jhc2Vfc2JpbmRpcn0vKiAke2Jhc2VfbGliZGlyfS8qLnNvKiAke2RhdGFkaXJ9LyR7UE59IFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovLmRlYnVnIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovKi5sYSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXZwbiIKKworU1VNTUFSWV8ke1BOfS12cG4gPSAiQSBkYWVtb24gZm9yIG1hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyIKK0RFU0NSSVBUSU9OXyR7UE59LXZwbiA9ICJUaGUgQ29ubk1hbiBWUE4gcHJvdmlkZXMgYSBkYWVtb24gZm9yIFwKK21hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIGNvbm5tYW4tdnBuZCBoYW5kbGVzIGFsbCB0aGUgVlBOIGNvbm5lY3Rpb25zIFwKK2FuZCBzdGFydHMvc3RvcHMgVlBOIGNsaWVudCBwcm9jZXNzZXMgd2hlbiBuZWNlc3NhcnkuIFRoZSBjb25ubWFuLXZwbmQgXAorcHJvdmlkZXMgYSBEQnVzIEFQSSBmb3IgbWFuYWdpbmcgVlBOIGNvbm5lY3Rpb25zLiBBbGwgdGhlIGRpZmZlcmVudCBcCitWUE4gdGVjaG5vZ2llcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcGx1Zy1pbnMuIgorRklMRVNfJHtQTn0tdnBuICs9ICIke3NiaW5kaXJ9L2Nvbm5tYW4tdnBuZCBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kL2Nvbm5tYW4tdnBuLWRidXMuY29uZiBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy9uZXQuY29ubm1hbi52cG4uc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY29ubm1hbi12cG4uc2VydmljZSIKKworU1VNTUFSWV8ke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4gPSAiQW4gT3BlblZQTiBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuID0gIlRoZSBDb25uTWFuIE9wZW5WUE4gcGx1Z2luIHVzZXMgb3BlbnZwbiBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gT3BlblZQTiBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW52cG4tc2NyaXB0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vb3BlbnZwbi5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbiArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnb3BlbnZwbicsJyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbicsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIkEgdnBuYyBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIlRoZSBDb25uTWFuIHZwbmMgcGx1Z2luIHVzZXMgdnBuYyBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gQ2lzY28zMDAwIFZQTiBDb25jZW50cmF0b3IuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi12cG5jICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW5jb25uZWN0LXNjcmlwdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuL3ZwbmMuc28iCitSREVQRU5EU18ke1BOfS1wbHVnaW4tdnBuLXZwbmMgKz0gIiR7UE59LXZwbiIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsJ3ZwbmMnLCcke1BOfS1wbHVnaW4tdnBuLXZwbmMnLCAnJywgZCl9IgorCitTVU1NQVJZXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJBIEwyVFAgcGx1Z2luIGZvciBDb25uTWFuIFZQTiIKK0RFU0NSSVBUSU9OXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJUaGUgQ29ubk1hbiBMMlRQIHBsdWdpbiB1c2VzIHhsMnRwZCBkYWVtb24gXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gTDJUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1sMnRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vbDJ0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tbDJ0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnbDJ0cCcsJyR7UE59LXBsdWdpbi12cG4tbDJ0cCcsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIkEgUFBUUCBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIlRoZSBDb25uTWFuIFBQVFAgcGx1Z2luIHVzZXMgcHB0cC1saW51eCBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gUFBUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1wcHRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vcHB0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tcHB0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywncHB0cCcsJyR7UE59LXBsdWdpbi12cG4tcHB0cCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vMDAwMS1wbHVnaW4uaC1DaGFuZ2UtdmlzaWJpbGl0eS10by1kZWZhdWx0LWZvci1kZWJ1Zy1zeW1iLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjAzZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDRkZGFmNzhkYWQ1YTllZTRhMDY1ODIzNWY3MWI3NTEzMjE5MjEyM2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA3IEFwciAyMDEyIDE4OjUyOjEyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBsdWdpbi5oOiBDaGFuZ2UgdmlzaWJpbGl0eSB0byBkZWZhdWx0IGZvciBkZWJ1ZyBzeW1ib2xzCisKK2dvbGQgcmVmdXNlcyB0byBsaW5rIGluIHVuZGVmaW5lZCB3ZWFrIHN5bWJvbHMgd2hpY2gKK2hhdmUgaGlkZGVuIHZpc2liaWxpdHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGluY2x1ZGUvcGx1Z2luLmggfCAgICA0ICsrLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGx1Z2luLmggYi9pbmNsdWRlL3BsdWdpbi5oCitpbmRleCA2OTJhNGU1Li5hOTM2MWMzIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9wbHVnaW4uaAorKysrIGIvaW5jbHVkZS9wbHVnaW4uaAorQEAgLTg5LDkgKzg5LDkgQEAgc3RydWN0IGNvbm5tYW5fcGx1Z2luX2Rlc2MgeworICNlbHNlCisgI2RlZmluZSBDT05OTUFOX1BMVUdJTl9ERUZJTkUobmFtZSwgZGVzY3JpcHRpb24sIHZlcnNpb24sIHByaW9yaXR5LCBpbml0LCBleGl0KSBcCisgCQlleHRlcm4gc3RydWN0IGNvbm5tYW5fZGVidWdfZGVzYyBfX3N0YXJ0X19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX2RlYnVnX2Rlc2MgX19zdG9wX19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgXAorIAkJCQlfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7IFwKKyAJCXN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgPSB7IFwKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3YjNjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vYWRkX3h1c2VyX2RidXNfcGVybWlzc2lvbi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitCZWNhdXNlIFBva3kgZG9lc24ndCBzdXBwb3J0IGF0X2NvbnNvbGUgd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhlIHNlc3Npb24KK3VzZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NyYy9jb25ubWFuLWRidXMuY29uZiBiL3NyYy9jb25ubWFuLWRidXMuY29uZgoraW5kZXggOThhNzczZS4uNDY2ODA5YyAxMDA2NDQKKy0tLSBhL3NyYy9jb25ubWFuLWRidXMuY29uZgorKysrIGIvc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCitAQCAtOCw2ICs4LDkgQEAKKyAgICAgICAgIDxhbGxvdyBzZW5kX2ludGVyZmFjZT0ibmV0LmNvbm5tYW4uQ291bnRlciIvPgorICAgICAgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJuZXQuY29ubm1hbi5Ob3RpZmljYXRpb24iLz4KKyAgICAgPC9wb2xpY3k+CisrICAgIDxwb2xpY3kgdXNlcj0ieHVzZXIiPgorKyAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisrICAgIDwvcG9saWN5PgorICAgICA8cG9saWN5IGF0X2NvbnNvbGU9InRydWUiPgorICAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisgICAgIDwvcG9saWN5PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9jb25ubWFuIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9jb25ubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmN2E5NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2Nvbm5tYW4KQEAgLTAsMCArMSw4MyBAQAorIyEvYmluL3NoCisKK0RBRU1PTj0vdXNyL3NiaW4vY29ubm1hbmQKK1BJREZJTEU9L3Zhci9ydW4vY29ubm1hbmQucGlkCitERVNDPSJDb25uZWN0aW9uIE1hbmFnZXIiCisKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L2Nvbm5tYW4gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9jb25ubWFuCitmaQorCitzZXQgLWUKKworbmZzcm9vdD0wCisKK2V4ZWMgOTwmMCA8IC9wcm9jL21vdW50cword2hpbGUgcmVhZCBkZXYgbXRwdCBmc3R5cGUgcmVzdDsgZG8KKwlpZiB0ZXN0ICRtdHB0ID0gIi8iIDsgdGhlbgorCQljYXNlICRmc3R5cGUgaW4KKwkJICAgIG5mcyB8IG5mczQpCisJCQluZnNyb290PTEKKwkJCWJyZWFrCisJCQk7OworCQkgICAgKikKKwkJCTs7CisJCWVzYWMKKwlmaQorZG9uZQorCitkb19zdGFydCgpIHsKKwlFWFRSQV9QQVJBTT0iIgorCWlmIHRlc3QgJG5mc3Jvb3QgLWVxIDEgOyB0aGVuCisJICAgIE5FVF9ERVZTPWBjYXQgL3Byb2MvbmV0L2RldiB8IHNlZCAtbmUgJ3MvXlwoW2EtekEtWjAtOSBdKlwpOi4qJC9cMS9wJ2AKKwkgICAgTkVUX0FERFI9YGNhdCAvcHJvYy9jbWRsaW5lIHwgc2VkIC1uZSAncy9eLippcD1cKFteIDpdKlwpLiokL1wxL3AnYAorCisJICAgIGlmIFsgISAteiAiJE5FVF9BRERSIiBdOyB0aGVuCisJCWlmIFsgIiRORVRfQUREUiIgPSBkaGNwIF07IHRoZW4KKwkJICAgIGV0aG49YGlmY29uZmlnIHwgZ3JlcCAiXmV0aCIgfCBzZWQgLWUgInMvXChldGhbMC05XVwpXCguKlwpL1wxLyJgCisJCSAgICBpZiBbICEgLXogIiRldGhuIiBdOyB0aGVuCisJCQlFWFRSQV9QQVJBTT0iLUkgJGV0aG4iCisJCSAgICBmaQorCQllbHNlCisJCSAgICBmb3IgaSBpbiAkTkVUX0RFVlM7IGRvCisJCQlBRERSPWBpZmNvbmZpZyAkaSB8IHNlZCAncy9hZGRyOi8vZycgfCBzZWQgLW5lICdzL14uKmluZXQgXChbMC05Ll0qXCkgLiokL1wxL3AnYAorCQkJaWYgWyAiJE5FVF9BRERSIiA9ICIkQUREUiIgXTsgdGhlbgorCQkJICAgIEVYVFJBX1BBUkFNPSItSSAkaSIKKwkJCSAgICBicmVhaworCQkJZmkKKwkJICAgIGRvbmUKKwkJZmkKKwkgICAgZmkKKwlmaQorCWlmIFsgLWYgQExJQkRJUkAvY29ubm1hbi93aXJlZC1zZXR1cCBdIDsgdGhlbgorCQkuIEBMSUJESVJAL2Nvbm5tYW4vd2lyZWQtc2V0dXAKKwlmaQorCSREQUVNT04gJEVYVFJBX1BBUkFNCit9CisKK2RvX3N0b3AoKSB7CisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBjb25ubWFuZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuXzEuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0NzM1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGNvbm5tYW4uaW5jCisKK1NSQ19VUkkgID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4gXAorICAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjRhM2VmZGJkNjc5NjkyMmRiOWM2ZjY2ZGE1Nzg4N2ZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNWU0NjRiYWNjOWMyN2VkNGU3MjY5ZmI5YjUwNTlmMDc5NDdmNWJlMjY0MzNiNTkyMTIxMzM2NjNmZmE5OTEiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNvbm5tYW4tY29uZiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODgzYThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKQEAgLTAsMCArMSwxMTUgQEAKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorU1VNTUFSWSA9ICJJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtIERIQ1AgcGFja2FnZSIKK0RFU0NSSVBUSU9OID0gIkRIQ1AgKER5bmFtaWMgSG9zdCBDb25maWd1cmF0aW9uIFByb3RvY29sKSBpcyBhIHByb3RvY29sIFwKK3doaWNoIGFsbG93cyBpbmRpdmlkdWFsIGRldmljZXMgb24gYW4gSVAgbmV0d29yayB0byBnZXQgdGhlaXIgb3duIFwKK25ldHdvcmsgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VydmVyLiAgREhDUCBoZWxwcyBtYWtlIGl0IFwKK2Vhc2llciB0byBhZG1pbmlzdGVyIGRldmljZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlzYy5vcmcvIgorCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7YmVnaW5saW5lPTQ7bWQ1PWM1YzY0ZDY5NjEwN2Y4NGI1NmZlMzM3ZDE0ZGExNzUzIgorCitERVBFTkRTID0gIm9wZW5zc2wgYmluZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaXNjLm9yZy9pc2MvZGhjcC8ke1BWfS9kaGNwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQtcmVsYXkgZmlsZTovL2RlZmF1bHQtcmVsYXkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdC1zZXJ2ZXIgZmlsZTovL2RlZmF1bHQtc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL2RoY2xpZW50LmNvbmYgZmlsZTovL2RoY3BkLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vZGhjcGQuc2VydmljZSBmaWxlOi8vZGhjcmVsYXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kaGNwZDYuc2VydmljZSAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHN5c3RlbWQKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zZXJ2ZXIgJHtQTn0tcmVsYXkiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc2VydmVyID0gImRoY3BkLnNlcnZpY2UgZGhjcGQ2LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LXNlcnZlciA9ICJkaXNhYmxlIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tcmVsYXkgPSAiZGhjcmVsYXkuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tcmVsYXkgPSAiZGlzYWJsZSIKKworVEFSR0VUX0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3J2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zcnY2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY2xpLWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jbGk2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtbGliYmluZD0ke1NUQUdJTkdfTElCRElSfS8gXAorICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXJlbGF5ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXJlbGF5CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGVmYXVsdC1yZWxheSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGhjcC1zZXJ2ZXIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyCisKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9kaGNsaWVudC5jb25mKgorCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3BkLmNvbmYqCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjbGllbnQuY29uZiAke0R9JHtzeXNjb25mZGlyfS9kaGNwL2RoY2xpZW50LmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AvZGhjcGQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWlmIFsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7c2JpbmRpcn0vZGhjbGllbnQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke1N9L2NsaWVudC9zY3JpcHRzL2xpbnV4ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQtc2NyaXB0CisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3BkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZDYuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3JlbGF5LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcmVsYXkuc2VydmljZQorCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQorCXNlZCAtaSAtZSAncyxAYmFzZV9iaW5kaXJALCR7YmFzZV9iaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCisJc2VkIC1pIC1lICdzLEBsb2NhbHN0YXRlZGlyQCwke2xvY2Fsc3RhdGVkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCit9CisKK1BBQ0tBR0VTICs9ICJkaGNwLXNlcnZlciBkaGNwLXNlcnZlci1jb25maWcgZGhjcC1jbGllbnQgZGhjcC1yZWxheSBkaGNwLW9tc2hlbGwiCisKK0ZJTEVTXyR7UE59ID0gIiIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSREVQRU5EU18ke1BOfS1zdGF0aWNkZXYgPSAiIgorCitGSUxFU18ke1BOfS1zZXJ2ZXIgPSAiJHtzYmluZGlyfS9kaGNwZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXNlcnZlciIKK1JSRUNPTU1FTkRTXyR7UE59LXNlcnZlciA9ICJkaGNwLXNlcnZlci1jb25maWciCisKK0ZJTEVTXyR7UE59LXNlcnZlci1jb25maWcgPSAiJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyICR7c3lzY29uZmRpcn0vZGhjcC9kaGNwZC5jb25mIgorCitGSUxFU18ke1BOfS1yZWxheSA9ICIke3NiaW5kaXJ9L2RoY3JlbGF5ICR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3AtcmVsYXkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQgJHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50LXNjcmlwdCAke3N5c2NvbmZkaXJ9L2RoY3AvZGhjbGllbnQuY29uZiIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJiYXNoIgorCitGSUxFU18ke1BOfS1vbXNoZWxsID0gIiR7YmluZGlyfS9vbXNoZWxsIgorCitwa2dfcG9zdGluc3RfZGhjcC1zZXJ2ZXIoKSB7CisgICAgbWtkaXIgLXAgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcAorICAgIHRvdWNoICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQubGVhc2VzCisgICAgdG91Y2ggJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzCit9CisKK3BrZ19wb3N0aW5zdF9kaGNwLWNsaWVudCgpIHsKKyAgICBta2RpciAtcCAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwCit9CisKK3BrZ19wb3N0cm1fZGhjcC1zZXJ2ZXIoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CisKK3BrZ19wb3N0cm1fZGhjcC1jbGllbnQoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50Ni5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RlZmluZS1tYWNyby1fUEFUSF9ESENQRF9DT05GLWFuZC1fUEFUSF9ESENMSUVOVF9DT04ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkM2M5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkZWZpbmUgbWFjcm8gX1BBVEhfREhDUERfQ09ORiBhbmQgX1BBVEhfREhDTElFTlRfQ09ORgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgPG9lIHNwZWNpZmljPgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlcy9zaXRlLmggfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGVzL3NpdGUuaCBiL2luY2x1ZGVzL3NpdGUuaAoraW5kZXggZDg3YjMwOS4uMTdiYzQwZCAxMDA2NDQKKy0tLSBhL2luY2x1ZGVzL3NpdGUuaAorKysrIGIvaW5jbHVkZXMvc2l0ZS5oCitAQCAtMTM5LDcgKzEzOSw4IEBACisgLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdGhlIGRoY3BkLmNvbmYgZmlsZSB0byBnbyBzb21ld2hlcmUgb3RoZXIgdGhhbgorICAgIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgIEJ5IGRlZmF1bHQsIGl0IGdvZXMgaW4gL2V0Yy9kaGNwZC5jb25mLiAqLworIAorLS8qICNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwZC5jb25mIiAqLworKyNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwL2RoY3BkLmNvbmYiCisrI2RlZmluZSBfUEFUSF9ESENMSUVOVF9DT05GCSIvZXRjL2RoY3AvZGhjbGllbnQuY29uZiIKKyAKKyAvKiBOZXR3b3JrIEFQSSBkZWZpbml0aW9ucy4gICBZb3UgZG8gbm90IG5lZWQgdG8gY2hvb3NlIG9uZSBvZiB0aGVzZSAtIGlmCisgICAgeW91IGRvbid0IGNob29zZSwgb25lIHdpbGwgYmUgY2hvc2VuIGZvciB5b3UgaW4geW91ciBzeXN0ZW0ncyBjb25maWcKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlYTU1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorZGhjcC1jbGllbnQ6IGZpeCBpbnZva2UgZGhjbGllbnQtc2NyaXB0IGZhaWxlZCBvbiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0KKworSW4gcmVhZC1vbmx5IGZpbGUgc3lzdGVtLCAnL2V0YycgaXMgb24gdGhlIHJlYWRvbmx5IHBhcnRpdGlvbiwKK2FuZCAnL2V0Yy9yZXNvbHYuY29uZicgaXMgc3ltbGlua2VkIHRvIGEgc2VwYXJhdGUgd3JpdGFibGUKK3BhcnRpdGlvbi4KKworSW4gdGhpcyBzaXR1YXRpb24sIHdlIHNob3VsZCB1c2Ugc2hlbGwgdmFyaWFibGUgdG8gaW5zdGVhZCBvZgordGVtcCBmaWxlcyAnL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCcgYW5kICcvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NicuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY2xpZW50L3NjcmlwdHMvbGludXggfCAyMCArKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvbGludXggYi9jbGllbnQvc2NyaXB0cy9saW51eAorLS0tIGEvY2xpZW50L3NjcmlwdHMvbGludXgKKysrKyBiL2NsaWVudC9zY3JpcHRzL2xpbnV4CitAQCAtMjcsMjcgKzI3LDI1IEBAIGlwPS9zYmluL2lwCisgCisgbWFrZV9yZXNvbHZfY29uZigpIHsKKyAgIGlmIFsgeCIkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnMiICE9IHggXTsgdGhlbgorLSAgICBjYXQgL2Rldi9udWxsID4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorLSAgICBjaG1vZCA2NDQgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICByZXNvbHZfY29uZj0iIgorICAgICBpZiBbIHgiJG5ld19kb21haW5fc2VhcmNoIiAhPSB4IF07IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAkbmV3X2RvbWFpbl9zZWFyY2ggPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZWxpZiBbIHgiJG5ld19kb21haW5fbmFtZSIgIT0geCBdOyB0aGVuCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIERIQ1AgJ0RvbWFpbiBOYW1lIE9wdGlvbicgaXMgcmVhbGx5IGp1c3QgYSBkb21haW4KKyAgICAgICAjIG5hbWUsIGFuZCB0aGF0IHRoaXMgcHJhY3RpY2Ugb2YgdXNpbmcgdGhlIGRvbWFpbiBuYW1lIG9wdGlvbiBhcworICAgICAgICMgYSBzZWFyY2ggcGF0aCBpcyBib3RoIG5vbnN0YW5kYXJkIGFuZCBkZXByZWNhdGVkLgorLSAgICAgIGVjaG8gc2VhcmNoICRuZXdfZG9tYWluX25hbWUgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX25hbWV9XG4iCisgICAgIGZpCisgICAgIGZvciBuYW1lc2VydmVyIGluICRuZXdfZG9tYWluX25hbWVfc2VydmVyczsgZG8KKy0gICAgICBlY2hvIG5hbWVzZXJ2ZXIgJG5hbWVzZXJ2ZXIgPj4vZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisrICAgICAgcmVzb2x2X2NvbmY9IiR7cmVzb2x2X2NvbmZ9bmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9XG4iCisgICAgIGRvbmUKKyAKKy0gICAgbXYgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGVsaWYgWyAieCR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30iICE9IHggXSA7IHRoZW4KKy0gICAgY2F0IC9kZXYvbnVsbCA+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2CistICAgIGNobW9kIDY0NCAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICByZXNvbHZfY29uZj0iIgorIAorICAgICBpZiBbICJ4JHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH0iICE9IHggXSA7IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAke25ld19kaGNwNl9kb21haW5fc2VhcmNofSA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZmkKKyAgICAgc2hvcHQgLXMgbm9jYXNlbWF0Y2ggCisgICAgIGZvciBuYW1lc2VydmVyIGluICR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30gOyBkbworQEAgLTU5LDExICs1NywxMSBAQCBtYWtlX3Jlc29sdl9jb25mKCkgeworICAgICAgIGVsc2UKKyAJem9uZV9pZD0KKyAgICAgICBmaQorLSAgICAgIGVjaG8gbmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9JHpvbmVfaWQgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKKysgICAgICByZXNvbHZfY29uZj0iJHtyZXNvbHZfY29uZn1uYW1lc2VydmVyICR7bmFtZXNlcnZlcn0kem9uZV9pZFxuIgorICAgICBkb25lCisgICAgIHNob3B0IC11IG5vY2FzZW1hdGNoIAorIAorLSAgICBtdiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NiAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGZpCisgfQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhNjY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCistLS0gY2xpZW50L3NjcmlwdHMvYnNkb3MKKysrKyBjbGllbnQvc2NyaXB0cy9ic2RvcworQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvZnJlZWJzZAorKysrIGNsaWVudC9zY3JpcHRzL2ZyZWVic2QKK0BAIC01Nyw2ICs1NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL2xpbnV4CisrKysgY2xpZW50L3NjcmlwdHMvbGludXgKK0BAIC02OSw2ICs2OSwxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL25ldGJzZAorKysrIGNsaWVudC9zY3JpcHRzL25ldGJzZAorQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvb3BlbmJzZAorKysrIGNsaWVudC9zY3JpcHRzL29wZW5ic2QKK0BAIC00Nyw2ICs0NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL3NvbGFyaXMKKysrKyBjbGllbnQvc2NyaXB0cy9zb2xhcmlzCitAQCAtNDcsNiArNDcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4LWV4dGVybmFsLWJpbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOTFmZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworMTEvMzAvMjAxMAorLS13aXRoLWxpYmJpbmQ9UEFUSCBpcyBhdmFpbGFibGUgYnV0IG5vdCB1c2VkIGJ5IE1ha2VmaWxlLAordGhpcyBwYXRjaCBpcyB0byBhbGxvdyBidWlsZGluZyB3aXRoIGV4dGVybmFsIGJpbmQKKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBkaGNwLTQuMy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9NYWtlZmlsZS5hbQorQEAgLTI1LDcgKzI1LDcgQEAgRVhUUkFfRElTVCA9IFJFTE5PVEVTIExJQ0VOU0UgXAorIAkgICAgIGJpbmQvTWFrZWZpbGUgYmluZC9iaW5kLnRhci5neiBiaW5kL3ZlcnNpb24udG1wIFwKKyAJICAgICBjb21tb24vdGVzdHMvQXRmZmlsZSBzZXJ2ZXIvdGVzdHMvQXRmZmlsZQorIAorLVNVQkRJUlMgPSBiaW5kIGluY2x1ZGVzIHRlc3RzIGNvbW1vbiBkc3Qgb21hcGlwIGNsaWVudCBkaGNwY3RsIHJlbGF5IHNlcnZlcgorK1NVQkRJUlMgPSBpbmNsdWRlcyB0ZXN0cyBjb21tb24gZHN0IG9tYXBpcCBjbGllbnQgZGhjcGN0bCByZWxheSBzZXJ2ZXIKKyAKKyBub2Jhc2VfaW5jbHVkZV9IRUFERVJTID0gZGhjcGN0bC9kaGNwY3RsLmgKKyAKK0luZGV4OiBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9jbGllbnQvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorQEAgLTQsOCArNCw4IEBAIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYworIAkJICAgc2NyaXB0cy9ic2RvcyBzY3JpcHRzL2ZyZWVic2Qgc2NyaXB0cy9saW51eCBzY3JpcHRzL21hY29zIFwKKyAJCSAgIHNjcmlwdHMvbmV0YnNkIHNjcmlwdHMvbmV4dHN0ZXAgc2NyaXB0cy9vcGVuYnNkIFwKKyAJCSAgIHNjcmlwdHMvc29sYXJpcyBzY3JpcHRzL29wZW53cnQKKy1kaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmRucy5hIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrZGhjbGllbnRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgXAorKwkJICQobGliYmluZCkvbGliZG5zLmEgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgbWFuX01BTlMgPSBkaGNsaWVudC44IGRoY2xpZW50LXNjcmlwdC44IGRoY2xpZW50LmNvbmYuNSBkaGNsaWVudC5sZWFzZXMuNQorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorSW5kZXg6IGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCitAQCAtNTY2LDYgKzU2Niw3IEBAIG5vKQorIAlsaWJiaW5kPSIkdXNlX2xpYmJpbmQiCisgCTs7CisgZXNhYworK0FDX1NVQlNUKFtsaWJiaW5kXSkKKyAKKyAjIE9wZW5MREFQIHN1cHBvcnQuCisgQUNfQVJHX1dJVEgobGRhcCwKK0luZGV4OiBkaGNwLTQuMy4wL2RoY3BjdGwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvZGhjcGN0bC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvZGhjcGN0bC9NYWtlZmlsZS5hbQorQEAgLTYsMTIgKzYsMTIgQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgb21zaGVsbF9TT1VSQ0VTID0gb21zaGVsbC5jCisgb21zaGVsbF9MREFERCA9IGxpYmRoY3BjdGwuYSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgICAuLi9iaW5kL2xpYi9saWJpcnMuYSAuLi9iaW5kL2xpYi9saWJkbnMuYSBcCistCSAgICAgICAgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKysJICAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKwkgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIAorIGxpYmRoY3BjdGxfYV9TT1VSQ0VTID0gZGhjcGN0bC5jIGNhbGxiYWNrLmMgcmVtb3RlLmMKKyAKKyBjbHRlc3RfU09VUkNFUyA9IGNsdGVzdC5jCisgY2x0ZXN0X0xEQUREID0gbGliZGhjcGN0bC5hIC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkgICAgICAgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLSAgICAgICAgICAgICAgIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCSAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKyAgICAgICAgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorSW5kZXg6IGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMTAsNiArMTAsNiBAQCBtYW5fTUFOUyA9IG9tYXBpLjMKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKKyBzdnRlc3RfU09VUkNFUyA9IHRlc3QuYworLXN2dGVzdF9MREFERCA9IGxpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKytzdnRlc3RfTERBREQgPSBsaWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCisrCQkkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3JlbGF5L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL3JlbGF5L01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTMsOCArMyw4IEBAIEFNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3QKKyBzYmluX1BST0dSQU1TID0gZGhjcmVsYXkKKyBkaGNyZWxheV9TT1VSQ0VTID0gZGhjcmVsYXkuYworIGRoY3JlbGF5X0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCQkgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCQkgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKKysJCSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyBtYW5fTUFOUyA9IGRoY3JlbGF5LjgKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTE0LDggKzE0LDggQEAgZGhjcGRfU09VUkNFUyA9IGRoY3BkLmMgZGhjcC5jIGJvb3RwLmMgYworIAorIGRoY3BkX0NGTEFHUyA9ICQoTERBUF9DRkxBR1MpCisgZGhjcGRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgLi4vZGhjcGN0bC9saWJkaGNwY3RsLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkgICAgICAuLi9iaW5kL2xpYi9saWJkbnMuYSAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorKwkgICAgICAuLi9kaGNwY3RsL2xpYmRoY3BjdGwuYSAkKGxpYmJpbmQpL2xpYmlycy5hIFwKKysJICAgICAgJChsaWJiaW5kKS9saWJkbnMuYSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKKyBtYW5fTUFOUyA9IGRoY3BkLjggZGhjcGQuY29uZi41IGRoY3BkLmxlYXNlcy41CisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGU3NWEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitSZWJhc2UgdG8gNC4zLjEKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9NYWtlZmlsZS5hbSAgfCA2ICsrKystLQorIGNvbW1vbi9NYWtlZmlsZS5hbSAgfCAyICstCisgZGhjcGN0bC9NYWtlZmlsZS5hbSB8IDIgKysKKyBkc3QvTWFrZWZpbGUuYW0gICAgIHwgMiArLQorIG9tYXBpcC9NYWtlZmlsZS5hbSAgfCAyICsrCisgcmVsYXkvTWFrZWZpbGUuYW0gICB8IDIgKy0KKyBzZXJ2ZXIvTWFrZWZpbGUuYW0gIHwgMiArLQorIDcgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NsaWVudC9NYWtlZmlsZS5hbSBiL2NsaWVudC9NYWtlZmlsZS5hbQoraW5kZXggODQxMTk2MC4uMTc0MGY3MiAxMDA2NDQKKy0tLSBhL2NsaWVudC9NYWtlZmlsZS5hbQorKysrIGIvY2xpZW50L01ha2VmaWxlLmFtCitAQCAtNCw2ICs0LDggQEAKKyAjIHByb2R1Y3Rpb24gY29kZS4gU2FkbHksIHdlIGFyZSBub3QgdGhlcmUgeWV0LgorIFNVQkRJUlMgPSAuIHRlc3RzCisgCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKysKKyBkaXN0X3N5c2NvbmZfREFUQSA9IGRoY2xpZW50LmNvbmYuZXhhbXBsZQorIHNiaW5fUFJPR1JBTVMgPSBkaGNsaWVudAorIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYyBkaGM2LmMgXAorQEAgLTE3LDggKzE5LDggQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgZGhjbGllbnQubzogZGhjbGllbnQuYworIAkkKENPTVBJTEUpIC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCistCQkgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLWMgZGhjbGllbnQuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGNsaWVudC5jCisgCisgZGhjNi5vOiBkaGM2LmMKKyAJJChDT01QSUxFKSAtRENMSUVOVF9QQVRIPSciUEFUSD0kKHNiaW5kaXIpOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIicgXAorLQkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jIGRoYzYuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGM2LmMKK2RpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuYW0gYi9jb21tb24vTWFrZWZpbGUuYW0KK2luZGV4IGVkZGVmMDUuLjVjZTA0NWYgMTAwNjQ0CistLS0gYS9jb21tb24vTWFrZWZpbGUuYW0KKysrKyBiL2NvbW1vbi9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtSS4uIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMgLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisgQU1fQ0ZMQUdTID0gJChMREFQX0NGTEFHUykKKyAKKyBub2luc3RfTElCUkFSSUVTID0gbGliZGhjcC5hCitkaWZmIC0tZ2l0IGEvZGhjcGN0bC9NYWtlZmlsZS5hbSBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK2luZGV4IDI5ODdhNTMuLmNkNzJkNzUgMTAwNjQ0CistLS0gYS9kaGNwY3RsL01ha2VmaWxlLmFtCisrKysgYi9kaGNwY3RsL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikKKysKKyBiaW5fUFJPR1JBTVMgPSBvbXNoZWxsCisgbGliX0xJQlJBUklFUyA9IGxpYmRoY3BjdGwuYQorIG5vaW5zdF9QUk9HUkFNUyA9IGNsdGVzdAorZGlmZiAtLWdpdCBhL2RzdC9NYWtlZmlsZS5hbSBiL2RzdC9NYWtlZmlsZS5hbQoraW5kZXggODkzN2ZlOC4uYTE0Nzk4YiAxMDA2NDQKKy0tLSBhL2RzdC9NYWtlZmlsZS5hbQorKysrIGIvZHN0L01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1BTV9DUFBGTEFHUyA9IC1ETUlOSVJFU19MSUIgLURITUFDX01ENQorK0FNX0NQUEZMQUdTID0gLURNSU5JUkVTX0xJQiAtREhNQUNfTUQ1IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGxpYl9MSUJSQVJJRVMgPSBsaWJkc3QuYQorIAorZGlmZiAtLWdpdCBhL29tYXBpcC9NYWtlZmlsZS5hbSBiL29tYXBpcC9NYWtlZmlsZS5hbQoraW5kZXggNTA3NDQ3OS4uOWMwZmFiMyAxMDA2NDQKKy0tLSBhL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGIvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworKworIGxpYl9MSUJSQVJJRVMgPSBsaWJvbWFwaS5hCisgbm9pbnN0X1BST0dSQU1TID0gc3Z0ZXN0CisgCitkaWZmIC0tZ2l0IGEvcmVsYXkvTWFrZWZpbGUuYW0gYi9yZWxheS9NYWtlZmlsZS5hbQoraW5kZXggZWM3MmEzMS4uZjg0MjA3MSAxMDA2NDQKKy0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCisrKysgYi9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3JlbGF5CisgZGhjcmVsYXlfU09VUkNFUyA9IGRoY3JlbGF5LmMKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK2luZGV4IGE0NDZmMGIuLmQwYjg3M2EgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBACisgIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KKyBTVUJESVJTID0gLiB0ZXN0cworIAorLUFNX0NQUEZMQUdTID0gLUkuLiAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGRpc3Rfc3lzY29uZl9EQVRBID0gZGhjcGQuY29uZi5leGFtcGxlCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3BkCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTEwYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBUaHUgRmViIDIgMjM6NTk6MTEgMjAxMiArMDIwMAorCitGcm9tIDQuMi4wIGZpbmFsIHJlbGVhc2UsIC1sY3J5cHRvIGNoZWNrIHdhcyByZW1vdmVkIGFuZCB3ZSBjb21waWxlIHN0YXRpYyBsaWJyYXJpZXMKK2Zyb20gYmluZCB0aGF0IGFyZSBsaW5rZWQgdG8gbGliY3J5cHRvLiBUaGlzIGlzIHdoeSBpIGFkZGVkIGEgcGF0Y2ggaW4gb3JkZXIgdG8gYWRkCistbGNyeXB0byB0byBMSUJTLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGRoY3AtNC4yLjMtUDItcjAvZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMi4zLVAyLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDItMDIgMTg6MDQ6MjAuODQzMDIzMTk2ICswMjAwCisrKysgZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMJMjAxMi0wMi0wMiAxNzo1ODoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NTYsNiArNDU2LDEwIEBACisgIyBMb29rIGZvciBvcHRpb25hbCBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoc3lzL3NvY2tldC5oIG5ldC9pZl9kbC5oIG5ldC9pZjYuaCByZWdleC5oKQorIAorKyMgZmluZCBhbiBNRDUgbGlicmFyeQorK0FDX1NFQVJDSF9MSUJTKE1ENV9Jbml0LCBbY3J5cHRvXSkKKytBQ19TRUFSQ0hfTElCUyhNRDVJbml0LCBbY3J5cHRvXSkKKysKKyAjIFNvbGFyaXMgbmVlZHMgc29tZSBsaWJyYXJpZXMgZm9yIGZ1bmN0aW9ucworIEFDX1NFQVJDSF9MSUJTKHNvY2tldCwgW3NvY2tldF0pCisgQUNfU0VBUkNIX0xJQlMoaW5ldF9udG9hLCBbbnNsXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRkNmE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCkBAIC0wLDAgKzEsMTc2IEBACitGb3VuZCB0aGlzIHBhdGNoIGhlcmU6CitodHRwczovL2xpc3RzLmlzYy5vcmcvcGlwZXJtYWlsL2RoY3AtdXNlcnMvMjAxMS1KYW51YXJ5LzAxMjkxMC5odG1sCisKK2FuZCBtYWRlIHNvbWUgYWRqdXN0bWVudHMvdXBkYXRlcyB0byBtYWtlIGl0IHdvcmsgd2l0aCB0aGlzIHZlcnNpb24uCitXYXNuJ3QgYWJsZSB0byBmaW5kIHRoYXQgd2h5IHRoaXMgcGF0Y2ggd2FzIG5vdCBhY2NlcHRlZCBieSBJU0MgREhDUCBkZXZlbG9wZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0gZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eC5vcmlnCTIwMTMtMDktMDQgMTI6MjI6NTUuMDAwMDAwMDAwICswNTAwCisrKysgZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eAkyMDEzLTA5LTA0IDEyOjUyOjE5LjA2ODc2MTUxOCArMDUwMAorQEAgLTEwMywxNyArMTAzLDExIEBACisgaWYgWyB4JG9sZF9icm9hZGNhc3RfYWRkcmVzcyAhPSB4IF07IHRoZW4KKyAgIG9sZF9icm9hZGNhc3RfYXJnPSJicm9hZGNhc3QgJG9sZF9icm9hZGNhc3RfYWRkcmVzcyIKKyBmaQorLWlmIFsgeCRuZXdfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBuZXdfc3VibmV0X2FyZz0ibmV0bWFzayAkbmV3X3N1Ym5ldF9tYXNrIgorLWZpCistaWYgWyB4JG9sZF9zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KKy0gIG9sZF9zdWJuZXRfYXJnPSJuZXRtYXNrICRvbGRfc3VibmV0X21hc2siCistZmkKKy1pZiBbIHgkYWxpYXNfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBhbGlhc19zdWJuZXRfYXJnPSJuZXRtYXNrICRhbGlhc19zdWJuZXRfbWFzayIKKytpZiBbIC1uICIkbmV3X3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIG5ld19tYXNrPSIvJG5ld19zdWJuZXRfbWFzayIKKyBmaQorLWlmIFsgeCRuZXdfaW50ZXJmYWNlX210dSAhPSB4IF07IHRoZW4KKy0gIG10dV9hcmc9Im10dSAkbmV3X2ludGVyZmFjZV9tdHUiCisraWYgWyAtbiAiJGFsaWFzX3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIGFsaWFzX21hc2s9Ii8kYWxpYXNfc3VibmV0X21hc2siCisgZmkKKyBpZiBbIHgkSUZfTUVUUklDICE9IHggXTsgdGhlbgorICAgbWV0cmljX2FyZz0ibWV0cmljICRJRl9NRVRSSUMiCitAQCAtMTI3LDkgKzEyMSw5IEBACisgaWYgWyB4JHJlYXNvbiA9IHhQUkVJTklUIF07IHRoZW4KKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorICAgICAjIEJyaW5nIGRvd24gYWxpYXMgaW50ZXJmYWNlLiBJdHMgcm91dGVzIHdpbGwgZGlzYXBwZWFyIHRvby4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSAwIHVwCisrICAke2lwfSBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IHVwCisgCisgICAjIFdlIG5lZWQgdG8gZ2l2ZSB0aGUga2VybmVsIHNvbWUgdGltZSB0byBnZXQgdGhlIGludGVyZmFjZSB1cC4KKyAgIHNsZWVwIDEKK0BAIC0xNTYsMjUgKzE1MCwzMCBAQAorICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXSAmJiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF0gJiYgXAorIAkJWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCRvbGRfaXBfYWRkcmVzcyBdOyB0aGVuCisgICAgICMgUG9zc2libGUgbmV3IGFsaWFzLiBSZW1vdmUgb2xkIGFsaWFzLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdICYmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4JG5ld19pcF9hZGRyZXNzIF07IHRoZW4KKyAgICAgIyBJUCBhZGRyZXNzIGNoYW5nZWQuIEJyaW5naW5nIGRvd24gdGhlIGludGVyZmFjZSB3aWxsIGRlbGV0ZSBhbGwgcm91dGVzLAorICAgICAjIGFuZCBjbGVhciB0aGUgQVJQIGNhY2hlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgMCBkb3duCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKyAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgPSB4IF0gfHwgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHgkbmV3X2lwX2FkZHJlc3MgXSB8fCBcCisgICAgICBbIHgkcmVhc29uID0geEJPVU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRUJPT1QgXTsgdGhlbgorIAorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9CisrICAgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAgICMgc2V0IE1UVQorKyAgICAgICR7aXB9IGxpbmsgc2V0IGRldiAke2ludGVyZmFjZX0gbXR1ICR7bmV3X2ludGVyZmFjZV9tdHV9CisrICAgIGZpCisgICAgICMgQWRkIGEgbmV0d29yayByb3V0ZSB0byB0aGUgY29tcHV0ZWQgbmV0d29yayBhZGRyZXNzLgorICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICBpZiBbICJ4JG5ld19zdWJuZXRfbWFzayIgPSAieDI1NS4yNTUuMjU1LjI1NSIgXSA7IHRoZW4KKy0Jcm91dGUgYWRkIC1ob3N0ICRyb3V0ZXIgZGV2ICRpbnRlcmZhY2UKKysgICAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke3JvdXRlcn0gZGV2ICRpbnRlcmZhY2UgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgZmkKKy0gICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkcm91dGVyICRtZXRyaWNfYXJnIGRldiAkaW50ZXJmYWNlCisrICAgICAgJHtpcH0gLTQgcm91dGUgYWRkIGRlZmF1bHQgdmlhICR7cm91dGVyfSBkZXYgJHtpbnRlcmZhY2V9IFwKKysgICAgICAgICR7bWV0cmljX2FyZ30gPi9kZXYvbnVsbCAyPiYxCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgIyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGFkZHJlc3MsIGhhdmUgd2UgY2hhbmdlZCBvdGhlciBvcHRpb25zICAgICAgICAgICAKK0BAIC0xODIsMjEgKzE4MSwyMyBAQAorICAgICBpZiBbIHgkbmV3X3JvdXRlcnMgIT0geCBdICYmIFsgeCRuZXdfcm91dGVycyAhPSB4JG9sZF9yb3V0ZXJzIF0gOyB0aGVuCisgICAgICAgIyBpZiB3ZSd2ZSBjaGFuZ2VkIHJvdXRlcnMgZGVsZXRlIHRoZSBvbGQgYW5kIGFkZCB0aGUgbmV3LgorICAgICAgIGZvciByb3V0ZXIgaW4gJG9sZF9yb3V0ZXJzOyBkbworLSAgICAgICAgcm91dGUgZGVsIGRlZmF1bHQgZ3cgJHJvdXRlcgorKyAgICAgICAgJHtpcH0gLTQgcm91dGUgZGVsZXRlIGRlZmF1bHQgdmlhICR7cm91dGVyfQorICAgICAgIGRvbmUKKyAgICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQkgIHJvdXRlIGFkZCAtaG9zdCAkcm91dGVyIGRldiAkaW50ZXJmYWNlCistCWZpCistCXJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysJICAgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKysJICAgIGZpCisrICAgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgICAke21ldHJpY19hcmd9ID4vZGV2L251bGwgMj4mMQorICAgICAgIGRvbmUKKyAgICAgZmkKKyAgIGZpCisgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOworICAgIHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowIGluZXQgJGFsaWFzX2lwX2FkZHJlc3MgJGFsaWFzX3N1Ym5ldF9hcmcKKy0gICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzICRpbnRlcmZhY2U6MAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSR7YWxpYXNfbWFza30gXAorKyAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSBkZXYgJHtpbnRlcmZhY2V9ID4vZGV2L251bGwgMj4mMQorICAgZmkKKyAgIG1ha2VfcmVzb2x2X2NvbmYKKyAgIGV4aXRfd2l0aF9ob29rcyAwCitAQCAtMjA2LDQyICsyMDcsNDkgQEAKKyAgICB8fCBbIHgkcmVhc29uID0geFNUT1AgXTsgdGhlbgorICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgVHVybiBvZmYgYWxpYXMgaW50ZXJmYWNlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgU2h1dCBkb3duIGludGVyZmFjZSwgd2hpY2ggd2lsbCBkZWxldGUgcm91dGVzIGFuZCBjbGVhciBhcnAgY2FjaGUuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAwIGRvd24KKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQorICAgZmkKKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZworLSAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgJGludGVyZmFjZTowCisrICAgICR7aXB9IC00IGFkZHIgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30ke2FsaWFzX25ldHdvcmtfYXJnfSBcCisrICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICBmaQorICAgZXhpdF93aXRoX2hvb2tzIDAKKyBmaQorIAorIGlmIFsgeCRyZWFzb24gPSB4VElNRU9VVCBdOyB0aGVuCisgICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICBmaQorKyAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKysgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAjIHNldCBNVFUKKysgICAgaXAgbGluayBzZXQgZGV2ICR7aW50ZXJmYWNlfSBtdHUgJHtuZXdfaW50ZXJmYWNlX210dX0KKyAgIGZpCistICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKyAgIHNldCAkbmV3X3JvdXRlcnMKKyAgIGlmIHBpbmcgLXEgLWMgMSAkMTsgdGhlbgorICAgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgXAorIAkJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MCBpbmV0ICRhbGlhc19pcF9hZGRyZXNzICRhbGlhc19zdWJuZXRfYXJnCistICAgICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzIGRldiAkaW50ZXJmYWNlOjAKKysgICAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19tYXNrfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICAgIGZpCisgICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbworICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQlyb3V0ZSBhZGQgLWhvc3QgJHJvdXRlciBkZXYgJGludGVyZmFjZQorKwkgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKyAgICAgICBmaQorLSAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgJHttZXRyaWNfYXJnfSA+L2Rldi9udWxsIDI+JjEKKyAgICAgZG9uZQorICAgICBtYWtlX3Jlc29sdl9jb25mCisgICAgIGV4aXRfd2l0aF9ob29rcyAwCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgorKyAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9CisgICBleGl0X3dpdGhfaG9va3MgMQorIGZpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGEwNWZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGRoY3AuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjVhMjg0ODc1ZGQyYzEyZGRkMzg4NDE2ZDY5MTU2YTY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYyNDZjOWIzNTg3NTlmNmNkY2M0NTEwNGNhYWY3NmU3MzJhMjExZGJiYmJmNjRhMjFmNDk5YzhkYjEyOTgxNjUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXJlbGF5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTYxZjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheQpAQCAtMCwwICsxLDEyIEBACisjIERlZmF1bHRzIGZvciBkaGNwLXJlbGF5IGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaGNwLXJlbGF5CisKKyMgV2hhdCBzZXJ2ZXJzIHNob3VsZCB0aGUgREhDUCByZWxheSBmb3J3YXJkIHJlcXVlc3RzIHRvPworIyBlLmc6IFNFUlZFUlM9IjE5Mi4xNjguMC4xIgorU0VSVkVSUz0iIgorCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1AgcmVsYXkgKGRocmVsYXkpIHNlcnZlIERIQ1AgcmVxdWVzdHM/CitJTlRFUkZBQ0VTPSIiCisKKyMgQWRkaXRpb25hbCBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgREhDUCByZWxheSBkYWVtb24/CitPUFRJT05TPSIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RlZmF1bHQtc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODVkMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlcgpAQCAtMCwwICsxLDcgQEAKKyMgRGVmYXVsdHMgZm9yIGRoY3AgaW5pdHNjcmlwdAorIyBzb3VyY2VkIGJ5IC9ldGMvaW5pdC5kL2RoY3Atc2VydmVyCisjIGluc3RhbGxlZCBhdCAvZXRjL2RlZmF1bHQvZGhjcC1zZXJ2ZXIgYnkgdGhlIG1haW50YWluZXIgc2NyaXB0cworCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1Agc2VydmVyIChkaGNwZCkgc2VydmUgREhDUCByZXF1ZXN0cz8KKyMgICAgICAgU2VwYXJhdGUgbXVsdGlwbGUgaW50ZXJmYWNlcyB3aXRoIHNwYWNlcywgZS5nLiAiZXRoMCBldGgxIi4KK0lOVEVSRkFDRVM9IiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNmRjZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29uZmlndXJhdGlvbiBmaWxlIGZvciAvc2Jpbi9kaGNsaWVudCwgd2hpY2ggaXMgaW5jbHVkZWQgaW4gRGViaWFuJ3MKKyMJZGhjcDMtY2xpZW50IHBhY2thZ2UuCisjCisjIFRoaXMgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBkaGNsaWVudC4gU2VlIGRoY2xpZW50LmNvbmYncworIwltYW4gcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZQorIwlhbmQgYSBtb3JlIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgcGFyYW1ldGVycyB1bmRlcnN0b29kIGJ5CisjCWRoY2xpZW50LgorIworIyBOb3JtYWxseSwgaWYgdGhlIERIQ1Agc2VydmVyIHByb3ZpZGVzIHJlYXNvbmFibGUgaW5mb3JtYXRpb24gYW5kIGRvZXMKKyMJbm90IGxlYXZlIGFueXRoaW5nIG91dCAobGlrZSB0aGUgZG9tYWluIG5hbWUsIGZvciBleGFtcGxlKSwgdGhlbgorIwlmZXcgY2hhbmdlcyBtdXN0IGJlIG1hZGUgdG8gdGhpcyBmaWxlLCBpZiBhbnkuCisjCisKKyNzZW5kIGhvc3QtbmFtZSAiYW5kYXJlLmZ1Z3VlLmNvbSI7Cisjc2VuZCBkaGNwLWNsaWVudC1pZGVudGlmaWVyIDE6MDphMDoyNDphYjpmYjo5YzsKKyNzZW5kIGRoY3AtbGVhc2UtdGltZSAzNjAwOworI3N1cGVyc2VkZSBkb21haW4tbmFtZSAiZnVndWUuY29tIGhvbWUudml4LmNvbSI7CisjcHJlcGVuZCBkb21haW4tbmFtZS1zZXJ2ZXJzIDEyNy4wLjAuMTsKK3JlcXVlc3Qgc3VibmV0LW1hc2ssIGJyb2FkY2FzdC1hZGRyZXNzLCB0aW1lLW9mZnNldCwgcm91dGVycywKKwlkb21haW4tbmFtZSwgZG9tYWluLW5hbWUtc2VydmVycywgaG9zdC1uYW1lLAorCW5ldGJpb3MtbmFtZS1zZXJ2ZXJzLCBuZXRiaW9zLXNjb3BlOworI3JlcXVpcmUgc3VibmV0LW1hc2ssIGRvbWFpbi1uYW1lLXNlcnZlcnM7CisjdGltZW91dCA2MDsKKyNyZXRyeSA2MDsKKyNyZWJvb3QgMTA7Cisjc2VsZWN0LXRpbWVvdXQgNTsKKyNpbml0aWFsLWludGVydmFsIDI7Cisjc2NyaXB0ICIvZXRjL2RoY3AzL2RoY2xpZW50LXNjcmlwdCI7CisjbWVkaWEgIi1saW5rMCAtbGluazEgLWxpbmsyIiwgImxpbmswIGxpbmsxIjsKKyNyZWplY3QgMTkyLjMzLjEzNy4yMDk7CisKKyNhbGlhcyB7CisjICBpbnRlcmZhY2UgImV0aDAiOworIyAgZml4ZWQtYWRkcmVzcyAxOTIuNS41LjIxMzsKKyMgIG9wdGlvbiBzdWJuZXQtbWFzayAyNTUuMjU1LjI1NS4yNTU7CisjfQorCisjbGVhc2UgeworIyAgaW50ZXJmYWNlICJldGgwIjsKKyMgIGZpeGVkLWFkZHJlc3MgMTkyLjMzLjEzNy4yMDA7CisjICBtZWRpdW0gImxpbmswIGxpbmsxIjsKKyMgIG9wdGlvbiBob3N0LW5hbWUgImFuZGFyZS5zd2lmdG1lZGlhLmNvbSI7CisjICBvcHRpb24gc3VibmV0LW1hc2sgMjU1LjI1NS4yNTUuMDsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxOTIuMzMuMTM3LjI1NTsKKyMgIG9wdGlvbiByb3V0ZXJzIDE5Mi4zMy4xMzcuMjUwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgMTI3LjAuMC4xOworIyAgcmVuZXcgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICByZWJpbmQgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICBleHBpcmUgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMWMwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYKQEAgLTAsMCArMSwxMDggQEAKKyMKKyMgU2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgSVNDIGRoY3BkIGZvciBEZWJpYW4KKyMKKyMgJElkOiBkaGNwZC5jb25mLHYgMS4xLjEuMSAyMDAyLzA1LzIxIDAwOjA3OjQ0IHBlbG95IEV4cCAkCisjCisKKyMgVGhlIGRkbnMtdXBkYXRlcy1zdHlsZSBwYXJhbWV0ZXIgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIHNlcnZlciB3aWxsCisjIGF0dGVtcHQgdG8gZG8gYSBETlMgdXBkYXRlIHdoZW4gYSBsZWFzZSBpcyBjb25maXJtZWQuIFdlIGRlZmF1bHQgdG8gdGhlCisjIGJlaGF2aW9yIG9mIHRoZSB2ZXJzaW9uIDIgcGFja2FnZXMgKCdub25lJywgc2luY2UgREhDUCB2MiBkaWRuJ3QKKyMgaGF2ZSBzdXBwb3J0IGZvciBERE5TLikKK2RkbnMtdXBkYXRlLXN0eWxlIG5vbmU7CisKKyMgb3B0aW9uIGRlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgc3VwcG9ydGVkIG5ldHdvcmtzLi4uCitvcHRpb24gZG9tYWluLW5hbWUgImV4YW1wbGUub3JnIjsKK29wdGlvbiBkb21haW4tbmFtZS1zZXJ2ZXJzIG5zMS5leGFtcGxlLm9yZywgbnMyLmV4YW1wbGUub3JnOworCitkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworbWF4LWxlYXNlLXRpbWUgNzIwMDsKKworIyBJZiB0aGlzIERIQ1Agc2VydmVyIGlzIHRoZSBvZmZpY2lhbCBESENQIHNlcnZlciBmb3IgdGhlIGxvY2FsCisjIG5ldHdvcmssIHRoZSBhdXRob3JpdGF0aXZlIGRpcmVjdGl2ZSBzaG91bGQgYmUgdW5jb21tZW50ZWQuCisjYXV0aG9yaXRhdGl2ZTsKKworIyBVc2UgdGhpcyB0byBzZW5kIGRoY3AgbG9nIG1lc3NhZ2VzIHRvIGEgZGlmZmVyZW50IGxvZyBmaWxlICh5b3UgYWxzbworIyBoYXZlIHRvIGhhY2sgc3lzbG9nLmNvbmYgdG8gY29tcGxldGUgdGhlIHJlZGlyZWN0aW9uKS4KK2xvZy1mYWNpbGl0eSBsb2NhbDc7CisKKyMgTm8gc2VydmljZSB3aWxsIGJlIGdpdmVuIG9uIHRoaXMgc3VibmV0LCBidXQgZGVjbGFyaW5nIGl0IGhlbHBzIHRoZSAKKyMgREhDUCBzZXJ2ZXIgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayB0b3BvbG9neS4KKworI3N1Ym5ldCAxMC4xNTIuMTg3LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHsKKyN9CisKKyMgVGhpcyBpcyBhIHZlcnkgYmFzaWMgc3VibmV0IGRlY2xhcmF0aW9uLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC4yNTQuMjM5LjEwIDEwLjI1NC4yMzkuMjA7CisjICBvcHRpb24gcm91dGVycyBydHItMjM5LTAtMS5leGFtcGxlLm9yZywgcnRyLTIzOS0wLTIuZXhhbXBsZS5vcmc7CisjfQorCisjIFRoaXMgZGVjbGFyYXRpb24gYWxsb3dzIEJPT1RQIGNsaWVudHMgdG8gZ2V0IGR5bmFtaWMgYWRkcmVzc2VzLAorIyB3aGljaCB3ZSBkb24ndCByZWFsbHkgcmVjb21tZW5kLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMzIgbmV0bWFzayAyNTUuMjU1LjI1NS4yMjQgeworIyAgcmFuZ2UgZHluYW1pYy1ib290cCAxMC4yNTQuMjM5LjQwIDEwLjI1NC4yMzkuNjA7CisjICBvcHRpb24gYnJvYWRjYXN0LWFkZHJlc3MgMTAuMjU0LjIzOS4zMTsKKyMgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMzktMzItMS5leGFtcGxlLm9yZzsKKyN9CisKKyMgQSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBmb3IgYW4gaW50ZXJuYWwgc3VibmV0LgorI3N1Ym5ldCAxMC41LjUuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC41LjUuMjYgMTAuNS41LjMwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgbnMxLmludGVybmFsLmV4YW1wbGUub3JnOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lICJpbnRlcm5hbC5leGFtcGxlLm9yZyI7CisjICBvcHRpb24gcm91dGVycyAxMC41LjUuMTsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxMC41LjUuMzE7CisjICBkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworIyAgbWF4LWxlYXNlLXRpbWUgNzIwMDsKKyN9CisKKyMgSG9zdHMgd2hpY2ggcmVxdWlyZSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjYW4gYmUgbGlzdGVkIGluCisjIGhvc3Qgc3RhdGVtZW50cy4gICBJZiBubyBhZGRyZXNzIGlzIHNwZWNpZmllZCwgdGhlIGFkZHJlc3Mgd2lsbCBiZQorIyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKGlmIHBvc3NpYmxlKSwgYnV0IHRoZSBob3N0LXNwZWNpZmljIGluZm9ybWF0aW9uCisjIHdpbGwgc3RpbGwgY29tZSBmcm9tIHRoZSBob3N0IGRlY2xhcmF0aW9uLgorCisjaG9zdCBwYXNzYWNhZ2xpYSB7CisjICBoYXJkd2FyZSBldGhlcm5ldCAwOjA6YzA6NWQ6YmQ6OTU7CisjICBmaWxlbmFtZSAidm11bml4LnBhc3NhY2FnbGlhIjsKKyMgIHNlcnZlci1uYW1lICJ0b2NjYXRhLmZ1Z3VlLmNvbSI7CisjfQorCisjIEZpeGVkIElQIGFkZHJlc3NlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgZm9yIGhvc3RzLiAgIFRoZXNlIGFkZHJlc3NlcworIyBzaG91bGQgbm90IGFsc28gYmUgbGlzdGVkIGFzIGJlaW5nIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBhc3NpZ25tZW50LgorIyBIb3N0cyBmb3Igd2hpY2ggZml4ZWQgSVAgYWRkcmVzc2VzIGhhdmUgYmVlbiBzcGVjaWZpZWQgY2FuIGJvb3QgdXNpbmcKKyMgQk9PVFAgb3IgREhDUC4gICBIb3N0cyBmb3Igd2hpY2ggbm8gZml4ZWQgYWRkcmVzcyBpcyBzcGVjaWZpZWQgY2FuIG9ubHkKKyMgYmUgYm9vdGVkIHdpdGggREhDUCwgdW5sZXNzIHRoZXJlIGlzIGFuIGFkZHJlc3MgcmFuZ2Ugb24gdGhlIHN1Ym5ldAorIyB0byB3aGljaCBhIEJPT1RQIGNsaWVudCBpcyBjb25uZWN0ZWQgd2hpY2ggaGFzIHRoZSBkeW5hbWljLWJvb3RwIGZsYWcKKyMgc2V0LgorI2hvc3QgZmFudGFzaWEgeworIyAgaGFyZHdhcmUgZXRoZXJuZXQgMDg6MDA6MDc6MjY6YzA6YTU7CisjICBmaXhlZC1hZGRyZXNzIGZhbnRhc2lhLmZ1Z3VlLmNvbTsKKyN9CisKKyMgWW91IGNhbiBkZWNsYXJlIGEgY2xhc3Mgb2YgY2xpZW50cyBhbmQgdGhlbiBkbyBhZGRyZXNzIGFsbG9jYXRpb24KKyMgYmFzZWQgb24gdGhhdC4gICBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBhIGNhc2Ugd2hlcmUgYWxsIGNsaWVudHMKKyMgaW4gYSBjZXJ0YWluIGNsYXNzIGdldCBhZGRyZXNzZXMgb24gdGhlIDEwLjE3LjIyNC8yNCBzdWJuZXQsIGFuZCBhbGwKKyMgb3RoZXIgY2xpZW50cyBnZXQgYWRkcmVzc2VzIG9uIHRoZSAxMC4wLjI5LzI0IHN1Ym5ldC4KKworI2NsYXNzICJmb28iIHsKKyMgIG1hdGNoIGlmIHN1YnN0cmluZyAob3B0aW9uIHZlbmRvci1jbGFzcy1pZGVudGlmaWVyLCAwLCA0KSA9ICJTVU5XIjsKKyN9CisKKyNzaGFyZWQtbmV0d29yayAyMjQtMjkgeworIyAgc3VibmV0IDEwLjE3LjIyNC4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMjQuZXhhbXBsZS5vcmc7CisjICB9CisjICBzdWJuZXQgMTAuMC4yOS4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yOS5leGFtcGxlLm9yZzsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBhbGxvdyBtZW1iZXJzIG9mICJmb28iOworIyAgICByYW5nZSAxMC4xNy4yMjQuMTAgMTAuMTcuMjI0LjI1MDsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBkZW55IG1lbWJlcnMgb2YgImZvbyI7CisjICAgIHJhbmdlIDEwLjAuMjkuMTAgMTAuMC4yOS4yMzA7CisjICB9CisjfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0ZjkzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjQgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkLnBpZAorRW52aXJvbm1lbnRGaWxlPUBTWVNDT05GRElSQC9kZWZhdWx0L2RoY3Atc2VydmVyCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9zeXNjb25maWcvZGhjcC1zZXJ2ZXIKK0V4ZWNTdGFydFByZT1AYmFzZV9iaW5kaXJAL3RvdWNoIEBsb2NhbHN0YXRlZGlyQC9saWIvZGhjcC9kaGNwZC5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQucGlkICRESENQREFSR1MgLXEgJElOVEVSRkFDRVMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNwZDYuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTk2YWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjYgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkNi5waWQKK0Vudmlyb25tZW50RmlsZT1AU1lTQ09ORkRJUkAvZGVmYXVsdC9kaGNwLXNlcnZlcgorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvc3lzY29uZmlnL2RoY3BkNgorRXhlY1N0YXJ0UHJlPUBiYXNlX2JpbmRpckAvdG91Y2ggQGxvY2Fsc3RhdGVkaXJAL2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLTYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQ2LnBpZCAkREhDUERBUkdTIC1xICRJTlRFUkZBQ0VTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3JlbGF5LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDgxODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQIFJlbGF5IEFnZW50IERhZW1vbgorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2RoY3JlbGF5IC1kIC0tbm8tcGlkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtcmVsYXkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOWE3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5CkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXJlbGF5LHYgMS4xIDIwMDQvMDQvMTYgMTU6NDE6MDggbWwgRXhwICQKKyMKKworIyBJdCBpcyBub3Qgc2FmZSB0byBzdGFydCBpZiB3ZSBkb24ndCBoYXZlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLi4uCitpZiBbICEgLWYgL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkgXTsgdGhlbgorCWVjaG8gIi9ldGMvZGVmYXVsdC9kaGNwLXJlbGF5IGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWVjaG8gImNyZWF0ZSB0aGlzIGZpbGUgdG8gZml4IHRoZSBwcm9ibGVtLiIKKwlleGl0IDEKK2ZpCisKKyMgUmVhZCBpbml0IHNjcmlwdCBjb25maWd1cmF0aW9uIChpbnRlcmZhY2VzIHRoZSBkYWVtb24gc2hvdWxkIGxpc3RlbiBvbgorIyBhbmQgdGhlIERIQ1Agc2VydmVyIHdlIHNob3VsZCBmb3J3YXJkIHJlcXVlc3RzIHRvLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkKKworIyBCdWlsZCBjb21tYW5kIGxpbmUgZm9yIGludGVyZmFjZXMgKHdpbGwgYmUgcGFzc2VkIHRvIGRocmVsYXkgYmVsb3cuKQorSUZDTUQ9IiIKK2lmIHRlc3QgIiRJTlRFUkZBQ0VTIiAhPSAiIjsgdGhlbgorCWZvciBJIGluICRJTlRFUkZBQ0VTOyBkbworCQlJRkNNRD0ke0lGQ01EfSItaSAiJHtJfSIgIgorCWRvbmUKK2ZpCisKK0RIQ1JFTEFZUElEPS92YXIvcnVuL2RoY3JlbGF5LnBpZAorCitjYXNlICIkMSIgaW4KKwlzdGFydCkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2RoY3JlbGF5IC0tIC1xICRPUFRJT05TICRJRkNNRCAkU0VSVkVSUworCQk7OworCXN0b3ApCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNyZWxheQorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXJlbGF5IHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKwkJZXhpdCAxIAorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvaW5pdC1zZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMjA4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXNlcnZlci5pbml0LmQsdiAxLjQgMjAwMy8wNy8xMyAxOToxMjo0MSBtZHogRXhwICQKKyMKKwordGVzdCAtZiAvdXNyL3NiaW4vZGhjcGQgfHwgZXhpdCAwCisKKyMgSXQgaXMgbm90IHNhZmUgdG8gc3RhcnQgaWYgd2UgZG9uJ3QgaGF2ZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4uLgoraWYgWyAhIC1mIC9ldGMvZGVmYXVsdC9kaGNwLXNlcnZlciBdOyB0aGVuCisJZWNobyAiL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyIGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWV4aXQgMAorZmkKKworIyBSZWFkIGluaXQgc2NyaXB0IGNvbmZpZ3VyYXRpb24gKHNvIGZhciBvbmx5IGludGVyZmFjZXMgdGhlIGRhZW1vbgorIyBzaG91bGQgbGlzdGVuIG9uLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0KQorCQllY2hvIC1uICJTdGFydGluZyBESENQIHNlcnZlcjogIgorCQl0ZXN0IC1kIC92YXIvbGliL2RoY3AvIHx8IG1rZGlyIC1wIC92YXIvbGliL2RoY3AvCisJCXRlc3QgLWYgL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMgfHwgdG91Y2ggL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC14IC91c3Ivc2Jpbi9kaGNwZCAtLSAtcSAkSU5URVJGQUNFUworCQllY2hvICIuIgorCQk7OworCXN0b3ApCisJCWVjaG8gLW4gIlN0b3BwaW5nIERIQ1Agc2VydmVyOiBkaGNwZDMiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNwZAorCQllY2hvICIuIgorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWV4aXQgMQorCQlmaQorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXNlcnZlciB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisJCWV4aXQgMSAKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNhNGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlRDUCAvIElQIG5ldHdvcmtpbmcgYW5kIHRyYWZmaWMgY29udHJvbCB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJJcHJvdXRlMiBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBjb250cm9sbGluZyBcCitUQ1AgLyBJUCBuZXR3b3JraW5nIGFuZCB0cmFmZmljIGNvbnRyb2wgaW4gTGludXguICBPZiB0aGUgdXRpbGl0aWVzIGlwIFwKK2FuZCB0YyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiAgaXAgY29udHJvbHMgSVB2NCBhbmQgSVB2NiBcCitjb25maWd1cmF0aW9uIGFuZCB0YyBzdGFuZHMgZm9yIHRyYWZmaWMgY29udHJvbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pcC9pcC5jO2JlZ2lubGluZT0zO2VuZGxpbmU9ODttZDU9Njg5ZDY5MWQwNDEwYTRiNjRkMzg5OWY4ZDZlMzE4MTciCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGlwdGFibGVzIGVsZnV0aWxzIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgS0VSTkVMX0lOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0gRE9DRElSPSR7ZG9jZGlyfS9pcHJvdXRlMiBTVUJESVJTPSdsaWIgdGMgaXAnIFNCSU5ESVI9JyR7YmFzZV9zYmluZGlyfScgTElCRElSPScke2xpYmRpcn0nIgorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCisgICAgbXYgJHtEfSR7YmFzZV9zYmluZGlyfS9pcCAke0R9JHtiYXNlX3NiaW5kaXJ9L2lwLmlwcm91dGUyCisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorICAgIG12ICR7RH0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8gfHwgdHJ1ZQorICAgIHJtICR7RH0vc2hhcmUgLXJmIHx8IHRydWUKK30KKworIyBUaGUgLnNvIGZpbGVzIGluIGlwcm91dGUyLXRjIGFyZSBtb2R1bGVzLCBub3QgdHJhZGl0aW9uYWwgbGlicmFyaWVzCitJTlNBTkVfU0tJUF8ke1BOfS10YyA9ICJkZXYtc28iCisKK1BBQ0tBR0VTID0rICIke1BOfS10YyIKK0ZJTEVTXyR7UE59LXRjID0gIiR7YmFzZV9zYmluZGlyfS90YyogXAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3RjLyouc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3RjLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaXAiCitBTFRFUk5BVElWRV9UQVJHRVRbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWM3ZDQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1N1YmplY3Q6IFtQQVRDSF0gaXByb3V0ZTI6IGRlLWJhc2ggc2NyaXB0cworCitkZS1iYXNoIHRoZXNlIHR3byBzY3JpcHRzIHRvIG1ha2UgaXByb3V0ZTIgbm90IGRlcGVuZCBvbiBiYXNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCistLS0KKyBpcC9pZmNmZyB8ICAgMTUgKysrKysrKystLS0tLS0tCisgaXAvcnRwciAgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pcC9pZmNmZyBiL2lwL2lmY2ZnCitpbmRleCAwODNkOWRmLi42MGJjZjFmIDEwMDY0NAorLS0tIGEvaXAvaWZjZmcKKysrKyBiL2lwL2lmY2ZnCitAQCAtMSwxMiArMSwxMyBAQAorLSMhIC9iaW4vYmFzaAorKyMhIC9iaW4vc2gKKyAKKyBDaGVja0ZvcndhcmRpbmcgKCkgeworLSAgbG9jYWwgc2Jhc2UgZndkCisrICBsb2NhbCBzYmFzZSBmd2QgZm9yd2FyZGluZworICAgc2Jhc2U9L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYKKyAgIGZ3ZD0wCisgICBpZiBbIC1kICRzYmFzZSBdOyB0aGVuCisgICAgIGZvciBkaXIgaW4gJHNiYXNlLyovZm9yd2FyZGluZzsgZG8KKy0gICAgICBmd2Q9JFskZndkICsgYGNhdCAkZGlyYF0KKysgICAgICBmb3J3YXJkaW5nPWBjYXQgJGRpcmAKKysgICAgICBmd2Q9JCgoJGZ3ZCskZm9yd2FyZGluZykpCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgZndkPTIKK0BAIC0xMjcsMTIgKzEyOCwxMiBAQCBmaQorIGFycGluZyAtcSAtQSAtYyAxIC1JICRkZXYgJGlwYWRkcgorIG5vYXJwPSQ/CisgKCBzbGVlcCAyIDsKKy0gIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4mIC9kZXYvbnVsbCA8L2Rldi9udWxsICYKKysgIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4gL2Rldi9udWxsIDI+JjEgPC9kZXYvbnVsbCAmCisgCistaXAgcm91dGUgYWRkIHVucmVhY2hhYmxlIDIyNC4wLjAuMC8yNCA+JiAvZGV2L251bGwKKy1pcCByb3V0ZSBhZGQgdW5yZWFjaGFibGUgMjU1LjI1NS4yNTUuMjU1ID4mIC9kZXYvbnVsbAorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyMjQuMC4wLjAvMjQgPiAvZGV2L251bGwgMj4mMQorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyNTUuMjU1LjI1NS4yNTUgPiAvZGV2L251bGwgMj4mMQorIGlmIFsgYGlwIGxpbmsgbHMgJGRldiB8IGdyZXAgLWMgTVVMVElDQVNUYCAtZ2UgMSBdOyB0aGVuCistICBpcCByb3V0ZSBhZGQgMjI0LjAuMC4wLzQgZGV2ICRkZXYgc2NvcGUgZ2xvYmFsID4mIC9kZXYvbnVsbAorKyAgaXAgcm91dGUgYWRkIDIyNC4wLjAuMC80IGRldiAkZGV2IHNjb3BlIGdsb2JhbCA+IC9kZXYvbnVsbCAyPiYxCisgZmkKKyAKKyBpZiBbICRmd2QgLWVxIDAgXTsgdGhlbgorZGlmZiAtLWdpdCBhL2lwL3J0cHIgYi9pcC9ydHByCitpbmRleCBjMzYyOWZkLi42NzQxOThkIDEwMDY0NAorLS0tIGEvaXAvcnRwcgorKysrIGIvaXAvcnRwcgorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9iYXNoCisrIyEgL2Jpbi9zaAorIAorIGV4ZWMgdHIgIltcXFxcXSIgIlsKKyBdIgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9jb25maWd1cmUtY3Jvc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NjYwOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODViMDU4OWI0ODQzYzAzZThlNmZkOTQxNmQ3MWVhNDQ5YTczYzVjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMTA6NDY6MTYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWFrZSBjb25maWd1cmUgY3Jvc3MgY29tcGlsZSBzYWZlCisKK0FjY29yZGluZyB0byBLZXZpbiBUaWFuOgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworSW5kZXg6IGlwcm91dGUyLTMuNy4wL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwcm91dGUyLTMuNy4wLm9yaWcvY29uZmlndXJlCisrKysgaXByb3V0ZTItMy43LjAvY29uZmlndXJlCitAQCAtMiw2ICsyLDcgQEAKKyAjIFRoaXMgaXMgbm90IGFuIGF1dGNvbmYgZ2VuZXJhdGVkIGNvbmZpZ3VyZQorICMKKyBJTkNMVURFPSR7MTotIiRQV0QvaW5jbHVkZSJ9CisrU1lTUk9PVD0kMQorIAorICMgTWFrZSBhIHRlbXAgZGlyZWN0b3J5IGluIGJ1aWxkIHRyZWUuCisgVE1QRElSPSQobWt0ZW1wIC1kIGNvbmZpZy5YWFhYWFgpCitAQCAtMTU4LDcgKzE1OSw3IEBAIGNoZWNrX2lwdF9saWJfZGlyKCkKKyAJCXJldHVybgorIAlmaQorIAorLQlmb3IgZGlyIGluIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIKKysJZm9yIGRpciBpbiAkU1lTUk9PVC9saWIgJFNZU1JPT1QvdXNyL2xpYiAkU1lTUk9PVC91c3IvbG9jYWwvbGliCisgCWRvCisgCQlmb3IgZmlsZSBpbiAkZGlyL3t4dGFibGVzLGlwdGFibGVzfS9saWIqdF8qc28gOyBkbworIAkJCWlmIFsgLWYgJGZpbGUgXTsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyXzQuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZGIwYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC4xLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBpcHJvdXRlMi5pbmMKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL25ldC8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjM5MjkwY2IzYTU1ZDM4ZGQ4ZDEwZTE5YTMwOTQxMDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczMDc3YTk4OWVmYjkzNDQ1MGJkNjU1Y2JkOWFhZGRhYTc0N2NiNjk2YzY0ZDBjOWEzMzIzNzY4YTZhOGU2NmYiCisKKyMgQ0ZMQUdTIGFyZSBjb21wdXRlZCBpbiBNYWtlZmlsZSBhbmQgcmVmZXJlbmNlIENDT1BUUworIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgQ0NPUFRTPScke0NGTEFHU30nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmYyOWU5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQKQEAgLTAsMCArMSw3OCBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaXJkYQorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEluZnJhcmVkIHBvcnQgc3VwcG9ydAorIyMjIEVORCBJTklUIElORk8KKworTkFNRT0iaXJhdHRhY2giCit0ZXN0IC14ICIkSVJEQV9EQUVNT04iIHx8IElSREFfREFFTU9OPS91c3Ivc2Jpbi9pcmF0dGFjaAordGVzdCAteiAiJElSQVRUQUNIX1BJRCIgJiYgSVJBVFRBQ0hfUElEPS92YXIvcnVuL2lyYXR0YWNoLnBpZAorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbW9kdWxlX2lkKCkgeworICAgICAgICBhd2sgJ0JFR0lOIHsgRlM9IjogIiB9IC9IYXJkd2FyZS8geyBwcmludCAkMiB9ICcgPC9wcm9jL2NwdWluZm8KK30KKworaWYgWyAhIC1mIC9ldGMvc3lzY29uZmlnL2lyZGEgXTsgdGhlbgorICAgIGNhc2UgYG1vZHVsZV9pZGAgaW4KKwkiSFAgaVBBUSBIMjIwMCIgfCAiSFAgaVBBUSBIWDQ3MDAiIHwgIkhUQyBVbml2ZXJzYWwiKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMgorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKwkqKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMQorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKyAgICBlc2FjCitlbHNlCisgICAgLiAvZXRjL3N5c2NvbmZpZy9pcmRhCitmaQorCisjIENoZWNrIHRoYXQgaXJkYSBpcyB1cC4KK1sgJHtJUkRBfSA9ICJubyIgXSAmJiBleGl0IDAKKworWyAtZiAvdXNyL3NiaW4vaXJhdHRhY2ggXSB8fCBleGl0IDAKKworQVJHUz0KK2lmIFsgJERPTkdMRSBdOyB0aGVuCisJQVJHUz0iJEFSR1MgLWQgJERPTkdMRSIKK2ZpCitpZiBbICIkRElTQ09WRVJZIiA9ICJ5ZXMiIF07dGhlbgorCUFSR1M9IiRBUkdTIC1zIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgIiRJUkRBX0RBRU1PTiIgJHtERVZJQ0V9ICR7QVJHU30gLS1waWRmaWxlICIkSVJBVFRBQ0hfUElEIgorCXNsZWVwIDEKKwlbIC1mIC92YXIvcnVuL2lyYXR0YWNoLnBpZCBdICYmIGVjaG8gIiBkb25lIiB8fCBlY2hvICIgZmFpbCIKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJElSREFfREFFTU9OIiAtLXBpZGZpbGUgIiRJUkFUVEFDSF9QSUQiCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgc3RhdHVzKQorCXN0YXR1cyBpcmF0dGFjaAorCWV4aXQgJD8KKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8c3RhdHVzfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2xkZmxhZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NWZlMzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2ZpbmRjaGlwL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvZmluZGNoaXAvTWFrZWZpbGUKK0BAIC02NSw1ICs2NSw1IEBAIGluc3RhbGw6IGZpbmRjaGlwCisKKyBnZmluZGNoaXA6IGdmaW5kY2hpcC5jCisJJChwcm5fY2MpCistCSQoRUNNRCkpJChDQykgJChDRkxBR1MpIGBndGstY29uZmlnIC0tY2ZsYWdzYCAgJDwgLW8gJEAgYGd0ay1jb25maWcgLS1saWJzYAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYGd0ay1jb25maWcgLS1jZmxhZ3NgICAkPCAtbyAkQCBgZ3RrLWNvbmZpZyAtLWxpYnNgCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2lyYXR0YWNoL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJhdHRhY2gvTWFrZWZpbGUKK0BAIC00OSwxMyArNDksMTMgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmF0dGFjaDogaXJhdHRhY2gubyB1dGlsLm8KKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpIGlyYXR0YWNoLm8gdXRpbC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBpcmF0dGFjaC5vIHV0aWwubyAtbyAkQAorCisKKworIGRvbmdsZV9hdHRhY2g6IGRvbmdsZV9hdHRhY2gubworCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgZG9uZ2xlX2F0dGFjaC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBkb25nbGVfYXR0YWNoLm8gLW8gJEAKKworCisgaW5zdGFsbDogJChUQVJHRVRTKQorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYWR1bXAvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhZHVtcC9NYWtlZmlsZQorQEAgLTQwLDcgKzQwLDcgQEAgbGliX2lyZGFkdW1wLmE6ICQoTElCSVJEQURVTVBfT0JKUykKKworIGlyZGFkdW1wOiAkKElSREFEVU1QX09CSlMpICQoTElCSVJEQURVTVBfVEFSR0VUKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYXBpbmcvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhcGluZy9NYWtlZmlsZQorQEAgLTU2LDcgKzU2LDcgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmRhcGluZzogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJuZXRkL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJuZXRkL01ha2VmaWxlCitAQCAtNTAsNyArNTAsNyBAQCBhbGw6ICQoVEFSR0VUUykKKworIGlybmV0ZDogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyBpbnN0YWxsOiBpcm5ldGQKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL3BzaW9uL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvcHNpb24vTWFrZWZpbGUKK0BAIC0yNSw0ICsyNSw0IEBAIGluc3RhbGw6ICQoUFNJT05fVEFSR0VUUykKKyBDRkxBR1MgKz0gLWcgLUkuLi9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChSUE1fT1BUX0ZMQUdTKQorIGlycHNpb241OgorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChQU0lPTl9TUkMpIC1vICRACitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoUFNJT05fU1JDKSAtbyAkQAorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHNfMC45LjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYzNiMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkNvbW1vbiBmaWxlcyBmb3IgSXJEQSIKK0RFU0NSSVBUSU9OID0gIlByb3ZpZGVzIGNvbW1vbiBmaWxlcyBuZWVkZWQgdG8gdXNlIElyREEuIFwKK0lyREEgYWxsb3dzIGNvbW11bmljYXRpb24gb3ZlciBJbmZyYXJlZCB3aXRoIG90aGVyIGRldmljZXMgXAorc3VjaCBhcyBwaG9uZXMgYW5kIGxhcHRvcHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaXJkYS11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2lyZGFkdW1wL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NtY2luaXQvQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFuL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lyZGFkdW1wL2lyZGFkdW1wLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9ZDc4YjlkY2UzY2Q3OGMyMjIwMjUwYzljN2EyYmUxNzgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2lyZGEvaXJkYS11dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiODRkYzEyYWE0YzNmNjFmY2NiOGQ4OTE5YmY0MDc5YmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE5ODA1NTFlNDZiMmVhYTllMTdhZDMxY2JjMWE2MzgwNzQ2MTFmYzMzYmZmMzQxNjNkMTBjN2E2N2E5ZmRjNiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdDQz0ke0NDfScgXAorICAgICdMRD0ke0xEfScgXAorICAgICdDRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdTWVNfSU5DTFVERVM9JyBcCisgICAgJ1Y9MScgXAorIgorCitJTklUU0NSSVBUX05BTUUgPSAiaXJhdHRhY2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyAyMCIKKworVEFSR0VUUyA/Pz0gImlyYXR0YWNoIGlyZGFwaW5nIgorZG9fY29tcGlsZSAoKSB7CisJZm9yIHQgaW4gJHtUQVJHRVRTfTsgZG8KKwkJb2VfcnVubWFrZSAtQyAkdAorCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWZvciB0IGluICR7VEFSR0VUU307IGRvCisJCW9lX3J1bm1ha2UgLUMgJHQgUk9PVD0iJHtEfSIgaW5zdGFsbAorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvJHtJTklUU0NSSVBUX05BTUV9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXcvMDAwMS1pdy12ZXJzaW9uLnNoLWRvbi10LXVzZS1naXQtZGVzY3JpYmUtZm9yLXZlcnNpb25pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhNzdiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDUzMTBhYmJhODY0Y2ZlM2E4YjY1YWYxMzA3Mjk0NDc2MDQxOTBiMjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAyOSBOb3YgMjAxMSAxNzowMzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBpdzogdmVyc2lvbi5zaDogZG9uJ3QgdXNlIGdpdCBkZXNjcmliZSBmb3IgdmVyc2lvbmluZworCitJdCB3aWxsIGRldGVjdCB0b3AtbGV2ZWwgZ2l0IHJlcG9zaXRvcmllcyBsaWtlIHRoZSBBbmdzdHJvbSBzZXR1cC1zY3JpcHRzIGFuZCBicmVhay4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CistLS0KKyB2ZXJzaW9uLnNoIHwgMTYgKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS92ZXJzaW9uLnNoIGIvdmVyc2lvbi5zaAoraW5kZXggMTFkMTI0Yi4uNWQ0MjNjNCAxMDA3NTUKKy0tLSBhL3ZlcnNpb24uc2gKKysrKyBiL3ZlcnNpb24uc2gKK0BAIC0zLDIxICszLDcgQEAKKyBWRVJTSU9OPSIzLjE1IgorIE9VVD0iJDEiCisgCistaWYgWyAtZCAuZ2l0IF0gJiYgaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsYDsgdGhlbgorLQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtLXVubWVyZ2VkID4gL2Rldi9udWxsCistCWRlc2NyPSQoZ2l0IGRlc2NyaWJlKQorLQorLQkjIG9uIGdpdCBidWlsZHMgY2hlY2sgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgYWJvdmUKKy0JIyBpcyBjb3JyZWN0Li4uCistCVsgIiR7ZGVzY3IlJS0qfSIgPSAidiRWRVJTSU9OIiBdIHx8IGV4aXQgMgorLQorLQl2PSIke2Rlc2NyI3Z9IgorLQlpZiBnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEIHwgcmVhZCBkdW1teSA7IHRoZW4KKy0JCXY9IiR2Ii1kaXJ0eQorLQlmaQorLWVsc2UKKy0Jdj0iJFZFUlNJT04iCistZmkKKyt2PSIkVkVSU0lPTiIKKyAKKyBlY2hvICcjaW5jbHVkZSAiaXcuaCInID4gIiRPVVQiCisgZWNobyAiY29uc3QgY2hhciBpd192ZXJzaW9uW10gPSBcIiR2XCI7IiA+PiAiJE9VVCIKKy0tIAorMS43LjcuMwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3L3NlcGFyYXRlLW9iamRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzZjhiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA5ZTI3ZmMyZTFiM2RjOGMzNmVmNmE1MDJlZGZmYzNhM2Q4NGQ5ZGQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTc6MjM6NDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBzZXBhcmF0aW9uIG9mIFNSQ0RJUiBhbmQgT0JKRElSCisKK1R5cGljYWwgdXNlIG9mIFZQQVRIIHRvIGxvY2F0ZSB0aGUgc291cmNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKKy0tLQorIE1ha2VmaWxlICAgfCA3ICsrKysrLS0KKyB2ZXJzaW9uLnNoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNTQ4NTkxYS4uZGE4ZDMzYSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsNSArMSw4IEBACisgTUFLRUZMQUdTICs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisgCisrU1JDRElSID89ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisrT0JKRElSID89ICQoUFdEKQorK1ZQQVRIID0gJChTUkNESVIpCisgUFJFRklYID89IC91c3IKKyBTQklORElSID89ICQoUFJFRklYKS9zYmluCisgTUFORElSID89ICQoUFJFRklYKS9zaGFyZS9tYW4KK0BAIC05NSwxMSArOTgsMTEgQEAgVkVSU0lPTl9PQkpTIDo9ICQoZmlsdGVyLW91dCB2ZXJzaW9uLm8sICQoT0JKUykpCisgdmVyc2lvbi5jOiB2ZXJzaW9uLnNoICQocGF0c3Vic3QgJS5vLCUuYywkKFZFUlNJT05fT0JKUykpIG5sODAyMTEuaCBpdy5oIE1ha2VmaWxlIFwKKyAJCSQod2lsZGNhcmQgLmdpdC9pbmRleCAuZ2l0L3JlZnMvdGFncykKKyAJQCQoTlEpICcgR0VOICcgJEAKKy0JJChRKS4vdmVyc2lvbi5zaCAkQAorKwkkKFEpY2QgJChTUkNESVIpICYmIC4vdmVyc2lvbi5zaCAkKE9CSkRJUikvJEAKKyAKKyAlLm86ICUuYyBpdy5oIG5sODAyMTEuaAorIAlAJChOUSkgJyBDQyAgJyAkQAorLQkkKFEpJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CisrCSQoUSkkKENDKSAtSSQoU1JDRElSKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKKyAKKyBpZmVxICgkKElXX0FORFJPSURfQlVJTEQpLCkKKyBpdzoJJChPQkpTKQorZGlmZiAtLWdpdCBhL3ZlcnNpb24uc2ggYi92ZXJzaW9uLnNoCitpbmRleCA1MzU0MzgzLi5mYTk1NGNmIDEwMDc1NQorLS0tIGEvdmVyc2lvbi5zaAorKysrIGIvdmVyc2lvbi5zaAorQEAgLTUsNSArNSw1IEBAIE9VVD0iJDEiCisgCisgdj0iJFZFUlNJT04iCisgCistZWNobyAnI2luY2x1ZGUgIml3LmgiJyA+ICIkT1VUIgorK2VjaG8gJyNpbmNsdWRlIDxpdy5oPicgPiAiJE9VVCIKKyBlY2hvICJjb25zdCBjaGFyIGl3X3ZlcnNpb25bXSA9IFwiJHZcIjsiID4+ICIkT1VUIgorLS0gCisyLjIuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZiMGUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIm5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3Igd2lyZWxlc3MgZGV2aWNlcyIKK0RFU0NSSVBUSU9OID0gIml3IGlzIGEgbmV3IG5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3IgXAord2lyZWxlc3MgZGV2aWNlcy4gSXQgc3VwcG9ydHMgYWxtb3N0IGFsbCBuZXcgZHJpdmVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBcCit0byB0aGUga2VybmVsIHJlY2VudGx5LiAiCitIT01FUEFHRSA9ICJodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Eb2N1bWVudGF0aW9uL2l3IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Nzg2MThhNWM0YWYyNWU5YjkzZWYwYmUxYTkzZjc3NCIKKworREVQRU5EUyA9ICJsaWJubCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvaXcvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlLW9iamRpci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OGMyODIyODVjNzFjOTU2MDY5OTU3ZTljYTEwYTZhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNGJmYzYyN2IzN2Y3ZjYwN2U0ZmZhNjNhNzBkZWQxNWZhMmVhODUxNzdmNzAzY2IxN2Q3ZmUzNmY5YzhmMzNkIgorCitpbmhlcml0IHBrZ2NvbmZpZworCitFWFRSQV9PRU1BS0UgPSAiXAorICAgIC1mICcke1N9L01ha2VmaWxlJyBcCisgICAgXAorICAgICdQUkVGSVg9JHtwcmVmaXh9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisiCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJuc3MtbWRucy9saWJuc3MtbWRuc18wLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTM2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk5hbWUgU2VydmljZSBTd2l0Y2ggbW9kdWxlIGZvciBNdWx0aWNhc3QgRE5TICh6ZXJvY29uZikgbmFtZSByZXNvbHV0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImF2YWhpIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvbnNzLW1kbnMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDM5MzhmMTc2NDZlZmJiNTBhYTcwYmE1Zjk5ZjUxZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWU2ODNjMmU3YzM5MjE4MTQ3MDZkNjJmYmJkM2U5Y2JmNDkzYTc1ZmEwMDI1NWUwZTcxNTUwOGQ4MTM0ZmE2ZCIKKworUyA9ICIke1dPUktESVJ9L25zcy1tZG5zLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1kaXNhYmxlLWx5bnggLS1lbmFibGUtYXZhaGkiCisKKyMgc3VwcHJlc3Mgd2FybmluZywgYnV0IGRvbid0IGJvdGhlciB3aXRoIGF1dG9uYW1lcgorTEVBRF9TT05BTUUgPSAibGlibnNzX21kbnMuc28iCitERUJJQU5OQU1FXyR7UE59ID0gImxpYm5zcy1tZG5zIgorCitSREVQRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bWRuc1w+Ly8nIFwKKwkJLWUgJ3MvXCheaG9zdHM6LipcKVwoXDxmaWxlc1w+XClcKC4qXClcKFw8ZG5zXD5cKVwoLipcKS9cMVwyIG1kbnM0X21pbmltYWwgW05PVEZPVU5EPXJldHVybl1cM1w0IG1kbnNcNS8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxtZG5zXD4vLycgXAorCQktZSAnL15ob3N0czovcy9ccyptZG5zNF9taW5pbWFsXHNcK1xbTk9URk9VTkQ9cmV0dXJuXF0vLycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODczYzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJJbnRlcmZhY2UgZm9yIHVzZXItbGV2ZWwgbmV0d29yayBwYWNrZXQgY2FwdHVyZSIKK0RFU0NSSVBUSU9OID0gIkxpYnBjYXAgcHJvdmlkZXMgYSBwb3J0YWJsZSBmcmFtZXdvcmsgZm9yIGxvdy1sZXZlbCBuZXR3b3JrIFwKK21vbml0b3JpbmcuICBMaWJwY2FwIGNhbiBwcm92aWRlIG5ldHdvcmsgc3RhdGlzdGljcyBjb2xsZWN0aW9uLCBcCitzZWN1cml0eSBtb25pdG9yaW5nIGFuZCBuZXR3b3JrIGRlYnVnZ2luZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnRjcGR1bXAub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD01MzA2NyZhdGlkPTQ2OTU3NyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xZDRiMDM2NjU1Nzk1MWM4NGE5NGZhYmUzNTI5Zjg2NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wY2FwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zMjttZDU9MzlhZjM1MTBlMDExZjM0Yjg4NzJmMTIwYjFkYzMxZDIiCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworSU5DX1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudGNwZHVtcC5vcmcvcmVsZWFzZS8ke0JQfS50YXIuZ3oiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNhcC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgYmx1ZXRvb3RoCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGNhcD1saW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsLS1kaXNhYmxlLWJsdWV0b290aCxibHVlejQiCisjIEFkZCBhIGR1bW15IFBBQ0tBR0VDT05GSUcgZm9yIGJsdWV6NSBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnBjYXAuCitQQUNLQUdFQ09ORklHW2JsdWV6NV0gPSAiLCwiCitQQUNLQUdFQ09ORklHW2NhbnVzYl0gPSAiLS1lbmFibGUtY2FudXNiLC0tZW5hYmxlLWNhbnVzYj1ubyxsaWJ1c2IiCitQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbbGlibmxdID0gIi0td2l0aC1saWJubCwtLXdpdGhvdXQtbGlibmwsbGlibmwiCisKK0NQUEZMQUdTX3ByZXBlbmQgPSAiLUkke1N9ICIKK0NGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCitDWFhGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorICAgICAgICBjYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKyAgICBmaQorICAgIHNlZCAtaSAtZSdzLF5WX1JQQVRIX09QVD0uKiQsVl9SUEFUSF9PUFQ9LCcgJHtTfS9wY2FwLWNvbmZpZy5pbgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9hY2xvY2FsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9hY2xvY2FsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTE5ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2FjbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwxNjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00IGxpYnBjYXAtMS4xLjEvYWNsb2NhbC5tNAorLS0tIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDY6MzIuODE1MTE3NTY5ICswODAwCisrKysgbGlicGNhcC0xLjEuMS9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDk6MTcuMTUwMTQ5OTQ5ICswODAwCitAQCAtMzcsNyArMzcsNyBAQAorIGRubCBBQ19MQkxfQ19JTklULiAgTm93LCB3ZSBydW4gQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsIEFDX1BST0dfQ0MsCisgZG5sIGFuZCBBQ19MQkxfQ19JTklUIGF0IHRoZSB0b3AgbGV2ZWwuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRfQkVGT1JFX0NDXSwKKyBbCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfTEJMX0NfSU5JVF0pCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfUFJPR19DQ10pCitAQCAtOTAsNyArOTAsNyBAQAorIGRubCAgICAgTERGTEFHUworIGRubCAgICAgTEJMX0NGTEFHUworIGRubAorLUFDX0RFRlVOKEFDX0xCTF9DX0lOSVQsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRdLAorIFsKKyAgICAgQUNfQkVGT1JFKFskMF0sIFtBQ19MQkxfRklYSU5DTFVERVNdKQorICAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xCTF9ERVZFTF0pCitAQCAtMjE3LDcgKzIxNyw3IEBACisgZG5sCVZfU09OQU1FX09QVAorIGRubAlWX1JQQVRIX09QVAorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9TSExJQlNfSU5JVCwKKytBQ19ERUZVTihbQUNfTEJMX1NITElCU19JTklUXSwKKyAgICAgW0FDX1BSRVJFUSgyLjUwKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgICMKK0BAIC0zNjEsNyArMzYxLDcgQEAKKyAjIE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIFZfQ0NPUFQgZmxhZ3MsIGJlY2F1c2Ugc29tZSBvZiB0aG9zZSBtaWdodAorICMgZGlzYWJsZSBpbmxpbmluZy4KKyAjCistQUNfREVGVU4oQUNfTEJMX0NfSU5MSU5FLAorK0FDX0RFRlVOKFtBQ19MQkxfQ19JTkxJTkVdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciBpbmxpbmUpCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRWX0NDT1BUIgorQEAgLTQwNyw3ICs0MDcsNyBAQAorIGRubAorIGRubAlBQ19MQkxfRklYSU5DTFVERVMKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfRklYSU5DTFVERVMsCisrQUNfREVGVU4oW0FDX0xCTF9GSVhJTkNMVURFU10sCisgICAgIFtpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgIEFDX01TR19DSEVDS0lORyhmb3IgQU5TSSBpb2N0bCBkZWZpbml0aW9ucykKKyAJICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZ2NjX2ZpeGluY2x1ZGVzLAorQEAgLTQ1Myw3ICs0NTMsNyBAQAorIGRubAkkMiAoeWFjYyBhcHBlbmRlZCkKKyBkbmwJJDMgKG9wdGlvbmFsIGZsZXggYW5kIGJpc29uIC1QIHByZWZpeCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTEVYX0FORF9ZQUNDLAorK0FDX0RFRlVOKFtBQ19MQkxfTEVYX0FORF9ZQUNDXSwKKyAgICAgW0FDX0FSR19XSVRIKGZsZXgsIFsgIC0td2l0aG91dC1mbGV4ICAgICAgICAgIGRvbid0IHVzZSBmbGV4XSkKKyAgICAgQUNfQVJHX1dJVEgoYmlzb24sIFsgIC0td2l0aG91dC1iaXNvbiAgICAgICAgIGRvbid0IHVzZSBiaXNvbl0pCisgICAgIGlmIHRlc3QgIiR3aXRoX2ZsZXgiID0gbm8gOyB0aGVuCitAQCAtNTA2LDcgKzUwNiw3IEBACisgZG5sCisgZG5sCURFQ0xXQUlUU1RBVFVTIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9VTklPTl9XQUlULAorK0FDX0RFRlVOKFtBQ19MQkxfVU5JT05fV0FJVF0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgdW5pb24gd2FpdCBpcyB1c2VkKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX3VuaW9uX3dhaXQsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC01MzUsNyArNTM1LDcgQEAKKyBkbmwKKyBkbmwJSEFWRV9TT0NLQUREUl9TQV9MRU4gKGRlZmluZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1NPQ0tBRERSX1NBX0xFTiwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NBX0xFTl0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgc3RydWN0IGhhcyB0aGUgc2FfbGVuIG1lbWJlcikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9zb2NrYWRkcl9oYXNfc2FfbGVuLAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtNTYwLDcgKzU2MCw3IEBACisgZG5sCisgZG5sCUhBVkVfU09DS0FERFJfU1RPUkFHRSAoZGVmaW5lZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfU09DS0FERFJfU1RPUkFHRSwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NUT1JBR0VdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHNvY2thZGRyX3N0b3JhZ2Ugc3RydWN0IGV4aXN0cykKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfc29ja2FkZHJfc3RvcmFnZSwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTU5Myw3ICs1OTMsNyBAQAorIGRubCB3b24ndCBiZSB1c2luZyBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndAorIGRubCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSFBfUFBBX0lORk9fVF9ETF9NT0RVTEVfSURfMSwKKytBQ19ERUZVTihbQUNfTEJMX0hQX1BQQV9JTkZPX1RfRExfTU9EVUxFX0lEXzFdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX2hwX3BwYV9pbmZvX3Qgc3RydWN0IGhhcyBkbF9tb2R1bGVfaWRfMSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC02MTksNyArNjE5LDcgQEAKKyBkbmwKKyBkbmwJYWNfY3ZfbGJsX2hhdmVfcnVuX3BhdGggKHllcyBvciBubykKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSEFWRV9SVU5fUEFUSCwKKytBQ19ERUZVTihbQUNfTEJMX0hBVkVfUlVOX1BBVEhdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciAke0NDLWNjfSAtUikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXZlX3J1bl9wYXRoLAorIAlbZWNobyAnbWFpbigpe30nID4gY29uZnRlc3QuYworQEAgLTY0NCw3ICs2NDQsNyBAQAorIGRubAorIGRubAlMQkxfQUxJR04gKERFRklORUQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1VOQUxJR05FRF9BQ0NFU1MsCisrQUNfREVGVU4oW0FDX0xCTF9VTkFMSUdORURfQUNDRVNTXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB1bmFsaWduZWQgYWNjZXNzZXMgZmFpbCkKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF91bmFsaWduZWRfZmFpbCwKKyAJW2Nhc2UgIiRob3N0X2NwdSIgaW4KK0BAIC03NDksNyArNzQ5LDcgQEAKKyBkbmwJSEFWRV9PU19QUk9UT19IIChkZWZpbmVkKQorIGRubAlvcy1wcm90by5oIChzeW1saW5rZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0RFVkVMLAorK0FDX0RFRlVOKFtBQ19MQkxfREVWRUxdLAorICAgICBbcm0gLWYgb3MtcHJvdG8uaAorICAgICBpZiB0ZXN0ICIke0xCTF9DRkxBR1Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAJICAgICQxPSIkJDEgJHtMQkxfQ0ZMQUdTfSIKK0BAIC04ODYsNyArODg2LDcgQEAKKyBkbmwgc3RhdGljYWxseSBhbmQgaGFwcGVuIHRvIGhhdmUgYSBsaWJyZXNvbHYuYSBseWluZyBhcm91bmQgKGFuZCBubworIGRubCBsaWJuc2wuYSkuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0xJQlJBUllfTkVULCBbCisrQUNfREVGVU4oW0FDX0xCTF9MSUJSQVJZX05FVF0sIFsKKyAgICAgIyBNb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgZ2V0aG9zdGJ5bmFtZSgpIGluIHRoZSBkZWZhdWx0IHNlYXJjaGVkCisgICAgICMgbGlicmFyaWVzIChpLmUuIGxpYmMpOgorICAgICAjIFNvbWUgT1NlcyAoZWcuIFNvbGFyaXMpIHBsYWNlIGl0IGluIGxpYm5zbAorQEAgLTkwOSw3ICs5MDksNyBAQAorIGRubCBUZXN0IGZvciBfX2F0dHJpYnV0ZV9fCisgZG5sCisgCistQUNfREVGVU4oQUNfQ19fX0FUVFJJQlVURV9fLCBbCisrQUNfREVGVU4oW0FDX0NfX19BVFRSSUJVVEVfX10sIFsKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIF9fYXR0cmlidXRlX18pCisgQUNfQ0FDSEVfVkFMKGFjX2N2X19fYXR0cmlidXRlX18sIFsKKyBBQ19DT01QSUxFX0lGRUxTRSgKK0BAIC05NDcsNyArOTQ3LDcgQEAKKyBkbmwKKyBkbmwgLVNjb3R0IEJhcnJvbgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9UUEFDS0VUX1NUQVRTLAorK0FDX0RFRlVOKFtBQ19MQkxfVFBBQ0tFVF9TVEFUU10sCisgICAgW0FDX01TR19DSEVDS0lORyhpZiBpZl9wYWNrZXQuaCBoYXMgdHBhY2tldF9zdGF0cyBkZWZpbmVkKQorICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfdHBhY2tldF9zdGF0cywKKyAgICBBQ19UUllfQ09NUElMRShbCitAQCAtOTc2LDcgKzk3Niw3IEBACisgZG5sIGRvZXNuJ3QgaGF2ZSB0aGF0IG1lbWJlciAod2hpY2ggaXMgT0ssIGFzIGVpdGhlciB3ZSB3b24ndCBiZSB1c2luZworIGRubCBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJLAorK0FDX0RFRlVOKFtBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB0cGFja2V0X2F1eGRhdGEgc3RydWN0IGhhcyB0cF92bGFuX3RjaSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC0xMDAzLDcgKzEwMDMsNyBAQAorIGRubCAKKyBkbmwgCUhBVkVfRExQSV9QQVNTSVZFIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9ETF9QQVNTSVZFX1JFUV9ULAorK0FDX0RFRlVOKFtBQ19MQkxfRExfUEFTU0lWRV9SRVFfVF0sCisgICAgICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX3Bhc3NpdmVfcmVxX3Qgc3RydWN0IGV4aXN0cykKKyAgICAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfZGxfcGFzc2l2ZV9yZXFfdCwKKyAgICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjE1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2xpYnBjYXAtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSA4ODg3MTMyZTg1ODkyYTcyYTg0Y2EzODc4ZTYwZjI1NGFkMmNlOTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorRGF0ZTogVHVlLCAyNCBGZWIgMjAxNSAxNTo1NjowNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJwY2FwOiBwa2djb25maWcgc3VwcG9ydAorCitBZGRpbmcgYmFzaWMgc3RydWN0dXJlIHRvIHN1cHBvcnQgcGtnLWNvbmZpZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICB8ICA1ICsrKysrCisgY29uZmlndXJlLmluICB8ICAxICsKKyBsaWJwY2FwLnBjLmluIHwgMTAgKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJwY2FwLnBjLmluCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAxYzJkNzQ1Li4xZjI1ZmFmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNjAsNiArNjAsMTAgQEAgVl9SUEFUSF9PUFQgPSBAVl9SUEFUSF9PUFRACisgREVQRU5ERU5DWV9DRkxBRyA9IEBERVBFTkRFTkNZX0NGTEFHQAorIFBST0c9bGlicGNhcAorIAorKyMgcGtnY29uZmlnIHN1cHBvcnQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBsaWJwY2FwLnBjCisrCisgIyBTdGFuZGFyZCBDRkxBR1MKKyBGVUxMX0NGTEFHUyA9ICQoQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCisgCitAQCAtMjc1LDYgKzI3OSw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCWxibC9vcy1zb2xhcmlzMi5oIFwKKyAJbGJsL29zLXN1bm9zNC5oIFwKKyAJbGJsL29zLXVsdHJpeDQuaCBcCisrCWxpYnBjYXAucGMgXAorIAltaXNzaW5nL3NucHJpbnRmLmMgXAorIAlta2RlcCBcCisgCW1zZG9zL2JpbjJjLmMgXAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggOGY1Yzg2Yi4uZmI1MWIzNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTcwMCw2ICsxNzAwLDcgQEAgZXNhYworIEFDX1BST0dfSU5TVEFMTAorIAorIEFDX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0ZJTEVTKFtsaWJwY2FwLnBjXSkKKyAKKyBBQ19PVVRQVVRfQ09NTUFORFMoW2lmIHRlc3QgLWYgLmRldmVsOyB0aGVuCisgCWVjaG8gdGltZXN0YW1wID4gc3RhbXAtaAorZGlmZiAtLWdpdCBhL2xpYnBjYXAucGMuaW4gYi9saWJwY2FwLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGY3OGFkOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlicGNhcC5wYy5pbgorQEAgLTAsMCArMSwxMCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IGxpYnBjYXAKKytEZXNjcmlwdGlvbjogU3lzdGVtLWluZGVwZW5kZW50IGludGVyZmFjZSBmb3IgdXNlci1sZXZlbCBwYWNrZXQgY2FwdHVyZS4KKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbHBjYXAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwXzEuNi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTE1NDNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIGxpYnBjYXAuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2xvY2FsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjVmMTQxOTFjMWE2ODRhNzU1MzJjNzM5YzJjNDA1OWZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVkYjNlMjk5OGYxZWViYTJjNzZkYTU1ZGE1ZDQ3NDI0OGZlMTljNDRmNDllMTVjYWM4YTc5NmEyYzdlMTk2OTAiCisKKyMKKyMgbWFrZSBpbnN0YWxsIGRvZXNuJ3QgY292ZXIgdGhlIHNoYXJlZCBsaWIKKyMgbWFrZSBpbnN0YWxsLXNoYXJlZCBpcyBqdXN0IGJyb2tlbiAobm8gc3ltbGlua3MpCisjCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAjcmVtb3ZlIGhhcmRjb2RlZCByZWZlcmVuY2VzIHRvIC91c3IvaW5jbHVkZQorICAgIHNlZCAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAke1N9L2NvbmZpZ3VyZS5pbgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIG9lX3J1bm1ha2UgaW5zdGFsbC1zaGFyZWQgREVTVERJUj0ke0R9CisgICAgb2VfbGliaW5zdGFsbCAtYSAtc28gbGlicGNhcCAke0R9JHtsaWJkaXJ9CisgICAgc2VkICJzfEBWRVJTSU9OQHwke1BWfXwiIC1pICR7Qn0vbGlicGNhcC5wYworICAgIGluc3RhbGwgLUQgLW0gMDY0NCBsaWJwY2FwLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBjYXAucGMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8vbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNmMmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mby9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm9fZ2l0LmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTW9iaWxlIEJyb2FkYmFuZCBTZXJ2aWNlIFByb3ZpZGVyIERhdGFiYXNlIgorU0VDVElPTiA9ICJuZXR3b3JrIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3OTY0NTc5YjJhOGVjZTRiYzY3NDRkMmRjOWE4YjA0IgorU1JDUkVWID0gImQwNmViZDMxNGE3Y2RkMDg3ZDM4ZTQ5NjZjMTlkZTQyYzhjNTUyNDYiCitQViA9ICIyMDE0MDYxOCtnaXRyJHtTUkNQVn0iCitQRSA9ICIxIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODc1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gYmZkMzJkNjhjZmM5ZjFlMzFkYWI4OGUwNzQ0NmQxYzAyYmM4MGI1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxMiBGZWIgMjAxNSAwMDozOToyOSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZG8gbm90IHNoaXAgdmVyc2lvbi5oCisKK1RoZSBIRUFERVJTJyBuYW1lIGhhcyBiZWVuIGNoYW5nZWQgdG8gcGtnaW5jbHVkZV9IRUFERVJTLCBzbyB1c2UKK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMsIG90aGVyd2lzZSB2ZXJzaW9uLmggd291bGQgYmUgc2hpcHBlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggMzMzNDc5MC4uNjljZDU4ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEwLDExICsxMCwxMSBAQCBwa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3R5cGVzLmggaW5jbHVkZS9sb2cuaCBpbmNsdWRlL3BsdWdpbi5oIFwKKyAJCQlpbmNsdWRlL3Rsdi5oIGluY2x1ZGUvc2V0dGluZy5oIGluY2x1ZGUvZGV2aWNlLmggXAorIAkJCWluY2x1ZGUvbmZjX2NvcHkuaCBpbmNsdWRlL3NuZXAuaAorIAorLW5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorIAorIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kYnVzLmgKKyAKKy1sb2NhbF9oZWFkZXJzID0gJChmb3JlYWNoIGZpbGUsJChwa2dpbmNsdWRlX0hFQURFUlMpICQobm9kaXN0X2luY2x1ZGVfSEVBREVSUykgXAorK2xvY2FsX2hlYWRlcnMgPSAkKGZvcmVhY2ggZmlsZSwkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChub2Rpc3RfcGtnaW5jbHVkZV9IRUFERVJTKSBcCisgCQkJJChub2luc3RfSEVBREVSUyksIGluY2x1ZGUvbmVhci8kKG5vdGRpciAkKGZpbGUpKSkKKyAKKyBnZGJ1c19zb3VyY2VzID0gZ2RidXMvZ2RidXMuaCBnZGJ1cy9tYWlubG9vcC5jIGdkYnVzL3dhdGNoLmMgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NjA2NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNDNhY2M1NmQ1NTA2YzdlMzE4ZjcxN2ZiMzYzNGJjMTZlMzQzODkxMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxNSBKYW4gMjAxNSAxODoxMjowNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZml4IHBhcmFsbGVsIGlzc3VlCisKK1RoZXJlIG1pZ2h0IGJlIG5vIHNyYyBkaXIgaWYgc3JjL2J1aWx0aW4uaCBydW5zIGVhcmxpZXIsIGNyZWF0ZSBpdCB0bworZml4IHRoZSByYWNlIGlzc3VlOgorCitzcmMvZ2VuYnVpbHRpbiBuZmN0eXBlMSBuZmN0eXBlMiBuZmN0eXBlMyBuZmN0eXBlNCBwMnAgPiBzcmMvYnVpbHRpbi5oCisvYmluL3NoOiBzcmMvYnVpbHRpbi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzMjQxMzExLi5hNDNlYWEyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTY0LDYgKzE2NCw3IEBAIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4gXAorIHNyYy9wbHVnaW4uJChPQkpFWFQpOiBzcmMvYnVpbHRpbi5oCisgCisgc3JjL2J1aWx0aW4uaDogc3JjL2dlbmJ1aWx0aW4gJChidWlsdGluX3NvdXJjZXMpCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApIHNyYworIAkkKEFNX1ZfR0VOKSQoc3JjZGlyKS9zcmMvZ2VuYnVpbHRpbiAkKGJ1aWx0aW5fbW9kdWxlcykgPiAkQAorIAorICQoc3JjX25lYXJkX09CSkVDVFMpIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvbmVhcmQuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvbmVhcmQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZDRkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9uZWFyZC5pbgpAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCBuZWFyZCBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5lYXJkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE5GQyBkYWVtb24KKyMgRGVzY3JpcHRpb246ICAgICAgIG5lYXJkIGlzIGEgZGFlbW9uIHVzZWQgdG8gZW5hYmxlIE5GQyBmZWF0dXJlcworIyMjIEVORCBJTklUIElORk8KKworREFFTU9OPUBpbnN0YWxscGF0aEAvbmVhcmQKK1BJREZJTEU9L3Zhci9ydW4vbmVhcmQucGlkCitERVNDPSJMaW51eCBORkMgZGFlbW9uIgorCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9uZWFyZCBdIDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L25lYXJkCitmaQorCitzZXQgLWUKKworZG9fc3RhcnQoKSB7CisJJERBRU1PTgorfQorCitkb19zdG9wKCkgeworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgbmVhcmQgLS1xdWlldAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgJERFU0MiCisJZG9fc3RhcnQKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nICRERVNDIgorCWRvX3N0b3AKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwllY2hvICJSZXN0YXJ0aW5nICRERVNDIgorCWRvX3N0b3AKKwlzbGVlcCAxCisJZG9fc3RhcnQKKwk7OworICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmRfMC4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRmNzBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIKQEAgLTAsMCArMSw2MSBAQAorU1VNTUFSWSA9ICJMaW51eCBORkMgZGFlbW9uIgorREVTQ1JJUFRJT04gPSAiQSBkYWVtb24gZm9yIHRoZSBMaW51eCBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gc3RhY2siCitIT01FUEFHRSA9ICJodHRwOi8vMDEub3JnL2xpbnV4LW5mYyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBsaWJubCIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvbmZjLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYjc0NmNlNjJlZWVmODhlOGRlOTA3NjVlMDBhNzVhMWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjUxZjY1MTNkMzJjZGFmOGE0MjYyNTVkMDNhZmYzOGE2NjIwYTg5YjA1NjdlYzJiMzY2MDZjNjMzMGE5MzM1MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorIGZpbGU6Ly9zcmMvbmVhci5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTM1OGU0ZGVlZmVmMjUxYTQ3NjFlMWZmYWNjOTY1ZDEzIFwKKyAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGJsdWV0b290aAorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3VzZXIvLC0tZGlzYWJsZS1zeXN0ZW1kIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRvb2xzIgorCisjIFRoaXMgd291bGQgY29weSBuZWFyZCBzdGFydC1zdG9wIHNoZWxsIGFuZCB0ZXN0IHNjcmlwdHMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkJc2VkICJzOkBpbnN0YWxscGF0aEA6JHtsaWJleGVjZGlyfS9uZmM6IiAke1dPUktESVJ9L25lYXJkLmluIFwKKwkJICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCQljaG1vZCAwNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCWZpCisKKwkjIEluc3RhbGwgdGhlIHRlc3RzIGZvciBuZWFyZC10ZXN0cworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9uZWFyZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rlc3QvKiAke0R9JHtsaWJkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS90b29scy9uZmN0b29sL25mY3Rvb2wgJHtEfSR7bGliZGlyfS8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLXRlc3QiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi8uZGVidWciCisKK1JERVBFTkRTXyR7UE59ID0gImRidXMgcHl0aG9uIHB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QiCisKKyMgQmx1ZXogJiBXaWZpIGFyZSBub3QgbWFuZGF0b3J5IGV4Y2VwdCBmb3IgaGFuZG92ZXIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCd3cGEtc3VwcGxpY2FudCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitJTklUU0NSSVBUX05BTUUgPSAibmVhcmQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyA2NCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm5lYXJkLnNlcnZpY2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2ZpbGVzL25mcy11dGlscy1kZWJpYW5pemUtc3RhcnQtc3RhdGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2ZpbGVzL25mcy11dGlscy1kZWJpYW5pemUtc3RhcnQtc3RhdGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwMDIyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvZmlsZXMvbmZzLXV0aWxzLWRlYmlhbml6ZS1zdGFydC1zdGF0ZC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitbUEFUQ0hdIG5mcy11dGlsczogZGViaWFuaXplIHN0YXJ0LXN0YXRkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittYWtlIHN0YXJ0LXN0YXRkIGNvbW1hbmQgdG8gdXNlIG5mc2NvbW1vbiBjb25maWd1cmUsIHRvby4KKworU2lnbmVkLW9mZi1ieTogSGVucmlrIFJpb21hciA8aGVucmlrLnJpb21hckBlcmljc3Nvbi5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBXYW5nIDxsaS53YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHV0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlscy9zdGF0ZC9zdGFydC1zdGF0ZCBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitpbmRleCBlYzkzODNiLi4zOTY5YjhjIDEwMDc1NQorLS0tIGEvdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQKKysrKyBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitAQCAtNiw2ICs2LDEzIEBACisgIyBzaXRlLgorIFBBVEg9Ii9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluIgorIAorKyMgUmVhZCBjb25maWcKKytERUZBVUxURklMRT0vZXRjL2RlZmF1bHQvbmZzLWNvbW1vbgorK05FRURfSURNQVBEPQorK2lmIFsgLWYgJERFRkFVTFRGSUxFIF07IHRoZW4KKysgICAgLiAkREVGQVVMVEZJTEUKKytmaQorKworICMgRmlyc3QgdHJ5IHN5c3RlbWQgaWYgaXQncyBpbnN0YWxsZWQuCisgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIyBRdWl0IG9ubHkgaWYgdGhlIGNhbGwgd29ya2VkLgorQEAgLTEzLDQgKzIwLDQgQEAgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyBmaQorIAorICMgRmFsbCBiYWNrIHRvIGxhdW5jaGluZyBpdCBvdXJzZWx2ZXMuCistZXhlYyBycGMuc3RhdGQgLS1uby1ub3RpZnkKKytleGVjIHJwYy5zdGF0ZCAtLW5vLW5vdGlmeSAkU1RBVERPUFRTCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC8wMDAxLWluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWdldHRpbmctdV8tdHlwZWRlZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjNTI5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gYTVlOTVhNDJlN2JjZWRkYzllY2FkMDY2OTRjMWEwNTg4ZjRiYWZjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDA3OjIyOjQ3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIGdldHRpbmcgdV8qIHR5cGVkZWZzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY2ZnLmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NmZy5oIGIvY2ZnLmgKK2luZGV4IGQ0ZDRjYWIuLmZlNDllOGYgMTAwNjQ0CistLS0gYS9jZmcuaAorKysrIGIvY2ZnLmgKK0BAIC0zMyw2ICszMyw3IEBACisgI2lmbmRlZiBfQ09ORl9IXworICNkZWZpbmUgX0NPTkZfSF8KKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgInF1ZXVlLmgiCisgCisgc3RydWN0IGNvbmZfbGlzdF9ub2RlIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL1NldF9ub2JvZHlfdXNlcl9ncm91cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjMzZGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorU2V0IG5vYm9keSB1c2VyIGFuZCBncm91cAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLSBhL2lkbWFwZC5jb25mCisrKysgYi9pZG1hcGQuY29uZgorQEAgLTE3LDggKzE3LDggQEAKKyAKKyBbTWFwcGluZ10KKyAKKy0jTm9ib2R5LVVzZXIgPSBub2JvZHkKKy0jTm9ib2R5LUdyb3VwID0gbm9ib2R5CisrTm9ib2R5LVVzZXIgPSBub2JvZHkKKytOb2JvZHktR3JvdXAgPSBub2dyb3VwCisgCisgW1RyYW5zbGF0aW9uXQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9maXgtYWMtcHJlcmVxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9maXgtYWMtcHJlcmVxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MWM3YzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL2ZpeC1hYy1wcmVyZXEucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTEsNyArMSw3IEBACisgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyAKKy1BQ19QUkVSRVEoWzIuNjhdKQorK0FDX1BSRVJFUShbMi42NV0pCisgQUNfSU5JVChbbGlibmZzaWRtYXBdLFswLjI1XSxbbGludXgtbmZzQHZnZXIua2VybmVsLm9yZ10pCisgQUNfQ09ORklHX1NSQ0RJUihbbmZzaWRtYXAuaF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcF8wLjI1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcF8wLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNTc4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwXzAuMjUuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJORlMgaWQgbWFwcGluZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDljNmEyYTBjYTYwMTdmZGE3Y2Q5MDVlZDI3MzliMzciCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC9saWJuZnNpZG1hcC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1hYy1wcmVyZXEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmFjNDg5M2M5MjcxNmFkZDFhMTQ0N2FlMDFkZjc3YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU2ZDI0NWQ4NDQwMGUxMDMwZjhmNDBhNWEyN2RhNzYzNzA2OTBjNGE5MzJiYWYyNDkxMTBmMDQ3ZmU3ZWZjZiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0vaWRtYXBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vaWRtYXBkLmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy8wMDAxLWNvbmZpZ3VyZS1BbGxvdy10by1leHBsaWNpdGx5LWRpc2FibGUtbmZzaWRtYXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA5Yjg0Y2ZmMzA1ODY2YWJkMTUwY2YxYTRjNmU3ZTVlYmY4YTdlYjNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxNSBOb3YgMjAxMyAyMzoyMTozNSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFsbG93IHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBuZnNpZG1hcAorCisqIGtleXV0aWxzIGF2YWlsYWJpbGl0eSBpcyBhdXRvZGV0ZWN0ZWQgYW5kIGJ1aWxkcyBhcmVuJ3QgcmVwcm9kdWNpYmxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxMCArKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZjQzM2Q2Li4yOGE4ZjYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02OSw2ICs2OSwxMiBAQCBBQ19BUkdfRU5BQkxFKG5mc3Y0LAorIAlBQ19TVUJTVChlbmFibGVfbmZzdjQpCisgCUFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNWNCwgW3Rlc3QgIiRlbmFibGVfbmZzdjQiID0gInllcyJdKQorIAorK0FDX0FSR19FTkFCTEUobmZzaWRtYXAsCisrICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5mc2lkbWFwXSwKKysgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0IGlkbWFwcGVyIEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgICAgICBlbmFibGVfbmZzaWRtYXA9JGVuYWJsZXZhbCwKKysgICAgICAgIGVuYWJsZV9uZnNpZG1hcD15ZXMpCisrCisgQUNfQVJHX0VOQUJMRShuZnN2NDEsCisgCVtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmZzdjQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0MSBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorQEAgLTI5Niw3ICszMDIsNyBAQCBmaQorIAorIGRubCBlbmFibGUgbmZzaWRtYXAgd2hlbiBpdHMgc3VwcG9ydCBieSBsaWJuZnNpZG1hcAorIEFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNEQ0xUUkFDSywgW3Rlc3QgIiRlbmFibGVfbmZzZGNsdHJhY2siID0gInllcyIgXSkKKy1BTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX2tleXV0aWxzX2gkYWNfY3ZfbGliX25mc2lkbWFwX25mczRfb3duZXJfdG9fdWlkIiA9ICJ5ZXN5ZXMiXSkKKytBTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkZW5hYmxlX25mc2lkbWFwJGFjX2N2X2hlYWRlcl9rZXl1dGlsc19oJGFjX2N2X2xpYl9uZnNpZG1hcF9uZnM0X293bmVyX3RvX3VpZCIgPSAieWVzeWVzeWVzIl0pCisgCisgCisgaWYgdGVzdCAiJGtuZnNkX2N2X2dsaWJjMiIgPSBubzsgdGhlbgorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1tb3VudGQuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1tb3VudGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNkZGMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLW1vdW50ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIE1vdW50IERhZW1vbgorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL25mcy11dGlscy5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwYy5tb3VudGQgLUYgJE1PVU5URF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zZXJ2ZXIuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zZXJ2ZXIuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDdkN2E3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXNlcnZlci5zZXJ2aWNlCkBAIC0wLDAgKzEsMTggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIFNlcnZlcgorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZQorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9uZnMtdXRpbHMuY29uZgorRXhlY1N0YXJ0UHJlPUBTQklORElSQC9leHBvcnRmcyAtcgorRXhlY1N0YXJ0PUBTQklORElSQC9ycGMubmZzZCAkTkZTRF9PUFRTICRORlNEX0NPVU5UCitFeGVjU3RvcD1AU0JJTkRJUkAvcnBjLm5mc2QgMAorRXhlY1N0b3BQb3N0PUBTQklORElSQC9leHBvcnRmcyAtZgorRXhlY1JlbG9hZD1AU0JJTkRJUkAvZXhwb3J0ZnMgLXIKK1N0YW5kYXJkRXJyb3I9c3lzbG9nCitSZW1haW5BZnRlckV4aXQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXN0YXRkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2ZGFjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIGZpbGUgbG9ja2luZyBzZXJ2aWNlCitBZnRlcj1ycGNiaW5kLnNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc2VydmljZQorQmVmb3JlPXJlbW90ZS1mcy1wcmUudGFyZ2V0CisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvbmZzLXV0aWxzLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjLnN0YXRkIC1GICRTVEFURF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjgxODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0ZpeGVzIGVycm9ycyBsaWtlCitzbS1ub3RpZnlbMTA3MF06IEROUyByZXNvbHV0aW9uIG9mIGEuYi5jLmQuLmNvbSBmYWlsZWQ7IHJldHJ5aW5nIGxhdGVyCitUaGlzIGVycm9yIHdpbGwgb2NjdXIgYW55dGltZSBzbS1ub3RpZnkgaXMgcnVuIGJlZm9yZSB0aGUgbmV0d29yayBpZiBmdWxseSB1cCwKK3doaWNoIGlzIGhhcHBlbmluZyBtb3JlIGFuZCBtb3JlIHdpdGggcGFyYWxsZWwgc3RhcnR1cCBzeXN0ZW1zLgorVGhlIHJlc19pbml0KCkgY2FsbCBpcyBzaW1wbGUsIHNhZmUsIHF1aWNrLCBhbmQgYSBwYXRjaCB0byB1c2UgaXQgc2hvdWxkIGJlCithYmxlIHRvIGdvIHVwc3RyZWFtLiAgUHJlc3VtYWJseSB0aGUgd2hvbGUgcmVhc29uIHNtLW5vdGlmeSB0cmllcyBzZXZlcmFsCit0aW1lcyBpcyB0byB3YWl0IGZvciBwb3NzaWJsZSBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJ1dCB3aXRob3V0CitjYWxsaW5nIHJlc19pbml0KCkgaXQgd2lsbCBuZXZlciBiZSBhd2FyZSBvZiB0aG9zZSBjaGFuZ2VzCisKK0JhY2twb3J0ZWQgZHJvbSBGZWRvcmEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisKK2RpZmYgLXVwIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYworLS0tIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnCTIwMTAtMDktMjggMDg6MjQ6MTYuMDAwMDAwMDAwIC0wNDAwCisrKysgbmZzLXV0aWxzLTEuMi4zL3V0aWxzL3N0YXRkL3NtLW5vdGlmeS5jCTIwMTAtMTAtMTUgMTY6NDQ6NDMuNDg3MTE5NjAxIC0wNDAwCitAQCAtMjgsNiArMjgsOSBAQAorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxncnAuaD4KKysjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKysjaW5jbHVkZSA8cmVzb2x2Lmg+CisgCisgI2luY2x1ZGUgInNvY2thZGRyLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKK0BAIC04NCw2ICs4Nyw3IEBAIHNtbl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKKyAJfTsKKyAJaW50IGVycm9yOworIAorKwlyZXNfaW5pdCgpOworIAllcnJvciA9IGdldGFkZHJpbmZvKG5hbWUsIE5VTEwsICZoaW50LCAmYWkpOworIAlpZiAoZXJyb3IgIT0gMCkgeworIAkJeGxvZyhEX0dFTkVSQUwsICJnZXRhZGRyaW5mbygzKTogJXMiLCBnYWlfc3RyZXJyb3IoZXJyb3IpKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLURvLW5vdC1wYXNzLUNGTEFHUy10by1nY2Mtd2hpbGUtYnVpbGRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzZjFlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK25mcy11dGlsczogRG8gbm90IHBhc3MgQ0ZMQUdTIHRvIGdjYyB3aGlsZSBidWlsZGluZworCitEbyBub3QgcGFzcyBDRkxBR1MvTERGTEFHUyB0byBnY2Mgd2hpbGUgYnVpbGRpbmcsIFRoZSBuZWVkZWQgZmxhZ3MgaGFzCitiZWVuIHBhc3NlZCBieSB4eHhfQ0ZMQUdTPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtIHwgICAgMiArKworIHRvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbSAgIHwgICAgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbSBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitpbmRleCAzMTU2ODE1Li4xNzI5ZmQxIDEwMDY0NAorLS0tIGEvdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0KKysrKyBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDggQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyBDQz0kKENDX0ZPUl9CVUlMRCkKKytDRkxBR1M9CisrTERGTEFHUz0KKyBMSUJUT09MID0gQExJQlRPT0xAIC0tdGFnPUNDCisgCisgbm9pbnN0X1BST0dSQU1TID0gdGVzdGxrCitkaWZmIC0tZ2l0IGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtIGIvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCitpbmRleCA4YTllYzg5Li44YmFjZGFhIDEwMDY0NAorLS0tIGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCisrKysgYi90b29scy9ycGNnZW4vTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsOCBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorIENDPSQoQ0NfRk9SX0JVSUxEKQorK0NGTEFHUz0KKytMREZMQUdTPQorIExJQlRPT0wgPSBATElCVE9PTEAgLS10YWc9Q0MKKyAKKyBub2luc3RfUFJPR1JBTVMgPSBycGNnZW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMDA3YTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZgpAQCAtMCwwICsxLDM1IEBACisjIFBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG5mcy11dGlscyAoY2xpZW50cyAmIHNlcnZlcikgc2VydmljZSBmaWxlcy4KKyMKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLm5mc2QuCitORlNEX09QVFM9IiIKKworIyBOdW1iZXIgb2Ygc2VydmVycyB0byBzdGFydCB1cDsgdGhlIGRlZmF1bHQgaXMgOCBzZXJ2ZXJzLgorTkZTRF9DT1VOVD0iIgorCisjIFdoZXJlIHRvIG1vdW50IG5mc2QgZmlsZXN5c3RlbTsgdGhlIGRlZmF1bHQgaXMgIi9wcm9jL2ZzL25mc2QiLgorUFJPQ05GU0RfTU9VTlRQT0lOVD0iIgorCisjIE9wdGlvbnMgdXNlZCB0byBtb3VudCBuZnNkIGZpbGVzeXN0ZW07IHRoZSBkZWZhdWx0IGlzICJydyxub2Rldixub2V4ZWMsbm9zdWlkIi4KK1BST0NORlNEX01PVU5UT1BUUz0iIgorCisjIE9wdGlvbnMgZm9yIHJwYy5tb3VudGQuCisjIElmIHlvdSBoYXZlIGEgcG9ydC1iYXNlZCBmaXJld2FsbCwgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IHVwCisjIGEgZml4ZWQgcG9ydCBoZXJlIHVzaW5nIHRoZSAtLXBvcnQgb3B0aW9uLgorTU9VTlREX09QVFM9IiIKKworIyBQYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byBuZnMtY29tbW9uIChuZnMgY2xpZW50cyAmIHNlcnZlcikgaW5pdCBzY3JpcHQuCisjCisKKyMgSWYgeW91IGRvIG5vdCBzZXQgdmFsdWVzIGZvciB0aGUgTkVFRF8gb3B0aW9ucywgdGhleSB3aWxsIGJlIGF0dGVtcHRlZAorIyBhdXRvZGV0ZWN0ZWQ7IHRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgcGVvcGxlLiBWYWxpZCBhbHRlcm5hdGl2ZXMKKyMgZm9yIHRoZSBORUVEXyBvcHRpb25zIGFyZSAieWVzIiBhbmQgIm5vIi4KKworIyBEbyB5b3Ugd2FudCB0byBzdGFydCB0aGUgc3RhdGQgZGFlbW9uPyBJdCBpcyBub3QgbmVlZGVkIGZvciBORlN2NC4KK05FRURfU1RBVEQ9IiIKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLnN0YXRkLgorIyBOLkIuIHN0YXRkIG5vcm1hbGx5IHJ1bnMgb24gYm90aCBjbGllbnQgYW5kIHNlcnZlciwgYW5kIHJ1bi10aW1lCisjIG9wdGlvbnMgc2hvdWxkIGJlIHNwZWNpZmllZCBhY2NvcmRpbmdseS4KKyMgU1RBVERfT1BUUz0iLXAgMzI3NjUgLW8gMzI3NjYiCitTVEFURF9PUFRTPSIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNjb21tb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNjb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyMjY3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc2NvbW1vbgpAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5mcy1jb21tb24KKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgUmVxdWlyZWQtU3RvcDogICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBORlMgc3VwcG9ydCBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlcgorIyBEZXNjcmlwdGlvbjogICAgICAgTkZTIGlzIGEgcG9wdWxhciBwcm90b2NvbCBmb3IgZmlsZSBzaGFyaW5nIGFjcm9zcworIyAgICAgICAgICAgICAgICAgICAgVENQL0lQIG5ldHdvcmtzLiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgdmFyaW91cworIyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIE5GUyBtb3VudHMuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjCisjIExvY2F0aW9uIG9mIGV4ZWN1dGFibGVzOgorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAteCAiJE5GU19TVEFURCIgfHwgTkZTX1NUQVREPS91c3Ivc2Jpbi9ycGMuc3RhdGQKK3Rlc3QgLXogIiRTVEFURF9QSUQiICYmIFNUQVREX1BJRD0vdmFyL3J1bi9ycGMuc3RhdGQucGlkCisjCisjIFRoZSBkZWZhdWx0IHN0YXRlIGRpcmVjdG9yeSBpcyAvdmFyL2xpYi9uZnMKK3Rlc3QgLW4gIiRORlNfU1RBVEVESVIiIHx8IE5GU19TVEFURURJUj0vdmFyL2xpYi9uZnMKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN0YXJ0dXAgYW5kIHNodXRkb3duIGZ1bmN0aW9ucy4KKyMgIEFjdHVhbCBzdGFydHVwL3NodXRkb3duIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorCitzdGFydF9zdGF0ZCgpeworCWVjaG8gLW4gInN0YXJ0aW5nIHN0YXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfU1RBVEQiIC0tcGlkZmlsZSAiJFNUQVREX1BJRCIKKwllY2hvIGRvbmUKK30KK3N0b3Bfc3RhdGQoKXsKKwllY2hvIC1uICdzdG9wcGluZyBzdGF0ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDEgLS1waWRmaWxlICIkU1RBVERfUElEIgorCWVjaG8gZG9uZQorfQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgc3VwcG9ydGVkIG9wdGlvbnM6CisjICBzdGFydAorIyAgc3RvcAorIyAgcmVzdGFydDogc3RvcHMgYW5kIHN0YXJ0cyBtb3VudGQKKyNGSVhNRTogbmVlZCB0byBjcmVhdGUgdGhlIC92YXIvbGliL25mcy8uLi4gZGlyZWN0b3JpZXMKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydF9zdGF0ZDs7CisgIHN0b3ApCisJc3RvcF9zdGF0ZDs7CisgIHN0YXR1cykKKwlzdGF0dXMgJE5GU19TVEFURAorCWV4aXQgJD87OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKwlleGl0IDE7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzc2VydmVyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDkzYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNzZXJ2ZXIKQEAgLTAsMCArMSwxMzAgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmZzLWtlcm5lbC1zZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgbmZzLWNvbW1vbiAkcG9ydG1hcCBod2Nsb2NrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIG5mcy1jb21tb24gJHBvcnRtYXAgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEtlcm5lbCBORlMgc2VydmVyIHN1cHBvcnQKKyMgRGVzY3JpcHRpb246ICAgICAgIE5GUyBpcyBhIHBvcHVsYXIgcHJvdG9jb2wgZm9yIGZpbGUgc2hhcmluZyBhY3Jvc3MKKyMgICAgICAgICAgICAgICAgICAgIFRDUC9JUCBuZXR3b3Jrcy4gVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIE5GUyBzZXJ2ZXIKKyMgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdmlhIHRoZQorIyAgICAgICAgICAgICAgICAgICAgL2V0Yy9leHBvcnRzIGZpbGUuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKyMKKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE5GU19TRVJWRVJTIG1heSBiZSBzZXQgaW4gL2V0Yy9kZWZhdWx0L25mc2QKKyMgT3RoZXIgY29udHJvbCB2YXJpYWJsZXMgbWF5IGJlIG92ZXJyaWRkZW4gaGVyZSB0b28KK3Rlc3QgLXIgL2V0Yy9kZWZhdWx0L25mc2QgJiYgLiAvZXRjL2RlZmF1bHQvbmZzZAorIworIyBMb2NhdGlvbiBvZiBleGVjdXRhYmxlczoKK3Rlc3QgLXggIiRORlNfTU9VTlREIiB8fCBORlNfTU9VTlREPS91c3Ivc2Jpbi9ycGMubW91bnRkCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IE5GU19ORlNEPS91c3Ivc2Jpbi9ycGMubmZzZAorIworIyBUaGUgdXNlciBtb2RlIHByb2dyYW0gbXVzdCBhbHNvIGV4aXN0IChpdCBqdXN0IHN0YXJ0cyB0aGUga2VybmVsCisjIHRocmVhZHMgdXNpbmcgdGhlIGtlcm5lbCBtb2R1bGUgY29kZSkuCit0ZXN0IC14ICIkTkZTX01PVU5URCIgfHwgZXhpdCAwCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IGV4aXQgMAorIworIyBEZWZhdWx0IGlzIDggdGhyZWFkcywgdmFsdWUgaXMgc2V0dGFibGUgYmV0d2VlbiAxIGFuZCB0aGUgdHJ1ZWx5CisjIHJpZGljdWxvdXMgOTkKK3Rlc3QgIiRORlNfU0VSVkVSUyIgIT0gIiIgJiYgdGVzdCAiJE5GU19TRVJWRVJTIiAtZ3QgMCAmJiB0ZXN0ICIkTkZTX1NFUlZFUlMiIC1sdCAxMDAgfHwgTkZTX1NFUlZFUlM9OAorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3RhcnR1cCBhbmQgc2h1dGRvd24gZnVuY3Rpb25zLgorIyAgQWN0dWFsIHN0YXJ0dXAvc2h1dGRvd24gaXMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisjbW91bnRkCitzdGFydF9tb3VudGQoKXsKKwllY2hvIC1uICdzdGFydGluZyBtb3VudGQ6ICcKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyAiJE5GU19NT1VOVEQiIC0tICItZiAvZXRjL2V4cG9ydHMgJEAiCisJZWNobyBkb25lCit9CitzdG9wX21vdW50ZCgpeworCWVjaG8gLW4gJ3N0b3BwaW5nIG1vdW50ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJE5GU19NT1VOVEQiCisJZWNobyBkb25lCit9CisjCisjbmZzZAorc3RhcnRfbmZzZCgpeworICAgICAgICBtb2Rwcm9iZSAtcSBuZnNkCisJZ3JlcCAtcSBuZnNkIC9wcm9jL2ZpbGVzeXN0ZW1zIHx8IHsKKwkJZWNobyBORlMgZGFlbW9uIHN1cHBvcnQgbm90IGVuYWJsZWQgaW4ga2VybmVsCisJCWV4aXQgMQorICAgICAgICB9CisJZ3JlcCAtcSBuZnNkIC9wcm9jL21vdW50cyB8fCBtb3VudCAtdCBuZnNkIG5mc2QgL3Byb2MvZnMvbmZzZAorCWdyZXAgLXEgbmZzZCAvcHJvYy9tb3VudHMgfHwgeworCQllY2hvIG5mc2QgZmlsZXN5c3RlbSBjb3VsZCBub3QgYmUgbW91bnRlZCBhdCAvcHJvYy9mcy9uZnNkCisJCWV4aXQgMQorICAgICAgICB9CisKKwllY2hvIC1uICJzdGFydGluZyAkMSBuZnNkIGtlcm5lbCB0aHJlYWRzOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfTkZTRCIgLS0gIiRAIgorCWVjaG8gZG9uZQorfQorZGVsYXlfbmZzZCgpeworCWZvciBkZWxheSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IAorCWRvCisJCWlmIHBpZG9mIG5mc2QgPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvIC1uIC4KKwkJCXNsZWVwIDEKKwkJZWxzZQorCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisJcmV0dXJuIDEKK30KK3N0b3BfbmZzZCgpeworCSMgV0FSTklORzogdGhpcyBraWxscyBhbnkgcHJvY2VzcyB3aXRoIHRoZSBleGVjdXRhYmxlCisJIyBuYW1lICduZnNkJy4KKwllY2hvIC1uICdzdG9wcGluZyBuZnNkOiAnCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLW5hbWUgbmZzZAorCWlmIGRlbGF5X25mc2QgfHwgeworCQllY2hvIGZhaWxlZAorCQllY2hvICcgdXNpbmcgc2lnbmFsIDk6ICcKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgOSAtLW5hbWUgbmZzZAorCQlkZWxheV9uZnNkCisJfQorCXRoZW4KKwkJZWNobyBkb25lCisJZWxzZQorCQllY2hvIGZhaWxlZAorCWZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHN1cHBvcnRlZCBvcHRpb25zOgorIyAgc3RhcnQKKyMgIHN0b3AKKyMgIHJlbG9hZDogcmVsb2FkcyB0aGUgZXhwb3J0cyBmaWxlCisjICByZXN0YXJ0OiBzdG9wcyBhbmQgc3RhcnRzIG1vdW50ZAorI0ZJWE1FOiBuZWVkIHRvIGNyZWF0ZSB0aGUgL3Zhci9saWIvbmZzLy4uLiBkaXJlY3RvcmllcworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWV4cG9ydGZzIC1yCisJc3RhcnRfbmZzZCAiJE5GU19TRVJWRVJTIgorCXN0YXJ0X21vdW50ZAorCXRlc3QgLXIgL2V0Yy9leHBvcnRzICYmIGV4cG9ydGZzIC1hOzsKKyAgc3RvcCkJZXhwb3J0ZnMgLXVhCisJc3RvcF9tb3VudGQKKwlzdG9wX25mc2Q7OworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9ycGMubW91bnRkCisJUkVUVkFMPSQ/CisJc3RhdHVzIG5mc2QKKwlydmFsPSQ/CisJWyAkUkVUVkFMIC1lcSAwIF0gJiYgZXhpdCAkcnZhbAorCWV4aXQgJFJFVFZBTDs7CisgIHJlbG9hZCkJdGVzdCAtciAvZXRjL2V4cG9ydHMgJiYgZXhwb3J0ZnMgLXI7OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9wcm9jLWZzLW5mc2QubW91bnQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9wcm9jLWZzLW5mc2QubW91bnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwODAxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL3Byb2MtZnMtbmZzZC5tb3VudApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTRCBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW0KK0FmdGVyPXN5c3RlbWQtbW9kdWxlcy1sb2FkLnNlcnZpY2UKKworW01vdW50XQorV2hhdD1uZnNkCitXaGVyZT0vcHJvYy9mcy9uZnNkCitUeXBlPW5mc2QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHNfMS4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxMDFkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiCkBAIC0wLDAgKzEsMTQxIEBACitTVU1NQVJZID0gInVzZXJzcGFjZSB1dGlsaXRpZXMgZm9yIGtlcm5lbCBuZnMiCitERVNDUklQVElPTiA9ICJUaGUgbmZzLXV0aWxzIHBhY2thZ2UgcHJvdmlkZXMgYSBkYWVtb24gZm9yIHRoZSBrZXJuZWwgXAorTkZTIHNlcnZlciBhbmQgcmVsYXRlZCB0b29scy4iCitIT01FUEFHRSA9ICJodHRwOi8vbmZzLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJNSVQgJiBHUEx2MisgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NWYzYTkzYTVjM2M3ODg4ZGU2MjNiNDZlYTA4NWE4NCIKKworIyB1dGlsLWxpbnV4IGZvciBsaWJibGtpZAorREVQRU5EUyA9ICJsaWJjYXAgbGlibmZzaWRtYXAgbGliZXZlbnQgdXRpbC1saW51eCBzcWxpdGUzIgorUkRFUEVORFNfJHtQTn0tY2xpZW50ID0gInJwY2JpbmQgYmFzaCIKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWNsaWVudCBiYXNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1uZnNkIgorCitpbmhlcml0IHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfS1jbGllbnQiCitVU0VSQUREX1BBUkFNXyR7UE59LWNsaWVudCA9ICItLXN5c3RlbSAgLS1ob21lLWRpciAvdmFyL2xpYi9uZnMgXAorCQkJICAgICAgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBycGN1c2VyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmZzLXV0aWxzLyR7UFZ9L25mcy11dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmZzc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL25mc2NvbW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtc2VydmVyLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vbmZzLW1vdW50ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL25mcy1zdGF0ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2MtZnMtbmZzZC5tb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkZTY3NmI5ZmYzNGI4ZjlhZGRjMWQwODAwZmFiZGY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmNzlkNzBiN2I1OGIyYzhmOWI3OThjNTg3MjExMjdlODJiYjk2MDIyYWRjMDRhNWM0Y2IyNTE2MzBlNjk2YjgiCisKKyMgT25seSBrZXJuZWwtbW9kdWxlLW5mc2QgaXMgcmVxdWlyZWQgaGVyZSAoYnV0IGNhbiBiZSBidWlsdC1pbikgIC0gdGhlIG5mc2QgbW9kdWxlIHdpbGwKKyMgcHVsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZXBlbmRlbmNpZXMuCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tY2xpZW50IgorSU5JVFNDUklQVF9OQU1FID0gIm5mc3NlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LWNsaWVudCA9ICJuZnNjb21tb24iCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfS1jbGllbnQgPSAiZGVmYXVsdHMgMTkgMjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmZzLXNlcnZlci5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1jbGllbnQgPSAibmZzLXN0YXRkLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCisKKyMgLS1lbmFibGUtdXVpZCBpcyBuZWVkIGZvciBjcm9zcy1jb21waWxpbmcKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3RhdGR1c2VyPXJwY3VzZXIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vdW50Y29uZmlnIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJtb3VudC1tb3VudCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5mc3Y0MSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtdXVpZCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXRpcnBjIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzZGNsdHJhY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zdGF0ZHBhdGg9L3Zhci9saWIvbmZzL3N0YXRkIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtdGNwLXdyYXBwZXJzLC0td2l0aG91dC10Y3Atd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1tuZnNpZG1hcF0gPSAiLS1lbmFibGUtbmZzaWRtYXAsLS1kaXNhYmxlLW5mc2lkbWFwLGtleXV0aWxzIgorCitJTkhJQklUX0FVVE9fU1RBR0UgPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWNsaWVudCAke1BOfS1zdGF0cyIKKworQ09ORkZJTEVTXyR7UE59LWNsaWVudCArPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL2V0YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3JtdGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy94dGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9zdGF0ZC9zdGF0ZSBcCisJCQkgICAke3N5c2NvbmZkaXJ9L25mc21vdW50LmNvbmYiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vKm1vdW50Lm5mcyogJHtzYmluZGlyfS8qc3RhdGQgXAorCQkgICAgICAke3NiaW5kaXJ9L3JwYy5pZG1hcGQgJHtzYmluZGlyfS9zbS1ub3RpZnkgXAorCQkgICAgICAke3NiaW5kaXJ9L3Nob3dtb3VudCAke3NiaW5kaXJ9L25mc3N0YXQgXAorCQkgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMgXAorCQkgICAgICAke3N5c2NvbmZkaXJ9L25mcy11dGlscy5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9uZnNtb3VudC5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uIFwKKwkJICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uZnMtc3RhdGQuc2VydmljZSIKK0ZJTEVTXyR7UE59LXN0YXRzID0gIiR7c2JpbmRpcn0vbW91bnRzdGF0cyAke3NiaW5kaXJ9L25mc2lvc3RhdCIKK1JERVBFTkRTXyR7UE59LXN0YXRzID0gInB5dGhvbiIKKworRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIHNlZCAtaSAtZSAncyxzYmluZGlyID0gL3NiaW4sc2JpbmRpciA9ICR7YmFzZV9zYmluZGlyfSxnJyBcCisgICAgICAgICAgICAke1N9L3V0aWxzL21vdW50L01ha2VmaWxlLmFtCisKKyAgICAgICAgc2VkIC1pIC1lICdzLHNiaW5kaXIgPSAvc2JpbixzYmluZGlyID0gJHtiYXNlX3NiaW5kaXJ9LGcnIFwKKyAgICAgICAgICAgICR7U30vdXRpbHMvb3NkX2xvZ2luL01ha2VmaWxlLmFtCit9CisKKyMgTWFrZSBjbGVhbiBuZWVkZWQgYmVjYXVzZSB0aGUgcGFja2FnZSBjb21lcyB3aXRoCisjIHByZWNvbXBpbGVkIDY0LWJpdCBvYmplY3RzIHRoYXQgYnJlYWsgdGhlIGJ1aWxkCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJbWFrZSBjbGVhbgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNzZXJ2ZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25mc3NlcnZlcgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mc2NvbW1vbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnMtdXRpbHMuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L3V0aWxzL21vdW50L25mc21vdW50LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLW1vdW50ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1zdGF0ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisJICAgIGVjaG8gIm5mc2QiID4gJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvbmZzZC5jb25mCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy8KKwkgICAgbG4gLXNmIC4uL3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy9wcm9jLWZzLW5mc2QubW91bnQKKwlmaQorCisJIyBrZXJuZWwgY29kZSBhcyBvZiAzLjggaGFyZC1jb2RlcyB0aGlzIHBhdGggYXMgYSBkZWZhdWx0CisJaW5zdGFsbCAtZCAke0R9L3Zhci9saWIvbmZzL3Y0cmVjb3ZlcnkKKworCSMgY2hvd24gdGhlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcworCWNob3duIC1SIHJwY3VzZXI6cnBjdXNlciAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkCisJY2htb2QgMDY0NCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkL3N0YXRlCisKKwkjIHRoZSBmb2xsb3dpbmcgYXJlIGJ1aWx0IGJ5IENDX0ZPUl9CVUlMRAorCXJtIC1mICR7RH0ke3NiaW5kaXJ9L3JwY2RlYnVnCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZ2VuCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vbG9ja3Rlc3QKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTVhMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jCkBAIC0wLDAgKzEsMzcgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2Zvbm8ub3JnIgorU1VNTUFSWSAgPSAib3BlbiBzb3VyY2UgdGVsZXBob255IgorREVTQ1JJUFRJT04gPSAib0Zvbm8gaXMgYSBzdGFjayBmb3IgbW9iaWxlIHRlbGVwaG9ueSBkZXZpY2VzIG9uIExpbnV4LiBvRm9ubyBzdXBwb3J0cyBzcGVha2luZyB0byB0ZWxlcGhvbnkgZGV2aWNlcyB0aHJvdWdoIHNwZWNpZmljIGRyaXZlcnMsIG9yIHdpdGggZ2VuZXJpYyBBVCBjb21tYW5kcy4iCitMSUNFTlNFICA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vZm9uby5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTNjZTE3ZDU5NzhlZjM0NDVkZWYyNjViOTg4OTljMmVlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgc3lzdGVtZCBibHVldG9vdGgKKworREVQRU5EUyAgPSAiZGJ1cyBnbGliLTIuMCB1ZGV2IG1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIKKworSU5JVFNDUklQVF9OQU1FID0gIm9mb25vIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMjIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9IgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRlc3QiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvZm9uby5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L29mb25vICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vZm9ubworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICJkYnVzIgorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vdWRldiAke3N5c3RlbWRfdW5pdGRpcn0iCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vJHtCUE59L3Rlc3QiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9ICJweXRob24gcHl0aG9uLXB5Z29iamVjdCBweXRob24tZGJ1cyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby8wMDAxLWJhY2t0cmFjZS1EaXNhYmxlLWZvci1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNmI2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gMmQ3MjlhZjA4OTdkN2Q3MmI4M2QxMTE4NzZmZWJmOWUwZWVjMWE2OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDMgQXByIDIwMTUgMjA6NTA6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmFja3RyYWNlOiBEaXNhYmxlIGZvciBub24tZ2xpYmMgQyBsaWJyYXJpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBzcmMvbG9nLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xvZy5jIGIvc3JjL2xvZy5jCitpbmRleCBmZWJjODc0Li45ZGI0YWU3IDEwMDY0NAorLS0tIGEvc3JjL2xvZy5jCisrKysgYi9zcmMvbG9nLmMKK0BAIC0zMCw3ICszMCw5IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDxleGVjaW5mby5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxkbGZjbi5oPgorIAorICNpbmNsdWRlICJvZm9uby5oIgorQEAgLTIxOSw4ICsyMjEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pCisgeworIAlvZm9ub19lcnJvcigiQWJvcnRpbmcgKHNpZ25hbCAlZCkgWyVzXSIsIHNpZ25vLCBwcm9ncmFtX2V4ZWMpOworIAorKyNpZmRlZiBfX0dMSUJDX18KKyAJcHJpbnRfYmFja3RyYWNlKDIpOworLQorKyNlbmRpZgorIAlleGl0KEVYSVRfRkFJTFVSRSk7CisgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9SZXZlcnQtdGVzdC1Db252ZXJ0LXRvLVB5dGhvbi0zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGNhNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaApAQCAtMCwwICsxLDEyNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRnJvbSA1NzJmYzIzZjZlZmQ2NWEyZWY5ZTZjOTU3YjI1MDYxMDg3Mzg2NzJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMjUgQXVnIDIwMTQgMTY6NTk6MzkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJ0ZXN0OiBDb252ZXJ0IHRvIFB5dGhvbiAzIgorCitUaGlzIHJldmVydHMgY29tbWl0IGMwMjdhYjlmYmMxYThlOGM5ZTc2YmNkMTIzZGYxYWQ3Njk2MzA3YzIuCistLS0KKyB0ZXN0L2FjdGl2YXRlLWNvbnRleHQgICAgICAgICAgfCAgMiArLQorIHRlc3QvYW5zd2VyLWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9iYWNrdHJhY2UgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NhbmNlbC11c3NkICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtZGlhbC1udW1iZXIgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1oYW5ndXAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWxpc3QtY2FsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzICAgICAgfCAgMiArLQorIHRlc3QvY2hhbmdlLXBpbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dCAgIHwgIDIgKy0KKyB0ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvY3JlYXRlLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9kZWFjdGl2YXRlLWFsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2RlYWN0aXZhdGUtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvZGlhbC1udW1iZXIgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyAgIHwgIDIgKy0KKyB0ZXN0L2Rpc2FibGUtZ3BycyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZGlzYWJsZS1tb2RlbSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNwbGF5LWljb24gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VuYWJsZS1jYnMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZW5hYmxlLWdwcnMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9lbmFibGUtbW9kZW0gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VudGVyLXBpbiAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZ2V0LWljb24gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9nZXQtb3BlcmF0b3JzICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLWFjdGl2ZSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9oYW5ndXAtYWxsICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hhbmd1cC1jYWxsICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9ob2xkLWFuZC1hbnN3ZXIgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2luaXRpYXRlLXVzc2QgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9saXN0LWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3QtY29udGV4dHMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbGlzdC1tZXNzYWdlcyAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9saXN0LW1vZGVtcyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3Qtb3BlcmF0b3JzICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbG9jay1waW4gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9sb2NrZG93bi1tb2RlbSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L21vbml0b3Itb2Zvbm8gICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9vZmZsaW5lLW1vZGVtICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L29ubGluZS1tb2RlbSAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcHJpdmF0ZS1jaGF0ICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MgIHwgIDIgKy0KKyB0ZXN0L3JlY2VpdmUtc21zICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVqZWN0LWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3JlbGVhc2UtYW5kLXN3YXAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVtb3ZlLWNvbnRleHRzICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZXNldC1waW4gICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycyAgICAgICAgfCAgMiArLQorIHRlc3Qvc2VuZC1zbXMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXVzc2QgICAgICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3Qvc2VuZC12Y2FsICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXZjYXJkICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWNicy10b3BpY3MgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eSAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1mYXN0LWRvcm1hbmN5ICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWdzbS1iYW5kICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtbWljLXZvbHVtZSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1tbXMtZGV0YWlscyAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LW1zaXNkbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1zcGVha2VyLXZvbHVtZSAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSAgICAgICB8ICAyICstCisgdGVzdC9zZXQtdHR5ICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC11bXRzLWJhbmQgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyAgICAgICB8ICAyICstCisgdGVzdC9zd2FwLWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZSAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYWxsLWJhcnJpbmcgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncyAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYnMgICAgICAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L3Rlc3QtZ25zcyAgICAgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtbW9kZW0gICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbiB8ICAyICstCisgdGVzdC90ZXN0LXBob25lYm9vayAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24gICAgfCAgMiArLQorIHRlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNtcyAgICAgICAgICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgdGVzdC90ZXN0LXNzICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zcy1jb250cm9sLWNmICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3RrLW1lbnUgICAgICAgICAgICAgfCAzNCArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgdGVzdC91bmxvY2stcGluICAgICAgICAgICAgICAgIHwgIDIgKy0KKyA5NCBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0IGIvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CitpbmRleCBlNGZjNzAyLi40MjQxMzk2IDEwMDc1NQorLS0tIGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2FjdGl2YXRlLWNvbnRleHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9hbnN3ZXItY2FsbHMgYi90ZXN0L2Fuc3dlci1jYWxscworaW5kZXggZGFhNzk0Yi4uNDVmZjA4ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvYW5zd2VyLWNhbGxzCisrKysgYi90ZXN0L2Fuc3dlci1jYWxscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvYmFja3RyYWNlIGIvdGVzdC9iYWNrdHJhY2UKK2luZGV4IDAzYzc2MzIuLmM2MjQ3MDkgMTAwNzU1CistLS0gYS90ZXN0L2JhY2t0cmFjZQorKysrIGIvdGVzdC9iYWNrdHJhY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IG9zCisgaW1wb3J0IHJlCitkaWZmIC0tZ2l0IGEvdGVzdC9jYW5jZWwtdXNzZCBiL3Rlc3QvY2FuY2VsLXVzc2QKK2luZGV4IGU3NTU5YmEuLjE3OTdmMjYgMTAwNzU1CistLS0gYS90ZXN0L2NhbmNlbC11c3NkCisrKysgYi90ZXN0L2NhbmNlbC11c3NkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCitpbmRleCAzYWRjMTRkLi4wZGRjMGNkIDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorKysrIGIvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKK2luZGV4IGFjMTZhMmQuLmEzY2NhMDEgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKKysrKyBiL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIgYi90ZXN0L2NkbWEtZGlhbC1udW1iZXIKK2luZGV4IDY4MzQzMWUuLjljZGZiMjQgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtaGFuZ3VwIGIvdGVzdC9jZG1hLWhhbmd1cAoraW5kZXggNDFmZmE2MC4uNDkzZWNlNCAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1oYW5ndXAKKysrKyBiL3Rlc3QvY2RtYS1oYW5ndXAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWxpc3QtY2FsbCBiL3Rlc3QvY2RtYS1saXN0LWNhbGwKK2luZGV4IGIxMzIzNTMuLjVkMzZhNjkgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtbGlzdC1jYWxsCisrKysgYi90ZXN0L2NkbWEtbGlzdC1jYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscyBiL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKK2luZGV4IGE2MGM4NmUuLmEyODZiMGUgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCisrKysgYi90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY2hhbmdlLXBpbiBiL3Rlc3QvY2hhbmdlLXBpbgoraW5kZXggMzAxYzZjZS4uMDAwY2U1MyAxMDA3NTUKKy0tLSBhL3Rlc3QvY2hhbmdlLXBpbgorKysrIGIvdGVzdC9jaGFuZ2UtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQgYi90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0CitpbmRleCAxMDg5MDUzLi5lZmQwOTk4IDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorKysrIGIvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitpbmRleCA1OTgzMzZmLi5lNWJlMDhkIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKKysrKyBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkgYi90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5CitpbmRleCAxYjc2MDEwLi45NzA0N2MzIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorKysrIGIvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RlYWN0aXZhdGUtYWxsIGIvdGVzdC9kZWFjdGl2YXRlLWFsbAoraW5kZXggNWFhODU4Ny4uNDI3MDA5ZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKKysrKyBiL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAoraW5kZXggNWM4NmE3MS4uZGY0N2QyZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RpYWwtbnVtYmVyIGIvdGVzdC9kaWFsLW51bWJlcgoraW5kZXggZmU1YWRhZC4uZWU2NzRkOSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvZGlhbC1udW1iZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDgxMWU0ZmEuLjM2MDk4MTYgMTAwNzU1CistLS0gYS90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKK2RpZmYgLS1naXQgYS90ZXN0L2Rpc2FibGUtZ3BycyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitpbmRleCA2MWNlMjE2Li5jNmM0MGE1IDEwMDc1NQorLS0tIGEvdGVzdC9kaXNhYmxlLWdwcnMKKysrKyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzYWJsZS1tb2RlbSBiL3Rlc3QvZGlzYWJsZS1tb2RlbQoraW5kZXggNmZiYTg1Ny4uY2E4YzhkOCAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlzYWJsZS1tb2RlbQorKysrIGIvdGVzdC9kaXNhYmxlLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzcGxheS1pY29uIGIvdGVzdC9kaXNwbGF5LWljb24KK2luZGV4IGFjNDA4MTguLjc1M2QxNGQgMTAwNzU1CistLS0gYS90ZXN0L2Rpc3BsYXktaWNvbgorKysrIGIvdGVzdC9kaXNwbGF5LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtY2JzIGIvdGVzdC9lbmFibGUtY2JzCitpbmRleCA0YThiZjY2Li5jMDhiZjJiIDEwMDc1NQorLS0tIGEvdGVzdC9lbmFibGUtY2JzCisrKysgYi90ZXN0L2VuYWJsZS1jYnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtZ3BycyBiL3Rlc3QvZW5hYmxlLWdwcnMKK2luZGV4IDY4ZDVlZjAuLjg2NjQ4OTEgMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1ncHJzCisrKysgYi90ZXN0L2VuYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZW5hYmxlLW1vZGVtIGIvdGVzdC9lbmFibGUtbW9kZW0KK2luZGV4IGZjNTk1OGEuLmRmYWFhYTggMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1tb2RlbQorKysrIGIvdGVzdC9lbmFibGUtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbnRlci1waW4gYi90ZXN0L2VudGVyLXBpbgoraW5kZXggOTU1NjM2My4uYzZlZTY2OSAxMDA3NTUKKy0tLSBhL3Rlc3QvZW50ZXItcGluCisrKysgYi90ZXN0L2VudGVyLXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2dldC1pY29uIGIvdGVzdC9nZXQtaWNvbgoraW5kZXggNTU2OWEzMy4uZmRhYWVlNyAxMDA3NTUKKy0tLSBhL3Rlc3QvZ2V0LWljb24KKysrKyBiL3Rlc3QvZ2V0LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtb3BlcmF0b3JzIGIvdGVzdC9nZXQtb3BlcmF0b3JzCitpbmRleCAwZjM1YzgwLi42MjM1NGM1IDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtb3BlcmF0b3JzCisrKysgYi90ZXN0L2dldC1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlIGIvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCitpbmRleCA3YmE2MzY1Li43N2QyMGQwIDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCisrKysgYi90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMsIHN5cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZSBiL3Rlc3QvaGFuZ3VwLWFjdGl2ZQoraW5kZXggODJlMGViMC4uNWFmNjJhYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZQorKysrIGIvdGVzdC9oYW5ndXAtYWN0aXZlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFsbCBiL3Rlc3QvaGFuZ3VwLWFsbAoraW5kZXggM2EwMTM4ZC4uMzI5MzNkYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFsbAorKysrIGIvdGVzdC9oYW5ndXAtYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWNhbGwgYi90ZXN0L2hhbmd1cC1jYWxsCitpbmRleCA1YTJkZTIwLi40NDcwMjBjIDEwMDc1NQorLS0tIGEvdGVzdC9oYW5ndXAtY2FsbAorKysrIGIvdGVzdC9oYW5ndXAtY2FsbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5IGIvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQoraW5kZXggMjQ3NTFjMy4uNDhmZTM0MiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKKysrKyBiL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9ob2xkLWFuZC1hbnN3ZXIgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgoraW5kZXggZGEzYmU1Ny4uMmM0N2UyNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCisrKysgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2luaXRpYXRlLXVzc2QgYi90ZXN0L2luaXRpYXRlLXVzc2QKK2luZGV4IGZhZjUwZDAuLmQ3MDIyZjEgMTAwNzU1CistLS0gYS90ZXN0L2luaXRpYXRlLXVzc2QKKysrKyBiL3Rlc3QvaW5pdGlhdGUtdXNzZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK0BAIC00NSw3ICs0NSw3IEBAIGlmIHN0YXRlID09ICJpZGxlIjoKKyBwcmludCgiU3RhdGU6ICVzIiAlIChzdGF0ZSkpCisgCisgd2hpbGUgc3RhdGUgPT0gInVzZXItcmVzcG9uc2UiOgorLQlyZXNwb25zZSA9IGlucHV0KCJFbnRlciByZXNwb25zZTogIikKKysJcmVzcG9uc2UgPSByYXdfaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQorIAorIAlyZXN1bHQgPSB1c3NkLlJlc3BvbmQocmVzcG9uc2UsIHRpbWVvdXQ9MTAwKQorIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1jYWxscyBiL3Rlc3QvbGlzdC1jYWxscworaW5kZXggZjNlZTk5MS4uMDg2NjhjNiAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1jYWxscworKysrIGIvdGVzdC9saXN0LWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LWNvbnRleHRzIGIvdGVzdC9saXN0LWNvbnRleHRzCitpbmRleCA3ODI3OGNhLi5mMGQ0MDk0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LWNvbnRleHRzCisrKysgYi90ZXN0L2xpc3QtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3QtbWVzc2FnZXMgYi90ZXN0L2xpc3QtbWVzc2FnZXMKK2luZGV4IDlmNWJjZTMuLmNmY2NiZWEgMTAwNzU1CistLS0gYS90ZXN0L2xpc3QtbWVzc2FnZXMKKysrKyBiL3Rlc3QvbGlzdC1tZXNzYWdlcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1tb2RlbXMgYi90ZXN0L2xpc3QtbW9kZW1zCitpbmRleCBiOWY1MTBhLi5lZDY2MTI0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW1vZGVtcworKysrIGIvdGVzdC9saXN0LW1vZGVtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1vcGVyYXRvcnMgYi90ZXN0L2xpc3Qtb3BlcmF0b3JzCitpbmRleCAwNjRjNGUzLi4zNDliZjQxIDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW9wZXJhdG9ycworKysrIGIvdGVzdC9saXN0LW9wZXJhdG9ycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2xvY2stcGluIGIvdGVzdC9sb2NrLXBpbgoraW5kZXggOTZlYTljMi4uNTU3OTczNSAxMDA3NTUKKy0tLSBhL3Rlc3QvbG9jay1waW4KKysrKyBiL3Rlc3QvbG9jay1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9sb2NrZG93bi1tb2RlbSBiL3Rlc3QvbG9ja2Rvd24tbW9kZW0KK2luZGV4IDRlMDQyMDUuLjc4MWFiYjYgMTAwNzU1CistLS0gYS90ZXN0L2xvY2tkb3duLW1vZGVtCisrKysgYi90ZXN0L2xvY2tkb3duLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvbW9uaXRvci1vZm9ubyBiL3Rlc3QvbW9uaXRvci1vZm9ubworaW5kZXggODgzMDc1Ny4uYmQzMTYxNyAxMDA3NTUKKy0tLSBhL3Rlc3QvbW9uaXRvci1vZm9ubworKysrIGIvdGVzdC9tb25pdG9yLW9mb25vCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorQEAgLTYsNyArNiw3IEBAIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorIAorIF9kYnVzMnB5ID0geworLQlkYnVzLlN0cmluZyA6IHN0ciwKKysJZGJ1cy5TdHJpbmcgOiB1bmljb2RlLAorIAlkYnVzLlVJbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQxNiA6IGludCwKK2RpZmYgLS1naXQgYS90ZXN0L29mZmxpbmUtbW9kZW0gYi90ZXN0L29mZmxpbmUtbW9kZW0KK2luZGV4IGU4YzA0M2EuLmVhMWY1MjIgMTAwNzU1CistLS0gYS90ZXN0L29mZmxpbmUtbW9kZW0KKysrKyBiL3Rlc3Qvb2ZmbGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9vbmxpbmUtbW9kZW0gYi90ZXN0L29ubGluZS1tb2RlbQoraW5kZXggMDI5YzRhNS4uMzEwZWQ3ZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvb25saW5lLW1vZGVtCisrKysgYi90ZXN0L29ubGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9wcml2YXRlLWNoYXQgYi90ZXN0L3ByaXZhdGUtY2hhdAoraW5kZXggZTdlNTQwNi4uZWYyZWY2YyAxMDA3NTUKKy0tLSBhL3Rlc3QvcHJpdmF0ZS1jaGF0CisrKysgYi90ZXN0L3ByaXZhdGUtY2hhdAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitpbmRleCA4YTNlY2ZhLi4wZjA1OGIyIDEwMDc1NQorLS0tIGEvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKKysrKyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBvcworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWNlaXZlLXNtcyBiL3Rlc3QvcmVjZWl2ZS1zbXMKK2luZGV4IGEwYzY5MTUuLmMyM2ViMTQgMTAwNzU1CistLS0gYS90ZXN0L3JlY2VpdmUtc21zCisrKysgYi90ZXN0L3JlY2VpdmUtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvcmVqZWN0LWNhbGxzIGIvdGVzdC9yZWplY3QtY2FsbHMKK2luZGV4IDcxYjI0M2UuLjllZGYxZmYgMTAwNzU1CistLS0gYS90ZXN0L3JlamVjdC1jYWxscworKysrIGIvdGVzdC9yZWplY3QtY2FsbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlciBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitpbmRleCBkZWM4ZTE3Li4yNWZkODE4IDEwMDc1NQorLS0tIGEvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKKysrKyBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcCBiL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAoraW5kZXggY2I4Yzg0ZS4uN2IzNTY5ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAorKysrIGIvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVtb3ZlLWNvbnRleHRzIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK2luZGV4IGI1NDE4NGUuLmM1MDgyY2IgMTAwNzU1CistLS0gYS90ZXN0L3JlbW92ZS1jb250ZXh0cworKysrIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Jlc2V0LXBpbiBiL3Rlc3QvcmVzZXQtcGluCitpbmRleCAzZmJkMTI2Li5iNDI5MjU0IDEwMDc1NQorLS0tIGEvdGVzdC9yZXNldC1waW4KKysrKyBiL3Rlc3QvcmVzZXQtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK2luZGV4IGI0ZmMwNWUuLjc0OWM3MTAgMTAwNzU1CistLS0gYS90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycworKysrIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXNtcyBiL3Rlc3Qvc2VuZC1zbXMKK2luZGV4IDk4ODA4YWEuLmUwNjQ0NGQgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtc21zCisrKysgYi90ZXN0L3NlbmQtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC11c3NkIGIvdGVzdC9zZW5kLXVzc2QKK2luZGV4IGEyMGUwOTguLmU1ODU4ODMgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdXNzZAorKysrIGIvdGVzdC9zZW5kLXVzc2QKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitAQCAtNDYsNyArNDYsNyBAQCBpZiBzdGF0ZSA9PSAiaWRsZSI6CisgcHJpbnQoIlN0YXRlOiAlcyIgJSAoc3RhdGUpKQorIAorIHdoaWxlIHN0YXRlID09ICJ1c2VyLXJlc3BvbnNlIjoKKy0JcmVzcG9uc2UgPSBpbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCisrCXJlc3BvbnNlID0gcmF3X2lucHV0KCJFbnRlciByZXNwb25zZTogIikKKyAKKyAJcHJpbnQodXNzZC5SZXNwb25kKHJlc3BvbnNlLCB0aW1lb3V0PTEwMCkpCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXZjYWwgYi90ZXN0L3NlbmQtdmNhbAoraW5kZXggNTY2ZGFlZi4uN2Y4MjcyYiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2VuZC12Y2FsCisrKysgYi90ZXN0L3NlbmQtdmNhbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NlbmQtdmNhcmQgYi90ZXN0L3NlbmQtdmNhcmQKK2luZGV4IDRkZWRmNTEuLjI1MGIzNmYgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdmNhcmQKKysrKyBiL3Rlc3Qvc2VuZC12Y2FyZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgYi90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDQ5ZDFjZTAuLjlmZDM1OGIgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKKysrKyBiL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtY2JzLXRvcGljcyBiL3Rlc3Qvc2V0LWNicy10b3BpY3MKK2luZGV4IGRiOTVlMTYuLjc4ZDZkNDQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYnMtdG9waWNzCisrKysgYi90ZXN0L3NldC1jYnMtdG9waWNzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkgYi90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5CitpbmRleCA1ZmY3YTY3Li42NGE2ZmI4IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorKysrIGIvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1mYXN0LWRvcm1hbmN5IGIvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQoraW5kZXggZWY3N2JjZC4uN2JmNzcxNSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKKysrKyBiL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtZ3NtLWJhbmQgYi90ZXN0L3NldC1nc20tYmFuZAoraW5kZXggYjM3YmNiNS4uM2MxN2MxMCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWdzbS1iYW5kCisrKysgYi90ZXN0L3NldC1nc20tYmFuZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1taWMtdm9sdW1lIGIvdGVzdC9zZXQtbWljLXZvbHVtZQoraW5kZXggY2Q2YzczZi4uZTBiZmY0OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1pYy12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LW1pYy12b2x1bWUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtbW1zLWRldGFpbHMgYi90ZXN0L3NldC1tbXMtZGV0YWlscworaW5kZXggNmVlNTlmYS4uZDJkMDgzOCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCisrKysgYi90ZXN0L3NldC1tbXMtZGV0YWlscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1tc2lzZG4gYi90ZXN0L3NldC1tc2lzZG4KK2luZGV4IGI1ZmU4MTkuLjAxZjI4NGQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1tc2lzZG4KKysrKyBiL3Rlc3Qvc2V0LW1zaXNkbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQgYi90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKK2luZGV4IDY5OGM4YjYuLjllM2UwNTggMTAwNzU1CistLS0gYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKKysrKyBiL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1zcGVha2VyLXZvbHVtZSBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitpbmRleCA2ZDRlMzAxLi43OTYyZjM5IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSBiL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQoraW5kZXggYjU0OWFiYy4uMjY2NmNiZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQorKysrIGIvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXR0eSBiL3Rlc3Qvc2V0LXR0eQoraW5kZXggZWVkMWZiYS4uNTNkNmI5OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXR0eQorKysrIGIvdGVzdC9zZXQtdHR5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVtdHMtYmFuZCBiL3Rlc3Qvc2V0LXVtdHMtYmFuZAoraW5kZXggMGJhZTVjNC4uYzFlNjQ0OCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVtdHMtYmFuZAorKysrIGIvdGVzdC9zZXQtdW10cy1iYW5kCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyBiL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworaW5kZXggMjg4ZDRlMS4uYTRlZmU0ZiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworKysrIGIvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc3dhcC1jYWxscyBiL3Rlc3Qvc3dhcC1jYWxscworaW5kZXggMDE4YThkMy4uZWViMjU3YiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc3dhcC1jYWxscworKysrIGIvdGVzdC9zd2FwLWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK2luZGV4IDZlODdlNjEuLjBmMWY1N2YgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQorKysrIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcgYi90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCitpbmRleCBlZWRiNjlmLi5iZTRhYjU3IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWNhbGwtYmFycmluZworKysrIGIvdGVzdC90ZXN0LWNhbGwtYmFycmluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDVkYjg0ZDcuLjAxYTcyOTQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK2luZGV4IDQzNTU5NGMuLjVkN2VlNDkgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncworKysrIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNicyBiL3Rlc3QvdGVzdC1jYnMKK2luZGV4IGE1Y2VjMDYuLjEzY2RkODAgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2JzCisrKysgYi90ZXN0L3Rlc3QtY2JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorQEAgLTc4LDcgKzc4LDcgQEAgZGVmIHNldF90b3BpY3MoY2JzKToKKyAJaW52YWxpZERhdGEgPSBGYWxzZTsKKyAJaW5kZXggPSAwCisgCistCXRvcGljcyA9IGlucHV0KCdFbnRlciB0aGUgdG9waWMgSUQocykgeW91IHdhbnQgdG8gcmVnaXN0ZXIgdG86ICcpCisrCXRvcGljcyA9IHJhd19pbnB1dCgnRW50ZXIgdGhlIHRvcGljIElEKHMpIHlvdSB3YW50IHRvIHJlZ2lzdGVyIHRvOiAnKQorIAorIAl3aGlsZSBpbmRleCA8IGxlbih0b3BpY3MpOgorIAkJaWYgdG9waWNzW2luZGV4XSA9PSAnLCcgb3IgdG9waWNzW2luZGV4XSA9PSAnLSc6CitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWduc3MgYi90ZXN0L3Rlc3QtZ25zcworaW5kZXggNmFlNjRkYi4uYWEwYjE2MCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1nbnNzCisrKysgYi90ZXN0L3Rlc3QtZ25zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitAQCAtNDAsNyArNDAsNyBAQCBkZWYgcHJpbnRfbWVudSgpOgorIGRlZiBzdGRpbl9oYW5kbGVyKGNoYW5uZWwsIGNvbmRpdGlvbiwgZ25zcywgcGF0aCk6CisgCWluX2tleSA9IG9zLnJlYWQoY2hhbm5lbC51bml4X2dldF9mZCgpLCAxNjApLnJzdHJpcCgpLmRlY29kZSgnVVRGLTgnKQorIAlpZiBpbl9rZXkgPT0gJzAnOgorLQkJeG1sID0gaW5wdXQoJ3R5cGUgdGhlIGVsZW1lbnQgYW5kIHByZXNzIGVudGVyOiAnKQorKwkJeG1sID0gcmF3X2lucHV0KCd0eXBlIHRoZSBlbGVtZW50IGFuZCBwcmVzcyBlbnRlcjogJykKKyAJCXRyeToKKyAJCQlnbnNzLlNlbmRQb3NpdGlvbmluZ0VsZW1lbnQoZGJ1cy5TdHJpbmcoeG1sKSkKKyAJCQlwcmludCgib2siKQorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcgYi90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCitpbmRleCA0MzI4NjJlLi5iOTNmYmYzIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworKysrIGIvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW1vZGVtIGIvdGVzdC90ZXN0LW1vZGVtCitpbmRleCBhYTM4YjFmLi4yOWRiZjE0IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1vZGVtCisrKysgYi90ZXN0L3Rlc3QtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uIGIvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCitpbmRleCA2OGI0MzQ3Li5jNWFkNTg2IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCisrKysgYi90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1waG9uZWJvb2sgYi90ZXN0L3Rlc3QtcGhvbmVib29rCitpbmRleCA0MjY0NmQzLi4xMTZmZDRmIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXBob25lYm9vaworKysrIGIvdGVzdC90ZXN0LXBob25lYm9vaworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uIGIvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCitpbmRleCBkOTcyYWQzLi5lY2M2YWZiIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCisrKysgYi90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZyBiL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKK2luZGV4IGYyMmVmZDIuLjE4OGFjMWUgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCisrKysgYi90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zbXMgYi90ZXN0L3Rlc3Qtc21zCitpbmRleCAzMGFjNjUxLi40OTkzNWUxIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNtcworKysrIGIvdGVzdC90ZXN0LXNtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorQEAgLTEzMiw3ICsxMzIsNyBAQCBkZWYgc3RkaW5faGFuZGxlcihjaGFubmVsLCBjb25kaXRpb24sIHNtcywgdmFsdWUsIG51bWJlcik6CisgCQlsb2NrID0gIm9uIgorIAkJaWYgaW5fa2V5ID09ICcwJzoKKyAJCQlwcmludF9zZW5kX3Ntc19tZW51KCkKKy0JCQlzbXNfdHlwZSA9IGlucHV0KCdTZWxlY3QgU01TIHR5cGU6ICcpCisrCQkJc21zX3R5cGUgPSByYXdfaW5wdXQoJ1NlbGVjdCBTTVMgdHlwZTogJykKKyAKKyAJCQlpZiBzbXNfdHlwZSA9PSAnMSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgdmFsdWUpCitAQCAtMTUwLDQ5ICsxNTAsNDkgQEAgZGVmIHN0ZGluX2hhbmRsZXIoY2hhbm5lbCwgY29uZGl0aW9uLCBzbXMsIHZhbHVlLCBudW1iZXIpOgorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzEnOgorIAkJCW1lc3NhZ2VfZGVsaXZlcnlfcmVwb3J0KHNtcywgMSkKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDEpIiArIHZhbHVlICsKKyAJCQkJCQkiOiBVc2VEZWxpdmVyeVJlcG9ydHNbVFJVRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICcyJzoKKyAJCQltZXNzYWdlX2RlbGl2ZXJ5X3JlcG9ydChzbXMsIDApCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigyKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFVzZURlbGl2ZXJ5UmVwb3J0c1tGQUxTRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICczJzoKKyAJCQltZXNzYWdlX3NlcnZpY2VfY2VudGVyX2FkZHJlc3Moc21zLCBTQ0EpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigzKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFNlcnZpY2VDZW50ZXJBZGRyZXNzIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnNCc6CisgCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAicHMtb25seSIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig0KSAiICsgdmFsdWUgKworIAkJCQkJCSI6IEJlYXJlcltwcy1vbmx5XSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzUnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLW9ubHkiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNSkgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbY3Mtb25seV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICc2JzoKKyAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJwcy1wcmVmZXJyZWQiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNikgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbcHMtcHJlZmVycmVkXSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzcnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLXByZWZlcnJlZCIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcyxudW1iZXIsICgiKDcpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogQmVhcmVyW2NzLXByZWZlcnJlZF0iKSkKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MgYi90ZXN0L3Rlc3Qtc3MKK2luZGV4IDRjZDg3MzIuLjJjODA4MDYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MKKysrKyBiL3Rlc3QvdGVzdC1zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitpbmRleCBkZGFlNmQzLi44NmJhYzliIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKKysrKyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK2luZGV4IDA5NWViNWQuLmQzMGJmNGYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgorKysrIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworaW5kZXggODE4MDQ3NC4uZTBlZDFkMSAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCisrKysgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3RrLW1lbnUgYi90ZXN0L3Rlc3Qtc3RrLW1lbnUKK2luZGV4IDBjZjhmYTIuLmFjMGE1YmQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3RrLW1lbnUKKysrKyBiL3Rlc3QvdGVzdC1zdGstbWVudQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK0BAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJCWluZGV4ICs9IDEKKyAKKyAJCXByaW50KCJcbkRlZmF1bHQ6ICVkIiAlIChkZWZhdWx0KSkKKy0JCXNlbGVjdCA9IGlucHV0KCJFbnRlciBTZWxlY3Rpb24gKHQsIGIpOiIpCisrCQlzZWxlY3QgPSByYXdfaW5wdXQoIkVudGVyIFNlbGVjdGlvbiAodCwgYik6IikKKyAKKyAJCWlmIHNlbGVjdCA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC03NSw3ICs3NSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkRpc3BsYXlUZXh0ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorIAkJcHJpbnQoIlVyZ2VudDogKCVkKSIgJSAodXJnZW50KSkKKy0JCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gY2xlYXIgKCd0JyB0ZXJtaW5hdGVzLCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBjbGVhciAoJ3QnIHRlcm1pbmF0ZXMsICIKKyAJCQkJCQkiJ2InIGdvZXMgYmFjaywgJ24nIGJ1c3ksICIKKyAJCQkJCQkiJ3cnIHJldHVybiBhbmQgd2FpdCk6IikKKyAKK0BAIC0xMDgsNyArMTA4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiSGlkZSB0eXBpbmc6ICglcykiICUgKGhpZGVfdHlwaW5nKSkKKyAJCXByaW50KCJFbnRlciBjaGFyYWN0ZXJzLCBtaW46ICVkLCBtYXg6ICVkOiIgJSAobWluX2NoYXJzLAorIAkJCQkJCQkJbWF4X2NoYXJzKSkKKy0JCXVzZXJpbiA9IGlucHV0KCIiKQorKwkJdXNlcmluID0gcmF3X2lucHV0KCIiKQorIAorIAkJcmV0dXJuIHVzZXJpbgorIAorQEAgLTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJIaWRlIHR5cGluZzogKCVzKSIgJSAoaGlkZV90eXBpbmcpKQorIAkJcHJpbnQoIkVudGVyIGRpZ2l0cywgbWluOiAlZCwgbWF4OiAlZDoiICUgKG1pbl9jaGFycywKKyAJCQkJCQkJCW1heF9jaGFycykpCistCQl1c2VyaW4gPSBpbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKysJCXVzZXJpbiA9IHJhd19pbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKyAKKyAJCWlmIHVzZXJpbiA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xMzYsNyArMTM2LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0S2V5KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgS2V5ICh0LCBiKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBLZXkgKHQsIGIpOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTUwLDcgKzE1MCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgUmVxdWVzdERpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgRGlnaXQgKHQsIGIpOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIERpZ2l0ICh0LCBiKToiKQorIAorIAkJaWYga2V5ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTE2NCw3ICsxNjQsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIFJlcXVlc3RRdWlja0RpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKyAKKyAJCWlmIGtleSA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xNzgsNyArMTc4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0Q29uZmlybWF0aW9uKHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCBiLCB5LCBuKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIGIsIHksIG4pOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTk0LDcgKzE5NCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgQ29uZmlybUNhbGxTZXR1cChzZWxmLCBpbmZvLCBpY29uKToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTIwOSw3ICsyMDksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKyAJCXByaW50KCJVUkwgKCVzKSIgJSAodXJsKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAoeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAneSc6CisgCQkJcmV0dXJuIFRydWUKK0BAIC0yMzIsNyArMjMyLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlzaWduYWwuYWxhcm0oNSkKKyAKKyAJCXRyeToKKy0JCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorKwkJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorIAkJCQkJCQkgIiBzaW5nbGUgdG9uZSAodCk6IikKKyAJCQlzaWduYWwuYWxhcm0oMCkKKyAKK0BAIC0yNTAsNyArMjUwLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiTG9vcFRvbmU6ICVzIiAlICh0b25lKSkKKyAJCXByaW50KCJUZXh0OiAlcyIgJSAodGV4dCkpCisgCQlwcmludCgiSWNvbjogJWQiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgdGltZW91dCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBlbmQgYmVmb3JlIHRpbWVvdXQgIgorIAkJCQkiKCd0JyB0ZXJtaW5hdGVzLCAndycgcmV0dXJuIGFuZCB3YWl0KToiKQorIAorIAkJaWYga2V5ID09ICd3JzoKK0BAIC0yNzksNyArMjc5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBEaXNwbGF5QWN0aW9uKHNlbGYsIHRleHQsIGljb24pOgorIAkJcHJpbnQoIlRleHQ6ICglcykiICUgKHRleHQpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgJ3QnIHRvIHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiAiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyAndCcgdG8gdGVybWluYXRlIHRoZSBzZXNzaW9uICIpCisgCisgCQlpZiBrZXkgPT0gJ3QnOgorIAkJCXJhaXNlIEVuZFNlc3Npb24oIlVzZXIgd2lzaGVzIHRvIHRlcm1pbmF0ZSBzZXNzaW9uIikKK0BAIC0yODksNyArMjg5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBDb25maXJtT3BlbkNoYW5uZWwoc2VsZiwgaW5mbywgaWNvbik6CisgCQlwcmludCgiT3BlbiBjaGFubmVsIGNvbmZpcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTI5OSw3ICsyOTksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCQlyZXR1cm4gRmFsc2UKKyAKKyBfZGJ1czJweSA9IHsKKy0JZGJ1cy5TdHJpbmcgOiBzdHIsCisrCWRidXMuU3RyaW5nIDogdW5pY29kZSwKKyAJZGJ1cy5VSW50MzIgOiBpbnQsCisgCWRidXMuSW50MzIgOiBpbnQsCisgCWRidXMuSW50MTYgOiBpbnQsCitAQCAtMzk2LDcgKzM5Niw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgCQlleGNlcHQ6CisgCQkJcGFzcworIAorLQkJc2VsZWN0ID0gaW50KGlucHV0KCJFbnRlciBTZWxlY3Rpb246ICIpKQorKwkJc2VsZWN0ID0gaW50KHJhd19pbnB1dCgiRW50ZXIgU2VsZWN0aW9uOiAiKSkKKyAJCXN0ay5TZWxlY3RJdGVtKHNlbGVjdCwgcGF0aCkKKyAJZWxpZiBtb2RlID09ICdhZ2VudCc6CisgCQlwYXRoID0gIi90ZXN0L2FnZW50IgorZGlmZiAtLWdpdCBhL3Rlc3QvdW5sb2NrLXBpbiBiL3Rlc3QvdW5sb2NrLXBpbgoraW5kZXggNjFmNDc2NS4uMTBiNjYyNiAxMDA3NTUKKy0tLSBhL3Rlc3QvdW5sb2NrLXBpbgorKysrIGIvdGVzdC91bmxvY2stcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vb2Zvbm8gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vb2Zvbm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5OTcwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9vZm9ubwpAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKworREFFTU9OPS91c3Ivc2Jpbi9vZm9ub2QKK1BJREZJTEU9L3Zhci9ydW4vb2Zvbm9kLnBpZAorREVTQz0iVGVsZXBob255IGRhZW1vbiIKKworaWYgWyAtZiAvZXRjL2RlZmF1bHQvb2Zvbm8gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9vZm9ubworZmkKKworc2V0IC1lCisKK2RvX3N0YXJ0KCkgeworCSREQUVNT04KK30KKworZG9fc3RvcCgpIHsKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIG9mb25vZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub18xLjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG9mb25vLmluYworCitTUkNfVVJJICA9ICJcCisgICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgZmlsZTovL29mb25vIFwKKyAgZmlsZTovL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMzFiNWI1NWExZDY4MzU0YmZmNzcxZDNlZGYwMjgyOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDNiOThkYWRlY2U4YmM4MDRjMGJkMTZiOTZkM2RiNWEzYmIwZjg0YWY2NGIzZDY3OTI0ZGEyZDFhNzU0YjA3IgorCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhZmI3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBvZm9uby5pbmMKKworUwkgPSAiJHtXT1JLRElSfS9naXQiCitTUkNSRVYgPSAiMTQ1NDRkNTk5NjgzNmY2Mjg2MTNjMmNlNTQ0MzgwZWU2ZmM4ZjUxNCIKK1BWCSA9ICIwLjEyLWdpdCR7U1JDUFZ9IgorUFIgPSAicjUiCisKK1NSQ19VUkkgID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbmV0d29yay9vZm9uby9vZm9uby5naXQgXAorCSAgICBmaWxlOi8vb2Zvbm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgJHtTfS9ib290c3RyYXAKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzI1YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorQWRqdXN0IHRlc3QgY2FzZXMgdG8gd29yayB3aXRoIGJ1c3lib3guCisKKy0gUmVwbGFjZSBkZCBwYXJhbWV0ZXIgIm9icyIgd2l0aCAiYnMiLgorLSBSZXBsYWNlICJoZWFkIC08bnVtPiIgd2l0aCAiaGVhZCAtbiA8bnVtPiIuCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NoLTYuOHAxLm9yaWcvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoCitAQCAtMTcsNyArMTcsNyBAQCBmb3IgYyBpbiBgJHtTU0h9IC1RIGNpcGhlcmA7IGRvIG49MDsgZm9yCisgCQlwcmludGYgIiUtNjBzIiAiJGMvJG06IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTIgLW0gJG0gLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorQEAgLTQyLDcgKzQyLDcgQEAgZm9yIGMgaW4gJGNpcGhlcnM7IGRvCisgCQlwcmludGYgIiUtNjBzIiAiJGM6IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTEgLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorIAkJCWZhaWwgInNzaCAtMSBmYWlsZWQgd2l0aCBjaXBoZXIgJGMiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3RyYW5zZmVyLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKK0BAIC0xNSw3ICsxNSw3IEBAIGZvciBwIGluICR7U1NIX1BST1RPQ09MU307IGRvCisgCWZvciBzIGluIDEwIDEwMCAxayAzMmsgNjRrIDEyOGsgMjU2azsgZG8KKyAJCXRyYWNlICJwcm90byAkcCBkZC1zaXplICR7c30iCisgCQlybSAtZiAke0NPUFl9CistCQlkZCBpZj0kREFUQSBvYnM9JHtzfSAyPiAvZGV2L251bGwgfCBcCisrCQlkZCBpZj0kREFUQSBicz0ke3N9IDI+IC9kZXYvbnVsbCB8IFwKKyAJCQkke1NTSH0gLXEgLSRwIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICJjYXQgPiAke0NPUFl9IgorIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgCQkJZmFpbCAic3NoIGNhdCAkREFUQSBmYWlsZWQiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3llcy1oZWFkLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MveWVzLWhlYWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MveWVzLWhlYWQuc2gKK0BAIC00LDcgKzQsNyBAQAorIHRpZD0ieWVzIHBpcGUgaGVhZCIKKyAKKyBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworLQlsaW5lcz1gJHtTU0h9IC0kcCAtRiAkT0JKL3NzaF9wcm94eSB0aGlzaG9zdCAnc2ggLWMgIndoaWxlIHRydWU7ZG8gZWNobyB5ZXM7ZG9uZSB8IF9QT1NJWDJfVkVSU0lPTj0xOTkyMDkgaGVhZCAtMjAwMCInIHwgKHNsZWVwIDMgOyB3YyAtbClgCisrCWxpbmVzPWAke1NTSH0gLSRwIC1GICRPQkovc3NoX3Byb3h5IHRoaXNob3N0ICdzaCAtYyAid2hpbGUgdHJ1ZTtkbyBlY2hvIHllcztkb25lIHwgX1BPU0lYMl9WRVJTSU9OPTE5OTIwOSBoZWFkIC1uIDIwMDAiJyB8IChzbGVlcCAzIDsgd2MgLWwpYAorIAlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAJCWZhaWwgInllc3xoZWFkIHRlc3QgZmFpbGVkIgorIAkJbGluZXMgPSAwOworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9rZXktb3B0aW9ucy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2gtNi44cDEub3JpZy9yZWdyZXNzL2tleS1vcHRpb25zLnNoCisrKysgb3BlbnNzaC02LjhwMS9yZWdyZXNzL2tleS1vcHRpb25zLnNoCitAQCAtNTQsNyArNTQsNyBAQCBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworIAlmaQorIAorIAlzZWQgJ3MvLiovZnJvbT0iJyIkZiInIiAmLycgJG9yaWdrZXlzID4kYXV0aGtleXMKKy0JZnJvbT1gaGVhZCAtMSAkYXV0aGtleXMgfCBjdXQgLWYxIC1kICcgJ2AKKysJZnJvbT1gaGVhZCAtbiAxICRhdXRoa2V5cyB8IGN1dCAtZjEgLWQgJyAnYAorIAl2ZXJib3NlICJrZXkgb3B0aW9uIHByb3RvICRwICRmcm9tIgorIAlyPWAke1NTSH0gLSRwIC1xIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICdlY2hvIHRydWUnYAorIAlpZiBbICIkciIgPSAidHJ1ZSIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZDRhMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2luaXQKQEAgLTAsMCArMSwxMTUgQEAKKyMhIC9iaW4vc2gKK3NldCAtZQorCitQSURGSUxFPS92YXIvcnVuL3NzaGQucGlkCisKKyMgc291cmNlIGZ1bmN0aW9uIGxpYnJhcnkKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgL2V0Yy9pbml0LmQvc3NoOiBzdGFydCBhbmQgc3RvcCB0aGUgT3BlbkJTRCAic2VjdXJlIHNoZWxsIiBkYWVtb24KKwordGVzdCAteCAvdXNyL3NiaW4vc3NoZCB8fCBleGl0IDAKKyggL3Vzci9zYmluL3NzaGQgLVw/IDI+JjEgfCBncmVwIC1xIE9wZW5TU0ggKSAyPi9kZXYvbnVsbCB8fCBleGl0IDAKKworIyAvZXRjL2RlZmF1bHQvc3NoIG1heSBzZXQgU1lTQ09ORkRJUiBhbmQgU1NIRF9PUFRTCitpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9zc2g7IHRoZW4KKyAgICAuIC9ldGMvZGVmYXVsdC9zc2gKK2ZpCisKK1sgLXogIiRTWVNDT05GRElSIiBdICYmIFNZU0NPTkZESVI9L2V0Yy9zc2gKK21rZGlyIC1wICRTWVNDT05GRElSCisKK0hPU1RfS0VZX1JTQT0kU1lTQ09ORkRJUi9zc2hfaG9zdF9yc2Ffa2V5CitIT1NUX0tFWV9EU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZHNhX2tleQorSE9TVF9LRVlfRUNEU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZWNkc2Ffa2V5CitIT1NUX0tFWV9FRDI1NTE5PSRTWVNDT05GRElSL3NzaF9ob3N0X2VkMjU1MTlfa2V5CisKK2NoZWNrX2Zvcl9ub19zdGFydCgpIHsKKyAgICAjIGZvcmdldCBpdCBpZiB3ZSdyZSB0cnlpbmcgdG8gc3RhcnQsIGFuZCAvZXRjL3NzaC9zc2hkX25vdF90b19iZV9ydW4gZXhpc3RzCisgICAgaWYgWyAtZSAkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4gXTsgdGhlbgorCWVjaG8gIk9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciBub3QgaW4gdXNlICgkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4pIgorCWV4aXQgMAorICAgIGZpCit9CisKK2NoZWNrX3ByaXZzZXBfZGlyKCkgeworICAgICMgQ3JlYXRlIHRoZSBQcml2U2VwIGVtcHR5IGRpciBpZiBuZWNlc3NhcnkKKyAgICBpZiBbICEgLWQgL3Zhci9ydW4vc3NoZCBdOyB0aGVuCisJbWtkaXIgL3Zhci9ydW4vc3NoZAorCWNobW9kIDA3NTUgL3Zhci9ydW4vc3NoZAorICAgIGZpCit9CisKK2NoZWNrX2NvbmZpZygpIHsKKwkvdXNyL3NiaW4vc3NoZCAtdCB8fCBleGl0IDEKK30KKworY2hlY2tfa2V5cygpIHsKKwkjIGNyZWF0ZSBrZXlzIGlmIG5lY2Vzc2FyeQorCWlmIFsgISAtZiAkSE9TVF9LRVlfUlNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBSU0Ega2V5Li4uIgorCQlzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9SU0EgLU4gJycgLXQgcnNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0VDRFNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFQ0RTQSBrZXkuLi4iCisJCXNzaC1rZXlnZW4gLXEgLWYgJEhPU1RfS0VZX0VDRFNBIC1OICcnIC10IGVjZHNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0RTQSBdOyB0aGVuCisJCWVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRFNBIGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRFNBIC1OICcnIC10IGRzYQorCWZpCisJaWYgWyAhIC1mICRIT1NUX0tFWV9FRDI1NTE5IF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFRDI1NTE5IGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRUQyNTUxOSAtTiAnJyAtdCBlZDI1NTE5CisJZmkKK30KKworZXhwb3J0IFBBVEg9IiR7UEFUSDorJFBBVEg6fS91c3Ivc2Jpbjovc2JpbiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWNoZWNrX2Zvcl9ub19zdGFydAorCWVjaG8gIlN0YXJ0aW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwljaGVja19rZXlzCisJY2hlY2tfcHJpdnNlcF9kaXIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisgICAgICAgIGVjaG8gImRvbmUuIgorCTs7CisgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gIlN0b3BwaW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZAorICAgICAgICBlY2hvICIuIgorCTs7CisKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19rZXlzCisJY2hlY2tfY29uZmlnCisgICAgICAgIGVjaG8gLW4gIlJlbG9hZGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIncyBjb25maWd1cmF0aW9uIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1wICRQSURGSUxFIC1zIDEgLXggL3Vzci9zYmluL3NzaGQKKwllY2hvICIuIgorCTs7CisKKyAgcmVzdGFydCkKKyAgCWNoZWNrX2tleXMKKwljaGVja19jb25maWcKKyAgICAgICAgZWNobyAtbiAiUmVzdGFydGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXI6IHNzaGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXAgJFBJREZJTEUgLS1va25vZG8gLXggL3Vzci9zYmluL3NzaGQKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19wcml2c2VwX2RpcgorCXNsZWVwIDIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisJZWNobyAiLiIKKwk7OworCisgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL3NzaGQKKwlleGl0ICQ/CisgIDs7CisKKyAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvc3NoIHtzdGFydHxzdG9wfHN0YXR1c3xyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMQorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY0YzBjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBURVNUX1NIRUxMPXNoCisKK2NkIHJlZ3Jlc3MKK21ha2UgLWsgLk9CSkRJUj1gcHdkYCAuQ1VSRElSPWBwd2RgIFNVRE89InN1ZG8iIHRlc3RzIFwKKyAgICAgICAgfCBzZWQgLWUgJ3MvXnNraXBwZWQvU0tJUDogL2cnIC1lICdzL15vayAvUEFTUzogL2cnIC1lICdzL15mYWlsZWQvRkFJTDogL2cnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaF9jb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5MTkxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoX2NvbmZpZwpAQCAtMCwwICsxLDQ4IEBACisjCSRPcGVuQlNEOiBzc2hfY29uZmlnLHYgMS4yOCAyMDEzLzA5LzE2IDExOjM1OjQzIHN0aGVuIEV4cCAkCisKKyMgVGhpcyBpcyB0aGUgc3NoIGNsaWVudCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoX2NvbmZpZyg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFRoaXMgZmlsZSBwcm92aWRlcyBkZWZhdWx0cyBmb3IKKyMgdXNlcnMsIGFuZCB0aGUgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIGluIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyMgb3Igb24gdGhlIGNvbW1hbmQgbGluZS4KKworIyBDb25maWd1cmF0aW9uIGRhdGEgaXMgcGFyc2VkIGFzIGZvbGxvd3M6CisjICAxLiBjb21tYW5kIGxpbmUgb3B0aW9ucworIyAgMi4gdXNlci1zcGVjaWZpYyBmaWxlCisjICAzLiBzeXN0ZW0td2lkZSBmaWxlCisjIEFueSBjb25maWd1cmF0aW9uIHZhbHVlIGlzIG9ubHkgY2hhbmdlZCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZXQuCisjIFRodXMsIGhvc3Qtc3BlY2lmaWMgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIGRlZmF1bHRzIGF0IHRoZSBlbmQuCisKKyMgU2l0ZS13aWRlIGRlZmF1bHRzIGZvciBzb21lIGNvbW1vbmx5IHVzZWQgb3B0aW9ucy4gIEZvciBhIGNvbXByZWhlbnNpdmUKKyMgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucywgdGhlaXIgbWVhbmluZ3MgYW5kIGRlZmF1bHRzLCBwbGVhc2Ugc2VlIHRoZQorIyBzc2hfY29uZmlnKDUpIG1hbiBwYWdlLgorCitIb3N0ICoKKyAgRm9yd2FyZEFnZW50IHllcworICBGb3J3YXJkWDExIHllcworIyAgIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjICAgUlNBQXV0aGVudGljYXRpb24geWVzCisjICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMKKyMgICBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubworIyAgIEdTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCisjICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubworIyAgIEJhdGNoTW9kZSBubworIyAgIENoZWNrSG9zdElQIHllcworIyAgIEFkZHJlc3NGYW1pbHkgYW55CisjICAgQ29ubmVjdFRpbWVvdXQgMAorIyAgIFN0cmljdEhvc3RLZXlDaGVja2luZyBhc2sKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkZW50aXR5CisjICAgSWRlbnRpdHlGaWxlIH4vLnNzaC9pZF9yc2EKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkX2RzYQorIyAgIFBvcnQgMjIKKyMgICBQcm90b2NvbCAyLDEKKyMgICBDaXBoZXIgM2RlcworIyAgIENpcGhlcnMgYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIsYXJjZm91cjI1NixhcmNmb3VyMTI4LGFlczEyOC1jYmMsM2Rlcy1jYmMKKyMgICBNQUNzIGhtYWMtbWQ1LGhtYWMtc2hhMSx1bWFjLTY0QG9wZW5zc2guY29tLGhtYWMtcmlwZW1kMTYwCisjICAgRXNjYXBlQ2hhciB+CisjICAgVHVubmVsIG5vCisjICAgVHVubmVsRGV2aWNlIGFueTphbnkKKyMgICBQZXJtaXRMb2NhbENvbW1hbmQgbm8KKyMgICBWaXN1YWxIb3N0S2V5IG5vCisjICAgUHJveHlDb21tYW5kIHNzaCAtcSAtVyAlaDolcCBnYXRld2F5LmV4YW1wbGUuY29tCisjICAgUmVrZXlMaW1pdCAxRyAxaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODJlNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQKQEAgLTAsMCArMSwxMCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fbm9sb2dpbi5zbworYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICBvcHRpb25hbCAgICAgcGFtX2tleWluaXQuc28gZm9yY2UgcmV2b2tlCitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2xvZ2ludWlkLnNvCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZC5zb2NrZXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYzM5YjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0CkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorQ29uZmxpY3RzPXNzaGQuc2VydmljZQorCitbU29ja2V0XQorRXhlY1N0YXJ0UHJlPUBCQVNFX0JJTkRJUkAvbWtkaXIgLXAgL3Zhci9ydW4vc3NoZAorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZEAuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZEAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJkNjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkQC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBQZXItQ29ubmVjdGlvbiBEYWVtb24KK1dhbnRzPXNzaGRnZW5rZXlzLnNlcnZpY2UKK0FmdGVyPXNzaGRnZW5rZXlzLnNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9LUBTQklORElSQC9zc2hkIC1pCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECitTdGFuZGFyZElucHV0PXNvY2tldAorU3RhbmRhcmRFcnJvcj1zeXNsb2cKK0tpbGxNb2RlPXByb2Nlc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGJkMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnCkBAIC0wLDAgKzEsMTMzIEBACisjCSRPcGVuQlNEOiBzc2hkX2NvbmZpZyx2IDEuODAgMjAwOC8wNy8wMiAwMjoyNDoxOCBkam0gRXhwICQKKworIyBUaGlzIGlzIHRoZSBzc2hkIHNlcnZlciBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoZF9jb25maWcoNSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyMgVGhpcyBzc2hkIHdhcyBjb21waWxlZCB3aXRoIFBBVEg9L3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4KKworIyBUaGUgc3RyYXRlZ3kgdXNlZCBmb3Igb3B0aW9ucyBpbiB0aGUgZGVmYXVsdCBzc2hkX2NvbmZpZyBzaGlwcGVkIHdpdGgKKyMgT3BlblNTSCBpcyB0byBzcGVjaWZ5IG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlIHdoZXJlCisjIHBvc3NpYmxlLCBidXQgbGVhdmUgdGhlbSBjb21tZW50ZWQuICBVbmNvbW1lbnRlZCBvcHRpb25zIGNoYW5nZSBhCisjIGRlZmF1bHQgdmFsdWUuCisKKyNQb3J0IDIyCisjQWRkcmVzc0ZhbWlseSBhbnkKKyNMaXN0ZW5BZGRyZXNzIDAuMC4wLjAKKyNMaXN0ZW5BZGRyZXNzIDo6CisKKyMgVGhlIGRlZmF1bHQgcmVxdWlyZXMgZXhwbGljaXQgYWN0aXZhdGlvbiBvZiBwcm90b2NvbCAxCitQcm90b2NvbCAyCisKKyMgSG9zdEtleSBmb3IgcHJvdG9jb2wgdmVyc2lvbiAxCisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9rZXkKKyMgSG9zdEtleXMgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfcnNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZHNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9lZDI1NTE5X2tleQorCisjIExpZmV0aW1lIGFuZCBzaXplIG9mIGVwaGVtZXJhbCB2ZXJzaW9uIDEgc2VydmVyIGtleQorI0tleVJlZ2VuZXJhdGlvbkludGVydmFsIDFoCisjU2VydmVyS2V5Qml0cyAxMDI0CisKKyMgQ2lwaGVycyBhbmQga2V5aW5nCisjUmVrZXlMaW1pdCBkZWZhdWx0IG5vbmUKKworIyBMb2dnaW5nCisjIG9ic29sZXRlcyBRdWlldE1vZGUgYW5kIEZhc2Npc3RMb2dnaW5nCisjU3lzbG9nRmFjaWxpdHkgQVVUSAorI0xvZ0xldmVsIElORk8KKworIyBBdXRoZW50aWNhdGlvbjoKKworI0xvZ2luR3JhY2VUaW1lIDJtCisjUGVybWl0Um9vdExvZ2luIHllcworI1N0cmljdE1vZGVzIHllcworI01heEF1dGhUcmllcyA2CisjTWF4U2Vzc2lvbnMgMTAKKworI1JTQUF1dGhlbnRpY2F0aW9uIHllcworI1B1YmtleUF1dGhlbnRpY2F0aW9uIHllcworCisjIFRoZSBkZWZhdWx0IGlzIHRvIGNoZWNrIGJvdGggLnNzaC9hdXRob3JpemVkX2tleXMgYW5kIC5zc2gvYXV0aG9yaXplZF9rZXlzMgorIyBidXQgdGhpcyBpcyBvdmVycmlkZGVuIHNvIGluc3RhbGxhdGlvbnMgd2lsbCBvbmx5IGNoZWNrIC5zc2gvYXV0aG9yaXplZF9rZXlzCitBdXRob3JpemVkS2V5c0ZpbGUgLnNzaC9hdXRob3JpemVkX2tleXMKKworI0F1dGhvcml6ZWRQcmluY2lwYWxzRmlsZSBub25lCisKKyNBdXRob3JpemVkS2V5c0NvbW1hbmQgbm9uZQorI0F1dGhvcml6ZWRLZXlzQ29tbWFuZFVzZXIgbm9ib2R5CisKKyMgRm9yIHRoaXMgdG8gd29yayB5b3Ugd2lsbCBhbHNvIG5lZWQgaG9zdCBrZXlzIGluIC9ldGMvc3NoL3NzaF9rbm93bl9ob3N0cworI1Job3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjIHNpbWlsYXIgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vCisjIENoYW5nZSB0byB5ZXMgaWYgeW91IGRvbid0IHRydXN0IH4vLnNzaC9rbm93bl9ob3N0cyBmb3IKKyMgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gYW5kIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uCisjSWdub3JlVXNlcktub3duSG9zdHMgbm8KKyMgRG9uJ3QgcmVhZCB0aGUgdXNlcidzIH4vLnJob3N0cyBhbmQgfi8uc2hvc3RzIGZpbGVzCisjSWdub3JlUmhvc3RzIHllcworCisjIFRvIGRpc2FibGUgdHVubmVsZWQgY2xlYXIgdGV4dCBwYXNzd29yZHMsIGNoYW5nZSB0byBubyBoZXJlIQorI1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzCisjUGVybWl0RW1wdHlQYXNzd29yZHMgbm8KKworIyBDaGFuZ2UgdG8gbm8gdG8gZGlzYWJsZSBzL2tleSBwYXNzd29yZHMKK0NoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbm8KKworIyBLZXJiZXJvcyBvcHRpb25zCisjS2VyYmVyb3NBdXRoZW50aWNhdGlvbiBubworI0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCB5ZXMKKyNLZXJiZXJvc1RpY2tldENsZWFudXAgeWVzCisjS2VyYmVyb3NHZXRBRlNUb2tlbiBubworCisjIEdTU0FQSSBvcHRpb25zCisjR1NTQVBJQXV0aGVudGljYXRpb24gbm8KKyNHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVzCisKKyMgU2V0IHRoaXMgdG8gJ3llcycgdG8gZW5hYmxlIFBBTSBhdXRoZW50aWNhdGlvbiwgYWNjb3VudCBwcm9jZXNzaW5nLAorIyBhbmQgc2Vzc2lvbiBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIGVuYWJsZWQsIFBBTSBhdXRoZW50aWNhdGlvbiB3aWxsCisjIGJlIGFsbG93ZWQgdGhyb3VnaCB0aGUgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiBhbmQKKyMgUGFzc3dvcmRBdXRoZW50aWNhdGlvbi4gIERlcGVuZGluZyBvbiB5b3VyIFBBTSBjb25maWd1cmF0aW9uLAorIyBQQU0gYXV0aGVudGljYXRpb24gdmlhIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbWF5IGJ5cGFzcworIyB0aGUgc2V0dGluZyBvZiAiUGVybWl0Um9vdExvZ2luIHdpdGhvdXQtcGFzc3dvcmQiLgorIyBJZiB5b3UganVzdCB3YW50IHRoZSBQQU0gYWNjb3VudCBhbmQgc2Vzc2lvbiBjaGVja3MgdG8gcnVuIHdpdGhvdXQKKyMgUEFNIGF1dGhlbnRpY2F0aW9uLCB0aGVuIGVuYWJsZSB0aGlzIGJ1dCBzZXQgUGFzc3dvcmRBdXRoZW50aWNhdGlvbgorIyBhbmQgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiB0byAnbm8nLgorI1VzZVBBTSBubworCisjQWxsb3dBZ2VudEZvcndhcmRpbmcgeWVzCisjQWxsb3dUY3BGb3J3YXJkaW5nIHllcworI0dhdGV3YXlQb3J0cyBubworI1gxMUZvcndhcmRpbmcgbm8KKyNYMTFEaXNwbGF5T2Zmc2V0IDEwCisjWDExVXNlTG9jYWxob3N0IHllcworI1Blcm1pdFRUWSB5ZXMKKyNQcmludE1vdGQgeWVzCisjUHJpbnRMYXN0TG9nIHllcworI1RDUEtlZXBBbGl2ZSB5ZXMKKyNVc2VMb2dpbiBubworVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiBzYW5kYm94ICMgRGVmYXVsdCBmb3IgbmV3IGluc3RhbGxhdGlvbnMuCisjUGVybWl0VXNlckVudmlyb25tZW50IG5vCitDb21wcmVzc2lvbiBubworQ2xpZW50QWxpdmVJbnRlcnZhbCAxNQorQ2xpZW50QWxpdmVDb3VudE1heCA0CisjVXNlRE5TIHllcworI1BpZEZpbGUgL3Zhci9ydW4vc3NoZC5waWQKKyNNYXhTdGFydHVwcyAxMDozMDoxMDAKKyNQZXJtaXRUdW5uZWwgbm8KKyNDaHJvb3REaXJlY3Rvcnkgbm9uZQorI1ZlcnNpb25BZGRlbmR1bSBub25lCisKKyMgbm8gZGVmYXVsdCBiYW5uZXIgcGF0aAorI0Jhbm5lciBub25lCisKKyMgb3ZlcnJpZGUgZGVmYXVsdCBvZiBubyBzdWJzeXN0ZW1zCitTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMvc2Z0cC1zZXJ2ZXIKKworIyBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgc2V0dGluZ3Mgb24gYSBwZXItdXNlciBiYXNpcworI01hdGNoIFVzZXIgYW5vbmN2cworIwlYMTFGb3J3YXJkaW5nIG5vCisjCUFsbG93VGNwRm9yd2FyZGluZyBubworIwlQZXJtaXRUVFkgbm8KKyMJRm9yY2VDb21tYW5kIGN2cyBzZXJ2ZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZGdlbmtleXMuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZGdlbmtleXMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjUwODZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkZ2Vua2V5cy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBLZXkgR2VuZXJhdGlvbgorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkKK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL3NzaC9zc2hfaG9zdF9kc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QEJJTkRJUkAvc3NoLWtleWdlbiAtQQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3ZvbGF0aWxlcy45OV9zc2hkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQyYWYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZApAQCAtMCwwICsxLDIgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vc3NoZCBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvbG9nL2xhc3Rsb2cgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjFwMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlYjRiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIKQEAgLTAsMCArMSwxNTQgQEAKK1NVTU1BUlkgPSAiU2VjdXJlIHJsb2dpbi9yc2gvcmNwL3RlbG5ldCByZXBsYWNlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNlY3VyZSBybG9naW4vcnNoL3JjcC90ZWxuZXQgcmVwbGFjZW1lbnQgKE9wZW5TU0gpIFwKK1NzaCAoU2VjdXJlIFNoZWxsKSBpcyBhIHByb2dyYW0gZm9yIGxvZ2dpbmcgaW50byBhIHJlbW90ZSBtYWNoaW5lIFwKK2FuZCBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzIG9uIGEgcmVtb3RlIG1hY2hpbmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5zc2gub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PWUzMjYwNDU2NTdlODQyNTQxZDNmMzVhYWRhNDQyNTA3IgorCitERVBFTkRTID0gInpsaWIgb3BlbnNzbCIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm9wZW5ic2Qub3JnL3B1Yi9PcGVuQlNEL09wZW5TU0gvcG9ydGFibGUvb3BlbnNzaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3NoZF9jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vc3NoX2NvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGQuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRALnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vc3NoZGdlbmtleXMuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly92b2xhdGlsZXMuOTlfc3NoZCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworUEFNX1NSQ19VUkkgPSAiZmlsZTovL3NzaGQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzA5NzM2YmM4YThjMjUzYmM0ZWViNDgyOTg4OGNhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzBhNmQyZDFkMDYzZDVjNjZkZmZkOTUyNDkzZDBjZGEyNTZjYWQyMDRmNjgxZGUwZjg0ZWY4NWIyYWQ4NDI4IgorCitpbmhlcml0IHVzZXJhZGQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcyBzeXN0ZW1kCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0tc3NoZCIKK1VTRVJBRERfUEFSQU1fJHtQTn0tc3NoZCA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgL3Zhci9ydW4vc3NoZCAtLXNoZWxsIC9iaW4vZmFsc2UgLS11c2VyLWdyb3VwIHNzaGQiCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3NoZCA9ICJzc2hkIgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tc3NoZCA9ICJkZWZhdWx0cyA5IgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc3NoZCA9ICJzc2hkLnNvY2tldCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0CisKKyMgTEZTIHN1cHBvcnQ6CitDRkxBR1MgKz0gIi1EX19GSUxFX09GRlNFVF9CSVRTPTY0IgorCisjIGxvZ2luIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKK0VYVFJBX09FQ09ORiA9ICInTE9HSU5fUFJPR1JBTT0ke2Jhc2VfYmluZGlyfS9sb2dpbicgXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0td2l0aC1wYW0nLCAnLS13aXRob3V0LXBhbScsIGQpfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXpsaWItdmVyc2lvbi1jaGVjayBcCisgICAgICAgICAgICAgICAgLS13aXRoLXByaXZzZXAtcGF0aD0vdmFyL3J1bi9zc2hkIFwKKyAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9zc2ggXAorICAgICAgICAgICAgICAgIC0td2l0aC14YXV0aD0vdXNyL2Jpbi94YXV0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN0cmlwIFwKKyAgICAgICAgICAgICAgICAiCisKKyMgU2luY2Ugd2UgZG8gbm90IGRlcGVuZCBvbiBsaWJic2QsIHdlIGRvIG5vdCB3YW50IGNvbmZpZ3VyZSB0byB1c2UgaXQKKyMganVzdCBiZWNhdXNlIGl0IGZpbmRzIGxpYnV0aWwuaC4gIEJ1dCwgc3BlY2lmeWluZyAtLWRpc2FibGUtbGlidXRpbAorIyBjYXVzZXMgY29tcGlsZSBlcnJvcnMsIHNvLi4uCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX2JzZF9saWJ1dGlsX2g9bm8gYWNfY3ZfaGVhZGVyX2xpYnV0aWxfaD1ubyIKKworIyBwYXNzd2QgcGF0aCBpcyBoYXJkY29kZWQgaW4gc3NoZAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEFUSF9QQVNTV0RfUFJPRz0ke2JpbmRpcn0vcGFzc3dkIgorCisjIFdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGxpYmJsb2NrZmlsZQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9tYWlsbG9ja19oPW5vIgorCisjIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB1Y2xpYmMgYmVjYXVzZSBpbmNsdWRpbmcgc3RkaW8uaAorIyBwdWxscyBpbiBwdGhyZWFkcy5oIGFuZCBjYXVzZXMgY29uZmxpY3RzIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisjIFRoaXMgcmVzdWx0cyBpbiBjb21waWxhdGlvbiBmYWlsdXJlLCBzbyB1bmxlc3MgdGhpcyBpcyBmaXhlZCwKKyMgZGlzYWJsZSBwYW0gZm9yIHVjbGliYy4KK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmM9IiAtLXdpdGhvdXQtcGFtIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJZXhwb3J0IExEPSIke0NDfSIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkX2NvbmZpZyAke0J9LworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NzaF9jb25maWcgJHtCfS8KKwlpZiBbICEgLWUgYWNpbmNsdWRlLm00IC1hIC1lIGFjbG9jYWwubTQgXTsgdGhlbgorCQljcCBhY2xvY2FsLm00IGFjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgICAgICMgc2tpcCByZWdyZXNzL3VuaXR0ZXN0cy8gYmluYXJpZXM6IHRoaXMgd2lsbCBzaWxlbnRseSBza2lwCisgICAgICAgICMgdW5pdHRlc3RzIGluIHJ1bi1wdGVzdHMgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHRoZXkgYXJlIHNvIHNsb3cuCisgICAgICAgIG9lX3J1bm1ha2UgcmVncmVzcy9tb2RwaXBlIHJlZ3Jlc3Mvc2V0dWlkLWFsbG93ZWQgcmVncmVzcy9uZXRjYXQKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDA3NTUgJHtXT1JLRElSfS9zc2hkICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL3NzaGQKKwkJc2VkIC1pIC1lICdzOiNVc2VQQU0gbm86VXNlUEFNIHllczonICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3NoZAorCXJtIC1mICR7RH0ke2JpbmRpcn0vc2xvZ2luICR7RH0ke2RhdGFkaXJ9L1NzaC5iaW4KKwlybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4vc3NoZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vdm9sYXRpbGVzLjk5X3NzaGQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X3NzaGQKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9jb250cmliL3NzaC1jb3B5LWlkICR7RH0ke2JpbmRpcn0KKworCSMgQ3JlYXRlIGNvbmZpZyBmaWxlcyBmb3IgcmVhZC1vbmx5IHJvb3RmcworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3NoCisJaW5zdGFsbCAtbSA2NDQgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCXNlZCAtaSAnL0hvc3RLZXkvZCcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfcnNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5IiA+PiAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkZ2Vua2V5cy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQktZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlzZWQgLWkgLWUgInN8XlNGVFBTRVJWRVI9Lip8U0ZUUFNFUlZFUj0ke2xpYmRpcn0vJHtQTn0vc2Z0cC1zZXJ2ZXJ8IiByZWdyZXNzL3Rlc3QtZXhlYy5zaAorCWNwIC1yIHJlZ3Jlc3MgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWtleWdlbiAke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tc2NwID0gIiR7YmluZGlyfS9zY3AuJHtCUE59IgorRklMRVNfJHtQTn0tc3NoID0gIiR7YmluZGlyfS9zc2guJHtCUE59ICR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCitGSUxFU18ke1BOfS1zc2hkID0gIiR7c2JpbmRpcn0vc3NoZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0iCitGSUxFU18ke1BOfS1zc2hkICs9ICIke3N5c2NvbmZkaXJ9L3NzaC9tb2R1bGkgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkICR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZCIKK0ZJTEVTXyR7UE59LXNmdHAgPSAiJHtiaW5kaXJ9L3NmdHAiCitGSUxFU18ke1BOfS1zZnRwLXNlcnZlciA9ICIke2xpYmV4ZWNkaXJ9L3NmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vc3NoKiAke2xpYmV4ZWNkaXJ9L3NzaCoiCitGSUxFU18ke1BOfS1rZXlnZW4gPSAiJHtiaW5kaXJ9L3NzaC1rZXlnZW4iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0ta2V5Z2VuIgorUkRFUEVORFNfJHtQTn0tc3NoZCArPSAiJHtQTn0ta2V5Z2VuICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4ta2V5aW5pdCBwYW0tcGx1Z2luLWxvZ2ludWlkJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIgbWFrZSIKKworUlBST1ZJREVTXyR7UE59LXNzaCA9ICJzc2giCitSUFJPVklERVNfJHtQTn0tc3NoZCA9ICJzc2hkIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1zc2hkID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1rZXlnZW4gPSAic3NoLWtleWdlbiIKKworQ09ORkZJTEVTXyR7UE59LXNzaGQgPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWciCitDT05GRklMRVNfJHtQTn0tc3NoID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorQUxURVJOQVRJVkVfJHtQTn0tc2NwID0gInNjcCIKK0FMVEVSTkFUSVZFXyR7UE59LXNzaCA9ICJzc2giCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkY2ZkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCkBAIC0wLDAgKzEsMjE0IEBACitTVU1NQVJZID0gIlNlY3VyZSBTb2NrZXQgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTZWN1cmUgU29ja2V0IExheWVyIChTU0wpIGJpbmFyeSBhbmQgcmVsYXRlZCBjcnlwdG9ncmFwaGljIHRvb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvdnVsbmVyYWJpbGl0aWVzLmh0bWwiCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworIyAib3BlbnNzbCB8IFNTTGVheSIgZHVhbCBsaWNlbnNlCitMSUNFTlNFID0gIm9wZW5zc2wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mOWE4Zjk2ODEwNzM0NWUwYjc1YWE4YzJlY2FhN2VjOCIKKworREVQRU5EUyA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBvcGVuc3NsLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorUyA9ICIke1dPUktESVJ9L29wZW5zc2wtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUdbcGVybF0gPSAiLCwsIgorCitBUl9hcHBlbmQgPSAiIHIiCisjIEF2b2lkIGJpbmFyaWVzIGJlaW5nIG1hcmtlZCBhcyByZXF1aXJpbmcgYW4gZXhlY3V0YWJsZSBzdGFjayBzaW5jZSBpdCAKKyMgZG9lc24ndCh3aGljaCBjYXVzZXMgYW5kIHRoaXMgY2F1c2VzIGlzc3VlcyB3aXRoIFNFTGludXgKK0NGTEFHID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLURMX0VORElBTicsICctREJfRU5ESUFOJywgZCl9IFwKKwktRFRFUk1JTyAke0NGTEFHU30gLVdhbGwgLVdhLC0tbm9leGVjc3RhY2siCisKKyMgLTAyIGRvZXMgbm90IHdvcmsgb24gbWlwc2VsOiBzc2ggaGFuZ3Mgd2hlbiBpdCB0cmllcyB0byByZWFkIC9kZXYvdXJhbmRvbQorQ0ZMQUdfbXR4LTEgOj0gIiR7QCcke0NGTEFHfScucmVwbGFjZSgnLU8yJywgJycpfSIKK0NGTEFHX210eC0yIDo9ICIke0AnJHtDRkxBR30nLnJlcGxhY2UoJy1PMicsICcnKX0iCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyIKK2V4cG9ydCBFWF9MSUJTID0gIi1sZ2NjIC1sZGwiCitleHBvcnQgQVMgPSAiJHtDQ30gLWMiCisKK2luaGVyaXQgcGtnY29uZmlnIHNpdGVpbmZvIG11bHRpbGliX2hlYWRlciBwdGVzdAorCitQQUNLQUdFUyA9KyAibGliY3J5cHRvIGxpYnNzbCAke1BOfS1taXNjIG9wZW5zc2wtY29uZiIKK0ZJTEVTX2xpYmNyeXB0byA9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdG8ke1NPTElCU30iCitGSUxFU19saWJzc2wgPSAiJHtsaWJkaXJ9L2xpYnNzbC5zby4qIgorRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLyoiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyAke2JpbmRpcn0vY19yZWhhc2giCitSREVQRU5EU18ke1BOfS1taXNjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCAncGVybCcsICcnLCBkKX0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTREVWfSIKKworIyBBZGQgdGhlIG9wZW5zc2wuY25mIGZpbGUgdG8gdGhlIG9wZW5zc2wtY29uZiBwYWNrYWdlLiAgTWFrZSB0aGUgbGliY3J5cHRvCisjIHBhY2thZ2UgUlJFQ09NTUVORFMgb24gdGhpcyBwYWNrYWdlLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHRvIGJlIGluc3RhbGxlZCBmb3IgYm90aCB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgYW5kIHRoZSBsaWJjcnlwdG8KKyMgcGFja2FnZSBzaW5jZSB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgZGVwZW5kcyBvbiB0aGUgbGliY3J5cHRvIHBhY2thZ2UuCitGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK0NPTkZGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK1JSRUNPTU1FTkRTX2xpYmNyeXB0byArPSAib3BlbnNzbC1jb25mIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1pc2MgbWFrZSBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgYmMiCisKKyMgUmVtb3ZlIHRoaXMgdG8gZW5hYmxlIFNTTHYzLiBTU0x2MyBpcyBkZWZhdWx0ZWQgdG8gZGlzYWJsZWQgZHVlIHRvIHRoZSBQT09ETEUKKyMgdnVsbmVyYWJpbGl0eQorRVhUUkFfT0VDT05GID0gIiAtbm8tc3NsMyIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfZGFyd2luICgpIHsKKwlzZWQgLWkgLWUgJy92ZXJzaW9uLXNjcmlwdD1vcGVuc3NsXC5sZC9kJyBDb25maWd1cmUKK30KKworZG9fY29uZmlndXJlICgpIHsKKwljZCB1dGlsCisJcGVybCBwZXJscGF0aC5wbCAke1NUQUdJTkdfQklORElSX05BVElWRX0KKwljZCAuLgorCWxuIC1zZiBhcHBzL29wZW5zc2wucG9kIGNyeXB0by9jcnlwdG8ucG9kIHNzbC9zc2wucG9kIGRvYy8KKworCW9zPSR7SE9TVF9PU30KKwljYXNlICRvcyBpbgorCWxpbnV4LXVjbGliYyB8XAorCWxpbnV4LXVjbGliY2VhYmkgfFwKKwlsaW51eC1nbnVlYWJpIHxcCisJbGludXgtdWNsaWJjc3BlIHxcCisJbGludXgtZ251c3BlIHxcCisJbGludXgtbXVzbCopCisJCW9zPWxpbnV4CisJCTs7CisJCSopCisJCTs7CisJZXNhYworCXRhcmdldD0iJG9zLSR7SE9TVF9BUkNIfSIKKwljYXNlICR0YXJnZXQgaW4KKwlsaW51eC1hcm0pCisJCXRhcmdldD1saW51eC1hcm12NAorCQk7OworCWxpbnV4LWFybWViKQorCQl0YXJnZXQ9bGludXgtZWxmLWFybWViCisJCTs7CisJbGludXgtYWFyY2g2NCopCisJCXRhcmdldD1saW51eC1nZW5lcmljNjQKKwkJOzsKKwlsaW51eC1zaDMpCisJCXRhcmdldD1kZWJpYW4tc2gzCisJCTs7CisJbGludXgtc2g0KQorCQl0YXJnZXQ9ZGViaWFuLXNoNAorCQk7OworCWxpbnV4LWk0ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNDg2CisJCTs7CisJbGludXgtaTU4NiB8IGxpbnV4LXZpYWMzKQorCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTU4NgorCQk7OworCWxpbnV4LWk2ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNjg2L2Ntb3YKKwkJOzsKKwlsaW51eC1nbnV4MzIteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDMyCisJCTs7CisJbGludXgtZ251NjQteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDg2XzY0CisJCTs7CisJbGludXgtbWlwcykKKwkJdGFyZ2V0PWRlYmlhbi1taXBzCisJCTs7CisJbGludXgtbWlwc2VsKQorCQl0YXJnZXQ9ZGViaWFuLW1pcHNlbAorCQk7OworICAgICAgICBsaW51eC0qLW1pcHM2NCkKKyAgICAgICAgICAgICAgIHRhcmdldD1saW51eC1taXBzCisgICAgICAgICAgICAgICAgOzsKKwlsaW51eC1taWNyb2JsYXplKikKKwkJdGFyZ2V0PWxpbnV4LWdlbmVyaWMzMgorCQk7OworCWxpbnV4LXBvd2VycGMpCisJCXRhcmdldD1saW51eC1wcGMKKwkJOzsKKwlsaW51eC1wb3dlcnBjNjQpCisJCXRhcmdldD1saW51eC1wcGM2NAorCQk7OworCWxpbnV4LXN1cGVyc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJbGludXgtc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJZGFyd2luLWkzODYpCisJCXRhcmdldD1kYXJ3aW4taTM4Ni1jYworCQk7OworCWVzYWMKKwkjIGluamVjdCBtYWNoaW5lLXNwZWNpZmljIGZsYWdzCisJc2VkIC1pIC1lICJzfF5cKFwiJHRhcmdldFwiLFxzKlwiW146XVwrXCk6XChbXjpdXCtcKXxcMToke0NGTEFHfXxnIiBDb25maWd1cmUKKyAgICAgICAgdXNlcHJlZml4PSR7cHJlZml4fQorICAgICAgICBpZiBbICJ4JHVzZXByZWZpeCIgPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHVzZXByZWZpeD0vCisgICAgICAgIGZpICAgICAgICAKKwlwZXJsIC4vQ29uZmlndXJlICR7RVhUUkFfT0VDT05GfSBzaGFyZWQgLS1wcmVmaXg9JHVzZXByZWZpeCAtLW9wZW5zc2xkaXI9JHtsaWJkaXJ9L3NzbCAtLWxpYmRpcj1gYmFzZW5hbWUgJHtsaWJkaXJ9YCAkdGFyZ2V0Cit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAncy9cKChPUEVOU1NMPVwpIi4qIi9cMSJvcGVuc3NsIi8nIE1ha2VmaWxlCit9CisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9fY29tcGlsZV9wdGVzdCAoKSB7CisJb2VfcnVubWFrZSBidWlsZHRlc3QKK30KKworZG9faW5zdGFsbCAoKSB7CisJIyBDcmVhdGUgJHtEfS8ke3ByZWZpeH0gdG8gZml4IHBhcmFsbGVsIGlzc3VlcworCW1rZGlyIC1wICR7RH0vJHtwcmVmaXh9LworCisJb2VfcnVubWFrZSBJTlNUQUxMX1BSRUZJWD0iJHtEfSIgTUFORElSPSIke21hbmRpcn0iIGluc3RhbGwKKworCW9lX2xpYmluc3RhbGwgLXNvIGxpYmNyeXB0byAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gbGlic3NsICR7RH0ke2xpYmRpcn0KKworCSMgTW92aW5nIGxpYmNyeXB0byB0byAvbGliCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12ICR7RH0ke2xpYmRpcn0vbGliY3J5cHRvKiAke0R9JHtiYXNlX2xpYmRpcn0vCisJCXNlZCAtaSBzI2xpYmRpcj1cJFx7ZXhlY19wcmVmaXhcfVwvbGliI2xpYmRpcj0ke2Jhc2VfbGliZGlyfSMgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmNyeXB0by5wYworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJY3AgLS1kZXJlZmVyZW5jZSAtUiBpbmNsdWRlL29wZW5zc2wgJHtEfSR7aW5jbHVkZWRpcn0KKworCW9lX211bHRpbGliX2hlYWRlciBvcGVuc3NsL29wZW5zc2xjb25mLmgKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwZXJsJywgJ3BlcmwnLCAnJywgZCl9IiA9ICJwZXJsIiBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rvb2xzL2NfcmVoYXNoICR7RH0ke2JpbmRpcn0KKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvdHNnZXQKKwkJIyBUaGUgY19yZWhhc2ggdXRpbGl0eSBpc24ndCBpbnN0YWxsZWQgYnkgdGhlIG5vcm1hbCBpbnN0YWxsYXRpb24gcHJvY2Vzcy4KKwllbHNlCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJcm0gLWYgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbCAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL3RzZ2V0CisJZmkKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLXIgTWFrZWZpbGUgdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yIGNlcnRzICR7RH0ke1BURVNUX1BBVEh9CisJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvbWlzYy9DQS5zaCAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvb3BlbnNzbC5jbmYgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2Jpbi9vcGVuc3NsICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWNwIGFwcHMvc2VydmVyMi5wZW0gICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKKwlpbnN0YWxsIHV0aWwvb3BlbnNzbHdyYXAuc2ggICAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAorCWluc3RhbGwgdXRpbC9zaGxpYl93cmFwLnNoICAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L29wZW5zc2wgXAorCSAgICBPUEVOU1NMX0NPTkY9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiBcCisJICAgIFNTTF9DRVJUX0RJUj0ke2xpYmRpcn0vc3NsL2NlcnRzIFwKKwkgICAgU1NMX0NFUlRfRklMRT0ke2xpYmRpcn0vc3NsL2NlcnQucGVtIFwKKwkgICAgT1BFTlNTTF9FTkdJTkVTPSR7bGliZGlyfS9zc2wvZW5naW5lcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvTWFrZWZpbGVzLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTQ0NmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitBZGQgJ2J1aWxkdGVzdCcgYW5kICdydW50ZXN0JyB0YXJnZXRzIHRvIE1ha2VmaWxlLCB0byBidWlsZCBhbmQgcnVuIHRlc3RzCitjcm9zcy1jb21waWxlZC4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL01ha2VmaWxlLm9yZworKysrIG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCitAQCAtNDUxLDggKzQ1MSwxNiBAQCByZWhhc2gudGltZTogY2VydHMgYXBwcworIHRlc3Q6ICAgdGVzdHMKKyAKKyB0ZXN0czogcmVoYXNoCisrCSQoTUFLRSkgYnVpbGR0ZXN0CisrCSQoTUFLRSkgcnVudGVzdAorKworK2J1aWxkdGVzdDoKKysJQChjZCB0ZXN0ICYmIFwKKysJJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiBleGUgYXBwcyk7CisrCisrcnVudGVzdDoKKyAJQChjZCB0ZXN0ICYmIGVjaG8gInRlc3RpbmcuLi4iICYmIFwKKy0JJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiB0ZXN0cyApOworKwkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIGFsbHRlc3RzICk7CisgCU9QRU5TU0xfQ09ORj1hcHBzL29wZW5zc2wuY25mIHV0aWwvb3BlbnNzbHdyYXAuc2ggdmVyc2lvbiAtYQorIAorIHJlcG9ydDoKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTEzNyw3ICsxMzcsNyBAQCB0ZXN0czoJZXhlIGFwcHMgJChURVNUUykKKyBhcHBzOgorIAlAKGNkIC4uOyAkKE1BS0UpIERJUlM9YXBwcyBhbGwpCisgCistYWxsdGVzdHM6IFwKKythbGwtdGVzdHM9IFwKKyAJdGVzdF9kZXMgdGVzdF9pZGVhIHRlc3Rfc2hhIHRlc3RfbWQ0IHRlc3RfbWQ1IHRlc3RfaG1hYyBcCisgCXRlc3RfbWQyIHRlc3RfbWRjMiB0ZXN0X3dwIFwKKyAJdGVzdF9ybWQgdGVzdF9yYzIgdGVzdF9yYzQgdGVzdF9yYzUgdGVzdF9iZiB0ZXN0X2Nhc3QgdGVzdF9hZXMgXAorQEAgLTE0OCw2ICsxNDgsMTEgQEAgYWxsdGVzdHM6IFwKKyAJdGVzdF9qcGFrZSB0ZXN0X3NycCB0ZXN0X2NtcyB0ZXN0X29jc3AgdGVzdF92M25hbWUgdGVzdF9oZWFydGJlYXQgXAorIAl0ZXN0X2NvbnN0YW50X3RpbWUKKyAKKythbGx0ZXN0czoKKysJQChmb3IgaSBpbiAkKGFsbC10ZXN0cyk7IGRvIFwKKysJKCAkKE1BS0UpICQkaSAmJiBlY2hvICJQQVNTOiAkJGkiICkgfHwgZWNobyAiRkFJTDogJCRpIjsgXAorKwlkb25lKQorKworIHRlc3RfZXZwOiAkKEVWUFRFU1QpJChFWEVfRVhUKSBldnB0ZXN0cy50eHQKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChFVlBURVNUKSBldnB0ZXN0cy50eHQKKyAKK0BAIC0yMTMsNyArMjE4LDcgQEAgdGVzdF94NTA5OiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHR4NQorIAllY2hvIHRlc3Qgc2Vjb25kIHg1MDl2MyBjZXJ0aWZpY2F0ZQorIAlzaCAuL3R4NTA5IHYzLWNlcnQyLnBlbSAyPi9kZXYvbnVsbAorIAorLXRlc3RfcnNhOiAkKFJTQVRFU1QpJChFWEVfRVhUKSAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRyc2EgdGVzdHJzYS5wZW0KKyt0ZXN0X3JzYTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0cnNhIHRlc3Ryc2EucGVtCisgCUBzaCAuL3Ryc2EgMj4vZGV2L251bGwKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChSU0FURVNUKQorIAorQEAgLTMxMywxMSArMzE4LDExIEBAIHRlc3RfdHNhOiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRlc3QKKyAJICBzaCAuL3Rlc3R0c2E7IFwKKyAJZmkKKyAKKy10ZXN0X2lnZTogJChJR0VURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X2lnZToKKyAJQGVjaG8gIlRlc3QgSUdFIG1vZGUiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSUdFVEVTVCkKKyAKKy10ZXN0X2pwYWtlOiAkKEpQQUtFVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9qcGFrZToKKyAJQGVjaG8gIlRlc3QgSlBBS0UiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSlBBS0VURVNUKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxZTc0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIG51bWJlciBvZiBjb2xvbnMgYXJlIGltcG9ydGFudCA6KQorCisKKy0tLQorIENvbmZpZ3VyZSB8ICAgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yYS5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjJhL0NvbmZpZ3VyZQorQEAgLTQ0Myw2ICs0NDMsMjMgQEAgbXkgJXRhYmxlPSgKKyAibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorICJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorIAorKyAKKysjIExpbnV4IG9uIEFSTQorKyJsaW51eC1lbGYtYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWVsZi1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKysibGludXgtYXZyMzIiLCIkRU5WeydDQyd9Oi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLiIsCisrCisrIyMjIyBMaW51eCBvbiBNSVBTL01JUFM2NAorKyJsaW51eC1taXBzIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwczY0IiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1tYWJpPTY0IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1taXBzNjRlbCIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtbWFiaT02NCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwc2VsIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKyAjIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgcG9pbnRlcnMgdG8gaGVhZGVycyBhbmQgbGlicy4KKyAiYW5kcm9pZCIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorICJhbmRyb2lkLXg4NiIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIuZXZhbHtteSAkYXNtPSR7eDg2X2VsZl9hc219OyRhc209fnMvOmVsZi86YW5kcm9pZC87JGFzbX0uIjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY3J5cHRvX3VzZV9iaWdpbnRfaW5feDg2LTY0X3BlcmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTdhZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RlcmFtIFN0YXR1czogQmFja3BvcnQKKworV2hlbiBidWlsZGluZyBvbiB4MzIgc3lzdGVtcyB3aGVyZSB0aGUgZGVmYXVsdCB0eXBlIGlzIDMyYml0LCBtYWtlIHN1cmUKK3dlIGNhbiB0cmFuc3BhcmVudGx5IHJlcHJlc2VudCA2NGJpdCBpbnRlZ2Vycy4gIE90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aAorYnVpbGQgZXJyb3JzIGxpa2U6CisvdXNyL2Jpbi9wZXJsIGFzbS9naGFzaC14ODZfNjQucGwgZWxmID4gZ2hhc2gteDg2XzY0LnMKK0ludGVnZXIgb3ZlcmZsb3cgaW4gaGV4YWRlY2ltYWwgbnVtYmVyIGF0IGFzbS8uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCBsaW5lIDIwMSwgPD4gbGluZSA4OTAuCisuLi4KK2doYXNoLXg4Nl82NC5zOiBBc3NlbWJsZXIgbWVzc2FnZXM6CitnaGFzaC14ODZfNjQuczo4OTA6IEVycm9yOiBqdW5rICcuMTU0NzMzNTU0Nzk5OTVlKzE5JyBhZnRlciBleHByZXNzaW9uCisKK1dlIGRvbid0IGVuYWJsZSB0aGlzIGdsb2JhbGx5IGFzIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHdlJ2QgZ2V0CiszMmJpdCB2YWx1ZXMgaW50ZXJwcmV0ZWQgYXMgdW5zaWduZWQgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgc2lnbmVkLgorCitSZXBvcnRlZC1ieTogQmVydHJhbmQgSmFjcXVpbiA8YmVydHJhbmRAamFjcXVpbi5iemg+CitVUkw6IGh0dHBzOi8vYnVncy5nZW50b28ub3JnLzU0MjYxOAorCitTaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjJhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJhLm9yaWcvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCisrKysgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCitAQCAtMTk0LDcgKzE5NCwxMCBAQCBteSAlZ2xvYmFsczsKKyAgICAgfQorICAgICBzdWIgb3V0IHsKKyAgICAgCW15ICRzZWxmID0gc2hpZnQ7CistCisrCSMgV2hlbiBidWlsZGluZyBvbiB4MzIgQUJJcywgdGhlIGV4cGFuZGVkIGhleCB2YWx1ZSBtaWdodCBiZSB0b28KKysJIyBiaWcgdG8gZml0IGludG8gMzJiaXRzLiBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NfcmVoYXNoLWNvbXBhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU1NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gODNmMzE4ZDY4YmJkYWIxY2E4OThjOTQ1NzZhODM4Y2M5N2RmNDcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1ZHdpZyBOdXNzZWwgPGx1ZHdpZy5udXNzZWxAc3VzZS5kZT4KK0RhdGU6IFdlZCwgMjEgQXByIDIwMTAgMTU6NTI6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYWxzbyBjcmVhdGUgb2xkIGhhc2ggZm9yIGNvbXBhdGliaWxpdHkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvY19yZWhhc2guaW4gYi90b29scy9jX3JlaGFzaC5pbgoraW5kZXggYjA4NmZmOS4uYjc3N2Q3OSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2NfcmVoYXNoLmluCisrKysgYi90b29scy9jX3JlaGFzaC5pbgorQEAgLTgsOCArOCw2IEBAIG15ICRwcmVmaXg7CisgCisgbXkgJG9wZW5zc2wgPSAkRU5We09QRU5TU0x9IHx8ICJvcGVuc3NsIjsKKyBteSAkcHdkOworLW15ICR4NTA5aGFzaCA9ICItc3ViamVjdF9oYXNoIjsKKy1teSAkY3JsaGFzaCA9ICItaGFzaCI7CisgbXkgJHZlcmJvc2UgPSAwOworIG15ICRzeW1saW5rX2V4aXN0cz1ldmFsIHtzeW1saW5rKCIiLCIiKTsgMX07CisgbXkgJHJlbW92ZWxpbmtzID0gMTsKK0BAIC0xOCwxMCArMTYsNyBAQCBteSAkcmVtb3ZlbGlua3MgPSAxOworIHdoaWxlICggJEFSR1ZbMF0gPX4gL14tLyApIHsKKyAgICAgbXkgJGZsYWcgPSBzaGlmdCBAQVJHVjsKKyAgICAgbGFzdCBpZiAoICRmbGFnIGVxICctLScpOworLSAgICBpZiAoICRmbGFnIGVxICctb2xkJykgeworLQkgICAgJHg1MDloYXNoID0gIi1zdWJqZWN0X2hhc2hfb2xkIjsKKy0JICAgICRjcmxoYXNoID0gIi1oYXNoX29sZCI7CistICAgIH0gZWxzaWYgKCAkZmxhZyBlcSAnLWgnKSB7CisrICAgIGlmICggJGZsYWcgZXEgJy1oJykgeworIAkgICAgaGVscCgpOworICAgICB9IGVsc2lmICggJGZsYWcgZXEgJy1uJyApIHsKKyAJICAgICRyZW1vdmVsaW5rcyA9IDA7CitAQCAtMTEzLDcgKzEwOCw5IEBAIHN1YiBoYXNoX2RpciB7CisgCQkJbmV4dDsKKyAJCX0KKyAJCWxpbmtfaGFzaF9jZXJ0KCRmbmFtZSkgaWYoJGNlcnQpOworKwkJbGlua19oYXNoX2NlcnRfb2xkKCRmbmFtZSkgaWYoJGNlcnQpOworIAkJbGlua19oYXNoX2NybCgkZm5hbWUpIGlmKCRjcmwpOworKwkJbGlua19oYXNoX2NybF9vbGQoJGZuYW1lKSBpZigkY3JsKTsKKyAJfQorIH0KKyAKK0BAIC0xNDYsNiArMTQzLDcgQEAgc3ViIGNoZWNrX2ZpbGUgeworIAorIHN1YiBsaW5rX2hhc2hfY2VydCB7CisgCQlteSAkZm5hbWUgPSAkX1swXTsKKysJCW15ICR4NTA5aGFzaCA9ICRfWzFdIHx8ICctc3ViamVjdF9oYXNoJzsKKyAJCSRmbmFtZSA9fiBzLycvJ1xcJycvZzsKKyAJCW15ICgkaGFzaCwgJGZwcmludCkgPSBgIiRvcGVuc3NsIiB4NTA5ICR4NTA5aGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAiJGZuYW1lImA7CisgCQljaG9tcCAkaGFzaDsKK0BAIC0xNzYsMTEgKzE3NCwyMSBAQCBzdWIgbGlua19oYXNoX2NlcnQgeworIAkJJGhhc2hsaXN0eyRoYXNofSA9ICRmcHJpbnQ7CisgfQorIAorK3N1YiBsaW5rX2hhc2hfY2VydF9vbGQgeworKwkJbGlua19oYXNoX2NlcnQoJF9bMF0sICctc3ViamVjdF9oYXNoX29sZCcpOworK30KKysKKytzdWIgbGlua19oYXNoX2NybF9vbGQgeworKwkJbGlua19oYXNoX2NybCgkX1swXSwgJy1oYXNoX29sZCcpOworK30KKysKKysKKyAjIFNhbWUgYXMgYWJvdmUgZXhjZXB0IGZvciBhIENSTC4gQ1JMIGxpbmtzIGFyZSBvZiB0aGUgZm9ybSA8aGFzaD4ucjxuPgorIAorIHN1YiBsaW5rX2hhc2hfY3JsIHsKKyAJCW15ICRmbmFtZSA9ICRfWzBdOworKwkJbXkgJGNybGhhc2ggPSAkX1sxXSB8fCAiLWhhc2giOworIAkJJGZuYW1lID1+IHMvJy8nXFwnJy9nOworIAkJbXkgKCRoYXNoLCAkZnByaW50KSA9IGAiJG9wZW5zc2wiIGNybCAkY3JsaGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAnJGZuYW1lJ2A7CisgCQljaG9tcCAkaGFzaDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY2EucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhNGQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMC45LjhtL2FwcHMvQ0EucGwuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTAuOS44bS5vcmlnL2FwcHMvQ0EucGwuaW4JMjAwNi0wNC0yOCAwMDoyODo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuc3NsLTAuOS44bS9hcHBzL0NBLnBsLmluCTIwMTAtMDItMjcgMDA6MzY6NTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjUsNiArNjUsNyBAQAorIGZvcmVhY2ggKEBBUkdWKSB7CisgCWlmICggL14oLVw/fC1ofC1oZWxwKSQvICkgeworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMDsKKyAJfSBlbHNpZiAoL14tbmV3Y2VydCQvKSB7CisgCSAgICAjIGNyZWF0ZSBhIGNlcnRpZmljYXRlCitAQCAtMTY1LDYgKzE2Niw3IEBACisgCX0gZWxzZSB7CisgCSAgICBwcmludCBTVERFUlIgIlVua25vd24gYXJnICRfXG4iOworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMTsKKyAJfQorIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vZGViaWFuLXRhcmdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkNDMyOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCitAQCAtMTA3LDYgKzEwNywxMCBAQCBteSAkZ2NjX2RldnRlYW1fd2FybiA9ICItV2FsbCAtcGVkYW50aWMKKyAKKyBteSAkY2xhbmdfZGlzYWJsZWRfd2FybmluZ3MgPSAiLVduby1sYW5ndWFnZS1leHRlbnNpb24tdG9rZW4gLVduby1leHRlbmRlZC1vZmZzZXRvZiAtV25vLXBhZGRlZCAtV25vLXNob3J0ZW4tNjQtdG8tMzIgLVduby1mb3JtYXQtbm9ubGl0ZXJhbCAtV25vLW1pc3Npbmctbm9yZXR1cm4gLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2lnbi1jb252ZXJzaW9uIC1Xbm8tdW5yZWFjaGFibGUtY29kZSAtV25vLWNvbnZlcnNpb24gLVduby1kb2N1bWVudGF0aW9uIC1Xbm8tbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMgLVduby1jYXN0LWFsaWduIC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMtZGlzY2FyZHMtcXVhbGlmaWVycyAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVduby11bnVzZWQtbWFjcm9zIC1Xbm8tZGlzYWJsZWQtbWFjcm8tZXhwYW5zaW9uIC1Xbm8tY29uZGl0aW9uYWwtdW5pbml0aWFsaXplZCAtV25vLXN3aXRjaC1lbnVtIjsKKyAKKysjIFRoZXJlIGFyZSBubyBzZXBhcmF0ZSBDRkxBR1MvQ1BQRkxBR1MvTERGTEFHUywgc2V0IGV2ZXJ5dGhpbmcgaW4gQ0ZMQUdTCisrbXkgJGRlYmlhbl9jZmxhZ3MgPSBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENGTEFHU2AgLiBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENQUEZMQUdTYCAuIGBkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgTERGTEFHU2AgLiAiLVdhLC0tbm9leGVjc3RhY2sgLVdhbGwiOworKyRkZWJpYW5fY2ZsYWdzID1+IHMvXG4vIC9nOworKworIG15ICRzdHJpY3Rfd2FybmluZ3MgPSAwOworIAorIG15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CitAQCAtMzQzLDYgKzM0Nyw1NSBAQCBteSAldGFibGU9KAorICJvc2YxLWFscGhhLWNjIiwgICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKKyAidHJ1NjQtYWxwaGEtY2MiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Oi1tc3ltOi5zbyIsCisgCisrIyBEZWJpYW4gR05VLyogKHZhcmlvdXMgYXJjaGl0ZWN0dXJlcykKKysiZGViaWFuLWFscGhhIiwiZ2NjOi1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjUiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hcm02NCIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWVsIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWhmIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFtZDY0IiwgImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6IiwKKysiZGViaWFuLWF2cjMyIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9OR19CRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtYW1kNjQiLCJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtaTM4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tYXJjaD1pNDg2OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHBwYSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVg6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHVyZC1pMzg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2EsLS1ub2V4ZWNzdGFjayAtZyAtbXR1bmU9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWlhNjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taTM4Ni1pNDg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWFyY2g9aTQ4Njo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYtaTU4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk1ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pMzg2LWk2ODYvY21vdiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk2ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tNjhrIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzIiwgICAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHNlbCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzbjMyIiwgICAibWlwczY0LWxpbnV4LWdudWFiaW4zMi1nY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwc24zMmVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpbjMyLWdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzNjQiLCAgICJtaXBzNjQtbGludXgtZ251YWJpNjQtZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHM2NGVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpNjQtZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW5ldGJzZC1pMzg2IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2QtbTY4ayIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2Qtc3BhcmMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLW12ODo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWFscGhhIiwiZ2NjOi1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9OjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQgREVTX1BUUiBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWkzODYiLCAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dDpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tb3BlbmJzZC1taXBzIiwiZ2NjOi1ETF9FTkRJQU4gJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcjFrIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcG93ZXJwYyIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1wb3dlcnBjc3BlIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXBwYzY0IiwiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcHBjNjRlbCIsImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0bGU6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tczM5MCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCisrImRlYmlhbi1zMzkweCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc2gzIiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNoNCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDNlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDRlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tMzJyIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjLXY4IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT12OCAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc3BhcmMtdjkiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tY3B1PXY5IC1XYSwtQXY4cGx1cyAtRFVMVFJBU1BBUkMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjNjQiLCJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLURVTFRSQVNQQVJDIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi14MzIiLCJnY2M6LW14MzIgLURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbXgzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OngzMiIsCisrCisgIyMjIworICMjIyMgVmFyaWV0eSBvZiBMSU5VWDotKQorICMjIyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODVlM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLm9yZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MjcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgCisgTUFLRUZJTEU9IE1ha2VmaWxlCisgCistTUFORElSPSQoT1BFTlNTTERJUikvbWFuCisrTUFORElSPS91c3Ivc2hhcmUvbWFuCisgTUFOMT0xCisgTUFOMz0zCisgTUFOU1VGRklYPQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tc2VjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWMxZDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMGMub3JpZy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMzoyOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjAsNyArMTYwLDggQEAKKyBNQU5ESVI9L3Vzci9zaGFyZS9tYW4KKyBNQU4xPTEKKyBNQU4zPTMKKy1NQU5TVUZGSVg9CisrTUFOU1VGRklYPXNzbAorK01BTlNFQ1RJT049U1NMCisgSFRNTFNVRkZJWD1odG1sCisgSFRNTERJUj0kKE9QRU5TU0xESVIpL2h0bWwKKyBTSEVMTD0vYmluL3NoCitAQCAtNjUxLDcgKzY1Miw3IEBACisgCQllY2hvICJpbnN0YWxsaW5nIG1hbiQkc2VjLyQkZm4uJCR7c2VjfSQoTUFOU1VGRklYKSI7IFwKKyAJCShjZCBgJChQRVJMKSB1dGlsL2Rpcm5hbWUucGwgJCRpYDsgXAorIAkJc2ggLWMgIiQkcG9kMm1hbiBcCistCQkJLS1zZWN0aW9uPSQkc2VjIC0tY2VudGVyPU9wZW5TU0wgXAorKwkJCS0tc2VjdGlvbj0kJHtzZWN9JChNQU5TRUNUSU9OKSAtLWNlbnRlcj1PcGVuU1NMIFwKKyAJCQktLXJlbGVhc2U9JChWRVJTSU9OKSBgYmFzZW5hbWUgJCRpYCIpIFwKKyAJCQk+ICAkKElOU1RBTExfUFJFRklYKSQoTUFORElSKS9tYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCk7IFwKKyAJCSQoUEVSTCkgdXRpbC9leHRyYWN0LW5hbWVzLnBsIDwgJCRpIHwgXAorQEAgLTY2OCw3ICs2NjksNyBAQAorIAkJZWNobyAiaW5zdGFsbGluZyBtYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCkiOyBcCisgCQkoY2QgYCQoUEVSTCkgdXRpbC9kaXJuYW1lLnBsICQkaWA7IFwKKyAJCXNoIC1jICIkJHBvZDJtYW4gXAorLQkJCS0tc2VjdGlvbj0kJHNlYyAtLWNlbnRlcj1PcGVuU1NMIFwKKysJCQktLXNlY3Rpb249JCR7c2VjfSQoTUFOU0VDVElPTikgLS1jZW50ZXI9T3BlblNTTCBcCisgCQkJLS1yZWxlYXNlPSQoVkVSU0lPTikgYGJhc2VuYW1lICQkaWAiKSBcCisgCQkJPiAgJChJTlNUQUxMX1BSRUZJWCkkKE1BTkRJUikvbWFuJCRzZWMvJCRmbi4kJHtzZWN9JChNQU5TVUZGSVgpOyBcCisgCQkkKFBFUkwpIHV0aWwvZXh0cmFjdC1uYW1lcy5wbCA8ICQkaSB8IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjYjNiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMDgtMjEgMTM6MzY6NDkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMTUzLDcgKzE1Myw3IEBACisgCU5PQUxMU1lNU0ZMQUdTPSctV2wsLS1uby13aG9sZS1hcmNoaXZlJzsgXAorIAlTSEFSRURGTEFHUz0iJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCIKKyAKKy1ET19HTlVfQVBQPUxERkxBR1M9IiQoQ0ZMQUdTKSAtV2wsLXJwYXRoLCQoTElCUlBBVEgpIgorK0RPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIAorICNUaGlzIGlzIHJhdGhlciBzcGVjaWFsLiAgSXQncyBhIHNwZWNpYWwgdGFyZ2V0IHdpdGggd2hpY2ggb25lIGNhbiBsaW5rCisgI2FwcGxpY2F0aW9ucyB3aXRob3V0IGJvdGhlcmluZyB3aXRoIGFueSBmZWF0dXJlcyB0aGF0IGhhdmUgYW55dGhpbmcgdG8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0NDA4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6NDQuMDAwMDAwMDAwICswMTAwCitAQCAtMTUxLDcgKzE1MSw3IEBACisgCVNITElCX1NVRkZJWD07IFwKKyAJQUxMU1lNU0ZMQUdTPSctV2wsLS13aG9sZS1hcmNoaXZlJzsgXAorIAlOT0FMTFNZTVNGTEFHUz0nLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSc7IFwKKy0JU0hBUkVERkxBR1M9IiQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKSAtc2hhcmVkIC1XbCwtQnN5bWJvbGljIC1XbCwtc29uYW1lPSQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVgiCisrCVNIQVJFREZMQUdTPSIkKENGTEFHUykgJChTSEFSRURfTERGTEFHUykgLXNoYXJlZCAtV2wsLXNvbmFtZT0kJFNITElCJCRTSExJQl9TT1ZFUiQkU0hMSUJfU1VGRklYIgorIAorIERPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vcGljLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vcGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGEzODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9waWMucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwJMjAwMS0xMC0yNCAyMzoyMDo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL2FzbS9kZXNib3RoLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTYsNiArMTYsMTEgQEAKKyAKKyAJJnB1c2goImVkaSIpOworIAorKwkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYnAiKTsKKysJJmFkZCAgICAoImVicCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKworIAkmY29tbWVudCgiIik7CisgCSZjb21tZW50KCJMb2FkIHRoZSBkYXRhIHdvcmRzIik7CisgCSZtb3YoJEwsJkRXUCgwLCJlYngiLCIiLDApKTsKK0BAIC00NywxNSArNTIsMjEgQEAKKyAJJm1vdigmc3d0bXAoMiksCShEV0MoKCRlbmMpPyIxIjoiMCIpKSk7CisgCSZtb3YoJnN3dG1wKDEpLAkiZWF4Iik7CisgCSZtb3YoJnN3dG1wKDApLAkiZWJ4Iik7CistCSZjYWxsKCJERVNfZW5jcnlwdDIiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKysJJmNhbGwoIkRFU19lbmNyeXB0MlxAUExUIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisgCSZtb3YoJnN3dG1wKDIpLAkoRFdDKCgkZW5jKT8iMCI6IjEiKSkpOworIAkmbW92KCZzd3RtcCgxKSwJImVkaSIpOworIAkmbW92KCZzd3RtcCgwKSwJImVieCIpOworLQkmY2FsbCgiREVTX2VuY3J5cHQyIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisrCSZjYWxsKCJERVNfZW5jcnlwdDJcQFBMVCIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworIAkmbW92KCZzd3RtcCgyKSwJKERXQygoJGVuYyk/IjEiOiIwIikpKTsKKyAJJm1vdigmc3d0bXAoMSksCSJlc2kiKTsKKyAJJm1vdigmc3d0bXAoMCksCSJlYngiKTsKKy0JJmNhbGwoIkRFU19lbmNyeXB0MiIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworKwkmY2FsbCgiREVTX2VuY3J5cHQyXEBQTFQiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKyAKKyAJJnN0YWNrX3BvcCgzKTsKKyAJJm1vdigkTCwmRFdQKDAsImVieCIsIiIsMCkpOworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wZXJsYXNtL2NiYy5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFjLm9yaWcvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTEtMDctMTMgMDg6MjI6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTIyLDcgKzEyMiwxMSBAQAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApLAkiZWF4Iik7CSMgcHV0IGluIGFycmF5IGZvciBjYWxsCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRlbmNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKwkmY2FsbCgiJGVuY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOworIAkmbW92KCJlYngiLAkmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApKTsKK0BAIC0xODUsNyArMTg5LDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgaW4gYXJyYXkgZm9yIGNhbGwKKyAJJm1vdigmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApLAkiZWJ4Iik7CSMKKyAKKy0JJmNhbGwoJGVuY19mdW5jKTsKKysJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50MSIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MSIpOworKwkmYmxpbmRwb3AoImVieCIpOworKwkmYWRkCSgiZWJ4IiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDEiKSAuICJdIik7CisrCSZjYWxsKCIkZW5jX2Z1bmNcQFBMVCIpOworIAorIAkmbW92KCJlYXgiLAkmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSk7CisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOworQEAgLTIxOCw3ICsyMjYsMTEgQEAKKyAJJm1vdigmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSwJImVheCIpOwkjIHB1dCBiYWNrCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRkZWNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDIiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDIiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQyIikgLiAiXSIpOworKwkmY2FsbCgiJGRlY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOwkjIGdldCByZXR1cm4KKyAJJm1vdigiZWJ4IiwJJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSk7CSMKK0BAIC0yNjEsNyArMjczLDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgYmFjaworIAkmbW92KCZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCksCSJlYngiKTsJIworIAorLQkmY2FsbCgkZGVjX2Z1bmMpOworKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQzIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQzIik7CisrCSZibGluZHBvcCgiZWJ4Iik7CisrCSZhZGQJKCJlYngiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MyIpIC4gIl0iKTsKKysJJmNhbGwoIiRkZWNfZnVuY1xAUExUIik7CisgCisgCSZtb3YoImVheCIsCSZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApKTsJIyBnZXQgcmV0dXJuCisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOwkjCitJbmRleDogb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWMub3JpZy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMS0xMi0wOSAyMDoxNjozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMi0wNy0yOSAxNDoxNToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjEsNiArMTYxLDcgQEAKKyAJaWYgKCQ6Om1hY29zeCkJeyBwdXNoIChAb3V0LCIkdG1wLDJcbiIpOyB9CisgCWVsc2lmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiJHRtcCw0XG4iKTsgfQorIAllbHNlCQl7IHB1c2ggKEBvdXQsIiR0bXBcbiIpOyB9CisrCWlmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiLmhpZGRlblx0T1BFTlNTTF9pYTMyY2FwX1BcbiIpOyB9CisgICAgIH0KKyAgICAgcHVzaChAb3V0LCRpbml0c2VnKSBpZiAoJGluaXRzZWcpOworIH0KK0BAIC0yMTgsOCArMjE5LDIzIEBACisgICAgIGVsc2lmICgkOjplbGYpCisgICAgIHsJJGluaXRzZWcuPTw8X19fOworIC5zZWN0aW9uCS5pbml0CisrX19fCisrICAgICAgICBpZiAoJDo6cGljKQorKwl7ICAgJGluaXRzZWcuPTw8X19fOworKwlwdXNobAklZWJ4CisrCWNhbGwJLnBpY19wb2ludDAKKysucGljX3BvaW50MDoKKysJcG9wbAklZWJ4CisrCWFkZGwJXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tLnBpY19wb2ludDBdLCVlYngKKysJY2FsbAkkZlxAUExUCisrCXBvcGwJJWVieAorK19fXworKwl9CisrCWVsc2UKKysJeyAgICRpbml0c2VnLj08PF9fXzsKKyAJY2FsbAkkZgorIF9fXworKwl9CisgICAgIH0KKyAgICAgZWxzaWYgKCQ6OmNvZmYpCisgICAgIHsgICAkaW5pdHNlZy49PDxfX187CSMgYXBwbGllcyB0byBib3RoIEN5Z3dpbiBhbmQgTWluZ3cKK0luZGV4OiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDg2Y3B1aWQucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTAyLTI4IDE1OjIwOjM0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTA3LTI5IDE0OjE1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTgsNiArOCw4IEBACisgCisgZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CisgCisrcHVzaChAb3V0LCAiLmhpZGRlbiBPUEVOU1NMX2lhMzJjYXBfUFxuIik7CisrCisgJmZ1bmN0aW9uX2JlZ2luKCJPUEVOU1NMX2lhMzJfY3B1aWQiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcHVzaGYJKCk7CitAQCAtMTM5LDkgKzE0MSw3IEBACisgJnNldF9sYWJlbCgibm9jcHVpZCIpOworICZmdW5jdGlvbl9lbmQoIk9QRU5TU0xfaWEzMl9jcHVpZCIpOworIAorLSZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKy0KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIsIkVYVFJOXHRfT1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQiKTsKKysmZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIpOworIAkmeG9yCSgiZWF4IiwiZWF4Iik7CisgCSZ4b3IJKCJlZHgiLCJlZHgiKTsKKyAJJnBpY21ldXAoImVjeCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CitAQCAtMTU1LDcgKzE1NSw3IEBACisgIyBUaGlzIHdvcmtzIGluIFJpbmcgMCBvbmx5IFtyZWFkIERKR1BQK01TLURPUytwcml2aWxlZ2VkIERQTUkgaG9zdF0sCisgIyBidXQgaXQncyBzYWZlIHRvIGNhbGwgaXQgb24gYW55IFtzdXBwb3J0ZWRdIDMyLWJpdCBwbGF0Zm9ybS4uLgorICMgSnVzdCBjaGVjayBmb3IgW25vbi1demVybyByZXR1cm4gdmFsdWUuLi4KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9pbnN0cnVtZW50X2hhbHQiLCJFWFRSTlx0X09QRU5TU0xfaWEzMmNhcF9QOkRXT1JEIik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfaW5zdHJ1bWVudF9oYWx0Iik7CisgCSZwaWNtZXVwKCJlY3giLCJPUEVOU1NMX2lhMzJjYXBfUCIpOworIAkmYnQJKCZEV1AoMCwiZWN4IiksNCk7CisgCSZqbmMJKCZsYWJlbCgibm9oYWx0IikpOwkjIG5vIFRTQworQEAgLTIyMiw3ICsyMjIsNyBAQAorIAkmcmV0CSgpOworICZmdW5jdGlvbl9lbmRfQigiT1BFTlNTTF9mYXJfc3BpbiIpOworIAorLSZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1IiwiRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1Iik7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcGljbWV1cCgiZWN4IiwiT1BFTlNTTF9pYTMyY2FwX1AiKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vdmVyc2lvbi1zY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0OTE4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCkBAIC0wLDAgKzEsNDY2MyBAQAorSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1Lm9yaWcvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTY1MSw2ICsxNjUxLDggQEAKKyAJCX0KKyAJfQorIAorKyRzaGFyZWRfbGRmbGFnIC49ICIgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9b3BlbnNzbC5sZCI7CisrCisgb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOworIHVubGluaygiJE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgJE1ha2VmaWxlLm5ldzokIVxuIiBpZiAtZSAiJE1ha2VmaWxlLm5ldyI7Cisgb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMjoxOTowOC42MDE4MjcyNjYgKzAxMDAKK0BAIC0wLDAgKzEsNDYxNSBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQlCSU9fZl9zc2w7CisrCQlCSU9fbmV3X2J1ZmZlcl9zc2xfY29ubmVjdDsKKysJCUJJT19uZXdfc3NsOworKwkJQklPX25ld19zc2xfY29ubmVjdDsKKysJCUJJT19wcm94eV9zc2xfY29weV9zZXNzaW9uX2lkOworKwkJQklPX3NzbF9jb3B5X3Nlc3Npb25faWQ7CisrCQlCSU9fc3NsX3NodXRkb3duOworKwkJZDJpX1NTTF9TRVNTSU9OOworKwkJRFRMU3YxX2NsaWVudF9tZXRob2Q7CisrCQlEVExTdjFfbWV0aG9kOworKwkJRFRMU3YxX3NlcnZlcl9tZXRob2Q7CisrCQlFUlJfbG9hZF9TU0xfc3RyaW5nczsKKysJCWkyZF9TU0xfU0VTU0lPTjsKKysJCWtzc2xfYnVpbGRfcHJpbmNpcGFsXzI7CisrCQlrc3NsX2NnZXRfdGt0OworKwkJa3NzbF9jaGVja19hdXRoZW50OworKwkJa3NzbF9jdHhfZnJlZTsKKysJCWtzc2xfY3R4X25ldzsKKysJCWtzc2xfY3R4X3NldGtleTsKKysJCWtzc2xfY3R4X3NldHByaW5jOworKwkJa3NzbF9jdHhfc2V0c3RyaW5nOworKwkJa3NzbF9jdHhfc2hvdzsKKysJCWtzc2xfZXJyX3NldDsKKysJCWtzc2xfa3JiNV9mcmVlX2RhdGFfY29udGVudHM7CisrCQlrc3NsX3NnZXRfdGt0OworKwkJa3NzbF9za2lwX2NvbmZvdW5kOworKwkJa3NzbF92YWxpZGF0ZV90aW1lczsKKysJCVBFTV9yZWFkX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV9yZWFkX1NTTF9TRVNTSU9OOworKwkJUEVNX3dyaXRlX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV93cml0ZV9TU0xfU0VTU0lPTjsKKysJCVNTTF9hY2NlcHQ7CisrCQlTU0xfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9hZGRfZGlyX2NlcnRfc3ViamVjdHNfdG9fc3RhY2s7CisrCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmpzX3RvX3N0azsKKysJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOworKwkJU1NMX2FkZF9maWxlX2NlcnRfc3VianNfdG9fc3RrOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nX2xvbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZzsKKysJCVNTTF9jYWxsYmFja19jdHJsOworKwkJU1NMX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NJUEhFUl9kZXNjcmlwdGlvbjsKKysJCVNTTF9DSVBIRVJfZ2V0X2JpdHM7CisrCQlTU0xfQ0lQSEVSX2dldF9uYW1lOworKwkJU1NMX0NJUEhFUl9nZXRfdmVyc2lvbjsKKysJCVNTTF9jbGVhcjsKKysJCVNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2Q7CisrCQlTU0xfQ09NUF9nZXRfY29tcHJlc3Npb25fbWV0aG9kczsKKysJCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzOworKwkJU1NMX0NPTVBfZ2V0X25hbWU7CisrCQlTU0xfY29ubmVjdDsKKysJCVNTTF9jb3B5X3Nlc3Npb25faWQ7CisrCQlTU0xfY3RybDsKKysJCVNTTF9DVFhfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9DVFhfYWRkX3Nlc3Npb247CisrCQlTU0xfQ1RYX2NhbGxiYWNrX2N0cmw7CisrCQlTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NUWF9jdHJsOworKwkJU1NMX0NUWF9mbHVzaF9zZXNzaW9uczsKKysJCVNTTF9DVFhfZnJlZTsKKysJCVNTTF9DVFhfZ2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfZ2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9nZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9DVFhfZ2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9DVFhfZ2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZTsKKysJCVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zOworKwkJU1NMX0NUWF9uZXc7CisrCQlTU0xfQ1RYX3JlbW92ZV9zZXNzaW9uOworKwkJU1NMX0NUWF9zZXNzX2dldF9nZXRfY2I7CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X25ld19jYjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfcmVtb3ZlX2NiOworKwkJU1NMX0NUWF9zZXNzaW9uczsKKysJCVNTTF9DVFhfc2Vzc19zZXRfZ2V0X2NiOworKwkJU1NMX0NUWF9zZXNzX3NldF9uZXdfY2I7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYjsKKysJCVNTTF9DVFhfc2V0MV9wYXJhbTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NiOworKwkJU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lOworKwkJU1NMX0NUWF9zZXRfY29va2llX2dlbmVyYXRlX2NiOworKwkJU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYjsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGE7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRoczsKKysJCVNTTF9DVFhfc2V0X2RlZl9wYXNzd2RfY2JfdWQ7CisrCQlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzOworKwkJU1NMX0NUWF9zZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfc2V0X2dlbmVyYXRlX3Nlc3Npb25faWQ7CisrCQlTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wdXJwb3NlOworKwkJU1NMX0NUWF9zZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7CisrCQlTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbjsKKysJCVNTTF9DVFhfc2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90cnVzdDsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeTsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9DVFhfdXNlX2NlcnRfY2hhaW5fZmlsZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlOworKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9kb19oYW5kc2hha2U7CisrCQlTU0xfZHVwOworKwkJU1NMX2R1cF9DQV9saXN0OworKwkJU1NMZWF5X2FkZF9zc2xfYWxnb3JpdGhtczsKKysJCVNTTF9mcmVlOworKwkJU1NMX2dldDFfc2Vzc2lvbjsKKysJCVNTTF9nZXRfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X2NpcGhlcl9saXN0OworKwkJU1NMX2dldF9jaXBoZXJzOworKwkJU1NMX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9nZXRfY3VycmVudF9jaXBoZXI7CisrCQlTU0xfZ2V0X2N1cnJlbnRfY29tcHJlc3Npb247CisrCQlTU0xfZ2V0X2N1cnJlbnRfZXhwYW5zaW9uOworKwkJU1NMX2dldF9kZWZhdWx0X3RpbWVvdXQ7CisrCQlTU0xfZ2V0X2Vycm9yOworKwkJU1NMX2dldF9leF9kYXRhOworKwkJU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeDsKKysJCVNTTF9nZXRfZXhfZF9YNTA5X1NUT1JFX0NUWF9pZHg7CisrCQlTU0xfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9nZXRfZmQ7CisrCQlTU0xfZ2V0X2ZpbmlzaGVkOworKwkJU1NMX2dldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX2dldF9wZWVyX2NlcnRfY2hhaW47CisrCQlTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X3BlZXJfZmluaXNoZWQ7CisrCQlTU0xfZ2V0X3ByaXZhdGVrZXk7CisrCQlTU0xfZ2V0X3Bza19pZGVudGl0eTsKKysJCVNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQ7CisrCQlTU0xfZ2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX2dldF9yYmlvOworKwkJU1NMX2dldF9yZWFkX2FoZWFkOworKwkJU1NMX2dldF9yZmQ7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWU7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZTsKKysJCVNTTF9nZXRfc2Vzc2lvbjsKKysJCVNTTF9nZXRfc2hhcmVkX2NpcGhlcnM7CisrCQlTU0xfZ2V0X3NodXRkb3duOworKwkJU1NMX2dldF9TU0xfQ1RYOworKwkJU1NMX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfZ2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9nZXRfdmVyaWZ5X21vZGU7CisrCQlTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQ7CisrCQlTU0xfZ2V0X3ZlcnNpb247CisrCQlTU0xfZ2V0X3diaW87CisrCQlTU0xfZ2V0X3dmZDsKKysJCVNTTF9oYXNfbWF0Y2hpbmdfc2Vzc2lvbl9pZDsKKysJCVNTTF9saWJyYXJ5X2luaXQ7CisrCQlTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZTsKKysJCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3M7CisrCQlTU0xfbmV3OworKwkJU1NMX3BlZWs7CisrCQlTU0xfcGVuZGluZzsKKysJCVNTTF9yZWFkOworKwkJU1NMX3JlbmVnb3RpYXRlOworKwkJU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmc7CisrCQlTU0xfcnN0YXRlX3N0cmluZzsKKysJCVNTTF9yc3RhdGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfU0VTU0lPTl9jbXA7CisrCQlTU0xfU0VTU0lPTl9mcmVlOworKwkJU1NMX1NFU1NJT05fZ2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9nZXRfZXhfbmV3X2luZGV4OworKwkJU1NMX1NFU1NJT05fZ2V0X2lkOworKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWU7CisrCQlTU0xfU0VTU0lPTl9nZXRfdGltZW91dDsKKysJCVNTTF9TRVNTSU9OX2hhc2g7CisrCQlTU0xfU0VTU0lPTl9uZXc7CisrCQlTU0xfU0VTU0lPTl9wcmludDsKKysJCVNTTF9TRVNTSU9OX3ByaW50X2ZwOworKwkJU1NMX1NFU1NJT05fc2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9zZXRfdGltZTsKKysJCVNTTF9TRVNTSU9OX3NldF90aW1lb3V0OworKwkJU1NMX3NldDFfcGFyYW07CisrCQlTU0xfc2V0X2FjY2VwdF9zdGF0ZTsKKysJCVNTTF9zZXRfYmlvOworKwkJU1NMX3NldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9zZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfc2V0X2Nvbm5lY3Rfc3RhdGU7CisrCQlTU0xfc2V0X2V4X2RhdGE7CisrCQlTU0xfc2V0X2ZkOworKwkJU1NMX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOworKwkJU1NMX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX3NldF9tc2dfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3B1cnBvc2U7CisrCQlTU0xfc2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX3NldF9yZWFkX2FoZWFkOworKwkJU1NMX3NldF9yZmQ7CisrCQlTU0xfc2V0X3Nlc3Npb247CisrCQlTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2I7CisrCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiOworKwkJU1NMX3NldF9zaHV0ZG93bjsKKysJCVNTTF9zZXRfU1NMX0NUWDsKKysJCVNTTF9zZXRfc3NsX21ldGhvZDsKKysJCVNTTF9zZXRfdG1wX2RoX2NhbGxiYWNrOworKwkJU1NMX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9zZXRfdG1wX3JzYV9jYWxsYmFjazsKKysJCVNTTF9zZXRfdHJ1c3Q7CisrCQlTU0xfc2V0X3ZlcmlmeTsKKysJCVNTTF9zZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX3NldF92ZXJpZnlfcmVzdWx0OworKwkJU1NMX3NldF93ZmQ7CisrCQlTU0xfc2h1dGRvd247CisrCQlTU0xfc3RhdGU7CisrCQlTU0xfc3RhdGVfc3RyaW5nOworKwkJU1NMX3N0YXRlX3N0cmluZ19sb25nOworKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfZmlsZTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTHYyM19jbGllbnRfbWV0aG9kOworKwkJU1NMdjIzX21ldGhvZDsKKysJCVNTTHYyM19zZXJ2ZXJfbWV0aG9kOworKwkJU1NMdjJfY2xpZW50X21ldGhvZDsKKysJCVNTTHYyX21ldGhvZDsKKysJCVNTTHYyX3NlcnZlcl9tZXRob2Q7CisrCQlTU0x2M19jbGllbnRfbWV0aG9kOworKwkJU1NMdjNfbWV0aG9kOworKwkJU1NMdjNfc2VydmVyX21ldGhvZDsKKysJCVNTTF92ZXJzaW9uOworKwkJU1NMX3dhbnQ7CisrCQlTU0xfd3JpdGU7CisrCQlUTFN2MV9jbGllbnRfbWV0aG9kOworKwkJVExTdjFfbWV0aG9kOworKwkJVExTdjFfc2VydmVyX21ldGhvZDsKKysKKysKKysJCVNTTGVheTsKKysJCVNTTGVheV92ZXJzaW9uOworKwkJQVNOMV9CSVRfU1RSSU5HX2FzbjFfbWV0aDsKKysJCUFTTjFfSEVBREVSX2ZyZWU7CisrCQlBU04xX0hFQURFUl9uZXc7CisrCQlBU04xX0lBNVNUUklOR19hc24xX21ldGg7CisrCQlBU04xX0lOVEVHRVJfZ2V0OworKwkJQVNOMV9JTlRFR0VSX3NldDsKKysJCUFTTjFfSU5URUdFUl90b19CTjsKKysJCUFTTjFfT0JKRUNUX2NyZWF0ZTsKKysJCUFTTjFfT0JKRUNUX2ZyZWU7CisrCQlBU04xX09CSkVDVF9uZXc7CisrCQlBU04xX1BSSU5UQUJMRV90eXBlOworKwkJQVNOMV9TVFJJTkdfY21wOworKwkJQVNOMV9TVFJJTkdfZHVwOworKwkJQVNOMV9TVFJJTkdfZnJlZTsKKysJCUFTTjFfU1RSSU5HX25ldzsKKysJCUFTTjFfU1RSSU5HX3ByaW50OworKwkJQVNOMV9TVFJJTkdfc2V0OworKwkJQVNOMV9TVFJJTkdfdHlwZV9uZXc7CisrCQlBU04xX1RZUEVfZnJlZTsKKysJCUFTTjFfVFlQRV9uZXc7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR190b19zdHJpbmc7CisrCQlBU04xX1VUQ1RJTUVfY2hlY2s7CisrCQlBU04xX1VUQ1RJTUVfcHJpbnQ7CisrCQlBU04xX1VUQ1RJTUVfc2V0OworKwkJQVNOMV9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlBU04xX2QyaV9iaW87CisrCQlBU04xX2QyaV9mcDsKKysJCUFTTjFfZGlnZXN0OworKwkJQVNOMV9kdXA7CisrCQlBU04xX2dldF9vYmplY3Q7CisrCQlBU04xX2kyZF9iaW87CisrCQlBU04xX2kyZF9mcDsKKysJCUFTTjFfb2JqZWN0X3NpemU7CisrCQlBU04xX3BhcnNlOworKwkJQVNOMV9wdXRfb2JqZWN0OworKwkJQVNOMV9zaWduOworKwkJQVNOMV92ZXJpZnk7CisrCQlCRl9jYmNfZW5jcnlwdDsKKysJCUJGX2NmYjY0X2VuY3J5cHQ7CisrCQlCRl9lY2JfZW5jcnlwdDsKKysJCUJGX2VuY3J5cHQ7CisrCQlCRl9vZmI2NF9lbmNyeXB0OworKwkJQkZfb3B0aW9uczsKKysJCUJGX3NldF9rZXk7CisrCQlCSU9fQ09OTkVDVF9mcmVlOworKwkJQklPX0NPTk5FQ1RfbmV3OworKwkJQklPX2FjY2VwdDsKKysJCUJJT19jdHJsOworKwkJQklPX2ludF9jdHJsOworKwkJQklPX2RlYnVnX2NhbGxiYWNrOworKwkJQklPX2R1bXA7CisrCQlCSU9fZHVwX2NoYWluOworKwkJQklPX2ZfYmFzZTY0OworKwkJQklPX2ZfYnVmZmVyOworKwkJQklPX2ZfY2lwaGVyOworKwkJQklPX2ZfbWQ7CisrCQlCSU9fZl9udWxsOworKwkJQklPX2ZfcHJveHlfc2VydmVyOworKwkJQklPX2ZkX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19mZF9zaG91bGRfcmV0cnk7CisrCQlCSU9fZmluZF90eXBlOworKwkJQklPX2ZyZWU7CisrCQlCSU9fZnJlZV9hbGw7CisrCQlCSU9fZ2V0X2FjY2VwdF9zb2NrZXQ7CisrCQlCSU9fZ2V0X2ZpbHRlcl9iaW87CisrCQlCSU9fZ2V0X2hvc3RfaXA7CisrCQlCSU9fZ2V0X3BvcnQ7CisrCQlCSU9fZ2V0X3JldHJ5X0JJTzsKKysJCUJJT19nZXRfcmV0cnlfcmVhc29uOworKwkJQklPX2dldGhvc3RieW5hbWU7CisrCQlCSU9fZ2V0czsKKysJCUJJT19uZXc7CisrCQlCSU9fbmV3X2FjY2VwdDsKKysJCUJJT19uZXdfY29ubmVjdDsKKysJCUJJT19uZXdfZmQ7CisrCQlCSU9fbmV3X2ZpbGU7CisrCQlCSU9fbmV3X2ZwOworKwkJQklPX25ld19zb2NrZXQ7CisrCQlCSU9fcG9wOworKwkJQklPX3ByaW50ZjsKKysJCUJJT19wdXNoOworKwkJQklPX3B1dHM7CisrCQlCSU9fcmVhZDsKKysJCUJJT19zX2FjY2VwdDsKKysJCUJJT19zX2Nvbm5lY3Q7CisrCQlCSU9fc19mZDsKKysJCUJJT19zX2ZpbGU7CisrCQlCSU9fc19tZW07CisrCQlCSU9fc19udWxsOworKwkJQklPX3NfcHJveHlfY2xpZW50OworKwkJQklPX3Nfc29ja2V0OworKwkJQklPX3NldDsKKysJCUJJT19zZXRfY2lwaGVyOworKwkJQklPX3NldF90Y3BfbmRlbGF5OworKwkJQklPX3NvY2tfY2xlYW51cDsKKysJCUJJT19zb2NrX2Vycm9yOworKwkJQklPX3NvY2tfaW5pdDsKKysJCUJJT19zb2NrX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19zb2NrX3Nob3VsZF9yZXRyeTsKKysJCUJJT19zb2NrZXRfaW9jdGw7CisrCQlCSU9fd3JpdGU7CisrCQlCTl9DVFhfZnJlZTsKKysJCUJOX0NUWF9uZXc7CisrCQlCTl9NT05UX0NUWF9mcmVlOworKwkJQk5fTU9OVF9DVFhfbmV3OworKwkJQk5fTU9OVF9DVFhfc2V0OworKwkJQk5fYWRkOworKwkJQk5fYWRkX3dvcmQ7CisrCQlCTl9oZXgyYm47CisrCQlCTl9iaW4yYm47CisrCQlCTl9ibjJoZXg7CisrCQlCTl9ibjJiaW47CisrCQlCTl9jbGVhcjsKKysJCUJOX2NsZWFyX2JpdDsKKysJCUJOX2NsZWFyX2ZyZWU7CisrCQlCTl9jbXA7CisrCQlCTl9jb3B5OworKwkJQk5fZGl2OworKwkJQk5fZGl2X3dvcmQ7CisrCQlCTl9kdXA7CisrCQlCTl9mcmVlOworKwkJQk5fZnJvbV9tb250Z29tZXJ5OworKwkJQk5fZ2NkOworKwkJQk5fZ2VuZXJhdGVfcHJpbWU7CisrCQlCTl9nZXRfd29yZDsKKysJCUJOX2lzX2JpdF9zZXQ7CisrCQlCTl9pc19wcmltZTsKKysJCUJOX2xzaGlmdDsKKysJCUJOX2xzaGlmdDE7CisrCQlCTl9tYXNrX2JpdHM7CisrCQlCTl9tb2Q7CisrCQlCTl9tb2RfZXhwOworKwkJQk5fbW9kX2V4cF9tb250OworKwkJQk5fbW9kX2V4cF9zaW1wbGU7CisrCQlCTl9tb2RfaW52ZXJzZTsKKysJCUJOX21vZF9tdWw7CisrCQlCTl9tb2RfbXVsX21vbnRnb21lcnk7CisrCQlCTl9tb2Rfd29yZDsKKysJCUJOX211bDsKKysJCUJOX25ldzsKKysJCUJOX251bV9iaXRzOworKwkJQk5fbnVtX2JpdHNfd29yZDsKKysJCUJOX29wdGlvbnM7CisrCQlCTl9wcmludDsKKysJCUJOX3ByaW50X2ZwOworKwkJQk5fcmFuZDsKKysJCUJOX3JlY2lwcm9jYWw7CisrCQlCTl9yc2hpZnQ7CisrCQlCTl9yc2hpZnQxOworKwkJQk5fc2V0X2JpdDsKKysJCUJOX3NldF93b3JkOworKwkJQk5fc3FyOworKwkJQk5fc3ViOworKwkJQk5fdG9fQVNOMV9JTlRFR0VSOworKwkJQk5fdWNtcDsKKysJCUJOX3ZhbHVlX29uZTsKKysJCUJVRl9NRU1fZnJlZTsKKysJCUJVRl9NRU1fZ3JvdzsKKysJCUJVRl9NRU1fbmV3OworKwkJQlVGX3N0cmR1cDsKKysJCUNPTkZfZnJlZTsKKysJCUNPTkZfZ2V0X251bWJlcjsKKysJCUNPTkZfZ2V0X3NlY3Rpb247CisrCQlDT05GX2dldF9zdHJpbmc7CisrCQlDT05GX2xvYWQ7CisrCQlDUllQVE9fYWRkX2xvY2s7CisrCQlDUllQVE9fZGJnX2ZyZWU7CisrCQlDUllQVE9fZGJnX21hbGxvYzsKKysJCUNSWVBUT19kYmdfcmVhbGxvYzsKKysJCUNSWVBUT19kYmdfcmVtYWxsb2M7CisrCQlDUllQVE9fZnJlZTsKKysJCUNSWVBUT19nZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9sb2NrX25hbWU7CisrCQlDUllQVE9fZ2V0X2xvY2tpbmdfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fbG9jazsKKysJCUNSWVBUT19tYWxsb2M7CisrCQlDUllQVE9fbWVtX2N0cmw7CisrCQlDUllQVE9fbWVtX2xlYWtzOworKwkJQ1JZUFRPX21lbV9sZWFrc19jYjsKKysJCUNSWVBUT19tZW1fbGVha3NfZnA7CisrCQlDUllQVE9fcmVhbGxvYzsKKysJCUNSWVBUT19yZW1hbGxvYzsKKysJCUNSWVBUT19zZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX3RocmVhZF9pZDsKKysJCURIX2NoZWNrOworKwkJREhfY29tcHV0ZV9rZXk7CisrCQlESF9mcmVlOworKwkJREhfZ2VuZXJhdGVfa2V5OworKwkJREhfZ2VuZXJhdGVfcGFyYW1ldGVyczsKKysJCURIX25ldzsKKysJCURIX3NpemU7CisrCQlESHBhcmFtc19wcmludDsKKysJCURIcGFyYW1zX3ByaW50X2ZwOworKwkJRFNBX2ZyZWU7CisrCQlEU0FfZ2VuZXJhdGVfa2V5OworKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnM7CisrCQlEU0FfaXNfcHJpbWU7CisrCQlEU0FfbmV3OworKwkJRFNBX3ByaW50OworKwkJRFNBX3ByaW50X2ZwOworKwkJRFNBX3NpZ247CisrCQlEU0Ffc2lnbl9zZXR1cDsKKysJCURTQV9zaXplOworKwkJRFNBX3ZlcmlmeTsKKysJCURTQXBhcmFtc19wcmludDsKKysJCURTQXBhcmFtc19wcmludF9mcDsKKysJCUVSUl9jbGVhcl9lcnJvcjsKKysJCUVSUl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfZnJlZV9zdHJpbmdzOworKwkJRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2dldF9lcnJfc3RhdGVfdGFibGU7CisrCQlFUlJfZ2V0X2Vycm9yOworKwkJRVJSX2dldF9lcnJvcl9saW5lOworKwkJRVJSX2dldF9zdGF0ZTsKKysJCUVSUl9nZXRfc3RyaW5nX3RhYmxlOworKwkJRVJSX2xpYl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfbG9hZF9BU04xX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CSU9fc3RyaW5nczsKKysJCUVSUl9sb2FkX0JOX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CVUZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0NPTkZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0RIX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9EU0Ffc3RyaW5nczsKKysJCUVSUl9sb2FkX0VSUl9zdHJpbmdzOworKwkJRVJSX2xvYWRfRVZQX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9PQkpfc3RyaW5nczsKKysJCUVSUl9sb2FkX1BFTV9zdHJpbmdzOworKwkJRVJSX2xvYWRfUFJPWFlfc3RyaW5nczsKKysJCUVSUl9sb2FkX1JTQV9zdHJpbmdzOworKwkJRVJSX2xvYWRfWDUwOV9zdHJpbmdzOworKwkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9zdHJpbmdzOworKwkJRVJSX3BlZWtfZXJyb3I7CisrCQlFUlJfcGVla19lcnJvcl9saW5lOworKwkJRVJSX3ByaW50X2Vycm9yczsKKysJCUVSUl9wcmludF9lcnJvcnNfZnA7CisrCQlFUlJfcHV0X2Vycm9yOworKwkJRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfcmVtb3ZlX3N0YXRlOworKwkJRVZQX0J5dGVzVG9LZXk7CisrCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwOworKwkJRVZQX0NpcGhlckZpbmFsOworKwkJRVZQX0NpcGhlckluaXQ7CisrCQlFVlBfQ2lwaGVyVXBkYXRlOworKwkJRVZQX0RlY29kZUJsb2NrOworKwkJRVZQX0RlY29kZUZpbmFsOworKwkJRVZQX0RlY29kZUluaXQ7CisrCQlFVlBfRGVjb2RlVXBkYXRlOworKwkJRVZQX0RlY3J5cHRGaW5hbDsKKysJCUVWUF9EZWNyeXB0SW5pdDsKKysJCUVWUF9EZWNyeXB0VXBkYXRlOworKwkJRVZQX0RpZ2VzdEZpbmFsOworKwkJRVZQX0RpZ2VzdEluaXQ7CisrCQlFVlBfRGlnZXN0VXBkYXRlOworKwkJRVZQX0VuY29kZUJsb2NrOworKwkJRVZQX0VuY29kZUZpbmFsOworKwkJRVZQX0VuY29kZUluaXQ7CisrCQlFVlBfRW5jb2RlVXBkYXRlOworKwkJRVZQX0VuY3J5cHRGaW5hbDsKKysJCUVWUF9FbmNyeXB0SW5pdDsKKysJCUVWUF9FbmNyeXB0VXBkYXRlOworKwkJRVZQX09wZW5GaW5hbDsKKysJCUVWUF9PcGVuSW5pdDsKKysJCUVWUF9QS0VZX2Fzc2lnbjsKKysJCUVWUF9QS0VZX2NvcHlfcGFyYW1ldGVyczsKKysJCUVWUF9QS0VZX2ZyZWU7CisrCQlFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9uZXc7CisrCQlFVlBfUEtFWV9zYXZlX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9zaXplOworKwkJRVZQX1BLRVlfdHlwZTsKKysJCUVWUF9TZWFsRmluYWw7CisrCQlFVlBfU2VhbEluaXQ7CisrCQlFVlBfU2lnbkZpbmFsOworKwkJRVZQX1ZlcmlmeUZpbmFsOworKwkJRVZQX2FkZF9hbGlhczsKKysJCUVWUF9hZGRfY2lwaGVyOworKwkJRVZQX2FkZF9kaWdlc3Q7CisrCQlFVlBfYmZfY2JjOworKwkJRVZQX2JmX2NmYjY0OworKwkJRVZQX2JmX2VjYjsKKysJCUVWUF9iZl9vZmI7CisrCQlFVlBfY2xlYW51cDsKKysJCUVWUF9kZXNfY2JjOworKwkJRVZQX2Rlc19jZmI2NDsKKysJCUVWUF9kZXNfZWNiOworKwkJRVZQX2Rlc19lZGU7CisrCQlFVlBfZGVzX2VkZTM7CisrCQlFVlBfZGVzX2VkZTNfY2JjOworKwkJRVZQX2Rlc19lZGUzX2NmYjY0OworKwkJRVZQX2Rlc19lZGUzX29mYjsKKysJCUVWUF9kZXNfZWRlX2NiYzsKKysJCUVWUF9kZXNfZWRlX2NmYjY0OworKwkJRVZQX2Rlc19lZGVfb2ZiOworKwkJRVZQX2Rlc19vZmI7CisrCQlFVlBfZGVzeF9jYmM7CisrCQlFVlBfZHNzOworKwkJRVZQX2RzczE7CisrCQlFVlBfZW5jX251bGw7CisrCQlFVlBfZ2V0X2NpcGhlcmJ5bmFtZTsKKysJCUVWUF9nZXRfZGlnZXN0YnluYW1lOworKwkJRVZQX2dldF9wd19wcm9tcHQ7CisrCQlFVlBfaWRlYV9jYmM7CisrCQlFVlBfaWRlYV9jZmI2NDsKKysJCUVWUF9pZGVhX2VjYjsKKysJCUVWUF9pZGVhX29mYjsKKysJCUVWUF9tZDI7CisrCQlFVlBfbWQ1OworKwkJRVZQX21kX251bGw7CisrCQlFVlBfcmMyX2NiYzsKKysJCUVWUF9yYzJfY2ZiNjQ7CisrCQlFVlBfcmMyX2VjYjsKKysJCUVWUF9yYzJfb2ZiOworKwkJRVZQX3JjNDsKKysJCUVWUF9yZWFkX3B3X3N0cmluZzsKKysJCUVWUF9zZXRfcHdfcHJvbXB0OworKwkJRVZQX3NoYTsKKysJCUVWUF9zaGExOworKwkJTUQyOworKwkJTUQyX0ZpbmFsOworKwkJTUQyX0luaXQ7CisrCQlNRDJfVXBkYXRlOworKwkJTUQyX29wdGlvbnM7CisrCQlNRDU7CisrCQlNRDVfRmluYWw7CisrCQlNRDVfSW5pdDsKKysJCU1ENV9VcGRhdGU7CisrCQlNREMyOworKwkJTURDMl9GaW5hbDsKKysJCU1EQzJfSW5pdDsKKysJCU1EQzJfVXBkYXRlOworKwkJTkVUU0NBUEVfU1BLQUNfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0FDX25ldzsKKysJCU5FVFNDQVBFX1NQS0lfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0lfbmV3OworKwkJTkVUU0NBUEVfU1BLSV9zaWduOworKwkJTkVUU0NBUEVfU1BLSV92ZXJpZnk7CisrCQlPQkpfYWRkX29iamVjdDsKKysJCU9CSl9ic2VhcmNoOworKwkJT0JKX2NsZWFudXA7CisrCQlPQkpfY21wOworKwkJT0JKX2NyZWF0ZTsKKysJCU9CSl9kdXA7CisrCQlPQkpfbG4ybmlkOworKwkJT0JKX25ld19uaWQ7CisrCQlPQkpfbmlkMmxuOworKwkJT0JKX25pZDJvYmo7CisrCQlPQkpfbmlkMnNuOworKwkJT0JKX29iajJuaWQ7CisrCQlPQkpfc24ybmlkOworKwkJT0JKX3R4dDJuaWQ7CisrCQlQRU1fQVNOMV9yZWFkOworKwkJUEVNX0FTTjFfcmVhZF9iaW87CisrCQlQRU1fQVNOMV93cml0ZTsKKysJCVBFTV9BU04xX3dyaXRlX2JpbzsKKysJCVBFTV9TZWFsRmluYWw7CisrCQlQRU1fU2VhbEluaXQ7CisrCQlQRU1fU2VhbFVwZGF0ZTsKKysJCVBFTV9TaWduRmluYWw7CisrCQlQRU1fU2lnbkluaXQ7CisrCQlQRU1fU2lnblVwZGF0ZTsKKysJCVBFTV9YNTA5X0lORk9fcmVhZDsKKysJCVBFTV9YNTA5X0lORk9fcmVhZF9iaW87CisrCQlQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbzsKKysJCVBFTV9kZWtfaW5mbzsKKysJCVBFTV9kb19oZWFkZXI7CisrCQlQRU1fZ2V0X0VWUF9DSVBIRVJfSU5GTzsKKysJCVBFTV9wcm9jX3R5cGU7CisrCQlQRU1fcmVhZDsKKysJCVBFTV9yZWFkX0RIcGFyYW1zOworKwkJUEVNX3JlYWRfRFNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX1BLQ1M3OworKwkJUEVNX3JlYWRfUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9YNTA5OworKwkJUEVNX3JlYWRfWDUwOV9DUkw7CisrCQlQRU1fcmVhZF9YNTA5X1JFUTsKKysJCVBFTV9yZWFkX2JpbzsKKysJCVBFTV9yZWFkX2Jpb19ESHBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19QS0NTNzsKKysJCVBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0NSTDsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X1JFUTsKKysJCVBFTV93cml0ZTsKKysJCVBFTV93cml0ZV9ESHBhcmFtczsKKysJCVBFTV93cml0ZV9EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX0RTQXBhcmFtczsKKysJCVBFTV93cml0ZV9QS0NTNzsKKysJCVBFTV93cml0ZV9Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfWDUwOTsKKysJCVBFTV93cml0ZV9YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9YNTA5X1JFUTsKKysJCVBFTV93cml0ZV9iaW87CisrCQlQRU1fd3JpdGVfYmlvX0RIcGFyYW1zOworKwkJUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19EU0FwYXJhbXM7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M3OworKwkJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19SU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVE7CisrCQlQS0NTN19ESUdFU1RfZnJlZTsKKysJCVBLQ1M3X0RJR0VTVF9uZXc7CisrCQlQS0NTN19FTkNSWVBUX2ZyZWU7CisrCQlQS0NTN19FTkNSWVBUX25ldzsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2ZyZWU7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9uZXc7CisrCQlQS0NTN19FTlZFTE9QRV9mcmVlOworKwkJUEtDUzdfRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZnJlZTsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX25ldzsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fZnJlZTsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fbmV3OworKwkJUEtDUzdfU0lHTkVEX2ZyZWU7CisrCQlQS0NTN19TSUdORURfbmV3OworKwkJUEtDUzdfU0lHTkVSX0lORk9fZnJlZTsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX25ldzsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfZnJlZTsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfZHVwOworKwkJUEtDUzdfZnJlZTsKKysJCVBLQ1M3X25ldzsKKysJCVBST1hZX0VOVFJZX2FkZF9ub3Byb3h5OworKwkJUFJPWFlfRU5UUllfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX2ZyZWU7CisrCQlQUk9YWV9FTlRSWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX25ldzsKKysJCVBST1hZX0VOVFJZX3NldF9zZXJ2ZXI7CisrCQlQUk9YWV9hZGRfbm9wcm94eTsKKysJCVBST1hZX2FkZF9zZXJ2ZXI7CisrCQlQUk9YWV9jaGVja19ieV9ob3N0OworKwkJUFJPWFlfY2hlY2tfdXJsOworKwkJUFJPWFlfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX2ZyZWU7CisrCQlQUk9YWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX2dldF9wcm94aWVzOworKwkJUFJPWFlfZ2V0X3Byb3h5X2VudHJ5OworKwkJUFJPWFlfbG9hZF9jb25mOworKwkJUFJPWFlfbmV3OworKwkJUFJPWFlfcHJpbnQ7CisrCQlSQU5EX2J5dGVzOworKwkJUkFORF9jbGVhbnVwOworKwkJUkFORF9maWxlX25hbWU7CisrCQlSQU5EX2xvYWRfZmlsZTsKKysJCVJBTkRfc2NyZWVuOworKwkJUkFORF9zZWVkOworKwkJUkFORF93cml0ZV9maWxlOworKwkJUkMyX2NiY19lbmNyeXB0OworKwkJUkMyX2NmYjY0X2VuY3J5cHQ7CisrCQlSQzJfZWNiX2VuY3J5cHQ7CisrCQlSQzJfZW5jcnlwdDsKKysJCVJDMl9vZmI2NF9lbmNyeXB0OworKwkJUkMyX3NldF9rZXk7CisrCQlSQzQ7CisrCQlSQzRfb3B0aW9uczsKKysJCVJDNF9zZXRfa2V5OworKwkJUlNBUHJpdmF0ZUtleV9hc24xX21ldGg7CisrCQlSU0FQcml2YXRlS2V5X2R1cDsKKysJCVJTQVB1YmxpY0tleV9kdXA7CisrCQlSU0FfUEtDUzFfU1NMZWF5OworKwkJUlNBX2ZyZWU7CisrCQlSU0FfZ2VuZXJhdGVfa2V5OworKwkJUlNBX25ldzsKKysJCVJTQV9uZXdfbWV0aG9kOworKwkJUlNBX3ByaW50OworKwkJUlNBX3ByaW50X2ZwOworKwkJUlNBX3ByaXZhdGVfZGVjcnlwdDsKKysJCVJTQV9wcml2YXRlX2VuY3J5cHQ7CisrCQlSU0FfcHVibGljX2RlY3J5cHQ7CisrCQlSU0FfcHVibGljX2VuY3J5cHQ7CisrCQlSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUlNBX3NpZ247CisrCQlSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORzsKKysJCVJTQV9zaXplOworKwkJUlNBX3ZlcmlmeTsKKysJCVJTQV92ZXJpZnlfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlTSEE7CisrCQlTSEExOworKwkJU0hBMV9GaW5hbDsKKysJCVNIQTFfSW5pdDsKKysJCVNIQTFfVXBkYXRlOworKwkJU0hBX0ZpbmFsOworKwkJU0hBX0luaXQ7CisrCQlTSEFfVXBkYXRlOworKwkJT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXM7CisrCQlPcGVuU1NMX2FkZF9hbGxfY2lwaGVyczsKKysJCU9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzOworKwkJVFhUX0RCX2NyZWF0ZV9pbmRleDsKKysJCVRYVF9EQl9mcmVlOworKwkJVFhUX0RCX2dldF9ieV9pbmRleDsKKysJCVRYVF9EQl9pbnNlcnQ7CisrCQlUWFRfREJfcmVhZDsKKysJCVRYVF9EQl93cml0ZTsKKysJCVg1MDlfQUxHT1JfZnJlZTsKKysJCVg1MDlfQUxHT1JfbmV3OworKwkJWDUwOV9BVFRSSUJVVEVfZnJlZTsKKysJCVg1MDlfQVRUUklCVVRFX25ldzsKKysJCVg1MDlfQ0lORl9mcmVlOworKwkJWDUwOV9DSU5GX25ldzsKKysJCVg1MDlfQ1JMX0lORk9fZnJlZTsKKysJCVg1MDlfQ1JMX0lORk9fbmV3OworKwkJWDUwOV9DUkxfYWRkX2V4dDsKKysJCVg1MDlfQ1JMX2NtcDsKKysJCVg1MDlfQ1JMX2RlbGV0ZV9leHQ7CisrCQlYNTA5X0NSTF9kdXA7CisrCQlYNTA5X0NSTF9mcmVlOworKwkJWDUwOV9DUkxfZ2V0X2V4dDsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfTklEOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfQ1JMX25ldzsKKysJCVg1MDlfQ1JMX3NpZ247CisrCQlYNTA5X0NSTF92ZXJpZnk7CisrCQlYNTA5X0VYVEVOU0lPTl9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X09CSjsKKysJCVg1MDlfRVhURU5TSU9OX2R1cDsKKysJCVg1MDlfRVhURU5TSU9OX2ZyZWU7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX2dldF9vYmplY3Q7CisrCQlYNTA5X0VYVEVOU0lPTl9uZXc7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX3NldF9vYmplY3Q7CisrCQlYNTA5X0lORk9fZnJlZTsKKysJCVg1MDlfSU5GT19uZXc7CisrCQlYNTA5X0xPT0tVUF9ieV9hbGlhczsKKysJCVg1MDlfTE9PS1VQX2J5X2ZpbmdlcnByaW50OworKwkJWDUwOV9MT09LVVBfYnlfaXNzdWVyX3NlcmlhbDsKKysJCVg1MDlfTE9PS1VQX2J5X3N1YmplY3Q7CisrCQlYNTA5X0xPT0tVUF9jdHJsOworKwkJWDUwOV9MT09LVVBfZmlsZTsKKysJCVg1MDlfTE9PS1VQX2ZyZWU7CisrCQlYNTA5X0xPT0tVUF9oYXNoX2RpcjsKKysJCVg1MDlfTE9PS1VQX2luaXQ7CisrCQlYNTA5X0xPT0tVUF9uZXc7CisrCQlYNTA5X0xPT0tVUF9zaHV0ZG93bjsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X05BTUVfRU5UUllfZHVwOworKwkJWDUwOV9OQU1FX0VOVFJZX2ZyZWU7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9FTlRSWV9uZXc7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnk7CisrCQlYNTA5X05BTUVfY21wOworKwkJWDUwOV9OQU1FX2RlbGV0ZV9lbnRyeTsKKysJCVg1MDlfTkFNRV9kaWdlc3Q7CisrCQlYNTA5X05BTUVfZHVwOworKwkJWDUwOV9OQU1FX2VudHJ5X2NvdW50OworKwkJWDUwOV9OQU1FX2ZyZWU7CisrCQlYNTA5X05BTUVfZ2V0X2VudHJ5OworKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSjsKKysJCVg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfT0JKOworKwkJWDUwOV9OQU1FX2hhc2g7CisrCQlYNTA5X05BTUVfbmV3OworKwkJWDUwOV9OQU1FX29uZWxpbmU7CisrCQlYNTA5X05BTUVfcHJpbnQ7CisrCQlYNTA5X05BTUVfc2V0OworKwkJWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50czsKKysJCVg1MDlfT0JKRUNUX3JldHJpZXZlX2J5X3N1YmplY3Q7CisrCQlYNTA5X09CSkVDVF91cF9yZWZfY291bnQ7CisrCQlYNTA5X1BLRVlfZnJlZTsKKysJCVg1MDlfUEtFWV9uZXc7CisrCQlYNTA5X1BVQktFWV9mcmVlOworKwkJWDUwOV9QVUJLRVlfZ2V0OworKwkJWDUwOV9QVUJLRVlfbmV3OworKwkJWDUwOV9QVUJLRVlfc2V0OworKwkJWDUwOV9SRVFfSU5GT19mcmVlOworKwkJWDUwOV9SRVFfSU5GT19uZXc7CisrCQlYNTA5X1JFUV9kdXA7CisrCQlYNTA5X1JFUV9mcmVlOworKwkJWDUwOV9SRVFfZ2V0X3B1YmtleTsKKysJCVg1MDlfUkVRX25ldzsKKysJCVg1MDlfUkVRX3ByaW50OworKwkJWDUwOV9SRVFfcHJpbnRfZnA7CisrCQlYNTA5X1JFUV9zZXRfcHVia2V5OworKwkJWDUwOV9SRVFfc2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfUkVRX3NldF92ZXJzaW9uOworKwkJWDUwOV9SRVFfc2lnbjsKKysJCVg1MDlfUkVRX3RvX1g1MDk7CisrCQlYNTA5X1JFUV92ZXJpZnk7CisrCQlYNTA5X1JFVk9LRURfYWRkX2V4dDsKKysJCVg1MDlfUkVWT0tFRF9kZWxldGVfZXh0OworKwkJWDUwOV9SRVZPS0VEX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfY3JpdGljOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfY291bnQ7CisrCQlYNTA5X1JFVk9LRURfbmV3OworKwkJWDUwOV9TSUdfZnJlZTsKKysJCVg1MDlfU0lHX25ldzsKKysJCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXA7CisrCQlYNTA5X1NUT1JFX0NUWF9pbml0OworKwkJWDUwOV9TVE9SRV9hZGRfY2VydDsKKysJCVg1MDlfU1RPUkVfYWRkX2xvb2t1cDsKKysJCVg1MDlfU1RPUkVfZnJlZTsKKysJCVg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Q7CisrCQlYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zOworKwkJWDUwOV9TVE9SRV9uZXc7CisrCQlYNTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzOworKwkJWDUwOV9WQUxfZnJlZTsKKysJCVg1MDlfVkFMX25ldzsKKysJCVg1MDlfYWRkX2V4dDsKKysJCVg1MDlfYXNuMV9tZXRoOworKwkJWDUwOV9jZXJ0aWZpY2F0ZV90eXBlOworKwkJWDUwOV9jaGVja19wcml2YXRlX2tleTsKKysJCVg1MDlfY21wX2N1cnJlbnRfdGltZTsKKysJCVg1MDlfZGVsZXRlX2V4dDsKKysJCVg1MDlfZGlnZXN0OworKwkJWDUwOV9kdXA7CisrCQlYNTA5X2ZyZWU7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfYXJlYTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXI7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52OworKwkJWDUwOV9nZXRfZGVmYXVsdF9wcml2YXRlX2RpcjsKKysJCVg1MDlfZ2V0X2V4dDsKKysJCVg1MDlfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9nZXRfaXNzdWVyX25hbWU7CisrCQlYNTA5X2dldF9wdWJrZXk7CisrCQlYNTA5X2dldF9wdWJrZXlfcGFyYW1ldGVyczsKKysJCVg1MDlfZ2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfZ2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfZ210aW1lX2FkajsKKysJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfY21wOworKwkJWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9oYXNoOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9jbXA7CisrCQlYNTA5X2lzc3Vlcl9uYW1lX2hhc2g7CisrCQlYNTA5X2xvYWRfY2VydF9maWxlOworKwkJWDUwOV9uZXc7CisrCQlYNTA5X3ByaW50OworKwkJWDUwOV9wcmludF9mcDsKKysJCVg1MDlfc2V0X2lzc3Vlcl9uYW1lOworKwkJWDUwOV9zZXRfbm90QWZ0ZXI7CisrCQlYNTA5X3NldF9ub3RCZWZvcmU7CisrCQlYNTA5X3NldF9wdWJrZXk7CisrCQlYNTA5X3NldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X3NldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X3NldF92ZXJzaW9uOworKwkJWDUwOV9zaWduOworKwkJWDUwOV9zdWJqZWN0X25hbWVfY21wOworKwkJWDUwOV9zdWJqZWN0X25hbWVfaGFzaDsKKysJCVg1MDlfdG9fWDUwOV9SRVE7CisrCQlYNTA5X3ZlcmlmeTsKKysJCVg1MDlfdmVyaWZ5X2NlcnQ7CisrCQlYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZzsKKysJCVg1MDl2M19hZGRfZXh0OworKwkJWDUwOXYzX2FkZF9leHRlbnNpb247CisrCQlYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfY2xlYW51cF9leHRlbnNpb25zOworKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfZGF0YV90eXBlX2J5X09CSjsKKysJCVg1MDl2M19kZWxldGVfZXh0OworKwkJWDUwOXYzX2dldF9leHQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDl2M19nZXRfZXh0X2NvdW50OworKwkJWDUwOXYzX3BhY2tfc3RyaW5nOworKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfcGFja190eXBlX2J5X09CSjsKKysJCVg1MDl2M191bnBhY2tfc3RyaW5nOworKwkJX2Rlc19jcnlwdDsKKysJCWEyZF9BU04xX09CSkVDVDsKKysJCWEyaV9BU04xX0lOVEVHRVI7CisrCQlhMmlfQVNOMV9TVFJJTkc7CisrCQlhc24xX0ZpbmlzaDsKKysJCWFzbjFfR2V0U2VxdWVuY2U7CisrCQlibl9kaXZfd29yZHM7CisrCQlibl9leHBhbmQyOworKwkJYm5fbXVsX2FkZF93b3JkczsKKysJCWJuX211bF93b3JkczsKKysJCUJOX3VhZGQ7CisrCQlCTl91c3ViOworKwkJYm5fc3FyX3dvcmRzOworKwkJX29zc2xfb2xkX2NyeXB0OworKwkJZDJpX0FTTjFfQklUX1NUUklORzsKKysJCWQyaV9BU04xX0JPT0xFQU47CisrCQlkMmlfQVNOMV9IRUFERVI7CisrCQlkMmlfQVNOMV9JQTVTVFJJTkc7CisrCQlkMmlfQVNOMV9JTlRFR0VSOworKwkJZDJpX0FTTjFfT0JKRUNUOworKwkJZDJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFU1RSSU5HOworKwkJZDJpX0FTTjFfU0VUOworKwkJZDJpX0FTTjFfVDYxU1RSSU5HOworKwkJZDJpX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1VUQ1RJTUU7CisrCQlkMmlfQVNOMV9ieXRlczsKKysJCWQyaV9BU04xX3R5cGVfYnl0ZXM7CisrCQlkMmlfREhwYXJhbXM7CisrCQlkMmlfRFNBUHJpdmF0ZUtleTsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX0RTQVB1YmxpY0tleTsKKysJCWQyaV9EU0FwYXJhbXM7CisrCQlkMmlfTkVUU0NBUEVfU1BLQUM7CisrCQlkMmlfTkVUU0NBUEVfU1BLSTsKKysJCWQyaV9OZXRzY2FwZV9SU0E7CisrCQlkMmlfUEtDUzc7CisrCQlkMmlfUEtDUzdfRElHRVNUOworKwkJZDJpX1BLQ1M3X0VOQ1JZUFQ7CisrCQlkMmlfUEtDUzdfRU5DX0NPTlRFTlQ7CisrCQlkMmlfUEtDUzdfRU5WRUxPUEU7CisrCQlkMmlfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7CisrCQlkMmlfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWQyaV9QS0NTN19TSUdORUQ7CisrCQlkMmlfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfUEtDUzdfU0lHTl9FTlZFTE9QRTsKKysJCWQyaV9QS0NTN19iaW87CisrCQlkMmlfUEtDUzdfZnA7CisrCQlkMmlfUHJpdmF0ZUtleTsKKysJCWQyaV9QdWJsaWNLZXk7CisrCQlkMmlfUlNBUHJpdmF0ZUtleTsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX1JTQVB1YmxpY0tleTsKKysJCWQyaV9YNTA5OworKwkJZDJpX1g1MDlfQUxHT1I7CisrCQlkMmlfWDUwOV9BVFRSSUJVVEU7CisrCQlkMmlfWDUwOV9DSU5GOworKwkJZDJpX1g1MDlfQ1JMOworKwkJZDJpX1g1MDlfQ1JMX0lORk87CisrCQlkMmlfWDUwOV9DUkxfYmlvOworKwkJZDJpX1g1MDlfQ1JMX2ZwOworKwkJZDJpX1g1MDlfRVhURU5TSU9OOworKwkJZDJpX1g1MDlfTkFNRTsKKysJCWQyaV9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfWDUwOV9QS0VZOworKwkJZDJpX1g1MDlfUFVCS0VZOworKwkJZDJpX1g1MDlfUkVROworKwkJZDJpX1g1MDlfUkVRX0lORk87CisrCQlkMmlfWDUwOV9SRVFfYmlvOworKwkJZDJpX1g1MDlfUkVRX2ZwOworKwkJZDJpX1g1MDlfUkVWT0tFRDsKKysJCWQyaV9YNTA5X1NJRzsKKysJCWQyaV9YNTA5X1ZBTDsKKysJCWQyaV9YNTA5X2JpbzsKKysJCWQyaV9YNTA5X2ZwOworKwkJREVTX2NiY19ja3N1bTsKKysJCURFU19jYmNfZW5jcnlwdDsKKysJCURFU19jYmxvY2tfcHJpbnRfZmlsZTsKKysJCURFU19jZmI2NF9lbmNyeXB0OworKwkJREVTX2NmYl9lbmNyeXB0OworKwkJREVTX2RlY3J5cHQzOworKwkJREVTX2VjYjNfZW5jcnlwdDsKKysJCURFU19lY2JfZW5jcnlwdDsKKysJCURFU19lZGUzX2NiY19lbmNyeXB0OworKwkJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCURFU19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfZW5jX3JlYWQ7CisrCQlERVNfZW5jX3dyaXRlOworKwkJREVTX2VuY3J5cHQxOworKwkJREVTX2VuY3J5cHQyOworKwkJREVTX2VuY3J5cHQzOworKwkJREVTX2ZjcnlwdDsKKysJCURFU19pc193ZWFrX2tleTsKKysJCURFU19rZXlfc2NoZWQ7CisrCQlERVNfbmNiY19lbmNyeXB0OworKwkJREVTX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfb2ZiX2VuY3J5cHQ7CisrCQlERVNfb3B0aW9uczsKKysJCURFU19wY2JjX2VuY3J5cHQ7CisrCQlERVNfcXVhZF9ja3N1bTsKKysJCURFU19yYW5kb21fa2V5OworKwkJX29zc2xfb2xkX2Rlc19yYW5kb21fc2VlZDsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF8ycGFzc3dvcmRzOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3Bhc3N3b3JkOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3OworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3X3N0cmluZzsKKysJCURFU19zZXRfa2V5OworKwkJREVTX3NldF9vZGRfcGFyaXR5OworKwkJREVTX3N0cmluZ190b18ya2V5czsKKysJCURFU19zdHJpbmdfdG9fa2V5OworKwkJREVTX3hjYmNfZW5jcnlwdDsKKysJCURFU194d2hpdGVfaW4yb3V0OworKwkJZmNyeXB0X2JvZHk7CisrCQlpMmFfQVNOMV9JTlRFR0VSOworKwkJaTJhX0FTTjFfT0JKRUNUOworKwkJaTJhX0FTTjFfU1RSSU5HOworKwkJaTJkX0FTTjFfQklUX1NUUklORzsKKysJCWkyZF9BU04xX0JPT0xFQU47CisrCQlpMmRfQVNOMV9IRUFERVI7CisrCQlpMmRfQVNOMV9JQTVTVFJJTkc7CisrCQlpMmRfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfT0JKRUNUOworKwkJaTJkX0FTTjFfT0NURVRfU1RSSU5HOworKwkJaTJkX0FTTjFfUFJJTlRBQkxFOworKwkJaTJkX0FTTjFfU0VUOworKwkJaTJkX0FTTjFfVFlQRTsKKysJCWkyZF9BU04xX1VUQ1RJTUU7CisrCQlpMmRfQVNOMV9ieXRlczsKKysJCWkyZF9ESHBhcmFtczsKKysJCWkyZF9EU0FQcml2YXRlS2V5OworKwkJaTJkX0RTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX0RTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfRFNBUHVibGljS2V5OworKwkJaTJkX0RTQXBhcmFtczsKKysJCWkyZF9ORVRTQ0FQRV9TUEtBQzsKKysJCWkyZF9ORVRTQ0FQRV9TUEtJOworKwkJaTJkX05ldHNjYXBlX1JTQTsKKysJCWkyZF9QS0NTNzsKKysJCWkyZF9QS0NTN19ESUdFU1Q7CisrCQlpMmRfUEtDUzdfRU5DUllQVDsKKysJCWkyZF9QS0NTN19FTkNfQ09OVEVOVDsKKysJCWkyZF9QS0NTN19FTlZFTE9QRTsKKysJCWkyZF9QS0NTN19JU1NVRVJfQU5EX1NFUklBTDsKKysJCWkyZF9QS0NTN19SRUNJUF9JTkZPOworKwkJaTJkX1BLQ1M3X1NJR05FRDsKKysJCWkyZF9QS0NTN19TSUdORVJfSU5GTzsKKysJCWkyZF9QS0NTN19TSUdOX0VOVkVMT1BFOworKwkJaTJkX1BLQ1M3X2JpbzsKKysJCWkyZF9QS0NTN19mcDsKKysJCWkyZF9Qcml2YXRlS2V5OworKwkJaTJkX1B1YmxpY0tleTsKKysJCWkyZF9SU0FQcml2YXRlS2V5OworKwkJaTJkX1JTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX1JTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfUlNBUHVibGljS2V5OworKwkJaTJkX1g1MDk7CisrCQlpMmRfWDUwOV9BTEdPUjsKKysJCWkyZF9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9YNTA5X0NJTkY7CisrCQlpMmRfWDUwOV9DUkw7CisrCQlpMmRfWDUwOV9DUkxfSU5GTzsKKysJCWkyZF9YNTA5X0NSTF9iaW87CisrCQlpMmRfWDUwOV9DUkxfZnA7CisrCQlpMmRfWDUwOV9FWFRFTlNJT047CisrCQlpMmRfWDUwOV9OQU1FOworKwkJaTJkX1g1MDlfTkFNRV9FTlRSWTsKKysJCWkyZF9YNTA5X1BLRVk7CisrCQlpMmRfWDUwOV9QVUJLRVk7CisrCQlpMmRfWDUwOV9SRVE7CisrCQlpMmRfWDUwOV9SRVFfSU5GTzsKKysJCWkyZF9YNTA5X1JFUV9iaW87CisrCQlpMmRfWDUwOV9SRVFfZnA7CisrCQlpMmRfWDUwOV9SRVZPS0VEOworKwkJaTJkX1g1MDlfU0lHOworKwkJaTJkX1g1MDlfVkFMOworKwkJaTJkX1g1MDlfYmlvOworKwkJaTJkX1g1MDlfZnA7CisrCQlpZGVhX2NiY19lbmNyeXB0OworKwkJaWRlYV9jZmI2NF9lbmNyeXB0OworKwkJaWRlYV9lY2JfZW5jcnlwdDsKKysJCWlkZWFfZW5jcnlwdDsKKysJCWlkZWFfb2ZiNjRfZW5jcnlwdDsKKysJCWlkZWFfb3B0aW9uczsKKysJCWlkZWFfc2V0X2RlY3J5cHRfa2V5OworKwkJaWRlYV9zZXRfZW5jcnlwdF9rZXk7CisrCQlsaF9kZWxldGU7CisrCQlsaF9kb2FsbDsKKysJCWxoX2RvYWxsX2FyZzsKKysJCWxoX2ZyZWU7CisrCQlsaF9pbnNlcnQ7CisrCQlsaF9uZXc7CisrCQlsaF9ub2RlX3N0YXRzOworKwkJbGhfbm9kZV9zdGF0c19iaW87CisrCQlsaF9ub2RlX3VzYWdlX3N0YXRzOworKwkJbGhfbm9kZV91c2FnZV9zdGF0c19iaW87CisrCQlsaF9yZXRyaWV2ZTsKKysJCWxoX3N0YXRzOworKwkJbGhfc3RhdHNfYmlvOworKwkJbGhfc3RyaGFzaDsKKysJCXNrX2RlbGV0ZTsKKysJCXNrX2RlbGV0ZV9wdHI7CisrCQlza19kdXA7CisrCQlza19maW5kOworKwkJc2tfZnJlZTsKKysJCXNrX2luc2VydDsKKysJCXNrX25ldzsKKysJCXNrX3BvcDsKKysJCXNrX3BvcF9mcmVlOworKwkJc2tfcHVzaDsKKysJCXNrX3NldF9jbXBfZnVuYzsKKysJCXNrX3NoaWZ0OworKwkJc2tfdW5zaGlmdDsKKysJCXNrX3plcm87CisrCQlCSU9fZl9uYmlvX3Rlc3Q7CisrCQlBU04xX1RZUEVfZ2V0OworKwkJQVNOMV9UWVBFX3NldDsKKysJCVBLQ1M3X2NvbnRlbnRfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1M3X3N0cmluZ3M7CisrCQlYNTA5X2ZpbmRfYnlfaXNzdWVyX2FuZF9zZXJpYWw7CisrCQlYNTA5X2ZpbmRfYnlfc3ViamVjdDsKKysJCVBLQ1M3X2N0cmw7CisrCQlQS0NTN19zZXRfdHlwZTsKKysJCVBLQ1M3X3NldF9jb250ZW50OworKwkJUEtDUzdfU0lHTkVSX0lORk9fc2V0OworKwkJUEtDUzdfYWRkX3NpZ25lcjsKKysJCVBLQ1M3X2FkZF9jZXJ0aWZpY2F0ZTsKKysJCVBLQ1M3X2FkZF9jcmw7CisrCQlQS0NTN19jb250ZW50X25ldzsKKysJCVBLQ1M3X2RhdGFTaWduOworKwkJUEtDUzdfZGF0YVZlcmlmeTsKKysJCVBLQ1M3X2RhdGFJbml0OworKwkJUEtDUzdfYWRkX3NpZ25hdHVyZTsKKysJCVBLQ1M3X2NlcnRfZnJvbV9zaWduZXJfaW5mbzsKKysJCVBLQ1M3X2dldF9zaWduZXJfaW5mbzsKKysJCUVWUF9kZWxldGVfYWxpYXM7CisrCQlFVlBfbWRjMjsKKysJCVBFTV9yZWFkX2Jpb19SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfYmlvX1JTQVB1YmxpY0tleTsKKysJCWQyaV9SU0FQdWJsaWNLZXlfYmlvOworKwkJaTJkX1JTQVB1YmxpY0tleV9iaW87CisrCQlQRU1fcmVhZF9SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfUlNBUHVibGljS2V5OworKwkJZDJpX1JTQVB1YmxpY0tleV9mcDsKKysJCWkyZF9SU0FQdWJsaWNLZXlfZnA7CisrCQlCSU9fY29weV9uZXh0X3JldHJ5OworKwkJUlNBX2ZsYWdzOworKwkJWDUwOV9TVE9SRV9hZGRfY3JsOworKwkJWDUwOV9sb2FkX2NybF9maWxlOworKwkJRVZQX3JjMl80MF9jYmM7CisrCQlFVlBfcmM0XzQwOworKwkJRVZQX0NJUEhFUl9DVFhfaW5pdDsKKysJCUhNQUM7CisrCQlITUFDX0luaXQ7CisrCQlITUFDX1VwZGF0ZTsKKysJCUhNQUNfRmluYWw7CisrCQlFUlJfZ2V0X25leHRfZXJyb3JfbGlicmFyeTsKKysJCUVWUF9QS0VZX2NtcF9wYXJhbWV0ZXJzOworKwkJSE1BQ19jbGVhbnVwOworKwkJQklPX3B0cl9jdHJsOworKwkJQklPX25ld19maWxlX2ludGVybmFsOworKwkJQklPX25ld19mcF9pbnRlcm5hbDsKKysJCUJJT19zX2ZpbGVfaW50ZXJuYWw7CisrCQlCTl9CTElORElOR19jb252ZXJ0OworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0OworKwkJQk5fQkxJTkRJTkdfdXBkYXRlOworKwkJUlNBX2JsaW5kaW5nX29uOworKwkJUlNBX2JsaW5kaW5nX29mZjsKKysJCWkydF9BU04xX09CSkVDVDsKKysJCUJOX0JMSU5ESU5HX25ldzsKKysJCUJOX0JMSU5ESU5HX2ZyZWU7CisrCQlFVlBfY2FzdDVfY2JjOworKwkJRVZQX2Nhc3Q1X2NmYjY0OworKwkJRVZQX2Nhc3Q1X2VjYjsKKysJCUVWUF9jYXN0NV9vZmI7CisrCQlCRl9kZWNyeXB0OworKwkJQ0FTVF9zZXRfa2V5OworKwkJQ0FTVF9lbmNyeXB0OworKwkJQ0FTVF9kZWNyeXB0OworKwkJQ0FTVF9lY2JfZW5jcnlwdDsKKysJCUNBU1RfY2JjX2VuY3J5cHQ7CisrCQlDQVNUX2NmYjY0X2VuY3J5cHQ7CisrCQlDQVNUX29mYjY0X2VuY3J5cHQ7CisrCQlSQzJfZGVjcnlwdDsKKysJCU9CSl9jcmVhdGVfb2JqZWN0czsKKysJCUJOX2V4cDsKKysJCUJOX211bF93b3JkOworKwkJQk5fc3ViX3dvcmQ7CisrCQlCTl9kZWMyYm47CisrCQlCTl9ibjJkZWM7CisrCQlCSU9fZ2hibl9jdHJsOworKwkJQ1JZUFRPX2ZyZWVfZXhfZGF0YTsKKysJCUNSWVBUT19nZXRfZXhfZGF0YTsKKysJCUNSWVBUT19zZXRfZXhfZGF0YTsKKysJCUVSUl9sb2FkX0NSWVBUT19zdHJpbmdzOworKwkJRVJSX2xvYWRfQ1JZUFRPbGliX3N0cmluZ3M7CisrCQlFVlBfUEtFWV9iaXRzOworKwkJTUQ1X1RyYW5zZm9ybTsKKysJCVNIQTFfVHJhbnNmb3JtOworKwkJU0hBX1RyYW5zZm9ybTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jaGFpbjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQ7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9jZXJ0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2NoYWluOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2V4X2RhdGE7CisrCQlDUllQVE9fZHVwX2V4X2RhdGE7CisrCQlDUllQVE9fZ2V0X25ld19sb2NraWQ7CisrCQlDUllQVE9fbmV3X2V4X2RhdGE7CisrCQlSU0Ffc2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV90eXBlXzE7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfYWRkX1NTTHYyMzsKKysJCVJTQV9wYWRkaW5nX2FkZF9ub25lOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8xOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfU1NMdjIzOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfbm9uZTsKKysJCWJuX2FkZF93b3JkczsKKysJCWQyaV9OZXRzY2FwZV9SU0FfMjsKKysJCUNSWVBUT19nZXRfZXhfbmV3X2luZGV4OworKwkJUklQRU1EMTYwX0luaXQ7CisrCQlSSVBFTUQxNjBfVXBkYXRlOworKwkJUklQRU1EMTYwX0ZpbmFsOworKwkJUklQRU1EMTYwOworKwkJUklQRU1EMTYwX1RyYW5zZm9ybTsKKysJCVJDNV8zMl9zZXRfa2V5OworKwkJUkM1XzMyX2VjYl9lbmNyeXB0OworKwkJUkM1XzMyX2VuY3J5cHQ7CisrCQlSQzVfMzJfZGVjcnlwdDsKKysJCVJDNV8zMl9jYmNfZW5jcnlwdDsKKysJCVJDNV8zMl9jZmI2NF9lbmNyeXB0OworKwkJUkM1XzMyX29mYjY0X2VuY3J5cHQ7CisrCQlCTl9ibjJtcGk7CisrCQlCTl9tcGkyYm47CisrCQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdDsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYml0OworKwkJQklPX2dldF9leF9kYXRhOworKwkJQklPX2dldF9leF9uZXdfaW5kZXg7CisrCQlCSU9fc2V0X2V4X2RhdGE7CisrCQlYNTA5djNfZ2V0X2tleV91c2FnZTsKKysJCVg1MDl2M19zZXRfa2V5X3VzYWdlOworKwkJYTJpX1g1MDl2M19rZXlfdXNhZ2U7CisrCQlpMmFfWDUwOXYzX2tleV91c2FnZTsKKysJCUVWUF9QS0VZX2RlY3J5cHQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0OworKwkJUEtDUzdfUkVDSVBfSU5GT19zZXQ7CisrCQlQS0NTN19hZGRfcmVjaXBpZW50OworKwkJUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvOworKwkJUEtDUzdfc2V0X2NpcGhlcjsKKysJCUFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9zZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVVRDVElNRV9zZXRfc3RyaW5nOworKwkJRVJSX2FkZF9lcnJvcl9kYXRhOworKwkJRVJSX3NldF9lcnJvcl9kYXRhOworKwkJRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtOworKwkJRVZQX0NJUEhFUl9wYXJhbV90b19hc24xOworKwkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdjsKKysJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXY7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2NiYzsKKysJCUVWUF9yYzVfMzJfMTJfMTZfY2ZiNjQ7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2VjYjsKKysJCUVWUF9yYzVfMzJfMTJfMTZfb2ZiOworKwkJYXNuMV9hZGRfZXJyb3I7CisrCQlkMmlfQVNOMV9CTVBTVFJJTkc7CisrCQlpMmRfQVNOMV9CTVBTVFJJTkc7CisrCQlCSU9fZl9iZXI7CisrCQlCTl9pbml0OworKwkJQ09NUF9DVFhfbmV3OworKwkJQ09NUF9DVFhfZnJlZTsKKysJCUNPTVBfQ1RYX2NvbXByZXNzX2Jsb2NrOworKwkJQ09NUF9DVFhfZXhwYW5kX2Jsb2NrOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCU9CSl9OQU1FX2FkZDsKKysJCUJJT19zb2NrZXRfbmJpbzsKKysJCUVWUF9yYzJfNjRfY2JjOworKwkJT0JKX05BTUVfY2xlYW51cDsKKysJCU9CSl9OQU1FX2dldDsKKysJCU9CSl9OQU1FX2luaXQ7CisrCQlPQkpfTkFNRV9uZXdfaW5kZXg7CisrCQlPQkpfTkFNRV9yZW1vdmU7CisrCQlCTl9NT05UX0NUWF9jb3B5OworKwkJQklPX25ld19zb2NrczRhX2Nvbm5lY3Q7CisrCQlCSU9fc19zb2NrczRhX2Nvbm5lY3Q7CisrCQlQUk9YWV9zZXRfY29ubmVjdF9tb2RlOworKwkJUkFORF9TU0xlYXk7CisrCQlSQU5EX3NldF9yYW5kX21ldGhvZDsKKysJCVJTQV9tZW1vcnlfbG9jazsKKysJCWJuX3N1Yl93b3JkczsKKysJCWJuX211bF9ub3JtYWw7CisrCQlibl9tdWxfY29tYmE4OworKwkJYm5fbXVsX2NvbWJhNDsKKysJCWJuX3Nxcl9ub3JtYWw7CisrCQlibl9zcXJfY29tYmE4OworKwkJYm5fc3FyX2NvbWJhNDsKKysJCWJuX2NtcF93b3JkczsKKysJCWJuX211bF9yZWN1cnNpdmU7CisrCQlibl9tdWxfcGFydF9yZWN1cnNpdmU7CisrCQlibl9zcXJfcmVjdXJzaXZlOworKwkJYm5fbXVsX2xvd19ub3JtYWw7CisrCQlCTl9SRUNQX0NUWF9pbml0OworKwkJQk5fUkVDUF9DVFhfbmV3OworKwkJQk5fUkVDUF9DVFhfZnJlZTsKKysJCUJOX1JFQ1BfQ1RYX3NldDsKKysJCUJOX21vZF9tdWxfcmVjaXByb2NhbDsKKysJCUJOX21vZF9leHBfcmVjcDsKKysJCUJOX2Rpdl9yZWNwOworKwkJQk5fQ1RYX2luaXQ7CisrCQlCTl9NT05UX0NUWF9pbml0OworKwkJUkFORF9nZXRfcmFuZF9tZXRob2Q7CisrCQlQS0NTN19hZGRfYXR0cmlidXRlOworKwkJUEtDUzdfYWRkX3NpZ25lZF9hdHRyaWJ1dGU7CisrCQlQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzOworKwkJUEtDUzdfZ2V0X2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2dldF9pc3N1ZXJfYW5kX3NlcmlhbDsKKysJCVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlOworKwkJQ09NUF9jb21wcmVzc19ibG9jazsKKysJCUNPTVBfZXhwYW5kX2Jsb2NrOworKwkJQ09NUF9ybGU7CisrCQlDT01QX3psaWI7CisrCQltc190aW1lX2RpZmY7CisrCQltc190aW1lX25ldzsKKysJCW1zX3RpbWVfZnJlZTsKKysJCW1zX3RpbWVfY21wOworKwkJbXNfdGltZV9nZXQ7CisrCQlQS0NTN19zZXRfYXR0cmlidXRlczsKKysJCVBLQ1M3X3NldF9zaWduZWRfYXR0cmlidXRlczsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZTsKKysJCVg1MDlfQVRUUklCVVRFX2R1cDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2NoZWNrOworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXRfc3RyaW5nOworKwkJQVNOMV9USU1FX3ByaW50OworKwkJQkFTSUNfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX25ldzsKKysJCUVSUl9sb2FkX1g1MDlWM19zdHJpbmdzOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9mcmVlOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9uZXc7CisrCQlPQkpfdHh0Mm9iajsKKysJCVBFTV9yZWFkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fcmVhZF9OU19DRVJUX1NFUTsKKysJCVBFTV9yZWFkX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3JlYWRfYmlvX05TX0NFUlRfU0VROworKwkJUEVNX3dyaXRlX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfTlNfQ0VSVF9TRVE7CisrCQlQRU1fd3JpdGVfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfYmlvX05TX0NFUlRfU0VROworKwkJWDUwOVYzX0VYVF9hZGQ7CisrCQlYNTA5VjNfRVhUX2FkZF9hbGlhczsKKysJCVg1MDlWM19FWFRfYWRkX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NsZWFudXA7CisrCQlYNTA5VjNfRVhUX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NvbmZfbmlkOworKwkJWDUwOVYzX0VYVF9nZXQ7CisrCQlYNTA5VjNfRVhUX2dldF9uaWQ7CisrCQlYNTA5VjNfRVhUX3ByaW50OworKwkJWDUwOVYzX0VYVF9wcmludF9mcDsKKysJCVg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9uczsKKysJCVg1MDlWM19hZGRfdmFsdWU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2ludDsKKysJCVg1MDlWM19jb25mX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2ludDsKKysJCVg1MDlWM19wYXJzZV9saXN0OworKwkJZDJpX0FTTjFfR0VORVJBTElaRURUSU1FOworKwkJZDJpX0FTTjFfVElNRTsKKysJCWQyaV9CQVNJQ19DT05TVFJBSU5UUzsKKysJCWQyaV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJZDJpX2V4dF9rdTsKKysJCWV4dF9rdV9mcmVlOworKwkJZXh0X2t1X25ldzsKKysJCWkyZF9BU04xX0dFTkVSQUxJWkVEVElNRTsKKysJCWkyZF9BU04xX1RJTUU7CisrCQlpMmRfQkFTSUNfQ09OU1RSQUlOVFM7CisrCQlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCWkyZF9leHRfa3U7CisrCQlFVlBfTURfQ1RYX2NvcHk7CisrCQlpMmRfQVNOMV9FTlVNRVJBVEVEOworKwkJZDJpX0FTTjFfRU5VTUVSQVRFRDsKKysJCUFTTjFfRU5VTUVSQVRFRF9zZXQ7CisrCQlBU04xX0VOVU1FUkFURURfZ2V0OworKwkJQk5fdG9fQVNOMV9FTlVNRVJBVEVEOworKwkJQVNOMV9FTlVNRVJBVEVEX3RvX0JOOworKwkJaTJhX0FTTjFfRU5VTUVSQVRFRDsKKysJCWEyaV9BU04xX0VOVU1FUkFURUQ7CisrCQlpMmRfR0VORVJBTF9OQU1FOworKwkJZDJpX0dFTkVSQUxfTkFNRTsKKysJCUdFTkVSQUxfTkFNRV9uZXc7CisrCQlHRU5FUkFMX05BTUVfZnJlZTsKKysJCUdFTkVSQUxfTkFNRVNfbmV3OworKwkJR0VORVJBTF9OQU1FU19mcmVlOworKwkJZDJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMmRfR0VORVJBTF9OQU1FUzsKKysJCWkydl9HRU5FUkFMX05BTUVTOworKwkJaTJzX0FTTjFfT0NURVRfU1RSSU5HOworKwkJczJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJWDUwOVYzX0VYVF9jaGVja19jb25mOworKwkJaGV4X3RvX3N0cmluZzsKKysJCXN0cmluZ190b19oZXg7CisrCQlERVNfZWRlM19jYmNtX2VuY3J5cHQ7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUDsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVA7CisrCQlYNTA5X0NSTF9wcmludF9mcDsKKysJCVg1MDlfQ1JMX3ByaW50OworKwkJaTJ2X0dFTkVSQUxfTkFNRTsKKysJCXYyaV9HRU5FUkFMX05BTUU7CisrCQlpMmRfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlkMmlfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9uZXc7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9mcmVlOworKwkJdjJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMnNfQVNOMV9JTlRFR0VSOworKwkJWDUwOVYzX0VYVF9kMmk7CisrCQluYW1lX2NtcDsKKysJCXN0cl9kdXA7CisrCQlpMnNfQVNOMV9FTlVNRVJBVEVEOworKwkJaTJzX0FTTjFfRU5VTUVSQVRFRF9UQUJMRTsKKysJCUJJT19zX2xvZzsKKysJCUJJT19mX3JlbGlhYmxlOworKwkJUEtDUzdfZGF0YUZpbmFsOworKwkJUEtDUzdfZGF0YURlY29kZTsKKysJCVg1MDlWM19FWFRfQ1JMX2FkZF9jb25mOworKwkJQk5fc2V0X3BhcmFtczsKKysJCUJOX2dldF9wYXJhbXM7CisrCQlCSU9fZ2V0X2V4X251bTsKKysJCUJJT19zZXRfZXhfZnJlZV9mdW5jOworKwkJRVZQX3JpcGVtZDE2MDsKKysJCUFTTjFfVElNRV9zZXQ7CisrCQlpMmRfQVVUSE9SSVRZX0tFWUlEOworKwkJZDJpX0FVVEhPUklUWV9LRVlJRDsKKysJCUFVVEhPUklUWV9LRVlJRF9uZXc7CisrCQlBVVRIT1JJVFlfS0VZSURfZnJlZTsKKysJCUFTTjFfc2VxX3VucGFjazsKKysJCUFTTjFfc2VxX3BhY2s7CisrCQlBU04xX3VucGFja19zdHJpbmc7CisrCQlBU04xX3BhY2tfc3RyaW5nOworKwkJUEtDUzEyX3BhY2tfc2FmZWJhZzsKKysJCVBLQ1MxMl9NQUtFX0tFWUJBRzsKKysJCVBLQ1M4X2VuY3J5cHQ7CisrCQlQS0NTMTJfTUFLRV9TSEtFWUJBRzsKKysJCVBLQ1MxMl9wYWNrX3A3ZGF0YTsKKysJCVBLQ1MxMl9wYWNrX3A3ZW5jZGF0YTsKKysJCVBLQ1MxMl9hZGRfbG9jYWxrZXlpZDsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX2FzYzsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX3VuaTsKKysJCVBLQ1MxMl9nZXRfZnJpZW5kbHluYW1lOworKwkJUEtDUzEyX3BiZV9jcnlwdDsKKysJCVBLQ1MxMl9kZWNyeXB0X2QyaTsKKysJCVBLQ1MxMl9pMmRfZW5jcnlwdDsKKysJCVBLQ1MxMl9pbml0OworKwkJUEtDUzEyX2tleV9nZW5fYXNjOworKwkJUEtDUzEyX2tleV9nZW5fdW5pOworKwkJUEtDUzEyX2dlbl9tYWM7CisrCQlQS0NTMTJfdmVyaWZ5X21hYzsKKysJCVBLQ1MxMl9zZXRfbWFjOworKwkJUEtDUzEyX3NldHVwX21hYzsKKysJCU9QRU5TU0xfYXNjMnVuaTsKKysJCU9QRU5TU0xfdW5pMmFzYzsKKysJCWkyZF9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX25ldzsKKysJCWQyaV9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX2ZyZWU7CisrCQlpMmRfUEtDUzEyOworKwkJZDJpX1BLQ1MxMjsKKysJCVBLQ1MxMl9uZXc7CisrCQlQS0NTMTJfZnJlZTsKKysJCWkyZF9QS0NTMTJfTUFDX0RBVEE7CisrCQlQS0NTMTJfTUFDX0RBVEFfbmV3OworKwkJZDJpX1BLQ1MxMl9NQUNfREFUQTsKKysJCVBLQ1MxMl9NQUNfREFUQV9mcmVlOworKwkJaTJkX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfbmV3OworKwkJZDJpX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1MxMl9zdHJpbmdzOworKwkJUEtDUzEyX1BCRV9hZGQ7CisrCQlQS0NTOF9hZGRfa2V5dXNhZ2U7CisrCQlQS0NTMTJfZ2V0X2F0dHJfZ2VuOworKwkJUEtDUzEyX3BhcnNlOworKwkJUEtDUzEyX2NyZWF0ZTsKKysJCWkyZF9QS0NTMTJfYmlvOworKwkJaTJkX1BLQ1MxMl9mcDsKKysJCWQyaV9QS0NTMTJfYmlvOworKwkJZDJpX1BLQ1MxMl9mcDsKKysJCWkyZF9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX25ldzsKKysJCWQyaV9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX2ZyZWU7CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M4X1BSSVZfS0VZX0lORk9fbmV3OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWU7CisrCQlFVlBfUEtDUzgyUEtFWTsKKysJCUVWUF9QS0VZMlBLQ1M4OworKwkJUEtDUzhfc2V0X2Jyb2tlbjsKKysJCUVWUF9QQkVfQUxHT1JfQ2lwaGVySW5pdDsKKysJCUVWUF9QQkVfYWxnX2FkZDsKKysJCVBLQ1M1X3BiZV9zZXQ7CisrCQlFVlBfUEJFX2NsZWFudXA7CisrCQlpMmRfU1hORVQ7CisrCQlkMmlfU1hORVQ7CisrCQlTWE5FVF9uZXc7CisrCQlTWE5FVF9mcmVlOworKwkJaTJkX1NYTkVUSUQ7CisrCQlkMmlfU1hORVRJRDsKKysJCVNYTkVUSURfbmV3OworKwkJU1hORVRJRF9mcmVlOworKwkJRFNBX1NJR19uZXc7CisrCQlEU0FfU0lHX2ZyZWU7CisrCQlEU0FfZG9fc2lnbjsKKysJCURTQV9kb192ZXJpZnk7CisrCQlkMmlfRFNBX1NJRzsKKysJCWkyZF9EU0FfU0lHOworKwkJaTJkX0FTTjFfVklTSUJMRVNUUklORzsKKysJCWQyaV9BU04xX1ZJU0lCTEVTVFJJTkc7CisrCQlpMmRfQVNOMV9VVEY4U1RSSU5HOworKwkJZDJpX0FTTjFfVVRGOFNUUklORzsKKysJCWkyZF9ESVJFQ1RPUllTVFJJTkc7CisrCQlkMmlfRElSRUNUT1JZU1RSSU5HOworKwkJaTJkX0RJU1BMQVlURVhUOworKwkJZDJpX0RJU1BMQVlURVhUOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDk7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOTsKKysJCWkyZF9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX25ldzsKKysJCWQyaV9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX2ZyZWU7CisrCQlpMmRfUEJFMlBBUkFNOworKwkJUEJFMlBBUkFNX25ldzsKKysJCWQyaV9QQkUyUEFSQU07CisrCQlQQkUyUEFSQU1fZnJlZTsKKysJCWQyaV9BU04xX1NFVF9PRl9HRU5FUkFMX05BTUU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOworKwkJZDJpX0FTTjFfU0VUX09GX1NYTkVUSUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfU1hORVRJRDsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BPTElDWUlORk87CisrCQlTWE5FVF9hZGRfaWRfYXNjOworKwkJU1hORVRfYWRkX2lkX3Vsb25nOworKwkJU1hORVRfYWRkX2lkX0lOVEVHRVI7CisrCQlTWE5FVF9nZXRfaWRfYXNjOworKwkJU1hORVRfZ2V0X2lkX3Vsb25nOworKwkJU1hORVRfZ2V0X2lkX0lOVEVHRVI7CisrCQlYNTA5VjNfc2V0X2NvbmZfbGhhc2g7CisrCQlpMmRfQ0VSVElGSUNBVEVQT0xJQ0lFUzsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfbmV3OworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19mcmVlOworKwkJZDJpX0NFUlRJRklDQVRFUE9MSUNJRVM7CisrCQlpMmRfUE9MSUNZSU5GTzsKKysJCVBPTElDWUlORk9fbmV3OworKwkJZDJpX1BPTElDWUlORk87CisrCQlQT0xJQ1lJTkZPX2ZyZWU7CisrCQlpMmRfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19uZXc7CisrCQlkMmlfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19mcmVlOworKwkJaTJkX1VTRVJOT1RJQ0U7CisrCQlVU0VSTk9USUNFX25ldzsKKysJCWQyaV9VU0VSTk9USUNFOworKwkJVVNFUk5PVElDRV9mcmVlOworKwkJaTJkX05PVElDRVJFRjsKKysJCU5PVElDRVJFRl9uZXc7CisrCQlkMmlfTk9USUNFUkVGOworKwkJTk9USUNFUkVGX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3N0cmluZzsKKysJCVg1MDlWM19nZXRfc2VjdGlvbjsKKysJCVg1MDlWM19zdHJpbmdfZnJlZTsKKysJCVg1MDlWM19zZWN0aW9uX2ZyZWU7CisrCQlYNTA5VjNfc2V0X2N0eDsKKysJCXMyaV9BU04xX0lOVEVHRVI7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19tYWxsb2NfbG9ja2VkOworKwkJQ1JZUFRPX2ZyZWVfbG9ja2VkOworKwkJQk5fbW9kX2V4cDJfbW9udDsKKysJCUVSUl9nZXRfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfZXJyb3JfbGluZV9kYXRhOworKwkJUEtDUzEyX1BCRV9rZXlpdmdlbjsKKysJCVg1MDlfQUxHT1JfZHVwOworKwkJZDJpX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVDsKKysJCWkyZF9DUkxfRElTVF9QT0lOVFM7CisrCQlDUkxfRElTVF9QT0lOVFNfbmV3OworKwkJQ1JMX0RJU1RfUE9JTlRTX2ZyZWU7CisrCQlkMmlfQ1JMX0RJU1RfUE9JTlRTOworKwkJaTJkX0RJU1RfUE9JTlQ7CisrCQlESVNUX1BPSU5UX25ldzsKKysJCWQyaV9ESVNUX1BPSU5UOworKwkJRElTVF9QT0lOVF9mcmVlOworKwkJaTJkX0RJU1RfUE9JTlRfTkFNRTsKKysJCURJU1RfUE9JTlRfTkFNRV9uZXc7CisrCQlESVNUX1BPSU5UX05BTUVfZnJlZTsKKysJCWQyaV9ESVNUX1BPSU5UX05BTUU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX3VjaGFyOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfTkFNRV9FTlRSWTsKKysJCVg1MDlWM19FWFRfaTJkOworKwkJWDUwOVYzX0VYVF92YWxfcHJuOworKwkJWDUwOVYzX0VYVF9hZGRfbGlzdDsKKysJCUVWUF9DSVBIRVJfdHlwZTsKKysJCUVWUF9QQkVfQ2lwaGVySW5pdDsKKysJCVg1MDlWM19hZGRfdmFsdWVfYm9vbF9uZjsKKysJCWQyaV9BU04xX1VJTlRFR0VSOworKwkJc2tfdmFsdWU7CisrCQlza19udW07CisrCQlza19zZXQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOworKwkJc2tfc29ydDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X1JFVk9LRUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0NSTDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FMR09SOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQ1JMOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfUkVDSVBfSU5GTzsKKysJCVBLQ1M1X1BCRV9hZGQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4OworKwkJaTJkX1BLQ1M4X2ZwOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCWQyaV9QS0NTOF9iaW87CisrCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1BLQ1M4OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJZDJpX1BLQ1M4X2ZwOworKwkJUEVNX3dyaXRlX1BLQ1M4OworKwkJUEVNX3JlYWRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1A4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUEtDUzg7CisrCQlQRU1fd3JpdGVfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9QOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzVfUEJFX2tleWl2Z2VuOworKwkJaTJkX1BLQ1M4X2JpbzsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2ZwOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJQklPX3NfYmlvOworKwkJUEtDUzVfcGJlMl9zZXQ7CisrCQlQS0NTNV9QQktERjJfSE1BQ19TSEExOworKwkJUEtDUzVfdjJfUEJFX2tleWl2Z2VuOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5OworKwkJQklPX2N0cmxfZ2V0X3JlYWRfcmVxdWVzdDsKKysJCUJJT19jdHJsX3BlbmRpbmc7CisrCQlCSU9fY3RybF93cGVuZGluZzsKKysJCUJJT19uZXdfYmlvX3BhaXI7CisrCQlCSU9fY3RybF9nZXRfd3JpdGVfZ3VhcmFudGVlOworKwkJQ1JZUFRPX251bV9sb2NrczsKKysJCUNPTkZfbG9hZF9iaW87CisrCQlDT05GX2xvYWRfZnA7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlQS0NTN19zaWduYXR1cmVWZXJpZnk7CisrCQlSU0Ffc2V0X21ldGhvZDsKKysJCVJTQV9nZXRfbWV0aG9kOworKwkJUlNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVJTQV9jaGVja19rZXk7CisrCQlPQkpfb2JqMnR4dDsKKysJCURTQV9kdXBfREg7CisrCQlYNTA5X1JFUV9nZXRfZXh0ZW5zaW9uczsKKysJCVg1MDlfUkVRX3NldF9leHRlbnNpb25fbmlkczsKKysJCUJJT19ud3JpdGU7CisrCQlYNTA5X1JFUV9leHRlbnNpb25fbmlkOworKwkJQklPX25yZWFkOworKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbl9uaWRzOworKwkJQklPX253cml0ZTA7CisrCQlYNTA5X1JFUV9hZGRfZXh0ZW5zaW9uc19uaWQ7CisrCQlCSU9fbnJlYWQwOworKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnM7CisrCQlCSU9fbmV3X21lbV9idWY7CisrCQlESF9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9tZXRob2Q7CisrCQlEU0FfT3BlblNTTDsKKysJCURIX2dldF9leF9kYXRhOworKwkJREhfZ2V0X2V4X25ld19pbmRleDsKKysJCURTQV9uZXdfbWV0aG9kOworKwkJREhfbmV3X21ldGhvZDsKKysJCURIX09wZW5TU0w7CisrCQlEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCURIX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9nZXRfZXhfZGF0YTsKKysJCVg1MDlWM19FWFRfUkVRX2FkZF9jb25mOworKwkJTkVUU0NBUEVfU1BLSV9wcmludDsKKysJCU5FVFNDQVBFX1NQS0lfc2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2VuY29kZTsKKysJCU5FVFNDQVBFX1NQS0lfZ2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2RlY29kZTsKKysJCVVURjhfcHV0YzsKKysJCVVURjhfZ2V0YzsKKysJCVJTQV9udWxsX21ldGhvZDsKKysJCUFTTjFfdGFnMnN0cjsKKysJCUJJT19jdHJsX3Jlc2V0X3JlYWRfcmVxdWVzdDsKKysJCURJU1BMQVlURVhUX25ldzsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmk7CisrCQlYNTA5X3NldF9leF9kYXRhOworKwkJWDUwOV9yZWplY3Rfc2V0X2JpdF9hc2M7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEOworKwkJWDUwOV9QVVJQT1NFX2dldDA7CisrCQlQRU1fcmVhZF9YNTA5X0FVWDsKKysJCWQyaV9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlQRU1fd3JpdGVfUFVCS0VZOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfZnJlZTsKKysJCWQyaV9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X2NsZWFyOworKwkJWDUwOV9UUlVTVF9hZGQ7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfbmV3OworKwkJWDUwOV9hbGlhc19zZXQxOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfZnJlZTsKKysJCUVWUF9QS0VZX2dldDFfRFNBOworKwkJQVNOMV9CTVBTVFJJTkdfbmV3OworKwkJQVNOMV9tYnN0cmluZ19jb3B5OworKwkJQVNOMV9VVEY4U1RSSU5HX25ldzsKKysJCURTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJQVNOMV9UNjFTVFJJTkdfZnJlZTsKKysJCURTQV9zZXRfbWV0aG9kOworKwkJWDUwOV9nZXRfZXhfZGF0YTsKKysJCUFTTjFfU1RSSU5HX3R5cGU7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X3NuYW1lOworKwkJQVNOMV9USU1FX2ZyZWU7CisrCQlBU04xX09DVEVUX1NUUklOR19jbXA7CisrCQlBU04xX0JJVF9TVFJJTkdfbmV3OworKwkJWDUwOV9nZXRfZXh0X2QyaTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0FVWDsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZhdWx0X21hc2tfYXNjOworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZl9tYXNrX2FzYzsKKysJCVBFTV93cml0ZV9iaW9fUlNBX1BVQktFWTsKKysJCUFTTjFfSU5URUdFUl9jbXA7CisrCQlkMmlfUlNBX1BVQktFWV9mcDsKKysJCVg1MDlfdHJ1c3Rfc2V0X2JpdF9hc2M7CisrCQlQRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1NUT1JFX0NUWF9mcmVlOworKwkJRVZQX1BLRVlfc2V0MV9EU0E7CisrCQlpMmRfRFNBX1BVQktFWV9mcDsKKysJCVg1MDlfbG9hZF9jZXJ0X2NybF9maWxlOworKwkJQVNOMV9USU1FX25ldzsKKysJCWkyZF9SU0FfUFVCS0VZOworKwkJWDUwOV9TVE9SRV9DVFhfcHVycG9zZV9pbmhlcml0OworKwkJUEVNX3JlYWRfUlNBX1BVQktFWTsKKysJCWQyaV9YNTA5X0FVWDsKKysJCWkyZF9EU0FfUFVCS0VZOworKwkJWDUwOV9DRVJUX0FVWF9wcmludDsKKysJCVBFTV9yZWFkX0RTQV9QVUJLRVk7CisrCQlpMmRfUlNBX1BVQktFWV9iaW87CisrCQlBU04xX0JJVF9TVFJJTkdfbnVtX2FzYzsKKysJCWkyZF9QVUJLRVk7CisrCQlBU04xX1VUQ1RJTUVfZnJlZTsKKysJCURTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X2lkOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWU7CisrCQlQRU1fcmVhZF9iaW9fUFVCS0VZOworKwkJQVNOMV9TVFJJTkdfc2V0X2J5X05JRDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfaWQ7CisrCQlESVNQTEFZVEVYVF9mcmVlOworKwkJT1RIRVJOQU1FX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfbmV3OworKwkJWDUwOV9UUlVTVF9jbGVhbnVwOworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2QyaTsKKysJCVg1MDlfUFVSUE9TRV9nZXQwX25hbWU7CisrCQlQRU1fcmVhZF9QVUJLRVk7CisrCQlpMmRfRFNBX1BVQktFWV9iaW87CisrCQlpMmRfT1RIRVJOQU1FOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZTsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYXNjOworKwkJWDUwOV9nZXRfZXhfbmV3X2luZGV4OworKwkJQVNOMV9TVFJJTkdfVEFCTEVfY2xlYW51cDsKKysJCVg1MDlfVFJVU1RfZ2V0X2J5X2lkOworKwkJWDUwOV9QVVJQT1NFX2dldF90cnVzdDsKKysJCUFTTjFfU1RSSU5HX2xlbmd0aDsKKysJCWQyaV9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlBU04xX1BSSU5UQUJMRVNUUklOR19uZXc7CisrCQlYNTA5VjNfZ2V0X2QyaTsKKysJCUFTTjFfRU5VTUVSQVRFRF9mcmVlOworKwkJaTJkX1g1MDlfQ0VSVF9BVVg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdHJ1c3Q7CisrCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9TVE9SRV9DVFhfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9SU0E7CisrCQlESVJFQ1RPUllTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9YNTA5X0FVWDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX3NldDsKKysJCWQyaV9EU0FfUFVCS0VZX2ZwOworKwkJZDJpX1JTQV9QVUJLRVk7CisrCQlYNTA5X1RSVVNUX2dldDBfbmFtZTsKKysJCVg1MDlfVFJVU1RfZ2V0MDsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlOworKwkJQVNOMV9JQTVTVFJJTkdfbmV3OworKwkJZDJpX0RTQV9QVUJLRVk7CisrCQlYNTA5X2NoZWNrX3B1cnBvc2U7CisrCQlBU04xX0VOVU1FUkFURURfbmV3OworKwkJZDJpX1JTQV9QVUJLRVlfYmlvOworKwkJZDJpX1BVQktFWTsKKysJCVg1MDlfVFJVU1RfZ2V0X3RydXN0OworKwkJWDUwOV9UUlVTVF9nZXRfZmxhZ3M7CisrCQlBU04xX0JNUFNUUklOR19mcmVlOworKwkJQVNOMV9UNjFTVFJJTkdfbmV3OworKwkJQVNOMV9VVENUSU1FX25ldzsKKysJCWkyZF9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlFVlBfUEtFWV9zZXQxX1JTQTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlOworKwkJQVNOMV9JQTVTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9BVVg7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2NvdW50OworKwkJQ1JZUFRPX2FkZF9pbmZvOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV90eHQ7CisrCQlBU04xX1NUUklOR19nZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9hbGlhc19nZXQwOworKwkJQVNOMV9TVFJJTkdfZGF0YTsKKysJCWkyZF9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X3NldF9iaXQ7CisrCQlBU04xX0JJVF9TVFJJTkdfZnJlZTsKKysJCVBFTV9yZWFkX2Jpb19SU0FfUFVCS0VZOworKwkJWDUwOV9hZGQxX3JlamVjdF9vYmplY3Q7CisrCQlYNTA5X2NoZWNrX3RydXN0OworKwkJUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfYWRkOworKwkJQVNOMV9TVFJJTkdfVEFCTEVfZ2V0OworKwkJQVNOMV9VVEY4U1RSSU5HX2ZyZWU7CisrCQlkMmlfRFNBX1BVQktFWV9iaW87CisrCQlQRU1fd3JpdGVfUlNBX1BVQktFWTsKKysJCWQyaV9PVEhFUk5BTUU7CisrCQlYNTA5X3JlamVjdF9zZXRfYml0OworKwkJUEVNX3dyaXRlX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MF9zbmFtZTsKKysJCUVWUF9QS0VZX3NldDFfREg7CisrCQlBU04xX09DVEVUX1NUUklOR19kdXA7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0OworKwkJWDUwOV9UUlVTVF9nZXRfY291bnQ7CisrCQlBU04xX0lOVEVHRVJfZnJlZTsKKysJCU9USEVSTkFNRV9mcmVlOworKwkJaTJkX1JTQV9QVUJLRVlfZnA7CisrCQlBU04xX0lOVEVHRVJfZHVwOworKwkJZDJpX1g1MDlfQ0VSVF9BVVg7CisrCQlQRU1fd3JpdGVfYmlvX1BVQktFWTsKKysJCUFTTjFfVklTSUJMRVNUUklOR19mcmVlOworKwkJWDUwOV9QVVJQT1NFX2NsZWFudXA7CisrCQlBU04xX21ic3RyaW5nX25jb3B5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9ESDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX25ldzsKKysJCUFTTjFfSU5URUdFUl9uZXc7CisrCQlpMmRfWDUwOV9BVVg7CisrCQlBU04xX0JJVF9TVFJJTkdfbmFtZV9wcmludDsKKysJCVg1MDlfY21wOworKwkJQVNOMV9TVFJJTkdfbGVuZ3RoX3NldDsKKysJCURJUkVDVE9SWVNUUklOR19uZXc7CisrCQlYNTA5X2FkZDFfdHJ1c3Rfb2JqZWN0OworKwkJUEtDUzEyX25ld3Bhc3M7CisrCQlTTUlNRV93cml0ZV9QS0NTNzsKKysJCVNNSU1FX3JlYWRfUEtDUzc7CisrCQlERVNfc2V0X2tleV9jaGVja2VkOworKwkJUEtDUzdfdmVyaWZ5OworKwkJUEtDUzdfZW5jcnlwdDsKKysJCURFU19zZXRfa2V5X3VuY2hlY2tlZDsKKysJCVNNSU1FX2NybGZfY29weTsKKysJCWkyZF9BU04xX1BSSU5UQUJMRVNUUklORzsKKysJCVBLQ1M3X2dldDBfc2lnbmVyczsKKysJCVBLQ1M3X2RlY3J5cHQ7CisrCQlTTUlNRV90ZXh0OworKwkJUEtDUzdfc2ltcGxlX3NtaW1lY2FwOworKwkJUEtDUzdfZ2V0X3NtaW1lY2FwOworKwkJUEtDUzdfc2lnbjsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXA7CisrCQlDUllQVE9fZGJnX3NldF9vcHRpb25zOworKwkJQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbzsKKysJCUNSWVBUT19nZXRfbWVtX2RlYnVnX2Z1bmN0aW9uczsKKysJCUNSWVBUT19pc19tZW1fY2hlY2tfb247CisrCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7CisrCQlDUllQVE9fcG9wX2luZm87CisrCQlDUllQVE9fcHVzaF9pbmZvXzsKKysJCUNSWVBUT19zZXRfbWVtX2RlYnVnX29wdGlvbnM7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2S2V5X25pZDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJQVNOMV9OVUxMX2ZyZWU7CisrCQlkMmlfQVNOMV9OVUxMOworKwkJQVNOMV9OVUxMX25ldzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9mcDsKKysJCWkyZF9BU04xX05VTEw7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9mcDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfZnA7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9iaW87CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19mcDsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlJbmZvX2JpbzsKKysJCVBFTV9jYjsKKysJCWkyZF9Qcml2YXRlS2V5X2ZwOworKwkJZDJpX1ByaXZhdGVLZXlfYmlvOworKwkJZDJpX1ByaXZhdGVLZXlfZnA7CisrCQlpMmRfUHJpdmF0ZUtleV9iaW87CisrCQlYNTA5X3JlamVjdF9jbGVhcjsKKysJCVg1MDlfVFJVU1Rfc2V0X2RlZmF1bHQ7CisrCQlkMmlfQXV0b1ByaXZhdGVLZXk7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX3R5cGU7CisrCQlYNTA5X0FUVFJJQlVURV9zZXQxX2RhdGE7CisrCQlYNTA5YXRfZ2V0X2F0dHI7CisrCQlYNTA5YXRfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9vYmplY3Q7CisrCQlYNTA5X0FUVFJJQlVURV9jb3VudDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX29iamVjdDsKKysJCVg1MDlhdF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyOworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9kYXRhOworKwkJWDUwOWF0X2RlbGV0ZV9hdHRyOworKwkJWDUwOWF0X2dldF9hdHRyX2J5X09CSjsKKysJCVJBTkRfYWRkOworKwkJQklPX251bWJlcl93cml0dGVuOworKwkJQklPX251bWJlcl9yZWFkOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbjsKKysJCUVSUl9sb2FkX1JBTkRfc3RyaW5nczsKKysJCVJBTkRfcHNldWRvX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHI7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfT0JKOworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHI7CisrCQlYNTA5X1JFUV9kZWxldGVfYXR0cjsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X3R4dDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV90eHQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUJOX3BzZXVkb19yYW5kOworKwkJQk5faXNfcHJpbWVfZmFzdHRlc3Q7CisrCQlCTl9DVFhfZW5kOworKwkJQk5fQ1RYX3N0YXJ0OworKwkJQk5fQ1RYX2dldDsKKysJCUVWUF9QS0VZMlBLQ1M4X2Jyb2tlbjsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2FkZDsKKysJCUNSWVBUT19kYmdfZ2V0X29wdGlvbnM7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfbmV3OworKwkJQ1JZUFRPX2dldF9tZW1fZGVidWdfb3B0aW9uczsKKysJCURFU19jcnlwdDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVFfTkVXOworKwkJUEVNX3dyaXRlX1g1MDlfUkVRX05FVzsKKysJCUJJT19jYWxsYmFja19jdHJsOworKwkJUkFORF9lZ2Q7CisrCQlSQU5EX3N0YXR1czsKKysJCWJuX2R1bXAxOworKwkJREVTX2NoZWNrX2tleV9wYXJpdHk7CisrCQlsaF9udW1faXRlbXM7CisrCQlSQU5EX2V2ZW50OworKwkJRFNPX25ldzsKKysJCURTT19uZXdfbWV0aG9kOworKwkJRFNPX2ZyZWU7CisrCQlEU09fZmxhZ3M7CisrCQlEU09fdXA7CisrCQlEU09fc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNPX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTT19nZXRfbWV0aG9kOworKwkJRFNPX3NldF9tZXRob2Q7CisrCQlEU09fbG9hZDsKKysJCURTT19iaW5kX3ZhcjsKKysJCURTT19NRVRIT0RfbnVsbDsKKysJCURTT19NRVRIT0Rfb3BlbnNzbDsKKysJCURTT19NRVRIT0RfZGxmY247CisrCQlEU09fTUVUSE9EX3dpbjMyOworKwkJRVJSX2xvYWRfRFNPX3N0cmluZ3M7CisrCQlEU09fTUVUSE9EX2RsOworKwkJTkNPTkZfbG9hZDsKKysJCU5DT05GX2xvYWRfZnA7CisrCQlOQ09ORl9uZXc7CisrCQlOQ09ORl9nZXRfc3RyaW5nOworKwkJTkNPTkZfZnJlZTsKKysJCU5DT05GX2dldF9udW1iZXI7CisrCQlDT05GX2R1bXBfZnA7CisrCQlOQ09ORl9sb2FkX2JpbzsKKysJCU5DT05GX2R1bXBfZnA7CisrCQlOQ09ORl9nZXRfc2VjdGlvbjsKKysJCU5DT05GX2R1bXBfYmlvOworKwkJQ09ORl9kdW1wX2JpbzsKKysJCU5DT05GX2ZyZWVfZGF0YTsKKysJCUNPTkZfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRVJSX2Vycm9yX3N0cmluZ19uOworKwkJQklPX3NucHJpbnRmOworKwkJRFNPX2N0cmw7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1MxMl9TQUZFQkFHOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3OworKwkJQklPX3ZmcmVlOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKKysJCUFTTjFfVVRDVElNRV9nZXQ7CisrCQlYNTA5X1JFUV9kaWdlc3Q7CisrCQlYNTA5X0NSTF9kaWdlc3Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzc7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aDsKKysJCUVWUF9DSVBIRVJfQ1RYX2N0cmw7CisrCQlCTl9tb2RfZXhwX21vbnRfd29yZDsKKysJCVJBTkRfZWdkX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZW1haWxfZnJlZTsKKysJCWkyZF9SU0FfTkVUOworKwkJZDJpX1JTQV9ORVRfMjsKKysJCWQyaV9SU0FfTkVUOworKwkJRFNPX2JpbmRfZnVuYzsKKysJCUNSWVBUT19nZXRfbmV3X2R5bmxvY2tpZDsKKysJCXNrX25ld19udWxsOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfZGVzdHJveV9jYjsKKysJCUNSWVBUT19kZXN0cm95X2R5bmxvY2tpZDsKKysJCUNSWVBUT19zZXRfZHlubG9ja19zaXplOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2I7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19sb2NrX2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWU7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYjsKKysJCWMyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlpMmNfQVNOMV9CSVRfU1RSSU5HOworKwkJUkFORF9wb2xsOworKwkJYzJpX0FTTjFfSU5URUdFUjsKKysJCWkyY19BU04xX0lOVEVHRVI7CisrCQlCSU9fZHVtcF9pbmRlbnQ7CisrCQlBU04xX3BhcnNlX2R1bXA7CisrCQljMmlfQVNOMV9PQkpFQ1Q7CisrCQlYNTA5X05BTUVfcHJpbnRfZXhfZnA7CisrCQlBU04xX1NUUklOR19wcmludF9leF9mcDsKKysJCVg1MDlfTkFNRV9wcmludF9leDsKKysJCUFTTjFfU1RSSU5HX3ByaW50X2V4OworKwkJTUQ0OworKwkJTUQ0X1RyYW5zZm9ybTsKKysJCU1ENF9GaW5hbDsKKysJCU1ENF9VcGRhdGU7CisrCQlNRDRfSW5pdDsKKysJCUVWUF9tZDQ7CisrCQlpMmRfUFVCS0VZX2JpbzsKKysJCWkyZF9QVUJLRVlfZnA7CisrCQlkMmlfUFVCS0VZX2JpbzsKKysJCUFTTjFfU1RSSU5HX3RvX1VURjg7CisrCQlCSU9fdnByaW50ZjsKKysJCUJJT192c25wcmludGY7CisrCQlkMmlfUFVCS0VZX2ZwOworKwkJWDUwOV9jbXBfdGltZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF90aW1lOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9pc3N1ZXI7CisrCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9tYXRjaDsKKysJCVg1MDlfT0JKRUNUX2lkeF9ieV9zdWJqZWN0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2ZsYWdzOworKwkJWDUwOV9TVE9SRV9DVFhfdHJ1c3RlZF9zdGFjazsKKysJCVg1MDlfdGltZV9hZGo7CisrCQlYNTA5X2NoZWNrX2lzc3VlZDsKKysJCUFTTjFfVVRDVElNRV9jbXBfdGltZV90OworKwkJREVTX3NldF93ZWFrX2tleV9mbGFnOworKwkJREVTX2NoZWNrX2tleTsKKysJCURFU19yd19tb2RlOworKwkJUlNBX1BLQ1MxX1JTQXJlZjsKKysJCVg1MDlfa2V5aWRfc2V0MTsKKysJCUJJT19uZXh0OworKwkJRFNPX01FVEhPRF92bXM7CisrCQlCSU9fZl9saW5lYnVmZmVyOworKwkJQk5fYm50ZXN0X3JhbmQ7CisrCQlPUEVOU1NMX2lzc2V0dWdpZDsKKysJCUJOX3JhbmRfcmFuZ2U7CisrCQlFUlJfbG9hZF9FTkdJTkVfc3RyaW5nczsKKysJCUVOR0lORV9zZXRfRFNBOworKwkJRU5HSU5FX2dldF9maW5pc2hfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBOworKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwOworKwkJRFNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX3NldF9ESDsKKysJCUVOR0lORV9zZXRfZGVmX0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2luaXQ7CisrCQlESF9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCVJTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9maW5pc2g7CisrCQlFTkdJTkVfbG9hZF9wdWJsaWNfa2V5OworKwkJRU5HSU5FX2dldF9ESDsKKysJCUVOR0lORV9jdHJsOworKwkJRU5HSU5FX2dldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9nZXRfbmFtZTsKKysJCUVOR0lORV9nZXRfbGFzdDsKKysJCUVOR0lORV9nZXRfcHJldjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9nZXRfUlNBOworKwkJRU5HSU5FX3NldF9kZWZhdWx0OworKwkJRU5HSU5FX2dldF9SQU5EOworKwkJRU5HSU5FX2dldF9maXJzdDsKKysJCUVOR0lORV9ieV9pZDsKKysJCUVOR0lORV9zZXRfZmluaXNoX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9kZWZfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQ7CisrCQlSU0FfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfc2V0X1JTQTsKKysJCUVOR0lORV9sb2FkX3ByaXZhdGVfa2V5OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfcmVtb3ZlOworKwkJRU5HSU5FX2ZyZWU7CisrCQlFTkdJTkVfZ2V0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2dldF9uZXh0OworKwkJRU5HSU5FX3NldF9uYW1lOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JTQTsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9SQU5EOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfc2V0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X2lkOworKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9uZXc7CisrCQlFTkdJTkVfZ2V0X2lkOworKwkJRFNBX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2FkZDsKKysJCURIX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2dldF9EU0E7CisrCQlFTkdJTkVfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2N0cmxfZnVuY3Rpb247CisrCQlCTl9wc2V1ZG9fcmFuZF9yYW5nZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF92ZXJpZnlfY2I7CisrCQlFUlJfbG9hZF9DT01QX3N0cmluZ3M7CisrCQlQS0NTMTJfaXRlbV9kZWNyeXB0X2QyaTsKKysJCUFTTjFfVVRGOFNUUklOR19pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2NpcGhlcnM7CisrCQlFTkdJTkVfZ2V0X2NpcGhlcnM7CisrCQlkMmlfT0NTUF9CQVNJQ1JFU1A7CisrCQlLUkI1X0NIRUNLU1VNX2l0OworKwkJRUNfUE9JTlRfYWRkOworKwkJQVNOMV9pdGVtX2V4X2kyZDsKKysJCU9DU1BfQ0VSVElEX2l0OworKwkJZDJpX09DU1BfUkVTUEJZVEVTOworKwkJWDUwOVYzX2FkZDFfaTJkOworKwkJUEtDUzdfRU5WRUxPUEVfaXQ7CisrCQlVSV9hZGRfaW5wdXRfYm9vbGVhbjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JTQTsKKysJCVg1MDlWM19FWFRfbmNvbmY7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfZnJlZTsKKysJCWQyaV9PQ1NQX0NFUlRTVEFUVVM7CisrCQlYNTA5X1JFVk9LRURfc2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfcHJpbnRfZXg7CisrCQlPQ1NQX09ORVJFUV9nZXQxX2V4dF9kMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1JBTkQ7CisrCQlFTkdJTkVfbG9hZF9keW5hbWljOworKwkJUEJLREYyUEFSQU1faXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfbmV3OworKwkJRUNfR1JPVVBfY2xlYXJfZnJlZTsKKysJCU9DU1Bfc2VuZHJlcV9iaW87CisrCQlBU04xX2l0ZW1fZGlnZXN0OworKwkJT0NTUF9CQVNJQ1JFU1BfZGVsZXRlX2V4dDsKKysJCU9DU1BfU0lHTkFUVVJFX2l0OworKwkJWDUwOV9DUkxfaXQ7CisrCQlPQ1NQX0JBU0lDUkVTUF9hZGRfZXh0OworKwkJS1JCNV9FTkNLRVlfaXQ7CisrCQlVSV9tZXRob2Rfc2V0X2Nsb3NlcjsKKysJCVg1MDlfU1RPUkVfc2V0X3B1cnBvc2U7CisrCQlpMmRfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXM7CisrCQlpMmRfT0NTUF9TRVJWSUNFTE9DOworKwkJRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lOworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGcDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X09CSjsKKysJCV9vc3NsX29sZF9kZXNfcmFuZG9tX2tleTsKKysJCUFTTjFfVDYxU1RSSU5HX2l0OworKwkJRUNfR1JPVVBfbWV0aG9kX29mOworKwkJaTJkX0tSQjVfQVBSRVE7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQ7CisrCQlBU04xX1BSSU5UQUJMRV9uZXc7CisrCQlITUFDX0luaXRfZXg7CisrCQlkMmlfS1JCNV9BVVRIRU5UOworKwkJT0NTUF9hcmNoaXZlX2N1dG9mZl9uZXc7CisrCQlFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfc2V0X0pwcm9qX2Nvb3Jkc19HRnA7CisrCQlfb3NzbF9vbGRfZGVzX2lzX3dlYWtfa2V5OworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlFQ19QT0lOVF9vY3QycG9pbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2N0cmw7CisrCQlfc2hhZG93X0RFU19yd19tb2RlOworKwkJYXNuMV9kb19hZGI7CisrCQlBU04xX3RlbXBsYXRlX2kyZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9ESDsKKysJCVVJX2NvbnN0cnVjdF9wcm9tcHQ7CisrCQlYNTA5X1NUT1JFX3NldF90cnVzdDsKKysJCVVJX2R1cF9pbnB1dF9zdHJpbmc7CisrCQlkMmlfS1JCNV9BUFJFUTsKKysJCUVWUF9NRF9DVFhfY29weV9leDsKKysJCU9DU1BfcmVxdWVzdF9pc19zaWduZWQ7CisrCQlpMmRfT0NTUF9SRVFJTkZPOworKwkJS1JCNV9FTkNLRVlfZnJlZTsKKysJCU9DU1BfcmVzcF9nZXQwOworKwkJR0VORVJBTF9OQU1FX2l0OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfaXQ7CisrCQlYNTA5X1NUT1JFX3NldF9mbGFnczsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9jb21wcl9jb29yZHNfR0ZwOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVWT0tFRElORk87CisrCQlPQ1NQX2Jhc2ljX2FkZDFfY2VydDsKKysJCUVSUl9nZXRfaW1wbGVtZW50YXRpb247CisrCQlFVlBfQ2lwaGVyRmluYWxfZXg7CisrCQlPQ1NQX0NFUlRTVEFUVVNfbmV3OworKwkJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGE7CisrCQlPQ1NQX3Jlc3BfZmluZDsKKysJCUJOX25ubW9kOworKwkJWDUwOV9DUkxfc29ydDsKKysJCVg1MDlfUkVWT0tFRF9zZXRfcmV2b2NhdGlvbkRhdGU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUkFORDsKKysJCU9DU1BfU0VSVklDRUxPQ19uZXc7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCV9vc3NsX29sZF9kZXNfb3B0aW9uczsKKysJCVNYTkVUX2l0OworKwkJVUlfZHVwX2lucHV0X2Jvb2xlYW47CisrCQlQS0NTMTJfYWRkX0NTUE5hbWVfYXNjOworKwkJRUNfUE9JTlRfaXNfYXRfaW5maW5pdHk7CisrCQlFTkdJTkVfbG9hZF9jcnlwdG9kZXY7CisrCQlEU09fY29udmVydF9maWxlbmFtZTsKKysJCVBPTElDWVFVQUxJTkZPX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2NpcGhlcnM7CisrCQlCTl9tb2RfbHNoaWZ0X3F1aWNrOworKwkJRFNPX3NldF9maWxlbmFtZTsKKysJCUFTTjFfaXRlbV9mcmVlOworKwkJS1JCNV9US1RCT0RZX2ZyZWU7CisrCQlBVVRIT1JJVFlfS0VZSURfaXQ7CisrCQlLUkI1X0FQUkVRQk9EWV9uZXc7CisrCQlYNTA5VjNfRVhUX1JFUV9hZGRfbmNvbmY7CisrCQlFTkdJTkVfY3RybF9jbWRfc3RyaW5nOworKwkJaTJkX09DU1BfUkVTUERBVEE7CisrCQlFVlBfTURfQ1RYX2luaXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfZnJlZTsKKysJCVBLQ1M3X0FUVFJfU0lHTl9pdDsKKysJCVVJX2FkZF9lcnJvcl9zdHJpbmc7CisrCQlLUkI1X0NIRUNLU1VNX2ZyZWU7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dDsKKysJCUVOR0lORV9sb2FkX3Vic2VjOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9kaWdlc3RzOworKwkJUEtFWV9VU0FHRV9QRVJJT0RfaXQ7CisrCQlQS0NTMTJfdW5wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfaXRlbV91bnBhY2s7CisrCQlORVRTQ0FQRV9TUEtBQ19pdDsKKysJCVg1MDlfUkVWT0tFRF9pdDsKKysJCUFTTjFfU1RSSU5HX2VuY29kZTsKKysJCUVWUF9hZXNfMTI4X2VjYjsKKysJCUtSQjVfQVVUSEVOVF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfY2VydF9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVRVUVTVDsKKysJCVVJX2R1cF9pbmZvX3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfeHdoaXRlX2luMm91dDsKKysJCVBLQ1MxMl9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfQ0VSVFNUQVRVU19mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jcnlwdDsKKysJCUFTTjFfaXRlbV9pMmQ7CisrCQlFVlBfRGVjcnlwdEZpbmFsX2V4OworKwkJRU5HSU5FX2xvYWRfb3BlbnNzbDsKKysJCUVOR0lORV9nZXRfY21kX2RlZm5zOworKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbjsKKysJCUVWUF9FbmNyeXB0RmluYWxfZXg7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfZGlnZXN0czsKKysJCVg1MDlfZ2V0MF9wdWJrZXlfYml0c3RyOworKwkJYXNuMV9leF9pMmM7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUlNBOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRFNBOworKwkJX29zc2xfb2xkX2Rlc19rZXlfc2NoZWQ7CisrCQlYNTA5X0VYVEVOU0lPTl9pdDsKKysJCWkyZF9LUkI1X0FVVEhFTlQ7CisrCQlTWE5FVElEX2l0OworKwkJZDJpX09DU1BfU0lOR0xFUkVTUDsKKysJCUVESVBBUlRZTkFNRV9uZXc7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5OworKwkJX29zc2xfb2xkX2Rlc19vZmI2NF9lbmNyeXB0OworKwkJZDJpX0VYVEVOREVEX0tFWV9VU0FHRTsKKysJCUVSUl9wcmludF9lcnJvcnNfY2I7CisrCQlFTkdJTkVfc2V0X2NpcGhlcnM7CisrCQlkMmlfS1JCNV9BUFJFUUJPRFk7CisrCQlVSV9tZXRob2RfZ2V0X2ZsdXNoZXI7CisrCQlYNTA5X1BVQktFWV9pdDsKKysJCV9vc3NsX29sZF9kZXNfZW5jX3JlYWQ7CisrCQlQS0NTN19FTkNSWVBUX2l0OworKwkJaTJkX09DU1BfUkVTUE9OU0U7CisrCQlFQ19HUk9VUF9nZXRfY29mYWN0b3I7CisrCQlQS0NTMTJfdW5wYWNrX3A3ZGF0YTsKKysJCWQyaV9LUkI1X0FVVEhEQVRBOworKwkJT0NTUF9jb3B5X25vbmNlOworKwkJS1JCNV9BVVRIREFUQV9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX25ldzsKKysJCUVDX0dGcF9tb250X21ldGhvZDsKKysJCU9DU1BfUkVWT0tFRElORk9fZnJlZTsKKysJCVVJX2dldF9leF9kYXRhOworKwkJS1JCNV9BUFJFUUJPRFlfZnJlZTsKKysJCUVDX0dST1VQX2dldDBfZ2VuZXJhdG9yOworKwkJVUlfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJWDUwOVYzX3NldF9uY29uZjsKKysJCVBLQ1MxMl9pdGVtX2kyZF9lbmNyeXB0OworKwkJWDUwOV9hZGQxX2V4dF9pMmQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19pdDsKKysJCUtSQjVfUFJJTkNOQU1FX25ldzsKKysJCVBLQ1MxMl9TQUZFQkFHX2l0OworKwkJRUNfR1JPVVBfZ2V0X29yZGVyOworKwkJZDJpX09DU1BfUkVTUElEOworKwkJT0NTUF9yZXF1ZXN0X3ZlcmlmeTsKKysJCU5DT05GX2dldF9udW1iZXJfZTsKKysJCV9vc3NsX29sZF9kZXNfZGVjcnlwdDM7CisrCQlYNTA5X3NpZ25hdHVyZV9wcmludDsKKysJCU9DU1BfU0lOR0xFUkVTUF9mcmVlOworKwkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzOworKwkJaTJkX09DU1BfT05FUkVROworKwkJT0NTUF9SRVFVRVNUX2FkZF9leHQ7CisrCQlPQ1NQX1JFU1BCWVRFU19uZXc7CisrCQlFVlBfTURfQ1RYX2NyZWF0ZTsKKysJCU9DU1BfcmVzcF9maW5kX3N0YXR1czsKKysJCVg1MDlfQUxHT1JfaXQ7CisrCQlBU04xX1RJTUVfaXQ7CisrCQlPQ1NQX3JlcXVlc3Rfc2V0MV9uYW1lOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2dldDBfcmVzdWx0OworKwkJUEtDUzEyX0FVVEhTQUZFU19pdDsKKysJCUVWUF9hZXNfMjU2X2VjYjsKKysJCVBLQ1MxMl9wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfSUE1U1RSSU5HX2l0OworKwkJVUlfZ2V0X2lucHV0X2ZsYWdzOworKwkJRUNfR1JPVVBfc2V0X2dlbmVyYXRvcjsKKysJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvXzJrZXlzOworKwkJT0NTUF9DRVJUSURfZnJlZTsKKysJCVg1MDlfQ0VSVF9BVVhfaXQ7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX2l0OworKwkJX29zc2xfb2xkX2Rlc19lZGUzX2NiY19lbmNyeXB0OworKwkJUkFORF9zZXRfcmFuZF9lbmdpbmU7CisrCQlEU09fZ2V0X2xvYWRlZF9maWxlbmFtZTsKKysJCVg1MDlfQVRUUklCVVRFX2l0OworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9OSUQ7CisrCQlQS0NTMTJfZGVjcnlwdF9za2V5OworKwkJS1JCNV9BVVRIRU5UX2l0OworKwkJVUlfZHVwX2Vycm9yX3N0cmluZzsKKysJCVJTQVB1YmxpY0tleV9pdDsKKysJCWkyZF9PQ1NQX1JFUVVFU1Q7CisrCQlQS0NTMTJfeDUwOWNybDJjZXJ0YmFnOworKwkJT0NTUF9TRVJWSUNFTE9DX2l0OworKwkJQVNOMV9pdGVtX3NpZ247CisrCQlYNTA5X0NSTF9zZXRfaXNzdWVyX25hbWU7CisrCQlPQkpfTkFNRV9kb19hbGxfc29ydGVkOworKwkJaTJkX09DU1BfQkFTSUNSRVNQOworKwkJaTJkX09DU1BfUkVTUEJZVEVTOworKwkJUEtDUzEyX3VucGFja19wN2VuY2RhdGE7CisrCQlITUFDX0NUWF9pbml0OworKwkJRU5HSU5FX2dldF9kaWdlc3Q7CisrCQlPQ1NQX1JFU1BPTlNFX3ByaW50OworKwkJS1JCNV9US1RCT0RZX2l0OworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2l0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfaXQ7CisrCQlQQkUyUEFSQU1faXQ7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5Y3JsOworKwkJUEtDUzdfU0lHTkVEX2l0OworKwkJRU5HSU5FX2dldF9jaXBoZXI7CisrCQlpMmRfT0NTUF9DUkxJRDsKKysJCU9DU1BfU0lOR0xFUkVTUF9uZXc7CisrCQlFTkdJTkVfY21kX2lzX2V4ZWN1dGFibGU7CisrCQlSU0FfdXBfcmVmOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX0RTQTsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mX3NrOworKwkJRU5HSU5FX3NldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVBLQ1M4X2RlY3J5cHQ7CisrCQlQRU1fYnl0ZXNfcmVhZF9iaW87CisrCQlESVJFQ1RPUllTVFJJTkdfaXQ7CisrCQlkMmlfT0NTUF9DUkxJRDsKKysJCUVDX1BPSU5UX2lzX29uX2N1cnZlOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jczsKKysJCWQyaV9LUkI1X0NIRUNLU1VNOworKwkJQVNOMV9pdGVtX2R1cDsKKysJCVg1MDlfaXQ7CisrCQlCTl9tb2RfYWRkOworKwkJS1JCNV9BVVRIREFUQV9mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jYmNfY2tzdW07CisrCQlBU04xX2l0ZW1fdmVyaWZ5OworKwkJQ1JZUFRPX3NldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9KcHJval9jb29yZHNfR0ZwOworKwkJWkxPTkdfaXQ7CisrCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZXhfZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmNzOworKwkJQVNOMV9USU1FX2NoZWNrOworKwkJVUlfZ2V0MF91c2VyX2RhdGE7CisrCQlITUFDX0NUWF9jbGVhbnVwOworKwkJRFNBX3VwX3JlZjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlBU04xX0JNUFNUUklOR19pdDsKKysJCUFTTjFfdGFnMmJpdDsKKysJCVVJX21ldGhvZF9zZXRfZmx1c2hlcjsKKysJCVg1MDlfb2NzcGlkX3ByaW50OworKwkJS1JCNV9FTkNEQVRBX2l0OworKwkJRU5HSU5FX2dldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVVJX2FkZF91c2VyX2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfZGVsZXRlX2V4dDsKKysJCVVJX2dldF9tZXRob2Q7CisrCQlPQ1NQX09ORVJFUV9mcmVlOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfaXQ7CisrCQlYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZTsKKysJCU9DU1BfUkVRVUVTVF9pdDsKKysJCU9DU1BfQkFTSUNSRVNQX2l0OworKwkJQUVTX2VjYl9lbmNyeXB0OworKwkJQk5fbW9kX3NxcjsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfaXQ7CisrCQlHRU5FUkFMX05BTUVTX2l0OworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX2l0OworKwkJQVNOMV9GQk9PTEVBTl9pdDsKKysJCVVJX3NldF9leF9kYXRhOworKwkJX29zc2xfb2xkX2Rlc19zdHJpbmdfdG9fa2V5OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SU0E7CisrCQlkMmlfS1JCNV9QUklOQ05BTUU7CisrCQlPQ1NQX1JFU1BCWVRFU19pdDsKKysJCVg1MDlfQ0lORl9pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2RpZ2VzdHM7CisrCQlkMmlfRURJUEFSVFlOQU1FOworKwkJZDJpX09DU1BfU0VSVklDRUxPQzsKKysJCUVOR0lORV9nZXRfZGlnZXN0czsKKysJCV9vc3NsX29sZF9kZXNfc2V0X29kZF9wYXJpdHk7CisrCQlPQ1NQX1JFU1BEQVRBX2ZyZWU7CisrCQlkMmlfS1JCNV9USUNLRVQ7CisrCQlPVEhFUk5BTUVfaXQ7CisrCQlFVlBfTURfQ1RYX2NsZWFudXA7CisrCQlkMmlfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJWDUwOV9DUkxfc2V0X3ZlcnNpb247CisrCQlCTl9tb2Rfc3ViOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfTklEOworKwkJRU5HSU5FX2dldF9leF9uZXdfaW5kZXg7CisrCQlPQ1NQX1JFUVVFU1RfZnJlZTsKKysJCU9DU1BfUkVRVUVTVF9hZGQxX2V4dF9pMmQ7CisrCQlYNTA5X1ZBTF9pdDsKKysJCUVDX1BPSU5Uc19tYWtlX2FmZmluZTsKKysJCUVDX1BPSU5UX211bDsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mOworKwkJWDUwOV9UUlVTVF9zZXQ7CisrCQlYNTA5X0NSTF9hZGQxX2V4dF9pMmQ7CisrCQlfb3NzbF9vbGRfZGVzX2ZjcnlwdDsKKysJCURJU1BMQVlURVhUX2l0OworKwkJWDUwOV9DUkxfc2V0X2xhc3RVcGRhdGU7CisrCQlPQ1NQX0JBU0lDUkVTUF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfYWRkMV9leHRfaTJkOworKwkJZDJpX0tSQjVfQVVUSEVOVEJPRFk7CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbGVtZW50YXRpb247CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbDsKKysJCUtSQjVfRU5DREFUQV9uZXc7CisrCQlEU09fdXBfcmVmOworKwkJT0NTUF9jcmxfcmVhc29uX3N0cjsKKysJCVVJX2dldDBfcmVzdWx0X3N0cmluZzsKKysJCUFTTjFfR0VORVJBTFNUUklOR19uZXc7CisrCQlYNTA5X1NJR19pdDsKKysJCUVSUl9zZXRfaW1wbGVtZW50YXRpb247CisrCQlFUlJfbG9hZF9FQ19zdHJpbmdzOworKwkJVUlfZ2V0MF9hY3Rpb25fc3RyaW5nOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dDsKKysJCUVDX1BPSU5UX21ldGhvZF9vZjsKKysJCWkyZF9LUkI1X0FQUkVRQk9EWTsKKysJCV9vc3NsX29sZF9kZXNfZWNiM19lbmNyeXB0OworKwkJQ1JZUFRPX2dldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRU5HSU5FX2dldF9leF9kYXRhOworKwkJVUlfZGVzdHJveV9tZXRob2Q7CisrCQlBU04xX2l0ZW1faTJkX2JpbzsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfT0JKOworKwkJQVNOMV9wcmltaXRpdmVfbmV3OworKwkJQVNOMV9QUklOVEFCTEVfaXQ7CisrCQlFVlBfYWVzXzE5Ml9lY2I7CisrCQlPQ1NQX1NJR05BVFVSRV9uZXc7CisrCQlMT05HX2l0OworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX2l0OworKwkJT0NTUF9TSU5HTEVSRVNQX2FkZDFfZXh0X2kyZDsKKysJCWQyaV9PQ1NQX0NFUlRJRDsKKysJCUFTTjFfaXRlbV9kMmlfZnA7CisrCQlDUkxfRElTVF9QT0lOVFNfaXQ7CisrCQlHRU5FUkFMX05BTUVfcHJpbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZGVsZXRlX2V4dDsKKysJCVBLQ1MxMl9TQUZFQkFHU19pdDsKKysJCWQyaV9PQ1NQX1NJR05BVFVSRTsKKysJCU9DU1BfcmVxdWVzdF9hZGQxX25vbmNlOworKwkJRU5HSU5FX3NldF9jbWRfZGVmbnM7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfZnJlZTsKKysJCUVDX0dST1VQX2ZyZWU7CisrCQlBU04xX0JJVF9TVFJJTkdfaXQ7CisrCQlYNTA5X1JFUV9pdDsKKysJCV9vc3NsX29sZF9kZXNfY2JjX2VuY3J5cHQ7CisrCQlFUlJfdW5sb2FkX3N0cmluZ3M7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX2l0OworKwkJRURJUEFSVFlOQU1FX2ZyZWU7CisrCQlPQ1NQX1JFUUlORk9fZnJlZTsKKysJCUVDX0dST1VQX25ld19jdXJ2ZV9HRnA7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0MV9leHRfZDJpOworKwkJUEtDUzEyX2l0ZW1fcGFja19zYWZlYmFnOworKwkJYXNuMV9leF9jMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfZGlnZXN0czsKKysJCWkyZF9PQ1NQX1JFVk9LRURJTkZPOworKwkJYXNuMV9lbmNfcmVzdG9yZTsKKysJCVVJX2ZyZWU7CisrCQlVSV9uZXdfbWV0aG9kOworKwkJRVZQX0VuY3J5cHRJbml0X2V4OworKwkJWDUwOV9wdWJrZXlfZGlnZXN0OworKwkJRUNfUE9JTlRfaW52ZXJ0OworKwkJT0NTUF9iYXNpY19zaWduOworKwkJaTJkX09DU1BfUkVTUElEOworKwkJT0NTUF9jaGVja19ub25jZTsKKysJCUVOR0lORV9jdHJsX2NtZDsKKysJCWQyaV9LUkI1X0VOQ0tFWTsKKysJCU9DU1BfcGFyc2VfdXJsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHQ7CisrCQlPQ1NQX0NSTElEX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXQxX2V4dF9kMmk7CisrCQlSU0FQcml2YXRlS2V5X2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9ESDsKKysJCWkyZF9FRElQQVJUWU5BTUU7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCU9DU1BfQ1JMSURfbmV3OworKwkJRU5HSU5FX2dldF9mbGFnczsKKysJCU9DU1BfT05FUkVRX2l0OworKwkJVUlfcHJvY2VzczsKKysJCUFTTjFfSU5URUdFUl9pdDsKKysJCUVWUF9DaXBoZXJJbml0X2V4OworKwkJVUlfZ2V0X3N0cmluZ190eXBlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfREg7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0RTQTsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlibl9kdXBfZXhwYW5kOworKwkJT0NTUF9jZXJ0X2lkX25ldzsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX2l0OworKwkJQk5fbW9kX2FkZF9xdWljazsKKysJCUVDX1BPSU5UX25ldzsKKysJCUVWUF9NRF9DVFhfZGVzdHJveTsKKysJCU9DU1BfUkVTUEJZVEVTX2ZyZWU7CisrCQlFVlBfYWVzXzEyOF9jYmM7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0MV9leHRfZDJpOworKwkJRUNfUE9JTlRfZnJlZTsKKysJCURIX3VwX3JlZjsKKysJCVg1MDlfTkFNRV9FTlRSWV9pdDsKKysJCVVJX2dldF9leF9uZXdfaW5kZXg7CisrCQlCTl9tb2Rfc3ViX3F1aWNrOworKwkJT0NTUF9PTkVSRVFfYWRkX2V4dDsKKysJCU9DU1BfcmVxdWVzdF9zaWduOworKwkJRVZQX0RpZ2VzdEZpbmFsX2V4OworKwkJRU5HSU5FX3NldF9kaWdlc3RzOworKwkJT0NTUF9pZF9pc3N1ZXJfY21wOworKwkJT0JKX05BTUVfZG9fYWxsOworKwkJRUNfUE9JTlRzX211bDsKKysJCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZTsKKysJCVg1MDlWM19FWFRfbmNvbmZfbmlkOworKwkJQVNOMV9TRVFVRU5DRV9pdDsKKysJCVVJX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVJBTkRfcXVlcnlfZWdkX2J5dGVzOworKwkJVUlfbWV0aG9kX2dldF93cml0ZXI7CisrCQlVSV9PcGVuU1NMOworKwkJUEVNX2RlZl9jYWxsYmFjazsKKysJCUVOR0lORV9jbGVhbnVwOworKwkJRElTVF9QT0lOVF9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9pdDsKKysJCWQyaV9LUkI1X1RLVEJPRFk7CisrCQlFQ19QT0lOVF9jbXA7CisrCQlPQ1NQX1JFVk9LRURJTkZPX25ldzsKKysJCWkyZF9PQ1NQX0NFUlRTVEFUVVM7CisrCQlPQ1NQX2Jhc2ljX2FkZDFfbm9uY2U7CisrCQlBU04xX2l0ZW1fZXhfZDJpOworKwkJQk5fbW9kX2xzaGlmdDFfcXVpY2s7CisrCQlVSV9zZXRfbWV0aG9kOworKwkJT0NTUF9pZF9nZXQwX2luZm87CisrCQlCTl9tb2Rfc3FydDsKKysJCUVDX0dST1VQX2NvcHk7CisrCQlLUkI1X0VOQ0RBVEFfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY2ZiX2VuY3J5cHQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlPQ1NQX2NlcnRfdG9faWQ7CisrCQlPQ1NQX1JFU1BJRF9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX2l0OworKwkJZDJpX09DU1BfUkVTUERBVEE7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlOworKwkJT0NTUF9jaGVja192YWxpZGl0eTsKKysJCVBLQ1MxMl9CQUdTX2l0OworKwkJT0NTUF91cmxfc3ZjbG9jX25ldzsKKysJCUFTTjFfdGVtcGxhdGVfZnJlZTsKKysJCU9DU1BfU0lOR0xFUkVTUF9hZGRfZXh0OworKwkJS1JCNV9BVVRIRU5UQk9EWV9pdDsKKysJCVg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbjsKKysJCWkyZF9LUkI1X0FVVEhEQVRBOworKwkJVUlfbWV0aG9kX2dldF9vcGVuZXI7CisrCQlFTkdJTkVfc2V0X2V4X2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfcHJpbnQ7CisrCQlDQklHTlVNX2l0OworKwkJS1JCNV9USUNLRVRfbmV3OworKwkJS1JCNV9BUFJFUV9uZXc7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfR0ZwOworKwkJS1JCNV9FTkNLRVlfbmV3OworKwkJQVNOMV90ZW1wbGF0ZV9kMmk7CisrCQlfb3NzbF9vbGRfZGVzX3F1YWRfY2tzdW07CisrCQlPQ1NQX3NpbmdsZV9nZXQwX3N0YXR1czsKKysJCUJOX3N3YXA7CisrCQlQT0xJQ1lJTkZPX2l0OworKwkJRU5HSU5FX3NldF9kZXN0cm95X2Z1bmN0aW9uOworKwkJYXNuMV9lbmNfZnJlZTsKKysJCU9DU1BfUkVTUElEX2l0OworKwkJRUNfR1JPVVBfbmV3OworKwkJRVZQX2Flc18yNTZfY2JjOworKwkJaTJkX0tSQjVfUFJJTkNOQU1FOworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0MjsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDM7CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2l0OworKwkJT0NTUF9SRVFJTkZPX2l0OworKwkJUEJFUEFSQU1faXQ7CisrCQlLUkI1X0FVVEhFTlRCT0RZX25ldzsKKysJCVg1MDlfQ1JMX2FkZDBfcmV2b2tlZDsKKysJCUVESVBBUlRZTkFNRV9pdDsKKysJCU5FVFNDQVBFX1NQS0lfaXQ7CisrCQlVSV9nZXQwX3Rlc3Rfc3RyaW5nOworKwkJRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jaXBoZXJzOworKwkJRUNfUE9JTlRfY29weTsKKysJCUJOX2tyb25lY2tlcjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlVSV9tZXRob2RfZ2V0X3JlYWRlcjsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfY291bnQ7CisrCQlBU04xX0VOVU1FUkFURURfaXQ7CisrCQlVSV9zZXRfcmVzdWx0OworKwkJaTJkX0tSQjVfVElDS0VUOworKwkJWDUwOV9wcmludF9leF9mcDsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nOworKwkJZDJpX09DU1BfUkVTUE9OU0U7CisrCQlBU04xX1VUQ1RJTUVfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VuY193cml0ZTsKKysJCU9DU1BfUkVTUE9OU0VfbmV3OworKwkJQUVTX3NldF9lbmNyeXB0X2tleTsKKysJCU9DU1BfcmVzcF9jb3VudDsKKysJCUtSQjVfQ0hFQ0tTVU1fbmV3OworKwkJRU5HSU5FX2xvYWRfY3N3aWZ0OworKwkJT0NTUF9vbmVyZXFfZ2V0MF9pZDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9jaXBoZXJzOworKwkJTk9USUNFUkVGX2l0OworKwkJWDUwOVYzX0VYVF9DUkxfYWRkX25jb25mOworKwkJT0NTUF9SRVZPS0VESU5GT19pdDsKKysJCUFFU19lbmNyeXB0OworKwkJT0NTUF9SRVFVRVNUX25ldzsKKysJCUFTTjFfQU5ZX2l0OworKwkJQ1JZUFRPX2V4X2RhdGFfbmV3X2NsYXNzOworKwkJX29zc2xfb2xkX2Rlc19uY2JjX2VuY3J5cHQ7CisrCQlpMmRfS1JCNV9US1RCT0RZOworKwkJRUNfUE9JTlRfY2xlYXJfZnJlZTsKKysJCUFFU19kZWNyeXB0OworKwkJYXNuMV9lbmNfaW5pdDsKKysJCVVJX2dldF9yZXN1bHRfbWF4c2l6ZTsKKysJCU9DU1BfQ0VSVElEX25ldzsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JBTkQ7CisrCQlVSV9tZXRob2RfZ2V0X2Nsb3NlcjsKKysJCWQyaV9LUkI1X0VOQ0RBVEE7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2NvdW50OworKwkJT0NTUF9iYXNpY192ZXJpZnk7CisrCQlLUkI1X0FVVEhFTlRCT0RZX2ZyZWU7CisrCQlBU04xX2l0ZW1fZDJpOworKwkJQVNOMV9wcmltaXRpdmVfZnJlZTsKKysJCWkyZF9FWFRFTkRFRF9LRVlfVVNBR0U7CisrCQlpMmRfT0NTUF9TSUdOQVRVUkU7CisrCQlhc24xX2VuY19zYXZlOworKwkJRU5HSU5FX2xvYWRfbnVyb247CisrCQlfb3NzbF9vbGRfZGVzX3BjYmNfZW5jcnlwdDsKKysJCVBLQ1MxMl9NQUNfREFUQV9pdDsKKysJCU9DU1BfYWNjZXB0X3Jlc3BvbnNlc19uZXc7CisrCQlhc24xX2RvX2xvY2s7CisrCQlQS0NTN19BVFRSX1ZFUklGWV9pdDsKKysJCUtSQjVfQVBSRVFCT0RZX2l0OworKwkJaTJkX09DU1BfU0lOR0xFUkVTUDsKKysJCUFTTjFfaXRlbV9leF9uZXc7CisrCQlVSV9hZGRfdmVyaWZ5X3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfc2V0X2tleTsKKysJCUtSQjVfUFJJTkNOQU1FX2l0OworKwkJRVZQX0RlY3J5cHRJbml0X2V4OworKwkJaTJkX09DU1BfQ0VSVElEOworKwkJQVNOMV9pdGVtX2QyaV9iaW87CisrCQlFQ19QT0lOVF9kYmw7CisrCQlhc24xX2dldF9jaG9pY2Vfc2VsZWN0b3I7CisrCQlpMmRfS1JCNV9DSEVDS1NVTTsKKysJCUVOR0lORV9zZXRfdGFibGVfZmxhZ3M7CisrCQlBRVNfb3B0aW9uczsKKysJCUVOR0lORV9sb2FkX2NoaWw7CisrCQlPQ1NQX2lkX2NtcDsKKysJCU9DU1BfQkFTSUNSRVNQX25ldzsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X05JRDsKKysJCUtSQjVfQVBSRVFfaXQ7CisrCQlFTkdJTkVfZ2V0X2Rlc3Ryb3lfZnVuY3Rpb247CisrCQlDT05GX3NldF9uY29uZjsKKysJCUFTTjFfUFJJTlRBQkxFX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X05JRDsKKysJCURJU1RfUE9JTlRfTkFNRV9pdDsKKysJCVg1MDlWM19leHRlbnNpb25zX3ByaW50OworKwkJX29zc2xfb2xkX2Rlc19jZmI2NF9lbmNyeXB0OworKwkJWDUwOV9SRVZPS0VEX2FkZDFfZXh0X2kyZDsKKysJCV9vc3NsX29sZF9kZXNfb2ZiX2VuY3J5cHQ7CisrCQlLUkI1X1RLVEJPRFlfbmV3OworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfaXQ7CisrCQlFUlJfbG9hZF9VSV9zdHJpbmdzOworKwkJaTJkX0tSQjVfRU5DS0VZOworKwkJQVNOMV90ZW1wbGF0ZV9uZXc7CisrCQlPQ1NQX1NJR05BVFVSRV9mcmVlOworKwkJQVNOMV9pdGVtX2kyZF9mcDsKKysJCUtSQjVfUFJJTkNOQU1FX2ZyZWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2l0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX2l0OworKwkJRUNfR0ZwX3NpbXBsZV9tZXRob2Q7CisrCQlFQ19HUk9VUF9wcmVjb21wdXRlX211bHQ7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2dldDA7CisrCQlVSV9tZXRob2Rfc2V0X3dyaXRlcjsKKysJCUtSQjVfQVVUSEVOVF9uZXc7CisrCQlYNTA5X0NSTF9JTkZPX2l0OworKwkJRFNPX3NldF9uYW1lX2NvbnZlcnRlcjsKKysJCUFFU19zZXRfZGVjcnlwdF9rZXk7CisrCQlQS0NTN19ESUdFU1RfaXQ7CisrCQlQS0NTMTJfeDUwOTJjZXJ0YmFnOworKwkJRVZQX0RpZ2VzdEluaXRfZXg7CisrCQlpMmFfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJT0NTUF9SRVNQT05TRV9pdDsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2l0OworKwkJT0NTUF9yZXF1ZXN0X2FkZDBfaWQ7CisrCQlFQ19QT0lOVF9tYWtlX2FmZmluZTsKKysJCURTT19nZXRfZmlsZW5hbWU7CisrCQlPQ1NQX0NFUlRTVEFUVVNfaXQ7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMV9jZXJ0OworKwkJVUlfZ2V0MF9vdXRwdXRfc3RyaW5nOworKwkJVUlfZHVwX3ZlcmlmeV9zdHJpbmc7CisrCQlCTl9tb2RfbHNoaWZ0OworKwkJS1JCNV9BVVRIREFUQV9pdDsKKysJCWFzbjFfc2V0X2Nob2ljZV9zZWxlY3RvcjsKKysJCU9DU1BfYmFzaWNfYWRkMV9zdGF0dXM7CisrCQlPQ1NQX1JFU1BJRF9mcmVlOworKwkJYXNuMV9nZXRfZmllbGRfcHRyOworKwkJVUlfYWRkX2lucHV0X3N0cmluZzsKKysJCU9DU1BfQ1JMSURfaXQ7CisrCQlpMmRfS1JCNV9BVVRIRU5UQk9EWTsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2NvdW50OworKwkJRU5HSU5FX2xvYWRfYXRhbGxhOworKwkJWDUwOV9OQU1FX2l0OworKwkJVVNFUk5PVElDRV9pdDsKKysJCU9DU1BfUkVRSU5GT19uZXc7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0OworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGw7CisrCQlBU04xX2l0ZW1fcGFjazsKKysJCWkyZF9LUkI1X0VOQ0RBVEE7CisrCQlYNTA5X1BVUlBPU0Vfc2V0OworKwkJWDUwOV9SRVFfSU5GT19pdDsKKysJCVVJX21ldGhvZF9zZXRfb3BlbmVyOworKwkJQVNOMV9pdGVtX2V4X2ZyZWU7CisrCQlBU04xX0JPT0xFQU5faXQ7CisrCQlFTkdJTkVfZ2V0X3RhYmxlX2ZsYWdzOworKwkJVUlfY3JlYXRlX21ldGhvZDsKKysJCU9DU1BfT05FUkVRX2FkZDFfZXh0X2kyZDsKKysJCV9zaGFkb3dfREVTX2NoZWNrX2tleTsKKysJCWQyaV9PQ1NQX1JFUUlORk87CisrCQlVSV9hZGRfaW5mb19zdHJpbmc7CisrCQlVSV9nZXRfcmVzdWx0X21pbnNpemU7CisrCQlBU04xX05VTExfaXQ7CisrCQlCTl9tb2RfbHNoaWZ0MTsKKysJCWQyaV9PQ1NQX09ORVJFUTsKKysJCU9DU1BfT05FUkVRX25ldzsKKysJCUtSQjVfVElDS0VUX2l0OworKwkJRVZQX2Flc18xOTJfY2JjOworKwkJS1JCNV9USUNLRVRfZnJlZTsKKysJCVVJX25ldzsKKysJCU9DU1BfcmVzcG9uc2VfY3JlYXRlOworKwkJX29zc2xfb2xkX2Rlc194Y2JjX2VuY3J5cHQ7CisrCQlQS0NTN19pdDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdDsKKysJCUVOR0lORV9zZXRfZmxhZ3M7CisrCQlfb3NzbF9vbGRfZGVzX2VjYl9lbmNyeXB0OworKwkJT0NTUF9yZXNwb25zZV9nZXQxX2Jhc2ljOworKwkJRVZQX0RpZ2VzdDsKKysJCU9DU1BfT05FUkVRX2RlbGV0ZV9leHQ7CisrCQlBU04xX1RCT09MRUFOX2l0OworKwkJQVNOMV9pdGVtX25ldzsKKysJCUFTTjFfVElNRV90b19nZW5lcmFsaXplZHRpbWU7CisrCQlCSUdOVU1faXQ7CisrCQlBRVNfY2JjX2VuY3J5cHQ7CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2ZuOworKwkJT0NTUF9SRVNQT05TRV9mcmVlOworKwkJVUlfbWV0aG9kX3NldF9yZWFkZXI7CisrCQlpMmRfQVNOMV9UNjFTVFJJTkc7CisrCQlFQ19QT0lOVF9zZXRfdG9faW5maW5pdHk7CisrCQlFUlJfbG9hZF9PQ1NQX3N0cmluZ3M7CisrCQlFQ19QT0lOVF9wb2ludDJvY3Q7CisrCQlLUkI1X0FQUkVRX2ZyZWU7CisrCQlBU04xX09CSkVDVF9pdDsKKysJCU9DU1BfY3JsSURfbmV3OworKwkJT0NTUF9jcmxJRDJfbmV3OworKwkJQ09ORl9tb2R1bGVzX2xvYWRfZmlsZTsKKysJCUNPTkZfaW1vZHVsZV9zZXRfdXNyX2RhdGE7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfc3RyaW5nOworKwkJQ09ORl9tb2R1bGVfZ2V0X3Vzcl9kYXRhOworKwkJQVNOMV9hZGRfb2lkX21vZHVsZTsKKysJCUNPTkZfbW9kdWxlc19maW5pc2g7CisrCQlPUEVOU1NMX2NvbmZpZzsKKysJCUNPTkZfbW9kdWxlc191bmxvYWQ7CisrCQlDT05GX2ltb2R1bGVfZ2V0X3ZhbHVlOworKwkJQ09ORl9tb2R1bGVfc2V0X3Vzcl9kYXRhOworKwkJQ09ORl9wYXJzZV9saXN0OworKwkJQ09ORl9tb2R1bGVfYWRkOworKwkJQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGU7CisrCQlDT05GX2ltb2R1bGVfZ2V0X2ZsYWdzOworKwkJQ09ORl9pbW9kdWxlX2dldF9tb2R1bGU7CisrCQlDT05GX21vZHVsZXNfbG9hZDsKKysJCUNPTkZfaW1vZHVsZV9nZXRfbmFtZTsKKysJCUVSUl9wZWVrX3RvcF9lcnJvcjsKKysJCUNPTkZfaW1vZHVsZV9nZXRfdXNyX2RhdGE7CisrCQlDT05GX2ltb2R1bGVfc2V0X2ZsYWdzOworKwkJRU5HSU5FX2FkZF9jb25mX21vZHVsZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfbGFzdF9lcnJvcjsKKysJCURFU19yZWFkXzJwYXNzd29yZHM7CisrCQlERVNfcmVhZF9wYXNzd29yZDsKKysJCVVJX1VUSUxfcmVhZF9wdzsKKysJCVVJX1VUSUxfcmVhZF9wd19zdHJpbmc7CisrCQlFTkdJTkVfbG9hZF9hZXA7CisrCQlFTkdJTkVfbG9hZF9zdXJld2FyZTsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19jb25mOworKwkJT1BFTlNTTF9sb2FkX2J1aWx0aW5fbW9kdWxlczsKKysJCUFFU19vZmIxMjhfZW5jcnlwdDsKKysJCUFFU19jdHIxMjhfZW5jcnlwdDsKKysJCUFFU19jZmIxMjhfZW5jcnlwdDsKKysJCUVOR0lORV9sb2FkXzQ3NThjY2E7CisrCQlfb3NzbF8wOTZfZGVzX3JhbmRvbV9zZWVkOworKwkJRVZQX2Flc18yNTZfb2ZiOworKwkJRVZQX2Flc18xOTJfb2ZiOworKwkJRVZQX2Flc18xMjhfY2ZiMTI4OworKwkJRVZQX2Flc18yNTZfY2ZiMTI4OworKwkJRVZQX2Flc18xMjhfb2ZiOworKwkJRVZQX2Flc18xOTJfY2ZiMTI4OworKwkJQ09ORl9tb2R1bGVzX2ZyZWU7CisrCQlOQ09ORl9kZWZhdWx0OworKwkJT1BFTlNTTF9ub19jb25maWc7CisrCQlOQ09ORl9XSU4zMjsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX25ldzsKKysJCUVWUF9kZXNfZWRlX2VjYjsKKysJCWkyZF9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX2ZyZWU7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19pdDsKKysJCWQyaV9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUVWUF9kZXNfZWRlM19lY2I7CisrCQlYNTA5X1JFUV9wcmludF9leDsKKysJCUVOR0lORV91cF9yZWY7CisrCQlCVUZfTUVNX2dyb3dfY2xlYW47CisrCQlDUllQVE9fcmVhbGxvY19jbGVhbjsKKysJCUJVRl9zdHJsY2F0OworKwkJQklPX2luZGVudDsKKysJCUJVRl9zdHJsY3B5OworKwkJT3BlblNTTERpZTsKKysJCU9QRU5TU0xfY2xlYW5zZTsKKysJCUVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2OworKwkJRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlOworKwkJRVZQX2Flc18xMjhfY2ZiODsKKysJCUZJUFNfY29ycnVwdF9yc2E7CisrCQlGSVBTX3NlbGZ0ZXN0X2RlczsKKysJCUVWUF9hZXNfMTI4X2NmYjE7CisrCQlFVlBfYWVzXzE5Ml9jZmI4OworKwkJRklQU19tb2RlX3NldDsKKysJCUZJUFNfc2VsZnRlc3RfZHNhOworKwkJRVZQX2Flc18yNTZfY2ZiODsKKysJCUZJUFNfYWxsb3dfbWQ1OworKwkJREVTX2VkZTNfY2ZiX2VuY3J5cHQ7CisrCQlFVlBfZGVzX2VkZTNfY2ZiODsKKysJCUZJUFNfcmFuZF9zZWVkZWQ7CisrCQlBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQUVTX2NmYjhfZW5jcnlwdDsKKysJCUZJUFNfcmFuZF9zZWVkOworKwkJRklQU19jb3JydXB0X2RlczsKKysJCUVWUF9hZXNfMTkyX2NmYjE7CisrCQlGSVBTX3NlbGZ0ZXN0X2FlczsKKysJCUZJUFNfc2V0X3Bybmdfa2V5OworKwkJRVZQX2Rlc19jZmI4OworKwkJRklQU19jb3JydXB0X2RzYTsKKysJCUZJUFNfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX21ldGhvZDsKKysJCUVWUF9hZXNfMjU2X2NmYjE7CisrCQlFUlJfbG9hZF9GSVBTX3N0cmluZ3M7CisrCQlGSVBTX2NvcnJ1cHRfYWVzOworKwkJRklQU19zZWxmdGVzdF9zaGExOworKwkJRklQU19zZWxmdGVzdF9yc2E7CisrCQlGSVBTX2NvcnJ1cHRfc2hhMTsKKysJCUVWUF9kZXNfY2ZiMTsKKysJCUZJUFNfZHNhX2NoZWNrOworKwkJQUVTX2NmYjFfZW5jcnlwdDsKKysJCUVWUF9kZXNfZWRlM19jZmIxOworKwkJRklQU19yYW5kX2NoZWNrOworKwkJRklQU19tZDVfYWxsb3dlZDsKKysJCUZJUFNfbW9kZTsKKysJCUZJUFNfc2VsZnRlc3RfZmFpbGVkOworKwkJc2tfaXNfc29ydGVkOworKwkJWDUwOV9jaGVja19jYTsKKysJCUhNQUNfQ1RYX3NldF9mbGFnczsKKysJCWQyaV9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJUFJPWFlfUE9MSUNZX2l0OworKwkJaTJkX1BST1hZX1BPTElDWTsKKysJCWkyZF9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJZDJpX1BST1hZX1BPTElDWTsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fbmV3OworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9mcmVlOworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9pdDsKKysJCVBST1hZX1BPTElDWV9mcmVlOworKwkJUFJPWFlfUE9MSUNZX25ldzsKKysJCUJOX01PTlRfQ1RYX3NldF9sb2NrZWQ7CisrCQlGSVBTX3NlbGZ0ZXN0X3JuZzsKKysJCUVWUF9zaGEzODQ7CisrCQlFVlBfc2hhNTEyOworKwkJRVZQX3NoYTIyNDsKKysJCUVWUF9zaGEyNTY7CisrCQlGSVBTX3NlbGZ0ZXN0X2htYWM7CisrCQlGSVBTX2NvcnJ1cHRfcm5nOworKwkJQk5fbW9kX2V4cF9tb250X2NvbnN0dGltZTsKKysJCVJTQV9YOTMxX2hhc2hfaWQ7CisrCQlSU0FfcGFkZGluZ19jaGVja19YOTMxOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1M7CisrCQlSU0FfcGFkZGluZ19hZGRfWDkzMTsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1M7CisrCQlQS0NTMV9NR0YxOworKwkJQk5fWDkzMV9nZW5lcmF0ZV9YcHE7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9YOTMxX2Rlcml2ZV9wcmltZTsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWU7CisrCQlSU0FfWDkzMV9kZXJpdmU7CisrCQlCSU9fbmV3X2RncmFtOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzM4NDsKKysJCUVSUl9zZXRfbWFyazsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldDBfY3JsczsKKysJCUVOR0lORV9zZXRfU1RPUkU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNEU0E7CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X3N0YXJ0X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X3N0YXJ0X2Z1bmN0aW9uOworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0X2V4OworKwkJTkFNRV9DT05TVFJBSU5UU19mcmVlOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9udW1iZXI7CisrCQlCTl9CTElORElOR19nZXRfdGhyZWFkX2lkOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0MF9wYXJhbTsKKysJCVBPTElDWV9NQVBQSU5HX2l0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfc3RhcnQ7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlCTl9uaXN0X21vZF8xOTI7CisrCQlFQ19HUk9VUF9nZXRfdHJpbm9taWFsX2Jhc2lzOworKwkJU1RPUkVfc2V0X21ldGhvZDsKKysJCUdFTkVSQUxfU1VCVFJFRV9mcmVlOworKwkJTkFNRV9DT05TVFJBSU5UU19pdDsKKysJCUVDREhfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUEtDUzEyX2FkZF9zYWZlOworKwkJRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lOworKwkJU1RPUkVfbWV0aF9nZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNESDsKKysJCVNIQTUxMl9VcGRhdGU7CisrCQlpMmRfRUNQcml2YXRlS2V5OworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzE5MjsKKysJCVNUT1JFX21vZGlmeV9jZXJ0aWZpY2F0ZTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGMm07CisrCQlCTl9HRjJtX21vZF9leHBfYXJyOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9udW1iZXI7CisrCQlYNTA5X2tleWlkX2dldDA7CisrCQlFTkdJTkVfbG9hZF9nbXA7CisrCQlwaXRlbV9uZXc7CisrCQlCTl9HRjJtX21vZF9tdWxfYXJyOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X2VuZHA7CisrCQlvMmlfRUNQdWJsaWNLZXk7CisrCQlFQ19LRVlfY29weTsKKysJCUJJT19kdW1wX2ZwOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BhcmVudDsKKysJCUVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudDsKKysJCWkyb19FQ1B1YmxpY0tleTsKKysJCUVDX0tFWV9wcmVjb21wdXRlX211bHQ7CisrCQlhMmlfSVBBRERSRVNTOworKwkJU1RPUkVfbWV0aF9zZXRfaW5pdGlhbGlzZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2luaGVyaXQ7CisrCQlFQ19QT0lOVF9wb2ludDJibjsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfZG47CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfcG9saWNpZXM7CisrCQlFQ19HUk9VUF9uZXdfY3VydmVfR0YybTsKKysJCVNUT1JFX2Rlc3Ryb3lfbWV0aG9kOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfU1RPUkU7CisrCQlFVlBfUEtFWV9nZXQxX0VDX0tFWTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX251bWJlcjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RIOworKwkJRUNfS0VZX2dldF9jb252X2Zvcm07CisrCQlBU04xX09DVEVUX1NUUklOR19OREVGX2l0OworKwkJU1RPUkVfZGVsZXRlX3B1YmxpY19rZXk7CisrCQlTVE9SRV9nZXRfcHVibGljX2tleTsKKysJCVNUT1JFX21vZGlmeV9hcmJpdHJhcnk7CisrCQlFTkdJTkVfZ2V0X3N0YXRpY19zdGF0ZTsKKysJCXBxdWV1ZV9pdGVyYXRvcjsKKysJCUVDRFNBX1NJR19uZXc7CisrCQlPUEVOU1NMX0RJUl9lbmQ7CisrCQlCTl9HRjJtX21vZF9zcXI7CisrCQlFQ19QT0lOVF9ibjJwb2ludDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aDsKKysJCUVDX0tFWV9zZXRfYXNuMV9mbGFnOworKwkJU1RPUkVfZ2V0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfa2V5X21ldGhvZF9kYXRhOworKwkJRUNEU0Ffc2lnbl9leDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZDsKKysJCUVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm07CisrCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udl9mb3JtOworKwkJU1RPUkVfbWV0aG9kX3NldF9zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19pbjsKKysJCVBFTV9yZWFkX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCUVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpczsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlCTl9CTElORElOR19zZXRfZmxhZ3M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX3BvbGljaWVzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9uYW1lOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3B1cnBvc2U7CisrCQlTVE9SRV9nZXRfbnVtYmVyOworKwkJRUNEU0Ffc2lnbl9zZXR1cDsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyOworKwkJRUNfS0VZX3VwX3JlZjsKKysJCVBPTElDWV9NQVBQSU5HX2ZyZWU7CisrCQlCTl9HRjJtX21vZF9kaXY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3M7CisrCQlFQ19LRVlfZnJlZTsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3RfbmV4dF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9uZXh0X2Z1bmN0aW9uOworKwkJUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXk7CisrCQlkMmlfRUNfUFVCS0VZOworKwkJU1RPUkVfbWV0aF9nZXRfZ2VuZXJhdGVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dlbmVyYXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9lbmRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfZW5kX2Z1bmN0aW9uOworKwkJcHF1ZXVlX3ByaW50OworKwkJRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQ7CisrCQlFQ19LRVlfcHJpbnRfZnA7CisrCQlCTl9HRjJtX21vZF9hcnI7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ0VSVF9QQUlSOworKwkJRVZQX1BLRVlfY21wOworKwkJWDUwOV9wb2xpY3lfbGV2ZWxfbm9kZV9jb3VudDsKKysJCVNUT1JFX25ld19lbmdpbmU7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfc3RhcnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9uZXc7CisrCQlFQ0RIX2dldF9leF9kYXRhOworKwkJRVZQX1BLRVlfZ2V0X2F0dHI7CisrCQlFQ0RTQV9kb19zaWduOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRUNESDsKKysJCUVDREhfT3BlblNTTDsKKysJCUVDX0tFWV9zZXRfY29udl9mb3JtOworKwkJRUNfUE9JTlRfZHVwOworKwkJR0VORVJBTF9TVUJUUkVFX25ldzsKKysJCVNUT1JFX2xpc3RfY3JsX2VuZHA7CisrCQlFQ19nZXRfYnVpbHRpbl9jdXJ2ZXM7CisrCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKKysJCVg1MDlfcGN5X25vZGVfZ2V0MF9xdWFsaWZpZXJzOworKwkJU1RPUkVfbGlzdF9jcmxfZW5kOworKwkJRVZQX1BLRVlfc2V0MV9FQ19LRVk7CisrCQlCTl9HRjJtX21vZF9zcXJ0X2FycjsKKysJCWkyZF9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnRfZnA7CisrCQlwcXVldWVfZmluZDsKKysJCUVDRFNBX1NJR19mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCVNUT1JFX21ldGhvZF9zZXRfY3RybF9mdW5jdGlvbjsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmQ7CisrCQlFQ19LRVlfc2V0X3ByaXZhdGVfa2V5OworKwkJcHF1ZXVlX3BlZWs7CisrCQlTVE9SRV9nZXRfYXJiaXRyYXJ5OworKwkJU1RPUkVfc3RvcmVfY3JsOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BvbGljeTsKKysJCVBLQ1MxMl9hZGRfc2FmZXM7CisrCQlCTl9CTElORElOR19jb252ZXJ0X2V4OworKwkJWDUwOV9wb2xpY3lfdHJlZV9mcmVlOworKwkJT1BFTlNTTF9pYTMyY2FwX2xvYzsKKysJCUJOX0dGMm1fcG9seTJhcnI7CisrCQlTVE9SRV9jdHJsOworKwkJU1RPUkVfQVRUUl9JTkZPX2NvbXBhcmU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjI0OworKwkJaTJkX0VDUGFyYW1ldGVyczsKKysJCWkyZF9FQ1BLUGFyYW1ldGVyczsKKysJCUJOX0dFTkNCX2NhbGw7CisrCQlkMmlfRUNQS1BhcmFtZXRlcnM7CisrCQlTVE9SRV9tZXRoX3NldF9nZW5lcmF0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2VuZXJhdGVfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X0VDREg7CisrCQlOQU1FX0NPTlNUUkFJTlRTX25ldzsKKysJCVNIQTI1Nl9Jbml0OworKwkJRUNfS0VZX2dldDBfcHVibGljX2tleTsKKysJCVBFTV93cml0ZV9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9jc3RyOworKwkJU1RPUkVfbGlzdF9jcmxfbmV4dDsKKysJCVNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZTsKKysJCUVDUGFyYW1ldGVyc19wcmludDsKKysJCVNUT1JFX21ldGhfc2V0X2RlbGV0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZGVsZXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9uZXh0OworKwkJQVNOMV9nZW5lcmF0ZV9uY29uZjsKKysJCUJVRl9tZW1kdXA7CisrCQlCTl9HRjJtX21vZF9tdWw7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X25leHRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2RuOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9uZXh0OworKwkJRUNfR1JPVVBfc2V0X3NlZWQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdHJ1c3Q7CisrCQlTVE9SRV9BVFRSX0lORk9fZnJlZTsKKysJCVNUT1JFX2dldF9wcml2YXRlX2tleTsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2NvdW50OworKwkJU1RPUkVfQVRUUl9JTkZPX25ldzsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtOworKwkJU1RPUkVfbWV0aF9zZXRfcmV2b2tlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9yZXZva2VfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9udW1iZXI7CisrCQlCTl9pc19wcmltZV9leDsKKysJCVNUT1JFX3Jldm9rZV9wdWJsaWNfa2V5OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJhbTsKKysJCVNUT1JFX2RlbGV0ZV9hcmJpdHJhcnk7CisrCQlQRU1fcmVhZF9YNTA5X0NFUlRfUEFJUjsKKysJCVg1MDlfU1RPUkVfc2V0X2RlcHRoOworKwkJRUNEU0FfZ2V0X2V4X2RhdGE7CisrCQlTSEEyMjQ7CisrCQlCSU9fZHVtcF9pbmRlbnRfZnA7CisrCQlFQ19LRVlfc2V0X2dyb3VwOworKwkJQlVGX3N0cm5kdXA7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX3N0YXJ0OworKwkJQk5fR0YybV9tb2Q7CisrCQlYNTA5X1JFUV9jaGVja19wcml2YXRlX2tleTsKKysJCUVDX0dST1VQX2dldF9zZWVkX2xlbjsKKysJCUVSUl9sb2FkX1NUT1JFX3N0cmluZ3M7CisrCQlQRU1fcmVhZF9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmQ7CisrCQlpMmRfRUNfUFVCS0VZOworKwkJRUNEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQVNOMV9wdXRfZW9jOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4cGxpY2l0X3BvbGljeTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsX3BvbGljeTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3RhYmxlX2NsZWFudXA7CisrCQlTVE9SRV9tb2RpZnlfcHJpdmF0ZV9rZXk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlOworKwkJRUNfTUVUSE9EX2dldF9maWVsZF90eXBlOworKwkJRUNfR0ZwX25pc3RfbWV0aG9kOworKwkJU1RPUkVfbWV0aF9zZXRfbW9kaWZ5X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9tb2RpZnlfZnVuY3Rpb247CisrCQlTVE9SRV9wYXJzZV9hdHRyc19uZXh0OworKwkJRU5HSU5FX2xvYWRfcGFkbG9jazsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lOworKwkJWDUwOV9DRVJUX1BBSVJfaXQ7CisrCQlTVE9SRV9tZXRoX2dldF9yZXZva2VfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3Jldm9rZV9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2V0X2Z1bmN0aW9uOworKwkJU1RPUkVfbW9kaWZ5X251bWJlcjsKKysJCVNUT1JFX21ldGhvZF9nZXRfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9wcml2YXRlX2tleTsKKysJCUJOX0dGMm1fbW9kX3Nxcl9hcnI7CisrCQlSU0Ffc2V0dXBfYmxpbmRpbmc7CisrCQlCSU9fc19kYXRhZ3JhbTsKKysJCVNUT1JFX01lbW9yeTsKKysJCXNrX2ZpbmRfZXg7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfR0YybTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9FQ0RTQTsKKysJCVBPTElDWV9DT05TVFJBSU5UU19uZXc7CisrCQlCTl9HRjJtX21vZF9zcXJ0OworKwkJRUNESF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFQ19LRVlfZ2VuZXJhdGVfa2V5OworKwkJU0hBMzg0X1VwZGF0ZTsKKysJCUJOX0dGMm1fYXJyMnBvbHk7CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dldF9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhfc2V0X2NsZWFudXBfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2NsZWFudXBfZnVuY3Rpb247CisrCQlFQ19HUk9VUF9jaGVjazsKKysJCWQyaV9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNfS0VZX2luc2VydF9rZXlfbWV0aG9kX2RhdGE7CisrCQlTVE9SRV9tZXRoX2dldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2RlcHRoOworKwkJU0hBMjI0X0ZpbmFsOworKwkJU1RPUkVfbWV0aF9zZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlTSEEyMjRfVXBkYXRlOworKwkJZDJpX0VDUHJpdmF0ZUtleTsKKysJCUFTTjFfaXRlbV9uZGVmX2kyZDsKKysJCVNUT1JFX2RlbGV0ZV9wcml2YXRlX2tleTsKKysJCUVSUl9wb3BfdG9fbWFyazsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfU1RPUkU7CisrCQlYNTA5X3BvbGljeV9sZXZlbF9nZXQwX25vZGU7CisrCQlpMmRfUEtDUzdfTkRFRjsKKysJCUVDX0dST1VQX2dldF9kZWdyZWU7CisrCQlBU04xX2dlbmVyYXRlX3YzOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9jc3RyOworKwkJWDUwOV9wb2xpY3lfdHJlZV9sZXZlbF9jb3VudDsKKysJCUJOX0dGMm1fYWRkOworKwkJRUNfS0VZX2dldDBfZ3JvdXA7CisrCQlTVE9SRV9nZW5lcmF0ZV9jcmw7CisrCQlTVE9SRV9zdG9yZV9wdWJsaWNfa2V5OworKwkJWDUwOV9DRVJUX1BBSVJfZnJlZTsKKysJCVNUT1JFX3Jldm9rZV9wcml2YXRlX2tleTsKKysJCUJOX25pc3RfbW9kXzIyNDsKKysJCVNIQTUxMl9GaW5hbDsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfZG47CisrCQlTVE9SRV9tZXRoX2dldF9pbml0aWFsaXNlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9pbml0aWFsaXNlX2Z1bmN0aW9uOworKwkJU1RPUkVfZGVsZXRlX251bWJlcjsKKysJCWkyZF9FQ19QVUJLRVlfYmlvOworKwkJQklPX2RncmFtX25vbl9mYXRhbF9lcnJvcjsKKysJCUVDX0dST1VQX2dldF9hc24xX2ZsYWc7CisrCQlTVE9SRV9BVFRSX0lORk9faW5fZXg7CisrCQlTVE9SRV9saXN0X2NybF9zdGFydDsKKysJCUVDREhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNUT1JFX21ldGhfZ2V0X21vZGlmeV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbW9kaWZ5X2Z1bmN0aW9uOworKwkJdjJpX0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX3N0b3JlX2NlcnRpZmljYXRlOworKwkJT0JKX2JzZWFyY2hfZXg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVmYXVsdDsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfc2hhMXN0cjsKKysJCUJOX0dGMm1fbW9kX2ludjsKKysJCUJOX0dGMm1fbW9kX2V4cDsKKysJCVNUT1JFX21vZGlmeV9wdWJsaWNfa2V5OworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9zdGFydF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKKysJCUVDX0dST1VQX2dldDBfc2VlZDsKKysJCVNUT1JFX3N0b3JlX2FyYml0cmFyeTsKKysJCVNUT1JFX21ldGhfc2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJQk5fR0YybV9tb2RfZGl2X2FycjsKKysJCUVOR0lORV9zZXRfRUNEU0E7CisrCQlTVE9SRV9jcmVhdGVfbWV0aG9kOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnQ7CisrCQlFQ19LRVlfZ2V0MF9wcml2YXRlX2tleTsKKysJCVBFTV93cml0ZV9FQ19QVUJLRVk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxOworKwkJRUNESF9zZXRfbWV0aG9kOworKwkJdjJpX0dFTkVSQUxfTkFNRV9leDsKKysJCUVDREhfc2V0X2V4X2RhdGE7CisrCQlTVE9SRV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9uaXN0X21vZF81MjE7CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfbGV2ZWw7CisrCQlFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOworKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZfZm9ybTsKKysJCVBFTV9yZWFkX0VDX1BVQktFWTsKKysJCWkyZF9FQ0RTQV9TSUc7CisrCQlFQ0RTQV9PcGVuU1NMOworKwkJU1RPUkVfZGVsZXRlX2NybDsKKysJCUVDX0tFWV9nZXRfZW5jX2ZsYWdzOworKwkJQVNOMV9jb25zdF9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlFVlBfUEtFWV9kZWxldGVfYXR0cjsKKysJCUVDRFNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGMm07CisrCQlFQ19HUk9VUF9jbXA7CisrCQlTVE9SRV9yZXZva2VfY2VydGlmaWNhdGU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjU2OworKwkJU1RPUkVfbWV0aF9nZXRfZGVsZXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9kZWxldGVfZnVuY3Rpb247CisrCQlTSEEyMjRfSW5pdDsKKysJCVBFTV9yZWFkX0VDUHJpdmF0ZUtleTsKKysJCVNIQTUxMl9Jbml0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfZW5kcDsKKysJCUJOX3NldF9uZWdhdGl2ZTsKKysJCUVSUl9sb2FkX0VDRFNBX3N0cmluZ3M7CisrCQlFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZTsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9uZXh0OworKwkJaTJ2X0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX09CSkVDVF9mcmVlOworKwkJQk5fbmlzdF9tb2RfMzg0OworKwkJaTJkX1g1MDlfQ0VSVF9QQUlSOworKwkJUEVNX3dyaXRlX0VDUEtQYXJhbWV0ZXJzOworKwkJRUNESF9jb21wdXRlX2tleTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX3NoYTFzdHI7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDREg7CisrCQlwcXVldWVfcG9wOworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfY3N0cjsKKysJCVBPTElDWV9DT05TVFJBSU5UU19pdDsKKysJCVNUT1JFX2dldF9leF9uZXdfaW5kZXg7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3BvbGljeTsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWQ7CisrCQlTSEEyNTY7CisrCQlpMmRfRUNQcml2YXRlS2V5X2ZwOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3VzZXJfcG9saWNpZXM7CisrCQlYNTA5X3BjeV90cmVlX2dldDBfdXNyX3BvbGljaWVzOworKwkJT1BFTlNTTF9ESVJfcmVhZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRUNEU0E7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9sb29rdXA7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOworKwkJRUNfR1JPVVBfZHVwOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0VDRFNBOworKwkJRUNfS0VZX25ldzsKKysJCVNIQTI1Nl9UcmFuc2Zvcm07CisrCQlFQ19LRVlfc2V0X2VuY19mbGFnczsKKysJCUVDRFNBX3ZlcmlmeTsKKysJCUVDX1BPSU5UX3BvaW50MmhleDsKKysJCUVOR0lORV9nZXRfU1RPUkU7CisrCQlTSEE1MTI7CisrCQlTVE9SRV9nZXRfY2VydGlmaWNhdGU7CisrCQlFQ0RTQV9kb19zaWduX2V4OworKwkJRUNEU0FfZG9fdmVyaWZ5OworKwkJZDJpX0VDUHJpdmF0ZUtleV9mcDsKKysJCVNUT1JFX2RlbGV0ZV9jZXJ0aWZpY2F0ZTsKKysJCVNIQTUxMl9UcmFuc2Zvcm07CisrCQlYNTA5X1NUT1JFX3NldDFfcGFyYW07CisrCQlTVE9SRV9tZXRob2RfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlTVE9SRV9mcmVlOworKwkJUEVNX3dyaXRlX0VDUHJpdmF0ZUtleTsKKysJCVNUT1JFX21ldGhfZ2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfZ2V0X2V4X2RhdGE7CisrCQlFQ19LRVlfc2V0X3B1YmxpY19rZXk7CisrCQlQRU1fcmVhZF9FQ1BLUGFyYW1ldGVyczsKKysJCVg1MDlfQ0VSVF9QQUlSX25ldzsKKysJCUVOR0lORV9yZWdpc3Rlcl9TVE9SRTsKKysJCVJTQV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leDsKKysJCUVDUGFyYW1ldGVyc19wcmludF9mcDsKKysJCVg1MDlWM19OQU1FX2Zyb21fc2VjdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cjsKKysJCVNUT1JFX21vZGlmeV9jcmw7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X3N0YXJ0OworKwkJUE9MSUNZX01BUFBJTkdTX2l0OworKwkJR0VORVJBTF9TVUJUUkVFX2l0OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWU7CisrCQlQRU1fd3JpdGVfWDUwOV9DRVJUX1BBSVI7CisrCQlCSU9fZHVtcF9pbmRlbnRfY2I7CisrCQlkMmlfWDUwOV9DRVJUX1BBSVI7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X2VuZHA7CisrCQlhc24xX2NvbnN0X0ZpbmlzaDsKKysJCWkyZF9FQ19QVUJLRVlfZnA7CisrCQlCTl9uaXN0X21vZF8yNTY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3RhYmxlOworKwkJcHF1ZXVlX2ZyZWU7CisrCQlCTl9CTElORElOR19jcmVhdGVfcGFyYW07CisrCQlFQ0RTQV9zaXplOworKwkJZDJpX0VDX1BVQktFWV9iaW87CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfNTIxOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9zaGExc3RyOworKwkJQk5fZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZTsKKysJCVNIQTI1Nl9GaW5hbDsKKysJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7CisrCQlQRU1fcmVhZF9iaW9fRUNQcml2YXRlS2V5OworKwkJU1RPUkVfbWV0aF9nZXRfY2xlYW51cF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfY2xlYW51cF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfRUNESDsKKysJCWQyaV9FQ0RTQV9TSUc7CisrCQlCTl9pc19wcmltZV9mYXN0dGVzdF9leDsKKysJCUVDRFNBX3NpZ247CisrCQlYNTA5X3BvbGljeV9jaGVjazsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2J5X05JRDsKKysJCVNUT1JFX3NldF9leF9kYXRhOworKwkJRU5HSU5FX2dldF9FQ0RTQTsKKysJCUVWUF9lY2RzYTsKKysJCUJOX0JMSU5ESU5HX2dldF9mbGFnczsKKysJCVBLQ1MxMl9hZGRfY2VydDsKKysJCVNUT1JFX09CSkVDVF9uZXc7CisrCQlFUlJfbG9hZF9FQ0RIX3N0cmluZ3M7CisrCQlFQ19LRVlfZHVwOworKwkJRVZQX0NJUEhFUl9DVFhfcmFuZF9rZXk7CisrCQlFQ0RTQV9zZXRfbWV0aG9kOworKwkJYTJpX0lQQUREUkVTU19OQzsKKysJCWQyaV9FQ1BhcmFtZXRlcnM7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZDsKKysJCVNUT1JFX2dldF9jcmw7CisrCQlYNTA5X1BPTElDWV9OT0RFX3ByaW50OworKwkJU0hBMzg0X0luaXQ7CisrCQlFQ19HRjJtX3NpbXBsZV9tZXRob2Q7CisrCQlFQ0RTQV9zZXRfZXhfZGF0YTsKKysJCVNIQTM4NF9GaW5hbDsKKysJCVBLQ1M3X3NldF9kaWdlc3Q7CisrCQlFQ19LRVlfcHJpbnQ7CisrCQlTVE9SRV9tZXRoX3NldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJRUNEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVNIQTM4NDsKKysJCVBPTElDWV9NQVBQSU5HX25ldzsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kcDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcG9saWN5X3RyZWU7CisrCQlFQ19HUk9VUF9zZXRfYXNuMV9mbGFnOworKwkJRUNfS0VZX2NoZWNrX2tleTsKKysJCWQyaV9FQ19QVUJLRVlfZnA7CisrCQlQS0NTN19zZXQwX3R5cGVfb3RoZXI7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9DRVJUX1BBSVI7CisrCQlwcXVldWVfbmV4dDsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3RfZW5kX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X2VuZF9mdW5jdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdGltZTsKKysJCXBxdWV1ZV9uZXc7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNESDsKKysJCVNUT1JFX25ld19tZXRob2Q7CisrCQlQS0NTMTJfYWRkX2tleTsKKysJCURTT19tZXJnZTsKKysJCUVDX1BPSU5UX2hleDJwb2ludDsKKysJCUJJT19kdW1wX2NiOworKwkJU0hBMjU2X1VwZGF0ZTsKKysJCXBxdWV1ZV9pbnNlcnQ7CisrCQlwaXRlbV9mcmVlOworKwkJQk5fR0YybV9tb2RfaW52X2FycjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0VDRFNBOworKwkJQk5fQkxJTkRJTkdfc2V0X3RocmVhZF9pZDsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzgxOTI7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFnczsKKysJCWdldF9yZmMyNDA5X3ByaW1lXzEwMjQ7CisrCQlESF9jaGVja19wdWJfa2V5OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMjA0ODsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzYxNDQ7CisrCQlnZXRfcmZjMzUyNl9wcmltZV8xNTM2OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MjsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzQwOTY7CisrCQlnZXRfcmZjMjQwOV9wcmltZV83Njg7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3M7CisrCQlFVlBfQ0lQSEVSX0NUWF9uZXc7CisrCQlFVlBfQ0lQSEVSX0NUWF9mcmVlOworKwkJQ2FtZWxsaWFfY2JjX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2N0cjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQ2FtZWxsaWFfZGVjcnlwdDsKKysJCUNhbWVsbGlhX2VjYl9lbmNyeXB0OworKwkJQ2FtZWxsaWFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX29mYjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfc2V0X2tleTsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2JjOworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2VjYjsKKysJCUVWUF9jYW1lbGxpYV8xMjhfb2ZiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfZWNiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9vZmI7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NiYzsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMjU2X29mYjsKKysJCWEyaV9pcGFkZDsKKysJCUFTSWRlbnRpZmllcnNfZnJlZTsKKysJCWkyZF9BU0lkT3JSYW5nZTsKKysJCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZTsKKysJCXYzX2FzaWRfaXNfY2Fub25pY2FsOworKwkJSVBBZGRyZXNzQ2hvaWNlX2ZyZWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGE7CisrCQlCSU9fc2V0X2NhbGxiYWNrX2FyZzsKKysJCXYzX2FkZHJfYWRkX3ByZWZpeDsKKysJCUlQQWRkcmVzc09yUmFuZ2VfaXQ7CisrCQlCSU9fc2V0X2ZsYWdzOworKwkJQVNJZGVudGlmaWVyc19pdDsKKysJCXYzX2FkZHJfZ2V0X3JhbmdlOworKwkJQklPX21ldGhvZF90eXBlOworKwkJdjNfYWRkcl9pbmhlcml0czsKKysJCUlQQWRkcmVzc0Nob2ljZV9pdDsKKysJCUFFU19pZ2VfZW5jcnlwdDsKKysJCXYzX2FkZHJfYWRkX3JhbmdlOworKwkJRVZQX0NJUEhFUl9DVFhfbmlkOworKwkJZDJpX0FTUmFuZ2U7CisrCQl2M19hZGRyX2FkZF9pbmhlcml0OworKwkJdjNfYXNpZF9hZGRfaWRfb3JfcmFuZ2U7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKKysJCUVWUF9DSVBIRVJfaXZfbGVuZ3RoOworKwkJRVZQX01EX3R5cGU7CisrCQl2M19hc2lkX2Nhbm9uaXplOworKwkJSVBBZGRyZXNzUmFuZ2VfZnJlZTsKKysJCXYzX2FzaWRfYWRkX2luaGVyaXQ7CisrCQlFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoOworKwkJSVBBZGRyZXNzUmFuZ2VfbmV3OworKwkJQVNJZE9yUmFuZ2VfbmV3OworKwkJRVZQX01EX3NpemU7CisrCQlFVlBfTURfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlCSU9fY2xlYXJfZmxhZ3M7CisrCQlpMmRfQVNSYW5nZTsKKysJCUlQQWRkcmVzc1JhbmdlX2l0OworKwkJSVBBZGRyZXNzQ2hvaWNlX25ldzsKKysJCUFTSWRlbnRpZmllckNob2ljZV9uZXc7CisrCQlBU1JhbmdlX2ZyZWU7CisrCQlFVlBfTURfcGtleV90eXBlOworKwkJRVZQX01EX0NUWF9jbGVhcl9mbGFnczsKKysJCUlQQWRkcmVzc0ZhbWlseV9mcmVlOworKwkJaTJkX0lQQWRkcmVzc0ZhbWlseTsKKysJCUlQQWRkcmVzc09yUmFuZ2VfbmV3OworKwkJRVZQX0NJUEhFUl9mbGFnczsKKysJCXYzX2FzaWRfdmFsaWRhdGVfcmVzb3VyY2Vfc2V0OworKwkJZDJpX0lQQWRkcmVzc1JhbmdlOworKwkJQUVTX2JpX2lnZV9lbmNyeXB0OworKwkJQklPX2dldF9jYWxsYmFjazsKKysJCUlQQWRkcmVzc09yUmFuZ2VfZnJlZTsKKysJCXYzX2FkZHJfc3Vic2V0OworKwkJZDJpX0lQQWRkcmVzc0ZhbWlseTsKKysJCXYzX2FzaWRfc3Vic2V0OworKwkJQklPX3Rlc3RfZmxhZ3M7CisrCQlpMmRfQVNJZGVudGlmaWVyQ2hvaWNlOworKwkJQVNSYW5nZV9pdDsKKysJCWQyaV9BU0lkZW50aWZpZXJzOworKwkJQVNSYW5nZV9uZXc7CisrCQlkMmlfSVBBZGRyZXNzQ2hvaWNlOworKwkJdjNfYWRkcl9nZXRfYWZpOworKwkJRVZQX0NJUEhFUl9rZXlfbGVuZ3RoOworKwkJRVZQX0NpcGhlcjsKKysJCWkyZF9JUEFkZHJlc3NPclJhbmdlOworKwkJQVNJZE9yUmFuZ2VfaXQ7CisrCQlFVlBfQ0lQSEVSX25pZDsKKysJCWkyZF9JUEFkZHJlc3NDaG9pY2U7CisrCQlFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplOworKwkJQVNJZGVudGlmaWVyc19uZXc7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3BhdGg7CisrCQlJUEFkZHJlc3NGYW1pbHlfbmV3OworKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3M7CisrCQl2M19hZGRyX2lzX2Nhbm9uaWNhbDsKKysJCWkyZF9JUEFkZHJlc3NSYW5nZTsKKysJCUlQQWRkcmVzc0ZhbWlseV9pdDsKKysJCXYzX2FzaWRfaW5oZXJpdHM7CisrCQlFVlBfQ0lQSEVSX0NUWF9jaXBoZXI7CisrCQlFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGE7CisrCQlFVlBfTURfYmxvY2tfc2l6ZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2ZsYWdzOworKwkJdjNfYXNpZF92YWxpZGF0ZV9wYXRoOworKwkJZDJpX0lQQWRkcmVzc09yUmFuZ2U7CisrCQl2M19hZGRyX2Nhbm9uaXplOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2l0OworKwkJRVZQX01EX0NUWF9tZDsKKysJCWQyaV9BU0lkZW50aWZpZXJDaG9pY2U7CisrCQlCSU9fbWV0aG9kX25hbWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGg7CisrCQlBU0lkT3JSYW5nZV9mcmVlOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2ZyZWU7CisrCQlCSU9fZ2V0X2NhbGxiYWNrX2FyZzsKKysJCUJJT19zZXRfY2FsbGJhY2s7CisrCQlkMmlfQVNJZE9yUmFuZ2U7CisrCQlpMmRfQVNJZGVudGlmaWVyczsKKysJCVNFRURfZGVjcnlwdDsKKysJCVNFRURfZW5jcnlwdDsKKysJCVNFRURfY2JjX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9vZmI7CisrCQlTRUVEX2NmYjEyOF9lbmNyeXB0OworKwkJU0VFRF9vZmIxMjhfZW5jcnlwdDsKKysJCUVWUF9zZWVkX2NiYzsKKysJCVNFRURfZWNiX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9lY2I7CisrCQlTRUVEX3NldF9rZXk7CisrCQlFVlBfc2VlZF9jZmIxMjg7CisrCQlYNTA5X0VYVEVOU0lPTlNfaXQ7CisrCQlYNTA5X2dldDFfb2NzcDsKKysJCU9DU1BfUkVRX0NUWF9mcmVlOworKwkJaTJkX1g1MDlfRVhURU5TSU9OUzsKKysJCU9DU1Bfc2VuZHJlcV9uYmlvOworKwkJT0NTUF9zZW5kcmVxX25ldzsKKysJCWQyaV9YNTA5X0VYVEVOU0lPTlM7CisrCQlYNTA5X0FMR09SU19pdDsKKysJCVg1MDlfQUxHT1JfZ2V0MDsKKysJCVg1MDlfQUxHT1Jfc2V0MDsKKysJCUFFU191bndyYXBfa2V5OworKwkJQUVTX3dyYXBfa2V5OworKwkJWDUwOWF0X2dldDBfZGF0YV9ieV9PQko7CisrCQlBU04xX1RZUEVfc2V0MTsKKysJCUFTTjFfU1RSSU5HX3NldDA7CisrCQlpMmRfWDUwOV9BTEdPUlM7CisrCQlCSU9fZl96bGliOworKwkJQ09NUF96bGliX2NsZWFudXA7CisrCQlkMmlfWDUwOV9BTEdPUlM7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZTsKKysJCVBFTV93cml0ZV9DTVM7CisrCQlDTVNfYWRkMF9DZXJ0aWZpY2F0ZUNob2ljZXM7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X09CSjsKKysJCUVSUl9sb2FkX0NNU19zdHJpbmdzOworKwkJQ01TX3NpZ25fcmVjZWlwdDsKKysJCWkyZF9DTVNfQ29udGVudEluZm87CisrCQlDTVNfc2lnbmVkX2RlbGV0ZV9hdHRyOworKwkJZDJpX0NNU19iaW87CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfTklEOworKwkJQ01TX3ZlcmlmeTsKKysJCVNNSU1FX3JlYWRfQ01TOworKwkJQ01TX2RlY3J5cHRfc2V0MV9rZXk7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX2FsZ3M7CisrCQlDTVNfYWRkMV9jZXJ0OworKwkJQ01TX3NldF9kZXRhY2hlZDsKKysJCUNNU19lbmNyeXB0OworKwkJQ01TX0VudmVsb3BlZERhdGFfY3JlYXRlOworKwkJQ01TX3VuY29tcHJlc3M7CisrCQlDTVNfYWRkMF9jcmw7CisrCQlDTVNfU2lnbmVySW5mb192ZXJpZnlfY29udGVudDsKKysJCUNNU191bnNpZ25lZF9nZXQwX2RhdGFfYnlfT0JKOworKwkJUEVNX3dyaXRlX2Jpb19DTVM7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2NlcnRfY21wOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3M7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9hbGdzOworKwkJQ01TX0NvbnRlbnRJbmZvX2ZyZWU7CisrCQlDTVNfZmluYWw7CisrCQlDTVNfYWRkX3NpbXBsZV9zbWltZWNhcDsKKysJCUNNU19TaWduZXJJbmZvX3ZlcmlmeTsKKysJCUNNU19kYXRhOworKwkJQ01TX0NvbnRlbnRJbmZvX2l0OworKwkJZDJpX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19jb21wcmVzczsKKysJCUNNU19kaWdlc3RfY3JlYXRlOworKwkJQ01TX1NpZ25lckluZm9fY2VydF9jbXA7CisrCQlDTVNfU2lnbmVySW5mb19zaWduOworKwkJQ01TX2RhdGFfY3JlYXRlOworKwkJaTJkX0NNU19iaW87CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9zZXQxX2tleTsKKysJCUNNU19kZWNyeXB0OworKwkJaW50X3NtaW1lX3dyaXRlX0FTTjE7CisrCQlDTVNfdW5zaWduZWRfZGVsZXRlX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfYWRkX3NtaW1lY2FwOworKwkJUEVNX3JlYWRfQ01TOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9PQko7CisrCQlkMmlfQ01TX0NvbnRlbnRJbmZvOworKwkJQ01TX2FkZF9zdGFuZGFyZF9zbWltZWNhcDsKKysJCUNNU19Db250ZW50SW5mb19uZXc7CisrCQlDTVNfUmVjaXBpZW50SW5mb190eXBlOworKwkJQ01TX2dldDBfdHlwZTsKKysJCUNNU19pc19kZXRhY2hlZDsKKysJCUNNU19zaWduOworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOworKwkJU01JTUVfd3JpdGVfQ01TOworKwkJQ01TX0VuY3J5cHRlZERhdGFfZGVjcnlwdDsKKysJCUNNU19nZXQwX1JlY2lwaWVudEluZm9zOworKwkJQ01TX2FkZDBfUmV2b2NhdGlvbkluZm9DaG9pY2U7CisrCQlDTVNfZGVjcnlwdF9zZXQxX3BrZXk7CisrCQlDTVNfU2lnbmVySW5mb19zZXQxX3NpZ25lcl9jZXJ0OworKwkJQ01TX2dldDBfc2lnbmVyczsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9nZXQwX3ZhbHVlczsKKysJCUNNU19zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCUNNU19nZXQwX1NpZ25lckluZm9zOworKwkJQ01TX2FkZDBfY2VydDsKKysJCUNNU19FbmNyeXB0ZWREYXRhX2VuY3J5cHQ7CisrCQlDTVNfZGlnZXN0X3ZlcmlmeTsKKysJCUNNU19zZXQxX3NpZ25lcnNfY2VydHM7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyOworKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9rZXk7CisrCQlDTVNfU2lnbmVkRGF0YV9pbml0OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfZ2V0MF9pZDsKKysJCUNNU192ZXJpZnlfcmVjZWlwdDsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9pdDsKKysJCVBFTV9yZWFkX2Jpb19DTVM7CisrCQlDTVNfZ2V0MV9jcmxzOworKwkJQ01TX2FkZDBfcmVjaXBpZW50X2tleTsKKysJCVNNSU1FX3JlYWRfQVNOMTsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9uZXc7CisrCQlDTVNfZ2V0MF9jb250ZW50OworKwkJQ01TX2dldDFfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rZWtyaV9pZF9jbXA7CisrCQlDTVNfYWRkMV9SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmVyX2lkOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlDTVNfZ2V0MV9jZXJ0czsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X05JRDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX2RhdGFGaW5hbDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9zaWduZXJfaWQ7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9zaWdyX2lkOworKwkJaTJkX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19hZGQxX3JlY2lwaWVudF9jZXJ0OworKwkJQ01TX2RhdGFJbml0OworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX1JlY2lwaWVudEluZm9fZGVjcnlwdDsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfZ2V0MF9lQ29udGVudFR5cGU7CisrCQlDTVNfc2V0MV9lQ29udGVudFR5cGU7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfY3JlYXRlMDsKKysJCUNNU19hZGQxX3NpZ25lcjsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGtleTsKKysJCUVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm47CisrCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2ZuOworKwkJRU5HSU5FX2xvYWRfc3NsX2NsaWVudF9jZXJ0OworKwkJRU5HSU5FX2xvYWRfY2FwaTsKKysJCU9QRU5TU0xfaXNzZXJ2aWNlOworKwkJRklQU19kc2Ffc2lnX2RlY29kZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzOworKwkJRklQU19yYW5kX3N0YXR1czsKKysJCUZJUFNfcmFuZF9zZXRfa2V5OworKwkJQ1JZUFRPX3NldF9tZW1faW5mb19mdW5jdGlvbnM7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlpbnRfRVJSX3NldF9zdGF0ZV9mdW5jOworKwkJaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2FsbGJhY2s7CisrCQlGSVBTX3JuZ19zdGljazsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFnczsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlGSVBTX3NlbGZ0ZXN0X2NoZWNrOworKwkJRklQU19yYW5kX3NldF9kdDsKKysJCUNSWVBUT19kYmdfcG9wX2luZm87CisrCQlGSVBTX2RzYV9mcmVlOworKwkJUlNBX1g5MzFfZGVyaXZlX2V4OworKwkJRklQU19yc2FfbmV3OworKwkJRklQU19yYW5kX2J5dGVzOworKwkJZmlwc19jaXBoZXJfdGVzdDsKKysJCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQ7CisrCQlDUllQVE9fZGJnX3B1c2hfaW5mbzsKKysJCUZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuOworKwkJRklQU19kaF9uZXc7CisrCQlGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbjsKKysJCUZJUFNfZGhfZnJlZTsKKysJCWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdDsKKysJCUVWUF9hZGRfYWxnX21vZHVsZTsKKysJCWludF9SQU5EX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzOworKwkJaW50X0VWUF9NRF9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlGSVBTX3JhbmRfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX3Jlc2V0OworKwkJRklQU19kc2FfbmV3OworKwkJaW50X1JBTkRfc2V0X2NhbGxiYWNrczsKKysJCUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4OworKwkJaW50X0VSUl9saWJfaW5pdDsKKysJCWludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCUZJUFNfcnNhX2ZyZWU7CisrCQlGSVBTX2RzYV9zaWdfZW5jb2RlOworKwkJQ1JZUFRPX2RiZ19yZW1vdmVfYWxsX2luZm87CisrCQlPUEVOU1NMX2luaXQ7CisrCQlDUllQVE9fc3RyZHVwOworKwkJSlBBS0VfU1RFUDNBX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQMV9yZWxlYXNlOworKwkJSlBBS0VfZ2V0X3NoYXJlZF9rZXk7CisrCQlKUEFLRV9TVEVQM0JfaW5pdDsKKysJCUpQQUtFX1NURVAxX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDFfaW5pdDsKKysJCUpQQUtFX1NURVAzQl9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDJfZ2VuZXJhdGU7CisrCQlKUEFLRV9DVFhfbmV3OworKwkJSlBBS0VfQ1RYX2ZyZWU7CisrCQlKUEFLRV9TVEVQM0JfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAzQV9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDJfcHJvY2VzczsKKysJCUpQQUtFX1NURVAzQl9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAxX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQM0FfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMl9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDNBX2luaXQ7CisrCQlFUlJfbG9hZF9KUEFLRV9zdHJpbmdzOworKwkJSlBBS0VfU1RFUDJfaW5pdDsKKysJCXBxdWV1ZV9zaXplOworKwkJaTJkX1RTX0FDQ1VSQUNZOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfcHJpbnRfcHVibGljOworKwkJRVZQX1BLRVlfQ1RYX25ldzsKKysJCWkyZF9UU19UU1RfSU5GTzsKKysJCUVWUF9QS0VZX2FzbjFfZmluZDsKKysJCURTT19NRVRIT0RfYmVvczsKKysJCVRTX0NPTkZfbG9hZF9jZXJ0OworKwkJVFNfUkVRX2dldF9leHQ7CisrCQlFVlBfUEtFWV9zaWduX2luaXQ7CisrCQlBU04xX2l0ZW1fcHJpbnQ7CisrCQlUU19UU1RfSU5GT19zZXRfbm9uY2U7CisrCQlUU19SRVNQX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9wa2V5X21ldGhzOworKwkJRVZQX1BLRVlfYXNuMV9hZGQwOworKwkJUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lOworKwkJaTJkX1RTX1RTVF9JTkZPX2ZwOworKwkJQklPX2FzbjFfZ2V0X3ByZWZpeDsKKysJCVRTX1RTVF9JTkZPX3NldF90aW1lOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfZGVjcnlwdDsKKysJCUVWUF9QS0VZX3NldF90eXBlX3N0cjsKKysJCUVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm87CisrCQlUU19SRVFfc2V0X3BvbGljeV9pZDsKKysJCWQyaV9UU19SRVNQX2ZwOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmdpbmU7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZzsKKysJCVdISVJMUE9PTF9Jbml0OworKwkJVFNfUkVTUF9zZXRfc3RhdHVzX2luZm87CisrCQlFVlBfUEtFWV9rZXlnZW47CisrCQlFVlBfRGlnZXN0U2lnbkluaXQ7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWlsbGlzOworKwkJVFNfUkVRX2R1cDsKKysJCUdFTkVSQUxfTkFNRV9kdXA7CisrCQlBU04xX1NFUVVFTkNFX0FOWV9pdDsKKysJCVdISVJMUE9PTDsKKysJCVg1MDlfU1RPUkVfZ2V0MV9jcmxzOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aDsKKysJCUVWUF9QS0VZX2FzbjFfbmV3OworKwkJQklPX25ld19OREVGOworKwkJRU5HSU5FX2dldF9wa2V5X21ldGg7CisrCQlUU19NU0dfSU1QUklOVF9zZXRfYWxnbzsKKysJCWkyZF9UU19UU1RfSU5GT19iaW87CisrCQlUU19UU1RfSU5GT19zZXRfb3JkZXJpbmc7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X09CSjsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfcG9pbnRlcjsKKysJCVRTX0NPTkZfZ2V0X3RzYV9zZWN0aW9uOworKwkJU01JTUVfd3JpdGVfQVNOMTsKKysJCVRTX1JFU1BfQ1RYX3NldF9zaWduZXJfa2V5OworKwkJRVZQX1BLRVlfZW5jcnlwdF9vbGQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0X2luaXQ7CisrCQlDUllQVE9fVEhSRUFESURfY3B5OworKwkJQVNOMV9QQ1RYX2dldF9jZXJ0X2ZsYWdzOworKwkJaTJkX0VTU19TSUdOSU5HX0NFUlQ7CisrCQlUU19DT05GX2xvYWRfa2V5OworKwkJaTJkX0FTTjFfU0VRVUVOQ0VfQU5ZOworKwkJZDJpX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X3B1YmxpYzsKKysJCWIyaV9QdWJsaWNLZXlfYmlvOworKwkJQklPX2FzbjFfc2V0X3ByZWZpeDsKKysJCUVWUF9QS0VZX25ld19tYWNfa2V5OworKwkJQklPX25ld19DTVM7CisrCQlDUllQVE9fVEhSRUFESURfY21wOworKwkJVFNfUkVRX2V4dF9mcmVlOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfZnJlZTsKKysJCUVWUF9QS0VZX2dldDBfYXNuMTsKKysJCWQyaV9ORVRTQ0FQRV9YNTA5OworKwkJRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5pdDsKKysJCUVWUF9QS0VZX0NUWF9zZXRfZGF0YTsKKysJCUVWUF9QS0VZX2tleWdlbl9pbml0OworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X2FsZ287CisrCQlUU19SRVFfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfQ1RYX2N0cmxfc3RyOworKwkJRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtOworKwkJVFNfTVNHX0lNUFJJTlRfcHJpbnRfYmlvOworKwkJQk5fYXNjMmJuOworKwkJVFNfUkVRX2dldF9wb2xpY3lfaWQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3NldF9kZWZfcGtleV9hc24xX21ldGhzOworKwkJZDJpX1RTX0FDQ1VSQUNZOworKwkJRFNPX2dsb2JhbF9sb29rdXA7CisrCQlUU19DT05GX3NldF90c2FfbmFtZTsKKysJCWkyZF9BU04xX1NFVF9BTlk7CisrCQlFTkdJTkVfbG9hZF9nb3N0OworKwkJV0hJUkxQT09MX0JpdFVwZGF0ZTsKKysJCUFTTjFfUENUWF9nZXRfZmxhZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X05JRDsKKysJCVRTX1JFU1BfbmV3OworKwkJRVNTX0NFUlRfSURfZHVwOworKwkJVFNfU1RBVFVTX0lORk9fZHVwOworKwkJVFNfUkVRX2RlbGV0ZV9leHQ7CisrCQlFVlBfRGlnZXN0VmVyaWZ5RmluYWw7CisrCQlFVlBfUEtFWV9wcmludF9wYXJhbXM7CisrCQlpMmRfQ01TX2Jpb19zdHJlYW07CisrCQlUU19SRVFfZ2V0X21zZ19pbXByaW50OworKwkJT0JKX2ZpbmRfc2lnaWRfYnlfYWxnczsKKysJCVRTX1RTVF9JTkZPX2dldF9zZXJpYWw7CisrCQlUU19SRVFfZ2V0X25vbmNlOworKwkJWDUwOV9QVUJLRVlfc2V0MF9wYXJhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXQwX2tleWdlbl9pbmZvOworKwkJRElTVF9QT0lOVF9zZXRfZHBuYW1lOworKwkJaTJkX0lTU1VJTkdfRElTVF9QT0lOVDsKKysJCUFTTjFfU0VUX0FOWV9pdDsKKysJCUVWUF9QS0VZX0NUWF9nZXRfZGF0YTsKKysJCVRTX1NUQVRVU19JTkZPX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX2Rlcml2ZV9pbml0OworKwkJZDJpX1RTX1RTVF9JTkZPOworKwkJRVZQX1BLRVlfYXNuMV9hZGRfYWxpYXM7CisrCQlkMmlfVFNfUkVTUF9iaW87CisrCQlPVEhFUk5BTUVfY21wOworKwkJR0VORVJBTF9OQU1FX3NldDBfdmFsdWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnOworKwkJVFNfUkVTUF9DVFhfbmV3OworKwkJVFNfUkVTUF9zZXRfdHN0X2luZm87CisrCQlQS0NTN19maW5hbDsKKysJCUVWUF9QS0VZX2Jhc2VfaWQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2NlcnQ7CisrCQlUU19SRVFfc2V0X21zZ19pbXByaW50OworKwkJRVZQX1BLRVlfQ1RYX2N0cmw7CisrCQlUU19DT05GX3NldF9kaWdlc3RzOworKwkJZDJpX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY3RybDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X05JRDsKKysJCVBLQ1M1X3BiZV9zZXQwX2FsZ29yOworKwkJQk5fQkxJTkRJTkdfdGhyZWFkX2lkOworKwkJVFNfQUNDVVJBQ1lfbmV3OworKwkJWDUwOV9DUkxfTUVUSE9EX2ZyZWU7CisrCQlBU04xX1BDVFhfZ2V0X25tX2ZsYWdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfc2lnbjsKKysJCUNSWVBUT19USFJFQURJRF9jdXJyZW50OworKwkJRVZQX1BLRVlfZGVjcnlwdF9pbml0OworKwkJTkVUU0NBUEVfWDUwOV9mcmVlOworKwkJaTJiX1BWS19iaW87CisrCQlFVlBfUEtFWV9wcmludF9wcml2YXRlOworKwkJR0VORVJBTF9OQU1FX2dldDBfdmFsdWU7CisrCQliMmlfUFZLX2JpbzsKKysJCUFTTjFfVVRDVElNRV9hZGo7CisrCQlUU19UU1RfSU5GT19uZXc7CisrCQlFVlBfTURfZG9fYWxsX3NvcnRlZDsKKysJCVRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lOworKwkJVFNfQUNDVVJBQ1lfc2V0X3NlY29uZHM7CisrCQlUU19UU1RfSU5GT19nZXRfdGltZTsKKysJCVBLQ1M4X3BrZXlfZ2V0MDsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MDsKKysJCU9CSl9hZGRfc2lnaWQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19zaWduOworKwkJRVZQX1BLRVlfcGFyYW1nZW5faW5pdDsKKysJCUVWUF9QS0VZX3NpZ247CisrCQlPQkpfc2lnaWRfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2luaXQ7CisrCQlkMmlfRVNTX0lTU1VFUl9TRVJJQUw7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfbmV3OworKwkJQVNOMV9USU1FX2FkajsKKysJCVRTX09CSl9wcmludF9iaW87CisrCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcjsKKysJCVRTX1JFU1BfZ2V0X3N0YXR1c19pbmZvOworKwkJQ01TX3N0cmVhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXRfY2I7CisrCQlQS0NTN190b19UU19UU1RfSU5GTzsKKysJCUFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzOworKwkJVFNfVFNUX0lORk9fYWRkX2V4dDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2Rlcml2ZTsKKysJCWkyZF9UU19SRVNQX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCVRTX1JFU1BfQ1RYX3NldF9hY2N1cmFjeTsKKysJCVRTX1JFUV9zZXRfbm9uY2U7CisrCQlFU1NfQ0VSVF9JRF9uZXc7CisrCQlFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyOworKwkJVFNfUkVRX2dldF9leHRfY291bnQ7CisrCQlCVUZfcmV2ZXJzZTsKKysJCVRTX1RTVF9JTkZPX3ByaW50X2JpbzsKKysJCWQyaV9JU1NVSU5HX0RJU1RfUE9JTlQ7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aHM7CisrCQlpMmJfUHJpdmF0ZUtleV9iaW87CisrCQlpMmRfVFNfUkVTUDsKKysJCWIyaV9QdWJsaWNLZXk7CisrCQlUU19WRVJJRllfQ1RYX2NsZWFudXA7CisrCQlUU19TVEFUVVNfSU5GT19mcmVlOworKwkJVFNfUkVTUF92ZXJpZnlfdG9rZW47CisrCQlPQkpfYnNlYXJjaF9leF87CisrCQlBU04xX2JuX3ByaW50OworKwkJRVZQX1BLRVlfYXNuMV9nZXRfY291bnQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJQVNOMV9QQ1RYX3NldF9ubV9mbGFnczsKKysJCUVWUF9EaWdlc3RWZXJpZnlJbml0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfbWV0aHM7CisrCQlUU19UU1RfSU5GT19nZXRfcG9saWN5X2lkOworKwkJVFNfUkVRX2dldF9jZXJ0X3JlcTsKKysJCVg1MDlfQ1JMX3NldF9tZXRoX2RhdGE7CisrCQlQS0NTOF9wa2V5X3NldDA7CisrCQlBU04xX1NUUklOR19jb3B5OworKwkJZDJpX1RTX1RTVF9JTkZPX2ZwOworKwkJWDUwOV9DUkxfbWF0Y2g7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wcml2YXRlOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9kMmk7CisrCQlUU19SRVNQX0NUWF9hZGRfcG9saWN5OworKwkJZDJpX1RTX1JFU1A7CisrCQlUU19DT05GX2xvYWRfY2VydHM7CisrCQlUU19UU1RfSU5GT19nZXRfbXNnX2ltcHJpbnQ7CisrCQlFUlJfbG9hZF9UU19zdHJpbmdzOworKwkJVFNfVFNUX0lORk9fZ2V0X3ZlcnNpb247CisrCQlFVlBfUEtFWV9DVFhfZHVwOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5OworKwkJaTJiX1B1YmxpY0tleV9iaW87CisrCQlUU19DT05GX3NldF9jZXJ0czsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvOworKwkJVFNfVkVSSUZZX0NUWF9mcmVlOworKwkJVFNfUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlUU19SRVNQX0NUWF9zZXRfc2VyaWFsX2NiOworKwkJWDUwOV9DUkxfZ2V0X21ldGhfZGF0YTsKKysJCVRTX1JFU1BfQ1RYX3NldF90aW1lX2NiOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X21zZzsKKysJCVRTX1RTVF9JTkZPX2V4dF9mcmVlOworKwkJVFNfUkVRX2dldF92ZXJzaW9uOworKwkJVFNfUkVRX2FkZF9leHQ7CisrCQlFVlBfUEtFWV9DVFhfc2V0X2FwcF9kYXRhOworKwkJT0JKX2JzZWFyY2hfOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5Y3R4OworKwkJaTJkX1BLQ1M3X2Jpb19zdHJlYW07CisrCQlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWM7CisrCQlQS0NTN19zaWduX2FkZF9zaWduZXI7CisrCQlkMmlfVFNfVFNUX0lORk9fYmlvOworKwkJVFNfVFNUX0lORk9fZ2V0X29yZGVyaW5nOworKwkJVFNfUkVTUF9wcmludF9iaW87CisrCQlUU19UU1RfSU5GT19nZXRfZXh0czsKKysJCUhNQUNfQ1RYX2NvcHk7CisrCQlQS0NTNV9wYmUyX3NldF9pdjsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhzOworKwkJYjJpX1ByaXZhdGVLZXk7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhOworKwkJVFNfUkVRX3NldF9jZXJ0X3JlcTsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2s7CisrCQlUU19DT05GX3NldF9zZXJpYWw7CisrCQlUU19UU1RfSU5GT19mcmVlOworKwkJZDJpX1RTX1JFUV9mcDsKKysJCVRTX1JFU1BfdmVyaWZ5X3Jlc3BvbnNlOworKwkJaTJkX0VTU19JU1NVRVJfU0VSSUFMOworKwkJVFNfQUNDVVJBQ1lfZ2V0X3NlY29uZHM7CisrCQlFVlBfQ0lQSEVSX2RvX2FsbDsKKysJCWIyaV9Qcml2YXRlS2V5X2JpbzsKKysJCU9DU1BfQ0VSVElEX2R1cDsKKysJCVg1MDlfUFVCS0VZX2dldDBfcGFyYW07CisrCQlUU19NU0dfSU1QUklOVF9kdXA7CisrCQlQS0NTN19wcmludF9jdHg7CisrCQlpMmRfVFNfUkVRX2JpbzsKKysJCUVWUF93aGlybHBvb2w7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wYXJhbTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2VuY3J5cHQ7CisrCQlBU04xX1BDVFhfc2V0X2ZsYWdzOworKwkJaTJkX0VTU19DRVJUX0lEOworKwkJVFNfVkVSSUZZX0NUWF9uZXc7CisrCQlUU19SRVNQX0NUWF9zZXRfZXh0ZW5zaW9uX2NiOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X21ldGhzOworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc3RhdF9pbmZvX2NvbmQ7CisrCQlFVlBfUEtFWV92ZXJpZnk7CisrCQlXSElSTFBPT0xfRmluYWw7CisrCQlYNTA5X0NSTF9NRVRIT0RfbmV3OworKwkJRVZQX0RpZ2VzdFNpZ25GaW5hbDsKKysJCVRTX1JFU1BfQ1RYX3NldF9kZWZfcG9saWN5OworKwkJTkVUU0NBUEVfWDUwOV9pdDsKKysJCVRTX1JFU1BfY3JlYXRlX3Jlc3BvbnNlOworKwkJUEtDUzdfU0lHTkVSX0lORk9fZ2V0MF9hbGdzOworKwkJVFNfVFNUX0lORk9fZ2V0X25vbmNlOworKwkJRVZQX1BLRVlfZGVjcnlwdF9vbGQ7CisrCQlUU19UU1RfSU5GT19zZXRfcG9saWN5X2lkOworKwkJVFNfQ09ORl9zZXRfZXNzX2NlcnRfaWRfY2hhaW47CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5OworKwkJZDJpX1RTX1JFUTsKKysJCUVWUF9QS0VZX2FzbjFfZmluZF9zdHI7CisrCQlCSU9fZl9hc24xOworKwkJRVNTX1NJR05JTkdfQ0VSVF9uZXc7CisrCQlFVlBfUEJFX2ZpbmQ7CisrCQlYNTA5X0NSTF9nZXQwX2J5X2NlcnQ7CisrCQlFVlBfUEtFWV9kZXJpdmU7CisrCQlpMmRfVFNfUkVROworKwkJVFNfVFNUX0lORk9fZGVsZXRlX2V4dDsKKysJCUVTU19JU1NVRVJfU0VSSUFMX2ZyZWU7CisrCQlBU04xX1BDVFhfc2V0X3N0cl9mbGFnczsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfc3RyOworKwkJVFNfQ09ORl9zZXRfc2lnbmVyX2tleTsKKysJCVRTX0FDQ1VSQUNZX2dldF9taWxsaXM7CisrCQlUU19SRVNQX2dldF90b2tlbjsKKysJCVRTX0FDQ1VSQUNZX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3JlZ19hbGxfcGtleV9hc24xX21ldGhzOworKwkJWDUwOV9DUkxfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQ1JZUFRPX1RIUkVBRElEX2hhc2g7CisrCQlDTVNfQ29udGVudEluZm9fcHJpbnRfY3R4OworKwkJVFNfUkVTUF9mcmVlOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX2ZyZWU7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9uZXc7CisrCQlDTVNfYWRkMV9jcmw7CisrCQlQS0NTN19hZGQxX2F0dHJpYl9kaWdlc3Q7CisrCQlUU19SRVNQX0NUWF9hZGRfbWQ7CisrCQlUU19UU1RfSU5GT19kdXA7CisrCQlFTkdJTkVfc2V0X3BrZXlfYXNuMV9tZXRoczsKKysJCVBFTV93cml0ZV9iaW9fUGFyYW1ldGVyczsKKysJCVRTX1RTVF9JTkZPX2dldF9hY2N1cmFjeTsKKysJCVg1MDlfQ1JMX2dldDBfYnlfc2VyaWFsOworKwkJVFNfVFNUX0lORk9fc2V0X3ZlcnNpb247CisrCQlUU19SRVNQX0NUWF9nZXRfdHN0X2luZm87CisrCQlUU19SRVNQX3ZlcmlmeV9zaWduYXR1cmU7CisrCQlDUllQVE9fVEhSRUFESURfZ2V0X2NhbGxiYWNrOworKwkJVFNfVFNUX0lORk9fZ2V0X3RzYTsKKysJCVRTX1NUQVRVU19JTkZPX25ldzsKKysJCUVWUF9QS0VZX0NUWF9nZXRfY2I7CisrCQlUU19SRVFfZ2V0X2V4dF9kMmk7CisrCQlHRU5FUkFMX05BTUVfc2V0MF9vdGhlcm5hbWU7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2NvdW50OworKwkJVFNfUkVTUF9DVFhfZ2V0X3JlcXVlc3Q7CisrCQlpMmRfTkVUU0NBUEVfWDUwOTsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoX2VuZ2luZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ25jdHg7CisrCQlFVlBfUEtFWV9hc24xX2NvcHk7CisrCQlBU04xX1RZUEVfY21wOworKwkJRVZQX0NJUEhFUl9kb19hbGxfc29ydGVkOworKwkJRVZQX1BLRVlfQ1RYX2ZyZWU7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfaXQ7CisrCQlkMmlfVFNfTVNHX0lNUFJJTlRfZnA7CisrCQlYNTA5X1NUT1JFX2dldDFfY2VydHM7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbjsKKysJCWQyaV9FU1NfU0lHTklOR19DRVJUOworKwkJVFNfQ09ORl9zZXRfb3JkZXJpbmc7CisrCQlFVlBfUEJFX2FsZ19hZGRfdHlwZTsKKysJCVRTX1JFUV9zZXRfdmVyc2lvbjsKKysJCUVWUF9QS0VZX2dldDA7CisrCQlCSU9fYXNuMV9zZXRfc3VmZml4OworKwkJaTJkX1RTX1NUQVRVU19JTkZPOworKwkJRVZQX01EX2RvX2FsbDsKKysJCVRTX1RTVF9JTkZPX3NldF9hY2N1cmFjeTsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlOworKwkJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGU7CisrCQlFVlBfUEtFWV9tZXRoX2FkZDA7CisrCQlUU19UU1RfSU5GT19zZXRfdHNhOworKwkJRVZQX1BLRVlfbWV0aF9uZXc7CisrCQlXSElSTFBPT0xfVXBkYXRlOworKwkJVFNfQ09ORl9zZXRfYWNjdXJhY3k7CisrCQlBU04xX1BDVFhfc2V0X29pZF9mbGFnczsKKysJCUVTU19TSUdOSU5HX0NFUlRfZHVwOworKwkJZDJpX1RTX1JFUV9iaW87CisrCQlYNTA5X3RpbWVfYWRqX2V4OworKwkJVFNfUkVTUF9DVFhfYWRkX2ZsYWdzOworKwkJZDJpX1RTX1NUQVRVU19JTkZPOworKwkJVFNfTVNHX0lNUFJJTlRfc2V0X21zZzsKKysJCUJJT19hc24xX2dldF9zdWZmaXg7CisrCQlUU19SRVFfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfZnJlZTsKKysJCVRTX1JFUV9nZXRfZXh0czsKKysJCVRTX1JFU1BfQ1RYX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOworKwkJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0czsKKysJCVRTX1JFU1BfQ1RYX2FkZF9mYWlsdXJlX2luZm87CisrCQlpMmRfVFNfUkVTUF9iaW87CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wZWVya2V5OworKwkJUEVNX3dyaXRlX2Jpb19DTVNfc3RyZWFtOworKwkJVFNfUkVRX25ldzsKKysJCVRTX01TR19JTVBSSU5UX25ldzsKKysJCUVWUF9QS0VZX21ldGhfZmluZDsKKysJCUVWUF9QS0VZX2lkOworKwkJVFNfVFNUX0lORk9fc2V0X3NlcmlhbDsKKysJCWEyaV9HRU5FUkFMX05BTUU7CisrCQlUU19DT05GX3NldF9jcnlwdG9fZGV2aWNlOworKwkJRVZQX1BLRVlfdmVyaWZ5X2luaXQ7CisrCQlUU19DT05GX3NldF9wb2xpY2llczsKKysJCUFTTjFfUENUWF9uZXc7CisrCQlFU1NfQ0VSVF9JRF9mcmVlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9tZXRoczsKKysJCVRTX01TR19JTVBSSU5UX2ZyZWU7CisrCQlUU19WRVJJRllfQ1RYX2luaXQ7CisrCQlQS0NTN19zdHJlYW07CisrCQlUU19SRVNQX0NUWF9zZXRfY2VydHM7CisrCQlUU19DT05GX3NldF9kZWZfcG9saWN5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqOworKwkJTkVUU0NBUEVfWDUwOV9uZXc7CisrCQlUU19BQ0NVUkFDWV9mcmVlOworKwkJVFNfUkVTUF9nZXRfdHN0X2luZm87CisrCQlFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXI7CisrCQlQRU1fcmVhZF9iaW9fUGFyYW1ldGVyczsKKysJCVRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHM7CisrCQlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHM7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9kdXA7CisrCQlUU19BQ0NVUkFDWV9nZXRfbWljcm9zOworKwkJQVNOMV9QQ1RYX2dldF9zdHJfZmxhZ3M7CisrCQlOQU1FX0NPTlNUUkFJTlRTX2NoZWNrOworKwkJQVNOMV9CSVRfU1RSSU5HX2NoZWNrOworKwkJWDUwOV9jaGVja19ha2lkOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRoczsKKysJCUFTTjFfUENUWF9mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbTsKKysJCWkyZF9BU04xX2Jpb19zdHJlYW07CisrCQlUU19YNTA5X0FMR09SX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2NsZWFudXA7CisrCQlFVlBfUEtFWV9hc24xX2ZyZWU7CisrCQlFU1NfU0lHTklOR19DRVJUX2ZyZWU7CisrCQlUU19UU1RfSU5GT19zZXRfbXNnX2ltcHJpbnQ7CisrCQlHRU5FUkFMX05BTUVfY21wOworKwkJZDJpX0FTTjFfU0VUX0FOWTsKKysJCUVOR0lORV9zZXRfcGtleV9tZXRoczsKKysJCWkyZF9UU19SRVFfZnA7CisrCQlkMmlfQVNOMV9TRVFVRU5DRV9BTlk7CisrCQlHRU5FUkFMX05BTUVfZ2V0MF9vdGhlck5hbWU7CisrCQlkMmlfRVNTX0NFUlRfSUQ7CisrCQlPQkpfZmluZF9zaWdpZF9hbGdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfa2V5Z2VuOworKwkJUEtDUzVfUEJLREYyX0hNQUM7CisrCQlFVlBfUEtFWV9wYXJhbWdlbjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3BhcmFtZ2VuOworKwkJQklPX25ld19QS0NTNzsKKysJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyOworKwkJVFNfZXh0X3ByaW50X2JpbzsKKysJCVRTX0FTTjFfSU5URUdFUl9wcmludF9iaW87CisrCQljaGVja19kZWZlcjsKKysJCURTT19wYXRoYnlhZGRyOworKwkJRVZQX1BLRVlfc2V0X3R5cGU7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWljcm9zOworKwkJVFNfUkVRX3RvX1RTX1ZFUklGWV9DVFg7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jb3B5OworKwkJQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dDsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X2N0cmw7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJRVZQX1BLRVlfQ1RYX25ld19pZDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X09CSjsKKysJCVRTX0NPTkZfc2V0X3NpZ25lcl9jZXJ0OworKwkJWDUwOV9OQU1FX2hhc2hfb2xkOworKwkJQVNOMV9USU1FX3NldF9zdHJpbmc7CisrCQlFVlBfTURfZmxhZ3M7CisrCQlUU19SRVNQX0NUWF9mcmVlOworKwkJRFNBcGFyYW1zX2R1cDsKKysJCURIcGFyYW1zX2R1cDsKKysJCU9DU1BfUkVRX0NUWF9hZGQxX2hlYWRlcjsKKysJCU9DU1BfUkVRX0NUWF9zZXQxX3JlcTsKKysJCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9jcmw7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfaXNzdWVyOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJfaXNzdWVyOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZDsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkOworKwkJRVZQX0NJUEhFUl9DVFhfY29weTsKKysJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCUVWUF9yZWFkX3B3X3N0cmluZ19taW47CisrCQlDUllQVE9fY3RzMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdDsKKysJCUNSWVBUT19jYmMxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19vZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19jYmMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfOF9lbmNyeXB0OworKworKwlsb2NhbDoKKysJCSo7CisrfTsKKysKKysKKytPUEVOU1NMXzEuMC4xIHsKKysJZ2xvYmFsOgorKwkJU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkOworKwkJVExTdjFfMV9tZXRob2Q7CisrCQlUTFN2MV8xX2NsaWVudF9tZXRob2Q7CisrCQlUTFN2MV8xX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NiOworKwkJU1NMX2dldF9zcnBfZzsKKysJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF91bl9jYjsKKysJCVNTTF9nZXRfc3JwX3VzZXJpbmZvOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3OworKwkJU1NMX2dldF9zcnBfTjsKKysJCVNTTF9nZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkOworKwkJU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoOworKwkJU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF92ZnlfcGFyYW1fY2I7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2JfYXJnOworKwkJU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9TUlBfQ1RYX2luaXQ7CisrCQlTU0xfU1JQX0NUWF9pbml0OworKwkJU1JQX0NhbGNfQV9wYXJhbTsKKysJCVNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fc2VydmVyX21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfQ1RYX1NSUF9DVFhfZnJlZTsKKysJCVNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fY2xpZW50X21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lOworKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91bjsKKysJCVNTTF9TUlBfQ1RYX2ZyZWU7CisrCQlTU0xfc2V0X2RlYnVnOworKwkJU1NMX1NFU1NJT05fZ2V0MF9wZWVyOworKwkJVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJU1NMX1NFU1NJT05fc2V0MV9pZF9jb250ZXh0OworKwkJVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX2NhY2hlX2hpdDsKKysJCVNTTF9nZXQwX2tzc2xfY3R4OworKwkJU1NMX3NldDBfa3NzbF9jdHg7CisrCQlTU0xfc2V0X3N0YXRlOworKwkJU1NMX0NJUEhFUl9nZXRfaWQ7CisrCQlUTFN2MV8yX21ldGhvZDsKKysJCWtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jOworKwkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWw7CisrCQlTU0xfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2I7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2I7CisrCQlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQ7CisrCQlTU0xfZ2V0X3NlbGVjdGVkX3NydHBfcHJvZmlsZTsKKysJCVNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9zZWxlY3RfbmV4dF9wcm90bzsKKysJCVNTTF9nZXRfc3J0cF9wcm9maWxlczsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxfY2I7CisrCQlTU0xfU0VTU0lPTl9nZXRfY29tcHJlc3NfaWQ7CisrCisrCQlTUlBfVkJBU0VfZ2V0X2J5X3VzZXI7CisrCQlTUlBfQ2FsY19zZXJ2ZXJfa2V5OworKwkJU1JQX2NyZWF0ZV92ZXJpZmllcjsKKysJCVNSUF9jcmVhdGVfdmVyaWZpZXJfQk47CisrCQlTUlBfQ2FsY191OworKwkJU1JQX1ZCQVNFX2ZyZWU7CisrCQlTUlBfQ2FsY19jbGllbnRfa2V5OworKwkJU1JQX2dldF9kZWZhdWx0X2dOOworKwkJU1JQX0NhbGNfeDsKKysJCVNSUF9DYWxjX0I7CisrCQlTUlBfVkJBU0VfbmV3OworKwkJU1JQX2NoZWNrX2tub3duX2dOX3BhcmFtOworKwkJU1JQX0NhbGNfQTsKKysJCVNSUF9WZXJpZnlfQV9tb2RfTjsKKysJCVNSUF9WQkFTRV9pbml0OworKwkJU1JQX1ZlcmlmeV9CX21vZF9OOworKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlczsKKysJCUVDX0tFWV9zZXRfcHViX2tleV9hZmZfY29vcmRzOworKwkJRVZQX2Flc18xOTJfY3RyOworKwkJRVZQX1BLRVlfbWV0aF9nZXQwX2luZm87CisrCQlFVlBfUEtFWV9tZXRoX2NvcHk7CisrCQlFUlJfYWRkX2Vycm9yX3ZkYXRhOworKwkJRVZQX2Flc18xMjhfY3RyOworKwkJRVZQX2Flc18yNTZfY3RyOworKwkJRUNfR0ZwX25pc3RwMjI0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfZmxhZ3M7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjE7CisrCQlFVlBfYWVzXzEyOF94dHM7CisrCQlFVlBfYWVzXzI1Nl94dHM7CisrCQlFVlBfYWVzXzEyOF9nY207CisrCQlFQ19LRVlfY2xlYXJfZmxhZ3M7CisrCQlFQ19LRVlfc2V0X2ZsYWdzOworKwkJRVZQX2Flc18yNTZfY2NtOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1NfbWdmMTsKKysJCUVWUF9hZXNfMTI4X2NjbTsKKysJCUVWUF9hZXNfMTkyX2djbTsKKysJCVg1MDlfQUxHT1Jfc2V0X21kOworKwkJUkFORF9pbml0X2ZpcHM7CisrCQlFVlBfYWVzXzI1Nl9nY207CisrCQlFVlBfYWVzXzE5Ml9jY207CisrCQlDTUFDX0NUWF9jb3B5OworKwkJQ01BQ19DVFhfZnJlZTsKKysJCUNNQUNfQ1RYX2dldDBfY2lwaGVyX2N0eDsKKysJCUNNQUNfQ1RYX2NsZWFudXA7CisrCQlDTUFDX0luaXQ7CisrCQlDTUFDX1VwZGF0ZTsKKysJCUNNQUNfcmVzdW1lOworKwkJQ01BQ19DVFhfbmV3OworKwkJQ01BQ19GaW5hbDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdF9jdHIzMjsKKysJCUNSWVBUT19nY20xMjhfcmVsZWFzZTsKKysJCUNSWVBUT19jY20xMjhfZGVjcnlwdF9jY202NDsKKysJCUNSWVBUT19jY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT19nY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT194dHMxMjhfZW5jcnlwdDsKKysJCUVWUF9yYzRfaG1hY19tZDU7CisrCQlDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2djbTEyOF9zZXRpdjsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHQ7CisrCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExOworKwkJQ1JZUFRPX2djbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2VuY3J5cHRfY2NtNjQ7CisrCQlFTkdJTkVfbG9hZF9yZHJhbmQ7CisrCQlDUllQVE9fY2NtMTI4X3NldGl2OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19nY20xMjhfYWFkOworKwkJQ1JZUFRPX2NjbTEyOF9pbml0OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19nY20xMjhfbmV3OworKwkJQ1JZUFRPX2NjbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY2NtMTI4X2FhZDsKKysJCUNSWVBUT19nY20xMjhfaW5pdDsKKysJCUNSWVBUT19nY20xMjhfZGVjcnlwdDsKKysJCUVOR0lORV9sb2FkX3JzYXg7CisrCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2ZpbmlzaDsKKysJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTE7CisrCQlQS0NTNV9wYmtkZjJfc2V0OworKwkJQ01TX2FkZDBfcmVjaXBpZW50X3Bhc3N3b3JkOworKwkJQ01TX2RlY3J5cHRfc2V0MV9wYXNzd29yZDsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGFzc3dvcmQ7CisrCQlSQU5EX3NldF9maXBzX2RyYmdfdHlwZTsKKysJCVg1MDlfUkVRX3NpZ25fY3R4OworKwkJUlNBX1BTU19QQVJBTVNfbmV3OworKwkJWDUwOV9DUkxfc2lnbl9jdHg7CisrCQlYNTA5X3NpZ25hdHVyZV9kdW1wOworKwkJZDJpX1JTQV9QU1NfUEFSQU1TOworKwkJUlNBX1BTU19QQVJBTVNfaXQ7CisrCQlSU0FfUFNTX1BBUkFNU19mcmVlOworKwkJWDUwOV9zaWduX2N0eDsKKysJCWkyZF9SU0FfUFNTX1BBUkFNUzsKKysJCUFTTjFfaXRlbV9zaWduX2N0eDsKKysJCUVDX0dGcF9uaXN0cDUyMV9tZXRob2Q7CisrCQlFQ19HRnBfbmlzdHAyNTZfbWV0aG9kOworKwkJT1BFTlNTTF9zdGRlcnI7CisrCQlPUEVOU1NMX2NwdWlkX3NldHVwOworKwkJT1BFTlNTTF9zaG93ZmF0YWw7CisrCQlCSU9fbmV3X2RncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZzsKKysJCUJJT19kZ3JhbV9zY3RwX3dhaXRfZm9yX2RyeTsKKysJCUJJT19zX2RhdGFncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1faXNfc2N0cDsKKysJCUJJT19kZ3JhbV9zY3RwX25vdGlmaWNhdGlvbl9jYjsKKyt9IE9QRU5TU0xfMS4wLjA7CisrCisrT1BFTlNTTF8xLjAuMWQgeworKwlnbG9iYWw6CisrCQlDUllQVE9fbWVtY21wOworK30gT1BFTlNTTF8xLjAuMTsKKysKKytPUEVOU1NMXzEuMC4yIHsKKysJZ2xvYmFsOgorKwkJU1NMX0NUWF9zZXRfYWxwbl9wcm90b3M7CisrCQlTU0xfc2V0X2FscG5fcHJvdG9zOworKwkJU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2I7CisrCQlTU0xfZ2V0MF9hbHBuX3NlbGVjdGVkOworKwkJU1NMX0NUWF9zZXRfY3VzdG9tX2NsaV9leHQ7CisrCQlTU0xfQ1RYX3NldF9jdXN0b21fc3J2X2V4dDsKKysJCVNTTF9DVFhfc2V0X3Nydl9zdXBwX2RhdGE7CisrCQlTU0xfQ1RYX3NldF9jbGlfc3VwcF9kYXRhOworKwkJU1NMX3NldF9jZXJ0X2NiOworKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mbzsKKysJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm9fZmlsZTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfY2I7CisrCQlTU0xfQ1RYX2dldDBfcGFyYW07CisrCQlTU0xfZ2V0MF9wYXJhbTsKKysJCVNTTF9jZXJ0c19jbGVhcjsKKysJCURUTFN2MV8yX21ldGhvZDsKKysJCURUTFN2MV8yX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJRFRMU19tZXRob2Q7CisrCQlEVExTX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTX2NsaWVudF9tZXRob2Q7CisrCQlTU0xfQ1RYX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF9nZXQwX3ByaXZhdGVrZXk7CisrCQlTU0xfQ09NUF9zZXQwX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9mcmVlX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ0lQSEVSX2ZpbmQ7CisrCQlTU0xfaXNfc2VydmVyOworKwkJU1NMX0NPTkZfQ1RYX25ldzsKKysJCVNTTF9DT05GX0NUWF9maW5pc2g7CisrCQlTU0xfQ09ORl9DVFhfZnJlZTsKKysJCVNTTF9DT05GX0NUWF9zZXRfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfY2xlYXJfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfc2V0MV9wcmVmaXg7CisrCQlTU0xfQ09ORl9DVFhfc2V0X3NzbDsKKysJCVNTTF9DT05GX0NUWF9zZXRfc3NsX2N0eDsKKysJCVNTTF9DT05GX2NtZDsKKysJCVNTTF9DT05GX2NtZF9hcmd2OworKwkJU1NMX0NPTkZfY21kX3ZhbHVlX3R5cGU7CisrCQlTU0xfdHJhY2U7CisrCQlTU0xfQ0lQSEVSX3N0YW5kYXJkX25hbWU7CisrCQlTU0xfZ2V0X3Rsc2FfcmVjb3JkX2J5bmFtZTsKKysJCUFTTjFfVElNRV9kaWZmOworKwkJQklPX2hleF9zdHJpbmc7CisrCQlDTVNfUmVjaXBpZW50SW5mb19nZXQwX3BrZXlfY3R4OworKwkJQ01TX1JlY2lwaWVudEluZm9fZW5jcnlwdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfcGtleV9jdHg7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX21kX2N0eDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmF0dXJlOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2FsZzsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9yZWtzOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX29yaWdfaWQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX29yaWdfaWRfY21wOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9nZXQwX2lkOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfc2V0MF9wa2V5OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2N0eDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZGVjcnlwdDsKKysJCUNNU19TaGFyZWRJbmZvX2VuY29kZTsKKysJCURIX2NvbXB1dGVfa2V5X3BhZGRlZDsKKysJCWQyaV9ESHhwYXJhbXM7CisrCQlpMmRfREh4cGFyYW1zOworKwkJREhfZ2V0XzEwMjRfMTYwOworKwkJREhfZ2V0XzIwNDhfMjI0OworKwkJREhfZ2V0XzIwNDhfMjU2OworKwkJREhfS0RGX1g5XzQyOworKwkJRUNESF9LREZfWDlfNjI7CisrCQlFQ0RTQV9NRVRIT0RfbmV3OworKwkJRUNEU0FfTUVUSE9EX2ZyZWU7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X2FwcF9kYXRhOworKwkJRUNEU0FfTUVUSE9EX2dldF9hcHBfZGF0YTsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbjsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbl9zZXR1cDsKKysJCUVDRFNBX01FVEhPRF9zZXRfdmVyaWZ5OworKwkJRUNEU0FfTUVUSE9EX3NldF9mbGFnczsKKysJCUVDRFNBX01FVEhPRF9zZXRfbmFtZTsKKysJCUVWUF9kZXNfZWRlM193cmFwOworKwkJRVZQX2Flc18xMjhfd3JhcDsKKysJCUVWUF9hZXNfMTkyX3dyYXA7CisrCQlFVlBfYWVzXzI1Nl93cmFwOworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMjU2OworKwkJRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMjU2OworKwkJQ1JZUFRPXzEyOF93cmFwOworKwkJQ1JZUFRPXzEyOF91bndyYXA7CisrCQlPQ1NQX1JFUV9DVFhfbmJpbzsKKysJCU9DU1BfUkVRX0NUWF9uZXc7CisrCQlPQ1NQX3NldF9tYXhfcmVzcG9uc2VfbGVuZ3RoOworKwkJT0NTUF9SRVFfQ1RYX2kyZDsKKysJCU9DU1BfUkVRX0NUWF9uYmlvX2QyaTsKKysJCU9DU1BfUkVRX0NUWF9nZXQwX21lbV9iaW87CisrCQlPQ1NQX1JFUV9DVFhfaHR0cDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfT0FFUF9QQVJBTVNfZnJlZTsKKysJCVJTQV9PQUVQX1BBUkFNU19pdDsKKysJCVJTQV9PQUVQX1BBUkFNU19uZXc7CisrCQlTU0xfZ2V0X3NpZ2FsZ3M7CisrCQlTU0xfZ2V0X3NoYXJlZF9zaWdhbGdzOworKwkJU1NMX2NoZWNrX2NoYWluOworKwkJWDUwOV9jaGFpbl91cF9yZWY7CisrCQlYNTA5X2h0dHBfbmJpbzsKKysJCVg1MDlfQ1JMX2h0dHBfbmJpbzsKKysJCVg1MDlfUkVWT0tFRF9kdXA7CisrCQlpMmRfcmVfWDUwOV90YnM7CisrCQlYNTA5X2dldDBfc2lnbmF0dXJlOworKwkJWDUwOV9nZXRfc2lnbmF0dXJlX25pZDsKKysJCVg1MDlfQ1JMX2RpZmY7CisrCQlYNTA5X2NoYWluX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfQ1JMX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfY2hlY2tfaG9zdDsKKysJCVg1MDlfY2hlY2tfZW1haWw7CisrCQlYNTA5X2NoZWNrX2lwOworKwkJWDUwOV9jaGVja19pcF9hc2M7CisrCQlYNTA5X1NUT1JFX3NldF9sb29rdXBfY3Jsc19jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfc3RvcmU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfaG9zdGZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9wZWVybmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfZW1haWw7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcF9hc2M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX25hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfY291bnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwOworKwkJWDUwOVYzX0VYVF9mcmVlOworKwkJRUNfR1JPVVBfZ2V0X21vbnRfZGF0YTsKKysJCUVDX2N1cnZlX25pZDJuaXN0OworKwkJRUNfY3VydmVfbmlzdDJuaWQ7CisrCQlQRU1fd3JpdGVfYmlvX0RIeHBhcmFtczsKKysJCVBFTV93cml0ZV9ESHhwYXJhbXM7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfY3VzdG9tX2V4dDsKKysJCVNTTF9DVFhfYWRkX3NlcnZlcl9jdXN0b21fZXh0OworKwkJU1NMX2V4dGVuc2lvbl9zdXBwb3J0ZWQ7CisrCQlCVUZfc3RybmxlbjsKKysJCXNrX2RlZXBfY29weTsKKysJCVNTTF90ZXN0X2Z1bmN0aW9uczsKKyt9IE9QRU5TU0xfMS4wLjFkOworKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMCBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQliaW5kX2VuZ2luZTsKKysJCXZfY2hlY2s7CisrCQlPUEVOU1NMX2luaXQ7CisrCQlPUEVOU1NMX2ZpbmlzaDsKKysJbG9jYWw6CisrCQkqOworK307CisrCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAgQEAKKytPUEVOU1NMXzEuMC4wIHsKKysJZ2xvYmFsOgorKwkJYmluZF9lbmdpbmU7CisrCQl2X2NoZWNrOworKwkJT1BFTlNTTF9pbml0OworKwkJT1BFTlNTTF9maW5pc2g7CisrCWxvY2FsOgorKwkJKjsKKyt9OworKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzYmNkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbTogUmFwaGFlbCBHZWlzc2VydCA8Z2Vpc3NlcnRAZGViaWFuLm9yZz4KK0Rlc2NyaXB0aW9uOiBtYWtlIFg1MDlfdmVyaWZ5X2NlcnQgaW5kaWNhdGUgdGhhdCBhbnkgY2VydGlmaWNhdGUgd2hvc2UKKyBuYW1lIGNvbnRhaW5zICJEaWdpY2VydCBTZG4uIEJoZC4iIChmcm9tIE1hbGF5c2lhKSBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMTEtMDUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yfmJldGExLm9yaWcvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4ODAyODg0NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4NDAyODkyOSArMDEwMAorQEAgLTk2NCwxMCArOTY0LDExIEBACisgCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisgCQl7CisgCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKy0JCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKy0JCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCS8qIE1hcmsgY2VydGlmaWNhdGVzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBuYW1lcyBhcworKwkJICogcmV2b2tlZCwgbm8gbWF0dGVyIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKyAJCSAqLworLQkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCWlmICh4LT5uYW1lICYmIChzdHJzdHIoeC0+bmFtZSwgIkRpZ2lOb3RhciIpIHx8CisrCQkJc3Ryc3RyKHgtPm5hbWUsICJEaWdpY2VydCBTZG4uIEJoZC4iKSkpCisgCQkJeworIAkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRDsKKyAJCQljdHgtPmVycm9yX2RlcHRoID0gaTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxYTBiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb206IFJhcGhhZWwgR2Vpc3NlcnQgPGdlaXNzZXJ0QGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogbWFrZSBYNTA5X3ZlcmlmeV9jZXJ0IGluZGljYXRlIHRoYXQgYW55IGNlcnRpZmljYXRlIHdob3NlCisgbmFtZSBjb250YWlucyAiRGlnaU5vdGFyIiBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMDktMDgKK0J1ZzogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82Mzk3NDQKK1Jldmlld2VkLWJ5OiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitSZXZpZXdlZC1ieTogRHIgU3RlcGhlbiBOIEhlbnNvbiA8c2hlbnNvbkBkcmgtY29uc3VsdGFuY3kuY28udWs+CisKK1RoaXMgaXMgbm90IG1lYW50IGFzIGZpbmFsIHBhdGNoLiAgCisgCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCitAQCAtMTE5LDYgKzExOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfdHJ1c3QoWDUwOV9TVE9SRV9DVFggKmMKKyBzdGF0aWMgaW50IGNoZWNrX3Jldm9jYXRpb24oWDUwOV9TVE9SRV9DVFggKmN0eCk7Cisgc3RhdGljIGludCBjaGVja19jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIHN0YXRpYyBpbnQgY2hlY2tfcG9saWN5KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIAorIHN0YXRpYyBpbnQgZ2V0X2NybF9zY29yZShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5ICoqcGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpwcmVhc29ucywgWDUwOV9DUkwgKmNybCwgWDUwOSAqeCk7CitAQCAtNDM4LDYgKzQzOSw5IEBAIGludCBYNTA5X3ZlcmlmeV9jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgKKyAgICAgaWYgKCFvaykKKyAgICAgICAgIGdvdG8gZW5kOworIAorKwlvayA9IGNoZWNrX2NhX2JsYWNrbGlzdChjdHgpOworKwlpZighb2spIGdvdG8gZW5kOworKworICNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5CisgICAgIC8qIFJGQyAzNzc5IHBhdGggdmFsaWRhdGlvbiwgbm93IHRoYXQgQ1JMIGNoZWNrIGhhcyBiZWVuIGRvbmUgKi8KKyAgICAgb2sgPSB2M19hc2lkX3ZhbGlkYXRlX3BhdGgoY3R4KTsKK0BAIC05MzgsNiArOTQyLDI5IEBAIHN0YXRpYyBpbnQgY2hlY2tfY3JsX3RpbWUoWDUwOV9TVE9SRV9DVFgKKyAgICAgcmV0dXJuIDE7CisgfQorIAorK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpCisrCXsKKysJWDUwOSAqeDsKKysJaW50IGk7CisrCS8qIENoZWNrIGFsbCBjZXJ0aWZpY2F0ZXMgYWdhaW5zdCB0aGUgYmxhY2tsaXN0ICovCisrCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisrCQl7CisrCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKysJCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKysJCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCSAqLworKwkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCQl7CisrCQkJY3R4LT5lcnJvciA9IFg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEOworKwkJCWN0eC0+ZXJyb3JfZGVwdGggPSBpOworKwkJCWN0eC0+Y3VycmVudF9jZXJ0ID0geDsKKysJCQlpZiAoIWN0eC0+dmVyaWZ5X2NiKDAsY3R4KSkKKysJCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworIHN0YXRpYyBpbnQgZ2V0X2NybF9zayhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKnBjcmwsIFg1MDlfQ1JMICoqcGRjcmwsCisgICAgICAgICAgICAgICAgICAgICAgIFg1MDkgKipwaXNzdWVyLCBpbnQgKnBzY29yZSwgdW5zaWduZWQgaW50ICpwcmVhc29ucywKKyAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfT0YoWDUwOV9DUkwpICpjcmxzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3NDY0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvZW5naW5lcy9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvZW5naW5lcy9NYWtlZmlsZQorQEAgLTEwNywxMyArMTA3LDEzIEBAIGluc3RhbGw6CisgCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKyAJQGlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKyAJCXNldCAtZTsgXAorLQkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lczsgXAorKwkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXM7IFwKKyAJCWZvciBsIGluICQoTElCTkFNRVMpOyBkbyBcCisgCQkJKCBlY2hvIGluc3RhbGxpbmcgJCRsOyBcCisgCQkJICBwZng9bGliOyBcCisgCQkJICBpZiBleHByICIkKFBMQVRGT1JNKSIgOiAiQ3lnd2luIiA+L2Rldi9udWxsOyB0aGVuIFwKKyAJCQkJc2Z4PSIuc28iOyBcCistCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorIAkJCSAgZWxzZSBcCisgCQkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCQkqRFNPX0JFT1MqKQlzZng9Ii5zbyI7OwlcCitAQCAtMTIyLDEwICsxMjIsMTAgQEAgaW5zdGFsbDoKKyAJCQkJKkRTT19XSU4zMiopCXNmeD0iZWF5MzIuZGxsIjsgcGZ4PTs7CVwKKyAJCQkJKikJCXNmeD0iLmJhZCI7OwlcCisgCQkJCWVzYWM7IFwKKy0JCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKysJCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBmaTsgXAorLQkJCSAgY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorLQkJCSAgbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4ICk7IFwKKysJCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJICBtdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCisgCQlkb25lOyBcCisgCWZpCisgCUB0YXJnZXQ9aW5zdGFsbDsgJChSRUNVUlNJVkVfTUFLRSkKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMi9lbmdpbmVzL2NjZ29zdC9NYWtlZmlsZQorQEAgLTQ3LDcgKzQ3LDcgQEAgaW5zdGFsbDoKKyAJCXBmeD1saWI7IFwKKyAJCWlmIGV4cHIgIiQoUExBVEZPUk0pIiA6ICJDeWd3aW4iID4vZGV2L251bGw7IHRoZW4gXAorIAkJCXNmeD0iLnNvIjsgXAorLQkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKyAJCWVsc2UgXAorIAkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCSpEU09fQkVPUyopIHNmeD0iLnNvIjs7IFwKK0BAIC01NiwxMCArNTYsMTAgQEAgaW5zdGFsbDoKKyAJCQkqRFNPX1dJTjMyKikgc2Z4PSJlYXkzMi5kbGwiOyBwZng9OzsgXAorIAkJCSopIHNmeD0iLmJhZCI7OyBcCisgCQkJZXNhYzsgXAorLQkJCWNwICQke3BmeH0kKExJQk5BTUUpJCRzZnggJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisrCQkJY3AgJCR7cGZ4fSQoTElCTkFNRSkkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisgCQlmaTsgXAorLQkJY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorLQkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4OyBcCisrCQljaG1vZCA1NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZng7IFwKKyAJZmkKKyAKKyBsaW5rczoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZmluZC5wbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZmluZC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTFiNDJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maW5kLnBsCkBAIC0wLDAgKzEsNTQgQEAKK3dhcm4gIkxlZ2FjeSBsaWJyYXJ5IEB7WyhjYWxsZXIoMCkpWzZdXX0gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSB0aGUgQ1BBTiBkaXN0cmlidXRpb24gUGVybDQ6OkNvcmVMaWJzLiBJdCBpcyBiZWluZyB1c2VkIGF0IEB7WyhjYWxsZXIpWzFdXX0sIGxpbmUgQHtbKGNhbGxlcilbMl1dfS5cbiI7CisKKyMgVGhpcyBsaWJyYXJ5IGlzIGRlcHJlY2F0ZWQgYW5kIHVubWFpbnRhaW5lZC4gSXQgaXMgaW5jbHVkZWQgZm9yCisjIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsIDQgc2NyaXB0cyB3aGljaCBtYXkgdXNlIGl0LCBidXQgaXQgd2lsbCBiZQorIyByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUGVybC4gUGxlYXNlIHVzZSB0aGUgRmlsZTo6RmluZCBtb2R1bGUKKyMgaW5zdGVhZC4KKworIyBVc2FnZToKKyMJcmVxdWlyZSAiZmluZC5wbCI7CisjCisjCSZmaW5kKCcvZm9vJywnL2JhcicpOworIworIwlzdWIgd2FudGVkIHsgLi4uIH0KKyMJCXdoZXJlIHdhbnRlZCBkb2VzIHdoYXRldmVyIHlvdSB3YW50LiAgJGRpciBjb250YWlucyB0aGUKKyMJCWN1cnJlbnQgZGlyZWN0b3J5IG5hbWUsIGFuZCAkXyB0aGUgY3VycmVudCBmaWxlbmFtZSB3aXRoaW4KKyMJCXRoYXQgZGlyZWN0b3J5LiAgJG5hbWUgY29udGFpbnMgIiRkaXIvJF8iLiAgWW91IGFyZSBjZCdlZAorIwkJdG8gJGRpciB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuICBUaGUgZnVuY3Rpb24gbWF5CisjCQlzZXQgJHBydW5lIHRvIHBydW5lIHRoZSB0cmVlLgorIworIyBGb3IgZXhhbXBsZSwKKyMKKyMgICBmaW5kIC8gLW5hbWUgLm5mc1wqIC1tdGltZSArNyAtZXhlYyBybSAtZiB7fSBcOyAtbyAtZnN0eXBlIG5mcyAtcHJ1bmUKKyMKKyMgY29ycmVzcG9uZHMgdG8gdGhpcworIworIwlzdWIgd2FudGVkIHsKKyMJICAgIC9eXC5uZnMuKiQvICYmCisjCSAgICAoKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkKSA9IGxzdGF0KCRfKSkgJiYKKyMJICAgIGludCgtTSBfKSA+IDcgJiYKKyMJICAgIHVubGluaygkXykKKyMJICAgIHx8CisjCSAgICAoJG5saW5rIHx8ICgoJGRldiwkaW5vLCRtb2RlLCRubGluaywkdWlkLCRnaWQpID0gbHN0YXQoJF8pKSkgJiYKKyMJICAgICRkZXYgPCAwICYmCisjCSAgICAoJHBydW5lID0gMSk7CisjCX0KKyMKKyMgU2V0IHRoZSB2YXJpYWJsZSAkZG9udF91c2VfbmxpbmsgaWYgeW91J3JlIHVzaW5nIEFGUywgc2luY2UgQUZTIGNoZWF0cy4KKwordXNlIEZpbGU6OkZpbmQgKCk7CisKKypuYW1lCQk9ICpGaWxlOjpGaW5kOjpuYW1lOworKnBydW5lCQk9ICpGaWxlOjpGaW5kOjpwcnVuZTsKKypkaXIJCT0gKkZpbGU6OkZpbmQ6OmRpcjsKKyp0b3BkaXIJCT0gKkZpbGU6OkZpbmQ6OnRvcGRpcjsKKyp0b3BkZXYJCT0gKkZpbGU6OkZpbmQ6OnRvcGRldjsKKyp0b3Bpbm8JCT0gKkZpbGU6OkZpbmQ6OnRvcGlubzsKKyp0b3Btb2RlCT0gKkZpbGU6OkZpbmQ6OnRvcG1vZGU7CisqdG9wbmxpbmsJPSAqRmlsZTo6RmluZDo6dG9wbmxpbms7CisKK3N1YiBmaW5kIHsKKyAgICAmRmlsZTo6RmluZDo6ZmluZChcJndhbnRlZCwgQF8pOworfQorCisxOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpeC1jaXBoZXItZGVzLWVkZTMtY2ZiMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQxZWE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworVGhpcyBwYXRjaCBhZGRzIHRoZSBmaXggZm9yIG9uZSBvZiB0aGUgY2lwaGVycyB1c2VkIGluIG9wZW5zc2wsIG5hbWVseQordGhlIGNpcGhlciBkZXMtZWRlMy1jZmIxLiBDb21wbGV0ZSBidWcgbG9nIGFuZCBwYXRjaCBpcyBwcmVzZW50IGhlcmU6CitodHRwOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0yODY3CisKK1NpZ25lZC1PZmYtQnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9lX2RlczMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2VfZGVzMy5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2VfZGVzMy5jCitAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiMV9jaXBoZXIoRVZQX0NJUEgKKyAgICAgc2l6ZV90IG47CisgICAgIHVuc2lnbmVkIGNoYXIgY1sxXSwgZFsxXTsKKyAKKy0gICAgZm9yIChuID0gMDsgbiA8IGlubDsgKytuKSB7CisrICAgIGZvciAobiA9IDA7IG4gKiA4IDwgaW5sOyArK24pIHsKKyAgICAgICAgIGNbMF0gPSAoaW5bbiAvIDhdICYgKDEgPDwgKDcgLSBuICUgOCkpKSA/IDB4ODAgOiAwOworICAgICAgICAgREVTX2VkZTNfY2ZiX2VuY3J5cHQoYywgZCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vZS1sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vZS1sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmUxM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29lLWxkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuLWVtYmVkZGVkXQorCitJbmRleDogb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvTWFrZWZpbGUuc2hhcmVkCisrKysgb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKK0BAIC05Miw3ICs5Miw3IEBACisgTElOS19BUFA9CVwKKyAgICggJChTRVRfWCk7ICAgXAorICAgICBMSUJERVBTPSIkJHtMSUJERVBTOi0kKExJQkRFUFMpfSI7IFwKKy0gICAgTERDTUQ9IiQke0xEQ01EOi0kKENDKX0iOyBMREZMQUdTPSIkJHtMREZMQUdTOi0kKENGTEFHUyl9IjsgXAorKyAgICBMRENNRD0iJCR7TERDTUQ6LSQoQ0MpfSI7IExERkxBR1M9IiQoT0VfTERGTEFHUykgJCR7TERGTEFHUzotJChDRkxBR1MpfSI7IFwKKyAgICAgTElCUEFUSD1gZm9yIHggaW4gJCRMSUJERVBTOyBkbyBlY2hvICQkeDsgZG9uZSB8IHNlZCAtZSAncy9eICotTC8vO3QnIC1lIGQgfCB1bmlxYDsgXAorICAgICBMSUJQQVRIPWBlY2hvICQkTElCUEFUSCB8IHNlZCAtZSAncy8gLzovZydgOyBcCisgICAgIExEX0xJQlJBUllfUEFUSD0kJExJQlBBVEg6JCRMRF9MSUJSQVJZX1BBVEggXAorQEAgLTEwMiw3ICsxMDIsNyBAQAorICAgKCAkKFNFVF9YKTsgICBcCisgICAgIExJQkRFUFM9IiQke0xJQkRFUFM6LSQoTElCREVQUyl9IjsgXAorICAgICBTSEFSRURDTUQ9IiQke1NIQVJFRENNRDotJChDQyl9IjsgXAorLSAgICBTSEFSRURGTEFHUz0iJCR7U0hBUkVERkxBR1M6LSQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKX0iOyBcCisrICAgIFNIQVJFREZMQUdTPSIkKE9FX0xERkxBR1MpICQke1NIQVJFREZMQUdTOi0kKENGTEFHUykgJChTSEFSRURfTERGTEFHUyl9IjsgXAorICAgICBMSUJQQVRIPWBmb3IgeCBpbiAkJExJQkRFUFM7IGRvIGVjaG8gJCR4OyBkb25lIHwgc2VkIC1lICdzL14gKi1MLy87dCcgLWUgZCB8IHVuaXFgOyBcCisgICAgIExJQlBBVEg9YGVjaG8gJCRMSUJQQVRIIHwgc2VkIC1lICdzLyAvOi9nJ2A7IFwKKyAgICAgTERfTElCUkFSWV9QQVRIPSQkTElCUEFUSDokJExEX0xJQlJBUllfUEFUSCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtMS4wLjJhLXgzMi1hc20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1YmZhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitodHRwczovL3J0Lm9wZW5zc2wub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9Mzc1OSZ1c2VyPWd1ZXN0JnBhc3M9Z3Vlc3QKKworRnJvbSA2MjU3ZDU5YjNhNjhkMmZlYjlkNjQzMTdhMWM1NTZkYzM4MTNlZTYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorRGF0ZTogU2F0LCAyMSBNYXIgMjAxNSAwNjowMToyNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHVzZSBiaWdpbnQgaW4geDg2LTY0IHBlcmwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorCitXaGVuIGJ1aWxkaW5nIG9uIHgzMiBzeXN0ZW1zIHdoZXJlIHRoZSBkZWZhdWx0IHR5cGUgaXMgMzJiaXQsIG1ha2Ugc3VyZQord2UgY2FuIHRyYW5zcGFyZW50bHkgcmVwcmVzZW50IDY0Yml0IGludGVnZXJzLiAgT3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoCitidWlsZCBlcnJvcnMgbGlrZToKKy91c3IvYmluL3BlcmwgYXNtL2doYXNoLXg4Nl82NC5wbCBlbGYgPiBnaGFzaC14ODZfNjQucworSW50ZWdlciBvdmVyZmxvdyBpbiBoZXhhZGVjaW1hbCBudW1iZXIgYXQgYXNtLy4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIGxpbmUgMjAxLCA8PiBsaW5lIDg5MC4KKy4uLgorZ2hhc2gteDg2XzY0LnM6IEFzc2VtYmxlciBtZXNzYWdlczoKK2doYXNoLXg4Nl82NC5zOjg5MDogRXJyb3I6IGp1bmsgJy4xNTQ3MzM1NTQ3OTk5NWUrMTknIGFmdGVyIGV4cHJlc3Npb24KKworV2UgZG9uJ3QgZW5hYmxlIHRoaXMgZ2xvYmFsbHkgYXMgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgd2UnZCBnZXQKKzMyYml0IHZhbHVlcyBpbnRlcnByZXRlZCBhcyB1bnNpZ25lZCB3aGVuIHdlIG5lZWQgdGhlbSBhcyBzaWduZWQuCisKK1JlcG9ydGVkLWJ5OiBCZXJ0cmFuZCBKYWNxdWluIDxiZXJ0cmFuZEBqYWNxdWluLmJ6aD4KK1VSTDogaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvNTQyNjE4CistLS0KKyBjcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgYi9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKK2luZGV4IGFhZTgyODguLjBiZjk3NzQgMTAwNzU1CistLS0gYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKKysrKyBiL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorQEAgLTE5NSw2ICsxOTUsMTAgQEAgbXkgJWdsb2JhbHM7CisgICAgIHN1YiBvdXQgeworICAgICAJbXkgJHNlbGYgPSBzaGlmdDsKKyAKKysJIyBXaGVuIGJ1aWxkaW5nIG9uIHgzMiBBQklzLCB0aGUgZXhwYW5kZWQgaGV4IHZhbHVlIG1pZ2h0IGJlIHRvbworKwkjIGJpZyB0byBmaXQgaW50byAzMmJpdHMuICBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KKy0tIAorMi4zLjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzhjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorb3BlbnNzbDogYXZvaWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEVWUF9EaWdlc3RJbml0X2V4KCkKKworV2Ugc2hvdWxkIGF2b2lkIGFjY2Vzc2luZyB0aGUgdHlwZSBwb2ludGVyIGlmIGl0J3MgTlVMTCwKK3RoaXMgY291bGQgaGFwcGVuIGlmIGN0eC0+ZGlnZXN0IGlzIG5vdCBOVUxMLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAoraHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL29wZW5zc2wtZGV2QG9wZW5zc2wub3JnL21zZzMyODYwLmh0bWwKKworU2lnbmVkLW9mZi1ieTogWHVmZW5nIFpoYW5nIDx4dWZlbmcuemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9kaWdlc3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCitAQCAtMjA4LDcgKzIwOCw3IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgI2VuZGlmCistICAgIGlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSB7CisrICAgIGlmICh0eXBlICYmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSkgeworICAgICAgICAgaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAgICAgICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAgICAgICAgIGN0eC0+ZGlnZXN0ID0gdHlwZTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ5NzI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK29wZW5zc2w6IEZpeCBwb2QybWFuIGRlcy5wb2QgZXJyb3Igb24gVWJ1bnR1IDEyLjA0CisKK1RoaXMgaXMgYSBmb3JtYXR0aW5nIGZpeCwgJz1iYWNrJyBpcyByZXF1aXJlZCBiZWZvcmUKKyc9aGVhZDEnIG9uIFVidW50dSAxMi4wNC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gU2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorZGlmZiAtdXJwTiBhX29yaWdpbi9kZXMucG9kIGJfbW9kaWZ5L2Rlcy5wb2QKKy0tLSBhX29yaWdpbi9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowMjo1Ni4yMTE2NzQ1ODkgKzA4MDAKKysrKyBiX21vZGlmeS9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowNDoxNC40Mzk2NzQ1ODAgKzA4MDAKK0BAIC0xODEsNiArMTgxLDggQEAgdGhlIHV1ZW5jb2RlZCBmaWxlIHRvIGVtYmVkIGluIHRoZSBiZWdpbgorIG91dHB1dC4gIElmIHRoZXJlIGlzIG5vIG5hbWUgc3BlY2lmaWVkIGFmdGVyIHRoZSBCPC11PiwgdGhlIG5hbWUgdGV4dC5kZXMKKyB3aWxsIGJlIGVtYmVkZGVkIGluIHRoZSBoZWFkZXIuCisgCisrPWJhY2sKKysKKyA9aGVhZDEgU0VFIEFMU08KKyAKKyBwcygxKSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmNlMzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSZWNlaXZlZCBmcm9tIEggSiBMaXUgQCBJbnRlbAorTWFrZSB0aGUgYXNzZW1ibHkgc3ludGF4IGNvbXBhdGlibGUgd2l0aCB4MzIgZ2NjLiBPdGhld2lzZSB4MzIgZ2NjIHRocm93cyBlcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA3LzEzCisKK3BvcnRlZCB0aGUgcGF0Y2ggdG8gdGhlIDEuMC4wZSB2ZXJzaW9uCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzAxCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vYm4vYm4uaAorKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuLmgKK0BAIC0xNzMsNiArMTczLDEzIEBAIGV4dGVybiAiQyIgeworICMgIGVuZGlmCisgIyBlbmRpZgorIAorKy8qIEFkZHJlc3MgdHlwZS4gICovCisrI2lmZGVmIF9XSU42NAorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nIGxvbmcKKysjZWxzZQorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nCisrI2VuZGlmCisrCisgLyoKKyAgKiBhc3N1bWluZyBsb25nIGlzIDY0Yml0IC0gdGhpcyBpcyB0aGUgREVDIEFscGhhIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyBvbmx5CisgICogNjQgYml0cyA6LSgsIGRvbid0IGRlZmluZSBCTl9MTE9ORyBmb3IgdGhlIERFQyBBbHBoYQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by9ibi9ibl9leHAuYworKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCitAQCAtNjM4LDcgKzYzOCw3IEBAIHN0YXRpYyBpbnQgTU9EX0VYUF9DVElNRV9DT1BZX0ZST01fUFJFQlUKKyAgKiBtdWx0aXBsZS4KKyAgKi8KKyAjZGVmaW5lIE1PRF9FWFBfQ1RJTUVfQUxJR04oeF8pIFwKKy0gICAgICAgICgodW5zaWduZWQgY2hhciopKHhfKSArIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX1dJRFRIIC0gKCgoc2l6ZV90KSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKysJKCh1bnNpZ25lZCBjaGFyKikoeF8pICsgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfV0lEVEggLSAoKChCTl9BRERSKSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKyAKKyAvKgorICAqIFRoaXMgdmFyaWFudCBvZiBCTl9tb2RfZXhwX21vbnQoKSB1c2VzIGZpeGVkIHdpbmRvd3MgYW5kIHRoZSBzcGVjaWFsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3B0ZXN0LWRlcHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3B0ZXN0LWRlcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2ZDE3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcHRlc3QtZGVwcy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitSZW1vdmUgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciB0ZXN0IHRhcmdldHMKKworVGhlc2UgYXJlIHByb2JhYmx5IGhlcmUgYmVjYXVzZSB0aGUgZXhlY3V0YWJsZXMgYXJlbid0IGFsd2F5cyBidWlsdCBmb3IKK290aGVyIHBsYXRmb3JtcyAoZS5nLiBXaW5kb3dzKTsgaG93ZXZlciB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5J2xsCithbHdheXMgYmUgdGhlcmUuIE5vbmUgb2YgdGhlIG90aGVyIHRlc3QgdGFyZ2V0cyBoYXZlIHN1Y2ggZGVwZW5kZW5jaWVzCithbmQgaWYgd2UgZG9uJ3QgcmVtb3ZlIHRoZW0sIG1ha2UgdHJpZXMgdG8gcmVidWlsZCB0aGUgZXhlY3V0YWJsZXMgYW5kCitmYWlscyBkdXJpbmcgcnVuLXB0ZXN0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTMzMCw3ICszMzAsNyBAQCB0ZXN0X2NtczogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSBjbXMtCisgCUBlY2hvICJDTVMgY29uc2lzdGVuY3kgdGVzdCIKKyAJJChQRVJMKSBjbXMtdGVzdC5wbAorIAorLXRlc3Rfc3JwOiAkKFNSUFRFU1QpJChFWEVfRVhUKQorK3Rlc3Rfc3JwOgorIAlAZWNobyAiVGVzdCBTUlAiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuL3NycHRlc3QKKyAKK0BAIC0zNDIsNyArMzQyLDcgQEAgdGVzdF92M25hbWU6ICQoVjNOQU1FVEVTVCkkKEVYRV9FWFQpCisgCUBlY2hvICJUZXN0IFg1MDl2M19jaGVja18qIgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKFYzTkFNRVRFU1QpCisgCistdGVzdF9oZWFydGJlYXQ6ICQoSEVBUlRCRUFUVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9oZWFydGJlYXQ6CisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSEVBUlRCRUFUVEVTVCkKKyAKKyB0ZXN0X2NvbnN0YW50X3RpbWU6ICQoQ09OU1RUSU1FVEVTVCkkKEVYRV9FWFQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiMjBmY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3NoYXJlZC1saWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2NhMGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xZS5vcmlnL2NyeXB0by9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9NYWtlZmlsZQorQEAgLTEwOCw3ICsxMDgsNyBAQCAkKExJQik6CSQoTElCT0JKKQorIAorIHNoYXJlZDogYnVpbGRpbmYuaCBsaWIgc3ViZGlycworIAlpZiBbIC1uICIkKFNIQVJFRF9MSUJTKSIgXTsgdGhlbiBcCistCQkoY2QgLi47ICQoTUFLRSkgJChTSEFSRURfTElCKSk7IFwKKysJCShjZCAuLjsgJChNQUtFKSAtZSAkKFNIQVJFRF9MSUIpKTsgXAorIAlmaQorIAorIGxpYnM6CitJbmRleDogb3BlbnNzbC0xLjAuMWUvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWUub3JpZy9NYWtlZmlsZS5vcmcKKysrKyBvcGVuc3NsLTEuMC4xZS9NYWtlZmlsZS5vcmcKK0BAIC0zMTAsNyArMzEwLDcgQEAgbGliY3J5cHRvJChTSExJQl9FWFQpOiBsaWJjcnlwdG8uYSBmaXBzXworIAorIGxpYnNzbCQoU0hMSUJfRVhUKTogbGliY3J5cHRvJChTSExJQl9FWFQpIGxpYnNzbC5hCisgCUBpZiBbICIkKFNITElCX1RBUkdFVCkiICE9ICIiIF07IHRoZW4gXAorLQkJJChNQUtFKSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorKwkJJChNQUtFKSAtZSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorIAllbHNlIFwKKyAJCWVjaG8gIlRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGlzIHBsYXRmb3JtIiA+JjI7IFwKKyAJCWV4aXQgMTsgXAorSW5kZXg6IG9wZW5zc2wtMS4wLjFlL3NzbC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFlLm9yaWcvc3NsL01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMWUvc3NsL01ha2VmaWxlCitAQCAtNjIsNyArNjIsNyBAQCBsaWI6CSQoTElCT0JKKQorIAorIHNoYXJlZDogbGliCisgCWlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKy0JCShjZCAuLjsgJChNQUtFKSAkKFNIQVJFRF9MSUIpKTsgXAorKwkJKGNkIC4uOyAkKE1BS0UpIC1lICQoU0hBUkVEX0xJQikpOyBcCisgCWZpCisgCisgZmlsZXM6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2xfMS4wLjJkLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDhkY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYgpAQCAtMCwwICsxLDU3IEBACityZXF1aXJlIG9wZW5zc2wuaW5jCisKKyMgRm9yIHRhcmdldCBzaWRlIHZlcnNpb25zIG9mIG9wZW5zc2wgZW5hYmxlIHN1cHBvcnQgZm9yIE9DRiBMaW51eCBkcml2ZXIKKyMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLgorREVQRU5EUyArPSAiY3J5cHRvZGV2LWxpbnV4IgorCitDRkxBRyArPSAiLURIQVZFX0NSWVBUT0RFViAtRFVTRV9DUllQVE9ERVZfRElHRVNUUyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjlhOGY5NjgxMDczNDVlMGI3NWFhOGMyZWNhYTdlYzgiCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyBlbmdpbmVzIgorZXhwb3J0IE9FX0xERkxBR1M9IiR7TERGTEFHU30iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2hhcmVkLWxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL29lLWxkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY2EucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL21hbi1kaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tc2VjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9waWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZmluZC5wbCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGVzLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1kZXBzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzhkZDYxOWIyZTc3Y2JhYzY5Yjk5ZjUyYTA1M2QyNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjcxYzM2NDg3Nzg1NjI4YTcwMzM3NGM2NTJhZDJjZWJlYTQ1ZmE5MjBhZTU2ODE1MTVkZjI1ZDlmMmM5YThjOCIKKworUEFDS0FHRVMgPSsgIiBcCisJJHtQTn0tZW5naW5lcyBcCisJJHtQTn0tZW5naW5lcy1kYmcgXAorCSIKKworRklMRVNfJHtQTn0tZW5naW5lcyA9ICIke2xpYmRpcn0vc3NsL2VuZ2luZXMvKi5zbyAke2xpYmRpcn0vZW5naW5lcyIKK0ZJTEVTXyR7UE59LWVuZ2luZXMtZGJnID0gIiR7bGliZGlyfS9zc2wvZW5naW5lcy8uZGVidWciCisKK1BBUkFMTEVMX01BS0UgPSAiIgorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgY3AgJHtXT1JLRElSfS9maW5kLnBsICR7U30vdXRpbC9maW5kLnBsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGFmMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYwpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlJQQyBwcm9ncmFtIG51bWJlciBtYXBwZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbmVpbC5icm93bi5uYW1lL3BvcnRtYXAvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BvcnRtYXAuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTMxO21kNT01MWZmNjdlNjZlYzg0YjIwMDliMDE3YjFmOTRhZmJmNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9mcm9tX2xvY2FsLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zNTttZDU9MWJlYzkzOGEyMjY4YjhiNDIzYzU4ODAxYWNlM2FkYzEiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJwb3J0bWFwIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTAgMiAzIDQgNSAuIHN0b3AgMzIgMCAxIDYgLiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJwb3J0bWFwLnNlcnZpY2UiCisKK1BBQ0tBR0VTID0rICJwb3J0bWFwLXV0aWxzIgorRklMRVNfcG9ydG1hcC11dGlscyA9ICIke2Jhc2Vfc2JpbmRpcn0vcG1hcF9zZXQgJHtiYXNlX3NiaW5kaXJ9L3BtYXBfZHVtcCIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkb2NkaXJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9kZXN0ZGlyLW5vLXN0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYmY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBTdW4sIDEzIE1heSAyMDA3IDIxOjE1OjEyICswMDAwICgtMDQwMCkKK1N1YmplY3Q6IHJlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD02MDNjNTliOTc4YzA0ZGYyMzU0ZjY4ZDRhMmRjNjc2YTc1OGZmNDZkCisKK3Jlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCisKKyQoREVTVERJUikgaXMgdGhlIHN0YW5kYXJkIGZvciBpbnN0YWxsaW5nIGludG8gb3RoZXIgdHJlZXMsIG5vdCAkKEJBU0VESVIpIC4uLgorc28gSSd2ZSBjb252ZXJ0ZWQgdGhlIE1ha2VmaWxlIHRvIHVzZSB0aGF0LiAgSSd2ZSBhbHNvIGxlZnQgaW4gJChCQVNFRElSKSBhcyBhCitkZWZhdWx0IHRvIHN1cHBvcnQgb2xkIGluc3RhbGxzOyBub3Qgc3VyZSBpZiB5b3UnZCBqdXN0IGN1dCBpdC4KKworU3RyaXBwaW5nIHNob3VsZCBiZSBsZWZ0IHRvIHRoZSBwZXJzb24gdG8gaGFuZGxlLCBub3QgYXV0b21hdGljYWxseSBkb25lIGJ5Cit0aGUgaW5zdGFsbCBzdGVwLiAgQWxzbywgYGluc3RhbGwgLXNgIGFsd2F5cyBjYWxscyBgc3RyaXBgIHdoaWNoIGlzCit3cm9uZy91bmRlc2lyZWQgaW4gY3Jvc3MtY29tcGlsaW5nIHNjZW5hcmlvcy4KKworU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggOWU5YTRiNC4uNTM0MzQyOCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEzNSwxMyArMTM1LDE0IEBAIGZyb21fbG9jYWw6IENQUEZMQUdTICs9IC1EVEVTVAorIHBvcnRtYXAubWFuIDogcG9ydG1hcC44CisgCXNlZCAkKE1BTl9TRUQpIDwgcG9ydG1hcC44ID4gcG9ydG1hcC5tYW4KKyAKKytERVNURElSID0gJChCQVNFRElSKQorIGluc3RhbGw6IGFsbAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBvcnRtYXAgJHtCQVNFRElSfS9zYmluCistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG1hcF9kdW1wICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBtYXBfc2V0ICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44CistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAke0JBU0VESVJ9L3Vzci9zaGFyZS9tYW4vbWFuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBvcnRtYXAgJChERVNURElSKS9zYmluCisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG1hcF9kdW1wICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBtYXBfc2V0ICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44CisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAkKERFU1RESVIpL3Vzci9zaGFyZS9tYW4vbWFuOAorIAorIGNsZWFuOgorIAlybSAtZiAqLm8gcG9ydG1hcCBwbWFwX2R1bXAgcG1hcF9zZXQgZnJvbV9sb2NhbCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyMWFhMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHBvcnRtYXAKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUyAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVGhlIFJQQyBwb3J0bWFwcGVyCisjIERlc2NyaXB0aW9uOiAgICAgICBQb3J0bWFwIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKKyMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQorIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KKyMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQorIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1mIC9zYmluL3BvcnRtYXAgfHwgZXhpdCAwCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nIHBvcnRtYXAgZGFlbW9uLi4uIgorICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC9zYmluL3BvcnRtYXAKKworCWlmIFsgLWYgL3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlIF07IHRoZW4KKyAgICAgICAgICBlY2hvICJSZXN0b3Jpbmcgb2xkIFJQQyBzZXJ2aWNlIGluZm9ybWF0aW9uLi4uIgorICAgICAgICAgIHNsZWVwIDEgIyBuZWVkcyBhIHNob3J0IHBhdXNlIG9yIHBtYXBfc2V0IHdvbid0IHdvcmsuIDooCisJICBwbWFwX3NldCA8L3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlCisJICBybSAtZiAvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUKKyAgICAgICAgICBlY2hvICJkb25lLiIKKyAgICAgICAgZmkKKworCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAiU3RvcHBpbmcgcG9ydG1hcCBkYWVtb24uLi4iCisgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9wb3J0bWFwCisJOzsKKyAgICByZWxvYWQpCisJOzsKKyAgICBmb3JjZS1yZWxvYWQpCisgICAgICAgICQwIHJlc3RhcnQKKwk7OworICAgIHJlc3RhcnQpCisJIyBwbWFwX2R1bXAgYW5kIHBtYXBfc2V0IG1heSBiZSBpbiBhIGRpZmZlcmVudCBwYWNrYWdlIGFuZCBub3QgaW5zdGFsbGVkLi4uCisJaWYgWyAtZiAvc2Jpbi9wbWFwX2R1bXAgLWEgLWYgL3NiaW4vcG1hcF9zZXQgXTsgdGhlbgorCQlkb19zdGF0ZT0xCisJZWxzZQorCQlkb19zdGF0ZT0wCisJZmkKKwlbICRkb19zdGF0ZSAtZXEgMSBdICYmIHBtYXBfZHVtcCA+L3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorICAgICAgICAkMCBzdG9wCisgICAgICAgICQwIHN0YXJ0CisJaWYgWyAkZG9fc3RhdGUgLWVxIDEgXTsgdGhlbgorCSAgaWYgWyAhIC1mIC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZSBdOyB0aGVuCisgICAgICAgICAgICBzbGVlcCAxCisJICAgIHBtYXBfc2V0IDwvdmFyL3J1bi9wb3J0bWFwLnN0YXRlCisJICBmaQorCSAgcm0gLWYgL3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorCWZpCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9wb3J0bWFwIHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWY5ZDdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1UaGUgUlBDIHBvcnRtYXBwZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFeGVjU3RhcnQ9QEJBU0VfU0JJTkRJUkAvcG9ydG1hcAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1MDU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK0RhdGU6IFN1biwgMTMgTWF5IDIwMDcgMjE6MTc6MzIgKzAwMDAgKC0wNDAwKQorU3ViamVjdDogZml4IGJ1aWxkaW5nIHdpdGggdGNwZCBzdXBwb3J0IGRpc2FibGVkCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD03ODQ3MjA3YWVkMWI0NGZhZjA3N2VlZDE0YTlhYzljNjgyNDRlYmE1CisKK2ZpeCBidWlsZGluZyB3aXRoIHRjcGQgc3VwcG9ydCBkaXNhYmxlZAorCitNYWtlIHN1cmUgcG1hcF9jaGVjay5jIG9ubHkgaW5jbHVkZXMgdGNwZC5oIHdoZW4gSE9TVFNfQUNDRVNTIGlzIGRlZmluZWQuCisKK1NpZ25lZC1vZmYtYnk6IFRpbW90aHkgUmVkYWVsbGkgPGRyaXp6dEBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvcG1hcF9jaGVjay5jIGIvcG1hcF9jaGVjay5jCitpbmRleCA4NGYyYzEyLi40NDNhODIyIDEwMDY0NAorLS0tIGEvcG1hcF9jaGVjay5jCisrKysgYi9wbWFwX2NoZWNrLmMKK0BAIC00NCw3ICs0NCw5IEBACisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8cnBjL3JwY2VudC5oPgorICNlbmRpZgorKyNpZmRlZiBIT1NUU19BQ0NFU1MKKyAjaW5jbHVkZSA8dGNwZC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXBfNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjdmZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYgpAQCAtMCwwICsxLDMxIEBACityZXF1aXJlIHBvcnRtYXAuaW5jCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc291cmNlZmlsZXMub3JnL05ldHdvcmtpbmcvVG9vbHMvTWlzY2VsbGFuZW5vdXMvcG9ydG1hcC02LjAudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwZC1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9ydG1hcC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3BvcnRtYXAuc2VydmljZSIKKworU1JDX1VSSVttZDVzdW1dID0gImFjMTA4YWI2OGJmMGYzNDQ3N2Y4MzE3NzkxYWFmMWZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyYzgyMGQzOWYzZTZlNzI5ZDFiZWEzMjg3YTJkOGE2YzY4NGYxMDA2ZmI5NjEyZjk3ZGNhZDRhMjgxZDQxZGUiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn1fJHtQVn0vIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIiwsdGNwLXdyYXBwZXJzIgorCitDUFBGTEFHUyArPSAiLURGQUNJTElUWT1MT0dfREFFTU9OIC1ERU5BQkxFX0ROUyAtREhPU1RTX0FDQ0VTUyIKK0NGTEFHUyArPSAiLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtZlBJQyIKK0VYVFJBX09FTUFLRSArPSAiJ05PX1RDUF9XUkFQUEVSPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3RjcC13cmFwcGVycycsICcnLCAnMScsIGQpfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgvICR7RH0ke2Jhc2Vfc2JpbmRpcn0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcG9ydG1hcC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3J0bWFwCisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvcnRtYXAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIHNlZCAtaSAtZSAncyxAQkFTRV9TQklORElSQCwke2Jhc2Vfc2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG9ydG1hcC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9ob3N0LXBlZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9ob3N0LXBlZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlMmUxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL2hvc3QtcGVlcgpAQCAtMCwwICsxLDExIEBACistZGV0YWNoCitkZWZhdWx0cm91dGUKK25vY3J0c2N0cworbG9jaworbm9hdXRoCitsY3AtZWNoby1pbnRlcnZhbCA1CitsY3AtZWNoby1mYWlsdXJlIDMKK3VzZXBlZXJkbnMKKzExNTIwMAorbG9jYWwKK2FzeW5jbWFwIDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL3BwcC1kaWFsaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjc3MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKKy91c3Ivc2Jpbi9wcHBkIGNhbGwgaG9zdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9wcHAtZGlhbGluXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWE3NmI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIFBQUCBkaWFsLWluIHRocm91Z2ggYSBzZXJpYWwgY29ubmVjdGlvbiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJwcHAiCitSREVQRU5EU18ke1BOfSA9ICJwcHAiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2hvc3QtcGVlciBcCisgICAgICAgICAgIGZpbGU6Ly9wcHAtZGlhbGluIgorCitpbmhlcml0IGFsbGFyY2ggdXNlcmFkZAorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcHAvcGVlcnMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0LXBlZXIgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BlZXJzL2hvc3QKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wcHAtZGlhbGluICR7RH0ke3NiaW5kaXJ9Cit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgJHtzYmluZGlyfS9wcHAtZGlhbGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby11c2VyLWdyb3VwIC0tZ2lkIG5vZ3JvdXAgcHBwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDAwMS1wcHAtRml4LWNvbXBpbGF0aW9uLWVycm9ycy1pbi1NYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhMmQyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBiYTBmNjA1OGQxZjI1YjJiNjBmYzMxYWIyNjU2YmYxMmE3MWZmZGFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDUgTm92IDIwMTMgMTc6MzI6NTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHBwOiBGaXggY29tcGlsYXRpb24gZXJyb3JzIGluIE1ha2VmaWxlCisKK1RoaXMgcGF0Y2ggZml4ZXMgYmVsb3cgaXNzdWVzOgorCisxLiBNYWtlIGNhbid0IGV4aXQgd2hpbGUgY29tcGlsYXRpb24gZXJyb3Igb2NjdXJzIGluIHN1YmRpciBmb3IgcGx1Z2lucyBidWlsZGluZy4KKworMi4gSWYgYnVpbGQgcHBwIHdpdGggbmV3ZXIga2VybmVsICgzLjEwLjEwKSwgaXQgd2lsbCBwaWNrICdpZl9wcHBveC5oJyBmcm9tIHN5c3Jvb3QtZGlyIGFuZAorICAgJ2lmX3BwcG9sMnRwLmgnIGZyb20gaXRzIG93biBzb3VyY2UgZGlyLCB0aGlzIGNhdXNlIGJlbG93IGJ1aWxkIGVycm9yczoKKworICAgICAgICBiaXRiYWtlX2J1aWxkL3RtcC9zeXNyb290cy9pbnRlbC14ODYtNjQvdXNyL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaDo4NDoyNjoKKyAgICAgICAgZXJyb3I6IGZpZWxkICdwcHBvbDJ0cCcgaGFzIGluY29tcGxldGUgdHlwZQorICAgICAgICAgIHN0cnVjdCBwcHBvbDJ0cGluNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgYml0YmFrZV9idWlsZC90bXAvc3lzcm9vdHMvaW50ZWwteDg2LTY0L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG94Lmg6OTk6Mjg6CisgICAgICAgIGVycm9yOiBmaWVsZCAncHBwb2wydHAnIGhhcyBpbmNvbXBsZXRlIHR5cGUKKyAgICAgICAgICBzdHJ1Y3QgcHBwb2wydHB2M2luNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorCitUaGUgJ3N5c3Jvb3QtZGlyL2lmX3BwcG94LmgnIGVuYWJsZWQgaXB2NiBzdXBwb3J0IGJ1dCB0aGUgJ3NvdXJjZS1kaXIvaWZfcHBwb2wydHAuaCcgbG9zdAorcmVsYXRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIHdlIHNob3VsZCB1c2UgYm90aCBoZWFkZXIgZmlsZXMgZnJvbSBzeXNyb290cyB0byBmaXggdGhpcworYnVpbGQgZmFpbHVyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4ICAgICAgICAgIHwgICAgMiArLQorIHBwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCB8ICAgIDIgKy0KKyBwcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXggfCAgICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXggYi9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKK2luZGV4IDBhN2VjN2IuLjJhMmMxNWEgMTAwNjQ0CistLS0gYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKKysrKyBiL3BwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eAorQEAgLTIwLDcgKzIwLDcgQEAgaW5jbHVkZSAuZGVwZW5kCisgZW5kaWYKKyAKKyBhbGw6CSQoUExVR0lOUykKKy0JZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gJChNQUtFKSAkKE1GTEFHUykgLUMgJCRkIGFsbDsgZG9uZQorKwlmb3IgZCBpbiAkKFNVQkRJUlMpOyBkbyAkKE1BS0UpICQoTUZMQUdTKSAtQyAkJGQgYWxsIHx8IGV4aXQgMTsgZG9uZQorIAorICUuc286ICUuYworIAkkKENDKSAtbyAkQCAkKExERkxBR1MpICQoQ0ZMQUdTKSAkXgorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAoraW5kZXggMTllZmY2Ny4uZmViMmY1MiAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4CitAQCAtMSw2ICsxLDYgQEAKKyAjQ0MJPSBnY2MKKyBDT1BUUwk9IC1PMiAtZworLUNGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtZlBJQworK0NGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1mUElDCisgTERGTEFHUwk9IC1zaGFyZWQKKyBJTlNUQUxMCT0gaW5zdGFsbAorIAorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAoraW5kZXggZjA3ODk5MS4uMTViOTExOCAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CitAQCAtMjYsNyArMjYsNyBAQCBJTlNUQUxMCT0gaW5zdGFsbAorIFJQX1ZFUlNJT049My44cAorIAorIENPUFRTPS1PMiAtZworLUNGTEFHUz0kKENPUFRTKSAtSS4uLy4uLy4uL2luY2x1ZGUgJy1EUlBfVkVSU0lPTj0iJChSUF9WRVJTSU9OKSInCisrQ0ZMQUdTPSQoQ09QVFMpICctRFJQX1ZFUlNJT049IiQoUlBfVkVSU0lPTikiJworIGFsbDogcnAtcHBwb2Uuc28gcHBwb2UtZGlzY292ZXJ5CisgCisgcHBwb2UtZGlzY292ZXJ5OiBwcHBvZS1kaXNjb3ZlcnkubyBkZWJ1Zy5vCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDhzZXR1cGRucyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4MjE5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitQUFBDT05GPS92YXIvcnVuL3BwcC9yZXNvbHYuY29uZgoraWYgWyAtZiAkUFBQQ09ORiBdIDsgdGhlbgorCWlmIFsgLWYgJEFDVFVBTENPTkYgXSA7IHRoZW4KKwkJaWYgWyAhIC1oICRBQ1RVQUxDT05GIC1vICEgImByZWFkbGluayAkQUNUVUFMQ09ORiAyPiYxYCIgPSAiJFBQUENPTkYiIF0gOyB0aGVuCisJCQltdiAkQUNUVUFMQ09ORiAkQUNUVUFMQ09ORi5wcHBvcmlnCisJCWZpCisJZmkKKworCWxuIC1zZiAkUFBQQ09ORiAkQUNUVUFMQ09ORgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvOTJyZW1vdmVkbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhZGVjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitpZiBbIC1mICRBQ1RVQUxDT05GLnBwcG9yaWcgXSA7IHRoZW4KKwltdiAkQUNUVUFMQ09ORi5wcHBvcmlnICRBQ1RVQUxDT05GCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jaWZkZWZyb3V0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRkYmMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2gKQEAgLTAsMCArMSwyOTIgQEAKK1RoaXMgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQuCitUaGUgb3JpZ2luYWwgcGF0Y2ggaXMgZnJvbSBEZWJpYW4gLyBTdVNFIHRvIGltcGxlbWVudCByZXBsYWNlZGVmYXVsdHJvdXRlCitSZWJhc2VkIGl0IHRvIGZpdCBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuL3N1c2UgcGF0Y2hlc10KKworZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTY6NDA6MDAuNDc4NzE2ODU1ICswODAwCitAQCAtMTk4LDYgKzE5OCwxNiBAQAorICAgICAgICJkaXNhYmxlIGRlZmF1bHRyb3V0ZSBvcHRpb24iLCBPUFRfQUxJQVMgfCBPUFRfQTJDTFIsCisgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0uZGVmYXVsdF9yb3V0ZSB9LAorIAorKyNpZmRlZiBfX2xpbnV4X18KKysgICAgeyAicmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlLAorKyAgICAgICJSZXBsYWNlIGRlZmF1bHQgcm91dGUiLCAxCisrICAgIH0sCisrICAgIHsgIm5vcmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSwKKysgICAgICAiTmV2ZXIgcmVwbGFjZSBkZWZhdWx0IHJvdXRlIiwgT1BUX0EyQ09QWSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlIH0sCisrI2VuZGlmCisgICAgIHsgInByb3h5YXJwIiwgb19ib29sLCAmaXBjcF93YW50b3B0aW9uc1swXS5wcm94eV9hcnAsCisgICAgICAgIkFkZCBwcm94eSBBUlAgZW50cnkiLCBPUFRfRU5BQkxFfDEsICZpcGNwX2FsbG93b3B0aW9uc1swXS5wcm94eV9hcnAgfSwKKyAgICAgeyAibm9wcm94eWFycCIsIG9fYm9vbCwgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnByb3h5X2FycCwKK0BAIC0yNzEsNyArMjgxLDcgQEAKKyAgICAgaXBfYWN0aXZlX3BrdAorIH07CisgCistc3RhdGljIHZvaWQgaXBjcF9jbGVhcl9hZGRycyBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QpKTsKKytzdGF0aWMgdm9pZCBpcGNwX2NsZWFyX2FkZHJzIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCwgYm9vbCkpOworIHN0YXRpYyB2b2lkIGlwY3Bfc2NyaXB0IF9fUCgoY2hhciAqLCBpbnQpKTsJLyogUnVuIGFuIHVwL2Rvd24gc2NyaXB0ICovCisgc3RhdGljIHZvaWQgaXBjcF9zY3JpcHRfZG9uZSBfX1AoKHZvaWQgKikpOworIAorQEAgLTE3NDIsNyArMTc1MiwxMiBAQAorICAgICBpZiAoIXNpZm5wbW9kZSh1LCBQUFBfSVAsIE5QTU9ERV9RVUVVRSkpCisgCXJldHVybiAwOworICAgICBpZiAod28tPmRlZmF1bHRfcm91dGUpCisrI2lmbmRlZiBfX2xpbnV4X18KKyAJaWYgKHNpZmRlZmF1bHRyb3V0ZSh1LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpKQorKyNlbHNlCisrCWlmIChzaWZkZWZhdWx0cm91dGUodSwgd28tPm91cmFkZHIsIHdvLT5oaXNhZGRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCSAgICBkZWZhdWx0X3JvdXRlX3NldFt1XSA9IDE7CisgICAgIGlmICh3by0+cHJveHlfYXJwKQorIAlpZiAoc2lmcHJveHlhcnAodSwgd28tPmhpc2FkZHIpKQorQEAgLTE4MzAsNyArMTg0NSw4IEBACisgICAgICAqLworICAgICBpZiAoZGVtYW5kKSB7CisgCWlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkciB8fCBoby0+aGlzYWRkciAhPSB3by0+aGlzYWRkcikgeworLQkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpOworKwkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIsIAorKwkJCQkgICAgICB3by0+cmVwbGFjZV9kZWZhdWx0X3JvdXRlKTsKKyAJICAgIGlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkcikgeworIAkJd2FybigiTG9jYWwgSVAgYWRkcmVzcyBjaGFuZ2VkIHRvICVJIiwgZ28tPm91cmFkZHIpOworIAkJc2NyaXB0X3NldGVudigiT0xESVBMT0NBTCIsIGlwX250b2Eod28tPm91cmFkZHIpLCAwKTsKK0BAIC0xODU1LDcgKzE4NzEsMTIgQEAKKyAKKyAJICAgIC8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCSAgICBpZiAoaXBjcF93YW50b3B0aW9uc1tmLT51bml0XS5kZWZhdWx0X3JvdXRlKSAKKysjaWZuZGVmIF9fbGludXhfXworIAkJaWYgKHNpZmRlZmF1bHRyb3V0ZShmLT51bml0LCBnby0+b3VyYWRkciwgaG8tPmhpc2FkZHIpKQorKyNlbHNlCisrCQlpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkciwKKysJCQkJCSAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCQkgICAgZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkgICAgLyogTWFrZSBhIHByb3h5IEFSUCBlbnRyeSBpZiByZXF1ZXN0ZWQuICovCitAQCAtMTkwNSw3ICsxOTI2LDEyIEBACisgCisgCS8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCWlmIChpcGNwX3dhbnRvcHRpb25zW2YtPnVuaXRdLmRlZmF1bHRfcm91dGUpIAorKyNpZm5kZWYgX19saW51eF9fCisgCSAgICBpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkcikpCisrI2Vsc2UKKysJICAgIGlmIChzaWZkZWZhdWx0cm91dGUoZi0+dW5pdCwgZ28tPm91cmFkZHIsIGhvLT5oaXNhZGRyLAorKwkJCQkJIHdvLT5yZXBsYWNlX2RlZmF1bHRfcm91dGUpKQorKyNlbmRpZgorIAkJZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkvKiBNYWtlIGEgcHJveHkgQVJQIGVudHJ5IGlmIHJlcXVlc3RlZC4gKi8KK0BAIC0xOTgzLDcgKzIwMDksNyBAQAorIAlzaWZucG1vZGUoZi0+dW5pdCwgUFBQX0lQLCBOUE1PREVfRFJPUCk7CisgCXNpZmRvd24oZi0+dW5pdCk7CisgCWlwY3BfY2xlYXJfYWRkcnMoZi0+dW5pdCwgaXBjcF9nb3RvcHRpb25zW2YtPnVuaXRdLm91cmFkZHIsCistCQkJIGlwY3BfaGlzb3B0aW9uc1tmLT51bml0XS5oaXNhZGRyKTsKKysJCQkgaXBjcF9oaXNvcHRpb25zW2YtPnVuaXRdLmhpc2FkZHIsIDApOworICAgICB9CisgCisgICAgIC8qIEV4ZWN1dGUgdGhlIGlwLWRvd24gc2NyaXB0ICovCitAQCAtMTk5OSwxMiArMjAyNSwyMSBAQAorICAqIHByb3h5IGFycCBlbnRyaWVzLCBldGMuCisgICovCisgc3RhdGljIHZvaWQKKy1pcGNwX2NsZWFyX2FkZHJzKHVuaXQsIG91cmFkZHIsIGhpc2FkZHIpCisraXBjcF9jbGVhcl9hZGRycyh1bml0LCBvdXJhZGRyLCBoaXNhZGRyLCByZXBsYWNlZGVmYXVsdHJvdXRlKQorICAgICBpbnQgdW5pdDsKKyAgICAgdV9pbnQzMl90IG91cmFkZHI7ICAvKiBsb2NhbCBhZGRyZXNzICovCisgICAgIHVfaW50MzJfdCBoaXNhZGRyOyAgLyogcmVtb3RlIGFkZHJlc3MgKi8KKysgICAgYm9vbCByZXBsYWNlZGVmYXVsdHJvdXRlOworIHsKKy0gICAgaWYgKHByb3h5X2FycF9zZXRbdW5pdF0pIHsKKysgICAgLyogSWYgcmVwbGFjZWRlZmF1bHRyb3V0ZSwgc2lmZGVmYXVsdHJvdXRlIHdpbGwgYmUgY2FsbGVkIHNvb24KKysgICAgICogd2l0aCByZXBsYWNlZGVmYXVsdHJvdXRlIHNldCBhbmQgdGhhdCB3aWxsIG92ZXJ3cml0ZSB0aGUgY3VycmVudAorKyAgICAgKiBkZWZhdWx0IHJvdXRlLiBUaGlzIGlzIHRoZSBjYXNlIG9ubHkgd2hlbiBkb2luZyBkZW1hbmQsIG90aGVyd2lzZQorKyAgICAgKiBkdXJpbmcgZGVtYW5kLCB0aGlzIGNpZmRlZmF1bHRyb3V0ZSB3b3VsZCByZXN0b3JlIHRoZSBvbGQgZGVmYXVsdAorKyAgICAgKiByb3V0ZSB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50IGluIHRoaXMgY2FzZS4gSW4gdGhlIG5vbi1kZW1hbmQKKysgICAgICogY2FzZSwgd2UnbGwgZGVsZXRlIHRoZSBkZWZhdWx0IHJvdXRlIGFuZCByZXN0b3JlIHRoZSBvbGQgaWYgdGhlcmUKKysgICAgICogaXMgb25lIHNhdmVkIGJ5IGFuIHNpZmRlZmF1bHRyb3V0ZSB3aXRoIHJlcGxhY2VkZWZhdWx0cm91dGUuCisrICAgICAqLworKyAgICBpZiAoIXJlcGxhY2VkZWZhdWx0cm91dGUgJiYgZGVmYXVsdF9yb3V0ZV9zZXRbdW5pdF0pIHsKKyAJY2lmcHJveHlhcnAodW5pdCwgaGlzYWRkcik7CisgCXByb3h5X2FycF9zZXRbdW5pdF0gPSAwOworICAgICB9CitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmggcHBwLTIuNC41L3BwcGQvaXBjcC5oCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNjo0MDo0OS41ODYyMDMxMjkgKzA4MDAKK0BAIC03MCw2ICs3MCw3IEBACisgICAgIGJvb2wgb2xkX2FkZHJzOwkJLyogVXNlIG9sZCAoSVAtQWRkcmVzc2VzKSBvcHRpb24/ICovCisgICAgIGJvb2wgcmVxX2FkZHI7CQkvKiBBc2sgcGVlciB0byBzZW5kIElQIGFkZHJlc3M/ICovCisgICAgIGJvb2wgZGVmYXVsdF9yb3V0ZTsJCS8qIEFzc2lnbiBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworKyAgICBib29sIHJlcGxhY2VfZGVmYXVsdF9yb3V0ZTsgLyogUmVwbGFjZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworICAgICBib29sIHByb3h5X2FycDsJCS8qIE1ha2UgcHJveHkgQVJQIGVudHJ5IGZvciBwZWVyPyAqLworICAgICBib29sIG5lZ192ajsJCS8qIFZhbiBKYWNvYnNvbiBDb21wcmVzc2lvbj8gKi8KKyAgICAgYm9vbCBvbGRfdmo7CQkvKiB1c2Ugb2xkIChzaG9ydCkgZm9ybSBvZiBWSiBvcHRpb24/ICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjggcHBwLTIuNC41L3BwcGQvcHBwZC44CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNjo0Mjo0Ny4xMDI0MTM4NTkgKzA4MDAKK0BAIC0xMjEsNiArMTIxLDEzIEBACisgVGhpcyBlbnRyeSBpcyByZW1vdmVkIHdoZW4gdGhlIFBQUCBjb25uZWN0aW9uIGlzIGJyb2tlbi4gIFRoaXMgb3B0aW9uCisgaXMgcHJpdmlsZWdlZCBpZiB0aGUgXGZJbm9kZWZhdWx0cm91dGVcZlIgb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZC4KKyAuVFAKKysuQiByZXBsYWNlZGVmYXVsdHJvdXRlCisrVGhpcyBvcHRpb24gaXMgYSBmbGFnIHRvIHRoZSBkZWZhdWx0cm91dGUgb3B0aW9uLiBJZiBkZWZhdWx0cm91dGUgaXMKKytzZXQgYW5kIHRoaXMgZmxhZyBpcyBhbHNvIHNldCwgcHBwZCByZXBsYWNlcyBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlCisrd2l0aCB0aGUgbmV3IGRlZmF1bHQgcm91dGUuCisrCisrCisrLlRQCisgLkIgZGlzY29ubmVjdCBcZklzY3JpcHQKKyBFeGVjdXRlIHRoZSBjb21tYW5kIHNwZWNpZmllZCBieSBcZklzY3JpcHRcZlIsIGJ5IHBhc3NpbmcgaXQgdG8gYQorIHNoZWxsLCBhZnRlcgorQEAgLTcxNyw3ICs3MjQsMTIgQEAKKyAuVFAKKyAuQiBub2RlZmF1bHRyb3V0ZQorIERpc2FibGUgdGhlIFxmSWRlZmF1bHRyb3V0ZVxmUiBvcHRpb24uICBUaGUgc3lzdGVtIGFkbWluaXN0cmF0b3Igd2hvCistd2lzaGVzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBjcmVhdGluZyBkZWZhdWx0IHJvdXRlcyB3aXRoIHBwcGQKKyt3aXNoZXMgdG8gcHJldmVudCB1c2VycyBmcm9tIGFkZGluZyBhIGRlZmF1bHQgcm91dGUgd2l0aCBwcHBkCisrY2FuIGRvIHNvIGJ5IHBsYWNpbmcgdGhpcyBvcHRpb24gaW4gdGhlIC9ldGMvcHBwL29wdGlvbnMgZmlsZS4KKysuVFAKKysuQiBub3JlcGxhY2VkZWZhdWx0cm91dGUKKytEaXNhYmxlIHRoZSBcZklyZXBsYWNlZGVmYXVsdHJvdXRlXGZSIG9wdGlvbi4gVGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdobworK3dpc2hlcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gcmVwbGFjaW5nIGEgZGVmYXVsdCByb3V0ZSB3aXRoIHBwcGQKKyBjYW4gZG8gc28gYnkgcGxhY2luZyB0aGlzIG9wdGlvbiBpbiB0aGUgL2V0Yy9wcHAvb3B0aW9ucyBmaWxlLgorIC5UUAorIC5CIG5vZGVmbGF0ZQorZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oIHBwcC0yLjQuNS9wcHBkL3BwcGQuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTY6NDM6MzYuNTE0MTQ4MzI3ICswODAwCitAQCAtNjQzLDcgKzY0MywxMSBAQAorIGludCAgY2lmNmFkZHIgX19QKChpbnQsIGV1aTY0X3QsIGV1aTY0X3QpKTsKKyAJCQkJLyogUmVtb3ZlIGFuIElQdjYgYWRkcmVzcyBmcm9tIGkvZiAqLworICNlbmRpZgorKyNpZm5kZWYgX19saW51eF9fCisgaW50ICBzaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisrI2Vsc2UKKytpbnQgIHNpZmRlZmF1bHRyb3V0ZSBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QsIGJvb2wgcmVwbGFjZV9kZWZhdWx0X3J0KSk7CisrI2VuZGlmCisgCQkJCS8qIENyZWF0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCisgaW50ICBjaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisgCQkJCS8qIERlbGV0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9zeXMtbGludXguYyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvc3lzLWxpbnV4LmMJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYwkyMDEwLTA2LTMwIDE2OjU0OjAwLjM2MjcxNjIzMSArMDgwMAorQEAgLTIwNiw2ICsyMDYsOCBAQAorIAorIHN0YXRpYyBpbnQJaWZfaXNfdXA7CS8qIEludGVyZmFjZSBoYXMgYmVlbiBtYXJrZWQgdXAgKi8KKyBzdGF0aWMgaW50CWhhdmVfZGVmYXVsdF9yb3V0ZTsJLyogR2F0ZXdheSBmb3IgZGVmYXVsdCByb3V0ZSBhZGRlZCAqLworK3N0YXRpYyBzdHJ1Y3QgcnRlbnRyeSBvbGRfZGVmX3J0OyAgICAgICAvKiBPbGQgZGVmYXVsdCByb3V0ZSAqLworK3N0YXRpYyBpbnQgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3Q7ICAvKiByZXBsYWNlIGFuZCByZXN0b3JlIG9sZCBkZWZhdWx0IHJ0ICovCisgc3RhdGljIHVfaW50MzJfdCBwcm94eV9hcnBfYWRkcjsJLyogQWRkciBmb3IgcHJveHkgYXJwIGVudHJ5IGFkZGVkICovCisgc3RhdGljIGNoYXIgcHJveHlfYXJwX2RldlsxNl07CQkvKiBEZXZpY2UgZm9yIHByb3h5IGFycCBlbnRyeSAqLworIHN0YXRpYyB1X2ludDMyX3Qgb3VyX29sZF9hZGRyOwkJLyogZm9yIGRldGVjdGluZyBhZGRyZXNzIGNoYW5nZXMgKi8KK0BAIC0xNTM3LDYgKzE1MzksOSBAQAorIAlwID0gTlVMTDsKKyAgICAgfQorIAorKyAgICBTRVRfU0FfRkFNSUxZIChydC0+cnRfZHN0LCAgICAgQUZfSU5FVCk7CisrICAgIFNFVF9TQV9GQU1JTFkgKHJ0LT5ydF9nYXRld2F5LCBBRl9JTkVUKTsKKysKKyAgICAgU0lOX0FERFIocnQtPnJ0X2RzdCkgPSBzdHJ0b3VsKGNvbHNbcm91dGVfZGVzdF9jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nYXRld2F5KSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9nd19jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nZW5tYXNrKSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9tYXNrX2NvbF0sIE5VTEwsIDE2KTsKK0BAIC0xNjA2LDIwICsxNjExLDUxIEBACisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBzaWZkZWZhdWx0cm91dGUgLSBhc3NpZ24gYSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggdGhlIGFkZHJlc3MgZ2l2ZW4uCistICovCistCistaW50IHNpZmRlZmF1bHRyb3V0ZSAoaW50IHVuaXQsIHVfaW50MzJfdCBvdXJhZGRyLCB1X2ludDMyX3QgZ2F0ZXdheSkKKy17CistICAgIHN0cnVjdCBydGVudHJ5IHJ0OworLQorLSAgICBpZiAoZGVmYXVsdHJvdXRlX2V4aXN0cygmcnQpICYmIHN0cmNtcChydC5ydF9kZXYsIGlmbmFtZSkgIT0gMCkgeworLQlpZiAocnQucnRfZmxhZ3MgJiBSVEZfR0FURVdBWSkKKy0JICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGV4aXN0aW5nIGRlZmF1bHQgcm91dGUgdmlhICVJIiwKKy0JCSAgU0lOX0FERFIocnQucnRfZ2F0ZXdheSkpOworLQllbHNlCistCSAgICBlcnJvcigibm90IHJlcGxhY2luZyBleGlzdGluZyBkZWZhdWx0IHJvdXRlIHRocm91Z2ggJXMiLAorLQkJICBydC5ydF9kZXYpOworLQlyZXR1cm4gMDsKKysgKgorKyAqIElmIHRoZSBnbG9iYWwgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgZmxhZyBpcyBzZXQsIHRoZW4gdGhpcyBmdW5jdGlvbgorKyAqIGFscmVhZHkgcmVwbGFjZWQgdGhlIG9yaWdpbmFsIHN5c3RlbSBkZWZhdWx0cm91dGUgd2l0aCBzb21lIG90aGVyCisrICogcm91dGUgYW5kIGl0IHNob3VsZCBqdXN0IHJlcGxhY2UgdGhlIGN1cnJlbnQgZGVmYXVsdHJvdXRlIHdpdGgKKysgKiBhbm90aGVyIG9uZSwgd2l0aG91dCBzYXZpbmcgdGhlIGN1cnJlbnQgcm91dGUuIFVzZTogZGVtYW5kIG1vZGUsCisrICogd2hlbiBwcHBkIHNldHMgZmlyc3QgYSBkZWZhdWx0cm91dGUgaXQgaXQncyB0ZW1wb3JhcnkgcHBwMCBhZGRyZXNzZXMKKysgKiBhbmQgdGhlbiBjaGFuZ2VzIHRoZSB0ZW1wb3JhcnkgYWRkcmVzc2VzIHRvIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSByZWFsCisrICogcHBwIGNvbm5lY3Rpb24gd2hlbiBpdCBoYXMgY29tZSB1cC4KKysgKi8KKysKKytpbnQgc2lmZGVmYXVsdHJvdXRlIChpbnQgdW5pdCwgdV9pbnQzMl90IG91cmFkZHIsIHVfaW50MzJfdCBnYXRld2F5LCBib29sIHJlcGxhY2UpCisreworKyAgICBzdHJ1Y3QgcnRlbnRyeSBydCwgdG1wX3J0OworKyAgICBzdHJ1Y3QgcnRlbnRyeSAqZGVsX3J0ID0gTlVMTDsKKysKKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0KSB7CisrCS8qIFdlIGhhdmUgYWxyZWFkeSByZWNsYWNlZCB0aGUgb3JpZ2luYWwgZGVmYXVsdHJvdXRlLCBpZiB3ZQorKyAgICAgICAgICogYXJlIGNhbGxlZCBhZ2Fpbiwgd2Ugd2lsbCBkZWxldGUgdGhlIGN1cnJlbnQgZGVmYXVsdCByb3V0ZQorKyAgICAgICAgICogYW5kIHNldCB0aGUgbmV3IGRlZmF1bHQgcm91dGUgaW4gdGhpcyBmdW5jdGlvbi4gIAorKyAgICAgICAgICogLSB0aGlzIGlzIG5vcm1hbGx5IG9ubHkgdGhlIGNhc2UgdGhlIGRvaW5nIGRlbWFuZDogKi8KKysJaWYgKGRlZmF1bHRyb3V0ZV9leGlzdHMoICZ0bXBfcnQgKSkKKysJCWRlbF9ydCA9ICZ0bXBfcnQ7CisrICAgIH0gZWxzZSBpZiAoIGRlZmF1bHRyb3V0ZV9leGlzdHMoICZvbGRfZGVmX3J0ICAgICAgICAgICAgICAgICkgJiYKKysJICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCAgb2xkX2RlZl9ydC5ydF9kZXYsIGlmbmFtZSApICE9IDApIHsKKysJLyogV2UgZGlkIG5vdCB5ZXQgcmVwbGFjZSBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlLCBsZXQncworKwkgKiBjaGVjayBpZiB3ZSBzaG91bGQgc2F2ZSBhbmQgcmVwbGFjZSBhIGRlZmF1bHQgcm91dGU6CisrICAgICAgICAgKi8KKysJdV9pbnQzMl90IG9sZF9nYXRld2F5ID0gU0lOX0FERFIob2xkX2RlZl9ydC5ydF9nYXRld2F5KTsKKysJaWYgKG9sZF9nYXRld2F5ICE9IGdhdGV3YXkpIHsKKysJICAgIGlmICghcmVwbGFjZSkgeworKwkgICAgICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIG9sZF9nYXRld2F5KTsKKysJCXJldHVybiAwOworKwkgICAgfSBlbHNlIHsKKysJCS8vIHdlIG5lZWQgdG8gY29weSBydF9kZXYgYmVjYXVzZSB3ZSBuZWVkIGl0IHBlcm1hbmVudCB0b286CisrCQljaGFyICogdG1wX2RldiA9IG1hbGxvYyhzdHJsZW4ob2xkX2RlZl9ydC5ydF9kZXYpKzEpOworKwkJc3RyY3B5KHRtcF9kZXYsIG9sZF9kZWZfcnQucnRfZGV2KTsKKysJCW9sZF9kZWZfcnQucnRfZGV2ID0gdG1wX2RldjsKKysKKysJCW5vdGljZSgicmVwbGFjaW5nIG9sZCBkZWZhdWx0IHJvdXRlIHRvICVzIFslSV0iLAorKwkJCW9sZF9kZWZfcnQucnRfZGV2LCBvbGRfZ2F0ZXdheSk7CisrCSAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAxOworKwkJZGVsX3J0ID0gJm9sZF9kZWZfcnQ7CisrCSAgICB9CisrCX0KKyAgICAgfQorIAorICAgICBtZW1zZXQgKCZydCwgMCwgc2l6ZW9mIChydCkpOworQEAgLTE2MzgsNiArMTY3NCwxMiBAQAorIAkgICAgZXJyb3IoImRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0FERFJUKTogJW0iKTsKKyAJcmV0dXJuIDA7CisgICAgIH0KKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0ICYmIGRlbF9ydCkKKysgICAgICAgIGlmIChpb2N0bChzb2NrX2ZkLCBTSU9DREVMUlQsIGRlbF9ydCkgPCAwKSB7CisrCSAgICBpZiAoICEgb2tfZXJyb3IgKCBlcnJubyApKQorKwkgICAgICAgIGVycm9yKCJkZWwgb2xkIGRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0RFTFJUKTogJW0oJWQpIiwgZXJybm8pOworKwkgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisgCisgICAgIGhhdmVfZGVmYXVsdF9yb3V0ZSA9IDE7CisgICAgIHJldHVybiAxOworQEAgLTE2NzMsNiArMTcxNSwxNiBAQAorIAkgICAgcmV0dXJuIDA7CisgCX0KKyAgICAgfQorKyAgICBpZiAoZGVmYXVsdF9ydF9yZXBsX3Jlc3QpIHsKKysJbm90aWNlKCJyZXN0b3Jpbmcgb2xkIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIFNJTl9BRERSKG9sZF9kZWZfcnQucnRfZ2F0ZXdheSkpOworKyAgICAgICAgaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NBRERSVCwgJm9sZF9kZWZfcnQpIDwgMCkgeworKwkgICAgaWYgKCAhIG9rX2Vycm9yICggZXJybm8gKSkKKysJICAgICAgICBlcnJvcigicmVzdG9yZSBkZWZhdWx0IHJvdXRlIGlvY3RsKFNJT0NBRERSVCk6ICVtKCVkKSIsIGVycm5vKTsKKysJICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAwOworKyAgICB9CisgCisgICAgIHJldHVybiAxOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY29wdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmZjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3BwcDogdXNlIGJ1aWxkIHN5c3RlbSBDRkxBR1Mgd2hlbiBjb21waWxpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK092ZXJyaWRlIHRoZSBoYXJkLWNvZGVkIENPUFRTIG1ha2UgdmFyaWFibGVzIHdpdGgKK0NGTEFHUy4gIEFkZCBDT1BUUyBpbnRvIG9uZSBNYWtlZmlsZSB0aGF0IGRpZCBub3QKK3VzZSBpdC4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CisrKysgYi9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CitAQCAtMTIsNyArMTIsNyBAQCBWRVJTSU9OID0gJChzaGVsbCBhd2sgLUYgJyInICcvVkVSU0lPTi8gCisgSU5TVEFMTAk9IGluc3RhbGwKKyAKKyBQTFVHSU49cmFkaXVzLnNvIHJhZGF0dHIuc28gcmFkcmVhbG1zLnNvCistQ0ZMQUdTPS1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtTzIgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorK0NGTEFHUz0tSS4gLUkuLi8uLiAtSS4uLy4uLy4uL2luY2x1ZGUgJChDT1BUUykgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorIAorICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNaWNyb3NvZnQncworICMgTVMtQ0hBUCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvZml4LUNWRS0yMDE1LTMzMTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllZGIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3BwcDogQnVmZmVyIG92ZXJmbG93IGluIHJhZGl1cyBwbHVnaW4KKworRnJvbTogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP21zZz01O2J1Zz03ODI0NTAKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitPbiBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDY1NTM1IHByb2Nlc3NlcyBydW5uaW5nLCBwcHBkIGFib3J0cyB3aGVuCitzZW5kaW5nIGEgInN0YXJ0IiBhY2NvdW50aW5nIG1lc3NhZ2UgdG8gdGhlIFJBRElVUyBzZXJ2ZXIgYmVjYXVzZSBvZiBhCitidWZmZXIgb3ZlcmZsb3cgaW4gcmNfbWtzaWQuCisKK1RoZSBwcm9jZXNzIGlkIGlzIHVzZWQgaW4gcmNfbWtzaWQgdG8gZ2VuZXJhdGUgYSBwc2V1ZG8tdW5pcXVlIHN0cmluZywKK2Fzc3VtaW5nIHRoYXQgdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGlkIHdpbGwgYmUgYXQgbW9zdCA0CitjaGFyYWN0ZXJzIChGRkZGKS4gX19zcHJpbnRmX2NoaygpLCB1c2VkIHdoZW4gY29tcGlsaW5nIHdpdGgKK29wdGltaXphdGlvbiBsZXZlbHMgZ3JlYXRlciB0aGFuIDAgYW5kIEZPUlRJRllfU09VUkNFLCBkZXRlY3RzIHRoZQorYnVmZmVyIG92ZXJmbG93IGFuZCBtYWtlcyBwcHBkIGNyYXNoLgorCitUaGUgZm9sbG93aW5nIHBhdGNoIGZpeGVzIHRoZSBwcm9ibGVtLgorCistLS0gcHBwLTIuNC42Lm9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKKysrKyBwcHAtMi40LjYvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKK0BAIC03Nyw3ICs3Nyw3IEBAIHJjX21rc2lkICh2b2lkKQorICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBjbnQgPSAwOworICAgc3ByaW50ZiAoYnVmLCAiJTA4bFglMDRYJTAyaFgiLAorIAkgICAodW5zaWduZWQgbG9uZyBpbnQpIHRpbWUgKE5VTEwpLAorLQkgICAodW5zaWduZWQgaW50KSBnZXRwaWQgKCksCisrCSAgICh1bnNpZ25lZCBpbnQpIGdldHBpZCAoKSAlIDY1NTM1LAorIAkgICBjbnQgJiAweEZGKTsKKyAgIGNudCsrOworICAgcmV0dXJuIGJ1ZjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjMDEzNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0CkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyAgIC9ldGMvaW5pdC5kL3BwcDogc3RhcnQgb3Igc3RvcCBQUFAgbGluay4KKyMKKyMgSWYgeW91IHdhbnQgUFBQIHN0YXJ0ZWQgb24gYm9vdCB0aW1lIChtb3N0IGRpYWx1cCBzeXN0ZW1zIHdvbid0IG5lZWQgaXQpCisjIHJlbmFtZSB0aGUgL2V0Yy9wcHAvbm9fcHBwX29uX2Jvb3QgZmlsZSB0byAvZXRjL3BwcC9wcHBfb25fYm9vdCwgYW5kCisjIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBjb21tZW50cyBpbiB0aGF0IGZpbGUuCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14IC91c3Ivc2Jpbi9wcHBkIC1hIC1mIC9ldGMvcHBwL3BwcF9vbl9ib290IHx8IGV4aXQgMAoraWYgWyAteCAvZXRjL3BwcC9wcHBfb25fYm9vdCBdOyB0aGVuIFJVTkZJTEU9MTsgZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgZWNobyAtbiAiU3RhcnRpbmcgdXAgUFBQIGxpbms6IHBwcGQiCisgICAgICBpZiBbICIkUlVORklMRSIgPSAiMSIgXTsgdGhlbgorICAgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgICAgZWxzZQorICAgICAgICBwcHBkIGNhbGwgcHJvdmlkZXIKKyAgICAgIGZpCisgICAgICBlY2hvICIuIgorICAgIDs7CisgIHN0b3ApCisgICAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIFBQUCBsaW5rOiBwcHBkIgorICAgICAgaWYgWyAiJFJVTkZJTEUiID0gIjEiIF07IHRoZW4KKyAgICAgICAgcG9mZgorICAgICAgZWxzZQorICAgICAgICBwb2ZmIHByb3ZpZGVyCisgICAgICBmaQorICAgICAgZWNobyAiLiIKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9wcHBkOworICAgIGV4aXQgJD8KKyAgICA7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKyAgICBlY2hvIC1uICJSZXN0YXJ0aW5nIFBQUCBsaW5rOiBwcHBkIgorICAgIGlmIFsgIiRSVU5GSUxFIiA9ICIxIiBdOyB0aGVuICAgICAgCisgICAgICBwb2ZmCisgICAgICBzbGVlcCA1CisgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAKKyAgICAgIHBvZmYgcHJvdmlkZXIKKyAgICAgIHNsZWVwIDUKKyAgICAgIHBwcGQgY2FsbCBwcm92aWRlcgorICAgIGZpCisgICAgZWNobyAiLiIKKyAgICA7OworICAqKQorICAgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3BwcCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorICAgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC1kb3duIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNmQzNTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93bgpAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC1kb3duLHYgMS4yIDE5OTgvMDIvMTAgMjE6MjE6NTUgcGhpbCBFeHAgJAorIworIyBUaGlzIHNjcmlwdCBpcyBydW4gYnkgdGhlIHBwcGQgX2FmdGVyXyB0aGUgbGluayBpcyBicm91Z2h0IGRvd24uCisjIEl0IHVzZXMgcnVuLXBhcnRzIHRvIHJ1biBzY3JpcHRzIGluIC9ldGMvcHBwL2lwLWRvd24uZCwgc28gdG8gZGVsZXRlCisjIHJvdXRlcywgdW5zZXQgSVAgYWRkcmVzc2VzIGV0Yy4geW91IHNob3VsZCBjcmVhdGUgc2NyaXB0KHMpIHRoZXJlLgorIworIyBCZSBhd2FyZSB0aGF0IG90aGVyIHBhY2thZ2VzIG1heSBpbmNsdWRlIC9ldGMvcHBwL2lwLWRvd24uZCBzY3JpcHRzIChuYW1lZAorIyBhZnRlciB0aGF0IHBhY2thZ2UpLCBzbyBjaG9vc2UgbG9jYWwgc2NyaXB0IG5hbWVzIHdpdGggdGhhdCBpbiBtaW5kLgorIworIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyMgICAgQXJnICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCisjICAgICQxICAgSW50ZXJmYWNlIG5hbWUgICAgICAgICAgICAgICAgcHBwMAorIyAgICAkMiAgIFRoZSB0dHkgICAgICAgICAgICAgICAgICAgICAgIHR0eVMxCisjICAgICQzICAgVGhlIGxpbmsgc3BlZWQgICAgICAgICAgICAgICAgMzg0MDAKKyMgICAgJDQgICBMb2NhbCBJUCBudW1iZXIgICAgICAgICAgICAgICAxMi4zNC41Ni43OAorIyAgICAkNSAgIFBlZXIgIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljk5CisjICAgICQ2ICAgT3B0aW9uYWwgYGBpcHBhcmFtJycgdmFsdWUgICAgZm9vCisKKyMgVGhlICBlbnZpcm9ubWVudCBpcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgdGhpcyBzY3JpcHQKKyMgc28gdGhlIHBhdGggbXVzdCBiZSByZXNldAorUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4KK2V4cG9ydCBQQVRICisjIFRoZXNlIHZhcmlhYmxlcyBhcmUgZm9yIHRoZSB1c2Ugb2YgdGhlIHNjcmlwdHMgcnVuIGJ5IHJ1bi1wYXJ0cworUFBQX0lGQUNFPSIkMSIKK1BQUF9UVFk9IiQyIgorUFBQX1NQRUVEPSIkMyIKK1BQUF9MT0NBTD0iJDQiCitQUFBfUkVNT1RFPSIkNSIKK1BQUF9JUFBBUkFNPSIkNiIKK2V4cG9ydCBQUFBfSUZBQ0UgUFBQX1RUWSBQUFBfU1BFRUQgUFBQX0xPQ0FMIFBQUF9SRU1PVEUgUFBQX0lQUEFSQU0KKworIyBhcyBhbiBhZGRpdGlvbmFsIGNvbnZlbmllbmNlLCAkUFBQX1RUWU5BTUUgaXMgc2V0IHRvIHRoZSB0dHkgbmFtZSwKKyMgc3RyaXBwZWQgb2YgL2Rldi8gKGlmIHByZXNlbnQpIGZvciBlYXNpZXIgbWF0Y2hpbmcuCitQUFBfVFRZTkFNRT1gL3Vzci9iaW4vYmFzZW5hbWUgIiQyImAKK2V4cG9ydCBQUFBfVFRZTkFNRSAKKworIyBNYWluIFNjcmlwdCBzdGFydHMgaGVyZQorCitydW4tcGFydHMgL2V0Yy9wcHAvaXAtZG93bi5kCisKKyMgbGFzdCBsaW5lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2lwLXVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjMmZhZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC11cCx2IDEuMiAxOTk4LzAyLzEwIDIxOjI1OjM0IHBoaWwgRXhwICQKKyMKKyMgVGhpcyBzY3JpcHQgaXMgcnVuIGJ5IHRoZSBwcHBkIGFmdGVyIHRoZSBsaW5rIGlzIGVzdGFibGlzaGVkLgorIyBJdCB1c2VzIHJ1bi1wYXJ0cyB0byBydW4gc2NyaXB0cyBpbiAvZXRjL3BwcC9pcC11cC5kLCBzbyB0byBhZGQgcm91dGVzLAorIyBzZXQgSVAgYWRkcmVzcywgcnVuIHRoZSBtYWlscSBldGMuIHlvdSBzaG91bGQgY3JlYXRlIHNjcmlwdChzKSB0aGVyZS4KKyMKKyMgQmUgYXdhcmUgdGhhdCBvdGhlciBwYWNrYWdlcyBtYXkgaW5jbHVkZSAvZXRjL3BwcC9pcC11cC5kIHNjcmlwdHMgKG5hbWVkCisjIGFmdGVyIHRoYXQgcGFja2FnZSksIHNvIGNob29zZSBsb2NhbCBzY3JpcHQgbmFtZXMgd2l0aCB0aGF0IGluIG1pbmQuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorIyAgICBBcmcgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKKyMgICAgJDEgICBJbnRlcmZhY2UgbmFtZSAgICAgICAgICAgICAgICBwcHAwCisjICAgICQyICAgVGhlIHR0eSAgICAgICAgICAgICAgICAgICAgICAgdHR5UzEKKyMgICAgJDMgICBUaGUgbGluayBzcGVlZCAgICAgICAgICAgICAgICAzODQwMAorIyAgICAkNCAgIExvY2FsIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljc4CisjICAgICQ1ICAgUGVlciAgSVAgbnVtYmVyICAgICAgICAgICAgICAgMTIuMzQuNTYuOTkKKyMgICAgJDYgICBPcHRpb25hbCBgYGlwcGFyYW0nJyB2YWx1ZSAgICBmb28KKworIyBUaGUgIGVudmlyb25tZW50IGlzIGNsZWFyZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGlzIHNjcmlwdAorIyBzbyB0aGUgcGF0aCBtdXN0IGJlIHJlc2V0CitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbgorZXhwb3J0IFBBVEgKKyMgVGhlc2UgdmFyaWFibGVzIGFyZSBmb3IgdGhlIHVzZSBvZiB0aGUgc2NyaXB0cyBydW4gYnkgcnVuLXBhcnRzCitQUFBfSUZBQ0U9IiQxIgorUFBQX1RUWT0iJDIiCitQUFBfU1BFRUQ9IiQzIgorUFBQX0xPQ0FMPSIkNCIKK1BQUF9SRU1PVEU9IiQ1IgorUFBQX0lQUEFSQU09IiQ2IgorZXhwb3J0IFBQUF9JRkFDRSBQUFBfVFRZIFBQUF9TUEVFRCBQUFBfTE9DQUwgUFBQX1JFTU9URSBQUFBfSVBQQVJBTQorCisKKyMgYXMgYW4gYWRkaXRpb25hbCBjb252ZW5pZW5jZSwgJFBQUF9UVFlOQU1FIGlzIHNldCB0byB0aGUgdHR5IG5hbWUsCisjIHN0cmlwcGVkIG9mIC9kZXYvIChpZiBwcmVzZW50KSBmb3IgZWFzaWVyIG1hdGNoaW5nLgorUFBQX1RUWU5BTUU9YC91c3IvYmluL2Jhc2VuYW1lICIkMiJgCitleHBvcnQgUFBQX1RUWU5BTUUgCisKKyMgTWFpbiBTY3JpcHQgc3RhcnRzIGhlcmUKKworcnVuLXBhcnRzIC9ldGMvcHBwL2lwLXVwLmQKKworIyBsYXN0IGxpbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTcxN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1RoZSBwYXRjaCBjb21lcyBmcm9tIE9wZW5FbWJlZGRlZC4KK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBkYXRlZCBmcm9tIE9FLUNsYXNzaWMgdG8gaW5jbHVkZSB0aGUgcGNhcCBodW5rLgorU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE3OjA4OjIxLjgwNjM2MzA0MiArMDgwMAorQEAgLTExNywxMCArMTE3LDEwIEBACisgI0xJQlMgICAgICs9IC1sc2hhZG93ICQoTElCUykKKyBlbmRpZgorIAorLWlmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisrI2lmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisgQ0ZMQUdTICArPSAtREhBVkVfQ1JZUFRfSD0xCisgTElCUwkrPSAtbGNyeXB0CistZW5kaWYKKysjZW5kaWYKKyAKKyBpZmRlZiBORUVEREVTCisgaWZuZGVmIFVTRV9DUllQVAorQEAgLTE2OSwxMCArMTY5LDEwIEBACisgZW5kaWYKKyAKKyBpZmRlZiBGSUxURVIKKy1pZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorKyNpZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorIExJQlMgICAgKz0gLWxwY2FwCisgQ0ZMQUdTICArPSAtRFBQUF9GSUxURVIKKy1lbmRpZgorKyNlbmRpZgorIGVuZGlmCisgCisgaWZkZWYgSEFWRV9JTkVUNgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA5YmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorVGhlIHBhdGNoIGNvbWVzIGZyb20gT3BlbkVtYmVkZGVkCitSZWJhc2VkIGZvciBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL2NoYXQvTWFrZWZpbGUubGludXggcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9jaGF0L01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MTozMC40NTAxMTg0NDYgKzA4MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgCisgaW5zdGFsbDogY2hhdAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgY2hhdCAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBjaGF0ICQoQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCBjaGF0LjggJChNQU5ESVIpCisgCisgY2xlYW46CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUyOjExLjIxNDE3MDYwNyArMDgwMAorQEAgLTk5LDcgKzk5LDcgQEAKKyBDRkxBR1MJKz0gLURVU0VfU1JQIC1ET1BFTlNTTCAtSS91c3IvbG9jYWwvc3NsL2luY2x1ZGUKKyBMSUJTCSs9IC1sc3JwIC1ML3Vzci9sb2NhbC9zc2wvbGliIC1sY3J5cHRvCisgVEFSR0VUUwkrPSBzcnAtZW50cnkKKy1FWFRSQUlOU1RBTEwgPSAkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBzcnAtZW50cnkgJChCSU5ESVIpL3NycC1lbnRyeQorK0VYVFJBSU5TVEFMTCA9ICQoSU5TVEFMTCkgLWMgLW0gNTU1IHNycC1lbnRyeSAkKEJJTkRJUikvc3JwLWVudHJ5CisgTUFOUEFHRVMgKz0gc3JwLWVudHJ5LjgKKyBFWFRSQUNMRUFOICs9IHNycC1lbnRyeS5vCisgTkVFRERFUz15CitAQCAtMjAwLDcgKzIwMCw3IEBACisgaW5zdGFsbDogcHBwZAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCisgCSQoRVhUUkFJTlNUQUxMKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBwcHBkICQoQklORElSKS9wcHBkCisrCSQoSU5TVEFMTCkgLWMgLW0gNTU1IHBwcGQgJChCSU5ESVIpL3BwcGQKKyAJaWYgY2hncnAgcHBwdXNlcnMgJChCSU5ESVIpL3BwcGQgMj4vZGV2L251bGw7IHRoZW4gXAorIAkgIGNobW9kIG8tcngsdStzICQoQklORElSKS9wcHBkOyBmaQorIAkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBkLjggJChNQU5ESVIpCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDc2NzYxODcgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjQ3Ljc1MDE4MjI2NyArMDgwMAorQEAgLTM2LDExICszNiwxMSBAQAorIAorIGluc3RhbGw6IGFsbAorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA3NTUgcmFkaXVzLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRhdHRyLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRyZWFsbXMuc28gJChMSUJESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkaXVzLjggJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkYXR0ci44ICQoTUFORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSByYWRpdXMuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZGF0dHIuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZHJlYWxtcy5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRpdXMuOCAkKE1BTkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRhdHRyLjggJChNQU5ESVIpCisgCisgcmFkaXVzLnNvOiByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorIAkkKENDKSAtbyByYWRpdXMuc28gLXNoYXJlZCByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQ3Njc2MTg3ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjE1LjQ1NDQ4Njg3NyArMDgwMAorQEAgLTQzLDkgKzQzLDkgQEAKKyAKKyBpbnN0YWxsOiBhbGwKKyAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChMSUJESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNDU1MCBycC1wcHBvZS5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA0NTUwIHJwLXBwcG9lLnNvICQoTElCRElSKQorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKEJJTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA1NTUgcHBwb2UtZGlzY292ZXJ5ICQoQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDU1NSBwcHBvZS1kaXNjb3ZlcnkgJChCSU5ESVIpCisgCisgY2xlYW46CisgCXJtIC1mICoubyAqLnNvIHBwcG9lLWRpc2NvdmVyeQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGR1bXAvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkdW1wL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MjoyNS43NjIxODM1MzcgKzA4MDAKK0BAIC0xNyw1ICsxNyw1IEBACisgCisgaW5zdGFsbDoKKyAJbWtkaXIgLXAgJChCSU5ESVIpICQoTUFORElSKQorLQkkKElOU1RBTEwpIC1zIC1jIHBwcGR1bXAgJChCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgcHBwZHVtcCAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwZHVtcC44ICQoTUFORElSKQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBzdGF0cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTI6NDIuNDg2MzQxMDgxICswODAwCitAQCAtMjIsNyArMjIsNyBAQAorIAorIGluc3RhbGw6IHBwcHN0YXRzCisgCS1ta2RpciAtcCAkKE1BTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwc3RhdHMuOCAkKE1BTkRJUikKKyAKKyBwcHBzdGF0czogJChQUFBTVEFUU1JDUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BhcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNjMzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcGFwCkBAIC0wLDAgKzEsMjIgQEAKKyMgWW91IGNhbiB1c2UgdGhpcyBzY3JpcHQgdW5tb2RpZmllZCB0byBjb25uZWN0IHRvIHNpdGVzIHdoaWNoIGFsbG93CisjIGF1dGhlbnRpY2F0aW9uIHZpYSBQQVAsIENIQVAgYW5kIHNpbWlsYXIgcHJvdG9jb2xzLgorIyBUaGlzIHNjcmlwdCBjYW4gYmUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBwcHBkIHBlZXIgY29uZmlndXJhdGlvbnMuCisjIFRvIHVzZSBpdCwgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciAvZXRjL3BwcC9wZWVycy8gZmlsZToKKyMKKyMgY29ubmVjdCAiL3Vzci9zYmluL2NoYXQgLXYgLWYgL2V0Yy9jaGF0c2NyaXB0cy9wYXAgLVQgUEhPTkUtTlVNQkVSIgorIyB1c2VyIFlPVVItVVNFUk5BTUUtSU4tUEFQLVNFQ1JFVFMKKyMgbm9hdXRoCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBzZWUgdGhlIGNvbm5lY3Qgc3BlZWQuCisjIEl0IHdpbGwgYmUgbG9nZ2VkIHRvIHN0ZGVyciBvciB0byB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCB0aGUgLXIgY2hhdCBvcHRpb24uCisjUkVQT1JUCQlDT05ORUNUCisKK0FCT1JUCQlCVVNZCitBQk9SVAkJVk9JQ0UKK0FCT1JUCQkiTk8gQ0FSUklFUiIKK0FCT1JUCQkiTk8gRElBTFRPTkUiCitBQk9SVAkJIk5PIERJQUwgVE9ORSIKKyIiCQlBVFoKK09LCQlBVERUXFQKK0NPTk5FQ1QJCSIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MjFhOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjIExldHMgc2VlIGhvdyBtYW55IHBwcGRzIGFyZSBydW5uaW5nLi4uLgorc2V0IC0tIGBjYXQgL3Zhci9ydW4vcHBwKi5waWQgMj4vZGV2L251bGxgCisKK2Nhc2UgJCMgaW4KKyAgMCkgIyBwcHBkIG9ubHkgY3JlYXRlcyBhIHBpZCBmaWxlIG9uY2UgcHBwIGlzIHVwLCBzbyBsZXQncyB0cnkga2lsbGluZyBwcHBkCisgICAgICMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSd2ZSBub3QgZ290IHRoYXQgZmFyIHlldC4KKyAgICAga2lsbGFsbCBwcHBkCisgICAgIDs7CisgIDEpICMgSWYgb25seSBvbmUgd2FzIHJ1bm5pbmcgdGhlbiBpdCBjYW4gYmUga2lsbGVkIChhcHBhcmVudGx5IGtpbGxhbGwKKyAgICAgIyBjYXVzZWQgcHJvYmxlbXMgZm9yIHNvbWUsIHNvIGxldHMgdHJ5IGtpbGxpbmcgdGhlIHBpZCBmcm9tIHRoZSBmaWxlKQorICAgICBraWxsICQxCisgICAgIDs7CisgICopICMgTW9yZSB0aGFuIG9uZSEgQWllZWhoLi4gRG9udCBrbm93IHdoaWNoIG9uZSB0byBraWxsLgorICAgICBlY2hvICJNb3JlIHRoYW4gb25lIHBwcGQgcnVubmluZy4gTm9uZSBzdG9wcGVkIgorICAgICBleGl0IDEKKyAgICAgOzsKK2VzYWMKKworaWYgWyAtciAvdmFyL3J1bi9wcHAtcXVpY2sgXQordGhlbgorICAgIHJtIC1mIC92YXIvcnVuL3BwcC1xdWljaworZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjMDU5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvbgpAQCAtMCwwICsxLDkgQEAKKyMhL2Jpbi9zaAorCitpZiBbICIkMSIgPSAicXVpY2siIF0KK3RoZW4KKyAgICB0b3VjaCAvdmFyL3J1bi9wcHAtcXVpY2sKKyAgICBzaGlmdAorZmkKKworL3Vzci9zYmluL3BwcGQgY2FsbCAkezE6LXByb3ZpZGVyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwQC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwQC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjBiNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBALnNlcnZpY2UKQEAgLTAsMCArMSw5IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBQUCBsaW5rIHRvICVJCitCZWZvcmU9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3BwcGQgY2FsbCAlSSBub2RldGFjaCBub2xvZworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcF9vbl9ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTM3NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdApAQCAtMCwwICsxLDIxIEBACisjIyMhL2Jpbi9zaAorIworIyAgIFJlbmFtZSB0aGlzIGZpbGUgdG8gcHBwX29uX2Jvb3QgYW5kIHBwcGQgd2lsbCBiZSBmaXJlZCB1cCBhcworIyAgIHNvb24gYXMgdGhlIHN5c3RlbSBjb21lcyB1cCwgY29ubmVjdGluZyB0byBgcHJvdmlkZXInLgorIworIyAgIElmIHlvdSBhbHNvIG1ha2UgdGhpcyBmaWxlIGV4ZWN1dGFibGUsIGFuZCByZXBsYWNlIHRoZSBmaXJzdCBsaW5lCisjICAgd2l0aCBqdXN0ICIjIS9iaW4vc2giLCB0aGUgY29tbWFuZHMgYmVsb3cgd2lsbCBiZSBleGVjdXRlZCBpbnN0ZWFkLgorIworCisjIFRoZSBsb2NhdGlvbiBvZiB0aGUgcHBwIGRhZW1vbiBpdHNlbGYgKHNob3VsZG4ndCBuZWVkIHRvIGJlIGNoYW5nZWQpCitQUFBEPS91c3Ivc2Jpbi9wcHBkCisKKyMgVGhlIGRlZmF1bHQgcHJvdmlkZXIgdG8gY29ubmVjdCB0bworJFBQUEQgY2FsbCBwcm92aWRlcgorCisjIEFkZGl0aW9uYWwgY29ubmVjdGlvbnMsIHdoaWNoIHdvdWxkIGp1c3QgdXNlIHNldHRpbmdzIGZyb20KKyMgL2V0Yy9wcHAvb3B0aW9ucy48dHR5PgorIyRQUFBEIHR0eVMwCisjJFBQUEQgdHR5UzEKKyMkUFBQRCB0dHlTMgorIyRQUFBEIHR0eVMzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBkLXJlc29sdi12YXJydW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBkLXJlc29sdi12YXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyNDE0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcGQtcmVzb2x2LXZhcnJ1bi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitUaGUgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQKK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTc6MDI6MzMuOTMwMzkzMjgzICswODAwCitAQCAtNTUsNiArNTUsOCBAQAorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlICJwcHBkLmgiCisgI2luY2x1ZGUgImZzbS5oIgorQEAgLTIwOTUsNiArMjA5NywxNCBAQAorICAgICB1X2ludDMyX3QgcGVlcmRuczEsIHBlZXJkbnMyOworIHsKKyAgICAgRklMRSAqZjsKKysgICAgc3RydWN0IHN0YXQgZGlyaW5mbzsKKysKKysgICAgaWYoc3RhdChfUEFUSF9PVVRESVIsICZkaXJpbmZvKSkgeworKyAgICAgICAgaWYobWtkaXIoX1BBVEhfT1VURElSLCAwNzc1KSkgeworKyAgICAgICAgICAgIGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlczogJW0iLCBfUEFUSF9PVVRESVIpOworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgfQorIAorICAgICBmID0gZm9wZW4oX1BBVEhfUkVTT0xWLCAidyIpOworICAgICBpZiAoZiA9PSBOVUxMKSB7CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wYXRobmFtZXMuaCBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGF0aG5hbWVzLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAkyMDEwLTA2LTMwIDE3OjAzOjIwLjU5NDM3MTA1NSArMDgwMAorQEAgLTMwLDcgKzMwLDggQEAKKyAjZGVmaW5lIF9QQVRIX1RUWU9QVAkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvb3B0aW9ucy4iCisgI2RlZmluZSBfUEFUSF9DT05ORVJSUwkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvY29ubmVjdC1lcnJvcnMiCisgI2RlZmluZSBfUEFUSF9QRUVSRklMRVMJIF9ST09UX1BBVEggIi9ldGMvcHBwL3BlZXJzLyIKKy0jZGVmaW5lIF9QQVRIX1JFU09MVgkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvcmVzb2x2LmNvbmYiCisrI2RlZmluZSBfUEFUSF9PVVRESVIJX1JPT1RfUEFUSCBfUEFUSF9WQVJSVU4gIi9wcHAiCisrI2RlZmluZSBfUEFUSF9SRVNPTFYJX1BBVEhfT1VURElSICIvcmVzb2x2LmNvbmYiCisgCisgI2RlZmluZSBfUEFUSF9VU0VST1BUCSAiLnBwcHJjIgorICNkZWZpbmUJX1BBVEhfUFNFVURPTllNCSAiLnBwcF9wc2V1ZG9ueW0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3Byb3ZpZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NGQ3MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlcgpAQCAtMCwwICsxLDM1IEBACisjIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgYSBkaWFsdXAgY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkIHdpdGggUEFQIG9yIENIQVAKKyMKKyMgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHVzZWQgYnkgcG9uKDEpIGFuZCBwb2ZmKDEpLgorIyBTZWUgdGhlIG1hbnVhbCBwYWdlIHBwcGQoOCkgZm9yIGluZm9ybWF0aW9uIG9uIGFsbCB0aGUgb3B0aW9ucy4KKworIyBNVVNUIENIQU5HRTogcmVwbGFjZSBteXVzZXJuYW1lQHJlYWxtIHdpdGggdGhlIFBQUCBsb2dpbiBuYW1lIGdpdmVuIHRvCisjIHlvdXIgYnkgeW91ciBwcm92aWRlci4KKyMgVGhlcmUgc2hvdWxkIGJlIGEgbWF0Y2hpbmcgZW50cnkgd2l0aCB0aGUgcGFzc3dvcmQgaW4gL2V0Yy9wcHAvcGFwLXNlY3JldHMKKyMgYW5kL29yIC9ldGMvcHBwL2NoYXAtc2VjcmV0cy4KK3VzZXIgIm15dXNlcm5hbWVAcmVhbG0iCisKKyMgTVVTVCBDSEFOR0U6IHJlcGxhY2UgKioqKioqKiogd2l0aCB0aGUgcGhvbmUgbnVtYmVyIG9mIHlvdXIgcHJvdmlkZXIuCisjIFRoZSAvZXRjL2NoYXRzY3JpcHRzL3BhcCBjaGF0IHNjcmlwdCBtYXkgYmUgbW9kaWZpZWQgdG8gY2hhbmdlIHRoZQorIyBtb2RlbSBpbml0aWFsaXphdGlvbiBzdHJpbmcuCitjb25uZWN0ICIvdXNyL3NiaW4vY2hhdCAtdiAtZiAvZXRjL2NoYXRzY3JpcHRzL3BhcCAtVCAqKioqKioqKiIKKworIyBTZXJpYWwgZGV2aWNlIHRvIHdoaWNoIHRoZSBtb2RlbSBpcyBjb25uZWN0ZWQuCisvZGV2L21vZGVtCisKKyMgU3BlZWQgb2YgdGhlIHNlcmlhbCBsaW5lLgorMTE1MjAwCisKKyMgQXNzdW1lcyB0aGF0IHlvdXIgSVAgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYnkgdGhlIElTUC4KK25vaXBkZWZhdWx0CisjIFRyeSB0byBnZXQgdGhlIG5hbWUgc2VydmVyIGFkZHJlc3NlcyBmcm9tIHRoZSBJU1AuCit1c2VwZWVyZG5zCisjIFVzZSB0aGlzIGNvbm5lY3Rpb24gYXMgdGhlIGRlZmF1bHQgcm91dGUuCitkZWZhdWx0cm91dGUKKworIyBNYWtlcyBwcHBkICJkaWFsIGFnYWluIiB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QuCitwZXJzaXN0CisKKyMgRG8gbm90IGFzayB0aGUgcmVtb3RlIHRvIGF1dGhlbnRpY2F0ZS4KK25vYXV0aAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwXzIuNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzM4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIlBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJwcHAgKFBhdWwncyBQUFAgUGFja2FnZSkgaXMgYW4gb3BlbiBzb3VyY2UgcGFja2FnZSB3aGljaCBpbXBsZW1lbnRzIFwKK3RoZSBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBvbiBMaW51eCBhbmQgU29sYXJpcyBzeXN0ZW1zLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhbWJhLm9yZy9wcHAvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9jZ2ktYmluL3BwcC1idWdzIgorREVQRU5EUyA9ICJsaWJwY2FwIgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIrICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wcHBkL2NjcC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PWUyYzQzZmU2ZTgxZmY3N2Q4N2RjOWMyOTBhNDI0ZGVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BwcGQvcGx1Z2lucy9wYXNzcHJvbXB0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9M2JjYmNkYmYwZTM2OWM5YTNlMGI4YzgyNzViMDY1ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcHBwZC90ZGIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT00Y2EzYTk5OTFiMDExMDM4ZDA4NWQ2Njc1YWU3YzRlNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jaGF0L2NoYXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE1O21kNT0wZDM3NGI4NTQ1ZWU1YzYyZDdhZmYxYWNiZDM4YWRkMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9mdHAvcHBwL3BwcC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2lmZGVmcm91dGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9uIFwKKyAgICAgICAgICAgZmlsZTovL3BvZmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC11cCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC1kb3duIFwKKyAgICAgICAgICAgZmlsZTovLzA4c2V0dXBkbnMgXAorICAgICAgICAgICBmaWxlOi8vOTJyZW1vdmVkbnMgXAorICAgICAgICAgICBmaWxlOi8vY29wdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFwIFwKKyAgICAgICAgICAgZmlsZTovL3BwcF9vbl9ib290IFwKKyAgICAgICAgICAgZmlsZTovL3Byb3ZpZGVyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwQC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4ODE4ZjQwZTZkMzNhMWQxZGU2OGExNTUxZjY1OTVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyZTBhM2RkM2U0Nzk5ZTMzMTAzZjcwZWM3ZGY3NTM0OGM4NTQwOTY2ZWU3Yzk0OGU0ZWQ4YTQyYmJjY2ZiMzAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBzeXN0ZW1kCisKK1RBUkdFVF9DQ19BUkNIICs9ICIgJHtMREZMQUdTfSIKK0VYVFJBX09FTUFLRSA9ICJTVFJJUFBST0c9JHtTVFJJUH0gTUFORElSPSR7RH0ke2RhdGFkaXJ9L21hbi9tYW44IElOQ0RJUj0ke0R9JHtpbmNsdWRlZGlyfSBMSUJESVI9JHtEfSR7bGliZGlyfS9wcHBkLyR7UFZ9IEJJTkRJUj0ke0R9JHtzYmluZGlyfSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc3RyaXAiCisKKyMgUGFja2FnZSBNYWtlZmlsZSBjb21wdXRlcyBDRkxBR1MsIHJlZmVyZW5jaW5nIENPUFRTLgorIyBUeXBpY2FsbHkgaGFyZC1jb2RlZCB0byAnLU8yIC1nJyBpbiB0aGUgTWFrZWZpbGUncy4KKyMKK0VYVFJBX09FTUFLRSArPSAnIENPUFRTPSIke0NGTEFHU30gLUkke1N9L2luY2x1ZGUiJworCitkb19jb25maWd1cmUgKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCW1ha2UgaW5zdGFsbC1ldGNwcHAgRVRDRElSPSR7RH0vJHtzeXNjb25mZGlyfS9wcHAKKwlta2RpciAtcCAke0R9JHtiaW5kaXJ9LyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtdXAuZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtZG93bi5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvbiAke0R9JHtiaW5kaXJ9L3BvbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvZmYgJHtEfSR7YmluZGlyfS9wb2ZmCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcHBwCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaXAtdXAgJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2lwLWRvd24gJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzA4c2V0dXBkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLXVwLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vOTJyZW1vdmVkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLWRvd24uZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BhcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BwcF9vbl9ib290ICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wcHBfb25fYm9vdAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Byb3ZpZGVyICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycy9wcm92aWRlcgorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcHBALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCSAgICAgICAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wcHBALnNlcnZpY2UKKwlybSAtcmYgJHtEfS8ke21hbmRpcn0vbWFuOC9tYW44CisJY2htb2QgdStzICR7RH0ke3NiaW5kaXJ9L3BwcGQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHBwL3BhcC1zZWNyZXRzICR7c3lzY29uZmRpcn0vcHBwL2NoYXAtc2VjcmV0cyAke3N5c2NvbmZkaXJ9L3BwcC9vcHRpb25zIgorUEFDS0FHRVMgPSsgIiR7UE59LW9hICR7UE59LW9lICR7UE59LXJhZGl1cyAke1BOfS13aW5iaW5kICR7UE59LW1pbmNvbm4gJHtQTn0tcGFzc3dvcmQgJHtQTn0tbDJ0cCAke1BOfS10b29scyIKK0ZJTEVTXyR7UE59ICAgICAgICA9ICIke3N5c2NvbmZkaXJ9ICR7YmluZGlyfSAke3NiaW5kaXJ9L2NoYXQgJHtzYmluZGlyfS9wcHBkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHBwQC5zZXJ2aWNlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS8uZGVidWciCitGSUxFU18ke1BOfS1vYSAgICAgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9wcHBvYXRtLnNvIgorRklMRVNfJHtQTn0tb2UgICAgICAgPSAiJHtzYmluZGlyfS9wcHBvZS1kaXNjb3ZlcnkgJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcnAtcHBwb2Uuc28iCitGSUxFU18ke1BOfS1yYWRpdXMgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRpdXMuc28gJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcmFkYXR0ci5zbyAke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRyZWFsbXMuc28iCitGSUxFU18ke1BOfS13aW5iaW5kICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS93aW5iaW5kLnNvIgorRklMRVNfJHtQTn0tbWluY29ubiAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vbWluY29ubi5zbyIKK0ZJTEVTXyR7UE59LXBhc3N3b3JkID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L3Bhc3MqLnNvIgorRklMRVNfJHtQTn0tbDJ0cCAgICAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vKmwydHAuc28iCitGSUxFU18ke1BOfS10b29scyAgICA9ICIke3NiaW5kaXJ9L3BwcHN0YXRzICR7c2JpbmRpcn0vcHBwZHVtcCIKK1NVTU1BUllfJHtQTn0tb2EgICAgICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFBQUC1vdmVyLUFUTSBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS1vZSAgICAgICA9ICJQbHVnaW4gZm9yIFBQUCBmb3IgUFBQLW92ZXItRXRoZXJuZXQgc3VwcG9ydCIKK1NVTU1BUllfJHtQTn0tcmFkaXVzICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFJBRElVUyBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS13aW5iaW5kICA9ICJQbHVnaW4gZm9yIFBQUCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCBTYW1iYSBvciBXaW5kb3dzIgorU1VNTUFSWV8ke1BOfS1taW5jb25uICA9ICJQbHVnaW4gZm9yIFBQUCB0byBzZXQgYSBkZWxheSBiZWZvcmUgdGhlIGlkbGUgdGltZW91dCBhcHBsaWVzIgorU1VNTUFSWV8ke1BOfS1wYXNzd29yZCA9ICJQbHVnaW4gZm9yIFBQUCB0byBnZXQgcGFzc3dvcmRzIHZpYSBhIHBpcGUiCitTVU1NQVJZXyR7UE59LWwydHAgICAgID0gIlBsdWdpbiBmb3IgUFBQIGZvciBsMnRwIHN1cHBvcnQiCitTVU1NQVJZXyR7UE59LXRvb2xzICAgID0gIkFkZGl0aW9uYWwgdG9vbHMgZm9yIHRoZSBQUFAgcGFja2FnZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvOTlfcmVzb2x2Y29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmYvOTlfcmVzb2x2Y29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzkwZDc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi85OV9yZXNvbHZjb25mCkBAIC0wLDAgKzEsNCBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9yZXNvbHZjb25mL2ludGVyZmFjZSBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2Y29uZi9ydW4vcmVzb2x2LmNvbmYgbm9uZQorZiByb290IHJvb3QgMDY0NCAvZXRjL3Jlc29sdmNvbmYvcnVuL2VuYWJsZS11cGRhdGVzIG5vbmUKK2wgcm9vdCByb290IDA2NDQgL2V0Yy9yZXNvbHYuY29uZiAvZXRjL3Jlc29sdmNvbmYvcnVuL3Jlc29sdi5jb25mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWVhZDA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKK2J1c3lib3ggaW5zdGFsbHMgcmVhZGxpbmsgaW50byAvdXNyL2Jpbiwgc28gZW5zdXJlIC91c3IvYmluCitpcyBpbiB0aGUgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVzb2x2Y29uZi0xLjc2Lm9yaWcvZXRjL3Jlc29sdmNvbmYvdXBkYXRlLmQvbGliYworKysrIHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCitAQCAtMTYsNyArMTYsNyBAQAorICMKKyAKKyBzZXQgLWUKKy1QQVRIPS9zYmluOi9iaW4KKytQQVRIPS9zYmluOi9iaW46L3Vzci9iaW4KKyAKKyBbIC14IC9saWIvcmVzb2x2Y29uZi9saXN0LXJlY29yZHMgXSB8fCBleGl0IDEKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43Ny5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9yZXNvbHZjb25mL3Jlc29sdmNvbmZfMS43Ny5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTZiOWYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZl8xLjc3LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAibmFtZSBzZXJ2ZXIgaW5mb3JtYXRpb24gaGFuZGxlciIKK0RFU0NSSVBUSU9OID0gIlJlc29sdmNvbmYgaXMgYSBmcmFtZXdvcmsgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN5c3RlbSdzIFwKK2luZm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBhdmFpbGFibGUgbmFtZXNlcnZlcnMuIEl0IHNldHMgXAoraXRzZWxmIHVwIGFzIHRoZSBpbnRlcm1lZGlhcnkgYmV0d2VlbiBwcm9ncmFtcyB0aGF0IHN1cHBseSBcCituYW1lc2VydmVyIGluZm9ybWF0aW9uIGFuZCBwcm9ncmFtcyB0aGF0IG5lZWQgbmFtZXNlcnZlciBcCitpbmZvcm1hdGlvbi4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIiCitBVVRIT1IgPSAiVGhvbWFzIEhvb2QiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9yZXNvbHZjb25mIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE1MDUxMVQyMTQ3MThaL3Bvb2wvbWFpbi9yLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3Jlc29sdmNvbmYgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjczNjJkNzY2ZTQ3YmZjMjUzNTAwZjQyYjMwMzMwZDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNmUyMWU4YmE2ODIyYTVmOTMwNzVjOGM4ZmU3OTc3ZTM0NzgwYmE1NTFhZjUxOTMwZDBiMzFmZGQ5OWFiNTYiCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9yZXNvbHZjb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi8ke0JQTn0vaW50ZXJmYWNlIC0gLSAtIC0iIFwKKwkJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvcmVzb2x2Y29uZi5jb25mCisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfS8ke0JQTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfQorCWxuIC1zbmYgJHtsb2NhbHN0YXRlZGlyfS9ydW4vJHtCUE59ICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfS9ydW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCAke0R9JHtkb2NkaXJ9LyR7UH0KKwljcCAtcFBSIGV0Yy8qICR7RH0ke3N5c2NvbmZkaXJ9LworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL3Jlc29sdmNvbmYgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2xpc3QtcmVjb3JkcyAke0R9JHtiYXNlX2xpYmRpcn0vJHtCUE59CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi11cC5kCisJaW5zdGFsbCAtbSAwNzU1IGRlYmlhbi9yZXNvbHZjb25mLjAwMHJlc29sdmNvbmYuaWYtdXAgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZC8wMDByZXNvbHZjb25mCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQKKwlpbnN0YWxsIC1tIDA3NTUgZGViaWFuL3Jlc29sdmNvbmYucmVzb2x2Y29uZi5pZi1kb3duICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZC9yZXNvbHZjb25mCisJaW5zdGFsbCAtbSAwNjQ0IFJFQURNRSAke0R9JHtkb2NkaXJ9LyR7UH0vCisJaW5zdGFsbCAtbSAwNjQ0IG1hbi9yZXNvbHZjb25mLjggJHtEfSR7bWFuZGlyfS9tYW44LworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCWlmIGNvbW1hbmQgLXYgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsOyB0aGVuCisJCQlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9yZXNvbHZjb25mLmNvbmYKKwkJZWxpZiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8ke0JQTn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdC9NYWtlZmlsZS5pbi1maXgtZm9yLXBhcmFsbGVsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGRiNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGM2ZjAwODBiNTU2NzliNmU4YjVkMzMyZDZlMDVmZGNiZGExZTQwNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgNCBNYXkgMjAxNSAwMDo1ODo0NyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5pbjogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3ZzbnByaW50Zl9yLm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDMgZXhpdCBzdGF0dXMKK01ha2VmaWxlOjEyMjogcmVjaXBlIGZvciB0YXJnZXQgJ2ZpbGFuJyBmYWlsZWQKKworTGV0IGZpbGFuIGRlcGVuZCBvbiB2c25wcmludGZfci5vIGFuZCBzbnByaW50ZXJyLm8gdG8gZml4IHRoZSBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBmMmE2ZWRiLi44OGI3ODRiIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTE4LDcgKzExOCw3IEBAIFBST0NBTl9PQkpTPXByb2Nhbl9tYWluLm8gcHJvY2FuLm8gcHJvY2FuLWNkZWZzLm8gaG9zdGFuLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0CisgcHJvY2FuOiAkKFBST0NBTl9PQkpTKQorIAkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFBST0NBTl9PQkpTKSAkKENMSUJTKQorIAorLWZpbGFuOiBmaWxhbl9tYWluLm8gZmlsYW4ubyBmZG5hbWUubyBlcnJvci5vIHN5Y2xzLm8gc3lzdXRpbHMubyB1dGlscy5vCisrZmlsYW46IGZpbGFuX21haW4ubyBmaWxhbi5vIGZkbmFtZS5vIGVycm9yLm8gc3ljbHMubyBzeXN1dGlscy5vIHV0aWxzLm8gdnNucHJpbnRmX3IubyBzbnByaW50ZXJyLm8KKyAJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgZmlsYW5fbWFpbi5vIGZpbGFuLm8gZmRuYW1lLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0aWxzLm8gdXRpbHMubyB2c25wcmludGZfci5vIHNucHJpbnRlcnIubyAkKENMSUJTKQorIAorIGxpYnhpby5hOiAkKFhJT09CSlMpICQoVVRMT0JKUykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9zb2NhdC9zb2NhdF8xLjcuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OGUwYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk11bHRpcHVycG9zZSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiU29jYXQgaXMgYSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIFwKK3RyYW5zZmVyIGJldHdlZW4gdHdvIGluZGVwZW5kZW50IGRhdGEgY2hhbm5lbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0LyIKKworU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0RFUEVORFMgPSAib3BlbnNzbCByZWFkbGluZSIKKworTElDRU5TRSA9ICJHUEwtMi4wKy13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNTc7ZW5kbGluZT0yODc7bWQ1PTMzOGMwNWVhZGQwMTM4NzJhYmIxZDZlMTk4ZTEwYTNmIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0L2Rvd25sb2FkL3NvY2F0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNjA3ZWRiNjViYzZjNTdmNGE0M2YwNjI0NzUwNDI3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzY3ZTg1MGMwMzI5YjlmZGY3MTFjNmNkNDY4NTY1Y2JiYjI4Nzg2YmExYThhMWNiZDU1MzFkNDAxNmIzZTA0IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9oYXZlX3pfbW9kaWZpZXI9eWVzIHNjX2N2X3N5c19jcmRseV9zaGlmdD05IFwKKyAgICAgICAgc2NfY3Zfc3lzX3RhYmRseV9zaGlmdD0xMSBzY19jdl9zeXNfY3NpemVfc2hpZnQ9NCBcCisgICAgICAgIGFjX2N2X2lzcGVlZF9vZmZzZXQ9MTMgXAorICAgICAgICBhY19jdl9oZWFkZXJfYnNkX2xpYnV0aWxfaD1ubyBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS1lbmFibGUtbGlid3JhcCwtLWRpc2FibGUtbGlid3JhcCx0Y3Atd3JhcHBlcnMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfSAke0R9JHttYW5kaXJ9L21hbjEKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9hdm9pZF9zdHJpcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9hdm9pZF9zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzRlMjQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2F2b2lkX3N0cmlwLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3dpcmVsZXNzX3Rvb2xzOiBBdm9pZCBzdHJpcHBpbmcgaXdtdWx0aWNhbGwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVGhlIHJlbW92ZWQgY29kZSB3YXMgZnJvbSB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCistLS0gd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZQkyMDExLTA2LTE4IDExOjM1OjEyLjE4MzkwNzQ1MyAtMDUwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCTIwMTEtMDYtMTggMTE6Mzg6MDkuOTk1OTA3OTg1IC0wNTAwCitAQCAtMTM1LDkgKzEzNSw4IEBACisgCisgbWFjYWRkcjogbWFjYWRkci5vICQoSVdMSUIpCisgCistIyBBbHdheXMgZG8gc3ltYm9sIHN0cmlwcGluZyBoZXJlCisgaXdtdWx0aWNhbGw6IGl3bXVsdGljYWxsLm8KKy0JJChDQykgJChMREZMQUdTKSAtV2wsLXMgJChYQ0ZMQUdTKSAtbyAkQCAkXiAkKExJQlMpCisrCSQoQ0MpICQoTERGTEFHUykgJChTVFJJUEZMQUdTKSAkKFhDRkxBR1MpIC1vICRAICReICQoTElCUykKKyAKKyAjIEl0J3MgYSBraW5kIG9mIG1hZ2ljLi4uCisgd2lyZWxlc3MuaDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwZDhjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK3dpcmVsZXNzLXRvb2xzOiBSZW1vdmUgUUEgd2FybmluZzogTm8gR05VX0hBU0ggaW4gdGhlIGVsZiBiaW5hcnkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVXNlZnVsIHdpdGhpbiBiaXRiYWtlIGVudmlyb25tZW50IG9ubHkuCisKK1NpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlCisrKysgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUKK0BAIC0xNDQsNyArMTQ0LDcgQEAgd2lyZWxlc3MuaDoKKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBkeW5hbWljIGxpYnJhcnkKKyAkKERZTkFNSUMpOiAkKE9CSlM6Lm89LnNvKQorLQkkKENDKSAtc2hhcmVkIC1vICRAIC1XbCwtc29uYW1lLCRAICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKysJJChDQykgLXNoYXJlZCAtbyAkQCAtV2wsLXNvbmFtZSwkQCAkKExERkxBR1MpICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBzdGF0aWMgbGlicmFyeQorICQoU1RBVElDKTogJChPQkpTOi5vPS5zbykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9tYW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzU3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2lyZWxlc3NfdG9vbHMuMzAub3JpZy9NYWtlZmlsZQkyMDE0LTAyLTAxIDAwOjIxOjA0LjE0ODQ2MzM4MiAtMDgwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCTIwMTQtMDItMDEgMDA6MjM6MzUuNDQ4MDcyMjc5IC0wODAwCitAQCAtNzYsNyArNzYsNyBAQAorIElOU1RBTExfRElSPSAkKFBSRUZJWCkvc2JpbgorIElOU1RBTExfTElCPSAkKFBSRUZJWCkvbGliCisgSU5TVEFMTF9JTkM9ICQoUFJFRklYKS9pbmNsdWRlCistSU5TVEFMTF9NQU49ICQoUFJFRklYKS9tYW4KKytJTlNUQUxMX01BTj0gJChQUkVGSVgpL3NoYXJlL21hbgorIAorICMgVmFyaW91cyBjb21tYW5kcworIFJNID0gcm0gLWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIyYzNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UgdGhlbiBpdCBjcmVhdGVzIGludmFsaWQgY2FjaGUgCisoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28gY2Fubm90IGJlIGZvdW5kIGFmdGVyIGJ1aWxkaW5nIHpsaWIoLW5hdGl2ZSkgYW5kIEkgaGF2ZSB0byBjYWxsIAordG91Y2ggKi9saWJzdGRjKysuc28gJiYgL3NiaW4vbGRjb25maWcgdG8gZml4IGl0LgorCitTbyByZW1vdmUgbGRjb25maWcgY2FsbCBmcm9tIG1ha2UgaW5zdGFsbC1saWJzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC11TnIgd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZSB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQorLS0tIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUJMjAwNy0wOS0xOCAwMTo1Njo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQkyMDEyLTAyLTE1IDIwOjQ2OjQxLjc4MDc2MzUxNCArMDEwMAorQEAgLTE2Myw3ICsxNjMsNiBAQAorIAlpbnN0YWxsIC1tIDc1NSAkKERZTkFNSUMpICQoSU5TVEFMTF9MSUIpCisgCWxuIC1zZm4gJChEWU5BTUlDKSAkKElOU1RBTExfTElCKS8kKERZTkFNSUNfTElOSykKKyAJQGVjaG8gIioqKiBEb24ndCBmb3JnZXQgdG8gYWRkICQoSU5TVEFMTF9MSUIpIHRvIC9ldGMvbGQuc28uY29uZiwgYW5kIHJ1biBsZGNvbmZpZyBhcyByb290LiAqKioiCistCUAkKExEQ09ORklHKSB8fCBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsZGNvbmZpZyAhICoqKiIKKyAKKyAjIEluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5CisgaW5zdGFsbC1zdGF0aWM6OiAkKFNUQVRJQykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy5pZi1wcmUtdXAgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1MThhNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKworY2FzZSAiJE1FVEhPRCIgaW4gbG9vcGJhY2spIGV4aXQgMCA7OyBlc2FjCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJV1BSSVY9L3NiaW4vaXdwcml2CisKK2lmIFsgISAteCAkSVdDT05GSUcgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKKyMgRGV0ZWN0IGFuZCBkbyBub3RoaW5nIGZvciBsaW51eC13bGFuLW5nIGludGVyZmFjZXM7CisjIHdoaWNoIGFyZSBjb25maWd1cmVkIGJ5IHRoaWVyIG93biBpZi1wcmUtdXAgc2NyaXB0LgoraWYgWyAtbiAiJElGX1dJUkVMRVNTX1RZUEUiIC1hICIkSUZfV0lSRUxFU1NfVFlQRSIgPSAid2xhbi1uZyIgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKK2lmIFsgLW4gIiRJRl9ORUVEU19SRVNFVCIgXTsgdGhlbgorICAkSVdQUklWICIkSUZBQ0UiIHJlc2V0IDEKKyAgc2xlZXAgMQorZmkKKworaWYgWyAtbiAiJElGX05FRURTX0ZJUk1XQVJFIiBdOyB0aGVuCisgICRJRl9ORUVEU19GSVJNV0FSRSAiJElGQUNFIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1NFTlMiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHNlbnMgJElGX1dJUkVMRVNTX1NFTlMKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SQVRFIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiByYXRlICRJRl9XSVJFTEVTU19SQVRFCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUlRTIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBydHMgJElGX1dJUkVMRVNTX1JUUworZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSQUciIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyYWcgJElGX1dJUkVMRVNTX0ZSQUcKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcG93ZXIgJElGX1dJUkVMRVNTX1BPV0VSCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHBlcmlvZCAkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUlRJTUVPVVQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHRpbWVvdXQgJElGX1dJUkVMRVNTX1BPV0VSVElNRU9VVAorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1RYUE9XRVIiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHR4cG93ZXIgJElGX1dJUkVMRVNTX1RYUE9XRVIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SRVRSWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcmV0cnkgJElGX1dJUkVMRVNTX1JFVFJZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTklDSyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbmljayAiJElGX1dJUkVMRVNTX05JQ0siCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTldJRCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbndpZCAiJElGX1dJUkVMRVNTX05XSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRU5DIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGVuYyAkSUZfV0lSRUxFU1NfRU5DCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGtleSAkSUZfV0lSRUxFU1NfS0VZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsxXSAiJElGX1dJUkVMRVNTX0tFWTEiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsyXSAiJElGX1dJUkVMRVNTX0tFWTIiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFszXSAiJElGX1dJUkVMRVNTX0tFWTMiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZNCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFs0XSAiJElGX1dJUkVMRVNTX0tFWTQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfREVGQVVMVEtFWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsiJElGX1dJUkVMRVNTX0RFRkFVTFRLRVkiXQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWU1PREUiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSAiJElGX1dJUkVMRVNTX0tFWU1PREUiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTU9ERSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbW9kZSAkSUZfV0lSRUxFU1NfTU9ERQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSRVEiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyZXEgJElGX1dJUkVMRVNTX0ZSRVEKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19DSEFOTkVMIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjaGFubmVsICRJRl9XSVJFTEVTU19DSEFOTkVMCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRVNTSUQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGVzc2lkICIkSUZfV0lSRUxFU1NfRVNTSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfQ09NTUlUIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjb21taXQKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3p6ei13aXJlbGVzcy5pZi1wcmUtdXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4ZTk1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorIworIyAvZXRjL25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCisjIGJ5IFN0ZWZhbiBUb21hbmVrIChzdGVmYW5AcGljby5ydWhyLmRlKQorCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJRkNPTkZJRz0vc2Jpbi9pZmNvbmZpZworR1JFUD0vYmluL2dyZXAKK0xPR0dFUj0vdXNyL2Jpbi9sb2dnZXIKK1NMRUVQPS9iaW4vc2xlZXAKKworIyBIb3cgbG9uZyBkbyB3ZSB3YWl0IGZvciBhc3NvY2lhdGlvbj8KK1JFVFJJRVM9MTUKK1NMRUVQVElNRT0xCisKKyMgT25seSBzbGVlcCBpZiB3ZSB1c2UgREhDUCAoYWRkIG90aGVycyBtZXRob2RzIHNlcGVyYXRlZCBieSBzcGFjZXMpCitPTkxZX0ZPUj0ic3RhdGljIGRoY3AiCisKK2lmIFsgLXogIiRJRl9XSVJFTEVTU19UWVBFIiBdICYmIGVjaG8gIiRPTkxZX0ZPUiIgfCBncmVwIC1xICIkTUVUSE9EIiA7IHRoZW4KKwkkSUZDT05GSUcgJElGQUNFIHVwCisJJExPR0dFUiBDaGVja2luZyBmb3IgV0xBTiBhc3NvY2lhdGlvbi4uLgorCXdoaWxlICggWyAkUkVUUklFUyAtZ3QgMCBdICYmICgkSVdDT05GSUcgIiRJRkFDRSIgfCAkR1JFUCAtcSAiQWNjZXNzIFBvaW50OiBOb3QtQXNzb2NpYXRlZCIpICk7IGRvCisJCSRMT0dHRVIgTm8gYXNzb2NpYXRpb24geWV0LCAkUkVUUklFUyByZXRyaWVzIHVudGlsIHRpbWVvdXQKKwkJUkVUUklFUz0kKCgkUkVUUklFUy0xKSkKKwkJJFNMRUVQICRTTEVFUFRJTUUKKwlkb25lCisJCisJaWYgWyAkUkVUUklFUyAtZXEgMCBdOyB0aGVuCisJCSRMT0dHRVIgVGltZW91dCB3YWl0aW5nIGZvciBhc3NvY2lhdGlvbiwgY29udGludWluZyBhbnl3YXkuLi4KKwllbHNlCisJCSRMT0dHRVIgRm91bmQgYXNzb2NpYXRpb24hCisJZmkKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29sc18zMC5wcmU5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWNkZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB0aGUgTGludXggU3RhbmRhcmQgV2lyZWxlc3MgRXh0ZW5zaW9uIFN1YnN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiAoTEdQTHYyLjEgfCBNUEwtMS4xIHwgQlNEKSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9pd2NvbmZpZy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PWNmNzEwZWIxNzk1YzM3NmViMTBlYTRmZjA0NjQ5Y2FmIFwKKwkJCWZpbGU6Ly9pd2V2ZW50LmM7YmVnaW5saW5lPTU5O2VuZGxpbmU9NzI7bWQ1PWQ2NmExMDAyNmQ0Mzk0ZjBhNWIxYzU1ODdiY2U0NTM3IFwKKwkJCWZpbGU6Ly9zYW1wbGVfZW5jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT00O21kNT04MzgzNzJiZTA3ODc0MjYwYjU2NmJhZTJmNmVkMzNiNiIKK1NFQ1RJT04gPSAiYmFzZSIKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC93aXJlbGVzc190b29scy4ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwIFwKKyAgICAgICAgICAgZmlsZTovL3p6ei13aXJlbGVzcy5pZi1wcmUtdXAgXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3N0cmlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYTkxYmE3YzdlZmY5YmZmZjY5MjZiMWEzNGE0Njk3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYmQ5YzVjOThhYmYxZmRkMTE4OTJhYzJmOGE1NjczNzU0NGZlMTAxZTFiZTI3YzYyNDFhNTY0OTQ4ZjM0YzYzIgorCitTID0gIiR7V09SS0RJUn0vd2lyZWxlc3NfdG9vbHMuMzAiCisKK0NGTEFHUyA9KyAiLUkke1N9IgorRVhUUkFfT0VNQUtFID0gIi1lICdCVUlMRF9TSEFSRUQ9eScgXAorCQknSU5TVEFMTF9ESVI9JHtEfSR7YmFzZV9zYmluZGlyfScgXAorCQknSU5TVEFMTF9MSUI9JHtEfSR7bGliZGlyfScgXAorCQknSU5TVEFMTF9JTkM9JHtEfSR7aW5jbHVkZWRpcn0nIFwKKwkJJ0lOU1RBTExfTUFOPSR7RH0ke21hbmRpcn0nIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgYWxsIGxpYml3LmEKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke0R9IGluc3RhbGwtaXdtdWx0aWNhbGwgaW5zdGFsbC1keW5hbWljIGluc3RhbGwtbWFuIGluc3RhbGwtaGRyCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBpZnJlbmFtZSAke0R9JHtzYmluZGlyfS9pZnJlbmFtZQorCSMgRGlzYWJsZWQgYnkgUlAgLSAyMC84LzA4IC0gV2UgZG9uJ3Qgc2VlbSB0byBuZWVkL3VzZSB0aGVzZQorCSNpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQKKwkjaW5zdGFsbCAke1dPUktESVJ9L3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kL3dpcmVsZXNzLXRvb2xzCisJI2luc3RhbGwgJHtXT1JLRElSfS96enotd2lyZWxlc3MuaWYtcHJlLXVwICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCit9CisKK1BBQ0tBR0VTID0gImxpYml3LWRiZyBpZnJlbmFtZS1kYmcgJHtQTn0tZGJnIFwKK2xpYml3IGxpYml3LWRldiBsaWJpdy1kb2MgaWZyZW5hbWUtZG9jIGlmcmVuYW1lICR7UE59ICR7UE59LWRvYyIKKworRklMRVNfbGliaXctZGJnID0gIiR7bGliZGlyfS8uZGVidWcvKi5zby4qIgorRklMRVNfaWZyZW5hbWUtZGJnID0gIiR7c2JpbmRpcn0vLmRlYnVnL2lmcmVuYW1lIgorRklMRVNfbGliaXcgPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTX2xpYml3LWRldiA9ICIke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLnNvICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJpdy1kb2MgPSAiJHttYW5kaXJ9L21hbjciCitGSUxFU19pZnJlbmFtZSA9ICIke3NiaW5kaXJ9L2lmcmVuYW1lIgorRklMRVNfaWZyZW5hbWUtZG9jID0gIiR7bWFuZGlyfS9tYW44L2lmcmVuYW1lLjggJHttYW5kaXJ9L21hbjUvaWZ0YWIuNSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke3NiaW5kaXJ9L2l3KiAke2Jhc2Vfc2JpbmRpcn0gJHtiYXNlX2JpbmRpcn0gJHtzeXNjb25mZGlyfS9uZXR3b3JrIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUFQLVdNTS1GaXgtaW50ZWdlci11bmRlcmZsb3ctaW4tV01NLUFjdGlvbi1mcmFtZS1wYXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjY3NGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlZjU2NmE0ZDRmNzQwMjJlMWZkYjBhMmFkZGZlODFlNmRlOWY0YWFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFdlZCwgMjkgQXByIDIwMTUgMDI6MjE6NTMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQVAgV01NOiBGaXggaW50ZWdlciB1bmRlcmZsb3cgaW4gV01NIEFjdGlvbiBmcmFtZSBwYXJzZXIKKworVGhlIGxlbmd0aCBvZiB0aGUgV01NIEFjdGlvbiBmcmFtZSB3YXMgbm90IHByb3Blcmx5IHZhbGlkYXRlZCBhbmQgdGhlCitsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIChpbnQgbGVmdCkgY291bGQgZW5kIHVwIGJlaW5nCituZWdhdGl2ZS4gVGhpcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyBzaWduaWZpY2FudGx5IHBhc3QgdGhlIHN0YWNrCitidWZmZXIgd2hpbGUgcGFyc2luZyB0aGUgSUVzIGluIGllZWU4MDJfMTFfcGFyc2VfZWxlbXMoKSBhbmQgd2hpbGUgZG9pbmcKK3NvLCByZXN1bHRpbmcgaW4gc2VnbWVudGF0aW9uIGZhdWx0LgorCitUaGlzIGNhbiByZXN1bHQgaW4gYW4gaW52YWxpZCBmcmFtZSBiZWluZyB1c2VkIGZvciBhIGRlbmlhbCBvZiBzZXJ2aWNlCithdHRhY2sgKGhvc3RhcGQgcHJvY2VzcyBraWxsZWQpIGFnYWluc3QgYW4gQVAgd2l0aCBhIGRyaXZlciB0aGF0IHVzZXMKK2hvc3RhcGQgZm9yIG1hbmFnZW1lbnQgZnJhbWUgcHJvY2Vzc2luZyAoZS5nLiwgYWxsIG1hYzgwMjExLWJhc2VkCitkcml2ZXJzKS4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9hcC93bW0uYyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2FwL3dtbS5jIGIvc3JjL2FwL3dtbS5jCitpbmRleCA2ZDQxNzdjLi4zMTRlMjQ0IDEwMDY0NAorLS0tIGEvc3JjL2FwL3dtbS5jCisrKysgYi9zcmMvYXAvd21tLmMKK0BAIC0yNzQsNiArMjc0LDkgQEAgdm9pZCBob3N0YXBkX3dtbV9hY3Rpb24oc3RydWN0IGhvc3RhcGRfZGF0YSAqaGFwZCwKKyAJCXJldHVybjsKKyAJfQorIAorKwlpZiAobGVmdCA8IDApCisrCQlyZXR1cm47IC8qIG5vdCBhIHZhbGlkIFdNTSBBY3Rpb24gZnJhbWUgKi8KKysKKyAJLyogZXh0cmFjdCB0aGUgdHNwZWMgaW5mbyBlbGVtZW50ICovCisgCWlmIChpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVmdCwgJmVsZW1zLCAxKSA9PSBQYXJzZUZhaWxlZCkgeworIAkJaG9zdGFwZF9sb2dnZXIoaGFwZCwgbWdtdC0+c2EsIEhPU1RBUERfTU9EVUxFX0lFRUU4MDIxMSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtRUFQLXB3ZC1wZWVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db21taS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiYWZjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIGRkMmYwNDNjOWM0M2QxNTY0OTRlMzNkN2NlMjJkYjk2ZTZlZjQyYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjM3OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBFQVAtcHdkIHBlZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggZjJiMDkyNi4uYTYyOTQzNyAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC0zNTUsNiArMzU1LDIzIEBAIGVhcF9wd2RfcGVyZm9ybV9jb21taXRfZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCUJJR05VTSAqbWFzayA9IE5VTEwsICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqY29mYWN0b3IgPSBOVUxMOworIAl1MTYgb2Zmc2V0OworIAl1OCAqcHRyLCAqc2NhbGFyID0gTlVMTCwgKmVsZW1lbnQgPSBOVUxMOworKwlzaXplX3QgcHJpbWVfbGVuLCBvcmRlcl9sZW47CisrCisrCWlmIChkYXRhLT5zdGF0ZSAhPSBQV0RfQ29tbWl0X1JlcSkgeworKwkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJZ290byBmaW47CisrCX0KKysKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKyAKKyAJaWYgKCgoZGF0YS0+cHJpdmF0ZV92YWx1ZSA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChkYXRhLT5teV9lbGVtZW50ID0gRUNfUE9JTlRfbmV3KGRhdGEtPmdycC0+Z3JvdXApKSA9PSBOVUxMKSB8fAorQEAgLTU1NCw2ICs1NzEsMTggQEAgZWFwX3B3ZF9wZXJmb3JtX2NvbmZpcm1fZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCXU4IGNvbmZbU0hBMjU2X01BQ19MRU5dLCAqY3J1ZnQgPSBOVUxMLCAqcHRyOworIAlpbnQgb2Zmc2V0OworIAorKwlpZiAoZGF0YS0+c3RhdGUgIT0gUFdEX0NvbmZpcm1fUmVxKSB7CisrCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQlnb3RvIGZpbjsKKysJfQorKworKwlpZiAocGF5bG9hZF9sZW4gIT0gU0hBMjU2X01BQ19MRU4pIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sCisrCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgQ29uZmlybSBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwgU0hBMjU2X01BQ19MRU4pOworKwkJZ290byBmaW47CisrCX0KKysKKyAJLyoKKyAJICogZmlyc3QgYnVpbGQgdXAgdGhlIGNpcGhlcnN1aXRlIHdoaWNoIGlzIGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwKKyAJICoJcHJmCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMDhhOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gOWVkNGVlZTM0NWY4NWUzMDI1YzMzYzZlMjBhYTI1Njk2ZTM0MWNjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CitEYXRlOiBUdWUsIDcgQXByIDIwMTUgMTE6MzI6MTEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUDJQOiBWYWxpZGF0ZSBTU0lEIGVsZW1lbnQgbGVuZ3RoIGJlZm9yZSBjb3B5aW5nIGl0CisgKENWRS0yMDE1LTE4NjMpCisKK1RoaXMgZml4ZXMgYSBwb3NzaWJsZSBtZW1jcHkgb3ZlcmZsb3cgZm9yIFAyUCBkZXYtPm9wZXJfc3NpZCBpbgorcDJwX2FkZF9kZXZpY2UoKS4gVGhlIGxlbmd0aCBwcm92aWRlZCBieSB0aGUgcGVlciBkZXZpY2UgKDAuLjI1NSBieXRlcykKK3dhcyB1c2VkIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZyBhbmQgdGhhdCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluCithcmJpdHJhcnkgZGF0YSBvZiB1cCB0byAyMjMgYnl0ZXMgYmVpbmcgd3JpdHRlbiBiZXlvbmQgdGhlIGVuZCBvZiB0aGUKK2Rldi0+b3Blcl9zc2lkW10gYXJyYXkgKG9mIHdoaWNoIGFib3V0IDE1MCBieXRlcyB3b3VsZCBiZSBiZXlvbmQgdGhlCitoZWFwIGFsbG9jYXRpb24pIHdoZW4gcHJvY2Vzc2luZyBhIGNvcnJ1cHRlZCBtYW5hZ2VtZW50IGZyYW1lIGZvciBQMlAKK3BlZXIgZGlzY292ZXJ5IHB1cnBvc2VzLgorCitUaGlzIGNvdWxkIHJlc3VsdCBpbiBjb3JydXB0ZWQgc3RhdGUgaW4gaGVhcCwgdW5leHBlY3RlZCBwcm9ncmFtCitiZWhhdmlvciBkdWUgdG8gY29ycnVwdGVkIFAyUCBwZWVyIGRldmljZSBpbmZvcm1hdGlvbiwgZGVuaWFsIG9mIHNlcnZpY2UKK2R1ZSB0byBwcm9jZXNzIGNyYXNoLCBleHBvc3VyZSBvZiBtZW1vcnkgY29udGVudHMgZHVyaW5nIEdPIE5lZ290aWF0aW9uLAorYW5kIHBvdGVudGlhbGx5IGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbi4KKworVGhhbmtzIHRvIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciByZXBvcnRpbmcgdGhpcyBpc3N1ZSBhbmQgc21hcnQKK2hhcmR3YXJlIHJlc2VhcmNoIGdyb3VwIG9mIEFsaWJhYmEgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvcDJwL3AycC5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvcDJwL3AycC5jIGIvc3JjL3AycC9wMnAuYworaW5kZXggZjU4NGZhZS4uYTQ1ZmU3MyAxMDA2NDQKKy0tLSBhL3NyYy9wMnAvcDJwLmMKKysrKyBiL3NyYy9wMnAvcDJwLmMKK0BAIC03NzgsNiArNzc4LDcgQEAgaW50IHAycF9hZGRfZGV2aWNlKHN0cnVjdCBwMnBfZGF0YSAqcDJwLCBjb25zdCB1OCAqYWRkciwgaW50IGZyZXEsCisgCWlmIChvc19tZW1jbXAoYWRkciwgcDJwX2Rldl9hZGRyLCBFVEhfQUxFTikgIT0gMCkKKyAJCW9zX21lbWNweShkZXYtPmludGVyZmFjZV9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisgCWlmIChtc2cuc3NpZCAmJgorKwkgICAgbXNnLnNzaWRbMV0gPD0gc2l6ZW9mKGRldi0+b3Blcl9zc2lkKSAmJgorIAkgICAgKG1zZy5zc2lkWzFdICE9IFAyUF9XSUxEQ0FSRF9TU0lEX0xFTiB8fAorIAkgICAgIG9zX21lbWNtcChtc2cuc3NpZCArIDIsIFAyUF9XSUxEQ0FSRF9TU0lELCBQMlBfV0lMRENBUkRfU1NJRF9MRU4pCisgCSAgICAgIT0gMCkpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2OGVhMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVdQUy1GaXgtSFRUUC1jaHVua2VkLXRyYW5zZmVyLWVuY29kaW5nLXBhcnNlci5wYXRjaApAQCAtMCwwICsxLDUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gNWFjZDIzZjQ1ODFkYTU4NjgzZjNjZjVlMzZjYjcxYmJlNDA3MGJkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE3OjA4OjMzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFdQUzogRml4IEhUVFAgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBwYXJzZXIKKworc3RydG91bCgpIHJldHVybiB2YWx1ZSBtYXkgZW5kIHVwIG92ZXJmbG93aW5nIHRoZSBpbnQgaC0+Y2h1bmtfc2l6ZSBhbmQKK3Jlc3VsdGluZyBpbiBhIG5lZ2F0aXZlIHZhbHVlIHRvIGJlIHN0b3JlZCBhcyB0aGUgY2h1bmtfc2l6ZS4gVGhpcyBjb3VsZAorcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgbWVtY3B5IG9wZXJhdGlvbiB1c2luZyBhIHZlcnkgbGFyZ2UgbGVuZ3RoCithcmd1bWVudCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSBidWZmZXIgb3ZlcmZsb3cgYW5kIHNlZ21lbnRhdGlvbiBmYXVsdC4KKworVGhpcyBjb3VsZCBoYXZlIGJlZW4gdXNlZCB0byBjYXVzZSBhIGRlbmlhbCBzZXJ2aWNlIGJ5IGFueSBkZXZpY2UgdGhhdAoraGFzIGJlZW4gYXV0aG9yaXplZCBmb3IgbmV0d29yayBhY2Nlc3MgKGVpdGhlciB3aXJlbGVzcyBvciB3aXJlZCkuIFRoaXMKK3dvdWxkIGFmZmVjdCBib3RoIHRoZSBXUFMgVVBuUCBmdW5jdGlvbmFsaXR5IGluIGEgV1BTIEFQIChob3N0YXBkIHdpdGgKK3VwbnBfaWZhY2UgcGFyYW1ldGVyIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbikgYW5kIFdQUyBFUgorKHdwYV9zdXBwbGljYW50IHdpdGggV1BTX0VSX1NUQVJUIGNvbnRyb2wgaW50ZXJmYWNlIGNvbW1hbmQgdXNlZCkuCisKK1ZhbGlkYXRlIHRoZSBwYXJzZWQgY2h1bmsgbGVuZ3RoIHZhbHVlIHRvIGF2b2lkIHRoaXMuIEluIGFkZGl0aW9uIHRvCityZWplY3RpbmcgbmVnYXRpdmUgdmFsdWVzLCB3ZSBjYW4gYWxzbyByZWplY3QgY2h1bmsgc2l6ZSB0aGF0IHdvdWxkIGJlCitsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBjb25maWd1cmVkIGJvZHkgbGVuZ3RoLgorCitUaGFua3MgdG8gS29zdHlhIEtvcnRjaGluc2t5IG9mIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBhbmQKK3JlcG9ydGluZyB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL3dwcy9odHRwcmVhZC5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3dwcy9odHRwcmVhZC5jIGIvc3JjL3dwcy9odHRwcmVhZC5jCitpbmRleCAyZjA4ZjM3Li5kMjg1NWUzIDEwMDY0NAorLS0tIGEvc3JjL3dwcy9odHRwcmVhZC5jCisrKysgYi9zcmMvd3BzL2h0dHByZWFkLmMKK0BAIC01MzMsNiArNTMzLDEzIEBAIHN0YXRpYyB2b2lkIGh0dHByZWFkX3JlYWRfaGFuZGxlcihpbnQgc2QsIHZvaWQgKmVsb29wX2N0eCwgdm9pZCAqc29ja19jdHgpCisgCQkJCQlpZiAoIWlzeGRpZ2l0KCpjYnApKQorIAkJCQkJCWdvdG8gYmFkOworIAkJCQkJaC0+Y2h1bmtfc2l6ZSA9IHN0cnRvdWwoY2JwLCBOVUxMLCAxNik7CisrCQkJCQlpZiAoaC0+Y2h1bmtfc2l6ZSA8IDAgfHwKKysJCQkJCSAgICBoLT5jaHVua19zaXplID4gaC0+bWF4X2J5dGVzKSB7CisrCQkJCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCQkJCSAgICJodHRwcmVhZDogSW52YWxpZCBjaHVuayBzaXplICVkIiwKKysJCQkJCQkJICAgaC0+Y2h1bmtfc2l6ZSk7CisrCQkJCQkJZ290byBiYWQ7CisrCQkJCQl9CisgCQkJCQkvKiB0aHJvdyBhd2F5IGNodW5rIGhlYWRlcgorIAkJCQkJICogc28gd2UgaGF2ZSBvbmx5IHJlYWwgZGF0YQorIAkJCQkJICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLUVBUC1wd2Qtc2VydmVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db20ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzdjMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlMjhhNThiZTI2MTg0YzJhMjNmODBiNDEwZTA5OTdlZjFiZDVkNTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjo0MDo0NCArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gRUFQLXB3ZCBzZXJ2ZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgfCAxOSArKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgYi9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCitpbmRleCA2NmJkNWQyLi4zMTg5MTA1IDEwMDY0NAorLS0tIGEvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworKysrIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworQEAgLTY1Niw5ICs2NTYsMjEgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbW1pdF9yZXNwKHN0cnVjdCBlYXBfc20gKnNtLCBzdHJ1Y3QgZWFwX3B3ZF9kYXRhICpkYXRhLAorIAlCSUdOVU0gKnggPSBOVUxMLCAqeSA9IE5VTEwsICpjb2ZhY3RvciA9IE5VTEw7CisgCUVDX1BPSU5UICpLID0gTlVMTCwgKnBvaW50ID0gTlVMTDsKKyAJaW50IHJlcyA9IDA7CisrCXNpemVfdCBwcmltZV9sZW4sIG9yZGVyX2xlbjsKKyAKKyAJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBSZWNlaXZlZCBjb21taXQgcmVzcG9uc2UiKTsKKyAKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKysKKyAJaWYgKCgoZGF0YS0+cGVlcl9zY2FsYXIgPSBCTl9uZXcoKSkgPT0gTlVMTCkgfHwKKyAJICAgICgoZGF0YS0+ayA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChjb2ZhY3RvciA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorQEAgLTc3NCw2ICs3ODYsMTMgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbmZpcm1fcmVzcChzdHJ1Y3QgZWFwX3NtICpzbSwgc3RydWN0IGVhcF9wd2RfZGF0YSAqZGF0YSwKKyAJdTggY29uZltTSEEyNTZfTUFDX0xFTl0sICpjcnVmdCA9IE5VTEwsICpwdHI7CisgCWludCBvZmZzZXQ7CisgCisrCWlmIChwYXlsb2FkX2xlbiAhPSBTSEEyNTZfTUFDX0xFTikgeworKwkJd3BhX3ByaW50ZihNU0dfSU5GTywKKysJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBDb25maXJtIHBheWxvYWQgbGVuZ3RoICV1IChleHBlY3RlZCAldSkiLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBheWxvYWRfbGVuLCBTSEEyNTZfTUFDX0xFTik7CisrCQlnb3RvIGZpbjsKKysJfQorKworIAkvKiBidWlsZCB1cCB0aGUgY2lwaGVyc3VpdGU6IGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwgcHJmICovCisgCWdycCA9IGh0b25zKGRhdGEtPmdyb3VwX251bSk7CisgCXB0ciA9ICh1OCAqKSAmY3M7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NmNlNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSA0NzdjNzQzOTVhY2QwMTIzMzQwNDU3YmE2ZjE1YWIzNDVkNDIwMTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyMzowNCArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNV0gRUFQLXB3ZCBwZWVyOiBGaXggVG90YWwtTGVuZ3RoIHBhcnNpbmcgZm9yIGZyYWdtZW50CisgcmVhc3NlbWJseQorCitUaGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZSBjb3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlCitUb3RhbC1MZW5ndGggZmllbGQgc2l6ZSwgc28gdGhlIGxlbmd0aCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGNoZWNrZWQKK3ByaW9yIHRvIHJlYWRpbmcgdGhlIGZpZWxkIGFuZCBkZWNyZW1lbnRpbmcgdGhlIGxlbiB2YXJpYWJsZS4gVGhpcyBjb3VsZAoraGF2ZSByZXN1bHRlZCBpbiB0aGUgcmVtYWluaW5nIGxlbmd0aCBiZWNvbWluZyBuZWdhdGl2ZSBhbmQgaW50ZXJwcmV0ZWQKK2FzIGEgaHVnZSBwb3NpdGl2ZSBpbnRlZ2VyLgorCitJbiBhZGRpdGlvbiwgY2hlY2sgdGhhdCB0aGVyZSBpcyBubyBhbHJlYWR5IHN0YXJ0ZWQgZnJhZ21lbnQgaW4gcHJvZ3Jlc3MKK2JlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IGJ1ZmZlciBmb3IgcmVhc3NlbWJsaW5nIGZyYWdtZW50cy4gVGhpcyBhdm9pZCBhCitwb3RlbnRpYWwgbWVtb3J5IGxlYWsgd2hlbiBwcm9jZXNzaW5nIGludmFsaWQgbWVzc2FnZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAxMiArKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK2luZGV4IGE2Mjk0MzcuLjFkMjA3OWIgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCisrKysgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitAQCAtODY2LDExICs4NjYsMjMgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJICogaWYgaXQncyB0aGUgZmlyc3QgZnJhZ21lbnQgdGhlcmUnbGwgYmUgYSBsZW5ndGggZmllbGQKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJCXJldHVybiBOVUxMOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMgd2hvc2UgIgorIAkJCSAgICJ0b3RhbCBsZW5ndGggPSAlZCIsIHRvdF9sZW4pOworIAkJaWYgKHRvdF9sZW4gPiAxNTAwMCkKKyAJCQlyZXR1cm4gTlVMTDsKKysJCWlmIChkYXRhLT5pbmJ1ZikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBuZXcgZnJhZ21lbnQgc3RhcnQgd2hlbiBwcmV2aW91cyBmcmFnbWVudCBpcyBzdGlsbCBpbiB1c2UiKTsKKysJCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisgCQlkYXRhLT5pbmJ1ZiA9IHdwYWJ1Zl9hbGxvYyh0b3RfbGVuKTsKKyAJCWlmIChkYXRhLT5pbmJ1ZiA9PSBOVUxMKSB7CisgCQkJd3BhX3ByaW50ZihNU0dfSU5GTywgIk91dCBvZiBtZW1vcnkgdG8gYnVmZmVyICIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDQtRUFQLXB3ZC1zZXJ2ZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjMDJiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIDMwMzVjYzI4OTRlMDgzMTliOTA1YmQ2NTYxZThiZGRjOGMyZGI5ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE5OjI2OjA2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBFQVAtcHdkIHNlcnZlcjogRml4IFRvdGFsLUxlbmd0aCBwYXJzaW5nIGZvciBmcmFnbWVudAorIHJlYXNzZW1ibHkKKworVGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgY291bGQgYmUgc21hbGxlciB0aGFuIHRoZQorVG90YWwtTGVuZ3RoIGZpZWxkIHNpemUsIHNvIHRoZSBsZW5ndGggbmVlZHMgdG8gYmUgZXhwbGljaXRseSBjaGVja2VkCitwcmlvciB0byByZWFkaW5nIHRoZSBmaWVsZCBhbmQgZGVjcmVtZW50aW5nIHRoZSBsZW4gdmFyaWFibGUuIFRoaXMgY291bGQKK2hhdmUgcmVzdWx0ZWQgaW4gdGhlIHJlbWFpbmluZyBsZW5ndGggYmVjb21pbmcgbmVnYXRpdmUgYW5kIGludGVycHJldGVkCithcyBhIGh1Z2UgcG9zaXRpdmUgaW50ZWdlci4KKworSW4gYWRkaXRpb24sIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gYWxyZWFkeSBzdGFydGVkIGZyYWdtZW50IGluIHByb2dyZXNzCitiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBidWZmZXIgZm9yIHJlYXNzZW1ibGluZyBmcmFnbWVudHMuIFRoaXMgYXZvaWQgYQorcG90ZW50aWFsIG1lbW9yeSBsZWFrIHdoZW4gcHJvY2Vzc2luZyBpbnZhbGlkIG1lc3NhZ2UuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIHwgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworaW5kZXggMzE4OTEwNS4uMmJmYzNjMiAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKKysrKyBiL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKK0BAIC05NDIsMTEgKzk0MiwyMSBAQCBzdGF0aWMgdm9pZCBlYXBfcHdkX3Byb2Nlc3Moc3RydWN0IGVhcF9zbSAqc20sIHZvaWQgKnByaXYsCisgCSAqIHRoZSBmaXJzdCBmcmFnbWVudCBoYXMgYSB0b3RhbCBsZW5ndGgKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0dXJuOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMsIHRvdGFsICIKKyAJCQkgICAibGVuZ3RoID0gJWQiLCB0b3RfbGVuKTsKKyAJCWlmICh0b3RfbGVuID4gMTUwMDApCisgCQkJcmV0dXJuOworKwkJaWYgKGRhdGEtPmluYnVmKSB7CisrCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIG5ldyBmcmFnbWVudCBzdGFydCB3aGVuIHByZXZpb3VzIGZyYWdtZW50IGlzIHN0aWxsIGluIHVzZSIpOworKwkJCXJldHVybjsKKysJCX0KKyAJCWRhdGEtPmluYnVmID0gd3BhYnVmX2FsbG9jKHRvdF9sZW4pOworIAkJaWYgKGRhdGEtPmluYnVmID09IE5VTEwpIHsKKyAJCQl3cGFfcHJpbnRmKE1TR19JTkZPLCAiRUFQLXB3ZDogT3V0IG9mIG1lbW9yeSB0byAiCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDUtRUFQLXB3ZC1wZWVyLUZpeC1hc3ltbWV0cmljLWZyYWdtZW50YXRpb24tYmVoYXZpb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3MzYwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSAyOGEwNjlhNTQ1YjA2Yjk5ZWI1NWFkNTNmNjNmMmM5OWU2NWE5OGY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyNjoyOCArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gRUFQLXB3ZCBwZWVyOiBGaXggYXN5bW1ldHJpYyBmcmFnbWVudGF0aW9uIGJlaGF2aW9yCisKK1RoZSBMIChMZW5ndGgpIGFuZCBNIChNb3JlKSBmbGFncyBuZWVkcyB0byBiZSBjbGVhcmVkIGJlZm9yZSBkZWNpZGluZword2hldGhlciB0aGUgbG9jYWxseSBnZW5lcmF0ZWQgcmVzcG9uc2UgcmVxdWlyZXMgZnJhZ21lbnRhdGlvbi4gVGhpcworZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlc2UgZmxhZ3MgZnJvbSB0aGUgc2VydmVyIGNvdWxkIGhhdmUgYmVlbiBpbnZhbGlkCitmb3IgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiBJbiBzb21lIGNhc2VzLCB0aGlzIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4KK3RyaWdnZXJpbmcgdGhlIHdwYWJ1ZiBzZWN1cml0eSBjaGVjayB0aGF0IHdvdWxkIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcworZHVlIHRvIGludmFsaWQgYnVmZmVyIGFsbG9jYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggMWQyMDc5Yi4uZTU4YjEzYSAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC05NjgsNiArOTY4LDcgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJLyoKKyAJICogd2UgaGF2ZSBvdXRwdXQhIERvIHdlIG5lZWQgdG8gZnJhZ21lbnQgaXQ/CisgCSAqLworKwlsbV9leGNoID0gRUFQX1BXRF9HRVRfRVhDSEFOR0UobG1fZXhjaCk7CisgCWxlbiA9IHdwYWJ1Zl9sZW4oZGF0YS0+b3V0YnVmKTsKKyAJaWYgKChsZW4gKyBFQVBfUFdEX0hEUl9TSVpFKSA+IGRhdGEtPm10dSkgeworIAkJcmVzcCA9IGVhcF9tc2dfYWxsb2MoRUFQX1ZFTkRPUl9JRVRGLCBFQVBfVFlQRV9QV0QsIGRhdGEtPm10dSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50Lzk5X3dwYV9zdXBwbGljYW50IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50Lzk5X3dwYV9zdXBwbGljYW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjRkZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvOTlfd3BhX3N1cHBsaWNhbnQKQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDcwMCAvdmFyL3J1bi93cGFfc3VwcGxpY2FudCBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvZGVmY29uZmlnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDRlMzk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZwpAQCAtMCwwICsxLDU1MiBAQAorIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbgorIworIyBUaGlzIGZpbGUgbGlzdHMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlCisjIGhvc3RhcGQgYmluYXJ5LiBBbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAjIGFyZSBpZ25vcmVkLiBDb25maWd1cmF0aW9uIG9wdGlvbgorIyBsaW5lcyBtdXN0IGJlIGNvbW1lbnRlZCBvdXQgY29tcGxldGUsIGlmIHRoZXkgYXJlIG5vdCB0byBiZSBpbmNsdWRlZCwgaS5lLiwKKyMganVzdCBzZXR0aW5nIFZBUklBQkxFPW4gaXMgbm90IGRpc2FibGluZyB0aGF0IHZhcmlhYmxlLgorIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgaW4gTWFrZWZpbGUsIHNvIHZhcmlhYmxlcyBsaWtlIENGTEFHUyBhbmQgTElCUyBjYW4gYWxzbworIyBiZSBtb2RpZmllZCBmcm9tIGhlcmUuIEluIG1vc3QgY2FzZXMsIHRoZXNlIGxpbmVzIHNob3VsZCB1c2UgKz0gaW4gb3JkZXIgbm90CisjIHRvIG92ZXJyaWRlIHByZXZpb3VzIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzLgorCisKKyMgVW5jb21tZW50IGZvbGxvd2luZyB0d28gbGluZXMgYW5kIGZpeCB0aGUgcGF0aHMgaWYgeW91IGhhdmUgaW5zdGFsbGVkIE9wZW5TU0wKKyMgb3IgR251VExTIGluIG5vbi1kZWZhdWx0IGxvY2F0aW9uCisjQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9vcGVuc3NsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9vcGVuc3NsL2xpYgorCisjIFNvbWUgUmVkIEhhdCB2ZXJzaW9ucyBzZWVtIHRvIGluY2x1ZGUga2VyYmVyb3MgaGVhZGVyIGZpbGVzIGZyb20gT3BlblNTTCwgYnV0CisjIHRoZSBrZXJiZXJvcyBmaWxlcyBhcmUgbm90IGluIHRoZSBkZWZhdWx0IGluY2x1ZGUgcGF0aC4gRm9sbG93aW5nIGxpbmUgY2FuIGJlCisjIHVzZWQgdG8gZml4IGJ1aWxkIGlzc3VlcyBvbiBzdWNoIHN5c3RlbXMgKGtyYjUuaCBub3QgZm91bmQpLgorI0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9rZXJiZXJvcworCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgdmFyaW91cyBjcm9zcy1jb21waWxhdGlvbiBwbGF0Zm9ybXMKKworIyMjIyBzdmVhc29mdCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0NDPW1pcHNlbC11Y2xpYmMtZ2NjCisjQ0M9L29wdC9icmNtL2huZHRvb2xzLW1pcHNlbC11Y2xpYmMvYmluL21pcHNlbC11Y2xpYmMtZ2NjCisjQ0ZMQUdTICs9IC1PcworI0NQUEZMQUdTICs9IC1JLi4vc3JjL2luY2x1ZGUgLUkuLi8uLi9zcmMvcm91dGVyL29wZW5zc2wvaW5jbHVkZQorI0xJQlMgKz0gLUwvb3B0L2JyY20vaG5kdG9vbHMtbWlwc2VsLXVjbGliYy0wLjkuMTkvbGliIC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMgb3BlbndydCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNDQz1taXBzZWwtdWNsaWJjLWdjYworI0NDPS9vcHQvYnJjbS9obmR0b29scy1taXBzZWwtdWNsaWJjL2Jpbi9taXBzZWwtdWNsaWJjLWdjYworI0NGTEFHUyArPSAtT3MKKyNDUFBGTEFHUz0tSS4uL3NyYy9pbmNsdWRlIC1JLi4vb3BlbnNzbC0wLjkuN2QvaW5jbHVkZSBcCisjCS1JLi4vV1JUNTRHUy9yZWxlYXNlL3NyYy9pbmNsdWRlCisjTElCUyA9IC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBIb3N0IEFQIGRyaXZlcgorQ09ORklHX0RSSVZFUl9IT1NUQVA9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEFnZXJlIGRyaXZlcgorI0NPTkZJR19EUklWRVJfSEVSTUVTPXkKKyMgQ2hhbmdlIGluY2x1ZGUgZGlyZWN0b3JpZXMgdG8gbWF0Y2ggd2l0aCB0aGUgbG9jYWwgc2V0dXAKKyNDRkxBR1MgKz0gLUkuLi8uLi9oY2YgLUkuLi8uLi9pbmNsdWRlIC1JLi4vLi4vaW5jbHVkZS9oY2YKKyNDRkxBR1MgKz0gLUkuLi8uLi9pbmNsdWRlL3dpcmVsZXNzCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgbWFkd2lmaSBkcml2ZXIKKyMgRGVwcmVjYXRlZDsgdXNlIENPTkZJR19EUklWRVJfV0VYVD15IGluc3RlYWQuCisjQ09ORklHX0RSSVZFUl9NQURXSUZJPXkKKyMgU2V0IGluY2x1ZGUgZGlyZWN0b3J5IHRvIHRoZSBtYWR3aWZpIHNvdXJjZSB0cmVlCisjQ0ZMQUdTICs9IC1JLi4vLi4vbWFkd2lmaQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5kaXN3cmFwcGVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfTkRJU1dSQVBQRVI9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEF0bWVsIGRyaXZlcgorIyBDT05GSUdfRFJJVkVSX0FUTUVMPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBvbGQgQnJvYWRjb20gZHJpdmVyCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIG5ld2VyIEJyb2FkY29tIGRyaXZlciAoImh5YnJpZCBMaW51eCBkcml2ZXIiKSBzdXBwb3J0cworIyBMaW51eCB3aXJlbGVzcyBleHRlbnNpb25zIGFuZCBkb2VzIG5vdCBuZWVkIChvciBldmVuIHdvcmspIHdpdGggdGhlIG9sZAorIyBkcml2ZXIgd3JhcHBlci4gVXNlIENPTkZJR19EUklWRVJfV0VYVD15IHdpdGggdGhhdCBkcml2ZXIuCisjQ09ORklHX0RSSVZFUl9CUk9BRENPTT15CisjIEV4YW1wbGUgcGF0aCBmb3Igd2xpb2N0bC5oOyBjaGFuZ2UgdG8gbWF0Y2ggeW91ciBjb25maWd1cmF0aW9uCisjQ0ZMQUdTICs9IC1JL29wdC9XUlQ1NEdTL3JlbGVhc2Uvc3JjL2luY2x1ZGUKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBJbnRlbCBpcHcyMTAwLzIyMDAgZHJpdmVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfSVBXPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBSYWxpbmsgZHJpdmVyCisjQ09ORklHX0RSSVZFUl9SQUxJTks9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIGdlbmVyaWMgTGludXggd2lyZWxlc3MgZXh0ZW5zaW9ucworIyBOb3RlOiBXRVhUIGlzIGRlcHJlY2F0ZWQgaW4gdGhlIGN1cnJlbnQgTGludXgga2VybmVsIHZlcnNpb24gYW5kIG5vIG5ldworIyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIGl0LiBubDgwMjExLWJhc2VkIGludGVyZmFjZSBpcyB0aGUgbmV3CisjIHJlcGxhY2VtZW50IGZvciBXRVhUIGFuZCBpdHMgdXNlIGFsbG93cyB3cGFfc3VwcGxpY2FudCB0byBwcm9wZXJseSBjb250cm9sCisjIHRoZSBkcml2ZXIgdG8gaW1wcm92ZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGxpa2Ugcm9hbWluZyBhbmQgdG8gc3VwcG9ydCBuZXcKKyMgZnVuY3Rpb25hbGl0eS4KK0NPTkZJR19EUklWRVJfV0VYVD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgTGludXggZHJpdmVycyB1c2luZyB0aGUgbmw4MDIxMSBrZXJuZWwgaW50ZXJmYWNlCitDT05GSUdfRFJJVkVSX05MODAyMTE9eQorCisjIGRyaXZlcl9ubDgwMjExLmMgcmVxdWlyZXMgbGlibmwuIElmIHlvdSBhcmUgY29tcGlsaW5nIGl0IHlvdXJzZWxmCisjIHlvdSBtYXkgbmVlZCB0byBwb2ludCBob3N0YXBkIHRvIHlvdXIgdmVyc2lvbiBvZiBsaWJubC4KKyMKKyNDRkxBR1MgKz0gLUkkPHBhdGggdG8gbGlibmwgaW5jbHVkZSBmaWxlcz4KKyNMSUJTICs9IC1MJDxwYXRoIHRvIGxpYm5sIGxpYnJhcnkgZmlsZXM+CisKKyMgVXNlIGxpYm5sIHYyLjAgKG9yIDMuMCkgbGlicmFyaWVzLgorI0NPTkZJR19MSUJOTDIwPXkKKworIyBVc2UgbGlibmwgMy4yIGxpYnJhcmllcyAoaWYgdGhpcyBpcyBzZWxlY3RlZCwgQ09ORklHX0xJQk5MMjAgaXMgaWdub3JlZCkKK0NPTkZJR19MSUJOTDMyPXkKKworCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEZyZWVCU0QgbmV0ODAyMTEgbGF5ZXIgKGUuZy4sIEF0aGVyb3MgZHJpdmVyKQorI0NPTkZJR19EUklWRVJfQlNEPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9saWIKKyNMSUJTX3AgKz0gLUwvdXNyL2xvY2FsL2xpYgorI0xJQlNfYyArPSAtTC91c3IvbG9jYWwvbGliCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgV2luZG93cyBORElTCisjQ09ORklHX0RSSVZFUl9ORElTPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvdzMyYXBpL2RkaworI0xJQlMgKz0gLUwvdXNyL2xvY2FsL2xpYgorIyBGb3IgbmF0aXZlIGJ1aWxkIHVzaW5nIG1pbmd3CisjQ09ORklHX05BVElWRV9XSU5ET1dTPXkKKyMgQWRkaXRpb25hbCBkaXJlY3RvcmllcyBmb3IgY3Jvc3MtY29tcGlsYXRpb24gb24gTGludXggaG9zdCBmb3IgbWluZ3cgdGFyZ2V0CisjQ0ZMQUdTICs9IC1JL29wdC9taW5ndy9taW5ndzMyL2luY2x1ZGUvZGRrCisjTElCUyArPSAtTC9vcHQvbWluZ3cvbWluZ3czMi9saWIKKyNDQz1taW5ndzMyLWdjYworIyBCeSBkZWZhdWx0LCBkcml2ZXJfbmRpcyB1c2VzIFdpblBjYXAgZm9yIGxvdy1sZXZlbCBvcGVyYXRpb25zLiBUaGlzIGNhbiBiZQorIyByZXBsYWNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHdoaWNoIHJlcGxhY2VzIFdpblBjYXAgY2FsbHMgd2l0aCBORElTVUlPLgorIyBIb3dldmVyLCB0aGlzIHJlcXVpcmVzIHRoYXQgV1pDIGlzIGRpc2FibGVkIChuZXQgc3RvcCB3emNzdmMpIGJlZm9yZSBzdGFydGluZworIyB3cGFfc3VwcGxpY2FudC4KKyMgQ09ORklHX1VTRV9ORElTVUlPPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nCisjQ09ORklHX0RSSVZFUl9URVNUPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB3aXJlZCBFdGhlcm5ldCBkcml2ZXJzCitDT05GSUdfRFJJVkVSX1dJUkVEPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB0aGUgQnJvYWRjb20gUm9ib1N3aXRjaCBmYW1pbHkKKyNDT05GSUdfRFJJVkVSX1JPQk9TV0lUQ0g9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5vIGRyaXZlciAoZS5nLiwgV1BTIEVSIG9ubHkpCisjQ09ORklHX0RSSVZFUl9OT05FPXkKKworIyBFbmFibGUgSUVFRSA4MDIuMVggU3VwcGxpY2FudCAoYXV0b21hdGljYWxseSBpbmNsdWRlZCBpZiBhbnkgRUFQIG1ldGhvZCBpcworIyBpbmNsdWRlZCkKK0NPTkZJR19JRUVFODAyMVhfRUFQT0w9eQorCisjIEVBUC1NRDUKK0NPTkZJR19FQVBfTUQ1PXkKKworIyBFQVAtTVNDSEFQdjIKK0NPTkZJR19FQVBfTVNDSEFQVjI9eQorCisjIEVBUC1UTFMKK0NPTkZJR19FQVBfVExTPXkKKworIyBFQUwtUEVBUAorQ09ORklHX0VBUF9QRUFQPXkKKworIyBFQVAtVFRMUworQ09ORklHX0VBUF9UVExTPXkKKworIyBFQVAtRkFTVAorIyBOb3RlOiBJZiBPcGVuU1NMIGlzIHVzZWQgYXMgdGhlIFRMUyBsaWJyYXJ5LCBPcGVuU1NMIDEuMCBvciBuZXdlciBpcyBuZWVkZWQKKyMgZm9yIEVBUC1GQVNUIHN1cHBvcnQuIE9sZGVyIE9wZW5TU0wgcmVsZWFzZXMgd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLCBlLmcuLAorIyB3aXRoIG9wZW5zc2wtMC45Ljh4LXRscy1leHRlbnNpb25zLnBhdGNoLCB0byBhZGQgdGhlIG5lZWRlZCBmdW5jdGlvbnMuCisjQ09ORklHX0VBUF9GQVNUPXkKKworIyBFQVAtR1RDCitDT05GSUdfRUFQX0dUQz15CisKKyMgRUFQLU9UUAorQ09ORklHX0VBUF9PVFA9eQorCisjIEVBUC1TSU0gKGVuYWJsZSBDT05GSUdfUENTQywgaWYgRUFQLVNJTSBpcyB1c2VkKQorI0NPTkZJR19FQVBfU0lNPXkKKworIyBFQVAtUFNLIChleHBlcmltZW50YWw7IHRoaXMgaXMgX25vdF8gbmVlZGVkIGZvciBXUEEtUFNLKQorI0NPTkZJR19FQVBfUFNLPXkKKworIyBFQVAtcHdkIChzZWN1cmUgYXV0aGVudGljYXRpb24gdXNpbmcgb25seSBhIHBhc3N3b3JkKQorI0NPTkZJR19FQVBfUFdEPXkKKworIyBFQVAtUEFYCisjQ09ORklHX0VBUF9QQVg9eQorCisjIExFQVAKK0NPTkZJR19FQVBfTEVBUD15CisKKyMgRUFQLUFLQSAoZW5hYmxlIENPTkZJR19QQ1NDLCBpZiBFQVAtQUtBIGlzIHVzZWQpCisjQ09ORklHX0VBUF9BS0E9eQorCisjIEVBUC1BS0EnIChlbmFibGUgQ09ORklHX1BDU0MsIGlmIEVBUC1BS0EnIGlzIHVzZWQpLgorIyBUaGlzIHJlcXVpcmVzIENPTkZJR19FQVBfQUtBIHRvIGJlIGVuYWJsZWQsIHRvby4KKyNDT05GSUdfRUFQX0FLQV9QUklNRT15CisKKyMgRW5hYmxlIFVTSU0gc2ltdWxhdG9yIChNaWxlbmFnZSkgZm9yIEVBUC1BS0EKKyNDT05GSUdfVVNJTV9TSU1VTEFUT1I9eQorCisjIEVBUC1TQUtFCisjQ09ORklHX0VBUF9TQUtFPXkKKworIyBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTSz15CisjIEluY2x1ZGUgc3VwcG9ydCBmb3Igb3B0aW9uYWwgU0hBMjU2IGNpcGhlciBzdWl0ZSBpbiBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTS19TSEEyNTY9eQorCisjIEVBUC1UTkMgYW5kIHJlbGF0ZWQgVHJ1c3RlZCBOZXR3b3JrIENvbm5lY3Qgc3VwcG9ydCAoZXhwZXJpbWVudGFsKQorI0NPTkZJR19FQVBfVE5DPXkKKworIyBXaS1GaSBQcm90ZWN0ZWQgU2V0dXAgKFdQUykKK0NPTkZJR19XUFM9eQorIyBFbmFibGUgV1NDIDIuMCBzdXBwb3J0CisjQ09ORklHX1dQUzI9eQorIyBFbmFibGUgV1BTIGV4dGVybmFsIHJlZ2lzdHJhciBmdW5jdGlvbmFsaXR5CisjQ09ORklHX1dQU19FUj15CisjIERpc2FibGUgY3JlZGVudGlhbHMgZm9yIGFuIG9wZW4gbmV0d29yayBieSBkZWZhdWx0IHdoZW4gYWN0aW5nIGFzIGEgV1BTCisjIHJlZ2lzdHJhci4KKyNDT05GSUdfV1BTX1JFR19ESVNBQkxFX09QRU49eQorIyBFbmFibGUgV1BTIHN1cHBvcnQgd2l0aCBORkMgY29uZmlnIG1ldGhvZAorI0NPTkZJR19XUFNfTkZDPXkKKworIyBFQVAtSUtFdjIKKyNDT05GSUdfRUFQX0lLRVYyPXkKKworIyBFQVAtRUtFCisjQ09ORklHX0VBUF9FS0U9eQorCisjIFBLQ1MjMTIgKFBGWCkgc3VwcG9ydCAodXNlZCB0byByZWFkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlIGZyb20KKyMgYSBmaWxlIHRoYXQgdXN1YWxseSBoYXMgZXh0ZW5zaW9uIC5wMTIgb3IgLnBmeCkKK0NPTkZJR19QS0NTMTI9eQorCisjIFNtYXJ0Y2FyZCBzdXBwb3J0IChpLmUuLCBwcml2YXRlIGtleSBvbiBhIHNtYXJ0Y2FyZCksIGUuZy4sIHdpdGggb3BlbnNzbAorIyBlbmdpbmUuCitDT05GSUdfU01BUlRDQVJEPXkKKworIyBQQy9TQyBpbnRlcmZhY2UgZm9yIHNtYXJ0Y2FyZHMgKFVTSU0sIEdTTSBTSU0pCisjIEVuYWJsZSB0aGlzIGlmIEVBUC1TSU0gb3IgRUFQLUFLQSBpcyBpbmNsdWRlZAorI0NPTkZJR19QQ1NDPXkKKworIyBTdXBwb3J0IEhUIG92ZXJyaWRlcyAoZGlzYWJsZSBIVC9IVDQwLCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfSFRfT1ZFUlJJREVTPXkKKworIyBTdXBwb3J0IFZIVCBvdmVycmlkZXMgKGRpc2FibGUgVkhULCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfVkhUX09WRVJSSURFUz15CisKKyMgRGV2ZWxvcG1lbnQgdGVzdGluZworI0NPTkZJR19FQVBPTF9URVNUPXkKKworIyBTZWxlY3QgY29udHJvbCBpbnRlcmZhY2UgYmFja2VuZCBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMsIGUuZywgd3BhX2NsaToKKyMgdW5peCA9IFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgZm9yIExpbnV4LypCU0QpCisjIHVkcCA9IFVEUCBzb2NrZXRzIHVzaW5nIGxvY2FsaG9zdCAoMTI3LjAuMC4xKQorIyBuYW1lZF9waXBlID0gV2luZG93cyBOYW1lZCBQaXBlIChkZWZhdWx0IGZvciBXaW5kb3dzKQorIyB1ZHAtcmVtb3RlID0gVURQIHNvY2tldHMgd2l0aCByZW1vdGUgYWNjZXNzIChvbmx5IGZvciB0ZXN0cyBzeXN0ZW1zL3B1cnBvc2UpCisjIHkgPSB1c2UgZGVmYXVsdCAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisjIElmIHRoaXMgb3B0aW9uIGlzIGNvbW1lbnRlZCBvdXQsIGNvbnRyb2wgaW50ZXJmYWNlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUKKyMgYnVpbGQuCitDT05GSUdfQ1RSTF9JRkFDRT15CisKKyMgSW5jbHVkZSBzdXBwb3J0IGZvciBHTlUgUmVhZGxpbmUgYW5kIEhpc3RvcnkgTGlicmFyaWVzIGluIHdwYV9jbGkuCisjIFdoZW4gYnVpbGRpbmcgYSB3cGFfY2xpIGJpbmFyeSBmb3IgZGlzdHJpYnV0aW9uLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZXNlCisjIGxpYnJhcmllcyBhcmUgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBhcyBzdWNoLCBCU0QgbGljZW5zZSBtYXkgbm90IGFwcGx5IGZvcgorIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KKyNDT05GSUdfUkVBRExJTkU9eQorCisjIEluY2x1ZGUgaW50ZXJuYWwgbGluZSBlZGl0IG1vZGUgaW4gd3BhX2NsaS4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIHJlcGxhY2VtZW50CisjIGZvciBHTlUgUmVhZGxpbmUgdG8gcHJvdmlkZSBsaW1pdGVkIGNvbW1hbmQgbGluZSBlZGl0aW5nIGFuZCBoaXN0b3J5IHN1cHBvcnQuCisjQ09ORklHX1dQQV9DTElfRURJVD15CisKKyMgUmVtb3ZlIGRlYnVnZ2luZyBjb2RlIHRoYXQgaXMgcHJpbnRpbmcgb3V0IGRlYnVnIG1lc3NhZ2UgdG8gc3Rkb3V0LgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uc2lkZXJhYmx5CisjIGlmIGRlYnVnZ2luZyBjb2RlIGlzIG5vdCBuZWVkZWQuIFRoZSBzaXplIHJlZHVjdGlvbiBjYW4gYmUgYXJvdW5kIDM1JQorIyAoZS5nLiwgOTAga0IpLgorI0NPTkZJR19OT19TVERPVVRfREVCVUc9eQorCisjIFJlbW92ZSBXUEEgc3VwcG9ydCwgZS5nLiwgZm9yIHdpcmVkLW9ubHkgSUVFRSA4MDIuMVggc3VwcGxpY2FudCwgdG8gc2F2ZQorIyAzNS01MCBrQiBpbiBjb2RlIHNpemUuCisjQ09ORklHX05PX1dQQT15CisKKyMgUmVtb3ZlIElFRUUgODAyLjExaS9XUEEtUGVyc29uYWwgQVNDSUkgcGFzc3BocmFzZSBzdXBwb3J0CisjIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBjb2RlIHNpemUgYnkgcmVtb3Zpbmcgc3VwcG9ydCBmb3IKKyMgY29udmVydGluZyBBU0NJSSBwYXNzcGhyYXNlcyBpbnRvIFBTSy4gSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlbW92ZWQsIHRoZQorIyBQU0sgY2FuIG9ubHkgYmUgY29uZmlndXJlZCBhcyB0aGUgNjQtb2N0ZXQgaGV4c3RyaW5nIChlLmcuLCBmcm9tCisjIHdwYV9wYXNzcGhyYXNlKS4gVGhpcyBzYXZlcyBhYm91dCAwLjUga0IgaW4gY29kZSBzaXplLgorI0NPTkZJR19OT19XUEFfUEFTU1BIUkFTRT15CisKKyMgRGlzYWJsZSBzY2FuIHJlc3VsdCBwcm9jZXNzaW5nIChhcF9tb2RlPTEpIHRvIHNhdmUgY29kZSBzaXplIGJ5IGFib3V0IDEga0IuCisjIFRoaXMgY2FuIGJlIHVzZWQgaWYgYXBfc2Nhbj0xIG1vZGUgaXMgbmV2ZXIgZW5hYmxlZC4KKyNDT05GSUdfTk9fU0NBTl9QUk9DRVNTSU5HPXkKKworIyBTZWxlY3QgY29uZmlndXJhdGlvbiBiYWNrZW5kOgorIyBmaWxlID0gdGV4dCBmaWxlIChlLmcuLCB3cGFfc3VwcGxpY2FudC5jb25mOyBub3RlOiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisjCXBhdGggaXMgZ2l2ZW4gb24gY29tbWFuZCBsaW5lLCBub3QgaGVyZTsgdGhpcyBvcHRpb24gaXMganVzdCB1c2VkIHRvCisjCXNlbGVjdCB0aGUgYmFja2VuZCB0aGF0IGFsbG93cyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGJlIHVzZWQpCisjIHdpbnJlZyA9IFdpbmRvd3MgcmVnaXN0cnkgKHNlZSB3aW5fZXhhbXBsZS5yZWcgZm9yIGFuIGV4YW1wbGUpCitDT05GSUdfQkFDS0VORD1maWxlCisKKyMgUmVtb3ZlIGNvbmZpZ3VyYXRpb24gd3JpdGUgZnVuY3Rpb25hbGl0eSAoaS5lLiwgdG8gYWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzKS4gVGhlIHJ1bnRpbWUKKyMgY29uZmlndXJhdGlvbiBjYW4gc3RpbGwgYmUgY2hhbmdlZCwgdGhlIGNoYW5nZXMgYXJlIGp1c3Qgbm90IGdvaW5nIHRvIGJlCisjIHBlcnNpc3RlbnQgb3ZlciByZXN0YXJ0cy4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieQorIyBhYm91dCAzLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19XUklURT15CisKKyMgUmVtb3ZlIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gYmxvYnMgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieSBhYm91dCAxLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19CTE9CUz15CisKKyMgU2VsZWN0IHByb2dyYW0gZW50cnkgcG9pbnQgaW1wbGVtZW50YXRpb246CisjIG1haW4gPSBVTklYL1BPU0lYIGxpa2UgbWFpbigpIGZ1bmN0aW9uIChkZWZhdWx0KQorIyBtYWluX3dpbnN2YyA9IFdpbmRvd3Mgc2VydmljZSAocmVhZCBwYXJhbWV0ZXJzIGZyb20gcmVnaXN0cnkpCisjIG1haW5fbm9uZSA9IFZlcnkgYmFzaWMgZXhhbXBsZSAoZGV2ZWxvcG1lbnQgdXNlIG9ubHkpCisjQ09ORklHX01BSU49bWFpbgorCisjIFNlbGVjdCB3cmFwcGVyIGZvciBvcGVyYXRpbnMgc3lzdGVtIGFuZCBDIGxpYnJhcnkgc3BlY2lmaWMgZnVuY3Rpb25zCisjIHVuaXggPSBVTklYL1BPU0lYIGxpa2Ugc3lzdGVtcyAoZGVmYXVsdCkKKyMgd2luMzIgPSBXaW5kb3dzIHN5c3RlbXMKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX09TPXVuaXgKKworIyBTZWxlY3QgZXZlbnQgbG9vcCBpbXBsZW1lbnRhdGlvbgorIyBlbG9vcCA9IHNlbGVjdCgpIGxvb3AgKGRlZmF1bHQpCisjIGVsb29wX3dpbiA9IFdpbmRvd3MgZXZlbnRzIGFuZCBXYWl0Rm9yTXVsdGlwbGVPYmplY3QoKSBsb29wCisjQ09ORklHX0VMT09QPWVsb29wCisKKyMgU2hvdWxkIHdlIHVzZSBwb2xsIGluc3RlYWQgb2Ygc2VsZWN0PyBTZWxlY3QgaXMgdXNlZCBieSBkZWZhdWx0LgorI0NPTkZJR19FTE9PUF9QT0xMPXkKKworIyBTZWxlY3QgbGF5ZXIgMiBwYWNrZXQgaW1wbGVtZW50YXRpb24KKyMgbGludXggPSBMaW51eCBwYWNrZXQgc29ja2V0IChkZWZhdWx0KQorIyBwY2FwID0gbGlicGNhcC9saWJkbmV0L1dpblBjYXAKKyMgZnJlZWJzZCA9IEZyZWVCU0QgbGlicGNhcAorIyB3aW5wY2FwID0gV2luUGNhcCB3aXRoIHJlY2VpdmUgdGhyZWFkCisjIG5kaXMgPSBXaW5kb3dzIE5ESVNVSU8gKG5vdGU6IHJlcXVpcmVzIENPTkZJR19VU0VfTkRJU1VJTz15KQorIyBub25lID0gRW1wdHkgdGVtcGxhdGUKKyNDT05GSUdfTDJfUEFDS0VUPWxpbnV4CisKKyMgUGVlcktleSBoYW5kc2hha2UgZm9yIFN0YXRpb24gdG8gU3RhdGlvbiBMaW5rIChJRUVFIDgwMi4xMWUgRExTKQorQ09ORklHX1BFRVJLRVk9eQorCisjIElFRUUgODAyLjExdyAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKSwgYWxzbyBrbm93biBhcyBQTUYKKyMgRHJpdmVyIHN1cHBvcnQgaXMgYWxzbyBuZWVkZWQgZm9yIElFRUUgODAyLjExdy4KKyNDT05GSUdfSUVFRTgwMjExVz15CisKKyMgU2VsZWN0IFRMUyBpbXBsZW1lbnRhdGlvbgorIyBvcGVuc3NsID0gT3BlblNTTCAoZGVmYXVsdCkKKyMgZ251dGxzID0gR251VExTCisjIGludGVybmFsID0gSW50ZXJuYWwgVExTdjEgaW1wbGVtZW50YXRpb24gKGV4cGVyaW1lbnRhbCkKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX1RMUz1vcGVuc3NsCisKKyMgVExTLWJhc2VkIEVBUCBtZXRob2RzIHJlcXVpcmUgYXQgbGVhc3QgVExTIHYxLjAuIE5ld2VyIHZlcnNpb24gb2YgVExTICh2MS4xKQorIyBjYW4gYmUgZW5hYmxlZCB0byBnZXQgYSBzdHJvbmdlciBjb25zdHJ1Y3Rpb24gb2YgbWVzc2FnZXMgd2hlbiBibG9jayBjaXBoZXJzCisjIGFyZSB1c2VkLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBzb21lIGV4aXN0aW5nIFRMUyB2MS4wIC1iYXNlZAorIyBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBUTFMgdjEuMSBtZXNzYWdlIChDbGllbnRIZWxsbyBpcworIyBzZW50IHByaW9yIHRvIG5lZ290aWF0aW5nIHdoaWNoIHZlcnNpb24gd2lsbCBiZSB1c2VkKQorI0NPTkZJR19UTFNWMTE9eQorCisjIFRMUy1iYXNlZCBFQVAgbWV0aG9kcyByZXF1aXJlIGF0IGxlYXN0IFRMUyB2MS4wLiBOZXdlciB2ZXJzaW9uIG9mIFRMUyAodjEuMikKKyMgY2FuIGJlIGVuYWJsZWQgdG8gZW5hYmxlIHVzZSBvZiBzdHJvbmdlciBjcnlwdG8gYWxnb3JpdGhtcy4gSXQgc2hvdWxkIGJlCisjIG5vdGVkIHRoYXQgc29tZSBleGlzdGluZyBUTFMgdjEuMCAtYmFzZWQgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBiZSBjb21wYXRpYmxlCisjIHdpdGggVExTIHYxLjIgbWVzc2FnZSAoQ2xpZW50SGVsbG8gaXMgc2VudCBwcmlvciB0byBuZWdvdGlhdGluZyB3aGljaCB2ZXJzaW9uCisjIHdpbGwgYmUgdXNlZCkKKyNDT05GSUdfVExTVjEyPXkKKworIyBJZiBDT05GSUdfVExTPWludGVybmFsIGlzIHVzZWQsIGFkZGl0aW9uYWwgbGlicmFyeSBhbmQgaW5jbHVkZSBwYXRocyBhcmUKKyMgbmVlZGVkIGZvciBMaWJUb21NYXRoLiBBbHRlcm5hdGl2ZWx5LCBhbiBpbnRlZ3JhdGVkLCBtaW5pbWFsIHZlcnNpb24gb2YKKyMgTGliVG9tTWF0aCBjYW4gYmUgdXNlZC4gU2VlIGJlZ2lubmluZyBvZiBsaWJ0b21tYXRoLmMgZm9yIGRldGFpbHMgb24gYmVuZWZpdHMKKyMgYW5kIGRyYXdiYWNrcyBvZiB0aGlzIG9wdGlvbi4KKyNDT05GSUdfSU5URVJOQUxfTElCVE9NTUFUSD15CisjaWZuZGVmIENPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRICisjTFRNX1BBVEg9L3Vzci9zcmMvbGlidG9tbWF0aC0wLjM5CisjQ0ZMQUdTICs9IC1JJChMVE1fUEFUSCkKKyNMSUJTICs9IC1MJChMVE1fUEFUSCkKKyNMSUJTX3AgKz0gLUwkKExUTV9QQVRIKQorI2VuZGlmCisjIEF0IHRoZSBjb3N0IG9mIGFib3V0IDQga0Igb2YgYWRkaXRpb25hbCBiaW5hcnkgc2l6ZSwgdGhlIGludGVybmFsIExpYlRvbU1hdGgKKyMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBmYXN0ZXIgcm91dGluZXMgZm9yIGV4cHRtb2QsIHNxciwgYW5kIGRpdiB0bworIyBzcGVlZCB1cCBESCBhbmQgUlNBIGNhbGN1bGF0aW9uIGNvbnNpZGVyYWJseQorI0NPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRIX0ZBU1Q9eQorCisjIEluY2x1ZGUgTkRJUyBldmVudCBwcm9jZXNzaW5nIHRocm91Z2ggV01JIGludG8gd3BhX3N1cHBsaWNhbnQvd3Bhc3ZjLgorIyBUaGlzIGlzIG9ubHkgZm9yIFdpbmRvd3MgYnVpbGRzIGFuZCByZXF1aXJlcyBXTUktcmVsYXRlZCBoZWFkZXIgZmlsZXMgYW5kCisjIFdiZW1VdWlkLkxpYiBmcm9tIFBsYXRmb3JtIFNESyBldmVuIHdoZW4gYnVpbGRpbmcgd2l0aCBNaW5HVy4KKyNDT05GSUdfTkRJU19FVkVOVFNfSU5URUdSQVRFRD15CisjUExBVEZPUk1TREtMSUI9Ii9vcHQvUHJvZ3JhbSBGaWxlcy9NaWNyb3NvZnQgUGxhdGZvcm0gU0RLL0xpYiIKKworIyBBZGQgc3VwcG9ydCBmb3Igb2xkIERCdXMgY29udHJvbCBpbnRlcmZhY2UKKyMgKGZpLmVwaXRlc3QuaG9zdGFwLldQQVN1cHBsaWNhbnQpCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVUz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjIChmaS53MS5ob3N0YXAud3BhX3N1cHBsaWNhbnQxKQorQ09ORklHX0NUUkxfSUZBQ0VfREJVU19ORVc9eQorCisjIEFkZCBpbnRyb3NwZWN0aW9uIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVU19JTlRSTz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIGxvYWRpbmcgRUFQIG1ldGhvZHMgZHluYW1pY2FsbHkgYXMgc2hhcmVkIGxpYnJhcmllcy4KKyMgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBlYWNoIEVBUCBtZXRob2QgY2FuIGJlIGVpdGhlciBpbmNsdWRlZAorIyBzdGF0aWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PXkpIG9yIGR5bmFtaWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PWR5bikuCisjIER5bmFtaWMgRUFQIG1ldGhvZHMgYXJlIGJ1aWxkIGFzIHNoYXJlZCBvYmplY3RzIChlYXBfKi5zbykgYW5kIHRoZXkgbmVlZCB0bworIyBiZSBsb2FkZWQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uZmlndXJhdGlvbiBmaWxlCisjIChzZWUgbG9hZF9keW5hbWljX2VhcCBwYXJhbWV0ZXIgaW4gdGhlIGV4YW1wbGUgZmlsZSkgYmVmb3JlIGJlaW5nIHVzZWQgaW4KKyMgdGhlIG5ldHdvcmsgYmxvY2tzLgorIworIyBOb3RlIHRoYXQgc29tZSBzaGFyZWQgcGFydHMgb2YgRUFQIG1ldGhvZHMgYXJlIGluY2x1ZGVkIGluIHRoZSBtYWluIHByb2dyYW0KKyMgYW5kIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGR5bmFtaWMgRUFQIG1ldGhvZHMgdXNpbmcgdGhlc2UgcGFydHMsIHRoZQorIyBtYWluIHByb2dyYW0gbXVzdCBoYXZlIGJlZW4gYnVpbGQgd2l0aCB0aGUgRUFQIG1ldGhvZCBlbmFibGVkICg9eSBvciA9ZHluKS4KKyMgVGhpcyBtZWFucyB0aGF0IEVBUC1UTFMvUEVBUC9UVExTL0ZBU1QgY2Fubm90IGJlIGFkZGVkIGFzIGR5bmFtaWMgbGlicmFyaWVzCisjIHVubGVzcyBhdCBsZWFzdCBvbmUgb2YgdGhlbSB3YXMgaW5jbHVkZWQgaW4gdGhlIG1haW4gYnVpbGQgdG8gZm9yY2UgaW5jbHVzaW9uCisjIG9mIHRoZSBzaGFyZWQgY29kZS4gU2ltaWxhcmx5LCBhdCBsZWFzdCBvbmUgb2YgRUFQLVNJTS9BS0EgbXVzdCBiZSBpbmNsdWRlZAorIyBpbiB0aGUgbWFpbiBidWlsZCB0byBiZSBhYmxlIHRvIGxvYWQgdGhlc2UgbWV0aG9kcyBkeW5hbWljYWxseS4KKyMKKyMgUGxlYXNlIGFsc28gbm90ZSB0aGF0IHVzaW5nIGR5bmFtaWMgbGlicmFyaWVzIHdpbGwgaW5jcmVhc2UgdGhlIHRvdGFsIGJpbmFyeQorIyBzaXplLiBUaHVzLCBpdCBtYXkgbm90IGJlIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGFyZ2V0cyB0aGF0IGhhdmUgbGltaXRlZAorIyBhbW91bnQgb2YgbWVtb3J5L2ZsYXNoLgorI0NPTkZJR19EWU5BTUlDX0VBUF9NRVRIT0RTPXkKKworIyBJRUVFIFN0ZCA4MDIuMTFyLTIwMDggKEZhc3QgQlNTIFRyYW5zaXRpb24pCisjQ09ORklHX0lFRUU4MDIxMVI9eQorCisjIEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIGRlYnVnIGxvZyB0byBhIGZpbGUgKC90bXAvd3BhX3N1cHBsaWNhbnQtbG9nLSMudHh0KQorI0NPTkZJR19ERUJVR19GSUxFPXkKKworIyBTZW5kIGRlYnVnIG1lc3NhZ2VzIHRvIHN5c2xvZyBpbnN0ZWFkIG9mIHN0ZG91dAorI0NPTkZJR19ERUJVR19TWVNMT0c9eQorIyBTZXQgc3lzbG9nIGZhY2lsaXR5IGZvciBkZWJ1ZyBtZXNzYWdlcworI0NPTkZJR19ERUJVR19TWVNMT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorCisjIEFkZCBzdXBwb3J0IGZvciBzZW5kaW5nIGFsbCBkZWJ1ZyBtZXNzYWdlcyAocmVnYXJkbGVzcyBvZiBkZWJ1ZyB2ZXJib3NpdHkpCisjIHRvIHRoZSBMaW51eCBrZXJuZWwgdHJhY2luZyBmYWNpbGl0eS4gVGhpcyBoZWxwcyBkZWJ1ZyB0aGUgZW50aXJlIHN0YWNrIGJ5CisjIG1ha2luZyBpdCBlYXN5IHRvIHJlY29yZCBldmVyeXRoaW5nIGhhcHBlbmluZyBmcm9tIHRoZSBkcml2ZXIgdXAgaW50byB0aGUKKyMgc2FtZSBmaWxlLCBlLmcuLCB1c2luZyB0cmFjZS1jbWQuCisjQ09ORklHX0RFQlVHX0xJTlVYX1RSQUNJTkc9eQorCisjIEVuYWJsZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiAoc2VlIFJFQURNRSAnUHJpdmlsZWdlIHNlcGFyYXRpb24nIGZvciBkZXRhaWxzKQorI0NPTkZJR19QUklWU0VQPXkKKworIyBFbmFibGUgbWl0aWdhdGlvbiBhZ2FpbnN0IGNlcnRhaW4gYXR0YWNrcyBhZ2FpbnN0IFRLSVAgYnkgZGVsYXlpbmcgTWljaGFlbAorIyBNSUMgZXJyb3IgcmVwb3J0cyBieSBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIDAgYW5kIDYwIHNlY29uZHMKKyNDT05GSUdfREVMQVlFRF9NSUNfRVJST1JfUkVQT1JUPXkKKworIyBFbmFibGUgdHJhY2luZyBjb2RlIGZvciBkZXZlbG9wZXIgZGVidWdnaW5nCisjIFRoaXMgdHJhY2tzIHVzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG90aGVyIHJlZ2lzdHJhdGlvbnMgYW5kIHJlcG9ydHMKKyMgaW5jb3JyZWN0IHVzZSB3aXRoIGEgYmFja3RyYWNlIG9mIGNhbGwgKG9yIGFsbG9jYXRpb24pIGxvY2F0aW9uLgorI0NPTkZJR19XUEFfVFJBQ0U9eQorIyBGb3IgQlNELCB1bmNvbW1lbnQgdGhlc2UuCisjTElCUyArPSAtbGV4ZWNpbmZvCisjTElCU19wICs9IC1sZXhlY2luZm8KKyNMSUJTX2MgKz0gLWxleGVjaW5mbworCisjIFVzZSBsaWJiZmQgdG8gZ2V0IG1vcmUgZGV0YWlscyBmb3IgZGV2ZWxvcGVyIGRlYnVnZ2luZworIyBUaGlzIGVuYWJsZXMgdXNlIG9mIGxpYmJmZCB0byBnZXQgbW9yZSBkZXRhaWxlZCBzeW1ib2xzIGZvciB0aGUgYmFja3RyYWNlcworIyBnZW5lcmF0ZWQgYnkgQ09ORklHX1dQQV9UUkFDRT15LgorI0NPTkZJR19XUEFfVFJBQ0VfQkZEPXkKKyMgRm9yIEJTRCwgdW5jb21tZW50IHRoZXNlLgorI0xJQlMgKz0gLWxiZmQgLWxpYmVydHkgLWx6CisjTElCU19wICs9IC1sYmZkIC1saWJlcnR5IC1segorI0xJQlNfYyArPSAtbGJmZCAtbGliZXJ0eSAtbHoKKworQ09ORklHX1RMUyA9ICVzc2wlCitDT05GSUdfQ1RSTF9JRkFDRV9EQlVTPXkKK0NPTkZJR19DVFJMX0lGQUNFX0RCVVNfTkVXPXkKKworIyB3cGFfc3VwcGxpY2FudCBkZXBlbmRzIG9uIHN0cm9uZyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gYmVpbmcgYXZhaWxhYmxlCisjIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIG9zX2dldF9yYW5kb20oKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGZldGNoIHJhbmRvbQorIyBkYXRhIHdoZW4gbmVlZGVkLCBlLmcuLCBmb3Iga2V5IGdlbmVyYXRpb24uIE9uIExpbnV4IGFuZCBCU0Qgc3lzdGVtcywgdGhpcworIyB3b3JrcyBieSByZWFkaW5nIC9kZXYvdXJhbmRvbS4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIE9TIGVudHJvcHkgcG9vbAorIyBuZWVkcyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgd3BhX3N1cHBsaWNhbnQgaXMgc3RhcnRlZC4gVGhpcyBpcworIyBpbXBvcnRhbnQgZXNwZWNpYWxseSBvbiBlbWJlZGRlZCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBoYXJkd2FyZSByYW5kb20KKyMgbnVtYmVyIGdlbmVyYXRvciBhbmQgbWF5IGJ5IGRlZmF1bHQgc3RhcnQgdXAgd2l0aCBtaW5pbWFsIGVudHJvcHkgYXZhaWxhYmxlCisjIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uCisjCisjIEFzIGEgc2FmZXR5IG5ldCwgd3BhX3N1cHBsaWNhbnQgaXMgYnkgZGVmYXVsdCB0cnlpbmcgdG8gaW50ZXJuYWxseSBjb2xsZWN0CisjIGFkZGl0aW9uYWwgZW50cm9weSBmb3IgZ2VuZXJhdGluZyByYW5kb20gZGF0YSB0byBtaXggaW4gd2l0aCB0aGUgZGF0YSBmZXRjaGVkCisjIGZyb20gdGhlIE9TLiBUaGlzIGJ5IGl0c2VsZiBpcyBub3QgY29uc2lkZXJlZCB0byBiZSB2ZXJ5IHN0cm9uZywgYnV0IGl0IG1heQorIyBoZWxwIGluIGNhc2VzIHdoZXJlIHRoZSBzeXN0ZW0gcG9vbCBpcyBub3QgaW5pdGlhbGl6ZWQgcHJvcGVybHkuIEhvd2V2ZXIsIGl0CisjIGlzIHZlcnkgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3lzdGVtIHBvb2wgaXMgaW5pdGlhbGl6ZWQgd2l0aCBlbm91Z2gKKyMgZW50cm9weSBlaXRoZXIgYnkgdXNpbmcgaGFyZHdhcmUgYXNzaXN0ZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb3IgYnkKKyMgc3RvcmluZyBzdGF0ZSBvdmVyIGRldmljZSByZWJvb3RzLgorIworIyB3cGFfc3VwcGxpY2FudCBjYW4gYmUgY29uZmlndXJlZCB0byBtYWludGFpbiBpdHMgb3duIGVudHJvcHkgc3RvcmUgb3ZlcgorIyByZXN0YXJ0cyB0byBlbmhhbmNlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gVGhpcyBpcyBub3QgcGVyZmVjdCwgYnV0IGl0IGlzCisjIG11Y2ggbW9yZSBzZWN1cmUgdGhhbiB1c2luZyB0aGUgc2FtZSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycyBhZnRlciBldmVyeQorIyByZWJvb3QuIFRoaXMgY2FuIGJlIGVuYWJsZWQgd2l0aCAtZTxlbnRyb3B5IGZpbGU+IGNvbW1hbmQgbGluZSBvcHRpb24uIFRoZQorIyBzcGVjaWZpZWQgZmlsZSBuZWVkcyB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUgYnkgd3BhX3N1cHBsaWNhbnQuCisjCisjIElmIHRoZSBvc19nZXRfcmFuZG9tKCkgaXMga25vd24gdG8gcHJvdmlkZSBzdHJvbmcgcmFuZG9tIGRhdGEgKGUuZy4sIG9uCisjIExpbnV4L0JTRCwgdGhlIGJvYXJkIGluIHF1ZXN0aW9uIGlzIGtub3duIHRvIGhhdmUgcmVsaWFibGUgc291cmNlIG9mIHJhbmRvbQorIyBkYXRhIGZyb20gL2Rldi91cmFuZG9tKSwgdGhlIGludGVybmFsIHdwYV9zdXBwbGljYW50IHJhbmRvbSBwb29sIGNhbiBiZQorIyBkaXNhYmxlZC4gVGhpcyB3aWxsIHNhdmUgc29tZSBpbiBiaW5hcnkgc2l6ZSBhbmQgQ1BVIHVzZS4gSG93ZXZlciwgdGhpcworIyBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGZvciBidWlsZHMgdGhhdCBhcmUga25vd24gdG8gYmUgdXNlZCBvbiBkZXZpY2VzCisjIHRoYXQgbWVldCB0aGUgcmVxdWlyZW1lbnRzIGRlc2NyaWJlZCBhYm92ZS4KKyNDT05GSUdfTk9fUkFORE9NX1BPT0w9eQorCisjIElFRUUgODAyLjExbiAoSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjQ09ORklHX0lFRUU4MDIxMU49eQorCisjIElFRUUgODAyLjExYWMgKFZlcnkgSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjIChkZXBlbmRzIG9uIENPTkZJR19JRUVFODAyMTFOKQorI0NPTkZJR19JRUVFODAyMTFBQz15CisKKyMgV2lyZWxlc3MgTmV0d29yayBNYW5hZ2VtZW50IChJRUVFIFN0ZCA4MDIuMTF2LTIwMTEpCisjIE5vdGU6IFRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBub3QgY29tcGxldGUgaW1wbGVtZW50YXRpb24uCisjQ09ORklHX1dOTT15CisKKyMgSW50ZXJ3b3JraW5nIChJRUVFIDgwMi4xMXUpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGZ1bmN0aW9uYWxpdHkgdG8gaW1wcm92ZSBpbnRlcndvcmtpbmcgd2l0aAorIyBleHRlcm5hbCBuZXR3b3JrcyAoR0FTL0FOUVAgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgbmV0d29ya3MgYW5kIG5ldHdvcmsKKyMgc2VsZWN0aW9uIGJhc2VkIG9uIGF2YWlsYWJsZSBjcmVkZW50aWFscykuCisjQ09ORklHX0lOVEVSV09SS0lORz15CisKKyMgSG90c3BvdCAyLjAKKyNDT05GSUdfSFMyMD15CisKKyMgRGlzYWJsZSByb2FtaW5nIGluIHdwYV9zdXBwbGljYW50CisjQ09ORklHX05PX1JPQU1JTkc9eQorCisjIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50CisjIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGNvbnRyb2xsaW5nIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50LiBJdAorIyBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGlzIGlzIG1haW5seSBhaW1lZCBhdCBzaW1wbGUgY2FzZXMgbGlrZQorIyBXUEEyLVBlcnNvbmFsIHdoaWxlIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9ucyBsaWtlIFdQQTItRW50ZXJwcmlzZSB3aXRoIGFuCisjIGV4dGVybmFsIFJBRElVUyBzZXJ2ZXIgY2FuIGJlIHN1cHBvcnRlZCB3aXRoIGhvc3RhcGQuCitDT05GSUdfQVA9eQorCitDT05GSUdfQkdTQ0FOX1NJTVBMRT15CisKKyMgUDJQIChXaS1GaSBEaXJlY3QpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFAyUCBzdXBwb3J0IGluIHdwYV9zdXBwbGljYW50LiBTZWUgUkVBRE1FLVAyUCBmb3IKKyMgbW9yZSBpbmZvcm1hdGlvbiBvbiBQMlAgb3BlcmF0aW9ucy4KKyNDT05GSUdfUDJQPXkKKworIyBFbmFibGUgVERMUyBzdXBwb3J0CisjQ09ORklHX1RETFM9eQorCisjIFdpLUZpIERpcmVjdAorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBXaS1GaSBEaXJlY3QgZXh0ZW5zaW9ucyBmb3IgUDJQIHVzaW5nIGFuIGV4dGVybmFsCisjIHByb2dyYW0gdG8gY29udHJvbCB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBleGNoYW5nZXMgaW4gdGhlIG1lc3NhZ2VzLgorI0NPTkZJR19XSUZJX0RJU1BMQVk9eQorCisjIEF1dG9zY2FuCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGF1dG9tYXRpYyBzY2FuIHN1cHBvcnQgaW4gd3BhX3N1cHBsaWNhbnQuCisjIFNlZSB3cGFfc3VwcGxpY2FudC5jb25mIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF1dG9zY2FuIHVzYWdlLgorIworIyBFbmFibGluZyBkaXJlY3RseSBhIG1vZHVsZSB3aWxsIGVuYWJsZSBhdXRvc2NhbiBzdXBwb3J0LgorIyBGb3IgZXhwb25lbnRpYWwgbW9kdWxlOgorQ09ORklHX0FVVE9TQ0FOX0VYUE9ORU5USUFMPXkKKyMgRm9yIHBlcmlvZGljIG1vZHVsZToKKyNDT05GSUdfQVVUT1NDQU5fUEVSSU9ESUM9eQorCisjIFBhc3N3b3JkIChhbmQgcGFzc3BocmFzZSwgZXRjLikgYmFja2VuZCBmb3IgZXh0ZXJuYWwgc3RvcmFnZQorIyBUaGVzZSBvcHRpb25hbCBtZWNoYW5pc21zIGNhbiBiZSB1c2VkIHRvIGFkZCBzdXBwb3J0IGZvciBzdG9yaW5nIHBhc3N3b3JkcworIyBhbmQgb3RoZXIgc2VjcmV0cyBpbiBleHRlcm5hbCAodG8gd3BhX3N1cHBsaWNhbnQpIGxvY2F0aW9uLiBUaGlzIGFsbG93cywgZm9yCisjIGV4YW1wbGUsIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMga2V5IHN0b3JhZ2UgdG8gYmUgdXNlZAorIworIyBFeHRlcm5hbCBwYXNzd29yZCBiYWNrZW5kIGZvciB0ZXN0aW5nIHB1cnBvc2VzIChkZXZlbG9wZXIgdXNlKQorI0NPTkZJR19FWFRfUEFTU1dPUkRfVEVTVD15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5ZTVkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKworCitXUEFfU1VQX0JJTj0iL3Vzci9zYmluL3dwYV9zdXBwbGljYW50IgorV1BBX1NVUF9QTkFNRT0id3BhX3N1cHBsaWNhbnQiCitXUEFfU1VQX1BJREZJTEU9Ii92YXIvcnVuL3dwYV9zdXBwbGljYW50LiRJRkFDRS5waWQiCitXUEFfU1VQX09QVElPTlM9Ii1CIC1QICRXUEFfU1VQX1BJREZJTEUgLWkgJElGQUNFIgorCitWRVJCT1NJVFk9MAorCisKK2lmIFsgLXMgIiRJRl9XUEFfQ09ORiIgXTsgdGhlbgorCVdQQV9TVVBfQ09ORj0iLWMgJElGX1dQQV9DT05GIgorZWxzZQorCWV4aXQgMAorZmkKKworaWYgWyAhIC14ICIkV1BBX1NVUF9CSU4iIF07IHRoZW4KKwkKKwlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiBiaW5hcmllcyBub3QgZXhlY3V0YWJsZSBvciBtaXNzaW5nIGZyb20gJFdQQV9TVVBfQklOIgorCWZpCisJCisJZXhpdCAxCitmaQorCitpZiBbICIkTU9ERSIgPSAic3RhcnQiIF0gOyB0aGVuCisJIyBkcml2ZXIgdHlwZSBvZiBpbnRlcmZhY2UsIGRlZmF1bHRzIHRvIHdleHQgd2hlbiB1bmRlZmluZWQKKwlpZiBbIC1zICIvZXRjL3dwYV9zdXBwbGljYW50L2RyaXZlci4kSUZBQ0UiIF07IHRoZW4KKwkJSUZfV1BBX0RSSVZFUj0kKGNhdCAiL2V0Yy93cGFfc3VwcGxpY2FudC9kcml2ZXIuJElGQUNFIikKKwllbGlmIFsgLXogIiRJRl9XUEFfRFJJVkVSIiBdOyB0aGVuCisJCQorCQlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCQllY2hvICIkV1BBX1NVUF9QTkFNRTogd3BhLWRyaXZlciBub3QgcHJvdmlkZWQsIHVzaW5nIFwid2V4dFwiIgorCQlmaQorCQkKKwkJSUZfV1BBX0RSSVZFUj0id2V4dCIKKwlmaQorCQorCSMgaWYgd2UgaGF2ZSBwYXNzZWQgdGhlIGNyaXRlcmlhLCBzdGFydCB3cGFfc3VwcGxpY2FudAorCWlmIFsgLW4gIiRXUEFfU1VQX0NPTkYiIF07IHRoZW4KKwkJCisJCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiAkV1BBX1NVUF9CSU4gJFdQQV9TVVBfT1BUSU9OUyAkV1BBX1NVUF9DT05GIC1EICRJRl9XUEFfRFJJVkVSIgorCQlmaQorCQkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXN0YXJ0YXMgJFdQQV9TVVBfQklOIC0tcGlkZmlsZSAkV1BBX1NVUF9QSURGSUxFIFwKKwkJCS0tICAkV1BBX1NVUF9PUFRJT05TICRXUEFfU1VQX0NPTkYgLUQgJElGX1dQQV9EUklWRVIKKwlmaQorCisJIyBpZiB0aGUgaW50ZXJmYWNlIHNvY2tldCBleGlzdHMsIHRoZW4gd3BhX3N1cHBsaWNhbnQgd2FzIGludm9rZWQgc3VjY2Vzc2Z1bGx5CisJaWYgWyAtUyAiJFdQQV9DT01NT05fQ1RSTF9JRkFDRS8kSUZBQ0UiIF07IHRoZW4KKwkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IGN0cmxfaW50ZXJmYWNlIHNvY2tldCBsb2NhdGVkIGF0ICRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIgorCQlmaQorCisJCWV4aXQgMAorCQkKKwlmaQorCQorZWxpZiBbICIkTU9ERSIgPSAic3RvcCIgXTsgdGhlbgorCisJaWYgWyAtZiAiJFdQQV9TVVBfUElERklMRSIgXTsgdGhlbgorCQkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IHRlcm1pbmF0aW5nICRXUEFfU1VQX1BOQU1FIGRhZW1vbiIKKwkJZmkKKwkJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXBpZGZpbGUJJFdQQV9TVVBfUElERklMRQorCQkJCisJCWlmIFsgLVMgIiRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIiBdOyB0aGVuCisJCQlybSAtZiAkV1BBX0NPTU1PTl9DVFJMX0lGQUNFLyRJRkFDRQorCQlmaQorCQkJCisJCWlmIFsgLWYgIiRXUEFfU1VQX1BJREZJTEUiIF07IHRoZW4KKwkJCXJtIC1mICRXUEFfU1VQX1BJREZJTEUKKwkJZmkKKwlmaQorCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyNThmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mCkBAIC0wLDAgKzEsNjkwIEBACisjIyMjIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGNvbmZpZ3VyYXRpb24gZmlsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoaXMgZmlsZSBkZXNjcmliZXMgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCBhbmQgbGlzdHMgYWxsIGF2YWlsYWJsZSBvcHRpb24uCisjIFBsZWFzZSBhbHNvIHRha2UgYSBsb29rIGF0IHNpbXBsZXIgY29uZmlndXJhdGlvbiBleGFtcGxlcyBpbiAnZXhhbXBsZXMnCisjIHN1YmRpcmVjdG9yeS4KKyMKKyMgRW1wdHkgbGluZXMgYW5kIGxpbmVzIHN0YXJ0aW5nIHdpdGggIyBhcmUgaWdub3JlZAorCisjIE5PVEUhIFRoaXMgZmlsZSBtYXkgY29udGFpbiBwYXNzd29yZCBpbmZvcm1hdGlvbiBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIG1hZGUKKyMgcmVhZGFibGUgb25seSBieSByb290IHVzZXIgb24gbXVsdGl1c2VyIHN5c3RlbXMuCisKKyMgTm90ZTogQWxsIGZpbGUgcGF0aHMgaW4gdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIHVzZSBmdWxsIChhYnNvbHV0ZSwKKyMgbm90IHJlbGF0aXZlIHRvIHdvcmtpbmcgZGlyZWN0b3J5KSBwYXRoIGluIG9yZGVyIHRvIGFsbG93IHdvcmtpbmcgZGlyZWN0b3J5CisjIHRvIGJlIGNoYW5nZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisKKyMgV2hldGhlciB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byB1cGRhdGUgKG92ZXJ3cml0ZSkgY29uZmlndXJhdGlvbgorIworIyBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byBvdmVyd3JpdGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHdoZW5ldmVyIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZCAoZS5nLiwgbmV3IG5ldHdvcmsgYmxvY2sgaXMgYWRkZWQgd2l0aAorIyB3cGFfY2xpIG9yIHdwYV9ndWksIG9yIGEgcGFzc3dvcmQgaXMgY2hhbmdlZCkuIFRoaXMgaXMgcmVxdWlyZWQgZm9yCisjIHdwYV9jbGkvd3BhX2d1aSB0byBiZSBhYmxlIHRvIHN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgcGVybWFuZW50bHkuCisjIFBsZWFzZSBub3RlIHRoYXQgb3ZlcndyaXRpbmcgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgcmVtb3ZlIHRoZSBjb21tZW50cyBmcm9tCisjIGl0LgorI3VwZGF0ZV9jb25maWc9MQorCisjIGdsb2JhbCBjb25maWd1cmF0aW9uIChzaGFyZWQgYnkgYWxsIG5ldHdvcmsgYmxvY2tzKQorIworIyBQYXJhbWV0ZXJzIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UuIElmIHRoaXMgaXMgc3BlY2lmaWVkLCB3cGFfc3VwcGxpY2FudAorIyB3aWxsIG9wZW4gYSBjb250cm9sIGludGVyZmFjZSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMgdG8KKyMgbWFuYWdlIHdwYV9zdXBwbGljYW50LiBUaGUgbWVhbmluZyBvZiB0aGlzIHN0cmluZyBkZXBlbmRzIG9uIHdoaWNoIGNvbnRyb2wKKyMgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyB1c2VkLiBGb3IgYWxsIGNhc2VzLCB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgcGFyYW1ldGVyCisjIGluIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29udHJvbCBpbnRlcmZhY2UgaXMKKyMgZW5hYmxlZC4KKyMKKyMgRm9yIFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgb24gTGludXggYW5kIEJTRCk6IFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdAorIyB3aWxsIGJlIGNyZWF0ZWQgZm9yIFVOSVggZG9tYWluIHNvY2tldHMgZm9yIGxpc3RlbmluZyB0byByZXF1ZXN0cyBmcm9tCisjIGV4dGVybmFsIHByb2dyYW1zIChDTEkvR1VJLCBldGMuKSBmb3Igc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBjb25maWd1cmF0aW9uLgorIyBUaGUgc29ja2V0IGZpbGUgd2lsbCBiZSBuYW1lZCBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIG5hbWUsIHNvIG11bHRpcGxlCisjIHdwYV9zdXBwbGljYW50IHByb2Nlc3NlcyBjYW4gYmUgcnVuIGF0IHRoZSBzYW1lIHRpbWUgaWYgbW9yZSB0aGFuIG9uZQorIyBpbnRlcmZhY2UgaXMgdXNlZC4KKyMgL3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgaXMgdGhlIHJlY29tbWVuZGVkIGRpcmVjdG9yeSBmb3Igc29ja2V0cyBhbmQgYnkKKyMgZGVmYXVsdCwgd3BhX2NsaSB3aWxsIHVzZSBpdCB3aGVuIHRyeWluZyB0byBjb25uZWN0IHdpdGggd3BhX3N1cHBsaWNhbnQuCisjCisjIEFjY2VzcyBjb250cm9sIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUKKyMgZGlyZWN0b3J5IHRvIGFsbG93IG9ubHkgbWVtYmVycyBvZiBhIGdyb3VwIHRvIHVzZSBzb2NrZXRzLiBUaGlzIHdheSwgaXQgaXMKKyMgcG9zc2libGUgdG8gcnVuIHdwYV9zdXBwbGljYW50IGFzIHJvb3QgKHNpbmNlIGl0IG5lZWRzIHRvIGNoYW5nZSBuZXR3b3JrCisjIGNvbmZpZ3VyYXRpb24gYW5kIG9wZW4gcmF3IHNvY2tldHMpIGFuZCBzdGlsbCBhbGxvdyBHVUkvQ0xJIGNvbXBvbmVudHMgdG8gYmUKKyMgcnVuIGFzIG5vbi1yb290IHVzZXJzLiBIb3dldmVyLCBzaW5jZSB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgdG8KKyMgY2hhbmdlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoaXMgYWNjZXNzIG5lZWRzIHRvIGJlIHByb3RlY3RlZCBpbiBtYW55CisjIGNhc2VzLiBCeSBkZWZhdWx0LCB3cGFfc3VwcGxpY2FudCBpcyBjb25maWd1cmVkIHRvIHVzZSBnaWQgMCAocm9vdCkuIElmIHlvdQorIyB3YW50IHRvIGFsbG93IG5vbi1yb290IHVzZXJzIHRvIHVzZSB0aGUgY29udHJvbCBpbnRlcmZhY2UsIGFkZCBhIG5ldyBncm91cAorIyBhbmQgY2hhbmdlIHRoaXMgdmFsdWUgdG8gbWF0Y2ggd2l0aCB0aGF0IGdyb3VwLiBBZGQgdXNlcnMgdGhhdCBzaG91bGQgaGF2ZQorIyBjb250cm9sIGludGVyZmFjZSBhY2Nlc3MgdG8gdGhpcyBncm91cC4gSWYgdGhpcyB2YXJpYWJsZSBpcyBjb21tZW50ZWQgb3V0IG9yCisjIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBncm91cCB3aWxsIG5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlCisjIHZhbHVlIGl0IGdvdCBieSBkZWZhdWx0IHdoZW4gdGhlIGRpcmVjdG9yeSBvciBzb2NrZXQgd2FzIGNyZWF0ZWQuCisjCisjIFdoZW4gY29uZmlndXJpbmcgYm90aCB0aGUgZGlyZWN0b3J5IGFuZCBncm91cCwgdXNlIGZvbGxvd2luZyBmb3JtYXQ6CisjIERJUj0vdmFyL3J1bi93cGFfc3VwcGxpY2FudCBHUk9VUD13aGVlbAorIyBESVI9L3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgR1JPVVA9MAorIyAoZ3JvdXAgY2FuIGJlIGVpdGhlciBncm91cCBuYW1lIG9yIGdpZCkKKyMKKyMgRm9yIFVEUCBjb25uZWN0aW9ucyAoZGVmYXVsdCBvbiBXaW5kb3dzKTogVGhlIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gVGhpcworIyB2YXJpYWJsZSBpcyBqdXN0IHVzZWQgdG8gc2VsZWN0IHRoYXQgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzIHRvIGJlIGNyZWF0ZWQuCisjIFRoZSB2YWx1ZSBjYW4gYmUgc2V0IHRvLCBlLmcuLCB1ZHAgKGN0cmxfaW50ZXJmYWNlPXVkcCkKKyMKKyMgRm9yIFdpbmRvd3MgTmFtZWQgUGlwZTogVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNlY3VyaXR5IGRlc2NyaXB0b3IKKyMgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFNlY3VyaXR5IGRlc2NyaXB0b3IgY2FuIGJlCisjIHNldCB1c2luZyBTZWN1cml0eSBEZXNjcmlwdG9yIFN0cmluZyBGb3JtYXQgKHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tLworIyBsaWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9zZWNhdXRoei9zZWN1cml0eS8KKyMgc2VjdXJpdHlfZGVzY3JpcHRvcl9zdHJpbmdfZm9ybWF0LmFzcCkuIFRoZSBkZXNjcmlwdG9yIHN0cmluZyBuZWVkcyB0byBiZQorIyBwcmVmaXhlZCB3aXRoIFNEREw9LiBGb3IgZXhhbXBsZSwgY3RybF9pbnRlcmZhY2U9U0RETD1EOiB3b3VsZCBzZXQgYW4gZW1wdHkKKyMgREFDTCAod2hpY2ggd2lsbCByZWplY3QgYWxsIGNvbm5lY3Rpb25zKS4gU2VlIFJFQURNRS1XaW5kb3dzLnR4dCBmb3IgbW9yZQorIyBpbmZvcm1hdGlvbiBhYm91dCBTRERMIHN0cmluZyBmb3JtYXQuCisjCitjdHJsX2ludGVyZmFjZT0vdmFyL3J1bi93cGFfc3VwcGxpY2FudAorCisjIElFRUUgODAyLjFYL0VBUE9MIHZlcnNpb24KKyMgd3BhX3N1cHBsaWNhbnQgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gSUVFRSBTdGQgODAyLjFYLTIwMDQgd2hpY2ggZGVmaW5lcworIyBFQVBPTCB2ZXJzaW9uIDIuIEhvd2V2ZXIsIHRoZXJlIGFyZSBtYW55IEFQcyB0aGF0IGRvIG5vdCBoYW5kbGUgdGhlIG5ldworIyB2ZXJzaW9uIG51bWJlciBjb3JyZWN0bHkgKHRoZXkgc2VlbSB0byBkcm9wIHRoZSBmcmFtZXMgY29tcGxldGVseSkuIEluIG9yZGVyCisjIHRvIG1ha2Ugd3BhX3N1cHBsaWNhbnQgaW50ZXJvcGVyYXRlIHdpdGggdGhlc2UgQVBzLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgc2V0CisjIHRvIDEgYnkgZGVmYXVsdC4gVGhpcyBjb25maWd1cmF0aW9uIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHNldCBpdCB0byB0aGUgbmV3CisjIHZlcnNpb24gKDIpLgorZWFwb2xfdmVyc2lvbj0xCisKKyMgQVAgc2Nhbm5pbmcvc2VsZWN0aW9uCisjIEJ5IGRlZmF1bHQsIHdwYV9zdXBwbGljYW50IHJlcXVlc3RzIGRyaXZlciB0byBwZXJmb3JtIEFQIHNjYW5uaW5nIGFuZCB0aGVuCisjIHVzZXMgdGhlIHNjYW4gcmVzdWx0cyB0byBzZWxlY3QgYSBzdWl0YWJsZSBBUC4gQW5vdGhlciBhbHRlcm5hdGl2ZSBpcyB0bworIyBhbGxvdyB0aGUgZHJpdmVyIHRvIHRha2UgY2FyZSBvZiBBUCBzY2FubmluZyBhbmQgc2VsZWN0aW9uIGFuZCB1c2UKKyMgd3BhX3N1cHBsaWNhbnQganVzdCB0byBwcm9jZXNzIEVBUE9MIGZyYW1lcyBiYXNlZCBvbiBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkcml2ZXIuCisjIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uCisjIDA6IGRyaXZlciB0YWtlcyBjYXJlIG9mIHNjYW5uaW5nLCBBUCBzZWxlY3Rpb24sIGFuZCBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyAgICBwYXJhbWV0ZXJzIChlLmcuLCBXUEEgSUUgZ2VuZXJhdGlvbik7IHRoaXMgbW9kZSBjYW4gYWxzbyBiZSB1c2VkIHdpdGgKKyMgICAgbm9uLVdQQSBkcml2ZXJzIHdoZW4gdXNpbmcgSUVFRSA4MDIuMVggbW9kZTsgZG8gbm90IHRyeSB0byBhc3NvY2lhdGUgd2l0aAorIyAgICBBUHMgKGkuZS4sIGV4dGVybmFsIHByb2dyYW0gbmVlZHMgdG8gY29udHJvbCBhc3NvY2lhdGlvbikuIFRoaXMgbW9kZSBtdXN0CisjICAgIGFsc28gYmUgdXNlZCB3aGVuIHVzaW5nIHdpcmVkIEV0aGVybmV0IGRyaXZlcnMuCisjIDI6IGxpa2UgMCwgYnV0IGFzc29jaWF0ZSB3aXRoIEFQcyB1c2luZyBzZWN1cml0eSBwb2xpY3kgYW5kIFNTSUQgKGJ1dCBub3QKKyMgICAgQlNTSUQpOyB0aGlzIGNhbiBiZSB1c2VkLCBlLmcuLCB3aXRoIG5kaXN3cmFwcGVyIGFuZCBORElTIGRyaXZlcnMgdG8KKyMgICAgZW5hYmxlIG9wZXJhdGlvbiB3aXRoIGhpZGRlbiBTU0lEcyBhbmQgb3B0aW1pemVkIHJvYW1pbmc7IGluIHRoaXMgbW9kZSwKKyMgICAgdGhlIG5ldHdvcmsgYmxvY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXJlIHRyaWVkIG9uZSBieSBvbmUgdW50aWwKKyMgICAgdGhlIGRyaXZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgYXNzb2NpYXRpb247IGVhY2ggbmV0d29yayBibG9jayBzaG91bGQgaGF2ZQorIyAgICBleHBsaWNpdCBzZWN1cml0eSBwb2xpY3kgKGkuZS4sIG9ubHkgb25lIG9wdGlvbiBpbiB0aGUgbGlzdHMpIGZvcgorIyAgICBrZXlfbWdtdCwgcGFpcndpc2UsIGdyb3VwLCBwcm90byB2YXJpYWJsZXMKK2FwX3NjYW49MQorCisjIEVBUCBmYXN0IHJlLWF1dGhlbnRpY2F0aW9uCisjIEJ5IGRlZmF1bHQsIGZhc3QgcmUtYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIEVBUCBtZXRob2RzIHRoYXQKKyMgc3VwcG9ydCBpdC4gVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGZhc3QgcmUtYXV0aGVudGljYXRpb24uCisjIE5vcm1hbGx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGRpc2FibGUgdGhpcy4KK2Zhc3RfcmVhdXRoPTEKKworIyBPcGVuU1NMIEVuZ2luZSBzdXBwb3J0CisjIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gbG9hZCBPcGVuU1NMIGVuZ2luZXMuCisjIFRoZSB0d28gZW5naW5lcyB0aGF0IGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5IGFyZSBzaG93biBiZWxvdzoKKyMgVGhleSBhcmUgYm90aCBmcm9tIHRoZSBvcGVuc2MgcHJvamVjdCAoaHR0cDovL3d3dy5vcGVuc2Mub3JnLykKKyMgQnkgZGVmYXVsdCBubyBlbmdpbmVzIGFyZSBsb2FkZWQuCisjIG1ha2UgdGhlIG9wZW5zYyBlbmdpbmUgYXZhaWxhYmxlCisjb3BlbnNjX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfb3BlbnNjLnNvCisjIG1ha2UgdGhlIHBrY3MxMSBlbmdpbmUgYXZhaWxhYmxlCisjcGtjczExX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfcGtjczExLnNvCisjIGNvbmZpZ3VyZSB0aGUgcGF0aCB0byB0aGUgcGtjczExIG1vZHVsZSByZXF1aXJlZCBieSB0aGUgcGtjczExIGVuZ2luZQorI3BrY3MxMV9tb2R1bGVfcGF0aD0vdXNyL2xpYi9wa2NzMTEvb3BlbnNjLXBrY3MxMS5zbworCisjIER5bmFtaWMgRUFQIG1ldGhvZHMKKyMgSWYgRUFQIG1ldGhvZHMgd2VyZSBidWlsdCBkeW5hbWljYWxseSBhcyBzaGFyZWQgb2JqZWN0IGZpbGVzLCB0aGV5IG5lZWQgdG8gYmUKKyMgbG9hZGVkIGhlcmUgYmVmb3JlIGJlaW5nIHVzZWQgaW4gdGhlIG5ldHdvcmsgYmxvY2tzLiBCeSBkZWZhdWx0LCBFQVAgbWV0aG9kcworIyBhcmUgaW5jbHVkZWQgc3RhdGljYWxseSBpbiB0aGUgYnVpbGQsIHNvIHRoZXNlIGxpbmVzIGFyZSBub3QgbmVlZGVkCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfdGxzLnNvCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfbWQ1LnNvCisKKyMgRHJpdmVyIGludGVyZmFjZSBwYXJhbWV0ZXJzCisjIFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGFyYml0cmFyeSBkcml2ZXIgaW50ZXJhY2UgcGFyYW1ldGVycy4gVGhlCisjIGZvcm1hdCBpcyBzcGVjaWZpYyB0byB0aGUgc2VsZWN0ZWQgZHJpdmVyIGludGVyZmFjZS4gVGhpcyBmaWVsZCBpcyBub3QgdXNlZAorIyBpbiBtb3N0IGNhc2VzLgorI2RyaXZlcl9wYXJhbT0iZmllbGQ9dmFsdWUiCisKKyMgTWF4aW11bSBsaWZldGltZSBmb3IgUE1LU0EgaW4gc2Vjb25kczsgZGVmYXVsdCA0MzIwMAorI2RvdDExUlNOQUNvbmZpZ1BNS0xpZmV0aW1lPTQzMjAwCisjIFRocmVzaG9sZCBmb3IgcmVhdXRoZW50aWNhdGlvbiAocGVyY2VudGFnZSBvZiBQTUsgbGlmZXRpbWUpOyBkZWZhdWx0IDcwCisjZG90MTFSU05BQ29uZmlnUE1LUmVhdXRoVGhyZXNob2xkPTcwCisjIFRpbWVvdXQgZm9yIHNlY3VyaXR5IGFzc29jaWF0aW9uIG5lZ290aWF0aW9uIGluIHNlY29uZHM7IGRlZmF1bHQgNjAKKyNkb3QxMVJTTkFDb25maWdTQVRpbWVvdXQ9NjAKKworIyBuZXR3b3JrIGJsb2NrCisjCisjIEVhY2ggbmV0d29yayAodXN1YWxseSBBUCdzIHNoYXJpbmcgdGhlIHNhbWUgU1NJRCkgaXMgY29uZmlndXJlZCBhcyBhIHNlcGFyYXRlCisjIGJsb2NrIGluIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLiBUaGUgbmV0d29yayBibG9ja3MgYXJlIGluIHByZWZlcmVuY2Ugb3JkZXIKKyMgKHRoZSBmaXJzdCBtYXRjaCBpcyB1c2VkKS4KKyMKKyMgbmV0d29yayBibG9jayBmaWVsZHM6CisjCisjIGRpc2FibGVkOgorIwkwID0gdGhpcyBuZXR3b3JrIGNhbiBiZSB1c2VkIChkZWZhdWx0KQorIwkxID0gdGhpcyBuZXR3b3JrIGJsb2NrIGlzIGRpc2FibGVkIChjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIGN0cmxfaWZhY2UsCisjCSAgICBlLmcuLCB3aXRoIHdwYV9jbGkgb3Igd3BhX2d1aSkKKyMKKyMgaWRfc3RyOiBOZXR3b3JrIGlkZW50aWZpZXIgc3RyaW5nIGZvciBleHRlcm5hbCBzY3JpcHRzLiBUaGlzIHZhbHVlIGlzIHBhc3NlZAorIwl0byBleHRlcm5hbCBhY3Rpb24gc2NyaXB0IHRocm91Z2ggd3BhX2NsaSBhcyBXUEFfSURfU1RSIGVudmlyb25tZW50CisjCXZhcmlhYmxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIG5ldHdvcmsgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKyMKKyMgc3NpZDogU1NJRCAobWFuZGF0b3J5KTsgZWl0aGVyIGFzIGFuIEFTQ0lJIHN0cmluZyB3aXRoIGRvdWJsZSBxdW90YXRpb24gb3IKKyMJYXMgaGV4IHN0cmluZzsgbmV0d29yayBuYW1lCisjCisjIHNjYW5fc3NpZDoKKyMJMCA9IGRvIG5vdCBzY2FuIHRoaXMgU1NJRCB3aXRoIHNwZWNpZmljIFByb2JlIFJlcXVlc3QgZnJhbWVzIChkZWZhdWx0KQorIwkxID0gc2NhbiB3aXRoIFNTSUQtc3BlY2lmaWMgUHJvYmUgUmVxdWVzdCBmcmFtZXMgKHRoaXMgY2FuIGJlIHVzZWQgdG8KKyMJICAgIGZpbmQgQVBzIHRoYXQgZG8gbm90IGFjY2VwdCBicm9hZGNhc3QgU1NJRCBvciB1c2UgbXVsdGlwbGUgU1NJRHM7CisjCSAgICB0aGlzIHdpbGwgYWRkIGxhdGVuY3kgdG8gc2Nhbm5pbmcsIHNvIGVuYWJsZSB0aGlzIG9ubHkgd2hlbiBuZWVkZWQpCisjCisjIGJzc2lkOiBCU1NJRCAob3B0aW9uYWwpOyBpZiBzZXQsIHRoaXMgbmV0d29yayBibG9jayBpcyB1c2VkIG9ubHkgd2hlbgorIwlhc3NvY2lhdGluZyB3aXRoIHRoZSBBUCB1c2luZyB0aGUgY29uZmlndXJlZCBCU1NJRAorIworIyBwcmlvcml0eTogcHJpb3JpdHkgZ3JvdXAgKGludGVnZXIpCisjIEJ5IGRlZmF1bHQsIGFsbCBuZXR3b3JrcyB3aWxsIGdldCBzYW1lIHByaW9yaXR5IGdyb3VwICgwKS4gSWYgc29tZSBvZiB0aGUKKyMgbmV0d29ya3MgYXJlIG1vcmUgZGVzaXJhYmxlLCB0aGlzIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgb3JkZXIgaW4KKyMgd2hpY2ggd3BhX3N1cHBsaWNhbnQgZ29lcyB0aHJvdWdoIHRoZSBuZXR3b3JrcyB3aGVuIHNlbGVjdGluZyBhIEJTUy4gVGhlCisjIHByaW9yaXR5IGdyb3VwcyB3aWxsIGJlIGl0ZXJhdGVkIGluIGRlY3JlYXNpbmcgcHJpb3JpdHkgKGkuZS4sIHRoZSBsYXJnZXIgdGhlCisjIHByaW9yaXR5IHZhbHVlLCB0aGUgc29vbmVyIHRoZSBuZXR3b3JrIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc2NhbiByZXN1bHRzKS4KKyMgV2l0aGluIGVhY2ggcHJpb3JpdHkgZ3JvdXAsIG5ldHdvcmtzIHdpbGwgYmUgc2VsZWN0ZWQgYmFzZWQgb24gc2VjdXJpdHkKKyMgcG9saWN5LCBzaWduYWwgc3RyZW5ndGgsIGV0Yy4KKyMgUGxlYXNlIG5vdGUgdGhhdCBBUCBzY2FubmluZyB3aXRoIHNjYW5fc3NpZD0xIGFuZCBhcF9zY2FuPTIgbW9kZSBhcmUgbm90CisjIHVzaW5nIHRoaXMgcHJpb3JpdHkgdG8gc2VsZWN0IHRoZSBvcmRlciBmb3Igc2Nhbm5pbmcuIEluc3RlYWQsIHRoZXkgdHJ5IHRoZQorIyBuZXR3b3JrcyBpbiB0aGUgb3JkZXIgdGhhdCB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisjCisjIG1vZGU6IElFRUUgODAyLjExIG9wZXJhdGlvbiBtb2RlCisjIDAgPSBpbmZyYXN0cnVjdHVyZSAoTWFuYWdlZCkgbW9kZSwgaS5lLiwgYXNzb2NpYXRlIHdpdGggYW4gQVAgKGRlZmF1bHQpCisjIDEgPSBJQlNTIChhZC1ob2MsIHBlZXItdG8tcGVlcikKKyMgTm90ZTogSUJTUyBjYW4gb25seSBiZSB1c2VkIHdpdGgga2V5X21nbXQgTk9ORSAocGxhaW50ZXh0IGFuZCBzdGF0aWMgV0VQKQorIyBhbmQga2V5X21nbXQ9V1BBLU5PTkUgKGZpeGVkIGdyb3VwIGtleSBUS0lQL0NDTVApLiBJbiBhZGRpdGlvbiwgYXBfc2NhbiBoYXMKKyMgdG8gYmUgc2V0IHRvIDIgZm9yIElCU1MuIFdQQS1Ob25lIHJlcXVpcmVzIGZvbGxvd2luZyBuZXR3b3JrIGJsb2NrIG9wdGlvbnM6CisjIHByb3RvPVdQQSwga2V5X21nbXQ9V1BBLU5PTkUsIHBhaXJ3aXNlPU5PTkUsIGdyb3VwPVRLSVAgKG9yIENDTVAsIGJ1dCBub3QKKyMgYm90aCksIGFuZCBwc2sgbXVzdCBhbHNvIGJlIHNldC4KKyMKKyMgcHJvdG86IGxpc3Qgb2YgYWNjZXB0ZWQgcHJvdG9jb2xzCisjIFdQQSA9IFdQQS9JRUVFIDgwMi4xMWkvRDMuMAorIyBSU04gPSBXUEEyL0lFRUUgODAyLjExaSAoYWxzbyBXUEEyIGNhbiBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvciBSU04pCisjIElmIG5vdCBzZXQsIHRoaXMgZGVmYXVsdHMgdG86IFdQQSBSU04KKyMKKyMga2V5X21nbXQ6IGxpc3Qgb2YgYWNjZXB0ZWQgYXV0aGVudGljYXRlZCBrZXkgbWFuYWdlbWVudCBwcm90b2NvbHMKKyMgV1BBLVBTSyA9IFdQQSBwcmUtc2hhcmVkIGtleSAodGhpcyByZXF1aXJlcyAncHNrJyBmaWVsZCkKKyMgV1BBLUVBUCA9IFdQQSB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gKHRoaXMgY2FuIHVzZSBhbiBleHRlcm5hbAorIwlwcm9ncmFtLCBlLmcuLCBYc3VwcGxpY2FudCwgZm9yIElFRUUgODAyLjFYIEVBUCBBdXRoZW50aWNhdGlvbgorIyBJRUVFODAyMVggPSBJRUVFIDgwMi4xWCB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gYW5kIChvcHRpb25hbGx5KSBkeW5hbWljYWxseQorIwlnZW5lcmF0ZWQgV0VQIGtleXMKKyMgTk9ORSA9IFdQQSBpcyBub3QgdXNlZDsgcGxhaW50ZXh0IG9yIHN0YXRpYyBXRVAgY291bGQgYmUgdXNlZAorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBXUEEtUFNLIFdQQS1FQVAKKyMKKyMgYXV0aF9hbGc6IGxpc3Qgb2YgYWxsb3dlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zCisjIE9QRU4gPSBPcGVuIFN5c3RlbSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQgZm9yIFdQQS9XUEEyKQorIyBTSEFSRUQgPSBTaGFyZWQgS2V5IGF1dGhlbnRpY2F0aW9uIChyZXF1aXJlcyBzdGF0aWMgV0VQIGtleXMpCisjIExFQVAgPSBMRUFQL05ldHdvcmsgRUFQIChvbmx5IHVzZWQgd2l0aCBMRUFQKQorIyBJZiBub3Qgc2V0LCBhdXRvbWF0aWMgc2VsZWN0aW9uIGlzIHVzZWQgKE9wZW4gU3lzdGVtIHdpdGggTEVBUCBlbmFibGVkIGlmCisjIExFQVAgaXMgYWxsb3dlZCBhcyBvbmUgb2YgdGhlIEVBUCBtZXRob2RzKS4KKyMKKyMgcGFpcndpc2U6IGxpc3Qgb2YgYWNjZXB0ZWQgcGFpcndpc2UgKHVuaWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBOT05FID0gVXNlIG9ubHkgR3JvdXAgS2V5cyAoZGVwcmVjYXRlZCwgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpZiBBUHMgc3VwcG9ydAorIwlwYWlyd2lzZSBrZXlzKQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAKKyMKKyMgZ3JvdXA6IGxpc3Qgb2YgYWNjZXB0ZWQgZ3JvdXAgKGJyb2FkY2FzdC9tdWx0aWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBXRVAxMDQgPSBXRVAgKFdpcmVkIEVxdWl2YWxlbnQgUHJpdmFjeSkgd2l0aCAxMDQtYml0IGtleQorIyBXRVA0MCA9IFdFUCAoV2lyZWQgRXF1aXZhbGVudCBQcml2YWN5KSB3aXRoIDQwLWJpdCBrZXkgW0lFRUUgODAyLjExXQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisjCisjIHBzazogV1BBIHByZXNoYXJlZCBrZXk7IDI1Ni1iaXQgcHJlLXNoYXJlZCBrZXkKKyMgVGhlIGtleSB1c2VkIGluIFdQQS1QU0sgbW9kZSBjYW4gYmUgZW50ZXJlZCBlaXRoZXIgYXMgNjQgaGV4LWRpZ2l0cywgaS5lLiwKKyMgMzIgYnl0ZXMgb3IgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSAoaW4gd2hpY2ggY2FzZSwgdGhlIHJlYWwgUFNLIHdpbGwgYmUKKyMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwYXNzcGhyYXNlIGFuZCBTU0lEKS4gQVNDSUkgcGFzc3BocmFzZSBtdXN0IGJlIGJldHdlZW4KKyMgOCBhbmQgNjMgY2hhcmFjdGVycyAoaW5jbHVzaXZlKS4KKyMgVGhpcyBmaWVsZCBpcyBub3QgbmVlZGVkLCBpZiBXUEEtRUFQIGlzIHVzZWQuCisjIE5vdGU6IFNlcGFyYXRlIHRvb2wsIHdwYV9wYXNzcGhyYXNlLCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSAyNTYtYml0IGtleXMKKyMgZnJvbSBBU0NJSSBwYXNzcGhyYXNlLiBUaGlzIHByb2Nlc3MgdXNlcyBsb3Qgb2YgQ1BVIGFuZCB3cGFfc3VwcGxpY2FudAorIyBzdGFydHVwIGFuZCByZWNvbmZpZ3VyYXRpb24gdGltZSBjYW4gYmUgb3B0aW1pemVkIGJ5IGdlbmVyYXRpbmcgdGhlIFBTSyBvbmx5CisjIG9ubHkgd2hlbiB0aGUgcGFzc3BocmFzZSBvciBTU0lEIGhhcyBhY3R1YWxseSBjaGFuZ2VkLgorIworIyBlYXBvbF9mbGFnczogSUVFRSA4MDIuMVgvRUFQT0wgb3B0aW9ucyAoYml0IGZpZWxkKQorIyBEeW5hbWljIFdFUCBrZXkgcmVxdWlyZWQgZm9yIG5vbi1XUEEgbW9kZQorIyBiaXQwICgxKTogcmVxdWlyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgdW5pY2FzdCBXRVAga2V5CisjIGJpdDEgKDIpOiByZXF1aXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBicm9hZGNhc3QgV0VQIGtleQorIyAJKDMgPSByZXF1aXJlIGJvdGgga2V5czsgZGVmYXVsdCkKKyMgTm90ZTogV2hlbiB1c2luZyB3aXJlZCBhdXRoZW50aWNhdGlvbiwgZWFwb2xfZmxhZ3MgbXVzdCBiZSBzZXQgdG8gMCBmb3IgdGhlCisjIGF1dGhlbnRpY2F0aW9uIHRvIGJlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisjCisjIHByb2FjdGl2ZV9rZXlfY2FjaGluZzoKKyMgRW5hYmxlL2Rpc2FibGUgb3Bwb3J0dW5pc3RpYyBQTUtTQSBjYWNoaW5nIGZvciBXUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjCisjIHdlcF9rZXkwLi4zOiBTdGF0aWMgV0VQIGtleSAoQVNDSUkgaW4gZG91YmxlIHF1b3RhdGlvbiwgZS5nLiAiYWJjZGUiIG9yCisjIGhleCB3aXRob3V0IHF1b3RhdGlvbiwgZS5nLiwgMDEwMjAzMDQwNSkKKyMgd2VwX3R4X2tleWlkeDogRGVmYXVsdCBXRVAga2V5IGluZGV4IChUWCkgKDAuLjMpCisjCisjIHBlZXJrZXk6IFdoZXRoZXIgUGVlcktleSBuZWdvdGlhdGlvbiBmb3IgZGlyZWN0IGxpbmtzIChJRUVFIDgwMi4xMWUgRExTKSBpcworIyBhbGxvd2VkLiBUaGlzIGlzIG9ubHkgdXNlZCB3aXRoIFJTTi9XUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjcGVlcmtleT0xCisjCisjIEZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgdXNlZCB3aXRoIGludGVybmFsIEVBUCBpbXBsZW1lbnRhdGlvbi4KKyMgZWFwOiBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhY2NlcHRlZCBFQVAgbWV0aG9kcworIwlNRDUgPSBFQVAtTUQ1ICh1bnNlY3VyZSBhbmQgZG9lcyBub3QgZ2VuZXJhdGUga2V5aW5nIG1hdGVyaWFsIC0+CisjCQkJY2Fubm90IGJlIHVzZWQgd2l0aCBXUEE7IHRvIGJlIHVzZWQgYXMgYSBQaGFzZSAyIG1ldGhvZAorIwkJCXdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE1TQ0hBUFYyID0gRUFQLU1TQ0hBUHYyIChjYW5ub3QgYmUgdXNlZCBzZXBhcmF0ZWx5IHdpdGggV1BBOyB0byBiZSB1c2VkCisjCQlhcyBhIFBoYXNlIDIgbWV0aG9kIHdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE9UUCA9IEVBUC1PVFAgKGNhbm5vdCBiZSB1c2VkIHNlcGFyYXRlbHkgd2l0aCBXUEE7IHRvIGJlIHVzZWQKKyMJCWFzIGEgUGhhc2UgMiBtZXRob2Qgd2l0aCBFQVAtUEVBUCBvciBFQVAtVFRMUykKKyMgICAgICAgR1RDID0gRUFQLUdUQyAoY2Fubm90IGJlIHVzZWQgc2VwYXJhdGVseSB3aXRoIFdQQTsgdG8gYmUgdXNlZAorIwkJYXMgYSBQaGFzZSAyIG1ldGhvZCB3aXRoIEVBUC1QRUFQIG9yIEVBUC1UVExTKQorIwlUTFMgPSBFQVAtVExTIChjbGllbnQgYW5kIHNlcnZlciBjZXJ0aWZpY2F0ZSkKKyMJUEVBUCA9IEVBUC1QRUFQICh3aXRoIHR1bm5lbGxlZCBFQVAgYXV0aGVudGljYXRpb24pCisjCVRUTFMgPSBFQVAtVFRMUyAod2l0aCB0dW5uZWxsZWQgRUFQIG9yIFBBUC9DSEFQL01TQ0hBUC9NU0NIQVBWMgorIwkJCSBhdXRoZW50aWNhdGlvbikKKyMJSWYgbm90IHNldCwgYWxsIGNvbXBpbGVkIGluIG1ldGhvZHMgYXJlIGFsbG93ZWQuCisjCisjIGlkZW50aXR5OiBJZGVudGl0eSBzdHJpbmcgZm9yIEVBUAorIyBhbm9ueW1vdXNfaWRlbnRpdHk6IEFub255bW91cyBpZGVudGl0eSBzdHJpbmcgZm9yIEVBUCAodG8gYmUgdXNlZCBhcyB0aGUKKyMJdW5lbmNyeXB0ZWQgaWRlbnRpdHkgd2l0aCBFQVAgdHlwZXMgdGhhdCBzdXBwb3J0IGRpZmZlcmVudCB0dW5uZWxsZWQKKyMJaWRlbnRpdHksIGUuZy4sIEVBUC1UVExTKQorIyBwYXNzd29yZDogUGFzc3dvcmQgc3RyaW5nIGZvciBFQVAKKyMgY2FfY2VydDogRmlsZSBwYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUgKFBFTS9ERVIpLiBUaGlzIGZpbGUgY2FuIGhhdmUgb25lCisjCW9yIG1vcmUgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMuIElmIGNhX2NlcnQgYW5kIGNhX3BhdGggYXJlIG5vdAorIwlpbmNsdWRlZCwgc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZAorIwlhIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkIHdoZW4gdXNpbmcKKyMJRUFQLVRMUy9UVExTL1BFQVAuIEZ1bGwgcGF0aCBzaG91bGQgYmUgdXNlZCBzaW5jZSB3b3JraW5nIGRpcmVjdG9yeSBtYXkKKyMJY2hhbmdlIHdoZW4gd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgorIwlPbiBXaW5kb3dzLCB0cnVzdGVkIENBIGNlcnRpZmljYXRlcyBjYW4gYmUgbG9hZGVkIGZyb20gdGhlIHN5c3RlbQorIwljZXJ0aWZpY2F0ZSBzdG9yZSBieSBzZXR0aW5nIHRoaXMgdG8gY2VydF9zdG9yZTovLzxuYW1lPiwgZS5nLiwKKyMJY2FfY2VydD0iY2VydF9zdG9yZTovL0NBIiBvciBjYV9jZXJ0PSJjZXJ0X3N0b3JlOi8vUk9PVCIuCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjIGNhX3BhdGg6IERpcmVjdG9yeSBwYXRoIGZvciBDQSBjZXJ0aWZpY2F0ZSBmaWxlcyAoUEVNKS4gVGhpcyBwYXRoIG1heQorIwljb250YWluIG11bHRpcGxlIENBIGNlcnRpZmljYXRlcyBpbiBPcGVuU1NMIGZvcm1hdC4gQ29tbW9uIHVzZSBmb3IgdGhpcworIwlpcyB0byBwb2ludCB0byBzeXN0ZW0gdHJ1c3RlZCBDQSBsaXN0IHdoaWNoIGlzIG9mdGVuIGluc3RhbGxlZCBpbnRvCisjCWRpcmVjdG9yeSBsaWtlIC9ldGMvc3NsL2NlcnRzLiBJZiBjb25maWd1cmVkLCB0aGVzZSBjZXJ0aWZpY2F0ZXMgYXJlCisjCWFkZGVkIHRvIHRoZSBsaXN0IG9mIHRydXN0ZWQgQ0FzLiBjYV9jZXJ0IG1heSBhbHNvIGJlIGluY2x1ZGVkIGluIHRoYXQKKyMJY2FzZSwgYnV0IGl0IGlzIG5vdCByZXF1aXJlZC4KKyMgY2xpZW50X2NlcnQ6IEZpbGUgcGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSAoUEVNL0RFUikKKyMJRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbgorIwl3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5OiBGaWxlIHBhdGggdG8gY2xpZW50IHByaXZhdGUga2V5IGZpbGUgKFBFTS9ERVIvUEZYKQorIwlXaGVuIFBLQ1MjMTIvUEZYIGZpbGUgKC5wMTIvLnBmeCkgaXMgdXNlZCwgY2xpZW50X2NlcnQgc2hvdWxkIGJlCisjCWNvbW1lbnRlZCBvdXQuIEJvdGggdGhlIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlYWQgZnJvbQorIwl0aGUgUEtDUyMxMiBmaWxlIGluIHRoaXMgY2FzZS4gRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcKKyMJZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCVdpbmRvd3MgY2VydGlmaWNhdGUgc3RvcmUgY2FuIGJlIHVzZWQgYnkgbGVhdmluZyBjbGllbnRfY2VydCBvdXQgYW5kCisjCWNvbmZpZ3VyaW5nIHByaXZhdGVfa2V5IGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisjCWNlcnQ6Ly9zdWJzdHJpbmdfdG9fbWF0Y2gKKyMJaGFzaDovL2NlcnRpZmljYXRlX3RodW1icHJpbnRfaW5faGV4CisjCWZvciBleGFtcGxlOiBwcml2YXRlX2tleT0iaGFzaDovLzYzMDkzYWE5YzQ3ZjU2YWU4ODMzNGM3YjY1YTQiCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5X3Bhc3N3ZDogUGFzc3dvcmQgZm9yIHByaXZhdGUga2V5IGZpbGUgKGlmIGxlZnQgb3V0LCB0aGlzIHdpbGwgYmUKKyMJYXNrZWQgdGhyb3VnaCBjb250cm9sIGludGVyZmFjZSkKKyMgZGhfZmlsZTogRmlsZSBwYXRoIHRvIERIL0RTQSBwYXJhbWV0ZXJzIGZpbGUgKGluIFBFTSBmb3JtYXQpCisjCVRoaXMgaXMgYW4gb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzZXR0aW5nIHBhcmFtZXRlcnMgZm9yIGFuCisjCWVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIG1vc3QgY2FzZXMsIHRoZSBkZWZhdWx0IFJTQQorIwlhdXRoZW50aWNhdGlvbiBkb2VzIG5vdCB1c2UgdGhpcyBjb25maWd1cmF0aW9uLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZQorIwlzZXR1cCBSU0EgdG8gdXNlIGVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIGFkZGl0aW9uLCBjaXBoZXJzIHdpdGgKKyMJRFNBIGtleXMgYWx3YXlzIHVzZSBlcGhlbWVyYWwgREgga2V5cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBhY2hpZXZlCisjCWZvcndhcmQgc2VjcmVjeS4gSWYgdGhlIGZpbGUgaXMgaW4gRFNBIHBhcmFtZXRlcnMgZm9ybWF0LCBpdCB3aWxsIGJlCisjCWF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gREggcGFyYW1zLgorIyBzdWJqZWN0X21hdGNoOiBTdWJzdHJpbmcgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWJqZWN0IG9mIHRoZQorIwlhdXRoZW50aWNhdGlvbiBzZXJ2ZXIgY2VydGlmaWNhdGUuIElmIHRoaXMgc3RyaW5nIGlzIHNldCwgdGhlIHNlcnZlcgorIwlzZXJ0aWZpY2F0ZSBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0IGNvbnRhaW5zIHRoaXMgc3RyaW5nIGluIHRoZSBzdWJqZWN0LgorIwlUaGUgc3ViamVjdCBzdHJpbmcgaXMgaW4gZm9sbG93aW5nIGZvcm1hdDoKKyMJL0M9VVMvU1Q9Q0EvTD1TYW4gRnJhbmNpc2NvL0NOPVRlc3QgQVMvZW1haWxBZGRyZXNzPWFzQGV4YW1wbGUuY29tCisjIGFsdHN1YmplY3RfbWF0Y2g6IFNlbWljb2xvbiBzZXBhcmF0ZWQgc3RyaW5nIG9mIGVudHJpZXMgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0CisjCXRoZSBhbHRlcm5hdGl2ZSBzdWJqZWN0IG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMJSWYgdGhpcyBzdHJpbmcgaXMgc2V0LCB0aGUgc2VydmVyIHNlcnRpZmljYXRlIGlzIG9ubHkgYWNjZXB0ZWQgaWYgaXQKKyMJY29udGFpbnMgb25lIG9mIHRoZSBlbnRyaWVzIGluIGFuIGFsdGVybmF0aXZlIHN1YmplY3QgbmFtZSBleHRlbnNpb24uCisjCWFsdFN1YmplY3ROYW1lIHN0cmluZyBpcyBpbiBmb2xsb3dpbmcgZm9ybWF0OiBUWVBFOlZBTFVFCisjCUV4YW1wbGU6IEVNQUlMOnNlcnZlckBleGFtcGxlLmNvbQorIwlFeGFtcGxlOiBETlM6c2VydmVyLmV4YW1wbGUuY29tO0ROUzpzZXJ2ZXIyLmV4YW1wbGUuY29tCisjCUZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOiBFTUFJTCwgRE5TLCBVUkkKKyMgcGhhc2UxOiBQaGFzZTEgKG91dGVyIGF1dGhlbnRpY2F0aW9uLCBpLmUuLCBUTFMgdHVubmVsKSBwYXJhbWV0ZXJzCisjCShzdHJpbmcgd2l0aCBmaWVsZC12YWx1ZSBwYWlycywgZS5nLiwgInBlYXB2ZXI9MCIgb3IKKyMJInBlYXB2ZXI9MSBwZWFwbGFiZWw9MSIpCisjCSdwZWFwdmVyJyBjYW4gYmUgdXNlZCB0byBmb3JjZSB3aGljaCBQRUFQIHZlcnNpb24gKDAgb3IgMSkgaXMgdXNlZC4KKyMJJ3BlYXBsYWJlbD0xJyBjYW4gYmUgdXNlZCB0byBmb3JjZSBuZXcgbGFiZWwsICJjbGllbnQgUEVBUCBlbmNyeXB0aW9uIiwKKyMJdG8gYmUgdXNlZCBkdXJpbmcga2V5IGRlcml2YXRpb24gd2hlbiBQRUFQdjEgb3IgbmV3ZXIuIE1vc3QgZXhpc3RpbmcKKyMJUEVBUHYxIGltcGxlbWVudGF0aW9uIHNlZW0gdG8gYmUgdXNpbmcgdGhlIG9sZCBsYWJlbCwgImNsaWVudCBFQVAKKyMJZW5jcnlwdGlvbiIsIGFuZCB3cGFfc3VwcGxpY2FudCBpcyBub3cgdXNpbmcgdGhhdCBhcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyMJU29tZSBzZXJ2ZXJzLCBlLmcuLCBSYWRpYXRvciwgbWF5IHJlcXVpcmUgcGVhcGxhYmVsPTEgY29uZmlndXJhdGlvbiB0bworIwlpbnRlcm9wZXJhdGUgd2l0aCBQRUFQdjE7IHNlZSBlYXBfdGVzdGluZy50eHQgZm9yIG1vcmUgZGV0YWlscy4KKyMJJ3BlYXBfb3V0ZXJfc3VjY2Vzcz0wJyBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgUEVBUCBhdXRoZW50aWNhdGlvbiBvbgorIwl0dW5uZWxlZCBFQVAtU3VjY2Vzcy4gVGhpcyBpcyByZXF1aXJlZCB3aXRoIHNvbWUgUkFESVVTIHNlcnZlcnMgdGhhdAorIwlpbXBsZW1lbnQgZHJhZnQtam9zZWZzc29uLXBwcGV4dC1lYXAtdGxzLWVhcC0wNS50eHQgKGUuZy4sCisjCUx1Y2VudCBOYXZpc1JhZGl1cyB2NC40LjAgd2l0aCBQRUFQIGluICJJRVRGIERyYWZ0IDUiIG1vZGUpCisjCWluY2x1ZGVfdGxzX2xlbmd0aD0xIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHdwYV9zdXBwbGljYW50IHRvIGluY2x1ZGUKKyMJVExTIE1lc3NhZ2UgTGVuZ3RoIGZpZWxkIGluIGFsbCBUTFMgbWVzc2FnZXMgZXZlbiBpZiB0aGV5IGFyZSBub3QKKyMJZnJhZ21lbnRlZC4KKyMJc2ltX21pbl9udW1fY2hhbD0zIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBFQVAtU0lNIHRvIHJlcXVpcmUgdGhyZWUKKyMJY2hhbGxlbmdlcyAoYnkgZGVmYXVsdCwgaXQgYWNjZXB0cyAyIG9yIDMpCisjIHBoYXNlMjogUGhhc2UyIChpbm5lciBhdXRoZW50aWNhdGlvbiB3aXRoIFRMUyB0dW5uZWwpIHBhcmFtZXRlcnMKKyMJKHN0cmluZyB3aXRoIGZpZWxkLXZhbHVlIHBhaXJzLCBlLmcuLCAiYXV0aD1NU0NIQVBWMiIgZm9yIEVBUC1QRUFQIG9yCisjCSJhdXRoZWFwPU1TQ0hBUFYyIGF1dGhlYXA9TUQ1IiBmb3IgRUFQLVRUTFMpCisjIEZvbGxvd2luZyBjZXJ0aWZpY2F0ZS9wcml2YXRlIGtleSBmaWVsZHMgYXJlIHVzZWQgaW4gaW5uZXIgUGhhc2UyCisjIGF1dGhlbnRpY2F0aW9uIHdoZW4gdXNpbmcgRUFQLVRUTFMgb3IgRUFQLVBFQVAuCisjIGNhX2NlcnQyOiBGaWxlIHBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZS4gVGhpcyBmaWxlIGNhbiBoYXZlIG9uZSBvciBtb3JlCisjCXRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzLiBJZiBjYV9jZXJ0MiBhbmQgY2FfcGF0aDIgYXJlIG5vdCBpbmNsdWRlZCwKKyMJc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZCBhIHRydXN0ZWQKKyMJQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkLgorIyBjYV9wYXRoMjogRGlyZWN0b3J5IHBhdGggZm9yIENBIGNlcnRpZmljYXRlIGZpbGVzIChQRU0pCisjIGNsaWVudF9jZXJ0MjogRmlsZSBwYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlCisjIHByaXZhdGVfa2V5MjogRmlsZSBwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSBmaWxlCisjIHByaXZhdGVfa2V5Ml9wYXNzd2Q6IFBhc3N3b3JkIGZvciBwcml2YXRlIGtleSBmaWxlCisjIGRoX2ZpbGUyOiBGaWxlIHBhdGggdG8gREgvRFNBIHBhcmFtZXRlcnMgZmlsZSAoaW4gUEVNIGZvcm1hdCkKKyMgc3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHN1YmplY3Qgb2YgdGhlCisjCWF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMgYWx0c3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIGFsdGVybmF0aXZlIHN1YmplY3QKKyMJbmFtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyIGNlcnRpZmljYXRlLgorIworIyBmcmFnbWVudF9zaXplOiBNYXhpbXVtIEVBUCBmcmFnbWVudCBzaXplIGluIGJ5dGVzIChkZWZhdWx0IDEzOTgpLgorIwlUaGlzIHZhbHVlIGxpbWl0cyB0aGUgZnJhZ21lbnQgc2l6ZSBmb3IgRUFQIG1ldGhvZHMgdGhhdCBzdXBwb3J0CisjCWZyYWdtZW50YXRpb24gKGUuZy4sIEVBUC1UTFMgYW5kIEVBUC1QRUFQKS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0CisjCXNtYWxsIGVub3VnaCB0byBtYWtlIHRoZSBFQVAgbWVzc2FnZXMgZml0IGluIE1UVSBvZiB0aGUgbmV0d29yaworIwlpbnRlcmZhY2UgdXNlZCBmb3IgRUFQT0wuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0CisjCWNhc2VzLgorIworIyBFQVAtUFNLIHZhcmlhYmxlczoKKyMgZWFwcHNrOiAxNi1ieXRlICgxMjgtYml0LCAzMiBoZXggZGlnaXRzKSBwcmUtc2hhcmVkIGtleSBpbiBoZXggZm9ybWF0CisjIG5haTogdXNlciBOQUkKKyMKKyMgRUFQLVBBWCB2YXJpYWJsZXM6CisjIGVhcHBzazogMTYtYnl0ZSAoMTI4LWJpdCwgMzIgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIworIyBFQVAtU0FLRSB2YXJpYWJsZXM6CisjIGVhcHBzazogMzItYnl0ZSAoMjU2LWJpdCwgNjQgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIwkodGhpcyBpcyBjb25jYXRlbmF0aW9uIG9mIFJvb3QtU2VjcmV0LUEgYW5kIFJvb3QtU2VjcmV0LUIpCisjIG5haTogdXNlciBOQUkgKFBFRVJJRCkKKyMKKyMgRUFQLUdQU0sgdmFyaWFibGVzOgorIyBlYXBwc2s6IFByZS1zaGFyZWQga2V5IGluIGhleCBmb3JtYXQgKGF0IGxlYXN0IDEyOCBiaXRzLCBpLmUuLCAzMiBoZXggZGlnaXRzKQorIyBuYWk6IHVzZXIgTkFJIChJRF9DbGllbnQpCisjCisjIEVBUC1GQVNUIHZhcmlhYmxlczoKKyMgcGFjX2ZpbGU6IEZpbGUgcGF0aCBmb3IgdGhlIFBBQyBlbnRyaWVzLiB3cGFfc3VwcGxpY2FudCB3aWxsIG5lZWQgdG8gYmUgYWJsZQorIwl0byBjcmVhdGUgdGhpcyBmaWxlIGFuZCB3cml0ZSB1cGRhdGVzIHRvIGl0IHdoZW4gUEFDIGlzIGJlaW5nCisjCXByb3Zpc2lvbmVkIG9yIHJlZnJlc2hlZC4gRnVsbCBwYXRoIHRvIHRoZSBmaWxlIHNob3VsZCBiZSB1c2VkIHNpbmNlCisjCXdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlCisjCWJhY2tncm91bmQuIEFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5CisjCXNldHRpbmcgdGhpcyB0byBibG9iOi8vPGJsb2IgbmFtZT4KKyMgcGhhc2UxOiBmYXN0X3Byb3Zpc2lvbmluZz0xIG9wdGlvbiBlbmFibGVzIGluLWxpbmUgcHJvdmlzaW9uaW5nIG9mIEVBUC1GQVNUCisjCWNyZWRlbnRpYWxzIChQQUMpCisjCisjIHdwYV9zdXBwbGljYW50IHN1cHBvcnRzIG51bWJlciBvZiAiRUFQIHdvcmthcm91bmRzIiB0byB3b3JrIGFyb3VuZAorIyBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlcyB3aXRoIGluY29ycmVjdGx5IGJlaGF2aW5nIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuCisjIFRoZXNlIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBzb21lIG9mIHRoZSBpc3N1ZXMgYXJlIHByZXNlbnQgaW4gbGFyZ2UKKyMgbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuIFN0cmljdCBFQVAgY29uZm9ybWFuY2UgbW9kZSBjYW4gYmUKKyMgY29uZmlndXJlZCBieSBkaXNhYmxpbmcgd29ya2Fyb3VuZHMgd2l0aCBlYXBfd29ya2Fyb3VuZD0wLgorCisjIEV4YW1wbGUgYmxvY2tzOgorCisjIFNpbXBsZSBjYXNlOiBXUEEtUFNLLCBQU0sgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSwgYWxsb3cgYWxsIHZhbGlkIGNpcGhlcnMKK25ldHdvcms9eworCXNzaWQ9InNpbXBsZSIKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJcHJpb3JpdHk9NQorfQorCisjIFNhbWUgYXMgcHJldmlvdXMsIGJ1dCByZXF1ZXN0IFNTSUQtc3BlY2lmaWMgc2Nhbm5pbmcgKGZvciBBUHMgdGhhdCByZWplY3QKKyMgYnJvYWRjYXN0IFNTSUQpCituZXR3b3JrPXsKKwlzc2lkPSJzZWNvbmQgc3NpZCIKKwlzY2FuX3NzaWQ9MQorCXBzaz0idmVyeSBzZWNyZXQgcGFzc3BocmFzZSIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtUFNLIGlzIHVzZWQuIEFueSB2YWxpZCBjaXBoZXIgY29tYmluYXRpb24gaXMgYWNjZXB0ZWQuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCXByb3RvPVdQQQorCWtleV9tZ210PVdQQS1QU0sKKwlwYWlyd2lzZT1DQ01QIFRLSVAKKwlncm91cD1DQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisJcHNrPTA2YjRiZTE5ZGEyODlmNDc1YWE0NmEzM2NiNzkzMDI5ZDRhYjNkYjdhMjNlZTkyMzgyZWIwMTA2YzcyYWM3YmIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtRUFQIGlzIHVzZWQuIEJvdGggQ0NNUCBhbmQgVEtJUCBpcyBhY2NlcHRlZC4gQW4gQVAgdGhhdCB1c2VkIFdFUDEwNAorIyBvciBXRVA0MCBhcyB0aGUgZ3JvdXAgY2lwaGVyIHdpbGwgbm90IGJlIGFjY2VwdGVkLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlwcm90bz1SU04KKwlrZXlfbWdtdD1XUEEtRUFQCisJcGFpcndpc2U9Q0NNUCBUS0lQCisJZ3JvdXA9Q0NNUCBUS0lQCisJZWFwPVRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcHJpb3JpdHk9MQorfQorCisjIEVBUC1QRUFQL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gZm9yIFJBRElVUyBzZXJ2ZXJzIHRoYXQgdXNlIHRoZSBuZXcgcGVhcGxhYmVsCisjIChlLmcuLCBSYWRpYXRvcikKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1QRUFQCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMT0icGVhcGxhYmVsPTEiCisJcGhhc2UyPSJhdXRoPU1TQ0hBUFYyIgorCXByaW9yaXR5PTEwCit9CisKKyMgRUFQLVRUTFMvRUFQLU1ENS1DaGFsbGVuZ2UgY29uZmlndXJhdGlvbiB3aXRoIGFub255bW91cyBpZGVudGl0eSBmb3IgdGhlCisjIHVuZW5jcnlwdGVkIHVzZS4gUmVhbCBpZGVudGl0eSBpcyBzZW50IG9ubHkgd2l0aGluIGFuIGVuY3J5cHRlZCBUTFMgdHVubmVsLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJcHJpb3JpdHk9MgorfQorCisjIEVBUC1UVExTL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gd2l0aCBhbm9ueW1vdXMgaWRlbnRpdHkgZm9yIHRoZSB1bmVuY3J5cHRlZAorIyB1c2UuIFJlYWwgaWRlbnRpdHkgaXMgc2VudCBvbmx5IHdpdGhpbiBhbiBlbmNyeXB0ZWQgVExTIHR1bm5lbC4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMj0iYXV0aD1NU0NIQVBWMiIKK30KKworIyBXUEEtRUFQLCBFQVAtVFRMUyB3aXRoIGRpZmZlcmVudCBDQSBjZXJ0aWZpY2F0ZSB1c2VkIGZvciBvdXRlciBhbmQgaW5uZXIKKyMgYXV0aGVudGljYXRpb24uCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VFRMUworCSMgUGhhc2UxIC8gb3V0ZXIgYXV0aGVudGljYXRpb24KKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCSMgUGhhc2UgMiAvIGlubmVyIGF1dGhlbnRpY2F0aW9uCisJcGhhc2UyPSJhdXRoZWFwPVRMUyIKKwljYV9jZXJ0Mj0iL2V0Yy9jZXJ0L2NhMi5wZW0iCisJY2xpZW50X2NlcnQyPSIvZXRjL2Nlci91c2VyLnBlbSIKKwlwcml2YXRlX2tleTI9Ii9ldGMvY2VyL3VzZXIucHJ2IgorCXByaXZhdGVfa2V5Ml9wYXNzd2Q9InBhc3N3b3JkIgorCXByaW9yaXR5PTIKK30KKworIyBCb3RoIFdQQS1QU0sgYW5kIFdQQS1FQVAgaXMgYWNjZXB0ZWQuIE9ubHkgQ0NNUCBpcyBhY2NlcHRlZCBhcyBwYWlyd2lzZSBhbmQKKyMgZ3JvdXAgY2lwaGVyLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlic3NpZD0wMDoxMToyMjozMzo0NDo1NQorCXByb3RvPVdQQSBSU04KKwlrZXlfbWdtdD1XUEEtUFNLIFdQQS1FQVAKKwlwYWlyd2lzZT1DQ01QCisJZ3JvdXA9Q0NNUAorCXBzaz0wNmI0YmUxOWRhMjg5ZjQ3NWFhNDZhMzNjYjc5MzAyOWQ0YWIzZGI3YTIzZWU5MjM4MmViMDEwNmM3MmFjN2JiCit9CisKKyMgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIFNTSUQsIHNvIHVzZSBoZXggc3RyaW5nLiBEZWZhdWx0IHRvIFdQQS1QU0ssIFdQQS1FQVAKKyMgYW5kIGFsbCB2YWxpZCBjaXBoZXJzLgorbmV0d29yaz17CisJc3NpZD0wMDAxMDIwMworCXBzaz0wMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmCit9CisKKworIyBJRUVFIDgwMi4xWC9FQVBPTCB3aXRoIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBXRVAga2V5cyAoaS5lLiwgbm8gV1BBKSB1c2luZworIyBFQVAtVExTIGZvciBhdXRoZW50aWNhdGlvbiBhbmQga2V5IGdlbmVyYXRpb247IHJlcXVpcmUgYm90aCB1bmljYXN0IGFuZAorIyBicm9hZGNhc3QgV0VQIGtleXMuCituZXR3b3JrPXsKKwlzc2lkPSIxeC10ZXN0IgorCWtleV9tZ210PUlFRUU4MDIxWAorCWVhcD1UTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCWNsaWVudF9jZXJ0PSIvZXRjL2NlcnQvdXNlci5wZW0iCisJcHJpdmF0ZV9rZXk9Ii9ldGMvY2VydC91c2VyLnBydiIKKwlwcml2YXRlX2tleV9wYXNzd2Q9InBhc3N3b3JkIgorCWVhcG9sX2ZsYWdzPTMKK30KKworCisjIExFQVAgd2l0aCBkeW5hbWljIFdFUCBrZXlzCituZXR3b3JrPXsKKwlzc2lkPSJsZWFwLWV4YW1wbGUiCisJa2V5X21nbXQ9SUVFRTgwMjFYCisJZWFwPUxFQVAKKwlpZGVudGl0eT0idXNlciIKKwlwYXNzd29yZD0iZm9vYmFyIgorfQorCisjIFBsYWludGV4dCBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKQorbmV0d29yaz17CisJc3NpZD0icGxhaW50ZXh0LXRlc3QiCisJa2V5X21nbXQ9Tk9ORQorfQorCisKKyMgU2hhcmVkIFdFUCBrZXkgY29ubmVjdGlvbiAobm8gV1BBLCBubyBJRUVFIDgwMi4xWCkKK25ldHdvcms9eworCXNzaWQ9InN0YXRpYy13ZXAtdGVzdCIKKwlrZXlfbWdtdD1OT05FCisJd2VwX2tleTA9ImFiY2RlIgorCXdlcF9rZXkxPTAxMDIwMzA0MDUKKwl3ZXBfa2V5Mj0iMTIzNDU2Nzg5MDEyMyIKKwl3ZXBfdHhfa2V5aWR4PTAKKwlwcmlvcml0eT01Cit9CisKKworIyBTaGFyZWQgV0VQIGtleSBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKSB1c2luZyBTaGFyZWQgS2V5CisjIElFRUUgODAyLjExIGF1dGhlbnRpY2F0aW9uCituZXR3b3JrPXsKKwlzc2lkPSJzdGF0aWMtd2VwLXRlc3QyIgorCWtleV9tZ210PU5PTkUKKwl3ZXBfa2V5MD0iYWJjZGUiCisJd2VwX2tleTE9MDEwMjAzMDQwNQorCXdlcF9rZXkyPSIxMjM0NTY3ODkwMTIzIgorCXdlcF90eF9rZXlpZHg9MAorCXByaW9yaXR5PTUKKwlhdXRoX2FsZz1TSEFSRUQKK30KKworCisjIElCU1MvYWQtaG9jIG5ldHdvcmsgd2l0aCBXUEEtTm9uZS9US0lQLgorbmV0d29yaz17CisJc3NpZD0idGVzdCBhZGhvYyIKKwltb2RlPTEKKwlwcm90bz1XUEEKKwlrZXlfbWdtdD1XUEEtTk9ORQorCXBhaXJ3aXNlPU5PTkUKKwlncm91cD1US0lQCisJcHNrPSJzZWNyZXQgcGFzc3BocmFzZSIKK30KKworCisjIENhdGNoIGFsbCBleGFtcGxlIHRoYXQgYWxsb3dzIG1vcmUgb3IgbGVzcyBhbGwgY29uZmlndXJhdGlvbiBtb2RlcworbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlzY2FuX3NzaWQ9MQorCWtleV9tZ210PVdQQS1FQVAgV1BBLVBTSyBJRUVFODAyMVggTk9ORQorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUCBXRVAxMDQgV0VQNDAKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJZWFwPVRUTFMgUEVBUCBUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcGhhc2UxPSJwZWFwbGFiZWw9MCIKK30KKworIyBFeGFtcGxlIG9mIEVBUC1UTFMgd2l0aCBzbWFydGNhcmQgKG9wZW5zc2wgZW5naW5lKQorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRMUworCXByb3RvPVJTTgorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUAorCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKworCWVuZ2luZT0xCisKKwkjIFRoZSBlbmdpbmUgY29uZmlndXJlZCBoZXJlIG11c3QgYmUgYXZhaWxhYmxlLiBMb29rIGF0CisJIyBPcGVuU1NMIGVuZ2luZSBzdXBwb3J0IGluIHRoZSBnbG9iYWwgc2VjdGlvbi4KKwkjIFRoZSBrZXkgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGVuZ2luZSBtdXN0IGJlIHRoZSBwcml2YXRlIGtleQorCSMgbWF0Y2hpbmcgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBjb25maWd1cmVkIGFib3ZlLgorCisJIyB1c2UgdGhlIG9wZW5zYyBlbmdpbmUKKwkjZW5naW5lX2lkPSJvcGVuc2MiCisJI2tleV9pZD0iNDUiCisKKwkjIHVzZSB0aGUgcGtjczExIGVuZ2luZQorCWVuZ2luZV9pZD0icGtjczExIgorCWtleV9pZD0iaWRfNDUiCisKKwkjIE9wdGlvbmFsIFBJTiBjb25maWd1cmF0aW9uOyB0aGlzIGNhbiBiZSBsZWZ0IG91dCBhbmQgUElOIHdpbGwgYmUKKwkjIGFza2VkIHRocm91Z2ggdGhlIGNvbnRyb2wgaW50ZXJmYWNlCisJcGluPSIxMjM0IgorfQorCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBzaG93aW5nIGhvdyB0byB1c2UgYW4gaW5saW5lZCBibG9iIGFzIGEgQ0EgY2VydGlmaWNhdGUKKyMgZGF0YSBpbnN0ZWFkIG9mIHVzaW5nIGV4dGVybmFsIGZpbGUKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSJibG9iOi8vZXhhbXBsZWJsb2IiCisJcHJpb3JpdHk9MjAKK30KKworYmxvYi1iYXNlNjQtZXhhbXBsZWJsb2I9eworU0dWc2JHOGdWMjl5YkdRaENnPT0KK30KKworCisjIFdpbGRjYXJkIG1hdGNoIGZvciBTU0lEIChwbGFpbnRleHQgQVBzIG9ubHkpLiBUaGlzIGV4YW1wbGUgc2VsZWN0IGFueQorIyBvcGVuIEFQIHJlZ2FyZGxlc3Mgb2YgaXRzIFNTSUQuCituZXR3b3JrPXsKKwlrZXlfbWdtdD1OT05FCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFmZmUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZQpAQCAtMCwwICsxLDcgQEAKK2N0cmxfaW50ZXJmYWNlPS92YXIvcnVuL3dwYV9zdXBwbGljYW50CitjdHJsX2ludGVyZmFjZV9ncm91cD0wCit1cGRhdGVfY29uZmlnPTEKKworbmV0d29yaz17CisgICAgICAgIGtleV9tZ210PU5PTkUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjRjZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiCkBAIC0wLDAgKzEsMTE2IEBACitTVU1NQVJZID0gIkNsaWVudCBmb3IgV2ktRmkgUHJvdGVjdGVkIEFjY2VzcyAoV1BBKSIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS93cGFfc3VwcGxpY2FudC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9idWd6LyIKK1NFQ1RJT04gPSAibmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzZiMjc4MDE0NDdlMDY2MmVlMDEzOGQxN2ZlOTM4ODAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0xO2VuZGxpbmU9NTY7bWQ1PTdmMzkzNTc5ZjhiMTA5ZmU5MWYzYjk3NjVkMjZjN2QzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9MzQzMGZkYTc5ZjJiYTFkZDU0NWYwYjNjNGQ2ZTRkMjQgIgorREVQRU5EUyA9ICJkYnVzIGxpYm5sIGxpYmdjcnlwdCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIndwYS1zdXBwbGljYW50LXBhc3NwaHJhc2Ugd3BhLXN1cHBsaWNhbnQtY2xpIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ251dGxzIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIiwsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICIsLG9wZW5zc2wiCisKK2luaGVyaXQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAid3BhX3N1cHBsaWNhbnQuc2VydmljZSB3cGFfc3VwcGxpY2FudC1ubDgwMjExQC5zZXJ2aWNlIHdwYV9zdXBwbGljYW50LXdpcmVkQC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitTUkNfVVJJID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9yZWxlYXNlcy93cGFfc3VwcGxpY2FudC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGVmY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL3dwYS1zdXBwbGljYW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3dwYV9zdXBwbGljYW50IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQVAtV01NLUZpeC1pbnRlZ2VyLXVuZGVyZmxvdy1pbi1XTU0tQWN0aW9uLWZyYW1lLXBhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1FQVAtcHdkLXBlZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbW1pLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRUFQLXB3ZC1zZXJ2ZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1FQVAtcHdkLXNlcnZlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtRUFQLXB3ZC1wZWVyLUZpeC1hc3ltbWV0cmljLWZyYWdtZW50YXRpb24tYmVoYXZpb3IucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMDAzN2RiZTAzODk3ZGNhZjJhZDI3MjJlNjU5MDk1ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNThkYzgzMmMwOTYxMzlhMDU5ZTZkZjgxNDA4MGY1MDI1MWE4ZDMxM2MyMWIxMzM2NGM1NGExZTcwMTA5MTIyIgorCitTID0gIiR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQtJHtQVn0iCisKK1BBQ0tBR0VTX3ByZXBlbmQgPSAid3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSB3cGEtc3VwcGxpY2FudC1jbGkgIgorRklMRVNfd3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSA9ICIke2JpbmRpcn0vd3BhX3Bhc3NwaHJhc2UiCitGSUxFU193cGEtc3VwcGxpY2FudC1jbGkgPSAiJHtzYmluZGlyfS93cGFfY2xpIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3dwYV9zdXBwbGljYW50LmNvbmYiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJJHtNQUtFfSAtQyB3cGFfc3VwcGxpY2FudCBjbGVhbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmNvbmZpZyB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiQ0ZMQUdTICs9XCItSSR7U1RBR0lOR19JTkNESVJ9L2xpYm5sM1wiIiA+PiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiRFJWX0NGTEFHUyArPVwiLUkke1NUQUdJTkdfSU5DRElSfS9saWJubDNcIiIgPj4gd3BhX3N1cHBsaWNhbnQvLmNvbmZpZworCQorCWlmIGVjaG8gIiR7UEFDS0FHRUNPTkZJR30iIHwgZ3JlcCAtcXcgIm9wZW5zc2wiOyB0aGVuCisgICAgICAgIAlzc2w9b3BlbnNzbAorCWVsaWYgZWNobyAiJHtQQUNLQUdFQ09ORklHfSIgfCBncmVwIC1xdyAiZ251dGxzIjsgdGhlbgorICAgICAgICAJc3NsPWdudXRscworCWZpCisJaWYgWyAtbiAiJHNzbCIgXTsgdGhlbgorICAgICAgICAJc2VkIC1pICJzLyVzc2wlLyRzc2wvIiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZmkKKworCSMgRm9yIHJlYnVpbGQKKwlybSAtZiB3cGFfc3VwcGxpY2FudC8qLmQgd3BhX3N1cHBsaWNhbnQvZGJ1cy8qLmQKK30KKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgQklORElSID0gIiR7c2JpbmRpcn0iCisKK2RvX2NvbXBpbGUgKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUworCXNlZCAtZSAiczpDRkxBR1NcID0uKjomIFwkKEVYVFJBX0NGTEFHUyk6ZyIgLWkgJHtTfS9zcmMvbGliLnJ1bGVzCisJb2VfcnVubWFrZSAtQyB3cGFfc3VwcGxpY2FudAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSB3cGFfc3VwcGxpY2FudC93cGFfY2xpICAgICAgICAke0R9JHtzYmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3Bhc3NwaHJhc2UgJHtEfSR7YmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisJaW5zdGFsbCAtbSA2NDQgd3BhX3N1cHBsaWNhbnQvUkVBRE1FICR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQuY29uZiAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSA2MDAgJHtXT1JLRElSfS93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUgJHtEfSR7c3lzY29uZmRpcn0vd3BhX3N1cHBsaWNhbnQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wb3N0LWRvd24uZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vd3BhLXN1cHBsaWNhbnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZC93cGEtc3VwcGxpY2FudAorCWNkICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvICYmIFwKKwlsbiAtc2YgLi4vaWYtcHJlLXVwLmQvd3BhLXN1cHBsaWNhbnQgaWYtcG9zdC1kb3duLmQvd3BhLXN1cHBsaWNhbnQKKworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvZGJ1cy9kYnVzLXdwYV9zdXBwbGljYW50LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMKKwlpbnN0YWxsIC1tIDY0NCAke1N9L3dwYV9zdXBwbGljYW50L2RidXMvKi5zZXJ2aWNlICR7RH0vJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvc3lzdGVtZC8qLnNlcnZpY2UgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJZmkKKworCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV93cGFfc3VwcGxpY2FudCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworfQorCitwa2dfcG9zdGluc3Rfd3BhLXN1cHBsaWNhbnQgKCkgeworCSMgSWYgd2UncmUgb2ZmbGluZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzLgorCWlmIFsgIngkRCIgPSAieCIgXTsgdGhlbgorCQlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorCWZpCisKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvZmlsZXN5c3RlbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2YzQxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zCkBAIC0wLDAgKzEsOCBAQAorZXh0NAorZXh0MworZXh0MgordmZhdAorZmF0CitidHJmcworbWluaXgKKyoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvZnN0YWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5YTAxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiCkBAIC0wLDAgKzEsMTEgQEAKKyMgc3RvY2sgZnN0YWIgLSB5b3UgcHJvYmFibHkgd2FudCB0byBvdmVycmlkZSB0aGlzIHdpdGggYSBtYWNoaW5lIHNwZWNpZmljIG9uZQorCisvZGV2L3Jvb3QgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAxICAxCitwcm9jICAgICAgICAgICAgICAgICAvcHJvYyAgICAgICAgICAgICAgICBwcm9jICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwICAwCitkZXZwdHMgICAgICAgICAgICAgICAvZGV2L3B0cyAgICAgICAgICAgICBkZXZwdHMgICAgIG1vZGU9MDYyMCxnaWQ9NSAgICAgICAwICAwCit0bXBmcyAgICAgICAgICAgICAgICAvcnVuICAgICAgICAgICAgICAgICB0bXBmcyAgICAgIG1vZGU9MDc1NSxub2Rldixub3N1aWQsc3RyaWN0YXRpbWUgMCAgMAordG1wZnMgICAgICAgICAgICAgICAgL3Zhci92b2xhdGlsZSAgICAgICAgdG1wZnMgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMAorCisjIHVuY29tbWVudCB0aGlzIGlmIHlvdXIgZGV2aWNlIGhhcyBhIFNEL01NQy9UcmFuc2ZsYXNoIHNsb3QKKyMvZGV2L21tY2JsazBwMSAgICAgICAvbWVkaWEvY2FyZCAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzLHN5bmMsbm9hdXRvICAwICAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2hvc3QuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2hvc3QuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThjMWUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaG9zdC5jb25mCkBAIC0wLDAgKzEsMiBAQAorb3JkZXIgaG9zdHMsYmluZAorbXVsdGkgb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lucHV0cmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzRjOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjCkBAIC0wLDAgKzEsNjEgQEAKKyMgL2V0Yy9pbnB1dHJjIC0gZ2xvYmFsIGlucHV0cmMgZm9yIGxpYnJlYWRsaW5lCisjIFNlZSByZWFkbGluZSgzcmVhZGxpbmUpIGFuZCBgaW5mbyBybHVzZXJtYW4nIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisjIEJlIDggYml0IGNsZWFuLgorc2V0IGlucHV0LW1ldGEgb24KK3NldCBvdXRwdXQtbWV0YSBvbgorCisjIFRvIGFsbG93IHRoZSB1c2Ugb2YgOGJpdC1jaGFyYWN0ZXJzIGxpa2UgdGhlIGdlcm1hbiB1bWxhdXRzLCBjb21tZW50IG91dAorIyB0aGUgbGluZSBiZWxvdy4gSG93ZXZlciB0aGlzIG1ha2VzIHRoZSBtZXRhIGtleSBub3Qgd29yayBhcyBhIG1ldGEga2V5LAorIyB3aGljaCBpcyBhbm5veWluZyB0byB0aG9zZSB3aGljaCBkb24ndCBuZWVkIHRvIHR5cGUgaW4gOC1iaXQgY2hhcmFjdGVycy4KKworIyBzZXQgY29udmVydC1tZXRhIG9mZgorCisjIHRyeSB0byBlbmFibGUgdGhlIGFwcGxpY2F0aW9uIGtleXBhZCB3aGVuIGl0IGlzIGNhbGxlZC4gIFNvbWUgc3lzdGVtcworIyBuZWVkIHRoaXMgdG8gZW5hYmxlIHRoZSBhcnJvdyBrZXlzLgorIyBzZXQgZW5hYmxlLWtleXBhZCBvbgorCisjIHNlZSAvdXNyL3NoYXJlL2RvYy9iYXNoL2lucHV0cmMuYXJyb3dzIGZvciBvdGhlciBjb2RlcyBvZiBhcnJvdyBrZXlzCisKKyMgZG8gbm90IGJlbGwgb24gdGFiLWNvbXBsZXRpb24gCisjIHNldCBiZWxsLXN0eWxlIG5vbmUgCisKKyMgc29tZSBkZWZhdWx0cyAvIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBlbWFjcyBtb2RlCiskaWYgbW9kZT1lbWFjcworCisjIGFsbG93IHRoZSB1c2Ugb2YgdGhlIEhvbWUvRW5kIGtleXMKKyMgIlxlWzF+IjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlWzR+IjogZW5kLW9mLWxpbmUKKworIyBhbGxvdyB0aGUgdXNlIG9mIHRoZSBEZWxldGUvSW5zZXJ0IGtleXMKKyMgIlxlWzN+IjogZGVsZXRlLWNoYXIKKyMgIlxlWzJ+IjogcXVvdGVkLWluc2VydAorCisjIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHN0ZXAgdG8gdGhlIGJlZ2lubmluZy9lbmQgCisjIG9mIHRoZSBoaXN0b3J5CisjICJcZVs1fiI6IGJlZ2lubmluZy1vZi1oaXN0b3J5CisjICJcZVs2fiI6IGVuZC1vZi1oaXN0b3J5CisKKyMgYWx0ZXJuYXRlIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHNlYXJjaCB0aGUgaGlzdG9yeQorIyAiXGVbNX4iOiBoaXN0b3J5LXNlYXJjaC1iYWNrd2FyZAorIyAiXGVbNn4iOiBoaXN0b3J5LXNlYXJjaC1mb3J3YXJkCisKKyMgIyBtYXBwaW5ncyBmb3IgQ3RybC1sZWZ0LWFycm93IGFuZCBDdHJsLXJpZ2h0LWFycm93IGZvciB3b3JkIG1vdmluZworIyAiXGVbNUMiOiBmb3J3YXJkLXdvcmQKKyMgIlxlWzVEIjogYmFja3dhcmQtd29yZAorIyAiXGVcZVtDIjogZm9yd2FyZC13b3JkCisjICJcZVxlW0QiOiBiYWNrd2FyZC13b3JkCisKKyMgJGlmIHRlcm09cnh2dAorIyAiXGVbOH4iOiBlbmQtb2YtbGluZQorIyAkZW5kaWYKKworIyBmb3Igbm9uIFJIL0RlYmlhbiB4dGVybSwgY2FuJ3QgaHVydCBmb3IgUkgvREViaWFuIHh0ZXJtCisjICJcZU9IIjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlT0YiOiBlbmQtb2YtbGluZQorCisjIGZvciBmcmVlYnNkIGNvbnNvbGUKKyMgIlxlW0giOiBiZWdpbm5pbmctb2YtbGluZQorIyAiXGVbRiI6IGVuZC1vZi1saW5lCisKKyRlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlLm5ldCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlLm5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUubmV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2xpY2Vuc2VzL0dQTC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MGMzMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMgpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9tb3RkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbnNzd2l0Y2guY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmMDNkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYKQEAgLTAsMCArMSwxOSBAQAorIyAvZXRjL25zc3dpdGNoLmNvbmYKKyMKKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIG9mIEdOVSBOYW1lIFNlcnZpY2UgU3dpdGNoIGZ1bmN0aW9uYWxpdHkuCisjIElmIHlvdSBoYXZlIHRoZSBgZ2xpYmMtZG9jJyBhbmQgYGluZm8nIHBhY2thZ2VzIGluc3RhbGxlZCwgdHJ5OgorIyBgaW5mbyBsaWJjICJOYW1lIFNlcnZpY2UgU3dpdGNoIicgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmlsZS4KKworcGFzc3dkOiAgICAgICAgIGNvbXBhdAorZ3JvdXA6ICAgICAgICAgIGNvbXBhdAorc2hhZG93OiAgICAgICAgIGNvbXBhdAorCitob3N0czogICAgICAgICAgZmlsZXMgZG5zCituZXR3b3JrczogICAgICAgZmlsZXMKKworcHJvdG9jb2xzOiAgICAgIGRiIGZpbGVzCitzZXJ2aWNlczogICAgICAgZGIgZmlsZXMKK2V0aGVyczogICAgICAgICBkYiBmaWxlcworcnBjOiAgICAgICAgICAgIGRiIGZpbGVzCisKK25ldGdyb3VwOiAgICAgICBuaXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzI2ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCkBAIC0wLDAgKzEsMzYgQEAKKyMgL2V0Yy9wcm9maWxlOiBzeXN0ZW0td2lkZSAucHJvZmlsZSBmaWxlIGZvciB0aGUgQm91cm5lIHNoZWxsIChzaCgxKSkKKyMgYW5kIEJvdXJuZSBjb21wYXRpYmxlIHNoZWxscyAoYmFzaCgxKSwga3NoKDEpLCBhc2goMSksIC4uLikuCisKK1BBVEg9Ii91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iCitFRElUT1I9InZpIgkJCSMgbmVlZGVkIGZvciBwYWNrYWdlcyBsaWtlIGNyb24sIGdpdC1jb21taXQKK3Rlc3QgLXogIiRURVJNIiAmJiBURVJNPSJ2dDEwMCIJIyBCYXNpYyB0ZXJtaW5hbCBjYXBhYi4gRm9yIHNjcmVlbiBldGMuCisKK2lmIFsgISAtZSAvZXRjL2xvY2FsdGltZSAtYSAhIC1lIC9ldGMvVFogXTsgdGhlbgorCVRaPSJVVEMiCQkjIFRpbWUgWm9uZS4gTG9vayBhdCBodHRwOi8vdGhlb3J5LnV3aW5uaXBlZy5jYS9nbnUvZ2xpYmMvbGliY18zMDMuaHRtbCAKKwkJCQkjIGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cgdG8gc2V0IHRoaXMgdG8geW91ciBsb2NhbCB0aW1lem9uZS4KKwlleHBvcnQgVFoKK2ZpCisKK2lmIFsgIiRIT01FIiA9ICJST09USE9NRSIgXTsgdGhlbgorICAgUEFUSD0kUEFUSDovdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluCitmaQoraWYgWyAiJFBTMSIgXTsgdGhlbgorIyB3b3JrcyBmb3IgYmFzaCBhbmQgYXNoIChubyBvdGhlciBzaGVsbHMga25vd24gdG8gYmUgaW4gdXNlIGhlcmUpCisgICBQUzE9J1x1QFxoOlx3XCQgJworZmkKKworaWYgWyAtZCAvZXRjL3Byb2ZpbGUuZCBdOyB0aGVuCisgIGZvciBpIGluIC9ldGMvcHJvZmlsZS5kLyogOyBkbworICAgIC4gJGkKKyAgZG9uZQorICB1bnNldCBpCitmaQorCitpZiBbIC14IC91c3IvYmluL3Jlc2l6ZSBdO3RoZW4KKyAgL3Vzci9iaW4vcmVzaXplID4vZGV2L251bGwKK2ZpCisKK2V4cG9ydCBQQVRIIFBTMSBPUElFRElSIFFQRURJUiBRVERJUiBFRElUT1IgVEVSTQorCit1bWFzayAwMjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9yb3RhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjI3MDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24KQEAgLTAsMCArMSBAQAorMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5iYXNocmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTYzNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjCkBAIC0wLDAgKzEsMTYgQEAKKyMgfi8uYmFzaHJjOiBleGVjdXRlZCBieSBiYXNoKDEpIGZvciBub24tbG9naW4gc2hlbGxzLgorCitleHBvcnQgUFMxPSdcaDpcd1wkICcKK3VtYXNrIDAyMgorCisjIFlvdSBtYXkgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgYGxzJyB0byBiZSBjb2xvcml6ZWQ6CisjIGV4cG9ydCBMU19PUFRJT05TPSctLWNvbG9yPWF1dG8nCisjIGV2YWwgYGRpcmNvbG9yc2AKKyMgYWxpYXMgbHM9J2xzICRMU19PUFRJT05TJworIyBhbGlhcyBsbD0nbHMgJExTX09QVElPTlMgLWwnCisjIGFsaWFzIGw9J2xzICRMU19PUFRJT05TIC1sQScKKyMKKyMgU29tZSBtb3JlIGFsaWFzIHRvIGF2b2lkIG1ha2luZyBtaXN0YWtlczoKKyMgYWxpYXMgcm09J3JtIC1pJworIyBhbGlhcyBjcD0nY3AgLWknCisjIGFsaWFzIG12PSdtdiAtaScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hhcmUvZG90LnByb2ZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5NzkzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMgfi8ucHJvZmlsZTogZXhlY3V0ZWQgYnkgQm91cm5lLWNvbXBhdGlibGUgbG9naW4gc2hlbGxzLgorCitpZiBbIC1mIH4vLmJhc2hyYyBdOyB0aGVuCisgIC4gfi8uYmFzaHJjCitmaQorCisjIHBhdGggc2V0IGJ5IC9ldGMvcHJvZmlsZQorIyBleHBvcnQgUEFUSAorCittZXNnIG4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoZWxscyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoZWxscwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYzOTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hlbGxzCkBAIC0wLDAgKzEsMiBAQAorIyAvZXRjL3NoZWxsczogdmFsaWQgbG9naW4gc2hlbGxzCisvYmluL3NoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy91c2JkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXNfMy4wLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXNfMy4wLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZlNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKQEAgLTAsMCArMSwxNzggQEAKK1NVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyBmaWxlcyBmb3IgdGhlIGJhc2Ugc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIGJhc2UtZmlsZXMgcGFja2FnZSBjcmVhdGVzIHRoZSBiYXNpYyBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2Yga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBzeXN0ZW0uIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjg5IgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpY2Vuc2VzL0dQTC0yO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKyMgUmVtb3ZlZCBhbGwgbGljZW5zZSByZWxhdGVkIHRhc2tzIGluIHRoaXMgcmVjaXBlIGFzIGxpY2Vuc2UuYmJjbGFzcyAKKyMgbm93IGRlYWxzIHdpdGggdGhpcy4gSW4gb3JkZXIgdG8gZ2V0IGFjY3VyYXRlIGxpY2Vuc2luZyBvbiB0byB0aGUgaW1hZ2U6CisjIFNldCBDT1BZX0xJQ19NQU5JRkVTVCB0byBqdXN0IGNvcHkganVzdCB0aGUgbGljZW5zZS5tYW5pZmVzdCB0byB0aGUgaW1hZ2UKKyMgRm9yIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGxpY2Vuc2UgdGV4dCBmb3IgZWFjaCBwYWNrYWdlOgorIyBTZXQgQ09QWV9MSUNfTUFOSUZFU1QgYW5kIENPUFlfTElDX0RJUlMKKworU1JDX1VSSSA9ICJmaWxlOi8vcm90YXRpb24gXAorICAgICAgICAgICBmaWxlOi8vbnNzd2l0Y2guY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tb3RkIFwKKyAgICAgICAgICAgZmlsZTovL2lucHV0cmMgXAorICAgICAgICAgICBmaWxlOi8vaG9zdC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2hlbGxzIFwKKyAgICAgICAgICAgZmlsZTovL2ZzdGFiIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVzeXN0ZW1zIFwKKyAgICAgICAgICAgZmlsZTovL2lzc3VlLm5ldCBcCisgICAgICAgICAgIGZpbGU6Ly9pc3N1ZSBcCisgICAgICAgICAgIGZpbGU6Ly91c2JkIFwKKyAgICAgICAgICAgZmlsZTovL3NoYXJlL2RvdC5iYXNocmMgXAorICAgICAgICAgICBmaWxlOi8vc2hhcmUvZG90LnByb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vbGljZW5zZXMvR1BMLTIgXAorICAgICAgICAgICAiCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvY2Rpcl9hcHBlbmQgPSAiLyR7UH0iCitkaXJzMTc3NyA9ICIvdG1wICR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvdG1wIgorZGlyczI3NzUgPSAiIgorZGlyczc1NSA9ICIvYmluIC9ib290IC9kZXYgJHtzeXNjb25mZGlyfSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQgXAorICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3NrZWwgL2xpYiAvbW50IC9wcm9jICR7Uk9PVF9IT01FfSAvcnVuIC9zYmluIFwKKyAgICAgICAgICAgJHtwcmVmaXh9ICR7YmluZGlyfSAke2RvY2Rpcn0gL3Vzci9nYW1lcyAke2luY2x1ZGVkaXJ9IFwKKyAgICAgICAgICAgJHtsaWJkaXJ9ICR7c2JpbmRpcn0gJHtkYXRhZGlyfSBcCisgICAgICAgICAgICR7ZGF0YWRpcn0vY29tbW9uLWxpY2Vuc2VzICR7ZGF0YWRpcn0vZGljdCAke2luZm9kaXJ9IFwKKyAgICAgICAgICAgJHttYW5kaXJ9ICR7ZGF0YWRpcn0vbWlzYyAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9iYWNrdXBzICR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKKyAgICAgICAgICAgL3N5cyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9taXNjICR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wgXAorICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlIFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZS9sb2cgXAorICAgICAgICAgICAvaG9tZSAke3ByZWZpeH0vc3JjICR7bG9jYWxzdGF0ZWRpcn0vbG9jYWwgXAorICAgICAgICAgICAvbWVkaWEiCisKK2RpcnM3NTUtbHNiID0gIi9zcnYgIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbCAke3ByZWZpeH0vbG9jYWwvYmluICR7cHJlZml4fS9sb2NhbC9nYW1lcyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vbG9jYWwvaW5jbHVkZSAke3ByZWZpeH0vbG9jYWwvbGliICR7cHJlZml4fS9sb2NhbC9zYmluIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbC9zaGFyZSAke3ByZWZpeH0vbG9jYWwvc3JjIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9saWIvbG9jYWxlIgorZGlyczI3NzUtbHNiID0gIi92YXIvbWFpbCIKKwordm9sYXRpbGVzID0gImxvZyB0bXAiCitjb25mZmlsZXMgPSAiJHtzeXNjb25mZGlyfS9kZWJpYW5fdmVyc2lvbiAke3N5c2NvbmZkaXJ9L2hvc3QuY29uZiBcCisgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbnB1dHJjICR7c3lzY29uZmRpcn0vaXNzdWUgLyR7c3lzY29uZmRpcn0vaXNzdWUubmV0IFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisKKyMgQnkgZGVmYXVsdCB0aGUgaG9zdG5hbWUgaXMgdGhlIG1hY2hpbmUgbmFtZS4gSWYgdGhlIGhvc3RuYW1lIGlzIHVuc2V0IHRoZW4gYQorIyAvZXRjL2hvc3RuYW1lIGZpbGUgaXNuJ3Qgd3JpdHRlbiwgc3VpdGFibGUgZm9yIGVudmlyb25tZW50cyB3aXRoIGR5bmFtaWMKKyMgaG9zdG5hbWVzLgorIworIyBUaGUgaG9zdG5hbWUgY2FuIGJlIGNoYW5nZWQgb3V0c2lkZSBvZiB0aGlzIHJlY2lwZSBieSB1c2luZworIyBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIm15LWhvc3QtbmFtZSIuCitob3N0bmFtZSA9ICIke01BQ0hJTkV9IgorCitCQVNFRklMRVNJU1NVRUlOU1RBTEwgPz0gImRvX2luc3RhbGxfYmFzZWZpbGVzaXNzdWUiCisKKyMgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgYmFzZS1maWxlcywgL3J1biB3YXMgYSBzb2Z0bGluayB0byAvdmFyL3J1biBhbmQgdGhlCisjIGRpcmVjdG9yeSB3YXMgbG9jYXRlZCBpbiAvdmFyL3ZvbGF0bGllL3J1bi4gIEFsc28sIC92YXIvbG9jayB3YXMgYSBzb2Z0bGluaworIyB0byAvdmFyL3ZvbGF0aWxlL2xvY2sgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgZGlyZWN0b3J5IHdhcyBsb2NhdGVkLiAgTm93LAorIyAvcnVuIGFuZCAvcnVuL2xvY2sgYXJlIHRoZSByZWFsIGRpcmVjdG9yaWVzLiAgSWYgd2UgYXJlIHVwZ3JhZGluZywgd2UgbWF5CisjIG5lZWQgdG8gcmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rcyBmaXJzdCBiZWZvcmUgd2UgY3JlYXRlIHRoZSBkaXJlY3Rvcmllcy4KKyMgT3RoZXJ3aXNlIHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gd2lsbCBmYWlsIGFuZCB3ZSB3aWxsIGhhdmUgY2lyY3VsYXIgc3ltYm9saWMKKyMgbGlua3MuCisjIAorcGtnX3ByZWluc3RfJHtQTn0gKCkgeworICAgICMhL2Jpbi9zaCAtZQorICAgIGlmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICAgICBpZiBbIC1oICIvdmFyL2xvY2siIF07IHRoZW4KKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICBybSAtZiAvdmFyL2xvY2sKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbIC1oICIvcnVuIiBdOyB0aGVuCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgcm0gLWYgL3J1bgorICAgICAgICBmaQorICAgIGZpICAgICAKK30KKworZG9faW5zdGFsbCAoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1fTsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMxNzc3fTsgZG8KKwkJaW5zdGFsbCAtbSAxNzc3IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMyNzc1fTsgZG8KKwkJaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke3ZvbGF0aWxlc307IGRvCisJCWxuIC1zZiB2b2xhdGlsZS8kZCAke0R9JHtsb2NhbHN0YXRlZGlyfS8kZAorCWRvbmUKKworCWxuIC1zbmYgLi4vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCWxuIC1zbmYgLi4vcnVuL2xvY2sgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9jaworCisJJHtCQVNFRklMRVNJU1NVRUlOU1RBTEx9CisKKwlyb3RhdGlvbj1gY2F0ICR7V09SS0RJUn0vcm90YXRpb25gCisJaWYgWyAiJHJvdGF0aW9uIiAhPSAiMCIgXTsgdGhlbgorIAkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcm90YXRpb24gJHtEfSR7c3lzY29uZmRpcn0vcm90YXRpb24KKwlmaQorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZnN0YWIgJHtEfSR7c3lzY29uZmRpcn0vZnN0YWIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9maWxlc3lzdGVtcyAke0R9JHtzeXNjb25mZGlyfS9maWxlc3lzdGVtcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3VzYmQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2JkCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJvZmlsZSAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlCisJc2VkIC1pICdzI1JPT1RIT01FIyR7Uk9PVF9IT01FfSMnICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaGVsbHMgJHtEfSR7c3lzY29uZmRpcn0vc2hlbGxzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc2hhcmUvZG90LnByb2ZpbGUgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8ucHJvZmlsZQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NoYXJlL2RvdC5iYXNocmMgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8uYmFzaHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5wdXRyYyAke0R9JHtzeXNjb25mZGlyfS9pbnB1dHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbnNzd2l0Y2guY29uZiAke0R9JHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3QuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L21vdGQgJHtEfSR7c3lzY29uZmRpcn0vbW90ZAorCisJaWYgWyAiL3Vzci9iaW4iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKwkJc2VkIC1pICJzLC91c3IvYmluL3Jlc2l6ZSwke2JpbmRpcn0vcmVzaXplLCIgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWZpCisKKwlsbiAtc2YgL3Byb2MvbW91bnRzICR7RH0ke3N5c2NvbmZkaXJ9L210YWIKK30KKworRElTVFJPX1ZFUlNJT05bdmFyZGVwc2V4Y2x1ZGVdICs9ICJEQVRFIgorZG9faW5zdGFsbF9iYXNlZmlsZXNpc3N1ZSAoKSB7CisJaWYgWyAiJHtob3N0bmFtZX0iIF07IHRoZW4KKwkJZWNobyAke2hvc3RuYW1lfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RuYW1lCisJZmkKKworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vaXNzdWUqICAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBpZiBbIC1uICIke0RJU1RST19OQU1FfSIgXTsgdGhlbgorCQlwcmludGYgIiR7RElTVFJPX05BTUV9ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJcHJpbnRmICIke0RJU1RST19OQU1FfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQlpZiBbIC1uICIke0RJU1RST19WRVJTSU9OfSIgXTsgdGhlbgorCQkJcHJpbnRmICIke0RJU1RST19WRVJTSU9OfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCQlwcmludGYgIiR7RElTVFJPX1ZFUlNJT059ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUubmV0CisJCWZpCisJCXByaW50ZiAiXFxcbiBcXFxsXG4iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCWVjaG8gPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJZWNobyAiJWgiICAgID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQllY2hvID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorIAlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saW51eHN0ZGJhc2UoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorICAgICAgICBkb25lCisKKwlmb3IgZCBpbiAke2RpcnMyNzc1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorICAgICAgICBkb25lCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWRvYyAke1BOfSAke1BOfS1kZXYgJHtQTn0tZGJnIgorRklMRVNfJHtQTn0gPSAiLyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHtkYXRhZGlyfS9jb21tb24tbGljZW5zZXMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2ZzdGFiICR7QFsnJywgJyR7c3lzY29uZmRpcn0vaG9zdG5hbWUnXVsoZC5nZXRWYXIoJ2hvc3RuYW1lJywgVHJ1ZSkgIT0gJycpXX0gJHtzeXNjb25mZGlyfS9zaGVsbHMiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vbW90ZCAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvYWRkX3NodXRkb3duLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzU3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKK1dlIG5lZWQgdG8gaGF2ZSBhIHNodXRkb3duIGdyb3VwIHRvIGFsbG93IHRoZSBzaHV0ZG93biBpY29uCit0byB3b3JrIGNvcnJlY3RseS4gQW55IHVzZXJzIHRoYXQgd2FudCB0byB1c2Ugc2h1dGRvd24gbGlrZQordGhlIHh1c2VyIHNob3VsZCBiZSBhZGRlZCB0byB0aGlzIGdyb3VwLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0zNiw1ICszNiw2IEBAIHNhc2w6Kjo0NToKKyBwbHVnZGV2Oio6NDY6Cisgc3RhZmY6Kjo1MDoKKyBnYW1lczoqOjYwOgorK3NodXRkb3duOio6NzA6CisgdXNlcnM6KjoxMDA6Cisgbm9ncm91cDoqOjY1NTM0OgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2Rpc2FibGUtZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGMwOGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRGlzYWJsZSBkb2N1bWVudGF0aW9uIGZvciBub3cgYXMgaXQgdXNlcyB0b29scyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorYnkgT0UtQ29yZS4gSXQgdXNlcyBzZ21sdG9vbHMgYW5kIHBvNGEuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJhc2UtcGFzc3dkLTMuNS4yOC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yOC5vcmlnL01ha2VmaWxlLmluCisrKysgYmFzZS1wYXNzd2QtMy41LjI4L01ha2VmaWxlLmluCitAQCAtMjUsMTMgKzI1LDEwIEBAIGdlbl9jb25maWd1cmUJPSBjb25maWcuY2FjaGUgY29uZmlnLnN0YXQKKyAJCSAgY29uZmRlZmhzLmggY29uZmlnLmggTWFrZWZpbGUKKyAKKyBhbGw6IHVwZGF0ZS1wYXNzd2QKKy0JJChNQUtFKSAtQyBkb2MgYWxsCistCSQoTUFLRSkgLUMgbWFuIGFsbAorIAorIGluc3RhbGw6IGFsbAorIAlta2RpciAtcCAkKERFU1RESVIpJChzYmluZGlyKQorIAkkKElOU1RBTEwpIHVwZGF0ZS1wYXNzd2QgJChERVNURElSKSQoc2JpbmRpcikvCistCSQoTUFLRSkgLUMgbWFuIGluc3RhbGwKKyAKKyB1cGRhdGUtcGFzc3dkLm86IHZlcnNpb24uaAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9pbnB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiYmNhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorQWRkIGFuIGlucHV0IGdyb3VwIGZvciB0aGUgL2Rldi9pbnB1dC8qIGRldmljZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGdyb3VwLm1hc3RlciB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0xMiw2ICsxMiw3IEBAIHV1Y3A6KjoxMDoKKyBtYW46KjoxMjoKKyBwcm94eToqOjEzOgorIGttZW06KjoxNToKKytpbnB1dDoqOjE5OgorIGRpYWxvdXQ6KjoyMDoKKyBmYXg6KjoyMToKKyB2b2ljZToqOjIyOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWE2OTIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAordXNlIC9iaW4vc2ggaW5zdGVhZCBvZiAvYmluL2Jhc2gsIHNpbmNlIHRoZSBsYXR0ZXIgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbgorc29tZSBpbWFnZXMgc3VjaCBhcyBtaW5pbWFsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL2Jhc2gKKytyb290Oio6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vc2hhZG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjdiZjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaApAQCAtMCwwICsxLDE0IEBACityZW1vdmUgIioiIGZvciByb290IHNpbmNlIHdlIGRvbid0IGhhdmUgYSAvZXRjL3NoYWRvdyBzbyBmYXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL3NoCisrcm9vdDo6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2RfMy41LjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWJkODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYgpAQCAtMCwwICsxLDEwNCBAQAorU1VNTUFSWSA9ICJCYXNlIHN5c3RlbSBtYXN0ZXIgcGFzc3dvcmQvZ3JvdXAgZmlsZXMiCitERVNDUklQVElPTiA9ICJUaGUgbWFzdGVyIGNvcGllcyBvZiB0aGUgdXNlciBkYXRhYmFzZSBmaWxlcyAoL2V0Yy9wYXNzd2QgYW5kIC9ldGMvZ3JvdXApLiAgVGhlIHVwZGF0ZS1wYXNzd2QgdG9vbCBpcyBhbHNvIHByb3ZpZGVkIHRvIGtlZXAgdGhlIHN5c3RlbSBkYXRhYmFzZXMgc3luY2hyb25pemVkIHdpdGggdGhlc2UgbWFzdGVyIGZpbGVzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMy41LjM4IHJlcXVpcmVzIGNkZWJjb25mIGZvciB1cGRhdGUtcGFzc3dkIHV0aWxpdHkiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2RlYmlhbi8rYXJjaGl2ZS9wcmltYXJ5LytmaWxlcy8ke0JQTn1fJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9zaHV0ZG93bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9zaGFkb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5wdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1kb2NzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YmVjY2FjNDgwODNmZThhZTUwNDhhY2QwNjJlNTQyMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGI2NjM4OGIyYzhlNDljMTU2OTI0MzlkMmJlZTYzYmNkZDRiYmJmN2E3ODJjN2Y2NGFjY2M1NTk4NmI2YTM2IgorCitpbmhlcml0IGF1dG90b29scworCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJiYXNlX3Bhc3N3ZF9zc3RhdGVfcG9zdGluc3QiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNzU1ICR7Qn0vdXBkYXRlLXBhc3N3ZCAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHttYW5kaXJ9L21hbjggJHtEfSR7bWFuZGlyfS9wbC9tYW44CisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9tYW4vdXBkYXRlLXBhc3N3ZC44ICR7RH0ke21hbmRpcn0vbWFuOC8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L21hbi91cGRhdGUtcGFzc3dkLnBsLjggXAorCQkke0R9JHttYW5kaXJ9L3BsL21hbjgvdXBkYXRlLXBhc3N3ZC44CisJZ3ppcCAtOSAke0R9JHttYW5kaXJ9L21hbjgvKiAke0R9JHttYW5kaXJ9L3BsL21hbjgvKgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkCisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNjQ0ICR7U30vcGFzc3dkLm1hc3RlciAke0R9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZC8KKwlzZWQgLWkgJ3MjOi9yb290OiM6JHtST09UX0hPTUV9OiMnICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtcCAtbSA2NDQgJHtTfS9ncm91cC5tYXN0ZXIgJHtEfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QvCisKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkb2NkaXJ9LyR7QlBOfQorCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vZGViaWFuL2NoYW5nZWxvZyAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlnemlwIC05ICR7RH0ke2RvY2Rpcn0vJHtCUE59LyoKKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L1JFQURNRSAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L2RlYmlhbi9jb3B5cmlnaHQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0vCit9CisKK2Jhc2VfcGFzc3dkX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIFN0YWdpbmcgZG9lcyBub3QgY29weSAke3N5c2NvbmZkaXJ9IGZpbGVzIGludG8gdGhlCisJCSMgdGFyZ2V0IHN5c3Jvb3QsIHNvIHdlIG5lZWQgdG8gZG8gc28gbWFudWFsbHkuIFdlCisJCSMgcHV0IHRoZXNlIGZpbGVzIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBzbyB0aGV5IGNhbgorCQkjIGJlIHVzZWQgYnkgcmVjaXBlcyB3aGljaCB1c2UgY3VzdG9tIHVzZXIvZ3JvdXAKKwkJIyBwZXJtaXNzaW9ucy4KKwkJIyBJbnN0YWxsIHBhc3N3ZC5tYXN0ZXIgYW5kIGdyb3VwLm1hc3RlciB0byBzeXNjb25mZGlyIGFuZCBtdgorCQkjIHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGF0b21pY2FsbHkgaW5zdGFsbC4KKwkJaW5zdGFsbCAtZCAtbSA3NTUgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfQorCQlmb3IgaSBpbiBwYXNzd2QgZ3JvdXA7IGRvCisJCQlpbnN0YWxsIC1wIC1tIDY0NCAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkLyRpLm1hc3RlciBcCisJCQkJJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfS8KKwkJCW12ICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkubWFzdGVyICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkKKwkJZG9uZQorCWZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICMgQWRkIGluIHRoZSBwcmVpbnN0IGZ1bmN0aW9uIGZvciAke1BOfQorICAgICMgV2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUgYXMgcHJpb3IgdG8gdGhpcywgcGFzc3dkL2dyb3VwLm1hc3RlcgorICAgICMgd291bGQgYmUgdW5hdmFpbGFibGUuIFdlIG5lZWQgdG8gY3JlYXRlIHRoZXNlIGZpbGVzIGF0IHByZWluc3QKKyAgICAjIHRpbWUgYmVmb3JlIHRoZSBmaWxlcyBmcm9tIHRoZSBwYWNrYWdlIG1heSBiZSBhdmFpbGFibGUsIGhlbmNlCisgICAgIyBzdG9yaW5nIHRoZSBkYXRhIGZyb20gdGhlIGZpbGVzIGluIHRoZSBwcmVpbnN0IGRpcmVjdGx5LgorCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyIiksICdyJykKKyAgICBwYXNzd2QgPSAiIi5qb2luKGYucmVhZGxpbmVzKCkpCisgICAgZi5jbG9zZSgpCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9ncm91cC5tYXN0ZXIiKSwgJ3InKQorICAgIGdyb3VwID0gIiIuam9pbihmLnJlYWRsaW5lcygpKQorICAgIGYuY2xvc2UoKQorCisgICAgcHJlaW5zdCA9ICIiIiMhL2Jpbi9zaAorbWtkaXIgLXAgJEQke3N5c2NvbmZkaXJ9CitpZiBbICEgLWUgJEQke3N5c2NvbmZkaXJ9L3Bhc3N3ZCBdOyB0aGVuCitcdGNhdCA8PCAnRU9GJyA+ICREJHtzeXNjb25mZGlyfS9wYXNzd2QKKyIiIiArIHBhc3N3ZCArICIiIkVPRgorZmkKK2lmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vZ3JvdXAgXTsgdGhlbgorXHRjYXQgPDwgJ0VPRicgPiAkRCR7c3lzY29uZmRpcn0vZ3JvdXAKKyIiIiArIGdyb3VwICsgIiIiRU9GCitmaQorIiIiCisgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyR7UE59JywgcHJlaW5zdCkKK30KKworYWRkdGFzayBkb19wYWNrYWdlIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXVwZGF0ZSIKK0ZJTEVTXyR7UE59LXVwZGF0ZSA9ICIke3NiaW5kaXJ9LyogJHtkYXRhZGlyfS8ke1BOfSIKKworcGtnX3Bvc3RpbnN0XyR7UE59LXVwZGF0ZSAoKSB7CisjIS9iaW4vc2gKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisJZXhpdCAwCitmaQorJHtzYmluZGlyfS91cGRhdGUtcGFzc3dkCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4ZjlmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LmluYwpAQCAtMCwwICsxLDQxNiBAQAorU1VNTUFSWSA9ICJUaW55IHZlcnNpb25zIG9mIG1hbnkgY29tbW9uIFVOSVggdXRpbGl0aWVzIGluIGEgc2luZ2xlIHNtYWxsIGV4ZWN1dGFibGUiCitERVNDUklQVElPTiA9ICJCdXN5Qm94IGNvbWJpbmVzIHRpbnkgdmVyc2lvbnMgb2YgbWFueSBjb21tb24gVU5JWCB1dGlsaXRpZXMgaW50byBhIHNpbmdsZSBzbWFsbCBleGVjdXRhYmxlLiBJdCBwcm92aWRlcyBtaW5pbWFsaXN0IHJlcGxhY2VtZW50cyBmb3IgbW9zdCBvZiB0aGUgdXRpbGl0aWVzIHlvdSB1c3VhbGx5IGZpbmQgaW4gR05VIGZpbGV1dGlscywgc2hlbGx1dGlscywgZXRjLiBUaGUgdXRpbGl0aWVzIGluIEJ1c3lCb3ggZ2VuZXJhbGx5IGhhdmUgZmV3ZXIgb3B0aW9ucyB0aGFuIHRoZWlyIGZ1bGwtZmVhdHVyZWQgR05VIGNvdXNpbnM7IGhvd2V2ZXIsIHRoZSBvcHRpb25zIHRoYXQgYXJlIGluY2x1ZGVkIHByb3ZpZGUgdGhlIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSB0aGVpciBHTlUgY291bnRlcnBhcnRzLiBCdXN5Qm94IHByb3ZpZGVzIGEgZmFpcmx5IGNvbXBsZXRlIFBPU0lYIGVudmlyb25tZW50IGZvciBhbnkgc21hbGwgb3IgZW1iZWRkZWQgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYnVzeWJveC5uZXQiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5idXN5Ym94Lm5ldC8iCisKK0RFUEVORFMgKz0gImtlcm4tdG9vbHMtbmF0aXZlIgorCisjIGJ6aXAyIGFwcGxldCBpbiBidXN5Ym94IGlzIGJhc2VkIG9uIGxpZ2h0bHktbW9kaWZpZWQgYnppcDIgc291cmNlCisjIHRoZSBHUEwgaXMgdmVyc2lvbiAyIG9ubHkKK0xJQ0VOU0UgPSAiR1BMdjIgJiBiemlwMiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRlMTBkZTQ4NjQyYWI3NDMxOGU4OTNhNjExMDVhZmJiIgorCitTRUNUSU9OID0gImJhc2UiCisKKyMgV2hldGhlciB0byBzcGxpdCB0aGUgc3VpZCBhcHBzIGludG8gYSBzZXBlcmF0ZSBiaW5hcnkKK0JVU1lCT1hfU1BMSVRfU1VJRCA/PSAiMSIKKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgRVhUUkFfTERGTEFHUyA9ICIke0xERkxBR1N9IgorZXhwb3J0IEVYVFJBX09FTUFLRSArPSAiJ0xEPSR7Q0NMRH0nIgorCitQQUNLQUdFUyA9KyAiJHtQTn0taHR0cGQgJHtQTn0tdWRoY3BkICR7UE59LXVkaGNwYyAke1BOfS1zeXNsb2cgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitGSUxFU18ke1BOfS1odHRwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LWh0dHBkIC9zcnYvd3d3IgorRklMRVNfJHtQTn0tc3lzbG9nID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyogJHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mKiAke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mKiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2xvZy5zZXJ2aWNlICR7c3lzY29uZmRpcn0vZGVmYXVsdC9idXN5Ym94LXN5c2xvZyIKK0ZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvbWRldiAke3N5c2NvbmZkaXJ9L21kZXYuY29uZiAke3N5c2NvbmZkaXJ9L21kZXYvKiIKK0ZJTEVTXyR7UE59LXVkaGNwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LXVkaGNwZCIKK0ZJTEVTXyR7UE59LXVkaGNwYyA9ICIke3N5c2NvbmZkaXJ9L3VkaGNwYy5kICR7ZGF0YWRpcn0vdWRoY3BjIgorRklMRVNfJHtQTn0taHdjbG9jayA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9od2Nsb2NrLnNoIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LWh0dHBkICR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGQgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitJTklUU0NSSVBUX05BTUVfJHtQTn0taHR0cGQgPSAiYnVzeWJveC1odHRwZCIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1od2Nsb2NrID0gImh3Y2xvY2suc2giCitJTklUU0NSSVBUX05BTUVfJHtQTn0tbWRldiA9ICJtZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tbWRldiA9ICJzdGFydCAwMyBTIC4iCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3lzbG9nID0gInN5c2xvZyIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS11ZGhjcGQgPSAiYnVzeWJveC11ZGhjcGQiIAorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXN5c2xvZyIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zeXNsb2cgPSAiYnVzeWJveC1zeXNsb2cuc2VydmljZSIKKworQ09ORkZJTEVTXyR7UE59LXN5c2xvZyA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59IgorQ09ORkZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9tZGV2LmNvbmYiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGMiCisKK2luaGVyaXQgY21sMSBzeXN0ZW1kIHVwZGF0ZS1yYy5kIHB0ZXN0CisKKyMgaW50ZXJuYWwgaGVscGVyCitkZWYgYnVzeWJveF9jZmcoZmVhdHVyZSwgdG9rZW5zLCBjbmYsIHJlbSk6CisJaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorCQl0b2tlbnMgPSBbdG9rZW5zXQorCXJlbS5leHRlbmQoWycvXlsjIF0qJyArIHRva2VuICsgJ1sgPV0vZCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisJaWYgZmVhdHVyZToKKwkJY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCWVsc2U6CisJCWNuZi5leHRlbmQoWycjICcgKyB0b2tlbiArICcgaXMgbm90IHNldCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBjb25maWcgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpOgorCWNuZiwgcmVtID0gKFtdLCBbXSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkVBVFVSRV9JUFY2JywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfTEZTJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUycsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbmxzJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0xPQ0FMRV9TVVBQT1JUJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNCcsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjYnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJcmV0dXJuICJcbiIuam9pbihjbmYpLCAiXG4iLmpvaW4ocmVtKQorCisjIFgsIFkgPSAke0BmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCl9CisjIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzZWVtIHRvIHdvcmsgd2l0aCBiaXRiYWtlLCB3b3JrYXJvdW5kOgorZGVmIGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKToKKwljbmYsIHJlbSA9IGZlYXR1cmVzX3RvX2J1c3lib3hfc2V0dGluZ3MoZCkKKwlyZXR1cm4gY25mCitkZWYgZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCk6CisJY25mLCByZW0gPSBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpCisJcmV0dXJuIHJlbQorCitjb25maWdtYW5nbGUgPSAnL0NST1NTX0NPTVBJTEVSX1BSRUZJWC9kOyBcCisJCS9DT05GSUdfRVhUUkFfQ0ZMQUdTL2Q7IFwKKwkJJworT0VfRkVBVFVSRVMgOj0gIiR7QGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKX0iCitPRV9ERUwgICAgICA6PSAiJHtAZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCl9IgorRE9fSVB2NCA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgMSwgMCwgZCl9IgorRE9fSVB2NiA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgMSwgMCwgZCl9IgorCitweXRob24gKCkgeworICBpZiAiJHtPRV9ERUx9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsICIke09FX0RFTH0iICsgIlxuIikKKyAgaWYgIiR7T0VfRkVBVFVSRVN9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIERJU1RSTyBGRUFUVVJFUyQvYVxcXG4lc1xuXG4iICUKKyAgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbigoZC5leHBhbmQoIiR7T0VfRkVBVFVSRVN9Iikuc3BsaXQoIlxuIikpKSkpCisgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIENST1NTJC9hXFxcbiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKFsiQ09ORklHX0NST1NTX0NPTVBJTEVSX1BSRUZJWD1cIiR7VEFSR0VUX1BSRUZJWH1cIiIsCisJCQkgICAgICAgIkNPTkZJR19FWFRSQV9DRkxBR1M9XCIke0NGTEFHU31cIiBcIiR7SE9TVF9DQ19BUkNIfVwiIgorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgICAgICkpCit9CisKK2RvX3ByZXBhcmVfY29uZmlnICgpIHsKKwlzZWQgLWUgJ3MjQERBVEFESVJAIyR7ZGF0YWRpcn0jZycgXAorCQk8ICR7V09SS0RJUn0vZGVmY29uZmlnID4gJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcvQ09ORklHX1NUQVRJQy9kJyAuY29uZmlnCisJZWNobyAiIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQiID4+IC5jb25maWcKKwlmb3IgaSBpbiAnQ1JPU1MnICdESVNUUk8gRkVBVFVSRVMnOyBkbyBlY2hvICIjIyMgJGkiOyBkb25lID4+IFwKKwkJJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcke2NvbmZpZ21hbmdsZX0nICR7U30vLmNvbmZpZworCWlmIHRlc3QgJHtET19JUHY0fSAtZXEgMCAmJiB0ZXN0ICR7RE9fSVB2Nn0gLWVxIDA7IHRoZW4KKwkgICMgZGlzYWJsZSBuZXR3b3JraW5nIGFwcGxldHMKKwkgIG12ICR7U30vLmNvbmZpZyAke1N9Ly5jb25maWcub2UtdG1wCisJICBhd2sgJ0JFR0lOe25ldD0wfQorCSAgL14jIE5ldHdvcmtpbmcgVXRpbGl0aWVzL3tuZXQ9MX0KKwkgIC9eIyQve2lmKG5ldCl7bmV0PW5ldCsxfX0KKwkgIHtpZihuZXQ9PTImJiQwICF+IC9eIy8mJiQxKXtwcmludCgiIyAiJDEiIGlzIG5vdCBzZXQiKX1lbHNle3ByaW50fX0nIFwKKwkJICAke1N9Ly5jb25maWcub2UtdG1wID4gJHtTfS8uY29uZmlnCisJZmkKKwlzZWQgLWkgJ3MvQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iL0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1iIi8nICR7U30vLmNvbmZpZworfQorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKK2RlZiBmaW5kX2NmZ3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGlmIHMuZW5kc3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKKworZG9fY29uZmlndXJlICgpIHsKKwlkb19wcmVwYXJlX2NvbmZpZworCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnICR7QCIgIi5qb2luKGZpbmRfY2ZncyhkKSl9CisJY21sMV9kb19jb25maWd1cmUKK30KKworZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgLWEgeGBncmVwICJDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMPXkiIC5jb25maWdgID0geCBdOyB0aGVuCisJIyBzcGxpdCB0aGUgLmNvbmZpZyBpbnRvIHR3byBwYXJ0cywgYW5kIG1ha2UgdHdvIGJ1c3lib3ggYmluYXJpZXMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm9yaWcKKwkJb2VfcnVubWFrZSBidXN5Ym94LmNmZy5zdWlkCisJCW9lX3J1bm1ha2UgYnVzeWJveC5jZmcubm9zdWlkCisJCWZvciBpIGluIGBjYXQgYnVzeWJveC5jZmcuc3VpZCBidXN5Ym94LmNmZy5ub3N1aWRgOyBkbworCQkJZWNobyAiIyAkaSBpcyBub3Qgc2V0IiA+PiAuY29uZmlnLmRpc2FibGUuYXBwcworCQlkb25lCisJCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnLm9yaWcgLmNvbmZpZy5kaXNhYmxlLmFwcHMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm5vbmFwcHMKKwkJZm9yIHMgaW4gc3VpZCBub3N1aWQ7IGRvCisJCQljYXQgYnVzeWJveC5jZmcuJHMgfCB3aGlsZSByZWFkIGl0ZW07IGRvCisJCQkJZ3JlcCAtdyAiJGl0ZW0iIC5jb25maWcub3JpZworCQkJZG9uZSA+IC5jb25maWcuYXBwLiRzCisJCQltZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZy5ub25hcHBzIC5jb25maWcuYXBwLiRzCisJCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQkJbXYgYnVzeWJveF91bnN0cmlwcGVkIGJ1c3lib3guJHMKKwkJCW9lX3J1bm1ha2UgYnVzeWJveC5saW5rcworCQkJbXYgYnVzeWJveC5saW5rcyBidXN5Ym94LmxpbmtzLiRzCisJCWRvbmUKKwkJIyBjb3B5IC5jb25maWcub3JpZyBiYWNrIHRvIC5jb25maWcsIGJlY2F1c2UgdGhlIGluc3RhbGwgcHJvY2VzcyBtYXkgY2hlY2sgdGhpcyBmaWxlCisJCWNwIC5jb25maWcub3JpZyAuY29uZmlnCisJCSMgY2xlYW51cAorCQlybSAuY29uZmlnLm9yaWcgLmNvbmZpZy5hcHAuc3VpZCAuY29uZmlnLmFwcC5ub3N1aWQgLmNvbmZpZy5kaXNhYmxlLmFwcHMgLmNvbmZpZy5ub25hcHBzCisJZWxzZQorCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQljcCBidXN5Ym94X3Vuc3RyaXBwZWQgYnVzeWJveAorCQlvZV9ydW5tYWtlIGJ1c3lib3gubGlua3MKKwlmaQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpZiBbICIke3ByZWZpeH0iICE9ICIvdXNyIiBdOyB0aGVuCisJCXNlZCAtaSAiczpeL3Vzci86JHtwcmVmaXh9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKwlpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIvc2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9zYmluLzoke2Jhc2Vfc2JpbmRpcn0vOiIgYnVzeWJveC5saW5rcyoKKwlmaQorCWlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiL2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9iaW4vOiR7YmFzZV9iaW5kaXJ9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKwlpZiAhIGdyZXAgLXEgIkNPTkZJR19GRUFUVVJFX0lORElWSURVQUw9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCSMgSW5zdGFsbCAvYmluL2J1c3lib3gsIGFuZCB0aGUgL2Jpbi9zaCBsaW5rIHNvIHRoZSBwb3N0aW5zdCBzY3JpcHQKKwkJIyBjYW4gcnVuLiBMZXQgdXBkYXRlLWFsdGVybmF0aXZlcyBoYW5kbGUgdGhlIHJlc3QuCisJCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgXTsgdGhlbgorCQkJaW5zdGFsbCAtbSA0NzU1ICR7Qn0vYnVzeWJveC5zdWlkICR7RH0ke2Jhc2VfYmluZGlyfQorCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveC5ub3N1aWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzLnN1aWQgJHtEfSR7c3lzY29uZmRpcn0KKwkJCWluc3RhbGwgLW0gMDY0NCAke1N9L2J1c3lib3gubGlua3Mubm9zdWlkICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3gubm9zdWlkICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQkJZmkKKwkJCSMgS2VlcCBhIGRlZmF1bHQgYnVzeWJveCBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGludm9rZSBidXN5Ym94IGRpcmVjdGx5LgorCQkJIyBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciB0aGUgb24gZGV2aWNlIHVwZ3JhZGUuIEJlY2F1c2Ugd2Ugd2FudAorCQkJIyB0byB1c2UgdGhlIGJ1c3lib3ggY29tbWFuZCBpbiBwb3N0aW5zdC4KKwkJCWxuIC1zZiBidXN5Ym94Lm5vc3VpZCAke0R9JHtiYXNlX2JpbmRpcn0vYnVzeWJveAorCQllbHNlCisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TVUlEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQkJCWluc3RhbGwgLW0gNDc1NSAke0J9L2J1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQllbHNlCisJCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJCWZpCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L3NoCisJCQlmaQorCQkJIyBXZSBtYWtlIHRoaXMgc3ltbGluayBoZXJlIHRvIGVsaW1pbmF0ZSB0aGUgZXJyb3Igd2hlbiB1cGdyYWRpbmcgdG9nZXRoZXIKKwkJCSMgd2l0aCBidXN5Ym94LXN5c2xvZy4gV2l0aG91dCB0aGlzIHN5bWxpbmssIHRoZSBvcGtnIG1heSB0aGluayBvZiB0aGUKKwkJCSMgYnVzeWJveC5ub3N1aWQgYXMgb2Jzb2xldGUgYW5kIHJlbW92ZSBpdCwgcmVzdWx0aW5nIGluIGRlYWQgbGlua3MgbGlrZQorCQkJIyAvYmluL3NlZCAtPiAvYmluL2J1c3lib3gubm9zdWlkLiBUaGlzIHdpbGwgbWFrZSB1cGdyYWRpbmcgYnVzeWJveC1zeXNsb2cgZmFpbC4KKwkJCSMgVGhpcyBzeW1saW5rIHdpbGwgYmUgc2FmZWx5IGRlbGV0ZWQgaW4gcG9zdGluc3QsIHRodXMgbm8gbmVnYXRpdmUgZWZmZWN0LgorCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkCisJCWZpCisJZWxzZQorCQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9CisJCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfSAke0R9JHtiaW5kaXJ9ICR7RH0ke3NiaW5kaXJ9CisJCWNhdCBidXN5Ym94LmxpbmtzIHwgd2hpbGUgcmVhZCBGSUxFOyBkbworCQkJTkFNRT1gYmFzZW5hbWUgIiRGSUxFImAKKwkJCWluc3RhbGwgLW0gMDc1NSAiMF9saWIvJE5BTUUiICIke0R9JEZJTEUuJHtCUE59IgorCQlkb25lCisJCSMgYWRkIHN1aWQgYml0IHdoZXJlIG5lZWRlZAorCQlmb3IgaSBpbiBgZ3JlcCAtRSAiQVBQTEVULipCQl9TVUlEXygoTUFZQkV8UkVRVUlSRSkpIiBpbmNsdWRlL2FwcGxldHMuaCB8IGdyZXAgLXYgX0JCX1NVSURfRFJPUCB8IGN1dCAtZiAzIC1kICcoJyB8IGN1dCAtZiAxIC1kICcsJ2A7IGRvCisJCQlmaW5kICR7RH0gLW5hbWUgJGkuJHtCUE59IC1leGVjIGNobW9kIGErcyB7fSBcOworCQlkb25lCisJCWluc3RhbGwgLW0gMDc1NSAwX2xpYi9saWJidXN5Ym94LnNvLiR7UFZ9ICR7RH0ke2xpYmRpcn0vbGliYnVzeWJveC5zby4ke1BWfQorCQlsbiAtc2Ygc2guJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQlsbiAtc2YgbG4uJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9sbgorCQlsbiAtc2YgdGVzdC4ke0JQTn0gJHtEfSR7YmluZGlyfS90ZXN0CisJCWlmIFsgLWYgJHtEfS9saW51eHJjLiR7QlBOfSBdOyB0aGVuCisJCQltdiAke0R9L2xpbnV4cmMuJHtCUE59ICR7RH0vbGludXhyYworCQlmaQorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJZmkKKworCWlmIGdyZXAgLXEgIkNPTkZJR19TWVNMT0dEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zeXNsb2cgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZy4ke0JQTn0KKwkJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9zeXNsb2ctc3RhcnR1cC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59CisJCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYuJHtCUE59CisJZmkKKwlpZiBncmVwICJDT05GSUdfQ1JPTkQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtY3JvbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJZmkKKwlpZiBncmVwICJDT05GSUdfSFRUUEQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtaHR0cGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCQlpbnN0YWxsIC1kICR7RH0vc3J2L3d3dworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYnVzeWJveC11ZGhjcGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX0hXQ0xPQ0s9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2h3Y2xvY2suc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQQz15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3VkaGNwYworICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NpbXBsZS5zY3JpcHQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQvNTBkZWZhdWx0CisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQuc2NyaXB0ICR7RH0ke2RhdGFkaXJ9L3VkaGNwYy9kZWZhdWx0LnNjcmlwdAorCWZpCisJaWYgZ3JlcCAiQ09ORklHX0lORVREPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbmV0ZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvaW5ldGQuJHtCUE59CisJCXNlZCAtaSAiczovdXNyL3NiaW4vOiR7c2JpbmRpcn0vOiIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2luZXRkLiR7QlBOfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmV0ZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCisgICAgICAgIGlmIGdyZXAgIkNPTkZJR19NREVWPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbWRldiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbWRldgorICAgICAgICAgICAgICAgaWYgZ3JlcCAiQ09ORklHX0ZFQVRVUkVfTURFVl9DT05GPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L21kZXYuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tZGV2LmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tZGV2CisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2ZpbmQtdG91Y2hzY3JlZW4uc2ggJHtEfSR7c3lzY29uZmRpcn0vbWRldgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2LW1vdW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L21kZXYKKyAgICAgICAgICAgICAgIGZpCisJZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaWYgZ3JlcCAtcSAiQ09ORklHX1NZU0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKwkJPiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlCisgICAgICAgICAgICBpZiBbIC1mICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBdIDsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2J1c3lib3gtc3lzbG9nCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbG4gLXNmIC9kZXYvbnVsbCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNsb2cuc2VydmljZQorICAgICAgICBmaQorICAgICAgICBpZiBncmVwIC1xICJDT05GSUdfS0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gXAorCQk+ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2J1c3lib3gta2xvZ2Quc2VydmljZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIFJlbW92ZSB0aGUgc3lzdmluaXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzeXN0ZW1kIHN5c3RlbXMgdG8gYXZvaWQgY29uZnVzaW9uCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZi4ke0JQTn0KKyAgICBmaQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNTAiCisKK0FMVEVSTkFUSVZFXyR7UE59LXN5c2xvZyArPSAic3lzbG9nLWNvbmYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWNvbmZdID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYiCisKK3B5dGhvbiAoKSB7CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMtc3lzbG9nJyAlIChwbiksICcgc3lzbG9nLWluaXQnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctaW5pdCcsICclcy9pbml0LmQvc3lzbG9nJyAlIChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpKSkKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCAnc3lzbG9nLWluaXQnLCAnJXMvaW5pdC5kL3N5c2xvZy4lcycgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ0JQTicsIFRydWUpKSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ0FMVEVSTkFUSVZFXyVzLXN5c2xvZycgJSAocG4pLCAnIHN5c2xvZy1zdGFydHVwLWNvbmYnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkpKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYuJXMnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQgKCkgeworICAgICMgV2UgbmVlZCB0byBsb2FkIHRoZSBmdWxsIHNldCBvZiBidXN5Ym94IHByb3ZpZGVzIGZyb20gdGhlIC9ldGMvYnVzeWJveC5saW5rcworICAgICMgVXNlIHRoaXMgdG8gc2VlIHRoZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIHdpdGggdGhlIHJpZ2h0IGluZm9ybWF0aW9uCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZWYgc2V0X2FsdGVybmF0aXZlX3ZhcnMobGlua3MsIHRhcmdldCk6CisgICAgICAgIGYgPSBvcGVuKCclcyVzJyAlIChkdmFyLCBsaW5rcyksICdyJykKKyAgICAgICAgZm9yIGFsdF9saW5rX25hbWUgaW4gZjoKKyAgICAgICAgICAgIGFsdF9saW5rX25hbWUgPSBhbHRfbGlua19uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGFsdF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShhbHRfbGlua19uYW1lKQorICAgICAgICAgICAgIyBNYXRjaCBjb3JldXRpbHMKKyAgICAgICAgICAgIGlmIGFsdF9uYW1lID09ICdbJzoKKyAgICAgICAgICAgICAgICBhbHRfbmFtZSA9ICdsYnJhY2tldCcKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcycgJSAocG4pLCAnICcgKyBhbHRfbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIGFsdF9saW5rX25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMlcycgJSAoZHZhciwgdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgdGFyZ2V0KQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvZXRjL2J1c3lib3gubGlua3MnICUgKGR2YXIpKToKKyAgICAgICAgc2V0X2FsdGVybmF0aXZlX3ZhcnMoIiR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcyIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94IikKKyAgICBlbHNlOgorICAgICAgICBzZXRfYWx0ZXJuYXRpdmVfdmFycygiJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzLm5vc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZCIpCisgICAgICAgIHNldF9hbHRlcm5hdGl2ZV92YXJzKCIke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Muc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94LnN1aWQiKQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCSMgVGhpcyBwYXJ0IG9mIGNvZGUgaXMgZGVkaWNhdGVkIHRvIHRoZSBvbiB0YXJnZXQgdXBncmFkZSBwcm9ibGVtLgorCSMgSXQncyBrbm93biB0aGF0IGlmIHdlIGRvbid0IG1ha2UgYXBwcm9wcmlhdGUgc3ltbGlua3MgYmVmb3JlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMsCisJIyB0aGVyZSB3aWxsIGJlIGVycm9ycyBpbmRpY2F0aW5nIG1pc3NpbmcgY29tbWFuZHMgc3VjaCBhcyAnc2VkJy4KKwkjIFRoZXNlIHN5bWxpbmtzIHdpbGwgbGF0ZXIgYmUgdXBkYXRlZCBieSB1cGRhdGUtYWx0ZXJuYXRpdmVzIGNhbGxzLgorCXRlc3QgLW4gMiA+IC9kZXYvbnVsbCB8fCBhbGlhcyB0ZXN0PSdidXN5Ym94IHRlc3QnCisJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgorCQkjIFJlbW92ZSBidXN5Ym94Lm5vc3VpZCBpZiBpdCdzIGEgc3ltbGluaywgYmVjYXVzZSB0aGlzIHNpdHVhdGlvbiBpbmRpY2F0ZXMKKwkJIyB0aGF0IHdlJ3JlIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHRvIGEgb25lLWJpbmFyeSBidXN5Ym94LgorCQlpZiB0ZXN0IC1oICR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkOyB0aGVuCisJCQlybSAtZiAke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZAorCQlmaQorCQlmb3Igc3VmZml4IGluICIiICIubm9zdWlkIiAiLnN1aWQiOyBkbworCQkJaWYgdGVzdCAtZSAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4OyB0aGVuCisJCQkJd2hpbGUgcmVhZCBsaW5rOyBkbworCQkJCQlpZiB0ZXN0ICEgLWUgIiRsaW5rIjsgdGhlbgorCQkJCQkJY2FzZSAiJGxpbmsiIGluCisJCQkJCQkJLyovKi8qKQorCQkJCQkJCQl0bz0iLi4vLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvYmluLyopCisJCQkJCQkJCXRvPSJidXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvKi8qKQorCQkJCQkJCQl0bz0iLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCWVzYWMKKwkJCQkJCSMgd2UgY2FuIHVzZSBidXN5Ym94IGhlcmUgYmVjYXVzZSBldmVuIGlmIHdlIGFyZSB1c2luZyBzcGxpdHRlZCBidXN5Ym94CisJCQkJCQkjIHdlJ3ZlIG1hZGUgYSBzeW1saW5rIGZyb20gL2Jpbi9idXN5Ym94IHRvIC9iaW4vYnVzeWJveC5ub3N1aWQuCisJCQkJCQlidXN5Ym94IHJtIC1mICRsaW5rCisJCQkJCQlidXN5Ym94IGxuIC1zICR0byAkbGluaworCQkJCQlmaQorCQkJCWRvbmUgPCAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4CisJCQlmaQorCQlkb25lCisJZmkKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwkjIFRoaXMgaXMgc28geW91IGNhbiBtYWtlIGJ1c3lib3ggY29tbWl0IHN1aWNpZGUgLSByZW1vdmluZyBidXN5Ym94IHdpdGggbm8gb3RoZXIgcGFja2FnZXMKKwkjIHByb3ZpZGluZyBpdHMgZmlsZXMsIHRoaXMgd2lsbCBtYWtlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgd29yaywgYnV0IHRoZSB1cGRhdGUtcmMuZCBwYXJ0CisJIyBmb3Igc3lzbG9nLCBodHRwZCBhbmQvb3IgdWRoY3BkIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBubyBvdGhlciBwYWNrYWdlIHByb3ZpZGluZyBzaAorCXRtcGRpcj1gbWt0ZW1wIC1kIC90bXAvYnVzeWJveHJtLVhYWFhYWGAKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvWworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci90ZXN0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2hlYWQKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvc2gKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvYmFzZW5hbWUKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvZWNobworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9tdgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9sbgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9kaXJuYW1lCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3JtCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3NlZAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9zb3J0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2dyZXAKKwlleHBvcnQgUEFUSD0kUEFUSDokdG1wZGlyCit9CisKK3BrZ19wcmVybV8ke1BOfS1zeXNsb2cgKCkgeworCSMgcmVtb3ZlIHN5c2xvZworCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KKwkJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgorCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nIHN0b3AKKwkJZmkKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1jaG93bi1maXgtaGVscC10ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTk3OTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBkMjkxYzJmZGQ1Y2I4NjE2NjA1YzY3ZWNiZmIwNDI3NGZhMDk0MjQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBTdW4sIDcgSnVuIDIwMTUgMDI6MzI6MjMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gY2hvd246IGZpeCBoZWxwIHRleHQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9ZDI5MWMyZmRkNWNiODYxNjYwNWM2N2VjYmZiMDQyNzRmYTA5NDI0Mi4KKworT25seSB3aGVuIERFU0tUT1AgaXMgZW5hYmxlZCwgY2hvd24gaGFzIC1MLCAtSCBhbmQgLVAgb3B0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBjb3JldXRpbHMvY2hvd24uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvcmV1dGlscy9jaG93bi5jIGIvY29yZXV0aWxzL2Nob3duLmMKK2luZGV4IGNiMDdiYmMuLjY3OWMwZDggMTAwNjQ0CistLS0gYS9jb3JldXRpbHMvY2hvd24uYworKysrIGIvY29yZXV0aWxzL2Nob3duLmMKK0BAIC0xMSw3ICsxMSw3IEBACisgLyogaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA3OTA0OTc1L3V0aWxpdGllcy9jaG93bi5odG1sICovCisgCisgLy91c2FnZTojZGVmaW5lIGNob3duX3RyaXZpYWxfdXNhZ2UKKy0vL3VzYWdlOiAgICAgICAiWy1SaExIUCJJRl9ERVNLVE9QKCJjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKysvL3VzYWdlOiAgICAgICAiWy1SaCJJRl9ERVNLVE9QKCJMSFBjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKyAvL3VzYWdlOiNkZWZpbmUgY2hvd25fZnVsbF91c2FnZSAiXG5cbiIKKyAvL3VzYWdlOiAgICAgICAiQ2hhbmdlIHRoZSBvd25lciBhbmQvb3IgZ3JvdXAgb2YgZWFjaCBGSUxFIHRvIE9XTkVSIGFuZC9vciBHUk9VUFxuIgorIC8vdXNhZ2U6ICAgICAiXG4JLVIJUmVjdXJzZSIKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtaWZjb25maWctZml4LWRvdWJsZS1mcmVlLWZhdGFsLWVycm9yLWluLUlORVRfc3ByaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNzI5YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGE5Nzc3Nzg4OTMyODE1N2JiN2QwNmVjNjE4YmFkMTY3MTJhOWMzNDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVHVlLCAzIEZlYiAyMDE1IDEyOjExOjMwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlmY29uZmlnOiBmaXggZG91YmxlIGZyZWUgZmF0YWwgZXJyb3IgaW4gSU5FVF9zcHJpbnQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9YTk3Nzc3ODg5MzI4MTU3YmI3ZDA2ZWM2MThiYWQxNjcxMmE5YzM0NS4KKworV2hpbGUgSU5FVF9zcHJpbnQgb3IgSU5FVDZfc3ByaW50IGlzIGNhbGxlZCBjaXJjdWxhcmx5IGJ5IGtlZXBpbmcKK2lmY29uZmlnaW5nLCBzYXAtPnNhX2ZhbWlseSB3b3VsZCBiZSBjbGVhbmVkIGJ5IG90aGVyIHBhcmFsbGVsIHByb2Nlc3Nlcworc3VjaCBhcyBkaGNsaWVudCBzb21ldGltZXMsIGFuZCB0aGVuIHRoZXJlIHdvdWxkIGJlIGEgZG91YmxlIGZyZWUgZXJyb3IKK2xpa2UgdGhlIGZvbGxvd2luZzoKKworICAqKiogZ2xpYmMgZGV0ZWN0ZWQgKioqIGlmY29uZmlnOiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uIChmYXN0dG9wKTogMHgwMDBhNjAwOCAqKioKKyAgPT09PT09PSBCYWNrdHJhY2U6ID09PT09PT09PQorICAvbGliL2xpYmMuc28uNigrMHg2YmM4NClbMHg0MDEzM2M4NF0KKyAgL2xpYi9saWJjLnNvLjYoY2ZyZWUrMHg5NClbMHg0MDEzODY4NF0KKyAgaWZjb25maWdbMHgxYzQ2MF0KKyAgaWZjb25maWdbMHgxYzZhMF0KKyAgaWZjb25maWdbMHgxY2NmNF0KKyAgaWZjb25maWdbMHgxODdjOF0KKyAgaWZjb25maWdbMHhkNTQ0XQorICBpZmNvbmZpZ1sweGQ1ZGNdCisgIGlmY29uZmlnWzB4ZGNhOF0KKyAgL2xpYi9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHgxMTApWzB4NDAwZGYyNThdCisgID09PT09PT0gTWVtb3J5IG1hcDogPT09PT09PT0KKyAgMDAwMDgwMDAtMDAwOWMwMDAgci14cCAwMDAwMDAwMCAxZjowNSA0NDQzMjggICAgIC9iaW4vYnVzeWJveAorICAwMDBhMzAwMC0wMDBhNDAwMCBydy1wIDAwMDkzMDAwIDFmOjA1IDQ0NDMyOCAgICAgL2Jpbi9idXN5Ym94CisKK1RoaXMgcGF0Y2ggbW92ZWQgZnJlZSgpIHR3byBsaW5lcyBkb3duIHRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBuZXR3b3JraW5nL2ludGVyZmFjZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25ldHdvcmtpbmcvaW50ZXJmYWNlLmMgYi9uZXR3b3JraW5nL2ludGVyZmFjZS5jCitpbmRleCBiZjdkMmIxLi5iMDU3MmQwIDEwMDY0NAorLS0tIGEvbmV0d29ya2luZy9pbnRlcmZhY2UuYworKysrIGIvbmV0d29ya2luZy9pbnRlcmZhY2UuYworQEAgLTkxLDkgKzkxLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUX3NwcmludChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgaW50IG51bWVyaWMpCisgeworIAlzdGF0aWMgY2hhciAqYnVmZjsgLyogZGVmYXVsdHMgdG8gTlVMTCAqLworIAorLQlmcmVlKGJ1ZmYpOworIAlpZiAoc2FwLT5zYV9mYW1pbHkgPT0gMHhGRkZGIHx8IHNhcC0+c2FfZmFtaWx5ID09IDApCisgCQlyZXR1cm4gIltOT05FIFNFVF0iOworKwlmcmVlKGJ1ZmYpOworIAlidWZmID0gSU5FVF9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luICopIHNhcCwgbnVtZXJpYywgMHhmZmZmZmYwMCk7CisgCXJldHVybiBidWZmOworIH0KK0BAIC0xNzMsOSArMTczLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUNl9zcHJpbnQoc3RydWN0IHNvY2thZGRyICpzYXAsIGludCBudW1lcmljKQorIHsKKyAJc3RhdGljIGNoYXIgKmJ1ZmY7CisgCistCWZyZWUoYnVmZik7CisgCWlmIChzYXAtPnNhX2ZhbWlseSA9PSAweEZGRkYgfHwgc2FwLT5zYV9mYW1pbHkgPT0gMCkKKyAJCXJldHVybiAiW05PTkUgU0VUXSI7CisrCWZyZWUoYnVmZik7CisgCWJ1ZmYgPSBJTkVUNl9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzYXAsIG51bWVyaWMpOworIAlyZXR1cm4gYnVmZjsKKyB9CistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyZGJjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgY29weSBjb21taXQgbWVzc2FnZSBmcm9tIE9FIGFzIHRoZSBwYXRjaCBjb21tZW50OgorIyAgICBjb21taXQgOThjMjQyOTFhYTE2NWY1MzQyM2MyN2FlMDMzODMxY2UwYjNiYjY3NgorIyAgICBBdXRob3I6IFJvbWFuIEkgS2hpbW92IDxraGltb3ZAYWx0ZWxsLnJ1PgorIyAgICBEYXRlOiAgIFRodSBNYXIgMjYgMjM6MDM6NTggMjAwOSArMDAwMAorIworIyAgICBidXN5Ym94OiB1cGRhdGUgYXBwbGV0bGliIGRlcGVuZGVuY3kgcGF0Y2gKKyMgICAgCisjICAgIFByZXZpb3VzIHZlcnNpb24gc3RpbGwgZmFpbGVkIGZyb20gdGltZSB0byB0aW1lIG9uIGNsZWFuLXN0YXJ0IGJ1aWxkcworIyAgICB3aXRoIDQgYml0YmFrZSB0aHJlYWRzIGFuZCAnLWoxNicuIEJ1aWxkaW5nIGJ1c3lib3ggYXMgc29sZSB0YXJnZXQgd29ya2VkCisjICAgIHdlbGwuCisjICAgIAorIyAgICBUaGUgcmVhc29uIGlzIHRoYXQgcHJldmlvdXMgdmVyc2lvbiBpbnRyb2R1Y2VkIGEgcmFjZSBiZXR3ZWVuIGFwcGxldHMgbWFrZQorIyAgICBwcm9jZXNzZXMgc3Bhd25lZCBmcm9tIHRvcC1sZXZlbCBNYWtlZmlsZSBhbmQgZnJvbSBsaWJiYiBNYWtlZmlsZS4KKyMgICAgCisjICAgIEZpeCBpdCB3aXRoIGhpZ2gtbGV2ZWwgZGVwZW5kZW5jeSB0aGF0IGRvZXNuJ3QgY3JlYXRlIHJhY2VzLgorIyAgICAKKyMgICAgU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQG9wZW5lbWJlZGRlZC5vcmc+CisjCisjIGFib3ZlIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA3LTA2CisKK0luZGV4OiBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4xMy4yLm9yaWcvTWFrZWZpbGUJMjAwOS0wMy0xOSAxNTo0NDozNy40MTkyNzAyNjUgKzAzMDAKKysrKyBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQkyMDA5LTAzLTE5IDE1OjQ1OjU3LjczNzUyMTI5NiArMDMwMAorQEAgLTQ3MSw2ICs0NzEsMTAgQEAKKyAJCXV0aWwtbGludXgvIFwKKyAJCXV0aWwtbGludXgvdm9sdW1lX2lkLyBcCisgCisrIyBMaWIgaW50ZXJkZXBzCisrIyBsaWJiYiB1c2VzIGhlYWRlcnMgZ2VuZXJhdGVkIGluIGFwcGxldHMKKytsaWJiYjogYXBwbGV0cworKworIGVuZGlmICMgS0JVSUxEX0VYVE1PRAorIAorIGlmZXEgKCQoZG90LWNvbmZpZyksMSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE4Njg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb206IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDMgTWFyIDIwMTMgMTI6MzE6NDAgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWVudWNvbmZpZyxjaGVjay1seGRpYWdsb2cuc2g6IEFsbG93IHNwZWNpZmljYXRpb24gb2YgbmN1cnNlcyBsb2NhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitbIGJhc2VkIG9uOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMy8zLzMvMTAzIF0KKworVGhpcyBwYXRjaCBzeW5jcyB1cCB3aXRoIHRoZSB3YXkgdGhlIG1lbnVjb25maWcgbmN1cnNlcyAvIGN1cnNlcworaXMgZGV0ZWN0ZWQgYW5kIHRoZSBIT1NUX0VYVFJBQ0ZMQUdTIHdvcmtzIGluIHRoZSBMaW51eCBrZXJuZWwKK2FuZCBpdCBhbGxvd3MgdGhlIG1lbnVjb25maWcgdG8gd29yayB3aXRoIGEgc3lzcm9vdCB2ZXJzaW9uCitvZiB0aGUgY3Vyc2VzIGxpYnJhcmllcy4KKworLS0tCisKK0luIHNvbWUgY3Jvc3MgYnVpbGQgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QgYnVpbGQKK2Vudmlyb25tZW50IGl0IHByb3ZpZGVzIGFuIG5jdXJzZXMgbGlicmFyeSB0aGF0IGlzIGNvbXBpbGVkCitkaWZmZXJlbnRseSB0aGFuIHRoZSBob3N0J3MgdmVyc2lvbi4gIFRoaXMgY2F1c2VzIGRpc3BsYXkgY29ycnVwdGlvbgorcHJvYmxlbXMgd2hlbiB0aGUgaG9zdCdzIGN1cnNlcyBpbmNsdWRlcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQoraW5jbHVkZXMgZnJvbSB0aGUgcHJvdmlkZWQgY29tcGlsZXIgYXJlIG92ZXJyaWRkZW4uICBUaGVyZSBpcyBhIHNlY29uZAorY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBjdXJzZXMgbGlicmFyaWVzIGF0IGFsbCBvbiB0aGUgaG9zdCBzeXN0ZW0gYW5kCittZW51Y29uZmlnIHdpbGwganVzdCBmYWlsIGVudGlyZWx5LgorCitUaGUgc29sdXRpb24gaXMgc2ltcGx5IHRvIGFsbG93IGFuIG92ZXJyaWRlIHZhcmlhYmxlIGluCitjaGVjay1seGRpYWxvZy5zaCBmb3IgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QuICBBZGRpbmcKK2EgQ1JPU1NfQ1VSU0VTX0xJQiBhbmQgQ1JPU1NfQ1VSU0VTX0lOQyBzb2x2ZXMgdGhlIGlzc3VlIGFuZCBhbGxvd2luZworY29tcGlsaW5nIGFuZCBsaW5raW5nIGFnYWluc3QgdGhlIHJpZ2h0IGhlYWRlcnMgYW5kIGxpYnJhcmllcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK2NjOiBNaWNoYWwgTWFyZWsgPG1tYXJla0BzdXNlLmN6PgorY2M6IGxpbnV4LWtidWlsZEB2Z2VyLmtlcm5lbC5vcmcKKy0tLQorIHNjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZSAgICAgICAgICB8ICAgIDIgKy0KKyBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCisrKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKK0BAIC00LDYgKzQsMTAgQEAKKyAjIFdoYXQgbGlicmFyeSB0byBsaW5rCisgbGRmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19MSUIiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19MSUIiCisrCQlleGl0CisrCWZpCisgCWZvciBleHQgaW4gc28gYSBkeWxpYiA7IGRvCisgCQlmb3IgbGliIGluIG5jdXJzZXN3IG5jdXJzZXMgY3Vyc2VzIDsgZG8KKyAJCQkkY2MgLXByaW50LWZpbGUtbmFtZT1saWIke2xpYn0uJHtleHR9IHwgZ3JlcCAtcSAvCitAQCAtMTksNiArMjMsMTAgQEAgbGRmbGFncygpCisgIyBXaGVyZSBpcyBuY3Vyc2VzLmg/CisgY2NmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19JTkMiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19JTkMiCisrCQlleGl0CisrCWZpCisgCWlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuCisgCQllY2hvICctSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyAtRENVUlNFU19MT0M9IjxuY3Vyc2VzLmg+IicKKyAJZWxpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCBdOyB0aGVuCistLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUKKysrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZQorQEAgLTUsNyArNSw3IEBAIGNoZWNrLWx4ZGlhbG9nICA6PSAkKHNyY3RyZWUpLyQoc3JjKS9jaGUKKyAKKyAjIFVzZSByZXVyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlcyBzbyB3ZSBkbyBub3QgY2FsbCBnY2MgdW5sZXNzCisgIyB3ZSByZWFsbHkgbmVlZCB0byBkbyBzby4gKERvIG5vdCBjYWxsIGdjYyBhcyBwYXJ0IG9mIG1ha2UgbXJwcm9wZXIpCistSE9TVF9FWFRSQUNGTEFHUyA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1jY2ZsYWdzKQorK0hPU1RfRVhUUkFDRkxBR1MgKz0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNjZmxhZ3MpCisgSE9TVF9MT0FETElCRVMgICA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1sZGZsYWdzICQoSE9TVENDKSkKKyAKKyBIT1NUX0VYVFJBQ0ZMQUdTICs9IC1ETE9DQUxFCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOWNlM2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSA1MzYyNmNkMDZhM2VmMDVlZDg0N2RhZWE4MDJlZjBhYTk2NjFjYWE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kZXJzIERhcmFuZGVyIDxhbmRlcnNAY2hhcmdlc3Rvcm0uc2U+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMDg6NTE6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2gKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBhIG5ldyBvcHRpb24gLUQgdG8gdGhlIHVkaGNwYyBjbGllbnQgdGhhdCBhbGxvd3MgZm9yCitkaGNwIHJlbmV3YWwgdG8gb2NjdXIgd2l0aG91dCBoYXZpbmcgdG8gZG93biB0aGUgaW50ZXJmYWNlCitpbiB0aGUgcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogR3JlZyBNb2ZmYXR0IDxncmVnLm1vZmZhdHRAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCB0byBsYXRlc3QgQnVzeWJveCAxLjE3LjMKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOC40CitvcHRpb24gc3BlYyBpcyBjaGFuZ2VkCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOS4zCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBEYXJhbmRlciA8YW5kZXJzQGNoYXJnZXN0b3JtLnNlPgorCitGaXhlZCBvcHRpb25zIC1iLCAtYSBhbmQgLVAuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CistLS0KKyBuZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMgfCAgIDI5ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogYnVzeWJveC0xLjIwLjIvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIwLjIub3JpZy9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKKysrKyBidXN5Ym94LTEuMjAuMi9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKK0BAIC0yOSw2ICsyOSw5IEBACisgI2luY2x1ZGUgPG5ldHBhY2tldC9wYWNrZXQuaD4KKyAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CisgCisrLyogb3B0aW9uIHdoZXRoZXIgdG8gZG93biB0aGUgaW50ZXJmYWNlIHdoZW4gcmVjb25maWd1cmluZyAqLworK3N0YXRpYyBpbnQgYWxsb3dfZGVjb25maWcgPSAxOworKworIC8qICJzdHJ1Y3QgY2xpZW50X2NvbmZpZ190IGNsaWVudF9jb25maWciIGlzIGluIGJiX2NvbW1vbl9idWZzaXoxICovCisgCisgCitAQCAtODEsOCArODQsOSBAQCBlbnVtIHsKKyAJT1BUX3ggPSAxIDw8IDE4LAorIAlPUFRfZiA9IDEgPDwgMTksCisgCU9QVF9CID0gMSA8PCAyMCwKKysJT1BUX0QgPSAxIDw8IDIxLAorIC8qIFRoZSByZXN0IGhhcyB2YXJpYWJsZSBiaXQgcG9zaXRpb25zLCBuZWVkIHRvIGJlIGNsZXZlciAqLworLQlPUFRCSVRfQiA9IDIwLAorKwlPUFRCSVRfRCA9IDIxLAorIAlVU0VfRk9SX01NVSggICAgICAgICAgICAgT1BUQklUX2IsKQorIAlJRl9GRUFUVVJFX1VESENQQ19BUlBJTkcoT1BUQklUX2EsKQorIAlJRl9GRUFUVVJFX1VESENQX1BPUlQoICAgT1BUQklUX1AsKQorQEAgLTEwNDAsNyArMTA0NCw4IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1fcmVuZXcodm9pZCkKKyAJCXN0YXRlID0gUkVORVdfUkVRVUVTVEVEOworIAkJYnJlYWs7CisgCWNhc2UgUkVORVdfUkVRVUVTVEVEOiAvKiBpbXBhdGllbnQgYXJlIHdlPyBmaW5lLCBzcXVhcmUgMSAqLworLQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAljYXNlIFJFUVVFU1RJTkc6CisgCWNhc2UgUkVMRUFTRUQ6CisgCQljaGFuZ2VfbGlzdGVuX21vZGUoTElTVEVOX1JBVyk7CitAQCAtMTA2NCw3ICsxMDY5LDggQEAgc3RhdGljIHZvaWQgcGVyZm9ybV9yZWxlYXNlKHVpbnQzMl90IHNlcgorIAkJYmJfaW5mb19tc2coIlVuaWNhc3RpbmcgYSByZWxlYXNlIG9mICVzIHRvICVzIiwKKyAJCQkJaW5ldF9udG9hKHRlbXBfYWRkciksIGJ1ZmZlcik7CisgCQlzZW5kX3JlbGVhc2Uoc2VydmVyX2FkZHIsIHJlcXVlc3RlZF9pcCk7IC8qIHVuaWNhc3QgKi8KKy0JCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJfQorIAliYl9pbmZvX21zZygiRW50ZXJpbmcgcmVsZWFzZWQgc3RhdGUiKTsKKyAKK0BAIC0xMjE1LDcgKzEyMjEsNyBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCS8qIE8seDogbGlzdDsgLVQsLXQsLUEgdGFrZSBudW1lcmljIHBhcmFtICovCisgCW9wdF9jb21wbGVtZW50YXJ5ID0gIk86Ong6OlQrOnQrOkErIiBJRl9VREhDUF9WRVJCT1NFKCI6dnYiKSA7CisgCUlGX0xPTkdfT1BUUyhhcHBsZXRfbG9uZ19vcHRpb25zID0gdWRoY3BjX2xvbmdvcHRzOykKKy0Jb3B0ID0gZ2V0b3B0MzIoYXJndiwgIkNWOkg6aDpGOmk6bnA6cVJyOnM6VDp0OlNBOk86b3g6ZkIiCisrCW9wdCA9IGdldG9wdDMyKGFyZ3YsICJDVjpIOmg6RjppOm5wOnFScjpzOlQ6dDpTQTpPOm94OmZCRCIKKyAJCVVTRV9GT1JfTU1VKCJiIikKKyAJCUlGX0ZFQVRVUkVfVURIQ1BDX0FSUElORygiYSIpCisgCQlJRl9GRUFUVVJFX1VESENQX1BPUlQoIlA6IikKK0BAIC0xMzE2LDYgKzEzMjIsOSBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQlsb2dtb2RlIHw9IExPR01PREVfU1lTTE9HOworIAl9CisgCisrCWlmIChvcHQgJiBPUFRfRCkKKysJCWFsbG93X2RlY29uZmlnID0gMDsKKysKKyAJLyogTWFrZSBzdXJlIGZkIDAsMSwyIGFyZSBvcGVuICovCisgCWJiX3Nhbml0aXplX3N0ZGlvKCk7CisgCS8qIEVxdWl2YWxlbnQgb2YgZG9pbmcgYSBmZmx1c2ggYWZ0ZXIgZXZlcnkgXG4gKi8KK0BAIC0xMzMwLDcgKzEzMzksOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCXNyYW5kKG1vbm90b25pY191cygpKTsKKyAKKyAJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKKy0JdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJY2hhbmdlX2xpc3Rlbl9tb2RlKExJU1RFTl9SQVcpOworIAlwYWNrZXRfbnVtID0gMDsKKyAJdGltZW91dCA9IDA7CitAQCAtMTQ4NCw3ICsxNDk0LDggQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkJCQl9CisgCQkJCS8qIFRpbWVkIG91dCwgZW50ZXIgaW5pdCBzdGF0ZSAqLworIAkJCQliYl9pbmZvX21zZygiTGVhc2UgbG9zdCwgZW50ZXJpbmcgaW5pdCBzdGF0ZSIpOworLQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQljbGllbnRfY29uZmlnLmZpcnN0X3NlY3MgPSAwOyAvKiBtYWtlIHNlY3MgZmllbGQgY291bnQgZnJvbSAwICovCisgCQkJCS8qdGltZW91dCA9IDA7IC0gYWxyZWFkeSBpcyAqLworQEAgLTE2NjcsNyArMTY3OCw4IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJCQkJCQlzZW5kX2RlY2xpbmUoLyp4aWQsKi8gc2VydmVyX2FkZHIsIHBhY2tldC55aWFkZHIpOworIAorIAkJCQkJCWlmIChzdGF0ZSAhPSBSRVFVRVNUSU5HKQorLQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQkJCWNsaWVudF9jb25maWcuZmlyc3Rfc2VjcyA9IDA7IC8qIG1ha2Ugc2VjcyBmaWVsZCBjb3VudCBmcm9tIDAgKi8KK0BAIC0xNzExLDcgKzE3MjMsOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQkJCWJiX2luZm9fbXNnKCJSZWNlaXZlZCBESENQIE5BSyIpOworIAkJCQl1ZGhjcF9ydW5fc2NyaXB0KCZwYWNrZXQsICJuYWsiKTsKKyAJCQkJaWYgKHN0YXRlICE9IFJFUVVFU1RJTkcpCistCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJc2xlZXAoMyk7IC8qIGF2b2lkIGV4Y2Vzc2l2ZSBuZXR3b3JrIHRyYWZmaWMgKi8KKyAJCQkJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2RlZmNvbmZpZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjVkZjllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA1NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBCdXN5Ym94IHZlcnNpb246IDEuMjMuMgorIyBUaHUgSnVsIDMwIDExOjAwOjAwIDIwMTUKKyMKK0NPTkZJR19IQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEJ1c3lib3ggU2V0dGluZ3MKKyMKKworIworIyBHZW5lcmFsIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0RFU0tUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRVhUUkFfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOQ0xVREVfU1VTdjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX1BPUlRBQkxFX0NPREUgaXMgbm90IHNldAorQ09ORklHX1BMQVRGT1JNX0xJTlVYPXkKK0NPTkZJR19GRUFUVVJFX0JVRkZFUlNfVVNFX01BTExPQz15CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fT05fU1RBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CVUZGRVJTX0dPX0lOX0JTUyBpcyBub3Qgc2V0CitDT05GSUdfU0hPV19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfVVNBR0U9eQorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9OT19VU1IgaXMgbm90IHNldAorIyBDT05GSUdfTE9DQUxFX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfVVNJTkdfTE9DQUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVU5JQ09ERV9JTl9FTlYgaXMgbm90IHNldAorQ09ORklHX1NVQlNUX1dDSEFSPTAKK0NPTkZJR19MQVNUX1NVUFBPUlRFRF9XQ0hBUj0wCisjIENPTkZJR19VTklDT0RFX0NPTUJJTklOR19XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9XSURFX1dDSEFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX0JJRElfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX05FVVRSQUxfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9QUkVTRVJWRV9CUk9LRU4gaXMgbm90IHNldAorIyBDT05GSUdfUEFNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VTRV9TRU5ERklMRT15CitDT05GSUdfTE9OR19PUFRTPXkKK0NPTkZJR19GRUFUVVJFX0RFVlBUUz15CisjIENPTkZJR19GRUFUVVJFX0NMRUFOX1VQIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VUTVA9eQorIyBDT05GSUdfRkVBVFVSRV9XVE1QIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1BJREZJTEU9eQorQ09ORklHX1BJRF9GSUxFX1BBVEg9Ii92YXIvcnVuIgorQ09ORklHX0ZFQVRVUkVfU1VJRD15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJRz15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJR19RVUlFVD15CisjIENPTkZJR19TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0FQUExFVFMgaXMgbm90IHNldAorQ09ORklHX0JVU1lCT1hfRVhFQ19QQVRIPSIvcHJvYy9zZWxmL2V4ZSIKK0NPTkZJR19GRUFUVVJFX1NZU0xPRz15CitDT05GSUdfRkVBVFVSRV9IQVZFX1JQQz15CisKKyMKKyMgQnVpbGQgT3B0aW9ucworIworIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRSBpcyBub3Qgc2V0CisjIENPTkZJR19OT01NVSBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9MSUJCVVNZQk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5ESVZJRFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIQVJFRF9CVVNZQk9YIGlzIG5vdCBzZXQKK0NPTkZJR19MRlM9eQorIyBDT05GSUdfQ1JPU1NfQ09NUElMRVJfUFJFRklYIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNST09UPSIiCisjIENPTkZJR19FWFRSQV9DRkxBR1MgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0xERkxBR1M9IiIKK0NPTkZJR19FWFRSQV9MRExJQlM9IiIKKworIworIyBEZWJ1Z2dpbmcgT3B0aW9ucworIworIyBDT05GSUdfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVTU0lNSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVRfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19XRVJST1IgaXMgbm90IHNldAorQ09ORklHX05PX0RFQlVHX0xJQj15CisjIENPTkZJR19ETUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGRU5DRSBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdGFsbGF0aW9uIE9wdGlvbnMgKCJtYWtlIGluc3RhbGwiIGJlaGF2aW9yKQorIworQ09ORklHX0lOU1RBTExfQVBQTEVUX1NZTUxJTktTPXkKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9TQ1JJUFRfV1JBUFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfRE9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9TWU1MSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX0hBUkRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NDUklQVF9XUkFQUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVGSVg9Ii4vX2luc3RhbGwiCisKKyMKKyMgQnVzeWJveCBMaWJyYXJ5IFR1bmluZworIworQ09ORklHX0ZFQVRVUkVfU1lTVEVNRD15CitDT05GSUdfRkVBVFVSRV9SVE1JTk1BWD15CitDT05GSUdfUEFTU1dPUkRfTUlOTEVOPTYKK0NPTkZJR19NRDVfU01BTEw9MQorQ09ORklHX1NIQTNfU01BTEw9MQorQ09ORklHX0ZFQVRVUkVfRkFTVF9UT1A9eQorIyBDT05GSUdfRkVBVFVSRV9FVENfTkVUV09SS1MgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVNFX1RFUk1JT1M9eQorQ09ORklHX0ZFQVRVUkVfRURJVElORz15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX01BWF9MRU49MTAyNAorIyBDT05GSUdfRkVBVFVSRV9FRElUSU5HX1ZJIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfSElTVE9SWT0xNQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19TQVZFSElTVE9SWT15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfU0FWRV9PTl9FWElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVWRVJTRV9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFCX0NPTVBMRVRJT049eQorQ09ORklHX0ZFQVRVUkVfVVNFUk5BTUVfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0ZBTkNZX1BST01QVD15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX05PTl9QT1NJWF9DUD15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfQ1BfTUVTU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT1BZQlVGX0tCPTQKK0NPTkZJR19GRUFUVVJFX1NLSVBfUk9PVEZTPXkKK0NPTkZJR19NT05PVE9OSUNfU1lTQ0FMTD15CitDT05GSUdfSU9DVExfSEVYMlNUUl9FUlJPUj15CitDT05GSUdfRkVBVFVSRV9IV0lCPXkKKworIworIyBBcHBsZXRzCisjCisKKyMKKyMgQXJjaGl2YWwgVXRpbGl0aWVzCisjCitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19YWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19MWk1BPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0JaMj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19HWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19aPXkKK0NPTkZJR19BUj15CisjIENPTkZJR19GRUFUVVJFX0FSX0xPTkdfRklMRU5BTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQVJfQ1JFQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOQ09NUFJFU1MgaXMgbm90IHNldAorQ09ORklHX0dVTlpJUD15CitDT05GSUdfQlVOWklQMj15CisjIENPTkZJR19VTkxaTUEgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MWk1BX0ZBU1QgaXMgbm90IHNldAorIyBDT05GSUdfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlhaIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19DUElPPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQS0cgaXMgbm90IHNldAorIyBDT05GSUdfRFBLR19ERUIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EUEtHX0RFQl9FWFRSQUNUX09OTFkgaXMgbm90IHNldAorQ09ORklHX0daSVA9eQorIyBDT05GSUdfRkVBVFVSRV9HWklQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfR1pJUF9GQVNUPTAKKyMgQ09ORklHX0xaT1AgaXMgbm90IHNldAorIyBDT05GSUdfTFpPUF9DT01QUl9ISUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQTSBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0yQ1BJTyBpcyBub3Qgc2V0CitDT05GSUdfVEFSPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9DUkVBVEU9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0FVVE9ERVRFQ1Q9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0ZST009eQorQ09ORklHX0ZFQVRVUkVfVEFSX09MREdOVV9DT01QQVRJQklMSVRZPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX09MRFNVTl9DT01QQVRJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RBUl9HTlVfRVhURU5TSU9OUz15CisjIENPTkZJR19GRUFUVVJFX1RBUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfVE9fQ09NTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9VTkFNRV9HTkFNRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQVJfTk9QUkVTRVJWRV9USU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1NFTElOVVggaXMgbm90IHNldAorQ09ORklHX1VOWklQPXkKKworIworIyBDb3JldXRpbHMKKyMKK0NPTkZJR19CQVNFTkFNRT15CitDT05GSUdfQ0FUPXkKK0NPTkZJR19EQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfREFURV9JU09GTVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EQVRFX05BTk8gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfREFURV9DT01QQVQ9eQorIyBDT05GSUdfSE9TVElEIGlzIG5vdCBzZXQKK0NPTkZJR19JRD15CitDT05GSUdfR1JPVVBTPXkKK0NPTkZJR19TSFVGPXkKK0NPTkZJR19URVNUPXkKK0NPTkZJR19GRUFUVVJFX1RFU1RfNjQ9eQorQ09ORklHX1RPVUNIPXkKK0NPTkZJR19GRUFUVVJFX1RPVUNIX05PREVSRUY9eQorQ09ORklHX0ZFQVRVUkVfVE9VQ0hfU1VTVjM9eQorQ09ORklHX1RSPXkKK0NPTkZJR19GRUFUVVJFX1RSX0NMQVNTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9UUl9FUVVJViBpcyBub3Qgc2V0CitDT05GSUdfVU5MSU5LPXkKKyMgQ09ORklHX0JBU0U2NCBpcyBub3Qgc2V0CitDT05GSUdfV0hPPXkKK0NPTkZJR19VU0VSUz15CisjIENPTkZJR19DQUwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FUViBpcyBub3Qgc2V0CitDT05GSUdfQ0hHUlA9eQorQ09ORklHX0NITU9EPXkKK0NPTkZJR19DSE9XTj15CisjIENPTkZJR19GRUFUVVJFX0NIT1dOX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ0hST09UPXkKKyMgQ09ORklHX0NLU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU0gaXMgbm90IHNldAorQ09ORklHX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DVVQ9eQorQ09ORklHX0REPXkKK0NPTkZJR19GRUFUVVJFX0REX1NJR05BTF9IQU5ETElORz15CisjIENPTkZJR19GRUFUVVJFX0REX1RISVJEX1NUQVRVU19MSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRERfSUJTX09CUyBpcyBub3Qgc2V0CitDT05GSUdfREY9eQorIyBDT05GSUdfRkVBVFVSRV9ERl9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfRElSTkFNRT15CisjIENPTkZJR19ET1MyVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYMkRPUyBpcyBub3Qgc2V0CitDT05GSUdfRFU9eQorQ09ORklHX0ZFQVRVUkVfRFVfREVGQVVMVF9CTE9DS1NJWkVfMUs9eQorQ09ORklHX0VDSE89eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfRUNITz15CitDT05GSUdfRU5WPXkKK0NPTkZJR19GRUFUVVJFX0VOVl9MT05HX09QVElPTlM9eQorIyBDT05GSUdfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRVhQUj15CitDT05GSUdfRVhQUl9NQVRIX1NVUFBPUlRfNjQ9eQorQ09ORklHX0ZBTFNFPXkKKyMgQ09ORklHX0ZPTEQgaXMgbm90IHNldAorIyBDT05GSUdfRlNZTkMgaXMgbm90IHNldAorQ09ORklHX0hFQUQ9eQorIyBDT05GSUdfRkVBVFVSRV9GQU5DWV9IRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTE49eQorQ09ORklHX0xPR05BTUU9eQorQ09ORklHX0xTPXkKK0NPTkZJR19GRUFUVVJFX0xTX0ZJTEVUWVBFUz15CitDT05GSUdfRkVBVFVSRV9MU19GT0xMT1dMSU5LUz15CitDT05GSUdfRkVBVFVSRV9MU19SRUNVUlNJVkU9eQorQ09ORklHX0ZFQVRVUkVfTFNfU09SVEZJTEVTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1RJTUVTVEFNUFM9eQorQ09ORklHX0ZFQVRVUkVfTFNfVVNFUk5BTUU9eQorQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1I9eQorIyBDT05GSUdfRkVBVFVSRV9MU19DT0xPUl9JU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19NRDVTVU09eQorQ09ORklHX01LRElSPXkKK0NPTkZJR19GRUFUVVJFX01LRElSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfTUtGSUZPPXkKK0NPTkZJR19NS05PRD15CitDT05GSUdfTVY9eQorIyBDT05GSUdfRkVBVFVSRV9NVl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTklDRSBpcyBub3Qgc2V0CitDT05GSUdfTk9IVVA9eQorQ09ORklHX09EPXkKKyMgQ09ORklHX1BSSU5URU5WIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEY9eQorQ09ORklHX1BXRD15CitDT05GSUdfUkVBRExJTks9eQorQ09ORklHX0ZFQVRVUkVfUkVBRExJTktfRk9MTE9XPXkKK0NPTkZJR19SRUFMUEFUSD15CitDT05GSUdfUk09eQorQ09ORklHX1JNRElSPXkKKyMgQ09ORklHX0ZFQVRVUkVfUk1ESVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVE9eQorIyBDT05GSUdfU0hBMVNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEEyNTZTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBNTEyU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTNTVU0gaXMgbm90IHNldAorQ09ORklHX1NMRUVQPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1NMRUVQPXkKKyMgQ09ORklHX0ZFQVRVUkVfRkxPQVRfU0xFRVAgaXMgbm90IHNldAorQ09ORklHX1NPUlQ9eQorQ09ORklHX0ZFQVRVUkVfU09SVF9CSUc9eQorIyBDT05GSUdfU1BMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TUExJVF9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfU1RBVD15CitDT05GSUdfRkVBVFVSRV9TVEFUX0ZPUk1BVD15CitDT05GSUdfU1RUWT15CisjIENPTkZJR19TVU0gaXMgbm90IHNldAorQ09ORklHX1NZTkM9eQorIyBDT05GSUdfVEFDIGlzIG5vdCBzZXQKK0NPTkZJR19UQUlMPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1RBSUw9eQorQ09ORklHX1RFRT15CisjIENPTkZJR19GRUFUVVJFX1RFRV9VU0VfQkxPQ0tfSU8gaXMgbm90IHNldAorQ09ORklHX1RSVUU9eQorQ09ORklHX1RUWT15CitDT05GSUdfVU5BTUU9eQorIyBDT05GSUdfVU5FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VTkVYUEFORF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX1VOSVE9eQorQ09ORklHX1VTTEVFUD15CisjIENPTkZJR19VVURFQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19VVUVOQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfV0M9eQorIyBDT05GSUdfRkVBVFVSRV9XQ19MQVJHRSBpcyBub3Qgc2V0CitDT05GSUdfV0hPQU1JPXkKK0NPTkZJR19ZRVM9eQorCisjCisjIENvbW1vbiBvcHRpb25zCisjCitDT05GSUdfRkVBVFVSRV9WRVJCT1NFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgY3AgYW5kIG12CisjCisjIENPTkZJR19GRUFUVVJFX1BSRVNFUlZFX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGxzLCBtb3JlIGFuZCB0ZWxuZXQKKyMKK0NPTkZJR19GRUFUVVJFX0FVVE9XSURUSD15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGRmLCBkdSwgbHMKKyMKK0NPTkZJR19GRUFUVVJFX0hVTUFOX1JFQURBQkxFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbWQ1c3VtLCBzaGExc3VtLCBzaGEyNTZzdW0sIHNoYTUxMnN1bSwgc2hhM3N1bQorIworQ09ORklHX0ZFQVRVUkVfTUQ1X1NIQTFfU1VNX0NIRUNLPXkKKworIworIyBDb25zb2xlIFV0aWxpdGllcworIworQ09ORklHX0NIVlQ9eQorIyBDT05GSUdfRkdDT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19DTEVBUj15CitDT05GSUdfREVBTExPQ1ZUPXkKK0NPTkZJR19EVU1QS01BUD15CisjIENPTkZJR19LQkRfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfTE9BREZPTlQ9eQorQ09ORklHX0xPQURLTUFQPXkKK0NPTkZJR19PUEVOVlQ9eQorQ09ORklHX1JFU0VUPXkKKyMgQ09ORklHX1JFU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFU0laRV9QUklOVCBpcyBub3Qgc2V0CitDT05GSUdfU0VUQ09OU09MRT15CisjIENPTkZJR19GRUFUVVJFX1NFVENPTlNPTEVfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEZPTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRVRGT05UX1RFWFRVQUxfTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFVEZPTlRfRElSPSIiCisjIENPTkZJR19TRVRLRVlDT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRMT0dDT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIT1dLRVkgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBsb2FkZm9udCBhbmQgc2V0Zm9udAorIworIyBDT05GSUdfRkVBVFVSRV9MT0FERk9OVF9QU0YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTE9BREZPTlRfUkFXIGlzIG5vdCBzZXQKKworIworIyBEZWJpYW4gVXRpbGl0aWVzCisjCitDT05GSUdfTUtURU1QPXkKKyMgQ09ORklHX1BJUEVfUFJPR1JFU1MgaXMgbm90IHNldAorQ09ORklHX1JVTl9QQVJUUz15CitDT05GSUdfRkVBVFVSRV9SVU5fUEFSVFNfTE9OR19PUFRJT05TPXkKKyMgQ09ORklHX0ZFQVRVUkVfUlVOX1BBUlRTX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFSVF9TVE9QX0RBRU1PTj15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9GQU5DWT15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9MT05HX09QVElPTlM9eQorQ09ORklHX1dISUNIPXkKKworIworIyBFZGl0b3JzCisjCitDT05GSUdfQVdLPXkKK0NPTkZJR19GRUFUVVJFX0FXS19MSUJNPXkKK0NPTkZJR19GRUFUVVJFX0FXS19HTlVfRVhURU5TSU9OUz15CitDT05GSUdfQ01QPXkKK0NPTkZJR19ESUZGPXkKKyMgQ09ORklHX0ZFQVRVUkVfRElGRl9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRElGRl9ESVI9eQorIyBDT05GSUdfRUQgaXMgbm90IHNldAorQ09ORklHX1BBVENIPXkKK0NPTkZJR19TRUQ9eQorQ09ORklHX1ZJPXkKK0NPTkZJR19GRUFUVVJFX1ZJX01BWF9MRU49MTAyNAorQ09ORklHX0ZFQVRVUkVfVklfOEJJVD15CitDT05GSUdfRkVBVFVSRV9WSV9DT0xPTj15CitDT05GSUdfRkVBVFVSRV9WSV9ZQU5LTUFSSz15CitDT05GSUdfRkVBVFVSRV9WSV9TRUFSQ0g9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9SRUdFWF9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVVNFX1NJR05BTFM9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9ET1RfQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9TRVRPUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1dJTl9SRVNJWkU9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVU5ETz15CitDT05GSUdfRkVBVFVSRV9WSV9VTkRPX1FVRVVFPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1VORE9fUVVFVUVfTUFYPTI1NgorQ09ORklHX0ZFQVRVUkVfQUxMT1dfRVhFQz15CisKKyMKKyMgRmluZGluZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19GSU5EPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUFJJTlQwPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTVRJTUU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NTUlOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEVSTT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1RZUEU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9YREVWPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTUFYREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ORVdFUj15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfSU5VTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GSU5EX0VYRUM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9FWEVDX1BMVVM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9VU0VSPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfR1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfRklORF9OT1Q9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ERVBUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BBUkVOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfU0laRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSVU5FPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9ERUxFVEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9QQVRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUkVHRVg9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0NPTlRFWFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0xJTktTIGlzIG5vdCBzZXQKK0NPTkZJR19HUkVQPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRUdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9GR1JFUF9BTElBUz15CitDT05GSUdfRkVBVFVSRV9HUkVQX0NPTlRFWFQ9eQorQ09ORklHX1hBUkdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9DT05GSVJNQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1FVT1RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfVEVSTU9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfWkVST19URVJNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfUkVQTF9TVFI9eQorCisjCisjIEluaXQgVXRpbGl0aWVzCisjCisjIENPTkZJR19CT09UQ0hBUlREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQk9PVENIQVJURF9CTE9BVEVEX0hFQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JPT1RDSEFSVERfQ09ORklHX0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBTFQ9eQorIyBDT05GSUdfRkVBVFVSRV9DQUxMX1RFTElOSVQgaXMgbm90IHNldAorQ09ORklHX1RFTElOSVRfUEFUSD0iIgorIyBDT05GSUdfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VTRV9JTklUVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfS0lMTF9SRU1PVkVEIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0tJTExfREVMQVk9MAorIyBDT05GSUdfRkVBVFVSRV9JTklUX1NDVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FWFRSQV9RVUlFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRfQ09SRURVTVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUX1RFUk1JTkFMX1RZUEU9IiIKK0NPTkZJR19NRVNHPXkKKyMgQ09ORklHX0ZFQVRVUkVfTUVTR19FTkFCTEVfT05MWV9HUk9VUCBpcyBub3Qgc2V0CisKKyMKKyMgTG9naW4vUGFzc3dvcmQgTWFuYWdlbWVudCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0FERF9TSEVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRU1PVkVfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFET1dQQVNTV0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9QV0RfR1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9TSEFET1cgaXMgbm90IHNldAorQ09ORklHX1VTRV9CQl9DUllQVD15CisjIENPTkZJR19VU0VfQkJfQ1JZUFRfU0hBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FERFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX05BTUVTIGlzIG5vdCBzZXQKK0NPTkZJR19MQVNUX0lEPTYwMDAwCitDT05GSUdfRklSU1RfU1lTVEVNX0lEPTEwMAorQ09ORklHX0xBU1RfU1lTVEVNX0lEPTk5OQorIyBDT05GSUdfQURER1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERHUk9VUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX1RPX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVMR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERUxfVVNFUl9GUk9NX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOX1NFU1NJT05fQVNfQ0hJTEQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU5fU0NSSVBUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05PTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRUNVUkVUVFkgaXMgbm90IHNldAorIyBDT05GSUdfUEFTU1dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUEFTU1dEX1dFQUtfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRQVyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFBBU1NXRCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9ERUZBVUxUX1BBU1NXRF9BTEdPPSIiCisjIENPTkZJR19TVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX0NIRUNLU19TSEVMTFMgaXMgbm90IHNldAorIyBDT05GSUdfU1VMT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggRXh0MiBGUyBQcm9ncworIworQ09ORklHX0NIQVRUUj15CitDT05GSUdfRlNDSz15CisjIENPTkZJR19MU0FUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVFVORTJGUyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggTW9kdWxlIFV0aWxpdGllcworIworIyBDT05GSUdfTU9ESU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RQUk9CRV9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX09QVElPTlNfT05fQ01ETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX0NIRUNLX0FMUkVBRFlfTE9BREVEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNNT0Q9eQorQ09ORklHX1JNTU9EPXkKK0NPTkZJR19MU01PRD15CisjIENPTkZJR19GRUFUVVJFX0xTTU9EX1BSRVRUWV8yXzZfT1VUUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RQUk9CRT15CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX0JMQUNLTElTVCBpcyBub3Qgc2V0CitDT05GSUdfREVQTU9EPXkKKworIworIyBPcHRpb25zIGNvbW1vbiB0byBtdWx0aXBsZSBtb2R1dGlscworIworIyBDT05GSUdfRkVBVFVSRV8yXzRfTU9EVUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9UUllfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9WRVJTSU9OX0NIRUNLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0tTWU1PT1BTX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRElOS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUF9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NIRUNLX1RBSU5URURfTU9EVUxFPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX1NZTUJPTFM9eQorQ09ORklHX0RFRkFVTFRfTU9EVUxFU19ESVI9Ii9saWIvbW9kdWxlcyIKK0NPTkZJR19ERUZBVUxUX0RFUE1PRF9GSUxFPSJtb2R1bGVzLmRlcCIKKworIworIyBMaW51eCBTeXN0ZW0gVXRpbGl0aWVzCisjCisjIENPTkZJR19CTE9DS0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19GQVRBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19GU1RSSU09eQorIyBDT05GSUdfTURFViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfUkVOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9SRU5BTUVfUkVHRVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9FWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9MT0FEX0ZJUk1XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFViBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FDUElEX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JMS0lEX1RZUEUgaXMgbm90IHNldAorQ09ORklHX0RNRVNHPXkKK0NPTkZJR19GRUFUVVJFX0RNRVNHX1BSRVRUWT15CitDT05GSUdfRkJTRVQ9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfUkVBRE1PREU9eQorIyBDT05GSUdfRkRGTFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GREZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfRkRJU0s9eQorIyBDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GRElTS19XUklUQUJMRT15CisjIENPTkZJR19GRUFUVVJFX0FJWF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NHSV9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVTl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX09TRl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dQVF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZESVNLX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJTkRGUyBpcyBub3Qgc2V0CitDT05GSUdfRkxPQ0s9eQorIyBDT05GSUdfRlJFRVJBTURJU0sgaXMgbm90IHNldAorIyBDT05GSUdfRlNDS19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX0VYVDIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01JTklYMiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1JFSVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1ZGQVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VUT1BUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkcgaXMgbm90IHNldAorQ09ORklHX0hFWERVTVA9eQorIyBDT05GSUdfRkVBVFVSRV9IRVhEVU1QX1JFVkVSU0UgaXMgbm90IHNldAorIyBDT05GSUdfSEQgaXMgbm90IHNldAorQ09ORklHX0hXQ0xPQ0s9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19BREpUSU1FX0ZIUz15CisjIENPTkZJR19JUENSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENTIGlzIG5vdCBzZXQKK0NPTkZJR19MT1NFVFVQPXkKKyMgQ09ORklHX0xTUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19NS1NXQVA9eQorIyBDT05GSUdfRkVBVFVSRV9NS1NXQVBfVVVJRCBpcyBub3Qgc2V0CitDT05GSUdfTU9SRT15CitDT05GSUdfTU9VTlQ9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9GQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9MQUJFTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NT1VOVF9ORlM9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZMQUdTPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZTVEFCPXkKK0NPTkZJR19QSVZPVF9ST09UPXkKK0NPTkZJR19SREFURT15CisjIENPTkZJR19SREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURQUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ1dBS0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NSSVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUklQVFJFUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQT05PRkY9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX0RJU0NBUkQ9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX1BSST15CitDT05GSUdfU1dJVENIX1JPT1Q9eQorQ09ORklHX1VNT1VOVD15CitDT05GSUdfRkVBVFVSRV9VTU9VTlRfQUxMPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbW91bnQvdW1vdW50CisjCitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xPT1BfQ1JFQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVRBQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPTFVNRUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQlRSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWEZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0YyRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9IRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9JU085NjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhTV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTFVLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX05JTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTlRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX09DRlMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfUkVJU0VSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9ST01GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1lTViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1VERiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1hGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0NPTlNQWSBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NST05EX0QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9DQUxMX1NFTkRNQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NST05EX0RJUj0iIgorQ09ORklHX0xFU1M9eQorQ09ORklHX0ZFQVRVUkVfTEVTU19NQVhMSU5FUz05OTk5OTk5CitDT05GSUdfRkVBVFVSRV9MRVNTX0JSQUNLRVRTPXkKK0NPTkZJR19GRUFUVVJFX0xFU1NfRkxBR1M9eQorIyBDT05GSUdfRkVBVFVSRV9MRVNTX01BUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19SRUdFWFAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX1dJTkNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0RBU0hDTUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0xJTkVOVU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTkRXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU5ERFVNUCBpcyBub3Qgc2V0CitDT05GSUdfUkZLSUxMPXkKKyMgQ09ORklHX1NFVFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFTS1NFVF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19VQklBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJREVUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSU1LVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJNVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJTVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVVQREFURVZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESlRJTUVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfQkJDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfQkVFUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9CRUVQX0ZSRVE9MAorQ09ORklHX0ZFQVRVUkVfQkVFUF9MRU5HVEhfTVM9MAorIyBDT05GSUdfQ0hBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfTk9GQUlMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9UVFlfSElGSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfSU1QTElDSVRfQ1IgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NXQUxMT1dfT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfU0VORF9FU0NBUEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9WQVJfQUJPUlRfTEVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9DTFJfQUJPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9OVEFCIGlzIG5vdCBzZXQKK0NPTkZJR19EQz15CisjIENPTkZJR19GRUFUVVJFX0RDX0xJQk0gaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9NT0RMT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9GR19OUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RFVkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVk1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19FSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VKRUNUX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfRkJTUExBU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hDUCBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9FUkFTRUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19JT05JQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWUQgaXMgbm90IHNldAorIyBDT05GSUdfTEFTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xBU1RfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MQVNUX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEUEFSTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9HRVRfSURFTlRJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19TQ0FOX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19VTlJFR0lTVEVSX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19EUklWRV9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1RSSVNUQVRFX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19HRVRTRVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BS0VERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUFLRURFVlNfTEVBRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01BS0VERVZTX1RBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BTiBpcyBub3Qgc2V0CitDT05GSUdfTUlDUk9DT009eQorIyBDT05GSUdfTU9VTlRQT0lOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlEQVVUT1JVTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFEQUhFQUQgaXMgbm90IHNldAorIyBDT05GSUdfUlVOTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfUlggaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0lEIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJTkdTPXkKK0NPTkZJR19USU1FPXkKKyMgQ09ORklHX1RJTUVPVVQgaXMgbm90IHNldAorIyBDT05GSUdfVFRZU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIFV0aWxpdGllcworIworIyBDT05GSUdfTkFNRUlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkFNRUlGX0VYVEVOREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05CRENMSUVOVCBpcyBub3Qgc2V0CitDT05GSUdfTkM9eQorIyBDT05GSUdfTkNfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DX0VYVFJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DXzExMF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX1BJTkc9eQorQ09ORklHX1BJTkc2PXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1BJTkc9eQorIyBDT05GSUdfV0hPSVMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSVBWNj15CisjIENPTkZJR19GRUFUVVJFX1VOSVhfTE9DQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0lQVjRfQUREUkVTUz15CisjIENPTkZJR19WRVJCT1NFX1JFU09MVVRJT05fRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlJDVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CUkNUTF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX1NIT1cgaXMgbm90IHNldAorIyBDT05GSUdfRE5TRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUl9XQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBS0VJREVOVEQgaXMgbm90IHNldAorIyBDT05GSUdfRlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUF9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUERfQUNDRVBUX0JST0tFTl9MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQX0FVVEhFTlRJQ0FUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUEdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBQVVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBHRVRQVVRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUTkFNRT15CisjIENPTkZJR19IVFRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1NFVFVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0JBU0lDX0FVVEggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9BVVRIX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NHSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NPTkZJR19XSVRIX1NDUklQVF9JTlRFUlBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUX1JFTU9URV9QT1JUX1RPX0VOViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0VOQ09ERV9VUkxfU1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRVJST1JfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9QUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0daSVAgaXMgbm90IHNldAorQ09ORklHX0lGQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NUQVRVUz15CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19NRU1TVEFSVF9JT0FERFJfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX0hXPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfQlJPQURDQVNUX1BMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSUZFTlNMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGUExVR0QgaXMgbm90IHNldAorQ09ORklHX0lGVVBET1dOPXkKK0NPTkZJR19JRlVQRE9XTl9JRlNUQVRFX1BBVEg9Ii92YXIvcnVuL2lmc3RhdGUiCisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBfQlVJTFRJTiBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JRkNPTkZJR19CVUlMVElOPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjQ9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNj15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9NQVBQSU5HPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0VYVEVSTkFMX0RIQ1A9eQorIyBDT05GSUdfSU5FVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9ESVNDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fREFZVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9DSEFSR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19JUD15CitDT05GSUdfRkVBVFVSRV9JUF9BRERSRVNTPXkKK0NPTkZJR19GRUFUVVJFX0lQX0xJTks9eQorQ09ORklHX0ZFQVRVUkVfSVBfUk9VVEU9eQorQ09ORklHX0ZFQVRVUkVfSVBfVFVOTkVMPXkKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQX1NIT1JUX0ZPUk1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUkFSRV9QUk9UT0NPTFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBBRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENBTEMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRTVEFUPXkKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9XSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9QUkcgaXMgbm90IHNldAorQ09ORklHX05TTE9PS1VQPXkKKyMgQ09ORklHX05UUEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OVFBEX1NFUlZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05UUERfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19QU0NBTiBpcyBub3Qgc2V0CitDT05GSUdfUk9VVEU9eQorIyBDT05GSUdfU0xBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVENQU1ZEIGlzIG5vdCBzZXQKK0NPTkZJR19URUxORVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URUxORVRfVFRZUEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEVMTkVUX0FVVE9MT0dJTj15CisjIENPTkZJR19URUxORVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9JTkVURF9XQUlUIGlzIG5vdCBzZXQKK0NPTkZJR19URlRQPXkKKyMgQ09ORklHX1RGVFBEIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgdGZ0cC90ZnRwZAorIworQ09ORklHX0ZFQVRVUkVfVEZUUF9HRVQ9eQorQ09ORklHX0ZFQVRVUkVfVEZUUF9QVVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URlRQX0JMT0NLU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RGVFBfUFJPR1JFU1NfQkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RGVFBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUk9VVEU9eQorIyBDT05GSUdfVFJBQ0VST1VURTYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1NPVVJDRV9ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfVVNFX0lDTVAgaXMgbm90IHNldAorIyBDT05GSUdfVFVOQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFVOQ1RMX1VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VESENQQzYgaXMgbm90IHNldAorQ09ORklHX1VESENQRD15CisjIENPTkZJR19ESENQUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0RVTVBMRUFTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfV1JJVEVfTEVBU0VTX0VBUkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BEX0JBU0VfSVBfT05fTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19ESENQRF9MRUFTRVNfRklMRT0iL3Zhci9saWIvbWlzYy91ZGhjcGQubGVhc2VzIgorQ09ORklHX1VESENQQz15CitDT05GSUdfRkVBVFVSRV9VREhDUENfQVJQSU5HPXkKK0NPTkZJR19GRUFUVVJFX1VESENQQ19TQU5JVElaRU9QVD15CisjIENPTkZJR19GRUFUVVJFX1VESENQX1BPUlQgaXMgbm90IHNldAorQ09ORklHX1VESENQX0RFQlVHPTAKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfUkZDMzM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VESENQXzgwMjFRIGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUENfREVGQVVMVF9TQ1JJUFQ9Ii91c3Ivc2hhcmUvdWRoY3BjL2RlZmF1bHQuc2NyaXB0IgorQ09ORklHX1VESENQQ19TTEFDS19GT1JfQlVHR1lfU0VSVkVSUz04MAorQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iCisjIENPTkZJR19VRFBTVkQgaXMgbm90IHNldAorIyBDT05GSUdfVkNPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfV0dFVD15CitDT05GSUdfRkVBVFVSRV9XR0VUX1NUQVRVU0JBUj15CitDT05GSUdfRkVBVFVSRV9XR0VUX0FVVEhFTlRJQ0FUSU9OPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfTE9OR19PUFRJT05TPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfVElNRU9VVD15CisjIENPTkZJR19aQ0lQIGlzIG5vdCBzZXQKKworIworIyBQcmludCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0xQRCBpcyBub3Qgc2V0CisjIENPTkZJR19MUFIgaXMgbm90IHNldAorIyBDT05GSUdfTFBRIGlzIG5vdCBzZXQKKworIworIyBNYWlsIFV0aWxpdGllcworIworIyBDT05GSUdfTUFLRU1JTUUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTUlNRV9DSEFSU0VUPSIiCisjIENPTkZJR19QT1BNQUlMRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUE9QTUFJTERJUl9ERUxJVkVSWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUZPUk1JTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRUZPUk1JTUVfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTkRNQUlMIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzIFV0aWxpdGllcworIworIyBDT05GSUdfSU9TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVBTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NRVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19QV0RYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNRU1DQVAgaXMgbm90IHNldAorQ09ORklHX1RPUD15CitDT05GSUdfRkVBVFVSRV9UT1BfQ1BVX1VTQUdFX1BFUkNFTlRBR0U9eQorQ09ORklHX0ZFQVRVUkVfVE9QX0NQVV9HTE9CQUxfUEVSQ0VOVFM9eQorIyBDT05GSUdfRkVBVFVSRV9UT1BfU01QX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9ERUNJTUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9TTVBfUFJPQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVVBUSU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVVBUSU1FX1VUTVBfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRlJFRT15CitDT05GSUdfRlVTRVI9eQorQ09ORklHX0tJTEw9eQorQ09ORklHX0tJTExBTEw9eQorIyBDT05GSUdfS0lMTEFMTDUgaXMgbm90IHNldAorIyBDT05GSUdfUEdSRVAgaXMgbm90IHNldAorQ09ORklHX1BJRE9GPXkKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfU0lOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfT01JVCBpcyBub3Qgc2V0CisjIENPTkZJR19QS0lMTCBpcyBub3Qgc2V0CitDT05GSUdfUFM9eQorQ09ORklHX0ZFQVRVUkVfUFNfV0lERT15CitDT05GSUdfRkVBVFVSRV9QU19MT05HPXkKKyMgQ09ORklHX0ZFQVRVUkVfUFNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX0FERElUSU9OQUxfQ09MVU1OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX1VOVVNVQUxfU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfUkVOSUNFPXkKK0NPTkZJR19CQl9TWVNDVEw9eQorIyBDT05GSUdfRkVBVFVSRV9TSE9XX1RIUkVBRFMgaXMgbm90IHNldAorQ09ORklHX1dBVENIPXkKKworIworIyBSdW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX1JVTlNWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlNWRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUlVOU1ZESVJfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NWIGlzIG5vdCBzZXQKK0NPTkZJR19TVl9ERUZBVUxUX1NFUlZJQ0VfRElSPSIiCisjIENPTkZJR19TVkxPR0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0VUVUlER0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVlVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZESVIgaXMgbm90IHNldAorIyBDT05GSUdfU09GVExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hDT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfR0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQURfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVENIUEFUSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNUT1JFQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTkNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTkNPTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VMSU5VWEVOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VURU5GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZJTEVTX0NIRUNLX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRTRUJPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0VTVEFUVVMgaXMgbm90IHNldAorCisjCisjIFNoZWxscworIworQ09ORklHX0FTSD15CitDT05GSUdfQVNIX0JBU0hfQ09NUEFUPXkKKyMgQ09ORklHX0FTSF9JRExFX1RJTUVPVVQgaXMgbm90IHNldAorQ09ORklHX0FTSF9KT0JfQ09OVFJPTD15CitDT05GSUdfQVNIX0FMSUFTPXkKK0NPTkZJR19BU0hfR0VUT1BUUz15CitDT05GSUdfQVNIX0JVSUxUSU5fRUNITz15CitDT05GSUdfQVNIX0JVSUxUSU5fUFJJTlRGPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9URVNUPXkKK0NPTkZJR19BU0hfSEVMUD15CisjIENPTkZJR19BU0hfQ01EQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTSF9NQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfQVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfRVhQQU5EX1BSTVQ9eQorIyBDT05GSUdfQ1RUWUhBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JBU0hfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQlJBQ0VfRVhQQU5TSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSEVMUCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lOVEVSQUNUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfU0FWRUhJU1RPUlkgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9KT0IgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9USUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSUYgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0NBU0UgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9GVU5DVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRVhQT1JUX04gaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9NT0RFX1ggaXMgbm90IHNldAorIyBDT05GSUdfTVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15CisjIENPTkZJR19GRUFUVVJFX1NIX0lTX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19BU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CQVNIX0lTX0hVU0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19OT05FPXkKK0NPTkZJR19TSF9NQVRIX1NVUFBPUlQ9eQorIyBDT05GSUdfU0hfTUFUSF9TVVBQT1JUXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0VYVFJBX1FVSUVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIX05PRk9SSyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9ISVNURklMRVNJWkU9eQorCisjCisjIFN5c3RlbSBMb2dnaW5nIFV0aWxpdGllcworIworQ09ORklHX1NZU0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEU9eQorQ09ORklHX0ZFQVRVUkVfUkVNT1RFX0xPRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0RVUD15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX1JFQURfQlVGRkVSX1NJWkU9MjU2CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0dfQlVGRkVSX1NJWkU9NjQKK0NPTkZJR19MT0dSRUFEPXkKK0NPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HPXkKK0NPTkZJR19GRUFUVVJFX0tNU0dfU1lTTE9HPXkKK0NPTkZJR19LTE9HRD15CisKKyMKKyMga2xvZ2Qgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggc3lzbG9nIHRvIGtlcm5lbCBwcmludGsgYnVmZmVyCisjCitDT05GSUdfRkVBVFVSRV9LTE9HRF9LTE9HQ1RMPXkKK0NPTkZJR19MT0dHRVI9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZmFpbF9vbl9ub19tZWRpYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0NWYxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBjdXJyZW50IGJlaGF2aW91ciBvZiBidXN5Ym94IGlzIHRvIHRyeSBhbGwgZnN0eXBlIHdoZW4gYXV0b21vdW50aW5nCitldmVuIHdoZW4gbm8gbWVkaWEgZXhpc3RzLiAgVGhlIHV0aWwtbGludXggbW91bnQgY29tbWFuZCBiYWlscyB3aGVuIG5vCittZWRpYSBleGlzdHMsIHNvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIGJ1c3lib3ggdG8gZG8gdGhlIHNhbWUuCisKK0l0IGNvdWxkIGFsc28gYmUgYXJndWVkIHRoYXQgdGhlIEtFUk5fSU5GTyBtZXNzYWdlIGZyb20gYnRyZnMgY291bGQgYmUKK3JlbW92ZWQsIGJ1dCB0aGF0IHdvdWxkIGJlIGhhcmRlciB0byBhY2NvbXBsaXNoLgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGJ1c3lib3gtMS4yMC4yL3V0aWwtbGludXgvbW91bnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4yMC4yLm9yaWcvdXRpbC1saW51eC9tb3VudC5jCisrKysgYnVzeWJveC0xLjIwLjIvdXRpbC1saW51eC9tb3VudC5jCitAQCAtNTk4LDcgKzU5OCwxMyBAQCBzdGF0aWMgaW50IG1vdW50X2l0X25vdyhzdHJ1Y3QgbW50ZW50ICptCisgCQkJCWJyZWFrOworIAkJCWVycm5vID0gZXJybm9fc2F2ZTsKKyAJCX0KKy0KKysJCS8qCisrCQkgKiBCcmVhayBpZiB0aGVyZSBpcyBubyBtZWRpYSwgbm8gcG9pbnQgcmV0cnlpbmcgZm9yIGFsbAorKwkJICogZnMgdHlwZXMgc2luY2UgdGhlcmUgaXMgbm8gbWVkaWEgYXZhaWxhYmxlCisrCQkgKi8KKysJCWlmIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFTk9NRURJVU0pIHsKKysJCQliYl9wZXJyb3JfbXNnX2FuZF9kaWUoIm1vdW50aW5nICVzIG9uICVzIGZhaWxlZCIsIG1wLT5tbnRfZnNuYW1lLCBtcC0+bW50X2Rpcik7CisrCQl9CisgCQlpZiAoIXJjIHx8ICh2ZnNmbGFncyAmIE1TX1JET05MWSkgfHwgKGVycm5vICE9IEVBQ0NFUyAmJiBlcnJubyAhPSBFUk9GUykpCisgCQkJYnJlYWs7CisgCQlpZiAoISh2ZnNmbGFncyAmIE1TX1NJTEVOVCkpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldF9oZWFkZXJfdGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTI4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBjb3B5IGNvbW1pdCBtZXNzYWdlIGZyb20gT0UgYXMgdGhlIHBhdGNoIGNvbW1lbnQ6CisjICAgIGNvbW1pdCA1YTBlMWQ0NzNjYTdhY2E1ZmZlZmZmZTlhMmVjNDRhZTdhMWYzNWJjCisjICAgIEF1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzIDxmcmFuc21ldWxlbmJyb2Vrc0BnbWFpbC5jb20+CisjICAgIERhdGU6ICAgV2VkIEZlYiAxMSAyMjo0MDoyMSAyMDA5ICswMTAwCisjCisjICAgIGJ1c3lib3g6IGZpeCB0YXIgcHJvYmxlbSB3aXRoIGZpbGVuYW1lcyB0aGF0IGFyZSBleGFjdGx5IDEwMCBieXRlcworIworIyBhYm92ZSBjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0wNgorCistLS0gYnVzeWJveC0xLjEzLjIvYXJjaGl2YWwvbGliYXJjaGl2ZS9nZXRfaGVhZGVyX3Rhci5jLm9yaWcJMjAwOC0xMS0wOSAxODoyODowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBidXN5Ym94LTEuMTMuMi9hcmNoaXZhbC9saWJhcmNoaXZlL2dldF9oZWFkZXJfdGFyLmMJMjAwOS0wMi0xMSAyMjozNDo1Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTIsNiArMjUyLDggQEAKKyAJCQlmaWxlX2hlYWRlci0+bmFtZSA9IGNvbmNhdF9wYXRoX2ZpbGUodGFyLnByZWZpeCwgdGFyLm5hbWUpOworIAkJfSBlbHNlCisgCQkJZmlsZV9oZWFkZXItPm5hbWUgPSB4c3RyZHVwKHRhci5uYW1lKTsKKysJCWlmIChzdHJsZW4oZmlsZV9oZWFkZXItPm5hbWUpID4gMTAwKSAKKysJCQlmaWxlX2hlYWRlci0+bmFtZVsxMDBdID0gMDsKKyAJfQorIAorIAkvKiBTZXQgYml0cyAxMi0xNSBvZiB0aGUgZmlsZXMgbW9kZSAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRvcHRzLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGIwYTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcKQEAgLTAsMCArMSwzIEBACitDT05GSUdfR0VUT1BUPXkKK0NPTkZJR19MT05HX09QVFM9eQorQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkc9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbG9naW4tdXRpbGl0aWVzLmNmZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5YjJkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcKQEAgLTAsMCArMSwxMyBAQAorQ09ORklHX0ZFQVRVUkVfU0hBRE9XUEFTU1dEUz15CitDT05GSUdfQUREVVNFUj15CitDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfQURER1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfQURER1JPVVBfTE9OR19PUFRJT05TPXkKK0NPTkZJR19ERUxVU0VSPXkKK0NPTkZJR19ERUxHUk9VUD15CitDT05GSUdfR0VUVFk9eQorQ09ORklHX0xPR0lOPXkKK0NPTkZJR19QQVNTV0Q9eQorQ09ORklHX1NVPXkKK0NPTkZJR19TVUxPR0lOPXkKK0NPTkZJR19WTE9DSz15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tb3VudC12aWEtbGFiZWwuY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU3YWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZwpAQCAtMCwwICsxLDkgQEAKK0NPTkZJR19CTEtJRD15CitDT05GSUdfRkVBVFVSRV9CTEtJRF9UWVBFPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xBQkVMPXkKK0NPTkZJR19WT0xVTUVJRD15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9CVFJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWFQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRjJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1FVQVNIRlM9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MmM3NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVGhpcyBhZGRzIGNvbm5tYW5kIHRvIHRoZSBsaXN0IG9mIGtub3cgZGhjcCBjbGllbnRzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZV0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYnVzeWJveC0xLjIyLjEvbmV0d29ya2luZy9pZnVwZG93bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIyLjEub3JpZy9uZXR3b3JraW5nL2lmdXBkb3duLmMKKysrKyBidXN5Ym94LTEuMjIuMS9uZXR3b3JraW5nL2lmdXBkb3duLmMKK0BAIC01MjEsNiArNTIxLDEwIEBAIHN0cnVjdCBkaGNwX2NsaWVudF90IHsKKyB9OworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGhjcF9jbGllbnRfdCBleHRfZGhjcF9jbGllbnRzW10gPSB7CisrCXsgImNvbm5tYW5kIiwKKysJCSJ0cnVlIiwKKysJCSJ0cnVlIiwKKysJfSwKKyAJeyAiZGhjcGNkIiwKKyAJCSJkaGNwY2RbWyAtaCAlaG9zdG5hbWUlXV1bWyAtaSAldmVuZG9yJV1dW1sgLUkgJWNsaWVudCVdXVtbIC1sICVsZWFzZXRpbWUlXV0gJWlmYWNlJSIsCisgCQkiZGhjcGNkIC1rICVpZmFjZSUiLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9zaGExc3VtLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGU3MmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTFTVU09eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMjU2c3VtLmNmZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U2NTJhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTI1NlNVTT15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjIzLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8xLjIzLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkOWY5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XzEuMjMuMi5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGJ1c3lib3guaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5idXN5Ym94Lm5ldC9kb3dubG9hZHMvYnVzeWJveC0ke1BWfS50YXIuYnoyO25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL2dldG9wdHMuY2ZnIFwKKyIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNzkyNTY4M2Q3ZGQxMDVhYWJlOWI2YjYxOGQ0OGNjNzMiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICIwNWE2ZjllMjFhYWQ4YzA5OGUzODhhZTc3ZGU3YjIzNjE5NDFhZmE3MTU3ZWY3NDIxNjcwMzM5NWIxNGUzMTlhIgorCitFWFRSQV9PRU1BS0UgKz0gIlY9MSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBTS0lQX1NUUklQPXkiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgICBjcCAtciAke0J9L3Rlc3RzdWl0ZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAgY3AgJHtCfS8uY29uZmlnICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGxuIC1zIC9iaW4vYnVzeWJveCAgICR7RH0ke1BURVNUX1BBVEh9L2J1c3lib3gKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGU3MmY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfZ2l0LmJiCkBAIC0wLDAgKzEsNTQgQEAKK3JlcXVpcmUgYnVzeWJveC5pbmMKKworU1JDUkVWID0gImJlOTQ3YzRkOTdjMGRhY2I3MDNhNmYyNGRkODEzZmY2ZGQzYTMzYjYiCisjIExvb2tvdXQgZm9yIFBWIGJ1bXAgdG9vIHdoZW4gU1JDUkVWIGlzIGNoYW5nZWQKK1BWID0gIjEuMjMuMitnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9idXN5Ym94Lm5ldC9idXN5Ym94LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyIKKworRVhUUkFfT0VNQUtFICs9ICJWPTEgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gU0tJUF9TVFJJUD15IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgICAgICAgY3AgLXIgJHtCfS90ZXN0c3VpdGUgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGNwICR7Qn0vLmNvbmZpZyAgICAgICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICBsbiAtcyAvYmluL2J1c3lib3ggICAke0R9JHtQVEVTVF9QQVRIfS9idXN5Ym94Cit9CisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWNyb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwZTZiMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9jcm9uZAorTkFNRT1jcm9uZAorREVTQz0iQnVzeWJveCBQZXJpb2RpYyBDb21tYW5kIFNjaGVkdWxlciIKK0FSR1M9Ii1jIC9ldGMvY3Jvbi9jcm9udGFicyIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAtbiAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzgzNDhlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9odHRwZAorTkFNRT1odHRwZAorREVTQz0iQnVzeWJveCBIVFRQIERhZW1vbiIKK0hUVFBST09UPSIvc3J2L3d3dyIKK0FSR1M9Ii1oICRIVFRQUk9PVCIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJaWYgWyAhIC1kICRIVFRQUk9PVCBdOyB0aGVuCisJCWVjaG8gIiRIVFRQUk9PVCBpcyBtaXNzaW5nLiIKKwkJZXhpdCAxCisJZmkKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiAkTkFNRSAtYSAkREFFTU9OIC0tICRBUkdTCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJzdG9wcGluZyAkREVTQzogJE5BTUUuLi4gIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uICROQU1FCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBlY2hvICJyZXN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisgCSQwIHN0b3AKKwkkMCBzdGFydAorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVsb2FkKQorICAgIAllY2hvIC1uICJyZWxvYWRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAgICAJa2lsbGFsbCAtSFVQICQoYmFzZW5hbWUgJHtEQUVNT059KQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxyZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjNzc1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4KQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUtlcm5lbCBMb2dnaW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QGJhc2Vfc2JpbmRpckAva2xvZ2QgLW4KKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1zeXNsb2cuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTE2Y2FmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQKQEAgLTAsMCArMSwyNSBAQAorT1BUSU9OUz0iLUMiCisjIFRoZSBhYm92ZSBvcHRpb24gbWVhbnMgc3lzbG9nZCB3aWxsIGxvZyB0byAxNksgc2htIGNpcmN1bGFyIGJ1ZmZlci4KKyMgWW91IGNvdWxkIHVzZSBgbG9ncmVhZCcgdG8gcmVhZCBpdC4KKworIyBBbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOgorIyAtTyBGSUxFICAgICAgIDogICAgICBMb2cgdG8gRklMRSAoZGVmYXVsdDovdmFyL2xvZy9tZXNzYWdlcykKKyMgLWwgTiAgICAgICAgICA6ICAgICAgTG9nIG9ubHkgbWVzc2FnZXMgbW9yZSB1cmdlbnQgdGhhbiBwcmlvIE4gKDEtOCkKKyMgLVMgICAgICAgICAgICA6ICAgICAgU21hbGxlciBvdXRwdXQKKyMgLXMgU0laRSAgICAgICA6ICAgICAgTWF4IHNpemUgKEtCKSBiZWZvcmUgcm90YXRpb24gKGRlZmF1bHQ6MjAwS0IsIDA9b2ZmKQorIyAtYiBOICAgICAgICAgIDogICAgICBOIHJvdGF0ZWQgbG9ncyB0byBrZWVwIChkZWZhdWx0OjEsIG1heD05OSwgMD1wdXJnZSkKKyMgLVIgSE9TVFs6UE9SVF06ICAgICAgTG9nIHRvIEhPU1Q6UE9SVCAoZGVmYXVsdCBQT1JUOjUxNCkKKyMgLUwgICAgICAgICAgICA6ICAgICAgTG9nIGxvY2FsbHkgYW5kIHZpYSBuZXR3b3JrCisjIC1EICAgICAgICAgICAgOiAgICAgIERyb3AgZHVwbGljYXRlcworIyAtQ1tzaXplX2tiXSAgIDogICAgICBMb2cgdG8gc2hhcmVkIG1lbSBidWZmZXIgKHVzZSBsb2dyZWFkIHRvIHJlYWQgaXQpCisjIC1mIEZJTEUgICAgICAgOiAgICAgIFVzZSBGSUxFIGFzIGNvbmZpZyAoZGVmYXVsdDovZXRjL3N5c2xvZy5jb25mKQorIyAtbSBNSU4gICAgICAgIDogICAgICBNaW51dGVzIGJldHdlZW4gbWFyayBsaW5lcyAoZGVmYXVsdDoyMCwgMD1vZmYpCisjIC1LICAgICAgICAgICAgOiAgICAgIExvZyB0byBrZXJuZWwgcHJpbnRrIGJ1ZmZlciAodXNlIGRtZXNnIHRvIHJlYWQgaXQpCisKKyMgRXhhbXBsZSAxOgorIyBMb2cgdG8gbG9jYWwgZmlsZSAvdmFyL2xvZy9teWxvZworIyBPUFRJT05TPSItTyAvdmFyL2xvZy9teWxvZyIKKyMKKyMgRXhhbXBsZSAyOgorIyBMb2cgdG8gcmVtb3RlIGhvc3QKKyMgT1BUSU9OUz0iLVIgMTkyLjE2OC4xLjE6NjAxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1zeXNsb2cuc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTA0MzIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4KQEAgLTAsMCArMSwxMyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TeXN0ZW0gTG9nZ2luZyBTZXJ2aWNlCitXYW50cz1idXN5Ym94LWtsb2dkLnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9idXN5Ym94LXN5c2xvZworRXhlY1N0YXJ0PUBiYXNlX3NiaW5kaXJAL3N5c2xvZ2QgLW4gJE9QVElPTlMKK1NvY2tldHM9c3lzbG9nLnNvY2tldAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CitBbHNvPWJ1c3lib3gta2xvZ2Quc2VydmljZQorQWxpYXM9c3lzbG9nLnNlcnZpY2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXVkaGNwZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXVkaGNwZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDM5MDNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtdWRoY3BkCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi91ZGhjcGQKK05BTUU9dWRoY3BkCitERVNDPSJCdXN5Ym94IFVESENQIFNlcnZlciIKK0FSR1M9Ii9ldGMvdWRoY3BkLmNvbmYiCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDEKKworc2V0IC1lCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBlY2hvIC1uICJzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorCWlmIFsgISAtZiAvZXRjL3VkaGNwZC5jb25mIF07IHRoZW4KKwkJZWNobyAiZXJyb3I6IC9ldGMvdWRoY3BkLmNvbmYgaXMgbWlzc2luZy4iCisJCWV4aXQgMQorCWZpCisJL3NiaW4vc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwkvc2Jpbi9zdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9kZWZhdWx0LnNjcmlwdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9kZWZhdWx0LnNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFjOTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2RlZmF1bHQuc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK2V4ZWMgcnVuLXBhcnRzIC1hICIkMSIgL2V0Yy91ZGhjcGMuZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9maW5kLXRvdWNoc2NyZWVuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzVlN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitpZiBncmVwIC1xICJpbnB1dDouKi1lMC4qLDMsLiphMCwxLFx8YWRzNzg0NiIgL3N5cy9jbGFzcy8kTURFVi9kZXZpY2UvbW9kYWxpYXMgOyB0aGVuCisJbG4gLXNmIC9kZXYvJE1ERVYgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2h3Y2xvY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1Zjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaHdjbG9jaworIyBSZXF1aXJlZC1TdGFydDogICAgCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2V0IHN5c3RlbSBjbG9jaworIyBEZXNjcmlwdGlvbjogICAgICAgU2V0IHN5c3RlbSBjbG9jayB0byBoYXJkd2FyZSBjbG9jaywgYWNjb3JkaW5nIHRvIHRoZSBVVEMKKyMgICAgICAgICAgICAgICAgICAgIHNldHRpbmcgaW4gL2V0Yy9kZWZhdWx0L3JjUyAoc2VlIGFsc28gcmNTKDUpKS4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIFdBUk5JTkc6ICAgICAgSWYgeW91ciBoYXJkd2FyZSBjbG9jayBpcyBub3QgaW4gVVRDL0dNVCwgdGhpcyBzY3JpcHQKKyMgICAgICAgICAgICAgICBtdXN0IGtub3cgdGhlIGxvY2FsIHRpbWUgem9uZS4gVGhpcyBpbmZvcm1hdGlvbiBpcworIyAgICAgICAgICAgICAgIHN0b3JlZCBpbiAvZXRjL2xvY2FsdGltZS4gVGhpcyBtaWdodCBiZSBhIHByb2JsZW0gaWYKKyMgICAgICAgICAgICAgICB5b3VyIC9ldGMvbG9jYWx0aW1lIGlzIGEgc3ltbGluayB0byBzb21ldGhpbmcgaW4KKyMgICAgICAgICAgICAgICAvdXNyL3NoYXJlL3pvbmVpbmZvIEFORCAvdXNyIGlzbid0IGluIHRoZSByb290CisjICAgICAgICAgICAgICAgcGFydGl0aW9uISBUaGUgd29ya2Fyb3VuZCBpcyB0byBkZWZpbmUgVFogZWl0aGVyCisjICAgICAgICAgICAgICAgaW4gL2V0Yy9kZWZhdWx0L3JjUywgb3IgaW4gdGhlIHByb3BlciBwbGFjZSBiZWxvdy4KKworWyAhIC14IC9zYmluL2h3Y2xvY2sgXSAmJiBleGl0IDAKKworWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRVVEMiID0gInllcyIgXSAmJiB0ej0iLS11dGMiIHx8IHR6PSItLWxvY2FsdGltZSIKK2Nhc2UgIiQxIiBpbgorICAgICAgICBzdGFydCkKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSB0aW1lIHdhcyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU2V0dGluZyB0aGUgU3lzdGVtIENsb2NrIHVzaW5nIHRoZSBIYXJkd2FyZSBDbG9jayBhcyByZWZlcmVuY2UuLi4iCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlpZiBbIC16ICIkVFoiIF0KKwkJCXRoZW4KKwkgICAgICAgICAgICAgICAgICAgaHdjbG9jayAkdHogLS1oY3Rvc3lzCisJCQllbHNlCisJCQkgICBUWj0iJFRaIiBod2Nsb2NrICR0eiAtLWhjdG9zeXMKKwkJCWZpCisJCWZpCisKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSBDbG9jayBzZXQuIFN5c3RlbSBsb2NhbCB0aW1lIGlzIG5vdyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgc3RvcHxyZXN0YXJ0fHJlbG9hZHxmb3JjZS1yZWxvYWQpCisJCSMKKwkJIyBVcGRhdGVzIHRoZSBIYXJkd2FyZSBDbG9jayB3aXRoIHRoZSBTeXN0ZW0gQ2xvY2sgdGltZS4KKwkJIyBUaGlzIHdpbGwgKm92ZXJyaWRlKiBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBIYXJkd2FyZSBDbG9jay4KKwkJIworCQkjIFdBUk5JTkc6IElmIHlvdSBkaXNhYmxlIHRoaXMsIGFueSBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0KKwkJIyAgICAgICAgICBjbG9jayB3aWxsIG5vdCBiZSBjYXJyaWVkIGFjcm9zcyByZWJvb3RzLgorCQkjCisJCWlmIFsgIiRWRVJCT1NFIiAhPSBubyBdCisJCXRoZW4KKwkJCWVjaG8gIlNhdmluZyB0aGUgU3lzdGVtIENsb2NrIHRpbWUgdG8gdGhlIEhhcmR3YXJlIENsb2NrLi4uIgorCQlmaQorCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlod2Nsb2NrICR0eiAtLXN5c3RvaGMKKwkJZmkKKwkJaWYgWyAiJFZFUkJPU0UiICE9IG5vIF0KKwkJdGhlbgorCQkJZWNobyAiSGFyZHdhcmUgQ2xvY2sgdXBkYXRlZCB0byBgZGF0ZWAuIgorCQlmaQorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgIDs7CisJc2hvdykKKwkJaWYgWyAiJEhXQ0xPQ0tBQ0NFU1MiICE9IG5vIF0KKwkJdGhlbgorCQkJaHdjbG9jayAkdHogLS1zaG93CisJCWZpCisJCTs7CisgICAgICAgICopCisgICAgICAgICAgICAgICAgZWNobyAiVXNhZ2U6IGh3Y2xvY2suc2gge3N0YXJ0fHN0b3B8c2hvd3xyZWxvYWR8cmVzdGFydH0iID4mMgorCQllY2hvICIgICAgICAgc3RhcnQgc2V0cyBrZXJuZWwgKHN5c3RlbSkgY2xvY2sgZnJvbSBoYXJkd2FyZSAoUlRDKSBjbG9jayIgPiYyCisJCWVjaG8gIiAgICAgICBzdG9wIGFuZCByZWxvYWQgc2V0IGhhcmR3YXJlIChSVEMpIGNsb2NrIGZyb20ga2VybmVsIChzeXN0ZW0pIGNsb2NrIiA+JjIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNTBiY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjCisjIHN0YXJ0L3N0b3AgaW5ldGQgc3VwZXIgc2VydmVyLgorCitpZiAhIFsgLXggL3Vzci9zYmluL2luZXRkIF07IHRoZW4KKwlleGl0IDAKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQiIDsgc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2luZXRkID4gL2Rldi9udWxsCisJZWNobyAiLiIKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IgorCWVjaG8gLW4gIiBpbmV0ZCIgOyBzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAvdXNyL3NiaW4vaW5ldGQgPiAvZGV2L251bGwKKwllY2hvICIuIgorCTs7CisgICAgcmVzdGFydCkKKwllY2hvIC1uICJSZXN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQgIgorCWtpbGxhbGwgLUhVUCBpbmV0ZAorCWVjaG8gIi4iCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9pbmV0ZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDJmZTg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYKQEAgLTAsMCArMSwyMCBAQAorIyAvZXRjL2luZXRkLmNvbmY6ICBzZWUgaW5ldGQoOCkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zLgorIworIyBJbnRlcm5ldCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBkYXRhYmFzZQorIworIyBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGFuIGVudHJ5IHNvIGl0IGlzbid0IHRvdWNoZWQgZHVyaW5nCisjIHBhY2thZ2UgdXBkYXRlcyBqdXN0IGNvbW1lbnQgaXQgb3V0IHdpdGggYSBzaW5nbGUgJyMnIGNoYXJhY3Rlci4KKyMKKyMgPHNlcnZpY2VfbmFtZT4gPHNvY2tfdHlwZT4gPHByb3RvPiA8ZmxhZ3M+IDx1c2VyPiA8c2VydmVyX3BhdGg+IDxhcmdzPgorIworIzpJTlRFUk5BTDogSW50ZXJuYWwgc2VydmljZXMKKyNlY2hvCQlzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjZWNobwkJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4Jc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4JZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2Rpc2NhcmQJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyNkaXNjYXJkCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCisjZGF5dGltZQkJc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2RheXRpbWUJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI3RpbWUJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyN0aW1lCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2MjUyNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldgpAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworbW91bnQgLXQgdG1wZnMgdG1wZnMgL2RldiAgLW8gc2l6ZT02NGssbW9kZT0wNzU1Citta2RpciAvZGV2L3B0cyAvZGV2L3NobQorY2htb2QgNzc3IC9kZXYvc2htCittb3VudCAtdCBkZXZwdHMgZGV2cHRzIC9kZXYvcHRzCit0b3VjaCAvZGV2L21kZXYuc2VxCitlY2hvICIvc2Jpbi9tZGV2IiA+IC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworbWRldiAtcworCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorICAgICAgICBybSAtZiAvZGV2L2luaXRjdGwKKyAgICAgICAgbWtub2QgLW0gNjAwIC9kZXYvaW5pdGN0bCBwCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LW1vdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDY2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaApAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKK01ERVZfQVVUT01PVU5UPXkKK01ERVZfQVVUT01PVU5UX1JPT1Q9L3J1bi9tZWRpYQorWyAtZiAvZXRjL2RlZmF1bHQvbWRldiBdICYmIC4gL2V0Yy9kZWZhdWx0L21kZXYKK2lmIFsgIiR7TURFVl9BVVRPTU9VTlR9IiA9ICJuIiBdIDsgdGhlbgorCWV4aXQgMAorZmkKKworY2FzZSAiJEFDVElPTiIgaW4KKwlhZGR8IiIpCisJCUFDVElPTj0iYWRkIgorCQkjIGNoZWNrIGlmIGFscmVhZHkgbW91bnRlZAorCQlpZiBncmVwIC1xICJeL2Rldi8ke01ERVZ9ICIgL3Byb2MvbW91bnRzIDsgdGhlbgorCQkJIyBBbHJlYWR5IG1vdW50ZWQKKwkJCWV4aXQgMAorCQlmaQorCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDNgCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICJtbWMiIF0gOyB0aGVuCisJCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDdgCisJCWZpCisJCSMgY2hlY2sgZm9yICJwbGVhc2UgZG9uJ3QgbW91bnQgaXQiIGZpbGUKKwkJaWYgWyAtZiAiL2Rldi9ub21vdW50LiR7REVWQkFTRX0iIF0gOyB0aGVuCisJCQkjIGJsb2NrZWQKKwkJCWV4aXQgMAorCQlmaQorCQkjIGNoZWNrIGZvciBmdWxsLWRpc2sgcGFydGl0aW9uCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICIke01ERVZ9IiBdIDsgdGhlbgorCQkJaWYgWyAtZCAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vJHtERVZCQVNFfSoxIF0gOyB0aGVuCisJCQkJIyBQYXJ0aXRpb24gZGV0ZWN0ZWQsIGp1c3QgcXVpdAorCQkJCWV4aXQgMAorCQkJZmkKKwkJCWlmIFsgISAtZiAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vc2l6ZSBdIDsgdGhlbgorCQkJCSMgTm8gc2l6ZSBhdCBhbGwKKwkJCQlleGl0IDAKKwkJCWZpCisJCQlpZiBbIGBjYXQgL3N5cy9ibG9jay8ke0RFVkJBU0V9L3NpemVgID09IDAgXSA7IHRoZW4KKwkJCQkjIGVtcHR5IGRldmljZSwgYmFpbCBvdXQKKwkJCQlleGl0IDAKKwkJCWZpCisJCWZpCisJCSMgZmlyc3QgYWxsb3cgZnN0YWIgdG8gZGV0ZXJtaW5lIHRoZSBtb3VudHBvaW50CisJCWlmICEgbW91bnQgL2Rldi8kTURFViA+IC9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCU1PVU5UUE9JTlQ9IiR7TURFVl9BVVRPTU9VTlRfUk9PVH0vJE1ERVYiCisJCQlta2RpciAiJE1PVU5UUE9JTlQiCisJCQltb3VudCAtdCBhdXRvIC9kZXYvJE1ERVYgIiRNT1VOVFBPSU5UIgorCQlmaQorCQk7OworCXJlbW92ZSkKKwkJTU9VTlRQT0lOVD1gZ3JlcCAiXi9kZXYvJE1ERVZccyIgL3Byb2MvbW91bnRzIHwgY3V0IC1kJyAnIC1mIDJgCisJCWlmIFsgISAteiAiJE1PVU5UUE9JTlQiIF0KKwkJdGhlbgorCQkJdW1vdW50ICIkTU9VTlRQT0lOVCIKKwkJCXJtZGlyICIkTU9VTlRQT0lOVCIKKwkJZWxzZQorCQkJdW1vdW50IC9kZXYvJE1ERVYKKwkJZmkKKwkJOzsKKwkqKQorCQkjIFVuZXhwZWN0ZWQga2V5d29yZAorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTkzZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mCkBAIC0wLDAgKzEsNDIgQEAKKyRNT0RBTElBUz0uKiAwOjAgNjYwIEBtb2Rwcm9iZSAiJE1PREFMSUFTIgorCitjb25zb2xlIDA6MCAwNjAwIAorY3B1X2RtYV9sYXRlbmN5IDA6MCAwNjYwIAorZmIwOjAgNDQgMDY2MCAKK2Z1bGwgMDowIDA2NjYgCitpbml0Y3RsIDA6MCAwNjAwIAoraXJjb21tWzAtOV0uKiAwOjIwIDA2NjAgCitrbWVtIDA6MTUgMDY0MCAKK2ttc2cgMDowIDA2NjAgCitsb2cgMDowIDA2NjYgCitsb29wWzAtOV0uKiAwOjYgMDY0MCAKK21lbSAwOjE1IDA2NDAgCituZXR3b3JrX2xhdGVuY3kgMDowIDA2NjAgCituZXR3b3JrX3Rocm91Z2hwdXQgMDowIDA2NjAgCitudWxsIDA6MCAwNjY2IAorcG9ydCAwOjE1IDA2NDAgCitwdG14IDA6NSAwNjY2IAorcmFtWzAtOV0uKiAwOjYgMDY0MCAKK3JhbmRvbSAwOjAgMDY2NiAKK3NkYSAwOjYgMDY0MCAKK3R0eSAwOjUgMDY2NiAKK3R0eS4qIDA6MCAwNjIwIAordXJhbmRvbSAwOjAgMDY2NiAKK3VzYmRldi4qIDA6MCAwNjYwICovZXRjL21kZXYvdXNiLnNoCit2Y3MuKiAwOjUgMDY2MCAKK3plcm8gMDowIDA2NjYgCisgCitzbmQvcGNtLiogMDowIDA2NjAKK3NuZC9jb250cm9sLiogMDowIDA2NjAKK3NuZC90aW1lciAwOjAgMDY2MAorc25kL3NlcSAwOjAgMDY2MAorc25kL21pbmkuKiAwOjAwIDA2NjAKKworaW5wdXQvZXZlbnQuKiAwOjAgMDY2MCBAL2V0Yy9tZGV2L2ZpbmQtdG91Y2hzY3JlZW4uc2gKK2lucHV0L21pY2UgMDowIDA2NjAKK2lucHV0L21vdXNlLiogMDowIDA2NjAKKwordHVuWzAtOV0qIDA6MCAwNjYwID1uZXQvCisKK1toc11kW2Etel1bMC05XT8gMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKK21tY2Jsa1swLTldLiogMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21vdW50LmJ1c3lib3gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVmOTQ1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IG1vdW50ICRACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjA4YThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitjdXJyZW50X2Rpcj0kKHJlYWRsaW5rIC1mICQwKQorZXhwb3J0IGJpbmRpcj0kKGRpcm5hbWUgJGN1cnJlbnRfZGlyKQorCitjZCB0ZXN0c3VpdGUgfHwgZXhpdCAxCisuL3J1bnRlc3QgLXYgfCBzZWQgLXIgJ3MvXihTS0lQUEVEfFVOVEVTVEVEKTovU0tJUDovJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc2ltcGxlLnNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjE2OGIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisKKyMgdWRoY3BjIHNjcmlwdCBlZGl0ZWQgYnkgVGltIFJpa2VyIDxUaW1AUmlrZXJzLm9yZz4KKworWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB1ZGhjcGMiICYmIGV4aXQgMQorCitSRVNPTFZfQ09ORj0iL2V0Yy9yZXNvbHYuY29uZiIKK1sgLW4gIiRzdWJuZXQiIF0gJiYgTkVUTUFTSz0ibmV0bWFzayAkc3VibmV0IgorCisjIHJldHVybiAwIGlmIHJvb3QgaXMgbW91bnRlZCBvbiBhIG5ldHdvcmsgZmlsZXN5c3RlbQorcm9vdF9pc19uZnMoKSB7CisJc2VkIC1uICdzL15bXiBdKiBcKFteIF0qXCkgXChbXiBdKlwpIC4qJC9cMSBcMi9wJyAvcHJvYy9tb3VudHMgfAorCWdyZXAgLXEgIl4vIFwobmZzXHxzbWJmc1x8bmNwXHxjb2RhXCkkIgorfQorCitoYXZlX2Jpbl9pcD0wCitpZiBbIC14IC9zYmluL2lwIF07IHRoZW4KKyAgaGF2ZV9iaW5faXA9MQorICBCUk9BRENBU1Q9ImJyb2FkY2FzdCArIgorZmkKKworWyAtbiAiJGJyb2FkY2FzdCIgXSAmJiBCUk9BRENBU1Q9ImJyb2FkY2FzdCAkYnJvYWRjYXN0IgorCitjYXNlICIkMSIgaW4KKwlkZWNvbmZpZykKKwkJaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF07IHRoZW4KKwkJCS9zYmluL3Jlc29sdmNvbmYgLWQgIiR7aW50ZXJmYWNlfS51ZGhjcGMiCisJCWZpCisJCWlmICEgcm9vdF9pc19uZnMgOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwIGFkZHIgZmx1c2ggZGV2ICRpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgbGluayBzZXQgZGV2ICRpbnRlcmZhY2UgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3NiaW4vaWZjb25maWcgJGludGVyZmFjZSAwLjAuMC4wCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorCQlmaQorCQk7OworCisJcmVuZXd8Ym91bmQpCisgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaXAgYWRkciBhZGQgZGV2ICRpbnRlcmZhY2UgbG9jYWwgJGlwLyRtYXNrICRCUk9BRENBU1QKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvc2Jpbi9pZmNvbmZpZyAkaW50ZXJmYWNlICRpcCAkQlJPQURDQVNUICRORVRNQVNLCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbIC1uICIkcm91dGVyIiBdIDsgdGhlbgorCQkJaWYgISByb290X2lzX25mcyA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGlwIHJvdXRlIGRlbCBkZWZhdWx0IGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSByb3V0ZSBkZWwgZGVmYXVsdCBndyAwLjAuMC4wIGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisJCQlmaQorCisJCQltZXRyaWM9MTAKKwkJCWZvciBpIGluICRyb3V0ZXIgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgcm91dGUgYWRkIGRlZmF1bHQgdmlhICRpIG1ldHJpYyAkbWV0cmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkaSBkZXYgJGludGVyZmFjZSBtZXRyaWMgJG1ldHJpYyAyPi9kZXYvbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWM9JCgoJG1ldHJpYyArIDEpKQorCQkJZG9uZQorCQlmaQorCisJCSMgVXBkYXRlIHJlc29sdmVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCQlSPSIiCisJCVsgLW4gIiRkb21haW4iIF0gJiYgUj0iZG9tYWluICRkb21haW4KKyIKKwkJZm9yIGkgaW4gJGRuczsgZG8KKwkJCWVjaG8gIiQwOiBBZGRpbmcgRE5TICRpIgorCQkJUj0iJHtSfW5hbWVzZXJ2ZXIgJGkKKyIKKwkJZG9uZQorCisJCWlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdOyB0aGVuCisJCQllY2hvIC1uICIkUiIgfCAvc2Jpbi9yZXNvbHZjb25mIC1hICIke2ludGVyZmFjZX0udWRoY3BjIgorCQllbHNlCisJCQllY2hvIC1uICIkUiIgPiAiJFJFU09MVl9DT05GIgorCQlmaQorCQk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YzRkMTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nCkBAIC0wLDAgKzEsNzcgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHN5c2tsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogICAgU3lzdGVtIGxvZ2dlcgorIyMjIEVORCBJTklUIElORk8KKworc2V0IC1lCisKK2lmIFsgLWYgL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mIF07IHRoZW4KKwkuIC9ldGMvc3lzbG9nLXN0YXJ0dXAuY29uZgorCUxPR19MT0NBTD0wCisJTE9HX1JFTU9URT0wCisJZm9yIEQgaW4gJERFU1RJTkFUSU9OOyBkbworCQlpZiBbICIkRCIgPSAiYnVmZmVyIiBdOyB0aGVuCisJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1DJEJVRkZFUlNJWkUiCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJmaWxlIiBdOyB0aGVuCisJCQlpZiBbIC1uICIkTE9HRklMRSIgXTsgdGhlbgorCQkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLU8gJExPR0ZJTEUiCisJCQlmaQorCQkJaWYgWyAtbiAiJFJPVEFURVNJWkUiIF07IHRoZW4KKwkJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1zICRST1RBVEVTSVpFIgorCQkJZmkKKwkJCWlmIFsgLW4gIiRST1RBVEVHRU5TIiBdOyB0aGVuCisJCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtYiAkUk9UQVRFR0VOUyIKKwkJCWZpCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJyZW1vdGUiIF07IHRoZW4KKwkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLVIgJFJFTU9URSIKKwkJCUxPR19SRU1PVEU9MQorCQlmaQorCWRvbmUKKwlpZiBbICIkTE9HX0xPQ0FMIiA9ICIxIiAtYSAiJExPR19SRU1PVEUiID0gIjEiIF07IHRoZW4KKwkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtTCIKKwlmaQorCWlmIFsgIiRSRURVQ0UiID0gInllcyIgXTsgdGhlbgorCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1TIgorCWZpCisJaWYgWyAiJERST1BEVVBMSUNBVEVTIiA9ICJ5ZXMiIF07IHRoZW4KKwkgICAgU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtRCIKKwlmaQorCWlmIFsgLW4gIiRMT0dMRVZFTCIgXTsgdGhlbgorCSAgICBTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1sICRMT0dMRVZFTCIKKwlmaQorZWxzZQorCSMgZGVmYXVsdDogbG9nIHRvIDE2SyBzaG0gY2lyY3VsYXIgYnVmZmVyCisJU1lTTE9HX0FSR1M9Ii1DIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIHN5c2xvZ2Qva2xvZ2Q6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiBzeXNsb2dkIC1hIC9zYmluL3N5c2xvZ2QgLS0gLW4gJFNZU0xPR19BUkdTCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4ga2xvZ2QgLWEgL3NiaW4va2xvZ2QgLS0gLW4KKwllY2hvICJkb25lIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgc3lzbG9nZC9rbG9nZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uIHN5c2xvZ2QKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiBrbG9nZAorCWVjaG8gImRvbmUiCisJOzsKKyAgcmVzdGFydCkKKyAgCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6IHN5c2xvZyB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2ctc3RhcnR1cC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTQ1MGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZgpAQCAtMCwwICsxLDEzIEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGlzIHVzZWQgYnkgdGhlIGJ1c3lib3ggc3lzbG9nIGluaXQgc2NyaXB0LAorIyAvZXRjL2luaXQuZC9zeXNsb2dbLmJ1c3lib3hdIHRvIHNldCBzeXNsb2cgY29uZmlndXJhdGlvbiBhdCBzdGFydCB0aW1lLgorCitERVNUSU5BVElPTj1maWxlCQkjIGxvZyBkZXN0aW5hdGlvbnMgKGJ1ZmZlciBmaWxlIHJlbW90ZSkKK0xPR0ZJTEU9L3Zhci9sb2cvbWVzc2FnZXMJIyB3aGVyZSB0byBsb2cgKGZpbGUpCitSRU1PVEU9bG9naG9zdDo1MTQJCSMgd2hlcmUgdG8gbG9nIChzeXNsb2cgcmVtb3RlKQorUkVEVUNFPW5vCQkJIyByZWR1Y2Utc2l6ZSBsb2dnaW5nCitEUk9QRFVQTElDQVRFUz1ubwkJIyB3aGV0aGVyIHRvIGRyb3AgZHVwbGljYXRlIGxvZyBlbnRyaWVzCisjUk9UQVRFU0laRT0wCQkJIyByb3RhdGUgbG9nIGlmIGdyb3duIGJleW9uZCBYIFtrQnl0ZV0KKyNST1RBVEVHRU5TPTMJCQkjIGtlZXAgWCBnZW5lcmF0aW9ucyBvZiByb3RhdGVkIGxvZ3MKK0JVRkZFUlNJWkU9NjQJCQkjIHNpemUgb2YgY2lyY3VsYXIgYnVmZmVyIFtrQnl0ZV0KK0ZPUkVHUk9VTkQ9bm8JCQkjIHJ1biBpbiBmb3JlZ3JvdW5kIChkb24ndCB1c2UhKQorI0xPR0xFVkVMPTUJCQkjIGxvY2FsIGxvZyBsZXZlbCAoYmV0d2VlbiAxIGFuZCA4KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmI2MzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLmNvbmYKQEAgLTAsMCArMSBAQAorIyAgL2V0Yy9zeXNsb2cuY29uZglDb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1c3lib3gncyBzeXNsb2dkIHV0aWxpdHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy91bW91bnQuYnVzeWJveCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy91bW91bnQuYnVzeWJveApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzczMTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3Vtb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IHVtb3VudCAkQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY5MmFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMKQEAgLTAsMCArMSw0MSBAQAorIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKworIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorRE9NQUlOID0gJChQQUNLQUdFKQorCisjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KK3N1YmRpciA9IHBvCit0b3BfYnVpbGRkaXIgPSAuLgorCisjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKworIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCisjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKKyMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQorIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKyMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKKyMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCisjIHRoZWlyIGNvcHlyaWdodC4KK0NPUFlSSUdIVF9IT0xERVIgPSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorIyAgIHVuZGVyc3Rvb2QuCisjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorIyAgIG1vbmV5LgorIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KK01TR0lEX0JVR1NfQUREUkVTUyA9CisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvZGVwYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyODcwMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvY29udHJpYi9jb2RlcGFnZS5jfmNvZGVwYWdlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb250cmliL2NvZGVwYWdlLmMKK0BAIC0yMjksNyArMjI5LDcgQEAKKyAJICByZXR1cm4gMDsKKyAKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXAorLVdhcm5pbmc6IENQIGZvcm1hdCBpcyBhIGhhY2shXG4KKytXYXJuaW5nOiBDUCBmb3JtYXQgaXMgYSBoYWNrIVxuXAorICAgICAgICAgIFRoZSBmaWxlcyBwcm9kdWNlZCBtYXkgb3IgbWF5IG5vdCBiZSB1c2FibGUhXG4iKTsKKyAKKyAJc3ByaW50ZihvdXRmaWxlLCAiJWQuY3AiLCBDUEVudHJ5SGVhZGVyLmNvZGVwYWdlKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbXBpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5M2Y1MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9zaG93a2V5LmN+Y29tcGlsZQkxOTk5LTA4LTI1IDE3OjIwOjA4LjAwMDAwMDAwMCAtMDQwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvc2hvd2tleS5jCTIwMDQtMDUtMDkgMDM6MDM6MjMuMDAwMDAwMDAwIC0wNDAwCitAQCAtMjY0LDcgKzI2NCw2IEBACisgCSAgYnJlYWs7CisgCWNhc2UgY21kX2tleW1hcDoKKyAJICBwcmludGYoIilcbiIpOworLQlkZWZhdWx0OgorIAl9CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWMxMDBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW5+Y29uZmlndXJlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW4KK0BAIC0yLDEzICsyLDE0IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgCisgIyBJbml0aWFsaXplCistQUNfSU5JVChrYmR0b29scy9sb2Fka2V5cy55KQorK0FDX0lOSVQKKytBQ19DT05GSUdfU1JDRElSKFtrYmR0b29scy9sb2Fka2V5cy55XSkKKyAKKyBkZWZpbmUoY3RfdW5pY29kZWRhdGFfZGVmYXVsdCwvdXNyL3NoYXJlL3VuaWRhdGEvVW5pY29kZURhdGEtMi50eHQpCisgY3RfbG9jYWxkYXRhZGlyX2RlZmF1bHQ9L3Vzci9sb2NhbC9zaGFyZSAgICAgIyBpZmYgLS1lbmFibGUtbG9jYWxkYXRhZGlyIHdpdGhvdXQgc3BlY2lmaWMgZGlyCisgCisgI0FDX0NPTkZJR19BVVhfRElSKGF1dG9jb25mKQorLUFDX0NBTk9OSUNBTF9TWVNURU0KKytBQ19DQU5PTklDQUxfVEFSR0VUKFtdKQorIEFNX0lOSVRfQVVUT01BS0UoY29uc29sZS10b29scywgMC4zLjIpCisgCisgIyBEZWZhdWx0cworQEAgLTI1LDcgKzI2LDYgQEAKKyAjIGkxOG4gc3R1ZmYKKyBBTExfTElOR1VBUz0iY3MgZGUgcnUgZ2EgZnIiCisgQU1fR05VX0dFVFRFWFQKKy1BQ19PVVRQVVRfQ09NTUFORFMoW3NlZCAtZSAiL1BPVEZJTEVTID0vciBwby9QT1RGSUxFUyIgcG8vTWFrZWZpbGUuaW4gPiBwby9NYWtlZmlsZV0pCisgCisgQUNfREVGSU5FX1VOUVVPVEVEKExPQ0FMRURJUiwgIi91c3Ivc2hhcmUvbG9jYWxlIikKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjFlYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0ZpeCB0aGUgZm9sbG93aW5nIGVycm9yIGRldGVjdGVkIHdpdGggaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MgKHRoZQorbXVsdGlsaWIgeDg2LTY0IGxpYjMyIGNvbXBpbGVyKToKKyAgICAuLi9saWIvY3R1dGlscy8ubGlicy9saWJjdHV0aWxzLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRfa2VybmVsX3NmbScKKyAgICBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworSXQgc2VlbXMgdGhhdCBsaWJjdHV0aWxzLnNvICh0aGUgbGlicmFyeSB0aGF0IHVzZXMgZ2V0X2tlcm5lbF9zZm0pIG11c3QKK2JlIHN0YXRlZCBiZWZvcmUgbGliY29uc29sZS5zbyAodGhlIGxpYnJhcnkgdGhhdCBleHBvcnRzIHRoZSBmdW5jdGlvbikgd2hlbgordXNpbmcgbXVsdGlsaWIgZ2NjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9mb250ZmlsZXRvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xMCw1ICsxMCw1IEBAIEVYVFJBX0RJU1QgPSBmb250czJ2aXJmb250LmMgdmlyZm9udC5oCisgCisgIyBsaWJjb25zb2xlIGlzIG5lZWRlZCBieSBjdHV0aWxzCisgTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2Nmb250L2xpYmNmb250LmxhIFwKKy0JLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSBcCistCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisrCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIvdnR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy92dHRvb2xzL01ha2VmaWxlLmFtCisrKysgY29uc29sZS10b29scy0wLjMuMi92dHRvb2xzL01ha2VmaWxlLmFtCitAQCAtNyw5ICs3LDkgQEAgYmluX1BST0dSQU1TID0gY2h2dCBkZWFsbG9jdnQgd3JpdGV2dCBmZworIAl2Y3N0aW1lIHZ0LWlzLVVURjggb3BlbnZ0IEBSRVNJWkVDT05TQAorIEVYVFJBX1BST0dSQU1TID0gcmVzaXplY29ucworIAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIHZjc3RpbWVfTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEKKyBzY3JlZW5kdW1wX0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9rYmR0b29scy9NYWtlZmlsZS5hbQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xNSw5ICsxNSw5IEBAIEVYVFJBX1BST0dSQU1TID0gZ2V0a2V5Y29kZXMgc2V0a2V5Y29kZXMKKyBsb2Fka2V5c19TT1VSQ0VTID0gbG9hZGtleXMueSBhbmFseXplLmwKKyAKKyBZRkxBR1MgPSAtZAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIGxvYWRrZXlzX0xEQUREID0gJChMREFERCkgQExFWExJQkAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2tiZHJhdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNzBiZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1BhdGNoIGZyb20gTWF0dGhpYXMgR29lYmwgPG9lQG0uZ29lYmwubmV0PgorQWRkZWQgdmlhIE9FIGJ1Z3RyYWNrZXI6IGJ1ZyAjNDc4CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9rYmRfbW9kZS5jLm9yaWcKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL2tiZF9tb2RlLmMKK0BAIC0yOSwxMSArMjksMTYgQEAKKyAgIE9QVCgiLXUgLS11bmljb2RlICAiLCBfKCJVVEYtOCBtb2RlIChVTklDT0RFKSIpKTsKKyAgIE9QVCgiLXMgLS1zY2FuY29kZSAiLCBfKCJzY2FuY29kZSBtb2RlIChSQVcpIikpOworICAgT1BUKCIgICAtLW1vZGU9ezhiaXQsa2V5Y29kZSx1bmljb2RlLHNjYW5jb2RlfSAiLCBfKCJzZXQgbW9kZSIpKTsKKysgIE9QVCgiLXIgLS1yYXRlPVJBVEUgIiwgXygic2V0IHJlcGVhdCByYXRlIChkZWZhdWx0OiAzMykiKSk7CisrICBPUFQoIi1kIC0tZGVsYXk9REVMQVkgIiwgXygic2V0IHJlcGVhdCBkZWxheSAoZGVmYXVsdDogMjUwKSIpKTsKKyAKKyAgIE9QVCgiLWggLS1oZWxwICAgICAiLCBIRUxQREVTQyk7CisgICBPUFQoIi1WIC0tdmVyc2lvbiAgIiwgVkVSU0lPTkRFU0MpOworIH0KKyAKKytpbnQgcmF0ZT0tMTsKKytpbnQgZGVsYXk9LTE7CisrCisgc3RhdGljIGludCBwYXJzZV9jbWRsaW5lIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICAgaW50IG1vZGUgPSAtMTsKK0BAIC00NiwxMSArNTEsMTMgQEAKKyAgICAgICB7ICJtb2RlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ20nIH0sCisgICAgICAgeyAic2NhbmNvZGUiICwgbm9fYXJndW1lbnQsIE5VTEwsICdzJyB9LAorICAgICAgIHsgInVuaWNvZGUiICAsIG5vX2FyZ3VtZW50LCBOVUxMLCAndScgfSwKKysgICAgICB7ICJyYXRlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3InIH0sCisrICAgICAgeyAiZGVsYXkiICAgICwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJyB9LAorICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgIH07CisgICAgIGludCBjOworIAorLSAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3UiLCBsb25nX29wdHMsIE5VTEwpKSAhPSBFT0YpIAorKyAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3VyOmQ6IiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gRU9GKSAKKyAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICBjYXNlICdoJzoKKyAJdXNhZ2UgKCk7CitAQCAtNTgsNiArNjUsMTQgQEAKKyAgICAgICBjYXNlICdWJzoKKyAJdmVyc2lvbiAoKTsKKyAJZXhpdCgwKTsKKysgICAgICBjYXNlICdyJzoKKysJcmF0ZSA9IGF0b2kob3B0YXJnKTsKKysJbW9kZSA9IC0yOworKwlicmVhazsKKysgICAgICBjYXNlICdkJzoKKysJZGVsYXkgPSBhdG9pKG9wdGFyZyk7CisrCW1vZGUgPSAtMjsKKysJYnJlYWs7CisgICAgICAgY2FzZSAnYSc6CisgCW1vZGUgPSBLX1hMQVRFOworIAlicmVhazsKK0BAIC0xMjksNiArMTQ0LDIwIEBACisgICAgICAgZXhpdCgwKTsKKyAgICAgfQorICAgCisrICBpZiAoIHJhdGUgIT0gLTEgfHwgZGVsYXkgIT0gLTEgKQorKyAgICB7CisrICAgIHN0cnVjdCBrYmRfcmVwZWF0IGtiZF9yZXA7CisrICAgIGtiZF9yZXAuZGVsYXkgPSBkZWxheTsKKysgICAga2JkX3JlcC5wZXJpb2QgPSByYXRlOworKyAgICBpZiAoaW9jdGwoZmQsIEtES0JEUkVQLCAma2JkX3JlcCkpCisrICAgICAgeworKwlmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOworKwlwZXJyb3IoXygiOiBlcnJvciBzZXR0aW5nIGtleWJvYXJkIHJlcGVhdCBtb2RlXG4iKSk7CisrCWV4aXQoMSk7CisrICAgICAgfQorKyAgICBpZihtb2RlPT0tMikgZXhpdCgwKTsKKysgICAgfQorKyAgCisgICBpZiAoaW9jdGwoZmQsIEtEU0tCTU9ERSwgbW9kZSkpCisgICAgIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbGNtZXNzYWdlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbGNtZXNzYWdlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDQ3YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9sY21lc3NhZ2UubTQKQEAgLTAsMCArMSwyNCBAQAorIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50CisjIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0IGZ1bmN0aW9uYWxpdHkuCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKyMgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisjIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorIyBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworIyBzZXJpYWwgMgorCitBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorICBbaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2xvY2FsZV9oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKyAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorICAgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisgICAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorICAgIGZpCisgIGZpXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vLWRlcC1vbi1saWJmbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vLWRlcC1vbi1saWJmbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjczNWE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm8tZGVwLW9uLWxpYmZsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK05vIHJlYXNvbiB0byBsaW5rIHdpdGggbGliZmwgc2luY2UgJ2xvYWRrZXlzJyBpbXBsZW1lbnRzCitpdHMgb3duIHl5d3JhcCgpL3l5bGV4KCkgZnVuY3Rpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEphY29iIEtyb29uIDxqYWNvYi5rcm9vbkBtaWtyb2RpZGFrdC5zZT4KKworSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcva2JkdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL01ha2VmaWxlLmFtCitAQCAtMTksOCArMTksNiBAQCBMREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9sCisgCS4uL2xpYi9jZm9udC9saWJjZm9udC5sYSBcCisgCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisgCistbG9hZGtleXNfTERBREQgPSAkKExEQUREKSBATEVYTElCQAorLQorIGJpbl9TQ1JJUFRTID0gbWtfbW9kbWFwCisgCisgbm9pbnN0X0hFQURFUlMgPSBsb2Fka2V5cy5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9ub2RvY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9ub2RvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVkNjA5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vZG9jcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitUaGUgZG9jcyBuZWVkIHRvb2xzIHdlIGRvbid0IGhhdmUgdG8gYnVpbGQgc28gZGlzYWJsZSB0aGVtLgorCitBbHNvIHJlbW92ZSBpbnRsIHNpbmNlIHRoZSBNYWtlZmlsZSBkb2Vzbid0IHdvcmsgd2l0aCAzLjgyIGFuZCB3ZQorZG9uJ3Qgd2FudCB0byBidWlsZCBsaWJpbnRsIGFueXdheS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorUlAgMjAxMi8xMC8xNworCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9NYWtlZmlsZS5hbQkxOTk5LTA0LTE1IDAxOjMzOjI0LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZWZpbGUuYW0JMjAxMi0xMC0xNyAxMTo0ODoxNC4xMDcwNjkxNDUgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorICMgLSotIG1ha2VmaWxlIC0qLQorIEFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCistU1VCRElSUyA9IGxpYiBmb250ZmlsZXRvb2xzIHZ0dG9vbHMga2JkdG9vbHMgc2NyZWVuZm9udHRvb2xzIGNvbnRyaWIgZG9jIFwKKy0JY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8gaW50bAorK1NVQkRJUlMgPSBsaWIgZm9udGZpbGV0b29scyB2dHRvb2xzIGtiZHRvb2xzIHNjcmVlbmZvbnR0b29scyBjb250cmliIFwKKysJY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8KKyAKKyBFWFRSQV9ESVNUID0gQlVHUyBSRUxFQVNFIENSRURJVFMgQ09QWUlORy5rYmQgbG9jYWwtc2NyaXB0cy8qIGRlYmlhbi8qICoubHNtCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi91Y2xpYmMtZmlsZW5vLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk1MDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGaXhpbmcgdGhlIGxvY2FsZSBpc3N1ZXMgaXNuJ3QgZW5vdWdoLCBjb25zb2xlLXRvb2xzIGFsc28gZG9lcyBhIGNvdXBsZSBvZgorb3RoZXIgcHJldHR5IHN0dXBpZCB0aGluZ3MgKGxpa2UgRklMRSAqZjsgZi0+X2ZpbGVubyBpbnN0ZWFkIG9mIGZpbGVubyhmKSksCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY2ZvbnQvZm9udHN0cnVjdC5jLmFyawkyMDA1LTA1LTIyIDE5OjEyOjM4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvbGliL2Nmb250L2ZvbnRzdHJ1Y3QuYwkyMDA1LTA1LTIyIDE5OjEzOjIzLjAwMDAwMDAwMCArMDAwMAorQEAgLTUwLDggKzUwLDcgQEAKKyAgICAqIGdldCBmaWxlc2l6ZQorICAgICovCisgICAKKy0gIC8qIEZJWE1FOiBzaG91bGQgbm90IHVzZSBfZmlsZW5vICEgKi8KKy0gIGlmIChmc3RhdChmb250ZmlsZS0+X2ZpbGVubywgJnN0YnVmKSA9PSAtMSkKKysgIGlmIChmc3RhdChmaWxlbm8oZm9udGZpbGUpLCAmc3RidWYpID09IC0xKQorICAgICBnb3RvIHJzZl9yZXR1cm5fZXJyb3I7CisgICAKKyAgIGlmIChTX0lTUkVHKHN0YnVmLnN0X21vZGUpKQorQEAgLTIxMSw4ICsyMTAsNyBAQAorICAgICogZ2V0IGZpbGVzaXplCisgICAgKi8KKyAgIAorLSAgLyogRklYTUU6IHNob3VsZCBub3QgdXNlIF9maWxlbm8gISAqLworLSAgaWYgKGZzdGF0KGZvbnRmaWxlLT5fZmlsZW5vLCAmc3RidWYpID09IC0xKQorKyAgaWYgKGZzdGF0KGZpbGVubyhmb250ZmlsZSksICZzdGJ1ZikgPT0gLTEpCisgICAgIGdvdG8gcmZnX3JldHVybl9lcnJvcjsKKyAgIAorICAgaWYgKFNfSVNSRUcoc3RidWYuc3RfbW9kZSkpCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY29uc29sZS9hY20uYy5hcmsJMjAwNS0wNS0yMiAxOToxNzoxNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2xpYi9jb25zb2xlL2FjbS5jCTIwMDUtMDUtMjIgMTk6MTc6MjMuMDAwMDAwMDAwICswMDAwCitAQCAtMzAsNyArMzAsNyBAQAorICAgbGN0X2Jvb2xlYW4gcGFyc2VfZmFpbGVkID0gRmFsc2U7CisgICBsY3RfYm9vbGVhbiBpc191bmljb2RlOworIAorLSAgaWYgKGZzdGF0KGZwLT5fZmlsZW5vLCAmc3RidWYpKSAKKysgIGlmIChmc3RhdChmaWxlbm8oZnApLCAmc3RidWYpKSAKKyAgICAgcGVycm9yKF8oIkNhbm5vdCBzdGF0IEFDTSBmaWxlIikpLCBleGl0KDEpOworIAorICAgLyogZmlyc3QgdHJ5IGEgd2cxNS1jaGFybWFwIChnbGliYykgZmlsZSBmb3JtYXQgKi8KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2luY2x1ZGUvbGN0L2xvY2FsLmguYXJrCTIwMDUtMDUtMjIgMTk6MDg6NTQuMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9pbmNsdWRlL2xjdC9sb2NhbC5oCTIwMDUtMDUtMjIgMTk6MDk6MTIuMDAwMDAwMDAwICswMDAwCitAQCAtOCw3ICs4LDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgCistI2lmZGVmIEhBVkVfTE9DQUxFX0gKKysjaWYgZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSAmJiBkZWZpbmVkKEhBVkVfTElCSU5UTF9IKQorICMgaW5jbHVkZSA8bGliaW50bC5oPgorICMgZGVmaW5lIF8oU3RyaW5nKSBnZXR0ZXh0IChTdHJpbmcpCisgIyBpZmRlZiBnZXR0ZXh0X25vb3AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHNfMC4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwYTVhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLmtiZDttZDU9OWIyZDkxNTExZDNkODBkNGQyMGFjNmU2YjAxMzdmZTkiCitTVU1NQVJZID0gIkFsbG93cyB5b3UgdG8gc2V0LXVwIGFuZCBtYW5pcHVsYXRlIHRoZSBMaW51eCBjb25zb2xlIgorREVTQ1JJUFRJT04gPSAiUHJvdmlkZXMgdG9vbHMgdGhhdCBlbmFibGUgdGhlIHNldC11cCBhbmQgbWFuaXB1bGF0aW9uIG9mIHRoZSBsaW51eCBjb25zb2xlIGFuZCBjb25zb2xlLWZvbnQgZmlsZXMuIgorUFIgPSAicjgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xjdC9jb25zb2xlLXRvb2xzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb2RlcGFnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9rYmRyYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy1maWxlbm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8tZGVwLW9uLWxpYmZsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xjbWVzc2FnZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyIKKworU1JDX1VSSVttZDVzdW1dID0gImJmMjE1NjRmYzM4YjNhZjg1M2VmNzI0YmFiZGRiYWNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlYTZiNDQxNjcyZGFjZDI1MTA3OWZjODVlZDMyMmUxOTYyODJlMGU2NmMxNjMwM2VjNjRjM2EyYjFjMTI2YzIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke1N9L200CisJY3AgJHtXT1JLRElSfS9sY21lc3NhZ2UubTQgJHtTfS9tNC8KKwlybSAtZiAke1N9L2FjaW5jbHVkZS5tNAorCWNwICR7V09SS0RJUn0vTWFrZXZhcnMgJHtTfS9wby8KK30KKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworYmluZGlyX3Byb2dzID0gImNodnQgZGVhbGxvY3Z0IGZnY29uc29sZSBvcGVudnQiCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30iCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy02LjktY3AtaS11LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDUyYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaApAQCAtMCwwICsxLDEyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0tCisKK1doZW4gImNwIC1pIC0tdXBkYXRlIG9sZCBuZXciIHdvdWxkIGRvIG5vdGhpbmcgYmVjYXVzZSAibmV3IiBpcworbmV3ZXIgdGhhbiAib2xkIiwgY3Agd291bGQgbm9uZXRoZWxlc3MgcHJvbXB0IGZvciB3aGV0aGVyIGl0IGlzCitvayB0byBvdmVyd3JpdGUgIm5ldyIuICBUaGVuLCByZWdhcmRsZXNzIG9mIHRoZSByZXNwb25zZSAoYmVjYXVzZQorb2YgdGhlIC0tdXBkYXRlIG9wdGlvbiksIGNwIHdvdWxkIGRvIG5vdGhpbmcuCisKK1RoZSBmb2xsb3dpbmcgcGF0Y2ggZWxpbWluYXRlcyB0aGUgdW5uZWNlc3NhcnkgcHJvbXB0IGluIHRoYXQgY2FzZS4KKworZGlmZiAtLWdpdCBhL3NyYy9jb3B5LmMgYi9zcmMvY29weS5jCitpbmRleCBiN2JmNzNiLi4wZTU0OWQyIDEwMDY0NAorLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEyMTAsNiArMTIxMCwzMCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCSAgICAgIHJldHVybiBmYWxzZTsKKyAJICAgIH0KKworKwkgIGlmICghU19JU0RJUiAoc3JjX21vZGUpICYmIHgtPnVwZGF0ZSkKKysJICAgIHsKKysJICAgICAgLyogV2hlbiBwcmVzZXJ2aW5nIHRpbWUgc3RhbXBzIChidXQgbm90IG1vdmluZyB3aXRoaW4gYSBmaWxlCisrCQkgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKysJCSBsZXNzIHRoYW4gdGhlIHNvdXJjZSBtZXJlbHkgYmVjYXVzZSBvZiB0aW1lIHN0YW1wCisrCQkgdHJ1bmNhdGlvbi4gICovCisrCSAgICAgIGludCBvcHRpb25zID0gKCh4LT5wcmVzZXJ2ZV90aW1lc3RhbXBzCisrCQkJICAgICAgJiYgISAoeC0+bW92ZV9tb2RlCisrCQkJCSAgICAmJiBkc3Rfc2Iuc3RfZGV2ID09IHNyY19zYi5zdF9kZXYpKQorKwkJCSAgICAgPyBVVElNRUNNUF9UUlVOQ0FURV9TT1VSQ0UKKysJCQkgICAgIDogMCk7CisrCisrCSAgICAgIGlmICgwIDw9IHV0aW1lY21wIChkc3RfbmFtZSwgJmRzdF9zYiwgJnNyY19zYiwgb3B0aW9ucykpCisrCQl7CisrCQkgIC8qIFdlJ3JlIHVzaW5nIC0tdXBkYXRlIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgbm90IG9sZGVyCisrCQkgICAgIHRoYW4gdGhlIHNvdXJjZSwgc28gZG8gbm90IGNvcHkgb3IgbW92ZS4gIFByZXRlbmQgdGhlCisrCQkgICAgIHJlbmFtZSBzdWNjZWVkZWQsIHNvIHRoZSBjYWxsZXIgKGlmIGl0J3MgbXYpIGRvZXNuJ3QKKysJCSAgICAgZW5kIHVwIHJlbW92aW5nIHRoZSBzb3VyY2UgZmlsZS4gICovCisrCQkgIGlmIChyZW5hbWVfc3VjY2VlZGVkKQorKwkJICAgICpyZW5hbWVfc3VjY2VlZGVkID0gdHJ1ZTsKKysJCSAgcmV0dXJuIHRydWU7CisrCQl9CisrCSAgICB9CisrCisgCSAgLyogV2hlbiB0aGVyZSBpcyBhbiBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlLCB3ZSBtYXkgZW5kIHVwCisgCSAgICAgcmV0dXJuaW5nIGVhcmx5LCBhbmQgaGVuY2Ugbm90IGNvcHlpbmcvbW92aW5nIHRoZSBmaWxlLgorIAkgICAgIFRoaXMgbWF5IGJlIGR1ZSB0byBhbiBpbnRlcmFjdGl2ZSBgbmVnYXRpdmUnIHJlcGx5IHRvIHRoZQorQEAgLTEzMDIsMzAgKzEzMjYsNiBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCQkgICAgICByZXR1cm4gZmFsc2U7CisgCQkgICAgfQorIAkJfQorLQorLQkgICAgICBpZiAoeC0+dXBkYXRlKQorLQkJeworLQkJICAvKiBXaGVuIHByZXNlcnZpbmcgdGltZSBzdGFtcHMgKGJ1dCBub3QgbW92aW5nIHdpdGhpbiBhIGZpbGUKKy0JCSAgICAgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKy0JCSAgICAgbGVzcyB0aGFuIHRoZSBzb3VyY2UgbWVyZWx5IGJlY2F1c2Ugb2YgdGltZSBzdGFtcAorLQkJICAgICB0cnVuY2F0aW9uLiAgKi8KKy0JCSAgaW50IG9wdGlvbnMgPSAoKHgtPnByZXNlcnZlX3RpbWVzdGFtcHMKKy0JCQkJICAmJiAhICh4LT5tb3ZlX21vZGUKKy0JCQkJCSYmIGRzdF9zYi5zdF9kZXYgPT0gc3JjX3NiLnN0X2RldikpCistCQkJCSA/IFVUSU1FQ01QX1RSVU5DQVRFX1NPVVJDRQorLQkJCQkgOiAwKTsKKy0KKy0JCSAgaWYgKDAgPD0gdXRpbWVjbXAgKGRzdF9uYW1lLCAmZHN0X3NiLCAmc3JjX3NiLCBvcHRpb25zKSkKKy0JCSAgICB7CistCQkgICAgICAvKiBXZSdyZSB1c2luZyAtLXVwZGF0ZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG5vdCBvbGRlcgorLQkJCSB0aGFuIHRoZSBzb3VyY2UsIHNvIGRvIG5vdCBjb3B5IG9yIG1vdmUuICBQcmV0ZW5kIHRoZQorLQkJCSByZW5hbWUgc3VjY2VlZGVkLCBzbyB0aGUgY2FsbGVyIChpZiBpdCdzIG12KSBkb2Vzbid0CistCQkJIGVuZCB1cCByZW1vdmluZyB0aGUgc291cmNlIGZpbGUuICAqLworLQkJICAgICAgaWYgKHJlbmFtZV9zdWNjZWVkZWQpCistCQkJKnJlbmFtZV9zdWNjZWVkZWQgPSB0cnVlOworLQkJICAgICAgcmV0dXJuIHRydWU7CistCQkgICAgfQorLQkJfQorIAkgICAgfQorCisgCSAgaWYgKHgtPm1vdmVfbW9kZSkKK2RpZmYgLS1naXQgYS90ZXN0cy9tdi91cGRhdGUgYi90ZXN0cy9tdi91cGRhdGUKK2luZGV4IDBjMDYwMjQuLjZjM2QxNDkgMTAwNzU1CistLS0gYS90ZXN0cy9tdi91cGRhdGUKKysrKyBiL3Rlc3RzL212L3VwZGF0ZQorQEAgLTEsNyArMSw3IEBACisgIyEvYmluL3NoCisgIyBtYWtlIHN1cmUgLS11cGRhdGUgd29ya3MgYXMgYWR2ZXJ0aXNlZAorCistIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CitAQCAtNDYsMTEgKzQ2LDE2IEBAIGZpCisKKyBmYWlsPTAKKworLWZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKy0gICMgVGhpcyBpcyBhIG5vLW9wLgorLSAgJGNwX29yX212IC0tdXBkYXRlIG9sZCBuZXcgfHwgZmFpbD0xCistICBjYXNlICJgY2F0IG5ld2AiIGluIG5ldykgOzsgKikgZmFpbD0xIDs7IGVzYWMKKy0gIGNhc2UgImBjYXQgb2xkYCIgaW4gb2xkKSA7OyAqKSBmYWlsPTEgOzsgZXNhYworK2ZvciBpbnRlcmFjdGl2ZSBpbiAnJyAtaTsgZG8KKysgIGZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKysgICAgIyBUaGlzIGlzIGEgbm8tb3AsIHdpdGggbm8gcHJvbXB0LgorKyAgICAjIFdpdGggY29yZXV0aWxzLTYuOSBhbmQgZWFybGllciwgdXNpbmcgLS11cGRhdGUgd2l0aCAtaSB3b3VsZAorKyAgICAjIG1pc3Rha2VubHkgZWxpY2l0IGEgcHJvbXB0LgorKyAgICAkY3Bfb3JfbXYgJGludGVyYWN0aXZlIC0tdXBkYXRlIG9sZCBuZXcgPCAvZGV2L251bGwgPiBvdXQgMj4mMSB8fCBmYWlsPTEKKysgICAgdGVzdCAtcyBvdXQgJiYgZmFpbD0xCisrICAgIGNhc2UgImBjYXQgbmV3YCIgaW4gbmV3KSA7OyAqKSBmYWlsPTEgOzsgZXNhYworKyAgICBjYXNlICJgY2F0IG9sZGAiIGluIG9sZCkgOzsgKikgZmFpbD0xIDs7IGVzYWMKKysgIGRvbmUKKyBkb25lCisKKyAjIFRoaXMgd2lsbCBhY3R1YWxseSBwZXJmb3JtIHRoZSByZW5hbWUuCistLQorMS41LjMucmMxLjE2Lmc5ZDZmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWJ1aWxkLXdpdGgtYWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzNkNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXggdGhlIGZvbGxvd2luZyBpc3N1ZSBzbyB0aGF0IGNvcmV1dGlscyBjYW4gYnVpbGQgd2l0aCBBQ0w6CisKK2NvbmZpZ3VyZTogV0FSTklORzogbGliYWNsIGRldmVsb3BtZW50IGxpYnJhcnkgd2FzIG5vdCBmb3VuZCBvciBub3QgdXNhYmxlLgorY29uZmlndXJlOiBXQVJOSU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUgYnVpbHQgd2l0aG91dCBBQ0wgc3VwcG9ydC4KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2FjbC5tNCB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L2FjbC5tNCBiL200L2FjbC5tNAoraW5kZXggZDZhNDQ4YS4uYTlkNDgzNiAxMDA2NDQKKy0tLSBhL200L2FjbC5tNAorKysrIGIvbTQvYWNsLm00CitAQCAtMTU5LDcgKzE1OSw3IEBAIEFDX0RFRlVOKFtnbF9BQ0xfR0VUX0ZJTEVdLAorICAgICAgICAgICBdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT1ub10sCistICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBpbGluZ10pXSkKKysgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9eWVzXSldKQorIAorICAgQVNfSUYoW3Rlc3QgJGdsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUgPSB5ZXNdLCBbJDFdLCBbJDJdKQorIF0pCistLSAKKzEuNy43CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmNjFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGUgaW5zdGFsbCBjb21tYW5kIGRvZXNuJ3Qgb3ZlciB3cml0ZSB0aGUgZGFuZ2xpbmcgc3ltbGluaywgZm9yCitleGFtcGxlOgorCiskIGluc3RhbGwgZmlsZUEgL3RtcC9maWxlQQorCitJZiAvdG1wL2ZpbGVBIGlzIGEgZGFuZ2xpbmcgc3ltbGluaywgdGhlcmUgd291bGQgYmUgYW4gZXJyb3I6CisKK2luc3RhbGw6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlICcvdG1wL2ZpbGVBJzogRmlsZSBleGlzdHMKKworVGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBjb3B5LmM6CisKKyAgaWYgKCFuZXdfZHN0KQorICAgIHsKKyAgICAgIGlmIChYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnJvciAoMCwgZXJybm8sIF8oImNhbm5vdCBzdGF0ICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuZXdfZHN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCitYU1RBVCgpIHVzZSBzdGF0KCkgZm9yIGRzdF9uYW1lKHRoZSBkYW5nbGluZyBzeW1saW5rIC90bXAvZmlsZUEpIHdoZW4KK2luc3RhbGwuYyBpbnZva2VzIGl0LCBhbmQgc3RhdCB3aWxsIHNldCBlcnJubyB0byBFTk9FTlQsIGFuZCB0aGVuCituZXdfZHN0IHdpbGwgYmUgc2V0IHRvIHRydWUgd2hpY2ggbWVhbnMgdGhhdCAvdG1wL2ZpbGVBIGRvZXNuJ3QgZXhpc3QsCit0aGVuIHdlIHdpbGwgY3JlYXRlIC90bXAvZmlsZUEgd2l0aG91dCByZW1vdmUgaXQgZmlyc3QsIHNvIHRoZSBlcnJvcgorY29tZXMuCisKK1RoaXMgaXMgZml4ZWQgaW4gYSB3YXkgd2hpY2ggYWRkcyB0aGUgbWVtYmVyIGNtZF9pbnN0YWxsIGluCitzdHJ1Y3QgY3Bfb3B0aW9ucyB0byBtYWtlIHN1cmUgbXkgY2hhbmdlIG9ubHkgYWZmZWN0ZWQgdG8gdGhlIGluc3RhbGwKK2NvbW1hbmQgYW5kIHVzZSBsc3RhdCB0byBmaXggdGhlIHByb2JsZW0uCisgICAgCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL2NvcHkuYyAgICB8ICAgMTAgKysrKysrKysrLQorIHNyYy9jb3B5LmggICAgfCAgICAzICsrKworIHNyYy9pbnN0YWxsLmMgfCAgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29weS5jIGIvc3JjL2NvcHkuYworLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEwMjksNiArMTAyOSw3IEBAIGNvcHlfaW50ZXJuYWwgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAgIGJvb2wgZGVsYXllZF9vazsKKyAgIGJvb2wgY29waWVkX2FzX3JlZ3VsYXIgPSBmYWxzZTsKKyAgIGJvb2wgcHJlc2VydmVfbWV0YWRhdGE7CisrICBpbnQgZHN0X3N0YXRfcmVzdWx0OworIAorICAgaWYgKHgtPm1vdmVfbW9kZSAmJiByZW5hbWVfc3VjY2VlZGVkKQorICAgICAqcmVuYW1lX3N1Y2NlZWRlZCA9IGZhbHNlOworQEAgLTEwNjksNyArMTA3MCwxNCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCisgICBpZiAoIW5ld19kc3QpCisgICAgIHsKKy0gICAgICBpZiAoWFNUQVQgKHgsIGRzdF9uYW1lLCAmZHN0X3NiKSAhPSAwKQorKyAgICAgIGlmICggeC0+Y21kX2luc3RhbGwgJiYgKCB4LT5iYWNrdXBfdHlwZSA9PSBub19iYWNrdXBzKSkKKysgICAgICAgIGRzdF9zdGF0X3Jlc3VsdCA9IGxzdGF0IChkc3RfbmFtZSwgJmRzdF9zYik7CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBkc3Rfc3RhdF9yZXN1bHQgPSBYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpOworKyAgICAgICAgfQorKworKyAgICAgIGlmIChkc3Rfc3RhdF9yZXN1bHQgIT0gMCkKKyAJeworIAkgIGlmIChlcnJubyAhPSBFTk9FTlQpCisgCSAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuaCBiL3NyYy9jb3B5LmgKKy0tLSBhL3NyYy9jb3B5LmgKKysrKyBiL3NyYy9jb3B5LmgKK0BAIC0xMTQsNiArMTE0LDkgQEAgc3RydWN0IGNwX29wdGlvbnMKKyAgICAgIElmIHRoYXQgZmFpbHMsIHRoZW4gcmVzb3J0IHRvIGNvcHlpbmcuICAqLworICAgYm9vbCBtb3ZlX21vZGU7CisgCisrICAvKiBGb3IgdGhlIGluc3RhbGwgY29tbWFuZCAqLworKyAgYm9vbCBjbWRfaW5zdGFsbDsKKysKKyAgIC8qIFdoZXRoZXIgdGhpcyBwcm9jZXNzIGhhcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIHRvIGNob3duIGEgZmlsZQorICAgICAgd2hvc2Ugb3duZXIgaXMgbm90IHRoZSBlZmZlY3RpdmUgdXNlciBJRC4gICovCisgICBib29sIGNob3duX3ByaXZpbGVnZXM7CitkaWZmIC0tZ2l0IGEvc3JjL2luc3RhbGwuYyBiL3NyYy9pbnN0YWxsLmMKKy0tLSBhL3NyYy9pbnN0YWxsLmMKKysrKyBiL3NyYy9pbnN0YWxsLmMKK0BAIC0xNDksNiArMTQ5LDcgQEAgY3Bfb3B0aW9uX2luaXQgKHN0cnVjdCBjcF9vcHRpb25zICp4KQorICAgeC0+aGFyZF9saW5rID0gZmFsc2U7CisgICB4LT5pbnRlcmFjdGl2ZSA9IElfVU5TUEVDSUZJRUQ7CisgICB4LT5tb3ZlX21vZGUgPSBmYWxzZTsKKysgIHgtPmNtZF9pbnN0YWxsID0gdHJ1ZTsKKyAgIHgtPmNob3duX3ByaXZpbGVnZXMgPSBjaG93bl9wcml2aWxlZ2VzICgpOworICAgeC0+b25lX2ZpbGVfc3lzdGVtID0gZmFsc2U7CisgICB4LT5wcmVzZXJ2ZV9vd25lcnNoaXAgPSBmYWxzZTsKKy0tIAorMS43LjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC10ZXhpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZTVhMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaApAQCAtMCwwICsxLDM3NSBAQAorRnJvbSAxNzBiZTQwMjNiYmY5ZTk2OThhNzA5ZTAzMjY1OTQ1NTg4YWM4ZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IE5vdiAyMDEzIDAwOjIxOjUwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvYy9jb3JldXRpbHMudGV4aTogVXNlICdAaXRlbScgaW5zdGVhZCBvZiAnQGl0ZW14JworCitVc2UgJ0BpdGVtJyBpbnN0ZWFkIG9mICdAaXRlbXgnIGluIHNldmVyYWwgcGxhY2VzLCBhcyBUZXhpbmZvIDUgcmVmdXNlcwordG8gcHJvY2VzcyBhbiAnQGl0ZW14JyB0aGF0IGlzIG5vdCBwcmVjZWRlZCBieSBhbiAnQGl0ZW0nLiAgRW5zdXJlIHRoYXQKK25vZGUgZXh0ZW5kZWQgbmFtZXMgaW4gbWVudXMgYW5kIHNlY3Rpb25pbmcgYXJlIGNvbnNpc3RlbnQsIGFuZCB0aGF0CitvcmRlcmluZyBhbmQgcHJlc2VuY2Ugb2Ygbm9kZXMgaW4gbWVudXMgYW5kIGluIHRoZSBhY3R1YWwgdGV4dCBhcmUKK2NvbnNpc3RlbnQgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbRnJvbTogY29yZXV0aWxzLjc2MjAubjcubmFiYmxlLmNvbSwgYnVnIzExODI4XQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9jb3JldXRpbHMudGV4aSB8IDgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9jb3JldXRpbHMudGV4aSBiL2RvYy9jb3JldXRpbHMudGV4aQoraW5kZXggNTg4MTQ3Zi4uMmRhZTNmZSAxMDA2NDQKKy0tLSBhL2RvYy9jb3JldXRpbHMudGV4aQorKysrIGIvZG9jL2NvcmV1dGlscy50ZXhpCitAQCAtNTU1LDcgKzU1NSw3IEBAIHN5bWJvbGljIGxpbmsgdG8gYSBkaXJlY3RvcnkuICBAeHJlZntUYXJnZXQgZGlyZWN0b3J5fS4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFNpCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TX0gZm9yCitAQCAtNTc4LDcgKzU3OCw3IEBAIFVzZSB0aGUgQG9wdGlvbnstLXNpfSBvcHRpb24gaWYgeW91IHByZWZlciBwb3dlcnMgb2YgMTAwMC4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFN0cmlwVHJhaWxpbmdTbGFzaGVzCistQGl0ZW14IEB3e0BrYmR7LS1zdHJpcC10cmFpbGluZy1zbGFzaGVzfX0KKytAaXRlbSBAd3tAa2Jkey0tc3RyaXAtdHJhaWxpbmctc2xhc2hlc319CisgQG9waW5kZXggLS1zdHJpcC10cmFpbGluZy1zbGFzaGVzCisgQGNpbmRleCBzdHJpcHBpbmcgdHJhaWxpbmcgc2xhc2hlcworIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGVhY2ggQHZhcntzb3VyY2V9IGFyZ3VtZW50LgorQEAgLTI0OTYsNyArMjQ5Niw3IEBAIGJ5IDEwNDg1NzYuCisgSG93ZXZlciwgaWYgQHZhcntufSBzdGFydHMgd2l0aCBhIEBzYW1wey19LAorIHByaW50IGFsbCBidXQgdGhlIGxhc3QgQHZhcntufSBieXRlcyBvZiBlYWNoIGZpbGUuCisgCistQGl0ZW14IC1uIEB2YXJ7bn0KKytAaXRlbSAtbiBAdmFye259CisgQGl0ZW14IC0tbGluZXM9QHZhcntufQorIEBvcGluZGV4IC1uCisgQG9waW5kZXggLS1saW5lcworQEAgLTI2MzMsNyArMjYzMyw3IEBAIFRoaXMgb3B0aW9uIGlzIHRoZSBzYW1lIGFzIEBvcHRpb257LS1mb2xsb3c9bmFtZSAtLXJldHJ5fS4gIFRoYXQgaXMsIHRhaWwKKyB3aWxsIGF0dGVtcHQgdG8gcmVvcGVuIGEgZmlsZSB3aGVuIGl0IGlzIHJlbW92ZWQuICBTaG91bGQgdGhpcyBmYWlsLCB0YWlsCisgd2lsbCBrZWVwIHRyeWluZyB1bnRpbCBpdCBiZWNvbWVzIGFjY2Vzc2libGUgYWdhaW4uCisgCistQGl0ZW14IC0tcmV0cnkKKytAaXRlbSAtLXJldHJ5CisgQG9waW5kZXggLS1yZXRyeQorIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBtYWlubHkgd2hlbiBmb2xsb3dpbmcgYnkgbmFtZSAoaS5lLiwgd2l0aAorIEBvcHRpb257LS1mb2xsb3c9bmFtZX0pLgorQEAgLTI2NDEsNyArMjY0MSw3IEBAIFdpdGhvdXQgdGhpcyBvcHRpb24sIHdoZW4gdGFpbCBlbmNvdW50ZXJzIGEgZmlsZSB0aGF0IGRvZXNuJ3QKKyBleGlzdCBvciBpcyBvdGhlcndpc2UgaW5hY2Nlc3NpYmxlLCBpdCByZXBvcnRzIHRoYXQgZmFjdCBhbmQKKyBuZXZlciBjaGVja3MgaXQgYWdhaW4uCisgCistQGl0ZW14IC0tc2xlZXAtaW50ZXJ2YWw9QHZhcntudW1iZXJ9CisrQGl0ZW0gLS1zbGVlcC1pbnRlcnZhbD1AdmFye251bWJlcn0KKyBAb3BpbmRleCAtLXNsZWVwLWludGVydmFsCisgQ2hhbmdlIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gaXRlcmF0aW9ucyAodGhlIGRlZmF1bHQgaXMgMS4wKS4KKyBEdXJpbmcgb25lIGl0ZXJhdGlvbiwgZXZlcnkgc3BlY2lmaWVkIGZpbGUgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQgaGFzCitAQCAtMjY1MSw3ICsyNjUxLDcgQEAgSGlzdG9yaWNhbCBpbXBsZW1lbnRhdGlvbnMgb2YgQGNvbW1hbmR7dGFpbH0gaGF2ZSByZXF1aXJlZCB0aGF0CisgYW4gYXJiaXRyYXJ5IGZsb2F0aW5nIHBvaW50IG51bWJlciAodXNpbmcgYSBwZXJpb2QgYmVmb3JlIGFueQorIGZyYWN0aW9uYWwgZGlnaXRzKS4KKyAKKy1AaXRlbXggLS1waWQ9QHZhcntwaWR9CisrQGl0ZW0gLS1waWQ9QHZhcntwaWR9CisgQG9waW5kZXggLS1waWQKKyBXaGVuIGZvbGxvd2luZyBieSBuYW1lIG9yIGJ5IGRlc2NyaXB0b3IsIHlvdSBtYXkgc3BlY2lmeSB0aGUgcHJvY2VzcyBJRCwKKyBAdmFye3BpZH0sIG9mIHRoZSBzb2xlIHdyaXRlciBvZiBhbGwgQHZhcntmaWxlfSBhcmd1bWVudHMuICBUaGVuLCBzaG9ydGx5CitAQCAtMjY3NCw3ICsyNjc0LDcgQEAgdGVybWluYXRlIHVudGlsIGxvbmcgYWZ0ZXIgdGhlIHJlYWwgd3JpdGVyIGhhcyB0ZXJtaW5hdGVkLgorIE5vdGUgdGhhdCBAb3B0aW9uey0tcGlkfSBjYW5ub3QgYmUgc3VwcG9ydGVkIG9uIHNvbWUgc3lzdGVtczsgQGNvbW1hbmR7dGFpbH0KKyB3aWxsIHByaW50IGEgd2FybmluZyBpZiB0aGlzIGlzIHRoZSBjYXNlLgorIAorLUBpdGVteCAtLW1heC11bmNoYW5nZWQtc3RhdHM9QHZhcntufQorK0BpdGVtIC0tbWF4LXVuY2hhbmdlZC1zdGF0cz1AdmFye259CisgQG9waW5kZXggLS1tYXgtdW5jaGFuZ2VkLXN0YXRzCisgV2hlbiB0YWlsaW5nIGEgZmlsZSBieSBuYW1lLCBpZiB0aGVyZSBoYXZlIGJlZW4gQHZhcntufSAoZGVmYXVsdAorIG49QHZhbHVle0RFRkFVTFRfTUFYX05fVU5DSEFOR0VEX1NUQVRTX0JFVFdFRU5fT1BFTlN9KSBjb25zZWN1dGl2ZQorQEAgLTI2ODYsNyArMjY4Niw3IEBAIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gd2hlbiB0YWlsIHByaW50cyB0aGUgbGFzdCBwcmUtcm90YXRpb24gbGluZXMKKyBhbmQgd2hlbiBpdCBwcmludHMgdGhlIGxpbmVzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCBpbiB0aGUgbmV3IGxvZyBmaWxlLgorIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGZvbGxvd2luZyBieSBuYW1lLgorIAorLUBpdGVteCAtbiBAdmFye259CisrQGl0ZW0gLW4gQHZhcntufQorIEBpdGVteCAtLWxpbmVzPUB2YXJ7bn0KKyBAb3BpbmRleCAtbgorIEBvcGluZGV4IC0tbGluZXMKK0BAIC0yODE3LDcgKzI4MTcsNyBAQCBvcHRpb24uCisgQG9waW5kZXggLS1udW1lcmljLXN1ZmZpeGVzCisgVXNlIGRpZ2l0cyBpbiBzdWZmaXhlcyByYXRoZXIgdGhhbiBsb3dlci1jYXNlIGxldHRlcnMuCisgCistQGl0ZW14IC0tdmVyYm9zZQorK0BpdGVtIC0tdmVyYm9zZQorIEBvcGluZGV4IC0tdmVyYm9zZQorIFdyaXRlIGEgZGlhZ25vc3RpYyB0byBzdGFuZGFyZCBlcnJvciBqdXN0IGJlZm9yZSBlYWNoIG91dHB1dCBmaWxlIGlzIG9wZW5lZC4KKyAKK0BAIC0zMDU1LDcgKzMwNTUsNyBAQCBQcmludCBvbmx5IHRoZSBuZXdsaW5lIGNvdW50cy4KKyBAb3BpbmRleCAtLW1heC1saW5lLWxlbmd0aAorIFByaW50IG9ubHkgdGhlIG1heGltdW0gbGluZSBsZW5ndGhzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTMyNTAsNyArMzI1MCw3IEBAIGFuIE1ENSBjaGVja3N1bSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzb2NpYXRlZCBmaWxlLCBvciBpZiBubyB2YWxpZAorIGxpbmUgaXMgZm91bmQsIEBjb21tYW5ke21kNXN1bX0gZXhpdHMgd2l0aCBub256ZXJvIHN0YXR1cy4gIE90aGVyd2lzZSwKKyBpdCBleGl0cyBzdWNjZXNzZnVsbHkuCisgCistQGl0ZW14IC0tc3RhdHVzCisrQGl0ZW0gLS1zdGF0dXMKKyBAb3BpbmRleCAtLXN0YXR1cworIEBjaW5kZXggdmVyaWZ5aW5nIE1ENSBjaGVja3N1bXMKKyBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgb25seSB3aGVuIHZlcmlmeWluZyBjaGVja3N1bXMuCitAQCAtNTgzNyw3ICs1ODM3LDcgQEAgY29tbWFuZCBsaW5lIHVubGVzcyB0aGUgQG9wdGlvbnstLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZX0gKEBvcHRpb257LUh9KSwKKyBJZiBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCBzcGVjaWZpZXMgYSBzeW1ib2xpYyBsaW5rLCBzaG93IGluZm9ybWF0aW9uCisgZm9yIHRoZSBmaWxlIHRoZSBsaW5rIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gZm9yIHRoZSBsaW5rIGl0c2VsZi4KKyAKKy1AaXRlbXggLS1kZXJlZmVyZW5jZS1jb21tYW5kLWxpbmUtc3ltbGluay10by1kaXIKKytAaXRlbSAtLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZS1zeW1saW5rLXRvLWRpcgorIEBvcGluZGV4IC0tZGVyZWZlcmVuY2UtY29tbWFuZC1saW5lLXN5bWxpbmstdG8tZGlyCisgQGNpbmRleCBzeW1ib2xpYyBsaW5rcywgZGVyZWZlcmVuY2luZworIERvIG5vdCBkZXJlZmVyZW5jZSBzeW1ib2xpYyBsaW5rcywgd2l0aCBvbmUgZXhjZXB0aW9uOgorQEAgLTcwMTUsMTUgKzcwMTUsMTUgQEAgSWYgc3BlY2lmaWVkLCB0aGUgQHZhcnthdHRyaWJ1dGVfbGlzdH0gbXVzdCBiZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0Cisgb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgorIAorIEB0YWJsZSBAc2FtcAorLUBpdGVteCBtb2RlCisrQGl0ZW0gbW9kZQorIFByZXNlcnZlIHRoZSBmaWxlIG1vZGUgYml0cyBhbmQgYWNjZXNzIGNvbnRyb2wgbGlzdHMuCistQGl0ZW14IG93bmVyc2hpcAorK0BpdGVtIG93bmVyc2hpcAorIFByZXNlcnZlIHRoZSBvd25lciBhbmQgZ3JvdXAuICBPbiBtb3N0IG1vZGVybiBzeXN0ZW1zLAorIG9ubHkgdXNlcnMgd2l0aCBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIG1heSBjaGFuZ2UgdGhlIG93bmVyIG9mIGEgZmlsZSwKKyBhbmQgb3JkaW5hcnkgdXNlcnMKKyBtYXkgcHJlc2VydmUgdGhlIGdyb3VwIG93bmVyc2hpcCBvZiBhIGZpbGUgb25seSBpZiB0aGV5IGhhcHBlbiB0byBiZQorIGEgbWVtYmVyIG9mIHRoZSBkZXNpcmVkIGdyb3VwLgorLUBpdGVteCB0aW1lc3RhbXBzCisrQGl0ZW0gdGltZXN0YW1wcworIFByZXNlcnZlIHRoZSB0aW1lcyBvZiBsYXN0IGFjY2VzcyBhbmQgbGFzdCBtb2RpZmljYXRpb24sIHdoZW4gcG9zc2libGUuCisgSW4gZ2VuZXJhbCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHByZXNlcnZlIHRoZXNlIGF0dHJpYnV0ZXMKKyB3aGVuIHRoZSBhZmZlY3RlZCBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KK0BAIC03MDMxLDEyICs3MDMxLDEyIEBAIEhvd2V2ZXIsIEZyZWVCU0Qgbm93IHByb3ZpZGVzIHRoZSBAY29kZXtsdXRpbWVzfSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMKKyBpdCBwb3NzaWJpbGUgZXZlbiBmb3Igc3ltYm9saWMgbGlua3MuICBIb3dldmVyLCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMKKyBub3QgeWV0IHRha2UgYWR2YW50YWdlIG9mIHRoYXQuCisgQGMgRklYTUU6IG9uY2Ugd2UgcHJvdmlkZSBsdXRpbWVzIHN1cHBvcnQsIHVwZGF0ZSB0aGUgYWJvdmUuCistQGl0ZW14IGxpbmtzCisrQGl0ZW0gbGlua3MKKyBQcmVzZXJ2ZSBpbiB0aGUgZGVzdGluYXRpb24gZmlsZXMKKyBhbnkgbGlua3MgYmV0d2VlbiBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlcy4KKyBAYyBHaXZlIGV4YW1wbGVzIGlsbHVzdHJhdGluZyBob3cgaGFyZCBsaW5rcyBhcmUgcHJlc2VydmVkLgorIEBjIEFsc28sIHNob3cgaG93IHNvZnQgbGlua3MgbWFwIHRvIGhhcmQgbGlua3Mgd2l0aCAtTCBhbmQgLUguCistQGl0ZW14IGFsbAorK0BpdGVtIGFsbAorIFByZXNlcnZlIGFsbCBmaWxlIGF0dHJpYnV0ZXMuCisgRXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGFsbCBvZiB0aGUgYWJvdmUuCisgQGVuZCB0YWJsZQorQEAgLTcwNDksMTIgKzcwNDksMTIgQEAgbW9kZSBiaXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlLCBtaW51cyB0aGUgYml0cyBzZXQgaW4gdGhlCisgdW1hc2sgYW5kIG1pbnVzIHRoZSBzZXQtdXNlci1JRCBhbmQgc2V0LWdyb3VwLUlEIGJpdHMuCisgQHhyZWZ7RmlsZSBwZXJtaXNzaW9uc30uCisgCistQGl0ZW14IEB3e0BrYmR7LS1uby1wcmVzZXJ2ZX09QHZhcnthdHRyaWJ1dGVfbGlzdH19CisrQGl0ZW0gQHd7QGtiZHstLW5vLXByZXNlcnZlfT1AdmFye2F0dHJpYnV0ZV9saXN0fX0KKyBAY2luZGV4IGZpbGUgaW5mb3JtYXRpb24sIHByZXNlcnZpbmcKKyBEbyBub3QgcHJlc2VydmUgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiAgVGhlIEB2YXJ7YXR0cmlidXRlX2xpc3R9CisgaGFzIHRoZSBzYW1lIGZvcm0gYXMgZm9yIEBvcHRpb257LS1wcmVzZXJ2ZX0uCisgCistQGl0ZW14IC0tcGFyZW50cworK0BpdGVtIC0tcGFyZW50cworIEBvcGluZGV4IC0tcGFyZW50cworIEBjaW5kZXggcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBAY29tbWFuZHtjcH0KKyBGb3JtIHRoZSBuYW1lIG9mIGVhY2ggZGVzdGluYXRpb24gZmlsZSBieSBhcHBlbmRpbmcgdG8gdGhlIHRhcmdldAorQEAgLTcwNzAsNyArNzA3MCw3IEBAIGNwIC0tcGFyZW50cyBhL2IvYyBleGlzdGluZ19kaXIKKyBjb3BpZXMgdGhlIGZpbGUgQGZpbGV7YS9iL2N9IHRvIEBmaWxle2V4aXN0aW5nX2Rpci9hL2IvY30sIGNyZWF0aW5nCisgYW55IG1pc3NpbmcgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzc0Miw3ICs3NzQyLDcgQEAgUHJvbXB0IHdoZXRoZXIgdG8gb3ZlcndyaXRlIGVhY2ggZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSwgcmVnYXJkbGVzcworIG9mIGl0cyBwZXJtaXNzaW9ucy4KKyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGFmZmlybWF0aXZlLCB0aGUgZmlsZSBpcyBza2lwcGVkLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzg0Nyw3ICs3ODQ3LDcgQEAgZmlsZXMgYXJlIG5hbWVkIG9yIGlmIGEgcmVjdXJzaXZlIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgSWdub3JlIGFueQorIHByZXZpb3VzIEBvcHRpb257LS1mb3JjZX0gKEBvcHRpb257LWZ9KSBvcHRpb24uICBFcXVpdmFsZW50IHRvCisgQG9wdGlvbnstLWludGVyYWN0aXZlPW9uY2V9LgorIAorLUBpdGVteCAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKytAaXRlbSAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKyBAb3BpbmRleCAtLWludGVyYWN0aXZlCisgU3BlY2lmeSB3aGVuIHRvIGlzc3VlIGFuIGludGVyYWN0aXZlIHByb21wdC4gIEB2YXJ7d2hlbn0gbWF5IGJlCisgb21pdHRlZCwgb3Igb25lIG9mOgorQEAgLTc4NjYsNyArNzg2Niw3IEBAIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgRXF1aXZhbGVudCB0byBAb3B0aW9uey1JfS4KKyBTcGVjaWZ5aW5nIEBvcHRpb257LS1pbnRlcmFjdGl2ZX0gYW5kIG5vIEB2YXJ7d2hlbn0gaXMgZXF1aXZhbGVudCB0bworIEBvcHRpb257LS1pbnRlcmFjdGl2ZT1hbHdheXN9LgorIAorLUBpdGVteCAtLW9uZS1maWxlLXN5c3RlbQorK0BpdGVtIC0tb25lLWZpbGUtc3lzdGVtCisgQG9waW5kZXggLS1vbmUtZmlsZS1zeXN0ZW0KKyBAY2luZGV4IG9uZSBmaWxlIHN5c3RlbSwgcmVzdHJpY3RpbmcgQGNvbW1hbmR7cm19IHRvCisgV2hlbiByZW1vdmluZyBhIGhpZXJhcmNoeSByZWN1cnNpdmVseSwgc2tpcCBhbnkgZGlyZWN0b3J5IHRoYXQgaXMgb24gYQorQEAgLTc4ODQsNyArNzg4NCw3IEBAIHdhcm4gYWJvdXQgYW5kIHNraXAgZGlyZWN0b3JpZXMgb24gb3RoZXIgZmlsZSBzeXN0ZW1zLgorIE9mIGNvdXJzZSwgdGhpcyB3aWxsIG5vdCBzYXZlIHlvdXIgQGZpbGV7L2hvbWV9IGlmIGl0IGFuZCB5b3VyCisgY2hyb290IGhhcHBlbiB0byBiZSBvbiB0aGUgc2FtZSBmaWxlIHN5c3RlbS4KKyAKKy1AaXRlbXggLS1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgZGlzYWxsb3cgcmVjdXJzaXZlIGRlc3RydWN0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LAorQEAgLTc4OTIsNyArNzg5Miw3IEBAIHdoZW4gdXNlZCB3aXRoIHRoZSBAb3B0aW9uey0tcmVjdXJzaXZlfSBvcHRpb24uCisgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBkZXN0cnVjdGlvbgorIERvIG5vdCB0cmVhdCBAZmlsZXsvfSBzcGVjaWFsbHkgd2hlbiByZW1vdmluZyByZWN1cnNpdmVseS4KK0BAIC04ODc0LDcgKzg4NzQsNyBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBvd25lcnNoaXAgY2Fubm90IGJlCisgY2hhbmdlZC4KKyAKKy1AaXRlbXggQHd7QGtiZHstLWZyb219PUB2YXJ7b2xkLW93bmVyfX0KKytAaXRlbSBAd3tAa2Jkey0tZnJvbX09QHZhcntvbGQtb3duZXJ9fQorIEBvcGluZGV4IC0tZnJvbQorIEBjaW5kZXggc3ltYm9saWMgbGlua3MsIGNoYW5naW5nIG93bmVyCisgQ2hhbmdlIGEgQHZhcntmaWxlfSdzIG93bmVyc2hpcCBvbmx5IGlmIGl0IGhhcyBjdXJyZW50IGF0dHJpYnV0ZXMgc3BlY2lmaWVkCitAQCAtODkyOCwxNCArODkyOCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTA1NCwxNCArOTA1NCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTE3NSwxNCArOTE3NSwxNCBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBwZXJtaXNzaW9ucyBjYW5ub3QgYmUKKyBjaGFuZ2VkLgorIAorLUBpdGVteCAtLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBkaXNhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlY3Vyc2l2ZWx5IGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LgorIFdpdGhvdXQgQG9wdGlvbnstLXJlY3Vyc2l2ZX0sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisgQHhyZWZ7VHJlYXRpbmcgLyBzcGVjaWFsbHl9LgorIAorLUBpdGVteCAtLW5vLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLW5vLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLW5vLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgQ2FuY2VsIHRoZSBlZmZlY3Qgb2YgYW55IHByZWNlZGluZyBAb3B0aW9uey0tcHJlc2VydmUtcm9vdH0gb3B0aW9uLgorQEAgLTk2MDMsNyArOTYwMyw3IEBAIFRoZSBwcm9ncmFtIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zLiAgQWxzbyBzZWUgQHJlZntDb21tb24gb3B0aW9uc30uCisgQG9waW5kZXggLS1hbGwKKyBTaG93IGNvdW50cyBmb3IgYWxsIGZpbGVzLCBub3QganVzdCBkaXJlY3Rvcmllcy4KKyAKKy1AaXRlbXggLS1hcHBhcmVudC1zaXplCisrQGl0ZW0gLS1hcHBhcmVudC1zaXplCisgQG9waW5kZXggLS1hcHBhcmVudC1zaXplCisgUHJpbnQgYXBwYXJlbnQgc2l6ZXMsIHJhdGhlciB0aGFuIGRpc2sgdXNhZ2UuICBUaGUgYXBwYXJlbnQgc2l6ZSBvZiBhCisgZmlsZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcG9ydGVkIGJ5IEBjb2Rle3djIC1jfSBvbiByZWd1bGFyIGZpbGVzLAorQEAgLTk2NTQsNyArOTY1NCw3IEBAIERvZXMgbm90IGFmZmVjdCBvdGhlciBzeW1ib2xpYyBsaW5rcy4gIFRoaXMgaXMgaGVscGZ1bCBmb3IgZmluZGluZworIG91dCB0aGUgZGlzayB1c2FnZSBvZiBkaXJlY3Rvcmllcywgc3VjaCBhcyBAZmlsZXsvdXNyL3RtcH0sIHdoaWNoCisgYXJlIG9mdGVuIHN5bWJvbGljIGxpbmtzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTk3MzMsNyArOTczMyw3IEBAIE91dHB1dCBhIG51bGwgYnl0ZSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSwgcmF0aGVyIHRoYW4gYSBuZXdsaW5lLgorIFRoaXMgb3B0aW9uIGVuYWJsZXMgb3RoZXIgcHJvZ3JhbXMgdG8gcGFyc2UgdGhlIG91dHB1dCBvZiBAY29tbWFuZHtkdX0KKyBldmVuIHdoZW4gdGhhdCBvdXRwdXQgd291bGQgY29udGFpbiBmaWxlIG5hbWVzIHdpdGggZW1iZWRkZWQgbmV3bGluZXMuCisgCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TUJ9IGZvcgorQEAgLTk3NTQsMTMgKzk3NTQsMTMgQEAgRGlzcGxheSBvbmx5IGEgdG90YWwgZm9yIGVhY2ggYXJndW1lbnQuCisgUmVwb3J0IHRoZSBzaXplIG9mIGVhY2ggZGlyZWN0b3J5IHNlcGFyYXRlbHksIG5vdCBpbmNsdWRpbmcgdGhlIHNpemVzCisgb2Ygc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZQorK0BpdGVtIC0tdGltZQorIEBvcGluZGV4IC0tdGltZQorIEBjaW5kZXggbGFzdCBtb2RpZmllZCBkYXRlcywgZGlzcGxheWluZyBpbiBAY29tbWFuZHtkdX0KKyBTaG93IHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50IG1vZGlmaWNhdGlvbiBvZiBhbnkgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LAorIG9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZT1jdGltZQorK0BpdGVtIC0tdGltZT1jdGltZQorIEBpdGVteCAtLXRpbWU9c3RhdHVzCisgQGl0ZW14IC0tdGltZT11c2UKKyBAb3BpbmRleCAtLXRpbWUKK0BAIC05NzcwLDcgKzk3NzAsNyBAQCBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzLgorIFNob3cgdGhlIG1vc3QgcmVjZW50IHN0YXR1cyBjaGFuZ2UgdGltZSAodGhlIEBzYW1we2N0aW1lfSBpbiB0aGUgaW5vZGUpIG9mCisgYW55IGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUuCisgCistQGl0ZW14IC0tdGltZT1hdGltZQorK0BpdGVtIC0tdGltZT1hdGltZQorIEBpdGVteCAtLXRpbWU9YWNjZXNzCisgQG9waW5kZXggLS10aW1lCisgQG9waW5kZXggYXRpbWVAcnssIHNob3cgdGhlIG1vc3QgcmVjZW50fQorQEAgLTk5MTEsNyArOTkxMSw3IEBAICQgc3RhdCAtLWZvcm1hdD0lZDolaSAvIC91c3IKKyAyMDU3OjIKKyBAZW5kIGV4YW1wbGUKKyAKKy1AaXRlbXggLS1wcmludGY9QHZhcntmb3JtYXR9CisrQGl0ZW0gLS1wcmludGY9QHZhcntmb3JtYXR9CisgQG9waW5kZXggLS1wcmludGY9QHZhcntmb3JtYXR9CisgQGNpbmRleCBvdXRwdXQgZm9ybWF0CisgVXNlIEB2YXJ7Zm9ybWF0fSByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBmb3JtYXQuCitAQCAtMTIyNDAsNyArMTIyNDAsNyBAQCBPdmVycmlkZXMgYWxsIG90aGVyIG9wdGlvbnMuCisgQG9waW5kZXggLXMKKyBJZ25vcmVkOyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHZlcnNpb25zIG9mIEBjb21tYW5ke3dob30uCisgCistQGl0ZW14IC11CisrQGl0ZW0gLXUKKyBAb3BpbmRleCAtdQorIEBjaW5kZXggaWRsZSB0aW1lCisgQWZ0ZXIgdGhlIGxvZ2luIHRpbWUsIHByaW50IHRoZSBudW1iZXIgb2YgaG91cnMgYW5kIG1pbnV0ZXMgdGhhdCB0aGUKK0BAIC0xMjI1NCw3ICsxMjI1NCw3IEBAIHVzZXIgaGFzIGJlZW4gaWRsZS4gIEBzYW1wey59IG1lYW5zIHRoZSB1c2VyIHdhcyBhY3RpdmUgaW4gdGhlIGxhc3QgbWludXRlLgorIExpc3Qgb25seSB0aGUgZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJvY2Vzc2VzIHZpYSB3aGljaCB0aGUKKyBzeXN0ZW0gaXMgd2FpdGluZyBmb3IgYSB1c2VyIHRvIGxvZ2luLiAgVGhlIHVzZXIgbmFtZSBpcyBhbHdheXMgQHNhbXB7TE9HSU59LgorIAorLUBpdGVteCAtLWxvb2t1cAorK0BpdGVtIC0tbG9va3VwCisgQG9waW5kZXggLS1sb29rdXAKKyBBdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBob3N0bmFtZXMgZm91bmQgaW4gdXRtcCB0aHJvdWdoIGEgRE5TIGxvb2t1cC4gIFRoaXMKKyBpcyBub3QgdGhlIGRlZmF1bHQgYmVjYXVzZSBpdCBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgZGVsYXlzIG9uIHN5c3RlbXMgd2l0aAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWkxOG4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzcyMjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoCkBAIC0wLDAgKzEsNDA1MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIHB1cnBvc2UgaXMgbGluMThudXgvbHNiIGNvbXBsaWFuY2UuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvc29ydC1tYi10ZXN0cwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw1OCBAQAorKyMhIC9iaW4vc2gKKytjYXNlICQjIGluCisrICAwKSB4eD0nLi4vLi4vc3JjL3NvcnQnOzsKKysgICopIHh4PSIkMSI7OworK2VzYWMKKyt0ZXN0ICIkVkVSQk9TRSIgJiYgZWNobz1lY2hvIHx8IGVjaG89OgorKyRlY2hvIHRlc3RpbmcgcHJvZ3JhbTogJHh4CisrZXJyb3JzPTAKKyt0ZXN0ICIkc3JjZGlyIiB8fCBzcmNkaXI9LgorK3Rlc3QgIiRWRVJCT1NFIiAmJiAkeHggLS12ZXJzaW9uIDI+IC9kZXYvbnVsbAorKworK2V4cG9ydCBMQ19BTEw9ZW5fVVMuVVRGLTgKKytsb2NhbGUgLWsgTENfQ1RZUEUgMj4mMSB8IGdyZXAgLXEgY2hhcm1hcC4qVVRGLTggfHwgZXhpdCA3NworK2Vycm9ycz0wCisrCisrJHh4IC10IO+8oCAtazIgLW4gbWIxLkkgPiBtYjEuTworK2NvZGU9JD8KKytpZiB0ZXN0ICRjb2RlICE9IDA7IHRoZW4KKysgICRlY2hvICJUZXN0IG1iMSBmYWlsZWQ6ICR4eCByZXR1cm4gY29kZSAkY29kZSBkaWZmZXJzIGZyb20gZXhwZWN0ZWQgdmFsdWUgMCIgMT4mMgorKyAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYAorK2Vsc2UKKysgIGNtcCBtYjEuTyAkc3JjZGlyL21iMS5YID4gL2Rldi9udWxsIDI+JjEKKysgIGNhc2UgJD8gaW4KKysgICAgMCkgaWYgdGVzdCAiJFZFUkJPU0UiOyB0aGVuICRlY2hvICJwYXNzZWQgbWIxIjsgZmk7OworKyAgICAxKSAkZWNobyAiVGVzdCBtYjEgZmFpbGVkOiBmaWxlcyBtYjEuTyBhbmQgJHNyY2Rpci9tYjEuWCBkaWZmZXIiIDE+JjIKKysgICAgICAgKGRpZmYgLWMgbWIxLk8gJHNyY2Rpci9tYjEuWCkgMj4gL2Rldi9udWxsCisrICAgICAgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWA7OworKyAgICAyKSAkZWNobyAiVGVzdCBtYjEgbWF5IGhhdmUgZmFpbGVkLiIgMT4mMgorKyAgICAgICAkZWNobyBUaGUgY29tbWFuZCAiY21wIG1iMS5PICRzcmNkaXIvbWIxLlgiIGZhaWxlZC4gMT4mMgorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgIGVzYWMKKytmaQorKworKyR4eCAtdCDvvKAgLWs0IC1uIG1iMi5JID4gbWIyLk8KKytjb2RlPSQ/CisraWYgdGVzdCAkY29kZSAhPSAwOyB0aGVuCisrICAkZWNobyAiVGVzdCBtYjIgZmFpbGVkOiAkeHggcmV0dXJuIGNvZGUgJGNvZGUgZGlmZmVycyBmcm9tIGV4cGVjdGVkIHZhbHVlIDAiIDE+JjIKKysgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWAKKytlbHNlCisrICBjbXAgbWIyLk8gJHNyY2Rpci9tYjIuWCA+IC9kZXYvbnVsbCAyPiYxCisrICBjYXNlICQ/IGluCisrICAgIDApIGlmIHRlc3QgIiRWRVJCT1NFIjsgdGhlbiAkZWNobyAicGFzc2VkIG1iMiI7IGZpOzsKKysgICAgMSkgJGVjaG8gIlRlc3QgbWIyIGZhaWxlZDogZmlsZXMgbWIyLk8gYW5kICRzcmNkaXIvbWIyLlggZGlmZmVyIiAxPiYyCisrICAgICAgIChkaWZmIC1jIG1iMi5PICRzcmNkaXIvbWIyLlgpIDI+IC9kZXYvbnVsbAorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgICAgMikgJGVjaG8gIlRlc3QgbWIyIG1heSBoYXZlIGZhaWxlZC4iIDE+JjIKKysgICAgICAgJGVjaG8gVGhlIGNvbW1hbmQgImNtcCBtYjIuTyAkc3JjZGlyL21iMi5YIiBmYWlsZWQuIDE+JjIKKysgICAgICAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYDs7CisrICBlc2FjCisrZmkKKysKKytpZiB0ZXN0ICRlcnJvcnMgPSAwOyB0aGVuCisrICAkZWNobyBQYXNzZWQgYWxsIDExMyB0ZXN0cy4gMT4mMgorK2Vsc2UKKysgICRlY2hvIEZhaWxlZCAkZXJyb3JzIHRlc3RzLiAxPiYyCisrZmkKKyt0ZXN0ICRlcnJvcnMgPSAwIHx8IGVycm9ycz0xCisrZXhpdCAkZXJyb3JzCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9tYjIuSQkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0IEBACisrQXBwbGXvvKDvvKHvvKExMO+8oO+8oDIwCisrQmFuYW5h77yg77yh77yhNe+8oO+8oDMwCisrQ2l0cnVz77yg77yh77yhMjDvvKDvvKA1CisrQ2hlcnJ577yg77yh77yhMzDvvKDvvKAxMAorLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvbWIyLlgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNCBAQAorK0NpdHJ1c++8oO+8oe+8oTIw77yg77ygNQorK0NoZXJyee+8oO+8oe+8oTMw77yg77ygMTAKKytBcHBsZe+8oO+8oe+8oTEw77yg77ygMjAKKytCYW5hbmHvvKDvvKHvvKE177yg77ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5JCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytBcHBsZe+8oDEwCisrQmFuYW5h77ygNQorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5YCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytCYW5hbmHvvKA1CisrQXBwbGXvvKAxMAorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtLmkxOG4JMjAwNy0wMS0yNCAwNzo0NzozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtCTIwMDctMDMtMDEgMTU6MDk6NTkuMDAwMDAwMDAwICswMDAwCitAQCAtNjYsMTUgKzY2LDE3IEBACisgYmlnZmllbGQuTyBiaWdmaWVsZC5FCisgIyN0ZXN0LWZpbGVzLWVuZAorIAorLUVYVFJBX0RJU1QgPSBUZXN0LnBtICR4LXRlc3RzICQoZXhwbGljaXQpICQobWFpbnRfZ2VuKQorLW5vaW5zdF9TQ1JJUFRTID0gJHgtdGVzdHMKKytydW5fZ2VuICs9IG1iMS4wIG1iMi4wCisrCisrRVhUUkFfRElTVCA9IFRlc3QucG0gJHgtdGVzdHMgJChleHBsaWNpdCkgJChtYWludF9nZW4pIG1iMS5JIG1iMS5YIG1iMi5JIG1iMi5YCisrbm9pbnN0X1NDUklQVFMgPSAkeC10ZXN0cyAjICR4LW1iLXRlc3RzCisgVEVTVFNfRU5WSVJPTk1FTlQgPSBcCisgICBDVV9URVNUX05BTUU9YGJhc2VuYW1lICQoYWJzX3NyY2RpcilgLCQkdHN0IFwKKyAgIFBBVEg9IiQoVkdfUEFUSF9QUkVGSVgpYHB3ZGAvLi4vLi4vc3JjJChQQVRIX1NFUEFSQVRPUikkJFBBVEgiCisgCisgZWRpdHBsID0gc2VkIC1lICdzLEAnJ1BFUkwnJ0AsJChQRVJMKSxnJyAtZSAncyxAJydzcmNkaXInJ0AsJChzcmNkaXIpLGcnCisgCistVEVTVFMgPSAkeC10ZXN0cworK1RFU1RTID0gJHgtdGVzdHMgJHgtbWItdGVzdHMKKyAKKyBta19zY3JpcHQgPSAkKHNyY2RpcikvLi4vbWstc2NyaXB0CisgJChzcmNkaXIpLyR4LXRlc3RzOiAkKG1rX3NjcmlwdCkgVGVzdC5wbSBNYWtlZmlsZS5hbQorLS0tIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmguaTE4bgkyMDA1LTA1LTE0IDA3OjQ0OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMiw2ICsyMiwxMSBAQAorIAorICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LiAgKi8KKysjIGlmIEhBVkVfV0NIQVJfSAorKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBlbmRpZgorKworIC8qIEEgYHN0cnVjdCBsaW5lYnVmZmVyJyBob2xkcyBhIGxpbmUgb2YgdGV4dC4gKi8KKyAKKyBzdHJ1Y3QgbGluZWJ1ZmZlcgorQEAgLTI5LDYgKzM0LDkgQEAKKyAgIHNpemVfdCBzaXplOwkJCS8qIEFsbG9jYXRlZC4gKi8KKyAgIHNpemVfdCBsZW5ndGg7CQkvKiBVc2VkLiAqLworICAgY2hhciAqYnVmZmVyOworKyMgaWYgSEFWRV9XQ0hBUl9ICisrICBtYnN0YXRlX3Qgc3RhdGU7CisrIyBlbmRpZgorIH07CisgCisgLyogSW5pdGlhbGl6ZSBsaW5lYnVmZmVyIExJTkVCVUZGRVIgZm9yIHVzZS4gKi8KKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvZXhwYW5kLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9leHBhbmQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTM4LDExICszOCwyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCB3Y3dpZHRoKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJuZHVwLmgiCisgCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImV4cGFuZCIKKyAKK0BAIC0xODMsNiArMjAwLDcgQEAKKyAJICAgICAgc3RvcHMgPSBudW1fc3RhcnQgKyBsZW4gLSAxOworIAkgICAgfQorIAl9CisrCisgICAgICAgZWxzZQorIAl7CisgCSAgZXJyb3IgKDAsIDAsIF8oInRhYiBzaXplIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyKHMpOiAlcyIpLAorQEAgLTM2NSw2ICszODMsMTQyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZXhwYW5kX211bHRpYnl0ZSAodm9pZCkKKyt7CisrICBGSUxFICpmcDsJCQkvKiBJbnB1dCBzdHJlbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3Y2hhcl90IHdjOwkJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJCQkJICAgd2hpY2ggc2hvd3MgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrICBpbnQgdGFiX2luZGV4ID0gMDsJCS8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wLiAqLworKyAgaW50IGNvbHVtbiA9IDA7CQkvKiBDb2x1bW4gb24gc2NyZWVuIG9mIHRoZSBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIC8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRi4gKi8KKysgICAgICBpZiAoYnVmbGVuIDwgTUJfTEVOX01BWCAmJiAhZmVvZihmcCkgJiYgIWZlcnJvcihmcCkpCisrCXsKKysJICBtZW1tb3ZlIChidWYsIGJ1ZnBvcywgYnVmbGVuKTsKKysJICBidWZsZW4gKz0gZnJlYWQgKGJ1ZiArIGJ1Zmxlbiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIGZwKTsKKysJICBidWZwb3MgPSBidWY7CisrCX0KKysKKysgICAgICAvKiBObyBjaGFyYWN0ZXIgaXMgbGVmdCBpbiBCVUYuICovCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCXsKKysJICBmcCA9IG5leHRfZmlsZSAoZnApOworKworKwkgIGlmIChmcCA9PSBOVUxMKQorKwkgICAgYnJlYWs7CQkvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYnVmcG9zLCBidWZsZW4sICZpX3N0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToJLyogaWxsZWdhbCBieXRlIHNlcXVlbmNlLiAqLworKwljYXNlIChzaXplX3QpLTI6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICBpZiAoY29udmVydCkKKysJICAgIHsKKysJICAgICAgKytjb2x1bW47CisrCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQljb252ZXJ0ID0gMDsKKysJICAgIH0KKysJICBwdXRjaGFyICgqYnVmcG9zKTsKKysJICBicmVhazsKKysKKysJY2FzZSAwOgkJLyogbnVsbC4gKi8KKysJICBtYmxlbmd0aCA9IDE7CisrCSAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkgICAgY29udmVydCA9IDA7CisrCSAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgaWYgKHdjID09IEwnXG4nKSAgIC8qIExGLiAqLworKwkgICAgeworKwkgICAgICB0YWJfaW5kZXggPSAwOworKwkgICAgICBjb2x1bW4gPSAwOworKwkgICAgICBjb252ZXJ0ID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkJLyogVGFiLiAqLworKwkgICAgeworKwkgICAgICBpZiAodGFiX3NpemUgPT0gMCkKKysJCXsKKysJCSAgLyogRG8gbm90IGxldCB0YWJfaW5kZXggPT0gZmlyc3RfZnJlZV90YWI7CisrCQkgICAgIHN0b3Agd2hlbiBpdCBpcyAxIGxlc3MuICovCisrCQkgIHdoaWxlICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEKKysJCSAgICAgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBuZXh0X3RhYl9jb2x1bW4gPSB0YWJfbGlzdFt0YWJfaW5kZXhdOworKwkJICBpZiAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBpZiAoY29sdW1uID49IG5leHRfdGFiX2NvbHVtbikKKysJCSAgICBuZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyAxOworKwkJfQorKwkgICAgICBlbHNlCisrCQluZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyB0YWJfc2l6ZSAtIGNvbHVtbiAlIHRhYl9zaXplOworKworKwkgICAgICB3aGlsZSAoY29sdW1uIDwgbmV4dF90YWJfY29sdW1uKQorKwkJeworKwkJICBwdXRjaGFyICgnICcpOworKwkJICArK2NvbHVtbjsKKysJCX0KKysJICAgIH0KKysJICBlbHNlICAvKiBPdGhlcnMuICovCisrCSAgICB7CisrCSAgICAgIGlmIChjb252ZXJ0KQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgeworKwkJICAgICAgaWYgKGNvbHVtbiA+IDApCisrCQkJLS1jb2x1bW47CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgaW50IHdpZHRoOwkJLyogVGhlIHdpZHRoIG9mIFdDLiAqLworKworKwkJICAgICAgd2lkdGggPSB3Y3dpZHRoICh3Yyk7CisrCQkgICAgICBjb2x1bW4gKz0gKHdpZHRoID4gMCkgPyB3aWR0aCA6IDA7CisrCQkgICAgICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJCWNvbnZlcnQgPSAwOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CitAQCAtNDI5LDcgKzU4MywxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICBleHBhbmQgKCk7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBleHBhbmRfbXVsdGlieXRlICgpOworKyAgZWxzZQorKyNlbmRpZgorKyAgICBleHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxNiArMjMsMzAgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgbWJydG93YygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IGlzd2JsYW5rKCksIHRvd3VwcGVyLiAgKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorICNpbmNsdWRlICJsaW5lYnVmZmVyLmgiCistI2luY2x1ZGUgIm1lbWNhc2VjbXAuaCIKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAic3RkaW8tLS5oIgorICNpbmNsdWRlICJ4bWVtY29sbC5oIgorICNpbmNsdWRlICJ4c3RydG9sLmgiCisgCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJqb2luIgorIAorQEAgLTEwNCwxMCArMTE4LDEyIEBACisgLyogTGFzdCBlbGVtZW50IGluIGBvdXRsaXN0Jywgd2hlcmUgYSBuZXcgZWxlbWVudCBjYW4gYmUgYWRkZWQuICAqLworIHN0YXRpYyBzdHJ1Y3Qgb3V0bGlzdCAqb3V0bGlzdF9lbmQgPSAmb3V0bGlzdF9oZWFkOworIAorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBuZWdhdGl2ZSwgZmllbGRzIGFyZSBzZXBhcmF0ZWQKKy0gICBieSBhbnkgbm9uZW1wdHkgc3RyaW5nIG9mIGJsYW5rcywgb3RoZXJ3aXNlIGJ5IGV4YWN0bHkgb25lCistICAgdGFiIGNoYXJhY3RlciB3aG9zZSB2YWx1ZSAod2hlbiBjYXN0IHRvIHVuc2lnbmVkIGNoYXIpIGVxdWFscyBUQUIuICAqLworLXN0YXRpYyBpbnQgdGFiID0gLTE7CisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIE5VTEwsIGZpZWxkcyBhcmUgc2VwYXJhdGVkCisrICAgYnkgYW55IG5vbmVtcHR5IHN0cmluZyBvZiBibGFua3MuICAqLworK3N0YXRpYyBjaGFyICp0YWIgPSBOVUxMOworKworKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBmb3IgdGFiLiAqLworK3N0YXRpYyBzaXplX3QgdGFibGVuID0gMDsKKyAKKyBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyB7CitAQCAtMTkwLDYgKzIwNiw4IEBACisgCisgLyogRmlsbCBpbiB0aGUgYGZpZWxkcycgc3RydWN0dXJlIGluIExJTkUuICAqLworIAorKy8qIEZpbGwgaW4gdGhlIGBmaWVsZHMnIHN0cnVjdHVyZSBpbiBMSU5FLiAgKi8KKysKKyBzdGF0aWMgdm9pZAorIHhmaWVsZHMgKHN0cnVjdCBsaW5lICpsaW5lKQorIHsKK0BAIC0xOTksMTAgKzIxNywxMSBAQAorICAgaWYgKHB0ciA9PSBsaW0pCisgICAgIHJldHVybjsKKyAKKy0gIGlmICgwIDw9IHRhYikKKysgIGlmICh0YWIgIT0gTlVMTCkKKyAgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKyAgICAgICBjaGFyICpzZXA7CistICAgICAgZm9yICg7IChzZXAgPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpKSAhPSBOVUxMOyBwdHIgPSBzZXAgKyAxKQorKyAgICAgIGZvciAoOyAoc2VwID0gbWVtY2hyIChwdHIsIHQsIGxpbSAtIHB0cikpICE9IE5VTEw7IHB0ciA9IHNlcCArIDEpCisgCWV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKyAgICAgfQorICAgZWxzZQorQEAgLTIyOSw2ICsyNDgsMTQ4IEBACisgICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIGxpbSAtIHB0cik7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK3hmaWVsZHNfbXVsdGlieXRlIChzdHJ1Y3QgbGluZSAqbGluZSkKKyt7CisrICBjaGFyICpwdHIgPSBsaW5lLT5idWYuYnVmZmVyOworKyAgY2hhciBjb25zdCAqbGltID0gcHRyICsgbGluZS0+YnVmLmxlbmd0aCAtIDE7CisrICB3Y2hhcl90IHdjID0gMDsKKysgIHNpemVfdCBtYmxlbmd0aCA9IDE7CisrICBtYnN0YXRlX3Qgc3RhdGUsIHN0YXRlX2JhazsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHB0ciA9PSBsaW0pCisrICAgIHJldHVybjsKKysKKysgIGlmICh0YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKysgICAgICBjaGFyICpzZXAgPSBwdHI7CisrICAgICAgZm9yICg7IHB0ciA8IGxpbTsgcHRyID0gc2VwICsgbWJsZW5ndGgpCisrCXsKKysJICBzZXAgPSBwdHI7CisrCSAgd2hpbGUgKHNlcCA8IGxpbSkKKysJICAgIHsKKysJICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzZXAsIGxpbSAtIHNlcCArIDEsICZzdGF0ZSk7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCQl7CisrCQkgIG1ibGVuZ3RoID0gMTsKKysJCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCQl9CisrCSAgICAgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSB0YWJsZW4gJiYgIW1lbWNtcCAoc2VwLCB0YWIsIG1ibGVuZ3RoKSkKKysJCWJyZWFrOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHNlcCArPSBtYmxlbmd0aDsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHNlcCA9PSBsaW0pCisrCSAgICBicmVhazsKKysKKysJICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIHNlcCAtIHB0cik7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogU2tpcCBsZWFkaW5nIGJsYW5rcyBiZWZvcmUgdGhlIGZpcnN0IGZpZWxkLiAgKi8KKysgICAgICB3aGlsZShwdHIgPCBsaW0pCisrICAgICAgeworKyAgICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrICAgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKworKyAgICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIG1ibGVuZ3RoID0gMTsKKysgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgfQorKyAgICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysgICAgICAgIGlmICghaXN3Ymxhbmsod2MpKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrICAgICAgZG8KKysJeworKwkgIGNoYXIgKnNlcDsKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgc2VwID0gcHRyICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHNlcCAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKGlzd2JsYW5rICh3YykpCisrCQlicmVhazsKKysKKysJICAgICAgc2VwICs9IG1ibGVuZ3RoOworKwkgICAgfQorKworKwkgIGV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKysJICBpZiAoc2VwID09IGxpbSkKKysJICAgIHJldHVybjsKKysKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgcHRyID0gc2VwICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHB0ciAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFpc3dibGFuayAod2MpKQorKwkJYnJlYWs7CisrCisrCSAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICAgIH0KKysJfQorKyAgICAgIHdoaWxlIChwdHIgIT0gbGltKTsKKysgICAgfQorKworKyAgZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBsaW0gLSBwdHIpOworK30KKysjZW5kaWYKKysKKyAvKiBSZWFkIGEgbGluZSBmcm9tIEZQIGludG8gTElORSBhbmQgc3BsaXQgaXQgaW50byBmaWVsZHMuCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCitAQCAtMjQ5LDYgKzQxMCwxMSBAQAorICAgbGluZS0+bmZpZWxkc19hbGxvY2F0ZWQgPSAwOworICAgbGluZS0+bmZpZWxkcyA9IDA7CisgICBsaW5lLT5maWVsZHMgPSBOVUxMOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgeGZpZWxkc19tdWx0aWJ5dGUgKGxpbmUpOworKyAgZWxzZQorKyNlbmRpZgorICAgeGZpZWxkcyAobGluZSk7CisgICByZXR1cm4gdHJ1ZTsKKyB9CitAQCAtMzAzLDU2ICs0NjksMTE0IEBACisga2V5Y21wIChzdHJ1Y3QgbGluZSBjb25zdCAqbGluZTEsIHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMikKKyB7CisgICAvKiBTdGFydCBvZiBmaWVsZCB0byBjb21wYXJlIGluIGVhY2ggZmlsZS4gICovCistICBjaGFyICpiZWcxOworLSAgY2hhciAqYmVnMjsKKy0KKy0gIHNpemVfdCBsZW4xOworLSAgc2l6ZV90IGxlbjI7CQkvKiBMZW5ndGggb2YgZmllbGRzIHRvIGNvbXBhcmUuICAqLworKyAgY2hhciAqYmVnWzJdOworKyAgY2hhciAqY29weVsyXTsKKysgIHNpemVfdCBsZW5bMl07CS8qIExlbmd0aCBvZiBmaWVsZHMgdG8gY29tcGFyZS4gICovCisgICBpbnQgZGlmZjsKKysgIGludCBpLCBqOworIAorICAgaWYgKGpvaW5fZmllbGRfMSA8IGxpbmUxLT5uZmllbGRzKQorICAgICB7CistICAgICAgYmVnMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5iZWc7CistICAgICAgbGVuMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5sZW47CisrICAgICAgYmVnWzBdID0gbGluZTEtPmZpZWxkc1tqb2luX2ZpZWxkXzFdLmJlZzsKKysgICAgICBsZW5bMF0gPSBsaW5lMS0+ZmllbGRzW2pvaW5fZmllbGRfMV0ubGVuOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICBiZWcxID0gTlVMTDsKKy0gICAgICBsZW4xID0gMDsKKysgICAgICBiZWdbMF0gPSBOVUxMOworKyAgICAgIGxlblswXSA9IDA7CisgICAgIH0KKyAKKyAgIGlmIChqb2luX2ZpZWxkXzIgPCBsaW5lMi0+bmZpZWxkcykKKyAgICAgeworLSAgICAgIGJlZzIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0uYmVnOworLSAgICAgIGxlbjIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0ubGVuOworKyAgICAgIGJlZ1sxXSA9IGxpbmUyLT5maWVsZHNbam9pbl9maWVsZF8yXS5iZWc7CisrICAgICAgbGVuWzFdID0gbGluZTItPmZpZWxkc1tqb2luX2ZpZWxkXzJdLmxlbjsKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgYmVnMiA9IE5VTEw7CistICAgICAgbGVuMiA9IDA7CisrICAgICAgYmVnWzFdID0gTlVMTDsKKysgICAgICBsZW5bMV0gPSAwOworICAgICB9CisgCistICBpZiAobGVuMSA9PSAwKQorLSAgICByZXR1cm4gbGVuMiA9PSAwID8gMCA6IC0xOworLSAgaWYgKGxlbjIgPT0gMCkKKysgIGlmIChsZW5bMF0gPT0gMCkKKysgICAgcmV0dXJuIGxlblsxXSA9PSAwID8gMCA6IC0xOworKyAgaWYgKGxlblsxXSA9PSAwKQorICAgICByZXR1cm4gMTsKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBpZ25vcmVfY2FzZSBkb2VzIG5vdCB3b3JrIHdpdGggTkxTIChpbiBwYXJ0aWN1bGFyLAorLSAgICAgICAgIHdpdGggbXVsdGlieXRlIGNoYXJzKS4gICovCistICAgICAgZGlmZiA9IG1lbWNhc2VjbXAgKGJlZzEsIGJlZzIsIE1JTiAobGVuMSwgbGVuMikpOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgeworKyAgICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKyAgICAgICAgd2NoYXJfdCB3YywgdXdjOworKyAgICAgICAgbWJzdGF0ZV90IHN0YXRlLCBzdGF0ZV9iYWs7CisrCisrICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUlOIChsZW5bMF0sIGxlblsxXSk7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICAgICAgICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIGJlZ1tpXSArIGosIGxlbltpXSAtIGosICZzdGF0ZSk7CisrCisrICAgICAgICAgICAgICAgIHN3aXRjaCAobWJsZW5ndGgpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGNhc2UgKHNpemVfdCkgLTE6CisrICAgICAgICAgICAgICAgICAgY2FzZSAoc2l6ZV90KSAtMjoKKysgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKyAgICAgICAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisrICAgICAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgICAgICAgICAgbWJsZW5ndGggPSAxOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgIHV3YyA9IHRvd3VwcGVyICh3Yyk7CisrCisrICAgICAgICAgICAgICAgICAgICBpZiAodXdjICE9IHdjKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdjcnRvbWIgKGNvcHlbaV0gKyBqLCB1d2MsICZzdGF0ZV93Yyk7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChjb3B5W2ldICsgaiwgYmVnW2ldICsgaiwgbWJsZW5ndGgpOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaiArPSBtYmxlbmd0aDsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGNvcHlbaV0gPSBhbGxvY2EgKGxlbltpXSArIDEpOworKworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBNSU4gKGxlblswXSwgbGVuWzFdKTsgaisrKQorKyAgICAgICAgICAgICAgY29weVtpXVtqXSA9IHRvdXBwZXIgKGJlZ1tpXVtqXSk7CisrCisrICAgICAgICAgICAgY29weVtpXVtqXSA9ICdcMCc7CisrICAgICAgICAgIH0KKysgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGlmIChoYXJkX0xDX0NPTExBVEUpCistCXJldHVybiB4bWVtY29sbCAoYmVnMSwgbGVuMSwgYmVnMiwgbGVuMik7CistICAgICAgZGlmZiA9IG1lbWNtcCAoYmVnMSwgYmVnMiwgTUlOIChsZW4xLCBsZW4yKSk7CisrICAgICAgY29weVswXSA9ICh1bnNpZ25lZCBjaGFyICopIGJlZ1swXTsKKysgICAgICBjb3B5WzFdID0gKHVuc2lnbmVkIGNoYXIgKikgYmVnWzFdOworICAgICB9CisgCisrICBpZiAoaGFyZF9MQ19DT0xMQVRFKQorKyAgICByZXR1cm4geG1lbWNvbGwgKChjaGFyICopIGNvcHlbMF0sIGxlblswXSwgKGNoYXIgKikgY29weVsxXSwgbGVuWzFdKTsKKysgIGRpZmYgPSBtZW1jbXAgKGNvcHlbMF0sIGNvcHlbMV0sIE1JTiAobGVuWzBdLCBsZW5bMV0pKTsKKysKKyAgIGlmIChkaWZmKQorICAgICByZXR1cm4gZGlmZjsKKy0gIHJldHVybiBsZW4xIDwgbGVuMiA/IC0xIDogbGVuMSAhPSBsZW4yOworKyAgcmV0dXJuIGxlblswXSAtIGxlblsxXTsKKyB9CisgCisgLyogUHJpbnQgZmllbGQgTiBvZiBMSU5FIGlmIGl0IGV4aXN0cyBhbmQgaXMgbm9uZW1wdHksIG90aGVyd2lzZQorQEAgLTM3NywxMSArNjAxLDE4IEBACisgCisgLyogUHJpbnQgdGhlIGpvaW4gb2YgTElORTEgYW5kIExJTkUyLiAgKi8KKyAKKysjZGVmaW5lIFBVVF9UQUJfQ0hBUgkJCQkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICAodGFiICE9IE5VTEwpID8JCQkJCQkJXAorKwlmd3JpdGUodGFiLCBzaXplb2YoY2hhciksIHRhYmxlbiwgc3Rkb3V0KSA6IHB1dGNoYXIgKCcgJyk7CVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQkJCQkJCQkJCisrCisgc3RhdGljIHZvaWQKKyBwcmpvaW4gKHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMSwgc3RydWN0IGxpbmUgY29uc3QgKmxpbmUyKQorIHsKKyAgIGNvbnN0IHN0cnVjdCBvdXRsaXN0ICpvdXRsaXN0OworLSAgY2hhciBvdXRwdXRfc2VwYXJhdG9yID0gdGFiIDwgMCA/ICcgJyA6IHRhYjsKKyAKKyAgIG91dGxpc3QgPSBvdXRsaXN0X2hlYWQubmV4dDsKKyAgIGlmIChvdXRsaXN0KQorQEAgLTM5NywxMiArNjI4LDEyIEBACisgCSAgaWYgKG8tPmZpbGUgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgaWYgKGxpbmUxID09ICZ1bmlfYmxhbmspCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTI7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8yOworIAkJfQorIAkgICAgICBlbHNlCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTE7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8xOworIAkJfQorQEAgLTQxNiw3ICs2NDcsNyBAQAorIAkgIG8gPSBvLT5uZXh0OworIAkgIGlmIChvID09IE5VTEwpCisgCSAgICBicmVhazsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCX0KKyAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgfQorQEAgLTQzNCwyMyArNjY1LDIzIEBACisgICAgICAgcHJmaWVsZCAoam9pbl9maWVsZF8xLCBsaW5lMSk7CisgICAgICAgZm9yIChpID0gMDsgaSA8IGpvaW5fZmllbGRfMSAmJiBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAgICAgICBmb3IgKGkgPSBqb2luX2ZpZWxkXzEgKyAxOyBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgam9pbl9maWVsZF8yICYmIGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIGZvciAoaSA9IGpvaW5fZmllbGRfMiArIDE7IGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIHB1dGNoYXIgKCdcbicpOworQEAgLTg1OSwyMCArMTA5MCw0MSBAQAorIAorIAljYXNlICd0JzoKKyAJICB7CistCSAgICB1bnNpZ25lZCBjaGFyIG5ld3RhYiA9IG9wdGFyZ1swXTsKKy0JICAgIGlmICghIG5ld3RhYikKKysJICAgIGNoYXIgKm5ld3RhYjsKKysJICAgIHNpemVfdCBuZXd0YWJsZW47CisrCSAgICBpZiAoISBvcHRhcmdbMF0pCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImVtcHR5IHRhYiIpKTsKKy0JICAgIGlmIChvcHRhcmdbMV0pCisrCSAgICBuZXd0YWIgPSB4c3RyZHVwIChvcHRhcmcpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJbWJzdGF0ZV90IHN0YXRlOworKworKwkJbWVtc2V0ICgmc3RhdGUsIDAsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJsZW4gPSBtYnJ0b3djIChOVUxMLCBuZXd0YWIsCisrCQkJCSAgICAgc3RybmxlbiAobmV3dGFiLCBNQl9MRU5fTUFYKSwKKysJCQkJICAgICAmc3RhdGUpOworKwkJaWYgKG5ld3RhYmxlbiA9PSAoc2l6ZV90KSAwCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0xCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0yKQorKwkJICBuZXd0YWJsZW4gPSAxOworKwkgICAgICB9CisrCSAgICBlbHNlCisrI2VuZGlmCisrCSAgICAgIG5ld3RhYmxlbiA9IDE7CisrCQkKKysJICAgIGlmIChuZXd0YWJsZW4gPT0gMSAmJiBuZXd0YWJbMV0pCisrCSAgICAgIHsKKysJCWlmIChTVFJFUSAobmV3dGFiLCAiXFwwIikpCisrCQkgIG5ld3RhYlswXSA9ICdcMCc7CisrCSAgICAgIH0KKysJICAgIGlmICh0YWIgIT0gTlVMTCAmJiBzdHJjbXAgKHRhYiwgbmV3dGFiKSkKKyAJICAgICAgeworLQkJaWYgKFNUUkVRIChvcHRhcmcsICJcXDAiKSkKKy0JCSAgbmV3dGFiID0gJ1wwJzsKKy0JCWVsc2UKKy0JCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygibXVsdGktY2hhcmFjdGVyIHRhYiAlcyIpLAorLQkJCSBxdW90ZSAob3B0YXJnKSk7CisrCQlmcmVlIChuZXd0YWIpOworKwkJZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CisgCSAgICAgIH0KKy0JICAgIGlmICgwIDw9IHRhYiAmJiB0YWIgIT0gbmV3dGFiKQorLQkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJpbmNvbXBhdGlibGUgdGFicyIpKTsKKyAJICAgIHRhYiA9IG5ld3RhYjsKKysJICAgIHRhYmxlbiA9IG5ld3RhYmxlbjsKKyAJICB9CisgCSAgYnJlYWs7CisgCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDYgKzIzLDE2IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAibGluZWJ1ZmZlci5oIgorQEAgLTMyLDcgKzQyLDE5IEBACisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhtZW1jb2xsLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKy0jaW5jbHVkZSAibWVtY2FzZWNtcC5oIgorKyNpbmNsdWRlICJ4bWVtY29sbC5oIgorKworKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIAorIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmlxIgorQEAgLTEwOSw2ICsxMzEsMTAgQEAKKyAvKiBTZWxlY3Qgd2hldGhlci9ob3cgdG8gZGVsaW1pdCBncm91cHMgb2YgZHVwbGljYXRlIGxpbmVzLiAgKi8KKyBzdGF0aWMgZW51bSBkZWxpbWl0X21ldGhvZCBkZWxpbWl0X2dyb3VwczsKKyAKKysvKiBGdW5jdGlvbiBwb2ludGVycy4gKi8KKytzdGF0aWMgY2hhciAqCisrKCpmaW5kX2ZpZWxkKSAoc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpOworKworIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorIHsKKyAgIHsiY291bnQiLCBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKK0BAIC0xOTgsNyArMjI0LDcgQEAKKyAgICByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUncyBmaWVsZCB0byBiZSBjb21wYXJlZC4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistZmluZF9maWVsZCAoY29uc3Qgc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpCisrZmluZF9maWVsZF91bmkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorIHsKKyAgIHNpemVfdCBjb3VudDsKKyAgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworQEAgLTIxOSw2ICsyNDUsODMgQEAKKyAgIHJldHVybiBscCArIGk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKysKKysjIGRlZmluZSBNQkNIQVJfVE9fV0NIQVIoV0MsIE1CTEVOR1RILCBMUCwgUE9TLCBTSVpFLCBTVEFURVAsIENPTlZGQUlMKSAgXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIENPTlZGQUlMID0gMDsJCQkJCQkJXAorKyAgICAgIHN0YXRlX2JhayA9ICpTVEFURVA7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgTFAgKyBQT1MsIFNJWkUgLSBQT1MsIFNUQVRFUCk7CQlcCisrCQkJCQkJCQkJXAorKyAgICAgIHN3aXRjaCAoTUJMRU5HVEgpCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwljYXNlIChzaXplX3QpLTI6CQkJCQkJXAorKwljYXNlIChzaXplX3QpLTE6CQkJCQkJXAorKwkgICpTVEFURVAgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkgIENPTlZGQUlMKys7CQkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z2ggKi8JCQkJCQlcCisrCWNhc2UgMDoJCQkJCQkJCVwKKysJICBNQkxFTkdUSCA9IDE7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrc3RhdGljIGNoYXIgKgorK2ZpbmRfZmllbGRfbXVsdGkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworKyAgc2l6ZV90IHNpemUgPSBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IHBvczsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2M7CisrICBtYnN0YXRlX3QgKnN0YXRlcDsKKysgIGludCBjb252ZmFpbDsKKysKKysgIHBvcyA9IDA7CisrICBzdGF0ZXAgPSAmKGxpbmUtPnN0YXRlKTsKKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9maWVsZHMgJiYgcG9zIDwgc2l6ZTsgY291bnQrKykKKysgICAgeworKyAgICAgIHdoaWxlIChwb3MgPCBzaXplKQorKwl7CisrCSAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAKKysJICBpZiAoY29udmZhaWwgfHwgIWlzd2JsYW5rICh3YykpCisrCSAgICB7CisrCSAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgd2hpbGUgKHBvcyA8IHNpemUpCisrCXsKKysJICBNQkNIQVJfVE9fV0NIQVIgKHdjLCBtYmxlbmd0aCwgbHAsIHBvcywgc2l6ZSwgc3RhdGVwLCBjb252ZmFpbCk7CisrCisrCSAgaWYgKCFjb252ZmFpbCAmJiBpc3dibGFuayAod2MpKQorKwkgICAgYnJlYWs7CisrCisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrICAgIH0KKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9jaGFycyAmJiBwb3MgPCBzaXplOyBjb3VudCsrKQorKyAgICB7CisrICAgICAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIGxwICsgcG9zOworK30KKysjZW5kaWYKKysKKyAvKiBSZXR1cm4gZmFsc2UgaWYgdHdvIHN0cmluZ3MgT0xEIGFuZCBORVcgbWF0Y2gsIHRydWUgaWYgbm90LgorICAgIE9MRCBhbmQgTkVXIHBvaW50IG5vdCB0byB0aGUgYmVnaW5uaW5ncyBvZiB0aGUgbGluZXMKKyAgICBidXQgcmF0aGVyIHRvIHRoZSBiZWdpbm5pbmdzIG9mIHRoZSBmaWVsZHMgdG8gY29tcGFyZS4KK0BAIC0yMjcsNiArMzMwLDggQEAKKyBzdGF0aWMgYm9vbAorIGRpZmZlcmVudCAoY2hhciAqb2xkLCBjaGFyICpuZXcsIHNpemVfdCBvbGRsZW4sIHNpemVfdCBuZXdsZW4pCisgeworKyAgY2hhciAqY29weV9vbGQsICpjb3B5X25ldzsKKysKKyAgIGlmIChjaGVja19jaGFycyA8IG9sZGxlbikKKyAgICAgb2xkbGVuID0gY2hlY2tfY2hhcnM7CisgICBpZiAoY2hlY2tfY2hhcnMgPCBuZXdsZW4pCitAQCAtMjM0LDE0ICszMzksOTIgQEAKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBUaGlzIHNob3VsZCBpbnZva2Ugc3RyY29sbCBzb21laG93LiAgKi8KKy0gICAgICByZXR1cm4gb2xkbGVuICE9IG5ld2xlbiB8fCBtZW1jYXNlY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgICBzaXplX3QgaTsKKysKKysgICAgICBjb3B5X29sZCA9IGFsbG9jYSAob2xkbGVuICsgMSk7CisrICAgICAgY29weV9uZXcgPSBhbGxvY2EgKG9sZGxlbiArIDEpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGRsZW47IGkrKykKKysJeworKwkgIGNvcHlfb2xkW2ldID0gdG91cHBlciAob2xkW2ldKTsKKysJICBjb3B5X25ld1tpXSA9IHRvdXBwZXIgKG5ld1tpXSk7CisrCX0KKyAgICAgfQorLSAgZWxzZSBpZiAoaGFyZF9MQ19DT0xMQVRFKQorLSAgICByZXR1cm4geG1lbWNvbGwgKG9sZCwgb2xkbGVuLCBuZXcsIG5ld2xlbikgIT0gMDsKKyAgIGVsc2UKKy0gICAgcmV0dXJuIG9sZGxlbiAhPSBuZXdsZW4gfHwgbWVtY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgeworKyAgICAgIGNvcHlfb2xkID0gKGNoYXIgKilvbGQ7CisrICAgICAgY29weV9uZXcgPSAoY2hhciAqKW5ldzsKKysgICAgfQorKworKyAgcmV0dXJuIHhtZW1jb2xsIChjb3B5X29sZCwgb2xkbGVuLCBjb3B5X25ldywgbmV3bGVuKTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytkaWZmZXJlbnRfbXVsdGkgKGNvbnN0IGNoYXIgKm9sZCwgY29uc3QgY2hhciAqbmV3LCBzaXplX3Qgb2xkbGVuLCBzaXplX3QgbmV3bGVuLCBtYnN0YXRlX3Qgb2xkc3RhdGUsIG1ic3RhdGVfdCBuZXdzdGF0ZSkKKyt7CisrICBzaXplX3QgaSwgaiwgY2hhcnM7CisrICBjb25zdCBjaGFyICpzdHJbMl07CisrICBjaGFyICpjb3B5WzJdOworKyAgc2l6ZV90IGxlblsyXTsKKysgIG1ic3RhdGVfdCBzdGF0ZVsyXTsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2MsIHV3YzsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrCisrICBzdHJbMF0gPSBvbGQ7CisrICBzdHJbMV0gPSBuZXc7CisrICBsZW5bMF0gPSBvbGRsZW47CisrICBsZW5bMV0gPSBuZXdsZW47CisrICBzdGF0ZVswXSA9IG9sZHN0YXRlOworKyAgc3RhdGVbMV0gPSBuZXdzdGF0ZTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgIHsKKysgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICBmb3IgKGogPSAwLCBjaGFycyA9IDA7IGogPCBsZW5baV0gJiYgY2hhcnMgPCBjaGVja19jaGFyczsgY2hhcnMrKykKKysJeworKwkgIHN0YXRlX2JhayA9IHN0YXRlW2ldOworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHJbaV0gKyBqLCBsZW5baV0gLSBqLCAmKHN0YXRlW2ldKSk7CisrCisrCSAgc3dpdGNoIChtYmxlbmd0aCkKKysJICAgIHsKKysJICAgIGNhc2UgKHNpemVfdCktMToKKysJICAgIGNhc2UgKHNpemVfdCktMjoKKysJICAgICAgc3RhdGVbaV0gPSBzdGF0ZV9iYWs7CisrCSAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworKwkgICAgY2FzZSAwOgorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIGJyZWFrOworKworKwkgICAgZGVmYXVsdDoKKysJICAgICAgaWYgKGlnbm9yZV9jYXNlKQorKwkJeworKwkJICB1d2MgPSB0b3d1cHBlciAod2MpOworKworKwkJICBpZiAodXdjICE9IHdjKQorKwkJICAgIHsKKysJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZV93YzsKKysKKysJCSAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgICAgICB3Y3J0b21iIChjb3B5W2ldICsgaiwgdXdjLCAmc3RhdGVfd2MpOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIG1lbWNweSAoY29weVtpXSArIGosIHN0cltpXSArIGosIG1ibGVuZ3RoKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJbWVtY3B5IChjb3B5W2ldICsgaiwgc3RyW2ldICsgaiwgbWJsZW5ndGgpOworKwkgICAgfQorKwkgIGogKz0gbWJsZW5ndGg7CisrCX0KKysgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICBsZW5baV0gPSBqOworKyAgICB9CisrCisrICByZXR1cm4geG1lbWNvbGwgKGNvcHlbMF0sIGxlblswXSwgY29weVsxXSwgbGVuWzFdKTsKKyB9CisrI2VuZGlmCisgCisgLyogT3V0cHV0IHRoZSBsaW5lIGluIGxpbmVidWZmZXIgTElORSB0byBzdGFuZGFyZCBvdXRwdXQKKyAgICBwcm92aWRlZCB0aGF0IHRoZSBzd2l0Y2hlcyBzYXkgaXQgc2hvdWxkIGJlIG91dHB1dC4KK0BAIC0yOTUsMTUgKzQ3OCw0MyBAQAorICAgICB7CisgICAgICAgY2hhciAqcHJldmZpZWxkIElGX0xJTlQgKD0gTlVMTCk7CisgICAgICAgc2l6ZV90IHByZXZsZW4gSUZfTElOVCAoPSAwKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysKKysgICAgICBtZW1zZXQgKCZwcmV2c3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrI2VuZGlmCisgCisgICAgICAgd2hpbGUgKCFmZW9mIChzdGRpbikpCisgCXsKKyAJICBjaGFyICp0aGlzZmllbGQ7CisgCSAgc2l6ZV90IHRoaXNsZW47CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIG1ic3RhdGVfdCB0aGlzc3RhdGU7CisrI2VuZGlmCisrCisgCSAgaWYgKHJlYWRsaW5lYnVmZmVyICh0aGlzbGluZSwgc3RkaW4pID09IDApCisgCSAgICBicmVhazsKKyAJICB0aGlzZmllbGQgPSBmaW5kX2ZpZWxkICh0aGlzbGluZSk7CisgCSAgdGhpc2xlbiA9IHRoaXNsaW5lLT5sZW5ndGggLSAxIC0gKHRoaXNmaWVsZCAtIHRoaXNsaW5lLT5idWZmZXIpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysKKysgICAgICAgICAgICBpZiAocHJldmxpbmUtPmxlbmd0aCA9PSAwIHx8IGRpZmZlcmVudF9tdWx0aQorKyAgICAgICAgICAgICAgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSkpCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGZ3cml0ZSAodGhpc2xpbmUtPmJ1ZmZlciwgc2l6ZW9mIChjaGFyKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGluZS0+bGVuZ3RoLCBzdGRvdXQpOworKworKyAgICAgICAgICAgICAgICBTV0FQX0xJTkVTIChwcmV2bGluZSwgdGhpc2xpbmUpOworKyAgICAgICAgICAgICAgICBwcmV2ZmllbGQgPSB0aGlzZmllbGQ7CisrICAgICAgICAgICAgICAgIHByZXZsZW4gPSB0aGlzbGVuOworKyAgICAgICAgICAgICAgICBwcmV2c3RhdGUgPSB0aGlzc3RhdGU7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgIH0KKysJZWxzZQorKyNlbmRpZgorIAkgIGlmIChwcmV2bGluZS0+bGVuZ3RoID09IDAKKyAJICAgICAgfHwgZGlmZmVyZW50ICh0aGlzZmllbGQsIHByZXZmaWVsZCwgdGhpc2xlbiwgcHJldmxlbikpCisgCSAgICB7CitAQCAtMzIyLDE3ICs1MzMsMjYgQEAKKyAgICAgICBzaXplX3QgcHJldmxlbjsKKyAgICAgICB1aW50bWF4X3QgbWF0Y2hfY291bnQgPSAwOworICAgICAgIGJvb2wgZmlyc3RfZGVsaW1pdGVyID0gdHJ1ZTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICBpZiAocmVhZGxpbmVidWZmZXIgKHByZXZsaW5lLCBzdGRpbikgPT0gMCkKKyAJZ290byBjbG9zZWZpbGVzOworICAgICAgIHByZXZmaWVsZCA9IGZpbmRfZmllbGQgKHByZXZsaW5lKTsKKyAgICAgICBwcmV2bGVuID0gcHJldmxpbmUtPmxlbmd0aCAtIDEgLSAocHJldmZpZWxkIC0gcHJldmxpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgICAgIHByZXZzdGF0ZSA9IHByZXZsaW5lLT5zdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICB3aGlsZSAoIWZlb2YgKHN0ZGluKSkKKyAJeworIAkgIGJvb2wgbWF0Y2g7CisgCSAgY2hhciAqdGhpc2ZpZWxkOworIAkgIHNpemVfdCB0aGlzbGVuOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBtYnN0YXRlX3QgdGhpc3N0YXRlOworKyNlbmRpZgorIAkgIGlmIChyZWFkbGluZWJ1ZmZlciAodGhpc2xpbmUsIHN0ZGluKSA9PSAwKQorIAkgICAgeworIAkgICAgICBpZiAoZmVycm9yIChzdGRpbikpCitAQCAtMzQxLDYgKzU2MSwxNSBAQAorIAkgICAgfQorIAkgIHRoaXNmaWVsZCA9IGZpbmRfZmllbGQgKHRoaXNsaW5lKTsKKyAJICB0aGlzbGVuID0gdGhpc2xpbmUtPmxlbmd0aCAtIDEgLSAodGhpc2ZpZWxkIC0gdGhpc2xpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgIHsKKysgICAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysgICAgICAgICAgICAgIG1hdGNoID0gIWRpZmZlcmVudF9tdWx0aSAodGhpc2ZpZWxkLCBwcmV2ZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSk7CisrICAgICAgICAgICAgfQorKwkgIGVsc2UKKysjZW5kaWYKKyAJICBtYXRjaCA9ICFkaWZmZXJlbnQgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuKTsKKyAJICBtYXRjaF9jb3VudCArPSBtYXRjaDsKKyAKK0BAIC0zNzMsNiArNjAyLDkgQEAKKyAJICAgICAgU1dBUF9MSU5FUyAocHJldmxpbmUsIHRoaXNsaW5lKTsKKyAJICAgICAgcHJldmZpZWxkID0gdGhpc2ZpZWxkOworIAkgICAgICBwcmV2bGVuID0gdGhpc2xlbjsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgICAgIHByZXZzdGF0ZSA9IHRoaXNzdGF0ZTsKKysjZW5kaWYKKyAJICAgICAgaWYgKCFtYXRjaCkKKyAJCW1hdGNoX2NvdW50ID0gMDsKKyAJICAgIH0KK0BAIC00MTcsNiArNjQ5LDE5IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB7CisrICAgICAgZmluZF9maWVsZCA9IGZpbmRfZmllbGRfbXVsdGk7CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgIGZpbmRfZmllbGQgPSBmaW5kX2ZpZWxkX3VuaTsKKysgICAgfQorKworKworKworICAgc2tpcF9jaGFycyA9IDA7CisgICBza2lwX2ZpZWxkcyA9IDA7CisgICBjaGVja19jaGFycyA9IFNJWkVfTUFYOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMuaTE4bgkyMDA3LTAyLTIzIDEyOjAxOjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxMSArMjMsMzMgQEAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCBpc3dwcmludCgpLCBpc3dibGFuaygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKyAKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyB1bmRlZiBNQl9MRU5fTUFYCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIFRBQl9XSURUSCA4CisgCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCitAQCAtMzUsMjMgKzU3LDQ0IEBACisgCisgI2RlZmluZSBBVVRIT1JTICJEYXZpZCBNYWNLZW56aWUiCisgCisrI2RlZmluZSBGQVRBTF9FUlJPUihNZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZXJyb3IgKDAsIDAsIChNZXNzYWdlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHVzYWdlICgyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysKKytlbnVtIG9wZXJhdGluZ19tb2RlCisreworKyAgLyogRm9sZCB0ZXh0cyBieSBjb2x1bW5zIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICBjb2x1bW5fbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgYnl0ZXMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKysgIGJ5dGVfbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworKyAgY2hhcmFjdGVyX21vZGUsCisrfTsKKysKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAqLworIGNoYXIgKnByb2dyYW1fbmFtZTsKKyAKKysvKiBUaGUgYXJndW1lbnQgc2hvd3MgY3VycmVudCBtb2RlLiAoRGVmYXVsdDogY29sdW1uX21vZGUpICovCisrc3RhdGljIGVudW0gb3BlcmF0aW5nX21vZGUgb3BlcmF0aW5nX21vZGU7CisrCisgLyogSWYgbm9uemVybywgdHJ5IHRvIGJyZWFrIG9uIHdoaXRlc3BhY2UuICovCisgc3RhdGljIGJvb2wgYnJlYWtfc3BhY2VzOworIAorLS8qIElmIG5vbnplcm8sIGNvdW50IGJ5dGVzLCBub3QgY29sdW1uIHBvc2l0aW9ucy4gKi8KKy1zdGF0aWMgYm9vbCBjb3VudF9ieXRlczsKKy0KKyAvKiBJZiBub256ZXJvLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpbGVzIHdlIHJlYWQgd2FzIHN0YW5kYXJkIGlucHV0LiAqLworIHN0YXRpYyBib29sIGhhdmVfcmVhZF9zdGRpbjsKKyAKKy1zdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJic3c6MDo6MTo6Mjo6Mzo6NDo6NTo6Njo6Nzo6ODo6OTo6IjsKKytzdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJiY3N3OjA6OjE6OjI6OjM6OjQ6OjU6OjY6Ojc6Ojg6Ojk6OiI7CisgCisgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgeworICAgeyJieXRlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYid9LAorKyAgeyJjaGFyYWN0ZXJzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdjJ30sCisgICB7InNwYWNlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAorICAgeyJ3aWR0aCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorICAge0dFVE9QVF9IRUxQX09QVElPTl9ERUNMfSwKK0BAIC04MSw2ICsxMjQsNyBAQAorICIpLCBzdGRvdXQpOworICAgICAgIGZwdXRzIChfKCJcCisgICAtYiwgLS1ieXRlcyAgICAgICAgIGNvdW50IGJ5dGVzIHJhdGhlciB0aGFuIGNvbHVtbnNcblwKKysgIC1jLCAtLWNoYXJhY3RlcnMgICAgY291bnQgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBjb2x1bW5zXG5cCisgICAtcywgLS1zcGFjZXMgICAgICAgIGJyZWFrIGF0IHNwYWNlc1xuXAorICAgLXcsIC0td2lkdGg9V0lEVEggICB1c2UgV0lEVEggY29sdW1ucyBpbnN0ZWFkIG9mIDgwXG5cCisgIiksIHN0ZG91dCk7CitAQCAtOTgsNyArMTQyLDcgQEAKKyBzdGF0aWMgc2l6ZV90CisgYWRqdXN0X2NvbHVtbiAoc2l6ZV90IGNvbHVtbiwgY2hhciBjKQorIHsKKy0gIGlmICghY291bnRfYnl0ZXMpCisrICBpZiAob3BlcmF0aW5nX21vZGUgIT0gYnl0ZV9tb2RlKQorICAgICB7CisgICAgICAgaWYgKGMgPT0gJ1xiJykKKyAJeworQEAgLTEyMSwzMCArMTY1LDE0IEBACisgICAgdG8gc3Rkb3V0LCB3aXRoIG1heGltdW0gbGluZSBsZW5ndGggV0lEVEguCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCistc3RhdGljIGJvb2wKKy1mb2xkX2ZpbGUgKGNoYXIgY29uc3QgKmZpbGVuYW1lLCBzaXplX3Qgd2lkdGgpCisrc3RhdGljIHZvaWQKKytmb2xkX3RleHQgKEZJTEUgKmlzdHJlYW0sIHNpemVfdCB3aWR0aCwgaW50ICpzYXZlZF9lcnJubykKKyB7CistICBGSUxFICppc3RyZWFtOworICAgaW50IGM7CisgICBzaXplX3QgY29sdW1uID0gMDsJCS8qIFNjcmVlbiBjb2x1bW4gd2hlcmUgbmV4dCBjaGFyIHdpbGwgZ28uICovCisgICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKyAgIHN0YXRpYyBjaGFyICpsaW5lX291dCA9IE5VTEw7CisgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZF9vdXQgPSAwOworLSAgaW50IHNhdmVkX2Vycm5vOworLQorLSAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKy0gICAgeworLSAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKy0gICAgICBoYXZlX3JlYWRfc3RkaW4gPSB0cnVlOworLSAgICB9CistICBlbHNlCistICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CistCistICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CistICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CisgCisgICB3aGlsZSAoKGMgPSBnZXRjIChpc3RyZWFtKSkgIT0gRU9GKQorICAgICB7CitAQCAtMTcyLDYgKzIwMCwxNSBAQAorIAkgICAgICBib29sIGZvdW5kX2JsYW5rID0gZmFsc2U7CisgCSAgICAgIHNpemVfdCBsb2dpY2FsX2VuZCA9IG9mZnNldF9vdXQ7CisgCisrCSAgICAgIC8qIElmIExJTkVfT1VUIGhhcyBubyB3aWRlIGNoYXJhY3RlciwKKysJCSBwdXQgYSBuZXcgd2lkZSBjaGFyYWN0ZXIgaW4gTElORV9PVVQKKysJCSBpZiBjb2x1bW4gaXMgYmlnZ2VyIHRoYW4gd2lkdGguICovCisrCSAgICAgIGlmIChvZmZzZXRfb3V0ID09IDApCisrCQl7CisrCQkgIGxpbmVfb3V0W29mZnNldF9vdXQrK10gPSBjOworKwkJICBjb250aW51ZTsKKysJCX0KKysKKyAJICAgICAgLyogTG9vayBmb3IgdGhlIGxhc3QgYmxhbmsuICovCisgCSAgICAgIHdoaWxlIChsb2dpY2FsX2VuZCkKKyAJCXsKK0BAIC0yMTgsMTEgKzI1NSwyMjUgQEAKKyAgICAgICBsaW5lX291dFtvZmZzZXRfb3V0KytdID0gYzsKKyAgICAgfQorIAorLSAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysgICpzYXZlZF9lcnJubyA9IGVycm5vOworKworKyAgaWYgKG9mZnNldF9vdXQpCisrICAgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZiAoY2hhciksIChzaXplX3QpIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCisrICBmcmVlKGxpbmVfb3V0KTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZm9sZF9tdWx0aWJ5dGVfdGV4dCAoRklMRSAqaXN0cmVhbSwgc2l6ZV90IHdpZHRoLCBpbnQgKnNhdmVkX2Vycm5vKQorK3sKKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgc2l6ZV90IGJ1ZmxlbiA9IDA7CS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgY2hhciAqYnVmcG9zOyAgICAgICAgIC8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICB3aW50X3Qgd2M7CQkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZSwgc3RhdGVfYmFrOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBjaGFyICpsaW5lX291dCA9IE5VTEw7CisrICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKysgIHNpemVfdCBhbGxvY2F0ZWRfb3V0ID0gMDsKKysKKysgIGludCBpbmNyZW1lbnQ7CisrICBzaXplX3QgY29sdW1uID0gMDsKKysKKysgIHNpemVfdCBsYXN0X2JsYW5rX3BvczsKKysgIHNpemVfdCBsYXN0X2JsYW5rX2NvbHVtbjsKKysgIGludCBpc19ibGFua19zZWVuOworKyAgaW50IGxhc3RfYmxhbmtfaW5jcmVtZW50OworKyAgaW50IGlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rOworKyAgc2l6ZV90IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bTsKKysgIGludCBpc19jcl9hZnRlcl9sYXN0X2JsYW5rOworKworKyNkZWZpbmUgQ0xFQVJfRkxBR1MJCQkJXAorKyAgIGRvCQkJCQkJXAorKyAgICAgewkJCQkJCVwKKysJbGFzdF9ibGFua19wb3MgPSAwOwkJCVwKKysJbGFzdF9ibGFua19jb2x1bW4gPSAwOwkJCVwKKysJaXNfYmxhbmtfc2VlbiA9IDA7CQkJXAorKwlpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayA9IDA7CQlcCisrCWJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CVwKKysJaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CQlcCisrICAgICB9CQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyNkZWZpbmUgU1RBUlRfTkVXX0xJTkUJCQlcCisrICAgZG8JCQkJCVwKKysgICAgIHsJCQkJCVwKKysgICAgICBwdXRjaGFyICgnXG4nKTsJCQlcCisrICAgICAgY29sdW1uID0gMDsJCQlcCisrICAgICAgb2Zmc2V0X291dCA9IDA7CQkJXAorKyAgICAgIENMRUFSX0ZMQUdTOwkJCVwKKysgICAgfQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyAgQ0xFQVJfRkxBR1M7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OyBidWZwb3MgKz0gbWJsZW5ndGgsIGJ1ZmxlbiAtPSBtYmxlbmd0aCkKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mIChpc3RyZWFtKSAmJiAhZmVycm9yIChpc3RyZWFtKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgaXN0cmVhbSk7CisrCSAgYnVmcG9zID0gYnVmOworKwl9CisrCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCWJyZWFrOworKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGNvbnZmYWlsID0gMDsKKysgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJnN0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToKKysJY2FzZSAoc2l6ZV90KS0yOgorKwkgIGNvbnZmYWlsKys7CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgLyogRmFsbCB0aHJvdWdoLiAqLworKworKwljYXNlIDA6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGJyZWFrOworKwl9CisrCisrcmVzY2FuOgorKyAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCQkJLyogYnl0ZSBtb2RlICovCisrCWluY3JlbWVudCA9IG1ibGVuZ3RoOworKyAgICAgIGVsc2UgaWYgKG9wZXJhdGluZ19tb2RlID09IGNoYXJhY3Rlcl9tb2RlKQkvKiBjaGFyYWN0ZXIgbW9kZSAqLworKwlpbmNyZW1lbnQgPSAxOworKyAgICAgIGVsc2UJCQkJCQkvKiBjb2x1bW4gbW9kZSAqLworKwl7CisrCSAgaWYgKGNvbnZmYWlsKQorKwkgICAgaW5jcmVtZW50ID0gMTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHN3aXRjaCAod2MpCisrCQl7CisrCQljYXNlIEwnXG4nOgorKwkJICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YoY2hhciksIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCQkgIFNUQVJUX05FV19MSU5FOworKwkJICBjb250aW51ZTsKKysJCSAgCisrCQljYXNlIEwnXGInOgorKwkJICBpbmNyZW1lbnQgPSAoY29sdW1uID4gMCkgPyAtMSA6IDA7CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1xyJzoKKysJCSAgaW5jcmVtZW50ID0gLTEgKiBjb2x1bW47CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1x0JzoKKysJCSAgaW5jcmVtZW50ID0gOCAtIGNvbHVtbiAlIDg7CisrCQkgIGJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCSAgaW5jcmVtZW50ID0gd2N3aWR0aCAod2MpOworKwkJICBpbmNyZW1lbnQgPSAoaW5jcmVtZW50IDwgMCkgPyAwIDogaW5jcmVtZW50OworKwkJfQorKwkgICAgfQorKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGJyZWFrX3NwYWNlcyAmJiBsYXN0X2JsYW5rX3BvcykKKysJeworKwkgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZihjaGFyKSwgbGFzdF9ibGFua19wb3MsIHN0ZG91dCk7CisrCSAgcHV0Y2hhciAoJ1xuJyk7CisrCisrCSAgb2Zmc2V0X291dCA9IG9mZnNldF9vdXQgLSBsYXN0X2JsYW5rX3BvczsKKysJICBjb2x1bW4gPSBjb2x1bW4gLSBsYXN0X2JsYW5rX2NvbHVtbiArICgoaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuaykKKysJICAgICAgPyBsYXN0X2JsYW5rX2luY3JlbWVudCA6IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSk7CisrCSAgbWVtbW92ZSAobGluZV9vdXQsIGxpbmVfb3V0ICsgbGFzdF9ibGFua19wb3MsIG9mZnNldF9vdXQpOworKwkgIENMRUFSX0ZMQUdTOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGNvbHVtbiAhPSAwKQorKwl7CisrCSAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mKGNoYXIpLCBvZmZzZXRfb3V0LCBzdGRvdXQpOworKwkgIFNUQVJUX05FV19MSU5FOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGFsbG9jYXRlZF9vdXQgPCBvZmZzZXRfb3V0ICsgbWJsZW5ndGgpCisrCXsKKysJICBhbGxvY2F0ZWRfb3V0ICs9IDEwMjQ7CisrCSAgbGluZV9vdXQgPSB4cmVhbGxvYyAobGluZV9vdXQsIGFsbG9jYXRlZF9vdXQpOworKwl9CisrCisrICAgICAgbWVtY3B5IChsaW5lX291dCArIG9mZnNldF9vdXQsIGJ1ZnBvcywgbWJsZW5ndGgpOworKyAgICAgIG9mZnNldF9vdXQgKz0gbWJsZW5ndGg7CisrICAgICAgY29sdW1uICs9IGluY3JlbWVudDsKKysKKysgICAgICBpZiAoaXNfYmxhbmtfc2VlbiAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdccicpCisrCWlzX2NyX2FmdGVyX2xhc3RfYmxhbmsgPSAxOworKworKyAgICAgIGlmIChpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdcYicpCisrCSsrYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtOworKyAgICAgIGVsc2UKKysJaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAwOworKworKyAgICAgIGlmIChicmVha19zcGFjZXMgJiYgIWNvbnZmYWlsICYmIGlzd2JsYW5rICh3YykpCisrCXsKKysJICBsYXN0X2JsYW5rX3BvcyA9IG9mZnNldF9vdXQ7CisrCSAgbGFzdF9ibGFua19jb2x1bW4gPSBjb2x1bW47CisrCSAgaXNfYmxhbmtfc2VlbiA9IDE7CisrCSAgbGFzdF9ibGFua19pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisrCSAgaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAxOworKwkgIGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CisrCSAgaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CisrCX0KKysgICAgfQorKworKyAgKnNhdmVkX2Vycm5vID0gZXJybm87CisgCisgICBpZiAob2Zmc2V0X291dCkKKyAgICAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mIChjaGFyKSwgKHNpemVfdCkgb2Zmc2V0X291dCwgc3Rkb3V0KTsKKyAKKysgIGZyZWUobGluZV9vdXQpOworK30KKysjZW5kaWYKKysKKysvKiBGb2xkIGZpbGUgRklMRU5BTUUsIG9yIHN0YW5kYXJkIGlucHV0IGlmIEZJTEVOQU1FIGlzICItIiwKKysgICB0byBzdGRvdXQsIHdpdGggbWF4aW11bSBsaW5lIGxlbmd0aCBXSURUSC4KKysgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAxIGlmIGFuIGVycm9yIG9jY3Vycy4gKi8KKysKKytzdGF0aWMgYm9vbAorK2ZvbGRfZmlsZSAoY2hhciAqZmlsZW5hbWUsIHNpemVfdCB3aWR0aCkKKyt7CisrICBGSUxFICppc3RyZWFtOworKyAgaW50IHNhdmVkX2Vycm5vOworKworKyAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKysgICAgeworKyAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKysgICAgICBoYXZlX3JlYWRfc3RkaW4gPSAxOworKyAgICB9CisrICBlbHNlCisrICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CisrCisrICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIC8qIERlZmluZSBob3cgSVNUUkVBTSBpcyBiZWluZyBmb2xkZWQuICovCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBmb2xkX211bHRpYnl0ZV90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgZm9sZF90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysKKyAgIGlmIChmZXJyb3IgKGlzdHJlYW0pKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIHNhdmVkX2Vycm5vLCAiJXMiLCBmaWxlbmFtZSk7CitAQCAtMjU1LDcgKzUwNiw4IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCistICBicmVha19zcGFjZXMgPSBjb3VudF9ieXRlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworKyAgb3BlcmF0aW5nX21vZGUgPSBjb2x1bW5fbW9kZTsKKysgIGJyZWFrX3NwYWNlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworIAorICAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsIHNob3J0b3B0cywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkKKyAgICAgeworQEAgLTI2NCw3ICs1MTYsMTUgQEAKKyAgICAgICBzd2l0Y2ggKG9wdGMpCisgCXsKKyAJY2FzZSAnYic6CQkvKiBDb3VudCBieXRlcyByYXRoZXIgdGhhbiBjb2x1bW5zLiAqLworLQkgIGNvdW50X2J5dGVzID0gdHJ1ZTsKKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gY29sdW1uX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgd2F5IG9mIGZvbGRpbmcgbWF5IGJlIHNwZWNpZmllZCIpKTsKKysJICBvcGVyYXRpbmdfbW9kZSA9IGJ5dGVfbW9kZTsKKysJICBicmVhazsKKysKKysJY2FzZSAnYyc6CisrCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IGNvbHVtbl9tb2RlKQorKwkgICAgRkFUQUxfRVJST1IgKF8oIm9ubHkgb25lIHdheSBvZiBmb2xkaW5nIG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSAncyc6CQkvKiBCcmVhayBhdCB3b3JkIGJvdW5kYXJpZXMuICovCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYy5pMThuCTIwMDctMDItMjQgMTE6MjM6MjMuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYwkyMDA3LTAzLTAxIDE1OjEwOjU3LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDEwICsyMywxOSBAQAorIAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0xMTYsMTQgKzEyNSwzOCBAQAorIC8qIFRob3VzYW5kcyBzZXBhcmF0b3I7IGlmIC0xLCB0aGVuIHRoZXJlIGlzbid0IG9uZS4gICovCisgc3RhdGljIGludCB0aG91c2FuZHNfc2VwOworIAorK3N0YXRpYyBpbnQgZm9yY2VfZ2VuZXJhbF9udW1jb21wYXJlID0gMDsKKysKKyAvKiBOb256ZXJvIGlmIHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsZXMgYXJlIGhhcmQuICAqLworIHN0YXRpYyBib29sIGhhcmRfTENfQ09MTEFURTsKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyBzdGF0aWMgYm9vbCBoYXJkX0xDX1RJTUU7CisgI2VuZGlmCisgCisgI2RlZmluZSBOT05aRVJPKHgpICgoeCkgIT0gMCkKKyAKKysvKiBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyJ3MgYnl0ZSBsZW5ndGguICovCisrI2RlZmluZSBHRVRfQllURUxFTl9PRl9DSEFSKExJTSwgUFRSLCBNQkxFTkdUSCwgU1RBVEUpCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB3YzsJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIFBUUiwgTElNIC0gUFRSLCAmU1RBVEUpOwkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgU1RBVEUgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJLyogRmFsbCB0aHJvdWdoLiAqLwkJCQkJXAorKwljYXNlIDA6CQkJCQkJCQlcCisrCSAgTUJMRU5HVEggPSAxOwkJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIC8qIFRoZSBraW5kIG9mIGJsYW5rcyBmb3IgJy1iJyB0byBza2lwIGluIHZhcmlvdXMgb3B0aW9ucy4gKi8KKyBlbnVtIGJsYW5rdHlwZSB7IGJsX3N0YXJ0LCBibF9lbmQsIGJsX2JvdGggfTsKKyAKK0BAIC0yNjEsMTMgKzI5NCwxMSBAQAorICAgIHRoZXkgd2VyZSByZWFkIGlmIGFsbCBrZXlzIGNvbXBhcmUgZXF1YWwuICAqLworIHN0YXRpYyBib29sIHN0YWJsZTsKKyAKKy0vKiBJZiBUQUIgaGFzIHRoaXMgdmFsdWUsIGJsYW5rcyBzZXBhcmF0ZSBmaWVsZHMuICAqLworLWVudW0geyBUQUJfREVGQVVMVCA9IENIQVJfTUFYICsgMSB9OworLQorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBUQUJfREVGQVVMVCwgdGhlbiBmaWVsZHMgYXJlCisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIHRhYl9sZW5ndGggaXMgMCwgdGhlbiBmaWVsZHMgYXJlCisgICAgc2VwYXJhdGVkIGJ5IHRoZSBlbXB0eSBzdHJpbmcgYmV0d2VlbiBhIG5vbi1ibGFuayBjaGFyYWN0ZXIgYW5kIGEgYmxhbmsKKyAgICBjaGFyYWN0ZXIuICovCistc3RhdGljIGludCB0YWIgPSBUQUJfREVGQVVMVDsKKytzdGF0aWMgY2hhciB0YWJbTUJfTEVOX01BWCArIDFdOworK3N0YXRpYyBzaXplX3QgdGFiX2xlbmd0aCA9IDA7CisgCisgLyogRmxhZyB0byByZW1vdmUgY29uc2VjdXRpdmUgZHVwbGljYXRlIGxpbmVzIGZyb20gdGhlIG91dHB1dC4KKyAgICBPbmx5IHRoZSBsYXN0IG9mIGEgc2VxdWVuY2Ugb2YgZXF1YWwgbGluZXMgd2lsbCBiZSBvdXRwdXQuICovCitAQCAtNjM5LDYgKzY3MCw0NCBAQAorICAgICB1cGRhdGVfcHJvYyAocGlkKTsKKyB9CisgCisrLyogRnVuY3Rpb24gcG9pbnRlcnMuICovCisrc3RhdGljIHZvaWQKKysoKmluaXR0YWJsZXMpICh2b2lkKTsKKytzdGF0aWMgY2hhciAqCisrKCpiZWdmaWVsZCkgKGNvbnN0IHN0cnVjdCBsaW5lKiwgY29uc3Qgc3RydWN0IGtleWZpZWxkICopOworK3N0YXRpYyBjaGFyICoKKysoKmxpbWZpZWxkKSAoY29uc3Qgc3RydWN0IGxpbmUqLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKik7Cisrc3RhdGljIGludAorKygqZ2V0bW9udGgpIChjaGFyIGNvbnN0ICosIHNpemVfdCk7Cisrc3RhdGljIGludAorKygqa2V5Y29tcGFyZSkgKGNvbnN0IHN0cnVjdCBsaW5lICosIGNvbnN0IHN0cnVjdCBsaW5lICopOworK3N0YXRpYyBpbnQKKysoKm51bWNvbXBhcmUpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogVGVzdCBmb3Igd2hpdGUgc3BhY2UgbXVsdGlieXRlIGNoYXJhY3Rlci4KKysgICBTZXQgTEVOR1RIIHRoZSBieXRlIGxlbmd0aCBvZiBpbnZlc3RpZ2F0ZWQgbXVsdGlieXRlIGNoYXJhY3Rlci4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2lzbWJibGFuayAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3QgKmxlbmd0aCkKKyt7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICB3Y2hhcl90IHdjOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHIsIGxlbiwgJnN0YXRlKTsKKysKKysgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrICAgIHsKKysgICAgICAqbGVuZ3RoID0gMTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgKmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKyAgcmV0dXJuIGlzd2JsYW5rICh3Yyk7CisrfQorKyNlbmRpZgorKworIC8qIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGVtcG9yYXJ5IGZpbGVzLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTk3OCw3ICsxMDQ3LDcgQEAKKyAgIGZyZWUgKG5vZGUpOworIH0KKyAKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAKKyBzdGF0aWMgaW50Cisgc3RydWN0X21vbnRoX2NtcCAoY29uc3Qgdm9pZCAqbTEsIGNvbnN0IHZvaWQgKm0yKQorQEAgLTk5Myw3ICsxMDYyLDcgQEAKKyAvKiBJbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgY2xhc3MgdGFibGVzLiAqLworIAorIHN0YXRpYyB2b2lkCistaW5pdHRhYmxlcyAodm9pZCkKKytpbml0dGFibGVzX3VuaSAodm9pZCkKKyB7CisgICBzaXplX3QgaTsKKyAKK0BAIC0xMDA1LDcgKzEwNzQsNyBAQAorICAgICAgIGZvbGRfdG91cHBlcltpXSA9IHRvdXBwZXIgKGkpOworICAgICB9CisgCistI2lmIEhBVkVfTkxfTEFOR0lORk8KKysjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICAvKiBJZiB3ZSdyZSBub3QgaW4gdGhlICJDIiBsb2NhbGUsIHJlYWQgZGlmZmVyZW50IG5hbWVzIGZvciBtb250aHMuICAqLworICAgaWYgKGhhcmRfTENfVElNRSkKKyAgICAgeworQEAgLTEwMzEsNiArMTEwMCw2NCBAQAorICNlbmRpZgorIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytpbml0dGFibGVzX21iICh2b2lkKQorK3sKKysgIGludCBpLCBqLCBrLCBsOworKyAgY2hhciAqbmFtZSwgKnM7CisrICBzaXplX3Qgc19sZW4sIG1ibGVuZ3RoOworKyAgY2hhciBtYmNbTUJfTEVOX01BWF07CisrICB3Y2hhcl90IHdjLCBwd2M7CisrICBtYnN0YXRlX3Qgc3RhdGVfbWIsIHN0YXRlX3djOworKworKyAgZm9yIChpID0gMDsgaSA8IE1PTlRIU19QRVJfWUVBUjsgaSsrKQorKyAgICB7CisrICAgICAgcyA9IChjaGFyICopIG5sX2xhbmdpbmZvIChBQk1PTl8xICsgaSk7CisrICAgICAgc19sZW4gPSBzdHJsZW4gKHMpOworKyAgICAgIG1vbnRodGFiW2ldLm5hbWUgPSBuYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoc19sZW4gKyAxKTsKKysgICAgICBtb250aHRhYltpXS52YWwgPSBpICsgMTsKKysKKysgICAgICBtZW1zZXQgKCZzdGF0ZV9tYiwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysgICAgICBtZW1zZXQgKCZzdGF0ZV93YywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICBmb3IgKGogPSAwOyBqIDwgc19sZW47KQorKwl7CisrCSAgaWYgKCFpc21iYmxhbmsgKHMgKyBqLCBzX2xlbiAtIGosICZtYmxlbmd0aCkpCisrCSAgICBicmVhazsKKysJICBqICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgZm9yIChrID0gMDsgaiA8IHNfbGVuOykKKysJeworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCAocyArIGopLCAoc19sZW4gLSBqKSwgJnN0YXRlX21iKTsKKysJICBhc3NlcnQgKG1ibGVuZ3RoICE9IChzaXplX3QpLTEgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMik7CisrCSAgaWYgKG1ibGVuZ3RoID09IDApCisrCSAgICBicmVhazsKKysKKysJICBwd2MgPSB0b3d1cHBlciAod2MpOworKwkgIGlmIChwd2MgPT0gd2MpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAobWJjLCBzICsgaiwgbWJsZW5ndGgpOworKwkgICAgICBqICs9IG1ibGVuZ3RoOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaiArPSBtYmxlbmd0aDsKKysJICAgICAgbWJsZW5ndGggPSB3Y3J0b21iIChtYmMsIHB3YywgJnN0YXRlX3djKTsKKysJICAgICAgYXNzZXJ0IChtYmxlbmd0aCAhPSAoc2l6ZV90KTAgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMSk7CisrCSAgICB9CisrCisrCSAgZm9yIChsID0gMDsgbCA8IG1ibGVuZ3RoOyBsKyspCisrCSAgICBuYW1lW2srK10gPSBtYmNbbF07CisrCX0KKysgICAgICBuYW1lW2tdID0gJ1wwJzsKKysgICAgfQorKyAgcXNvcnQgKCh2b2lkICopIG1vbnRodGFiLCBNT05USFNfUEVSX1lFQVIsCisrICAgICAgc2l6ZW9mIChzdHJ1Y3QgbW9udGgpLCBzdHJ1Y3RfbW9udGhfY21wKTsKKyt9CisrI2VuZGlmCisrCisgLyogU3BlY2lmeSB0aGUgYW1vdW50IG9mIG1haW4gbWVtb3J5IHRvIHVzZSB3aGVuIHNvcnRpbmcuICAqLworIHN0YXRpYyB2b2lkCisgc3BlY2lmeV9zb3J0X3NpemUgKGNoYXIgY29uc3QgKnMpCitAQCAtMTI0MSw3ICsxMzY4LDcgQEAKKyAgICBieSBLRVkgaW4gTElORS4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistYmVnZmllbGQgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKytiZWdmaWVsZF91bmkgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKyB7CisgICBjaGFyICpwdHIgPSBsaW5lLT50ZXh0LCAqbGltID0gcHRyICsgbGluZS0+bGVuZ3RoIC0gMTsKKyAgIHNpemVfdCBzd29yZCA9IGtleS0+c3dvcmQ7CitAQCAtMTI1MSwxMCArMTM3OCwxMCBAQAorICAgLyogVGhlIGxlYWRpbmcgZmllbGQgc2VwYXJhdG9yIGl0c2VsZiBpcyBpbmNsdWRlZCBpbiBhIGZpZWxkIHdoZW4gLXQKKyAgICAgIGlzIGFic2VudC4gICovCisgCistICBpZiAodGFiICE9IFRBQl9ERUZBVUxUKQorKyAgaWYgKHRhYl9sZW5ndGgpCisgICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgc3dvcmQtLSkKKyAgICAgICB7CistCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWIpCisrCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWJbMF0pCisgCSAgKytwdHI7CisgCWlmIChwdHIgPCBsaW0pCisgCSAgKytwdHI7CitAQCAtMTI4MiwxMSArMTQwOSw3MCBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytiZWdmaWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGludCBpOworKyAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisrICBzaXplX3Qgc3dvcmQgPSBrZXktPnN3b3JkOworKyAgc2l6ZV90IHNjaGFyID0ga2V5LT5zY2hhcjsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBpZiAodGFiX2xlbmd0aCkKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBzd29yZC0tKQorKyAgICAgIHsKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiBtZW1jbXAgKHB0ciwgdGFiLCB0YWJfbGVuZ3RoKSAhPSAwKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJaWYgKHB0ciA8IGxpbSkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrICAgICAgfQorKyAgZWxzZQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIHN3b3JkLS0pCisrICAgICAgeworKwl3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwlpZiAocHRyIDwgbGltKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAhaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrICAgICAgfQorKworKyAgaWYgKGtleS0+c2tpcHNibGFua3MpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysgICAgICBwdHIgKz0gbWJsZW5ndGg7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgc2NoYXI7IGkrKykKKysgICAgeworKyAgICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKworKyAgICAgIGlmIChwdHIgKyBtYmxlbmd0aCA+IGxpbSkKKysJYnJlYWs7CisrICAgICAgZWxzZQorKwlwdHIgKz0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIHJldHVybiBwdHI7CisrfQorKyNlbmRpZgorKworIC8qIFJldHVybiB0aGUgbGltaXQgb2YgKGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyKSB0aGUgZmllbGQKKyAgICBpbiBMSU5FIHNwZWNpZmllZCBieSBLRVkuICovCisgCisgc3RhdGljIGNoYXIgKgorLWxpbWZpZWxkIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisrbGltZmllbGRfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisgeworICAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisgICBzaXplX3QgZXdvcmQgPSBrZXktPmV3b3JkLCBlY2hhciA9IGtleS0+ZWNoYXI7CitAQCAtMTI5OSwxMCArMTQ4NSwxMCBAQAorICAgICAgYGJlZ2lubmluZycgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGRlbGltaXRpbmcgVEFCLgorICAgICAgT3RoZXJ3aXNlLCBsZWF2ZSBQVFIgcG9pbnRpbmcgYXQgdGhlIGZpcnN0IGBibGFuaycgY2hhcmFjdGVyIGFmdGVyCisgICAgICB0aGUgcHJlY2VkaW5nIGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBld29yZC0tKQorICAgICAgIHsKKy0Jd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYikKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYlswXSkKKyAJICArK3B0cjsKKyAJaWYgKHB0ciA8IGxpbSAmJiAoZXdvcmQgfCBlY2hhcikpCisgCSAgKytwdHI7CitAQCAtMTM0OCwxMCArMTUzNCwxMCBAQAorICAgICAgKi8KKyAKKyAgIC8qIE1ha2UgTElNIHBvaW50IHRvIHRoZSBlbmQgb2YgKG9uZSBieXRlIHBhc3QpIHRoZSBjdXJyZW50IGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgeworICAgICAgIGNoYXIgKm5ld2xpbTsKKy0gICAgICBuZXdsaW0gPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpOworKyAgICAgIG5ld2xpbSA9IG1lbWNociAocHRyLCB0YWJbMF0sIGxpbSAtIHB0cik7CisgICAgICAgaWYgKG5ld2xpbSkKKyAJbGltID0gbmV3bGltOworICAgICB9CitAQCAtMTM4NCw2ICsxNTcwLDEwNyBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytsaW1maWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGNoYXIgKnB0ciA9IGxpbmUtPnRleHQsICpsaW0gPSBwdHIgKyBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IGV3b3JkID0ga2V5LT5ld29yZCwgZWNoYXIgPSBrZXktPmVjaGFyOworKyAgaW50IGk7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgbWVtY21wIChwdHIsIHRhYiwgdGFiX2xlbmd0aCkgIT0gMCkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrCWlmIChwdHIgPCBsaW0gJiYgKGV3b3JkIHwgZWNoYXIpKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysgICAgICB9CisrICBlbHNlCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrCWlmIChwdHIgPCBsaW0pCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKwl3aGlsZSAocHRyIDwgbGltICYmICFpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKwkgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrCisrIyBpZmRlZiBQT1NJWF9VTlNQRUNJRklFRAorKyAgLyogTWFrZSBMSU0gcG9pbnQgdG8gdGhlIGVuZCBvZiAob25lIGJ5dGUgcGFzdCkgdGhlIGN1cnJlbnQgZmllbGQuICAqLworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHsKKysgICAgICBjaGFyICpuZXdsaW0sICpwOworKworKyAgICAgIG5ld2xpbSA9IE5VTEw7CisrICAgICAgZm9yIChwID0gcHRyOyBwIDwgbGltOykKKysgCXsKKysJICBpZiAobWVtY21wIChwLCB0YWIsIHRhYl9sZW5ndGgpID09IDApCisrCSAgICB7CisrCSAgICAgIG5ld2xpbSA9IHA7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKworKwkgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgIHAgKz0gbWJsZW5ndGg7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgY2hhciAqbmV3bGltOworKyAgICAgIG5ld2xpbSA9IHB0cjsKKysKKysgICAgICB3aGlsZSAobmV3bGltIDwgbGltICYmIGlzbWJibGFuayAobmV3bGltLCBsaW0gLSBuZXdsaW0sICZtYmxlbmd0aCkpCisrCW5ld2xpbSArPSBtYmxlbmd0aDsKKysgICAgICBpZiAocHRyIDwgbGltKQorKwl7CisrCSAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwl9CisrICAgICAgd2hpbGUgKG5ld2xpbSA8IGxpbSAmJiAhaXNtYmJsYW5rIChuZXdsaW0sIGxpbSAtIG5ld2xpbSwgJm1ibGVuZ3RoKSkKKysJbmV3bGltICs9IG1ibGVuZ3RoOworKyAgICAgIGxpbSA9IG5ld2xpbTsKKysgICAgfQorKyMgZW5kaWYKKysKKysgIC8qIElmIHdlJ3JlIHNraXBwaW5nIGxlYWRpbmcgYmxhbmtzLCBkb24ndCBzdGFydCBjb3VudGluZyBjaGFyYWN0ZXJzCisrICAgKiAgICAgIHVudGlsIGFmdGVyIHNraXBwaW5nIHBhc3QgYW55IGxlYWRpbmcgYmxhbmtzLiAgKi8KKysgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrICAgICAgcHRyICs9IG1ibGVuZ3RoOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIC8qIEFkdmFuY2UgUFRSIGJ5IEVDSEFSIChpZiBwb3NzaWJsZSksIGJ1dCBubyBmdXJ0aGVyIHRoYW4gTElNLiAgKi8KKysgIGZvciAoaSA9IDA7IGkgPCBlY2hhcjsgaSsrKQorKyAgICB7CisrICAgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCisrICAgICAgaWYgKHB0ciArIG1ibGVuZ3RoID4gbGltKQorKwlicmVhazsKKysgICAgICBlbHNlCisrCXB0ciArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIHB0cjsKKyt9CisrI2VuZGlmCisrCisgLyogRmlsbCBCVUYgcmVhZGluZyBmcm9tIEZQLCBtb3ZpbmcgYnVmLT5sZWZ0IGJ5dGVzIGZyb20gdGhlIGVuZAorICAgIG9mIGJ1Zi0+YnVmIHRvIHRoZSBiZWdpbm5pbmcgZmlyc3QuICBJZiBFT0YgaXMgcmVhY2hlZCBhbmQgdGhlCisgICAgZmlsZSB3YXNuJ3QgdGVybWluYXRlZCBieSBhIG5ld2xpbmUsIHN1cHBseSBvbmUuICBTZXQgdXAgQlVGJ3MgbGluZQorQEAgLTE0NjYsOCArMTc1MywyNCBAQAorIAkJICBlbHNlCisgCQkgICAgeworIAkJICAgICAgaWYgKGtleS0+c2tpcHNibGFua3MpCistCQkJd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKy0JCQkgIGxpbmVfc3RhcnQrKzsKKysJCQl7CisrI2lmIEhBVkVfTUJSVE9XQworKwkJCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorKwkJCSAgICB7CisrCQkJICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKwkJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKysJCQkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJCSAgICAgIHdoaWxlIChsaW5lX3N0YXJ0IDwgbGluZS0+a2V5bGltICYmCisrCQkJCSAgICAgaXNtYmJsYW5rIChsaW5lX3N0YXJ0LAorKwkJCQkJCWxpbmUtPmtleWxpbSAtIGxpbmVfc3RhcnQsCisrCQkJCQkJJm1ibGVuZ3RoKSkKKysJCQkJbGluZV9zdGFydCArPSBtYmxlbmd0aDsKKysJCQkgICAgfQorKwkJCSAgZWxzZQorKyNlbmRpZgorKwkJCSAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKysJCQkgICAgbGluZV9zdGFydCsrOworKwkJCX0KKyAJCSAgICAgIGxpbmUtPmtleWJlZyA9IGxpbmVfc3RhcnQ7CisgCQkgICAgfQorIAkJfQorQEAgLTE1MDAsNyArMTgwMyw3IEBACisgICAgaGlkZW91c2x5IGZhc3QuICovCisgCisgc3RhdGljIGludAorLW51bWNvbXBhcmUgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisrbnVtY29tcGFyZV91bmkgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisgeworICAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmEpXSkKKyAgICAgYSsrOworQEAgLTE1MTAsNiArMTgxMywyNSBAQAorICAgcmV0dXJuIHN0cm51bWNtcCAoYSwgYiwgZGVjaW1hbF9wb2ludCwgdGhvdXNhbmRzX3NlcCk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisrbnVtY29tcGFyZV9tYiAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKKyt7CisrICBzaXplX3QgbWJsZW5ndGgsIGxlbjsKKysgIGxlbiA9IHN0cmxlbiAoYSk7IC8qIG9rYXkgZm9yIFVURi04ICovCisrICB3aGlsZSAoKmEgJiYgaXNtYmJsYW5rIChhLCBsZW4gPiBNQl9DVVJfTUFYID8gTUJfQ1VSX01BWCA6IGxlbiwgJm1ibGVuZ3RoKSkKKysgICAgeworKyAgICAgIGEgKz0gbWJsZW5ndGg7CisrICAgICAgbGVuIC09IG1ibGVuZ3RoOworKyAgICB9CisrICBsZW4gPSBzdHJsZW4gKGIpOyAvKiBva2F5IGZvciBVVEYtOCAqLworKyAgd2hpbGUgKCpiICYmIGlzbWJibGFuayAoYiwgbGVuID4gTUJfQ1VSX01BWCA/IE1CX0NVUl9NQVggOiBsZW4sICZtYmxlbmd0aCkpCisrICAgIGIgKz0gbWJsZW5ndGg7CisrCisrICByZXR1cm4gc3RybnVtY21wIChhLCBiLCBkZWNpbWFsX3BvaW50LCB0aG91c2FuZHNfc2VwKTsKKyt9CisrI2VuZGlmIC8qIEhBVl9FTUJSVE9XQyAqLworKworIHN0YXRpYyBpbnQKKyBnZW5lcmFsX251bWNvbXBhcmUgKGNvbnN0IGNoYXIgKnNhLCBjb25zdCBjaGFyICpzYikKKyB7CitAQCAtMTU0Myw3ICsxODY1LDcgQEAKKyAgICBSZXR1cm4gMCBpZiB0aGUgbmFtZSBpbiBTIGlzIG5vdCByZWNvZ25pemVkLiAgKi8KKyAKKyBzdGF0aWMgaW50CistZ2V0bW9udGggKGNoYXIgY29uc3QgKm1vbnRoLCBzaXplX3QgbGVuKQorK2dldG1vbnRoX3VuaSAoY2hhciBjb25zdCAqbW9udGgsIHNpemVfdCBsZW4pCisgeworICAgc2l6ZV90IGxvID0gMDsKKyAgIHNpemVfdCBoaSA9IE1PTlRIU19QRVJfWUVBUjsKK0BAIC0xNjk4LDExICsyMDIwLDc5IEBACisgICByZXR1cm4gZGlmZjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytnZXRtb250aF9tYiAoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKKyt7CisrICBjaGFyICptb250aDsKKysgIHJlZ2lzdGVyIHNpemVfdCBpOworKyAgcmVnaXN0ZXIgaW50IGxvID0gMCwgaGkgPSBNT05USFNfUEVSX1lFQVIsIHJlc3VsdDsKKysgIGNoYXIgKnRtcDsKKysgIHNpemVfdCB3Y2xlbmd0aCwgbWJsZW5ndGg7CisrICBjb25zdCBjaGFyICoqcHA7CisrICBjb25zdCB3Y2hhcl90ICoqd3BwOworKyAgd2NoYXJfdCAqbW9udGhfd2NzOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgd2hpbGUgKGxlbiA+IDAgJiYgaXNtYmJsYW5rIChzLCBsZW4sICZtYmxlbmd0aCkpCisrICAgIHsKKysgICAgICBzICs9IG1ibGVuZ3RoOworKyAgICAgIGxlbiAtPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgaWYgKGxlbiA9PSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIG1vbnRoID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxKTsKKysKKysgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrICBtZW1jcHkgKHRtcCwgcywgbGVuKTsKKysgIHRtcFtsZW5dID0gJ1wwJzsKKysgIHBwID0gKGNvbnN0IGNoYXIgKiopJnRtcDsKKysgIG1vbnRoX3djcyA9ICh3Y2hhcl90ICopIGFsbG9jYSAoKGxlbiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgd2NsZW5ndGggPSBtYnNydG93Y3MgKG1vbnRoX3djcywgcHAsIGxlbiArIDEsICZzdGF0ZSk7CisrICBhc3NlcnQgKHdjbGVuZ3RoICE9IChzaXplX3QpLTEgJiYgKnBwID09IE5VTEwpOworKworKyAgZm9yIChpID0gMDsgaSA8IHdjbGVuZ3RoOyBpKyspCisrICAgIHsKKysgICAgICBtb250aF93Y3NbaV0gPSB0b3d1cHBlcihtb250aF93Y3NbaV0pOworKyAgICAgIGlmIChpc3dibGFuayAobW9udGhfd2NzW2ldKSkKKysJeworKwkgIG1vbnRoX3djc1tpXSA9IEwnXDAnOworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIHdwcCA9IChjb25zdCB3Y2hhcl90ICoqKSZtb250aF93Y3M7CisrCisrICBtYmxlbmd0aCA9IHdjc3J0b21icyAobW9udGgsIHdwcCwgbGVuICsgMSwgJnN0YXRlKTsKKysgIGFzc2VydCAobWJsZW5ndGggIT0gKC0xKSAmJiAqd3BwID09IE5VTEwpOworKworKyAgZG8KKysgICAgeworKyAgICAgIGludCBpeCA9IChsbyArIGhpKSAvIDI7CisrCisrICAgICAgaWYgKHN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltpeF0ubmFtZSwgc3RybGVuIChtb250aHRhYltpeF0ubmFtZSkpIDwgMCkKKysJaGkgPSBpeDsKKysgICAgICBlbHNlCisrCWxvID0gaXg7CisrICAgIH0KKysgIHdoaWxlIChoaSAtIGxvID4gMSk7CisrCisrICByZXN1bHQgPSAoIXN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltsb10ubmFtZSwgc3RybGVuIChtb250aHRhYltsb10ubmFtZSkpCisrICAgICAgPyBtb250aHRhYltsb10udmFsIDogMCk7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysjZW5kaWYKKysKKyAvKiBDb21wYXJlIHR3byBsaW5lcyBBIGFuZCBCIHRyeWluZyBldmVyeSBrZXkgaW4gc2VxdWVuY2UgdW50aWwgdGhlcmUKKyAgICBhcmUgbm8gbW9yZSBrZXlzIG9yIGEgZGlmZmVyZW5jZSBpcyBmb3VuZC4gKi8KKyAKKyBzdGF0aWMgaW50Cista2V5Y29tcGFyZSAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK2tleWNvbXBhcmVfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqYSwgY29uc3Qgc3RydWN0IGxpbmUgKmIpCisgeworICAgc3RydWN0IGtleWZpZWxkIGNvbnN0ICprZXkgPSBrZXlsaXN0OworIAorQEAgLTE4NzUsNiArMjI2NSwxNzkgQEAKKyAgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50Cisra2V5Y29tcGFyZV9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK3sKKysgIHN0cnVjdCBrZXlmaWVsZCAqa2V5ID0ga2V5bGlzdDsKKysKKysgIC8qIEZvciB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIHRoZSBrZXkgcG9zaXRpb25zIGhhdmUgYmVlbgorKyAgICAgcHJlY29tcHV0ZWQgZm9yIHVzLiAqLworKyAgY2hhciAqdGV4dGEgPSBhLT5rZXliZWc7CisrICBjaGFyICp0ZXh0YiA9IGItPmtleWJlZzsKKysgIGNoYXIgKmxpbWEgPSBhLT5rZXlsaW07CisrICBjaGFyICpsaW1iID0gYi0+a2V5bGltOworKworKyAgc2l6ZV90IG1ibGVuZ3RoX2EsIG1ibGVuZ3RoX2I7CisrICB3Y2hhcl90IHdjX2EsIHdjX2I7CisrICBtYnN0YXRlX3Qgc3RhdGVfYSwgc3RhdGVfYjsKKysKKysgIGludCBkaWZmOworKworKyAgbWVtc2V0ICgmc3RhdGVfYSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmc3RhdGVfYiwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgKnRyYW5zbGF0ZSA9ICh1bnNpZ25lZCBjaGFyICopIGtleS0+dHJhbnNsYXRlOworKyAgICAgIGJvb2wgY29uc3QgKmlnbm9yZSA9IGtleS0+aWdub3JlOworKworKyAgICAgIC8qIEZpbmQgdGhlIGxlbmd0aHMuICovCisrICAgICAgc2l6ZV90IGxlbmEgPSBsaW1hIDw9IHRleHRhID8gMCA6IGxpbWEgLSB0ZXh0YTsKKysgICAgICBzaXplX3QgbGVuYiA9IGxpbWIgPD0gdGV4dGIgPyAwIDogbGltYiAtIHRleHRiOworKworKyAgICAgIC8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGZpZWxkcy4gKi8KKysgICAgICBpZiAoa2V5LT5yYW5kb20pCisrICAgICAgICBkaWZmID0gY29tcGFyZV9yYW5kb20gKHRleHRhLCBsZW5hLCB0ZXh0YiwgbGVuYik7CisrICAgICAgZWxzZSBpZiAoa2V5LT5udW1lcmljIHwga2V5LT5nZW5lcmFsX251bWVyaWMpCisrCXsKKysJICBjaGFyIHNhdmVhID0gKmxpbWEsIHNhdmViID0gKmxpbWI7CisrCisrCSAgKmxpbWEgPSAqbGltYiA9ICdcMCc7CisrCSAgaWYgKGZvcmNlX2dlbmVyYWxfbnVtY29tcGFyZSkKKysJICAgIGRpZmYgPSBnZW5lcmFsX251bWNvbXBhcmUgKHRleHRhLCB0ZXh0Yik7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9ICgoa2V5LT5udW1lcmljID8gbnVtY29tcGFyZSA6IGdlbmVyYWxfbnVtY29tcGFyZSkKKysJCSh0ZXh0YSwgdGV4dGIpKTsKKysJICAqbGltYSA9IHNhdmVhLCAqbGltYiA9IHNhdmViOworKwl9CisrICAgICAgZWxzZSBpZiAoa2V5LT5tb250aCkKKysJZGlmZiA9IGdldG1vbnRoICh0ZXh0YSwgbGVuYSkgLSBnZXRtb250aCAodGV4dGIsIGxlbmIpOworKyAgICAgIGVsc2UKKysJeworKwkgIGlmIChpZ25vcmUgfHwgdHJhbnNsYXRlKQorKwkgICAgeworKwkgICAgICBjaGFyICpjb3B5X2EgPSAoY2hhciAqKSBhbGxvY2EgKGxlbmEgKyAxICsgbGVuYiArIDEpOworKwkgICAgICBjaGFyICpjb3B5X2IgPSBjb3B5X2EgKyBsZW5hICsgMTsKKysJICAgICAgc2l6ZV90IG5ld19sZW5fYSwgbmV3X2xlbl9iOworKwkgICAgICBzaXplX3QgaSwgajsKKysKKysJICAgICAgLyogSWdub3JlIGFuZC9vciB0cmFuc2xhdGUgY2hhcnMgYmVmb3JlIGNvbXBhcmluZy4gICovCisrIyBkZWZpbmUgSUdOT1JFX0NIQVJTKE5FV19MRU4sIExFTiwgVEVYVCwgQ09QWSwgV0MsIE1CTEVOR1RILCBTVEFURSkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB1d2M7CQkJCQkJCVwKKysgICAgICBjaGFyIG1iY1tNQl9MRU5fTUFYXTsJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgZm9yIChORVdfTEVOID0gaSA9IDA7IGkgPCBMRU47KQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgIHN0YXRlX2JhayA9IFNUQVRFOwkJCQkJCVwKKysJICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgVEVYVCArIGksIExFTiAtIGksICZTVEFURSk7CQlcCisrCQkJCQkJCQkJXAorKwkgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEJCVwKKysJICAgICAgfHwgTUJMRU5HVEggPT0gMCkJCQkJCQlcCisrCSAgICB7CQkJCQkJCQlcCisrCSAgICAgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEpCVwKKysJCVNUQVRFID0gc3RhdGVfYmFrOwkJCQkJXAorKwkgICAgICBpZiAoIWlnbm9yZSkJCQkJCQlcCisrCQlDT1BZW05FV19MRU4rK10gPSBURVhUW2krK107CQkJCVwKKysJICAgICAgY29udGludWU7CQkJCQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgaWYgKGlnbm9yZSkJCQkJCQkJXAorKwkgICAgewkJCQkJCQkJXAorKwkgICAgICBpZiAoKGlnbm9yZSA9PSBub25wcmludGluZyAmJiAhaXN3cHJpbnQgKFdDKSkJCVwKKysJCSAgIHx8IChpZ25vcmUgPT0gbm9uZGljdGlvbmFyeQkJCQlcCisrCQkgICAgICAgJiYgIWlzd2FsbnVtIChXQykgJiYgIWlzd2JsYW5rIChXQykpKQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIGNvbnRpbnVlOwkJCQkJCVwKKysJCX0JCQkJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICBpZiAodHJhbnNsYXRlKQkJCQkJCVwKKysJICAgIHsJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgICAgIHV3YyA9IHRvd3VwcGVyKFdDKTsJCQkJCVwKKysJICAgICAgaWYgKFdDID09IHV3YykJCQkJCQlcCisrCQl7CQkJCQkJCVwKKysJCSAgbWVtY3B5IChtYmMsIFRFWFQgKyBpLCBNQkxFTkdUSCk7CQkJXAorKwkJICBpICs9IE1CTEVOR1RIOwkJCQkJXAorKwkJfQkJCQkJCQlcCisrCSAgICAgIGVsc2UJCQkJCQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIFdDID0gdXdjOwkJCQkJCVwKKysJCSAgbWVtc2V0ICgmc3RhdGVfd2MsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CQlcCisrCQkJCQkJCQkJXAorKwkJICBNQkxFTkdUSCA9IHdjcnRvbWIgKG1iYywgV0MsICZzdGF0ZV93Yyk7CQlcCisrCQkgIGFzc2VydCAoTUJMRU5HVEggIT0gKHNpemVfdCktMSAmJiBNQkxFTkdUSCAhPSAwKTsJXAorKwkJfQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgICAgICBmb3IgKGogPSAwOyBqIDwgTUJMRU5HVEg7IGorKykJCQkJXAorKwkJQ09QWVtORVdfTEVOKytdID0gbWJjW2pdOwkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCSAgZWxzZQkJCQkJCQkJXAorKwkgICAgZm9yIChqID0gMDsgaiA8IE1CTEVOR1RIOyBqKyspCQkJCVwKKysJICAgICAgQ09QWVtORVdfTEVOKytdID0gVEVYVFtpKytdOwkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgICBDT1BZW05FV19MRU5dID0gJ1wwJzsJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysJICAgICAgSUdOT1JFX0NIQVJTIChuZXdfbGVuX2EsIGxlbmEsIHRleHRhLCBjb3B5X2EsCisrCQkJICAgIHdjX2EsIG1ibGVuZ3RoX2EsIHN0YXRlX2EpOworKwkgICAgICBJR05PUkVfQ0hBUlMgKG5ld19sZW5fYiwgbGVuYiwgdGV4dGIsIGNvcHlfYiwKKysJCQkgICAgd2NfYiwgbWJsZW5ndGhfYiwgc3RhdGVfYik7CisrCSAgICAgIGRpZmYgPSB4bWVtY29sbCAoY29weV9hLCBuZXdfbGVuX2EsIGNvcHlfYiwgbmV3X2xlbl9iKTsKKysJICAgIH0KKysJICBlbHNlIGlmIChsZW5hID09IDApCisrCSAgICBkaWZmID0gLSBOT05aRVJPIChsZW5iKTsKKysJICBlbHNlIGlmIChsZW5iID09IDApCisrCSAgICBnb3RvIGdyZWF0ZXI7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9IHhtZW1jb2xsICh0ZXh0YSwgbGVuYSwgdGV4dGIsIGxlbmIpOworKwl9CisrCisrICAgICAgaWYgKGRpZmYpCisrCWdvdG8gbm90X2VxdWFsOworKworKyAgICAgIGtleSA9IGtleS0+bmV4dDsKKysgICAgICBpZiAoISBrZXkpCisrCWJyZWFrOworKworKyAgICAgIC8qIEZpbmQgdGhlIGJlZ2lubmluZyBhbmQgbGltaXQgb2YgdGhlIG5leHQgZmllbGQuICAqLworKyAgICAgIGlmIChrZXktPmV3b3JkICE9IC0xKQorKwlsaW1hID0gbGltZmllbGQgKGEsIGtleSksIGxpbWIgPSBsaW1maWVsZCAoYiwga2V5KTsKKysgICAgICBlbHNlCisrCWxpbWEgPSBhLT50ZXh0ICsgYS0+bGVuZ3RoIC0gMSwgbGltYiA9IGItPnRleHQgKyBiLT5sZW5ndGggLSAxOworKworKyAgICAgIGlmIChrZXktPnN3b3JkICE9IC0xKQorKwl0ZXh0YSA9IGJlZ2ZpZWxkIChhLCBrZXkpLCB0ZXh0YiA9IGJlZ2ZpZWxkIChiLCBrZXkpOworKyAgICAgIGVsc2UKKysJeworKwkgIHRleHRhID0gYS0+dGV4dCwgdGV4dGIgPSBiLT50ZXh0OworKwkgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKwkgICAgeworKwkgICAgICB3aGlsZSAodGV4dGEgPCBsaW1hICYmIGlzbWJibGFuayAodGV4dGEsIGxpbWEgLSB0ZXh0YSwgJm1ibGVuZ3RoX2EpKQorKwkJdGV4dGEgKz0gbWJsZW5ndGhfYTsKKysJICAgICAgd2hpbGUgKHRleHRiIDwgbGltYiAmJiBpc21iYmxhbmsgKHRleHRiLCBsaW1iIC0gdGV4dGIsICZtYmxlbmd0aF9iKSkKKysJCXRleHRiICs9IG1ibGVuZ3RoX2I7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrCisrZ3JlYXRlcjoKKysgIGRpZmYgPSAxOworK25vdF9lcXVhbDoKKysgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisrfQorKyNlbmRpZgorKworIC8qIENvbXBhcmUgdHdvIGxpbmVzIEEgYW5kIEIsIHJldHVybmluZyBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUKKyAgICBkZXBlbmRpbmcgb24gd2hldGhlciBBIGNvbXBhcmVzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiBCLiAqLworCitAQCAtMjc0NCw3ICszMzA1LDcgQEAKKyAgIGluaXRpYWxpemVfZXhpdF9mYWlsdXJlIChTT1JUX0ZBSUxVUkUpOworIAorICAgaGFyZF9MQ19DT0xMQVRFID0gaGFyZF9sb2NhbGUgKExDX0NPTExBVEUpOworLSNpZiBIQVZFX05MX0xBTkdJTkZPCisrI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgaGFyZF9MQ19USU1FID0gaGFyZF9sb2NhbGUgKExDX1RJTUUpOworICNlbmRpZgorIAorQEAgLTI3NjUsNiArMzMyNiwyNyBAQAorICAgICAgIHRob3VzYW5kc19zZXAgPSAtMTsKKyAgIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBpbml0dGFibGVzID0gaW5pdHRhYmxlc19tYjsKKysgICAgICBiZWdmaWVsZCA9IGJlZ2ZpZWxkX21iOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfbWI7CisrICAgICAgZ2V0bW9udGggPSBnZXRtb250aF9tYjsKKysgICAgICBrZXljb21wYXJlID0ga2V5Y29tcGFyZV9tYjsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV9tYjsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaW5pdHRhYmxlcyA9IGluaXR0YWJsZXNfdW5pOworKyAgICAgIGJlZ2ZpZWxkID0gYmVnZmllbGRfdW5pOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfdW5pOworKyAgICAgIGdldG1vbnRoID0gZ2V0bW9udGhfdW5pOworKyAgICAgIGtleWNvbXBhcmUgPSBrZXljb21wYXJlX3VuaTsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV91bmk7CisrICAgIH0KKysKKyAgIGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworICAgaW5pdHRhYmxlcyAoKTsKKyAKK0BAIC0zMDE1LDEzICszNTk3LDM1IEBACisgCisgCWNhc2UgJ3QnOgorIAkgIHsKKy0JICAgIGNoYXIgbmV3dGFiID0gb3B0YXJnWzBdOworLQkgICAgaWYgKCEgbmV3dGFiKQorKwkgICAgY2hhciBuZXd0YWJbTUJfTEVOX01BWCArIDFdOworKwkgICAgc2l6ZV90IG5ld3RhYl9sZW5ndGggPSAxOworKwkgICAgc3RybmNweSAobmV3dGFiLCBvcHRhcmcsIE1CX0xFTl9NQVgpOworKwkgICAgaWYgKCEgbmV3dGFiWzBdKQorIAkgICAgICBlcnJvciAoU09SVF9GQUlMVVJFLCAwLCBfKCJlbXB0eSB0YWIiKSk7CistCSAgICBpZiAob3B0YXJnWzFdKQorKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJd2NoYXJfdCB3YzsKKysJCW1ic3RhdGVfdCBzdGF0ZTsKKysJCXNpemVfdCBpOworKworKwkJbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJfbGVuZ3RoID0gbWJydG93YyAoJndjLCBuZXd0YWIsIHN0cm5sZW4gKG5ld3RhYiwKKysJCQkJCQkJICAgICAgIE1CX0xFTl9NQVgpLAorKwkJCQkJICZzdGF0ZSk7CisrCQlzd2l0Y2ggKG5ld3RhYl9sZW5ndGgpCisrCQkgIHsKKysJCSAgY2FzZSAoc2l6ZV90KSAtMToKKysJCSAgY2FzZSAoc2l6ZV90KSAtMjoKKysJCSAgY2FzZSAwOgorKwkJICAgIG5ld3RhYl9sZW5ndGggPSAxOworKwkJICB9CisrCSAgICAgIH0KKysjZW5kaWYKKysJICAgIGlmIChuZXd0YWJfbGVuZ3RoID09IDEgJiYgb3B0YXJnWzFdKQorIAkgICAgICB7CisgCQlpZiAoU1RSRVEgKG9wdGFyZywgIlxcMCIpKQorLQkJICBuZXd0YWIgPSAnXDAnOworKwkJICBuZXd0YWJbMF0gPSAnXDAnOworIAkJZWxzZQorIAkJICB7CisgCQkgICAgLyogUHJvdm9rZSB3aXRoIGBzb3J0IC10eHgnLiAgQ29tcGxhaW4gYWJvdXQKK0BAIC0zMDMyLDkgKzM2MzYsMTIgQEAKKyAJCQkgICBxdW90ZSAob3B0YXJnKSk7CisgCQkgIH0KKyAJICAgICAgfQorLQkgICAgaWYgKHRhYiAhPSBUQUJfREVGQVVMVCAmJiB0YWIgIT0gbmV3dGFiKQorKwkgICAgaWYgKHRhYl9sZW5ndGgKKysJCSYmICh0YWJfbGVuZ3RoICE9IG5ld3RhYl9sZW5ndGgKKysJCSAgICB8fCBtZW1jbXAgKHRhYiwgbmV3dGFiLCB0YWJfbGVuZ3RoKSAhPSAwKSkKKyAJICAgICAgZXJyb3IgKFNPUlRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CistCSAgICB0YWIgPSBuZXd0YWI7CisrCSAgICBtZW1jcHkgKHRhYiwgbmV3dGFiLCBuZXd0YWJfbGVuZ3RoKTsKKysJICAgIHRhYl9sZW5ndGggPSBuZXd0YWJfbGVuZ3RoOworIAkgIH0KKyAJICBicmVhazsKKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvdW5leHBhbmQuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuZXhwYW5kLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zOSwxMSArMzksMjggQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICAgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmV4cGFuZCIKKyAKK0BAIC0xMTAsNiArMTI3LDIwOCBAQAorICAge05VTEwsIDAsIE5VTEwsIDB9CisgfTsKKyAKKytzdGF0aWMgRklMRSAqbmV4dF9maWxlIChGSUxFICpmcCk7CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrdW5leHBhbmRfbXVsdGlieXRlICh2b2lkKQorK3sKKysgIEZJTEUgKmZwOwkJCS8qIElucHV0IHN0cmVhbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2M7CQkJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CQkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCQkgICB3aGljaCBzaG93cyBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysKKysgIC8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wOiAqLworKyAgaW50IHRhYl9pbmRleCA9IDA7CQkvKiBGb3IgY2FsY3VsYXRpbmcgd2lkdGggb2YgcGVuZGluZyB0YWJzLiAqLworKyAgaW50IHByaW50X3RhYl9pbmRleCA9IDA7CS8qIEZvciBwcmludGluZyBhcyBtYW55IHRhYnMgYXMgcG9zc2libGUuICovCisrICB1bnNpZ25lZCBpbnQgY29sdW1uID0gMDsJLyogQ29sdW1uIG9uIHNjcmVlbiBvZiBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrICB1bnNpZ25lZCBpbnQgcGVuZGluZyA9IDA7CS8qIFBlbmRpbmcgY29sdW1ucyBvZiBibGFua3MuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mKGZwKSAmJiAhZmVycm9yKGZwKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgZnApOworKwkgIGJ1ZnBvcyA9IGJ1ZjsKKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlmIChidWZsZW4gPCAxKQorKwl7CisrCSAgbWJsZW5ndGggPSAxOworKwkgIHdjID0gV0VPRjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJmlfc3RhdGUpOworKwl9CisrCisrICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJeworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICB3YyA9IEwnXDAnOworKwl9CisrCisrICAgICAgaWYgKHdjID09IEwnICcgJiYgY29udmVydCAmJiBjb2x1bW4gPCBJTlRfTUFYKQorKwl7CisrCSAgKytwZW5kaW5nOworKwkgICsrY29sdW1uOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkKKysJeworKwkgIGlmICh0YWJfc2l6ZSA9PSAwKQorKwkgICAgeworKwkgICAgICAvKiBEbyBub3QgbGV0IHRhYl9pbmRleCA9PSBmaXJzdF9mcmVlX3RhYjsKKysJCSBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkgICAgICB3aGlsZSAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJdGFiX2luZGV4Kys7CisrCSAgICAgIG5leHRfdGFiX2NvbHVtbiA9IHRhYl9saXN0W3RhYl9pbmRleF07CisrCSAgICAgIGlmICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEpCisrCQl0YWJfaW5kZXgrKzsKKysJICAgICAgaWYgKGNvbHVtbiA+PSBuZXh0X3RhYl9jb2x1bW4pCisrCQl7CisrCQkgIGNvbnZlcnQgPSAwOwkvKiBSYW4gb3V0IG9mIHRhYiBzdG9wcy4gKi8KKysJCSAgZ290byBmbHVzaF9wZW5kX21iOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbmV4dF90YWJfY29sdW1uID0gY29sdW1uICsgdGFiX3NpemUgLSBjb2x1bW4gJSB0YWJfc2l6ZTsKKysJICAgIH0KKysJICBwZW5kaW5nICs9IG5leHRfdGFiX2NvbHVtbiAtIGNvbHVtbjsKKysJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCX0KKysgICAgICBlbHNlCisrCXsKKytmbHVzaF9wZW5kX21iOgorKwkgIC8qIEZsdXNoIHBlbmRpbmcgc3BhY2VzLiAgUHJpbnQgYXMgbWFueSB0YWJzIGFzIHBvc3NpYmxlLAorKwkgICAgIHRoZW4gcHJpbnQgdGhlIHJlc3QgYXMgc3BhY2VzLiAqLworKwkgIGlmIChwZW5kaW5nID09IDEpCisrCSAgICB7CisrCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCSAgICAgIHBlbmRpbmcgPSAwOworKwkgICAgfQorKwkgIGNvbHVtbiAtPSBwZW5kaW5nOworKwkgIHdoaWxlIChwZW5kaW5nID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKHRhYl9zaXplID09IDApCisrCQl7CisrCQkgIC8qIERvIG5vdCBsZXQgcHJpbnRfdGFiX2luZGV4ID09IGZpcnN0X2ZyZWVfdGFiOworKwkJICAgICBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkJICB3aGlsZSAocHJpbnRfdGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICAgICAmJiBjb2x1bW4gPj0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCSAgbmV4dF90YWJfY29sdW1uID0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XTsKKysJCSAgaWYgKHByaW50X3RhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBuZXh0X3RhYl9jb2x1bW4gPQorKwkJICAgIGNvbHVtbiArIHRhYl9zaXplIC0gY29sdW1uICUgdGFiX3NpemU7CisrCQl9CisrCSAgICAgIGlmIChuZXh0X3RhYl9jb2x1bW4gLSBjb2x1bW4gPD0gcGVuZGluZykKKysJCXsKKysJCSAgcHV0Y2hhciAoJ1x0Jyk7CisrCQkgIHBlbmRpbmcgLT0gbmV4dF90YWJfY29sdW1uIC0gY29sdW1uOworKwkJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLS1wcmludF90YWJfaW5kZXg7CisrCQkgIGNvbHVtbiArPSBwZW5kaW5nOworKwkJICB3aGlsZSAocGVuZGluZyAhPSAwKQorKwkJICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCQkgICAgICBwZW5kaW5nLS07CisrCQkgICAgfQorKwkJfQorKwkgICAgfQorKworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgeworKwkgICAgICBmcCA9IG5leHRfZmlsZSAoZnApOworKwkgICAgICBpZiAoZnAgPT0gTlVMTCkKKysJCWJyZWFrOyAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG1lbXNldCAoJmlfc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQpCisrCQl7CisrCQkgICsrY29sdW1uOworKwkJICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJICAgIGNvbnZlcnQgPSAwOworKwkJfQorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIHB1dGNoYXIgKGJ1ZlswXSk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAobWJsZW5ndGggPT0gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJY29udmVydCA9IDA7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoY29udmVydCkKKysJCXsKKysJCSAgaWYgKHdjID09IEwnXGInKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChjb2x1bW4gPiAwKQorKwkJCS0tY29sdW1uOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGludCB3aWR0aDsgICAgICAgICAgICAvKiBUaGUgd2lkdGggb2YgV0MuICovCisrCisrCQkgICAgICB3aWR0aCA9IHdjd2lkdGggKHdjKTsKKysJCSAgICAgIGNvbHVtbiArPSAod2lkdGggPiAwKSA/IHdpZHRoIDogMDsKKysJCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQkJY29udmVydCA9IDA7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAod2MgPT0gTCdcbicpCisrCQl7CisrCQkgIHRhYl9pbmRleCA9IHByaW50X3RhYl9pbmRleCA9IDA7CisrCQkgIGNvbHVtbiA9IHBlbmRpbmcgPSAwOworKwkJICBjb252ZXJ0ID0gMTsKKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworKworIHZvaWQKKyB1c2FnZSAoaW50IHN0YXR1cykKKyB7CitAQCAtNTMxLDcgKzc1MCwxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICB1bmV4cGFuZCAoKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHVuZXhwYW5kX211bHRpYnl0ZSAoKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgdW5leHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9wci5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvcHIuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTMxMyw2ICszMTMsMzIgQEAKKyAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBNQl9MRU5fTUFYLiAgKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYID09IDEKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogR2V0IE1CX0NVUl9NQVguICAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LiAgKi8KKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3cHJpbnQoKS4gLS0gZm9yIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBpc3dwcmludCAmJiAhSEFWRV9JU1dQUklOVAorKyMgZGVmaW5lIGlzd3ByaW50KHdjKSAxCisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorQEAgLTMyNCw2ICszNTAsMTggQEAKKyAjaW5jbHVkZSAic3RyZnRpbWUuaCIKKyAjaW5jbHVkZSAieHN0cnRvbC5oIgorIAorKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBVkVfREVDTF9XQ1dJRFRICisrInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKysjZW5kaWYKKysjaWYgIUhBVkVfREVDTF9XQ1dJRFRICisrZXh0ZXJuIGludCB3Y3dpZHRoICgpOworKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJwciIKKyAKK0BAIC00MTYsNyArNDU0LDIwIEBACisgCisgI2RlZmluZSBOVUxMQ09MIChDT0xVTU4gKikwCisgCistc3RhdGljIGludCBjaGFyX3RvX2NsdW1wIChjaGFyIGMpOworKy8qIEZ1bnRpb24gcG9pbnRlcnMgdG8gc3dpdGNoIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlIG9yIGZvcgorKyAgIG11bHRpYnl0ZSBsb2NhbGUuIElmIG11bHRpYnl0ZSBmdW5jdGlvbnMgZG8gbm90IGV4aXN0IGluIHlvdXIgc3lzeXRlbSwKKysgICB0aGVzZSBwb2ludGVycyBhbHdheXMgcG9pbnQgdGhlIGZ1bmN0aW9uIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgKCpwcmludF9jaGFyKSAoY2hhciBjKTsKKytzdGF0aWMgaW50ICgqY2hhcl90b19jbHVtcCkgKGNoYXIgYyk7CisrCisrLyogRnVuY3Rpb25zIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9zaW5nbGUgKGNoYXIgYyk7Cisrc3RhdGljIGludCBjaGFyX3RvX2NsdW1wX3NpbmdsZSAoY2hhciBjKTsKKysKKysvKiBGdW5jdGlvbnMgZm9yIG11bHRpYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKTsKKytzdGF0aWMgaW50IGNoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYyk7CisrCisgc3RhdGljIGJvb2wgcmVhZF9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyBib29sIHByaW50X3BhZ2UgKHZvaWQpOworIHN0YXRpYyBib29sIHByaW50X3N0b3JlZCAoQ09MVU1OICpwKTsKK0BAIC00MjYsNiArNDc3LDcgQEAKKyBzdGF0aWMgdm9pZCBwYWRfYWNyb3NzX3RvIChpbnQgcG9zaXRpb24pOworIHN0YXRpYyB2b2lkIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKTsKKyBzdGF0aWMgdm9pZCBnZXRvcHRhcmcgKGNoYXIgKmFyZywgY2hhciBzd2l0Y2hfY2hhciwgY2hhciAqY2hhcmFjdGVyLAorKwkJICAgICAgIGludCAqY2hhcmFjdGVyX2xlbmd0aCwgaW50ICpjaGFyYWN0ZXJfd2lkdGgsCisgCQkgICAgICAgaW50ICpudW1iZXIpOworIHZvaWQgdXNhZ2UgKGludCBzdGF0dXMpOworIHN0YXRpYyB2b2lkIHByaW50X2ZpbGVzIChpbnQgbnVtYmVyX29mX2ZpbGVzLCBjaGFyICoqYXYpOworQEAgLTQ0MCw3ICs0OTIsNiBAQAorIHN0YXRpYyB2b2lkIHBhZF9kb3duIChpbnQgbGluZXMpOworIHN0YXRpYyB2b2lkIHJlYWRfcmVzdF9vZl9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyB2b2lkIHNraXBfcmVhZCAoQ09MVU1OICpwLCBpbnQgY29sdW1uX251bWJlcik7Cistc3RhdGljIHZvaWQgcHJpbnRfY2hhciAoY2hhciBjKTsKKyBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBwcmludF9zZXBfc3RyaW5nICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBzZXBhcmF0b3Jfc3RyaW5nIChjb25zdCBjaGFyICpvcHRhcmdfUyk7CitAQCAtNDU1LDcgKzUwNiw3IEBACisgICAgd2Ugc3RvcmUgdGhlIGxlZnRtb3N0IGNvbHVtbnMgY29udGlndW91c2x5IGluIGJ1ZmYuCisgICAgVG8gcHJpbnQgYSBsaW5lIGZyb20gYnVmZiwgZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgZnJvbSBsaW5lX3ZlY3RvcltpXSwgYW5kIHByaW50IHVwIHRvIGxpbmVfdmVjdG9yW2kgKyAxXS4gKi8KKy1zdGF0aWMgY2hhciAqYnVmZjsKKytzdGF0aWMgdW5zaWduZWQgY2hhciAqYnVmZjsKKyAKKyAvKiBJbmRleCBvZiB0aGUgcG9zaXRpb24gaW4gYnVmZiB3aGVyZSB0aGUgbmV4dCBjaGFyYWN0ZXIKKyAgICB3aWxsIGJlIHN0b3JlZC4gKi8KK0BAIC01NTksNyArNjEwLDcgQEAKKyBzdGF0aWMgYm9vbCB1bnRhYmlmeV9pbnB1dCA9IGZhbHNlOworIAorIC8qICgtZSkgVGhlIGlucHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgaW5wdXRfdGFiX2NoYXIgPSAnXHQnOworK3N0YXRpYyBjaGFyIGlucHV0X3RhYl9jaGFyW01CX0xFTl9NQVhdID0gIlx0IjsKKyAKKyAvKiAoLWUpIFRhYnN0b3BzIGFyZSBhdCBjaGFyc19wZXJfdGFiLCAyKmNoYXJzX3Blcl90YWIsIDMqY2hhcnNfcGVyX3RhYiwgLi4uCisgICAgd2hlcmUgdGhlIGxlZnRtb3N0IGNvbHVtbiBpcyAxLiAqLworQEAgLTU2OSw3ICs2MjAsMTAgQEAKKyBzdGF0aWMgYm9vbCB0YWJpZnlfb3V0cHV0ID0gZmFsc2U7CisgCisgLyogKC1pKSBUaGUgb3V0cHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgb3V0cHV0X3RhYl9jaGFyID0gJ1x0JzsKKytzdGF0aWMgY2hhciBvdXRwdXRfdGFiX2NoYXJbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtaSkgVGhlIGJ5dGUgbGVuZ3RoIG9mIG91dHB1dCB0YWIgY2hhcmFjdGVyLiAqLworK3N0YXRpYyBpbnQgb3V0cHV0X3RhYl9jaGFyX2xlbmd0aCA9IDE7CisgCisgLyogKC1pKSBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCB0YWIuICovCisgc3RhdGljIGludCBjaGFyc19wZXJfb3V0cHV0X3RhYiA9IDg7CitAQCAtNjQzLDcgKzY5NywxMyBAQAorIHN0YXRpYyBib29sIG51bWJlcmVkX2xpbmVzID0gZmFsc2U7CisgCisgLyogKC1uKSBDaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworLXN0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3IgPSAnXHQnOworK3N0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3JbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtbikgVGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworK3N0YXRpYyBpbnQgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGggPSAxOworKworKy8qICgtbikgVGhlIGNoYXJhY3RlciB3aWR0aCBvZiB0aGUgY2hhcmFjdGVyIHdoaWNoIGZvbGxvd3MgZWFjaCBsaW5lIG51bWJlci4gKi8KKytzdGF0aWMgaW50IG51bWJlcl9zZXBhcmF0b3Jfd2lkdGggPSAwOworIAorIC8qICgtbikgbGluZSBjb3VudGluZyBzdGFydHMgd2l0aCAxc3QgbGluZSBvZiBpbnB1dCBmaWxlIChub3Qgd2l0aCAxc3QKKyAgICBsaW5lIG9mIDFzdCBwYWdlIHByaW50ZWQpLiAqLworQEAgLTY5Niw2ICs3NTYsNyBAQAorICAgIC1hfENPTFVNTnwtbSBpcyBhIGBzcGFjZScgYW5kIHdpdGggdGhlIC1KIG9wdGlvbiBhIGB0YWInLiAqLworIHN0YXRpYyBjaGFyICpjb2xfc2VwX3N0cmluZyA9ICIiOworIHN0YXRpYyBpbnQgY29sX3NlcF9sZW5ndGggPSAwOworK3N0YXRpYyBpbnQgY29sX3NlcF93aWR0aCA9IDA7Cisgc3RhdGljIGNoYXIgKmNvbHVtbl9zZXBhcmF0b3IgPSAiICI7Cisgc3RhdGljIGNoYXIgKmxpbmVfc2VwYXJhdG9yID0gIlx0IjsKKyAKK0BAIC04NTIsNiArOTEzLDEzIEBACisgICBjb2xfc2VwX2xlbmd0aCA9IChpbnQpIHN0cmxlbiAob3B0YXJnX1MpOworICAgY29sX3NlcF9zdHJpbmcgPSB4bWFsbG9jIChjb2xfc2VwX2xlbmd0aCArIDEpOworICAgc3RyY3B5IChjb2xfc2VwX3N0cmluZywgb3B0YXJnX1MpOworKworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgY29sX3NlcF93aWR0aCA9IG1ic3dpZHRoIChjb2xfc2VwX3N0cmluZywgMCk7CisrICBlbHNlCisrI2VuZGlmCisrICAgIGNvbF9zZXBfd2lkdGggPSBjb2xfc2VwX2xlbmd0aDsKKyB9CisgCisgaW50CitAQCAtODc3LDYgKzk0NSwyMSBAQAorIAorICAgYXRleGl0IChjbG9zZV9zdGRvdXQpOworIAorKy8qIERlZmluZSB3aGljaCBmdW5jdGlvbnMgYXJlIHVzZWQsIHRoZSBvbmVzIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUgb3IgdGhlIG9uZXMKKysgICBmb3IgbXVsdGlieXRlIGxvY2FsZS4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBwcmludF9jaGFyID0gcHJpbnRfY2hhcl9tdWx0aTsKKysgICAgICBjaGFyX3RvX2NsdW1wID0gY2hhcl90b19jbHVtcF9tdWx0aTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgcHJpbnRfY2hhciA9IHByaW50X2NoYXJfc2luZ2xlOworKyAgICAgIGNoYXJfdG9fY2x1bXAgPSBjaGFyX3RvX2NsdW1wX3NpbmdsZTsKKysgICAgfQorKworICAgbl9maWxlcyA9IDA7CisgICBmaWxlX25hbWVzID0gKGFyZ2MgPiAxCisgCQk/IHhtYWxsb2MgKChhcmdjIC0gMSkgKiBzaXplb2YgKGNoYXIgKikpCitAQCAtOTQ5LDggKzEwMzIsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnZSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnZScsICZpbnB1dF90YWJfY2hhciwKKy0JCSAgICAgICAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB7CisrCSAgICAgIGludCBkdW1teV9sZW5ndGgsIGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2UnLCBpbnB1dF90YWJfY2hhciwgJmR1bW15X2xlbmd0aCwKKysJCQkgJmR1bW15X3dpZHRoLCAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB1bnRhYmlmeV9pbnB1dCA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtOTYzLDggKzEwNTAsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnaSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnaScsICZvdXRwdXRfdGFiX2NoYXIsCistCQkgICAgICAgJmNoYXJzX3Blcl9vdXRwdXRfdGFiKTsKKysJICAgIHsKKysJICAgICAgaW50IGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2knLCBvdXRwdXRfdGFiX2NoYXIsICZvdXRwdXRfdGFiX2NoYXJfbGVuZ3RoLAorKwkJCSAmZHVtbXlfd2lkdGgsICZjaGFyc19wZXJfb3V0cHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB0YWJpZnlfb3V0cHV0ID0gdHJ1ZTsKKyAJICBicmVhazsKK0BAIC05OTEsOCArMTA4Miw4IEBACisgCWNhc2UgJ24nOgorIAkgIG51bWJlcmVkX2xpbmVzID0gdHJ1ZTsKKyAJICBpZiAob3B0YXJnKQorLQkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgJm51bWJlcl9zZXBhcmF0b3IsCistCQkgICAgICAgJmNoYXJzX3Blcl9udW1iZXIpOworKwkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgbnVtYmVyX3NlcGFyYXRvciwgJm51bWJlcl9zZXBhcmF0b3JfbGVuZ3RoLAorKwkJICAgICAgICZudW1iZXJfc2VwYXJhdG9yX3dpZHRoLCAmY2hhcnNfcGVyX251bWJlcik7CisgCSAgYnJlYWs7CisgCWNhc2UgJ04nOgorIAkgIHNraXBfY291bnQgPSBmYWxzZTsKK0BAIC0xMDMxLDcgKzExMjIsNyBAQAorIAkgIG9sZF9zID0gZmFsc2U7CisgCSAgLyogUmVzZXQgYW4gYWRkaXRpb25hbCBpbnB1dCBvZiAtcywgLVMgZG9taW5hdGVzIC1zICovCisgCSAgY29sX3NlcF9zdHJpbmcgPSAiIjsKKy0JICBjb2xfc2VwX2xlbmd0aCA9IDA7CisrCSAgY29sX3NlcF9sZW5ndGggPSBjb2xfc2VwX3dpZHRoID0gMDsKKyAJICB1c2VfY29sX3NlcGFyYXRvciA9IHRydWU7CisgCSAgaWYgKG9wdGFyZykKKyAJICAgIHNlcGFyYXRvcl9zdHJpbmcgKG9wdGFyZyk7CitAQCAtMTE4OCwxMCArMTI3OSw0NSBAQAorICAgIGEgbnVtYmVyLiAqLworIAorIHN0YXRpYyB2b2lkCistZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpudW1iZXIpCisrZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpjaGFyYWN0ZXJfbGVuZ3RoLAorKwkgICBpbnQgKmNoYXJhY3Rlcl93aWR0aCwgaW50ICpudW1iZXIpCisgeworICAgaWYgKCFJU0RJR0lUICgqYXJnKSkKKy0gICAgKmNoYXJhY3RlciA9ICphcmcrKzsKKysgICAgeworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCS8qIGZvciBtdWx0aWJ5dGUgbG9jYWxlLiAqLworKwl7CisrCSAgd2NoYXJfdCB3YzsKKysJICBzaXplX3QgbWJsZW5ndGg7CisrCSAgaW50IHdpZHRoOworKwkgIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYXJnLCBzdHJubGVuKGFyZywgTUJfTEVOX01BWCksICZzdGF0ZSk7CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gMTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICpjaGFyYWN0ZXJfbGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCSAgICAgIHdpZHRoID0gd2N3aWR0aCAod2MpOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gKHdpZHRoIDwgMCkgPyAwIDogd2lkdGg7CisrCSAgICB9CisrCisrCSAgc3RybmNweSAoY2hhcmFjdGVyLCBhcmcsICpjaGFyYWN0ZXJfbGVuZ3RoKTsKKysJICBhcmcgKz0gKmNoYXJhY3Rlcl9sZW5ndGg7CisrCX0KKysgICAgICBlbHNlCQkJLyogZm9yIHNpbmdsZSBieXRlIGxvY2FsZS4gKi8KKysjZW5kaWYKKysJeworKwkgICpjaGFyYWN0ZXIgPSAqYXJnKys7CisrCSAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICpjaGFyYWN0ZXJfd2lkdGggPSAxOworKwl9CisrICAgIH0KKysKKyAgIGlmICgqYXJnKQorICAgICB7CisgICAgICAgbG9uZyBpbnQgdG1wX2xvbmc7CitAQCAtMTI1Niw3ICsxMzgyLDcgQEAKKyAJICBlbHNlCisgCSAgICBjb2xfc2VwX3N0cmluZyA9IGNvbHVtbl9zZXBhcmF0b3I7CisgCistCSAgY29sX3NlcF9sZW5ndGggPSAxOworKwkgIGNvbF9zZXBfbGVuZ3RoID0gY29sX3NlcF93aWR0aCA9IDE7CisgCSAgdXNlX2NvbF9zZXBhcmF0b3IgPSB0cnVlOworIAl9CisgICAgICAgLyogSXQncyByYXRoZXIgcG9pbnRsZXNzIHRvIGRlZmluZSBhIFRBQiBzZXBhcmF0b3Igd2l0aCBjb2x1bW4KK0BAIC0xMjg4LDExICsxNDE0LDExIEBACisgCSAgICAgVEFCX1dJRFRIIChjaGFyc19wZXJfaW5wdXRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsgICAqLworIAorICAgICAgIC8qIEVzdGltYXRlIGNoYXJzX3Blcl90ZXh0IHdpdGhvdXQgYW55IG1hcmdpbiBhbmQga2VlcCBpdCBjb25zdGFudC4gKi8KKy0gICAgICBpZiAobnVtYmVyX3NlcGFyYXRvciA9PSAnXHQnKQorKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKworIAkgIFRBQl9XSURUSCAoY2hhcnNfcGVyX2RlZmF1bHRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsKKyAgICAgICBlbHNlCistCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKyAxOworKwludW1iZXJfd2lkdGggPSBjaGFyc19wZXJfbnVtYmVyICsgbnVtYmVyX3NlcGFyYXRvcl93aWR0aDsKKyAKKyAgICAgICAvKiBUaGUgbnVtYmVyIGlzIHBhcnQgb2YgdGhlIGNvbHVtbiB3aWR0aCB1bmxlc3Mgd2UgYXJlCisgCSBwcmludGluZyBmaWxlcyBpbiBwYXJhbGxlbC4gKi8KK0BAIC0xMzA3LDcgKzE0MzMsNyBAQAorICAgICB9CisgCisgICBjaGFyc19wZXJfY29sdW1uID0gKGNoYXJzX3Blcl9saW5lIC0gY2hhcnNfdXNlZF9ieV9udW1iZXIgLQorLQkJICAgICAoY29sdW1ucyAtIDEpICogY29sX3NlcF9sZW5ndGgpIC8gY29sdW1uczsKKysJCSAgICAgKGNvbHVtbnMgLSAxKSAqIGNvbF9zZXBfd2lkdGgpIC8gY29sdW1uczsKKyAKKyAgIGlmIChjaGFyc19wZXJfY29sdW1uIDwgMSkKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygicGFnZSB3aWR0aCB0b28gbmFycm93IikpOworQEAgLTE0MzIsNyArMTU1OCw3IEBACisgCisgICAvKiBFbmxhcmdlIHAtPnN0YXJ0X3Bvc2l0aW9uIG9mIGZpcnN0IGNvbHVtbiB0byB1c2UgdGhlIHNhbWUgZm9ybSBvZgorICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCB3aXRoIGFsbCBjb2x1bW5zLiAqLworLSAgaCA9IGggKyBjb2xfc2VwX2xlbmd0aDsKKysgIGggPSBoICsgY29sX3NlcF93aWR0aDsKKyAKKyAgIC8qIFRoaXMgbG9vcCB0YWtlcyBjYXJlIG9mIGFsbCBidXQgdGhlIHJpZ2h0bW9zdCBjb2x1bW4uICovCisgCitAQCAtMTQ2Niw3ICsxNTkyLDcgQEAKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGggPSBoX25leHQgKyBjb2xfc2VwX2xlbmd0aDsKKysJICBoID0gaF9uZXh0ICsgY29sX3NlcF93aWR0aDsKKyAJICBoX25leHQgPSBoICsgY2hhcnNfcGVyX2NvbHVtbjsKKyAJfQorICAgICB9CitAQCAtMTc1Niw5ICsxODgyLDkgQEAKKyBhbGlnbl9jb2x1bW4gKENPTFVNTiAqcCkKKyB7CisgICBwYWRkaW5nX25vdF9wcmludGVkID0gcC0+c3RhcnRfcG9zaXRpb247CistICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoID4gMCkKKysgIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCA+IDApCisgICAgIHsKKy0gICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGgpOworKyAgICAgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoKTsKKyAgICAgICBwYWRkaW5nX25vdF9wcmludGVkID0gQU5ZV0hFUkU7CisgICAgIH0KKyAKK0BAIC0yMDI5LDEzICsyMTU1LDEzIEBACisgICAgICAgLyogTWF5IGJlIHRvbyBnZW5lcm91cy4gKi8KKyAgICAgICBidWZmID0gWDJSRUFMTE9DIChidWZmLCAmYnVmZl9hbGxvY2F0ZWQpOworICAgICB9CistICBidWZmW2J1ZmZfY3VycmVudCsrXSA9IGM7CisrICBidWZmW2J1ZmZfY3VycmVudCsrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworIH0KKyAKKyBzdGF0aWMgdm9pZAorIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKQorIHsKKy0gIGludCBpOworKyAgaW50IGksIGo7CisgICBjaGFyICpzOworICAgaW50IGxlZnRfY3V0OworIAorQEAgLTIwNTgsMjIgKzIxODQsMjQgQEAKKyAgICAgICAvKiBUYWJpZmljYXRpb24gaXMgYXNzdW1lZCBmb3IgbXVsdGlwbGUgY29sdW1ucywgYWxzbyBmb3Igbi1zZXBhcmF0b3JzLAorIAkgYnV0IGBkZWZhdWx0IG4tc2VwYXJhdG9yID0gVEFCJyBoYXNuJ3QgYmVlbiBnaXZlbiBwcmlvcml0eSBvdmVyCisgCSBlcXVhbCBjb2x1bW5fd2lkdGggYWxzbyBzcGVjaWZpZWQgYnkgUE9TSVguICovCistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBpZiAobnVtYmVyX3NlcGFyYXRvclswXSA9PSAnXHQnKQorICAgICAgICAgeworICAgICAgICAgICBpID0gbnVtYmVyX3dpZHRoIC0gY2hhcnNfcGVyX251bWJlcjsKKyAgICAgICAgICAgd2hpbGUgKGktLSA+IDApCisgCSAgICAocC0+Y2hhcl9mdW5jKSAoJyAnKTsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlCistICAgICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CisrCWZvciAoaiA9IDA7IGogPCBudW1iZXJfc2VwYXJhdG9yX2xlbmd0aDsgaisrKQorKwkgIChwLT5jaGFyX2Z1bmMpIChudW1iZXJfc2VwYXJhdG9yW2pdKTsKKyAgICAgfQorICAgZWxzZQorICAgICAvKiBUbyBjb21wbHkgd2l0aCBQT1NJWCwgd2UgYXZvaWQgYW55IGV4cGFuc2lvbiBvZiBkZWZhdWx0IFRBQgorICAgICAgICBzZXBhcmF0b3Igd2l0aCBhIHNpbmdsZSBjb2x1bW4gb3V0cHV0LiBObyBjb2x1bW5fd2lkdGggcmVxdWlyZW1lbnQKKyAgICAgICAgaGFzIHRvIGJlIGNvbnNpZGVyZWQuICovCisgICAgIHsKKy0gICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGg7IGorKykKKysJKHAtPmNoYXJfZnVuYykgKG51bWJlcl9zZXBhcmF0b3Jbal0pOworKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgICAgICAgICBvdXRwdXRfcG9zaXRpb24gPSBQT1NfQUZURVJfVEFCIChjaGFyc19wZXJfb3V0cHV0X3RhYiwKKyAJCQkgIG91dHB1dF9wb3NpdGlvbik7CisgICAgIH0KK0BAIC0yMjM0LDcgKzIzNjIsNyBAQAorICAgd2hpbGUgKGdvYWwgLSBoX29sZCA+IDEKKyAJICYmIChoX25ldyA9IFBPU19BRlRFUl9UQUIgKGNoYXJzX3Blcl9vdXRwdXRfdGFiLCBoX29sZCkpIDw9IGdvYWwpCisgICAgIHsKKy0gICAgICBwdXRjaGFyIChvdXRwdXRfdGFiX2NoYXIpOworKyAgICAgIGZ3cml0ZSAob3V0cHV0X3RhYl9jaGFyLCBzaXplb2YoY2hhciksIG91dHB1dF90YWJfY2hhcl9sZW5ndGgsIHN0ZG91dCk7CisgICAgICAgaF9vbGQgPSBoX25ldzsKKyAgICAgfQorICAgd2hpbGUgKCsraF9vbGQgPD0gZ29hbCkKK0BAIC0yMjU0LDYgKzIzODIsNyBAQAorIHsKKyAgIGNoYXIgKnM7CisgICBpbnQgbCA9IGNvbF9zZXBfbGVuZ3RoOworKyAgaW50IG5vdF9zcGFjZV9mbGFnOworIAorICAgcyA9IGNvbF9zZXBfc3RyaW5nOworIAorQEAgLTIyNjcsNiArMjM5Niw3IEBACisgICAgIHsKKyAgICAgICBmb3IgKDsgc2VwYXJhdG9yc19ub3RfcHJpbnRlZCA+IDA7IC0tc2VwYXJhdG9yc19ub3RfcHJpbnRlZCkKKyAJeworKwkgIG5vdF9zcGFjZV9mbGFnID0gMDsKKyAJICB3aGlsZSAobC0tID4gMCkKKyAJICAgIHsKKyAJICAgICAgLyogMyB0eXBlcyBvZiBzZXBfc3RyaW5nczogc3BhY2VzIG9ubHksIHNwYWNlcyBhbmQgY2hhcnMsCitAQCAtMjI4MCwxMiArMjQxMCwxNSBAQAorIAkJfQorIAkgICAgICBlbHNlCisgCQl7CisrCQkgIG5vdF9zcGFjZV9mbGFnID0gMTsKKyAJCSAgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisgCQkgICAgcHJpbnRfd2hpdGVfc3BhY2UgKCk7CisgCQkgIHB1dGNoYXIgKCpzKyspOworLQkJICArK291dHB1dF9wb3NpdGlvbjsKKyAJCX0KKyAJICAgIH0KKysJICBpZiAobm90X3NwYWNlX2ZsYWcpCisrCSAgICBvdXRwdXRfcG9zaXRpb24gKz0gY29sX3NlcF93aWR0aDsKKysKKyAgICAgICAgICAgLyogc2VwX3N0cmluZyBlbmRzIHdpdGggc29tZSBzcGFjZXMgKi8KKyAJICBpZiAoc3BhY2VzX25vdF9wcmludGVkID4gMCkKKyAJICAgIHByaW50X3doaXRlX3NwYWNlICgpOworQEAgLTIzMTMsNyArMjQ0Niw3IEBACisgICAgcmVxdWlyZWQgbnVtYmVyIG9mIHRhYnMgYW5kIHNwYWNlcy4gKi8KKyAKKyBzdGF0aWMgdm9pZAorLXByaW50X2NoYXIgKGNoYXIgYykKKytwcmludF9jaGFyX3NpbmdsZSAoY2hhciBjKQorIHsKKyAgIGlmICh0YWJpZnlfb3V0cHV0KQorICAgICB7CitAQCAtMjMzNyw2ICsyNDcwLDc0IEBACisgICBwdXRjaGFyIChjKTsKKyB9CisgCisrI2lmZGVmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKQorK3sKKysgIHN0YXRpYyBzaXplX3QgbWJjX3BvcyA9IDA7CisrICBzdGF0aWMgY2hhciBtYmNbTUJfTEVOX01BWF0gPSB7J1wwJ307CisrICBzdGF0aWMgbWJzdGF0ZV90IHN0YXRlID0geydcMCd9OworKyAgbWJzdGF0ZV90IHN0YXRlX2JhazsKKysgIHdjaGFyX3Qgd2M7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBpbnQgd2lkdGg7CisrCisrICBpZiAodGFiaWZ5X291dHB1dCkKKysgICAgeworKyAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgICAgIG1iY1ttYmNfcG9zKytdID0gYzsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgICAgIHdoaWxlIChtYmNfcG9zID4gMCkKKysJeworKwkgIHN3aXRjaCAobWJsZW5ndGgpCisrCSAgICB7CisrCSAgICBjYXNlIChzaXplX3QpLTI6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICByZXR1cm47CisrCisrCSAgICBjYXNlIChzaXplX3QpLTE6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICArK291dHB1dF9wb3NpdGlvbjsKKysJICAgICAgcHV0Y2hhciAobWJjWzBdKTsKKysJICAgICAgbWVtbW92ZSAobWJjLCBtYmMgKyAxLCBNQl9DVVJfTUFYIC0gMSk7CisrCSAgICAgIC0tbWJjX3BvczsKKysJICAgICAgYnJlYWs7CisrCisrCSAgICBjYXNlIDA6CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysKKysJICAgIGRlZmF1bHQ6CisrCSAgICAgIGlmICh3YyA9PSBMJyAnKQorKwkJeworKwkJICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKwkJICAtLW1iY19wb3M7CisrCQkgICsrc3BhY2VzX25vdF9wcmludGVkOworKwkJICByZXR1cm47CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisrCQlwcmludF93aGl0ZV9zcGFjZSAoKTsKKysKKysJICAgICAgLyogTm9ucHJpbnRhYmxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIHdpZHRoIDAsIGV4Y2VwdCBMJ1xiJy4gKi8KKysJICAgICAgaWYgKCh3aWR0aCA9IHdjd2lkdGggKHdjKSkgPCAxKQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgLS1vdXRwdXRfcG9zaXRpb247CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW91dHB1dF9wb3NpdGlvbiArPSB3aWR0aDsKKysKKysJICAgICAgZndyaXRlIChtYmMsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICAgIG1lbW1vdmUgKG1iYywgbWJjICsgbWJsZW5ndGgsIE1CX0NVUl9NQVggLSBtYmxlbmd0aCk7CisrCSAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysgICAgICByZXR1cm47CisrICAgIH0KKysgIHB1dGNoYXIgKGMpOworK30KKysjZW5kaWYKKysKKyAvKiBTa2lwIHRvIHBhZ2UgUEFHRSBiZWZvcmUgcHJpbnRpbmcuCisgICAgUEFHRSBtYXkgYmUgbGFyZ2VyIHRoYW4gdG90YWwgbnVtYmVyIG9mIHBhZ2VzLiAqLworIAorQEAgLTI1MTcsOSArMjcxOCw5IEBACisgCSAgYWxpZ25fZW1wdHlfY29scyA9IGZhbHNlOworIAl9CisgCistICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoID4gMCkKKyAJeworLQkgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCk7CisrCSAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGgpOworIAkgIHBhZGRpbmdfbm90X3ByaW50ZWQgPSBBTllXSEVSRTsKKyAJfQorIAorQEAgLTI2MjAsOSArMjgyMSw5IEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGggPiAwKQorICAgICB7CistICAgICAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoKTsKKysgICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCk7CisgICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCA9IEFOWVdIRVJFOworICAgICB9CisgCitAQCAtMjYzNSw4ICsyODM2LDggQEAKKyAgIGlmIChzcGFjZXNfbm90X3ByaW50ZWQgPT0gMCkKKyAgICAgeworICAgICAgIG91dHB1dF9wb3NpdGlvbiA9IHAtPnN0YXJ0X3Bvc2l0aW9uICsgZW5kX3ZlY3RvcltsaW5lXTsKKy0gICAgICBpZiAocC0+c3RhcnRfcG9zaXRpb24gLSBjb2xfc2VwX2xlbmd0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorLQlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF9sZW5ndGg7CisrICAgICAgaWYgKHAtPnN0YXJ0X3Bvc2l0aW9uIC0gY29sX3NlcF93aWR0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorKwlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF93aWR0aDsKKyAgICAgfQorIAorICAgcmV0dXJuIHRydWU7CitAQCAtMjY1NSw3ICsyODU2LDcgQEAKKyAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyAxLikgKi8KKyAKKyBzdGF0aWMgaW50CistY2hhcl90b19jbHVtcCAoY2hhciBjKQorK2NoYXJfdG9fY2x1bXBfc2luZ2xlIChjaGFyIGMpCisgeworICAgdW5zaWduZWQgY2hhciB1YyA9IGM7CisgICBjaGFyICpzID0gY2x1bXBfYnVmZjsKK0BAIC0yNjY1LDEwICsyODY2LDEwIEBACisgICBpbnQgY2hhcnM7CisgICBpbnQgY2hhcnNfcGVyX2MgPSA4OworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIpCisrICBpZiAoYyA9PSBpbnB1dF90YWJfY2hhclswXSkKKyAgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIgfHwgYyA9PSAnXHQnKQorKyAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXJbMF0gfHwgYyA9PSAnXHQnKQorICAgICB7CisgICAgICAgd2lkdGggPSBUQUJfV0lEVEggKGNoYXJzX3Blcl9jLCBpbnB1dF9wb3NpdGlvbik7CisgCitAQCAtMjczOSw2ICsyOTQwLDE1NCBAQAorICAgcmV0dXJuIGNoYXJzOworIH0KKyAKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2NoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYykKKyt7CisrICBzdGF0aWMgc2l6ZV90IG1iY19wb3MgPSAwOworKyAgc3RhdGljIGNoYXIgbWJjW01CX0xFTl9NQVhdID0geydcMCd9OworKyAgc3RhdGljIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrICB3Y2hhcl90IHdjOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgaW50IHdjX3dpZHRoOworKyAgcmVnaXN0ZXIgY2hhciAqcyA9IGNsdW1wX2J1ZmY7CisrICByZWdpc3RlciBpbnQgaSwgajsKKysgIGNoYXIgZXNjX2J1ZmZbNF07CisrICBpbnQgd2lkdGg7CisrICBpbnQgY2hhcnM7CisrICBpbnQgY2hhcnNfcGVyX2MgPSA4OworKworKyAgc3RhdGVfYmFrID0gc3RhdGU7CisrICBtYmNbbWJjX3BvcysrXSA9IGM7CisrICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgd2lkdGggPSAwOworKyAgY2hhcnMgPSAwOworKyAgd2hpbGUgKG1iY19wb3MgPiAwKQorKyAgICB7CisrICAgICAgc3dpdGNoIChtYmxlbmd0aCkKKysJeworKwljYXNlIChzaXplX3QpLTI6CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgcmV0dXJuIDA7CisrCisrCWNhc2UgKHNpemVfdCktMToKKysJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICBtYmxlbmd0aCA9IDE7CisrCisrCSAgaWYgKHVzZV9lc2Nfc2VxdWVuY2UgfHwgdXNlX2NudHJsX3ByZWZpeCkKKysJICAgIHsKKysJICAgICAgd2lkdGggPSArNDsKKysJICAgICAgY2hhcnMgPSArNDsKKysJICAgICAgKnMrKyA9ICdcXCc7CisrCSAgICAgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIG1iY1swXSk7CisrCSAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjsgKytpKQorKwkJKnMrKyA9IChpbnQpIGVzY19idWZmW2ldOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gMTsKKysJICAgICAgY2hhcnMgKz0gMTsKKysJICAgICAgKnMrKyA9IG1iY1swXTsKKysJICAgIH0KKysJICBicmVhazsKKysKKysJY2FzZSAwOgorKwkgIG1ibGVuZ3RoID0gMTsKKysJCS8qIEZhbGwgdGhyb3VnaCAqLworKworKwlkZWZhdWx0OgorKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwKQorKwkgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworKworKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwIHx8IGMgPT0gJ1x0JykKKysJICAgIHsKKysJICAgICAgaW50ICB3aWR0aF9pbmM7CisrCisrCSAgICAgIHdpZHRoX2luYyA9IFRBQl9XSURUSCAoY2hhcnNfcGVyX2MsIGlucHV0X3Bvc2l0aW9uKTsKKysJICAgICAgd2lkdGggKz0gd2lkdGhfaW5jOworKworKwkgICAgICBpZiAodW50YWJpZnlfaW5wdXQpCisrCQl7CisrCQkgIGZvciAoaSA9IHdpZHRoX2luYzsgaTsgLS1pKQorKwkJICAgICpzKysgPSAnICc7CisrCQkgIGNoYXJzICs9IHdpZHRoX2luYzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgIG1ibGVuZ3RoOyBpKyspCisrCQkgICAgKnMrKyA9IG1iY1tpXTsKKysJCSAgY2hhcnMgKz0gbWJsZW5ndGg7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZSBpZiAoKHdjX3dpZHRoID0gd2N3aWR0aCAod2MpKSA8IDEpCisrCSAgICB7CisrCSAgICAgIGlmICh1c2VfZXNjX3NlcXVlbmNlKQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICB7CisrCQkgICAgICB3aWR0aCArPSA0OworKwkJICAgICAgY2hhcnMgKz0gNDsKKysJCSAgICAgICpzKysgPSAnXFwnOworKwkJICAgICAgc3ByaW50ZiAoZXNjX2J1ZmYsICIlMDNvIiwgYyk7CisrCQkgICAgICBmb3IgKGogPSAwOyBqIDw9IDI7ICsraikKKysJCQkqcysrID0gKGludCkgZXNjX2J1ZmZbal07CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh1c2VfY250cmxfcHJlZml4KQorKwkJeworKwkJICBpZiAod2MgPCAwMjAwKQorKwkJICAgIHsKKysJCSAgICAgIHdpZHRoICs9IDI7CisrCQkgICAgICBjaGFycyArPSAyOworKwkJICAgICAgKnMrKyA9ICdeJzsKKysJCSAgICAgICpzKysgPSB3YyBeIDAxMDA7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG1ibGVuZ3RoOyBpKyspCisrCQkJeworKwkJCSAgd2lkdGggKz0gNDsKKysJCQkgIGNoYXJzICs9IDQ7CisrCQkJICAqcysrID0gJ1xcJzsKKysJCQkgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIGMpOworKwkJCSAgZm9yIChqID0gMDsgaiA8PSAyOyArK2opCisrCQkJICAgICpzKysgPSAoaW50KSBlc2NfYnVmZltqXTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh3YyA9PSBMJ1xiJykKKysJCXsKKysJCSAgd2lkdGggKz0gLTE7CisrCQkgIGNoYXJzICs9IDE7CisrCQkgICpzKysgPSBjOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHdpZHRoICs9IDA7CisrCQkgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICAqcysrID0gbWJjW2ldOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gd2Nfd2lkdGg7CisrCSAgICAgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSpzKysgPSBtYmNbaV07CisrCSAgICB9CisrCX0KKysgICAgICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKyAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIGlucHV0X3Bvc2l0aW9uICs9IHdpZHRoOworKyAgcmV0dXJuIGNoYXJzOworK30KKysjZW5kaWYKKysKKyAvKiBXZSd2ZSBqdXN0IHByaW50ZWQgc29tZSBmaWxlcyBhbmQgbmVlZCB0byBjbGVhbiB1cCB0aGluZ3MgYmVmb3JlCisgICAgbG9va2luZyBmb3IgbW9yZSBvcHRpb25zIGFuZCBwcmludGluZyB0aGUgbmV4dCBiYXRjaCBvZiBmaWxlcy4KKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvY3V0LmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9jdXQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDYgKzI5LDExIEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zNyw2ICs0MiwxOCBAQAorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4JKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgdW5kZWYgTUJfTEVOX01BWAorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImN1dCIKKyAKK0BAIC02Nyw2ICs4NCw1MiBAQAorICAgICB9CQkJCQkJCVwKKyAgIHdoaWxlICgwKQorIAorKy8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRiB0byBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAqLworKyNkZWZpbmUgUkVGSUxMX0JVRkZFUihCVUYsIEJVRlBPUywgQlVGTEVOLCBTVFJFQU0pCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgaWYgKEJVRkxFTiA8IE1CX0xFTl9NQVggJiYgIWZlb2YgKFNUUkVBTSkgJiYgIWZlcnJvciAoU1RSRUFNKSkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWVtbW92ZSAoQlVGLCBCVUZQT1MsIEJVRkxFTik7CQkJCVwKKysJICBCVUZMRU4gKz0gZnJlYWQgKEJVRiArIEJVRkxFTiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIFNUUkVBTSk7IFwKKysJICBCVUZQT1MgPSBCVUY7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrLyogR2V0IHdpZGUgY2hhcmFjdGVyIG9uIEJVRlBPUy4gQlVGUE9TIGlzIG5vdCBpbmNsdWRlZCBhZnRlciB0aGF0LgorKyAgIElmIGJ5dGUgc2VxdWVuY2UgaXMgbm90IHZhbGlkIGFzIGEgY2hhcmFjdGVyLCBDT05WRkFJTCBpcyAxLiBPdGhlcndpc2UgMC4gKi8gCisrI2RlZmluZSBHRVRfTkVYVF9XQ19GUk9NX0JVRkZFUihXQywgQlVGUE9TLCBCVUZMRU4sIE1CTEVOR1RILCBTVEFURSwgQ09OVkZBSUwpIFwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBpZiAoQlVGTEVOIDwgMSkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgV0MgPSBXRU9GOwkJCQkJCQlcCisrCSAgYnJlYWs7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICAvKiBHZXQgYSB3aWRlIGNoYXJhY3Rlci4gKi8JCQkJCVwKKysgICAgICBDT05WRkFJTCA9IDA7CQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgTUJMRU5HVEggPSBtYnJ0b3djICgod2NoYXJfdCAqKSZXQywgQlVGUE9TLCBCVUZMRU4sICZTVEFURSk7CVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgQ09OVkZBSUwrKzsJCQkJCQkJXAorKwkgIFNUQVRFID0gc3RhdGVfYmFrOwkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z24uICovCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJY2FzZSAwOgkJCQkJCQkJXAorKwkgIE1CTEVOR1RIID0gMTsJCQkJCQkJXAorKwkgIGJyZWFrOwkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIHN0cnVjdCByYW5nZV9wYWlyCisgICB7CisgICAgIHNpemVfdCBsbzsKK0BAIC04NSw3ICsxNDgsNyBAQAorIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZvciBGSUVMRF8xX0JVRkZFUi4gICovCisgc3RhdGljIHNpemVfdCBmaWVsZF8xX2J1ZnNpemU7CisgCistLyogVGhlIGxhcmdlc3QgZmllbGQgb3IgYnl0ZSBpbmRleCB1c2VkIGFzIGFuIGVuZHBvaW50IG9mIGEgY2xvc2VkCisrLyogVGhlIGxhcmdlc3QgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIGluZGV4IHVzZWQgYXMgYW4gZW5kcG9pbnQgb2YgYSBjbG9zZWQKKyAgICBvciBkZWdlbmVyYXRlIHJhbmdlIHNwZWNpZmljYXRpb247ICB0aGlzIGRvZXNuJ3QgaW5jbHVkZSB0aGUgc3RhcnRpbmcKKyAgICBpbmRleCBvZiByaWdodC1vcGVuLWVuZGVkIHJhbmdlcy4gIEZvciBleGFtcGxlLCB3aXRoIGVpdGhlciByYW5nZSBzcGVjCisgICAgYDItNSw5LScsIGAyLTMsNSw5LScgdGhpcyB2YXJpYWJsZSB3b3VsZCBiZSBzZXQgdG8gNS4gICovCitAQCAtOTcsMTAgKzE2MCwxMSBAQAorIAorIC8qIFRoaXMgaXMgYSBiaXQgdmVjdG9yLgorICAgIEluIGJ5dGUgbW9kZSwgd2hpY2ggYnl0ZXMgdG8gb3V0cHV0LgorKyAgIEluIGNoYXJhY3RlciBtb2RlLCB3aGljaCBjaGFyYWN0ZXJzIHRvIG91dHB1dC4KKyAgICBJbiBmaWVsZCBtb2RlLCB3aGljaCBERUxJTS1zZXBhcmF0ZWQgZmllbGRzIHRvIG91dHB1dC4KKy0gICBCb3RoIGJ5dGVzIGFuZCBmaWVsZHMgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggMSwKKysgICBCeXRlcywgY2hhcmFjdGVycyBhbmQgZmllbGRzIGFyZSBudW1iZXJlZCBzdGFydGluZyB3aXRoIDEsCisgICAgc28gdGhlIHplcm90aCBiaXQgb2YgdGhpcyBhcnJheSBpcyB1bnVzZWQuCistICAgQSBmaWVsZCBvciBieXRlIEsgaGFzIGJlZW4gc2VsZWN0ZWQgaWYKKysgICBBIGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBLIGhhcyBiZWVuIHNlbGVjdGVkIGlmCisgICAgKEsgPD0gTUFYX1JBTkdFX0VORFBPSU5UIGFuZCBpc19wcmludGFibGVfZmllbGQoSykpCisgICAgIHx8IChFT0xfUkFOR0VfU1RBUlQgPiAwICYmIEsgPj0gRU9MX1JBTkdFX1NUQVJUKS4gICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgKnByaW50YWJsZV9maWVsZDsKK0BAIC0xMDksOSArMTczLDEyIEBACisgICB7CisgICAgIHVuZGVmaW5lZF9tb2RlLAorIAorLSAgICAvKiBPdXRwdXQgY2hhcmFjdGVycyB0aGF0IGFyZSBpbiB0aGUgZ2l2ZW4gYnl0ZXMuICovCisrICAgIC8qIE91dHB1dCBieXRlcyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworICAgICBieXRlX21vZGUsCisgCisrICAgIC8qIE91dHB1dCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICAgIGNoYXJhY3Rlcl9tb2RlLAorKworICAgICAvKiBPdXRwdXQgdGhlIGdpdmVuIGRlbGltZXRlci1zZXBhcmF0ZWQgZmllbGRzLiAqLworICAgICBmaWVsZF9tb2RlCisgICB9OworQEAgLTEyMSw2ICsxODgsMTMgQEAKKyAKKyBzdGF0aWMgZW51bSBvcGVyYXRpbmdfbW9kZSBvcGVyYXRpbmdfbW9kZTsKKyAKKysvKiBJZiBub256ZXJvLCB3aGVuIGluIGJ5dGUgbW9kZSwgZG9uJ3Qgc3BsaXQgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworK3N0YXRpYyBpbnQgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZTsKKysKKysvKiBJZiBub256ZXJvLCB0aGUgZnVuY3Rpb24gZm9yIHNpbmdsZSBieXRlIGxvY2FsZSBpcyB3b3JrCisrICAgaWYgdGhpcyBwcm9ncmFtIHJ1bnMgb24gbXVsdGlieXRlIGxvY2FsZS4gKi8KKytzdGF0aWMgaW50IGZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysKKyAvKiBJZiB0cnVlIGRvIG5vdCBvdXRwdXQgbGluZXMgY29udGFpbmluZyBubyBkZWxpbWV0ZXIgY2hhcmFjdGVycy4KKyAgICBPdGhlcndpc2UsIGFsbCBzdWNoIGxpbmVzIGFyZSBwcmludGVkLiAgVGhpcyBvcHRpb24gaXMgdmFsaWQgb25seQorICAgIHdpdGggZmllbGQgbW9kZS4gICovCitAQCAtMTMyLDYgKzIwNiw5IEBACisgCisgLyogVGhlIGRlbGltZXRlciBjaGFyYWN0ZXIgZm9yIGZpZWxkIG1vZGUuICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVsaW07CisrI2lmIEhBVkVfV0NIQVJfSAorK3N0YXRpYyB3Y2hhcl90IHdjZGVsaW07CisrI2VuZGlmCisgCisgLyogVHJ1ZSBpZiB0aGUgLS1vdXRwdXQtZGVsaW1pdGVyPVNUUklORyBvcHRpb24gd2FzIHNwZWNpZmllZC4gICovCisgc3RhdGljIGJvb2wgb3V0cHV0X2RlbGltaXRlcl9zcGVjaWZpZWQ7CitAQCAtMjA1LDcgKzI4Miw3IEBACisgICAtZiwgLS1maWVsZHM9TElTVCAgICAgICBzZWxlY3Qgb25seSB0aGVzZSBmaWVsZHM7ICBhbHNvIHByaW50IGFueSBsaW5lXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgbm8gZGVsaW1pdGVyIGNoYXJhY3RlciwgdW5sZXNzXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAtcyBvcHRpb24gaXMgc3BlY2lmaWVkXG5cCistICAtbiAgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZClcblwKKysgIC1uICAgICAgICAgICAgICAgICAgICAgIHdpdGggLWI6IGRvbid0IHNwbGl0IG11bHRpYnl0ZSBjaGFyYWN0ZXJzXG5cCisgIiksIHN0ZG91dCk7CisgICAgICAgZnB1dHMgKF8oIlwKKyAgICAgICAtLWNvbXBsZW1lbnQgICAgICAgIGNvbXBsZW1lbnQgdGhlIHNldCBvZiBzZWxlY3RlZCBieXRlcywgY2hhcmFjdGVyc1xuXAorQEAgLTM2Miw3ICs0MzksNyBAQAorIAkgIGluX2RpZ2l0cyA9IGZhbHNlOworIAkgIC8qIFN0YXJ0aW5nIGEgcmFuZ2UuICovCisgCSAgaWYgKGRhc2hfZm91bmQpCistCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlIG9yIGZpZWxkIGxpc3QiKSk7CisrCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAJICBkYXNoX2ZvdW5kID0gdHJ1ZTsKKyAJICBmaWVsZHN0cisrOworIAorQEAgLTM4NywxNCArNDY0LDE2IEBACisgCSAgICAgIGlmICh2YWx1ZSA9PSAwKQorIAkJeworIAkJICAvKiBgbi0nLiAgRnJvbSBgaW5pdGlhbCcgdG8gZW5kIG9mIGxpbmUuICovCistCQkgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisrCQkgIGlmIChlb2xfcmFuZ2Vfc3RhcnQgPT0gMCB8fAorKwkJICAgICAgKGVvbF9yYW5nZV9zdGFydCAhPSAwICYmIGVvbF9yYW5nZV9zdGFydCA+IGluaXRpYWwpKQorKwkJICAgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisgCQkgIGZpZWxkX2ZvdW5kID0gdHJ1ZTsKKyAJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBgbS1uJyBvciBgLW4nICgxLW4pLiAqLworIAkJICBpZiAodmFsdWUgPCBpbml0aWFsKQorLQkJICAgIEZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUgb3IgZmllbGQgbGlzdCIpKTsKKysJCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAKKyAJCSAgLyogSXMgdGhlcmUgYWxyZWFkeSBhIHJhbmdlIGdvaW5nIHRvIGVuZCBvZiBsaW5lPyAqLworIAkJICBpZiAoZW9sX3JhbmdlX3N0YXJ0ICE9IDApCitAQCAtNDY3LDYgKzU0Niw5IEBACisgCSAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJieXRlIG9mZnNldCAlcyBpcyB0b28gbGFyZ2UiKSwgcXVvdGUgKGJhZF9udW0pKTsKKysJICAgICAgZWxzZSBpZiAob3BlcmF0aW5nX21vZGUgPT0gY2hhcmFjdGVyX21vZGUpCisrCQllcnJvciAoMCwgMCwKKysJCSAgICAgICBfKCJjaGFyYWN0ZXIgb2Zmc2V0ICVzIGlzIHRvbyBsYXJnZSIpLCBxdW90ZSAoYmFkX251bSkpOworIAkgICAgICBlbHNlCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJmaWVsZCBudW1iZXIgJXMgaXMgdG9vIGxhcmdlIiksIHF1b3RlIChiYWRfbnVtKSk7CitAQCAtNDc3LDcgKzU1OSw3IEBACisgCSAgZmllbGRzdHIrKzsKKyAJfQorICAgICAgIGVsc2UKKy0JRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSBvciBmaWVsZCBsaXN0IikpOworKwlGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAgICAgfQorIAorICAgbWF4X3JhbmdlX2VuZHBvaW50ID0gMDsKK0BAIC01NzAsNiArNjUyLDYzIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworKy8qIFRoaXMgZnVuY3Rpb24gaXMgaW4gdXNlIGZvciB0aGUgZm9sbG93aW5nIGNhc2UuCisrCisrICAgMS4gUmVhZCBmcm9tIHRoZSBzdHJlYW0gU1RSRUFNLCBwcmludGluZyB0byBzdGFuZGFyZCBvdXRwdXQgYW55IHNlbGVjdGVkCisrICAgY2hhcmFjdGVycy4gCisrCisrICAgMi4gUmVhZCBmcm9tIHN0cmVhbSBTVFJFQU0sIHByaW50aW5nIHRvIHN0YW5kYXJkIG91dHB1dCBhbnkgc2VsZWN0ZWQgYnl0ZXMsCisrICAgd2l0aG91dCBzcGxpdHRpbmcgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworKyAKKytzdGF0aWMgdm9pZAorK2N1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBpZHg7CQkvKiBudW1iZXIgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBpbiB0aGUgbGluZSBzbyBmYXIuICovCisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIGNoYXIgKmJ1ZnBvczsJCS8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICBzaXplX3QgYnVmbGVuOwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIHdpbnRfdCB3YzsJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlciB3aGljaCBzaG93cworKwkJCSAgIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKyAgbWJzdGF0ZV90IHN0YXRlOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBpZHggPSAwOworKyAgYnVmbGVuID0gMDsKKysgIGJ1ZnBvcyA9IGJ1ZjsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIFJFRklMTF9CVUZGRVIgKGJ1ZiwgYnVmcG9zLCBidWZsZW4sIHN0cmVhbSk7CisrCisrICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIgKHdjLCBidWZwb3MsIGJ1ZmxlbiwgbWJsZW5ndGgsIHN0YXRlLCBjb252ZmFpbCk7CisrCisrICAgICAgaWYgKHdjID09IFdFT0YpCisrCXsKKysJICBpZiAoaWR4ID4gMCkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGJyZWFrOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcbicpCisrCXsKKysJICBwdXRjaGFyICgnXG4nKTsKKysJICBpZHggPSAwOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWR4ICs9IChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpID8gbWJsZW5ndGggOiAxOworKwkgIGlmIChwcmludF9rdGggKGlkeCwgTlVMTCkpCisrCSAgICBmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysJfQorKworKyAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrICAgIH0KKyt9CisrI2VuZGlmCisrCQkgICAKKyAvKiBSZWFkIGZyb20gc3RyZWFtIFNUUkVBTSwgcHJpbnRpbmcgdG8gc3RhbmRhcmQgb3V0cHV0IGFueSBzZWxlY3RlZCBmaWVsZHMuICAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtNjkyLDEzICs4MzEsMTkyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrY3V0X2ZpZWxkc19tYiAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBjOworKyAgdW5zaWduZWQgaW50IGZpZWxkX2lkeDsKKysgIGludCBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQ7CisrICBpbnQgYnVmZmVyX2ZpcnN0X2ZpZWxkOworKyAgaW50IGVtcHR5X2lucHV0OworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgc2l6ZV90IGJ1ZmxlbjsJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2MgPSAwOwkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZTsJLyogU3RhdGUgb2YgdGhlIHN0cmVhbS4gKi8KKysgIGludCBjb252ZmFpbDsJCS8qIDEsIHdoZW4gY29udmVyc2lvbiBpcyBmYWlsZWQuIE90aGVyd2lzZSAwLiAqLworKworKyAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMDsKKysgIGZpZWxkX2lkeCA9IDE7CisrICBidWZwb3MgPSBidWY7CisrICBidWZsZW4gPSAwOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGMgPSBnZXRjIChzdHJlYW0pOworKyAgZW1wdHlfaW5wdXQgPSAoYyA9PSBFT0YpOworKyAgaWYgKGMgIT0gRU9GKQorKyAgICB1bmdldGMgKGMsIHN0cmVhbSk7CisrICBlbHNlCisrICAgIHdjID0gV0VPRjsKKysKKysgIC8qIFRvIHN1cHBvcnQgdGhlIHNlbWFudGljcyBvZiB0aGUgLXMgZmxhZywgd2UgbWF5IGhhdmUgdG8gYnVmZmVyCisrICAgICBhbGwgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGBkZWxpbWl0ZWQuJworKyAgICAgQnV0IHRoYXQgaXMgdW5uZWNlc3NhcnkgaWYgYWxsIG5vbi1kZWxpbWl0ZWQgbGluZXMgbXVzdCBiZSBwcmludGVkCisrICAgICBhbmQgdGhlIGZpcnN0IGZpZWxkIGhhcyBiZWVuIHNlbGVjdGVkLCBvciBpZiBub24tZGVsaW1pdGVkIGxpbmVzCisrICAgICBtdXN0IGJlIHN1cHByZXNzZWQgYW5kIHRoZSBmaXJzdCBmaWVsZCBoYXMgKm5vdCogYmVlbiBzZWxlY3RlZC4KKysgICAgIFRoYXQgaXMgYmVjYXVzZSBhIG5vbi1kZWxpbWl0ZWQgbGluZSBoYXMgZXhhY3RseSBvbmUgZmllbGQuICAqLworKyAgYnVmZmVyX2ZpcnN0X2ZpZWxkID0gKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgXiAhcHJpbnRfa3RoICgxLCBOVUxMKSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChmaWVsZF9pZHggPT0gMSAmJiBidWZmZXJfZmlyc3RfZmllbGQpCisrCXsKKysJICBpbnQgbGVuID0gMDsKKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKworKwkgICAgICBmaWVsZF8xX2J1ZmZlciA9IHhyZWFsbG9jIChmaWVsZF8xX2J1ZmZlciwgbGVuICsgbWJsZW5ndGgpOworKwkgICAgICBtZW1jcHkgKGZpZWxkXzFfYnVmZmVyICsgbGVuLCBidWZwb3MsIG1ibGVuZ3RoKTsKKysJICAgICAgbGVuICs9IG1ibGVuZ3RoOworKwkgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCSAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFjb252ZmFpbCAmJiAod2MgPT0gTCdcbicgfHwgd2MgPT0gd2NkZWxpbSkpCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICBpZiAod2MgPT0gV0VPRikKKysJICAgIGJyZWFrOworKworKwkgIC8qIElmIHRoZSBmaXJzdCBmaWVsZCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgbGluZSAoaXQgaXMgbm90CisrCSAgICAgZGVsaW1pdGVkKSBhbmQgd2UgYXJlIHByaW50aW5nIGFsbCBub24tZGVsaW1pdGVkIGxpbmVzLAorKwkgICAgIHByaW50IHRoaXMgb25lLiAgKi8KKysJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSB3Y2RlbGltKSkKKysJICAgIHsKKysJICAgICAgaWYgKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQpCisrCQl7CisrCQkgIC8qIEVtcHR5LgkqLworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiwgc3Rkb3V0KTsKKysJCSAgLyogTWFrZSBzdXJlIHRoZSBvdXRwdXQgbGluZSBpcyBuZXdsaW5lIHRlcm1pbmF0ZWQuICAqLworKwkJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSBMJ1xuJykpCisrCQkgICAgcHV0Y2hhciAoJ1xuJyk7CisrCQl9CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKworKwkgIGlmIChwcmludF9rdGggKDEsIE5VTEwpKQorKwkgICAgeworKwkgICAgICAvKiBQcmludCB0aGUgZmllbGQsIGJ1dCBub3QgdGhlIHRyYWlsaW5nIGRlbGltaXRlci4gICovCisrCSAgICAgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiAtIDEsIHN0ZG91dCk7CisrCSAgICAgIGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCA9IDE7CisrCSAgICB9CisrCSAgKytmaWVsZF9pZHg7CisrCX0KKysKKysgICAgICBpZiAod2MgIT0gV0VPRikKKysJeworKwkgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCSAgICB7CisrCSAgICAgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQpCisrCQl7CisrCQkgIGZ3cml0ZSAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcsIHNpemVvZiAoY2hhciksCisrCQkJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCwgc3Rkb3V0KTsKKysJCX0KKysJICAgICAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMTsKKysJICAgIH0KKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKwkgICAgICBlbHNlIGlmICghY29udmZhaWwgJiYgKHdjID09IHdjZGVsaW0gfHwgd2MgPT0gTCdcbicpKQorKwkJeworKwkJICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCQkgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysJCSAgYnJlYWs7CisrCQl9CisrCisrCSAgICAgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCQlmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysKKysJICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKwkgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoKCFjb252ZmFpbCB8fCB3YyA9PSBMJ1xuJykgJiYgYnVmbGVuIDwgMSkKKysJd2MgPSBXRU9GOworKworKyAgICAgIGlmICghY29udmZhaWwgJiYgd2MgPT0gd2NkZWxpbSkKKysJKytmaWVsZF9pZHg7CisrICAgICAgZWxzZSBpZiAod2MgPT0gV0VPRiB8fCAoIWNvbnZmYWlsICYmIHdjID09IEwnXG4nKSkKKysJeworKwkgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQKKysJICAgICAgfHwgKCFlbXB0eV9pbnB1dCAmJiAhKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgJiYgZmllbGRfaWR4ID09IDEpKSkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgYnJlYWs7CisrCSAgZmllbGRfaWR4ID0gMTsKKysJICBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQgPSAwOworKwl9CisrICAgIH0KKyt9CisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBjdXRfc3RyZWFtIChGSUxFICpzdHJlYW0pCisgeworLSAgaWYgKG9wZXJhdGluZ19tb2RlID09IGJ5dGVfbW9kZSkKKy0gICAgY3V0X2J5dGVzIChzdHJlYW0pOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSAmJiAhZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyAgICB7CisrICAgICAgc3dpdGNoIChvcGVyYXRpbmdfbW9kZSkKKysJeworKwljYXNlIGJ5dGVfbW9kZToKKysJICBpZiAoYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSkKKysJICAgIGN1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoc3RyZWFtKTsKKysJICBlbHNlCisrCSAgICBjdXRfYnl0ZXMgKHN0cmVhbSk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgY2hhcmFjdGVyX21vZGU6CisrCSAgY3V0X2NoYXJhY3RlcnNfb3JfY3V0X2J5dGVzX25vX3NwbGl0IChzdHJlYW0pOworKwkgIGJyZWFrOworKworKwljYXNlIGZpZWxkX21vZGU6CisrCSAgY3V0X2ZpZWxkc19tYiAoc3RyZWFtKTsKKysJICBicmVhazsKKysKKysJZGVmYXVsdDoKKysJICBhYm9ydCAoKTsKKysJfQorKyAgICB9CisgICBlbHNlCistICAgIGN1dF9maWVsZHMgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAob3BlcmF0aW5nX21vZGUgPT0gZmllbGRfbW9kZSkKKysJY3V0X2ZpZWxkcyAoc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWN1dF9ieXRlcyAoc3RyZWFtKTsKKysgICAgfQorIH0KKyAKKyAvKiBQcm9jZXNzIGZpbGUgRklMRSB0byBzdGFuZGFyZCBvdXRwdXQuCitAQCAtNzQ4LDYgKzEwNjYsOCBAQAorICAgYm9vbCBvazsKKyAgIGJvb2wgZGVsaW1fc3BlY2lmaWVkID0gZmFsc2U7CisgICBjaGFyICpzcGVjX2xpc3Rfc3RyaW5nIElGX0xJTlQoPSBOVUxMKTsKKysgIGNoYXIgbWJkZWxpbVtNQl9MRU5fTUFYICsgMV07CisrICBzaXplX3QgZGVsaW1sZW4gPSAwOworIAorICAgaW5pdGlhbGl6ZV9tYWluICgmYXJnYywgJmFyZ3YpOworICAgcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKK0BAIC03NzAsNyArMTA5MCw2IEBACisgICAgICAgc3dpdGNoIChvcHRjKQorIAl7CisgCWNhc2UgJ2InOgorLQljYXNlICdjJzoKKyAJICAvKiBCdWlsZCB0aGUgYnl0ZSBsaXN0LiAqLworIAkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSB1bmRlZmluZWRfbW9kZSkKKyAJICAgIEZBVEFMX0VSUk9SIChfKCJvbmx5IG9uZSB0eXBlIG9mIGxpc3QgbWF5IGJlIHNwZWNpZmllZCIpKTsKK0BAIC03NzgsNiArMTA5NywxNCBAQAorIAkgIHNwZWNfbGlzdF9zdHJpbmcgPSBvcHRhcmc7CisgCSAgYnJlYWs7CisgCisrCWNhc2UgJ2MnOgorKwkgIC8qIEJ1aWxkIHRoZSBjaGFyYWN0ZXIgbGlzdC4gKi8KKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgdHlwZSBvZiBsaXN0IG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKysJICBzcGVjX2xpc3Rfc3RyaW5nID0gb3B0YXJnOworKwkgIGJyZWFrOworKworIAljYXNlICdmJzoKKyAJICAvKiBCdWlsZCB0aGUgZmllbGQgbGlzdC4gKi8KKyAJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCitAQCAtNzg5LDEwICsxMTE2LDM1IEBACisgCWNhc2UgJ2QnOgorIAkgIC8qIE5ldyBkZWxpbWl0ZXIuICovCisgCSAgLyogSW50ZXJwcmV0IC1kICcnIHRvIG1lYW4gYHVzZSB0aGUgTlVMIGJ5dGUgYXMgdGhlIGRlbGltaXRlci4nICAqLworLQkgIGlmIChvcHRhcmdbMF0gIT0gJ1wwJyAmJiBvcHRhcmdbMV0gIT0gJ1wwJykKKy0JICAgIEZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworLQkgIGRlbGltID0gb3B0YXJnWzBdOworLQkgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgICAgeworKwkgICAgICBpZihNQl9DVVJfTUFYID4gMSkKKysJCXsKKysJCSAgbWJzdGF0ZV90IHN0YXRlOworKworKwkJICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBkZWxpbWxlbiA9IG1icnRvd2MgKCZ3Y2RlbGltLCBvcHRhcmcsIHN0cm5sZW4ob3B0YXJnLCBNQl9MRU5fTUFYKSwgJnN0YXRlKTsKKysKKysJCSAgaWYgKGRlbGltbGVuID09IChzaXplX3QpLTEgfHwgZGVsaW1sZW4gPT0gKHNpemVfdCktMikKKysJCSAgICArK2ZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGRlbGltbGVuID0gKGRlbGltbGVuIDwgMSkgPyAxIDogZGVsaW1sZW47CisrCQkgICAgICBpZiAod2NkZWxpbSAhPSBMJ1wwJyAmJiAqKG9wdGFyZyArIGRlbGltbGVuKSAhPSAnXDAnKQorKwkJCUZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworKwkJICAgICAgbWVtY3B5IChtYmRlbGltLCBvcHRhcmcsIGRlbGltbGVuKTsKKysJCSAgICB9CisrCQl9CisrCisrCSAgICAgIGlmIChNQl9DVVJfTUFYIDw9IDEgfHwgZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyNlbmRpZgorKwkJeworKwkJICBpZiAob3B0YXJnWzBdICE9ICdcMCcgJiYgb3B0YXJnWzFdICE9ICdcMCcpCisrCQkgICAgRkFUQUxfRVJST1IgKF8oInRoZSBkZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiKSk7CisrCQkgIGRlbGltID0gKHVuc2lnbmVkIGNoYXIpIG9wdGFyZ1swXTsKKysJCX0KKysJICAgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrCSAgfQorIAkgIGJyZWFrOworIAorIAljYXNlIE9VVFBVVF9ERUxJTUlURVJfT1BUSU9OOgorQEAgLTgwNSw2ICsxMTU3LDcgQEAKKyAJICBicmVhazsKKyAKKyAJY2FzZSAnbic6CisrCSAgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSA9IDE7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgJ3MnOgorQEAgLTgyNyw3ICsxMTgwLDcgQEAKKyAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSB1bmRlZmluZWRfbW9kZSkKKyAgICAgRkFUQUxfRVJST1IgKF8oInlvdSBtdXN0IHNwZWNpZnkgYSBsaXN0IG9mIGJ5dGVzLCBjaGFyYWN0ZXJzLCBvciBmaWVsZHMiKSk7CisgCistICBpZiAoZGVsaW0gIT0gJ1wwJyAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorKyAgaWYgKGRlbGltX3NwZWNpZmllZCAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorICAgICBGQVRBTF9FUlJPUiAoXygiYW4gaW5wdXQgZGVsaW1pdGVyIG1heSBiZSBzcGVjaWZpZWQgb25seVwKKyAgd2hlbiBvcGVyYXRpbmcgb24gZmllbGRzIikpOworIAorQEAgLTg1NCwxNSArMTIwNywzNCBAQAorICAgICB9CisgCisgICBpZiAoIWRlbGltX3NwZWNpZmllZCkKKy0gICAgZGVsaW0gPSAnXHQnOworKyAgICB7CisrICAgICAgZGVsaW0gPSAnXHQnOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICB3Y2RlbGltID0gTCdcdCc7CisrICAgICAgbWJkZWxpbVswXSA9ICdcdCc7CisrICAgICAgbWJkZWxpbVsxXSA9ICdcMCc7CisrICAgICAgZGVsaW1sZW4gPSAxOworKyNlbmRpZgorKyAgICB9CisgCisgICBpZiAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPT0gTlVMTCkKKyAgICAgeworLSAgICAgIHN0YXRpYyBjaGFyIGR1bW15WzJdOworLSAgICAgIGR1bW15WzBdID0gZGVsaW07CistICAgICAgZHVtbXlbMV0gPSAnXDAnOworLSAgICAgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0gZHVtbXk7CistICAgICAgb3V0cHV0X2RlbGltaXRlcl9sZW5ndGggPSAxOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEgJiYgIWZvcmNlX3NpbmdsZWJ5dGVfbW9kZSkKKysJeworKwkgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0geHN0cmR1cChtYmRlbGltKTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IGRlbGltbGVuOworKwl9CisrCisrICAgICAgaWYgKE1CX0NVUl9NQVggPD0gMSB8fCBmb3JjZV9zaW5nbGVieXRlX21vZGUpCisrI2VuZGlmCisrCXsKKysJICBzdGF0aWMgY2hhciBkdW1teVsyXTsgCisrCSAgZHVtbXlbMF0gPSBkZWxpbTsKKysJICBkdW1teVsxXSA9ICdcMCc7CisrCSAgb3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPSBkdW1teTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IDE7CisrCX0KKyAgICAgfQorIAorICAgaWYgKG9wdGluZCA9PSBhcmdjKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtbHMteC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhODc0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2gKQEAgLTAsMCArMSwxMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoaXMgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gdGhlIEZlZG9yYSBDb3JlIDggY29yZXV0aWxzLTYuOS05IHBhY2thZ2UuCisKK1RoZSBwYWNrYWdlIGlzIHN0YXRlZCBhcyBiZWluZyBMaWNlbnNlZCBhcyBHUEx2MisuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMubHMteAkyMDA3LTA2LTEzIDE0OjI3OjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMJMjAwNy0wNi0xMyAxNDoyODo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MTUxLDE2ICs0MTUxLDE2IEBACisgICBzaXplX3QgcG9zID0gMDsKKyAgIHNpemVfdCBjb2xzID0gY2FsY3VsYXRlX2NvbHVtbnMgKGZhbHNlKTsKKyAgIHN0cnVjdCBjb2x1bW5faW5mbyBjb25zdCAqbGluZV9mbXQgPSAmY29sdW1uX2luZm9bY29scyAtIDFdOworLSAgc2l6ZV90IG5hbWVfbGVuZ3RoID0gbGVuZ3RoX29mX2ZpbGVfbmFtZV9hbmRfZnJpbGxzIChjd2RfZmlsZSk7CisrICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmYgPSBzb3J0ZWRfZmlsZVswXTsKKysgIHNpemVfdCBuYW1lX2xlbmd0aCA9IGxlbmd0aF9vZl9maWxlX25hbWVfYW5kX2ZyaWxscyAoZik7CisgICBzaXplX3QgbWF4X25hbWVfbGVuZ3RoID0gbGluZV9mbXQtPmNvbF9hcnJbMF07CisgCisgICAvKiBQcmludCBmaXJzdCBlbnRyeS4gICovCistICBwcmludF9maWxlX25hbWVfYW5kX2ZyaWxscyAoY3dkX2ZpbGUpOworKyAgcHJpbnRfZmlsZV9uYW1lX2FuZF9mcmlsbHMgKGYpOworIAorICAgLyogTm93IHRoZSByZXN0LiAgKi8KKyAgIGZvciAoZmlsZXNubyA9IDE7IGZpbGVzbm8gPCBjd2Rfbl91c2VkOyArK2ZpbGVzbm8pCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmY7CisgICAgICAgc2l6ZV90IGNvbCA9IGZpbGVzbm8gJSBjb2xzOworIAorICAgICAgIGlmIChjb2wgPT0gMCkKKy0tLSBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtLmxzLXgJMjAwNy0wMy0xOCAyMTozNjo0My4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsNyArMjQsNyBAQAorICAgc3RhdC1kdHlwZSBcCisgICBpbm9kZSBkYW5nbGUgZmlsZS10eXBlIHJlY3Vyc2l2ZSBkaXJlZCBpbmZsb29wIFwKKyAgIHJ0LTEgdGltZS0xIHN5bWxpbmstc2xhc2ggZm9sbG93LXNsaW5rIG5vLWFyZyBtLW9wdGlvbiBcCistICBzdGF0LXZzLWRpcmVudAorKyAgc3RhdC12cy1kaXJlbnQgeC1vcHRpb24KKyAKKyBFWFRSQV9ESVNUID0gJChURVNUUykKKyBURVNUU19FTlZJUk9OTUVOVCA9IFwKKy0tLSAvZGV2L251bGwJMjAwNy0wNi0xMyAwODo0Mzo1MS45OTMyNjMzODIgKzAxMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL3gtb3B0aW9uCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDU5IEBACisrIyEvYmluL3NoCisrIyBFeGVyY2lzZSB0aGUgLXggb3B0aW9uLgorKworKyMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEsIFVTQS4KKysKKytpZiB0ZXN0ICIkVkVSQk9TRSIgPSB5ZXM7IHRoZW4KKysgIHNldCAteAorKyAgbHMgLS12ZXJzaW9uCisrZmkKKysKKysuICRzcmNkaXIvLi4vZW52dmFyLWNoZWNrCisrLiAkc3JjZGlyLy4uL2xhbmctZGVmYXVsdAorKworK3B3ZD1gcHdkYAorK3QwPWBlY2hvICIkMCJ8c2VkICdzLC4qLywsJ2AudG1wOyB0bXA9JHQwLyQkCisrdHJhcCAnc3RhdHVzPSQ/OyBjZCAiJHB3ZCIgJiYgY2htb2QgLVIgdStyd3ggJHQwICYmIHJtIC1yZiAkdDAgJiYgZXhpdCAkc3RhdHVzJyAwCisrdHJhcCAnKGV4aXQgJD8pOyBleGl0ICQ/JyAxIDIgMTMgMTUKKysKKytmcmFtZXdvcmtfZmFpbHVyZT0wCisrbWtkaXIgLXAgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrY2QgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrbWtkaXIgc3ViZGlyIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKyt0b3VjaCBzdWJkaXIvYiB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrdG91Y2ggc3ViZGlyL2EgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorKworK2lmIHRlc3QgJGZyYW1ld29ya19mYWlsdXJlID0gMTsgdGhlbgorKyAgZWNobyAiJDA6IGZhaWx1cmUgaW4gdGVzdGluZyBmcmFtZXdvcmsiIDE+JjIKKysgIChleGl0IDEpOyBleGl0IDEKKytmaQorKworK2ZhaWw9MAorKworKyMgQ29yZXV0aWxzIDYuOCBhbmQgNi45IHdvdWxkIG91dHB1dCB0aGlzIGluIHRoZSB3cm9uZyBvcmRlci4KKytscyAteCBzdWJkaXIgPiBvdXQgfHwgZmFpbD0xCisrbHMgLXJ4IHN1YmRpciA+PiBvdXQgfHwgZmFpbD0xCisrY2F0IDw8XEVPRiA+IGV4cCB8fCBmYWlsPTEKKythICBiCisrYiAgYQorK0VPRgorKworK2NtcCBvdXQgZXhwIHx8IGZhaWw9MQorK3Rlc3QgJGZhaWwgPSAxICYmIGRpZmYgb3V0IGV4cCAyPiAvZGV2L251bGwKKysKKysoZXhpdCAkZmFpbCk7IGV4aXQgJGZhaWwKKy0tLSBjb3JldXRpbHMtNi45L05FV1MubHMteAkyMDA3LTAzLTIyIDIxOjE5OjQ1LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjkvTkVXUwkyMDA3LTA2LTEzIDE0OjI4OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDYgKzEzLDExIEBACisgICBVc2luZyBwciAtbSAtcyAoaS5lLiBtZXJnaW5nIGZpbGVzLCB3aXRoIFRBQiBhcyB0aGUgb3V0cHV0IHNlcGFyYXRvcikKKyAgIG5vIGxvbmdlciBpbnNlcnRzIGV4dHJhbmVvdXMgc3BhY2VzIGJldHdlZW4gb3V0cHV0IGNvbHVtbnMuCisgCisrKiogQnVnIGZpeGVzCisrCisrICBscyAteCBESVIgd291bGQgc29tZXRpbWVzIG91dHB1dCB0aGUgd3Jvbmcgc3RyaW5nIGluIHBsYWNlIG9mIHRoZQorKyAgZmlyc3QgZW50cnkuICBbaW50cm9kdWNlZCBpbiBjb3JldXRpbHMtNi44XQorKworIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgNi44ICgyMDA3LTAyLTI0KSBbbm90LXVuc3RhYmxlXQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODA3NGMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gY29yZXV0aWxzLTUuMi4xL3NyYy93aG8uYy5vdmVyZmxvdwkyMDA1LTA1LTI1IDA5OjU5OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy01LjIuMS9zcmMvd2hvLmMJMjAwNS0wNS0yNSAxMDowMDozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC03NSw3ICs3NSw3IEBACisgIyBkZWZpbmUgTkVXX1RJTUUgMAorICNlbmRpZgorIAorLSNkZWZpbmUgSURMRVNUUl9MRU4gNgorKyNkZWZpbmUgSURMRVNUUl9MRU4gMTAKKyAKKyAjaWYgSEFWRV9TVFJVQ1RfWFRNUF9VVF9QSUQKKyAjIGRlZmluZSBQSURTVFJfREVDTF9BTkRfSU5JVChWYXIsIFV0bXBfZW50KSBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3MzBkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuYWM6NDA6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1saW51eC9jb3JldXRpbHMtbmF0aXZlLTYuOS1yMi9jb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNDoxMzg6IGdsX0NIRUNLX0FMTF9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LWxpbnV4L2NvcmV1dGlscy1uYXRpdmUtNi45LXIyL2NvcmV1dGlscy02LjkvbTQvam0tbWFjcm9zLm00OjI0OiBjb3JldXRpbHNfTUFDUk9TIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjQwOiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb3JldXRpbHMtNi45Lm9yaWcvbTQvam0tbWFjcm9zLm00CisrKysgY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKK0BAIC0xNDIsMTEgKzE0Miw2IEBAIEFDX0RFRlVOKFtnbF9DSEVDS19BTExfVFlQRVNdLAorICAgZG5sIHdoZXRoZXIgZnVuY3Rpb25zIGFuZCBoZWFkZXJzIGFyZSBhdmFpbGFibGUsIHdoZXRoZXIgdGhleSB3b3JrLCBldGMuCisgICBBQ19SRVFVSVJFKFtBQ19TWVNfTEFSR0VGSUxFXSkKKyAKKy0gIGRubCBUaGlzIHRlc3QgbXVzdCBwcmVjZWRlIHRlc3RzIG9mIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcyBsaWtlCistICBkbmwgdGhhdCBmb3IgdGhlIGlubGluZSBrZXl3b3JkLCBzaW5jZSBpdCBtYXkgY2hhbmdlIHRoZSBkZWdyZWUgdG8KKy0gIGRubCB3aGljaCB0aGUgY29tcGlsZXIgc3VwcG9ydHMgc3VjaCBmZWF0dXJlcy4KKy0gIEFDX1JFUVVJUkUoW0FNX0NfUFJPVE9UWVBFU10pCistCisgICBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyAgIEFDX1JFUVVJUkUoW0FDX0NfQklHRU5ESUFOXSkKKyAgIEFDX1JFUVVJUkUoW0FDX0NfVk9MQVRJTEVdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2ZpeF9mb3JfbWFucGFnZV9idWlsZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGQ2MDBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVXNlIG5hdGl2ZSBjb3JldXRpbHMgYmluYXJpZXMgdG8gYnVpbGQgbWFucGFnZXMgaW4gY3Jvc3MgZW52aXJvbm1lbnQuCitUaGlzIGF2b2lkcyBtYW4gcGFnZSBidWlsZCBpc3N1ZXMgbGlrZSB0aGlzOgorCit8IE1ha2luZyBhbGwgaW4gbWFuCit8IG1ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2NvcmV1dGlscy02LjktcjAvY29yZXV0aWxzLTYuOS9tYW4nCit8IFVwZGF0aW5nIG1hbiBwYWdlIGN1dC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGRpci4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGV4cGFuZC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGZvbGQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBpbnN0YWxsLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugam9pbi4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHByLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgbHMuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBzb3J0LjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdW5leHBhbmQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSB1bmlxLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugd2hvLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdmRpci4xCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGRpci50ZC9kaXIKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gY3V0LnRkL2N1dAorfCBtYWtlWzFdOiAqKiogW2Rpci4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gZm9sZC50ZC9mb2xkCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGluc3RhbGwudGQvaW5zdGFsbAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBleHBhbmQudGQvZXhwYW5kCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGpvaW4udGQvam9pbgorfCBtYWtlWzFdOiAqKiogW2N1dC4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFtmb2xkLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW2luc3RhbGwuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHNvcnQudGQvc29ydAorfCBtYWtlWzFdOiAqKiogW2V4cGFuZC4xXSBFcnJvciAxMjYKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gcHIudGQvcHIKK3wgbWFrZVsxXTogKioqIFtqb2luLjFdIEVycm9yIDEyNgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBscy50ZC9scworfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmV4cGFuZC50ZC91bmV4cGFuZAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmlxLnRkL3VuaXEKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gd2hvLnRkL3dobworfCBtYWtlWzFdOiAqKiogW3NvcnQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbcHIuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHZkaXIudGQvdmRpcgorfCBtYWtlWzFdOiAqKiogW2xzLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3VuaXEuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbdW5leHBhbmQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbd2hvLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3ZkaXIuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvY29yZXV0aWxzLTYuOS1yMC9jb3JldXRpbHMtNi45L21hbicKK3wgbWFrZTogKioqIFthbGwtcmVjdXJzaXZlXSBFcnJvciAxCit8IEZBVEFMOiBvZV9ydW5tYWtlIGZhaWxlZAorfCBFUlJPUjogRnVuY3Rpb24gJ2RvX2NvbXBpbGUnIGZhaWxlZCAoc2VlIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9jb3JldXRpbHMtNi45LXIwL3RlbXAvbG9nLmRvX2NvbXBpbGUuMTI3ODAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pCitOT1RFOiBwYWNrYWdlIGNvcmV1dGlscy02LjktcjA6IHRhc2sgZG9fY29tcGlsZTogRmFpbGVkCitFUlJPUjogVGFzayA4ICgvaG9tZS9uaXRpbi9wcmovcG9reS5naXQvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIsIGRvX2NvbXBpbGUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKKworCitUaGlzIHBhdGNoIGlzIG1hZGUgZm9yIGdwbHYyIGNvcmV1dGlscyB0aGUgcmVjaXBlCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wMy8xNworCitJbmRleDogbWFuL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9tYW4ub3JpZy9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMTY3LDcgKzE2Nyw3IEBAIG1hcHBlZF9uYW1lID0gYGVjaG8gJCp8c2VkICdzL2luc3RhbGwvZ2kKKyAJICAgICAgICAgICAgJChQRVJMKSAtLSAkKHNyY2RpcikvaGVscDJtYW4JCVwKKyAJICAgICAgICAgICAgIC0tc291cmNlPSckKFBBQ0tBR0VfU1RSSU5HKScJCVwKKyAJICAgICAgICAgICAgIC0taW5jbHVkZT0kKHNyY2RpcikvJCoueAkJCVwKKy0JICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICR0LyQqOwkJCVwKKysJICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICQqOwkJCVwKKyAJICAgICAgIH0JCQkJCQlcCisgCSAgICAmJiBzZWQgJ3N8JCpcLnRkL3x8ZycgJHQvJEAgPiAkQAkJCVwKKyAJICAgICYmIGNobW9kIGEtdyAkQAkJCQkJXAorSW5kZXg6IG1hbi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbWFuLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBiL21hbi9NYWtlZmlsZS5pbgorQEAgLTg2NSw3ICs4NjUsNyBAQCB5ZXMuMToJCSQoY29tbW9uX2RlcCkJJChzcmNkaXIpL3llcy54CQkuCisgCSAgICAgICAgICAgICQoUEVSTCkgLS0gJChzcmNkaXIpL2hlbHAybWFuCQlcCisgCSAgICAgICAgICAgICAtLXNvdXJjZT0nJChQQUNLQUdFX1NUUklORyknCQlcCisgCSAgICAgICAgICAgICAtLWluY2x1ZGU9JChzcmNkaXIpLyQqLngJCQlcCistCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkdC8kKjsJCQlcCisrCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkKjsJCQlcCisgCSAgICAgICB9CQkJCQkJXAorIAkgICAgJiYgc2VkICdzfCQqXC50ZC98fGcnICR0LyRAID4gJEAJCQlcCisgCSAgICAmJiBjaG1vZCBhLXcgJEAJCQkJCVwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZnV0aW1lbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTU5MGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgY29yZXV0aWxzIHVzZXMgZ251bGliIHdoaWNoIGNvbmZsaWN0cyB3aXRoIG5ld2VyIGxpYmMgaGVhZGVyIG9uIGZ1dGltZW5zCisjIHRoaXMgcGF0Y2ggc2ltcGx5IHJlbmFtZXMgY29yZXV0aWxzIGZ1dGltZXMgdG8gYXZvaWQgY29uZmxpY3Rpb24KKyMKKyMgU2lnbmVkLW9mZi1ieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKK2RpZmYgLS1naXQgYS9saWIvdXRpbWVucy5jIGIvbGliL3V0aW1lbnMuYworaW5kZXggNzFiYzUxMC4uYWU4NzBiOCAxMDA2NDQKKy0tLSBhL2xpYi91dGltZW5zLmMKKysrKyBiL2xpYi91dGltZW5zLmMKK0BAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCB1dGltYnVmCisgICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgKHNldHRpbmcgZXJybm8pIG9uIGZhaWx1cmUuICAqLworIAorIGludAorLWZ1dGltZW5zIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKytmdXRpbWVuc19jb3JldXRpbHMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorIAkgIGNoYXIgY29uc3QgKmZpbGUsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc3BlY1syXSkKKyB7CisgICAvKiBTb21lIExpbnV4LWJhc2VkIE5GUyBjbGllbnRzIGFyZSBidWdneSwgYW5kIG1pc2hhbmRsZSB0aW1lIHN0YW1wcworQEAgLTE4NSw1ICsxODUsNSBAQCBmdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisgaW50CisgdXRpbWVucyAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKy0gIHJldHVybiBmdXRpbWVucyAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKysgIHJldHVybiBmdXRpbWVuc19jb3JldXRpbHMgKC0xLCBmaWxlLCB0aW1lc3BlYyk7CisgfQorZGlmZiAtLWdpdCBhL2xpYi91dGltZW5zLmggYi9saWIvdXRpbWVucy5oCitpbmRleCAwMDk3YWFhLi4xM2ZjNDVhIDEwMDY0NAorLS0tIGEvbGliL3V0aW1lbnMuaAorKysrIGIvbGliL3V0aW1lbnMuaAorQEAgLTEsMyArMSwzIEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKy1pbnQgZnV0aW1lbnMgKGludCwgY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKKytpbnQgZnV0aW1lbnNfY29yZXV0aWxzIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisgaW50IHV0aW1lbnMgKGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuYyBiL3NyYy9jb3B5LmMKK2luZGV4IDRiZGI3NWMuLjA0NjM0ZjEgMTAwNjQ0CistLS0gYS9zcmMvY29weS5jCisrKysgYi9zcmMvY29weS5jCitAQCAtNTE4LDcgKzUxOCw3IEBAIGNvcHlfcmVnIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgICAgICAgdGltZXNwZWNbMF0gPSBnZXRfc3RhdF9hdGltZSAoc3JjX3NiKTsKKyAgICAgICB0aW1lc3BlY1sxXSA9IGdldF9zdGF0X210aW1lIChzcmNfc2IpOworIAorLSAgICAgIGlmIChmdXRpbWVucyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisrICAgICAgaWYgKGZ1dGltZW5zX2NvcmV1dGlscyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIF8oInByZXNlcnZpbmcgdGltZXMgZm9yICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworIAkgIGlmICh4LT5yZXF1aXJlX3ByZXNlcnZlKQorZGlmZiAtLWdpdCBhL3NyYy90b3VjaC5jIGIvc3JjL3RvdWNoLmMKK2luZGV4IGE3OWMyNmQuLjZlZjMxN2QgMTAwNjQ0CistLS0gYS9zcmMvdG91Y2guYworKysrIGIvc3JjL3RvdWNoLmMKK0BAIC0xODIsNyArMTgyLDcgQEAgdG91Y2ggKGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgdCA9IHRpbWVzcGVjOworICAgICB9CisgCistICBvayA9IChmdXRpbWVucyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKysgIG9rID0gKGZ1dGltZW5zX2NvcmV1dGlscyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKyAKKyAgIGlmIChmZCA9PSBTVERJTl9GSUxFTk8pCisgICAgIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9nbnVsaWJfbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNTU1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgcmVtb3ZlIHRoZSBsaW5lIHRvIGNhdXNlIHJlY3Vyc2l2ZSBpbmNsdXNpb24gZXJyb3IgZnJvbSBhdXRvcmVjb25mLCBzaWNuZQorIyBuZXdlciBhdXRvY29uZiBoYXMgaW5jbHVkZWQgdGhpcyBkZWZpbml0aW9uLiBTaW1wbHkgcmVuYW1lIGl0IGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy5tNCBiL2V4dGVuc2lvbnMubTQKK2luZGV4IDE0M2E5ZTUuLmY2NTU4ZjEgMTAwNjQ0CistLS0gYS9tNC9leHRlbnNpb25zLm00CisrKysgYi9tNC9leHRlbnNpb25zLm00CitAQCAtMTYsNyArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorK0FDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNfRFVNTVldLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorICAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9tYW4tdG91Y2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyY2I5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgbWFuIHBhZ2UgZm9yICd0b3VjaCcgaXMgZ2VuZXJhdGVkIGRpZmZlcmVudGx5IGZyb20gb3RoZXJzLiBBbGwgb3RoZXIgdXRpbGl0aWVzCisjIGFyZSBwcm92aWRlZCBzdGF0aWMgbWFuIHNvdXJjZSBmaWxlcywgd2hpbGUgZm9yICd0b3VjaCcgaXQgcmVxdWlyZXMgaGVscDJtYW4KKyMgdG8gaW52b2tlICJ0b3VjaCAtLWhlbHAiIGFuZCB0aGVuIGNvbnZlcnQgdGhlIG91dHB1dCBpbnRvIHRoZSBtYW51YWwuIFNpbmNlIHRvdWNoCisjIGlzIHdpdGggdGFyZ2V0IGZvcm1hdCB3aGljaCBjYW4ndCBiZSBpbnZva2VkIG9uIGJ1aWxkIHN5c3RlbSwgZGlzYWJsZSBidWlsZGluZworIyAndG91Y2gnIG1hbiBwYWdlIGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmFtIGIvbWFuL01ha2VmaWxlLmFtCitpbmRleCAzMmRmOWQxLi4zN2IwOWUzIDEwMDY0NAorLS0tIGEvbWFuL01ha2VmaWxlLmFtCisrKysgYi9tYW4vTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGRpc3RfbWFuX01BTlMgPSBcCisgICBwYXN0ZS4xIHBhdGhjaGsuMSBwci4xIHByaW50ZW52LjEgcHJpbnRmLjEgcHR4LjEgcHdkLjEgcmVhZGxpbmsuMSBcCisgICBybS4xIHJtZGlyLjEgc2VxLjEgc2hhMXN1bS4xIHNoYTIyNHN1bS4xIHNoYTI1NnN1bS4xIHNoYTM4NHN1bS4xIHNoYTUxMnN1bS4xIFwKKyAgIHNocmVkLjEgc2h1Zi4xIHNsZWVwLjEgc29ydC4xIHNwbGl0LjEgc3RhdC4xIFwKKy0gIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdG91Y2guMSB0ci4xIHRydWUuMSB0c29ydC4xIFwKKysgIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdHIuMSB0cnVlLjEgdHNvcnQuMSBcCisgICB0dHkuMSB1bmV4cGFuZC4xIHVuaXEuMSB1bmxpbmsuMSB2ZGlyLjEgd2MuMSBcCisgICB3aG9hbWkuMSB5ZXMuMSAkKE1BTikKKyBvcHRpb25hbF9tYW5zID0gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9maXgtc2VsaW51eC1mbGFzay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDFhZTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBhMWQzNjA1MDlmYTNhNGFmZjU3ZWVkY2Q1MjhjYzAzNDdhODc1MzFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE2IFNlcCAyMDE0IDAxOjU5OjA4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudWxpYi1jb21wLm00OiBzZWxpbnV4L2ZsYXNrLmggc2hvdWxkIHJlc3BlY3QgdG8KKyB3aXRoX3NlbGludXgKKworRml4ZWQgd2hlbiBidWlsZCB3aXRoIG1ldGEtc2VsaW51eCBldmVuIHdoZW4gLS13aXRob3V0LXNlbGludXg6CitydW5jb24uYzo0OToyODogZmF0YWwgZXJyb3I6IHNlbGludXgvZmxhc2suaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICMgaW5jbHVkZSA8c2VsaW51eC9mbGFzay5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK2NvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2dudWxpYi1jb21wLm00IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbTQvZ251bGliLWNvbXAubTQgYi9tNC9nbnVsaWItY29tcC5tNAoraW5kZXggNDcyZDNhMC4uNWYwOTczNCAxMDA2NDQKKy0tLSBhL200L2dudWxpYi1jb21wLm00CisrKysgYi9tNC9nbnVsaWItY29tcC5tNAorQEAgLTE3MzAsMTEgKzE3MzAsMTEgQEAgQUNfREVGVU4oW2dsX0lOSVRdLAorICAgICBBQ19MSUJPQkooW3NlbGVjdF0pCisgICBmaQorICAgZ2xfU1lTX1NFTEVDVF9NT0RVTEVfSU5ESUNBVE9SKFtzZWxlY3RdKQorLSAgQUNfQ0hFQ0tfSEVBREVSUyhbc2VsaW51eC9mbGFzay5oXSkKKyAgIEFDX0xJQk9CSihbc2VsaW51eC1hdF0pCisgICBnbF9IRUFERVJTX1NFTElOVVhfU0VMSU5VWF9ICisgICBnbF9IRUFERVJTX1NFTElOVVhfQ09OVEVYVF9ICisgICBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiAhPSBubyAmJiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3NlbGludXhfc2VsaW51eF9oIiA9IHllczsgdGhlbgorKyAgICBBQ19DSEVDS19IRUFERVJTKFtzZWxpbnV4L2ZsYXNrLmhdKQorICAgICBBQ19MSUJPQkooW2dldGZpbGVjb25dKQorICAgZmkKKyAgIGdsX1NFUlZFTlQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L21hbi1kZWNvdXBsZS1tYW5wYWdlcy1mcm9tLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODk2YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGI0ZDI1ODYyOWYwOTAwNjY3ODNjM2I0YzkxYjQwZjYzYjlkMGEyOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgOCBGZWIgMjAxNSAxNjo1MTo1NyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBtYW46IGRlY291cGxlIG1hbnBhZ2VzIGZyb20gYnVpbGQKKworVGhlIHVzZSBvZiAiaGVscDJtYW4iIGRvZXNuJ3Qgd29yayBhdCBhbGwgZm9yIGNyb3NzIGNvbXBpbGUsIGluCithZGRpdGlvbiB0byB0aGUgZXh0cmEgcmVxdWlyZW1lbnQgb2YgcGVybCBpdCBhZGRzLgorCitKdXN0IGRlY291cGxlIHRoZSBtYW5wYWdlcyBmcm9tIHRoZSBidWlsZCBpbiBvcmRlciB0byBwYXZlIHRoZSB3YXkgZm9yCitpbXBvcnRpbmcgcHJlYnVpbHQgbWFucGFnZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIGNyb3NzIGJ1aWxkIHNpdHVhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBkb2Vzbid0IGNhcmUgYWJvdXQgeC1jb21waWxlIGNhc2UuXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBmYjRhZjI3Li43NTc2YjJjIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMjE0LDUgKzIxNCw0IEBAIEFNX0NQUEZMQUdTID0gLUlsaWIgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSXNyYyAtSSQodG9wX3NyY2Rpcikvc3JjCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2xpYi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvbG9jYWwubWsKKyBpbmNsdWRlICQodG9wX3NyY2RpcikvZG9jL2xvY2FsLm1rCistaW5jbHVkZSAkKHRvcF9zcmNkaXIpL21hbi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS90ZXN0cy9sb2NhbC5taworLS0gCisyLjIuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY4YTU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitXZSBoYXZlIHByb2JsZW0gdXNpbmcgaGFyZGNvZGVkIGRpcmVjdG9yaWVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCit3aGljaCB3aWxsIGJlIGNoZWNrZWQgZm9yIGNyb3NzIGJ1aWxkcy4gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaAoraXMgdmFsaWQgZm9yIEFJWCBvbmx5LiBXZSBkbyBub3QgaGF2ZSBBSVggYXMgb25lIG9mIG91ciBzdXBwb3J0ZWQKK2J1aWxkIGhvc3Qgb3IgdGFyZ2V0LiBUaGVyZWZvcmUgd2UgZ2V0IHJpZCBvZiB0aGUgaGFyZGNvZGVkIHBhdGhzCithbmQgbWFrZSBsaWZlIGVhc2llciBmb3IgY3Jvc3MgY29tcGlsYXRpb24gcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtVcHN0cmVhbSBkb2VzIGNhcmUgZm9yIEFJWCB3aGlsZSB3ZSBtYXkgbm90XQorCitJbmRleDogY29yZXV0aWxzLTguMTQvbTQvZ2V0bG9hZGF2Zy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvcmV1dGlscy04LjE0Lm9yaWcvbTQvZ2V0bG9hZGF2Zy5tNAkyMDExLTA5LTE5IDA4OjA5OjI0LjAwMDAwMDAwMCAtMDcwMAorKysrIGNvcmV1dGlscy04LjE0L200L2dldGxvYWRhdmcubTQJMjAxMS0xMC0xOSAyMTo0MjowMC4zODU1MzMzNTcgLTA3MDAKK0BAIC00MSwxNiArNDEsNiBAQAorICAgICAgICBbTElCUz0iLWx1dGlsICRMSUJTIiBnbF9mdW5jX2dldGxvYWRhdmdfZG9uZT15ZXNdKQorICAgIGZpCisgCistICAgaWYgdGVzdCAkZ2xfZnVuY19nZXRsb2FkYXZnX2RvbmUgPSBubzsgdGhlbgorLSAgICAgIyBUaGVyZSBpcyBhIGNvbW1vbmx5IGF2YWlsYWJsZSBsaWJyYXJ5IGZvciBSUy82MDAwIEFJWC4KKy0gICAgICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorLSAgICAgZ2xfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTCistICAgICBMSUJTPSItTC91c3IvbG9jYWwvbGliICRMSUJTIgorLSAgICAgQUNfQ0hFQ0tfTElCKFtnZXRsb2FkYXZnXSwgW2dldGxvYWRhdmddLAorLSAgICAgICAgICAgICAgICAgIFtMSUJTPSItbGdldGxvYWRhdmcgJExJQlMiIGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lPXllc10sCistICAgICAgICAgICAgICAgICAgW0xJQlM9JGdsX2dldGxvYWRhdmdfTElCU10pCistICAgZmkKKy0KKyAgICAjIFNldCB1cCB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgorICAgIGlmIHRlc3QgJGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lID0gbm87IHRoZW4KKyAgICAgIEhBVkVfR0VUTE9BREFWRz0wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmYxZDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJUaGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgbWFuaXB1bGF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQ29yZSBVdGlsaXRpZXMgcHJvdmlkZSB0aGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgXAorbWFuaXB1bGF0aW9uIHV0aWxpdGllcy4gVGhlc2UgYXJlIHRoZSBjb3JlIHV0aWxpdGllcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgb24gXAorZXZlcnkgc3lzdGVtLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHMuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT0xNWVkNjBmNjdiMWRiNWZlZGQ1ZGJjMzdjZjhhOTU0MyIKK1BSID0gInI1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2dudWxpYl9tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdXRpbWVucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtbHMteC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtaTE4bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi10b3VjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzk2MDdkODQ5NWYxNmU5ODkwNmU3ZWQyZDk3NTFhMDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODljMjg5NWFkMTU3ZGU1MGU1MzI5OGIyMmQ5MWRiMTE2ZWU0ZTFkZDNmZGY0MDE5MjYwMjU0ZTJlMzE0OTdiMCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz15ZXMgXAorICAgICAgICAgICAgICAgICBhY19jdl9mdW5jX3N0cmNvbGxfd29ya3M9eWVzIgorCisjIGFjbCBpcyBub3QgYSBkZWZhdWx0IGZlYXR1cmUKKyMKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorCisjIHdpdGgsIHdpdGhvdXQsIGRlcGVuZHMsIHJkZXBlbmRzCisjCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD15ZXMsYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD1ubyxhY2wsIgorCisKKyMgWyBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYmFzZTY0IGJhc2VuYW1lIGNrc3VtIGNvbW0gY3NwbGl0IGN1dCBkaXIgZGlyY29sb3JzIGRpcm5hbWUgZHUgXAorICAgICAgICAgICAgICAgIGVudiBleHBhbmQgZXhwciBmYWN0b3IgZm10IGZvbGQgZ3JvdXBzIGhlYWQgaG9zdGlkIGlkIGluc3RhbGwgXAorICAgICAgICAgICAgICAgIGpvaW4gbGluayBsb2duYW1lIG1kNXN1bSBta2ZpZm8gbmljZSBubCBub2h1cCBvZCBwYXN0ZSBwYXRoY2hrIFwKKyAgICAgICAgICAgICAgICBwaW5reSBwciBwcmludGVudiBwcmludGYgcHR4IHJlYWRsaW5rIHNlcSBzaGExc3VtIHNoYTIyNHN1bSBzaGEyNTZzdW0gXAorICAgICAgICAgICAgICAgIHNoYTM4NHN1bSBzaGE1MTJzdW0gc2hyZWQgc2h1ZiBzb3J0IHNwbGl0IHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCBcCisgICAgICAgICAgICAgICAgdHIgdHNvcnQgdHR5IHVuZXhwYW5kIHVuaXEgdW5saW5rIHVzZXJzIHZkaXIgd2Mgd2hvIHdob2FtaSB5ZXMgdXB0aW1lIgorCisjIGhvc3RuYW1lIGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKK2Jhc2VfYmluZGlyX3Byb2dzID0gImNhdCBjaGdycCBjaG1vZCBjaG93biBjcCBkYXRlIGRkIGVjaG8gZmFsc2Uga2lsbCBsbiBscyBta2RpciBcCisgICAgICAgICAgICAgICAgICAgICBta25vZCBtdiBwd2Qgcm0gcm1kaXIgc2xlZXAgc3R0eSBzeW5jIHRvdWNoIHRydWUgdW5hbWUgaG9zdG5hbWUgc3RhdCIKKworc2JpbmRpcl9wcm9ncz0gImNocm9vdCIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSBjb3JldXRpbHMgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtzYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtzYmluZGlyfS8kaTsgZG9uZQorCisJIyBbIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSBbLmNvcmV1dGlscyB3aWxsIGNhdXNlIHRoZSBzZWQgc3R1ZmYKKwkjIGluIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgdG8gZmFpbCwgdGhlcmVmb3JlIHVzZSBsYnJhY2tldCAtIHRoZSBuYW1lIHVzZWQKKwkjIGZvciB0aGUgYWN0dWFsIHNvdXJjZSBmaWxlLgorCW12ICR7RH0ke2JpbmRpcn0vWyAke0R9JHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfQorCisJIyBOZXdlciB2ZXJzaW9ucyBvZiBjb3JldXRpbHMgZG8gbm90IGluY2x1ZGUgc3UsIHRvIG1pbWljIHRoaXMgYmVoYXZpb3IKKwkjIHdlIHNpbXBseSByZW1vdmUgaXQuCisJcm0gLWYgJHtEfSR7YmluZGlyfS9zdQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsYnJhY2tldCAke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtzYmluZGlyX3Byb2dzfSIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbdXB0aW1lXSA9ICIxMCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hvc3RuYW1lXSA9ICIxMCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xicmFja2V0XSA9ICIke2JpbmRpcn0vWyIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzguMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZWJjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiCkBAIC0wLDAgKzEsMTI3IEBACitTVU1NQVJZID0gIlRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBtYW5pcHVsYXRpb24gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBDb3JlIFV0aWxpdGllcyBwcm92aWRlIHRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBcCittYW5pcHVsYXRpb24gdXRpbGl0aWVzLiBUaGVzZSBhcmUgdGhlIGNvcmUgdXRpbGl0aWVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBleGlzdCBvbiBcCitldmVyeSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9scy5jO2JlZ2lubGluZT01O2VuZGxpbmU9MTY7bWQ1PTM4Yjc5Nzg1Y2E4ODUzN2I3NTg3MTc4MmEyYTNjNmI4IgorREVQRU5EUyA9ICJnbXAgbGliY2FwIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIueHo7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS1tYW4udGFyLnh6O25hbWU9bWFucGFnZXMgXAorICAgICAgICAgICBmaWxlOi8vbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VsaW51eC1mbGFzay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjQwZWZkYmNlODY1ZDI0NThkOGRhMGE5ZGNlZTdjMTZjIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYTJkNzUyODZhNGI5ZWYzYTEzMDM5YzJkYTM4NjhhNjFiZTRlZTlmMTdkOGFlMzgwYTM1YTk3ZTUwNjk3MjE3MCIKK1NSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICI3MjhhOTFhNWMxMDk1YTMzY2ZmYjk5NTliYjg5MTk2MyIKK1NSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICJjZjAzMzNiNWYxMzRhMzMxZTBiNDZlMmRkZjkwNjY2ZjhiZGMzMjgxYzFjYTJjN2NjYmI3NWI0Mzc1ODljZTM3IgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1nbXAiCitFWFRSQV9PRUNPTkZfY2xhc3MtdGFyZ2V0ID0gIi0tZW5hYmxlLWluc3RhbGwtcHJvZ3JhbT1hcmNoIC0tbGliZXhlY2Rpcj0ke2xpYmRpcn0iCisKKyMgYWNsIGlzIG5vdCBhIGRlZmF1bHQgZmVhdHVyZQorIworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICIiCisKKyMgd2l0aCwgd2l0aG91dCwgZGVwZW5kcywgcmRlcGVuZHMKKyMKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgorCisjIFsgZGYgbWt0ZW1wIGJhc2U2NCBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYXJjaCBiYXNlbmFtZSBjaGNvbiBja3N1bSBjb21tIGNzcGxpdCBjdXQgZGlyIGRpcmNvbG9ycyBkaXJuYW1lIGR1IFwKKyAgICAgICAgICAgICAgICBlbnYgZXhwYW5kIGV4cHIgZmFjdG9yIGZtdCBmb2xkIGdyb3VwcyBoZWFkIGhvc3RpZCBpZCBpbnN0YWxsIFwKKyAgICAgICAgICAgICAgICBqb2luIGxpbmsgbG9nbmFtZSBtZDVzdW0gbWtmaWZvIG5pY2Ugbmwgbm9odXAgbnByb2Mgb2QgcGFzdGUgcGF0aGNoayBcCisgICAgICAgICAgICAgICAgcGlua3kgcHIgcHJpbnRlbnYgcHJpbnRmIHB0eCByZWFkbGluayByZWFscGF0aCBydW5jb24gc2VxIHNoYTFzdW0gc2hhMjI0c3VtIHNoYTI1NnN1bSBcCisgICAgICAgICAgICAgICAgc2hhMzg0c3VtIHNoYTUxMnN1bSBzaHJlZCBzaHVmIHNvcnQgc3BsaXQgc3RkYnVmIHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCB0aW1lb3V0XAorICAgICAgICAgICAgICAgIHRyIHRydW5jYXRlIHRzb3J0IHR0eSB1bmV4cGFuZCB1bmlxIHVubGluayB1cHRpbWUgdXNlcnMgdmRpciB3YyB3aG8gd2hvYW1pIHllcyIKKworIyBob3N0bmFtZSBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiYXNlX2JpbmRpcl9wcm9ncyA9ICJjYXQgY2hncnAgY2htb2QgY2hvd24gY3AgZGF0ZSBkZCBlY2hvIGZhbHNlIGtpbGwgbG4gbHMgbWtkaXIgXAorICAgICAgICAgICAgICAgICAgICAgbWtub2QgbXYgcHdkIHJtIHJtZGlyIHNsZWVwIHN0dHkgc3luYyB0b3VjaCB0cnVlIHVuYW1lIHN0YXQiCisKK3NiaW5kaXJfcHJvZ3M9ICJjaHJvb3QiCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgY29yZXV0aWxzIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworIyBEZWFsIHdpdGggYSBzZXBhcmF0ZSBidWlsZGRpciBmYWlsdXJlIGlmIHNyYyBkb2Vzbid0IGV4aXN0IHdoZW4gY3JlYXRpbmcgdmVyc2lvbi5jL3ZlcnNpb24uaAorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke0J9L3NyYworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmb3IgaSBpbiBkZiBta3RlbXAgYmFzZTY0OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaS4ke0JQTn07IGRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlbICIke3NiaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7c2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7c2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwkjIFsgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIFsuY29yZXV0aWxzIHdpbGwgY2F1c2UgdGhlIHNlZCBzdHVmZgorCSMgaW4gdXBkYXRlLWFsdGVybmF0aXZlcyB0byBmYWlsLCB0aGVyZWZvcmUgdXNlIGxicmFja2V0IC0gdGhlIG5hbWUgdXNlZAorCSMgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGUuCisJbXYgJHtEfSR7YmluZGlyfS9bICR7RH0ke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59CisKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcworCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuMQorCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuMSAke1N9L21hbi8qLjEKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcyBkb24ndCBkbyBhIHNlcGFyYXRlIG1hbiBwYWdlIGZvciBbIHZzIHRlc3QuCisJIyBzZWUgY29tbWVudCBhYm92ZSByLmUuIHNlZCBhbmQgdXBkYXRlLWFsdGVybmF0aXZlcworCWNwIC1hICR7RH0ke21hbmRpcn0vbWFuMS90ZXN0LjEgJHtEfSR7bWFuZGlyfS9tYW4xL2xicmFja2V0LjEuJHtCUE59Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpeworCSMgcmVtb3ZlIGdyb3VwcyB0byBmaXggY29uZmxpY3Qgd2l0aCBzaGFkb3ctbmF0aXZlCisJcm0gLWYgJHtEfSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm91cHMKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImxicmFja2V0ICR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke3NiaW5kaXJfcHJvZ3N9IGJhc2U2NCBta3RlbXAgZGYiCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAiYmFzZTY0LjEgbWt0ZW1wLjEgZGYuMSBsYnJhY2tldC4xIGdyb3Vwcy4xIGtpbGwuMSB1cHRpbWUuMSBzdGF0LjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiYXNlNjRdID0gIiR7YmFzZV9iaW5kaXJ9L2Jhc2U2NCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtiYXNlNjRdID0gIiR7YmluZGlyfS9iYXNlNjQuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jhc2U2NC4xXSA9ICIke21hbmRpcn0vbWFuMS9iYXNlNjQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcF0gPSAiJHtiYXNlX2JpbmRpcn0vbWt0ZW1wIgorQUxURVJOQVRJVkVfVEFSR0VUW21rdGVtcF0gPSAiJHtiaW5kaXJ9L21rdGVtcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGZdID0gIiR7YmFzZV9iaW5kaXJ9L2RmIgorQUxURVJOQVRJVkVfVEFSR0VUW2RmXSA9ICIke2JpbmRpcn0vZGYuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2RmLjFdID0gIiR7bWFuZGlyfS9tYW4xL2RmLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L1siCitBTFRFUk5BVElWRV9UQVJHRVRbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGJyYWNrZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGJyYWNrZXQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3RhdC4xXSA9ICIke21hbmRpcn0vbWFuMS9zdGF0LjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy13YWl0L2RidXMtd2FpdF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWRjODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgdG9vbCB0byB3YWl0IGZvciBhIHNwZWNpZmljIHNpZ25hbCBvdmVyIERCdXMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9kYnVzLXdhaXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAiZGJ1cyIKKworU1JDUkVWID0gIjZjYzYwNzdhMzZmZTI2NDhhNWY5OTNmZTdjMTZjOTYzMmY5NDY1MTciCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQwMTMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJIaWdoIGxldmVsIGxhbmd1YWdlIChHTGliKSBiaW5kaW5nIGZvciBELUJ1cyIKK0RFU0NSSVBUSU9OID0gIkdMaWIgYmluZGluZ3MgZm9yIHRoZSBELUJ1cyBtZXNzYWdlIGJ1cyB0aGF0IGludGVncmF0ZSBcCit0aGUgRC1CdXMgbGlicmFyeSB3aXRoIHRoZSBHTGliIHRocmVhZCBhYnN0cmFjdGlvbiBhbmQgbWFpbiBsb29wLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2Y1YjNhMmY3MDgzNzUwZDUwNDMzMzExNGU3Mzg2NTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLWdsaWIuaDtiZWdpbmxpbmU9NztlbmRsaW5lPTIxO21kNT03NzU1YzlkN2FiY2NkNWRiZDI1YTZhOTc0NTM4YmIzYyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJleHBhdCBnbGliLTIuMCB2aXJ0dWFsL2xpYmludGwgZGJ1cy1nbGliLW5hdGl2ZSBkYnVzIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIGRidXMtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzLWdsaWIvZGJ1cy1nbGliLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1leGFtcGxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LWluc3RhbGwtbWFrZWZpbGUucGF0Y2ggXAorIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCisjZGVmYXVsdCBkaXNhYmxlIHJlZ3Jlc3Npb24gdGVzdHMsIHNvbWUgdW5pdCB0ZXN0IGNvZGUgaW4gbm9uIHRlc3RpbmcgY29kZQorI1BBQ0tBR0VDT05GSUdfcG4tJHtQTn0gPSAidGVzdHMiIGVuYWJsZSByZWdyZXNzaW9uIHRlc3RzIGxvY2FsLmNvbmYKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3Rlc3RzXSA9ICItLWVuYWJsZS10ZXN0cywsLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwgXAorICAgICAgICAgICAgICAgIC0td2l0aC1kYnVzLWJpbmRpbmctdG9vbD0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZGJ1cy1iaW5kaW5nLXRvb2wiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1iYXNoLWNvbXBsZXRpb24gJHtQTn0tdGVzdHMtZGJnICR7UE59LXRlc3RzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kL2RidXMtYmFzaC1jb21wbGV0aW9uLnNoIFwKKyAgICR7bGliZXhlY2Rpcn0vZGJ1cy1iYXNoLWNvbXBsZXRpb24taGVscGVyIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9kYnVzLWJpbmRpbmctdG9vbCIKKworUkRFUEVORFNfJHtQTn0tdGVzdHMgKz0gImRidXMteDExIgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMiCitGSUxFU18ke1BOfS10ZXN0cy1kYmcgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2NvcmUvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2ludGVyZmFjZXMvLmRlYnVnLyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi9uby1leGFtcGxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiNDk2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRGlzYWJsZSBjb21waWxpbmcgZXhhbXBsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtLm9yaWcJMjAwNi0wNy0yMyAxNjowNDo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtCTIwMDYtMDctMjMgMTY6MDQ6NTIuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gLiBleGFtcGxlcworK1NVQkRJUlMgPSAuCisgCisgSU5DTFVERVM9LUkkKHRvcF9zcmNkaXIpICQoREJVU19DRkxBR1MpICQoREJVU19HTElCX0NGTEFHUykgJChEQlVTX0dMSUJfVE9PTF9DRkxBR1MpIC1EREJVU19DT01QSUxBVElPTj0xIC1EREJVU19MT0NBTEVESVI9XCIkKHByZWZpeCkvQERBVEFESVJOQU1FQC9sb2NhbGVcIiAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi90ZXN0LWluc3RhbGwtbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YzgyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0NoYW5nZSBNYWtlZmlsZS5hbSB0byBpbnN0YWxsIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRlc3QgcGFja2FnZSBwdXJwb3NlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Rlc3Qgbm90IGluc3RhbGwgaXMgZm9yIHB1cnBvc2UgZnJvbSB1cHN0cmVhbV0KKworU2lnbmVkLW9mZi1ieTogWWFvIFpoYW8gPHlhby56aGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3QvTWFrZWZpbGUuYW0gICAgICAgICAgICB8IDMgKystCisgdGVzdC9jb3JlL01ha2VmaWxlLmFtICAgICAgIHwgMyArKy0KKyB0ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gfCAzICsrLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3QvTWFrZWZpbGUuYW0KK2luZGV4IDM3OWM4YzMuLjY1ODA5MjcgMTAwNjQ0CistLS0gYS90ZXN0L01ha2VmaWxlLmFtCisrKysgYi90ZXN0L01ha2VmaWxlLmFtCitAQCAtNDgsNyArNDgsOCBAQCBURVNUUyA9IFwKKyAJJCh0ZXN0X3NjcmlwdHMpIFwKKyAJJChOVUxMKQorIAorLW5vaW5zdF9QUk9HUkFNUyA9IFwKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMKKyt0ZXN0X1BST0dSQU1TID0gXAorIAkkKHRlc3RfcHJvZ3JhbXMpIFwKKyAJJCh0ZXN0X3JlbGF0ZWRfcHJvZ3JhbXMpIFwKKyAJJChOVUxMKQorZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbSBiL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQoraW5kZXggZTRiY2ViNC4uNTRiMDc3ZCAxMDA2NDQKKy0tLSBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQorKysrIGIvdGVzdC9jb3JlL01ha2VmaWxlLmFtCitAQCAtNjQsNyArNjQsOCBAQCBlbmRpZgorIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrdGVzdGRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VAL3Rlc3RzL2NvcmUKKyt0ZXN0X1BST0dSQU1TID0gXAorIAl0ZXN0LWRidXMtZ2xpYiBcCisgCXRlc3QtZXJyb3ItbWFwcGluZyBcCisgCXRlc3Qtc2VydmljZS1nbGliIFwKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gYi90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KK2luZGV4IGE5NGQwOGQuLjcwN2RjYWMgMTAwNjQ0CistLS0gYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbQorQEAgLTU3LDcgKzU3LDggQEAgaWYgREJVU19CVUlMRF9URVNUUworIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMvaW50ZXJmYWNlcworK3Rlc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyAKKyB0ZXN0X3NlcnZpY2VfU09VUkNFUyA9IFwKKyAJdGVzdC1pbnRlcmZhY2VzLmMgXAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliXzAuMTA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTI2M2MwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZGJ1cy1nbGliLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiNTQ5N2QyMDcwNzA5Y2Y3OTZmMTg3OGM3NWE3MmEwMzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmZjMWYxYTgyYmZjM2VjM2VjYWZlMDRkMGU4N2JhYjdlOTk5ZjUwZGNlNGY0YTM0ZDBiODljYWY2YmQ4MjFmNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtdGVzdF8xLjguMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0MDcwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiCkBAIC0wLDAgKzEsNjEgQEAKK1NVTU1BUlkgPSAiRC1CdXMgdGVzdCBwYWNrYWdlIChmb3IgRC1idXMgZnVuY3Rpb25hbGl0eSB0ZXN0aW5nIG9ubHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorCitERVBFTkRTID0gInB5dGhvbi1weWdvYmplY3QgZGJ1cyBkYnVzLWdsaWIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJtYWtlIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjQ5ODkwYmJhYmVkYWIzYTFjM2Y0ZjczYzdmZjhiMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM0ZmJmNGM2NDYyMWM5NmU4NzFkYTkxZDJiNzI5YTViMDA1MzZlMTE2ZDNjNDYxMmE0NjlkOTI0YjFiNzAzYSIKKworUz0iJHtXT1JLRElSfS9kYnVzLSR7UFZ9IgorRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZGJ1czoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHB0ZXN0CisKK0VYVFJBX09FQ09ORl9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0td2l0aC14JywgJy0td2l0aG91dC14JywgZCl9IgorRVhUUkFfT0VDT05GX1hfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsYXItdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2hlY2tzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hc3NlcnRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS12ZXJib3NlLW1vZGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy10ZXN0LWRpcj0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9YfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJY2FzZTE9InNoZWxsIHByaW50ZiByZWZzIHN5c2xvZyIKKwlmb3IgaSBpbiAke2Nhc2UxfTsgZG8gaW5zdGFsbCAke0J9L3Rlc3QvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJY2FzZTI9Im1hcnNoYWwgc3ludGF4IGNvcnJ1cHQgZGJ1cy1kYWVtb24gZGJ1cy1kYWVtb24tZWF2ZXNkcm9wIGxvb3BiYWNrIHJlbGF5IgorCWZvciBpIGluICR7Y2FzZTJ9OyBkbyBpbnN0YWxsICR7Qn0vdGVzdC8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwljYXNlMz0iYnVzIGJ1cy1zeXN0ZW0gYnVzLWxhdW5jaC1oZWxwZXIiCisJZm9yIGkgaW4gJHtjYXNlM307IGRvIGluc3RhbGwgJHtCfS9idXMvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJaW5zdGFsbCAke0J9L2RidXMvdGVzdC1kYnVzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtciAke0J9L3Rlc3QvZGF0YSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Cit9CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTcxMDgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMuaW5jCkBAIC0wLDAgKzEsMTcwIEBACitTVU1NQVJZID0gIkQtQnVzIG1lc3NhZ2UgYnVzIgorREVTQ1JJUFRJT04gPSAiRC1CdXMgaXMgYSBtZXNzYWdlIGJ1cyBzeXN0ZW0sIGEgc2ltcGxlIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHRhbGsgdG8gb25lIGFub3RoZXIuIEluIGFkZGl0aW9uIHRvIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uLCBELUJ1cyBoZWxwcyBjb29yZGluYXRlIHByb2Nlc3MgbGlmZWN5Y2xlOyBpdCBtYWtlcyBpdCBzaW1wbGUgYW5kIHJlbGlhYmxlIHRvIGNvZGUgYSBcInNpbmdsZSBpbnN0YW5jZVwiIGFwcGxpY2F0aW9uIG9yIGRhZW1vbiwgYW5kIHRvIGxhdW5jaCBhcHBsaWNhdGlvbnMgYW5kIGRhZW1vbnMgb24gZGVtYW5kIHdoZW4gdGhlaXIgc2VydmljZXMgYXJlIG5lZWRlZC4iCitIT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCitERVBFTkRTID0gImV4cGF0IHZpcnR1YWwvbGliaW50bCIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyR7UE59LXB0ZXN0JywgJycsIGQpfSIKK0FMTE9XX0VNUFRZX2RidXMtcHRlc3QgPSAiMSIKK1JERVBFTkRTX2RidXMtcHRlc3RfY2xhc3MtdGFyZ2V0ID0gImRidXMtdGVzdC1wdGVzdCIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vb3MtdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCisiCisKK2luaGVyaXQgdXNlcmFkZCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImRidXMtMSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAyIDUgMyAyIC4gc3RvcCAyMCAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbmV0ZGV2IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIG1lc3NhZ2VidXMiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uY29uZiAke3N5c2NvbmZkaXJ9L2RidXMtMS9zZXNzaW9uLmNvbmYiCisKK0RFQklBTk5BTUVfJHtQTn0gPSAiZGJ1cy0xIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tbGliIgorCitPTERQS0dOQU1FID0gImRidXMteDExIgorT0xEUEtHTkFNRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5CitSUFJPVklERVNfJHtQTn0gPSAiJHtPTERQS0dOQU1FfSIKK1JSRVBMQUNFU18ke1BOfSArPSAiJHtPTERQS0dOQU1FfSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2RidXMtZGFlbW9uKiBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy11dWlkZ2VuIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLWNsZWFudXAtc29ja2V0cyBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1zZW5kIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLW1vbml0b3IgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbGF1bmNoIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXJ1bi1zZXNzaW9uIFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vZGJ1cyogXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfJHtQTn0tbGliID0gIiR7UE59IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCisKK3BrZ19wb3N0aW5zdF9kYnVzKCkgeworCSMgSWYgYm90aCBzeXN0ZW1kIGFuZCBzeXN2aW5pdCBhcmUgZW5hYmxlZCwgbWFzayB0aGUgZGJ1cy0xIGluaXQgc2NyaXB0CisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZGJ1cy0xLnNlcnZpY2UKKwlmaQorCisJaWYgWyAteiAiJEQiIF0gJiYgWyAtZSAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdIDsgdGhlbgorCQkvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKwlmaQorfQorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1sLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhdWRpdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN5c3RlbWQgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1kYnVzLWdsaWIiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWRpc2FibGUtc2VsaW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworIyBXb3VsZCBsaWtlIHRvIC0tZW5hYmxlLXN5c3RlbWQgYnV0IHRoYXQncyBhIGNpcmN1bGFyIGJ1aWxkLWRlcGVuZGVuY3kgYmV0d2VlbgorIyBzeXN0ZW1kPC0+ZGJ1cworUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14IC0tZW5hYmxlLXgxMS1hdXRvbGF1bmNoLC0td2l0aG91dC14IC0tZGlzYWJsZS14MTEtYXV0b2xhdW5jaCwgdmlydHVhbC9saWJ4MTEgbGlic20iCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlzZWQgJ3M6QGJpbmRpckA6JHtiaW5kaXJ9OicgPCAke1dPUktESVJ9L2RidXMtMS5pbml0ID4ke1dPUktESVJ9L2RidXMtMS5pbml0LnNoCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RidXMtMS5pbml0LnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kYnVzLTEKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJZm9yIGkgaW4gZGJ1cy50YXJnZXQud2FudHMgc29ja2V0cy50YXJnZXQud2FudHMgbXVsdGktdXNlci50YXJnZXQud2FudHM7IGRvIFwKKwkJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJGk7IGRvbmUKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vYnVzL2RidXMuc2VydmljZSAke0J9L2J1cy9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJY2QgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGJ1cy50YXJnZXQud2FudHMvCisJCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kYnVzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAorCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc29ja2V0cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKKwkJbG4gLWZzIC4uL2RidXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9kYnVzLnNlcnZpY2UKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWVjaG8gImQgbWVzc2FnZWJ1cyBtZXNzYWdlYnVzIDA3NTUgJHtsb2NhbHN0YXRlZGlyfS9ydW4vZGJ1cyBub25lIiBcCisJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X2RidXMKKworCisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKKworCWNob3duIG1lc3NhZ2VidXM6bWVzc2FnZWJ1cyAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cworCisJY2hvd24gcm9vdDptZXNzYWdlYnVzICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKwljaG1vZCA0NzU1ICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKworCSMgUmVtb3ZlIFJlZCBIYXQgaW5pdHNjcmlwdAorCXJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYy5kCisKKwkjIFJlbW92ZSBlbXB0eSB0ZXN0ZXhlYyBkaXJlY3RvcnkgYXMgd2UgZG9uJ3QgYnVpbGQgdGVzdHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9kYnVzLTEuMC90ZXN0CisKKwkjIFJlbW92ZSAvdmFyL3J1biBhcyBpdCBpcyBjcmVhdGVkIG9uIHN0YXJ0dXAKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGZvciBkYnVzLWdsaWItbmF0aXZlIGludHJvc3BlY3Rpb24gZ2VuZXJhdGlvbgorCWluc3RhbGwgLWQgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy8KKwkjIE4uQi4gaXMgYmVsb3cgaW5zdGFsbCBhY3R1YWxseSByZXF1aXJlZD8KKwlpbnN0YWxsIC1tIDA2NDQgYnVzL3Nlc3Npb24uY29uZiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL3Nlc3Npb24uY29uZgorCisJIyBkYnVzLWdsaWItbmF0aXZlIGFuZCBkYnVzLWdsaWIgbmVlZCB0aGlzIHhtbCBmaWxlCisJLi9idXMvZGJ1cy1kYWVtb24gLS1pbnRyb3NwZWN0ID4gJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbAorCQorCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKKwkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAorCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KKwlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCisKKwkjIFJlbW92ZSAvdmFyL3J1biB0byBhdm9pZCBRQSBlcnJvcgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImJ1aWxkLWRlcHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjZkOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorRnJvbSBiOGY4NGJkMzk0ODVkMzk3NzYyNWM5YThiOGU4Y2ZmNWQyM2JlNTZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyNyBGZWIgMjAxNCAwOTowNTowMiArMDgwMAorU3ViamVjdDogW1BBVENIXSBkYnVzOiBjbGVhciBndWlkX2Zyb21fc2VydmVyIGlmIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQKKyBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworYnVzLXRlc3QgZGlzcGF0Y2ggdGVzdCBmYWlsZWQgd2l0aCBiZWxvdyBpbmZvcm1hdGlvbjoKKyAgICAuL2J1cy9idXMtdGVzdDogUnVubmluZyBtZXNzYWdlIGRpc3BhdGNoIHRlc3QKKyAgICBBY3RpdmF0aW5nIHNlcnZpY2UgbmFtZT0nb3JnLmZyZWVkZXNrdG9wLkRCdXMuVGVzdFN1aXRlRWNob1NlcnZpY2UnCisgICAgU3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZCBzZXJ2aWNlICdvcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVFY2hvU2VydmljZScKKyAgICA2MzYzOiBhc3NlcnRpb24gZmFpbGVkICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIgZmlsZSAiZGJ1cy1hdXRoLmMiIGxpbmUgMTU0NSBmdW5jdGlvbiBwcm9jZXNzX29rCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19wcmludF9iYWNrdHJhY2UrMHgyOSkgWzB4ODBjYjk2OV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX2Fib3J0KzB4MTQpIFsweDgwY2ZiNDRdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19yZWFsX2Fzc2VydCsweDUzKSBbMHg4MGI1MmMzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGUyNGRhXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfYXV0aF9kb193b3JrKzB4Mzg4KSBbMHg4MGUzODQ4XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFlYTQ5XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFmZmRlXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdHJhbnNwb3J0X2hhbmRsZV93YXRjaCsweGIxKSBbMHg4MGFkODQxXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfY29ubmVjdGlvbl9oYW5kbGVfd2F0Y2grMHgxMDQpIFsweDgwODkxNzRdCisgICAgICAuL2J1cy9idXMtdGVzdChkYnVzX3dhdGNoX2hhbmRsZSsweGQ4KSBbMHg4MGIxNWU4XQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfbG9vcF9pdGVyYXRlKzB4NGE5KSBbMHg4MGQxNTA5XQorICAgICAgLi9idXMvYnVzLXRlc3QoYnVzX3Rlc3RfcnVuX2NsaWVudHNfbG9vcCsweDVkKSBbMHg4MDgxMjlkXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZjYWIwXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZlMGNhXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZkYTZmXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdGVzdF9vb21faGFuZGxpbmcrMHgxOGMpIFsweDgwYjVjOGNdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNmY3MjNdCisgICAgICAuL2J1cy9idXMtdGVzdChidXNfZGlzcGF0Y2hfdGVzdCsweDNjKSBbMHg4MDcxYWFjXQorICAgICAgLi9idXMvYnVzLXRlc3QobWFpbisweDFiNykgWzB4ODA1YWNjN10KKyAgICAgIC9saWIvbGliYy5zby42KF9fbGliY19zdGFydF9tYWluKzB4ZjMpIFsweDQ1ZjkxOWIzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDVhZTM5XQorCitUaGUgc3RhY2sgaXMgYmVsb3c6CisgICAgIzAgIDB4ZmZmZmU0MjUgaW4gX19rZXJuZWxfdnN5c2NhbGwgKCkKKyAgICAjMSAgMHg0NWZhNjJkNiBpbiByYWlzZSAoKSBmcm9tIC9saWIvbGliYy5zby42CisgICAgIzIgIDB4NDVmYTk2NTMgaW4gYWJvcnQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgorICAgICMzICAweDA4MGNmYjY1IGluIF9kYnVzX2Fib3J0ICgpIGF0IGRidXMtc3lzZGVwcy5jOjk0CisgICAgIzQgIDB4MDgwYjUyYzMgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj0wLAorICAgICAgICBjb25kaXRpb25fdGV4dD1jb25kaXRpb25fdGV4dEBlbnRyeT0weDgxMTdhMzggIl9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyKSA9PSAwIiwKKyAgICAgICAgZmlsZT1maWxlQGVudHJ5PTB4ODExNzI3MyAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NSwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4ODExN2Y4ZSA8X19GVU5DVElPTl9fLjM0OTI+ICJwcm9jZXNzX29rIikKKyAgICAgICAgZGF0YT0weDgxNTcyOTApIGF0IGRidXMtY29ubmVjdGlvbi5jOjE1MTUKKyAgICAjMCAgMHgwMDAwMDAzM2ZlZTM1M2U5IGluIHJhaXNlICgpIGZyb20gL2xpYjY0L2xpYmMuc28uNgorICAgICMxICAweDAwMDAwMDMzZmVlMzg1MDggaW4gYWJvcnQgKCkgZnJvbSAvbGliNjQvbGliYy5zby42CisgICAgIzIgIDB4MDAwMDAwMDAwMDQ3ZDU4NSBpbiBfZGJ1c19hYm9ydCAoKSBhdCBkYnVzLXN5c2RlcHMuYzo5NAorICAgICMzICAweDAwMDAwMDAwMDA0NjY0ODYgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj08b3B0aW1pemVkIG91dD4sCisgICAgICAgIGNvbmRpdGlvbl90ZXh0PWNvbmRpdGlvbl90ZXh0QGVudHJ5PTB4NGMyOTg4ICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIsCisgICAgICAgIGZpbGU9ZmlsZUBlbnRyeT0weDRjMjFhNSAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NiwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4NGMyZmNlIDxfX0ZVTkNUSU9OX18uMzg0NT4gInByb2Nlc3Nfb2siKQorICAgICAgICBhdCBkYnVzLWludGVybmFscy5jOjkzMQorICAgICM0ICAweDAwMDAwMDAwMDA0OGQ0MjQgaW4gcHJvY2Vzc19vayAoYXJnc19mcm9tX29rPTB4N2ZmZmZmZmZlNDgwLAorICAgICAgICBhdXRoPTB4NmZmMzQwKSBhdCBkYnVzLWF1dGguYzoxNTQ2CisgICAgIzUgIGhhbmRsZV9jbGllbnRfc3RhdGVfd2FpdGluZ19mb3JfZGF0YSAoYXV0aD0weDZmZjM0MCwKKyAgICAgICAgY29tbWFuZD08b3B0aW1pemVkIG91dD4sIGFyZ3M9MHg3ZmZmZmZmZmU0ODApIGF0IGRidXMtYXV0aC5jOjE5OTYKKyAgICAjNiAgMHgwMDAwMDAwMDAwNDhlNzg5IGluIHByb2Nlc3NfY29tbWFuZCAoYXV0aD0weDZmZjM0MCkgYXQgZGJ1cy1hdXRoLmM6MjIwOAorICAgICM3ICBfZGJ1c19hdXRoX2RvX3dvcmsgKGF1dGg9MHg2ZmYzNDApIGF0IGRidXMtYXV0aC5jOjI0NTgKKyAgICAjOCAgMHgwMDAwMDAwMDAwNDYwOTFkIGluIGRvX2F1dGhlbnRpY2F0aW9uICgKKyAgICAgICAgdHJhbnNwb3J0PXRyYW5zcG9ydEBlbnRyeT0weDZmZmFhMCwgZG9fcmVhZGluZz1kb19yZWFkaW5nQGVudHJ5PTEsCisgICAgICAgIGRvX3dyaXRpbmc9ZG9fd3JpdGluZ0BlbnRyeT0wLAorICAgICAgICBhdXRoX2NvbXBsZXRlZD1hdXRoX2NvbXBsZXRlZEBlbnRyeT0weDdmZmZmZmZmZTU1YykKKyAgICAgICAgYXQgZGJ1cy10cmFuc3BvcnQtc29ja2V0LmM6NDQyCisgICAgIzkgIDB4MDAwMDAwMDAwMDQ2MWQwOCBpbiBzb2NrZXRfaGFuZGxlX3dhdGNoICh0cmFuc3BvcnQ9MHg2ZmZhYTAsCisgICAgICAgIHdhdGNoPTB4NmY0MTkwLCBmbGFncz0xKSBhdCBkYnVzLXRyYW5zcG9ydC1zb2NrZXQuYzo5MjEKKyAgICAjMTAgMHgwMDAwMDAwMDAwNDVmYTNhIGluIF9kYnVzX3RyYW5zcG9ydF9oYW5kbGVfd2F0Y2ggKHRyYW5zcG9ydD0weDZmZmFhMCwKKworT25jZSBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZCwgdGhpcyBmYWlsdXJlIHdpbGwgaGFwcGVuLCBzaW5jZQorYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBoYXMgYmVlbiBzZXQgdG8gc29tZSB2YWx1ZSBiZWZvcmUKK3NlbmRfbmVnb3RpYXRlX3VuaXhfZmQuIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQgZmFpbHVyZSB3aWxsIGxlYWQgdG8KK3RoaXMgYXV0aCBiZSBoYW5kbGVkIGJ5IHByb2Nlc3Nfb2sgYWdhaW4sIGJ1dCB0aGlzIGF1dGgtPmd1aWRfZnJvbV9zZXJ2ZXIKK2lzIG5vdCB6ZXJvLgorCitTbyB3ZSBzaG91bGQgY2xlYXIgYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBpZiBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBkYnVzL2RidXMtYXV0aC5jIHwgICAgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWF1dGguYyBiL2RidXMvZGJ1cy1hdXRoLmMKK2luZGV4IGQyYzM3YTcuLjM3YjQ1YzYgMTAwNjQ0CistLS0gYS9kYnVzL2RidXMtYXV0aC5jCisrKysgYi9kYnVzL2RidXMtYXV0aC5jCitAQCAtMTU3MSw4ICsxNTcxLDEzIEBAIHByb2Nlc3Nfb2soREJ1c0F1dGggKmF1dGgsCisgICBfZGJ1c192ZXJib3NlICgiR290IEdVSUQgJyVzJyBmcm9tIHRoZSBzZXJ2ZXJcbiIsCisgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIpKTsKKyAKKy0gIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKQorLSAgICByZXR1cm4gc2VuZF9uZWdvdGlhdGVfdW5peF9mZChhdXRoKTsKKysgIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKSB7CisrICAgICBpZiAoIXNlbmRfbmVnb3RpYXRlX3VuaXhfZmQoYXV0aCkpIHsKKysgICAgICAgICBfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlciwgMCk7CisrICAgICAgICAgcmV0dXJuIEZBTFNFOworKyAgICAgfQorKyAgICAgcmV0dXJuIFRSVUU7CisrICB9CisgCisgICBfZGJ1c192ZXJib3NlKCJOb3QgbmVnb3RpYXRpbmcgdW5peCBmZCBwYXNzaW5nLCBzaW5jZSBub3QgcG9zc2libGVcbiIpOworICAgcmV0dXJuIHNlbmRfYmVnaW4gKGF1dGgpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL2RidXMtMS5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYzg2MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdApAQCAtMCwwICsxLDEyMyBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgZGJ1cworIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDEKKyMgU2hvcnQtRGVzY3JpcHRpb246IEQtQnVzIHN5c3RlbXdpZGUgbWVzc2FnZSBidXMKKyMgRGVzY3JpcHRpb246ICAgICAgIEQtQnVzIGlzIGEgc2ltcGxlIGludGVycHJvY2VzcyBtZXNzYWdpbmcgc3lzdGVtLCB1c2VkCisjICAgICAgICAgICAgICAgICAgICBmb3Igc2VuZGluZyBtZXNzYWdlcyBiZXR3ZWVuIGFwcGxpY2F0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBEZWJpYW4gaW5pdC5kIHNjcmlwdCBmb3IgRC1CVVMKKyMgQ29weXJpZ2h0IMKpIDIwMDMgQ29saW4gV2FsdGVycyA8d2FsdGVyc0BkZWJpYW4ub3JnPgorCisjIHNldCAtZQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworREFFTU9OPUBiaW5kaXJAL2RidXMtZGFlbW9uCitOQU1FPWRidXMKK0RBRU1PTlVTRVI9bWVzc2FnZWJ1cyAgICAgICAgICAgIyBtdXN0IG1hdGNoIC9ldGMvZGJ1cy0xL3N5c3RlbS5jb25mCitQSURGSUxFPS92YXIvcnVuL21lc3NhZ2VidXMucGlkICMgbXVzdCBtYXRjaCAvZXRjL2RidXMtMS9zeXN0ZW0uY29uZgorVVVJRERJUj0vdmFyL2xpYi9kYnVzCitERVNDPSJzeXN0ZW0gbWVzc2FnZSBidXMiCitFVkVOVERJUj0vZXRjL2RidXMtMS9ldmVudC5kCisKK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworIyBTb3VyY2UgZGVmYXVsdHMgZmlsZTsgZWRpdCB0aGF0IGZpbGUgdG8gY29uZmlndXJlIHRoaXMgc2NyaXB0LgorRU5BQkxFRD0xCitQQVJBTVM9IiIKK2lmIFsgLWUgL2V0Yy9kZWZhdWx0L2RidXMgXTsgdGhlbgorICAuIC9ldGMvZGVmYXVsdC9kYnVzCitmaQorCit0ZXN0ICIkRU5BQkxFRCIgIT0gIjAiIHx8IGV4aXQgMAorCitzdGFydF9pdF91cCgpCit7CisgIG1rZGlyIC1wICJgZGlybmFtZSAkUElERklMRWAiCisgIGlmIFsgLWUgJFBJREZJTEUgXTsgdGhlbgorICAgIFBJRERJUj0vcHJvYy8kKGNhdCAkUElERklMRSkKKyAgICBpZiBbIC1kICR7UElERElSfSAtYSAgIiQocmVhZGxpbmsgLWYgJHtQSURESVJ9L2V4ZSkiID0gIiR7REFFTU9OfSIgXTsgdGhlbiAKKyAgICAgIGVjaG8gIiRERVNDIGFscmVhZHkgc3RhcnRlZDsgbm90IHN0YXJ0aW5nLiIKKyAgICBlbHNlCisgICAgICBlY2hvICJSZW1vdmluZyBzdGFsZSBQSUQgZmlsZSAkUElERklMRS4iCisgICAgICBybSAtZiAkUElERklMRQorICAgIGZpCisgIGZpCisKKyAgaWYgWyAhIC1kICRVVUlERElSIF07IHRoZW4KKyAgICBta2RpciAtcCAkVVVJRERJUgorICAgIGNob3duICREQUVNT05VU0VSICRVVUlERElSCisgICAgY2hncnAgJERBRU1PTlVTRVIgJFVVSURESVIKKyAgZmkKKyAKKyAgZGJ1cy11dWlkZ2VuIC0tZW5zdXJlICAKKworICBlY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorICBzdGFydC1zdG9wLWRhZW1vbiAtbyAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRQSURGSUxFIFwKKyAgICAtLXVzZXIgJERBRU1PTlVTRVIgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIGlmIFsgLWQgJEVWRU5URElSIF07IHRoZW4KKyAgICAgIHJ1bi1wYXJ0cyAtLWFyZz1zdGFydCAkRVZFTlRESVIKKyAgZmkKK30KKworc2h1dF9pdF9kb3duKCkKK3sKKyAgaWYgWyAtZCAkRVZFTlRESVIgXTsgdGhlbgorICAgICAgIyBUT0RPOiAtLXJldmVyc2Ugd2hlbiBidXN5Ym94IHN1cHBvcnRzIGl0CisgICAgICBydW4tcGFydHMgLS1hcmc9c3RvcCAkRVZFTlRESVIKKyAgZmkKKyAgZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKyAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLS1zdG9wICAtLXF1aWV0IC0tcGlkZmlsZSAkUElERklMRSBcCisgICAgLS11c2VyICREQUVNT05VU0VSCisgICMgV2Ugbm8gbG9uZ2VyIGluY2x1ZGUgdGhlc2UgYXJndW1lbnRzIHNvIHRoYXQgc3RhcnQtc3RvcC1kYWVtb24KKyAgIyBjYW4gZG8gaXRzIGpvYiBldmVuIGdpdmVuIHRoYXQgd2UgbWF5IGhhdmUgYmVlbiB1cGdyYWRlZC4KKyAgIyBXZSByZWx5IG9uIHRoZSBwaWRmaWxlIGJlaW5nIHNhbmVseSBtYW5hZ2VkCisgICMgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIHJtIC1mICRQSURGSUxFCit9CisKK3JlbG9hZF9pdCgpCit7CisgIGVjaG8gLW4gIlJlbG9hZGluZyAkREVTQyBjb25maWc6ICIKKyAgZGJ1cy1zZW5kIC0tcHJpbnQtcmVwbHkgLS1zeXN0ZW0gLS10eXBlPW1ldGhvZF9jYWxsIFwKKyAgICAgICAgICAgIC0tZGVzdD1vcmcuZnJlZWRlc2t0b3AuREJ1cyBcCisgICAgICAgICAgICAvIG9yZy5mcmVlZGVza3RvcC5EQnVzLlJlbG9hZENvbmZpZyA+IC9kZXYvbnVsbAorICAjIGhvcGVmdWxseSB0aGlzIGlzIGVub3VnaCB0aW1lIGZvciBkYnVzIHRvIHJlbG9hZCBpdCdzIGNvbmZpZyBmaWxlLgorICBlY2hvICJkb25lLiIKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIHN0YXJ0X2l0X3VwCisgIDs7CisgIHN0b3ApCisgICAgc2h1dF9pdF9kb3duCisgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgJERBRU1PTgorICAgIGV4aXQgJD8KKyAgOzsKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKyAgICByZWxvYWRfaXQKKyAgOzsKKyAgcmVzdGFydCkKKyAgICBzaHV0X2l0X2Rvd24KKyAgICBzbGVlcCAxCisgICAgc3RhcnRfaXRfdXAKKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvJE5BTUUge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8cmVsb2FkfGZvcmNlLXJlbG9hZH0iID4mMgorICAgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL29zLXRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YzI1N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK2RidXM6IHJlbW92ZSBidWlsZCBob3N0IHRlc3QgaW4gY29uZmlndXJlIHNjcmlwdAorCitUaGUgZGJ1cyBidWlsZCB0ZXN0cyB0aGUgYnVpbGQgaG9zdCB0byBkZXRlY3Qgd2hhdCBpbml0c2NyaXB0CitlbnZpcm9ubWVudCBpdCBleHBlY3RzLiAgUmVtb3ZlIHRoZSB0ZXN0IGFuZCBzZXQgaXQgdG8gInJlZGhhdCIKK3VuY29uZGl0aW9uYWxseSBhcyB0aGUgb2UtY29yZSBpbml0c2NyaXB0IGhhcyBhIHJlZGhhdC1zdHlsZSBwaWQgZmlsZQorcGF0aC4KKworU2lnbmVkLW9mZi1ieTogQW5keSBSb3NzIDxhbmR5LnJvc3NAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWRdCisKK2RpZmYgLXUgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTI4IDExOjIzOjQzLjA0MDYwOTg3NCAtMDcwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTItMDgtMjggMTE6NTQ6MjUuNjAyOTEzOTQ1IC0wNzAwCitAQCAtMTM0OCwxOSArMTM0OCw4IEBACisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0xJQkVYRUNESVIsICIkbGliZXhlY2RpciIpCisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0RBVEFESVIsICIkZGF0YWRpciIpCisgCistIyMjIyBDaGVjayBvdXIgb3BlcmF0aW5nIHN5c3RlbQorLW9wZXJhdGluZ19zeXN0ZW09dW5rbm93bgorLWlmIHRlc3QgLWYgL2V0Yy9yZWRoYXQtcmVsZWFzZSB8fCB0ZXN0IC1mICRFWFBBTkRFRF9TWVNDT05GRElSL3JlZGhhdC1yZWxlYXNlIDsgdGhlbgorLSAgIG9wZXJhdGluZ19zeXN0ZW09cmVkaGF0CistZmkKKy0KKy1pZiB0ZXN0IC1mIC9ldGMvc2xhY2t3YXJlLXZlcnNpb24gfHwgdGVzdCAtZiAkRVhQQU5ERURfU1lTQ09ORkRJUi9zbGFja3dhcmUtdmVyc2lvbiA7IHRoZW4KKy0gICBvcGVyYXRpbmdfc3lzdGVtPXNsYWNrd2FyZQorLWZpCistCistaWYgdGVzdCAtZiAvdXNyL2Jpbi9jeWd3aW4xLmRsbCB8fCB0ZXN0IC1mICRFWFBBTkRFRF9CSU5ESVIvY3lnd2luMS5kbGwgOyB0aGVuCistICAgb3BlcmF0aW5nX3N5c3RlbT1jeWd3aW4KKy1maQorKyMjIyMgQnVpbGQgaG9zdCB0ZXN0IHJlbW92ZWQgZnJvbSB1cHN0cmVhbSBjb2RlLCBvcGVuZW1iZWRkZWQgaW5pdHNjcmlwdCBpcyByZWRoYXQtbGlrZToKKytvcGVyYXRpbmdfc3lzdGVtPXJlZGhhdAorIAorICMjIyMgU29ydCBvdXQgaW5pdCBzY3JpcHRzCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9weXRob24tY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTQ0MDAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXaGVuIGJ1aWxkaW5nIHRoZSBkYnVzLXB0ZXN0IHBhY2thZ2UsIHdlIGhhdmUgdG8gZW5hYmxlIHB5dGhvbi4gIEhvd2V2ZXIKK2NoZWNraW5nIGlmIHRoZSBob3N0LXN5c3RlbSBweXRob24gaGFzIHRoZSBuZWNlc3NhcnkgbGlicmFyeSBpc24ndCB1c2VmdWwuCisKK0Rpc2FibGUgdGhlIHB5dGhvbiBtb2R1bGUgY2hlY2sgZm9yIGNyb3NzIGNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gZGJ1cy0xLjYuOC9jb25maWd1cmUuYWMub3JpZwkyMDEzLTA3LTExIDE0OjE1OjU4LjgzNDU1NDc5OSAtMDUwMAorKysrIGRidXMtMS42LjgvY29uZmlndXJlLmFjCTIwMTMtMDctMTEgMTQ6MTQ6NDAuOTY5NTU0ODQ4IC0wNTAwCitAQCAtMjU3LDEzICsyNTcsNiBAQAorICAgIyBmdWxsIHRlc3QgY292ZXJhZ2UgaXMgcmVxdWlyZWQsIFB5dGhvbiBpcyBhIGhhcmQgZGVwZW5kZW5jeQorICAgQUNfTVNHX05PVElDRShbRnVsbCB0ZXN0IGNvdmVyYWdlICgtLWVuYWJsZS10ZXN0cz15ZXMpIHJlcXVpcmVzIFB5dGhvbiwgZGJ1cy1weXRob24sIHB5Z29iamVjdF0pCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSkKKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIFB5dGhvbiBtb2R1bGVzIGZvciBmdWxsIHRlc3QgY292ZXJhZ2VdKQorLSAgaWYgIiRQWVRIT04iIC1jICJpbXBvcnQgZGJ1cywgZ29iamVjdCwgZGJ1cy5tYWlubG9vcC5nbGliIjsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIEFDX01TR19FUlJPUihbY2Fubm90IGltcG9ydCBkYnVzLCBnb2JqZWN0LCBkYnVzLm1haW5sb29wLmdsaWIgUHl0aG9uIG1vZHVsZXNdKQorLSAgZmkKKyBlbHNlCisgICAjIC0tZW5hYmxlLXRlc3RzIG5vdCBnaXZlbjogZG8gbm90IGFib3J0IGlmIFB5dGhvbiBpcyBtaXNzaW5nCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSwgW10sIFs6XSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNzJkMDgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitvdXRwdXQoKSB7CisgIGlmIFsgJD8gLWVxIDAgXQorICAgIHRoZW4gZWNobyAiUEFTUzogJGkiCisgICAgZWxzZSBlY2hvICJGQUlMOiAkaSIKKyAgZmkKK30KKworZm9yIGkgaW4gYGxzIHRlc3QvdGVzdC0qYDsgZG8gLi8kaSAuL3Rlc3QvZGF0YSBEQlVTX1RFU1RfSE9NRURJUj0uL3Rlc3QgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy90bXBkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy90bXBkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwODZlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3RtcGRpci5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDUxMDVmZWRkN2ZhMTNkYWRkMmQwZDg2NGZiNzc4NzNiODNiNzlhNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVGh1LCAyMyBKdW4gMjAxMSAxMzo1MjowOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBidWlsZHN5czogaGFyZGNvZGUgc29ja2V0ZGlyIHRvIC90bXAKKwordGhlIFRNUERJUiBlbnYgdmFyIGlzbid0IGFsd2F5cyBwb2ludGluZyB0byB0aGUgcmlnaHQgdGFyZ2V0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKworT3JpZ2luYWwgY29tbWVudDoKKworCWF2b2lkIHRvIGNoZWNrIHRtcCBkaXIgYXQgYnVpbGQgdGltZS4gaW5zdGVhZCB1c2VzIGhhcmQgY29kZWQgL3RtcCBoZXJlCisJY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMTEgKy0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQwODA1NGIuLjZkMjYxODAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0ODMsMTYgKzE0ODMsNyBAQCBBQ19TVUJTVChURVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZKQorIEFDX0RFRklORV9VTlFVT1RFRChEQlVTX1RFU1RfTEFVTkNIX0hFTFBFUl9CSU5BUlksICIkVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWSIsCisgICAgICAgICAgICAgICAgICAgIFtGdWxsIHBhdGggdG8gdGhlIGxhdW5jaCBoZWxwZXIgdGVzdCBwcm9ncmFtIGluIHRoZSBidWlsZGRpcl0pCisgCistIyMjIyBGaW5kIHNvY2tldCBkaXJlY3RvcmllcworLWlmICEgdGVzdCAteiAiJFRNUERJUiIgOyB0aGVuCistICAgREVGQVVMVF9TT0NLRVRfRElSPSRUTVBESVIKKy1lbGlmICEgdGVzdCAteiAiJFRFTVAiIDsgdGhlbgorLSAgIERFRkFVTFRfU09DS0VUX0RJUj0kVEVNUAorLWVsaWYgISB0ZXN0IC16ICIkVE1QIiA7IHRoZW4KKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9JFRNUAorLWVsc2UKKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9L3RtcAorLWZpCisrREVGQVVMVF9TT0NLRVRfRElSPS90bXAKKyAKKyBERUZBVUxUX1NPQ0tFVF9ESVI9YGVjaG8gJERFRkFVTFRfU09DS0VUX0RJUiB8IHNlZCAncy8rLyUyQi9nJ2AKKyAKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjguMjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1c18xLjguMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmMjA5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuOC4yMC5iYgpAQCAtMCwwICsxLDQgQEAKK2luY2x1ZGUgZGJ1cy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImI0OTg5MGJiYWJlZGFiM2ExYzNmNGY3M2M3ZmY4YjJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNGZiZjRjNjQ2MjFjOTZlODcxZGE5MWQyYjcyOWE1YjAwNTM2ZTExNmQzYzQ2MTJhNDY5ZDkyNGIxYjcwM2EiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzczNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYwpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJBIGxpZ2h0d2VpZ2h0IFNTSCBhbmQgU0NQIGltcGxlbWVudGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9kcm9wYmVhci5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKKyMgc29tZSBmaWxlcyBhcmUgZnJvbSBvdGhlciBwcm9qZWN0cyBhbmQgaGF2ZSBvdGhlcnMgbGljZW5zZSB0ZXJtczoKKyMgICBwdWJsaWMgZG9tYWluLCBPcGVuU1NIIDMuNXAxLCBPcGVuU1NIMy42LjFwMiwgUHVUVFkKK0xJQ0VOU0UgPSAiTUlUICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hNWVjNDBjYWZiYTI2ZmM0Mzk2ZDBiNTUwZjgyNGUwMSIKKworREVQRU5EUyA9ICJ6bGliIgorUlBST1ZJREVTXyR7UE59ID0gInNzaCBzc2hkIiAKKworREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vbWF0dC51Y2MuYXNuLmF1L2Ryb3BiZWFyL3JlbGVhc2VzL2Ryb3BiZWFyLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXJrZXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhckAuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhci5zb2NrZXQgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vMDAwNS1kcm9wYmVhci1lbmFibGUtcGFtLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXIiCisKK1BBTV9QTFVHSU5TID0gImxpYnBhbS1ydW50aW1lIFwKKwlwYW0tcGx1Z2luLWRlbnkgXAorCXBhbS1wbHVnaW4tcGVybWl0IFwKKwlwYW0tcGx1Z2luLXVuaXggXAorCSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9QTFVHSU5TfScsICcnLCBkKX0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImRyb3BiZWFyIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMTAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkcm9wYmVhci5zb2NrZXQiCisKK0NGTEFHU19wcmVwZW5kID0gIiAtSS4gIgorTEQgPSAiJHtDQ30iCisKK1NCSU5DT01NQU5EUyA9ICJkcm9wYmVhciBkcm9wYmVhcmtleSBkcm9wYmVhcmNvbnZlcnQiCitCSU5DT01NQU5EUyA9ICJkYmNsaWVudCBzc2ggc2NwIgorRVhUUkFfT0VNQUtFID0gJ01VTFRJPTEgU0NQUFJPR1JFU1M9MSBQUk9HUkFNUz0iJHtTQklOQ09NTUFORFN9ICR7QklOQ09NTUFORFN9IicKK0VYVFJBX09FQ09ORiArPSAiXAorICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbScsICctLWRpc2FibGUtcGFtJywgZCl9IgorQ0ZMQUdTICs9ICItRFNGVFBTRVJWRVJfUEFUSD1cXCIke2xpYmRpcn0vb3BlbnNzaC9zZnRwLXNlcnZlclxcIiIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyIFwKKwkJJHtEfSR7YmluZGlyfSBcCisJCSR7RH0ke3NiaW5kaXJ9IFwKKwkJJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKworCWluc3RhbGwgLW0gMDc1NSBkcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LworCWxuIC1zICR7c2JpbmRpcn0vZHJvcGJlYXJtdWx0aSAke0R9JHtiaW5kaXJ9L2RiY2xpZW50CisJCisJZm9yIGkgaW4gJHtTQklOQ09NTUFORFN9CisJZG8KKwkJbG4gLXMgLi9kcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LyRpCisJZG9uZQorCXNlZCAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLC92YXIsJHtsb2NhbHN0YXRlZGlyfSxnJyBcCisJCS1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnJyBcCisJCS1lICdzLC91c3IsJHtwcmVmaXh9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kcm9wYmVhcgorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZHJvcGJlYXIKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZAorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhciAgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJZmkKKworCSMgZGVhbCB3aXRoIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhcmtleS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHJvcGJlYXJALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhci5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZHJvcGJlYXIuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzY3Agc3NoIgorCitBTFRFUk5BVElWRV9UQVJHRVQgPSAiJHtzYmluZGlyfS9kcm9wYmVhcm11bHRpIgorCitwa2dfcG9zdHJtX2FwcGVuZF8ke1BOfSAoKSB7CisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisgIGZpCisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5CisgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMS11cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOWQ1NzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTdWJqZWN0OiBbUEFUQ0ggMS82XSB1cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG9wdGlvbnMuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL29wdGlvbnMuaCBiL29wdGlvbnMuaAoraW5kZXggN2QwNjMyMi4uNzFhMjFjMiAxMDA2NDQKKy0tLSBhL29wdGlvbnMuaAorKysrIGIvb3B0aW9ucy5oCitAQCAtMjQ3LDcgKzI0Nyw3IEBAIG11Y2ggdHJhZmZpYy4gKi8KKyAvKiBUaGUgY29tbWFuZCB0byBpbnZva2UgZm9yIHhhdXRoIHdoZW4gdXNpbmcgWDExIGZvcndhcmRpbmcuCisgICogIi1xIiBmb3IgcXVpZXQgKi8KKyAjaWZuZGVmIFhBVVRIX0NPTU1BTkQKKy0jZGVmaW5lIFhBVVRIX0NPTU1BTkQgIi91c3IvYmluL3hhdXRoIC1xIgorKyNkZWZpbmUgWEFVVEhfQ09NTUFORCAieGF1dGggLXEiCisgI2VuZGlmCisgCisgLyogaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bm5pbmcgYW4gc2Z0cCBzZXJ2ZXIgKHN1Y2ggYXMgdGhlIG9uZSBpbmNsdWRlZCB3aXRoCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2FiMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYzVmNWM1MDU0YzFiMTU1MzlkY2NmODY2ZTJjM2ZhYmE3ZWQ2ODQ1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9FcmljPTIwQj1DMz1BOW5hcmQ/PSA8ZXJpY0BldWtyZWEuY29tPgorRGF0ZTogVGh1LCAyNSBBcHIgMjAxMyAwMDoyNzoyNSArMDIwMAorU3ViamVjdDogW1BBVENIIDMvNl0gY29uZmlndXJlOiBhZGQgYSB2YXJpYWJsZSB0byBhbGxvdyBvcGVucHR5IGNoZWNrIHRvIGJlIGNhY2hlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgY29uZmlndXJlLmFjIHwgMTEgKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwNTQ2MWYzLi45YzE2ZDkwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNjYsMTUgKzE2NiwyMCBAQCBBQ19BUkdfRU5BQkxFKG9wZW5wdHksCisgCQkJQUNfTVNHX05PVElDRShOb3QgdXNpbmcgb3BlbnB0eSkKKyAJCWVsc2UKKyAJCQlBQ19NU0dfTk9USUNFKFVzaW5nIG9wZW5wdHkgaWYgYXZhaWxhYmxlKQorLQkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZLCxIYXZlIG9wZW5wdHkoKSBmdW5jdGlvbildKQorKwkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtkcm9wYmVhcl9jdl9mdW5jX2hhdmVfb3BlbnB0eT15ZXNdKQorIAkJZmkKKyAJXSwKKyAJWworIAkJQUNfTVNHX05PVElDRShVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSkKKy0JCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZKV0pCisrCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHk9eWVzXSkKKyAJXQorICkKKy0JCQorKworK2lmIHRlc3QgIngkZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHkiID0gInh5ZXMiOyB0aGVuCisrCUFDX0RFRklORShIQVZFX09QRU5QVFksLEhhdmUgb3BlbnB0eSgpIGZ1bmN0aW9uKQorKwlub19wdGNfY2hlY2s9eWVzCisrCW5vX3B0bXhfY2hlY2s9eWVzCisrZmkKKyAKKyBBQ19BUkdfRU5BQkxFKHN5c2xvZywKKyAJWyAgLS1kaXNhYmxlLXN5c2xvZyAgICAgICAgRG9uJ3QgaW5jbHVkZSBzeXNsb2cgc3VwcG9ydF0sCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNC1maXgtMmtiLWtleXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzlkMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1N1YmplY3Q6IFtQQVRDSCA0LzZdIGZpeCAya2Iga2V5cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBrZXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKK2luZGV4IDcyNDMwZTkuLjM3NWM2NzcgMTAwNjQ0CistLS0gYS9rZXguaAorKysrIGIva2V4LmgKK0BAIC02Nyw2ICs2Nyw2IEBAIHN0cnVjdCBLRVhTdGF0ZSB7CisgfTsKKyAKKyAKKy0jZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDIwMDAKKysjZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDMwMDAKKyAKKyAjZW5kaWYgLyogX0tFWF9IXyAqLworLS0gCisxLjcuMTEuNworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNS1kcm9wYmVhci1lbmFibGUtcGFtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDhjNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitTdWJqZWN0OiBbUEFUQ0ggNS82XSBkcm9wYmVhciBlbmFibGUgcGFtCisKK2Ryb3BiZWFyOiBXZSBuZWVkIG1vZGlmeSBmaWxlIG9wdGlvbi5oIGJlc2lkZXMgZW5hYmxpbmcgcGFtIGluIFwKK2NvbmZpZ3VyZSBpZiB3ZSB3YW50IGRyb3BiZWFyIHRvIHN1cHBvcnQgcGFtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIG9wdGlvbnMuaCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRyb3BiZWFyLTIwMTMuNjIub3JpZy9vcHRpb25zLmgJMjAxNC0wMS0xNCAyMTo1MzowMi44MDMyNjIwMDkgKzAwMDAKKysrKyBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAkyMDE0LTAxLTE0IDIxOjUzOjU2LjExOTI2MzQ2MiArMDAwMAorQEAgLTE5Miw5ICsxOTIsOSBAQAorICAqIFBBTSBjaGFsbGVuZ2UvcmVzcG9uc2UuCisgICogWW91IGNhbid0IGVuYWJsZSBib3RoIFBBU1NXT1JEIGFuZCBQQU0uICovCisgCistI2RlZmluZSBFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgKKysvKiNkZWZpbmUgRU5BQkxFX1NWUl9QQVNTV09SRF9BVVRIKi8KKyAvKiBQQU0gcmVxdWlyZXMgLi9jb25maWd1cmUgLS1lbmFibGUtcGFtICovCistLyojZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEggKi8KKysjZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEgKKyAjZGVmaW5lIEVOQUJMRV9TVlJfUFVCS0VZX0FVVEgKKyAKKyAvKiBXaGV0aGVyIHRvIHRha2UgcHVibGljIGtleSBvcHRpb25zIGluIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0YzhkMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorU3ViamVjdDogW1BBVENIIDYvNl0gZHJvcGJlYXIgY29uZmlndXJhdGlvbiBmaWxlCisKK2Ryb3BiZWFyOiBDaGFuZ2UgdGhlIHBhdGggKCIvZXRjL3BhbS5kL3NzaGQiIGFzIGRlZmF1bHQpIHRvIGZpbmQgYSBwYW0gY29uZmlndXJhdGlvbiBmaWxlIFwKK3RvICIvZXRjL3BhbS5kL2Ryb3BiZWFyIGZvciBkcm9wYmVhciB3aGVuIGVuYWJsaW5nIHBhbSBzdXBwb3J0aW5nIgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC1OYXVyIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jIGRyb3BiZWFyLTIwMTMuNjAvc3ZyLWF1dGhwYW0uYworLS0tIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMTYgMTY6MzQ6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZHJvcGJlYXItMjAxMy42MC9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMjEgMTc6MDQ6MDQuOTY5NDE2MDU1ICswMjAwCitAQCAtMjExLDcgKzIxMSw3IEBACisgCXVzZXJEYXRhLnBhc3N3ZCA9IHBhc3N3b3JkOworIAorIAkvKiBJbml0IHBhbSAqLworLQlpZiAoKHJjID0gcGFtX3N0YXJ0KCJzc2hkIiwgTlVMTCwgJnBhbUNvbnYsICZwYW1IYW5kbGVwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKysJaWYgKChyYyA9IHBhbV9zdGFydCgiZHJvcGJlYXIiLCBOVUxMLCAmcGFtQ29udiwgJnBhbUhhbmRsZXApKSAhPSBQQU1fU1VDQ0VTUykgeworIAkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAicGFtX3N0YXJ0KCkgZmFpbGVkLCByYz0lZCwgJXMiLCAKKyAJCQkJcmMsIHBhbV9zdHJlcnJvcihwYW1IYW5kbGVwLCByYykpOworIAkJZ290byBjbGVhbnVwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1MDEyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2gKQEAgLTAsMCArMSwxNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgZHJvcGJlYXJrZXkgdXRpbGl0eSBidWlsdCBpbiB4MzIgYWJpIGZvcm1hdCwgd2hlbiBnZW5lcmF0aW5nIHNzaAora2V5cywgd2FzIGdldHRpbmcgbG9zdCBpbiB0aGUgaW5maW5pdGUgbG9vcC4KKworVGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWUgYnkgZml4aW5nIHR5cGVzIG9mIHZhcmlhYmxlcyBhbmQKK3BhcmFtZXRlcnMgb2YgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGNvZGUsIHdoaWNoIHdlcmUgZ2V0dGluZwordW5kZXNpcmVkIHNpemUsIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgeDMyIGFiaSB0b29sY2hhaW4uCisKKzIwMTMvMDUvMjMKK1JlY2VpdmVkIHRoaXMgZml4IGZyb20gSCBKIEx1LgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDA3OSAyNTIwMAorIyBOb2RlIElEIGExMGExYzQ2Yjg1N2NjOGEzOTIzYzNiYjZkMTUwNGFhMjViNjA1MmYKKyMgUGFyZW50ICBlNzY2MTQxNDVhZWE2N2Y2NmU0YTQyNTc2ODVjNzcxZWZiYTIxYWExCitUeXBkZWYgbXBfZGlnaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBNUF82NEJJVAorCitXaGVuIEdDQyBpcyB1c2VkIHdpdGggTVBfNjRCSVQsIHdlIHNob3VsZCB0eXBlZGVmIG1wX2RpZ2l0IHRvIHVuc2lnbmVkCitsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZCBsb25nIHNpbmNlIGZvciB4MzIsIHVuc2lnbmVkIGxvbmcgaXMKKzMyLWJpdCBhbmQgdW5zaWduZWQgbG9uZyBsb25nIGlzIDY0LWJpdCBhbmQgaXQgaXMgc2FmZSB0byB1c2UgdW5zaWduZWQKK2xvbmcgbG9uZyBmb3IgNjQtYml0IGludGVnZXIgd2l0aCBHQ0MuCisKK2RpZmYgLXIgZTc2NjE0MTQ1YWVhIC1yIGExMGExYzQ2Yjg1NyBsaWJ0b21tYXRoL3RvbW1hdGguaAorLS0tIGEvbGlidG9tbWF0aC90b21tYXRoLmgJVGh1IEFwciAxOCAyMjo1Nzo0NyAyMDEzICswODAwCisrKysgYi9saWJ0b21tYXRoL3RvbW1hdGguaAlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKK0BAIC03Myw3ICs3Myw3IEBACisgICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgbG9uZzY0OworICNlbmRpZgorCistICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfZGlnaXQ7CisrICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgbXBfZGlnaXQ7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfd29yZCBfX2F0dHJpYnV0ZV9fICgobW9kZShUSSkpKTsKKworICAgICNkZWZpbmUgRElHSVRfQklUICAgICAgICAgIDYwCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDI0MSAyNTIwMAorIyBOb2RlIElEIGM3NTU1YTRjYjdkZWQzYTg4NDA5YmE4NWY0MDI3YmFhN2FmNWY1MzYKKyMgUGFyZW50ICBhMTBhMWM0NmI4NTdjYzhhMzkyM2MzYmI2ZDE1MDRhYTI1YjYwNTJmCitDYXN0IHRvIG1wX2RpZ2l0IHdoZW4gdXBkYXRpbmcgKnJobworCitUaGVyZSBpcworCitpbnQKK21wX21vbnRnb21lcnlfc2V0dXAgKG1wX2ludCAqIG4sIG1wX2RpZ2l0ICogcmhvKQorCitXZSBzaG91bGQgY2FzdCB0byBtcF9kaWdpdCBpbnN0ZWFkIG9mIHVuc2lnbmVkIGxvbmcgd2hlbiB1cGRhdGluZworKnJobyBzaW5jZSBtcF9kaWdpdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBsb25nIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcKK21heSBiZSBkaWZmZXJlbnQgZnJvbSB1bnNpZ25lZCBsb25nLCBsaWtlIGluIHgzMi4KKworZGlmZiAtciBhMTBhMWM0NmI4NTcgLXIgYzc1NTVhNGNiN2RlIGxpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCistLS0gYS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYwlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCVRodSBNYXkgMjMgMTQ6MjQ6MDEgMjAxMyAtMDcwMAorQEAgLTQ4LDcgKzQ4LDcgQEAKKyAjZW5kaWYKKworICAgLyogcmhvID0gLTEvbSBtb2QgYiAqLworLSAgKnJobyA9ICh1bnNpZ25lZCBsb25nKSgoKG1wX3dvcmQpMSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCkpIC0geCkgJiBNUF9NQVNLOworKyAgKnJobyA9IChtcF9kaWdpdCkoKChtcF93b3JkKTEgPDwgKChtcF93b3JkKSBESUdJVF9CSVQpKSAtIHgpICYgTVBfTUFTSzsKKworICAgcmV0dXJuIE1QX09LQVk7CisgfQorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorIyBEYXRlIDEzNjkzNDQ1NDEgMjUyMDAKKyMgTm9kZSBJRCA3YzY1NmU3MDcxYTY0MTI2ODhiMmYzMGE1MjlhOWFmYWM2YzdiZjVhCisjIFBhcmVudCAgYzc1NTVhNGNiN2RlZDNhODg0MDliYTg1ZjQwMjdiYWE3YWY1ZjUzNgorRGVmaW5lIExUQ19GQVNUX1RZUEUgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBfX3g4Nl82NF9fCisKK1dlIHNob3VsZCBkZWZpbmUgTFRDX0ZBU1RfVFlQRSB0byB1bnNpZ25lZCBsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZAorbG9uZyBpZiBfX3g4Nl82NF9fIHRvIHN1cHBvcnQgeDMyIHdoZXJlIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyA2NC1iaXQKK2FuZCB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC4KKworZGlmZiAtciBjNzU1NWE0Y2I3ZGUgLXIgN2M2NTZlNzA3MWE2IGxpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCistLS0gYS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaAlUaHUgTWF5IDIzIDE0OjI0OjAxIDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorQEAgLTc0LDcgKzc0LDcgQEAKKyAgICAjZGVmaW5lIEVORElBTl9MSVRUTEUKKyAgICAjZGVmaW5lIEVORElBTl82NEJJVFdPUkQKKyAgICAjZGVmaW5lIExUQ19GQVNUCistICAgI2RlZmluZSBMVENfRkFTVF9UWVBFICAgIHVuc2lnbmVkIGxvbmcKKysgICAjZGVmaW5lIExUQ19GQVNUX1RZUEUgICAgdW5zaWduZWQgbG9uZyBsb25nCisgI2VuZGlmCisKKyAvKiBkZXRlY3QgUFBDMzIgKi8KKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKyMgRGF0ZSAxMzY5MzQ0NzMwIDI1MjAwCisjIE5vZGUgSUQgYTdkNDY5MDE1OGZhZTRlZGUyYzRlNWI1NjIzM2U4MzczMGJmMzhlZQorIyBQYXJlbnQgIDdjNjU2ZTcwNzFhNjQxMjY4OGIyZjMwYTUyOWE5YWZhYzZjN2JmNWEKK1VzZSB1bnNpZ25lZCBsb25nIGxvbmcgYWFzIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZvciB4ODYtNjQgR0NDCisKK1dlIHNob3VsZCB1c2UgdW5zaWduZWQgbG9uZyBsb25nIGluc3RlYWQgb2YgdW5zaWduZWQgbG9uZyBhcyB1bnNpZ25lZAorNjQtYml0IGludGVnZXIgZm9yIHg4Ni02NCBHQ0MgdG8gc3VwcG9ydCB4MzIgd2hlcmUgdW5zaWduZWQgbG9uZyBpcworMzItYml0LgorCitkaWZmIC1yIDdjNjU2ZTcwNzFhNiAtciBhN2Q0NjkwMTU4ZmEgbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKKy0tLSBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgJVGh1IE1heSAyMyAxNDozMjoxMCAyMDEzIC0wNzAwCitAQCAtMzQzLDcgKzM0Myw3IEBACisgLyogNjQtYml0IFJvdGF0ZXMgKi8KKyAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKExUQ19OT19BU00pCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST0w2NCh1bnNpZ25lZCBsb25nIGxvbmcgd29yZCwgaW50IGkpCisgeworICAgIGFzbSgicm9scSAlJWNsLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM1MSw3ICszNTEsNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NCh1bnNpZ25lZCBsb25nIHdvcmQsIGludCBpKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIFJPUjY0KHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb3JxICUlY2wsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCitAQCAtMzYxLDcgKzM2MSw3IEBACisKKyAjaWZuZGVmIExUQ19OT19ST0xDCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgd29yZCwgY29uc3QgaW50IGkpCisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb2xxICUyLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM2OSw3ICszNjksNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyBsb25nIHdvcmQsIGNvbnN0IGludCBpKQorIHsKKyAgICBhc20oInJvcnEgJTIsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZTc4N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyCkBAIC0wLDAgKzEsNCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgIGluY2x1ZGUgIGNvbW1vbi1hdXRoCithY2NvdW50ICBpbmNsdWRlICBjb21tb24tYWNjb3VudApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWM2MWI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitDb25mbGljdHM9ZHJvcGJlYXIuc2VydmljZQorCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKK0Fsc289ZHJvcGJlYXJrZXkuc2VydmljZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhckAuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlOTk0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TU0ggUGVyLUNvbm5lY3Rpb24gU2VydmVyCitXYW50cz1kcm9wYmVhcmtleS5zZXJ2aWNlCitBZnRlcj1zeXNsb2cudGFyZ2V0IGRyb3BiZWFya2V5LnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9kcm9wYmVhcgorRXhlY1N0YXJ0PS1AU0JJTkRJUkAvZHJvcGJlYXIgLWkgLXIgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJERST1BCRUFSX0VYVFJBX0FSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1N0YW5kYXJkSW5wdXQ9c29ja2V0CitLaWxsTW9kZT1wcm9jZXNzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFya2V5LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFya2V5LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjMjFkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJrZXkuc2VydmljZQpAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249U1NIIEtleSBHZW5lcmF0aW9uCitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZHJvcGJlYXJrZXkgLXQgcnNhIC1mIC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThmZWQzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvaW5pdApAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOgkJc3NoZAorIyBSZXF1aXJlZC1TdGFydDoJJHJlbW90ZV9mcyAkc3lzbG9nICRuZXR3b3JraW5nCisjIFJlcXVpcmVkLVN0b3A6CSRyZW1vdGVfZnMgJHN5c2xvZworIyBEZWZhdWx0LVN0YXJ0OgkyIDMgNCA1CisjIERlZmF1bHQtU3RvcDoJCTEKKyMgU2hvcnQtRGVzY3JpcHRpb246CURyb3BiZWFyIFNlY3VyZSBTaGVsbCBzZXJ2ZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIERvIG5vdCBjb25maWd1cmUgdGhpcyBmaWxlLiBFZGl0IC9ldGMvZGVmYXVsdC9kcm9wYmVhciBpbnN0ZWFkIQorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9kcm9wYmVhcgorTkFNRT1kcm9wYmVhcgorREVTQz0iRHJvcGJlYXIgU1NIIHNlcnZlciIKK1BJREZJTEU9L3Zhci9ydW4vZHJvcGJlYXIucGlkCisKK0RST1BCRUFSX1BPUlQ9MjIKK0RST1BCRUFSX0VYVFJBX0FSR1M9CitOT19TVEFSVD0wCisKK3NldCAtZQorCit0ZXN0ICEgLXIgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIHx8IC4gL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyCit0ZXN0ICIkTk9fU1RBUlQiID0gIjAiIHx8IGV4aXQgMAordGVzdCAteCAiJERBRU1PTiIgfHwgZXhpdCAwCit0ZXN0ICEgLWggL3Zhci9zZXJ2aWNlL2Ryb3BiZWFyIHx8IGV4aXQgMAorCityZWFkb25seV9yb290ZnM9MAorZm9yIGZsYWcgaW4gYGF3ayAneyBpZiAoJDIgPT0gIi8iKSB7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwvcHJvYy9tb3VudHNgOyBkbworICBjYXNlICRmbGFnIGluCisgICBybykKKyAgICAgcmVhZG9ubHlfcm9vdGZzPTEKKyAgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiBbICRyZWFkb25seV9yb290ZnMgPSAiMSIgXTsgdGhlbgorICBta2RpciAtcCAvdmFyL2xpYi9kcm9wYmVhcgorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IgorICBEUk9QQkVBUl9EU1NLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IgorZWxzZQorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkiCisgIERST1BCRUFSX0RTU0tFWV9ERUZBVUxUPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSIKK2ZpCisKK3Rlc3QgLXogIiREUk9QQkVBUl9CQU5ORVIiIHx8IFwKKyAgRFJPUEJFQVJfRVhUUkFfQVJHUz0iJERST1BCRUFSX0VYVFJBX0FSR1MgLWIgJERST1BCRUFSX0JBTk5FUiIKK3Rlc3QgLW4gIiREUk9QQkVBUl9SU0FLRVkiIHx8IFwKKyAgRFJPUEJFQVJfUlNBS0VZPSREUk9QQkVBUl9SU0FLRVlfREVGQVVMVAordGVzdCAtbiAiJERST1BCRUFSX0RTU0tFWSIgfHwgXAorICBEUk9QQkVBUl9EU1NLRVk9JERST1BCRUFSX0RTU0tFWV9ERUZBVUxUCit0ZXN0IC1uICIkRFJPUEJFQVJfS0VZVFlQRVMiIHx8IFwKKyAgRFJPUEJFQVJfS0VZVFlQRVM9InJzYSIKKworZ2VuX2tleXMoKSB7Citmb3IgdCBpbiAkRFJPUEJFQVJfS0VZVFlQRVM7IGRvCisgIGNhc2UgJHQgaW4KKyAgICByc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9SU0FLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9SU0FLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfUlNBS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZIHx8IGRyb3BiZWFya2V5IC10IHJzYSAtZiAkRFJPUEJFQVJfUlNBS0VZCisJOzsKKyAgICBkc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9EU1NLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9EU1NLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfRFNTS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZIHx8IGRyb3BiZWFya2V5IC10IGRzcyAtZiAkRFJPUEJFQVJfRFNTS0VZCisJOzsKKyAgZXNhYworZG9uZQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICIKKwlnZW5fa2V5cworCUtFWV9BUkdTPSIiCisJdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLWQgJERST1BCRUFSX0RTU0tFWSIKKwl0ZXN0IC1mICREUk9QQkVBUl9SU0FLRVkgJiYgS0VZX0FSR1M9IiRLRVlfQVJHUyAtciAkRFJPUEJFQVJfUlNBS0VZIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1wICRQSURGSUxFIFwKKwkgIC14ICIkREFFTU9OIiAtLSAkS0VZX0FSR1MgXAorCSAgICAtcCAiJERST1BCRUFSX1BPUlQiICREUk9QQkVBUl9FWFRSQV9BUkdTCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAiJERBRU1PTiIgLXAgJFBJREZJTEUKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14ICIkREFFTU9OIiAtcCAkUElERklMRQorCXNsZWVwIDEKKwlLRVlfQVJHUz0iIgorCXRlc3QgLWYgJERST1BCRUFSX0RTU0tFWSAmJiBLRVlfQVJHUz0iJEtFWV9BUkdTIC1kICREUk9QQkVBUl9EU1NLRVkiCisJdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLXIgJERST1BCRUFSX1JTQUtFWSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSBcCisJICAteCAiJERBRU1PTiIgLS0gJEtFWV9BUkdTIFwKKwkgICAgLXAgIiREUk9QQkVBUl9QT1JUIiAkRFJPUEJFQVJfRVhUUkFfQVJHUworCWVjaG8gIiROQU1FLiIKKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNS42OC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXJfMjAxNS42OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjc0OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjY4LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBkcm9wYmVhci5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjc2NjRhYzEwZjdjYzIzMDFjNTMwZWI4MGM3NTZmYzVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU1ZWE3YzFlOTA0ZmZlNGIxY2RiZTFhZGRjYTgyOTFhMjUzM2Q3ZDI4NWZkMjJhYzMzNjA4ZTk1MDJhNjI0NDYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQtMi4xLjAvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTk5NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitBdm9pZCB1c2luZyBleHBhdCdzIG00IGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIHNwZWNpZmljIHRvIG91ciBidWlsZCBzeXN0ZW0uCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK1VwZGF0ZWQgdG8gYXBwbHkgb3ZlciBleHBhdCAyLjEuMAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGV4cGF0LTIuMS4wL2NvbmZpZ3VyZS5pbiBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4KKy0tLSBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wMy0wNCAwMTo0NTo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wNS0xMCAyMTowNDo0NC4wMDAwMDAwMDAgKzAzMDAKK0BAIC01MSw4ICs1MSw2IEBACisgCisgQUNfQ09ORklHX0hFQURFUihleHBhdF9jb25maWcuaCkKKyAKKy1zaW5jbHVkZShjb25mdG9vbHMvYWNfY19iaWdlbmRpYW5fY3Jvc3MubTQpCistCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmYWZlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQSBzdHJlYW0tb3JpZW50ZWQgWE1MIHBhcnNlciBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRXhwYXQgaXMgYW4gWE1MIHBhcnNlciBsaWJyYXJ5IHdyaXR0ZW4gaW4gQy4gSXQgaXMgYSBzdHJlYW0tb3JpZW50ZWQgcGFyc2VyIGluIHdoaWNoIGFuIGFwcGxpY2F0aW9uIHJlZ2lzdGVycyBoYW5kbGVycyBmb3IgdGhpbmdzIHRoZSBwYXJzZXIgbWlnaHQgZmluZCBpbiB0aGUgWE1MIGRvY3VtZW50IChsaWtlIHN0YXJ0IHRhZ3MpIgorSE9NRVBBR0UgPSAiaHR0cDovL2V4cGF0LnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZXhwYXQvZXhwYXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgZ3ppcG5hdGl2ZQorCisjIFRoaXMgcGFja2FnZSB1c2VzIGFuIGFyY2hpdmUgZm9ybWF0IGtub3duIHRvIGhhdmUgaXNzdWUgd2l0aCBzb21lCisjIHZlcnNpb25zIG9mIGd6aXAKK2RvX3VucGFja1tkZXBlbmRzXSArPSAiZ3ppcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vY29uZnRvb2xzL2xpYnRvb2wubTQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1ODc0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGV4cGF0LmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWI3MWY2ODE3MTNkMTI1NmUxYzIzYjA4OTA5MjA4NzQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZDdkYWI3YTVmZWE5N2QyYTZhNDNmNTExNDQ5YjdjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MjM3MDU0NzJmODE2ZGYyMWM4ZjZhYTAyNmRkMTYyYjI4MDgwNjgzOGJiNTViMzQzMmIwZmIxZmNjYTdlYjg2IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2Rpc2FibGVfamF2YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjNWYxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCisjIFB1bGxlZCBmcm9tIE9wZW5FbWJlZGRlZAorIyAKKyMgQ29tbWVudGVkIGJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvY29uZmlndXJlLmFjCTIwMDYtMTEtMjcgMDk6MDI6MDEuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMJMjAxMS0wMy0xNiAxNjo1NTozNi4xMTEzOTY1NTcgLTA3MDAKK0BAIC0zNiwyNyArMzYsMTUgQEAKKyBndF9KQVZBX0NIT0lDRQorIAorIGd0X0dDSgorLWlmIHRlc3QgLW4gIiRIQVZFX0dDSiIgJiYgdGVzdCAiJEpBVkFfQ0hPSUNFIiA9IHllczsgdGhlbgorLSAgQlVJTERKQVZBRVhFPXllcworLWVsc2UKKyAgIEJVSUxESkFWQUVYRT1ubworLWZpCisgQUNfU1VCU1QoQlVJTERKQVZBRVhFKQorIAorIGd0X0pBVkFFWEVDCisgZ3RfSkFWQUNPTVAoWzEuM10pCisgQUNfQ0hFQ0tfUFJPRyhKQVIsIGphciwgamFyKQorLWlmIHRlc3QgLW4gIiRIQVZFX0pBVkFDT01QIiAmJiB0ZXN0IC1uICIkSkFSIiAmJiB0ZXN0ICIkSkFWQV9DSE9JQ0UiICE9IG5vOyB0aGVuCistICBCVUlMREpBVkE9eWVzCistZWxzZQorICAgQlVJTERKQVZBPW5vCistZmkKKyBBQ19TVUJTVChCVUlMREpBVkEpCistaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUVYRUMiICYmIHRlc3QgJEJVSUxESkFWQSA9IHllczsgdGhlbgorLSAgVEVTVEpBVkE9eWVzCistZWxzZQorICAgVEVTVEpBVkE9bm8KKy1maQorIEFDX1NVQlNUKFRFU1RKQVZBKQorIAorIGd0X0NTSEFSUENPTVAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9hY2xvY2FsX3ZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5M2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACisKK1RoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgcmVxdWlyZWQgdmVyc2lvbiBudW1iZXIgZnJvbSAyLjYxIHRvIHRoZSAKK2N1cnJlbnQgMi42NSB2ZXJzaW9uIG9mIGFjbG9jYWwsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgCit3aGVuIHdlIHVwZGF0ZSBhY2xvY2FsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU2OTUyNjA3MyAtMDcwMAorQEAgLTE0OCw3ICsxNDgsNyBAQAorICAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgICBkbmwgQXV0b2NvbmYgPj0gMi42MSBzdXBwb3J0cyBkb3RzIGluIC0td2l0aCBvcHRpb25zLgorLSAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorKyAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjY1XSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorICAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisgICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGhseS9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41NzA1MjY5MDQgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHgvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTcyNTI1NzczIC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU3ODM5NDkxNiAtMDcwMAorQEAgLTExLDcgKzExLDcgQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorIFttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHovYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTg2Mzk1NDE2IC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDA2LTExLTI3IDA5OjM0OjMyLjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI3OjAxLjEzNTY4MjgwNyAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9leGFtcGxlcy9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAwNi0xMS0yNyAwOToxNjoyMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNjo1Mi41ODkzOTY2ODMgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODYxNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKQEAgLTAsMCArMSwzNDggQEAKKworVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5IG9uIEFDX0dOVV9TT1VSQ0UgaW4KK0FDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4KKworVGhhbmtzIHRvIE1hcmsgSGF0bGUgZm9yIHRoZSB0aW1lbHkgcG9pbnRlcnMgYW5kIGZpeGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAkyMDExLTAzLTE2IDIzOjU0OjAxLjcxMTkyMzQ0OCAtMDcwMAorQEAgLTE2LDQzICsxNiw0NyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorKyNBQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKysjWworKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCisrIworKyMgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyMgIEFDX1JFUVVJUkUoW0FDX0FJWF0pCisrIyAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorKyMKKysjICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorKyNbLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisrIyNpZm5kZWYgX19FWFRFTlNJT05TX18KKysjIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworKyMjZW5kaWYKKysjI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjI2VuZGlmCisrIyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorKyMjZW5kaWZdKQorKyMgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKysjICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCisrIyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisrIyAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKysjIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisrIwkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKysjICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKysjICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorKyMgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisrIyAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorKyMgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorKyNdKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisgQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldKQorK1sKKysgICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysKKysgICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorK10pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjE5LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMTEtMDMtMTYgMjM6NTA6MTcuNDcxNTMxODM4IC0wNzAwCitAQCAtMjUsNyArMjUsNyBAQAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgXSkKKyAKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L21iY2hhci5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMTEtMDMtMTYgMjM6NTA6MTAuODE0Mzk2NTI5IC0wNzAwCitAQCAtOSw3ICs5LDcgQEAKKyAKKyBBQ19ERUZVTihbZ2xfTUJDSEFSXSwKKyBbCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIGRubCBUaGUgZm9sbG93aW5nIGxpbmUgaXMgdGhhdCBzbyB0aGUgdXNlciBjYW4gdGVzdCBIQVZFX1dDSEFSX0gKKyAgIGRubCBiZWZvcmUgI2luY2x1ZGUgIm1iY2hhci5oIi4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbd2NoYXIuaF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAkyMDA2LTExLTI3IDA5OjE0OjM4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MDowOC4zNTczOTYyNDcgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL200L2xvY2subTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDA2LTEwLTI0IDEzOjU5OjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDExLTAzLTE2IDIzOjUwOjA0LjM1NTg5MTY3NiAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAgIEFDX0JFRk9SRShbJDBdLCBbZ2xfQVJHUF0pZG5sCisgCisgICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkgZG5sIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pIGRubCBuZWVkZWQgZm9yIHB0aHJlYWRfcndsb2NrX3Qgb24gZ2xpYmMgc3lzdGVtcworICAgZG5sIENoZWNrIGZvciBtdWx0aXRocmVhZGluZy4KKyAgIEFDX0FSR19FTkFCTEUodGhyZWFkcywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkcz17cG9zaXh8c29sYXJpc3xwdGh8d2luMzJ9XSwgW3NwZWNpZnkgbXVsdGl0aHJlYWRpbmcgQVBJXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAxMS0wMy0xNiAyMzo1MzoyOC40ODc2NzEyNjYgLTA3MDAKK0BAIC0xNiw0MyArMTYsNDcgQEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKy1BQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy1bCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCistCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0FJWF0pCistICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCistCistICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorLVsvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKy0jaWZuZGVmIF9fRVhURU5TSU9OU19fCistIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworLSNlbmRpZgorLSNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jZW5kaWYKKy0jaWZuZGVmIF9UQU5ERU1fU09VUkNFCistIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorLSNlbmRpZl0pCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCistICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCistICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0gICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCistIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCistCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKy0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCistICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorLSAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorLSAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCistXSkKKysjQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisrI1sKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorKyMKKysjICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysjICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorKyMgIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKysjCisrIyAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKysjWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworKyMjaWZuZGVmIF9fRVhURU5TSU9OU19fCisrIyMgdW5kZWYgX19FWFRFTlNJT05TX18KKysjI2VuZGlmCisrIyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyNlbmRpZgorKyMjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisrIyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjI2VuZGlmXSkKKysjICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCisrIyAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorKyMgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKyMgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisrIyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorKyMJICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorKyMgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCisrIyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKysjICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorKyMgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKysjICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKysjXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorIEFDX0RFRlVOKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLSAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSkKKytbCisrICAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrCisrICAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKytdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2ZubWF0Y2gubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAkyMDExLTAzLTE2IDIzOjUyOjA2LjQ3NzQ2MzY3MSAtMDcwMAorQEAgLTkxLDcgKzkxLDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19GTk1BVENIX0dOVV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxmbm1hdGNoLmg+IHRvIGRlY2xhcmUgRk5NX0NBU0VGT0xEIGV0Yy4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgRk5NQVRDSF9IPQorICAgX0FDX0ZVTkNfRk5NQVRDSF9JRihbR05VXSwgW2FjX2N2X2Z1bmNfZm5tYXRjaF9nbnVdLAorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGRlbGltLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAxMS0wMy0xNiAyMzo1MjoyMi44NzE2NzQ4NDUgLTA3MDAKK0BAIC0xMiw3ICsxMiw3IEBACisgWworIAorICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGdldGRlbGltKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1MoZ2V0ZGVsaW0pCisgICBBQ19DSEVDS19ERUNMU19PTkNFKGdldGRlbGltKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGxpbmUubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAkyMDExLTAzLTE2IDIzOjUxOjQ5LjgyOTk3MTEwOCAtMDcwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19HRVRMSU5FXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZ2V0bGluZSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19DSEVDS19ERUNMUyhbZ2V0bGluZV0pCisgCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ251bGliLWNvbXAubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjM2LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDExLTAzLTE2IDIzOjUyOjE4Ljk3MDQ1MDQ4OCAtMDcwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV0pCisgXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNAkyMDExLTAzLTE2IDIzOjUxOjQwLjg0NDQxMDIxNiAtMDcwMAorQEAgLTksNyArOSw3IEBACisgCisgQUNfREVGVU4oW2dsX01CQ0hBUl0sCisgWworLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBkbmwgVGhlIGZvbGxvd2luZyBsaW5lIGlzIHRoYXQgc28gdGhlIHVzZXIgY2FuIHRlc3QgSEFWRV9XQ0hBUl9ICisgICBkbmwgYmVmb3JlICNpbmNsdWRlICJtYmNoYXIuaCIuCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djaGFyLmhdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00CTIwMTEtMDMtMTYgMjM6NTI6MTQuNjkxMzk2MDQ1IC0wNzAwCitAQCAtNyw3ICs3LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19TVFBDUFldLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgc3RwY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1Moc3RwY3B5KQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHBjcHkgPSBubzsgdGhlbgorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cG5jcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAkyMDExLTAzLTE2IDIzOjUyOjEwLjM1NjY0MTQ1OSAtMDcwMAorQEAgLTcsNyArNyw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfU1RQTkNQWV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBzdHBuY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIGRubCBCb3RoIGdsaWJjIGFuZCBBSVggKDQuMy4zLCA1LjEpIGhhdmUgYW4gc3RwbmNweSgpIGZ1bmN0aW9uCisgICBkbmwgZGVjbGFyZWQgaW4gPHN0cmluZy5oPi4gSXRzIHNpZGUgZWZmZWN0cyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC93Y3dpZHRoLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MTowOC4yNjAzMjQyMjEgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjQ1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAxMS0wMy0xNiAyMzo1MTowMi4wMzYwNjEzMTcgLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0xPQ0tfRUFSTFldKQorIF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9tNC9yZWdleC5tNAkyMDA2LTExLTI3IDA5OjAyOjA1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CTIwMTEtMDMtMTYgMjM6NTA6NTMuNTMzNDc3MTk1IC0wNzAwCitAQCAtMTE2LDcgKzExNiw3IEBACisgICBkbmwgdG8gZ2V0IHRoZW0uCisgCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIG1lbXBjcHkoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVRVUlSRShbQUNfQ19SRVNUUklDVF0pCisgICBBQ19SRVFVSVJFKFtBQ19GVU5DX0FMTE9DQV0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJmZTVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBnZXR0ZXh0LTAuMTcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTR+CTIwMDktMDQtMTcgMTU6MTI6MzAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE3L2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMDktMDQtMTcgMTU6Mzc6MzkuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjY3LDYgKzI2Nyw5IEBACisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgIGZpCisrICAgICAgICAgIGRubCBKdXN0IGxldCB0aGUgY29tcGlsZXIgZmluZCB0aGUgbGlicmFyeSwgdGhlIGNvbXBpbGVyIGFuZCB1c2VyIGFyZSBzbWFydGVyIHRoZW4gdGhpcyBzY3JpcHQKKysgICAgICAgICAgZG5sIHdoZW4gY3Jvc3MgY29tcGlsaW5nIGFuZCB3b3JraW5nIHdpdGggYSByZWxvY2F0ZWQgaW5zdGFsbC4KKysgICAgICAgICAgZm91bmRfZGlyPSIiCisgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXZwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOWU0NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC1ydW50aW1lL2ludGwvTWFrZWZpbGUuaW4JMjAwNi0xMS0yNyAwOTowMjowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgkyMDExLTAzLTE2IDE2OjA0OjQ5LjE3NTQxOTkzMCAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAjICAgICdtYWtlJyBkb2VzIHRoZSB3cm9uZyB0aGluZyBpZiBHTlUgZ2V0dGV4dCB3YXMgY29uZmlndXJlZCB3aXRoCisgIyAgICAiLi9jb25maWd1cmUgLS1zcmNkaXI9YHB3ZGAiLCBuYW1lbHkgaXQgZ2V0cyBjb25mdXNlZCBieSB0aGUgLmxvIGFuZCAubGEKKyAjICAgIGZpbGVzIGl0IGZpbmRzIGluIHNyY2RpciA9IC4uLy4uL2dldHRleHQtcnVudGltZS9pbnRsLgorLVZQQVRIID0gJChzcmNkaXIpCisrI1ZQQVRIID0gJChzcmNkaXIpCisgCisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2hhcmRjb2RlX21hY3JvX3ZlcnNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhOGRkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKKworVGhpcyBwYXRjaCBoYXJkY29kZXMgaW4gdmVyc2lvbiAwLjE3IGZvciB0aGUgR0VUVEVYVF9NQUNST19WRVJTSU9OLAordGhlIHZlcnNpb24gY2hlY2sgaXMgb25seSBwYXJ0IG9mIDAuMTcgYW5kIHdpbGwgbm90IGFmZmVjdCBhbnkgMC4xNi4xCitvcGVyYXRpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvcG8ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI0OjI4Ljk1MzUyMDIzMSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI4OjI1LjQ1NTM5Njg2MiAtMDcwMAorQEAgLTI3LDYgKzI3LDkgQEAKKyAgIEFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sIGRlZmluZWQgYnkgYXV0b21ha2UKKyAgIEFDX1JFUVVJUkUoW0FNX05MU10pZG5sCisgCisrICBkbmwgSGFyZGNvZGUgdGhlIE1BQ1JPX1ZFUlNJT04gdG8gMC4xNyBmb3IgZ251dGxzCisrICBBQ19TVUJTVChbR0VUVEVYVF9NQUNST19WRVJTSU9OXSwgWzAuMTddKQorKworICAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisgICBkbmwgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgZm9yICJtYWtlIGRpc3QiIHRvIHdvcmsuCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyNDoyOC45NTM1MjAyMzEgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyODowNy41NzQzOTUxNDQgLTA3MDAKK0BAIC0xMCw2ICsxMCw5IEBACisgIworICMgT3JpZ2luOiBnZXR0ZXh0LTAuMTYKKyAKKysjIEhhcmRjb2RlIHRoaXMgdmFsdWUgZm9yIGdudXRscyBidWlsZGluZyBhZ2FpbnN0IGdwbHYyIGNvZGUKKytHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3CisrCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKKyBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCTIwMTEtMDMtMTcgMDI6MjQ6MjguOTUzNTIwMjMxIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9wby9NYWtlZmlsZS5pbi5pbgkyMDExLTAzLTE3IDAyOjI4OjA3LjU3NDM5NTE0NCAtMDcwMAorQEAgLTEwLDYgKzEwLDkgQEAKKyAjCisgIyBPcmlnaW46IGdldHRleHQtMC4xNgorIAorKyMgSGFyZGNvZGUgdGhpcyB2YWx1ZSBmb3IgZ251dGxzIGJ1aWxkaW5nIGFnYWluc3QgZ3BsdjIgY29kZQorK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTcKKysKKyBQQUNLQUdFID0gQFBBQ0tBR0VACisgVkVSU0lPTiA9IEBWRVJTSU9OQAorIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MjEwNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvbGlua2xpYl9mcm9tXzAuMTcucGF0Y2gKQEAgLTAsMCArMSw3MjAgQEAKKworIyBQdWxsZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyMgCisjIENvbW1lbnRlZCBieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDA2LTExLTI3IDA5OjAxOjU4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMTEtMDMtMTcgMDA6MzY6MDguNzEwODM2NzIwIC0wNzAwCitAQCAtNiwxMiArNiwxNCBAQAorIAorIGRubCBGcm9tIEJydW5vIEhhaWJsZS4KKyAKKy1BQ19QUkVSRVEoMi41MCkKKytBQ19QUkVSRVEoMi41NCkKKyAKKyBkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorIGRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKyBkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorIGRubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorIEFDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorQEAgLTI0LDEzICsyNiwxNiBAQAorICAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorICAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKyAgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeD0iJExJQltdTkFNRVtdX1BSRUZJWCIKKyAgIF0pCisgICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorICAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisgICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIExJQltdTkFNRVtdX1BSRUZJWD0iJGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeCIKKyAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorICAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisgICBIQVZFX0xJQltdTkFNRT15ZXMKK0BAIC00Niw2ICs1MSw4IEBACisgZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisgZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworIGRubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCisrZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCisgQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCisgWworICAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKK0BAIC04MiwxNyArODksMjQgQEAKKyAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorICAgICBMSUJbXU5BTUU9CisgICAgIExUTElCW11OQU1FPQorKyAgICBMSUJbXU5BTUVbXV9QUkVGSVg9CisrCisgICBmaQorICAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisgICBBQ19TVUJTVChbTElCXU5BTUUpCisgICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgIHVuZGVmaW5lKFtOYW1lXSkKKyAgIHVuZGVmaW5lKFtOQU1FXSkKKyBdKQorIAorIGRubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CistZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCistZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytkbmwgICBhY2xfbGliZXh0LAorK2RubCAgIGFjbF9zaGxpYmV4dCwKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgICBhY2xfaGFyZGNvZGVfZGlyZWN0LAorK2RubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgorIEFDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorIFsKKyAgIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCitAQCAtMTA5LDEyICsxMjMsMTQgQEAKKyAgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgIF0pCisgICB3bD0iJGFjbF9jdl93bCIKKy0gIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCistICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKy0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKy0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKy0gIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCistICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisrICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKysgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorKyAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJyYXJ5X25hbWVzX3NwZWMiCisrICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysgIGFjbF9oYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisgICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorICAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKK0BAIC0xMjQsMjAgKzE0MCwyNCBAQAorIGRubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKyBkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisgZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCisrZG5sIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KKyBBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBBdXRvY29uZiA+PSAyLjYxIHN1cHBvcnRzIGRvdHMgaW4gLS13aXRoIG9wdGlvbnMuCisrICBkZWZpbmUoW05fQV9NX0VdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjFdKSxbLTFdLFt0cmFuc2xpdChbJDFdLFsuXSxbX10pXSxbJDFdKV0pCisgICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgIHVzZV9hZGRpdGlvbmFsPXllcworICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgIF0pCistICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCistWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorLSAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorKyAgQUNfTElCX0FSR19XSVRIKFtsaWJdTl9BX01fRVstcHJlZml4XSwKKytbICAtLXdpdGgtbGliXU5fQV9NX0VbLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYl1OX0FfTV9FWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKyBbCisgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCitAQCAtMTU4LDYgKzE3OCw3IEBACisgICBMSUJbXU5BTUU9CisgICBMVExJQltdTkFNRT0KKyAgIElOQ1tdTkFNRT0KKysgIExJQltdTkFNRVtdX1BSRUZJWD0KKyAgIHJwYXRoZGlycz0KKyAgIGx0cnBhdGhkaXJzPQorICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorQEAgLTE5NywyNyArMjE4LDUzIEBACisgICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBzaHJleHQ9CisrICAgICAgICAgIGZpCisgICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgJiYgeyB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiOyB9OyB9OyB0aGVuCistICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKy0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgorKyAgICAgICAgICAgIGRubCBGaXJzdCBsb29rIGZvciBhIHNoYXJlZCBsaWJyYXJ5LgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKysgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKy0gICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCistICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgZmkKK0BAIC0yMjcsMjYgKzI3NCw0NCBAQAorICAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiIFwKKy0gICAgICAgICAgICAgICAgICAgICAmJiB7IHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmRsbC5hIjsgfTsgfTsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS5kbGwuYSIKKy0gICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKy0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorLSAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgIDs7CitAQCAtMjgyLDEyICszNDcsMTIgQEAKKyAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCistICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorQEAgLTMxOCwxMyArMzgzLDEzIEBACisgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkYWNsX2hhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorICAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KK0BAIC01MTIsMTggKzU3NywxOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisgICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorICAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorICAgICAgIGFsbGRpcnM9CisgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworLSAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgIGRvbmUKKy0gICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBkbmwgTm90ZTogYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCistICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgIGVsc2UKK0BAIC01MzEsNyArNTk2LDcgQEAKKyAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCistICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICAgICBkb25lCitAQCAtNjQyLDMgKzcwNyw3OSBAQAorICAgZmkKKyAgIEFDX1NVQlNUKFskMV0pCisgXSkKKysKKytkbmwgRm9yIHRob3NlIGNhc2VzIHdoZXJlIGEgdmFyaWFibGUgY29udGFpbnMgc2V2ZXJhbCAtTCBhbmQgLWwgb3B0aW9ucworK2RubCByZWZlcnJpbmcgdG8gdW5rbm93biBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzLCB0aGlzIG1hY3JvIGRldGVybWluZXMgdGhlCisrZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgorK2RubCBBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCUyhbTERBRERWQVJdLCBbTElCU1ZBTFVFXSwgW1VTRS1MSUJUT09MXSkKKytkbmwgc2V0cyBMREFERFZBUiB0byBsaW5rZXIgb3B0aW9ucyBuZWVkZWQgdG9nZXRoZXIgd2l0aCBMSUJTVkFMVUUuCisrZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCisrZG5sIG90aGVyd2lzZSBsaW5raW5nIHdpdGhvdXQgbGlidG9vbCBpcyBhc3N1bWVkLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKysgICQxPQorKyAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICBkbmwgYmluYXJ5LgorKyAgICAgIHJwYXRoZGlycz0KKysgICAgICBuZXh0PQorKyAgICAgIGZvciBvcHQgaW4gJDI7IGRvCisrICAgICAgICBpZiB0ZXN0IC1uICIkbmV4dCI7IHRoZW4KKysgICAgICAgICAgZGlyPSIkbmV4dCIKKysgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKysgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgICAgbmV4dD0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgY2FzZSAkb3B0IGluCisrICAgICAgICAgICAgLUwpIG5leHQ9eWVzIDs7CisrICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAorKyAgICAgICAgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisrICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgIG5leHQ9IDs7CisrICAgICAgICAgICAgKikgbmV4dD0gOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiIiQzIiI7IHRoZW4KKysgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisrICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfS1SJGRpciIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgVGhlIGxpbmtlciBpcyB1c2VkIGZvciBsaW5raW5nIGRpcmVjdGx5LgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlcgorKyAgICAgICAgICAgIGRubCBtdXN0IHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4KKysgICAgICAgICAgICBhbGxkaXJzPQorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZGlyIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgICAgICAkMT0iJGZsYWciCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGxpYmRpcj0iJGRpciIKKysgICAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfSRmbGFnIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrICBBQ19TVUJTVChbJDFdKQorK10pCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvY29uZmlnLnJwYXRoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAwNi0xMS0yNyAwOTowMTo1OC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAxMS0wMy0xNyAwMDozMzoyMy4zMzY1Mzk0OTAgLTA3MDAKK0BAIC0yLDcgKzIsNyBAQAorICMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisgIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisgIworLSMgICBDb3B5cmlnaHQgMTk5Ni0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisgIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisgIworQEAgLTQ3LDYgKzQ3LDE4IEBACisgZG9uZQorIGNjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAKKysjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorKworK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworKyAgY2FzZSAkY2NfdGVtcCBpbgorKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisrICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisrICAgIFwtKikgOzsKKysgICAgKikgYnJlYWs7OworKyAgZXNhYworK2RvbmUKKytjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisrCisgIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisgCisgd2w9CitAQCAtNjQsNyArNzYsMTQgQEAKKyAgICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKy0gICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorKyAgICBkYXJ3aW4qKQorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgICB4bGMqKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICA7OworICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgICB3bD0nLVdsLCcKK0BAIC03NCw3ICs5Myw3IEBACisgICAgICAgOzsKKyAgICAgbmV3c29zNikKKyAgICAgICA7OworLSAgICBsaW51eCopCisrICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgIGljYyogfCBlY2MqKQorICAgICAgICAgICB3bD0nLVdsLCcKK0BAIC0xMDAsNyArMTE5LDcgQEAKKyAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CistICAgIHNjbzMuMnY1KikKKysgICAgcmRvcyopCisgICAgICAgOzsKKyAgICAgc29sYXJpcyopCisgICAgICAgd2w9Jy1XbCwnCitAQCAtMTA4LDExICsxMjcsMTQgQEAKKyAgICAgc3Vub3M0KikKKyAgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgIDs7CistICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CisgICAgIHN5c3Y0Kk1QKikKKyAgICAgICA7OworKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisgICAgIHVuaWNvcyopCisgICAgICAgd2w9Jy1XbCwnCisgICAgICAgOzsKK0BAIC0xNDEsNiArMTYzLDEwIEBACisgICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgIHdpdGhfZ251X2xkPXllcworICAgICA7OworKyAgaW50ZXJpeCopCisrICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisrICAgIHdpdGhfZ251X2xkPXllcworKyAgICA7OworICAgb3BlbmJzZCopCisgICAgIHdpdGhfZ251X2xkPW5vCisgICAgIDs7CitAQCAtMTg5LDExICsyMTUsMTEgQEAKKyAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgIGZpCisgICAgICAgOzsKKy0gICAgaW50ZXJpeDMqKQorKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgOzsKKy0gICAgbGludXgqKQorKyAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIDoKKyAgICAgICBlbHNlCitAQCAtMjgwLDcgKzMwNiw3IEBACisgICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCistICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKK0BAIC0zNTksNyArMzg1LDcgQEAKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICA7OworLSAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICA7OworQEAgLTQxMiwxOCArNDM4LDIyIEBACisgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgOzsKKyAgICAgb3BlbmJzZCopCistICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisrICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKyAgICAgICBlbHNlCistICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKy0gICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCisrICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorICAgICAgIDs7CisgICAgIG9zMiopCitAQCAtNDcxLDcgKzUwMSw3IEBACisgICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICAgZmkKKyAgICAgICA7OworLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KikKKysgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgIDs7CisgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCitAQCAtNDg4LDMzICs1MTgsNTEgQEAKKyAKKyAjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworICMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKysjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisrIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKysjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCisrbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorIGxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCisgY2FzZSAiJGhvc3Rfb3MiIGluCisgICBhaXgzKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYWl4NCogfCBhaXg1KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBhbWlnYW9zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYmVvcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgYnNkaVs0NV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgc2hyZXh0PS5kbGwKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgIDs7CisgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICBzaHJleHQ9LmR5bGliCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZGd1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZnJlZWJzZDEqKQorICAgICA7OworLSAga2ZyZWVic2QqLWdudSkKKy0gICAgOzsKKyAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKysgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgZnJlZWJzZFsxMjNdKikKKysgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKKysgICAgICAqKQorKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKyAgIGdudSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgIGNhc2UgJGhvc3RfY3B1IGluCitAQCAtNTI4LDEwICs1NzYsMTMgQEAKKyAgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CistICBpbnRlcml4MyopCisrICBpbnRlcml4WzMtOV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorQEAgLTU0OCwzMyArNTk5LDQ2IEBACisgICAgIDs7CisgICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgICA7OworLSAgbGludXgqKQorKyAgbGludXgqIHwgaypic2QqLWdudSkKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBrbmV0YnNkKi1nbnUpCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgbmV0YnNkKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBuZXdzb3M2KQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG50by1xbngqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG9wZW5ic2QqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgIDs7CisgICBvczIqKQorICAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgICBzaHJleHQ9LmRsbAorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgIDs7CisgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc29sYXJpcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3Vub3M0KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgICA7OworICAgc3lzdjQgfCBzeXN2NC4zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBzeXN2NCpNUCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgdXRzNCopCisgICAgIDs7CitAQCAtNTgzLDYgKzY0Nyw4IEBACisgc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKyBlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKytlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyBlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorIAorIExDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorQEAgLTU5Niw2ICs2NjIsMTIgQEAKKyAjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCisgc2hsaWJleHQ9IiRzaGxpYmV4dCIKKyAKKysjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorKworKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorKworICMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS40L3BhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xOS40L3BhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTJjOTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjQvcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAoraW5zdGFsIGxpYmdldHRleHRsaWIuYSBiZWZvcmUgcmVtb3ZpbmcgaXQKKworSW4gYSBtdWx0aXBsZSBqb2IgYnVpbGQsIE1ha2VmaWxlIGNhbiBzaW11bHRhbmVvdXNseQorYmUgaW5zdGFsbGluZyBhbmQgcmVtb3ZpbmcgbGliZ2V0dGV4dGxpYi5hLiAgV2Ugc2VyaWFsaXplCit0aGUgb3BlcmF0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvZ2V0dGV4dC10b29scy9nbnVsaWItbGliL01ha2VmaWxlLmFtCisrKysgYi9nZXR0ZXh0LXRvb2xzL2dudWxpYi1saWIvTWFrZWZpbGUuYW0KK0BAIC01Nyw2ICs1NywxMCBAQCBlbmRpZgorICMgUnVsZXMgZ2VuZXJhdGVkIGFuZCBjb2xsZWN0ZWQgYnkgZ251bGliLXRvb2wuCisgaW5jbHVkZSBNYWtlZmlsZS5nbnVsaWIKKyAKKysjIGRlZmluZWQgaW4gTWFrZWZpbGUuZ251bGliIGJ1dCBtaXNzaW5nIHRoaXMgZGVwZW5kZW5jeQorKyMKKytpbnN0YWxsLWV4ZWMtY2xlYW46IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKysKKyAjIFdoaWNoIGNsYXNzZXMgdG8gZXhwb3J0IGZyb20gdGhlIHNoYXJlZCBsaWJyYXJ5LgorIE1PT1BQRkxBR1MgKz0gLS1kbGxleHBvcnQ9c3R5bGVkX29zdHJlYW0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40LzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40LzAwMDEtUEFUQ0gtRGlzYWJsZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWVmMmE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1tQQVRDSF0gRGlzYWJsZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCB0aGUgZGVwZW5kZW5jZSB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGUtbmF0aXZlIGJ1aWxkaW5nIGZhaWwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGljb252Lm00IHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2ljb252Lm00IGIvaWNvbnYubTQKK2luZGV4IDRlMzczNjMuLjM1ZjU0YmQgMTAwNjQ0CistLS0gYS9pY29udi5tNAorKysrIGIvaWNvbnYubTQKK0BAIC0xNjUsNiArMTY1LDcgQEAgQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKysjaWYgMAorICAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgICBwcm92aWRlZC4gICovCisgICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCitAQCAtMTc2LDYgKzE3Nyw3IEBAIEFDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyBdXSldLAorICAgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLCAsCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L0NPUFlJTkcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMTFkMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HCkBAIC0wLDAgKzEsNCBAQAorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L01ha2VmaWxlLmluLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDZiYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbgpAQCAtMCwwICsxLDQ2NSBAQAorIyBNYWtlZmlsZSBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDA3LCAyMDA5LTIwMTAgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+CisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorIyBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE9yaWdpbjogZ2V0dGV4dC0wLjE5CitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE5CisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorCitTRUQgPSBAU0VEQAorU0hFTEwgPSAvYmluL3NoCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKworTUtESVJfUCA9IEBNS0RJUl9QQAorCitHTVNHRk1UXyA9IEBHTVNHRk1UQAorR01TR0ZNVF9ubyA9IEBHTVNHRk1UQAorR01TR0ZNVF95ZXMgPSBAR01TR0ZNVF8wMTVACitHTVNHRk1UID0gJChHTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorTVNHRk1UXyA9IEBNU0dGTVRACitNU0dGTVRfbm8gPSBATVNHRk1UQAorTVNHRk1UX3llcyA9IEBNU0dGTVRfMDE1QAorTVNHRk1UID0gJChNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitYR0VUVEVYVF8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF9ubyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX3llcyA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVCA9ICQoWEdFVFRFWFRfJChVU0VfTVNHQ1RYVCkpCitNU0dNRVJHRSA9IG1zZ21lcmdlCitNU0dNRVJHRV9VUERBVEUgPSBATVNHTUVSR0VAIC0tdXBkYXRlCitNU0dJTklUID0gbXNnaW5pdAorTVNHQ09OViA9IG1zZ2NvbnYKK01TR0ZJTFRFUiA9IG1zZ2ZpbHRlcgorCitQT0ZJTEVTID0gQFBPRklMRVNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK1VQREFURVBPRklMRVMgPSBAVVBEQVRFUE9GSUxFU0AKK0RVTU1ZUE9GSUxFUyA9IEBEVU1NWVBPRklMRVNACitESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4uaW4gcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCiskKERJU1RGSUxFUy5jb21tb24uZXh0cmExKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEyKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEzKQorRElTVEZJTEVTID0gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycyBQT1RGSUxFUy5pbiBcCiskKFBPRklMRVMpICQoR01PRklMRVMpIFwKKyQoRElTVEZJTEVTLmV4dHJhMSkgJChESVNURklMRVMuZXh0cmEyKSAkKERJU1RGSUxFUy5leHRyYTMpCisKK1BPVEZJTEVTID0gXAorCitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKKworUE9GSUxFU0RFUFNfID0gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKK1BPRklMRVNERVBTX3llcyA9ICQoUE9GSUxFU0RFUFNfKQorUE9GSUxFU0RFUFNfbm8gPQorUE9GSUxFU0RFUFMgPSAkKFBPRklMRVNERVBTXyQoUE9fREVQRU5EU19PTl9QT1QpKQorCitESVNURklMRVNERVBTXyA9IHVwZGF0ZS1wbworRElTVEZJTEVTREVQU195ZXMgPSAkKERJU1RGSUxFU0RFUFNfKQorRElTVEZJTEVTREVQU19ubyA9CitESVNURklMRVNERVBTID0gJChESVNURklMRVNERVBTXyQoRElTVF9ERVBFTkRTX09OX1VQREFURV9QTykpCisKKyMgTWFrZXZhcnMgZ2V0cyBpbnNlcnRlZCBoZXJlLiAoRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEpCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5nbW8gLm1vIC5zZWQgLnNpbiAubm9wIC5wby1jcmVhdGUgLnBvLXVwZGF0ZQorCisucG8ubW86CisJQGVjaG8gIiQoTVNHRk1UKSAtYyAtbyAkQCAkPCI7IFwKKwkkKE1TR0ZNVCkgLWMgLW8gdC0kQCAkPCAmJiBtdiB0LSRAICRACisKKy5wby5nbW86CisJQGxhbmc9YGVjaG8gJCogfCBzZWQgLWUgJ3MsLiovLCwnYDsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfXJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAorCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLS12ZXJib3NlIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbworCisuc2luLnNlZDoKKwlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKKwltdiB0LSRAICRACisKKworYWxsOiBhbGwtQFVTRV9OTFNACisKK2FsbC15ZXM6IHN0YW1wLXBvCithbGwtbm86CisKKyMgRW5zdXJlIHRoYXQgdGhlIGdldHRleHQgbWFjcm9zIGFuZCB0aGlzIE1ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgorQ0hFQ0tfTUFDUk9fVkVSU0lPTiA9IFwKKwl0ZXN0ICIkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikiID0gIkBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiBcCisJICB8fCB7IGVjaG8gIioqKiBlcnJvcjogZ2V0dGV4dCBpbmZyYXN0cnVjdHVyZSBtaXNtYXRjaDogdXNpbmcgYSBNYWtlZmlsZS5pbi5pbiBmcm9tIGdldHRleHQgdmVyc2lvbiAkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikgYnV0IHRoZSBhdXRvY29uZiBtYWNyb3MgYXJlIGZyb20gZ2V0dGV4dCB2ZXJzaW9uIEBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiAxPiYyOyBcCisJICAgICAgIGV4aXQgMTsgXAorCSAgICAgfQorCisjICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIG9ubHkgY3JlYXRlZCB3aGVuIG5lZWRlZC4gV2hlbiB4Z2V0dGV4dCBmaW5kcyBubworIyBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgbm8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgY3JlYXRlZCAoYmVjYXVzZQorIyB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0cmFuc2xhdG9ycyB3aXRoIGVtcHR5IFBPVCBmaWxlcykuIFdlIGFzc3VtZSB0aGF0CisjIExJTkdVQVMgaXMgZW1wdHkgaW4gdGhpcyBjYXNlLCBpLmUuICQoUE9GSUxFUykgYW5kICQoR01PRklMRVMpIGFyZSBlbXB0eS4KKyMgSW4gdGhpcyBjYXNlLCBzdGFtcC1wbyBpcyBhIG5vcCAoaS5lLiBhIHBob255IHRhcmdldCkuCisKKyMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQorIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKKyMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAorIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKKyMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQorIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgorIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKKyMgY2hhbmdlZC4KK3N0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCUAkKENIRUNLX01BQ1JPX1ZFUlNJT04pCisJdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IFwKKwkgIHRlc3QgLXogIiQoR01PRklMRVMpIiB8fCAkKE1BS0UpICQoR01PRklMRVMpCisJQHRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCB7IFwKKwkgIGVjaG8gInRvdWNoIHN0YW1wLXBvIiAmJiBcCisJICBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLXBvVCAmJiBcCisJICBtdiBzdGFtcC1wb1Qgc3RhbXAtcG87IFwKKwl9CisKKyMgTm90ZTogVGFyZ2V0ICdhbGwnIG11c3Qgbm90IGRlcGVuZCBvbiB0YXJnZXQgJyQoRE9NQUlOKS5wb3QtdXBkYXRlJywKKyMgb3RoZXJ3aXNlIHBhY2thZ2VzIGxpa2UgR0NDIGNhbiBub3QgYmUgYnVpbHQgaWYgb25seSBwYXJ0cyBvZiB0aGUgc291cmNlCisjIGhhdmUgYmVlbiBkb3dubG9hZGVkLgorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzICQoRE9NQUlOKS5wb3Q7IGl0IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCisjIE5vdGUgdGhhdCAkKERPTUFJTikucG90IGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorIyBUaGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIHRoZSBwYWNrYWdlIHh5eiBpcyBhIEdOVSBvbmUgaXMgYmFzZWQgb24gdGhlCisjIGhldXJpc3RpYyB3aGV0aGVyIHNvbWUgZmlsZSBpbiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBtZW50aW9ucyAiR05VIHh5eiIuCisjIElmIEdOVSAnZmluZCcgaXMgYXZhaWxhYmxlLCB3ZSBhdm9pZCBncmVwcGluZyB0aHJvdWdoIG1vbnN0ZXIgZmlsZXMuCiskKERPTUFJTikucG90LXVwZGF0ZTogJChQT1RGSUxFUykgJChzcmNkaXIpL1BPVEZJTEVTLmluIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlwYWNrYWdlX2dudT0iJChQQUNLQUdFX0dOVSkiOyBcCisJdGVzdCAtbiAiJCRwYWNrYWdlX2dudSIgfHwgeyBcCisJICBpZiB7IGlmIChMQ19BTEw9QyBmaW5kIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsOyB0aGVuIFwKKwkJIExDX0FMTD1DIGZpbmQgLUwgJCh0b3Bfc3JjZGlyKSAtbWF4ZGVwdGggMSAtdHlwZSBmIFwKKwkJCSAgICAgICAtc2l6ZSAtMTAwMDAwMDBjIC1leGVjIGdyZXAgJ0dOVSBAUEFDS0FHRUAnIFwKKwkJCSAgICAgICAvZGV2L251bGwgJ3t9JyAnOycgMj4vZGV2L251bGw7IFwKKwkgICAgICAgZWxzZSBcCisJCSBMQ19BTEw9QyBncmVwICdHTlUgQFBBQ0tBR0VAJyAkKHRvcF9zcmNkaXIpLyogMj4vZGV2L251bGw7IFwKKwkgICAgICAgZmk7IFwKKwkgICAgIH0gfCBncmVwIC12ICdsaWJ0b29sOicgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICBwYWNrYWdlX2dudT15ZXM7IFwKKwkgICBlbHNlIFwKKwkgICAgIHBhY2thZ2VfZ251PW5vOyBcCisJICAgZmk7IFwKKwl9OyBcCisJaWYgdGVzdCAiJCRwYWNrYWdlX2dudSIgPSAieWVzIjsgdGhlbiBcCisJICBwYWNrYWdlX3ByZWZpeD0nR05VICc7IFwKKwllbHNlIFwKKwkgIHBhY2thZ2VfcHJlZml4PScnOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1uICckKE1TR0lEX0JVR1NfQUREUkVTUyknIHx8IHRlc3QgJyQoUEFDS0FHRV9CVUdSRVBPUlQpJyA9ICdAJ1BBQ0tBR0VfQlVHUkVQT1JUJ0AnOyB0aGVuIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChNU0dJRF9CVUdTX0FERFJFU1MpJzsgXAorCWVsc2UgXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKFBBQ0tBR0VfQlVHUkVQT1JUKSc7IFwKKwlmaTsgXAorCWNhc2UgYCQoWEdFVFRFWFQpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNV0gfCAwLjFbMC01XS4qIHwgMC4xNiB8IDAuMTYuWzAtMV0qKSBcCisJICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCisJICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwkgICopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLXBhY2thZ2UtbmFtZT0iJCR7cGFja2FnZV9wcmVmaXh9QFBBQ0tBR0VAIiBcCisJICAgICAgLS1wYWNrYWdlLXZlcnNpb249J0BWRVJTSU9OQCcgXAorCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAorCSAgICA7OyBcCisJZXNhYworCXRlc3QgISAtZiAkKERPTUFJTikucG8gfHwgeyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKHNyY2RpcikvJChET01BSU4pLnBvdCA+ICQoRE9NQUlOKS4xcG8gJiYgXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoRE9NQUlOKS5wbyA+ICQoRE9NQUlOKS4ycG8gJiYgXAorCSAgICBpZiBjbXAgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoRE9NQUlOKS5wbzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgJiYgXAorCSAgICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgZmk7IFwKKwl9CisKKyMgVGhpcyBydWxlIGhhcyBubyBkZXBlbmRlbmNpZXM6IHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlICQoRE9NQUlOKS5wb3QgYXQKKyMgZXZlcnkgIm1ha2UiIGludm9jYXRpb24sIG9ubHkgY3JlYXRlIGl0IHdoZW4gaXQgaXMgbWlzc2luZy4KKyMgT25seSAibWFrZSAkKERPTUFJTikucG90LXVwZGF0ZSIgb3IgIm1ha2UgZGlzdCIgd2lsbCBmb3JjZSBhbiB1cGRhdGUuCiskKHNyY2RpcikvJChET01BSU4pLnBvdDoKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgYSBQTyBmaWxlIGlmICQoRE9NQUlOKS5wb3QgaGFzIGNoYW5nZWQuCisjIE5vdGUgdGhhdCBhIFBPIGZpbGUgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKFBPRklMRVMpOiAkKFBPRklMRVNERVBTKQorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzLC4qLywsJyAtZSAncy9cLnBvJCQvLydgOyBcCisJaWYgdGVzdCAtZiAiJChzcmNkaXIpLyQke2xhbmd9LnBvIjsgdGhlbiBcCisJICB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8ICQoTUFLRSkgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIHRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCSAgZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRV9VUERBVEUpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQke2xhbmd9ICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3QiOyBcCisJICBjZCAkKHNyY2RpcikgXAorCSAgICAmJiB7IGNhc2UgYCQoTVNHTUVSR0VfVVBEQVRFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgICAgKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgICBlc2FjOyBcCisJICAgICAgIH07IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCisJZmkKKworCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6CitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKE1LRElSX1ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXJtIC1mIHN0YW1wLXBvVAorCXJtIC1mIGNvcmUgY29yZS4qICQoRE9NQUlOKS5wbyAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gKi5uZXcucG8KKwlybSAtZnIgKi5vCisKK2NsZWFuOiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gUE9URklMRVMgKi5tbworCittYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwlybSAtZiBzdGFtcC1wbyAkKEdNT0ZJTEVTKQorCitkaXN0ZGlyID0gJCh0b3BfYnVpbGRkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjoKKwl0ZXN0IC16ICIkKERJU1RGSUxFU0RFUFMpIiB8fCAkKE1BS0UpICQoRElTVEZJTEVTREVQUykKKwlAJChNQUtFKSBkaXN0MgorIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCitkaXN0Mjogc3RhbXAtcG8gJChESVNURklMRVMpCisJZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgJChET01BSU4pLnBvdCBzdGFtcC1wbyI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCisJZmk7IFwKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKKwkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwordXBkYXRlLXBvOiBNYWtlZmlsZQorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKwl0ZXN0IC16ICIkKFVQREFURVBPRklMRVMpIiB8fCAkKE1BS0UpICQoVVBEQVRFUE9GSUxFUykKKwkkKE1BS0UpIHVwZGF0ZS1nbW8KKworIyBHZW5lcmFsIHJ1bGUgZm9yIGNyZWF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLWNyZWF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLWNyZWF0ZSQkLy8nYDsgXAorCWVjaG8gIkZpbGUgJCRsYW5nLnBvIGRvZXMgbm90IGV4aXN0LiBJZiB5b3UgYXJlIGEgdHJhbnNsYXRvciwgeW91IGNhbiBjcmVhdGUgaXQgdGhyb3VnaCAnbXNnaW5pdCcuIiAxPiYyOyBcCisJZXhpdCAxCisKKyMgR2VuZXJhbCBydWxlIGZvciB1cGRhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby11cGRhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUkJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IGZpOyBcCisJdG1wZGlyPWBwd2RgOyBcCisJZWNobyAiJCRsYW5nOiI7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCRsYW5nLm5ldy5wbyI7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiB7IGNhc2UgYCQoTVNHTUVSR0UpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgICAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC03XSB8IDAuMVswLTddLiopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICAgICopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgIGVzYWM7IFwKKwkgICB9OyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworJChEVU1NWVBPRklMRVMpOgorCit1cGRhdGUtZ21vOiBNYWtlZmlsZSAkKEdNT0ZJTEVTKQorCUA6CisKKyMgUmVjcmVhdGUgTWFrZWZpbGUgYnkgaW52b2tpbmcgY29uZmlnLnN0YXR1cy4gRXhwbGljaXRseSBpbnZva2UgdGhlIHNoZWxsLAorIyBiZWNhdXNlIGV4ZWN1dGlvbiBwZXJtaXNzaW9uIGJpdHMgbWF5IG5vdCB3b3JrIG9uIHRoZSBjdXJyZW50IGZpbGUgc3lzdGVtLgorIyBVc2UgQFNIRUxMQCwgd2hpY2ggaXMgdGhlIHNoZWxsIGRldGVybWluZWQgYnkgYXV0b2NvbmYgZm9yIHRoZSB1c2UgYnkgaXRzCisjIHNjcmlwdHMsIG5vdCAkKFNIRUxMKSB3aGljaCBpcyBoYXJkd2lyZWQgdG8gL2Jpbi9zaCBhbmQgbWF5IGJlIGRlZmljaWVudC4KK01ha2VmaWxlOiBNYWtlZmlsZS5pbi5pbiBNYWtldmFycyAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyBAUE9NQUtFRklMRURFUFNACisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgICYmIEBTSEVMTEAgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQC5pbiBwby1kaXJlY3RvcmllcworCitmb3JjZToKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9hY2xvY2FsLnRnegpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRiYTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvY29uZmlnLnJwYXRoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvY29uZmlnLnJwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2MjU2MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9jb25maWcucnBhdGgKQEAgLTAsMCArMSw2ODQgQEAKKyMhIC9iaW4vc2gKKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisjIHJ1biB0aW1lIHNlYXJjaCBwYXRoIG9mIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZXhlY3V0YWJsZS4KKyMKKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFRha2VuIGZyb20gR05VIGxpYnRvb2wsIDIwMDEKKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjICAgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjICAgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvcgorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDQywgR0NDLCBMREZMQUdTLCBMRCwgd2l0aF9nbnVfbGQKKyMgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyLgorIworIyBUaGUgc2V0IG9mIGRlZmluZWQgdmFyaWFibGVzIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBzY3JpcHQuCisKKyMgS25vd24gbGltaXRhdGlvbnM6CisjIC0gT24gSVJJWCA2LjUgd2l0aCBDQz0iY2MiLCB0aGUgcnVuIHRpbWUgc2VhcmNoIHBhdGNoIG11c3Qgbm90IGJlIGxvbmdlcgorIyAgIHRoYW4gMjU2IGJ5dGVzLCBvdGhlcndpc2UgdGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGR1bXAgY29yZS4gVGhlIG9ubHkKKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisjICAgZGlyZWN0b3J5IGFuZC9vciB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorc2hyZXh0PS5zbworCitob3N0PSIkMSIKK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAoraG9zdF92ZW5kb3I9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorCitmb3IgY2NfdGVtcCBpbiAkQ0MiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DT01QSUxFUl9QSUMuCisKK3dsPQoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgd2w9Jy1XbCwnCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIDs7CisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBlY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGljYyogfCBpZm9ydCopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbGY5NSopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbmFnZm9yKikKKyAgICAgICAgICB3bD0nLVdsLC1XbCwsJworICAgICAgICAgIDs7CisgICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjb21vKQorICAgICAgICAgIHdsPSctbG9wdD0nCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgICAgICAgICAgICpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKyAgICAgICAgICAgICAgd2w9CisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqU3VuXCBDKikKKyAgICAgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICByZG9zKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgICAgICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgOzsKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgOzsKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0xJTktFUl9TSExJQlMuCisKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQoraGFyZGNvZGVfZGlyZWN0PW5vCitoYXJkY29kZV9taW51c19MPW5vCisKK2Nhc2UgIiRob3N0X29zIiBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKK2VzYWMKKworbGRfc2hsaWJzPXllcworaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAjIFVubGlrZSBsaWJ0b29sLCB3ZSB1c2UgLXJwYXRoIGhlcmUsIG5vdCAtLXJwYXRoLCBzaW5jZSB0aGUgZG9jdW1lbnRlZAorICAjIG9wdGlvbiBvZiBHTlUgbGQgaXMgY2FsbGVkIC1ycGF0aCwgbm90IC0tcnBhdGguCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4WzMtOV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgOzsKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBmaQorZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKikKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgIGVsc2UKKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0CisgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBmaQorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0CisgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBic2RpWzQ1XSopCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGlmIHsgY2FzZSAkY2NfYmFzZW5hbWUgaW4gaWZvcnQqKSB0cnVlOzsgKikgdGVzdCAiJEdDQyIgPSB5ZXM7OyBlc2FjOyB9OyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBkZ3V4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgZnJlZWJzZDIuWzAxXSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGhwdXg5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBuZXdzb3M2KQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgb3NmMyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3NmNCogfCBvc2Y1KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgICAgICBzbmkpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKyAgICAgICAgICA7OworICAgICAgICBzaWVtZW5zKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgIDs7CisgICAgICAgIG1vdG9yb2xhKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX1NZU19EWU5BTUlDX0xJTktFUi4KKyMgVW5saWtlIGxpYnRvb2wubTQsIGhlcmUgd2UgZG9uJ3QgY2FyZSBhYm91dCBfYWxsXyBuYW1lcyBvZiB0aGUgbGlicmFyeSwgYnV0CisjIG9ubHkgYWJvdXQgdGhlIG9uZSB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4gVGhpcyBpcyB0aGUgbGFzdAorIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKyMgbGlua2VyIGhhcyBzcGVjaWFsIHNlYXJjaCBydWxlcy4KK2xpYnJhcnlfbmFtZXNfc3BlYz0gICAgICAjIHRoZSBsYXN0IGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQKK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgYWl4MyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIGFpeFs0LTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBhbWlnYW9zKikKKyAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICBwb3dlcnBjKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisgICAgICBtNjhrKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnIDs7CisgICAgZXNhYworICAgIDs7CisgIGJlb3MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGJzZGlbNDVdKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLmxpYicKKyAgICA7OworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIHNocmV4dD0uZHlsaWIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBkZ3V4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBmcmVlYnNkWzIzXS4qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZ251KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBoYWlrdSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGlhNjQqKQorICAgICAgICBzaHJleHQ9LnNvCisgICAgICAgIDs7CisgICAgICBocHBhKjY0KikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpbnRlcml4WzMtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBjYXNlICRMRCBpbgorICAgICAgICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKyAgICAgICAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICAqbnRvKiB8ICpxbngqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBvczIqKQorICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHJkb3MqKQorICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN1bm9zNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIHN5c3Y0IHwgc3lzdjQuMyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjQqTVAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHRwZiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgdXRzNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKK2VzYWMKKworc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKK2VzY2FwZWRfd2w9YGVjaG8gIlgkd2wiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK3NobGliZXh0PWBlY2hvICIkc2hyZXh0IiB8IHNlZCAtZSAncyxeXC4sLCdgCitlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjPWBlY2hvICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKworTENfQUxMPUMgc2VkIC1lICdzL15cKFthLXpBLVowLTlfXSpcKT0vYWNsX2N2X1wxPS8nIDw8RU9GCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSIkZXNjYXBlZF93bCIKKworIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KK3NobGliZXh0PSIkc2hsaWJleHQiCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9IiRlc2NhcGVkX2xpYm5hbWVfc3BlYyIKKworIyBMaWJyYXJ5IG5hbWVzIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9IiRlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYyIKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9IiRoYXJkY29kZV9kaXJlY3QiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSIkaGFyZGNvZGVfbWludXNfTCIKKworRU9GCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9yZW1vdmUtcG90Y2RhdGUuc2luIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDM2YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC1uYXRpdmVfMC4xOS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNGE0NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZV8wLjE5LjQuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJNaW5pbWFsIGdldHRleHQgZm9yIHN1cHBvcnRpbmcgbmF0aXZlIGF1dG9jb25mL2F1dG9tYWtlIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIG00IG1hY3JvcyBzdWZmaWNpZW50IHRvIHN1cHBvcnQgYnVpbGRpbmcgXAorYXV0b2NvbmYvYXV0b21ha2UuIFRoaXMgcHJvdmlkZXMgYSBzaWduaWZpY2FudCBidWlsZCB0aW1lIHNwZWVkdXAgYnkgXAordGhlIHJlbW92YWwgb2YgZ2V0dGV4dC1uYXRpdmUgZnJvbSBtb3N0IGRlcGVuZGVuY3kgY2hhaW5zIChub3cgb25seSBcCituZWVkZWQgZm9yIGdldHRleHQgZm9yIHRoZSB0YXJnZXQpLiIKK1NSQ19VUkkgPSAiZmlsZTovL2FjbG9jYWwudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy5ycGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcG90Y2RhdGUuc2luIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKKyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworTElDRU5TRSA9ICJGU0YtVW5saW1pdGVkIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWIyMDY3NWNkNTE1ODQ0MmY2MDA3ZDAyMmY0NmIzNWIiCisKK2luaGVyaXQgbmF0aXZlCisKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJY3AgJHtXT1JLRElSfS8qLm00ICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vY29uZmlnLnJwYXRoICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvCisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZS5pbi5pbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vcmVtb3ZlLXBvdGNkYXRlLnNpbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xNi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjdhN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKQEAgLTAsMCArMSwxMDcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzIgorREVTQ1JJUFRJT04gPSAiR05VIGdldHRleHQgaXMgYSBzZXQgb2YgdG9vbHMgdGhhdCBwcm92aWRlcyBhIGZyYW1ld29yayB0byBoZWxwIG90aGVyIHByb2dyYW1zIHByb2R1Y2UgbXVsdGktbGluZ3VhbCBtZXNzYWdlcy4gVGhlc2UgdG9vbHMgaW5jbHVkZSBhIHNldCBvZiBjb252ZW50aW9ucyBhYm91dCBob3cgcHJvZ3JhbXMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gc3VwcG9ydCBtZXNzYWdlIGNhdGFsb2dzLCBhIGRpcmVjdG9yeSBhbmQgZmlsZSBuYW1pbmcgb3JnYW5pemF0aW9uIGZvciB0aGUgbWVzc2FnZSBjYXRhbG9ncyB0aGVtc2VsdmVzLCBhIHJ1bnRpbWUgbGlicmFyeSBzdXBwb3J0aW5nIHRoZSByZXRyaWV2YWwgb2YgdHJhbnNsYXRlZCBtZXNzYWdlcywgYW5kIGEgZmV3IHN0YW5kLWFsb25lIHByb2dyYW1zIHRvIG1hc3NhZ2UgaW4gdmFyaW91cyB3YXlzIHRoZSBzZXRzIG9mIHRyYW5zbGF0YWJsZSBhbmQgYWxyZWFkeSB0cmFuc2xhdGVkIHN0cmluZ3MuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvZ2V0dGV4dC5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTllYTMxNDRmMDRjNDFjZDJlYWRhNWQzZjQ3MmU2ZWE1IgorCitQUiA9ICJyNiIKK0RFUEVORFMgPSAidmlydHVhbC9saWJpY29udiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2dldHRleHQiCitQUk9WSURFU19jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2V0dGV4dC9nZXR0ZXh0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LXZwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoIFwKKwkgICBmaWxlOi8vZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfamF2YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlX21hY3JvX3ZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgICIKKworTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IC1scHRocmVhZCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZDlhZDI0MzAxYzZkNmIxN2VjMzA3MDRhMTNmZTEyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYmY4NTBkMWEwNzlmYjVhNjFmMGE0N2IxYTllZmQzNWViNDQwMzIyNTUzNzVlMWNlZGIwMjUzYmMyN2IzNzZkIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saXNwIC0tZGlzYWJsZS1jc2hhcnAgLS1kaXNhYmxlLW9wZW5tcCAtLXdpdGhvdXQtZW1hY3MiCithY3BhdGhzID0gJy1JICR7U30vYXV0b2NvbmYtbGliLWxpbmsvbTQvIFwKKyAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXJtIC1mICR7U30vY29uZmlnL200L2xpYnRvb2wubTQKK30KKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiBnZXR0ZXh0LXJ1bnRpbWUtZG9jIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUgPSAiJHtiaW5kaXJ9L2dldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9uZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2VudnN1YnN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2V0dGV4dC5zaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0RFVn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2ICs9ICIke2luY2x1ZGVkaXJ9L2F1dG9zcHJpbnRmLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0xJQkRFVn0iCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1mICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaW50bC5zbworfQorCisjIEFueW9uZSBpbmhlcml0aW5nIGdldHRleHQgd2lsbCBoYXZlIGJvdGggZ2V0dGV4dC1uYXRpdmUgYW5kIGdldHRleHQKKyMgYXZhaWxhYmxlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byB1c2Ugb2xkZXIgbWFjcm9zIGZyb20gdGhlIHRhcmdldCBnZXR0ZXh0IGluCisjIGEgbm9uLWdwbHYzIGJ1aWxkLCBzbyBraWxsIHRoZW0gYW5kIGxldCBkZXBlbmRlbnQgcmVjaXBlcyByZWx5IG9uCisjIGdldHRleHQtbmF0aXZlLgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInJlbW92ZV9zeXNyb290X200X21hY3JvcyIKKworcmVtb3ZlX3N5c3Jvb3RfbTRfbWFjcm9zICgpIHsKKyAgICBybSAtciAiJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsIgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE5LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViZjZjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNC5iYgpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMiCitERVNDUklQVElPTiA9ICJHTlUgZ2V0dGV4dCBpcyBhIHNldCBvZiB0b29scyB0aGF0IHByb3ZpZGVzIGEgZnJhbWV3b3JrIHRvIGhlbHAgb3RoZXIgcHJvZ3JhbXMgcHJvZHVjZSBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzLiBUaGVzZSB0b29scyBpbmNsdWRlIGEgc2V0IG9mIGNvbnZlbnRpb25zIGFib3V0IGhvdyBwcm9ncmFtcyBzaG91bGQgYmUgd3JpdHRlbiB0byBzdXBwb3J0IG1lc3NhZ2UgY2F0YWxvZ3MsIGEgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWluZyBvcmdhbml6YXRpb24gZm9yIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHRoZW1zZWx2ZXMsIGEgcnVudGltZSBsaWJyYXJ5IHN1cHBvcnRpbmcgdGhlIHJldHJpZXZhbCBvZiB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBhbmQgYSBmZXcgc3RhbmQtYWxvbmUgcHJvZ3JhbXMgdG8gbWFzc2FnZSBpbiB2YXJpb3VzIHdheXMgdGhlIHNldHMgb2YgdHJhbnNsYXRhYmxlIGFuZCBhbHJlYWR5IHRyYW5zbGF0ZWQgc3RyaW5ncy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9nZXR0ZXh0Lmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEwtMi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYgZXhwYXQiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorUFJPVklERVMgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvZ2V0dGV4dCIKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSA9ICJ2aXJ0dWFsL2dldHRleHQtbmF0aXZlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJwcm94eS1saWJpbnRsIgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dldHRleHQvZ2V0dGV4dC0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW21zZ2NhdC1jdXJzZXNdID0gIi0td2l0aC1saWJuY3Vyc2VzLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfS8uLiwtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgorCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgLWxwdGhyZWFkICIKKworU1JDX1VSSVttZDVzdW1dID0gImQzNTExYWYxZTYwNGEzNDc4OTAwZDJjMmI0YTRhNDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhYzlmMWVkMWE1ZjhjNGU2NTZhMmYzN2Y1YmE2YjllZTA0YzRkZjc5YTU3NWU4NzZiMGI2OTQ2YWE0MTdmM2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlzcGRpciBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jc2hhcnAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXNwcmludGYgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uYXRpdmUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1vcGVubXAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtYWNsIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWdsaWIgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZW1hY3MgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWdpdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJ4bWwgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGliY3JvY28gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlidW5pc3RyaW5nIFwKKyAgICAgICAgICAgICAgICAiCisKK2FjcGF0aHMgPSAnLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLWRvYyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vKiIKKworRklMRVNfZ2V0dGV4dC1ydW50aW1lID0gIiR7YmluZGlyfS9nZXR0ZXh0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vbmdldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9lbnZzdWJzdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dldHRleHQuc2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJhc3ByaW50Zi5zbyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEgXAorICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vYXV0b3NwcmludGYuaCBcCisgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmludGwuc28KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlybSAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L2NvbmZpZy5ycGF0aAorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4KKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtUmVtb3ZlLXRoZS13YXJuaW5nLWFib3V0LWRlcHJlY2F0ZWQtcGF0aHMtaW4tc2NoZW1hcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWExOTBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA0MTUzNDI1M2I2YjYxZWQ0NzY5ZWI2YTM5NjY2OThhNTBlZTczYjcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEyIEp1biAyMDE1IDE3OjA4OjQ2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSB0aGUgd2FybmluZyBhYm91dCBkZXByZWNhdGVkIHBhdGhzIGluIHNjaGVtYXMKKworU29tZSBzY2hlbWFzIGluIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgKHN1Y2ggYXMgcHJveHkgYW5kIGxvY2FsZSkKK2FyZSBzdGlsbCB1c2luZyBkZXByZWNhdGVkIHBhdGhzLCBhcyBvZiAzLjE2LjEuIFRoaXMgY2F1c2VzIHdhcm5pbmcKK21lc3NhZ2VzLCBhbmQgbWV0YS9saWIvb2Uvcm9vdGZzLnB5IGNvbXBsYWludHMgYWJvdXQgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgfCA2IC0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworaW5kZXggZTQyOTQ5Yi4uZWM3OWQ3YyAxMDA2NDQKKy0tLSBhL2dpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jCisrKysgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworQEAgLTEyMDIsMTIgKzEyMDIsNiBAQCBwYXJzZV9zdGF0ZV9zdGFydF9zY2hlbWEgKFBhcnNlU3RhdGUgICpzdGF0ZSwKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIGlmIChwYXRoICYmIChnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2FwcHMvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2Rlc2t0b3AvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL3N5c3RlbS8iKSkpCistICAgIGdfcHJpbnRlcnIgKCJ3YXJuaW5nOiBTY2hlbWEgJyVzJyBoYXMgcGF0aCAnJXMnLiAgUGF0aHMgc3RhcnRpbmcgd2l0aCAiCistICAgICAgICAgICAgICAgICInL2FwcHMvJywgJy9kZXNrdG9wLycgb3IgJy9zeXN0ZW0vJyBhcmUgZGVwcmVjYXRlZC5cbiIsIGlkLCBwYXRoKTsKKy0KKyAgIHN0YXRlLT5zY2hlbWFfc3RhdGUgPSBzY2hlbWFfc3RhdGVfbmV3IChwYXRoLCBnZXR0ZXh0X2RvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRzLCBleHRlbmRzX25hbWUsIGxpc3Rfb2YpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1jb25maWd1cmUuYWMtRG8tbm90LXVzZS1yZWFkbGluay13aGVuLWNyb3NzLWNvbXBpbGluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTM2MzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitjb21taXQgOWIzOGQ1MDdlYzM3YjNkN2Q0ZGY2MDk1ZmE3ZWQxNmI0N2QzOTlmNworQXV0aG9yOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogICBTYXQgTWFyIDI5IDIxOjEwOjQzIDIwMTQgLTA0MDAKKworICAgIGNvbmZpZ3VyZS5hYzogRG8gbm90IHVzZSByZWFkbGluayB3aGVuIGNyb3NzIGNvbXBpbGluZy4KKworICAgIERvIG5vdCB1c2UgcmVhZGxpbmsgdG8gc2V0IEFCU19HTElCX1JVTlRJTUVfTElCRElSIHdoZW4gY3Jvc3MKKyAgICBjb21waWxpbmcuICBEb2luZyBzbyBjYXVzZXMgaG9zdCBwYXRocyB0byBwb3RlbnRpYWxseSBwb2xsdXRlCisgICAgdGhlIHRhcmdldC4KKworICAgIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgdGhlIHBhdGggaXMgbm90IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBpZgorICAgIGl0IGNvbnRhaW5zIGFueSAiLi4iIHJlZmVyZW5jZXMgc28gaXQncyBub3QgY29tcGxldGVseSBjb3JyZWN0LgorCisgICAgVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc1NzVdCisgICAgU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworZGlmZiAtcnViIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjIGdsaWItMi4zOC4yL2NvbmZpZ3VyZS5hYworLS0tIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTc6MTMuMDM1NTY3MTQzIC0wNDAwCisrKysgZ2xpYi0yLjM4LjIvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTk6MDcuMDcxNTY2MDU3IC0wNDAwCitAQCAtMjc1LDcgKzI3NSwxMSBAQAorICAgICAgICAgICAgW10sCisgCSAgIFt3aXRoX3J1bnRpbWVfbGliZGlyPSIiXSkKKyBHTElCX1JVTlRJTUVfTElCRElSPSIkd2l0aF9ydW50aW1lX2xpYmRpciIKKytBU19JRihbIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllcyBdLCBbCisrQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9IiRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXIiCisrXSwgWworIEFCU19HTElCX1JVTlRJTUVfTElCRElSPSJgcmVhZGxpbmsgLW0gJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcmAiCisrXSkKKyBBQ19TVUJTVChHTElCX1JVTlRJTUVfTElCRElSKQorIEFDX1NVQlNUKEFCU19HTElCX1JVTlRJTUVfTElCRElSKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xJQl9SVU5USU1FX0xJQkRJUiwgW3Rlc3QgIngkd2l0aF9ydW50aW1lX2xpYmRpciIgIT0gIngiXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWRkLW1hcmNoLWk0ODYtaW50by1DRkxBR1MtYXV0b21hdGljYWxseS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWFjMzVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gNTUyNTNiNTViOWM2NWYzZTBlZmJiZTAzY2JhYjJhNGM0MDE0YTE2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgNSBKdWwgMjAxMiAxNTowOTo0MSArMDgwMAorU3ViamVjdDogW1BBVENIXSBhZGQgLW1hcmNoPWk0ODYgaW50byBDRkxBR1MgYXV0b21hdGljYWxseQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2dsaWIgY29uZmlndXJlIHdpbGwgY2hlY2sgaWYgY3VycmVudCBnY2MgbmVlZCAtbWFyY2g9aTQ4NiwKK3doZW4gZ2NjIG5lZWQgLW1hcmNoPWk0ODYgYnV0IENGTEFHUyBkb24ndCBoYXZlLAorZ2xpYiBjb25maWd1cmUgd2lsbCBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGFkZCAtbWFyY2g9aTQ4NiBvciBsYXRlci4KK1RoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcyxpdCdzIG5vdCBnb29kIGZvciBhdXRvbWF0aWMgYnVpbGQgc3lzdGVtLgorc28gY2hhbmdlIHRoaXMgdG8gYWRkaW5nIC1tYXJjaD1pNDg1IGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpcyBuZWVkZWQuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICA2ICsrKystLQorIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2xpYi0yLjM2LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xpYi0yLjM2LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGliLTIuMzYuMC9jb25maWd1cmUuYWMKK0BAIC0yMzc4LDcgKzIzNzgsNyBAQCBkbmwKKyBkbmwgTm90ZSB0aGF0IHRoZSBhdG9taWMgb3BzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIEdDQyBvbiB4ODYgd2hlbgorIGRubCB1c2luZyAtbWFyY2g9aTQ4NiBvciBoaWdoZXIuICBJZiB3ZSBkZXRlY3QgdGhhdCB0aGUgYXRvbWljIG9wcyBhcmUKKyBkbmwgbm90IGF2YWlsYWJsZSBidXQgd291bGQgYmUgYXZhaWxhYmxlIGdpdmVuIHRoZSByaWdodCBmbGFncywgd2Ugd2FudAorLWRubCB0byBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGZpeCB0aGVpciBDRkxBR1MuICBJdCdzIGJldHRlciB0byBkbworK2RubCB0byBhZGQgLW1hcmNoPWk0ODYgYXV0b21hdGljYWxseSB0byBmaXggdGhlaXIgQ0ZMQUdTLiAgSXQncyBiZXR0ZXIgdG8gZG8KKyBkbmwgdGhhdCB0aGVuIHRvIHNpbGVudGx5IGZhbGwgYmFjayBvbiBlbXVsYXRlZCBhdG9taWMgb3BzIGp1c3QgYmVjYXVzZQorIGRubCB0aGUgdXNlciBoYWQgdGhlIHdyb25nIGJ1aWxkIGVudmlyb25tZW50LgorCitAQCAtMjQwMSw3ICsyNDAxLDggQEAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb2NrLWZyZWUgYXRvbWljIGludAorICAgICAgICAgQUNfVFJZX0NPTVBJTEUoW10sCisgICAgICAgICAgICAgICAgICAgICAgICBbdm9sYXRpbGUgaW50IGF0b21pYyA9IDI7XAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKCZhdG9taWMsIDIsIDMpO10sCistICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFtHTGliIG11c3QgYmUgYnVpbGQgd2l0aCAtbWFyY2g9aTQ4NiBvciBsYXRlci5dKV0sCisrICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX1dBUk4oW0dMaWIgbXVzdCBiZSBidWlsZCB3aXRoIC1tYXJjaD1pNDg2IG9yIGxhdGVyLl0pCisrICAgICAgICAgICAgICAgICAgICAgICBTQVZFX0NGTEFHUz0iJHtTQVZFX0NGTEFHU30gLW1hcmNoPWk0ODYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorICAgICAgICAgQ0ZMQUdTPSIke1NBVkVfQ0ZMQUdTfSIKKyAgICAgICBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FsbG93LXJ1bi1tZWRpYS1zZFgtZHJpdmUtbW91bnQtaWYtdXNlcm5hbWUtcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDBjMDA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBjNTNlOTRhNTIwYjU3M2FhMGRjZjEyOTAzZTk1NjNmZThiYWRjMzRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyaXVzIEF2cmFtIDxtYXJpdXMuYXZyYW1AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAxMjoxMDo0MSArMDMwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyAvcnVuL21lZGlhL3NkWCBkcml2ZSBtb3VudCBpZiB1c2VybmFtZSByb290CisKK0luIGNhc2UgdGhhdCB0aGUgdXNlcm5hbWUgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gaXMgcm9vdAordGhlIGRyaXZlcyBhcmUgZGlyZWN0bHkgbW91bnRlZCBpbiAvcnVuL21lZGlhL3NkWCBhbmQKK25vdCAvcnVuL21lZGlhLzx1c2VybmFtZT4vc2RYIGFzIHRoZSBmdW5jdGlvbgorZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5KCkgZXhwZWN0cy4KKworV2l0aG91dCB0aGlzIGNoYW5nZSBVU0Igc3RpY2sgbW91bnRzIGFyZSBub3QgYWNjZXNpYmxlIGZyb20KK2dyYXBoaWNhbCBhcHBsaWNhdGlvbnMgc3VjaCBhcyB0aGUgRmlsZSBNYW5hZ2VyIChwY21hbmZtKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcml1cyBBdnJhbSA8bWFyaXVzLmF2cmFtQGludGVsLmNvbT4KKy0tLQorIGdpby9ndW5peG1vdW50cy5jIHwgICAgNSArKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dpby9ndW5peG1vdW50cy5jIGIvZ2lvL2d1bml4bW91bnRzLmMKK2luZGV4IDQ5OTkzNTQuLmY2YzE0NzIgMTAwNjQ0CistLS0gYS9naW8vZ3VuaXhtb3VudHMuYworKysrIGIvZ2lvL2d1bml4bW91bnRzLmMKK0BAIC0yMTM2LDYgKzIxMzYsMTEgQEAgZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5IChHVW5peE1vdW50RW50cnkgKm1vdW50X2VudHJ5KQorICAgICAgICAgICBtb3VudF9wYXRoW3NpemVvZiAoIi9ydW4vbWVkaWEvIikgLSAxICsgdXNlcl9uYW1lX2xlbl0gPT0gJy8nKQorICAgICAgICAgaXNfaW5fcnVudGltZV9kaXIgPSBUUlVFOworIAorKyAgICAgIC8qIEFsbG93IG5vIHVzZXJuYW1lIGluIHBhdGggaW4gL3J1bi9tZWRpYSBpZiBjdXJyZW50IHVzZXIgaXMgcm9vdCAqLworKyAgICAgIGlmIChzdHJjbXAodXNlcl9uYW1lLCAicm9vdCIpID09IDAgJiYKKysgICAgICAgICAgc3RybmNtcCAobW91bnRfcGF0aCwgIi9ydW4vbWVkaWEvIiwgc2l6ZW9mKCJydW4vbWVkaWEiKSkgPT0gMCkKKysgICAgICAgIGlzX2luX3J1bnRpbWVfZGlyID0gVFJVRTsKKysKKyAgICAgICBpZiAoaXNfaW5fcnVudGltZV9kaXIgfHwgZ19zdHJfaGFzX3ByZWZpeCAobW91bnRfcGF0aCwgIi9tZWRpYS8iKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgY2hhciAqcGF0aDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDY5YTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDFjNTcxODY0OGQ0OWU3OTVlZmVlOTFjMjIwYTJiZjkzODZjMTg0ZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDI4IEFwciAyMDEyIDE4OjI0OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogdXNlICRob3N0X2FsaWFzLWxpYnRvb2wgaW5zdGVhZCBvZiBsaWJ0b29sCisgZGlyZWN0bHkKKworUG9reSByZW5hbWVzIGxpYnRvb2wgdG8gJGhvc3RfYWxpYXMtbGlidG9vbC4KKy4vJGhvc3RfYWxpYXMtbGlidG9vbCBpc24ndCBjcmVhdGVkIHVudGlsIGFmdGVyIGNvbmZpZ3VyZSBydW5zIHdpdGgKK2xpYnRvb2wgPj0gMi4yLjIKK3NvIHdlIGNhbid0IGNhbGwgIyBpdCBhdCB0aGlzIHBvaW50LiBXZSBjYW4gc2FmZWx5IGFzc3VtZSBhIHZlcnNpb24gaXMKK2F2YWlsYWJsZQorZnJvbSBQQVRIIHRob3VnaAorCitSZWJhc2VkIHRvIGdsaWItMi4yNy4zIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitSZWJhc2VkIHRvIGdsaWItMi4zMi4xIGJ5IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA4ICsrKystLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE2NDc4YzYuLjlhOTNkNjAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0NzAsNyArMTQ3MCw3IEBAIGlmIHRlc3QgeCIkZ2xpYl9uYXRpdmVfd2luMzIiID0geHllczsgdGhlbgorICAgR19NT0RVTEVfTERGTEFHUz0KKyBlbHNlCisgICBleHBvcnQgU0VECistICBHX01PRFVMRV9MREZMQUdTPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrICBHX01PRFVMRV9MREZMQUdTPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgZmkKKyBkbmwgR19NT0RVTEVfSU1QTD0gZG9uJ3QgcmVzZXQsIHNvIGNtZC1saW5lIGNhbiBvdmVycmlkZQorIEdfTU9EVUxFX05FRURfVVNDT1JFPTAKK0BAIC0xNTM1LDkgKzE1MzUsOSBAQCBpZiB0ZXN0ICIkR19NT0RVTEVfSU1QTCIgPSAiR19NT0RVTEVfSU1QTF9ETCI7IHRoZW4KKyAJTERGTEFHUz0iJExERkxBR1MgJEdfTU9EVUxFX0xERkxBR1MiCisgZG5sICoqKiBjaGVjayBmb3IgT1NGMS81LjAgUlRMRF9HTE9CQUwgYnJva2VubmVzcworIAllY2hvICJ2b2lkIGdsaWJfcGx1Z2luX3Rlc3Qodm9pZCkgeyB9IiA+IHBsdWdpbi5jCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7Q1BQRkxBR1N9IC1jIC1vIHBsdWdpbi5sbyBwbHVnaW4uYyA+L2Rldi9udWxsIDI+JjEKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLW1vZGU9bGluayAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtMREZMQUdTfSAtbW9kdWxlIC1vIHBsdWdpbi5sYSAtZXhwb3J0LWR5bmFtaWMgXAorIAkJLXNocmV4dCAiLm8iIC1hdm9pZC12ZXJzaW9uIHBsdWdpbi5sbyBcCisgCQktcnBhdGggL2RvbnQvY2FyZSA+L2Rldi9udWxsIDI+JjEKK0BAIC0xNjE0LDcgKzE2MTQsNyBAQCBmaQorIAorIEFDX01TR19DSEVDS0lORyhmb3IgdGhlIHN1ZmZpeCBvZiBtb2R1bGUgc2hhcmVkIGxpYnJhcmllcykKKyBleHBvcnQgU0VECistc2hyZXh0X2NtZHM9YC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorK3NocmV4dF9jbWRzPWAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWcgfCBncmVwICdec2hyZXh0X2NtZHM9J2AKKyBldmFsICRzaHJleHRfY21kcworIG1vZHVsZT15ZXMgZXZhbCBzdGRfc2hyZXh0PSRzaHJleHRfY21kcworICMgY2hvcCB0aGUgaW5pdGlhbCBkb3QKKy0tIAorMS43LjguNgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTcxMTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitSZW5hbWUgJ3JhbmQnIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZsaWN0LgorCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KKworZGlmZiAtdSBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmN+IGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYworLS0tIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEyLTExLTI2IDE3OjUyOjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEzLTAyLTA4IDE0OjI0OjEwLjA1MjQ3NzU0NiArMDEwMAorQEAgLTksNyArOSw3IEBACisgI2RlZmluZSBNWV9JU19URVNUX0NMQVNTKHRjbGFzcykgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKCh0Y2xhc3MpLCBHX1RZUEVfVEVTVCkpCisgI2RlZmluZSBNWV9URVNUX0dFVF9DTEFTUyh0ZXN0KSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKHRlc3QpLCBHX1RZUEVfVEVTVCwgR1Rlc3RDbGFzcykpCisgCistc3RhdGljIEdSYW5kICpyYW5kOworK3N0YXRpYyBHUmFuZCAqZ3JhbmQ7CisgCisgdHlwZWRlZiBzdHJ1Y3QgX0dUZXN0IEdUZXN0OworIHR5cGVkZWYgc3RydWN0IF9HVGVzdENsYXNzIEdUZXN0Q2xhc3M7CitAQCAtODQsNyArODQsNyBAQAorICAgICAgIE5VTEwKKyAgICAgfTsKKyAKKy0gICAgcmFuZCA9IGdfcmFuZF9uZXcoKTsKKysgICAgZ3JhbmQgPSBnX3JhbmRfbmV3KCk7CisgCisgICAgIHRlc3RfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdfVFlQRV9PQkpFQ1QsICJHVGVzdCIsCisgICAgICAgICAmdGVzdF9pbmZvLCAwKTsKK0BAIC0yMTgsNyArMjE4LDcgQEAKKyBzdGF0aWMgdm9pZAorIG15X3Rlc3RfZG9fcHJvcCAoR1Rlc3QgKiB0ZXN0KQorIHsKKy0gIHRlc3QtPnZhbHVlID0gZ19yYW5kX2ludCAocmFuZCk7CisrICB0ZXN0LT52YWx1ZSA9IGdfcmFuZF9pbnQgKGdyYW5kKTsKKyAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHRlc3QpLCAidGVzdC1wcm9wIik7CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItMi4wLWNvbmZpZ3VyZS1yZWFkbGluay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzU5ZDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorY29uZmlndXJlLmFjOiBjaGFuZ2UgcmVhZGxpbmsgLWYgdG8gLW0KKworQ2hhbmdlICJyZWFkbGluayAtZiIgdG8gInJlYWRsaW5rIC1tIiBzaW5jZSAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyCittYXkgbm90IGV4aXN0LgorCitUaGlzIHBhdGNoIHNob3VsZCBnbyB0byB0aGUgdXBzdHJlYW0sIEkgd2lsbCBzZW5kIGl0IHNvb25lci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3MSw3ICsyNzEsNyBAQCBBQ19BUkdfV0lUSChydW50aW1lLWxpYmRpciwKKyAgICAgICAgICAgIFtdLAorIAkgICBbd2l0aF9ydW50aW1lX2xpYmRpcj0iIl0pCisgR0xJQl9SVU5USU1FX0xJQkRJUj0iJHdpdGhfcnVudGltZV9saWJkaXIiCistQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9ImByZWFkbGluayAtZiAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyYCIKKytBQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iYHJlYWRsaW5rIC1tICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXJgIgorIEFDX1NVQlNUKEdMSUJfUlVOVElNRV9MSUJESVIpCisgQUNfU1VCU1QoQUJTX0dMSUJfUlVOVElNRV9MSUJESVIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTElCX1JVTlRJTUVfTElCRElSLCBbdGVzdCAieCR3aXRoX3J1bnRpbWVfbGliZGlyIiAhPSAieCJdKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQzNTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKKyMgYW4gdmVyeSBvbGQgcGF0Y2ggY2hlcnJ5LXBpY2tlZCBpbiBldmVyeSBnbGliLTIuMCBwYXRjaCBkaXJlY3RvcnkuIFRoZSBlYXJsaWVzdCBjb250YWluZXIKKyMgZm9yIGl0IGlzIDIuNi41IGluIE9FLiBUaGUgZWFybGllc3QgY29tbWl0IGZvciBpdCBpcyBjOGU1NzAyMTI3ZTUwN2U4MmU2ZjY4YTRiOGM1NDY4MDNhY2NlYTlkCisjIGluIE9FIHNpZGUgd2hpY2ggcG9ydHMgZnJvbSBwcmV2aW91cyBiaXRrZWVwZXIgU0NNLiBJbiBPRSBzaWRlIGl0J3Mgb25seSB1c2VkIHRpbCAyLjEyLjQuCisjCisjIGtlZXAgaXQgc2luY2UgaXQncyBhbHdheXMgY2xlYW5lciB0byBub3QgaGFyZGNvZGUgZGVzdGluYXRpb24gcGF0aC4gVXNlIEBkYXRhZGlyQCBpcyBtb3JlCisjIHBvcnRhYmxlIGhlcmUuIG1hcmsgZm9yIHVwc3RyZWFtCisjCisjIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMDYvMjUvMjAxMAorIyBSZWJhc2VkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+LCAxMS8xNi8yMDEwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluIGdsaWItMi4yNy4zL2dsaWItZ2V0dGV4dGl6ZS5pbgorLS0tIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMDktMDQtMDEgMDc6MDQ6MjAuMDAwMDAwMDAwICswODAwCisrKysgZ2xpYi0yLjI3LjMvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMTAtMTEtMTYgMTI6NTU6MDYuODc0NjA1OTE2ICswODAwCitAQCAtNTIsNyArNTIsNyBAQAorIGRhdGFkaXI9QGRhdGFkaXJACisgZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorIAorLWdldHRleHRfZGlyPSRwcmVmaXgvc2hhcmUvZ2xpYi0yLjAvZ2V0dGV4dAorK2dldHRleHRfZGlyPUBkYXRhZGlyQC9nbGliLTIuMC9nZXR0ZXh0CisgCisgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgIGNhc2UgIiQxIiBpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9wdGVzdC1wYXRocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiZTAyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorSW5zdGVhZCBvZiB3cml0aW5nIHRoZSB0ZW1wb3JhcnkgbWFwcGluZyBmaWxlcyBpbiB0aGUgbWFwcGVkZmlsZSB0ZXN0IHRvIHRoZQordXNlciBydW50aW1lIGRpcmVjdG9yeSwgd3JpdGUgdGhlbSB0byAkVE1QLiAgVGhlIHJ1bnRpbWUgZGlyZWN0b3J5IG1heSBub3QKK2N1cnJlbnRseSBleGlzdCBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBvbiBhIG5vbi1kZXNrdG9wIHN5c3RlbSBhbmQgdGhlIHRlc3QKK2RvZXNuJ3QgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dsaWIvdGVzdHMvbWFwcGVkZmlsZS5jIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK2luZGV4IDQwZTBlNjAuLjI3YTI0YmUgMTAwNjQ0CistLS0gYS9nbGliL3Rlc3RzL21hcHBlZGZpbGUuYworKysrIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK0BAIC04MSw3ICs4MSw3IEBAIHRlc3Rfd3JpdGFibGUgKHZvaWQpCisgICBjb25zdCBnY2hhciAqbmV3ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXoiOworICAgZ2NoYXIgKnRtcF9jb3B5X3BhdGg7CisgCistICB0bXBfY29weV9wYXRoID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9ydW50aW1lX2RpciAoKSwgImdsaWItdGVzdC00MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpOworKyAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3RtcF9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKyAKKyAgIGdfZmlsZV9nZXRfY29udGVudHMgKGdfdGVzdF9nZXRfZmlsZW5hbWUgKEdfVEVTVF9ESVNULCAiNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKSwgJmNvbnRlbnRzLCAmbGVuLCAmZXJyb3IpOworICAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKK0BAIC0xMjUsNyArMTI1LDcgQEAgdGVzdF93cml0YWJsZV9mZCAodm9pZCkKKyAgIGludCBmZDsKKyAgIGdjaGFyICp0bXBfY29weV9wYXRoOworIAorLSAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfcnVudGltZV9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKysgIHRtcF9jb3B5X3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF90bXBfZGlyICgpLCAiZ2xpYi10ZXN0LTQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCk7CisgCisgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzIChnX3Rlc3RfZ2V0X2ZpbGVuYW1lIChHX1RFU1RfRElTVCwgIjQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCksICZjb250ZW50cywgJmxlbiwgJmVycm9yKTsKKyAgIGdfYXNzZXJ0X25vX2Vycm9yIChlcnJvcik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGFlMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBnbGliCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3VjbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTU0ZmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC91Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRml4IERBVEFESVJOQU1FIG9uIHVjbGliYy9MaW51eAorCit0cmFuc2xhdGlvbiBmaWxlcyBhcmUgYWx3YXlzIGluc3RhbGxlZCB1bmRlciBQUkVGSVgvc2hhcmUvbG9jYWxlIGluIHVjbGliYworYmFzZWQgc3lzdGVtcyB0aGVyZWZvcmUgbGV0cyBzZXQgREFUQURJUk5BTUUgdG8gInNoYXJlIi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdsaWItMi4zOC4yL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWItMi4zOC4yLm9yaWcvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00CTIwMTMtMTEtMDcgMDc6Mjk6MTMuMDAwMDAwMDAwIC0wODAwCisrKysgZ2xpYi0yLjM4LjIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00CTIwMTQtMDMtMTUgMTQ6NTE6NTQuNzEyMTM1NjQ0IC0wNzAwCitAQCAtMjM5LDcgKzIzOSw3IEBACisgCSAgICAgIFtDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICAgICAgREFUQURJUk5BTUU9bGliXSkKKyAJICAgIDs7CistCSAgICAqLSotb3BlbmJzZCopCisrCSAgICAqLSotb3BlbmJzZCogfCAqLSotbGludXgtdWNsaWJjKikKKyAJICAgIENBVE9CSkVYVD0ubW8KKyAgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZQorIAkgICAgOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi40NC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzZDM2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi40NC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZ2xpYi5pbmMKKworUEUgPSAiMSIKKworU0hSVF9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vZ2xpYi8ke1NIUlRfVkVSfS9nbGliLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsaWItMi4wLWNvbmZpZ3VyZS1yZWFkbGluay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHRlc3QtcGF0aHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjgzZWZiYTQ3MjJhOTY3NGI5NzQzN2QxZDk5YWY3OWRiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg4MTFkZWFjYWY4YTUwM2QwYTliNzAxNzc3ZWEwNzljYTZhNDI3N2JlMTBlM2Q3MzBkMjExMjczNWQ1ZWNhMDciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJmNzkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYwpAQCAtMCwwICsxLDEwNCBAQAorU1VNTUFSWSA9ICJBIGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTGliIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdHkgbGlicmFyeSwgd2hpY2ggcHJvdmlkZXMgbWFueSB1c2VmdWwgZGF0YSB0eXBlcywgbWFjcm9zLCB0eXBlIGNvbnZlcnNpb25zLCBzdHJpbmcgdXRpbGl0aWVzLCBmaWxlIHV0aWxpdGllcywgYSBtYWluIGxvb3AgYWJzdHJhY3Rpb24sIGFuZCBzbyBvbi4iCitIT01FUEFHRSA9ICJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2xpYi8iCisKKyMgcGNyZSBpcyB1bmRlciBCU0Q7CisjIGRvY3MvcmVmZXJlbmNlL0NPUFlJTkcgaXMgd2l0aCBhICdwdWJsaWMgZG9tYWknLWxpa2UgbGljZW5zZSEKK0xJQ0VOU0UgPSAiTEdQTHYyKyAmIEJTRCAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xpYi9nbGliLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YjRmMGY0YTM5OWMxOWU1ZWJiMjBjMzFiNzlkNmJjMzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ21vZHVsZS9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbW9kdWxlL2dtb2R1bGUuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1iNGYwZjRhMzk5YzE5ZTVlYmIyMGMzMWI3OWQ2YmMzMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGliL3BjcmUvQ09QWUlORzttZDU9MjY2ZWJjM2ZmNzRlZTljZTZmYWQ2NTU3NzY2N2MwZjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xpYi9wY3JlL3BjcmUuaDtiZWdpbmxpbmU9MTE7ZW5kbGluZT0zNTttZDU9ZGUyN2YyYmY2MzNkMjBhMmI3YWYwYjE5ODM0MjMyODMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9yZWZlcmVuY2UvQ09QWUlORzttZDU9ZjUxYTUxMDBjMTdhZjZiYWUwMDczNWNkNzkxZTFmY2MiCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCitTRUNUSU9OID0gImxpYnMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgdmlydHVhbC9saWJpY29udiBsaWJmZmkgemxpYiIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyBkYnVzJywgJycsIGQpfSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInBrZ2NvbmZpZy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUgbGliZmZpLW5hdGl2ZSB6bGliLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1saWJ0b29sIG5hdGl2ZXNkay1nZXR0ZXh0IG5hdGl2ZXNkay1saWJmZmkgbmF0aXZlc2RrLXpsaWIgJHtCUE59LW5hdGl2ZSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXV0aWxzICR7UE59LWJhc2gtY29tcGxldGlvbiAke1BOfS1jb2RlZ2VuIgorCitMRUFEX1NPTkFNRSA9ICJsaWJnbGliLTIuMC4qIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9LyogJHtkYXRhZGlyfS9nbGliLTIuMC9nZXR0ZXh0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IGd0ay1kb2MgcGtnY29uZmlnIHB0ZXN0LWdub21lCisKK1MgPSAiJHtXT1JLRElSfS9nbGliLSR7UFZ9IgorCitDT1JFQ09ORiA9ICItLWRpc2FibGUtZHRyYWNlIC0tZGlzYWJsZS1mYW0gLS1kaXNhYmxlLWxpYmVsZiAtLWRpc2FibGUtc3lzdGVtdGFwIC0tZGlzYWJsZS1tYW4iCisKK1BSSU5URiA9ICItLWVuYWJsZS1pbmNsdWRlZC1wcmludGY9bm8iCitQUklOVEZfZGFyd2luID0gIi0tZW5hYmxlLWluY2x1ZGVkLXByaW50Zj15ZXMiCitQUklOVEZfbWluZ3czMiA9ICItLWVuYWJsZS1pbmNsdWRlZC1wcmludGY9eWVzIgorRVhUUkFfT0VDT05GID0gIiR7UFJJTlRGfSAke0NPUkVDT05GfSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiJHtDT1JFQ09ORn0gLS1kaXNhYmxlLXNlbGludXgiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtbGliaWNvbnY9Z251IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLiosIyEke1VTUkJJTlBBVEh9L2VudiBweXRob24sJyAke1N9L2dpby9nZGJ1cy0yLjAvY29kZWdlbi9nZGJ1cy1jb2RlZ2VuLmluCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9ICR7bGliZGlyfS9naW8gJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2V0dGV4dC9ta2luc3RhbGxkaXJzICR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dsaWItMi4wL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliKiR7U09MSUJTREVWfSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vbW9kdWxlcy8qLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2RhdGFkaXJ9L2dsaWItMi4wL2dkYiAke2RhdGFkaXJ9L2dkYiBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vbW9kdWxlcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2xpYi0yLjAvaW5zdGFsbGVkLXRlc3RzL2dsaWIvLmRlYnVnIgorRklMRVNfJHtQTn0tY29kZWdlbiA9ICIke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weSIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbiIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCitVU0VfTkxTID0gInllcyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9ndGVzdGVyLXJlcG9ydCBdOyB0aGVuCisJCXNlZCAke0R9JHtiaW5kaXJ9L2d0ZXN0ZXItcmVwb3J0IC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob258JworCWZpCisKKwkjIFJlbW92ZSBzb21lIHVucGFja2FnZWQgZmlsZXMKKwlybSAtZiAke0R9JHtkYXRhZGlyfS9nbGliLTIuMC9jb2RlZ2VuLyoucHljCisJcm0gLWYgJHtEfSR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi8qLnB5bworCisJIyBTb21lIGRpc3Ryb3MgaGF2ZSBib3RoIC9iaW4vcGVybCBhbmQgL3Vzci9iaW4vcGVybCwgYnV0IHdlIHNldCBwZXJsIGxvY2F0aW9uCisJIyBmb3IgdGFyZ2V0IGFzIC91c3IvYmluL3BlcmwsIHNvIGZpeCBpdCB0byAvdXNyL2Jpbi9wZXJsLgorCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9nbGliLW1rZW51bXMgXTsgdGhlbgorCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L2dsaWItbWtlbnVtcworCWZpCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJcCisgICAgICAgICAgICBnbm9tZS1kZXNrdG9wLXRlc3RpbmcgXAorICAgICAgICAgICAgdHpkYXRhIFwKKyAgICAgICAgICAgIHR6ZGF0YS1hbWVyaWNhcyBcCisgICAgICAgICAgICB0emRhdGEtYXNpYSBcCisgICAgICAgICAgICB0emRhdGEtZXVyb3BlIFwKKyAgICAgICAgICAgIHR6ZGF0YS1wb3NpeCBcCisgICAgICAgICAgICBweXRob24tcHlnb2JqZWN0IFwKKyAgICAgICAgICAgIHB5dGhvbi1kYnVzIFwKKyAgICAgICAgICAgIHNoYXJlZC1taW1lLWluZm8gXAorICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjID0gIlwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LXV0Zi0xNiBcCisgICAgICAgICAgICBnbGliYy1jaGFybWFwLXV0Zi04IFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWNwMTI1NSBcCisgICAgICAgICAgICBnbGliYy1jaGFybWFwLWNwMTI1NSBcCisgICAgICAgICAgICBnbGliYy1nY29udi11dGYtMzIgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtdXRmLTcgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtZXVjLWpwIFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWlzbzg4NTktMSBcCisgICAgICAgICAgICBnbGliYy1nY29udi1pc284ODU5LTE1IFwKKyAgICAgICAgICAgIGdsaWJjLWNoYXJtYXAtaW52YXJpYW50IFwKKyAgICAgICAgICAgIGdsaWJjLWxvY2FsZWRhdGEtdHJhbnNsaXQtY2prLXZhcmlhbnRzIFwKKyAgICAgICAgICAgIgorCitJTlNBTkVfU0tJUF8ke1BOfS1wdGVzdCArPSAibGliZGlyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLW5ldHdvcmtpbmcvZ2xpYi1uZXR3b3JraW5nXzIuNDQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MWI3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ0LjAuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJHTGliIG5ldHdvcmtpbmcgZXh0ZW5zaW9ucyIKK0RFU0NSSVBUSU9OID0gImdsaWItbmV0d29ya2luZyBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGNlcnRhaW4gR0xpYiBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGRpcmVjdGx5IGluIEdMaWIgaXRzZWxmIGJlY2F1c2Ugb2YgdGhlaXIgZGVwZW5kZW5jaWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9nbGliLW5ldHdvcmtpbmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNjk4OWIyMGNmM2IyNmRkNWFlMjcyZTA0YTlhY2IwYjMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4ZjhhMzQwZDNiYTk5YmZkZWYzOGI2NTNkYTkyOTY1MmVhNjY0MGUyNzk2OWQyOWY3YWM1MWZiYmUxMWE0MzQ2IgorCitQQUNLQUdFQ09ORklHID8/PSAiY2EtY2VydGlmaWNhdGVzIGdudXRscyIKKworIyBObyBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIGl0IHdvcmtzIHdpdGhvdXQgY2EtY2VydGlmaWNhdGVzIGluc3RhbGxlZAorUEFDS0FHRUNPTkZJR1tjYS1jZXJ0aWZpY2F0ZXNdID0gIi0td2l0aC1jYS1jZXJ0aWZpY2F0ZXM9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCwtLXdpdGhvdXQtY2EtY2VydGlmaWNhdGVzIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW2xpYnByb3h5XSA9ICItLXdpdGgtbGlicHJveHksLS13aXRob3V0LWxpYnByb3h5LGxpYnByb3h5IgorUEFDS0FHRUNPTkZJR1twa2NzMTFdID0gIi0td2l0aC1wa2NzMTEsLS13aXRob3V0LXBrY3MxMSxwMTEta2l0IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWdub21lLXByb3h5IgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5zbyAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy8uZGVidWcvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYmdpbyouYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZS9maXhfZm9yX2NlbnRvc181LjgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NmE0ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisKK1RoaXMgaXMgYSBoYWNrIHRvIGZpeCBidWlsZGluZyB0aGUgbG9jYWxlIGJpdHMgb24gYW4gb2xkZXIKK0NlbnRPcyA1LlggbWFjaGluZQorCitJbmRleDogZ2l0L2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKKysrKyBnaXQub3JpZy9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKK0BAIC0xOSw2ICsxOSw4IEBACisgI2lmbmRlZiBfTERfQ09ORklHX0gKKyAjZGVmaW5lIF9MRF9DT05GSUdfSAkxCisgCisrI2RlZmluZSBEVU1NWV9MT0NBTEVfVAorKworIC8qIFVzZSB0aGUgaW50ZXJuYWwgdGV4dGRvbWFpbiB1c2VkIGZvciBsaWJjIG1lc3NhZ2VzLiAgKi8KKyAjZGVmaW5lIFBBQ0tBR0UgX2xpYmNfaW50bF9kb21haW5uYW1lCisgI2lmbmRlZiBWRVJTSU9OCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTNlY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yMi5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIkNyb3NzIGxvY2FsZSBnZW5lcmF0aW9uIHRvb2wgZm9yIGdsaWJjIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbGliYy5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMLTIuMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworCitpbmhlcml0IG5hdGl2ZQoraW5oZXJpdCBhdXRvdG9vbHMKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vJHtQTn06JHtGSUxFX0RJUk5BTUV9L2dsaWJjOiIKKworQlJBTkNIID89ICJyZWxlYXNlLyR7UFZ9L21hc3RlciIKK0dMSUJDX0dJVF9VUkkgPz0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9nbGliYy5naXQiCisKK1NSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtCUkFOQ0h9O25hbWU9Z2xpYmMgXAorICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL2tyYWovbG9jYWxlZGVmO2JyYW5jaD1tYXN0ZXI7bmFtZT1sb2NhbGVkZWY7ZGVzdHN1ZmZpeD1naXQvbG9jYWxlZGVmIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaCBcCisgICAgICAgICAgICR7RUdMSUJDUEFUQ0hFU30gXAorIgorRUdMSUJDUEFUQ0hFUyA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaCBcCisiCisKK1NSQ1JFVl9nbGliYyA/PSAiYTM0ZDFjNmFmYzg2NTIxZDZhZDE3NjYyYTNiNTM2MmQ4NDgxNTE0YyIKK1NSQ1JFVl9sb2NhbGVkZWYgPz0gImM4MzMzNjczNDhkMzlkYWQ3YmEwMTg5OTBiZmRhZmZhZWM4ZTllZDMiCisKKyMgTWFrZXMgZm9yIGEgcmF0aGVyIGxvbmcgcmV2ICgyMiBjaGFyYWN0ZXJzKSwgYnV0Li4uCisjCitTUkNSRVZfRk9STUFUID0gImdsaWJjX2xvY2FsZWRlZiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1nbGliYz0ke1N9IgorQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSAtc3RkPWdudTk5IC1ESVNfSU5cKHhcKT0nMCciCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJJHtTfS9sb2NhbGVkZWYvY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQorCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vbG9jYWxlZGVmICR7RH0ke2JpbmRpcn0vY3Jvc3MtbG9jYWxlZGVmCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbGxhdGVyYWwuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDY1NWViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYwpAQCAtMCwwICsxLDIyIEBACitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA/PSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiBcCisgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0xHUEwtMi4xO21kNT0xYTZkMjY4ZmQyMTg2NzVmZmVhOGJlNTU2Nzg4Yjc4MCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2luZGV4Lmh0bWwiCisKKyMgVGhpcyBuZWVkcyB0byBtYXRjaCB3aXRoIGdsaWJjLmluYywgb3RoZXJ3aXNlIGdsaWJjLXNjcmlwdHMgYW5kIGdsaWJjLWxvY2FsZQorIyB3aWxsIGZhaWwgdG8gZmluZCBtYWluIGdsaWJjLCBmb3IgZGV0YWlscyBzZWUKKyMgaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlLzIwMTUtSmFudWFyeS8xMDA2NzkuaHRtbAorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGxbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK0NPTVBBVElCTEVfSE9TVF9saWJjLW11c2xfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCitDT01QQVRJQkxFX0hPU1RfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmExNTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJHTElCQyAoR05VIEMgTGlicmFyeSkiCitERVNDUklQVElPTiA9ICJUaGUgR05VIEMgTGlicmFyeSBpcyB1c2VkIGFzIHRoZSBzeXN0ZW0gQyBsaWJyYXJ5IGluIG1vc3Qgc3lzdGVtcyB3aXRoIHRoZSBMaW51eCBrZXJuZWwuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbGliYy5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA/PSAiZmlsZTovL0xJQ0VOU0VTO21kNT0wN2EzOTRiMjZlMDkwMmI5ZmZkZWMwMzc2NTIwOTc3MCBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwMDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMKQEAgLTAsMCArMSw3NiBAQAorREVQRU5EUyA9ICJsaW51eC1saWJjLWhlYWRlcnMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgbGliZ2NjLWluaXRpYWwiCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwiCisKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSIKKworZG9fY29uZmlndXJlICgpIHsKKwkoY2QgJHtTfSAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgaW4gcnVubmluZyBnbnUtY29uZmlnaXplIgorCWZpbmQgJHtTfSAtbmFtZSAiY29uZmlndXJlIiB8IHhhcmdzIHRvdWNoCisJJHtTfS9jb25maWd1cmUgLS1ob3N0PSR7VEFSR0VUX1NZU30gLS1idWlsZD0ke0JVSUxEX1NZU30gXAorCQktLXByZWZpeD0vdXNyIFwKKwkJLS13aXRob3V0LWN2cyAtLWRpc2FibGUtc2FuaXR5LWNoZWNrcyBcCisJCS0td2l0aC1oZWFkZXJzPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0gXAorCQktLXdpdGgta2NvbmZpZz0ke1NUQUdJTkdfQklORElSX05BVElWRX0gXAorCQktLWVuYWJsZS1oYWNrZXItbW9kZSAtLWVuYWJsZS1hZGRvbnMKK30KKworZG9fY29tcGlsZSAoKSB7CisJOgorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGNyb3NzLWNvbXBpbGluZz15ZXMgaW5zdGFsbF9yb290PSR7RH0gXAorCWluY2x1ZGVkaXI9JyR7aW5jbHVkZWRpcn0nIHByZWZpeD0nJHtwcmVmaXh9JyBcCisJaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycz15ZXMgaW5zdGFsbC1oZWFkZXJzCisKKwlvZV9ydW5tYWtlIGNzdS9zdWJkaXJfbGliCisJbWtkaXIgLXAgJHtEfSR7bGliZGlyfS8KKwlpbnN0YWxsIC1tIDY0NCBjc3UvY3J0WzFpbl0ubyAke0R9JHtsaWJkaXJ9CisKKwkjIFR3byBoZWFkZXJzIC0tIHN0dWJzLmggYW5kIGZlYXR1cmVzLmggLS0gYXJlbid0IGluc3RhbGxlZCBieSBpbnN0YWxsLWhlYWRlcnMsCisJIyBzbyBkbyB0aGVtIGJ5IGhhbmQuICBXZSBjYW4gdG9sZXJhdGUgYW4gZW1wdHkgc3R1YnMuaCBmb3IgdGhlIG1vbWVudC4KKwkjIFNlZSBlLmcuIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwMi0wMS9tc2cwMDkwMC5odG1sCisJbWtkaXIgLXAgJHtEfSR7aW5jbHVkZWRpcn0vZ251LworCXRvdWNoICR7RH0ke2luY2x1ZGVkaXJ9L2dudS9zdHVicy5oCisJY3AgJHtTfS9pbmNsdWRlL2ZlYXR1cmVzLmggJHtEfSR7aW5jbHVkZWRpcn0vZmVhdHVyZXMuaAorCisJaWYgWyAtZSAke0J9L2JpdHMvc3RkaW9fbGltLmggXTsgdGhlbgorCQljcCAke0J9L2JpdHMvc3RkaW9fbGltLmggICR7RH0ke2luY2x1ZGVkaXJ9L2JpdHMvCisJZmkKKwkjIGFkZCBsaW5rcyB0byBsaW51eC1saWJjLWhlYWRlcnM6IGZpbmFsIGdsaWJjIGJ1aWxkIG5lZWQgdGhpcy4KKwlmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisJCWxuIC1zICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0vJHQgJHtEfSR7aW5jbHVkZWRpcn0vCisJZG9uZQorfQorCitkb19pbnN0YWxsX2xvY2FsZSgpIHsKKwk6Cit9CisKK2RvX3NpdGVjb25maWcgKCkgeworCToKK30KKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZ2xpYmNpbml0aWFsX3NzdGF0ZV9wb3N0aW5zdCIKK2dsaWJjaW5pdGlhbF9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBSZWNyZWF0ZSB0aGUgc3ltbGlua3MgdG8gZW5zdXJlIHRoZXkgcG9pbnQgdG8gdGhlIGNvcnJlY3QgbG9jYXRpb24KKwkJZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworCQkJcm0gLWYgJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0ke2luY2x1ZGVkaXJ9LyR0CisJCQlsbiAtcyAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9LyR0ICR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9JHtpbmNsdWRlZGlyfS8KKwkJZG9uZQorCWZpCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyIKKworIyBXZSBkb24ndCBpbnN0YWxsIGFueSBzY3JpcHRzIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXZhY3VhdGUKK2RvX2V2YWN1YXRlX3NjcmlwdHMgKCkgeworCToKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMDFkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjIyLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ2xpYmNfJHtQVn0uYmIKK3JlcXVpcmUgZ2xpYmMtaW5pdGlhbC5pbmMKKworREVQRU5EUyArPSAia2NvbmZpZy1mcm9udGVuZHMtbmF0aXZlIgorCisjIG1haW4gZ2xpYmMgcmVjaXBlcyBtdWNrIHdpdGggVEFSR0VUX0NQUEZMQUdTIHRvIHBvaW50IGludG8KKyMgZmluYWwgdGFyZ2V0IHN5c3Jvb3QgYnV0IHdlCisjIGFyZSBub3QgdGhlcmUgd2hlbiBidWlsZGluZyBnbGliYy1pbml0aWFsCisjIHNvIHJlc2V0IGl0IGhlcmUKKworVEFSR0VUX0NQUEZMQUdTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmNGRiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jCkBAIC0wLDAgKzEsNTcgQEAKK2RlZiBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMoZCwgaW5mb3MsIGRpY3QpOgorICAgIHR1bmUgPSBkLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKSBvciAiIgorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpIG9yICIiCisgICAgaWYgdHVuZSBpbiBkaWN0OgorICAgICAgICBpbmZvc1snbGRjb25maWcnXS5hZGQoJ3siJyArIGxpYmRpciArICcvJyArIGRpY3RbdHVuZV1bMF0gKyAnIiwnICsgZGljdFt0dW5lXVsxXSArICcgfScpCisgICAgICAgIGluZm9zWydsZGRyZXdyaXRlJ10uYWRkKGxpYmRpcisnLycrZGljdFt0dW5lXVswXSkKKworZGVmIGdsaWJjX2RsX2luZm8oZCk6CisgICAgbGRfaW5mb19hbGwgPSB7CisgICAgICAgICJtaXBzIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHNlbCI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbCI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwcy1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0LW5mLW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0LW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbC1uZi1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjNjQiOiBbImxkNjQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYzY0LW5mIjogWyJsZDY0LnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmUyLTMyIjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlMi02NCI6IFsibGQtbGludXgteDg2LTY0LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIng4NiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAieDg2LTY0IjogWyJsZC1saW51eC14ODYtNjQuc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiaTU4NiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZWk3LTMyIjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlaTctNjQiOiBbImxkLWxpbnV4LXg4Ni02NC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgfQorCisgICAgaW5mb3MgPSB7J2xkY29uZmlnJzpzZXQoKSwgJ2xkZHJld3JpdGUnOnNldCgpfQorICAgIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhkLCBpbmZvcywgbGRfaW5mb19hbGwpCisKKyAgICAjREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwKKyAgICBvcmlnaW5hbF90dW5lPWQuZ2V0VmFyKCJERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTCIsVHJ1ZSkKKyAgICBpZiBvcmlnaW5hbF90dW5lOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiREVGQVVMVFRVTkUiLCBvcmlnaW5hbF90dW5lKQorICAgICAgICBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMobG9jYWxkYXRhLCBpbmZvcywgbGRfaW5mb19hbGwpCisKKyAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCisgICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhsb2NhbGRhdGEsIGluZm9zLCBsZF9pbmZvX2FsbCkKKyAgICBpbmZvc1snbGRjb25maWcnXSA9ICcsJy5qb2luKGluZm9zWydsZGNvbmZpZyddKQorICAgIGluZm9zWydsZGRyZXdyaXRlJ10gPSAnICcuam9pbihpbmZvc1snbGRkcmV3cml0ZSddKQorICAgIHJldHVybiBpbmZvcworCitFR0xJQkNfS05PV05fSU5URVJQUkVURVJfTkFNRVMgPSAiJHtAZ2xpYmNfZGxfaW5mbyhkKVsnbGRjb25maWcnXX0iCitSVExETElTVCA9ICIke0BnbGliY19kbF9pbmZvKGQpWydsZGRyZXdyaXRlJ119IgorZ2xpYmNfZGxfaW5mb1t2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNmQwNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZS5pbmMKQEAgLTAsMCArMSw5NiBAQAoraW5jbHVkZSBnbGliYy1jb2xsYXRlcmFsLmluYworCitTVU1NQVJZID0gIkxvY2FsZSBkYXRhIGZyb20gZ2xpYmMiCisKK0JQTiA9ICJnbGliYyIKK0xPQ0FMRUJBU0VQTiA9ICIke01MUFJFRklYfWdsaWJjIgorCisjIGdsaWJjLWNvbGxhdGVyYWwuaW5jIGluaGliaXRzIGFsbCBkZWZhdWx0IGRlcHMsIGJ1dCBkb19wYWNrYWdlIG5lZWRzIG9iamNvcHkKKyMgRVJST1I6IG9iamNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEyNyAoY21kIHdhcyAnaTU4Ni13ZWJvcy1saW51eC1vYmpjb3B5JyAtLW9ubHkta2VlcC1kZWJ1ZyAnZ2xpYmMtbG9jYWxlLzIuMTctcjAvcGFja2FnZS91c3IvbGliL2djb252L0lCTTExNjYuc28nICdnbGliYy1sb2NhbGUvMi4xNy1yMC9wYWNrYWdlL3Vzci9saWIvZ2NvbnYvLmRlYnVnL0lCTTExNjYuc28nKQorIyBFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBzcGxpdF9hbmRfc3RyaXBfZmlsZXMKK0JJTlVUSUxTREVQID0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9YmludXRpbHM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0JJTlVUSUxTREVQX2NsYXNzLW5hdGl2ZXNkayA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3Nkazpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcGFja2FnZVtkZXBlbmRzXSArPSAiJHtCSU5VVElMU0RFUH0iCisKKyMgQmluYXJ5IGxvY2FsZXMgYXJlIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIGlmIEVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04KKyMgaXMgc2V0LiBUaGUgaWRlYSBpcyB0byBhdm9pZCBydW5uaW5nIGxvY2FsZWRlZiBvbiB0aGUgdGFyZ2V0IChhdCBmaXJzdCBib290KQorIyB0byBkZWNyZWFzZSBpbml0aWFsIGJvb3QgdGltZSBhbmQgYXZvaWQgbG9jYWxlZGVmIGJlaW5nIGtpbGxlZCBieSB0aGUgT09NCisjIGtpbGxlciB3aGljaCB1c2VkIHRvIGVmZmVjdGl2ZWx5IGJyZWFrIGkxOG4gb24gbWFjaGluZXMgd2l0aCA8IDEyOE1CIFJBTS4KKworIyBkZWZhdWx0IHRvIGRpc2FibGVkIAorRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiA/PSAiMCIKK0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT05fcG4tbmF0aXZlc2RrLWdsaWJjLWxvY2FsZSA9ICIwIgorCisjZW5hYmxlIGxvY2FsZSBnZW5lcmF0aW9uIG9uIHRoZXNlIGFyY2hlcworIyBCSU5BUllfTE9DQUxFX0FSQ0hFUyBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMKK0JJTkFSWV9MT0NBTEVfQVJDSEVTID89ICJhcm0uKiBhYXJjaDY0IGlbMy02XTg2IHg4Nl82NCBwb3dlcnBjIG1pcHMgbWlwczY0IgorCisjIHNldCAiMSIgdG8gdXNlIGNyb3NzLWxvY2FsZWRlZiBmb3IgbG9jYWxlIGdlbmVyYXRpb24KKyMgc2V0ICIwIiBmb3IgcWVtdSBlbXVsYXRpb24gb2YgbmF0aXZlIGxvY2FsZWRlZiBmb3IgbG9jYWxlIGdlbmVyYXRpb24KK0xPQ0FMRV9HRU5FUkFUSU9OX1dJVEhfQ1JPU1MtTE9DQUxFREVGID0gIjEiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliYy1sb2NhbGUiCisKK1BBQ0tBR0VTID0gImxvY2FsZWRlZiAke1BOfS1kYmciCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxvY2FsZS1iYXNlLS4qIFwKKyAgICAgICAgICAgICAgICAgICAgXmdsaWJjLWdjb252LS4qIF5nbGliYy1jaGFybWFwLS4qIF5nbGliYy1sb2NhbGVkYXRhLS4qIF5nbGliYy1iaW5hcnktbG9jYWxlZGF0YS0uKiBcCisgICAgICAgICAgICAgICAgICAgIF5nbGliYy1nY29udi0uKiAgXmdsaWJjLWNoYXJtYXAtLiogIF5nbGliYy1sb2NhbGVkYXRhLS4qICBeZ2xpYmMtYmluYXJ5LWxvY2FsZWRhdGEtLiogXAorICAgICAgICAgICAgICAgICAgICBeJHtNTFBSRUZJWH1nbGliYy1nY29udiQiCisKKyMgQ3JlYXRlIGEgZ2xpYmMtYmluYXJpZXMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWJpbmFyaWVzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWJpbmFyaWVzIgorUlJFQ09NTUVORFNfJHtCUE59LWJpbmFyaWVzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtYmluYXJ5IikgIT0gLTFdKX0iCisKKyMgQ3JlYXRlIGEgZ2xpYmMtY2hhcm1hcHMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWNoYXJtYXBzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWNoYXJtYXBzIgorUlJFQ09NTUVORFNfJHtCUE59LWNoYXJtYXBzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtY2hhcm1hcCIpICE9IC0xXSl9IgorCisjIENyZWF0ZSBhIGdsaWJjLWdjb252cyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tZ2NvbnZzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWdjb252cyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1nY29udnMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1nY29udiIpICE9IC0xXSl9IgorCisjIENyZWF0ZSBhIGdsaWJjLWxvY2FsZWRhdGFzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1sb2NhbGVkYXRhcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1sb2NhbGVkYXRhcyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1sb2NhbGVkYXRhcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWxvY2FsZWRhdGEiKSAhPSAtMV0pfSIKKworREVTQ1JJUFRJT05fbG9jYWxlZGVmID0gImdsaWJjOiBjb21waWxlIGxvY2FsZSBkZWZpbml0aW9uIGZpbGVzIgorCisjIGdsaWJjLWdjb252IGlzIGR5bmFtaWNhbGx5IGFkZGVkIGludG8gUEFDS0FHRVMsIHRodXMKKyMgRklMRVNfZ2xpYmMtZ2NvbnYgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBleHRlbmRlZCBpbiBtdWx0aWxpYi4KKyMgRXhwbGljaXRseSBhZGQgJHtNTFBSRUZJWH0gZm9yIEZJTEVTX2dsaWJjLWdjb252LgorRklMRVNfJHtNTFBSRUZJWH1nbGliYy1nY29udiA9ICIke2xpYmRpcn0vZ2NvbnYvKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2djb252Ly5kZWJ1Zy8qIgorRklMRVNfbG9jYWxlZGVmID0gIiR7YmluZGlyfS9sb2NhbGVkZWYiCisKK0xPQ0FMRVRSRUVTUkMgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vZ2xpYmMtbG9jYWxlLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitkb19pbnN0YWxsICgpIHsKKwlta2RpciAtcCAke0R9JHtiaW5kaXJ9ICR7RH0ke2RhdGFkaXJ9ICR7RH0ke2xpYmRpcn0KKwlpZiBbIC1uICIkKGxzICR7TE9DQUxFVFJFRVNSQ30vJHtiaW5kaXJ9KSIgXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7YmluZGlyfS8qICR7RH0ke2JpbmRpcn0KKwlmaQorCWlmIFsgLW4gIiQobHMgJHtMT0NBTEVUUkVFU1JDfS8ke2xvY2FsZWRpcn0pIiBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0ke2xvY2FsZWRpcn0KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2xvY2FsZWRpcn0vKiAke0R9JHtsb2NhbGVkaXJ9CisJZmkKKwlpZiBbIC1lICR7TE9DQUxFVFJFRVNSQ30vJHtsaWJkaXJ9L2djb252IF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2xpYmRpcn0vZ2NvbnYgJHtEfSR7bGliZGlyfQorCWZpCisJaWYgWyAtZSAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vaTE4biBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9pMThuICR7RH0ke2RhdGFkaXJ9CisJZmkKKwlpZiBbIC1lICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9sb2NhbGUgXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vbG9jYWxlICR7RH0ke2RhdGFkaXJ9CisJZmkKKwljaG93biByb290LnJvb3QgLVIgJHtEfQorCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vU1VQUE9SVEVEICR7V09SS0RJUn0KK30KKworaW5oZXJpdCBsaWJjLXBhY2thZ2UKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzcwMmUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yMi5iYgpAQCAtMCwwICsxIEBACityZXF1aXJlIGdsaWJjLWxvY2FsZS5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTJiMDc5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2UuaW5jCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgZ2xpYmMtY29sbGF0ZXJhbC5pbmMKKworU1VNTUFSWSA9ICJtdHJhY2UgdXRpbGl0eSBwcm92aWRlZCBieSBnbGliYyIKK0RFU0NSSVBUSU9OID0gIm10cmFjZSB1dGlsaXR5IHByb3ZpZGVkIGJ5IGdsaWJjIgorUkRFUEVORFNfJHtQTn0gPSAicGVybCIKK1JQUk9WSURFU18ke1BOfSA9ICJsaWJjLW10cmFjZSIKKworU1JDID0gIiR7U1RBR0lOR19JTkNESVJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAtbSAwNzU1ICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTUkN9L210cmFjZSAke0R9JHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2OWJhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjIuYmIKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBnbGliYy1tdHJhY2UuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW9wdGlvbnMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1vcHRpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmQyN2YzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1vcHRpb25zLmluYwpAQCAtMCwwICsxLDE2MiBAQAorZGVmIGdsaWJjX2NmZyhmZWF0dXJlLCB0b2tlbnMsIGNuZik6CisgICAgaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorICAgICAgICB0b2tlbnMgPSBbdG9rZW5zXQorICAgIGlmIGZlYXR1cmU6CisgICAgICAgIGNuZi5leHRlbmQoW3Rva2VuICsgJz15JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgdG9rZW4gaW4gdG9rZW5zOgorICAgICAgICAgICAgY25mLmV4dGVuZChbdG9rZW4gKyAnPW4nXSkKKyAgICAgICAgICAgIGlmIHRva2VuID09ICdPUFRJT05fRUdMSUJDX05TU1dJVENIJzoKKyAgICAgICAgICAgICAgICBjbmYuZXh0ZW5kKFsiT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUc9XCIke1N9L25zcy9uc3N3aXRjaC5jb25mXCIiXSkKKyAgICAgICAgICAgICAgICBjbmYuZXh0ZW5kKFsiT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlM9XCIke1N9L25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnNcIiJdKQorCisjIE1hcCBkaXN0cm8gZmVhdHVyZXMgdG8gZ2xpYmMgb3B0aW9ucyBzZXR0aW5ncworZGVmIGZlYXR1cmVzX3RvX2dsaWJjX3NldHRpbmdzKGQpOgorICAgIGNuZiA9IChbXSkKKworICAgIGlwdjQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBpcHY2ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19iYWNrdHJhY2UgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtYmFja3RyYWNlJywgVHJ1ZSwgRmFsc2UsIGQpIAorICAgIGxpYmNfYmlnX21hY3JvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1iaWctbWFjcm9zJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19ic2QgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtYnNkJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jeHhfdGVzdHMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY3h4LXRlc3RzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jYXRnZXRzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNhdGdldHMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NoYXJzZXRzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNoYXJzZXRzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jcnlwdCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jcnlwdCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY3J5cHRfdWZjID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNyeXB0LXVmYycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZGJfYWxpYXNlcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1kYi1hbGlhc2VzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19lbnZ6ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWVudnonLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2ZjdnQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZmN2dCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZm10bXNnID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZtdG1zZycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZnN0YWIgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZnN0YWInLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2Z0cmF2ZXJzZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mdHJhdmVyc2UnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2dldGxvZ2luID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWdldGxvZ2luJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19pZG4gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaWRuJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19pbmV0X2FubCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1pbmV0LWFubCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbGlibSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1saWJtJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19sb2NhbGVzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2xvY2FsZV9jb2RlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZS1jb2RlJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19tZW11c2FnZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1tZW11c2FnZScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbmlzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLW5pcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbnNzd2l0Y2ggPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbnNzd2l0Y2gnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3JjbWQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcmNtZCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcnRsZF9kZWJ1ZyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1ydGxkLWRlYnVnJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19zcGF3biA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zcGF3bicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfc3RyZWFtcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zdHJlYW1zJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19zdW5ycGMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtc3VucnBjJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY191dG1wID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXV0bXAnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3V0bXB4ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXV0bXB4JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY193b3JkZXhwID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXdvcmRleHAnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF9yZWdleHAgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtcmVnZXhwJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF9yZWdleHBfZ2xpYmMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtcmVnZXhwLWdsaWJjJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF93Y2hhcl9pbyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC13Y2hhci1pbycsIFRydWUsIEZhbHNlLCBkKQorCisgICAgIyBhcnJhbmdlIHRoZSBkZXBlbmRlbmNpZXMgYW1vbmcgZ2xpYmMgY29uZmlndWFibGUgb3B0aW9ucyBhY2NvcmRpbmcgdG8gZmlsZSBvcHRpb24tZ3JvdXBzLmRlZiBmcm9tIGdsaWJjIHNvdXJjZSBjb2RlCisgICAgbmV3X2RlcCA9IFRydWUKKyAgICB3aGlsZSBuZXdfZGVwOgorICAgICAgICBuZXdfZGVwID0gRmFsc2UKKworICAgICAgICBpZiBpcHY2IGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGlwdjQgYW5kIG5vdCBsaWJjX25zc3dpdGNoOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfbnNzd2l0Y2ggPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19jeHhfdGVzdHM6CisgICAgICAgICAgICBpZiBub3QgbGliY19wb3NpeF93Y2hhcl9pbzoKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxpYmNfcG9zaXhfd2NoYXJfaW8gPSBUcnVlCisgICAgICAgICAgICBpZiBub3QgbGliY19saWJtOgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgbGliY19saWJtID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfY2F0Z2V0cyBhbmQgbm90IGxpYmNfbG9jYWxlX2NvZGU6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19sb2NhbGVfY29kZSA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2NyeXB0X3VmYyBhbmQgbm90IGxpYmNfY3J5cHQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19jcnlwdCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2dldGxvZ2luIGFuZCBub3QgbGliY191dG1wOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfdXRtcCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2luZXRfYW5sIGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfbG9jYWxlX2NvZGUgYW5kIG5vdCBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19uaXM6CisgICAgICAgICAgICBpZiBub3QgaXB2NDoKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlwdjQgPSBUcnVlCisgICAgICAgICAgICBpZiBub3QgbGliY19zdW5ycGM6CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBsaWJjX3N1bnJwYyA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3JjbWQgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19zdW5ycGMgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY191dG1weCBhbmQgbm90IGxpYmNfdXRtcDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3V0bXAgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19wb3NpeF9yZWdleHBfZ2xpYmMgYW5kIG5vdCBsaWJjX3Bvc2l4X3JlZ2V4cDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3Bvc2l4X3JlZ2V4cCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3Bvc2l4X3djaGFyX2lvIGFuZCBub3QgbGliY19wb3NpeF9jbGFuZ193Y2hhcjoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyID0gVHJ1ZQorCisgICAgZ2xpYmNfY2ZnKGlwdjYsICdPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2JywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2JhY2t0cmFjZSwgJ09QVElPTl9FR0xJQkNfQkFDS1RSQUNFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2JpZ19tYWNyb3MsICdPUFRJT05fRUdMSUJDX0JJR19NQUNST1MnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfYnNkLCAnT1BUSU9OX0VHTElCQ19CU0QnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY3h4X3Rlc3RzLCAnT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY2F0Z2V0cywgJ09QVElPTl9FR0xJQkNfQ0FUR0VUUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jaGFyc2V0cywgJ09QVElPTl9FR0xJQkNfQ0hBUlNFVFMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY3J5cHQsICdPUFRJT05fRUdMSUJDX0NSWVBUJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NyeXB0X3VmYywgJ09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2RiX2FsaWFzZXMsICdPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZW52eiwgJ09QVElPTl9FR0xJQkNfRU5WWicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mY3Z0LCAnT1BUSU9OX0VHTElCQ19GQ1ZUJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2ZtdG1zZywgJ09QVElPTl9FR0xJQkNfRk1UTVNHJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2ZzdGFiLCAnT1BUSU9OX0VHTElCQ19GU1RBQicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mdHJhdmVyc2UsICdPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19nZXRsb2dpbiwgJ09QVElPTl9FR0xJQkNfR0VUTE9HSU4nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfaWRuLCAnT1BUSU9OX0VHTElCQ19JRE4nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGlwdjQsICdPUFRJT05fRUdMSUJDX0lORVQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfaW5ldF9hbmwsICdPUFRJT05fRUdMSUJDX0lORVRfQU5MJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2xpYm0sICdPUFRJT05fRUdMSUJDX0xJQk0nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbG9jYWxlcywgJ09QVElPTl9FR0xJQkNfTE9DQUxFUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19sb2NhbGVfY29kZSwgJ09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbWVtdXNhZ2UsICdPUFRJT05fRUdMSUJDX01FTVVTQUdFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX25pcywgJ09QVElPTl9FR0xJQkNfTklTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX25zc3dpdGNoLCAnT1BUSU9OX0VHTElCQ19OU1NXSVRDSCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19yY21kLCAnT1BUSU9OX0VHTElCQ19SQ01EJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3J0bGRfZGVidWcsICdPUFRJT05fRUdMSUJDX1JUTERfREVCVUcnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfc3Bhd24sICdPUFRJT05fRUdMSUJDX1NQQVdOJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3N0cmVhbXMsICdPUFRJT05fRUdMSUJDX1NUUkVBTVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfc3VucnBjLCAnT1BUSU9OX0VHTElCQ19TVU5SUEMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfdXRtcCwgJ09QVElPTl9FR0xJQkNfVVRNUCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY191dG1weCwgJ09QVElPTl9FR0xJQkNfVVRNUFgnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfd29yZGV4cCwgJ09QVElPTl9FR0xJQkNfV09SREVYUCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF9jbGFuZ193Y2hhciwgJ09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X3JlZ2V4cCwgJ09QVElPTl9QT1NJWF9SRUdFWFAnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfcmVnZXhwX2dsaWJjLCAnT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF93Y2hhcl9pbywgJ09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPJywgY25mKQorCisgICAgcmV0dXJuICJcbiIuam9pbihjbmYpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjYwMzY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1wYWNrYWdlLmluYwpAQCAtMCwwICsxLDIxNCBAQAorIworIyBGb3Igbm93LCB3ZSB3aWxsIHNraXAgYnVpbGRpbmcgb2YgYSBnY2MgcGFja2FnZSBpZiBpdCBpcyBhIHVjbGliYyBvbmUKKyMgYW5kIG91ciBidWlsZCBpcyBub3QgYSB1Y2xpYmMgb25lLCBhbmQgd2Ugc2tpcCBhIGdsaWJjIG9uZSBpZiBvdXIgYnVpbGQKKyMgaXMgYSB1Y2xpYmMgYnVpbGQuCisjCisjIFNlZSB0aGUgbm90ZSBpbiBnY2MvZ2NjXzMuNC4wLm9lCisjCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IGJiLCByZQorICAgIHVjX29zID0gKHJlLm1hdGNoKCcuKnVjbGliYyonLCBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkpICE9IE5vbmUpCisgICAgaWYgdWNfb3M6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKQorfQorCisjIFNldCB0aGlzIHRvIHplcm8gaWYgeW91IGRvbid0IHdhbnQgbGRjb25maWcgaW4gdGhlIG91dHB1dCBwYWNrYWdlCitVU0VfTERDT05GSUcgPz0gIjEiCisKK0lOSElCSVRfU1lTUk9PVF9TVFJJUCA9ICIxIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgY2F0Y2hzZWd2IHNsbiBuc2NkIGxkZCB0emNvZGUgJHtQTn0tdXRpbHMgZ2xpYmMtdGhyZWFkLWRiICR7UE59LXBpYyBsaWJjaWRuIGxpYm1lbXVzYWdlIGxpYnNlZ2ZhdWx0ICR7UE59LXBjcHJvZmlsZSBsaWJzb3RydXNzICR7UE59IGdsaWJjLWV4dHJhLW5zcyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRvYyIKKworIyBUaGUgbGQuc28gaW4gdGhpcyBnbGliYyBzdXBwb3J0cyB0aGUgR05VX0hBU0gKK1JQUk9WSURFU18ke1BOfSA9ICJlZ2xpYmMgcnRsZChHTlVfSEFTSCkiCitSUFJPVklERVNfJHtQTn0tdXRpbHMgPSAiZWdsaWJjLXV0aWxzIgorUlBST1ZJREVTXyR7UE59LW10cmFjZSA9ICJlZ2xpYmMtbXRyYWNlIGxpYmMtbXRyYWNlIgorUlBST1ZJREVTXyR7UE59LXBpYyA9ICJlZ2xpYmMtcGljIgorUlBST1ZJREVTXyR7UE59LWRldiA9ICJlZ2xpYmMtZGV2IGxpYmM2LWRldiB2aXJ0dWFsLWxpYmMtZGV2IgorUlBST1ZJREVTXyR7UE59LXN0YXRpY2RldiA9ICJlZ2xpYmMtc3RhdGljZGV2IgorUlBST1ZJREVTXyR7UE59LWRvYyA9ICJlZ2xpYmMtZG9jIgorUlBST1ZJREVTX2dsaWJjLWV4dHJhLW5zcyA9ICJlZ2xpYmMtZXh0cmEtbnNzIgorUlBST1ZJREVTX2dsaWJjLXRocmVhZC1kYiA9ICJlZ2xpYmMtdGhyZWFkLWRiIgorUlBST1ZJREVTXyR7UE59LXBjcHJvZmlsZSA9ICJlZ2xpYmMtcGNwcm9maWxlIgorUlBST1ZJREVTXyR7UE59LWRiZyA9ICJlZ2xpYmMtZGJnIgorbGliY19iYXNlbGlicyA9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJjcnlwdC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmMuc28uKiAke2Jhc2VfbGliZGlyfS9saWJjLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibSouc28uKiAke2Jhc2VfbGliZGlyfS9saWJtLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibXZlYy0qLnNvICR7YmFzZV9saWJkaXJ9L2xkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xkLSouc28gJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkLSouc28gJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdi0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnJ0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJ0LSouc28gJHtiYXNlX2xpYmRpcn0vbGlidXRpbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJ1dGlsLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zbC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc19maWxlcyouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc3NfZmlsZXMtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfY29tcGF0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zc19jb21wYXQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfZG5zKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zc19kbnMtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJkbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJkbC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmFubCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJhbmwtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJCcm9rZW5Mb2NhbGUqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliQnJva2VuTG9jYWxlLSouc28iCitsaWJjX2Jhc2VsaWJzX2FwcGVuZF9hYXJjaDY0ID0gIiAvbGliL2xkLWxpbnV4LWFhcmNoNjQqLnNvLjEiCitJTlNBTkVfU0tJUF8ke1BOfV9hcHBlbmRfYWFyY2g2NCA9ICIgbGliZGlyIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmNfYmFzZWxpYnN9ICR7bGliZXhlY2Rpcn0vKiAke0BiYXNlX2NvbmRpdGlvbmFsKCdVU0VfTERDT05GSUcnLCAnMScsICcke2Jhc2Vfc2JpbmRpcn0vbGRjb25maWcgJHtzeXNjb25mZGlyfS9sZC5zby5jb25mJywgJycsIGQpfSIKK0ZJTEVTX2xkZCA9ICIke2JpbmRpcn0vbGRkIgorRklMRVNfbGlic2VnZmF1bHQgPSAiJHtiYXNlX2xpYmRpcn0vbGliU2VnRmF1bHQqIgorRklMRVNfbGliY2lkbiA9ICIke2Jhc2VfbGliZGlyfS9saWJjaWRuLSouc28gJHtiYXNlX2xpYmRpcn0vbGliY2lkbi5zby4qIgorRklMRVNfbGlibWVtdXNhZ2UgPSAiJHtiYXNlX2xpYmRpcn0vbGlibWVtdXNhZ2Uuc28iCitGSUxFU19nbGliYy1leHRyYS1uc3MgPSAiJHtiYXNlX2xpYmRpcn0vbGlibnNzXyotKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfKi5zby4qIgorRklMRVNfc2xuID0gIiR7YmFzZV9zYmluZGlyfS9zbG4iCitGSUxFU18ke1BOfS1waWMgPSAiJHtsaWJkaXJ9LypfcGljLmEgJHtsaWJkaXJ9LypfcGljLm1hcCAke2xpYmRpcn0vbGliY19waWMvKi5vIgorRklMRVNfbGlic290cnVzcyA9ICIke2xpYmRpcn0vYXVkaXQvc290cnVzcy1saWIuc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ycGNnZW4gJHtsaWJkaXJ9Lypfbm9uc2hhcmVkLmEgJHtiYXNlX2xpYmRpcn0vKl9ub25zaGFyZWQuYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSIKK0ZJTEVTX25zY2QgPSAiJHtzYmluZGlyfS9uc2NkKiAke3N5c2NvbmZkaXJ9L2luaXQuZC9uc2NkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbnNjZCogJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL25zY2QuY29uZiBcCisgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbnNjZC5jb25mICR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOThfbnNjZCAke2xvY2Fsc3RhdGVkaXJ9L2RiL25zY2QiCitGSUxFU18ke1BOfS1tdHJhY2UgPSAiJHtiaW5kaXJ9L210cmFjZSIKK0ZJTEVTX3R6Y29kZSA9ICIke2JpbmRpcn0vdHpzZWxlY3QgJHtzYmluZGlyfS96aWMgJHtzYmluZGlyfS96ZHVtcCIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS8qLy5kZWJ1ZyAke2xpYmRpcn0vYXVkaXQvLmRlYnVnIgorRklMRVNfY2F0Y2hzZWd2ID0gIiR7YmluZGlyfS9jYXRjaHNlZ3YiCitSREVQRU5EU19jYXRjaHNlZ3YgPSAibGlic2VnZmF1bHQiCitGSUxFU18ke1BOfS1wY3Byb2ZpbGUgPSAiJHtiYXNlX2xpYmRpcn0vbGlicGNwcm9maWxlLnNvIgorRklMRVNfZ2xpYmMtdGhyZWFkLWRiID0gIiR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYi0qLnNvIgorUlBST1ZJREVTXyR7UE59LWRldiArPSAibGliYy1kZXYiCitSUFJPVklERVNfJHtQTn0tc3RhdGljZGV2ICs9ICJsaWJjLXN0YXRpY2RldiIKKworU1VNTUFSWV9zbG4gPSAiVGhlIHN0YXRpYyBsbiIKK0RFU0NSSVBUSU9OX3NsbiA9ICJTaW1pbGFyIHRvIHRoZSAnbG4nIHV0aWxpdHksIGJ1dCBzdGF0aWNhbGx5IGxpbmtlZC4gIHNsbiBpcyB1c2VmdWwgdG8gbWFrZSBzeW1ib2xpYyBsaW5rcyB0byBkeW5hbWljIGxpYnJhcmllcyBpZiB0aGUgZHluYW1pYyBsaW5raW5nIHN5c3RlbSwgZm9yIHNvbWUgcmVhc29uLCBpcyBub3QgZnVuY3Rpb25hbC4iCitTVU1NQVJZX25zY2QgPSAiTmFtZSBzZXJ2aWNlIGNhY2hlIGRhZW1vbiIKK0RFU0NSSVBUSU9OX25zY2QgPSAibnNjZCwgbmFtZSBzZXJ2aWNlIGNhY2hlIGRhZW1vbiwgY2FjaGVzIG5hbWUgc2VydmljZSBsb29rdXBzIGZvciB0aGUgcGFzc3dkLCBncm91cCBhbmQgaG9zdHMgaW5mb3JtYXRpb24uICBJdCBjYW4gZGFtYXRpY2FsbHkgaW1wcm92aWRlIHBlcmZvcm1hbmNlIHdpdGggcmVtb3RlLCBzdWNoIGFzIE5JUyBvciBOSVMrLCBuYW1lIHNlcnZpY2VzLiIKK1NVTU1BUllfZ2xpYmMtZXh0cmEtbnNzID0gImhlc2lvZCwgTklTIGFuZCBOSVMrIG5zcyBsaWJyYXJpZXMiCitERVNDUklQVElPTl9nbGliYy1leHRyYS1uc3MgPSAiZ2xpYmM6IG5pcywgbmlzcGx1cyBhbmQgaGVzaW9kIHNlYXJjaCBzZXJ2aWNlcy4iCitTVU1NQVJZX2xkZCA9ICJwcmludCBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMiCitERVNDUklQVElPTl9sZGQgPSAiJHtiaW5kaXJ9L2xkZCBwcmludHMgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIHByb2dyYW0gb3Igc2hhcmVkIGxpYnJhcnkgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorU1VNTUFSWV8ke1BOfS11dGlscyA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBwcm92aWRlZCBieSBnbGliYyIKK0RFU0NSSVBUSU9OXyR7UE59LXV0aWxzID0gIk1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIGluY2x1ZGluZyBnZXRjb25mLCBpY29udiwgbG9jYWxlLCBnZW5jYXQsIHJwY2dlbiwgLi4uIgorREVTQ1JJUFRJT05fbGlic290cnVzcyA9ICJMaWJyYXJ5IHRvIHN1cHBvcnQgc290cnVzcyB3aGljaCB0cmFjZXMgY2FsbHMgdGhyb3VnaCBQTFRzIgorREVTQ1JJUFRJT05fdHpjb2RlID0gInR6Y29kZSwgdGltZXpvbmUgem9uZWluZm8gdXRpbHMgLS0gemljLCB6ZHVtcCwgdHpzZWxlY3QiCisKK2luaGVyaXQgbGliYy1jb21tb24gbXVsdGlsaWJfaGVhZGVyCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9sb2NhbHRpbWUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKworCSMgcmVtb3ZlIGVtcHR5IGdsaWJjIGRpcgorCWlmIFsgLWQgJHtEfSR7bGliZGlyfS9nbGliYyAtYSAhIC1lICR7RH0ke2xpYmRpcn0vZ2xpYmMvcHRfY2hvd24gXTsgdGhlbgorCQlybWRpciAke0R9JHtsaWJkaXJ9L2dsaWJjCisJZmkKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYml0cy9zeXNjYWxsLmgKKworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9tdHJhY2UgXTsgdGhlbgorCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAtZSAnMnMsZXhlYy4qcGVybCxleGVjICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L210cmFjZQorCWZpCisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L3JwY3N2Yy9ycXVvdGEqCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKKworCWlmIFsgIiR7VVNFX0xEQ09ORklHfSIgIT0gIjEiIF07IHRoZW4KKwkJIyBXZSB3b24ndCBzaGlwIHRoZXNlIGZpbGVzIChzZWUgRklMRVMgYWJvdmUpIHNvIGxldCdzIG5vdCBpbnN0YWxsIHRoZW0KKwkJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vbGQuc28uY29uZgorCQlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2xkY29uZmlnCisJCSMgVGhpcyBkaXJlY3Rvcnkgd2lsbCBiZSBlbXB0eSBub3cgc28gcmVtb3ZlIGl0IHRvby4KKwkJIyBCdXQgY2hlY2sgd2hldGhlciBpdCBleGlzdHMgZmlyc3QsIHNpbmNlIGl0IHdvbid0IGZvciBnbGliYy1pbml0aWFsLgorCQlpZiBbIC1kICR7RH0ke3N5c2NvbmZkaXJ9IF07IHRoZW4KKwkJCXJtZGlyICR7RH0ke3N5c2NvbmZkaXJ9CisJCWZpCisJZmkKKworCWlmIGVjaG8gJHtQTn18Z3JlcCAtcSAiZ2xpYmMtaW5pdGlhbCI7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9kYi9uc2NkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbnNjZC9uc2NkLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25zY2QKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9uc2NkL25zY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfS9uc2NkLmNvbmYKKwlzZWQgLWkgInMlZGFlbW9uJXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1leGVjJWciICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uc2NkCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vbnNjZC9uc2NkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwkJZWNobyAiZCAvcnVuL25zY2QgNzU1IHJvb3Qgcm9vdCAtIiBcCisJCQk+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvbnNjZC5jb25mCisJZWxzZQorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJCWVjaG8gImQgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vbnNjZCBub25lIiBcCisJCQk+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk4X25zY2QKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9hYXJjaDY0ICgpIHsKKwlpZiBbICIke2Jhc2VfbGliZGlyfSIgIT0gIi9saWIiIF0gOyB0aGVuCisJCSMgVGhlIGFhcmNoNjQgQUJJIHNheXMgdGhlIGR5bmFtaWMgbGlua2VyIC1tdXN0LSBiZSAvbGliL2xkLWxpbnV4LWFhcmNoNjRbX2JlXS5zby4xCisJCWluc3RhbGwgLWQgJHtEfS9saWIKKwkJaWYgWyAtZSAke0R9JHtiYXNlX2xpYmRpcn0vbGQtbGludXgtYWFyY2g2NC5zby4xIF07IHRoZW4KKwkJCWxuIC1zICR7QGJhc2VfcGF0aF9yZWxhdGl2ZSgnL2xpYicsICcke2Jhc2VfbGliZGlyfScpfS9sZC1saW51eC1hYXJjaDY0LnNvLjEgXAorCQkJCSR7RH0vbGliL2xkLWxpbnV4LWFhcmNoNjQuc28uMQorCQllbGlmIFsgLWUgJHtEfSR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LWFhcmNoNjRfYmUuc28uMSBdOyB0aGVuCisJCQlsbiAtcyAke0BiYXNlX3BhdGhfcmVsYXRpdmUoJy9saWInLCAnJHtiYXNlX2xpYmRpcn0nKX0vbGQtbGludXgtYWFyY2g2NF9iZS5zby4xIFwKKwkJCQkke0R9L2xpYi9sZC1saW51eC1hYXJjaDY0X2JlLnNvLjEKKwkJZmkKKwlmaQorfQorCitkb19pbnN0YWxsX2xvY2FsZSAoKSB7CisJZGVzdD0ke0R9LyR7aW5jbHVkZWRpcn0vZ2xpYmMtbG9jYWxlLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJaW5zdGFsbCAtZCAke2Rlc3R9JHtiYXNlX2xpYmRpcn0gJHtkZXN0fSR7YmluZGlyfSAke2Rlc3R9JHtsaWJkaXJ9ICR7ZGVzdH0ke2RhdGFkaXJ9CisJaWYgWyAiJHtiYXNlX2xpYmRpcn0iICE9ICIke2xpYmRpcn0iIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtEfSR7YmFzZV9saWJkaXJ9LyogJHtkZXN0fSR7YmFzZV9saWJkaXJ9CisJZmkKKwlpZiBbIC1lICR7RH0ke2JpbmRpcn0vbG9jYWxlZGVmIF07IHRoZW4KKwkJbXYgLWYgJHtEfSR7YmluZGlyfS9sb2NhbGVkZWYgJHtkZXN0fSR7YmluZGlyfQorCWZpCisJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2djb252IF07IHRoZW4KKwkJbXYgLWYgJHtEfSR7bGliZGlyfS9nY29udiAke2Rlc3R9JHtsaWJkaXJ9CisJZmkKKwlpZiBbIC1lICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgXTsgdGhlbgorCQljcCAtZnBQUiAke0R9JHtleGVjX3ByZWZpeH0vbGliICR7ZGVzdH0ke2V4ZWNfcHJlZml4fQorCWZpCisJaWYgWyAtZSAke0R9JHtkYXRhZGlyfS9pMThuIF07IHRoZW4KKwkJbXYgJHtEfSR7ZGF0YWRpcn0vaTE4biAke2Rlc3R9JHtkYXRhZGlyfQorCWZpCisJY3AgLWZwUFIgJHtEfSR7ZGF0YWRpcn0vKiAke2Rlc3R9JHtkYXRhZGlyfQorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9sb2NhbGUvCisJY3AgLWZwUFIgJHtXT1JLRElSfS9TVVBQT1JURUQgJHtkZXN0fQorfQorCithZGR0YXNrIGRvX2luc3RhbGxfbG9jYWxlIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX3BvcHVsYXRlX3N5c3Jvb3QgZG9fcGFja2FnZQorCitiYXNoc2NyaXB0cyA9ICJtdHJhY2Ugc290cnVzcyB4dHJhY2UiCisKK2RvX2V2YWN1YXRlX3NjcmlwdHMgKCkgeworCXRhcmdldD0ke0R9JHtpbmNsdWRlZGlyfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJbWtkaXIgLXAgJHRhcmdldAorCWZvciBpIGluICR7YmFzaHNjcmlwdHN9OyBkbworCQlpZiBbIC1mICR7RH0ke2JpbmRpcn0vJGkgXTsgdGhlbgorCQkJY3AgJHtEfSR7YmluZGlyfS8kaSAkdGFyZ2V0LworCQlmaQorCWRvbmUKK30KKworYWRkdGFzayBldmFjdWF0ZV9zY3JpcHRzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX3BvcHVsYXRlX3N5c3Jvb3QgZG9fcGFja2FnZQorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gImdsaWJjX3BhY2thZ2VfcHJlcHJvY2VzcyIKKworZ2xpYmNfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwlybSAtcmYgJHtQS0dEfS8ke2luY2x1ZGVkaXJ9L2dsaWJjLWxvY2FsZS1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCXJtIC1yZiAke1BLR0R9LyR7aW5jbHVkZWRpcn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCWZvciBpIGluICR7YmFzaHNjcmlwdHN9OyBkbworCSAgICBybSAtZiAke1BLR0R9JHtiaW5kaXJ9LyRpCisJZG9uZQorCXJtIC1yZiAke1BLR0R9LyR7bG9jYWxlZGlyfQorCWlmIFsgIiR7bGliZGlyfSIgIT0gIiR7ZXhlY19wcmVmaXh9L2xpYiIgXTsgdGhlbgorCQkjIFRoaXMgZGlyIG9ubHkgZXhpc3RzIHRvIGhvbGQgbG9jYWxlcworCQlybSAtcmYgJHtQS0dEfSR7ZXhlY19wcmVmaXh9L2xpYgorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9uc2NkICgpIHsKKwlpZiBbIC16ICIkRCIgXTsgdGhlbgorCQlpZiBjb21tYW5kIC12IHN5c3RlbWQtdG1wZmlsZXMgPi9kZXYvbnVsbDsgdGhlbgorCQkJc3lzdGVtZC10bXBmaWxlcyAtLWNyZWF0ZSAke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvbnNjZC5jb25mCisJCWVsaWYgWyAtZSAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdOyB0aGVuCisJCQkke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKwkJZmkKKwlmaQorfQorQ09ORkZJTEVTX25zY2Q9IiR7c3lzY29uZmRpcn0vbnNjZC5jb25mIgorCitTWVNURU1EX1BBQ0tBR0VTID0gIm5zY2QiCitTWVNURU1EX1NFUlZJQ0VfbnNjZCA9ICJuc2NkLnNlcnZpY2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTA2NzczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzLmluYwpAQCAtMCwwICsxLDE2IEBACitpbmNsdWRlIGdsaWJjLWNvbGxhdGVyYWwuaW5jCisKK1NVTU1BUlkgPSAidXRpbGl0eSBzY3JpcHRzIHByb3ZpZGVkIGJ5IGdsaWJjIgorREVTQ1JJUFRJT04gPSAidXRpbGl0eSBzY3JpcHRzIHByb3ZpZGVkIGJ5IGdsaWJjIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCBnbGliYy1tdHJhY2UiCisKK1NSQyA9ICIke1NUQUdJTkdfSU5DRElSfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitiYXNoc2NyaXB0cyA9ICJzb3RydXNzIHh0cmFjZSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kIC1tIDA3NTUgJHtEfSR7YmluZGlyfQorCWZvciBpIGluICR7YmFzaHNjcmlwdHN9OyBkbworCQlpbnN0YWxsIC1tIDA3NTUgJHtTUkN9LyRpICR7RH0ke2JpbmRpcn0vCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHNfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg5YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjIuYmIKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBnbGliYy1zY3JpcHRzLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy10ZXN0aW5nLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtdGVzdGluZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliYmYzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtdGVzdGluZy5pbmMKQEAgLTAsMCArMSw5NiBAQAorZG9fY29tcGlsZV9hcHBlbmQgKCkgeworCSMgbm93IGdlbmVyYXRlIHNjcmlwdCB0byBkcml2ZSB0ZXN0aW5nCisJZWNobyAiIyEvdXNyL2Jpbi9lbnYgc2giID4ke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2V0ID4+ICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwkjIHBydW5lIG91dCB0aGUgdW5uZWVkZWQgdmFycworCXNlZCAtaSAtZSAiL15CQVNIL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eVVNFUi9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXk9QVC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkRJUlNUQUNLL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eRVVJRC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkZVTkNOQU1FL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eR1JPVVBTL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eSE9TVC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkhPTUUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15JRlMvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15MQ19BTEwvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15MT0dOQU1FL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTUFDSFRZUEUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15PU1RZUEUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QSVBFL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eU0hFTEwvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL14nL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eVUlEL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eVEVSTS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBBVENIX0dFVC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBLR18vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QT1NJWExZXy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBQSUQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QUzQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15RL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eU0hMVkwvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15TVEFHSU5HL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTERfTElCUkFSWV9QQVRIL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUFNFVURPL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKworCSMgcG9pbnQgdG8gcmVhbCBzeXNyb290IG5vdCB0aGUgdG9vbGNoYWluIGJvb3RzdHJhcCBzeXNyb290CisJc2VkIC1pIC1lICJzL1wtdGNib290c3RyYXAvL2ciICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKworCSMgdXNlIHRoZSBmaW5hbCBjcm9zcy1nY2MgdG8gdGVzdCBzaW5jZSBzb21lIHRlc3RzIG5lZWQgbGlic3RkYysrCisJc2VkIC1pIC1lICJzL15QQVRIPS4qXC5nY2MtY3Jvc3MtaW5pdGlhbFw6L1BBVEg9L2ciICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKworCSMgYXBwZW5kIGV4ZWN1dGlvbiBwYXJ0IHNjcmlwdAorY2F0ID4+ICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMgPDwgU1RPUAordGFyZ2V0PSJcJDEiCitpZiBbICJ4XCR0YXJnZXQiID0gIngiIF0KK3RoZW4KKwllY2hvICJQbGVhc2Ugc3BlY2lmeSB0aGUgdGFyZ2V0IG1hY2hpbmUgYW5kIHJlbW90ZSB1c2VyIGluIGZvcm0gb2YgdXNlckB0YXJnZXQiCisJZXhpdCAxOworZmkKK3NzaCBcJHRhcmdldCBscyBcJFBXRFwgIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iICE9ICJ4MCIgXQordGhlbgorCWVjaG8gIkZhaWxlZCBjb25uZWN0aW5nIHRvIFwkdGFyZ2V0IGl0IGNvdWxkIGJlIGJlY2F1c2Ugb2Y6IgorCWVjaG8gIjEuIFlvdSBkb250IGhhdmUgcGFzc3dvcmRsZXNzIHNzaCBzZXR1cCB0byBhY2Nlc3MgXCR0YXJnZXQiCisJZWNobyAiMi4gTkZTIHNoYXJlIG9uIFwkdGFyZ2V0IGlzIG5vdCBtb3VudGVkIG9yIGlmIG1vdW50ZWQgdGhlbiBub3QgbWF0Y2hpbmcgdGhlIGJ1aWxkIHRyZWUgbGF5b3V0LiIKKwllY2hvICIgICBUaGUgdHJlZSBzaG91bGQgYmUgYWNjZXNzaWJsZSBhdCBzYW1lIGxvY2F0aW9uIG9uIGJ1aWxkIGhvc3QgYW5kIHRhcmdldCIKKwllY2hvICIgICBZb3UgY2FuIGFkZCBuZnMtY2xpZW50IHRvIElNQUdFX0ZFQVRVUkVTIHRvIGdldCB0aGUgbmZzIGNsaWVudCBvbiB0YXJnZXQiCisJZWNobyAiMy4gbmZzIHNlcnZlciBvbiBidWlsZCBob3N0IGlzIG5vdCBydW5uaW5nLiIKKwllY2hvICIgICBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgJ25vX3Jvb3Rfc3F1YXNoJyBhZGRlZCBpbiAvZXRjL2V4cG9ydHMgaWYgeW91IHdhbnQiCisJZWNobyAiICAgdG8gdGVzdCBhcyByb290IHVzZXIgb24gdGFyZ2V0ICh1c3VhbGx5IGl0cyByZWNvbW1lbmRlZCB0byBjcmVhdGUgYSBub24iCisJZWNobyAiICAgcm9vdCB1c2VyLiIKKwllY2hvICIgICBBcyBhIHNhbml0eSBjaGVjayBtYWtlIHN1cmUgdGhhdCB0YXJnZXQgY2FuIHJlYWQvd3JpdGUgdG8gdGhlIGdsaWJjIGJ1aWxkIHRyZWUiCisJZWNobyAiICAgUGxlYXNlIHJlZmVyIHRvICR7U30vRUdMSUJDLmNyb3NzLXRlc3RpbmcgZm9yIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zIG9uIHNldHVwIgorCWV4aXQgMQorZmkKKwllY2hvICIjIHdlIHRlc3QgdXNpbmcgY3Jvc3MgY29tcGlsZXIgZnJvbSByZWFsIHN5c3Jvb3QgdGhlcmVmb3JlIG92ZXJyaWRlIHRoZSIgPiAke0J9L2NvbmZpZ3Bhcm1zCisJZWNobyAiIyBkZWZpbml0aW9ucyB0aGF0IGNvbWUgZnJvbSAke0J9L2NvbmZpZy5tYWtlIiA+PiAke0J9L2NvbmZpZ3Bhcm1zCisJZmdyZXAgdGNib290c3RyYXAgJHtCfS9jb25maWcubWFrZSA+ICR7Qn0vY29uZmlncGFybXMKKwlzZWQgLWkgLWUgInMvXC10Y2Jvb3RzdHJhcC8vZyIgJHtCfS9jb25maWdwYXJtcworCisjIGcrKyB1c2VzIGZsYWcgLW5vc3RkaW5jLCBzbyB0aGUgbG9jYXRpb25zIG9mIHN5c3RlbSBpbmNsdWRlIGhlYWRlcnMgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZAorIyBJZiB0aGUgbG9jYXRpb25zIGFyZSBub3QgYWxyZWFkeSBzcGVjaWZpZWQgaW4gY29uZmlnLm1ha2UsIHRoZW4gd2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyMgICAgPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL2MrKy88ZysrIHZlcnNpb24+CisjICAgIDxzeXNyb290Pi91c3IvaW5jbHVkZS9jKysvPGcrKyB2ZXJzaW9uPi88bWFjaGluZT4KKworY3h4aW5jbHVkZXM9XGBjYXQgJHtCfS9jb25maWcubWFrZSB8IGdhd2sgJ1wkMSA9PSAiYysrLXN5c2luY2x1ZGVzIicgfCBnYXdrIC1GIj0iICd7cHJpbnQgXCQyfScgfCBzZWQgInMvWyBcdF1cPy8vZyJcYAorCitpZiBbIC16ICJcJGN4eGluY2x1ZGVzIiBdOyB0aGVuCisgIHN5c3Jvb3Q9XGBjYXQgJHtCfS9jb25maWdwYXJtcyB8IHNlZCAtbiAiL0NYWC9wIiB8IHNlZCAtZSAicy9eLiotLXN5c3Jvb3Q9Ly8iXGAKKyAgY3h4PVxgY2F0ICR7Qn0vY29uZmlncGFybXMgfCBnYXdrICdcJDEgfiAvXkNYWC8nIHwgZ2F3ayAtRiI9IiAne3ByaW50IFwkMn0nIHwgZ2F3ayAne3ByaW50IFwkMX0nXGAKKyAgY3h4bWFjaGluZT1cYFwkY3h4IC1kdW1wbWFjaGluZVxgCisgIGN4eHZlcnNpb249XGBcJGN4eCAtZHVtcHZlcnNpb25cYAorICAjIHBhc3MgdGhlIG5ldyB2YWx1ZSBvZiBjKystc3lzaW5jbHVkZXMgdmlhIGNvbmZpZ3Bhcm1zCisgIGVjaG8gIiMgYysrLXN5c2luY2x1ZGVzIGFkZGVkOiIgPj4gJHtCfS9jb25maWdwYXJtcworICBlY2hvICJjKystc3lzaW5jbHVkZXMgPSAtaXN5c3RlbSBcJHN5c3Jvb3QvdXNyL2luY2x1ZGUvYysrL1wkY3h4dmVyc2lvbiAtaXN5c3RlbSBcJHN5c3Jvb3QvdXNyL2luY2x1ZGUvYysrL1wkY3h4dmVyc2lvbi9cJGN4eG1hY2hpbmUiID4+ICR7Qn0vY29uZmlncGFybXMKK2ZpCisKK3dyYXBwZXI9IiR7U30vc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCBcJHRhcmdldCIKK2xvY2FsZWRlZj0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2Nyb3NzLWxvY2FsZWRlZiAtLWxpdHRsZS1lbmRpYW4gLS11aW50MzItYWxpZ249NCIKK21ha2UgdGVzdHMtY2xlYW4KK21ha2UgY3Jvc3MtbG9jYWxlZGVmPSJcJGxvY2FsZWRlZiIgY3Jvc3MtdGVzdC13cmFwcGVyPSJcJHdyYXBwZXIiIC1rIGNoZWNrCitybSAtcmYgJHtCfS9jb25maWdwYXJtcworU1RPUAorCisJY2htb2QgK3ggJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZhMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMKQEAgLTAsMCArMSwxMDUgQEAKK3JlcXVpcmUgZ2xpYmMtY29tbW9uLmluYworcmVxdWlyZSBnbGliYy1sZC5pbmMKK3JlcXVpcmUgZ2xpYmMtdGVzdGluZy5pbmMKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1BBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSIKKworIyBnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRob3V0IG9wdGltaXphdGlvbiwgaWYgc29tZW9uZSB0cmllcyB0byBjb21waWxlIGFuCisjIGVudGlyZSBpbWFnZSBhcyAtTzAsIHdlIG92ZXJyaWRlIGl0IHdpdGggLU8yIGhlcmUgYW5kIGdpdmUgYSBub3RlIGFib3V0IGl0LgorZGVmIGdldF9vcHRpbWl6YXRpb24oZCk6CisgICAgc2VsZWN0ZWRfb3B0aW1pemF0aW9uID0gZC5nZXRWYXIoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsIFRydWUpCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTzIiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24KKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8iLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8sIC1PIC1Xbm8tZXJyb3Igd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTyIsICItTyAtV25vLWVycm9yIikKKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8wIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PMCwgLU8yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU8wIiwgIi1PMiIpCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PcyIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtT3MsIC1PcyAtV25vLWVycm9yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU9zIiwgIi1PcyAtV25vLWVycm9yIikKKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8xIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PMSwgLU8xIC1Xbm8tZXJyb3Igd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTzEiLCAiLU8xIC1Xbm8tZXJyb3IiKQorICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24KKworU0VMRUNURURfT1BUSU1JWkFUSU9OIDo9ICIke0BnZXRfb3B0aW1pemF0aW9uKGQpfSIKKworIyBzaXRlY29uZmlnLmJiY2xhc3MgcnVucyBjb25maWd1cmUgd2hpY2ggbmVlZHMgYSB3b3JraW5nIGNvbXBpbGVyCisjIEZvciB0aGUgY29tcGlsZXIgdG8gd29yayB3ZSBuZWVkIGEgd29ya2luZyBsaWJjIHlldCBsaWJjIGlzbid0CisjIGluIHRoZSBzeXNyb290cyBkaXJlY3RvcnkgYXQgdGhpcyBwb2ludC4gVGhpcyBtZWFucyB0aGUgbGliYy5zbworIyBsaW5rZXIgc2NyaXB0IHdvbid0IHdvcmsgYXMgdGhlIC0tc3lzcm9vdCBzZXR0aW5nIGlzbid0IGNvcnJlY3QuCisjIEhlcmUgd2UgY3JlYXRlIGEgaGFja2VkIHVwIGxpYmMgbGlua2VyIHNjcmlwdCBhbmQgcGFzcyBpbiB0aGUgcmlnaHQKKyMgZmxhZ3MgdG8gbGV0IGNvbmZpZ3VyZSB3b3JrLiBVZ2x5LgorRVhUUkFTSVRFQ09ORklHID0gIkNGTEFHUz0nJHtDRkxBR1N9IC1XbCwtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSciCitzaXRlY29uZmlnX2RvX3NpdGVjb25maWdfZ2VuY2FjaGVfcHJlcGVuZCA9ICIgXAorCW1rZGlyIC1wICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorCWNwICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9saWJjLnNvICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorCXNlZCAtaSAtZSAncyMgJHtiYXNlX2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9I2cnIC1lICdzIyAke2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSNnJyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMvbGliYy5zbzsgXAorIgorCisjIG5wdGwgbmVlZHMgdW53aW5kIHN1cHBvcnQgaW4gZ2NjLCB3aGljaCBjYW4ndCBiZSBidWlsdCB3aXRob3V0IGdsaWJjLgorREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBsaWJnY2MtaW5pdGlhbCBsaW51eC1saWJjLWhlYWRlcnMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIgorIyBucHRsIG5lZWRzIGxpYmdjYyBidXQgZGxvcGVucyBpdCwgc28gb3VyIHNobGlicyBjb2RlIGRvZXNuJ3QgZGV0ZWN0IHRoaXMKKyNSREVQRU5EU18ke1BOfSArPSAiJHtAWycnLCdsaWJnY2MnXVsnbnB0bCcgaW4gJyR7R0xJQkNfQURET05TfSddfSIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MiCitQUk9WSURFUyArPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvbGliaWNvbnYiCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGRpc3Ryb19mZWF0dXJlc19jaGVjayBzeXN0ZW1kCityZXF1aXJlIGdsaWJjLW9wdGlvbnMuaW5jCisKKyMgVGhlIG1haW4gcHVycG9zZSBvZiBzZXR0aW5nIHRoaXMgdmFyaWFibGUgaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIGFjY2lkZW50bHkKKyMgb3ZlcnJpZGluZyBESVNUUk9fRkVBVFJVRVMsIGNhdXNpbmcgb2JzY3VyZSBidWlsZCBmYWlsdXJlcyBiZWNhdXNlIG9mIGxhY2sKKyMgb2YgbGliYyBmdW5jdGlvbnMuCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiJHtESVNUUk9fRkVBVFVSRVNfTElCQ30iCisKK0xFQURfU09OQU1FID0gImxpYmMuc28iCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICIgXAorICBhY19jdl9wYXRoX0JBU0hfU0hFTEw9JHtiYXNlX2JpbmRpcn0vYmFzaCBcCisgIGxpYmNfY3Zfc2xpYmRpcj0ke2Jhc2VfbGliZGlyfSBcCisgIGxpYmNfY3Zfcm9vdHNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKKyAgbGliY19jdl9sb2NhbGVkaXI9JHtsb2NhbGVkaXJ9IFwKKyAgbGliY19jdl9zc3A9bm8gXAorIgorCitHTElCQ19FWFRSQV9PRUNPTkYgPz0gIiIKK0dMSUJDX0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworIyBUaGlzIG5lZWRzIHRvIG1hdGNoIHdpdGggZ2xpYmMtY29sbGF0ZXJhbC5pbmMsIG90aGVyd2lzZSBnbGliYy1zY3JpcHRzIGFuZCBnbGliYy1sb2NhbGUKKyMgd2lsbCBmYWlsIHRvIGZpbmQgbWFpbiBnbGliYywgZm9yIGRldGFpbHMgc2VlCisjIGh0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDE1LUphbnVhcnkvMTAwNjc5Lmh0bWwKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCisjIGdsaWJjIHVzZXMgUEFSQUxMRUxNRkxBR1MgdmFyaWFibGUgdG8gcGFzcyBwYXJhbGxlbCBidWlsZCBpbmZvIHNvIHRyYW5zZmVyCisjIFBBUkFMTEVMX01BS0UgaW50byBQQVJBTExFTE1GTEFHUyBhbmQgZW1wdHkgb3V0IFBBUkFMTEVMX01BS0UKK0VHTElCQ1BBUkFMTEVMSVNNIDo9ICJQQVJBTExFTE1GTEFHUz0iJHtQQVJBTExFTF9NQUtFfSIiCitFWFRSQV9PRU1BS0VbdmFyZGVwc2V4Y2x1ZGVdICs9ICJFR0xJQkNQQVJBTExFTElTTSIKK0VYVFJBX09FTUFLRSArPSAiJHtFR0xJQkNQQVJBTExFTElTTX0iCitQQVJBTExFTF9NQUtFID0gIiIKKworIyBnbGliYyBtYWtlLXN5c2NhbGxzLnNoIGhhcyBhIG51bWJlciBvZiBpc3N1ZXMgd2l0aCAvYmluL2Rhc2ggYW5kCisjIGl0J3Mgb3V0cHV0IHdoaWNoIG1ha2UgY2FsbHMgdmlhIHRoZSBTSEVMTCBhbHNvIGhhcyBpc3N1ZXMsIHNvCisjIGVuc3VyZSBtYWtlIHVzZXMgL2Jpbi9iYXNoCitFWFRSQV9PRU1BS0UgKz0gIlNIRUxMPS9iaW4vYmFzaCIKKworT0VfRkVBVFVSRVMgPSAiJHtAZmVhdHVyZXNfdG9fZ2xpYmNfc2V0dGluZ3MoZCl9IgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1lICJzI0BCQVNIQCMvYmluL3NoIyIgLWkgJHtTfS9lbGYvbGRkLmJhc2guaW4KKwllY2hvICcke09FX0ZFQVRVUkVTfScgPiAke0J9L29wdGlvbi1ncm91cHMuY29uZmlnCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJeWVzICcnIHwgb2VfcnVubWFrZSBjb25maWcKKworCSMgUmVtb3ZlIHF1b3RhdGlvbiBtYXJrcyBmcm9tIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfKi4gVGhpcyB3aWxsCisJIyBhdm9pZCBpbnN0YWxsIGVycm9yLgorCXNlZCAtaSAncy9eT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9cKC4qXCk9IlwoLipcKSIkL09QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfXDE9XDIvJyBvcHRpb24tZ3JvdXBzLmNvbmZpZworfQorCitHTElCQ19BRERPTlMgPz0gIm5wdGwsbGliaWRuIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDY2MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSAwODc2ZmVhMWI1YjI2ZGE4NGYyOTg3MTRhMmUyM2JhNjk2NjA3ZGJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NDg6MjQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8yN10gbmF0aXZlc2RrLWdsaWJjOiBMb29rIGZvciBob3N0IHN5c3RlbSBsZC5zby5jYWNoZSBhcworIHdlbGwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIGRlZmF1bHQgbGliIHNlYXJjaCBwYXRoIG9yZGVyIGlzOgorCisgIDEpIExEX0xJQlJBUllfUEFUSAorICAyKSBSUEFUSCBmcm9tIHRoZSBiaW5hcnkKKyAgMykgbGQuc28uY2FjaGUKKyAgNCkgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZW1iZWRkZWQgaW4gdGhlIGxpbmtlcgorCitGb3IgbmF0aXZlc2RrIGJpbmFyaWVzIHdoaWNoIGFyZSBiZWluZyB1c2VkIGFsb25nc2lkZSBiaW5hcmllcyBvbiBhIGhvc3Qgc3lzdGVtLCB3ZQorbmVlZCB0aGUgc2VhcmNoIHBhdGhzIHRvIGZpcnN0bHkgc2VhcmNoIHRoZSBzaGlwcGVkIG5hdGl2ZXNkayBsaWJzIGJ1dCB0aGVuIGFsc28KK2NvdmVyIHRoZSBob3N0IHN5c3RlbS4gRm9yIGV4YW1wbGUgd2Ugd2FudCB0aGUgaG9zdCBzeXN0ZW0ncyBsaWJHTCBhbmQgdGhpcyBtYXkgYmUKK2luIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIvbWVzYS4gVGhlIG9ubHkgcGxhY2UgdGhlIGxvY2F0aW9uIGlzIGtub3cKK2Fib3V0IGlzIGluIHRoZSBsZC5zby5jYWNoZSBvZiB0aGUgaG9zdCBzeXN0ZW0uCisKK1NpbmNlIG5hdGl2ZXNkayBoYXMgYSBzaW1wbGUgc3RydWN0dXJlIGFuZCBkb2Vzbid0IG5lZWQgdG8gdXNlIGEgY2FjaGUgaXRzZWxmLCB3ZQorcmVwdXJwb3NlIHRoZSBjYWNoZSBmb3IgdXNlIGFzIGEgbGFzdCByZXNvcnQgaW4gZmluZGluZyBob3N0IHN5c3RlbSBiaW5hcmllcy4gVGhpcworbWVhbnMgd2UgbmVlZCB0byBzd2l0Y2ggdGhlIG9yZGVyIG9mIDMgYW5kIDQgYWJvdmUgdG8gbWFrZSB0aGlzIHdvcmsgZWZmZWN0aXZlbHkuCisKK1JQIDE0LzEwLzIwMTAKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9kbC1sb2FkLmMgfCAxNyArKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggMGMwNTJlNC4uZjQ1MDg1YSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC0yMDQwLDcgKzIwNDAsMTQgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorIAlmZCA9IG9wZW5fcGF0aCAobmFtZSwgbmFtZWxlbiwgbW9kZSwKKyAJCQkmbG9hZGVyLT5sX3J1bnBhdGhfZGlycywgJnJlYWxuYW1lLCAmZmIsIGxvYWRlciwKKyAJCQlMQV9TRVJfUlVOUEFUSCwgJmZvdW5kX290aGVyX2NsYXNzKTsKKy0KKysgICAgICAvKiB0cnkgdGhlIGRlZmF1bHQgcGF0aC4gICovCisrICAgICAgaWYgKGZkID09IC0xCisrCSAgJiYgKChsID0gbG9hZGVyID86IEdMKGRsX25zKVtuc2lkXS5fbnNfbG9hZGVkKSA9PSBOVUxMCisrCSAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKCEobC0+bF9mbGFnc18xICYgREZfMV9OT0RFRkxJQiksIDEpKQorKwkgJiYgcnRsZF9zZWFyY2hfZGlycy5kaXJzICE9ICh2b2lkICopIC0xKQorKwlmZCA9IG9wZW5fcGF0aCAobmFtZSwgbmFtZWxlbiwgbW9kZSAmIF9fUlRMRF9TRUNVUkUsICZydGxkX3NlYXJjaF9kaXJzLAorKwkJCSZyZWFsbmFtZSwgJmZiLCBsLCBMQV9TRVJfREVGQVVMVCwgJmZvdW5kX290aGVyX2NsYXNzKTsKKysgICAgICAvKiBGaW5hbGx5IHRyeSBsZC5zby5jYWNoZSAqLworICNpZmRlZiBVU0VfTERDT05GSUcKKyAgICAgICBpZiAoZmQgPT0gLTEKKyAJICAmJiAoX19nbGliY19saWtlbHkgKChtb2RlICYgX19SVExEX1NFQ1VSRSkgPT0gMCkKK0BAIC0yMDk5LDE0ICsyMTA2LDYgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorIAl9CisgI2VuZGlmCisgCistICAgICAgLyogRmluYWxseSwgdHJ5IHRoZSBkZWZhdWx0IHBhdGguICAqLworLSAgICAgIGlmIChmZCA9PSAtMQorLQkgICYmICgobCA9IGxvYWRlciA/OiBHTChkbF9ucylbbnNpZF0uX25zX2xvYWRlZCkgPT0gTlVMTAorLQkgICAgICB8fCBfX2dsaWJjX2xpa2VseSAoIShsLT5sX2ZsYWdzXzEgJiBERl8xX05PREVGTElCKSkpCistCSAgJiYgcnRsZF9zZWFyY2hfZGlycy5kaXJzICE9ICh2b2lkICopIC0xKQorLQlmZCA9IG9wZW5fcGF0aCAobmFtZSwgbmFtZWxlbiwgbW9kZSwgJnJ0bGRfc2VhcmNoX2RpcnMsCistCQkJJnJlYWxuYW1lLCAmZmIsIGwsIExBX1NFUl9ERUZBVUxULCAmZm91bmRfb3RoZXJfY2xhc3MpOworLQorICAgICAgIC8qIEFkZCBhbm90aGVyIG5ld2xpbmUgd2hlbiB3ZSBhcmUgdHJhY2luZyB0aGUgbGlicmFyeSBsb2FkaW5nLiAgKi8KKyAgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG4iKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTY4ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSAwODZiNjVkOWFhY2ZmYzQ3ZmNkOGRmNjg4MThhNDc2YTVhZTc2ZmExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTA6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8yN10gbmF0aXZlc2RrLWdsaWJjOiBGaXggYnVmZmVyIG92ZXJydW4gd2l0aCBhIHJlbG9jYXRlZAorIFNESworCitXaGVuIGxkLWxpbnV4LSouc28uMiBpcyByZWxvY2F0ZWQgdG8gYSBwYXRoIHRoYXQgaXMgbG9uZ2VyIHRoYW4gdGhlCitvcmlnaW5hbCBmaXhlZCBsb2NhdGlvbiwgdGhlIGR5bmFtaWMgbG9hZGVyIHdpbGwgY3Jhc2ggaW4gb3Blbl9wYXRoCitiZWNhdXNlIGl0IGltcGxpY2l0bHkgYXNzdW1lcyB0aGF0IG1heF9kaXJuYW1lbGVuIGlzIGEgZml4ZWQgc2l6ZSB0aGF0CituZXZlciBjaGFuZ2VzLgorCitUaGUgYWxsb2NhdGVkIGJ1ZmZlciB3aWxsIG5vdCBiZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgZGlyZWN0b3J5CitwYXRoIHN0cmluZyB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgZml4ZWQgbG9jYXRpb24gcHJvdmlkZWQgYXQgYnVpbGQKK3RpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU0RLIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9kbC1sb2FkLmMgfCAxMiArKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IGY0NTA4NWEuLmYxZWI1ZWQgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtMTc2NSw3ICsxNzY1LDE5IEBAIG9wZW5fcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBtb2RlLAorICAgICAgICBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gcnRsZCBpcyBydW4gZGlyZWN0bHkuICAqLworICAgICByZXR1cm4gLTE7CisgCisrICBkbworKyAgICB7CisrICAgICAgc3RydWN0IHJfc2VhcmNoX3BhdGhfZWxlbSAqdGhpc19kaXIgPSAqZGlyczsKKysgICAgICBpZiAodGhpc19kaXItPmRpcm5hbWVsZW4gPiBtYXhfZGlybmFtZWxlbikKKysJeworKwkgIG1heF9kaXJuYW1lbGVuID0gdGhpc19kaXItPmRpcm5hbWVsZW47CisrCX0KKysgICAgfQorKyAgd2hpbGUgKCorK2RpcnMgIT0gTlVMTCk7CisrCisgICBidWYgPSBhbGxvY2EgKG1heF9kaXJuYW1lbGVuICsgbWF4X2NhcHN0cmxlbiArIG5hbWVsZW4pOworKworKyAgZGlycyA9IHNwcy0+ZGlyczsKKyAgIGRvCisgICAgIHsKKyAgICAgICBzdHJ1Y3Qgcl9zZWFyY2hfcGF0aF9lbGVtICp0aGlzX2RpciA9ICpkaXJzOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODFhNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaApAQCAtMCwwICsxLDEyNiBAQAorRnJvbSBmZDU5NWE1ZWM4ODViY2I0YzE0NDE3ZGFhMjFjMmU2MWM1YjcyZTQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTE6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8yN10gbmF0aXZlc2RrLWdsaWJjOiBSYWlzZSB0aGUgc2l6ZSBvZiBhcnJheXMgY29udGFpbmluZyBkbAorIHBhdGhzCisKK1RoaXMgcGF0Y2ggcHV0cyB0aGUgZHluYW1pYyBsb2FkZXIgcGF0aCBpbiB0aGUgYmluYXJpZXMsIFNZU1RFTV9ESVJTIHN0cmluZ3MKK2FuZCBsZW5ndGhzIGFzIHdlbGwgYXMgbGQuc28uY2FjaGUgcGF0aCBpbiB0aGUgZHluYW1pYyBsb2FkZXIgdG8gc3BlY2lmaWMKK3NlY3Rpb25zIGluIG1lbW9yeS4gVGhlIHNlY3Rpb25zIHRoYXQgY29udGFpbiBwYXRocyBoYXZlIGJlZW4gYWxsb2NhdGVkIGEgNDA5NgorYnl0ZSBzZWN0aW9uLCB3aGljaCBpcyB0aGUgbWF4aW11bSBwYXRoIGxlbmd0aCBpbiBsaW51eC4gVGhpcyB3aWxsIGFsbG93IHRoZQorcmVsb2NhdGluZyBzY3JpcHQgdG8gcGFyc2UgdGhlIEVMRiBiaW5hcnksIGRldGVjdCB0aGUgc2VjdGlvbiBhbmQgZWFzaWx5IHJlcGxhY2UKK3RoZSBzdHJpbmdzIGluIGEgY2VydGFpbiBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1NESyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9kbC1jYWNoZS5jICAgICAgICAgICAgIHwgNCArKysrCisgZWxmL2RsLWxvYWQuYyAgICAgICAgICAgICAgfCA0ICsrLS0KKyBlbGYvaW50ZXJwLmMgICAgICAgICAgICAgICB8IDIgKy0KKyBlbGYvbGRjb25maWcuYyAgICAgICAgICAgICB8IDMgKysrCisgZWxmL3J0bGQuYyAgICAgICAgICAgICAgICAgfCA1ICsrKy0tCisgc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmggfCA0IC0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9lbGYvZGwtY2FjaGUuYyBiL2VsZi9kbC1jYWNoZS5jCitpbmRleCBkZWM0OWJjLi44NjJmMWQ4IDEwMDY0NAorLS0tIGEvZWxmL2RsLWNhY2hlLmMKKysrKyBiL2VsZi9kbC1jYWNoZS5jCitAQCAtMTMyLDYgKzEzMiwxMCBAQCBkbwkJCQkJCQkJCSAgICAgIFwKKyB3aGlsZSAoMCkKKyAKKyAKKytjb25zdCBjaGFyIExEX1NPX0NBQ0hFWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxkc29jYWNoZSIpKSkgPQorKwkJU1lTQ09ORkRJUiAiL2xkLnNvLmNhY2hlIjsKKysKKysKKyBpbnQKKyBpbnRlcm5hbF9mdW5jdGlvbgorIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMikKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggZjFlYjVlZC4uZjY2NGY1MCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC0xMDQsOCArMTA0LDggQEAgc3RhdGljIHNpemVfdCBtYXhfY2Fwc3RybGVuIGF0dHJpYnV0ZV9yZWxybzsKKyAvKiBHZXQgdGhlIGdlbmVyYXRlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJ1c3RlZCBkaXJlY3Rvcmllcy4gICovCisgI2luY2x1ZGUgInRydXN0ZWQtZGlycy5oIgorIAorLXN0YXRpYyBjb25zdCBjaGFyIHN5c3RlbV9kaXJzW10gPSBTWVNURU1fRElSUzsKKy1zdGF0aWMgY29uc3Qgc2l6ZV90IHN5c3RlbV9kaXJzX2xlbltdID0KKytzdGF0aWMgY29uc3QgY2hhciBzeXN0ZW1fZGlyc1s0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5zeXNkaXJzIikpKSA9IFNZU1RFTV9ESVJTOworK3ZvbGF0aWxlIHN0YXRpYyBjb25zdCBzaXplX3Qgc3lzdGVtX2RpcnNfbGVuW10gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuc3lzZGlyc2xlbiIpKSkgPQorIHsKKyAgIFNZU1RFTV9ESVJTX0xFTgorIH07CitkaWZmIC0tZ2l0IGEvZWxmL2ludGVycC5jIGIvZWxmL2ludGVycC5jCitpbmRleCA0MjJlYTk1ZS4uNmQ2MWEzNiAxMDA2NDQKKy0tLSBhL2VsZi9pbnRlcnAuYworKysrIGIvZWxmL2ludGVycC5jCitAQCAtMTgsNSArMTgsNSBAQAorIAorICNpbmNsdWRlIDxydW50aW1lLWxpbmtlci5oPgorIAorLWNvbnN0IGNoYXIgX19pbnZva2VfZHluYW1pY19saW5rZXJfX1tdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmludGVycCIpKSkKKytjb25zdCBjaGFyIF9faW52b2tlX2R5bmFtaWNfbGlua2VyX19bNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuaW50ZXJwIikpKQorICAgPSBSVU5USU1FX0xJTktFUjsKK2RpZmYgLS1naXQgYS9lbGYvbGRjb25maWcuYyBiL2VsZi9sZGNvbmZpZy5jCitpbmRleCBmNTRlYzIyLi4wZTc4YTgzIDEwMDY0NAorLS0tIGEvZWxmL2xkY29uZmlnLmMKKysrKyBiL2VsZi9sZGNvbmZpZy5jCitAQCAtMTY3LDYgKzE2Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0KKyAgIG9wdGlvbnMsIHBhcnNlX29wdCwgTlVMTCwgZG9jLCBOVUxMLCBtb3JlX2hlbHAsIE5VTEwKKyB9OworIAorKworK2V4dGVybiBjb25zdCBjaGFyIExEX1NPX0NBQ0hFWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxkc29jYWNoZSIpKSk7CisrCisgLyogQ2hlY2sgaWYgc3RyaW5nIGNvcnJlc3BvbmRzIHRvIGFuIGltcG9ydGFudCBoYXJkd2FyZSBjYXBhYmlsaXR5IG9yCisgICAgYSBwbGF0Zm9ybS4gICovCisgc3RhdGljIGludAorZGlmZiAtLWdpdCBhL2VsZi9ydGxkLmMgYi9lbGYvcnRsZC5jCitpbmRleCA2OTg3M2MyLi42ZDNhZGQ3IDEwMDY0NAorLS0tIGEvZWxmL3J0bGQuYworKysrIGIvZWxmL3J0bGQuYworQEAgLTk5LDYgKzk5LDcgQEAgdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwKKyBzdHJvbmdfYWxpYXMgKF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwsIF9fcG9pbnRlcl9jaGtfZ3VhcmQpCisgI2VuZGlmCisgCisrZXh0ZXJuIGNvbnN0IGNoYXIgTERfU09fQ0FDSEVbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIubGRzb2NhY2hlIikpKTsKKyAKKyAvKiBMaXN0IG9mIGF1ZGl0aW5nIERTT3MuICAqLworIHN0YXRpYyBzdHJ1Y3QgYXVkaXRfbGlzdAorQEAgLTg3NywxMiArODc4LDEyIEBAIG9mIHRoaXMgaGVscGVyIHByb2dyYW07IGNoYW5jZXMgYXJlIHlvdSBkaWQgbm90IGludGVuZCB0byBydW4gdGhpcyBwcm9ncmFtLlxuXAorICAgLS1saXN0ICAgICAgICAgICAgICAgIGxpc3QgYWxsIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgYXJlIHJlc29sdmVkXG5cCisgICAtLXZlcmlmeSAgICAgICAgICAgICAgdmVyaWZ5IHRoYXQgZ2l2ZW4gb2JqZWN0IHJlYWxseSBpcyBhIGR5bmFtaWNhbGx5IGxpbmtlZFxuXAorIAkJCW9iamVjdCB3ZSBjYW4gaGFuZGxlXG5cCistICAtLWluaGliaXQtY2FjaGUgICAgICAgRG8gbm90IHVzZSAiIExEX1NPX0NBQ0hFICJcblwKKysgIC0taW5oaWJpdC1jYWNoZSAgICAgICBEbyBub3QgdXNlICVzXG5cCisgICAtLWxpYnJhcnktcGF0aCBQQVRIICAgdXNlIGdpdmVuIFBBVEggaW5zdGVhZCBvZiBjb250ZW50IG9mIHRoZSBlbnZpcm9ubWVudFxuXAorIAkJCXZhcmlhYmxlIExEX0xJQlJBUllfUEFUSFxuXAorICAgLS1pbmhpYml0LXJwYXRoIExJU1QgIGlnbm9yZSBSVU5QQVRIIGFuZCBSUEFUSCBpbmZvcm1hdGlvbiBpbiBvYmplY3QgbmFtZXNcblwKKyAJCQlpbiBMSVNUXG5cCistICAtLWF1ZGl0IExJU1QgICAgICAgICAgdXNlIG9iamVjdHMgbmFtZWQgaW4gTElTVCBhcyBhdWRpdG9yc1xuIik7CisrICAtLWF1ZGl0IExJU1QgICAgICAgICAgdXNlIG9iamVjdHMgbmFtZWQgaW4gTElTVCBhcyBhdWRpdG9yc1xuIiwgTERfU09fQ0FDSEUpOworIAorICAgICAgICsrX2RsX3NraXBfYXJnczsKKyAgICAgICAtLV9kbF9hcmdjOworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oIGIvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmgKK2luZGV4IDRiNDk4NjkuLjE4MDBkMDMgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAorKysrIGIvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmgKK0BAIC0yNywxMCArMjcsNiBAQAorICAgKChmbGFncykgPT0gMSB8fCAoZmxhZ3MpID09IF9ETF9DQUNIRV9ERUZBVUxUX0lEKQorICNlbmRpZgorIAorLSNpZm5kZWYgTERfU09fQ0FDSEUKKy0jIGRlZmluZSBMRF9TT19DQUNIRSBTWVNDT05GRElSICIvbGQuc28uY2FjaGUiCistI2VuZGlmCistCisgI2lmbmRlZiBhZGRfc3lzdGVtX2RpcgorICMgZGVmaW5lIGFkZF9zeXN0ZW1fZGlyKGRpcikgYWRkX2RpciAoZGlyKQorICNlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtQmFja3BvcnQtaHR0cHMtc291cmNld2FyZS5vcmctbWwtbGliYy1wb3J0cy0yMDA3LTEyLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODc1MDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtQmFja3BvcnQtaHR0cHMtc291cmNld2FyZS5vcmctbWwtbGliYy1wb3J0cy0yMDA3LTEyLS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDI1NjBiNTY0YjU2NzRiZjI5OTBlNTYwN2Y2MzQyYzE2NDdhNWRjNGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA4IE1hciAyMDE1IDA0OjAxOjAxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMjddIEJhY2twb3J0CisgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLXBvcnRzLzIwMDctMTIvbXNnMDAwMDAuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworMjAwNy0xMi0wMyAgS3Jpc3RpYW4gVmFuIERlciBWbGlldCAgPHZhbmRlcnNAbGlxd3lkLmNvbT4KKworICAgICAgICAqIGJpdHMvc3RkaW8tbG9jay5oIChfSU9fYWNxdWlyZV9sb2NrX2NsZWFyX2ZsYWdzMik6IERlZmluZQorCitTaWduZWQtb2ZmLWJ5OiBLcmlzdGlhbiBWYW4gRGVyIFZsaWV0IDx2YW5kZXJzQGxpcXd5ZC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYml0cy9zdGRpby1sb2NrLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYml0cy9zdGRpby1sb2NrLmggYi9iaXRzL3N0ZGlvLWxvY2suaAoraW5kZXggMGM1YmI2NS4uNjYzMDRhNiAxMDA2NDQKKy0tLSBhL2JpdHMvc3RkaW8tbG9jay5oCisrKysgYi9iaXRzL3N0ZGlvLWxvY2suaAorQEAgLTQ5LDYgKzQ5LDggQEAgX19saWJjX2xvY2tfZGVmaW5lX3JlY3Vyc2l2ZSAodHlwZWRlZiwgX0lPX2xvY2tfdCkKKyAgIF9JT19jbGVhbnVwX3JlZ2lvbl9zdGFydCAoKHZvaWQgKCopICh2b2lkICopKSBfSU9fZnVubG9ja2ZpbGUsIChfZnApKTsgICAgICBcCisgICBfSU9fZmxvY2tmaWxlIChfZnApCisgCisrIyBkZWZpbmUgX0lPX2FjcXVpcmVfbG9ja19jbGVhcl9mbGFnczIoX2ZwKSBfSU9fYWNxdWlyZV9sb2NrIChfZnApCisrCisgIyBkZWZpbmUgX0lPX3JlbGVhc2VfbG9jayhfZnApIFwKKyAgIF9JT19mdW5sb2NrZmlsZSAoX2ZwKTsJCQkJCQkgICAgICBcCisgICBfSU9fY2xlYW51cF9yZWdpb25fZW5kICgwKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkM2Y4NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDE1ODQgQEAKK0Zyb20gYWEwY2Q4Mjg5MmYzMmU1ODYwMjE0M2M2OTdlZjA1MjQ2OTZhNjQyOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjAxOjUwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMjddIGZzbCBlNTAwL2U1NTAwL2U2NTAwLzYwM2UgZnNxcnQgaW1wbGVtZW50YXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBFZG1hciBXaWVuc2tvc2tpIDxlZG1hckBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jICAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMgIHwgICAxICsKKyAuLi4vbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzICAgICB8ICAgMiArCisgLi4uL2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcyAgICAgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAxOSBmaWxlcyBjaGFuZ2VkLCAxNDE4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxMDNiNGQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY0ZGIxN2YKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcworQEAgLTAsMCArMSwyIEBACisrIyBlMzAwYzMgaXMgYSB2YXJpYW50IG9mIDYwM2Ugc28gdXNlIHRoZSBzYW1lIG9wdGltaXphdGlvbnMgZm9yIHNxcnQKKytwb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjdlYWM1ZmMKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjY0YjJhNworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTI1OTM0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTdiYzg1NAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDRmZjhjYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWMyMjdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA1ZWMxYmM1MTcyODUxMjc4MjMxY2U5NDBiNjhiMzVjZTljYmY4NTAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MTE6MjIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8yN10gcmVhZGxpYjogQWRkIE9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyB0byBrbm93bgorIG5hbWVzCisKK1RoaXMgYm9sdHMgaW4gYSBob29rIGZvciBPRSB0byBwYXNzIGl0cyBvd24gdmVyc2lvbiBvZiBpbnRlcnByZXRlcgorbmFtZXMgaW50byBnbGliYyBlc3BlY2lhbGx5IGZvciBtdWx0aWxpYiBjYXNlLCB3aGVyZSBpdCBkaWZmZXJzIGZyb20gYW55CitvdGhlciBkaXN0cm9zCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IExpYW5oYW8gTHUgPGxpYW5oYW8ubHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9yZWFkbGliLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2VsZi9yZWFkbGliLmMgYi9lbGYvcmVhZGxpYi5jCitpbmRleCA3ZmQ1YjhhLi4yZjVkYTlmIDEwMDY0NAorLS0tIGEvZWxmL3JlYWRsaWIuYworKysrIGIvZWxmL3JlYWRsaWIuYworQEAgLTUxLDYgKzUxLDcgQEAgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBpbnRlcnByZXRlcnNbXSA9CisgI2lmZGVmIFNZU0RFUF9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUworICAgU1lTREVQX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTCisgI2VuZGlmCisrICBPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMKKyB9OworIAorIHN0YXRpYyBzdHJ1Y3Qga25vd25fbmFtZXMga25vd25fbGlic1tdID0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM4ZmJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2gKQEAgLTAsMCArMSwyMDggQEAKK0Zyb20gZWE5OGIxYTEyYjVmNzc5ZmQ3OTQ3OGZmOTMwYTc5ZWY2MDM4Nzg1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjE1OjA3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMjddIHBwYy9zcXJ0OiBGaXggdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zcXJ0X2Zpbml0ZScKKworb24gcHBjIGZpeGVzIHRoZSBlcnJvcnMgbGlrZSBiZWxvdworfCAuLy5saWJzL2xpYnB1bHNlY29yZS0xLjEuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3FydF9maW5pdGUnCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDaGFuZ2VMb2cKKworMjAxMi0wMS0wNiAgS2hlbSBSYWogIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmM6IEFkZCBfXypfZmluaXRlIGFsaWFzLgorICAgICAgICBSZW1vdmUgY3J1ZnQuCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmM6IERpdHRvLgorICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmM6IERpdHRvLgorICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jOiBEaXR0by4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgICAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyAgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEgKworIDEyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLjE3OTVmZDYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitAQCAtMzksMTQgKzM5LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGRvdWJsZQorIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKy0jZWxzZQorLWRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorLSAgICAgZG91YmxlIGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTEzMiwzICsxMjYsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uYTkxN2YzMSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworQEAgLTM3LDE0ICszNyw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisgICAgc3F1YXJlIHJvb3QuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGZsb2F0CisgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorLSNlbHNlCistZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCistICAgICBmbG9hdCBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05OSwzICs5Myw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi4xNzk1ZmQ2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMzksMTQgKzM5LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGRvdWJsZQorIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKy0jZWxzZQorLWRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorLSAgICAgZG91YmxlIGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTEzMiwzICsxMjYsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li5hOTE3ZjMxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zNywxNCArMzcsOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorICAgIHNxdWFyZSByb290LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBmbG9hdAorIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKy0jZWxzZQorLWZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorLSAgICAgZmxvYXQgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTksMyArOTMsNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZmE5MzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApAQCAtMCwwICsxLDM4NyBAQAorRnJvbSAyNDU2ZWE0NGFlZWVkYWU4N2VkYjUyMmY3N2E3OTY5ZDYzNjM5OWIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MTY6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8yN10gX19pZWVlNzU0X3NxcnR7LGZ9IGFyZSBub3cgaW5saW5lIGZ1bmN0aW9ucyBhbmQgY2FsbAorIG91dCBfX3Nsb3cgdmVyc2lvbnMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jICAgIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgICB8ICA4ICsrKysrKystCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jICB8IDE0ICsrKysrKysrKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCAxNCArKysrKysrKysrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgIDggKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgIDggKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8ICA5ICsrKysrKysrLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAxNCArKysrKysrKysrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAxMiArKysrKysrKysrLS0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworaW5kZXggMTc5NWZkNi4uZGFhODNmMyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK0BAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTc3LDcgKzc3LDcgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTI2LDQgKzEyNiwxMiBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitpbmRleCBhOTE3ZjMxLi5iODEyY2YxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIHNxdWFyZSByb290LiAgKi8KKyAKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTMsNCArOTMsMTAgQEAgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li4xYzM0MjQ0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uODEyNjUzNSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggMTc5NWZkNi4uMTNhODE5NyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtNzcsNyArNzcsNyBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMjYsNCArMTI2LDEyIEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCBhOTE3ZjMxLi5mYWUyZDgxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgc3F1YXJlIHJvb3QuICAqLworIAorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05Myw0ICs5MywxMSBAQCBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjU0NzU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBhY2Y3YTAyODgxN2U3MWViOTlkNzg1MDM3NjU5YWJkNGQxMjBmZmUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MjA6MDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8yN10gUXVvdGUgZnJvbSBidWcgMTQ0MyB3aGljaCBleHBsYWlucyB3aGF0IHRoZSBwYXRjaCBkb2VzCisgOgorCisgIFdlIGJ1aWxkIHNvbWUgcmFuZG9tIHByb2dyYW0gYW5kIGxpbmsgaXQgd2l0aCAtbHVzdC4gIFdoZW4gd2UgcnVuIGl0LAorICBpdCBkaWVzIHdpdGggYSBTSUdTRUdWIGJlZm9yZSByZWFjaGluZyBtYWluKCkuCisKKyAgTGlidXN0LnNvIGRlcGVuZHMgb24gbGlidXJjdS1icC5zbyBmcm9tIHRoZSB1c2VybW9kZS1yY3UgcGFja2FnZS4KKyAgQWx0aG91Z2ggbGlidXN0LnNvIGlzIG5vdCBwcmVsaW5rZWQsIGxpYnVyY3UtYnAuc28gSVMgcHJlbGlua2VkOyB0aGlzCisgIGlzIGNyaXRpY2FsLgorCisgIExpYnVzdC5zbyB1c2VzIGEgVExTIC8gX190aHJlYWQgdmFyaWFibGUgdGhhdCBpcyBkZWZpbmVkIGluIGxpYnVyY3UtCisgIGJwLnNvLiAgVGhlcmUgYXJlIHNwZWNpYWwgQVJNLXNwZWNpZmljIHJlbG9jYXRpb24gdHlwZXMgdGhhdCBhbGxvdyB0d28KKyAgc2hhcmVkIGxpYnJhcmllcyB0byBzaGFyZSB0aHJlYWQtc3BlY2lmaWMgZGF0YS4gIFRoaXMgaXMgY3JpdGljYWwgdG9vLgorCisgIE9uZSBtb3JlIGNyaXRpY2FsIGlzc3VlOiBhbHRob3VnaCBsaWJ1cmN1LWJwLnNvIGlzIHByZWxpbmtlZCwgd2UgY2FuJ3QKKyAgbG9hZCBpdCBhdCBpdHMgcHJlbGlua2VkIGFkZHJlc3MsIGJlY2F1c2Ugd2UgYWxzbyBsaW5rIGFnYWluc3QKKyAgbGlicnQuc28sIGFuZCBsaWJydC5zbyB1c2VzIHRoYXQgYWRkcmVzcy4KKworICBUaGUgZHluYW1pYyBsaW5rZXIgaXMgZm9yY2VkIHRvIHJlbGluayBsaWJ1cmN1LWJwLnNvIGF0IGEgZGlmZmVyZW50CisgIGFkZHJlc3MuICBJbiB0aGUgY291cnNlIG9mIHJlbGlua2luZywgaXQgcHJvY2Vzc2VzIHRoZSBzcGVjaWFsIEFSTQorICByZWxvY2F0aW9uIHJlY29yZCBtZW50aW9uZWQgYWJvdmUuICBUaGUgcHJlbGlua2VyIGhhcyBhbHJlYWR5IGZpbGxlZAorICBpbiB0aGUgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGEgc2hvcnQgb2Zmc2V0IGludG8gYSB0YWJsZSBvZiB0aHJlYWQtCisgIHNwZWNpZmljIGRhdGEgdGhhdCBpcyBhbGxvY2F0ZWQgcGVyLXRocmVhZCBmb3IgZWFjaCBsaWJyYXJ5IHRoYXQgdXNlcworICBUTFMuICBCZWNhdXNlIHRoZSBub3JtYWwgYmVoYXZpb3Igb2YgYSByZWxvY2F0aW9uIGlzIHRvIGFkZCB0aGUgc3ltYm9sCisgIHZhbHVlIHRvIGFuIGFkZGVuZCBzdG9yZWQgYXQgdGhlIGFkZHJlc3MgYmVpbmcgcmVsb2NhdGVkLCB3ZSBlbmQgdXAKKyAgYWRkaW5nIHRoZSBzaG9ydCBvZmZzZXQgdG8gaXRzZWxmLCBkb3VibGluZyBpdC4KKworICBOb3cgd2UgaGF2ZSBhbiBhd2t3YXJkIHNpdHVhdGlvbi4gIFRoZSBsaWJ1c3Quc28gbGlicmFyeSBkb2Vzbid0IGtub3cKKyAgYWJvdXQgdGhlIGFkZGVuZCwgc28gaXRzIFRMUyBkYXRhIGZvciB0aGlzIGVsZW1lbnQgaXMgY29ycmVjdC4gIFRoZQorICBsaWJ1cmN1LWJwLnNvIGxpYnJhcnkgaGFzIGEgZGlmZmVyZW50IG9mZnNldCBmb3IgdGhlIGVsZW1lbnQuICBXaGVuIHdlCisgIGdvIHRvIGluaXRpYWxpemUgdGhlIGVsZW1lbnQgZm9yIHRoZSBmaXJzdCB0aW1lIGluIGxpYnVyY3UtYnAuc28sIHdlCisgIHdyaXRlIHRoZSBhZGRyZXNzIG9mIHRoZSByZXN1bHQgYXQgdGhlIGRvdWJsZWQgKGJyb2tlbikgb2Zmc2V0LgorICBMYXRlciwgd2hlbiB3ZSByZWZlciB0byB0aGUgYWRkcmVzcyBmcm9tIGxpYnVzdC5zbywgd2UgY2hlY2sgdGhlIHZhbHVlCisgIGF0IHRoZSBjb3JyZWN0IG9mZnNldCwgYnV0IGl0J3MgTlVMTCwgc28gd2UgZWF0IGhvdCBTSUdTRUdWLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaCBiL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAoraW5kZXggNmZiMjBiZC4uODgwNTUzNyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAorKysrIGIvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oCitAQCAtNDk5LDcgKzQ5OSw3IEBAIGVsZl9tYWNoaW5lX3JlbCAoc3RydWN0IGxpbmtfbWFwICptYXAsIGNvbnN0IEVsZjMyX1JlbCAqcmVsb2MsCisgCisgCWNhc2UgUl9BUk1fVExTX0RUUE9GRjMyOgorIAkgIGlmIChzeW0gIT0gTlVMTCkKKy0JICAgICpyZWxvY19hZGRyICs9IHN5bS0+c3RfdmFsdWU7CisrCSAgICAqcmVsb2NfYWRkciA9IHN5bS0+c3RfdmFsdWU7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUl9BUk1fVExTX1RQT0ZGMzI6CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzFlNTc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMDE3MzIyZWUyOGMxNTc5Y2U2YzgxOTA0ODQyYWFhZGE5YzgyNDAzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgMTkgRGVjIDIwMTIgMDQ6Mzk6NTcgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8yN10gZWdsaWJjOiBydW4gbGlibS1lcnItdGFiLnBsIHdpdGggc3BlY2lmaWMgZGlycyBpbiAke1N9CisKK2xpYm0tZXJyLXRhYi5wbCB3aWxsIHBhcnNlIGFsbCB0aGUgZmlsZXMgbmFtZWQgImxpYm0tdGVzdC11bHBzIgoraW4gdGhlIGdpdmVuIGRpciByZWN1cnNpdmVseS4gVG8gYXZvaWQgcGFyc2luZyB0aGUgb25lIGluCiske1N9Ly5wYy8gKGl0IGRvZXMgZXhpc3QgYWZ0ZXIgZWdsaWJjIGFkZHMgYWFyY2g2NCBzdXBwb3J0LAorJHtTfS8ucGMvYWFyY2g2NC0wMDAxLWdsaWJjLWZzZi12MS1lYWY2ZjIwNS5wYXRjaC9wb3J0cy9zeXNkZXBzLworYWFyY2g2NC9saWJtLXRlc3QtdWxwcyksIHJ1biBsaWJtLWVyci10YWIucGwgd2l0aCBzcGVjaWZpYyBkaXJzCitpbiAke1N9LgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+CistLS0KKyBtYW51YWwvTWFrZWZpbGUgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21hbnVhbC9NYWtlZmlsZSBiL21hbnVhbC9NYWtlZmlsZQoraW5kZXggNTM4MjIwOC4uNmI3MDFiMCAxMDA2NDQKKy0tLSBhL21hbnVhbC9NYWtlZmlsZQorKysrIGIvbWFudWFsL01ha2VmaWxlCitAQCAtMTA1LDcgKzEwNSw4IEBAICQob2JqcGZ4KWxpYm0tZXJyLnRleGk6ICQob2JqcGZ4KXN0YW1wLWxpYm0tZXJyCisgJChvYmpwZngpc3RhbXAtbGlibS1lcnI6IGxpYm0tZXJyLXRhYi5wbCAkKHdpbGRjYXJkICQoZm9yZWFjaCBkaXIsJChzeXNkaXJzKSxcCisgCQkJCQkJICAgICAkKGRpcikvbGlibS10ZXN0LXVscHMpKQorIAlwd2Q9YHB3ZGA7IFwKKy0JJChQRVJMKSAkPCAkJHB3ZC8uLiA+ICQob2JqcGZ4KWxpYm0tZXJyLXRtcAorKwkkKFBFUkwpICQ8ICQkcHdkLy4uL3BvcnRzID4gJChvYmpwZngpbGlibS1lcnItdG1wCisrCSQoUEVSTCkgJDwgJCRwd2QvLi4vc3lzZGVwcyA+PiAkKG9ianBmeClsaWJtLWVyci10bXAKKyAJJChtb3ZlLWlmLWNoYW5nZSkgJChvYmpwZngpbGlibS1lcnItdG1wICQob2JqcGZ4KWxpYm0tZXJyLnRleGkKKyAJdG91Y2ggJEAKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ExMTJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSAxYmU0NWY4NzBlYmJiMDI1OWJlYTUyNTBhNmQyYzJmYmNiMzM0MDlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MjQ6NDYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8yN10gX19pZWVlNzU0X3NxcnR7LGZ9IGFyZSBub3cgaW5saW5lIGZ1bmN0aW9ucyBhbmQgY2FsbAorIG91dCBfX3Nsb3cgdmVyc2lvbnMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IGNodW5yb25nIGd1byA8QjQwMjkwQGZyZWVzY2FsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgIHwgNiArKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDFjMzQyNDQuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA4MTI2NTM1Li4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjc3OTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gNDk0NzFhYjFmOTBlMzkyZGE5NTIwZWVhODMxY2U4NzMxYmU5ZmM4YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI1OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMjddIE1ha2UgbGQgLS12ZXJzaW9uIG91dHB1dCBtYXRjaGluZyBncm9rIGdvbGQncyBvdXRwdXQKKworYWRhcHRlZCBmcm9tIGZyb20gdXBzdHJlYW0gYnJhbmNoIHJvbGFuZC9nb2xkLXZzLWxpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgIHwgMiArLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNDVjYzdjYi4uN2Q3Mjk5YSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDcwOSw3ICs0NzA5LDcgQEAgZWxzZQorICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB2ZXJzaW9uIG9mICRMRCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgdmVyc2lvbiBvZiAkTEQuLi4gIiA+JjY7IH0KKy0gIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBsZC4qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKysgIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBbQmJpbnV0aWxzZF1bXi5dKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgIDIuMVswLTldWzAtOV0qfDIuMlsyLTldKnwyLlszLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSopCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA3ZTkzODNhLi5hNDY3YTY5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05NDEsNyArOTQxLDcgQEAgQUNfQ0hFQ0tfUFJPR19WRVIoQVMsICRBUywgLS12ZXJzaW9uLAorIAkJICBbMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKl0sCisgCQkgIEFTPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBhcyIpCisgQUNfQ0hFQ0tfUFJPR19WRVIoTEQsICRMRCwgLS12ZXJzaW9uLAorLQkJICBbR05VIGxkLiogXChbMC05XVswLTldKlwuWzAtOS5dKlwpXSwKKysJCSAgW0dOVSBbQmJpbnV0aWxzZF1bXi5dKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCldLAorIAkJICBbMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKl0sCisgCQkgIExEPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBsZCIpCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmZGE5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYjU1ZTQ5YjE5OWM0NmEyNzhhYjY2YjZiMWUzZWFiNDgzYjkxMzE5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI3OjEwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMjddIHN5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYzogaGFuZGxlIGNvcnJlY3RseQorICRsaWJjX2N2X3Jvb3RzYmluZGlyCisKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hdHRoaWV1IENyYXBldCA8TWF0dGhpZXUuQ3JhcGV0QGluZ2VuaWNvLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL2dudS9jb25maWd1cmUgICAgfCAyICstCisgc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nbnUvY29uZmlndXJlIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlCitpbmRleCA5MjM5Mjk3Li5jNWVkM2NhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nbnUvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL2dudS9jb25maWd1cmUKK0BAIC0zMiw2ICszMiw2IEBAIGNhc2UgIiRwcmVmaXgiIGluCisgICBlbHNlCisgICAgIGxpYmNfY3ZfbG9jYWxzdGF0ZWRpcj0kbG9jYWxzdGF0ZWRpcgorICAgIGZpCistICBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisrICB0ZXN0IC1uICIkbGliY19jdl9yb290c2JpbmRpciIgfHwgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorICAgOzsKKyBlc2FjCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjCitpbmRleCA2MzRmZTRkLi4zZGIxNjk3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKK0BAIC0yMSw2ICsyMSw2IEBAIGNhc2UgIiRwcmVmaXgiIGluCisgICBlbHNlCisgICAgIGxpYmNfY3ZfbG9jYWxzdGF0ZWRpcj0kbG9jYWxzdGF0ZWRpcgorICAgIGZpCistICBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisrICB0ZXN0IC1uICIkbGliY19jdl9yb290c2JpbmRpciIgfHwgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorICAgOzsKKyBlc2FjCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE1ZDJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMDIyOWQ2YzljMGU3NzIxNzczMTE4ZDVhZTFkMTcyYzI2OWJjOTgyNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI4OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMjddIEFkZCB1bnVzZWQgYXR0cmlidXRlCisKK0hlbHBzIGluIGF2b2lkaW5nIGdjYyB3YXJuaW5nIHdoZW4gaGVhZGVyIGlzIGlzIGluY2x1ZGVkIGluCithIHNvdXJjZSBmaWxlIHdoaWNoIGRvZXMgbm90IHVzZSBib3RoIGZ1bmN0aW9ucworCisgICAgICAgICogaWNvbnYvZ2NvbnZfY2hhcnNldC5oIChzdHJpcCk6CisgICAgICAgIEFkZCB1bnVzZWQgYXR0cmlidXRlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGljb252L2djb252X2NoYXJzZXQuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2ljb252L2djb252X2NoYXJzZXQuaCBiL2ljb252L2djb252X2NoYXJzZXQuaAoraW5kZXggODAyOTBiYy4uNzg5MGE4ZSAxMDA2NDQKKy0tLSBhL2ljb252L2djb252X2NoYXJzZXQuaAorKysrIGIvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAKKyAKKy1zdGF0aWMgdm9pZAorK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIHN0cmlwIChjaGFyICp3cCwgY29uc3QgY2hhciAqcykKKyB7CisgICBpbnQgc2xhc2hfY291bnQgPSAwOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS1XaGVuLWRpc2FibGluZy1TU0UtYWxzby1tYWtlLXN1cmUtdGhhdC1mcG1hdGgtaXMtbm90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjYxY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGYwNThjODg0ZGQyNmQxMGM5NDU1MGNhNTI1MmVkNjU3NjYxNGQ2NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAwMzoyMzo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDE1LzI3XSBXaGVuIGRpc2FibGluZyBTU0UgYWxzbyBtYWtlIHN1cmUgdGhhdCBmcG1hdGggaXMgbm90Cisgc2V0IHRvIHVzZSBTU0UgYXMgd2VsbAorCitUaGlzIGZpeGVzIGVycm9ycyB3aGVuIHdlIGluamVjdCBzc2Ugb3B0aW9ucyB0aHJvdWdoIENGTEFHUyBhbmQgbm93Cit0aGF0IHdlIGhhdmUgLVdlcnJvciB0dXJuZWQgb24gYnkgZGVmYXVsdCB0aGlzIHdhcm5pbmcgdHVybnMgdG8gYmVjb21lCitlcnJvciBvbiB4ODYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzeXNkZXBzL3g4Ni9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMveDg2L01ha2VmaWxlIGIvc3lzZGVwcy94ODYvTWFrZWZpbGUKK2luZGV4IDE5ZjVlY2EuLjgyN2VhNzEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3g4Ni9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy94ODYvTWFrZWZpbGUKK0BAIC0xLDYgKzEsNiBAQAorIGlmZXEgKCQoc3ViZGlyKSxlbGYpCisgQ0ZMQUdTLS5vcyArPSAkKGlmICQoZmlsdGVyICQoQEYpLCQocGF0c3Vic3QgJSwlLm9zLCQoYWxsLXJ0bGQtcm91dGluZXMpKSksXAorLQkJICAgLW1uby1zc2UgLW1uby1tbXgpCisrCQkgICAtbW5vLXNzZSAtbW5vLW1teCAtbWZwbWF0aD0zODcpCisgCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtbGQtc3NlLXVzZS5vdXQKKyAkKG9ianBmeCl0c3QtbGQtc3NlLXVzZS5vdXQ6IC4uL3N5c2RlcHMveDg2L3RzdC1sZC1zc2UtdXNlLnNoICQob2JqcGZ4KWxkLnNvCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODllOGIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCkBAIC0wLDAgKzEsMjYzIEBACitGcm9tIDcwMTk5ZmU1OWMzOGI2MjFhYjQxMjFkN2E1NTcxOWIyYjI5YjM2ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMTowNiArMDAwMAorU3ViamVjdDogW1BBVENIIDE2LzI3XSAneWVzJyB3aXRoaW4gdGhlIHBhdGggc2V0cyB3cm9uZyBjb25maWcgdmFyaWFibGVzCisKK0l0IHNlZW1zIHRoYXQgdGhlICdBQ19FR1JFUF9DUFAoeWVzLi4uJyBleGFtcGxlIGlzIHF1aXRlIHBvcHVsYXIKK2J1dCBiZWluZyBzdWNoIGEgc2hvcnQgd29yZCB0byBncmVwIGl0IGlzIGxpa2VseSB0byBwcm9kdWNlCitmYWxzZS1wb3NpdGl2ZSBtYXRjaGVzIHdpdGggdGhlIHBhdGggaXQgaXMgY29uZmlndXJlZCBpbnRvLgorCitUaGUgY2hhbmdlIGlzIHRvIHVzZSBhIG1vcmUgZWxhYm9yYXRlZCBzdHJpbmcgdG8gZ3JlcCBmb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtsaWJjLWFscGhhQHNvdXJjZXdhcmUub3JnXQorCitTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBFc3F1aXZlbCA8YmVuamFtaW4uZXNxdWl2ZWxAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbWlwcy9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbmlvczIvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZSAgICB8IDggKysrKy0tLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgfCA4ICsrKystLS0tCisgMTIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQoraW5kZXggNWJkMzU1YS4uM2JjNTUzNyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKK0BAIC0xNDgsMTIgKzE0OCwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX0FBUkNINjRFQl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgImlzX2FhcmNoNjRfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzCisgZWxzZQorICAgbGliY19jdl9hYXJjaDY0X2JlPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKK2luZGV4IDc4NTFkZDQuLjZlOTIzODEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCitAQCAtMTAsOCArMTAsOCBAQCBHTElCQ19QUk9WSURFUyBkbmwgU2VlIGFjbG9jYWwubTQgaW4gdGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgorICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBiaWcgZW5kaWFuXSwKKyAgIFtsaWJjX2N2X2FhcmNoNjRfYmVdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FBUkNINjRFQl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUChpc19hYXJjaDY0X2JlLFsjaWZkZWYgX19BQVJDSDY0RUJfXworKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzLCBsaWJjX2N2X2FhcmNoNjRfYmU9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X2FhcmNoNjRfYmUgPSB5ZXM7IHRoZW4KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUgYi9zeXNkZXBzL2FybS9jb25maWd1cmUKK2luZGV4IDE1ODExNmIuLjVlYWY1NGUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQorQEAgLTE1MSwxMiArMTUxLDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fQVJNX1BDU19WRlAKKy0JCSAgICAgIHllcworKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCisgCQkgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfYXJtX3Bjc192ZnAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X2FybV9wY3NfdmZwPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKK2luZGV4IDg1OWM5MmEuLjJmNGE2ZTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYworQEAgLTE1LDggKzE1LDggQEAgQUNfREVGSU5FKFBJX1NUQVRJQ19BTkRfSElEREVOKQorICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSBBUk0gaGFyZC1mbG9hdCBBQkldLAorICAgW2xpYmNfY3ZfYXJtX3Bjc192ZnBdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FSTV9QQ1NfVkZQCistCQkgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAodXNlX2FybV9wY3NfdmZwLFsjaWZkZWYgX19BUk1fUENTX1ZGUAorKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCisgCQkgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9hcm1fcGNzX3ZmcD15ZXMsIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X2FybV9wY3NfdmZwID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZSBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKK2luZGV4IDRlMTMyNDguLmYxNGFmOTUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL21pcHMvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlCitAQCAtMTQzLDExICsxNDMsMTEgQEAgZWxzZQorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9taXBzX25hbjIwMDgiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMKKyBlbHNlCisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCitpbmRleCBiY2JkYWZmLi5hZDMwNTdmIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworQEAgLTYsOSArNiw5IEBAIGRubCBwb3NpdGlvbiBpbmRlcGVuZGVudCB3YXkuCisgZG5sIEFDX0RFRklORShQSV9TVEFUSUNfQU5EX0hJRERFTikKKyAKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIDIwMDggTmFOIGVuY29kaW5nXSwKKy0gIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHllcywgW2RubAorKyAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAodXNlX21pcHNfbmFuMjAwOCwgW2RubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWZdLCBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMsIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vKV0pCisgaWYgdGVzdCB4JGxpYmNfY3ZfbWlwc19uYW4yMDA4ID0geHllczsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfTUlQU19OQU4yMDA4KQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKK2luZGV4IDE0YzhhM2EuLmRkZTM4MTQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKK0BAIC0xNDIsMTIgKzE0MiwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgaXNfbmlvczJfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfbmlvczJfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X25pb3MyX2JlPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfbmlvczJfYmU9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCitpbmRleCBmMDVmNDM4Li5kYzg2Mzk5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCitAQCAtNCw4ICs0LDggQEAgR0xJQkNfUFJPVklERVMgZG5sIFNlZSBhY2xvY2FsLm00IGluIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KKyAjIE5pb3MgSUkgYmlnIGVuZGlhbiBpcyBub3QgeWV0IHN1cHBvcnRlZC4KKyBBQ19DQUNIRV9DSEVDSyhbZm9yIGJpZyBlbmRpYW5dLAorICAgW2xpYmNfY3ZfbmlvczJfYmVdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAoaXNfbmlvczJfYmUsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworKyAgICAgICAgICAgICAgICAgICAgICBpc19uaW9zMl9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9uaW9zMl9iZT15ZXMsIGxpYmNfY3ZfbmlvczJfYmU9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X25pb3MyX2JlID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQoraW5kZXggODNmOGIxMy4uMmI2Y2JlZSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQorQEAgLTM4NywxMSArMzg3LDExIEBAIGVsc2UKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZgorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfbWlwc19uYW4yMDA4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9taXBzX25hbjIwMDg9eWVzCisgZWxzZQorICAgbGliY19jdl9taXBzX25hbjIwMDg9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCitpbmRleCA1MDM5ZWM5Li4xMDM1Zjc2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCitAQCAtOTgsOSArOTgsOSBAQCBBQ19DT01QSUxFX0lGRUxTRSgKKyBMSUJDX0NPTkZJR19WQVIoW21pcHMtbW9kZS1zd2l0Y2hdLFske2xpYmNfbWlwc19tb2RlX3N3aXRjaH1dKQorIAorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgMjAwOCBOYU4gZW5jb2RpbmddLAorLSAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAoeWVzLCBbZG5sCisrICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh1c2VfbWlwc19uYW4yMDA4LCBbZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZl0sIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcywgbGliY19jdl9taXBzX25hbjIwMDg9bm8pXSkKKyAKKyBsaWJjX21pcHNfbmFuPQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZSBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZQoraW5kZXggNzBiYjE4YS4uZmZkOWUzZSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCitAQCAtMTU1LDEyICsxNTUsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWYgX0NBTExfRUxGID09IDIKKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgIHVzZV9wcGNfZWxmdjJfYWJpCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9wcGNfZWxmdjJfYWJpIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9eWVzCisgZWxzZQorICAgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9bm8KK0BAIC0xODgsMTIgKzE4OCwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfQ0FMTF9FTEYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2RlZl9jYWxsX2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgImlzX2RlZl9jYWxsX2VsZiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjCitpbmRleCAwODIyOTE1Li45YTMyZmRkIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKK0BAIC02LDggKzYsOCBAQCBMSUJDX1NMSUJESVJfUlRMRERJUihbbGliNjRdLCBbbGliNjRdKQorICMgRGVmaW5lIGRlZmF1bHQtYWJpIGFjY29yZGluZyB0byBjb21waWxlciBmbGFncy4KKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIFBvd2VyUEM2NCBFTEZ2MiBBQkldLAorICAgW2xpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWYgX0NBTExfRUxGID09IDIKKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKHVzZV9wcGNfZWxmdjJfYWJpLFsjaWYgX0NBTExfRUxGID09IDIKKysgICAgICAgICAgICAgICAgICAgICAgdXNlX3BwY19lbGZ2Ml9hYmkKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPXllcywgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaSA9IHllczsgdGhlbgorQEAgLTE5LDggKzE5LDggQEAgZWxzZQorICAgIyBDb21waWxlciB0aGF0IGRvIG5vdCBzdXBwb3J0IEVMRnYyIEFCSSBkb2VzIG5vdCBkZWZpbmUgX0NBTExfRUxGCisgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgZGVmaW5lcyBfQ0FMTF9FTEZdLAorICAgICBbbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGZdLAorLSAgICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9DQUxMX0VMRgorLSAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgW0FDX0VHUkVQX0NQUChpc19kZWZfY2FsbF9lbGYsWyNpZmRlZiBfQ0FMTF9FTEYKKysgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGVmX2NhbGxfZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgXSwgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9eWVzLCBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj1ubyldKQorICAgaWYgdGVzdCAkbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGYgPSBubzsgdGhlbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZTgyMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGM5MDMwNjEwN2ZiYmUyOTc5MDEyOTE3ZTg3NzQ3Y2U3OGM4MmFiODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMzowMyArMDAwMAorU3ViamVjdDogW1BBVENIIDE3LzI3XSB0aW1lem9uZTogcmUtd3JpdHRlbiB0enNlbGVjdCBhcyBwb3NpeCBzaAorCitUbyBhdm9pZCB0aGUgYmFzaCBkZXBlbmRlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHRpbWV6b25lL01ha2VmaWxlICAgICB8IDIgKy0KKyB0aW1lem9uZS90enNlbGVjdC5rc2ggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90aW1lem9uZS9NYWtlZmlsZSBiL3RpbWV6b25lL01ha2VmaWxlCitpbmRleCAyNGM5M2M2Li44ODZiMDZlIDEwMDY0NAorLS0tIGEvdGltZXpvbmUvTWFrZWZpbGUKKysrKyBiL3RpbWV6b25lL01ha2VmaWxlCitAQCAtMTI2LDcgKzEyNiw3IEBAICQodGVzdGRhdGEpL1hUJTogdGVzdGRhdGEvWFQlCisgCWNwICQ8ICRACisgCisgJChvYmpwZngpdHpzZWxlY3Q6IHR6c2VsZWN0LmtzaCAkKGNvbW1vbi1vYmpwZngpY29uZmlnLm1ha2UKKy0Jc2VkIC1lICdzfC9iaW4vYmFzaHwkKEJBU0gpfCcgXAorKwlzZWQgLWUgJ3N8L2Jpbi9iYXNofC9iaW4vc2h8JyBcCisgCSAgICAtZSAnc3xUWkRJUj1bXn1dKnxUWkRJUj0kKHpvbmVkaXIpfCcgXAorIAkgICAgLWUgJy9UWlZFUlNJT049L3N8c2VlX01ha2VmaWxlfCIkKHZlcnNpb24pInwnIFwKKyAJICAgIC1lICcvUEtHVkVSU0lPTj0vc3w9Lip8PSIkKFBLR1ZFUlNJT04pInwnIFwKK2RpZmYgLS1naXQgYS90aW1lem9uZS90enNlbGVjdC5rc2ggYi90aW1lem9uZS90enNlbGVjdC5rc2gKK2luZGV4IDlkNzA2OTEuLjI1ZjQ1YTggMTAwNzU1CistLS0gYS90aW1lem9uZS90enNlbGVjdC5rc2gKKysrKyBiL3RpbWV6b25lL3R6c2VsZWN0LmtzaAorQEAgLTM1LDcgKzM1LDcgQEAgUkVQT1JUX0JVR1NfVE89dHpAaWFuYS5vcmcKKyAKKyAjIFNwZWNpZnkgZGVmYXVsdCB2YWx1ZXMgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZiB0aGV5IGFyZSB1bnNldC4KKyA6ICR7QVdLPWF3a30KKy06ICR7VFpESVI9YHB3ZGB9CisrOiAke1RaRElSPSQocHdkKX0KKyAKKyAjIENoZWNrIGZvciBhd2sgUG9zaXggY29tcGxpYW5jZS4KKyAoJEFXSyAtdiB4PXkgJ0JFR0lOIHsgZXhpdCAxMjMgfScpIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhY2JjMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsNjE5IEBACitGcm9tIGVmZjA0ODA3NGFjN2I1MjU4YmI2MTVlNWE1YjIyMWRhYTE5YjE4YWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0Mjo1OCArMDAwMAorU3ViamVjdDogW1BBVENIIDE4LzI3XSBlZ2xpYmM6IENyb3NzIGJ1aWxkaW5nIGFuZCB0ZXN0aW5nIGluc3RydWN0aW9ucworCitQb3J0ZWQgZnJvbSBlZ2xpYmMKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgR0xJQkMuY3Jvc3MtYnVpbGRpbmcgfCAzODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgR0xJQkMuY3Jvc3MtdGVzdGluZyAgfCAyMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBHTElCQy5jcm9zcy1idWlsZGluZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBHTElCQy5jcm9zcy10ZXN0aW5nCisKK2RpZmYgLS1naXQgYS9HTElCQy5jcm9zcy1idWlsZGluZyBiL0dMSUJDLmNyb3NzLWJ1aWxkaW5nCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTZlMGRhMQorLS0tIC9kZXYvbnVsbAorKysrIGIvR0xJQkMuY3Jvc3MtYnVpbGRpbmcKK0BAIC0wLDAgKzEsMzgzIEBACisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gbW9kZTogdGV4dCAtKi0KKysKKysgICAgICAgICAgICAgICAgICAgICAgICBDcm9zcy1Db21waWxpbmcgR0xJQkMKKysgICAgICAgICAgICAgICAgICBKaW0gQmxhbmR5IDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisrCisrCisrSW50cm9kdWN0aW9uCisrCisrTW9zdCBHTlUgdG9vbHMgaGF2ZSBhIHNpbXBsZSBidWlsZCBwcm9jZWR1cmU6IHlvdSBydW4gdGhlaXIKKysnY29uZmlndXJlJyBzY3JpcHQsIGFuZCB0aGVuIHlvdSBydW4gJ21ha2UnLiAgVW5mb3J0dW5hdGVseSwgdGhlCisrcHJvY2VzcyBvZiBjcm9zcy1jb21waWxpbmcgdGhlIEdOVSBDIGxpYnJhcnkgaXMgcXVpdGUgYSBiaXQgbW9yZQorK2ludm9sdmVkOgorKworKzEpIEJ1aWxkIGEgY3Jvc3MtY29tcGlsZXIsIHdpdGggY2VydGFpbiBmYWNpbGl0aWVzIGRpc2FibGVkLgorKworKzIpIENvbmZpZ3VyZSB0aGUgQyBsaWJyYXJ5IHVzaW5nIHRoZSBjb21waWxlciB5b3UgYnVpbHQgaW4gc3RlcCAxKS4KKysgICBCdWlsZCBhIGZldyBvZiB0aGUgQyBydW4tdGltZSBvYmplY3QgZmlsZXMsIGJ1dCBub3QgdGhlIHJlc3Qgb2YgdGhlCisrICAgbGlicmFyeS4gIEluc3RhbGwgdGhlIGxpYnJhcnkncyBoZWFkZXIgZmlsZXMgYW5kIHRoZSBydW4tdGltZQorKyAgIG9iamVjdCBmaWxlcywgYW5kIGNyZWF0ZSBhIGR1bW15IGxpYmMuc28uCisrCisrMykgQnVpbGQgYSBzZWNvbmQgY3Jvc3MtY29tcGlsZXIsIHVzaW5nIHRoZSBoZWFkZXIgZmlsZXMgYW5kIG9iamVjdAorKyAgIGZpbGVzIHlvdSBpbnN0YWxsZWQgaW4gc3RlcCAyLgorKworKzQpIENvbmZpZ3VyZSwgYnVpbGQsIGFuZCBpbnN0YWxsIGEgZnJlc2ggQyBsaWJyYXJ5LCB1c2luZyB0aGUgY29tcGlsZXIKKysgICBidWlsdCBpbiBzdGVwIDMuCisrCisrNSkgQnVpbGQgYSB0aGlyZCBjcm9zcy1jb21waWxlciwgYmFzZWQgb24gdGhlIEMgbGlicmFyeSBidWlsdCBpbiBzdGVwIDQuCisrCisrVGhlIHJlYXNvbiBmb3IgdGhpcyBjb21wbGV4aXR5IGlzIHRoYXQsIGFsdGhvdWdoIEdDQyBhbmQgdGhlIEdOVSBDCisrbGlicmFyeSBhcmUgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSwgdGhleSBhcmUgbm90IGFjdHVhbGx5IGluZGVwZW5kZW50Cisrb2YgZWFjaCBvdGhlcjogR0NDIHJlcXVpcmVzIHRoZSBDIGxpYnJhcnkncyBoZWFkZXJzIGFuZCBzb21lIG9iamVjdAorK2ZpbGVzIHRvIGNvbXBpbGUgaXRzIG93biBsaWJyYXJpZXMsIHdoaWxlIHRoZSBDIGxpYnJhcnkgZGVwZW5kcyBvbgorK0dDQydzIGxpYnJhcmllcy4gIEdMSUJDIGluY2x1ZGVzIGZlYXR1cmVzIGFuZCBidWcgZml4ZXMgdG8gdGhlIHN0b2NrCisrR05VIEMgbGlicmFyeSB0aGF0IHNpbXBsaWZ5IHRoaXMgcHJvY2VzcywgYnV0IHRoZSBmdW5kYW1lbnRhbAorK2ludGVyZGVwZW5kZW5jeSBzdGFuZHMuCisrCisrSW4gdGhpcyBkb2N1bWVudCwgd2UgZXhwbGFpbiBob3cgdG8gY3Jvc3MtY29tcGlsZSBhbiBHTElCQy9HQ0MgcGFpcgorK2Zyb20gc291cmNlLiAgT3VyIGludGVuZGVkIGF1ZGllbmNlIGlzIGRldmVsb3BlcnMgd2hvIGFyZSBhbHJlYWR5CisrZmFtaWxpYXIgd2l0aCB0aGUgR05VIHRvb2xjaGFpbiBhbmQgY29tZm9ydGFibGUgd29ya2luZyB3aXRoCisrY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMuICBXaGlsZSB3ZSBkbyBwcmVzZW50IGEgd29ya2VkIGV4YW1wbGUgdG8KKythY2NvbXBhbnkgdGhlIGV4cGxhbmF0aW9uLCBmb3IgY2xhcml0eSdzIHNha2Ugd2UgZG8gbm90IGNvdmVyIG1hbnkgb2YKKyt0aGUgb3B0aW9ucyBhdmFpbGFibGUgdG8gY3Jvc3MtdG9vbGNoYWluIHVzZXJzLgorKworKworK1ByZXBhcmF0aW9uCisrCisrR0xJQkMgcmVxdWlyZXMgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBHTlUgYmludXRpbHMsIEdDQywgYW5kIHRoZQorK0xpbnV4IGtlcm5lbC4gIFRoZSB3ZWIgcGFnZSA8aHR0cDovL3d3dy5lZ2xpYmMub3JnL3ByZXJlcXVpc2l0ZXM+CisrZG9jdW1lbnRzIHRoZSBjdXJyZW50IHJlcXVpcmVtZW50cywgYW5kIGxpc3RzIHBhdGNoZXMgbmVlZGVkIGZvcgorK2NlcnRhaW4gdGFyZ2V0IGFyY2hpdGVjdHVyZXMuICBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoZXNlIGJ1aWxkCisraW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiB0ZXN0ZWQgd2l0aCBiaW51dGlscyAyLjIyLjUxLCBHQ0MgNC42LjIsCisrYW5kIExpbnV4IDMuMS4KKysKKytGaXJzdCwgbGV0J3Mgc2V0IHNvbWUgdmFyaWFibGVzLCB0byBzaW1wbGlmeSBsYXRlciBjb21tYW5kcy4gIFdlJ2xsCisrYnVpbGQgR0xJQkMgYW5kIEdDQyBmb3IgYW4gQVJNIHRhcmdldCwga25vd24gdG8gdGhlIExpbnV4IGtlcm5lbAorK2FzICdhcm0nLCBhbmQgd2UnbGwgZG8gdGhlIGJ1aWxkIG9uIGFuIEludGVsIHg4Nl82NCBMaW51eCBib3g6CisrCisrICAgICQgYnVpbGQ9eDg2XzY0LXBjLWxpbnV4LWdudQorKyAgICAkIGhvc3Q9JGJ1aWxkCisrICAgICQgdGFyZ2V0PWFybS1ub25lLWxpbnV4LWdudWVhYmkKKysgICAgJCBsaW51eF9hcmNoPWFybQorKworK1dlJ3JlIHVzaW5nIHRoZSBhZm9yZW1lbnRpb25lZCB2ZXJzaW9ucyBvZiBCaW51dGlscywgR0NDLCBhbmQgTGludXg6CisrCisrICAgICQgYmludXRpbHN2PWJpbnV0aWxzLTIuMjIuNTEKKysgICAgJCBnY2N2PWdjYy00LjYuMgorKyAgICAkIGxpbnV4dj1saW51eC0zLjEKKysKKytXZSdyZSBjYXJyeWluZyBvdXQgdGhlIGVudGlyZSBwcm9jZXNzIHVuZGVyICd+L2Nyb3NzLWJ1aWxkJywgd2hpY2gKKytjb250YWlucyB1bnBhY2tlZCBzb3VyY2UgdHJlZXMgZm9yIGJpbnV0aWxzLCBnY2MsIGFuZCBsaW51eCBrZXJuZWwsCisrYWxvbmcgd2l0aCBHTElCQyBzdm4gdHJ1bmsgKHdoaWNoIGNhbiBiZSBjaGVja2VkLW91dCB3aXRoCisrJ3N2biBjbyBodHRwOi8vd3d3LmVnbGliYy5vcmcvc3ZuL3RydW5rIGVnbGliYycpOgorKworKyAgICAkIHRvcD0kSE9NRS9jcm9zcy1idWlsZC8kdGFyZ2V0CisrICAgICQgc3JjPSRIT01FL2Nyb3NzLWJ1aWxkL3NyYworKyAgICAkIGxzICRzcmMKKysgICAgYmludXRpbHMtMi4yMi41MSAgZ2xpYmMgIGdjYy00LjYuMiAgbGludXgtMy4xCisrCisrV2UncmUgZ29pbmcgdG8gcGxhY2Ugb3VyIGJ1aWxkIGRpcmVjdG9yaWVzIGluIGEgc3ViZGlyZWN0b3J5ICdvYmonLAorK3dlJ2xsIGluc3RhbGwgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBpbiAndG9vbHMnLCBhbmQgd2UnbGwKKytwbGFjZSBvdXIgc3lzcm9vdCAoY29udGFpbmluZyBmaWxlcyB0byBiZSBpbnN0YWxsZWQgb24gdGhlIHRhcmdldAorK3N5c3RlbSkgaW4gJ3N5c3Jvb3QnOgorKworKyAgICAkIG9iaj0kdG9wL29iagorKyAgICAkIHRvb2xzPSR0b3AvdG9vbHMKKysgICAgJCBzeXNyb290PSR0b3Avc3lzcm9vdAorKworKworK0JpbnV0aWxzCisrCisrQ29uZmlndXJpbmcgYW5kIGJ1aWxkaW5nIGJpbnV0aWxzIGZvciB0aGUgdGFyZ2V0IGlzIHN0cmFpZ2h0Zm9yd2FyZDoKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2JpbnV0aWxzCisrICAgICQgY2QgJG9iai9iaW51dGlscworKyAgICAkICRzcmMvJGJpbnV0aWxzdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QKKysgICAgJCBtYWtlCisrICAgICQgbWFrZSBpbnN0YWxsCisrCisrCisrVGhlIEZpcnN0IEdDQworKworK0ZvciBvdXIgd29yaywgd2UgbmVlZCBhIGNyb3NzLWNvbXBpbGVyIHRhcmdldGluZyBhbiBBUk0gTGludXgKKytzeXN0ZW0uICBIb3dldmVyLCB0aGF0IGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgdGhlIHNoYXJlZCBsaWJyYXJ5CisrJ2xpYmdjY19zLnNvJywgd2hpY2ggaXMgY29tcGlsZWQgYWdhaW5zdCB0aGUgR0xJQkMgaGVhZGVycyAod2hpY2ggd2UKKytoYXZlbid0IGluc3RhbGxlZCB5ZXQpIGFuZCBsaW5rZWQgYWdhaW5zdCAnbGliYy5zbycgKHdoaWNoIHdlIGhhdmVuJ3QKKytidWlsdCB5ZXQpLgorKworK0ZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBHQ0Mgd2hpY2ggdGVsbCBpdCBub3QKKyt0byBidWlsZCAnbGliZ2NjX3Muc28nLiAgVGhlICctLXdpdGhvdXQtaGVhZGVycycgb3B0aW9uIGlzIHN1cHBvc2VkIHRvCisrdGFrZSBjYXJlIG9mIHRoaXMsIGJ1dCBpdHMgaW1wbGVtZW50YXRpb24gaXMgaW5jb21wbGV0ZSwgc28geW91IG11c3QKKythbHNvIGNvbmZpZ3VyZSB3aXRoIHRoZSAnLS13aXRoLW5ld2xpYicgb3B0aW9uLiAgV2hpbGUgJy0td2l0aC1uZXdsaWInCisrYXBwZWFycyB0byBtZWFuICJVc2UgdGhlIE5ld2xpYiBDIGxpYnJhcnkiLCBpdHMgZWZmZWN0IGlzIHRvIHRlbGwgdGhlCisrR0NDIGJ1aWxkIG1hY2hpbmVyeSwgIkRvbid0IGFzc3VtZSB0aGVyZSBpcyBhIEMgbGlicmFyeSBhdmFpbGFibGUuIgorKworK1dlIGFsc28gbmVlZCB0byBkaXNhYmxlIHNvbWUgb2YgdGhlIGxpYnJhcmllcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlCisrYnVpbHQgYWxvbmcgd2l0aCBHQ0MsIGFuZCBzcGVjaWZ5IHRoYXQgb25seSB0aGUgY29tcGlsZXIgZm9yIHRoZSBDCisrbGFuZ3VhZ2UgaXMgbmVlZGVkLgorKworK1NvLCB3ZSBjcmVhdGUgYSBidWlsZCBkaXJlY3RvcnksIGNvbmZpZ3VyZSwgbWFrZSwgYW5kIGluc3RhbGwuCisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nY2MxCisrICAgICQgY2QgJG9iai9nY2MxCisrICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRob3V0LWhlYWRlcnMgLS13aXRoLW5ld2xpYiBcCisrICAgID4gICAgIC0tZGlzYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXRocmVhZHMgLS1kaXNhYmxlLWxpYnNzcCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0IC0tZGlzYWJsZS1saWJmZmkgXAorKyAgICA+ICAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbAorKworKworK0xpbnV4IEtlcm5lbCBIZWFkZXJzCisrCisrVG8gY29uZmlndXJlIEdMSUJDLCB3ZSBhbHNvIG5lZWQgTGludXgga2VybmVsIGhlYWRlcnMgaW4gcGxhY2UuCisrRm9ydHVuYXRlbHksIHRoZSBMaW51eCBtYWtlZmlsZXMgaGF2ZSBhIHRhcmdldCB0aGF0IGluc3RhbGxzIHRoZW0gZm9yCisrdXMuICBTaW5jZSB0aGUgcHJvY2VzcyBkb2VzIG1vZGlmeSB0aGUgc291cmNlIHRyZWUgYSBiaXQsIHdlIG1ha2UgYQorK2NvcHkgZmlyc3Q6CisrCisrICAgICQgY3AgLXIgJHNyYy8kbGludXh2ICRvYmovbGludXgKKysgICAgJCBjZCAkb2JqL2xpbnV4CisrCisrTm93IHdlJ3JlIHJlYWR5IHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgaW50byB0aGUgc3lzcm9vdDoKKysKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggXAorKyAgICA+IG1ha2UgaGVhZGVyc19pbnN0YWxsIFwKKysgICAgPiAgICAgIEFSQ0g9JGxpbnV4X2FyY2ggQ1JPU1NfQ09NUElMRT0kdGFyZ2V0LSBcCisrICAgID4gICAgICBJTlNUQUxMX0hEUl9QQVRIPSRzeXNyb290L3VzcgorKworKworK0dMSUJDIEhlYWRlcnMgYW5kIFByZWxpbWluYXJ5IE9iamVjdHMKKysKKytVc2luZyB0aGUgY3Jvc3MtY29tcGlsZXIgd2UndmUganVzdCBidWlsdCwgd2UgY2FuIG5vdyBjb25maWd1cmUgR0xJQkMKKyt3ZWxsIGVub3VnaCB0byBpbnN0YWxsIHRoZSBoZWFkZXJzIGFuZCBidWlsZCB0aGUgb2JqZWN0IGZpbGVzIHRoYXQgdGhlCisrZnVsbCBjcm9zcy1jb21waWxlciB3aWxsIG5lZWQ6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nbGliYy1oZWFkZXJzCisrICAgICQgY2QgJG9iai9nbGliYy1oZWFkZXJzCisrICAgICQgQlVJTERfQ0M9Z2NjIFwKKysgICAgPiBDQz0kdG9vbHMvYmluLyR0YXJnZXQtZ2NjIFwKKysgICAgPiBDWFg9JHRvb2xzL2Jpbi8kdGFyZ2V0LWcrKyBcCisrICAgID4gQVI9JHRvb2xzL2Jpbi8kdGFyZ2V0LWFyIFwKKysgICAgPiBSQU5MSUI9JHRvb2xzL2Jpbi8kdGFyZ2V0LXJhbmxpYiBcCisrICAgID4gJHNyYy9nbGliYy9saWJjL2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tcHJlZml4PS91c3IgXAorKyAgICA+ICAgICAtLXdpdGgtaGVhZGVycz0kc3lzcm9vdC91c3IvaW5jbHVkZSBcCisrICAgID4gICAgIC0tYnVpbGQ9JGJ1aWxkIFwKKysgICAgPiAgICAgLS1ob3N0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLWRpc2FibGUtcHJvZmlsZSAtLXdpdGhvdXQtZ2QgLS13aXRob3V0LWN2cyBcCisrICAgID4gICAgIC0tZW5hYmxlLWFkZC1vbnM9bnB0bCxsaWJpZG4sLi4vcG9ydHMKKysKKytUaGUgb3B0aW9uICctLXByZWZpeD0vdXNyJyBtYXkgbG9vayBzdHJhbmdlLCBidXQgeW91IHNob3VsZCBuZXZlcgorK2NvbmZpZ3VyZSBHTElCQyB3aXRoIGEgcHJlZml4IG90aGVyIHRoYW4gJy91c3InOiBpbiB2YXJpb3VzIHBsYWNlcywKKytHTElCQydzIGJ1aWxkIHN5c3RlbSBjaGVja3Mgd2hldGhlciB0aGUgcHJlZml4IGlzICcvdXNyJywgYW5kIGRvZXMKKytzcGVjaWFsIGhhbmRsaW5nIG9ubHkgaWYgdGhhdCBpcyB0aGUgY2FzZS4gIFVubGVzcyB5b3UgdXNlIHRoaXMKKytwcmVmaXgsIHlvdSB3aWxsIGdldCBhIHN5c3Jvb3QgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIHN0YW5kYXJkIExpbnV4CisrZGlyZWN0b3J5IGxheW91dHMgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGEgYmFzaXMgZm9yIHRoZSByb290CisrZmlsZXN5c3RlbSBvbiB5b3VyIHRhcmdldCBzeXN0ZW0gY29tcGF0aWJseSB3aXRoIG5vcm1hbCBHTElCQworK2luc3RhbGxhdGlvbnMuCisrCisrVGhlICctLXdpdGgtaGVhZGVycycgb3B0aW9uIHRlbGxzIEdMSUJDIHdoZXJlIHRoZSBMaW51eCBoZWFkZXJzIGhhdmUKKytiZWVuIGluc3RhbGxlZC4KKysKKytUaGUgJy0tZW5hYmxlLWFkZC1vbnM9bnB0bCxsaWJpZG4sLi4vcG9ydHMnIG9wdGlvbiB0ZWxscyBHTElCQyB0byBsb29rCisrZm9yIHRoZSBsaXN0ZWQgZ2xpYmMgYWRkLW9ucy4gTW9zdCBub3RhYmx5IHRoZSBwb3J0cyBhZGQtb24gKGxvY2F0ZWQKKytqdXN0IGFib3ZlIHRoZSBsaWJjIHNvdXJjZXMgaW4gdGhlIEdMSUJDIHN2biB0cmVlKSBpcyByZXF1aXJlZCB0bworK3N1cHBvcnQgQVJNIHRhcmdldHMuCisrCisrV2UgY2FuIG5vdyB1c2UgdGhlICdpbnN0YWxsLWhlYWRlcnMnIG1ha2VmaWxlIHRhcmdldCB0byBpbnN0YWxsIHRoZQorK2hlYWRlcnM6CisrCisrICAgICQgbWFrZSBpbnN0YWxsLWhlYWRlcnMgaW5zdGFsbF9yb290PSRzeXNyb290IFwKKysgICAgPiAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcworKworK1RoZSAnaW5zdGFsbF9yb290JyB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hlcmUgdGhlIGZpbGVzIHNob3VsZCBhY3R1YWxseQorK2JlIGluc3RhbGxlZDsgaXRzIHZhbHVlIGlzIHRyZWF0ZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgJy0tcHJlZml4JworK2RpcmVjdG9yeSB3ZSBwYXNzZWQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIHNvIHRoZSBoZWFkZXJzIHdpbGwgZ28gaW4KKysnJHN5c3Jvb3QvdXNyL2luY2x1ZGUnLiAgVGhlICdpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzJyB2YXJpYWJsZQorK3JlcXVlc3RzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGNlcnRhaW4gdHJpY2t5IGhlYWRlciBmaWxlcy4KKysKKytOZXh0LCB0aGVyZSBhcmUgYSBmZXcgb2JqZWN0IGZpbGVzIG5lZWRlZCB0byBsaW5rIHNoYXJlZCBsaWJyYXJpZXMsCisrd2hpY2ggd2UgYnVpbGQgYW5kIGluc3RhbGwgYnkgaGFuZDoKKysKKysgICAgJCBta2RpciAtcCAkc3lzcm9vdC91c3IvbGliCisrICAgICQgbWFrZSBjc3Uvc3ViZGlyX2xpYgorKyAgICAkIGNwIGNzdS9jcnQxLm8gY3N1L2NydGkubyBjc3UvY3J0bi5vICRzeXNyb290L3Vzci9saWIKKysKKytGaW5hbGx5LCAnbGliZ2NjX3Muc28nIHJlcXVpcmVzIGEgJ2xpYmMuc28nIHRvIGxpbmsgYWdhaW5zdC4gIEhvd2V2ZXIsCisrc2luY2Ugd2Ugd2lsbCBuZXZlciBhY3R1YWxseSBleGVjdXRlIGl0cyBjb2RlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0CisraXQgY29udGFpbnMuICBTbywgdHJlYXRpbmcgJy9kZXYvbnVsbCcgYXMgYSBDIHNvdXJjZSBmaWxlLCB3ZSBwcm9kdWNlCisrYSBkdW1teSAnbGliYy5zbycgaW4gb25lIHN0ZXA6CisrCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtc2hhcmVkIC14IGMgL2Rldi9udWxsIFwKKysgICAgPiAgICAgICAgICAgICAgICAgICAgICAgIC1vICRzeXNyb290L3Vzci9saWIvbGliYy5zbworKworKworK1RoZSBTZWNvbmQgR0NDCisrCisrV2l0aCB0aGUgR0xJQkMgaGVhZGVycyBhbmQgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIGluc3RhbGxlZCwgd2UgY2FuCisrbm93IGJ1aWxkIGEgR0NDIHRoYXQgaXMgY2FwYWJsZSBvZiBjb21waWxpbmcgR0xJQkMuICBXZSBjb25maWd1cmUsCisrYnVpbGQsIGFuZCBpbnN0YWxsIHRoZSBzZWNvbmQgR0NDLCBhZ2FpbiBidWlsZGluZyBvbmx5IHRoZSBDIGNvbXBpbGVyLAorK2FuZCBhdm9pZGluZyBsaWJyYXJpZXMgd2Ugd29uJ3QgdXNlOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2NjMgorKyAgICAkIGNkICRvYmovZ2NjMgorKyAgICAkICRzcmMvJGdjY3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aC1zeXNyb290PSRzeXNyb290IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYnNzcCAtLWRpc2FibGUtbGliZ29tcCAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJmZmkgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKysgICAgPiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwKKysKKysKKytHTElCQywgQ29tcGxldGUKKysKKytXaXRoIHRoZSBzZWNvbmQgY29tcGlsZXIgYnVpbHQgYW5kIGluc3RhbGxlZCwgd2UncmUgbm93IHJlYWR5IGZvciB0aGUKKytmdWxsIEdMSUJDIGJ1aWxkOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2xpYmMKKysgICAgJCBjZCAkb2JqL2dsaWJjCisrICAgICQgQlVJTERfQ0M9Z2NjIFwKKysgICAgPiBDQz0kdG9vbHMvYmluLyR0YXJnZXQtZ2NjIFwKKysgICAgPiBDWFg9JHRvb2xzL2Jpbi8kdGFyZ2V0LWcrKyBcCisrICAgID4gQVI9JHRvb2xzL2Jpbi8kdGFyZ2V0LWFyIFwKKysgICAgPiBSQU5MSUI9JHRvb2xzL2Jpbi8kdGFyZ2V0LXJhbmxpYiBcCisrICAgID4gJHNyYy9nbGliYy9saWJjL2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tcHJlZml4PS91c3IgXAorKyAgICA+ICAgICAtLXdpdGgtaGVhZGVycz0kc3lzcm9vdC91c3IvaW5jbHVkZSBcCisrICAgID4gICAgIC0td2l0aC1rY29uZmlnPSRvYmovbGludXgvc2NyaXB0cy9rY29uZmlnIFwKKysgICAgPiAgICAgLS1idWlsZD0kYnVpbGQgXAorKyAgICA+ICAgICAtLWhvc3Q9JHRhcmdldCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1wcm9maWxlIC0td2l0aG91dC1nZCAtLXdpdGhvdXQtY3ZzIFwKKysgICAgPiAgICAgLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cworKworK05vdGUgdGhlIGFkZGl0aW9uYWwgJy0td2l0aC1rY29uZmlnJyBvcHRpb24uIFRoaXMgdGVsbHMgR0xJQkMgd2hlcmUgdG8KKytmaW5kIHRoZSBob3N0IGNvbmZpZyB0b29scyB1c2VkIGJ5IHRoZSBrZXJuZWwgJ21ha2UgY29uZmlnJyBhbmQgJ21ha2UKKyttZW51Y29uZmlnJy4gIFRoZXNlIHRvb2xzIGNhbiBiZSByZS11c2VkIGJ5IEdMSUJDIGZvciBpdHMgb3duICdtYWtlCisrKmNvbmZpZycgc3VwcG9ydCwgd2hpY2ggd2lsbCBjcmVhdGUgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBmb3IgeW91LgorK0J1dCBmaXJzdCBtYWtlIHN1cmUgdGhvc2UgdG9vbHMgaGF2ZSBiZWVuIGJ1aWx0IGJ5IHJ1bm5pbmcgc29tZQorK2R1bW15ICdtYWtlICpjb25maWcnIGNhbGxzIGluIHRoZSBrZXJuZWwgZGlyZWN0b3J5OgorKworKyAgICAkIGNkICRvYmovbGludXgKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBjb25maWcgXAorKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBtZW51Y29uZmlnIFwKKysgICAgPiAgICAgIEFSQ0g9JGxpbnV4X2FyY2ggQ1JPU1NfQ09NUElMRT0kdGFyZ2V0LSBcCisrCisrTm93IHdlIGNhbiBjb25maWd1cmUgYW5kIGJ1aWxkIHRoZSBmdWxsIEdMSUJDOgorKworKyAgICAkIGNkICRvYmovZ2xpYmMKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBkZWZjb25maWcKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBtZW51Y29uZmlnCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsIGluc3RhbGxfcm9vdD0kc3lzcm9vdAorKworK0F0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBjb21wbGV0ZSBHTElCQyBpbnN0YWxsYXRpb24gaW4gJyRzeXNyb290JywKKyt3aXRoIGhlYWRlciBmaWxlcywgbGlicmFyeSBmaWxlcywgYW5kIG1vc3Qgb2YgdGhlIEMgcnVudGltZSBzdGFydHVwCisrZmlsZXMgaW4gcGxhY2UuCisrCisrCisrVGhlIFRoaXJkIEdDQworKworK0ZpbmFsbHksIHdlIHJlY29tcGlsZSBHQ0MgYWdhaW5zdCB0aGlzIGZ1bGwgaW5zdGFsbGF0aW9uLCBlbmFibGluZworK3doYXRldmVyIGxhbmd1YWdlcyBhbmQgbGlicmFyaWVzIHdlIHdvdWxkIGxpa2UgdG8gdXNlOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2NjMworKyAgICAkIGNkICRvYmovZ2NjMworKyAgICAkICRzcmMvJGdjY3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aC1zeXNyb290PSRzeXNyb290IFwKKysgICAgPiAgICAgLS1lbmFibGUtX19jeGFfYXRleGl0IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYnNzcCAtLWRpc2FibGUtbGliZ29tcCAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisrICAgID4gICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbAorKworK1RoZSAnLS1lbmFibGUtX19jeGFfYXRleGl0JyBvcHRpb24gdGVsbHMgR0NDIHdoYXQgc29ydCBvZiBDKysKKytkZXN0cnVjdG9yIHN1cHBvcnQgdG8gZXhwZWN0IGZyb20gdGhlIEMgbGlicmFyeTsgaXQncyByZXF1aXJlZCB3aXRoCisrR0xJQkMuCisrCisrQW5kIHNpbmNlIEdDQydzIGluc3RhbGxhdGlvbiBwcm9jZXNzIGlzbid0IGRlc2lnbmVkIHRvIGhlbHAgY29uc3RydWN0Cisrc3lzcm9vdCB0cmVlcywgd2UgbXVzdCBtYW51YWxseSBjb3B5IGNlcnRhaW4gbGlicmFyaWVzIGludG8gcGxhY2UgaW4KKyt0aGUgc3lzcm9vdC4KKysKKysgICAgJCBjcCAtZCAkdG9vbHMvJHRhcmdldC9saWIvbGliZ2NjX3Muc28qICRzeXNyb290L2xpYgorKyAgICAkIGNwIC1kICR0b29scy8kdGFyZ2V0L2xpYi9saWJzdGRjKysuc28qICRzeXNyb290L3Vzci9saWIKKysKKysKKytUcnlpbmcgVGhpbmdzIE91dAorKworK0F0IHRoaXMgcG9pbnQsICckdG9vbHMnIGNvbnRhaW5zIGEgY3Jvc3MgdG9vbGNoYWluIHJlYWR5IHRvIHVzZQorK3RoZSBHTElCQyBpbnN0YWxsYXRpb24gaW4gJyRzeXNyb290JzoKKysKKysgICAgJCBjYXQgPiBoZWxsby5jIDw8RU9GCisrICAgID4gI2luY2x1ZGUgPHN0ZGlvLmg+CisrICAgID4gaW50CisrICAgID4gbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICA+IHsKKysgICAgPiAgIHB1dHMgKCJIZWxsbywgd29ybGQhIik7CisrICAgID4gICByZXR1cm4gMDsKKysgICAgPiB9CisrICAgID4gRU9GCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyAtV2FsbCBoZWxsby5jIC1vIGhlbGxvCisrICAgICQgY2F0ID4gYysrLWhlbGxvLmNjIDw8RU9GCisrICAgID4gI2luY2x1ZGUgPGlvc3RyZWFtPgorKyAgICA+IGludAorKyAgICA+IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgPiB7CisrICAgID4gICBzdGQ6OmNvdXQgPDwgIkhlbGxvLCBDKysgd29ybGQhIiA8PCBzdGQ6OmVuZGw7CisrICAgID4gICByZXR1cm4gMDsKKysgICAgPiB9CisrICAgID4gRU9GCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LWcrKyAtV2FsbCBjKystaGVsbG8uY2MgLW8gYysrLWhlbGxvCisrCisrCisrV2UgY2FuIHVzZSAncmVhZGVsZicgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgYXJlIGluZGVlZCBleGVjdXRhYmxlcyBmb3IKKytvdXIgdGFyZ2V0LCB1c2luZyBvdXIgZHluYW1pYyBsaW5rZXI6CisrCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LXJlYWRlbGYgLWhsIGhlbGxvCisrICAgIEVMRiBIZWFkZXI6CisrICAgIC4uLgorKyAgICAgIFR5cGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhFQyAoRXhlY3V0YWJsZSBmaWxlKQorKyAgICAgIE1hY2hpbmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJNCisrCisrICAgIC4uLgorKyAgICBQcm9ncmFtIEhlYWRlcnM6CisrICAgICAgVHlwZSAgICAgICAgICAgT2Zmc2V0ICAgVmlydEFkZHIgICBQaHlzQWRkciAgIEZpbGVTaXogTWVtU2l6ICBGbGcgQWxpZ24KKysgICAgICBQSERSICAgICAgICAgICAweDAwMDAzNCAweDEwMDAwMDM0IDB4MTAwMDAwMzQgMHgwMDEwMCAweDAwMTAwIFIgRSAweDQKKysgICAgICBJTlRFUlAgICAgICAgICAweDAwMDEzNCAweDAwMDA4MTM0IDB4MDAwMDgxMzQgMHgwMDAxMyAweDAwMDEzIFIgICAweDEKKysgICAgICAgICAgW1JlcXVlc3RpbmcgcHJvZ3JhbSBpbnRlcnByZXRlcjogL2xpYi9sZC1saW51eC5zby4zXQorKyAgICAgIExPQUQgICAgICAgICAgIDB4MDAwMDAwIDB4MDAwMDgwMDAgMHgwMDAwODAwMCAweDAwNDJjIDB4MDA0MmMgUiBFIDB4ODAwMAorKyAgICAuLi4KKysKKytMb29raW5nIGF0IHRoZSBkeW5hbWljIHNlY3Rpb24gb2YgdGhlIGluc3RhbGxlZCAnbGliZ2NjX3Muc28nLCB3ZSBzZWUKKyt0aGF0IHRoZSAnTkVFREVEJyBlbnRyeSBmb3IgdGhlIEMgbGlicmFyeSBkb2VzIGluY2x1ZGUgdGhlICcuNicKKytzdWZmaXgsIGluZGljYXRpbmcgdGhhdCB3YXMgbGlua2VkIGFnYWluc3Qgb3VyIGZ1bGx5IGJ1aWxkIEdMSUJDLCBhbmQKKytub3Qgb3VyIGR1bW15ICdsaWJjLnNvJzoKKysKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtcmVhZGVsZiAtZCAkc3lzcm9vdC9saWIvbGliZ2NjX3Muc28uMQorKyAgICBEeW5hbWljIHNlY3Rpb24gYXQgb2Zmc2V0IDB4MTA4M2MgY29udGFpbnMgMjQgZW50cmllczoKKysgICAgICBUYWcgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZS9WYWx1ZQorKyAgICAgMHgwMDAwMDAwMSAoTkVFREVEKSAgICAgICAgICAgICAgICAgICAgIFNoYXJlZCBsaWJyYXJ5OiBbbGliYy5zby42XQorKyAgICAgMHgwMDAwMDAwZSAoU09OQU1FKSAgICAgICAgICAgICAgICAgICAgIExpYnJhcnkgc29uYW1lOiBbbGliZ2NjX3Muc28uMV0KKysgICAgLi4uCisrCisrCisrQW5kIG9uIHRoZSB0YXJnZXQgbWFjaGluZSwgd2UgY2FuIHJ1biBvdXIgcHJvZ3JhbXM6CisrCisrICAgICQgJHN5c3Jvb3QvbGliL2xkLnNvLjEgLS1saWJyYXJ5LXBhdGggJHN5c3Jvb3QvbGliOiRzeXNyb290L3Vzci9saWIgXAorKyAgICA+IC4vaGVsbG8KKysgICAgSGVsbG8sIHdvcmxkIQorKyAgICAkICRzeXNyb290L2xpYi9sZC5zby4xIC0tbGlicmFyeS1wYXRoICRzeXNyb290L2xpYjokc3lzcm9vdC91c3IvbGliIFwKKysgICAgPiAuL2MrKy1oZWxsbworKyAgICBIZWxsbywgQysrIHdvcmxkIQorZGlmZiAtLWdpdCBhL0dMSUJDLmNyb3NzLXRlc3RpbmcgYi9HTElCQy5jcm9zcy10ZXN0aW5nCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjY3YjQ2OAorLS0tIC9kZXYvbnVsbAorKysrIGIvR0xJQkMuY3Jvc3MtdGVzdGluZworQEAgLTAsMCArMSwyMDUgQEAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQorKworKyAgICAgICAgICAgICAgICAgICAgICBDcm9zcy1UZXN0aW5nIFdpdGggR0xJQkMKKysgICAgICAgICAgICAgICAgICBKaW0gQmxhbmR5IDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisrCisrCisrSW50cm9kdWN0aW9uCisrCisrRGV2ZWxvcGVycyB3cml0aW5nIHNvZnR3YXJlIGZvciBlbWJlZGRlZCBzeXN0ZW1zIG9mdGVuIHVzZSBhIGRlc2t0b3AKKytvciBvdGhlciBzaW1pbGFybHkgY2FwYWJsZSBjb21wdXRlciBmb3IgZGV2ZWxvcG1lbnQsIGJ1dCBuZWVkIHRvIHJ1bgorK3Rlc3RzIG9uIHRoZSBlbWJlZGRlZCBzeXN0ZW0sIG9yIHBlcmhhcHMgb24gYSBzaW11bGF0b3IuICBXaGVuCisrY29uZmlndXJlZCBmb3IgY3Jvc3MtY29tcGlsYXRpb24sIHRoZSBzdG9jayBHTlUgQyBsaWJyYXJ5IHNpbXBseQorK2Rpc2FibGVzIHJ1bm5pbmcgdGVzdHMgYWx0b2dldGhlcjogdGhlIGNvbW1hbmQgJ21ha2UgdGVzdHMnIGJ1aWxkcworK3Rlc3QgcHJvZ3JhbXMsIGJ1dCBkb2VzIG5vdCBydW4gdGhlbS4gIEdMSUJDLCBob3dldmVyLCBwcm92aWRlcworK2ZhY2lsaXRpZXMgZm9yIGNvbXBpbGluZyB0ZXN0cyBhbmQgZ2VuZXJhdGluZyBkYXRhIGZpbGVzIG9uIHRoZSBidWlsZAorK3N5c3RlbSwgYnV0IHJ1bm5pbmcgdGhlIHRlc3QgcHJvZ3JhbXMgdGhlbXNlbHZlcyBvbiBhIHJlbW90ZSBzeXN0ZW0gb3IKKytzaW11bGF0b3IuCisrCisrCisrVGVzdCBlbnZpcm9ubWVudCByZXF1aXJlbWVudHMKKysKKytUaGUgdGVzdCBlbnZpcm9ubWVudCBtdXN0IG1lZXQgY2VydGFpbiBjb25kaXRpb25zIGZvciBHTElCQydzCisrY3Jvc3MtdGVzdGluZyBmYWNpbGl0aWVzIHRvIHdvcms6CisrCisrLSBTaGFyZWQgZmlsZXN5c3RlbXMuICBUaGUgJ2J1aWxkJyBzeXN0ZW0sIG9uIHdoaWNoIHlvdSBjb25maWd1cmUgYW5kCisrICBjb21waWxlIEdMSUJDLCBhbmQgdGhlICdob3N0JyBzeXN0ZW0sIG9uIHdoaWNoIHlvdSBpbnRlbmQgdG8gcnVuCisrICBHTElCQywgbXVzdCBzaGFyZSBhIGZpbGVzeXN0ZW0gY29udGFpbmluZyB0aGUgR0xJQkMgYnVpbGQgYW5kCisrICBzb3VyY2UgdHJlZXMuICBGaWxlcyBtdXN0IGFwcGVhciBhdCB0aGUgc2FtZSBwYXRocyBvbiBib3RoIHN5c3RlbXMuCisrCisrLSBSZW1vdGUtc2hlbGwgbGlrZSBpbnZvY2F0aW9uLiAgVGhlcmUgbXVzdCBiZSBhIHdheSB0byBydW4gYSBwcm9ncmFtCisrICBvbiB0aGUgaG9zdCBzeXN0ZW0gZnJvbSB0aGUgYnVpbGQgc3lzdGVtLCBwYXNzaW5nIGl0IHByb3Blcmx5IHF1b3RlZAorKyAgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgc2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZAorKyAgaW5oZXJpdGluZyB0aGUgY2FsbGVyJ3Mgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dC4KKysKKysKKytVc2FnZQorKworK1RvIHVzZSBHTElCQydzIGNyb3NzLXRlc3Rpbmcgc3VwcG9ydCwgcHJvdmlkZSB2YWx1ZXMgZm9yIHRoZQorK2ZvbGxvd2luZyBNYWtlIHZhcmlhYmxlcyB3aGVuIHlvdSBpbnZva2UgJ21ha2UnOgorKworKy0gY3Jvc3MtdGVzdC13cmFwcGVyCisrCisrICBUaGlzIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgY3Jvc3MtdGVzdGluZyB3cmFwcGVyIGNvbW1hbmQsIGFsb25nCisrICB3aXRoIGFueSBhcmd1bWVudHMuCisrCisrLSBjcm9zcy1sb2NhbGVkZWYKKysKKysgIFRoaXMgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgY3Jvc3MtY2FwYWJsZSBsb2NhbGVkZWYgcHJvZ3JhbSwgbGlrZQorKyAgdGhhdCBpbmNsdWRlZCBpbiB0aGUgR0xJQkMgJ2xvY2FsZWRlZicgbW9kdWxlLCBhbG9uZyB3aXRoIGFueQorKyAgYXJndW1lbnRzIG5lZWRlZC4KKysKKytUaGVzZSBhcmUgZWFjaCBleHBsYWluZWQgaW4gZGV0YWlsIGJlbG93LgorKworKworK1RoZSBDcm9zcy1UZXN0aW5nIFdyYXBwZXIKKysKKytUbyBydW4gdGVzdCBwcm9ncmFtcyByZWxpYWJseSwgdGhlIHN0b2NrIEdOVSBDIGxpYnJhcnkgdGFrZXMgY2FyZSB0bworK2Vuc3VyZSB0aGF0IHRlc3QgcHJvZ3JhbXMgdXNlIHRoZSBuZXdseSBjb21waWxlZCBkeW5hbWljIGxpbmtlciBhbmQKKytzaGFyZWQgbGlicmFyaWVzLCBhbmQgbmV2ZXIgdGhlIGhvc3Qgc3lzdGVtJ3MgaW5zdGFsbGVkIGxpYnJhcmllcy4gIFRvCisrYWNjb21wbGlzaCB0aGlzLCBpdCBydW5zIHRoZSB0ZXN0cyBieSBleHBsaWNpdGx5IGludm9raW5nIHRoZSBkeW5hbWljCisrbGlua2VyIGZyb20gdGhlIGJ1aWxkIHRyZWUsIHBhc3NpbmcgaXQgYSBsaXN0IG9mIGJ1aWxkIHRyZWUKKytkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIHNoYXJlZCBsaWJyYXJpZXMsIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mCisrdGhlIGV4ZWN1dGFibGUgdG8gcnVuIGFuZCBpdHMgYXJndW1lbnRzLgorKworK0ZvciBleGFtcGxlLCB3aGVyZSBvbmUgbWlnaHQgbm9ybWFsbHkgcnVuIGEgdGVzdCBwcm9ncmFtIGxpa2UgdGhpczoKKysKKysgICAgJCAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrdGhlIEdOVSBDIGxpYnJhcnkgbWlnaHQgcnVuIHRoYXQgcHJvZ3JhbSBsaWtlIHRoaXM6CisrCisrICAgICQgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrKHdoZXJlICRvYmpkaXIgaXMgdGhlIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZSwgYW5kIHRoZQorK3RyYWlsaW5nIGJhY2tzbGFzaCBpbmRpY2F0ZXMgYSBjb250aW51YXRpb24gb2YgdGhlIGNvbW1hbmQpLiAgSW4gb3RoZXIKKyt3b3JkcywgZWFjaCB0ZXN0IHByb2dyYW0gaW52b2NhdGlvbiBpcyAnd3JhcHBlZCB1cCcgaW5zaWRlIGFuIGV4cGxpY2l0CisraW52b2NhdGlvbiBvZiB0aGUgZHluYW1pYyBsaW5rZXIsIHdoaWNoIG11c3QgaXRzZWxmIGV4ZWN1dGUgdGhlIHRlc3QKKytwcm9ncmFtLCBoYXZpbmcgbG9hZGVkIHNoYXJlZCBsaWJyYXJpZXMgZnJvbSB0aGUgYXBwcm9wcmlhdGUKKytkaXJlY3Rvcmllcy4KKysKKytUbyBzdXBwb3J0IGNyb3NzLXRlc3RpbmcsIEdMSUJDIGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIG9wdGlvbmFsbHkKKytzZXQgdGhlICdjcm9zcy10ZXN0LXdyYXBwZXInIE1ha2UgdmFyaWFibGUgdG8gYW5vdGhlciB3cmFwcGVyIGNvbW1hbmQsCisrdG8gd2hpY2ggaXQgcGFzc2VzIHRoZSBlbnRpcmUgZHluYW1pYyBsaW5rZXIgaW52b2NhdGlvbiBzaG93biBhYm92ZSBhcworK2FyZ3VtZW50cy4gIEZvciBleGFtcGxlLCBpZiB0aGUgZGV2ZWxvcGVyIHN1cHBsaWVzIGEgd3JhcHBlciBvZgorKydteS13cmFwcGVyIGhvc3RuYW1lJywgdGhlbiBHTElCQyB3b3VsZCBydW4gdGhlIHRlc3QgYWJvdmUgYXMKKytmb2xsb3dzOgorKworKyAgICAkIG15LXdyYXBwZXIgaG9zdG5hbWUgXAorKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworK1RoZSAnbXktd3JhcHBlcicgY29tbWFuZCBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIHRoZSBjb21tYW5kCisrZ2l2ZW4gb24gdGhlIGhvc3Qgc3lzdGVtLgorKworK1NpbmNlIHRlc3RzIGFyZSBydW4gaW4gdmFyeWluZyBkaXJlY3RvcmllcywgdGhlIHdyYXBwZXIgc2hvdWxkIGVpdGhlcgorK2JlIGluIHlvdXIgY29tbWFuZCBzZWFyY2ggcGF0aCwgb3IgJ2Nyb3NzLXRlc3Qtd3JhcHBlcicgc2hvdWxkIGdpdmUgYW4KKythYnNvbHV0ZSBwYXRoIGZvciB0aGUgd3JhcHBlci4KKysKKytUaGUgd3JhcHBlciBtdXN0IG1lZXQgc2V2ZXJhbCByZXF1aXJlbWVudHM6CisrCisrLSBJdCBtdXN0IHByZXNlcnZlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEFzIGV4cGxhaW5lZCBhYm92ZSwgdGhlCisrICBidWlsZCBkaXJlY3RvcnkgdHJlZSBtdXN0IGJlIHZpc2libGUgb24gYm90aCB0aGUgYnVpbGQgYW5kIGhvc3QKKysgIHN5c3RlbXMsIGF0IHRoZSBzYW1lIHBhdGguICBUaGUgdGVzdCB3cmFwcGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlCisrICBjdXJyZW50IGRpcmVjdG9yeSBpdCBpbmhlcml0cyBpcyBhbHNvIGluaGVyaXRlZCBieSB0aGUgZHluYW1pYworKyAgbGlua2VyIChhbmQgdGh1cyB0aGUgdGVzdCBwcm9ncmFtIGl0c2VsZikuCisrCisrLSBJdCBtdXN0IHByZXNlcnZlIGVudmlyb25tZW50IHZhcmlhYmxlcycgdmFsdWVzLiAgTWFueSBHTElCQyB0ZXN0cworKyAgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGVzdCBydW5zOyBpbiBuYXRpdmUgdGVzdGluZywgaXQKKysgIGludm9rZXMgcHJvZ3JhbXMgbGlrZSB0aGlzOgorKworKyAgICAkIEdDT05WX1BBVEg9JG9iamRpci9pY29udmRhdGEgXAorKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworKyAgV2l0aCB0aGUgY3Jvc3MtdGVzdGluZyB3cmFwcGVyLCB0aGF0IGludm9jYXRpb24gYmVjb21lczoKKysKKysgICAgJCBHQ09OVl9QQVRIPSRvYmpkaXIvaWNvbnZkYXRhIFwKKysgICAgICBteS13cmFwcGVyIGhvc3RuYW1lIFwKKysgICAgICAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKysgIEhlcmUsICdteS13cmFwcGVyJyBtdXN0IGVuc3VyZSB0aGF0IHRoZSB2YWx1ZSBpdCBzZWVzIGZvcgorKyAgJ0dDT05WX1BBVEgnIHdpbGwgYmUgc2VlbiBieSB0aGUgZHluYW1pYyBsaW5rZXIsIGFuZCB0aHVzICd0c3QtZm9vJworKyAgaXRzZWxmLiAgKFRoZSB3cmFwcGVyIHN1cHBsaWVkIHdpdGggR0xJQkMgc2ltcGx5IHByZXNlcnZlcyB0aGUKKysgIHZhbHVlcyBvZiAqYWxsKiBlbnZpcm9tZW50IHZhcmlhYmxlcywgd2l0aCBhIGZpeGVkIHNldCBvZgorKyAgZXhjZXB0aW9ucy4pCisrCisrICBJZiB5b3VyIHdyYXBwZXIgaXMgYSBzaGVsbCBzY3JpcHQsIHRha2UgY2FyZSB0byBjb3JyZWN0bHkgcHJvcGFnYXRlCisrICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hvc2UgdmFsdWVzIGNvbnRhaW4gc3BhY2VzIGFuZCBzaGVsbAorKyAgbWV0YWNoYXJhY3RlcnMuCisrCisrLSBJdCBtdXN0IHBhc3MgdGhlIGNvbW1hbmQncyBhcmd1bWVudHMsIHVubW9kaWZpZWQuICBUaGUgYXJndW1lbnRzCisrICBzZWVuIGJ5IHRoZSB0ZXN0IHByb2dyYW0gc2hvdWxkIGJlIGV4YWN0bHkgdGhvc2Ugc2VlbiBieSB0aGUgd3JhcHBlcgorKyAgKGFmdGVyIHdoYXRldmVyIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gdGhlIHdyYXBwZXIgaXRzZWxmKS4gIFRoZQorKyAgR0xJQkMgdGVzdCBmcmFtZXdvcmsgcGVyZm9ybXMgYWxsIG5lZWRlZCBzaGVsbCB3b3JkIHNwbGl0dGluZyBhbmQKKysgIGV4cGFuc2lvbiAod2lsZGNhcmQgZXhwYW5zaW9uLCBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9uLCBhbmQgc28gb24pCisrICBiZWZvcmUgaW52b2tpbmcgdGhlIHdyYXBwZXI7IGZ1cnRoZXIgZXhwYW5zaW9uIG1heSBicmVhayB0aGUgdGVzdHMuCisrCisrCisrVGhlICdjcm9zcy10ZXN0LXNzaC5zaCcgc2NyaXB0CisrCisrSWYgeW91IHdhbnQgdG8gdXNlICdzc2gnIChvciBzb21ldGhpbmcgc3VmZmljaWVudGx5IHNpbWlsYXIpIHRvIHJ1bgorK3Rlc3QgcHJvZ3JhbXMgb24geW91ciBob3N0IHN5c3RlbSwgR0xJQkMgaW5jbHVkZXMgYSBzaGVsbCBzY3JpcHQsCisrJ3NjcmlwdHMvY3Jvc3MtdGVzdC1zc2guc2gnLCB3aGljaCB5b3UgY2FuIHVzZSBhcyB5b3VyIHdyYXBwZXIKKytjb21tYW5kLiAgVGhpcyBzY3JpcHQgdGFrZXMgY2FyZSBvZiBzZXR0aW5nIHRoZSB0ZXN0IGNvbW1hbmQncyBjdXJyZW50CisrZGlyZWN0b3J5LCBwcm9wYWdhdGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZXMsIGFuZCBjYXJyeWluZworK2NvbW1hbmQtbGluZSBhcmd1bWVudHMsIGFsbCBhY3Jvc3MgYW4gJ3NzaCcgY29ubmVjdGlvbi4gIFlvdSBtYXkgZXZlbgorK3N1cHBseSBhbiBhbHRlcm5hdGl2ZSB0byAnc3NoJyBvbiB0aGUgY29tbWFuZCBsaW5lLCBpZiBuZWVkZWQuCisrCisrRm9yIG1vcmUgZGV0YWlscywgcGFzcyAnY3Jvc3MtdGVzdC1zc2guc2gnIHRoZSAnLS1oZWxwJyBvcHRpb24uCisrCisrCisrVGhlIENyb3NzLUNvbXBpbGluZyBMb2NhbGUgRGVmaW5pdGlvbiBDb21tYW5kCisrCisrU29tZSBHTElCQyB0ZXN0cyByZWx5IG9uIGxvY2FsZXMgZ2VuZXJhdGVkIGVzcGVjaWFsbHkgZm9yIHRoZSB0ZXN0CisrcHJvY2Vzcy4gIEluIGEgbmF0aXZlIGNvbmZpZ3VyYXRpb24sIHRoZXNlIHRlc3RzIHNpbXBseSBydW4gdGhlCisrJ2xvY2FsZWRlZicgY29tbWFuZCBidWlsdCBieSB0aGUgbm9ybWFsIEdMSUJDIGJ1aWxkIHByb2Nlc3MsCisrJ2xvY2FsZS9sb2NhbGVkZWYnLCB0byBwcm9jZXNzIGFuZCBpbnN0YWxsIHRoZWlyIGxvY2FsZXMuICBIb3dldmVyLCBpbgorK2EgY3Jvc3MtY29tcGlsaW5nIGNvbmZpZ3VyYXRpb24sIHRoaXMgJ2xvY2FsZWRlZicgaXMgYnVpbHQgZm9yIHRoZQorK2hvc3Qgc3lzdGVtLCBub3QgdGhlIGJ1aWxkIHN5c3RlbSwgYW5kIHNpbmNlIGl0IHJlcXVpcmVzIHF1aXRlIGEgYml0Cisrb2YgbWVtb3J5IHRvIHJ1biAod2UgaGF2ZSBzZWVuIGl0IGZhaWwgb24gc3lzdGVtcyB3aXRoIDY0TWlCIG9mCisrbWVtb3J5KSwgaXQgbWF5IG5vdCBiZSBwcmFjdGljYWwgdG8gcnVuIGl0IG9uIHRoZSBob3N0IHN5c3RlbS4KKysKKytJZiBzZXQsIEdMSUJDIHVzZXMgdGhlICdjcm9zcy1sb2NhbGVkZWYnIE1ha2UgdmFyaWFibGUgYXMgdGhlIGNvbW1hbmQKKyt0byBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbSB0byBwcm9jZXNzIGFuZCBpbnN0YWxsIGxvY2FsZXMuICBUaGUKKytsb2NhbGVkZWYgcHJvZ3JhbSBidWlsdCBmcm9tIHRoZSBHTElCQyAnbG9jYWxlZGVmJyBtb2R1bGUgaXMKKytzdWl0YWJsZS4KKysKKytUaGUgdmFsdWUgb2YgJ2Nyb3NzLWxvY2FsZWRlZicgbWF5IGFsc28gaW5jbHVkZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzCisrdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm9ncmFtOyBpZiB5b3UgYXJlIHVzaW5nIEdMSUJDJ3MgJ2xvY2FsZWRlZicsCisreW91IG1heSBpbmNsdWRlIGVuZGlhbm5lc3MgYW5kICd1aW50MzJfdCcgYWxpZ25tZW50IGFyZ3VtZW50cyBoZXJlLgorKworKworK0V4YW1wbGUKKysKKytJbiBkZXZlbG9waW5nIEdMSUJDJ3MgY3Jvc3MtdGVzdGluZyBmYWNpbGl0eSwgd2UgaW52b2tlZCAnbWFrZScgd2l0aAorK3RoZSBmb2xsb3dpbmcgc2NyaXB0OgorKworKyAgICAjIS9iaW4vc2gKKysKKysgICAgc3JjZGlyPS4uLgorKyAgICB0ZXN0X2hvc3RuYW1lPS4uLgorKyAgICBsb2NhbGVkZWZkaXI9Li4uCisrICAgIGNyb3NzX2d4eD0uLi4tZysrCisrCisrICAgIHdyYXBwZXI9IiRzcmNkaXIvc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCAkdGVzdF9ob3N0bmFtZSIKKysgICAgbG9jYWxlZGVmPSIkbG9jYWxlZGVmZGlyL2xvY2FsZWRlZiAtLWxpdHRsZS1lbmRpYW4gLS11aW50MzItYWxpZ249NCIKKysKKysgICAgbWFrZSBjcm9zcy10ZXN0LXdyYXBwZXI9IiR3cmFwcGVyIiBcCisrICAgICAgICAgY3Jvc3MtbG9jYWxlZGVmPSIkbG9jYWxlZGVmIiBcCisrICAgICAgICAgQ1hYPSIkY3Jvc3NfZ3h4IiBcCisrICAgICAgICAgIiRAIgorKworKworK090aGVyIENyb3NzLVRlc3RpbmcgQ29uY2VybnMKKysKKytIZXJlIGFyZSBub3RlcyBvbiBzb21lIG90aGVyIGlzc3VlcyB3aGljaCB5b3UgbWF5IGVuY291bnRlciBpbiBydW5uaW5nCisrdGhlIEdMSUJDIHRlc3RzIGluIGEgY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50OgorKworKy0gU29tZSB0ZXN0cyByZXF1aXJlIGEgQysrIGNyb3NzLWNvbXBpbGVyOyB5b3Ugc2hvdWxkIHNldCB0aGUgJ0NYWCcKKysgIE1ha2UgdmFyaWFibGUgdG8gdGhlIG5hbWUgb2YgYW4gYXBwcm9wcmlhdGUgY3Jvc3MtY29tcGlsZXIuCisrCisrLSBTb21lIHRlc3RzIHJlcXVpcmUgYWNjZXNzIHRvIGxpYnN0ZGMrKy5zby42IGFuZCBsaWJnY2Nfcy5zby4xOyB3ZQorKyAgc2ltcGx5IHBsYWNlIGNvcGllcyBvZiB0aGVzZSBsaWJyYXJpZXMgaW4gdGhlIHRvcCBHTElCQyBidWlsZAorKyAgZGlyZWN0b3J5LgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYjgwZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaApAQCAtMCwwICsxLDE0MzYgQEAKK0Zyb20gYWE3YzVmZTg2ZDA0NTg0YTlhZWQ0ZGM0MGJhODU2YzY1YTFlZjljNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQ1OjE4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMjddIGVnbGliYzogQnJpbmcgRWdsaWJjIG9wdGlvbiBncm91cCBpbmZyYXN0cnVjdHVyZSB0bworIGdsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgRUdMSUJDLm9wdGlvbi1ncm91cHMgICAgICAgICAgICAgIHwgMTIyICsrKysrKworIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgY29uZmlnLm1ha2UuaW4gICAgICAgICAgICAgICAgICAgIHwgICAyICsKKyBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKworIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArCisgb3B0aW9uLWdyb3Vwcy5kZWYgICAgICAgICAgICAgICAgIHwgODY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cyAgICAgICAgICAgIHwgIDQ3ICsrKworIG9wdGlvbi1ncm91cHMubWFrICAgICAgICAgICAgICAgICB8ICA0MSArKworIG9wdGlvbnMtY29uZmlnL01ha2VmaWxlICAgICAgICAgICB8ICA1NSArKysKKyBvcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwgfCAgNTggKysrCisgb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwgIHwgICA4ICsKKyBzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrICAgICAgICAgfCAgNjMgKysrCisgMTIgZmlsZXMgY2hhbmdlZCwgMTI4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEVHTElCQy5vcHRpb24tZ3JvdXBzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbi1ncm91cHMuZGVmCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbi1ncm91cHMuZGVmYXVsdHMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9uLWdyb3Vwcy5tYWsKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sKKworZGlmZiAtLWdpdCBhL0VHTElCQy5vcHRpb24tZ3JvdXBzIGIvRUdMSUJDLm9wdGlvbi1ncm91cHMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42YTUwYjhkCistLS0gL2Rldi9udWxsCisrKysgYi9FR0xJQkMub3B0aW9uLWdyb3VwcworQEAgLTAsMCArMSwxMjIgQEAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQorKworKyAgICAgICAgICAgICAgVGhlIEVHTElCQyBDb21wb25lbnQgQ29uZmlndXJhdGlvbiBTeXN0ZW0KKysgICAgICAgICAgICAgICAgICBKaW0gQmxhbmR5IDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisrCisrSW50cm9kdWN0aW9uCisrCisrVGhlIEdOVSBDIGxpYnJhcnkgKEdMSUJDKSBwcm92aWRlcyBhIGJyb2FkIHJhbmdlIG9mIGZ1bmN0aW9uYWxpdHksCisrcmFuZ2luZyBmcm9tIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgdG8gdHJhbnNjZW5kZW50YWwKKyttYXRoZW1hdGljYWwgZnVuY3Rpb25zLiAgSXRzIHdlYnNpdGUgYm9hc3RzIHRoYXQgIm5lYXJseSBhbGwga25vd24gYW5kCisrdXNlZnVsIGZ1bmN0aW9ucyBmcm9tIGFueSBvdGhlciBDIGxpYnJhcnkgYXJlIGF2YWlsYWJsZS4iICBUaGlzCisrZXhoYXVzdGl2ZSBhcHByb2FjaCBoYXMgYmVlbiBvbmUgb2YgR0xJQkMncyBzdHJlbmd0aHMgb24gZGVza3RvcCBhbmQKKytzZXJ2ZXIgc3lzdGVtcywgYnV0IGl0IGhhcyBhbHNvIGdpdmVuIEdMSUJDIGEgbGFyZ2UgZm9vdHByaW50LCBib3RoIGluCisrbWVtb3J5IGFuZCBvbiBkaXNrLCBtYWtpbmcgaXQgYSBjaGFsbGVuZ2UgdG8gdXNlIGluIGVtYmVkZGVkIHN5c3RlbXMKKyt3aXRoIGxpbWl0ZWQgcmVzb3VyY2VzLgorKworK1RoZSBFbWJlZGRlZCBHTlUgQyBsaWJyYXJ5IChFR0xJQkMpIGlzIGEgdmFyaWFudCBvZiB0aGUgR05VIEMgbGlicmFyeQorK2Rlc2lnbmVkIHRvIHdvcmsgd2VsbCBvbiBlbWJlZGRlZCBzeXN0ZW1zLiAgSW4gcGFydGljdWxhciwgRUdMSUJDJ3MKKytjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gYWxsb3dzIGVtYmVkZGVkIGRldmVsb3BlcnMgdG8gYnVpbGQKKytjdXN0b21pemVkIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaW5jbHVkZSBvbmx5IHRoZSBmZWF0dXJlcworK3RoZWlyIGFwcGxpY2F0aW9uIHVzZXMsIHJlZHVjaW5nIGl0cyBzcGFjZSByZXF1aXJlbWVudHMuCisrCisrRUdMSUJDJ3MgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIGNhdGVnb3JpemVzIHRoZSBsaWJyYXJ5J3MKKytmdW5jdGlvbnMgaW50byAib3B0aW9uIGdyb3VwcyIsIGFuZCBhbGxvd3MgeW91IHRvIGluY2x1ZGUgb3IgZXhjbHVkZQorK29wdGlvbiBncm91cHMgaW5kaXZpZHVhbGx5LiAgU29tZSBvcHRpb24gZ3JvdXBzIGRlcGVuZCBvbiBvdGhlcnM7CisrRUdMSUJDIHRyYWNrcyB0aGVzZSByZWxhdGlvbnNoaXBzLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzZWxlY3RlZAorK2NvbmZpZ3VyYXRpb24geWllbGRzIGEgZnVuY3Rpb25pbmcgbGlicmFyeS4KKysKKysKKytDb25zaXN0ZW50IGFuZCBQcmVkaWN0YWJsZSBCZWhhdmlvcgorKworK0EgZmxleGlibGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBtaXhlZCBibGVzc2luZzogaWYgdGhlIG9wdGlvbnMKKytvZmZlcmVkIGFyZSBwb29ybHkgZGVzaWduZWQsIGl0IGNhbiBiZSBoYXJkIHRvIHNlZSB3aGljaCBjaG9pY2VzIHdpbGwKKytoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdHMsIGFuZCBjaG9pY2VzIHdpdGggb2JzY3VyZSBjb25zZXF1ZW5jZXMgY2FuCisrbWFrZSBkZWJ1Z2dpbmcgZGlmZmljdWx0LiAgRUdMSUJDJ3MgY29uZmlndXJhdGlvbiBmb2xsb3dzIHNvbWUgZ2VuZXJhbAorK3ByaW5jaXBsZXMgdG8gcmVkdWNlIHRoZXNlIHJpc2tzOgorKworKy0gRUdMSUJDIGhhcyBhIHNpbmdsZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggdGFyZ2V0CisrICBhcmNoaXRlY3R1cmUuCisrCisrLSBJbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBhbGwgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZCwgYW5kCisrICBFR0xJQkMgaXMgdXB3YXJkbHkgQVBJLSBhbmQgQUJJLWNvbXBhdGlibGUgd2l0aCBHTElCQy4KKysKKystIEFzIG11Y2ggYXMgcG9zc2libGUsIGNvbmZpZ3VyYXRpb25zIG9ubHkgYWZmZWN0IHdoYXQgZnVuY3Rpb25zIGFyZQorKyAgcHJlc2VudCwgbm90IGhvdyB0aGV5IGJlaGF2ZS4gIElmIHRoZSBzeXN0ZW0gd29ya3Mgd2l0aCBhbiBvcHRpb24KKysgIGdyb3VwIGRpc2FibGVkLCBpdCB3aWxsIHN0aWxsIHdvcmsgd2l0aCBpdCBlbmFibGVkLgorKworKy0gQXMgbXVjaCBhcyBwb3NzaWJsZSwgY29uZmlndXJhdGlvbnMgb25seSBzZWxlY3Qgb3B0aW9uIGdyb3VwcyAtLS0KKysgIHRoZXkgZG8gbm90IGRlc2NyaWJlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKysKKytUaGVzZSBydWxlcyBtZWFuIHRoYXQgeW91IGhhdmUgYSBzaW1wbGUgZGVidWdnaW5nIHN0cmF0ZWd5IGF2YWlsYWJsZQorK2lmIHlvdSBzdXNwZWN0IHRoYXQgeW91ciBFR0xJQkMgY29uZmlndXJhdGlvbiBtaWdodCBiZSB0aGUgc291cmNlIG9mIGEKKytwcm9ibGVtOiBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgcmUtdGVzdCwgYW5kIHRoZW4KKytkaXNhYmxlIG9wdGlvbiBncm91cHMgb25lIGJ5IG9uZSwgdW50aWwgdGhlIHByb2JsZW0gcmVhcHBlYXJzLgorKworKworK1RoZSBPcHRpb24gR3JvdXBzCisrCisrVG8gc2VlIHRoZSBjdXJyZW50IGZ1bGwgbGlzdCBvZiBpbXBsZW1lbnRlZCBvcHRpb24gZ3JvdXBzLCByZWZlciB0byB0aGUKKytmaWxlICdvcHRpb24tZ3JvdXBzLmRlZicgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsIG9yIHJ1bgorKydtYWtlIG1lbnVjb25maWcnIGZyb20gdGhlIHRvcC1sZXZlbCBidWlsZCBkaXJlY3RvcnkuCisrCisrVGhlIFBPU0lYLjEtMjAwMSBzcGVjaWZpY2F0aW9uIGluY2x1ZGVzIGEgc3VnZ2VzdGVkIHBhcnRpdGlvbiBvZiBhbGwKKyt0aGUgZnVuY3Rpb25zIGluIHRoZSBQT1NJWCBDIEFQSSBpbnRvIG9wdGlvbiBncm91cHM6IG1hdGggZnVuY3Rpb25zCisrbGlrZSAnc2luJyBhbmQgJ2Nvcyc7IG5ldHdvcmtpbmcgZnVuY3Rpb25zIGxpa2UgJ3NvY2tldCcgYW5kCisrJ2Nvbm5lY3QnOyBhbmQgc28gb24uICBFR0xJQkMgY291bGQgdXNlIHRoaXMgcGFydGl0aW9uaW5nIGFzIHRoZSBiYXNpcworK2ZvciBmdXR1cmUgb3B0aW9uIGdyb3Vwcy4KKysKKysKKytJbXBsZW1lbnRhdGlvbgorKworK1RoZSBFR0xJQkMgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIHJlc2VtYmxlcyB0aGUgYXBwcm9hY2ggdXNlZAorK2J5IHRoZSBMaW51eCBrZXJuZWwgdG8gc2VsZWN0IGRldmljZSBkcml2ZXJzLCBuZXR3b3JrIHByb3RvY29scywgYW5kCisrb3RoZXIgZmVhdHVyZXMuICBBIGZpbGUgbmFtZWQgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBpbiB0aGUgdG9wLWxldmVsCisrYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5zIGFzc2lnbm1lbnRzIHRvIE1ha2UgdmFyaWFibGVzLCBlYWNoIG9mIHdoaWNoCisrZW5hYmxlcyBvciBkaXNhYmxlcyBhIHBhcnRpY3VsYXIgb3B0aW9uIGdyb3VwLiAgSWYgdGhlIHZhcmlhYmxlJ3MKKyt2YWx1ZSBpcyBzZXQgdG8gJ3knLCB0aGVuIHRoZSBvcHRpb24gZ3JvdXAgaXMgZW5hYmxlZDsgaWYgaXQgc2V0IHRvCisrYW55dGhpbmcgZWxzZSwgdGhlIG9wdGlvbiBncm91cCBpcyBvbWl0dGVkLiAgVGhlIGZpbGUKKysnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycsIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLCBlc3RhYmxpc2hlcworK2RlZmF1bHQgdmFsdWVzIGZvciBhbGwgdmFyaWFibGVzOyBhbGwgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZCBieQorK2RlZmF1bHQuCisrCisrRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgJ29wdGlvbi1ncm91cHMuY29uZmlnJyB3b3VsZCBvbWl0IGxvY2FsZQorK2RhdGEsIGJ1dCBpbmNsdWRlIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMsIGFuZCBldmVyeXRoaW5nIGVsc2U6CisrCisrICAgT1BUSU9OX0VHTElCQ19MT0NBTEVTID0gbgorKyAgIE9QVElPTl9FR0xJQkNfTElCTSA9IHkKKysKKytMaWtlIHRoZSBMaW51eCBrZXJuZWwsIEVHTElCQyBzdXBwb3J0cyBhIHNpbWlsYXIgc2V0IG9mICcqY29uZmlnJyBtYWtlCisrdGFyZ2V0cyB0byBtYWtlIGl0IGVhc2llciB0byBjcmVhdGUgJ29wdGlvbi1ncm91cHMuY29uZmlnJywgd2l0aCBhbGwKKytkZXBlbmRlbmNpZXMgYmV0d2VlbiBvcHRpb24gZ3JvdXBzIGF1dG9tYXRpY2FsbHkgc2F0aXNmaWVkLiAgUnVuCisrJ21ha2UgaGVscCcgdG8gc2VlIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBtYWtlIGNvbmZpZyB0YXJnZXRzLiAgRm9yCisrZXhhbXBsZSwgJ21ha2UgbWVudWNvbmZpZycgd2lsbCB1cGRhdGUgdGhlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhCisrbWVudSBiYXNlZCBwcm9ncmFtLgorKworK1RoZSBvcHRpb24gZ3JvdXAgbmFtZXMgYW5kIHRoZWlyIHR5cGUgKGJvb2xlYW4sIGludCwgaGV4LCBzdHJpbmcpLCBoZWxwCisrZGVzY3JpcHRpb24sIGFuZCBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlciBvcHRpb24gZ3JvdXBzLCBhcmUgZGVzY3JpYmVkIGJ5CisrJ29wdGlvbi1ncm91cHMuZGVmJyBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwgYW5hbG9nb3VzIHRvIHRoZQorKydLY29uZmlnJyBmaWxlcyBpbiB0aGUgTGludXgga2VybmVsLgorKworK0luIGdlbmVyYWwsIGVhY2ggb3B0aW9uIGdyb3VwIHZhcmlhYmxlIGNvbnRyb2xzIHdoZXRoZXIgYSBnaXZlbiBzZXQgb2YKKytvYmplY3QgZmlsZXMgaW4gRUdMSUJDIGlzIGNvbXBpbGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUgZmluYWwKKytsaWJyYXJpZXMsIG9yIG9taXR0ZWQgZnJvbSB0aGUgYnVpbGQuCisrCisrRWFjaCBzdWJkaXJlY3RvcnkncyBNYWtlZmlsZSBjYXRlZ29yaXplcyBpdHMgcm91dGluZXMsIGxpYnJhcmllcywgYW5kCisrZXhlY3V0YWJsZXMgYnkgb3B0aW9uIGdyb3VwLiAgRm9yIGV4YW1wbGUsIEVHTElCQydzICdtYXRoL01ha2VmaWxlJworK3BsYWNlcyB0aGUgJ2xpYm0nIGxpYnJhcnkgaW4gdGhlIE9QVElPTl9FR0xJQkNfTElCTSBncm91cCBhcyBmb2xsb3dzOgorKworKyAgIGV4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xJQk0pIDo9IGxpYm0KKysKKytGaW5hbGx5LCBjb21tb24gY29kZSBpbiAnTWFrZXJ1bGVzJyBjaXRlcyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlCisrJ2V4dHJhLWxpYnMteScsIHNlbGVjdGluZyBvbmx5IHRob3NlIGxpYnJhcmllcyB0aGF0IGJlbG9uZyB0byBlbmFibGVkCisrb3B0aW9uIGdyb3VwcyB0byBiZSBidWlsdC4KKysKKysKKytDdXJyZW50IFN0YXR1cyBhbmQgRnV0dXJlIERpcmVjdGlvbnMKKysKKytUaGUgRUdMSUJDIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSBkZXNjcmliZWQgaGVyZSBpcyBzdGlsbAorK3VuZGVyIGRldmVsb3BtZW50LgorKworK1dlIGhhdmUgdXNlZCB0aGUgc3lzdGVtIHRvIHN1YnNldCBzb21lIHBvcnRpb25zIG9mIEVHTElCQydzCisrSW5kZXg6IGxpYmMvY29uZmlndXJlLmFjCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNjU4Y2NmYS4uZjkwNjM5MSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTI0LDYgKzI0LDcgQEAgZW5kaWYKKyAKKyBpbmNsdWRlIE1ha2Vjb25maWcKKyAKKytpbmNsdWRlIG9wdGlvbnMtY29uZmlnL01ha2VmaWxlCisgCisgIyBUaGlzIGlzIHRoZSBkZWZhdWx0IHRhcmdldDsgaXQgbWFrZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIHRlc3RzLgorIC5QSE9OWTogYWxsCitkaWZmIC0tZ2l0IGEvY29uZmlnLm1ha2UuaW4gYi9jb25maWcubWFrZS5pbgoraW5kZXggYTlmNTY5Ni4uMjk0ZjhkMSAxMDA2NDQKKy0tLSBhL2NvbmZpZy5tYWtlLmluCisrKysgYi9jb25maWcubWFrZS5pbgorQEAgLTQ3LDYgKzQ3LDggQEAgYysrLXN5c2luY2x1ZGVzID0gQENYWF9TWVNJTkNMVURFU0AKKyBhbGwtd2FybmluZ3MgPSBAYWxsX3dhcm5pbmdzQAorIGVuYWJsZS13ZXJyb3IgPSBAZW5hYmxlX3dlcnJvckAKKyAKKytrY29uZmlnX3Rvb2xzID0gQEtDT05GSUdfVE9PTFNACisrCisgaGF2ZS16LWNvbWJyZWxvYyA9IEBsaWJjX2N2X3pfY29tYnJlbG9jQAorIGhhdmUtei1leGVjc3RhY2sgPSBAbGliY19jdl96X2V4ZWNzdGFja0AKKyBoYXZlLUJncm91cCA9IEBsaWJjX2N2X0Jncm91cEAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDdkNzI5OWEuLjQxMTY0MDQgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY0MSw2ICs2NDEsNyBAQCBJTlNUQUxMX0lORk8KKyBQRVJMCisgQkFTSF9TSEVMTAorIGxpYmNfY3ZfZ2NjX3N0YXRpY19saWJnY2MKKytLQ09ORklHX1RPT0xTCisgQ1hYX1NZU0lOQ0xVREVTCisgU1lTSU5DTFVERVMKKyBBVVRPQ09ORgorQEAgLTc1NSw2ICs3NTYsNyBAQCB3aXRoX2ZwCisgd2l0aF9iaW51dGlscworIHdpdGhfc2VsaW51eAorIHdpdGhfaGVhZGVycworK3dpdGhfa2NvbmZpZworIHdpdGhfZGVmYXVsdF9saW5rCisgZW5hYmxlX3Nhbml0eV9jaGVja3MKKyBlbmFibGVfc2hhcmVkCitAQCAtMTQ1OSw2ICsxNDYxLDkgQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtc2VsaW51eCAgICAgICAgICBpZiBidWlsZGluZyB3aXRoIFNFTGludXggc3VwcG9ydAorICAgLS13aXRoLWhlYWRlcnM9UEFUSCAgICAgbG9jYXRpb24gb2Ygc3lzdGVtIGhlYWRlcnMgdG8gdXNlIChmb3IgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgL3Vzci9zcmMvbGludXgvaW5jbHVkZSkgW2RlZmF1bHQ9Y29tcGlsZXIgZGVmYXVsdF0KKysgIC0td2l0aC1rY29uZmlnPVBBVEggICAgIGxvY2F0aW9uIG9mIGtjb25maWcgdG9vbHMgdG8gdXNlIChmcm9tIExpbnV4IGtlcm5lbAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzKSB0byByZS11c2UgZm9yIGNvbmZpZ3VyaW5nIEVHTElCQyBvcHRpb24KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcworICAgLS13aXRoLWRlZmF1bHQtbGluayAgICAgZG8gbm90IHVzZSBleHBsaWNpdCBsaW5rZXIgc2NyaXB0cworICAgLS13aXRoLWNwdT1DUFUgICAgICAgICAgc2VsZWN0IGNvZGUgZm9yIENQVSB2YXJpYW50CisgCitAQCAtMzUxNyw2ICszNTIyLDE0IEBAIGZpCisgCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1rY29uZmlnIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfa2NvbmZpZytzZXR9IiA9IHNldDsgdGhlbgorKyAgd2l0aHZhbD0kd2l0aF9rY29uZmlnOyBLQ09ORklHX1RPT0xTPSR3aXRodmFsCisrZWxzZQorKyAgS0NPTkZJR19UT09MUz0nJworK2ZpCisrCisrCisgCisgIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0LWxpbmsgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7d2l0aF9kZWZhdWx0X2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4gOgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTQ2N2E2OS4uZmMwZWQ0ZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTM2LDYgKzEzNiwxNiBAQCBBQ19BUkdfV0lUSChbaGVhZGVyc10sCisgCSAgICBbc3lzaGVhZGVycz0nJ10pCisgQUNfU1VCU1Qoc3lzaGVhZGVycykKKyAKKytBQ19BUkdfV0lUSChba2NvbmZpZ10sCisrCSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWtjb25maWc9UEFUSF0sCisrCQkJICAgW2xvY2F0aW9uIG9mIGtjb25maWcgdG9vbHMgdG8gdXNlIChmcm9tIExpbnV4CisrCQkJICAgIGtlcm5lbCBidWlsZHMpIHRvIHJlLXVzZSBmb3IgY29uZmlndXJpbmcgRUdMSUJDCisrCQkJICAgIG9wdGlvbiBncm91cHNdKSwKKysJICAgIFtLQ09ORklHX1RPT0xTPSR3aXRodmFsXSwKKysJICAgIFtLQ09ORklHX1RPT0xTPScnXSkKKytBQ19TVUJTVChLQ09ORklHX1RPT0xTKQorKworKworIEFDX1NVQlNUKHVzZV9kZWZhdWx0X2xpbmspCisgQUNfQVJHX1dJVEgoW2RlZmF1bHQtbGlua10sCisgCSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtbGlua10sCitkaWZmIC0tZ2l0IGEvb3B0aW9uLWdyb3Vwcy5kZWYgYi9vcHRpb24tZ3JvdXBzLmRlZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjZhZWJkOTQKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbi1ncm91cHMuZGVmCitAQCAtMCwwICsxLDg2OCBAQAorKyMgVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgb3B0aW9uIGdyb3VwcyBFR0xJQkMgY3VycmVudGx5IHN1cHBvcnRzLCBpbgorKyMgYSBmb3JtYXQgYWtpbiB0byB0aGUgTGludXggS2NvbmZpZyBzeXN0ZW0ncy4gIFRoZSBzeW50YXggbWF5IGNoYW5nZQorKyMgb3ZlciB0aW1lLgorKyMKKysjIEFuIGVudHJ5IG9mIHRoZSBmb3JtOgorKyMKKysjICAgY29uZmlnIEdST1VQX05BTUUKKysjICAgICAgIGJvb2wgIm9uZS1saW5lIGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhpcyBvcHRpb24gZ3JvdXAgY29udHJvbHMiCisrIyAgICAgICBoZWxwCisrIyAgICAgICAgICAgTXVsdGktbGluZSBoZWxwIGV4cGxhaW5pbmcgdGhlIG9wdGlvbiBncm91cCdzIG1lYW5pbmcgaW4KKysjICAgICAgICAgICBzb21lIGRldGFpbCwgdGVybWluYXRlZCBieSBpbmRlbnRhdGlvbiBsZXZlbC4KKysjCisrIyBkZWZpbmVzIGFuIG9wdGlvbiBncm91cCB3aG9zZSB2YXJpYWJsZSBpcyBHUk9VUF9OQU1FLCB3aXRoCisrIyBtZWFuaW5nZnVsIHZhbHVlcyAneScgKGVuYWJsZWQpIGFuZCAnbicgKGRpc2FibGVkKS4gIFRoZQorKyMgZG9jdW1lbnRhdGlvbiBpcyBmb3JtYXR0ZWQgdG8gYmUgY29uc3VtZWQgYnkgc29tZSBzb3J0IG9mCisrIyBpbnRlcmFjdGl2ZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSwgYnV0IEVHTElCQyBkb2Vzbid0IGhhdmUgc3VjaCBhbgorKyMgaW50ZXJmYWNlIHlldC4KKysjCisrIyBBbiBvcHRpb24gbWF5IGhhdmUgYSAnZGVwZW5kcyBvbicgbGluZSwgaW5kaWNhdGluZyB3aGljaCBvdGhlciBvcHRpb25zCisrIyBtdXN0IGFsc28gYmUgZW5hYmxlZCBpZiB0aGlzIG9wdGlvbiBpcy4gIEF0IHByZXNlbnQsIEVHTElCQyBkb2Vzbid0CisrIyBjaGVjayB0aGF0IHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLgorKyMKKysjIE9wdGlvbiBncm91cCB2YXJpYWJsZXMgZ2V0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIGZyb20gdGhlIGZpbGUKKysjICdvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJywgaW4gdGhlIHRvcCBkaXJlY3Rvcnkgb2YgdGhlIEVHTElCQyBzb3VyY2UKKysjIHRyZWUuICBCeSBkZWZhdWx0LCBhbGwgRUdMSUJDIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQgLS0tIHRoZWlyCisrIyB2YXJpYWJsZXMgYXJlIHNldCB0byAneScuCisrIworKyMgQWZ0ZXIgaW5jbHVkaW5nICdvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJywgdGhlIEVHTElCQyBtYWtlIG1hY2hpbmVyeQorKyMgaW5jbHVkZXMgdGhlIGZpbGUgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBmcm9tIHRoZSB0b3Agb2YgdGhlIGJ1aWxkCisrIyB0cmVlLCBpZiBpdCBpcyBwcmVzZW50LiAgRGV2ZWxvcGVycyBjYW4gcGxhY2UgYXNzaWdubWVudHMgdG8gb3B0aW9uCisrIyBncm91cCB2YXJpYWJsZXMgaW4gdGhhdCBmaWxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy4gIEZvciBleGFtcGxlLAorKyMgdG8gZGlzYWJsZSBhbiBvcHRpb24gZ3JvdXAsIHBsYWNlIGEgbGluZSBvZiB0aGUgZm9ybToKKysjCisrIyAgICBPUFRJT05fR1JPVVBfTkFNRSA9IG4KKysjCisrIyBpbiAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGF0IHRoZSB0b3Agb2YgeW91ciBidWlsZCB0cmVlLiAgVG8KKysjIGV4cGxpY2l0bHkgZW5hYmxlIGFuIG9wdGlvbiBncm91cCwgeW91IG1heSBhbHNvIHdyaXRlOgorKyMKKysjICAgIE9QVElPTl9HUk9VUF9OQU1FID0geQorKyMKKysjIGFsdGhvdWdoIHRoaXMgc2ltcGx5IHJlZXN0YWJsaXNoZXMgdGhlIHZhbHVlIGFscmVhZHkgc2V0IGJ5CisrIyAnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycuCisrCisrY29uZmlnIEVHTElCQ19BRFZBTkNFRF9JTkVUNgorKyAgIGJvb2wgIklQdjYgQWR2YW5jZWQgU29ja2V0cyBBUEkgc3VwcG9ydCAoUkZDMzU0MikiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZ1bmN0aW9ucyBzcGVjaWZpZWQgYnkgUkZDIDM1NDIsCisrICAgICAgICJBZHZhbmNlZCBTb2NrZXRzIEFwcGxpY2F0aW9uIFByb2dyYW0gSW50ZXJmYWNlIChBUEkpIGZvcgorKyAgICAgICBJUHY2Ii4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgaW5ldDZfb3B0X2FwcGVuZAorKyAgICAgICAgIGluZXQ2X29wdF9maW5kCisrICAgICAgICAgaW5ldDZfb3B0X2ZpbmlzaAorKyAgICAgICAgIGluZXQ2X29wdF9nZXRfdmFsCisrICAgICAgICAgaW5ldDZfb3B0X2luaXQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fYWxsb2MKKysgICAgICAgICBpbmV0Nl9vcHRpb25fYXBwZW5kCisrICAgICAgICAgaW5ldDZfb3B0aW9uX2ZpbmQKKysgICAgICAgICBpbmV0Nl9vcHRpb25faW5pdAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9uZXh0CisrICAgICAgICAgaW5ldDZfb3B0aW9uX3NwYWNlCisrICAgICAgICAgaW5ldDZfb3B0X25leHQKKysgICAgICAgICBpbmV0Nl9vcHRfc2V0X3ZhbAorKyAgICAgICAgIGluZXQ2X3J0aF9hZGQKKysgICAgICAgICBpbmV0Nl9ydGhfZ2V0YWRkcgorKyAgICAgICAgIGluZXQ2X3J0aF9pbml0CisrICAgICAgICAgaW5ldDZfcnRoX3JldmVyc2UKKysgICAgICAgICBpbmV0Nl9ydGhfc2VnbWVudHMKKysgICAgICAgICBpbmV0Nl9ydGhfc3BhY2UKKysKKytjb25maWcgRUdMSUJDX0JBQ0tUUkFDRQorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgcHJvZHVjaW5nIGJhY2t0cmFjZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHByb2R1Y2luZyBhIGxpc3Qgb2YKKysgICAgICAgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUgaW4gYSB0aHJlYWQsIGZyb20KKysgICAgICAgd2l0aGluIHRoZSB0aHJlYWQgaXRzZWxmLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvZnRlbiB1c2VkCisrICAgICAgIHdpdGhpbiBzaWduYWwgaGFuZGxlcnMsIHRvIHByb2R1Y2UgZGlhZ25vc3RpYyBvdXRwdXQuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGJhY2t0cmFjZQorKyAgICAgICAgIGJhY2t0cmFjZV9zeW1ib2xzCisrICAgICAgICAgYmFja3RyYWNlX3N5bWJvbHNfZmQKKysKKytjb25maWcgRUdMSUJDX0JJR19NQUNST1MKKysgICBib29sICJVc2UgZXh0ZW5zaXZlIGlubGluZSBjb2RlIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgc3BlY2lmaWVzIHdoZXRoZXIgY2VydGFpbiBwaWVjZXMgb2YgY29kZQorKyAgICAgICBzaG91bGQgYmUgaW5saW5lZCB0byBhY2hpZXZlIG1heGltdW0gc3BlZWQuICBJZiB0aGlzIG9wdGlvbgorKyAgICAgICBncm91cCBpcyBub3Qgc2VsZWN0ZWQsIGZ1bmN0aW9uIGNhbGxzIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLAorKyAgICAgICBoZW5jZSByZWR1Y2luZyB0aGUgbGlicmFyeSBmb290cHJpbnQuCisrCisrY29uZmlnIEVHTElCQ19CU0QKKysgICBib29sICJCU0Qtc3BlY2lmaWMgZnVuY3Rpb25zLCBhbmQgdGhlaXIgY29tcGF0aWJpbGl0eSBzdHVicyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBCU0Qga2VybmVscy4KKysgICAgICAgQSBudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGhhdmUgc3R1YiB2ZXJzaW9ucyB0aGF0IGFyZSBhbHNvCisrICAgICAgIGluY2x1ZGVkIGluIGxpYnJhcmllcyBidWlsdCBmb3Igbm9uLUJTRCBzeXN0ZW1zIGZvcgorKyAgICAgICBjb21wYXRpYmlsaXR5LgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBjaGZsYWdzCisrICAgICAgICAgZmNoZmxhZ3MKKysgICAgICAgICBsY2htb2QKKysgICAgICAgICByZXZva2UKKysgICAgICAgICBzZXRsb2dpbgorKworK2NvbmZpZyBFR0xJQkNfQ1hYX1RFU1RTCisrICAgYm9vbCAiVGVzdHMgdGhhdCBsaW5rIGFnYWluc3QgdGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJ5LiIKKysgICBkZXBlbmRzIG9uIFBPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8gJiYgRUdMSUJDX0xJQk0KKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGRvZXMgbm90IGluY2x1ZGUgYW55IEMgbGlicmFyeSBmdW5jdGlvbnM7CisrICAgICAgIGluc3RlYWQsIGl0IGNvbnRyb2xzIHdoaWNoIEVHTElCQyB0ZXN0cyBhbiBvcmRpbmFyeSAnbWFrZQorKyAgICAgICB0ZXN0cycgcnVucy4gIFdpdGggdGhpcyBncm91cCBkaXNhYmxlZCwgdGVzdHMgdGhhdCB3b3VsZAorKyAgICAgICBub3JtYWxseSBsaW5rIGFnYWluc3QgdGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJ5IGFyZSBub3QKKysgICAgICAgcnVuLgorKworKyAgICAgICBUaGUgc3RhbmRhcmQgQysrIGxpYnJhcnkgZGVwZW5kcyBvbiB0aGUgbWF0aCBsaWJyYXJ5ICdsaWJtJyBhbmQKKysgICAgICAgdGhlIHdpZGUgY2hhcmFjdGVyIEkvTyBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gRUdMSUJDLiAgU28gdGhvc2UKKysgICAgICAgb3B0aW9uIGdyb3VwcyBtdXN0IGJlIGVuYWJsZWQgaWYgdGhpcyB0ZXN0IGlzIGVuYWJsZWQuCisrCisrY29uZmlnIEVHTElCQ19DQVRHRVRTCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgbWVzc2FnZSBjYXRhbG9ncyIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19MT0NBTEVfQ09ERQorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgbWVzc2FnZQorKyAgICAgICBjYXRhbG9nczogY2F0b3BlbiwgY2F0Y2xvc2UsIGFuZCBjYXRnZXRzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBkZXBlbmRzIG9uIHRoZSBFR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICAgb3B0aW9uIGdyb3VwLgorKworK2NvbmZpZyBFR0xJQkNfQ0hBUlNFVFMKKysgICBib29sICJpY29udi9nY29udiBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb24gbGlicmFyaWVzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgc3VwcG9ydCBmb3IgY2hhcmFjdGVyIHNldHMgb3RoZXIKKysgICAgICAgdGhhbiBBU0NJSSAoQU5TSV9YMy40LTE5NjgpIGFuZCBVbmljb2RlIGFuZCBJU08tMTA2NDYgaW4gdGhlaXIKKysgICAgICAgdmFyaW91cyBlbmNvZGluZ3MuICBUaGlzIGFmZmVjdHMgYm90aCB0aGUgY2hhcmFjdGVyIHNldHMKKysgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSB3aWRlIGFuZCBtdWx0aWJ5dGUgY2hhcmFjdGVyIGZ1bmN0aW9ucywgYW5kCisrICAgICAgIHRob3NlIHN1cHBvcnRlZCBieSB0aGUgJ2ljb252JyBmdW5jdGlvbnMuCisrCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIEVHTElCQyBzdXBwb3J0cyBvbmx5IHRoZQorKyAgICAgICBmb2xsb3dpbmcgY2hhcmFjdGVyIHNldHM6CisrCisrICAgICAgICAgIEFOU0lfWDMuNCAgICAgICAgIC0gQVNDSUkKKysgICAgICAgICAgQU5TSV9YMy40LTE5NjgKKysgICAgICAgICAgQU5TSV9YMy40LTE5ODYKKysgICAgICAgICAgQVNDSUkKKysgICAgICAgICAgQ1AzNjcKKysgICAgICAgICAgQ1NBU0NJSQorKyAgICAgICAgICBJQk0zNjcKKysgICAgICAgICAgSVNPLUlSLTYKKysgICAgICAgICAgSVNPNjQ2LVVTCisrICAgICAgICAgIElTT182NDYuSVJWOjE5OTEKKysgICAgICAgICAgT1NGMDAwMTAwMjAKKysgICAgICAgICAgVVMKKysgICAgICAgICAgVVMtQVNDSUkKKysKKysgICAgICAgICAgMTA2NDYtMToxOTkzICAgICAgLSBJU08gMTA2NDYsIGluIGJpZy1lbmRpYW4gVUNTNCBmb3JtCisrICAgICAgICAgIDEwNjQ2LTE6MTk5My9VQ1M0CisrICAgICAgICAgIENTVUNTNAorKyAgICAgICAgICBJU08tMTA2NDYKKysgICAgICAgICAgSVNPLTEwNjQ2L1VDUzQKKysgICAgICAgICAgT1NGMDAwMTAxMDQKKysgICAgICAgICAgT1NGMDAwMTAxMDUKKysgICAgICAgICAgT1NGMDAwMTAxMDYKKysgICAgICAgICAgVUNTLTQKKysgICAgICAgICAgVUNTLTRCRQorKyAgICAgICAgICBVQ1M0CisrCisrICAgICAgICAgIFVDUy00TEUgICAgICAgICAgIC0gSVNPIDEwNjQ2LCBpbiBsaXR0bGUtZW5kaWFuIFVDUzQgZm9ybQorKworKyAgICAgICAgICBJU08tMTA2NDYvVVRGLTggICAtIElTTyAxMDY0NiwgaW4gVVRGLTggZm9ybQorKyAgICAgICAgICBJU08tMTA2NDYvVVRGOAorKyAgICAgICAgICBJU08tSVItMTkzCisrICAgICAgICAgIE9TRjA1MDEwMDAxCisrICAgICAgICAgIFVURi04CisrICAgICAgICAgIFVURjgKKysKKysgICAgICAgICAgSVNPLTEwNjQ2L1VDUzIgICAgLSBJU08gMTA2NDYsIGluIHRhcmdldC1lbmRpYW4gVUNTMiBmb3JtCisrICAgICAgICAgIE9TRjAwMDEwMTAwCisrICAgICAgICAgIE9TRjAwMDEwMTAxCisrICAgICAgICAgIE9TRjAwMDEwMTAyCisrICAgICAgICAgIFVDUy0yCisrICAgICAgICAgIFVDUzIKKysKKysgICAgICAgICAgVUNTLTJCRSAgICAgICAgICAgLSBJU08gMTA2NDYsIGluIGJpZy1lbmRpYW4gVUNTMiBmb3JtCisrICAgICAgICAgIFVOSUNPREVCSUcKKysKKysgICAgICAgICAgVUNTLTJMRSAgICAgICAgICAgLSBJU08gMTA2NDYsIGluIGxpdHRsZS1lbmRpYW4gVUNTMiBmb3JtCisrICAgICAgICAgIFVOSUNPREVMSVRUTEUKKysKKysgICAgICAgICAgV0NIQVJfVCAgICAgICAgICAgLSBFR0xJQkMncyBpbnRlcm5hbCBmb3JtICh0YXJnZXQtZW5kaWFuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBJU08gMTA2NDYpCisrCisrY29uZmlnIEVHTElCQ19DUllQVAorKyAgIGJvb2wgIkVuY3J5cHRpb24gbGlicmFyeSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGliY3J5cHQnIGxpYnJhcnkgd2hpY2gKKysgICAgICAgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBvbmUtd2F5IGVuY3J5cHRpb24uICBTdXBwb3J0ZWQKKysgICAgICAgZW5jcnlwdGlvbiBhbGdvcml0aG1zIGluY2x1ZGUgTUQ1LCBTSEEtMjU2LCBTSEEtNTEyIGFuZCBERVMuCisrCisrY29uZmlnIEVHTElCQ19DUllQVF9VRkMKKysgICBib29sICJVbHRyYSBmYXN0IGBjcnlwdCcgaW1wbGVtZW50YXRpb24iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfQ1JZUFQKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIHByb3ZpZGVzIHVsdHJhIGZhc3QgREVTLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mCisrICAgICAgIHRoZSBgY3J5cHQnIGZ1bmN0aW9uLiAgV2hlbiB0aGlzIG9wdGlvbiBncm91cCBpcyBkaXNhYmxlZCwKKysgICAgICAgKGEpIHRoZSBsaWJyYXJ5IHdpbGwgbm90IHByb3ZpZGUgdGhlIHNldGtleVtfcl0gYW5kIGVuY3J5cHRbX3JdCisrICAgICAgIGZ1bmN0aW9ucyBhbmQgKGIpIHRoZSBjcnlwdFtfcl0gZnVuY3Rpb24gd2lsbCByZXR1cm4gTlVMTCBhbmQgc2V0IHRoZQorKyAgICAgICBlcnJubyB0byBFTk9TWVMgaWYgL3NhbHQvIHBhc3NlZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGVpdGhlciBNRDUsCisrICAgICAgIFNIQS0yNTYgb3IgU0hBLTUxMiBhbGdvcml0aG0uCisrCisrY29uZmlnIEVHTElCQ19EQl9BTElBU0VTCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdGhlIG1haWwgYWxpYXNlcyBkYXRhYmFzZSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZHVlcyBmdW5jdGlvbnMgZm9yIGxvb2tpbmcgdXAgbWFpbAorKyAgICAgICBhbGlhc2VzIGluICcvZXRjL2FsaWFzZXMnIG9yIHVzaW5nIG5zc3dpdGNoLiAgSXQgaW5jbHVkZXMgdGhlCisrICAgICAgIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kYWxpYXNlbnQKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZQorKyAgICAgICAgIGdldGFsaWFzYnluYW1lX3IKKysgICAgICAgICBnZXRhbGlhc2VudAorKyAgICAgICAgIGdldGFsaWFzZW50X3IKKysgICAgICAgICBzZXRhbGlhc2VudAorKworKyAgICAgICBXaGVuIHRoaXMgb3B0aW9uIGdyb3VwIGlzIGRpc2FibGVkLCB0aGUgTlNTIHNlcnZpY2UgbGlicmFyaWVzCisrICAgICAgIGFsc28gbGFjayBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGVpciBtYWlsIGFsaWFzIHRhYmxlcy4KKysKKytjb25maWcgRUdMSUJDX0VOVloKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGVudnotc3R5bGUgZW52aXJvbm1lbnQgdmVjdG9ycy4iCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBjb250YWlucyBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGFuZCBvcGVyYXRpbmcKKysgICAgICAgb24gZW52eiB2ZWN0b3JzLiAgQW4gImVudnogdmVjdG9yIiBpcyBhIHZlY3RvciBvZiBzdHJpbmdzIGluIGEKKysgICAgICAgY29udGlndW91cyBibG9jayBvZiBtZW1vcnksIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBhIG5hbWUtdmFsdWUKKysgICAgICAgcGFpciwgYW5kIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgZnJvbSB0aGVpciBuZWlnaGJvcnMgYnkgbnVsbAorKyAgICAgICBjaGFyYWN0ZXJzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIGVudnpfYWRkICAgICAgICBlbnZ6X21lcmdlCisrICAgICAgICBlbnZ6X2VudHJ5ICAgICAgZW52el9yZW1vdmUKKysgICAgICAgIGVudnpfZ2V0ICAgICAgICBlbnZ6X3N0cmlwCisrCisrY29uZmlnIEVHTElCQ19GQ1ZUCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgdG8gc3RyaW5ncyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgY29udmVydGluZworKyAgICAgICBmbG9hdGluZy1wb2ludCBudW1iZXJzIHRvIHN0cmluZ3MuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVjdnQgICAgICAgICAgIHFlY3Z0CisrCSBlY3Z0X3IJCXFlY3Z0X3IKKysgICAgICAgICBmY3Z0CQlxZmN2dAorKwkgZmN2dF9yCQlxZmN2dF9yCisrICAgICAgICAgZ2N2dAkJcWdjdnQKKysKKytjb25maWcgRUdMSUJDX0ZNVE1TRworKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgZm9ybWF0dGluZyBtZXNzYWdlcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGFkZHNldmVyaXR5ICAgIGZtdG1zZworKworK2NvbmZpZyBFR0xJQkNfRlNUQUIKKysgICBib29sICJBY2Nlc3MgZnVuY3Rpb25zIGZvciAnZnN0YWInIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIHRoZSBtb3VudAorKyAgICAgICBwb2ludCBzcGVjaWZpY2F0aW9uIHRhYmxlLCAnL2V0Yy9mc3RhYicuICBUaGVzZSBmdW5jdGlvbnMgYXJlCisrICAgICAgIG5vdCBpbmNsdWRlZCBpbiB0aGUgUE9TSVggc3RhbmRhcmQsIHdoaWNoIHByb3ZpZGVzIHRoZQorKyAgICAgICAnZ2V0bW50ZW50JyBmYW1pbHkgb2YgZnVuY3Rpb25zIGluc3RlYWQuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZGZzZW50ICAgICAgIGdldGZzc3BlYworKyAgICAgICAgIGdldGZzZW50ICAgICAgIHNldGZzZW50CisrICAgICAgICAgZ2V0ZnNmaWxlCisrCisrY29uZmlnIEVHTElCQ19GVFJBVkVSU0UKKysgICBib29sICJGdW5jdGlvbnMgZm9yIHRyYXZlcnNpbmcgZmlsZSBoaWVyYXJjaGllcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgdHJhdmVyc2luZyBmaWxlCisrICAgICAgIFVOSVggZmlsZSBoaWVyYWNoaWVzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBmdHNfb3BlbiAgICAgICBmdHcKKysJIGZ0c19yZWFkCW5mdHcKKysgICAgICAgICBmdHNfY2hpbGRyZW4JZnR3NjQKKysJIGZ0c19zZXQJbmZ0dzY0CisrICAgICAgICAgZnRzX2Nsb3NlCisrCisrY29uZmlnIEVHTElCQ19HRVRMT0dJTgorKyAgIGJvb2wgIlRoZSBnZXRsb2dpbiBmdW5jdGlvbiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19VVE1QCisrICAgaGVscAorKyAgICAgICBUaGlzIGZ1bmN0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSAnZ2V0bG9naW4nIGFuZCAnZ2V0bG9naW5fcicKKysgICAgICAgZnVuY3Rpb25zLCB3aGljaCByZXR1cm4gdGhlIHVzZXIgbmFtZSBhc3NvY2lhdGVkIGJ5IHRoZSBsb2dpbgorKyAgICAgICBhY3Rpdml0eSB3aXRoIHRoZSBjdXJyZW50IHByb2Nlc3MncyBjb250cm9sbGluZyB0ZXJtaW5hbC4KKysKKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgdGhlICdnbG9iJyBmdW5jdGlvbiB3aWxsIG5vdAorKyAgICAgICBmYWxsIGJhY2sgb24gJ2dldGxvZ2luJyB0byBmaW5kIHRoZSB1c2VyJ3MgbG9naW4gbmFtZSBmb3IgdGlsZGUKKysgICAgICAgZXhwYW5zaW9uIHdoZW4gdGhlICdIT01FJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LgorKworK2NvbmZpZyBFR0xJQkNfSUROCisrICAgYm9vbCAiSW50ZXJuYXRpb25hbCBkb21haW4gbmFtZXMgc3VwcG9ydCIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGliY2lkbicgbGlicmFyeSB3aGljaAorKyAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcy4KKysKKytjb25maWcgRUdMSUJDX0lORVQKKysgICBib29sICJOZXR3b3JraW5nIHN1cHBvcnQiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBuZXR3b3JraW5nLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQKKysgICAgICAgZGF0YS4gIFdpdGggRUdMSUJDX0lORVQgZGlzYWJsZWQsIHRoZSBFR0xJQkMKKysgICAgICAgaW5zdGFsbGF0aW9uIGFuZCBBUEkgY2hhbmdlcyBhcyBmb2xsb3dzOgorKworKyAgICAgICAtIFRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGFyZSBub3QgaW5zdGFsbGVkOgorKworKyAgICAgICAgIGxpYm5zbAorKyAgICAgICAgIGxpYm5zc19jb21wYXQKKysgICAgICAgICBsaWJuc3NfZG5zCisrICAgICAgICAgbGlibnNzX2hlc2lvZAorKyAgICAgICAgIGxpYm5zc19uaXMKKysgICAgICAgICBsaWJuc3NfbmlzcGx1cworKyAgICAgICAgIGxpYnJlc29sdgorKworKyAgICAgICAtIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgYXJlIG9taXR0ZWQgZnJvbSBsaWJjOgorKworKyAgICAgICAgIGF1dGhkZXNfY3JlYXRlICAgICAgICAgICBoc3RyZXJyb3IgICAgICAgICAgICAgIHN2Y19mZHNldAorKyAgICAgICAgIGF1dGhkZXNfZ2V0dWNyZWQgICAgICAgICBodG9ubCAgICAgICAgICAgICAgICAgIHN2Y19nZXRyZXEKKysgICAgICAgICBhdXRoZGVzX3BrX2NyZWF0ZSAgICAgICAgaHRvbnMgICAgICAgICAgICAgICAgICBzdmNfZ2V0cmVxX2NvbW1vbgorKyAgICAgICAgIGF1dGhub25lX2NyZWF0ZSAgICAgICAgICBpZl9mcmVlbmFtZWluZGV4ICAgICAgIHN2Y19nZXRyZXFfcG9sbAorKyAgICAgICAgIGF1dGh1bml4X2NyZWF0ZSAgICAgICAgICBpZl9pbmRleHRvbmFtZSAgICAgICAgIHN2Y19nZXRyZXFzZXQKKysgICAgICAgICBhdXRodW5peF9jcmVhdGVfZGVmYXVsdCAgaWZfbmFtZWluZGV4ICAgICAgICAgICBzdmNfbWF4X3BvbGxmZAorKyAgICAgICAgIGJpbmRyZXN2cG9ydCAgICAgICAgICAgICBpZl9uYW1ldG9pbmRleCAgICAgICAgIHN2Y19wb2xsZmQKKysgICAgICAgICBjYWxscnBjICAgICAgICAgICAgICAgICAgaW42YWRkcl9hbnkgICAgICAgICAgICBzdmNyYXdfY3JlYXRlCisrICAgICAgICAgY2JjX2NyeXB0ICAgICAgICAgICAgICAgIGluNmFkZHJfbG9vcGJhY2sgICAgICAgc3ZjX3JlZ2lzdGVyCisrICAgICAgICAgY2xudF9icm9hZGNhc3QgICAgICAgICAgIGluZXQ2X29wdF9hcHBlbmQgICAgICAgc3ZjX3J1bgorKyAgICAgICAgIGNsbnRfY3JlYXRlICAgICAgICAgICAgICBpbmV0Nl9vcHRfZmluZCAgICAgICAgIHN2Y19zZW5kcmVwbHkKKysgICAgICAgICBjbG50X3BjcmVhdGVlcnJvciAgICAgICAgaW5ldDZfb3B0X2ZpbmlzaCAgICAgICBzdmN0Y3BfY3JlYXRlCisrICAgICAgICAgY2xudF9wZXJybm8gICAgICAgICAgICAgIGluZXQ2X29wdF9nZXRfdmFsICAgICAgc3ZjdWRwX2J1ZmNyZWF0ZQorKyAgICAgICAgIGNsbnRfcGVycm9yICAgICAgICAgICAgICBpbmV0Nl9vcHRfaW5pdCAgICAgICAgIHN2Y3VkcF9jcmVhdGUKKysgICAgICAgICBjbG50cmF3X2NyZWF0ZSAgICAgICAgICAgaW5ldDZfb3B0aW9uX2FsbG9jICAgICBzdmN1ZHBfZW5hYmxlY2FjaGUKKysgICAgICAgICBjbG50X3NwY3JlYXRlZXJyb3IgICAgICAgaW5ldDZfb3B0aW9uX2FwcGVuZCAgICBzdmN1bml4X2NyZWF0ZQorKyAgICAgICAgIGNsbnRfc3BlcnJubyAgICAgICAgICAgICBpbmV0Nl9vcHRpb25fZmluZCAgICAgIHN2Y3VuaXhmZF9jcmVhdGUKKysgICAgICAgICBjbG50X3NwZXJyb3IgICAgICAgICAgICAgaW5ldDZfb3B0aW9uX2luaXQgICAgICBzdmNfdW5yZWdpc3RlcgorKyAgICAgICAgIGNsbnR0Y3BfY3JlYXRlICAgICAgICAgICBpbmV0Nl9vcHRpb25fbmV4dCAgICAgIHVzZXIybmV0bmFtZQorKyAgICAgICAgIGNsbnR1ZHBfYnVmY3JlYXRlICAgICAgICBpbmV0Nl9vcHRpb25fc3BhY2UgICAgIHhkZWNyeXB0CisrICAgICAgICAgY2xudHVkcF9jcmVhdGUgICAgICAgICAgIGluZXQ2X29wdF9uZXh0ICAgICAgICAgeGRyX2FjY2VwdGVkX3JlcGx5CisrICAgICAgICAgY2xudHVuaXhfY3JlYXRlICAgICAgICAgIGluZXQ2X29wdF9zZXRfdmFsICAgICAgeGRyX2FycmF5CisrICAgICAgICAgZGVzX3NldHBhcml0eSAgICAgICAgICAgIGluZXQ2X3J0aF9hZGQgICAgICAgICAgeGRyX2F1dGhkZXNfY3JlZAorKyAgICAgICAgIGVjYl9jcnlwdCAgICAgICAgICAgICAgICBpbmV0Nl9ydGhfZ2V0YWRkciAgICAgIHhkcl9hdXRoZGVzX3ZlcmYKKysgICAgICAgICBlbmRhbGlhc2VudCAgICAgICAgICAgICAgaW5ldDZfcnRoX2luaXQgICAgICAgICB4ZHJfYXV0aHVuaXhfcGFybXMKKysgICAgICAgICBlbmRob3N0ZW50ICAgICAgICAgICAgICAgaW5ldDZfcnRoX3JldmVyc2UgICAgICB4ZHJfYm9vbAorKyAgICAgICAgIGVuZG5ldGVudCAgICAgICAgICAgICAgICBpbmV0Nl9ydGhfc2VnbWVudHMgICAgIHhkcl9ieXRlcworKyAgICAgICAgIGVuZG5ldGdyZW50ICAgICAgICAgICAgICBpbmV0Nl9ydGhfc3BhY2UgICAgICAgIHhkcl9jYWxsaGRyCisrICAgICAgICAgZW5kcHJvdG9lbnQgICAgICAgICAgICAgIGluZXRfYWRkciAgICAgICAgICAgICAgeGRyX2NhbGxtc2cKKysgICAgICAgICBlbmRycGNlbnQgICAgICAgICAgICAgICAgaW5ldF9hdG9uICAgICAgICAgICAgICB4ZHJfY2hhcgorKyAgICAgICAgIGVuZHNlcnZlbnQgICAgICAgICAgICAgICBpbmV0X2xuYW9mICAgICAgICAgICAgIHhkcl9jcnlwdGtleWFyZworKyAgICAgICAgIGV0aGVyX2F0b24gICAgICAgICAgICAgICBpbmV0X21ha2VhZGRyICAgICAgICAgIHhkcl9jcnlwdGtleWFyZzIKKysgICAgICAgICBldGhlcl9hdG9uX3IgICAgICAgICAgICAgaW5ldF9uZXRvZiAgICAgICAgICAgICB4ZHJfY3J5cHRrZXlyZXMKKysgICAgICAgICBldGhlcl9ob3N0dG9uICAgICAgICAgICAgaW5ldF9uZXR3b3JrICAgICAgICAgICB4ZHJfZGVzX2Jsb2NrCisrICAgICAgICAgZXRoZXJfbGluZSAgICAgICAgICAgICAgIGluZXRfbnNhcF9hZGRyICAgICAgICAgeGRyX2RvdWJsZQorKyAgICAgICAgIGV0aGVyX250b2EgICAgICAgICAgICAgICBpbmV0X25zYXBfbnRvYSAgICAgICAgIHhkcl9lbnVtCisrICAgICAgICAgZXRoZXJfbnRvYV9yICAgICAgICAgICAgIGluZXRfbnRvYSAgICAgICAgICAgICAgeGRyX2Zsb2F0CisrICAgICAgICAgZXRoZXJfbnRvaG9zdCAgICAgICAgICAgIGluZXRfbnRvcCAgICAgICAgICAgICAgeGRyX2ZyZWUKKysgICAgICAgICBmcmVlYWRkcmluZm8gICAgICAgICAgICAgaW5ldF9wdG9uICAgICAgICAgICAgICB4ZHJfZ2V0Y3JlZHJlcworKyAgICAgICAgIGZyZWVpZmFkZHJzICAgICAgICAgICAgICBpbm5ldGdyICAgICAgICAgICAgICAgIHhkcl9oeXBlcgorKyAgICAgICAgIGdhaV9zdHJlcnJvciAgICAgICAgICAgICBpcnVzZXJvayAgICAgICAgICAgICAgIHhkcl9pbnQKKysgICAgICAgICBnZXRhZGRyaW5mbyAgICAgICAgICAgICAgaXJ1c2Vyb2tfYWYgICAgICAgICAgICB4ZHJfaW50MTZfdAorKyAgICAgICAgIGdldGFsaWFzYnluYW1lICAgICAgICAgICBrZXlfZGVjcnlwdHNlc3Npb24gICAgIHhkcl9pbnQzMl90CisrICAgICAgICAgZ2V0YWxpYXNieW5hbWVfciAgICAgICAgIGtleV9kZWNyeXB0c2Vzc2lvbl9wayAgeGRyX2ludDY0X3QKKysgICAgICAgICBnZXRhbGlhc2VudCAgICAgICAgICAgICAga2V5X2VuY3J5cHRzZXNzaW9uICAgICB4ZHJfaW50OF90CisrICAgICAgICAgZ2V0YWxpYXNlbnRfciAgICAgICAgICAgIGtleV9lbmNyeXB0c2Vzc2lvbl9wayAgeGRyX2tleWJ1ZgorKyAgICAgICAgIGdldGhvc3RieWFkZHIgICAgICAgICAgICBrZXlfZ2VuZGVzICAgICAgICAgICAgIHhkcl9rZXlfbmV0c3RhcmcKKysgICAgICAgICBnZXRob3N0YnlhZGRyX3IgICAgICAgICAga2V5X2dldF9jb252ICAgICAgICAgICB4ZHJfa2V5X25ldHN0cmVzCisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZSAgICAgICAgICAgIGtleV9zZWNyZXRrZXlfaXNfc2V0ICAgeGRyX2tleXN0YXR1cworKyAgICAgICAgIGdldGhvc3RieW5hbWUyICAgICAgICAgICBrZXlfc2V0bmV0ICAgICAgICAgICAgIHhkcl9sb25nCisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZTJfciAgICAgICAgIGtleV9zZXRzZWNyZXQgICAgICAgICAgeGRyX2xvbmdsb25nX3QKKysgICAgICAgICBnZXRob3N0YnluYW1lX3IgICAgICAgICAgbmV0bmFtZTJob3N0ICAgICAgICAgICB4ZHJtZW1fY3JlYXRlCisrICAgICAgICAgZ2V0aG9zdGVudCAgICAgICAgICAgICAgIG5ldG5hbWUydXNlciAgICAgICAgICAgeGRyX25ldG5hbWVzdHIKKysgICAgICAgICBnZXRob3N0ZW50X3IgICAgICAgICAgICAgbnRvaGwgICAgICAgICAgICAgICAgICB4ZHJfbmV0b2JqCisrICAgICAgICAgZ2V0aWZhZGRycyAgICAgICAgICAgICAgIG50b2hzICAgICAgICAgICAgICAgICAgeGRyX29wYXF1ZQorKyAgICAgICAgIGdldGlwdjRzb3VyY2VmaWx0ZXIgICAgICBwYXNzd2QyZGVzICAgICAgICAgICAgIHhkcl9vcGFxdWVfYXV0aAorKyAgICAgICAgIGdldF9teWFkZHJlc3MgICAgICAgICAgICBwbWFwX2dldG1hcHMgICAgICAgICAgIHhkcl9wbWFwCisrICAgICAgICAgZ2V0bmFtZWluZm8gICAgICAgICAgICAgIHBtYXBfZ2V0cG9ydCAgICAgICAgICAgeGRyX3BtYXBsaXN0CisrICAgICAgICAgZ2V0bmV0YnlhZGRyICAgICAgICAgICAgIHBtYXBfcm10Y2FsbCAgICAgICAgICAgeGRyX3BvaW50ZXIKKysgICAgICAgICBnZXRuZXRieWFkZHJfciAgICAgICAgICAgcG1hcF9zZXQgICAgICAgICAgICAgICB4ZHJfcXVhZF90CisrICAgICAgICAgZ2V0bmV0YnluYW1lICAgICAgICAgICAgIHBtYXBfdW5zZXQgICAgICAgICAgICAgeGRycmVjX2NyZWF0ZQorKyAgICAgICAgIGdldG5ldGJ5bmFtZV9yICAgICAgICAgICByY21kICAgICAgICAgICAgICAgICAgIHhkcnJlY19lbmRvZnJlY29yZAorKyAgICAgICAgIGdldG5ldGVudCAgICAgICAgICAgICAgICByY21kX2FmICAgICAgICAgICAgICAgIHhkcnJlY19lb2YKKysgICAgICAgICBnZXRuZXRlbnRfciAgICAgICAgICAgICAgcmVnaXN0ZXJycGMgICAgICAgICAgICB4ZHJyZWNfc2tpcHJlY29yZAorKyAgICAgICAgIGdldG5ldGdyZW50ICAgICAgICAgICAgICByZXNfaW5pdCAgICAgICAgICAgICAgIHhkcl9yZWZlcmVuY2UKKysgICAgICAgICBnZXRuZXRncmVudF9yICAgICAgICAgICAgcmV4ZWMgICAgICAgICAgICAgICAgICB4ZHJfcmVqZWN0ZWRfcmVwbHkKKysgICAgICAgICBnZXRuZXRuYW1lICAgICAgICAgICAgICAgcmV4ZWNfYWYgICAgICAgICAgICAgICB4ZHJfcmVwbHltc2cKKysgICAgICAgICBnZXRwcm90b2J5bmFtZSAgICAgICAgICAgcmV4ZWNvcHRpb25zICAgICAgICAgICB4ZHJfcm10Y2FsbF9hcmdzCisrICAgICAgICAgZ2V0cHJvdG9ieW5hbWVfciAgICAgICAgIHJwY19jcmVhdGVlcnIgICAgICAgICAgeGRyX3JtdGNhbGxyZXMKKysgICAgICAgICBnZXRwcm90b2J5bnVtYmVyICAgICAgICAgcnJlc3Zwb3J0ICAgICAgICAgICAgICB4ZHJfc2hvcnQKKysgICAgICAgICBnZXRwcm90b2J5bnVtYmVyX3IgICAgICAgcnJlc3Zwb3J0X2FmICAgICAgICAgICB4ZHJfc2l6ZW9mCisrICAgICAgICAgZ2V0cHJvdG9lbnQgICAgICAgICAgICAgIHJ0aW1lICAgICAgICAgICAgICAgICAgeGRyc3RkaW9fY3JlYXRlCisrICAgICAgICAgZ2V0cHJvdG9lbnRfciAgICAgICAgICAgIHJ1c2Vyb2sgICAgICAgICAgICAgICAgeGRyX3N0cmluZworKyAgICAgICAgIGdldHB1YmxpY2tleSAgICAgICAgICAgICBydXNlcm9rX2FmICAgICAgICAgICAgIHhkcl91X2NoYXIKKysgICAgICAgICBnZXRycGNieW5hbWUgICAgICAgICAgICAgcnVzZXJwYXNzICAgICAgICAgICAgICB4ZHJfdV9oeXBlcgorKyAgICAgICAgIGdldHJwY2J5bmFtZV9yICAgICAgICAgICBzZXRhbGlhc2VudCAgICAgICAgICAgIHhkcl91X2ludAorKyAgICAgICAgIGdldHJwY2J5bnVtYmVyICAgICAgICAgICBzZXRob3N0ZW50ICAgICAgICAgICAgIHhkcl91aW50MTZfdAorKyAgICAgICAgIGdldHJwY2J5bnVtYmVyX3IgICAgICAgICBzZXRpcHY0c291cmNlZmlsdGVyICAgIHhkcl91aW50MzJfdAorKyAgICAgICAgIGdldHJwY2VudCAgICAgICAgICAgICAgICBzZXRuZXRlbnQgICAgICAgICAgICAgIHhkcl91aW50NjRfdAorKyAgICAgICAgIGdldHJwY2VudF9yICAgICAgICAgICAgICBzZXRuZXRncmVudCAgICAgICAgICAgIHhkcl91aW50OF90CisrICAgICAgICAgZ2V0cnBjcG9ydCAgICAgICAgICAgICAgIHNldHByb3RvZW50ICAgICAgICAgICAgeGRyX3VfbG9uZworKyAgICAgICAgIGdldHNlY3JldGtleSAgICAgICAgICAgICBzZXRycGNlbnQgICAgICAgICAgICAgIHhkcl91X2xvbmdsb25nX3QKKysgICAgICAgICBnZXRzZXJ2YnluYW1lICAgICAgICAgICAgc2V0c2VydmVudCAgICAgICAgICAgICB4ZHJfdW5pb24KKysgICAgICAgICBnZXRzZXJ2YnluYW1lX3IgICAgICAgICAgc2V0c291cmNlZmlsdGVyICAgICAgICB4ZHJfdW5peGNyZWQKKysgICAgICAgICBnZXRzZXJ2Ynlwb3J0ICAgICAgICAgICAgc3ZjYXV0aGRlc19zdGF0cyAgICAgICB4ZHJfdV9xdWFkX3QKKysgICAgICAgICBnZXRzZXJ2Ynlwb3J0X3IgICAgICAgICAgc3ZjZXJyX2F1dGggICAgICAgICAgICB4ZHJfdV9zaG9ydAorKyAgICAgICAgIGdldHNlcnZlbnQgICAgICAgICAgICAgICBzdmNlcnJfZGVjb2RlICAgICAgICAgIHhkcl92ZWN0b3IKKysgICAgICAgICBnZXRzZXJ2ZW50X3IgICAgICAgICAgICAgc3ZjZXJyX25vcHJvYyAgICAgICAgICB4ZHJfdm9pZAorKyAgICAgICAgIGdldHNvdXJjZWZpbHRlciAgICAgICAgICBzdmNlcnJfbm9wcm9nICAgICAgICAgIHhkcl93cmFwc3RyaW5nCisrICAgICAgICAgaF9lcnJsaXN0ICAgICAgICAgICAgICAgIHN2Y2Vycl9wcm9ndmVycyAgICAgICAgeGVuY3J5cHQKKysgICAgICAgICBoX2Vycm5vICAgICAgICAgICAgICAgICAgc3ZjZXJyX3N5c3RlbWVyciAgICAgICB4cHJ0X3JlZ2lzdGVyCisrICAgICAgICAgaGVycm9yICAgICAgICAgICAgICAgICAgIHN2Y2Vycl93ZWFrYXV0aCAgICAgICAgeHBydF91bnJlZ2lzdGVyCisrICAgICAgICAgaF9uZXJyICAgICAgICAgICAgICAgICAgIHN2Y19leGl0CisrICAgICAgICAgaG9zdDJuZXRuYW1lICAgICAgICAgICAgIHN2Y2ZkX2NyZWF0ZQorKworKyAgICAgICAtIFRoZSBycGNnZW4sIG5zY2QsIGFuZCBycGNpbmZvIGNvbW1hbmRzIGFyZSBub3QgaW5zdGFsbGVkLgorKworKyAgICAgICAtIFRoZSAncnBjJyBmaWxlIChhIHRleHQgZmlsZSBsaXN0aW5nIFJQQyBzZXJ2aWNlcykgaXMgbm90IGluc3RhbGxlZC4KKysKKysgICAgICAgU29ja2V0LXJlbGF0ZWQgc3lzdGVtIGNhbGxzIGRvIG5vdCBmYWxsIGluIHRoaXMgb3B0aW9uIGdyb3VwLAorKyAgICAgICBiZWNhdXNlIG1hbnkgYXJlIGFsc28gdXNlZCBmb3Igb3RoZXIgaW50ZXItcHJvY2VzcworKyAgICAgICBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbXMuICBGb3IgZXhhbXBsZSwgdGhlICdzeXNsb2cnIHJvdXRpbmVzCisrICAgICAgIHVzZSBVbml4LWRvbWFpbiBzb2NrZXRzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHN5c2xvZyBkYWVtb247CisrICAgICAgIHN5c2xvZyBpcyB2YWx1YWJsZSBpbiBub24tbmV0d29ya2VkIGNvbnRleHRzLgorKworK2NvbmZpZyBFR0xJQkNfSU5FVF9BTkwKKysgICBib29sICJBc3luY2hyb25vdXMgbmFtZSBsb29rdXAiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJhbmwnIGxpYnJhcnkgd2hpY2gKKysgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYXN5bmNocm9ub3VzIG5hbWUgbG9va3VwLgorKworK2NvbmZpZyBFR0xJQkNfTElCTQorKyAgIGJvb2wgImxpYm0gKG1hdGggbGlicmFyeSkiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgJ2xpYm0nIGxpYnJhcnksIGNvbnRhaW5pbmcKKysgICAgICAgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucy4gIElmIHRoaXMgb3B0aW9uIGdyb3VwIGlzIG9taXR0ZWQsIHRoZW4KKysgICAgICAgYW4gRUdMSUJDIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIHNoYXJlZCBvciB1bnNoYXJlZCB2ZXJzaW9ucworKyAgICAgICBvZiB0aGUgbWF0aCBsaWJyYXJ5LgorKworKyAgICAgICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCByZW1vdmUgYWxsIGZsb2F0aW5nLXBvaW50IHJlbGF0ZWQKKysgICAgICAgZnVuY3Rpb25hbGl0eSBmcm9tIEVHTElCQzsgZm9yIGV4YW1wbGUsICdwcmludGYnIGFuZCAnc2NhbmYnCisrICAgICAgIGNhbiBzdGlsbCBwcmludCBhbmQgcmVhZCBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2l0aCB0aGlzIG9wdGlvbgorKyAgICAgICBncm91cCBkaXNhYmxlZC4KKysKKysgICAgICAgTm90ZSB0aGF0IHRoZSBJU08gU3RhbmRhcmQgQysrIGxpYnJhcnkgJ2xpYnN0ZGMrKycgZGVwZW5kcyBvbgorKyAgICAgICBFR0xJQkMncyBtYXRoIGxpYnJhcnkgJ2xpYm0nLiAgSWYgeW91IGRpc2FibGUgdGhpcyBvcHRpb24KKysgICAgICAgZ3JvdXAsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGJ1aWxkICdsaWJzdGRjKysnIGFnYWluc3QgdGhlCisrICAgICAgIHJlc3VsdGluZyBFR0xJQkMgaW5zdGFsbGF0aW9uLgorKworK2NvbmZpZyBFR0xJQkNfTE9DQUxFUworKyAgIGJvb2wgIkxvY2FsZSBkZWZpbml0aW9ucyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGFsbCBsb2NhbGUgZGVmaW5pdGlvbnMgb3RoZXIgdGhhbgorKyAgICAgICB0aGF0IGZvciB0aGUgIkMiIGxvY2FsZS4gIElmIHRoaXMgb3B0aW9uIGdyb3VwIGlzIG9taXR0ZWQsIHRoZW4KKysgICAgICAgb25seSB0aGUgIkMiIGxvY2FsZSBpcyBzdXBwb3J0ZWQuCisrCisrCisrY29uZmlnIEVHTElCQ19MT0NBTEVfQ09ERQorKyAgIGJvb2wgIkxvY2FsZSBmdW5jdGlvbnMiCisrICAgZGVwZW5kcyBvbiBQT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBsb2NhbGUgc3VwcG9ydCBmdW5jdGlvbnMsIHByb2dyYW1zLAorKyAgICAgICBhbmQgbGlicmFyaWVzLiAgV2l0aCBFR0xJQkNfTE9DQUxFX0NPREUgZGlzYWJsZWQsCisrICAgICAgIEVHTElCQyBzdXBwb3J0cyBvbmx5IHRoZSAnQycgbG9jYWxlIChhbHNvIGtub3duIGFzICdQT1NJWCcpLAorKyAgICAgICBhbmQgaWdub3JlcyB0aGUgc2V0dGluZ3Mgb2YgdGhlICdMQU5HJyBhbmQgJ0xDXyonIGVudmlyb25tZW50CisrICAgICAgIHZhcmlhYmxlcy4KKysKKysgICAgICAgV2l0aCBFR0xJQkNfTE9DQUxFX0NPREUgZGlzYWJsZWQsIHRoZSBmb2xsb3dpbmcKKysgICAgICAgZnVuY3Rpb25zIGFyZSBvbWl0dGVkIGZyb20gbGliYzoKKysKKysgICAgICAgICBkdXBsb2NhbGUgICBsb2NhbGVjb252ICBubF9sYW5naW5mbyAgICBycG1hdGNoICBzdHJmbW9uX2wKKysgICAgICAgICBmcmVlbG9jYWxlICBuZXdsb2NhbGUgICBubF9sYW5naW5mb19sICBzdHJmbW9uICB1c2Vsb2NhbGUKKysKKysgICAgICAgRnVydGhlcm1vcmUsIG9ubHkgdGhlIExDX0NUWVBFIGFuZCBMQ19USU1FIGNhdGVnb3JpZXMgb2YgdGhlCisrICAgICAgIHN0YW5kYXJkICJDIiBsb2NhbGUgYXJlIGF2YWlsYWJsZS4KKysKKysgICAgICAgVGhlIEVHTElCQ19DQVRHRVRTIG9wdGlvbiBncm91cCBkZXBlbmRzIG9uIHRoaXMgb3B0aW9uIGdyb3VwLgorKworKworK2NvbmZpZyBFR0xJQkNfTUVNVVNBR0UKKysgICBib29sICJNZW1vcnkgcHJvZmlsaW5nIGxpYnJhcnkiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYm1lbXVzYWdlJyBsaWJyYXJ5IGFuZAorKyAgICAgICB0aGUgYG1lbXVzYWdlJyBhbmQgYG1lbXVzYWdlc3RhdCcgdXRpbGl0aWVzLgorKyAgICAgICBUaGVzZSBjb21wb25lbnRzIHByb3ZpZGUgbWVtb3J5IHByb2ZpbGluZyBmdW5jdGlvbnMuCisrCisrY29uZmlnIEVHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrICAgaW50ICJNZW1vcnkgcHJvZmlsaW5nIGxpYnJhcnkgYnVmZmVyIHNpemUiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfTUVNVVNBR0UKKysgICBkZWZhdWx0ICIzMjc2OCIKKysgICBoZWxwCisrICAgICAgIExpYm1lbXVzYWdlIGxpYnJhcnkgYnVmZmVycyB0aGUgcHJvZmlsaW5nIGRhdGEgaW4gbWVtb3J5CisrICAgICAgIGJlZm9yZSB3cml0aW5nIGl0IG91dCB0byBkaXNrLiAgQnkgZGVmYXVsdCwgdGhlIGxpYnJhcnkKKysgICAgICAgYWxsb2NhdGVzIDEuNU0gYnVmZmVyLCB3aGljaCBjYW4gYmUgc3Vic3RhbnRpYWwgZm9yIHNvbWUKKysgICAgICAgc3lzdGVtcy4gIEVHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFIG9wdGlvbgorKyAgICAgICBhbGxvd3MgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJ1ZmZlciBzaXplLiAgSXQgc3BlY2lmaWVzCisrICAgICAgIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgYnVmZmVyIHNob3VsZCBoYXZlLgorKyAgICAgICBPbiBtb3N0IGFyY2hpdGVjdHVyZXMgb25lIGJ1ZmZlciBlbnRyeSBhbW91bnRzIHRvIDQ4IGJ5dGVzLAorKyAgICAgICBzbyBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvIHRoZSB2YWx1ZSBvZiA1MTIgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YKKysgICAgICAgdGhlIG1lbW9yeSBidWZmZXIgdG8gMjRLLgorKworK2NvbmZpZyBFR0xJQkNfTklTCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgTklTLCBOSVMrLCBhbmQgdGhlIHNwZWNpYWwgJ2NvbXBhdCcgc2VydmljZXMuIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQgJiYgRUdMSUJDX1NVTlJQQworKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIE5JUywgTklTKywgYW5kICdjb21wYXQnIE5hbWUKKysgICAgICAgU2VydmljZSBTd2l0Y2ggc2VydmljZSBsaWJyYXJpZXMuICBXaGVuIGl0IGlzIGRpc2FibGVkLCB0aG9zZQorKyAgICAgICBzZXJ2aWNlcyBsaWJyYXJpZXMgYXJlIG5vdCBpbnN0YWxsZWQ7IHlvdSBzaG91bGQgcmVtb3ZlIGFueQorKyAgICAgICByZWZlcmVuY2VzIHRvIHRoZW0gZnJvbSB5b3VyICduc3N3aXRjaC5jb25mJyBmaWxlLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBkZXBlbmRzIG9uIHRoZSBFR0xJQkNfSU5FVCBvcHRpb24KKysgICAgICAgZ3JvdXA7IHlvdSBtdXN0IGVuYWJsZSB0aGF0IHRvIGVuYWJsZSB0aGlzIG9wdGlvbiBncm91cC4KKysKKytjb25maWcgRUdMSUJDX05TU1dJVENICisrICAgYm9vbCAiTmFtZSBzZXJ2aWNlIHN3aXRjaCAobnNzd2l0Y2gpIHN1cHBvcnQiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBzdXBwb3J0IGZvciB0aGUgJ25zc3dpdGNoJyBmYWNpbGl0eS4KKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBlbmFibGVkLCBhbGwgRUdMSUJDIGZ1bmN0aW9ucyBmb3IKKysgICAgICAgYWNjZXNzaW5nIHZhcmlvdXMgc3lzdGVtIGRhdGFiYXNlcyAocGFzc3dvcmRzIGFuZCBncm91cHM7CisrICAgICAgIG5ldHdvcmtpbmc7IGFsaWFzZXM7IHB1YmxpYyBrZXlzOyBhbmQgc28gb24pIGNvbnN1bHQgdGhlCisrICAgICAgICcvZXRjL25zc3dpdGNoLmNvbmYnIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBkZWNpZGUgaG93IHRvIGhhbmRsZQorKyAgICAgICBxdWVyaWVzLgorKworKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCBFR0xJQkMgdXNlcyBhIGZpeGVkIGxpc3Qgb2YKKysgICAgICAgc2VydmljZXMgdG8gc2F0aXNmeSBxdWVyaWVzIG9uIGVhY2ggZGF0YWJhc2UsIGFzIHJlcXVlc3RlZCBieQorKyAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHNwZWNpZmllZCB3aGVuIEVHTElCQyBpcyBidWlsdC4gIFlvdXIKKysgICAgICAgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBmaWxlIG11c3Qgc2V0IHRoZSBmb2xsb3dpbmcgdHdvCisrICAgICAgIHZhcmlhYmxlczoKKysKKytjb25maWcgRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRworKyAgIHN0cmluZyAiTnNzd2l0Y2ggZml4ZWQgY29uZmlnIGZpbGVuYW1lIgorKyAgIGRlcGVuZHMgb24gIUVHTElCQ19OU1NXSVRDSAorKyAgIGRlZmF1bHQgIiIKKysgICBoZWxwCisrICAgICAgICAgIFNldCB0aGlzIHRvIHRoZSBuYW1lIG9mIGEgZmlsZSB3aG9zZSBjb250ZW50cyBvYnNlcnZlIHRoZQorKyAgICAgICAgICBzYW1lIHN5bnRheCBhcyBhbiBvcmRpbmFyeSAnL2V0Yy9uc3N3aXRjaC5jb25mJyBmaWxlLiAgVGhlCisrICAgICAgICAgIEVHTElCQyBidWlsZCBwcm9jZXNzIHBhcnNlcyB0aGlzIGZpbGUganVzdCBhcyBFR0xJQkMgd291bGQKKysgICAgICAgICAgYXQgcnVuIHRpbWUgaWYgRUdMSUJDX05TU1dJVENIIHdlcmUgZW5hYmxlZCwgYW5kCisrICAgICAgICAgIHByb2R1Y2VzIGEgQyBsaWJyYXJ5IHRoYXQgdXNlcyB0aGUgbnNzd2l0Y2ggc2VydmljZQorKyAgICAgICAgICBsaWJyYXJpZXMgdG8gc2VhcmNoIGZvciBkYXRhYmFzZSBlbnRyaWVzIGFzIHRoaXMgZmlsZQorKyAgICAgICAgICBzcGVjaWZpZXMsIGluc3RlYWQgb2YgY29uc3VsdGluZyAnL2V0Yy9uc3N3aXRjaC5jb25mJyBhdCBydW4KKysgICAgICAgICAgdGltZS4KKysKKysgICAgICAgICAgVGhpcyBzaG91bGQgYmUgYW4gYWJzb2x1dGUgZmlsZW5hbWUuICBUaGUgRUdMSUJDIGJ1aWxkCisrICAgICAgICAgIHByb2Nlc3MgbWF5IHVzZSBpdCBmcm9tIHNldmVyYWwgZGlmZmVyZW50IHdvcmtpbmcKKysgICAgICAgICAgZGlyZWN0b3JpZXMuICBJdCBtYXkgaW5jbHVkZSByZWZlcmVuY2VzIHRvIE1ha2VmaWxlCisrICAgICAgICAgIHZhcmlhYmxlcyBsaWtlICdjb21tb24tb2JqcGZ4JyAodGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKSwgb3IgJy4uJyAodGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCkuCisrCisrICAgICAgICAgIFRoZSBFR0xJQkMgc291cmNlIHRyZWUgaW5jbHVkZXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlCisrICAgICAgICAgIG5hbWVkICduc3MvZml4ZWQtbnNzd2l0Y2guY29uZic7IGZvciBzaW1wbGUgY29uZmlndXJhdGlvbnMsCisrICAgICAgICAgIHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZGVsZXRlIHJlZmVyZW5jZXMgdG8gZGF0YWJhc2VzIG5vdAorKyAgICAgICAgICBuZWVkZWQgb24geW91ciBzeXN0ZW0uCisrCisrY29uZmlnIEVHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMKKysgICBzdHJpbmcgIk5zc3dpdGNoIGZpeGVkIGZ1bmN0aW9ucyBmaWxlbmFtZSIKKysgICBkZXBlbmRzIG9uICFFR0xJQkNfTlNTV0lUQ0gKKysgICBkZWZhdWx0ICIiCisrICAgaGVscAorKyAgICAgICAgICBUaGUgRUdMSUJDIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGlzIGZpbGUgdG8gZGVjaWRlIHdoaWNoCisrICAgICAgICAgIGZ1bmN0aW9ucyB0byBtYWtlIGF2YWlsYWJsZSBmcm9tIHdoaWNoIHNlcnZpY2UgbGlicmFyaWVzLgorKyAgICAgICAgICBUaGUgZmlsZSAnbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucycgc2VydmVzIGFzIGEgc2FtcGxlCisrICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhpcyBzZXR0aW5nLCBhbmQgZXhwbGFpbnMgaXRzIHN5bnRheAorKyAgICAgICAgICBhbmQgbWVhbmluZyBpbiBtb3JlIGRldGFpbC4KKysKKysgICAgICAgICAgVGhpcyBzaG91bGQgYmUgYW4gYWJzb2x1dGUgZmlsZSBuYW1lLiAgVGhlIEVHTElCQyBidWlsZAorKyAgICAgICAgICBwcm9jZXNzIG1heSB1c2UgaXQgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCB3b3JraW5nCisrICAgICAgICAgIGRpcmVjdG9yaWVzLiAgSXQgbWF5IGluY2x1ZGUgcmVmZXJlbmNlcyB0byBNYWtlZmlsZQorKyAgICAgICAgICB2YXJpYWJsZXMgbGlrZSAnY29tbW9uLW9ianBmeCcgKHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCksIG9yICcuLicgKHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLgorKworKyAgICAgICAgICBCZSBzdXJlIHRvIG1lbnRpb24gZWFjaCBmdW5jdGlvbiBpbiBlYWNoIHNlcnZpY2UgeW91IHdpc2ggdG8KKysgICAgICAgICAgdXNlLiAgSWYgeW91IGRvIG5vdCBtZW50aW9uIGEgc2VydmljZSdzIGZ1bmN0aW9uIGhlcmUsIHRoZQorKyAgICAgICAgICBFR0xJQkMgZGF0YWJhc2UgYWNjZXNzIGZ1bmN0aW9ucyB3aWxsIG5vdCBmaW5kIGl0LCBldmVuIGlmCisrICAgICAgICAgIGl0IGlzIGxpc3RlZCBpbiB0aGUgRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRworKyAgICAgICAgICBmaWxlLgorKworKyAgICAgICAgICBJbiB0aGlzIGFycmFuZ2VtZW50LCBFR0xJQkMgd2lsbCBub3QgdXNlIHRoZSAnZGxvcGVuJyBhbmQKKysgICAgICAgICAgJ2Rsc3ltJyBmdW5jdGlvbnMgdG8gZmluZCBkYXRhYmFzZSBhY2Nlc3MgZnVuY3Rpb25zLiAgSW5zdGVhZCwKKysgICAgICAgICAgbGliYyBoYXJkLWNvZGVzIHJlZmVyZW5jZXMgdG8gdGhlIHNlcnZpY2UgbGlicmFyaWVzJyBkYXRhYmFzZQorKyAgICAgICAgICBhY2Nlc3MgZnVuY3Rpb25zLiAgWW91IG11c3QgZXhwbGljaXRseSBsaW5rIHlvdXIgcHJvZ3JhbQorKyAgICAgICAgICBhZ2FpbnN0IHRoZSBuYW1lIHNlcnZpY2UgbGlicmFyaWVzICh0aG9zZSB3aG9zZSBuYW1lcyBzdGFydAorKyAgICAgICAgICB3aXRoICdsaWJuc3NfJywgaW4gdGhlIHN5c3Jvb3QncyAnL2xpYicgZGlyZWN0b3J5KSB3aG9zZQorKyAgICAgICAgICBmdW5jdGlvbnMgeW91IGludGVuZCB0byB1c2UuICBUaGlzIGFycmFuZ2VtZW50IGhlbHBzCisrICAgICAgICAgIHN5c3RlbS13aWRlIHN0YXRpYyBhbmFseXNpcyB0b29scyBkZWNpZGUgd2hpY2ggZnVuY3Rpb25zIGEKKysgICAgICAgICAgc3lzdGVtIGFjdHVhbGx5IHVzZXMuCisrCisrICAgICAgICAgIE5vdGUgdGhhdCBzb21lIG5zc3dpdGNoIHNlcnZpY2UgbGlicmFyaWVzIHJlcXVpcmUgb3RoZXIgb3B0aW9uCisrICAgICAgICAgIGdyb3VwcyB0byBiZSBlbmFibGVkOyBmb3IgZXhhbXBsZSwgdGhlIEVHTElCQ19JTkVUCisrICAgICAgICAgIG9wdGlvbiBncm91cCBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIHRoZSAnbGlibnNzX2Rucy5zby4yJworKyAgICAgICAgICBzZXJ2aWNlIGxpYnJhcnksIHdoaWNoIHVzZXMgdGhlIERvbWFpbiBOYW1lIFN5c3RlbSBuZXR3b3JrCisrICAgICAgICAgIHByb3RvY29sIHRvIGFuc3dlciBxdWVyaWVzLgorKworK2NvbmZpZyBFR0xJQkNfUkNNRAorKyAgIGJvb2wgIlN1cHBvcnQgZm9yICdyY21kJyBhbmQgcmVsYXRlZCBsaWJyYXJ5IGZ1bmN0aW9ucyIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcnVubmluZyBjb21tYW5kcyBvbgorKyAgICAgIHJlbW90ZSBtYWNoaW5lcyB2aWEgdGhlICdyc2gnIHByb3RvY29sLCBhbmQgZG9pbmcgYXV0aGVudGljYXRpb24KKysgICAgICByZWxhdGVkIHRvIHRob3NlIGZ1bmN0aW9ucy4gIFRoaXMgYWxzbyBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdAorKyAgICAgIHVzZSB0aGUgJ3JleGVjJyBwcm90b2NvbC4KKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIHJjbWQgICAgICAgICAgICBydXNlcm9rCisrICAgICAgICByY21kX2FmICAgICAgICAgcnVzZXJva19hZgorKyAgICAgICAgcmV4ZWMgICAgICAgICAgIGlydXNlcm9rCisrICAgICAgICByZXhlY19hZiAgICAgICAgaXJ1c2Vyb2tfYWYKKysgICAgICAgIHJyZXN2cG9ydCAgICAgICBydXNlcnBhc3MKKysgICAgICAgIHJyZXN2cG9ydF9hZgorKworK2NvbmZpZyBFR0xJQkNfUlRMRF9ERUJVRworKyAgIGJvb2wgIlJ1bnRpbWUgbGlua2VyIGRlYnVnIHByaW50IG91dHMiCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGVuYWJsZXMgZGVidWcgb3V0cHV0IG9mIHRoZSBydW50aW1lIGxpbmtlcgorKyAgICAgIHdoaWNoIGlzIGFjdGl2YXRlZCB2aWEgTERfREVCVUcgYW5kIExEX1RSQUNFX1BSRUxJTktJTkcKKysgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZ3JvdXAgeWllbGRzCisrICAgICAgYSBzbWFsbGVyIHJ1bnRpbWUgbGlua2VyIGJpbmFyeS4KKysgICAgICBCRVdBUkU6IERpc2FibGluZyB0aGlzIG9wdGlvbiBncm91cCBpcyBsaWtlbHkgdG8gYnJlYWsKKysgICAgICB0aGUgYGxkZCcgdXRpbGl0eSB3aGljaCBtYXkgYWxzbyBiZSB1c2VkIGJ5IHRoZSBwcmVsaW5rZXIuCisrICAgICAgSW4gcGFydGljdWxhciwgdGhlIGAtLXVudXNlZCcgbGRkIG9wdGlvbiB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4KKysKKytjb25maWcgRUdMSUJDX1NQQVdOCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgUE9TSVggcG9zaXhfc3Bhd24gZnVuY3Rpb25zIgorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgUE9TSVggZnVuY3Rpb25zIGZvciBleGVjdXRpbmcKKysgICAgICBwcm9ncmFtcyBpbiBjaGlsZCBwcm9jZXNzZXMgd2l0aG91dCB1c2luZyAnZm9yaycgb3IgJ3Zmb3JrJy4KKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIHBvc2l4X3NwYXduCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9pbml0CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaworKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMgorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4KKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95CisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdAorKyAgICAgICAgcG9zaXhfc3Bhd25wCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgYWxzbyBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgdGhlIGljb252LAorKyAgICAgIGxvY2FsZWRlZiwgYW5kIGxvY2FsZSBwcm9ncmFtcyB0byBvcGVyYXRlIHRyYW5zcGFyZW50bHkgb24KKysgICAgICBjb21wcmVzc2VkIGNoYXJzZXQgZGVmaW5pdGlvbnMuICBXaGVuIHRoaXMgb3B0aW9uIGdyb3VwIGlzCisrICAgICAgZGlzYWJsZWQsIHRob3NlIHByb2dyYW1zIHdpbGwgb25seSBvcGVyYXRlIG9uIHVuY29tcHJlc3NlZAorKyAgICAgIGNoYXJtYXAgZmlsZXMuCisrCisrY29uZmlnIEVHTElCQ19TVFJFQU1TCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgYWNjZXNzaW5nIFNUUkVBTVMuIgorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKKysgICAgICBtZXNzYWdlcyB0byBhbmQgZnJvbSBTVFJFQU1TLiAgVGhlIFNUUkVBTVMgaW50ZXJmYWNlIHByb3ZpZGVzIGEKKysgICAgICB1bmlmb3JtIG1lY2hhbmlzbSBmb3IgaW1wbGVtZW50aW5nIG5ldHdvcmtpbmcgc2VydmljZXMgYW5kIG90aGVyCisrICAgICAgY2hhcmFjdGVyLWJhc2VkIEkvTy4gIChTVFJFQU1TIGFyZSBub3QgdG8gYmUgY29uZnVzZWQgd2l0aAorKyAgICAgIDxzdGRpby5oPiBGSUxFIG9iamVjdHMsIGFsc28gY2FsbGVkICdzdHJlYW1zJy4pCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICBnZXRtc2cgICAgICAgICAgcHV0cG1zZworKyAgICAgICAgZ2V0cG1zZyAgICAgICAgIGZhdHRhY2gKKysgICAgICAgIGlzYXN0cmVhbSAgICAgICBmZGV0YWNoCisrICAgICAgICBwdXRtc2cKKysKKytjb25maWcgRUdMSUJDX1NVTlJQQworKyAgIGJvb2wgIlN1cHBvcnQgZm9yIHRoZSBTdW4gJ1JQQycgcHJvdG9jb2wuIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlIFN1biBSUEMgcHJvdG9jb2xzLAorKyAgICAgIGluY2x1ZGluZyB0aGUgJ3JwY2dlbicgYW5kICdycGNpbmZvJyBwcm9ncmFtcy4KKysKKytjb25maWcgRUdMSUJDX1VUTVAKKysgICAgYm9vbCAiT2xkZXIgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgJ3V0bXAnIGxvZ2luIHJlY29yZHMiCisrICAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIG9sZGVyICd1dGVudCcgZmFtaWx5IG9mCisrICAgICAgIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHVzZXIgbG9naW4gcmVjb3JkcyBpbiB0aGUgJ3V0bXAnIGZpbGUuCisrICAgICAgIFBPU0lYIG9taXRzIHRoZXNlIGZ1bmN0aW9ucyBpbiBmYXZvciBvZiB0aGUgJ3V0eGVudCcgZmFtaWx5LAorKyAgICAgICBhbmQgdGhleSBhcmUgb2Jzb2xldGUgb24gc3lzdGVtcyBvdGhlciB0aGFuIExpbnV4LgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmR1dGVudAorKyAgICAgICAgIGdldHV0ZW50CisrICAgICAgICAgZ2V0dXRlbnRfcgorKyAgICAgICAgIGdldHV0aWQKKysgICAgICAgICBnZXR1dGlkX3IKKysgICAgICAgICBnZXR1dGxpbmUKKysgICAgICAgICBnZXR1dGxpbmVfcgorKyAgICAgICAgIGxvZ3d0bXAKKysgICAgICAgICBwdXR1dGxpbmUKKysgICAgICAgICBzZXR1dGVudAorKyAgICAgICAgIHVwZHd0bXAKKysgICAgICAgICB1dG1wbmFtZQorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllczoKKysKKysgICAgICAgICBsaWJ1dGlsLnNvIChhbmQgbGlidXRpbC5hKQorKworK2NvbmZpZyBFR0xJQkNfVVRNUFgKKysgICAgYm9vbCAiUE9TSVggYWNjZXNzIGZ1bmN0aW9ucyBmb3IgJ3V0bXAnIGxvZ2luIHJlY29yZHMiCisrICAgIGRlcGVuZHMgb24gRUdMSUJDX1VUTVAKKysgICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgUE9TSVggZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZAorKyAgICAgICB3cml0aW5nIHVzZXIgbG9naW4gcmVjb3JkcyBpbiB0aGUgJ3V0bXAnIGZpbGUgKHVzdWFsbHkKKysgICAgICAgJy92YXIvcnVuL3V0bXAnKS4gIFRoZSBQT1NJWCBmdW5jdGlvbnMgb3BlcmF0ZSBvbiAnc3RydWN0CisrICAgICAgIHV0bXB4JyBzdHJ1Y3R1cmVzLCBhcyBvcHBvc2VkIHRvIHRoZSBmYW1pbHkgb2Ygb2xkZXIgJ3V0ZW50JworKyAgICAgICBmdW5jdGlvbnMsIHdoaWNoIG9wZXJhdGUgb24gJ3N0cnVjdCB1dG1wJyBzdHJ1Y3R1cmVzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmR1dHhlbnQKKysgICAgICAgICBnZXR1dG1wCisrICAgICAgICAgZ2V0dXRtcHgKKysgICAgICAgICBnZXR1dHhlbnQKKysgICAgICAgICBnZXR1dHhpZAorKyAgICAgICAgIGdldHV0eGxpbmUKKysgICAgICAgICBwdXR1dHhsaW5lCisrICAgICAgICAgc2V0dXR4ZW50CisrICAgICAgICAgdXBkd3RtcHgKKysgICAgICAgICB1dG1weG5hbWUKKysKKytjb25maWcgRUdMSUJDX1dPUkRFWFAKKysgICAgYm9vbCAiU2hlbGwtc3R5bGUgd29yZCBleHBhbnNpb24iCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSAnd29yZGV4cCcgZnVuY3Rpb24gZm9yCisrICAgICAgICBwZXJmb3JtaW5nIHdvcmQgZXhwYW5zaW9uIGluIHRoZSBtYW5uZXIgb2YgdGhlIHNoZWxsLCBhbmQgdGhlCisrICAgICAgICBhY2NvbXBhbnlpbmcgJ3dvcmRmcmVlJyBmdW5jdGlvbi4KKysKKytjb25maWcgUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyAgICBib29sICJJU08gQyBsaWJyYXJ5IHdpZGUgY2hhcmFjdGVyIGZ1bmN0aW9ucywgZXhjbHVkaW5nIEkvTyIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBJU08gQworKyAgICAgICAgc3RhbmRhcmQgZm9yIHdvcmtpbmcgd2l0aCB3aWRlIGFuZCBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbgorKyAgICAgICAgbWVtb3J5LiAgRnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHdpZGUgYW5kIG11bHRpYnl0ZQorKyAgICAgICAgY2hhcmFjdGVycyBmcm9tIGFuZCB0byBmaWxlcyBjYWxsIGluIHRoZQorKyAgICAgICAgUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTyBvcHRpb24gZ3JvdXAuCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgYnRvd2MgICAgICAgICBtYnNpbml0ICAgICAgIHdjc2NzcG4gICAgICAgd2NzdG9sbAorKyAgICAgICAgICBpc3dhbG51bSAgICAgIG1ic3J0b3djcyAgICAgd2NzZnRpbWUgICAgICB3Y3N0b21icworKyAgICAgICAgICBpc3dhbHBoYSAgICAgIG1ic3Rvd2NzICAgICAgd2NzbGVuICAgICAgICB3Y3N0b3VsCisrICAgICAgICAgIGlzd2JsYW5rICAgICAgbWJ0b3djICAgICAgICB3Y3NuY2F0ICAgICAgIHdjc3RvdWxsCisrICAgICAgICAgIGlzd2NudHJsICAgICAgc3dwcmludGYgICAgICB3Y3NuY21wICAgICAgIHdjc3RvdW1heAorKyAgICAgICAgICBpc3djdHlwZSAgICAgIHN3c2NhbmYgICAgICAgd2NzbmNweSAgICAgICB3Y3N4ZnJtCisrICAgICAgICAgIGlzd2RpZ2l0ICAgICAgdG93Y3RyYW5zICAgICB3Y3NwYnJrICAgICAgIHdjdG9iCisrICAgICAgICAgIGlzd2dyYXBoICAgICAgdG93bG93ZXIgICAgICB3Y3NyY2hyICAgICAgIHdjdG9tYgorKyAgICAgICAgICBpc3dsb3dlciAgICAgIHRvd3VwcGVyICAgICAgd2NzcnRvbWJzICAgICB3Y3RyYW5zCisrICAgICAgICAgIGlzd3ByaW50ICAgICAgdnN3cHJpbnRmICAgICB3Y3NzcG4gICAgICAgIHdjdHlwZQorKyAgICAgICAgICBpc3dwdW5jdCAgICAgIHZzd3NjYW5mICAgICAgd2Nzc3RyICAgICAgICB3bWVtY2hyCisrICAgICAgICAgIGlzd3NwYWNlICAgICAgd2NydG9tYiAgICAgICB3Y3N0b2QgICAgICAgIHdtZW1jbXAKKysgICAgICAgICAgaXN3dXBwZXIgICAgICB3Y3NjYXQgICAgICAgIHdjc3RvZiAgICAgICAgd21lbWNweQorKyAgICAgICAgICBpc3d4ZGlnaXQgICAgIHdjc2NociAgICAgICAgd2NzdG9pbWF4ICAgICB3bWVtbW92ZQorKyAgICAgICAgICBtYmxlbiAgICAgICAgIHdjc2NtcCAgICAgICAgd2NzdG9rICAgICAgICB3bWVtc2V0CisrICAgICAgICAgIG1icmxlbiAgICAgICAgd2NzY29sbCAgICAgICB3Y3N0b2wKKysgICAgICAgICAgbWJydG93YyAgICAgICB3Y3NjcHkgICAgICAgIHdjc3RvbGQKKysKKytjb25maWcgUE9TSVhfUkVHRVhQCisrICAgIGJvb2wgIlJlZ3VsYXIgZXhwcmVzc2lvbnMiCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24KKysgICAgICAgIGZ1bmN0aW9ucywgYW5kIHRoZSBhc3NvY2lhdGVkIG5vbi1QT1NJWCBleHRlbnNpb25zIGFuZAorKyAgICAgICAgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisrCisrICAgICAgICBXaXRoIFBPU0lYX1JFR0VYUCBkaXNhYmxlZCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlCisrICAgICAgICBvbWl0dGVkIGZyb20gbGliYzoKKysKKysgICAgICAgICAgcmVfY29tcCAgICAgICAgICAgICAgICAgcmVfbWF4X2ZhaWx1cmVzICAgICAgICAgcmVnY29tcAorKyAgICAgICAgICByZV9jb21waWxlX2Zhc3RtYXAgICAgICByZV9zZWFyY2ggICAgICAgICAgICAgICByZWdlcnJvcgorKyAgICAgICAgICByZV9jb21waWxlX3BhdHRlcm4gICAgICByZV9zZWFyY2hfMiAgICAgICAgICAgICByZWdleGVjCisrICAgICAgICAgIHJlX2V4ZWMgICAgICAgICAgICAgICAgIHJlX3NldF9yZWdpc3RlcnMgICAgICAgIHJlZ2ZyZWUKKysgICAgICAgICAgcmVfbWF0Y2ggICAgICAgICAgICAgICAgcmVfc2V0X3N5bnRheCAgICAgICAgICAgcnBtYXRjaAorKyAgICAgICAgICByZV9tYXRjaF8yICAgICAgICAgICAgICByZV9zeW50YXhfb3B0aW9ucworKworKyAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBjb21wYXRpYmlsaXR5IHJlZ2V4cCBpbnRlcmZhY2UgZGVmaW5lZCBpbiB0aGUKKysgICAgICAgIDxyZWdleHAuaD4gaGVhZGVyIGZpbGUsICdjb21waWxlJywgJ3N0ZXAnLCBhbmQgJ2FkdmFuY2UnLCBpcworKyAgICAgICAgb21pdHRlZC4KKysKKytjb25maWcgUE9TSVhfUkVHRVhQX0dMSUJDCisrICAgIGJvb2wgIlJlZ3VsYXIgZXhwcmVzc2lvbnMgZnJvbSBHTElCQyIKKysgICAgZGVwZW5kcyBvbiBQT1NJWF9SRUdFWFAKKysgICAgaGVscAorKwlUaGlzIG9wdGlvbiBncm91cCBzcGVjaWZpZXMgd2hpY2ggcmVndWxhciBleHByZXNzaW9uCisrICAgICAgICBsaWJyYXJ5IHRvIHVzZS4gIFRoZSBjaG9pY2UgaXMgYmV0d2VlbiByZWdleAorKyAgICAgICAgaW1wbGVtZW50YXRpb24gZnJvbSBHTElCQyBhbmQgcmVnZXggaW1wbGVtZW50YXRpb24gZnJvbQorKyAgICAgICAgbGliaWJlcnR5LiAgVGhlIEdMSUJDIHZhcmlhbnQgaXMgZnVsbHkgUE9TSVggY29uZm9ybWFudCBhbmQKKysgICAgICAgIG9wdGltaXplZCBmb3Igc3BlZWQ7IHJlZ2V4IGZyb20gbGliaWJlcnR5IGlzIG1vcmUgdGhhbiB0d2ljZQorKyAgICAgICAgYXMgc21hbGwgd2hpbGUgc3RpbGwgaXMgZW5vdWdoIGZvciBtb3N0IHByYWN0aWNhbCBwdXJwb3Nlcy4KKysKKytjb25maWcgUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICBib29sICJJbnB1dCBhbmQgb3V0cHV0IGZ1bmN0aW9ucyBmb3Igd2lkZSBjaGFyYWN0ZXJzIgorKyAgICBkZXBlbmRzIG9uIFBPU0lYX0NfTEFOR19XSURFX0NIQVIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCisrICAgICAgICB3aWRlIGNoYXJhY3RlcnMgdG8gYW5kIGZyb20gPHN0ZGlvLmg+IHN0cmVhbXMuCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgZmdldHdjICAgICAgICBmd3ByaW50ZiAgICAgIHB1dHdjaGFyICAgICAgdndzY2FuZgorKyAgICAgICAgICBmZ2V0d3MgICAgICAgIGZ3c2NhbmYgICAgICAgdW5nZXR3YyAgICAgICB3cHJpbnRmCisrICAgICAgICAgIGZwdXR3YyAgICAgICAgZ2V0d2MgICAgICAgICB2ZndwcmludGYgICAgIHdzY2FuZgorKyAgICAgICAgICBmcHV0d3MgICAgICAgIGdldHdjaGFyICAgICAgdmZ3c2NhbmYKKysgICAgICAgICAgZndpZGUgICAgICAgICBwdXR3YyAgICAgICAgIHZ3cHJpbnRmCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBmdXJ0aGVyIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgdW5sb2NrZWQKKysgICAgICAgIHZhcmlhbnRzIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGZnZXR3Y191bmxvY2tlZCAgICAgICAgICAgZ2V0d2NfdW5sb2NrZWQKKysgICAgICAgICAgZmdldHdzX3VubG9ja2VkICAgICAgICAgICBnZXR3Y2hhcl91bmxvY2tlZAorKyAgICAgICAgICBmcHV0d2NfdW5sb2NrZWQgICAgICAgICAgIHB1dHdjX3VubG9ja2VkCisrICAgICAgICAgIGZwdXR3c191bmxvY2tlZCAgICAgICAgICAgcHV0d2NoYXJfdW5sb2NrZWQKKysKKysgICAgICAgIE5vdGUgdGhhdCB0aGUgR05VIHN0YW5kYXJkIEMrKyBsaWJyYXJ5LCAnbGlic3RkYysrLnNvJywgdXNlcworKyAgICAgICAgc29tZSBvZiB0aGVzZSBmdW5jdGlvbnM7IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGxpbmsgb3IgcnVuCisrICAgICAgICBDKysgcHJvZ3JhbXMgaWYgeW91IGRpc2FibGUgdGhpcyBvcHRpb24gZ3JvdXAuCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBhbHNvIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmb2xsb3dpbmcKKysgICAgICAgIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgZmRvcGVuCisrICAgICAgICAgIGZvcGVuCisrICAgICAgICAgIGZvcGVuNjQKKysgICAgICAgICAgZnJlb3BlbgorKyAgICAgICAgICBmcmVvcGVuNjQKKysKKysgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhbGwgdGFrZSBhbiBPUEVOVFlQRSBwYXJhbWV0ZXIgd2hpY2ggbWF5CisrICAgICAgICBjb250YWluIGEgc3RyaW5nIG9mIHRoZSBmb3JtICIsY2NzPUNIQVJTRVQiLCBpbmRpY2F0aW5nIHRoYXQKKysgICAgICAgIHRoZSB1bmRlcmx5aW5nIGZpbGUgdXNlcyB0aGUgY2hhcmFjdGVyIHNldCBuYW1lZCBDSEFSU0VULgorKyAgICAgICAgVGhpcyBwcm9kdWNlcyBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtLCB3aGljaCBpcyBvbmx5IHVzZWZ1bAorKyAgICAgICAgd2hlbiB0aGUgZnVuY3Rpb25zIGluY2x1ZGVkIGluIHRoaXMgb3B0aW9uIGdyb3VwIGFyZSBwcmVzZW50LgorKyAgICAgICAgSWYgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gb3BlbiBhIGZpbGUgc3BlY2lmeWluZyBhIGNoYXJhY3RlciBzZXQKKysgICAgICAgIGluIHRoZSBPUEVOVFlQRSBwYXJhbWV0ZXIsIGFuZCBFR0xJQkMgd2FzIGJ1aWx0IHdpdGggdGhpcworKyAgICAgICAgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOVUxMLCBhbmQgc2V0cworKyAgICAgICAgZXJybm8gdG8gRUlOVkFMLgorKworKwwKKysjIFRoaXMgaGVscHMgRW1hY3MgdXNlcnMgYnJvd3NlIHRoaXMgZmlsZSB1c2luZyB0aGUgcGFnZSBtb3Rpb24gY29tbWFuZHMKKysjIGFuZCBjb21tYW5kcyBsaWtlICdwYWdlcy1kaXJlY3RvcnknLgorKyMgTG9jYWwgVmFyaWFibGVzOgorKyMgcGFnZS1kZWxpbWl0ZXI6ICJeY29uZmlnXFxzLSIKKysjIEVuZDoKK2RpZmYgLS1naXQgYS9vcHRpb24tZ3JvdXBzLmRlZmF1bHRzIGIvb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjgxNDEyMDEKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbi1ncm91cHMuZGVmYXVsdHMKK0BAIC0wLDAgKzEsNDcgQEAKKysjIFRoaXMgZmlsZSBzZXRzIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgb3B0aW9uIGdyb3VwIHZhcmlhYmxlcworKyMgbWVudGlvbmVkIGluIG9wdGlvbi1ncm91cHMuZGVmOyBzZWUgdGhhdCBmaWxlIGZvciBhIGRlc2NyaXB0aW9uIG9mCisrIyBlYWNoIG9wdGlvbiBncm91cC4KKysjCisrIyBTdWJkaXJlY3RvcnkgbWFrZWZpbGVzIGluY2x1ZGUgdGhpcyBmaWxlIGJlZm9yZSBpbmNsdWRpbmcgdGhlIHVzZXIncworKyMgc2V0dGluZ3MgZnJvbSBvcHRpb24tZ3JvdXBzLmNvbmZpZyBhdCB0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlOworKyMgdGhhdCBmaWxlIG5lZWQgb25seSByZWZlciB0byB0aG9zZSBvcHRpb25zIHdob3NlIGRlZmF1bHQgc2V0dGluZ3MKKysjIGFyZSB0byBiZSBjaGFuZ2VkLgorKyMKKysjIEJ5IGRlZmF1bHQsIGFsbCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkLgorK09QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYgPSB5CisrT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UgPSB5CisrT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID0geQorK09QVElPTl9FR0xJQkNfQlNEID0geQorK09QVElPTl9FR0xJQkNfQ1hYX1RFU1RTID0geQorK09QVElPTl9FR0xJQkNfQ0FUR0VUUyA9IHkKKytPUFRJT05fRUdMSUJDX0NIQVJTRVRTID0geQorK09QVElPTl9FR0xJQkNfQ1JZUFQgPSB5CisrT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgPSB5CisrT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTID0geQorK09QVElPTl9FR0xJQkNfRU5WWiA9IHkKKytPUFRJT05fRUdMSUJDX0ZDVlQgPSB5CisrT1BUSU9OX0VHTElCQ19GTVRNU0cgPSB5CisrT1BUSU9OX0VHTElCQ19GU1RBQiA9IHkKKytPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSA9IHkKKytPUFRJT05fRUdMSUJDX0dFVExPR0lOID0geQorK09QVElPTl9FR0xJQkNfSUROID0geQorK09QVElPTl9FR0xJQkNfSU5FVCA9IHkKKytPUFRJT05fRUdMSUJDX0lORVRfQU5MID0geQorK09QVElPTl9FR0xJQkNfTElCTSA9IHkKKytPUFRJT05fRUdMSUJDX0xPQ0FMRVMgPSB5CisrT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSA9IHkKKytPUFRJT05fRUdMSUJDX01FTVVTQUdFID0geQorK09QVElPTl9FR0xJQkNfTklTID0geQorK09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggPSB5CisrT1BUSU9OX0VHTElCQ19SQ01EID0geQorK09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRyA9IHkKKytPUFRJT05fRUdMSUJDX1NQQVdOID0geQorK09QVElPTl9FR0xJQkNfU1RSRUFNUyA9IHkKKytPUFRJT05fRUdMSUJDX1NVTlJQQyA9IHkKKytPUFRJT05fRUdMSUJDX1VUTVAgPSB5CisrT1BUSU9OX0VHTElCQ19VVE1QWCA9IHkKKytPUFRJT05fRUdMSUJDX1dPUkRFWFAgPSB5CisrT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgPSB5CisrT1BUSU9OX1BPU0lYX1JFR0VYUCA9IHkKKytPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDID0geQorK09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPID0geQorZGlmZiAtLWdpdCBhL29wdGlvbi1ncm91cHMubWFrIGIvb3B0aW9uLWdyb3Vwcy5tYWsKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mODNlMGMxCistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb24tZ3JvdXBzLm1haworQEAgLTAsMCArMSw0MSBAQAorKyMgU2V0dXAgZmlsZSBmb3Igc3ViZGlyZWN0b3J5IE1ha2VmaWxlcyB0aGF0IGRlZmluZSBFR0xJQkMgb3B0aW9uIGdyb3Vwcy4KKysKKysjIEVHTElCQyBzaG91bGRuJ3QgbmVlZCB0byBvdmVycmlkZSB0aGlzLiAgSG93ZXZlciwgdGhlCisrIyBjcm9zcy1idWlsZC1mcmllbmRseSBsb2NhbGVkZWYgaW5jbHVkZXMgdGhpcyBtYWtlZmlsZSB0byBnZXQgb3B0aW9uCisrIyBncm91cCB2YXJpYWJsZSBkZWZpbml0aW9uczsgaXQgdXNlcyBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhbGwgdGhlCisrIyBtdWx0aWxpYnMsIGFuZCBuZWVkcyB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgb3B0aW9uIGdyb3VwCisrIyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGVhY2ggbXVsdGlsaWIuCisrb3B0aW9uX2dyb3VwX2NvbmZpZ19maWxlID89ICQob2JqZGlyKS9vcHRpb24tZ3JvdXBzLmNvbmZpZworKworKyMgUmVhZCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYWxsIG9wdGlvbnMuCisrIyBXZSdyZSBpbmNsdWRlZCBiZWZvcmUgLi4vUnVsZXMsIHNvIHdlIGNhbid0IGFzc3VtZSAkKC4uKSBpcyBzZXQuCisraW5jbHVkZSAkKGZpcnN0d29yZCAkKC4uKSAuLi8pb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworKworKyMgUmVhZCB0aGUgZGV2ZWxvcGVyJ3Mgb3B0aW9uIGdyb3VwIHNlbGVjdGlvbnMsIG92ZXJyaWRpbmcgdGhlCisrIyBkZWZhdWx0cyBmcm9tIG9wdGlvbi1ncm91cHMuZGVmYXVsdHMuCisrLWluY2x1ZGUgJChvcHRpb25fZ3JvdXBfY29uZmlnX2ZpbGUpCisrCisrIyAkKGNhbGwgb3B0aW9uLWRpc2FibGVkLCBWQVIpIGlzICd5JyBpZiBWQVIgaXMgbm90ICd5Jywgb3IgJ24nIG90aGVyd2lzZS4KKysjIFZBUiBzaG91bGQgYmUgYSB2YXJpYWJsZSBuYW1lLCBub3QgYSB2YXJpYWJsZSByZWZlcmVuY2U7IHRoaXMgaXMKKysjIGxlc3MgZ2VuZXJhbCwgYnV0IG1vcmUgdGVyc2UgZm9yIHRoZSBpbnRlbmRlZCB1c2UuCisrIyBZb3UgY2FuIHVzZSBpdCB0byBhZGQgYSBmaWxlIHRvIGEgbGlzdCBpZiBhbiBvcHRpb24gZ3JvdXAgaXMKKysjIGRpc2FibGVkLCBsaWtlIHRoaXM6CisrIyAgIHJvdXRpbmVzLSQoY2FsbCBvcHRpb24tZGlzYWJsZWQsIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPSAuLi4KKytkZWZpbmUgb3B0aW9uLWRpc2FibGVkCisrJChmaXJzdHdvcmQgJChzdWJzdCB5LG4sJChmaWx0ZXIgeSwkKCQoc3RyaXAgJCgxKSkpKSkgeSkKKytlbmRlZgorKworKyMgRXN0YWJsaXNoICdyb3V0aW5lcy15JywgZXRjLiBhcyBzaW1wbHktZXhwYW5kZWQgdmFyaWFibGVzLgorK2F1eC15CSAgICAgICAJICAgIDo9CisrZXh0cmEtbGlicy1vdGhlcnMteSA6PQorK2V4dHJhLWxpYnMteSAgIAkgICAgOj0KKytleHRyYS1vYmpzLXkgICAJICAgIDo9CisraW5zdGFsbC1iaW4teSAgCSAgICA6PQorK2luc3RhbGwtb3RoZXJzLXkgICAgOj0KKytpbnN0YWxsLXNiaW4teSAJICAgIDo9Cisrb3RoZXJzLXkgICAgICAgCSAgICA6PQorK290aGVycy1waWUteSAgIAkgICAgOj0KKytyb3V0aW5lcy15ICAgICAJICAgIDo9CisrdGVzdC1zcmNzLXkgICAgCSAgICA6PQorK3Rlc3RzLXkgICAgICAgIAkgICAgOj0KKyt4dGVzdHMteSAgICAgICAJICAgIDo9CitkaWZmIC0tZ2l0IGEvb3B0aW9ucy1jb25maWcvTWFrZWZpbGUgYi9vcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRiMDA3MDgKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbnMtY29uZmlnL01ha2VmaWxlCitAQCAtMCwwICsxLDU1IEBACisrIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysjIEVHTElCQyBvcHRpb24tZ3JvdXBzIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworKyMgVGhlc2UgdGFyZ2V0cyBhcmUgaW5jbHVkZWQgZnJvbSB0b3AtbGV2ZWwgbWFrZWZpbGUKKysKKytpZm5lcSAoJChrY29uZmlnX3Rvb2xzKSwpCisraWZuZXEgKG5vLCQoUEVSTCkpCisrCisrb2NkaXIgOj0gb3B0aW9ucy1jb25maWcKKysKKytPY29uZmlnRGVmYXVsdHMgICAgIDo9IG9wdGlvbi1ncm91cHMuZGVmYXVsdHMKKytPY29uZmlnRGVmYXVsdHNfdG1wIDo9ICQoY29tbW9uLW9ianBmeCkudG1wLmRlZmNvbmZpZworK09jb25maWdEZWYgICAgICAgICAgOj0gb3B0aW9uLWdyb3Vwcy5kZWYKKytPY29uZmlnICAgICAgICAgICAgIDo9ICQoY29tbW9uLW9ianBmeClvcHRpb24tZ3JvdXBzLmNvbmZpZworK09jb25maWdfdG1wICAgICAgICAgOj0gJChjb21tb24tb2JqcGZ4KS50bXAuY29uZmlnCisrCisrY29uZiAgOj0gJChrY29uZmlnX3Rvb2xzKS9jb25mCisrbWNvbmYgOj0gJChrY29uZmlnX3Rvb2xzKS9tY29uZgorKworK3ByZXByb2MgIDo9ICQoUEVSTCkgJChvY2RpcikvY29uZmlnLXByZXByb2MucGwKKytwb3N0cHJvYyA6PSAkKFBFUkwpICQob2NkaXIpL2NvbmZpZy1wb3N0cHJvYy5wbAorKworK1BIT05ZICs9IGRlZmNvbmZpZyBjb25maWcgbWVudWNvbmZpZworKworK2RlZmNvbmZpZzogJChjb25mKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnRGVmKQorKwlybSAtZiAkKE9jb25maWdEZWZhdWx0c190bXApCisrCXJtIC1mICQoT2NvbmZpZ190bXApCisrCSQocHJlcHJvYykgJChPY29uZmlnRGVmYXVsdHMpID4gJChPY29uZmlnRGVmYXVsdHNfdG1wKQorKwlLQ09ORklHX0NPTkZJRz0kKE9jb25maWdfdG1wKSAkPCAtLWRlZmNvbmZpZz0kKE9jb25maWdEZWZhdWx0c190bXApIFwKKysJCQkJJChPY29uZmlnRGVmKQorKwkkKHBvc3Rwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnX3RtcCkgPiAkKE9jb25maWcpCisrCXJtICQoT2NvbmZpZ190bXApCisrCXJtICQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkKKysKKytjb25maWc6ICQoY29uZikgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ0RlZikKKysJcm0gLWYgJChPY29uZmlnX3RtcCkKKysJJChwcmVwcm9jKSAkKHdpbGRjYXJkICQoT2NvbmZpZykpID4gJChPY29uZmlnX3RtcCkKKysJS0NPTkZJR19DT05GSUc9JChPY29uZmlnX3RtcCkgJDwgLS1vbGRhc2tjb25maWcgJChPY29uZmlnRGVmKQorKwkkKHBvc3Rwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnX3RtcCkgPiAkKE9jb25maWcpCisrCXJtICQoT2NvbmZpZ190bXApCisrCisrbWVudWNvbmZpZzogJChtY29uZikgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ0RlZikKKysJcm0gLWYgJChPY29uZmlnX3RtcCkKKysJJChwcmVwcm9jKSAkKHdpbGRjYXJkICQoT2NvbmZpZykpID4gJChPY29uZmlnX3RtcCkKKysJS0NPTkZJR19DT05GSUc9JChPY29uZmlnX3RtcCkgJDwgJChPY29uZmlnRGVmKQorKwkkKHBvc3Rwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnX3RtcCkgPiAkKE9jb25maWcpCisrCXJtICQoT2NvbmZpZ190bXApCisrCisrIyBIZWxwIHRleHQgdXNlZCBieSBtYWtlIGhlbHAKKytoZWxwOgorKwlAZWNobyAgJyAgZGVmY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBmcm9tIGRlZmF1bHQgY29uZmlnJworKwlAZWNobyAgJyAgY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbGluZS1vcmllbnRlZCBwcm9ncmFtJworKwlAZWNobyAgJyAgbWVudWNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIG1lbnUgYmFzZWQgcHJvZ3JhbScKKysKKytlbmRpZgorK2VuZGlmCitkaWZmIC0tZ2l0IGEvb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGRkMWM2MworLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsCitAQCAtMCwwICsxLDU4IEBACisrIyEvdXNyL2Jpbi9wZXJsCisrCisrJHVzYWdlID0gInVzYWdlOiAkMCA8ZGVmYXVsdCBjb25maWcgZmlsZT4gPGNvbmZpZyBmaWxlPlxuIjsKKysKKytkaWUgIiR1c2FnZSIgdW5sZXNzIEBBUkdWOworKyRkZWZhdWx0cyA9IHNoaWZ0IEBBUkdWOworK2RpZSAiJHVzYWdlIiB1bmxlc3MgQEFSR1Y7CisrZGllICJDb3VsZCBub3Qgb3BlbiAkQVJHVlswXSIgdW5sZXNzIC1UICRBUkdWWzBdOworKworK3N1YiB5YW5rIHsKKysgICAgQG9wdGlvbiA9IGdyZXAoISgkXyA9fiAvJF9bMF1ccyo9LyksIEBvcHRpb24pOworK30KKysKKytvcGVuKERFRkFVTFRTLCAkZGVmYXVsdHMpIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJGRlZmF1bHRzXG4iOworKworKyMgZ2V0IHRoZSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlnIGZpbGUKKyskaSA9IDA7Cisrd2hpbGUgKDxERUZBVUxUUz4pIHsKKysgICAgaWYgKC9eXHMqT1BUSU9OXyhcdytccyo9LiokKS8pIHsKKysJJG9wdGlvblskaSsrXSA9ICQxOworKyAgICB9CisrfQorKworKyMgbm93IGdvIHRocm91Z2ggdGhlIGNvbmZpZyBmaWxlLCBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzCisrd2hpbGUgKDw+KSB7CisrICAgIGlmICgvTGludXggS2VybmVsIENvbmZpZ3VyYXRpb24vKSB7CisrCSMgY2hhbmdlIHRpdGxlCisrCXMvTGludXggS2VybmVsL09wdGlvbiBHcm91cHMvOworKwlwcmludDsKKysgICAgfSBlbHNpZiAoL15ccypDT05GSUdfKFx3Kylccyo9LykgeworKwkjIHRoaXMgaXMgYW4gZXhwbGljaXQgb3B0aW9uIHNldCBsaW5lLCBjaGFuZ2UgQ09ORklHXyB0byBPUFRJT05fCisrCSMgYmVmb3JlIHByaW50aW5nIGFuZCByZW1vdmUgdGhpcyBvcHRpb24gZnJvbSBvcHRpb24gbGlzdAorKwkkb3B0ID0gJDE7CisrCXlhbmsoJG9wdCk7CisrCXMvQ09ORklHXy9PUFRJT05fL2c7CisrCXByaW50OworKyAgICB9IGVsc2lmICgvXlxzKiNccytDT05GSUdfKFx3KykgaXMgbm90IHNldC8pIHsKKysJIyB0aGlzIGlzIGEgY29tbWVudCBsaW5lIGZvciBhbiB1bnNldCBib29sZWFuIG9wdGlvbiwgY2hhbmdlIENPTkZJR18KKysJIyB0byBPUFRJT05fLCByZW1vdmUgdGhpcyBvcHRpb24gZnJvbSBvcHRpb24gbGlzdCwgYW5kIGNvbnZlcnQgdG8KKysJIyBleHBsaWNpdCBPUFRJT05fRk9PPW4KKysJJG9wdCA9ICQxOworKwl5YW5rKCRvcHQpOworKwlzL0NPTkZJR18vT1BUSU9OXy9nOworKwlwcmludCAiT1BUSU9OXyRvcHQ9blxuIjsKKysgICAgfSBlbHNlIHsKKysJcHJpbnQ7CisrICAgIH0KKyt9CisrCisrIyBhbnkgYm9vbGVhbiBvcHRpb25zIGxlZnQgaW4gQG9wdGlvbnMsIGFyZSBvcHRpb25zIHRoYXQgd2VyZSBub3QgbWVudGlvbmVkIGluCisrIyB0aGUgY29uZmlnIGZpbGUsIGFuZCBpbXBsaWNpdGx5IHRoYXQgbWVhbnMgdGhlIG9wdGlvbiBtdXN0IGJlIHNldCA9biwKKysjIHNvIGRvIHRoYXQgaGVyZS4KKytmb3JlYWNoICRvcHQgKEBvcHRpb24pIHsKKysgICAgaWYgKCRvcHQgPX4gLz1ccypbeW5dLykgeworKwkkb3B0ID1+IHMvPVxzKlt5bl0vPW4vOworKwlwcmludCAiT1BUSU9OXyRvcHRcbiI7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI4M2JiODUKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsCitAQCAtMCwwICsxLDggQEAKKysjIS91c3IvYmluL3BlcmwKKysKKytpZiAoQEFSR1YpIHsKKysgICAgd2hpbGUgKDw+KSB7CisrCXMvT1BUSU9OXy9DT05GSUdfL2c7CisrCXByaW50OworKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL3NjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sgYi9zY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTMzYWYwYworLS0tIC9kZXYvbnVsbAorKysrIGIvc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3aworQEAgLTAsMCArMSw2MyBAQAorKyMgb3B0aW9uLWdyb3Vwcy5hd2sgLS0tIGdlbmVyYXRlIG9wdGlvbiBncm91cCBoZWFkZXIgZmlsZQorKyMgR2l2ZW4gaW5wdXQgZmlsZXMgY29udGFpbmluZyBtYWtlZmlsZS1zdHlsZSBhc3NpZ25tZW50cyB0byB2YXJpYWJsZXMsCisrIyBwcmludCBvdXQgYSBoZWFkZXIgZmlsZSB0aGF0ICNkZWZpbmVzIGFuIGFwcHJvcHJpYXRlIHByZXByb2Nlc3NvcgorKyMgc3ltYm9sIGZvciBlYWNoIHZhcmlhYmxlIGxlZnQgc2V0IHRvICd5Jy4KKysKKytCRUdJTiB7IEZTPSI9IiB9CisrCisrIyBUcmltIHNwYWNlcy4KKyt7IGdzdWIgKC9bWzpibGFuazpdXS8sICIiKSB9CisrCisrIyBTa2lwIGNvbW1lbnRzLgorKy9eIy8geyBuZXh0IH0KKysKKysjIFByb2Nlc3MgYXNzaWdubWVudHMuCisrTkYgPT0gMiB7CisrICAgIHZhcnNbJDFdID0gJDIKKyt9CisrCisrIyBQcmludCBmaW5hbCB2YWx1ZXMuCisrRU5EIHsKKysgICAgcHJpbnQgIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrIgorKyAgICBwcmludCAiICAgaW4gdGhlIEVHTElCQyBzb3VyY2UgdHJlZS4iCisrICAgIHByaW50ICIiCisrICAgIHByaW50ICIgICBJdCBkZWZpbmVzIG1hY3JvcyB0aGF0IGluZGljYXRlIHdoaWNoIEVHTElCQyBvcHRpb24gZ3JvdXBzIHdlcmUiCisrICAgIHByaW50ICIgICBjb25maWd1cmVkIGluICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgd2hlbiB0aGlzIEMgbGlicmFyeSB3YXMiCisrICAgIHByaW50ICIgICBidWlsdC4gIEZvciBlYWNoIG9wdGlvbiBncm91cCBuYW1lZCBPUFRJT05fZm9vLCBpdCAjZGVmaW5lcyIKKysgICAgcHJpbnQgIiAgIF9fT1BUSU9OX2ZvbyB0byBiZSAxIGlmIHRoZSBncm91cCBpcyBlbmFibGVkLCBvciAjZGVmaW5lcyB0aGF0IgorKyAgICBwcmludCAiICAgc3ltYm9sIHRvIGJlIDAgaWYgdGhlIGdyb3VwIGlzIGRpc2FibGVkLiAgKi8iCisrICAgIHByaW50ICIiCisrICAgIHByaW50ICIjaWZuZGVmIF9fR05VX09QVElPTl9HUk9VUFNfSCIKKysgICAgcHJpbnQgIiNkZWZpbmUgX19HTlVfT1BUSU9OX0dST1VQU19IIgorKyAgICBwcmludCAiIgorKworKyAgICAjIFByb2R1Y2UgYSBzb3J0ZWQgbGlzdCBvZiB2YXJpYWJsZSBuYW1lcy4KKysgICAgaT0wCisrICAgIGZvciAodmFyIGluIHZhcnMpCisrICAgICAgICBuYW1lc1tpKytdID0gdmFyCisrICAgIG4gPSBhc29ydCAobmFtZXMpCisrCisrICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKQorKyAgICB7CisrICAgICAgICB2YXIgPSBuYW1lc1tpXQorKyAgICAgICAgaWYgKHZhciB+IC9eT1BUSU9OXy8pCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKHZhcnNbdmFyXSA9PSAieSIpCisrICAgICAgICAgICAgICAgIHByaW50ICIjZGVmaW5lIF9fIiB2YXIgIiAxIgorKyAgICAgICAgICAgIGVsc2UgaWYgKHZhcnNbdmFyXSA9PSAibiIpCisrICAgICAgICAgICAgICAgIHByaW50ICIjZGVmaW5lIF9fIiB2YXIgIiAwIgorKwkgICAgZWxzZSBpZiAodmFyc1t2YXJdIH4gL15bMC05XSsvIHx8CisrCQkgICAgIHZhcnNbdmFyXSB+IC9eMHhbMC05YUFiQmNDZERlRWZGXSsvIHx8CisrCQkgICAgIHZhcnNbdmFyXSB+IC9eXCIvKQorKwkJIHByaW50ICIjZGVmaW5lIF9fIiB2YXIgIiAiIHZhcnNbdmFyXQorKwkgICAgZWxzZQorKwkJcHJpbnQgIi8qICN1bmRlZiBfXyIgdmFyICIgKi8iCisrICAgICAgICAgICAgIyBJZ25vcmUgdmFyaWFibGVzIHRoYXQgZG9uJ3QgaGF2ZSBib29sZWFuLCBpbnQsIGhleCwgb3IKKysJICAgICMgc3RyaW5nIHZhbHVlcy4gSWRlYWxseSwgdGhpcyB3b3VsZCBiZSBkcml2ZW4gYnkgdGhlIHR5cGVzCisrCSAgICAjIGdpdmVuIGluIG9wdGlvbi1ncm91cHMuZGVmLgorKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHByaW50ICIiCisrICAgIHByaW50ICIjZW5kaWYgLyogX19HTlVfT1BUSU9OX0dST1VQU19IICovIgorK30KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjkzMDk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK0Zyb20gOGZlMGQyOTQ4OGIzNzYwMTFjZGFhYTQ2MmQ1NTdmZmMwYjMxZmI2MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQ5OjI4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMjddIGVnbGliYzogSGVscCBib290c3RyYXAgY3Jvc3MgdG9vbGNoYWluCisKK1Rha2VuIGZyb20gRUdMSUJDLCByMTQ4NCArIHIxNTI1CisKKyAgICAgICAgMjAwNy0wMi0yMCAgSmltIEJsYW5keSAgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAgICAgICAgICogTWFrZWZpbGUgKGluc3RhbGwtaGVhZGVycyk6IFByZXNlcnZlIG9sZCBiZWhhdmlvcjogZGVwZW5kIG9uCisgICAgICAgICAgICAgICAgJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oIG9ubHkgaWYgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycworICAgICAgICAgICAgICAgIGlzIHNldDsgb3RoZXJ3aXNlLCBwbGFjZSBnbnUvc3R1YnMuaCBvbiB0aGUgJ2luc3RhbGwtb3RoZXJzJyBsaXN0LgorCisgICAgICAgIDIwMDctMDItMTYgIEppbSBCbGFuZHkgIDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgICAgICAgICAqIE1ha2VmaWxlOiBBbWVuZCBtYWtlIGluc3RhbGwtaGVhZGVycyB0byBpbnN0YWxsIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICBuZWNlc3NhcnkgZm9yIGJ1aWxkaW5nIGEgY3Jvc3MtY29tcGlsZXIuICBJbnN0YWxsIGdudS9zdHVicy5oIGFzCisgICAgICAgICAgICAgICAgcGFydCBvZiAnaW5zdGFsbC1oZWFkZXJzJywgbm90ICdpbnN0YWxsLW90aGVycycuCisgICAgICAgICAgICAgICAgSWYgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycyBpcyAneWVzJywgaW5zdGFsbCBhIGR1bW15IGNvcHkgb2YKKyAgICAgICAgICAgICAgICBnbnUvc3R1YnMuaCwgaW5zdGVhZCBvZiBjb21wdXRpbmcgdGhlIHJlYWwgdGhpbmcuCisgICAgICAgICAgICAgICAgKiBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oOiBOZXcgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8IDIyICsrKysrKysrKysrKysrKysrKysrKy0KKyBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oIHwgMTIgKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGY5MDYzOTEuLmU0ZTE0OWUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC02OSw5ICs2OSwxOCBAQCBzdWJkaXItZGlycyA9IGluY2x1ZGUKKyB2cGF0aCAlLmggJChzdWJkaXItZGlycykKKyAKKyAjIFdoYXQgdG8gaW5zdGFsbC4KKy1pbnN0YWxsLW90aGVycyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorIGluc3RhbGwtYmluLXNjcmlwdCA9CisgCisrIyBJZiB3ZSdyZSBib290c3RyYXBwaW5nLCBpbnN0YWxsIGEgZHVtbXkgZ251L3N0dWJzLmggYWxvbmcgd2l0aCB0aGUKKysjIG90aGVyIGhlYWRlcnMsIHNvICdtYWtlIGluc3RhbGwtaGVhZGVycycgcHJvZHVjZXMgYSB1c2VhYmxlIGluY2x1ZGUKKysjIHRyZWUuICBPdGhlcndpc2UsIGluc3RhbGwgZ251L3N0dWJzLmggbGF0ZXIsIGFmdGVyIHRoZSByZXN0IG9mIHRoZQorKyMgYnVpbGQgaXMgZG9uZS4KKytpZmVxICgkKGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMpLHllcykKKytpbnN0YWxsLWhlYWRlcnM6ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorK2Vsc2UKKytpbnN0YWxsLW90aGVycyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorK2VuZGlmCisrCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyBoZWFkZXJzICs9IGdudS9saWItbmFtZXMuaAorIGVuZGlmCitAQCAtMTUxLDYgKzE2MCwxNiBAQCBvdGhlcnM6ICQoY29tbW9uLW9ianBmeCl0ZXN0cnVuLnNoCisgCisgc3ViZGlyLXN0dWJzIDo9ICQoZm9yZWFjaCBkaXIsJChzdWJkaXJzKSwkKGNvbW1vbi1vYmpwZngpJChkaXIpL3N0dWJzKQorIAorKyMgZ251L3N0dWJzLmggZGVwZW5kcyAodmlhIHRoZSBzdWJkaXIgJ3N0dWJzJyB0YXJnZXRzKSBvbiBhbGwgdGhlIC5vCisrIyBmaWxlcyBpbiBFR0xJQkMuICBGb3IgYm9vdHN0cmFwcGluZyBhIEdDQy9FR0xJQkMgcGFpciwgYW4gZW1wdHkKKysjIGdudS9zdHVicy5oIGlzIGdvb2QgZW5vdWdoLgorK2lmZXEgKCQoaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycykseWVzKQorKyQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaDogaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCAkKCtmb3JjZSkKKysJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCisrCSQoSU5TVEFMTF9EQVRBKSAkPCAkQAorKworK2luc3RhbGxlZC1zdHVicyA9CisrZWxzZQorIGlmbmRlZiBhYmktdmFyaWFudHMKKyBpbnN0YWxsZWQtc3R1YnMgPSAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKyBlbHNlCitAQCAtMTc3LDYgKzE5Niw3IEBAICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaDogJCgrZm9yY2UpCisgCisgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXI6ICQoaW5zdGFsbGVkLXN0dWJzKQorIGVuZGlmCisrZW5kaWYKKyAKKyAKKyAjIFNpbmNlIHN0dWJzLmggaXMgbmV2ZXIgbmVlZGVkIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnksIHdlIHNpbXBsaWZ5IHRoZQorZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggYi9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMWQyYjY2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAorQEAgLTAsMCArMSwxMiBAQAorKy8qIFBsYWNlaG9sZGVyIHN0dWJzLmggZmlsZSBmb3IgYm9vdHN0cmFwcGluZy4KKysKKysgICBXaGVuIGJvb3RzdHJhcHBpbmcgYSBHQ0MvRUdMSUJDIHBhaXIsIEdDQyByZXF1aXJlcyB0aGF0IHRoZSBFR0xJQkMKKysgICBoZWFkZXJzIGJlIGluc3RhbGxlZCwgYnV0IHdlIGNhbid0IGZ1bGx5IGJ1aWxkIEVHTElCQyB3aXRob3V0IHRoYXQKKysgICBHQ0MuICBTbyB3ZSBydW4gdGhlIGNvbW1hbmQ6CisrCisrICAgICAgbWFrZSBpbnN0YWxsLWhlYWRlcnMgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycz15ZXMKKysKKysgICB0byBpbnN0YWxsIHRoZSBoZWFkZXJzIEdDQyBuZWVkcywgYnV0IGF2b2lkIGJ1aWxkaW5nIGNlcnRhaW4KKysgICBkaWZmaWN1bHQgaGVhZGVycy4gIFRoZSA8Z251L3N0dWJzLmg+IGhlYWRlciBkZXBlbmRzLCB2aWEgdGhlCisrICAgRUdMSUJDIHN1YmRpciAnc3R1YnMnIG1ha2UgdGFyZ2V0cywgb24gZXZlcnkgLm8gZmlsZSBpbiBFR0xJQkMsIGJ1dAorKyAgIGFuIGVtcHR5IHN0dWJzLmggbGlrZSB0aGlzIHdpbGwgZG8gZmluZSBmb3IgR0NDLiAgKi8KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJiOGExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBmZTJhZTRmODc3OTI4ZGQ2YmZmNWJhYzNmMTViY2U0YjUwZDJiZDEyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NTE6MTYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8yN10gZWdsaWJjOiBjaGVycnktcGlja2VkIGZyb20KKyBodHRwOi8vd3d3LmVnbGliYy5vcmcvYXJjaGl2ZXMvcGF0Y2hlcy9tc2cwMDc3Mi5odG1sCisKK0l0IGhhc24ndCB5ZXQgYmVlbiBtZXJnZWQgaW50byBnbGliYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHJlc29sdi9yZXNfbGliYy5jIHwgMTUgKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9yZXNvbHYvcmVzX2xpYmMuYyBiL3Jlc29sdi9yZXNfbGliYy5jCitpbmRleCBlZTNmYTIxLi4yOWUyMzQwIDEwMDY0NAorLS0tIGEvcmVzb2x2L3Jlc19saWJjLmMKKysrKyBiL3Jlc29sdi9yZXNfbGliYy5jCitAQCAtMjIsMTIgKzIyLDEzIEBACisgI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorICNpbmNsdWRlIDxyZXNvbHYuaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKy0KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKyAvKiBUaGUgZm9sbG93aW5nIGJpdCBpcyBjb3BpZWQgZnJvbSByZXNfZGF0YS5jICh3aGVyZSBpdCBpcyAjaWZkZWYnZWQKKyAgICBvdXQpIHNpbmNlIHJlc19pbml0KCkgc2hvdWxkIGdvIGludG8gbGliYy5zbyBidXQgdGhlIHJlc3Qgb2YgdGhhdAorICAgIGZpbGUgc2hvdWxkIG5vdC4gICovCisgCisrX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spOworIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmVzX2luaXRzdGFtcCBhdHRyaWJ1dGVfaGlkZGVuOworIC8qIFdlIGhhdmUgYXRvbWljIGluY3JlbWVudCBvcGVyYXRpb25zIG9uIDY0LWJpdCBwbGF0Zm9ybXMuICAqLworICNpZiBfX1dPUkRTSVpFID09IDY0CitAQCAtMzUsNyArMzYsNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Jlc19pbml0c3RhbXAgYXR0cmlidXRlX2hpZGRlbjsKKyAjIGRlZmluZSBhdG9taWNpbmN1bmxvY2sobG9jaykgKHZvaWQpIDAKKyAjIGRlZmluZSBhdG9taWNpbmModmFyKSBjYXRvbWljX2luY3JlbWVudCAoJih2YXIpKQorICNlbHNlCistX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spOworICMgZGVmaW5lIGF0b21pY2luY2xvY2sobG9jaykgX19saWJjX2xvY2tfbG9jayAobG9jaykKKyAjIGRlZmluZSBhdG9taWNpbmN1bmxvY2sobG9jaykgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKQorICMgZGVmaW5lIGF0b21pY2luYyh2YXIpICsrdmFyCitAQCAtOTQsNyArOTQsMTggQEAgcmVzX2luaXQodm9pZCkgeworIGludAorIF9fcmVzX21heWJlX2luaXQgKHJlc19zdGF0ZSByZXNwLCBpbnQgcHJlaW5pdCkKKyB7CisrCXN0YXRpYyB0aW1lX3QgbGFzdF9tdGltZTsKKysJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKysJaW50IHJldDsKKysKKyAJaWYgKHJlc3AtPm9wdGlvbnMgJiBSRVNfSU5JVCkgeworKwkJcmV0ID0gc3RhdCAoX1BBVEhfUkVTQ09ORiwgJnN0YXRidWYpOworKwkJX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrCQlpZiAoKHJldCA9PSAwKSAmJiAobGFzdF9tdGltZSAhPSBzdGF0YnVmLnN0X210aW1lKSkgeworKwkJCWxhc3RfbXRpbWUgPSBzdGF0YnVmLnN0X210aW1lOworKwkJCWF0b21pY2luYyAoX19yZXNfaW5pdHN0YW1wKTsKKysJCX0KKysJCV9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisgCQlpZiAoX19yZXNfaW5pdHN0YW1wICE9IHJlc3AtPl91Ll9leHQuaW5pdHN0YW1wKSB7CisgCQkJaWYgKHJlc3AtPm5zY291bnQgPiAwKQorIAkJCQlfX3Jlc19pY2xvc2UgKHJlc3AsIHRydWUpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNGM5YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitGcm9tIGJlNzI3MzIyNTY5ODA3NDM0N2E3MWRlNTgwMDY5NzdiYjMwNGQ3ZjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo1Mzo0NyArMDAwMAorU3ViamVjdDogW1BBVENIIDIyLzI3XSBlZ2xpYmM6IENsZWFyIGNhY2hlIGxpbmVzIG9uIHBwYzh4eAorCisyMDA3LTA2LTEzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29tPgorICAgICAgICAgICAgTWFyayBTaGlud2VsbCAgPHNoaW53ZWxsQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworICAgICAgICAoX19saWJjX3N0YXJ0X21haW4pOiBEZXRlY3QgOHh4IHBhcnRzIGFuZCBjbGVhcgorICAgICAgICBfX2NhY2hlX2xpbmVfc2l6ZSBpZiBkZXRlY3RlZC4KKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCisgICAgICAgIChETF9QTEFURk9STV9BVVhWKTogTGlrZXdpc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMgIHwgMTQgKysrKysrKysrKysrKy0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYyB8IDE1ICsrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCitpbmRleCBjMjUwNGZmLi5kNTBmMWNiIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworQEAgLTI0LDkgKzI0LDIxIEBAIGludCBfX2NhY2hlX2xpbmVfc2l6ZSBhdHRyaWJ1dGVfaGlkZGVuOworIC8qIFNjYW4gdGhlIEF1eCBWZWN0b3IgZm9yIHRoZSAiRGF0YSBDYWNoZSBCbG9jayBTaXplIiBlbnRyeS4gIElmIGZvdW5kCisgICAgdmVyaWZ5IHRoYXQgdGhlIHN0YXRpYyBleHRlcm4gX19jYWNoZV9saW5lX3NpemUgaXMgZGVmaW5lZCBieSBjaGVja2luZworICAgIGZvciBub3QgTlVMTC4gIElmIGl0IGlzIGRlZmluZWQgdGhlbiBhc3NpZ24gdGhlIGNhY2hlIGJsb2NrIHNpemUKKy0gICB2YWx1ZSB0byBfX2NhY2hlX2xpbmVfc2l6ZS4gICovCisrICAgdmFsdWUgdG8gX19jYWNoZV9saW5lX3NpemUuICBUaGlzIGlzIHVzZWQgYnkgbWVtc2V0IHRvCisrICAgb3B0aW1pemUgc2V0dGluZyB0byB6ZXJvLiAgV2UgaGF2ZSB0byBkZXRlY3QgOHh4IHByb2Nlc3NvcnMsIHdoaWNoCisrICAgaGF2ZSBidWdneSBkY2J6IGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbm5vdCByZXBvcnQgcGFnZSBmYXVsdHMKKysgICBjb3JyZWN0bHkuICBUaGF0IHJlcXVpcmVzIHJlYWRpbmcgU1BSLCB3aGljaCBpcyBhIHByaXZpbGVnZWQKKysgICBvcGVyYXRpb24uICBGb3J0dW5hdGVseSAyLjIuMTggYW5kIGxhdGVyIGVtdWxhdGVzIFBvd2VyUEMgbWZzcHIKKysgICByZWFkcyBmcm9tIHRoZSBQVlIgcmVnaXN0ZXIuICAgKi8KKyAjZGVmaW5lIERMX1BMQVRGT1JNX0FVWFYJCQkJCQkgICAgICBcCisgICAgICAgY2FzZSBBVF9EQ0FDSEVCU0laRToJCQkJCQkgICAgICBcCisrCWlmIChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwMjE4KQkJCQkgICAgICBcCisrCSAgewkJCQkJCQkJICAgICAgXAorKwkgICAgdW5zaWduZWQgcHZyID0gMDsJCQkJCQkgICAgICBcCisrCSAgICBhc20gKCJtZnNwciAlMCwgMjg3IiA6ICI9ciIgKHB2cikpOwkJCQkgICAgICBcCisrCSAgICBpZiAoKHB2ciAmIDB4ZmZmZjAwMDApID09IDB4MDA1MDAwMDApCQkJICAgICAgXAorKwkgICAgICBicmVhazsJCQkJCQkJICAgICAgXAorKwkgIH0JCQkJCQkJCSAgICAgIFwKKyAJX19jYWNoZV9saW5lX3NpemUgPSBhdi0+YV91bi5hX3ZhbDsJCQkJICAgICAgXAorIAlicmVhazsKKyAKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCitpbmRleCBhOTM2NGM3Li5hM2VkMWQ0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCitAQCAtNjgsMTEgKzY4LDI0IEBAIF9fbGliY19zdGFydF9tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsCisgICAgICAgcnRsZF9maW5pID0gTlVMTDsKKyAgICAgfQorIAorLSAgLyogSW5pdGlhbGl6ZSB0aGUgX19jYWNoZV9saW5lX3NpemUgdmFyaWFibGUgZnJvbSB0aGUgYXV4IHZlY3Rvci4gICovCisrICAvKiBJbml0aWFsaXplIHRoZSBfX2NhY2hlX2xpbmVfc2l6ZSB2YXJpYWJsZSBmcm9tIHRoZSBhdXggdmVjdG9yLgorKyAgICAgVGhpcyBpcyB1c2VkIGJ5IG1lbXNldCB0byBvcHRpbWl6ZSBzZXR0aW5nIHRvIHplcm8uICBXZSBoYXZlIHRvCisrICAgICBkZXRlY3QgOHh4IHByb2Nlc3NvcnMsIHdoaWNoIGhhdmUgYnVnZ3kgZGNieiBpbXBsZW1lbnRhdGlvbnMgdGhhdAorKyAgICAgY2Fubm90IHJlcG9ydCBwYWdlIGZhdWx0cyBjb3JyZWN0bHkuICBUaGF0IHJlcXVpcmVzIHJlYWRpbmcgU1BSLAorKyAgICAgd2hpY2ggaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbi4gIEZvcnR1bmF0ZWx5IDIuMi4xOCBhbmQgbGF0ZXIKKysgICAgIGVtdWxhdGVzIFBvd2VyUEMgbWZzcHIgcmVhZHMgZnJvbSB0aGUgUFZSIHJlZ2lzdGVyLiAgKi8KKyAgIGZvciAoRWxmVyAoYXV4dl90KSAqIGF2ID0gYXV4dmVjOyBhdi0+YV90eXBlICE9IEFUX05VTEw7ICsrYXYpCisgICAgIHN3aXRjaCAoYXYtPmFfdHlwZSkKKyAgICAgICB7CisgICAgICAgY2FzZSBBVF9EQ0FDSEVCU0laRToKKysJaWYgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjAyMTgpCisrCSAgeworKwkgICAgdW5zaWduZWQgcHZyID0gMDsKKysKKysJICAgIGFzbSAoIm1mc3ByICUwLCAyODciIDogIj1yIiAocHZyKSA6KTsKKysJICAgIGlmICgocHZyICYgMHhmZmZmMDAwMCkgPT0gMHgwMDUwMDAwMCkKKysJICAgICAgYnJlYWs7CisrCSAgfQorIAlfX2NhY2hlX2xpbmVfc2l6ZSA9IGF2LT5hX3VuLmFfdmFsOworIAlicmVhazsKKyAgICAgICB9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmM2Q3NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNzE4ZTdlNWRiMWM4YjA3M2FkYjlhNzllYzZmMTY3MjM4YzJkOGJkYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjU1OjUzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMjddIGVnbGliYzogUmVzb2x2ZSBfX2Zwc2NyX3ZhbHVlcyBvbiBTSDQKKworMjAxMC0wOS0yOSAgTm9idWhpcm8gSXdhbWF0c3UgIDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyAgICAgICAgICAgIEFuZHJldyBTdHViYnMgIDxhbXNAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICBSZXNvbHZlIFNIJ3MgX19mcHNjcl92YWx1ZXMgdG8gc3ltYm9sIGluIGxpYmMuc28uCisKKyAgICAgICAgKiBzeXNkZXBzL3NoL3NoNC9mcHUvZnB1X2NvbnRyb2wuaDogQWRkIEMrKyBfX3NldF9mcHNjciBwcm90b3R5cGUuCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgKEdMSUJDXzIuMik6IEFkZCBfX2Zwc2NyX3ZhbHVlcy4KKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyAoX19fZnBzY3JfdmFsdWVzKTogTmV3IGNvbnN0YW50LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIHwgIDEgKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIHwgMTEgKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKK2luZGV4IGUwOTM4YzQuLmNhMWQ3ZGEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKK0BAIC0yLDYgKzIsNyBAQCBsaWJjIHsKKyAgIEdMSUJDXzIuMiB7CisgICAgICMgZnVuY3Rpb25zIHVzZWQgaW4gb3RoZXIgbGlicmFyaWVzCisgICAgIF9feHN0YXQ2NDsgX19meHN0YXQ2NDsgX19seHN0YXQ2NDsKKysgICAgX19mcHNjcl92YWx1ZXM7CisgCisgICAgICMgYSoKKyAgICAgYWxwaGFzb3J0NjQ7CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUworaW5kZXggYTAyYjdlMi4uYjliZTMyNiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUworQEAgLTMwLDMgKzMwLDE0IEBAIEVOVFJZIChfX3N5c2NhbGxfZXJyb3IpCisgCisgI2RlZmluZSBfX3N5c2NhbGxfZXJyb3IgX19zeXNjYWxsX2Vycm9yXzEKKyAjaW5jbHVkZSA8c3lzZGVwcy91bml4L3NoL3N5c2RlcC5TPgorKworKyAgICAgICAuZGF0YQorKyAgICAgICAuYWxpZ24gMworKyAgICAgICAuZ2xvYmwgX19fZnBzY3JfdmFsdWVzCisrICAgICAgIC50eXBlIF9fX2Zwc2NyX3ZhbHVlcywgQG9iamVjdAorKyAgICAgICAuc2l6ZSBfX19mcHNjcl92YWx1ZXMsIDgKKytfX19mcHNjcl92YWx1ZXM6CisrICAgICAgIC5sb25nIDAKKysgICAgICAgLmxvbmcgMHg4MDAwMAorK3dlYWtfYWxpYXMgKF9fX2Zwc2NyX3ZhbHVlcywgX19mcHNjcl92YWx1ZXMpCisrCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxNGUyOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTY4NDIgQEAKK0Zyb20gMmE1ZDdiY2YwZmY3OTFjOTVlZTEzODg3NzI0MDhhMWJmNDQ1NDY5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjMzOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMjddIGVnbGliYzogRm9yd2FyZCBwb3J0IGVnbGliYyBvcHRpb25zIGdyb3VwcyBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArLQorIE1ha2VydWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKworIGFyZ3AvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGFyZ3AvYXJncC1mbXRzdHJlYW0uYyAgICAgICAgICAgICAgICAgICB8ICAgMjUgKy0KKyBhcmdwL2FyZ3AtaGVscC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICstCisgYXJncC9hcmdwLW5hbWVmcm9iLmggICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgY2F0Z2V0cy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQorIGNyeXB0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKy0KKyBjcnlwdC9jcnlwdC1lbnRyeS5jICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyBjcnlwdC9jcnlwdF9jb21tb24uYyAgICAgICAgICAgICAgICAgICAgfCAgIDQyICsKKyBjcnlwdC9jcnlwdF91dGlsLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4IC0KKyBjc3UvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBkZWJ1Zy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQxICstCisgZGVidWcvc2VnZmF1bHQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQorIGRlYnVnL3RzdC1jaGsxLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKworIGRsZmNuL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KKyBlbGYvZGwtc3VwcG9ydC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBlbGYvcnRsZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCisgZXh0cmEtbGliLm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIGdycC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIGhlc2lvZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBpY29udi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyBpY29udi9nY29udl9kYi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBpY29udi9nY29udl90cmFucy5jICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyBpY29udi9pY29udl9wcm9nLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICsKKyBpY29udmRhdGEvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAgIDI3ICstCisgaW5jbHVkZS9uZXRkYi5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCisgaW5ldC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArLQorIGludGwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KKyBpbnRsL2RjaWdldHRleHQuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM5ICstCisgaW8vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIGxpYmlkbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBsaWJpZG4vdG91dGY4LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCisgbGliaW8vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NiArLQorIGxpYmlvL19fZnB1cmdlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJpby9maWxlb3BzLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCisgbGliaW8vaW9md2lkZS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgbGliaW8vaW9zZWVrb2ZmLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxpYmlvL2lvc2Vla3Bvcy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJpby9pb3NldGJ1ZmZlci5jICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKKyBsaWJpby9saWJpb1AuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgbGliaW8vd2R1bW15ZmlsZW9wcy5jICAgICAgICAgICAgICAgICAgIHwgIDE2MSArCisgbG9jYWxlL0MtY3R5cGUuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArCisgbG9jYWxlL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MSArLQorIGxvY2FsZS9jYXRuYW1lcy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDggKworIGxvY2FsZS9kdW1teS1zZXRsb2NhbGUuYyAgICAgICAgICAgICAgICB8ICAgMzMgKworIGxvY2FsZS9sb2NhbGVpbmZvLmggICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYyAgICAgICAgICAgfCAgICA2ICsKKyBsb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jICAgICAgICAgICAgfCAgIDE3ICstCisgbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMgICAgICAgICAgICAgIHwgICAyNyArLQorIGxvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jICAgICAgICAgICB8ICAgIDUgKworIGxvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMgICAgICAgICAgICAgICB8ICAgMzEgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jICAgICAgICAgICAgfCAgICAyICstCisgbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jICAgICAgICAgICAgIHwgICAgOCArCisgbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYyAgICAgICAgICAgICAgIHwgICAgNSArLQorIGxvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmggICAgICAgICAgICAgICB8ICAgNTkgKy0KKyBsb2NhbGUvc2V0bG9jYWxlLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDMwIC0KKyBsb2NhbGUveGxvY2FsZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsKKyBsb2NhbGVkYXRhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICstCisgbG9naW4vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQorIG1hbGxvYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KKyBtYWxsb2MvbWVtdXNhZ2UuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCisgbWFsbG9jL21lbXVzYWdlLnNoICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIG1hdGgvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBtaXNjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI1ICstCisgbWlzYy9lcnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCisgbWlzYy9lcnJvci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgbWlzYy90c3QtZWZnY3Z0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIG5pcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzEgKy0KKyBucHRsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI4ICstCisgbnB0bC9wdGhyZWFkX2NyZWF0ZS5jICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgbnNjZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMyArLQorIG5zY2QvbmlzX2hhc2guYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIG5zcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjcgKy0KKyBuc3MvZml4ZWQtbnNzd2l0Y2guY29uZiAgICAgICAgICAgICAgICAgfCAgIDIyICsKKyBuc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zICAgICAgICAgICAgfCAgMTIxICsKKyBuc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMgICAgICAgICAgICAgICAgfCAgODAzICsrKworIG5zcy9nZXRlbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDYgKy0KKyBuc3MvZ2V0bnNzZW50X3IuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICstCisgbnNzL25zc3dpdGNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwOSArLQorIG5zcy9uc3N3aXRjaC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyBwb3NpeC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk0ICstCisgcG9zaXgvYnVnLXJlZ2V4MS5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgcG9zaXgvYnVnLXJlZ2V4Ni5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArLQorIHBvc2l4L2ZubWF0Y2guYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBwb3NpeC9mbm1hdGNoX2xvb3AuYyAgICAgICAgICAgICAgICAgICAgfCAgIDIzICstCisgcG9zaXgvZ2xvYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArLQorIHBvc2l4L3JlZ2NvbXAuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTggKy0KKyBwb3NpeC9yZWdleC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsKKyBwb3NpeC9yZWdleF9pbnRlcm5hbC5jICAgICAgICAgICAgICAgICAgfCAgIDQ1ICstCisgcG9zaXgvcmVnZXhfaW50ZXJuYWwuaCAgICAgICAgICAgICAgICAgIHwgICAyMyArLQorIHBvc2l4L3JlZ2V4ZWMtY29tcGF0LmMgICAgICAgICAgICAgICAgICB8ICAgMzkgKworIHBvc2l4L3JlZ2V4ZWMuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzEgKy0KKyBwb3NpeC94cmVnZXguYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4MjE1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBwd2QvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyByZXNvbHYvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICstCisgc3RkaW8tY29tbW9uL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAzNSArLQorIHN0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaCAgICAgICAgICAgICB8ICAgMTMgKworIHN0ZGlvLWNvbW1vbi9meHByaW50Zi5jICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0ZGlvLWNvbW1vbi9wcmludGZfZnAuYyAgICAgICAgICAgICAgICB8ICAgMjIgKworIHN0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYyAgICAgICAgICAgICB8ICAgMTMgKworIHN0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jICAgICAgICAgICAgICB8ICAgIDggKworIHN0ZGlvLWNvbW1vbi9zY2FuZjE0LmMgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYyAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jICAgICAgICAgICAgICB8ICAgIDQgKy0KKyBzdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdGRpby1jb21tb24vdmZwcmludGYuYyAgICAgICAgICAgICAgICAgfCAgIDMxICstCisgc3RkaW8tY29tbW9uL3Zmc2NhbmYuYyAgICAgICAgICAgICAgICAgIHwgICA1MyArLQorIHN0ZGxpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzQgKy0KKyBzdGRsaWIvc3RydG9kX2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyBzdGRsaWIvdHN0LXN0cnRvZC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJlYW1zL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCisgc3RyaW5nL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArLQorIHN0cmluZy9zdHJjb2xsX2wuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmluZy9zdHJlcnJvcl9sLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmluZy9zdHJ4ZnJtX2wuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmluZy90ZXN0LXN0cmNtcC5jICAgICAgICAgICAgICAgICAgICB8ICAgMjggLQorIHN0cmluZy90c3Qtc3RyeGZybS5jICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN0cmluZy90c3Qtc3RyeGZybTIuYyAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN1bnJwYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDQgKy0KKyBzeXNkZXBzL2FybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCisgc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmggICAgICAgICAgICAgIHwgICAgOCArCisgc3lzZGVwcy9nbnUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQorIHN5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZSAgICAgICB8ICAgMjcgKy0KKyBzeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMgfCAgIDQwICstCisgc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oIHwgICAyNCArLQorIHN5c2RlcHMvbnB0bC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oICAgICAgICAgICB8ICAgNDUgKworIHN5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaCAgICAgICAgICB8ICAgNTAgKy0KKyBzeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jICAgICAgICAgfCAgIDcyICsKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYyAgICAgfCAgICA2ICsKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMgICAgfCAgICAzICsKKyB0aW1lL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgdGltZS9zdHJmdGltZV9sLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArLQorIHRpbWUvc3RycHRpbWVfbC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKy0KKyB0aW1lem9uZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgd2NzbWJzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNyArLQorIHdjc21icy93Y3NtYnNsb2FkLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIHdjdHlwZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKy0KKyAxMzkgZmlsZXMgY2hhbmdlZCwgMTEzNjMgaW5zZXJ0aW9ucygrKSwgNTgzIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnlwdC9jcnlwdF9jb21tb24uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpby93ZHVtbXlmaWxlb3BzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbG9jYWxlL2NhdG5hbWVzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zY2QvbmlzX2hhc2guYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc3MvZml4ZWQtbnNzd2l0Y2guY29uZgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBwb3NpeC9yZWdleGVjLWNvbXBhdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHBvc2l4L3hyZWdleC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMKKworZGlmZiAtLWdpdCBhL01ha2Vjb25maWcgYi9NYWtlY29uZmlnCitpbmRleCBmMTM2Yjg4Li41MmRhZThmIDEwMDY0NAorLS0tIGEvTWFrZWNvbmZpZworKysrIGIvTWFrZWNvbmZpZworQEAgLTYwOSw3ICs2MDksNyBAQCBlbGYtb2JqcGZ4ID0gJChjb21tb24tb2JqcGZ4KWVsZi8KKyAjIGFuZCBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbSwgY2F1c2VzIHRoYXQgcHJvZ3JhbSB3aXRoIHRob3NlCisgIyBhcmd1bWVudHMgdG8gYmUgcnVuIG9uIHRoZSBob3N0IGZvciB3aGljaCB0aGUgbGlicmFyeSBpcyBidWlsdC4KKyBpZm5kZWYgdGVzdC13cmFwcGVyCistdGVzdC13cmFwcGVyID0KKyt0ZXN0LXdyYXBwZXIgPSAkKGNyb3NzLXRlc3Qtd3JhcHBlcikKKyBlbmRpZgorICMgTGlrZXdpc2UsIGJ1dCB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSBpcyBwcmVjZWRlZCBieQorICMgPHZhcmlhYmxlPj08dmFsdWU+IGFzc2lnbm1lbnRzIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCitAQCAtMTA4OSw2ICsxMDg5LDI0IEBAIGxpYm0gPSAkKGNvbW1vbi1vYmpwZngpbWF0aC9saWJtLmEKKyBsaWJtdmVjID0gJChjb21tb24tb2JqcGZ4KW1hdGh2ZWMvbGlibXZlYy5hCisgZW5kaWYKKyAKKysjIEdlbmVyYXRlIGEgaGVhZGVyIGZpbGUgdGhhdCAjZGVmaW5lcyBwcmVwcm9jZXNzb3Igc3ltYm9scyBpbmRpY2F0aW5nCisrIyB3aGljaCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkLiAgTm90ZSB0aGF0IHRoZSBvcHRpb24tZ3JvdXBzLmNvbmZpZyBmaWxlCisrIyBtYXkgbm90IGV4aXN0IGF0IGFsbC4KKytiZWZvcmUtY29tcGlsZSArPSAkKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuaAorK2NvbW1vbi1nZW5lcmF0ZWQgKz0gZ251L29wdGlvbi1ncm91cHMuaCBnbnUvb3B0aW9uLWdyb3Vwcy5zdG1wCisraGVhZGVycyArPSBnbnUvb3B0aW9uLWdyb3Vwcy5oCisrJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLmg6ICQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5zdG1wOyBAOgorKyQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5zdG1wOgkJCQkJXAorKwkJJCguLilzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCQkJCVwKKysJCSQoLi4pb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cwkJCQlcCisrCQkkKHdpbGRjYXJkICQoY29tbW9uLW9ianBmeClvcHRpb24tZ3JvdXBzLmNvbmZpZykKKysJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCisrCUBybSAtZiAke0A6c3RtcD1UfSAkQAorKwlMQ19BTEw9QyAkKEFXSykgLWYgJF4gPiAke0A6c3RtcD1UfQorKwkkKG1vdmUtaWYtY2hhbmdlKSAke0A6c3RtcD1UfSAke0A6c3RtcD1ofQorKwl0b3VjaCAkQAorKworKworICMgVGhlc2UgYXJlIHRoZSBzdWJkaXJlY3RvcmllcyBjb250YWluaW5nIHRoZSBsaWJyYXJ5IHNvdXJjZS4gIFRoZSBvcmRlcgorICMgaXMgbW9yZSBvciBsZXNzIGFyYml0cmFyeS4gIFRoZSBzb3J0aW5nIHN0ZXAgd2lsbCB0YWtlIGNhcmUgb2YgdGhlCisgIyBkZXBlbmRlbmNpZXMuCitkaWZmIC0tZ2l0IGEvTWFrZXJ1bGVzIGIvTWFrZXJ1bGVzCitpbmRleCBmOWNhM2Y1Li4xZGQ0MWFhIDEwMDY0NAorLS0tIGEvTWFrZXJ1bGVzCisrKysgYi9NYWtlcnVsZXMKK0BAIC00NTYsNiArNDU2LDI1IEBAIGRlZmluZSBzZWQtcmVtb3ZlLW9ianBmeAorIGVuZGVmCisgZW5kaWYKKyAMCisrIyBJbmNsdWRlIHRhcmdldHMgaW4gdGhlIHNlbGVjdGVkIG9wdGlvbiBncm91cHMuCisrYXV4ICAgICAgICAgICAgICAgICAgKz0gJChhdXgteSkKKytleHRyYS1saWJzICAgICAgICAgICArPSAkKGV4dHJhLWxpYnMteSkKKytleHRyYS1saWJzLW90aGVycyAgICArPSAkKGV4dHJhLWxpYnMtb3RoZXJzLXkpCisrZXh0cmEtb2JqcyAgICAgICAgICAgKz0gJChleHRyYS1vYmpzLXkpCisraW5zdGFsbC1iaW4gICAgICAgICAgKz0gJChpbnN0YWxsLWJpbi15KQorK2luc3RhbGwtb3RoZXJzICAgICAgICs9ICQoaW5zdGFsbC1vdGhlcnMteSkKKytpbnN0YWxsLXNiaW4gICAgICAgICArPSAkKGluc3RhbGwtc2Jpbi15KQorK21vZHVsZXMgICAgICAgICAgICAgICs9ICQobW9kdWxlcy15KQorK290aGVycyAgICAgICAgICAgICAgICs9ICQob3RoZXJzLXkpCisrb3RoZXJzLXBpZSAgICAgICAgICAgKz0gJChvdGhlcnMtcGllLXkpCisrcm91dGluZXMgICAgICAgICAgICAgKz0gJChyb3V0aW5lcy15KQorK3N0YXRpYy1vbmx5LXJvdXRpbmVzICs9ICQoc3RhdGljLW9ubHktcm91dGluZXMteSkKKytzeXNkZXBfcm91dGluZXMgICAgICArPSAkKHN5c2RlcF9yb3V0aW5lcy15KQorK3Rlc3Qtc3JjcyAgICAgICAgICAgICs9ICQodGVzdC1zcmNzLXkpCisrdGVzdHMgICAgICAgICAgICAgICAgKz0gJCh0ZXN0cy15KQorK3h0ZXN0cyAgICAgICAgICAgICAgICs9ICQoeHRlc3RzLXkpCisrCisrDAorICMgTW9kaWZ5IHRoZSBsaXN0IG9mIHJvdXRpbmVzIHdlIGJ1aWxkIGZvciBkaWZmZXJlbnQgdGFyZ2V0cworIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCitkaWZmIC0tZ2l0IGEvYXJncC9NYWtlZmlsZSBiL2FyZ3AvTWFrZWZpbGUKK2luZGV4IDFhODc2MjkuLmY3YzFlNDAgMTAwNjQ0CistLS0gYS9hcmdwL01ha2VmaWxlCisrKysgYi9hcmdwL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBhcmdwLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGFyZ3AKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK2RpZmYgLS1naXQgYS9hcmdwL2FyZ3AtZm10c3RyZWFtLmMgYi9hcmdwL2FyZ3AtZm10c3RyZWFtLmMKK2luZGV4IDJiODQ1ZTAuLmMzNDRlN2IgMTAwNjQ0CistLS0gYS9hcmdwL2FyZ3AtZm10c3RyZWFtLmMKKysrKyBiL2FyZ3AvYXJncC1mbXRzdHJlYW0uYworQEAgLTQyLDYgKzQyLDcgQEAKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPHdjaGFyLmg+CisgIyBpbmNsdWRlIDxsaWJpby9saWJpb1AuaD4KKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBkZWZpbmUgX192c25wcmludGYocywgbCwgZiwgYSkgX0lPX3ZzbnByaW50ZiAocywgbCwgZiwgYSkKKyAjZW5kaWYKKyAKK0BAIC0xMDAsNyArMTAxLDExIEBAIF9fYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChmcyk7CisgICBpZiAoZnMtPnAgPiBmcy0+YnVmKQorICAgICB7CisrI2lmZGVmIF9MSUJDCisgICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrI2Vsc2UKKysgICAgICBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIGZzLT5wIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisgICAgIH0KKyAgIGZyZWUgKGZzLT5idWYpOworICAgZnJlZSAoZnMpOworQEAgLTE0NSw5ICsxNTAsMTcgQEAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisgCSAgICAgIHNpemVfdCBpOworIAkgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkOyBpKyspCisgCQl7CisrI2lmZGVmIF9MSUJDCisgCQkgIGlmIChfSU9fZndpZGUgKGZzLT5zdHJlYW0sIDApID4gMCkKKy0JCSAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgICAgICB7CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICAgICAgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgICB9CisgCQkgIGVsc2UKKysjZW5kaWYKKyAJCSAgICBwdXRjX3VubG9ja2VkICgnICcsIGZzLT5zdHJlYW0pOworIAkJfQorIAkgICAgfQorQEAgLTMwOCw5ICszMjEsMTcgQEAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisgCSAgICAgICpubCsrID0gJyAnOworIAkgIGVsc2UKKyAJICAgIGZvciAoaSA9IDA7IGkgPCBmcy0+d21hcmdpbjsgKytpKQorKyNpZmRlZiBfTElCQworIAkgICAgICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCistCQlwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgIHsKKysjaWZkZWYgT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgfQorIAkgICAgICBlbHNlCisrI2VuZGlmCisgCQlwdXRjX3VubG9ja2VkICgnICcsIGZzLT5zdHJlYW0pOworIAorIAkgIC8qIENvcHkgdGhlIHRhaWwgb2YgdGhlIG9yaWdpbmFsIGJ1ZmZlciBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlcgorZGlmZiAtLWdpdCBhL2FyZ3AvYXJncC1oZWxwLmMgYi9hcmdwL2FyZ3AtaGVscC5jCitpbmRleCBiMDU1ZTQ1Li42YjNjNGMxIDEwMDY0NAorLS0tIGEvYXJncC9hcmdwLWhlbHAuYworKysrIGIvYXJncC9hcmdwLWhlbHAuYworQEAgLTUxLDYgKzUxLDcgQEAgY2hhciAqYWxsb2NhICgpOworICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8Li4vbGliaW8vbGliaW9QLmg+CisgIyBpbmNsdWRlIDx3Y2hhci5oPgorKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjZW5kaWYKKyAKKyAjaWZuZGVmIF8KK0BAIC0xNzAyLDcgKzE3MDMsNyBAQCBjaGFyICpfX2FyZ3BfYmFzZW5hbWUgKGNoYXIgKm5hbWUpCisgfQorIAorIGNoYXIgKgorLV9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKHZvaWQpCisrKF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUpICh2b2lkKQorIHsKKyAjIGlmIEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fU0hPUlRfTkFNRQorICAgcmV0dXJuIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOworQEAgLTE4NzMsOSArMTg3NCwxNyBAQCBfX2FyZ3BfZmFpbHVyZSAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgZXJybnVtLAorICNlbmRpZgorIAkgICAgfQorIAorKyNpZmRlZiBfTElCQworIAkgIGlmIChfSU9fZndpZGUgKHN0cmVhbSwgMCkgPiAwKQorLQkgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdHJlYW0pOworKyAgICAgICAgICAgIHsKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCdcbicsIHN0cmVhbSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgIGFib3J0ICgpOworKyNlbmRpZgorKyAgICAgICAgICAgIH0KKyAJICBlbHNlCisrI2VuZGlmCisgCSAgICBwdXRjX3VubG9ja2VkICgnXG4nLCBzdHJlYW0pOworIAorICNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKK2RpZmYgLS1naXQgYS9hcmdwL2FyZ3AtbmFtZWZyb2IuaCBiL2FyZ3AvYXJncC1uYW1lZnJvYi5oCitpbmRleCBmNjdjNThmLi5lMjAwMmRjIDEwMDY0NAorLS0tIGEvYXJncC9hcmdwLW5hbWVmcm9iLmgKKysrKyBiL2FyZ3AvYXJncC1uYW1lZnJvYi5oCitAQCAtNzYsMTAgKzc2LDEyIEBACisgI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbgorICNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luIGFyZ3BfZm10c3RyZWFtX3dtYXJnaW4KKyAKKysjaWYgMAorICNpbmNsdWRlICJtZW1wY3B5LmgiCisgI2luY2x1ZGUgInN0cmNhc2UuaCIKKyAjaW5jbHVkZSAic3RyY2hybnVsLmgiCisgI2luY2x1ZGUgInN0cm5kdXAuaCIKKysjZW5kaWYKKyAKKyAvKiBub3JtYWwgbGliYyBmdW5jdGlvbnMgd2UgY2FsbCAqLworICN1bmRlZiBfX2Zsb2NrZmlsZQorZGlmZiAtLWdpdCBhL2NhdGdldHMvTWFrZWZpbGUgYi9jYXRnZXRzL01ha2VmaWxlCitpbmRleCA0NjI0YTg4Li4wNTcxNGZkIDEwMDY0NAorLS0tIGEvY2F0Z2V0cy9NYWtlZmlsZQorKysrIGIvY2F0Z2V0cy9NYWtlZmlsZQorQEAgLTIyLDIwICsyMiwyMyBAQCBzdWJkaXIJOj0gY2F0Z2V0cworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBoZWFkZXJzCQk9IG5sX3R5cGVzLmgKKy1yb3V0aW5lcwk9IGNhdGdldHMgb3Blbl9jYXRhbG9nCistb3RoZXJzCQk9IGdlbmNhdAorLWluc3RhbGwtYmluCT0gZ2VuY2F0CistZXh0cmEtb2Jqcwk9ICQoZ2VuY2F0LW1vZHVsZXM6PS5vKQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgICA6PSBjYXRnZXRzIG9wZW5fY2F0YWxvZworK290aGVycy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICAgICA6PSBnZW5jYXQKKytpbnN0YWxsLWJpbi0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgOj0gZ2VuY2F0CisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgIDo9ICQoZ2VuY2F0LW1vZHVsZXM6PS5vKQorIAorLXRlc3RzID0gdHN0LWNhdGdldHMKKy10ZXN0LXNyY3MgPSB0ZXN0LWdlbmNhdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgICAgICA6PSB0c3QtY2F0Z2V0cworK3Rlc3Qtc3Jjcy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICA6PSB0ZXN0LWdlbmNhdAorIAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpKQorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClkZS9saWJjLmNhdCAkKG9ianBmeCl0ZXN0MS5jYXQgJChvYmpwZngpdGVzdDIuY2F0IFwKKyAJCSAkKG9ianBmeClzYW1wbGUuU0pJUy5jYXQgJChvYmpwZngpdGVzdC1nZW5jYXQub3V0CisgZW5kaWYKKy0KKytlbmRpZgorIGdlbmNhdC1tb2R1bGVzCT0geG1hbGxvYworIAorICMgVG8gZmluZCB4bWFsbG9jLmMKK2RpZmYgLS1naXQgYS9jcnlwdC9NYWtlZmlsZSBiL2NyeXB0L01ha2VmaWxlCitpbmRleCAzNGM0ZGQ3Li43YzE4Yzg4IDEwMDY0NAorLS0tIGEvY3J5cHQvTWFrZWZpbGUKKysrKyBiL2NyeXB0L01ha2VmaWxlCitAQCAtMTgsMjEgKzE4LDI1IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBjcnlwdCgpIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gY3J5cHQKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzIDo9IGNyeXB0LmgKKyAKKy1leHRyYS1saWJzIDo9IGxpYmNyeXB0CistZXh0cmEtbGlicy1vdGhlcnMgOj0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0NSWVBUKSA6PSBsaWJjcnlwdAorK2V4dHJhLWxpYnMtb3RoZXJzLXkgOj0gJChleHRyYS1saWJzLXkpCisgCistbGliY3J5cHQtcm91dGluZXMgOj0gY3J5cHQtZW50cnkgbWQ1LWNyeXB0IHNoYTI1Ni1jcnlwdCBzaGE1MTItY3J5cHQgY3J5cHQgXAorLQkJICAgICBjcnlwdF91dGlsCisrbGliY3J5cHQtcm91dGluZXMgOj1jcnlwdC1lbnRyeSAgbWQ1LWNyeXB0IHNoYTI1Ni1jcnlwdCBzaGE1MTItY3J5cHQgY3J5cHRfY29tbW9uCisrbGliY3J5cHQtcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0NSWVBUX1VGQykgOj0gY3J5cHQgY3J5cHRfdXRpbAorK2xpYmNyeXB0LXJvdXRpbmVzICs9ICQobGliY3J5cHQtcm91dGluZXMteSkKKyAKKy10ZXN0cyA6PSBjZXJ0IG1kNWMtdGVzdCBzaGEyNTZjLXRlc3Qgc2hhNTEyYy10ZXN0IGJhZHNhbHR0ZXN0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NSWVBUKSA6PSBtZDVjLXRlc3Qgc2hhMjU2Yy10ZXN0IHNoYTUxMmMtdGVzdCBiYWRzYWx0dGVzdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DUllQVF9VRkMpICs9IGNlcnQKKyAKKy1pZmVxICgkKGNyeXB0LWluLWxpYmMpLHllcykKKytpZmVxICgkKGNyeXB0LWluLWxpYmMpJChPUFRJT05fRUdMSUJDX0NSWVBUKSx5ZXN5KQorIHJvdXRpbmVzICs9ICQobGliY3J5cHQtcm91dGluZXMpCisgZW5kaWYKKyAKK0BAIC00NCw3ICs0OCw3IEBAIExETElCUy1jcnlwdC5zbyA9IC1sZnJlZWJsMworIGVsc2UKKyBsaWJjcnlwdC1yb3V0aW5lcyArPSBtZDUgc2hhMjU2IHNoYTUxMgorIAorLXRlc3RzICs9IG1kNXRlc3Qgc2hhMjU2dGVzdCBzaGE1MTJ0ZXN0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NSWVBUKSArPSBtZDV0ZXN0IHNoYTI1NnRlc3Qgc2hhNTEydGVzdAorIAorICMgVGhlIHRlc3QgbWQ1dGVzdC1naWFudCB1c2VzIHVwIHRvIDQwMCBNQiBvZiBSU1MgYW5kIHJ1bnMgb24gYSBmYXN0CisgIyBtYWNoaW5lIG92ZXIgYSBtaW51dGUuCitAQCAtNjQsOCArNjgsMTAgQEAgJChvYmpwZngpc2hhMjU2dGVzdDogJChwYXRzdWJzdCAlLCAkKG9ianBmeCklLm8sJChzaGEyNTYtcm91dGluZXMpKQorICQob2JqcGZ4KXNoYTUxMnRlc3Q6ICQocGF0c3Vic3QgJSwgJChvYmpwZngpJS5vLCQoc2hhNTEyLXJvdXRpbmVzKSkKKyBlbmRpZgorIAorK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19DUllQVCkseSkKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICQoYWRkcHJlZml4ICQob2JqcGZ4KSwkKHRlc3RzKSk6ICQob2JqcGZ4KWxpYmNyeXB0LnNvCisgZWxzZQorICQoYWRkcHJlZml4ICQob2JqcGZ4KSwkKHRlc3RzKSk6ICQob2JqcGZ4KWxpYmNyeXB0LmEKKyBlbmRpZgorK2VuZGlmICMgZWdsaWJjOiBPUFRJT05fRUdMSUJDX0NSWVBUCitkaWZmIC0tZ2l0IGEvY3J5cHQvY3J5cHQtZW50cnkuYyBiL2NyeXB0L2NyeXB0LWVudHJ5LmMKK2luZGV4IDdlNjU1YmEuLjZhZTVjMmIgMTAwNjQ0CistLS0gYS9jcnlwdC9jcnlwdC1lbnRyeS5jCisrKysgYi9jcnlwdC9jcnlwdC1lbnRyeS5jCitAQCAtMjcsNiArMjcsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNlbmRpZgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8Zmlwcy1wcml2YXRlLmg+CisgCitAQCAtNzYsOSArNzcsMTEgQEAgX19jcnlwdF9yIChrZXksIHNhbHQsIGRhdGEpCisgICAgICBjb25zdCBjaGFyICpzYWx0OworICAgICAgc3RydWN0IGNyeXB0X2RhdGEgKiBfX3Jlc3RyaWN0IGRhdGE7CisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDCisgICB1ZmNfbG9uZyByZXNbNF07CisgICBjaGFyIGt0YWJbOV07CisgICB1ZmNfbG9uZyB4eCA9IDI1OyAvKiB0byBjb3BlIHdpdGggR0NDIGxvbmcgbG9uZyBjb21waWxlciBidWdzICovCisrI2VuZGlmIC8qX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyovCisgCisgI2lmZGVmIF9MSUJDCisgICAvKiBUcnkgdG8gZmluZCBvdXQgd2hldGhlciB3ZSBoYXZlIHRvIHVzZSBNRDUgZW5jcnlwdGlvbiByZXBsYWNlbWVudC4gICovCitAQCAtMTA1LDYgKzEwOCw3IEBAIF9fY3J5cHRfciAoa2V5LCBzYWx0LCBkYXRhKQorIAkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgY3J5cHRfZGF0YSkpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDCisgICAvKgorICAgICogSGFjayBERVMgdGFibGVzIGFjY29yZGluZyB0byBzYWx0CisgICAgKi8KK0BAIC0xNDQsNiArMTQ4LDEwIEBAIF9fY3J5cHRfciAoa2V5LCBzYWx0LCBkYXRhKQorICAgICovCisgICBfdWZjX291dHB1dF9jb252ZXJzaW9uX3IgKHJlc1swXSwgcmVzWzFdLCBzYWx0LCBkYXRhKTsKKyAgIHJldHVybiBkYXRhLT5jcnlwdF8zX2J1ZjsKKysjZWxzZSAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisrICBfX3NldF9lcnJubyAoRU5PU1lTKTsKKysgIHJldHVybiBOVUxMOworKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisgfQorIHdlYWtfYWxpYXMgKF9fY3J5cHRfciwgY3J5cHRfcikKKyAKK0BAIC0xNjgsNyArMTc2LDEyIEBAIGNyeXB0IChrZXksIHNhbHQpCisgICAgIHJldHVybiBfX3NoYTUxMl9jcnlwdCAoa2V5LCBzYWx0KTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQworICAgcmV0dXJuIF9fY3J5cHRfciAoa2V5LCBzYWx0LCAmX3VmY19mb29iYXIpOworKyNlbHNlIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKysgIF9fc2V0X2Vycm5vIChFTk9TWVMpOworKyAgcmV0dXJuIE5VTEw7CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvY3J5cHQvY3J5cHRfY29tbW9uLmMgYi9jcnlwdC9jcnlwdF9jb21tb24uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNjZTZhMzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2NyeXB0L2NyeXB0X2NvbW1vbi5jCitAQCAtMCwwICsxLDQyIEBACisrLyoKKysgKiBjcnlwdDogY3J5cHQoMykgaW1wbGVtZW50YXRpb24KKysgKgorKyAqIENvcHlyaWdodCAoQykgMTk5MS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKysgKiBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyAqCisrICogR2VuZXJhbCBTdXBwb3J0IHJvdXRpbmVzCisrICoKKysgKi8KKysKKysjaW5jbHVkZSAiY3J5cHQtcHJpdmF0ZS5oIgorKworKy8qIFRhYmxlIHdpdGggY2hhcmFjdGVycyBmb3IgYmFzZTY0IHRyYW5zZm9ybWF0aW9uLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciBiNjR0WzY0XSA9CisrIi4vMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworKworK3ZvaWQKKytfX2I2NF9mcm9tXzI0Yml0IChjaGFyICoqY3AsIGludCAqYnVmbGVuLAorKwkJICB1bnNpZ25lZCBpbnQgYjIsIHVuc2lnbmVkIGludCBiMSwgdW5zaWduZWQgaW50IGIwLAorKwkJICBpbnQgbikKKyt7CisrICB1bnNpZ25lZCBpbnQgdyA9IChiMiA8PCAxNikgfCAoYjEgPDwgOCkgfCBiMDsKKysgIHdoaWxlIChuLS0gPiAwICYmICgqYnVmbGVuKSA+IDApCisrICAgIHsKKysgICAgICAqKCpjcCkrKyA9IGI2NHRbdyAmIDB4M2ZdOworKyAgICAgIC0tKCpidWZsZW4pOworKyAgICAgIHcgPj49IDY7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvY3J5cHQvY3J5cHRfdXRpbC5jIGIvY3J5cHQvY3J5cHRfdXRpbC5jCitpbmRleCAxNTk3ODg1Li45Mjk3OTc0IDEwMDY0NAorLS0tIGEvY3J5cHQvY3J5cHRfdXRpbC5jCisrKysgYi9jcnlwdC9jcnlwdF91dGlsLmMKK0BAIC0yNDIsMTAgKzI0Miw2IEBAIHN0YXRpYyB1ZmNfbG9uZyBlcGVybTMydGFiWzRdWzI1Nl1bMl07CisgICovCisgc3RhdGljIHVmY19sb25nIGVmcFsxNl1bNjRdWzJdOworIAorLS8qIFRhYmxlIHdpdGggY2hhcmFjdGVycyBmb3IgYmFzZTY0IHRyYW5zZm9ybWF0aW9uLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciBiNjR0WzY0XSA9CistIi4vMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworLQorIC8qCisgICogRm9yIHVzZSBieSB0aGUgb2xkLCBub24tcmVlbnRyYW50IHJvdXRpbmVzCisgICogKGNyeXB0L2VuY3J5cHQvc2V0a2V5KQorQEAgLTk0OSwxNyArOTQ1LDMgQEAgc2V0a2V5KF9fa2V5KQorIHsKKyAgIF9fc2V0a2V5X3IoX19rZXksICZfdWZjX2Zvb2Jhcik7CisgfQorLQorLXZvaWQKKy1fX2I2NF9mcm9tXzI0Yml0IChjaGFyICoqY3AsIGludCAqYnVmbGVuLAorLQkJICB1bnNpZ25lZCBpbnQgYjIsIHVuc2lnbmVkIGludCBiMSwgdW5zaWduZWQgaW50IGIwLAorLQkJICBpbnQgbikKKy17CistICB1bnNpZ25lZCBpbnQgdyA9IChiMiA8PCAxNikgfCAoYjEgPDwgOCkgfCBiMDsKKy0gIHdoaWxlIChuLS0gPiAwICYmICgqYnVmbGVuKSA+IDApCistICAgIHsKKy0gICAgICAqKCpjcCkrKyA9IGI2NHRbdyAmIDB4M2ZdOworLSAgICAgIC0tKCpidWZsZW4pOworLSAgICAgIHcgPj49IDY7CistICAgIH0KKy19CitkaWZmIC0tZ2l0IGEvY3N1L01ha2VmaWxlIGIvY3N1L01ha2VmaWxlCitpbmRleCA5ZjA4NTVhLi5iMWMzMzYzIDEwMDY0NAorLS0tIGEvY3N1L01ha2VmaWxlCisrKysgYi9jc3UvTWFrZWZpbGUKK0BAIC0yMiw2ICsyMiw4IEBACisgIyBjcnRuLm8sIHNwZWNpYWwgImluaXRpYWxpemVyIiBhbmQgImZpbmFsaXplciIgZmlsZXMgdXNlZCBpbiB0aGUgbGluaworICMgdG8gbWFrZSB0aGUgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsgcmlnaHQuCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpciA6PSBjc3UKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK2RpZmYgLS1naXQgYS9kZWJ1Zy9NYWtlZmlsZSBiL2RlYnVnL01ha2VmaWxlCitpbmRleCA5ZmYzNTdiLi5kMjNkOTdkIDEwMDY0NAorLS0tIGEvZGVidWcvTWFrZWZpbGUKKysrKyBiL2RlYnVnL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgZGVidWcgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBkZWJ1ZworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDcgKzI5LDcgQEAgaGVhZGVycwk6PSBleGVjaW5mby5oCisgIyBOb3RlIHRoYXQgcHRzbmFtZV9yX2NoayBhbmQgZ2V0bG9naW5fciBhcmUgbm90IGhlcmUsIGJ1dCBpbgorICMgbG9naW4vTWFrZWZpbGUgaW5zdGVhZC4gIElmIHRoYXQgc3ViZGlyIGlzIG9taXR0ZWQgZnJvbSB0aGUKKyAjIGJ1aWxkLCBpdHMgX0ZPUlRJRllfU09VUkNFIHN1cHBvcnQgd2lsbCBiZSB0b28uCistcm91dGluZXMgID0gYmFja3RyYWNlIGJhY2t0cmFjZXN5bXMgYmFja3RyYWNlc3ltc2ZkIG5vb3Bob29rcyBcCisrcm91dGluZXMgID0gbm9vcGhvb2tzIFwKKyAJICAgIG1lbWNweV9jaGsgbWVtbW92ZV9jaGsgbWVtcGNweV9jaGsgbWVtc2V0X2NoayBzdHBjcHlfY2hrIFwKKyAJICAgIHN0cmNhdF9jaGsgc3RyY3B5X2NoayBzdHJuY2F0X2NoayBzdHJuY3B5X2NoayBzdHBuY3B5X2NoayBcCisgCSAgICBzcHJpbnRmX2NoayB2c3ByaW50Zl9jaGsgc25wcmludGZfY2hrIHZzbnByaW50Zl9jaGsgXAorQEAgLTM2LDIwICszOCwyNyBAQCByb3V0aW5lcyAgPSBiYWNrdHJhY2UgYmFja3RyYWNlc3ltcyBiYWNrdHJhY2VzeW1zZmQgbm9vcGhvb2tzIFwKKyAJICAgIHJlYWRfY2hrIHByZWFkX2NoayBwcmVhZDY0X2NoayByZWN2X2NoayByZWN2ZnJvbV9jaGsgXAorIAkgICAgcmVhZGxpbmtfY2hrIHJlYWRsaW5rYXRfY2hrIGdldHdkX2NoayBnZXRjd2RfY2hrIFwKKyAJICAgIHJlYWxwYXRoX2NoayBmcmVhZF9jaGsgZnJlYWRfdV9jaGsgXAorLQkgICAgd2N0b21iX2NoayB3Y3NjcHlfY2hrIHdtZW1jcHlfY2hrIHdtZW1tb3ZlX2NoayB3bWVtcGNweV9jaGsgXAorLQkgICAgd2NwY3B5X2NoayB3Y3NuY3B5X2NoayB3Y3NjYXRfY2hrIHdjc25jYXRfY2hrIHdtZW1zZXRfY2hrIFwKKy0JICAgIHdjcG5jcHlfY2hrIFwKKy0JICAgIHN3cHJpbnRmX2NoayB2c3dwcmludGZfY2hrIHdwcmludGZfY2hrIGZ3cHJpbnRmX2NoayBcCistCSAgICB2d3ByaW50Zl9jaGsgdmZ3cHJpbnRmX2NoayBmZ2V0d3NfY2hrIGZnZXR3c191X2NoayBcCisgCSAgICBjb25mc3RyX2NoayBnZXRncm91cHNfY2hrIHR0eW5hbWVfcl9jaGsgXAorLQkgICAgZ2V0aG9zdG5hbWVfY2hrIGdldGRvbWFpbm5hbWVfY2hrIHdjcnRvbWJfY2hrIG1ic25ydG93Y3NfY2hrIFwKKy0JICAgIHdjc25ydG9tYnNfY2hrIG1ic3J0b3djc19jaGsgd2NzcnRvbWJzX2NoayBtYnN0b3djc19jaGsgXAorLQkgICAgd2NzdG9tYnNfY2hrIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKysJICAgIGdldGhvc3RuYW1lX2NoayBnZXRkb21haW5uYW1lX2NoayBcCisrCSAgICBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisgCSAgICB2ZHByaW50Zl9jaGsgb2JwcmludGZfY2hrIFwKKyAJICAgIGxvbmdqbXBfY2hrIF9fX19sb25nam1wX2NoayBcCisgCSAgICBmZGVsdF9jaGsgcG9sbF9jaGsgcHBvbGxfY2hrIFwKKyAJICAgIHN0YWNrX2Noa19mYWlsIGZvcnRpZnlfZmFpbCBcCisgCSAgICAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UpICs9IGJhY2t0cmFjZSBiYWNrdHJhY2VzeW1zIGJhY2t0cmFjZXN5bXNmZAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pCQkJXAorKwkgKz0gd3ByaW50Zl9jaGsgZndwcmludGZfY2hrCQkJCVwKKysJICAgIHZ3cHJpbnRmX2NoayB2ZndwcmludGZfY2hrIGZnZXR3c19jaGsgZmdldHdzX3VfY2hrCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikJCQkJXAorKwkgKz0gd2N0b21iX2NoayB3Y3NjcHlfY2hrIHdtZW1jcHlfY2hrIHdtZW1tb3ZlX2NoayB3bWVtcGNweV9jaGsJXAorKwkgICAgd2NwY3B5X2NoayB3Y3NuY3B5X2NoayB3Y3NjYXRfY2hrIHdjc25jYXRfY2hrIHdtZW1zZXRfY2hrCVwKKysJICAgIHdjcG5jcHlfY2hrCQkJCQkJCVwKKysJICAgIHN3cHJpbnRmX2NoayB2c3dwcmludGZfY2hrCQkJCQlcCisrCSAgICB3Y3J0b21iX2NoayBtYnNucnRvd2NzX2NoawkJCQkJXAorKwkgICAgd2NzbnJ0b21ic19jaGsgbWJzcnRvd2NzX2NoayB3Y3NydG9tYnNfY2hrIG1ic3Rvd2NzX2NoawlcCisrCSAgICB3Y3N0b21ic19jaGsKKysKKyBzdGF0aWMtb25seS1yb3V0aW5lcyA6PSB3YXJuaW5nLW5vcCBzdGFja19jaGtfZmFpbF9sb2NhbAorIAorIENGTEFHUy1iYWNrdHJhY2UuYyA9IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyCitAQCAtMTMxLDExICsxNDAsMTUgQEAgTERGTEFHUy10c3QtYmFja3RyYWNlNCA9IC1yZHluYW1pYworIExERkxBR1MtdHN0LWJhY2t0cmFjZTUgPSAtcmR5bmFtaWMKKyBMREZMQUdTLXRzdC1iYWNrdHJhY2U2ID0gLXJkeW5hbWljCisgCistdGVzdHMgPSBiYWNrdHJhY2UtdHN0IHRzdC1sb25nam1wX2NoayB0c3QtY2hrMSB0c3QtY2hrMiB0c3QtY2hrMyBcCistCXRzdC1sZnNjaGsxIHRzdC1sZnNjaGsyIHRzdC1sZnNjaGszIHRlc3Qtc3RyY3B5X2NoayB0ZXN0LXN0cGNweV9jaGsgXAorLQl0c3QtY2hrNCB0c3QtY2hrNSB0c3QtY2hrNiB0c3QtbGZzY2hrNCB0c3QtbGZzY2hrNSB0c3QtbGZzY2hrNiBcCistCXRzdC1sb25nam1wX2NoazIgdHN0LWJhY2t0cmFjZTIgdHN0LWJhY2t0cmFjZTMgdHN0LWJhY2t0cmFjZTQgXAorLQl0c3QtYmFja3RyYWNlNSB0c3QtYmFja3RyYWNlNgorK3Rlc3RzID0gdHN0LWxvbmdqbXBfY2hrIHRlc3Qtc3RyY3B5X2NoayB0ZXN0LXN0cGNweV9jaGsgdHN0LWxvbmdqbXBfY2hrMgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKyAgICAgICs9IHRzdC1jaGsxIHRzdC1jaGsyIHRzdC1jaGszIHRzdC1sZnNjaGsxIHRzdC1sZnNjaGsyIHRzdC1sZnNjaGszCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSkgXAorKyAgICAgICs9IGJhY2t0cmFjZS10c3QgdHN0LWJhY2t0cmFjZTIgdHN0LWJhY2t0cmFjZTMgdHN0LWJhY2t0cmFjZTQgXAorKyAgICAgICAgIHRzdC1iYWNrdHJhY2U1IHRzdC1iYWNrdHJhY2U2CisraWZlcSAoeXksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK3Rlc3RzICs9IHRzdC1jaGs0IHRzdC1jaGs1IHRzdC1jaGs2IHRzdC1sZnNjaGs0IHRzdC1sZnNjaGs1IHRzdC1sZnNjaGs2CisrZW5kaWYKKyAKKyBpZmVxICgsJChDWFgpKQorIHRlc3RzLXVuc3VwcG9ydGVkID0gdHN0LWNoazQgdHN0LWNoazUgdHN0LWNoazYgXAorZGlmZiAtLWdpdCBhL2RlYnVnL3NlZ2ZhdWx0LmMgYi9kZWJ1Zy9zZWdmYXVsdC5jCitpbmRleCAzNDU5YTJhLi5lZTlhMTQ2IDEwMDY0NAorLS0tIGEvZGVidWcvc2VnZmF1bHQuYworKysrIGIvZGVidWcvc2VnZmF1bHQuYworQEAgLTMwLDYgKzMwLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPF9pdG9hLmg+CisgI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogVGhpcyBmaWxlIGRlZmluZXMgbWFjcm9zIHRvIGFjY2VzcyB0aGUgY29udGVudCBvZiB0aGUgc2lnY29udGV4dCBlbGVtZW50CisgICAgcGFzc2VkIHVwIGJ5IHRoZSBzaWduYWwgaGFuZGxlci4gICovCitAQCAtNjgsMTEgKzY5LDEzIEBAIHdyaXRlX3N0cnNpZ25hbCAoaW50IGZkLCBpbnQgc2lnbmFsKQorIHN0YXRpYyB2b2lkCisgY2F0Y2hfc2VnZmF1bHQgKGludCBzaWduYWwsIFNJR0NPTlRFWFQgY3R4KQorIHsKKy0gIGludCBmZCwgY250LCBpOworLSAgdm9pZCAqKmFycjsKKysgIGludCBmZDsKKyAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UKKysgIGludCBjbnQsIGk7CisrICB2b2lkICoqYXJyOworICAgdWludHB0cl90IHBjOworLQorKyNlbmRpZgorICAgLyogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3ZSBhcmUgd3JpdGluZyB0by4gIElmIG5vbmUgaXMgZ2l2ZW4KKyAgICAgIG9yIHdlIGNhbm5vdCB3cml0ZSB0byB0aGlzIGZpbGUgd3JpdGUgdG8gc3RkZXJyLiAgKi8KKyAgIGZkID0gMjsKK0BAIC05MSw2ICs5NCw3IEBAIGNhdGNoX3NlZ2ZhdWx0IChpbnQgc2lnbmFsLCBTSUdDT05URVhUIGN0eCkKKyAgIFJFR0lTVEVSX0RVTVA7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UKKyAgIFdSSVRFX1NUUklORyAoIlxuQmFja3RyYWNlOlxuIik7CisgCisgICAvKiBHZXQgdGhlIGJhY2t0cmFjZS4gICovCitAQCAtMTEzLDYgKzExNyw3IEBAIGNhdGNoX3NlZ2ZhdWx0IChpbnQgc2lnbmFsLCBTSUdDT05URVhUIGN0eCkKKyAKKyAgIC8qIE5vdyBnZW5lcmF0ZSBuaWNlbHkgZm9ybWF0dGVkIG91dHB1dC4gICovCisgICBfX2JhY2t0cmFjZV9zeW1ib2xzX2ZkIChhcnIgKyBpLCBjbnQgLSBpLCBmZCk7CisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfUFJPQ19TRUxGCisgICAvKiBOb3cgdGhlIGxpbmsgbWFwLiAgKi8KK2RpZmYgLS1naXQgYS9kZWJ1Zy90c3QtY2hrMS5jIGIvZGVidWcvdHN0LWNoazEuYworaW5kZXggNTM1NTllNi4uMzYyZDkyYSAxMDA2NDQKKy0tLSBhL2RlYnVnL3RzdC1jaGsxLmMKKysrKyBiL2RlYnVnL3RzdC1jaGsxLmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDxzeXMvdW4uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgbWFsbG9jCitAQCAtMzA3LDYgKzMwOCw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBzbnByaW50ZiAoYnVmICsgOCwgbDAgKyAzLCAiJWQiLCBudW0yKTsKKyAgIENIS19GQUlMX0VORAorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBDSEtfRkFJTF9TVEFSVAorICAgc3dwcmludGYgKHdidWYgKyA4LCAzLCBMIiVkIiwgbnVtMSk7CisgICBDSEtfRkFJTF9FTkQKK0BAIC0zMTQsNiArMzE2LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIENIS19GQUlMX1NUQVJUCisgICBzd3ByaW50ZiAod2J1ZiArIDgsIGwwICsgMywgTCIlZCIsIG51bTEpOworICAgQ0hLX0ZBSUxfRU5ECisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAjIGVuZGlmCisgCisgICBtZW1jcHkgKGJ1Ziwgc3RyMSArIDIsIGwwICsgOSk7CitAQCAtMzgxLDYgKzM4NCw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBDSEtfRkFJTF9FTkQKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorIAorICAgLyogVGhlc2Ugb3BzIGNhbiBiZSBkb25lIHdpdGhvdXQgcnVudGltZSBjaGVja2luZyBvZiBvYmplY3Qgc2l6ZS4gICovCisgICB3bWVtY3B5ICh3YnVmLCBMImFiY2RlZmdoaWoiLCAxMCk7CitAQCAtNjA1LDYgKzYwOSw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBDSEtfRkFJTF9FTkQKKyAjZW5kaWYKKyAKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgLyogTm93IGNoZWNrcyBmb3IgJW4gcHJvdGVjdGlvbi4gICovCisgCitAQCAtMTE5Miw2ICsxMTk3LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgImRlX0RFLlVURi04IikgIT0gTlVMTCkKKyAgICAgeworICAgICAgIGFzc2VydCAoTUJfQ1VSX01BWCA8PSAxMCk7CitAQCAtMTM0OCw2ICsxMzU0LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgICAgICBwdXRzICgiY2Fubm90IHNldCBsb2NhbGUiKTsKKyAgICAgICByZXQgPSAxOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIGludCBmZCA9IHBvc2l4X29wZW5wdCAoT19SRFdSKTsKKyAgIGlmIChmZCAhPSAtMSkKK2RpZmYgLS1naXQgYS9kbGZjbi9NYWtlZmlsZSBiL2RsZmNuL01ha2VmaWxlCitpbmRleCA3NTk3ODBkLi4zODI3NjA3IDEwMDY0NAorLS0tIGEvZGxmY24vTWFrZWZpbGUKKysrKyBiL2RsZmNuL01ha2VmaWxlCitAQCAtMTUsNiArMTUsOCBAQAorICMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJCTo9IGRsZmNuCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzYsOCArMzgsMTEgQEAgZW5kaWYKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3RzID0gZ2xyZWZtYWluIGZhaWx0ZXN0IHRzdC1kbGFkZHIgZGVmYXVsdCBlcnJtc2cxIHRzdGN4YWF0ZXhpdCBcCisgCWJ1Zy1kbG9wZW4xIGJ1Zy1kbHN5bTEgdHN0LWRsaW5mbyBidWctYXRleGl0MSBidWctYXRleGl0MiBcCistCWJ1Zy1hdGV4aXQzIHRzdGF0ZXhpdCBidWctZGwtbGVhZiB0c3QtcmVjLWRsb3BlbgorKwl0c3RhdGV4aXQgYnVnLWRsLWxlYWYgdHN0LXJlYy1kbG9wZW4KKyBlbmRpZgorKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IGJ1Zy1hdGV4aXQzCisrCisgbW9kdWxlcy1uYW1lcyA9IGdscmVmbGliMSBnbHJlZmxpYjIgZ2xyZWZsaWIzIGZhaWx0ZXN0bW9kIGRlZmF1bHRtb2QxIFwKKyAJCWRlZmF1bHRtb2QyIGVycm1zZzFtb2QgbW9kYXRleGl0IG1vZGN4YWF0ZXhpdCBcCisgCQlidWctZGxzeW0xLWxpYjEgYnVnLWRsc3ltMS1saWIyIGJ1Zy1hdGV4aXQxLWxpYiBcCitkaWZmIC0tZ2l0IGEvZWxmL2RsLXN1cHBvcnQuYyBiL2VsZi9kbC1zdXBwb3J0LmMKK2luZGV4IDRkMDM2ZjEuLmMxNWY0MDUgMTAwNjQ0CistLS0gYS9lbGYvZGwtc3VwcG9ydC5jCisrKysgYi9lbGYvZGwtc3VwcG9ydC5jCitAQCAtMTksNiArMTksNyBAQAorIC8qIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgdGhpbmdzIHRoYXQgZm9yIHRoZSBkeW5hbWljIGxpbmtlciBhcmUgZGVmaW5lZCBpbgorICAgIHJ0bGQuYyBhbmQgZGwtc3lzZGVwLmMgaW4gd2F5cyBhcHByb3ByaWF0ZSB0byBib290c3RyYXAgZHluYW1pYyBsaW5raW5nLiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC00Miw3ICs0Myw5IEBAIGNoYXIgKipfZGxfYXJndiA9ICZfX3Byb2duYW1lOwkvKiBUaGlzIGlzIGNoZWNrZWQgZm9yIHNvbWUgZXJyb3IgbWVzc2FnZXMuICAqLworIGNvbnN0IGNoYXIgKl9kbF9wbGF0Zm9ybTsKKyBzaXplX3QgX2RsX3BsYXRmb3JtbGVuOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIGludCBfZGxfZGVidWdfbWFzazsKKysjZW5kaWYKKyBpbnQgX2RsX2xhenk7CisgRWxmVyhBZGRyKSBfZGxfdXNlX2xvYWRfYmlhcyA9IC0yOworIGludCBfZGxfZHluYW1pY193ZWFrOworZGlmZiAtLWdpdCBhL2VsZi9ydGxkLmMgYi9lbGYvcnRsZC5jCitpbmRleCA2ZDNhZGQ3Li5mYzNhMmRiIDEwMDY0NAorLS0tIGEvZWxmL3J0bGQuYworKysrIGIvZWxmL3J0bGQuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZGxmY24uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KK0BAIC0yMjAxLDYgKzIyMDIsNyBAQCBwcmludF9taXNzaW5nX3ZlcnNpb24gKGludCBlcnJjb2RlIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJCSAgICBvYmpuYW1lLCBlcnJzdHJpbmcpOworIH0KKyAMCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgLyogTm9uemVybyBpZiBhbnkgb2YgdGhlIGRlYnVnZ2luZyBvcHRpb25zIGlzIGVuYWJsZWQuICAqLworIHN0YXRpYyBpbnQgYW55X2RlYnVnIGF0dHJpYnV0ZV9yZWxybzsKKyAKK0BAIC0yMzEwLDYgKzIzMTIsNyBAQCBhIGZpbGVuYW1lIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIExEX0RFQlVHX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiIpOworICAgICAgIF9leGl0ICgwKTsKKyAgICAgfQorIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcgKi8KKyAMCisgc3RhdGljIHZvaWQKKyBwcm9jZXNzX2RsX2F1ZGl0IChjaGFyICpzdHIpCitAQCAtMjM0OSw4ICsyMzUyLDkgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorICAgY2hhciAqKnJ1bnAgPSBfZW52aXJvbjsKKyAgIGNoYXIgKmVudmxpbmU7CisgICBlbnVtIG1vZGUgbW9kZSA9IG5vcm1hbDsKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAgIGNoYXIgKmRlYnVnX291dHB1dCA9IE5VTEw7CistCisrI2VuZGlmCisgICAvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHBsYWNlIGZvciBwcm9maWxpbmcgZGF0YSBmaWxlLiAgKi8KKyAgIEdMUk8oZGxfcHJvZmlsZV9vdXRwdXQpCisgICAgID0gJiIvdmFyL3RtcFwwL3Zhci9wcm9maWxlIltfX2xpYmNfZW5hYmxlX3NlY3VyZSA/IDkgOiAwXTsKK0BAIC0yMzc3LDEyICsyMzgxLDE0IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICBicmVhazsKKyAKKyAJY2FzZSA1OgorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgIC8qIERlYnVnZ2luZyBvZiB0aGUgZHluYW1pYyBsaW5rZXI/ICAqLworIAkgIGlmIChtZW1jbXAgKGVudmxpbmUsICJERUJVRyIsIDUpID09IDApCisgCSAgICB7CisgCSAgICAgIHByb2Nlc3NfZGxfZGVidWcgKCZlbnZsaW5lWzZdKTsKKyAJICAgICAgYnJlYWs7CisgCSAgICB9CisrI2VuZGlmCisgCSAgaWYgKG1lbWNtcCAoZW52bGluZSwgIkFVRElUIiwgNSkgPT0gMCkKKyAJICAgIHByb2Nlc3NfZGxfYXVkaXQgKCZlbnZsaW5lWzZdKTsKKyAJICBicmVhazsKK0BAIC0yNDQ4LDEzICsyNDU0LDE0IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICAgICAgYnJlYWs7CisgCSAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgLyogV2hlcmUgdG8gcGxhY2UgdGhlIHByb2ZpbGluZyBkYXRhIGZpbGUuICAqLworIAkgIGlmIChtZW1jbXAgKGVudmxpbmUsICJERUJVR19PVVRQVVQiLCAxMikgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgZGVidWdfb3V0cHV0ID0gJmVudmxpbmVbMTNdOworIAkgICAgICBicmVhazsKKyAJICAgIH0KKy0KKysjZW5kaWYKKyAJICBpZiAoIV9fbGliY19lbmFibGVfc2VjdXJlCisgCSAgICAgICYmIG1lbWNtcCAoZW52bGluZSwgIkRZTkFNSUNfV0VBSyIsIDEyKSA9PSAwKQorIAkgICAgR0xSTyhkbF9keW5hbWljX3dlYWspID0gMTsKK0BAIC0yNDkxLDcgKzI0OTgsOSBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgICB7CisgCSAgICAgIG1vZGUgPSB0cmFjZTsKKyAJICAgICAgR0xSTyhkbF92ZXJib3NlKSA9IDE7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgICAgIEdMUk8oZGxfZGVidWdfbWFzaykgfD0gRExfREVCVUdfUFJFTElOSzsKKysjZW5kaWYKKyAJICAgICAgR0xSTyhkbF90cmFjZV9wcmVsaW5rKSA9ICZlbnZsaW5lWzE3XTsKKyAJICAgIH0KKyAJICBicmVhazsKK0BAIC0yNTM4LDEyICsyNTQ3LDE1IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAgICAgICBpZiAoX19hY2Nlc3MgKCIvZXRjL3N1aWQtZGVidWciLCBGX09LKSAhPSAwKQorIAl7CisgCSAgdW5zZXRlbnYgKCJNQUxMT0NfQ0hFQ0tfIik7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgR0xSTyhkbF9kZWJ1Z19tYXNrKSA9IDA7CisrI2VuZGlmCisgCX0KKyAKKyAgICAgICBpZiAobW9kZSAhPSBub3JtYWwpCisgCV9leGl0ICg1KTsKKyAgICAgfQorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworICAgLyogSWYgd2UgaGF2ZSB0byBydW4gdGhlIGR5bmFtaWMgbGlua2VyIGluIGRlYnVnZ2luZyBtb2RlIGFuZCB0aGUKKyAgICAgIExEX0RFQlVHX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBnaXZlbiwgd2Ugd3JpdGUgdGhlIGRlYnVnCisgICAgICBtZXNzYWdlcyB0byB0aGlzIGZpbGUuICAqLworQEAgLTI1NjgsNiArMjU4MCw3IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJLyogV2UgdXNlIHN0YW5kYXJkIG91dHB1dCBpZiBvcGVuaW5nIHRoZSBmaWxlIGZhaWxlZC4gICovCisgCUdMUk8oZGxfZGVidWdfZmQpID0gU1RET1VUX0ZJTEVOTzsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRyAqLworIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9leHRyYS1saWIubWsgYi9leHRyYS1saWIubWsKK2luZGV4IGIxMDc0OGQuLmQ3MWEwNmYgMTAwNjQ0CistLS0gYS9leHRyYS1saWIubWsKKysrKyBiL2V4dHJhLWxpYi5taworQEAgLTI1LDcgKzI1LDkgQEAgaW5zdGFsbC1saWIgOj0gJChpbnN0YWxsLWxpYikKKyBleHRyYS1vYmpzIDo9ICQoZXh0cmEtb2JqcykKKyAKKyAjIFRoZSBtb2R1bGVzIHRoYXQgZ28gaW4gJChsaWIpLgorLWFsbC0kKGxpYiktcm91dGluZXMgOj0gJCgkKGxpYiktcm91dGluZXMpICQoJChsaWIpLXN5c2RlcF9yb3V0aW5lcykKKythbGwtJChsaWIpLXJvdXRpbmVzIDo9ICQoJChsaWIpLXJvdXRpbmVzKQkJXAorKwkgICAgICAgICAgICAgICAkKCQobGliKS1yb3V0aW5lcy15KQkJXAorKwkJICAgICAgICQoJChsaWIpLXN5c2RlcF9yb3V0aW5lcykKKyAKKyAjIEFkZCBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5IHRvIHRoZSBsaXN0cyBvZiB0aGluZ3MgdG8gYnVpbGQgYW5kIGluc3RhbGwuCisgaW5zdGFsbC1saWIgKz0gJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSwkKGxpYjpsaWIlPSQobGlidHlwZSRvKSkpCitAQCAtMTAxLDcgKzEwMyw3IEBAIGVuZGlmCisgZW5kaWYKKyAKKyAjIFRoaXMgd2lsbCBkZWZpbmUgYGxpYm9mLVJPVVRJTkUgOj0gTElCJyBmb3IgZWFjaCBvZiB0aGUgcm91dGluZXMuCistY3BwLXNyY3MtbGVmdCA6PSAkKCQobGliKS1yb3V0aW5lcykgJCgkKGxpYiktc3lzZGVwX3JvdXRpbmVzKQorK2NwcC1zcmNzLWxlZnQgOj0gJChhbGwtJChsaWIpLXJvdXRpbmVzKQorIGlmbmVxICgsJChjcHAtc3Jjcy1sZWZ0KSkKKyBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKWNwcGZsYWdzLWl0ZXJhdG9yLm1rLCQoY3BwLXNyY3MtbGVmdCkpCisgZW5kaWYKK2RpZmYgLS1naXQgYS9ncnAvTWFrZWZpbGUgYi9ncnAvTWFrZWZpbGUKK2luZGV4IGM2M2I1NTIuLjc0ODZmMzIgMTAwNjQ0CistLS0gYS9ncnAvTWFrZWZpbGUKKysrKyBiL2dycC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGdycCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGdycAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI5LDYgKzMxLDkgQEAgcm91dGluZXMgOj0gZmdldGdyZW50IGluaXRncm91cHMgc2V0Z3JvdXBzIFwKKyAJICAgIGdldGdyZW50X3IgZ2V0Z3JnaWRfciBnZXRncm5hbV9yIGZnZXRncmVudF9yCisgCisgdGVzdHMgOj0gdGVzdGdycAorK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSCkpCisrTERMSUJTLXRlc3RncnAgKz0gJChzaGVsbCBjYXQgJChjb21tb24tb2JqcGZ4KW5zcy9maXhlZC1uc3N3aXRjaC1saWJzKQorK2VuZGlmCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0LXNyY3MgOj0gIHRzdF9mZ2V0Z3JlbnQKK2RpZmYgLS1naXQgYS9oZXNpb2QvTWFrZWZpbGUgYi9oZXNpb2QvTWFrZWZpbGUKK2luZGV4IGFjMGJjMDEuLjM4MjYzYjQgMTAwNjQ0CistLS0gYS9oZXNpb2QvTWFrZWZpbGUKKysrKyBiL2hlc2lvZC9NYWtlZmlsZQorQEAgLTE4LDEyICsxOCwxNCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgaGVzaW9kIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaGVzaW9kCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCistZXh0cmEtbGlicyA6PSBsaWJuc3NfaGVzaW9kCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbGlibnNzX2hlc2lvZAorK2V4dHJhLWxpYnMtb3RoZXJzLXkgKz0gJChleHRyYS1saWJzLXkpCisgCisgc3ViZGlyLWRpcnMgPSBuc3NfaGVzaW9kCisgdnBhdGggJS5jIG5zc19oZXNpb2QKK2RpZmYgLS1naXQgYS9pY29udi9NYWtlZmlsZSBiL2ljb252L01ha2VmaWxlCitpbmRleCAwZDU1ZWRhLi5hMTg0N2M2IDEwMDY0NAorLS0tIGEvaWNvbnYvTWFrZWZpbGUKKysrKyBiL2ljb252L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBpY29udi4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpY29udgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM5LDYgKzQxLDExIEBAIENGTEFHUy1pY29udl9jaGFybWFwLmMgPSAtSS4uL2xvY2FsZS9wcm9ncmFtcworIENGTEFHUy1kdW1teS1yZXBlcnRvaXJlLmMgPSAtSS4uL2xvY2FsZS9wcm9ncmFtcworIENGTEFHUy1jaGFybWFwLmMgPSAtRENIQVJNQVBfUEFUSD0nIiQoaTE4bmRpcikvY2hhcm1hcHMiJyBcCisgCQkgICAtRERFRkFVTFRfQ0hBUk1BUD1udWxsX3BvaW50ZXIgLURORUVEX05VTExfUE9JTlRFUgorKworK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19TUEFXTikpCisrQ0ZMQUdTLWNoYXJtYXAtZGlyLmMgKz0gLUROT19VTkNPTVBSRVNTCisrZW5kaWYKKysKKyBDRkxBR1MtbGluZXJlYWRlci5jID0gLUROT19UUkFOU0xJVEVSQVRJT04KKyBDRkxBR1Mtc2ltcGxlLWhhc2guYyA9IC1JLi4vbG9jYWxlCisgCitkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfZGIuYyBiL2ljb252L2djb252X2RiLmMKK2luZGV4IGNlNDYyMTYuLmVhMTg5NjQgMTAwNjQ0CistLS0gYS9pY29udi9nY29udl9kYi5jCisrKysgYi9pY29udi9nY29udl9kYi5jCitAQCAtMjUsNiArMjUsNyBAQAorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8ZGxmY24uaD4KKyAjaW5jbHVkZSA8Z2NvbnZfaW50Lmg+CitAQCAtODI4LDkgKzgyOSwxMSBAQCBmcmVlX21vZHVsZXNfZGIgKHN0cnVjdCBnY29udl9tb2R1bGUgKm5vZGUpCisgLyogRnJlZSBhbGwgcmVzb3VyY2VzIGlmIG5lY2Vzc2FyeS4gICovCisgbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgLyogRmlyc3QgZnJlZSBsb2NhbGUgbWVtb3J5LiAgVGhpcyBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBmcmVlaW5nIGRlcml2YXRpb25zLAorICAgICAgYXMgY3R5cGUgY2xlYW51cCBmdW5jdGlvbnMgZGVyZWZlcmVuY2Ugc3RlcHMgYXJyYXlzIHdoaWNoIHdlIGZyZWUgYmVsb3cuICAqLworICAgX25sX2xvY2FsZV9zdWJmcmVlcmVzICgpOworKyNlbmRpZgorIAorICAgLyogZmluZGRvbWFpbi5jIGhhcyBzaW1pbGFyIHByb2JsZW0uICAqLworICAgZXh0ZXJuIHZvaWQgX25sX2ZpbmRkb21haW5fc3ViZnJlZXJlcyAodm9pZCkgYXR0cmlidXRlX2hpZGRlbjsKK2RpZmYgLS1naXQgYS9pY29udi9nY29udl90cmFucy5jIGIvaWNvbnYvZ2NvbnZfdHJhbnMuYworaW5kZXggNWQ1ZDRkNy4uYTdkMzA3MiAxMDA2NDQKKy0tLSBhL2ljb252L2djb252X3RyYW5zLmMKKysrKyBiL2ljb252L2djb252X3RyYW5zLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2luY2x1ZGUgImdjb252X2ludC5oIgorQEAgLTM4LDE1ICszOSwxOSBAQCBfX2djb252X3RyYW5zbGl0ZXJhdGUgKHN0cnVjdCBfX2djb252X3N0ZXAgKnN0ZXAsCisgCQkgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGJ1ZnN0YXJ0LCBzaXplX3QgKmlycmV2ZXJzaWJsZSkKKyB7CisgICAvKiBGaW5kIG91dCBhYm91dCB0aGUgbG9jYWxlJ3MgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50X2Zhc3QzMl90IHNpemU7CisgICBjb25zdCB1aW50MzJfdCAqZnJvbV9pZHg7CisgICBjb25zdCB1aW50MzJfdCAqZnJvbV90Ymw7CisgICBjb25zdCB1aW50MzJfdCAqdG9faWR4OworICAgY29uc3QgdWludDMyX3QgKnRvX3RibDsKKysjZW5kaWYKKyAgIGNvbnN0IHVpbnQzMl90ICp3aW5idWY7CisgICBjb25zdCB1aW50MzJfdCAqd2luYnVmZW5kOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnRfZmFzdDMyX3QgbG93OworICAgdWludF9mYXN0MzJfdCBoaWdoOworKyNlbmRpZgorIAorICAgLyogVGhlIGlucHV0IGJ1ZmZlci4gIFRoZXJlIGFyZSBhY3R1YWxseSA0LWJ5dGUgdmFsdWVzLiAgKi8KKyAgIHdpbmJ1ZiA9IChjb25zdCB1aW50MzJfdCAqKSAqaW5idWZwOworQEAgLTU4LDYgKzYzLDcgQEAgX19nY29udl90cmFuc2xpdGVyYXRlIChzdHJ1Y3QgX19nY29udl9zdGVwICpzdGVwLAorICAgICBQVFJfREVNQU5HTEUgKGZjdCk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgLyogSWYgdGhlcmUgaXMgbm8gdHJhbnNsaXRlcmF0aW9uIGluZm9ybWF0aW9uIGluIHRoZSBsb2NhbGUgZG9uJ3QgZG8KKyAgICAgIGFueXRoaW5nIGFuZCByZXR1cm4gdGhlIGVycm9yLiAgKi8KKyAgIHNpemUgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFKTsKK0BAIC0xOTMsNiArMTk5LDcgQEAgX19nY29udl90cmFuc2xpdGVyYXRlIChzdHJ1Y3QgX19nY29udl9zdGVwICpzdGVwLAorICAgICAgICAgICAgICBzb3J0ZWQuICAqLworIAkgIGJyZWFrOworICAgICB9CisrI2VuZGlmCisgCisgICAvKiBPbmUgbGFzdCBjaGFuY2U6IHVzZSB0aGUgZGVmYXVsdCByZXBsYWNlbWVudC4gICovCisgICBpZiAoX05MX0NVUlJFTlRfV09SRCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOKSAhPSAwKQorZGlmZiAtLWdpdCBhL2ljb252L2ljb252X3Byb2cuYyBiL2ljb252L2ljb252X3Byb2cuYworaW5kZXggZTI0OWJjZS4uNDAzZWNlNSAxMDA2NDQKKy0tLSBhL2ljb252L2ljb252X3Byb2cuYworKysrIGIvaWNvbnYvaWNvbnZfcHJvZy5jCitAQCAtMzUsNiArMzUsNyBAQAorICNpZmRlZiBfUE9TSVhfTUFQUEVEX0ZJTEVTCisgIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNlbmRpZgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxjaGFybWFwLmg+CisgI2luY2x1ZGUgPGdjb252X2ludC5oPgorICNpbmNsdWRlICJpY29udl9wcm9nLmgiCitAQCAtMjIxLDEwICsyMjIsMTcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICAgICAgYm9vbCB0b193cm9uZyA9CisgCQkoaWNvbnZfb3BlbiAodG9fY29kZSwgIlVURi04IikgPT0gKGljb252X3QpIC0xCisgCQkgJiYgZXJybm8gPT0gRUlOVkFMKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGNvbnN0IGNoYXIgKmZyb21fcHJldHR5ID0KKyAJCShmcm9tX2NvZGVbMF0gPyBmcm9tX2NvZGUgOiBubF9sYW5naW5mbyAoQ09ERVNFVCkpOworIAkgICAgICBjb25zdCBjaGFyICp0b19wcmV0dHkgPQorIAkJKG9yaWdfdG9fY29kZVswXSA/IG9yaWdfdG9fY29kZSA6IG5sX2xhbmdpbmZvIChDT0RFU0VUKSk7CisrI2Vsc2UKKysJICAgICAgY29uc3QgY2hhciAqZnJvbV9wcmV0dHkgPQorKwkJKGZyb21fY29kZVswXSA/IGZyb21fY29kZSA6ICJBTlNJX1gzLjQtMTk2OCIpOworKwkgICAgICBjb25zdCBjaGFyICp0b19wcmV0dHkgPQorKyAgICAgICAgICAgICAgICAgKG9yaWdfdG9fY29kZVswXSA/IG9yaWdfdG9fY29kZSA6ICJBTlNJX1gzLjQtMTk2OCIpOworKyNlbmRpZgorIAorIAkgICAgICBpZiAoZnJvbV93cm9uZykKKyAJCXsKK2RpZmYgLS1naXQgYS9pY29udmRhdGEvTWFrZWZpbGUgYi9pY29udmRhdGEvTWFrZWZpbGUKK2luZGV4IGEzZDFkMDkuLjA4MzI3MDggMTAwNjQ0CistLS0gYS9pY29udmRhdGEvTWFrZWZpbGUKKysrKyBiL2ljb252ZGF0YS9NYWtlZmlsZQorQEAgLTE4LDEyICsxOCwxNSBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBpY29udiBkYXRhIGFuZCBjb2RlLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGljb252ZGF0YQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorICMgTmFtZXMgb2YgYWxsIHRoZSBzaGFyZWQgb2JqZWN0cyB3aGljaCBpbXBsZW1lbnQgdGhlIHRyYW5zZm9ybWF0aW9ucy4KKy1tb2R1bGVzCTo9IElTTzg4NTktMSBJU084ODU5LTIgSVNPODg1OS0zIElTTzg4NTktNCBJU084ODU5LTUJCSBcCisrbW9kdWxlcy0kKE9QVElPTl9FR0xJQkNfQ0hBUlNFVFMpCQkJCQkgXAorKwk6PSBJU084ODU5LTEgSVNPODg1OS0yIElTTzg4NTktMyBJU084ODU5LTQgSVNPODg1OS01CQkgXAorIAkgICBJU084ODU5LTYgSVNPODg1OS03IElTTzg4NTktOCBJU084ODU5LTkgSVNPODg1OS0xMAkJIFwKKyAJICAgSVNPODg1OS0xMSBJU084ODU5LTEzIElTTzg4NTktMTQgSVNPODg1OS0xNSBJU084ODU5LTE2CSBcCisgCSAgIFQuNjEgSVNPXzY5MzcgU0pJUyBLT0ktOCBIUC1ST01BTjggSFAtUk9NQU45IEVCQ0RJQy1BVC1ERQkgXAorQEAgLTYzLDExICs2NiwxMyBAQCBtb2R1bGVzCTo9IElTTzg4NTktMSBJU084ODU5LTIgSVNPODg1OS0zIElTTzg4NTktNCBJU084ODU5LTUJCSBcCisgCSAgIE1BQy1DRU5UUkFMRVVST1BFIEtPSTgtUlUgSVNPODg1OS05RQkJCQkgXAorIAkgICBDUDc3MCBDUDc3MSBDUDc3MiBDUDc3MyBDUDc3NAorIAorLW1vZHVsZXMuc28gOj0gJChhZGRzdWZmaXggLnNvLCAkKG1vZHVsZXMpKQorK21vZHVsZXMuc28gOj0gJChhZGRzdWZmaXggLnNvLCAkKG1vZHVsZXMteSkpCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0cyA9IGJ1Zy1pY29udjEgYnVnLWljb252MiB0c3QtbG9hZGluZyB0c3QtZTJiaWcgdHN0LWljb252NCBidWctaWNvbnY0IFwKKy0JdHN0LWljb252NiBidWctaWNvbnY1IGJ1Zy1pY29udjYgdHN0LWljb252NyBidWctaWNvbnY4IGJ1Zy1pY29udjkKKysJdHN0LWljb252NiBidWctaWNvbnY1IGJ1Zy1pY29udjggYnVnLWljb252OQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gYnVnLWljb252NiB0c3QtaWNvbnY3CisrCisgaWZlcSAoJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXMpCisgdGVzdHMgKz0gYnVnLWljb252MworIGVuZGlmCitAQCAtMTI3LDEzICsxMzIsMTMgQEAgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIFJ1bGUgdG8gZ2VuZXJhdGUgdGhlIHNoYXJlZCBvYmplY3RzLgorIGNoYXJtYXBzID0gLi4vbG9jYWxlZGF0YS9jaGFybWFwcworIC1pbmNsdWRlICQob2JqcGZ4KWljb252LXJ1bGVzCistZXh0cmEtbW9kdWxlcy1sZWZ0IDo9ICQobW9kdWxlcykKKytleHRyYS1tb2R1bGVzLWxlZnQgOj0gJChtb2R1bGVzLXkpCisgaW5jbHVkZSBleHRyYS1tb2R1bGUubWsKKyAKKyAKKyBleHRyYS1vYmpzCSs9ICQobW9kdWxlcy5zbykKKy1pbnN0YWxsLW90aGVycwk9ICQoYWRkcHJlZml4ICQoaW5zdF9nY29udmRpcikvLCAkKG1vZHVsZXMuc28pKQlcCistCQkgICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcworK2luc3RhbGwtb3RoZXJzLXkgKz0gJChhZGRwcmVmaXggJChpbnN0X2djb252ZGlyKS8sICQobW9kdWxlcy5zbykpCisraW5zdGFsbC1vdGhlcnMtJChPUFRJT05fRUdMSUJDX0NIQVJTRVRTKSArPSAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMKKyAKKyAjIFdlIGNhbiBidWlsZCB0aGUgY29udmVyc2lvbiB0YWJsZXMgZm9yIG51bWVyb3VzIGNoYXJzZXRzIGF1dG9tYXRpY2FsbHkuCisgCitAQCAtMjAxLDcgKzIwNiw3IEBAIGJlZm9yZS1jb21waWxlICs9ICQoYWRkcHJlZml4ICQob2JqcGZ4KSwkKGdlbmVyYXRlZC1tb2R1bGVzOj0uaCkpCisgaWZuZGVmIGF2b2lkLWdlbmVyYXRlZAorICQob2JqcGZ4KWljb252LXJ1bGVzOiBNYWtlZmlsZQorIAkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKy0JeyBlY2hvICQoZmlsdGVyLW91dCBsaWIlLCAkKG1vZHVsZXMpKTsgXAorKwl7IGVjaG8gJChmaWx0ZXItb3V0IGxpYiUsICQobW9kdWxlcy15KSk7IFwKKyAJICBlY2hvIDhiaXQgJChnZW4tOGJpdC1tb2R1bGVzKTsgXAorIAkgIGVjaG8gOGJpdC1nYXAgJChnZW4tOGJpdC1nYXAtbW9kdWxlcyk7IH0gfCBcCisgCUxDX0FMTD1DIFwKK0BAIC0yNDUsNyArMjUwLDcgQEAgJChhZGRwcmVmaXggJChpbnN0X2djb252ZGlyKS8sICQobW9kdWxlcy5zbykpOiBcCisgCSQoZG8taW5zdGFsbC1wcm9ncmFtKQorICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlczogZ2NvbnYtbW9kdWxlcyAkKCtmb3JjZSkKKyAJJChkby1pbnN0YWxsKQorLWlmZXEgKG5vLCQoY3Jvc3MtY29tcGlsaW5nKSkKKysjIGVnbGliYzogaWZlcSAobm8sJChjcm9zcy1jb21waWxpbmcpKQorICMgVXBkYXRlIHRoZSAkKHByZWZpeCkvbGliL2djb252L2djb252LW1vZHVsZXMuY2FjaGUgZmlsZS4gVGhpcyBpcyBuZWNlc3NhcnkKKyAjIGlmIHRoaXMgbGliYyBoYXMgbW9yZSBnY29udiBtb2R1bGVzIHRoYW4gdGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkIG9uZS4KKyAJaWYgdGVzdCAtZiAiJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzLmNhY2hlIjsgdGhlbiBcCitAQCAtMjU0LDkgKzI1OSw5IEBAIGlmZXEgKG5vLCQoY3Jvc3MtY29tcGlsaW5nKSkKKyAJICAgJChjb21tb24tb2JqcGZ4KWljb252L2ljb252Y29uZmlnIFwKKyAJICAgICAkKGFkZHByZWZpeCAtLXByZWZpeD0sJChpbnN0YWxsX3Jvb3QpKTsgXAorIAlmaQorLWVsc2UKKy0JQGVjaG8gJypAKkAqQCBZb3Ugc2hvdWxkIHJlY3JlYXRlICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcy5jYWNoZScKKy1lbmRpZgorKyMgZWdsaWJjOiBlbHNlCisrIyBlZ2xpYmM6CUBlY2hvICcqQCpAKkAgWW91IHNob3VsZCByZWNyZWF0ZSAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMuY2FjaGUnCisrIyBlZ2xpYmM6IGVuZGlmCisgCisgZW5kaWYgIyBidWlsZC1zaGFyZWQgPSB5ZXMKKyAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL25ldGRiLmggYi9pbmNsdWRlL25ldGRiLmgKK2luZGV4IGUxZjA1MWQuLmY2ZDE1YWEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL25ldGRiLmgKKysrKyBiL2luY2x1ZGUvbmV0ZGIuaAorQEAgLTIzMiw2ICsyMzIsMTAgQEAgZXh0ZXJuIGVudW0gbnNzX3N0YXR1cyBfbnNzXyAjIyBzZXJ2aWNlICMjIF9nZXRob3N0YnluYW1lMl9yCQkgICAgICBcCisgCQkgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgc3RydWN0IGhvc3RlbnQgKmhvc3QsCSAgICAgIFwKKyAJCQljaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4sIGludCAqZXJybm9wLAkgICAgICBcCisgCQkJaW50ICpoX2Vycm5vcCk7CQkJCQkgICAgICBcCisrZXh0ZXJuIGVudW0gbnNzX3N0YXR1cyBfbnNzXyAjIyBzZXJ2aWNlICMjIF9nZXRob3N0YnluYW1lM19yCQkgICAgICBcCisrCQkgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgc3RydWN0IGhvc3RlbnQgKnJlc3VsdCwgICAgIFwKKysJCQljaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4sIGludCAqZXJybm9wLAkgICAgICBcCisrCQkJaW50ICpoX2Vycm5vcCwgaW50MzJfdCAqdHRscCwgY2hhciAqKmNhbm9ucCk7ICAgICAgICAgXAorIGV4dGVybiBlbnVtIG5zc19zdGF0dXMgX25zc18gIyMgc2VydmljZSAjIyBfZ2V0aG9zdGJ5bmFtZV9yCQkgICAgICBcCisgCQkgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBob3N0ZW50ICpob3N0LCBjaGFyICpidWZmZXIsIFwKKyAJCQlzaXplX3QgYnVmbGVuLCBpbnQgKmVycm5vcCwgaW50ICpoX2Vycm5vcCk7CSAgICAgIFwKK2RpZmYgLS1naXQgYS9pbmV0L01ha2VmaWxlIGIvaW5ldC9NYWtlZmlsZQoraW5kZXggZjFkODcxZi4uN2NiMTcwOSAxMDA2NDQKKy0tLSBhL2luZXQvTWFrZWZpbGUKKysrKyBiL2luZXQvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBpbmV0IHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaW5ldAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDcgKzI5LDggQEAgaGVhZGVycwk6PSBuZXRpbmV0L2V0aGVyLmggbmV0aW5ldC9pbi5oIG5ldGluZXQvaW5fc3lzdG0uaCBcCisgCSAgIG5ldGluZXQvdGNwLmggbmV0aW5ldC9pcC5oICQod2lsZGNhcmQgYXJwYS8qLmggcHJvdG9jb2xzLyouaCkgXAorIAkgICBhbGlhc2VzLmggaWZhZGRycy5oIG5ldGluZXQvaXA2LmggbmV0aW5ldC9pY21wNi5oIGJpdHMvaW4uaAorIAorLXJvdXRpbmVzIDo9IGh0b25sIGh0b25zCQlcCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJICs9IGh0b25sIGh0b25zIFwKKyAJICAgIGluZXRfbG5hb2YgaW5ldF9ta2FkcglcCisgCSAgICBpbmV0X25ldG9mIGluZXRfbnRvYSBpbmV0X25ldCBoZXJybm8gaGVycm5vLWxvYyBcCisgCSAgICBnZXRoc3RieWFkIGdldGhzdGJ5YWRfciBnZXRoc3RieW5tIGdldGhzdGJ5bm0yIGdldGhzdGJ5bm0yX3IgXAorQEAgLTM5LDE4ICs0MiwyMyBAQCByb3V0aW5lcyA6PSBodG9ubCBodG9ucwkJXAorIAkgICAgZ2V0c2VydmVudF9yCVwKKyAJICAgIGV0aGVyX2F0b24gZXRoZXJfYXRvbl9yIGV0aGVyX2h0b24gZXRoZXJfbGluZSBcCisgCSAgICBldGhlcl9udG9hIGV0aGVyX250b2FfciBldGhlcl9udG9oIFwKKy0JICAgIHJjbWQgcmV4ZWMgcnVzZXJwYXNzIFwKKyAJICAgIGdldG5ldGdyZW50X3IgZ2V0bmV0Z3JlbnQgXAorLQkgICAgZ2V0YWxpYXNlbnRfciBnZXRhbGlhc2VudCBnZXRhbGlhc25hbWUgZ2V0YWxpYXNuYW1lX3IgXAorLQkgICAgaW42X2FkZHIgZ2V0bmFtZWluZm8gaWZfaW5kZXggaWZhZGRycyBpbmV0Nl9vcHRpb24gXAorKwkgICAgaW42X2FkZHIgZ2V0bmFtZWluZm8gaWZfaW5kZXggaWZhZGRycyBcCisgCSAgICBnZXRpcHY0c291cmNlZmlsdGVyIHNldGlwdjRzb3VyY2VmaWx0ZXIgXAorLQkgICAgZ2V0c291cmNlZmlsdGVyIHNldHNvdXJjZWZpbHRlciBpbmV0Nl9vcHQgaW5ldDZfcnRoCisrCSAgICBnZXRzb3VyY2VmaWx0ZXIgc2V0c291cmNlZmlsdGVyCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1JDTUQpIFwKKysJICs9IHJjbWQgcmV4ZWMgcnVzZXJwYXNzCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMpIFwKKysJICs9IGdldGFsaWFzZW50X3IgZ2V0YWxpYXNlbnQgZ2V0YWxpYXNuYW1lIGdldGFsaWFzbmFtZV9yCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2KSBcCisrCSArPSBpbmV0Nl9vcHRpb24gaW5ldDZfb3B0IGluZXQ2X3J0aAorIAorLWF1eCA6PSBjaGVja19wZiBjaGVja19uYXRpdmUgaWZyZXEKKythdXgtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGNoZWNrX3BmIGNoZWNrX25hdGl2ZSBpZnJlcQorIAorIHRlc3RzIDo9IGh0b250ZXN0IHRlc3RfaWZpbmRleCB0c3QtbnRvYSB0c3QtZXRoZXJfYXRvbiB0c3QtbmV0d29yayBcCistCSB0c3QtZ2V0aG5tIHRlc3QtaWZhZGRycyBidWctaWYxIHRlc3QtaW5ldDZfb3B0IHRzdC1ldGhlcl9saW5lIFwKKysJIHRzdC1nZXRobm0gdGVzdC1pZmFkZHJzIGJ1Zy1pZjEgdHN0LWV0aGVyX2xpbmUgXAorIAkgdHN0LWdldG5pMSB0c3QtZ2V0bmkyIHRzdC1pbmV0Nl9ydGggdHN0LWNoZWNrcworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNikgKz0gdGVzdC1pbmV0Nl9vcHQKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvaW50bC9NYWtlZmlsZSBiL2ludGwvTWFrZWZpbGUKK2luZGV4IDllY2Y4ZmUuLjU4N2JjMGQgMTAwNjQ0CistLS0gYS9pbnRsL01ha2VmaWxlCisrKysgYi9pbnRsL01ha2VmaWxlCitAQCAtMTYsNiArMTYsNyBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorICMgTWFrZWZpbGUgZm9yIGludGwgc3ViZGlyZWN0b3J5OiBtZXNzYWdlIGhhbmRsaW5nIGNvZGUgZnJvbSBHTlUgZ2V0dGV4dC4KKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgc3ViZGlyID0gaW50bAorIAorQEAgLTQ4LDcgKzQ5LDcgQEAgZW5kaWYKKyAkKG9ianBmeClwbHVyYWwubzogcGx1cmFsLmMKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorLWlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisraWZlcSAoeXl5ZXMsJChPUFRJT05fRUdMSUJDX0xPQ0FMRVMpJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoYnVpbGQtc2hhcmVkKSkKKyBpZm5lcSAoJChzdHJpcCAkKE1TR0ZNVCkpLDopCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtdHJhbnNsaXQub3V0ICQob2JqcGZ4KXRzdC1nZXR0ZXh0Lm91dCBcCisgCQkgJChvYmpwZngpdHN0LWdldHRleHQyLm91dCAkKG9ianBmeCl0c3QtY29kZXNldC5vdXQgXAorZGlmZiAtLWdpdCBhL2ludGwvZGNpZ2V0dGV4dC5jIGIvaW50bC9kY2lnZXR0ZXh0LmMKK2luZGV4IDhhM2YwOTEuLmUyNzE2NDggMTAwNjQ0CistLS0gYS9pbnRsL2RjaWdldHRleHQuYworKysrIGIvaW50bC9kY2lnZXR0ZXh0LmMKK0BAIC0xMDAsMTEgKzEwMCwxNSBAQCBleHRlcm4gaW50IGVycm5vOworICMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorICNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKyAKKyAvKiBIYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZCBfX2xpYmNfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZAorKyMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmUKKyAjIGRlZmluZSBnbF9yd2xvY2tfcmRsb2NrIF9fbGliY19yd2xvY2tfcmRsb2NrCisgIyBkZWZpbmUgZ2xfcndsb2NrX3dybG9jayBfX2xpYmNfcndsb2NrX3dybG9jaworICMgZGVmaW5lIGdsX3J3bG9ja191bmxvY2sgX19saWJjX3J3bG9ja191bmxvY2sKK0BAIC01MjMsOCArNTI3LDEwIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAKKyAjaWZkZWYgX0xJQkMKKy0gIF9fbGliY19yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9fbGliY19zZXRsb2NhbGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorLSAgX19saWJjX3J3bG9ja19yZGxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgIGdsX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX19saWJjX3NldGxvY2FsZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCisrICBnbF9yd2xvY2tfcmRsb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgZW5kaWYKKyAjZW5kaWYKKyAKKyAgIGdsX3J3bG9ja19yZGxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKK0BAIC01NTAsNyArNTU2LDExIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICNpZmRlZiBIQVZFX1BFUl9USFJFQURfTE9DQUxFCisgIyBpZm5kZWYgSU5fTElCR0xPQ0FMRQorICMgIGlmZGVmIF9MSUJDCistICBsb2NhbGVuYW1lID0gc3RyZHVwYSAoX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSkpOworKyMgICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICBsb2NhbGVuYW1lID0gc3RyZHVwYSAoX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSkpOworKyMgICBlbHNlCisrICAgICAgbG9jYWxlbmFtZSA9ICJDIjsKKysjICAgZW5kaWYKKyAjICBlbHNlCisgICBjYXRlZ29yeW5hbWUgPSBjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSk7CisgIyAgIGRlZmluZSBDQVRFR09SWU5BTUVfSU5JVElBTElaRUQKK0BAIC01ODEsMTAgKzU5MSwxMiBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAgICAgICBlbHNlCisgCXJldHZhbCA9IChjaGFyICopICgqZm91bmRwKS0+dHJhbnNsYXRpb247CisgCistICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICMgaWZkZWYgX0xJQkMKKy0gICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgIGVuZGlmCisgIyBlbmRpZgorKyAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworICAgICAgIHJldHVybiByZXR2YWw7CisgICAgIH0KK0BAIC04MzgsMTAgKzg1MCwxMyBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAJICAgICAgaWYgKHBsdXJhbCkKKyAJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRvbWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOworIAorLQkgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgI2lmZGVmIF9MSUJDCistCSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrCisrCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBlbmRpZgorICNlbmRpZgorKwkgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgCSAgICAgIHJldHVybiByZXR2YWw7CisgCSAgICB9CisgCX0KK0BAIC04NTAsMTAgKzg2NSwxMiBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAgcmV0dXJuX3VudHJhbnNsYXRlZDoKKyAgIC8qIFJldHVybiB0aGUgdW50cmFuc2xhdGVkIE1TR0lELiAgKi8KKyAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0gIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjaWZkZWYgX0xJQkMKKy0gIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgZ2xfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGVuZGlmCisgI2VuZGlmCisrICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgI2lmbmRlZiBfTElCQworICAgaWYgKCFFTkFCTEVfU0VDVVJFKQorICAgICB7CitAQCAtMTU1MCw3ICsxNTY3LDExIEBAIGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKyAgICAgIGBMQ194eHgnLCBhbmQgYExBTkcnLiAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlCisgICAgICBgc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworICMgaWZkZWYgX0xJQkMKKysjICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGxvY2FsZSA9IF9fY3VycmVudF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnkpOworKyMgIGVsc2UKKysgIGxvY2FsZSA9ICJDIjsKKysjICBlbmRpZgorICMgZWxzZQorICAgbG9jYWxlX2RlZmF1bHRlZCA9IDA7CisgIyAgaWYgSEFWRV9VU0VMT0NBTEUKK2RpZmYgLS1naXQgYS9pby9NYWtlZmlsZSBiL2lvL01ha2VmaWxlCitpbmRleCA2MTNkY2UwLi42OTc0MzllIDEwMDY0NAorLS0tIGEvaW8vTWFrZWZpbGUKKysrKyBiL2lvL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgSS9PIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaW8KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zNiw3ICszOCw3IEBAIHJvdXRpbmVzIDo9CQkJCQkJCQlcCisgCWZ4c3RhdGF0IGZ4c3RhdGF0NjQJCQkJCQlcCisgCXN0YXRmcyBmc3RhdGZzIHN0YXRmczY0IGZzdGF0ZnM2NAkJCQlcCisgCXN0YXR2ZnMgZnN0YXR2ZnMgc3RhdHZmczY0IGZzdGF0dmZzNjQJCQkJXAorLQl1bWFzayBjaG1vZCBmY2htb2QgbGNobW9kIGZjaG1vZGF0CQkJCVwKKysJdW1hc2sgY2htb2QgZmNobW9kIGZjaG1vZGF0CQkJCQlcCisgCW1rZGlyIG1rZGlyYXQJCQkJCQkJXAorIAlvcGVuIG9wZW5fMiBvcGVuNjQgb3BlbjY0XzIgb3BlbmF0IG9wZW5hdF8yIG9wZW5hdDY0IG9wZW5hdDY0XzIJXAorIAlyZWFkIHdyaXRlIGxzZWVrIGxzZWVrNjQgYWNjZXNzIGV1aWRhY2Nlc3MgZmFjY2Vzc2F0CQlcCitAQCAtNDksMTEgKzUxLDEzIEBAIHJvdXRpbmVzIDo9CQkJCQkJCQlcCisgCXR0eW5hbWUgdHR5bmFtZV9yIGlzYXR0eQkJCQkJXAorIAlsaW5rIGxpbmthdCBzeW1saW5rIHN5bWxpbmthdCByZWFkbGluayByZWFkbGlua2F0CQlcCisgCXVubGluayB1bmxpbmthdCBybWRpcgkJCQkJCVwKKy0JZnR3IGZ0dzY0IGZ0cyBwb2xsIHBwb2xsCQkJCQlcCisrCXBvbGwgcHBvbGwJCQkJCQkJXAorIAlwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhZHZpc2U2NAkJCQkJXAorIAlwb3NpeF9mYWxsb2NhdGUgcG9zaXhfZmFsbG9jYXRlNjQJCQkJXAorIAlzZW5kZmlsZSBzZW5kZmlsZTY0IFwKKyAJdXRpbWVuc2F0IGZ1dGltZW5zCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JTRCkgKz0gbGNobW9kCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkgKz0gZnR3IGZ0dzY0IGZ0cworIAorIGF1eCA6PSBoYXZlX29fY2xvZXhlYworIAorQEAgLTY0LDE4ICs2OCwyMiBAQCBzdGF0aWMtb25seS1yb3V0aW5lcyA9IHN0YXQgZnN0YXQgbHN0YXQgc3RhdDY0IGZzdGF0NjQgbHN0YXQ2NAlcCisgCQkgICAgICAgZnN0YXRhdCBmc3RhdGF0NjQgbWtub2QgbWtub2RhdAorIAorIG90aGVycwkJOj0gcHdkCistdGVzdC1zcmNzCTo9IGZ0d3Rlc3QKKyt0ZXN0LXNyY3MtJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkgOj0gZnR3dGVzdAorIHRlc3RzCQk6PSB0ZXN0LXV0aW1lIHRlc3Qtc3RhdCB0ZXN0LXN0YXQyIHRlc3QtbGZzIHRzdC1nZXRjd2QgXAorLQkJICAgdHN0LWZjbnRsIGJ1Zy1mdHcxIGJ1Zy1mdHcyIGJ1Zy1mdHczIGJ1Zy1mdHc0IHRzdC1zdGF0dmZzIFwKKysJCSAgIHRzdC1mY250bCB0c3Qtc3RhdHZmcyBcCisgCQkgICB0c3Qtb3BlbmF0IHRzdC11bmxpbmthdCB0c3QtZnN0YXRhdCB0c3QtZnV0aW1lc2F0IFwKKyAJCSAgIHRzdC1yZW5hbWVhdCB0c3QtZmNob3duYXQgdHN0LWZjaG1vZGF0IHRzdC1mYWNjZXNzYXQgXAorIAkJICAgdHN0LXN5bWxpbmthdCB0c3QtbGlua2F0IHRzdC1yZWFkbGlua2F0IHRzdC1ta2RpcmF0IFwKKy0JCSAgIHRzdC1ta25vZGF0IHRzdC1ta2ZpZm9hdCB0c3QtdHR5bmFtZV9yIGJ1Zy1mdHc1IFwKKysJCSAgIHRzdC1ta25vZGF0IHRzdC1ta2ZpZm9hdCB0c3QtdHR5bmFtZV9yIFwKKyAJCSAgIHRzdC1wb3NpeF9mYWxsb2NhdGUKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSArPSBidWctZnR3MSBidWctZnR3MiBidWctZnR3MyBidWctZnR3NCBcCisrCQkJCSAgICBidWctZnR3NQorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWZ0d3Rlc3Qub3V0CisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9saWJpZG4vTWFrZWZpbGUgYi9saWJpZG4vTWFrZWZpbGUKK2luZGV4IDk0MGZhNTIuLjQzYWFkMGMgMTAwNjQ0CistLS0gYS9saWJpZG4vTWFrZWZpbGUKKysrKyBiL2xpYmlkbi9NYWtlZmlsZQorQEAgLTE2LDYgKzE2LDcgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIE1ha2VmaWxlIGZvciBsaWJpZG4gc3ViZGlyZWN0b3J5IG9mIEdOVSBDIExpYnJhcnkuCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorIHN1YmRpcgk6PSBsaWJpZG4KKyAKK0BAIC0yMyw4ICsyNCw4IEBAIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIHJvdXRpbmVzID0gaWRuLXN0dWIKKyAKKy1leHRyYS1saWJzCQk9IGxpYmNpZG4KKy1leHRyYS1saWJzLW90aGVycwk9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JRE4pID0gbGliY2lkbgorK2V4dHJhLWxpYnMtb3RoZXJzLXkgPSAkKGV4dHJhLWxpYnMteSkKKyAKKyBsaWJjaWRuLXJvdXRpbmVzIDo9IHB1bnljb2RlIHRvdXRmOCBuZmtjIHN0cmluZ3ByZXAgcmZjMzQ1NCBwcm9maWxlcyBpZG5hIFwKKyAJCSAgICBpY29udm1lCitkaWZmIC0tZ2l0IGEvbGliaWRuL3RvdXRmOC5jIGIvbGliaWRuL3RvdXRmOC5jCitpbmRleCBjN2U2N2NhLi42MmRmNDc4IDEwMDY0NAorLS0tIGEvbGliaWRuL3RvdXRmOC5jCisrKysgYi9saWJpZG4vdG91dGY4LmMKK0BAIC0zMyw2ICszMywxMSBAQAorIC8qIEdldCBzdHJsZW4uICovCisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKy8qIEdldCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUuICAqLworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAvKiBHZXQgaWNvbnZfc3RyaW5nLiAqLworICNpbmNsdWRlICJpY29udm1lLmgiCisgCitAQCAtNDcsNyArNTIsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0KCkgbmxfbGFuZ2luZm8gKENPREVTRVQpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjICBkZWZpbmUgc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCgpIG5sX2xhbmdpbmZvIChDT0RFU0VUKQorKyMgZWxzZQorKyMgIGRlZmluZSBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0KCkgIkFOU0lfWDMuNC0xOTY4IgorKyMgZW5kaWYKKyAjZWxzZQorIC8qKgorICAqIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQgLSByZXR1cm4gY2hhcnNldCB1c2VkIGluIGN1cnJlbnQgbG9jYWxlCitkaWZmIC0tZ2l0IGEvbGliaW8vTWFrZWZpbGUgYi9saWJpby9NYWtlZmlsZQoraW5kZXggN2IzYmNmOS4uMjdjOTE4NiAxMDA2NDQKKy0tLSBhL2xpYmlvL01ha2VmaWxlCisrKysgYi9saWJpby9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTcGVjaWZpYyBtYWtlZmlsZSBmb3IgbGliaW8uCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbGliaW8KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNywxNiArMjksMTMgQEAgaGVhZGVycwk6PSBzdGRpby5oIGxpYmlvLmggX0dfY29uZmlnLmggYml0cy9zdGRpby5oIGJpdHMvc3RkaW8tbG9jay5oIFwKKyAKKyByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCWZpbGVkb2FsbG9jIGlvZmNsb3NlIGlvZmRvcGVuIGlvZmZsdXNoIGlvZmdldHBvcyBpb2ZnZXRzIGlvZm9wZW4gICAgICBcCistCWlvZm9wbmNvb2sgaW9mcHV0cyBpb2ZyZWFkIGlvZnNldHBvcyBpb2Z0ZWxsIHdmaWxlZG9hbGxvYwkgICAgICBcCisrCWlvZm9wbmNvb2sgaW9mcHV0cyBpb2ZyZWFkIGlvZnNldHBvcyBpb2Z0ZWxsCQkJICAgICAgXAorIAlpb2Z3cml0ZSBpb2dldGRlbGltIGlvZ2V0bGluZSBpb2dldHMgaW9wYWRuIGlvcG9wZW4gaW9wdXRzCSAgICAgIFwKKyAJaW9zZWVrb2ZmIGlvc2Vla3BvcyBpb3NldGJ1ZmZlciBpb3NldHZidWYgaW91bmdldGMJCSAgICAgIFwKKyAJaW92c3ByaW50ZiBpb3Zzc2NhbmYJCQkJCQkgICAgICBcCisgCWlvZmdldHBvczY0IGlvZm9wZW42NCBpb2ZzZXRwb3M2NAkJCQkgICAgICBcCistCWZwdXR3YyBmcHV0d2NfdSBnZXR3YyBnZXR3Y191IGdldHdjaGFyIGdldHdjaGFyX3UgaW9mZ2V0d3MgaW9mZ2V0d3NfdSBcCistCWlvZnB1dHdzIGlvZnB1dHdzX3UgaW9nZXR3bGluZSBpb3dwYWRuIGlvdW5nZXR3YyBwdXR3YyBwdXR3Y191CSAgICAgIFwKKy0JcHV0d2NoYXIgcHV0d2NoYXJfdSBwdXRjaGFyIHB1dGNoYXJfdSBmd3ByaW50ZiBzd3ByaW50ZiB2d3ByaW50ZiAgICAgIFwKKy0Jd3ByaW50ZiB3c2NhbmYgZndzY2FuZiB2d3NjYW5mIHZzd3ByaW50ZiBpb3Zzd3NjYW5mIHN3c2NhbmYgd2dlbm9wcyAgIFwKKy0Jd3N0cm9wcyB3ZmlsZW9wcyBpb2Z3aWRlIGZ3aWRlIHdtZW1zdHJlYW0JCQkgICAgICBcCisrCXB1dGNoYXIgcHV0Y2hhcl91CQkJCQkJICAgICAgXAorKwlpb2Z3aWRlCQkJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorIAljbGVhcmVyciBmZW9mIGZlcnJvciBmaWxlbm8gZnB1dGMgZnJlb3BlbiBmc2VlayBnZXRjIGdldGNoYXIJICAgICAgXAorIAltZW1zdHJlYW0gcGNsb3NlIHB1dGMgcHV0Y2hhciByZXdpbmQgc2V0YnVmIHNldGxpbmVidWYgdmFzcHJpbnRmICAgICAgXAorQEAgLTQ4LDI0ICs0Nyw0OSBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorIAlsaWJjX2ZhdGFsIGZtZW1vcGVuIG9sZGZtZW1vcGVuCisgCistdGVzdHMgPSB0c3Rfc3dwcmludGYgdHN0X3dwcmludGYgdHN0X3N3c2NhbmYgdHN0X3dzY2FuZiB0c3RfZ2V0d2MgdHN0X3B1dHdjICAgXAorLQl0c3Rfd3ByaW50ZjIgdHN0LXdpZGV0ZXh0IHRlc3QtZm1lbW9wZW4gdHN0LWV4dCB0c3QtZXh0MiBcCistCXRzdC1mZ2V0d3MgdHN0LXVuZ2V0d2MxIHRzdC11bmdldHdjMiB0c3Qtc3dzY2FuZiB0c3Qtc3NjYW5mCSAgICAgIFwKKy0JdHN0LW1tYXAtc2V0dmJ1ZiBidWctdW5nZXR3YzEgYnVnLXVuZ2V0d2MyIHRzdC1hdGltZSB0c3QtZW9mICAgICAgICAgIFwKKy0JdHN0LWZyZW9wZW4gYnVnLXJld2luZCBidWctcmV3aW5kMiBidWctdW5nZXRjIGJ1Zy1mc2VlayBcCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0JCQkJICAgICAgXAorKwl3ZmlsZWRvYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlpb3dwYWRuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlzd3ByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl2c3dwcmludGYgaW92c3dzY2FuZiBzd3NjYW5mIHdnZW5vcHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl3c3Ryb3BzIHdmaWxlb3BzIHdtZW1zdHJlYW0KKytyb3V0aW5lcy0kKGNhbGwgb3B0aW9uLWRpc2FibGVkLCBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0JICAgICAgXAorKwl3ZHVtbXlmaWxlb3BzCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgKz0JCQkJICAgICAgXAorKwlmcHV0d2MgZnB1dHdjX3UgZ2V0d2MgZ2V0d2NfdSBnZXR3Y2hhciBnZXR3Y2hhcl91IGlvZmdldHdzIGlvZmdldHdzX3UgXAorKwlpb2ZwdXR3cyBpb2ZwdXR3c191IGlvZ2V0d2xpbmUgaW91bmdldHdjIHB1dHdjIHB1dHdjX3UgICAgICAgICAgICAgICAgXAorKwlwdXR3Y2hhciBwdXR3Y2hhcl91IGZ3cHJpbnRmIHZ3cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl3cHJpbnRmIHdzY2FuZiBmd3NjYW5mIHZ3c2NhbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlmd2lkZQorKworK3Rlc3RzID0gdGVzdC1mbWVtb3BlbiB0c3QtZXh0IHRzdC1leHQyIFwKKysJdHN0LW1tYXAtc2V0dmJ1ZiB0c3QtYXRpbWUgdHN0LWVvZiBcCisrCXRzdC1mcmVvcGVuIGJ1Zy11bmdldGMgYnVnLWZzZWVrIFwKKyAJdHN0LW1tYXAtZW9mc3luYyB0c3QtbW1hcC1mZmx1c2hzeW5jIGJ1Zy1tbWFwLWZmbHVzaCBcCistCXRzdC1tbWFwMi1lb2ZzeW5jIHRzdC1tbWFwLW9mZmVuZCBidWctZm9wZW5hKyBidWctd2ZmbHVzaCBcCistCWJ1Zy11bmdldGMyIGJ1Zy1mdGVsbCBidWctdW5nZXRjMyBidWctdW5nZXRjNCB0c3QtZm9wZW5sb2MyIFwKKysJdHN0LW1tYXAyLWVvZnN5bmMgdHN0LW1tYXAtb2ZmZW5kIGJ1Zy1mb3BlbmErIFwKKysJYnVnLXVuZ2V0YzIgYnVnLXVuZ2V0YzMgYnVnLXVuZ2V0YzQgXAorIAl0c3QtbWVtc3RyZWFtMSB0c3QtbWVtc3RyZWFtMiBcCistCXRzdC13bWVtc3RyZWFtMSB0c3Qtd21lbXN0cmVhbTIgXAorLQlidWctbWVtc3RyZWFtMSBidWctd21lbXN0cmVhbTEgXAorLQl0c3Qtc2V0dmJ1ZjEgdHN0LXBvcGVuMSB0c3QtZmdldHdjIGJ1Zy13c2V0cG9zIHRzdC1mc2VlayBcCistCXRzdC1md3JpdGUtZXJyb3IgdHN0LWZ0ZWxsLXBhcnRpYWwtd2lkZSB0c3QtZnRlbGwtYWN0aXZlLWhhbmRsZXIgXAorLQl0c3QtZnRlbGwtYXBwZW5kIHRzdC1mcHV0d3MKKysJYnVnLW1lbXN0cmVhbTEgdHN0LXBvcGVuMSB0c3QtZndyaXRlLWVycm9yIFwKKysJdHN0LWZ0ZWxsLWFjdGl2ZS1oYW5kbGVyIHRzdC1mdGVsbC1hcHBlbmQKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJKz0gdHN0LXN3c2NhbmYgdHN0LWZnZXR3cyB0c3Qtc2V0dmJ1ZjEgXAorKwl0c3QtdW5nZXR3YzEgdHN0LXVuZ2V0d2MyIGJ1Zy1mdGVsbCBidWctdW5nZXR3YzIgXAorKwl0c3Qtd2lkZXRleHQgdHN0LWZwdXR3cworK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pIFwKKysJKz0gYnVnLXJld2luZCBidWctcmV3aW5kMiBidWctdW5nZXR3YzEgXAorKwlidWctd2ZmbHVzaCBidWctd21lbXN0cmVhbTEgdHN0LWZvcGVubG9jMiBcCisrCXRzdF9nZXR3YyBcCisrCXRzdF9wdXR3YyB0c3Rfd3ByaW50ZiB0c3Rfd3ByaW50ZjIgdHN0X3dzY2FuZiBcCisrCXRzdC1mZ2V0d2MgYnVnLXdzZXRwb3MgdHN0LWZzZWVrIHRzdC1mdGVsbC1wYXJ0aWFsLXdpZGUKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSs9IHRzdF9zd3ByaW50ZiB0c3Rfc3dzY2FuZiBcCisrCXRzdC1zc2NhbmYgXAorKwl0c3Qtd21lbXN0cmVhbTEgdHN0LXdtZW1zdHJlYW0yCisrCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIEFkZCB0ZXN0LWZvcGVubG9jIG9ubHkgaWYgc2hhcmVkIGxpYnJhcnkgaXMgZW5hYmxlZCBzaW5jZSBpdCBkZXBlbmRzIG9uCisgIyBzaGFyZWQgbG9jYWxlZGF0YSBvYmplY3RzLgorLXRlc3RzICs9IHRzdC1mb3BlbmxvYworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gdHN0LWZvcGVubG9jCisgZW5kaWYKKyB0ZXN0LXNyY3MgPSB0ZXN0LWZyZW9wZW4KKyAKK0BAIC0xNjQsMTMgKzE4OCwxNyBAQCBzaGFyZWQtb25seS1yb3V0aW5lcyA9IG9sZGlvZm9wZW4gb2xkaW9mZG9wZW4gb2xkaW9mY2xvc2Ugb2xkZmlsZW9wcwlcCisgCQkgICAgICAgb2xkaW9mc2V0cG9zNjQKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0ZXN0LWZyZW9wZW4ub3V0CisrZW5kaWYKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIFJ1biB0c3QtZm9wZW5sb2MtY21wLm91dCBhbmQgdHN0LW9wZW5sb2MtbWVtLm91dCBvbmx5IGlmIHNoYXJlZAorICMgbGlicmFyeSBpcyBlbmFibGVkIHNpbmNlIHRoZXkgZGVwZW5kIG9uIHRzdC1mb3BlbmxvYy5vdXQuCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtZm9wZW5sb2MtY21wLm91dCAkKG9ianBmeCl0c3QtZm9wZW5sb2MtbWVtLm91dAorIGVuZGlmCisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9saWJpby9fX2ZwdXJnZS5jIGIvbGliaW8vX19mcHVyZ2UuYworaW5kZXggMDY1Y2Y2MS4uZTMyYTNlOSAxMDA2NDQKKy0tLSBhL2xpYmlvL19fZnB1cmdlLmMKKysrKyBiL2xpYmlvL19fZnB1cmdlLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgdm9pZAorIF9fZnB1cmdlIChGSUxFICpmcCkKKyB7CistICBpZiAoZnAtPl9tb2RlID4gMCkKKysgIGlmIChfSU9faXNfd2lkZSAoZnApKQorICAgICB7CisgICAgICAgLyogV2lkZS1jaGFyIHN0cmVhbS4gICovCisgICAgICAgaWYgKF9JT19pbl9iYWNrdXAgKGZwKSkKK2RpZmYgLS1naXQgYS9saWJpby9maWxlb3BzLmMgYi9saWJpby9maWxlb3BzLmMKK2luZGV4IGNiY2Q2ZjUuLjE5ZTQzYzIgMTAwNjQ0CistLS0gYS9saWJpby9maWxlb3BzLmMKKysrKyBiL2xpYmlvL2ZpbGVvcHMuYworQEAgLTM5LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaWYgX0xJQkMKKyAjIGluY2x1ZGUgIi4uL3djc21icy93Y3NtYnNsb2FkLmgiCitAQCAtMTczLDcgKzE3NCw3IEBAIF9JT19uZXdfZmlsZV9jbG9zZV9pdCAoX0lPX0ZJTEUgKmZwKQorIAorICAgLyogRnJlZSBidWZmZXIuICovCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorLSAgaWYgKGZwLT5fbW9kZSA+IDApCisrICBpZiAoX0lPX2lzX3dpZGUgKGZwKSkKKyAgICAgeworICAgICAgIGlmIChfSU9faGF2ZV93YmFja3VwIChmcCkpCisgCV9JT19mcmVlX3diYWNrdXBfYXJlYSAoZnApOworQEAgLTM0OCw2ICszNDksNyBAQCBfSU9fbmV3X2ZpbGVfZm9wZW4gKF9JT19GSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsCisgICAgICAgY3MgPSBzdHJzdHIgKGxhc3RfcmVjb2duaXplZCArIDEsICIsY2NzPSIpOworICAgICAgIGlmIChjcyAhPSBOVUxMKQorIAl7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAJICAvKiBZZXAuICBMb2FkIHRoZSBhcHByb3ByaWF0ZSBjb252ZXJzaW9ucyBhbmQgc2V0IHRoZSBvcmllbnRhdGlvbgorIAkgICAgIHRvIHdpZGUuICAqLworIAkgIHN0cnVjdCBnY29udl9mY3RzIGZjdHM7CitAQCAtNDE4LDYgKzQyMCwxMiBAQCBfSU9fbmV3X2ZpbGVfZm9wZW4gKF9JT19GSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsCisgCisgCSAgLyogU2V0IHRoZSBtb2RlIG5vdy4gICovCisgCSAgcmVzdWx0LT5fbW9kZSA9IDE7CisrI2Vsc2UKKysgICAgICAgICAgLyogVHJlYXQgdGhpcyBhcyBpZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBnaXZlbiBjaGFyYWN0ZXIgc2V0LiAgKi8KKysgICAgICAgICAgKHZvaWQpIF9JT19maWxlX2Nsb3NlX2l0IChmcCk7CisrICAgICAgICAgIF9fc2V0X2Vycm5vIChFSU5WQUwpOworKyAgICAgICAgICByZXR1cm4gTlVMTDsKKysjZW5kaWYKKyAJfQorICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGliaW8vaW9md2lkZS5jIGIvbGliaW8vaW9md2lkZS5jCitpbmRleCAwYzE3NWQxLi4zZTlmNTJiIDEwMDY0NAorLS0tIGEvbGliaW8vaW9md2lkZS5jCisrKysgYi9saWJpby9pb2Z3aWRlLmMKK0BAIC0yNiw2ICsyNiw3IEBACisgCisgI2luY2x1ZGUgPGxpYmlvUC5oPgorICNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGluY2x1ZGUgPGRsZmNuLmg+CisgIyBpbmNsdWRlIDx3Y2hhci5oPgorICNlbmRpZgorQEAgLTQzLDYgKzQ0LDggQEAKKyAjZW5kaWYKKyAKKyAKKysjaWYgISBkZWZpbmVkIF9MSUJDIHx8IF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysKKyAvKiBQcm90b3R5cGVzIG9mIGxpYmlvJ3MgY29kZWN2dCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBlbnVtIF9fY29kZWN2dF9yZXN1bHQgZG9fb3V0IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKmNvZGVjdnQsCisgCQkJCSAgICAgX19tYnN0YXRlX3QgKnN0YXRlcCwKK0BAIC00OTksMyArNTAyLDI2IEBAIGRvX21heF9sZW5ndGggKHN0cnVjdCBfSU9fY29kZWN2dCAqY29kZWN2dCkKKyAgIHJldHVybiBNQl9DVVJfTUFYOworICNlbmRpZgorIH0KKysKKysjZWxzZQorKy8qIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLiAgKi8KKysKKysjdW5kZWYgX0lPX2Z3aWRlCisraW50CisrX0lPX2Z3aWRlIChmcCwgbW9kZSkKKysgICAgIF9JT19GSUxFICpmcDsKKysgICAgIGludCBtb2RlOworK3sKKysgIC8qIERpZSBoZWxwZnVsbHkgaWYgdGhlIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGEgd2lkZSBzdHJlYW07IEkKKysgICAgIGRpc2JlbGlldmUgdGhhdCBtb3N0IHVzZXJzIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgZnJvbQorKyAgICAgJ2Z3aWRlIChmcCwgMSknLiAgKi8KKysgIGFzc2VydCAobW9kZSA8PSAwKTsKKysKKysgIC8qIFdlIGNhbiBvbmx5IG1ha2Ugc3RyZWFtcyBieXRlLW9yaWVudGVkLCB3aGljaCBpcyB0cml2aWFsLiAgKi8KKysgIGlmIChtb2RlIDwgMCkKKysgICAgZnAtPl9tb2RlID0gLTE7CisrCisrICByZXR1cm4gZnAtPl9tb2RlOworK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJpby9pb3NlZWtvZmYuYyBiL2xpYmlvL2lvc2Vla29mZi5jCitpbmRleCAxMTc2NWNmLi4xNWQ2MjMwIDEwMDY0NAorLS0tIGEvbGliaW8vaW9zZWVrb2ZmLmMKKysrKyBiL2xpYmlvL2lvc2Vla29mZi5jCitAQCAtNjAsNyArNjAsNyBAQCBfSU9fc2Vla29mZl91bmxvY2tlZCAoZnAsIG9mZnNldCwgZGlyLCBtb2RlKQorIAkgIGVsc2UKKyAJICAgIGFib3J0ICgpOworIAl9CistICAgICAgaWYgKF9JT19md2lkZSAoZnAsIDApIDwgMCkKKysgICAgICBpZiAoISBfSU9faXNfd2lkZSAoZnApKQorIAlfSU9fZnJlZV9iYWNrdXBfYXJlYSAoZnApOworICAgICAgIGVsc2UKKyAJX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChmcCk7CitkaWZmIC0tZ2l0IGEvbGliaW8vaW9zZWVrcG9zLmMgYi9saWJpby9pb3NlZWtwb3MuYworaW5kZXggYTc2NTJhMS4uNjkzOGI2OCAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvc2Vla3Bvcy5jCisrKysgYi9saWJpby9pb3NlZWtwb3MuYworQEAgLTM1LDcgKzM1LDcgQEAgX0lPX3NlZWtwb3NfdW5sb2NrZWQgKGZwLCBwb3MsIG1vZGUpCisgICAvKiBJZiB3ZSBoYXZlIGEgYmFja3VwIGJ1ZmZlciwgZ2V0IHJpZCBvZiBpdCwgc2luY2UgdGhlIF9fc2Vla29mZgorICAgICAgY2FsbGJhY2sgbWF5IG5vdCBrbm93IHRvIGRvIHRoZSByaWdodCB0aGluZyBhYm91dCBpdC4KKyAgICAgIFRoaXMgbWF5IGJlIG92ZXIta2lsbCwgYnV0IGl0J2xsIGRvIGZvciBub3cuIFRPRE8gKi8KKy0gIGlmIChfSU9fZndpZGUgKGZwLCAwKSA8PSAwKQorKyAgaWYgKCEgX0lPX2lzX3dpZGUgKGZwKSkKKyAgICAgeworICAgICAgIGlmIChfSU9faGF2ZV9iYWNrdXAgKGZwKSkKKyAJX0lPX2ZyZWVfYmFja3VwX2FyZWEgKGZwKTsKK2RpZmYgLS1naXQgYS9saWJpby9pb3NldGJ1ZmZlci5jIGIvbGliaW8vaW9zZXRidWZmZXIuYworaW5kZXggMGE0MWMxMC4uM2Q5OWZhMCAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvc2V0YnVmZmVyLmMKKysrKyBiL2xpYmlvL2lvc2V0YnVmZmVyLmMKK0BAIC0yNCw2ICsyNCw4IEBACisgICAgVGhpcyBleGNlcHRpb24gYXBwbGllcyB0byBjb2RlIHJlbGVhc2VkIGJ5IGl0cyBjb3B5cmlnaHQgaG9sZGVycworICAgIGluIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrCisgI2luY2x1ZGUgImxpYmlvUC5oIgorIAorIHZvaWQKK0BAIC0zOCw5ICs0MCwxMSBAQCBfSU9fc2V0YnVmZmVyIChmcCwgYnVmLCBzaXplKQorICAgaWYgKCFidWYpCisgICAgIHNpemUgPSAwOworICAgKHZvaWQpIF9JT19TRVRCVUYgKGZwLCBidWYsIHNpemUpOworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpZiAoX0lPX3Z0YWJsZV9vZmZzZXQgKGZwKSA9PSAwICYmIGZwLT5fbW9kZSA9PSAwICYmIF9JT19DSEVDS19XSURFIChmcCkpCisgICAgIC8qIFdlIGFsc28gaGF2ZSB0byBzZXQgdGhlIGJ1ZmZlciB1c2luZyB0aGUgd2lkZSBjaGFyIGZ1bmN0aW9uLiAgKi8KKyAgICAgKHZvaWQpIF9JT19XU0VUQlVGIChmcCwgYnVmLCBzaXplKTsKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworICAgX0lPX3JlbGVhc2VfbG9jayAoZnApOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9JT19zZXRidWZmZXIpCitkaWZmIC0tZ2l0IGEvbGliaW8vbGliaW9QLmggYi9saWJpby9saWJpb1AuaAoraW5kZXggMGYxNmUyZC4uZDI2MjZkNiAxMDA2NDQKKy0tLSBhL2xpYmlvL2xpYmlvUC5oCisrKysgYi9saWJpby9saWJpb1AuaAorQEAgLTQ0LDYgKzQ0LDEwIEBACisgLyojIGluY2x1ZGUgPGNvbXRocmVhZC5oPiovCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPG1hdGhfbGRibF9vcHQuaD4KKyAKKyAjaW5jbHVkZSAiaW9saWJpby5oIgorQEAgLTUyMyw4ICs1MjcsMjAgQEAgZXh0ZXJuIHZvaWQgX0lPX29sZF9pbml0IChfSU9fRklMRSAqZnAsIGludCBmbGFncykgX19USFJPVzsKKyAKKyAKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCisrCisrLyogX0lPX2lzX3dpZGUgKGZwKSBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gJ19JT19md2lkZSAoZnAsIDApID4gMCcsCisrICAgZXhjZXB0IHRoYXQgd2hlbiBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgaXQKKysgICBleHBhbmRzIHRvIGEgY29uc3RhbnQsIGFsbG93aW5nIHRoZSBjb21waWxlciB0byByZWFsaXplIHRoYXQgaXQgY2FuCisrICAgZWxpbWluYXRlIGNvZGUgdGhhdCByZWZlcmVuY2VzIHdpZGUgc3RyZWFtIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKysgICBUaGlzLCBpbiB0dXJuLCBhbGxvd3MgdXMgdG8gb21pdCB0aGVtLiAgKi8KKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyMgZGVmaW5lIF9JT19pc193aWRlKF9mKSAoKF9mKS0+X21vZGUgPiAwKQorKyNlbHNlCisrIyBkZWZpbmUgX0lPX2lzX3dpZGUoX2YpICgwKQorKyNlbmRpZgorKworICMgZGVmaW5lIF9JT19kb19mbHVzaChfZikgXAorLSAgKChfZiktPl9tb2RlIDw9IDAJCQkJCQkJICAgICAgXAorKyAgKCEgX0lPX2lzX3dpZGUgKF9mKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA/IF9JT19kb193cml0ZShfZiwgKF9mKS0+X0lPX3dyaXRlX2Jhc2UsCQkJCSAgICAgIFwKKyAJCSAgKF9mKS0+X0lPX3dyaXRlX3B0ci0oX2YpLT5fSU9fd3JpdGVfYmFzZSkJCSAgICAgIFwKKyAgICA6IF9JT193ZG9fd3JpdGUoX2YsIChfZiktPl93aWRlX2RhdGEtPl9JT193cml0ZV9iYXNlLAkJICAgICAgXAorZGlmZiAtLWdpdCBhL2xpYmlvL3dkdW1teWZpbGVvcHMuYyBiL2xpYmlvL3dkdW1teWZpbGVvcHMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMwMTUwYjgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmlvL3dkdW1teWZpbGVvcHMuYworQEAgLTAsMCArMSwxNjEgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGxpbmsgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIHdpdGgKKysgICBmaWxlcyBjb21waWxlZCB3aXRoIGEgR05VIGNvbXBpbGVyIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwKKysgICB0aGF0IGRvZXMgbm90IGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90CisrICAgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlCisrICAgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKyAgIFRoaXMgZXhjZXB0aW9uIGFwcGxpZXMgdG8gY29kZSByZWxlYXNlZCBieSBpdHMgY29weXJpZ2h0IGhvbGRlcnMKKysgICBpbiBmaWxlcyBjb250YWluaW5nIHRoZSBleGNlcHRpb24uICAqLworKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxpYmlvUC5oPgorKworK3N0YXRpYyB2b2lkIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisrX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICh2b2lkKQorK3sKKysgIHN0YXRpYyBjb25zdCBjaGFyIGVycnN0cltdCisrICAgID0gKCJUaGUgYXBwbGljYXRpb24gdHJpZWQgdG8gdXNlIHdpZGUgY2hhcmFjdGVyIEkvTywgYnV0IGxpYmMuc28iCisrICAgICAgICIgd2FzIGNvbXBpbGVkXG4iCisrICAgICAgICJ3aXRoIHRoZSBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBvcHRpb24gZ3JvdXAgZGlzYWJsZWQuXG4iKTsKKysgIF9fbGliY193cml0ZSAoU1RERVJSX0ZJTEVOTywgZXJyc3RyLCBzaXplb2YgKGVycnN0cikgLSAxKTsKKysgIGFib3J0ICgpOworK30KKysKKytzdGF0aWMgdm9pZAorK19JT193ZmlsZV9kaXNhYmxlZF92b2lkX2ludCAoX0lPX0ZJTEUgKmZwLCBpbnQgeCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X2ludCAoX0lPX0ZJTEUgKmZwLCBpbnQgeCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUgKF9JT19GSUxFICpmcCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3hzcHV0biAoX0lPX0ZJTEUgKmZwLCBjb25zdCB2b2lkICpkYXRhLCBfSU9fc2l6ZV90IG4pCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF94c2dldG4gKF9JT19GSUxFICpmcCwgdm9pZCAqZGF0YSwgX0lPX3NpemVfdCBuKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19vZmY2NF90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtvZmYgKF9JT19GSUxFICpmcCwgX0lPX29mZjY0X3Qgb2ZmLCBpbnQgZGlyLCBpbnQgbW9kZSkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fb2ZmNjRfdAorK19JT193ZmlsZV9kaXNhYmxlZF9zZWVrcG9zIChfSU9fRklMRSAqZnAsIF9JT19vZmY2NF90IHBvcywgaW50IGZsYWdzKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19GSUxFICoKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2V0YnVmIChfSU9fRklMRSAqZnAsIGNoYXIgKmJ1ZmZlciwgX0lPX3NzaXplX3QgbGVuZ3RoKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3JlYWQgKF9JT19GSUxFICpmcCwgdm9pZCAqYnVmZmVyLCBfSU9fc3NpemVfdCBsZW5ndGgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NzaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfd3JpdGUgKF9JT19GSUxFICpmcCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBfSU9fc3NpemVfdCBsZW5ndGgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX29mZjY0X3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2VlayAoX0lPX0ZJTEUgKmZwLCBfSU9fb2ZmNjRfdCBvZmZzZXQsIGludCBtb2RlKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9jbG9zZSAoX0lPX0ZJTEUgKmZwKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9zdGF0IChfSU9fRklMRSAqZnAsIHZvaWQgKmJ1ZikKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2hvd21hbnljIChfSU9fRklMRSAqZnApCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgdm9pZAorK19JT193ZmlsZV9kaXNhYmxlZF9pbWJ1ZSAoX0lPX0ZJTEUgKmZwLCB2b2lkICpsb2NhbGUpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IF9JT19qdW1wX3QgX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkID0KKyt7CisrICBKVU1QX0lOSVRfRFVNTVksCisrICBKVU1QX0lOSVQoZmluaXNoLCBfSU9fd2ZpbGVfZGlzYWJsZWRfdm9pZF9pbnQpLAorKyAgSlVNUF9JTklUKG92ZXJmbG93LCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X2ludCksCisrICBKVU1QX0lOSVQodW5kZXJmbG93LCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKHVmbG93LCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKHBiYWNrZmFpbCwgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9pbnQpLAorKyAgSlVNUF9JTklUKHhzcHV0biwgX0lPX3dmaWxlX2Rpc2FibGVkX3hzcHV0biksCisrICBKVU1QX0lOSVQoeHNnZXRuLCBfSU9fd2ZpbGVfZGlzYWJsZWRfeHNnZXRuKSwKKysgIEpVTVBfSU5JVChzZWVrb2ZmLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla29mZiksCisrICBKVU1QX0lOSVQoc2Vla3BvcywgX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtwb3MpLAorKyAgSlVNUF9JTklUKHNldGJ1ZiwgX0lPX3dmaWxlX2Rpc2FibGVkX3NldGJ1ZiksCisrICBKVU1QX0lOSVQoc3luYywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVChkb2FsbG9jYXRlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKHJlYWQsIF9JT193ZmlsZV9kaXNhYmxlZF9yZWFkKSwKKysgIEpVTVBfSU5JVCh3cml0ZSwgX0lPX3dmaWxlX2Rpc2FibGVkX3dyaXRlKSwKKysgIEpVTVBfSU5JVChzZWVrLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2VlayksCisrICBKVU1QX0lOSVQoY2xvc2UsIF9JT193ZmlsZV9kaXNhYmxlZF9jbG9zZSksCisrICBKVU1QX0lOSVQoc3RhdCwgX0lPX3dmaWxlX2Rpc2FibGVkX3N0YXQpLAorKyAgSlVNUF9JTklUKHNob3dtYW55YywgX0lPX3dmaWxlX2Rpc2FibGVkX3Nob3dtYW55YyksCisrICBKVU1QX0lOSVQoaW1idWUsIF9JT193ZmlsZV9kaXNhYmxlZF9pbWJ1ZSkKKyt9OworKworK3N0cm9uZ19hbGlhcyAoX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkLCBfSU9fd2ZpbGVfanVtcHMpCisrbGliY19oaWRkZW5fZGF0YV9kZWYgKF9JT193ZmlsZV9qdW1wcykKKytzdHJvbmdfYWxpYXMgKF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCwgX0lPX3dmaWxlX2p1bXBzX21tYXApCisrc3Ryb25nX2FsaWFzIChfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQsIF9JT193ZmlsZV9qdW1wc19tYXliZV9tbWFwKQorZGlmZiAtLWdpdCBhL2xvY2FsZS9DLWN0eXBlLmMgYi9sb2NhbGUvQy1jdHlwZS5jCitpbmRleCBhYTVmMTlmLi4wNmJlMDgxIDEwMDY0NAorLS0tIGEvbG9jYWxlL0MtY3R5cGUuYworKysrIGIvbG9jYWxlL0MtY3R5cGUuYworQEAgLTE5LDggKzE5LDExIEBACisgI2luY2x1ZGUgImxvY2FsZWluZm8uaCIKKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAjaW5jbHVkZSAiQy10cmFuc2xpdC5oIgorKyNlbmRpZgorIAorIC8qIFRoaXMgdGFibGUncyBlbnRyaWVzIGFyZSB0YWtlbiBmcm9tIFBPU0lYLjIgVGFibGUgMi02CisgICAgYGBMQ19DVFlQRSBDYXRlZ29yeSBEZWZpbml0aW9uIGluIHRoZSBQT1NJWCBMb2NhbGUnJy4KK0BAIC02MzQsNiArNjM3LDcgQEAgY29uc3Qgc3RydWN0IF9fbG9jYWxlX2RhdGEgX25sX0NfTENfQ1RZUEUgYXR0cmlidXRlX2hpZGRlbiA9CisgICAgIHsgLndvcmQgPSBMJzcnIH0sCisgICAgIHsgLndvcmQgPSBMJzgnIH0sCisgICAgIHsgLndvcmQgPSBMJzknIH0sCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUgKi8KKyAgICAgeyAud29yZCA9IE5UUkFOU0xJVCB9LAorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFggKi8KK0BAIC02NDQsNiArNjQ4LDIyIEBAIGNvbnN0IHN0cnVjdCBfX2xvY2FsZV9kYXRhIF9ubF9DX0xDX0NUWVBFIGF0dHJpYnV0ZV9oaWRkZW4gPQorICAgICB7IC53c3RyID0gdHJhbnNsaXRfdG9faWR4IH0sCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwgKi8KKyAgICAgeyAud3N0ciA9ICh1aW50MzJfdCAqKSB0cmFuc2xpdF90b190YmwgfSwKKysjZWxzZQorKyAgICAvKiBJZiB0aGUgbG9jYWxlIGNvZGUgaXNuJ3QgZW5hYmxlZCwgd2UgZG9uJ3QgaGF2ZSB0aGUKKysgICAgICAgdHJhbnNsaXRlcmF0aW9uIGNvZGUgaW4gaWNvbnYvZ2NvbnZfdHJhbnMuYyBhbnl3YXksIHNvIHRoZXJlJ3MKKysgICAgICAgbm8gbmVlZCBmb3IgdGhlIHRyYW5zbGl0ZXJhdGlvbiB0YWJsZXMgaGVyZS4gIFdlJ2xsIGZhbGwgYmFjaworKyAgICAgICBvbiB0aGUgZGVmYXVsdCBtaXNzaW5nIHJlcGxhY2VtZW50LCAnPycuICAqLworKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUgKi8KKysgICAgeyAud29yZCA9IDAgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fSURYICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwgKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysjZW5kaWYKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4gKi8KKyAgICAgeyAud29yZCA9IDEgfSwKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lORyAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9NYWtlZmlsZSBiL2xvY2FsZS9NYWtlZmlsZQoraW5kZXggZjFiNDM0My4uNTk5YTFhOSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9NYWtlZmlsZQorKysrIGIvbG9jYWxlL01ha2VmaWxlCitAQCAtMTgsMjcgKzE4LDQzIEBACisgIworICMJTWFrZWZpbGUgZm9yIGxvY2FsZXMuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbG9jYWxlCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJPSBsb2NhbGUuaCBiaXRzL2xvY2FsZS5oIGxhbmdpbmZvLmggeGxvY2FsZS5oCistcm91dGluZXMJPSBzZXRsb2NhbGUgZmluZGxvY2FsZSBsb2FkbG9jYWxlIGxvYWRhcmNoaXZlIFwKKy0JCSAgbG9jYWxlY29udiBubF9sYW5naW5mbyBubF9sYW5naW5mb19sIG1iX2N1cl9tYXggXAorLQkJICBuZXdsb2NhbGUgZHVwbG9jYWxlIGZyZWVsb2NhbGUgdXNlbG9jYWxlCistdGVzdHMJCT0gdHN0LUMtbG9jYWxlIHRzdC1sb2NuYW1lIHRzdC1kdXBsb2NhbGUKKysjIGNhdG5hbWVzIGlzIG5lZWRlZCBieSBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGFuZCBieSB0aGUgJ2ludGwnIGNvZGUuCisrIyBJZiB3ZSBwdXQgdGhlIGxhdHRlciBpbiBhbiBvcHRpb24gZ3JvdXAsIHRvbywgd2UgY2FuIG9taXQgY2F0bmFtZXMKKysjIHdoZW4gYm90aCBvcHRpb24gZ3JvdXBzIGFyZSBkaXNhYmxlZC4gIGxpYnN0ZGMrKy12MyBuZWVkcyBtYl9jdXJfbWF4LgorK3JvdXRpbmVzLXkgICAgICA6PSBjYXRuYW1lcyBtYl9jdXJfbWF4Cisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSBzZXRsb2NhbGUgZmluZGxvY2FsZSBsb2FkbG9jYWxlIGxvYWRhcmNoaXZlIFwKKysJCSAgIGxvY2FsZWNvbnYgbmxfbGFuZ2luZm8gbmxfbGFuZ2luZm9fbCBcCisrCQkgICBuZXdsb2NhbGUgZHVwbG9jYWxlIGZyZWVsb2NhbGUgdXNlbG9jYWxlCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKytyb3V0aW5lcy15CSs9IGR1bW15LXNldGxvY2FsZQorK2VuZGlmCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSB0c3QtQy1sb2NhbGUgdHN0LWxvY25hbWUgdHN0LWR1cGxvY2FsZQorIGNhdGVnb3JpZXMJPSBjdHlwZSBtZXNzYWdlcyBtb25ldGFyeSBudW1lcmljIHRpbWUgcGFwZXIgbmFtZSBcCisgCQkgIGFkZHJlc3MgdGVsZXBob25lIG1lYXN1cmVtZW50IGlkZW50aWZpY2F0aW9uIGNvbGxhdGUKKy1hdXgJCT0gJChjYXRlZ29yaWVzOiU9bGMtJSkgJChjYXRlZ29yaWVzOiU9Qy0lKSBTWVNfbGliYyBDX25hbWUgXAorLQkJICB4bG9jYWxlIGxvY2FsZW5hbWUgZ2xvYmFsLWxvY2FsZSBjb2xsLWxvb2t1cAorLW90aGVycwkJPSBsb2NhbGVkZWYgbG9jYWxlCisrIyBDLW1lc3NhZ2VzIGJlbG9uZ3MgaW4gYW4gaW50bCBvcHRpb24gZ3JvdXAuCisrYXV4LXkJCTo9IEMtY3R5cGUgQy10aW1lIFwKKysJCSAgIFNZU19saWJjIENfbmFtZSB4bG9jYWxlIGdsb2JhbC1sb2NhbGUgY29sbC1sb29rdXAKKythdXgtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSAkKGZpbHRlci1vdXQgJChhdXgteSksIFwKKysJICAgICAgICAgICAgICAgICAgICAgICAgJChjYXRlZ29yaWVzOiU9bGMtJSkgJChjYXRlZ29yaWVzOiU9Qy0lKSkgXAorKwkgICAgICAgICAgIGxvY2FsZW5hbWUKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSA9IGxvY2FsZWRlZiBsb2NhbGUKKyAjb3RoZXJzLXN0YXRpYwk9IGxvY2FsZWRlZiBsb2NhbGUKKy1pbnN0YWxsLWJpbgk9IGxvY2FsZWRlZiBsb2NhbGUKKy1leHRyYS1vYmpzCT0gJChsb2NhbGVkZWYtbW9kdWxlczo9Lm8pICQobG9jYWxlZGVmLWF1eDo9Lm8pIFwKKytpbnN0YWxsLWJpbgk9ICQob3RoZXJzLXkpCisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCT0gJChsb2NhbGVkZWYtbW9kdWxlczo9Lm8pICQobG9jYWxlZGVmLWF1eDo9Lm8pIFwKKyAJCSAgJChsb2NhbGUtbW9kdWxlczo9Lm8pICQobGliLW1vZHVsZXM6PS5vKQorIAorLWV4dHJhLWxpYnMJPSBsaWJCcm9rZW5Mb2NhbGUKKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgPSBsaWJCcm9rZW5Mb2NhbGUKKytleHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicy15KQorIAorIGxpYkJyb2tlbkxvY2FsZS1yb3V0aW5lcyA9IGJyb2tlbl9jdXJfbWF4CisgCitAQCAtOTMsNiArMTA5LDkgQEAgQ1BQRkxBR1MtbG9jYWxlLXByb2dyYW1zID0gLURMT0NBTEVfUEFUSD0nJChsb2NhbGVwYXRoKScgXAorIENGTEFHUy1jaGFybWFwLmMgPSAtV25vLXdyaXRlLXN0cmluZ3MgLVduby1jaGFyLXN1YnNjcmlwdHMKKyBDRkxBR1MtbG9jZmlsZS5jID0gLVduby13cml0ZS1zdHJpbmdzIC1Xbm8tY2hhci1zdWJzY3JpcHRzCisgQ0ZMQUdTLWNoYXJtYXAtZGlyLmMgPSAtV25vLXdyaXRlLXN0cmluZ3MKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfU1BBV04pKQorK0NGTEFHUy1jaGFybWFwLWRpci5jICs9IC1ETk9fVU5DT01QUkVTUworK2VuZGlmCisgCisgIyBTZXQgbGlib2YtKiBmb3IgZWFjaCByb3V0aW5lLgorIGNwcC1zcmNzLWxlZnQgOj0gJChsb2NhbGVkZWYtbW9kdWxlcykgJChsb2NhbGVkZWYtYXV4KSAkKGxvY2FsZS1tb2R1bGVzKSBcCitkaWZmIC0tZ2l0IGEvbG9jYWxlL2NhdG5hbWVzLmMgYi9sb2NhbGUvY2F0bmFtZXMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlmYWQzNTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xvY2FsZS9jYXRuYW1lcy5jCitAQCAtMCwwICsxLDQ4IEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgImxvY2FsZWluZm8uaCIKKysKKysvKiBEZWZpbmUgYW4gYXJyYXkgb2YgY2F0ZWdvcnkgbmFtZXMgKGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzKS4gICovCisrY29uc3QgdW5pb24gY2F0bmFtZXN0cl90IF9ubF9jYXRlZ29yeV9uYW1lcyBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysgICAgeworKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgICAgIGNhdGVnb3J5X25hbWUsCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysgICAgfQorKyAgfTsKKysKKytjb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX2lkeHNbX19MQ19MQVNUXSBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgW2NhdGVnb3J5XSA9IG9mZnNldG9mICh1bmlvbiBjYXRuYW1lc3RyX3QsIENBVE5BTUVNRiAoX19MSU5FX18pKSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmIERFRklORV9DQVRFR09SWQorKyAgfTsKKysKKysvKiBBbiBhcnJheSBvZiB0aGVpciBsZW5ndGhzLCBmb3IgY29udmVuaWVuY2UuICAqLworK2NvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfc2l6ZXNbXSBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgW2NhdGVnb3J5XSA9IHNpemVvZiAoY2F0ZWdvcnlfbmFtZSkgLSAxLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYJREVGSU5FX0NBVEVHT1JZCisrICAgIFtMQ19BTExdID0gc2l6ZW9mICgiTENfQUxMIikgLSAxCisrICB9OworZGlmZiAtLWdpdCBhL2xvY2FsZS9kdW1teS1zZXRsb2NhbGUuYyBiL2xvY2FsZS9kdW1teS1zZXRsb2NhbGUuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIxOTk2NGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xvY2FsZS9kdW1teS1zZXRsb2NhbGUuYworQEAgLTAsMCArMSwzMyBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrY2hhciAqCisrc2V0bG9jYWxlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2FsZSkKKyt7CisrICBpZiAoISBsb2NhbGUKKysgICAgICB8fCBsb2NhbGVbMF0gPT0gJ1wwJworKyAgICAgIHx8IHN0cmNtcCAobG9jYWxlLCAiQyIpID09IDAKKysgICAgICB8fCBzdHJjbXAgKGxvY2FsZSwgIlBPU0lYIikgPT0gMCkKKysgICAgcmV0dXJuIChjaGFyICopICJDIjsKKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoc2V0bG9jYWxlKQorZGlmZiAtLWdpdCBhL2xvY2FsZS9sb2NhbGVpbmZvLmggYi9sb2NhbGUvbG9jYWxlaW5mby5oCitpbmRleCBiZGFiOWZlLi5hNzUxNmMwIDEwMDY0NAorLS0tIGEvbG9jYWxlL2xvY2FsZWluZm8uaAorKysrIGIvbG9jYWxlL2xvY2FsZWluZm8uaAorQEAgLTIzMiw3ICsyMzIsNyBAQCBfX2xpYmNfdHNkX2RlZmluZSAoZXh0ZXJuLCBfX2xvY2FsZV90LCBMT0NBTEUpCisgICAgdW51c2VkLiAgV2UgY2FuIG1hbmFnZSB0aGlzIHBsYXlpbmcgc29tZSB0cmlja3Mgd2l0aCB3ZWFrIHJlZmVyZW5jZXMuCisgICAgQnV0IHdpdGggdGhyZWFkLWxvY2FsIGxvY2FsZSBzZXR0aW5ncywgaXQgYmVjb21lcyBxdWl0ZSB1bmdhaW5seSB1bmxlc3MKKyAgICB3ZSBjYW4gdXNlIF9fdGhyZWFkIHZhcmlhYmxlcy4gIFNvIG9ubHkgaW4gdGhhdCBjYXNlIGRvIHdlIGF0dGVtcHQgdGhpcy4gICovCistI2lmbmRlZiBTSEFSRUQKKysjaWYgIWRlZmluZWQgU0hBUkVEICYmICFkZWZpbmVkIElOX0dMSUJDX0xPQ0FMRURFRgorICMgaW5jbHVkZSA8dGxzLmg+CisgIyBkZWZpbmUgTkxfQ1VSUkVOVF9JTkRJUkVDVAkxCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMgYi9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworaW5kZXggY2Y3YWRlYS4uZWYzYjgxMSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworQEAgLTE5LDcgKzE5LDkgQEAKKyAjaW5jbHVkZSA8ZXJyb3IuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworICNpbmNsdWRlIDxzcGF3bi5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitAQCAtMTU2LDYgKzE1OCw3IEBAIGNoYXJtYXBfY2xvc2VkaXIgKENIQVJNQVBfRElSICpjZGlyKQorICAgcmV0dXJuIGNsb3NlZGlyIChkaXIpOworIH0KKyAKKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAvKiBDcmVhdGVzIGEgc3VicHJvY2VzcyBkZWNvbXByZXNzaW5nIHRoZSBnaXZlbiBwYXRobmFtZSwgYW5kIHJldHVybnMKKyAgICBhIHN0cmVhbSByZWFkaW5nIGl0cyBvdXRwdXQgKHRoZSBkZWNvbXByZXNzZWQgZGF0YSkuICAqLworIHN0YXRpYworQEAgLTIwNCw2ICsyMDcsNyBAQCBmb3Blbl91bmNvbXByZXNzZWQgKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBjb25zdCBjaGFyICpjb21wcmVzc29yKQorICAgICB9CisgICByZXR1cm4gTlVMTDsKKyB9CisrI2VuZGlmCisgCisgLyogT3BlbnMgYSBjaGFybWFwIGZvciByZWFkaW5nLCBnaXZlbiBpdHMgbmFtZSAobm90IGFuIGFsaWFzIG5hbWUpLiAgKi8KKyBGSUxFICoKK0BAIC0yMjYsNiArMjMwLDcgQEAgY2hhcm1hcF9vcGVuIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpCisgICBpZiAoc3RyZWFtICE9IE5VTEwpCisgICAgIHJldHVybiBzdHJlYW07CisgCisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgICBtZW1jcHkgKHAsICIuZ3oiLCA0KTsKKyAgIHN0cmVhbSA9IGZvcGVuX3VuY29tcHJlc3NlZCAocGF0aG5hbWUsICJnemlwIik7CisgICBpZiAoc3RyZWFtICE9IE5VTEwpCitAQCAtMjM1LDYgKzI0MCw3IEBAIGNoYXJtYXBfb3BlbiAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKQorICAgc3RyZWFtID0gZm9wZW5fdW5jb21wcmVzc2VkIChwYXRobmFtZSwgImJ6aXAyIik7CisgICBpZiAoc3RyZWFtICE9IE5VTEwpCisgICAgIHJldHVybiBzdHJlYW07CisrI2VuZGlmCisgCisgICByZXR1cm4gTlVMTDsKKyB9CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKK2luZGV4IGEzOWE5NGYuLjE2ZTkwMzkgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCitAQCAtMzUxLDcgKzM1MSw3IEBAIG5ld19lbGVtZW50IChzdHJ1Y3QgbG9jYWxlX2NvbGxhdGVfdCAqY29sbGF0ZSwgY29uc3QgY2hhciAqbWJzLCBzaXplX3QgbWJzbGVuLAorICAgICB9CisgICBpZiAod2NzICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBzaXplX3QgbndjcyA9IHdjc2xlbiAoKHdjaGFyX3QgKikgd2NzKTsKKysgICAgICBzaXplX3QgbndjcyA9IHdjc2xlbl91aW50MzIgKHdjcyk7CisgICAgICAgdWludDMyX3QgemVybyA9IDA7CisgICAgICAgLyogSGFuZGxlIDxVMDAwMD4gYXMgYSBzaW5nbGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgICBpZiAobndjcyA9PSAwKQorQEAgLTE3NzcsOCArMTc3Nyw3IEBAIHN5bWJvbCBgJXMnIGhhcyB0aGUgc2FtZSBlbmNvZGluZyBhcyIpLCAoKmVwdHIpLT5uYW1lKTsKKyAKKyAJICAgICAgaWYgKCgqZXB0ciktPm53Y3MgPT0gcnVucC0+bndjcykKKyAJCXsKKy0JCSAgaW50IGMgPSB3bWVtY21wICgod2NoYXJfdCAqKSAoKmVwdHIpLT53Y3MsCistCQkJCSAgICh3Y2hhcl90ICopIHJ1bnAtPndjcywgcnVucC0+bndjcyk7CisrCQkgIGludCBjID0gd21lbWNtcF91aW50MzIgKCgqZXB0ciktPndjcywgcnVucC0+d2NzLCBydW5wLT5ud2NzKTsKKyAKKyAJCSAgaWYgKGMgPT0gMCkKKyAJCSAgICB7CitAQCAtMjAxMSw5ICsyMDEwLDkgQEAgYWRkX3RvX3RhYmxld2MgKHVpbnQzMl90IGNoLCBzdHJ1Y3QgZWxlbWVudF90ICpydW5wKQorIAkgICAgIG9uZSBjb25zZWN1dGl2ZSBlbnRyeS4gICovCisgCSAgaWYgKHJ1bnAtPndjbmV4dCAhPSBOVUxMCisgCSAgICAgICYmIHJ1bnAtPm53Y3MgPT0gcnVucC0+d2NuZXh0LT5ud2NzCistCSAgICAgICYmIHdtZW1jbXAgKCh3Y2hhcl90ICopIHJ1bnAtPndjcywKKy0JCQkgICh3Y2hhcl90ICopcnVucC0+d2NuZXh0LT53Y3MsCistCQkJICBydW5wLT5ud2NzIC0gMSkgPT0gMAorKwkgICAgICAmJiB3bWVtY21wX3VpbnQzMiAocnVucC0+d2NzLAorKwkJCQkgcnVucC0+d2NuZXh0LT53Y3MsCisrCQkJCSBydW5wLT5ud2NzIC0gMSkgPT0gMAorIAkgICAgICAmJiAocnVucC0+d2NzW3J1bnAtPm53Y3MgLSAxXQorIAkJICA9PSBydW5wLT53Y25leHQtPndjc1tydW5wLT5ud2NzIC0gMV0gKyAxKSkKKyAJICAgIHsKK0BAIC0yMDM3LDkgKzIwMzYsOSBAQCBhZGRfdG9fdGFibGV3YyAodWludDMyX3QgY2gsIHN0cnVjdCBlbGVtZW50X3QgKnJ1bnApCisgCQlydW5wID0gcnVucC0+d2NuZXh0OworIAkgICAgICB3aGlsZSAocnVucC0+d2NuZXh0ICE9IE5VTEwKKyAJCSAgICAgJiYgcnVucC0+bndjcyA9PSBydW5wLT53Y25leHQtPm53Y3MKKy0JCSAgICAgJiYgd21lbWNtcCAoKHdjaGFyX3QgKikgcnVucC0+d2NzLAorLQkJCQkgKHdjaGFyX3QgKilydW5wLT53Y25leHQtPndjcywKKy0JCQkJIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisrCQkgICAgICYmIHdtZW1jbXBfdWludDMyIChydW5wLT53Y3MsCisrCQkJCQlydW5wLT53Y25leHQtPndjcywKKysJCQkJCXJ1bnAtPm53Y3MgLSAxKSA9PSAwCisgCQkgICAgICYmIChydW5wLT53Y3NbcnVucC0+bndjcyAtIDFdCisgCQkJID09IHJ1bnAtPndjbmV4dC0+d2NzW3J1bnAtPm53Y3MgLSAxXSArIDEpKTsKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCitpbmRleCAzZjQ2NGVmLi5iN2I2YjUxIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCitAQCAtOTI2LDcgKzkyNiw3IEBAIGN0eXBlX291dHB1dCAoc3RydWN0IGxvY2FsZWRlZl90ICpsb2NhbGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgICBhbGxvY2F0ZV9hcnJheXMgKGN0eXBlLCBjaGFybWFwLCBjdHlwZS0+cmVwZXJ0b2lyZSk7CisgCisgICBkZWZhdWx0X21pc3NpbmdfbGVuID0gKGN0eXBlLT5kZWZhdWx0X21pc3NpbmcKKy0JCQkgPyB3Y3NsZW4gKCh3Y2hhcl90ICopIGN0eXBlLT5kZWZhdWx0X21pc3NpbmcpCisrCQkJID8gd2NzbGVuX3VpbnQzMiAoY3R5cGUtPmRlZmF1bHRfbWlzc2luZykKKyAJCQkgOiAwKTsKKyAKKyAgIGluaXRfbG9jYWxlX2RhdGEgKCZmaWxlLCBuZWxlbXMpOworQEAgLTE5MzcsNyArMTkzNyw3IEBAIHJlYWRfdHJhbnNsaXRfZW50cnkgKHN0cnVjdCBsaW5lcmVhZGVyICpsZGZpbGUsIHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsCisgCSAgICBpZ25vcmUgPSAxOworIAkgIGVsc2UKKyAJICAgIC8qIFRoaXMgdmFsdWUgaXMgdXNhYmxlLiAgKi8KKy0JICAgIG9ic3RhY2tfZ3JvdyAob2IsIHRvX3dzdHIsIHdjc2xlbiAoKHdjaGFyX3QgKikgdG9fd3N0cikgKiA0KTsKKysJICAgIG9ic3RhY2tfZ3JvdyAob2IsIHRvX3dzdHIsIHdjc2xlbl91aW50MzIgKHRvX3dzdHIpICogNCk7CisgCisgCSAgZmlyc3QgPSAwOworIAl9CitAQCAtMjQ3MSw4ICsyNDcxLDggQEAgd2l0aCBjaGFyYWN0ZXIgY29kZSByYW5nZSB2YWx1ZXMgb25lIG11c3QgdXNlIHRoZSBhYnNvbHV0ZSBlbGxpcHNpcyBgLi4uJyIpKTsKKyAJICAgIH0KKyAKKyAJaGFuZGxlX3Rva19kaWdpdDoKKy0JICBjbGFzc19iaXQgPSBfSVN3ZGlnaXQ7CistCSAgY2xhc3MyNTZfYml0ID0gX0lTZGlnaXQ7CisrCSAgY2xhc3NfYml0ID0gQklUdyAodG9rX2RpZ2l0KTsKKysJICBjbGFzczI1Nl9iaXQgPSBCSVQgKHRva19kaWdpdCk7CisgCSAgaGFuZGxlX2RpZ2l0cyA9IDE7CisgCSAgZ290byByZWFkX2NoYXJjbGFzczsKKyAKK0BAIC0zOTI5LDggKzM5MjksNyBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCisgCSAgd2hpbGUgKGlkeCA8IG51bWJlcikKKyAJICAgIHsKKy0JICAgICAgaW50IHJlcyA9IHdjc2NtcCAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2lkeF0tPmZyb20sCistCQkJCShjb25zdCB3Y2hhcl90ICopIHJ1bnAtPmZyb20pOworKwkgICAgICBpbnQgcmVzID0gd2NzY21wX3VpbnQzMiAoc29ydGVkW2lkeF0tPmZyb20sIHJ1bnAtPmZyb20pOworIAkgICAgICBpZiAocmVzID09IDApCisgCQl7CisgCQkgIHJlcGxhY2UgPSAxOworQEAgLTM5NjcsMTEgKzM5NjYsMTEgQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorICAgICAgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IG51bWJlcjsgKytjbnQpCisgCXsKKyAJICBzdHJ1Y3QgdHJhbnNsaXRfdG9fdCAqc3J1bnA7CistCSAgZnJvbV9sZW4gKz0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworKwkgIGZyb21fbGVuICs9IHdjc2xlbl91aW50MzIgKHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisgCSAgc3J1bnAgPSBzb3J0ZWRbY250XS0+dG87CisgCSAgd2hpbGUgKHNydW5wICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIHRvX2xlbiArPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIpICsgMTsKKysJICAgICAgdG9fbGVuICs9IHdjc2xlbl91aW50MzIgKHNydW5wLT5zdHIpICsgMTsKKyAJICAgICAgc3J1bnAgPSBzcnVucC0+bmV4dDsKKyAJICAgIH0KKyAJICAvKiBQbHVzIG9uZSBmb3IgdGhlIGV4dHJhIE5VTCBjaGFyYWN0ZXIgbWFya2luZyB0aGUgZW5kIG9mCitAQCAtMzk5NSwxOCArMzk5NCwxOCBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCSAgY3R5cGUtPnRyYW5zbGl0X2Zyb21faWR4W2NudF0gPSBmcm9tX2xlbjsKKyAJICBjdHlwZS0+dHJhbnNsaXRfdG9faWR4W2NudF0gPSB0b19sZW47CisgCistCSAgbGVuID0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworLQkgIHdtZW1jcHkgKCh3Y2hhcl90ICopICZjdHlwZS0+dHJhbnNsaXRfZnJvbV90YmxbZnJvbV9sZW5dLAorLQkJICAgKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20sIGxlbik7CisrCSAgbGVuID0gd2NzbGVuX3VpbnQzMiAoc29ydGVkW2NudF0tPmZyb20pICsgMTsKKysJICB3bWVtY3B5X3VpbnQzMiAoJmN0eXBlLT50cmFuc2xpdF9mcm9tX3RibFtmcm9tX2xlbl0sCisrCQkJICBzb3J0ZWRbY250XS0+ZnJvbSwgbGVuKTsKKyAJICBmcm9tX2xlbiArPSBsZW47CisgCisgCSAgY3R5cGUtPnRyYW5zbGl0X3RvX2lkeFtjbnRdID0gdG9fbGVuOworIAkgIHNydW5wID0gc29ydGVkW2NudF0tPnRvOworIAkgIHdoaWxlIChzcnVucCAhPSBOVUxMKQorIAkgICAgeworLQkgICAgICBsZW4gPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIpICsgMTsKKy0JICAgICAgd21lbWNweSAoKHdjaGFyX3QgKikgJmN0eXBlLT50cmFuc2xpdF90b190YmxbdG9fbGVuXSwKKy0JCSAgICAgICAoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyLCBsZW4pOworKwkgICAgICBsZW4gPSB3Y3NsZW5fdWludDMyIChzcnVucC0+c3RyKSArIDE7CisrCSAgICAgIHdtZW1jcHlfdWludDMyICgmY3R5cGUtPnRyYW5zbGl0X3RvX3RibFt0b19sZW5dLAorKwkJCSAgICAgIHNydW5wLT5zdHIsIGxlbik7CisgCSAgICAgIHRvX2xlbiArPSBsZW47CisgCSAgICAgIHNydW5wID0gc3J1bnAtPm5leHQ7CisgCSAgICB9CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYworaW5kZXggZWMxYTgwYi4uNzM2ZWVkOCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYworQEAgLTI1LDYgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzeXMvdWlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorIAorQEAgLTEyNCw2ICsxMjUsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFAKKyAgICAgICBpbnQgcmVzdWx0OworICAgICAgIHJlZ2V4X3QgcmU7CisgCitAQCAtMTQwLDYgKzE0Miw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAJfQorICAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSAwKQorIAlyZWdmcmVlICgmcmUpOworKyNlbmRpZgorICAgICB9CisgCisgICBpZiAobWVzc2FnZXMtPm5vZXhwciA9PSBOVUxMKQorQEAgLTE1OCw2ICsxNjEsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFAKKyAgICAgICBpbnQgcmVzdWx0OworICAgICAgIHJlZ2V4X3QgcmU7CisgCitAQCAtMTc0LDYgKzE3OCw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAJfQorICAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSAwKQorIAlyZWdmcmVlICgmcmUpOworKyNlbmRpZgorICAgICB9CisgfQorIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCitpbmRleCBkYjQ5MGM2Li43NWRjNTA1IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYworQEAgLTIxNSw4ICsyMTUsMTAgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgCX0KKyAgICAgICBlbHNlCisgCXsKKysJICBzdGF0aWMgY29uc3QgdWludDMyX3Qgd3RfZm10X2FtcG1bXQorKwkgICAgPSB7ICclJywnSScsJzonLCclJywnTScsJzonLCclJywnUycsJyAnLCclJywncCcsMCB9OworIAkgIHRpbWUtPnRfZm10X2FtcG0gPSAiJUk6JU06JVMgJXAiOworLQkgIHRpbWUtPnd0X2ZtdF9hbXBtID0gKGNvbnN0IHVpbnQzMl90ICopIEwiJUk6JU06JVMgJXAiOworKwkgIHRpbWUtPnd0X2ZtdF9hbXBtID0gd3RfZm10X2FtcG07CisgCX0KKyAgICAgfQorIAorQEAgLTIyNiw3ICsyMjgsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAgICAgICBjb25zdCBpbnQgZGF5c19wZXJfbW9udGhbMTJdID0geyAzMSwgMjksIDMxLCAzMCwgMzEsIDMwLAorIAkJCQkgICAgICAgMzEsIDMxLCAzMCwgMzEgLDMwLCAzMSB9OworICAgICAgIHNpemVfdCBpZHg7CistICAgICAgd2NoYXJfdCAqd3N0cjsKKysgICAgICB1aW50MzJfdCAqd3N0cjsKKyAKKyAgICAgICB0aW1lLT5lcmFfZW50cmllcyA9CisgCShzdHJ1Y3QgZXJhX2RhdGEgKikgeG1hbGxvYyAodGltZS0+bnVtX2VyYQorQEAgLTQ2NCwxOCArNDY2LDE4IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworIAkgICAgfQorIAorIAkgIC8qIE5vdyBnZW5lcmF0ZSB0aGUgd2lkZSBjaGFyYWN0ZXIgbmFtZSBhbmQgZm9ybWF0LiAgKi8KKy0JICB3c3RyID0gd2NzY2hyICgod2NoYXJfdCAqKSB0aW1lLT53ZXJhW2lkeF0sIEwnOicpOy8qIGVuZCBkaXJlY3Rpb24gKi8KKy0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIG9mZnNldCAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgc3RhcnQgKi8KKy0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIGVuZCAqLworKwkgIHdzdHIgPSB3Y3NjaHJfdWludDMyICh0aW1lLT53ZXJhW2lkeF0sIEwnOicpOyAvKiBlbmQgZGlyZWN0aW9uICovCisrCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgb2Zmc2V0ICovCisrCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgc3RhcnQgKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBlbmQgKi8KKyAJICBpZiAod3N0ciAhPSBOVUxMKQorIAkgICAgeworLQkgICAgICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0gKHVpbnQzMl90ICopIHdzdHIgKyAxOworLQkgICAgICB3c3RyID0gd2NzY2hyICh3c3RyICsgMSwgTCc6Jyk7CS8qIGVuZCBuYW1lICovCisrCSAgICAgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPSB3c3RyICsgMTsKKysJICAgICAgd3N0ciA9IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKTsgLyogZW5kIG5hbWUgKi8KKyAJICAgICAgaWYgKHdzdHIgIT0gTlVMTCkKKyAJCXsKKyAJCSAgKndzdHIgPSBMJ1wwJzsKKy0JCSAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53Zm9ybWF0ID0gKHVpbnQzMl90ICopIHdzdHIgKyAxOworKwkJICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLndmb3JtYXQgPSB3c3RyICsgMTsKKyAJCX0KKyAJICAgICAgZWxzZQorIAkJdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9CitAQCAtNTMwLDcgKzUzMiwxNiBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAgIGlmICh0aW1lLT5kYXRlX2ZtdCA9PSBOVUxMKQorICAgICB0aW1lLT5kYXRlX2ZtdCA9ICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSI7CisgICBpZiAodGltZS0+d2RhdGVfZm10ID09IE5VTEwpCistICAgIHRpbWUtPndkYXRlX2ZtdCA9IChjb25zdCB1aW50MzJfdCAqKSBMIiVhICViICVlICVIOiVNOiVTICVaICVZIjsKKysgICAgeworKyAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB3ZGF0ZV9mbXRbXSA9CisrCXsgJyUnLCdhJywnICcsCisrCSAgJyUnLCdiJywnICcsCisrCSAgJyUnLCdlJywnICcsCisrCSAgJyUnLCdIJywnOicsJyUnLCdNJywnOicsJyUnLCdTJywnICcsCisrCSAgJyUnLCdaJywnICcsCisrCSAgJyUnLCdZJywwIH07CisrICAgICAgdGltZS0+d2RhdGVfZm10ID0gd2RhdGVfZm10OworKyAgICB9CisgfQorIAorIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCitpbmRleCAyZTA1MTMwLi42NTNiNjhjIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYworQEAgLTU5NSw3ICs1OTUsNyBAQCBnZXRfc3RyaW5nIChzdHJ1Y3QgbGluZXJlYWRlciAqbHIsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgeworICAgaW50IHJldHVybl93aWRlc3RyID0gbHItPnJldHVybl93aWRlc3RyOworICAgY2hhciAqYnVmOworLSAgd2NoYXJfdCAqYnVmMiA9IE5VTEw7CisrICB1aW50MzJfdCAqYnVmMiA9IE5VTEw7CisgICBzaXplX3QgYnVmYWN0OworICAgc2l6ZV90IGJ1Zm1heCA9IDU2OworIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYworaW5kZXggMmEwZjJhYS4uNTgzZDIzMyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCitAQCAtMTE0LDYgKzExNCw3IEBAIHZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqKSA9IHByaW50X3ZlcnNpb247CisgI2RlZmluZSBPUFRfTElTVF9BUkNISVZFIDMwOQorICNkZWZpbmUgT1BUX0xJVFRMRV9FTkRJQU4gNDAwCisgI2RlZmluZSBPUFRfQklHX0VORElBTiA0MDEKKysjZGVmaW5lIE9QVF9VSU5UMzJfQUxJR04gNDAyCisgCisgLyogRGVmaW5pdGlvbnMgb2YgYXJndW1lbnRzIGZvciBhcmdwIGZ1bmN0aW9ucy4gICovCisgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQorQEAgLTE1MCw2ICsxNTEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CisgICAgIE5fKCJHZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIG91dHB1dCIpIH0sCisgICB7ICJiaWctZW5kaWFuIiwgT1BUX0JJR19FTkRJQU4sIE5VTEwsIDAsCisgICAgIE5fKCJHZW5lcmF0ZSBiaWctZW5kaWFuIG91dHB1dCIpIH0sCisrICB7ICJ1aW50MzItYWxpZ24iLCBPUFRfVUlOVDMyX0FMSUdOLCAiQUxJR05NRU5UIiwgMCwKKysgICAgTl8oIlNldCB0aGUgdGFyZ2V0J3MgdWludDMyX3QgYWxpZ25tZW50IGluIGJ5dGVzIChkZWZhdWx0IDQpIikgfSwKKyAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisgfTsKKyAKK0BAIC0yMzksMTIgKzI0MiwxNCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgY3R5cGUgbG9jYWxlLiAgKFAxMDAzLjIgNC4zNS41LjIpICAqLworICAgc2V0bG9jYWxlIChMQ19DVFlQRSwgIlBPU0lYIik7CisgCisrI2lmbmRlZiBOT19TWVNDT05GCisgICAvKiBMb29rIHdoZXRoZXIgdGhlIHN5c3RlbSByZWFsbHkgYWxsb3dzIGxvY2FsZSBkZWZpbml0aW9ucy4gIFBPU0lYCisgICAgICBkZWZpbmVzIGVycm9yIGNvZGUgMyBmb3IgdGhpcyBzaXR1YXRpb24gc28gSSB0aGluayBpdCBtdXN0IGJlCisgICAgICBhIGZhdGFsIGVycm9yIChzZWUgUDEwMDMuMiA0LjM1LjgpLiAgKi8KKyAgIGlmIChzeXNjb25mIChfU0NfMl9MT0NBTEVERUYpIDwgMCkKKyAgICAgV0lUSF9DVVJfTE9DQUxFIChlcnJvciAoMywgMCwgXygiXAorIEZBVEFMOiBzeXN0ZW0gZG9lcyBub3QgZGVmaW5lIGBfUE9TSVgyX0xPQ0FMRURFRiciKSkpOworKyNlbmRpZgorIAorICAgLyogUHJvY2VzcyBjaGFybWFwIGZpbGUuICAqLworICAgY2hhcm1hcCA9IGNoYXJtYXBfcmVhZCAoY2hhcm1hcF9maWxlLCB2ZXJib3NlLCAxLCBiZV9xdWlldCwgMSk7CitAQCAtMzM4LDYgKzM0Myw5IEBAIHBhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisgICAgIGNhc2UgT1BUX0JJR19FTkRJQU46CisgICAgICAgc2V0X2JpZ19lbmRpYW4gKHRydWUpOworICAgICAgIGJyZWFrOworKyAgICBjYXNlIE9QVF9VSU5UMzJfQUxJR046CisrICAgICAgdWludDMyX2FsaWduX21hc2sgPSBzdHJ0b2wgKGFyZywgTlVMTCwgMCkgLSAxOworKyAgICAgIGJyZWFrOworICAgICBjYXNlICdjJzoKKyAgICAgICBmb3JjZV9vdXRwdXQgPSAxOworICAgICAgIGJyZWFrOworZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCitpbmRleCAzM2RhNTJlLi5mNzkwYzRjIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYworQEAgLTU0NCw2ICs1NDQsOSBAQCBjb21wYXJlX2ZpbGVzIChjb25zdCBjaGFyICpmaWxlbmFtZTEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwgc2l6ZV90IHNpemUsCisgICAgbWFjaGluZSBydW5uaW5nIGxvY2FsZWRlZi4gICovCisgYm9vbCBzd2FwX2VuZGlhbm5lc3NfcDsKKyAKKysvKiBUaGUgdGFyZ2V0J3MgdmFsdWUgb2YgX19hbGlnbl9fKHVpbnQzMl90KSAtIDEuICAqLworK3Vuc2lnbmVkIGludCB1aW50MzJfYWxpZ25fbWFzayA9IDM7CisrCisgLyogV2hlbiBjYWxsZWQgb3V0c2lkZSBhIHN0YXJ0X2xvY2FsZV9zdHJ1Y3R1cmUvZW5kX2xvY2FsZV9zdHJ1Y3R1cmUKKyAgICBvciBzdGFydF9sb2NhbGVfcHJlbHVkZS9lbmRfbG9jYWxlX3ByZWx1ZGUgYmxvY2ssIHJlY29yZCB0aGF0IHRoZQorICAgIG5leHQgYnl0ZSBpbiBGSUxFJ3Mgb2JzdGFjayB3aWxsIGJlIHRoZSBmaXJzdCBieXRlIG9mIGEgbmV3IGVsZW1lbnQuCitAQCAtNjIxLDcgKzYyNCw3IEBAIGFkZF9sb2NhbGVfc3RyaW5nIChzdHJ1Y3QgbG9jYWxlX2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZykKKyB2b2lkCisgYWRkX2xvY2FsZV93c3RyaW5nIChzdHJ1Y3QgbG9jYWxlX2ZpbGUgKmZpbGUsIGNvbnN0IHVpbnQzMl90ICpzdHJpbmcpCisgeworLSAgYWRkX2xvY2FsZV91aW50MzJfYXJyYXkgKGZpbGUsIHN0cmluZywgd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzdHJpbmcpICsgMSk7CisrICBhZGRfbG9jYWxlX3VpbnQzMl9hcnJheSAoZmlsZSwgc3RyaW5nLCB3Y3NsZW5fdWludDMyIChzdHJpbmcpICsgMSk7CisgfQorIAorIC8qIFJlY29yZCB0aGF0IEZJTEUncyBuZXh0IGVsZW1lbnQgaXMgdGhlIDMyLWJpdCBpbnRlZ2VyIFZBTFVFLiAgKi8KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAoraW5kZXggNmZjNDQxYi4uMTE4YjE3MSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKK0BAIC03MSw2ICs3MSw4IEBAIGV4dGVybiB2b2lkIHdyaXRlX2FsbF9jYXRlZ29yaWVzIChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmRlZmluaXRpb25zLAorIAorIGV4dGVybiBib29sIHN3YXBfZW5kaWFubmVzc19wOworIAorK2V4dGVybiB1bnNpZ25lZCBpbnQgdWludDMyX2FsaWduX21hc2s7CisrCisgLyogQ2hhbmdlIHRoZSBvdXRwdXQgdG8gYmUgYmlnLWVuZGlhbiBpZiBCSUdfRU5ESUFOIGlzIHRydWUgYW5kCisgICAgbGl0dGxlLWVuZGlhbiBvdGhlcndpc2UuICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZAorQEAgLTg5LDcgKzkxLDggQEAgbWF5YmVfc3dhcF91aW50MzIgKHVpbnQzMl90IHZhbHVlKQorIH0KKyAKKyAvKiBMaWtld2lzZSwgYnV0IG11bmdlIGFuIGFycmF5IG9mIE4gdWludDMyX3RzIHN0YXJ0aW5nIGF0IEFSUkFZLiAgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKytzdGF0aWMgdm9pZAorK19fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICh1aW50MzJfdCAqYXJyYXksIHNpemVfdCBuKQorIHsKKyAgIGlmIChzd2FwX2VuZGlhbm5lc3NfcCkKK0BAIC05OSw3ICsxMDIsOCBAQCBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAodWludDMyX3QgKmFycmF5LCBzaXplX3QgbikKKyAKKyAvKiBMaWtlIG1heWJlX3N3YXBfdWludDMyX2FycmF5LCBidXQgdGhlIGFycmF5IG9mIE4gZWxlbWVudHMgaXMgYXQKKyAgICB0aGUgZW5kIG9mIE9CU1RBQ0sncyBjdXJyZW50IG9iamVjdC4gICovCistc3RhdGljIGlubGluZSB2b2lkCisrc3RhdGljIHZvaWQKKytfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBtYXliZV9zd2FwX3VpbnQzMl9vYnN0YWNrIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgc2l6ZV90IG4pCisgeworICAgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKCh1aW50MzJfdCAqKSBvYnN0YWNrX25leHRfZnJlZSAob2JzdGFjaykgLSBuLCBuKTsKK0BAIC0yNzYsNCArMjgwLDU1IEBAIGV4dGVybiB2b2lkIGlkZW50aWZpY2F0aW9uX291dHB1dCAoc3RydWN0IGxvY2FsZWRlZl90ICpsb2NhbGUsCisgCQkJCSAgIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCQkJCSAgIGNvbnN0IGNoYXIgKm91dHB1dF9wYXRoKTsKKyAKKytzdGF0aWMgc2l6ZV90IHdjc2xlbl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzdHIpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgdWludDMyX3QgKiB3bWVtY3B5X3VpbnQzMiAodWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIHVpbnQzMl90ICogd2NzY2hyX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMsIHVpbnQzMl90IGNoKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIGludCB3Y3NjbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyBpbnQgd21lbWNtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKworK3N0YXRpYyBzaXplX3QKKyt3Y3NsZW5fdWludDMyIChjb25zdCB1aW50MzJfdCAqc3RyKQorK3sKKysgIHNpemVfdCBsZW4gPSAwOworKyAgd2hpbGUgKHN0cltsZW5dICE9IDApCisrICAgIGxlbisrOworKyAgcmV0dXJuIGxlbjsKKyt9CisrCisrc3RhdGljICBpbnQKKyt3bWVtY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKQorK3sKKysgIHdoaWxlIChuLS0gIT0gMCkKKysgICAgeworKyAgICAgIGludCBkaWZmID0gKnMxKysgLSAqczIrKzsKKysgICAgICBpZiAoZGlmZiAhPSAwKQorKwlyZXR1cm4gZGlmZjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKyt3Y3NjbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMikKKyt7CisrICB3aGlsZSAoKnMxICE9IDAgJiYgKnMxID09ICpzMikKKysgICAgczErKywgczIrKzsKKysgIHJldHVybiAqczEgLSAqczI7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCAqCisrd21lbWNweV91aW50MzIgKHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikKKyt7CisrICByZXR1cm4gbWVtY3B5IChzMSwgczIsIG4gKiBzaXplb2YgKHVpbnQzMl90KSk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCAqCisrd2NzY2hyX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMsIHVpbnQzMl90IGNoKQorK3sKKysgIGRvCisrICAgIGlmICgqcyA9PSBjaCkKKysgICAgICByZXR1cm4gKHVpbnQzMl90ICopIHM7CisrICB3aGlsZSAoKnMrKyAhPSAwKTsKKysgIHJldHVybiAwOworK30KKysKKyAjZW5kaWYgLyogbG9jZmlsZS5oICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3NldGxvY2FsZS5jIGIvbG9jYWxlL3NldGxvY2FsZS5jCitpbmRleCBmYTljYjNhLi44ZWVlMjg0IDEwMDY0NAorLS0tIGEvbG9jYWxlL3NldGxvY2FsZS5jCisrKysgYi9sb2NhbGUvc2V0bG9jYWxlLmMKK0BAIC02NCwzNiArNjQsNiBAQCBzdGF0aWMgY2hhciAqY29uc3QgX25sX2N1cnJlbnRfdXNlZFtdID0KKyAjZW5kaWYKKyAKKyAKKy0vKiBEZWZpbmUgYW4gYXJyYXkgb2YgY2F0ZWdvcnkgbmFtZXMgKGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzKS4gICovCistY29uc3QgdW5pb24gY2F0bmFtZXN0cl90IF9ubF9jYXRlZ29yeV9uYW1lcyBhdHRyaWJ1dGVfaGlkZGVuID0KKy0gIHsKKy0gICAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICAgIGNhdGVnb3J5X25hbWUsCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKy0gICAgfQorLSAgfTsKKy0KKy1jb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX2lkeHNbX19MQ19MQVNUXSBhdHRyaWJ1dGVfaGlkZGVuID0KKy0gIHsKKy0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKy0gICAgW2NhdGVnb3J5XSA9IG9mZnNldG9mICh1bmlvbiBjYXRuYW1lc3RyX3QsIENBVE5BTUVNRiAoX19MSU5FX18pKSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmIERFRklORV9DQVRFR09SWQorLSAgfTsKKy0KKy0vKiBBbiBhcnJheSBvZiB0aGVpciBsZW5ndGhzLCBmb3IgY29udmVuaWVuY2UuICAqLworLWNvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfc2l6ZXNbXSBhdHRyaWJ1dGVfaGlkZGVuID0KKy0gIHsKKy0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKy0gICAgW2NhdGVnb3J5XSA9IHNpemVvZiAoY2F0ZWdvcnlfbmFtZSkgLSAxLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYJREVGSU5FX0NBVEVHT1JZCistICAgIFtMQ19BTExdID0gc2l6ZW9mICgiTENfQUxMIikgLSAxCistICB9OworLQorLQorICNpZmRlZiBOTF9DVVJSRU5UX0lORElSRUNUCisgIyBkZWZpbmUgV0VBS19QT1NUTE9BRChwb3N0bG9hZCkgd2Vha19leHRlcm4gKHBvc3Rsb2FkKQorICNlbHNlCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3hsb2NhbGUuYyBiL2xvY2FsZS94bG9jYWxlLmMKK2luZGV4IGZlYzQ1NjQuLmYwMDI2OWMgMTAwNjQ0CistLS0gYS9sb2NhbGUveGxvY2FsZS5jCisrKysgYi9sb2NhbGUveGxvY2FsZS5jCitAQCAtMTgsNiArMTgsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPGxvY2FsZS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCisgCisgI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCitAQCAtMjUsNiArMjYsMTkgQEAgZXh0ZXJuIHN0cnVjdCBfX2xvY2FsZV9kYXRhIF9ubF9DXyMjY2F0ZWdvcnk7CisgI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorICN1bmRlZglERUZJTkVfQ0FURUdPUlkKKyAKKysvKiBJZiB0aGUgbG9jYWxlIHN1cHBvcnQgY29kZSBpc24ndCBlbmFibGVkLCBkb24ndCBnZW5lcmF0ZSBzdHJvbmcKKysgICByZWZlcmVuY2UgdG8gdGhlIEMgbG9jYWxlX2RhdGEgc3RydWN0dXJlcyBoZXJlOyBsZXQgdGhlIE1ha2VmaWxlCisrICAgZGVjaWRlIHdoaWNoIG9uZXMgdG8gaW5jbHVkZS4gIChJbiB0aGUgc3RhdGljIGxpbmtpbmcgY2FzZSwgdGhlCisrICAgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgJ2NsYXNzJywgJ3RvdXBwZXInLCBhbmQgJ3RvbG93ZXInIHRhYmxlcworKyAgIHdpbGwgY2F1c2UgQy1jdHlwZS5vIHRvIGJlIGJyb3VnaHQgaW4sIGFzIGl0IHNob3VsZCBiZSwgZXZlbiB3aGVuCisrICAgdGhlIHJlZmVyZW5jZSB0byBfbmxfQ19MQ19DVFlQRSB3aWxsIGJlIHdlYWsuKSAgKi8KKysjaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICB3ZWFrX2V4dGVybiAoX25sX0NfIyNjYXRlZ29yeSkKKysjIGluY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyMgdW5kZWYJREVGSU5FX0NBVEVHT1JZCisrI2VuZGlmCisrCisgLyogRGVmaW5lZCBpbiBsb2NhbGUvQy1jdHlwZS5jLiAgKi8KKyBleHRlcm4gY29uc3QgY2hhciBfbmxfQ19MQ19DVFlQRV9jbGFzc1tdIGF0dHJpYnV0ZV9oaWRkZW47CisgZXh0ZXJuIGNvbnN0IGNoYXIgX25sX0NfTENfQ1RZUEVfdG91cHBlcltdIGF0dHJpYnV0ZV9oaWRkZW47CitAQCAtNTIsMyArNjYsMjYgQEAgY29uc3Qgc3RydWN0IF9fbG9jYWxlX3N0cnVjdCBfbmxfQ19sb2NvYmogYXR0cmlidXRlX2hpZGRlbiA9CisgICAgIC5fX2N0eXBlX3RvbG93ZXIgPSAoY29uc3QgaW50ICopIF9ubF9DX0xDX0NUWVBFX3RvbG93ZXIgKyAxMjgsCisgICAgIC5fX2N0eXBlX3RvdXBwZXIgPSAoY29uc3QgaW50ICopIF9ubF9DX0xDX0NUWVBFX3RvdXBwZXIgKyAxMjgKKyAgIH07CisrCisrCisrI2lmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrLyogV2hlbiBsb2NhbGUgY29kZSBpcyBlbmFibGVkLCB0aGVzZSBhcmUgZWFjaCBkZWZpbmVkIGluIHRoZQorKyAgIGFwcHJvcHJpYXRlIGxjLUNBVEVHT1JZLmMgZmlsZSwgc28gdGhhdCBzdGF0aWMgbGlua3MgKHdoZW4gX190aHJlYWQKKysgICBpcyBzdXBwb3J0ZWQpIGJyaW5nIGluIG9ubHkgdGhvc2UgbGMtQ0FURUdPUlkubyBmaWxlcyBmb3IKKysgICBjYXRlZ29yaWVzIHRoZSBwcm9ncmFtIGFjdHVhbGx5IHVzZXM7IGxvb2sgZm9yIE5MX0NVUlJFTlRfSU5ESVJFQ1QKKysgICBpbiBsb2NhbGVpbmZvLmguCisrCisrICAgV2hlbiBsb2NhbGUgY29kZSBpcyBkaXNhYmxlZCwgdGhlIF9ubF9DX0NBVEVHT1JZIG9iamVjdHMgYXJlIHRoZQorKyAgIG9ubHkgcG9zc2libGUgcmVmZXJlbnRzLiAgQXQgdGhlIG1vbWVudCwgdGhlcmUgaXNuJ3QgYSB3YXkgdG8gZ2V0CisrICAgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGRlZmluZWQgaW4gZXZlcnkgY29tcGlsYXRpb24gdW5pdCB0aGF0CisrICAgI2luY2x1ZGVzIGxvY2FsZWluZm8uaCwgc28gd2UgY2FuJ3QganVzdCB0dXJuIG9mZgorKyAgIE5MX0NVUlJFTlRfSU5ESVJFQ1QuICBTbyB3ZSdsbCBkZWZpbmUgdGhlIF9ubF9jdXJyZW50X0NBVEVHT1JZCisrICAgcG9pbnRlcnMgaGVyZS4gICovCisrI2lmIGRlZmluZWQgKE5MX0NVUlJFTlRfSU5ESVJFQ1QpCisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSAgICAgIFwKKysgIF9fdGhyZWFkIHN0cnVjdCBfX2xvY2FsZV9kYXRhICogY29uc3QgKl9ubF9jdXJyZW50XyMjY2F0ZWdvcnkgICBcCisrICBhdHRyaWJ1dGVfaGlkZGVuID0gJl9ubF9DX2xvY29iai5fX2xvY2FsZXNbY2F0ZWdvcnldOworKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYgREVGSU5FX0NBVEVHT1JZCisrI2VuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworZGlmZiAtLWdpdCBhL2xvY2FsZWRhdGEvTWFrZWZpbGUgYi9sb2NhbGVkYXRhL01ha2VmaWxlCitpbmRleCBlYmY2YWM5Li4xODcwNzUzIDEwMDY0NAorLS0tIGEvbG9jYWxlZGF0YS9NYWtlZmlsZQorKysrIGIvbG9jYWxlZGF0YS9NYWtlZmlsZQorQEAgLTIxLDEyICsyMSwyMiBAQCBzdWJkaXIgOj0gbG9jYWxlZGF0YQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorLSMgTGlzdCB3aXRoIGFsbCBhdmFpbGFibGUgY2hhcmFjdGVyIHNldCBkZXNjcmlwdGlvbnMuCistY2hhcm1hcHMgOj0gJCh3aWxkY2FyZCBjaGFybWFwcy9bQS1JXSopICQod2lsZGNhcmQgY2hhcm1hcHMvW0otWl0qKQorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyAjIExpc3Qgd2l0aCBhbGwgYXZhaWxhYmxlIGNoYXJhY3RlciBzZXQgZGVzY3JpcHRpb25zLgorLWxvY2FsZXMgOj0gJCh3aWxkY2FyZCBsb2NhbGVzLyopCistCisrYWxsLWNoYXJtYXBzIDo9ICQod2lsZGNhcmQgY2hhcm1hcHMvW0EtSV0qKSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tKLVpdKikKKysKKythbGwtbG9jYWxlcyA6PSAkKHdpbGRjYXJkIGxvY2FsZXMvKikKKysKKysjIElmIHRoZSBFR0xJQkNfTE9DQUxFUyBvcHRpb24gZ3JvdXAgaXMgbm90IGVuYWJsZWQsIHRyaW0gdGhlCisrIyBsaXN0IG9mIGNoYXJtYXAgYW5kIGxvY2FsZSBzb3VyY2UgZmlsZXMuCisraWZlcSAoJChPUFRJT05fRUdMSUJDX0xPQ0FMRVMpLHkpCisrY2hhcm1hcHMgOj0gJChhbGwtY2hhcm1hcHMpCisrbG9jYWxlcyAgOj0gJChhbGwtbG9jYWxlcykKKytlbHNlCisrY2hhcm1hcHMgOj0KKytsb2NhbGVzICA6PSBsb2NhbGVzL1BPU0lYCisrZW5kaWYKKyAKKyBzdWJkaXItZGlycyA9IHRlc3RzLW1id2MKKyB2cGF0aCAlLmMgdGVzdHMtbWJ3YworQEAgLTcxLDE0ICs4MSwyMCBAQCBsb2NhbGVfdGVzdF9zdWl0ZSA6PSB0c3RfaXN3YWxudW0gdHN0X2lzd2FscGhhIHRzdF9pc3djbnRybCAgICAgICAgICAgIFwKKyAJCSAgICAgdHN0X3djc3hmcm0gdHN0X3djdG9iIHRzdF93Y3RvbWIgdHN0X3djdHJhbnMgICAgICBcCisgCQkgICAgIHRzdF93Y3R5cGUgdHN0X3djd2lkdGgKKyAKKy10ZXN0cyA9ICQobG9jYWxlX3Rlc3Rfc3VpdGUpIHRzdC1kaWdpdHMgdHN0LXNldGxvY2FsZSBidWctaWNvbnYtdHJhbnMgXAorKyMgU2luY2UgdGhlc2UgdGVzdHMgYnVpbGQgdGhlaXIgb3duIGxvY2FsZSBmaWxlcywgdGhleSdyZSBub3QKKysjIGRlcGVuZGVudCBvbiB0aGUgT1BUSU9OX0VHTElCQ19MT0NBTEVTIG9wdGlvbiBncm91cC4gIEJ1dCB0aGV5IGRvCisrIyBuZWVkIHRoZSBsb2NhbGUgZnVuY3Rpb25zIHRvIGJlIHByZXNlbnQuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrICAgICArPSAkKGxvY2FsZV90ZXN0X3N1aXRlKSB0c3QtZGlnaXRzIHRzdC1zZXRsb2NhbGUgYnVnLWljb252LXRyYW5zIFwKKyAJdHN0LWxlYWtzIHRzdC1tYnN3Y3MxIHRzdC1tYnN3Y3MyIHRzdC1tYnN3Y3MzIHRzdC1tYnN3Y3M0IHRzdC1tYnN3Y3M1IFwKKyAJdHN0LW1ic3djczYgdHN0LXhsb2NhbGUxIHRzdC14bG9jYWxlMiBidWctdXNlc2V0bG9jYWxlIFwKKyAJdHN0LXN0cmZtb24xIHRzdC1zc2NhbmYgYnVnLXNldGxvY2FsZTEgdHN0LXNldGxvY2FsZTIgdHN0LXNldGxvY2FsZTMgXAorIAl0c3Qtd2N0eXBlCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIHRlc3RzLXN0YXRpYyA9IGJ1Zy1zZXRsb2NhbGUxLXN0YXRpYworIHRlc3RzICs9ICQodGVzdHMtc3RhdGljKQorLWlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisrZW5kaWYKKytpZmVxICh5ZXN5LCQoYnVpbGQtc2hhcmVkKSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgaWZuZXEgKG5vLCQoUEVSTCkpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCltdHJhY2UtdHN0LWxlYWtzLm91dAorIGVuZGlmCitAQCAtOTUsNiArMTExLDcgQEAgdGVzdHM6ICQob2JqZGlyKS9pY29udmRhdGEvZ2NvbnYtbW9kdWxlcworIHRlc3RzLXN0YXRpYyArPSB0c3QtbGFuZ2luZm8tc3RhdGljCisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClzb3J0LXRlc3Qub3V0ICQob2JqcGZ4KXRzdC1mbW9uLm91dCBcCisgCQkgJChvYmpwZngpdHN0LWxvY2FsZS5vdXQgJChvYmpwZngpdHN0LXJwbWF0Y2gub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtdHJhbnMub3V0ICQob2JqcGZ4KXRzdC1jdHlwZS5vdXQgXAorQEAgLTEwOSw2ICsxMjYsNyBAQCBMT0NBTEVTIDo9IGRlX0RFLklTTy04ODU5LTEgZGVfREUuVVRGLTggZW5fVVMuQU5TSV9YMy40LTE5NjggXAorIAkgICB0cl9UUi5JU08tODg1OS05IGVuX0dCLlVURi04IHVrX1VBLlVURi04CisgaW5jbHVkZSAuLi9nZW4tbG9jYWxlcy5taworIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitAQCAtMTkxLDYgKzIwOSwxMSBAQCBlbmRpZgorIAorIGluY2x1ZGUgU1VQUE9SVEVECisgCisrIyBPbmx5IGluc3RhbGwgbG9jYWxlIGRhdGEgaWYgT1BUSU9OX0VHTElCQ19MT0NBTEVTIGlzIHNlbGVjdGVkLgorK2lmbmVxICgkKE9QVElPTl9FR0xJQkNfTE9DQUxFUykseSkKKytTVVBQT1JURUQtTE9DQUxFUyA6PQorK2VuZGlmCisrCisgSU5TVEFMTC1TVVBQT1JURUQtTE9DQUxFUz0kKGFkZHByZWZpeCBpbnN0YWxsLSwgJChTVVBQT1JURUQtTE9DQUxFUykpCisgCisgIyBTb21ldGltZXMgdGhlIHdob2xlIGNvbGxlY3Rpb24gb2YgbG9jYWxlIGZpbGVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCitkaWZmIC0tZ2l0IGEvbG9naW4vTWFrZWZpbGUgYi9sb2dpbi9NYWtlZmlsZQoraW5kZXggMGY0YmIyMi4uNDAzNmRkYiAxMDA2NDQKKy0tLSBhL2xvZ2luL01ha2VmaWxlCisrKysgYi9sb2dpbi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDcgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGxvZ2luIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyBzdWJkaXIJOj0gbG9naW4KKyAKK0BAIC0yNSwxNCArMjYsMTYgQEAgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwk6PSB1dG1wLmggYml0cy91dG1wLmggbGFzdGxvZy5oIHB0eS5oCisgCistcm91dGluZXMgOj0gZ2V0bG9naW4gZ2V0bG9naW5fciBzZXRsb2dpbiBnZXRsb2dpbl9yX2NoayBcCistCSAgICBnZXR1dGVudCBnZXR1dGVudF9yIGdldHV0aWQgZ2V0dXRsaW5lIGdldHV0aWRfciBnZXR1dGxpbmVfciBcCistCSAgICB1dG1wX2ZpbGUgdXRtcG5hbWUgdXBkd3RtcCBnZXRwdCBncmFudHB0IHVubG9ja3B0IHB0c25hbWUgXAorLQkgICAgcHRzbmFtZV9yX2NoaworK3JvdXRpbmVzIDo9IGdldHB0IGdyYW50cHQgdW5sb2NrcHQgcHRzbmFtZSBwdHNuYW1lX3JfY2hrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1VUTVApIFwKKysJICs9IGdldHV0ZW50IGdldHV0ZW50X3IgZ2V0dXRpZCBnZXR1dGxpbmUgZ2V0dXRpZF9yIGdldHV0bGluZV9yIFwKKysJICAgIHV0bXBfZmlsZSB1dG1wbmFtZSB1cGR3dG1wCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0dFVExPR0lOKSArPSBnZXRsb2dpbiBnZXRsb2dpbl9yIGdldGxvZ2luX3JfY2hrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JTRCkgKz0gc2V0bG9naW4KKyAKKyBDRkxBR1MtZ3JhbnRwdC5jID0gLURMSUJFWEVDRElSPSciJChsaWJleGVjZGlyKSInCisgCistb3RoZXJzID0gdXRtcGR1bXAKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX1VUTVApICs9IHV0bXBkdW1wCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtcHQtY2hvd24pKQorIG90aGVycyArPSBwdF9jaG93bgorQEAgLTQ2LDggKzQ5LDggQEAgdnBhdGggJS5jIHByb2dyYW1zCisgdGVzdHMgOj0gdHN0LXV0bXAgdHN0LXV0bXB4IHRzdC1ncmFudHB0IHRzdC1wdHNuYW1lIHRzdC1nZXRsb2dpbgorIAorICMgQnVpbGQgdGhlIC1sdXRpbCBsaWJyYXJ5IHdpdGggdGhlc2UgZXh0cmEgZnVuY3Rpb25zLgorLWV4dHJhLWxpYnMgICAgICA6PSBsaWJ1dGlsCistZXh0cmEtbGlicy1vdGhlcnMgOj0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX1VUTVApIDo9IGxpYnV0aWwKKytleHRyYS1saWJzLW90aGVycyA6PSAkKGV4dHJhLWxpYnMteSkKKyAKKyBsaWJ1dGlsLXJvdXRpbmVzOj0gbG9naW4gbG9naW5fdHR5IGxvZ291dCBsb2d3dG1wIG9wZW5wdHkgZm9ya3B0eQorIAorZGlmZiAtLWdpdCBhL21hbGxvYy9NYWtlZmlsZSBiL21hbGxvYy9NYWtlZmlsZQoraW5kZXggNjdlZDI5My4uMjcyY2E0ZCAxMDA2NDQKKy0tLSBhL21hbGxvYy9NYWtlZmlsZQorKysrIGIvbWFsbG9jL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBtYWxsb2Mgcm91dGluZXMKKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBtYWxsb2MKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zOSw5ICs0MSwxNSBAQCBpbnN0YWxsLWxpYiA6PSBsaWJtY2hlY2suYQorIG5vbi1saWIuYSA6PSBsaWJtY2hlY2suYQorIAorICMgQWRkaXRpb25hbCBsaWJyYXJ5LgorK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19NRU1VU0FHRSkseSkKKyBleHRyYS1saWJzID0gbGlibWVtdXNhZ2UKKyBleHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKyAKKytpZmRlZiBPUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKytDUFBGTEFHUy1tZW11c2FnZSArPSAtRF9fT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFPSQoT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFKQorK2VuZGlmCisrZW5kaWYKKysKKyBsaWJtZW11c2FnZS1yb3V0aW5lcyA9IG1lbXVzYWdlCisgbGlibWVtdXNhZ2UtaW5oaWJpdC1vID0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCitAQCAtNzEsNyArNzksNyBAQCBlbmRpZgorICMgVW5sZXNzIHdlIGdldCBhIHRlc3QgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgbGliZ2Qgd2hpY2ggYWxzbyB3b3JrcworICMgZm9yIGNyb3NzLWNvbXBpbGluZyB3ZSBkaXNhYmxlIHRoZSBtZW11c2FnZXN0YXQgZ2VuZXJhdGlvbiBpbiB0aGlzCisgIyBzaXR1YXRpb24uCistaWZuZXEgKCQoY3Jvc3MtY29tcGlsaW5nKSx5ZXMpCisraWZlcSAoJChjcm9zcy1jb21waWxpbmcpJChPUFRJT05fRUdMSUJDX01FTVVTQUdFKSxub3kpCisgIyBJZiB0aGUgZ2QgbGlicmFyeSBpcyBhdmFpbGFibGUgd2UgYnVpbGQgdGhlIGBtZW11c2FnZXN0YXQnIHByb2dyYW0uCisgaWZuZXEgKCQoTElCR0QpLG5vKQorIG90aGVyczogJChvYmpwZngpbWVtdXNhZ2UKK2RpZmYgLS1naXQgYS9tYWxsb2MvbWVtdXNhZ2UuYyBiL21hbGxvYy9tZW11c2FnZS5jCitpbmRleCBhNTdiYThlLi43MzJiYTlkIDEwMDY0NAorLS0tIGEvbWFsbG9jL21lbXVzYWdlLmMKKysrKyBiL21hbGxvYy9tZW11c2FnZS5jCitAQCAtMzMsNiArMzMsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8bWVtdXNhZ2UuaD4KKyAKK0BAIC05Myw3ICs5NCwxMSBAQCBzdGF0aWMgX190aHJlYWQgdWludHB0cl90IHN0YXJ0X3NwOworICNkZWZpbmUgcGVha19zdGFjayAgICAgIHBlYWtfdXNlWzFdCisgI2RlZmluZSBwZWFrX3RvdGFsICAgICAgcGVha191c2VbMl0KKyAKKy0jZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUgICAgIDMyNzY4CisrI2lmbmRlZiBfX09QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorKyMgZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUJMzI3NjgKKysjZWxzZQorKyMgZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUJX19PUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKysjZW5kaWYKKyBzdGF0aWMgc2l6ZV90IGJ1ZmZlcl9zaXplOworIAorIHN0YXRpYyBpbnQgZmQgPSAtMTsKK2RpZmYgLS1naXQgYS9tYWxsb2MvbWVtdXNhZ2Uuc2ggYi9tYWxsb2MvbWVtdXNhZ2Uuc2gKK2luZGV4IDhhYjhjYzIuLmQxOGY0NDYgMTAwNzU1CistLS0gYS9tYWxsb2MvbWVtdXNhZ2Uuc2gKKysrKyBiL21hbGxvYy9tZW11c2FnZS5zaAorQEAgLTM1LDcgKzM1LDcgQEAgZG9fbWlzc2luZ19hcmcoKSB7CisgCisgIyBQcmludCBoZWxwIG1lc3NhZ2UKKyBkb19oZWxwKCkgeworLSAgZWNobyAkIlVzYWdlOiBtZW11c2FnZSBbT1BUSU9OXS4uLiBQUk9HUkFNIFtQUk9HUkFNT1BUSU9OXS4uLgorKyAgcHJpbnRmICQiVXNhZ2U6IG1lbXVzYWdlIFtPUFRJT05dLi4uIFBST0dSQU0gW1BST0dSQU1PUFRJT05dLi4uCisgUHJvZmlsZSBtZW1vcnkgdXNhZ2Ugb2YgUFJPR1JBTS4KKyAKKyAgICAtbiwtLXByb2duYW1lPU5BTUUgICAgIE5hbWUgb2YgdGhlIHByb2dyYW0gZmlsZSB0byBwcm9maWxlCitkaWZmIC0tZ2l0IGEvbWF0aC9NYWtlZmlsZSBiL21hdGgvTWFrZWZpbGUKK2luZGV4IDYzODhiYWUuLmVkMWM1MTEgMTAwNjQ0CistLS0gYS9tYXRoL01ha2VmaWxlCisrKysgYi9tYXRoL01ha2VmaWxlCitAQCAtMjEsNiArMjEsOCBAQCBzdWJkaXIJCTo9IG1hdGgKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgIyBJbnN0YWxsZWQgaGVhZGVyIGZpbGVzLgorIGhlYWRlcnMJCTo9IG1hdGguaCBiaXRzL21hdGhjYWxscy5oIGJpdHMvbWF0aGlubGluZS5oIGJpdHMvaHVnZV92YWwuaCBcCisgCQkgICBiaXRzL2h1Z2VfdmFsZi5oIGJpdHMvaHVnZV92YWxsLmggYml0cy9pbmYuaCBiaXRzL25hbi5oIFwKK0BAIC0zNCw4ICszNiw4IEBAIGF1eAkJOj0gc2V0ZnB1Y3cgZnB1X2NvbnRyb2wKKyAKKyAjIEJ1aWxkIHRoZSAtbG0gbGlicmFyeS4KKyAKKy1leHRyYS1saWJzCTo9IGxpYm0KKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSA6PSBsaWJtCisrZXh0cmEtbGlicy1vdGhlcnMtJChPUFRJT05fRUdMSUJDX0xJQk0pID0gJChleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSkKKyAKKyBsaWJtLXN1cHBvcnQgPSBzX2xpYl92ZXJzaW9uIHNfbWF0aGVyciBzX3NpZ25nYW0JCQlcCisgCSAgICAgICBmY2xyZXhjcHQgZmdldGV4Y3B0ZmxnIGZyYWlzZWV4Y3B0IGZzZXRleGNwdGZsZwkJXAorZGlmZiAtLWdpdCBhL21pc2MvTWFrZWZpbGUgYi9taXNjL01ha2VmaWxlCitpbmRleCBhZWNiMGRhLi5lNmI3YzIzIDEwMDY0NAorLS0tIGEvbWlzYy9NYWtlZmlsZQorKysrIGIvbWlzYy9NYWtlZmlsZQorQEAgLTE5LDYgKzE5LDEwIEBACisgIwlTdWItbWFrZWZpbGUgZm9yIG1pc2MgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisgCisrIyBTb21lIHN5c3RlbS1kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyB1c2Ugb3B0aW9uCisrIyBncm91cHMgKHNlZSBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZSwgZm9yIGV4YW1wbGUpLgorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbWlzYworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTQ2LDQwICs1MCw0NyBAQCByb3V0aW5lcyA6PSBicmsgc2JyayBzc3RrIGlvY3RsIFwKKyAJICAgIHNlbGVjdCBwc2VsZWN0IFwKKyAJICAgIGFjY3QgY2hyb290IGZzeW5jIHN5bmMgZmRhdGFzeW5jIHN5bmNmcyByZWJvb3QgXAorIAkgICAgZ2V0aG9zdGlkIHNldGhvc3RpZCBcCistCSAgICByZXZva2Ugdmhhbmd1cCBcCisrCSAgICB2aGFuZ3VwIFwKKyAJICAgIHN3YXBvbiBzd2Fwb2ZmIG1rdGVtcCBta3N0ZW1wIG1rc3RlbXA2NCBta2R0ZW1wIFwKKyAJICAgIG1rb3N0ZW1wIG1rb3N0ZW1wNjQgbWtzdGVtcHMgbWtzdGVtcHM2NCBta29zdGVtcHMgbWtvc3RlbXBzNjQgXAorIAkgICAgdWFsYXJtIHVzbGVlcCBcCisgCSAgICBndHR5IHN0dHkgXAorIAkgICAgcHRyYWNlIFwKKy0JICAgIGZzdGFiIG1udGVudCBtbnRlbnRfciBcCisrCSAgICBtbnRlbnQgbW50ZW50X3IgXAorIAkgICAgdXRpbWVzIGx1dGltZXMgZnV0aW1lcyBmdXRpbWVzYXQgXAorIAkgICAgdHJ1bmNhdGUgZnRydW5jYXRlIHRydW5jYXRlNjQgZnRydW5jYXRlNjQgXAorLQkgICAgY2hmbGFncyBmY2hmbGFncyBcCisgCSAgICBpbnNyZW1xdWUgZ2V0dHR5ZW50IGdldHVzZXJzaGVsbCBnZXRwYXNzIHR0eXNsb3QgXAorIAkgICAgc3lzbG9nIHN5c2NhbGwgZGFlbW9uIFwKKyAJICAgIG1tYXAgbW1hcDY0IG11bm1hcCBtcHJvdGVjdCBtc3luYyBtYWR2aXNlIG1pbmNvcmUgcmVtYXBfZmlsZV9wYWdlc1wKKyAJICAgIG1sb2NrIG11bmxvY2sgbWxvY2thbGwgbXVubG9ja2FsbCBcCistCSAgICBlZmdjdnQgZWZnY3Z0X3IgcWVmZ2N2dCBxZWZnY3Z0X3IgXAorIAkgICAgaHNlYXJjaCBoc2VhcmNoX3IgdHNlYXJjaCBsc2VhcmNoIFwKKyAJICAgIGVyciBlcnJvciB1c3RhdCBcCistCSAgICBnZXRzeXNzdGF0cyBkaXJuYW1lIHJlZ2V4cCBcCisrCSAgICBnZXRzeXNzdGF0cyBkaXJuYW1lIFwKKyAJICAgIGdldGxvYWRhdmcgZ2V0Y2xrdGNrIFwKKyAJICAgIGZnZXR4YXR0ciBmbGlzdHhhdHRyIGZyZW1vdmV4YXR0ciBmc2V0eGF0dHIgZ2V0eGF0dHIgXAorIAkgICAgbGlzdHhhdHRyIGxnZXR4YXR0ciBsbGlzdHhhdHRyIGxyZW1vdmV4YXR0ciBsc2V0eGF0dHIgXAorIAkgICAgcmVtb3ZleGF0dHIgc2V0eGF0dHIgZ2V0YXV4dmFsIGlmdW5jLWltcGwtbGlzdAorIAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkgKz0gcmVnZXhwCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZTVEFCKSArPSBmc3RhYgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CU0QpICs9IGNoZmxhZ3MgZmNoZmxhZ3MgcmV2b2tlCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZDVlQpICs9IGVmZ2N2dCBlZmdjdnRfciBxZWZnY3Z0IHFlZmdjdnRfcgorKworIGdlbmVyYXRlZCArPSB0c3QtZXJyb3IxLm10cmFjZSB0c3QtZXJyb3IxLW1lbS5vdXQKKyAKKyBhdXggOj0gaW5pdC1taXNjCisgaW5zdGFsbC1saWIgOj0gbGliZy5hCisgZ3BsMmxncGwgOj0gZXJyb3IuYyBlcnJvci5oCisgCistdGVzdHMgOj0gdHN0LWRpcm5hbWUgdHN0LXRzZWFyY2ggdHN0LWZkc2V0IHRzdC1lZmdjdnQgdHN0LW1udGVudCB0c3QtaHNlYXJjaCBcCistCSB0c3QtZXJyb3IxIHRzdC1wc2VsZWN0IHRzdC1pbnNyZW1xdWUgdHN0LW1udGVudDIgYnVnLWhzZWFyY2gxCisrdGVzdHMgOj0gdHN0LWRpcm5hbWUgdHN0LXRzZWFyY2ggdHN0LWZkc2V0IHRzdC1tbnRlbnQgdHN0LWhzZWFyY2ggXAorKwkgdHN0LXBzZWxlY3QgdHN0LWluc3JlbXF1ZSB0c3QtbW50ZW50MiBidWctaHNlYXJjaDEKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSArPSB0c3QtZXJyb3IxCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0ZDVlQpICs9IHRzdC1lZmdjdnQKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtZXJyb3IxLW1lbS5vdXQKKyBlbmRpZgorK2VuZGlmCisgCisgQ0ZMQUdTLXNlbGVjdC5jID0gLWZleGNlcHRpb25zIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKKyBDRkxBR1MtdHNlYXJjaC5jID0gJCh1c2VzLWNhbGxiYWNrcykKK2RpZmYgLS1naXQgYS9taXNjL2Vyci5jIGIvbWlzYy9lcnIuYworaW5kZXggN2I5ODE1Ny4uZWZjZThkNSAxMDA2NDQKKy0tLSBhL21pc2MvZXJyLmMKKysrKyBiL21pc2MvZXJyLmMKK0BAIC0yMiw2ICsyMiw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDx3Y2hhci5oPgorICNkZWZpbmUgZmxvY2tmaWxlKHMpIF9JT19mbG9ja2ZpbGUgKHMpCitAQCAtMzcsNiArMzgsNyBAQCBleHRlcm4gY2hhciAqX19wcm9nbmFtZTsKKyAgIHZhX2VuZCAoYXApOwkJCQkJCQkJICAgICAgXAorIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIHN0YXRpYyB2b2lkCisgY29udmVydF9hbmRfcHJpbnQgKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgeworQEAgLTgxLDYgKzgzLDcgQEAgY29udmVydF9hbmRfcHJpbnQgKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgCisgICBfX3Zmd3ByaW50ZiAoc3RkZXJyLCB3Zm9ybWF0LCBhcCk7CisgfQorKyNlbmRpZgorIAorIHZvaWQKKyB2d2FybnggKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCitAQCAtODgsOSArOTEsMTMgQEAgdndhcm54IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorICAgZmxvY2tmaWxlIChzdGRlcnIpOworICAgaWYgKF9JT19md2lkZSAoc3RkZXJyLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIF9fZndwcmludGYgKHN0ZGVyciwgTCIlczogIiwgX19wcm9nbmFtZSk7CisgICAgICAgY29udmVydF9hbmRfcHJpbnQgKGZvcm1hdCwgYXApOworICAgICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RkZXJyKTsKKysjZWxzZQorKyAgICAgIGFib3J0ICgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgICAgIHsKK0BAIC0xMTEsNiArMTE4LDcgQEAgdndhcm4gKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgICBmbG9ja2ZpbGUgKHN0ZGVycik7CisgICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgX19md3ByaW50ZiAoc3RkZXJyLCBMIiVzOiAiLCBfX3Byb2duYW1lKTsKKyAgICAgICBpZiAoZm9ybWF0KQorIAl7CitAQCAtMTE5LDYgKzEyNyw5IEBAIHZ3YXJuIChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorIAl9CisgICAgICAgX19zZXRfZXJybm8gKGVycm9yKTsKKyAgICAgICBfX2Z3cHJpbnRmIChzdGRlcnIsIEwiJW1cbiIpOworKyNlbHNlCisrICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworZGlmZiAtLWdpdCBhL21pc2MvZXJyb3IuYyBiL21pc2MvZXJyb3IuYworaW5kZXggYWFhMTIwZC4uZDZjYmM4MiAxMDA2NDQKKy0tLSBhL21pc2MvZXJyb3IuYworKysrIGIvbWlzYy9lcnJvci5jCitAQCAtMzUsNiArMzUsNyBAQAorICNlbmRpZgorIAorICNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjIGluY2x1ZGUgPHN0ZGludC5oPgorQEAgLTIwNSw2ICsyMDYsNyBAQCBlcnJvcl90YWlsIChpbnQgc3RhdHVzLCBpbnQgZXJybnVtLCBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFyZ3MpCisgI2lmIF9MSUJDCisgICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobWVzc2FnZSkgKyAxOworICAgICAgIHdjaGFyX3QgKndtZXNzYWdlID0gTlVMTDsKKyAgICAgICBtYnN0YXRlX3Qgc3Q7CitAQCAtMjY1LDYgKzI2Nyw5IEBAIGVycm9yX3RhaWwgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXJncykKKyAKKyAgICAgICBpZiAodXNlX21hbGxvYykKKyAJZnJlZSAod21lc3NhZ2UpOworKyNlbHNlCisrICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9taXNjL3RzdC1lZmdjdnQuYyBiL21pc2MvdHN0LWVmZ2N2dC5jCitpbmRleCA1MDgzZmVjLi43OWVkMzZjIDEwMDY0NAorLS0tIGEvbWlzYy90c3QtZWZnY3Z0LmMKKysrKyBiL21pc2MvdHN0LWVmZ2N2dC5jCitAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgdGVzdGNhc2UgZWN2dF90ZXN0c1tdID0KKyAgIHsgMTIzLjAxLCAtNCwgMywgIiIgfSwKKyAgIHsgMTI2LjcxLCAtNCwgMywgIiIgfSwKKyAgIHsgMC4wLCA0LCAxLCAiMDAwMCIgfSwKKy0jaWYgREJMX01BTlRfRElHID09IDUzCisrI2lmIERCTF9NQU5UX0RJRyA9PSA1MyAmJiAhKGRlZmluZWQgX19wb3dlcnBjX18gJiYgZGVmaW5lZCBfX05PX0ZQUlNfXyAmJiAhZGVmaW5lZCBfU09GVF9GTE9BVCAmJiAhZGVmaW5lZCBfU09GVF9ET1VCTEUpCisgICB7IDB4MXAtMTA3NCwgMywgLTMyMywgIjQ5NCIgfSwKKyAgIHsgLTB4MXAtMTA3NCwgMywgLTMyMywgIjQ5NCIgfSwKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9uaXMvTWFrZWZpbGUgYi9uaXMvTWFrZWZpbGUKK2luZGV4IDAzN2U2NzQuLmM5Njc4NTAgMTAwNjQ0CistLS0gYS9uaXMvTWFrZWZpbGUKKysrKyBiL25pcy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgTklTL05JUysgcGFydC4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBuaXMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCwxOSArMzIsMjYgQEAgZW5kaWYKKyAKKyAjIFRoZXNlIGFyZSB0aGUgZGF0YWJhc2VzIGF2YWlsYWJsZSBmb3IgdGhlIG5pcyAoYW5kIHBlcmhhcHMgbGF0ZXIgbmlzcGx1cykKKyAjIHNlcnZpY2UuICBUaGlzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2VydmljZXMgaW4gbnNzLgorLWRhdGFiYXNlcwkJPSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZ3JwIHB3ZCBycGMgZXRoZXJzIFwKKy0JCQkgIHNwd2QgbmV0Z3JwIGFsaWFzIHB1YmxpY2tleQorK2RhdGFiYXNlcy15CQk6PSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZ3JwIHB3ZCBycGMgZXRoZXJzIFwKKysJCQkgICBzcHdkIG5ldGdycCBwdWJsaWNrZXkKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMpICs9IGFsaWFzCisgCisgIyBTcGVjaWZ5IHJ1bGVzIGZvciB0aGUgbnNzXyogbW9kdWxlcy4KKy1zZXJ2aWNlcwkJOj0gbmlzIG5pc3BsdXMgY29tcGF0CisrIyBUaGUgJ2NvbXBhdCcgbW9kdWxlIGluY2x1ZGVzIG5pcyBzdXBwb3J0LCBhbmQgdGhlICduc3MnIGRpcmVjdG9yeQorKyMgaW5jbHVkZXMgYSBiYXJlLWJvbmVzICJmaWxlcyIgbGlicmFyeSwgc28gd2UnbGwgaW5jbHVkZSAnY29tcGF0JyBpbgorKyMgT1BUSU9OX0VHTElCQ19OSVMuCisrc2VydmljZXMteQkJOj0KKytzZXJ2aWNlcy0kKE9QVElPTl9FR0xJQkNfTklTKSArPSBuaXMgbmlzcGx1cyBjb21wYXQKKysKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19OSVMpICs9IGxpYm5zbAorK2V4dHJhLWxpYnMteQkJKz0gJChzZXJ2aWNlcy15OiU9bGlibnNzXyUpCisgCistZXh0cmEtbGlicwkJPSBsaWJuc2wgJChzZXJ2aWNlczolPWxpYm5zc18lKQorICMgVGhlc2UgbGlicmFyaWVzIHdpbGwgYmUgYnVpbHQgaW4gdGhlIGBvdGhlcnMnIHBhc3MgcmF0aGVyIHRoYW4KKyAjIHRoZSBgbGliJyBwYXNzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGxpYmMuc28gYmVpbmcgYnVpbHQgYWxyZWFkeS4KKy1leHRyYS1saWJzLW90aGVycwk9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLW90aGVycy15CSs9ICQoZXh0cmEtbGlicy15KQorIAorICMgVGhlIHNvdXJjZXMgYXJlIGZvdW5kIGluIHRoZSBhcHByb3ByaWF0ZSBzdWJkaXIuCistc3ViZGlyLWRpcnMgPSAkKHNlcnZpY2VzOiU9bnNzXyUpCisrc3ViZGlyLWRpcnMgPSAkKHNlcnZpY2VzLXk6JT1uc3NfJSkKKyB2cGF0aCAlLmMgJChzdWJkaXItZGlycykKKyAKKyBsaWJuc2wtcm91dGluZXMgPSB5cF94ZHIgeXBjbG50IHlwdXBkYXRlX3hkciBcCitAQCAtNjAsMTEgKzY5LDExIEBAIGxpYm5zbC1yb3V0aW5lcyA9IHlwX3hkciB5cGNsbnQgeXB1cGRhdGVfeGRyIFwKKyBsaWJuc3NfY29tcGF0LXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IGNvbXBhdC0sZ3JwIHB3ZCBzcHdkIGluaXRncm91cHMpCisgbGlibnNzX2NvbXBhdC1pbmhpYml0LW8JPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKKy1saWJuc3NfbmlzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pcy0sJChkYXRhYmFzZXMpKSBuaXMtaW5pdGdyb3VwcyBcCisrbGlibnNzX25pcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXMtLCQoZGF0YWJhc2VzLXkpKSBuaXMtaW5pdGdyb3VwcyBcCisgCQkJICAgbnNzLW5pcworIGxpYm5zc19uaXMtaW5oaWJpdC1vCT0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCistbGlibnNzX25pc3BsdXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzcGx1cy0sJChkYXRhYmFzZXMpKSBuaXNwbHVzLXBhcnNlciBcCisrbGlibnNzX25pc3BsdXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzcGx1cy0sJChkYXRhYmFzZXMteSkpIG5pc3BsdXMtcGFyc2VyIFwKKyAJCQkgICBuc3MtbmlzcGx1cyBuaXNwbHVzLWluaXRncm91cHMKKyBsaWJuc3NfbmlzcGx1cy1pbmhpYml0LW8gPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKK0BAIC04MCwxMiArODksMTIgQEAgbGlibnNsLWxpYmMgPSAkKGNvbW1vbi1vYmpwZngpbGlua29iai9saWJjLnNvCisgIyBUYXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgc2V0dGluZyB0byBsaW5rIG9iamVjdHMgdXNpbmcgZGVwcmVjYXRlZAorICMgUlBDIGludGVyZmFjZXMgd2l0aCB0aGUgdmVyc2lvbiBvZiBsaWJjLnNvIHRoYXQgbWFrZXMgdGhlbSBhdmFpbGFibGUKKyAjIGZvciBuZXcgbGlua3M6CistJChzZXJ2aWNlczolPSQob2JqcGZ4KWxpYm5zc18lLnNvKSAkKG9ianBmeClsaWJuc2wuc286IFwKKyskKHNlcnZpY2VzLXk6JT0kKG9ianBmeClsaWJuc3NfJS5zbykgJChvYmpwZngpbGlibnNsLnNvOiBcCisgICBsaWJjLWZvci1saW5rID0gJChsaWJuc2wtbGliYykKKyAKKyAKKyBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorLSQob3RoZXJzOiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5zbyQobGlibnNsLnNvLXZlcnNpb24pCisrJChvdGhlcnMteTolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuc28kKGxpYm5zbC5zby12ZXJzaW9uKQorIGVsc2UKKy0kKG90aGVyczolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuYQorKyQob3RoZXJzLXk6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLmEKKyBlbmRpZgorZGlmZiAtLWdpdCBhL25wdGwvTWFrZWZpbGUgYi9ucHRsL01ha2VmaWxlCitpbmRleCBhYWNhMGE0Li41OTZjYTNjIDEwMDY0NAorLS0tIGEvbnB0bC9NYWtlZmlsZQorKysrIGIvbnB0bC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIE5QVEwgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBucHRsCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMTE4LDcgKzEyMCw3IEBAIGxpYnB0aHJlYWQtcm91dGluZXMgPSBucHRsLWluaXQgdmFycyBldmVudHMgdmVyc2lvbiBwdC1pbnRlcnAgXAorIAkJICAgICAgcHQtcmFpc2UgcHQtc3lzdGVtIFwKKyAJCSAgICAgIGZsb2NrZmlsZSBmdHJ5bG9ja2ZpbGUgZnVubG9ja2ZpbGUgXAorIAkJICAgICAgc2lnYWN0aW9uIFwKKy0JCSAgICAgIGhlcnJubyByZXMgcHQtYWxsb2NydHNpZyBcCisrCQkgICAgICBwdC1hbGxvY3J0c2lnIFwKKyAJCSAgICAgIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzIFwKKyAJCSAgICAgIHB0aHJlYWRfZ2V0YWZmaW5pdHkgcHRocmVhZF9zZXRhZmZpbml0eSBcCisgCQkgICAgICBwdGhyZWFkX2F0dHJfZ2V0YWZmaW5pdHkgcHRocmVhZF9hdHRyX3NldGFmZmluaXR5IFwKK0BAIC0xMzgsOCArMTQwLDEwIEBAIGxpYnB0aHJlYWQtcm91dGluZXMgPSBucHRsLWluaXQgdmFycyBldmVudHMgdmVyc2lvbiBwdC1pbnRlcnAgXAorICMJCSAgICAgIHB0aHJlYWRfc2V0Z2lkIHB0aHJlYWRfc2V0ZWdpZCBwdGhyZWFkX3NldHJlZ2lkIFwKKyAjCQkgICAgICBwdGhyZWFkX3NldHJlc2dpZAorIAorK2xpYnB0aHJlYWQtcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIDo9IGhlcnJubyByZXMKKyBsaWJwdGhyZWFkLXNoYXJlZC1vbmx5LXJvdXRpbmVzID0gdmVyc2lvbiBwdC1pbnRlcnAgcHQtYWxsb2NydHNpZyBcCisgCQkJCSAgdW53aW5kLWZvcmNlZHVud2luZAorKworIGxpYnB0aHJlYWQtc3RhdGljLW9ubHktcm91dGluZXMgPSBwdGhyZWFkX2F0Zm9yaworIAorICMgU2luY2UgY2FuY2VsbGF0aW9uIGhhbmRsaW5nIGlzIGluIGxhcmdlIHBhcnRzIGhhbmRsZWQgdXNpbmcgZXhjZXB0aW9ucworQEAgLTIyMCw3ICsyMjQsNyBAQCB0ZXN0cyA9IHRzdC10eXBlc2l6ZXMgXAorIAl0c3QtbXV0ZXhwaTEgdHN0LW11dGV4cGkyIHRzdC1tdXRleHBpMyB0c3QtbXV0ZXhwaTQgdHN0LW11dGV4cGk1IFwKKyAJdHN0LW11dGV4cGk1YSB0c3QtbXV0ZXhwaTYgdHN0LW11dGV4cGk3IHRzdC1tdXRleHBpN2EgdHN0LW11dGV4cGk4IFwKKyAJdHN0LW11dGV4cGk5IFwKKy0JdHN0LXNwaW4xIHRzdC1zcGluMiB0c3Qtc3BpbjMgdHN0LXNwaW40IFwKKysJdHN0LXNwaW4xIHRzdC1zcGluMiB0c3Qtc3BpbjMgXAorIAl0c3QtY29uZDEgdHN0LWNvbmQyIHRzdC1jb25kMyB0c3QtY29uZDQgdHN0LWNvbmQ1IHRzdC1jb25kNiB0c3QtY29uZDcgXAorIAl0c3QtY29uZDggdHN0LWNvbmQ5IHRzdC1jb25kMTAgdHN0LWNvbmQxMSB0c3QtY29uZDEyIHRzdC1jb25kMTMgXAorIAl0c3QtY29uZDE0IHRzdC1jb25kMTUgdHN0LWNvbmQxNiB0c3QtY29uZDE3IHRzdC1jb25kMTggdHN0LWNvbmQxOSBcCitAQCAtMjU2LDE0ICsyNjAsMTQgQEAgdGVzdHMgPSB0c3QtdHlwZXNpemVzIFwKKyAJdHN0LWNhbmNlbDYgdHN0LWNhbmNlbDcgdHN0LWNhbmNlbDggdHN0LWNhbmNlbDkgdHN0LWNhbmNlbDEwIFwKKyAJdHN0LWNhbmNlbDExIHRzdC1jYW5jZWwxMiB0c3QtY2FuY2VsMTMgdHN0LWNhbmNlbDE0IHRzdC1jYW5jZWwxNSBcCisgCXRzdC1jYW5jZWwxNiB0c3QtY2FuY2VsMTcgdHN0LWNhbmNlbDE4IHRzdC1jYW5jZWwxOSB0c3QtY2FuY2VsMjAgXAorLQl0c3QtY2FuY2VsMjEgdHN0LWNhbmNlbDIyIHRzdC1jYW5jZWwyMyB0c3QtY2FuY2VsMjQgdHN0LWNhbmNlbDI1IFwKKysJdHN0LWNhbmNlbDIxIHRzdC1jYW5jZWwyMiB0c3QtY2FuY2VsMjMgdHN0LWNhbmNlbDI1IFwKKyAJdHN0LWNhbmNlbC1zZWxmIHRzdC1jYW5jZWwtc2VsZi1jYW5jZWxzdGF0ZSBcCisgCXRzdC1jYW5jZWwtc2VsZi1jYW5jZWx0eXBlIHRzdC1jYW5jZWwtc2VsZi10ZXN0Y2FuY2VsIFwKKyAJdHN0LWNsZWFudXAwIHRzdC1jbGVhbnVwMSB0c3QtY2xlYW51cDIgdHN0LWNsZWFudXAzIHRzdC1jbGVhbnVwNCBcCisgCXRzdC1mbG9jazEgdHN0LWZsb2NrMiBcCisgCXRzdC1zaWduYWwxIHRzdC1zaWduYWwyIHRzdC1zaWduYWwzIHRzdC1zaWduYWw0IHRzdC1zaWduYWw1IFwKKyAJdHN0LXNpZ25hbDYgdHN0LXNpZ25hbDcgXAorLQl0c3QtZXhlYzEgdHN0LWV4ZWMyIHRzdC1leGVjMyB0c3QtZXhlYzQgXAorKwl0c3QtZXhlYzIgdHN0LWV4ZWMzIHRzdC1leGVjNCBcCisgCXRzdC1leGl0MSB0c3QtZXhpdDIgdHN0LWV4aXQzIFwKKyAJdHN0LXN0ZGlvMSB0c3Qtc3RkaW8yIFwKKyAJdHN0LXN0YWNrMSB0c3Qtc3RhY2syIHRzdC1zdGFjazMgdHN0LXN0YWNrNCB0c3QtcHRocmVhZC1nZXRhdHRyIFwKK0BAIC0yNzEsMTMgKzI3NSwxMiBAQCB0ZXN0cyA9IHRzdC10eXBlc2l6ZXMgXAorIAl0c3QtdW5sb2FkIFwKKyAJdHN0LWRsc3ltMSBcCisgCXRzdC1zeXNjb25mIFwKKy0JdHN0LWxvY2FsZTEgdHN0LWxvY2FsZTIgXAorKwl0c3QtbG9jYWxlMiBcCisgCXRzdC11bWFzazEgXAorIAl0c3QtcG9wZW4xIFwKKyAJdHN0LWNsb2NrMSBcCisgCXRzdC1jb250ZXh0MSBcCisgCXRzdC1zY2hlZDEgXAorLQl0c3QtYmFja3RyYWNlMSBcCisgCXRzdC1hYnN0aW1lIFwKKyAJdHN0LXZmb3JrMSB0c3QtdmZvcmsyIHRzdC12Zm9yazF4IHRzdC12Zm9yazJ4IFwKKyAJdHN0LWdldHBpZDMgXAorQEAgLTI4OCw5ICsyOTEsMTYgQEAgeHRlc3RzID0gdHN0LXNldHVpZDEgdHN0LXNldHVpZDEtc3RhdGljIHRzdC1zZXR1aWQyIFwKKyAJdHN0LW11dGV4cHAxIHRzdC1tdXRleHBwNiB0c3QtbXV0ZXhwcDEwCisgdGVzdC1zcmNzID0gdHN0LW9kZHN0YWNrbGltaXQKKyAKKy0jIFRlc3QgZXhwZWN0ZWQgdG8gZmFpbCBvbiBtb3N0IHRhcmdldHMgKGV4Y2VwdCB4ODZfNjQpIGR1ZSB0byBidWcKKy0jIDE4NDM1IC0gcHRocmVhZF9vbmNlIGhhbmdzIHdoZW4gaW5pdCByb3V0aW5lIHRocm93cyBhbiBleGNlcHRpb24uCistdGVzdC14ZmFpbC10c3Qtb25jZTUgPSB5ZXMKKysjIFRoaXMgdGVzdCB1c2VzIHRoZSBwb3NpeF9zcGF3biBmdW5jdGlvbnMuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1NQQVdOKSArPSB0c3QtZXhlYzEKKysKKysjIFRoaXMgdGVzdCB1c2VzIHRoZSAnYmFja3RyYWNlJyBmdW5jdGlvbnMuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSkgKz0gdHN0LWJhY2t0cmFjZTEKKysKKysjIFRoaXMgdGVzdCBpcyB3cml0dGVuIGluIEMrKy4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSB0c3QtY2FuY2VsMjQKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHRzdC1sb2NhbGUxCisgCisgIyBGaWxlcyB3aGljaCBtdXN0IG5vdCBiZSBsaW5rZWQgd2l0aCBsaWJwdGhyZWFkLgorIHRlc3RzLW5vbGlicHRocmVhZCA9IHRzdC11bmxvYWQKK2RpZmYgLS1naXQgYS9ucHRsL3B0aHJlYWRfY3JlYXRlLmMgYi9ucHRsL3B0aHJlYWRfY3JlYXRlLmMKK2luZGV4IGQxMGY0ZWEuLjE0MjU3Y2UgMTAwNjQ0CistLS0gYS9ucHRsL3B0aHJlYWRfY3JlYXRlLmMKKysrKyBiL25wdGwvcHRocmVhZF9jcmVhdGUuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAjaW5jbHVkZSA8ZGVmYXVsdC1zY2hlZC5oPgorICNpbmNsdWRlIDxmdXRleC1pbnRlcm5hbC5oPgorIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKyAKKyAjaW5jbHVkZSA8c3RhcC1wcm9iZS5oPgorQEAgLTI2Miw4ICsyNjMsMTAgQEAgU1RBUlRfVEhSRUFEX0RFRk4KKyAgIFRIUkVBRF9TRVRNRU0gKHBkLCBjcHVjbG9ja19vZmZzZXQsIG5vdyk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICAvKiBJbml0aWFsaXplIHJlc29sdmVyIHN0YXRlIHBvaW50ZXIuICAqLworICAgX19yZXNwID0gJnBkLT5yZXM7CisrI2VuZGlmCisgCisgICAvKiBJbml0aWFsaXplIHBvaW50ZXJzIHRvIGxvY2FsZSBkYXRhLiAgKi8KKyAgIF9fY3R5cGVfaW5pdCAoKTsKK0BAIC0zNDYsOCArMzQ5LDEwIEBAIFNUQVJUX1RIUkVBRF9ERUZOCisgICAvKiBSdW4gdGhlIGRlc3RydWN0b3IgZm9yIHRoZSB0aHJlYWQtbG9jYWwgZGF0YS4gICovCisgICBfX25wdGxfZGVhbGxvY2F0ZV90c2QgKCk7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICAvKiBDbGVhbiB1cCBhbnkgc3RhdGUgbGliYyBzdG9yZWQgaW4gdGhyZWFkLWxvY2FsIHZhcmlhYmxlcy4gICovCisgICBfX2xpYmNfdGhyZWFkX2ZyZWVyZXMgKCk7CisrI2VuZGlmCisgCisgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHRocmVhZCB3ZSB0ZXJtaW5hdGUgdGhlIHByb2Nlc3Mgbm93LiAgV2UKKyAgICAgIGRvIG5vdCBub3RpZnkgdGhlIGRlYnVnZ2VyLCBpdCBtaWdodCBqdXN0IGlycml0YXRlIGl0IGlmIHRoZXJlCitkaWZmIC0tZ2l0IGEvbnNjZC9NYWtlZmlsZSBiL25zY2QvTWFrZWZpbGUKK2luZGV4IGVkZTk0MWQuLmY0ZjNmOGQgMTAwNjQ0CistLS0gYS9uc2NkL01ha2VmaWxlCisrKysgYi9uc2NkL01ha2VmaWxlCitAQCAtMTgsMTQgKzE4LDE3IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBuc2NkIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbnNjZAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGlmbmVxICgkKHVzZS1uc2NkKSxubykKKy1yb3V0aW5lcyA6PSBuc2NkX2dldHB3X3IgbnNjZF9nZXRncl9yIG5zY2RfZ2V0aHN0X3IgbnNjZF9nZXRhaSBcCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IFwKKysJICAgICBuc2NkX2dldHB3X3IgbnNjZF9nZXRncl9yIG5zY2RfZ2V0aHN0X3IgbnNjZF9nZXRhaSBcCisgCSAgICBuc2NkX2luaXRncm91cHMgbnNjZF9nZXRzZXJ2X3IgbnNjZF9uZXRncm91cAorLWF1eAk6PSBuc2NkX2hlbHBlcgorK2F1eC0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZF9oZWxwZXIKKyBlbmRpZgorIAorICMgVG8gZmluZCB4bWFsbG9jLmMKK0BAIC0zNywxNCArNDAsMTggQEAgbnNjZC1tb2R1bGVzIDo9IG5zY2QgY29ubmVjdGlvbnMgcHdkY2FjaGUgZ2V0cHduYW1fciBnZXRwd3VpZF9yIGdycGNhY2hlIFwKKyAJCWRiZ19sb2cgbnNjZF9jb25mIG5zY2Rfc3RhdCBjYWNoZSBtZW0gbnNjZF9zZXR1cF90aHJlYWQgXAorIAkJeG1hbGxvYyB4c3RyZHVwIGFpY2FjaGUgaW5pdGdyY2FjaGUgZ2FpIHJlc19oY29uZiBcCisgCQluZXRncm91cGNhY2hlCistCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX05JUykpCisrIyBJZiB3ZSBoYXZlbid0IGJ1aWxkIGxpYm5zbC5zbywgdGhlbiB3ZSdsbCBuZWVkIHRvIGluY2x1ZGUgb3VyCisrIyBvd24gY29weSBvZiBuaXNfaGFzaC4KKytuc2NkLW1vZHVsZXMgKz0gbmlzX2hhc2gKKytlbmRpZgorIGlmZXEgKCQoYnVpbGQtbnNjZCkkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllc3llcykKKyAKKy1vdGhlcnMgKz0gbnNjZAorLW90aGVycy1waWUgKz0gbnNjZAorLWluc3RhbGwtc2JpbiA6PSBuc2NkCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkCisrb3RoZXJzLXBpZS0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZAorK2luc3RhbGwtc2Jpbi0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZAorIAorLWV4dHJhLW9ianMgPSAkKG5zY2QtbW9kdWxlczo9Lm8pCisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gJChuc2NkLW1vZHVsZXM6PS5vKQorIAorIGVuZGlmCisgCitAQCAtMTAwLDcgKzEwNywxNSBAQCBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKWNwcGZsYWdzLWl0ZXJhdG9yLm1rLCQoY3BwLXNyY3MtbGVmdCkpCisgJChvYmpwZngpbnNjZDogJChuc2NkLW1vZHVsZXM6JT0kKG9ianBmeCklLm8pCisgCisgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKy0kKG9ianBmeCluc2NkOiAkKHNoYXJlZC10aHJlYWQtbGlicmFyeSkgJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuc28KKyskKG9ianBmeCluc2NkOiAkKHNoYXJlZC10aHJlYWQtbGlicmFyeSkKKytlbHNlCisrJChvYmpwZngpbnNjZDogJChzdGF0aWMtdGhyZWFkLWxpYnJhcnkpCisrZW5kaWYKKysKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19OSVMpKQorK2lmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCisrJChvYmpwZngpbnNjZDogJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuc28KKyBlbHNlCistJChvYmpwZngpbnNjZDogJChzdGF0aWMtdGhyZWFkLWxpYnJhcnkpICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLmEKKyskKG9ianBmeCluc2NkOiAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5hCisrZW5kaWYKKyBlbmRpZgorZGlmZiAtLWdpdCBhL25zY2QvbmlzX2hhc2guYyBiL25zY2QvbmlzX2hhc2guYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQyNDRjNDEKKy0tLSAvZGV2L251bGwKKysrKyBiL25zY2QvbmlzX2hhc2guYworQEAgLTAsMCArMSwzIEBACisrLyogSWYgT1BUSU9OX0VHTElCQ19OSVMgaXMgZGlzYWJsZWQsIG5zY2QgY2FuJ3QgZ2V0IHRoaXMgZnJvbSBsaWJuc2wuc287CisrICAgd2UgbmVlZCBvdXIgb3duIGNvcHkuICAqLworKyNpbmNsdWRlICIuLi9uaXMvbmlzX2hhc2guYyIKK2RpZmYgLS1naXQgYS9uc3MvTWFrZWZpbGUgYi9uc3MvTWFrZWZpbGUKK2luZGV4IDY1YWI3YjUuLjE5ZjBhZWYgMTAwNjQ0CistLS0gYS9uc3MvTWFrZWZpbGUKKysrKyBiL25zcy9NYWtlZmlsZQorQEAgLTE4LDI4ICsxOCwzNSBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBuYW1lIHNlcnZpY2Ugc3dpdGNoLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5zcworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCQk6PSBuc3MuaAorIAorLSMgVGhpcyBpcyB0aGUgdHJpdmlhbCBwYXJ0IHdoaWNoIGdvZXMgaW50byBsaWJjIGl0c2VsZi4KKy1yb3V0aW5lcwkJPSBuc3N3aXRjaCBnZXRuc3NlbnQgZ2V0bnNzZW50X3IgZGlnaXRzX2RvdHMgXAorLQkJCSAgJChhZGRzdWZmaXggLWxvb2t1cCwkKGRhdGFiYXNlcykpCistCisgIyBUaGVzZSBhcmUgdGhlIGRhdGFiYXNlcyB0aGF0IGdvIHRocm91Z2ggbnNzIGRpc3BhdGNoLgorICMgQ2F1dGlvbjogaWYgeW91IGFkZCBhIGRhdGFiYXNlIGhlcmUsIHlvdSBtdXN0IGFkZCBpdHMgcmVhbCBuYW1lCisgIyBpbiBkYXRhYmFzZXMuZGVmLCB0b28uCistZGF0YWJhc2VzCQk9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBncnAgcHdkIGV0aGVycyBcCistCQkJICBzcHdkIG5ldGdycCBhbGlhcyBzZ3JwCisrZGF0YWJhc2VzLXkJCT0gZ3JwIHB3ZCBzcHdkIHNncnAKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJCQkrPSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZXRoZXJzIFwKKysJCQkgICBuZXRncnAKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMpICs9IGFsaWFzCisrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGRpZ2l0c19kb3RzCisgCisgaWZuZXEgKCwkKGZpbHRlciBzdW5ycGMsJChzdWJkaXJzKSkpCistZGF0YWJhc2VzCQkrPSBrZXkgcnBjCisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19JTkVUKQkrPSBrZXkgcnBjCisgaGF2ZS1zdW5ycGMJCTo9IDEKKyBlbHNlCisgaGF2ZS1zdW5ycGMJCTo9IDAKKyBlbmRpZgorKyMgVGhpcyBpcyB0aGUgdHJpdmlhbCBwYXJ0IHdoaWNoIGdvZXMgaW50byBsaWJjIGl0c2VsZi4KKytyb3V0aW5lcy15CQkrPSBuc3N3aXRjaCBnZXRuc3NlbnQgZ2V0bnNzZW50X3IgXAorKwkJCSAgJChhZGRzdWZmaXggLWxvb2t1cCwkKGRhdGFiYXNlcy15KSkKKysKKyBDUFBGTEFHUy1nZXRlbnQuYwk9IC1ESEFWRV9TVU5SUEM9JChoYXZlLXN1bnJwYykKKyAKKyBvdGhlcnMgICAgICAgICAgICAgICAgICA6PSBnZXRlbnQgbWFrZWRiCitAQCAtNDcsOCArNTQsOSBAQCBpbnN0YWxsLWJpbiAgICAgICAgICAgICA6PSBnZXRlbnQgbWFrZWRiCisgbWFrZWRiLW1vZHVsZXMgPSB4bWFsbG9jIGhhc2gtc3RyaW5nCisgZXh0cmEtb2JqcwkJKz0gJChtYWtlZGItbW9kdWxlczo9Lm8pCisgCistdGVzdHMJCQk9IHRlc3QtbmV0ZGIgdHN0LW5zcy10ZXN0MSB0ZXN0LWRpZ2l0cy1kb3RzIHRzdC1uc3MtZ2V0cHdlbnQKKy14dGVzdHMJCQk9IGJ1Zy1lcmFuZ2UKKyt0ZXN0cwkJCT0gdHN0LW5zcy10ZXN0MSB0c3QtbnNzLWdldHB3ZW50CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpCSs9IHRlc3QtbmV0ZGIgdGVzdC1kaWdpdHMtZG90cworK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkJKz0gYnVnLWVyYW5nZQorIAorICMgU3BlY2lmeSBydWxlcyBmb3IgdGhlIG5zc18qIG1vZHVsZXMuICBXZSBoYXZlIHNvbWUgc2VydmljZXMuCisgc2VydmljZXMJCTo9IGZpbGVzIGRiCitAQCAtNjMsNyArNzEsNyBAQCBzdWJkaXItZGlycyA9ICQoc2VydmljZXM6JT1uc3NfJSkKKyB2cGF0aCAlLmMgJChzdWJkaXItZGlycykgLi4vbG9jYWxlL3Byb2dyYW1zIC4uL2ludGwKKyAKKyAKKy1saWJuc3NfZmlsZXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggZmlsZXMtLCQoZGF0YWJhc2VzKSkgXAorK2xpYm5zc19maWxlcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBmaWxlcy0sJChkYXRhYmFzZXMteSkpIFwKKyAJCQkgICBmaWxlcy1pbml0Z3JvdXBzIGZpbGVzLWhhdmVfb19jbG9leGVjIGZpbGVzLWluaXQKKyAKKyBsaWJuc3NfZGItZGJzCQk6PSAkKGFkZHByZWZpeCBkYi0sXAorQEAgLTg2LDYgKzk0LDQ1IEBAIHRlc3RzLXN0YXRpYwkJPSB0c3QtbnNzLXN0YXRpYworIHRlc3RzCQkJKz0gJCh0ZXN0cy1zdGF0aWMpCisgZW5kaWYKKyAKKytpZm5lcSAoJChPUFRJT05fRUdMSUJDX05TU1dJVENIKSx5KQorKworK2lmbmRlZiBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRworKyQoZXJyb3IgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcgdmFyaWFibGUgbGVmdCB1bnNldCkKKytlbmRpZgorKworK2lmbmRlZiBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUworKyQoZXJyb3IgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMgdmFyaWFibGUgbGVmdCB1bnNldCkKKytlbmRpZgorKworK2lmZXEgKCwkKHdpbGRjYXJkICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpKSkKKyskKHdhcm5pbmcgT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCwgYnV0IGZpeGVkIGNvbmZpZyBmaWxlKQorKyQoZXJyb3IgZG9lcyBub3QgZXhpc3Q6ICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpKQorK2VuZGlmCisrCisraWZlcSAoLCQod2lsZGNhcmQgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykpKQorKyQod2FybmluZyBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkLCBidXQgZml4ZWQgZnVuY3Rpb25zIGZpbGUpCisrJChlcnJvciBkb2VzIG5vdCBleGlzdDogJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykpCisrZW5kaWYKKysKKytiZWZvcmUtY29tcGlsZSA6PSAkKG9ianBmeClmaXhlZC1uc3N3aXRjaC5oCisrZ2VuZXJhdGVkIDo9IGZpeGVkLW5zc3dpdGNoLmgKKyskKG9ianBmeClmaXhlZC1uc3N3aXRjaC5oICQob2JqZnB4KWZpeGVkLW5zc3dpdGNoLWxpYnM6CVwKKysgICAgJChvYmpwZngpZ2VuLWZpeGVkLW5zc3dpdGNoCQkJCVwKKysgICAgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykKKysJJDwgJChvYmpwZngpZml4ZWQtbnNzd2l0Y2guaAkJCVwKKysJICAgJChvYmpwZngpZml4ZWQtbnNzd2l0Y2gtbGlicwkJCVwKKysJICAgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykKKysKKyskKG9ianBmeClnZW4tZml4ZWQtbnNzd2l0Y2g6IGdlbi1maXhlZC1uc3N3aXRjaC5jCVwKKysgICAgJChjb21tb24tb2JqcGZ4KW9wdGlvbi1ncm91cHMuY29uZmlnCQlcCisrICAgICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpCisrCSQobmF0aXZlLWNvbXBpbGUpCisrZ2VuLWZpeGVkLW5zc3dpdGNoLUNGTEFHUyA9CQkJCQkJXAorKwktZzMgLU8gLVdhbGwJCQkJCQkJXAorKwktSSAkKG9ianBmeCkJCQkJCQkJXAorKwktREZJWEVEX0ZVTkNUSU9OUz0nIiQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpIicKKytlbmRpZgorKworIGluY2x1ZGUgLi4vUnVsZXMKKyAKKyBpZmVxICh5ZXMsJChoYXZlLXNlbGludXgpKQorZGlmZiAtLWdpdCBhL25zcy9maXhlZC1uc3N3aXRjaC5jb25mIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MWJiNjc1CistLS0gL2Rldi9udWxsCisrKysgYi9uc3MvZml4ZWQtbnNzd2l0Y2guY29uZgorQEAgLTAsMCArMSwyMiBAQAorKyMgL2V0Yy9uc3N3aXRjaC5jb25mCisrIworKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIGZvciBmaXhlZCBuYW1lIHNlcnZpY2UuCisrIyBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaW4gb3B0aW9uLWdyb3Vwcy5kZWYKKysjIGZvciBkZXRhaWxzLgorKyMKKysKKythbGlhc2VzOiAgICAgICAgZmlsZXMKKysKKytwYXNzd2Q6ICAgICAgICAgZmlsZXMKKytncm91cDogICAgICAgICAgZmlsZXMKKytzaGFkb3c6ICAgICAgICAgZmlsZXMKKysKKytob3N0czogICAgICAgICAgZmlsZXMgZG5zCisrbmV0d29ya3M6ICAgICAgIGZpbGVzIGRucworKworK3Byb3RvY29sczogICAgICBmaWxlcworK3NlcnZpY2VzOiAgICAgICBmaWxlcworK2V0aGVyczogICAgICAgICBmaWxlcworK3JwYzogICAgICAgICAgICBmaWxlcworKworK25ldGdyb3VwOiAgICAgICBmaWxlcworZGlmZiAtLWdpdCBhL25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMgYi9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmYzZmE4MworLS0tIC9kZXYvbnVsbAorKysrIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucworQEAgLTAsMCArMSwxMjEgQEAKKysvKiBMaXN0IG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGZvciBmaXhlZCBOU1MgaW4gR05VIEMgTGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCAoc2VlIG9wdGlvbi1ncm91cHMuZGVmKSwKKysgICBFR0xJQkMgZG9lcyBub3QgdXNlIHRoZSAnZGxvcGVuJyBhbmQgJ2Rsc3ltJyBmdW5jdGlvbnMgdG8gbG9vayBmb3IKKysgICBkYXRhYmFzZSBxdWVyeSBmdW5jdGlvbnMgaW4gdGhlIGluZGl2aWR1YWwgbmFtZSBzZXJ2aWNlIGxpYnJhcmllcy4KKysgICBJbnN0ZWFkLCBpdCB1c2VzIGEgc2V0IG9mIGZ1bmN0aW9ucyBjaG9zZW4gYXQgY29tcGlsZSB0aW1lLCBhcworKyAgIGRpcmVjdGVkIGJ5IHRoZSBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUyBmaWxlLiAgVGhpcworKyAgIGZpbGUgaXMgYSBzYW1wbGUgb2Ygd2hhdCB5b3UgbWlnaHQgdXNlIHRoZXJlLgorKworKyAgIFRoaXMgZmlsZSBpcyBDIHNvdXJjZSBjb2RlOyBpdCBzaG91bGQgb25seSBjb250YWluIGludm9jYXRpb25zIG9mCisrICAgdGhlIGZvbGxvd2luZyBtYWNyb3M6CisrCisrICAgLSBERUZJTkVfRU5UIChEQVRBQkFTRSwgU0VSVklDRSwgWCkKKysKKysgICAgIERlY2xhcmUgdGhlICdzZXRYZW50JywgJ2dldFhlbnRfcicsIGFuZCAnZW5kWGVudCcgZnVuY3Rpb25zIHRoYXQKKysgICAgIHF1ZXJ5IERBVEFCQVNFIHVzaW5nIHRoZSBzZXJ2aWNlIGxpYnJhcnkgJ2xpYm5zc19TRVJWSUNFLnNvLjInLgorKyAgICAgREFUQUJBU0Ugc2hvdWxkIGJlIHRoZSBmdWxsIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGFzIGl0IGFwcGVhcnMgaW4KKysgICAgICduc3N3aXRjaC5jb25mJywgbGlrZSAncGFzc3dkJyBvciAnYWxpYXNlcycuCisrCisrICAgICAoVGhlIG5vbi1yZWVudHJhbnQgJ2dldFhlbnQnIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMKKysgICAgIG9mIHRoZSByZWVudHJhbnQgJ2dldFhlbnRfcicgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisrICAgICByZWZlciB0byB0aGVtIGV4cGxpY2l0bHkgaGVyZS4pCisrCisrICAgLSBERUZJTkVfR0VUQlkgKERBVEFCQVNFLCBTRVJWSUNFLCBYLCBLRVkpCisrCisrICAgICBEZWNsYXJlIHRoZSAnZ2V0WGJ5S0VZX3InIGZ1bmN0aW9ucyB0aGF0IHF1ZXJ5IERBVEFCQVNFIHVzaW5nCisrICAgICBTRVJWSUNFLiAgREFUQUJBU0UgYW5kIFNFUlZJQ0UgYXJlIGFzIGRlc2NyaWJlZCBhYm92ZS4KKysKKysgICAgIChUaGUgbm9uLXJlZW50cmFudCAnZ2V0WGJ5S0VZJyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zCisrICAgICBvZiB0aGUgcmVlbnRyYW50ICdnZXRYYnlLRVlfcicgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisrICAgICByZWZlciB0byB0aGVtIGV4cGxpY2l0bHkgaGVyZS4pCisrCisrICAgICBVc2UgdGhlIHNwZWNpYWwga2V5ICduYW1lMycgZm9yIHRoZSBzZXJ2aWNlIGxpYnJhcnkgZnVuY3Rpb24gdGhhdAorKyAgICAgaW1wbGVtZW50cyB0aGUgJ2dldGFkZHJpbmZvJyBmdW5jdGlvbi4KKysKKysgICAtIERFRklORV9HRVQgKERBVEFCQVNFLCBTRVJWSUNFLCBRVUVSWSkKKysKKysgICAgIERlY2xhcmUgdGhlICdnZXRRVUVSWV9yJyBmdW5jdGlvbnMgdGhhdCBxdWVyeSBEQVRBQkFTRSB1c2luZworKyAgICAgU0VSVklDRS4gIFRoaXMgaXMgdXNlZCBmb3IgZnVuY3Rpb25zIGxpa2UgJ2dldHB3bmFtJy4KKysKKysgICAgIChUaGUgbm9uLXJlZW50cmFudCAnZ2V0UVVFUlknIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMKKysgICAgIG9mIHRoZSByZWVudHJhbnQgJ2dldFFVRVJZX3InIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworKyAgICAgcmVmZXIgdG8gdGhlbSBleHBsaWNpdGx5IGhlcmUuKQorKworKyAgIFRoaXMgc2FtcGxlIGZpbGUgb25seSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb25zdWx0IHRoZSBmaWxlcyBpbgorKyAgICcvZXRjJywgYW5kIHRoZSBEb21haW4gTmFtZSBTeXN0ZW0gKEROUykuICAqLworKworKy8qIGFsaWFzZXMgKi8KKytERUZJTkVfRU5UIChhbGlhc2VzLCBmaWxlcywgYWxpYXMpCisrREVGSU5FX0dFVEJZIChhbGlhc2VzLCBmaWxlcywgYWxpYXMsIG5hbWUpCisrCisrLyogZXRoZXJzICovCisrREVGSU5FX0VOVCAoZXRoZXJzLCBmaWxlcywgZXRoZXIpCisrCisrLyogZ3JvdXAgKi8KKytERUZJTkVfRU5UIChncm91cCwgZmlsZXMsIGdyKQorK0RFRklORV9HRVQgKGdyb3VwLCBmaWxlcywgZ3JnaWQpCisrREVGSU5FX0dFVCAoZ3JvdXAsIGZpbGVzLCBncm5hbSkKKysKKysvKiBob3N0cyAqLworK0RFRklORV9FTlQgKGhvc3RzLCBmaWxlcywgaG9zdCkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBmaWxlcywgaG9zdCwgYWRkcikKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBmaWxlcywgaG9zdCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBmaWxlcywgaG9zdCwgbmFtZTIpCisrREVGSU5FX0dFVCAoaG9zdHMsIGZpbGVzLCBob3N0dG9uKQorK0RFRklORV9HRVQgKGhvc3RzLCBmaWxlcywgbnRvaG9zdCkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIGFkZHIpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBuYW1lKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgbmFtZTIpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBuYW1lMykKKysKKysvKiBuZXRncm91cCAqLworK0RFRklORV9FTlQgKG5ldGdyb3VwLCBmaWxlcywgbmV0Z3IpCisrCisrLyogbmV0d29ya3MgKi8KKytERUZJTkVfRU5UIChuZXR3b3JrcywgZmlsZXMsIG5ldCkKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBmaWxlcywgbmV0LCBuYW1lKQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGZpbGVzLCBuZXQsIGFkZHIpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZG5zLCBuZXQsIG5hbWUpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZG5zLCBuZXQsIGFkZHIpCisrCisrLyogcHJvdG9jb2xzICovCisrREVGSU5FX0VOVCAocHJvdG9jb2xzLCBmaWxlcywgcHJvdG8pCisrREVGSU5FX0dFVEJZIChwcm90b2NvbHMsIGZpbGVzLCBwcm90bywgbmFtZSkKKytERUZJTkVfR0VUQlkgKHByb3RvY29scywgZmlsZXMsIHByb3RvLCBudW1iZXIpCisrCisrLyogcGFzc3dkICovCisrREVGSU5FX0VOVCAocGFzc3dkLCBmaWxlcywgcHcpCisrREVGSU5FX0dFVCAocGFzc3dkLCBmaWxlcywgcHduYW0pCisrREVGSU5FX0dFVCAocGFzc3dkLCBmaWxlcywgcHd1aWQpCisrCisrLyogcnBjICovCisrREVGSU5FX0VOVCAocnBjLCBmaWxlcywgcnBjKQorK0RFRklORV9HRVRCWSAocnBjLCBmaWxlcywgcnBjLCBuYW1lKQorK0RFRklORV9HRVRCWSAocnBjLCBmaWxlcywgcnBjLCBudW1iZXIpCisrCisrLyogc2VydmljZXMgKi8KKytERUZJTkVfRU5UIChzZXJ2aWNlcywgZmlsZXMsIHNlcnYpCisrREVGSU5FX0dFVEJZIChzZXJ2aWNlcywgZmlsZXMsIHNlcnYsIG5hbWUpCisrREVGSU5FX0dFVEJZIChzZXJ2aWNlcywgZmlsZXMsIHNlcnYsIHBvcnQpCisrCisrLyogc2hhZG93ICovCisrREVGSU5FX0VOVCAoc2hhZG93LCBmaWxlcywgc3ApCisrREVGSU5FX0dFVCAoc2hhZG93LCBmaWxlcywgc3BuYW0pCitkaWZmIC0tZ2l0IGEvbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jIGIvbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNmUxYzk4YworLS0tIC9kZXYvbnVsbAorKysrIGIvbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jCitAQCAtMCwwICsxLDgwMyBAQAorKy8qIGdlbi1maXhlZC1uc3N3aXRjaC5jIC0tLSBnZW5lcmF0ZSBmaXhlZCBuYW1lIHNlcnZpY2UgZGF0YSBzdHJ1Y3R1cmVzCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTksIDIwMDEtMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZ251L2xpYi1uYW1lcy5oIgorKyNpbmNsdWRlICJuc3MuaCIKKysKKysvKiBQcm92aWRlIGEgZmFsbGJhY2sgZGVmaW5pdGlvbiB0byBhbGxvdyB0aGlzIGZpbGUgdG8gYmUgY29tcGlsZWQgb3V0c2lkZQorKyAgIGxpYmMuICAqLworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKwwKKysvKiBTaW1wbGUgdXRpbGl0aWVzLiAgKi8KKysKKyt2b2lkIF9fYXR0cmlidXRlX18gKChub3JldHVybikpCisrZXJyb3IgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisreworKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1lc3NhZ2UpOworKyAgZXhpdCAoMSk7CisrfQorKworKworK3ZvaWQgKgorK2NoZWNrX2FsbG9jICh2b2lkICpwKQorK3sKKysgIGlmIChwKQorKyAgICByZXR1cm4gcDsKKysgIGVsc2UKKysgICAgZXJyb3IgKCJvdXQgb2YgbWVtb3J5Iik7CisrfQorKworK3ZvaWQgKgorK3htYWxsb2MgKHNpemVfdCBzaXplKQorK3sKKysgIHJldHVybiBjaGVja19hbGxvYyAobWFsbG9jIChzaXplKSk7CisrfQorKworKworKy8qIEZvcm1hdCBBUkdTIGFjY29yZGluZyB0byBGT1JNQVQsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhCisrICAgbWFsbG9jJ2VkIHN0cmluZy4gICovCisrY2hhciAqCisrc2FwcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIHNpemVfdCBsZW47CisrICBjaGFyICpidWY7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIGxlbiA9IHZzbnByaW50ZiAoTlVMTCwgMCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrCisrICBidWYgPSB4bWFsbG9jIChsZW4gKyAxKTsKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgYXNzZXJ0IChsZW4gPT0gdnNucHJpbnRmIChidWYsIGxlbiArIDEsIGZvcm1hdCwgYXJncykpOworKyAgdmFfZW5kIChhcmdzKTsKKysKKysgIHJldHVybiBidWY7CisrfQorKworKworKwwKKysvKiBEYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW4gbWVtb3J5LiAgKi8KKysKKysvKiBUaGVzZSBhcmUgY29waWVkIGZyb20gbnNzd2l0Y2guaC4KKysKKysgICBXZSBjb3VsZCBzaW1wbHkgI2luY2x1ZGUgdGhhdCBmaWxlLCBidXQgdGhpcyBwcm9ncmFtIHJ1bnMgb24gdGhlCisrICAgYnVpbGQgbWFjaGluZSBhbmQgbGlua3MgYWdhaW5zdCB0aGUgYnVpbGQgbWFjaGluZSdzIGxpYnJhcmllcywKKysgICB3aGVyZWFzIHRoYXQgaGVhZGVyIGlzIG1lYW50IGZvciB1c2UgYnkgdGFyZ2V0IGNvZGU7IGl0IHVzZXMKKysgICAnbGliY19oaWRkZW5fcHJvdG8nLCAnaW50ZXJuYWxfZnVuY3Rpb24nLCBhbmQgcmVsYXRlZCBoYWlyLiAgU2luY2UKKysgICB3ZSd2ZSBjb3BpZWQgdGhlIHBhcnNpbmcgY29kZSwgd2UgbWlnaHQgYXMgd2VsbCBjb3B5IHRoZSBkYXRhCisrICAgc3RydWN0dXJlIGRlZmluaXRpb25zIGFzIHdlbGwuICAqLworKworKy8qIEFjdGlvbnMgcGVyZm9ybWVkIGFmdGVyIGxvb2t1cCBmaW5pc2hlZC4gICovCisrdHlwZWRlZiBlbnVtCisreworKyAgTlNTX0FDVElPTl9DT05USU5VRSwKKysgIE5TU19BQ1RJT05fUkVUVVJOCisrfSBsb29rdXBfYWN0aW9uczsKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBzZXJ2aWNlX2xpYnJhcnkKKyt7CisrICAvKiBOYW1lIG9mIHNlcnZpY2UgKGBmaWxlcycsIGBkbnMnLCBgbmlzJywgLi4uKS4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworKyAgLyogUG9pbnRlciB0byB0aGUgbG9hZGVkIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKysgIHZvaWQgKmxpYl9oYW5kbGU7CisrICAvKiBBbmQgdGhlIGxpbmsgdG8gdGhlIG5leHQgZW50cnkuICAqLworKyAgc3RydWN0IHNlcnZpY2VfbGlicmFyeSAqbmV4dDsKKyt9IHNlcnZpY2VfbGlicmFyeTsKKysKKysKKysvKiBGb3IgbWFwcGluZyBhIGZ1bmN0aW9uIG5hbWUgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiAgSXQgaXMga25vd24gaW4KKysgICBuc3N3aXRjaC5jOm5zc19sb29rdXBfZnVuY3Rpb24gdGhhdCBhIHN0cmluZyBwb2ludGVyIGZvciB0aGUgbG9va3VwIGtleQorKyAgIGlzIHRoZSBmaXJzdCBtZW1iZXIuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgY29uc3QgY2hhciAqZmN0X25hbWU7CisrICB2b2lkICpmY3RfcHRyOworK30ga25vd25fZnVuY3Rpb247CisrCisrCisrdHlwZWRlZiBzdHJ1Y3Qgc2VydmljZV91c2VyCisreworKyAgLyogQW5kIHRoZSBsaW5rIHRvIHRoZSBuZXh0IGVudHJ5LiAgKi8KKysgIHN0cnVjdCBzZXJ2aWNlX3VzZXIgKm5leHQ7CisrICAvKiBBY3Rpb24gYWNjb3JkaW5nIHRvIHJlc3VsdC4gICovCisrICBsb29rdXBfYWN0aW9ucyBhY3Rpb25zWzVdOworKyAgLyogTGluayB0byB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IG9iamVjdC4gICovCisrICBzZXJ2aWNlX2xpYnJhcnkgKmxpYnJhcnk7CisrICAvKiBDb2xsZWN0aW9uIG9mIGtub3duIGZ1bmN0aW9ucy4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBlbmFibGVkLCB0aGlzIGlzIHRoZSByb290IG9mIGEKKysgICAgICd0c2VhcmNoJy1zdHlsZSB0cmVlLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGRpc2FibGVkLCB0aGlzIGlzIGFuIGFycmF5IG9mCisrICAgICBwb2ludGVycyB0byBrbm93bl9mdW5jdGlvbiBzdHJ1Y3R1cmVzLCBOVUxMLXRlcm1pbmF0ZWQuICAqLworKyAgdW5pb24KKysgIHsKKysgICAgdm9pZCAqdHJlZTsKKysgICAgY29uc3Qga25vd25fZnVuY3Rpb24gKiphcnJheTsKKysgIH0ga25vd247CisrICAvKiBOYW1lIG9mIHRoZSBzZXJ2aWNlIChgZmlsZXMnLCBgZG5zJywgYG5pcycsIC4uLikuICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKyt9IHNlcnZpY2VfdXNlcjsKKysKKysvKiBUbyBhY2Nlc3MgdGhlIGFjdGlvbiBiYXNlZCBvbiB0aGUgc3RhdHVzIHZhbHVlIHVzZSB0aGlzIG1hY3JvLiAgKi8KKysjZGVmaW5lIG5zc19uZXh0X2FjdGlvbihuaSwgc3RhdHVzKSAoKG5pKS0+YWN0aW9uc1syICsgc3RhdHVzXSkKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBuYW1lX2RhdGFiYXNlX2VudHJ5CisreworKyAgLyogQW5kIHRoZSBsaW5rIHRvIHRoZSBuZXh0IGVudHJ5LiAgKi8KKysgIHN0cnVjdCBuYW1lX2RhdGFiYXNlX2VudHJ5ICpuZXh0OworKyAgLyogTGlzdCBvZiBzZXJ2aWNlIHRvIGJlIHVzZWQuICAqLworKyAgc2VydmljZV91c2VyICpzZXJ2aWNlOworKyAgLyogTmFtZSBvZiB0aGUgZGF0YWJhc2UuICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKyt9IG5hbWVfZGF0YWJhc2VfZW50cnk7CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgbmFtZV9kYXRhYmFzZQorK3sKKysgIC8qIExpc3Qgb2YgYWxsIGtub3duIGRhdGFiYXNlcy4gICovCisrICBuYW1lX2RhdGFiYXNlX2VudHJ5ICplbnRyeTsKKysgIC8qIExpc3Qgb2YgbGlicmFyaWVzIHdpdGggc2VydmljZSBpbXBsZW1lbnRhdGlvbi4gICovCisrICBzZXJ2aWNlX2xpYnJhcnkgKmxpYnJhcnk7CisrfSBuYW1lX2RhdGFiYXNlOworKworKworKwwKKysvKiBHYXRoZXJpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBGSVhFRF9GVU5DVElPTlMgZmlsZS4gICovCisrCisrLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGdlbmVyYXRlIHRoaXMgbGlzdCBhdXRvbWF0aWNhbGx5IGJ5CisrICAgbG9va2luZyBhdCB0aGUgc2VydmljZXMgYW5kIGRhdGFiYXNlcyB1c2VkIGluIHRoZSBuc3N3aXRjaC5jb25mCisrICAgZmlsZSwgYW5kIGhhdmluZyBhIGhhcmQtY29kZWQgc2V0IG9mIHF1ZXJpZXMgc3VwcG9ydGVkIG9uIGVhY2gKKysgICBkYXRhYmFzZS4gICovCisrCisrLyogV2UgI2luY2x1ZGUgdGhlIEZJWEVEX0ZVTkNUSU9OUyBmaWxlIHNldmVyYWwgdGltZXMgdG8gYnVpbGQgYW4KKysgICBhcnJheSBvZiBmdW5jdGlvbiBzdHJ1Y3R1cmVzIGhvbGRpbmcgaXRzIGRhdGEuICAqLworK2VudW0gZnVuY3Rpb25fa2luZCB7CisrICBma19lbmQgPSAwLCAgICAgICAgICAgICAgICAgICAvKiBMYXN0IGVudHJ5LiAgKi8KKysgIGZrX3NldGVudCwgICAgICAgICAgICAgICAgICAgIC8qIExpa2Ugc2V0cHdlbnQuICAqLworKyAgZmtfZ2V0ZW50LCAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBnZXRwd2VudC4gICovCisrICBma19lbmRlbnQsICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGVuZHB3ZW50LiAgKi8KKysgIGZrX2dldGJ5LCAgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZ2V0aG9zdGJ5bmFtZS4gICovCisrICBma19nZXQgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGdldHB3bmFtLiAgKi8KKyt9OworKworKworK3N0cnVjdCBmdW5jdGlvbiB7CisrICAvKiBXaGF0IGtpbmQgb2YgZnVuY3Rpb24gdGhpcyBpcy4gICovCisrICBlbnVtIGZ1bmN0aW9uX2tpbmQga2luZDsKKysKKysgIC8qIFRoZSBkYXRhYmFzZSBhbmQgc2VydmljZSBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgaGFyZHdpcmVkIGluLiAgKi8KKysgIGNoYXIgKmRhdGFiYXNlLCAqc2VydmljZTsKKysKKysgIC8qIFRoZSBraW5kIG9mIGVudHJ5IGJlaW5nIHF1ZXJpZWQsIGZvciAnZmtfc2V0ZW50JywgJ2ZrX2dldGVudCcsCisrICAgICAnZmtfZW5kZW50JywgYW5kICdma19nZXRieScgZnVuY3Rpb25zLiAgKi8KKysgIGNoYXIgKmVudHJ5OworKworKyAgLyogVGhlIGtleSwgZm9yICdma19nZXRieScgZW50cmllcy4gICovCisrICBjaGFyICprZXk7CisrCisrICAvKiBUaGUgdmFsdWUgYW5kIGtleSwgZm9yICdma19nZXQnIGVudHJpZXMuICAqLworKyAgY2hhciAqdmFsdWVfYW5kX2tleTsKKyt9OworKworKworK2NvbnN0IHN0cnVjdCBmdW5jdGlvbiBmdW5jdGlvbnNbXSA9CisrICB7CisrCisrI2RlZmluZSBERUZJTkVfRU5UKGRhdGFiYXNlLCBzZXJ2aWNlLCBlbnRyeSkgICAgXAorKyAgICB7IGZrX3NldGVudCwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5IH0sIFwKKysgICAgeyBma19nZXRlbnQsICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSB9LCBcCisrICAgIHsgZmtfZW5kZW50LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnkgfSwKKysjZGVmaW5lIERFRklORV9HRVRCWShkYXRhYmFzZSwgc2VydmljZSwgZW50cnksIGtleSkgICBcCisrICAgIHsgZmtfZ2V0YnksICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSwgI2tleSB9LAorKyNkZWZpbmUgREVGSU5FX0dFVChkYXRhYmFzZSwgc2VydmljZSwgdmFsdWVfYW5kX2tleSkgICAgIFwKKysgICAgeyBma19nZXQsICNkYXRhYmFzZSwgI3NlcnZpY2UsIE5VTEwsIE5VTEwsICN2YWx1ZV9hbmRfa2V5IH0sCisrCisrI2luY2x1ZGUgRklYRURfRlVOQ1RJT05TCisrCisrI3VuZGVmIERFRklORV9FTlQKKysjdW5kZWYgREVGSU5FX0dFVEJZCisrI3VuZGVmIERFRklORV9HRVQKKysKKysgICAgeyBma19lbmQgfQorKyAgfTsKKysKKysMCisrLyogUGFyc2luZyB0aGUgY29uZmlnIGZpbGUuICBGdW5jdGlvbnMgY29waWVkIGZyb20gbnNzd2l0Y2guYy4gICovCisrCisrI2RlZmluZSBfX3N0cmNocm51bCBzdHJjaHJudWwKKysjZGVmaW5lIF9fZ2V0bGluZSBnZXRsaW5lCisrI2RlZmluZSBfX3N0cm5jYXNlY21wIHN0cm5jYXNlY21wCisrCisrLyogUHJvdG90eXBlcyBmb3IgdGhlIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIG5hbWVfZGF0YWJhc2UgKm5zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKm5zc19nZXRsaW5lIChjaGFyICpsaW5lKSBpbnRlcm5hbF9mdW5jdGlvbjsKKytzdGF0aWMgc2VydmljZV91c2VyICpuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrc3RhdGljIG5hbWVfZGF0YWJhc2UgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKQorK3sKKysgIEZJTEUgKmZwOworKyAgbmFtZV9kYXRhYmFzZSAqcmVzdWx0OworKyAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbGFzdDsKKysgIGNoYXIgKmxpbmU7CisrICBzaXplX3QgbGVuOworKworKyAgLyogT3BlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAgKi8KKysgIGZwID0gZm9wZW4gKGZuYW1lLCAicmMiKTsKKysgIGlmIChmcCA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8vIC8qIE5vIHRocmVhZHMgdXNlIHRoaXMgc3RyZWFtLiAgKi8KKysgIC8vIF9fZnNldGxvY2tpbmcgKGZwLCBGU0VUTE9DS0lOR19CWUNBTExFUik7CisrCisrICByZXN1bHQgPSAobmFtZV9kYXRhYmFzZSAqKSB4bWFsbG9jIChzaXplb2YgKG5hbWVfZGF0YWJhc2UpKTsKKysKKysgIHJlc3VsdC0+ZW50cnkgPSBOVUxMOworKyAgcmVzdWx0LT5saWJyYXJ5ID0gTlVMTDsKKysgIGxhc3QgPSBOVUxMOworKyAgbGluZSA9IE5VTEw7CisrICBsZW4gPSAwOworKyAgZG8KKysgICAgeworKyAgICAgIG5hbWVfZGF0YWJhc2VfZW50cnkgKnRoaXM7CisrICAgICAgc3NpemVfdCBuOworKworKyAgICAgIG4gPSBfX2dldGxpbmUgKCZsaW5lLCAmbGVuLCBmcCk7CisrICAgICAgaWYgKG4gPCAwKQorKwlicmVhazsKKysgICAgICBpZiAobGluZVtuIC0gMV0gPT0gJ1xuJykKKysJbGluZVtuIC0gMV0gPSAnXDAnOworKworKyAgICAgIC8qIEJlY2F1c2UgdGhlIGZpbGUgZm9ybWF0IGRvZXMgbm90IGtub3cgYW55IGZvcm0gb2YgcXVvdGluZyB3ZQorKwkgY2FuIHNlYXJjaCBmb3J3YXJkIGZvciB0aGUgbmV4dCAnIycgY2hhcmFjdGVyIGFuZCBpZiBmb3VuZAorKwkgbWFrZSBpdCB0ZXJtaW5hdGluZyB0aGUgbGluZS4gICovCisrICAgICAgKl9fc3RyY2hybnVsIChsaW5lLCAnIycpID0gJ1wwJzsKKysKKysgICAgICAvKiBJZiB0aGUgbGluZSBpcyBibGFuayBpdCBpcyBpZ25vcmVkLiAgKi8KKysgICAgICBpZiAobGluZVswXSA9PSAnXDAnKQorKwljb250aW51ZTsKKysKKysgICAgICAvKiBFYWNoIGxpbmUgY29tcGxldGVseSBzcGVjaWZpZXMgdGhlIGFjdGlvbnMgZm9yIGEgZGF0YWJhc2UuICAqLworKyAgICAgIHRoaXMgPSBuc3NfZ2V0bGluZSAobGluZSk7CisrICAgICAgaWYgKHRoaXMgIT0gTlVMTCkKKysJeworKwkgIGlmIChsYXN0ICE9IE5VTEwpCisrCSAgICBsYXN0LT5uZXh0ID0gdGhpczsKKysJICBlbHNlCisrCSAgICByZXN1bHQtPmVudHJ5ID0gdGhpczsKKysKKysJICBsYXN0ID0gdGhpczsKKysJfQorKyAgICB9CisrICB3aGlsZSAoIWZlb2ZfdW5sb2NrZWQgKGZwKSk7CisrCisrICAvKiBGcmVlIHRoZSBidWZmZXIuICAqLworKyAgZnJlZSAobGluZSk7CisrICAvKiBDbG9zZSBjb25maWd1cmF0aW9uIGZpbGUuICAqLworKyAgZmNsb3NlIChmcCk7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKysvKiBSZWFkIHRoZSBzb3VyY2UgbmFtZXM6CisrCWAoIDxzb3VyY2U+ICggIlsiICIhIj8gKDxzdGF0dXM+ICI9IiA8YWN0aW9uPiApKyAiXSIgKT8gKSonCisrICAgKi8KKytzdGF0aWMgc2VydmljZV91c2VyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK25zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisreworKyAgc2VydmljZV91c2VyICpyZXN1bHQgPSBOVUxMLCAqKm5leHRwID0gJnJlc3VsdDsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgc2VydmljZV91c2VyICpuZXdfc2VydmljZTsKKysgICAgICBjb25zdCBjaGFyICpuYW1lOworKworKyAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJKytsaW5lOworKyAgICAgIGlmIChsaW5lWzBdID09ICdcMCcpCisrCS8qIE5vIHNvdXJjZSBzcGVjaWZpZWQuICAqLworKwlyZXR1cm4gcmVzdWx0OworKworKyAgICAgIC8qIFJlYWQgPHNvdXJjZT4gaWRlbnRpZmllci4gICovCisrICAgICAgbmFtZSA9IGxpbmU7CisrICAgICAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnWycpCisrCSsrbGluZTsKKysgICAgICBpZiAobmFtZSA9PSBsaW5lKQorKwlyZXR1cm4gcmVzdWx0OworKworKworKyAgICAgIG5ld19zZXJ2aWNlID0gKHNlcnZpY2VfdXNlciAqKSB4bWFsbG9jIChzaXplb2YgKCpuZXdfc2VydmljZSkpOworKyAgICAgIG5ld19zZXJ2aWNlLT5uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAobGluZSAtIG5hbWUgKyAxKTsKKysKKysgICAgICAqKChjaGFyICopIF9fbWVtcGNweSAoKGNoYXIgKikgbmV3X3NlcnZpY2UtPm5hbWUsIG5hbWUsIGxpbmUgLSBuYW1lKSkKKysgICAgICAgID0gJ1wwJzsKKysKKysgICAgICAvKiBTZXQgZGVmYXVsdCBhY3Rpb25zLiAgKi8KKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19UUllBR0FJTl0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1VOQVZBSUxdID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19OT1RGT1VORF0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1NVQ0NFU1NdID0gTlNTX0FDVElPTl9SRVRVUk47CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfUkVUVVJOXSA9IE5TU19BQ1RJT05fUkVUVVJOOworKyAgICAgIG5ld19zZXJ2aWNlLT5saWJyYXJ5ID0gTlVMTDsKKysgICAgICBuZXdfc2VydmljZS0+a25vd24udHJlZSA9IE5VTEw7CisrICAgICAgbmV3X3NlcnZpY2UtPm5leHQgPSBOVUxMOworKworKyAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJKytsaW5lOworKworKyAgICAgIGlmIChsaW5lWzBdID09ICdbJykKKysJeworKwkgIC8qIFJlYWQgY3JpdGVyaW9ucy4gICovCisrCSAgZG8KKysJICAgICsrbGluZTsKKysJICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmIGlzc3BhY2UgKGxpbmVbMF0pKTsKKysKKysJICBkbworKwkgICAgeworKwkgICAgICBpbnQgbm90OworKwkgICAgICBlbnVtIG5zc19zdGF0dXMgc3RhdHVzOworKwkgICAgICBsb29rdXBfYWN0aW9ucyBhY3Rpb247CisrCisrCSAgICAgIC8qIEdyb2sgISBiZWZvcmUgbmFtZSB0byBtZWFuIGFsbCBzdGF0aWkgYnV0IHRoYXQgb25lLiAgKi8KKysJICAgICAgbm90ID0gbGluZVswXSA9PSAnISc7CisrCSAgICAgIGlmIChub3QpCisrCQkrK2xpbmU7CisrCisrCSAgICAgIC8qIFJlYWQgc3RhdHVzIG5hbWUuICAqLworKwkgICAgICBuYW1lID0gbGluZTsKKysJICAgICAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnPScKKysJCSAgICAgJiYgbGluZVswXSAhPSAnXScpCisrCQkrK2xpbmU7CisrCisrCSAgICAgIC8qIENvbXBhcmUgd2l0aCBrbm93biBzdGF0aWkuICAqLworKwkgICAgICBpZiAobGluZSAtIG5hbWUgPT0gNykKKysJCXsKKysJCSAgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJTVUNDRVNTIiwgNykgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX1NVQ0NFU1M7CisrCQkgIGVsc2UgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJVTkFWQUlMIiwgNykgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX1VOQVZBSUw7CisrCQkgIGVsc2UKKysJCSAgICByZXR1cm4gcmVzdWx0OworKwkJfQorKwkgICAgICBlbHNlIGlmIChsaW5lIC0gbmFtZSA9PSA4KQorKwkJeworKwkJICBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIk5PVEZPVU5EIiwgOCkgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX05PVEZPVU5EOworKwkJICBlbHNlIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiVFJZQUdBSU4iLCA4KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfVFJZQUdBSU47CisrCQkgIGVsc2UKKysJCSAgICByZXR1cm4gcmVzdWx0OworKwkJfQorKwkgICAgICBlbHNlCisrCQlyZXR1cm4gcmVzdWx0OworKworKwkgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCQkrK2xpbmU7CisrCSAgICAgIGlmIChsaW5lWzBdICE9ICc9JykKKysJCXJldHVybiByZXN1bHQ7CisrCSAgICAgIGRvCisrCQkrK2xpbmU7CisrCSAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSk7CisrCisrCSAgICAgIG5hbWUgPSBsaW5lOworKwkgICAgICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICc9JworKwkJICAgICAmJiBsaW5lWzBdICE9ICddJykKKysJCSsrbGluZTsKKysKKysJICAgICAgaWYgKGxpbmUgLSBuYW1lID09IDYgJiYgX19zdHJuY2FzZWNtcCAobmFtZSwgIlJFVFVSTiIsIDYpID09IDApCisrCQlhY3Rpb24gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKysJICAgICAgZWxzZSBpZiAobGluZSAtIG5hbWUgPT0gOAorKwkJICAgICAgICYmIF9fc3RybmNhc2VjbXAgKG5hbWUsICJDT05USU5VRSIsIDgpID09IDApCisrCQlhY3Rpb24gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKwkgICAgICBlbHNlCisrCQlyZXR1cm4gcmVzdWx0OworKworKwkgICAgICBpZiAobm90KQorKwkJeworKwkJICAvKiBTYXZlIHRoZSBjdXJyZW50IGFjdGlvbiBzZXR0aW5nIGZvciB0aGlzIHN0YXR1cywKKysJCSAgICAgc2V0IHRoZW0gYWxsIHRvIHRoZSBnaXZlbiBhY3Rpb24sIGFuZCByZXNldCB0aGlzIG9uZS4gICovCisrCQkgIGNvbnN0IGxvb2t1cF9hY3Rpb25zIHNhdmUgPSBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgc3RhdHVzXTsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVFJZQUdBSU5dID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19VTkFWQUlMXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfTk9URk9VTkRdID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19TVUNDRVNTXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIHN0YXR1c10gPSBzYXZlOworKwkJfQorKwkgICAgICBlbHNlCisrCQluZXdfc2VydmljZS0+YWN0aW9uc1syICsgc3RhdHVzXSA9IGFjdGlvbjsKKysKKysJICAgICAgLyogU2tpcCB3aGl0ZSBzcGFjZXMuICAqLworKwkgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCQkrK2xpbmU7CisrCSAgICB9CisrCSAgd2hpbGUgKGxpbmVbMF0gIT0gJ10nKTsKKysKKysJICAvKiBTa2lwIHRoZSAnXScuICAqLworKwkgICsrbGluZTsKKysJfQorKworKyAgICAgICpuZXh0cCA9IG5ld19zZXJ2aWNlOworKyAgICAgIG5leHRwID0gJm5ld19zZXJ2aWNlLT5uZXh0OworKyAgICB9CisrfQorKworK3N0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK25zc19nZXRsaW5lIChjaGFyICpsaW5lKQorK3sKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBuYW1lX2RhdGFiYXNlX2VudHJ5ICpyZXN1bHQ7CisrICBzaXplX3QgbGVuOworKworKyAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2VzLiAgQVRURU5USU9OOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tCisrICAgICB3aGF0IGlzIGltcGxlbWVudGVkIGluIFNvbGFyaXMuICBUaGUgU29sYXJpcyBtYW4gcGFnZSBzYXlzIGEgbGluZQorKyAgICAgYmVnaW5uaW5nIHdpdGggYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIgaXMgaWdub3JlZC4gIFdlIHJlZ2FyZAorKyAgICAgdGhpcyBhcyBqdXN0IGFub3RoZXIgbWlzZmVhdHVyZSBpbiBTb2xhcmlzLiAgKi8KKysgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysgICAgKytsaW5lOworKworKyAgLyogUmVjb2duaXplIGA8ZGF0YWJhc2U+ICI6IicuICAqLworKyAgbmFtZSA9IGxpbmU7CisrICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICc6JykKKysgICAgKytsaW5lOworKyAgaWYgKGxpbmVbMF0gPT0gJ1wwJyB8fCBuYW1lID09IGxpbmUpCisrICAgIC8qIFN5bnRheCBlcnJvci4gICovCisrICAgIHJldHVybiBOVUxMOworKyAgKmxpbmUrKyA9ICdcMCc7CisrCisrICBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKKysKKysgIHJlc3VsdCA9IChuYW1lX2RhdGFiYXNlX2VudHJ5ICopIHhtYWxsb2MgKHNpemVvZiAoKnJlc3VsdCkpOworKyAgcmVzdWx0LT5uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAobGVuKTsKKysKKysgIC8qIFNhdmUgdGhlIGRhdGFiYXNlIG5hbWUuICAqLworKyAgbWVtY3B5ICgoY2hhciAqKSByZXN1bHQtPm5hbWUsIG5hbWUsIGxlbik7CisrCisrICAvKiBQYXJzZSB0aGUgbGlzdCBvZiBzZXJ2aWNlcy4gICovCisrICByZXN1bHQtPnNlcnZpY2UgPSBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChsaW5lKTsKKysKKysgIHJlc3VsdC0+bmV4dCA9IE5VTEw7CisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKysMCisrLyogR2VuZXJhdGluZyBjb2RlIGZvciBzdGF0aWNhbGx5IGluaXRpYWxpemVkIG5zc3dpdGNoIHN0cnVjdHVyZXMuICAqLworKworKworKy8qIFJldHVybiB0aGUgc2VydmljZS1uZXV0cmFsIHN1ZmZpeCBvZiB0aGUgbmFtZSBvZiB0aGUgc2VydmljZQorKyAgIGxpYnJhcnkgZnVuY3Rpb24gcmVmZXJyZWQgdG8gYnkgdGhlIGZ1bmN0aW9uIEYuICBUaGUgcmVzdWx0IGlzCisrICAgYWxsb2NhdGVkIHdpdGggbWFsbG9jLiAgKi8KKytjaGFyICoKKytrbm93bl9mdW5jdGlvbl9zdWZmaXggKGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZikKKyt7CisrICBzd2l0Y2ggKGYtPmtpbmQpCisrICAgIHsKKysgICAgY2FzZSBma19zZXRlbnQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgic2V0JXNlbnQiLCBmLT5lbnRyeSk7CisrCisrICAgIGNhc2UgZmtfZ2V0ZW50OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImdldCVzZW50X3IiLCBmLT5lbnRyeSk7CisrCisrICAgIGNhc2UgZmtfZW5kZW50OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImVuZCVzZW50IiwgZi0+ZW50cnkpOworKworKyAgICBjYXNlIGZrX2dldGJ5OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImdldCVzYnklc19yIiwgZi0+ZW50cnksIGYtPmtleSk7CisrCisrICAgIGNhc2UgZmtfZ2V0OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImdldCVzX3IiLCBmLT52YWx1ZV9hbmRfa2V5KTsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBhYm9ydCAoKTsKKysgICAgfQorK30KKysKKysKKysvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgbGlicmFyeSBmdW5jdGlvbiByZWZlcnJlZCB0byBieSB0aGUKKysgICBmdW5jdGlvbiBGLiAgVGhlIHJlc3VsdCBpcyBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLworK2NoYXIgKgorK2tub3duX2Z1bmN0aW9uX25hbWUgKGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZikKKyt7CisrICByZXR1cm4gc2FwcmludGYgKCJfbnNzXyVzXyVzIiwgZi0+c2VydmljZSwga25vd25fZnVuY3Rpb25fc3VmZml4IChmKSk7CisrfQorKworKworKy8qIFdyaXRlIGluaXRpYWxpemVkIGtub3duX2Z1bmN0aW9uIHN0cnVjdHVyZXMgdG8gT1VUIGZvcgorKyAgIGFsbCB0aGUgZnVuY3Rpb25zIHdlJ2xsIHVzZS4gICovCisrdm9pZAorK2dlbmVyYXRlX2tub3duX2Z1bmN0aW9ucyAoRklMRSAqb3V0KQorK3sKKysgIGludCBpOworKworKyAgLyogRmlyc3QsIGdlbmVyYXRlIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgZnVuY3Rpb25zLiAgVGhlIHNlcnZpY2UKKysgICAgIGxpYnJhcmllcyBkZXBlbmQgb24gbGliYywgYW5kIGlmIHRoZXNlIHJlZmVyZW5jZXMgd2VyZW4ndCB3ZWFrLAorKyAgICAgd2UnZCBiZSBtYWtpbmcgbGliYyBkZXBlbmQgY2lyY3VsYXJseSBvbiB0aGUgc2VydmljZQorKyAgICAgbGlicmFyaWVzLiAgKi8KKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIHsKKysgICAgICBjaGFyICpuYW1lID0ga25vd25fZnVuY3Rpb25fbmFtZSAoJmZ1bmN0aW9uc1tpXSk7CisrICAgICAgZnByaW50ZiAob3V0LCAidHlwZW9mICglcykgJXMgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTtcbiIsCisrICAgICAgICAgICAgICAgbmFtZSwgbmFtZSk7CisrICAgIH0KKysgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgLyogVGhlbiwgYSB0YWJsZSBtYXBwaW5nIG5hbWVzIHRvIGZ1bmN0aW9ucy4gICovCisrICBmcHV0cyAoInN0YXRpYyBjb25zdCBrbm93bl9mdW5jdGlvbiBmaXhlZF9rbm93bl9mdW5jdGlvbnNbXSA9IHtcbiIsCisrICAgICAgICAgb3V0KTsKKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gKmYgPSAmZnVuY3Rpb25zW2ldOworKyAgICAgIGNoYXIgKnN1ZmZpeCA9IGtub3duX2Z1bmN0aW9uX3N1ZmZpeCAoZik7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAiICAvKiAlMmQgKi8geyBcIiVzXCIsIF9uc3NfJXNfJXMgfSxcbiIsCisrICAgICAgICAgICAgICAgaSwgc3VmZml4LCBmLT5zZXJ2aWNlLCBzdWZmaXgpOworKyAgICB9CisrICBmcHV0cyAoIn07XG4iLCBvdXQpOworKyAgZnB1dHMgKCJcbiIsIG91dCk7CisrfQorKworKworKy8qIFByaW50IGNvZGUgdG8gT1VUIGZvciBhbiBpbml0aWFsaXplZCBhcnJheSBvZiBwb2ludGVycyB0byB0aGUKKysgICAna25vd25fZnVuY3Rpb24nIHN0cnVjdHVyZXMgbmVlZGVkIGZvciBVU0VSLCB3aGljaCBpcyBmb3IKKysgICBEQVRBQkFTRS4gIFJldHVybiBpdHMgbmFtZSwgYWxsb2NhdGVkIHdpdGggbWFsbG9jLiAgKi8KKytjaGFyICoKKytnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbl9saXN0IChGSUxFICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGF0YWJhc2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZV91c2VyICp1c2VyKQorK3sKKysgIGNoYXIgKmxpc3RfbmFtZSA9IHNhcHJpbnRmICgiZml4ZWRfJXNfJXNfa25vd25fZnVuY3MiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLT5uYW1lLCB1c2VyLT5uYW1lKTsKKysgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBrbm93bl9mdW5jdGlvbiAqJXNbXSA9IHtcbiIsCisrICAgICAgICAgICBsaXN0X25hbWUpOworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICBpZiAoc3RyY21wIChmdW5jdGlvbnNbaV0uZGF0YWJhc2UsIGRhdGFiYXNlLT5uYW1lKSA9PSAwCisrICAgICAgICAmJiBzdHJjbXAgKGZ1bmN0aW9uc1tpXS5zZXJ2aWNlLCB1c2VyLT5uYW1lKSA9PSAwKQorKyAgICAgIGZwcmludGYgKG91dCwgIiAgJmZpeGVkX2tub3duX2Z1bmN0aW9uc1slZF0sIC8qICVzICovXG4iLAorKyAgICAgICAgICAgICAgIGksIGtub3duX2Z1bmN0aW9uX25hbWUgKCZmdW5jdGlvbnNbaV0pKTsKKysgIGZwdXRzICgiICBOVUxMXG4iLCBvdXQpOworKyAgZnB1dHMgKCJ9O1xuIiwgb3V0KTsKKysgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgcmV0dXJuIGxpc3RfbmFtZTsKKyt9CisrCisrCisrLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzdGF0dXMgdmFsdWUgU1RBVFVTLCBhcyBhIHN0YXRpY2FsbHkKKysgICBhbGxvY2F0ZWQgc3RyaW5nLiAgKi8KKytjb25zdCBjaGFyICoKKytsb29rdXBfc3RhdHVzX25hbWUgKGVudW0gbnNzX3N0YXR1cyBzdGF0dXMpCisreworKyAgc3dpdGNoIChzdGF0dXMpCisrICAgIHsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1RSWUFHQUlOOiByZXR1cm4gIk5TU19TVEFUVVNfVFJZQUdBSU4iOworKyAgICBjYXNlIE5TU19TVEFUVVNfVU5BVkFJTDogcmV0dXJuICJOU1NfU1RBVFVTX1VOQVZBSUwiOworKyAgICBjYXNlIE5TU19TVEFUVVNfTk9URk9VTkQ6IHJldHVybiAiTlNTX1NUQVRVU19OT1RGT1VORCI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19TVUNDRVNTOiByZXR1cm4gIk5TU19TVEFUVVNfU1VDQ0VTUyI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19SRVRVUk46IHJldHVybiAiTlNTX1NUQVRVU19SRVRVUk4iOworKyAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKysgICAgfTsKKyt9CisrCisrCisrLyogUmV0dXJuIHRoZSBuYW1lIG9mIEFDVElPTiBhcyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cmluZy4gICovCisrY29uc3QgY2hhciAqCisrbG9va3VwX2FjdGlvbl9uYW1lIChsb29rdXBfYWN0aW9ucyBhY3Rpb24pCisreworKyAgc3dpdGNoIChhY3Rpb24pCisrICAgIHsKKysgICAgY2FzZSBOU1NfQUNUSU9OX0NPTlRJTlVFOiByZXR1cm4gIk5TU19BQ1RJT05fQ09OVElOVUUiOworKyAgICBjYXNlIE5TU19BQ1RJT05fUkVUVVJOOiByZXR1cm4gIk5TU19BQ1RJT05fUkVUVVJOIjsKKysgICAgZGVmYXVsdDogYWJvcnQgKCk7CisrICAgIH0KKyt9CisrCisrCisrLyogUHJpbnQgY29kZSB0byBPVVQgZm9yIHRoZSBsaXN0IG9mIHNlcnZpY2VfdXNlciBzdHJ1Y3R1cmVzIHN0YXJ0aW5nCisrICAgd2l0aCBVU0VSLCB3aGljaCBhcmUgYWxsIGZvciBEQVRBQkFTRS4gIFJldHVybiB0aGUgbmFtZSBvZiB0aGUKKysgICBmaXJzdCBzdHJ1Y3R1cmUgaW4gdGhhdCBsaXN0LCBvciB6ZXJvIGlmIFVTRVIgaXMgTlVMTC4gICovCisrY2hhciAqCisrZ2VuZXJhdGVfc2VydmljZV91c2VyX2xpc3QgKEZJTEUgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGF0YWJhc2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VfdXNlciAqdXNlcikKKyt7CisrICBpZiAodXNlcikKKysgICAgeworKyAgICAgIC8qIEdlbmVyYXRlIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiAgKi8KKysgICAgICBjaGFyICpuZXh0X25hbWUgPSBnZW5lcmF0ZV9zZXJ2aWNlX3VzZXJfbGlzdCAob3V0LCBkYXRhYmFzZSwgdXNlci0+bmV4dCk7CisrICAgICAgLyogR2VuZXJhdGUgb3VyIGtub3duIGZ1bmN0aW9uIGxpc3QuICAqLworKyAgICAgIGNoYXIgKmtub3duX2Z1bmN0aW9uX2xpc3RfbmFtZSA9CisrICAgICAgICBnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbl9saXN0IChvdXQsIGRhdGFiYXNlLCB1c2VyKTsKKysKKysgICAgICBjaGFyICpuYW1lID0gc2FwcmludGYgKCJmaXhlZF8lc18lc191c2VyIiwgZGF0YWJhc2UtPm5hbWUsIHVzZXItPm5hbWUpOworKworKyAgICAgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBzZXJ2aWNlX3VzZXIgJXMgPSB7XG4iLCBuYW1lKTsKKysgICAgICBpZiAobmV4dF9uYW1lKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAoc2VydmljZV91c2VyICopICYlcyxcbiIsIG5leHRfbmFtZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLCAvKiBubyBuZXh0IGVudHJ5ICovXG4iKTsKKysgICAgICBmcHV0cyAoIiAge1xuIiwgb3V0KTsKKysgICAgICBpbnQgaTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mICh1c2VyLT5hY3Rpb25zKSAvIHNpemVvZiAodXNlci0+YWN0aW9uc1swXSk7IGkrKykKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgICAlcywgLyogJXMgKi9cbiIsCisrICAgICAgICAgICAgICAgICBsb29rdXBfYWN0aW9uX25hbWUgKHVzZXItPmFjdGlvbnNbaV0pLAorKyAgICAgICAgICAgICAgICAgbG9va3VwX3N0YXR1c19uYW1lIChpIC0gMikpOworKyAgICAgIGZwdXRzICgiICB9LFxuIiwgb3V0KTsKKysgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsICAvKiB3ZSBuZXZlciBuZWVkIHRoZSBzZXJ2aWNlIGxpYnJhcnkgKi9cbiIpOworKyAgICAgIGZwcmludGYgKG91dCwgIiAgeyAuYXJyYXkgPSAlcyB9LFxuIiwga25vd25fZnVuY3Rpb25fbGlzdF9uYW1lKTsKKysgICAgICBmcHJpbnRmIChvdXQsICIgIFwiJXNcIlxuIiwgdXNlci0+bmFtZSk7CisrICAgICAgZnB1dHMgKCJ9O1xuIiwgb3V0KTsKKysgICAgICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgICAgICByZXR1cm4gbmFtZTsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gTlVMTDsKKyt9CisrCisrCisrLyogUHJpbnQgY29kZSB0byBPVVQgZm9yIHRoZSBsaXN0IG9mIG5hbWVfZGF0YWJhc2VfZW50cnkgc3RydWN0dXJlcworKyAgIHN0YXJ0aW5nIHdpdGggREFUQUJBU0UuICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHN0cnVjdHVyZQorKyAgIGluIHRoYXQgbGlzdCwgb3IgemVybyBpZiBEQVRBQkFTRSBpcyBOVUxMLiAgKi8KKytjaGFyICoKKytnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlX2VudHJpZXMgKEZJTEUgKm91dCwgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGF0YWJhc2UpCisreworKyAgaWYgKGRhdGFiYXNlKQorKyAgICB7CisrICAgICAgY2hhciAqbmV4dF9uYW1lID0gZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZV9lbnRyaWVzIChvdXQsIGRhdGFiYXNlLT5uZXh0KTsKKysgICAgICBjaGFyICpzZXJ2aWNlX3VzZXJfbmFtZQorKyAgICAgICAgPSBnZW5lcmF0ZV9zZXJ2aWNlX3VzZXJfbGlzdCAob3V0LCBkYXRhYmFzZSwgZGF0YWJhc2UtPnNlcnZpY2UpOworKyAgICAgIGNoYXIgKm5hbWUgPSBzYXByaW50ZiAoImZpeGVkXyVzX25hbWVfZGF0YWJhc2UiLCBkYXRhYmFzZS0+bmFtZSk7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IG5hbWVfZGF0YWJhc2VfZW50cnkgJXMgPSB7XG4iLCBuYW1lKTsKKysKKysgICAgICBpZiAobmV4dF9uYW1lKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSAmJXMsXG4iLCBuZXh0X25hbWUpOworKyAgICAgIGVsc2UKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCxcbiIpOworKworKyAgICAgIGlmIChzZXJ2aWNlX3VzZXJfbmFtZSkKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgKHNlcnZpY2VfdXNlciAqKSAmJXMsXG4iLCBzZXJ2aWNlX3VzZXJfbmFtZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLFxuIik7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAiICBcIiVzXCJcbiIsIGRhdGFiYXNlLT5uYW1lKTsKKysgICAgICBmcHJpbnRmIChvdXQsICJ9O1xuIik7CisrICAgICAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICAgICAgcmV0dXJuIG5hbWU7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorKworKworK3ZvaWQKKytnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlIChGSUxFICpvdXQsIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUpCisreworKyAgLyogUHJvZHVjZSBhIGxpbmtlZCBsaXN0IG9mIHRoZSBrbm93biBuYW1lX2RhdGFiYXNlX2VudHJ5CisrICAgICBzdHJ1Y3R1cmVzLiAgKi8KKysgIGNoYXIgKmVudHJpZXMgPSBnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlX2VudHJpZXMgKG91dCwgc2VydmljZV90YWJsZS0+ZW50cnkpOworKworKyAgLyogTm93IHByb2R1Y2UgdGhlIG1haW4gc3RydWN0dXJlIHRoYXQgcG9pbnRzIHRvIHRoZW0gYWxsLiAgKi8KKysgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBuYW1lX2RhdGFiYXNlIGZpeGVkX25hbWVfZGF0YWJhc2UgPSB7XG4iKTsKKysgIGlmIChlbnRyaWVzKQorKyAgICBmcHJpbnRmIChvdXQsICIgIChuYW1lX2RhdGFiYXNlX2VudHJ5ICopICYlcyxcbiIsIGVudHJpZXMpOworKyAgZWxzZQorKyAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsXG4iKTsKKysgIGZwdXRzICgiICBOVUxMIC8qIHdlIGRvbid0IG5lZWQgdGhlIGxpYnJhcmllcyAqL1xuIgorKyAgICAgICAgICJ9O1xuIiwKKysgICAgICAgICBvdXQpOworK30KKysKKysKKysMCisrLyogR2VuZXJhdGluZyB0aGUgbGlzdCBvZiBzZXJ2aWNlIGxpYnJhcmllcyB3ZSBnZW5lcmF0ZSByZWZlcmVuY2VzIHRvLiAgKi8KKysKKysvKiBTdHJpbmcgd2l0aCByZXZpc2lvbiBudW1iZXIgb2YgdGhlIHNoYXJlZCBvYmplY3QgZmlsZXMuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuc3Nfc2hsaWJfcmV2aXNpb24gPSBMSUJOU1NfRklMRVNfU08gKyAxNTsKKysKKyt2b2lkCisrZ2VuZXJhdGVfc2VydmljZV9saWJfbGlzdCAoRklMRSAqb3V0LCBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlKQorK3sKKysgIGludCBpLCBqOworKyAgaW50IHByaW50ZWRfYW55ID0gMDsKKysKKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIHsKKysgICAgICAvKiBNZW50aW9uIGVhY2ggc2VydmljZSBsaWJyYXJ5IG9ubHkgb25jZS4gICovCisrICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykKKysgICAgICAgIGlmIChzdHJjbXAgKGZ1bmN0aW9uc1tpXS5zZXJ2aWNlLCBmdW5jdGlvbnNbal0uc2VydmljZSkgPT0gMCkKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgaWYgKGogPj0gaSkKKysgICAgICAgIHsKKysgICAgICAgICAgaWYgKHByaW50ZWRfYW55KQorKyAgICAgICAgICAgIHB1dGMgKCcgJywgb3V0KTsKKysgICAgICAgICAgZnByaW50ZiAob3V0LCAiLWxuc3NfJXMiLAorKyAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNbaV0uc2VydmljZSwKKysgICAgICAgICAgICAgICAgICAgbnNzX3NobGliX3JldmlzaW9uKTsKKysgICAgICAgICAgcHJpbnRlZF9hbnkgPSAxOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworKwwKKysvKiBNYWluLiAgKi8KKysKKytpbnQKKyttYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgaWYgKGFyZ2MgIT0gNCkKKysgICAgeworKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiBnZW4tZml4ZWQtbnNzd2l0Y2ggSEVBREVSIFNFUlZMSUJTIENPTkZJR1xuIik7CisrICAgICAgZXhpdCAoMSk7CisrICAgIH0KKysKKysgIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUgPSBuc3NfcGFyc2VfZmlsZSAoYXJndlszXSk7CisrCisrICBGSUxFICpoZWFkZXIgPSBmb3BlbiAoYXJndlsxXSwgInciKTsKKysgIGlmICghIGhlYWRlcikKKysgICAgeworKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKysgICAgICAgICAgICAgICAiZ2VuLWZpeGVkLW5zc3dpdGNoOiBjb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlICVzOiAlc1xuIiwKKysgICAgICAgICAgICAgICBhcmd2WzFdLCBzdHJlcnJvciAoZXJybm8pKTsKKysgICAgICBleGl0ICgxKTsKKysgICAgfQorKyAgZnB1dHMgKCIvKiBHZW5lcmF0ZWQgYnkgbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jLiAgKi9cbiIsIGhlYWRlcik7CisrICBmcHV0cyAoIlxuIiwgaGVhZGVyKTsKKysgIGdlbmVyYXRlX2tub3duX2Z1bmN0aW9ucyAoaGVhZGVyKTsKKysgIGdlbmVyYXRlX25hbWVfZGF0YWJhc2UgKGhlYWRlciwgc2VydmljZV90YWJsZSk7CisrICBmY2xvc2UgKGhlYWRlcik7CisrCisrICBGSUxFICpzZXJ2aWNlX2xpYl9saXN0ID0gZm9wZW4gKGFyZ3ZbMl0sICJ3Iik7CisrICBpZiAoISBzZXJ2aWNlX2xpYl9saXN0KQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLAorKyAgICAgICAgICAgICAgICJnZW4tZml4ZWQtbnNzd2l0Y2g6IGNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGUgJXM6ICVzXG4iLAorKyAgICAgICAgICAgICAgIGFyZ3ZbMl0sIHN0cmVycm9yIChlcnJubykpOworKyAgICAgIGV4aXQgKDEpOworKyAgICB9CisrICBnZW5lcmF0ZV9zZXJ2aWNlX2xpYl9saXN0IChzZXJ2aWNlX2xpYl9saXN0LCBzZXJ2aWNlX3RhYmxlKTsKKysgIGZjbG9zZSAoc2VydmljZV9saWJfbGlzdCk7CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvbnNzL2dldGVudC5jIGIvbnNzL2dldGVudC5jCitpbmRleCAzNGRmODQ4Li42NzRjOGVlIDEwMDY0NAorLS0tIGEvbnNzL2dldGVudC5jCisrKysgYi9uc3MvZ2V0ZW50LmMKK0BAIC0zOSw2ICszOSw3IEBACisgI2luY2x1ZGUgPG5ldGluZXQvZXRoZXIuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogR2V0IGxpYmMgdmVyc2lvbiBudW1iZXIuICAqLworICNpbmNsdWRlIDx2ZXJzaW9uLmg+CitAQCAtOTEsNiArOTIsNyBAQCB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cblwKKyAgIGZwcmludGYgKHN0cmVhbSwgZ2V0dGV4dCAoIldyaXR0ZW4gYnkgJXMuXG4iKSwgIlRob3JzdGVuIEt1a3VrIik7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfREJfQUxJQVNFUworIC8qIFRoaXMgaXMgZm9yIGFsaWFzZXMgKi8KKyBzdGF0aWMgdm9pZAorIHByaW50X2FsaWFzZXMgKHN0cnVjdCBhbGlhc2VudCAqYWxpYXMpCitAQCAtMTM1LDcgKzEzNyw5IEBAIGFsaWFzZXNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMgKi8KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBUaGlzIGlzIGZvciBldGhlcnMgKi8KKyBzdGF0aWMgaW50CisgZXRoZXJzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorQEAgLTE3OSw2ICsxODMsNyBAQCBldGhlcnNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAvKiBUaGlzIGlzIGZvciBncm91cCAqLworIHN0YXRpYyB2b2lkCitAQCAtMzAxLDYgKzMwNiw3IEBAIGdzaGFkb3dfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgICByZXR1cm4gcmVzdWx0OworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBUaGlzIGlzIGZvciBob3N0cyAqLworIHN0YXRpYyB2b2lkCisgcHJpbnRfaG9zdHMgKHN0cnVjdCBob3N0ZW50ICpob3N0KQorQEAgLTU5OCw2ICs2MDQsNyBAQCBuZXR3b3Jrc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorIC8qIE5vdyBpcyBhbGwgZm9yIHBhc3N3ZCAqLworIHN0YXRpYyB2b2lkCitAQCAtNjUwLDYgKzY1Nyw3IEBAIHBhc3N3ZF9rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAgIHJldHVybiByZXN1bHQ7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIFRoaXMgaXMgZm9yIHByb3RvY29scyAqLworIHN0YXRpYyB2b2lkCisgcHJpbnRfcHJvdG9jb2xzIChzdHJ1Y3QgcHJvdG9lbnQgKnByb3RvKQorQEAgLTgwNyw2ICs4MTUsNyBAQCBzZXJ2aWNlc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorIC8qIFRoaXMgaXMgZm9yIHNoYWRvdyAqLworIHN0YXRpYyB2b2lkCitAQCAtODczLDIzICs4ODIsMzYgQEAgc3RydWN0CisgICB9IGRhdGFiYXNlc1tdID0KKyAgIHsKKyAjZGVmaW5lIEQobmFtZSkgeyAjbmFtZSwgbmFtZSAjIyBfa2V5cyB9LAorLUQoYWhvc3RzKQorLUQoYWhvc3RzdjQpCistRChhaG9zdHN2NikKKy1EKGFsaWFzZXMpCistRChldGhlcnMpCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisrIyBkZWZpbmUgRE4obmFtZSkgRChuYW1lKQorKyNlbHNlCisrIyBkZWZpbmUgRE4obmFtZSkKKysjZW5kaWYKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMKKysjIGRlZmluZSBEQShuYW1lKSBEKG5hbWUpCisrI2Vsc2UKKysjIGRlZmluZSBEQShuYW1lKQorKyNlbmRpZgorKworK0ROKGFob3N0cykKKytETihhaG9zdHN2NCkKKytETihhaG9zdHN2NikKKytEQShhbGlhc2VzKQorK0ROKGV0aGVycykKKyBEKGdyb3VwKQorIEQoZ3NoYWRvdykKKy1EKGhvc3RzKQorLUQoaW5pdGdyb3VwcykKKy1EKG5ldGdyb3VwKQorLUQobmV0d29ya3MpCisrRE4oaG9zdHMpCisrRE4oaW5pdGdyb3VwcykKKytETihuZXRncm91cCkKKytETihuZXR3b3JrcykKKyBEKHBhc3N3ZCkKKy1EKHByb3RvY29scykKKytETihwcm90b2NvbHMpCisgI2lmIEhBVkVfU1VOUlBDCistRChycGMpCisrRE4ocnBjKQorICNlbmRpZgorLUQoc2VydmljZXMpCisrRE4oc2VydmljZXMpCisgRChzaGFkb3cpCisgI3VuZGVmIEQKKyAgICAgeyBOVUxMLCBOVUxMIH0KK2RpZmYgLS1naXQgYS9uc3MvZ2V0bnNzZW50X3IuYyBiL25zcy9nZXRuc3NlbnRfci5jCitpbmRleCBmNWI5MDM2Li5mMDlmN2ZlIDEwMDY0NAorLS0tIGEvbnNzL2dldG5zc2VudF9yLmMKKysrKyBiL25zcy9nZXRuc3NlbnRfci5jCitAQCAtMTYsNiArMTYsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPG5ldGRiLmg+CisgI2luY2x1ZGUgIm5zc3dpdGNoLmgiCisgCitAQCAtNTksMTEgKzYwLDEzIEBAIF9fbnNzX3NldGVudCAoY29uc3QgY2hhciAqZnVuY19uYW1lLCBkYl9sb29rdXBfZnVuY3Rpb24gbG9va3VwX2ZjdCwKKyAgIH0gZmN0OworICAgaW50IG5vX21vcmU7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICBpZiAocmVzICYmIF9fcmVzX21heWJlX2luaXQgKCZfcmVzLCAwKSA9PSAtMSkKKyAgICAgeworICAgICAgIF9fc2V0X2hfZXJybm8gKE5FVERCX0lOVEVSTkFMKTsKKyAgICAgICByZXR1cm47CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAgIC8qIEN5Y2xlIHRocm91Z2ggdGhlIHNlcnZpY2VzIGFuZCBydW4gdGhlaXIgYHNldFhYZW50JyBmdW5jdGlvbnMgdW50aWwKKyAgICAgIHdlIGZpbmQgYW4gYXZhaWxhYmxlIHNlcnZpY2UuICAqLworQEAgLTEwMSwxMSArMTA0LDEzIEBAIF9fbnNzX2VuZGVudCAoY29uc3QgY2hhciAqZnVuY19uYW1lLCBkYl9sb29rdXBfZnVuY3Rpb24gbG9va3VwX2ZjdCwKKyAgIH0gZmN0OworICAgaW50IG5vX21vcmU7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICBpZiAocmVzICYmIF9fcmVzX21heWJlX2luaXQgKCZfcmVzLCAwKSA9PSAtMSkKKyAgICAgeworICAgICAgIF9fc2V0X2hfZXJybm8gKE5FVERCX0lOVEVSTkFMKTsKKyAgICAgICByZXR1cm47CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAgIC8qIEN5Y2xlIHRocm91Z2ggYWxsIHRoZSBzZXJ2aWNlcyBhbmQgcnVuIHRoZWlyIGVuZFhYZW50IGZ1bmN0aW9ucy4gICovCisgICBub19tb3JlID0gc2V0dXAgKGZ1bmNfbmFtZSwgbG9va3VwX2ZjdCwgJmZjdC5wdHIsIG5pcCwgc3RhcnRwLCAxKTsKK0BAIC0xNDEsMTIgKzE0NiwxNCBAQCBfX25zc19nZXRlbnRfciAoY29uc3QgY2hhciAqZ2V0ZW50X2Z1bmNfbmFtZSwKKyAgIGludCBub19tb3JlOworICAgZW51bSBuc3Nfc3RhdHVzIHN0YXR1czsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIGlmIChyZXMgJiYgX19yZXNfbWF5YmVfaW5pdCAoJl9yZXMsIDApID09IC0xKQorICAgICB7CisgICAgICAgKmhfZXJybm9wID0gTkVUREJfSU5URVJOQUw7CisgICAgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgICAgcmV0dXJuIGVycm5vOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgICAvKiBJbml0aWFsaXplIHN0YXR1cyB0byByZXR1cm4gaWYgbm8gbW9yZSBmdW5jdGlvbnMgYXJlIGZvdW5kLiAgKi8KKyAgIHN0YXR1cyA9IE5TU19TVEFUVVNfTk9URk9VTkQ7CitAQCAtMTYxLDcgKzE2OCw3IEBAIF9fbnNzX2dldGVudF9yIChjb25zdCBjaGFyICpnZXRlbnRfZnVuY19uYW1lLAorICAgICAgIGludCBpc19sYXN0X25pcCA9ICpuaXAgPT0gKmxhc3RfbmlwOworIAorICAgICAgIHN0YXR1cyA9IERMX0NBTExfRkNUIChmY3QuZiwKKy0JCQkgICAgKHJlc2J1ZiwgYnVmZmVyLCBidWZsZW4sICZlcnJubywgJmhfZXJybm8pKTsKKysJCQkgICAgKHJlc2J1ZiwgYnVmZmVyLCBidWZsZW4sICZlcnJubywgaF9lcnJub3ApKTsKKyAKKyAgICAgICAvKiBUaGUgc3RhdHVzIGlzIE5TU19TVEFUVVNfVFJZQUdBSU4gYW5kIGVycm5vIGlzIEVSQU5HRSB0aGUKKyAJIHByb3ZpZGVkIGJ1ZmZlciBpcyB0b28gc21hbGwuICBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGdpdmUKK2RpZmYgLS1naXQgYS9uc3MvbnNzd2l0Y2guYyBiL25zcy9uc3N3aXRjaC5jCitpbmRleCA5NzEyNjIzLi5jODFlMjA3IDEwMDY0NAorLS0tIGEvbnNzL25zc3dpdGNoLmMKKysrKyBiL25zcy9uc3N3aXRjaC5jCitAQCAtMjYsNiArMjYsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxhbGlhc2VzLmg+CisgI2luY2x1ZGUgPGdycC5oPgorQEAgLTQxLDYgKzQyLDE1IEBACisgI2luY2x1ZGUgIi4uL25zY2QvbnNjZF9wcm90by5oIgorICNpbmNsdWRlIDxzeXNkZXAuaD4KKyAKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQsIHdlIHVzZSBmaXhlZCB0YWJsZXMgb2YKKysgICBkYXRhYmFzZXMgYW5kIHNlcnZpY2VzLCBnZW5lcmF0ZWQgYXQgbGlicmFyeSBidWlsZCB0aW1lLiAgVGh1czoKKysgICAtIFdlIGNhbid0IHJlY29uZmlndXJlIGluZGl2aWR1YWwgZGF0YWJhc2VzLCBzbyB3ZSBkb24ndCBuZWVkIGEKKysgICAgIG5hbWUtdG8tZGF0YWJhc2UgbWFwLgorKyAgIC0gV2UgbmV2ZXIgYWRkIGRhdGFiYXNlcyBvciBzZXJ2aWNlIGxpYnJhcmllcywgb3IgbG9vayB1cCBmdW5jdGlvbnMKKysgICAgIGF0IHJ1bnRpbWUsIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBsb2NrIHRvIHByb3RlY3Qgb3VyIHRhYmxlcy4KKysgICBTZWUgLi4vb3B0aW9uLWdyb3Vwcy5kZWYgZm9yIHRoZSBkZXRhaWxzLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisrCisgLyogUHJvdG90eXBlcyBmb3IgdGhlIGxvY2FsIGZ1bmN0aW9ucy4gICovCisgc3RhdGljIG5hbWVfZGF0YWJhc2UgKm5zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkgaW50ZXJuYWxfZnVuY3Rpb247Cisgc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKm5zc19nZXRsaW5lIChjaGFyICpsaW5lKSBpbnRlcm5hbF9mdW5jdGlvbjsKK0BAIC03OSw2ICs4OSw5IEBAIGJvb2wgX19uc3NfZGF0YWJhc2VfY3VzdG9tW05TU19EQlNJRFhfbWF4XTsKKyAKKyBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jaykKKyAKKysjZGVmaW5lIGxvY2tfbnNzd2l0Y2ggX19saWJjX2xvY2tfbG9jayAobG9jaykKKysjZGVmaW5lIHVubG9ja19uc3N3aXRjaCBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spCisrCisgI2lmICFkZWZpbmVkIERPX1NUQVRJQ19OU1MgfHwgZGVmaW5lZCBTSEFSRUQKKyAvKiBTdHJpbmcgd2l0aCByZXZpc2lvbiBudW1iZXIgb2YgdGhlIHNoYXJlZCBvYmplY3QgZmlsZXMuICAqLworIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBfX25zc19zaGxpYl9yZXZpc2lvbiA9IExJQk5TU19GSUxFU19TTyArIDE1OworQEAgLTkzLDYgKzEwNiwyMCBAQCBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZTsKKyAgICBfX2xpYmNfZnJlZXJlcy4gICovCisgc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKmRlZmNvbmZpZ19lbnRyaWVzOworIAorKyNlbHNlIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworKworKy8qIEJyaW5nIGluIHRoZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHNlcnZpY2UgdGFibGUgd2UgZ2VuZXJhdGVkIGF0CisrICAgYnVpbGQgdGltZS4gICovCisrI2luY2x1ZGUgImZpeGVkLW5zc3dpdGNoLmgiCisrCisrY29uc3Qgc3RhdGljIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUgPSAmZml4ZWRfbmFtZV9kYXRhYmFzZTsKKysKKysvKiBOb3RoaW5nIGV2ZXIgY2hhbmdlcywgc28gdGhlcmUncyBubyBuZWVkIHRvIGxvY2sgYW55dGhpbmcuICAqLworKyNkZWZpbmUgbG9ja19uc3N3aXRjaCAoMCkKKysjZGVmaW5lIHVubG9ja19uc3N3aXRjaCAoMCkKKysKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisrCisgCisgI2lmZGVmIFVTRV9OU0NECisgLyogTm9uemVybyBpZiB0aGlzIGlzIHRoZSBuc2NkIHByb2Nlc3MuICAqLworQEAgLTEwOSwyMCArMTM2LDIyIEBAIF9fbnNzX2RhdGFiYXNlX2xvb2t1cCAoY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9uYW1lLAorIAkJICAgICAgIGNvbnN0IGNoYXIgKmRlZmNvbmZpZywgc2VydmljZV91c2VyICoqbmkpCisgeworICAgLyogUHJldmVudCBtdWx0aXBsZSB0aHJlYWRzIHRvIGNoYW5nZSB0aGUgc2VydmljZSB0YWJsZS4gICovCistICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysgIGxvY2tfbnNzd2l0Y2g7CisgCisgICAvKiBSZWNvbnNpZGVyIGRhdGFiYXNlIHZhcmlhYmxlIGluIGNhc2Ugc29tZSBvdGhlciB0aHJlYWQgY2FsbGVkCisgICAgICBgX19uc3NfY29uZmlndXJlX2xvb2t1cCcgd2hpbGUgd2Ugd2FpdGVkIGZvciB0aGUgbG9jay4gICovCisgICBpZiAoKm5pICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgICAgIHVubG9ja19uc3N3aXRjaDsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyAgIC8qIEFyZSB3ZSBpbml0aWFsaXplZCB5ZXQ/ICAqLworICAgaWYgKHNlcnZpY2VfdGFibGUgPT0gTlVMTCkKKyAgICAgLyogUmVhZCBjb25maWcgZmlsZS4gICovCisgICAgIHNlcnZpY2VfdGFibGUgPSBuc3NfcGFyc2VfZmlsZSAoX1BBVEhfTlNTV0lUQ0hfQ09ORik7CisrI2VuZGlmCisgCisgICAvKiBUZXN0IHdoZXRoZXIgY29uZmlndXJhdGlvbiBkYXRhIGlzIGF2YWlsYWJsZS4gICovCisgICBpZiAoc2VydmljZV90YWJsZSAhPSBOVUxMKQorQEAgLTE0NCw2ICsxNzMsNyBAQCBfX25zc19kYXRhYmFzZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRhdGFiYXNlLCBjb25zdCBjaGFyICphbHRlcm5hdGVfbmFtZSwKKyAJICAgICpuaSA9IGVudHJ5LT5zZXJ2aWNlOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorICAgLyogTm8gY29uZmlndXJhdGlvbiBkYXRhIGlzIGF2YWlsYWJsZSwgZWl0aGVyIGJlY2F1c2UgbnNzd2l0Y2guY29uZgorICAgICAgZG9lc24ndCBleGlzdCBvciBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhIGxpbmUgZm9yIHRoaXMgZGF0YWJhc2UuCisgCitAQCAtMTY2LDEzICsxOTYsMjMgQEAgX19uc3NfZGF0YWJhc2VfbG9va3VwIChjb25zdCBjaGFyICpkYXRhYmFzZSwgY29uc3QgY2hhciAqYWx0ZXJuYXRlX25hbWUsCisgCSAgICB7CisgCSAgICAgIGVudHJ5LT5uZXh0ID0gZGVmY29uZmlnX2VudHJpZXM7CisgCSAgICAgIGVudHJ5LT5zZXJ2aWNlID0gKm5pOworLQkgICAgICBlbnRyeS0+bmFtZVswXSA9ICdcMCc7CisrCSAgICAgIGVudHJ5LT5uYW1lID0gIiI7CisgCSAgICAgIGRlZmNvbmZpZ19lbnRyaWVzID0gZW50cnk7CisgCSAgICB9CisgCX0KKyAgICAgfQorKyNlbHNlCisrICAvKiBXaXRob3V0IHRoZSBkeW5hbWljIGJlaGF2aW9yLCB3ZSBjYW4ndCBwcm9jZXNzIGRlZmNvbmZpZy4gIFRoZQorKyAgICAgZGF0YWJhc2VzIHRoZSB1c2VyIHNwZWNpZmllZCBhdCBsaWJyYXJ5IGJ1aWxkIHRpbWUgYXJlIGFsbCB5b3UKKysgICAgIGdldC4gICovCisrICBpZiAoKm5pID09IE5VTEwpCisrICAgIHsKKysgICAgICB1bmxvY2tfbnNzd2l0Y2g7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrI2VuZGlmCisgCistICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgdW5sb2NrX25zc3dpdGNoOworIAorICAgcmV0dXJuICpuaSAhPSBOVUxMID8gMCA6IC0xOworIH0KK0BAIC0yNTIsNiArMjkyLDcgQEAgX19uc3NfbmV4dDIgKHNlcnZpY2VfdXNlciAqKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSwgY29uc3QgY2hhciAqZmN0Ml9uYW1lLAorIGxpYmNfaGlkZGVuX2RlZiAoX19uc3NfbmV4dDIpCisgCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19uc3NfbmV4dCAoc2VydmljZV91c2VyICoqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lLCB2b2lkICoqZmN0cCwgaW50IHN0YXR1cywKK0BAIC0zMDAsMTMgKzM0MSwxMyBAQCBfX25zc19jb25maWd1cmVfbG9va3VwIChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnNlcnZpY2VfbGluZSkKKyAgICAgfQorIAorICAgLyogUHJldmVudCBtdWx0aXBsZSB0aHJlYWRzIHRvIGNoYW5nZSB0aGUgc2VydmljZSB0YWJsZS4gICovCistICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysgIGxvY2tfbnNzd2l0Y2g7CisgCisgICAvKiBJbnN0YWxsIG5ldyBydWxlcy4gICovCisgICAqZGF0YWJhc2VzW2NudF0uZGJwID0gbmV3X2RiOworICAgX19uc3NfZGF0YWJhc2VfY3VzdG9tW2NudF0gPSB0cnVlOworIAorLSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgIHVubG9ja19uc3N3aXRjaDsKKyAKKyAgIHJldHVybiAwOworIH0KK0BAIC00MDIsNyArNDQzLDcgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAgIHZvaWQgKipmb3VuZCwgKnJlc3VsdDsKKyAKKyAgIC8qIFdlIG5vdyBtb2RpZnkgZ2xvYmFsIGRhdGEuICBQcm90ZWN0IGl0LiAgKi8KKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKyAgbG9ja19uc3N3aXRjaDsKKyAKKyAgIC8qIFNlYXJjaCB0aGUgdHJlZSBvZiBmdW5jdGlvbnMgcHJldmlvdXNseSByZXF1ZXN0ZWQuICBEYXRhIGluIHRoZQorICAgICAgdHJlZSBhcmUgYGtub3duX2Z1bmN0aW9uJyBzdHJ1Y3R1cmVzLCB3aG9zZSBmaXJzdCBtZW1iZXIgaXMgYQorQEAgLTQxMyw3ICs0NTQsNyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICAgICAgZW5vdWdoIHRvIGEgcG9pbnRlciB0byBvdXIgc3RydWN0dXJlIHRvIHVzZSBhcyBhIGxvb2t1cCBrZXkgdGhhdAorICAgICAgd2lsbCBiZSBwYXNzZWQgdG8gYGtub3duX2NvbXBhcmUnIChhYm92ZSkuICAqLworIAorLSAgZm91bmQgPSBfX3RzZWFyY2ggKCZmY3RfbmFtZSwgJm5pLT5rbm93biwgJmtub3duX2NvbXBhcmUpOworKyAgZm91bmQgPSBfX3RzZWFyY2ggKCZmY3RfbmFtZSwgJm5pLT5rbm93bi50cmVlLCAma25vd25fY29tcGFyZSk7CisgICBpZiAoZm91bmQgPT0gTlVMTCkKKyAgICAgLyogVGhpcyBtZWFucyBvdXQtb2YtbWVtb3J5LiAgKi8KKyAgICAgcmVzdWx0ID0gTlVMTDsKK0BAIC00NDAsNyArNDgxLDcgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAjZW5kaWYKKyAJICAvKiBPb3BzLiAgV2UgY2FuJ3QgaW5zdGFudGlhdGUgdGhpcyBub2RlIHByb3Blcmx5LgorIAkgICAgIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLiAgKi8KKy0JICBfX3RkZWxldGUgKCZmY3RfbmFtZSwgJm5pLT5rbm93biwgJmtub3duX2NvbXBhcmUpOworKwkgIF9fdGRlbGV0ZSAoJmZjdF9uYW1lLCAmbmktPmtub3duLnRyZWUsICZrbm93bl9jb21wYXJlKTsKKyAJICBmcmVlIChrbm93bik7CisgCSAgcmVzdWx0ID0gTlVMTDsKKyAJfQorQEAgLTUyMCwxMyArNTYxLDQzIEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgICAgIH0KKyAKKyAgIC8qIFJlbW92ZSB0aGUgbG9jay4gICovCistICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgdW5sb2NrX25zc3dpdGNoOworIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25zc19sb29rdXBfZnVuY3Rpb24pCisgCisgCisrI2Vsc2UgLyogYmVsb3cgaWYgISBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKysKKysKKytpbnQKKytfX25zc19jb25maWd1cmVfbG9va3VwIChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnNlcnZpY2VfbGluZSkKKyt7CisrICAvKiBXZSBjYW4ndCBkeW5hbWljYWxseSBjb25maWd1cmUgbG9va3VwIHdpdGhvdXQKKysgICAgIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0guICAqLworKyAgX19zZXRfZXJybm8gKEVJTlZBTCk7CisrICByZXR1cm4gLTE7CisrfQorKworKworK3ZvaWQgKgorK19fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisreworKyAgaW50IGk7CisrICBjb25zdCBrbm93bl9mdW5jdGlvbiAqKmtub3duID0gbmktPmtub3duLmFycmF5OworKworKyAgZm9yIChpID0gMDsga25vd25baV07IGkrKykKKysgICAgaWYgKHN0cmNtcCAoZmN0X25hbWUsIGtub3duW2ldLT5mY3RfbmFtZSkgPT0gMCkKKysgICAgICByZXR1cm4ga25vd25baV0tPmZjdF9wdHI7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX25zc19sb29rdXBfZnVuY3Rpb24pCisrI2VuZGlmCisrCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorIHN0YXRpYyBuYW1lX2RhdGFiYXNlICoKKyBpbnRlcm5hbF9mdW5jdGlvbgorIG5zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkKK0BAIC02MzIsOCArNzAzLDEwIEBAIG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisgCQkJCQkgICAgICsgKGxpbmUgLSBuYW1lICsgMSkpOworICAgICAgIGlmIChuZXdfc2VydmljZSA9PSBOVUxMKQorIAlyZXR1cm4gcmVzdWx0OworKyAgICAgIG5ld19zZXJ2aWNlLT5uYW1lID0gKGNoYXIgKikgKG5ld19zZXJ2aWNlICsgMSk7CisgCistICAgICAgKigoY2hhciAqKSBfX21lbXBjcHkgKG5ld19zZXJ2aWNlLT5uYW1lLCBuYW1lLCBsaW5lIC0gbmFtZSkpID0gJ1wwJzsKKysgICAgICAqKChjaGFyICopIF9fbWVtcGNweSAoKGNoYXIgKikgbmV3X3NlcnZpY2UtPm5hbWUsIG5hbWUsIGxpbmUgLSBuYW1lKSkKKysgICAgICAgID0gJ1wwJzsKKyAKKyAgICAgICAvKiBTZXQgZGVmYXVsdCBhY3Rpb25zLiAgKi8KKyAgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19UUllBR0FJTl0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworQEAgLTY0Miw3ICs3MTUsNyBAQCBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorICAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1NVQ0NFU1NdID0gTlNTX0FDVElPTl9SRVRVUk47CisgICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfUkVUVVJOXSA9IE5TU19BQ1RJT05fUkVUVVJOOworICAgICAgIG5ld19zZXJ2aWNlLT5saWJyYXJ5ID0gTlVMTDsKKy0gICAgICBuZXdfc2VydmljZS0+a25vd24gPSBOVUxMOworKyAgICAgIG5ld19zZXJ2aWNlLT5rbm93bi50cmVlID0gTlVMTDsKKyAgICAgICBuZXdfc2VydmljZS0+bmV4dCA9IE5VTEw7CisgCisgICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorQEAgLTc3OCw5ICs4NTEsMTAgQEAgbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpCisgICByZXN1bHQgPSAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSBtYWxsb2MgKHNpemVvZiAobmFtZV9kYXRhYmFzZV9lbnRyeSkgKyBsZW4pOworICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKysgIHJlc3VsdC0+bmFtZSA9IChjaGFyICopIChyZXN1bHQgKyAxKTsKKyAKKyAgIC8qIFNhdmUgdGhlIGRhdGFiYXNlIG5hbWUuICAqLworLSAgbWVtY3B5IChyZXN1bHQtPm5hbWUsIG5hbWUsIGxlbik7CisrICBtZW1jcHkgKChjaGFyICopIHJlc3VsdC0+bmFtZSwgbmFtZSwgbGVuKTsKKyAKKyAgIC8qIFBhcnNlIHRoZSBsaXN0IG9mIHNlcnZpY2VzLiAgKi8KKyAgIHJlc3VsdC0+c2VydmljZSA9IG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGxpbmUpOworQEAgLTgxNiw2ICs4OTAsNyBAQCBuc3NfbmV3X3NlcnZpY2UgKG5hbWVfZGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICpuYW1lKQorICAgcmV0dXJuICpjdXJyZW50cDsKKyB9CisgI2VuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworIAorIAorICNpZiBkZWZpbmVkIFNIQVJFRCAmJiBkZWZpbmVkIFVTRV9OU0NECitAQCAtODM0LDYgKzkwOSw3IEBAIG5zc19sb2FkX2FsbF9saWJyYXJpZXMgKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGNvbnN0IGNoYXIgKmRlZikKKyB9CisgCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogQ2FsbGVkIGJ5IG5zY2QgYW5kIG5zY2QgYWxvbmUuICAqLworIHZvaWQKKyBfX25zc19kaXNhYmxlX25zY2QgKHZvaWQgKCpjYikgKHNpemVfdCwgc3RydWN0IHRyYWNlZF9maWxlICopKQorQEAgLTg1Nyw4ICs5MzMsMTAgQEAgX19uc3NfZGlzYWJsZV9uc2NkICh2b2lkICgqY2IpIChzaXplX3QsIHN0cnVjdCB0cmFjZWRfZmlsZSAqKSkKKyAgIF9fbnNzX25vdF91c2VfbnNjZF9zZXJ2aWNlcyA9IC0xOworICAgX19uc3Nfbm90X3VzZV9uc2NkX25ldGdyb3VwID0gLTE7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyBzdGF0aWMgdm9pZAorIGZyZWVfZGF0YWJhc2VfZW50cmllcyAobmFtZV9kYXRhYmFzZV9lbnRyeSAqZW50cnkpCisgeworQEAgLTg3MSw4ICs5NDksOCBAQCBmcmVlX2RhdGFiYXNlX2VudHJpZXMgKG5hbWVfZGF0YWJhc2VfZW50cnkgKmVudHJ5KQorIAl7CisgCSAgc2VydmljZV91c2VyICpvbGRzID0gc2VydmljZTsKKyAKKy0JICBpZiAoc2VydmljZS0+a25vd24gIT0gTlVMTCkKKy0JICAgIF9fdGRlc3Ryb3kgKHNlcnZpY2UtPmtub3duLCBmcmVlKTsKKysJICBpZiAoc2VydmljZS0+a25vd24udHJlZSAhPSBOVUxMKQorKwkgICAgX190ZGVzdHJveSAoc2VydmljZS0+a25vd24udHJlZSwgZnJlZSk7CisgCisgCSAgc2VydmljZSA9IHNlcnZpY2UtPm5leHQ7CisgCSAgZnJlZSAob2xkcyk7CitAQCAtOTI2LDMgKzEwMDQsNCBAQCBsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorIAorICAgZnJlZSAodG9wKTsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworZGlmZiAtLWdpdCBhL25zcy9uc3N3aXRjaC5oIGIvbnNzL25zc3dpdGNoLmgKK2luZGV4IGE1MzE4ZmEuLjE3MzA5NzcgMTAwNjQ0CistLS0gYS9uc3MvbnNzd2l0Y2guaAorKysrIGIvbnNzL25zc3dpdGNoLmgKK0BAIC02NSwxMCArNjUsMjAgQEAgdHlwZWRlZiBzdHJ1Y3Qgc2VydmljZV91c2VyCisgICBsb29rdXBfYWN0aW9ucyBhY3Rpb25zWzVdOworICAgLyogTGluayB0byB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IG9iamVjdC4gICovCisgICBzZXJ2aWNlX2xpYnJhcnkgKmxpYnJhcnk7CistICAvKiBDb2xsZWN0aW9uIG9mIGtub3duIGZ1bmN0aW9ucy4gICovCistICB2b2lkICprbm93bjsKKysgIC8qIENvbGxlY3Rpb24gb2Yga25vd24gZnVuY3Rpb25zLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGVuYWJsZWQsIHRoaXMgaXMgdGhlIHJvb3Qgb2YgYQorKyAgICAgJ3RzZWFyY2gnLXN0eWxlIHRyZWUuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZGlzYWJsZWQsIHRoaXMgaXMgYW4gYXJyYXkgb2YKKysgICAgIHBvaW50ZXJzIHRvIGtub3duX2Z1bmN0aW9uIHN0cnVjdHVyZXMsIE5VTEwtdGVybWluYXRlZC4gICovCisrICB1bmlvbgorKyAgeworKyAgICB2b2lkICp0cmVlOworKyAgICBjb25zdCBrbm93bl9mdW5jdGlvbiAqKmFycmF5OworKyAgfSBrbm93bjsKKyAgIC8qIE5hbWUgb2YgdGhlIHNlcnZpY2UgKGBmaWxlcycsIGBkbnMnLCBgbmlzJywgLi4uKS4gICovCistICBjaGFyIG5hbWVbMF07CisrICBjb25zdCBjaGFyICpuYW1lOworIH0gc2VydmljZV91c2VyOworIAorIC8qIFRvIGFjY2VzcyB0aGUgYWN0aW9uIGJhc2VkIG9uIHRoZSBzdGF0dXMgdmFsdWUgdXNlIHRoaXMgbWFjcm8uICAqLworQEAgLTgyLDcgKzkyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgbmFtZV9kYXRhYmFzZV9lbnRyeQorICAgLyogTGlzdCBvZiBzZXJ2aWNlIHRvIGJlIHVzZWQuICAqLworICAgc2VydmljZV91c2VyICpzZXJ2aWNlOworICAgLyogTmFtZSBvZiB0aGUgZGF0YWJhc2UuICAqLworLSAgY2hhciBuYW1lWzBdOworKyAgY29uc3QgY2hhciAqbmFtZTsKKyB9IG5hbWVfZGF0YWJhc2VfZW50cnk7CisgCisgCitkaWZmIC0tZ2l0IGEvcG9zaXgvTWFrZWZpbGUgYi9wb3NpeC9NYWtlZmlsZQoraW5kZXggMTVlODgxOC4uNjA5ZWQwMyAxMDA2NDQKKy0tLSBhL3Bvc2l4L01ha2VmaWxlCisrKysgYi9wb3NpeC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIFBPU0lYIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gcG9zaXgKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC00MywxMyArNDUsMjQgQEAgcm91dGluZXMgOj0JCQkJCQkJCSAgICAgIFwKKyAJZ2V0cGdpZCBzZXRwZ2lkIGdldHBncnAgYnNkLWdldHBncnAgc2V0cGdycCBnZXRzaWQgc2V0c2lkCSAgICAgIFwKKyAJZ2V0cmVzdWlkIGdldHJlc2dpZCBzZXRyZXN1aWQgc2V0cmVzZ2lkCQkJCSAgICAgIFwKKyAJcGF0aGNvbmYgc3lzY29uZiBmcGF0aGNvbmYJCQkJCSAgICAgIFwKKy0JZ2xvYiBnbG9iNjQgZm5tYXRjaCByZWdleAkJCQkJICAgICAgXAorKwlnbG9iIGdsb2I2NCBmbm1hdGNoCQkJCQkJICAgICAgXAorIAljb25mc3RyCQkJCQkJCQkgICAgICBcCisgCWdldG9wdCBnZXRvcHQxIGdldG9wdF9pbml0CQkJCQkgICAgICBcCisgCXNjaGVkX3NldHAgc2NoZWRfZ2V0cCBzY2hlZF9zZXRzIHNjaGVkX2dldHMgc2NoZWRfeWllbGQgc2NoZWRfcHJpbWF4ICBcCisgCXNjaGVkX3ByaW1pbiBzY2hlZF9ycl9naSBzY2hlZF9nZXRhZmZpbml0eSBzY2hlZF9zZXRhZmZpbml0eQkgICAgICBcCistCWdldGFkZHJpbmZvIGdhaV9zdHJlcnJvciB3b3JkZXhwCQkJCSAgICAgIFwKKyAJcHJlYWQgcHdyaXRlIHByZWFkNjQgcHdyaXRlNjQJCQkJCSAgICAgIFwKKysJcG9zaXhfbWFkdmlzZQkJCQkJCQkgICAgICBcCisrCWdldF9jaGlsZF9tYXggc2NoZWRfY3B1Y291bnQgc2NoZWRfY3B1YWxsb2Mgc2NoZWRfY3B1ZnJlZQorKworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBnZXRhZGRyaW5mbyBnYWlfc3RyZXJyb3IKKysKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykpCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfUkVHRVhQKSArPSByZWdleAorK2Vsc2UKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9SRUdFWFApICs9IHhyZWdleAorK2VuZGlmCisrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NQQVdOKSArPQkJCQkJICAgICAgXAorIAlzcGF3bl9mYWN0aW9uX2luaXQgc3Bhd25fZmFjdGlvbl9kZXN0cm95IHNwYXduX2ZhY3Rpb25fYWRkY2xvc2UJICAgICAgXAorIAlzcGF3bl9mYWN0aW9uX2FkZG9wZW4gc3Bhd25fZmFjdGlvbl9hZGRkdXAyCQkJICAgICAgXAorIAlzcGF3bmF0dHJfaW5pdCBzcGF3bmF0dHJfZGVzdHJveQkJCQkgICAgICBcCitAQCAtNjEsMzcgKzc0LDU0IEBAIHJvdXRpbmVzIDo9CQkJCQkJCQkgICAgICBcCisgCXBvc2l4X21hZHZpc2UJCQkJCQkJICAgICAgXAorIAlnZXRfY2hpbGRfbWF4IHNjaGVkX2NwdWNvdW50IHNjaGVkX2NwdWFsbG9jIHNjaGVkX2NwdWZyZWUKKyAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfV09SREVYUCkgKz0gd29yZGV4cAorKworIGF1eAkJOj0gaW5pdC1wb3NpeCBlbnZpcm9uCistdGVzdHMJCTo9IHRzdGdldG9wdCB0ZXN0Zm5tIHJ1bnRlc3RzIHJ1bnB0ZXN0cwkgICAgIFwKKyt0ZXN0cwkJOj0gdHN0Z2V0b3B0IHRlc3Rmbm0gcnVudGVzdHMgXAorIAkJICAgdHN0LXByZWFkd3JpdGUgdHN0LXByZWFkd3JpdGU2NCB0ZXN0LXZmb3JrIHJlZ2V4YnVnMSBcCistCQkgICB0c3QtbW1hcCB0c3QtZ2V0YWRkcmluZm8gdHN0LXRydW5jYXRlIFwKKy0JCSAgIHRzdC10cnVuY2F0ZTY0IHRzdC1mb3JrIHRzdC1mbm1hdGNoIHRzdC1yZWdleGxvYyB0c3QtZGlyIFwKKy0JCSAgIHRzdC1jaG1vZCBidWctcmVnZXgxIGJ1Zy1yZWdleDIgYnVnLXJlZ2V4MyBidWctcmVnZXg0IFwKKy0JCSAgIHRzdC1nbnVnbG9iIHRzdC1yZWdleCBidWctcmVnZXg1IGJ1Zy1yZWdleDYgYnVnLXJlZ2V4NyBcCistCQkgICBidWctcmVnZXg4IGJ1Zy1yZWdleDkgYnVnLXJlZ2V4MTAgYnVnLXJlZ2V4MTEgYnVnLXJlZ2V4MTIgXAorLQkJICAgYnVnLXJlZ2V4MTMgYnVnLXJlZ2V4MTQgYnVnLXJlZ2V4MTUgYnVnLXJlZ2V4MTYgXAorLQkJICAgYnVnLXJlZ2V4MTcgYnVnLXJlZ2V4MTggYnVnLXJlZ2V4MTkgYnVnLXJlZ2V4MjAgXAorLQkJICAgYnVnLXJlZ2V4MjEgYnVnLXJlZ2V4MjIgYnVnLXJlZ2V4MjMgYnVnLXJlZ2V4MjQgXAorLQkJICAgYnVnLXJlZ2V4MjUgYnVnLXJlZ2V4MjYgYnVnLXJlZ2V4MjcgYnVnLXJlZ2V4MjggXAorKwkJICAgdHN0LW1tYXAgdHN0LXRydW5jYXRlIFwKKysJCSAgIHRzdC10cnVuY2F0ZTY0IHRzdC1mb3JrIHRzdC1kaXIgXAorKwkJICAgdHN0LWNobW9kIGJ1Zy1yZWdleDIgYnVnLXJlZ2V4MyBidWctcmVnZXg0IFwKKysJCSAgIHRzdC1nbnVnbG9iIGJ1Zy1yZWdleDYgYnVnLXJlZ2V4NyBcCisrCQkgICBidWctcmVnZXg4IGJ1Zy1yZWdleDkgYnVnLXJlZ2V4MTAgYnVnLXJlZ2V4MTIgXAorKwkJICAgYnVnLXJlZ2V4MTQgYnVnLXJlZ2V4MTUgXAorKwkJICAgYnVnLXJlZ2V4MjEgYnVnLXJlZ2V4MjQgXAorKwkJICAgYnVnLXJlZ2V4MjcgYnVnLXJlZ2V4MjggXAorIAkJICAgYnVnLXJlZ2V4MjkgYnVnLXJlZ2V4MzAgYnVnLXJlZ2V4MzEgYnVnLXJlZ2V4MzIgXAorLQkJICAgYnVnLXJlZ2V4MzMgdHN0LW5pY2UgdHN0LW5hbm9zbGVlcCB0c3QtcmVnZXgyIFwKKy0JCSAgIHRyYW5zYnVnIHRzdC1yeHNwZW5jZXIgdHN0LXBjcmUgdHN0LWJvb3N0IFwKKy0JCSAgIGJ1Zy1nYTEgdHN0LXZmb3JrMSB0c3QtdmZvcmsyIHRzdC12Zm9yazMgdHN0LXdhaXRpZCBcCistCQkgICB0c3QtZ2V0YWRkcmluZm8yIGJ1Zy1nbG9iMSBidWctZ2xvYjIgYnVnLWdsb2IzIHRzdC1zeXNjb25mIFwKKysJCSAgIHRzdC1uaWNlIHRzdC1uYW5vc2xlZXAgXAorKwkJICAgdHJhbnNidWcgXAorKwkJICAgdHN0LXZmb3JrMSB0c3QtdmZvcmsyIHRzdC12Zm9yazMgdHN0LXdhaXRpZCBcCisrCQkgICBidWctZ2xvYjEgYnVnLWdsb2IyIGJ1Zy1nbG9iMyB0c3Qtc3lzY29uZiBcCisgCQkgICB0c3QtZXhlY3ZwMSB0c3QtZXhlY3ZwMiB0c3QtZXhlY2xwMSB0c3QtZXhlY2xwMiBcCisgCQkgICB0c3QtZXhlY3YxIHRzdC1leGVjdjIgdHN0LWV4ZWNsMSB0c3QtZXhlY2wyIFwKKyAJCSAgIHRzdC1leGVjdmUxIHRzdC1leGVjdmUyIHRzdC1leGVjbGUxIHRzdC1leGVjbGUyIFwKKy0JCSAgIHRzdC1leGVjdnAzIHRzdC1leGVjdnA0IHRzdC1yZmMzNDg0IHRzdC1yZmMzNDg0LTIgXAorLQkJICAgdHN0LXJmYzM0ODQtMyBcCistCQkgICB0c3QtZ2V0YWRkcmluZm8zIHRzdC1mbm1hdGNoMiB0c3QtY3B1Y291bnQgdHN0LWNwdXNldCBcCisrCQkgICB0c3QtZXhlY3ZwMyB0c3QtZXhlY3ZwNCBcCisrCQkgICB0c3QtZm5tYXRjaDIgdHN0LWNwdWNvdW50IHRzdC1jcHVzZXQgXAorIAkJICAgYnVnLWdldG9wdDEgYnVnLWdldG9wdDIgYnVnLWdldG9wdDMgYnVnLWdldG9wdDQgXAorIAkJICAgYnVnLWdldG9wdDUgdHN0LWdldG9wdF9sb25nMSBidWctcmVnZXgzNCBidWctcmVnZXgzNSBcCisgCQkgICB0c3QtcGF0aGNvbmYgdHN0LWdldGFkZHJpbmZvNCB0c3QtcnhzcGVuY2VyLW5vLXV0ZjggXAorIAkJICAgdHN0LWZubWF0Y2gzIGJ1Zy1yZWdleDM2IHRzdC1nZXRhZGRyaW5mbzUKKy14dGVzdHMJCTo9IGJ1Zy1nYTIKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHRzdC1mbm1hdGNoIHRzdC1yZWdleGxvYyBidWctcmVnZXgxIGJ1Zy1yZWdleDUgXAorKwkJICAgYnVnLXJlZ2V4MjMgYnVnLXJlZ2V4MjUgYnVnLXJlZ2V4MzIgYnVnLXJlZ2V4MzMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkJKz0gdHN0LWdldGFkZHJpbmZvIGJ1Zy1nYTEgdHN0LWdldGFkZHJpbmZvMiBcCisrCQkgICB0c3QtcmZjMzQ4NCB0c3QtcmZjMzQ4NC0yIHRzdC1yZmMzNDg0LTMgdHN0LWdldGFkZHJpbmZvMworK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykgXAorKwkJKz0gcnVucHRlc3RzIGJ1Zy1yZWdleDExIGJ1Zy1yZWdleDEzIGJ1Zy1yZWdleDE2IFwKKysJCSAgIHRzdC1yZWdleDIgdHN0LXJ4c3BlbmNlciB0c3QtcGNyZSB0c3QtYm9vc3QKKytpZmVxICh5eSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSkKKyt0ZXN0cwkJKz0gdHN0LXJlZ2V4IGJ1Zy1yZWdleDE3IGJ1Zy1yZWdleDE4IGJ1Zy1yZWdleDE5IGJ1Zy1yZWdleDIwIFwKKysJCSAgIGJ1Zy1yZWdleDIyIGJ1Zy1yZWdleDI2CisrZW5kaWYKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGJ1Zy1nYTIKKysKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3Qtc3Jjcwk6PSBnbG9idGVzdAorLXRlc3RzICAgICAgICAgICArPSB3b3JkZXhwLXRlc3QgdHN0LWV4ZWMgdHN0LXNwYXduCisrdGVzdHMJCSs9IHRzdC1leGVjCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1NQQVdOKSArPSB0c3Qtc3Bhd24KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfV09SREVYUCkgKz0gd29yZGV4cC10ZXN0CisgZW5kaWYKKyB0ZXN0cy1zdGF0aWMJPSB0c3QtZXhlYy1zdGF0aWMgdHN0LXNwYXduLXN0YXRpYworIHRlc3RzCQkrPSAkKHRlc3RzLXN0YXRpYykKK0BAIC0xMTcsNyArMTQ3LDEwIEBAIGdlbmVyYXRlZCArPSAkKGFkZHByZWZpeCB3b3JkZXhwLXRlc3QtcmVzdWx0LCAxIDIgMyA0IDUgNiA3IDggOSAxMCkgXAorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKy10ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWdsb2J0ZXN0Lm91dCAkKG9ianBmeCl3b3JkZXhwLXRzdC5vdXQKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWdsb2J0ZXN0Lm91dAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX1dPUkRFWFApKQorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpd29yZGV4cC10c3Qub3V0CisrZW5kaWYKKyBlbmRpZgorIGVuZGlmCisgCitAQCAtMTI1LDEyICsxNTgsMTYgQEAgZW5kaWYKKyAjIFhYWCBQbGVhc2Ugbm90ZSB0aGF0IGZvciBub3cgd2UgaWdub3JlIHRoZSByZXN1bHQgb2YgdGhpcyB0ZXN0LgorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYW5uZXhjLm91dAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCistdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctcmVnZXgyLW1lbS5vdXQgJChvYmpwZngpYnVnLXJlZ2V4MTQtbWVtLm91dCBcCisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctcmVnZXgyLW1lbS5vdXQgXAorIAkJICQob2JqcGZ4KWJ1Zy1yZWdleDIxLW1lbS5vdXQgJChvYmpwZngpYnVnLXJlZ2V4MzEtbWVtLm91dCBcCistCQkgJChvYmpwZngpdHN0LXJ4c3BlbmNlci1uby11dGY4LW1lbS5vdXQgJChvYmpwZngpdHN0LXBjcmUtbWVtLm91dCBcCistCQkgJChvYmpwZngpdHN0LWJvb3N0LW1lbS5vdXQgJChvYmpwZngpdHN0LWdldGNvbmYub3V0IFwKKysJCSAkKG9ianBmeCl0c3QtZ2V0Y29uZi5vdXQgXAorIAkJICQob2JqcGZ4KWJ1Zy1nbG9iMi1tZW0ub3V0ICQob2JqcGZ4KXRzdC12Zm9yazMtbWVtLm91dCBcCisgCQkgJChvYmpwZngpdHN0LWZubWF0Y2gtbWVtLm91dCAkKG9ianBmeClidWctcmVnZXgzNi1tZW0ub3V0CisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpKQorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLXJlZ2V4MTQtbWVtLm91dCAkKG9ianBmeCl0c3QtcnhzcGVuY2VyLW5vLXV0ZjgtbWVtLm91dCBcCisrICAJCSAkKG9ianBmeCl0c3QtcGNyZS1tZW0ub3V0ICQob2JqcGZ4KXRzdC1ib29zdC1tZW0ub3V0CisrZW5kaWYKKysKKyB4dGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctZ2EyLW1lbS5vdXQKKyBlbmRpZgorIAorQEAgLTE0Myw2ICsxODAsOCBAQCAkKG9ianBmeClnbG9idGVzdC5vdXQ6IGdsb2J0ZXN0LnNoICQob2JqcGZ4KWdsb2J0ZXN0CisgCSQoU0hFTEwpICQ8ICQoY29tbW9uLW9ianBmeCkgJyQodGVzdC12aWEtcnRsZC1wcmVmaXgpJyBcCisgCQknJCh0ZXN0LXByb2dyYW0tcHJlZml4KScgJyQodGVzdC13cmFwcGVyLWVudiknOyBcCisgCSQoZXZhbHVhdGUtdGVzdCkKKytMRExJQlMtZ2xvYnRlc3QgKz0gJChzaGVsbCBjYXQgJChjb21tb24tb2JqcGZ4KW5zcy9maXhlZC1uc3N3aXRjaC1saWJzKQorKworICQob2JqcGZ4KXdvcmRleHAtdHN0Lm91dDogd29yZGV4cC10c3Quc2ggJChvYmpwZngpd29yZGV4cC10ZXN0CisgCSQoU0hFTEwpICQ8ICQoY29tbW9uLW9ianBmeCkgJyQodGVzdC1wcm9ncmFtLXByZWZpeC1iZWZvcmUtZW52KScgXAorIAkJICckKHJ1bi1wcm9ncmFtLWVudiknICckKHRlc3QtcHJvZ3JhbS1wcmVmaXgtYWZ0ZXItZW52KSc7IFwKK0BAIC0yMDUsNyArMjQ0LDEwIEBAIHRzdC1kaXItQVJHUyA9IGBwd2RgIGBjZCAkKGNvbW1vbi1vYmpkaXIpLyQoc3ViZGlyKTsgcHdkYCBgY2QgJChjb21tb24tb2JqZGlyKTsKKyB0c3QtY2htb2QtQVJHUyA9ICQob2JqZGlyKQorIHRzdC12Zm9yazMtQVJHUyA9IC0tdGVzdC1kaXI9JChvYmpwZngpCisgCistdHN0LXJ4c3BlbmNlci1BUkdTID0gLS11dGY4IHJ4c3BlbmNlci90ZXN0cworK3RzdC1yeHNwZW5jZXItQVJHUyA9IHJ4c3BlbmNlci90ZXN0cworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyt0c3QtcnhzcGVuY2VyLUFSR1MgKz0gLS11dGY4CisrZW5kaWYKKyB0c3QtcnhzcGVuY2VyLW5vLXV0ZjgtQVJHUyA9IHJ4c3BlbmNlci90ZXN0cworIHRzdC1wY3JlLUFSR1MgPSBQQ1JFLnRlc3RzCisgdHN0LWJvb3N0LUFSR1MgPSBCT09TVC50ZXN0cworZGlmZiAtLWdpdCBhL3Bvc2l4L2J1Zy1yZWdleDEuYyBiL3Bvc2l4L2J1Zy1yZWdleDEuYworaW5kZXggMzhlYjU0My4uMTdjZDFhMCAxMDA2NDQKKy0tLSBhL3Bvc2l4L2J1Zy1yZWdleDEuYworKysrIGIvcG9zaXgvYnVnLXJlZ2V4MS5jCitAQCAtNCw2ICs0LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHJlZ2V4Lmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgaW50CisgbWFpbiAodm9pZCkKK0BAIC0xNyw3ICsxOCw5IEBAIG1haW4gKHZvaWQpCisgICBtZW1zZXQgKCZyZWdleCwgJ1wwJywgc2l6ZW9mIChyZWdleCkpOworIAorICAgc2V0bG9jYWxlIChMQ19BTEwsICJkZV9ERS5JU08tODg1OS0xIik7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgIGZ3aWRlIChzdGRvdXQsIC0xKTsKKysjZW5kaWYKKyAKKyAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCB8IFJFX0RFQlVHKTsKKyAKK2RpZmYgLS1naXQgYS9wb3NpeC9idWctcmVnZXg2LmMgYi9wb3NpeC9idWctcmVnZXg2LmMKK2luZGV4IGVmY2M4OTAuLjNiMjcwYzcgMTAwNjQ0CistLS0gYS9wb3NpeC9idWctcmVnZXg2LmMKKysrKyBiL3Bvc2l4L2J1Zy1yZWdleDYuYworQEAgLTIyLDYgKzIyLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxyZWdleC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIGludAorQEAgLTMwLDcgKzMxLDEyIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICByZWdleF90IHJlOworICAgcmVnbWF0Y2hfdCBtYXRbMTBdOworICAgaW50IGksIGosIHJldCA9IDA7CistICBjb25zdCBjaGFyICpsb2NhbGVzW10gPSB7ICJDIiwgImRlX0RFLlVURi04IiB9OworKyAgY29uc3QgY2hhciAqbG9jYWxlc1tdID0geworKyAgICAiQyIsCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAiZGVfREUuVVRGLTgiCisrI2VuZGlmCisrICB9OworICAgY29uc3QgY2hhciAqc3RyaW5nID0gImh0dHA6Ly93d3cucmVnZXguY29tL3BhdHRlcm4vbWF0Y2hpbmcuaHRtbCNpbnRybyI7CisgICByZWdtYXRjaF90IGV4cGVjdFsxMF0gPSB7CisgICAgIHsgMCwgNDggfSwgeyAwLCA1IH0sIHsgMCwgNCB9LCB7IDUsIDIwIH0sIHsgNywgMjAgfSwgeyAyMCwgNDIgfSwKK2RpZmYgLS1naXQgYS9wb3NpeC9mbm1hdGNoLmMgYi9wb3NpeC9mbm1hdGNoLmMKK2luZGV4IGZkODVlZmEuLjAxY2M5ZmUgMTAwNjQ0CistLS0gYS9wb3NpeC9mbm1hdGNoLmMKKysrKyBiL3Bvc2l4L2ZubWF0Y2guYworQEAgLTMwLDYgKzMwLDEwIEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKyNpZiBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyAjZW5kaWYKK0BAIC0xMzEsNyArMTM1LDcgQEAgZXh0ZXJuIGludCBmbm1hdGNoIChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBmbGFncyk7CisgIyAgIGRlZmluZSBJU1dDVFlQRShXQywgV1QpCWlzd2N0eXBlIChXQywgV1QpCisgIyAgZW5kaWYKKyAKKy0jICBpZiAoSEFWRV9NQlNUQVRFX1QgJiYgSEFWRV9NQlNSVE9XQ1MpIHx8IF9MSUJDCisrIyAgaWYgKEhBVkVfTUJTVEFURV9UICYmIEhBVkVfTUJTUlRPV0NTICYmIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkKKyAvKiBJbiB0aGlzIGNhc2Ugd2UgYXJlIGltcGxlbWVudGluZyB0aGUgbXVsdGlieXRlIGNoYXJhY3RlciBoYW5kbGluZy4gICovCisgIyAgIGRlZmluZSBIQU5ETEVfTVVMVElCWVRFCTEKKyAjICBlbmRpZgorZGlmZiAtLWdpdCBhL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jIGIvcG9zaXgvZm5tYXRjaF9sb29wLmMKK2luZGV4IGY0NmM5ZGYuLjc0ZTE3NTQgMTAwNjQ0CistLS0gYS9wb3NpeC9mbm1hdGNoX2xvb3AuYworKysrIGIvcG9zaXgvZm5tYXRjaF9sb29wLmMKK0BAIC0xNSw2ICsxNSw4IEBACisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrCisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorIHN0cnVjdCBTVFJVQ1QKK0BAIC01NCwxMCArNTYsMTUgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgICBjb25zdCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IGNoYXIgKikKKyAgICAgX05MX0NVUlJFTlQoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKyAjIGVsc2UKKysjICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGNvbnN0IFVDSEFSICpjb2xsc2VxID0gKGNvbnN0IFVDSEFSICopCisgICAgIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CistIyBlbmRpZgorLSNlbmRpZgorKyMgICBkZWZpbmUgQ09MTFNFUV9CWVRFX0xPT0tVUChpeCkgKGNvbGxzZXFbKGl4KV0pCisrIyAgZWxzZQorKyMgICBkZWZpbmUgQ09MTFNFUV9CWVRFX0xPT0tVUChpeCkgKGl4KQorKyMgIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworKyMgZW5kaWYgLyogV0lERV9DSEFSX1ZFUlNJT04gKi8KKysjZW5kaWYgLyogX0xJQkMgKi8KKyAKKyAgIHdoaWxlICgoYyA9ICpwKyspICE9IEwoJ1wwJykpCisgICAgIHsKK0BAIC0yNzcsNyArMjg0LDcgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkgICAgLyogTGVhdmUgcm9vbSBmb3IgdGhlIG51bGwuICAqLworIAkJICAgIENIQVIgc3RyW0NIQVJfQ0xBU1NfTUFYX0xFTkdUSCArIDFdOworIAkJICAgIHNpemVfdCBjMSA9IDA7CistI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKysjaWYgZGVmaW5lZCBfTElCQyA/IF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgOiAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorIAkJICAgIHdjdHlwZV90IHd0OworICNlbmRpZgorIAkJICAgIGNvbnN0IENIQVIgKnN0YXJ0cCA9IHA7CitAQCAtMzA3LDcgKzMxNCw3IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJICAgICAgfQorIAkJICAgIHN0cltjMV0gPSBMKCdcMCcpOworIAorLSNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisrI2lmIGRlZmluZWQgX0xJQkMgPyBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIDogKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKyAJCSAgICB3dCA9IElTX0NIQVJfQ0xBU1MgKHN0cik7CisgCQkgICAgaWYgKHd0ID09IDApCisgCQkgICAgICAvKiBJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgKi8KK0BAIC02ODAsOCArNjg3LDEwIEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJCWVsc2UKKyAJCQkgIGxjb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcSwgY29sZCk7CisgIyBlbHNlCistCQkJZmNvbGxzZXEgPSBjb2xsc2VxW2ZuXTsKKy0JCQlsY29sbHNlcSA9IGlzX3NlcXZhbCA/IGNvbGQgOiBjb2xsc2VxWyhVQ0hBUikgY29sZF07CisrCQkJZmNvbGxzZXEgPSBDT0xMU0VRX0JZVEVfTE9PS1VQIChmbik7CisrCQkJbGNvbGxzZXEgPSAoaXNfc2VxdmFsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2xkCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xMU0VRX0JZVEVfTE9PS1VQICgoVUNIQVIpIGNvbGQpKTsKKyAjIGVuZGlmCisgCisgCQkJaXNfc2VxdmFsID0gMDsKK0BAIC04NTcsNyArODY2LDcgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkJCSAgICBnb3RvIG1hdGNoZWQ7CisgCQkJCSAgfQorICMgZWxzZQorLQkJCQloY29sbHNlcSA9IGNvbGxzZXFbY2VuZF07CisrCQkJCWhjb2xsc2VxID0gQ09MTFNFUV9CWVRFX0xPT0tVUCAoY2VuZCk7CisgIyBlbmRpZgorIAkJCSAgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9wb3NpeC9nbG9iLmMgYi9wb3NpeC9nbG9iLmMKK2luZGV4IGQ2NWU1NWQuLjFhYzAwYTEgMTAwNjQ0CistLS0gYS9wb3NpeC9nbG9iLmMKKysrKyBiL3Bvc2l4L2dsb2IuYworQEAgLTI1LDYgKzI1LDkgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKyAKKyAvKiBPdXRjb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBmb3IgcHJvZHVjdGlvbiBxdWFsaXR5IGNvZGUuICAqLworIC8qICNkZWZpbmUgTkRFQlVHIDEgKi8KK0BAIC02MDcsNiArNjEwLDcgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkgIGlmIChob21lX2RpciA9PSBOVUxMIHx8IGhvbWVfZGlyWzBdID09ICdcMCcpCisgCSAgICBob21lX2RpciA9ICJjOi91c2Vycy9kZWZhdWx0IjsgLyogcG9vciBkZWZhdWx0ICovCisgIyAgZWxzZQorKyMgICBpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19HRVRMT0dJTgorIAkgIGlmIChob21lX2RpciA9PSBOVUxMIHx8IGhvbWVfZGlyWzBdID09ICdcMCcpCisgCSAgICB7CisgCSAgICAgIGludCBzdWNjZXNzOworQEAgLTYyMywxOSArNjI3LDE5IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJICAgICAgaWYgKHN1Y2Nlc3MpCisgCQl7CisgCQkgIHN0cnVjdCBwYXNzd2QgKnA7CistIyAgIGlmIGRlZmluZWQgSEFWRV9HRVRQV05BTV9SIHx8IGRlZmluZWQgX0xJQkMKKysjICAgIGlmIGRlZmluZWQgSEFWRV9HRVRQV05BTV9SIHx8IGRlZmluZWQgX0xJQkMKKyAJCSAgbG9uZyBpbnQgcHdidWZsZW4gPSBHRVRQV19SX1NJWkVfTUFYICgpOworIAkJICBjaGFyICpwd3RtcGJ1ZjsKKyAJCSAgc3RydWN0IHBhc3N3ZCBwd2J1ZjsKKyAJCSAgaW50IG1hbGxvY19wd3RtcGJ1ZiA9IDA7CisgCQkgIGludCBzYXZlID0gZXJybm87CisgCistIyAgICBpZm5kZWYgX0xJQkMKKysjICAgICBpZm5kZWYgX0xJQkMKKyAJCSAgaWYgKHB3YnVmbGVuID09IC0xKQorIAkJICAgIC8qIGBzeXNjb25mJyBkb2VzIG5vdCBzdXBwb3J0IF9TQ19HRVRQV19SX1NJWkVfTUFYLgorIAkJICAgICAgIFRyeSBhIG1vZGVyYXRlIHZhbHVlLiAgKi8KKyAJCSAgICBwd2J1ZmxlbiA9IDEwMjQ7CistIyAgICBlbmRpZgorKyMgICAgIGVuZGlmCisgCQkgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAoYWxsb2NhX3VzZWQgKyBwd2J1ZmxlbikpCisgCQkgICAgcHd0bXBidWYgPSBhbGxvY2FfYWNjb3VudCAocHdidWZsZW4sIGFsbG9jYV91c2VkKTsKKyAJCSAgZWxzZQorQEAgLTY4Miw5ICs2ODYsOSBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCQkJfQorIAkJICAgICAgX19zZXRfZXJybm8gKHNhdmUpOworIAkJICAgIH0KKy0jICAgZWxzZQorKyMgICAgZWxzZQorIAkJICBwID0gZ2V0cHduYW0gKG5hbWUpOworLSMgICBlbmRpZgorKyMgICAgZW5kaWYKKyAJCSAgaWYgKHAgIT0gTlVMTCkKKyAJCSAgICB7CisgCQkgICAgICBpZiAoIW1hbGxvY19wd3RtcGJ1ZikKK0BAIC03MTMsNiArNzE3LDcgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkJICAgIH0KKyAJCX0KKyAJICAgIH0KKysjICAgZW5kaWYgLyogISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfR0VUTE9HSU4gKi8KKyAJICBpZiAoaG9tZV9kaXIgPT0gTlVMTCB8fCBob21lX2RpclswXSA9PSAnXDAnKQorIAkgICAgeworIAkgICAgICBpZiAoZmxhZ3MgJiBHTE9CX1RJTERFX0NIRUNLKQorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2NvbXAuYyBiL3Bvc2l4L3JlZ2NvbXAuYworaW5kZXggYmY4YWExNi4uNmE0MTI1MSAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2NvbXAuYworKysrIGIvcG9zaXgvcmVnY29tcC5jCitAQCAtMTgsNiArMTgsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorQEAgLTMwOSw3ICszMTAsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyB7CisgICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGJ1ZnAtPmJ1ZmZlcjsKKyAgIGludCBub2RlX2NudDsKKy0gIGludCBpY2FzZSA9IChkZmEtPm1iX2N1cl9tYXggPT0gMSAmJiAoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpKTsKKysgIGludCBpY2FzZSA9IChkZmFfbWJfY3VyX21heCAoZGZhKSA9PSAxICYmIChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkpOworICAgZm9yIChub2RlX2NudCA9IDA7IG5vZGVfY250IDwgaW5pdF9zdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgIHsKKyAgICAgICBpbnQgbm9kZSA9IGluaXRfc3RhdGUtPm5vZGVzLmVsZW1zW25vZGVfY250XTsKK0BAIC0zMTksOSArMzIwLDkgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCXsKKyAJICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGRmYS0+bm9kZXNbbm9kZV0ub3ByLmMpOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkgICAgeworLQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBhbGxvY2EgKGRmYS0+bWJfY3VyX21heCksICpwOworKwkgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBhbGxvY2EgKGRmYV9tYl9jdXJfbWF4IChkZmEpKSwgKnA7CisgCSAgICAgIHdjaGFyX3Qgd2M7CisgCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAKK0BAIC0zNTIsNyArMzUzLDExIEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkJICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGNoKTsKKyAJICAgIH0KKyAJfQorLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKworKyAgICAgIC8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhlIGN1cnJlbnQKKysgICAgICAgICBsb2NhbGUgaXMgYWx3YXlzIEMsIHdoaWNoIGhhcyBubyBydWxlcyBhbmQgbm8gbXVsdGktYnl0ZQorKyAgICAgICAgIGNoYXJhY3RlcnMuICAqLworKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorIAl7CisgCSAgcmVfY2hhcnNldF90ICpjc2V0ID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIubWJjc2V0OworQEAgLTM4MCw3ICszODUsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJICAgICBpLmUuIHdoZXJlIHdlIHdvdWxkIG5vdCBmaW5kIGFuIGludmFsaWQgc2VxdWVuY2UuICBUaGlzIG9ubHkKKyAJICAgICBhcHBsaWVzIHRvIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0czsgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcgorIAkgICAgIHNldHMsIHRoZSBTSU1QTEVfQlJBQ0tFVCBhZ2FpbiBzdWZmaWNlcy4gICovCistCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEKKysJICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxCisgCSAgICAgICYmIChjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5vbl9tYXRjaCB8fCBjc2V0LT5ucmFuZ2VzCisgIyBpZmRlZiBfTElCQworIAkJICB8fCBjc2V0LT5uZXF1aXZfY2xhc3NlcworQEAgLTQwOCw3ICs0MTMsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJCSAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAoc3RhdGUpKTsKKyAJCSAgaWYgKF9fd2NydG9tYiAoYnVmLCBjc2V0LT5tYmNoYXJzW2ldLCAmc3RhdGUpICE9IChzaXplX3QpIC0xKQorIAkJICAgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgKih1bnNpZ25lZCBjaGFyICopIGJ1Zik7CistCQkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisrCQkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJCSAgICB7CisgCQkgICAgICBpZiAoX193Y3J0b21iIChidWYsIF9fdG93bG93ZXIgKGNzZXQtPm1iY2hhcnNbaV0pLCAmc3RhdGUpCisgCQkJICAhPSAoc2l6ZV90KSAtMSkKK0BAIC00MTcsNyArNDIyLDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCQl9CisgCSAgICB9CisgCX0KKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAJICAgICAgIHx8IHR5cGUgPT0gT1BfVVRGOF9QRVJJT0QKK0BAIC04NjAsMTEgKzg2NSwxNSBAQCBpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pCisgCisgICBkZmEtPm1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworICNpZmRlZiBfTElCQworLSAgaWYgKGRmYS0+bWJfY3VyX21heCA9PSA2CisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gNgorICAgICAgICYmIHN0cmNtcCAoX05MX0NVUlJFTlQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FKSwgIlVURi04IikgPT0gMCkKKyAgICAgZGZhLT5pc191dGY4ID0gMTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgZGZhLT5tYXBfbm90YXNjaWkgPSAoX05MX0NVUlJFTlRfV09SRCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9NQVBfVE9fTk9OQVNDSUkpCisgCQkgICAgICAgIT0gMCk7CisrIyBlbHNlCisrICBkZmEtPm1hcF9ub3Rhc2NpaSA9IDA7CisrIyBlbmRpZgorICNlbHNlCisgIyBpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAgIGNvZGVzZXRfbmFtZSA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKK0BAIC04OTAsNyArODk5LDcgQEAgaW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKQorICNlbmRpZgorIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICB7CisgICAgICAgaWYgKGRmYS0+aXNfdXRmOCkKKyAJZGZhLT5zYl9jaGFyID0gKHJlX2JpdHNldF9wdHJfdCkgdXRmOF9zYl9tYXA7CitAQCAtMTc4OCw3ICsxNzk3LDcgQEAgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAgIHRva2VuLT53b3JkX2NoYXIgPSAwOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgdG9rZW4tPm1iX3BhcnRpYWwgPSAwOworLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxICYmCisgICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgIHsKKyAgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKK0BAIC0xODA5LDcgKzE4MTgsNyBAQCBwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorICAgICAgIHRva2VuLT5vcHIuYyA9IGMyOworICAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxKQorIAl7CisgCSAgd2ludF90IHdjID0gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwKKyAJCQkJCSAgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEpOworQEAgLTE5MjMsNyArMTkzMiw3IEBAIHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgCisgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEpCisgICAgIHsKKyAgICAgICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKTsKKyAgICAgICB0b2tlbi0+d29yZF9jaGFyID0gSVNfV0lERV9XT1JEX0NIQVIgKHdjKSAhPSAwOworQEAgLTIwMjMsNyArMjAzMiw3IEBAIHBlZWtfdG9rZW5fYnJhY2tldCAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAgIHRva2VuLT5vcHIuYyA9IGM7CisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxICYmCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEgJiYKKyAgICAgICAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKSkKKyAgICAgeworICAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworQEAgLTIyNDYsNyArMjI1NSw3IEBAIHBhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgIHJldHVybiBOVUxMOworIAl9CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJeworIAkgIHdoaWxlICghcmVfc3RyaW5nX2VvaSAocmVnZXhwKQorIAkJICYmICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSkpCitAQCAtMjM4NCw3ICsyMzkzLDcgQEAgcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgKmVyciA9IFJFR19FU1BBQ0U7CisgCSAgcmV0dXJuIE5VTEw7CisgCX0KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAlkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBPUF9XT1JEOgorQEAgLTI2OTAsNyArMjY5OSw3IEBAIGJ1aWxkX3JhbmdlX2V4cCAoYml0c2V0X3Qgc2Jjc2V0LCBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwKKyAgICAgICAgSG93ZXZlciwgZm9yICFfTElCQyB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBlbGVtZW50czogaWYgdGhlCisgICAgICAgIGNoYXJhY3RlciBzZXQgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0CisgICAgICAgIHRoYXQgd2UgYnVpbGQgYmVsb3cgc3VmZmljZXMuICBwYXJzZV9icmFja2V0X2V4cCBwYXNzZXMKKy0gICAgICAgbm8gTUJDU0VUIGlmIGRmYS0+bWJfY3VyX21heCA9PSAxLiAgKi8KKysgICAgICAgbm8gTUJDU0VUIGlmIGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDEuICAqLworICAgICBpZiAobWJjc2V0KQorICAgICAgIHsKKyAJLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworQEAgLTI3ODYsNyArMjc5NSwxMyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCQkgICByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCisgeworICNpZmRlZiBfTElCQworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxzZXFtYjsKKysjIGRlZmluZSBDT0xMU0VRTUJfTE9PS1VQKGl4KSAoY29sbHNlcW1iWyhpeCldKQorKyNlbHNlCisrIyBkZWZpbmUgQ09MTFNFUU1CX0xPT0tVUChpeCkgKGl4KQorKyNlbmRpZgorKworICAgY29uc3QgY2hhciAqY29sbHNlcXdjOworICAgdWludDMyX3QgbnJ1bGVzOworICAgaW50MzJfdCB0YWJsZV9zaXplOworQEAgLTI4MzQsMTggKzI4NDksMjAgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgIGlmIChNQl9DVVJfTUFYID09IDEpCisgCSAgKi8KKyAJICBpZiAobnJ1bGVzID09IDApCistCSAgICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5jaF07CisrCSAgICByZXR1cm4gQ09MTFNFUU1CX0xPT0tVUCAoYnJfZWxlbS0+b3ByLmNoKTsKKyAJICBlbHNlCisgCSAgICB7CisgCSAgICAgIHdpbnRfdCB3YyA9IF9fYnRvd2MgKGJyX2VsZW0tPm9wci5jaCk7CisgCSAgICAgIHJldHVybiBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIHdjKTsKKyAJICAgIH0KKyAJfQorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IE1CX0NIQVIpCisgCXsKKyAJICBpZiAobnJ1bGVzICE9IDApCisgCSAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBicl9lbGVtLT5vcHIud2NoKTsKKyAJfQorKyNlbmRpZgorICAgICAgIGVsc2UgaWYgKGJyX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisgCXsKKyAJICBzaXplX3Qgc3ltX25hbWVfbGVuID0gc3RybGVuICgoY2hhciAqKSBicl9lbGVtLT5vcHIubmFtZSk7CitAQCAtMjg3NiwxMSArMjg5MywxMSBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCQl7CisgCQkgIC8qIE5vIHZhbGlkIGNoYXJhY3Rlci4gIE1hdGNoIGl0IGFzIGEgc2luZ2xlIGJ5dGUKKyAJCSAgICAgY2hhcmFjdGVyLiAgKi8KKy0JCSAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisrCQkgIHJldHVybiBDT0xMU0VRTUJfTE9PS1VQIChicl9lbGVtLT5vcHIubmFtZVswXSk7CisgCQl9CisgCSAgICB9CisgCSAgZWxzZSBpZiAoc3ltX25hbWVfbGVuID09IDEpCistCSAgICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5uYW1lWzBdXTsKKysJICAgIHJldHVybiBDT0xMU0VRTUJfTE9PS1VQIChicl9lbGVtLT5vcHIubmFtZVswXSk7CisgCX0KKyAgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgIH0KK0BAIC0yOTIwLDcgKzI5MzcsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSBIb3dldmVyLCBpZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBlbGVtZW50cywgYW5kIHRoZSBjaGFyYWN0ZXIgc2V0CisgCSBpcyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQgdGhhdCB3ZQorIAkgYnVpbGQgYmVsb3cgc3VmZmljZXMuICovCistICAgICAgaWYgKG5ydWxlcyA+IDAgfHwgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAobnJ1bGVzID4gMCB8fCBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCXsKKyAJICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisgCSAgaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2VzLCAwKSkKK0BAIC0yOTU3LDcgKzI5NzQsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKyAJICAqLworIAkgIGlmIChucnVsZXMgPT0gMCkKKy0JICAgIGNoX2NvbGxzZXEgPSBjb2xsc2VxbWJbY2hdOworKwkgICAgY2hfY29sbHNlcSA9IENPTExTRVFNQl9MT09LVVAgKGNoKTsKKyAJICBlbHNlCisgCSAgICBjaF9jb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBfX2J0b3djIChjaCkpOworIAkgIGlmIChzdGFydF9jb2xsc2VxIDw9IGNoX2NvbGxzZXEgJiYgY2hfY29sbHNlcSA8PSBlbmRfY29sbHNlcSkKK0BAIC0zMDM1LDcgKzMwNTIsMTAgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorICAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworLSAgaW50IGNvbGxfc3ltX2FsbG9jID0gMCwgcmFuZ2VfYWxsb2MgPSAwLCBtYmNoYXJfYWxsb2MgPSAwOworKyAgaW50IGNvbGxfc3ltX2FsbG9jID0gMCwgcmFuZ2VfYWxsb2MgPSAwOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgIGludCBtYmNoYXJfYWxsb2MgPSAwOworKyNlbmRpZgorICAgaW50IGVxdWl2X2NsYXNzX2FsbG9jID0gMCwgY2hhcl9jbGFzc19hbGxvYyA9IDA7CisgI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgaW50IG5vbl9tYXRjaCA9IDA7CitAQCAtMzA0Myw5ICszMDYzLDE1IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAgIGludCB0b2tlbl9sZW47CisgICBpbnQgZmlyc3Rfcm91bmQgPSAxOworICNpZmRlZiBfTElCQworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGNvbGxzZXFtYiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjZWxzZQorKyAgLyogVGhpcyBpcyB0cnVlIHdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgYnV0IHRoZQorKyAgICAgY29tcGlsZXIgY2FuJ3QgZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIG5ydWxlcyA9IDA7CisrI2VuZGlmCisgICBpZiAobnJ1bGVzKQorICAgICB7CisgICAgICAgLyoKK0BAIC0zMTc1LDcgKzMyMDEsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgI2Vsc2UKKyAjIGlmZGVmIFJFX0VOQUJMRV9JMThOCisgCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LAorLQkJCQkgIGRmYS0+bWJfY3VyX21heCA+IDEgPyBtYmNzZXQgOiBOVUxMLAorKwkJCQkgIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSA/IG1iY3NldCA6IE5VTEwsCisgCQkJCSAgJnJhbmdlX2FsbG9jLCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyAjIGVsc2UKKyAJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworQEAgLTMxOTEsNyArMzIxNyw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICAgIGNhc2UgU0JfQ0hBUjoKKyAJICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBzdGFydF9lbGVtLm9wci5jaCk7CisgCSAgICAgIGJyZWFrOworLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgY2FzZSBNQl9DSEFSOgorIAkgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKyAJICAgICAgaWYgKEJFIChtYmNoYXJfYWxsb2MgPT0gbWJjc2V0LT5ubWJjaGFycywgMCkpCitAQCAtMzIwOSw3ICszMjM1LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkJfQorIAkgICAgICBtYmNzZXQtPm1iY2hhcnNbbWJjc2V0LT5ubWJjaGFycysrXSA9IHN0YXJ0X2VsZW0ub3ByLndjaDsKKyAJICAgICAgYnJlYWs7CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAkgICAgY2FzZSBFUVVJVl9DTEFTUzoKKyAJICAgICAgKmVyciA9IGJ1aWxkX2VxdWl2X2NsYXNzIChzYmNzZXQsCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCitAQCAtMzI1OSwxMSArMzI4NSwxMSBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAvKiBFbnN1cmUgb25seSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzZXQuICAqLworLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICBiaXRzZXRfbWFzayAoc2Jjc2V0LCBkZmEtPnNiX2NoYXIpOworIAorICAgaWYgKG1iY3NldC0+bm1iY2hhcnMgfHwgbWJjc2V0LT5uY29sbF9zeW1zIHx8IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMKKy0gICAgICB8fCBtYmNzZXQtPm5yYW5nZXMgfHwgKGRmYS0+bWJfY3VyX21heCA+IDEgJiYgKG1iY3NldC0+bmNoYXJfY2xhc3NlcworKyAgICAgIHx8IG1iY3NldC0+bnJhbmdlcyB8fCAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxICYmIChtYmNzZXQtPm5jaGFyX2NsYXNzZXMKKyAJCQkJCQkgICAgIHx8IG1iY3NldC0+bm9uX21hdGNoKSkpCisgICAgIHsKKyAgICAgICBiaW5fdHJlZV90ICptYmNfdHJlZTsKK0BAIC0zMzMyLDcgKzMzNTgsNyBAQCBwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorIAkJICAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCBpbnQgdG9rZW5fbGVuLCByZV9kZmFfdCAqZGZhLAorIAkJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBhY2NlcHRfaHlwaGVuKQorIHsKKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGludCBjdXJfY2hhcl9zaXplOworICAgY3VyX2NoYXJfc2l6ZSA9IHJlX3N0cmluZ19jaGFyX3NpemVfYXQgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpOworICAgaWYgKGN1cl9jaGFyX3NpemUgPiAxKQorQEAgLTMzNDIsNyArMzM2OCw3IEBAIHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisgICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgY3VyX2NoYXJfc2l6ZSk7CisgICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgICB9CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKyAgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NPTExfRUxFTSB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NIQVJfQ0xBU1MKKyAgICAgICB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0VRVUlWX0NMQVNTKQorQEAgLTM0MjIsNyArMzQ0OCw5IEBAIGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorIGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisgI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworIHsKKy0jaWZkZWYgX0xJQkMKKysgIC8qIFdoZW4gX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBvbmx5IHRoZSBDIGxvY2FsZQorKyAgICAgaXMgc3VwcG9ydGVkOyBpdCBoYXMgbm8gY29sbGF0aW9uIHJ1bGVzLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnQzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgICBpZiAobnJ1bGVzICE9IDApCisgICAgIHsKK0BAIC0zNDkyLDcgKzM1MjAsNyBAQCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorICAgICAgIG1iY3NldC0+ZXF1aXZfY2xhc3Nlc1ttYmNzZXQtPm5lcXVpdl9jbGFzc2VzKytdID0gaWR4MTsKKyAgICAgfQorICAgZWxzZQorLSNlbmRpZiAvKiBfTElCQyAqLworKyNlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgICAgeworICAgICAgIGlmIChCRSAoc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKSAhPSAxLCAwKSkKKyAJcmV0dXJuIFJFR19FQ09MTEFURTsKK0BAIC0zNTI2LDcgKzM1NTQsNyBAQCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisgICAgICAgJiYgKHN0cmNtcCAobmFtZSwgInVwcGVyIikgPT0gMCB8fCBzdHJjbXAgKG5hbWUsICJsb3dlciIpID09IDApKQorICAgICBuYW1lID0gImFscGhhIjsKKyAKKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKyAgIGlmIChCRSAoKmNoYXJfY2xhc3NfYWxsb2MgPT0gbWJjc2V0LT5uY2hhcl9jbGFzc2VzLCAwKSkKKyAgICAgeworQEAgLTM1NDIsNyArMzU3MCw3IEBAIGJ1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGJpdHNldF90IHNiY3NldCwKKyAgICAgICAqY2hhcl9jbGFzc19hbGxvYyA9IG5ld19jaGFyX2NsYXNzX2FsbG9jOworICAgICB9CisgICBtYmNzZXQtPmNoYXJfY2xhc3Nlc1ttYmNzZXQtPm5jaGFyX2NsYXNzZXMrK10gPSBfX3djdHlwZSAobmFtZSk7CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAorICNkZWZpbmUgQlVJTERfQ0hBUkNMQVNTX0xPT1AoY3R5cGVfZnVuYykJXAorICAgZG8gewkJCQkJCVwKK0BAIC0zNjUzLDcgKzM2ODEsNyBAQCBidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKyAjZW5kaWYKKyAKK0BAIC0zNjY1LDcgKzM2OTMsNyBAQCBidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorICAgICBnb3RvIGJ1aWxkX3dvcmRfb3BfZXNwYWNlOworIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICB7CisgICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CisgICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBjb21wbGV4IGJyYWNrZXQuICAqLworZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4LmggYi9wb3NpeC9yZWdleC5oCitpbmRleCA1YjE5ODFlLi4yOTQxZjk0IDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXguaAorKysrIGIvcG9zaXgvcmVnZXguaAorQEAgLTIxLDYgKzIxLDcgQEAKKyAjZGVmaW5lIF9SRUdFWF9IIDEKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogQWxsb3cgdGhlIHVzZSBpbiBDKysgY29kZS4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCitAQCAtMTU2LDYgKzE1Nyw4IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcmVnX3N5bnRheF90OworICAgIHRyZWF0ZWQgYXMgJ2FcezEnLiAgKi8KKyAjIGRlZmluZSBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCAoUkVfREVCVUcgPDwgMSkKKyAKKysvKiBFR0xJQkM6IE9sZCByZWdleCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlLiAgKi8KKysjIGlmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQworIC8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorICAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisgIyBkZWZpbmUgUkVfSUNBU0UgKFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIDw8IDEpCitAQCAtMTcyLDYgKzE3NSw3IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcmVnX3N5bnRheF90OworIC8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBub19zdWIgd2lsbCBiZSBzZXQgdG8gMSBkdXJpbmcKKyAgICByZV9jb21waWxlX3BhdHRlcm4uICAqLworICMgZGVmaW5lIFJFX05PX1NVQiAoUkVfQ09OVEVYVF9JTlZBTElEX0RVUCA8PCAxKQorKyMgZW5kaWYgLyogX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDICovCisgI2VuZGlmCisgCisgLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgZGVmaW5lcyB0aGUgcGFydGljdWxhciByZWdleHAgc3ludGF4IHRvIHVzZSAoZm9yCitAQCAtMjMxLDggKzIzNSwxMyBAQCBleHRlcm4gcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworICAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJFX0RPVF9ORVdMSU5FICAgICAgfCBSRV9ET1RfTk9UX05VTEwJCVwKKyAgICB8IFJFX0lOVEVSVkFMUyAgfCBSRV9OT19FTVBUWV9SQU5HRVMpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQworICNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorICAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfQktfUExVU19RTSB8IFJFX0NPTlRFWFRfSU5WQUxJRF9EVVApCisrI2Vsc2UKKysjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9CQVNJQwkJCQkJCVwKKysgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0JLX1BMVVNfUU0pCisrI2VuZGlmCisgCisgLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9CQVNJQyBvbmx5IGluIHRoYXQgUkVfQktfUExVU19RTSBiZWNvbWVzCisgICAgUkVfTElNSVRFRF9PUFMsIGkuZS4sIFw/IFwrIFx8IGFyZSBub3QgcmVjb2duaXplZC4gIEFjdHVhbGx5LCB0aGlzCitAQCAtMjk4LDkgKzMwNywxMSBAQCBleHRlcm4gcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworIC8qIExpa2UgUkVHX05PVEJPTCwgZXhjZXB0IGZvciB0aGUgZW5kLW9mLWxpbmUuICAqLworICNkZWZpbmUgUkVHX05PVEVPTCAoMSA8PCAxKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMKKyAvKiBVc2UgUE1BVENIWzBdIHRvIGRlbGltaXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBpbiB0aGUKKyAgICBidWZmZXIuICAqLworICNkZWZpbmUgUkVHX1NUQVJURU5EICgxIDw8IDIpCisrI2VuZGlmCisgCisgCisgLyogSWYgYW55IGVycm9yIGNvZGVzIGFyZSByZW1vdmVkLCBjaGFuZ2VkLCBvciBhZGRlZCwgdXBkYXRlIHRoZQorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMgYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5jCitpbmRleCA4NTk3ZDdlLi5kNTNiMmE4IDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYworKysrIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYworQEAgLTQzLDggKzQzLDggQEAgcmVfc3RyaW5nX2FsbG9jYXRlIChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgaW5pdF9sZW4sCisgICBpbnQgaW5pdF9idWZfbGVuOworIAorICAgLyogRW5zdXJlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgZml0cyBpbnRvIHRoZSBidWZmZXJzLiAgKi8KKy0gIGlmIChpbml0X2xlbiA8IGRmYS0+bWJfY3VyX21heCkKKy0gICAgaW5pdF9sZW4gPSBkZmEtPm1iX2N1cl9tYXg7CisrICBpZiAoaW5pdF9sZW4gPCBkZmFfbWJfY3VyX21heCAoZGZhKSkKKysgICAgaW5pdF9sZW4gPSBkZmFfbWJfY3VyX21heCAoZGZhKTsKKyAgIGluaXRfYnVmX2xlbiA9IChsZW4gKyAxIDwgaW5pdF9sZW4pID8gbGVuICsgMTogaW5pdF9sZW47CisgICByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoc3RyLCBsZW4sIHBzdHIsIHRyYW5zLCBpY2FzZSwgZGZhKTsKKyAKK0BAIC01NSw3ICs1NSw3IEBAIHJlX3N0cmluZ19hbGxvY2F0ZSAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGluaXRfbGVuLAorICAgcHN0ci0+d29yZF9jaGFyID0gZGZhLT53b3JkX2NoYXI7CisgICBwc3RyLT53b3JkX29wc191c2VkID0gZGZhLT53b3JkX29wc191c2VkOworICAgcHN0ci0+bWJzID0gcHN0ci0+bWJzX2FsbG9jYXRlZCA/IHBzdHItPm1icyA6ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKy0gIHBzdHItPnZhbGlkX2xlbiA9IChwc3RyLT5tYnNfYWxsb2NhdGVkIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpID8gMCA6IGxlbjsKKysgIHBzdHItPnZhbGlkX2xlbiA9IChwc3RyLT5tYnNfYWxsb2NhdGVkIHx8IGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkgPyAwIDogbGVuOworICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKyAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyB9CitAQCAtODIsNyArODIsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorICAgaWYgKGljYXNlKQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJeworIAkgIHdoaWxlICgxKQorIAkgICAgeworQEAgLTkxLDcgKzkxLDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKyAJCXJldHVybiByZXQ7CisgCSAgICAgIGlmIChwc3RyLT52YWxpZF9yYXdfbGVuID49IGxlbikKKyAJCWJyZWFrOworLQkgICAgICBpZiAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT52YWxpZF9sZW4gKyBkZmEtPm1iX2N1cl9tYXgpCisrCSAgICAgIGlmIChwc3RyLT5idWZzX2xlbiA+IHBzdHItPnZhbGlkX2xlbiArIGRmYV9tYl9jdXJfbWF4IChkZmEpKQorIAkJYnJlYWs7CisgCSAgICAgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisgCSAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKK0BAIC0xMDUsNyArMTA1LDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKyAgIGVsc2UKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgICAgIGVsc2UKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCitAQCAtMTMwLDcgKzEzMCw3IEBAIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCisgcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBuZXdfYnVmX2xlbikKKyB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAgICAgeworICAgICAgIHdpbnRfdCAqbmV3X3djczsKKyAKK0BAIC0xNzcsNyArMTc3LDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgcmVfc3RyaW5nX3QgKnBzdHIsCisgICBwc3RyLT50cmFucyA9IHRyYW5zOworICAgcHN0ci0+aWNhc2UgPSBpY2FzZSA/IDEgOiAwOworICAgcHN0ci0+bWJzX2FsbG9jYXRlZCA9ICh0cmFucyAhPSBOVUxMIHx8IGljYXNlKTsKKy0gIHBzdHItPm1iX2N1cl9tYXggPSBkZmEtPm1iX2N1cl9tYXg7CisrICBwc3RyLT5tYl9jdXJfbWF4ID0gZGZhX21iX2N1cl9tYXggKGRmYSk7CisgICBwc3RyLT5pc191dGY4ID0gZGZhLT5pc191dGY4OworICAgcHN0ci0+bWFwX25vdGFzY2lpID0gZGZhLT5tYXBfbm90YXNjaWk7CisgICBwc3RyLT5zdG9wID0gcHN0ci0+bGVuOworQEAgLTIwMyw3ICsyMDMsNyBAQCBidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyB7CisgI2lmZGVmIF9MSUJDCisgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKy0gIGFzc2VydCAoTUJfTEVOX01BWCA+PSBwc3RyLT5tYl9jdXJfbWF4KTsKKysgIGFzc2VydCAoTUJfTEVOX01BWCA+PSBzdHJpbmdfbWJfY3VyX21heCAocHN0cikpOworICNlbHNlCisgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgI2VuZGlmCitAQCAtMjI2LDcgKzIyNiw3IEBAIGJ1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIAl7CisgCSAgaW50IGksIGNoOworIAorLQkgIGZvciAoaSA9IDA7IGkgPCBwc3RyLT5tYl9jdXJfbWF4ICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisrCSAgZm9yIChpID0gMDsgaSA8IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorIAkgICAgeworIAkgICAgICBjaCA9IHBzdHItPnJhd19tYnMgW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHggKyBpXTsKKyAJICAgICAgYnVmW2ldID0gcHN0ci0+bWJzW2J5dGVfaWR4ICsgaV0gPSBwc3RyLT50cmFuc1tjaF07CitAQCAtMjc1LDcgKzI3NSw3IEBAIGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorICAgc2l6ZV90IG1iY2xlbjsKKyAjaWZkZWYgX0xJQkMKKyAgIGNoYXIgYnVmW01CX0xFTl9NQVhdOworLSAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSk7CisgI2Vsc2UKKyAgIGNoYXIgYnVmWzY0XTsKKyAjZW5kaWYKK0BAIC0zNjksNyArMzY5LDcgQEAgYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgCSAgeworIAkgICAgaW50IGksIGNoOworIAorLQkgICAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKysJICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmdfbWJfY3VyX21heCAocHN0cikgJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKyAJICAgICAgeworIAkJY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHggKyBpXTsKKyAJCWJ1ZltpXSA9IHBzdHItPnRyYW5zW2NoXTsKK0BAIC01NjcsOCArNTY3LDkgQEAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIH0KKyAKKyAvKiBUaGlzIGZ1bmN0aW9uIHJlLWNvbnN0cnVjdCB0aGUgYnVmZmVycy4KKy0gICBDb25jcmV0ZWx5LCBjb252ZXJ0IHRvIHdpZGUgY2hhcmFjdGVyIGluIGNhc2Ugb2YgcHN0ci0+bWJfY3VyX21heCA+IDEsCistICAgY29udmVydCB0byB1cHBlciBjYXNlIGluIGNhc2Ugb2YgUkVHX0lDQVNFLCBhcHBseSB0cmFuc2xhdGlvbi4gICovCisrICAgQ29uY3JldGVseSwgY29udmVydCB0byB3aWRlIGNoYXJhY3RlciBpbiBjYXNlIG9mCisrICAgc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSwgY29udmVydCB0byB1cHBlciBjYXNlIGluIGNhc2Ugb2YKKysgICBSRUdfSUNBU0UsIGFwcGx5IHRyYW5zbGF0aW9uLiAgKi8KKyAKKyBzdGF0aWMgcmVnX2VycmNvZGVfdAorIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCitAQCAtNTc5LDcgKzU4MCw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgICAgIHsKKyAgICAgICAvKiBSZXNldCBidWZmZXIuICAqLworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW47CitAQCAtNjcwLDcgKzY3MSw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgCSAgICAgIHBzdHItPnRpcF9jb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKHBzdHIsIG9mZnNldCAtIDEsCisgCQkJCQkJCWVmbGFncyk7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysJICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCQltZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKyAJCQkgKHBzdHItPnZhbGlkX2xlbiAtIG9mZnNldCkgKiBzaXplb2YgKHdpbnRfdCkpOworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworQEAgLTY5OSw3ICs3MDAsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorICNlbmRpZgorIAkgIHBzdHItPnZhbGlkX2xlbiA9IDA7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAkgICAgeworIAkgICAgICBpbnQgd2NzX2lkeDsKKyAJICAgICAgd2ludF90IHdjID0gV0VPRjsKK0BAIC03MTEsNyArNzEyLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAJCSAgLyogU3BlY2lhbCBjYXNlIFVURi04LiAgTXVsdGktYnl0ZSBjaGFycyBzdGFydCB3aXRoIGFueQorIAkJICAgICBieXRlIG90aGVyIHRoYW4gMHg4MCAtIDB4YmYuICAqLworIAkJICByYXcgPSBwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHg7CistCQkgIGVuZCA9IHJhdyArIChvZmZzZXQgLSBwc3RyLT5tYl9jdXJfbWF4KTsKKysJCSAgZW5kID0gcmF3ICsgKG9mZnNldCAtIHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSk7CisgCQkgIGlmIChlbmQgPCBwc3RyLT5yYXdfbWJzKQorIAkJICAgIGVuZCA9IHBzdHItPnJhd19tYnM7CisgCQkgIHAgPSByYXcgKyBvZmZzZXQgLSAxOworQEAgLTgwMyw3ICs4MDQsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorIAorICAgLyogVGhlbiBidWlsZCB0aGUgYnVmZmVycy4gICovCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAgICAgeworICAgICAgIGlmIChwc3RyLT5pY2FzZSkKKyAJeworQEAgLTg0MSw3ICs4NDIsNyBAQCByZV9zdHJpbmdfcGVla19ieXRlX2Nhc2UgKGNvbnN0IHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4KQorICAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEKKyAgICAgICAmJiAhIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyIChwc3RyLCBwc3RyLT5jdXJfaWR4ICsgaWR4KSkKKyAgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisgI2VuZGlmCitAQCAtOTMwLDcgKzkzMSw3IEBAIHJlX3N0cmluZ19jb250ZXh0X2F0IChjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgsIGludCBlZmxhZ3MpCisgICAgIHJldHVybiAoKGVmbGFncyAmIFJFR19OT1RFT0wpID8gQ09OVEVYVF9FTkRCVUYKKyAJICAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9FTkRCVUYpOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSkKKyAgICAgeworICAgICAgIHdpbnRfdCB3YzsKKyAgICAgICBpbnQgd2NfaWR4ID0gaWR4OworQEAgLTE0NDQsNyArMTQ0NSw3IEBAIHJlX2RmYV9hZGRfbm9kZSAocmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCB0b2tlbikKKyAgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmNvbnN0cmFpbnQgPSAwOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uYWNjZXB0X21iID0KKy0gICAgKHR5cGUgPT0gT1BfUEVSSU9EICYmIGRmYS0+bWJfY3VyX21heCA+IDEpIHx8IHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUOworKyAgICAodHlwZSA9PSBPUF9QRVJJT0QgJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKSB8fCB0eXBlID09IENPTVBMRVhfQlJBQ0tFVDsKKyAjZW5kaWYKKyAgIGRmYS0+bmV4dHNbZGZhLT5ub2Rlc19sZW5dID0gLTE7CisgICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmVkZXN0cyArIGRmYS0+bm9kZXNfbGVuKTsKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5oIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaAoraW5kZXggMTU0ZTk2OS4uYzQzOTA5YSAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmgKKysrKyBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmgKK0BAIC0yNiw2ICsyNiwxMCBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrI2lmIGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQgSEFWRV9MQU5HSU5GT19IIHx8IGRlZmluZWQgSEFWRV9MQU5HSU5GT19DT0RFU0VUIHx8IGRlZmluZWQgX0xJQkMKKyAjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2VuZGlmCitAQCAtMzY5LDYgKzM3MywxMyBAQCBzdHJ1Y3QgcmVfc3RyaW5nX3QKKyB9OworIHR5cGVkZWYgc3RydWN0IHJlX3N0cmluZ190IHJlX3N0cmluZ190OworIAorKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhpcyBpcyBhbHdheXMgMTsKKysgICBoZWxwIHRoZSBjb21waWxlciBtYWtlIHVzZSBvZiB0aGF0IGZhY3QuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBzdHJpbmdfbWJfY3VyX21heChzdHIpICgoc3RyKS0+bWJfY3VyX21heCArIDApCisrI2Vsc2UKKysjIGRlZmluZSBzdHJpbmdfbWJfY3VyX21heChzdHIpICgxKQorKyNlbmRpZgorIAorIHN0cnVjdCByZV9kZmFfdDsKKyB0eXBlZGVmIHN0cnVjdCByZV9kZmFfdCByZV9kZmFfdDsKK0BAIC02NTQsNiArNjY1LDE0IEBAIHN0cnVjdCByZV9kZmFfdAorICAgX19saWJjX2xvY2tfZGVmaW5lICgsIGxvY2spCisgfTsKKyAKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoaXMgaXMgYWx3YXlzIDE7CisrICAgaGVscCB0aGUgY29tcGlsZXIgbWFrZSB1c2Ugb2YgdGhhdCBmYWN0LiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgZGZhX21iX2N1cl9tYXgoZGZhKSAoKGRmYSktPm1iX2N1cl9tYXggKyAwKQorKyNlbHNlCisrIyBkZWZpbmUgZGZhX21iX2N1cl9tYXgoZGZhKSAoMSkKKysjZW5kaWYKKysKKyAjZGVmaW5lIHJlX25vZGVfc2V0X2luaXRfZW1wdHkoc2V0KSBtZW1zZXQgKHNldCwgJ1wwJywgc2l6ZW9mIChyZV9ub2RlX3NldCkpCisgI2RlZmluZSByZV9ub2RlX3NldF9yZW1vdmUoc2V0LGlkKSBcCisgICAocmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChzZXQsIHJlX25vZGVfc2V0X2NvbnRhaW5zIChzZXQsIGlkKSAtIDEpKQorQEAgLTcxNCw3ICs3MzMsNyBAQCBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgocHVyZSwgdW51c2VkKSkKKyByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKKyB7CisgICBpbnQgYnl0ZV9pZHg7CistICBpZiAocHN0ci0+bWJfY3VyX21heCA9PSAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA9PSAxKQorICAgICByZXR1cm4gMTsKKyAgIGZvciAoYnl0ZV9pZHggPSAxOyBpZHggKyBieXRlX2lkeCA8IHBzdHItPnZhbGlkX2xlbjsgKytieXRlX2lkeCkKKyAgICAgaWYgKHBzdHItPndjc1tpZHggKyBieXRlX2lkeF0gIT0gV0VPRikKK0BAIC03MjYsNyArNzQ1LDcgQEAgc3RhdGljIHdpbnRfdAorIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX18gKChwdXJlLCB1bnVzZWQpKQorIHJlX3N0cmluZ193Y2hhcl9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCisgeworLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPT0gMSkKKyAgICAgcmV0dXJuICh3aW50X3QpIHBzdHItPm1ic1tpZHhdOworICAgcmV0dXJuICh3aW50X3QpIHBzdHItPndjc1tpZHhdOworIH0KK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleGVjLWNvbXBhdC5jIGIvcG9zaXgvcmVnZXhlYy1jb21wYXQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjBmOWI3YzcKKy0tLSAvZGV2L251bGwKKysrKyBiL3Bvc2l4L3JlZ2V4ZWMtY29tcGF0LmMKK0BAIC0wLDAgKzEsMzkgQEAKKysvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorK3ZlcnNpb25lZF9zeW1ib2wgKGxpYmMsIF9fcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8zXzQpOworKworKyMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfM180KQorK19fdHlwZW9mX18gKF9fcmVnZXhlYykgX19jb21wYXRfcmVnZXhlYzsKKysKKytpbnQKKythdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorK19fY29tcGF0X3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKysJCSAgY29uc3QgY2hhciAqX19yZXN0cmljdCBzdHJpbmcsIHNpemVfdCBubWF0Y2gsCisrCQkgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCisreworKyAgcmV0dXJuIHJlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsCisrCQkgIGVmbGFncyAmIChSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCkpOworK30KKytjb21wYXRfc3ltYm9sIChsaWJjLCBfX2NvbXBhdF9yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzApOworKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleGVjLmMgYi9wb3NpeC9yZWdleGVjLmMKK2luZGV4IDcwY2Q2MDYuLmUzYjQ5ZTQgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleGVjLmMKKysrKyBiL3Bvc2l4L3JlZ2V4ZWMuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfaW5pdCAocmVfbWF0Y2hfY29udGV4dF90ICpjYWNoZSwgaW50IGVmbGFncywKKyAJCQkJICAgICBpbnQgbikgaW50ZXJuYWxfZnVuY3Rpb247CitAQCAtMTg2LDExICsxODcsMTEgQEAgc3RhdGljIGludCBidWlsZF90cnRhYmxlIChjb25zdCByZV9kZmFfdCAqZGZhLAorIHN0YXRpYyBpbnQgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJCQkJICAgIGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCkKKyAgICAgIGludGVybmFsX2Z1bmN0aW9uOworLSMgaWZkZWYgX0xJQkMKKysjIGlmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLAorIAkJCQkJCSAgIHNpemVfdCBuYW1lX2xlbikKKyAgICAgIGludGVybmFsX2Z1bmN0aW9uOworLSMgZW5kaWYgLyogX0xJQkMgKi8KKysjIGVuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworIHN0YXRpYyBpbnQgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisgCQkJCSAgICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKK0BAIC0yNTUsMjUgKzI1Niw5IEBAIHJlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsIGVmbGFncykKKyAgIHJldHVybiBlcnIgIT0gUkVHX05PRVJST1I7CisgfQorIAorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CistdmVyc2lvbmVkX3N5bWJvbCAobGliYywgX19yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzNfNCk7CistCistIyBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zXzQpCistX190eXBlb2ZfXyAoX19yZWdleGVjKSBfX2NvbXBhdF9yZWdleGVjOworLQorLWludAorLWF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCistX19jb21wYXRfcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorLQkJICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IHN0cmluZywgc2l6ZV90IG5tYXRjaCwKKy0JCSAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKKy17CistICByZXR1cm4gcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwKKy0JCSAgZWZsYWdzICYgKFJFR19OT1RCT0wgfCBSRUdfTk9URU9MKSk7CistfQorLWNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fY29tcGF0X3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfMCk7CistIyBlbmRpZgorLSNlbmRpZgorKy8qIEVHTElCQzogVGhlIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGhlcmUgd2FzIG1vdmUgdG8gYSBzZXBhcmF0ZSBmaWxlCisrICAgc28gdGhhdCBpdCBjYW4gYmUgc2hhcmVkIHdpdGggeHJlZ2V4LmMuICAqLworKyNpbmNsdWRlICJyZWdleGVjLWNvbXBhdC5jIgorIAorIC8qIEVudHJ5IHBvaW50cyBmb3IgR05VIGNvZGUuICAqLworIAorQEAgLTcyOCw3ICs3MTMsNyBAQCByZV9zZWFyY2hfaW50ZXJuYWwgKHByZWcsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgcmFuZ2UsIHN0b3AsIG5tYXRjaCwgcG1hdGNoLAorICAgaW5jciA9IChyYW5nZSA8IDApID8gLTEgOiAxOworICAgbGVmdF9saW0gPSAocmFuZ2UgPCAwKSA/IHN0YXJ0ICsgcmFuZ2UgOiBzdGFydDsKKyAgIHJpZ2h0X2xpbSA9IChyYW5nZSA8IDApID8gc3RhcnQgOiBzdGFydCArIHJhbmdlOworLSAgc2IgPSBkZmEtPm1iX2N1cl9tYXggPT0gMTsKKysgIHNiID0gZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gMTsKKyAgIG1hdGNoX2tpbmQgPQorICAgICAoZmFzdG1hcAorICAgICAgPyAoKHNiIHx8ICEocHJlZy0+c3ludGF4ICYgUkVfSUNBU0UgfHwgdCkgPyA0IDogMCkKK0BAIC0zNDQ4LDcgKzM0MzMsNyBAQCBvdXRfZnJlZToKKyAJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX3dvcmRbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorIAkgICAgZ290byBvdXRfZnJlZTsKKyAKKy0JICBpZiAoZGVzdF9zdGF0ZXNbaV0gIT0gZGVzdF9zdGF0ZXNfd29yZFtpXSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmIChkZXN0X3N0YXRlc1tpXSAhPSBkZXN0X3N0YXRlc193b3JkW2ldICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJICAgIG5lZWRfd29yZF90cnRhYmxlID0gMTsKKyAKKyAJICBkZXN0X3N0YXRlc19ubFtpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywKK0BAIC0zNTkwLDcgKzM1NzUsNyBAQCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QpCisgCXsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkgICAgYml0c2V0X21lcmdlIChhY2NlcHRzLCBkZmEtPnNiX2NoYXIpOworIAkgIGVsc2UKKyAjZW5kaWYKK0BAIC0zNjQxLDcgKzM2MjYsNyBAQCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisgCQkgIGNvbnRpbnVlOworIAkJfQorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKyAJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSAoZGZhLT53b3JkX2NoYXJbal0gfCB+ZGZhLT5zYl9jaGFyW2pdKSk7CisgCSAgICAgIGVsc2UKK0BAIC0zNjYwLDcgKzM2NDUsNyBAQCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisgCQkgIGNvbnRpbnVlOworIAkJfQorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKyAJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSB+KGRmYS0+d29yZF9jaGFyW2pdICYgZGZhLT5zYl9jaGFyW2pdKSk7CisgCSAgICAgIGVsc2UKK0BAIC0zODM2LDEyICszODIxLDYgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAgIGlmIChub2RlLT50eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKyAgICAgeworICAgICAgIGNvbnN0IHJlX2NoYXJzZXRfdCAqY3NldCA9IG5vZGUtPm9wci5tYmNzZXQ7CistIyBpZmRlZiBfTElCQworLSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbgorLQk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CistICAgICAgaW50IGo7CistICAgICAgdWludDMyX3QgbnJ1bGVzOworLSMgZW5kaWYgLyogX0xJQkMgKi8KKyAgICAgICBpbnQgbWF0Y2hfbGVuID0gMDsKKyAgICAgICB3Y2hhcl90IHdjID0gKChjc2V0LT5ucmFuZ2VzIHx8IGNzZXQtPm5jaGFyX2NsYXNzZXMgfHwgY3NldC0+bm1iY2hhcnMpCisgCQkgICAgPyByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCBzdHJfaWR4KSA6IDApOworQEAgLTM4NTMsNiArMzgzMiw3IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCSAgICBtYXRjaF9sZW4gPSBjaGFyX2xlbjsKKyAJICAgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisgCSAgfQorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXJhY3Rlcl9jbGFzcz8gICovCisgICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jaGFyX2NsYXNzZXM7ICsraSkKKyAJeworQEAgLTM4NjMsMTQgKzM4NDMsMjIgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJICAgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKyAJICAgIH0KKyAJfQorKyNlbmRpZgorKworKyAgICAgIC8qIFdoZW4gX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBvbmx5IHRoZSBDCisrICAgICAgICAgbG9jYWxlIGlzIHN1cHBvcnRlZDsgaXQgaGFzIG5vIGNvbGxhdGlvbiBydWxlcy4gICovCisrIyBpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbgorKwk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CisrICAgICAgaW50IGo7CisrICAgICAgdWludDMyX3QgbnJ1bGVzOworIAorLSMgaWZkZWYgX0xJQkMKKyAgICAgICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICAgICAgIGlmIChucnVsZXMgIT0gMCkKKyAJeworIAkgIHVuc2lnbmVkIGludCBpbl9jb2xsc2VxID0gMDsKKyAJICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworLQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHMsICpleHRyYTsKKysJICBjb25zdCB1bnNpZ25lZCBjaGFyICp3ZWlnaHRzLCAqZXh0cmEgPSBOVUxMOworIAkgIGNvbnN0IGNoYXIgKmNvbGxzZXF3YzsKKyAKKyAJICAvKiBtYXRjaCB3aXRoIGNvbGxhdGluZ19zeW1ib2w/ICAqLworQEAgLTM5NTUsOCArMzk0MywxMiBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkgICAgfQorIAl9CisgICAgICAgZWxzZQorLSMgZW5kaWYgLyogX0xJQkMgKi8KKysjIGVuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAl7CisrICAgICAgICAgIC8qIEluIHRoZSBfTElCQyB2ZXJzaW9uLCBpZiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzCisrICAgICAgICAgICAgIGRpc2FibGVkLCB0aGVyZSBjYW4gYmUgbm8gbXVsdGlieXRlIHJhbmdlIGVuZHBvaW50cywgYW5kCisrICAgICAgICAgICAgIGNzZXQtPm5yYW5nZXMgaXMgYWx3YXlzIHplcm8uICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAvKiBtYXRjaCB3aXRoIHJhbmdlIGV4cHJlc3Npb24/ICAqLworICNpZiBfX0dOVUNfXyA+PSAyCisgCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCB3YywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CitAQCAtMzk3NSw2ICszOTY3LDcgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJCSAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKyAJCX0KKyAJICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCX0KKyAgICAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g6CisgICAgICAgaWYgKCFjc2V0LT5ub25fbWF0Y2gpCitAQCAtMzk5MCw3ICszOTgzLDcgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAgIHJldHVybiAwOworIH0KKyAKKy0jIGlmZGVmIF9MSUJDCisrIyBpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyBpbnRlcm5hbF9mdW5jdGlvbgorIGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsIHNpemVfdCBtYnNfbGVuKQorQEAgLTQwNDgsNyArNDA0MSw3IEBAIGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsIHNpemVfdCBtYnNfbGVuKQorICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgfQorIH0KKy0jIGVuZGlmIC8qIF9MSUJDICovCisrIyBlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAKKyAvKiBDaGVjayB3aGV0aGVyIHRoZSBub2RlIGFjY2VwdHMgdGhlIGJ5dGUgd2hpY2ggaXMgSURYLXRoCitAQCAtNDEzOSw3ICs0MTMyLDcgQEAgZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG1pbl9sZW4pCisgICBpZiAocHN0ci0+aWNhc2UpCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCXsKKyAJICByZXQgPSBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChwc3RyKTsKKyAJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCitAQCAtNDE1Miw3ICs0MTQ1LDcgQEAgZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG1pbl9sZW4pCisgICBlbHNlCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgICAgIGVsc2UKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCitkaWZmIC0tZ2l0IGEvcG9zaXgveHJlZ2V4LmMgYi9wb3NpeC94cmVnZXguYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQzZjdhY2UKKy0tLSAvZGV2L251bGwKKysrKyBiL3Bvc2l4L3hyZWdleC5jCitAQCAtMCwwICsxLDgyMTUgQEAKKysvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LAorKyAgIHZlcnNpb24gMC4xMi4KKysgICAoSW1wbGVtZW50cyBQT1NJWCBkcmFmdCBQMTAwMy4yL0QxMS4yLCBleGNlcHQgZm9yIHNvbWUgb2YgdGhlCisrICAgaW50ZXJuYXRpb25hbGl6YXRpb24gZmVhdHVyZXMuKQorKworKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKysgICAyMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrICAgMDIxMTAtMTMwMSBVU0EuICAqLworKworKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gKi8KKysjaWYgZGVmaW5lZCBfQUlYICYmICFkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIFJFR0VYX01BTExPQworKyAgI3ByYWdtYSBhbGxvY2EKKysjZW5kaWYKKysKKysjdW5kZWYJX0dOVV9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2lmbmRlZiBJTlNJREVfUkVDVVJTSU9OCisrIyBpZmRlZiBIQVZFX0NPTkZJR19ICisrIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qI2luY2x1ZGUgPGFuc2lkZWNsLmg+Ki8KKysKKysKKysjaWZuZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjIGlmIGRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIGVtYWNzCisrIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisrIyBlbHNlCisrLyogV2UgbmVlZCB0aGlzIGZvciBgcmVnZXguaCcsIGFuZCBwZXJoYXBzIGZvciB0aGUgRW1hY3MgaW5jbHVkZSBmaWxlcy4gICovCisrIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrIyBlbmRpZgorKworKyMgaWYgKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfQlRPV0MpCisrIyAgZGVmaW5lIFdJREVfQ0hBUl9TVVBQT1JUIChIQVZFX1dDVFlQRV9IICYmIEhBVkVfV0NIQVJfSCAmJiBIQVZFX0JUT1dDKQorKyMgZWxzZQorKyMgIGRlZmluZSBXSURFX0NIQVJfU1VQUE9SVCAwCisrIyBlbmRpZgorKy8qIEZvciBwbGF0Zm9ybSB3aGljaCBzdXBwb3J0IHRoZSBJU08gQyBhbWVuZGVtZW50IDEgZnVuY3Rpb25hbGl0eSB3ZQorKyAgIHN1cHBvcnQgdXNlciBkZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzLiAgKi8KKysjIGlmIFdJREVfQ0hBUl9TVVBQT1JUCisrLyogU29sYXJpcyAyLjUgaGFzIGEgYnVnOiA8d2NoYXIuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjdHlwZS5oPi4gICovCisrIyAgaW5jbHVkZSA8d2NoYXIuaD4KKysjICBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjIGVuZGlmCisrCisrIyBpZmRlZiBfTElCQworKy8qIFdlIGhhdmUgdG8ga2VlcCB0aGUgbmFtZXNwYWNlIGNsZWFuLiAgKi8KKysjICBkZWZpbmUgcmVnZnJlZShwcmVnKSBfX3JlZ2ZyZWUgKHByZWcpCisrIyAgZGVmaW5lIHJlZ2V4ZWMocHIsIHN0LCBubSwgcG0sIGVmKSBfX3JlZ2V4ZWMgKHByLCBzdCwgbm0sIHBtLCBlZikKKysjICBkZWZpbmUgcmVnY29tcChwcmVnLCBwYXR0ZXJuLCBjZmxhZ3MpIF9fcmVnY29tcCAocHJlZywgcGF0dGVybiwgY2ZsYWdzKQorKyMgIGRlZmluZSByZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXplKSBcCisrCV9fcmVnZXJyb3IoZXJyY29kZSwgcHJlZywgZXJyYnVmLCBlcnJidWZfc2l6ZSkKKysjICBkZWZpbmUgcmVfc2V0X3JlZ2lzdGVycyhidSwgcmUsIG51LCBzdCwgZW4pIFwKKysJX19yZV9zZXRfcmVnaXN0ZXJzIChidSwgcmUsIG51LCBzdCwgZW4pCisrIyAgZGVmaW5lIHJlX21hdGNoXzIoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApIFwKKysJX19yZV9tYXRjaF8yIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkKKysjICBkZWZpbmUgcmVfbWF0Y2goYnVmcCwgc3RyaW5nLCBzaXplLCBwb3MsIHJlZ3MpIFwKKysJX19yZV9tYXRjaCAoYnVmcCwgc3RyaW5nLCBzaXplLCBwb3MsIHJlZ3MpCisrIyAgZGVmaW5lIHJlX3NlYXJjaChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwgcmVncykgXAorKwlfX3JlX3NlYXJjaCAoYnVmcCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MpCisrIyAgZGVmaW5lIHJlX2NvbXBpbGVfcGF0dGVybihwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApIFwKKysJX19yZV9jb21waWxlX3BhdHRlcm4gKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkKKysjICBkZWZpbmUgcmVfc2V0X3N5bnRheChzeW50YXgpIF9fcmVfc2V0X3N5bnRheCAoc3ludGF4KQorKyMgIGRlZmluZSByZV9zZWFyY2hfMihidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApIFwKKysJX19yZV9zZWFyY2hfMiAoYnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKQorKyMgIGRlZmluZSByZV9jb21waWxlX2Zhc3RtYXAoYnVmcCkgX19yZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApCisrCisrIyAgZGVmaW5lIGJ0b3djIF9fYnRvd2MKKysKKysvKiBXZSBhcmUgYWxzbyB1c2luZyBzb21lIGxpYnJhcnkgaW50ZXJuYWxzLiAgKi8KKysjICBpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyMgIGluY2x1ZGUgPGxvY2FsZS9lbGVtLWhhc2guaD4KKysjICBpbmNsdWRlIDxsYW5naW5mby5oPgorKyMgIGluY2x1ZGUgPGxvY2FsZS9jb2xsLWxvb2t1cC5oPgorKyMgZW5kaWYKKysKKysvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLiAgKi8KKysjIGlmIChIQVZFX0xJQklOVExfSCAmJiBFTkFCTEVfTkxTKSB8fCBkZWZpbmVkIF9MSUJDCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGdldHRleHQKKysjICAgZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0ICgibGliYyIsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrIyBlbmRpZgorKworKyMgaWZuZGVmIGdldHRleHRfbm9vcAorKy8qIFRoaXMgZGVmaW5lIGlzIHNvIHhnZXR0ZXh0IGNhbiBmaW5kIHRoZSBpbnRlcm5hdGlvbmFsaXphYmxlCisrICAgc3RyaW5ncy4gICovCisrIyAgZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZworKyMgZW5kaWYKKysKKysvKiBUaGUgYGVtYWNzJyBzd2l0Y2ggdHVybnMgb24gY2VydGFpbiBtYXRjaGluZyBjb21tYW5kcworKyAgIHRoYXQgbWFrZSBzZW5zZSBvbmx5IGluIEVtYWNzLiAqLworKyMgaWZkZWYgZW1hY3MKKysKKysjICBpbmNsdWRlICJsaXNwLmgiCisrIyAgaW5jbHVkZSAiYnVmZmVyLmgiCisrIyAgaW5jbHVkZSAic3ludGF4LmgiCisrCisrIyBlbHNlICAvKiBub3QgZW1hY3MgKi8KKysKKysvKiBJZiB3ZSBhcmUgbm90IGxpbmtpbmcgd2l0aCBFbWFjcyBwcm9wZXIsCisrICAgd2UgY2FuJ3QgdXNlIHRoZSByZWxvY2F0aW5nIGFsbG9jYXRvcgorKyAgIGV2ZW4gaWYgY29uZmlnLmggc2F5cyB0aGF0IHdlIGNhbi4gICovCisrIyAgdW5kZWYgUkVMX0FMTE9DCisrCisrIyAgaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4KKysjICBlbHNlCisrY2hhciAqbWFsbG9jICgpOworK2NoYXIgKnJlYWxsb2MgKCk7CisrIyAgZW5kaWYKKysKKysvKiBXaGVuIHVzZWQgaW4gRW1hY3MncyBsaWItc3JjLCB3ZSBuZWVkIHRvIGdldCBiemVybyBhbmQgYmNvcHkgc29tZWhvdy4KKysgICBJZiBub3RoaW5nIGVsc2UgaGFzIGJlZW4gZG9uZSwgdXNlIHRoZSBtZXRob2QgYmVsb3cuICAqLworKyMgIGlmZGVmIElOSElCSVRfU1RSSU5HX0hFQURFUgorKyMgICBpZiAhKGRlZmluZWQgSEFWRV9CWkVSTyAmJiBkZWZpbmVkIEhBVkVfQkNPUFkpCisrIyAgICBpZiAhZGVmaW5lZCBiemVybyAmJiAhZGVmaW5lZCBiY29weQorKyMgICAgIHVuZGVmIElOSElCSVRfU1RSSU5HX0hFQURFUgorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKworKy8qIFRoaXMgaXMgdGhlIG5vcm1hbCB3YXkgb2YgbWFraW5nIHN1cmUgd2UgaGF2ZSBhIGJjb3B5IGFuZCBhIGJ6ZXJvLgorKyAgIFRoaXMgaXMgdXNlZCBpbiBtb3N0IHByb2dyYW1zLS1hIGZldyBvdGhlciBwcm9ncmFtcyBhdm9pZCB0aGlzCisrICAgYnkgZGVmaW5pbmcgSU5ISUJJVF9TVFJJTkdfSEVBREVSLiAgKi8KKysjICBpZm5kZWYgSU5ISUJJVF9TVFJJTkdfSEVBREVSCisrIyAgIGlmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCisrIyAgICBpbmNsdWRlIDxzdHJpbmcuaD4KKysjICAgIGlmbmRlZiBiemVybworKyMgICAgIGlmbmRlZiBfTElCQworKyMgICAgICBkZWZpbmUgYnplcm8ocywgbikJKG1lbXNldCAocywgJ1wwJywgbiksIChzKSkKKysjICAgICBlbHNlCisrIyAgICAgIGRlZmluZSBiemVybyhzLCBuKQlfX2J6ZXJvIChzLCBuKQorKyMgICAgIGVuZGlmCisrIyAgICBlbmRpZgorKyMgICBlbHNlCisrIyAgICBpbmNsdWRlIDxzdHJpbmdzLmg+CisrIyAgICBpZm5kZWYgbWVtY21wCisrIyAgICAgZGVmaW5lIG1lbWNtcChzMSwgczIsIG4pCWJjbXAgKHMxLCBzMiwgbikKKysjICAgIGVuZGlmCisrIyAgICBpZm5kZWYgbWVtY3B5CisrIyAgICAgZGVmaW5lIG1lbWNweShkLCBzLCBuKQkoYmNvcHkgKHMsIGQsIG4pLCAoZCkpCisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrCisrLyogRGVmaW5lIHRoZSBzeW50YXggc3R1ZmYgZm9yIFw8LCBcPiwgZXRjLiAgKi8KKysKKysvKiBUaGlzIG11c3QgYmUgbm9uemVybyBmb3IgdGhlIHdvcmRjaGFyIGFuZCBub3R3b3JkY2hhciBwYXR0ZXJuCisrICAgY29tbWFuZHMgaW4gcmVfbWF0Y2hfMi4gICovCisrIyAgaWZuZGVmIFN3b3JkCisrIyAgIGRlZmluZSBTd29yZCAxCisrIyAgZW5kaWYKKysKKysjICBpZmRlZiBTV0lUQ0hfRU5VTV9CVUcKKysjICAgZGVmaW5lIFNXSVRDSF9FTlVNX0NBU1QoeCkgKChpbnQpKHgpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFNXSVRDSF9FTlVNX0NBU1QoeCkgKHgpCisrIyAgZW5kaWYKKysKKysjIGVuZGlmIC8qIG5vdCBlbWFjcyAqLworKworKyMgaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0xJTUlUU19ICisrIyAgaW5jbHVkZSA8bGltaXRzLmg+CisrIyBlbmRpZgorKworKyMgaWZuZGVmIE1CX0xFTl9NQVgKKysjICBkZWZpbmUgTUJfTEVOX01BWCAxCisrIyBlbmRpZgorKwwKKysvKiBHZXQgdGhlIGludGVyZmFjZSwgaW5jbHVkaW5nIHRoZSBzeW50YXggYml0cy4gICovCisrIyBpbmNsdWRlICJyZWdleC5oIgorKworKy8qIGlzYWxwaGEgZXRjLiBhcmUgdXNlZCBmb3IgdGhlIGNoYXJhY3RlciBjbGFzc2VzLiAgKi8KKysjIGluY2x1ZGUgPGN0eXBlLmg+CisrCisrLyogSmltIE1leWVyaW5nIHdyaXRlczoKKysKKysgICAiLi4uIFNvbWUgY3R5cGUgbWFjcm9zIGFyZSB2YWxpZCBvbmx5IGZvciBjaGFyYWN0ZXIgY29kZXMgdGhhdAorKyAgIGlzYXNjaWkgc2F5cyBhcmUgQVNDSUkgKFNHSSdzIElSSVgtNC4wLjUgaXMgb25lIHN1Y2ggc3lzdGVtIC0td2hlbgorKyAgIHVzaW5nIC9iaW4vY2Mgb3IgZ2NjIGJ1dCB3aXRob3V0IGdpdmluZyBhbiBhbnNpIG9wdGlvbikuICBTbywgYWxsCisrICAgY3R5cGUgdXNlcyBzaG91bGQgYmUgdGhyb3VnaCBtYWNyb3MgbGlrZSBJU1BSSU5ULi4uICBJZgorKyAgIFNURENfSEVBREVSUyBpcyBkZWZpbmVkLCB0aGVuIGF1dG9jb25mIGhhcyB2ZXJpZmllZCB0aGF0IHRoZSBjdHlwZQorKyAgIG1hY3JvcyBkb24ndCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCByZWZlcmVuY2VzIHRvIGlzYXNjaWkuIC4uLgorKyAgIERlZmluaW5nIGlzYXNjaWkgdG8gMSBzaG91bGQgbGV0IGFueSBjb21waWxlciB3b3J0aCBpdHMgc2FsdAorKyAgIGVsaW1pbmF0ZSB0aGUgJiYgdGhyb3VnaCBjb25zdGFudCBmb2xkaW5nLiIKKysgICBTb2xhcmlzIGRlZmluZXMgc29tZSBvZiB0aGVzZSBzeW1ib2xzIHNvIHdlIG11c3QgdW5kZWZpbmUgdGhlbSBmaXJzdC4gICovCisrCisrIyB1bmRlZiBJU0FTQ0lJCisrIyBpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCAoIWRlZmluZWQgaXNhc2NpaSAmJiAhZGVmaW5lZCBIQVZFX0lTQVNDSUkpCisrIyAgZGVmaW5lIElTQVNDSUkoYykgMQorKyMgZWxzZQorKyMgIGRlZmluZSBJU0FTQ0lJKGMpIGlzYXNjaWkoYykKKysjIGVuZGlmCisrCisrIyBpZmRlZiBpc2JsYW5rCisrIyAgZGVmaW5lIElTQkxBTksoYykgKElTQVNDSUkgKGMpICYmIGlzYmxhbmsgKGMpKQorKyMgZWxzZQorKyMgIGRlZmluZSBJU0JMQU5LKGMpICgoYykgPT0gJyAnIHx8IChjKSA9PSAnXHQnKQorKyMgZW5kaWYKKysjIGlmZGVmIGlzZ3JhcGgKKysjICBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSSAoYykgJiYgaXNncmFwaCAoYykpCisrIyBlbHNlCisrIyAgZGVmaW5lIElTR1JBUEgoYykgKElTQVNDSUkgKGMpICYmIGlzcHJpbnQgKGMpICYmICFpc3NwYWNlIChjKSkKKysjIGVuZGlmCisrCisrIyB1bmRlZiBJU1BSSU5UCisrIyBkZWZpbmUgSVNQUklOVChjKSAoSVNBU0NJSSAoYykgJiYgaXNwcmludCAoYykpCisrIyBkZWZpbmUgSVNESUdJVChjKSAoSVNBU0NJSSAoYykgJiYgaXNkaWdpdCAoYykpCisrIyBkZWZpbmUgSVNBTE5VTShjKSAoSVNBU0NJSSAoYykgJiYgaXNhbG51bSAoYykpCisrIyBkZWZpbmUgSVNBTFBIQShjKSAoSVNBU0NJSSAoYykgJiYgaXNhbHBoYSAoYykpCisrIyBkZWZpbmUgSVNDTlRSTChjKSAoSVNBU0NJSSAoYykgJiYgaXNjbnRybCAoYykpCisrIyBkZWZpbmUgSVNMT1dFUihjKSAoSVNBU0NJSSAoYykgJiYgaXNsb3dlciAoYykpCisrIyBkZWZpbmUgSVNQVU5DVChjKSAoSVNBU0NJSSAoYykgJiYgaXNwdW5jdCAoYykpCisrIyBkZWZpbmUgSVNTUEFDRShjKSAoSVNBU0NJSSAoYykgJiYgaXNzcGFjZSAoYykpCisrIyBkZWZpbmUgSVNVUFBFUihjKSAoSVNBU0NJSSAoYykgJiYgaXN1cHBlciAoYykpCisrIyBkZWZpbmUgSVNYRElHSVQoYykgKElTQVNDSUkgKGMpICYmIGlzeGRpZ2l0IChjKSkKKysKKysjIGlmZGVmIF90b2xvd2VyCisrIyAgZGVmaW5lIFRPTE9XRVIoYykgX3RvbG93ZXIoYykKKysjIGVsc2UKKysjICBkZWZpbmUgVE9MT1dFUihjKSB0b2xvd2VyKGMpCisrIyBlbmRpZgorKworKyMgaWZuZGVmIE5VTEwKKysjICBkZWZpbmUgTlVMTCAodm9pZCAqKTAKKysjIGVuZGlmCisrCisrLyogV2UgcmVtb3ZlIGFueSBwcmV2aW91cyBkZWZpbml0aW9uIG9mIGBTSUdOX0VYVEVORF9DSEFSJywKKysgICBzaW5jZSBvdXJzICh3ZSBob3BlKSB3b3JrcyBwcm9wZXJseSB3aXRoIGFsbCBjb21iaW5hdGlvbnMgb2YKKysgICBtYWNoaW5lcywgY29tcGlsZXJzLCBgY2hhcicgYW5kIGB1bnNpZ25lZCBjaGFyJyBhcmd1bWVudCB0eXBlcy4KKysgICAoUGVyIEJvdGhuZXIgc3VnZ2VzdGVkIHRoZSBiYXNpYyBhcHByb2FjaC4pICAqLworKyMgdW5kZWYgU0lHTl9FWFRFTkRfQ0hBUgorKyMgaWYgX19TVERDX18KKysjICBkZWZpbmUgU0lHTl9FWFRFTkRfQ0hBUihjKSAoKHNpZ25lZCBjaGFyKSAoYykpCisrIyBlbHNlICAvKiBub3QgX19TVERDX18gKi8KKysvKiBBcyBpbiBIYXJiaXNvbiBhbmQgU3RlZWxlLiAgKi8KKysjICBkZWZpbmUgU0lHTl9FWFRFTkRfQ0hBUihjKSAoKCgodW5zaWduZWQgY2hhcikgKGMpKSBeIDEyOCkgLSAxMjgpCisrIyBlbmRpZgorKwwKKysjIGlmbmRlZiBlbWFjcworKy8qIEhvdyBtYW55IGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJhY3RlciBzZXQuICAqLworKyMgIGRlZmluZSBDSEFSX1NFVF9TSVpFIDI1NgorKworKyMgIGlmZGVmIFNZTlRBWF9UQUJMRQorKworK2V4dGVybiBjaGFyICpyZV9zeW50YXhfdGFibGU7CisrCisrIyAgZWxzZSAvKiBub3QgU1lOVEFYX1RBQkxFICovCisrCisrc3RhdGljIGNoYXIgcmVfc3ludGF4X3RhYmxlW0NIQVJfU0VUX1NJWkVdOworKworK3N0YXRpYyB2b2lkIGluaXRfc3ludGF4X29uY2UgKHZvaWQpOworKworK3N0YXRpYyB2b2lkCisraW5pdF9zeW50YXhfb25jZSAodm9pZCkKKyt7CisrICAgcmVnaXN0ZXIgaW50IGM7CisrICAgc3RhdGljIGludCBkb25lID0gMDsKKysKKysgICBpZiAoZG9uZSkKKysgICAgIHJldHVybjsKKysgICBiemVybyAocmVfc3ludGF4X3RhYmxlLCBzaXplb2YgcmVfc3ludGF4X3RhYmxlKTsKKysKKysgICBmb3IgKGMgPSAwOyBjIDwgQ0hBUl9TRVRfU0laRTsgKytjKQorKyAgICAgaWYgKElTQUxOVU0gKGMpKQorKwlyZV9zeW50YXhfdGFibGVbY10gPSBTd29yZDsKKysKKysgICByZV9zeW50YXhfdGFibGVbJ18nXSA9IFN3b3JkOworKworKyAgIGRvbmUgPSAxOworK30KKysKKysjICBlbmRpZiAvKiBub3QgU1lOVEFYX1RBQkxFICovCisrCisrIyAgZGVmaW5lIFNZTlRBWChjKSByZV9zeW50YXhfdGFibGVbKHVuc2lnbmVkIGNoYXIpIChjKV0KKysKKysjIGVuZGlmIC8qIGVtYWNzICovCisrDAorKy8qIEludGVnZXIgdHlwZSBmb3IgcG9pbnRlcnMuICAqLworKyMgaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9VSU5UUFRSX1QKKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVpbnRwdHJfdDsKKysjIGVuZGlmCisrCisrLyogU2hvdWxkIHdlIHVzZSBtYWxsb2Mgb3IgYWxsb2NhPyAgSWYgUkVHRVhfTUFMTE9DIGlzIG5vdCBkZWZpbmVkLCB3ZQorKyAgIHVzZSBgYWxsb2NhJyBpbnN0ZWFkIG9mIGBtYWxsb2MnLiAgVGhpcyBpcyBiZWNhdXNlIHVzaW5nIG1hbGxvYyBpbgorKyAgIHJlX3NlYXJjaCogb3IgcmVfbWF0Y2gqIGNvdWxkIGNhdXNlIG1lbW9yeSBsZWFrcyB3aGVuIEMtZyBpcyB1c2VkIGluCisrICAgRW1hY3M7IGFsc28sIG1hbGxvYyBpcyBzbG93ZXIgYW5kIGNhdXNlcyBzdG9yYWdlIGZyYWdtZW50YXRpb24uICBPbgorKyAgIHRoZSBvdGhlciBoYW5kLCBtYWxsb2MgaXMgbW9yZSBwb3J0YWJsZSwgYW5kIGVhc2llciB0byBkZWJ1Zy4KKysKKysgICBCZWNhdXNlIHdlIHNvbWV0aW1lcyB1c2UgYWxsb2NhLCBzb21lIHJvdXRpbmVzIGhhdmUgdG8gYmUgbWFjcm9zLAorKyAgIG5vdCBmdW5jdGlvbnMgLS0gYGFsbG9jYSctYWxsb2NhdGVkIHNwYWNlIGRpc2FwcGVhcnMgYXQgdGhlIGVuZCBvZiB0aGUKKysgICBmdW5jdGlvbiBpdCBpcyBjYWxsZWQgaW4uICAqLworKworKyMgaWZkZWYgUkVHRVhfTUFMTE9DCisrCisrIyAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFIG1hbGxvYworKyMgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFKHNvdXJjZSwgb3NpemUsIG5zaXplKSByZWFsbG9jIChzb3VyY2UsIG5zaXplKQorKyMgIGRlZmluZSBSRUdFWF9GUkVFIGZyZWUKKysKKysjIGVsc2UgLyogbm90IFJFR0VYX01BTExPQyAgKi8KKysKKysvKiBFbWFjcyBhbHJlYWR5IGRlZmluZXMgYWxsb2NhLCBzb21ldGltZXMuICAqLworKyMgIGlmbmRlZiBhbGxvY2EKKysKKysvKiBNYWtlIGFsbG9jYSB3b3JrIHRoZSBiZXN0IHBvc3NpYmxlIHdheS4gICovCisrIyAgIGlmZGVmIF9fR05VQ19fCisrIyAgICBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjICAgZWxzZSAvKiBub3QgX19HTlVDX18gKi8KKysjICAgIGlmIEhBVkVfQUxMT0NBX0gKKysjICAgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICAgIGVuZGlmIC8qIEhBVkVfQUxMT0NBX0ggKi8KKysjICAgZW5kaWYgLyogbm90IF9fR05VQ19fICovCisrCisrIyAgZW5kaWYgLyogbm90IGFsbG9jYSAqLworKworKyMgIGRlZmluZSBSRUdFWF9BTExPQ0FURSBhbGxvY2EKKysKKysvKiBBc3N1bWVzIGEgYGNoYXIgKmRlc3RpbmF0aW9uJyB2YXJpYWJsZS4gICovCisrIyAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEUoc291cmNlLCBvc2l6ZSwgbnNpemUpCQkJXAorKyAgKGRlc3RpbmF0aW9uID0gKGNoYXIgKikgYWxsb2NhIChuc2l6ZSksCQkJCVwKKysgICBtZW1jcHkgKGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9zaXplKSkKKysKKysvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nIHRvIGZyZWUsIGFmdGVyIGFsbG9jYS4gICovCisrIyAgZGVmaW5lIFJFR0VYX0ZSRUUoYXJnKSAoKHZvaWQpMCkgLyogRG8gbm90aGluZyEgIEJ1dCBpbmhpYml0IGdjYyB3YXJuaW5nLiAgKi8KKysKKysjIGVuZGlmIC8qIG5vdCBSRUdFWF9NQUxMT0MgKi8KKysKKysvKiBEZWZpbmUgaG93IHRvIGFsbG9jYXRlIHRoZSBmYWlsdXJlIHN0YWNrLiAgKi8KKysKKysjIGlmIGRlZmluZWQgUkVMX0FMTE9DICYmIGRlZmluZWQgUkVHRVhfTUFMTE9DCisrCisrIyAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFX1NUQUNLKHNpemUpCQkJCVwKKysgIHJfYWxsb2MgKCZmYWlsdXJlX3N0YWNrX3B0ciwgKHNpemUpKQorKyMgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLKHNvdXJjZSwgb3NpemUsIG5zaXplKQkJXAorKyAgcl9yZV9hbGxvYyAoJmZhaWx1cmVfc3RhY2tfcHRyLCAobnNpemUpKQorKyMgIGRlZmluZSBSRUdFWF9GUkVFX1NUQUNLKHB0cikJCQkJCVwKKysgIHJfYWxsb2NfZnJlZSAoJmZhaWx1cmVfc3RhY2tfcHRyKQorKworKyMgZWxzZSAvKiBub3QgdXNpbmcgcmVsb2NhdGluZyBhbGxvY2F0b3IgKi8KKysKKysjICBpZmRlZiBSRUdFWF9NQUxMT0MKKysKKysjICAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFX1NUQUNLIG1hbGxvYworKyMgICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyhzb3VyY2UsIG9zaXplLCBuc2l6ZSkgcmVhbGxvYyAoc291cmNlLCBuc2l6ZSkKKysjICAgZGVmaW5lIFJFR0VYX0ZSRUVfU1RBQ0sgZnJlZQorKworKyMgIGVsc2UgLyogbm90IFJFR0VYX01BTExPQyAqLworKworKyMgICBkZWZpbmUgUkVHRVhfQUxMT0NBVEVfU1RBQ0sgYWxsb2NhCisrCisrIyAgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLKHNvdXJjZSwgb3NpemUsIG5zaXplKQkJCVwKKysgICBSRUdFWF9SRUFMTE9DQVRFIChzb3VyY2UsIG9zaXplLCBuc2l6ZSkKKysvKiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgZnJlZSBhbnl0aGluZy4gICovCisrIyAgIGRlZmluZSBSRUdFWF9GUkVFX1NUQUNLKGFyZykKKysKKysjICBlbmRpZiAvKiBub3QgUkVHRVhfTUFMTE9DICovCisrIyBlbmRpZiAvKiBub3QgdXNpbmcgcmVsb2NhdGluZyBhbGxvY2F0b3IgKi8KKysKKysKKysvKiBUcnVlIGlmIGBzaXplMScgaXMgbm9uLU5VTEwgYW5kIFBUUiBpcyBwb2ludGluZyBhbnl3aGVyZSBpbnNpZGUKKysgICBgc3RyaW5nMScgb3IganVzdCBwYXN0IGl0cyBlbmQuICBUaGlzIHdvcmtzIGlmIFBUUiBpcyBOVUxMLCB3aGljaCBpcworKyAgIGEgZ29vZCB0aGluZy4gICovCisrIyBkZWZpbmUgRklSU1RfU1RSSU5HX1AocHRyKSAJCQkJCVwKKysgIChzaXplMSAmJiBzdHJpbmcxIDw9IChwdHIpICYmIChwdHIpIDw9IHN0cmluZzEgKyBzaXplMSkKKysKKysvKiAoUmUpQWxsb2NhdGUgTiBpdGVtcyBvZiB0eXBlIFQgdXNpbmcgbWFsbG9jLCBvciBmYWlsLiAgKi8KKysjIGRlZmluZSBUQUxMT0MobiwgdCkgKCh0ICopIG1hbGxvYyAoKG4pICogc2l6ZW9mICh0KSkpCisrIyBkZWZpbmUgUkVUQUxMT0MoYWRkciwgbiwgdCkgKChhZGRyKSA9ICh0ICopIHJlYWxsb2MgKGFkZHIsIChuKSAqIHNpemVvZiAodCkpKQorKyMgZGVmaW5lIFJFVEFMTE9DX0lGKGFkZHIsIG4sIHQpIFwKKysgIGlmIChhZGRyKSBSRVRBTExPQygoYWRkciksIChuKSwgdCk7IGVsc2UgKGFkZHIpID0gVEFMTE9DICgobiksIHQpCisrIyBkZWZpbmUgUkVHRVhfVEFMTE9DKG4sIHQpICgodCAqKSBSRUdFWF9BTExPQ0FURSAoKG4pICogc2l6ZW9mICh0KSkpCisrCisrIyBkZWZpbmUgQllURVdJRFRIIDggLyogSW4gYml0cy4gICovCisrCisrIyBkZWZpbmUgU1RSRVEoczEsIHMyKSAoKHN0cmNtcCAoczEsIHMyKSA9PSAwKSkKKysKKysjIHVuZGVmIE1BWAorKyMgdW5kZWYgTUlOCisrIyBkZWZpbmUgTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisrIyBkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisrCisrdHlwZWRlZiBjaGFyIGJvb2xlYW47CisrIyBkZWZpbmUgZmFsc2UgMAorKyMgZGVmaW5lIHRydWUgMQorKworK3N0YXRpYyByZWdfZXJyY29kZV90IGJ5dGVfcmVnZXhfY29tcGlsZSAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysKKytzdGF0aWMgaW50IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0b3ApOworK3N0YXRpYyBpbnQgYnl0ZV9yZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCk7Cisrc3RhdGljIGludCBieXRlX3JlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysKKysjaWZkZWYgTUJTX1NVUFBPUlQKKytzdGF0aWMgcmVnX2VycmNvZGVfdCB3Y3NfcmVnZXhfY29tcGlsZSAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrCisrCisrc3RhdGljIGludCB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcxLCBpbnQgY3NpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcyLCBpbnQgY3NpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWJzX29mZnNldDEsIGludCAqbWJzX29mZnNldDIpOworK3N0YXRpYyBpbnQgd2NzX3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApOworK3N0YXRpYyBpbnQgd2NzX3JlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysjZW5kaWYKKysMCisrLyogVGhlc2UgYXJlIHRoZSBjb21tYW5kIGNvZGVzIHRoYXQgYXBwZWFyIGluIGNvbXBpbGVkIHJlZ3VsYXIKKysgICBleHByZXNzaW9ucy4gIFNvbWUgb3Bjb2RlcyBhcmUgZm9sbG93ZWQgYnkgYXJndW1lbnQgYnl0ZXMuICBBCisrICAgY29tbWFuZCBjb2RlIGNhbiBzcGVjaWZ5IGFueSBpbnRlcnByZXRhdGlvbiB3aGF0c29ldmVyIGZvciBpdHMKKysgICBhcmd1bWVudHMuICBaZXJvIGJ5dGVzIG1heSBhcHBlYXIgaW4gdGhlIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4gICovCisrCisrdHlwZWRlZiBlbnVtCisreworKyAgbm9fb3AgPSAwLAorKworKyAgLyogU3VjY2VlZCByaWdodCBhd2F5LS1ubyBtb3JlIGJhY2t0cmFja2luZy4gICovCisrICBzdWNjZWVkLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgb25lIGJ5dGUgZ2l2aW5nIG4sIHRoZW4gYnkgbiBsaXRlcmFsIGJ5dGVzLiAgKi8KKysgIGV4YWN0biwKKysKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrCS8qIFNhbWUgYXMgZXhhY3RuLCBidXQgY29udGFpbnMgYmluYXJ5IGRhdGEuICAqLworKyAgZXhhY3RuX2JpbiwKKysjIGVuZGlmCisrCisrICAgICAgICAvKiBNYXRjaGVzIGFueSAobW9yZSBvciBsZXNzKSBjaGFyYWN0ZXIuICAqLworKyAgYW55Y2hhciwKKysKKysgICAgICAgIC8qIE1hdGNoZXMgYW55IG9uZSBjaGFyIGJlbG9uZ2luZyB0byBzcGVjaWZpZWQgc2V0LiAgRmlyc3QKKysgICAgICAgICAgIGZvbGxvd2luZyBieXRlIGlzIG51bWJlciBvZiBiaXRtYXAgYnl0ZXMuICBUaGVuIGNvbWUgYnl0ZXMKKysgICAgICAgICAgIGZvciBhIGJpdG1hcCBzYXlpbmcgd2hpY2ggY2hhcnMgYXJlIGluLiAgQml0cyBpbiBlYWNoIGJ5dGUKKysgICAgICAgICAgIGFyZSBvcmRlcmVkIGxvdy1iaXQtZmlyc3QuICBBIGNoYXJhY3RlciBpcyBpbiB0aGUgc2V0IGlmIGl0cworKyAgICAgICAgICAgYml0IGlzIDEuICBBIGNoYXJhY3RlciB0b28gbGFyZ2UgdG8gaGF2ZSBhIGJpdCBpbiB0aGUgbWFwIGlzCisrICAgICAgICAgICBhdXRvbWF0aWNhbGx5IG5vdCBpbiB0aGUgc2V0LiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCBmb2xsb3dpbmcgZWxlbWVudCBpcyBsZW5ndGggb2YgY2hhcmFjdGVyCisrCSAgIGNsYXNzZXMsIGxlbmd0aCBvZiBjb2xsYXRpbmcgc3ltYm9scywgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlCisrCSAgIGNsYXNzZXMsIGxlbmd0aCBvZiBjaGFyYWN0ZXIgcmFuZ2VzLCBhbmQgbGVuZ3RoIG9mIGNoYXJhY3RlcnMuCisrCSAgIE5leHQsIGNoYXJhY3RlciBjbGFzcyBlbGVtZW50LCBjb2xsYXRpbmcgc3ltYm9scyBlbGVtZW50cywKKysJICAgZXF1aXZhbGVuY2UgY2xhc3MgZWxlbWVudHMsIHJhbmdlIGVsZW1lbnRzLCBhbmQgY2hhcmFjdGVyCisrCSAgIGVsZW1lbnRzIGZvbGxvdy4KKysJICAgU2VlIHJlZ2V4X2NvbXBpbGUgZnVuY3Rpb24uICAqLworKyAgY2hhcnNldCwKKysKKysgICAgICAgIC8qIFNhbWUgcGFyYW1ldGVycyBhcyBjaGFyc2V0LCBidXQgbWF0Y2ggYW55IGNoYXJhY3RlciB0aGF0IGlzCisrICAgICAgICAgICBub3Qgb25lIG9mIHRob3NlIHNwZWNpZmllZC4gICovCisrICBjaGFyc2V0X25vdCwKKysKKysgICAgICAgIC8qIFN0YXJ0IHJlbWVtYmVyaW5nIHRoZSB0ZXh0IHRoYXQgaXMgbWF0Y2hlZCwgZm9yIHN0b3JpbmcgaW4gYQorKyAgICAgICAgICAgcmVnaXN0ZXIuICBGb2xsb3dlZCBieSBvbmUgYnl0ZSB3aXRoIHRoZSByZWdpc3RlciBudW1iZXIsIGluCisrICAgICAgICAgICB0aGUgcmFuZ2UgMCB0byBvbmUgbGVzcyB0aGFuIHRoZSBwYXR0ZXJuIGJ1ZmZlcidzIHJlX25zdWIKKysgICAgICAgICAgIGZpZWxkLiAgVGhlbiBmb2xsb3dlZCBieSBvbmUgYnl0ZSB3aXRoIHRoZSBudW1iZXIgb2YgZ3JvdXBzCisrICAgICAgICAgICBpbm5lciB0byB0aGlzIG9uZS4gIChUaGlzIGxhc3QgaGFzIHRvIGJlIHBhcnQgb2YgdGhlCisrICAgICAgICAgICBzdGFydF9tZW1vcnkgb25seSBiZWNhdXNlIHdlIG5lZWQgaXQgaW4gdGhlIG9uX2ZhaWx1cmVfanVtcAorKyAgICAgICAgICAgb2YgcmVfbWF0Y2hfMi4pICAqLworKyAgc3RhcnRfbWVtb3J5LAorKworKyAgICAgICAgLyogU3RvcCByZW1lbWJlcmluZyB0aGUgdGV4dCB0aGF0IGlzIG1hdGNoZWQgYW5kIHN0b3JlIGl0IGluIGEKKysgICAgICAgICAgIG1lbW9yeSByZWdpc3Rlci4gIEZvbGxvd2VkIGJ5IG9uZSBieXRlIHdpdGggdGhlIHJlZ2lzdGVyCisrICAgICAgICAgICBudW1iZXIsIGluIHRoZSByYW5nZSAwIHRvIG9uZSBsZXNzIHRoYW4gYHJlX25zdWInIGluIHRoZQorKyAgICAgICAgICAgcGF0dGVybiBidWZmZXIsIGFuZCBvbmUgYnl0ZSB3aXRoIHRoZSBudW1iZXIgb2YgaW5uZXIgZ3JvdXBzLAorKyAgICAgICAgICAganVzdCBsaWtlIGBzdGFydF9tZW1vcnknLiAgKFdlIG5lZWQgdGhlIG51bWJlciBvZiBpbm5lcgorKyAgICAgICAgICAgZ3JvdXBzIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSBlYXN5IHdheSBvZiBmaW5kaW5nIHRoZQorKyAgICAgICAgICAgY29ycmVzcG9uZGluZyBzdGFydF9tZW1vcnkgd2hlbiB3ZSdyZSBhdCBhIHN0b3BfbWVtb3J5LikgICovCisrICBzdG9wX21lbW9yeSwKKysKKysgICAgICAgIC8qIE1hdGNoIGEgZHVwbGljYXRlIG9mIHNvbWV0aGluZyByZW1lbWJlcmVkLiBGb2xsb3dlZCBieSBvbmUKKysgICAgICAgICAgIGJ5dGUgY29udGFpbmluZyB0aGUgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKysgIGR1cGxpY2F0ZSwKKysKKysgICAgICAgIC8qIEZhaWwgdW5sZXNzIGF0IGJlZ2lubmluZyBvZiBsaW5lLiAgKi8KKysgIGJlZ2xpbmUsCisrCisrICAgICAgICAvKiBGYWlsIHVubGVzcyBhdCBlbmQgb2YgbGluZS4gICovCisrICBlbmRsaW5lLAorKworKyAgICAgICAgLyogU3VjY2VlZHMgaWYgYXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciAoaWYgZW1hY3MpIG9yIGF0IGJlZ2lubmluZworKyAgICAgICAgICAgb2Ygc3RyaW5nIHRvIGJlIG1hdGNoZWQgKGlmIG5vdCkuICAqLworKyAgYmVnYnVmLAorKworKyAgICAgICAgLyogQW5hbG9nb3VzbHksIGZvciBlbmQgb2YgYnVmZmVyL3N0cmluZy4gICovCisrICBlbmRidWYsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28gYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIHRvIHdoaWNoIHRvIGp1bXAuICAqLworKyAganVtcCwKKysKKysJLyogU2FtZSBhcyBqdW1wLCBidXQgbWFya3MgdGhlIGVuZCBvZiBhbiBhbHRlcm5hdGl2ZS4gICovCisrICBqdW1wX3Bhc3RfYWx0LAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcyBvZiBwbGFjZSB0byByZXN1bWUgYXQKKysgICAgICAgICAgIGluIGNhc2Ugb2YgZmFpbHVyZS4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIG9uX2ZhaWx1cmVfanVtcCwKKysKKysgICAgICAgIC8qIExpa2Ugb25fZmFpbHVyZV9qdW1wLCBidXQgcHVzaGVzIGEgcGxhY2Vob2xkZXIgaW5zdGVhZCBvZiB0aGUKKysgICAgICAgICAgIGN1cnJlbnQgc3RyaW5nIHBvc2l0aW9uIHdoZW4gZXhlY3V0ZWQuICAqLworKyAgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wLAorKworKyAgICAgICAgLyogVGhyb3cgYXdheSBsYXRlc3QgZmFpbHVyZSBwb2ludCBhbmQgdGhlbiBqdW1wIHRvIGZvbGxvd2luZworKyAgICAgICAgICAgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcy4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIHBvcF9mYWlsdXJlX2p1bXAsCisrCisrICAgICAgICAvKiBDaGFuZ2UgdG8gcG9wX2ZhaWx1cmVfanVtcCBpZiBrbm93IHdvbid0IGhhdmUgdG8gYmFja3RyYWNrIHRvCisrICAgICAgICAgICBtYXRjaDsgb3RoZXJ3aXNlIGNoYW5nZSB0byBqdW1wLiAgVGhpcyBpcyB1c2VkIHRvIGp1bXAKKysgICAgICAgICAgIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBhIHJlcGVhdC4gIElmIHdoYXQgZm9sbG93cyB0aGlzIGp1bXAKKysgICAgICAgICAgIGNsZWFybHkgd29uJ3QgbWF0Y2ggd2hhdCB0aGUgcmVwZWF0IGRvZXMsIHN1Y2ggdGhhdCB3ZSBjYW4gYmUKKysgICAgICAgICAgIHN1cmUgdGhhdCB0aGVyZSBpcyBubyB1c2UgYmFja3RyYWNraW5nIG91dCBvZiByZXBldGl0aW9ucworKyAgICAgICAgICAgYWxyZWFkeSBtYXRjaGVkLCB0aGVuIHdlIGNoYW5nZSBpdCB0byBhIHBvcF9mYWlsdXJlX2p1bXAuCisrICAgICAgICAgICBGb2xsb3dlZCBieSB0d28tYnl0ZSBhZGRyZXNzLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgbWF5YmVfcG9wX2p1bXAsCisrCisrICAgICAgICAvKiBKdW1wIHRvIGZvbGxvd2luZyB0d28tYnl0ZSBhZGRyZXNzLCBhbmQgcHVzaCBhIGR1bW15IGZhaWx1cmUKKysgICAgICAgICAgIHBvaW50LiBUaGlzIGZhaWx1cmUgcG9pbnQgd2lsbCBiZSB0aHJvd24gYXdheSBpZiBhbiBhdHRlbXB0CisrICAgICAgICAgICBpcyBtYWRlIHRvIHVzZSBpdCBmb3IgYSBmYWlsdXJlLiAgQSBgKycgY29uc3RydWN0IG1ha2VzIHRoaXMKKysgICAgICAgICAgIGJlZm9yZSB0aGUgZmlyc3QgcmVwZWF0LiAgQWxzbyB1c2VkIGFzIGFuIGludGVybWVkaWFyeSBraW5kCisrICAgICAgICAgICBvZiBqdW1wIHdoZW4gY29tcGlsaW5nIGFuIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgZHVtbXlfZmFpbHVyZV9qdW1wLAorKworKwkvKiBQdXNoIGEgZHVtbXkgZmFpbHVyZSBwb2ludCBhbmQgY29udGludWUuICBVc2VkIGF0IHRoZSBlbmQgb2YKKysJICAgYWx0ZXJuYXRpdmVzLiAgKi8KKysgIHB1c2hfZHVtbXlfZmFpbHVyZSwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MgYW5kIHR3by1ieXRlIG51bWJlciBuLgorKyAgICAgICAgICAgQWZ0ZXIgbWF0Y2hpbmcgTiB0aW1lcywganVtcCB0byB0aGUgYWRkcmVzcyB1cG9uIGZhaWx1cmUuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBzdWNjZWVkX24sCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzLCBhbmQgdHdvLWJ5dGUgbnVtYmVyIG4uCisrICAgICAgICAgICBKdW1wIHRvIHRoZSBhZGRyZXNzIE4gdGltZXMsIHRoZW4gZmFpbC4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIGp1bXBfbiwKKysKKysgICAgICAgIC8qIFNldCB0aGUgZm9sbG93aW5nIHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MgdG8gdGhlCisrICAgICAgICAgICBzdWJzZXF1ZW50IHR3by1ieXRlIG51bWJlci4gIFRoZSBhZGRyZXNzICppbmNsdWRlcyogdGhlIHR3bworKyAgICAgICAgICAgYnl0ZXMgb2YgbnVtYmVyLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgc2V0X251bWJlcl9hdCwKKysKKysgIHdvcmRjaGFyLAkvKiBNYXRjaGVzIGFueSB3b3JkLWNvbnN0aXR1ZW50IGNoYXJhY3Rlci4gICovCisrICBub3R3b3JkY2hhciwJLyogTWF0Y2hlcyBhbnkgY2hhciB0aGF0IGlzIG5vdCBhIHdvcmQtY29uc3RpdHVlbnQuICAqLworKworKyAgd29yZGJlZywJLyogU3VjY2VlZHMgaWYgYXQgd29yZCBiZWdpbm5pbmcuICAqLworKyAgd29yZGVuZCwJLyogU3VjY2VlZHMgaWYgYXQgd29yZCBlbmQuICAqLworKworKyAgd29yZGJvdW5kLAkvKiBTdWNjZWVkcyBpZiBhdCBhIHdvcmQgYm91bmRhcnkuICAqLworKyAgbm90d29yZGJvdW5kCS8qIFN1Y2NlZWRzIGlmIG5vdCBhdCBhIHdvcmQgYm91bmRhcnkuICAqLworKworKyMgaWZkZWYgZW1hY3MKKysgICxiZWZvcmVfZG90LAkvKiBTdWNjZWVkcyBpZiBiZWZvcmUgcG9pbnQuICAqLworKyAgYXRfZG90LAkvKiBTdWNjZWVkcyBpZiBhdCBwb2ludC4gICovCisrICBhZnRlcl9kb3QsCS8qIFN1Y2NlZWRzIGlmIGFmdGVyIHBvaW50LiAgKi8KKysKKysJLyogTWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHdob3NlIHN5bnRheCBpcyBzcGVjaWZpZWQuICBGb2xsb3dlZCBieQorKyAgICAgICAgICAgYSBieXRlIHdoaWNoIGNvbnRhaW5zIGEgc3ludGF4IGNvZGUsIGUuZy4sIFN3b3JkLiAgKi8KKysgIHN5bnRheHNwZWMsCisrCisrCS8qIE1hdGNoZXMgYW55IGNoYXJhY3RlciB3aG9zZSBzeW50YXggaXMgbm90IHRoYXQgc3BlY2lmaWVkLiAgKi8KKysgIG5vdHN5bnRheHNwZWMKKysjIGVuZGlmIC8qIGVtYWNzICovCisrfSByZV9vcGNvZGVfdDsKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysMCisrCisrI2lmZGVmIEJZVEUKKysjIGRlZmluZSBDSEFSX1QgY2hhcgorKyMgZGVmaW5lIFVDSEFSX1QgdW5zaWduZWQgY2hhcgorKyMgZGVmaW5lIENPTVBJTEVEX0JVRkZFUl9WQVIgYnVmcC0+YnVmZmVyCisrIyBkZWZpbmUgT0ZGU0VUX0FERFJFU1NfU0laRSAyCisrIyBkZWZpbmUgUFJFRklYKG5hbWUpIGJ5dGVfIyNuYW1lCisrIyBkZWZpbmUgQVJHX1BSRUZJWChuYW1lKSBuYW1lCisrIyBkZWZpbmUgUFVUX0NIQVIoYykgcHV0Y2hhciAoYykKKysjIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KKysjIGRlZmluZSBGSU5ESURYIGZpbmRpZHgKKysjZWxzZQorKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgQ0hBUl9UIHdjaGFyX3QKKysjICBkZWZpbmUgVUNIQVJfVCB3Y2hhcl90CisrIyAgZGVmaW5lIENPTVBJTEVEX0JVRkZFUl9WQVIgd2NfYnVmZmVyCisrIyAgZGVmaW5lIE9GRlNFVF9BRERSRVNTX1NJWkUgMSAvKiB0aGUgc2l6ZSB3aGljaCBTVE9SRV9OVU1CRVIgbWFjcm8gdXNlICovCisrIyAgZGVmaW5lIENIQVJfQ0xBU1NfU0laRSAoKF9fYWxpZ25vZl9fKHdjdHlwZV90KStzaXplb2Yod2N0eXBlX3QpKS9zaXplb2YoQ0hBUl9UKSsxKQorKyMgIGRlZmluZSBQUkVGSVgobmFtZSkgd2NzXyMjbmFtZQorKyMgIGRlZmluZSBBUkdfUFJFRklYKG5hbWUpIGMjI25hbWUKKysvKiBTaG91bGQgd2UgdXNlIHdpZGUgc3RyZWFtPz8gICovCisrIyAgZGVmaW5lIFBVVF9DSEFSKGMpIHByaW50ZiAoIiVDIiwgYyk7CisrIyAgZGVmaW5lIFRSVUUgMQorKyMgIGRlZmluZSBGQUxTRSAwCisrIyAgZGVmaW5lIGZpbmRpZHggZmluZGlkeHdjCisrIyAgaW5jbHVkZSA8bG9jYWxlL3dlaWdodHdjLmg+CisrIyAgdW5kZWYgZmluZGlkeAorKyMgIGRlZmluZSBGSU5ESURYIGZpbmRpZHh3YworKyMgZWxzZQorKyMgIGlmZGVmIE1CU19TVVBQT1JUCisrIyAgIGRlZmluZSBXQ0hBUgorKyMgICBkZWZpbmUgSU5TSURFX1JFQ1VSU0lPTgorKyMgICBpbmNsdWRlICJ4cmVnZXguYyIKKysjICAgdW5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKyMgIGVuZGlmCisrIyAgZGVmaW5lIEJZVEUKKysjICBkZWZpbmUgSU5TSURFX1JFQ1VSU0lPTgorKyMgIGluY2x1ZGUgInhyZWdleC5jIgorKyMgIHVuZGVmIElOU0lERV9SRUNVUlNJT04KKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysvKiBDb21tb24gb3BlcmF0aW9ucyBvbiB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrCisrLyogU3RvcmUgTlVNQkVSIGluIHR3byBjb250aWd1b3VzIGJ5dGVzIHN0YXJ0aW5nIGF0IERFU1RJTkFUSU9OLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2Ugc3RvcmUgTlVNQkVSIGluIDEgZWxlbWVudC4gICovCisrCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBTVE9SRV9OVU1CRVIoZGVzdGluYXRpb24sIG51bWJlcikJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKihkZXN0aW5hdGlvbikgPSAoVUNIQVJfVCkobnVtYmVyKTsJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBTVE9SRV9OVU1CRVIoZGVzdGluYXRpb24sIG51bWJlcikJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKVswXSA9IChudW1iZXIpICYgMDM3NzsJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKVsxXSA9IChudW1iZXIpID4+IDg7CQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBTYW1lIGFzIFNUT1JFX05VTUJFUiwgZXhjZXB0IGluY3JlbWVudCBERVNUSU5BVElPTiB0bworKyAgIHRoZSBieXRlIGFmdGVyIHdoZXJlIHRoZSBudW1iZXIgaXMgc3RvcmVkLiAgVGhlcmVmb3JlLCBERVNUSU5BVElPTgorKyAgIG11c3QgYmUgYW4gbHZhbHVlLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2Ugc3RvcmUgTlVNQkVSIGluIDEgZWxlbWVudC4gICovCisrCisrIyBkZWZpbmUgU1RPUkVfTlVNQkVSX0FORF9JTkNSKGRlc3RpbmF0aW9uLCBudW1iZXIpCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgU1RPUkVfTlVNQkVSIChkZXN0aW5hdGlvbiwgbnVtYmVyKTsJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSArPSBPRkZTRVRfQUREUkVTU19TSVpFOwkJCQlcCisrICB9IHdoaWxlICgwKQorKworKy8qIFB1dCBpbnRvIERFU1RJTkFUSU9OIGEgbnVtYmVyIHN0b3JlZCBpbiB0d28gY29udGlndW91cyBieXRlcyBzdGFydGluZworKyAgIGF0IFNPVVJDRS4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHN0b3JlIE5VTUJFUiBpbiAxIGVsZW1lbnQuICAqLworKworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRVhUUkFDVF9OVU1CRVIoZGVzdGluYXRpb24sIHNvdXJjZSkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSA9ICooc291cmNlKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSKGRlc3RpbmF0aW9uLCBzb3VyY2UpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgPSAqKHNvdXJjZSkgJiAwMzc3OwkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pICs9IFNJR05fRVhURU5EX0NIQVIgKCooKHNvdXJjZSkgKyAxKSkgPDwgODsJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZgorKworKyMgaWZkZWYgREVCVUcKKytzdGF0aWMgdm9pZCBQUkVGSVgoZXh0cmFjdF9udW1iZXIpIChpbnQgKmRlc3QsIFVDSEFSX1QgKnNvdXJjZSk7Cisrc3RhdGljIHZvaWQKKytQUkVGSVgoZXh0cmFjdF9udW1iZXIpIChpbnQgKmRlc3QsIFVDSEFSX1QgKnNvdXJjZSkKKyt7CisrIyAgaWZkZWYgV0NIQVIKKysgICpkZXN0ID0gKnNvdXJjZTsKKysjICBlbHNlIC8qIEJZVEUgKi8KKysgIGludCB0ZW1wID0gU0lHTl9FWFRFTkRfQ0hBUiAoKihzb3VyY2UgKyAxKSk7CisrICAqZGVzdCA9ICpzb3VyY2UgJiAwMzc3OworKyAgKmRlc3QgKz0gdGVtcCA8PCA4OworKyMgIGVuZGlmCisrfQorKworKyMgIGlmbmRlZiBFWFRSQUNUX01BQ1JPUyAvKiBUbyBkZWJ1ZyB0aGUgbWFjcm9zLiAgKi8KKysjICAgdW5kZWYgRVhUUkFDVF9OVU1CRVIKKysjICAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSKGRlc3QsIHNyYykgUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoJmRlc3QsIHNyYykKKysjICBlbmRpZiAvKiBub3QgRVhUUkFDVF9NQUNST1MgKi8KKysKKysjIGVuZGlmIC8qIERFQlVHICovCisrCisrLyogU2FtZSBhcyBFWFRSQUNUX05VTUJFUiwgZXhjZXB0IGluY3JlbWVudCBTT1VSQ0UgdG8gYWZ0ZXIgdGhlIG51bWJlci4KKysgICBTT1VSQ0UgbXVzdCBiZSBhbiBsdmFsdWUuICAqLworKworKyMgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSKGRlc3RpbmF0aW9uLCBzb3VyY2UpCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgRVhUUkFDVF9OVU1CRVIgKGRlc3RpbmF0aW9uLCBzb3VyY2UpOwkJCQlcCisrICAgIChzb3VyY2UpICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7IAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjIGlmZGVmIERFQlVHCisrc3RhdGljIHZvaWQgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoaW50ICpkZXN0aW5hdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICoqc291cmNlKTsKKytzdGF0aWMgdm9pZAorK1BSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKGludCAqZGVzdGluYXRpb24sIFVDSEFSX1QgKipzb3VyY2UpCisreworKyAgUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoZGVzdGluYXRpb24sICpzb3VyY2UpOworKyAgKnNvdXJjZSArPSBPRkZTRVRfQUREUkVTU19TSVpFOworK30KKysKKysjICBpZm5kZWYgRVhUUkFDVF9NQUNST1MKKysjICAgdW5kZWYgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IKKysjICAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSKGRlc3QsIHNyYykgXAorKyAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJmRlc3QsICZzcmMpCisrIyAgZW5kaWYgLyogbm90IEVYVFJBQ1RfTUFDUk9TICovCisrCisrIyBlbmRpZiAvKiBERUJVRyAqLworKworKwwKKysKKysvKiBJZiBERUJVRyBpcyBkZWZpbmVkLCBSZWdleCBwcmludHMgbWFueSB2b2x1bWlub3VzIG1lc3NhZ2VzIGFib3V0IHdoYXQKKysgICBpdCBpcyBkb2luZyAoaWYgdGhlIHZhcmlhYmxlIGBkZWJ1ZycgaXMgbm9uemVybykuICBJZiBsaW5rZWQgd2l0aCB0aGUKKysgICBtYWluIHByb2dyYW0gaW4gYGlyZWdleC5jJywgeW91IGNhbiBlbnRlciBwYXR0ZXJucyBhbmQgc3RyaW5ncworKyAgIGludGVyYWN0aXZlbHkuICBBbmQgaWYgbGlua2VkIHdpdGggdGhlIG1haW4gcHJvZ3JhbSBpbiBgbWFpbi5jJyBhbmQKKysgICB0aGUgb3RoZXIgdGVzdCBmaWxlcywgeW91IGNhbiBydW4gdGhlIGFscmVhZHktd3JpdHRlbiB0ZXN0cy4gICovCisrCisrIyBpZmRlZiBERUJVRworKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKysKKysvKiBXZSB1c2Ugc3RhbmRhcmQgSS9PIGZvciBkZWJ1Z2dpbmcuICAqLworKyMgICBpbmNsdWRlIDxzdGRpby5oPgorKworKy8qIEl0IGlzIHVzZWZ1bCB0byB0ZXN0IHRoaW5ncyB0aGF0IGBgbXVzdCcnIGJlIHRydWUgd2hlbiBkZWJ1Z2dpbmcuICAqLworKyMgICBpbmNsdWRlIDxhc3NlcnQuaD4KKysKKytzdGF0aWMgaW50IGRlYnVnOworKworKyMgICBkZWZpbmUgREVCVUdfU1RBVEVNRU5UKGUpIGUKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMSh4KSBpZiAoZGVidWcpIHByaW50ZiAoeCkKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMih4MSwgeDIpIGlmIChkZWJ1ZykgcHJpbnRmICh4MSwgeDIpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDMoeDEsIHgyLCB4MykgaWYgKGRlYnVnKSBwcmludGYgKHgxLCB4MiwgeDMpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDQoeDEsIHgyLCB4MywgeDQpIGlmIChkZWJ1ZykgcHJpbnRmICh4MSwgeDIsIHgzLCB4NCkKKysjICBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4ocCwgcywgZSkgCQkJXAorKyAgaWYgKGRlYnVnKSBQUkVGSVgocHJpbnRfcGFydGlhbF9jb21waWxlZF9wYXR0ZXJuKSAocywgZSkKKysjICBkZWZpbmUgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyh3LCBzMSwgc3oxLCBzMiwgc3oyKQkJXAorKyAgaWYgKGRlYnVnKSBQUkVGSVgocHJpbnRfZG91YmxlX3N0cmluZykgKHcsIHMxLCBzejEsIHMyLCBzejIpCisrCisrCisrLyogUHJpbnQgdGhlIGZhc3RtYXAgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4gICovCisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorK3ZvaWQKKytwcmludF9mYXN0bWFwIChjaGFyICpmYXN0bWFwKQorK3sKKysgIHVuc2lnbmVkIHdhc19hX3JhbmdlID0gMDsKKysgIHVuc2lnbmVkIGkgPSAwOworKworKyAgd2hpbGUgKGkgPCAoMSA8PCBCWVRFV0lEVEgpKQorKyAgICB7CisrICAgICAgaWYgKGZhc3RtYXBbaSsrXSkKKysJeworKwkgIHdhc19hX3JhbmdlID0gMDsKKysgICAgICAgICAgcHV0Y2hhciAoaSAtIDEpOworKyAgICAgICAgICB3aGlsZSAoaSA8ICgxIDw8IEJZVEVXSURUSCkgICYmICBmYXN0bWFwW2ldKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHdhc19hX3JhbmdlID0gMTsKKysgICAgICAgICAgICAgIGkrKzsKKysgICAgICAgICAgICB9CisrCSAgaWYgKHdhc19hX3JhbmdlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHByaW50ZiAoIi0iKTsKKysgICAgICAgICAgICAgIHB1dGNoYXIgKGkgLSAxKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgIHB1dGNoYXIgKCdcbicpOworK30KKysjICBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrCisrLyogUHJpbnQgYSBjb21waWxlZCBwYXR0ZXJuIHN0cmluZyBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLCBzdGFydGluZyBhdAorKyAgIHRoZSBTVEFSVCBwb2ludGVyIGludG8gaXQgYW5kIGVuZGluZyBqdXN0IGJlZm9yZSB0aGUgcG9pbnRlciBFTkQuICAqLworKworK3ZvaWQKKytQUkVGSVgocHJpbnRfcGFydGlhbF9jb21waWxlZF9wYXR0ZXJuKSAoVUNIQVJfVCAqc3RhcnQsIFVDSEFSX1QgKmVuZCkKKyt7CisrICBpbnQgbWNudCwgbWNudDI7CisrICBVQ0hBUl9UICpwMTsKKysgIFVDSEFSX1QgKnAgPSBzdGFydDsKKysgIFVDSEFSX1QgKnBlbmQgPSBlbmQ7CisrCisrICBpZiAoc3RhcnQgPT0gTlVMTCkKKysgICAgeworKyAgICAgIHByaW50ZiAoIihudWxsKVxuIik7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAvKiBMb29wIG92ZXIgcGF0dGVybiBjb21tYW5kcy4gICovCisrICB3aGlsZSAocCA8IHBlbmQpCisrICAgIHsKKysjICBpZmRlZiBfTElCQworKyAgICAgIHByaW50ZiAoIiV0ZDpcdCIsIHAgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgICAgIHByaW50ZiAoIiVsZDpcdCIsIChsb25nIGludCkgKHAgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCisrICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwKyspCisrCXsKKysgICAgICAgIGNhc2Ugbm9fb3A6CisrICAgICAgICAgIHByaW50ZiAoIi9ub19vcCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBleGFjdG46CisrCSAgbWNudCA9ICpwKys7CisrICAgICAgICAgIHByaW50ZiAoIi9leGFjdG4vJWQiLCBtY250KTsKKysgICAgICAgICAgZG8KKysJICAgIHsKKysgICAgICAgICAgICAgIHB1dGNoYXIgKCcvJyk7CisrCSAgICAgIFBVVF9DSEFSICgqcCsrKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIHdoaWxlICgtLW1jbnQpOworKyAgICAgICAgICBicmVhazsKKysKKysjICBpZmRlZiBNQlNfU1VQUE9SVAorKwljYXNlIGV4YWN0bl9iaW46CisrCSAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiL2V4YWN0bl9iaW4vJWQiLCBtY250KTsKKysgICAgICAgICAgZG8KKysJICAgIHsKKysJICAgICAgcHJpbnRmKCIvJWx4IiwgKGxvbmcgaW50KSAqcCsrKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIHdoaWxlICgtLW1jbnQpOworKyAgICAgICAgICBicmVhazsKKysjICBlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKwljYXNlIHN0YXJ0X21lbW9yeToKKysgICAgICAgICAgbWNudCA9ICpwKys7CisrICAgICAgICAgIHByaW50ZiAoIi9zdGFydF9tZW1vcnkvJWQvJWxkIiwgbWNudCwgKGxvbmcgaW50KSAqcCsrKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc3RvcF9tZW1vcnk6CisrICAgICAgICAgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi9zdG9wX21lbW9yeS8lZC8lbGQiLCBtY250LCAobG9uZyBpbnQpICpwKyspOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBkdXBsaWNhdGU6CisrCSAgcHJpbnRmICgiL2R1cGxpY2F0ZS8lbGQiLCAobG9uZyBpbnQpICpwKyspOworKwkgIGJyZWFrOworKworKwljYXNlIGFueWNoYXI6CisrCSAgcHJpbnRmICgiL2FueWNoYXIiKTsKKysJICBicmVhazsKKysKKysJY2FzZSBjaGFyc2V0OgorKyAgICAgICAgY2FzZSBjaGFyc2V0X25vdDoKKysgICAgICAgICAgeworKyMgIGlmZGVmIFdDSEFSCisrCSAgICBpbnQgaSwgbGVuZ3RoOworKwkgICAgd2NoYXJfdCAqd29ya3AgPSBwOworKwkgICAgcHJpbnRmICgiL2NoYXJzZXQgWyVzIiwKKysJICAgICAgICAgICAgKHJlX29wY29kZV90KSAqKHdvcmtwIC0gMSkgPT0gY2hhcnNldF9ub3QgPyAiXiIgOiAiIik7CisrCSAgICBwICs9IDU7CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOyBpKyspCisrCSAgICAgIHByaW50ZigiWzolbHg6XSIsIChsb25nIGludCkgKnArKyk7CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9sICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDspCisrCSAgICAgIHsKKysJCXByaW50ZigiWy4iKTsKKysJCXdoaWxlKCpwICE9IDApCisrCQkgIFBVVF9DSEFSKChpKyssKnArKykpOworKwkJaSsrLHArKzsKKysJCXByaW50ZigiLl0iKTsKKysJICAgICAgfQorKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3MgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOykKKysJICAgICAgeworKwkJcHJpbnRmKCJbPSIpOworKwkJd2hpbGUoKnAgIT0gMCkKKysJCSAgUFVUX0NIQVIoKGkrKywqcCsrKSk7CisrCQlpKysscCsrOworKwkJcHJpbnRmKCI9XSIpOworKwkgICAgICB9CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjaGFyX3JhbmdlICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDsgaSsrKQorKwkgICAgICB7CisrCQl3Y2hhcl90IHJhbmdlX3N0YXJ0ID0gKnArKzsKKysJCXdjaGFyX3QgcmFuZ2VfZW5kID0gKnArKzsKKysJCXByaW50ZigiJUMtJUMiLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTsKKysJICAgICAgfQorKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY2hhciAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7IGkrKykKKysJICAgICAgcHJpbnRmKCIlQyIsICpwKyspOworKwkgICAgcHV0Y2hhciAoJ10nKTsKKysjICBlbHNlCisrICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGMsIGxhc3QgPSAtMTAwOworKwkgICAgcmVnaXN0ZXIgaW50IGluX3JhbmdlID0gMDsKKysKKysJICAgIHByaW50ZiAoIi9jaGFyc2V0IFslcyIsCisrCSAgICAgICAgICAgIChyZV9vcGNvZGVfdCkgKihwIC0gMSkgPT0gY2hhcnNldF9ub3QgPyAiXiIgOiAiIik7CisrCisrICAgICAgICAgICAgYXNzZXJ0IChwICsgKnAgPCBwZW5kKTsKKysKKysgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMjU2OyBjKyspCisrCSAgICAgIGlmIChjIC8gOCA8ICpwCisrCQkgICYmIChwWzEgKyAoYy84KV0gJiAoMSA8PCAoYyAlIDgpKSkpCisrCQl7CisrCQkgIC8qIEFyZSB3ZSBzdGFydGluZyBhIHJhbmdlPyAgKi8KKysJCSAgaWYgKGxhc3QgKyAxID09IGMgJiYgISBpbl9yYW5nZSkKKysJCSAgICB7CisrCQkgICAgICBwdXRjaGFyICgnLScpOworKwkJICAgICAgaW5fcmFuZ2UgPSAxOworKwkJICAgIH0KKysJCSAgLyogSGF2ZSB3ZSBicm9rZW4gYSByYW5nZT8gICovCisrCQkgIGVsc2UgaWYgKGxhc3QgKyAxICE9IGMgJiYgaW5fcmFuZ2UpCisrICAgICAgICAgICAgICB7CisrCQkgICAgICBwdXRjaGFyIChsYXN0KTsKKysJCSAgICAgIGluX3JhbmdlID0gMDsKKysJCSAgICB9CisrCisrCQkgIGlmICghIGluX3JhbmdlKQorKwkJICAgIHB1dGNoYXIgKGMpOworKworKwkJICBsYXN0ID0gYzsKKysgICAgICAgICAgICAgIH0KKysKKysJICAgIGlmIChpbl9yYW5nZSkKKysJICAgICAgcHV0Y2hhciAobGFzdCk7CisrCisrCSAgICBwdXRjaGFyICgnXScpOworKworKwkgICAgcCArPSAxICsgKnA7CisrIyAgZW5kaWYgLyogV0NIQVIgKi8KKysJICB9CisrCSAgYnJlYWs7CisrCisrCWNhc2UgYmVnbGluZToKKysJICBwcmludGYgKCIvYmVnbGluZSIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBlbmRsaW5lOgorKyAgICAgICAgICBwcmludGYgKCIvZW5kbGluZSIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgdG8gJWxkIiwKKysJCSAgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL2R1bW15X2ZhaWx1cmVfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvZHVtbXlfZmFpbHVyZV9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBwdXNoX2R1bW15X2ZhaWx1cmU6CisrICAgICAgICAgIHByaW50ZiAoIi9wdXNoX2R1bW15X2ZhaWx1cmUiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvbWF5YmVfcG9wX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL21heWJlX3BvcF9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKwkgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9wb3BfZmFpbHVyZV9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9wb3BfZmFpbHVyZV9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wX3Bhc3RfYWx0OgorKwkgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9qdW1wX3Bhc3RfYWx0IHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9qdW1wX3Bhc3RfYWx0IHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wOgorKwkgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBzdWNjZWVkX246CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrCSAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQyLCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysJICBwcmludGYgKCIvc3VjY2VlZF9uIHRvICV0ZCwgJWQgdGltZXMiLCBwMSAtIHN0YXJ0LCBtY250Mik7CisrIyAgZWxzZQorKwkgIHByaW50ZiAoIi9zdWNjZWVkX24gdG8gJWxkLCAlZCB0aW1lcyIsCisrCQkgIChsb25nIGludCkgKHAxIC0gc3RhcnQpLCBtY250Mik7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXBfbjoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysJICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudDIsICZwKTsKKysJICBwcmludGYgKCIvanVtcF9uIHRvICVkLCAlZCB0aW1lcyIsIHAxIC0gc3RhcnQsIG1jbnQyKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHNldF9udW1iZXJfYXQ6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrCSAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQyLCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysJICBwcmludGYgKCIvc2V0X251bWJlcl9hdCBsb2NhdGlvbiAldGQgdG8gJWQiLCBwMSAtIHN0YXJ0LCBtY250Mik7CisrIyAgZWxzZQorKwkgIHByaW50ZiAoIi9zZXRfbnVtYmVyX2F0IGxvY2F0aW9uICVsZCB0byAlZCIsCisrCQkgIChsb25nIGludCkgKHAxIC0gc3RhcnQpLCBtY250Mik7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHdvcmRib3VuZDoKKysJICBwcmludGYgKCIvd29yZGJvdW5kIik7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugbm90d29yZGJvdW5kOgorKwkgIHByaW50ZiAoIi9ub3R3b3JkYm91bmQiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugd29yZGJlZzoKKysJICBwcmludGYgKCIvd29yZGJlZyIpOworKwkgIGJyZWFrOworKworKwljYXNlIHdvcmRlbmQ6CisrCSAgcHJpbnRmICgiL3dvcmRlbmQiKTsKKysJICBicmVhazsKKysKKysjICBpZmRlZiBlbWFjcworKwljYXNlIGJlZm9yZV9kb3Q6CisrCSAgcHJpbnRmICgiL2JlZm9yZV9kb3QiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgYXRfZG90OgorKwkgIHByaW50ZiAoIi9hdF9kb3QiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgYWZ0ZXJfZG90OgorKwkgIHByaW50ZiAoIi9hZnRlcl9kb3QiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc3ludGF4c3BlYzoKKysgICAgICAgICAgcHJpbnRmICgiL3N5bnRheHNwZWMiKTsKKysJICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvJWQiLCBtY250KTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugbm90c3ludGF4c3BlYzoKKysgICAgICAgICAgcHJpbnRmICgiL25vdHN5bnRheHNwZWMiKTsKKysJICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvJWQiLCBtY250KTsKKysJICBicmVhazsKKysjICBlbmRpZiAvKiBlbWFjcyAqLworKworKwljYXNlIHdvcmRjaGFyOgorKwkgIHByaW50ZiAoIi93b3JkY2hhciIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBub3R3b3JkY2hhcjoKKysJICBwcmludGYgKCIvbm90d29yZGNoYXIiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgYmVnYnVmOgorKwkgIHByaW50ZiAoIi9iZWdidWYiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZW5kYnVmOgorKwkgIHByaW50ZiAoIi9lbmRidWYiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBwcmludGYgKCI/JWxkIiwgKGxvbmcgaW50KSAqKHAtMSkpOworKwl9CisrCisrICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrICAgIH0KKysKKysjICBpZmRlZiBfTElCQworKyAgcHJpbnRmICgiJXRkOlx0ZW5kIG9mIHBhdHRlcm4uXG4iLCBwIC0gc3RhcnQpOworKyMgIGVsc2UKKysgIHByaW50ZiAoIiVsZDpcdGVuZCBvZiBwYXR0ZXJuLlxuIiwgKGxvbmcgaW50KSAocCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKyt9CisrCisrCisrdm9pZAorK1BSRUZJWChwcmludF9jb21waWxlZF9wYXR0ZXJuKSAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIFVDSEFSX1QgKmJ1ZmZlciA9IChVQ0hBUl9UKikgYnVmcC0+YnVmZmVyOworKworKyAgUFJFRklYKHByaW50X3BhcnRpYWxfY29tcGlsZWRfcGF0dGVybikgKGJ1ZmZlciwgYnVmZmVyCisrCQkJCSAgKyBidWZwLT51c2VkIC8gc2l6ZW9mKFVDSEFSX1QpKTsKKysgIHByaW50ZiAoIiVsZCBieXRlcyB1c2VkLyVsZCBieXRlcyBhbGxvY2F0ZWQuXG4iLAorKwkgIGJ1ZnAtPnVzZWQsIGJ1ZnAtPmFsbG9jYXRlZCk7CisrCisrICBpZiAoYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSAmJiBidWZwLT5mYXN0bWFwKQorKyAgICB7CisrICAgICAgcHJpbnRmICgiZmFzdG1hcDogIik7CisrICAgICAgcHJpbnRfZmFzdG1hcCAoYnVmcC0+ZmFzdG1hcCk7CisrICAgIH0KKysKKysjICBpZmRlZiBfTElCQworKyAgcHJpbnRmICgicmVfbnN1YjogJVpkXHQiLCBidWZwLT5yZV9uc3ViKTsKKysjICBlbHNlCisrICBwcmludGYgKCJyZV9uc3ViOiAlbGRcdCIsIChsb25nIGludCkgYnVmcC0+cmVfbnN1Yik7CisrIyAgZW5kaWYKKysgIHByaW50ZiAoInJlZ3NfYWxsb2M6ICVkXHQiLCBidWZwLT5yZWdzX2FsbG9jYXRlZCk7CisrICBwcmludGYgKCJjYW5fYmVfbnVsbDogJWRcdCIsIGJ1ZnAtPmNhbl9iZV9udWxsKTsKKysgIHByaW50ZiAoIm5ld2xpbmVfYW5jaG9yOiAlZFxuIiwgYnVmcC0+bmV3bGluZV9hbmNob3IpOworKyAgcHJpbnRmICgibm9fc3ViOiAlZFx0IiwgYnVmcC0+bm9fc3ViKTsKKysgIHByaW50ZiAoIm5vdF9ib2w6ICVkXHQiLCBidWZwLT5ub3RfYm9sKTsKKysgIHByaW50ZiAoIm5vdF9lb2w6ICVkXHQiLCBidWZwLT5ub3RfZW9sKTsKKysgIHByaW50ZiAoInN5bnRheDogJWx4XG4iLCBidWZwLT5zeW50YXgpOworKyAgLyogUGVyaGFwcyB3ZSBzaG91bGQgcHJpbnQgdGhlIHRyYW5zbGF0ZSB0YWJsZT8gICovCisrfQorKworKworK3ZvaWQKKytQUkVGSVgocHJpbnRfZG91YmxlX3N0cmluZykgKGNvbnN0IENIQVJfVCAqd2hlcmUsIGNvbnN0IENIQVJfVCAqc3RyaW5nMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplMSwgY29uc3QgQ0hBUl9UICpzdHJpbmcyLCBpbnQgc2l6ZTIpCisreworKyAgaW50IHRoaXNfY2hhcjsKKysKKysgIGlmICh3aGVyZSA9PSBOVUxMKQorKyAgICBwcmludGYgKCIobnVsbCkiKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIGludCBjbnQ7CisrCisrICAgICAgaWYgKEZJUlNUX1NUUklOR19QICh3aGVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZvciAodGhpc19jaGFyID0gd2hlcmUgLSBzdHJpbmcxOyB0aGlzX2NoYXIgPCBzaXplMTsgdGhpc19jaGFyKyspCisrCSAgICBQVVRfQ0hBUiAoc3RyaW5nMVt0aGlzX2NoYXJdKTsKKysKKysgICAgICAgICAgd2hlcmUgPSBzdHJpbmcyOworKyAgICAgICAgfQorKworKyAgICAgIGNudCA9IDA7CisrICAgICAgZm9yICh0aGlzX2NoYXIgPSB3aGVyZSAtIHN0cmluZzI7IHRoaXNfY2hhciA8IHNpemUyOyB0aGlzX2NoYXIrKykKKysJeworKwkgIFBVVF9DSEFSIChzdHJpbmcyW3RoaXNfY2hhcl0pOworKwkgIGlmICgrK2NudCA+IDEwMCkKKysJICAgIHsKKysJICAgICAgZnB1dHMgKCIuLi4iLCBzdGRvdXQpOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICB9CisrfQorKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKyt2b2lkCisrcHJpbnRjaGFyIChpbnQgYykKKyt7CisrICBwdXRjIChjLCBzdGRlcnIpOworK30KKysjICBlbmRpZgorKworKyMgZWxzZSAvKiBub3QgREVCVUcgKi8KKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgIHVuZGVmIGFzc2VydAorKyMgICBkZWZpbmUgYXNzZXJ0KGUpCisrCisrIyAgIGRlZmluZSBERUJVR19TVEFURU1FTlQoZSkKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMSh4KQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQyKHgxLCB4MikKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMyh4MSwgeDIsIHgzKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQ0KHgxLCB4MiwgeDMsIHg0KQorKyMgIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysjICBkZWZpbmUgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTihwLCBzLCBlKQorKyMgIGRlZmluZSBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HKHcsIHMxLCBzejEsIHMyLCBzejIpCisrCisrIyBlbmRpZiAvKiBub3QgREVCVUcgKi8KKysKKysMCisrCisrIyBpZmRlZiBXQ0hBUgorKy8qIFRoaXMgIGNvbnZlcnQgYSBtdWx0aWJ5dGUgc3RyaW5nIHRvIGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nLgorKyAgIEFuZCB3cml0ZSB0aGVpciBjb3JyZXNwb25kYW5jZXMgdG8gb2Zmc2V0X2J1ZmZlcihzZWUgYmVsb3cpCisrICAgYW5kIHdyaXRlIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIHRvIGlzX2JpbmFyeS4KKysgICBUaGlzIGFzc3VtZSBpbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZXMgYXMgYmluYXJ5IGRhdGEuCisrICAgV2UgYXNzdW1lIG9mZnNldF9idWZmZXIgYW5kIGlzX2JpbmFyeSBpcyBhbHJlYWR5IGFsbG9jYXRlZAorKyAgIGVub3VnaCBzcGFjZS4gICovCisrCisrc3RhdGljIHNpemVfdCBjb252ZXJ0X21ic190b193Y3MgKENIQVJfVCAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLAorKwkJCQkgIHNpemVfdCBsZW4sIGludCAqb2Zmc2V0X2J1ZmZlciwKKysJCQkJICBjaGFyICppc19iaW5hcnkpOworK3N0YXRpYyBzaXplX3QKKytjb252ZXJ0X21ic190b193Y3MgKENIQVJfVCAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhcipzcmMsIHNpemVfdCBsZW4sCisrICAgICAgICAgICAgICAgICAgICBpbnQgKm9mZnNldF9idWZmZXIsIGNoYXIgKmlzX2JpbmFyeSkKKysgICAgIC8qIEl0IGhvbGQgY29ycmVzcG9uZGFuY2VzIGJldHdlZW4gc3JjKGNoYXIgc3RyaW5nKSBhbmQKKysJZGVzdCh3Y2hhcl90IHN0cmluZykgZm9yIG9wdGltaXphdGlvbi4KKysJZS5nLiBzcmMgID0gInh4eHl6eiIKKysgICAgICAgICAgICAgZGVzdCA9IHsnWCcsICdZJywgJ1onfQorKwkgICAgICAoZWFjaCAieHh4IiwgInkiIGFuZCAienoiIHJlcHJlc2VudCBvbmUgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkgICAgICAgY29ycmVzcG9uZGluZyB0byAnWCcsICdZJyBhbmQgJ1onLikKKysJICBvZmZzZXRfYnVmZmVyID0gezAsIDArMygieHh4IiksIDArMysxKCJ5IiksIDArMysxKzIoInp6Iil9CisrCSAgCSAgICAgICAgPSB7MCwgMywgNCwgNn0KKysgICAgICovCisreworKyAgd2NoYXJfdCAqcGRlc3QgPSBkZXN0OworKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNyYyA9IHNyYzsKKysgIHNpemVfdCB3Y19jb3VudCA9IDA7CisrCisrICBtYnN0YXRlX3QgbWJzOworKyAgaW50IGksIGNvbnN1bWVkOworKyAgc2l6ZV90IG1iX3JlbWFpbiA9IGxlbjsKKysgIHNpemVfdCBtYl9jb3VudCA9IDA7CisrCisrICAvKiBJbml0aWFsaXplIHRoZSBjb252ZXJzaW9uIHN0YXRlLiAgKi8KKysgIG1lbXNldCAoJm1icywgMCwgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgIG9mZnNldF9idWZmZXJbMF0gPSAwOworKyAgZm9yKCA7IG1iX3JlbWFpbiA+IDAgOyArK3djX2NvdW50LCArK3BkZXN0LCBtYl9yZW1haW4gLT0gY29uc3VtZWQsCisrCSBwc3JjICs9IGNvbnN1bWVkKQorKyAgICB7CisrI2lmZGVmIF9MSUJDCisrICAgICAgY29uc3VtZWQgPSBfX21icnRvd2MgKHBkZXN0LCBwc3JjLCBtYl9yZW1haW4sICZtYnMpOworKyNlbHNlCisrICAgICAgY29uc3VtZWQgPSBtYnJ0b3djIChwZGVzdCwgcHNyYywgbWJfcmVtYWluLCAmbWJzKTsKKysjZW5kaWYKKysKKysgICAgICBpZiAoY29uc3VtZWQgPD0gMCkKKysJLyogZmFpbGVkIHRvIGNvbnZlcnQuIG1heWJlIHNyYyBjb250YWlucyBiaW5hcnkgZGF0YS4KKysJICAgU28gd2UgY29uc3VtZSAxIGJ5dGUgbWFudWFseS4gICovCisrCXsKKysJICAqcGRlc3QgPSAqcHNyYzsKKysJICBjb25zdW1lZCA9IDE7CisrCSAgaXNfYmluYXJ5W3djX2NvdW50XSA9IFRSVUU7CisrCX0KKysgICAgICBlbHNlCisrCWlzX2JpbmFyeVt3Y19jb3VudF0gPSBGQUxTRTsKKysgICAgICAvKiBJbiBzamlzIGVuY29kaW5nLCB3ZSB1c2UgeWVuIHNpZ24gYXMgZXNjYXBlIGNoYXJhY3RlciBpbgorKwkgcGxhY2Ugb2YgcmV2ZXJzZSBzb2xpZHVzLiBTbyB3ZSBjb252ZXJ0IDB4NWMoeWVuIHNpZ24gaW4KKysJIHNqaXMpIHRvIG5vdCAweGE1KHllbiBzaWduIGluIFVDUzIpIGJ1dCAweDVjKHJldmVyc2UKKysJIHNvbGlkdXMgaW4gVUNTMikuICAqLworKyAgICAgIGlmIChjb25zdW1lZCA9PSAxICYmIChpbnQpICpwc3JjID09IDB4NWMgJiYgKGludCkgKnBkZXN0ID09IDB4YTUpCisrCSpwZGVzdCA9ICh3Y2hhcl90KSAqcHNyYzsKKysKKysgICAgICBvZmZzZXRfYnVmZmVyW3djX2NvdW50ICsgMV0gPSBtYl9jb3VudCArPSBjb25zdW1lZDsKKysgICAgfQorKworKyAgLyogRmlsbCByZW1haW4gb2YgdGhlIGJ1ZmZlciB3aXRoIHNlbnRpbmVsLiAgKi8KKysgIGZvciAoaSA9IHdjX2NvdW50ICsgMSA7IGkgPD0gbGVuIDsgaSsrKQorKyAgICBvZmZzZXRfYnVmZmVyW2ldID0gbWJfY291bnQgKyAxOworKworKyAgcmV0dXJuIHdjX2NvdW50OworK30KKysKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiBTZXQgYnkgYHJlX3NldF9zeW50YXgnIHRvIHRoZSBjdXJyZW50IHJlZ2V4cCBzeW50YXggdG8gcmVjb2duaXplLiAgQ2FuCisrICAgYWxzbyBiZSBhc3NpZ25lZCB0byBhcmJpdHJhcmlseTogZWFjaCBwYXR0ZXJuIGJ1ZmZlciBzdG9yZXMgaXRzIG93bgorKyAgIHN5bnRheCwgc28gaXQgY2FuIGJlIGNoYW5nZWQgYmV0d2VlbiByZWdleCBjb21waWxhdGlvbnMuICAqLworKy8qIFRoaXMgaGFzIG5vIGluaXRpYWxpemVyIGJlY2F1c2UgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIEVtYWNzCisrICAgYmVjb21lIHJlYWQtb25seSBhZnRlciBkdW1waW5nLiAgKi8KKytyZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisrCisrCisrLyogU3BlY2lmeSB0aGUgcHJlY2lzZSBzeW50YXggb2YgcmVnZXhwcyBmb3IgY29tcGlsYXRpb24uICBUaGlzIHByb3ZpZGVzCisrICAgZm9yIGNvbXBhdGliaWxpdHkgZm9yIHZhcmlvdXMgdXRpbGl0aWVzIHdoaWNoIGhpc3RvcmljYWxseSBoYXZlCisrICAgZGlmZmVyZW50LCBpbmNvbXBhdGlibGUgc3ludGF4ZXMuCisrCisrICAgVGhlIGFyZ3VtZW50IFNZTlRBWCBpcyBhIGJpdCBtYXNrIGNvbXByaXNlZCBvZiB0aGUgdmFyaW91cyBiaXRzCisrICAgZGVmaW5lZCBpbiByZWdleC5oLiAgV2UgcmV0dXJuIHRoZSBvbGQgc3ludGF4LiAgKi8KKysKKytyZWdfc3ludGF4X3QKKytyZV9zZXRfc3ludGF4IChyZWdfc3ludGF4X3Qgc3ludGF4KQorK3sKKysgIHJlZ19zeW50YXhfdCByZXQgPSByZV9zeW50YXhfb3B0aW9uczsKKysKKysgIHJlX3N5bnRheF9vcHRpb25zID0gc3ludGF4OworKyMgaWZkZWYgREVCVUcKKysgIGlmIChzeW50YXggJiBSRV9ERUJVRykKKysgICAgZGVidWcgPSAxOworKyAgZWxzZSBpZiAoZGVidWcpIC8qIHdhcyBvbiBidXQgbm93IGlzIG5vdCAqLworKyAgICBkZWJ1ZyA9IDA7CisrIyBlbmRpZiAvKiBERUJVRyAqLworKyAgcmV0dXJuIHJldDsKKyt9CisrIyBpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2V0X3N5bnRheCwgcmVfc2V0X3N5bnRheCkKKysjIGVuZGlmCisrDAorKy8qIFRoaXMgdGFibGUgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBvZiB0aGUgZXJyb3IgY29kZXMgbGlzdGVkCisrICAgaW4gcmVnZXguaC4gIE9idmlvdXNseSB0aGUgb3JkZXIgaGVyZSBoYXMgdG8gYmUgc2FtZSBhcyB0aGVyZS4KKysgICBQT1NJWCBkb2Vzbid0IHJlcXVpcmUgdGhhdCB3ZSBkbyBhbnl0aGluZyBmb3IgUkVHX05PRVJST1IsCisrICAgYnV0IHdoeSBub3QgYmUgbmljZT8gICovCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKnJlX2Vycm9yX21zZ2lkW10gPQorKyAgeworKyAgICBnZXR0ZXh0X25vb3AgKCJTdWNjZXNzIiksCS8qIFJFR19OT0VSUk9SICovCisrICAgIGdldHRleHRfbm9vcCAoIk5vIG1hdGNoIiksCS8qIFJFR19OT01BVENIICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIiksIC8qIFJFR19CQURQQVQgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIiksIC8qIFJFR19FQ09MTEFURSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIiksIC8qIFJFR19FQ1RZUEUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVHJhaWxpbmcgYmFja3NsYXNoIiksIC8qIFJFR19FRVNDQVBFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgYmFjayByZWZlcmVuY2UiKSwgLyogUkVHX0VTVUJSRUcgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkIFsgb3IgW14iKSwJLyogUkVHX0VCUkFDSyAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgKCBvciBcXCgiKSwgLyogUkVHX0VQQVJFTiAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgXFx7IiksIC8qIFJFR19FQlJBQ0UgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIpLCAvKiBSRUdfQkFEQlIgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByYW5nZSBlbmQiKSwJLyogUkVHX0VSQU5HRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJNZW1vcnkgZXhoYXVzdGVkIiksIC8qIFJFR19FU1BBQ0UgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIiksIC8qIFJFR19CQURSUFQgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iKSwgLyogUkVHX0VFTkQgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciKSwgLyogUkVHX0VTSVpFICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCApIG9yIFxcKSIpIC8qIFJFR19FUlBBUkVOICovCisrICB9OworKwwKKysjZW5kaWYgLyogSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZm5kZWYgREVGSU5FRF9PTkNFCisrLyogQXZvaWRpbmcgYWxsb2NhIGR1cmluZyBtYXRjaGluZywgdG8gcGxhY2F0ZSByX2FsbG9jLiAgKi8KKysKKysvKiBEZWZpbmUgTUFUQ0hfTUFZX0FMTE9DQVRFIHVubGVzcyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorKyAgIHNlYXJjaGluZyBhbmQgbWF0Y2hpbmcgZnVuY3Rpb25zIHNob3VsZCBub3QgY2FsbCBhbGxvY2EuICBPbiBzb21lCisrICAgc3lzdGVtcywgYWxsb2NhIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIG1hbGxvYywgYW5kIGlmIHdlJ3JlCisrICAgdXNpbmcgdGhlIHJlbG9jYXRpbmcgYWxsb2NhdG9yIHJvdXRpbmVzLCB0aGVuIG1hbGxvYyBjb3VsZCBjYXVzZSBhCisrICAgcmVsb2NhdGlvbiwgd2hpY2ggbWlnaHQgKGlmIHRoZSBzdHJpbmdzIGJlaW5nIHNlYXJjaGVkIGFyZSBpbiB0aGUKKysgICByYWxsb2MgaGVhcCkgc2hpZnQgdGhlIGRhdGEgb3V0IGZyb20gdW5kZXJuZWF0aCB0aGUgcmVnZXhwCisrICAgcm91dGluZXMuCisrCisrICAgSGVyZSdzIGFub3RoZXIgcmVhc29uIHRvIGF2b2lkIGFsbG9jYXRpb246IEVtYWNzCisrICAgcHJvY2Vzc2VzIGlucHV0IGZyb20gWCBpbiBhIHNpZ25hbCBoYW5kbGVyOyBwcm9jZXNzaW5nIFggaW5wdXQgbWF5CisrICAgY2FsbCBtYWxsb2M7IGlmIGlucHV0IGFycml2ZXMgd2hpbGUgYSBtYXRjaGluZyByb3V0aW5lIGlzIGNhbGxpbmcKKysgICBtYWxsb2MsIHRoZW4gd2UncmUgc2Nyb2QuICBCdXQgRW1hY3MgY2FuJ3QganVzdCBibG9jayBpbnB1dCB3aGlsZQorKyAgIGNhbGxpbmcgbWF0Y2hpbmcgcm91dGluZXM7IHRoZW4gd2UgZG9uJ3Qgbm90aWNlIGludGVycnVwdHMgd2hlbgorKyAgIHRoZXkgY29tZSBpbi4gIFNvLCBFbWFjcyBibG9ja3MgaW5wdXQgYXJvdW5kIGFsbCByZWdleHAgY2FsbHMKKysgICBleGNlcHQgdGhlIG1hdGNoaW5nIGNhbGxzLCB3aGljaCBpdCBsZWF2ZXMgdW5wcm90ZWN0ZWQsIGluIHRoZQorKyAgIGZhaXRoIHRoYXQgdGhleSB3aWxsIG5vdCBtYWxsb2MuICAqLworKworKy8qIE5vcm1hbGx5LCB0aGlzIGlzIGZpbmUuICAqLworKyMgZGVmaW5lIE1BVENIX01BWV9BTExPQ0FURQorKworKy8qIFdoZW4gdXNpbmcgR05VIEMsIHdlIGFyZSBub3QgUkVBTExZIHVzaW5nIHRoZSBDIGFsbG9jYSwgbm8gbWF0dGVyCisrICAgd2hhdCBjb25maWcuaCBtYXkgc2F5LiAgU28gZG9uJ3QgdGFrZSBwcmVjYXV0aW9ucyBmb3IgaXQuICAqLworKyMgaWZkZWYgX19HTlVDX18KKysjICB1bmRlZiBDX0FMTE9DQQorKyMgZW5kaWYKKysKKysvKiBUaGUgbWF0Y2ggcm91dGluZXMgbWF5IG5vdCBhbGxvY2F0ZSBpZiAoMSkgdGhleSB3b3VsZCBkbyBpdCB3aXRoIG1hbGxvYworKyAgIGFuZCAoMikgaXQncyBub3Qgc2FmZSBmb3IgdGhlbSB0byB1c2UgbWFsbG9jLgorKyAgIE5vdGUgdGhhdCBpZiBSRUxfQUxMT0MgaXMgZGVmaW5lZCwgbWF0Y2hpbmcgd291bGQgbm90IHVzZSBtYWxsb2MgZm9yIHRoZQorKyAgIGZhaWx1cmUgc3RhY2ssIGJ1dCB3ZSB3b3VsZCBzdGlsbCB1c2UgaXQgZm9yIHRoZSByZWdpc3RlciB2ZWN0b3JzOworKyAgIHNvIFJFTF9BTExPQyBzaG91bGQgbm90IGFmZmVjdCB0aGlzLiAgKi8KKysjIGlmIChkZWZpbmVkIENfQUxMT0NBIHx8IGRlZmluZWQgUkVHRVhfTUFMTE9DKSAmJiBkZWZpbmVkIGVtYWNzCisrIyAgdW5kZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyBlbmRpZgorKyNlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrDAorKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrLyogRmFpbHVyZSBzdGFjayBkZWNsYXJhdGlvbnMgYW5kIG1hY3JvczsgYm90aCByZV9jb21waWxlX2Zhc3RtYXAgYW5kCisrICAgcmVfbWF0Y2hfMiB1c2UgYSBmYWlsdXJlIHN0YWNrLiAgVGhlc2UgaGF2ZSB0byBiZSBtYWNyb3MgYmVjYXVzZSBvZgorKyAgIFJFR0VYX0FMTE9DQVRFX1NUQUNLLiAgKi8KKysKKysKKysvKiBOdW1iZXIgb2YgZmFpbHVyZSBwb2ludHMgZm9yIHdoaWNoIHRvIGluaXRpYWxseSBhbGxvY2F0ZSBzcGFjZQorKyAgIHdoZW4gbWF0Y2hpbmcuICBJZiB0aGlzIG51bWJlciBpcyBleGNlZWRlZCwgd2UgYWxsb2NhdGUgbW9yZQorKyAgIHNwYWNlLCBzbyBpdCBpcyBub3QgYSBoYXJkIGxpbWl0LiAgKi8KKysjIGlmbmRlZiBJTklUX0ZBSUxVUkVfQUxMT0MKKysjICBkZWZpbmUgSU5JVF9GQUlMVVJFX0FMTE9DIDUKKysjIGVuZGlmCisrCisrLyogUm91Z2hseSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmFpbHVyZSBwb2ludHMgb24gdGhlIHN0YWNrLiAgV291bGQgYmUKKysgICBleGFjdGx5IHRoYXQgaWYgYWx3YXlzIHVzZWQgTUFYX0ZBSUxVUkVfSVRFTVMgaXRlbXMgZWFjaCB0aW1lIHdlIGZhaWxlZC4KKysgICBUaGlzIGlzIGEgdmFyaWFibGUgb25seSBzbyB1c2VycyBvZiByZWdleCBjYW4gYXNzaWduIHRvIGl0OyB3ZSBuZXZlcgorKyAgIGNoYW5nZSBpdCBvdXJzZWx2ZXMuICAqLworKworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKworKyMgIGlmZGVmIElOVF9JU18xNkJJVAorKyMgICBkZWZpbmUgUkVfTV9GX1RZUEUgbG9uZyBpbnQKKysjICBlbHNlCisrIyAgIGRlZmluZSBSRV9NX0ZfVFlQRSBpbnQKKysjICBlbmRpZiAvKiBJTlRfSVNfMTZCSVQgKi8KKysKKysjICBpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysvKiA0NDAwIHdhcyBlbm91Z2ggdG8gY2F1c2UgYSBjcmFzaCBvbiBBbHBoYSBPU0YvMSwKKysgICB3aG9zZSBkZWZhdWx0IHN0YWNrIGxpbWl0IGlzIDJtYi4gICovCisrIyAgIGRlZmluZSBSRV9NX0ZfREVGQVVMVCA0MDAwCisrIyAgZWxzZQorKyMgICBkZWZpbmUgUkVfTV9GX0RFRkFVTFQgMjAwMAorKyMgIGVuZGlmIC8qIE1BVENIX01BWV9BTExPQ0FURSAqLworKworKyMgIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorKworKyMgIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzMpCisrbGlua193YXJuaW5nIChyZV9tYXhfZmFpbHVyZXMsICJ0aGUgJ3JlX21heF9mYWlsdXJlcycgdmFyaWFibGUgaXMgb2Jzb2xldGUgYW5kIHdpbGwgZ28gYXdheS4iKQorK1JFX01fRl9UWVBFIHJlX21heF9mYWlsdXJlcyA9IFJFX01fRl9ERUZBVUxUOworKyMgIGVsc2UKKytSRV9NX0ZfVFlQRSByZV9tYXhfZmFpbHVyZXMgYXR0cmlidXRlX2hpZGRlbiA9IFJFX01fRl9ERUZBVUxUOworKyMgIGVuZGlmIC8qIFNITElCX0NPTVBBVCAqLworKworKyMgIHVuZGVmIFJFX01fRl9UWVBFCisrIyAgdW5kZWYgUkVfTV9GX0RFRkFVTFQKKysKKysjIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKworKyMgaWZkZWYgSU5UX0lTXzE2QklUCisrCisrdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KQorK3sKKysgIFVDSEFSX1QgKnBvaW50ZXI7CisrICBsb25nIGludCBpbnRlZ2VyOworK307CisrCisrdHlwZWRlZiB1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqc3RhY2s7CisrICB1bnNpZ25lZCBsb25nIGludCBzaXplOworKyAgdW5zaWduZWQgbG9uZyBpbnQgYXZhaWw7CQkvKiBPZmZzZXQgb2YgbmV4dCBvcGVuIHBvc2l0aW9uLiAgKi8KKyt9IFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpOworKworKyMgZWxzZSAvKiBub3QgSU5UX0lTXzE2QklUICovCisrCisrdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KQorK3sKKysgIFVDSEFSX1QgKnBvaW50ZXI7CisrICBpbnQgaW50ZWdlcjsKKyt9OworKworK3R5cGVkZWYgdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KSBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCk7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKnN0YWNrOworKyAgdW5zaWduZWQgc2l6ZTsKKysgIHVuc2lnbmVkIGF2YWlsOwkJCS8qIE9mZnNldCBvZiBuZXh0IG9wZW4gcG9zaXRpb24uICAqLworK30gUFJFRklYKGZhaWxfc3RhY2tfdHlwZSk7CisrCisrIyBlbmRpZiAvKiBJTlRfSVNfMTZCSVQgKi8KKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBkZWZpbmUgRkFJTF9TVEFDS19FTVBUWSgpICAgICAoZmFpbF9zdGFjay5hdmFpbCA9PSAwKQorKyMgIGRlZmluZSBGQUlMX1NUQUNLX1BUUl9FTVBUWSgpIChmYWlsX3N0YWNrX3B0ci0+YXZhaWwgPT0gMCkKKysjICBkZWZpbmUgRkFJTF9TVEFDS19GVUxMKCkgICAgICAoZmFpbF9zdGFjay5hdmFpbCA9PSBmYWlsX3N0YWNrLnNpemUpCisrIyBlbmRpZgorKworKworKy8qIERlZmluZSBtYWNyb3MgdG8gaW5pdGlhbGl6ZSBhbmQgZnJlZSB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBEbyBgcmV0dXJuIC0yJyBpZiB0aGUgYWxsb2MgZmFpbHMuICAqLworKworKyMgaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyAgZGVmaW5lIElOSVRfRkFJTF9TVEFDSygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgZmFpbF9zdGFjay5zdGFjayA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikJCVwKKysgICAgICBSRUdFWF9BTExPQ0FURV9TVEFDSyAoSU5JVF9GQUlMVVJFX0FMTE9DICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKTsgXAorKwkJCQkJCQkJCVwKKysgICAgaWYgKGZhaWxfc3RhY2suc3RhY2sgPT0gTlVMTCkJCQkJXAorKyAgICAgIHJldHVybiAtMjsJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgZmFpbF9zdGFjay5zaXplID0gSU5JVF9GQUlMVVJFX0FMTE9DOwkJCVwKKysgICAgZmFpbF9zdGFjay5hdmFpbCA9IDA7CQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgIGRlZmluZSBSRVNFVF9GQUlMX1NUQUNLKCkgIFJFR0VYX0ZSRUVfU1RBQ0sgKGZhaWxfc3RhY2suc3RhY2spCisrIyBlbHNlCisrIyAgZGVmaW5lIElOSVRfRkFJTF9TVEFDSygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgZmFpbF9zdGFjay5hdmFpbCA9IDA7CQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgIGRlZmluZSBSRVNFVF9GQUlMX1NUQUNLKCkKKysjIGVuZGlmCisrCisrCisrLyogRG91YmxlIHRoZSBzaXplIG9mIEZBSUxfU1RBQ0ssIHVwIHRvIGFwcHJveGltYXRlbHkgYHJlX21heF9mYWlsdXJlcycgaXRlbXMuCisrCisrICAgUmV0dXJuIDEgaWYgc3VjY2VlZHMsIGFuZCAwIGlmIGVpdGhlciByYW4gb3V0IG9mIG1lbW9yeQorKyAgIGFsbG9jYXRpbmcgc3BhY2UgZm9yIGl0IG9yIGl0IHdhcyBhbHJlYWR5IHRvbyBsYXJnZS4KKysKKysgICBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLIHJlcXVpcmVzIGBkZXN0aW5hdGlvbicgYmUgZGVjbGFyZWQuICAgKi8KKysKKysjIGRlZmluZSBET1VCTEVfRkFJTF9TVEFDSyhmYWlsX3N0YWNrKQkJCQkJXAorKyAgKChmYWlsX3N0YWNrKS5zaXplID4gKHVuc2lnbmVkKSAocmVfbWF4X2ZhaWx1cmVzICogTUFYX0ZBSUxVUkVfSVRFTVMpCVwKKysgICA/IDAJCQkJCQkJCQlcCisrICAgOiAoKGZhaWxfc3RhY2spLnN0YWNrID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKQkJCVwKKysgICAgICAgIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0sgKChmYWlsX3N0YWNrKS5zdGFjaywgCQkJXAorKyAgICAgICAgICAoZmFpbF9zdGFjaykuc2l6ZSAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSwJXAorKyAgICAgICAgICAoKGZhaWxfc3RhY2spLnNpemUgPDwgMSkgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpLFwKKysJCQkJCQkJCQlcCisrICAgICAgKGZhaWxfc3RhY2spLnN0YWNrID09IE5VTEwJCQkJCVwKKysgICAgICA/IDAJCQkJCQkJCVwKKysgICAgICA6ICgoZmFpbF9zdGFjaykuc2l6ZSA8PD0gMSwgCQkJCQlcCisrICAgICAgICAgMSkpKQorKworKworKy8qIFB1c2ggcG9pbnRlciBQT0lOVEVSIG9uIEZBSUxfU1RBQ0suCisrICAgUmV0dXJuIDEgaWYgd2FzIGFibGUgdG8gZG8gc28gYW5kIDAgaWYgcmFuIG91dCBvZiBtZW1vcnkgYWxsb2NhdGluZworKyAgIHNwYWNlIHRvIGRvIHNvLiAgKi8KKysjIGRlZmluZSBQVVNIX1BBVFRFUk5fT1AoUE9JTlRFUiwgRkFJTF9TVEFDSykJCQkJXAorKyAgKChGQUlMX1NUQUNLX0ZVTEwgKCkJCQkJCQkJXAorKyAgICAmJiAhRE9VQkxFX0ZBSUxfU1RBQ0sgKEZBSUxfU1RBQ0spKQkJCQkJXAorKyAgID8gMAkJCQkJCQkJCVwKKysgICA6ICgoRkFJTF9TVEFDSykuc3RhY2tbKEZBSUxfU1RBQ0spLmF2YWlsKytdLnBvaW50ZXIgPSBQT0lOVEVSLAlcCisrICAgICAgMSkpCisrCisrLyogUHVzaCBhIHBvaW50ZXIgdmFsdWUgb250byB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBBc3N1bWVzIHRoZSB2YXJpYWJsZSBgZmFpbF9zdGFjaycuICBQcm9iYWJseSBzaG91bGQgb25seQorKyAgIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgUFVTSF9GQUlMVVJFX1BPSU5UJy4gICovCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX1BPSU5URVIoaXRlbSkJCQkJCVwKKysgIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCsrXS5wb2ludGVyID0gKFVDSEFSX1QgKikgKGl0ZW0pCisrCisrLyogVGhpcyBwdXNoZXMgYW4gaW50ZWdlci12YWx1ZWQgaXRlbSBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIEFzc3VtZXMgdGhlIHZhcmlhYmxlIGBmYWlsX3N0YWNrJy4gIFByb2JhYmx5IHNob3VsZCBvbmx5CisrICAgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBQVVNIX0ZBSUxVUkVfUE9JTlQnLiAgKi8KKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfSU5UKGl0ZW0pCQkJCQlcCisrICBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwrK10uaW50ZWdlciA9IChpdGVtKQorKworKy8qIFB1c2ggYSBmYWlsX3N0YWNrX2VsdF90IHZhbHVlIG9udG8gdGhlIGZhaWx1cmUgc3RhY2suCisrICAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZhaWxfc3RhY2snLiAgUHJvYmFibHkgc2hvdWxkIG9ubHkKKysgICBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYFBVU0hfRkFJTFVSRV9QT0lOVCcuICAqLworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9FTFQoaXRlbSkJCQkJCVwKKysgIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCsrXSA9ICAoaXRlbSkKKysKKysvKiBUaGVzZSB0aHJlZSBQT1AuLi4gb3BlcmF0aW9ucyBjb21wbGVtZW50IHRoZSB0aHJlZSBQVVNILi4uIG9wZXJhdGlvbnMuCisrICAgQWxsIGFzc3VtZSB0aGF0IGBmYWlsX3N0YWNrJyBpcyBub25lbXB0eS4gICovCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfUE9JTlRFUigpIGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXS5wb2ludGVyCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfSU5UKCkgZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdLmludGVnZXIKKysjIGRlZmluZSBQT1BfRkFJTFVSRV9FTFQoKSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0KKysKKysvKiBVc2VkIHRvIG9taXQgcHVzaGluZyBmYWlsdXJlIHBvaW50IGlkJ3Mgd2hlbiB3ZSdyZSBub3QgZGVidWdnaW5nLiAgKi8KKysjIGlmZGVmIERFQlVHCisrIyAgZGVmaW5lIERFQlVHX1BVU0ggUFVTSF9GQUlMVVJFX0lOVAorKyMgIGRlZmluZSBERUJVR19QT1AoaXRlbV9hZGRyKSAqKGl0ZW1fYWRkcikgPSBQT1BfRkFJTFVSRV9JTlQgKCkKKysjIGVsc2UKKysjICBkZWZpbmUgREVCVUdfUFVTSChpdGVtKQorKyMgIGRlZmluZSBERUJVR19QT1AoaXRlbV9hZGRyKQorKyMgZW5kaWYKKysKKysKKysvKiBQdXNoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgd2Ugd2lsbCBuZWVkCisrICAgaWYgd2UgZXZlciBmYWlsIGJhY2sgdG8gaXQuCisrCisrICAgUmVxdWlyZXMgdmFyaWFibGVzIGZhaWxfc3RhY2ssIHJlZ3N0YXJ0LCByZWdlbmQsIHJlZ19pbmZvLCBhbmQKKysgICBudW1fcmVnc19wdXNoZWQgYmUgZGVjbGFyZWQuICBET1VCTEVfRkFJTF9TVEFDSyByZXF1aXJlcyBgZGVzdGluYXRpb24nCisrICAgYmUgZGVjbGFyZWQuCisrCisrICAgRG9lcyBgcmV0dXJuIEZBSUxVUkVfQ09ERScgaWYgcnVucyBvdXQgb2YgbWVtb3J5LiAgKi8KKysKKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfUE9JTlQocGF0dGVybl9wbGFjZSwgc3RyaW5nX3BsYWNlLCBmYWlsdXJlX2NvZGUpCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGNoYXIgKmRlc3RpbmF0aW9uOwkJCQkJCQlcCisrICAgIC8qIE11c3QgYmUgaW50LCBzbyB3aGVuIHdlIGRvbid0IHNhdmUgYW55IHJlZ2lzdGVycywgdGhlIGFyaXRobWV0aWMJXAorKyAgICAgICBvZiAwICsgLTEgaXNuJ3QgZG9uZSBhcyB1bnNpZ25lZC4gICovCQkJCVwKKysgICAgLyogQ2FuJ3QgYmUgaW50LCBzaW5jZSB0aGVyZSBpcyBub3QgYSBzaHJlZCBvZiBhIGd1YXJhbnRlZSB0aGF0IGludAlcCisrICAgICAgIGlzIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSB2YWx1ZSBvZiBzb21ldGhpbmcgdG8gd2hpY2ggcG9pbnRlciBjYW4JXAorKyAgICAgICBiZSBhc3NpZ25lZCAqLwkJCQkJCQlcCisrICAgIGFjdGl2ZV9yZWdfdCB0aGlzX3JlZzsJCQkJCQlcCisrICAgIAkJCQkJCQkJCVwKKysgICAgREVCVUdfU1RBVEVNRU5UIChmYWlsdXJlX2lkKyspOwkJCQkJXAorKyAgICBERUJVR19TVEFURU1FTlQgKG5mYWlsdXJlX3BvaW50c19wdXNoZWQrKyk7CQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiXG5QVVNIX0ZBSUxVUkVfUE9JTlQgIyV1OlxuIiwgZmFpbHVyZV9pZCk7CQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgQmVmb3JlIHB1c2gsIG5leHQgYXZhaWw6ICVkXG4iLCAoZmFpbF9zdGFjaykuYXZhaWwpO1wKKysgICAgREVCVUdfUFJJTlQyICgiICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJWRcbiIsIChmYWlsX3N0YWNrKS5zaXplKTtcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIHNsb3RzIG5lZWRlZDogJWxkXG4iLCBOVU1fRkFJTFVSRV9JVEVNUyk7CQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgICAgYXZhaWxhYmxlOiAlZFxuIiwgUkVNQUlOSU5HX0FWQUlMX1NMT1RTKTsJXAorKwkJCQkJCQkJCVwKKysgICAgLyogRW5zdXJlIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGFsbG9jYXRlZCBmb3Igd2hhdCB3ZSB3aWxsIHB1c2guICAqLwlcCisrICAgIHdoaWxlIChSRU1BSU5JTkdfQVZBSUxfU0xPVFMgPCBOVU1fRkFJTFVSRV9JVEVNUykJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysgICAgICAgIGlmICghRE9VQkxFX0ZBSUxfU1RBQ0sgKGZhaWxfc3RhY2spKQkJCQlcCisrICAgICAgICAgIHJldHVybiBmYWlsdXJlX2NvZGU7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICAgIERFQlVHX1BSSU5UMiAoIlxuICBEb3VibGVkIHN0YWNrOyBzaXplIG5vdzogJWRcbiIsCQlcCisrCQkgICAgICAgKGZhaWxfc3RhY2spLnNpemUpOwkJCQlcCisrICAgICAgICBERUJVR19QUklOVDIgKCIgIHNsb3RzIGF2YWlsYWJsZTogJWRcbiIsIFJFTUFJTklOR19BVkFJTF9TTE9UUyk7XAorKyAgICAgIH0JCQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAvKiBQdXNoIHRoZSBpbmZvLCBzdGFydGluZyB3aXRoIHRoZSByZWdpc3RlcnMuICAqLwkJCVwKKysgICAgREVCVUdfUFJJTlQxICgiXG4iKTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBpZiAoMSkJCQkJCQkJCVwKKysgICAgICBmb3IgKHRoaXNfcmVnID0gbG93ZXN0X2FjdGl2ZV9yZWc7IHRoaXNfcmVnIDw9IGhpZ2hlc3RfYWN0aXZlX3JlZzsgXAorKwkgICB0aGlzX3JlZysrKQkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgcmVnOiAlbHVcbiIsIHRoaXNfcmVnKTsJCVwKKysJICBERUJVR19TVEFURU1FTlQgKG51bV9yZWdzX3B1c2hlZCsrKTsJCQkJXAorKwkJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgICAgc3RhcnQ6ICVwXG4iLCByZWdzdGFydFt0aGlzX3JlZ10pOwkJXAorKwkgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChyZWdzdGFydFt0aGlzX3JlZ10pOwkJCVwKKysJCQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICAgIGVuZDogJXBcbiIsIHJlZ2VuZFt0aGlzX3JlZ10pOwkJXAorKwkgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChyZWdlbmRbdGhpc19yZWddKTsJCQlcCisrCQkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgICBpbmZvOiAlcFxuICAgICAgIiwJCQkJXAorKwkJCXJlZ19pbmZvW3RoaXNfcmVnXS53b3JkLnBvaW50ZXIpOwkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBtYXRjaF9udWxsPSVkIiwJCQkJXAorKwkJCVJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBhY3RpdmU9JWQiLCBJU19BQ1RJVkUgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQyICgiIG1hdGNoZWRfc29tZXRoaW5nPSVkIiwJCQlcCisrCQkJTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQyICgiIGV2ZXJfbWF0Y2hlZD0lZCIsCQkJCVwKKysJCQlFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMSAoIlxuIik7CQkJCQkJXAorKwkgIFBVU0hfRkFJTFVSRV9FTFQgKHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkKTsJCQlcCisrCX0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyAgbG93IGFjdGl2ZSByZWc6ICVsZFxuIiwgbG93ZXN0X2FjdGl2ZV9yZWcpO1wKKysgICAgUFVTSF9GQUlMVVJFX0lOVCAobG93ZXN0X2FjdGl2ZV9yZWcpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgaGlnaCBhY3RpdmUgcmVnOiAlbGRcbiIsIGhpZ2hlc3RfYWN0aXZlX3JlZyk7XAorKyAgICBQVVNIX0ZBSUxVUkVfSU5UIChoaWdoZXN0X2FjdGl2ZV9yZWcpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgcGF0dGVybiAlcDpcbiIsIHBhdHRlcm5fcGxhY2UpOwkJXAorKyAgICBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOIChidWZwLCBwYXR0ZXJuX3BsYWNlLCBwZW5kKTsJCVwKKysgICAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHBhdHRlcm5fcGxhY2UpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgc3RyaW5nICVwOiBgIiwgc3RyaW5nX3BsYWNlKTsJCVwKKysgICAgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyAoc3RyaW5nX3BsYWNlLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgICBcCisrCQkJCSBzaXplMik7CQkJCVwKKysgICAgREVCVUdfUFJJTlQxICgiJ1xuIik7CQkJCQkJXAorKyAgICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAoc3RyaW5nX3BsYWNlKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIGZhaWx1cmUgaWQ6ICV1XG4iLCBmYWlsdXJlX2lkKTsJCVwKKysgICAgREVCVUdfUFVTSCAoZmFpbHVyZV9pZCk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysvKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgcHVzaGVkIGFuZCBwb3BwZWQgb24gdGhlIHN0YWNrCisrICAgZm9yIGVhY2ggcmVnaXN0ZXIuICAqLworKyMgIGRlZmluZSBOVU1fUkVHX0lURU1TICAzCisrCisrLyogSW5kaXZpZHVhbCBpdGVtcyBhc2lkZSBmcm9tIHRoZSByZWdpc3RlcnMuICAqLworKyMgIGlmZGVmIERFQlVHCisrIyAgIGRlZmluZSBOVU1fTk9OUkVHX0lURU1TIDUgLyogSW5jbHVkZXMgZmFpbHVyZSBwb2ludCBpZC4gICovCisrIyAgZWxzZQorKyMgICBkZWZpbmUgTlVNX05PTlJFR19JVEVNUyA0CisrIyAgZW5kaWYKKysKKysvKiBXZSBwdXNoIGF0IG1vc3QgdGhpcyBtYW55IGl0ZW1zIG9uIHRoZSBzdGFjay4gICovCisrLyogV2UgdXNlZCB0byB1c2UgKG51bV9yZWdzIC0gMSksIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzCisrICAgdGhpcyByZWdleHAgd2lsbCBzYXZlOyBidXQgdGhhdCB3YXMgY2hhbmdlZCB0byA1CisrICAgdG8gYXZvaWQgc3RhY2sgb3ZlcmZsb3cgZm9yIGEgcmVnZXhwIHdpdGggbG90cyBvZiBwYXJlbnMuICAqLworKyMgIGRlZmluZSBNQVhfRkFJTFVSRV9JVEVNUyAoNSAqIE5VTV9SRUdfSVRFTVMgKyBOVU1fTk9OUkVHX0lURU1TKQorKworKy8qIFdlIGFjdHVhbGx5IHB1c2ggdGhpcyBtYW55IGl0ZW1zLiAgKi8KKysjICBkZWZpbmUgTlVNX0ZBSUxVUkVfSVRFTVMJCQkJXAorKyAgKCgoMAkJCQkJCQlcCisrICAgICA/IDAgOiBoaWdoZXN0X2FjdGl2ZV9yZWcgLSBsb3dlc3RfYWN0aXZlX3JlZyArIDEpCVwKKysgICAgKiBOVU1fUkVHX0lURU1TKQkJCQkJXAorKyAgICsgTlVNX05PTlJFR19JVEVNUykKKysKKysvKiBIb3cgbWFueSBpdGVtcyBjYW4gc3RpbGwgYmUgYWRkZWQgdG8gdGhlIHN0YWNrIHdpdGhvdXQgb3ZlcmZsb3dpbmcgaXQuICAqLworKyMgIGRlZmluZSBSRU1BSU5JTkdfQVZBSUxfU0xPVFMgKChmYWlsX3N0YWNrKS5zaXplIC0gKGZhaWxfc3RhY2spLmF2YWlsKQorKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKworKy8qIFBvcHMgd2hhdCBQVVNIX0ZBSUxfU1RBQ0sgcHVzaGVzLgorKworKyAgIFdlIHJlc3RvcmUgaW50byB0aGUgcGFyYW1ldGVycywgYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsdmFsdWVzOgorKyAgICAgU1RSIC0tIHRoZSBzYXZlZCBkYXRhIHBvc2l0aW9uLgorKyAgICAgUEFUIC0tIHRoZSBzYXZlZCBwYXR0ZXJuIHBvc2l0aW9uLgorKyAgICAgTE9XX1JFRywgSElHSF9SRUcgLS0gdGhlIGhpZ2hlc3QgYW5kIGxvd2VzdCBhY3RpdmUgcmVnaXN0ZXJzLgorKyAgICAgUkVHU1RBUlQsIFJFR0VORCAtLSBhcnJheXMgb2Ygc3RyaW5nIHBvc2l0aW9ucy4KKysgICAgIFJFR19JTkZPIC0tIGFycmF5IG9mIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc3ViZXhwcmVzc2lvbi4KKysKKysgICBBbHNvIGFzc3VtZXMgdGhlIHZhcmlhYmxlcyBgZmFpbF9zdGFjaycgYW5kIChpZiBkZWJ1Z2dpbmcpLCBgYnVmcCcsCisrICAgYHBlbmQnLCBgc3RyaW5nMScsIGBzaXplMScsIGBzdHJpbmcyJywgYW5kIGBzaXplMicuICAqLworKyMgZGVmaW5lIFBPUF9GQUlMVVJFX1BPSU5UKHN0ciwgcGF0LCBsb3dfcmVnLCBoaWdoX3JlZywgcmVnc3RhcnQsIHJlZ2VuZCwgcmVnX2luZm8pXAorK3sJCQkJCQkJCQlcCisrICBERUJVR19TVEFURU1FTlQgKHVuc2lnbmVkIGZhaWx1cmVfaWQ7KQkJCQlcCisrICBhY3RpdmVfcmVnX3QgdGhpc19yZWc7CQkJCQkJXAorKyAgY29uc3QgVUNIQVJfVCAqc3RyaW5nX3RlbXA7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgIGFzc2VydCAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpOwkJCQkJXAorKwkJCQkJCQkJCVwKKysgIC8qIFJlbW92ZSBmYWlsdXJlIHBvaW50cyBhbmQgcG9pbnQgdG8gaG93IG1hbnkgcmVncyBwdXNoZWQuICAqLwlcCisrICBERUJVR19QUklOVDEgKCJQT1BfRkFJTFVSRV9QT0lOVDpcbiIpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIEJlZm9yZSBwb3AsIG5leHQgYXZhaWw6ICVkXG4iLCBmYWlsX3N0YWNrLmF2YWlsKTsJXAorKyAgREVCVUdfUFJJTlQyICgiICAgICAgICAgICAgICAgICAgICBzaXplOiAlZFxuIiwgZmFpbF9zdGFjay5zaXplKTsJXAorKwkJCQkJCQkJCVwKKysgIGFzc2VydCAoZmFpbF9zdGFjay5hdmFpbCA+PSBOVU1fTk9OUkVHX0lURU1TKTsJCQlcCisrCQkJCQkJCQkJXAorKyAgREVCVUdfUE9QICgmZmFpbHVyZV9pZCk7CQkJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIGZhaWx1cmUgaWQ6ICV1XG4iLCBmYWlsdXJlX2lkKTsJCVwKKysJCQkJCQkJCQlcCisrICAvKiBJZiB0aGUgc2F2ZWQgc3RyaW5nIGxvY2F0aW9uIGlzIE5VTEwsIGl0IGNhbWUgZnJvbSBhbgkJXAorKyAgICAgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIG9wY29kZSwgYW5kIHdlIHdhbnQgdG8gdGhyb3cgYXdheSB0aGUJXAorKyAgICAgc2F2ZWQgTlVMTCwgdGh1cyByZXRhaW5pbmcgb3VyIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZy4gICovCVwKKysgIHN0cmluZ190ZW1wID0gUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJCQkJCVwKKysgIGlmIChzdHJpbmdfdGVtcCAhPSBOVUxMKQkJCQkJCVwKKysgICAgc3RyID0gKGNvbnN0IENIQVJfVCAqKSBzdHJpbmdfdGVtcDsJCQkJCVwKKysJCQkJCQkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgc3RyaW5nICVwOiBgIiwgc3RyKTsJCQkJXAorKyAgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyAoc3RyLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIpOwlcCisrICBERUJVR19QUklOVDEgKCInXG4iKTsJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgIHBhdCA9IChVQ0hBUl9UICopIFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBwYXR0ZXJuICVwOlxuIiwgcGF0KTsJCQlcCisrICBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOIChidWZwLCBwYXQsIHBlbmQpOwkJCVwKKysJCQkJCQkJCQlcCisrICAvKiBSZXN0b3JlIHJlZ2lzdGVyIGluZm8uICAqLwkJCQkJCVwKKysgIGhpZ2hfcmVnID0gKGFjdGl2ZV9yZWdfdCkgUE9QX0ZBSUxVUkVfSU5UICgpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgaGlnaCBhY3RpdmUgcmVnOiAlbGRcbiIsIGhpZ2hfcmVnKTsJCVwKKysJCQkJCQkJCQlcCisrICBsb3dfcmVnID0gKGFjdGl2ZV9yZWdfdCkgUE9QX0ZBSUxVUkVfSU5UICgpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgIGxvdyBhY3RpdmUgcmVnOiAlbGRcbiIsIGxvd19yZWcpOwkJXAorKwkJCQkJCQkJCVwKKysgIGlmICgxKQkJCQkJCQkJXAorKyAgICBmb3IgKHRoaXNfcmVnID0gaGlnaF9yZWc7IHRoaXNfcmVnID49IGxvd19yZWc7IHRoaXNfcmVnLS0pCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJREVCVUdfUFJJTlQyICgiICAgIFBvcHBpbmcgcmVnOiAlbGRcbiIsIHRoaXNfcmVnKTsJCVwKKysJCQkJCQkJCQlcCisrCXJlZ19pbmZvW3RoaXNfcmVnXS53b3JkID0gUE9QX0ZBSUxVUkVfRUxUICgpOwkJCVwKKysJREVCVUdfUFJJTlQyICgiICAgICAgaW5mbzogJXBcbiIsCQkJCVwKKysJCSAgICAgIHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkLnBvaW50ZXIpOwkJCVwKKysJCQkJCQkJCQlcCisrCXJlZ2VuZFt0aGlzX3JlZ10gPSAoY29uc3QgQ0hBUl9UICopIFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CVwKKysJREVCVUdfUFJJTlQyICgiICAgICAgZW5kOiAlcFxuIiwgcmVnZW5kW3RoaXNfcmVnXSk7CQlcCisrCQkJCQkJCQkJXAorKwlyZWdzdGFydFt0aGlzX3JlZ10gPSAoY29uc3QgQ0hBUl9UICopIFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CVwKKysJREVCVUdfUFJJTlQyICgiICAgICAgc3RhcnQ6ICVwXG4iLCByZWdzdGFydFt0aGlzX3JlZ10pOwkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICBlbHNlCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIGZvciAodGhpc19yZWcgPSBoaWdoZXN0X2FjdGl2ZV9yZWc7IHRoaXNfcmVnID4gaGlnaF9yZWc7IHRoaXNfcmVnLS0pIFwKKysJewkJCQkJCQkJXAorKwkgIHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkLmludGVnZXIgPSAwOwkJCQlcCisrCSAgcmVnZW5kW3RoaXNfcmVnXSA9IDA7CQkJCQkJXAorKwkgIHJlZ3N0YXJ0W3RoaXNfcmVnXSA9IDA7CQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBoaWdoX3JlZzsJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOwkJCQkJCVwKKysgIERFQlVHX1NUQVRFTUVOVCAobmZhaWx1cmVfcG9pbnRzX3BvcHBlZCsrKTsJCQkJXAorK30gLyogUE9QX0ZBSUxVUkVfUE9JTlQgKi8KKysMCisrLyogU3RydWN0dXJlIGZvciBwZXItcmVnaXN0ZXIgKGEuay5hLiBwZXItZ3JvdXApIGluZm9ybWF0aW9uLgorKyAgIE90aGVyIHJlZ2lzdGVyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZQorKyAgIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcG9zaXRpb25zICh3aGljaCBhcmUgYWRkcmVzc2VzKSwgYW5kIHRoZSBsaXN0IG9mCisrICAgaW5uZXIgZ3JvdXBzICh3aGljaCBpcyBhIGJpdHMgbGlzdCkgYXJlIG1haW50YWluZWQgaW4gc2VwYXJhdGUKKysgICB2YXJpYWJsZXMuCisrCisrICAgV2UgYXJlIG1ha2luZyBhIChzdHJpY3RseSBzcGVha2luZykgbm9ucG9ydGFibGUgYXNzdW1wdGlvbiBoZXJlOiB0aGF0CisrICAgdGhlIGNvbXBpbGVyIHdpbGwgcGFjayBvdXIgYml0IGZpZWxkcyBpbnRvIHNvbWV0aGluZyB0aGF0IGZpdHMgaW50bworKyAgIHRoZSB0eXBlIG9mIGB3b3JkJywgaS5lLiwgaXMgc29tZXRoaW5nIHRoYXQgZml0cyBpbnRvIG9uZSBpdGVtIG9uIHRoZQorKyAgIGZhaWx1cmUgc3RhY2suICAqLworKworKworKy8qIERlY2xhcmF0aW9ucyBhbmQgbWFjcm9zIGZvciByZV9tYXRjaF8yLiAgKi8KKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpIHdvcmQ7CisrICBzdHJ1Y3QKKysgIHsKKysgICAgICAvKiBUaGlzIGZpZWxkIGlzIG9uZSBpZiB0aGlzIGdyb3VwIGNhbiBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLAorKyAgICAgICAgIHplcm8gaWYgbm90LiAgSWYgbm90IHlldCBkZXRlcm1pbmVkLCAgYE1BVENIX05VTExfVU5TRVRfVkFMVUUnLiAgKi8KKysjIGRlZmluZSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFIDMKKysgICAgdW5zaWduZWQgbWF0Y2hfbnVsbF9zdHJpbmdfcCA6IDI7CisrICAgIHVuc2lnbmVkIGlzX2FjdGl2ZSA6IDE7CisrICAgIHVuc2lnbmVkIG1hdGNoZWRfc29tZXRoaW5nIDogMTsKKysgICAgdW5zaWduZWQgZXZlcl9tYXRjaGVkX3NvbWV0aGluZyA6IDE7CisrICB9IGJpdHM7CisrfSBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKTsKKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBkZWZpbmUgUkVHX01BVENIX05VTExfU1RSSU5HX1AoUikgICgoUikuYml0cy5tYXRjaF9udWxsX3N0cmluZ19wKQorKyMgIGRlZmluZSBJU19BQ1RJVkUoUikgICgoUikuYml0cy5pc19hY3RpdmUpCisrIyAgZGVmaW5lIE1BVENIRURfU09NRVRISU5HKFIpICAoKFIpLmJpdHMubWF0Y2hlZF9zb21ldGhpbmcpCisrIyAgZGVmaW5lIEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcoUikgICgoUikuYml0cy5ldmVyX21hdGNoZWRfc29tZXRoaW5nKQorKworKworKy8qIENhbGwgdGhpcyB3aGVuIGhhdmUgbWF0Y2hlZCBhIHJlYWwgY2hhcmFjdGVyOyBpdCBzZXRzIGBtYXRjaGVkJyBmbGFncworKyAgIGZvciB0aGUgc3ViZXhwcmVzc2lvbnMgd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUuICBBbHNvIHJlY29yZHMKKysgICB0aGF0IHRob3NlIHN1YmV4cHJzIGhhdmUgbWF0Y2hlZC4gICovCisrIyAgZGVmaW5lIFNFVF9SRUdTX01BVENIRUQoKQkJCQkJCVwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIGlmICghc2V0X3JlZ3NfbWF0Y2hlZF9kb25lKQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgYWN0aXZlX3JlZ190IHI7CQkJCQkJXAorKwkgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDE7CQkJCQlcCisrCSAgZm9yIChyID0gbG93ZXN0X2FjdGl2ZV9yZWc7IHIgPD0gaGlnaGVzdF9hY3RpdmVfcmVnOyByKyspCVwKKysJICAgIHsJCQkJCQkJCVwKKysJICAgICAgTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3JdKQkJCQlcCisrCQk9IEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3JdKQkJCVwKKysJCT0gMTsJCQkJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBSZWdpc3RlcnMgYXJlIHNldCB0byBhIHNlbnRpbmVsIHdoZW4gdGhleSBoYXZlbid0IHlldCBtYXRjaGVkLiAgKi8KKytzdGF0aWMgQ0hBUl9UIFBSRUZJWChyZWdfdW5zZXRfZHVtbXkpOworKyMgZGVmaW5lIFJFR19VTlNFVF9WQUxVRSAoJlBSRUZJWChyZWdfdW5zZXRfZHVtbXkpKQorKyMgZGVmaW5lIFJFR19VTlNFVChlKSAoKGUpID09IFJFR19VTlNFVF9WQUxVRSkKKysKKysvKiBTdWJyb3V0aW5lIGRlY2xhcmF0aW9ucyBhbmQgbWFjcm9zIGZvciByZWdleF9jb21waWxlLiAgKi8KKytzdGF0aWMgdm9pZCBQUkVGSVgoc3RvcmVfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZyk7Cisrc3RhdGljIHZvaWQgUFJFRklYKHN0b3JlX29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcxLCBpbnQgYXJnMik7Cisrc3RhdGljIHZvaWQgUFJFRklYKGluc2VydF9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZywgVUNIQVJfVCAqZW5kKTsKKytzdGF0aWMgdm9pZCBQUkVGSVgoaW5zZXJ0X29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMSwgaW50IGFyZzIsIFVDSEFSX1QgKmVuZCk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGF0X2JlZ2xpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnBhdHRlcm4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoYXRfZW5kbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOworKyMgaWZkZWYgV0NIQVIKKytzdGF0aWMgcmVnX2VycmNvZGVfdCB3Y3NfY29tcGlsZV9yYW5nZSAoQ0hBUl9UIHJhbmdlX3N0YXJ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQVJfVCAqY2hhcl9zZXQpOworK3N0YXRpYyB2b2lkIGluc2VydF9zcGFjZSAoaW50IG51bSwgQ0hBUl9UICpsb2MsIENIQVJfVCAqZW5kKTsKKysjIGVsc2UgLyogQllURSAqLworK3N0YXRpYyByZWdfZXJyY29kZV90IGJ5dGVfY29tcGlsZV9yYW5nZSAodW5zaWduZWQgaW50IHJhbmdlX3N0YXJ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpiKTsKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrLyogRmV0Y2ggdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4tLS10cmFuc2xhdGluZyBpdAorKyAgIGlmIG5lY2Vzc2FyeS4gIEFsc28gY2FzdCBmcm9tIGEgc2lnbmVkIGNoYXJhY3RlciBpbiB0aGUgY29uc3RhbnQKKysgICBzdHJpbmcgcGFzc2VkIHRvIHVzIGJ5IHRoZSB1c2VyIHRvIGFuIHVuc2lnbmVkIGNoYXIgdGhhdCB3ZSBjYW4gdXNlCisrICAgYXMgYW4gYXJyYXkgaW5kZXggKGluLCBlLmcuLCBgdHJhbnNsYXRlJykuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSB0cmFuc2xhdGUgb25seSBpZiBjaGFyYWN0ZXIgPD0gMHhmZiwKKysgICBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgdG8gYWxsb2NhdGUgNEdCIGFycmF5IGZvciBzb21lIGVuY29kaW5ncworKyAgIHdoaWNoIGhhdmUgNCBieXRlIGNoYXJhY3Rlcl9zZXQgbGlrZSBVQ1M0LiAgKi8KKysjIGlmbmRlZiBQQVRGRVRDSAorKyMgIGlmZGVmIFdDSEFSCisrIyAgIGRlZmluZSBQQVRGRVRDSChjKQkJCQkJCQlcCisrICBkbyB7aWYgKHAgPT0gcGVuZCkgcmV0dXJuIFJFR19FRU5EOwkJCQkJXAorKyAgICBjID0gKFVDSEFSX1QpICpwKys7CQkJCQkJCVwKKysgICAgaWYgKHRyYW5zbGF0ZSAmJiAoYyA8PSAweGZmKSkgYyA9IChVQ0hBUl9UKSB0cmFuc2xhdGVbY107CQlcCisrICB9IHdoaWxlICgwKQorKyMgIGVsc2UgLyogQllURSAqLworKyMgICBkZWZpbmUgUEFURkVUQ0goYykJCQkJCQkJXAorKyAgZG8ge2lmIChwID09IHBlbmQpIHJldHVybiBSRUdfRUVORDsJCQkJCVwKKysgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcCsrOwkJCQkJCVwKKysgICAgaWYgKHRyYW5zbGF0ZSkgYyA9ICh1bnNpZ25lZCBjaGFyKSB0cmFuc2xhdGVbY107CQkJXAorKyAgfSB3aGlsZSAoMCkKKysjICBlbmRpZiAvKiBXQ0hBUiAqLworKyMgZW5kaWYKKysKKysvKiBGZXRjaCB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybiwgd2l0aCBubworKyAgIHRyYW5zbGF0aW9uLiAgKi8KKysjIGRlZmluZSBQQVRGRVRDSF9SQVcoYykJCQkJCQlcCisrICBkbyB7aWYgKHAgPT0gcGVuZCkgcmV0dXJuIFJFR19FRU5EOwkJCQkJXAorKyAgICBjID0gKFVDSEFSX1QpICpwKys7IAkgICAgICAgCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKy8qIEdvIGJhY2t3YXJkcyBvbmUgY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuLiAgKi8KKysjIGRlZmluZSBQQVRVTkZFVENIIHAtLQorKworKworKy8qIElmIGB0cmFuc2xhdGUnIGlzIG5vbi1udWxsLCByZXR1cm4gdHJhbnNsYXRlW0RdLCBlbHNlIGp1c3QgRC4gIFdlCisrICAgY2FzdCB0aGUgc3Vic2NyaXB0IHRvIHRyYW5zbGF0ZSBiZWNhdXNlIHNvbWUgZGF0YSBpcyBkZWNsYXJlZCBhcworKyAgIGBjaGFyIConLCB0byBhdm9pZCB3YXJuaW5ncyB3aGVuIGEgc3RyaW5nIGNvbnN0YW50IGlzIHBhc3NlZC4gIEJ1dAorKyAgIHdoZW4gd2UgdXNlIGEgY2hhcmFjdGVyIGFzIGEgc3Vic2NyaXB0IHdlIG11c3QgbWFrZSBpdCB1bnNpZ25lZC4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHRyYW5zbGF0ZSBvbmx5IGlmIGNoYXJhY3RlciA8PSAweGZmLAorKyAgIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byBhbGxvY2F0ZSA0R0IgYXJyYXkgZm9yIHNvbWUgZW5jb2RpbmdzCisrICAgd2hpY2ggaGF2ZSA0IGJ5dGUgY2hhcmFjdGVyX3NldCBsaWtlIFVDUzQuICAqLworKworKyMgaWZuZGVmIFRSQU5TTEFURQorKyMgIGlmZGVmIFdDSEFSCisrIyAgIGRlZmluZSBUUkFOU0xBVEUoZCkgXAorKyAgKCh0cmFuc2xhdGUgJiYgKChVQ0hBUl9UKSAoZCkpIDw9IDB4ZmYpIFwKKysgICA/IChjaGFyKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpIChkKV0gOiAoZCkpCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICAgZGVmaW5lIFRSQU5TTEFURShkKSBcCisrICAodHJhbnNsYXRlID8gKGNoYXIpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKGQpXSA6IChjaGFyKSAoZCkpCisrIyAgZW5kaWYgLyogV0NIQVIgKi8KKysjIGVuZGlmCisrCisrCisrLyogTWFjcm9zIGZvciBvdXRwdXR0aW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuIGludG8gYGJ1ZmZlcicuICAqLworKworKy8qIElmIHRoZSBidWZmZXIgaXNuJ3QgYWxsb2NhdGVkIHdoZW4gaXQgY29tZXMgaW4sIHVzZSB0aGlzLiAgKi8KKysjIGRlZmluZSBJTklUX0JVRl9TSVpFICAoMzIgKiBzaXplb2YoVUNIQVJfVCkpCisrCisrLyogTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgTiBtb3JlIGJ5dGVzIG9mIHNwYWNlIGluIGJ1ZmZlci4gICovCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBHRVRfQlVGRkVSX1NQQUNFKG4pCQkJCQkJXAorKyAgICB3aGlsZSAoKCh1bnNpZ25lZCBsb25nKWIgLSAodW5zaWduZWQgbG9uZylDT01QSUxFRF9CVUZGRVJfVkFSCVwKKysgICAgICAgICAgICArIChuKSpzaXplb2YoQ0hBUl9UKSkgPiBidWZwLT5hbGxvY2F0ZWQpCQkJXAorKyAgICAgIEVYVEVORF9CVUZGRVIgKCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBHRVRfQlVGRkVSX1NQQUNFKG4pCQkJCQkJXAorKyAgICB3aGlsZSAoKHVuc2lnbmVkIGxvbmcpIChiIC0gYnVmcC0+YnVmZmVyICsgKG4pKSA+IGJ1ZnAtPmFsbG9jYXRlZCkJXAorKyAgICAgIEVYVEVORF9CVUZGRVIgKCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrLyogTWFrZSBzdXJlIHdlIGhhdmUgb25lIG1vcmUgYnl0ZSBvZiBidWZmZXIgc3BhY2UgYW5kIHRoZW4gYWRkIEMgdG8gaXQuICAqLworKyMgZGVmaW5lIEJVRl9QVVNIKGMpCQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYyk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysKKysvKiBFbnN1cmUgd2UgaGF2ZSB0d28gbW9yZSBieXRlcyBvZiBidWZmZXIgc3BhY2UgYW5kIHRoZW4gYXBwZW5kIEMxIGFuZCBDMi4gICovCisrIyBkZWZpbmUgQlVGX1BVU0hfMihjMSwgYzIpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgR0VUX0JVRkZFUl9TUEFDRSAoMik7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMSk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMik7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysKKysvKiBBcyB3aXRoIEJVRl9QVVNIXzIsIGV4Y2VwdCBmb3IgdGhyZWUgYnl0ZXMuICAqLworKyMgZGVmaW5lIEJVRl9QVVNIXzMoYzEsIGMyLCBjMykJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBHRVRfQlVGRkVSX1NQQUNFICgzKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMxKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMyKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMzKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKy8qIFN0b3JlIGEganVtcCB3aXRoIG9wY29kZSBPUCBhdCBMT0MgdG8gbG9jYXRpb24gVE8uICBXZSBzdG9yZSBhCisrICAgcmVsYXRpdmUgYWRkcmVzcyBvZmZzZXQgYnkgdGhlIHRocmVlIGJ5dGVzIHRoZSBqdW1wIGl0c2VsZiBvY2N1cGllcy4gICovCisrIyBkZWZpbmUgU1RPUkVfSlVNUChvcCwgbG9jLCB0bykgXAorKyBQUkVGSVgoc3RvcmVfb3AxKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpKQorKworKy8qIExpa2V3aXNlLCBmb3IgYSB0d28tYXJndW1lbnQganVtcC4gICovCisrIyBkZWZpbmUgU1RPUkVfSlVNUDIob3AsIGxvYywgdG8sIGFyZykgXAorKyAgUFJFRklYKHN0b3JlX29wMikgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSwgYXJnKQorKworKy8qIExpa2UgYFNUT1JFX0pVTVAnLCBidXQgZm9yIGluc2VydGluZy4gIEFzc3VtZSBgYicgaXMgdGhlIGJ1ZmZlciBlbmQuICAqLworKyMgZGVmaW5lIElOU0VSVF9KVU1QKG9wLCBsb2MsIHRvKSBcCisrICBQUkVGSVgoaW5zZXJ0X29wMSkgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSwgYikKKysKKysvKiBMaWtlIGBTVE9SRV9KVU1QMicsIGJ1dCBmb3IgaW5zZXJ0aW5nLiAgQXNzdW1lIGBiJyBpcyB0aGUgYnVmZmVyIGVuZC4gICovCisrIyBkZWZpbmUgSU5TRVJUX0pVTVAyKG9wLCBsb2MsIHRvLCBhcmcpIFwKKysgIFBSRUZJWChpbnNlcnRfb3AyKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpLFwKKysJICAgICAgYXJnLCBiKQorKworKy8qIFRoaXMgaXMgbm90IGFuIGFyYml0cmFyeSBsaW1pdDogdGhlIGFyZ3VtZW50cyB3aGljaCByZXByZXNlbnQgb2Zmc2V0cworKyAgIGludG8gdGhlIHBhdHRlcm4gYXJlIHR3byBieXRlcyBsb25nLiAgU28gaWYgMl4xNiBieXRlcyB0dXJucyBvdXQgdG8KKysgICBiZSB0b28gc21hbGwsIG1hbnkgdGhpbmdzIHdvdWxkIGhhdmUgdG8gY2hhbmdlLiAgKi8KKysvKiBBbnkgb3RoZXIgY29tcGlsZXIgd2hpY2gsIGxpa2UgTVNDLCBoYXMgYWxsb2NhdGlvbiBsaW1pdCBiZWxvdyAyXjE2CisrICAgYnl0ZXMgd2lsbCBoYXZlIHRvIHVzZSBhcHByb2FjaCBzaW1pbGFyIHRvIHdoYXQgd2FzIGRvbmUgYmVsb3cgZm9yCisrICAgTVNDIGFuZCBkcm9wIE1BWF9CVUZfU0laRSBhIGJpdC4gIE90aGVyd2lzZSB5b3UgbWF5IGVuZCB1cAorKyAgIHJlYWxsb2NhdGluZyB0byAwIGJ5dGVzLiAgU3VjaCB0aGluZyBpcyBub3QgZ29pbmcgdG8gd29yayB0b28gd2VsbC4KKysgICBZb3UgaGF2ZSBiZWVuIHdhcm5lZCEhICAqLworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGlmIGRlZmluZWQgX01TQ19WRVIgICYmICFkZWZpbmVkIFdJTjMyCisrLyogTWljcm9zb2Z0IEMgMTYtYml0IHZlcnNpb25zIGxpbWl0IG1hbGxvYyB0byBhcHByb3ggNjU1MTIgYnl0ZXMuCisrICAgVGhlIFJFQUxMT0MgZGVmaW5lIGVsaW1pbmF0ZXMgYSBmbHVycnkgb2YgY29udmVyc2lvbiB3YXJuaW5ncywKKysgICBidXQgaXMgbm90IHJlcXVpcmVkLiAqLworKyMgICBkZWZpbmUgTUFYX0JVRl9TSVpFICA2NTUwMEwKKysjICAgZGVmaW5lIFJFQUxMT0MocCxzKSByZWFsbG9jICgocCksIChzaXplX3QpIChzKSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBNQVhfQlVGX1NJWkUgKDFMIDw8IDE2KQorKyMgICBkZWZpbmUgUkVBTExPQyhwLHMpIHJlYWxsb2MgKChwKSwgKHMpKQorKyMgIGVuZGlmCisrCisrLyogRXh0ZW5kIHRoZSBidWZmZXIgYnkgdHdpY2UgaXRzIGN1cnJlbnQgc2l6ZSB2aWEgcmVhbGxvYyBhbmQKKysgICByZXNldCB0aGUgcG9pbnRlcnMgdGhhdCBwb2ludGVkIGludG8gdGhlIG9sZCBibG9jayB0byBwb2ludCB0byB0aGUKKysgICBjb3JyZWN0IHBsYWNlcyBpbiB0aGUgbmV3IG9uZS4gIElmIGV4dGVuZGluZyB0aGUgYnVmZmVyIHJlc3VsdHMgaW4gaXQKKysgICBiZWluZyBsYXJnZXIgdGhhbiBNQVhfQlVGX1NJWkUsIHRoZW4gZmxhZyBtZW1vcnkgZXhoYXVzdGVkLiAgKi8KKysjICBpZm5kZWYgX19CT1VOREVEX1BPSU5URVJTX18KKysjICAgIGRlZmluZSBfX0JPVU5ERURfUE9JTlRFUlNfXyAwCisrIyAgZW5kaWYKKysjICBpZiBfX0JPVU5ERURfUE9JTlRFUlNfXworKyMgICBkZWZpbmUgU0VUX0hJR0hfQk9VTkQoUCkgKF9fcHRyaGlnaCAoUCkgPSBfX3B0cmxvdyAoUCkgKyBidWZwLT5hbGxvY2F0ZWQpCisrIyAgIGRlZmluZSBNT1ZFX0JVRkZFUl9QT0lOVEVSKFApIFwKKysgIChfX3B0cmxvdyAoUCkgKz0gaW5jciwgU0VUX0hJR0hfQk9VTkQgKFApLCBfX3B0cnZhbHVlIChQKSArPSBpbmNyKQorKyMgICBkZWZpbmUgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQJXAorKyAgZWxzZQkJCQkJCVwKKysgICAgewkJCQkJCVwKKysgICAgICBTRVRfSElHSF9CT1VORCAoYik7CQkJXAorKyAgICAgIFNFVF9ISUdIX0JPVU5EIChiZWdhbHQpOwkJCVwKKysgICAgICBpZiAoZml4dXBfYWx0X2p1bXApCQkJXAorKwlTRVRfSElHSF9CT1VORCAoZml4dXBfYWx0X2p1bXApOwlcCisrICAgICAgaWYgKGxhc3RzdGFydCkJCQkJXAorKwlTRVRfSElHSF9CT1VORCAobGFzdHN0YXJ0KTsJCVwKKysgICAgICBpZiAocGVuZGluZ19leGFjdCkJCQlcCisrCVNFVF9ISUdIX0JPVU5EIChwZW5kaW5nX2V4YWN0KTsJCVwKKysgICAgfQorKyMgIGVsc2UKKysjICAgZGVmaW5lIE1PVkVfQlVGRkVSX1BPSU5URVIoUCkgKFApICs9IGluY3IKKysjICAgZGVmaW5lIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECisrIyAgZW5kaWYKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEVYVEVORF9CVUZGRVIoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFVDSEFSX1QgKm9sZF9idWZmZXIgPSBDT01QSUxFRF9CVUZGRVJfVkFSOwkJCQlcCisrICAgIGludCB3Y2hhcl9jb3VudDsJCQkJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkICsgc2l6ZW9mKFVDSEFSX1QpID4gTUFYX0JVRl9TSVpFKQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNJWkU7CQkJCQkJCVwKKysgICAgYnVmcC0+YWxsb2NhdGVkIDw8PSAxOwkJCQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA+IE1BWF9CVUZfU0laRSkJCQkJCVwKKysgICAgICBidWZwLT5hbGxvY2F0ZWQgPSBNQVhfQlVGX1NJWkU7CQkJCQlcCisrICAgIC8qIEhvdyBtYW55IGNoYXJhY3RlcnMgdGhlIG5ldyBidWZmZXIgY2FuIGhhdmU/ICAqLwkJCVwKKysgICAgd2NoYXJfY291bnQgPSBidWZwLT5hbGxvY2F0ZWQgLyBzaXplb2YoVUNIQVJfVCk7CQkJXAorKyAgICBpZiAod2NoYXJfY291bnQgPT0gMCkgd2NoYXJfY291bnQgPSAxOwkJCQlcCisrICAgIC8qIFRydW5jYXRlIHRoZSBidWZmZXIgdG8gQ0hBUl9UIGFsaWduLiAgKi8JCQlcCisrICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IHdjaGFyX2NvdW50ICogc2l6ZW9mKFVDSEFSX1QpOwkJCVwKKysgICAgUkVUQUxMT0MgKENPTVBJTEVEX0JVRkZFUl9WQVIsIHdjaGFyX2NvdW50LCBVQ0hBUl9UKTsJCVwKKysgICAgYnVmcC0+YnVmZmVyID0gKGNoYXIqKUNPTVBJTEVEX0JVRkZFUl9WQVI7CQkJCVwKKysgICAgaWYgKENPTVBJTEVEX0JVRkZFUl9WQVIgPT0gTlVMTCkJCQkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsJCQkJCQlcCisrICAgIC8qIElmIHRoZSBidWZmZXIgbW92ZWQsIG1vdmUgYWxsIHRoZSBwb2ludGVycyBpbnRvIGl0LiAgKi8JCVwKKysgICAgaWYgKG9sZF9idWZmZXIgIT0gQ09NUElMRURfQlVGRkVSX1ZBUikJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCWludCBpbmNyID0gQ09NUElMRURfQlVGRkVSX1ZBUiAtIG9sZF9idWZmZXI7CQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiKTsJCQkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYmVnYWx0KTsJCQkJCVwKKysJaWYgKGZpeHVwX2FsdF9qdW1wKQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChmaXh1cF9hbHRfanVtcCk7CQkJCVwKKysJaWYgKGxhc3RzdGFydCkJCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGxhc3RzdGFydCk7CQkJCVwKKysJaWYgKHBlbmRpbmdfZXhhY3QpCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKHBlbmRpbmdfZXhhY3QpOwkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRVhURU5EX0JVRkZFUigpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgVUNIQVJfVCAqb2xkX2J1ZmZlciA9IENPTVBJTEVEX0JVRkZFUl9WQVI7CQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA9PSBNQVhfQlVGX1NJWkUpCQkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTSVpFOwkJCQkJCQlcCisrICAgIGJ1ZnAtPmFsbG9jYXRlZCA8PD0gMTsJCQkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgPiBNQVhfQlVGX1NJWkUpCQkJCQlcCisrICAgICAgYnVmcC0+YWxsb2NhdGVkID0gTUFYX0JVRl9TSVpFOwkJCQkJXAorKyAgICBidWZwLT5idWZmZXIgPSAoVUNIQVJfVCAqKSBSRUFMTE9DIChDT01QSUxFRF9CVUZGRVJfVkFSLAkJXAorKwkJCQkJCWJ1ZnAtPmFsbG9jYXRlZCk7CVwKKysgICAgaWYgKENPTVBJTEVEX0JVRkZFUl9WQVIgPT0gTlVMTCkJCQkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsJCQkJCQlcCisrICAgIC8qIElmIHRoZSBidWZmZXIgbW92ZWQsIG1vdmUgYWxsIHRoZSBwb2ludGVycyBpbnRvIGl0LiAgKi8JCVwKKysgICAgaWYgKG9sZF9idWZmZXIgIT0gQ09NUElMRURfQlVGRkVSX1ZBUikJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCWludCBpbmNyID0gQ09NUElMRURfQlVGRkVSX1ZBUiAtIG9sZF9idWZmZXI7CQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiKTsJCQkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYmVnYWx0KTsJCQkJCVwKKysJaWYgKGZpeHVwX2FsdF9qdW1wKQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChmaXh1cF9hbHRfanVtcCk7CQkJCVwKKysJaWYgKGxhc3RzdGFydCkJCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGxhc3RzdGFydCk7CQkJCVwKKysJaWYgKHBlbmRpbmdfZXhhY3QpCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKHBlbmRpbmdfZXhhY3QpOwkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKy8qIFNpbmNlIHdlIGhhdmUgb25lIGJ5dGUgcmVzZXJ2ZWQgZm9yIHRoZSByZWdpc3RlciBudW1iZXIgYXJndW1lbnQgdG8KKysgICB7c3RhcnQsc3RvcH1fbWVtb3J5LCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZ3JvdXBzIHdlIGNhbiByZXBvcnQKKysgICB0aGluZ3MgYWJvdXQgaXMgd2hhdCBmaXRzIGluIHRoYXQgYnl0ZS4gICovCisrIyAgZGVmaW5lIE1BWF9SRUdOVU0gMjU1CisrCisrLyogQnV0IHBhdHRlcm5zIGNhbiBoYXZlIG1vcmUgdGhhbiBgTUFYX1JFR05VTScgcmVnaXN0ZXJzLiAgV2UganVzdAorKyAgIGlnbm9yZSB0aGUgZXhjZXNzLiAgKi8KKyt0eXBlZGVmIHVuc2lnbmVkIHJlZ251bV90OworKworKworKy8qIE1hY3JvcyBmb3IgdGhlIGNvbXBpbGUgc3RhY2suICAqLworKworKy8qIFNpbmNlIG9mZnNldHMgY2FuIGdvIGVpdGhlciBmb3J3YXJkcyBvciBiYWNrd2FyZHMsIHRoaXMgdHlwZSBuZWVkcyB0bworKyAgIGJlIGFibGUgdG8gaG9sZCB2YWx1ZXMgZnJvbSAtKE1BWF9CVUZfU0laRSAtIDEpIHRvIE1BWF9CVUZfU0laRSAtIDEuICAqLworKy8qIGludCBtYXkgYmUgbm90IGVub3VnaCB3aGVuIHNpemVvZihpbnQpID09IDIuICAqLworK3R5cGVkZWYgbG9uZyBwYXR0ZXJuX29mZnNldF90OworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgcGF0dGVybl9vZmZzZXRfdCBiZWdhbHRfb2Zmc2V0OworKyAgcGF0dGVybl9vZmZzZXRfdCBmaXh1cF9hbHRfanVtcDsKKysgIHBhdHRlcm5fb2Zmc2V0X3QgaW5uZXJfZ3JvdXBfb2Zmc2V0OworKyAgcGF0dGVybl9vZmZzZXRfdCBsYXN0c3RhcnRfb2Zmc2V0OworKyAgcmVnbnVtX3QgcmVnbnVtOworK30gY29tcGlsZV9zdGFja19lbHRfdDsKKysKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGNvbXBpbGVfc3RhY2tfZWx0X3QgKnN0YWNrOworKyAgdW5zaWduZWQgc2l6ZTsKKysgIHVuc2lnbmVkIGF2YWlsOwkJCS8qIE9mZnNldCBvZiBuZXh0IG9wZW4gcG9zaXRpb24uICAqLworK30gY29tcGlsZV9zdGFja190eXBlOworKworKworKyMgIGRlZmluZSBJTklUX0NPTVBJTEVfU1RBQ0tfU0laRSAzMgorKworKyMgIGRlZmluZSBDT01QSUxFX1NUQUNLX0VNUFRZICAoY29tcGlsZV9zdGFjay5hdmFpbCA9PSAwKQorKyMgIGRlZmluZSBDT01QSUxFX1NUQUNLX0ZVTEwgIChjb21waWxlX3N0YWNrLmF2YWlsID09IGNvbXBpbGVfc3RhY2suc2l6ZSkKKysKKysvKiBUaGUgbmV4dCBhdmFpbGFibGUgZWxlbWVudC4gICovCisrIyAgZGVmaW5lIENPTVBJTEVfU1RBQ0tfVE9QIChjb21waWxlX3N0YWNrLnN0YWNrW2NvbXBpbGVfc3RhY2suYXZhaWxdKQorKworKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKy8qIFNldCB0aGUgYml0IGZvciBjaGFyYWN0ZXIgQyBpbiBhIGxpc3QuICAqLworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGRlZmluZSBTRVRfTElTVF9CSVQoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGJbKCh1bnNpZ25lZCBjaGFyKSAoYykpIC8gQllURVdJRFRIXSAgICAgICAgICAgICAgIFwKKysgICB8PSAxIDw8ICgoKHVuc2lnbmVkIGNoYXIpIGMpICUgQllURVdJRFRIKSkKKysjIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKworKy8qIEdldCB0aGUgbmV4dCB1bnNpZ25lZCBudW1iZXIgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybi4gICovCisrIyBkZWZpbmUgR0VUX1VOU0lHTkVEX05VTUJFUihudW0pIFwKKysgIHsJCQkJCQkJCQlcCisrICAgIHdoaWxlIChwICE9IHBlbmQpCQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlQQVRGRVRDSCAoYyk7CQkJCQkJCVwKKysJaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykJCQkJCQlcCisrCSAgYnJlYWs7CQkJCQkJCVwKKysJaWYgKG51bSA8PSBSRV9EVVBfTUFYKQkJCQkJCVwKKysJICB7CQkJCQkJCQlcCisrCSAgICBpZiAobnVtIDwgMCkJCQkJCQlcCisrCSAgICAgIG51bSA9IDA7CQkJCQkJCVwKKysJICAgIG51bSA9IG51bSAqIDEwICsgYyAtICcwJzsJCQkJCVwKKysJICB9CQkJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIH0KKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBpZiBXSURFX0NIQVJfU1VQUE9SVAorKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHVzZXItZGVmaW5lZCBjaGFyYWN0ZXIgY2xhc3NlcworKyAgIGFuZCB0aGUgZnVuY3Rpb25zIGZyb20gSVNPIEMgYW1lbmRlbWVudCAxLiAgKi8KKysjICAgaWZkZWYgQ0hBUkNMQVNTX05BTUVfTUFYCisrIyAgICBkZWZpbmUgQ0hBUl9DTEFTU19NQVhfTEVOR1RIIENIQVJDTEFTU19OQU1FX01BWAorKyMgICBlbHNlCisrLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBzb21lIGltcGxlbWVudGF0aW9uIG1pZ2h0IHN0aWxsIGhhdmUgdGhpcworKyAgIHByb2JsZW0uICBVc2UgYSByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWUuICAqLworKyMgICAgZGVmaW5lIENIQVJfQ0xBU1NfTUFYX0xFTkdUSCAyNTYKKysjICAgZW5kaWYKKysKKysjICAgaWZkZWYgX0xJQkMKKysjICAgIGRlZmluZSBJU19DSEFSX0NMQVNTKHN0cmluZykgX193Y3R5cGUgKHN0cmluZykKKysjICAgZWxzZQorKyMgICAgZGVmaW5lIElTX0NIQVJfQ0xBU1Moc3RyaW5nKSB3Y3R5cGUgKHN0cmluZykKKysjICAgZW5kaWYKKysjICBlbHNlCisrIyAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggIDYgLyogTmFtZWx5LCBgeGRpZ2l0Jy4gICovCisrCisrIyAgIGRlZmluZSBJU19DSEFSX0NMQVNTKHN0cmluZykJCQkJCVwKKysgICAoU1RSRVEgKHN0cmluZywgImFscGhhIikgfHwgU1RSRVEgKHN0cmluZywgInVwcGVyIikJCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJsb3dlciIpIHx8IFNUUkVRIChzdHJpbmcsICJkaWdpdCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJhbG51bSIpIHx8IFNUUkVRIChzdHJpbmcsICJ4ZGlnaXQiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAic3BhY2UiKSB8fCBTVFJFUSAoc3RyaW5nLCAicHJpbnQiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAicHVuY3QiKSB8fCBTVFJFUSAoc3RyaW5nLCAiZ3JhcGgiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAiY250cmwiKSB8fCBTVFJFUSAoc3RyaW5nLCAiYmxhbmsiKSkKKysjICBlbmRpZgorKyMgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrDAorKyMgaWZuZGVmIE1BVENIX01BWV9BTExPQ0FURQorKworKy8qIElmIHdlIGNhbm5vdCBhbGxvY2F0ZSBsYXJnZSBvYmplY3RzIHdpdGhpbiByZV9tYXRjaF8yX2ludGVybmFsLAorKyAgIHdlIG1ha2UgdGhlIGZhaWwgc3RhY2sgYW5kIHJlZ2lzdGVyIHZlY3RvcnMgZ2xvYmFsLgorKyAgIFRoZSBmYWlsIHN0YWNrLCB3ZSBncm93IHRvIHRoZSBtYXhpbXVtIHNpemUgd2hlbiBhIHJlZ2V4cAorKyAgIGlzIGNvbXBpbGVkLgorKyAgIFRoZSByZWdpc3RlciB2ZWN0b3JzLCB3ZSBhZGp1c3QgaW4gc2l6ZSBlYWNoIHRpbWUgd2UKKysgICBjb21waWxlIGEgcmVnZXhwLCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiByZWdpc3RlcnMgaXQgbmVlZHMuICAqLworKworK3N0YXRpYyBQUkVGSVgoZmFpbF9zdGFja190eXBlKSBmYWlsX3N0YWNrOworKworKy8qIFNpemUgd2l0aCB3aGljaCB0aGUgZm9sbG93aW5nIHZlY3RvcnMgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuCisrICAgVGhhdCBpcyBzbyB3ZSBjYW4gbWFrZSB0aGVtIGJpZ2dlciBhcyBuZWVkZWQsCisrICAgYnV0IG5ldmVyIG1ha2UgdGhlbSBzbWFsbGVyLiAgKi8KKysjICBpZmRlZiBERUZJTkVEX09OQ0UKKytzdGF0aWMgaW50IHJlZ3NfYWxsb2NhdGVkX3NpemU7CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKiogICAgIHJlZ3N0YXJ0LCAqKiAgICAgcmVnZW5kOworK3N0YXRpYyBjb25zdCBjaGFyICoqIG9sZF9yZWdzdGFydCwgKiogb2xkX3JlZ2VuZDsKKytzdGF0aWMgY29uc3QgY2hhciAqKmJlc3RfcmVnc3RhcnQsICoqYmVzdF9yZWdlbmQ7Cisrc3RhdGljIGNvbnN0IGNoYXIgKipyZWdfZHVtbXk7CisrIyAgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrCisrc3RhdGljIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpQUkVGSVgocmVnX2luZm8pOworK3N0YXRpYyBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqUFJFRklYKHJlZ19pbmZvX2R1bW15KTsKKysKKysvKiBNYWtlIHRoZSByZWdpc3RlciB2ZWN0b3JzIGJpZyBlbm91Z2ggZm9yIE5VTV9SRUdTIHJlZ2lzdGVycywKKysgICBidXQgZG9uJ3QgbWFrZSB0aGVtIHNtYWxsZXIuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKHJlZ2V4X2dyb3dfcmVnaXN0ZXJzKSAoaW50IG51bV9yZWdzKQorK3sKKysgIGlmIChudW1fcmVncyA+IHJlZ3NfYWxsb2NhdGVkX3NpemUpCisrICAgIHsKKysgICAgICBSRVRBTExPQ19JRiAocmVnc3RhcnQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAocmVnZW5kLAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKG9sZF9yZWdzdGFydCwgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKG9sZF9yZWdlbmQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoYmVzdF9yZWdzdGFydCwgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKGJlc3RfcmVnZW5kLAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKFBSRUZJWChyZWdfaW5mbyksIG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrICAgICAgUkVUQUxMT0NfSUYgKHJlZ19kdW1teSwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChQUkVGSVgocmVnX2luZm9fZHVtbXkpLCBudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKworKyAgICAgIHJlZ3NfYWxsb2NhdGVkX3NpemUgPSBudW1fcmVnczsKKysgICAgfQorK30KKysKKysjIGVuZGlmIC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysMCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrc3RhdGljIGJvb2xlYW4gZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFja190eXBlIGNvbXBpbGVfc3RhY2ssCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnbnVtX3QgcmVnbnVtKTsKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBgcmVnZXhfY29tcGlsZScgY29tcGlsZXMgUEFUVEVSTiAob2YgbGVuZ3RoIFNJWkUpIGFjY29yZGluZyB0byBTWU5UQVguCisrICAgUmV0dXJucyBvbmUgb2YgZXJyb3IgY29kZXMgZGVmaW5lZCBpbiBgcmVnZXguaCcsIG9yIHplcm8gZm9yIHN1Y2Nlc3MuCisrCisrICAgQXNzdW1lcyB0aGUgYGFsbG9jYXRlZCcgKGFuZCBwZXJoYXBzIGBidWZmZXInKSBhbmQgYHRyYW5zbGF0ZScKKysgICBmaWVsZHMgYXJlIHNldCBpbiBCVUZQIG9uIGVudHJ5LgorKworKyAgIElmIGl0IHN1Y2NlZWRzLCByZXN1bHRzIGFyZSBwdXQgaW4gQlVGUCAoaWYgaXQgcmV0dXJucyBhbiBlcnJvciwgdGhlCisrICAgY29udGVudHMgb2YgQlVGUCBhcmUgdW5kZWZpbmVkKToKKysgICAgIGBidWZmZXInIGlzIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYHN5bnRheCcgaXMgc2V0IHRvIFNZTlRBWDsKKysgICAgIGB1c2VkJyBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGBmYXN0bWFwX2FjY3VyYXRlJyBpcyB6ZXJvOworKyAgICAgYHJlX25zdWInIGlzIHRoZSBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgaW4gUEFUVEVSTjsKKysgICAgIGBub3RfYm9sJyBhbmQgYG5vdF9lb2wnIGFyZSB6ZXJvOworKworKyAgIFRoZSBgZmFzdG1hcCcgYW5kIGBuZXdsaW5lX2FuY2hvcicgZmllbGRzIGFyZSBuZWl0aGVyCisrICAgZXhhbWluZWQgbm9yIHNldC4gICovCisrCisrLyogUmV0dXJuLCBmcmVlaW5nIHN0b3JhZ2Ugd2UgYWxsb2NhdGVkLiAgKi8KKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEZSRUVfU1RBQ0tfUkVUVVJOKHZhbHVlKQkJXAorKyAgcmV0dXJuIChmcmVlKHBhdHRlcm4pLCBmcmVlKG1ic19vZmZzZXQpLCBmcmVlKGlzX2JpbmFyeSksIGZyZWUgKGNvbXBpbGVfc3RhY2suc3RhY2spLCB2YWx1ZSkKKysjIGVsc2UKKysjICBkZWZpbmUgRlJFRV9TVEFDS19SRVRVUk4odmFsdWUpCQlcCisrICByZXR1cm4gKGZyZWUgKGNvbXBpbGVfc3RhY2suc3RhY2spLCB2YWx1ZSkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrc3RhdGljIHJlZ19lcnJjb2RlX3QKKytQUkVGSVgocmVnZXhfY29tcGlsZSkgKGNvbnN0IGNoYXIgKkFSR19QUkVGSVgocGF0dGVybiksCisrICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgQVJHX1BSRUZJWChzaXplKSwgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICAvKiBXZSBmZXRjaCBjaGFyYWN0ZXJzIGZyb20gUEFUVEVSTiBoZXJlLiAgRXZlbiB0aG91Z2ggUEFUVEVSTiBpcworKyAgICAgYGNoYXIgKicgKGkuZS4sIHNpZ25lZCksIHdlIGRlY2xhcmUgdGhlc2UgdmFyaWFibGVzIGFzIHVuc2lnbmVkLCBzbworKyAgICAgdGhleSBjYW4gYmUgcmVsaWFibHkgdXNlZCBhcyBhcnJheSBpbmRpY2VzLiAgKi8KKysgIHJlZ2lzdGVyIFVDSEFSX1QgYywgYzE7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBBIHRlbXBvcmFyeSBzcGFjZSB0byBrZWVwIHdjaGFyX3QgcGF0dGVybiBhbmQgY29tcGlsZWQgcGF0dGVybi4gICovCisrICBDSEFSX1QgKnBhdHRlcm4sICpDT01QSUxFRF9CVUZGRVJfVkFSOworKyAgc2l6ZV90IHNpemU7CisrICAvKiBvZmZzZXQgYnVmZmVyIGZvciBvcHRpbWl6YXRpb24uIFNlZSBjb252ZXJ0X21ic190b193Yy4gICovCisrICBpbnQgKm1ic19vZmZzZXQgPSBOVUxMOworKyAgLyogSXQgaG9sZCB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciAqaXNfYmluYXJ5ID0gTlVMTDsKKysgIC8qIEEgZmxhZyB3aGV0aGVyIGV4YWN0biBpcyBoYW5kbGluZyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciBpc19leGFjdG5fYmluID0gRkFMU0U7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBBIHJhbmRvbSB0ZW1wb3Jhcnkgc3BvdCBpbiBQQVRURVJOLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqcDE7CisrCisrICAvKiBQb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB3aGVyZSB3ZSBzaG91bGQgYXBwZW5kLiAgKi8KKysgIHJlZ2lzdGVyIFVDSEFSX1QgKmI7CisrCisrICAvKiBLZWVwcyB0cmFjayBvZiB1bmNsb3NlZCBncm91cHMuICAqLworKyAgY29tcGlsZV9zdGFja190eXBlIGNvbXBpbGVfc3RhY2s7CisrCisrICAvKiBQb2ludHMgdG8gdGhlIGN1cnJlbnQgKGVuZGluZykgcG9zaXRpb24gaW4gdGhlIHBhdHRlcm4uICAqLworKyNpZmRlZiBXQ0hBUgorKyAgY29uc3QgQ0hBUl9UICpwOworKyAgY29uc3QgQ0hBUl9UICpwZW5kOworKyNlbHNlIC8qIEJZVEUgKi8KKysgIGNvbnN0IENIQVJfVCAqcCA9IHBhdHRlcm47CisrICBjb25zdCBDSEFSX1QgKnBlbmQgPSBwYXR0ZXJuICsgc2l6ZTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEhvdyB0byB0cmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICAqLworKyAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlID0gYnVmcC0+dHJhbnNsYXRlOworKworKyAgLyogQWRkcmVzcyBvZiB0aGUgY291bnQtYnl0ZSBvZiB0aGUgbW9zdCByZWNlbnRseSBpbnNlcnRlZCBgZXhhY3RuJworKyAgICAgY29tbWFuZC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdGVsbCBpZiBhIG5ldyBleGFjdC1tYXRjaAorKyAgICAgY2hhcmFjdGVyIGNhbiBiZSBhZGRlZCB0byB0aGF0IGNvbW1hbmQgb3IgaWYgdGhlIGNoYXJhY3RlciByZXF1aXJlcworKyAgICAgYSBuZXcgYGV4YWN0bicgY29tbWFuZC4gICovCisrICBVQ0hBUl9UICpwZW5kaW5nX2V4YWN0ID0gMDsKKysKKysgIC8qIEFkZHJlc3Mgb2Ygc3RhcnQgb2YgdGhlIG1vc3QgcmVjZW50bHkgZmluaXNoZWQgZXhwcmVzc2lvbi4KKysgICAgIFRoaXMgdGVsbHMsIGUuZy4sIHBvc3RmaXggKiB3aGVyZSB0byBmaW5kIHRoZSBzdGFydCBvZiBpdHMKKysgICAgIG9wZXJhbmQuICBSZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGdyb3VwcyBhbmQgYWx0ZXJuYXRpdmVzLiAgKi8KKysgIFVDSEFSX1QgKmxhc3RzdGFydCA9IDA7CisrCisrICAvKiBBZGRyZXNzIG9mIGJlZ2lubmluZyBvZiByZWdleHAsIG9yIGluc2lkZSBvZiBsYXN0IGdyb3VwLiAgKi8KKysgIFVDSEFSX1QgKmJlZ2FsdDsKKysKKysgIC8qIEFkZHJlc3Mgb2YgdGhlIHBsYWNlIHdoZXJlIGEgZm9yd2FyZCBqdW1wIHNob3VsZCBnbyB0byB0aGUgZW5kIG9mCisrICAgICB0aGUgY29udGFpbmluZyBleHByZXNzaW9uLiAgRWFjaCBhbHRlcm5hdGl2ZSBvZiBhbiBgb3InIC0tIGV4Y2VwdCB0aGUKKysgICAgIGxhc3QgLS0gZW5kcyB3aXRoIGEgZm9yd2FyZCBqdW1wIG9mIHRoaXMgc29ydC4gICovCisrICBVQ0hBUl9UICpmaXh1cF9hbHRfanVtcCA9IDA7CisrCisrICAvKiBDb3VudHMgb3Blbi1ncm91cHMgYXMgdGhleSBhcmUgZW5jb3VudGVyZWQuICBSZW1lbWJlcmVkIGZvciB0aGUKKysgICAgIG1hdGNoaW5nIGNsb3NlLWdyb3VwIG9uIHRoZSBjb21waWxlIHN0YWNrLCBzbyB0aGUgc2FtZSByZWdpc3RlcgorKyAgICAgbnVtYmVyIGlzIHB1dCBpbiB0aGUgc3RvcF9tZW1vcnkgYXMgdGhlIHN0YXJ0X21lbW9yeS4gICovCisrICByZWdudW1fdCByZWdudW0gPSAwOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogSW5pdGlhbGl6ZSB0aGUgd2NoYXJfdCBQQVRURVJOIGFuZCBvZmZzZXRfYnVmZmVyLiAgKi8KKysgIHAgPSBwZW5kID0gcGF0dGVybiA9IFRBTExPQyhjc2l6ZSArIDEsIENIQVJfVCk7CisrICBtYnNfb2Zmc2V0ID0gVEFMTE9DKGNzaXplICsgMSwgaW50KTsKKysgIGlzX2JpbmFyeSA9IFRBTExPQyhjc2l6ZSArIDEsIGNoYXIpOworKyAgaWYgKHBhdHRlcm4gPT0gTlVMTCB8fCBtYnNfb2Zmc2V0ID09IE5VTEwgfHwgaXNfYmluYXJ5ID09IE5VTEwpCisrICAgIHsKKysgICAgICBmcmVlKHBhdHRlcm4pOworKyAgICAgIGZyZWUobWJzX29mZnNldCk7CisrICAgICAgZnJlZShpc19iaW5hcnkpOworKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOworKyAgICB9CisrICBwYXR0ZXJuW2NzaXplXSA9IEwnXDAnOwkvKiBzZW50aW5lbCAqLworKyAgc2l6ZSA9IGNvbnZlcnRfbWJzX3RvX3djcyhwYXR0ZXJuLCBjcGF0dGVybiwgY3NpemUsIG1ic19vZmZzZXQsIGlzX2JpbmFyeSk7CisrICBwZW5kID0gcCArIHNpemU7CisrICBpZiAoc2l6ZSA8IDApCisrICAgIHsKKysgICAgICBmcmVlKHBhdHRlcm4pOworKyAgICAgIGZyZWUobWJzX29mZnNldCk7CisrICAgICAgZnJlZShpc19iaW5hcnkpOworKyAgICAgIHJldHVybiBSRUdfQkFEUEFUOworKyAgICB9CisrI2VuZGlmCisrCisrI2lmZGVmIERFQlVHCisrICBERUJVR19QUklOVDEgKCJcbkNvbXBpbGluZyBwYXR0ZXJuOiAiKTsKKysgIGlmIChkZWJ1ZykKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGRlYnVnX2NvdW50OworKworKyAgICAgIGZvciAoZGVidWdfY291bnQgPSAwOyBkZWJ1Z19jb3VudCA8IHNpemU7IGRlYnVnX2NvdW50KyspCisrICAgICAgICBQVVRfQ0hBUiAocGF0dGVybltkZWJ1Z19jb3VudF0pOworKyAgICAgIHB1dGNoYXIgKCdcbicpOworKyAgICB9CisrI2VuZGlmIC8qIERFQlVHICovCisrCisrICAvKiBJbml0aWFsaXplIHRoZSBjb21waWxlIHN0YWNrLiAgKi8KKysgIGNvbXBpbGVfc3RhY2suc3RhY2sgPSBUQUxMT0MgKElOSVRfQ09NUElMRV9TVEFDS19TSVpFLCBjb21waWxlX3N0YWNrX2VsdF90KTsKKysgIGlmIChjb21waWxlX3N0YWNrLnN0YWNrID09IE5VTEwpCisrICAgIHsKKysjaWZkZWYgV0NIQVIKKysgICAgICBmcmVlKHBhdHRlcm4pOworKyAgICAgIGZyZWUobWJzX29mZnNldCk7CisrICAgICAgZnJlZShpc19iaW5hcnkpOworKyNlbmRpZgorKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOworKyAgICB9CisrCisrICBjb21waWxlX3N0YWNrLnNpemUgPSBJTklUX0NPTVBJTEVfU1RBQ0tfU0laRTsKKysgIGNvbXBpbGVfc3RhY2suYXZhaWwgPSAwOworKworKyAgLyogSW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIuICAqLworKyAgYnVmcC0+c3ludGF4ID0gc3ludGF4OworKyAgYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDA7CisrICBidWZwLT5ub3RfYm9sID0gYnVmcC0+bm90X2VvbCA9IDA7CisrCisrICAvKiBTZXQgYHVzZWQnIHRvIHplcm8sIHNvIHRoYXQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLCB0aGUgcGF0dGVybgorKyAgICAgcHJpbnRlciAoZm9yIGRlYnVnZ2luZykgd2lsbCB0aGluayB0aGVyZSdzIG5vIHBhdHRlcm4uICBXZSByZXNldCBpdAorKyAgICAgYXQgdGhlIGVuZC4gICovCisrICBidWZwLT51c2VkID0gMDsKKysKKysgIC8qIEFsd2F5cyBjb3VudCBncm91cHMsIHdoZXRoZXIgb3Igbm90IGJ1ZnAtPm5vX3N1YiBpcyBzZXQuICAqLworKyAgYnVmcC0+cmVfbnN1YiA9IDA7CisrCisrI2lmICFkZWZpbmVkIGVtYWNzICYmICFkZWZpbmVkIFNZTlRBWF9UQUJMRQorKyAgLyogSW5pdGlhbGl6ZSB0aGUgc3ludGF4IHRhYmxlLiAgKi8KKysgICBpbml0X3N5bnRheF9vbmNlICgpOworKyNlbmRpZgorKworKyAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA9PSAwKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZnAtPmJ1ZmZlcikKKysJeyAvKiBJZiB6ZXJvIGFsbG9jYXRlZCwgYnV0IGJ1ZmZlciBpcyBub24tbnVsbCwgdHJ5IHRvIHJlYWxsb2MKKysgICAgICAgICAgICAgZW5vdWdoIHNwYWNlLiAgVGhpcyBsb3NlcyBpZiBidWZmZXIncyBhZGRyZXNzIGlzIGJvZ3VzLCBidXQKKysgICAgICAgICAgICAgdGhhdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LiAgKi8KKysjaWZkZWYgV0NIQVIKKysJICAvKiBGcmVlIGJ1ZnAtPmJ1ZmZlciBhbmQgYWxsb2NhdGUgYW4gYXJyYXkgZm9yIHdjaGFyX3QgcGF0dGVybgorKwkgICAgIGJ1ZmZlci4gICovCisrICAgICAgICAgIGZyZWUoYnVmcC0+YnVmZmVyKTsKKysgICAgICAgICAgQ09NUElMRURfQlVGRkVSX1ZBUiA9IFRBTExPQyAoSU5JVF9CVUZfU0laRS9zaXplb2YoVUNIQVJfVCksCisrCQkJCQlVQ0hBUl9UKTsKKysjZWxzZQorKyAgICAgICAgICBSRVRBTExPQyAoQ09NUElMRURfQlVGRkVSX1ZBUiwgSU5JVF9CVUZfU0laRSwgVUNIQVJfVCk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeyAvKiBDYWxsZXIgZGlkIG5vdCBhbGxvY2F0ZSBhIGJ1ZmZlci4gIERvIGl0IGZvciB0aGVtLiAgKi8KKysgICAgICAgICAgQ09NUElMRURfQlVGRkVSX1ZBUiA9IFRBTExPQyAoSU5JVF9CVUZfU0laRSAvIHNpemVvZihVQ0hBUl9UKSwKKysJCQkJCVVDSEFSX1QpOworKyAgICAgICAgfQorKworKyAgICAgIGlmICghQ09NUElMRURfQlVGRkVSX1ZBUikgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FU1BBQ0UpOworKyNpZmRlZiBXQ0hBUgorKyAgICAgIGJ1ZnAtPmJ1ZmZlciA9IChjaGFyKilDT01QSUxFRF9CVUZGRVJfVkFSOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IElOSVRfQlVGX1NJWkU7CisrICAgIH0KKysjaWZkZWYgV0NIQVIKKysgIGVsc2UKKysgICAgQ09NUElMRURfQlVGRkVSX1ZBUiA9IChVQ0hBUl9UKikgYnVmcC0+YnVmZmVyOworKyNlbmRpZgorKworKyAgYmVnYWx0ID0gYiA9IENPTVBJTEVEX0JVRkZFUl9WQVI7CisrCisrICAvKiBMb29wIHRocm91Z2ggdGhlIHVuY29tcGlsZWQgcGF0dGVybiB1bnRpbCB3ZSdyZSBhdCB0aGUgZW5kLiAgKi8KKysgIHdoaWxlIChwICE9IHBlbmQpCisrICAgIHsKKysgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgc3dpdGNoIChjKQorKyAgICAgICAgeworKyAgICAgICAgY2FzZSAnXic6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoICAgLyogSWYgYXQgc3RhcnQgb2YgcGF0dGVybiwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgICAgIHAgPT0gcGF0dGVybiArIDEKKysgICAgICAgICAgICAgICAgICAgLyogSWYgY29udGV4dCBpbmRlcGVuZGVudCwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIHx8IHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUworKyAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGRlcGVuZHMgb24gd2hhdCdzIGNvbWUgYmVmb3JlLiAgKi8KKysgICAgICAgICAgICAgICAgfHwgUFJFRklYKGF0X2JlZ2xpbmVfbG9jX3ApIChwYXR0ZXJuLCBwLCBzeW50YXgpKQorKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGJlZ2xpbmUpOworKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICBjYXNlICckJzoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmICggICAvKiBJZiBhdCBlbmQgb2YgcGF0dGVybiwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgICAgIHAgPT0gcGVuZAorKyAgICAgICAgICAgICAgICAgICAvKiBJZiBjb250ZXh0IGluZGVwZW5kZW50LCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgfHwgc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCisrICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgZGVwZW5kcyBvbiB3aGF0J3MgbmV4dC4gICovCisrICAgICAgICAgICAgICAgIHx8IFBSRUZJWChhdF9lbmRsaW5lX2xvY19wKSAocCwgcGVuZCwgc3ludGF4KSkKKysgICAgICAgICAgICAgICBCVUZfUFVTSCAoZW5kbGluZSk7CisrICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgfQorKyAgICAgICAgICAgYnJlYWs7CisrCisrCisrCWNhc2UgJysnOgorKyAgICAgICAgY2FzZSAnPyc6CisrICAgICAgICAgIGlmICgoc3ludGF4ICYgUkVfQktfUExVU19RTSkKKysgICAgICAgICAgICAgIHx8IChzeW50YXggJiBSRV9MSU1JVEVEX09QUykpCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgIGhhbmRsZV9wbHVzOgorKyAgICAgICAgY2FzZSAnKic6CisrICAgICAgICAgIC8qIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhdHRlcm4uLi4gKi8KKysgICAgICAgICAgaWYgKCFsYXN0c3RhcnQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMpCisrICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfQkFEUlBUKTsKKysgICAgICAgICAgICAgIGVsc2UgaWYgKCEoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgeworKyAgICAgICAgICAgIC8qIEFyZSB3ZSBvcHRpbWl6aW5nIHRoaXMganVtcD8gICovCisrICAgICAgICAgICAgYm9vbGVhbiBrZWVwX3N0cmluZ19wID0gZmFsc2U7CisrCisrICAgICAgICAgICAgLyogMSBtZWFucyB6ZXJvIChtYW55KSBtYXRjaGVzIGlzIGFsbG93ZWQuICAqLworKyAgICAgICAgICAgIGNoYXIgemVyb190aW1lc19vayA9IDAsIG1hbnlfdGltZXNfb2sgPSAwOworKworKyAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgc2VxdWVuY2Ugb2YgcmVwZXRpdGlvbiBjaGFycywgY29sbGFwc2UgaXQKKysgICAgICAgICAgICAgICBkb3duIHRvIGp1c3Qgb25lICh0aGUgcmlnaHQgb25lKS4gIFdlIGNhbid0IGNvbWJpbmUKKysgICAgICAgICAgICAgICBpbnRlcnZhbCBvcGVyYXRvcnMgd2l0aCB0aGVzZSBiZWNhdXNlIG9mLCBlLmcuLCBgYXsyfSonLAorKyAgICAgICAgICAgICAgIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGFuIGV2ZW4gbnVtYmVyIG9mIGBhJ3MuICAqLworKworKyAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHplcm9fdGltZXNfb2sgfD0gYyAhPSAnKyc7CisrICAgICAgICAgICAgICAgIG1hbnlfdGltZXNfb2sgfD0gYyAhPSAnPyc7CisrCisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpCisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJyonCisrICAgICAgICAgICAgICAgICAgICB8fCAoIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSAmJiAoYyA9PSAnKycgfHwgYyA9PSAnPycpKSkKKysgICAgICAgICAgICAgICAgICA7CisrCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0gICYmICBjID09ICdcXCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrICAgICAgICAgICAgICAgICAgICBpZiAoIShjMSA9PSAnKycgfHwgYzEgPT0gJz8nKSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgICAgYyA9IGMxOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIElmIHdlIGdldCBoZXJlLCB3ZSBmb3VuZCBhbm90aGVyIHJlcGVhdCBjaGFyYWN0ZXIuICAqLworKyAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBTdGFyLCBldGMuIGFwcGxpZWQgdG8gYW4gZW1wdHkgcGF0dGVybiBpcyBlcXVpdmFsZW50CisrICAgICAgICAgICAgICAgdG8gYW4gZW1wdHkgcGF0dGVybi4gICovCisrICAgICAgICAgICAgaWYgKCFsYXN0c3RhcnQpCisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAvKiBOb3cgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCB6ZXJvIG1hdGNoZXMgaXMgYWxsb3dlZAorKyAgICAgICAgICAgICAgIGFuZCBhbHNvIHdoZXRoZXIgb3Igbm90IHR3byBvciBtb3JlIG1hdGNoZXMgaXMgYWxsb3dlZC4gICovCisrICAgICAgICAgICAgaWYgKG1hbnlfdGltZXNfb2spCisrICAgICAgICAgICAgICB7IC8qIE1vcmUgdGhhbiBvbmUgcmVwZXRpdGlvbiBpcyBhbGxvd2VkLCBzbyBwdXQgaW4gYXQgdGhlCisrICAgICAgICAgICAgICAgICAgIGVuZCBhIGJhY2t3YXJkIHJlbGF0aXZlIGp1bXAgZnJvbSBgYicgdG8gYmVmb3JlIHRoZSBuZXh0CisrICAgICAgICAgICAgICAgICAgIGp1bXAgd2UncmUgZ29pbmcgdG8gcHV0IGluIGJlbG93ICh3aGljaCBqdW1wcyBmcm9tCisrICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCB0byBhZnRlciB0aGlzIGp1bXApLgorKworKyAgICAgICAgICAgICAgICAgICBCdXQgaWYgd2UgYXJlIGF0IHRoZSBgKicgaW4gdGhlIGV4YWN0IHNlcXVlbmNlIGAuKlxuJywKKysgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGFuIHVuY29uZGl0aW9uYWwganVtcCBiYWNrd2FyZHMgdG8gdGhlIC4sCisrICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC4gIFRoaXMgd2F5IHdlIG9ubHkKKysgICAgICAgICAgICAgICAgICAgcHVzaCBhIGZhaWx1cmUgcG9pbnQgb25jZSwgaW5zdGVhZCBvZiBldmVyeSB0aW1lCisrICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGxvb3AuICAqLworKyAgICAgICAgICAgICAgICBhc3NlcnQgKHAgLSAxID4gcGF0dGVybik7CisrCisrICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIGp1bXAuICAqLworKyAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrCisrICAgICAgICAgICAgICAgIC8qIFdlIGtub3cgd2UgYXJlIG5vdCBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBwYXR0ZXJuLAorKyAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGxhc3RzdGFydCB3YXMgbm9uemVyby4gIEFuZCB3ZSd2ZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGVkIGBwJywgYnkgdGhlIHdheSwgdG8gYmUgdGhlIGNoYXJhY3RlciBhZnRlcgorKyAgICAgICAgICAgICAgICAgICB0aGUgYConLiAgRG8gd2UgaGF2ZSB0byBkbyBzb21ldGhpbmcgYW5hbG9nb3VzIGhlcmUKKysgICAgICAgICAgICAgICAgICAgZm9yIG51bGwgYnl0ZXMsIGJlY2F1c2Ugb2YgUkVfRE9UX05PVF9OVUxMPyAgKi8KKysgICAgICAgICAgICAgICAgaWYgKFRSQU5TTEFURSAoKihwIC0gMikpID09IFRSQU5TTEFURSAoJy4nKQorKwkJICAgICYmIHplcm9fdGltZXNfb2sKKysgICAgICAgICAgICAgICAgICAgICYmIHAgPCBwZW5kICYmIFRSQU5TTEFURSAoKnApID09IFRSQU5TTEFURSAoJ1xuJykKKysgICAgICAgICAgICAgICAgICAgICYmICEoc3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorKyAgICAgICAgICAgICAgICAgIHsgLyogV2UgaGF2ZSAuKlxuLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKGp1bXAsIGIsIGxhc3RzdGFydCk7CisrICAgICAgICAgICAgICAgICAgICBrZWVwX3N0cmluZ19wID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlLiAgKi8KKysgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChtYXliZV9wb3BfanVtcCwgYiwgbGFzdHN0YXJ0IC0KKysJCQkgICAgICAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKTsKKysKKysgICAgICAgICAgICAgICAgLyogV2UndmUgYWRkZWQgbW9yZSBzdHVmZiB0byB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBPbiBmYWlsdXJlLCBqdW1wIGZyb20gbGFzdHN0YXJ0IHRvIGIgKyAzLCB3aGljaCB3aWxsIGJlIHRoZQorKyAgICAgICAgICAgICAgIGVuZCBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoaXMganVtcCBpcyBpbnNlcnRlZC4gICovCisrCSAgICAvKiBpZmRlZiBXQ0hBUiwgJ2IgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRScgaW5zdGVhZCBvZgorKwkgICAgICAgJ2IgKyAzJy4gICovCisrICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgIElOU0VSVF9KVU1QIChrZWVwX3N0cmluZ19wID8gb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvbl9mYWlsdXJlX2p1bXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCwgYiArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgIGlmICghemVyb190aW1lc19vaykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLyogQXQgbGVhc3Qgb25lIHJlcGV0aXRpb24gaXMgcmVxdWlyZWQsIHNvIGluc2VydCBhCisrICAgICAgICAgICAgICAgICAgIGBkdW1teV9mYWlsdXJlX2p1bXAnIGJlZm9yZSB0aGUgaW5pdGlhbAorKyAgICAgICAgICAgICAgICAgICBgb25fZmFpbHVyZV9qdW1wJyBpbnN0cnVjdGlvbiBvZiB0aGUgbG9vcC4gVGhpcworKyAgICAgICAgICAgICAgICAgICBlZmZlY3RzIGEgc2tpcCBvdmVyIHRoYXQgaW5zdHJ1Y3Rpb24gdGhlIGZpcnN0IHRpbWUKKysgICAgICAgICAgICAgICAgICAgd2UgaGl0IHRoYXQgbG9vcC4gICovCisrICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgSU5TRVJUX0pVTVAgKGR1bW15X2ZhaWx1cmVfanVtcCwgbGFzdHN0YXJ0LCBsYXN0c3RhcnQgKworKwkJCSAgICAgMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2UgJy4nOgorKyAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICBCVUZfUFVTSCAoYW55Y2hhcik7CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgY2FzZSAnWyc6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICBib29sZWFuIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrI2lmZGVmIFdDSEFSCisrCSAgICBDSEFSX1QgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyNlbHNlCisrCSAgICB1bnNpZ25lZCBpbnQgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyNlbmRpZgorKyAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysjaWZkZWYgV0NIQVIKKysJICAgIC8qIFdlIGFzc3VtZSBhIGNoYXJzZXQoX25vdCkgc3RydWN0dXJlIGFzIGEgd2NoYXJfdCBhcnJheS4KKysJICAgICAgIGNoYXJzZXRbMF0gPSAocmVfb3Bjb2RlX3QpIGNoYXJzZXQoX25vdCkKKysgICAgICAgICAgICAgICBjaGFyc2V0WzFdID0gbCAoPSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzKQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbMl0gPSBtICg9IGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9scykKKysgICAgICAgICAgICAgICBjaGFyc2V0WzNdID0gbiAoPSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3NlcykKKysJICAgICAgIGNoYXJzZXRbNF0gPSBvICg9IGxlbmd0aCBvZiBjaGFyX3JhbmdlcykKKysJICAgICAgIGNoYXJzZXRbNV0gPSBwICg9IGxlbmd0aCBvZiBjaGFycykKKysKKysgICAgICAgICAgICAgICBjaGFyc2V0WzZdID0gY2hhcl9jbGFzcyAod2N0eXBlX3QpCisrICAgICAgICAgICAgICAgY2hhcnNldFs2K0NIQVJfQ0xBU1NfU0laRV0gPSBjaGFyX2NsYXNzICh3Y3R5cGVfdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrICAgICAgICAgICAgICAgY2hhcnNldFtsKzVdICA9IGNoYXJfY2xhc3MgKHdjdHlwZV90KQorKworKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCs2XSAgPSBjb2xsYXRpbmdfc3ltYm9sICh3Y2hhcl90KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrbSs1XSAgPSBjb2xsYXRpbmdfc3ltYm9sICh3Y2hhcl90KQorKwkJCQkJaWZkZWYgX0xJQkMgd2UgdXNlIHRoZSBpbmRleCBpZgorKwkJCQkJX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CIGluc3RlYWQgb2YKKysJCQkJCXdjaGFyX3Qgc3RyaW5nLgorKworKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCttKzZdICA9IGVxdWl2YWxlbmNlX2NsYXNzZXMgKHdjaGFyX3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrICAgICAgICAgICAgICAgY2hhcnNldFtsK20rbis1XSAgPSBlcXVpdmFsZW5jZV9jbGFzc2VzICh3Y2hhcl90KQorKwkJCQkJaWZkZWYgX0xJQkMgd2UgdXNlIHRoZSBpbmRleCBpbgorKwkJCQkJX05MX0NPTExBVEVfV0VJR0hUIGluc3RlYWQgb2YKKysJCQkJCXdjaGFyX3Qgc3RyaW5nLgorKworKwkgICAgICAgY2hhcnNldFtsK20rbis2XSA9IHJhbmdlX3N0YXJ0CisrCSAgICAgICBjaGFyc2V0W2wrbStuKzddID0gcmFuZ2VfZW5kCisrCSAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvKzRdID0gcmFuZ2Vfc3RhcnQKKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rNV0gPSByYW5nZV9lbmQKKysJCQkJCWlmZGVmIF9MSUJDIHdlIHVzZSB0aGUgdmFsdWUgbG9va2VkIHVwCisrCQkJCQlpbiBfTkxfQ09MTEFURV9DT0xMU0VRIGluc3RlYWQgb2YKKysJCQkJCXdjaGFyX3QgY2hhcmFjdGVyLgorKworKwkgICAgICAgY2hhcnNldFtsK20rbisybys2XSA9IGNoYXIKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rcCs1XSA9IGNoYXIKKysKKysJICAgICAqLworKworKwkgICAgLyogV2UgbmVlZCBhdCBsZWFzdCA2IHNwYWNlczogdGhlIG9wY29kZSwgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGNoYXJfY2xhc3NlcywgdGhlIGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9scywgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGVxdWl2YWxlbmNlX2NsYXNzZXMsIHRoZSBsZW5ndGggb2YgY2hhcl9yYW5nZXMsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBjaGFycy4gICovCisrCSAgICBHRVRfQlVGRkVSX1NQQUNFICg2KTsKKysKKysJICAgIC8qIFNhdmUgYiBhcyBsYXN0c3RhcnQuIEFuZCBXZSB1c2UgbGFzdHN0YXJ0IGFzIHRoZSBwb2ludGVyCisrCSAgICAgICB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY2hhcnNldCBoZXJlLgorKwkgICAgICAgSW4gb3RoZXIgd29yZHMsIGxhc3RzdGFydFtpXSBpbmRpY2F0ZXMgY2hhcnNldFtpXS4gICovCisrICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysKKysgICAgICAgICAgICAvKiBXZSB0ZXN0IGAqcCA9PSAnXicgdHdpY2UsIGluc3RlYWQgb2YgdXNpbmcgYW4gaWYKKysgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCBvbmUgQlVGX1BVU0guICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIICgqcCA9PSAnXicgPyBjaGFyc2V0X25vdCA6IGNoYXJzZXQpOworKyAgICAgICAgICAgIGlmICgqcCA9PSAnXicpCisrICAgICAgICAgICAgICBwKys7CisrCisrICAgICAgICAgICAgLyogUHVzaCB0aGUgbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcywgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGNvbGxhdGluZ19zeW1ib2xzLCB0aGUgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzZXMsIHRoZQorKyAgICAgICAgICAgICAgIGxlbmd0aCBvZiBjaGFyX3JhbmdlcyBhbmQgdGhlIGxlbmd0aCBvZiBjaGFycy4gICovCisrICAgICAgICAgICAgQlVGX1BVU0hfMyAoMCwgMCwgMCk7CisrICAgICAgICAgICAgQlVGX1BVU0hfMiAoMCwgMCk7CisrCisrICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICAqLworKyAgICAgICAgICAgIHAxID0gcDsKKysKKysgICAgICAgICAgICAvKiBjaGFyc2V0X25vdCBtYXRjaGVzIG5ld2xpbmUgYWNjb3JkaW5nIHRvIGEgc3ludGF4IGJpdC4gICovCisrICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgYlstNl0gPT0gY2hhcnNldF9ub3QKKysgICAgICAgICAgICAgICAgJiYgKHN5bnRheCAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkpCisrCSAgICAgIHsKKysJCUJVRl9QVVNIKCdcbicpOworKwkJbGFzdHN0YXJ0WzVdKys7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBSZWFkIGluIGNoYXJhY3RlcnMgYW5kIHJhbmdlcywgc2V0dGluZyBtYXAgYml0cy4gICovCisrICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgIC8qIFwgbWlnaHQgZXNjYXBlIGNoYXJhY3RlcnMgaW5zaWRlIFsuLi5dIGFuZCBbXi4uLl0uICAqLworKyAgICAgICAgICAgICAgICBpZiAoKHN5bnRheCAmIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMpICYmIGMgPT0gJ1xcJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysJCSAgICBCVUZfUFVTSChjMSk7CisrCQkgICAgbGFzdHN0YXJ0WzVdKys7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJzICAqLworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzE7CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIENvdWxkIGJlIHRoZSBlbmQgb2YgdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gIElmIGl0J3MKKysgICAgICAgICAgICAgICAgICAgbm90IChpLmUuLCB3aGVuIHRoZSBicmFja2V0IGV4cHJlc3Npb24gaXMgYFtdJyBzbworKyAgICAgICAgICAgICAgICAgICBmYXIpLCB0aGUgJ10nIGNoYXJhY3RlciBiaXQgZ2V0cyBzZXQgd2F5IGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ10nICYmIHAgIT0gcDEgKyAxKQorKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICBpZiAoaGFkX2NoYXJfY2xhc3MgJiYgYyA9PSAnLScgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJBTkdFKTsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyOiBpZiB0aGlzIGlzIGEgaHlwaGVuIG5vdCBhdCB0aGUKKysgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgYSBsaXN0LCB0aGVuIGl0J3MgdGhlIHJhbmdlCisrICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJy0nCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAyID49IHBhdHRlcm4gJiYgcFstMl0gPT0gJ1snKQorKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMyA+PSBwYXR0ZXJuICYmIHBbLTNdID09ICdbJyAmJiBwWy0yXSA9PSAnXicpCisrICAgICAgICAgICAgICAgICAgICAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQ7CisrCQkgICAgLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciByYW5nZV9zdGFydCBhbmQgcmFuZ2VfZW5kLiAgKi8KKysJCSAgICBHRVRfQlVGRkVSX1NQQUNFICgyKTsKKysJCSAgICAvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICBiICs9IDI7CisrICAgICAgICAgICAgICAgICAgICByZXQgPSB3Y3NfY29tcGlsZV9yYW5nZSAocmFuZ2Vfc3RhcnQsICZwLCBwZW5kLCB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXgsIGIsIGxhc3RzdGFydCk7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysgICAgICAgICAgICAgICAgICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBbMF0gPT0gJy0nICYmIHBbMV0gIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsgLyogVGhpcyBoYW5kbGVzIHJhbmdlcyBtYWRlIHVwIG9mIGNoYXJhY3RlcnMgb25seS4gICovCisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldDsKKysKKysJCSAgICAvKiBNb3ZlIHBhc3QgdGhlIGAtJy4gICovCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKwkJICAgIC8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgcmFuZ2Vfc3RhcnQgYW5kIHJhbmdlX2VuZC4gICovCisrCQkgICAgR0VUX0JVRkZFUl9TUEFDRSAoMik7CisrCQkgICAgLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgYiArPSAyOworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gd2NzX2NvbXBpbGVfcmFuZ2UgKGMsICZwLCBwZW5kLCB0cmFuc2xhdGUsIHN5bnRheCwgYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCk7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysJCSAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBTZWUgaWYgd2UncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHBvc3NpYmxlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnOicpCisrICAgICAgICAgICAgICAgICAgeyAvKiBMZWF2ZSByb29tIGZvciB0aGUgbnVsbC4gICovCisrICAgICAgICAgICAgICAgICAgICBjaGFyIHN0cltDSEFSX0NMQVNTX01BWF9MRU5HVEggKyAxXTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgIGMxID0gMDsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbOicuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPT0gJzonICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCQkJaWYgKGMxIDwgQ0hBUl9DTEFTU19NQVhfTEVOR1RIKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIGlzbid0IGEgd29yZCBicmFja2V0ZWQgYnkgYFs6JyBhbmQgYDpdJzoKKysgICAgICAgICAgICAgICAgICAgICAgIHVuZG8gdGhlIGVuZGluZyBjaGFyYWN0ZXIsIHRoZSBsZXR0ZXJzLCBhbmQgbGVhdmUKKysgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsZWFkaW5nIGA6JyBhbmQgYFsnIChidXQgc3RvcmUgdGhlbSBhcyBjaGFyYWN0ZXIpLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICc6JyAmJiAqcCA9PSAnXScpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysJCQl3Y3R5cGVfdCB3dDsKKysJCQl1aW50cHRyX3QgYWxpZ25lZHA7CisrCisrCQkJLyogUXVlcnkgdGhlIGNoYXJhY3RlciBjbGFzcyBhcyB3Y3R5cGVfdC4gICovCisrCQkJd3QgPSBJU19DSEFSX0NMQVNTIChzdHIpOworKwkJCWlmICh3dCA9PSAwKQorKwkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ1RZUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkJLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UoQ0hBUl9DTEFTU19TSVpFKTsKKysJCQkvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgYiArPSBDSEFSX0NMQVNTX1NJWkU7CisrCQkJLyogTW92ZSBkYXRhIHdoaWNoIGZvbGxvdyBjaGFyYWN0ZXIgY2xhc3NlcworKwkJCSAgICBub3QgdG8gdmlvbGF0ZSB0aGUgZGF0YS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X3NwYWNlKENIQVJfQ0xBU1NfU0laRSwKKysJCQkJICAgICBsYXN0c3RhcnQgKyA2ICsgbGFzdHN0YXJ0WzFdLAorKwkJCQkgICAgIGIgLSAxKTsKKysJCQlhbGlnbmVkcCA9ICgodWludHB0cl90KShsYXN0c3RhcnQgKyA2ICsgbGFzdHN0YXJ0WzFdKQorKwkJCQkgICAgKyBfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKQorKwkJCSAgCSAgICAmIH4odWludHB0cl90KShfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKTsKKysJCQkvKiBTdG9yZSB0aGUgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAqKCh3Y3R5cGVfdCopYWxpZ25lZHApID0gd3Q7CisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnRbMV0gKz0gQ0hBUl9DTEFTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKCc6Jyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0WzVdICs9IDI7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkJcmFuZ2Vfc3RhcnQgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICgqcCA9PSAnPScKKysJCQkJCQkJICB8fCAqcCA9PSAnLicpKQorKwkJICB7CisrCQkgICAgQ0hBUl9UIHN0clsxMjhdOwkvKiBTaG91bGQgYmUgbGFyZ2UgZW5vdWdoLiAgKi8KKysJCSAgICBDSEFSX1QgZGVsaW0gPSAqcDsgLyogJz0nIG9yICcuJyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgdWludDMyX3QgbnJ1bGVzID0KKysJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZgorKwkJICAgIFBBVEZFVENIIChjKTsKKysJCSAgICBjMSA9IDA7CisrCisrCQkgICAgLyogSWYgcGF0dGVybiBpcyBgW1s9JyBvciAnW1suJy4gICovCisrCQkgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJICAgIGZvciAoOzspCisrCQkgICAgICB7CisrCQkJUEFURkVUQ0ggKGMpOworKwkJCWlmICgoYyA9PSBkZWxpbSAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysJCQkgIGJyZWFrOworKwkJCWlmIChjMSA8IHNpemVvZiAoc3RyKSAtIDEpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysJCSAgICBpZiAoYyA9PSBkZWxpbSAmJiAqcCA9PSAnXScgJiYgc3RyWzBdICE9ICdcMCcpCisrCQkgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGksIG9mZnNldDsKKysJCQkvKiBJZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBkYXRhIHdlIHVzZSB0aGUgZGVmYXVsdAorKwkJCSAgIGNvbGxhdGlvbiBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBpcyBpbiBhIGNsYXNzCisrCQkJICAgYnkgaXRzZWxmLiAgSXQgYWxzbyBtZWFucyB0aGF0IEFTQ0lJIGlzIHRoZQorKwkJCSAgIGNoYXJhY3RlciBzZXQgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIKKysJCQkgICB3aXRoIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgbXVsdGlieXRlCisrCQkJICAgcmVwcmVzZW50YXRpb24uICAqLworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vdCBkZWZpbmVkIF9MSUJDLCB3ZSBwdXNoIHRoZSBuYW1lIGFuZAorKwkJCSAgIGBcMCcgZm9yIHRoZSBzYWtlIG9mIG1hdGNoaW5nIHBlcmZvcm1hbmNlLiAgKi8KKysJCQlpbnQgZGF0YXNpemUgPSBjMSArIDE7CisrCisrIyBpZmRlZiBfTElCQworKwkJCWludDMyX3QgaWR4ID0gMDsKKysJCQlpZiAobnJ1bGVzID09IDApCisrIyBlbmRpZgorKwkJCSAgeworKwkJCSAgICBpZiAoYzEgIT0gMSkKKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysJCQkgIH0KKysjIGlmZGVmIF9MSUJDCisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICBjb25zdCBpbnQzMl90ICp0YWJsZTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqd2VpZ2h0czsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqZXh0cmE7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKmluZGlyZWN0OworKwkJCSAgICB3aW50X3QgKmNwOworKworKwkJCSAgICBpZihkZWxpbSA9PSAnPScpCisrCQkJICAgICAgeworKwkJCQkvKiBXZSBwdXNoIHRoZSBpbmRleCBmb3IgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworKwkJCQljcCA9ICh3aW50X3QqKXN0cjsKKysKKysJCQkJdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1RBQkxFV0MpOworKwkJCQl3ZWlnaHRzID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9XRUlHSFRXQyk7CisrCQkJCWV4dHJhID0gKGNvbnN0IHdpbnRfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX0VYVFJBV0MpOworKwkJCQlpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQyk7CisrCisrCQkJCWlkeCA9IEZJTkRJRFggKHRhYmxlLCBpbmRpcmVjdCwgZXh0cmEsICZjcCwgMSk7CisrCQkJCWlmIChpZHggPT0gMCB8fCBjcCA8ICh3aW50X3QqKSBzdHIgKyBjMSkKKysJCQkJICAvKiBUaGlzIGlzIG5vIHZhbGlkIGNoYXJhY3Rlci4gICovCisrCQkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJCXN0clswXSA9ICh3Y2hhcl90KWlkeDsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UgLyogZGVsaW0gPT0gJy4nICovCisrCQkJICAgICAgeworKwkJCQkvKiBXZSBwdXNoIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZQorKwkJCQkgICBmb3IgY29sbGF0aW5nIHN5bWJvbC4gICovCisrCQkJCWludDMyX3QgdGFibGVfc2l6ZTsKKysJCQkJY29uc3QgaW50MzJfdCAqc3ltYl90YWJsZTsKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisrCQkJCWludDMyX3QgaWR4OworKwkJCQlpbnQzMl90IGVsZW07CisrCQkJCWludDMyX3Qgc2Vjb25kOworKwkJCQlpbnQzMl90IGhhc2g7CisrCQkJCWNoYXIgY2hhcl9zdHJbYzFdOworKworKwkJCQkvKiBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIG5hbWUgdG8gYSBzaW5nbGUtYnl0ZQorKwkJCQkgICBzdHJpbmcuICBUaGlzIGlzIHBvc3NpYmxlIHNpbmNlIHRoZSBuYW1lcworKwkJCQkgICBjb25zaXN0IG9mIEFTQ0lJIGNoYXJhY3RlcnMgYW5kIHRoZSBpbnRlcm5hbAorKwkJCQkgICByZXByZXNlbnRhdGlvbiBpcyBVQ1M0LiAgKi8KKysJCQkJZm9yIChpID0gMDsgaSA8IGMxOyArK2kpCisrCQkJCSAgY2hhcl9zdHJbaV0gPSBzdHJbaV07CisrCisrCQkJCXRhYmxlX3NpemUgPQorKwkJCQkgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsCisrCQkJCQkJICAgIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIpOworKwkJCQlzeW1iX3RhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIpOworKwkJCQlleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysJCQkJLyogTG9jYXRlIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIGhhc2hpbmcgdGFibGUuICAqLworKwkJCQloYXNoID0gZWxlbV9oYXNoIChjaGFyX3N0ciwgYzEpOworKworKwkJCQlpZHggPSAwOworKwkJCQllbGVtID0gaGFzaCAlIHRhYmxlX3NpemU7CisrCQkJCXNlY29uZCA9IGhhc2ggJSAodGFibGVfc2l6ZSAtIDIpOworKwkJCQl3aGlsZSAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKysJCQkJICB7CisrCQkJCSAgICAvKiBGaXJzdCBjb21wYXJlIHRoZSBoYXNoaW5nIHZhbHVlLiAgKi8KKysJCQkJICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSBoYXNoCisrCQkJCQkmJiBjMSA9PSBleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV1dCisrCQkJCQkmJiBtZW1jbXAgKGNoYXJfc3RyLAorKwkJCQkJCSAgICZleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV0KKysJCQkJCQkJICsgMV0sIGMxKSA9PSAwKQorKwkJCQkgICAgICB7CisrCQkJCQkvKiBZZXAsIHRoaXMgaXMgdGhlIGVudHJ5LiAgKi8KKysJCQkJCWlkeCA9IHN5bWJfdGFibGVbMiAqIGVsZW0gKyAxXTsKKysJCQkJCWlkeCArPSAxICsgZXh0cmFbaWR4XTsKKysJCQkJCWJyZWFrOworKwkJCQkgICAgICB9CisrCisrCQkJCSAgICAvKiBOZXh0IGVudHJ5LiAgKi8KKysJCQkJICAgIGVsZW0gKz0gc2Vjb25kOworKwkJCQkgIH0KKysKKysJCQkJaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisrCQkJCSAgeworKwkJCQkgICAgLyogQ29tcHV0ZSB0aGUgaW5kZXggb2YgdGhlIGJ5dGUgc2VxdWVuY2UKKysJCQkJICAgICAgIGluIHRoZSB0YWJsZS4gICovCisrCQkJCSAgICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisrCQkJCSAgICAvKiBBZGp1c3QgZm9yIHRoZSBhbGlnbm1lbnQuICAqLworKwkJCQkgICAgaWR4ID0gKGlkeCArIDMpICYgfjM7CisrCisrCQkJCSAgICBzdHJbMF0gPSAod2NoYXJfdCkgaWR4ICsgNDsKKysJCQkJICB9CisrCQkJCWVsc2UgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDAgJiYgYzEgPT0gMSkKKysJCQkJICB7CisrCQkJCSAgICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhCisrCQkJCSAgICAgICBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuICAqLworKwkJCQkgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCQkJICAgIEJVRl9QVVNIKHN0clswXSk7CisrCQkJCSAgICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJCQkgICAgbGFzdHN0YXJ0WzVdKys7CisrCQkJCSAgICByYW5nZV9zdGFydCA9IHN0clswXTsKKysKKysJCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUKKysJCQkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wuICAqLworKwkJCQkgICAgUEFURkVUQ0ggKGMpOworKwkJCQkgICAgLyogZXhpdCBmcm9tIHRoZSBzd2l0Y2ggYmxvY2suICAqLworKwkJCQkgICAgY29udGludWU7CisrCQkJCSAgfQorKwkJCQllbHNlCisrCQkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCQkJICAgICAgfQorKwkJCSAgICBkYXRhc2l6ZSA9IDE7CisrCQkJICB9CisrIyBlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyAob3IgY29sbGF0aW5nIHN5bWJvbCkuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHRoZSBlcXVpdmFsZW5jZSBjbGFzcworKwkJCSAgIChvciBjb2xsYXRpbmcgc3ltYm9sKSAoYW5kICdcMCcgaWYgbmVlZGVkKS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRShkYXRhc2l6ZSk7CisrCQkJLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gZGF0YXNpemU7CisrCisrCQkJaWYgKGRlbGltID09ICc9JykKKysJCQkgIHsgLyogZXF1aXZhbGVuY2UgY2xhc3MgICovCisrCQkJICAgIC8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIGNoYXJfcmFuZ2VzLAorKwkJCSAgICAgICB3aGljaCBpcyBuZXh0IHRvIGVxdWl2YWxlbmNlX2NsYXNzZXMuICAqLworKwkJCSAgICBvZmZzZXQgPSBsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0KKysJCQkgICAgICArIGxhc3RzdGFydFszXSArNjsKKysJCQkgICAgLyogSW5zZXJ0IHNwYWNlLiAgKi8KKysJCQkgICAgaW5zZXJ0X3NwYWNlKGRhdGFzaXplLCBsYXN0c3RhcnQgKyBvZmZzZXQsIGIgLSAxKTsKKysKKysJCQkgICAgLyogV3JpdGUgdGhlIGVxdWl2YWxlbmNlX2NsYXNzIGFuZCBcMC4gICovCisrCQkJICAgIGZvciAoaSA9IDAgOyBpIDwgZGF0YXNpemUgOyBpKyspCisrCQkJICAgICAgbGFzdHN0YXJ0W29mZnNldCArIGldID0gc3RyW2ldOworKworKwkJCSAgICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzc2VzLiAgKi8KKysJCQkgICAgbGFzdHN0YXJ0WzNdICs9IGRhdGFzaXplOworKwkJCSAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrCQkJICB9CisrCQkJZWxzZSAvKiBkZWxpbSA9PSAnLicgKi8KKysJCQkgIHsgLyogY29sbGF0aW5nIHN5bWJvbCAgKi8KKysJCQkgICAgLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgb2YgdGhlIGVxdWl2YWxlbmNlX2NsYXNzZXMsCisrCQkJICAgICAgIHdoaWNoIGlzIG5leHQgdG8gY29sbGF0aW5nX3N5bWJvbHMuICAqLworKwkJCSAgICBvZmZzZXQgPSBsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0gKyA2OworKwkJCSAgICAvKiBJbnNlcnQgc3BhY2UgYW5kIHdyaXRlIHRoZSBjb2xsYXRpb25nX3N5bWJvbAorKwkJCSAgICAgICBhbmQgXDAuICAqLworKwkJCSAgICBpbnNlcnRfc3BhY2UoZGF0YXNpemUsIGxhc3RzdGFydCArIG9mZnNldCwgYi0xKTsKKysJCQkgICAgZm9yIChpID0gMCA7IGkgPCBkYXRhc2l6ZSA7IGkrKykKKysJCQkgICAgICBsYXN0c3RhcnRbb2Zmc2V0ICsgaV0gPSBzdHJbaV07CisrCisrCQkJICAgIC8qIEluIHJlX21hdGNoXzJfaW50ZXJuYWwgaWYgcmFuZ2Vfc3RhcnQgPCAtMSwgd2UKKysJCQkgICAgICAgYXNzdW1lIC1yYW5nZV9zdGFydCBpcyB0aGUgb2Zmc2V0IG9mIHRoZQorKwkJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sIHdoaWNoIGlzIHNwZWNpZmllZCBhcworKwkJCSAgICAgICB0aGUgY2hhcmFjdGVyIG9mIHRoZSByYW5nZSBzdGFydC4gIFNvIHdlIGFzc2lnbgorKwkJCSAgICAgICAtKGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXSArIDYpIHRvCisrCQkJICAgICAgIHJhbmdlX3N0YXJ0LiAgKi8KKysJCQkgICAgcmFuZ2Vfc3RhcnQgPSAtKGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXSArIDYpOworKwkJCSAgICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9sLiAgKi8KKysJCQkgICAgbGFzdHN0YXJ0WzJdICs9IGRhdGFzaXplOworKwkJCSAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJCSAgfQorKwkJICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKGRlbGltKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnRbNV0gKz0gMjsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCQlyYW5nZV9zdGFydCA9IGRlbGltOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCSAgICBCVUZfUFVTSChjKTsKKysJCSAgICBsYXN0c3RhcnRbNV0rKzsgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjOworKyAgICAgICAgICAgICAgICAgIH0KKysJICAgICAgfQorKworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSB0byBwdXNoIGEgY2hhcnNldDogdGhlCisrICAgICAgICAgICAgICAgb3Bjb2RlLCB0aGUgbGVuZ3RoIGNvdW50LCBhbmQgdGhlIGJpdHNldDsgMzQgYnl0ZXMgaW4gYWxsLiAgKi8KKysJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDM0KTsKKysKKysgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKworKyAgICAgICAgICAgIC8qIFdlIHRlc3QgYCpwID09ICdeJyB0d2ljZSwgaW5zdGVhZCBvZiB1c2luZyBhbiBpZgorKyAgICAgICAgICAgICAgIHN0YXRlbWVudCwgc28gd2Ugb25seSBuZWVkIG9uZSBCVUZfUFVTSC4gICovCisrICAgICAgICAgICAgQlVGX1BVU0ggKCpwID09ICdeJyA/IGNoYXJzZXRfbm90IDogY2hhcnNldCk7CisrICAgICAgICAgICAgaWYgKCpwID09ICdeJykKKysgICAgICAgICAgICAgIHArKzsKKysKKysgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCisrICAgICAgICAgICAgcDEgPSBwOworKworKyAgICAgICAgICAgIC8qIFB1c2ggdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYml0bWFwLiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSCAoKDEgPDwgQllURVdJRFRIKSAvIEJZVEVXSURUSCk7CisrCisrICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHdob2xlIG1hcC4gICovCisrICAgICAgICAgICAgYnplcm8gKGIsICgxIDw8IEJZVEVXSURUSCkgLyBCWVRFV0lEVEgpOworKworKyAgICAgICAgICAgIC8qIGNoYXJzZXRfbm90IG1hdGNoZXMgbmV3bGluZSBhY2NvcmRpbmcgdG8gYSBzeW50YXggYml0LiAgKi8KKysgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBiWy0yXSA9PSBjaGFyc2V0X25vdAorKyAgICAgICAgICAgICAgICAmJiAoc3ludGF4ICYgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FKSkKKysgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1xuJyk7CisrCisrICAgICAgICAgICAgLyogUmVhZCBpbiBjaGFyYWN0ZXJzIGFuZCByYW5nZXMsIHNldHRpbmcgbWFwIGJpdHMuICAqLworKyAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAvKiBcIG1pZ2h0IGVzY2FwZSBjaGFyYWN0ZXJzIGluc2lkZSBbLi4uXSBhbmQgW14uLi5dLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKChzeW50YXggJiBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTKSAmJiBjID09ICdcXCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKGMxKTsKKysJCSAgICByYW5nZV9zdGFydCA9IGMxOworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBDb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICBJZiBpdCdzCisrICAgICAgICAgICAgICAgICAgIG5vdCAoaS5lLiwgd2hlbiB0aGUgYnJhY2tldCBleHByZXNzaW9uIGlzIGBbXScgc28KKysgICAgICAgICAgICAgICAgICAgZmFyKSwgdGhlICddJyBjaGFyYWN0ZXIgYml0IGdldHMgc2V0IHdheSBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICddJyAmJiBwICE9IHAxICsgMSkKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGhhZF9jaGFyX2NsYXNzICYmIGMgPT0gJy0nICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSQU5HRSk7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlcjogaWYgdGhpcyBpcyBhIGh5cGhlbiBub3QgYXQgdGhlCisrICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIGEgbGlzdCwgdGhlbiBpdCdzIHRoZSByYW5nZQorKyAgICAgICAgICAgICAgICAgICBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICctJworKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMiA+PSBwYXR0ZXJuICYmIHBbLTJdID09ICdbJykKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDMgPj0gcGF0dGVybiAmJiBwWy0zXSA9PSAnWycgJiYgcFstMl0gPT0gJ14nKQorKyAgICAgICAgICAgICAgICAgICAgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0CisrICAgICAgICAgICAgICAgICAgICAgID0gYnl0ZV9jb21waWxlX3JhbmdlIChyYW5nZV9zdGFydCwgJnAsIHBlbmQsIHRyYW5zbGF0ZSwKKysJCQkJCSAgICBzeW50YXgsIGIpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAocFswXSA9PSAnLScgJiYgcFsxXSAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeyAvKiBUaGlzIGhhbmRsZXMgcmFuZ2VzIG1hZGUgdXAgb2YgY2hhcmFjdGVycyBvbmx5LiAgKi8KKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKwkJICAgIC8qIE1vdmUgcGFzdCB0aGUgYC0nLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrCisrICAgICAgICAgICAgICAgICAgICByZXQgPSBieXRlX2NvbXBpbGVfcmFuZ2UgKGMsICZwLCBwZW5kLCB0cmFuc2xhdGUsIHN5bnRheCwgYik7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysJCSAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBTZWUgaWYgd2UncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHBvc3NpYmxlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnOicpCisrICAgICAgICAgICAgICAgICAgeyAvKiBMZWF2ZSByb29tIGZvciB0aGUgbnVsbC4gICovCisrICAgICAgICAgICAgICAgICAgICBjaGFyIHN0cltDSEFSX0NMQVNTX01BWF9MRU5HVEggKyAxXTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgIGMxID0gMDsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbOicuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPT0gJzonICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCQkJaWYgKCgoaW50KSBjMSkgPCBDSEFSX0NMQVNTX01BWF9MRU5HVEgpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIHN0cltjMV0gPSAnXDAnOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgaXNuJ3QgYSB3b3JkIGJyYWNrZXRlZCBieSBgWzonIGFuZCBgOl0nOgorKyAgICAgICAgICAgICAgICAgICAgICAgdW5kbyB0aGUgZW5kaW5nIGNoYXJhY3RlciwgdGhlIGxldHRlcnMsIGFuZCBsZWF2ZQorKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxlYWRpbmcgYDonIGFuZCBgWycgKGJ1dCBzZXQgYml0cyBmb3IgdGhlbSkuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJzonICYmICpwID09ICddJykKKysgICAgICAgICAgICAgICAgICAgICAgeworKyMgaWYgV0lERV9DSEFSX1NVUFBPUlQKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2xvd2VyID0gU1RSRVEgKHN0ciwgImxvd2VyIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc191cHBlciA9IFNUUkVRIChzdHIsICJ1cHBlciIpOworKwkJCXdjdHlwZV90IHd0OworKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaDsKKysKKysJCQl3dCA9IElTX0NIQVJfQ0xBU1MgKHN0cik7CisrCQkJaWYgKHd0ID09IDApCisrCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDVFlQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCAxIDw8IEJZVEVXSURUSDsgKytjaCkKKysJCQkgIHsKKysjICBpZmRlZiBfTElCQworKwkJCSAgICBpZiAoX19pc3djdHlwZSAoX19idG93YyAoY2gpLCB3dCkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrIyAgZWxzZQorKwkJCSAgICBpZiAoaXN3Y3R5cGUgKGJ0b3djIChjaCksIHd0KSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysjICBlbmRpZgorKworKwkJCSAgICBpZiAodHJhbnNsYXRlICYmIChpc191cHBlciB8fCBpc19sb3dlcikKKysJCQkJJiYgKElTVVBQRVIgKGNoKSB8fCBJU0xPV0VSIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgfQorKworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysjIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2g7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19hbG51bSA9IFNUUkVRIChzdHIsICJhbG51bSIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYWxwaGEgPSBTVFJFUSAoc3RyLCAiYWxwaGEiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2JsYW5rID0gU1RSRVEgKHN0ciwgImJsYW5rIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19jbnRybCA9IFNUUkVRIChzdHIsICJjbnRybCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfZGlnaXQgPSBTVFJFUSAoc3RyLCAiZGlnaXQiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2dyYXBoID0gU1RSRVEgKHN0ciwgImdyYXBoIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19sb3dlciA9IFNUUkVRIChzdHIsICJsb3dlciIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfcHJpbnQgPSBTVFJFUSAoc3RyLCAicHJpbnQiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3B1bmN0ID0gU1RSRVEgKHN0ciwgInB1bmN0Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19zcGFjZSA9IFNUUkVRIChzdHIsICJzcGFjZSIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfdXBwZXIgPSBTVFJFUSAoc3RyLCAidXBwZXIiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3hkaWdpdCA9IFNUUkVRIChzdHIsICJ4ZGlnaXQiKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlTX0NIQVJfQ0xBU1MgKHN0cikpCisrCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDVFlQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCAxIDw8IEJZVEVXSURUSDsgY2grKykKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKysJCQkgICAgLyogVGhpcyB3YXMgc3BsaXQgaW50byAzIGlmJ3MgdG8KKysJCQkgICAgICAgYXZvaWQgYW4gYXJiaXRyYXJ5IGxpbWl0IGluIHNvbWUgY29tcGlsZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgKGlzX2FsbnVtICAmJiBJU0FMTlVNIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfYWxwaGEgICYmIElTQUxQSEEgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19ibGFuayAgJiYgSVNCTEFOSyAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2NudHJsICAmJiBJU0NOVFJMIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgICBpZiAoICAgKGlzX2RpZ2l0ICAmJiBJU0RJR0lUIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfZ3JhcGggICYmIElTR1JBUEggKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19sb3dlciAgJiYgSVNMT1dFUiAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3ByaW50ICAmJiBJU1BSSU5UIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgICBpZiAoICAgKGlzX3B1bmN0ICAmJiBJU1BVTkNUIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfc3BhY2UgICYmIElTU1BBQ0UgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc191cHBlciAgJiYgSVNVUFBFUiAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3hkaWdpdCAmJiBJU1hESUdJVCAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgICAgaWYgKCAgIHRyYW5zbGF0ZSAmJiAoaXNfdXBwZXIgfHwgaXNfbG93ZXIpCisrCQkJCSYmIChJU1VQUEVSIChjaCkgfHwgSVNMT1dFUiAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrIyBlbmRpZgkvKiBsaWJjIHx8IHdjdHlwZS5oICovCisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCc6Jyk7CisrCQkJcmFuZ2Vfc3RhcnQgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICc9JykKKysJCSAgeworKwkJICAgIHVuc2lnbmVkIGNoYXIgc3RyW01CX0xFTl9NQVggKyAxXTsKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgdWludDMyX3QgbnJ1bGVzID0KKysJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZgorKworKwkJICAgIFBBVEZFVENIIChjKTsKKysJCSAgICBjMSA9IDA7CisrCisrCQkgICAgLyogSWYgcGF0dGVybiBpcyBgW1s9Jy4gICovCisrCQkgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJICAgIGZvciAoOzspCisrCQkgICAgICB7CisrCQkJUEFURkVUQ0ggKGMpOworKwkJCWlmICgoYyA9PSAnPScgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrCQkJICBicmVhazsKKysJCQlpZiAoYzEgPCBNQl9MRU5fTUFYKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrCQkgICAgaWYgKGMgPT0gJz0nICYmICpwID09ICddJyAmJiBzdHJbMF0gIT0gJ1wwJykKKysJCSAgICAgIHsKKysJCQkvKiBJZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBkYXRhIHdlIHVzZSB0aGUgZGVmYXVsdAorKwkJCSAgIGNvbGxhdGlvbiBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBpcyBpbiBhIGNsYXNzCisrCQkJICAgYnkgaXRzZWxmLiAgSXQgYWxzbyBtZWFucyB0aGF0IEFTQ0lJIGlzIHRoZQorKwkJCSAgIGNoYXJhY3RlciBzZXQgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIKKysJCQkgICB3aXRoIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgbXVsdGlieXRlCisrCQkJICAgcmVwcmVzZW50YXRpb24uICAqLworKyMgaWZkZWYgX0xJQkMKKysJCQlpZiAobnJ1bGVzID09IDApCisrIyBlbmRpZgorKwkJCSAgeworKwkJCSAgICBpZiAoYzEgIT0gMSkKKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogU2V0IHRoZSBiaXQgZm9yIHRoZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBTRVRfTElTVF9CSVQgKHN0clswXSk7CisrCQkJICB9CisrIyBpZmRlZiBfTElCQworKwkJCWVsc2UKKysJCQkgIHsKKysJCQkgICAgLyogVHJ5IHRvIG1hdGNoIHRoZSBieXRlIHNlcXVlbmNlIGluIGBzdHInIGFnYWluc3QKKysJCQkgICAgICAgdGhvc2Uga25vd24gdG8gdGhlIGNvbGxhdGUgaW1wbGVtZW50YXRpb24uCisrCQkJICAgICAgIEZpcnN0IGZpbmQgb3V0IHdoZXRoZXIgdGhlIGJ5dGVzIGluIGBzdHInIGFyZQorKwkJCSAgICAgICBhY3R1YWxseSBmcm9tIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4gICovCisrCQkJICAgIGNvbnN0IGludDMyX3QgKnRhYmxlOworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp3ZWlnaHRzOworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqaW5kaXJlY3Q7CisrCQkJICAgIGludDMyX3QgaWR4OworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCA9IHN0cjsKKysJCQkgICAgaW50IGNoOworKworKwkJCSAgICB0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFTUIpOworKwkJCSAgICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfV0VJR0hUTUIpOworKwkJCSAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0VYVFJBTUIpOworKwkJCSAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0lORElSRUNUTUIpOworKwkJCSAgICBpZHggPSBGSU5ESURYICh0YWJsZSwgaW5kaXJlY3QsIGV4dHJhLCAmY3AsIDEpOworKwkJCSAgICBpZiAoaWR4ID09IDAgfHwgY3AgPCBzdHIgKyBjMSkKKysJCQkgICAgICAvKiBUaGlzIGlzIG5vIHZhbGlkIGNoYXJhY3Rlci4gICovCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIE5vdyB3ZSBoYXZlIHRvIGdvIHRocm91Z2h0IHRoZSB3aG9sZSB0YWJsZQorKwkJCSAgICAgICBhbmQgZmluZCBhbGwgY2hhcmFjdGVycyB3aGljaCBoYXZlIHRoZSBzYW1lCisrCQkJICAgICAgIGZpcnN0IGxldmVsIHdlaWdodC4KKysKKysJCQkgICAgICAgWFhYIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0LgorKwkJCSAgICAgICB3ZSB3b3VsZCBoYXZlIHRvIG1hdGNoIG11bHRpYnl0ZSBzZXF1ZW5jZXMKKysJCQkgICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIHdpdGggdGhlIGN1cnJlbnQKKysJCQkgICAgICAgaW1wbGVtZW50YXRpb24uICAqLworKwkJCSAgICBmb3IgKGNoID0gMTsgY2ggPCAyNTY7ICsrY2gpCisrCQkJICAgICAgLyogWFhYIFRoaXMgdGVzdCB3b3VsZCBoYXZlIHRvIGJlIGNoYW5nZWQgaWYgd2UKKysJCQkJIHdvdWxkIGFsbG93IG1hdGNoaW5nIG11bHRpYnl0ZSBzZXF1ZW5jZXMuICAqLworKwkJCSAgICAgIGlmICh0YWJsZVtjaF0gPiAwKQorKwkJCQl7CisrCQkJCSAgaW50MzJfdCBpZHgyID0gdGFibGVbY2hdOworKwkJCQkgIHNpemVfdCBsZW4gPSB3ZWlnaHRzW2lkeDJdOworKworKwkJCQkgIC8qIFRlc3Qgd2hldGhlciB0aGUgbGVuZ2h0cyBtYXRjaC4gICovCisrCQkJCSAgaWYgKHdlaWdodHNbaWR4XSA9PSBsZW4pCisrCQkJCSAgICB7CisrCQkJCSAgICAgIC8qIFRoZXkgZG8uICBOZXcgY29tcGFyZSB0aGUgYnl0ZXMgb2YKKysJCQkJCSB0aGUgd2VpZ2h0LiAgKi8KKysJCQkJICAgICAgc2l6ZV90IGNudCA9IDA7CisrCisrCQkJCSAgICAgIHdoaWxlIChjbnQgPCBsZW4KKysJCQkJCSAgICAgJiYgKHdlaWdodHNbaWR4ICsgMSArIGNudF0KKysJCQkJCQkgPT0gd2VpZ2h0c1tpZHgyICsgMSArIGNudF0pKQorKwkJCQkJKytjbnQ7CisrCisrCQkJCSAgICAgIGlmIChjbnQgPT0gbGVuKQorKwkJCQkJLyogVGhleSBtYXRjaC4gIE1hcmsgdGhlIGNoYXJhY3RlciBhcworKwkJCQkJICAgYWNjZXB0YWJsZS4gICovCisrCQkJCQlTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkJICAgIH0KKysJCQkJfQorKwkJCSAgfQorKyMgZW5kaWYKKysJCQloYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrCQkgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnPScpOworKwkJCXJhbmdlX3N0YXJ0ID0gJz0nOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJy4nKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgY2hhciBzdHJbMTI4XTsJLyogU2hvdWxkIGJlIGxhcmdlIGVub3VnaC4gICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIHVpbnQzMl90IG5ydWxlcyA9CisrCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYKKysKKysJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkgICAgYzEgPSAwOworKworKwkJICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbLicuICAqLworKwkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCSAgICBmb3IgKDs7KQorKwkJICAgICAgeworKwkJCVBBVEZFVENIIChjKTsKKysJCQlpZiAoKGMgPT0gJy4nICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKwkJCSAgYnJlYWs7CisrCQkJaWYgKGMxIDwgc2l6ZW9mIChzdHIpKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrCQkgICAgaWYgKGMgPT0gJy4nICYmICpwID09ICddJyAmJiBzdHJbMF0gIT0gJ1wwJykKKysJCSAgICAgIHsKKysJCQkvKiBJZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBkYXRhIHdlIHVzZSB0aGUgZGVmYXVsdAorKwkJCSAgIGNvbGxhdGlvbiBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBpcyB0aGUgbmFtZQorKwkJCSAgIGZvciBpdHMgb3duIGNsYXNzIHdoaWNoIGNvbnRhaW5zIG9ubHkgdGhlIG9uZQorKwkJCSAgIGNoYXJhY3Rlci4gIEl0IGFsc28gbWVhbnMgdGhhdCBBU0NJSSBpcyB0aGUKKysJCQkgICBjaGFyYWN0ZXIgc2V0IGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90IGhhdmUgY2hhcmFjdGVyCisrCQkJICAgd2l0aCBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIG11bHRpYnl0ZQorKwkJCSAgIHJlcHJlc2VudGF0aW9uLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkJaWYgKG5ydWxlcyA9PSAwKQorKyMgZW5kaWYKKysJCQkgIHsKKysJCQkgICAgaWYgKGMxICE9IDEpCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIFNldCB0aGUgYml0IGZvciB0aGUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgU0VUX0xJU1RfQklUIChzdHJbMF0pOworKwkJCSAgICByYW5nZV9zdGFydCA9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHIpWzBdOworKwkJCSAgfQorKyMgaWZkZWYgX0xJQkMKKysJCQllbHNlCisrCQkJICB7CisrCQkJICAgIC8qIFRyeSB0byBtYXRjaCB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBgc3RyJyBhZ2FpbnN0CisrCQkJICAgICAgIHRob3NlIGtub3duIHRvIHRoZSBjb2xsYXRlIGltcGxlbWVudGF0aW9uLgorKwkJCSAgICAgICBGaXJzdCBmaW5kIG91dCB3aGV0aGVyIHRoZSBieXRlcyBpbiBgc3RyJyBhcmUKKysJCQkgICAgICAgYWN0dWFsbHkgZnJvbSBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBpbnQzMl90IHRhYmxlX3NpemU7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKnN5bWJfdGFibGU7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworKwkJCSAgICBpbnQzMl90IGlkeDsKKysJCQkgICAgaW50MzJfdCBlbGVtOworKwkJCSAgICBpbnQzMl90IHNlY29uZDsKKysJCQkgICAgaW50MzJfdCBoYXNoOworKworKwkJCSAgICB0YWJsZV9zaXplID0KKysJCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLAorKwkJCQkJCV9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIpOworKwkJCSAgICBzeW1iX3RhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQik7CisrCQkJICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrCQkJICAgIC8qIExvY2F0ZSB0aGUgY2hhcmFjdGVyIGluIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKysJCQkgICAgaGFzaCA9IGVsZW1faGFzaCAoKGNvbnN0IGNoYXIgKikgc3RyLCBjMSk7CisrCisrCQkJICAgIGlkeCA9IDA7CisrCQkJICAgIGVsZW0gPSBoYXNoICUgdGFibGVfc2l6ZTsKKysJCQkgICAgc2Vjb25kID0gaGFzaCAlICh0YWJsZV9zaXplIC0gMik7CisrCQkJICAgIHdoaWxlIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorKwkJCSAgICAgIHsKKysJCQkJLyogRmlyc3QgY29tcGFyZSB0aGUgaGFzaGluZyB2YWx1ZS4gICovCisrCQkJCWlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSBoYXNoCisrCQkJCSAgICAmJiBjMSA9PSBleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV1dCisrCQkJCSAgICAmJiBtZW1jbXAgKHN0ciwKKysJCQkJCSAgICAgICAmZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdCisrCQkJCQkJICAgICArIDFdLAorKwkJCQkJICAgICAgIGMxKSA9PSAwKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIFllcCwgdGhpcyBpcyB0aGUgZW50cnkuICAqLworKwkJCQkgICAgaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworKwkJCQkgICAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworKwkJCQkgICAgYnJlYWs7CisrCQkJCSAgfQorKworKwkJCQkvKiBOZXh0IGVudHJ5LiAgKi8KKysJCQkJZWxlbSArPSBzZWNvbmQ7CisrCQkJICAgICAgfQorKworKwkJCSAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gMCkKKysJCQkgICAgICAvKiBUaGlzIGlzIG5vIHZhbGlkIGNoYXJhY3Rlci4gICovCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIE5vdyBhZGQgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIocykgd2UgZm91bmQKKysJCQkgICAgICAgdG8gdGhlIGFjY2VwdCBsaXN0LgorKworKwkJCSAgICAgICBYWFggTm90ZSB0aGF0IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QuCisrCQkJICAgICAgIHdlIHdvdWxkIGhhdmUgdG8gbWF0Y2ggbXVsdGlieXRlIHNlcXVlbmNlcworKwkJCSAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudAorKwkJCSAgICAgICBpbXBsZW1lbnRhdGlvbi4gIEFsc28sIHdlIGhhdmUgdG8gbWF0Y2gKKysJCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbHMsIHdoaWNoIGV4cGFuZCB0byBtb3JlIHRoYW4KKysJCQkgICAgICAgb25lIGZpbGUsIGFzIGEgd2hvbGUgYW5kIG5vdCBhbGxvdyB0aGUKKysJCQkgICAgICAgaW5kaXZpZHVhbCBieXRlcy4gICovCisrCQkJICAgIGMxID0gZXh0cmFbaWR4KytdOworKwkJCSAgICBpZiAoYzEgPT0gMSkKKysJCQkgICAgICByYW5nZV9zdGFydCA9IGV4dHJhW2lkeF07CisrCQkJICAgIHdoaWxlIChjMS0tID4gMCkKKysJCQkgICAgICB7CisrCQkJCVNFVF9MSVNUX0JJVCAoZXh0cmFbaWR4XSk7CisrCQkJCSsraWR4OworKwkJCSAgICAgIH0KKysJCQkgIH0KKysjIGVuZGlmCisrCQkJaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCSAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCcuJyk7CisrCQkJcmFuZ2Vfc3RhcnQgPSAnLic7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUIChjKTsKKysJCSAgICByYW5nZV9zdGFydCA9IGM7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIERpc2NhcmQgYW55IChub24pbWF0Y2hpbmcgbGlzdCBieXRlcyB0aGF0IGFyZSBhbGwgMCBhdCB0aGUKKysgICAgICAgICAgICAgICBlbmQgb2YgdGhlIG1hcC4gIERlY3JlYXNlIHRoZSBtYXAtbGVuZ3RoIGJ5dGUgdG9vLiAgKi8KKysgICAgICAgICAgICB3aGlsZSAoKGludCkgYlstMV0gPiAwICYmIGJbYlstMV0gLSAxXSA9PSAwKQorKyAgICAgICAgICAgICAgYlstMV0tLTsKKysgICAgICAgICAgICBiICs9IGJbLTFdOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKworKwljYXNlICcoJzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9vcGVuOworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJyknOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Nsb3NlOworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJ1xuJzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05FV0xJTkVfQUxUKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2FsdDsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrCWNhc2UgJ3wnOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfVkJBUikKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9hbHQ7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAneyc6CisrICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfSU5URVJWQUxTICYmIHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykKKysgICAgICAgICAgICAgZ290byBoYW5kbGVfaW50ZXJ2YWw7CisrICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICdcXCc6CisrICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgIC8qIERvIG5vdCB0cmFuc2xhdGUgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgXCwgc28gdGhhdCB3ZSBjYW4KKysgICAgICAgICAgICAgZGlzdGluZ3Vpc2gsIGUuZy4sIFxCIGZyb20gXGIsIGV2ZW4gaWYgd2Ugbm9ybWFsbHkgd291bGQKKysgICAgICAgICAgICAgdHJhbnNsYXRlLCBlLmcuLCBCIHRvIGIuICAqLworKyAgICAgICAgICBQQVRGRVRDSF9SQVcgKGMpOworKworKyAgICAgICAgICBzd2l0Y2ggKGMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgJygnOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgIGhhbmRsZV9vcGVuOgorKyAgICAgICAgICAgICAgYnVmcC0+cmVfbnN1YisrOworKyAgICAgICAgICAgICAgcmVnbnVtKys7CisrCisrICAgICAgICAgICAgICBpZiAoQ09NUElMRV9TVEFDS19GVUxMKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgUkVUQUxMT0MgKGNvbXBpbGVfc3RhY2suc3RhY2ssIGNvbXBpbGVfc3RhY2suc2l6ZSA8PCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlX3N0YWNrX2VsdF90KTsKKysgICAgICAgICAgICAgICAgICBpZiAoY29tcGlsZV9zdGFjay5zdGFjayA9PSBOVUxMKSByZXR1cm4gUkVHX0VTUEFDRTsKKysKKysgICAgICAgICAgICAgICAgICBjb21waWxlX3N0YWNrLnNpemUgPDw9IDE7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHRvIHJlc3RvcmUgd2hlbiB3ZSBoaXQgZW5kIG9mIHRoaXMKKysgICAgICAgICAgICAgICAgIGdyb3VwLiAgVGhleSBhcmUgYWxsIHJlbGF0aXZlIG9mZnNldHMsIHNvIHRoYXQgaWYgdGhlCisrICAgICAgICAgICAgICAgICB3aG9sZSBwYXR0ZXJuIG1vdmVzIGJlY2F1c2Ugb2YgcmVhbGxvYywgdGhleSB3aWxsIHN0aWxsCisrICAgICAgICAgICAgICAgICBiZSB2YWxpZC4gICovCisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5iZWdhbHRfb2Zmc2V0ID0gYmVnYWx0IC0gQ09NUElMRURfQlVGRkVSX1ZBUjsKKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmZpeHVwX2FsdF9qdW1wCisrICAgICAgICAgICAgICAgID0gZml4dXBfYWx0X2p1bXAgPyBmaXh1cF9hbHRfanVtcCAtIENPTVBJTEVEX0JVRkZFUl9WQVIgKyAxIDogMDsKKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmxhc3RzdGFydF9vZmZzZXQgPSBiIC0gQ09NUElMRURfQlVGRkVSX1ZBUjsKKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLnJlZ251bSA9IHJlZ251bTsKKysKKysgICAgICAgICAgICAgIC8qIFdlIHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIHRoZSAwIHdpdGggdGhlIG51bWJlciBvZgorKyAgICAgICAgICAgICAgICAgZ3JvdXBzIGlubmVyIHRvIHRoaXMgb25lLiAgQnV0IGRvIG5vdCBwdXNoIGEKKysgICAgICAgICAgICAgICAgIHN0YXJ0X21lbW9yeSBmb3IgZ3JvdXBzIGJleW9uZCB0aGUgbGFzdCBvbmUgd2UgY2FuCisrICAgICAgICAgICAgICAgICByZXByZXNlbnQgaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgICAgICAgICAgICAgaWYgKHJlZ251bSA8PSBNQVhfUkVHTlVNKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AuaW5uZXJfZ3JvdXBfb2Zmc2V0ID0gYgorKwkJICAgIC0gQ09NUElMRURfQlVGRkVSX1ZBUiArIDI7CisrICAgICAgICAgICAgICAgICAgQlVGX1BVU0hfMyAoc3RhcnRfbWVtb3J5LCByZWdudW0sIDApOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICBjb21waWxlX3N0YWNrLmF2YWlsKys7CisrCisrICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcCA9IDA7CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSAwOworKyAgICAgICAgICAgICAgYmVnYWx0ID0gYjsKKysJICAgICAgLyogSWYgd2UndmUgcmVhY2hlZCBNQVhfUkVHTlVNIGdyb3VwcywgdGhlbiB0aGlzIG9wZW4KKysJCSB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhbnkgY29kZSwgc28gd2UnbGwgaGF2ZSB0bworKwkJIGNsZWFyIHBlbmRpbmdfZXhhY3QgZXhwbGljaXRseS4gICovCisrCSAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnKSc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKSBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgICBpZiAoQ09NUElMRV9TVEFDS19FTVBUWSkKKysJCXsKKysJCSAgaWYgKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisrCQkgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKwkJICBlbHNlCisrCQkgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUlBBUkVOKTsKKysJCX0KKysKKysgICAgICAgICAgICBoYW5kbGVfY2xvc2U6CisrICAgICAgICAgICAgICBpZiAoZml4dXBfYWx0X2p1bXApCisrICAgICAgICAgICAgICAgIHsgLyogUHVzaCBhIGR1bW15IGZhaWx1cmUgcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGUKKysgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSBmb3IgYSBwb3NzaWJsZSBmdXR1cmUKKysgICAgICAgICAgICAgICAgICAgICBgcG9wX2ZhaWx1cmVfanVtcCcgdG8gcG9wLiAgU2VlIGNvbW1lbnRzIGF0CisrICAgICAgICAgICAgICAgICAgICAgYHB1c2hfZHVtbXlfZmFpbHVyZScgaW4gYHJlX21hdGNoXzInLiAgKi8KKysgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAocHVzaF9kdW1teV9mYWlsdXJlKTsKKysKKysgICAgICAgICAgICAgICAgICAvKiBXZSBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoaXMganVtcCB3aGVuIHdlIGFzc2lnbmVkCisrICAgICAgICAgICAgICAgICAgICAgdG8gYGZpeHVwX2FsdF9qdW1wJywgaW4gdGhlIGBoYW5kbGVfYWx0JyBjYXNlIGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChqdW1wX3Bhc3RfYWx0LCBmaXh1cF9hbHRfanVtcCwgYiAtIDEpOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBTZWUgc2ltaWxhciBjb2RlIGZvciBiYWNrc2xhc2hlZCBsZWZ0IHBhcmVuIGFib3ZlLiAgKi8KKysgICAgICAgICAgICAgIGlmIChDT01QSUxFX1NUQUNLX0VNUFRZKQorKwkJeworKwkJICBpZiAoc3ludGF4ICYgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKysJCSAgICBnb3RvIG5vcm1hbF9jaGFyOworKwkJICBlbHNlCisrCQkgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUlBBUkVOKTsKKysJCX0KKysKKysgICAgICAgICAgICAgIC8qIFNpbmNlIHdlIGp1c3QgY2hlY2tlZCBmb3IgYW4gZW1wdHkgc3RhY2sgYWJvdmUsIHRoaXMKKysgICAgICAgICAgICAgICAgIGBgY2FuJ3QgaGFwcGVuJycuICAqLworKyAgICAgICAgICAgICAgYXNzZXJ0IChjb21waWxlX3N0YWNrLmF2YWlsICE9IDApOworKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvKiBXZSBkb24ndCBqdXN0IHdhbnQgdG8gcmVzdG9yZSBpbnRvIGByZWdudW0nLCBiZWNhdXNlCisrICAgICAgICAgICAgICAgICAgIGxhdGVyIGdyb3VwcyBzaG91bGQgY29udGludWUgdG8gYmUgbnVtYmVyZWQgaGlnaGVyLAorKyAgICAgICAgICAgICAgICAgICBhcyBpbiBgKGFiKWMoZGUpJyAtLSB0aGUgc2Vjb25kIGdyb3VwIGlzICMyLiAgKi8KKysgICAgICAgICAgICAgICAgcmVnbnVtX3QgdGhpc19ncm91cF9yZWdudW07CisrCisrICAgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2suYXZhaWwtLTsKKysgICAgICAgICAgICAgICAgYmVnYWx0ID0gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmJlZ2FsdF9vZmZzZXQ7CisrICAgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wCisrICAgICAgICAgICAgICAgICAgPSBDT01QSUxFX1NUQUNLX1RPUC5maXh1cF9hbHRfanVtcAorKyAgICAgICAgICAgICAgICAgICAgPyBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AuZml4dXBfYWx0X2p1bXAgLSAxCisrICAgICAgICAgICAgICAgICAgICA6IDA7CisrICAgICAgICAgICAgICAgIGxhc3RzdGFydCA9IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5sYXN0c3RhcnRfb2Zmc2V0OworKyAgICAgICAgICAgICAgICB0aGlzX2dyb3VwX3JlZ251bSA9IENPTVBJTEVfU1RBQ0tfVE9QLnJlZ251bTsKKysJCS8qIElmIHdlJ3ZlIHJlYWNoZWQgTUFYX1JFR05VTSBncm91cHMsIHRoZW4gdGhpcyBvcGVuCisrCQkgICB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhbnkgY29kZSwgc28gd2UnbGwgaGF2ZSB0bworKwkJICAgY2xlYXIgcGVuZGluZ19leGFjdCBleHBsaWNpdGx5LiAgKi8KKysJCXBlbmRpbmdfZXhhY3QgPSAwOworKworKyAgICAgICAgICAgICAgICAvKiBXZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBncm91cCwgc28gbm93IHdlIGtub3cgaG93IG1hbnkKKysgICAgICAgICAgICAgICAgICAgZ3JvdXBzIHdlcmUgaW5zaWRlIHRoaXMgb25lLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKHRoaXNfZ3JvdXBfcmVnbnVtIDw9IE1BWF9SRUdOVU0pCisrICAgICAgICAgICAgICAgICAgeworKwkJICAgIFVDSEFSX1QgKmlubmVyX2dyb3VwX2xvYworKyAgICAgICAgICAgICAgICAgICAgICA9IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5pbm5lcl9ncm91cF9vZmZzZXQ7CisrCisrICAgICAgICAgICAgICAgICAgICAqaW5uZXJfZ3JvdXBfbG9jID0gcmVnbnVtIC0gdGhpc19ncm91cF9yZWdudW07CisrICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSF8zIChzdG9wX21lbW9yeSwgdGhpc19ncm91cF9yZWdudW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdudW0gLSB0aGlzX2dyb3VwX3JlZ251bSk7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnfCc6CQkJCQkvKiBgXHwnLiAgKi8KKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9MSU1JVEVEX09QUyB8fCBzeW50YXggJiBSRV9OT19CS19WQkFSKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrICAgICAgICAgICAgaGFuZGxlX2FsdDoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9MSU1JVEVEX09QUykKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysgICAgICAgICAgICAgIC8qIEluc2VydCBiZWZvcmUgdGhlIHByZXZpb3VzIGFsdGVybmF0aXZlIGEganVtcCB3aGljaAorKyAgICAgICAgICAgICAgICAganVtcHMgdG8gdGhpcyBhbHRlcm5hdGl2ZSBpZiB0aGUgZm9ybWVyIGZhaWxzLiAgKi8KKysgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgIElOU0VSVF9KVU1QIChvbl9mYWlsdXJlX2p1bXAsIGJlZ2FsdCwKKysJCQkgICBiICsgMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKyAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgIC8qIFRoZSBhbHRlcm5hdGl2ZSBiZWZvcmUgdGhpcyBvbmUgaGFzIGEganVtcCBhZnRlciBpdAorKyAgICAgICAgICAgICAgICAgd2hpY2ggZ2V0cyBleGVjdXRlZCBpZiBpdCBnZXRzIG1hdGNoZWQuICBBZGp1c3QgdGhhdAorKyAgICAgICAgICAgICAgICAganVtcCBzbyBpdCB3aWxsIGp1bXAgdG8gdGhpcyBhbHRlcm5hdGl2ZSdzIGFuYWxvZ291cworKyAgICAgICAgICAgICAgICAganVtcCAocHV0IGluIGJlbG93LCB3aGljaCBpbiB0dXJuIHdpbGwganVtcCB0byB0aGUgbmV4dAorKyAgICAgICAgICAgICAgICAgKGlmIGFueSkgYWx0ZXJuYXRpdmUncyBzdWNoIGp1bXAsIGV0Yy4pLiAgVGhlIGxhc3Qgc3VjaAorKyAgICAgICAgICAgICAgICAganVtcCBqdW1wcyB0byB0aGUgY29ycmVjdCBmaW5hbCBkZXN0aW5hdGlvbi4gIEEgcGljdHVyZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fIF9fX19fCisrICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCB8ICAgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHYgfCAgIHYKKysgICAgICAgICAgICAgICAgICAgICAgICAgYSB8IGIgICB8IGMKKysKKysgICAgICAgICAgICAgICAgIElmIHdlIGFyZSBhdCBgYicsIHRoZW4gZml4dXBfYWx0X2p1bXAgcmlnaHQgbm93IHBvaW50cyB0byBhCisrICAgICAgICAgICAgICAgICB0aHJlZS1ieXRlIHNwYWNlIGFmdGVyIGBhJy4gIFdlJ2xsIHB1dCBpbiB0aGUganVtcCwgc2V0CisrICAgICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcCB0byByaWdodCBhZnRlciBgYicsIGFuZCBsZWF2ZSBiZWhpbmQgdGhyZWUKKysgICAgICAgICAgICAgICAgIGJ5dGVzIHdoaWNoIHdlJ2xsIGZpbGwgaW4gd2hlbiB3ZSBnZXQgdG8gYWZ0ZXIgYGMnLiAgKi8KKysKKysgICAgICAgICAgICAgIGlmIChmaXh1cF9hbHRfanVtcCkKKysgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAoanVtcF9wYXN0X2FsdCwgZml4dXBfYWx0X2p1bXAsIGIpOworKworKyAgICAgICAgICAgICAgLyogTWFyayBhbmQgbGVhdmUgc3BhY2UgZm9yIGEganVtcCBhZnRlciB0aGlzIGFsdGVybmF0aXZlLAorKyAgICAgICAgICAgICAgICAgdG8gYmUgZmlsbGVkIGluIGxhdGVyIGVpdGhlciBieSBuZXh0IGFsdGVybmF0aXZlIG9yCisrICAgICAgICAgICAgICAgICB3aGVuIGtub3cgd2UncmUgYXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiBhbHRlcm5hdGl2ZXMuICAqLworKyAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAgPSBiOworKyAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IDA7CisrICAgICAgICAgICAgICBiZWdhbHQgPSBiOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAneyc6CisrICAgICAgICAgICAgICAvKiBJZiBceyBpcyBhIGxpdGVyYWwuICAqLworKyAgICAgICAgICAgICAgaWYgKCEoc3ludGF4ICYgUkVfSU5URVJWQUxTKQorKyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIGF0IGBceycgYW5kIGl0J3Mgbm90IHRoZSBvcGVuLWludGVydmFsCisrICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuICAqLworKwkJICB8fCAoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgIGhhbmRsZV9pbnRlcnZhbDoKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLyogSWYgZ290IGhlcmUsIHRoZW4gdGhlIHN5bnRheCBhbGxvd3MgaW50ZXJ2YWxzLiAgKi8KKysKKysgICAgICAgICAgICAgICAgLyogQXQgbGVhc3QgKG1vc3QpIHRoaXMgbWFueSBtYXRjaGVzIG11c3QgYmUgbWFkZS4gICovCisrICAgICAgICAgICAgICAgIGludCBsb3dlcl9ib3VuZCA9IC0xLCB1cHBlcl9ib3VuZCA9IC0xOworKworKwkJLyogUGxhY2UgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybiAoaS5lLiwganVzdCBhZnRlcgorKwkJICAgdGhlICd7JykgdG8gZ28gYmFjayB0byBpZiB0aGUgaW50ZXJ2YWwgaXMgaW52YWxpZC4gICovCisrCQljb25zdCBDSEFSX1QgKmJlZ19pbnRlcnZhbCA9IHA7CisrCisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpCisrCQkgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysKKysgICAgICAgICAgICAgICAgR0VUX1VOU0lHTkVEX05VTUJFUiAobG93ZXJfYm91bmQpOworKworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnLCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgR0VUX1VOU0lHTkVEX05VTUJFUiAodXBwZXJfYm91bmQpOworKwkJICAgIGlmICh1cHBlcl9ib3VuZCA8IDApCisrCQkgICAgICB1cHBlcl9ib3VuZCA9IFJFX0RVUF9NQVg7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgLyogSW50ZXJ2YWwgc3VjaCBhcyBgezF9JyA9PiBtYXRjaCBleGFjdGx5IG9uY2UuICovCisrICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQgPSBsb3dlcl9ib3VuZDsKKysKKysgICAgICAgICAgICAgICAgaWYgKCEgKDAgPD0gbG93ZXJfYm91bmQgJiYgbG93ZXJfYm91bmQgPD0gdXBwZXJfYm91bmQpKQorKwkJICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrCisrICAgICAgICAgICAgICAgIGlmICghKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisrICAgICAgICAgICAgICAgICAgeworKwkJICAgIGlmIChjICE9ICdcXCcgfHwgcCA9PSBwZW5kKQorKwkJICAgICAgZ290byBpbnZhbGlkX2ludGVydmFsOworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgaWYgKGMgIT0gJ30nKQorKwkJICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrCisrICAgICAgICAgICAgICAgIC8qIElmIGl0J3MgaW52YWxpZCB0byBoYXZlIG5vIHByZWNlZGluZyByZS4gICovCisrICAgICAgICAgICAgICAgIGlmICghbGFzdHN0YXJ0KQorKyAgICAgICAgICAgICAgICAgIHsKKysJCSAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX09QUworKwkJCSYmICEoc3ludGF4ICYgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpKQorKyAgICAgICAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0JBRFJQVCk7CisrICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOREVQX09QUykKKysgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgZ290byB1bmZldGNoX2ludGVydmFsOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogV2UganVzdCBwYXJzZWQgYSB2YWxpZCBpbnRlcnZhbC4gICovCisrCisrICAgICAgICAgICAgICAgIGlmIChSRV9EVVBfTUFYIDwgdXBwZXJfYm91bmQpCisrCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfQkFEQlIpOworKworKyAgICAgICAgICAgICAgICAvKiBJZiB0aGUgdXBwZXIgYm91bmQgaXMgemVybywgZG9uJ3Qgd2FudCB0byBzdWNjZWVkIGF0CisrICAgICAgICAgICAgICAgICAgIGFsbDsganVtcCBmcm9tIGBsYXN0c3RhcnQnIHRvIGBiICsgMycsIHdoaWNoIHdpbGwgYmUKKysJCSAgIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB3ZSBpbnNlcnQgdGhlIGp1bXAuICAqLworKwkJLyogaWZkZWYgV0NIQVIsICdiICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUnCisrCQkgICBpbnN0ZWFkIG9mICdiICsgMycuICAqLworKyAgICAgICAgICAgICAgICAgaWYgKHVwcGVyX2JvdW5kID09IDApCisrICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgICAgICAgSU5TRVJUX0pVTVAgKGp1bXAsIGxhc3RzdGFydCwgYiArIDEKKysJCQkJICArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgd2UgaGF2ZSBhIG5vbnRyaXZpYWwgaW50ZXJ2YWwuICBXaGVuCisrICAgICAgICAgICAgICAgICAgICB3ZSdyZSBhbGwgZG9uZSwgdGhlIHBhdHRlcm4gd2lsbCBsb29rIGxpa2U6CisrICAgICAgICAgICAgICAgICAgICAgIHNldF9udW1iZXJfYXQgPGp1bXAgY291bnQ+IDx1cHBlciBib3VuZD4KKysgICAgICAgICAgICAgICAgICAgICAgc2V0X251bWJlcl9hdCA8c3VjY2VlZF9uIGNvdW50PiA8bG93ZXIgYm91bmQ+CisrICAgICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRfbiA8YWZ0ZXIganVtcCBhZGRyPiA8c3VjY2VlZF9uIGNvdW50PgorKyAgICAgICAgICAgICAgICAgICAgICA8Ym9keSBvZiBsb29wPgorKyAgICAgICAgICAgICAgICAgICAgICBqdW1wX24gPHN1Y2NlZWRfbiBhZGRyPiA8anVtcCBjb3VudD4KKysgICAgICAgICAgICAgICAgICAgIChUaGUgdXBwZXIgYm91bmQgYW5kIGBqdW1wX24nIGFyZSBvbWl0dGVkIGlmCisrICAgICAgICAgICAgICAgICAgICBgdXBwZXJfYm91bmQnIGlzIDEsIHRob3VnaC4pICAqLworKyAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICB7IC8qIElmIHRoZSB1cHBlciBib3VuZCBpcyA+IDEsIHdlIG5lZWQgdG8gaW5zZXJ0CisrICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuYnl0ZXMgPSAyICsgNCAqIE9GRlNFVF9BRERSRVNTX1NJWkUgKworKwkJICAgICAgICh1cHBlcl9ib3VuZCA+IDEpICogKDIgKyA0ICogT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAobmJ5dGVzKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGxvd2VyIGJvdW5kIG9mIHRoZSBgc3VjY2VlZF9uJywgZXZlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIHRob3VnaCBpdCB3aWxsIGJlIHNldCBkdXJpbmcgbWF0Y2hpbmcgYnkgaXRzCisrICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW5kYW50IGBzZXRfbnVtYmVyX2F0JyAoaW5zZXJ0ZWQgbmV4dCksCisrICAgICAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBgcmVfY29tcGlsZV9mYXN0bWFwJyBuZWVkcyB0byBrbm93LgorKyAgICAgICAgICAgICAgICAgICAgICAgIEp1bXAgdG8gdGhlIGBqdW1wX24nIHdlIG1pZ2h0IGluc2VydCBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgICAgICAgSU5TRVJUX0pVTVAyIChzdWNjZWVkX24sIGxhc3RzdGFydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgKyAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUKKysJCQkJICAgKyAodXBwZXJfYm91bmQgPiAxKSAqICgxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUpCisrCQkJCSAgICwgbG93ZXJfYm91bmQpOworKyAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgIC8qIENvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgbG93ZXIgYm91bmQuICBJbnNlcnQKKysgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIGBzdWNjZWVkX24nLiAgVGhlIGA1JyBpcyB0aGUgbGFzdCB0d28KKysgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyBvZiB0aGlzIGBzZXRfbnVtYmVyX2F0JywgcGx1cyAzIGJ5dGVzIG9mCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBgc3VjY2VlZF9uJy4gICovCisrCQkgICAgIC8qIGlmZGVmIFdDSEFSLCBUaGUgJzErMipPRkZTRVRfQUREUkVTU19TSVpFJworKwkJCWlzIHRoZSAnc2V0X251bWJlcl9hdCcsIHBsdXMgJzErT0ZGU0VUX0FERFJFU1NfU0laRScKKysJCQlvZiB0aGUgZm9sbG93aW5nIGBzdWNjZWVkX24nLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICBQUkVGSVgoaW5zZXJ0X29wMikgKHNldF9udW1iZXJfYXQsIGxhc3RzdGFydCwgMQorKwkJCQkgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSwgbG93ZXJfYm91bmQsIGIpOworKyAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgIGlmICh1cHBlcl9ib3VuZCA+IDEpCisrICAgICAgICAgICAgICAgICAgICAgICB7IC8qIE1vcmUgdGhhbiBvbmUgcmVwZXRpdGlvbiBpcyBhbGxvd2VkLCBzbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgYSBiYWNrd2FyZCBqdW1wIHRvIHRoZSBgc3VjY2VlZF9uJworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHN0YXJ0cyB0aGlzIGludGVydmFsLgorKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHdlJ3ZlIHJlYWNoZWQgdGhpcyBkdXJpbmcgbWF0Y2hpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlJ2xsIGhhdmUgbWF0Y2hlZCB0aGUgaW50ZXJ2YWwgb25jZSwgc28KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcCBiYWNrIG9ubHkgYHVwcGVyX2JvdW5kIC0gMScgdGltZXMuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QMiAoanVtcF9uLCBiLCBsYXN0c3RhcnQKKysJCQkJICAgICAgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSArIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZCAtIDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGxvY2F0aW9uIHdlIHdhbnQgdG8gc2V0IGlzIHRoZSBzZWNvbmQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9mIHRoZSBganVtcF9uJzsgdGhhdCBpcyBgYi0yJyBhcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhYnNvbHV0ZSBhZGRyZXNzLiAgYGxhc3RzdGFydCcgd2lsbCBiZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYHNldF9udW1iZXJfYXQnIHdlJ3JlIGFib3V0IHRvIGluc2VydDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGxhc3RzdGFydCszJyB0aGUgbnVtYmVyIHRvIHNldCwgdGhlIHNvdXJjZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHJlbGF0aXZlIGFkZHJlc3MuICBCdXQgd2UgYXJlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlIHBhdHRlcm4gLS0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28gZXZlcnl0aGluZyBpcyBnZXR0aW5nIG1vdmVkIHVwIGJ5IDUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmNsdXNpb246IChiIC0gMikgLSAobGFzdHN0YXJ0ICsgMykgKyA1LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLmUuLCBiIC0gbGFzdHN0YXJ0LgorKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZSBpbnNlcnQgdGhpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIHRoYXQgaWYgd2UgZmFpbCBkdXJpbmcgbWF0Y2hpbmcsIHdlJ2xsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pdGlhbGl6ZSB0aGUgYm91bmRzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKGluc2VydF9vcDIpIChzZXRfbnVtYmVyX2F0LCBsYXN0c3RhcnQsCisrCQkJCQkgICAgIGIgLSBsYXN0c3RhcnQsCisrCQkJCQkgICAgIHVwcGVyX2JvdW5kIC0gMSwgYik7CisrICAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKwkJYnJlYWs7CisrCisrCSAgICAgIGludmFsaWRfaW50ZXJ2YWw6CisrCQlpZiAoIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkpCisrCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChwID09IHBlbmQgPyBSRUdfRUJSQUNFIDogUkVHX0JBREJSKTsKKysJICAgICAgdW5mZXRjaF9pbnRlcnZhbDoKKysJCS8qIE1hdGNoIHRoZSBjaGFyYWN0ZXJzIGFzIGxpdGVyYWxzLiAgKi8KKysJCXAgPSBiZWdfaW50ZXJ2YWw7CisrCQljID0gJ3snOworKwkJaWYgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykKKysJCSAgZ290byBub3JtYWxfY2hhcjsKKysJCWVsc2UKKysJCSAgZ290byBub3JtYWxfYmFja3NsYXNoOworKwkgICAgICB9CisrCisrI2lmZGVmIGVtYWNzCisrICAgICAgICAgICAgLyogVGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgdGhlIGJlZm9yZV9kb3QgYW5kIGFmdGVyX2RvdAorKyAgICAgICAgICAgICAgIG9wZXJhdG9ycy4gIHJtcyBzYXlzIHRoaXMgaXMgb2suICAtLWthcmwgICovCisrICAgICAgICAgICAgY2FzZSAnPSc6CisrICAgICAgICAgICAgICBCVUZfUFVTSCAoYXRfZG90KTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ3MnOgorKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgIEJVRl9QVVNIXzIgKHN5bnRheHNwZWMsIHN5bnRheF9zcGVjX2NvZGVbY10pOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnUyc6CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgQlVGX1BVU0hfMiAobm90c3ludGF4c3BlYywgc3ludGF4X3NwZWNfY29kZVtjXSk7CisrICAgICAgICAgICAgICBicmVhazsKKysjZW5kaWYgLyogZW1hY3MgKi8KKysKKysKKysgICAgICAgICAgICBjYXNlICd3JzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkY2hhcik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICdXJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChub3R3b3JkY2hhcik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICc8JzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRiZWcpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnPic6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkZW5kKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ2InOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGJvdW5kKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ0InOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAobm90d29yZGJvdW5kKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ2AnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAoYmVnYnVmKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ1wnJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGVuZGJ1Zik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6CisrICAgICAgICAgICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUkVGUykKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysgICAgICAgICAgICAgIGMxID0gYyAtICcwJzsKKysKKysgICAgICAgICAgICAgIGlmIChjMSA+IHJlZ251bSkKKysgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FU1VCUkVHKTsKKysKKysgICAgICAgICAgICAgIC8qIENhbid0IGJhY2sgcmVmZXJlbmNlIHRvIGEgc3ViZXhwcmVzc2lvbiBpZiBpbnNpZGUgb2YgaXQuICAqLworKyAgICAgICAgICAgICAgaWYgKGdyb3VwX2luX2NvbXBpbGVfc3RhY2sgKGNvbXBpbGVfc3RhY2ssIChyZWdudW1fdCkgYzEpKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIXzIgKGR1cGxpY2F0ZSwgYzEpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnKyc6CisrICAgICAgICAgICAgY2FzZSAnPyc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfQktfUExVU19RTSkKKysgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfcGx1czsKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgbm9ybWFsX2JhY2tzbGFzaDoKKysgICAgICAgICAgICAgIC8qIFlvdSBtaWdodCB0aGluayBpdCB3b3VsZCBiZSB1c2VmdWwgZm9yIFwgdG8gbWVhbgorKyAgICAgICAgICAgICAgICAgbm90IHRvIHRyYW5zbGF0ZTsgYnV0IGlmIHdlIGRvbid0IHRyYW5zbGF0ZSBpdAorKyAgICAgICAgICAgICAgICAgaXQgd2lsbCBuZXZlciBtYXRjaCBhbnl0aGluZy4gICovCisrICAgICAgICAgICAgICBjID0gVFJBTlNMQVRFIChjKTsKKysgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysKKysJZGVmYXVsdDoKKysgICAgICAgIC8qIEV4cGVjdHMgdGhlIGNoYXJhY3RlciBpbiBgYycuICAqLworKwlub3JtYWxfY2hhcjoKKysJICAgICAgLyogSWYgbm8gZXhhY3RuIGN1cnJlbnRseSBiZWluZyBidWlsdC4gICovCisrICAgICAgICAgIGlmICghcGVuZGluZ19leGFjdAorKyNpZmRlZiBXQ0hBUgorKwkgICAgICAvKiBJZiBsYXN0IGV4YWN0biBoYW5kbGUgYmluYXJ5KG9yIGNoYXJhY3RlcikgYW5kCisrCQkgbmV3IGV4YWN0biBoYW5kbGUgY2hhcmFjdGVyKG9yIGJpbmFyeSkuICAqLworKwkgICAgICB8fCBpc19leGFjdG5fYmluICE9IGlzX2JpbmFyeVtwIC0gMSAtIHBhdHRlcm5dCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAgICAgICAgICAgICAvKiBJZiBsYXN0IGV4YWN0biBub3QgYXQgY3VycmVudCBwb3NpdGlvbi4gICovCisrICAgICAgICAgICAgICB8fCBwZW5kaW5nX2V4YWN0ICsgKnBlbmRpbmdfZXhhY3QgKyAxICE9IGIKKysKKysgICAgICAgICAgICAgIC8qIFdlIGhhdmUgb25seSBvbmUgYnl0ZSBmb2xsb3dpbmcgdGhlIGV4YWN0biBmb3IgdGhlIGNvdW50LiAgKi8KKysJICAgICAgfHwgKnBlbmRpbmdfZXhhY3QgPT0gKDEgPDwgQllURVdJRFRIKSAtIDEKKysKKysgICAgICAgICAgICAgIC8qIElmIGZvbGxvd2VkIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICB8fCAqcCA9PSAnKicgfHwgKnAgPT0gJ14nCisrCSAgICAgIHx8ICgoc3ludGF4ICYgUkVfQktfUExVU19RTSkKKysJCSAgPyAqcCA9PSAnXFwnICYmIChwWzFdID09ICcrJyB8fCBwWzFdID09ICc/JykKKysJCSAgOiAoKnAgPT0gJysnIHx8ICpwID09ICc/JykpCisrCSAgICAgIHx8ICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKQorKyAgICAgICAgICAgICAgICAgICYmICgoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKQorKwkJICAgICAgPyAqcCA9PSAneycKKysgICAgICAgICAgICAgICAgICAgICAgOiAocFswXSA9PSAnXFwnICYmIHBbMV0gPT0gJ3snKSkpKQorKwkgICAgeworKwkgICAgICAvKiBTdGFydCBidWlsZGluZyBhIG5ldyBleGFjdG4uICAqLworKworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysKKysjaWZkZWYgV0NIQVIKKysJICAgICAgLyogSXMgdGhpcyBleGFjdG4gYmluYXJ5IGRhdGEgb3IgY2hhcmFjdGVyPyAqLworKwkgICAgICBpc19leGFjdG5fYmluID0gaXNfYmluYXJ5W3AgLSAxIC0gcGF0dGVybl07CisrCSAgICAgIGlmIChpc19leGFjdG5fYmluKQorKwkJICBCVUZfUFVTSF8yIChleGFjdG5fYmluLCAwKTsKKysJICAgICAgZWxzZQorKwkJICBCVUZfUFVTSF8yIChleGFjdG4sIDApOworKyNlbHNlCisrCSAgICAgIEJVRl9QVVNIXzIgKGV4YWN0biwgMCk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCSAgICAgIHBlbmRpbmdfZXhhY3QgPSBiIC0gMTsKKysgICAgICAgICAgICB9CisrCisrCSAgQlVGX1BVU0ggKGMpOworKyAgICAgICAgICAoKnBlbmRpbmdfZXhhY3QpKys7CisrCSAgYnJlYWs7CisrICAgICAgICB9IC8qIHN3aXRjaCAoYykgKi8KKysgICAgfSAvKiB3aGlsZSBwICE9IHBlbmQgKi8KKysKKysKKysgIC8qIFRocm91Z2ggdGhlIHBhdHRlcm4gbm93LiAgKi8KKysKKysgIGlmIChmaXh1cF9hbHRfanVtcCkKKysgICAgU1RPUkVfSlVNUCAoanVtcF9wYXN0X2FsdCwgZml4dXBfYWx0X2p1bXAsIGIpOworKworKyAgaWYgKCFDT01QSUxFX1NUQUNLX0VNUFRZKQorKyAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VQQVJFTik7CisrCisrICAvKiBJZiB3ZSBkb24ndCB3YW50IGJhY2t0cmFja2luZywgZm9yY2Ugc3VjY2VzcworKyAgICAgdGhlIGZpcnN0IHRpbWUgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrICBpZiAoc3ludGF4ICYgUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HKQorKyAgICBCVUZfUFVTSCAoc3VjY2VlZCk7CisrCisrI2lmZGVmIFdDSEFSCisrICBmcmVlIChwYXR0ZXJuKTsKKysgIGZyZWUgKG1ic19vZmZzZXQpOworKyAgZnJlZSAoaXNfYmluYXJ5KTsKKysjZW5kaWYKKysgIGZyZWUgKGNvbXBpbGVfc3RhY2suc3RhY2spOworKworKyAgLyogV2UgaGF2ZSBzdWNjZWVkZWQ7IHNldCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgYnVmcC0+dXNlZCA9ICh1aW50cHRyX3QpIGIgLSAodWludHB0cl90KSBDT01QSUxFRF9CVUZGRVJfVkFSOworKyNlbHNlCisrICBidWZwLT51c2VkID0gYiAtIGJ1ZnAtPmJ1ZmZlcjsKKysjZW5kaWYKKysKKysjaWZkZWYgREVCVUcKKysgIGlmIChkZWJ1ZykKKysgICAgeworKyAgICAgIERFQlVHX1BSSU5UMSAoIlxuQ29tcGlsZWQgcGF0dGVybjogXG4iKTsKKysgICAgICBQUkVGSVgocHJpbnRfY29tcGlsZWRfcGF0dGVybikgKGJ1ZnApOworKyAgICB9CisrI2VuZGlmIC8qIERFQlVHICovCisrCisrI2lmbmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysgIC8qIEluaXRpYWxpemUgdGhlIGZhaWx1cmUgc3RhY2sgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgc3RhY2suICBUaGlzCisrICAgICBpc24ndCBuZWNlc3NhcnkgdW5sZXNzIHdlJ3JlIHRyeWluZyB0byBhdm9pZCBjYWxsaW5nIGFsbG9jYSBpbgorKyAgICAgdGhlIHNlYXJjaCBhbmQgbWF0Y2ggcm91dGluZXMuICAqLworKyAgeworKyAgICBpbnQgbnVtX3JlZ3MgPSBidWZwLT5yZV9uc3ViICsgMTsKKysKKysgICAgLyogU2luY2UgRE9VQkxFX0ZBSUxfU1RBQ0sgcmVmdXNlcyB0byBkb3VibGUgb25seSBpZiB0aGUgY3VycmVudCBzaXplCisrICAgICAgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiByZV9tYXhfZmFpbHVyZXMsIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHN0YWNrCisrICAgICAgIGlzIDIgKiByZV9tYXhfZmFpbHVyZXMgZmFpbHVyZSBwb2ludHMuICAqLworKyAgICBpZiAoZmFpbF9zdGFjay5zaXplIDwgKDIgKiByZV9tYXhfZmFpbHVyZXMgKiBNQVhfRkFJTFVSRV9JVEVNUykpCisrICAgICAgeworKwlmYWlsX3N0YWNrLnNpemUgPSAoMiAqIHJlX21heF9mYWlsdXJlcyAqIE1BWF9GQUlMVVJFX0lURU1TKTsKKysKKysjIGlmZGVmIGVtYWNzCisrCWlmICghIGZhaWxfc3RhY2suc3RhY2spCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIHhtYWxsb2MgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpOworKwllbHNlCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIHhyZWFsbG9jIChmYWlsX3N0YWNrLnN0YWNrLAorKwkJCQkgICAgIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpKTsKKysjIGVsc2UgLyogbm90IGVtYWNzICovCisrCWlmICghIGZhaWxfc3RhY2suc3RhY2spCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIG1hbGxvYyAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKTsKKysJZWxzZQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSByZWFsbG9jIChmYWlsX3N0YWNrLnN0YWNrLAorKwkJCQkJICAgIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSkpOworKyMgZW5kaWYgLyogbm90IGVtYWNzICovCisrICAgICAgfQorKworKyAgIFBSRUZJWChyZWdleF9ncm93X3JlZ2lzdGVycykgKG51bV9yZWdzKTsKKysgIH0KKysjZW5kaWYgLyogbm90IE1BVENIX01BWV9BTExPQ0FURSAqLworKworKyAgcmV0dXJuIFJFR19OT0VSUk9SOworK30gLyogcmVnZXhfY29tcGlsZSAqLworKworKy8qIFN1YnJvdXRpbmVzIGZvciBgcmVnZXhfY29tcGlsZScuICAqLworKworKy8qIFN0b3JlIE9QIGF0IExPQyBmb2xsb3dlZCBieSB0d28tYnl0ZSBpbnRlZ2VyIHBhcmFtZXRlciBBUkcuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKHN0b3JlX29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcpCisreworKyAgKmxvYyA9IChVQ0hBUl9UKSBvcDsKKysgIFNUT1JFX05VTUJFUiAobG9jICsgMSwgYXJnKTsKKyt9CisrCisrCisrLyogTGlrZSBgc3RvcmVfb3AxJywgYnV0IGZvciB0d28gdHdvLWJ5dGUgcGFyYW1ldGVycyBBUkcxIGFuZCBBUkcyLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChzdG9yZV9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnMSwgaW50IGFyZzIpCisreworKyAgKmxvYyA9IChVQ0hBUl9UKSBvcDsKKysgIFNUT1JFX05VTUJFUiAobG9jICsgMSwgYXJnMSk7CisrICBTVE9SRV9OVU1CRVIgKGxvYyArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFLCBhcmcyKTsKKyt9CisrCisrCisrLyogQ29weSB0aGUgYnl0ZXMgZnJvbSBMT0MgdG8gRU5EIHRvIG9wZW4gdXAgdGhyZWUgYnl0ZXMgb2Ygc3BhY2UgYXQgTE9DCisrICAgZm9yIE9QIGZvbGxvd2VkIGJ5IHR3by1ieXRlIGludGVnZXIgcGFyYW1ldGVyIEFSRy4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoaW5zZXJ0X29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcsIFVDSEFSX1QgKmVuZCkKKyt7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZnJvbSA9IGVuZDsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnB0byA9IGVuZCArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgd2hpbGUgKHBmcm9tICE9IGxvYykKKysgICAgKi0tcHRvID0gKi0tcGZyb207CisrCisrICBQUkVGSVgoc3RvcmVfb3AxKSAob3AsIGxvYywgYXJnKTsKKyt9CisrCisrCisrLyogTGlrZSBgaW5zZXJ0X29wMScsIGJ1dCBmb3IgdHdvIHR3by1ieXRlIHBhcmFtZXRlcnMgQVJHMSBhbmQgQVJHMi4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoaW5zZXJ0X29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcxLAorKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZzIsIFVDSEFSX1QgKmVuZCkKKyt7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZnJvbSA9IGVuZDsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnB0byA9IGVuZCArIDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgIHdoaWxlIChwZnJvbSAhPSBsb2MpCisrICAgICotLXB0byA9ICotLXBmcm9tOworKworKyAgUFJFRklYKHN0b3JlX29wMikgKG9wLCBsb2MsIGFyZzEsIGFyZzIpOworK30KKysKKysKKysvKiBQIHBvaW50cyB0byBqdXN0IGFmdGVyIGEgXiBpbiBQQVRURVJOLiAgUmV0dXJuIHRydWUgaWYgdGhhdCBeIGNvbWVzCisrICAgYWZ0ZXIgYW4gYWx0ZXJuYXRpdmUgb3IgYSBiZWdpbi1zdWJleHByZXNzaW9uLiAgV2UgYXNzdW1lIHRoZXJlIGlzIGF0CisrICAgbGVhc3Qgb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIF4uICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGF0X2JlZ2xpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnBhdHRlcm4sIGNvbnN0IENIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCisreworKyAgY29uc3QgQ0hBUl9UICpwcmV2ID0gcCAtIDI7CisrICBib29sZWFuIHByZXZfcHJldl9iYWNrc2xhc2ggPSBwcmV2ID4gcGF0dGVybiAmJiBwcmV2Wy0xXSA9PSAnXFwnOworKworKyAgcmV0dXJuCisrICAgICAgIC8qIEFmdGVyIGEgc3ViZXhwcmVzc2lvbj8gICovCisrICAgICAgICgqcHJldiA9PSAnKCcgJiYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUyB8fCBwcmV2X3ByZXZfYmFja3NsYXNoKSkKKysgICAgICAgLyogQWZ0ZXIgYW4gYWx0ZXJuYXRpdmU/ICAqLworKyAgICB8fCAoKnByZXYgPT0gJ3wnICYmIChzeW50YXggJiBSRV9OT19CS19WQkFSIHx8IHByZXZfcHJldl9iYWNrc2xhc2gpKTsKKyt9CisrCisrCisrLyogVGhlIGR1YWwgb2YgYXRfYmVnbGluZV9sb2NfcC4gIFRoaXMgb25lIGlzIGZvciAkLiAgV2UgYXNzdW1lIHRoZXJlIGlzCisrICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBhZnRlciB0aGUgJCwgaS5lLiwgYFAgPCBQRU5EJy4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoYXRfZW5kbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcCwgY29uc3QgQ0hBUl9UICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCkKKyt7CisrICBjb25zdCBDSEFSX1QgKm5leHQgPSBwOworKyAgYm9vbGVhbiBuZXh0X2JhY2tzbGFzaCA9ICpuZXh0ID09ICdcXCc7CisrICBjb25zdCBDSEFSX1QgKm5leHRfbmV4dCA9IHAgKyAxIDwgcGVuZCA/IHAgKyAxIDogMDsKKysKKysgIHJldHVybgorKyAgICAgICAvKiBCZWZvcmUgYSBzdWJleHByZXNzaW9uPyAgKi8KKysgICAgICAgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUyA/ICpuZXh0ID09ICcpJworKyAgICAgICAgOiBuZXh0X2JhY2tzbGFzaCAmJiBuZXh0X25leHQgJiYgKm5leHRfbmV4dCA9PSAnKScpCisrICAgICAgIC8qIEJlZm9yZSBhbiBhbHRlcm5hdGl2ZT8gICovCisrICAgIHx8IChzeW50YXggJiBSRV9OT19CS19WQkFSID8gKm5leHQgPT0gJ3wnCisrICAgICAgICA6IG5leHRfYmFja3NsYXNoICYmIG5leHRfbmV4dCAmJiAqbmV4dF9uZXh0ID09ICd8Jyk7CisrfQorKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogUmV0dXJucyB0cnVlIGlmIFJFR05VTSBpcyBpbiBvbmUgb2YgQ09NUElMRV9TVEFDSydzIGVsZW1lbnRzIGFuZAorKyAgIGZhbHNlIGlmIGl0J3Mgbm90LiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK2dyb3VwX2luX2NvbXBpbGVfc3RhY2sgKGNvbXBpbGVfc3RhY2tfdHlwZSBjb21waWxlX3N0YWNrLCByZWdudW1fdCByZWdudW0pCisreworKyAgaW50IHRoaXNfZWxlbWVudDsKKysKKysgIGZvciAodGhpc19lbGVtZW50ID0gY29tcGlsZV9zdGFjay5hdmFpbCAtIDE7CisrICAgICAgIHRoaXNfZWxlbWVudCA+PSAwOworKyAgICAgICB0aGlzX2VsZW1lbnQtLSkKKysgICAgaWYgKGNvbXBpbGVfc3RhY2suc3RhY2tbdGhpc19lbGVtZW50XS5yZWdudW0gPT0gcmVnbnVtKQorKyAgICAgIHJldHVybiB0cnVlOworKworKyAgcmV0dXJuIGZhbHNlOworK30KKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyNpZmRlZiBXQ0hBUgorKy8qIFRoaXMgaW5zZXJ0IHNwYWNlLCB3aGljaCBzaXplIGlzICJudW0iLCBpbnRvIHRoZSBwYXR0ZXJuIGF0ICJsb2MiLgorKyAgICJlbmQiIG11c3QgcG9pbnQgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gICovCisrc3RhdGljIHZvaWQKKytpbnNlcnRfc3BhY2UgKGludCBudW0sIENIQVJfVCAqbG9jLCBDSEFSX1QgKmVuZCkKKyt7CisrICByZWdpc3RlciBDSEFSX1QgKnB0byA9IGVuZDsKKysgIHJlZ2lzdGVyIENIQVJfVCAqcGZyb20gPSBlbmQgLSBudW07CisrCisrICB3aGlsZSAocGZyb20gPj0gbG9jKQorKyAgICAqcHRvLS0gPSAqcGZyb20tLTsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrI2lmZGVmIFdDSEFSCisrc3RhdGljIHJlZ19lcnJjb2RlX3QKKyt3Y3NfY29tcGlsZV9yYW5nZSAoQ0hBUl9UIHJhbmdlX3N0YXJ0X2NoYXIsIGNvbnN0IENIQVJfVCAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnBlbmQsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgQ0hBUl9UICpiLCBDSEFSX1QgKmNoYXJfc2V0KQorK3sKKysgIGNvbnN0IENIQVJfVCAqcCA9ICpwX3B0cjsKKysgIENIQVJfVCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrIyBpZmRlZiBfTElCQworKyAgdWludDMyX3QgbnJ1bGVzOworKyAgdWludDMyX3Qgc3RhcnRfdmFsLCBlbmRfdmFsOworKyMgZW5kaWYKKysgIGlmIChwID09IHBlbmQpCisrICAgIHJldHVybiBSRUdfRVJBTkdFOworKworKyMgaWZkZWYgX0xJQkMKKysgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrICBpZiAobnJ1bGVzICE9IDApCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IGNoYXIgKikgX05MX0NVUlJFTlQoTENfQ09MTEFURSwKKysJCQkJCQkgICAgICAgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKysgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKyAgICAgIGlmIChyYW5nZV9zdGFydF9jaGFyIDwgLTEpCisrCXsKKysJICAvKiByYW5nZV9zdGFydCBpcyBhIGNvbGxhdGluZyBzeW1ib2wuICAqLworKwkgIGludDMyX3QgKndleHRyYTsKKysJICAvKiBSZXRyZWl2ZSB0aGUgaW5kZXggYW5kIGdldCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworKwkgIHdleHRyYSA9IChpbnQzMl90KikoZXh0cmEgKyBjaGFyX3NldFstcmFuZ2Vfc3RhcnRfY2hhcl0pOworKwkgIHN0YXJ0X3ZhbCA9IHdleHRyYVsxICsgKndleHRyYV07CisrCX0KKysgICAgICBlbHNlCisrCXN0YXJ0X3ZhbCA9IGNvbGxzZXFfdGFibGVfbG9va3VwKGNvbGxzZXEsIFRSQU5TTEFURShyYW5nZV9zdGFydF9jaGFyKSk7CisrCisrICAgICAgZW5kX3ZhbCA9IGNvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2VxLCBUUkFOU0xBVEUgKHBbMF0pKTsKKysKKysgICAgICAvKiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHJhbmdlIGlzIGVtcHR5IGFuZCB0aGUgc3ludGF4IHByb2hpYml0cworKwkgdGhpcy4gICovCisrICAgICAgcmV0ID0gKChzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMpCisrCSAgICAgJiYgKHN0YXJ0X3ZhbCA+IGVuZF92YWwpKT8gUkVHX0VSQU5HRSA6IFJFR19OT0VSUk9SOworKworKyAgICAgIC8qIEluc2VydCBzcGFjZSB0byB0aGUgZW5kIG9mIHRoZSBjaGFyX3Jhbmdlcy4gICovCisrICAgICAgaW5zZXJ0X3NwYWNlKDIsIGIgLSBjaGFyX3NldFs1XSAtIDIsIGIgLSAxKTsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDIpID0gKHdjaGFyX3Qpc3RhcnRfdmFsOworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMSkgPSAod2NoYXJfdCllbmRfdmFsOworKyAgICAgIGNoYXJfc2V0WzRdKys7IC8qIHJhbmdlc19pbmRleCAqLworKyAgICB9CisrICBlbHNlCisrIyBlbmRpZgorKyAgICB7CisrICAgICAgcmFuZ2Vfc3RhcnQgPSAocmFuZ2Vfc3RhcnRfY2hhciA+PSAwKT8gVFJBTlNMQVRFIChyYW5nZV9zdGFydF9jaGFyKToKKysJcmFuZ2Vfc3RhcnRfY2hhcjsKKysgICAgICByYW5nZV9lbmQgPSBUUkFOU0xBVEUgKHBbMF0pOworKyAgICAgIC8qIFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkgYW5kIHRoZSBzeW50YXggcHJvaGliaXRzCisrCSB0aGlzLiAgKi8KKysgICAgICByZXQgPSAoKHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUykKKysJICAgICAmJiAocmFuZ2Vfc3RhcnQgPiByYW5nZV9lbmQpKT8gUkVHX0VSQU5HRSA6IFJFR19OT0VSUk9SOworKworKyAgICAgIC8qIEluc2VydCBzcGFjZSB0byB0aGUgZW5kIG9mIHRoZSBjaGFyX3Jhbmdlcy4gICovCisrICAgICAgaW5zZXJ0X3NwYWNlKDIsIGIgLSBjaGFyX3NldFs1XSAtIDIsIGIgLSAxKTsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDIpID0gcmFuZ2Vfc3RhcnQ7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAxKSA9IHJhbmdlX2VuZDsKKysgICAgICBjaGFyX3NldFs0XSsrOyAvKiByYW5nZXNfaW5kZXggKi8KKysgICAgfQorKyAgLyogSGF2ZSB0byBpbmNyZW1lbnQgdGhlIHBvaW50ZXIgaW50byB0aGUgcGF0dGVybiBzdHJpbmcsIHNvIHRoZQorKyAgICAgY2FsbGVyIGlzbid0IHN0aWxsIGF0IHRoZSBlbmRpbmcgY2hhcmFjdGVyLiAgKi8KKysgICgqcF9wdHIpKys7CisrCisrICByZXR1cm4gcmV0OworK30KKysjZWxzZSAvKiBCWVRFICovCisrLyogUmVhZCB0aGUgZW5kaW5nIGNoYXJhY3RlciBvZiBhIHJhbmdlIChpbiBhIGJyYWNrZXQgZXhwcmVzc2lvbikgZnJvbSB0aGUKKysgICB1bmNvbXBpbGVkIHBhdHRlcm4gKlBfUFRSICh3aGljaCBlbmRzIGF0IFBFTkQpLiAgV2UgYXNzdW1lIHRoZQorKyAgIHN0YXJ0aW5nIGNoYXJhY3RlciBpcyBpbiBgUFstMl0nLiAgKGBQWy0xXScgaXMgdGhlIGNoYXJhY3RlciBgLScuKQorKyAgIFRoZW4gd2Ugc2V0IHRoZSB0cmFuc2xhdGlvbiBvZiBhbGwgYml0cyBiZXR3ZWVuIHRoZSBzdGFydGluZyBhbmQKKysgICBlbmRpbmcgY2hhcmFjdGVycyAoaW5jbHVzaXZlKSBpbiB0aGUgY29tcGlsZWQgcGF0dGVybiBCLgorKworKyAgIFJldHVybiBhbiBlcnJvciBjb2RlLgorKworKyAgIFdlIHVzZSB0aGVzZSBzaG9ydCB2YXJpYWJsZSBuYW1lcyBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIG1hY3JvcyBhcworKyAgIGByZWdleF9jb21waWxlJyBpdHNlbGYuICAqLworKworK3N0YXRpYyByZWdfZXJyY29kZV90CisrYnl0ZV9jb21waWxlX3JhbmdlICh1bnNpZ25lZCBpbnQgcmFuZ2Vfc3RhcnRfY2hhciwgY29uc3QgY2hhciAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGVuZCwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgdW5zaWduZWQgY2hhciAqYikKKyt7CisrICB1bnNpZ25lZCB0aGlzX2NoYXI7CisrICBjb25zdCBjaGFyICpwID0gKnBfcHRyOworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrIyBpZiBfTElCQworKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbHNlcTsKKysgIHVuc2lnbmVkIGludCBzdGFydF9jb2xzZXE7CisrICB1bnNpZ25lZCBpbnQgZW5kX2NvbHNlcTsKKysjIGVsc2UKKysgIHVuc2lnbmVkIGVuZF9jaGFyOworKyMgZW5kaWYKKysKKysgIGlmIChwID09IHBlbmQpCisrICAgIHJldHVybiBSRUdfRVJBTkdFOworKworKyAgLyogSGF2ZSB0byBpbmNyZW1lbnQgdGhlIHBvaW50ZXIgaW50byB0aGUgcGF0dGVybiBzdHJpbmcsIHNvIHRoZQorKyAgICAgY2FsbGVyIGlzbid0IHN0aWxsIGF0IHRoZSBlbmRpbmcgY2hhcmFjdGVyLiAgKi8KKysgICgqcF9wdHIpKys7CisrCisrICAvKiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHJhbmdlIGlzIGVtcHR5IGFuZCB0aGUgc3ludGF4IHByb2hpYml0cyB0aGlzLiAgKi8KKysgIHJldCA9IHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUyA/IFJFR19FUkFOR0UgOiBSRUdfTk9FUlJPUjsKKysKKysjIGlmIF9MSUJDCisrICBjb2xsc2VxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkJIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisrCisrICBzdGFydF9jb2xzZXEgPSBjb2xsc2VxWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKHJhbmdlX3N0YXJ0X2NoYXIpXTsKKysgIGVuZF9jb2xzZXEgPSBjb2xsc2VxWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKHBbMF0pXTsKKysgIGZvciAodGhpc19jaGFyID0gMDsgdGhpc19jaGFyIDw9ICh1bnNpZ25lZCBjaGFyKSAtMTsgKyt0aGlzX2NoYXIpCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBpbnQgdGhpc19jb2xzZXEgPSBjb2xsc2VxWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKHRoaXNfY2hhcildOworKworKyAgICAgIGlmIChzdGFydF9jb2xzZXEgPD0gdGhpc19jb2xzZXEgJiYgdGhpc19jb2xzZXEgPD0gZW5kX2NvbHNlcSkKKysJeworKwkgIFNFVF9MSVNUX0JJVCAoVFJBTlNMQVRFICh0aGlzX2NoYXIpKTsKKysJICByZXQgPSBSRUdfTk9FUlJPUjsKKysJfQorKyAgICB9CisrIyBlbHNlCisrICAvKiBIZXJlIHdlIHNlZSB3aHkgYHRoaXNfY2hhcicgaGFzIHRvIGJlIGxhcmdlciB0aGFuIGFuIGB1bnNpZ25lZAorKyAgICAgY2hhcicgLS0gd2Ugd291bGQgb3RoZXJ3aXNlIGdvIGludG8gYW4gaW5maW5pdGUgbG9vcCwgc2luY2UgYWxsCisrICAgICBjaGFyYWN0ZXJzIDw9IDB4ZmYuICAqLworKyAgcmFuZ2Vfc3RhcnRfY2hhciA9IFRSQU5TTEFURSAocmFuZ2Vfc3RhcnRfY2hhcik7CisrICAvKiBUUkFOU0xBVEUocFswXSkgaXMgY2FzdGVkIHRvIGNoYXIgKG5vdCB1bnNpZ25lZCBjaGFyKSBpbiBUUkFOU0xBVEUsCisrICAgICBhbmQgc29tZSBjb21waWxlcnMgY2FzdCBpdCB0byBpbnQgaW1wbGljaXRseSwgc28gZm9sbG93aW5nIGZvcl9sb29wCisrICAgICBtYXkgZmFsbCB0byAoYWxtb3N0KSBpbmZpbml0ZSBsb29wLgorKyAgICAgZS5nLiBJZiB0cmFuc2xhdGVbcFswXV0gPSAweGZmLCBlbmRfY2hhciBtYXkgZXF1YWxzIHRvIDB4ZmZmZmZmZmYuCisrICAgICBUbyBhdm9pZCB0aGlzLCB3ZSBjYXN0IHBbMF0gdG8gdW5zaWduZWQgaW50IGFuZCB0cnVuY2F0ZSBpdC4gICovCisrICBlbmRfY2hhciA9ICgodW5zaWduZWQpVFJBTlNMQVRFKHBbMF0pICYgKCgxIDw8IEJZVEVXSURUSCkgLSAxKSk7CisrCisrICBmb3IgKHRoaXNfY2hhciA9IHJhbmdlX3N0YXJ0X2NoYXI7IHRoaXNfY2hhciA8PSBlbmRfY2hhcjsgKyt0aGlzX2NoYXIpCisrICAgIHsKKysgICAgICBTRVRfTElTVF9CSVQgKFRSQU5TTEFURSAodGhpc19jaGFyKSk7CisrICAgICAgcmV0ID0gUkVHX05PRVJST1I7CisrICAgIH0KKysjIGVuZGlmCisrCisrICByZXR1cm4gcmV0OworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysMCisrLyogcmVfY29tcGlsZV9mYXN0bWFwIGNvbXB1dGVzIGEgYGBmYXN0bWFwJycgZm9yIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluCisrICAgQlVGUC4gIEEgZmFzdG1hcCByZWNvcmRzIHdoaWNoIG9mIHRoZSAoMSA8PCBCWVRFV0lEVEgpIHBvc3NpYmxlCisrICAgY2hhcmFjdGVycyBjYW4gc3RhcnQgYSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuLiAgVGhpcyBmYXN0bWFwCisrICAgaXMgdXNlZCBieSByZV9zZWFyY2ggdG8gc2tpcCBxdWlja2x5IG92ZXIgaW1wb3NzaWJsZSBzdGFydGluZyBwb2ludHMuCisrCisrICAgVGhlIGNhbGxlciBtdXN0IHN1cHBseSB0aGUgYWRkcmVzcyBvZiBhICgxIDw8IEJZVEVXSURUSCktYnl0ZSBkYXRhCisrICAgYXJlYSBhcyBCVUZQLT5mYXN0bWFwLgorKworKyAgIFdlIHNldCB0aGUgYGZhc3RtYXAnLCBgZmFzdG1hcF9hY2N1cmF0ZScsIGFuZCBgY2FuX2JlX251bGwnIGZpZWxkcyBpbgorKyAgIHRoZSBwYXR0ZXJuIGJ1ZmZlci4KKysKKysgICBSZXR1cm5zIDAgaWYgd2Ugc3VjY2VlZCwgLTIgaWYgYW4gaW50ZXJuYWwgZXJyb3IuICAgKi8KKysKKysjaWZkZWYgV0NIQVIKKysvKiBsb2NhbCBmdW5jdGlvbiBmb3IgcmVfY29tcGlsZV9mYXN0bWFwLgorKyAgIHRydW5jYXRlIHdjaGFyX3QgY2hhcmFjdGVyIHRvIGNoYXIuICAqLworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHRydW5jYXRlX3djaGFyIChDSEFSX1QgYyk7CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIKKyt0cnVuY2F0ZV93Y2hhciAoQ0hBUl9UIGMpCisreworKyAgdW5zaWduZWQgY2hhciBidWZbTUJfQ1VSX01BWF07CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrICBpbnQgcmV0dmFsOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAoc3RhdGUpKTsKKysjIGlmZGVmIF9MSUJDCisrICByZXR2YWwgPSBfX3djcnRvbWIgKGJ1ZiwgYywgJnN0YXRlKTsKKysjIGVsc2UKKysgIHJldHZhbCA9IHdjcnRvbWIgKGJ1ZiwgYywgJnN0YXRlKTsKKysjIGVuZGlmCisrICByZXR1cm4gcmV0dmFsID4gMCA/IGJ1ZlswXSA6ICh1bnNpZ25lZCBjaGFyKSBjOworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKytzdGF0aWMgaW50CisrUFJFRklYKHJlX2NvbXBpbGVfZmFzdG1hcCkgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICBpbnQgaiwgazsKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrICBQUkVGSVgoZmFpbF9zdGFja190eXBlKSBmYWlsX3N0YWNrOworKyNlbmRpZgorKyNpZm5kZWYgUkVHRVhfTUFMTE9DCisrICBjaGFyICpkZXN0aW5hdGlvbjsKKysjZW5kaWYKKysKKysgIHJlZ2lzdGVyIGNoYXIgKmZhc3RtYXAgPSBidWZwLT5mYXN0bWFwOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogV2UgbmVlZCB0byBjYXN0IHBhdHRlcm4gdG8gKHdjaGFyX3QqKSwgYmVjYXVzZSB3ZSBjYXN0ZWQgdGhpcyBjb21waWxlZAorKyAgICAgcGF0dGVybiB0byAoY2hhciopIGluIHJlZ2V4X2NvbXBpbGUuICAqLworKyAgVUNIQVJfVCAqcGF0dGVybiA9IChVQ0hBUl9UKilidWZwLT5idWZmZXI7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kID0gKFVDSEFSX1QqKSAoYnVmcC0+YnVmZmVyICsgYnVmcC0+dXNlZCk7CisrI2Vsc2UgLyogQllURSAqLworKyAgVUNIQVJfVCAqcGF0dGVybiA9IGJ1ZnAtPmJ1ZmZlcjsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQgPSBwYXR0ZXJuICsgYnVmcC0+dXNlZDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgIFVDSEFSX1QgKnAgPSBwYXR0ZXJuOworKworKyNpZmRlZiBSRUxfQUxMT0MKKysgIC8qIFRoaXMgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGZhaWx1cmUgc3RhY2ssIHdoZW4KKysgICAgIGl0IGlzIGFsbG9jYXRlZCByZWxvY2F0YWJseS4gICovCisrICBmYWlsX3N0YWNrX2VsdF90ICpmYWlsdXJlX3N0YWNrX3B0cjsKKysjZW5kaWYKKysKKysgIC8qIEFzc3VtZSB0aGF0IGVhY2ggcGF0aCB0aHJvdWdoIHRoZSBwYXR0ZXJuIGNhbiBiZSBudWxsIHVudGlsCisrICAgICBwcm92ZW4gb3RoZXJ3aXNlLiAgV2Ugc2V0IHRoaXMgZmFsc2UgYXQgdGhlIGJvdHRvbSBvZiBzd2l0Y2gKKysgICAgIHN0YXRlbWVudCwgdG8gd2hpY2ggd2UgZ2V0IG9ubHkgaWYgYSBwYXJ0aWN1bGFyIHBhdGggZG9lc24ndAorKyAgICAgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gICovCisrICBib29sZWFuIHBhdGhfY2FuX2JlX251bGwgPSB0cnVlOworKworKyAgLyogV2UgYXJlbid0IGRvaW5nIGEgYHN1Y2NlZWRfbicgdG8gYmVnaW4gd2l0aC4gICovCisrICBib29sZWFuIHN1Y2NlZWRfbl9wID0gZmFsc2U7CisrCisrICBhc3NlcnQgKGZhc3RtYXAgIT0gTlVMTCAmJiBwICE9IE5VTEwpOworKworKyAgSU5JVF9GQUlMX1NUQUNLICgpOworKyAgYnplcm8gKGZhc3RtYXAsIDEgPDwgQllURVdJRFRIKTsgIC8qIEFzc3VtZSBub3RoaW5nJ3MgdmFsaWQuICAqLworKyAgYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDE7CSAgICAvKiBJdCB3aWxsIGJlIHdoZW4gd2UncmUgZG9uZS4gICovCisrICBidWZwLT5jYW5fYmVfbnVsbCA9IDA7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChwID09IHBlbmQgfHwgKnAgPT0gKFVDSEFSX1QpIHN1Y2NlZWQpCisrCXsKKysJICAvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIChlZmZlY3RpdmUpIGVuZCBvZiBwYXR0ZXJuLiAgKi8KKysJICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpCisrCSAgICB7CisrCSAgICAgIGJ1ZnAtPmNhbl9iZV9udWxsIHw9IHBhdGhfY2FuX2JlX251bGw7CisrCisrCSAgICAgIC8qIFJlc2V0IGZvciBuZXh0IHBhdGguICAqLworKwkgICAgICBwYXRoX2Nhbl9iZV9udWxsID0gdHJ1ZTsKKysKKysJICAgICAgcCA9IGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXS5wb2ludGVyOworKworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICBicmVhazsKKysJfQorKworKyAgICAgIC8qIFdlIHNob3VsZCBuZXZlciBiZSBhYm91dCB0byBnbyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gICovCisrICAgICAgYXNzZXJ0IChwIDwgcGVuZCk7CisrCisrICAgICAgc3dpdGNoIChTV0lUQ0hfRU5VTV9DQVNUICgocmVfb3Bjb2RlX3QpICpwKyspKQorKwl7CisrCisrICAgICAgICAvKiBJIGd1ZXNzIHRoZSBpZGVhIGhlcmUgaXMgdG8gc2ltcGx5IG5vdCBib3RoZXIgd2l0aCBhIGZhc3RtYXAKKysgICAgICAgICAgIGlmIGEgYmFja3JlZmVyZW5jZSBpcyB1c2VkLCBzaW5jZSBpdCdzIHRvbyBoYXJkIHRvIGZpZ3VyZSBvdXQKKysgICAgICAgICAgIHRoZSBmYXN0bWFwIGZvciB0aGUgY29ycmVzcG9uZGluZyBncm91cC4gIFNldHRpbmcKKysgICAgICAgICAgIGBjYW5fYmVfbnVsbCcgc3RvcHMgYHJlX3NlYXJjaF8yJyBmcm9tIHVzaW5nIHRoZSBmYXN0bWFwLCBzbworKyAgICAgICAgICAgdGhhdCBpcyBhbGwgd2UgZG8uICAqLworKwljYXNlIGR1cGxpY2F0ZToKKysJICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisrICAgICAgICAgIGdvdG8gZG9uZTsKKysKKysKKysgICAgICAvKiBGb2xsb3dpbmcgYXJlIHRoZSBjYXNlcyB3aGljaCBtYXRjaCBhIGNoYXJhY3Rlci4gIFRoZXNlIGVuZAorKyAgICAgICAgIHdpdGggYGJyZWFrJy4gICovCisrCisrI2lmZGVmIFdDSEFSCisrCWNhc2UgZXhhY3RuOgorKyAgICAgICAgICBmYXN0bWFwW3RydW5jYXRlX3djaGFyKHBbMV0pXSA9IDE7CisrCSAgYnJlYWs7CisrI2Vsc2UgLyogQllURSAqLworKwljYXNlIGV4YWN0bjoKKysgICAgICAgICAgZmFzdG1hcFtwWzFdXSA9IDE7CisrCSAgYnJlYWs7CisrI2VuZGlmIC8qIFdDSEFSICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCWNhc2UgZXhhY3RuX2JpbjoKKysJICBmYXN0bWFwW3BbMV1dID0gMTsKKysJICBicmVhazsKKysjZW5kaWYKKysKKysjaWZkZWYgV0NIQVIKKysgICAgICAgIC8qIEl0IGlzIGhhcmQgdG8gZGlzdGluZ3Vpc2ggZmFzdG1hcCBmcm9tIChtdWx0aSBieXRlKSBjaGFyYWN0ZXJzCisrICAgICAgICAgICB3aGljaCBkZXBlbmRzIG9uIGN1cnJlbnQgbG9jYWxlLiAgKi8KKysgICAgICAgIGNhc2UgY2hhcnNldDoKKysJY2FzZSBjaGFyc2V0X25vdDoKKysJY2FzZSB3b3JkY2hhcjoKKysJY2FzZSBub3R3b3JkY2hhcjoKKysgICAgICAgICAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworKyAgICAgICAgICBnb3RvIGRvbmU7CisrI2Vsc2UgLyogQllURSAqLworKyAgICAgICAgY2FzZSBjaGFyc2V0OgorKyAgICAgICAgICBmb3IgKGogPSAqcCsrICogQllURVdJRFRIIC0gMTsgaiA+PSAwOyBqLS0pCisrCSAgICBpZiAocFtqIC8gQllURVdJRFRIXSAmICgxIDw8IChqICUgQllURVdJRFRIKSkpCisrICAgICAgICAgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBjaGFyc2V0X25vdDoKKysJICAvKiBDaGFycyBiZXlvbmQgZW5kIG9mIG1hcCBtdXN0IGJlIGFsbG93ZWQuICAqLworKwkgIGZvciAoaiA9ICpwICogQllURVdJRFRIOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKyAgICAgICAgICAgIGZhc3RtYXBbal0gPSAxOworKworKwkgIGZvciAoaiA9ICpwKysgKiBCWVRFV0lEVEggLSAxOyBqID49IDA7IGotLSkKKysJICAgIGlmICghKHBbaiAvIEJZVEVXSURUSF0gJiAoMSA8PCAoaiAlIEJZVEVXSURUSCkpKSkKKysgICAgICAgICAgICAgIGZhc3RtYXBbal0gPSAxOworKyAgICAgICAgICBicmVhazsKKysKKysKKysJY2FzZSB3b3JkY2hhcjoKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgPT0gU3dvcmQpCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKwljYXNlIG5vdHdvcmRjaGFyOgorKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSAhPSBTd29yZCkKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAgICAgICBjYXNlIGFueWNoYXI6CisrCSAgeworKwkgICAgaW50IGZhc3RtYXBfbmV3bGluZSA9IGZhc3RtYXBbJ1xuJ107CisrCisrCSAgICAvKiBgLicgbWF0Y2hlcyBhbnl0aGluZyAuLi4gICovCisrCSAgICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysKKysJICAgIC8qIC4uLiBleGNlcHQgcGVyaGFwcyBuZXdsaW5lLiAgKi8KKysJICAgIGlmICghKGJ1ZnAtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKysJICAgICAgZmFzdG1hcFsnXG4nXSA9IGZhc3RtYXBfbmV3bGluZTsKKysKKysJICAgIC8qIFJldHVybiBpZiB3ZSBoYXZlIGFscmVhZHkgc2V0IGBjYW5fYmVfbnVsbCc7IGlmIHdlIGhhdmUsCisrCSAgICAgICB0aGVuIHRoZSBmYXN0bWFwIGlzIGlycmVsZXZhbnQuICBTb21ldGhpbmcncyB3cm9uZyBoZXJlLiAgKi8KKysJICAgIGVsc2UgaWYgKGJ1ZnAtPmNhbl9iZV9udWxsKQorKwkgICAgICBnb3RvIGRvbmU7CisrCisrCSAgICAvKiBPdGhlcndpc2UsIGhhdmUgdG8gY2hlY2sgYWx0ZXJuYXRpdmUgcGF0aHMuICAqLworKwkgICAgYnJlYWs7CisrCSAgfQorKworKyNpZmRlZiBlbWFjcworKyAgICAgICAgY2FzZSBzeW50YXhzcGVjOgorKwkgIGsgPSAqcCsrOworKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSA9PSAoZW51bSBzeW50YXhjb2RlKSBrKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBub3RzeW50YXhzcGVjOgorKwkgIGsgPSAqcCsrOworKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSAhPSAoZW51bSBzeW50YXhjb2RlKSBrKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysgICAgICAvKiBBbGwgY2FzZXMgYWZ0ZXIgdGhpcyBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgVGhlc2UgZW5kIHdpdGgKKysgICAgICAgICBgY29udGludWUnLiAgKi8KKysKKysKKysJY2FzZSBiZWZvcmVfZG90OgorKwljYXNlIGF0X2RvdDoKKysJY2FzZSBhZnRlcl9kb3Q6CisrICAgICAgICAgIGNvbnRpbnVlOworKyNlbmRpZiAvKiBlbWFjcyAqLworKworKworKyAgICAgICAgY2FzZSBub19vcDoKKysgICAgICAgIGNhc2UgYmVnbGluZToKKysgICAgICAgIGNhc2UgZW5kbGluZToKKysJY2FzZSBiZWdidWY6CisrCWNhc2UgZW5kYnVmOgorKwljYXNlIHdvcmRib3VuZDoKKysJY2FzZSBub3R3b3JkYm91bmQ6CisrCWNhc2Ugd29yZGJlZzoKKysJY2FzZSB3b3JkZW5kOgorKyAgICAgICAgY2FzZSBwdXNoX2R1bW15X2ZhaWx1cmU6CisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIGp1bXBfbjoKKysgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysJY2FzZSBtYXliZV9wb3BfanVtcDoKKysJY2FzZSBqdW1wOgorKyAgICAgICAgY2FzZSBqdW1wX3Bhc3RfYWx0OgorKwljYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGosIHApOworKwkgIHAgKz0gajsKKysJICBpZiAoaiA+IDApCisrCSAgICBjb250aW51ZTsKKysKKysgICAgICAgICAgLyogSnVtcCBiYWNrd2FyZCBpbXBsaWVzIHdlIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBib2R5IG9mIGEKKysgICAgICAgICAgICAgbG9vcCBhbmQgbWF0Y2hlZCBub3RoaW5nLiAgT3Bjb2RlIGp1bXBlZCB0byBzaG91bGQgYmUKKysgICAgICAgICAgICAgYG9uX2ZhaWx1cmVfanVtcCcgb3IgYHN1Y2NlZWRfbicuICBKdXN0IHRyZWF0IGl0IGxpa2UgYW4KKysgICAgICAgICAgICAgb3JkaW5hcnkganVtcC4gIEZvciBhICogbG9vcCwgaXQgaGFzIHB1c2hlZCBpdHMgZmFpbHVyZQorKyAgICAgICAgICAgICBwb2ludCBhbHJlYWR5OyBpZiBzbywgZGlzY2FyZCB0aGF0IGFzIHJlZHVuZGFudC4gICovCisrICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpICpwICE9IG9uX2ZhaWx1cmVfanVtcAorKwkgICAgICAmJiAocmVfb3Bjb2RlX3QpICpwICE9IHN1Y2NlZWRfbikKKysJICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICBwKys7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChqLCBwKTsKKysgICAgICAgICAgcCArPSBqOworKworKyAgICAgICAgICAvKiBJZiB3aGF0J3Mgb24gdGhlIHN0YWNrIGlzIHdoZXJlIHdlIGFyZSBub3csIHBvcCBpdC4gICovCisrICAgICAgICAgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKQorKwkgICAgICAmJiBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwgLSAxXS5wb2ludGVyID09IHApCisrICAgICAgICAgICAgZmFpbF9zdGFjay5hdmFpbC0tOworKworKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXA6CisrCWhhbmRsZV9vbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChqLCBwKTsKKysKKysgICAgICAgICAgLyogRm9yIHNvbWUgcGF0dGVybnMsIGUuZy4sIGAoYT8pPycsIGBwK2onIGhlcmUgcG9pbnRzIHRvIHRoZQorKyAgICAgICAgICAgICBlbmQgb2YgdGhlIHBhdHRlcm4uICBXZSBkb24ndCB3YW50IHRvIHB1c2ggc3VjaCBhIHBvaW50LAorKyAgICAgICAgICAgICBzaW5jZSB3aGVuIHdlIHJlc3RvcmUgaXQgYWJvdmUsIGVudGVyaW5nIHRoZSBzd2l0Y2ggd2lsbAorKyAgICAgICAgICAgICBpbmNyZW1lbnQgYHAnIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFdlIGRvbid0IG5lZWQKKysgICAgICAgICAgICAgdG8gcHVzaCBzdWNoIGEgcG9pbnQgc2luY2Ugd2Ugb2J2aW91c2x5IHdvbid0IGZpbmQgYW55IG1vcmUKKysgICAgICAgICAgICAgZmFzdG1hcCBlbnRyaWVzIGJleW9uZCBgcGVuZCcuICBTdWNoIGEgcGF0dGVybiBjYW4gbWF0Y2gKKysgICAgICAgICAgICAgdGhlIG51bGwgc3RyaW5nLCB0aG91Z2guICAqLworKyAgICAgICAgICBpZiAocCArIGogPCBwZW5kKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmICghUFVTSF9QQVRURVJOX09QIChwICsgaiwgZmFpbF9zdGFjaykpCisrCQl7CisrCQkgIFJFU0VUX0ZBSUxfU1RBQ0sgKCk7CisrCQkgIHJldHVybiAtMjsKKysJCX0KKysgICAgICAgICAgICB9CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisrCisrICAgICAgICAgIGlmIChzdWNjZWVkX25fcCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaywgcCk7CS8qIFNraXAgdGhlIG4uICAqLworKyAgICAgICAgICAgICAgc3VjY2VlZF9uX3AgPSBmYWxzZTsKKysJICAgIH0KKysKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2Ugc3VjY2VlZF9uOgorKyAgICAgICAgICAvKiBHZXQgdG8gdGhlIG51bWJlciBvZiB0aW1lcyB0byBzdWNjZWVkLiAgKi8KKysgICAgICAgICAgcCArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAvKiBJbmNyZW1lbnQgcCBwYXN0IHRoZSBuIGZvciB3aGVuIGsgIT0gMC4gICovCisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChrLCBwKTsKKysgICAgICAgICAgaWYgKGsgPT0gMCkKKysJICAgIHsKKysgICAgICAgICAgICAgIHAgLT0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAJICAgICAgc3VjY2VlZF9uX3AgPSB0cnVlOyAgLyogU3BhZ2hldHRpIGNvZGUgYWxlcnQuICAqLworKyAgICAgICAgICAgICAgZ290byBoYW5kbGVfb25fZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2Ugc2V0X251bWJlcl9hdDoKKysgICAgICAgICAgcCArPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2Ugc3RhcnRfbWVtb3J5OgorKyAgICAgICAgY2FzZSBzdG9wX21lbW9yeToKKysJICBwICs9IDI7CisrCSAgY29udGludWU7CisrCisrCisrCWRlZmF1bHQ6CisrICAgICAgICAgIGFib3J0ICgpOyAvKiBXZSBoYXZlIGxpc3RlZCBhbGwgdGhlIGNhc2VzLiAgKi8KKysgICAgICAgIH0gLyogc3dpdGNoICpwKysgKi8KKysKKysgICAgICAvKiBHZXR0aW5nIGhlcmUgbWVhbnMgd2UgaGF2ZSBmb3VuZCB0aGUgcG9zc2libGUgc3RhcnRpbmcKKysgICAgICAgICBjaGFyYWN0ZXJzIGZvciBvbmUgcGF0aCBvZiB0aGUgcGF0dGVybiAtLSBhbmQgdGhhdCB0aGUgZW1wdHkKKysgICAgICAgICBzdHJpbmcgZG9lcyBub3QgbWF0Y2guICBXZSBuZWVkIG5vdCBmb2xsb3cgdGhpcyBwYXRoIGZ1cnRoZXIuCisrICAgICAgICAgSW5zdGVhZCwgbG9vayBhdCB0aGUgbmV4dCBhbHRlcm5hdGl2ZSAocmVtZW1iZXJlZCBvbiB0aGUKKysgICAgICAgICBzdGFjayksIG9yIHF1aXQgaWYgbm8gbW9yZS4gIFRoZSB0ZXN0IGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AKKysgICAgICAgICBkb2VzIHRoZXNlIHRoaW5ncy4gICovCisrICAgICAgcGF0aF9jYW5fYmVfbnVsbCA9IGZhbHNlOworKyAgICAgIHAgPSBwZW5kOworKyAgICB9IC8qIHdoaWxlIHAgKi8KKysKKysgIC8qIFNldCBgY2FuX2JlX251bGwnIGZvciB0aGUgbGFzdCBwYXRoIChhbHNvIHRoZSBmaXJzdCBwYXRoLCBpZiB0aGUKKysgICAgIHBhdHRlcm4gaXMgZW1wdHkpLiAgKi8KKysgIGJ1ZnAtPmNhbl9iZV9udWxsIHw9IHBhdGhfY2FuX2JlX251bGw7CisrCisrIGRvbmU6CisrICBSRVNFVF9GQUlMX1NUQUNLICgpOworKyAgcmV0dXJuIDA7CisrfQorKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisraW50CisrcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldHVybiB3Y3NfcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0dXJuIGJ5dGVfcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApOworK30gLyogcmVfY29tcGlsZV9mYXN0bWFwICovCisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9jb21waWxlX2Zhc3RtYXAsIHJlX2NvbXBpbGVfZmFzdG1hcCkKKysjZW5kaWYKKysMCisrCisrLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisrICAgRU5EUy4gIFN1YnNlcXVlbnQgbWF0Y2hlcyB1c2luZyBQQVRURVJOX0JVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZQorKyAgIHRoaXMgbWVtb3J5IGZvciByZWNvcmRpbmcgcmVnaXN0ZXIgaW5mb3JtYXRpb24uICBTVEFSVFMgYW5kIEVORFMKKysgICBtdXN0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGUgbWFsbG9jIGxpYnJhcnkgcm91dGluZSwgYW5kIG11c3QgZWFjaAorKyAgIGJlIGF0IGxlYXN0IE5VTV9SRUdTICogc2l6ZW9mIChyZWdvZmZfdCkgYnl0ZXMgbG9uZy4KKysKKysgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisrICAgcmVnaXN0ZXIgZGF0YS4KKysKKysgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKysgICBQQVRURVJOX0JVRkZFUiB3aWxsIGFsbG9jYXRlIGl0cyBvd24gcmVnaXN0ZXIgZGF0YSwgd2l0aG91dAorKyAgIGZyZWVpbmcgdGhlIG9sZCBkYXRhLiAgKi8KKysKKyt2b2lkCisrcmVfc2V0X3JlZ2lzdGVycyAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIHVuc2lnbmVkIG51bV9yZWdzLAorKyAgICAgICAgICAgICAgICAgIHJlZ29mZl90ICpzdGFydHMsIHJlZ29mZl90ICplbmRzKQorK3sKKysgIGlmIChudW1fcmVncykKKysgICAgeworKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19SRUFMTE9DQVRFOworKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gbnVtX3JlZ3M7CisrICAgICAgcmVncy0+c3RhcnQgPSBzdGFydHM7CisrICAgICAgcmVncy0+ZW5kID0gZW5kczsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxMT0NBVEVEOworKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gMDsKKysgICAgICByZWdzLT5zdGFydCA9IHJlZ3MtPmVuZCA9IChyZWdvZmZfdCAqKSAwOworKyAgICB9CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2V0X3JlZ2lzdGVycywgcmVfc2V0X3JlZ2lzdGVycykKKysjZW5kaWYKKysMCisrLyogU2VhcmNoaW5nIHJvdXRpbmVzLiAgKi8KKysKKysvKiBMaWtlIHJlX3NlYXJjaF8yLCBiZWxvdywgYnV0IG9ubHkgb25lIHN0cmluZyBpcyBzcGVjaWZpZWQsIGFuZAorKyAgIGRvZXNuJ3QgbGV0IHlvdSBzYXkgd2hlcmUgdG8gc3RvcCBtYXRjaGluZy4gICovCisrCisraW50CisrcmVfc2VhcmNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IHNpemUsCisrICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncykKKyt7CisrICByZXR1cm4gcmVfc2VhcmNoXzIgKGJ1ZnAsIE5VTEwsIDAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLAorKwkJICAgICAgcmVncywgc2l6ZSk7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoLCByZV9zZWFyY2gpCisrI2VuZGlmCisrCisrCisrLyogVXNpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGUC0+YnVmZmVyLCBmaXJzdCB0cmllcyB0byBtYXRjaCB0aGUKKysgICB2aXJ0dWFsIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMiwgc3RhcnRpbmcgZmlyc3QgYXQgaW5kZXgKKysgICBTVEFSVFBPUywgdGhlbiBhdCBTVEFSVFBPUyArIDEsIGFuZCBzbyBvbi4KKysKKysgICBTVFJJTkcxIGFuZCBTVFJJTkcyIGhhdmUgbGVuZ3RoIFNJWkUxIGFuZCBTSVpFMiwgcmVzcGVjdGl2ZWx5LgorKworKyAgIFJBTkdFIGlzIGhvdyBmYXIgdG8gc2NhbiB3aGlsZSB0cnlpbmcgdG8gbWF0Y2guICBSQU5HRSA9IDAgbWVhbnMgdHJ5CisrICAgb25seSBhdCBTVEFSVFBPUzsgaW4gZ2VuZXJhbCwgdGhlIGxhc3Qgc3RhcnQgdHJpZWQgaXMgU1RBUlRQT1MgKworKyAgIFJBTkdFLgorKworKyAgIEluIFJFR1MsIHJldHVybiB0aGUgaW5kaWNlcyBvZiB0aGUgdmlydHVhbCBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEKKysgICBhbmQgU1RSSU5HMiB0aGF0IG1hdGNoZWQgdGhlIGVudGlyZSBCVUZQLT5idWZmZXIgYW5kIGl0cyBjb250YWluZWQKKysgICBzdWJleHByZXNzaW9ucy4KKysKKysgICBEbyBub3QgY29uc2lkZXIgbWF0Y2hpbmcgb25lIHBhc3QgdGhlIGluZGV4IFNUT1AgaW4gdGhlIHZpcnR1YWwKKysgICBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIuCisrCisrICAgV2UgcmV0dXJuIGVpdGhlciB0aGUgcG9zaXRpb24gaW4gdGhlIHN0cmluZ3MgYXQgd2hpY2ggdGhlIG1hdGNoIHdhcworKyAgIGZvdW5kLCAtMSBpZiBubyBtYXRjaCwgb3IgLTIgaWYgZXJyb3IgKHN1Y2ggYXMgZmFpbHVyZQorKyAgIHN0YWNrIG92ZXJmbG93KS4gICovCisrCisraW50CisrcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKyt7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0dXJuIHdjc19yZV9zZWFyY2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBzdGFydHBvcywKKysJCQkgICAgcmFuZ2UsIHJlZ3MsIHN0b3ApOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0dXJuIGJ5dGVfcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgc3RhcnRwb3MsCisrCQkJICAgICByYW5nZSwgcmVncywgc3RvcCk7CisrfSAvKiByZV9zZWFyY2hfMiAqLworKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoXzIsIHJlX3NlYXJjaF8yKQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgZGVmaW5lIEZSRUVfVkFSKHZhcikgaWYgKHZhcikgUkVHRVhfRlJFRSAodmFyKTsgdmFyID0gTlVMTAorKyNlbHNlCisrIyBkZWZpbmUgRlJFRV9WQVIodmFyKSBpZiAodmFyKSBmcmVlICh2YXIpOyB2YXIgPSBOVUxMCisrI2VuZGlmCisrCisrI2lmZGVmIFdDSEFSCisrIyBkZWZpbmUgTUFYX0FMTE9DQV9TSVpFCTIwMDAKKysKKysjIGRlZmluZSBGUkVFX1dDU19CVUZGRVJTKCkgXAorKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCWZyZWUgKHdjc19zdHJpbmcxKTsJCQkJCQkgICAgICBcCisrCWZyZWUgKG1ic19vZmZzZXQxKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSICh3Y3Nfc3RyaW5nMSk7CQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAobWJzX29mZnNldDEpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpIAkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCWZyZWUgKHdjc19zdHJpbmcyKTsJCQkJCQkgICAgICBcCisrCWZyZWUgKG1ic19vZmZzZXQyKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSICh3Y3Nfc3RyaW5nMik7CQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAobWJzX29mZnNldDIpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysKKysjZW5kaWYKKysKKysKKytzdGF0aWMgaW50CisrUFJFRklYKHJlX3NlYXJjaF8yKSAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcxLAorKyAgICAgICAgICAgICAgICAgICAgIGludCBzaXplMSwgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorK3sKKysgIGludCB2YWw7CisrICByZWdpc3RlciBjaGFyICpmYXN0bWFwID0gYnVmcC0+ZmFzdG1hcDsKKysgIHJlZ2lzdGVyIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKysgIGludCB0b3RhbF9zaXplID0gc2l6ZTEgKyBzaXplMjsKKysgIGludCBlbmRwb3MgPSBzdGFydHBvcyArIHJhbmdlOworKyNpZmRlZiBXQ0hBUgorKyAgLyogV2UgbmVlZCB3Y2hhcl90KiBidWZmZXJzIGNvcnJlc3BvbmQgdG8gY3N0cmluZzEsIGNzdHJpbmcyLiAgKi8KKysgIHdjaGFyX3QgKndjc19zdHJpbmcxID0gTlVMTCwgKndjc19zdHJpbmcyID0gTlVMTDsKKysgIC8qIFdlIG5lZWQgdGhlIHNpemUgb2Ygd2NoYXJfdCBidWZmZXJzIGNvcnJlc3BvbmQgdG8gY3NpemUxLCBjc2l6ZTIuICAqLworKyAgaW50IHdjc19zaXplMSA9IDAsIHdjc19zaXplMiA9IDA7CisrICAvKiBvZmZzZXQgYnVmZmVyIGZvciBvcHRpbWl6YXRvaW4uIFNlZSBjb252ZXJ0X21ic190b193Yy4gICovCisrICBpbnQgKm1ic19vZmZzZXQxID0gTlVMTCwgKm1ic19vZmZzZXQyID0gTlVMTDsKKysgIC8qIFRoZXkgaG9sZCB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciAqaXNfYmluYXJ5ID0gTlVMTDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgU1RBUlRQT1MuICAqLworKyAgaWYgKHN0YXJ0cG9zIDwgMCB8fCBzdGFydHBvcyA+IHRvdGFsX3NpemUpCisrICAgIHJldHVybiAtMTsKKysKKysgIC8qIEZpeCB1cCBSQU5HRSBpZiBpdCBtaWdodCBldmVudHVhbGx5IHRha2UgdXMgb3V0c2lkZQorKyAgICAgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyLgorKyAgICAgTWFrZSBzdXJlIHdlIHdvbid0IG1vdmUgU1RBUlRQT1MgYmVsb3cgMCBvciBhYm92ZSBUT1RBTF9TSVpFLiAgKi8KKysgIGlmIChlbmRwb3MgPCAwKQorKyAgICByYW5nZSA9IDAgLSBzdGFydHBvczsKKysgIGVsc2UgaWYgKGVuZHBvcyA+IHRvdGFsX3NpemUpCisrICAgIHJhbmdlID0gdG90YWxfc2l6ZSAtIHN0YXJ0cG9zOworKworKyAgLyogSWYgdGhlIHNlYXJjaCBpc24ndCB0byBiZSBhIGJhY2t3YXJkcyBvbmUsIGRvbid0IHdhc3RlIHRpbWUgaW4gYQorKyAgICAgc2VhcmNoIGZvciBhIHBhdHRlcm4gdGhhdCBtdXN0IGJlIGFuY2hvcmVkLiAgKi8KKysgIGlmIChidWZwLT51c2VkID4gMCAmJiByYW5nZSA+IDAKKysgICAgICAmJiAoKHJlX29wY29kZV90KSBidWZwLT5idWZmZXJbMF0gPT0gYmVnYnVmCisrCSAgLyogYGJlZ2xpbmUnIGlzIGxpa2UgYGJlZ2J1ZicgaWYgaXQgY2Fubm90IG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KKysJICB8fCAoKHJlX29wY29kZV90KSBidWZwLT5idWZmZXJbMF0gPT0gYmVnbGluZQorKwkgICAgICAmJiAhYnVmcC0+bmV3bGluZV9hbmNob3IpKSkKKysgICAgeworKyAgICAgIGlmIChzdGFydHBvcyA+IDApCisrCXJldHVybiAtMTsKKysgICAgICBlbHNlCisrCXJhbmdlID0gMTsKKysgICAgfQorKworKyNpZmRlZiBlbWFjcworKyAgLyogSW4gYSBmb3J3YXJkIHNlYXJjaCBmb3Igc29tZXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggXD0uCisrICAgICBkb24ndCBrZWVwIHNlYXJjaGluZyBwYXN0IHBvaW50LiAgKi8KKysgIGlmIChidWZwLT51c2VkID4gMCAmJiAocmVfb3Bjb2RlX3QpIGJ1ZnAtPmJ1ZmZlclswXSA9PSBhdF9kb3QgJiYgcmFuZ2UgPiAwKQorKyAgICB7CisrICAgICAgcmFuZ2UgPSBQVCAtIHN0YXJ0cG9zOworKyAgICAgIGlmIChyYW5nZSA8PSAwKQorKwlyZXR1cm4gLTE7CisrICAgIH0KKysjZW5kaWYgLyogZW1hY3MgKi8KKysKKysgIC8qIFVwZGF0ZSB0aGUgZmFzdG1hcCBub3cgaWYgbm90IGNvcnJlY3QgYWxyZWFkeS4gICovCisrICBpZiAoZmFzdG1hcCAmJiAhYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSkKKysgICAgaWYgKHJlX2NvbXBpbGVfZmFzdG1hcCAoYnVmcCkgPT0gLTIpCisrICAgICAgcmV0dXJuIC0yOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogQWxsb2NhdGUgd2NoYXJfdCBhcnJheSBmb3Igd2NzX3N0cmluZzEgYW5kIHdjc19zdHJpbmcyIGFuZAorKyAgICAgZmlsbCB0aGVtIHdpdGggY29udmVydGVkIHN0cmluZy4gICovCisrICBpZiAoc2l6ZTEgIT0gMCkKKysgICAgeworKyAgICAgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkKKysJeworKwkgIHdjc19zdHJpbmcxID0gVEFMTE9DIChzaXplMSArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDEgPSBUQUxMT0MgKHNpemUxICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBUQUxMT0MgKHNpemUxICsgMSwgY2hhcik7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICB3Y3Nfc3RyaW5nMSA9IFJFR0VYX1RBTExPQyAoc2l6ZTEgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQxID0gUkVHRVhfVEFMTE9DIChzaXplMSArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChzaXplMSArIDEsIGNoYXIpOworKwl9CisrICAgICAgaWYgKCF3Y3Nfc3RyaW5nMSB8fCAhbWJzX29mZnNldDEgfHwgIWlzX2JpbmFyeSkKKysJeworKwkgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkKKysJICAgIHsKKysJICAgICAgZnJlZSAod2NzX3N0cmluZzEpOworKwkgICAgICBmcmVlIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIGZyZWUgKGlzX2JpbmFyeSk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBGUkVFX1ZBUiAod2NzX3N0cmluZzEpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOworKwkgICAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICAgIH0KKysJICByZXR1cm4gLTI7CisrCX0KKysgICAgICB3Y3Nfc2l6ZTEgPSBjb252ZXJ0X21ic190b193Y3Mod2NzX3N0cmluZzEsIHN0cmluZzEsIHNpemUxLAorKwkJCQkgICAgIG1ic19vZmZzZXQxLCBpc19iaW5hcnkpOworKyAgICAgIHdjc19zdHJpbmcxW3djc19zaXplMV0gPSBMJ1wwJzsgLyogZm9yIGEgc2VudGluZWwgICovCisrICAgICAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQorKwlmcmVlIChpc19iaW5hcnkpOworKyAgICAgIGVsc2UKKysJRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrICAgIH0KKysgIGlmIChzaXplMiAhPSAwKQorKyAgICB7CisrICAgICAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKQorKwl7CisrCSAgd2NzX3N0cmluZzIgPSBUQUxMT0MgKHNpemUyICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MiA9IFRBTExPQyAoc2l6ZTIgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFRBTExPQyAoc2l6ZTIgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHdjc19zdHJpbmcyID0gUkVHRVhfVEFMTE9DIChzaXplMiArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDIgPSBSRUdFWF9UQUxMT0MgKHNpemUyICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKHNpemUyICsgMSwgY2hhcik7CisrCX0KKysgICAgICBpZiAoIXdjc19zdHJpbmcyIHx8ICFtYnNfb2Zmc2V0MiB8fCAhaXNfYmluYXJ5KQorKwl7CisrCSAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysJICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpCisrCSAgICBmcmVlIChpc19iaW5hcnkpOworKwkgIGVsc2UKKysJICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgIHJldHVybiAtMjsKKysJfQorKyAgICAgIHdjc19zaXplMiA9IGNvbnZlcnRfbWJzX3RvX3djcyh3Y3Nfc3RyaW5nMiwgc3RyaW5nMiwgc2l6ZTIsCisrCQkJCSAgICAgbWJzX29mZnNldDIsIGlzX2JpbmFyeSk7CisrICAgICAgd2NzX3N0cmluZzJbd2NzX3NpemUyXSA9IEwnXDAnOyAvKiBmb3IgYSBzZW50aW5lbCAgKi8KKysgICAgICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpCisrCWZyZWUgKGlzX2JpbmFyeSk7CisrICAgICAgZWxzZQorKwlGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysgICAgfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKworKyAgLyogTG9vcCB0aHJvdWdoIHRoZSBzdHJpbmcsIGxvb2tpbmcgZm9yIGEgcGxhY2UgdG8gc3RhcnQgbWF0Y2hpbmcuICAqLworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIC8qIElmIGEgZmFzdG1hcCBpcyBzdXBwbGllZCwgc2tpcCBxdWlja2x5IG92ZXIgY2hhcmFjdGVycyB0aGF0CisrICAgICAgICAgY2Fubm90IGJlIHRoZSBzdGFydCBvZiBhIG1hdGNoLiAgSWYgdGhlIHBhdHRlcm4gY2FuIG1hdGNoIHRoZQorKyAgICAgICAgIG51bGwgc3RyaW5nLCBob3dldmVyLCB3ZSBkb24ndCBuZWVkIHRvIHNraXAgY2hhcmFjdGVyczsgd2Ugd2FudAorKyAgICAgICAgIHRoZSBmaXJzdCBudWxsIHN0cmluZy4gICovCisrICAgICAgaWYgKGZhc3RtYXAgJiYgc3RhcnRwb3MgPCB0b3RhbF9zaXplICYmICFidWZwLT5jYW5fYmVfbnVsbCkKKysJeworKwkgIGlmIChyYW5nZSA+IDApCS8qIFNlYXJjaGluZyBmb3J3YXJkcy4gICovCisrCSAgICB7CisrCSAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKmQ7CisrCSAgICAgIHJlZ2lzdGVyIGludCBsaW0gPSAwOworKwkgICAgICBpbnQgaXJhbmdlID0gcmFuZ2U7CisrCisrICAgICAgICAgICAgICBpZiAoc3RhcnRwb3MgPCBzaXplMSAmJiBzdGFydHBvcyArIHJhbmdlID49IHNpemUxKQorKyAgICAgICAgICAgICAgICBsaW0gPSByYW5nZSAtIChzaXplMSAtIHN0YXJ0cG9zKTsKKysKKysJICAgICAgZCA9IChzdGFydHBvcyA+PSBzaXplMSA/IHN0cmluZzIgLSBzaXplMSA6IHN0cmluZzEpICsgc3RhcnRwb3M7CisrCisrICAgICAgICAgICAgICAvKiBXcml0dGVuIG91dCBhcyBhbiBpZi1lbHNlIHRvIGF2b2lkIHRlc3RpbmcgYHRyYW5zbGF0ZScKKysgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgbG9vcC4gICovCisrCSAgICAgIGlmICh0cmFuc2xhdGUpCisrICAgICAgICAgICAgICAgIHdoaWxlIChyYW5nZSA+IGxpbQorKyAgICAgICAgICAgICAgICAgICAgICAgJiYgIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpCisrCQkJCSAgIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKmQrK11dKQorKyAgICAgICAgICAgICAgICAgIHJhbmdlLS07CisrCSAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgd2hpbGUgKHJhbmdlID4gbGltICYmICFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKSAqZCsrXSkKKysgICAgICAgICAgICAgICAgICByYW5nZS0tOworKworKwkgICAgICBzdGFydHBvcyArPSBpcmFuZ2UgLSByYW5nZTsKKysJICAgIH0KKysJICBlbHNlCQkJCS8qIFNlYXJjaGluZyBiYWNrd2FyZHMuICAqLworKwkgICAgeworKwkgICAgICByZWdpc3RlciBDSEFSX1QgYyA9IChzaXplMSA9PSAwIHx8IHN0YXJ0cG9zID49IHNpemUxCisrCQkJCSAgICAgID8gc3RyaW5nMltzdGFydHBvcyAtIHNpemUxXQorKwkJCQkgICAgICA6IHN0cmluZzFbc3RhcnRwb3NdKTsKKysKKysJICAgICAgaWYgKCFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKGMpXSkKKysJCWdvdG8gYWR2YW5jZTsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIElmIGNhbid0IG1hdGNoIHRoZSBudWxsIHN0cmluZywgYW5kIHRoYXQncyBhbGwgd2UgaGF2ZSBsZWZ0LCBmYWlsLiAgKi8KKysgICAgICBpZiAocmFuZ2UgPj0gMCAmJiBzdGFydHBvcyA9PSB0b3RhbF9zaXplICYmIGZhc3RtYXAKKysgICAgICAgICAgJiYgIWJ1ZnAtPmNhbl9iZV9udWxsKQorKyAgICAgICB7CisrI2lmZGVmIFdDSEFSCisrICAgICAgICAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgIH0KKysKKysjaWZkZWYgV0NIQVIKKysgICAgICB2YWwgPSB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsCisrCQkJCSAgICAgc2l6ZTIsIHN0YXJ0cG9zLCByZWdzLCBzdG9wLAorKwkJCQkgICAgIHdjc19zdHJpbmcxLCB3Y3Nfc2l6ZTEsCisrCQkJCSAgICAgd2NzX3N0cmluZzIsIHdjc19zaXplMiwKKysJCQkJICAgICBtYnNfb2Zmc2V0MSwgbWJzX29mZnNldDIpOworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICB2YWwgPSBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLAorKwkJCQkgICAgICBzaXplMiwgc3RhcnRwb3MsIHJlZ3MsIHN0b3ApOworKyNlbmRpZiAvKiBCWVRFICovCisrCisrI2lmbmRlZiBSRUdFWF9NQUxMT0MKKysjIGlmZGVmIENfQUxMT0NBCisrICAgICAgYWxsb2NhICgwKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgaWYgKHZhbCA+PSAwKQorKwl7CisrI2lmZGVmIFdDSEFSCisrCSAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysJICByZXR1cm4gc3RhcnRwb3M7CisrCX0KKysKKysgICAgICBpZiAodmFsID09IC0yKQorKwl7CisrI2lmZGVmIFdDSEFSCisrCSAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysJICByZXR1cm4gLTI7CisrCX0KKysKKysgICAgYWR2YW5jZToKKysgICAgICBpZiAoIXJhbmdlKQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZWxzZSBpZiAocmFuZ2UgPiAwKQorKyAgICAgICAgeworKyAgICAgICAgICByYW5nZS0tOworKyAgICAgICAgICBzdGFydHBvcysrOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgcmFuZ2UrKzsKKysgICAgICAgICAgc3RhcnRwb3MtLTsKKysgICAgICAgIH0KKysgICAgfQorKyNpZmRlZiBXQ0hBUgorKyAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysgIHJldHVybiAtMTsKKyt9CisrCisrI2lmZGVmIFdDSEFSCisrLyogVGhpcyBjb252ZXJ0cyBQVFIsIGEgcG9pbnRlciBpbnRvIG9uZSBvZiB0aGUgc2VhcmNoIHdjaGFyX3Qgc3RyaW5ncworKyAgIGBzdHJpbmcxJyBhbmQgYHN0cmluZzInIGludG8gYW4gbXVsdGlieXRlIHN0cmluZyBvZmZzZXQgZnJvbSB0aGUKKysgICBiZWdpbm5pbmcgb2YgdGhhdCBzdHJpbmcuIFdlIHVzZSBtYnNfb2Zmc2V0IHRvIG9wdGltaXplLgorKyAgIFNlZSBjb252ZXJ0X21ic190b193Y3MuICAqLworKyMgZGVmaW5lIFBPSU5URVJfVE9fT0ZGU0VUKHB0cikJCQkJCQlcCisrICAoRklSU1RfU1RSSU5HX1AgKHB0cikJCQkJCQkJXAorKyAgID8gKChyZWdvZmZfdCkobWJzX29mZnNldDEgIT0gTlVMTD8gbWJzX29mZnNldDFbKHB0ciktc3RyaW5nMV0gOiAwKSkJXAorKyAgIDogKChyZWdvZmZfdCkoKG1ic19vZmZzZXQyICE9IE5VTEw/IG1ic19vZmZzZXQyWyhwdHIpLXN0cmluZzJdIDogMCkJXAorKwkJICsgY3NpemUxKSkpCisrI2Vsc2UgLyogQllURSAqLworKy8qIFRoaXMgY29udmVydHMgUFRSLCBhIHBvaW50ZXIgaW50byBvbmUgb2YgdGhlIHNlYXJjaCBzdHJpbmdzIGBzdHJpbmcxJworKyAgIGFuZCBgc3RyaW5nMicgaW50byBhbiBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgc3RyaW5nLiAgKi8KKysjIGRlZmluZSBQT0lOVEVSX1RPX09GRlNFVChwdHIpCQkJXAorKyAgKEZJUlNUX1NUUklOR19QIChwdHIpCQkJCVwKKysgICA/ICgocmVnb2ZmX3QpICgocHRyKSAtIHN0cmluZzEpKQkJXAorKyAgIDogKChyZWdvZmZfdCkgKChwdHIpIC0gc3RyaW5nMiArIHNpemUxKSkpCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrLyogTWFjcm9zIGZvciBkZWFsaW5nIHdpdGggdGhlIHNwbGl0IHN0cmluZ3MgaW4gcmVfbWF0Y2hfMi4gICovCisrCisrI2RlZmluZSBNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcgIChkZW5kID09IGVuZF9tYXRjaF8xKQorKworKy8qIENhbGwgYmVmb3JlIGZldGNoaW5nIGEgY2hhcmFjdGVyIHdpdGggKmQuICBUaGlzIHN3aXRjaGVzIG92ZXIgdG8KKysgICBzdHJpbmcyIGlmIG5lY2Vzc2FyeS4gICovCisrI2RlZmluZSBQUkVGRVRDSCgpCQkJCQkJCVwKKysgIHdoaWxlIChkID09IGRlbmQpCQkJCQkJICAgIAlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgLyogRW5kIG9mIHN0cmluZzIgPT4gZmFpbC4gICovCQkJCQlcCisrICAgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpIAkJCQkJCVwKKysgICAgICAgIGdvdG8gZmFpbDsJCQkJCQkJXAorKyAgICAgIC8qIEVuZCBvZiBzdHJpbmcxID0+IGFkdmFuY2UgdG8gc3RyaW5nMi4gICovIAkJCVwKKysgICAgICBkID0gc3RyaW5nMjsJCQkJCQkgICAgICAgIFwKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzI7CQkJCQkJXAorKyAgICB9CisrCisrLyogVGVzdCBpZiBhdCB2ZXJ5IGJlZ2lubmluZyBvciBhdCB2ZXJ5IGVuZCBvZiB0aGUgdmlydHVhbCBjb25jYXRlbmF0aW9uCisrICAgb2YgYHN0cmluZzEnIGFuZCBgc3RyaW5nMicuICBJZiBvbmx5IG9uZSBzdHJpbmcsIGl0J3MgYHN0cmluZzInLiAgKi8KKysjZGVmaW5lIEFUX1NUUklOR1NfQkVHKGQpICgoZCkgPT0gKHNpemUxID8gc3RyaW5nMSA6IHN0cmluZzIpIHx8ICFzaXplMikKKysjZGVmaW5lIEFUX1NUUklOR1NfRU5EKGQpICgoZCkgPT0gZW5kMikKKysKKysKKysvKiBUZXN0IGlmIEQgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIHdoaWNoIGlzIHdvcmQtY29uc3RpdHVlbnQuICBXZSBoYXZlCisrICAgdHdvIHNwZWNpYWwgY2FzZXMgdG8gY2hlY2sgZm9yOiBpZiBwYXN0IHRoZSBlbmQgb2Ygc3RyaW5nMSwgbG9vayBhdAorKyAgIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gc3RyaW5nMjsgYW5kIGlmIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mCisrICAgc3RyaW5nMiwgbG9vayBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gc3RyaW5nMS4gICovCisrI2lmZGVmIFdDSEFSCisrLyogVXNlIGludGVybmF0aW9uYWxpemVkIEFQSSBpbnN0ZWFkIG9mIFNZTlRBWC4gICovCisrIyBkZWZpbmUgV09SRENIQVJfUChkKQkJCQkJCQlcCisrICAoaXN3YWxudW0gKCh3aW50X3QpKChkKSA9PSBlbmQxID8gKnN0cmluZzIJCQkJXAorKyAgICAgICAgICAgOiAoZCkgPT0gc3RyaW5nMiAtIDEgPyAqKGVuZDEgLSAxKSA6ICooZCkpKSAhPSAwCQlcCisrICAgfHwgKChkKSA9PSBlbmQxID8gKnN0cmluZzIJCQkJCQlcCisrICAgICAgIDogKGQpID09IHN0cmluZzIgLSAxID8gKihlbmQxIC0gMSkgOiAqKGQpKSA9PSBMJ18nKQorKyNlbHNlIC8qIEJZVEUgKi8KKysjIGRlZmluZSBXT1JEQ0hBUl9QKGQpCQkJCQkJCVwKKysgIChTWU5UQVggKChkKSA9PSBlbmQxID8gKnN0cmluZzIJCQkJCVwKKysgICAgICAgICAgIDogKGQpID09IHN0cmluZzIgLSAxID8gKihlbmQxIC0gMSkgOiAqKGQpKQkJCVwKKysgICA9PSBTd29yZCkKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBEaXNhYmxlZCBkdWUgdG8gYSBjb21waWxlciBidWcgLS0gc2VlIGNvbW1lbnQgYXQgY2FzZSB3b3JkYm91bmQgKi8KKysjaWYgMAorKy8qIFRlc3QgaWYgdGhlIGNoYXJhY3RlciBiZWZvcmUgRCBhbmQgdGhlIG9uZSBhdCBEIGRpZmZlciB3aXRoIHJlc3BlY3QKKysgICB0byBiZWluZyB3b3JkLWNvbnN0aXR1ZW50LiAgKi8KKysjZGVmaW5lIEFUX1dPUkRfQk9VTkRBUlkoZCkJCQkJCQlcCisrICAoQVRfU1RSSU5HU19CRUcgKGQpIHx8IEFUX1NUUklOR1NfRU5EIChkKQkJCQlcCisrICAgfHwgV09SRENIQVJfUCAoZCAtIDEpICE9IFdPUkRDSEFSX1AgKGQpKQorKyNlbmRpZgorKworKy8qIEZyZWUgZXZlcnl0aGluZyB3ZSBtYWxsb2MuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBSRUdFWF9GUkVFX1NUQUNLIChmYWlsX3N0YWNrLnN0YWNrKTsJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ2VuZCk7CQkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfZHVtbXkpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvX2R1bW15KTsJCQkJCQlcCisrICAgIGlmICghY2FudF9mcmVlX3djc19idWYpCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzIpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFJFR0VYX0ZSRUVfU1RBQ0sgKGZhaWxfc3RhY2suc3RhY2spOwkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnZW5kKTsJCQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm8pOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19kdW1teSk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm9fZHVtbXkpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKyNlbHNlCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgaWYgKCFjYW50X2ZyZWVfd2NzX2J1ZikJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMik7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDIpOwkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpICgodm9pZCkwKSAvKiBEbyBub3RoaW5nISAgQnV0IGluaGliaXQgZ2NjIHdhcm5pbmcuICovCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKyNlbmRpZiAvKiBub3QgTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrLyogVGhlc2UgdmFsdWVzIG11c3QgbWVldCBzZXZlcmFsIGNvbnN0cmFpbnRzLiAgVGhleSBtdXN0IG5vdCBiZSB2YWxpZAorKyAgIHJlZ2lzdGVyIHZhbHVlczsgc2luY2Ugd2UgaGF2ZSBhIGxpbWl0IG9mIDI1NSByZWdpc3RlcnMgKGJlY2F1c2UKKysgICB3ZSB1c2Ugb25seSBvbmUgYnl0ZSBpbiB0aGUgcGF0dGVybiBmb3IgdGhlIHJlZ2lzdGVyIG51bWJlciksIHdlIGNhbgorKyAgIHVzZSBudW1iZXJzIGxhcmdlciB0aGFuIDI1NS4gIFRoZXkgbXVzdCBkaWZmZXIgYnkgMSwgYmVjYXVzZSBvZgorKyAgIE5VTV9GQUlMVVJFX0lURU1TIGFib3ZlLiAgQW5kIHRoZSB2YWx1ZSBmb3IgdGhlIGxvd2VzdCByZWdpc3RlciBtdXN0CisrICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIGZvciB0aGUgaGlnaGVzdCByZWdpc3Rlciwgc28gd2UgZG8gbm90IHRyeQorKyAgIHRvIGFjdHVhbGx5IHNhdmUgYW55IHJlZ2lzdGVycyB3aGVuIG5vbmUgYXJlIGFjdGl2ZS4gICovCisrI2RlZmluZSBOT19ISUdIRVNUX0FDVElWRV9SRUcgKDEgPDwgQllURVdJRFRIKQorKyNkZWZpbmUgTk9fTE9XRVNUX0FDVElWRV9SRUcgKE5PX0hJR0hFU1RfQUNUSVZFX1JFRyArIDEpCisrDAorKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrLyogTWF0Y2hpbmcgcm91dGluZXMuICAqLworKworKyNpZm5kZWYgZW1hY3MgICAvKiBFbWFjcyBuZXZlciB1c2VzIHRoaXMuICAqLworKy8qIHJlX21hdGNoIGlzIGxpa2UgcmVfbWF0Y2hfMiBleGNlcHQgaXQgdGFrZXMgb25seSBhIHNpbmdsZSBzdHJpbmcuICAqLworKworK2ludAorK3JlX21hdGNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZywKKysgICAgICAgICAgaW50IHNpemUsIGludCBwb3MsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCisreworKyAgaW50IHJlc3VsdDsKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXN1bHQgPSB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgTlVMTCwgMCwgc3RyaW5nLCBzaXplLAorKwkJCQkgICAgICBwb3MsIHJlZ3MsIHNpemUsCisrCQkJCSAgICAgIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmVzdWx0ID0gYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBOVUxMLCAwLCBzdHJpbmcsIHNpemUsCisrCQkJCSAgcG9zLCByZWdzLCBzaXplKTsKKysjIGlmbmRlZiBSRUdFWF9NQUxMT0MKKysjICBpZmRlZiBDX0FMTE9DQQorKyAgYWxsb2NhICgwKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyMgaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX21hdGNoLCByZV9tYXRjaCkKKysjIGVuZGlmCisrI2VuZGlmIC8qIG5vdCBlbWFjcyAqLworKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmVuZCwKKysJCQkJCVBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbyk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICplbmQsCisrCQkJCQlQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmVuZCwKKysJCQkJCVBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbyk7Cisrc3RhdGljIGludCBQUkVGSVgoYmNtcF90cmFuc2xhdGUpIChjb25zdCBDSEFSX1QgKnMxLCBjb25zdCBDSEFSX1QgKnMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGxlbiwKKysJCQkJICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlKTsKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIHJlX21hdGNoXzIgbWF0Y2hlcyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZQIGFnYWluc3QgdGhlCisrICAgdGhlICh2aXJ0dWFsKSBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIgKG9mIGxlbmd0aCBTSVpFMQorKyAgIGFuZCBTSVpFMiwgcmVzcGVjdGl2ZWx5KS4gIFdlIHN0YXJ0IG1hdGNoaW5nIGF0IFBPUywgYW5kIHN0b3AKKysgICBtYXRjaGluZyBhdCBTVE9QLgorKworKyAgIElmIFJFR1MgaXMgbm9uLW51bGwgYW5kIHRoZSBgbm9fc3ViJyBmaWVsZCBvZiBCVUZQIGlzIG5vbnplcm8sIHdlCisrICAgc3RvcmUgb2Zmc2V0cyBmb3IgdGhlIHN1YnN0cmluZyBlYWNoIGdyb3VwIG1hdGNoZWQgaW4gUkVHUy4gIFNlZSB0aGUKKysgICBkb2N1bWVudGF0aW9uIGZvciBleGFjdGx5IGhvdyBtYW55IGdyb3VwcyB3ZSBmaWxsLgorKworKyAgIFdlIHJldHVybiAtMSBpZiBubyBtYXRjaCwgLTIgaWYgYW4gaW50ZXJuYWwgZXJyb3IgKHN1Y2ggYXMgdGhlCisrICAgZmFpbHVyZSBzdGFjayBvdmVyZmxvd2luZykuICBPdGhlcndpc2UsIHdlIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZQorKyAgIG1hdGNoZWQgc3Vic3RyaW5nLiAgKi8KKysKKytpbnQKKytyZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsIGludCBwb3MsCisrICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisreworKyAgaW50IHJlc3VsdDsKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXN1bHQgPSB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLAorKwkJCQkgICAgICBwb3MsIHJlZ3MsIHN0b3AsCisrCQkJCSAgICAgIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmVzdWx0ID0gYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsCisrCQkJCSAgcG9zLCByZWdzLCBzdG9wKTsKKysKKysjaWZuZGVmIFJFR0VYX01BTExPQworKyMgaWZkZWYgQ19BTExPQ0EKKysgIGFsbG9jYSAoMCk7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9tYXRjaF8yLCByZV9tYXRjaF8yKQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrI2lmZGVmIFdDSEFSCisrc3RhdGljIGludCBjb3VudF9tYnNfbGVuZ3RoIChpbnQgKiwgaW50KTsKKysKKysvKiBUaGlzIGNoZWNrIHRoZSBzdWJzdHJpbmcgKGZyb20gMCwgdG8gbGVuZ3RoKSBvZiB0aGUgbXVsdGlieXRlIHN0cmluZywKKysgICB0byB3aGljaCBvZmZzZXRfYnVmZmVyIGNvcnJlc3BvbmQuIEFuZCBjb3VudCBob3cgbWFueSB3Y2hhcl90X2NoYXJhY3RlcnMKKysgICB0aGUgc3Vic3RyaW5nIG9jY3VweS4gV2UgdXNlIG9mZnNldF9idWZmZXIgdG8gb3B0aW1pemF0aW9uLgorKyAgIFNlZSBjb252ZXJ0X21ic190b193Y3MuICAqLworKworK3N0YXRpYyBpbnQKKytjb3VudF9tYnNfbGVuZ3RoKGludCAqb2Zmc2V0X2J1ZmZlciwgaW50IGxlbmd0aCkKKyt7CisrICBpbnQgdXBwZXIsIGxvd2VyOworKworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgc2l6ZSBpcyB2YWxpZC4gICovCisrICBpZiAobGVuZ3RoIDwgMCkKKysgICAgcmV0dXJuIC0xOworKworKyAgaWYgKG9mZnNldF9idWZmZXIgPT0gTlVMTCkKKysgICAgcmV0dXJuIDA7CisrCisrICAvKiBJZiB0aGVyZSBhcmUgbm8gbXVsdGlieXRlIGNoYXJhY3Rlciwgb2Zmc2V0X2J1ZmZlcltpXSA9PSBpLgorKyAgIE9wdG1pemUgZm9yIHRoaXMgY2FzZS4gICovCisrICBpZiAob2Zmc2V0X2J1ZmZlcltsZW5ndGhdID09IGxlbmd0aCkKKysgICAgcmV0dXJuIGxlbmd0aDsKKysKKysgIC8qIFNldCB1cCB1cHBlciB3aXRoIGxlbmd0aC4gKGJlY2F1c2UgZm9yIGFsbCBpLCBvZmZzZXRfYnVmZmVyW2ldID49IGkpICAqLworKyAgdXBwZXIgPSBsZW5ndGg7CisrICBsb3dlciA9IDA7CisrCisrICB3aGlsZSAodHJ1ZSkKKysgICAgeworKyAgICAgIGludCBtaWRkbGUgPSAobG93ZXIgKyB1cHBlcikgLyAyOworKyAgICAgIGlmIChtaWRkbGUgPT0gbG93ZXIgfHwgbWlkZGxlID09IHVwcGVyKQorKwlicmVhazsKKysgICAgICBpZiAob2Zmc2V0X2J1ZmZlclttaWRkbGVdID4gbGVuZ3RoKQorKwl1cHBlciA9IG1pZGRsZTsKKysgICAgICBlbHNlIGlmIChvZmZzZXRfYnVmZmVyW21pZGRsZV0gPCBsZW5ndGgpCisrCWxvd2VyID0gbWlkZGxlOworKyAgICAgIGVsc2UKKysJcmV0dXJuIG1pZGRsZTsKKysgICAgfQorKworKyAgcmV0dXJuIC0xOworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBUaGlzIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gZm9yY2UgYW4gYWxsb2NhIGNsZWFudXAKKysgICBhZnRlcndhcmRzLiAgKi8KKysjaWZkZWYgV0NIQVIKKytzdGF0aWMgaW50Cisrd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzEsIGludCBjc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcyLCBpbnQgY3NpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKwkJCSBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RvcCwKKysgICAgIC8qIHN0cmluZzEgPT0gc3RyaW5nMiA9PSBOVUxMIG1lYW5zIHN0cmluZzEvMiwgc2l6ZTEvMiBhbmQKKysJbWJzX29mZnNldDEvMiBuZWVkIHNldGluZyB1cCBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KKysgICAgIC8qIFdlIG5lZWQgd2NoYXJfdCogYnVmZmVycyBjb3JyZXNwb25kIHRvIGNzdHJpbmcxLCBjc3RyaW5nMi4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgLyogb2Zmc2V0IGJ1ZmZlciBmb3Igb3B0aW1pemF0b2luLiBTZWUgY29udmVydF9tYnNfdG9fd2MuICAqLworKwkJCSBpbnQgKm1ic19vZmZzZXQxLCBpbnQgKm1ic19vZmZzZXQyKQorKyNlbHNlIC8qIEJZVEUgKi8KKytzdGF0aWMgaW50CisrYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKwkJCSAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisrI2VuZGlmIC8qIEJZVEUgKi8KKyt7CisrICAvKiBHZW5lcmFsIHRlbXBvcmFyaWVzLiAgKi8KKysgIGludCBtY250OworKyAgVUNIQVJfVCAqcDE7CisrI2lmZGVmIFdDSEFSCisrICAvKiBUaGV5IGhvbGQgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgKmlzX2JpbmFyeSA9IE5VTEw7CisrICAvKiBJZiB0cnVlLCB3ZSBjYW4ndCBmcmVlIHN0cmluZzEvMiwgbWJzX29mZnNldDEvMi4gICovCisrICBpbnQgY2FudF9mcmVlX3djc19idWYgPSAxOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogSnVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqZW5kMSwgKmVuZDI7CisrCisrICAvKiBQb2ludGVycyBpbnRvIHN0cmluZzEgYW5kIHN0cmluZzIsIGp1c3QgcGFzdCB0aGUgbGFzdCBjaGFyYWN0ZXJzIGluCisrICAgICBlYWNoIHRvIGNvbnNpZGVyIG1hdGNoaW5nLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqZW5kX21hdGNoXzEsICplbmRfbWF0Y2hfMjsKKysKKysgIC8qIFdoZXJlIHdlIGFyZSBpbiB0aGUgZGF0YSwgYW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqZCwgKmRlbmQ7CisrCisrICAvKiBXaGVyZSB3ZSBhcmUgaW4gdGhlIHBhdHRlcm4sIGFuZCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIFVDSEFSX1QgKnBhdHRlcm4sICpwOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZDsKKysjZWxzZSAvKiBCWVRFICovCisrICBVQ0hBUl9UICpwID0gYnVmcC0+YnVmZmVyOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZCA9IHAgKyBidWZwLT51c2VkOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogTWFyayB0aGUgb3Bjb2RlIGp1c3QgYWZ0ZXIgYSBzdGFydF9tZW1vcnksIHNvIHdlIGNhbiB0ZXN0IGZvciBhbgorKyAgICAgZW1wdHkgc3VicGF0dGVybiB3aGVuIHdlIGdldCB0byB0aGUgc3RvcF9tZW1vcnkuICAqLworKyAgVUNIQVJfVCAqanVzdF9wYXN0X3N0YXJ0X21lbSA9IDA7CisrCisrICAvKiBXZSB1c2UgdGhpcyB0byBtYXAgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuICAqLworKyAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlID0gYnVmcC0+dHJhbnNsYXRlOworKworKyAgLyogRmFpbHVyZSBwb2ludCBzdGFjay4gIEVhY2ggcGxhY2UgdGhhdCBjYW4gaGFuZGxlIGEgZmFpbHVyZSBmdXJ0aGVyCisrICAgICBkb3duIHRoZSBsaW5lIHB1c2hlcyBhIGZhaWx1cmUgcG9pbnQgb24gdGhpcyBzdGFjay4gIEl0IGNvbnNpc3RzIG9mCisrICAgICByZXN0YXJ0LCByZWdlbmQsIGFuZCByZWdfaW5mbyBmb3IgYWxsIHJlZ2lzdGVycyBjb3JyZXNwb25kaW5nIHRvCisrICAgICB0aGUgc3ViZXhwcmVzc2lvbnMgd2UncmUgY3VycmVudGx5IGluc2lkZSwgcGx1cyB0aGUgbnVtYmVyIG9mIHN1Y2gKKysgICAgIHJlZ2lzdGVycywgYW5kLCBmaW5hbGx5LCB0d28gY2hhciAqJ3MuICBUaGUgZmlyc3QgY2hhciAqIGlzIHdoZXJlCisrICAgICB0byByZXN1bWUgc2Nhbm5pbmcgdGhlIHBhdHRlcm47IHRoZSBzZWNvbmQgb25lIGlzIHdoZXJlIHRvIHJlc3VtZQorKyAgICAgc2Nhbm5pbmcgdGhlIHN0cmluZ3MuICBJZiB0aGUgbGF0dGVyIGlzIHplcm8sIHRoZSBmYWlsdXJlIHBvaW50IGlzCisrICAgICBhIGBgZHVtbXknJzsgaWYgYSBmYWlsdXJlIGhhcHBlbnMgYW5kIHRoZSBmYWlsdXJlIHBvaW50IGlzIGEgZHVtbXksCisrICAgICBpdCBnZXRzIGRpc2NhcmRlZCBhbmQgdGhlIG5leHQgbmV4dCBvbmUgaXMgdHJpZWQuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGlzIGlzIGdsb2JhbC4gICovCisrICBQUkVGSVgoZmFpbF9zdGFja190eXBlKSBmYWlsX3N0YWNrOworKyNlbmRpZgorKyNpZmRlZiBERUJVRworKyAgc3RhdGljIHVuc2lnbmVkIGZhaWx1cmVfaWQ7CisrICB1bnNpZ25lZCBuZmFpbHVyZV9wb2ludHNfcHVzaGVkID0gMCwgbmZhaWx1cmVfcG9pbnRzX3BvcHBlZCA9IDA7CisrI2VuZGlmCisrCisrI2lmZGVmIFJFTF9BTExPQworKyAgLyogVGhpcyBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgZmFpbHVyZSBzdGFjaywgd2hlbgorKyAgICAgaXQgaXMgYWxsb2NhdGVkIHJlbG9jYXRhYmx5LiAgKi8KKysgIGZhaWxfc3RhY2tfZWx0X3QgKmZhaWx1cmVfc3RhY2tfcHRyOworKyNlbmRpZgorKworKyAgLyogV2UgZmlsbCBhbGwgdGhlIHJlZ2lzdGVycyBpbnRlcm5hbGx5LCBpbmRlcGVuZGVudCBvZiB3aGF0IHdlCisrICAgICByZXR1cm4sIGZvciB1c2UgaW4gYmFja3JlZmVyZW5jZXMuICBUaGUgbnVtYmVyIGhlcmUgaW5jbHVkZXMKKysgICAgIGFuIGVsZW1lbnQgZm9yIHJlZ2lzdGVyIHplcm8uICAqLworKyAgc2l6ZV90IG51bV9yZWdzID0gYnVmcC0+cmVfbnN1YiArIDE7CisrCisrICAvKiBUaGUgY3VycmVudGx5IGFjdGl2ZSByZWdpc3RlcnMuICAqLworKyAgYWN0aXZlX3JlZ190IGxvd2VzdF9hY3RpdmVfcmVnID0gTk9fTE9XRVNUX0FDVElWRV9SRUc7CisrICBhY3RpdmVfcmVnX3QgaGlnaGVzdF9hY3RpdmVfcmVnID0gTk9fSElHSEVTVF9BQ1RJVkVfUkVHOworKworKyAgLyogSW5mb3JtYXRpb24gb24gdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVycy4gVGhlc2UgYXJlIHBvaW50ZXJzIGludG8KKysgICAgIHRoZSBpbnB1dCBzdHJpbmdzOyB0aGV5IHJlY29yZCBqdXN0IHdoYXQgd2FzIG1hdGNoZWQgKG9uIHRoaXMKKysgICAgIGF0dGVtcHQpIGJ5IGEgc3ViZXhwcmVzc2lvbiBwYXJ0IG9mIHRoZSBwYXR0ZXJuLCB0aGF0IGlzLCB0aGUKKysgICAgIHJlZ251bS10aCByZWdzdGFydCBwb2ludGVyIHBvaW50cyB0byB3aGVyZSBpbiB0aGUgcGF0dGVybiB3ZSBiZWdhbgorKyAgICAgbWF0Y2hpbmcgYW5kIHRoZSByZWdudW0tdGggcmVnZW5kIHBvaW50cyB0byByaWdodCBhZnRlciB3aGVyZSB3ZQorKyAgICAgc3RvcHBlZCBtYXRjaGluZyB0aGUgcmVnbnVtLXRoIHN1YmV4cHJlc3Npb24uICAoVGhlIHplcm90aCByZWdpc3RlcgorKyAgICAga2VlcHMgdHJhY2sgb2Ygd2hhdCB0aGUgd2hvbGUgcGF0dGVybiBtYXRjaGVzLikgICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqcmVnc3RhcnQsICoqcmVnZW5kOworKyNlbmRpZgorKworKyAgLyogSWYgYSBncm91cCB0aGF0J3Mgb3BlcmF0ZWQgdXBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IgZmFpbHMgdG8KKysgICAgIG1hdGNoIGFueXRoaW5nLCB0aGVuIHRoZSByZWdpc3RlciBmb3IgaXRzIHN0YXJ0IHdpbGwgbmVlZCB0byBiZQorKyAgICAgcmVzdG9yZWQgYmVjYXVzZSBpdCB3aWxsIGhhdmUgYmVlbiBzZXQgdG8gd2hlcmV2ZXIgaW4gdGhlIHN0cmluZyB3ZQorKyAgICAgYXJlIHdoZW4gd2UgbGFzdCBzZWUgaXRzIG9wZW4tZ3JvdXAgb3BlcmF0b3IuICBTaW1pbGFybHkgZm9yIGEKKysgICAgIHJlZ2lzdGVyJ3MgZW5kLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipvbGRfcmVnc3RhcnQsICoqb2xkX3JlZ2VuZDsKKysjZW5kaWYKKysKKysgIC8qIFRoZSBpc19hY3RpdmUgZmllbGQgb2YgcmVnX2luZm8gaGVscHMgdXMga2VlcCB0cmFjayBvZiB3aGljaCAocG9zc2libHkKKysgICAgIG5lc3RlZCkgc3ViZXhwcmVzc2lvbnMgd2UgYXJlIGN1cnJlbnRseSBpbi4gVGhlIG1hdGNoZWRfc29tZXRoaW5nCisrICAgICBmaWVsZCBvZiByZWdfaW5mb1tyZWdfbnVtXSBoZWxwcyB1cyB0ZWxsIHdoZXRoZXIgb3Igbm90IHdlIGhhdmUKKysgICAgIG1hdGNoZWQgYW55IG9mIHRoZSBwYXR0ZXJuIHNvIGZhciB0aGlzIHRpbWUgdGhyb3VnaCB0aGUgcmVnX251bS10aAorKyAgICAgc3ViZXhwcmVzc2lvbi4gIFRoZXNlIHR3byBmaWVsZHMgZ2V0IHJlc2V0IGVhY2ggdGltZSB0aHJvdWdoIGFueQorKyAgICAgbG9vcCB0aGVpciByZWdpc3RlciBpcyBpbi4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoaXMgaXMgZ2xvYmFsLiAgKi8KKysgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbzsKKysjZW5kaWYKKysKKysgIC8qIFRoZSBmb2xsb3dpbmcgcmVjb3JkIHRoZSByZWdpc3RlciBpbmZvIGFzIGZvdW5kIGluIHRoZSBhYm92ZQorKyAgICAgdmFyaWFibGVzIHdoZW4gd2UgZmluZCBhIG1hdGNoIGJldHRlciB0aGFuIGFueSB3ZSd2ZSBzZWVuIGJlZm9yZS4KKysgICAgIFRoaXMgaGFwcGVucyBhcyB3ZSBiYWNrdHJhY2sgdGhyb3VnaCB0aGUgZmFpbHVyZSBwb2ludHMsIHdoaWNoIGluCisrICAgICB0dXJuIGhhcHBlbnMgb25seSBpZiB3ZSBoYXZlIG5vdCB5ZXQgbWF0Y2hlZCB0aGUgZW50aXJlIHN0cmluZy4gKi8KKysgIHVuc2lnbmVkIGJlc3RfcmVnc19zZXQgPSBmYWxzZTsKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipiZXN0X3JlZ3N0YXJ0LCAqKmJlc3RfcmVnZW5kOworKyNlbmRpZgorKworKyAgLyogTG9naWNhbGx5LCB0aGlzIGlzIGBiZXN0X3JlZ2VuZFswXScuICBCdXQgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHRvCisrICAgICBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhhdCBpZiB3ZSdyZSBub3QgYWxsb2NhdGluZyBzcGFjZSBmb3IgYW55dGhpbmcKKysgICAgIGVsc2UgKHNlZSBiZWxvdykuICBBbHNvLCB3ZSBuZXZlciBuZWVkIGluZm8gYWJvdXQgcmVnaXN0ZXIgMCBmb3IKKysgICAgIGFueSBvZiB0aGUgb3RoZXIgcmVnaXN0ZXIgdmVjdG9ycywgYW5kIGl0IHNlZW1zIHJhdGhlciBhIGtsdWRnZSB0bworKyAgICAgdHJlYXQgYGJlc3RfcmVnZW5kJyBkaWZmZXJlbnRseSB0aGFuIHRoZSByZXN0LiAgU28gd2Uga2VlcCB0cmFjayBvZgorKyAgICAgdGhlIGVuZCBvZiB0aGUgYmVzdCBtYXRjaCBzbyBmYXIgaW4gYSBzZXBhcmF0ZSB2YXJpYWJsZS4gIFdlCisrICAgICBpbml0aWFsaXplIHRoaXMgdG8gTlVMTCBzbyB0aGF0IHdoZW4gd2UgYmFja3RyYWNrIHRoZSBmaXJzdCB0aW1lCisrICAgICBhbmQgbmVlZCB0byB0ZXN0IGl0LCBpdCdzIG5vdCBnYXJiYWdlLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqbWF0Y2hfZW5kID0gTlVMTDsKKysKKysgIC8qIFRoaXMgaGVscHMgU0VUX1JFR1NfTUFUQ0hFRCBhdm9pZCBkb2luZyByZWR1bmRhbnQgd29yay4gICovCisrICBpbnQgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsKKysKKysgIC8qIFVzZWQgd2hlbiB3ZSBwb3AgdmFsdWVzIHdlIGRvbid0IGNhcmUgYWJvdXQuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKnJlZ19kdW1teTsKKysgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mb19kdW1teTsKKysjZW5kaWYKKysKKysjaWZkZWYgREVCVUcKKysgIC8qIENvdW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVycyBwdXNoZWQuICAqLworKyAgdW5zaWduZWQgbnVtX3JlZ3NfcHVzaGVkID0gMDsKKysjZW5kaWYKKysKKysgIERFQlVHX1BSSU5UMSAoIlxuXG5FbnRlcmluZyByZV9tYXRjaF8yLlxuIik7CisrCisrICBJTklUX0ZBSUxfU1RBQ0sgKCk7CisrCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyAgLyogRG8gbm90IGJvdGhlciB0byBpbml0aWFsaXplIGFsbCB0aGUgcmVnaXN0ZXIgdmFyaWFibGVzIGlmIHRoZXJlIGFyZQorKyAgICAgbm8gZ3JvdXBzIGluIHRoZSBwYXR0ZXJuLCBhcyBpdCB0YWtlcyBhIGZhaXIgYW1vdW50IG9mIHRpbWUuICBJZgorKyAgICAgdGhlcmUgYXJlIGdyb3Vwcywgd2UgaW5jbHVkZSBzcGFjZSBmb3IgcmVnaXN0ZXIgMCAodGhlIHdob2xlCisrICAgICBwYXR0ZXJuKSwgZXZlbiB0aG91Z2ggd2UgbmV2ZXIgdXNlIGl0LCBzaW5jZSBpdCBzaW1wbGlmaWVzIHRoZQorKyAgICAgYXJyYXkgaW5kZXhpbmcuICBXZSBzaG91bGQgZml4IHRoaXMuICAqLworKyAgaWYgKGJ1ZnAtPnJlX25zdWIpCisrICAgIHsKKysgICAgICByZWdzdGFydCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICByZWdlbmQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgb2xkX3JlZ3N0YXJ0ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIG9sZF9yZWdlbmQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgYmVzdF9yZWdzdGFydCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBiZXN0X3JlZ2VuZCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICByZWdfaW5mbyA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysgICAgICByZWdfZHVtbXkgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgcmVnX2luZm9fZHVtbXkgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrCisrICAgICAgaWYgKCEocmVnc3RhcnQgJiYgcmVnZW5kICYmIG9sZF9yZWdzdGFydCAmJiBvbGRfcmVnZW5kICYmIHJlZ19pbmZvCisrICAgICAgICAgICAgJiYgYmVzdF9yZWdzdGFydCAmJiBiZXN0X3JlZ2VuZCAmJiByZWdfZHVtbXkgJiYgcmVnX2luZm9fZHVtbXkpKQorKyAgICAgICAgeworKyAgICAgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICAgICAgcmV0dXJuIC0yOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBXZSBtdXN0IGluaXRpYWxpemUgYWxsIG91ciB2YXJpYWJsZXMgdG8gTlVMTCwgc28gdGhhdAorKyAgICAgICAgIGBGUkVFX1ZBUklBQkxFUycgZG9lc24ndCB0cnkgdG8gZnJlZSB0aGVtLiAgKi8KKysgICAgICByZWdzdGFydCA9IHJlZ2VuZCA9IG9sZF9yZWdzdGFydCA9IG9sZF9yZWdlbmQgPSBiZXN0X3JlZ3N0YXJ0CisrICAgICAgICA9IGJlc3RfcmVnZW5kID0gcmVnX2R1bW15ID0gTlVMTDsKKysgICAgICByZWdfaW5mbyA9IHJlZ19pbmZvX2R1bW15ID0gKFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICopIE5VTEw7CisrICAgIH0KKysjZW5kaWYgLyogTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrICAvKiBUaGUgc3RhcnRpbmcgcG9zaXRpb24gaXMgYm9ndXMuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY3NpemUxICsgY3NpemUyKQorKyNlbHNlIC8qIEJZVEUgKi8KKysgIGlmIChwb3MgPCAwIHx8IHBvcyA+IHNpemUxICsgc2l6ZTIpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEFsbG9jYXRlIHdjaGFyX3QgYXJyYXkgZm9yIHN0cmluZzEgYW5kIHN0cmluZzIgYW5kCisrICAgICBmaWxsIHRoZW0gd2l0aCBjb252ZXJ0ZWQgc3RyaW5nLiAgKi8KKysgIGlmIChzdHJpbmcxID09IE5VTEwgJiYgc3RyaW5nMiA9PSBOVUxMKQorKyAgICB7CisrICAgICAgLyogV2UgbmVlZCBzZXRpbmcgdXAgYnVmZmVycyBoZXJlLiAgKi8KKysKKysgICAgICAvKiBXZSBtdXN0IGZyZWUgd2NzIGJ1ZmZlcnMgaW4gdGhpcyBmdW5jdGlvbi4gICovCisrICAgICAgY2FudF9mcmVlX3djc19idWYgPSAwOworKworKyAgICAgIGlmIChjc2l6ZTEgIT0gMCkKKysJeworKwkgIHN0cmluZzEgPSBSRUdFWF9UQUxMT0MgKGNzaXplMSArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDEgPSBSRUdFWF9UQUxMT0MgKGNzaXplMSArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChjc2l6ZTEgKyAxLCBjaGFyKTsKKysJICBpZiAoIXN0cmluZzEgfHwgIW1ic19vZmZzZXQxIHx8ICFpc19iaW5hcnkpCisrCSAgICB7CisrCSAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsKKysJICAgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgICAgIHJldHVybiAtMjsKKysJICAgIH0KKysJfQorKyAgICAgIGlmIChjc2l6ZTIgIT0gMCkKKysJeworKwkgIHN0cmluZzIgPSBSRUdFWF9UQUxMT0MgKGNzaXplMiArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDIgPSBSRUdFWF9UQUxMT0MgKGNzaXplMiArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChjc2l6ZTIgKyAxLCBjaGFyKTsKKysJICBpZiAoIXN0cmluZzIgfHwgIW1ic19vZmZzZXQyIHx8ICFpc19iaW5hcnkpCisrCSAgICB7CisrCSAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsKKysJICAgICAgRlJFRV9WQVIgKHN0cmluZzIpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDIpOworKwkgICAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICAgICAgcmV0dXJuIC0yOworKwkgICAgfQorKwkgIHNpemUyID0gY29udmVydF9tYnNfdG9fd2NzKHN0cmluZzIsIGNzdHJpbmcyLCBjc2l6ZTIsCisrCQkJCSAgICAgbWJzX29mZnNldDIsIGlzX2JpbmFyeSk7CisrCSAgc3RyaW5nMltzaXplMl0gPSBMJ1wwJzsgLyogZm9yIGEgc2VudGluZWwgICovCisrCSAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCX0KKysgICAgfQorKworKyAgLyogV2UgbmVlZCB0byBjYXN0IHBhdHRlcm4gdG8gKHdjaGFyX3QqKSwgYmVjYXVzZSB3ZSBjYXN0ZWQgdGhpcyBjb21waWxlZAorKyAgICAgcGF0dGVybiB0byAoY2hhciopIGluIHJlZ2V4X2NvbXBpbGUuICAqLworKyAgcCA9IHBhdHRlcm4gPSAoQ0hBUl9UKilidWZwLT5idWZmZXI7CisrICBwZW5kID0gKENIQVJfVCopKGJ1ZnAtPmJ1ZmZlciArIGJ1ZnAtPnVzZWQpOworKworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogSW5pdGlhbGl6ZSBzdWJleHByZXNzaW9uIHRleHQgcG9zaXRpb25zIHRvIC0xIHRvIG1hcmsgb25lcyB0aGF0IG5vCisrICAgICBzdGFydF9tZW1vcnkvc3RvcF9tZW1vcnkgaGFzIGJlZW4gc2VlbiBmb3IuIEFsc28gaW5pdGlhbGl6ZSB0aGUKKysgICAgIHJlZ2lzdGVyIGluZm9ybWF0aW9uIHN0cnVjdC4gICovCisrICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBudW1fcmVnczsgbWNudCsrKQorKyAgICB7CisrICAgICAgcmVnc3RhcnRbbWNudF0gPSByZWdlbmRbbWNudF0KKysgICAgICAgID0gb2xkX3JlZ3N0YXJ0W21jbnRdID0gb2xkX3JlZ2VuZFttY250XSA9IFJFR19VTlNFVF9WQUxVRTsKKysKKysgICAgICBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bbWNudF0pID0gTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRTsKKysgICAgICBJU19BQ1RJVkUgKHJlZ19pbmZvW21jbnRdKSA9IDA7CisrICAgICAgTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW21jbnRdKSA9IDA7CisrICAgICAgRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bbWNudF0pID0gMDsKKysgICAgfQorKworKyAgLyogV2UgbW92ZSBgc3RyaW5nMScgaW50byBgc3RyaW5nMicgaWYgdGhlIGxhdHRlcidzIGVtcHR5IC0tIGJ1dCBub3QgaWYKKysgICAgIGBzdHJpbmcxJyBpcyBudWxsLiAgKi8KKysgIGlmIChzaXplMiA9PSAwICYmIHN0cmluZzEgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHN0cmluZzIgPSBzdHJpbmcxOworKyAgICAgIHNpemUyID0gc2l6ZTE7CisrICAgICAgc3RyaW5nMSA9IDA7CisrICAgICAgc2l6ZTEgPSAwOworKyNpZmRlZiBXQ0hBUgorKyAgICAgIG1ic19vZmZzZXQyID0gbWJzX29mZnNldDE7CisrICAgICAgY3NpemUyID0gY3NpemUxOworKyAgICAgIG1ic19vZmZzZXQxID0gTlVMTDsKKysgICAgICBjc2l6ZTEgPSAwOworKyNlbmRpZgorKyAgICB9CisrICBlbmQxID0gc3RyaW5nMSArIHNpemUxOworKyAgZW5kMiA9IHN0cmluZzIgKyBzaXplMjsKKysKKysgIC8qIENvbXB1dGUgd2hlcmUgdG8gc3RvcCBtYXRjaGluZywgd2l0aGluIHRoZSB0d28gc3RyaW5ncy4gICovCisrI2lmZGVmIFdDSEFSCisrICBpZiAoc3RvcCA8PSBjc2l6ZTEpCisrICAgIHsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0MSwgc3RvcCk7CisrICAgICAgZW5kX21hdGNoXzEgPSBzdHJpbmcxICsgbWNudDsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmIChzdG9wID4gY3NpemUxICsgY3NpemUyKQorKwlzdG9wID0gY3NpemUxICsgY3NpemUyOworKyAgICAgIGVuZF9tYXRjaF8xID0gZW5kMTsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0Miwgc3RvcC1jc2l6ZTEpOworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMiArIG1jbnQ7CisrICAgIH0KKysgIGlmIChtY250IDwgMCkKKysgICAgeyAvKiBjb3VudF9tYnNfbGVuZ3RoIHJldHVybiBlcnJvci4gICovCisrICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrI2Vsc2UKKysgIGlmIChzdG9wIDw9IHNpemUxKQorKyAgICB7CisrICAgICAgZW5kX21hdGNoXzEgPSBzdHJpbmcxICsgc3RvcDsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGVuZF9tYXRjaF8xID0gZW5kMTsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzIgKyBzdG9wIC0gc2l6ZTE7CisrICAgIH0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIGBwJyBzY2FucyB0aHJvdWdoIHRoZSBwYXR0ZXJuIGFzIGBkJyBzY2FucyB0aHJvdWdoIHRoZSBkYXRhLgorKyAgICAgYGRlbmQnIGlzIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZyB0aGF0IGBkJyBwb2ludHMgd2l0aGluLiAgYGQnCisrICAgICBpcyBhZHZhbmNlZCBpbnRvIHRoZSBmb2xsb3dpbmcgaW5wdXQgc3RyaW5nIHdoZW5ldmVyIG5lY2Vzc2FyeSwgYnV0CisrICAgICB0aGlzIGhhcHBlbnMgYmVmb3JlIGZldGNoaW5nOyB0aGVyZWZvcmUsIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisrICAgICBsb29wLCBgZCcgY2FuIGJlIHBvaW50aW5nIGF0IHRoZSBlbmQgb2YgYSBzdHJpbmcsIGJ1dCBpdCBjYW5ub3QKKysgICAgIGVxdWFsIGBzdHJpbmcyJy4gICovCisrI2lmZGVmIFdDSEFSCisrICBpZiAoc2l6ZTEgPiAwICYmIHBvcyA8PSBjc2l6ZTEpCisrICAgIHsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0MSwgcG9zKTsKKysgICAgICBkID0gc3RyaW5nMSArIG1jbnQ7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8xOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0MiwgcG9zLWNzaXplMSk7CisrICAgICAgZCA9IHN0cmluZzIgKyBtY250OworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysgICAgfQorKworKyAgaWYgKG1jbnQgPCAwKQorKyAgICB7IC8qIGNvdW50X21ic19sZW5ndGggcmV0dXJuIGVycm9yLiAgKi8KKysgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZWxzZQorKyAgaWYgKHNpemUxID4gMCAmJiBwb3MgPD0gc2l6ZTEpCisrICAgIHsKKysgICAgICBkID0gc3RyaW5nMSArIHBvczsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzE7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGQgPSBzdHJpbmcyICsgcG9zIC0gc2l6ZTE7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKyAgICB9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICBERUJVR19QUklOVDEgKCJUaGUgY29tcGlsZWQgcGF0dGVybiBpczpcbiIpOworKyAgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTiAoYnVmcCwgcCwgcGVuZCk7CisrICBERUJVR19QUklOVDEgKCJUaGUgc3RyaW5nIHRvIG1hdGNoIGlzOiBgIik7CisrICBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HIChkLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIpOworKyAgREVCVUdfUFJJTlQxICgiJ1xuIik7CisrCisrICAvKiBUaGlzIGxvb3BzIG92ZXIgcGF0dGVybiBjb21tYW5kcy4gIEl0IGV4aXRzIGJ5IHJldHVybmluZyBmcm9tIHRoZQorKyAgICAgZnVuY3Rpb24gaWYgdGhlIG1hdGNoIGlzIGNvbXBsZXRlLCBvciBpdCBkcm9wcyB0aHJvdWdoIGlmIHRoZSBtYXRjaAorKyAgICAgZmFpbHMgYXQgdGhpcyBzdGFydGluZyBwb2ludCBpbiB0aGUgaW5wdXQgZGF0YS4gICovCisrICBmb3IgKDs7KQorKyAgICB7CisrI2lmZGVmIF9MSUJDCisrICAgICAgREVCVUdfUFJJTlQyICgiXG4lcDogIiwgcCk7CisrI2Vsc2UKKysgICAgICBERUJVR19QUklOVDIgKCJcbjB4JXg6ICIsIHApOworKyNlbmRpZgorKworKyAgICAgIGlmIChwID09IHBlbmQpCisrCXsgLyogRW5kIG9mIHBhdHRlcm4gbWVhbnMgd2UgbWlnaHQgaGF2ZSBzdWNjZWVkZWQuICAqLworKyAgICAgICAgICBERUJVR19QUklOVDEgKCJlbmQgb2YgcGF0dGVybiAuLi4gIik7CisrCisrCSAgLyogSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIHRoZSBlbnRpcmUgc3RyaW5nLCBhbmQgd2Ugd2FudCB0aGUKKysgICAgICAgICAgICAgbG9uZ2VzdCBtYXRjaCwgdHJ5IGJhY2t0cmFja2luZy4gICovCisrICAgICAgICAgIGlmIChkICE9IGVuZF9tYXRjaF8yKQorKwkgICAgeworKwkgICAgICAvKiAxIGlmIHRoaXMgbWF0Y2ggZW5kcyBpbiB0aGUgc2FtZSBzdHJpbmcgKHN0cmluZzEgb3Igc3RyaW5nMikKKysJCSBhcyB0aGUgYmVzdCBwcmV2aW91cyBtYXRjaC4gICovCisrCSAgICAgIGJvb2xlYW4gc2FtZV9zdHJfcCA9IChGSVJTVF9TVFJJTkdfUCAobWF0Y2hfZW5kKQorKwkJCQkgICAgPT0gTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HKTsKKysJICAgICAgLyogMSBpZiB0aGlzIG1hdGNoIGlzIHRoZSBiZXN0IHNlZW4gc28gZmFyLiAgKi8KKysJICAgICAgYm9vbGVhbiBiZXN0X21hdGNoX3A7CisrCisrCSAgICAgIC8qIEFJWCBjb21waWxlciBnb3QgY29uZnVzZWQgd2hlbiB0aGlzIHdhcyBjb21iaW5lZAorKwkJIHdpdGggdGhlIHByZXZpb3VzIGRlY2xhcmF0aW9uLiAgKi8KKysJICAgICAgaWYgKHNhbWVfc3RyX3ApCisrCQliZXN0X21hdGNoX3AgPSBkID4gbWF0Y2hfZW5kOworKwkgICAgICBlbHNlCisrCQliZXN0X21hdGNoX3AgPSAhTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HOworKworKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiYmFja3RyYWNraW5nLlxuIik7CisrCisrICAgICAgICAgICAgICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpCisrICAgICAgICAgICAgICAgIHsgLyogTW9yZSBmYWlsdXJlIHBvaW50cyB0byB0cnkuICAqLworKworKyAgICAgICAgICAgICAgICAgIC8qIElmIGV4Y2VlZHMgYmVzdCBtYXRjaCBzbyBmYXIsIHNhdmUgaXQuICAqLworKyAgICAgICAgICAgICAgICAgIGlmICghYmVzdF9yZWdzX3NldCB8fCBiZXN0X21hdGNoX3ApCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgIGJlc3RfcmVnc19zZXQgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9lbmQgPSBkOworKworKyAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCJcblNBVklORyBtYXRjaCBhcyBiZXN0IHNvIGZhci5cbiIpOworKworKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBudW1fcmVnczsgbWNudCsrKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfcmVnc3RhcnRbbWNudF0gPSByZWdzdGFydFttY250XTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfcmVnZW5kW21jbnRdID0gcmVnZW5kW21jbnRdOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIElmIG5vIGZhaWx1cmUgcG9pbnRzLCBkb24ndCByZXN0b3JlIGdhcmJhZ2UuICBBbmQgaWYKKysgICAgICAgICAgICAgICAgIGxhc3QgbWF0Y2ggaXMgcmVhbCBiZXN0IG1hdGNoLCBkb24ndCByZXN0b3JlIHNlY29uZAorKyAgICAgICAgICAgICAgICAgYmVzdCBvbmUuICovCisrICAgICAgICAgICAgICBlbHNlIGlmIChiZXN0X3JlZ3Nfc2V0ICYmICFiZXN0X21hdGNoX3ApCisrICAgICAgICAgICAgICAgIHsKKysgIAkgICAgICAgIHJlc3RvcmVfYmVzdF9yZWdzOgorKyAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgYmVzdCBtYXRjaC4gIEl0IG1heSBoYXBwZW4gdGhhdCBgZGVuZCA9PQorKyAgICAgICAgICAgICAgICAgICAgIGVuZF9tYXRjaF8xJyB3aGlsZSB0aGUgcmVzdG9yZWQgZCBpcyBpbiBzdHJpbmcyLgorKyAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybiBgeC4qeS4qeicgYWdhaW5zdCB0aGUKKysgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzIGB4LScgYW5kIGB5LXotJywgaWYgdGhlIHR3byBzdHJpbmdzIGFyZQorKyAgICAgICAgICAgICAgICAgICAgIG5vdCBjb25zZWN1dGl2ZSBpbiBtZW1vcnkuICAqLworKyAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIlJlc3RvcmluZyBiZXN0IHJlZ2lzdGVycy5cbiIpOworKworKyAgICAgICAgICAgICAgICAgIGQgPSBtYXRjaF9lbmQ7CisrICAgICAgICAgICAgICAgICAgZGVuZCA9ICgoZCA+PSBzdHJpbmcxICYmIGQgPD0gZW5kMSkKKysJCSAgICAgICAgICAgPyBlbmRfbWF0Y2hfMSA6IGVuZF9tYXRjaF8yKTsKKysKKysJCSAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgbnVtX3JlZ3M7IG1jbnQrKykKKysJCSAgICB7CisrCQkgICAgICByZWdzdGFydFttY250XSA9IGJlc3RfcmVnc3RhcnRbbWNudF07CisrCQkgICAgICByZWdlbmRbbWNudF0gPSBiZXN0X3JlZ2VuZFttY250XTsKKysJCSAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9IC8qIGQgIT0gZW5kX21hdGNoXzIgKi8KKysKKysJc3VjY2VlZF9sYWJlbDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiQWNjZXB0aW5nIG1hdGNoLlxuIik7CisrICAgICAgICAgIC8qIElmIGNhbGxlciB3YW50cyByZWdpc3RlciBjb250ZW50cyBkYXRhIGJhY2ssIGRvIGl0LiAgKi8KKysgICAgICAgICAgaWYgKHJlZ3MgJiYgIWJ1ZnAtPm5vX3N1YikKKysJICAgIHsKKysJICAgICAgLyogSGF2ZSB0aGUgcmVnaXN0ZXIgZGF0YSBhcnJheXMgYmVlbiBhbGxvY2F0ZWQ/ICAqLworKyAgICAgICAgICAgICAgaWYgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQpCisrICAgICAgICAgICAgICAgIHsgLyogTm8uICBTbyBhbGxvY2F0ZSB0aGVtIHdpdGggbWFsbG9jLiAgV2UgbmVlZCBvbmUKKysgICAgICAgICAgICAgICAgICAgICBleHRyYSBlbGVtZW50IGJleW9uZCBgbnVtX3JlZ3MnIGZvciB0aGUgYC0xJyBtYXJrZXIKKysgICAgICAgICAgICAgICAgICAgICBHTlUgY29kZSB1c2VzLiAgKi8KKysgICAgICAgICAgICAgICAgICByZWdzLT5udW1fcmVncyA9IE1BWCAoUkVfTlJFR1MsIG51bV9yZWdzICsgMSk7CisrICAgICAgICAgICAgICAgICAgcmVncy0+c3RhcnQgPSBUQUxMT0MgKHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgcmVncy0+ZW5kID0gVEFMTE9DIChyZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgIGlmIChyZWdzLT5zdGFydCA9PSBOVUxMIHx8IHJlZ3MtPmVuZCA9PSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKwkJICAgICAgcmV0dXJuIC0yOworKwkJICAgIH0KKysgICAgICAgICAgICAgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfUkVBTExPQ0FURTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgZWxzZSBpZiAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19SRUFMTE9DQVRFKQorKyAgICAgICAgICAgICAgICB7IC8qIFllcy4gIElmIHdlIG5lZWQgbW9yZSBlbGVtZW50cyB0aGFuIHdlcmUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCwgcmVhbGxvY2F0ZSB0aGVtLiAgSWYgd2UgbmVlZCBmZXdlciwganVzdAorKyAgICAgICAgICAgICAgICAgICAgIGxlYXZlIGl0IGFsb25lLiAgKi8KKysgICAgICAgICAgICAgICAgICBpZiAocmVncy0+bnVtX3JlZ3MgPCBudW1fcmVncyArIDEpCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgIHJlZ3MtPm51bV9yZWdzID0gbnVtX3JlZ3MgKyAxOworKyAgICAgICAgICAgICAgICAgICAgICBSRVRBTExPQyAocmVncy0+c3RhcnQsIHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgICAgIFJFVEFMTE9DIChyZWdzLT5lbmQsIHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWdzLT5zdGFydCA9PSBOVUxMIHx8IHJlZ3MtPmVuZCA9PSBOVUxMKQorKwkJCXsKKysJCQkgIEZSRUVfVkFSSUFCTEVTICgpOworKwkJCSAgcmV0dXJuIC0yOworKwkJCX0KKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgZWxzZQorKwkJeworKwkJICAvKiBUaGVzZSBicmFjZXMgZmVuZCBvZmYgYSAiZW1wdHkgYm9keSBpbiBhbiBlbHNlLXN0YXRlbWVudCIKKysJCSAgICAgd2FybmluZyB1bmRlciBHQ0Mgd2hlbiBhc3NlcnQgZXhwYW5kcyB0byBub3RoaW5nLiAgKi8KKysJCSAgYXNzZXJ0IChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX0ZJWEVEKTsKKysJCX0KKysKKysgICAgICAgICAgICAgIC8qIENvbnZlcnQgdGhlIHBvaW50ZXIgZGF0YSBpbiBgcmVnc3RhcnQnIGFuZCBgcmVnZW5kJyB0bworKyAgICAgICAgICAgICAgICAgaW5kaWNlcy4gIFJlZ2lzdGVyIHplcm8gaGFzIHRvIGJlIHNldCBkaWZmZXJlbnRseSwKKysgICAgICAgICAgICAgICAgIHNpbmNlIHdlIGhhdmVuJ3Qga2VwdCB0cmFjayBvZiBhbnkgaW5mbyBmb3IgaXQuICAqLworKyAgICAgICAgICAgICAgaWYgKHJlZ3MtPm51bV9yZWdzID4gMCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0WzBdID0gcG9zOworKyNpZmRlZiBXQ0hBUgorKwkJICBpZiAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HKQorKwkJICAgIHJlZ3MtPmVuZFswXSA9IG1ic19vZmZzZXQxICE9IE5VTEwgPworKwkJCQkJbWJzX29mZnNldDFbZC1zdHJpbmcxXSA6IDA7CisrCQkgIGVsc2UKKysJCSAgICByZWdzLT5lbmRbMF0gPSBjc2l6ZTEgKyAobWJzX29mZnNldDIgIT0gTlVMTCA/CisrCQkJCQkgICAgIG1ic19vZmZzZXQyW2Qtc3RyaW5nMl0gOiAwKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgIHJlZ3MtPmVuZFswXSA9IChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcKKysJCQkJICA/ICgocmVnb2ZmX3QpIChkIC0gc3RyaW5nMSkpCisrCQkJICAgICAgICAgIDogKChyZWdvZmZfdCkgKGQgLSBzdHJpbmcyICsgc2l6ZTEpKSk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIEdvIHRocm91Z2ggdGhlIGZpcnN0IGBtaW4gKG51bV9yZWdzLCByZWdzLT5udW1fcmVncyknCisrICAgICAgICAgICAgICAgICByZWdpc3RlcnMsIHNpbmNlIHRoYXQgaXMgYWxsIHdlIGluaXRpYWxpemVkLiAgKi8KKysJICAgICAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgTUlOIChudW1fcmVncywgcmVncy0+bnVtX3JlZ3MpOworKwkJICAgbWNudCsrKQorKwkJeworKyAgICAgICAgICAgICAgICAgIGlmIChSRUdfVU5TRVQgKHJlZ3N0YXJ0W21jbnRdKSB8fCBSRUdfVU5TRVQgKHJlZ2VuZFttY250XSkpCisrICAgICAgICAgICAgICAgICAgICByZWdzLT5zdGFydFttY250XSA9IHJlZ3MtPmVuZFttY250XSA9IC0xOworKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIHsKKysJCSAgICAgIHJlZ3MtPnN0YXJ0W21jbnRdCisrCQkJPSAocmVnb2ZmX3QpIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdzdGFydFttY250XSk7CisrICAgICAgICAgICAgICAgICAgICAgIHJlZ3MtPmVuZFttY250XQorKwkJCT0gKHJlZ29mZl90KSBQT0lOVEVSX1RPX09GRlNFVCAocmVnZW5kW21jbnRdKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysJCX0KKysKKysgICAgICAgICAgICAgIC8qIElmIHRoZSByZWdzIHN0cnVjdHVyZSB3ZSByZXR1cm4gaGFzIG1vcmUgZWxlbWVudHMgdGhhbgorKyAgICAgICAgICAgICAgICAgd2VyZSBpbiB0aGUgcGF0dGVybiwgc2V0IHRoZSBleHRyYSBlbGVtZW50cyB0byAtMS4gIElmCisrICAgICAgICAgICAgICAgICB3ZSAocmUpYWxsb2NhdGVkIHRoZSByZWdpc3RlcnMsIHRoaXMgaXMgdGhlIGNhc2UsCisrICAgICAgICAgICAgICAgICBiZWNhdXNlIHdlIGFsd2F5cyBhbGxvY2F0ZSBlbm91Z2ggdG8gaGF2ZSBhdCBsZWFzdCBvbmUKKysgICAgICAgICAgICAgICAgIC0xIGF0IHRoZSBlbmQuICAqLworKyAgICAgICAgICAgICAgZm9yIChtY250ID0gbnVtX3JlZ3M7ICh1bnNpZ25lZCkgbWNudCA8IHJlZ3MtPm51bV9yZWdzOyBtY250KyspCisrICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0W21jbnRdID0gcmVncy0+ZW5kW21jbnRdID0gLTE7CisrCSAgICB9IC8qIHJlZ3MgJiYgIWJ1ZnAtPm5vX3N1YiAqLworKworKyAgICAgICAgICBERUJVR19QUklOVDQgKCIldSBmYWlsdXJlIHBvaW50cyBwdXNoZWQsICV1IHBvcHBlZCAoJXUgcmVtYWluKS5cbiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCwgbmZhaWx1cmVfcG9pbnRzX3BvcHBlZCwKKysgICAgICAgICAgICAgICAgICAgICAgICBuZmFpbHVyZV9wb2ludHNfcHVzaGVkIC0gbmZhaWx1cmVfcG9pbnRzX3BvcHBlZCk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiV1IHJlZ2lzdGVycyBwdXNoZWQuXG4iLCBudW1fcmVnc19wdXNoZWQpOworKworKyNpZmRlZiBXQ0hBUgorKwkgIGlmIChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcpCisrCSAgICBtY250ID0gbWJzX29mZnNldDEgIT0gTlVMTCA/IG1ic19vZmZzZXQxW2Qtc3RyaW5nMV0gOiAwOworKwkgIGVsc2UKKysJICAgIG1jbnQgPSAobWJzX29mZnNldDIgIT0gTlVMTCA/IG1ic19vZmZzZXQyW2Qtc3RyaW5nMl0gOiAwKSArCisrCQkJY3NpemUxOworKyAgICAgICAgICBtY250IC09IHBvczsKKysjZWxzZQorKyAgICAgICAgICBtY250ID0gZCAtIHBvcyAtIChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcKKysJCQkgICAgPyBzdHJpbmcxCisrCQkJICAgIDogc3RyaW5nMiAtIHNpemUxKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiUmV0dXJuaW5nICVkIGZyb20gcmVfbWF0Y2hfMi5cbiIsIG1jbnQpOworKworKyAgICAgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICAgICAgcmV0dXJuIG1jbnQ7CisrICAgICAgICB9CisrCisrICAgICAgLyogT3RoZXJ3aXNlIG1hdGNoIG5leHQgcGF0dGVybiBjb21tYW5kLiAgKi8KKysgICAgICBzd2l0Y2ggKFNXSVRDSF9FTlVNX0NBU1QgKChyZV9vcGNvZGVfdCkgKnArKykpCisrCXsKKysgICAgICAgIC8qIElnbm9yZSB0aGVzZS4gIFVzZWQgdG8gaWdub3JlIHRoZSBuIG9mIHN1Y2NlZWRfbidzIHdoaWNoCisrICAgICAgICAgICBjdXJyZW50bHkgaGF2ZSBuID09IDAuICAqLworKyAgICAgICAgY2FzZSBub19vcDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vX29wLlxuIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHN1Y2NlZWQ6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBzdWNjZWVkLlxuIik7CisrCSAgZ290byBzdWNjZWVkX2xhYmVsOworKworKyAgICAgICAgLyogTWF0Y2ggdGhlIG5leHQgbiBwYXR0ZXJuIGNoYXJhY3RlcnMgZXhhY3RseS4gIFRoZSBmb2xsb3dpbmcKKysgICAgICAgICAgIGJ5dGUgaW4gdGhlIHBhdHRlcm4gZGVmaW5lcyBuLCBhbmQgdGhlIG4gYnl0ZXMgYWZ0ZXIgdGhhdAorKyAgICAgICAgICAgYXJlIHRoZSBjaGFyYWN0ZXJzIHRvIG1hdGNoLiAgKi8KKysJY2FzZSBleGFjdG46CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCWNhc2UgZXhhY3RuX2JpbjoKKysjZW5kaWYKKysJICBtY250ID0gKnArKzsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGV4YWN0biAlZC5cbiIsIG1jbnQpOworKworKyAgICAgICAgICAvKiBUaGlzIGlzIHdyaXR0ZW4gb3V0IGFzIGFuIGlmLWVsc2Ugc28gd2UgZG9uJ3Qgd2FzdGUgdGltZQorKyAgICAgICAgICAgICB0ZXN0aW5nIGB0cmFuc2xhdGUnIGluc2lkZSB0aGUgbG9vcC4gICovCisrICAgICAgICAgIGlmICh0cmFuc2xhdGUpCisrCSAgICB7CisrCSAgICAgIGRvCisrCQl7CisrCQkgIFBSRUZFVENIICgpOworKyNpZmRlZiBXQ0hBUgorKwkJICBpZiAoKmQgPD0gMHhmZikKKysJCSAgICB7CisrCQkgICAgICBpZiAoKFVDSEFSX1QpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKmQrK10KKysJCQkgICE9IChVQ0hBUl9UKSAqcCsrKQorKwkJCWdvdG8gZmFpbDsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICBpZiAoKmQrKyAhPSAoQ0hBUl9UKSAqcCsrKQorKwkJCWdvdG8gZmFpbDsKKysJCSAgICB9CisrI2Vsc2UKKysJCSAgaWYgKChVQ0hBUl9UKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpICpkKytdCisrCQkgICAgICAhPSAoVUNIQVJfVCkgKnArKykKKysgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysJCX0KKysJICAgICAgd2hpbGUgKC0tbWNudCk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBkbworKwkJeworKwkJICBQUkVGRVRDSCAoKTsKKysJCSAgaWYgKCpkKysgIT0gKENIQVJfVCkgKnArKykgZ290byBmYWlsOworKwkJfQorKwkgICAgICB3aGlsZSAoLS1tY250KTsKKysJICAgIH0KKysJICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIC8qIE1hdGNoIGFueSBjaGFyYWN0ZXIgZXhjZXB0IHBvc3NpYmx5IGEgbmV3bGluZSBvciBhIG51bGwuICAqLworKwljYXNlIGFueWNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBhbnljaGFyLlxuIik7CisrCisrICAgICAgICAgIFBSRUZFVENIICgpOworKworKyAgICAgICAgICBpZiAoKCEoYnVmcC0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpICYmIFRSQU5TTEFURSAoKmQpID09ICdcbicpCisrICAgICAgICAgICAgICB8fCAoYnVmcC0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMICYmIFRSQU5TTEFURSAoKmQpID09ICdcMDAwJykpCisrCSAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgTWF0Y2hlZCBgJWxkJy5cbiIsIChsb25nIGludCkgKmQpOworKyAgICAgICAgICBkKys7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2UgY2hhcnNldDoKKysJY2FzZSBjaGFyc2V0X25vdDoKKysJICB7CisrCSAgICByZWdpc3RlciBVQ0hBUl9UIGM7CisrI2lmZGVmIFdDSEFSCisrCSAgICB1bnNpZ25lZCBpbnQgaSwgY2hhcl9jbGFzc19sZW5ndGgsIGNvbGxfc3ltYm9sX2xlbmd0aCwKKysgICAgICAgICAgICAgIGVxdWl2X2NsYXNzX2xlbmd0aCwgcmFuZ2VzX2xlbmd0aCwgY2hhcnNfbGVuZ3RoLCBsZW5ndGg7CisrCSAgICBDSEFSX1QgKndvcmtwLCAqd29ya3AyLCAqY2hhcnNldF90b3A7CisrI2RlZmluZSBXT1JLX0JVRkZFUl9TSVpFIDEyOAorKyAgICAgICAgICAgIENIQVJfVCBzdHJfYnVmW1dPUktfQlVGRkVSX1NJWkVdOworKyMgaWZkZWYgX0xJQkMKKysJICAgIHVpbnQzMl90IG5ydWxlczsKKysjIGVuZGlmIC8qIF9MSUJDICovCisrI2VuZGlmIC8qIFdDSEFSICovCisrCSAgICBib29sZWFuIG5lZ2F0ZSA9IChyZV9vcGNvZGVfdCkgKihwIC0gMSkgPT0gY2hhcnNldF9ub3Q7CisrCisrICAgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGNoYXJzZXQlcy5cbiIsIG5lZ2F0ZSA/ICJfbm90IiA6ICIiKTsKKysJICAgIFBSRUZFVENIICgpOworKwkgICAgYyA9IFRSQU5TTEFURSAoKmQpOyAvKiBUaGUgY2hhcmFjdGVyIHRvIG1hdGNoLiAgKi8KKysjaWZkZWYgV0NIQVIKKysjIGlmZGVmIF9MSUJDCisrCSAgICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYgLyogX0xJQkMgKi8KKysJICAgIGNoYXJzZXRfdG9wID0gcCAtIDE7CisrCSAgICBjaGFyX2NsYXNzX2xlbmd0aCA9ICpwKys7CisrCSAgICBjb2xsX3N5bWJvbF9sZW5ndGggPSAqcCsrOworKwkgICAgZXF1aXZfY2xhc3NfbGVuZ3RoID0gKnArKzsKKysJICAgIHJhbmdlc19sZW5ndGggPSAqcCsrOworKwkgICAgY2hhcnNfbGVuZ3RoID0gKnArKzsKKysJICAgIC8qIHAgcG9pbnRzIGNoYXJzZXRbNl0sIHNvIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uCisrCSAgICAgICAoY2hhcnNldFtsK20rbisybytrK3AnXSkgZXF1YWxzIHBbbCttK24rMipvK3AnXSwKKysJICAgICAgIHdoZXJlIGw9bGVuZ3RoIG9mIGNoYXJfY2xhc3NlcywgbT1sZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbCwKKysJICAgICAgIG49ZXF1aXZhbGVuY2VfY2xhc3MsIG89bGVuZ3RoIG9mIGNoYXJfcmFuZ2UsCisrCSAgICAgICBwJz1sZW5ndGggb2YgY2hhcmFjdGVyLiAgKi8KKysJICAgIHdvcmtwID0gcDsKKysJICAgIC8qIFVwZGF0ZSBwIHRvIGluZGljYXRlIHRoZSBuZXh0IGluc3RydWN0aW9uLiAgKi8KKysJICAgIHAgKz0gY2hhcl9jbGFzc19sZW5ndGggKyBjb2xsX3N5bWJvbF9sZW5ndGgrIGVxdWl2X2NsYXNzX2xlbmd0aCArCisrICAgICAgICAgICAgICAyKnJhbmdlc19sZW5ndGggKyBjaGFyc19sZW5ndGg7CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyX2NsYXNzPyAgKi8KKysJICAgIGZvciAoaSA9IDA7IGkgPCBjaGFyX2NsYXNzX2xlbmd0aCA7IGkgKz0gQ0hBUl9DTEFTU19TSVpFKQorKwkgICAgICB7CisrCQl3Y3R5cGVfdCB3Y3R5cGU7CisrCQl1aW50cHRyX3QgYWxpZ25lZHAgPSAoKHVpbnRwdHJfdCl3b3JrcAorKwkJCQkgICAgICArIF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpCisrCQkgIAkJICAgICAgJiB+KHVpbnRwdHJfdCkoX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSk7CisrCQl3Y3R5cGUgPSAqKCh3Y3R5cGVfdCopYWxpZ25lZHApOworKwkJd29ya3AgKz0gQ0hBUl9DTEFTU19TSVpFOworKyMgaWZkZWYgX0xJQkMKKysJCWlmIChfX2lzd2N0eXBlKCh3aW50X3QpYywgd2N0eXBlKSkKKysJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKyMgZWxzZQorKwkJaWYgKGlzd2N0eXBlKCh3aW50X3QpYywgd2N0eXBlKSkKKysJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKyMgZW5kaWYKKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY29sbGF0aW5nX3N5bWJvbD8gICovCisrIyBpZmRlZiBfTElCQworKwkgICAgaWYgKG5ydWxlcyAhPSAwKQorKwkgICAgICB7CisrCQljb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGNvbGxfc3ltYm9sX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDsKKysJCSAgICAgd29ya3ArKykKKysJCSAgeworKwkJICAgIGludDMyX3QgKndleHRyYTsKKysJCSAgICB3ZXh0cmEgPSAoaW50MzJfdCopKGV4dHJhICsgKndvcmtwKyspOworKwkJICAgIGZvciAoaSA9IDA7IGkgPCAqd2V4dHJhOyArK2kpCisrCQkgICAgICBpZiAoVFJBTlNMQVRFKGRbaV0pICE9IHdleHRyYVsxICsgaV0pCisrCQkJYnJlYWs7CisrCisrCQkgICAgaWYgKGkgPT0gKndleHRyYSkKKysJCSAgICAgIHsKKysJCQkvKiBVcGRhdGUgZCwgaG93ZXZlciBkIHdpbGwgYmUgaW5jcmVtZW50ZWQgYXQKKysJCQkgICBjaGFyX3NldF9tYXRjaGVkOiwgd2UgZGVjcmVtZW50IGQgaGVyZS4gICovCisrCQkJZCArPSBpIC0gMTsKKysJCQlnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgICAgICB9CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgZWxzZSAvKiAobnJ1bGVzID09IDApICovCisrIyBlbmRpZgorKwkgICAgICAvKiBJZiB3ZSBjYW4ndCBsb29rIHVwIGNvbGxhdGlvbiBkYXRhLCB3ZSB1c2Ugd2NzY29sbAorKwkJIGluc3RlYWQuICAqLworKwkgICAgICB7CisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgY29sbF9zeW1ib2xfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOykKKysJCSAgeworKwkJICAgIGNvbnN0IENIQVJfVCAqYmFja3VwX2QgPSBkLCAqYmFja3VwX2RlbmQgPSBkZW5kOworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBsZW5ndGggPSBfX3djc2xlbiAod29ya3ApOworKyMgZWxzZQorKwkJICAgIGxlbmd0aCA9IHdjc2xlbiAod29ya3ApOworKyMgZW5kaWYKKysKKysJCSAgICAvKiBJZiB3Y3Njb2xsKHRoZSBjb2xsYXRpbmcgc3ltYm9sLCB3aG9sZSBzdHJpbmcpID4gMCwKKysJCSAgICAgICBhbnkgc3Vic3RyaW5nIG9mIHRoZSBzdHJpbmcgbmV2ZXIgbWF0Y2ggd2l0aCB0aGUKKysJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgaWYgKF9fd2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVsc2UKKysJCSAgICBpZiAod2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVuZGlmCisrCQkgICAgICB7CisrCQkJd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCQljb250aW51ZTsKKysJCSAgICAgIH0KKysKKysJCSAgICAvKiBGaXJzdCwgd2UgY29tcGFyZSB0aGUgY29sbGF0aW5nIHN5bWJvbCB3aXRoCisrCQkgICAgICAgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nLgorKwkJICAgICAgIElmIGl0IGRvbid0IG1hdGNoLCB3ZSBhZGQgdGhlIG5leHQgY2hhcmFjdGVyIHRvCisrCQkgICAgICAgdGhlIGNvbXBhcmUgYnVmZmVyIGluIHR1cm4uICAqLworKwkJICAgIGZvciAoaSA9IDAgOyBpIDwgV09SS19CVUZGRVJfU0laRS0xIDsgaSsrLCBkKyspCisrCQkgICAgICB7CisrCQkJaW50IG1hdGNoOworKwkJCWlmIChkID09IGRlbmQpCisrCQkJICB7CisrCQkJICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICBkID0gc3RyaW5nMjsKKysJCQkgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJCSAgfQorKworKwkJCS8qIGFkZCBuZXh0IGNoYXJhY3RlciB0byB0aGUgY29tcGFyZSBidWZmZXIuICAqLworKwkJCXN0cl9idWZbaV0gPSBUUkFOU0xBVEUoKmQpOworKwkJCXN0cl9idWZbaSsxXSA9ICdcMCc7CisrCisrIyBpZmRlZiBfTElCQworKwkJCW1hdGNoID0gX193Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbHNlCisrCQkJbWF0Y2ggPSB3Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbmRpZgorKwkJCWlmIChtYXRjaCA9PSAwKQorKwkJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKworKwkJCWlmIChtYXRjaCA8IDApCisrCQkJICAvKiAoc3RyX2J1ZiA+IHdvcmtwKSBpbmRpY2F0ZSAoc3RyX2J1ZiArIFggPiB3b3JrcCksCisrCQkJICAgICBiZWNhdXNlIGZvciBhbGwgWCAoc3RyX2J1ZiArIFggPiBzdHJfYnVmKS4KKysJCQkgICAgIFNvIHdlIGRvbid0IG5lZWQgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCQkgIGJyZWFrOworKworKwkJCS8qIE90aGVyd2lzZShzdHJfYnVmIDwgd29ya3ApLAorKwkJCSAgIChzdHJfYnVmK25leHRfY2hhcmFjdGVyKSBtYXkgZXF1YWxzICh3b3JrcCkuCisrCQkJICAgU28gd2UgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCSAgICAgIH0KKysJCSAgICAvKiBub3QgbWF0Y2hlZCAqLworKwkJICAgIGQgPSBiYWNrdXBfZDsKKysJCSAgICBkZW5kID0gYmFja3VwX2RlbmQ7CisrCQkgICAgd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCSAgfQorKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggZXF1aXZhbGVuY2VfY2xhc3M/ICAqLworKyMgaWZkZWYgX0xJQkMKKysJICAgIGlmIChucnVsZXMgIT0gMCkKKysJICAgICAgeworKyAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKmJhY2t1cF9kID0gZCwgKmJhY2t1cF9kZW5kID0gZGVuZDsKKysJCS8qIFRyeSB0byBtYXRjaCB0aGUgZXF1aXZhbGVuY2UgY2xhc3MgYWdhaW5zdAorKwkJICAgdGhvc2Uga25vd24gdG8gdGhlIGNvbGxhdGUgaW1wbGVtZW50YXRpb24uICAqLworKwkJY29uc3QgaW50MzJfdCAqdGFibGU7CisrCQljb25zdCBpbnQzMl90ICp3ZWlnaHRzOworKwkJY29uc3QgaW50MzJfdCAqZXh0cmE7CisrCQljb25zdCBpbnQzMl90ICppbmRpcmVjdDsKKysJCWludDMyX3QgaWR4LCBpZHgyOworKwkJd2ludF90ICpjcDsKKysJCXNpemVfdCBsZW47CisrCisrCQl0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRVdDKTsKKysJCXdlaWdodHMgPSAoY29uc3Qgd2ludF90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRXQyk7CisrCQlleHRyYSA9IChjb25zdCB3aW50X3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0VYVFJBV0MpOworKwkJaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RXQyk7CisrCisrCQkvKiBXcml0ZSAxIGNvbGxhdGluZyBlbGVtZW50IHRvIHN0cl9idWYsIGFuZAorKwkJICAgZ2V0IGl0cyBpbmRleC4gICovCisrCQlpZHgyID0gMDsKKysKKysJCWZvciAoaSA9IDAgOyBpZHgyID09IDAgJiYgaSA8IFdPUktfQlVGRkVSX1NJWkUgLSAxOyBpKyspCisrCQkgIHsKKysJCSAgICBjcCA9ICh3aW50X3QqKXN0cl9idWY7CisrCQkgICAgaWYgKGQgPT0gZGVuZCkKKysJCSAgICAgIHsKKysJCQlpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQkgIGJyZWFrOworKwkJCWQgPSBzdHJpbmcyOworKwkJCWRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCSAgICAgIH0KKysJCSAgICBzdHJfYnVmW2ldID0gVFJBTlNMQVRFKCooZCtpKSk7CisrCQkgICAgc3RyX2J1ZltpKzFdID0gJ1wwJzsgLyogc2VudGluZWwgKi8KKysJCSAgICBpZHgyID0gRklORElEWCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJmNwLCAxKTsKKysJCSAgfQorKworKwkJLyogVXBkYXRlIGQsIGhvd2V2ZXIgZCB3aWxsIGJlIGluY3JlbWVudGVkIGF0CisrCQkgICBjaGFyX3NldF9tYXRjaGVkOiwgd2UgZGVjcmVtZW50IGQgaGVyZS4gICovCisrCQlkID0gYmFja3VwX2QgKyAoKHdjaGFyX3QqKWNwIC0gKHdjaGFyX3QqKXN0cl9idWYgLSAxKTsKKysJCWlmIChkID49IGRlbmQpCisrCQkgIHsKKysJCSAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQlkID0gZGVuZDsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJZCA9IHN0cmluZzI7CisrCQkJZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJICAgICAgfQorKwkJICB9CisrCisrCQlsZW4gPSB3ZWlnaHRzW2lkeDJdOworKworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGVxdWl2X2NsYXNzX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDsKKysJCSAgICAgd29ya3ArKykKKysJCSAgeworKwkJICAgIGlkeCA9IChpbnQzMl90KSp3b3JrcDsKKysJCSAgICAvKiBXZSBhbHJlYWR5IGNoZWNrZWQgaWR4ICE9IDAgaW4gcmVnZXhfY29tcGlsZS4gKi8KKysKKysJCSAgICBpZiAoaWR4MiAhPSAwICYmIGxlbiA9PSB3ZWlnaHRzW2lkeF0pCisrCQkgICAgICB7CisrCQkJaW50IGNudCA9IDA7CisrCQkJd2hpbGUgKGNudCA8IGxlbiAmJiAod2VpZ2h0c1tpZHggKyAxICsgY250XQorKwkJCQkJICAgICA9PSB3ZWlnaHRzW2lkeDIgKyAxICsgY250XSkpCisrCQkJICArK2NudDsKKysKKysJCQlpZiAoY250ID09IGxlbikKKysJCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgICAgIH0KKysJCSAgfQorKwkJLyogbm90IG1hdGNoZWQgKi8KKysgICAgICAgICAgICAgICAgZCA9IGJhY2t1cF9kOworKyAgICAgICAgICAgICAgICBkZW5kID0gYmFja3VwX2RlbmQ7CisrCSAgICAgIH0KKysJICAgIGVsc2UgLyogKG5ydWxlcyA9PSAwKSAqLworKyMgZW5kaWYKKysJICAgICAgLyogSWYgd2UgY2FuJ3QgbG9vayB1cCBjb2xsYXRpb24gZGF0YSwgd2UgdXNlIHdjc2NvbGwKKysJCSBpbnN0ZWFkLiAgKi8KKysJICAgICAgeworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGVxdWl2X2NsYXNzX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDspCisrCQkgIHsKKysJCSAgICBjb25zdCBDSEFSX1QgKmJhY2t1cF9kID0gZCwgKmJhY2t1cF9kZW5kID0gZGVuZDsKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgbGVuZ3RoID0gX193Y3NsZW4gKHdvcmtwKTsKKysjIGVsc2UKKysJCSAgICBsZW5ndGggPSB3Y3NsZW4gKHdvcmtwKTsKKysjIGVuZGlmCisrCisrCQkgICAgLyogSWYgd2NzY29sbCh0aGUgY29sbGF0aW5nIHN5bWJvbCwgd2hvbGUgc3RyaW5nKSA+IDAsCisrCQkgICAgICAgYW55IHN1YnN0cmluZyBvZiB0aGUgc3RyaW5nIG5ldmVyIG1hdGNoIHdpdGggdGhlCisrCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbC4gICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIGlmIChfX3djc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbHNlCisrCQkgICAgaWYgKHdjc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbmRpZgorKwkJICAgICAgeworKwkJCXdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkJYnJlYWs7CisrCQkgICAgICB9CisrCisrCQkgICAgLyogRmlyc3QsIHdlIGNvbXBhcmUgdGhlIGVxdWl2YWxlbmNlIGNsYXNzIHdpdGgKKysJCSAgICAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcuCisrCQkgICAgICAgSWYgaXQgZG9uJ3QgbWF0Y2gsIHdlIGFkZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8KKysJCSAgICAgICB0aGUgY29tcGFyZSBidWZmZXIgaW4gdHVybi4gICovCisrCQkgICAgZm9yIChpID0gMCA7IGkgPCBXT1JLX0JVRkZFUl9TSVpFIC0gMSA7IGkrKywgZCsrKQorKwkJICAgICAgeworKwkJCWludCBtYXRjaDsKKysJCQlpZiAoZCA9PSBkZW5kKQorKwkJCSAgeworKwkJCSAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQkgICAgICBicmVhazsKKysJCQkgICAgZCA9IHN0cmluZzI7CisrCQkJICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCQkgIH0KKysKKysJCQkvKiBhZGQgbmV4dCBjaGFyYWN0ZXIgdG8gdGhlIGNvbXBhcmUgYnVmZmVyLiAgKi8KKysJCQlzdHJfYnVmW2ldID0gVFJBTlNMQVRFKCpkKTsKKysJCQlzdHJfYnVmW2krMV0gPSAnXDAnOworKworKyMgaWZkZWYgX0xJQkMKKysJCQltYXRjaCA9IF9fd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZWxzZQorKwkJCW1hdGNoID0gd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZW5kaWYKKysKKysJCQlpZiAobWF0Y2ggPT0gMCkKKysJCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysKKysJCQlpZiAobWF0Y2ggPCAwKQorKwkJCS8qIChzdHJfYnVmID4gd29ya3ApIGluZGljYXRlIChzdHJfYnVmICsgWCA+IHdvcmtwKSwKKysJCQkgICBiZWNhdXNlIGZvciBhbGwgWCAoc3RyX2J1ZiArIFggPiBzdHJfYnVmKS4KKysJCQkgICBTbyB3ZSBkb24ndCBuZWVkIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkJICBicmVhazsKKysKKysJCQkvKiBPdGhlcndpc2Uoc3RyX2J1ZiA8IHdvcmtwKSwKKysJCQkgICAoc3RyX2J1ZituZXh0X2NoYXJhY3RlcikgbWF5IGVxdWFscyAod29ya3ApLgorKwkJCSAgIFNvIHdlIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkgICAgICB9CisrCQkgICAgLyogbm90IG1hdGNoZWQgKi8KKysJCSAgICBkID0gYmFja3VwX2Q7CisrCQkgICAgZGVuZCA9IGJhY2t1cF9kZW5kOworKwkJICAgIHdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkgIH0KKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcl9yYW5nZT8gICovCisrIyBpZmRlZiBfTElCQworKwkgICAgaWYgKG5ydWxlcyAhPSAwKQorKwkgICAgICB7CisrCQl1aW50MzJfdCBjb2xsc2VxdmFsOworKwkJY29uc3QgY2hhciAqY29sbHNlcSA9IChjb25zdCBjaGFyICopCisrCQkgIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisrCisrCQljb2xsc2VxdmFsID0gY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXEsIGMpOworKworKwkJZm9yICg7IHdvcmtwIDwgcCAtIGNoYXJzX2xlbmd0aCA7KQorKwkJICB7CisrCQkgICAgdWludDMyX3Qgc3RhcnRfdmFsLCBlbmRfdmFsOworKworKwkJICAgIC8qIFdlIGFscmVhZHkgY29tcHV0ZSB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlCisrCQkgICAgICAgb2YgdGhlIGNoYXJhY3RlcnMgKG9yIGNvbGxhdGluZyBzeW1ib2xzKS4gICovCisrCQkgICAgc3RhcnRfdmFsID0gKHVpbnQzMl90KSAqd29ya3ArKzsgLyogcmFuZ2Vfc3RhcnQgKi8KKysJCSAgICBlbmRfdmFsID0gKHVpbnQzMl90KSAqd29ya3ArKzsgLyogcmFuZ2VfZW5kICovCisrCisrCQkgICAgaWYgKHN0YXJ0X3ZhbCA8PSBjb2xsc2VxdmFsICYmIGNvbGxzZXF2YWwgPD0gZW5kX3ZhbCkKKysJCSAgICAgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgfQorKwkgICAgICB9CisrCSAgICBlbHNlCisrIyBlbmRpZgorKwkgICAgICB7CisrCQkvKiBXZSBzZXQgcmFuZ2Vfc3RhcnRfY2hhciBhdCBzdHJfYnVmWzBdLCByYW5nZV9lbmRfY2hhcgorKwkJICAgYXQgc3RyX2J1Zls0XSwgYW5kIGNvbXBhcmVkIGNoYXIgYXQgc3RyX2J1ZlsyXS4gICovCisrCQlzdHJfYnVmWzFdID0gMDsKKysJCXN0cl9idWZbMl0gPSBjOworKwkJc3RyX2J1ZlszXSA9IDA7CisrCQlzdHJfYnVmWzVdID0gMDsKKysJCWZvciAoOyB3b3JrcCA8IHAgLSBjaGFyc19sZW5ndGggOykKKysJCSAgeworKwkJICAgIHdjaGFyX3QgKnJhbmdlX3N0YXJ0X2NoYXIsICpyYW5nZV9lbmRfY2hhcjsKKysKKysJCSAgICAvKiBtYXRjaCBpZiAocmFuZ2Vfc3RhcnRfY2hhciA8PSBjIDw9IHJhbmdlX2VuZF9jaGFyKS4gICovCisrCisrCQkgICAgLyogSWYgcmFuZ2Vfc3RhcnQob3IgZW5kKSA8IDAsIHdlIGFzc3VtZSAtcmFuZ2Vfc3RhcnQoZW5kKQorKwkJICAgICAgIGlzIHRoZSBvZmZzZXQgb2YgdGhlIGNvbGxhdGluZyBzeW1ib2wgd2hpY2ggaXMgc3BlY2lmaWVkCisrCQkgICAgICAgYXMgdGhlIGNoYXJhY3RlciBvZiB0aGUgcmFuZ2Ugc3RhcnQoZW5kKS4gICovCisrCisrCQkgICAgLyogcmFuZ2Vfc3RhcnQgKi8KKysJCSAgICBpZiAoKndvcmtwIDwgMCkKKysJCSAgICAgIHJhbmdlX3N0YXJ0X2NoYXIgPSBjaGFyc2V0X3RvcCAtICgqd29ya3ArKyk7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCXN0cl9idWZbMF0gPSAqd29ya3ArKzsKKysJCQlyYW5nZV9zdGFydF9jaGFyID0gc3RyX2J1ZjsKKysJCSAgICAgIH0KKysKKysJCSAgICAvKiByYW5nZV9lbmQgKi8KKysJCSAgICBpZiAoKndvcmtwIDwgMCkKKysJCSAgICAgIHJhbmdlX2VuZF9jaGFyID0gY2hhcnNldF90b3AgLSAoKndvcmtwKyspOworKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQlzdHJfYnVmWzRdID0gKndvcmtwKys7CisrCQkJcmFuZ2VfZW5kX2NoYXIgPSBzdHJfYnVmICsgNDsKKysJCSAgICAgIH0KKysKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgaWYgKF9fd2NzY29sbCAocmFuZ2Vfc3RhcnRfY2hhciwgc3RyX2J1ZisyKSA8PSAwCisrCQkJJiYgX193Y3Njb2xsIChzdHJfYnVmKzIsIHJhbmdlX2VuZF9jaGFyKSA8PSAwKQorKyMgZWxzZQorKwkJICAgIGlmICh3Y3Njb2xsIChyYW5nZV9zdGFydF9jaGFyLCBzdHJfYnVmKzIpIDw9IDAKKysJCQkmJiB3Y3Njb2xsIChzdHJfYnVmKzIsIHJhbmdlX2VuZF9jaGFyKSA8PSAwKQorKyMgZW5kaWYKKysJCSAgICAgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgfQorKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyPyAgKi8KKysJICAgIGZvciAoOyB3b3JrcCA8IHAgOyB3b3JrcCsrKQorKwkgICAgICBpZiAoYyA9PSAqd29ya3ApCisrCQlnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCisrCSAgICBuZWdhdGUgPSAhbmVnYXRlOworKworKwkgIGNoYXJfc2V0X21hdGNoZWQ6CisrCSAgICBpZiAobmVnYXRlKSBnb3RvIGZhaWw7CisrI2Vsc2UKKysgICAgICAgICAgICAvKiBDYXN0IHRvIGB1bnNpZ25lZCcgaW5zdGVhZCBvZiBgdW5zaWduZWQgY2hhcicgaW4gY2FzZSB0aGUKKysgICAgICAgICAgICAgICBiaXQgbGlzdCBpcyBhIGZ1bGwgMzIgYnl0ZXMgbG9uZy4gICovCisrCSAgICBpZiAoYyA8ICh1bnNpZ25lZCkgKCpwICogQllURVdJRFRIKQorKwkJJiYgcFsxICsgYyAvIEJZVEVXSURUSF0gJiAoMSA8PCAoYyAlIEJZVEVXSURUSCkpKQorKwkgICAgICBuZWdhdGUgPSAhbmVnYXRlOworKworKwkgICAgcCArPSAxICsgKnA7CisrCisrCSAgICBpZiAoIW5lZ2F0ZSkgZ290byBmYWlsOworKyN1bmRlZiBXT1JLX0JVRkZFUl9TSVpFCisrI2VuZGlmIC8qIFdDSEFSICovCisrCSAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICAgIGQrKzsKKysJICAgIGJyZWFrOworKwkgIH0KKysKKysKKysgICAgICAgIC8qIFRoZSBiZWdpbm5pbmcgb2YgYSBncm91cCBpcyByZXByZXNlbnRlZCBieSBzdGFydF9tZW1vcnkuCisrICAgICAgICAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgcmVnaXN0ZXIgbnVtYmVyIGluIHRoZSBuZXh0IGJ5dGUsIGFuZCB0aGUKKysgICAgICAgICAgIG51bWJlciBvZiBncm91cHMgaW5uZXIgdG8gdGhpcyBvbmUgaW4gdGhlIG5leHQuICBUaGUgdGV4dAorKyAgICAgICAgICAgbWF0Y2hlZCB3aXRoaW4gdGhlIGdyb3VwIGlzIHJlY29yZGVkIChpbiB0aGUgaW50ZXJuYWwKKysgICAgICAgICAgIHJlZ2lzdGVycyBkYXRhIHN0cnVjdHVyZSkgdW5kZXIgdGhlIHJlZ2lzdGVyIG51bWJlci4gICovCisrICAgICAgICBjYXNlIHN0YXJ0X21lbW9yeToKKysJICBERUJVR19QUklOVDMgKCJFWEVDVVRJTkcgc3RhcnRfbWVtb3J5ICVsZCAoJWxkKTpcbiIsCisrCQkJKGxvbmcgaW50KSAqcCwgKGxvbmcgaW50KSBwWzFdKTsKKysKKysgICAgICAgICAgLyogRmluZCBvdXQgaWYgdGhpcyBncm91cCBjYW4gbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gICovCisrCSAgcDEgPSBwOwkJLyogVG8gc2VuZCB0byBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wLiAgKi8KKysKKysgICAgICAgICAgaWYgKFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pID09IE1BVENIX05VTExfVU5TRVRfVkFMVUUpCisrICAgICAgICAgICAgUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgID0gUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIHBlbmQsIHJlZ19pbmZvKTsKKysKKysgICAgICAgICAgLyogU2F2ZSB0aGUgcG9zaXRpb24gaW4gdGhlIHN0cmluZyB3aGVyZSB3ZSB3ZXJlIHRoZSBsYXN0IHRpbWUKKysgICAgICAgICAgICAgd2Ugd2VyZSBhdCB0aGlzIG9wZW4tZ3JvdXAgb3BlcmF0b3IgaW4gY2FzZSB0aGUgZ3JvdXAgaXMKKysgICAgICAgICAgICAgb3BlcmF0ZWQgdXBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IsIGUuZy4sIHdpdGggYChhKikqYicKKysgICAgICAgICAgICAgYWdhaW5zdCBgYWInOyB0aGVuIHdlIHdhbnQgdG8gaWdub3JlIHdoZXJlIHdlIGFyZSBub3cgaW4KKysgICAgICAgICAgICAgdGhlIHN0cmluZyBpbiBjYXNlIHRoaXMgYXR0ZW1wdCB0byBtYXRjaCBmYWlscy4gICovCisrICAgICAgICAgIG9sZF9yZWdzdGFydFsqcF0gPSBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBSRUdfVU5TRVQgKHJlZ3N0YXJ0WypwXSkgPyBkIDogcmVnc3RhcnRbKnBdCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlZ3N0YXJ0WypwXTsKKysJICBERUJVR19QUklOVDIgKCIgIG9sZF9yZWdzdGFydDogJWRcbiIsCisrCQkJIFBPSU5URVJfVE9fT0ZGU0VUIChvbGRfcmVnc3RhcnRbKnBdKSk7CisrCisrICAgICAgICAgIHJlZ3N0YXJ0WypwXSA9IGQ7CisrCSAgREVCVUdfUFJJTlQyICgiICByZWdzdGFydDogJWRcbiIsIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdzdGFydFsqcF0pKTsKKysKKysgICAgICAgICAgSVNfQUNUSVZFIChyZWdfaW5mb1sqcF0pID0gMTsKKysgICAgICAgICAgTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkgPSAwOworKworKwkgIC8qIENsZWFyIHRoaXMgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSByZWdpc3RlciBhY3Rpdml0eSBzdGF0dXMuICAqLworKwkgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CisrCisrICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3Rlci4gICovCisrICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9ICpwOworKworKyAgICAgICAgICAvKiBJZiBub3RoaW5nIHdhcyBhY3RpdmUgYmVmb3JlLCB0aGlzIGlzIHRoZSBuZXcgbG93ZXN0IGFjdGl2ZQorKyAgICAgICAgICAgICByZWdpc3Rlci4gICovCisrICAgICAgICAgIGlmIChsb3dlc3RfYWN0aXZlX3JlZyA9PSBOT19MT1dFU1RfQUNUSVZFX1JFRykKKysgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9ICpwOworKworKyAgICAgICAgICAvKiBNb3ZlIHBhc3QgdGhlIHJlZ2lzdGVyIG51bWJlciBhbmQgaW5uZXIgZ3JvdXAgY291bnQuICAqLworKyAgICAgICAgICBwICs9IDI7CisrCSAganVzdF9wYXN0X3N0YXJ0X21lbSA9IHA7CisrCisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgLyogVGhlIHN0b3BfbWVtb3J5IG9wY29kZSByZXByZXNlbnRzIHRoZSBlbmQgb2YgYSBncm91cC4gIEl0cworKyAgICAgICAgICAgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBzdGFydF9tZW1vcnknczogdGhlIHJlZ2lzdGVyCisrICAgICAgICAgICBudW1iZXIsIGFuZCB0aGUgbnVtYmVyIG9mIGlubmVyIGdyb3Vwcy4gICovCisrCWNhc2Ugc3RvcF9tZW1vcnk6CisrCSAgREVCVUdfUFJJTlQzICgiRVhFQ1VUSU5HIHN0b3BfbWVtb3J5ICVsZCAoJWxkKTpcbiIsCisrCQkJKGxvbmcgaW50KSAqcCwgKGxvbmcgaW50KSBwWzFdKTsKKysKKysgICAgICAgICAgLyogV2UgbmVlZCB0byBzYXZlIHRoZSBzdHJpbmcgcG9zaXRpb24gdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIGF0CisrICAgICAgICAgICAgIHRoaXMgY2xvc2UtZ3JvdXAgb3BlcmF0b3IgaW4gY2FzZSB0aGUgZ3JvdXAgaXMgb3BlcmF0ZWQKKysgICAgICAgICAgICAgdXBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IsIGUuZy4sIHdpdGggYCgoYSopKihiKikqKSonCisrICAgICAgICAgICAgIGFnYWluc3QgYGFiYSc7IHRoZW4gd2Ugd2FudCB0byBpZ25vcmUgd2hlcmUgd2UgYXJlIG5vdyBpbgorKyAgICAgICAgICAgICB0aGUgc3RyaW5nIGluIGNhc2UgdGhpcyBhdHRlbXB0IHRvIG1hdGNoIGZhaWxzLiAgKi8KKysgICAgICAgICAgb2xkX3JlZ2VuZFsqcF0gPSBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUkVHX1VOU0VUIChyZWdlbmRbKnBdKSA/IGQgOiByZWdlbmRbKnBdCisrCQkJICAgOiByZWdlbmRbKnBdOworKwkgIERFQlVHX1BSSU5UMiAoIiAgICAgIG9sZF9yZWdlbmQ6ICVkXG4iLAorKwkJCSBQT0lOVEVSX1RPX09GRlNFVCAob2xkX3JlZ2VuZFsqcF0pKTsKKysKKysgICAgICAgICAgcmVnZW5kWypwXSA9IGQ7CisrCSAgREVCVUdfUFJJTlQyICgiICAgICAgcmVnZW5kOiAlZFxuIiwgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ2VuZFsqcF0pKTsKKysKKysgICAgICAgICAgLyogVGhpcyByZWdpc3RlciBpc24ndCBhY3RpdmUgYW55bW9yZS4gICovCisrICAgICAgICAgIElTX0FDVElWRSAocmVnX2luZm9bKnBdKSA9IDA7CisrCisrCSAgLyogQ2xlYXIgdGhpcyB3aGVuZXZlciB3ZSBjaGFuZ2UgdGhlIHJlZ2lzdGVyIGFjdGl2aXR5IHN0YXR1cy4gICovCisrCSAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsKKysKKysgICAgICAgICAgLyogSWYgdGhpcyB3YXMgdGhlIG9ubHkgcmVnaXN0ZXIgYWN0aXZlLCBub3RoaW5nIGlzIGFjdGl2ZQorKyAgICAgICAgICAgICBhbnltb3JlLiAgKi8KKysgICAgICAgICAgaWYgKGxvd2VzdF9hY3RpdmVfcmVnID09IGhpZ2hlc3RfYWN0aXZlX3JlZykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9IE5PX0xPV0VTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gTk9fSElHSEVTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsgLyogV2UgbXVzdCBzY2FuIGZvciB0aGUgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyLCBzaW5jZQorKyAgICAgICAgICAgICAgICAgaXQgaXNuJ3QgbmVjZXNzYXJpbHkgb25lIGxlc3MgdGhhbiBub3c6IGNvbnNpZGVyCisrICAgICAgICAgICAgICAgICAoYShiKWMoZChlKWYpZykuICBXaGVuIGdyb3VwIDMgZW5kcywgYWZ0ZXIgdGhlIGYpLCB0aGUKKysgICAgICAgICAgICAgICAgIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3RlciBpcyAxLiAgKi8KKysgICAgICAgICAgICAgIFVDSEFSX1QgciA9ICpwIC0gMTsKKysgICAgICAgICAgICAgIHdoaWxlIChyID4gMCAmJiAhSVNfQUNUSVZFIChyZWdfaW5mb1tyXSkpCisrICAgICAgICAgICAgICAgIHItLTsKKysKKysgICAgICAgICAgICAgIC8qIElmIHdlIGVuZCB1cCBhdCByZWdpc3RlciB6ZXJvLCB0aGF0IG1lYW5zIHRoYXQgd2Ugc2F2ZWQKKysgICAgICAgICAgICAgICAgIHRoZSByZWdpc3RlcnMgYXMgdGhlIHJlc3VsdCBvZiBhbiBgb25fZmFpbHVyZV9qdW1wJywgbm90CisrICAgICAgICAgICAgICAgICBhIGBzdGFydF9tZW1vcnknLCBhbmQgd2UganVtcGVkIHRvIHBhc3QgdGhlIGlubmVybW9zdAorKyAgICAgICAgICAgICAgICAgYHN0b3BfbWVtb3J5Jy4gIEZvciBleGFtcGxlLCBpbiAoKC4pKikgd2Ugc2F2ZQorKyAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzIDEgYW5kIDIgYXMgYSByZXN1bHQgb2YgdGhlICosIGJ1dCB3aGVuIHdlIHBvcAorKyAgICAgICAgICAgICAgICAgYmFjayB0byB0aGUgc2Vjb25kICksIHdlIGFyZSBhdCB0aGUgc3RvcF9tZW1vcnkgMS4KKysgICAgICAgICAgICAgICAgIFRodXMsIG5vdGhpbmcgaXMgYWN0aXZlLiAgKi8KKysJICAgICAgaWYgKHIgPT0gMCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gTk9fTE9XRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gTk9fSElHSEVTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IHI7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAvKiBJZiBqdXN0IGZhaWxlZCB0byBtYXRjaCBzb21ldGhpbmcgdGhpcyB0aW1lIGFyb3VuZCB3aXRoIGEKKysgICAgICAgICAgICAgZ3JvdXAgdGhhdCdzIG9wZXJhdGVkIG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciwgdHJ5IHRvCisrICAgICAgICAgICAgIGZvcmNlIGV4aXQgZnJvbSB0aGUgYGBsb29wJycsIGFuZCByZXN0b3JlIHRoZSByZWdpc3RlcgorKyAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBncm91cCB0aGF0IHdlIGhhZCBiZWZvcmUgdHJ5aW5nIHRoaXMKKysgICAgICAgICAgICAgbGFzdCBtYXRjaC4gICovCisrICAgICAgICAgIGlmICgoIU1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICAgfHwganVzdF9wYXN0X3N0YXJ0X21lbSA9PSBwIC0gMSkKKysJICAgICAgJiYgKHAgKyAyKSA8IHBlbmQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYm9vbGVhbiBpc19hX2p1bXBfbiA9IGZhbHNlOworKworKyAgICAgICAgICAgICAgcDEgPSBwICsgMjsKKysgICAgICAgICAgICAgIG1jbnQgPSAwOworKyAgICAgICAgICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSsrKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgY2FzZSBqdW1wX246CisrCQkgICAgaXNfYV9qdW1wX24gPSB0cnVlOworKyAgICAgICAgICAgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysJCSAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysJCSAgY2FzZSBqdW1wOgorKwkJICBjYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrCQkgICAgaWYgKGlzX2FfanVtcF9uKQorKwkJICAgICAgcDEgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovIDsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgICBwMSArPSBtY250OworKworKyAgICAgICAgICAgICAgLyogSWYgdGhlIG5leHQgb3BlcmF0aW9uIGlzIGEganVtcCBiYWNrd2FyZHMgaW4gdGhlIHBhdHRlcm4KKysJICAgICAgICAgdG8gYW4gb25fZmFpbHVyZV9qdW1wIHJpZ2h0IGJlZm9yZSB0aGUgc3RhcnRfbWVtb3J5CisrICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3RvcF9tZW1vcnksIGV4aXQgZnJvbSB0aGUgbG9vcAorKyAgICAgICAgICAgICAgICAgYnkgZm9yY2luZyBhIGZhaWx1cmUgYWZ0ZXIgcHVzaGluZyBvbiB0aGUgc3RhY2sgdGhlCisrICAgICAgICAgICAgICAgICBvbl9mYWlsdXJlX2p1bXAncyBqdW1wIGluIHRoZSBwYXR0ZXJuLCBhbmQgZC4gICovCisrICAgICAgICAgICAgICBpZiAobWNudCA8IDAgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gb25fZmFpbHVyZV9qdW1wCisrICAgICAgICAgICAgICAgICAgJiYgKHJlX29wY29kZV90KSBwMVsxK09GRlNFVF9BRERSRVNTX1NJWkVdID09IHN0YXJ0X21lbW9yeQorKwkJICAmJiBwMVsyK09GRlNFVF9BRERSRVNTX1NJWkVdID09ICpwKQorKwkJeworKyAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgZ3JvdXAgZXZlciBtYXRjaGVkIGFueXRoaW5nLCB0aGVuIHJlc3RvcmUKKysgICAgICAgICAgICAgICAgICAgICB3aGF0IGl0cyByZWdpc3RlcnMgd2VyZSBiZWZvcmUgdHJ5aW5nIHRoaXMgbGFzdAorKyAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCBtYXRjaCwgZS5nLiwgd2l0aCBgKGEqKSpiJyBhZ2FpbnN0IGBhYicgZm9yCisrICAgICAgICAgICAgICAgICAgICAgcmVnc3RhcnRbMV0sIGFuZCwgZS5nLiwgd2l0aCBgKChhKikqKGIqKSopKicKKysgICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IGBhYmEnIGZvciByZWdlbmRbM10uCisrCisrICAgICAgICAgICAgICAgICAgICAgQWxzbyByZXN0b3JlIHRoZSByZWdpc3RlcnMgZm9yIGlubmVyIGdyb3VwcyBmb3IsCisrICAgICAgICAgICAgICAgICAgICAgZS5nLiwgYCgoYSopKGIqKSkqJyBhZ2FpbnN0IGBhYmEnIChyZWdpc3RlciAzIHdvdWxkCisrICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGdldCB0cmFzaGVkKS4gICovCisrCisrICAgICAgICAgICAgICAgICAgaWYgKEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkpCisrCQkgICAgeworKwkJICAgICAgdW5zaWduZWQgcjsKKysKKysgICAgICAgICAgICAgICAgICAgICAgRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKSA9IDA7CisrCisrCQkgICAgICAvKiBSZXN0b3JlIHRoaXMgYW5kIGlubmVyIGdyb3VwcycgKGlmIGFueSkgcmVnaXN0ZXJzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gKnA7IHIgPCAodW5zaWduZWQpICpwICsgKHVuc2lnbmVkKSAqKHAgKyAxKTsKKysJCQkgICByKyspCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnc3RhcnRbcl0gPSBvbGRfcmVnc3RhcnRbcl07CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4eCB3aHkgdGhpcyB0ZXN0PyAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfcmVnZW5kW3JdID49IHJlZ3N0YXJ0W3JdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdlbmRbcl0gPSBvbGRfcmVnZW5kW3JdOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgcDErKzsKKysgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAocDEgKyBtY250LCBkLCAtMik7CisrCisrICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAvKiBNb3ZlIHBhc3QgdGhlIHJlZ2lzdGVyIG51bWJlciBhbmQgdGhlIGlubmVyIGdyb3VwIGNvdW50LiAgKi8KKysgICAgICAgICAgcCArPSAyOworKyAgICAgICAgICBicmVhazsKKysKKysKKysJLyogXDxkaWdpdD4gaGFzIGJlZW4gdHVybmVkIGludG8gYSBgZHVwbGljYXRlJyBjb21tYW5kIHdoaWNoIGlzCisrICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgbnVtZXJpYyB2YWx1ZSBvZiA8ZGlnaXQ+IGFzIHRoZSByZWdpc3RlciBudW1iZXIuICAqLworKyAgICAgICAgY2FzZSBkdXBsaWNhdGU6CisrCSAgeworKwkgICAgcmVnaXN0ZXIgY29uc3QgQ0hBUl9UICpkMiwgKmRlbmQyOworKwkgICAgaW50IHJlZ25vID0gKnArKzsgICAvKiBHZXQgd2hpY2ggcmVnaXN0ZXIgdG8gbWF0Y2ggYWdhaW5zdC4gICovCisrCSAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgZHVwbGljYXRlICVkLlxuIiwgcmVnbm8pOworKworKwkgICAgLyogQ2FuJ3QgYmFjayByZWZlcmVuY2UgYSBncm91cCB3aGljaCB3ZSd2ZSBuZXZlciBtYXRjaGVkLiAgKi8KKysgICAgICAgICAgICBpZiAoUkVHX1VOU0VUIChyZWdzdGFydFtyZWdub10pIHx8IFJFR19VTlNFVCAocmVnZW5kW3JlZ25vXSkpCisrICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAgICAgLyogV2hlcmUgaW4gaW5wdXQgdG8gdHJ5IHRvIHN0YXJ0IG1hdGNoaW5nLiAgKi8KKysgICAgICAgICAgICBkMiA9IHJlZ3N0YXJ0W3JlZ25vXTsKKysKKysgICAgICAgICAgICAvKiBXaGVyZSB0byBzdG9wIG1hdGNoaW5nOyBpZiBib3RoIHRoZSBwbGFjZSB0byBzdGFydCBhbmQKKysgICAgICAgICAgICAgICB0aGUgcGxhY2UgdG8gc3RvcCBtYXRjaGluZyBhcmUgaW4gdGhlIHNhbWUgc3RyaW5nLCB0aGVuCisrICAgICAgICAgICAgICAgc2V0IHRvIHRoZSBwbGFjZSB0byBzdG9wLCBvdGhlcndpc2UsIGZvciBub3cgaGF2ZSB0byB1c2UKKysgICAgICAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBmaXJzdCBzdHJpbmcuICAqLworKworKyAgICAgICAgICAgIGRlbmQyID0gKChGSVJTVF9TVFJJTkdfUCAocmVnc3RhcnRbcmVnbm9dKQorKwkJICAgICAgPT0gRklSU1RfU1RSSU5HX1AgKHJlZ2VuZFtyZWdub10pKQorKwkJICAgICA/IHJlZ2VuZFtyZWdub10gOiBlbmRfbWF0Y2hfMSk7CisrCSAgICBmb3IgKDs7KQorKwkgICAgICB7CisrCQkvKiBJZiBuZWNlc3NhcnksIGFkdmFuY2UgdG8gbmV4dCBzZWdtZW50IGluIHJlZ2lzdGVyCisrICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLiAgKi8KKysJCXdoaWxlIChkMiA9PSBkZW5kMikKKysJCSAgeworKwkJICAgIGlmIChkZW5kMiA9PSBlbmRfbWF0Y2hfMikgYnJlYWs7CisrCQkgICAgaWYgKGRlbmQyID09IHJlZ2VuZFtyZWdub10pIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIHN0cmluZzEgPT4gYWR2YW5jZSB0byBzdHJpbmcyLiAqLworKyAgICAgICAgICAgICAgICAgICAgZDIgPSBzdHJpbmcyOworKyAgICAgICAgICAgICAgICAgICAgZGVuZDIgPSByZWdlbmRbcmVnbm9dOworKwkJICB9CisrCQkvKiBBdCBlbmQgb2YgcmVnaXN0ZXIgY29udGVudHMgPT4gc3VjY2VzcyAqLworKwkJaWYgKGQyID09IGRlbmQyKSBicmVhazsKKysKKysJCS8qIElmIG5lY2Vzc2FyeSwgYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgaW4gZGF0YS4gICovCisrCQlQUkVGRVRDSCAoKTsKKysKKysJCS8qIEhvdyBtYW55IGNoYXJhY3RlcnMgbGVmdCBpbiB0aGlzIHNlZ21lbnQgdG8gbWF0Y2guICAqLworKwkJbWNudCA9IGRlbmQgLSBkOworKworKwkJLyogV2FudCBob3cgbWFueSBjb25zZWN1dGl2ZSBjaGFyYWN0ZXJzIHdlIGNhbiBtYXRjaCBpbgorKyAgICAgICAgICAgICAgICAgICBvbmUgc2hvdCwgc28sIGlmIG5lY2Vzc2FyeSwgYWRqdXN0IHRoZSBjb3VudC4gICovCisrICAgICAgICAgICAgICAgIGlmIChtY250ID4gZGVuZDIgLSBkMikKKysJCSAgbWNudCA9IGRlbmQyIC0gZDI7CisrCisrCQkvKiBDb21wYXJlIHRoYXQgbWFueTsgZmFpbHVyZSBpZiBtaXNtYXRjaCwgZWxzZSBtb3ZlCisrICAgICAgICAgICAgICAgICAgIHBhc3QgdGhlbS4gICovCisrCQlpZiAodHJhbnNsYXRlCisrICAgICAgICAgICAgICAgICAgICA/IFBSRUZJWChiY21wX3RyYW5zbGF0ZSkgKGQsIGQyLCBtY250LCB0cmFuc2xhdGUpCisrICAgICAgICAgICAgICAgICAgICA6IG1lbWNtcCAoZCwgZDIsIG1jbnQqc2l6ZW9mKFVDSEFSX1QpKSkKKysJCSAgZ290byBmYWlsOworKwkJZCArPSBtY250LCBkMiArPSBtY250OworKworKwkJLyogRG8gdGhpcyBiZWNhdXNlIHdlJ3ZlIG1hdGNoIHNvbWUgY2hhcmFjdGVycy4gICovCisrCQlTRVRfUkVHU19NQVRDSEVEICgpOworKwkgICAgICB9CisrCSAgfQorKwkgIGJyZWFrOworKworKworKyAgICAgICAgLyogYmVnbGluZSBtYXRjaGVzIHRoZSBlbXB0eSBzdHJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCisrICAgICAgICAgICAodW5sZXNzIGBub3RfYm9sJyBpcyBzZXQgaW4gYGJ1ZnAnKSwgYW5kLCBpZgorKyAgICAgICAgICAgYG5ld2xpbmVfYW5jaG9yJyBpcyBzZXQsIGFmdGVyIG5ld2xpbmVzLiAgKi8KKysJY2FzZSBiZWdsaW5lOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYmVnbGluZS5cbiIpOworKworKyAgICAgICAgICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmICghYnVmcC0+bm90X2JvbCkgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlIGlmIChkWy0xXSA9PSAnXG4nICYmIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgLyogSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBmYWlsLiAgKi8KKysgICAgICAgICAgZ290byBmYWlsOworKworKworKyAgICAgICAgLyogZW5kbGluZSBpcyB0aGUgZHVhbCBvZiBiZWdsaW5lLiAgKi8KKysJY2FzZSBlbmRsaW5lOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgZW5kbGluZS5cbiIpOworKworKyAgICAgICAgICBpZiAoQVRfU1RSSU5HU19FTkQgKGQpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmICghYnVmcC0+bm90X2VvbCkgYnJlYWs7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAvKiBXZSBoYXZlIHRvIGBgcHJlZmV0Y2gnJyB0aGUgbmV4dCBjaGFyYWN0ZXIuICAqLworKyAgICAgICAgICBlbHNlIGlmICgoZCA9PSBlbmQxID8gKnN0cmluZzIgOiAqZCkgPT0gJ1xuJworKyAgICAgICAgICAgICAgICAgICAmJiBidWZwLT5uZXdsaW5lX2FuY2hvcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysJLyogTWF0Y2ggYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBkYXRhLiAgKi8KKysgICAgICAgIGNhc2UgYmVnYnVmOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYmVnYnVmLlxuIik7CisrICAgICAgICAgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkpCisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysJLyogTWF0Y2ggYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBkYXRhLiAgKi8KKysgICAgICAgIGNhc2UgZW5kYnVmOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgZW5kYnVmLlxuIik7CisrCSAgaWYgKEFUX1NUUklOR1NfRU5EIChkKSkKKysJICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrICAgICAgICAvKiBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgaXMgdXNlZCB0byBvcHRpbWl6ZSBgLipcbicuICBJdAorKyAgICAgICAgICAgcHVzaGVzIE5VTEwgYXMgdGhlIHZhbHVlIGZvciB0aGUgc3RyaW5nIG9uIHRoZSBzdGFjay4gIFRoZW4KKysgICAgICAgICAgIGBwb3BfZmFpbHVyZV9wb2ludCcgd2lsbCBrZWVwIHRoZSBjdXJyZW50IHZhbHVlIGZvciB0aGUKKysgICAgICAgICAgIHN0cmluZywgaW5zdGVhZCBvZiByZXN0b3JpbmcgaXQuICBUbyBzZWUgd2h5LCBjb25zaWRlcgorKyAgICAgICAgICAgbWF0Y2hpbmcgYGZvb1xuYmFyJyBhZ2FpbnN0IGAuKlxuJy4gIFRoZSAuKiBtYXRjaGVzIHRoZSBmb287CisrICAgICAgICAgICB0aGVuIHRoZSAuIGZhaWxzIGFnYWluc3QgdGhlIFxuLiAgQnV0IHRoZSBuZXh0IHRoaW5nIHdlIHdhbnQKKysgICAgICAgICAgIHRvIGRvIGlzIG1hdGNoIHRoZSBcbiBhZ2FpbnN0IHRoZSBcbjsgaWYgd2UgcmVzdG9yZWQgdGhlCisrICAgICAgICAgICBzdHJpbmcgdmFsdWUsIHdlIHdvdWxkIGJlIGJhY2sgYXQgdGhlIGZvby4KKysKKysgICAgICAgICAgIEJlY2F1c2UgdGhpcyBpcyB1c2VkIG9ubHkgaW4gc3BlY2lmaWMgY2FzZXMsIHdlIGRvbid0IG5lZWQgdG8KKysgICAgICAgICAgIGNoZWNrIGFsbCB0aGUgdGhpbmdzIHRoYXQgYG9uX2ZhaWx1cmVfanVtcCcgZG9lcywgdG8gbWFrZQorKyAgICAgICAgICAgc3VyZSB0aGUgcmlnaHQgdGhpbmdzIGdldCBzYXZlZCBvbiB0aGUgc3RhY2suICBIZW5jZSB3ZSBkb24ndAorKyAgICAgICAgICAgc2hhcmUgaXRzIGNvZGUuICBUaGUgb25seSByZWFzb24gdG8gcHVzaCBhbnl0aGluZyBvbiB0aGUKKysgICAgICAgICAgIHN0YWNrIGF0IGFsbCBpcyB0aGF0IG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIGNoYW5nZQorKyAgICAgICAgICAgYGFueWNoYXIncyBjb2RlIHRvIGRvIHNvbWV0aGluZyBiZXNpZGVzIGdvdG8gZmFpbCBpbiB0aGlzCisrICAgICAgICAgICBjYXNlOyB0aGF0IHNlZW1zIHdvcnNlIHRoYW4gdGhpcy4gICovCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCIpOworKworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gJXApOlxuIiwgbWNudCwgcCArIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gMHgleCk6XG4iLCBtY250LCBwICsgbWNudCk7CisrI2VuZGlmCisrCisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAocCArIG1jbnQsIE5VTEwsIC0yKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCS8qIFVzZXMgb2Ygb25fZmFpbHVyZV9qdW1wOgorKworKyAgICAgICAgICAgRWFjaCBhbHRlcm5hdGl2ZSBzdGFydHMgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAgdGhhdCBwb2ludHMKKysgICAgICAgICAgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgYWx0ZXJuYXRpdmUuICBFYWNoIGFsdGVybmF0aXZlCisrICAgICAgICAgICBleGNlcHQgdGhlIGxhc3QgZW5kcyB3aXRoIGEganVtcCB0aGF0IGluIGVmZmVjdCBqdW1wcyBwYXN0CisrICAgICAgICAgICB0aGUgcmVzdCBvZiB0aGUgYWx0ZXJuYXRpdmVzLiAgKFRoZXkgcmVhbGx5IGp1bXAgdG8gdGhlCisrICAgICAgICAgICBlbmRpbmcganVtcCBvZiB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlLCBiZWNhdXNlIHRlbnNpb25pbmcKKysgICAgICAgICAgIHRoZXNlIGp1bXBzIGlzIGEgaGFzc2xlLikKKysKKysgICAgICAgICAgIFJlcGVhdHMgc3RhcnQgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAgdGhhdCBwb2ludHMgcGFzdCBib3RoCisrICAgICAgICAgICB0aGUgcmVwZXRpdGlvbiB0ZXh0IGFuZCBlaXRoZXIgdGhlIGZvbGxvd2luZyBqdW1wIG9yCisrICAgICAgICAgICBwb3BfZmFpbHVyZV9qdW1wIGJhY2sgdG8gdGhpcyBvbl9mYWlsdXJlX2p1bXAuICAqLworKwljYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgIG9uX2ZhaWx1cmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBvbl9mYWlsdXJlX2p1bXAiKTsKKysKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvICVwKSIsIG1jbnQsIHAgKyBtY250KTsKKysjZWxzZQorKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvIDB4JXgpIiwgbWNudCwgcCArIG1jbnQpOworKyNlbmRpZgorKworKyAgICAgICAgICAvKiBJZiB0aGlzIG9uX2ZhaWx1cmVfanVtcCBjb21lcyByaWdodCBiZWZvcmUgYSBncm91cCAoaS5lLiwKKysgICAgICAgICAgICAgdGhlIG9yaWdpbmFsICogYXBwbGllZCB0byBhIGdyb3VwKSwgc2F2ZSB0aGUgaW5mb3JtYXRpb24KKysgICAgICAgICAgICAgZm9yIHRoYXQgZ3JvdXAgYW5kIGFsbCBpbm5lciBvbmVzLCBzbyB0aGF0IGlmIHdlIGZhaWwgYmFjaworKyAgICAgICAgICAgICB0byB0aGlzIHBvaW50LCB0aGUgZ3JvdXAncyBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvcnJlY3QuCisrICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBcKGEqXCkqXDEsIHdlIG5lZWQgdGhlIHByZWNlZGluZyBncm91cCwKKysgICAgICAgICAgICAgYW5kIGluIFwoenpcKGEqXCliKlwpXDIsIHdlIG5lZWQgdGhlIGlubmVyIGdyb3VwLiAgKi8KKysKKysgICAgICAgICAgLyogV2UgY2FuJ3QgdXNlIGBwJyB0byBjaGVjayBhaGVhZCBiZWNhdXNlIHdlIHB1c2gKKysgICAgICAgICAgICAgYSBmYWlsdXJlIHBvaW50IHRvIGBwICsgbWNudCcgYWZ0ZXIgd2UgZG8gdGhpcy4gICovCisrICAgICAgICAgIHAxID0gcDsKKysKKysgICAgICAgICAgLyogV2UgbmVlZCB0byBza2lwIG5vX29wJ3MgYmVmb3JlIHdlIGxvb2sgZm9yIHRoZQorKyAgICAgICAgICAgICBzdGFydF9tZW1vcnkgaW4gY2FzZSB0aGlzIG9uX2ZhaWx1cmVfanVtcCBpcyBoYXBwZW5pbmcgYXMKKysgICAgICAgICAgICAgdGhlIHJlc3VsdCBvZiBhIGNvbXBsZXRlZCBzdWNjZWVkX24sIGFzIGluIFwoYVwpXHsxLDNcfWJcMQorKyAgICAgICAgICAgICBhZ2FpbnN0IGFiYS4gICovCisrICAgICAgICAgIHdoaWxlIChwMSA8IHBlbmQgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gbm9fb3ApCisrICAgICAgICAgICAgcDErKzsKKysKKysgICAgICAgICAgaWYgKHAxIDwgcGVuZCAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBzdGFydF9tZW1vcnkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgLyogV2UgaGF2ZSBhIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3RlciBub3cuICBUaGlzIHdpbGwKKysgICAgICAgICAgICAgICAgIGdldCByZXNldCBhdCB0aGUgc3RhcnRfbWVtb3J5IHdlIGFyZSBhYm91dCB0byBnZXQgdG8sCisrICAgICAgICAgICAgICAgICBidXQgd2Ugd2lsbCBoYXZlIHNhdmVkIGFsbCB0aGUgcmVnaXN0ZXJzIHJlbGV2YW50IHRvCisrICAgICAgICAgICAgICAgICB0aGlzIHJlcGV0aXRpb24gb3AsIGFzIGRlc2NyaWJlZCBhYm92ZS4gICovCisrICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSAqKHAxICsgMSkgKyAqKHAxICsgMik7CisrICAgICAgICAgICAgICBpZiAobG93ZXN0X2FjdGl2ZV9yZWcgPT0gTk9fTE9XRVNUX0FDVElWRV9SRUcpCisrICAgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gKihwMSArIDEpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiOlxuIik7CisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAocCArIG1jbnQsIGQsIC0yKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBBIHNtYXJ0IHJlcGVhdCBlbmRzIHdpdGggYG1heWJlX3BvcF9qdW1wJy4KKysJICAgV2UgY2hhbmdlIGl0IHRvIGVpdGhlciBgcG9wX2ZhaWx1cmVfanVtcCcgb3IgYGp1bXAnLiAgKi8KKysgICAgICAgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIG1heWJlX3BvcF9qdW1wICVkLlxuIiwgbWNudCk7CisrICAgICAgICAgIHsKKysJICAgIHJlZ2lzdGVyIFVDSEFSX1QgKnAyID0gcDsKKysKKysgICAgICAgICAgICAvKiBDb21wYXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlcGVhdCB3aXRoIHdoYXQgaW4gdGhlCisrICAgICAgICAgICAgICAgcGF0dGVybiBmb2xsb3dzIGl0cyBlbmQuIElmIHdlIGNhbiBlc3RhYmxpc2ggdGhhdCB0aGVyZQorKyAgICAgICAgICAgICAgIGlzIG5vdGhpbmcgdGhhdCB0aGV5IHdvdWxkIGJvdGggbWF0Y2gsIGkuZS4sIHRoYXQgd2UKKysgICAgICAgICAgICAgICB3b3VsZCBoYXZlIHRvIGJhY2t0cmFjayBiZWNhdXNlIG9mIChhcyBpbiwgZS5nLiwgYGEqYScpCisrICAgICAgICAgICAgICAgdGhlbiB3ZSBjYW4gY2hhbmdlIHRvIHBvcF9mYWlsdXJlX2p1bXAsIGJlY2F1c2Ugd2UnbGwKKysgICAgICAgICAgICAgICBuZXZlciBoYXZlIHRvIGJhY2t0cmFjay4KKysKKysgICAgICAgICAgICAgICBUaGlzIGlzIG5vdCB0cnVlIGluIHRoZSBjYXNlIG9mIGFsdGVybmF0aXZlczogaW4KKysgICAgICAgICAgICAgICBgKGF8YWIpKicgd2UgZG8gbmVlZCB0byBiYWNrdHJhY2sgdG8gdGhlIGBhYicgYWx0ZXJuYXRpdmUKKysgICAgICAgICAgICAgICAoZS5nLiwgaWYgdGhlIHN0cmluZyB3YXMgYGFiJykuICBCdXQgaW5zdGVhZCBvZiB0cnlpbmcgdG8KKysgICAgICAgICAgICAgICBkZXRlY3QgdGhhdCBoZXJlLCB0aGUgYWx0ZXJuYXRpdmUgaGFzIHB1dCBvbiBhIGR1bW15CisrICAgICAgICAgICAgICAgZmFpbHVyZSBwb2ludCB3aGljaCBpcyB3aGF0IHdlIHdpbGwgZW5kIHVwIHBvcHBpbmcuICAqLworKworKwkgICAgLyogU2tpcCBvdmVyIG9wZW4vY2xvc2UtZ3JvdXAgY29tbWFuZHMuCisrCSAgICAgICBJZiB3aGF0IGZvbGxvd3MgdGhpcyBsb29wIGlzIGEgLi4uKyBjb25zdHJ1Y3QsCisrCSAgICAgICBsb29rIGF0IHdoYXQgYmVnaW5zIGl0cyBib2R5LCBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8KKysJICAgICAgIG1hdGNoIGF0IGxlYXN0IG9uZSBvZiB0aGF0LiAgKi8KKysJICAgIHdoaWxlICgxKQorKwkgICAgICB7CisrCQlpZiAocDIgKyAyIDwgcGVuZAorKwkJICAgICYmICgocmVfb3Bjb2RlX3QpICpwMiA9PSBzdG9wX21lbW9yeQorKwkJCXx8IChyZV9vcGNvZGVfdCkgKnAyID09IHN0YXJ0X21lbW9yeSkpCisrCQkgIHAyICs9IDM7CisrCQllbHNlIGlmIChwMiArIDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSA8IHBlbmQKKysJCQkgJiYgKHJlX29wY29kZV90KSAqcDIgPT0gZHVtbXlfZmFpbHVyZV9qdW1wKQorKwkJICBwMiArPSAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCQllbHNlCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCisrCSAgICBwMSA9IHAgKyBtY250OworKwkgICAgLyogcDFbMF0gLi4uIHAxWzJdIGFyZSB0aGUgYG9uX2ZhaWx1cmVfanVtcCcgY29ycmVzcG9uZGluZworKwkgICAgICAgdG8gdGhlIGBtYXliZV9maW5hbGl6ZV9qdW1wJyBvZiB0aGlzIGNhc2UuICBFeGFtaW5lIHdoYXQKKysJICAgICAgIGZvbGxvd3MuICAqLworKworKyAgICAgICAgICAgIC8qIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHdlIGNhbiBjaGFuZ2UuICAqLworKyAgICAgICAgICAgIGlmIChwMiA9PSBwZW5kKQorKwkgICAgICB7CisrCQkvKiBDb25zaWRlciB3aGF0IGhhcHBlbnMgd2hlbiBtYXRjaGluZyAiOlwoLipcKSIKKysJCSAgIGFnYWluc3QgIjovIi4gIEkgZG9uJ3QgcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBjb2RlCisrCQkgICB5ZXQuICAqLworKyAgCSAgICAgICAgcFstKDErT0ZGU0VUX0FERFJFU1NfU0laRSldID0gKFVDSEFSX1QpCisrCQkgIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMQorKyAgICAgICAgICAgICAgICAgICgiICBFbmQgb2YgcGF0dGVybjogY2hhbmdlIHRvIGBwb3BfZmFpbHVyZV9qdW1wJy5cbiIpOworKyAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGVsc2UgaWYgKChyZV9vcGNvZGVfdCkgKnAyID09IGV4YWN0bgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICAgICB8fCAocmVfb3Bjb2RlX3QpICpwMiA9PSBleGFjdG5fYmluCisrI2VuZGlmCisrCQkgICAgIHx8IChidWZwLT5uZXdsaW5lX2FuY2hvciAmJiAocmVfb3Bjb2RlX3QpICpwMiA9PSBlbmRsaW5lKSkKKysJICAgICAgeworKwkJcmVnaXN0ZXIgVUNIQVJfVCBjCisrICAgICAgICAgICAgICAgICAgPSAqcDIgPT0gKFVDSEFSX1QpIGVuZGxpbmUgPyAnXG4nIDogcDJbMl07CisrCisrICAgICAgICAgICAgICAgIGlmICgoKHJlX29wY29kZV90KSBwMVsxK09GRlNFVF9BRERSRVNTX1NJWkVdID09IGV4YWN0bgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICAgICB8fCAocmVfb3Bjb2RlX3QpIHAxWzErT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gZXhhY3RuX2JpbgorKyNlbmRpZgorKwkJICAgICkgJiYgcDFbMytPRkZTRVRfQUREUkVTU19TSVpFXSAhPSBjKQorKyAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgIHBbLSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSA9IChVQ0hBUl9UKQorKwkJICAgICAgcG9wX2ZhaWx1cmVfanVtcDsKKysjaWZkZWYgV0NIQVIKKysJCSAgICAgIERFQlVHX1BSSU5UMyAoIiAgJUMgIT0gJUMgPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIsCisrCQkJCSAgICAod2ludF90KSBjLAorKwkJCQkgICAgKHdpbnRfdCkgcDFbMytPRkZTRVRfQUREUkVTU19TSVpFXSk7CisrI2Vsc2UKKysJCSAgICAgIERFQlVHX1BSSU5UMyAoIiAgJWMgIT0gJWMgPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIsCisrCQkJCSAgICAoY2hhcikgYywKKysJCQkJICAgIChjaGFyKSBwMVszK09GRlNFVF9BRERSRVNTX1NJWkVdKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgICB9CisrCisrI2lmbmRlZiBXQ0hBUgorKwkJZWxzZSBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0CisrCQkJIHx8IChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldF9ub3QpCisrCQkgIHsKKysJCSAgICBpbnQgbmVnYXRlID0gKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0X25vdDsKKysKKysJCSAgICBpZiAoYyA8ICh1bnNpZ25lZCkgKHAxWzRdICogQllURVdJRFRIKQorKwkJCSYmIHAxWzUgKyBjIC8gQllURVdJRFRIXSAmICgxIDw8IChjICUgQllURVdJRFRIKSkpCisrCQkgICAgICBuZWdhdGUgPSAhbmVnYXRlOworKworKyAgICAgICAgICAgICAgICAgICAgLyogYG5lZ2F0ZScgaXMgZXF1YWwgdG8gMSBpZiBjIHdvdWxkIG1hdGNoLCB3aGljaCBtZWFucworKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2UgY2FuJ3QgY2hhbmdlIHRvIHBvcF9mYWlsdXJlX2p1bXAuICAqLworKwkJICAgIGlmICghbmVnYXRlKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICAgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrI2VuZGlmIC8qIG5vdCBXQ0hBUiAqLworKwkgICAgICB9CisrI2lmbmRlZiBXQ0hBUgorKyAgICAgICAgICAgIGVsc2UgaWYgKChyZV9vcGNvZGVfdCkgKnAyID09IGNoYXJzZXQpCisrCSAgICAgIHsKKysJCS8qIFdlIHdpbiBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsb29wIGlzIG5vdCBwYXJ0CisrICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjaGFyc2V0LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gZXhhY3RuCisrIAkJICAgICYmICEgKChpbnQpIHAyWzFdICogQllURVdJRFRIID4gKGludCkgcDFbNV0KKysgCQkJICAmJiAocDJbMiArIHAxWzVdIC8gQllURVdJRFRIXQorKyAJCQkgICAgICAmICgxIDw8IChwMVs1XSAlIEJZVEVXSURUSCkpKSkpCisrCQkgIHsKKysJCSAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKwkJICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysJCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldF9ub3QpCisrCQkgIHsKKysJCSAgICBpbnQgaWR4OworKwkJICAgIC8qIFdlIHdpbiBpZiB0aGUgY2hhcnNldF9ub3QgaW5zaWRlIHRoZSBsb29wCisrCQkgICAgICAgbGlzdHMgZXZlcnkgY2hhcmFjdGVyIGxpc3RlZCBpbiB0aGUgY2hhcnNldCBhZnRlci4gICovCisrCQkgICAgZm9yIChpZHggPSAwOyBpZHggPCAoaW50KSBwMlsxXTsgaWR4KyspCisrCQkgICAgICBpZiAoISAocDJbMiArIGlkeF0gPT0gMAorKwkJCSAgICAgfHwgKGlkeCA8IChpbnQpIHAxWzRdCisrCQkJCSAmJiAoKHAyWzIgKyBpZHhdICYgfiBwMVs1ICsgaWR4XSkgPT0gMCkpKSkKKysJCQlicmVhazsKKysKKysJCSAgICBpZiAoaWR4ID09IHAyWzFdKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICAgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrCQllbHNlIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXQpCisrCQkgIHsKKysJCSAgICBpbnQgaWR4OworKwkJICAgIC8qIFdlIHdpbiBpZiB0aGUgY2hhcnNldCBpbnNpZGUgdGhlIGxvb3AKKysJCSAgICAgICBoYXMgbm8gb3ZlcmxhcCB3aXRoIHRoZSBvbmUgYWZ0ZXIgdGhlIGxvb3AuICAqLworKwkJICAgIGZvciAoaWR4ID0gMDsKKysJCQkgaWR4IDwgKGludCkgcDJbMV0gJiYgaWR4IDwgKGludCkgcDFbNF07CisrCQkJIGlkeCsrKQorKwkJICAgICAgaWYgKChwMlsyICsgaWR4XSAmIHAxWzUgKyBpZHhdKSAhPSAwKQorKwkJCWJyZWFrOworKworKwkJICAgIGlmIChpZHggPT0gcDJbMV0gfHwgaWR4ID09IHAxWzRdKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICAgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrCSAgICAgIH0KKysjZW5kaWYgLyogbm90IFdDSEFSICovCisrCSAgfQorKwkgIHAgLT0gT0ZGU0VUX0FERFJFU1NfU0laRTsJLyogUG9pbnQgYXQgcmVsYXRpdmUgYWRkcmVzcyBhZ2Fpbi4gICovCisrCSAgaWYgKChyZV9vcGNvZGVfdCkgcFstMV0gIT0gcG9wX2ZhaWx1cmVfanVtcCkKKysJICAgIHsKKysJICAgICAgcFstMV0gPSAoVUNIQVJfVCkganVtcDsKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTWF0Y2ggPT4ganVtcC5cbiIpOworKwkgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysJICAgIH0KKysgICAgICAgIC8qIE5vdGUgZmFsbCB0aHJvdWdoLiAgKi8KKysKKysKKysJLyogVGhlIGVuZCBvZiBhIHNpbXBsZSByZXBlYXQgaGFzIGEgcG9wX2ZhaWx1cmVfanVtcCBiYWNrIHRvCisrICAgICAgICAgICBpdHMgbWF0Y2hpbmcgb25fZmFpbHVyZV9qdW1wLCB3aGVyZSB0aGUgbGF0dGVyIHdpbGwgcHVzaCBhCisrICAgICAgICAgICBmYWlsdXJlIHBvaW50LiAgVGhlIHBvcF9mYWlsdXJlX2p1bXAgdGFrZXMgb2ZmIGZhaWx1cmUKKysgICAgICAgICAgIHBvaW50cyBwdXQgb24gYnkgdGhpcyBwb3BfZmFpbHVyZV9qdW1wJ3MgbWF0Y2hpbmcKKysgICAgICAgICAgIG9uX2ZhaWx1cmVfanVtcDsgd2UgZ290IHRocm91Z2ggdGhlIHBhdHRlcm4gdG8gaGVyZSBmcm9tIHRoZQorKyAgICAgICAgICAgbWF0Y2hpbmcgb25fZmFpbHVyZV9qdW1wLCBzbyBkaWRuJ3QgZmFpbC4gICovCisrICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIHBhc3Mgc2VwYXJhdGUgc3RvcmFnZSBmb3IgdGhlIGxvd2VzdCBhbmQKKysgICAgICAgICAgICAgICBoaWdoZXN0IHJlZ2lzdGVycywgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUKKysgICAgICAgICAgICAgICBhY3R1YWwgdmFsdWVzLiAgT3RoZXJ3aXNlLCB3ZSB3aWxsIHJlc3RvcmUgb25seSBvbmUKKysgICAgICAgICAgICAgICByZWdpc3RlciBmcm9tIHRoZSBzdGFjaywgc2luY2UgbG93ZXN0IHdpbGwgPT0gaGlnaGVzdCBpbgorKyAgICAgICAgICAgICAgIGBwb3BfZmFpbHVyZV9wb2ludCcuICAqLworKyAgICAgICAgICAgIGFjdGl2ZV9yZWdfdCBkdW1teV9sb3dfcmVnLCBkdW1teV9oaWdoX3JlZzsKKysgICAgICAgICAgICBVQ0hBUl9UICpwZHVtbXkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0gTlVMTDsKKysgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnNkdW1teSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSBOVUxMOworKworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgUE9QX0ZBSUxVUkVfUE9JTlQgKHNkdW1teSwgcGR1bW15LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9sb3dfcmVnLCBkdW1teV9oaWdoX3JlZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2R1bW15LCByZWdfZHVtbXksIHJlZ19pbmZvX2R1bW15KTsKKysgICAgICAgICAgfQorKwkgIC8qIE5vdGUgZmFsbCB0aHJvdWdoLiAgKi8KKysKKysJdW5jb25kaXRpb25hbF9qdW1wOgorKyNpZmRlZiBfTElCQworKwkgIERFQlVHX1BSSU5UMiAoIlxuJXA6ICIsIHApOworKyNlbHNlCisrCSAgREVCVUdfUFJJTlQyICgiXG4weCV4OiAiLCBwKTsKKysjZW5kaWYKKysgICAgICAgICAgLyogTm90ZSBmYWxsIHRocm91Z2guICAqLworKworKyAgICAgICAgLyogVW5jb25kaXRpb25hbGx5IGp1bXAgKHdpdGhvdXQgcG9wcGluZyBhbnkgZmFpbHVyZSBwb2ludHMpLiAgKi8KKysgICAgICAgIGNhc2UganVtcDoKKysJICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CS8qIEdldCB0aGUgYW1vdW50IHRvIGp1bXAuICAqLworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcganVtcCAlZCAiLCBtY250KTsKKysJICBwICs9IG1jbnQ7CQkJCS8qIERvIHRoZSBqdW1wLiAgKi8KKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiKHRvICVwKS5cbiIsIHApOworKyNlbHNlCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIih0byAweCV4KS5cbiIsIHApOworKyNlbmRpZgorKwkgIGJyZWFrOworKworKworKyAgICAgICAgLyogV2UgbmVlZCB0aGlzIG9wY29kZSBzbyB3ZSBjYW4gZGV0ZWN0IHdoZXJlIGFsdGVybmF0aXZlcyBlbmQKKysgICAgICAgICAgIGluIGBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wJyBldCBhbC4gICovCisrICAgICAgICBjYXNlIGp1bXBfcGFzdF9hbHQ6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBqdW1wX3Bhc3RfYWx0LlxuIik7CisrICAgICAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKworKworKyAgICAgICAgLyogTm9ybWFsbHksIHRoZSBvbl9mYWlsdXJlX2p1bXAgcHVzaGVzIGEgZmFpbHVyZSBwb2ludCwgd2hpY2gKKysgICAgICAgICAgIHRoZW4gZ2V0cyBwb3BwZWQgYXQgcG9wX2ZhaWx1cmVfanVtcC4gIFdlIHdpbGwgZW5kIHVwIGF0CisrICAgICAgICAgICBwb3BfZmFpbHVyZV9qdW1wLCBhbHNvLCBhbmQgd2l0aCBhIHBhdHRlcm4gb2YsIHNheSwgYGErJywgd2UKKysgICAgICAgICAgIGFyZSBza2lwcGluZyBvdmVyIHRoZSBvbl9mYWlsdXJlX2p1bXAsIHNvIHdlIGhhdmUgdG8gcHVzaAorKyAgICAgICAgICAgc29tZXRoaW5nIG1lYW5pbmdsZXNzIGZvciBwb3BfZmFpbHVyZV9qdW1wIHRvIHBvcC4gICovCisrICAgICAgICBjYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGR1bW15X2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAvKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1c2ggZm9yIHRoZSBzdHJpbmcgaGVyZS4gIFdoYXQKKysgICAgICAgICAgICAgdGhlIGNvZGUgYXQgYGZhaWwnIHRlc3RzIGlzIHRoZSB2YWx1ZSBmb3IgdGhlIHBhdHRlcm4uICAqLworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKE5VTEwsIE5VTEwsIC0yKTsKKysgICAgICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrCisrCisrICAgICAgICAvKiBBdCB0aGUgZW5kIG9mIGFuIGFsdGVybmF0aXZlLCB3ZSBuZWVkIHRvIHB1c2ggYSBkdW1teSBmYWlsdXJlCisrICAgICAgICAgICBwb2ludCBpbiBjYXNlIHdlIGFyZSBmb2xsb3dlZCBieSBhIGBwb3BfZmFpbHVyZV9qdW1wJywgYmVjYXVzZQorKyAgICAgICAgICAgd2UgZG9uJ3Qgd2FudCB0aGUgZmFpbHVyZSBwb2ludCBmb3IgdGhlIGFsdGVybmF0aXZlIHRvIGJlCisrICAgICAgICAgICBwb3BwZWQuICBGb3IgZXhhbXBsZSwgbWF0Y2hpbmcgYChhfGFiKSonIGFnYWluc3QgYGFhYicKKysgICAgICAgICAgIHJlcXVpcmVzIHRoYXQgd2UgbWF0Y2ggdGhlIGBhYicgYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgY2FzZSBwdXNoX2R1bW15X2ZhaWx1cmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBwdXNoX2R1bW15X2ZhaWx1cmUuXG4iKTsKKysgICAgICAgICAgLyogU2VlIGNvbW1lbnRzIGp1c3QgYWJvdmUgYXQgYGR1bW15X2ZhaWx1cmVfanVtcCcgYWJvdXQgdGhlCisrICAgICAgICAgICAgIHR3byB6ZXJvZXMuICAqLworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKE5VTEwsIE5VTEwsIC0yKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvKiBIYXZlIHRvIHN1Y2NlZWQgbWF0Y2hpbmcgd2hhdCBmb2xsb3dzIGF0IGxlYXN0IG4gdGltZXMuCisrICAgICAgICAgICBBZnRlciB0aGF0LCBoYW5kbGUgbGlrZSBgb25fZmFpbHVyZV9qdW1wJy4gICovCisrICAgICAgICBjYXNlIHN1Y2NlZWRfbjoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVIgKG1jbnQsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIHN1Y2NlZWRfbiAlZC5cbiIsIG1jbnQpOworKworKyAgICAgICAgICBhc3NlcnQgKG1jbnQgPj0gMCk7CisrICAgICAgICAgIC8qIE9yaWdpbmFsbHksIHRoaXMgaXMgaG93IG1hbnkgdGltZXMgd2UgSEFWRSB0byBzdWNjZWVkLiAgKi8KKysgICAgICAgICAgaWYgKG1jbnQgPiAwKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBtY250LS07CisrCSAgICAgICBwICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgU1RPUkVfTlVNQkVSX0FORF9JTkNSIChwLCBtY250KTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgJXAgdG8gJWQuXG4iLCBwIC0gT0ZGU0VUX0FERFJFU1NfU0laRQorKwkJCSAgICAgLCBtY250KTsKKysjZWxzZQorKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAweCV4IHRvICVkLlxuIiwgcCAtIE9GRlNFVF9BRERSRVNTX1NJWkUKKysJCQkgICAgICwgbWNudCk7CisrI2VuZGlmCisrICAgICAgICAgICAgfQorKwkgIGVsc2UgaWYgKG1jbnQgPT0gMCkKKysgICAgICAgICAgICB7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgICBERUJVR19QUklOVDIgKCIgIFNldHRpbmcgdHdvIGJ5dGVzIGZyb20gJXAgdG8gbm9fb3AuXG4iLAorKwkJCSAgICBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgU2V0dGluZyB0d28gYnl0ZXMgZnJvbSAweCV4IHRvIG5vX29wLlxuIiwKKysJCQkgICAgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyNlbmRpZiAvKiBfTElCQyAqLworKworKyNpZmRlZiBXQ0hBUgorKwkgICAgICBwWzFdID0gKFVDSEFSX1QpIG5vX29wOworKyNlbHNlCisrCSAgICAgIHBbMl0gPSAoVUNIQVJfVCkgbm9fb3A7CisrICAgICAgICAgICAgICBwWzNdID0gKFVDSEFSX1QpIG5vX29wOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgICAgICAgZ290byBvbl9mYWlsdXJlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXBfbjoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVIgKG1jbnQsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGp1bXBfbiAlZC5cbiIsIG1jbnQpOworKworKyAgICAgICAgICAvKiBPcmlnaW5hbGx5LCB0aGlzIGlzIGhvdyBtYW55IHRpbWVzIHdlIENBTiBqdW1wLiAgKi8KKysgICAgICAgICAgaWYgKG1jbnQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIG1jbnQtLTsKKysgICAgICAgICAgICAgICBTVE9SRV9OVU1CRVIgKHAgKyBPRkZTRVRfQUREUkVTU19TSVpFLCBtY250KTsKKysKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgJXAgdG8gJWQuXG4iLCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSwKKysJCQkgICAgIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nIDB4JXggdG8gJWQuXG4iLCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSwKKysJCQkgICAgIG1jbnQpOworKyNlbmRpZiAvKiBfTElCQyAqLworKwkgICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAvKiBJZiBkb24ndCBoYXZlIHRvIGp1bXAgYW55IG1vcmUsIHNraXAgb3ZlciB0aGUgcmVzdCBvZiBjb21tYW5kLiAgKi8KKysJICBlbHNlCisrCSAgICBwICs9IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzZXRfbnVtYmVyX2F0OgorKwkgIHsKKysgICAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgc2V0X251bWJlcl9hdC5cbiIpOworKworKyAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysgICAgICAgICAgICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgJXAgdG8gJWQuXG4iLCBwMSwgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgMHgleCB0byAlZC5cbiIsIHAxLCBtY250KTsKKysjZW5kaWYKKysJICAgIFNUT1JFX05VTUJFUiAocDEsIG1jbnQpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICB9CisrCisrI2lmIDAKKysJLyogVGhlIERFQyBBbHBoYSBDIGNvbXBpbGVyIDMueCBnZW5lcmF0ZXMgaW5jb3JyZWN0IGNvZGUgZm9yIHRoZQorKwkgICB0ZXN0ICBXT1JEQ0hBUl9QIChkIC0gMSkgIT0gV09SRENIQVJfUCAoZCkgIGluIHRoZSBleHBhbnNpb24gb2YKKysJICAgQVRfV09SRF9CT1VOREFSWSwgc28gdGhpcyBjb2RlIGlzIGRpc2FibGVkLiAgRXhwYW5kaW5nIHRoZQorKwkgICBtYWNybyBhbmQgaW50cm9kdWNpbmcgdGVtcG9yYXJ5IHZhcmlhYmxlcyB3b3JrcyBhcm91bmQgdGhlIGJ1Zy4gICovCisrCisrCWNhc2Ugd29yZGJvdW5kOgorKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfV09SRF9CT1VOREFSWSAoZCkpCisrCSAgICBicmVhazsKKysJICBnb3RvIGZhaWw7CisrCisrCWNhc2Ugbm90d29yZGJvdW5kOgorKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub3R3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfV09SRF9CT1VOREFSWSAoZCkpCisrCSAgICBnb3RvIGZhaWw7CisrCSAgYnJlYWs7CisrI2Vsc2UKKysJY2FzZSB3b3JkYm91bmQ6CisrCXsKKysJICBib29sZWFuIHByZXZjaGFyLCB0aGlzY2hhcjsKKysKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSB8fCBBVF9TVFJJTkdTX0VORCAoZCkpCisrCSAgICBicmVhazsKKysKKysJICBwcmV2Y2hhciA9IFdPUkRDSEFSX1AgKGQgLSAxKTsKKysJICB0aGlzY2hhciA9IFdPUkRDSEFSX1AgKGQpOworKwkgIGlmIChwcmV2Y2hhciAhPSB0aGlzY2hhcikKKysJICAgIGJyZWFrOworKwkgIGdvdG8gZmFpbDsKKysJfQorKworKyAgICAgIGNhc2Ugbm90d29yZGJvdW5kOgorKwl7CisrCSAgYm9vbGVhbiBwcmV2Y2hhciwgdGhpc2NoYXI7CisrCisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vdHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgQVRfU1RSSU5HU19FTkQgKGQpKQorKwkgICAgZ290byBmYWlsOworKworKwkgIHByZXZjaGFyID0gV09SRENIQVJfUCAoZCAtIDEpOworKwkgIHRoaXNjaGFyID0gV09SRENIQVJfUCAoZCk7CisrCSAgaWYgKHByZXZjaGFyICE9IHRoaXNjaGFyKQorKwkgICAgZ290byBmYWlsOworKwkgIGJyZWFrOworKwl9CisrI2VuZGlmCisrCisrCWNhc2Ugd29yZGJlZzoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRiZWcuXG4iKTsKKysJICBpZiAoIUFUX1NUUklOR1NfRU5EIChkKSAmJiBXT1JEQ0hBUl9QIChkKQorKwkgICAgICAmJiAoQVRfU1RSSU5HU19CRUcgKGQpIHx8ICFXT1JEQ0hBUl9QIChkIC0gMSkpKQorKwkgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysJY2FzZSB3b3JkZW5kOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGVuZC5cbiIpOworKwkgIGlmICghQVRfU1RSSU5HU19CRUcgKGQpICYmIFdPUkRDSEFSX1AgKGQgLSAxKQorKyAgICAgICAgICAgICAgJiYgKEFUX1NUUklOR1NfRU5EIChkKSB8fCAhV09SRENIQVJfUCAoZCkpKQorKwkgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysjaWZkZWYgZW1hY3MKKysgIAljYXNlIGJlZm9yZV9kb3Q6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBiZWZvcmVfZG90LlxuIik7CisrIAkgIGlmIChQVFJfQ0hBUl9QT1MgKCh1bnNpZ25lZCBjaGFyICopIGQpID49IHBvaW50KQorKyAgCSAgICBnb3RvIGZhaWw7CisrICAJICBicmVhazsKKysKKysgIAljYXNlIGF0X2RvdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGF0X2RvdC5cbiIpOworKyAJICBpZiAoUFRSX0NIQVJfUE9TICgodW5zaWduZWQgY2hhciAqKSBkKSAhPSBwb2ludCkKKysgIAkgICAgZ290byBmYWlsOworKyAgCSAgYnJlYWs7CisrCisrICAJY2FzZSBhZnRlcl9kb3Q6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBhZnRlcl9kb3QuXG4iKTsKKysgICAgICAgICAgaWYgKFBUUl9DSEFSX1BPUyAoKHVuc2lnbmVkIGNoYXIgKikgZCkgPD0gcG9pbnQpCisrICAJICAgIGdvdG8gZmFpbDsKKysgIAkgIGJyZWFrOworKworKwljYXNlIHN5bnRheHNwZWM6CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBzeW50YXhzcGVjICVkLlxuIiwgbWNudCk7CisrCSAgbWNudCA9ICpwKys7CisrCSAgZ290byBtYXRjaHN5bnRheDsKKysKKysgICAgICAgIGNhc2Ugd29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBFbWFjcyB3b3JkY2hhci5cbiIpOworKwkgIG1jbnQgPSAoaW50KSBTd29yZDsKKysgICAgICAgIG1hdGNoc3ludGF4OgorKwkgIFBSRUZFVENIICgpOworKwkgIC8qIENhbid0IHVzZSAqZCsrIGhlcmU7IFNZTlRBWCBtYXkgYmUgYW4gdW5zYWZlIG1hY3JvLiAgKi8KKysJICBkKys7CisrCSAgaWYgKFNZTlRBWCAoZFstMV0pICE9IChlbnVtIHN5bnRheGNvZGUpIG1jbnQpCisrCSAgICBnb3RvIGZhaWw7CisrICAgICAgICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugbm90c3ludGF4c3BlYzoKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIG5vdHN5bnRheHNwZWMgJWQuXG4iLCBtY250KTsKKysJICBtY250ID0gKnArKzsKKysJICBnb3RvIG1hdGNobm90c3ludGF4OworKworKyAgICAgICAgY2FzZSBub3R3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIEVtYWNzIG5vdHdvcmRjaGFyLlxuIik7CisrCSAgbWNudCA9IChpbnQpIFN3b3JkOworKyAgICAgICAgbWF0Y2hub3RzeW50YXg6CisrCSAgUFJFRkVUQ0ggKCk7CisrCSAgLyogQ2FuJ3QgdXNlICpkKysgaGVyZTsgU1lOVEFYIG1heSBiZSBhbiB1bnNhZmUgbWFjcm8uICAqLworKwkgIGQrKzsKKysJICBpZiAoU1lOVEFYIChkWy0xXSkgPT0gKGVudW0gc3ludGF4Y29kZSkgbWNudCkKKysJICAgIGdvdG8gZmFpbDsKKysJICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBicmVhazsKKysKKysjZWxzZSAvKiBub3QgZW1hY3MgKi8KKysJY2FzZSB3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vbi1FbWFjcyB3b3JkY2hhci5cbiIpOworKwkgIFBSRUZFVENIICgpOworKyAgICAgICAgICBpZiAoIVdPUkRDSEFSX1AgKGQpKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysJICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBkKys7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugbm90d29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub24tRW1hY3Mgbm90d29yZGNoYXIuXG4iKTsKKysJICBQUkVGRVRDSCAoKTsKKysJICBpZiAoV09SRENIQVJfUCAoZCkpCisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBkKys7CisrCSAgYnJlYWs7CisrI2VuZGlmIC8qIG5vdCBlbWFjcyAqLworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgYWJvcnQgKCk7CisrCX0KKysgICAgICBjb250aW51ZTsgIC8qIFN1Y2Nlc3NmdWxseSBleGVjdXRlZCBvbmUgcGF0dGVybiBjb21tYW5kOyBrZWVwIGdvaW5nLiAgKi8KKysKKysKKysgICAgLyogV2UgZ290byBoZXJlIGlmIGEgbWF0Y2hpbmcgb3BlcmF0aW9uIGZhaWxzLiAqLworKyAgICBmYWlsOgorKyAgICAgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKSkKKysJeyAvKiBBIHJlc3RhcnQgcG9pbnQgaXMga25vd24uICBSZXN0b3JlIHRvIHRoYXQgc3RhdGUuICAqLworKyAgICAgICAgICBERUJVR19QUklOVDEgKCJcbkZBSUw6XG4iKTsKKysgICAgICAgICAgUE9QX0ZBSUxVUkVfUE9JTlQgKGQsIHAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZywgaGlnaGVzdF9hY3RpdmVfcmVnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnc3RhcnQsIHJlZ2VuZCwgcmVnX2luZm8pOworKworKyAgICAgICAgICAvKiBJZiB0aGlzIGZhaWx1cmUgcG9pbnQgaXMgYSBkdW1teSwgdHJ5IHRoZSBuZXh0IG9uZS4gICovCisrICAgICAgICAgIGlmICghcCkKKysJICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgICAgLyogSWYgd2UgZmFpbGVkIHRvIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGRvbid0IGV4YW1pbmUgKnAuICAqLworKwkgIGFzc2VydCAocCA8PSBwZW5kKTsKKysgICAgICAgICAgaWYgKHAgPCBwZW5kKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYV9qdW1wX24gPSBmYWxzZTsKKysKKysgICAgICAgICAgICAgIC8qIElmIGZhaWxlZCB0byBhIGJhY2t3YXJkcyBqdW1wIHRoYXQncyBwYXJ0IG9mIGEgcmVwZXRpdGlvbgorKyAgICAgICAgICAgICAgICAgbG9vcCwgbmVlZCB0byBwb3AgdGhpcyBmYWlsdXJlIHBvaW50IGFuZCB1c2UgdGhlIG5leHQgb25lLiAgKi8KKysgICAgICAgICAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjYXNlIGp1bXBfbjoKKysgICAgICAgICAgICAgICAgICBpc19hX2p1bXBfbiA9IHRydWU7CisrICAgICAgICAgICAgICAgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrICAgICAgICAgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgICAgICAgY2FzZSBqdW1wOgorKyAgICAgICAgICAgICAgICAgIHAxID0gcCArIDE7CisrICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgICAgICAgICBwMSArPSBtY250OworKworKyAgICAgICAgICAgICAgICAgIGlmICgoaXNfYV9qdW1wX24gJiYgKHJlX29wY29kZV90KSAqcDEgPT0gc3VjY2VlZF9uKQorKyAgICAgICAgICAgICAgICAgICAgICB8fCAoIWlzX2FfanVtcF9uCisrICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBvbl9mYWlsdXJlX2p1bXApKQorKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8gOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICBpZiAoZCA+PSBzdHJpbmcxICYmIGQgPD0gZW5kMSkKKysJICAgIGRlbmQgPSBlbmRfbWF0Y2hfMTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBicmVhazsgICAvKiBNYXRjaGluZyBhdCB0aGlzIHN0YXJ0aW5nIHBvaW50IHJlYWxseSBmYWlscy4gICovCisrICAgIH0gLyogZm9yICg7OykgKi8KKysKKysgIGlmIChiZXN0X3JlZ3Nfc2V0KQorKyAgICBnb3RvIHJlc3RvcmVfYmVzdF9yZWdzOworKworKyAgRlJFRV9WQVJJQUJMRVMgKCk7CisrCisrICByZXR1cm4gLTE7ICAgICAgICAgCQkJLyogRmFpbHVyZSB0byBtYXRjaC4gICovCisrfSAvKiByZV9tYXRjaF8yICovCisrDAorKy8qIFN1YnJvdXRpbmUgZGVmaW5pdGlvbnMgZm9yIHJlX21hdGNoXzIuICAqLworKworKworKy8qIFdlIGFyZSBwYXNzZWQgUCBwb2ludGluZyB0byBhIHJlZ2lzdGVyIG51bWJlciBhZnRlciBhIHN0YXJ0X21lbW9yeS4KKysKKysgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0dGVybiB1cCB0byB0aGUgY29ycmVzcG9uZGluZyBzdG9wX21lbW9yeSBjYW4KKysgICBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorKworKyAgIElmIHdlIGZpbmQgdGhlIG1hdGNoaW5nIHN0b3BfbWVtb3J5LCBzZXRzIFAgdG8gcG9pbnQgdG8gb25lIHBhc3QgaXRzIG51bWJlci4KKysgICBPdGhlcndpc2UsIHNldHMgUCB0byBhbiB1bmRlZmluZWQgYnl0ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRU5ELgorKworKyAgIFdlIGRvbid0IGhhbmRsZSBkdXBsaWNhdGVzIHByb3Blcmx5ICh5ZXQpLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsIFVDSEFSX1QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbykKKyt7CisrICBpbnQgbWNudDsKKysgIC8qIFBvaW50IHRvIGFmdGVyIHRoZSBhcmdzIHRvIHRoZSBzdGFydF9tZW1vcnkuICAqLworKyAgVUNIQVJfVCAqcDEgPSAqcCArIDI7CisrCisrICB3aGlsZSAocDEgPCBlbmQpCisrICAgIHsKKysgICAgICAvKiBTa2lwIG92ZXIgb3Bjb2RlcyB0aGF0IGNhbiBtYXRjaCBub3RoaW5nLCBhbmQgcmV0dXJuIHRydWUgb3IKKysJIGZhbHNlLCBhcyBhcHByb3ByaWF0ZSwgd2hlbiB3ZSBnZXQgdG8gb25lIHRoYXQgY2FuJ3QsIG9yIHRvIHRoZQorKyAgICAgICAgIG1hdGNoaW5nIHN0b3BfbWVtb3J5LiAgKi8KKysKKysgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKQorKyAgICAgICAgeworKyAgICAgICAgLyogQ291bGQgYmUgZWl0aGVyIGEgbG9vcCBvciBhIHNlcmllcyBvZiBhbHRlcm5hdGl2ZXMuICAqLworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIHAxKys7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrCisrICAgICAgICAgIC8qIElmIHRoZSBuZXh0IG9wZXJhdGlvbiBpcyBub3QgYSBqdW1wIGJhY2t3YXJkcyBpbiB0aGUKKysJICAgICBwYXR0ZXJuLiAgKi8KKysKKysJICBpZiAobWNudCA+PSAwKQorKwkgICAgeworKyAgICAgICAgICAgICAgLyogR28gdGhyb3VnaCB0aGUgb25fZmFpbHVyZV9qdW1wcyBvZiB0aGUgYWx0ZXJuYXRpdmVzLAorKyAgICAgICAgICAgICAgICAgc2VlaW5nIGlmIGFueSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGNhbm5vdCBtYXRjaCBub3RoaW5nLgorKyAgICAgICAgICAgICAgICAgVGhlIGxhc3QgYWx0ZXJuYXRpdmUgc3RhcnRzIHdpdGggb25seSBhIGp1bXAsCisrICAgICAgICAgICAgICAgICB3aGVyZWFzIHRoZSByZXN0IHN0YXJ0IHdpdGggb25fZmFpbHVyZV9qdW1wIGFuZCBlbmQKKysgICAgICAgICAgICAgICAgIHdpdGggYSBqdW1wLCBlLmcuLCBoZXJlIGlzIHRoZSBwYXR0ZXJuIGZvciBgYXxifGMnOgorKworKyAgICAgICAgICAgICAgICAgL29uX2ZhaWx1cmVfanVtcC8wLzYvZXhhY3RuLzEvYS9qdW1wX3Bhc3RfYWx0LzAvNgorKyAgICAgICAgICAgICAgICAgL29uX2ZhaWx1cmVfanVtcC8wLzYvZXhhY3RuLzEvYi9qdW1wX3Bhc3RfYWx0LzAvMworKyAgICAgICAgICAgICAgICAgL2V4YWN0bi8xL2MKKysKKysgICAgICAgICAgICAgICAgIFNvLCB3ZSBoYXZlIHRvIGZpcnN0IGdvIHRocm91Z2ggdGhlIGZpcnN0IChuLTEpCisrICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMgYW5kIHRoZW4gZGVhbCB3aXRoIHRoZSBsYXN0IG9uZSBzZXBhcmF0ZWx5LiAgKi8KKysKKysKKysgICAgICAgICAgICAgIC8qIERlYWwgd2l0aCB0aGUgZmlyc3QgKG4tMSkgYWx0ZXJuYXRpdmVzLCB3aGljaCBzdGFydAorKyAgICAgICAgICAgICAgICAgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAgKHNlZSBhYm92ZSkgdGhhdCBqdW1wcyB0byByaWdodAorKyAgICAgICAgICAgICAgICAgcGFzdCBhIGp1bXBfcGFzdF9hbHQuICAqLworKworKyAgICAgICAgICAgICAgd2hpbGUgKChyZV9vcGNvZGVfdCkgcDFbbWNudC0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gPT0KKysJCSAgICAganVtcF9wYXN0X2FsdCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIC8qIGBtY250JyBob2xkcyBob3cgbWFueSBieXRlcyBsb25nIHRoZSBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgICAgICAgICAgIGlzLCBpbmNsdWRpbmcgdGhlIGVuZGluZyBganVtcF9wYXN0X2FsdCcgYW5kCisrICAgICAgICAgICAgICAgICAgICAgaXRzIG51bWJlci4gICovCisrCisrICAgICAgICAgICAgICAgICAgaWYgKCFQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChwMSwgcDEgKyBtY250IC0KKysJCQkJCQkoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpLAorKwkJCQkJCXJlZ19pbmZvKSkKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysKKysgICAgICAgICAgICAgICAgICAvKiBNb3ZlIHRvIHJpZ2h0IGFmdGVyIHRoaXMgYWx0ZXJuYXRpdmUsIGluY2x1ZGluZyB0aGUKKysJCSAgICAganVtcF9wYXN0X2FsdC4gICovCisrICAgICAgICAgICAgICAgICAgcDEgKz0gbWNudDsKKysKKysgICAgICAgICAgICAgICAgICAvKiBCcmVhayBpZiBpdCdzIHRoZSBiZWdpbm5pbmcgb2YgYW4gbi10aCBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgICAgICAgICAgIHRoYXQgZG9lc24ndCBiZWdpbiB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcC4gICovCisrICAgICAgICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgKnAxICE9IG9uX2ZhaWx1cmVfanVtcCkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKwkJICAvKiBTdGlsbCBoYXZlIHRvIGNoZWNrIHRoYXQgaXQncyBub3QgYW4gbi10aAorKwkJICAgICBhbHRlcm5hdGl2ZSB0aGF0IHN0YXJ0cyB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcC4gICovCisrCQkgIHAxKys7CisrICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBwMVttY250LSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSAhPQorKwkJICAgICAganVtcF9wYXN0X2FsdCkKKysgICAgICAgICAgICAgICAgICAgIHsKKysJCSAgICAgIC8qIEdldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuLXRoIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgcDEgLT0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBEZWFsIHdpdGggdGhlIGxhc3QgYWx0ZXJuYXRpdmU6IGdvIGJhY2sgYW5kIGdldCBudW1iZXIKKysgICAgICAgICAgICAgICAgIG9mIHRoZSBganVtcF9wYXN0X2FsdCcganVzdCBiZWZvcmUgaXQuICBgbWNudCcgY29udGFpbnMKKysgICAgICAgICAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSIChtY250LCBwMSAtIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKworKyAgICAgICAgICAgICAgaWYgKCFQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChwMSwgcDEgKyBtY250LCByZWdfaW5mbykpCisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysKKysgICAgICAgICAgICAgIHAxICs9IG1jbnQ7CS8qIEdldCBwYXN0IHRoZSBuLXRoIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgICAgICB9IC8qIGlmIG1jbnQgPiAwICovCisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgY2FzZSBzdG9wX21lbW9yeToKKysJICBhc3NlcnQgKHAxWzFdID09ICoqcCk7CisrICAgICAgICAgICpwID0gcDEgKyAyOworKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIGlmICghUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBlbmQsIHJlZ19pbmZvKSkKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0gLyogd2hpbGUgcDEgPCBlbmQgKi8KKysKKysgIHJldHVybiBmYWxzZTsKKyt9IC8qIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AgKi8KKysKKysKKysvKiBTaW1pbGFyIHRvIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AsIGJ1dCBkb2Vzbid0IGRlYWwgd2l0aCBhbHRlcm5hdGl2ZXM6CisrICAgSXQgZXhwZWN0cyBQIHRvIGJlIHRoZSBmaXJzdCBieXRlIG9mIGEgc2luZ2xlIGFsdGVybmF0aXZlIGFuZCBFTkQgb25lCisrICAgYnl0ZSBwYXN0IHRoZSBsYXN0LiBUaGUgYWx0ZXJuYXRpdmUgY2FuIGNvbnRhaW4gZ3JvdXBzLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKnAsIFVDSEFSX1QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pCisreworKyAgaW50IG1jbnQ7CisrICBVQ0hBUl9UICpwMSA9IHA7CisrCisrICB3aGlsZSAocDEgPCBlbmQpCisrICAgIHsKKysgICAgICAvKiBTa2lwIG92ZXIgb3Bjb2RlcyB0aGF0IGNhbiBtYXRjaCBub3RoaW5nLCBhbmQgYnJlYWsgd2hlbiB3ZSBnZXQKKysgICAgICAgICB0byBvbmUgdGhhdCBjYW4ndC4gICovCisrCisrICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSkKKysgICAgICAgIHsKKysJLyogSXQncyBhIGxvb3AuICAqLworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIHAxKys7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgIHAxICs9IG1jbnQ7CisrICAgICAgICAgIGJyZWFrOworKworKwlkZWZhdWx0OgorKyAgICAgICAgICBpZiAoIVBSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgZW5kLCByZWdfaW5mbykpCisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9ICAvKiB3aGlsZSBwMSA8IGVuZCAqLworKworKyAgcmV0dXJuIHRydWU7CisrfSAvKiBhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCAqLworKworKworKy8qIERlYWxzIHdpdGggdGhlIG9wcyBjb21tb24gdG8gZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCBhbmQKKysgICBhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcC4KKysKKysgICBTZXRzIFAgdG8gb25lIGFmdGVyIHRoZSBvcCBhbmQgaXRzIGFyZ3VtZW50cywgaWYgYW55LiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLCBVQ0hBUl9UICplbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKQorK3sKKysgIGludCBtY250OworKyAgYm9vbGVhbiByZXQ7CisrICBpbnQgcmVnX25vOworKyAgVUNIQVJfVCAqcDEgPSAqcDsKKysKKysgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDErKykKKysgICAgeworKyAgICBjYXNlIG5vX29wOgorKyAgICBjYXNlIGJlZ2xpbmU6CisrICAgIGNhc2UgZW5kbGluZToKKysgICAgY2FzZSBiZWdidWY6CisrICAgIGNhc2UgZW5kYnVmOgorKyAgICBjYXNlIHdvcmRiZWc6CisrICAgIGNhc2Ugd29yZGVuZDoKKysgICAgY2FzZSB3b3JkYm91bmQ6CisrICAgIGNhc2Ugbm90d29yZGJvdW5kOgorKyNpZmRlZiBlbWFjcworKyAgICBjYXNlIGJlZm9yZV9kb3Q6CisrICAgIGNhc2UgYXRfZG90OgorKyAgICBjYXNlIGFmdGVyX2RvdDoKKysjZW5kaWYKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBzdGFydF9tZW1vcnk6CisrICAgICAgcmVnX25vID0gKnAxOworKyAgICAgIGFzc2VydCAocmVnX25vID4gMCAmJiByZWdfbm8gPD0gTUFYX1JFR05VTSk7CisrICAgICAgcmV0ID0gUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIGVuZCwgcmVnX2luZm8pOworKworKyAgICAgIC8qIEhhdmUgdG8gc2V0IHRoaXMgaGVyZSBpbiBjYXNlIHdlJ3JlIGNoZWNraW5nIGEgZ3JvdXAgd2hpY2gKKysgICAgICAgICBjb250YWlucyBhIGdyb3VwIGFuZCBhIGJhY2sgcmVmZXJlbmNlIHRvIGl0LiAgKi8KKysKKysgICAgICBpZiAoUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW3JlZ19ub10pID09IE1BVENIX05VTExfVU5TRVRfVkFMVUUpCisrICAgICAgICBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bcmVnX25vXSkgPSByZXQ7CisrCisrICAgICAgaWYgKCFyZXQpCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIC8qIElmIHRoaXMgaXMgYW4gb3B0aW1pemVkIHN1Y2NlZWRfbiBmb3IgemVybyB0aW1lcywgbWFrZSB0aGUganVtcC4gICovCisrICAgIGNhc2UganVtcDoKKysgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgIGlmIChtY250ID49IDApCisrICAgICAgICBwMSArPSBtY250OworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBzdWNjZWVkX246CisrICAgICAgLyogR2V0IHRvIHRoZSBudW1iZXIgb2YgdGltZXMgdG8gc3VjY2VlZC4gICovCisrICAgICAgcDEgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKworKyAgICAgIGlmIChtY250ID09IDApCisrICAgICAgICB7CisrICAgICAgICAgIHAxIC09IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICBwMSArPSBtY250OworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBkdXBsaWNhdGU6CisrICAgICAgaWYgKCFSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnAxXSkpCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ugc2V0X251bWJlcl9hdDoKKysgICAgICBwMSArPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICAvKiBBbGwgb3RoZXIgb3Bjb2RlcyBtZWFuIHdlIGNhbm5vdCBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgKi8KKysgICAgICByZXR1cm4gZmFsc2U7CisrICB9CisrCisrICAqcCA9IHAxOworKyAgcmV0dXJuIHRydWU7CisrfSAvKiBjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCAqLworKworKworKy8qIFJldHVybiB6ZXJvIGlmIFRSQU5TTEFURVtTMV0gYW5kIFRSQU5TTEFURVtTMl0gYXJlIGlkZW50aWNhbCBmb3IgTEVOCisrICAgYnl0ZXM7IG5vbnplcm8gb3RoZXJ3aXNlLiAgKi8KKysKKytzdGF0aWMgaW50CisrUFJFRklYKGJjbXBfdHJhbnNsYXRlKSAoY29uc3QgQ0hBUl9UICpzMSwgY29uc3QgQ0hBUl9UICpzMiwgcmVnaXN0ZXIgaW50IGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUpCisreworKyAgcmVnaXN0ZXIgY29uc3QgVUNIQVJfVCAqcDEgPSAoY29uc3QgVUNIQVJfVCAqKSBzMTsKKysgIHJlZ2lzdGVyIGNvbnN0IFVDSEFSX1QgKnAyID0gKGNvbnN0IFVDSEFSX1QgKikgczI7CisrICB3aGlsZSAobGVuKQorKyAgICB7CisrI2lmZGVmIFdDSEFSCisrICAgICAgaWYgKCgoKnAxPD0weGZmKT90cmFuc2xhdGVbKnAxKytdOipwMSsrKQorKwkgICE9ICgoKnAyPD0weGZmKT90cmFuc2xhdGVbKnAyKytdOipwMisrKSkKKysJcmV0dXJuIDE7CisrI2Vsc2UgLyogQllURSAqLworKyAgICAgIGlmICh0cmFuc2xhdGVbKnAxKytdICE9IHRyYW5zbGF0ZVsqcDIrK10pIHJldHVybiAxOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgIGxlbi0tOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrDAorKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisrCisrLyogcmVfY29tcGlsZV9wYXR0ZXJuIGlzIHRoZSBHTlUgcmVndWxhciBleHByZXNzaW9uIGNvbXBpbGVyOiBpdAorKyAgIGNvbXBpbGVzIFBBVFRFUk4gKG9mIGxlbmd0aCBTSVpFKSBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIEJVRlAuCisrICAgUmV0dXJucyAwIGlmIHRoZSBwYXR0ZXJuIHdhcyB2YWxpZCwgb3RoZXJ3aXNlIGFuIGVycm9yIHN0cmluZy4KKysKKysgICBBc3N1bWVzIHRoZSBgYWxsb2NhdGVkJyAoYW5kIHBlcmhhcHMgYGJ1ZmZlcicpIGFuZCBgdHJhbnNsYXRlJyBmaWVsZHMKKysgICBhcmUgc2V0IGluIEJVRlAgb24gZW50cnkuCisrCisrICAgV2UgY2FsbCByZWdleF9jb21waWxlIHRvIGRvIHRoZSBhY3R1YWwgY29tcGlsYXRpb24uICAqLworKworK2NvbnN0IGNoYXIgKgorK3JlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IGxlbmd0aCwKKysgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICByZWdfZXJyY29kZV90IHJldDsKKysKKysgIC8qIEdOVSBjb2RlIGlzIHdyaXR0ZW4gdG8gYXNzdW1lIGF0IGxlYXN0IFJFX05SRUdTIHJlZ2lzdGVycyB3aWxsIGJlIHNldAorKyAgICAgKGFuZCBhdCBsZWFzdCBvbmUgZXh0cmEgd2lsbCBiZSAtMSkuICAqLworKyAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxMT0NBVEVEOworKworKyAgLyogQW5kIEdOVSBjb2RlIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gZ2V0IHJlZ2lzdGVyIGluZm9ybWF0aW9uCisrICAgICBieSBwYXNzaW5nIG51bGwgZm9yIHRoZSBSRUdTIGFyZ3VtZW50IHRvIHJlX21hdGNoLCBldGMuLCBub3QgYnkKKysgICAgIHNldHRpbmcgbm9fc3ViLiAgKi8KKysgIGJ1ZnAtPm5vX3N1YiA9IDA7CisrCisrICAvKiBNYXRjaCBhbmNob3JzIGF0IG5ld2xpbmUuICAqLworKyAgYnVmcC0+bmV3bGluZV9hbmNob3IgPSAxOworKworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldCA9IHdjc19yZWdleF9jb21waWxlIChwYXR0ZXJuLCBsZW5ndGgsIHJlX3N5bnRheF9vcHRpb25zLCBidWZwKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldCA9IGJ5dGVfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgbGVuZ3RoLCByZV9zeW50YXhfb3B0aW9ucywgYnVmcCk7CisrCisrICBpZiAoIXJldCkKKysgICAgcmV0dXJuIE5VTEw7CisrICByZXR1cm4gZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgcmV0XSk7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9wYXR0ZXJuLCByZV9jb21waWxlX3BhdHRlcm4pCisrI2VuZGlmCisrDAorKy8qIEVudHJ5IHBvaW50cyBjb21wYXRpYmxlIHdpdGggNC4yIEJTRCByZWdleCBsaWJyYXJ5LiAgV2UgZG9uJ3QgZGVmaW5lCisrICAgdGhlbSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZC4gICovCisrCisrI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgZGVmaW5lZCBfTElCQworKworKy8qIEJTRCBoYXMgb25lIGFuZCBvbmx5IG9uZSBwYXR0ZXJuIGJ1ZmZlci4gICovCisrc3RhdGljIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZV9jb21wX2J1ZjsKKysKKytjaGFyICoKKysjaWZkZWYgX0xJQkMKKysvKiBNYWtlIHRoZXNlIGRlZmluaXRpb25zIHdlYWsgaW4gbGliYywgc28gUE9TSVggcHJvZ3JhbXMgY2FuIHJlZGVmaW5lCisrICAgdGhlc2UgbmFtZXMgaWYgdGhleSBkb24ndCB1c2Ugb3VyIGZ1bmN0aW9ucywgYW5kIHN0aWxsIHVzZQorKyAgIHJlZ2NvbXAvcmVnZXhlYyBiZWxvdyB3aXRob3V0IGxpbmsgZXJyb3JzLiAgKi8KKyt3ZWFrX2Z1bmN0aW9uCisrI2VuZGlmCisrcmVfY29tcCAoY29uc3QgY2hhciAqcykKKyt7CisrICByZWdfZXJyY29kZV90IHJldDsKKysKKysgIGlmICghcykKKysgICAgeworKyAgICAgIGlmICghcmVfY29tcF9idWYuYnVmZmVyKQorKwlyZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAoIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKKysgICAgeworKyAgICAgIHJlX2NvbXBfYnVmLmJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyAoMjAwKTsKKysgICAgICBpZiAocmVfY29tcF9idWYuYnVmZmVyID09IE5VTEwpCisrICAgICAgICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgUkVHX0VTUEFDRV0pOworKyAgICAgIHJlX2NvbXBfYnVmLmFsbG9jYXRlZCA9IDIwMDsKKysKKysgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gKGNoYXIgKikgbWFsbG9jICgxIDw8IEJZVEVXSURUSCk7CisrICAgICAgaWYgKHJlX2NvbXBfYnVmLmZhc3RtYXAgPT0gTlVMTCkKKysJcmV0dXJuIChjaGFyICopIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIFJFR19FU1BBQ0VdKTsKKysgICAgfQorKworKyAgLyogU2luY2UgYHJlX2V4ZWMnIGFsd2F5cyBwYXNzZXMgTlVMTCBmb3IgdGhlIGByZWdzJyBhcmd1bWVudCwgd2UKKysgICAgIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIgZmllbGRzIHdoaWNoIGFmZmVjdCBpdC4gICovCisrCisrICAvKiBNYXRjaCBhbmNob3JzIGF0IG5ld2xpbmVzLiAgKi8KKysgIHJlX2NvbXBfYnVmLm5ld2xpbmVfYW5jaG9yID0gMTsKKysKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXQgPSB3Y3NfcmVnZXhfY29tcGlsZSAocywgc3RybGVuIChzKSwgcmVfc3ludGF4X29wdGlvbnMsICZyZV9jb21wX2J1Zik7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXQgPSBieXRlX3JlZ2V4X2NvbXBpbGUgKHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9vcHRpb25zLCAmcmVfY29tcF9idWYpOworKworKyAgaWYgKCFyZXQpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogWWVzLCB3ZSdyZSBkaXNjYXJkaW5nIGBjb25zdCcgaGVyZSBpZiAhSEFWRV9MSUJJTlRMLiAgKi8KKysgIHJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSByZXRdKTsKKyt9CisrCisrCisraW50CisrI2lmZGVmIF9MSUJDCisrd2Vha19mdW5jdGlvbgorKyNlbmRpZgorK3JlX2V4ZWMgKGNvbnN0IGNoYXIgKnMpCisreworKyAgY29uc3QgaW50IGxlbiA9IHN0cmxlbiAocyk7CisrICByZXR1cm4KKysgICAgMCA8PSByZV9zZWFyY2ggKCZyZV9jb21wX2J1ZiwgcywgbGVuLCAwLCBsZW4sIChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICopIDApOworK30KKysKKysjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKysMCisrLyogUE9TSVguMiBmdW5jdGlvbnMuICBEb24ndCBkZWZpbmUgdGhlc2UgZm9yIEVtYWNzLiAgKi8KKysKKysjaWZuZGVmIGVtYWNzCisrCisrLyogcmVnY29tcCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcyBhIHN0cmluZyBhbmQgY29tcGlsZXMgaXQuCisrCisrICAgUFJFRyBpcyBhIHJlZ2V4X3QgKi4gIFdlIGRvIG5vdCBleHBlY3QgYW55IGZpZWxkcyB0byBiZSBpbml0aWFsaXplZCwKKysgICBzaW5jZSBQT1NJWCBzYXlzIHdlIHNob3VsZG4ndC4gIFRodXMsIHdlIHNldAorKworKyAgICAgYGJ1ZmZlcicgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgdXNlZCcgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGBzeW50YXgnIHRvIFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCBpZiB0aGUKKysgICAgICAgUkVHX0VYVEVOREVEIGJpdCBpbiBDRkxBR1MgaXMgc2V0OyBvdGhlcndpc2UsIHRvCisrICAgICAgIFJFX1NZTlRBWF9QT1NJWF9CQVNJQzsKKysgICAgIGBuZXdsaW5lX2FuY2hvcicgdG8gUkVHX05FV0xJTkUgYmVpbmcgc2V0IGluIENGTEFHUzsKKysgICAgIGBmYXN0bWFwJyB0byBhbiBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZSBmYXN0bWFwOworKyAgICAgYGZhc3RtYXBfYWNjdXJhdGUnIHRvIHplcm87CisrICAgICBgcmVfbnN1YicgdG8gdGhlIG51bWJlciBvZiBzdWJleHByZXNzaW9ucyBpbiBQQVRURVJOLgorKworKyAgIFBBVFRFUk4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBhdHRlcm4gc3RyaW5nLgorKworKyAgIENGTEFHUyBpcyBhIHNlcmllcyBvZiBiaXRzIHdoaWNoIGFmZmVjdCBjb21waWxhdGlvbi4KKysKKysgICAgIElmIFJFR19FWFRFTkRFRCBpcyBzZXQsIHdlIHVzZSBQT1NJWCBleHRlbmRlZCBzeW50YXg7IG90aGVyd2lzZSwgd2UKKysgICAgIHVzZSBQT1NJWCBiYXNpYyBzeW50YXguCisrCisrICAgICBJZiBSRUdfTkVXTElORSBpcyBzZXQsIHRoZW4gLiBhbmQgW14uLi5dIGRvbid0IG1hdGNoIG5ld2xpbmUuCisrICAgICBBbHNvLCByZWdleGVjIHdpbGwgdHJ5IGEgbWF0Y2ggYmVnaW5uaW5nIGFmdGVyIGV2ZXJ5IG5ld2xpbmUuCisrCisrICAgICBJZiBSRUdfSUNBU0UgaXMgc2V0LCB0aGVuIHdlIGNvbnNpZGVycyB1cHBlci0gYW5kIGxvd2VyY2FzZQorKyAgICAgdmVyc2lvbnMgb2YgbGV0dGVycyB0byBiZSBlcXVpdmFsZW50IHdoZW4gbWF0Y2hpbmcuCisrCisrICAgICBJZiBSRUdfTk9TVUIgaXMgc2V0LCB0aGVuIHdoZW4gUFJFRyBpcyBwYXNzZWQgdG8gcmVnZXhlYywgdGhhdAorKyAgICAgcm91dGluZSB3aWxsIHJlcG9ydCBvbmx5IHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYW5kIG5vdGhpbmcgYWJvdXQgdGhlCisrICAgICByZWdpc3RlcnMuCisrCisrICAgSXQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBub256ZXJvIGlmIGl0IGRvZXNuJ3QuICAoU2VlIHJlZ2V4LmggZm9yCisrICAgdGhlIHJldHVybiBjb2RlcyBhbmQgdGhlaXIgbWVhbmluZ3MuKSAgKi8KKysKKytpbnQKKytyZWdjb21wIChyZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgY2ZsYWdzKQorK3sKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKyAgcmVnX3N5bnRheF90IHN5bnRheAorKyAgICA9IChjZmxhZ3MgJiBSRUdfRVhURU5ERUQpID8KKysgICAgICBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgOiBSRV9TWU5UQVhfUE9TSVhfQkFTSUM7CisrCisrICAvKiByZWdleF9jb21waWxlIHdpbGwgYWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrICBwcmVnLT5idWZmZXIgPSAwOworKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKysgIHByZWctPnVzZWQgPSAwOworKworKyAgLyogVHJ5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZmFzdG1hcC4gICovCisrICBwcmVnLT5mYXN0bWFwID0gKGNoYXIgKikgbWFsbG9jICgxIDw8IEJZVEVXSURUSCk7CisrCisrICBpZiAoY2ZsYWdzICYgUkVHX0lDQVNFKQorKyAgICB7CisrICAgICAgaW50IGk7CisrCisrICAgICAgcHJlZy0+dHJhbnNsYXRlCisrCT0gKFJFX1RSQU5TTEFURV9UWVBFKSBtYWxsb2MgKENIQVJfU0VUX1NJWkUKKysJCQkJICAgICAgKiBzaXplb2YgKCooUkVfVFJBTlNMQVRFX1RZUEUpMCkpOworKyAgICAgIGlmIChwcmVnLT50cmFuc2xhdGUgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiAoaW50KSBSRUdfRVNQQUNFOworKworKyAgICAgIC8qIE1hcCB1cHBlcmNhc2UgY2hhcmFjdGVycyB0byBjb3JyZXNwb25kaW5nIGxvd2VyY2FzZSBvbmVzLiAgKi8KKysgICAgICBmb3IgKGkgPSAwOyBpIDwgQ0hBUl9TRVRfU0laRTsgaSsrKQorKyAgICAgICAgcHJlZy0+dHJhbnNsYXRlW2ldID0gSVNVUFBFUiAoaSkgPyBUT0xPV0VSIChpKSA6IGk7CisrICAgIH0KKysgIGVsc2UKKysgICAgcHJlZy0+dHJhbnNsYXRlID0gTlVMTDsKKysKKysgIC8qIElmIFJFR19ORVdMSU5FIGlzIHNldCwgbmV3bGluZXMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuICAqLworKyAgaWYgKGNmbGFncyAmIFJFR19ORVdMSU5FKQorKyAgICB7IC8qIFJFR19ORVdMSU5FIGltcGxpZXMgbmVpdGhlciAuIG5vciBbXi4uLl0gbWF0Y2ggbmV3bGluZS4gICovCisrICAgICAgc3ludGF4ICY9IH5SRV9ET1RfTkVXTElORTsKKysgICAgICBzeW50YXggfD0gUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FOworKyAgICAgIC8qIEl0IGFsc28gY2hhbmdlcyB0aGUgbWF0Y2hpbmcgYmVoYXZpb3IuICAqLworKyAgICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMTsKKysgICAgfQorKyAgZWxzZQorKyAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDA7CisrCisrICBwcmVnLT5ub19zdWIgPSAhIShjZmxhZ3MgJiBSRUdfTk9TVUIpOworKworKyAgLyogUE9TSVggc2F5cyBhIG51bGwgY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuIHRlcm1pbmF0ZXMgaXQsIHNvIHdlCisrICAgICBjYW4gdXNlIHN0cmxlbiBoZXJlIGluIGNvbXBpbGluZyB0aGUgcGF0dGVybi4gICovCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0ID0gd2NzX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIHN0cmxlbiAocGF0dGVybiksIHN5bnRheCwgcHJlZyk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXQgPSBieXRlX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIHN0cmxlbiAocGF0dGVybiksIHN5bnRheCwgcHJlZyk7CisrCisrICAvKiBQT1NJWCBkb2Vzbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gdW5tYXRjaGVkIG9wZW4tZ3JvdXAgYW5kIGFuCisrICAgICB1bm1hdGNoZWQgY2xvc2UtZ3JvdXA6IGJvdGggYXJlIFJFR19FUEFSRU4uICAqLworKyAgaWYgKHJldCA9PSBSRUdfRVJQQVJFTikgcmV0ID0gUkVHX0VQQVJFTjsKKysKKysgIGlmIChyZXQgPT0gUkVHX05PRVJST1IgJiYgcHJlZy0+ZmFzdG1hcCkKKysgICAgeworKyAgICAgIC8qIENvbXB1dGUgdGhlIGZhc3RtYXAgbm93LCBzaW5jZSByZWdleGVjIGNhbm5vdCBtb2RpZnkgdGhlIHBhdHRlcm4KKysJIGJ1ZmZlci4gICovCisrICAgICAgaWYgKHJlX2NvbXBpbGVfZmFzdG1hcCAocHJlZykgPT0gLTIpCisrCXsKKysJICAvKiBTb21lIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbXB1dGluZyB0aGUgZmFzdG1hcCwganVzdCBmb3JnZXQKKysJICAgICBhYm91dCBpdC4gICovCisrCSAgZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisrCSAgcHJlZy0+ZmFzdG1hcCA9IE5VTEw7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIChpbnQpIHJldDsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZWdjb21wLCByZWdjb21wKQorKyNlbmRpZgorKworKworKy8qIHJlZ2V4ZWMgc2VhcmNoZXMgZm9yIGEgZ2l2ZW4gcGF0dGVybiwgc3BlY2lmaWVkIGJ5IFBSRUcsIGluIHRoZQorKyAgIHN0cmluZyBTVFJJTkcuCisrCisrICAgSWYgTk1BVENIIGlzIHplcm8gb3IgUkVHX05PU1VCIHdhcyBzZXQgaW4gdGhlIGNmbGFncyBhcmd1bWVudCB0bworKyAgIGByZWdjb21wJywgd2UgaWdub3JlIFBNQVRDSC4gIE90aGVyd2lzZSwgd2UgYXNzdW1lIFBNQVRDSCBoYXMgYXQKKysgICBsZWFzdCBOTUFUQ0ggZWxlbWVudHMsIGFuZCB3ZSBzZXQgdGhlbSB0byB0aGUgb2Zmc2V0cyBvZiB0aGUKKysgICBjb3JyZXNwb25kaW5nIG1hdGNoZWQgc3Vic3RyaW5ncy4KKysKKysgICBFRkxBR1Mgc3BlY2lmaWVzIGBleGVjdXRpb24gZmxhZ3MnIHdoaWNoIGFmZmVjdCBtYXRjaGluZzogaWYKKysgICBSRUdfTk9UQk9MIGlzIHNldCwgdGhlbiBeIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisrICAgc3RyaW5nOyBpZiBSRUdfTk9URU9MIGlzIHNldCwgdGhlbiAkIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBlbmQuCisrCisrICAgV2UgcmV0dXJuIDAgaWYgd2UgZmluZCBhIG1hdGNoIGFuZCBSRUdfTk9NQVRDSCBpZiBub3QuICAqLworKworK2ludAorK3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IG5tYXRjaCwKKysgICAgICAgICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQorK3sKKysgIGludCByZXQ7CisrICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzIHJlZ3M7CisrICByZWdleF90IHByaXZhdGVfcHJlZzsKKysgIGludCBsZW4gPSBzdHJsZW4gKHN0cmluZyk7CisrICBib29sZWFuIHdhbnRfcmVnX2luZm8gPSAhcHJlZy0+bm9fc3ViICYmIG5tYXRjaCA+IDA7CisrCisrICBwcml2YXRlX3ByZWcgPSAqcHJlZzsKKysKKysgIHByaXZhdGVfcHJlZy5ub3RfYm9sID0gISEoZWZsYWdzICYgUkVHX05PVEJPTCk7CisrICBwcml2YXRlX3ByZWcubm90X2VvbCA9ICEhKGVmbGFncyAmIFJFR19OT1RFT0wpOworKworKyAgLyogVGhlIHVzZXIgaGFzIHRvbGQgdXMgZXhhY3RseSBob3cgbWFueSByZWdpc3RlcnMgdG8gcmV0dXJuCisrICAgICBpbmZvcm1hdGlvbiBhYm91dCwgdmlhIGBubWF0Y2gnLiAgV2UgaGF2ZSB0byBwYXNzIHRoYXQgb24gdG8gdGhlCisrICAgICBtYXRjaGluZyByb3V0aW5lcy4gICovCisrICBwcml2YXRlX3ByZWcucmVnc19hbGxvY2F0ZWQgPSBSRUdTX0ZJWEVEOworKworKyAgaWYgKHdhbnRfcmVnX2luZm8pCisrICAgIHsKKysgICAgICByZWdzLm51bV9yZWdzID0gbm1hdGNoOworKyAgICAgIHJlZ3Muc3RhcnQgPSBUQUxMT0MgKG5tYXRjaCAqIDIsIHJlZ29mZl90KTsKKysgICAgICBpZiAocmVncy5zdGFydCA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIChpbnQpIFJFR19OT01BVENIOworKyAgICAgIHJlZ3MuZW5kID0gcmVncy5zdGFydCArIG5tYXRjaDsKKysgICAgfQorKworKyAgLyogUGVyZm9ybSB0aGUgc2VhcmNoaW5nIG9wZXJhdGlvbi4gICovCisrICByZXQgPSByZV9zZWFyY2ggKCZwcml2YXRlX3ByZWcsIHN0cmluZywgbGVuLAorKyAgICAgICAgICAgICAgICAgICAvKiBzdGFydDogKi8gMCwgLyogcmFuZ2U6ICovIGxlbiwKKysgICAgICAgICAgICAgICAgICAgd2FudF9yZWdfaW5mbyA/ICZyZWdzIDogKHN0cnVjdCByZV9yZWdpc3RlcnMgKikgMCk7CisrCisrICAvKiBDb3B5IHRoZSByZWdpc3RlciBpbmZvcm1hdGlvbiB0byB0aGUgUE9TSVggc3RydWN0dXJlLiAgKi8KKysgIGlmICh3YW50X3JlZ19pbmZvKQorKyAgICB7CisrICAgICAgaWYgKHJldCA+PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICB1bnNpZ25lZCByOworKworKyAgICAgICAgICBmb3IgKHIgPSAwOyByIDwgbm1hdGNoOyByKyspCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgcG1hdGNoW3JdLnJtX3NvID0gcmVncy5zdGFydFtyXTsKKysgICAgICAgICAgICAgIHBtYXRjaFtyXS5ybV9lbyA9IHJlZ3MuZW5kW3JdOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAvKiBJZiB3ZSBuZWVkZWQgdGhlIHRlbXBvcmFyeSByZWdpc3RlciBpbmZvLCBmcmVlIHRoZSBzcGFjZSBub3cuICAqLworKyAgICAgIGZyZWUgKHJlZ3Muc3RhcnQpOworKyAgICB9CisrCisrICAvKiBXZSB3YW50IHplcm8gcmV0dXJuIHRvIG1lYW4gc3VjY2VzcywgdW5saWtlIGByZV9zZWFyY2gnLiAgKi8KKysgIHJldHVybiByZXQgPj0gMCA/IChpbnQpIFJFR19OT0VSUk9SIDogKGludCkgUkVHX05PTUFUQ0g7CisrfQorKyNpZmRlZiBfTElCQworKy8qIEVHTElCQzogVGhpcyBpcyBoYW5kbGVkIGluIHJlZ2V4ZWMtY29tcGF0LmMuICAqLworKy8qd2Vha19hbGlhcyAoX19yZWdleGVjLCByZWdleGVjKSovCisrI2luY2x1ZGUgInJlZ2V4ZWMtY29tcGF0LmMiCisrI2VuZGlmCisrCisrCisrLyogUmV0dXJucyBhIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBhbiBlcnJvciBjb2RlLCBFUlJDT0RFLCByZXR1cm5lZAorKyAgIGZyb20gZWl0aGVyIHJlZ2NvbXAgb3IgcmVnZXhlYy4gICBXZSBkb24ndCB1c2UgUFJFRyBoZXJlLiAgKi8KKysKKytzaXplX3QKKytyZWdlcnJvciAoaW50IGVycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKnByZWcgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKyAgICAgICAgICBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSkKKyt7CisrICBjb25zdCBjaGFyICptc2c7CisrICBzaXplX3QgbXNnX3NpemU7CisrCisrICBpZiAoZXJyY29kZSA8IDAKKysgICAgICB8fCBlcnJjb2RlID49IChpbnQpIChzaXplb2YgKHJlX2Vycm9yX21zZ2lkKQorKwkJCSAgIC8gc2l6ZW9mIChyZV9lcnJvcl9tc2dpZFswXSkpKQorKyAgICAvKiBPbmx5IGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlIHNob3VsZCBiZSBwYXNzZWQKKysgICAgICAgdG8gdGhpcyByb3V0aW5lLiAgSWYgd2UgYXJlIGdpdmVuIGFueXRoaW5nIGVsc2UsIG9yIGlmIG90aGVyIHJlZ2V4CisrICAgICAgIGNvZGUgZ2VuZXJhdGVzIGFuIGludmFsaWQgZXJyb3IgY29kZSwgdGhlbiB0aGUgcHJvZ3JhbSBoYXMgYSBidWcuCisrICAgICAgIER1bXAgY29yZSBzbyB3ZSBjYW4gZml4IGl0LiAgKi8KKysgICAgYWJvcnQgKCk7CisrCisrICBtc2cgPSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFtlcnJjb2RlXSk7CisrCisrICBtc2dfc2l6ZSA9IHN0cmxlbiAobXNnKSArIDE7IC8qIEluY2x1ZGVzIHRoZSBudWxsLiAgKi8KKysKKysgIGlmIChlcnJidWZfc2l6ZSAhPSAwKQorKyAgICB7CisrICAgICAgaWYgKG1zZ19zaXplID4gZXJyYnVmX3NpemUpCisrICAgICAgICB7CisrI2lmIGRlZmluZWQgSEFWRV9NRU1QQ1BZIHx8IGRlZmluZWQgX0xJQkMKKysJICAqKChjaGFyICopIG1lbXBjcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpKSA9ICdcMCc7CisrI2Vsc2UKKysgICAgICAgICAgbWVtY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKTsKKysgICAgICAgICAgZXJyYnVmW2VycmJ1Zl9zaXplIC0gMV0gPSAwOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIG1zZ19zaXplKTsKKysgICAgfQorKworKyAgcmV0dXJuIG1zZ19zaXplOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlZ2Vycm9yLCByZWdlcnJvcikKKysjZW5kaWYKKysKKysKKysvKiBGcmVlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzcGFjZSB1c2VkIGJ5IFBSRUcuICAqLworKworK3ZvaWQKKytyZWdmcmVlIChyZWdleF90ICpwcmVnKQorK3sKKysgIGlmIChwcmVnLT5idWZmZXIgIT0gTlVMTCkKKysgICAgZnJlZSAocHJlZy0+YnVmZmVyKTsKKysgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisrCisrICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworKyAgcHJlZy0+dXNlZCA9IDA7CisrCisrICBpZiAocHJlZy0+ZmFzdG1hcCAhPSBOVUxMKQorKyAgICBmcmVlIChwcmVnLT5mYXN0bWFwKTsKKysgIHByZWctPmZhc3RtYXAgPSBOVUxMOworKyAgcHJlZy0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDA7CisrCisrICBpZiAocHJlZy0+dHJhbnNsYXRlICE9IE5VTEwpCisrICAgIGZyZWUgKHByZWctPnRyYW5zbGF0ZSk7CisrICBwcmVnLT50cmFuc2xhdGUgPSBOVUxMOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlZ2ZyZWUsIHJlZ2ZyZWUpCisrI2VuZGlmCisrCisrI2VuZGlmIC8qIG5vdCBlbWFjcyAgKi8KKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysMCisrI3VuZGVmIFNUT1JFX05VTUJFUgorKyN1bmRlZiBTVE9SRV9OVU1CRVJfQU5EX0lOQ1IKKysjdW5kZWYgRVhUUkFDVF9OVU1CRVIKKysjdW5kZWYgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IKKysKKysjdW5kZWYgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTgorKyN1bmRlZiBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HCisrCisrI3VuZGVmIElOSVRfRkFJTF9TVEFDSworKyN1bmRlZiBSRVNFVF9GQUlMX1NUQUNLCisrI3VuZGVmIERPVUJMRV9GQUlMX1NUQUNLCisrI3VuZGVmIFBVU0hfUEFUVEVSTl9PUAorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfUE9JTlRFUgorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfSU5UCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9FTFQKKysjdW5kZWYgUE9QX0ZBSUxVUkVfUE9JTlRFUgorKyN1bmRlZiBQT1BfRkFJTFVSRV9JTlQKKysjdW5kZWYgUE9QX0ZBSUxVUkVfRUxUCisrI3VuZGVmIERFQlVHX1BVU0gKKysjdW5kZWYgREVCVUdfUE9QCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9QT0lOVAorKyN1bmRlZiBQT1BfRkFJTFVSRV9QT0lOVAorKworKyN1bmRlZiBSRUdfVU5TRVRfVkFMVUUKKysjdW5kZWYgUkVHX1VOU0VUCisrCisrI3VuZGVmIFBBVEZFVENICisrI3VuZGVmIFBBVEZFVENIX1JBVworKyN1bmRlZiBQQVRVTkZFVENICisrI3VuZGVmIFRSQU5TTEFURQorKworKyN1bmRlZiBJTklUX0JVRl9TSVpFCisrI3VuZGVmIEdFVF9CVUZGRVJfU1BBQ0UKKysjdW5kZWYgQlVGX1BVU0gKKysjdW5kZWYgQlVGX1BVU0hfMgorKyN1bmRlZiBCVUZfUFVTSF8zCisrI3VuZGVmIFNUT1JFX0pVTVAKKysjdW5kZWYgU1RPUkVfSlVNUDIKKysjdW5kZWYgSU5TRVJUX0pVTVAKKysjdW5kZWYgSU5TRVJUX0pVTVAyCisrI3VuZGVmIEVYVEVORF9CVUZGRVIKKysjdW5kZWYgR0VUX1VOU0lHTkVEX05VTUJFUgorKyN1bmRlZiBGUkVFX1NUQUNLX1JFVFVSTgorKworKyMgdW5kZWYgUE9JTlRFUl9UT19PRkZTRVQKKysjIHVuZGVmIE1BVENISU5HX0lOX0ZSU1RfU1RSSU5HCisrIyB1bmRlZiBQUkVGRVRDSAorKyMgdW5kZWYgQVRfU1RSSU5HU19CRUcKKysjIHVuZGVmIEFUX1NUUklOR1NfRU5ECisrIyB1bmRlZiBXT1JEQ0hBUl9QCisrIyB1bmRlZiBGUkVFX1ZBUgorKyMgdW5kZWYgRlJFRV9WQVJJQUJMRVMKKysjIHVuZGVmIE5PX0hJR0hFU1RfQUNUSVZFX1JFRworKyMgdW5kZWYgTk9fTE9XRVNUX0FDVElWRV9SRUcKKysKKysjIHVuZGVmIENIQVJfVAorKyMgdW5kZWYgVUNIQVJfVAorKyMgdW5kZWYgQ09NUElMRURfQlVGRkVSX1ZBUgorKyMgdW5kZWYgT0ZGU0VUX0FERFJFU1NfU0laRQorKyMgdW5kZWYgQ0hBUl9DTEFTU19TSVpFCisrIyB1bmRlZiBQUkVGSVgKKysjIHVuZGVmIEFSR19QUkVGSVgKKysjIHVuZGVmIFBVVF9DSEFSCisrIyB1bmRlZiBCWVRFCisrIyB1bmRlZiBXQ0hBUgorKworKyMgZGVmaW5lIERFRklORURfT05DRQorZGlmZiAtLWdpdCBhL3B3ZC9NYWtlZmlsZSBiL3B3ZC9NYWtlZmlsZQoraW5kZXggN2Y2ZGUwMy4uOTE2ZDU0NiAxMDA2NDQKKy0tLSBhL3B3ZC9NYWtlZmlsZQorKysrIGIvcHdkL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgcHdkIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gcHdkCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitkaWZmIC0tZ2l0IGEvcmVzb2x2L01ha2VmaWxlIGIvcmVzb2x2L01ha2VmaWxlCitpbmRleCAxZGNiNzVmLi4yZTRiNjMwIDEwMDY0NAorLS0tIGEvcmVzb2x2L01ha2VmaWxlCisrKysgYi9yZXNvbHYvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciByZXNvbHYgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSByZXNvbHYKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNywyMSArMjksMjIgQEAgaGVhZGVycwk6PSByZXNvbHYuaCBcCisgCSAgIGFycGEvbmFtZXNlci5oIGFycGEvbmFtZXNlcl9jb21wYXQuaCBcCisgCSAgIHN5cy9iaXR5cGVzLmgKKyAKKy1yb3V0aW5lcyA6PSBoZXJyb3IgaW5ldF9hZGRyIGluZXRfbnRvcCBpbmV0X3B0b24gbnNhcF9hZGRyIHJlc19pbml0IFwKKy0JICAgIHJlc19oY29uZiByZXNfbGliYyByZXMtc3RhdGUKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkrPSBoZXJyb3IgaW5ldF9hZGRyIGluZXRfbnRvcCBpbmV0X3B0b24gbnNhcF9hZGRyIHJlc19pbml0IFwKKysJICAgcmVzX2hjb25mIHJlc19saWJjIHJlcy1zdGF0ZQorIAorLXRlc3RzID0gdHN0LWF0b24gdHN0LWxlYWtzIHRzdC1pbmV0X250b3AKKy14dGVzdHMgPSB0c3QtbGVha3MyCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IHRzdC1hdG9uIHRzdC1sZWFrcyB0c3QtaW5ldF9udG9wCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSB0c3QtbGVha3MyCisgCisgZ2VuZXJhdGUgOj0gbXRyYWNlLXRzdC1sZWFrcy5vdXQgdHN0LWxlYWtzLm10cmFjZSB0c3QtbGVha3MyLm10cmFjZQorIAorLWV4dHJhLWxpYnMgOj0gbGlicmVzb2x2IGxpYm5zc19kbnMKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBsaWJyZXNvbHYgbGlibnNzX2RucworIGlmZXEgKCQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzKQorLWV4dHJhLWxpYnMgKz0gbGliYW5sCistcm91dGluZXMgKz0gZ2FpX3NpZ3F1ZXVlCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSU5FVF9BTkwpICs9IGxpYmFubAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBnYWlfc2lncXVldWUKKyB0ZXN0cyArPSB0c3QtcmVzX2hjb25mX3Jlb3JkZXIKKyBlbmRpZgorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtb3RoZXJzLXkgKz0gJChleHRyYS1saWJzLXkpCisgbGlicmVzb2x2LXJvdXRpbmVzIDo9IGdldGhuYW1hZGRyIHJlc19jb21wIHJlc19kZWJ1ZwlcCisgCQkgICAgICByZXNfZGF0YSByZXNfbWtxdWVyeSByZXNfcXVlcnkgcmVzX3NlbmQJCVwKKyAJCSAgICAgIGluZXRfbmV0X250b3AgaW5ldF9uZXRfcHRvbiBpbmV0X25ldGEgYmFzZTY0CVwKK0BAIC02MSw3ICs2NCw3IEBAIHJvdXRpbmVzICAgICAgICAgICAgICAgICs9ICQobGlibnNzX2Rucy1yb3V0aW5lcykgJChsaWJyZXNvbHYtcm91dGluZXMpCisgc3RhdGljLW9ubHktcm91dGluZXMgICAgKz0gJChsaWJuc3NfZG5zLXJvdXRpbmVzKSAkKGxpYnJlc29sdi1yb3V0aW5lcykKKyBlbmRpZgorIAorLWlmZXEgKHllc3llcywkKGJ1aWxkLXNoYXJlZCkkKGhhdmUtdGhyZWFkLWxpYnJhcnkpKQorK2lmZXEgKHllc3llc3ksJChidWlsZC1zaGFyZWQpJChoYXZlLXRocmVhZC1saWJyYXJ5KSQoT1BUSU9OX0VHTElCQ19JTkVUX0FOTCkpCisgdGVzdHM6ICQob2JqcGZ4KWdhX3Rlc3QKKyBlbmRpZgorIAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZSBiL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQoraW5kZXggZDBiZjBlMS4uODY1NTgwMSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQorKysrIGIvc3RkaW8tY29tbW9uL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVNwZWNpZmljIG1ha2VmaWxlIGZvciBzdGRpby1jb21tb24uCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RkaW8tY29tbW9uCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsNyArMzIsNyBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCXZmcHJpbnRmIHZwcmludGYgcHJpbnRmX2ZwIHJlZy1wcmludGYgcHJpbnRmLXBycyBwcmludGZfZnBoZXgJICAgICAgXAorIAlyZWctbW9kaWZpZXIgcmVnLXR5cGUJCQkJCQkgICAgICBcCisgCXByaW50Zl9zaXplIGZwcmludGYgcHJpbnRmIHNucHJpbnRmIHNwcmludGYgYXNwcmludGYgZHByaW50ZgkgICAgICBcCistCXZmd3ByaW50ZiB2ZnNjYW5mIHZmd3NjYW5mCQkJCQkgICAgICBcCisrCXZmc2NhbmYJCQkJCQkJCSAgICAgIFwKKyAJZnNjYW5mIHNjYW5mIHNzY2FuZgkJCQkJCSAgICAgIFwKKyAJcGVycm9yIHBzaWduYWwJCQkJCQkJICAgICAgXAorIAl0bXBmaWxlIHRtcGZpbGU2NCB0bXBuYW0gdG1wbmFtX3IgdGVtcG5hbSB0ZW1wbmFtZQkJICAgICAgXAorQEAgLTQxLDIzICs0MywzNiBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCWlzb2M5OV92c3NjYW5mCQkJCQkJCSAgICAgIFwKKyAJcHNpZ2luZm8KKyAKKy1hdXgJOj0gZXJybGlzdCBzaWdsaXN0IHByaW50Zi1wYXJzZW1iIHByaW50Zi1wYXJzZXdjIGZ4cHJpbnRmCisrIyBJZGVhbGx5LCBfaXRvd2EgYW5kIGl0b3dhLWRpZ2l0cyB3b3VsZCBiZSBpbiB0aGlzIG9wdGlvbiBncm91cCBhcworKyMgd2VsbCwgYnV0IGl0IGlzIHVzZWQgdW5jb25kaXRpb25hbGx5IGJ5IHByaW50Zl9mcCBhbmQgcHJpbnRmX2ZwaGV4LAorKyMgYW5kIGl0IGRpZG4ndCBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCB0byBkaXNlbnRhbmdsZSBpdC4KKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSs9IHZmd3ByaW50ZiB2ZndzY2FuZgorKworK2F1eAk6PSBlcnJsaXN0IHNpZ2xpc3QgcHJpbnRmLXBhcnNlbWIgZnhwcmludGYKKythdXgtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0gcHJpbnRmLXBhcnNld2MKKyAKKyB0ZXN0cyA6PSB0c3RzY2FuZiB0ZXN0X3Jkd3IgdGVzdC1wb3BlbiB0c3RnZXRsbiB0ZXN0LWZzZWVrIFwKKyAJIHRlbXB0ZXN0IHRzdC1maWxlbm8gdGVzdC1md3JpdGUgdHN0LXVuZ2V0YyB0c3QtZmVycm9yIFwKKyAJIHhidWcgZXJybm9idWcgXAorIAkgYnVnMSBidWcyIGJ1ZzMgYnVnNCBidWc1IGJ1ZzYgYnVnNyBidWc4IGJ1ZzkgYnVnMTAgYnVnMTEgYnVnMTIgYnVnMTMgXAorLQkgdGZmb3JtYXQgdGlmb3JtYXQgdGxsZm9ybWF0IHRzdGRpb21pc2MgdHN0LXByaW50ZnN6IHRzdC13Yy1wcmludGYgXAorKwkgdGZmb3JtYXQgdGlmb3JtYXQgdGxsZm9ybWF0IHRzdGRpb21pc2MgdHN0LXByaW50ZnN6IFwKKyAJIHNjYW5mMSBzY2FuZjIgc2NhbmYzIHNjYW5mNCBzY2FuZjUgc2NhbmY3IHNjYW5mOCBzY2FuZjkgc2NhbmYxMCBcCistCSBzY2FuZjExIHNjYW5mMTIgdHN0LXRtcG5hbSB0c3QtY29va2llIHRzdC1vYnByaW50ZiB0c3Qtc3NjYW5mIFwKKy0JIHRzdC1zd3ByaW50ZiB0c3QtZnNlZWsgdHN0LWZtZW1vcGVuIHRlc3QtdmZwcmludGYgdHN0LWdldHMgXAorLQkgdHN0LXBlcnJvciB0c3Qtc3ByaW50ZiB0c3Qtcm5kc2VlayB0c3QtZmRvcGVuIHRzdC1mcGhleCBidWcxNCBcCisrCSBzY2FuZjExIHNjYW5mMTIgdHN0LXRtcG5hbSB0c3QtY29va2llIHRzdC1vYnByaW50ZiBcCisrCSB0c3QtZnNlZWsgdHN0LWZtZW1vcGVuIHRzdC1nZXRzIFwKKysJIHRzdC1zcHJpbnRmIHRzdC1ybmRzZWVrIHRzdC1mZG9wZW4gdHN0LWZwaGV4IFwKKyAJIHRzdC1wb3BlbiB0c3QtdW5sb2NrZWRpbyB0c3QtZm1lbW9wZW4yIHRzdC1wdXQtZXJyb3IgdHN0LWZnZXRzIFwKKy0JIHRzdC1md3JpdGUgYnVnMTYgYnVnMTcgdHN0LXN3c2NhbmYgdHN0LXNwcmludGYyIGJ1ZzE4IGJ1ZzE4YSBcCistCSBidWcxOSBidWcxOWEgdHN0LXBvcGVuMiBzY2FuZjEzIHNjYW5mMTQgc2NhbmYxNSBidWcyMCBidWcyMSBidWcyMiBcCistCSBzY2FuZjE2IHNjYW5mMTcgdHN0LXNldHZidWYxIHRzdC1ncm91cGluZyBidWcyMyBidWcyNCBcCistCSBidWctdmZwcmludGYtbmFyZ3MgdHN0LWxvbmctZGJsLWZwaGV4IHRzdC1mcGhleC13aWRlIHRzdC1zcHJpbnRmMyBcCisrCSB0c3QtZndyaXRlIGJ1ZzE2IGJ1ZzE3IHRzdC1zcHJpbnRmMiBidWcxOCBcCisrCSBidWcxOSB0c3QtcG9wZW4yIHNjYW5mMTQgc2NhbmYxNSBidWcyMSBidWcyMiBcCisrCSBzY2FuZjE2IHNjYW5mMTcgdHN0LXNldHZidWYxIGJ1ZzIzIGJ1ZzI0IFwKKysJIGJ1Zy12ZnByaW50Zi1uYXJncyB0c3Qtc3ByaW50ZjMgXAorIAkgYnVnMjUgdHN0LXByaW50Zi1yb3VuZCBidWcyMy0yIGJ1ZzIzLTMgYnVnMjMtNCBidWcyNiB0c3QtZm1lbW9wZW4zCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSArPSB0c3Qtc3NjYW5mIHRzdC1zd3ByaW50ZiB0ZXN0LXZmcHJpbnRmIGJ1ZzE0IHNjYW5mMTMgdHN0LWdyb3VwaW5nCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgXAorKwkgKz0gdHN0LXBlcnJvciBidWcxOWEgYnVnMjAgdHN0LWxvbmctZGJsLWZwaGV4IHRzdC1mcGhleC13aWRlCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkgKz0gYnVnMThhIHRzdC1zd3NjYW5mIHRzdC13Yy1wcmludGYKKyAKKyB0ZXN0LXNyY3MgPSB0c3QtdW5icHV0YyB0c3QtcHJpbnRmCisgCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oIGIvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oCitpbmRleCAzYzczMDQ0Li5hYzYyYjNhIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oCisrKysgYi9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmgKK0BAIC0xOSwxMCArMTksMTMgQEAKKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDx3Y3R5cGUuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSAiLi4vbG9jYWxlL291dGRpZ2l0cy5oIgorICNpbmNsdWRlICIuLi9sb2NhbGUvb3V0ZGlnaXRzd2MuaCIKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrCisgc3RhdGljIENIQVJfVCAqCisgX2kxOG5fbnVtYmVyX3Jld3JpdGUgKENIQVJfVCAqdywgQ0hBUl9UICpyZWFyX3B0ciwgQ0hBUl9UICplbmQpCisgeworQEAgLTExNSwzICsxMTgsMTMgQEAgX2kxOG5fbnVtYmVyX3Jld3JpdGUgKENIQVJfVCAqdywgQ0hBUl9UICpyZWFyX3B0ciwgQ0hBUl9UICplbmQpCisgCisgICByZXR1cm4gdzsKKyB9CisrCisrI2Vsc2UKKysKKytzdGF0aWMgQ0hBUl9UICoKKytfaTE4bl9udW1iZXJfcmV3cml0ZSAoQ0hBUl9UICp3LCBDSEFSX1QgKnJlYXJfcHRyLCBDSEFSX1QgKmVuZCkKKyt7CisrICByZXR1cm4gdzsKKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMgYi9zdGRpby1jb21tb24vZnhwcmludGYuYworaW5kZXggN2IyZWI5NC4uODQ3NjA3NiAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jCisrKysgYi9zdGRpby1jb21tb24vZnhwcmludGYuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGxpYmlvUC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIGludAorQEAgLTM3LDYgKzM4LDcgQEAgX19meHByaW50ZiAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgaW50IHJlczsKKyAgIGlmIChfSU9fZndpZGUgKGZwLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGZtdCkgKyAxOworICAgICAgIHdjaGFyX3Qgd2ZtdFtsZW5dOworICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCitAQCAtNDUsNiArNDcsOSBAQCBfX2Z4cHJpbnRmIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgCSAgd2ZtdFtpXSA9IGZtdFtpXTsKKyAJfQorICAgICAgIHJlcyA9IF9fdmZ3cHJpbnRmIChmcCwgd2ZtdCwgYXApOworKyNlbHNlCisrICAgICAgYWJvcnQoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICAgICByZXMgPSBfSU9fdmZwcmludGYgKGZwLCBmbXQsIGFwKTsKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMKK2luZGV4IDMwMjNiMjAuLmJkMGRmNjYgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYworQEAgLTM5LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHJvdW5kaW5nLW1vZGUuaD4KKyAKK0BAIC0xNDIsNiArMTQzLDEwIEBAIGV4dGVybiBtcF9zaXplX3QgX19tcG5fZXh0cmFjdF9sb25nX2RvdWJsZSAobXBfcHRyIHJlc19wdHIsIG1wX3NpemVfdCBzaXplLAorIGV4dGVybiB1bnNpZ25lZCBpbnQgX19ndWVzc19ncm91cGluZyAodW5zaWduZWQgaW50IGludGRpZ19tYXgsCisgCQkJCSAgICAgIGNvbnN0IGNoYXIgKmdyb3VwaW5nKTsKKyAKKysvKiBJZGVhbGx5LCB3aGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoaXMgc2hvdWxkIGRvCisrICAgYWxsIGl0cyB3b3JrIGluIG9yZGluYXJ5IGNoYXJhY3RlcnMsIHJhdGhlciB0aGFuIGRvaW5nIGl0IGluIHdpZGUKKysgICBjaGFyYWN0ZXJzIGFuZCB0aGVuIGNvbnZlcnRpbmcgYXQgdGhlIGVuZC4gIEJ1dCB0aGF0IGlzIGEgY2hhbGxlbmdlCisrICAgZm9yIGFub3RoZXIgZGF5LiAgKi8KKyAKKyBzdGF0aWMgd2NoYXJfdCAqZ3JvdXBfbnVtYmVyICh3Y2hhcl90ICpidWYsIHdjaGFyX3QgKmJ1ZmVuZCwKKyAJCQkgICAgICB1bnNpZ25lZCBpbnQgaW50ZGlnX25vLCBjb25zdCBjaGFyICpncm91cGluZywKK0BAIC0yNTEsNyArMjU2LDE0IEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICBtcF9saW1iX3QgY3k7CisgCisgICAvKiBOb256ZXJvIGlmIHRoaXMgaXMgb3V0cHV0IG9uIGEgd2lkZSBjaGFyYWN0ZXIgc3RyZWFtLiAgKi8KKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaW50IHdpZGUgPSBpbmZvLT53aWRlOworKyNlbHNlCisrICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSB3aWRlLW9yaWVudGVkIHN0cmVhbSB3aGVuCisrICAgICBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgYnV0IHRoZSBjb21waWxlciBjYW4ndAorKyAgICAgYmUgdHJ1c3RlZCB0byBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgY29uc3QgaW50IHdpZGUgPSAwOworKyNlbmRpZgorIAorICAgLyogQnVmZmVyIGluIHdoaWNoIHdlIHByb2R1Y2UgdGhlIG91dHB1dC4gICovCisgICB3Y2hhcl90ICp3YnVmZmVyID0gTlVMTDsKK0BAIC0yNjEsNiArMjczLDcgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgIHAuZXhwc2lnbiA9IDA7CisgCisgICAvKiBGaWd1cmUgb3V0IHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKGluZm8tPmV4dHJhID09IDApCisgICAgIHsKKyAgICAgICBkZWNpbWFsID0gX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIERFQ0lNQUxfUE9JTlQpOworQEAgLTI4MCw3ICsyOTMsMTMgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgIC8qIFRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlciBtdXN0IG5vdCBiZSB6ZXJvLiAgKi8KKyAgIGFzc2VydCAoKmRlY2ltYWwgIT0gJ1wwJyk7CisgICBhc3NlcnQgKGRlY2ltYWx3YyAhPSBMJ1wwJyk7CisrI2Vsc2UKKysgIC8qIEhhcmQtY29kZSB2YWx1ZXMgZnJvbSAnQycgbG9jYWxlLiAgKi8KKysgIGRlY2ltYWwgPSAiLiI7CisrICBkZWNpbWFsd2MgPSBMJy4nOworKyNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChpbmZvLT5ncm91cCkKKyAgICAgeworICAgICAgIGlmIChpbmZvLT5leHRyYSA9PSAwKQorQEAgLTMyNCw2ICszNDMsOSBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgICB9CisgICBlbHNlCisgICAgIGdyb3VwaW5nID0gTlVMTDsKKysjZWxzZQorKyAgZ3JvdXBpbmcgPSBOVUxMOworKyNlbmRpZgorIAorICAgLyogRmV0Y2ggdGhlIGFyZ3VtZW50IHZhbHVlLgkqLworICNpZm5kZWYgX19OT19MT05HX0RPVUJMRV9NQVRICitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jCitpbmRleCA2YzNiNWU5Li5mNjYwY2UwIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jCisrKysgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgPF9pdG9hLmg+CisgI2luY2x1ZGUgPF9pdG93YS5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHJvdW5kaW5nLW1vZGUuaD4KKyAKK0BAIC0xMzksMTAgKzE0MCwxOCBAQCBfX3ByaW50Zl9mcGhleCAoRklMRSAqZnAsCisgICBpbnQgZG9uZSA9IDA7CisgCisgICAvKiBOb256ZXJvIGlmIHRoaXMgaXMgb3V0cHV0IG9uIGEgd2lkZSBjaGFyYWN0ZXIgc3RyZWFtLiAgKi8KKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaW50IHdpZGUgPSBpbmZvLT53aWRlOworKyNlbHNlCisrICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSB3aWRlLW9yaWVudGVkIHN0cmVhbSB3aGVuCisrICAgICBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgYnV0IHRoZSBjb21waWxlciBjYW4ndAorKyAgICAgYmUgdHJ1c3RlZCB0byBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgY29uc3QgaW50IHdpZGUgPSAwOworKyNlbmRpZgorIAorIAorICAgLyogRmlndXJlIG91dCB0aGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChpbmZvLT5leHRyYSA9PSAwKQorICAgICB7CisgICAgICAgZGVjaW1hbCA9IF9OTF9DVVJSRU5UIChMQ19OVU1FUklDLCBERUNJTUFMX1BPSU5UKTsKK0BAIC0xNTYsNiArMTY1LDEwIEBAIF9fcHJpbnRmX2ZwaGV4IChGSUxFICpmcCwKKyAgICAgfQorICAgLyogVGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyIG11c3QgbmV2ZXIgYmUgemVyby4gICovCisgICBhc3NlcnQgKCpkZWNpbWFsICE9ICdcMCcgJiYgZGVjaW1hbHdjICE9IEwnXDAnKTsKKysjZWxzZQorKyAgZGVjaW1hbCA9ICIuIjsKKysgIGRlY2ltYWx3YyA9IEwnLic7CisrI2VuZGlmCisgCisgCisgICAvKiBGZXRjaCB0aGUgYXJndW1lbnQgdmFsdWUuCSovCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMgYi9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYworaW5kZXggN2RjZDU4ZS4uNmZiNzQ5MSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jCisrKysgYi9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8bWF0aC5oPgorICNpbmNsdWRlIDxwcmludGYuaD4KKyAjaW5jbHVkZSA8bGliaW9QLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgLyogVGhpcyBkZWZpbmVzIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIHRoZSBzYW1lIGNvZGUgZm9yIEdOVSBDIGxpYnJhcnkgYW5kCitAQCAtMTE2LDcgKzExNywxNCBAQCBfX3ByaW50Zl9zaXplIChGSUxFICpmcCwgY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLAorIAorICAgc3RydWN0IHByaW50Zl9pbmZvIGZwX2luZm87CisgICBpbnQgZG9uZSA9IDA7CisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGludCB3aWRlID0gaW5mby0+d2lkZTsKKysjZWxzZQorKyAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0gd2hlbgorKyAgICAgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGJ1dCB0aGUgY29tcGlsZXIgY2FuJ3QKKysgICAgIGJlIHRydXN0ZWQgdG8gZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIGNvbnN0IGludCB3aWRlID0gMDsKKysjZW5kaWYKKyAgIGludCByZXM7CisgCisgICAvKiBGZXRjaCB0aGUgYXJndW1lbnQgdmFsdWUuCSovCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3NjYW5mMTQuYyBiL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMKK2luZGV4IGNmZmNjYjAuLjZjYzI2MGEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vc2NhbmYxNC5jCisrKysgYi9zdGRpby1jb21tb24vc2NhbmYxNC5jCitAQCAtMyw2ICszLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjZGVmaW5lIEZBSUwoKSBcCisgICBkbyB7CQkJCQkJCVwKK0BAIC00OCw2ICs0OSw3IEBAIG1haW4gKHZvaWQpCisgICAvKiBTZWUgZXhwbGFuYXRpb24gYWJvdmUuICAqLworICAgRElBR19QVVNIX05FRURTX0NPTU1FTlQ7CisgICBESUFHX0lHTk9SRV9ORUVEU19DT01NRU5UICg0LjksICItV2Zvcm1hdCIpOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChzc2NhbmYgKCIgMy4yNVMgeCIsICIlNGFTJTNjIiwgJmxzcCwgYykgIT0gMikKKyAgICAgRkFJTCAoKTsKKyAgIGVsc2UKK0BAIC01Nyw2ICs1OSw3IEBAIG1haW4gKHZvaWQpCisgICAgICAgbWVtc2V0IChsc3AsICd4Jywgc2l6ZW9mIEwiMy4yNSIpOworICAgICAgIGZyZWUgKGxzcCk7CisgICAgIH0KKysjZW5kaWYKKyAgIGlmIChzc2NhbmYgKCI0LjI1WzAtOS5dIHgiLCAiJWFbMC05Ll0lOGMiLCAmc3AsIGMpICE9IDIpCisgICAgIEZBSUwgKCk7CisgICBlbHNlCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jIGIvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jCitpbmRleCA1ZGVmMjdmLi43YzliOTFlIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jCisrKysgYi9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMKK0BAIC0xOSw2ICsxOSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyBkb190ZXN0ICh2b2lkKQorQEAgLTM0LDEyICszNSwxNCBAQCBkb190ZXN0ICh2b2lkKQorICAgICAgIHJldHVybiAxOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgIC8qIFBPU0lYIHNheXMgdGhhdCBwaXBlIHN0cmVhbXMgYXJlIGJ5dGUtb3JpZW50ZWQuICAqLworICAgaWYgKGZ3aWRlIChmLCAwKSA+PSAwKQorICAgICB7CisgICAgICAgcHV0cyAoInBvcGVuIGRpZCBub3QgcmV0dXJuIGJ5dGUtb3JpZW50ZWQgc3RyZWFtIik7CisgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgfQorKyNlbmRpZgorIAorICAgaWYgKGdldGxpbmUgKCZsaW5lLCAmbGVuLCBmKSAhPSA1KQorICAgICB7CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMgYi9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYworaW5kZXggZDUyODRiOS4uZjFlM2QyMSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jCisrKysgYi9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYworQEAgLTMsNyArMyw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bGliYy1pbnRlcm5hbC5oPgorLQorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyBkb190ZXN0ICh2b2lkKQorQEAgLTExLDEyICsxMSwxNCBAQCBkb190ZXN0ICh2b2lkKQorICAgY2hhciBidWZbMTAwXTsKKyAgIGludCByZXN1bHQgPSAwOworIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpZiAoc3ByaW50ZiAoYnVmLCAiJS4wbHMiLCBMImZvbyIpICE9IDAKKyAgICAgICB8fCBzdHJsZW4gKGJ1ZikgIT0gMCkKKyAgICAgeworICAgICAgIHB1dHMgKCJzcHJpbnRmIChidWYsIFwiJS4wbHNcIiwgTFwiZm9vXCIpIHByb2R1Y2VkIHNvbWUgb3V0cHV0Iik7CisgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgI2RlZmluZSBTSVpFICgxMDI0KjcwMDAwKQorICNkZWZpbmUgU1RSKHgpICN4CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYyBiL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMKK2luZGV4IDU1NDhhNzEuLjMxZWQwMjQgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jCisrKysgYi9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jCitAQCAtNCw2ICs0LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgdDEgKHZvaWQpCitAQCAtMTM0LDYgKzEzNSw3IEBAIEYgKHZvaWQpCisgICBwcmludGYgKCJleHBlY3RlZCBcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgXCIlc1wiXG4iLAorIAkgIGJ1Zik7CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIHN3cHJpbnRmICh3YnVmLCBzaXplb2Ygd2J1ZiAvIHNpemVvZiAod2J1ZlswXSksIEwiJWEgJUEgJWUgJUUgJWYgJUYgJWcgJUciLAorIAkgICAgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCwKKyAJICAgIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwpOworQEAgLTE3MSw2ICsxNzMsNyBAQCBGICh2b2lkKQorICAgcmVzdWx0IHw9IHdjc2NtcCAod2J1ZiwgTCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYiKSAhPSAwOworICAgcHJpbnRmICgiZXhwZWN0ZWQgTFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBMXCIlU1wiXG4iLAorIAkgIHdidWYpOworKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICBscW5hbnZhbCA9IE5BTjsKKyAKK0BAIC0yMTUsNiArMjE4LDcgQEAgRiAodm9pZCkKKyAgIHByaW50ZiAoImV4cGVjdGVkIFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBcIiVzXCJcbiIsCisgCSAgYnVmKTsKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgc3dwcmludGYgKHdidWYsIHNpemVvZiB3YnVmIC8gc2l6ZW9mICh3YnVmWzBdKSwKKyAJICAgIEwiJUxhICVMQSAlTGUgJUxFICVMZiAlTEYgJUxnICVMRyIsCisgCSAgICBscW5hbnZhbCwgbHFuYW52YWwsIGxxbmFudmFsLCBscW5hbnZhbCwKK0BAIC0yNTksNiArMjYzLDcgQEAgRiAodm9pZCkKKyAgIHJlc3VsdCB8PSB3Y3NjbXAgKHdidWYsIEwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIikgIT0gMDsKKyAgIHByaW50ZiAoImV4cGVjdGVkIExcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgTFwiJVNcIlxuIiwKKyAJICB3YnVmKTsKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMgYi9zdGRpby1jb21tb24vdmZwcmludGYuYworaW5kZXggMDU5MmU3MC4uZjIxZDk3MyAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jCisrKysgYi9zdGRpby1jb21tb24vdmZwcmludGYuYworQEAgLTI5LDYgKzI5LDcgQEAKKyAjaW5jbHVkZSA8X2l0b2EuaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBUaGlzIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gdGhlIHN0YW5kYXJkIHN0ZGlvIGltcGxlbWVudGF0aW9uIGZvdW5kCisgICAgaW4gR05VIEMgbGlicmFyeSBhbmQgdGhlIGxpYmlvIGltcGxlbWVudGF0aW9uIG9yaWdpbmFsbHkgZm91bmQgaW4KK0BAIC0xNDAsNiArMTQxLDE4IEBAIHR5cGVkZWYgd2NoYXJfdCBUSE9VU0FORFNfU0VQX1Q7CisgIyBkZWZpbmUgRU9GIFdFT0YKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgxKQorKyNlbHNlCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDApCisrI2VuZGlmCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIExPQ0FMRV9TVVBQT1JUICgxKQorKyNlbHNlCisrIyBkZWZpbmUgTE9DQUxFX1NVUFBPUlQgKDApCisrI2VuZGlmCisrCisgI2luY2x1ZGUgIl9pMThuX251bWJlci5oIgorIAorIC8qIEluY2x1ZGUgdGhlIHNoYXJlZCBjb2RlIGZvciBwYXJzaW5nIHRoZSBmb3JtYXQgc3RyaW5nLiAgKi8KK0BAIC0xMDY1LDggKzEwNzgsMTEgQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QganVtcF90YWJsZVtdID0KKyAjIGRlZmluZSBwcm9jZXNzX3N0cmluZ19hcmcoZnNwZWMpIFwKKyAgICAgTEFCRUwgKGZvcm1fY2hhcmFjdGVyKToJCQkJCQkgICAgICBcCisgICAgICAgLyogQ2hhcmFjdGVyLiAgKi8JCQkJCQkJICAgICAgXAorLSAgICAgIGlmIChpc19sb25nKQkJCQkJCQkgICAgICBcCistCWdvdG8gTEFCRUwgKGZvcm1fd2NoYXJhY3Rlcik7CQkJCQkgICAgICBcCisrICAgICAgaWYgKGlzX2xvbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGdvdG8gTEFCRUwgKGZvcm1fd2NoYXJhY3Rlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAtLXdpZHRoOwkvKiBBY2NvdW50IGZvciB0aGUgY2hhcmFjdGVyIGl0c2VsZi4gICovCQkgICAgICBcCisgICAgICAgaWYgKCFsZWZ0KQkJCQkJCQkgICAgICBcCisgCVBBRCAoJyAnKTsJCQkJCQkJICAgICAgXAorQEAgLTEwNzksNiArMTA5NSw3IEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGp1bXBfdGFibGVbXSA9CisgICAgICAgYnJlYWs7CQkJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICBMQUJFTCAoZm9ybV93Y2hhcmFjdGVyKToJCQkJCQkgICAgICBcCisrICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHsJCQkJCQkJCQkgICAgICBcCisgCS8qIFdpZGUgY2hhcmFjdGVyLiAgKi8JCQkJCQkgICAgICBcCisgCWNoYXIgYnVmW01CX0NVUl9NQVhdOwkJCQkJCSAgICAgIFwKK0BAIC0xMTQ1LDYgKzExNjIsNyBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBqdW1wX3RhYmxlW10gPQorIAkgIH0JCQkJCQkJCSAgICAgIFwKKyAJZWxzZQkJCQkJCQkJICAgICAgXAorIAkgIHsJCQkJCQkJCSAgICAgIFwKKysgICAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgICBjb25zdCB3Y2hhcl90ICpzMiA9IChjb25zdCB3Y2hhcl90ICopIHN0cmluZzsJCSAgICAgIFwKKyAJICAgIG1ic3RhdGVfdCBtYnN0YXRlOwkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCitAQCAtMTM5OSw3ICsxNDE3LDkgQEAgdmZwcmludGYgKEZJTEUgKnMsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCB2YV9saXN0IGFwKQorICAgICBMQUJFTCAoZmxhZ19xdW90ZSk6CisgICAgICAgZ3JvdXAgPSAxOworIAorLSAgICAgIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKysgICAgICBpZiAoISBMT0NBTEVfU1VQUE9SVCkKKysgICAgICAgIGdyb3VwaW5nID0gTlVMTDsKKysgICAgICBlbHNlIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKyAJeworICNpZmRlZiBDT01QSUxFX1dQUklOVEYKKyAJICB0aG91c2FuZHNfc2VwID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywKK0BAIC0xNzI4LDggKzE3NDgsOSBAQCBwcmludGZfcG9zaXRpb25hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCBpbnQgcmVhZG9ubHlfZm9ybWF0LAorICAgc2l6ZV90IGNudDsKKyAKKyAgIENIQVJfVCAqd29ya3N0YXJ0ID0gTlVMTDsKKy0KKy0gIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKysgIGlmICghIExPQ0FMRV9TVVBQT1JUKQorKyAgICBncm91cGluZyA9IE5VTEw7CisrICBlbHNlIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKyAgICAgeworICNpZmRlZiBDT01QSUxFX1dQUklOVEYKKyAgICAgICB0aG91c2FuZHNfc2VwID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdmZzY2FuZi5jIGIvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYworaW5kZXggMGUyMDRlNy4uNjZjYzBhZiAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMKK0BAIC0yOSw2ICsyOSw3IEBACisgI2luY2x1ZGUgPHdjdHlwZS5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZmRlZglfX0dOVUNfXworICMgZGVmaW5lIEhBVkVfTE9OR0xPTkcKK0BAIC0xMzMsNiArMTM0LDEyIEBACisgIyBkZWZpbmUgV0lOVF9UCQlpbnQKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgxKQorKyNlbHNlCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDApCisrI2VuZGlmCisrCisgI2RlZmluZSBlbmNvZGVfZXJyb3IoKSBkbyB7CQkJCQkJICAgICAgXAorIAkJCSAgZXJydmFsID0gNDsJCQkJCSAgICAgIFwKKyAJCQkgIF9fc2V0X2Vycm5vIChFSUxTRVEpOwkJCQkgICAgICBcCitAQCAtMzE2LDI0ICszMjMsMzUgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAgIEFSR0NIRUNLIChzLCBmb3JtYXQpOworIAorICB7CistI2lmbmRlZiBDT01QSUxFX1dTQ0FORgorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgJiYgIWRlZmluZWQgKENPTVBJTEVfV1NDQU5GKQorICAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjb25zdCBjdXJudW1lcmljID0gbG9jLT5fX2xvY2FsZXNbTENfTlVNRVJJQ107CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgIC8qIEZpZ3VyZSBvdXQgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyLiAgKi8KKy0jaWZkZWYgQ09NUElMRV9XU0NBTkYKKysjIGlmZGVmIENPTVBJTEVfV1NDQU5GCisgICAgZGVjaW1hbCA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsIF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MpOworLSNlbHNlCisrIyBlbHNlCisgICAgZGVjaW1hbCA9IGN1cm51bWVyaWMtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoREVDSU1BTF9QT0lOVCldLnN0cmluZzsKKy0jZW5kaWYKKysjIGVuZGlmCisgICAgLyogRmlndXJlIG91dCB0aGUgdGhvdXNhbmRzIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAqLworLSNpZmRlZiBDT01QSUxFX1dTQ0FORgorKyMgaWZkZWYgQ09NUElMRV9XU0NBTkYKKyAgICB0aG91c2FuZHMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLCBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDKTsKKy0jZWxzZQorKyMgZWxzZQorICAgIHRob3VzYW5kcyA9IGN1cm51bWVyaWMtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoVEhPVVNBTkRTX1NFUCldLnN0cmluZzsKKyAgICBpZiAoKnRob3VzYW5kcyA9PSAnXDAnKQorICAgICAgdGhvdXNhbmRzID0gTlVMTDsKKy0jZW5kaWYKKysjIGVuZGlmCisrI2Vsc2UgLyogaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKysgICAvKiBIYXJkLWNvZGUgdmFsdWVzIGZyb20gdGhlIEMgbG9jYWxlLiAgKi8KKysjIGlmZGVmIENPTVBJTEVfV1NDQU5GCisrICAgZGVjaW1hbCA9IEwnLic7CisrICAgdGhvdXNhbmRzID0gTCdcMCc7CisrIyBlbHNlCisrICAgZGVjaW1hbCA9ICIuIjsKKysgICB0aG91c2FuZHMgPSBOVUxMOworKyMgZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgIH0KKyAKKyAgIC8qIExvY2sgdGhlIHN0cmVhbS4gICovCitAQCAtMzg1LDYgKzQwMyw4IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgI2lmbmRlZiBDT01QSUxFX1dTQ0FORgorICAgICAgIGlmICghaXNhc2NpaSAoKHVuc2lnbmVkIGNoYXIpICpmKSkKKyAJeworKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysKKyAJICAvKiBOb24tQVNDSUksIG1heSBiZSBhIG11bHRpYnl0ZS4gICovCisgCSAgaW50IGxlbiA9IF9fbWJybGVuIChmLCBzdHJsZW4gKGYpLCAmc3RhdGUpOworIAkgIGlmIChsZW4gPiAwKQorQEAgLTgzMCw2ICs4NTAsOCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgICAgfQorIAkgIC8qIEZBTExUSFJPVUdIICovCisgCWNhc2UgTF8oJ0MnKToKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrCisgCSAgaWYgKHdpZHRoID09IC0xKQorIAkgICAgd2lkdGggPSAxOworIAorQEAgLTExNzIsNiArMTE5NCw4IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgLyogRkFMTFRIUk9VR0ggKi8KKyAKKyAJY2FzZSBMXygnUycpOgorKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysKKyAJICB7CisgI2lmbmRlZiBDT01QSUxFX1dTQ0FORgorIAkgICAgbWJzdGF0ZV90IGNzdGF0ZTsKK0BAIC0xNDE5LDEwICsxNDQzLDE3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgICAgIGNvbnN0IGNoYXIgKm1iZGlnaXRzWzEwXTsKKyAJICAgICAgY29uc3QgY2hhciAqbWJkaWdpdHNfZXh0ZW5kZWRbMTBdOworICNlbmRpZgorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgLyogICJ0b19pbnB1bmN0IiBpcyBhIG1hcCBmcm9tIEFTQ0lJIGRpZ2l0cyB0byB0aGVpcgorIAkJICBlcXVpdmFsZW50IGluIGxvY2FsZS4gVGhpcyBpcyBkZWZpbmVkIGZvciBsb2NhbGVzCisgCQkgIHdoaWNoIHVzZSBhbiBleHRyYSBkaWdpdHMgc2V0LiAgKi8KKyAJICAgICAgd2N0cmFuc190IG1hcCA9IF9fd2N0cmFucyAoInRvX2lucHVuY3QiKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgLyogVGhpcyB3aWxsIGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVuCisrICAgICAgICAgICAgICAgICBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBidXQgdGhlCisrICAgICAgICAgICAgICAgICBjb21waWxlciBjYW4ndCBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgICAgICAgICAgICAgd2N0cmFuc190IG1hcCA9IE5VTEw7CisrI2VuZGlmCisgCSAgICAgIGludCBuOworIAorIAkgICAgICBmcm9tX2xldmVsID0gMDsKK0BAIC0yMDg4LDYgKzIxMTksNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkJLS13aWR0aDsKKyAJICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgd2N0cmFuc190IG1hcDsKKyAJICBpZiAoX19idWlsdGluX2V4cGVjdCAoKGZsYWdzICYgSTE4TikgIT0gMCwgMCkKKyAJICAgICAgLyogSGV4YWRlY2ltYWwgZmxvYXRzIG1ha2Ugbm8gc2Vuc2UsIGZpeGluZyBsb2NhbGl6ZWQKK0BAIC0yMzA0LDYgKzIzMzYsNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgICAgICA7CisgI2VuZGlmCisgCSAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAorIAkgIC8qIEhhdmUgd2UgcmVhZCBhbnkgY2hhcmFjdGVyPyAgSWYgd2UgdHJ5IHRvIHJlYWQgYSBudW1iZXIKKyAJICAgICBpbiBoZXhhZGVjaW1hbCBub3RhdGlvbiBhbmQgd2UgaGF2ZSByZWFkIG9ubHkgdGhlIGAweCcKK0BAIC0yMzQzLDcgKzIzNzYsMTAgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAKKyAJY2FzZSBMXygnWycpOgkvKiBDaGFyYWN0ZXIgY2xhc3MuICAqLworIAkgIGlmIChmbGFncyAmIExPTkcpCistCSAgICBTVFJJTkdfQVJHICh3c3RyLCB3Y2hhcl90LCAxMDApOworKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKyAgICAgICAgICAgICAgU1RSSU5HX0FSRyAod3N0ciwgd2NoYXJfdCwgMTAwKTsKKysgICAgICAgICAgICB9CisgCSAgZWxzZQorIAkgICAgU1RSSU5HX0FSRyAoc3RyLCBjaGFyLCAxMDApOworIAorQEAgLTI0MTcsNiArMjQ1Myw3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgaWYgKGZsYWdzICYgTE9ORykKKyAJICAgIHsKKyAJICAgICAgc2l6ZV90IG5vdyA9IHJlYWRfaW47CisrICAgICAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKyAjaWZkZWYgQ09NUElMRV9XU0NBTkYKKyAJICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGluY2hhciAoKSA9PSBXRU9GKSkKKyAJCWlucHV0X2Vycm9yICgpOworZGlmZiAtLWdpdCBhL3N0ZGxpYi9NYWtlZmlsZSBiL3N0ZGxpYi9NYWtlZmlsZQoraW5kZXggNDAyNDY2YS4uN2U3ZTMwNCAxMDA2NDQKKy0tLSBhL3N0ZGxpYi9NYWtlZmlsZQorKysrIGIvc3RkbGliL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBzdGRsaWIgcm91dGluZXMKKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdGRsaWIKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCw3ICszMiw3IEBAIGhlYWRlcnMJOj0gc3RkbGliLmggYml0cy9zdGRsaWIuaCBiaXRzL3N0ZGxpYi1sZGJsLmggYml0cy9zdGRsaWItZmxvYXQuaCAgICAgIFwKKyAJICAgYWxsb2NhLmggZm10bXNnLmgJCQkJCQkgICAgICBcCisgCSAgIGJpdHMvc3RkbGliLWJzZWFyY2guaAorIAorLXJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKytyb3V0aW5lcy15CTo9CQkJCQkJCSAgICAgIFwKKyAJYXRvZiBhdG9pIGF0b2wgYXRvbGwJCQkJCQkgICAgICBcCisgCWFib3J0CQkJCQkJCQkgICAgICBcCisgCWJzZWFyY2ggcXNvcnQgbXNvcnQJCQkJCQkgICAgICBcCitAQCAtMzksNyArNDEsNiBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCXF1aWNrX2V4aXQgYXRfcXVpY2tfZXhpdCBjeGFfYXRfcXVpY2tfZXhpdCBjeGFfdGhyZWFkX2F0ZXhpdF9pbXBsICAgICBcCisgCWFicyBsYWJzIGxsYWJzCQkJCQkJCSAgICAgIFwKKyAJZGl2IGxkaXYgbGxkaXYJCQkJCQkJICAgICAgXAorLQltYmxlbiBtYnN0b3djcyBtYnRvd2Mgd2NzdG9tYnMgd2N0b21iCQkJCSAgICAgIFwKKyAJcmFuZG9tIHJhbmRvbV9yIHJhbmQgcmFuZF9yCQkJCQkgICAgICBcCisgCWRyYW5kNDggZXJhbmQ0OCBscmFuZDQ4IG5yYW5kNDggbXJhbmQ0OCBqcmFuZDQ4CQkJICAgICAgXAorIAlzcmFuZDQ4IHNlZWQ0OCBsY29uZzQ4CQkJCQkJICAgICAgXAorQEAgLTUyLDkgKzUzLDE4IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJc3RydG9mX2wgc3RydG9kX2wgc3RydG9sZF9sCQkJCQkgICAgICBcCisgCXN5c3RlbSBjYW5vbmljYWxpemUJCQkJCQkgICAgICBcCisgCWE2NGwgbDY0YQkJCQkJCQkgICAgICBcCistCXJwbWF0Y2ggc3RyZm1vbiBzdHJmbW9uX2wgZ2V0c3Vib3B0IHhwZ19iYXNlbmFtZSBmbXRtc2cJCSAgICAgIFwKKy0Jc3RydG9pbWF4IHN0cnRvdW1heCB3Y3N0b2ltYXggd2NzdG91bWF4CQkJCSAgICAgIFwKKysJZ2V0c3Vib3B0IHhwZ19iYXNlbmFtZQkJCQkJCSAgICAgIFwKKysJc3RydG9pbWF4IHN0cnRvdW1heAkJCQkJCSAgICAgIFwKKyAJZ2V0Y29udGV4dCBzZXRjb250ZXh0IG1ha2Vjb250ZXh0IHN3YXBjb250ZXh0Cisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPQkJCQkgICAgICBcCisrCXN0cmZtb24gc3RyZm1vbl9sCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0JCQkJICAgICAgXAorKwltYmxlbiBtYnN0b3djcyBtYnRvd2Mgd2NzdG9tYnMgd2N0b21iCQkJCSAgICAgIFwKKysJd2NzdG9pbWF4IHdjc3RvdW1heAorK2lmZXEgKHl5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKE9QVElPTl9QT1NJWF9SRUdFWFApKQorK3JvdXRpbmVzLXkgKz0gcnBtYXRjaAorK2VuZGlmCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZNVE1TRykgKz0gZm10bXNnCisgYXV4ID0JZ3JvdXBpbmcgZ3JvdXBpbmd3YyB0ZW5zX2luX2xpbWIKKyAKKyAjIFRoZXNlIHJvdXRpbmVzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBsaWJjIHNoYXJlZCBvYmplY3QuCitAQCAtNjIsMjAgKzcyLDI0IEBAIGF1eCA9CWdyb3VwaW5nIGdyb3VwaW5nd2MgdGVuc19pbl9saW1iCisgIyBsaW5rZWQgYWdhaW5zdCB3aGVuIHRoZSBzaGFyZWQgbGlicmFyeSB3aWxsIGJlIHVzZWQuCisgc3RhdGljLW9ubHktcm91dGluZXMgPSBhdGV4aXQgYXRfcXVpY2tfZXhpdAorIAorLXRlc3Qtc3Jjcwk6PSB0c3QtZm10bXNnCistdGVzdHMJCTo9IHRzdC1zdHJ0b2wgdHN0LXN0cnRvZCB0ZXN0bWIgdGVzdHJhbmQgdGVzdHNvcnQgdGVzdGRpdiAgIFwKKyt0ZXN0LXNyY3MtJChPUFRJT05fRUdMSUJDX0ZNVE1TRykJOj0gdHN0LWZtdG1zZworK3Rlc3RzCQk6PSB0c3Qtc3RydG9sIHRzdC1zdHJ0b2QgdGVzdHJhbmQgdGVzdHNvcnQgdGVzdGRpdgkgICAgXAorIAkJICAgdGVzdC1jYW5vbiB0ZXN0LWNhbm9uMiB0c3Qtc3RydG9sbCB0c3QtZW52aXJvbgkgICAgXAorIAkJICAgdHN0LXhwZy1iYXNlbmFtZSB0c3QtcmFuZG9tIHRzdC1yYW5kb20yIHRzdC1ic2VhcmNoCSAgICBcCisgCQkgICB0c3QtbGltaXRzIHRzdC1yYW5kNDggYnVnLXN0cnRvZCB0c3Qtc2V0Y29udGV4dCAgICAgICAgICBcCistCQkgICB0c3Qtc2V0Y29udGV4dDIgdGVzdC1hNjRsIHRzdC1xc29ydCB0c3Qtc3lzdGVtIHRlc3RtYjIgICBcCistCQkgICBidWctc3RydG9kMiB0c3QtYXRvZjEgdHN0LWF0b2YyIHRzdC1zdHJ0b2QyIHRzdC1zdHJ0b2QzICBcCistCQkgICB0c3QtcmFuZDQ4LTIgdHN0LW1ha2Vjb250ZXh0IHRzdC1zdHJ0b2Q0IHRzdC1zdHJ0b2Q1ICAgICBcCisrCQkgICB0c3Qtc2V0Y29udGV4dDIgdGVzdC1hNjRsIHRzdC1xc29ydCB0c3Qtc3lzdGVtCSAgICBcCisrCQkgICBidWctc3RydG9kMiB0c3QtYXRvZjEgdHN0LWF0b2YyIHRzdC1zdHJ0b2QyIAkJICAgIFwKKysJCSAgIHRzdC1yYW5kNDgtMiB0c3QtbWFrZWNvbnRleHQgCQkJICAgIFwKKyAJCSAgIHRzdC1xc29ydDIgdHN0LW1ha2Vjb250ZXh0MiB0c3Qtc3RydG9kNiB0c3QtdW5zZXRlbnYxICAgIFwKKyAJCSAgIHRzdC1tYWtlY29udGV4dDMgYnVnLWdldGNvbnRleHQgYnVnLWZtdG1zZzEJCSAgICBcCisgCQkgICB0c3Qtc2VjdXJlLWdldGVudiB0c3Qtc3RydG9kLW92ZXJmbG93IHRzdC1zdHJ0b2Qtcm91bmQgICBcCisgCQkgICB0c3QtdGluaW5lc3MgdHN0LXN0cnRvZC11bmRlcmZsb3cgdHN0LXRscy1hdGV4aXQJICAgIFwKKyAJCSAgIHRzdC1zZXRjb250ZXh0MyB0c3QtdGxzLWF0ZXhpdC1ub2RlbGV0ZQorIHRlc3RzLXN0YXRpYwk6PSB0c3Qtc2VjdXJlLWdldGVudgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gdHN0LXN0cnRvZDMgdHN0LXN0cnRvZDQgdHN0LXN0cnRvZDUgdGVzdG1iMgorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJCSs9IHRlc3RtYgorIAorIG1vZHVsZXMtbmFtZXMJPSB0c3QtdGxzLWF0ZXhpdC1saWIKKyAKK0BAIC0xMTYsOCArMTMwLDEwIEBAIENGTEFHUy10c3QtbWFrZWNvbnRleHQyLmMgPSAkKHN0YWNrLWFsaWduLXRlc3QtZmxhZ3MpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClpc29tYWMub3V0CisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19GTVRNU0cpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWZtdG1zZy5vdXQKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL3N0ZGxpYi9zdHJ0b2RfbC5jIGIvc3RkbGliL3N0cnRvZF9sLmMKK2luZGV4IGUxM2FiMWUuLjYzZWZlNDEgMTAwNjQ0CistLS0gYS9zdGRsaWIvc3RydG9kX2wuYworKysrIGIvc3RkbGliL3N0cnRvZF9sLmMKK0BAIC0xNyw2ICsxNyw3IEBACisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHhsb2NhbGUuaD4KKyAKKyBleHRlcm4gZG91YmxlIF9fX19zdHJ0b2RfbF9pbnRlcm5hbCAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQsIF9fbG9jYWxlX3QpOworQEAgLTU0OCw2ICs1NDksNyBAQCBfX19fU1RSVE9GX0lOVEVSTkFMIChucHRyLCBlbmRwdHIsIGdyb3VwLCBsb2MpCisgICAvKiBVc2VkIGluIHNldmVyYWwgcGxhY2VzLiAgKi8KKyAgIGludCBjbnQ7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmN1cnJlbnQgPSBsb2MtPl9fbG9jYWxlc1tMQ19OVU1FUklDXTsKKyAKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChncm91cCkpCitAQCAtNTg2LDYgKzU4OCwxNyBAQCBfX19fU1RSVE9GX0lOVEVSTkFMIChucHRyLCBlbmRwdHIsIGdyb3VwLCBsb2MpCisgICBkZWNpbWFsX2xlbiA9IHN0cmxlbiAoZGVjaW1hbCk7CisgICBhc3NlcnQgKGRlY2ltYWxfbGVuID4gMCk7CisgI2VuZGlmCisrI2Vsc2UgLyogaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKysgIC8qIEhhcmQtY29kZSB2YWx1ZXMgZnJvbSB0aGUgJ0MnIGxvY2FsZS4gICovCisrICBncm91cGluZyA9IE5VTEw7CisrI2lmZGVmIFVTRV9XSURFX0NIQVIKKysgIGRlY2ltYWwgPSBMJy4nOworKyMgZGVmaW5lIGRlY2ltYWxfbGVuIDEKKysjZWxzZQorKyAgZGVjaW1hbCA9ICIuIjsKKysgIGRlY2ltYWxfbGVuID0gMTsKKysjZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCisgICAvKiBQcmVwYXJlIG51bWJlciByZXByZXNlbnRhdGlvbi4gICovCisgICBleHBvbmVudCA9IDA7CitkaWZmIC0tZ2l0IGEvc3RkbGliL3RzdC1zdHJ0b2QuYyBiL3N0ZGxpYi90c3Qtc3RydG9kLmMKK2luZGV4IGE0NjkyMDguLjI4ZmI0MjMgMTAwNjQ0CistLS0gYS9zdGRsaWIvdHN0LXN0cnRvZC5jCisrKysgYi9zdGRsaWIvdHN0LXN0cnRvZC5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0cnVjdCBsdGVzdAorICAgeworQEAgLTE3Niw3ICsxNzcsOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQorIAorICAgc3RhdHVzIHw9IGxvbmdfZGJsICgpOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHN0YXR1cyB8PSBsb2NhbGVfdGVzdCAoKTsKKysjZW5kaWYKKyAKKyAgIHJldHVybiBzdGF0dXMgPyBFWElUX0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1M7CisgfQorQEAgLTIxOSw2ICsyMjIsNyBAQCBsb25nX2RibCAodm9pZCkKKyAgIHJldHVybiAwOworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgLyogUGVyZm9ybSBhIGZldyB0ZXN0cyBpbiBhIGxvY2FsZSB3aXRoIHRob3VzYW5kcyBzZXBhcmF0b3JzLiAgKi8KKyBzdGF0aWMgaW50CisgbG9jYWxlX3Rlc3QgKHZvaWQpCitAQCAtMjc2LDMgKzI4MCw0IEBAIGxvY2FsZV90ZXN0ICh2b2lkKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworZGlmZiAtLWdpdCBhL3N0cmVhbXMvTWFrZWZpbGUgYi9zdHJlYW1zL01ha2VmaWxlCitpbmRleCBhOGE2MTYyLi5jZWI0MjNmIDEwMDY0NAorLS0tIGEvc3RyZWFtcy9NYWtlZmlsZQorKysrIGIvc3RyZWFtcy9NYWtlZmlsZQorQEAgLTE4LDExICsxOCwxNCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBzdHJlYW1zLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0cmVhbXMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQk9IHN0cm9wdHMuaCBzeXMvc3Ryb3B0cy5oIGJpdHMvc3Ryb3B0cy5oIGJpdHMveHRpdHlwZXMuaAorLXJvdXRpbmVzCT0gaXNhc3RyZWFtIGdldG1zZyBnZXRwbXNnIHB1dG1zZyBwdXRwbXNnIGZhdHRhY2ggZmRldGFjaAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TVFJFQU1TKSBcCisrCSs9IGlzYXN0cmVhbSBnZXRtc2cgZ2V0cG1zZyBwdXRtc2cgcHV0cG1zZyBmYXR0YWNoIGZkZXRhY2gKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCitkaWZmIC0tZ2l0IGEvc3RyaW5nL01ha2VmaWxlIGIvc3RyaW5nL01ha2VmaWxlCitpbmRleCA4NDI0YTYxLi41OTg4ODM0IDEwMDY0NAorLS0tIGEvc3RyaW5nL01ha2VmaWxlCisrKysgYi9zdHJpbmcvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBzdHJpbmcgcG9ydGlvbiBvZiBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0cmluZworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM5LDEwICs0MSwxMiBAQCByb3V0aW5lcwk6PSBzdHJjYXQgc3RyY2hyIHN0cmNtcCBzdHJjb2xsIHN0cmNweSBzdHJjc3BuCQlcCisgCQkgICAkKGFkZHByZWZpeCBhcmd6LSxhcHBlbmQgY291bnQgY3JlYXRlIGN0c2VwIG5leHQJXAorIAkJCQkgICAgIGRlbGV0ZSBleHRyYWN0IGluc2VydCBzdHJpbmdpZnkJXAorIAkJCQkgICAgIGFkZHNlcCByZXBsYWNlKQkJCVwKKy0JCSAgIGVudnogYmFzZW5hbWUJCQkJCVwKKysJCSAgIGJhc2VuYW1lCQkJCQkJXAorIAkJICAgc3RyY29sbF9sIHN0cnhmcm1fbCBzdHJpbmctaW5saW5lcyBtZW1yY2hyCQlcCisgCQkgICB4cGctc3RyZXJyb3Igc3RyZXJyb3JfbAorIAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19FTlZaKSArPSBlbnZ6CisrCisgc3Ryb3AtdGVzdHMJOj0gbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1wY3B5IG1lbXNldCBtZW1jY3B5CVwKKyAJCSAgIHN0cGNweSBzdHBuY3B5IHN0cmNhdCBzdHJjaHIgc3RyY21wIHN0cmNweSBzdHJjc3BuCVwKKyAJCSAgIHN0cmxlbiBzdHJuY21wIHN0cm5jcHkgc3RycGJyayBzdHJyY2hyIHN0cnNwbiBtZW1tZW0JXAorQEAgLTUxLDEwICs1NSwxMiBAQCBzdHJvcC10ZXN0cwk6PSBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXBjcHkgbWVtc2V0IG1lbWNjcHkJXAorIHRlc3RzCQk6PSB0ZXN0ZXIgaW5sLXRlc3RlciBub2lubC10ZXN0ZXIgdGVzdGNvcHkgdGVzdC1mZnMJXAorIAkJICAgdHN0LXN0cmxlbiBzdHJhdGNsaWZmIHRzdC1zdmMgdHN0LWlubGNhbGwJCVwKKyAJCSAgIGJ1Zy1zdHJuY2F0MSBidWctc3Ryc3BuMSBidWctc3RycGJyazEgdHN0LWJzd2FwCVwKKy0JCSAgIHRzdC1zdHJ0b2sgdHN0LXN0cnhmcm0gYnVnLXN0cmNvbGwxIHRzdC1zdHJmcnkJXAorKwkJICAgdHN0LXN0cnRvayB0c3Qtc3RyZnJ5CVwKKyAJCSAgIGJ1Zy1zdHJ0b2sxICQoYWRkcHJlZml4IHRlc3QtLCQoc3Ryb3AtdGVzdHMpKQlcCistCQkgICBidWctZW52ejEgdHN0LXN0cnhmcm0yIHRzdC1lbmRpYW4gdHN0LXN2YzIJCVwKKy0JCSAgIHRzdC1zdHJ0b2tfcgorKwkJICAgdHN0LXN0cnhmcm0yIHRzdC1lbmRpYW4gdHN0LXN2YzIgdHN0LXN0cnRva19yCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0VOVlopICs9IGJ1Zy1lbnZ6MQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gdHN0LXN0cnhmcm0gYnVnLXN0cmNvbGwxCisgCisgeHRlc3RzID0gdHN0LXN0cmNvbGwtb3ZlcmZsb3cKKyAKK2RpZmYgLS1naXQgYS9zdHJpbmcvc3RyY29sbF9sLmMgYi9zdHJpbmcvc3RyY29sbF9sLmMKK2luZGV4IDhmMTIyNWYuLmIzNmIxOGMgMTAwNjQ0CistLS0gYS9zdHJpbmcvc3RyY29sbF9sLmMKKysrKyBiL3N0cmluZy9zdHJjb2xsX2wuYworQEAgLTI0LDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZuZGVmIFNUUklOR19UWVBFCisgIyBkZWZpbmUgU1RSSU5HX1RZUEUgY2hhcgorQEAgLTI2MCw3ICsyNjEsMTEgQEAgaW50CisgU1RSQ09MTCAoY29uc3QgU1RSSU5HX1RZUEUgKnMxLCBjb25zdCBTVFJJTkdfVFlQRSAqczIsIF9fbG9jYWxlX3QgbCkKKyB7CisgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY3VycmVudCA9IGwtPl9fbG9jYWxlc1tMQ19DT0xMQVRFXTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50X2Zhc3QzMl90IG5ydWxlcyA9IGN1cnJlbnQtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoX05MX0NPTExBVEVfTlJVTEVTKV0ud29yZDsKKysjZWxzZQorKyAgY29uc3QgdWludF9mYXN0MzJfdCBucnVsZXMgPSAwOworKyNlbmRpZgorICAgLyogV2UgZG9uJ3QgYXNzaWduIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHJpZ2h0IGF3YXkgc2luY2UgaXQgbWlnaHQgYmUKKyAgICAgIHVubmVjZXNzYXJ5IGluIGNhc2UgdGhlcmUgYXJlIG5vIHJ1bGVzLiAgKi8KKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJ1bGVzZXRzOworZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJlcnJvcl9sLmMgYi9zdHJpbmcvc3RyZXJyb3JfbC5jCitpbmRleCAyZWQ3OGI1Li42NTg0ODEzIDEwMDY0NAorLS0tIGEvc3RyaW5nL3N0cmVycm9yX2wuYworKysrIGIvc3RyaW5nL3N0cmVycm9yX2wuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBzdGF0aWMgX190aHJlYWQgY2hhciAqbGFzdF92YWx1ZTsKK0BAIC0yOSwxMCArMzAsMTQgQEAgc3RhdGljIF9fdGhyZWFkIGNoYXIgKmxhc3RfdmFsdWU7Cisgc3RhdGljIGNvbnN0IGNoYXIgKgorIHRyYW5zbGF0ZSAoY29uc3QgY2hhciAqc3RyLCBsb2NhbGVfdCBsb2MpCisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGxvY2FsZV90IG9sZGxvYyA9IF9fdXNlbG9jYWxlIChsb2MpOworICAgY29uc3QgY2hhciAqcmVzID0gXyhzdHIpOworICAgX191c2Vsb2NhbGUgKG9sZGxvYyk7CisgICByZXR1cm4gcmVzOworKyNlbHNlCisrICByZXR1cm4gc3RyOworKyNlbmRpZgorIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9zdHJpbmcvc3RyeGZybV9sLmMgYi9zdHJpbmcvc3RyeGZybV9sLmMKK2luZGV4IDhiNjFlYTIuLjQxZmRjMjIgMTAwNjQ0CistLS0gYS9zdHJpbmcvc3RyeGZybV9sLmMKKysrKyBiL3N0cmluZy9zdHJ4ZnJtX2wuYworQEAgLTI0LDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZuZGVmIFNUUklOR19UWVBFCisgIyBkZWZpbmUgU1RSSU5HX1RZUEUgY2hhcgorQEAgLTY2OSw3ICs2NzAsMTEgQEAgU1RSWEZSTSAoU1RSSU5HX1RZUEUgKmRlc3QsIGNvbnN0IFNUUklOR19UWVBFICpzcmMsIHNpemVfdCBuLCBfX2xvY2FsZV90IGwpCisgeworICAgbG9jYWxlX2RhdGFfdCBsX2RhdGE7CisgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY3VycmVudCA9IGwtPl9fbG9jYWxlc1tMQ19DT0xMQVRFXTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBsX2RhdGEubnJ1bGVzID0gY3VycmVudC0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChfTkxfQ09MTEFURV9OUlVMRVMpXS53b3JkOworKyNlbHNlCisrICBsX2RhdGEubnJ1bGVzID0gMDsKKysjZW5kaWYKKyAKKyAgIC8qIEhhbmRsZSBieXRlIGNvbXBhcmlzb24gY2FzZS4gICovCisgICBpZiAobF9kYXRhLm5ydWxlcyA9PSAwKQorZGlmZiAtLWdpdCBhL3N0cmluZy90ZXN0LXN0cmNtcC5jIGIvc3RyaW5nL3Rlc3Qtc3RyY21wLmMKK2luZGV4IGRjNGJhNmYuLmE5Nzg2NTYgMTAwNjQ0CistLS0gYS9zdHJpbmcvdGVzdC1zdHJjbXAuYworKysrIGIvc3RyaW5nL3Rlc3Qtc3RyY21wLmMKK0BAIC0zMjksMzQgKzMyOSw2IEBAIGNoZWNrICh2b2lkKQorIAkJRk9SX0VBQ0hfSU1QTCAoaW1wbCwgMCkKKyAJCWNoZWNrX3Jlc3VsdCAoaW1wbCwgczEgKyBpMSwgczIgKyBpMiwgZXhwX3Jlc3VsdCk7CisgICAgICAgfQorLQorLSAgLyogVGVzdCBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgemVybyBieXRlcyBhZnRlciB0aGUgZmlyc3QuICAqLworLQorLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxNiArIDE7IGkrKykKKy0gICAgeworLSAgICAgIHMxW2ldID0gMHgwMDsKKy0gICAgICBzMltpXSA9IDB4MDA7CistICAgIH0KKy0KKy0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTY7IGkrKykKKy0gICAgeworLSAgICAgIGludCBleHBfcmVzdWx0OworLQorLSAgICAgIGZvciAoaW50IHZhbCA9IDB4MDE7IHZhbCA8IDB4MTAwOyB2YWwrKykKKy0JeworLQkgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaTsgaisrKQorLQkgICAgeworLQkgICAgICBzMVtqXSA9IHZhbDsKKy0JICAgICAgczJbal0gPSB2YWw7CistCSAgICB9CistCistCSAgczJbaV0gPSB2YWw7CistCistCSAgZXhwX3Jlc3VsdCA9IFNJTVBMRV9TVFJDTVAgKHMxLCBzMik7CistCSAgRk9SX0VBQ0hfSU1QTCAoaW1wbCwgMCkKKy0JICAgIGNoZWNrX3Jlc3VsdCAoaW1wbCwgczEsIHMyLCBleHBfcmVzdWx0KTsKKy0JfQorLSAgICB9CisgfQorIAorIAorZGlmZiAtLWdpdCBhL3N0cmluZy90c3Qtc3RyeGZybS5jIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMKK2luZGV4IGY0OGNmYzAuLmMzYTUxZjkgMTAwNjQ0CistLS0gYS9zdHJpbmcvdHN0LXN0cnhmcm0uYworKysrIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMKK0BAIC0zLDYgKzMsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgY2hhciBjb25zdCBzdHJpbmdbXSA9ICIiOworQEAgLTY0LDggKzY1LDEwIEBAIGRvX3Rlc3QgKHZvaWQpCisgICBpbnQgcmVzdWx0ID0gMDsKKyAKKyAgIHJlc3VsdCB8PSB0ZXN0ICgiQyIpOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHJlc3VsdCB8PSB0ZXN0ICgiZW5fVVMuSVNPLTg4NTktMSIpOworICAgcmVzdWx0IHw9IHRlc3QgKCJkZV9ERS5VVEYtOCIpOworKyNlbmRpZgorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CitkaWZmIC0tZ2l0IGEvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jCitpbmRleCBkNWExMTE1Li4xOWM3ZjMwIDEwMDY0NAorLS0tIGEvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jCisrKysgYi9zdHJpbmcvdHN0LXN0cnhmcm0yLmMKK0BAIC0xLDYgKzEsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIGRvX3Rlc3QgKHZvaWQpCitAQCAtMzgsNiArMzksNyBAQCBkb190ZXN0ICh2b2lkKQorICAgICAgIHJlcyA9IDE7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJkZV9ERS5VVEYtOCIpID09IE5VTEwpCisgICAgIHsKKyAgICAgICBwdXRzICgic2V0bG9jYWxlIGZhaWxlZCIpOworQEAgLTc1LDYgKzc3LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAJICByZXMgPSAxOworIAl9CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIHJldHVybiByZXM7CisgfQorZGlmZiAtLWdpdCBhL3N1bnJwYy9NYWtlZmlsZSBiL3N1bnJwYy9NYWtlZmlsZQoraW5kZXggNjBjYWEwYS4uNWJjNzBhYiAxMDA2NDQKKy0tLSBhL3N1bnJwYy9NYWtlZmlsZQorKysrIGIvc3VucnBjL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igc3VucnBjIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3VucnBjCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtNTUsNyArNTcsNiBAQCBoZWFkZXJzLWluLXRpcnBjID0gJChhZGRwcmVmaXggcnBjLyxhdXRoLmggYXV0aF91bml4LmggY2xudC5oIHBtYXBfY2xudC5oIFwKKyBoZWFkZXJzLW5vdC1pbi10aXJwYyA9ICQoYWRkcHJlZml4IHJwYy8sa2V5X3Byb3QuaCBycGNfZGVzLmgpIFwKKyAJCSAgICAgICAkKHJwY3N2YzolPXJwY3N2Yy8lKSBycGNzdmMvYm9vdHBhcmFtLmgKKyBoZWFkZXJzID0gcnBjL25ldGRiLmgKKy1pbnN0YWxsLW90aGVycyA9ICQoaW5zdF9zeXNjb25mZGlyKS9ycGMKKyBnZW5lcmF0ZWQgKz0gJChycGNzdmM6JS54PXJwY3N2Yy8lLmgpICQocnBjc3ZjOiUueD14JS5jKSAkKHJwY3N2YzolLng9eCUuc3RtcCkgXAorIAkgICAgICQocnBjc3ZjOiUueD1ycGNzdmMvJS5zdG1wKSBycGNnZW4KKyBnZW5lcmF0ZWQtZGlycyArPSBycGNzdmMKK0BAIC02NSwyMCArNjYsMjggQEAgaGVhZGVycyArPSAkKGhlYWRlcnMtaW4tdGlycGMpICQoaGVhZGVycy1ub3QtaW4tdGlycGMpCisgZW5kaWYKKyAKKyBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorLW5lZWQtZXhwb3J0LXJvdXRpbmVzIDo9IGF1dGhfZGVzIGF1dGhfdW5peCBjbG50X2dlbiBjbG50X3BlcnIgY2xudF90Y3AgXAorK25lZWQtZXhwb3J0LXJvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpIDo9IFwKKysJCQlhdXRoX2RlcyBhdXRoX3VuaXggY2xudF9nZW4gY2xudF9wZXJyIGNsbnRfdGNwIFwKKyAJCQljbG50X3VkcCBnZXRfbXlhZGRyIGtleV9jYWxsIG5ldG5hbWUgcG1fZ2V0cG9ydCBcCistCQkJcnBjX3RocmVhZCBzdmMgc3ZjX3RjcCBzdmNfdWRwIHhjcnlwdCB4ZHJfYXJyYXkgeGRyIFwKKysJCQlycGNfdGhyZWFkIHN2YyBzdmNfdGNwIHN2Y191ZHAgeGRyX2FycmF5IHhkciBcCisgCQkJeGRyX2ludFhYX3QgeGRyX21lbSB4ZHJfcmVmIHhkcl9zaXplb2YgeGRyX3N0ZGlvIFwKKyAJCQlzdmNfcnVuCisrbmVlZC1leHBvcnQtcm91dGluZXMteSArPSB4Y3J5cHQKKytuZWVkLWV4cG9ydC1yb3V0aW5lcyA6PSAkKG5lZWQtZXhwb3J0LXJvdXRpbmVzLXkpCisgCistcm91dGluZXMgOj0gYXV0aF9ub25lIGF1dGh1eHByb3QgYmluZHJzdnBydCBjbG50X3JhdyBjbG50X3NpbXAgXAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpIDo9IFwKKysJICAgIGF1dGhfbm9uZSBhdXRodXhwcm90IGJpbmRyc3ZwcnQgY2xudF9yYXcgY2xudF9zaW1wIFwKKyAJICAgIHJwY19kdGFibGUgZ2V0cnBjcG9ydCBwbWFwX2NsbnQgcG1fZ2V0bWFwcyBwbWFwX3Byb3QgcG1hcF9wcm90MiBcCisgCSAgICBwbWFwX3JtdCBycGNfcHJvdCBycGNfY29tbW9uIHJwY19jbXNnIHN2Y19hdXRoIHN2Y19hdXRodXggc3ZjX3JhdyBcCisgCSAgICBzdmNfc2ltcGxlIHhkcl9mbG9hdCB4ZHJfcmVjIHB1YmxpY2tleSBhdXRoZGVzX3Byb3QgXAorLQkgICAgZGVzX2NyeXB0IGRlc19pbXBsIGRlc19zb2Z0IGtleV9wcm90IG9wZW5jaGlsZCBydGltZSBzdmNhdXRoX2RlcyBcCisrCSAgICBrZXlfcHJvdCBvcGVuY2hpbGQgcnRpbWUgc3ZjYXV0aF9kZXMgXAorIAkgICAgZ2V0cnBjZW50IGdldHJwY2J5bmFtZSBnZXRycGNieW51bWJlciBcCisgCSAgICBnZXRycGNlbnRfciBnZXRycGNieW5hbWVfciBnZXRycGNieW51bWJlcl9yIFwKKy0JICAgIGNsbnRfdW5peCBzdmNfdW5peCBjcmVhdGVfeGlkICQobmVlZC1leHBvcnQtcm91dGluZXMpCisrCSAgICBjbG50X3VuaXggc3ZjX3VuaXggY3JlYXRlX3hpZAorKworKyMgeGRlY3J5cHQgaXMgYWxzbyB1c2VkIGJ5IG5zcy9uc3NfZmlsZXMvZmlsZXMta2V5LmMuCisrcm91dGluZXMteSArPSBkZXNfY3J5cHQgZGVzX2ltcGwgZGVzX3NvZnQgJChuZWVkLWV4cG9ydC1yb3V0aW5lcykKKysKKyBpZm5lcSAoJChsaW5rLW9ic29sZXRlLXJwYykseWVzKQorICMgV2Ugb25seSBhZGQgdGhlIFJQQyBmb3IgY29tcGF0aWJpbGl0eSB0byBsaWJjLnNvLgorIHNoYXJlZC1vbmx5LXJvdXRpbmVzID0gJChyb3V0aW5lcykKK0BAIC04NywyNSArOTYsMjggQEAgZW5kaWYKKyAKKyAjIFdlIGRvIG5vdCBidWlsZCBycGNpbmZvIGFueW1vcmUuICBJdCBpcyBub3QgbmVlZGVkIGZvciBhIGJvb3RzdHJhcAorICMgYW5kIG5vdCB3YW50ZWQgb24gY29tcGxldGUgc3lzdGVtcy4KKy0jIG90aGVycyA6PSBycGNpbmZvCistIyBpbnN0YWxsLXNiaW4gOj0gcnBjaW5mbworLWluc3RhbGwtYmluIDo9IHJwY2dlbgorKyMgb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2luZm8KKysjIGluc3RhbGwtc2Jpbi0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNpbmZvCisraW5zdGFsbC1iaW4tJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjZ2VuCisgcnBjZ2VuLW9ianMgPSBycGNfbWFpbi5vIHJwY19ob3V0Lm8gcnBjX2NvdXQubyBycGNfcGFyc2UubyBcCisgCSAgICAgIHJwY19zY2FuLm8gcnBjX3V0aWwubyBycGNfc3Zjb3V0Lm8gcnBjX2NsbnRvdXQubyBcCisgCSAgICAgIHJwY190YmxvdXQubyBycGNfc2FtcGxlLm8KKy1leHRyYS1vYmpzID0gJChycGNnZW4tb2JqcykgJChhZGRwcmVmaXggY3Jvc3MtLCQocnBjZ2VuLW9ianMpKQorLW90aGVycyArPSBycGNnZW4KKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpID0gJChycGNnZW4tb2JqcykgJChhZGRwcmVmaXggY3Jvc3MtLCQocnBjZ2VuLW9ianMpKQorK290aGVycy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNnZW4KKysKKytpbnN0YWxsLW90aGVycy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSAkKGluc3Rfc3lzY29uZmRpcikvcnBjCisgCistdGVzdHMgPSB0c3QteGRybWVtIHRzdC14ZHJtZW0yIHRlc3QtcnBjZW50CisteHRlc3RzIDo9IHRzdC1nZXRteWFkZHIKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA9IHRzdC14ZHJtZW0gdHN0LXhkcm1lbTIgdGVzdC1ycGNlbnQKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgOj0gdHN0LWdldG15YWRkcgorIAorIGlmZXEgKCQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzKQorLXh0ZXN0cyArPSB0aHJzdmMKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gdGhyc3ZjCisgZW5kaWYKKyAKKyBoZWFkZXJzICs9ICQocnBjc3ZjOiUueD1ycGNzdmMvJS5oKQorLWV4dHJhLWxpYnMgOj0gbGlicnBjc3ZjCistZXh0cmEtbGlicy1vdGhlcnMgOj0gbGlicnBjc3ZjICMgTWFrZSBpdCBpbiBgb3RoZXJzJyBwYXNzLCBub3QgYGxpYicgcGFzcy4KKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IGxpYnJwY3N2YworKyMgTWFrZSBpdCBpbiBgb3RoZXJzJyBwYXNzLCBub3QgYGxpYicgcGFzcy4KKytleHRyYS1saWJzLW90aGVycy15ICs9ICQoZXh0cmEtbGlicy15KQorIGxpYnJwY3N2Yy1yb3V0aW5lcyA9ICQocnBjc3ZjOiUueD14JSkKKyBsaWJycGNzdmMtaW5oaWJpdC1vID0gLm9zICMgQnVpbGQgbm8gc2hhcmVkIHJwY3N2YyBsaWJyYXJ5LgorIG9taXQtZGVwcyA9ICQobGlicnBjc3ZjLXJvdXRpbmVzKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL01ha2VmaWxlIGIvc3lzZGVwcy9hcm0vTWFrZWZpbGUKK2luZGV4IDE3YzEyOWIuLjU0Mzc5MWEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9hcm0vTWFrZWZpbGUKK0BAIC0zNywxMCArMzcsMTMgQEAgaWZlcSAoJChzdWJkaXIpLGNzdSkKKyAjIGdldCBvZmZzZXQgdG8gcnRsZF9nbG9iYWwuX2RsX2h3Y2FwCisgZ2VuLWFzLWNvbnN0LWhlYWRlcnMgKz0gcnRsZC1nbG9iYWwtb2Zmc2V0cy5zeW0gdGxzZGVzYy5zeW0KKyBhZWFiaV9jb25zdGFudHMgPSBhZWFiaV9sY3N0cyBhZWFiaV9zaWdoYW5kbGVycyBhZWFiaV9tYXRoCistYWVhYmlfcm91dGluZXMgPSBhZWFiaV9hc3NlcnQgYWVhYmlfbG9jYWxlY29udiBhZWFiaV9lcnJub19hZGRyIFwKKythZWFiaV9yb3V0aW5lcyA9IGFlYWJpX2Fzc2VydCBhZWFiaV9lcnJub19hZGRyIFwKKyAJCSBhZWFiaV9tYl9jdXJfbWF4IGFlYWJpX2F0ZXhpdCBhZWFiaV9tZW1jbHIgYWVhYmlfbWVtY3B5IFwKKyAJCSBhZWFiaV9tZW1tb3ZlIGFlYWJpX21lbXNldCBcCisgCQkgYWVhYmlfcmVhZF90cCBsaWJjLWFlYWJpX3JlYWRfdHAKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisrYWVhYmlfcm91dGluZXMgKz0gYWVhYmlfbG9jYWxlY29udgorK2VuZGlmCisgCisgc3lzZGVwX3JvdXRpbmVzICs9ICQoYWVhYmlfY29uc3RhbnRzKSAkKGFlYWJpX3JvdXRpbmVzKQorIHN0YXRpYy1vbmx5LXJvdXRpbmVzICs9ICQoYWVhYmlfY29uc3RhbnRzKSBhZWFiaV9yZWFkX3RwCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmggYi9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaAoraW5kZXggN2EwZmU4ZC4uYTNlMmMwYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oCisrKysgYi9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaAorQEAgLTQzNSw2ICs0MzUsMTIgQEAgZXh0ZXJuIHN0cnVjdCBydGxkX2dsb2JhbCBfcnRsZF9nbG9iYWwgX19ydGxkX2dsb2JhbF9hdHRyaWJ1dGVfXzsKKyAjIHVuZGVmIF9fcnRsZF9nbG9iYWxfYXR0cmlidXRlX18KKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKysjIGRlZmluZSBHTFJPX2RsX2RlYnVnX21hc2sgR0xSTyhkbF9kZWJ1Z19tYXNrKQorKyNlbHNlCisrIyBkZWZpbmUgR0xST19kbF9kZWJ1Z19tYXNrIDAKKysjZW5kaWYKKysKKyAjaWZuZGVmIFNIQVJFRAorICMgZGVmaW5lIEdMUk8obmFtZSkgXyMjbmFtZQorICNlbHNlCitAQCAtNDQ3LDggKzQ1MywxMCBAQCBzdHJ1Y3QgcnRsZF9nbG9iYWxfcm8KKyB7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgICAvKiBJZiBub256ZXJvIHRoZSBhcHByb3ByaWF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBwcmludGVkLiAgKi8KKyAgIEVYVEVSTiBpbnQgX2RsX2RlYnVnX21hc2s7CisrI2VuZGlmCisgI2RlZmluZSBETF9ERUJVR19MSUJTCSAgICAoMSA8PCAwKQorICNkZWZpbmUgRExfREVCVUdfSU1QQ0FMTFMgICAoMSA8PCAxKQorICNkZWZpbmUgRExfREVCVUdfQklORElOR1MgICAoMSA8PCAyKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L01ha2VmaWxlIGIvc3lzZGVwcy9nbnUvTWFrZWZpbGUKK2luZGV4IGVhNjgwMzcuLjMxNzVjYzMgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dudS9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9nbnUvTWFrZWZpbGUKK0BAIC01OSw3ICs1OSw4IEBAICQoZm9yZWFjaCBvLCQob2JqZWN0LXN1ZmZpeGVzKSAkKG9iamVjdC1zdWZmaXhlczo9LmQpLFwKKyBlbmRpZgorIAorIGlmZXEgKCQoc3ViZGlyKSxsb2dpbikKKy1zeXNkZXBfcm91dGluZXMgKz0gc2V0dXR4ZW50IGdldHV0eGVudCBlbmR1dHhlbnQgZ2V0dXR4aWQgZ2V0dXR4bGluZSBcCisrc3lzZGVwX3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19VVE1QWCkgXAorKwkJKz0gc2V0dXR4ZW50IGdldHV0eGVudCBlbmR1dHhlbnQgZ2V0dXR4aWQgZ2V0dXR4bGluZSBcCisgCQkgICBwdXR1dHhsaW5lIHV0bXB4bmFtZSB1cGR3dG1weCBnZXR1dG1weCBnZXR1dG1wCisgCisgc3lzZGVwX2hlYWRlcnMgKz0gdXRtcHguaCBiaXRzL3V0bXB4LmgKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUKK2luZGV4IDIyMjEyMmQuLjQ1MDkzNTcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZQorQEAgLTExLDE5ICsxMSwxOCBAQCBsaWJtLXJvdXRpbmVzICs9IHNfbmV4dHRvd2FyZGZkCisgcm91dGluZXMgKz0gbWF0aF9sZGJsX29wdCBubGRibC1jb21wYXQKKyAKKyBleHRyYS1saWJzICs9IGxpYm5sZGJsCistbGlibmxkYmwtY2FsbHMgPSBhc3ByaW50ZiBkcHJpbnRmIGZwcmludGYgZnNjYW5mIGZ3cHJpbnRmIGZ3c2NhbmYgaW92ZnNjYW5mIFwKKytsaWJubGRibC1jYWxscyA9IGFzcHJpbnRmIGRwcmludGYgZnByaW50ZiBmc2NhbmYgaW92ZnNjYW5mIFwKKyAJCSBvYnN0YWNrX3ByaW50ZiBvYnN0YWNrX3ZwcmludGYgcHJpbnRmIHNjYW5mIHNucHJpbnRmIFwKKy0JCSBzcHJpbnRmIHNzY2FuZiBzd3ByaW50ZiBzd3NjYW5mIHZhc3ByaW50ZiB2ZHByaW50ZiB2ZnByaW50ZiBcCistCQkgdmZzY2FuZiB2ZndwcmludGYgdmZ3c2NhbmYgdnByaW50ZiB2c2NhbmYgdnNucHJpbnRmIFwKKy0JCSB2c3ByaW50ZiB2c3NjYW5mIHZzd3ByaW50ZiB2c3dzY2FuZiB2d3ByaW50ZiB2d3NjYW5mIFwKKy0JCSB3cHJpbnRmIHdzY2FuZiBwcmludGZfZnAgcHJpbnRmX3NpemUgXAorLQkJIGZwcmludGZfY2hrIGZ3cHJpbnRmX2NoayBwcmludGZfY2hrIHNucHJpbnRmX2NoayBzcHJpbnRmX2NoayBcCistCQkgc3dwcmludGZfY2hrIHZmcHJpbnRmX2NoayB2ZndwcmludGZfY2hrIHZwcmludGZfY2hrIFwKKy0JCSB2c25wcmludGZfY2hrIHZzcHJpbnRmX2NoayB2c3dwcmludGZfY2hrIHZ3cHJpbnRmX2NoayBcCistCQkgd3ByaW50Zl9jaGsgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorKwkJIHNwcmludGYgc3NjYW5mIHZhc3ByaW50ZiB2ZHByaW50ZiB2ZnByaW50ZiBcCisrCQkgdmZzY2FuZiB2cHJpbnRmIHZzY2FuZiB2c25wcmludGYgXAorKwkJIHZzcHJpbnRmIHZzc2NhbmYgXAorKwkJIHByaW50Zl9mcCBwcmludGZfc2l6ZSBcCisrCQkgZnByaW50Zl9jaGsgcHJpbnRmX2NoayBzbnByaW50Zl9jaGsgc3ByaW50Zl9jaGsgXAorKwkJIHZmcHJpbnRmX2NoayB2cHJpbnRmX2NoayBcCisrCQkgdnNucHJpbnRmX2NoayB2c3ByaW50Zl9jaGsgXAorKwkJIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKyAJCSB2ZHByaW50Zl9jaGsgb2JzdGFja19wcmludGZfY2hrIG9ic3RhY2tfdnByaW50Zl9jaGsgXAorIAkJIHN5c2xvZyBzeXNsb2dfY2hrIHZzeXNsb2cgdnN5c2xvZ19jaGsgXAorLQkJIHN0cmZtb24gc3RyZm1vbl9sIFwKKyAJCSBzdHJ0b2xkIHN0cnRvbGRfbCBzdHJ0b2xkaW50IHdjc3RvbGQgd2NzdG9sZF9sIHdjc3RvbGRpbnQgXAorIAkJIHFlY3Z0IHFmY3Z0IHFnY3Z0IHFlY3Z0X3IgcWZjdnRfciBcCisgCQkgaXNpbmYgaXNuYW4gZmluaXRlIHNpZ25iaXQgc2NhbGIgbG9nMiBsZ2FtbWFfciBjZWlsIFwKK0BAIC0zOCw5ICszNywxNSBAQCBsaWJubGRibC1jYWxscyA9IGFzcHJpbnRmIGRwcmludGYgZnByaW50ZiBmc2NhbmYgZndwcmludGYgZndzY2FuZiBpb3Zmc2NhbmYgXAorIAkJIGNhc2luaCBjZXhwIGNsb2cgY3Byb2ogY3NpbiBjc2luaCBjc3FydCBjdGFuIGN0YW5oIGNwb3cgXAorIAkJIGNhYnMgY2FyZyBjaW1hZyBjcmVhbCBjbG9nMTAgXAorIAkJIGlzb2M5OV9zY2FuZiBpc29jOTlfZnNjYW5mIGlzb2M5OV9zc2NhbmYgXAorLQkJIGlzb2M5OV92c2NhbmYgaXNvYzk5X3Zmc2NhbmYgaXNvYzk5X3Zzc2NhbmYgXAorKwkJIGlzb2M5OV92c2NhbmYgaXNvYzk5X3Zmc2NhbmYgaXNvYzk5X3Zzc2NhbmYKKytsaWJubGRibC1jYWxscy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHN0cmZtb24gc3RyZm1vbl9sCisrbGlibmxkYmwtY2FsbHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgKz0gZndwcmludGYgZndzY2FuZiBcCisrCQkgc3dwcmludGYgc3dzY2FuZiB2ZndwcmludGYgdmZ3c2NhbmYgdnN3cHJpbnRmIHZzd3NjYW5mIFwKKysJCSB2d3ByaW50ZiB2d3NjYW5mIHdwcmludGYgd3NjYW5mIGZ3cHJpbnRmX2NoayBzd3ByaW50Zl9jaGsgXAorKwkJIHZmd3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoayB2d3ByaW50Zl9jaGsgd3ByaW50Zl9jaGsgXAorIAkJIGlzb2M5OV93c2NhbmYgaXNvYzk5X2Z3c2NhbmYgaXNvYzk5X3N3c2NhbmYgXAorIAkJIGlzb2M5OV92d3NjYW5mIGlzb2M5OV92ZndzY2FuZiBpc29jOTlfdnN3c2NhbmYKKytsaWJubGRibC1jYWxscyArPSAkKGxpYm5sZGJsLWNhbGxzLXkpCisgbGlibmxkYmwtcm91dGluZXMgPSAkKGxpYm5sZGJsLWNhbGxzOiU9bmxkYmwtJSkKKyBsaWJubGRibC1pbmhpYml0LW8gPSAkKG9iamVjdC1zdWZmaXhlcykKKyBsaWJubGRibC1zdGF0aWMtb25seS1yb3V0aW5lcyA9ICQobGlibmxkYmwtcm91dGluZXMpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jCitpbmRleCAwMTk4ODg2Li41NTUwMWNkIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jCisrKysgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMKK0BAIC0yNiw2ICsyNiw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisgI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSAibmxkYmwtY29tcGF0LmgiCisgCitAQCAtMzMsMjAgKzM0LDE0IEBAIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZmcHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzc2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnNwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZzY2FuZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZHByaW50ZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dzY2FuZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndwcmludGYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3cHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZzbnByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92YXNwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfb2JzdGFja192cHJpbnRmKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmZ3cHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzbnByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZnByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3lzbG9nX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzcHJpbnRmX2NoaykKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zzd3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192YXNwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmRwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fb2JzdGFja192cHJpbnRmX2NoaykKK0BAIC01NCw4ICs0OSwxNyBAQCBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzdHJmbW9uKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN0cmZtb25fbCkKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92c3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zmc2NhbmYpCisrCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndzY2FuZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dzY2FuZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndwcmludGYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3cHJpbnRmKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmZ3cHJpbnRmX2NoaykKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zzd3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdnN3c2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdmZ3c2NhbmYpCisrI2VuZGlmCisgCisgc3RhdGljIHZvaWQKKyBfX25sZGJsX2NsZWFudXAgKHZvaWQgKmFyZykKK0BAIC0xMTcsNiArMTIxLDcgQEAgX19ubGRibF9mcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorIH0KKyB3ZWFrX2FsaWFzIChfX25sZGJsX2ZwcmludGYsIF9fbmxkYmxfX0lPX2ZwcmludGYpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCisgX19ubGRibF9md3ByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKK0BAIC0xMzAsNiArMTM1LDcgQEAgX19ubGRibF9md3ByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTIyNiw2ICsyMzIsNyBAQCBfX25sZGJsX3NucHJpbnRmIChjaGFyICpzLCBzaXplX3QgbWF4bGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9zd3ByaW50ZiAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorQEAgLTIzOSw2ICsyNDYsNyBAQCBfX25sZGJsX3N3cHJpbnRmICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorQEAgLTI2NCw2ICsyNzIsNyBAQCBfX25sZGJsX3ZkcHJpbnRmIChpbnQgZCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZykKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX3ZkcHJpbnRmKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorIF9fbmxkYmxfdmZ3cHJpbnRmIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtMjc1LDYgKzI4NCw3IEBAIF9fbmxkYmxfdmZ3cHJpbnRmIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCisgICByZXR1cm4gcmVzOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfdmZ3cHJpbnRmKQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtMjk3LDYgKzMwNyw3IEBAIF9fbmxkYmxfdnNucHJpbnRmIChjaGFyICpzdHJpbmcsIHNpemVfdCBtYXhsZW4sIGNvbnN0IGNoYXIgKmZtdCwKKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfdnNucHJpbnRmKQorIHdlYWtfYWxpYXMgKF9fbmxkYmxfdnNucHJpbnRmLCBfX25sZGJsX19fdnNucHJpbnRmKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorIF9fbmxkYmxfdnN3cHJpbnRmICh3Y2hhcl90ICpzdHJpbmcsIHNpemVfdCBtYXhsZW4sIGNvbnN0IHdjaGFyX3QgKmZtdCwKK0BAIC0zMzAsNiArMzQxLDcgQEAgX19ubGRibF93cHJpbnRmIChjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTQxOSw2ICs0MzEsNyBAQCBfX25sZGJsX3NjYW5mIChjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF92ZndzY2FuZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTQ5MSw2ICs1MDQsNyBAQCBfX25sZGJsX3dzY2FuZiAoY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC01MDYsNiArNTIwLDcgQEAgX19ubGRibF9fX2ZwcmludGZfY2hrIChGSUxFICpzdHJlYW0sIGludCBmbGFnLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX2Z3cHJpbnRmX2NoayAoRklMRSAqc3RyZWFtLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCitAQCAtNTE5LDYgKzUzNCw3IEBAIF9fbmxkYmxfX19md3ByaW50Zl9jaGsgKEZJTEUgKnN0cmVhbSwgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNTYzLDYgKzU3OSw3IEBAIF9fbmxkYmxfX19zcHJpbnRmX2NoayAoY2hhciAqcywgaW50IGZsYWcsIHNpemVfdCBzbGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX3N3cHJpbnRmX2NoayAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGludCBmbGFnLCBzaXplX3Qgc2xlbiwKK0BAIC01NzcsNiArNTk0LDcgQEAgX19ubGRibF9fX3N3cHJpbnRmX2NoayAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGludCBmbGFnLCBzaXplX3Qgc2xlbiwKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTU5MCw2ICs2MDgsNyBAQCBfX25sZGJsX19fdmZwcmludGZfY2hrIChGSUxFICpzLCBpbnQgZmxhZywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQorIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192ZnByaW50Zl9jaGspCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpzLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTYwMSw2ICs2MjAsNyBAQCBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqcywgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKKyAgIHJldHVybiByZXM7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3Zmd3ByaW50Zl9jaGspCisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC02MzUsNiArNjU1LDcgQEAgX19ubGRibF9fX3ZzcHJpbnRmX2NoayAoY2hhciAqc3RyaW5nLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sIGNvbnN0IGNoYXIgKmZtdCwKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdnNwcmludGZfY2hrKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fdnN3cHJpbnRmX2NoayAod2NoYXJfdCAqc3RyaW5nLCBzaXplX3QgbWF4bGVuLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sCitAQCAtNjY4LDYgKzY4OSw3IEBAIF9fbmxkYmxfX193cHJpbnRmX2NoayAoaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNzc1LDYgKzc5Nyw3IEBAIF9fbmxkYmxfX19wcmludGZfZnAgKEZJTEUgKmZwLCBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8sCisgICByZXR1cm4gX19fcHJpbnRmX2ZwIChmcCwgJmluZm9fbm9fbGRibCwgYXJncyk7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyBzc2l6ZV90CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX3N0cmZtb24gKGNoYXIgKnMsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK0BAIC04MjksNiArODUyLDcgQEAgX19ubGRibF9fX3ZzdHJmbW9uX2wgKGNoYXIgKnMsIHNpemVfdCBtYXhzaXplLCBfX2xvY2FsZV90IGxvYywKKyAgIHJldHVybiByZXM7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3ZzdHJmbW9uX2wpCisrI2VuZGlmCisgCisgdm9pZAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtOTQxLDYgKzk2NSw3IEBAIF9fbmxkYmxfX19pc29jOTlfc2NhbmYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19faXNvYzk5X3Zmd3NjYW5mIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtMTAxNCw2ICsxMDM5LDcgQEAgX19ubGRibF9fX2lzb2M5OV93c2NhbmYgKGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorICNpZiBMT05HX0RPVUJMRV9DT01QQVQobGliYywgR0xJQkNfMl8wKQorIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfX0lPX3ByaW50ZiwgX0lPX3ByaW50ZiwgR0xJQkNfMl8wKTsKK0BAIC0xMDU3LDYgKzEwODMsNyBAQCBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3ByaW50Zl9zaXplLCBwcmludGZfc2l6ZSwgR0xJQkNfMl8xKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX19fc3RyZm1vbl9sLCBfX3N0cmZtb25fbCwgR0xJQkNfMl8xKTsKKyAjZW5kaWYKKyAjaWYgTE9OR19ET1VCTEVfQ09NUEFUKGxpYmMsIEdMSUJDXzJfMikKKysjIGlmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3N3cHJpbnRmLCBzd3ByaW50ZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Z3cHJpbnRmLCB2d3ByaW50ZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3dwcmludGYsIHdwcmludGYsIEdMSUJDXzJfMik7CitAQCAtMTA2OSw2ICsxMDk2LDcgQEAgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92ZndzY2FuZiwgdmZ3c2NhbmYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92c3dzY2FuZiwgdnN3c2NhbmYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92d3NjYW5mLCB2d3NjYW5mLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfd3NjYW5mLCB3c2NhbmYsIEdMSUJDXzJfMik7CisrIyBlbmRpZgorICNlbmRpZgorICNpZiBMT05HX0RPVUJMRV9DT01QQVQobGliYywgR0xJQkNfMl8zKQorIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfc3RyZm1vbl9sLCBzdHJmbW9uX2wsIEdMSUJDXzJfMyk7CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oCitpbmRleCAwZDJjOGFmLi5mNGNlYTUwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oCisrKysgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmgKK0BAIC0zMCw2ICszMCw3IEBACisgI2luY2x1ZGUgPG1hdGguaD4KKyAjaW5jbHVkZSA8bW9uZXRhcnkuaD4KKyAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIC8qIERlY2xhcmUgdGhlIF9fbmxkYmxfTkFNRSBmdW5jdGlvbiB0aGUgd3JhcHBlcnMgY2FsbCB0aGF0J3MgaW4gbGliYy5zby4gICovCitAQCAtMzcsMTkgKzM4LDE1IEBACisgCisgTkxEQkxfREVDTCAoX0lPX3Zmc2NhbmYpOworIE5MREJMX0RFQ0wgKHZmc2NhbmYpOworLU5MREJMX0RFQ0wgKHZmd3NjYW5mKTsKKyBOTERCTF9ERUNMIChvYnN0YWNrX3ZwcmludGYpOworIE5MREJMX0RFQ0wgKHZhc3ByaW50Zik7CisgTkxEQkxfREVDTCAoZHByaW50Zik7CisgTkxEQkxfREVDTCAodmRwcmludGYpOworIE5MREJMX0RFQ0wgKGZwcmludGYpOworIE5MREJMX0RFQ0wgKHZmcHJpbnRmKTsKKy1OTERCTF9ERUNMICh2ZndwcmludGYpOworIE5MREJMX0RFQ0wgKHZzbnByaW50Zik7CisgTkxEQkxfREVDTCAodnNwcmludGYpOworIE5MREJMX0RFQ0wgKHZzc2NhbmYpOworLU5MREJMX0RFQ0wgKHZzd3ByaW50Zik7CistTkxEQkxfREVDTCAodnN3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9fYXNwcmludGYpOworIE5MREJMX0RFQ0wgKGFzcHJpbnRmKTsKKyBOTERCTF9ERUNMIChfX3ByaW50Zl9mcCk7CitAQCAtNjYsMTIgKzYzLDE4IEBAIE5MREJMX0RFQ0wgKF9faXNvYzk5X3NzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdnNjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92ZnNjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92c3NjYW5mKTsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworK05MREJMX0RFQ0wgKHZmd3NjYW5mKTsKKytOTERCTF9ERUNMICh2ZndwcmludGYpOworK05MREJMX0RFQ0wgKHZzd3ByaW50Zik7CisrTkxEQkxfREVDTCAodnN3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfZndzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfc3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdndzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdmZ3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zzd3NjYW5mKTsKKysjZW5kaWYKKyAKKyAvKiBUaGlzIG9uZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbm9ybWFsIGludGVyZmFjZSwgb25seQorICAgIF9fbmxkYmxfX192c3RyZm1vbiByZWFsbHkgZXhpc3RzLiAgKi8KK0BAIC04MiwyMiArODUsMjMgQEAgZXh0ZXJuIHNzaXplX3QgX19ubGRibF9fX3ZzdHJmbW9uIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCB2YV9saXN0KQorICAgIHNpbmNlIHdlIGRvbid0IGNvbXBpbGUgd2l0aCBfRk9SVElGWV9TT1VSQ0UuICAqLworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZmcHJpbnRmX2NoayAoRklMRSAqX19yZXN0cmljdCwgaW50LAorIAkJCQkgICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfR192YV9saXN0KTsKKy1leHRlcm4gaW50IF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpfX3Jlc3RyaWN0LCBpbnQsCistCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCk7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdnNwcmludGZfY2hrIChjaGFyICpfX3Jlc3RyaWN0LCBpbnQsIHNpemVfdCwKKyAJCQkJICAgY29uc3QgY2hhciAqX19yZXN0cmljdCwgX0dfdmFfbGlzdCkgX19USFJPVzsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192c25wcmludGZfY2hrIChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGludCwgc2l6ZV90LAorIAkJCQkgICAgY29uc3QgY2hhciAqX19yZXN0cmljdCwgX0dfdmFfbGlzdCkKKyAgIF9fVEhST1c7CistZXh0ZXJuIGludCBfX25sZGJsX19fdnN3cHJpbnRmX2NoayAod2NoYXJfdCAqX19yZXN0cmljdCwgc2l6ZV90LCBpbnQsIHNpemVfdCwKKy0JCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KQorLSAgX19USFJPVzsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192YXNwcmludGZfY2hrIChjaGFyICoqLCBpbnQsIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCkKKyAgIF9fVEhST1c7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdmRwcmludGZfY2hrIChpbnQsIGludCwgY29uc3QgY2hhciAqLCBfR192YV9saXN0KTsKKyBleHRlcm4gaW50IF9fbmxkYmxfX19vYnN0YWNrX3ZwcmludGZfY2hrIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKKyAJCQkJCSAgX0dfdmFfbGlzdCkgX19USFJPVzsKKyBleHRlcm4gdm9pZCBfX25sZGJsX19fdnN5c2xvZ19jaGsgKGludCwgaW50LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworLQorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrZXh0ZXJuIGludCBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqX19yZXN0cmljdCwgaW50LAorKwkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpOworK2V4dGVybiBpbnQgX19ubGRibF9fX3Zzd3ByaW50Zl9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QsIHNpemVfdCwgaW50LCBzaXplX3QsCisrCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCkKKysgIF9fVEhST1c7CisrI2VuZGlmCisgCisgI2VuZGlmIC8qIF9fTkxEQkxfQ09NUEFUX0ggKi8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvTWFrZWZpbGUgYi9zeXNkZXBzL25wdGwvTWFrZWZpbGUKK2luZGV4IGU5MzM5YTMuLjc4MjAwOWIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25wdGwvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvbnB0bC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDkgQEAKKyAKKyBpZmVxICgkKHN1YmRpciksbnB0bCkKKyBsaWJwdGhyZWFkLXN5c2RlcF9yb3V0aW5lcyArPSBlcnJuby1sb2MKKytpZmVxICgkKE9QVElPTl9FR0xJQkNfQklHX01BQ1JPUyksbikKKytzeXNkZXBfcm91dGluZXMgKz0gc21hbGwtbWFjcm9zLWZucworK2VuZGlmCisgZW5kaWYKKyAKKyBpZmVxICgkKHN1YmRpcikscnQpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmggYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaAoraW5kZXggNTU5OWNmMS4uYjgzOTM3OCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oCisrKysgYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaAorQEAgLTI0LDYgKzI0LDE0IEBACisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorIAorIAorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bG93bGV2ZWxsb2NrLmg+CisrIyBpbmNsdWRlIDx0bHMuaD4KKysjIGluY2x1ZGUgPHB0aHJlYWQtZnVuY3Rpb25zLmg+CisrIyBpbmNsdWRlIDxlcnJuby5oPiAvKiBGb3IgRUJVU1kuICAqLworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4gLyogRm9yIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLiAgKi8KKysjZW5kaWYKKysKKyAvKiBNdXRleCB0eXBlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9JT19NVFNBRkVfSU8KKyAjIGlmICghSVNfSU4gKGxpYmMpICYmICFJU19JTiAobGlicHRocmVhZCkpIHx8ICFkZWZpbmVkIF9MSUJDCitAQCAtODcsNiArOTUsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAorIC8qIExvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyAmJiAoSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKSkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKworICMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgIHZvaWQgKnNlbGYgPSBUSFJFQURfU0VMRjsJCQkJCQkgICAgICBcCitAQCAtOTcsNiArMTE0LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAgICAgICB9CQkJCQkJCQkJICAgICAgXAorICAgICArKyhOQU1FKS5jbnQ7CQkJCQkJCSAgICAgIFwKKyAgIH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkJCQkJXAorKyAgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF9sb2NrLCAoJihOQU1FKS5tdXRleCksIDApCitAQCAtMTA0LDYgKzEyNSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCisgLyogVHJ5IHRvIGxvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyAmJiAoSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKSkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIGludCBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIGludCByZXN1bHQgPSAwOwkJCQkJCQkgICAgICBcCitAQCAtMTIyLDYgKzE1MSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgICAgICAgKysoTkFNRSkuY250OwkJCQkJCQkgICAgICBcCisgICAgIHJlc3VsdDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUoTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF90cnlsb2NrLCAoJihOQU1FKS5tdXRleCksIDApCitAQCAtMTI5LDYgKzE2MiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCisgLyogVW5sb2NrIHRoZSByZWN1cnNpdmUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgJiYgKElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUywgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworIC8qIFdlIGRvIG5vIGVycm9yIGNoZWNraW5nIGhlcmUuICAqLworICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgZG8gewkJCQkJCQkJCSAgICAgIFwKK0BAIC0xMzgsNiArMTc5LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAJbGxsX3VubG9jayAoKE5BTUUpLmxvY2ssIExMTF9QUklWQVRFKTsJCQkJICAgICAgXAorICAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUoTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrLCAoJihOQU1FKS5tdXRleCksIDApCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oCitpbmRleCBmNTVmNjIxLi5kYTk4ODY5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oCisrKysgYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmgKK0BAIC0zMyw2ICszMyw4IEBACisgI2luY2x1ZGUgPGxvd2xldmVsbG9jay5oPgorICNpbmNsdWRlIDx0bHMuaD4KKyAjaW5jbHVkZSA8cHRocmVhZC1mdW5jdGlvbnMuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4gLyogRm9yIEVCVVNZLiAgKi8KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4gLyogRm9yIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLiAgKi8KKyAKKyAjaWYgSVNfSU4gKGxpYnB0aHJlYWQpCisgLyogVGhpcyBnZXRzIHVzIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlIF9fcHRocmVhZF8qIGludGVybmFsIG5hbWVzLAorQEAgLTE3MSwxMCArMTczLDIyIEBAIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2xpYmNfa2V5X3Q7CisgCisgLyogTG9jayB0aGUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkKKy0jIGlmbmRlZiBfX2xpYmNfbG9ja19sb2NrCistIyAgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgXAorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja19sb2NrX2ZuIChfX2xpYmNfbG9ja190ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja19sb2NrX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrIyAgaWZuZGVmIF9fbGliY19sb2NrX2xvY2sKKysjICAgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgXAorICAgKHsgbGxsX2xvY2sgKE5BTUUsIExMTF9QUklWQVRFKTsgMDsgfSkKKy0jIGVuZGlmCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSAgICAgICAgICAgICAgIFwKKysgIF9fbGliY19sb2NrX2xvY2tfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyB1bmRlZiBfX2xpYmNfbG9ja19sb2NrCisgIyBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCitAQCAtMTg3LDEwICsyMDEsMjIgQEAgdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fbGliY19rZXlfdDsKKyAKKyAvKiBUcnkgdG8gbG9jayB0aGUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkKKy0jIGlmbmRlZiBfX2xpYmNfbG9ja190cnlsb2NrCistIyAgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gaW50IF9fbGliY19sb2NrX3RyeWxvY2tfZm4gKF9fbGliY19sb2NrX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3RyeWxvY2tfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysjICBpZm5kZWYgX19saWJjX2xvY2tfdHJ5bG9jaworKyMgICBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCisgICBsbGxfdHJ5bG9jayAoTkFNRSkKKy0jIGVuZGlmCisrIyAgZW5kaWYKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3RyeWxvY2tfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyB1bmRlZiBfX2xpYmNfbG9ja190cnlsb2NrCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCitAQCAtMjA2LDggKzIzMiwyMCBAQCB0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19saWJjX2tleV90OworIAorIC8qIFVubG9jayB0aGUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLCBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX3VubG9ja19mbiAoX19saWJjX2xvY2tfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdW5sb2NrX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIFwKKyAgIGxsbF91bmxvY2sgKE5BTUUsIExMTF9QUklWQVRFKQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKSBcCisrICBfX2xpYmNfbG9ja191bmxvY2tfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrLCAoJihOQU1FKSksIDApCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYyBiL3N5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mNzUxMDUzCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jCitAQCAtMCwwICsxLDcyIEBACisrLyogRUdMSUJDOiBmdW5jdGlvbiB3cmFwcGVycyBmb3IgYmlnIG1hY3Jvcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisrICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKysgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKysgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrCisrLyogSGFuZGxlIG1hY3JvcyBmcm9tIC4vYml0cy9saWJjLWxvY2suaC4gICovCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkKKysKKysvKiBHZXQgdGhlIG1hY3JvcyBmb3IgZnVuY3Rpb24gYm9kaWVzIHRocm91Z2ggYSBiYWNrIGRvb3IuICAqLworKyMgdW5kZWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysjIGRlZmluZSBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAyCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKworK3ZvaWQKKytfX2xpYmNfbG9ja19sb2NrX2ZuIChfX2xpYmNfbG9ja190ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX2xvY2sgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja19sb2NrX2ZuKTsKKysKKyt2b2lkCisrX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4pOworKworK2ludAorK19fbGliY19sb2NrX3RyeWxvY2tfZm4gKF9fbGliY19sb2NrX3QgKm5hbWUpCisreworKyAgcmV0dXJuIF9fbGliY19sb2NrX3RyeWxvY2sgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja190cnlsb2NrX2ZuKTsKKysKKytpbnQKKytfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKm5hbWUpCisreworKyAgcmV0dXJuIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4pOworKworK3ZvaWQKKytfX2xpYmNfbG9ja191bmxvY2tfZm4gKF9fbGliY19sb2NrX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfdW5sb2NrICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdW5sb2NrX2ZuKTsKKysKKyt2b2lkCisrX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZSAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4pOworKworKyNlbmRpZiAvKmRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkqLworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMKK2luZGV4IDI2ZTQ2OTIuLmQwYTI2YzggMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxub3QtY2FuY2VsLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2RlZmluZSBIT1NUSURGSUxFICIvZXRjL2hvc3RpZCIKKyAKK0BAIC04OSw2ICs5MCw3IEBAIGdldGhvc3RpZCAodm9pZCkKKyAJcmV0dXJuIGlkOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICAvKiBHZXR0aW5nIGZyb20gdGhlIGZpbGUgd2FzIG5vdCBzdWNjZXNzZnVsLiAgQW4gaW50ZWxsaWdlbnQgZ3Vlc3MgZm9yCisgICAgICBhIHVuaXF1ZSBudW1iZXIgb2YgYSBob3N0IGlzIGl0cyBJUCBhZGRyZXNzLiAgUmV0dXJuIHRoaXMuICAqLworICAgaWYgKF9fZ2V0aG9zdG5hbWUgKGhvc3RuYW1lLCBNQVhIT1NUTkFNRUxFTikgPCAwIHx8IGhvc3RuYW1lWzBdID09ICdcMCcpCitAQCAtMTE1LDUgKzExNyw5IEBAIGdldGhvc3RpZCAodm9pZCkKKyAgIC8qIEZvciB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIG5vdCBleGFjdGx5IHRoZSBJUCBhZGRyZXNzIHdlIGRvIHNvbWUKKyAgICAgIGJpdCBmaWRkbGluZy4gICovCisgICByZXR1cm4gKGludDMyX3QpIChpbi5zX2FkZHIgPDwgMTYgfCBpbi5zX2FkZHIgPj4gMTYpOworKyNlbHNlCisrICAvKiBSZXR1cm4gYW4gYXJiaXRyYXJ5IHZhbHVlLiAgKi8KKysgIHJldHVybiAwOworKyNlbmRpZgorIH0KKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMKK2luZGV4IDUzYThiYmIuLmNiMTEwZDQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPHN5cy91aW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgYm9vbAorIHdyaXRldl9mb3JfZmF0YWwgKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBuaW92LCBzaXplX3QgdG90YWwpCitAQCAtNDAsNiArNDEsNyBAQCB3cml0ZXZfZm9yX2ZhdGFsIChpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgbmlvdiwgc2l6ZV90IHRvdGFsKQorIHN0YXRpYyB2b2lkCisgYmFja3RyYWNlX2FuZF9tYXBzIChpbnQgZG9fYWJvcnQsIGJvb2wgd3JpdHRlbiwgaW50IGZkKQorIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRQorICAgaWYgKGRvX2Fib3J0ID4gMSAmJiB3cml0dGVuKQorICAgICB7CisgICAgICAgdm9pZCAqYWRkcnNbNjRdOworQEAgLTYyLDYgKzY0LDcgQEAgYmFja3RyYWNlX2FuZF9tYXBzIChpbnQgZG9fYWJvcnQsIGJvb2wgd3JpdHRlbiwgaW50IGZkKQorICAgICAgICAgICBjbG9zZV9ub3RfY2FuY2VsX25vX3N0YXR1cyAoZmQyKTsKKyAgICAgICAgIH0KKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFICovCisgfQorICNkZWZpbmUgQkVGT1JFX0FCT1JUCQliYWNrdHJhY2VfYW5kX21hcHMKKyAKK2RpZmYgLS1naXQgYS90aW1lL01ha2VmaWxlIGIvdGltZS9NYWtlZmlsZQoraW5kZXggYTQxMWY2Mi4uMmQwMjJjYSAxMDA2NDQKKy0tLSBhL3RpbWUvTWFrZWZpbGUKKysrKyBiL3RpbWUvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIHRpbWUgcm91dGluZXMKKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSB0aW1lCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsMTUgKzMyLDIzIEBAIHJvdXRpbmVzIDo9IG9mZnRpbWUgYXNjdGltZSBjbG9jayBjdGltZSBjdGltZV9yIGRpZmZ0aW1lIFwKKyAJICAgIHR6ZmlsZSBnZXRpdGltZXIgc2V0aXRpbWVyCQkJIFwKKyAJICAgIHN0aW1lIGR5c2l6ZSB0aW1lZ20gZnRpbWUJCQkgXAorIAkgICAgZ2V0ZGF0ZSBzdHJwdGltZSBzdHJwdGltZV9sCQkJIFwKKy0JICAgIHN0cmZ0aW1lIHdjc2Z0aW1lIHN0cmZ0aW1lX2wgd2NzZnRpbWVfbAkgXAorKwkgICAgc3RyZnRpbWUgc3RyZnRpbWVfbAkJCQkgXAorIAkgICAgdGltZXNwZWNfZ2V0CistYXV4IDo9CSAgICBlcmEgYWx0X2RpZ2l0IGxjLXRpbWUtY2xlYW51cAorIAorLXRlc3RzCTo9IHRlc3RfdGltZSBjbG9ja3Rlc3QgdHN0LXBvc2l4dHogdHN0LXN0cnB0aW1lIHRzdF93Y3NmdGltZSBcCistCSAgIHRzdC1nZXRkYXRlIHRzdC1ta3RpbWUgdHN0LW1rdGltZTIgdHN0LWZ0aW1lX2wgdHN0LXN0cmZ0aW1lIFwKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSAgICAgICAgICAgICAgICBcCisrCSAgICA6PSB3Y3NmdGltZSB3Y3NmdGltZV9sCisrYXV4LSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gYWx0X2RpZ2l0IGVyYSBsYy10aW1lLWNsZWFudXAKKysKKyt0ZXN0cwk6PSB0ZXN0X3RpbWUgY2xvY2t0ZXN0IHRzdC1wb3NpeHR6IFwKKysJICAgdHN0LWdldGRhdGUgdHN0LW1rdGltZSB0c3QtbWt0aW1lMiB0c3Qtc3RyZnRpbWUgXAorIAkgICB0c3QtbWt0aW1lMyB0c3Qtc3RycHRpbWUyIGJ1Zy1hc2N0aW1lIGJ1Zy1hc2N0aW1lX3IgYnVnLW1rdGltZTEgXAorIAkgICB0c3Qtc3RycHRpbWUzIGJ1Zy1nZXRkYXRlMSB0c3Qtc3RycHRpbWUtd2hpdGVzcGFjZSB0c3QtZnRpbWUKKyAKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJICAgICAgICArPSB0c3Qtc3RycHRpbWUgdHN0LWZ0aW1lX2wKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSBcCisrCSAgICAgICAgKz0gdHN0X3djc2Z0aW1lCisrCisgaW5jbHVkZSAuLi9SdWxlcworIAorIHR6LWNmbGFncyA9IC1EVFpESVI9JyIkKHpvbmVkaXIpIicgXAorZGlmZiAtLWdpdCBhL3RpbWUvc3RyZnRpbWVfbC5jIGIvdGltZS9zdHJmdGltZV9sLmMKK2luZGV4IGI0OGVmMzQuLmJmZGQ2MTggMTAwNjQ0CistLS0gYS90aW1lL3N0cmZ0aW1lX2wuYworKysrIGIvdGltZS9zdHJmdGltZV9sLmMKK0BAIC0zNSw2ICszNSwxMCBAQAorICMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyAjZW5kaWYKKyAKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQgZW1hY3MgJiYgIWRlZmluZWQgSEFWRV9CQ09QWQorICMgZGVmaW5lIEhBVkVfTUVNQ1BZIDEKKyAjZW5kaWYKK0BAIC04ODIsNyArODg2LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCWNhc2UgTF8oJ0MnKToKKyAJICBpZiAobW9kaWZpZXIgPT0gTF8oJ0UnKSkKKyAJICAgIHsKKy0jaWYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisgCSAgICAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IF9ubF9nZXRfZXJhX2VudHJ5ICh0cCBIRUxQRVJfTE9DQUxFX0FSRyk7CisgCSAgICAgIGlmIChlcmEpCisgCQl7CitAQCAtOTU1LDcgKzk1OSw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAorIAkgIGlmIChtb2RpZmllciA9PSBMXygnTycpICYmIDAgPD0gbnVtYmVyX3ZhbHVlKQorIAkgICAgeworLSNpZmRlZiBfTkxfQ1VSUkVOVAorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIGRlZmluZWQgKF9OTF9DVVJSRU5UKQorIAkgICAgICAvKiBHZXQgdGhlIGxvY2FsZSBzcGVjaWZpYyBhbHRlcm5hdGUgcmVwcmVzZW50YXRpb24gb2YKKyAJCSB0aGUgbnVtYmVyIE5VTUJFUl9WQUxVRS4gIElmIG5vbmUgZXhpc3QgTlVMTCBpcyByZXR1cm5lZC4gICovCisgCSAgICAgIGNvbnN0IENIQVJfVCAqY3AgPSBubF9nZXRfYWx0X2RpZ2l0IChudW1iZXJfdmFsdWUKK0BAIC0xMjYwLDcgKzEyNjQsNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAJY2FzZSBMXygnWScpOgorIAkgIGlmIChtb2RpZmllciA9PSAnRScpCisgCSAgICB7CistI2lmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorIAkgICAgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBfbmxfZ2V0X2VyYV9lbnRyeSAodHAgSEVMUEVSX0xPQ0FMRV9BUkcpOworIAkgICAgICBpZiAoZXJhKQorIAkJeworQEAgLTEyODUsNyArMTI4OSw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAljYXNlIExfKCd5Jyk6CisgCSAgaWYgKG1vZGlmaWVyID09IExfKCdFJykpCisgCSAgICB7CistI2lmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorIAkgICAgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBfbmxfZ2V0X2VyYV9lbnRyeSAodHAgSEVMUEVSX0xPQ0FMRV9BUkcpOworIAkgICAgICBpZiAoZXJhKQorIAkJeworZGlmZiAtLWdpdCBhL3RpbWUvc3RycHRpbWVfbC5jIGIvdGltZS9zdHJwdGltZV9sLmMKK2luZGV4IDU2NDBjY2UuLjc4NGNjYmMgMTAwNjQ0CistLS0gYS90aW1lL3N0cnB0aW1lX2wuYworKysrIGIvdGltZS9zdHJwdGltZV9sLmMKK0BAIC0yOSw2ICsyOSw3IEBACisgCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUiAwCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyAjZW5kaWYKKyAKK0BAIC04NCw3ICs4NSw3IEBAIGxvY2FsdGltZV9yICh0LCB0cCkKKyAgICAgaWYgKHZhbCA8IGZyb20gfHwgdmFsID4gdG8pCQkJCQkJICAgICAgXAorICAgICAgIHJldHVybiBOVUxMOwkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorLSNpZmRlZiBfTkxfQ1VSUkVOVAorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIGRlZmluZWQgKF9OTF9DVVJSRU5UKQorICMgZGVmaW5lIGdldF9hbHRfbnVtYmVyKGZyb20sIHRvLCBuKSBcCisgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgIF9fbGFiZWxfXyBkb19ub3JtYWw7CQkJCQkJICAgICAgXAorQEAgLTI1Nyw4ICsyNTgsMTAgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorICAgaW50IGNudDsKKyAgIGludCBjbnRfbG9uZ2VzdDsKKyAgIHNpemVfdCB2YWw7CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBzaXplX3QgbnVtX2VyYXM7CisgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBOVUxMOworKyNlbmRpZgorICAgZW51bSBwdGltZV9sb2NhbGVfc3RhdHVzIHsgbm90LCBsb2MsIHJhdyB9IGRlY2lkZWRfbG9uZ2VzdDsKKyAgIHN0cnVjdCBfX3N0cnB0aW1lX3N0YXRlCisgICB7CitAQCAtODIwLDYgKzgyMyw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAJICAgICAgcy53YW50X3hkYXkgPSAxOworIAkgICAgICBicmVhazsKKyAJICAgIGNhc2UgJ0MnOgorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBpZiAocy5kZWNpZGVkICE9IHJhdykKKyAJCXsKKyAJCSAgaWYgKHMuZXJhX2NudCA+PSAwKQorQEAgLTg1NiwxMCArODYwLDEyIEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAKKyAJCSAgcy5kZWNpZGVkID0gcmF3OworIAkJfQorKyNlbmRpZgorIAkgICAgICAvKiBUaGUgQyBsb2NhbGUgaGFzIG5vIGVyYSBpbmZvcm1hdGlvbiwgc28gdXNlIHRoZQorIAkJIG5vcm1hbCByZXByZXNlbnRhdGlvbi4gICovCisgCSAgICAgIGdvdG8gbWF0Y2hfY2VudHVyeTsKKyAgCSAgICBjYXNlICd5JzoKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgaWYgKHMuZGVjaWRlZCAhPSByYXcpCisgCQl7CisgCQkgIGdldF9udW1iZXIoMCwgOTk5OSwgNCk7CitAQCAtOTE4LDkgKzkyNCwxMCBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCisgCQkgIHMuZGVjaWRlZCA9IHJhdzsKKyAJCX0KKy0KKysjZW5kaWYKKyAJICAgICAgZ290byBtYXRjaF95ZWFyX2luX2NlbnR1cnk7CisgCSAgICBjYXNlICdZJzoKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgaWYgKHMuZGVjaWRlZCAhPSByYXcpCisgCQl7CisgCQkgIG51bV9lcmFzID0gX05MX0NVUlJFTlRfV09SRCAoTENfVElNRSwKK0BAIC05NDgsNiArOTU1LDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAorIAkJICBzLmRlY2lkZWQgPSByYXc7CisgCQl9CisrI2VuZGlmCisgCSAgICAgIGdldF9udW1iZXIgKDAsIDk5OTksIDQpOworIAkgICAgICB0bS0+dG1feWVhciA9IHZhbCAtIDE5MDA7CisgCSAgICAgIHMud2FudF9jZW50dXJ5ID0gMDsKK0BAIC0xMTE4LDYgKzExMjYsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCXRtLT50bV95ZWFyID0gKHMuY2VudHVyeSAtIDE5KSAqIDEwMDsKKyAgICAgfQorIAorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKHMuZXJhX2NudCAhPSAtMSkKKyAgICAgeworICAgICAgIGVyYSA9IF9ubF9zZWxlY3RfZXJhX2VudHJ5IChzLmVyYV9jbnQgSEVMUEVSX0xPQ0FMRV9BUkcpOworQEAgLTExMzIsNiArMTE0MSw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAJdG0tPnRtX3llYXIgPSBlcmEtPnN0YXJ0X2RhdGVbMF07CisgICAgIH0KKyAgIGVsc2UKKysjZW5kaWYKKyAgICAgaWYgKHMud2FudF9lcmEpCisgICAgICAgeworIAkvKiBObyBlcmEgZm91bmQgYnV0IHdlIGhhdmUgc2VlbiBhbiBFIG1vZGlmaWVyLiAgUmVjdGlmeSBzb21lCitkaWZmIC0tZ2l0IGEvdGltZXpvbmUvTWFrZWZpbGUgYi90aW1lem9uZS9NYWtlZmlsZQoraW5kZXggODg2YjA2ZS4uZjkyMjY4NCAxMDA2NDQKKy0tLSBhL3RpbWV6b25lL01ha2VmaWxlCisrKysgYi90aW1lem9uZS9NYWtlZmlsZQorQEAgLTEyNyw3ICsxMjcsNyBAQCAkKHRlc3RkYXRhKS9YVCU6IHRlc3RkYXRhL1hUJQorIAorICQob2JqcGZ4KXR6c2VsZWN0OiB0enNlbGVjdC5rc2ggJChjb21tb24tb2JqcGZ4KWNvbmZpZy5tYWtlCisgCXNlZCAtZSAnc3wvYmluL2Jhc2h8L2Jpbi9zaHwnIFwKKy0JICAgIC1lICdzfFRaRElSPVtefV0qfFRaRElSPSQoem9uZWRpcil8JyBcCisrCSAgICAtZSAnL1RaRElSPS9zfFwkJChwd2QpfCQoem9uZWRpcil8JyBcCisgCSAgICAtZSAnL1RaVkVSU0lPTj0vc3xzZWVfTWFrZWZpbGV8IiQodmVyc2lvbikifCcgXAorIAkgICAgLWUgJy9QS0dWRVJTSU9OPS9zfD0uKnw9IiQoUEtHVkVSU0lPTikifCcgXAorIAkgICAgLWUgJy9SRVBPUlRfQlVHU19UTz0vc3w9Lip8PSIkKFJFUE9SVF9CVUdTX1RPKSJ8JyBcCitkaWZmIC0tZ2l0IGEvd2NzbWJzL01ha2VmaWxlIGIvd2NzbWJzL01ha2VmaWxlCitpbmRleCA0NGE0NDk0Li5kYjlmYzI0IDEwMDY0NAorLS0tIGEvd2NzbWJzL01ha2VmaWxlCisrKysgYi93Y3NtYnMvTWFrZWZpbGUKK0BAIC0xOCwxNSArMTgsMjEgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHdjc21icyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHdjc21icworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJOj0gd2NoYXIuaCBiaXRzL3djaGFyLmggYml0cy93Y2hhcjIuaCBiaXRzL3djaGFyLWxkYmwuaCB1Y2hhci5oCisgCistcm91dGluZXMgOj0gd2NzY2F0IHdjc2NociB3Y3NjbXAgd2NzY3B5IHdjc2NzcG4gd2NzZHVwIHdjc2xlbiB3Y3NuY2F0IFwKKysjIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBwcmludGZfZnAuYywgZXZlbiBpbiB0aGUgcGxhaW4gY2FzZTsgc2VlCisrIyBjb21tZW50cyB0aGVyZSBmb3IgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERS4KKytyb3V0aW5lcyAgOj0gd21lbWNweSB3bWVtc2V0Cisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkgIDo9IHdjc2NhdCB3Y3NjaHIgd2NzY21wIHdjc2NweSB3Y3Njc3BuIHdjc2R1cCB3Y3NsZW4gd2NzbmNhdCBcCisgCSAgICB3Y3NuY21wIHdjc25jcHkgd2NzcGJyayB3Y3NyY2hyIHdjc3NwbiB3Y3N0b2sgd2Nzc3RyIHdtZW1jaHIgXAorLQkgICAgd21lbWNtcCB3bWVtY3B5IHdtZW1tb3ZlIHdtZW1zZXQgd2NwY3B5IHdjcG5jcHkgd21lbXBjcHkgXAorKwkgICAgd21lbWNtcCB3bWVtbW92ZSB3Y3BjcHkgd2NwbmNweSB3bWVtcGNweSBcCisgCSAgICBidG93YyB3Y3RvYiBtYnNpbml0IFwKKyAJICAgIG1icmxlbiBtYnJ0b3djIHdjcnRvbWIgbWJzcnRvd2NzIHdjc3J0b21icyBcCisgCSAgICBtYnNucnRvd2NzIHdjc25ydG9tYnMgd2NzbmxlbiB3Y3NjaHJudWwgXAorQEAgLTM4LDE0ICs0NCwyMSBAQCByb3V0aW5lcyA6PSB3Y3NjYXQgd2NzY2hyIHdjc2NtcCB3Y3NjcHkgd2NzY3NwbiB3Y3NkdXAgd2NzbGVuIHdjc25jYXQgXAorIAkgICAgd2NzY29sbF9sIHdjc3hmcm1fbCBcCisgCSAgICB3Y3NjYXNlY21wIHdjc25jYXNlIHdjc2Nhc2VjbXBfbCB3Y3NuY2FzZV9sIFwKKyAJICAgIHdjc21ic2xvYWQgbWJzcnRvd2NzX2wgXAorLQkgICAgaXNvYzk5X3dzY2FuZiBpc29jOTlfdndzY2FuZiBpc29jOTlfZndzY2FuZiBpc29jOTlfdmZ3c2NhbmYgXAorIAkgICAgaXNvYzk5X3N3c2NhbmYgaXNvYzk5X3Zzd3NjYW5mIFwKKyAJICAgIG1icnRvYzE2IGMxNnJ0b21iCisgCistc3Ryb3AtdGVzdHMgOj0gIHdjc2NtcCB3Y3NuY21wIHdtZW1jbXAgd2NzbGVuIHdjc2NociB3Y3NyY2hyIHdjc2NweQorLXRlc3RzIDo9IHRzdC13Y3N0b2Ygd2NzbWJzLXRzdDEgdHN0LXdjc25sZW4gdHN0LWJ0b3djIHRzdC1tYnJ0b3djIFwKKy0JIHRzdC13Y3J0b21iIHRzdC13Y3BuY3B5IHRzdC1tYnNydG93Y3MgdHN0LXdjaGFyLWggdHN0LW1icnRvd2MyIFwKKy0JIHRzdC1jMTZjMzItMSB3Y3NhdGNsaWZmICQoYWRkcHJlZml4IHRlc3QtLCQoc3Ryb3AtdGVzdHMpKQorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkrPSBpc29jOTlfd3NjYW5mIGlzb2M5OV92d3NjYW5mIGlzb2M5OV9md3NjYW5mIGlzb2M5OV92ZndzY2FuZgorKworK3N0cm9wLXRlc3RzIDo9ICB3Y3NjbXAgd21lbWNtcCB3bWVtY21wIHdjc2xlbiB3Y3NjaHIgd2NzcmNociB3Y3NjcHkKKysKKyt0ZXN0cyA6PSB0c3Qtd2NoYXItaAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkrPSB0c3QtYnRvd2MgdHN0LW1icnRvd2MgdHN0LW1icnRvd2MyIHRzdC13Y3J0b21iIHRzdC1jMTZjMzItMQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJKz0gdHN0LXdjc3RvZiB3Y3NtYnMtdHN0MSB0c3Qtd2NzbmxlbiBcCisrCXRzdC13Y3BuY3B5IHRzdC1tYnNydG93Y3MgXAorKwl3Y3NhdGNsaWZmICQoYWRkcHJlZml4IHRlc3QtLCQoc3Ryb3AtdGVzdHMpKQorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS93Y3NtYnMvd2NzbWJzbG9hZC5jIGIvd2NzbWJzL3djc21ic2xvYWQuYworaW5kZXggNmJiNDliYy4uMmFiOWQwNyAxMDA2NDQKKy0tLSBhL3djc21icy93Y3NtYnNsb2FkLmMKKysrKyBiL3djc21icy93Y3NtYnNsb2FkLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisgI2luY2x1ZGUgPHdjc21ic2xvYWQuaD4KK0BAIC0xNDMsNiArMTQ0LDcgQEAgX193Y3NtYnNfZ2V0ZmN0IChjb25zdCBjaGFyICp0bywgY29uc3QgY2hhciAqZnJvbSwgc2l6ZV90ICpuc3RlcHNwKQorICAgfSkKKyAKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgLyogU29tZSBvZiB0aGUgZnVuY3Rpb25zIGhlcmUgbXVzdCBub3QgYmUgdXNlZCB3aGlsZSBzZXRsb2NhbGUgaXMgY2FsbGVkLiAgKi8KKyBfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfX2xpYmNfc2V0bG9jYWxlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKyAKK0BAIC0yMTEsNiArMjEzLDE3IEBAIF9fd2NzbWJzX2xvYWRfY29udiAoc3RydWN0IF9fbG9jYWxlX2RhdGEgKm5ld19jYXRlZ29yeSkKKyAKKyAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworIH0KKysjZWxzZQorK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19fd2NzbWJzX2xvYWRfY29udiAoc3RydWN0IF9fbG9jYWxlX2RhdGEgKm5ld19jYXRlZ29yeSkKKyt7CisrICAvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHdlIHNob3VsZCBuZXZlciByZWFjaAorKyAgICAgdGhpcyBwb2ludDogdGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5nZSBsb2NhbGVzLCBzbyBldmVyeSBsb2NhbGUKKysgICAgIHBhc3NlZCB0byBnZXRfZ2NvbnZfZmN0cyBzaG91bGQgYmUgX25sX0NfTENfQ1RZUEUuICAqLworKyAgYWJvcnQgKCk7CisrfQorKyNlbmRpZgorIAorIAorIC8qIENsb25lIHRoZSBjdXJyZW50IGNvbnZlcnNpb24gZnVuY3Rpb24gc2V0LiAgKi8KK2RpZmYgLS1naXQgYS93Y3R5cGUvTWFrZWZpbGUgYi93Y3R5cGUvTWFrZWZpbGUKK2luZGV4IGM1NmYwN2MuLjRlOGFmNDMgMTAwNjQ0CistLS0gYS93Y3R5cGUvTWFrZWZpbGUKKysrKyBiL3djdHlwZS9NYWtlZmlsZQorQEAgLTE4LDE0ICsxOCwyMCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igd2N0eXBlIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gd2N0eXBlCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJOj0gd2N0eXBlLmgKKy1yb3V0aW5lcwk6PSB3Y2Z1bmNzIHdjdHlwZSBpc3djdHlwZSB3Y3RyYW5zIHRvd2N0cmFucyBcCistCQkgICB3Y2Z1bmNzX2wgd2N0eXBlX2wgaXN3Y3R5cGVfbCB3Y3RyYW5zX2wgdG93Y3RyYW5zX2wKKy0KKy10ZXN0cwk6PSB0ZXN0X3djdHlwZSB0ZXN0X3djZnVuY3MgYnVnLXdjdHlwZWgKKytyb3V0aW5lcyAJOj0gd2N0cmFucyB0b3djdHJhbnMgdG93Y3RyYW5zX2wKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCQk6PSB3Y2Z1bmNzIHdjdHlwZSBpc3djdHlwZSBcCisrCQkgICB3Y2Z1bmNzX2wgd2N0eXBlX2wgaXN3Y3R5cGVfbCB3Y3RyYW5zX2wKKysKKyt0ZXN0cwk6PQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysgICAgICs9IHRlc3Rfd2N0eXBlIHRlc3Rfd2NmdW5jcyBidWctd2N0eXBlaAorIAorIGluY2x1ZGUgLi4vUnVsZXMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1OWNjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2gKQEAgLTAsMCArMSwxMjMgQEAKK0Zyb20gNTc3MzQxN2ZhOTFhMThjZDM5ZmIzNWM5OTA3ZDcyYWYwZWQ5ZWEzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjU3OjAxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMjddIGVnbGliYzogSW5zdGFsbCBQSUMgYXJjaGl2ZXMKKworRm9yd2FyZCBwb3J0IGZyb20gZWdsaWJjCisKKzIwMDgtMDItMDcgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogTWFrZXJ1bGVzIChpbnN0YWxsLWV4dHJhcywgaW5zdGFsbC1tYXApOiBOZXcgdmFyaWFibGVzLgorICAgICAgICAoaW5zdGFsbGVkLWxpYmNzKTogQWRkIGxpYmNfcGljLmEuCisgICAgICAgIChpbnN0YWxsLWxpYik6IEluY2x1ZGUgX3BpYy5hIGZpbGVzIGZvciB2ZXJzaW9uZWQgc2hhcmVkCisgICAgICAgIGxpYnJhcmllcy4KKyAgICAgICAgKGluc3RhbGwtbWFwLW5vc3ViZGlyLCBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcik6IEFkZCBydWxlcyBmb3IKKyAgICAgICAgaW5zdGFsbGluZyBleHRyYSBmaWxlcy4KKyAgICAgICAgKGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyKTogRGVwZW5kIG9uIGluc3RhbGwtbWFwLW5vc3ViZGlyIGFuZAorICAgICAgICBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpci4KKworMjAwOC0wNC0wMSAgTWF4aW0gS3V2eXJrb3YgIDxtYXhpbUBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogTWFrZXJ1bGVzIChpbnN0YWxsLWxpYik6IERvbid0IGluc3RhbGwgbGlicHRocmVhZF9waWMuYS4KKyAgICAgICAgKGluc3RhbGwtbWFwKTogRG9uJ3QgaW5zdGFsbCBsaWJwdGhyZWFkX3BpYy5tYXAuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZXJ1bGVzIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlcnVsZXMgYi9NYWtlcnVsZXMKK2luZGV4IDFkZDQxYWEuLjQxNzc4ZTEgMTAwNjQ0CistLS0gYS9NYWtlcnVsZXMKKysrKyBiL01ha2VydWxlcworQEAgLTcxMyw2ICs3MTMsOSBAQCBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorICQoY29tbW9uLW9ianBmeClsaWJjLnNvOiAkKGNvbW1vbi1vYmpwZngpbGliYy5tYXAKKyBlbmRpZgorIGNvbW1vbi1nZW5lcmF0ZWQgKz0gbGliYy5zbyBsaWJjX3BpYy5vcworK2lmbmRlZiBzdWJkaXIKKytpbnN0YWxsLWV4dHJhcyA6PSBzb2luaXQubyBzb2ZpbmkubworK2VuZGlmCisgaWZkZWYgbGliYy5zby12ZXJzaW9uCisgJChjb21tb24tb2JqcGZ4KWxpYmMuc28kKGxpYmMuc28tdmVyc2lvbik6ICQoY29tbW9uLW9ianBmeClsaWJjLnNvCisgCSQobWFrZS1saW5rKQorQEAgLTk1NSw2ICs5NTgsNyBAQCBlbmRpZgorIAorIGluc3RhbGw6IGNoZWNrLWluc3RhbGwtc3VwcG9ydGVkCisgCisraW5zdGFsbGVkLWxpYmNzIDo9ICQoaW5zdGFsbGVkLWxpYmNzKSAkKGluc3RfbGliZGlyKS9saWJjX3BpYy5hCisgaW5zdGFsbDogJChpbnN0YWxsZWQtbGliY3MpCisgJChpbnN0YWxsZWQtbGliY3MpOiAkKGluc3RfbGliZGlyKS9saWIkKGxpYnByZWZpeCklOiBsaWIgJCgrZm9yY2UpCisgCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorQEAgLTk4Myw2ICs5ODcsMjIgQEAgdmVyc2lvbmVkIDo9ICQoc3RyaXAgJChmb3JlYWNoIHNvLCQoaW5zdGFsbC1saWIuc28pLFwKKyBpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQgOj0gJChmaWx0ZXIgJCh2ZXJzaW9uZWQpLCAkKGluc3RhbGwtbGliLnNvKSkKKyBpbnN0YWxsLWxpYi5zby11bnZlcnNpb25lZCA6PSAkKGZpbHRlci1vdXQgJCh2ZXJzaW9uZWQpLCAkKGluc3RhbGwtbGliLnNvKSkKKyAKKysjIEluc3RhbGwgdGhlIF9waWMuYSBmaWxlcyBmb3IgdmVyc2lvbmVkIGxpYnJhcmllcywgYW5kIGNvcnJlc3BvbmRpbmcKKysjIC5tYXAgZmlsZXMuCisrIyBsaWJwdGhyZWFkX3BpYy5hIGJyZWFrcyBta2xpYnMsIHNvIGRvbid0IGluc3RhbGwgaXQgYW5kIGl0cyBtYXAuCisraW5zdGFsbC1saWIgOj0gJChpbnN0YWxsLWxpYikgJChpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQ6JS5zbz0lX3BpYy5hKQorK2luc3RhbGwtbGliIDo9ICQoZmlsdGVyLW91dCBsaWJwdGhyZWFkX3BpYy5hLCQoaW5zdGFsbC1saWIpKQorKyMgRGVzcGl0ZSBoYXZpbmcgYSBzb25hbWUgbGliaHVyZHVzZXIgYW5kIGxpYm1hY2h1c2VyIGRvIG5vdCB1c2Ugc3ltYm9sCisrIyB2ZXJzaW9uaW5nLCBzbyBkb24ndCBpbnN0YWxsIHRoZSBjb3JyZXNwb25kaW5nIC5tYXAgZmlsZXMuCisraWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKytpbnN0YWxsLW1hcCA6PSAkKHBhdHN1YnN0ICUuc28sJS5tYXAsXAorKwkJCSQoZm9yZWFjaCBMLCQoaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkKSwkKG5vdGRpciAkTCkpKQorK2luc3RhbGwtbWFwIDo9ICQoZmlsdGVyLW91dCBsaWJodXJkdXNlci5tYXAgbGlibWFjaHVzZXIubWFwIGxpYnB0aHJlYWQubWFwLCQoaW5zdGFsbC1tYXApKQorK2lmbmRlZiBzdWJkaXIKKytpbnN0YWxsLW1hcCA6PSAkKGluc3RhbGwtbWFwKSBsaWJjLm1hcAorK2VuZGlmCisrZW5kaWYKKysKKyAjIEZvciB2ZXJzaW9uZWQgbGlicmFyaWVzLCB3ZSBpbnN0YWxsIHRocmVlIGZpbGVzOgorICMJJChpbnN0X2xpYmRpcikvbGliZm9vLnNvCS0tIGZvciBsaW5raW5nLCBzeW1saW5rIG9yIGxkIHNjcmlwdAorICMJJChpbnN0X3NsaWJkaXIpL2xpYmZvby5zby5OTgktLSBmb3IgbG9hZGluZyBieSBTT05BTUUsIHN5bWxpbmsKK0BAIC0xMjI1LDkgKzEyNDUsMjIgQEAgJChhZGRwcmVmaXggJChpbnN0X2luY2x1ZGVkaXIpLywkKGhlYWRlcnMtbm9uaCkpOiAkKGluc3RfaW5jbHVkZWRpcikvJTogXAorIGVuZGlmCSMgaGVhZGVycy1ub25oCisgZW5kaWYJIyBoZWFkZXJzCisgCisraWZkZWYgaW5zdGFsbC1tYXAKKyskKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS8sJChwYXRzdWJzdCBsaWIlLm1hcCxsaWIlX3BpYy5tYXAsJChpbnN0YWxsLW1hcCkpKTogXAorKyAgJChpbnN0X2xpYmRpcikvbGliJV9waWMubWFwOiAkKGNvbW1vbi1vYmpwZngpbGliJS5tYXAgJCgrZm9yY2UpCisrCSQoZG8taW5zdGFsbCkKKytlbmRpZgorKworK2lmZGVmIGluc3RhbGwtZXh0cmFzCisrJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvbGliY19waWMvLCQoaW5zdGFsbC1leHRyYXMpKTogXAorKyAgJChpbnN0X2xpYmRpcikvbGliY19waWMvJS5vOiAkKGVsZi1vYmpwZngpJS5vcyAkKCtmb3JjZSkKKysJJChkby1pbnN0YWxsKQorK2VuZGlmCisrCisgLlBIT05ZOiBpbnN0YWxsLWJpbi1ub3N1YmRpciBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXIgXAorIAlpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyIGluc3RhbGwtc2Jpbi1ub3N1YmRpciBpbnN0YWxsLWxpYi1ub3N1YmRpciBcCistCWluc3RhbGwtZGF0YS1ub3N1YmRpciBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIKKysJaW5zdGFsbC1kYXRhLW5vc3ViZGlyIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpciBpbnN0YWxsLW1hcC1ub3N1YmRpciBcCisrCWluc3RhbGwtZXh0cmFzLW5vc3ViZGlyCisgaW5zdGFsbC1iaW4tbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9iaW5kaXIpLywkKGluc3RhbGwtYmluKSkKKyBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9iaW5kaXIpLywkKGluc3RhbGwtYmluLXNjcmlwdCkpCisgaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpcjogXAorQEAgLTEyNDAsNiArMTI3MywxMCBAQCBpbnN0YWxsLWRhdGEtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9kYXRhZGlyKS8sJChpbnN0YWxsLWRhdGEpKQorIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2luY2x1ZGVkaXIpLywkKGhlYWRlcnMpKQorIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyOiAkKGluc3RhbGwtb3RoZXJzKQorIGluc3RhbGwtb3RoZXJzLXByb2dyYW1zLW5vc3ViZGlyOiAkKGluc3RhbGwtb3RoZXJzLXByb2dyYW1zKQorK2luc3RhbGwtbWFwLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS8sXAorKwkJICAgICAgICQocGF0c3Vic3QgbGliJS5tYXAsbGliJV9waWMubWFwLCQoaW5zdGFsbC1tYXApKSkKKytpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvbGliY19waWMvLFwKKysJCSAgICAgICAkKGluc3RhbGwtZXh0cmFzKSkKKyAKKyAjIFdlIG5lZWQgYWxsIHRoZSBgLW5vc3ViZGlyJyB0YXJnZXRzIHNvIHRoYXQgYGluc3RhbGwnIGluIHRoZSBwYXJlbnQKKyAjIGRvZXNuJ3QgZGVwZW5kIG9uIHNldmVyYWwgdGhpbmdzIHdoaWNoIGVhY2ggaXRlcmF0ZSBvdmVyIHRoZSBzdWJkaXJzLgorQEAgLTEyNDksNyArMTI4Niw4IEBAIGluc3RhbGwtJTo6IGluc3RhbGwtJS1ub3N1YmRpciA7CisgCisgLlBIT05ZOiBpbnN0YWxsIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyCisgaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXI6IGluc3RhbGwtaGVhZGVycy1ub3N1YmRpciBpbnN0YWxsLWRhdGEtbm9zdWJkaXIgXAorLQkJCSAgICBpbnN0YWxsLWxpYi1ub3N1YmRpciBpbnN0YWxsLW90aGVycy1ub3N1YmRpcgorKwkJCSAgICBpbnN0YWxsLWxpYi1ub3N1YmRpciBpbnN0YWxsLW90aGVycy1ub3N1YmRpciBcCisrCQkJICAgIGluc3RhbGwtbWFwLW5vc3ViZGlyIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyCisgaWZlcSAoJChidWlsZC1wcm9ncmFtcykseWVzKQorIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyOiBpbnN0YWxsLWJpbi1ub3N1YmRpciBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXIgXAorIAkJCSAgICBpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyIGluc3RhbGwtc2Jpbi1ub3N1YmRpciBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MTFkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoCkBAIC0wLDAgKzEsNTU2IEBACitGcm9tIGJhMDY5YjMxMDdmNWFkMjAwYzRhYjk1ZTY5Y2YzNjhlMjM1M2IwMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0Njo1MCArMDAwMAorU3ViamVjdDogW1BBVENIIDI2LzI3XSBlZ2xpYmM6IGRsX2RlYnVnX21hc2sgaXMgY29udHJvbGxlZCBieQorIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisKK3VzZSBHTFJPX2RsX2RlYnVnX21hc2sKKworU2luZ2VkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjc3UvbGliYy1zdGFydC5jICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1jYWNoZS5jICAgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWNsb3NlLmMgICAgICAgICB8ICA2ICsrKy0tLQorIGVsZi9kbC1jb25mbGljdC5jICAgICAgfCAgMiArLQorIGVsZi9kbC1kZXBzLmMgICAgICAgICAgfCAgNiArKystLS0KKyBlbGYvZGwtZXJyb3IuYyAgICAgICAgIHwgIDIgKy0KKyBlbGYvZGwtZmluaS5jICAgICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1pbml0LmMgICAgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWxvYWQuYyAgICAgICAgICB8IDE2ICsrKysrKysrLS0tLS0tLS0KKyBlbGYvZGwtbG9va3VwLmMgICAgICAgIHwgMTQgKysrKysrKy0tLS0tLS0KKyBlbGYvZGwtb2JqZWN0LmMgICAgICAgIHwgIDIgKy0KKyBlbGYvZGwtb3Blbi5jICAgICAgICAgIHwgMTAgKysrKystLS0tLQorIGVsZi9kbC1yZWxvYy5jICAgICAgICAgfCAgMiArLQorIGVsZi9kbC12ZXJzaW9uLmMgICAgICAgfCAgMiArLQorIGVsZi9nZXQtZHluYW1pYy1pbmZvLmggfCAgMiArLQorIGVsZi9ydGxkLmMgICAgICAgICAgICAgfCAyMiArKysrKysrKysrKy0tLS0tLS0tLS0tCisgMTYgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jc3UvbGliYy1zdGFydC5jIGIvY3N1L2xpYmMtc3RhcnQuYworaW5kZXggMGFmYTdjMC4uMjE1MWZiNiAxMDA2NDQKKy0tLSBhL2NzdS9saWJjLXN0YXJ0LmMKKysrKyBiL2NzdS9saWJjLXN0YXJ0LmMKK0BAIC0yMzgsNyArMjM4LDcgQEAgTElCQ19TVEFSVF9NQUlOIChpbnQgKCptYWluKSAoaW50LCBjaGFyICoqLCBjaGFyICoqIE1BSU5fQVVYVkVDX0RFQ0wpLAorIAorICAgLyogQ2FsbCB0aGUgaW5pdGlhbGl6ZXIgb2YgdGhlIHByb2dyYW0sIGlmIGFueS4gICovCisgI2lmZGVmIFNIQVJFRAorLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUywgMCkpCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMsIDApKQorICAgICBHTFJPKGRsX2RlYnVnX3ByaW50ZikgKCJcbmluaXRpYWxpemUgcHJvZ3JhbTogJXNcblxuIiwgYXJndlswXSk7CisgI2VuZGlmCisgICBpZiAoaW5pdCkKK0BAIC0yNjEsNyArMjYxLDcgQEAgTElCQ19TVEFSVF9NQUlOIChpbnQgKCptYWluKSAoaW50LCBjaGFyICoqLCBjaGFyICoqIE1BSU5fQVVYVkVDX0RFQ0wpLAorICNlbmRpZgorIAorICNpZmRlZiBTSEFSRUQKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTKSkKKyAgICAgR0xSTyhkbF9kZWJ1Z19wcmludGYpICgiXG50cmFuc2ZlcnJpbmcgY29udHJvbDogJXNcblxuIiwgYXJndlswXSk7CisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNhY2hlLmMgYi9lbGYvZGwtY2FjaGUuYworaW5kZXggODYyZjFkOC4uZGFiOWM1MSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jYWNoZS5jCisrKysgYi9lbGYvZGwtY2FjaGUuYworQEAgLTE5NCw3ICsxOTQsNyBAQCBfZGxfbG9hZF9jYWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUpCisgICBjb25zdCBjaGFyICpiZXN0OworIAorICAgLyogUHJpbnQgYSBtZXNzYWdlIGlmIHRoZSBsb2FkaW5nIG9mIGxpYnMgaXMgdHJhY2VkLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgc2VhcmNoIGNhY2hlPSVzXG4iLCBMRF9TT19DQUNIRSk7CisgCisgICBpZiAoY2FjaGUgPT0gTlVMTCkKK0BAIC0yOTIsNyArMjkyLDcgQEAgX2RsX2xvYWRfY2FjaGVfbG9va3VwIChjb25zdCBjaGFyICpuYW1lKQorICAgICB9CisgCisgICAvKiBQcmludCBvdXIgcmVzdWx0IGlmIHdhbnRlZC4gICovCistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMsIDApCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUywgMCkKKyAgICAgICAmJiBiZXN0ICE9IE5VTEwpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgIHRyeWluZyBmaWxlPSVzXG4iLCBiZXN0KTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtY2xvc2UuYyBiL2VsZi9kbC1jbG9zZS5jCitpbmRleCBjODk3MjQ3Li5iMWI0YmQ1IDEwMDY0NAorLS0tIGEvZWxmL2RsLWNsb3NlLmMKKysrKyBiL2VsZi9kbC1jbG9zZS5jCitAQCAtMTI1LDcgKzEyNSw3IEBAIF9kbF9jbG9zZV93b3JrZXIgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBib29sIGZvcmNlKQorIAlkbF9jbG9zZV9zdGF0ZSA9IHJlcnVuOworIAorICAgICAgIC8qIFRoZXJlIGFyZSBzdGlsbCByZWZlcmVuY2VzIHRvIHRoaXMgb2JqZWN0LiAgRG8gbm90aGluZyBtb3JlLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5jbG9zaW5nIGZpbGU9JXM7IGRpcmVjdF9vcGVuY291bnQ9JXVcbiIsCisgCQkJICBtYXAtPmxfbmFtZSwgbWFwLT5sX2RpcmVjdF9vcGVuY291bnQpOworIAorQEAgLTI2OSw3ICsyNjksNyBAQCBfZGxfY2xvc2Vfd29ya2VyIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgYm9vbCBmb3JjZSkKKyAJICBpZiAoaW1hcC0+bF9pbml0X2NhbGxlZCkKKyAJICAgIHsKKyAJICAgICAgLyogV2hlbiBkZWJ1Z2dpbmcgcHJpbnQgYSBtZXNzYWdlIGZpcnN0LiAgKi8KKy0JICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUywKKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTLAorIAkJCQkgICAgMCkpCisgCQlfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIGZpbmk6ICVzIFslbHVdXG5cbiIsCisgCQkJCSAgaW1hcC0+bF9uYW1lLCBuc2lkKTsKK0BAIC03MTEsNyArNzExLDcgQEAgX2RsX2Nsb3NlX3dvcmtlciAoc3RydWN0IGxpbmtfbWFwICptYXAsIGJvb2wgZm9yY2UpCisgCSAgZnJlZSAoaW1hcC0+bF9yZWxkZXBzKTsKKyAKKyAJICAvKiBQcmludCBkZWJ1Z2dpbmcgbWVzc2FnZS4gICovCistCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmZpbGU9JXMgWyVsdV07ICBkZXN0cm95aW5nIGxpbmsgbWFwXG4iLAorIAkJCSAgICAgIGltYXAtPmxfbmFtZSwgaW1hcC0+bF9ucyk7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNvbmZsaWN0LmMgYi9lbGYvZGwtY29uZmxpY3QuYworaW5kZXggNDdhOTQ2ZS4uZTZhM2YyMSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jb25mbGljdC5jCisrKysgYi9lbGYvZGwtY29uZmxpY3QuYworQEAgLTMyLDcgKzMyLDcgQEAgX2RsX3Jlc29sdmVfY29uZmxpY3RzIChzdHJ1Y3QgbGlua19tYXAgKmwsIEVsZlcoUmVsYSkgKmNvbmZsaWN0LAorIAkJICAgICAgIEVsZlcoUmVsYSkgKmNvbmZsaWN0ZW5kKQorIHsKKyAjaWYgISBFTEZfTUFDSElORV9OT19SRUxBCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1JFTE9DKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19SRUxPQykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmNvbmZsaWN0IHByb2Nlc3Npbmc6ICVzXG4iLCBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSkpOworIAorICAgeworZGlmZiAtLWdpdCBhL2VsZi9kbC1kZXBzLmMgYi9lbGYvZGwtZGVwcy5jCitpbmRleCBlZWUxNDZhLi4xYTRiMDA0IDEwMDY0NAorLS0tIGEvZWxmL2RsLWRlcHMuYworKysrIGIvZWxmL2RsLWRlcHMuYworQEAgLTEyNyw3ICsxMjcsNyBAQCBlbXB0eSBkeW5hbWljIHN0cmluZyB0b2tlbiBzdWJzdGl0dXRpb24iKSk7CQkJCSAgICAgIFwKKyAJICAgIGVsc2UJCQkJCQkJICAgICAgXAorIAkgICAgICB7CQkJCQkJCQkgICAgICBcCisgCQkvKiBUaGlzIGlzIGZvciBEVF9BVVhJTElBUlkuICAqLwkJCSAgICAgIFwKKy0JCWlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpICAgXAorKwkJaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKSAgIFwKKyAJCSAgX2RsX2RlYnVnX3ByaW50ZiAoTl8oIlwKKyBjYW5ub3QgbG9hZCBhdXhpbGlhcnkgYCVzJyBiZWNhdXNlIG9mIGVtcHR5IGR5bmFtaWMgc3RyaW5nIHRva2VuICIJICAgICAgXAorIAkJCQkJICAgICJzdWJzdGl0dXRpb25cbiIpLCBfX3N0cik7CSAgICAgIFwKK0BAIC0zMDMsNyArMzAzLDcgQEAgX2RsX21hcF9vYmplY3RfZGVwcyAoc3RydWN0IGxpbmtfbWFwICptYXAsCisgCQlhcmdzLm5hbWUgPSBuYW1lOworIAorIAkJLyogU2F5IHRoYXQgd2UgYXJlIGFib3V0IHRvIGxvYWQgYW4gYXV4aWxpYXJ5IGxpYnJhcnkuICAqLworLQkJaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTLAorKwkJaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsCisgCQkJCSAgICAgIDApKQorIAkJICBfZGxfZGVidWdfcHJpbnRmICgibG9hZCBhdXhpbGlhcnkgb2JqZWN0PSVzIgorIAkJCQkgICAgIiByZXF1ZXN0ZWQgYnkgZmlsZT0lc1xuIiwKK0BAIC01MjAsNyArNTIwLDcgQEAgX2RsX21hcF9vYmplY3RfZGVwcyAoc3RydWN0IGxpbmtfbWFwICptYXAsCisgICAgICAgcnVucC0+bWFwLT5sX3Jlc2VydmVkID0gMDsKKyAgICAgfQorIAorLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LLCAwKSAhPSAwCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSywgMCkgIT0gMAorICAgICAgICYmIG1hcCA9PSBHTChkbF9ucylbTE1fSURfQkFTRV0uX25zX2xvYWRlZCkKKyAgICAgeworICAgICAgIC8qIElmIHdlIGFyZSB0byBjb21wdXRlIGNvbmZsaWN0cywgd2UgaGF2ZSB0byBidWlsZCBsb2NhbCBzY29wZQorZGlmZiAtLWdpdCBhL2VsZi9kbC1lcnJvci5jIGIvZWxmL2RsLWVycm9yLmMKK2luZGV4IDBmYzNmZDguLmVhODJmNGQgMTAwNjQ0CistLS0gYS9lbGYvZGwtZXJyb3IuYworKysrIGIvZWxmL2RsLWVycm9yLmMKK0BAIC0xMzksNyArMTM5LDcgQEAgaW50ZXJuYWxfZnVuY3Rpb24KKyBfZGxfc2lnbmFsX2NlcnJvciAoaW50IGVycmNvZGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsIGNvbnN0IGNoYXIgKm9jY2F0aW9uLAorIAkJICAgY29uc3QgY2hhciAqZXJyc3RyaW5nKQorIHsKKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrCisgCQkJJiB+KERMX0RFQlVHX1NUQVRJU1RJQ1N8RExfREVCVUdfUFJFTElOSyksIDApKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiJXM6IGVycm9yOiAlczogJXMgKCVzKVxuIiwgb2JqbmFtZSwgb2NjYXRpb24sCisgCQkgICAgICBlcnJzdHJpbmcsIHJlY2VpdmVyID8gImNvbnRpbnVlZCIgOiAiZmF0YWwiKTsKK2RpZmYgLS1naXQgYS9lbGYvZGwtZmluaS5jIGIvZWxmL2RsLWZpbmkuYworaW5kZXggNmNmZTY1MS4uZjU5ZjdmZSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1maW5pLmMKKysrKyBiL2VsZi9kbC1maW5pLmMKK0BAIC0yMzQsNyArMjM0LDcgQEAgX2RsX2ZpbmkgKHZvaWQpCisgCQkgIHx8IGwtPmxfaW5mb1tEVF9GSU5JXSAhPSBOVUxMKQorIAkJeworIAkJICAvKiBXaGVuIGRlYnVnZ2luZyBwcmludCBhIG1lc3NhZ2UgZmlyc3QuICAqLworLQkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKQorKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrCisgCQkJCQkmIERMX0RFQlVHX0lNUENBTExTLCAwKSkKKyAJCSAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIGZpbmk6ICVzIFslbHVdXG5cbiIsCisgCQkJCSAgICAgIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSwKK0BAIC0yODYsNyArMjg2LDcgQEAgX2RsX2ZpbmkgKHZvaWQpCisgICAgICAgZ290byBhZ2FpbjsKKyAgICAgfQorIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxucnVudGltZSBsaW5rZXIgc3RhdGlzdGljczpcbiIKKyAJCSAgICAgICIgICAgICAgICAgIGZpbmFsIG51bWJlciBvZiByZWxvY2F0aW9uczogJWx1XG4iCisgCQkgICAgICAiZmluYWwgbnVtYmVyIG9mIHJlbG9jYXRpb25zIGZyb20gY2FjaGU6ICVsdVxuIiwKK2RpZmYgLS1naXQgYS9lbGYvZGwtaW5pdC5jIGIvZWxmL2RsLWluaXQuYworaW5kZXggMmY4NTczMS4uZTQ2ZThiNiAxMDA2NDQKKy0tLSBhL2VsZi9kbC1pbml0LmMKKysrKyBiL2VsZi9kbC1pbml0LmMKK0BAIC00Niw3ICs0Niw3IEBAIGNhbGxfaW5pdCAoc3RydWN0IGxpbmtfbWFwICpsLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYpCisgICAgIHJldHVybjsKKyAKKyAgIC8qIFByaW50IGEgZGVidWcgbWVzc2FnZSBpZiB3YW50ZWQuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIGluaXQ6ICVzXG5cbiIsCisgCQkgICAgICBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSkpOworIAorQEAgLTk2LDcgKzk2LDcgQEAgX2RsX2luaXQgKHN0cnVjdCBsaW5rX21hcCAqbWFpbl9tYXAsIGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudikKKyAgICAgICBFbGZXKEFkZHIpICphZGRyczsKKyAgICAgICB1bnNpZ25lZCBpbnQgY250OworIAorLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgcHJlaW5pdDogJXNcblxuIiwKKyAJCQkgIERTT19GSUxFTkFNRSAobWFpbl9tYXAtPmxfbmFtZSkpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCBmNjY0ZjUwLi44YzI4NzQ0IDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTk0Myw3ICs5NDMsNyBAQCBfZGxfbWFwX29iamVjdF9mcm9tX2ZkIChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsIHN0cnVjdCBmaWxlYnVmICpmYnAsCisgICAgIH0KKyAKKyAgIC8qIFByaW50IGRlYnVnZ2luZyBtZXNzYWdlLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoImZpbGU9JXMgWyVsdV07ICBnZW5lcmF0aW5nIGxpbmsgbWFwXG4iLCBuYW1lLCBuc2lkKTsKKyAKKyAgIC8qIFRoaXMgaXMgdGhlIEVMRiBoZWFkZXIuICBXZSByZWFkIGl0IGluIGBvcGVuX3ZlcmlmeScuICAqLworQEAgLTEzNDcsNyArMTM0Nyw3IEBAIGNhbm5vdCBlbmFibGUgZXhlY3V0YWJsZSBzdGFjayBhcyBzaGFyZWQgb2JqZWN0IHJlcXVpcmVzIik7CisgCisgICBsLT5sX2VudHJ5ICs9IGwtPmxfYWRkcjsKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlwKKyAgIGR5bmFtaWM6IDB4JTAqbHggIGJhc2U6IDB4JTAqbHggICBzaXplOiAweCUwKlp4XG5cCisgICAgIGVudHJ5OiAweCUwKmx4ICBwaGRyOiAweCUwKmx4ICBwaG51bTogICAlKnVcblxuIiwKK0BAIC0xNzg5LDcgKzE3ODksNyBAQCBvcGVuX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgbW9kZSwKKyAKKyAgICAgICAvKiBJZiB3ZSBhcmUgZGVidWdnaW5nIHRoZSBzZWFyY2ggZm9yIGxpYnJhcmllcyBwcmludCB0aGUgcGF0aAorIAkgbm93IGlmIGl0IGhhc24ndCBoYXBwZW5lZCBub3cuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykKKyAJICAmJiBjdXJyZW50X3doYXQgIT0gdGhpc19kaXItPndoYXQpCisgCXsKKyAJICBjdXJyZW50X3doYXQgPSB0aGlzX2Rpci0+d2hhdDsKK0BAIC0xODEwLDcgKzE4MTAsNyBAQCBvcGVuX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgbW9kZSwKKyAJICAgICAtIGJ1Zik7CisgCisgCSAgLyogUHJpbnQgbmFtZSB3ZSB0cnkgaWYgdGhpcyBpcyB3YW50ZWQuICAqLworLQkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiAgdHJ5aW5nIGZpbGU9JXNcbiIsIGJ1Zik7CisgCisgCSAgZmQgPSBvcGVuX3ZlcmlmeSAoYnVmLCBmYnAsIGxvYWRlciwgd2hhdGNvZGUsIG1vZGUsCitAQCAtMTk1NSw3ICsxOTU1LDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorICAgICB9CisgCisgICAvKiBEaXNwbGF5IGluZm9ybWF0aW9uIGlmIHdlIGFyZSBkZWJ1Z2dpbmcuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykKKyAgICAgICAmJiBsb2FkZXIgIT0gTlVMTCkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoKG1vZGUgJiBfX1JUTERfQ0FMTE1BUCkgPT0gMAorIAkJICAgICAgPyAiXG5maWxlPSVzIFslbHVdOyAgbmVlZGVkIGJ5ICVzIFslbHVdXG4iCitAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorIAorICAgICAgIHNpemVfdCBuYW1lbGVuID0gc3RybGVuIChuYW1lKSArIDE7CisgCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJmaW5kIGxpYnJhcnk9JXMgWyVsdV07IHNlYXJjaGluZ1xuIiwgbmFtZSwgbnNpZCk7CisgCisgICAgICAgZmQgPSAtMTsKK0BAIC0yMTE5LDcgKzIxMTksNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgI2VuZGlmCisgCisgICAgICAgLyogQWRkIGFub3RoZXIgbmV3bGluZSB3aGVuIHdlIGFyZSB0cmFjaW5nIHRoZSBsaWJyYXJ5IGxvYWRpbmcuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG4iKTsKKyAgICAgfQorICAgZWxzZQorQEAgLTIxNTIsNyArMjE1Miw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChmZCA9PSAtMSkpCisgICAgIHsKKyAgICAgICBpZiAodHJhY2VfbW9kZQorLQkgICYmIF9fZ2xpYmNfbGlrZWx5ICgoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspID09IDApKQorKwkgICYmIF9fZ2xpYmNfbGlrZWx5ICgoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykgPT0gMCkpCisgCXsKKyAJICAvKiBXZSBoYXZlbid0IGZvdW5kIGFuIGFwcHJvcHJpYXRlIGxpYnJhcnkuICBCdXQgc2luY2Ugd2UKKyAJICAgICBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0aGlzIGlzbid0CitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvb2t1cC5jIGIvZWxmL2RsLWxvb2t1cC5jCitpbmRleCAxMWNiNDRiLi41ODhjM2U0IDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvb2t1cC5jCisrKysgYi9lbGYvZGwtbG9va3VwLmMKK0BAIC0zMDIsNyArMzAyLDcgQEAgZG9fbG9va3VwX3VuaXF1ZSAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgdWludF9mYXN0MzJfdCBuZXdfaGFzaCwKKyAJIGhhc2ggdGFibGUuICAqLworICAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5ICh0YWItPnNpemUpKQorIAl7CistCSAgYXNzZXJ0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSyk7CisrCSAgYXNzZXJ0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKTsKKyAJICBnb3RvIHN1Y2Nlc3M7CisgCX0KKyAjZW5kaWYKK0BAIC0zNzgsNyArMzc4LDcgQEAgZG9fbG9va3VwX3ggKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHVpbnRfZmFzdDMyX3QgbmV3X2hhc2gsCisgCWNvbnRpbnVlOworIAorICAgICAgIC8qIFByaW50IHNvbWUgZGVidWdnaW5nIGluZm8gaWYgd2FudGVkLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NZTUJPTFMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TWU1CT0xTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoInN5bWJvbD0lczsgIGxvb2t1cCBpbiBmaWxlPSVzIFslbHVdXG4iLAorIAkJCSAgdW5kZWZfbmFtZSwgRFNPX0ZJTEVOQU1FIChtYXAtPmxfbmFtZSksCisgCQkJICBtYXAtPmxfbnMpOworQEAgLTc1NSw3ICs3NTUsNyBAQCBhZGRfZGVwZW5kZW5jeSAoc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsIHN0cnVjdCBsaW5rX21hcCAqbWFwLCBpbnQgZmxhZ3MpCisgCX0KKyAKKyAgICAgICAvKiBEaXNwbGF5IGluZm9ybWF0aW9uIGlmIHdlIGFyZSBkZWJ1Z2dpbmcuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcCisgXG5maWxlPSVzIFslbHVdOyAgbmVlZGVkIGJ5ICVzIFslbHVdIChyZWxvY2F0aW9uIGRlcGVuZGVuY3kpXG5cbiIsCisgCQkJICBEU09fRklMRU5BTUUgKG1hcC0+bF9uYW1lKSwKK0BAIC04NTksNyArODU5LDcgQEAgX2RsX2xvb2t1cF9zeW1ib2xfeCAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgICAgIHsKKyAgICAgICBpZiAoKCpyZWYgPT0gTlVMTCB8fCBFTEZXKFNUX0JJTkQpICgoKnJlZiktPnN0X2luZm8pICE9IFNUQl9XRUFLKQorIAkgICYmIHNraXBfbWFwID09IE5VTEwKKy0JICAmJiAhKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpKQorKwkgICYmICEoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKSkKKyAJeworIAkgIC8qIFdlIGNvdWxkIGZpbmQgbm8gdmFsdWUgZm9yIGEgc3Ryb25nIHJlZmVyZW5jZS4gICovCisgCSAgY29uc3QgY2hhciAqcmVmZXJlbmNlX25hbWUgPSB1bmRlZl9tYXAgPyB1bmRlZl9tYXAtPmxfbmFtZSA6ICIiOworQEAgLTkzNSw3ICs5MzUsNyBAQCBfZGxfbG9va3VwX3N5bWJvbF94IChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChjdXJyZW50X3ZhbHVlLm0tPmxfdXNlZCA9PSAwKSkKKyAgICAgY3VycmVudF92YWx1ZS5tLT5sX3VzZWQgPSAxOworIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sKKyAJCQkmIChETF9ERUJVR19CSU5ESU5HU3xETF9ERUJVR19QUkVMSU5LKSkpCisgICAgIF9kbF9kZWJ1Z19iaW5kaW5ncyAodW5kZWZfbmFtZSwgdW5kZWZfbWFwLCByZWYsCisgCQkJJmN1cnJlbnRfdmFsdWUsIHZlcnNpb24sIHR5cGVfY2xhc3MsIHByb3RlY3RlZCk7CitAQCAtMTAwMCw3ICsxMDAwLDcgQEAgX2RsX2RlYnVnX2JpbmRpbmdzIChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyB7CisgICBjb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IHVuZGVmX21hcC0+bF9uYW1lOworIAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19CSU5ESU5HUykKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19CSU5ESU5HUykKKyAgICAgeworICAgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJiaW5kaW5nIGZpbGUgJXMgWyVsdV0gdG8gJXMgWyVsdV06ICVzIHN5bWJvbCBgJXMnIiwKKyAJCQlEU09fRklMRU5BTUUgKHJlZmVyZW5jZV9uYW1lKSwKK0BAIC0xMDE0LDcgKzEwMTQsNyBAQCBfZGxfZGVidWdfYmluZGluZ3MgKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorIAlfZGxfZGVidWdfcHJpbnRmX2MgKCJcbiIpOworICAgICB9CisgI2lmZGVmIFNIQVJFRAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspCisgICAgIHsKKyAgICAgICBpbnQgY29uZmxpY3QgPSAwOworICAgICAgIHN0cnVjdCBzeW1fdmFsIHZhbCA9IHsgTlVMTCwgTlVMTCB9OworZGlmZiAtLWdpdCBhL2VsZi9kbC1vYmplY3QuYyBiL2VsZi9kbC1vYmplY3QuYworaW5kZXggMWQ1OGJiYy4uOTM4YTI1NyAxMDA2NDQKKy0tLSBhL2VsZi9kbC1vYmplY3QuYworKysrIGIvZWxmL2RsLW9iamVjdC5jCitAQCAtOTgsNyArOTgsNyBAQCBfZGxfbmV3X29iamVjdCAoY2hhciAqcmVhbG5hbWUsIGNvbnN0IGNoYXIgKmxpYm5hbWUsIGludCB0eXBlLAorICAgbmV3LT5sX3R5cGUgPSB0eXBlOworICAgLyogSWYgd2Ugc2V0IHRoZSBiaXQgbm93IHNpbmNlIHdlIGtub3cgaXQgaXMgbmV2ZXIgdXNlZCB3ZSBhdm9pZAorICAgICAgZGlydHlpbmcgdGhlIGNhY2hlIGxpbmUgbGF0ZXIuICAqLworLSAgaWYgKChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKSA9PSAwKQorKyAgaWYgKChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpID09IDApCisgICAgIG5ldy0+bF91c2VkID0gMTsKKyAgIG5ldy0+bF9sb2FkZXIgPSBsb2FkZXI7CisgI2lmIE5PX1RMU19PRkZTRVQgIT0gMAorZGlmZiAtLWdpdCBhL2VsZi9kbC1vcGVuLmMgYi9lbGYvZGwtb3Blbi5jCitpbmRleCAyZGIxYzAyLi4xMjg4NjA0IDEwMDY0NAorLS0tIGEvZWxmL2RsLW9wZW4uYworKysrIGIvZWxmL2RsLW9wZW4uYworQEAgLTE0Nyw3ICsxNDcsNyBAQCBhZGRfdG9fZ2xvYmFsIChzdHJ1Y3QgbGlua19tYXAgKm5ldykKKyAJICBucy0+X25zX21haW5fc2VhcmNobGlzdC0+cl9saXN0W25ld19ubGlzdCsrXSA9IG1hcDsKKyAKKyAJICAvKiBXZSBtb2RpZnkgdGhlIGdsb2JhbCBzY29wZS4gIFJlcG9ydCB0aGlzLiAgKi8KKy0JICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgCSAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5hZGQgJXMgWyVsdV0gdG8gZ2xvYmFsIHNjb3BlXG4iLAorIAkJCSAgICAgIG1hcC0+bF9uYW1lLCBtYXAtPmxfbnMpOworIAl9CitAQCAtMjUxLDcgKzI1MSw3IEBAIGRsX29wZW5fd29ya2VyICh2b2lkICphKQorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKG5ldy0+bF9zZWFyY2hsaXN0LnJfbGlzdCAhPSBOVUxMKSkKKyAgICAgeworICAgICAgIC8qIExldCB0aGUgdXNlciBrbm93IGFib3V0IHRoZSBvcGVuY291bnQuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJvcGVuaW5nIGZpbGU9JXMgWyVsdV07IGRpcmVjdF9vcGVuY291bnQ9JXVcblxuIiwKKyAJCQkgIG5ldy0+bF9uYW1lLCBuZXctPmxfbnMsIG5ldy0+bF9kaXJlY3Rfb3BlbmNvdW50KTsKKyAKK0BAIC0zMDIsNyArMzAyLDcgQEAgZGxfb3Blbl93b3JrZXIgKHZvaWQgKmEpCisgICBMSUJDX1BST0JFIChtYXBfY29tcGxldGUsIDMsIGFyZ3MtPm5zaWQsIHIsIG5ldyk7CisgCisgICAvKiBQcmludCBzY29wZSBpbmZvcm1hdGlvbi4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAgICAgX2RsX3Nob3dfc2NvcGUgKG5ldywgMCk7CisgCisgICAvKiBPbmx5IGRvIGxhenkgcmVsb2NhdGlvbiBpZiBgTERfQklORF9OT1cnIGlzIG5vdCBzZXQuICAqLworQEAgLTUxOSw3ICs1MTksNyBAQCBkbF9vcGVuX3dvcmtlciAodm9pZCAqYSkKKyAJfQorIAorICAgICAgIC8qIFByaW50IHNjb3BlIGluZm9ybWF0aW9uLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgCV9kbF9zaG93X3Njb3BlIChpbWFwLCBmcm9tX3Njb3BlKTsKKyAgICAgfQorIAorQEAgLTU3Nyw3ICs1NzcsNyBAQCBUTFMgZ2VuZXJhdGlvbiBjb3VudGVyIHdyYXBwZWQhICBQbGVhc2UgcmVwb3J0IHRoaXMuIikpOworICNlbmRpZgorIAorICAgLyogTGV0IHRoZSB1c2VyIGtub3cgYWJvdXQgdGhlIG9wZW5jb3VudC4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJvcGVuaW5nIGZpbGU9JXMgWyVsdV07IGRpcmVjdF9vcGVuY291bnQ9JXVcblxuIiwKKyAJCSAgICAgIG5ldy0+bF9uYW1lLCBuZXctPmxfbnMsIG5ldy0+bF9kaXJlY3Rfb3BlbmNvdW50KTsKKyB9CitkaWZmIC0tZ2l0IGEvZWxmL2RsLXJlbG9jLmMgYi9lbGYvZGwtcmVsb2MuYworaW5kZXggNjEyNTJkNy4uNGM4MzgxNSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1yZWxvYy5jCisrKysgYi9lbGYvZGwtcmVsb2MuYworQEAgLTE3OCw3ICsxNzgsNyBAQCBfZGxfcmVsb2NhdGVfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmwsIHN0cnVjdCByX3Njb3BlX2VsZW0gKnNjb3BlW10sCisgICAgICAgJiYgX19idWlsdGluX2V4cGVjdCAobC0+bF9pbmZvW0RUX0JJTkRfTk9XXSAhPSBOVUxMLCAwKSkKKyAgICAgbGF6eSA9IDA7CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1JFTE9DKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19SRUxPQykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbnJlbG9jYXRpb24gcHJvY2Vzc2luZzogJXMlc1xuIiwKKyAJCSAgICAgIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSwgbGF6eSA/ICIgKGxhenkpIiA6ICIiKTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtdmVyc2lvbi5jIGIvZWxmL2RsLXZlcnNpb24uYworaW5kZXggZjZlNWNkOS4uMzIwNjI4YyAxMDA2NDQKKy0tLSBhL2VsZi9kbC12ZXJzaW9uLmMKKysrKyBiL2VsZi9kbC12ZXJzaW9uLmMKK0BAIC04Miw3ICs4Miw3IEBAIG1hdGNoX3N5bWJvbCAoY29uc3QgY2hhciAqbmFtZSwgTG1pZF90IG5zLCBFbGZXKFdvcmQpIGhhc2gsIGNvbnN0IGNoYXIgKnN0cmluZywKKyAgIGludCByZXN1bHQgPSAwOworIAorICAgLyogRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHdlIGFyZSBkb2luZyB3aGlsZSBkZWJ1Z2dpbmcuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19WRVJTSU9OUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVkVSU0lPTlMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXAorIGNoZWNraW5nIGZvciB2ZXJzaW9uIGAlcycgaW4gZmlsZSAlcyBbJWx1XSByZXF1aXJlZCBieSBmaWxlICVzIFslbHVdXG4iLAorIAkJICAgICAgc3RyaW5nLCBEU09fRklMRU5BTUUgKG1hcC0+bF9uYW1lKSwKK2RpZmYgLS1naXQgYS9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oIGIvZWxmL2dldC1keW5hbWljLWluZm8uaAoraW5kZXggZGM4MzU5ZC4uNzc3NGZkYSAxMDA2NDQKKy0tLSBhL2VsZi9nZXQtZHluYW1pYy1pbmZvLmgKKysrKyBiL2VsZi9nZXQtZHluYW1pYy1pbmZvLmgKK0BAIC0xNjYsNyArMTY2LDcgQEAgZWxmX2dldF9keW5hbWljX2luZm8gKHN0cnVjdCBsaW5rX21hcCAqbCwgRWxmVyhEeW4pICp0ZW1wKQorIAkgdGhlbS4gVGhlcmVmb3JlIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGFwcGxpY2F0aW9ucyB0aGUKKyAJIGJlc3Qgd2UgY2FuIGRvIGlzIGFkZCBhIHdhcm5pbmcgZHVyaW5nIGRlYnVnZ2luZyB3aXRoIHRoZQorIAkgaW50ZW50IG9mIG5vdGlmeWluZyB0aGUgdXNlciBvZiB0aGUgcHJvYmxlbS4gICovCistICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUywgMCkKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMsIDApCisgCSAgJiYgbC0+bF9mbGFnc18xICYgfkRUXzFfU1VQUE9SVEVEX01BU0spCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbldBUk5JTkc6IFVuc3VwcG9ydGVkIGZsYWcgdmFsdWUocykgb2YgMHgleCBpbiBEVF9GTEFHU18xLlxuIiwKKyAJCQkgIGwtPmxfZmxhZ3NfMSAmIH5EVF8xX1NVUFBPUlRFRF9NQVNLKTsKK2RpZmYgLS1naXQgYS9lbGYvcnRsZC5jIGIvZWxmL3J0bGQuYworaW5kZXggZmMzYTJkYi4uNTljNDYzNyAxMDA2NDQKKy0tLSBhL2VsZi9ydGxkLmMKKysrKyBiL2VsZi9ydGxkLmMKK0BAIC0zMjMsNyArMzIzLDcgQEAgX2RsX3N0YXJ0X2ZpbmFsICh2b2lkICphcmcsIHN0cnVjdCBkbF9zdGFydF9maW5hbF9pbmZvICppbmZvKQorICAgICB9CisgI2VuZGlmCisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorICAgICB7CisgI2lmbmRlZiBIUF9USU1JTkdfTk9OQVZBSUwKKyAgICAgICBwcmludF9zdGF0aXN0aWNzICgmcnRsZF90b3RhbF90aW1lKTsKK0BAIC0xNzAxLDcgKzE3MDEsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgCSBhZnRlciByZWxvY2F0aW9uLiAgKi8KKyAgICAgICBzdHJ1Y3QgbGlua19tYXAgKmw7CisgCistICAgICAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKQorKyAgICAgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKQorIAl7CisgCSAgc3RydWN0IHJfc2NvcGVfZWxlbSAqc2NvcGUgPSAmbWFpbl9tYXAtPmxfc2VhcmNobGlzdDsKKyAKK0BAIC0xNzMxLDcgKzE3MzEsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgCQlfZGxfcHJpbnRmICgiXG4iKTsKKyAJICAgIH0KKyAJfQorLSAgICAgIGVsc2UgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpCisrICAgICAgZWxzZSBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKQorIAl7CisgCSAgLyogTG9vayB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIG1haW4gZXhlY3V0YWJsZQorIAkgICAgIGFuZCBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlbSBpcyBub3QgYWN0dWFsbHkKK0BAIC0xODM5LDcgKzE4MzksNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgCQkgICAgfQorIAkJfQorIAorLQkgICAgICBpZiAoKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKQorKwkgICAgICBpZiAoKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspCisgCQkgICYmIHJ0bGRfbXVsdGlwbGVfcmVmKQorIAkJeworIAkJICAvKiBNYXJrIHRoZSBsaW5rIG1hcCBhcyBub3QgeWV0IHJlbG9jYXRlZCBhZ2Fpbi4gICovCitAQCAtMTk3Miw3ICsxOTcyLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorICAgICAgIGlmIChyX2xpc3QgPT0gcl9saXN0ZW5kICYmIGxpYmxpc3QgPT0gbGlibGlzdGVuZCkKKyAJcHJlbGlua2VkID0gdHJ1ZTsKKyAKKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxucHJlbGluayBjaGVja2luZzogJXNcbiIsCisgCQkJICBwcmVsaW5rZWQgPyAib2siIDogImZhaWxlZCIpOworICAgICB9CitAQCAtMTk5MCw3ICsxOTkwLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorICAgR0xSTyhkbF9pbml0X2FsbF9kaXJzKSA9IEdMKGRsX2FsbF9kaXJzKTsKKyAKKyAgIC8qIFByaW50IHNjb3BlIGluZm9ybWF0aW9uLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorICAgICB7CisgICAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuSW5pdGlhbCBvYmplY3Qgc2NvcGVzXG4iKTsKKyAKK0BAIC0yMjY1LDcgKzIyNjUsNyBAQCBwcm9jZXNzX2RsX2RlYnVnIChjb25zdCBjaGFyICpkbF9kZWJ1ZykKKyAJICAgIGlmIChkZWJvcHRzW2NudF0ubGVuID09IGxlbgorIAkJJiYgbWVtY21wIChkbF9kZWJ1ZywgZGVib3B0c1tjbnRdLm5hbWUsIGxlbikgPT0gMCkKKyAJICAgICAgeworLQkJR0xSTyhkbF9kZWJ1Z19tYXNrKSB8PSBkZWJvcHRzW2NudF0ubWFzazsKKysJCUdMUk9fZGxfZGVidWdfbWFzayB8PSBkZWJvcHRzW2NudF0ubWFzazsKKyAJCWFueV9kZWJ1ZyA9IDE7CisgCQlicmVhazsKKyAJICAgICAgfQorQEAgLTIyODYsNyArMjI4Niw3IEBAIHdhcm5pbmc6IGRlYnVnIG9wdGlvbiBgJXMnIHVua25vd247IHRyeSBMRF9ERUJVRz1oZWxwXG4iLCBjb3B5KTsKKyAgICAgICArK2RsX2RlYnVnOworICAgICB9CisgCistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpCisgICAgIHsKKyAgICAgICAvKiBJbiBvcmRlciB0byBnZXQgYW4gYWNjdXJhdGUgcGljdHVyZSBvZiB3aGV0aGVyIGEgcGFydGljdWxhcgorIAkgRFRfTkVFREVEIGVudHJ5IGlzIGFjdHVhbGx5IHVzZWQgd2UgaGF2ZSB0byBwcm9jZXNzIGJvdGgKK0BAIC0yMjk0LDcgKzIyOTQsNyBAQCB3YXJuaW5nOiBkZWJ1ZyBvcHRpb24gYCVzJyB1bmtub3duOyB0cnkgTERfREVCVUc9aGVscFxuIiwgY29weSk7CisgICAgICAgR0xSTyhkbF9sYXp5KSA9IDA7CisgICAgIH0KKyAKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSEVMUCkKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19IRUxQKQorICAgICB7CisgICAgICAgc2l6ZV90IGNudDsKKyAKK0BAIC0yNDk5LDcgKzI0OTksNyBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgICAgIG1vZGUgPSB0cmFjZTsKKyAJICAgICAgR0xSTyhkbF92ZXJib3NlKSA9IDE7CisgI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCistCSAgICAgIEdMUk8oZGxfZGVidWdfbWFzaykgfD0gRExfREVCVUdfUFJFTElOSzsKKysJICAgICAgR0xST19kbF9kZWJ1Z19tYXNrIHw9IERMX0RFQlVHX1BSRUxJTks7CisgI2VuZGlmCisgCSAgICAgIEdMUk8oZGxfdHJhY2VfcHJlbGluaykgPSAmZW52bGluZVsxN107CisgCSAgICB9CitAQCAtMjU0OCw3ICsyNTQ4LDcgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAl7CisgCSAgdW5zZXRlbnYgKCJNQUxMT0NfQ0hFQ0tfIik7CisgI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCistCSAgR0xSTyhkbF9kZWJ1Z19tYXNrKSA9IDA7CisrCSAgR0xST19kbF9kZWJ1Z19tYXNrID0gMDsKKyAjZW5kaWYKKyAJfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDYxNjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorRnJvbSBlOTg3NzlhYTU2ZmFlMDM0NmRmZjJkMGI3MmFjYWRkMGVhZjAxODkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjcgTWF5IDIwMTUgMTY6MTA6NTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8yN10gZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzOiBDb25kaXRpb25hbGx5IGV4Y2x1ZGUgYysrCisgdGVzdHMKKworICAgIFNvbWUgdGVzdCBwcm9ncmFtcyB3cml0dGVuIGluIGMrKyBhcmUgc3RpbGwgaW5jbHVkZWQgaW4gc3BpdGUgb2YKKyAgICAibGliYy1jeHgtdGVzdHMiIGJlaW5nIG9taXR0ZWQgZnJvbSBESVNUUk9fRkVBVFVSRVNfTElCQy4KKyAgICBBbGwgLmNjIHByb2dyYW1zIGFyZSBjb21waWxlZCB3aXRoIGcrKy4KKyAgICBnKysgYXV0b21hdGljYWxseSBzcGVjaWZpZXMgbGlua2luZyBhZ2FpbnN0IHRoZSBDKysgbGlicmFyeS4KKyAgICBUaGlzIHBhdGNoIGNvbmRpdGlvbmFsbHkgZXhjbHVkZXMgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcyB3ZWxsOgorCisgICAgICBidWctYXRleGl0My1saWIuY2MKKyAgICAgIHRzdC1jYW5jZWwyNC5jYworICAgICAgdHN0LWNhbmNlbDI0LXN0YXRpYy5jYworICAgICAgdHN0LXVuaXF1ZTNsaWIuY2MKKyAgICAgIHRzdC11bmlxdWUzbGliMi5jYworICAgICAgdHN0LXVuaXF1ZTRsaWIuY2MKKyAgICAgIHRzdC11bmlxdWUzLmNjCisgICAgICB0c3QtdW5pcXVlNC5jYworCisgICAgVGVzdGVkIHdpdGggRElTVFJPX0ZFQVRVUkVTX0xJQkNfcmVtb3ZlID0gIiBsaWJjLWN4eC10ZXN0cyIKKworICAgIFtZT0NUTyAjNzAwM10KKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBkbGZjbi9NYWtlZmlsZSB8ICA4ICsrKysrKy0tCisgZWxmL01ha2VmaWxlICAgfCAxOSArKysrKysrKysrKysrKy0tLS0tCisgbnB0bC9NYWtlZmlsZSAgfCAxMiArKysrKysrKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kbGZjbi9NYWtlZmlsZSBiL2RsZmNuL01ha2VmaWxlCitpbmRleCAzODI3NjA3Li45MjBiZDU4IDEwMDY0NAorLS0tIGEvZGxmY24vTWFrZWZpbGUKKysrKyBiL2RsZmNuL01ha2VmaWxlCitAQCAtMzksMTYgKzM5LDIwIEBAIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHMgPSBnbHJlZm1haW4gZmFpbHRlc3QgdHN0LWRsYWRkciBkZWZhdWx0IGVycm1zZzEgdHN0Y3hhYXRleGl0IFwKKyAJYnVnLWRsb3BlbjEgYnVnLWRsc3ltMSB0c3QtZGxpbmZvIGJ1Zy1hdGV4aXQxIGJ1Zy1hdGV4aXQyIFwKKyAJdHN0YXRleGl0IGJ1Zy1kbC1sZWFmIHRzdC1yZWMtZGxvcGVuCistZW5kaWYKKy0KKyB0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSBidWctYXRleGl0MworIAorK2VuZGlmCisrCisgbW9kdWxlcy1uYW1lcyA9IGdscmVmbGliMSBnbHJlZmxpYjIgZ2xyZWZsaWIzIGZhaWx0ZXN0bW9kIGRlZmF1bHRtb2QxIFwKKyAJCWRlZmF1bHRtb2QyIGVycm1zZzFtb2QgbW9kYXRleGl0IG1vZGN4YWF0ZXhpdCBcCisgCQlidWctZGxzeW0xLWxpYjEgYnVnLWRsc3ltMS1saWIyIGJ1Zy1hdGV4aXQxLWxpYiBcCisgCQlidWctYXRleGl0Mi1saWIgYnVnLWRsLWxlYWYtbGliIFwKKyAJCWJ1Zy1kbC1sZWFmLWxpYi1jYiBtb2RkdW1teTEgbW9kZHVtbXkyCisgCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyttb2R1bGVzLW5hbWVzICs9IGJ1Zy1hdGV4aXQzLWxpYgorK2VuZGlmCisrCisgZmFpbHRlc3Rtb2Quc28tbm8tei1kZWZzID0geWVzCisgZ2xyZWZsaWIyLnNvLW5vLXotZGVmcyA9IHllcworIGVycm1zZzFtb2Quc28tbm8tei1kZWZzID0geWVzCitkaWZmIC0tZ2l0IGEvZWxmL01ha2VmaWxlIGIvZWxmL01ha2VmaWxlCitpbmRleCA3MWExOGExLi4yNmZlM2M1IDEwMDY0NAorLS0tIGEvZWxmL01ha2VmaWxlCisrKysgYi9lbGYvTWFrZWZpbGUKK0BAIC0xNyw2ICsxNyw4IEBACisgCisgIyBNYWtlZmlsZSBmb3IgZWxmIHN1YmRpcmVjdG9yeSBvZiBHTlUgQyBMaWJyYXJ5LgorIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJCTo9IGVsZgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTE0NSwxMiArMTQ3LDE1IEBAIHRlc3RzICs9IGxvYWR0ZXN0IHJlc3Rlc3QxIHByZWxvYWR0ZXN0IGxvYWRmYWlsIG11bHRpbG9hZCBvcmlndGVzdCByZXNvbHZmYWlsIFwKKyAJIHVubG9hZDMgdW5sb2FkNCB1bmxvYWQ1IHVubG9hZDYgdW5sb2FkNyB1bmxvYWQ4IHRzdC1nbG9iYWwxIG9yZGVyMiBcCisgCSB0c3QtYXVkaXQxIHRzdC1hdWRpdDIgdHN0LWF1ZGl0OCB0c3QtYXVkaXQ5IFwKKyAJIHRzdC1zdGFja2d1YXJkMSB0c3QtYWRkcjEgdHN0LXRocmxvY2sgXAorLQkgdHN0LXVuaXF1ZTEgdHN0LXVuaXF1ZTIgJChpZiAkKENYWCksdHN0LXVuaXF1ZTMgdHN0LXVuaXF1ZTQgXAorLQkgdHN0LW5vZGVsZXRlKSBcCisrCSB0c3QtdW5pcXVlMSB0c3QtdW5pcXVlMiBcCisgCSB0c3QtaW5pdG9yZGVyIHRzdC1pbml0b3JkZXIyIHRzdC1yZWxzb3J0MSB0c3QtbnVsbC1hcmd2IFwKKyAJIHRzdC1wdHJndWFyZDEgdHN0LXRsc2FsaWduIHRzdC10bHNhbGlnbi1leHRlcm4gdHN0LW5vZGVsZXRlLW9wZW5lZCBcCisgCSB0c3Qtbm9kZWxldGUyCisgIwkgcmVsZGVwOQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrdGVzdHMgKz0gJChpZiAkKENYWCksdHN0LXVuaXF1ZTMgdHN0LXVuaXF1ZTQgdHN0LW5vZGVsZXRlKQorK2VuZGlmCisrCisgaWZlcSAoJChidWlsZC1oYXJkY29kZWQtcGF0aC1pbi10ZXN0cykseWVzKQorIHRlc3RzICs9IHRzdC1kbG9wZW4tYW91dAorIExERkxBR1MtdHN0LWRsb3Blbi1hb3V0ID0gJChuby1waWUtbGRmbGFnKQorQEAgLTIwOSw5ICsyMTQsNiBAQCBtb2R1bGVzLW5hbWVzID0gdGVzdG9iajEgdGVzdG9iajIgdGVzdG9iajMgdGVzdG9iajQgdGVzdG9iajUgdGVzdG9iajYgXAorIAkJdHN0LXVuaXF1ZTFtb2QxIHRzdC11bmlxdWUxbW9kMiBcCisgCQl0c3QtdW5pcXVlMm1vZDEgdHN0LXVuaXF1ZTJtb2QyIFwKKyAJCXRzdC1hdWRpdG1vZDlhIHRzdC1hdWRpdG1vZDliIFwKKy0JCSQoaWYgJChDWFgpLHRzdC11bmlxdWUzbGliIHRzdC11bmlxdWUzbGliMiB0c3QtdW5pcXVlNGxpYiBcCistCQkgIHRzdC1ub2RlbGV0ZS11bmlxdWVtb2QgdHN0LW5vZGVsZXRlLXJ0bGRtb2QgXAorLQkJICB0c3Qtbm9kZWxldGUtem1vZCkgXAorIAkJdHN0LWluaXRvcmRlcmExIHRzdC1pbml0b3JkZXJiMSBcCisgCQl0c3QtaW5pdG9yZGVyYTIgdHN0LWluaXRvcmRlcmIyIFwKKyAJCXRzdC1pbml0b3JkZXJhMyB0c3QtaW5pdG9yZGVyYTQgXAorQEAgLTIyMCw2ICsyMjIsMTMgQEAgbW9kdWxlcy1uYW1lcyA9IHRlc3RvYmoxIHRlc3RvYmoyIHRlc3RvYmozIHRlc3RvYmo0IHRlc3RvYmo1IHRlc3RvYmo2IFwKKyAJCXRzdC1yZWxzb3J0MW1vZDEgdHN0LXJlbHNvcnQxbW9kMiB0c3QtYXJyYXkyZGVwIFwKKyAJCXRzdC1hcnJheTVkZXAgdHN0LW51bGwtYXJndi1saWIgXAorIAkJdHN0LXRsc2FsaWduLWxpYiB0c3Qtbm9kZWxldGUtb3BlbmVkLWxpYiB0c3Qtbm9kZWxldGUybW9kCisrCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyttb2R1bGVzLW5hbWVzICs9ICQoaWYgJChDWFgpLHRzdC11bmlxdWUzbGliIHRzdC11bmlxdWUzbGliMiB0c3QtdW5pcXVlNGxpYiBcCisrCQkgIHRzdC1ub2RlbGV0ZS11bmlxdWVtb2QgdHN0LW5vZGVsZXRlLXJ0bGRtb2QgXAorKwkJICB0c3Qtbm9kZWxldGUtem1vZCkKKytlbmRpZgorKworIGlmZXEgKHllcywkKGhhdmUtcHJvdGVjdGVkLWRhdGEpKQorIG1vZHVsZXMtbmFtZXMgKz0gdHN0LXByb3RlY3RlZDFtb2RhIHRzdC1wcm90ZWN0ZWQxbW9kYgorIHRlc3RzICs9IHRzdC1wcm90ZWN0ZWQxYSB0c3QtcHJvdGVjdGVkMWIKK2RpZmYgLS1naXQgYS9ucHRsL01ha2VmaWxlIGIvbnB0bC9NYWtlZmlsZQoraW5kZXggNTk2Y2EzYy4uNTBhNzA4YiAxMDA2NDQKKy0tLSBhL25wdGwvTWFrZWZpbGUKKysrKyBiL25wdGwvTWFrZWZpbGUKK0BAIC0zOTAsMTIgKzM5MCwyMCBAQCBsaW5rLWxpYmMtc3RhdGljIDo9ICQoY29tbW9uLW9ianBmeClsaWJjLmEgJChzdGF0aWMtZ251bGliKSBcCisgCQkgICAgJChjb21tb24tb2JqcGZ4KWxpYmMuYQorIAorIHRlc3RzLXN0YXRpYyArPSB0c3QtbG9jYWxlMSB0c3QtbG9jYWxlMiB0c3Qtc3RhY2tndWFyZDEtc3RhdGljIFwKKy0JCXRzdC1jYW5jZWwyMS1zdGF0aWMgdHN0LWNhbmNlbDI0LXN0YXRpYyB0c3QtY29uZDgtc3RhdGljIFwKKysJCXRzdC1jYW5jZWwyMS1zdGF0aWMgdHN0LWNvbmQ4LXN0YXRpYyBcCisgCQl0c3QtbXV0ZXg4LXN0YXRpYyB0c3QtbXV0ZXhwaTgtc3RhdGljIHRzdC1zZW0xMS1zdGF0aWMgXAorIAkJdHN0LXNlbTEyLXN0YXRpYworLXRlc3RzICs9IHRzdC1zdGFja2d1YXJkMS1zdGF0aWMgdHN0LWNhbmNlbDIxLXN0YXRpYyB0c3QtY2FuY2VsMjQtc3RhdGljIFwKKysKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK3Rlc3RzLXN0YXRpYyArPSB0c3QtY2FuY2VsMjQtc3RhdGljCisrZW5kaWYKKysKKyt0ZXN0cyArPSB0c3Qtc3RhY2tndWFyZDEtc3RhdGljIHRzdC1jYW5jZWwyMS1zdGF0aWMgXAorIAkgdHN0LWNvbmQ4LXN0YXRpYyB0c3QtbXV0ZXg4LXN0YXRpYyB0c3QtbXV0ZXhwaTgtc3RhdGljIFwKKyAJIHRzdC1zZW0xMS1zdGF0aWMgdHN0LXNlbTEyLXN0YXRpYworKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IHRzdC1jYW5jZWwyNC1zdGF0aWMKKysKKyB4dGVzdHMtc3RhdGljICs9IHRzdC1zZXR1aWQxLXN0YXRpYworIAorICMgVGhlc2UgdGVzdHMgYXJlIGxpbmtlZCB3aXRoIGxpYmMgYmVmb3JlIGxpYnB0aHJlYWQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9ldGMvbGQuc28uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZXRjL2xkLnNvLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZXRjL2xkLnNvLmNvbmYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZ2VuZXJhdGUtc3VwcG9ydGVkLm1rIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMjhjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZ2VuZXJhdGUtc3VwcG9ydGVkLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9iaW4vbWFrZQorCitpbmNsdWRlICQoSU4pCisKK2FsbDoKKwlybSAtZiAkKE9VVCkKKwl0b3VjaCAkKE9VVCkKKwlmb3IgbG9jYWxlIGluICQoU1VQUE9SVEVELUxPQ0FMRVMpOyBkbyBcCisJCVsgJCRsb2NhbGUgPSB0cnVlIF0gJiYgY29udGludWU7IFwKKwkJZWNobyAkJGxvY2FsZSB8IHNlZCAncywvLCAsJyA+PiAkKE9VVCk7IFwKKwlkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL25zY2Qtbm8tYmFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvbnNjZC1uby1iYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMDZjZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL25zY2Qtbm8tYmFzaC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitEb24ndCB1c2UgYmFzaGlzbXMgKGV4Y2VwdCBmb3IgZWNobyAtbiwgd2hpY2ggYnVzeWJveCBzdXBwb3J0cykgdG8gYXZvaWQgbmVlZGluZyBiYXNoIHRvIHN0YXJ0IG5zY2QuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL25zY2QvbnNjZC5pbml0IGIvbnNjZC9uc2NkLmluaXQKK2luZGV4IGE4ODJkYTcuLmIwMjk4NmUgMTAwNjQ0CistLS0gYS9uc2NkL25zY2QuaW5pdAorKysrIGIvbnNjZC9uc2NkLmluaXQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgIworICMgbnNjZDoJCVN0YXJ0cyB0aGUgTmFtZSBTd2l0Y2ggQ2FjaGUgRGFlbW9uCisgIworQEAgLTQ5LDcgKzQ5LDcgQEAgcHJvZz1uc2NkCisgc3RhcnQgKCkgeworICAgICBbIC1kIC92YXIvcnVuL25zY2QgXSB8fCBta2RpciAvdmFyL3J1bi9uc2NkCisgICAgIFsgLWQgL3Zhci9kYi9uc2NkIF0gfHwgbWtkaXIgL3Zhci9kYi9uc2NkCistICAgIGVjaG8gLW4gJCJTdGFydGluZyAkcHJvZzogIgorKyAgICBlY2hvIC1uICJTdGFydGluZyAkcHJvZzogIgorICAgICBkYWVtb24gL3Vzci9zYmluL25zY2QKKyAgICAgUkVUVkFMPSQ/CisgICAgIGVjaG8KK0BAIC01OCw3ICs1OCw3IEBAIHN0YXJ0ICgpIHsKKyB9CisgCisgc3RvcCAoKSB7CistICAgIGVjaG8gLW4gJCJTdG9wcGluZyAkcHJvZzogIgorKyAgICBlY2hvIC1uICJTdG9wcGluZyAkcHJvZzogIgorICAgICAvdXNyL3NiaW4vbnNjZCAtSworICAgICBSRVRWQUw9JD8KKyAgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF07IHRoZW4KK0BAIC02Nyw5ICs2Nyw5IEBAIHN0b3AgKCkgeworIAkjIGEgbm9uLXByaXZpbGVnZWQgdXNlcgorIAlybSAtZiAvdmFyL3J1bi9uc2NkL25zY2QucGlkCisgCXJtIC1mIC92YXIvcnVuL25zY2Qvc29ja2V0CistICAgICAgIAlzdWNjZXNzICQiJHByb2cgc2h1dGRvd24iCisrCXN1Y2Nlc3MgIiRwcm9nIHNodXRkb3duIgorICAgICBlbHNlCistICAgICAgIAlmYWlsdXJlICQiJHByb2cgc2h1dGRvd24iCisrCWZhaWx1cmUgIiRwcm9nIHNodXRkb3duIgorICAgICBmaQorICAgICBlY2hvCisgICAgIHJldHVybiAkUkVUVkFMCitAQCAtMTAzLDEzICsxMDMsMTMgQEAgY2FzZSAiJDEiIGluCisgCVJFVFZBTD0kPworIAk7OworICAgICBmb3JjZS1yZWxvYWQgfCByZWxvYWQpCistICAgIAllY2hvIC1uICQiUmVsb2FkaW5nICRwcm9nOiAiCisrCWVjaG8gLW4gIlJlbG9hZGluZyAkcHJvZzogIgorIAlraWxscHJvYyAvdXNyL3NiaW4vbnNjZCAtSFVQCisgCVJFVFZBTD0kPworIAllY2hvCisgCTs7CisgICAgICopCistCWVjaG8gJCJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8cmVsb2FkfGNvbmRyZXN0YXJ0fSIKKysJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fHJlbG9hZHxjb25kcmVzdGFydH0iCisgCVJFVFZBTD0xCisgCTs7CisgZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjA0MjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjIuYmIKQEAgLTAsMCArMSwxMzYgQEAKK3JlcXVpcmUgZ2xpYmMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VTO21kNT1lOWE1NThlMjQzYjM2ZDMyMDlmMzgwZGViMzk0YjIxMyBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgKz0gImdwZXJmLW5hdGl2ZSBrY29uZmlnLWZyb250ZW5kcy1uYXRpdmUiCisKK1NSQ1JFViA/PSAiYTM0ZDFjNmFmYzg2NTIxZDZhZDE3NjYyYTNiNTM2MmQ4NDgxNTE0YyIKKworQlJBTkNIID89ICJyZWxlYXNlLyR7UFZ9L21hc3RlciIKKworR0xJQkNfR0lUX1VSSSA/PSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2dsaWJjLmdpdCIKKworU1JDX1VSSSA9ICIke0dMSUJDX0dJVF9VUkl9O2JyYW5jaD0ke0JSQU5DSH07bmFtZT1nbGliYyBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25zY2Qtbm8tYmFzaC5wYXRjaCBcCisiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgZmlsZTovL2V0Yy9sZC5zby5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyYXRlLXN1cHBvcnRlZC5tayBcCisiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCitCID0gIiR7V09SS0RJUn0vYnVpbGQtJHtUQVJHRVRfU1lTfSIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKKyMgdGhlIC1pc3lzdGVtIGluIGJpdGJha2UuY29uZiBzY3Jld3MgdXAgZ2xpYmMgZG9fc3RhZ2UKK0JVSUxEX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorVEFSR0VUX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSIKKworR0xJQkNfQlJPS0VOX0xPQ0FMRVMgPSAiIF9FUiBfRVQgc29fRVQgeW5fRVIgc2lkX0VUIHRyX1RSIG1uX01OIGdlel9FVCBnZXpfRVIgYm5fQkQgdGVfSU4gZXNfQ1IuSVNPLTg4NTktMSIKKworIworIyBXZSB3aWxsIHNraXAgcGFyc2luZyBnbGliYyB3aGVuIHRhcmdldCBzeXN0ZW0gQyBsaWJyYXJ5IHNlbGVjdGlvbiBpcyBub3QgZ2xpYmMKKyMgdGhpcyBoZWxwcyBpbiBlYXNpbmcgb3V0IHBhcnNpbmcgZm9yIG5vbi1nbGliYyBzeXN0ZW0gbGlicmFyaWVzCisjCitDT01QQVRJQkxFX0hPU1RfbGliYy1tdXNsX2NsYXNzLXRhcmdldCA9ICJudWxsIgorQ09NUEFUSUJMRV9IT1NUX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICJudWxsIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUta2VybmVsPSR7T0xERVNUX0tFUk5FTH0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1jdnMgLS1kaXNhYmxlLXByb2ZpbGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyAtLXdpdGhvdXQtZ2QgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNsb2NhbGU9Z251IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hZGQtb25zIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtaGVhZGVycz0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXNlbGludXggXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9ic29sZXRlLXJwYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWtjb25maWc9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAke0dMSUJDX0VYVFJBX09FQ09ORn0iCisKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2xpYmNfZnB1X3NldHRpbmcoYmIsIGQpfSIKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWluZXQtYW5sJywgJy0tZW5hYmxlLW5zY2QnLCAnLS1kaXNhYmxlLW5zY2QnLCBkKX0iCisKKworZG9fcGF0Y2hfYXBwZW5kKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZml4X3JlYWRsaWJfYycsIGQpCit9CisKK2RvX2ZpeF9yZWFkbGliX2MgKCkgeworCXNlZCAtaSAtZSAncyNPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMjJHtFR0xJQkNfS05PV05fSU5URVJQUkVURVJfTkFNRVN9IycgJHtTfS9lbGYvcmVhZGxpYi5jCit9CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisjIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhlIGF1dG9jb25mL2F1dG9tYWtlL2FjbG9jYWwvYXV0b2hlYWRlcgorIyBjYWxscyBmb3Igbm93CisjIGRvbid0IHBhc3MgQ1BQRkxBR1MgaW50byBjb25maWd1cmUsIHNpbmNlIGl0IHVwc2V0cyB0aGUga2VybmVsLWhlYWRlcnMKKyMgdmVyc2lvbiBjaGVjayBhbmQgZG9lc24ndCByZWFsbHkgaGVscCB3aXRoIGFueXRoaW5nCisgICAgICAgIChjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCisgICAgICAgIGZpbmQgJHtTfSAtbmFtZSAiY29uZmlndXJlIiB8IHhhcmdzIHRvdWNoCisgICAgICAgIENQUEZMQUdTPSIiIG9lX3J1bmNvbmYKK30KKworcnBjc3ZjID0gImJvb3RwYXJhbV9wcm90LnggbmxtX3Byb3QueCByc3RhdC54IFwKKwkgIHlwcGFzc3dkLngga2xtX3Byb3QueCByZXgueCBzbV9pbnRlci54IG1vdW50LnggXAorCSAgcnVzZXJzLnggc3ByYXkueCBuZnNfcHJvdC54IHJxdW90YS54IGtleV9wcm90LngiCisKK2RvX2NvbXBpbGUgKCkgeworCSMgLVdsLC1ycGF0aC1saW5rIDxzdGFnaW5nPi9saWIgaW4gTERGTEFHUyBjYW4gY2F1c2UgYnJlYWthZ2UgaWYgYW5vdGhlciBnbGliYyBpcyBpbiBzdGFnaW5nCisJdW5zZXQgTERGTEFHUworCWJhc2VfZG9fY29tcGlsZQorCSgKKwkJY2QgJHtTfS9zdW5ycGMvcnBjc3ZjCisJCWZvciByIGluICR7cnBjc3ZjfTsgZG8KKwkJCWg9YGVjaG8gJHJ8c2VkIC1lJ3MsXC54JCwuaCwnYAorCQkJcm0gLWYgJGgKKwkJCSR7Qn0vc3VucnBjL2Nyb3NzLXJwY2dlbiAtaCAkciAtbyAkaCB8fCBiYndhcm4gIiR7UE59OiB1bmFibGUgdG8gZ2VuZXJhdGUgaGVhZGVyIGZvciAkciIKKwkJZG9uZQorCSkKKwllY2hvICJBZGp1c3QgbGRkIHNjcmlwdCIKKwlpZiBbIC1uICIke1JUTERMSVNUfSIgXQorCXRoZW4KKwkJcHJldnJ0bGQ9YGNhdCAke0J9L2VsZi9sZGQgfCBncmVwICJeUlRMRExJU1Q9IiB8IHNlZCAncyNeUlRMRExJU1Q9Ilw/XChbXiJdKlwpIlw/JCNcMSMnYAorCQlpZiBbICIke3ByZXZydGxkfSIgIT0gIiR7UlRMRExJU1R9IiBdCisJCXRoZW4KKwkJCXNlZCAtaSAke0J9L2VsZi9sZGQgLWUgInMjXlJUTERMSVNUPS4qXCQjUlRMRExJU1Q9XCIke3ByZXZydGxkfSAke1JUTERMSVNUfVwiIyIKKwkJZmkKKwlmaQorCit9CisKK3JlcXVpcmUgZ2xpYmMtcGFja2FnZS5pbmMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvMzJhbmQ2NGJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS8zMmFuZDY0Yml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZmVhZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvMzJhbmQ2NGJpdC5wYXRjaApAQCAtMCwwICsxLDMzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgcnVuIHRoZSBsZGNvbmZpZyBpbiB0aGUgY3Jvc3MgZmFzaGlvbi4gbWFrZSB0aGUgY29kZSBiaXRzaXplIGF3YXJlIHNvIHRoYXQgCit3ZSBjYW4gY3Jvc3MgYnVpbGQgbGRjb25maWcgY2FjaGUgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4KKworUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IDIwMDkvMDUvMTkKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMDkvMDMvMjkKKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRlbGZsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCitAQCAtNDAsMzkgKzQwLDIxMiBAQCBkbwkJCQkJCQkJXAorIAorIC8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworIGludAorLXByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorIAkJICB1bnNpZ25lZCBpbnQgKm9zdmVyc2lvbiwgY2hhciAqKnNvbmFtZSwgdm9pZCAqZmlsZV9jb250ZW50cywKKyAJCSAgc2l6ZV90IGZpbGVfbGVuZ3RoKQorIHsKKyAgIGludCBpOworICAgdW5zaWduZWQgaW50IGo7CistICBFbGZXKEFkZHIpIGxvYWRhZGRyOworKyAgRWxmMzJfQWRkciBsb2FkYWRkcjsKKyAgIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CisgICBzaXplX3QgZHluYW1pY19zaXplOworICAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKyAKKy0gIEVsZlcoRWhkcikgKmVsZl9oZWFkZXI7CistICBFbGZXKFBoZHIpICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CistICBFbGZXKER5bikgKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKysgIEVsZjMyX0VoZHIgKmVsZl9oZWFkZXI7CisrICBFbGYzMl9QaGRyICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CisrICBFbGYzMl9EeW4gKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKyAgIGNoYXIgKmR5bmFtaWNfc3RyaW5nczsKKyAKKy0gIGVsZl9oZWFkZXIgPSAoRWxmVyhFaGRyKSAqKSBmaWxlX2NvbnRlbnRzOworKyAgZWxmX2hlYWRlciA9IChFbGYzMl9FaGRyICopIGZpbGVfY29udGVudHM7CisgICAqb3N2ZXJzaW9uID0gMDsKKyAKKy0gIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gIT0gRWxmVyAoQ0xBU1MpKQorKyAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisgICAgIHsKKy0gICAgICBpZiAob3B0X3ZlcmJvc2UpCisrICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKysJICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworKyAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisrCisrICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorKyAgICAgbGliYzUvbGliYzYuICAqLworKyAgKmZsYWcgPSBGTEFHX0VMRjsKKysKKysgIGxvYWRhZGRyID0gLTE7CisrICBkeW5hbWljX2FkZHIgPSAwOworKyAgZHluYW1pY19zaXplID0gMDsKKysgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworKyAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworKyAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgIHsKKysgICAgICBjaGVja19wdHIgKHNlZ21lbnQpOworKworKyAgICAgIHN3aXRjaCAoc2VnbWVudC0+cF90eXBlKQorIAl7CistCSAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorLQkgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIGEgMzIgYml0IEVMRiBmaWxlLlxuIiksIGZpbGVfbmFtZSk7CistCSAgZWxzZSBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCistCSAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgYSA2NCBiaXQgRUxGIGZpbGUuXG4iKSwgZmlsZV9uYW1lKTsKKy0JICBlbHNlCistCSAgICBlcnJvciAoMCwgMCwgXygiVW5rbm93biBFTEZDTEFTUyBpbiBmaWxlICVzLlxuIiksIGZpbGVfbmFtZSk7CisrCWNhc2UgUFRfTE9BRDoKKysJICBpZiAobG9hZGFkZHIgPT0gKEVsZjMyX0FkZHIpIC0xKQorKwkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfRFlOQU1JQzoKKysJICBpZiAoZHluYW1pY19hZGRyKQorKwkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisrCisrCSAgZHluYW1pY19hZGRyID0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgZHluYW1pY19zaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfSU5URVJQOgorKwkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICBjaGVja19wdHIgKHByb2dyYW1faW50ZXJwcmV0ZXIpOworKworKwkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworKwkgIGZvciAoaiA9IDA7IGogPCBzaXplb2YgKGludGVycHJldGVycykgLyBzaXplb2YgKGludGVycHJldGVycyBbMF0pOworKwkgICAgICAgKytqKQorKwkgICAgaWYgKHN0cmNtcCAocHJvZ3JhbV9pbnRlcnByZXRlciwgaW50ZXJwcmV0ZXJzW2pdLnNvbmFtZSkgPT0gMCkKKysJICAgICAgeworKwkJKmZsYWcgPSBpbnRlcnByZXRlcnNbal0uZmxhZzsKKysJCWJyZWFrOworKwkgICAgICB9CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfTk9URToKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorKwkgICAgeworKwkgICAgICBFbGYzMl9Xb3JkICphYmlfbm90ZSA9IChFbGYzMl9Xb3JkICopIChmaWxlX2NvbnRlbnRzCisrCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICAgICAgRWxmMzJfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCisrCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKysJCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJCSAgICAgfHwgbWVtY21wIChhYmlfbm90ZSArIDMsICJHTlUiLCA0KSAhPSAwKQorKwkJeworKyNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGYzMl9Xb3JkKSkgLSAxKSAmIC1zaXplb2YgKEVsZjMyX1dvcmQpKSkKKysJCSAgRWxmMzJfQWRkcikgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmMzJfV29yZCkpCisrCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCisrCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworKworKwkJICBpZiAoc2l6ZSAtIDMyIDwgbm90ZV9zaXplIHx8IG5vdGVfc2l6ZSA9PSAwKQorKwkJICAgIHsKKysJCSAgICAgIHNpemUgPSAwOworKwkJICAgICAgYnJlYWs7CisrCQkgICAgfQorKwkJICBzaXplIC09IG5vdGVfc2l6ZTsKKysJCSAgYWJpX25vdGUgPSAodm9pZCAqKSBhYmlfbm90ZSArIG5vdGVfc2l6ZTsKKysJCX0KKysKKysJICAgICAgaWYgKHNpemUgPT0gMCkKKysJCWJyZWFrOworKworKwkgICAgICAqb3N2ZXJzaW9uID0gKGFiaV9ub3RlIFs0XSA8PCAyNCkgfAorKwkJCSAgICgoYWJpX25vdGUgWzVdICYgMHhmZikgPDwgMTYpIHwKKysJCQkgICAoKGFiaV9ub3RlIFs2XSAmIDB4ZmYpIDw8IDgpIHwKKysJCQkgICAoYWJpX25vdGUgWzddICYgMHhmZik7CisrCSAgICB9CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgYnJlYWs7CisrCX0KKysKKysgICAgfQorKyAgaWYgKGxvYWRhZGRyID09IChFbGYzMl9BZGRyKSAtMSkKKysgICAgeworKyAgICAgIC8qIFZlcnkgc3RyYW5nZS4gKi8KKysgICAgICBsb2FkYWRkciA9IDA7CisrICAgIH0KKysKKysgIC8qIE5vdyB3ZSBjYW4gcmVhZCB0aGUgZHluYW1pYyBzZWN0aW9ucy4gICovCisrICBpZiAoZHluYW1pY19zaXplID09IDApCisrICAgIHJldHVybiAxOworKworKyAgZHluYW1pY19zZWdtZW50ID0gKEVsZjMyX0R5biAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisrICBjaGVja19wdHIgKGR5bmFtaWNfc2VnbWVudCk7CisrCisrICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworKyAgZHluYW1pY19zdHJpbmdzID0gTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICAgICAgICsrZHluX2VudHJ5KQorKyAgICB7CisrICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworKyAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysJeworKwkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsIC0gbG9hZGFkZHIpOworKwkgIGNoZWNrX3B0ciAoZHluYW1pY19zdHJpbmdzKTsKKysJICBicmVhazsKKyAJfQorLSAgICAgIHJldHVybiAxOworICAgICB9CisgCisrICBpZiAoZHluYW1pY19zdHJpbmdzID09IE5VTEwpCisrICAgIHJldHVybiAxOworKworKyAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgICAgICAgKytkeW5fZW50cnkpCisrICAgIHsKKysgICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQgfHwgZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCXsKKysJICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsOworKwkgIGNoZWNrX3B0ciAobmFtZSk7CisrCisrCSAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEKQorKwkgICAgeworKworKwkgICAgICBpZiAoKmZsYWcgPT0gRkxBR19FTEYpCisrCQl7CisrCQkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworKwkJICBmb3IgKGogPSAwOworKwkJICAgICAgIGogPCBzaXplb2YgKGtub3duX2xpYnMpIC8gc2l6ZW9mIChrbm93bl9saWJzIFswXSk7CisrCQkgICAgICAgKytqKQorKwkJICAgIGlmIChzdHJjbXAgKG5hbWUsIGtub3duX2xpYnMgW2pdLnNvbmFtZSkgPT0gMCkKKysJCSAgICAgIHsKKysJCQkqZmxhZyA9IGtub3duX2xpYnMgW2pdLmZsYWc7CisrCQkJYnJlYWs7CisrCQkgICAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgZWxzZSBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCSAgICAqc29uYW1lID0geHN0cmR1cCAobmFtZSk7CisrCisrCSAgLyogRG8gd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQ/ICAqLworKwkgIGlmICgqc29uYW1lICYmICpmbGFnICE9IEZMQUdfRUxGKQorKwkgICAgcmV0dXJuIDA7CisrCX0KKysgICAgfQorKworKyAgLyogV2UgcmVhY2ggdGhpcyBwb2ludCBvbmx5IGlmIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiBhIERUX1NPTkFNRQorKyAgICAgb3IgaWYgd2UgY2FuJ3QgY2xhc3NpZnkgdGhlIGxpYnJhcnkuICBJZiBpdCBkb2Vzbid0IGhhdmUgYQorKyAgICAgc29uYW1lLCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkuICAqLworKyAgaWYgKCpzb25hbWUgPT0gTlVMTCkKKysgICAgKnNvbmFtZSA9IHhzdHJkdXAgKGxpYik7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisraW50CisrcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorKwkJICB1bnNpZ25lZCBpbnQgKm9zdmVyc2lvbiwgY2hhciAqKnNvbmFtZSwgdm9pZCAqZmlsZV9jb250ZW50cywKKysJCSAgc2l6ZV90IGZpbGVfbGVuZ3RoKQorK3sKKysgIGludCBpOworKyAgdW5zaWduZWQgaW50IGo7CisrICBFbGY2NF9BZGRyIGxvYWRhZGRyOworKyAgdW5zaWduZWQgaW50IGR5bmFtaWNfYWRkcjsKKysgIHNpemVfdCBkeW5hbWljX3NpemU7CisrICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworKworKyAgRWxmNjRfRWhkciAqZWxmX2hlYWRlcjsKKysgIEVsZjY0X1BoZHIgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKysgIEVsZjY0X0R5biAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworKyAgY2hhciAqZHluYW1pY19zdHJpbmdzOworKworKyAgZWxmX2hlYWRlciA9IChFbGY2NF9FaGRyICopIGZpbGVfY29udGVudHM7CisrICAqb3N2ZXJzaW9uID0gMDsKKysKKyAgIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKK0BAIC04MSw3ICsyNTQsNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGZXKFBoZHIpICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtMTAwLDcgKzI3Myw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAgICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKyAJeworIAljYXNlIFBUX0xPQUQ6CistCSAgaWYgKGxvYWRhZGRyID09IChFbGZXKEFkZHIpKSAtMSkKKysJICBpZiAobG9hZGFkZHIgPT0gKEVsZjY0X0FkZHIpIC0xKQorIAkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisgCSAgYnJlYWs7CisgCitAQCAtMTI5LDE2ICszMDIsMTYgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAljYXNlIFBUX05PVEU6CisgCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKyAJICAgIHsKKy0JICAgICAgRWxmVyhXb3JkKSAqYWJpX25vdGUgPSAoRWxmVyhXb3JkKSAqKSAoZmlsZV9jb250ZW50cworKwkgICAgICBFbGY2NF9Xb3JkICphYmlfbm90ZSA9IChFbGY2NF9Xb3JkICopIChmaWxlX2NvbnRlbnRzCisgCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmVyhBZGRyKSBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgICAgIEVsZjY0X0FkZHIgc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworIAorIAkgICAgICB3aGlsZSAoYWJpX25vdGUgWzBdICE9IDQgfHwgYWJpX25vdGUgWzFdICE9IDE2CisgCQkgICAgIHx8IGFiaV9ub3RlIFsyXSAhPSAxCisgCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKyAJCXsKKy0jZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmVyhXb3JkKSkgLSAxKSAmIC1zaXplb2YgKEVsZlcoV29yZCkpKQorLQkJICBFbGZXKEFkZHIpIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZlcoV29yZCkpCisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjY0X1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGY2NF9Xb3JkKSkKKysJCSAgRWxmNjRfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGY2NF9Xb3JkKQorIAkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorIAkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKyAKK0BAIC0xNjYsNyArMzM5LDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAl9CisgCisgICAgIH0KKy0gIGlmIChsb2FkYWRkciA9PSAoRWxmVyhBZGRyKSkgLTEpCisrICBpZiAobG9hZGFkZHIgPT0gKEVsZjY0X0FkZHIpIC0xKQorICAgICB7CisgICAgICAgLyogVmVyeSBzdHJhbmdlLiAqLworICAgICAgIGxvYWRhZGRyID0gMDsKK0BAIC0xNzYsNyArMzQ5LDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgaWYgKGR5bmFtaWNfc2l6ZSA9PSAwKQorICAgICByZXR1cm4gMTsKKyAKKy0gIGR5bmFtaWNfc2VnbWVudCA9IChFbGZXKER5bikgKikgKGZpbGVfY29udGVudHMgKyBkeW5hbWljX2FkZHIpOworKyAgZHluYW1pY19zZWdtZW50ID0gKEVsZjY0X0R5biAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisgICBjaGVja19wdHIgKGR5bmFtaWNfc2VnbWVudCk7CisgCisgICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworQEAgLTIzMywzICs0MDYsMzMgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAorICAgcmV0dXJuIDA7CisgfQorKy8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworK2ludAorK3Byb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrCQkgIHVuc2lnbmVkIGludCAqb3N2ZXJzaW9uLCBjaGFyICoqc29uYW1lLCB2b2lkICpmaWxlX2NvbnRlbnRzLAorKwkJICBzaXplX3QgZmlsZV9sZW5ndGgpCisreworKyAgaW50IGk7CisrICB1bnNpZ25lZCBpbnQgajsKKysgIEVsZlcoQWRkcikgbG9hZGFkZHI7CisrICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworKyAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIGNoYXIgKnByb2dyYW1faW50ZXJwcmV0ZXI7CisrCisrICBFbGZXKEVoZHIpICplbGZfaGVhZGVyOworKyAgRWxmVyhQaGRyKSAqZWxmX3BoZWFkZXIsICpzZWdtZW50OworKyAgRWxmVyhEeW4pICpkeW5hbWljX3NlZ21lbnQsICpkeW5fZW50cnk7CisrICBjaGFyICpkeW5hbWljX3N0cmluZ3M7CisrCisrICBlbGZfaGVhZGVyID0gKEVsZlcoRWhkcikgKikgZmlsZV9jb250ZW50czsKKysgICpvc3ZlcnNpb24gPSAwOworKworKyAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorKyAgICByZXR1cm4gcHJvY2Vzc19lbGZfZmlsZTMyKGZpbGVfbmFtZSwgbGliLGZsYWcsIG9zdmVyc2lvbiwgc29uYW1lLCBmaWxlX2NvbnRlbnRzLCBmaWxlX2xlbmd0aCk7CisrICBlbHNlIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NCkKKysgICAgcmV0dXJuIHByb2Nlc3NfZWxmX2ZpbGU2NChmaWxlX25hbWUsIGxpYixmbGFnLCBvc3ZlcnNpb24sIHNvbmFtZSwgZmlsZV9jb250ZW50cywgZmlsZV9sZW5ndGgpOworKyAgZXJyb3IgKDAsIDAsIF8oIlVua25vd24gRUxGQ0xBU1MgaW4gZmlsZSAlcy5cbiIpLCBmaWxlX25hbWUpOworKyAgcmV0dXJuIDE7CisrfQorKworKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL1JFQURNRSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmYjk4MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9SRUFETUUKQEAgLTAsMCArMSw4IEBACitUaGUgZmlsZXMgYXJlIHB1bGxlZCB2ZXJiYXRpbSBmcm9tIGdsaWJjIDIuNSBhbmQgdGhlbiBwYXRjaGVkIHRvIGFsbG93CitzdGFuZGFsb25lIGNvbXBpbGF0aW9uIG9mIGxkY29uZmlnLgorCitSaWNoYXJkIFB1cmRpZQorT3BlbmVkSGFuZCBMdGQuCisKK1VwZ3JhZGVkIHRoZSBsZGNvbmZpZyByZWNpcGUgdG8gZWdsaWJjIDIuMTIuMQorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wMy8yOQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhZjExMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gOWQ2MjU0NDA5MGIwODg0OTIxOGNkMWZjNTJhMzZjZGQ1ZDkwMzYzZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDM6Mjk6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIDY0LWJpdCBmbGFnIGZvciBFTEY2NCBlbnRyaWVzLgorCitsZGNvbmZpZy1uYXRpdmUgd2FzIGdyZXBwZWQgZnJvbSBhbiBvbGQgdmVyc2lvbiBvZiBnbGliYywgYW5kIGl0cyBvdXRwdXQKK2xhY2tzIG5lY2Nlc3NhcnkgNjRiaXQgZmxhZyBpbiBlbnRyaWVzLgorRHVlIHRvIHRoaXMgZGVmZWN0LCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkoKSBweXRob24gZnVuY3Rpb24gZmFpbHMgdG8KK2RldGVjdCBhbnkgbGlicmFyeSBkdWUgdG8gdGhlIG9sZCBmaWxlIGZvcm1hdCB0aGF0IGxkY29uZmlnLW5hdGl2ZQorY3JlYXRlcy4gVGhpcyBmaXggc2V0cyBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IDY0Yml0IGZsYWdzIGZvciA2NC1iaXQgRUxGLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjYWNoZS5jICAgICAgfCAgNCArKysrCisgbGRjb25maWcuaCAgIHwgIDQgKysrKworIHJlYWRlbGZsaWIuYyB8IDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NhY2hlLmMgYi9jYWNoZS5jCitpbmRleCBhOTA0ZDQ0Li5jNGY1NDExIDEwMDY0NAorLS0tIGEvY2FjaGUuYworKysrIGIvY2FjaGUuYworQEAgLTEyMSw2ICsxMjEsMTAgQEAgcHJpbnRfZW50cnkgKGNvbnN0IGNoYXIgKmxpYiwgaW50IGZsYWcsIHVuc2lnbmVkIGludCBvc3ZlcnNpb24sCisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgRkxBR19NSVBTNjRfTElCTjY0OgorICAgICAgIGZwdXRzICgiLDY0Yml0Iiwgc3Rkb3V0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBGTEFHX0FBUkNINjRfTElCNjQ6CisrICAgICAgZnB1dHMgKCIsQUFyY2g2NCIsIHN0ZG91dCk7CisrICAgICAgYnJlYWs7CisgICAgIGNhc2UgMDoKKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKK2RpZmYgLS1naXQgYS9sZGNvbmZpZy5oIGIvbGRjb25maWcuaAoraW5kZXggZmFkZDVlYy4uNmE4YTc1MCAxMDA2NDQKKy0tLSBhL2xkY29uZmlnLmgKKysrKyBiL2xkY29uZmlnLmgKK0BAIC0zNCw2ICszNCwxMCBAQAorICNkZWZpbmUgRkxBR19QT1dFUlBDX0xJQjY0CTB4MDUwMAorICNkZWZpbmUgRkxBR19NSVBTNjRfTElCTjMyCTB4MDYwMAorICNkZWZpbmUgRkxBR19NSVBTNjRfTElCTjY0CTB4MDcwMAorKyNkZWZpbmUgRkxBR19YODY2NF9MSUJYMzIJCTB4MDgwMAorKyNkZWZpbmUgRkxBR19BUk1fTElCSEYJCQkweDA5MDAKKysjZGVmaW5lIEZMQUdfQUFSQ0g2NF9MSUI2NAkJMHgwYTAwCisrI2RlZmluZSBGTEFHX0FSTV9MSUJTRgkJCTB4MGIwMAorIAorIC8qIE5hbWUgb2YgYXV4aWxpYXJ5IGNhY2hlLiAgKi8KKyAjZGVmaW5lIF9QQVRIX0xEQ09ORklHX0FVWF9DQUNIRSAiL3Zhci9jYWNoZS9sZGNvbmZpZy9hdXgtY2FjaGUiCitkaWZmIC0tZ2l0IGEvcmVhZGVsZmxpYi5jIGIvcmVhZGVsZmxpYi5jCitpbmRleCAwYmYwZGUzLi42ZTg3YWZjIDEwMDY0NAorLS0tIGEvcmVhZGVsZmxpYi5jCisrKysgYi9yZWFkZWxmbGliLmMKK0BAIC0yOCw2ICsyOCwxMSBAQAorIAorICNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKyAKKysvKiBXb3JrLWFyb3VuZCBmb3Igb2xkIGhvc3QgdGhhdCBkb2VzIG5vdCBoYXZlIEFBcmNoNjQgZGVmaW5lZCBpbiBlbGYuaC4gKi8KKysjaWZuZGVmIEVNX0FBUkNINjQKKysjZGVmaW5lIEVNX0FBUkNINjQJMTgzCQkvKiBBUk0gQUFSQ0g2NCAqLworKyNlbmRpZgorKworICN1bmRlZiBjaGVja19wdHIKKyAjZGVmaW5lIGNoZWNrX3B0cihwdHIpCQkJCQkJXAorIGRvCQkJCQkJCQlcCitAQCAtMjkwLDYgKzI5NSwzNSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgICAgICBsaWJjNS9saWJjNi4gICovCisgICAqZmxhZyA9IEZMQUdfRUxGOworIAorKyAgLyogU2V0IGZsYWdzIGFjY29yZGluZyB0byBpbmZvcm1hdGlvbiBpbiBFTEYgaGVhZGVyIHRvIGFsaWduIHdpdGggdGFyZ2V0CisrICAgICBsZGNvbmZpZyAqLworKyAgc3dpdGNoIChlbGZfaGVhZGVyLT5lX21hY2hpbmUpCisrICAgIHsKKysgICAgY2FzZSBFTV9JQV82NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX0lBNjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fWDg2XzY0OgorKyAgICAgICpmbGFnIHw9IEZMQUdfWDg2NjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fUzM5MDoKKysgICAgICAqZmxhZyB8PSBGTEFHX1MzOTBfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fUFBDNjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19QT1dFUlBDX0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX01JUFM6CisrICAgIGNhc2UgRU1fTUlQU19SUzNfTEU6CisrICAgICAgKmZsYWcgfD0gRkxBR19NSVBTNjRfTElCTjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX0FBUkNINjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19BQVJDSDY0X0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGVycm9yKDAsIDAsICIlcyBpcyBhIDY0LWJpdCBFTEYgZm9yIHVua25vd24gbWFjaGluZSAlbHhcbiIsCisrICAgICAgICAgICAgZmlsZV9uYW1lLCAobG9uZyllbGZfaGVhZGVyLT5lX21hY2hpbmUpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisgICBsb2FkYWRkciA9IC0xOworICAgZHluYW1pY19hZGRyID0gMDsKKyAgIGR5bmFtaWNfc2l6ZSA9IDA7CistLSAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhlNGRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitEbyBkYXRhIGlucHV0L291dHB1dCBoYW5kbGluZyBhY2NvcmRpbmcgdG8gZW5kaWVuLW5lc3Mgb2YgdGhlIGxpYnJhcnkgZmlsZS4gVGhhdCAKK2VuYWJsZXMgdXNlIG9mIGxkY29uZmlnIGluIHRoZSBjcm9zcyBmYXNoaW9uIGZvciBhbnkgYXJjaGl0ZWN0dXJlLgorCisyMDExLzA0LzA0CitSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK05pdGluIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKK0BAIC0zOCw2ICszOCwyOCBAQCBkbwkJCQkJCQkJXAorICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCk7CisgCisraW50IGJlOworK3N0YXRpYyB1aW50MTZfdCByZWFkMTYodWludDE2X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTE2dG9oKHgpOworKyAgcmV0dXJuIGxlMTZ0b2goeCk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCByZWFkMzIodWludDMyX3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTMydG9oKHgpOworKyAgcmV0dXJuIGxlMzJ0b2goeCk7CisrfQorKworK3N0YXRpYyB1aW50NjRfdCByZWFkNjQodWludDY0X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTY0dG9oKHgpOworKyAgcmV0dXJuIGxlNjR0b2goeCk7CisrfQorKworIC8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworIGludAorIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKK0BAIC01OSwxNSArODEsMTcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZWxmX2hlYWRlciA9IChFbGYzMl9FaGRyICopIGZpbGVfY29udGVudHM7CisgICAqb3N2ZXJzaW9uID0gMDsKKyAKKy0gIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorKyAgYmUgPSAoZWxmX2hlYWRlci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBFTEZEQVRBMk1TQik7CisrCisrICBpZiAocmVhZDE2KGVsZl9oZWFkZXItPmVfdHlwZSwgYmUpICE9IEVUX0RZTikKKyAgICAgeworICAgICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBub3QgYSBzaGFyZWQgb2JqZWN0IGZpbGUgKFR5cGU6ICVkKS5cbiIpLCBmaWxlX25hbWUsCistCSAgICAgZWxmX2hlYWRlci0+ZV90eXBlKTsKKysJICAgICByZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkpOworICAgICAgIHJldHVybiAxOworICAgICB9CisgCisgICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworLSAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAocmVhZDMyKGVsZl9oZWFkZXItPmVfcGhvZmYsIGJlKSArIGZpbGVfY29udGVudHMpOworICAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisgCisgICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorQEAgLTc5LDI3ICsxMDMsMjcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZHluYW1pY19zaXplID0gMDsKKyAgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworICAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworLSAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgICAgIGkgPCByZWFkMTYoZWxmX2hlYWRlci0+ZV9waG51bSwgYmUpOyBpKyssIHNlZ21lbnQrKykKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisgCistICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisrICAgICAgc3dpdGNoIChyZWFkMzIoc2VnbWVudC0+cF90eXBlLCBiZSkpCisgCXsKKyAJY2FzZSBQVF9MT0FEOgorIAkgIGlmIChsb2FkYWRkciA9PSAoRWxmMzJfQWRkcikgLTEpCistCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICAgIGxvYWRhZGRyID0gcmVhZDMyKHNlZ21lbnQtPnBfdmFkZHIsIGJlKSAtIHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0RZTkFNSUM6CisgCSAgaWYgKGR5bmFtaWNfYWRkcikKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorLQkgIGR5bmFtaWNfYWRkciA9IHNlZ21lbnQtPnBfb2Zmc2V0OworLQkgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgIGR5bmFtaWNfYWRkciA9IHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKKy0JICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworIAkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisgCisgCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCitAQCAtMTEzLDIwICsxMzcsMjAgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgIGJyZWFrOworIAorIAljYXNlIFBUX05PVEU6CistCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorIAkgICAgeworIAkgICAgICBFbGYzMl9Xb3JkICphYmlfbm90ZSA9IChFbGYzMl9Xb3JkICopIChmaWxlX2NvbnRlbnRzCistCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmMzJfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCQkJCQkJICAgICArIHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKysJICAgICAgRWxmMzJfQWRkciBzaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCistCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKy0JCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJICAgICAgd2hpbGUgKHJlYWQzMihhYmlfbm90ZSBbMF0sIGJlKSAhPSA0IHx8IHJlYWQzMihhYmlfbm90ZSBbMV0sIGJlKSAhPSAxNgorKwkJICAgICB8fCByZWFkMzIoYWJpX25vdGUgWzJdLCBiZSkgIT0gMQorIAkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisgCQl7CistI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpKSAtIDEpICYgLXNpemVvZiAoRWxmMzJfV29yZCkpKQorLQkJICBFbGYzMl9BZGRyKSBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVswXSkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVsxXSk7CisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKysJCSAgRWxmMzJfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVswXSwgYmUpKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVsxXSwgYmUpKTsKKyAKKyAJCSAgaWYgKHNpemUgLSAzMiA8IG5vdGVfc2l6ZSB8fCBub3RlX3NpemUgPT0gMCkKKyAJCSAgICB7CitAQCAtMTQwLDEwICsxNjQsMTAgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgICAgICBpZiAoc2l6ZSA9PSAwKQorIAkJYnJlYWs7CisgCistCSAgICAgICpvc3ZlcnNpb24gPSAoYWJpX25vdGUgWzRdIDw8IDI0KSB8CistCQkJICAgKChhYmlfbm90ZSBbNV0gJiAweGZmKSA8PCAxNikgfAorLQkJCSAgICgoYWJpX25vdGUgWzZdICYgMHhmZikgPDwgOCkgfAorLQkJCSAgIChhYmlfbm90ZSBbN10gJiAweGZmKTsKKysJICAgICAgKm9zdmVyc2lvbiA9IChyZWFkMzIoYWJpX25vdGUgWzRdLCBiZSkgPDwgMjQpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNV0sIGJlKSAmIDB4ZmYpIDw8IDE2KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzZdLCBiZSkgJiAweGZmKSA8PCA4KSB8CisrCQkJICAgKHJlYWQzMihhYmlfbm90ZSBbN10sIGJlKSAmIDB4ZmYpOworIAkgICAgfQorIAkgIGJyZWFrOworIAorQEAgLTE2NywxMyArMTkxLDEzIEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAKKyAgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCisgICBkeW5hbWljX3N0cmluZ3MgPSBOVUxMOworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysgICAgICBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TVFJUQUIpCisgCXsKKy0JICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyKTsKKysJICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHJlYWQzMihkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKSAtIGxvYWRhZGRyKTsKKyAJICBjaGVja19wdHIgKGR5bmFtaWNfc3RyaW5ncyk7CisgCSAgYnJlYWs7CisgCX0KK0BAIC0xODMsMTUgKzIwNywxNSBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICAgIHJldHVybiAxOworIAorICAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEIHx8IGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKyAgICAgIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCB8fCByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJeworLQkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyBkeW5fZW50cnktPmRfdW4uZF92YWw7CisrCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIHJlYWQzMihkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKTsKKyAJICBjaGVja19wdHIgKG5hbWUpOworIAorLQkgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCkKKysJICBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQpCisgCSAgICB7CisgCisgCSAgICAgIGlmICgqZmxhZyA9PSBGTEFHX0VMRikKK0BAIC0yMDgsNyArMjMyLDcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkJfQorIAkgICAgfQorIAorLQkgIGVsc2UgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKwkgIGVsc2UgaWYgKHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAkgICAgKnNvbmFtZSA9IHhzdHJkdXAgKG5hbWUpOworIAorIAkgIC8qIERvIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkPyAgKi8KK0BAIC0yNDYsMTUgKzI3MCwxNyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBlbGZfaGVhZGVyID0gKEVsZjY0X0VoZHIgKikgZmlsZV9jb250ZW50czsKKyAgICpvc3ZlcnNpb24gPSAwOworIAorLSAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisrICBiZSA9IChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCKTsKKysKKysgIGlmIChyZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKy0JICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKwkgICAgIHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSk7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChyZWFkNjQoZWxmX2hlYWRlci0+ZV9waG9mZiwgYmUpICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtMjY2LDI3ICsyOTIsMjcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZHluYW1pY19zaXplID0gMDsKKyAgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworICAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworLSAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgICAgIGkgPCByZWFkMTYoZWxmX2hlYWRlci0+ZV9waG51bSwgYmUpOyBpKyssIHNlZ21lbnQrKykKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisgCistICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisrICAgICAgc3dpdGNoIChyZWFkMzIoc2VnbWVudC0+cF90eXBlLCBiZSkpCisgCXsKKyAJY2FzZSBQVF9MT0FEOgorIAkgIGlmIChsb2FkYWRkciA9PSAoRWxmNjRfQWRkcikgLTEpCistCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICAgIGxvYWRhZGRyID0gcmVhZDY0KHNlZ21lbnQtPnBfdmFkZHIsIGJlKSAtIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0RZTkFNSUM6CisgCSAgaWYgKGR5bmFtaWNfYWRkcikKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorLQkgIGR5bmFtaWNfYWRkciA9IHNlZ21lbnQtPnBfb2Zmc2V0OworLQkgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgIGR5bmFtaWNfYWRkciA9IHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKKy0JICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworIAkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisgCisgCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCitAQCAtMzAwLDIwICszMjYsMjEgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgIGJyZWFrOworIAorIAljYXNlIFBUX05PVEU6CistCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgcmVhZDMyKHNlZ21lbnQtPnBfYWxpZ24sIGJlKSA+PSA0KQorIAkgICAgeworIAkgICAgICBFbGY2NF9Xb3JkICphYmlfbm90ZSA9IChFbGY2NF9Xb3JkICopIChmaWxlX2NvbnRlbnRzCistCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmNjRfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCQkJCQkJICAgICArIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKysJICAgICAgRWxmNjRfQWRkciBzaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCistCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKy0JCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJICAgICAgd2hpbGUgKHJlYWQzMihhYmlfbm90ZSBbMF0sIGJlKSAhPSA0IHx8IHJlYWQzMihhYmlfbm90ZSBbMV0sIGJlKSAhPSAxNgorKwkJICAgICB8fCByZWFkMzIoYWJpX25vdGUgWzJdLCBiZSkgIT0gMQorIAkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisgCQl7CisrI3VuZGVmIFJPVU5ECisgI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjY0X1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGY2NF9Xb3JkKSkKKyAJCSAgRWxmNjRfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGY2NF9Xb3JkKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMF0sIGJlKSkKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMV0sIGJlKSk7CisgCisgCQkgIGlmIChzaXplIC0gMzIgPCBub3RlX3NpemUgfHwgbm90ZV9zaXplID09IDApCisgCQkgICAgeworQEAgLTMyNywxMCArMzU0LDEwIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJICAgICAgaWYgKHNpemUgPT0gMCkKKyAJCWJyZWFrOworIAorLQkgICAgICAqb3N2ZXJzaW9uID0gKGFiaV9ub3RlIFs0XSA8PCAyNCkgfAorLQkJCSAgICgoYWJpX25vdGUgWzVdICYgMHhmZikgPDwgMTYpIHwKKy0JCQkgICAoKGFiaV9ub3RlIFs2XSAmIDB4ZmYpIDw8IDgpIHwKKy0JCQkgICAoYWJpX25vdGUgWzddICYgMHhmZik7CisrCSAgICAgICpvc3ZlcnNpb24gPSAocmVhZDMyKGFiaV9ub3RlIFs0XSwgYmUpIDw8IDI0KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzVdLCBiZSkgJiAweGZmKSA8PCAxNikgfAorKwkJCSAgICgocmVhZDMyKGFiaV9ub3RlIFs2XSwgYmUpICYgMHhmZikgPDwgOCkgfAorKwkJCSAgIChyZWFkMzIoYWJpX25vdGUgWzddLCBiZSkgJiAweGZmKTsKKyAJICAgIH0KKyAJICBicmVhazsKKyAKK0BAIC0zNTQsMTMgKzM4MSwxMyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCisgICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworICAgZHluYW1pY19zdHJpbmdzID0gTlVMTDsKKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoZHluX2VudHJ5KTsKKy0gICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TVFJUQUIpCisrICAgICAgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU1RSVEFCKQorIAl7CistCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBkeW5fZW50cnktPmRfdW4uZF92YWwgLSBsb2FkYWRkcik7CisrCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkNjQoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSkgLSBsb2FkYWRkcik7CisgCSAgY2hlY2tfcHRyIChkeW5hbWljX3N0cmluZ3MpOworIAkgIGJyZWFrOworIAl9CitAQCAtMzcwLDE1ICszOTcsMTUgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorICAgICByZXR1cm4gMTsKKyAKKyAgIC8qIE5vdyByZWFkIHRoZSBEVF9ORUVERUQgYW5kIERUX1NPTkFNRSBlbnRyaWVzLiAgKi8KKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCB8fCBkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysgICAgICBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQgfHwgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TT05BTUUpCisgCXsKKy0JICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsOworKwkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyByZWFkNjQoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSk7CisgCSAgY2hlY2tfcHRyIChuYW1lKTsKKyAKKy0JICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQpCisrCSAgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfTkVFREVEKQorIAkgICAgeworIAorIAkgICAgICBpZiAoKmZsYWcgPT0gRkxBR19FTEYpCitAQCAtMzk1LDcgKzQyMiw3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJCX0KKyAJICAgIH0KKyAKKy0JICBlbHNlIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJICBlbHNlIGlmIChyZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJICAgICpzb25hbWUgPSB4c3RyZHVwIChuYW1lKTsKKyAKKyAJICAvKiBEbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZD8gICovCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKK0BAIC0xNjksNyArMTY5LDggQEAgcHJvY2Vzc19maWxlIChjb25zdCBjaGFyICpyZWFsX2ZpbGVfbmFtZQorICAgICAgIHJldCA9IDE7CisgICAgIH0KKyAgIC8qIExpYnJhcmllcyBoYXZlIHRvIGJlIHNoYXJlZCBvYmplY3QgZmlsZXMuICAqLworLSAgZWxzZSBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKysgIGVsc2UgaWYgKChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCICYmIGJlMTZ0b2goZWxmX2hlYWRlci0+ZV90eXBlKSAhPSBFVF9EWU4pIHx8CisrICAgICAgKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJMU0IgJiYgbGUxNnRvaChlbGZfaGVhZGVyLT5lX3R5cGUpICE9IEVUX0RZTikpCisgICAgIHJldCA9IDE7CisgICBlbHNlIGlmIChwcm9jZXNzX2VsZl9maWxlIChmaWxlX25hbWUsIGxpYiwgZmxhZywgb3N2ZXJzaW9uLCBzb25hbWUsCisgCQkJICAgICBmaWxlX2NvbnRlbnRzLCBzdGF0YnVmLnN0X3NpemUpKQorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCitAQCAtMzksNiArMzksMjkgQEAKKyAjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisgI2RlZmluZSBfKG1zZykgbXNnCisgCisrZXh0ZXJuIGludCBiZTsKKysKKytzdGF0aWMgdWludDE2X3Qgd3JpdGUxNih1aW50MTZfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGh0b2JlMTYoeCk7CisrICByZXR1cm4gaHRvbGUxNih4KTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90IHdyaXRlMzIodWludDMyX3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBodG9iZTMyKHgpOworKyAgcmV0dXJuIGh0b2xlMzIoeCk7CisrfQorKworK3N0YXRpYyB1aW50NjRfdCB3cml0ZTY0KHVpbnQ2NF90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gaHRvYmU2NCh4KTsKKysgIHJldHVybiBodG9sZTY0KHgpOworK30KKysKKyBzdHJ1Y3QgY2FjaGVfZW50cnkKKyB7CisgICBjaGFyICpsaWI7CQkJLyogTGlicmFyeSBuYW1lLiAgKi8KK0BAIC0yNzksNyArMzAyLDEyIEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAvKiBOdW1iZXIgb2Ygbm9ybWFsIGNhY2hlIGVudHJpZXMuICAqLworICAgaW50IGNhY2hlX2VudHJ5X29sZF9jb3VudCA9IDA7CisgCistICBmb3IgKGVudHJ5ID0gZW50cmllczsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkKKysgICAgaWYgKGJlKQorKyAgICAgIHByaW50Zigic2F2aW5nIGNhY2hlIGluIGJpZyBlbmRpYW4gZW5jb2RpbmdcbiIpOworKyAgICBlbHNlCisrICAgICAgcHJpbnRmKCJzYXZpbmcgY2FjaGUgaW4gbGl0dGxlIGVuZGlhbiBlbmNvZGluZ1xuIik7CisrCisrICAgIGZvciAoZW50cnkgPSBlbnRyaWVzOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorICAgICB7CisgICAgICAgLyogQWNjb3VudCB0aGUgZmluYWwgTlVMcy4gICovCisgICAgICAgdG90YWxfc3RybGVuICs9IHN0cmxlbiAoZW50cnktPmxpYikgKyBzdHJsZW4gKGVudHJ5LT5wYXRoKSArIDI7CitAQCAtMzEwLDcgKzMzOCw3IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgbWVtc2V0IChmaWxlX2VudHJpZXMsICdcMCcsIHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGUpKTsKKyAgICAgICBtZW1jcHkgKGZpbGVfZW50cmllcy0+bWFnaWMsIENBQ0hFTUFHSUMsIHNpemVvZiBDQUNIRU1BR0lDIC0gMSk7CisgCistICAgICAgZmlsZV9lbnRyaWVzLT5ubGlicyA9IGNhY2hlX2VudHJ5X29sZF9jb3VudDsKKysgICAgICBmaWxlX2VudHJpZXMtPm5saWJzID0gd3JpdGUzMihjYWNoZV9lbnRyeV9vbGRfY291bnQsIGJlKTsKKyAgICAgfQorIAorICAgc3RydWN0IGNhY2hlX2ZpbGVfbmV3ICpmaWxlX2VudHJpZXNfbmV3ID0gTlVMTDsKK0BAIC0zMzAsOCArMzU4LDggQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICBtZW1jcHkgKGZpbGVfZW50cmllc19uZXctPnZlcnNpb24sIENBQ0hFX1ZFUlNJT04sCisgCSAgICAgIHNpemVvZiBDQUNIRV9WRVJTSU9OIC0gMSk7CisgCistICAgICAgZmlsZV9lbnRyaWVzX25ldy0+bmxpYnMgPSBjYWNoZV9lbnRyeV9jb3VudDsKKy0gICAgICBmaWxlX2VudHJpZXNfbmV3LT5sZW5fc3RyaW5ncyA9IHRvdGFsX3N0cmxlbjsKKysgICAgICBmaWxlX2VudHJpZXNfbmV3LT5ubGlicyA9IHdyaXRlMzIoY2FjaGVfZW50cnlfY291bnQsIGJlKTsKKysgICAgICBmaWxlX2VudHJpZXNfbmV3LT5sZW5fc3RyaW5ncyA9IHdyaXRlMzIodG90YWxfc3RybGVuLCBiZSk7CisgICAgIH0KKyAKKyAgIC8qIFBhZCBmb3IgYWxpZ25tZW50IG9mIGNhY2hlX2ZpbGVfbmV3LiAgKi8KK0BAIC0zNTgsOSArMzg2LDkgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICAvKiBGaXJzdCB0aGUgbGlicmFyeS4gICovCisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMiAmJiBlbnRyeS0+aHdjYXAgPT0gMCkKKyAJeworLQkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5mbGFncyA9IGVudHJ5LT5mbGFnczsKKysJICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0uZmxhZ3MgPSB3cml0ZTMyKGVudHJ5LT5mbGFncywgYmUpOworIAkgIC8qIFhYWDogQWN0dWFsbHkgd2UgY2FuIG9wdGltaXplIGhlcmUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzLiAgKi8KKy0JICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0ua2V5ID0gc3RyX29mZnNldCArIHBhZDsKKysJICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0ua2V5ID0gd3JpdGUzMihzdHJfb2Zmc2V0ICsgcGFkLCBiZSk7CisgCX0KKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAwKQorIAl7CitAQCAtMzY4LDEwICszOTYsMTAgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAJICAgICBub3QgZG9pbmcgc28gbWFrZXMgdGhlIGNvZGUgZWFzaWVyLCB0aGUgc3RyaW5nIHRhYmxlCisgCSAgICAgYWx3YXlzIGJlZ2lucyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aGUgbmV3IGNhY2hlCisgCSAgICAgc3RydWN0LiAgKi8KKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmZsYWdzID0gZW50cnktPmZsYWdzOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ub3N2ZXJzaW9uID0gZW50cnktPm9zdmVyc2lvbjsKKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmh3Y2FwID0gZW50cnktPmh3Y2FwOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ua2V5ID0gc3RyX29mZnNldDsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmZsYWdzID0gd3JpdGUzMihlbnRyeS0+ZmxhZ3MsIGJlKTsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLm9zdmVyc2lvbiA9IHdyaXRlMzIoZW50cnktPm9zdmVyc2lvbiwgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uaHdjYXAgPSB3cml0ZTY0KGVudHJ5LT5od2NhcCwgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ua2V5ID0gd3JpdGUzMihzdHJfb2Zmc2V0LCBiZSk7CisgCX0KKyAKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChlbnRyeS0+bGliKSArIDE7CitAQCAtMzc5LDkgKzQwNyw5IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgc3RyX29mZnNldCArPSBsZW47CisgICAgICAgLyogVGhlbiB0aGUgcGF0aC4gICovCisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMiAmJiBlbnRyeS0+aHdjYXAgPT0gMCkKKy0JZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLnZhbHVlID0gc3RyX29mZnNldCArIHBhZDsKKysJZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLnZhbHVlID0gd3JpdGUzMihzdHJfb2Zmc2V0ICsgcGFkLCBiZSk7CisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMCkKKy0JZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS52YWx1ZSA9IHN0cl9vZmZzZXQ7CisrCWZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10udmFsdWUgPSB3cml0ZTMyKHN0cl9vZmZzZXQsIGJlKTsKKyAgICAgICBsZW4gPSBzdHJsZW4gKGVudHJ5LT5wYXRoKSArIDE7CisgICAgICAgc3RyID0gbWVtcGNweSAoc3RyLCBlbnRyeS0+cGF0aCwgbGVuKTsKKyAgICAgICBzdHJfb2Zmc2V0ICs9IGxlbjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZWNmZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0ZpeCBwcm9ibGVtIGR1cmluZyBwYXJzaW5nIG9mIEVMRiBoZWFkZXJzIGZvciA2NGJpdCBvbiBiaWctZW5kaWFuLgorU29tZSBoZWFkZXIgZmllbGRzIHdlcmUgcmVhZCB3aXRoIHdyb25nIHNpemUuCisKKzIwMTQvMTAvMjQKK1BhciBPbHNzb24gPFBhci5PbHNzb25Ad2luZHJpdmVyLmNvbT4KK1NoYW4gSGFpIDxzaGFuLmhhaUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvcmVhZGVsZmxpYi5jIGIvcmVhZGVsZmxpYi5jCitpbmRleCAzZjViMjViLi4wYmYwZGUzIDEwMDY0NAorLS0tIGEvcmVhZGVsZmxpYi5jCisrKysgYi9yZWFkZWxmbGliLmMKK0BAIC0yNjEsOCArMjYxLDggQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorICAgaW50IGk7CisgICB1bnNpZ25lZCBpbnQgajsKKyAgIEVsZjY0X0FkZHIgbG9hZGFkZHI7CistICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworLSAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIEVsZjY0X0FkZHIgZHluYW1pY19hZGRyOworKyAgRWxmNjRfWHdvcmQgZHluYW1pY19zaXplOworICAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKyAKKyAgIEVsZjY0X0VoZHIgKmVsZl9oZWFkZXI7CitAQCAtMzExLDcgKzMxMSw3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorIAkgIGR5bmFtaWNfYWRkciA9IHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworLQkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKK0BAIC0zMjksMTEgKzMyOSwxMSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfTk9URToKKy0JICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgcmVhZDMyKHNlZ21lbnQtPnBfYWxpZ24sIGJlKSA+PSA0KQorKwkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkNjQoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiByZWFkNjQoc2VnbWVudC0+cF9hbGlnbiwgYmUpID49IDQpCisgCSAgICB7CisgCSAgICAgIEVsZjY0X1dvcmQgKmFiaV9ub3RlID0gKEVsZjY0X1dvcmQgKikgKGZpbGVfY29udGVudHMKKyAJCQkJCQkgICAgICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworLQkgICAgICBFbGY2NF9BZGRyIHNpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKysJICAgICAgRWxmNjRfWHdvcmQgc2l6ZSA9IHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAorIAkgICAgICB3aGlsZSAocmVhZDMyKGFiaV9ub3RlIFswXSwgYmUpICE9IDQgfHwgcmVhZDMyKGFiaV9ub3RlIFsxXSwgYmUpICE9IDE2CisgCQkgICAgIHx8IHJlYWQzMihhYmlfbm90ZSBbMl0sIGJlKSAhPSAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuZXNzLWhlYWRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGIyYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuZXNzLWhlYWRlci5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtmaXggcG9reSBwYXRjaF0KKworVGhpcyBwYXRjaCBmaXhlcyBidWlsZCBpc3N1ZXMgd2l0aCBhIHByZXZpb3VzIGVuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIG9uCitkaXN0cm9zIHRoYXQgZG9uJ3QgaGF2ZSBtYWNyb3MgcmVmZXJlbmNlZAorCis3LzIwLzIwMTEKK01hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2VuZGlhbl9leHRyYS5oIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuX2V4dHJhLmgKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZW5kaWFuX2V4dHJhLmgJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbl9leHRyYS5oCTIwMTEtMDctMTkgMTg6MDk6MTQuMzIzMDQ4NDE3IC0wNTAwCitAQCAtMCwwICsxLDY0IEBACisrLyogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk2LCAxOTk3LCAyMDAwLCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrCisrI2lmbmRlZglfRU5ESUFOX0VYVFJBX0gKKysjZGVmaW5lCV9FTkRJQU5fRVhUUkFfSAkxCisrCisrLyogRG9uJ3QgcmVkZWZpbmUgdGhlc2UgbWFjcm9zIGlmIHRoZXkgYWxyZWFkeSBleGlzdCAqLworKyNpZm5kZWYgaHRvYmUxNgorKyNpZmRlZiBfX1VTRV9CU0QKKysvKiBDb252ZXJzaW9uIGludGVyZmFjZXMuICAqLworKyMgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysKKysjIGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjICBkZWZpbmUgaHRvYmUxNih4KSBfX2Jzd2FwXzE2ICh4KQorKyMgIGRlZmluZSBodG9sZTE2KHgpICh4KQorKyMgIGRlZmluZSBiZTE2dG9oKHgpIF9fYnN3YXBfMTYgKHgpCisrIyAgZGVmaW5lIGxlMTZ0b2goeCkgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlMzIoeCkgX19ic3dhcF8zMiAoeCkKKysjICBkZWZpbmUgaHRvbGUzMih4KSAoeCkKKysjICBkZWZpbmUgYmUzMnRvaCh4KSBfX2Jzd2FwXzMyICh4KQorKyMgIGRlZmluZSBsZTMydG9oKHgpICh4KQorKworKyMgIGRlZmluZSBodG9iZTY0KHgpIF9fYnN3YXBfNjQgKHgpCisrIyAgZGVmaW5lIGh0b2xlNjQoeCkgKHgpCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgX19ic3dhcF82NCAoeCkKKysjICBkZWZpbmUgbGU2NHRvaCh4KSAoeCkKKysjIGVsc2UKKysjICBkZWZpbmUgaHRvYmUxNih4KSAoeCkKKysjICBkZWZpbmUgaHRvbGUxNih4KSBfX2Jzd2FwXzE2ICh4KQorKyMgIGRlZmluZSBiZTE2dG9oKHgpICh4KQorKyMgIGRlZmluZSBsZTE2dG9oKHgpIF9fYnN3YXBfMTYgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlMzIoeCkgKHgpCisrIyAgZGVmaW5lIGh0b2xlMzIoeCkgX19ic3dhcF8zMiAoeCkKKysjICBkZWZpbmUgYmUzMnRvaCh4KSAoeCkKKysjICBkZWZpbmUgbGUzMnRvaCh4KSBfX2Jzd2FwXzMyICh4KQorKworKyMgIGRlZmluZSBodG9iZTY0KHgpICh4KQorKyMgIGRlZmluZSBodG9sZTY0KHgpIF9fYnN3YXBfNjQgKHgpCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgKHgpCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgX19ic3dhcF82NCAoeCkKKysjIGVuZGlmCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2VuZGlmCS8qIGVuZGlhbl9leHRyYS5oICovCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCTIwMTEtMDctMTkgMTg6MjE6MjguMzQ3MDQxMzAxIC0wNTAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCTIwMTEtMDctMTkgMTg6MjI6NTQuMTE4MDQ4MDY0IC0wNTAwCitAQCAtMzksNiArMzksOCBAQAorICMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgZXh0ZXJuIGludCBiZTsKKyAKKyBzdGF0aWMgdWludDE2X3Qgd3JpdGUxNih1aW50MTZfdCB4LCBpbnQgYmUpCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCTIwMTEtMDctMTkgMTg6MjE6MjguMzQ2MDQxNTkzIC0wNTAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMJMjAxMS0wNy0xOSAxODoyMzowNS4zMjQwNTk4NzUgLTA1MDAKK0BAIC0yNSw2ICsyNSw5IEBACisgCisgLyogY2hlY2tfcHRyIGNoZWNrcyB0aGF0IGEgcG9pbnRlciBpcyBpbiB0aGUgbW1hcGVkIGZpbGUgYW5kIGRvZXNuJ3QKKyAgICBwb2ludCBvdXRzaWRlIGl0LiAgKi8KKysKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgI3VuZGVmIGNoZWNrX3B0cgorICNkZWZpbmUgY2hlY2tfcHRyKHB0cikJCQkJCQlcCisgZG8JCQkJCQkJCVwKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMJMjAxMS0wNy0xOSAxODoyMToyOC4zNDYwNDE1OTMgLTA1MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYwkyMDExLTA3LTE5IDE4OjIzOjIzLjg3NzA0NjIxMCAtMDUwMAorQEAgLTQwLDYgKzQwLDggQEAKKyAKKyAjaW5jbHVkZSAibGRjb25maWcuaCIKKyAKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgI2RlZmluZSBfKG1zZykgbXNnCisgCisgI2RlZmluZSBFbGYzMl9DTEFTUyBFTEZDTEFTUzMyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZmxhZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZmxhZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5YWFiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9mbGFnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgbmF0aXZlIHZlcnNpb24gb2YgbGRjb25maWcgd2FzIHVzaW5nIG5hdGl2ZSBkZWZpbml0aW9uIG9mIExEX1NPIChpLmUuIAorbGQtbGludXgteDg2LTY0LnNvLjIgKSB3aGljaCBpcyBub3QgY29ycmVjdCBmb3IgZG9pbmcgdGhlIGNyb3NzIGxkY29uZmlnLgorVGhpcyB3YXMgY2F1c2luZyBsaWJjLnNvIG9uIHRoZSB0YXJnZXQgbWFya2VkIGFzIEVMRiBsaWIgcmF0aGVyIHRoYW4gCitGTEFHX0VMRl9MSUJDNiBpbiB0aGUgbGQuc28uY2FjaGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvNAorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKK0BAIC01MSw2ICs1MSwxMCBAQCBzdHJ1Y3Qga25vd25fbmFtZXMKKyAgIGludCBmbGFnOworIH07CisgCisrLyogZG9uJ3QgdXNlIGhvc3QncyBkZWZpbml0aW9uIG9mIExEX1NPICovCisrI3VuZGVmIExEX1NPIAorKyNkZWZpbmUgTERfU08gImxkLnNvLjEiCisrCisgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBpbnRlcnByZXRlcnNbXSA9CisgeworICAgeyAiL2xpYi8iIExEX1NPLCBGTEFHX0VMRl9MSUJDNiB9LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ0ZjZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworbWFrZSBsZGNvbmZpZyBkZWZhdWx0IHRvIGJvdGggL2xpYisvdXNyL2xpYiwgL2xpYjMyKy91c3IvbGliMzIgYW5kCisvbGliNjQrL3Vzci9saWI2NCBvbiBiaS1BQkkgYXJjaGl0ZWN0dXJlcy4KKworLS0tCisgbGRjb25maWcuYyB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLXVycE4gYS9sZGNvbmZpZy5jIGIvbGRjb25maWcuYworLS0tIGEvbGRjb25maWcuYworKysrIGIvbGRjb25maWcuYworQEAgLTUyLDcgKzUyLDExIEBACisgCisgI2RlZmluZSBTWVNDT05GRElSICIvZXRjIgorICNkZWZpbmUgTElCRElSICIvdXNyL2xpYiIKKysjZGVmaW5lIExJQkRJUjMyICIvdXNyL2xpYjMyIgorKyNkZWZpbmUgTElCRElSNjQgIi91c3IvbGliNjQiCisgI2RlZmluZSBTTElCRElSICIvbGliIgorKyNkZWZpbmUgU0xJQkRJUjMyICIvbGliMzIiCisrI2RlZmluZSBTTElCRElSNjQgIi9saWI2NCIKKyAjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisgI2RlZmluZSBfKG1zZykgbXNnCisgCitAQCAtMTM3Myw2ICsxMzc3LDEyIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICBhZGRfc3lzdGVtX2RpciAoU0xJQkRJUik7CisgICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUiwgTElCRElSKSkKKyAJYWRkX3N5c3RlbV9kaXIgKExJQkRJUik7CisrICAgICAgYWRkX3N5c3RlbV9kaXIgKFNMSUJESVIzMik7CisrICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUjMyLCBMSUJESVIzMikpCisrCWFkZF9zeXN0ZW1fZGlyIChMSUJESVIzMik7CisrICAgICAgYWRkX3N5c3RlbV9kaXIgKFNMSUJESVI2NCk7CisrICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUjY0LCBMSUJESVI2NCkpCisrCWFkZF9zeXN0ZW1fZGlyIChMSUJESVI2NCk7CisgICAgIH0KKyAKKyAgIGNvbnN0IGNoYXIgKmF1eF9jYWNoZV9maWxlID0gX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxZTc5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTg2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcucGF0Y2gKQEAgLTAsMCArMSw0NzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2VuYWJsZSBzdGFuZGFsb25lIGJ1aWxkaW5nIG9mIGxkY29uZmlnCisKKy0tLQorIGNhY2hlLmMgICAgICAgIHwgICAxMSArLQorIGNocm9vdF9jYW5vbi5jIHwgICAgNyArCisgZGwtY2FjaGUuYyAgICAgfCAgMjM1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRsLWNhY2hlLmggICAgIHwgICAgMyAKKyBsZGNvbmZpZy5jICAgICB8ICAgMjcgKysrKy0tCisgcmVhZGxpYi5jICAgICAgfCAgICA3ICsKKyB4c3RyZHVwLmMgICAgICB8ICAgMTEgLS0KKyA3IGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDI1NiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCitAQCAtMTYsNiArMTYsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxkaXJlbnQuaD4KK0BAIC0zMSw4ICszNCwxMCBAQAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKy0jaW5jbHVkZSA8bGRjb25maWcuaD4KKy0jaW5jbHVkZSA8ZGwtY2FjaGUuaD4KKysjaW5jbHVkZSAibGRjb25maWcuaCIKKysjaW5jbHVkZSAiZGwtY2FjaGUuaCIKKysjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisrI2RlZmluZSBfKG1zZykgbXNnCisgCisgc3RydWN0IGNhY2hlX2VudHJ5CisgeworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2hyb290X2Nhbm9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvY2hyb290X2Nhbm9uLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2Nocm9vdF9jYW5vbi5jCitAQCAtMTcsNiArMTcsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorQEAgLTI3LDcgKzMwLDkgQEAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKworKyNkZWZpbmUgX19zZXRfZXJybm8oVmFsKSBlcnJubyA9IChWYWwpCisgCisgI2lmbmRlZiBQQVRIX01BWAorICNkZWZpbmUgUEFUSF9NQVggMTAyNAorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZGwtY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9kbC1jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5jCitAQCAtMjAsMTIgKzIwLDEyIEBACisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKy0jaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysvLyNpbmNsdWRlICJsZHNvZGVmcy5oIgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxkbC1jYWNoZS5oPgorICNpbmNsdWRlIDxkbC1wcm9jaW5mby5oPgorIAorLSNpbmNsdWRlIDxzdGRpby1jb21tb24vX2l0b2EuaD4KKysvLyNpbmNsdWRlICJfaXRvYS5oIgorIAorICNpZm5kZWYgX0RMX1BMQVRGT1JNU19DT1VOVAorICMgZGVmaW5lIF9ETF9QTEFURk9STVNfQ09VTlQgMAorQEAgLTM5LDEwMyArMzksNyBAQCBzdGF0aWMgc2l6ZV90IGNhY2hlc2l6ZTsKKyAvKiAxIGlmIGNhY2hlX2RhdGEgKyBQVFIgcG9pbnRzIGludG8gdGhlIGNhY2hlLiAgKi8KKyAjZGVmaW5lIF9kbF9jYWNoZV92ZXJpZnlfcHRyKHB0cikgKHB0ciA8IGNhY2hlX2RhdGFfc2l6ZSkKKyAKKy0jZGVmaW5lIFNFQVJDSF9DQUNIRShjYWNoZSkgXAorLS8qIFdlIHVzZSBiaW5hcnkgc2VhcmNoIHNpbmNlIHRoZSB0YWJsZSBpcyBzb3J0ZWQgaW4gdGhlIGNhY2hlIGZpbGUuCSAgICAgIFwKKy0gICBUaGUgZmlyc3QgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIHRhYmxlIGlzIHJldHVybmVkLgkJCSAgICAgIFwKKy0gICBJdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBzYW1lIGFsZ29yaXRobSBhcyB1c2VkIHdoaWxlIGdlbmVyYXRpbmcJICAgICAgXAorLSAgIHRoZSBjYWNoZSBmaWxlLiAgKi8JCQkJCQkJICAgICAgXAorLWRvCQkJCQkJCQkJICAgICAgXAorLSAgewkJCQkJCQkJCSAgICAgIFwKKy0gICAgbGVmdCA9IDA7CQkJCQkJCQkgICAgICBcCistICAgIHJpZ2h0ID0gY2FjaGUtPm5saWJzIC0gMTsJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGVmdCA8PSByaWdodCkJCQkJCQkgICAgICBcCistICAgICAgewkJCQkJCQkJCSAgICAgIFwKKy0JX190eXBlb2ZfXyAoY2FjaGUtPmxpYnNbMF0ua2V5KSBrZXk7CQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCW1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCWtleSA9IGNhY2hlLT5saWJzW21pZGRsZV0ua2V5OwkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JLyogTWFrZSBzdXJlIHN0cmluZyB0YWJsZSBpbmRpY2VzIGFyZSBub3QgYm9ndXMgYmVmb3JlIHVzaW5nCSAgICAgIFwKKy0JICAgdGhlbS4gICovCQkJCQkJCSAgICAgIFwKKy0JaWYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGtleSkpCQkJCSAgICAgIFwKKy0JICB7CQkJCQkJCQkgICAgICBcCistCSAgICBjbXByZXMgPSAxOwkJCQkJCQkgICAgICBcCistCSAgICBicmVhazsJCQkJCQkJICAgICAgXAorLQkgIH0JCQkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCS8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGVudHJ5IHdpdGggdGhlIGtleS4gICovCQkJICAgICAgXAorLQljbXByZXMgPSBfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsga2V5KTsJCSAgICAgIFwKKy0JaWYgKF9fYnVpbHRpbl9leHBlY3QgKGNtcHJlcyA9PSAwLCAwKSkJCQkJICAgICAgXAorLQkgIHsJCQkJCQkJCSAgICAgIFwKKy0JICAgIC8qIEZvdW5kIGl0LiAgTEVGVCBub3cgbWFya3MgdGhlIGxhc3QgZW50cnkgZm9yIHdoaWNoIHdlCSAgICAgIFwKKy0JICAgICAgIGtub3cgdGhlIG5hbWUgaXMgY29ycmVjdC4gICovCQkJCSAgICAgIFwKKy0JICAgIGxlZnQgPSBtaWRkbGU7CQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JICAgIC8qIFRoZXJlIG1pZ2h0IGJlIGVudHJpZXMgd2l0aCB0aGlzIG5hbWUgYmVmb3JlIHRoZSBvbmUgd2UJICAgICAgXAorLQkgICAgICAgZm91bmQuICBTbyB3ZSBoYXZlIHRvIGZpbmQgdGhlIGJlZ2lubmluZy4gICovCQkgICAgICBcCistCSAgICB3aGlsZSAobWlkZGxlID4gMCkJCQkJCQkgICAgICBcCistCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JCV9fdHlwZW9mX18gKGNhY2hlLT5saWJzWzBdLmtleSkga2V5OwkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQlrZXkgPSBjYWNoZS0+bGlic1ttaWRkbGUgLSAxXS5rZXk7CQkJICAgICAgXAorLQkJLyogTWFrZSBzdXJlIHN0cmluZyB0YWJsZSBpbmRpY2VzIGFyZSBub3QgYm9ndXMgYmVmb3JlCSAgICAgIFwKKy0JCSAgIHVzaW5nIHRoZW0uICAqLwkJCQkJICAgICAgXAorLQkJaWYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGtleSkJCQkgICAgICBcCistCQkgICAgLyogQWN0dWFsbHkgY29tcGFyZSB0aGUgZW50cnkuICAqLwkJCSAgICAgIFwKKy0JCSAgICB8fCBfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsga2V5KSAhPSAwKQkgICAgICBcCistCQkgIGJyZWFrOwkJCQkJCSAgICAgIFwKKy0JCS0tbWlkZGxlOwkJCQkJCSAgICAgIFwKKy0JICAgICAgfQkJCQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JICAgIGRvCQkJCQkJCQkgICAgICBcCistCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JCWludCBmbGFnczsJCQkJCQkgICAgICBcCistCQlfX3R5cGVvZl9fIChjYWNoZS0+bGlic1swXSkgKmxpYiA9ICZjYWNoZS0+bGlic1ttaWRkbGVdOyAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQkvKiBPbmx5IHBlcmZvcm0gdGhlIG5hbWUgdGVzdCBpZiBuZWNlc3NhcnkuICAqLwkJICAgICAgXAorLQkJaWYgKG1pZGRsZSA+IGxlZnQJCQkJCSAgICAgIFwKKy0JCSAgICAvKiBXZSBoYXZlbid0IHNlZW4gdGhpcyBzdHJpbmcgc28gZmFyLiAgVGVzdCB3aGV0aGVyIHRoZSAgXAorLQkJICAgICAgIGluZGV4IGlzIG9rIGFuZCB3aGV0aGVyIHRoZSBuYW1lIG1hdGNoZXMuICBPdGhlcndpc2UgICBcCistCQkgICAgICAgd2UgYXJlIGRvbmUuICAqLwkJCQkJICAgICAgXAorLQkJICAgICYmICghIF9kbF9jYWNoZV92ZXJpZnlfcHRyIChsaWItPmtleSkJCSAgICAgIFwKKy0JCQl8fCAoX2RsX2NhY2hlX2xpYmNtcCAobmFtZSwgY2FjaGVfZGF0YSArIGxpYi0+a2V5KSAgICBcCistCQkJICAgICE9IDApKSkJCQkJCSAgICAgIFwKKy0JCSAgYnJlYWs7CQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCWZsYWdzID0gbGliLT5mbGFnczsJCQkJCSAgICAgIFwKKy0JCWlmIChfZGxfY2FjaGVfY2hlY2tfZmxhZ3MgKGZsYWdzKQkJCSAgICAgIFwKKy0JCSAgICAmJiBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAobGliLT52YWx1ZSkpCQkgICAgICBcCistCQkgIHsJCQkJCQkJICAgICAgXAorLQkJICAgIGlmIChiZXN0ID09IE5VTEwgfHwgZmxhZ3MgPT0gR0xSTyhkbF9jb3JyZWN0X2NhY2hlX2lkKSkgICBcCistCQkgICAgICB7CQkJCQkJCSAgICAgIFwKKy0JCQlIV0NBUF9DSEVDSzsJCQkJCSAgICAgIFwKKy0JCQliZXN0ID0gY2FjaGVfZGF0YSArIGxpYi0+dmFsdWU7CQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCQlpZiAoZmxhZ3MgPT0gR0xSTyhkbF9jb3JyZWN0X2NhY2hlX2lkKSkJCSAgICAgIFwKKy0JCQkgIC8qIFdlJ3ZlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGZvciB0aGUgc2hhcmVkCSAgICAgIFwKKy0JCQkgICAgIG9iamVjdCBhbmQgbm8gZ2VuZXJhbCBgRUxGJyByZWxlYXNlLiAgU3RvcAkgICAgICBcCistCQkJICAgICBzZWFyY2hpbmcuICAqLwkJCQkgICAgICBcCistCQkJICBicmVhazsJCQkJCSAgICAgIFwKKy0JCSAgICAgIH0JCQkJCQkJICAgICAgXAorLQkJICB9CQkJCQkJCSAgICAgIFwKKy0JICAgICAgfQkJCQkJCQkJICAgICAgXAorLQkgICAgd2hpbGUgKCsrbWlkZGxlIDw9IHJpZ2h0KTsJCQkJCSAgICAgIFwKKy0JICAgIGJyZWFrOwkJCQkJCQkgICAgICBcCistCX0JCQkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCWlmIChjbXByZXMgPCAwKQkJCQkJCQkgICAgICBcCistCSAgbGVmdCA9IG1pZGRsZSArIDE7CQkJCQkJICAgICAgXAorLQllbHNlCQkJCQkJCQkgICAgICBcCistCSAgcmlnaHQgPSBtaWRkbGUgLSAxOwkJCQkJCSAgICAgIFwKKy0gICAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfQkJCQkJCQkJCSAgICAgIFwKKy13aGlsZSAoMCkKKy0KKy0KKyBpbnQKKy1pbnRlcm5hbF9mdW5jdGlvbgorIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMikKKyB7CisgICB3aGlsZSAoKnAxICE9ICdcMCcpCitAQCAtMTcyLDEzOSArNzYsMyBAQCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgCisgICAgIH0KKyAgIHJldHVybiAqcDEgLSAqcDI7CisgfQorLQorLQorLS8qIExvb2sgdXAgTkFNRSBpbiBsZC5zby5jYWNoZSBhbmQgcmV0dXJuIHRoZSBmaWxlIG5hbWUgc3RvcmVkIHRoZXJlLAorLSAgIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZC4gICovCistCistY29uc3QgY2hhciAqCistaW50ZXJuYWxfZnVuY3Rpb24KKy1fZGxfbG9hZF9jYWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUpCisteworLSAgaW50IGxlZnQsIHJpZ2h0LCBtaWRkbGU7CistICBpbnQgY21wcmVzOworLSAgY29uc3QgY2hhciAqY2FjaGVfZGF0YTsKKy0gIHVpbnQzMl90IGNhY2hlX2RhdGFfc2l6ZTsKKy0gIGNvbnN0IGNoYXIgKmJlc3Q7CistCistICAvKiBQcmludCBhIG1lc3NhZ2UgaWYgdGhlIGxvYWRpbmcgb2YgbGlicyBpcyB0cmFjZWQuICAqLworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsIDApKQorLSAgICBfZGxfZGVidWdfcHJpbnRmICgiIHNlYXJjaCBjYWNoZT0lc1xuIiwgTERfU09fQ0FDSEUpOworLQorLSAgaWYgKGNhY2hlID09IE5VTEwpCistICAgIHsKKy0gICAgICAvKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gICovCistICAgICAgdm9pZCAqZmlsZSA9IF9kbF9zeXNkZXBfcmVhZF93aG9sZV9maWxlIChMRF9TT19DQUNIRSwgJmNhY2hlc2l6ZSwKKy0JCQkJCSAgICAgICBQUk9UX1JFQUQpOworLQorLSAgICAgIC8qIFdlIGNhbiBoYW5kbGUgdGhyZWUgZGlmZmVyZW50IGNhY2hlIGZpbGUgZm9ybWF0cyBoZXJlOgorLQkgLSB0aGUgb2xkIGxpYmM1L2dsaWJjMi4wLzIuMSBmb3JtYXQKKy0JIC0gdGhlIG9sZCBmb3JtYXQgd2l0aCB0aGUgbmV3IGZvcm1hdCBpbiBpdAorLQkgLSBvbmx5IHRoZSBuZXcgZm9ybWF0CistCSBUaGUgZm9sbG93aW5nIGNoZWNrcyBpZiB0aGUgY2FjaGUgY29udGFpbnMgYW55IG9mIHRoZXNlIGZvcm1hdHMuICAqLworLSAgICAgIGlmIChmaWxlICE9IE1BUF9GQUlMRUQgJiYgY2FjaGVzaXplID4gc2l6ZW9mICpjYWNoZQorLQkgICYmIG1lbWNtcCAoZmlsZSwgQ0FDSEVNQUdJQywgc2l6ZW9mIENBQ0hFTUFHSUMgLSAxKSA9PSAwKQorLQl7CistCSAgc2l6ZV90IG9mZnNldDsKKy0JICAvKiBMb29rcyBvay4gICovCistCSAgY2FjaGUgPSBmaWxlOworLQorLQkgIC8qIENoZWNrIGZvciBuZXcgdmVyc2lvbi4gICovCistCSAgb2Zmc2V0ID0gQUxJR05fQ0FDSEUgKHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGUpCistCQkJCSsgY2FjaGUtPm5saWJzICogc2l6ZW9mIChzdHJ1Y3QgZmlsZV9lbnRyeSkpOworLQorLQkgIGNhY2hlX25ldyA9IChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcgKikgKCh2b2lkICopIGNhY2hlICsgb2Zmc2V0KTsKKy0JICBpZiAoY2FjaGVzaXplIDwgKG9mZnNldCArIHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3KSkKKy0JICAgICAgfHwgbWVtY21wIChjYWNoZV9uZXctPm1hZ2ljLCBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXLAorLQkJCSBzaXplb2YgQ0FDSEVNQUdJQ19WRVJTSU9OX05FVyAtIDEpICE9IDApCistCSAgICBjYWNoZV9uZXcgPSAodm9pZCAqKSAtMTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKGZpbGUgIT0gTUFQX0ZBSUxFRCAmJiBjYWNoZXNpemUgPiBzaXplb2YgKmNhY2hlX25ldworLQkgICAgICAgJiYgbWVtY21wIChmaWxlLCBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXLAorLQkJCSAgc2l6ZW9mIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcgLSAxKSA9PSAwKQorLQl7CistCSAgY2FjaGVfbmV3ID0gZmlsZTsKKy0JICBjYWNoZSA9IGZpbGU7CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICBpZiAoZmlsZSAhPSBNQVBfRkFJTEVEKQorLQkgICAgX19tdW5tYXAgKGZpbGUsIGNhY2hlc2l6ZSk7CistCSAgY2FjaGUgPSAodm9pZCAqKSAtMTsKKy0JfQorLQorLSAgICAgIGFzc2VydCAoY2FjaGUgIT0gTlVMTCk7CistICAgIH0KKy0KKy0gIGlmIChjYWNoZSA9PSAodm9pZCAqKSAtMSkKKy0gICAgLyogUHJldmlvdXNseSBsb29rZWQgZm9yIHRoZSBjYWNoZSBmaWxlIGFuZCBkaWRuJ3QgZmluZCBpdC4gICovCistICAgIHJldHVybiBOVUxMOworLQorLSAgYmVzdCA9IE5VTEw7CistCistICBpZiAoY2FjaGVfbmV3ICE9ICh2b2lkICopIC0xKQorLSAgICB7CistICAgICAgdWludDY0X3QgcGxhdGZvcm07CistCistICAgICAgLyogVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBzdGFydC4gICovCistICAgICAgY2FjaGVfZGF0YSA9IChjb25zdCBjaGFyICopIGNhY2hlX25ldzsKKy0KKy0gICAgICAvKiBOb3cgd2UgY2FuIGNvbXB1dGUgaG93IGxhcmdlIHRoZSBzdHJpbmcgdGFibGUgaXMuICAqLworLSAgICAgIGNhY2hlX2RhdGFfc2l6ZSA9IChjb25zdCBjaGFyICopIGNhY2hlICsgY2FjaGVzaXplIC0gY2FjaGVfZGF0YTsKKy0KKy0gICAgICBwbGF0Zm9ybSA9IF9kbF9zdHJpbmdfcGxhdGZvcm0gKEdMUk8oZGxfcGxhdGZvcm0pKTsKKy0gICAgICBpZiAocGxhdGZvcm0gIT0gKHVpbnQ2NF90KSAtMSkKKy0JcGxhdGZvcm0gPSAxVUxMIDw8IHBsYXRmb3JtOworLQorLSNkZWZpbmUgX0RMX0hXQ0FQX1RMU19NQVNLICgxTEwgPDwgNjMpCistICAgICAgdWludDY0X3QgaHdjYXBfZXhjbHVkZSA9IH4oKEdMUk8oZGxfaHdjYXApICYgR0xSTyhkbF9od2NhcF9tYXNrKSkKKy0JCQkJIHwgX0RMX0hXQ0FQX1BMQVRGT1JNIHwgX0RMX0hXQ0FQX1RMU19NQVNLKTsKKy0KKy0gICAgICAvKiBPbmx5IGFjY2VwdCBod2NhcCBpZiBpdCdzIGZvciB0aGUgcmlnaHQgcGxhdGZvcm0uICAqLworLSNkZWZpbmUgSFdDQVBfQ0hFQ0sgXAorLSAgICAgIGlmIChsaWItPmh3Y2FwICYgaHdjYXBfZXhjbHVkZSkJCQkJCSAgICAgIFwKKy0JY29udGludWU7CQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoR0xSTyhkbF9vc3ZlcnNpb24pICYmIGxpYi0+b3N2ZXJzaW9uID4gR0xSTyhkbF9vc3ZlcnNpb24pKQkgICAgICBcCistCWNvbnRpbnVlOwkJCQkJCQkgICAgICBcCistICAgICAgaWYgKF9ETF9QTEFURk9STVNfQ09VTlQJCQkJCQkgICAgICBcCistCSAgJiYgKGxpYi0+aHdjYXAgJiBfRExfSFdDQVBfUExBVEZPUk0pICE9IDAJCQkgICAgICBcCistCSAgJiYgKGxpYi0+aHdjYXAgJiBfRExfSFdDQVBfUExBVEZPUk0pICE9IHBsYXRmb3JtKQkJICAgICAgXAorLQljb250aW51ZQorLSAgICAgIFNFQVJDSF9DQUNIRSAoY2FjaGVfbmV3KTsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgLyogVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBzdGFydC4gICovCistICAgICAgY2FjaGVfZGF0YSA9IChjb25zdCBjaGFyICopICZjYWNoZS0+bGlic1tjYWNoZS0+bmxpYnNdOworLQorLSAgICAgIC8qIE5vdyB3ZSBjYW4gY29tcHV0ZSBob3cgbGFyZ2UgdGhlIHN0cmluZyB0YWJsZSBpcy4gICovCistICAgICAgY2FjaGVfZGF0YV9zaXplID0gKGNvbnN0IGNoYXIgKikgY2FjaGUgKyBjYWNoZXNpemUgLSBjYWNoZV9kYXRhOworLQorLSN1bmRlZiBIV0NBUF9DSEVDSworLSNkZWZpbmUgSFdDQVBfQ0hFQ0sgZG8ge30gd2hpbGUgKDApCistICAgICAgU0VBUkNIX0NBQ0hFIChjYWNoZSk7CistICAgIH0KKy0KKy0gIC8qIFByaW50IG91ciByZXN1bHQgaWYgd2FudGVkLiAgKi8KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLCAwKQorLSAgICAgICYmIGJlc3QgIT0gTlVMTCkKKy0gICAgX2RsX2RlYnVnX3ByaW50ZiAoIiAgdHJ5aW5nIGZpbGU9JXNcbiIsIGJlc3QpOworLQorLSAgcmV0dXJuIGJlc3Q7CistfQorLQorLSNpZm5kZWYgTUFQX0NPUFkKKy0vKiBJZiB0aGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTUFQX0NPUFkgd2UgY2Fubm90IGxlYXZlIHRoZSBmaWxlIG9wZW4KKy0gICBhbGwgdGhlIHRpbWUgc2luY2UgdGhpcyB3b3VsZCBjcmVhdGUgcHJvYmxlbXMgd2hlbiB0aGUgZmlsZSBpcyByZXBsYWNlZC4KKy0gICBUaGVyZWZvcmUgd2UgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBmaWxlIGFuZCBvcGVuIGl0IGFnYWluCistICAgb25jZSBuZWVkZWQuICAqLworLXZvaWQKKy1fZGxfdW5sb2FkX2NhY2hlICh2b2lkKQorLXsKKy0gIGlmIChjYWNoZSAhPSBOVUxMICYmIGNhY2hlICE9IChzdHJ1Y3QgY2FjaGVfZmlsZSAqKSAtMSkKKy0gICAgeworLSAgICAgIF9fbXVubWFwIChjYWNoZSwgY2FjaGVzaXplKTsKKy0gICAgICBjYWNoZSA9IE5VTEw7CistICAgIH0KKy19CistI2VuZGlmCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2RsLWNhY2hlLmgKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmgKK0BAIC0xMDEsNSArMTAxLDQgQEAgc3RydWN0IGNhY2hlX2ZpbGVfbmV3CisgKCgoYWRkcikgKyBfX2FsaWdub2ZfXyAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3KSAtMSkJXAorICAmICh+KF9fYWxpZ25vZl9fIChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcpIC0gMSkpKQorIAorLWV4dGVybiBpbnQgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKQorLSAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrZXh0ZXJuIGludCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpOworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9sZGNvbmZpZy5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5jCitAQCAtMTYsNiArMTYsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNkZWZpbmUgUFJPQ0lORk9fQ0xBU1Mgc3RhdGljCisgI2luY2x1ZGUgPGFsbG9jYS5oPgorICNpbmNsdWRlIDxhcmdwLmg+CitAQCAtMzksMTAgKzQyLDIwIEBACisgI2luY2x1ZGUgPGdsb2IuaD4KKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CistI2luY2x1ZGUgPGRsLWNhY2hlLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrI2luY2x1ZGUgImRsLWNhY2hlLmgiCisrCisrI2luY2x1ZGUgImRsLXByb2NpbmZvLmgiCisrCisrI2luY2x1ZGUgImFyZ3AuaCIKKysKKysKKysjZGVmaW5lIFNZU0NPTkZESVIgIi9ldGMiCisrI2RlZmluZSBMSUJESVIgIi91c3IvbGliIgorKyNkZWZpbmUgU0xJQkRJUiAiL2xpYiIKKysjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisrI2RlZmluZSBfKG1zZykgbXNnCisgCistI2luY2x1ZGUgPGRsLXByb2NpbmZvLmg+CisgCisgI2lmZGVmIF9ETF9GSVJTVF9QTEFURk9STQorICMgZGVmaW5lIF9ETF9GSVJTVF9FWFRSQSAoX0RMX0ZJUlNUX1BMQVRGT1JNICsgX0RMX1BMQVRGT1JNU19DT1VOVCkKK0BAIC01NSw3ICs2OCw3IEBACisgI2VuZGlmCisgCisgLyogR2V0IGxpYmMgdmVyc2lvbiBudW1iZXIuICAqLworLSNpbmNsdWRlIDx2ZXJzaW9uLmg+CisrI2luY2x1ZGUgInZlcnNpb24uaCIKKyAKKyAjZGVmaW5lIFBBQ0tBR0UgX2xpYmNfaW50bF9kb21haW5uYW1lCisgCitAQCAtMTUyLDggKzE2NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1sKKyAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCB9CisgfTsKKyAKKy0jZGVmaW5lIFBST0NJTkZPX0NMQVNTIHN0YXRpYworLSNpbmNsdWRlIDxkbC1wcm9jaW5mby5jPgorKy8vI2RlZmluZSBQUk9DSU5GT19DTEFTUyBzdGF0aWMKKysvLyNpbmNsdWRlIDxkbC1wcm9jaW5mby5jPgorIAorIC8qIFNob3J0IGRlc2NyaXB0aW9uIG9mIHByb2dyYW0uICAqLworIHN0YXRpYyBjb25zdCBjaGFyIGRvY1tdID0gTl8oIkNvbmZpZ3VyZSBEeW5hbWljIExpbmtlciBSdW4gVGltZSBCaW5kaW5ncy4iKTsKK0BAIC0yOTEsNiArMzA0LDcgQEAgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcgorICAgcmV0dXJuIDA7CisgfQorIAorKyNkZWZpbmUgUkVQT1JUX0JVR1NfVE8gIm1haWxpbmcgbGlzdCA6IHBva3lAeW9jdG9wcm9qZWN0Lm9yZyIKKyAvKiBQcmludCBidWctcmVwb3J0aW5nIGluZm9ybWF0aW9uIGluIHRoZSBoZWxwIG1lc3NhZ2UuICAqLworIHN0YXRpYyBjaGFyICoKKyBtb3JlX2hlbHAgKGludCBrZXksIGNvbnN0IGNoYXIgKnRleHQsIHZvaWQgKmlucHV0KQorQEAgLTMxNSw3ICszMjksNyBAQCBGb3IgYnVnIHJlcG9ydGluZyBpbnN0cnVjdGlvbnMsIHBsZWFzZSBzCisgc3RhdGljIHZvaWQKKyBwcmludF92ZXJzaW9uIChGSUxFICpzdHJlYW0sIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyB7CistICBmcHJpbnRmIChzdHJlYW0sICJsZGNvbmZpZyAlcyVzXG4iLCBQS0dWRVJTSU9OLCBWRVJTSU9OKTsKKysgIGZwcmludGYgKHN0cmVhbSwgImxkY29uZmlnIChIYWNrZWQgUG9reSBWZXJzaW9uKVxuIik7CisgICBmcHJpbnRmIChzdHJlYW0sIGdldHRleHQgKCJcCisgQ29weXJpZ2h0IChDKSAlcyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cblwKKyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuXAorQEAgLTEyMzMsNiArMTI0Nyw3IEBAIHNldF9od2NhcCAodm9pZCkKKyAgICAgaHdjYXBfbWFzayA9IHN0cnRvdWwgKG1hc2ssIE5VTEwsIDApOworIH0KKyAKKytjb25zdCBjaGFyIF9saWJjX2ludGxfZG9tYWlubmFtZVtdID0gImxpYmMiOworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworQEAgLTIyLDYgKzIyLDkgQEAKKyAgICBkZXZlbG9wbWVudCB2ZXJzaW9uLiAgQmVzaWRlcyB0aGUgc2ltcGxpZmljYXRpb24sIGl0IGhhcyBhbHNvIGJlZW4KKyAgICBtb2RpZmllZCB0byByZWFkIHNvbWUgb3RoZXIgZmlsZSBmb3JtYXRzLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2luY2x1ZGUgPGEub3V0Lmg+CisgI2luY2x1ZGUgPGVsZi5oPgorICNpbmNsdWRlIDxlcnJvci5oPgorQEAgLTM1LDcgKzM4LDkgQEAKKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8Z251L2xpYi1uYW1lcy5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKworKyNkZWZpbmUgXyhtc2cpIG1zZworIAorICNkZWZpbmUgRWxmMzJfQ0xBU1MgRUxGQ0xBU1MzMgorICNkZWZpbmUgRWxmNjRfQ0xBU1MgRUxGQ0xBU1M2NAorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEveHN0cmR1cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3hzdHJkdXAuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEveHN0cmR1cC5jCitAQCAtMTYsMTUgKzE2LDEwIEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSNlbmRpZgorIHZvaWQgKnhtYWxsb2MgKHNpemVfdCBuKSBfX1RIUk9XOworIGNoYXIgKnhzdHJkdXAgKGNoYXIgKnN0cmluZykgX19USFJPVzsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmM0MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDb21pbmcgZnJvbSB0aGlzIGJ1ZzogaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMTE0OQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPjIwMTEvMDMvMjkKKworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9sZGNvbmZpZy5jCQorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcuYwkKK0BAIC0xMzU5LDE0ICsxMzU5LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorICAgY29uc3QgY2hhciAqYXV4X2NhY2hlX2ZpbGUgPSBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEU7CisgICBpZiAob3B0X2Nocm9vdCkKKy0gICAgeworLSAgICAgIGF1eF9jYWNoZV9maWxlID0gY2hyb290X2Nhbm9uIChvcHRfY2hyb290LCBhdXhfY2FjaGVfZmlsZSk7CistICAgICAgaWYgKGF1eF9jYWNoZV9maWxlID09IE5VTEwpCistCWVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCBfKCJDYW4ndCBvcGVuIGNhY2hlIGZpbGUgJXNcbiIpLAorLQkgICAgICAgX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFKTsKKy0gICAgfQorKyAgICBhdXhfY2FjaGVfZmlsZSA9IGNocm9vdF9jYW5vbiAob3B0X2Nocm9vdCwgYXV4X2NhY2hlX2ZpbGUpOworIAorLSAgaWYgKCEgb3B0X2lnbm9yZV9hdXhfY2FjaGUpCisrICBpZiAoISBvcHRfaWdub3JlX2F1eF9jYWNoZSAmJiBhdXhfY2FjaGVfZmlsZSkKKyAgICAgbG9hZF9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKyAgIGVsc2UKKyAgICAgaW5pdF9hdXhfY2FjaGUgKCk7CitAQCAtMTM3Niw3ICsxMzcxLDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgaWYgKG9wdF9idWlsZF9jYWNoZSkKKyAgICAgeworICAgICAgIHNhdmVfY2FjaGUgKGNhY2hlX2ZpbGUpOworLSAgICAgIHNhdmVfYXV4X2NhY2hlIChhdXhfY2FjaGVfZmlsZSk7CisrICAgICAgaWYgKGF1eF9jYWNoZV9maWxlKQorKyAgICAgICAgc2F2ZV9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKyAgICAgfQorIAorICAgcmV0dXJuIDA7CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlXzIuMTIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlXzIuMTIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2MwYjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmVfMi4xMi4xLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiQSBzdGFuZGFsb25lIG5hdGl2ZSBsZGNvbmZpZyBidWlsZCIKKworTElDRU5TRSA9ICJHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vbGRjb25maWcuYztlbmRsaW5lPTE3O21kNT0xZDE1ZjIwOTM3YzA1NWNiNWRlMjMyOWE0YzA1NDM5OSIKKworU1JDX1VSSSA9ICJmaWxlOi8vbGRjb25maWctbmF0aXZlLTIuMTIuMS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xkY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkY29uZmlnX2F1eC1jYWNoZV9wYXRoX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8zMmFuZDY0Yml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZsYWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbmVzcy1oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLTY0LWJpdC1mbGFnLWZvci1FTEY2NC1lbnRyaWVzLnBhdGNoIFwKKyIKKworUFIgPSAicjIiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UH06IgorCitpbmhlcml0IG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vJHtQTn0tJHtQVn0iCisKK2RvX2NvbXBpbGUgKCkgeworCSRDQyBsZGNvbmZpZy5jIC1zdGQ9Z251OTkgY2hyb290X2Nhbm9uLmMgeG1hbGxvYy5jIHhzdHJkdXAuYyBjYWNoZS5jIHJlYWRsaWIuYyAgLUkuIGRsLWNhY2hlLmMgLW8gbGRjb25maWcKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfS8KKwlpbnN0YWxsIGxkY29uZmlnICR7RH0vJHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9mdW5jcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjODUzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKQEAgLTAsMCArMSw0NzQgQEAKK2E2NGwKK2FicworYWNjZXNzCitfX2FkanRpbWV4CithbGFybQorYWxwaGFzb3J0Cithcmd6X2FwcGVuZAorX19hcmd6X2NvdW50Cithcmd6X2NyZWF0ZV9zZXAKK2FyZ3pfaW5zZXJ0CitfX2FyZ3pfbmV4dAorYXJnel9uZXh0CitfX2FyZ3pfc3RyaW5naWZ5Cithcmd6X3N0cmluZ2lmeQorYXNwcmludGYKK2F0ZXhpdAorYXRvZgorYXRvaQorYmNtcAorYmNvcHkKK2JpbmRyZXN2cG9ydAorYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKK2J0b3djCitiemVybworY2FsbG9jCitjYW5vbmljYWxpemVfZmlsZV9uYW1lCitjYXRnZXRzCitjZmdldG9zcGVlZAorY2ZzZXRpc3BlZWQKK2Nmc2V0c3BlZWQKK2NobW9kCitjaG93bgorY2hyb290CitjbG9jaworY2xvc2UKK2Nsb3NlZGlyCitjbG9zZWxvZworY29uZnN0cgorY29ubmVjdAorZGFlbW9uCitkY2dldHRleHQKK2RpZmZ0aW1lCitkaXJmZAorZGlybmFtZQorZG5nZXR0ZXh0CitkdXAyCitlY3Z0CitlbmRncmVudAorZW5kbW50ZW50CitlbmRwd2VudAorZW5kdXRlbnQKK2VuZHV0eGVudAorZXBvbGxfY3RsCitlcnIKK2V0aGVyX2hvc3R0b24KK2V0aGVyX250b2hvc3QKK2V1aWRhY2Nlc3MKK2V4ZWN2CitmY2hkaXIKK2ZjaG1vZAorZmNobW9kYXQKK2ZjaG93bgorZmNob3duYXQKK2ZjbnRsCitmY3Z0CitmZGF0YXN5bmMKK2Zkb3BlbmRpcgorZmVvZl91bmxvY2tlZAorZmdldHNfdW5sb2NrZWQKK2ZnZXR4YXR0cgorZmluaXRlCitmbGlzdHhhdHRyCitmbG9jaworZmxvY2tmaWxlCitmbm1hdGNoCitmb3JrCitmcGF0aGNvbmYKK19fZnBlbmRpbmcKK2ZwcmludGYKK2ZyZWUKK2ZyZWVhZGRyaW5mbworZnJlZWlmYWRkcnMKK2ZzZWVrbworX19mc2V0bG9ja2luZworZnNldHhhdHRyCitmc3RhdDY0Citmc3RhdAorZnN0YXRmcworZnN5bmMKK2Z0ZWxsbworZnRpbWUKK2Z0cnVuY2F0ZQorZnVubG9ja2ZpbGUKK2Z1dGltZXMKK2Z1dGltZXNhdAorZ2FpX3N0cmVycm9yCitnY3Z0CitnZXRhZGRyaW5mbworZ2V0Y191bmxvY2tlZAorZ2V0Y3dkCitnZXRkZWxpbQorZ2V0ZG9tYWlubmFtZQorZ2V0ZHRhYmxlc2l6ZQorZ2V0ZWdpZAorZ2V0ZW52CitnZXRldWlkCitnZXRnaWQKK2dldGdyZW50CitnZXRncmVudF9yCitnZXRncmdpZF9yCitnZXRncm5hbQorZ2V0Z3JuYW1fcgorZ2V0Z3JvdXBsaXN0CitnZXRncm91cHMKK2dldGhvc3RieWFkZHJfcgorZ2V0aG9zdGJ5bmFtZTIKK2dldGhvc3RieW5hbWUKK2dldGhvc3RieW5hbWVfcgorZ2V0aG9zdGVudAorZ2V0aG9zdGlkCitnZXRob3N0bmFtZQorZ2V0aWZhZGRycworZ2V0bGluZQorZ2V0bG9hZGF2ZworZ2V0bW50ZW50CitnZXRtc2cKK2dldG5hbWVpbmZvCitnZXRuZXRieWFkZHJfcgorZ2V0bmV0Z3JlbnRfcgorZ2V0b3B0CitnZXRvcHRfbG9uZworZ2V0b3B0X2xvbmdfb25seQorZ2V0cGFnZXNpemUKK2dldHBhc3MKK2dldHBlZXJuYW1lCitnZXRwZ3JwCitnZXRwaWQKK2dldHBwaWQKK2dldHByb3RvZW50X3IKK2dldHB3ZW50CitnZXRwd2VudF9yCitnZXRwd25hbQorZ2V0cHduYW1fcgorZ2V0cHd1aWQKK2dldHB3dWlkX3IKK2dldHJlc3VpZAorZ2V0cmxpbWl0CitnZXRydXNhZ2UKK2dldHNlcnZieW5hbWUKK2dldHNlcnZieW5hbWVfcgorZ2V0c2VydmJ5cG9ydF9yCitnZXRzZXJ2ZW50CitnZXRzZXJ2ZW50X3IKK2dldHNwbmFtCitnZXRzcG5hbV9yCitnZXR0aW1lb2ZkYXkKK2dldHR0eWVudAorZ2V0dHR5bmFtCitnZXR1aWQKK2dldHVzZXJzaGVsbAorZ2V0dXRlbnQKK2dldHV0aWQKK2dldHV0bGluZQorZ2V0dXRtcAorZ2V0dXRtcHgKK2dldHV0eGVudAorZ2V0dXR4aWQKK2dldHV0eGxpbmUKK2dldHdkCitnZXR4YXR0cgorZ2xvYgorZ210aW1lCitnbXRpbWVfcgorZ3JhbnRwdAorZ3JvdXBfbWVtYmVyCitoZXJyb3IKK2hzdHJlcnJvcgoraWNvbnYKK2ljb252X29wZW4KK2lmX2ZyZWVuYW1laW5kZXgKK2lmX2luZGV4dG9uYW1lCitpZl9uYW1laW5kZXgKK2lmX25hbWV0b2luZGV4CitpbmRleAoraW5ldF9hZGRyCitpbmV0X2F0b24KK2luZXRfbnRvYQoraW5ldF9udG9wCitpbmV0X3B0b24KK2luaXRncm91cHMKK2lubmV0Z3IKK2lydXNlcm9rCitpc2FzY2lpCitpc2F0dHkKK2lzYmxhbmsKK2lzZ3JhcGgKK2lzaW5mCitpc25hbgoraXNwcmludAoraXNzcGFjZQoraXN3YWxudW0KK2lzd2NudHJsCitpc3djdHlwZQoraXN3cHJpbnQKK2lzd3NwYWNlCitpc3d1cHBlcgoraXN4ZGlnaXQKK2tpbGwKK2tpbGxwZworbGNob3duCitsY2twd2RmCitsZ2V0eGF0dHIKK2xpbmsKK2xpc3R4YXR0cgorbGxpc3R4YXR0cgorbG9jYWx0aW1lCitsb2NhbHRpbWVfcgorbG9ja2YKK2xyYW5kNDgKK2xzZWFyY2gKK2xzZWVrNjQKK2xzZXR4YXR0cgorbHN0YXQKK21hbGxpbmZvCittYWxsb2MKK21ibGVuCittYnJsZW4KK21icnRvd2MKK21ic2luaXQKK21ic3J0b3djcworbWJ0b3djCittZW1hbGlnbgorbWVtY2hyCittZW1jbXAKK21lbWNweQorbWVtbW92ZQorbWVtcGNweQorbWVtcmNocgorbWVtc2V0Citta2RpcgorbWtkaXJhdAorbWtkdGVtcAorbWtmaWZvCitta25vZAorbWtzdGVtcDY0Citta3N0ZW1wCitta3RpbWUKK21sb2NrCittbWFwCittdHJhY2UKK211bmxvY2sKK211bm1hcAorbmFub3NsZWVwCituaWNlCitubF9sYW5naW5mbworbnRwX2FkanRpbWUKK250cF9nZXR0aW1lCitfb2JzdGFja19mcmVlCitvbl9leGl0CitvcGVuNjQKK29wZW4KK29wZW5hdAorb3BlbmRpcgorb3BlbmxvZworcGF0aGNvbmYKK3BpcGUKK3BvbGwKK3BvcGVuCitwb3NpeF9tZW1hbGlnbgorcHJjdGwKK3ByZWFkCitwcmludGYKK19fcHJvZ25hbWUKK3BzZWxlY3QKK3B0aHJlYWRfbXV0ZXhfbG9jaworcHRzbmFtZQorcHV0ZW52CitwdXRncmVudAorcHV0cHdlbnQKK3B1dHNwZW50CitwdXR1dGxpbmUKK3B1dHV0eGxpbmUKK3B1dHdjCitwd3JpdGUKK3Fzb3J0CityYWlzZQorcmFuZAorcmFuZG9tCityYW5kX3IKK3JlYWQKK3JlYWRkaXIKK3JlYWRkaXJfcgorcmVhZGxpbmsKK3JlYWxsb2MKK3JlYWxwYXRoCityZV9jb21wCityZWN2bXNnCityZV9leGVjCityZWdjb21wCityZWdleGVjCityZW1vdmUKK3JlbmFtZQorcmVfc2VhcmNoCitybWRpcgorcnBtYXRjaAorcnJlc3Zwb3J0X2FmCitydXNlcm9rCitydXNlcm9rX2FmCitzYnJrCitzY2FuZGlyCitzY2hlZF9zZXRzY2hlZHVsZXIKK3NjaGVkX3lpZWxkCitfX3NlY3VyZV9nZXRlbnYKK3NlbGVjdAorc2VtY3RsCitzZW1nZXQKK3NlbmRtc2cKK3NldGJ1Zgorc2V0YnVmZmVyCitzZXRlZ2lkCitzZXRlbnYKK3NldGV1aWQKK3NldGdpZAorc2V0Z3JvdXBzCitzZXRob3N0bmFtZQorc2V0aXRpbWVyCitfc2V0am1wCitzZXRqbXAKK3NldGxpbmVidWYKK3NldGxvY2FsZQorc2V0bW50ZW50CitzZXRwZ2lkCitzZXRwZ3JwCitzZXRwcmlvcml0eQorc2V0cmVnaWQKK3NldHJlc2dpZAorc2V0cmVzdWlkCitzZXRyZXVpZAorc2V0cmxpbWl0CitzZXRzaWQKK3NldHNvY2tvcHQKK3NldHRpbWVvZmRheQorc2V0dWlkCitzZXR1dGVudAorc2V0dXR4ZW50CitzZXR2YnVmCitzZXR4YXR0cgorc2dldHNwZW50CitzaG1hdAorc2htY3RsCitzaG1kdAorc2htZ2V0CitzaHV0ZG93bgorc2lnYWN0aW9uCitzaWdhZGRzZXQKK3NpZ2FsdHN0YWNrCitzaWdibG9jaworc2lnZW1wdHlzZXQKK3NpZ2hvbGQKK3NpZ2ludGVycnVwdAorc2lnbmFsCitzaWdwcm9jbWFzaworc2lnc2V0CitzaWdzZXRtYXNrCitzaWdzdGFjaworc2lnc3VzcGVuZAorc2lndmVjCitzbnByaW50Zgorc29ja2V0Citzb2NrZXRwYWlyCitzcHJpbnRmCitzcmFuZDQ4CitzcmFuZAorc3JhbmRvbQorc3NjYW5mCitzdGF0CitzdGF0ZnMKK3N0YXR2ZnMKK3N0aW1lCitzdHBjcHkKK3N0cmNhc2VjbXAKK3N0cmNhc2VzdHIKK3N0cmNocgorc3RyY2hybnVsCitzdHJjbXAKK3N0cmNzcG4KK3N0cmR1cAorc3RyZXJyb3IKK3N0cmVycm9yX3IKK3N0cmZ0aW1lCitzdHJsZW4KK3N0cm5jYXNlY21wCitzdHJuY21wCitzdHJuZHVwCitzdHJubGVuCitzdHJwYnJrCitzdHJwdGltZQorc3RycmNocgorc3Ryc2VwCitzdHJzaWduYWwKK3N0cnNwbgorc3Ryc3RyCitzdHJ0b2QKK3N0cnRvaW1heAorc3RydG9rX3IKK3N0cnRvbAorc3RydG9sbAorc3RydG91bAorc3RydG91bGwKK3N0cnRvdW1heAorc3RydmVyc2NtcAorc3RyeGZybQorc3ltbGluaworc3luYworc3lzY29uZgorc3lzY3RsCitzeXNpbmZvCitzeXNsb2cKK19zeXNfc2lnbGlzdAorc3lzX3NpZ2xpc3QKK3N5c3RlbQordGNnZXRhdHRyCit0Y2dldHBncnAKK3Rjc2V0YXR0cgordGNzZXRwZ3JwCit0aW1lCit0aW1lZ20KK3RpbWVzCit0aW1lem9uZQordG1wbmFtCit0b3dsb3dlcgordG93dXBwZXIKK3RydW5jYXRlCit0c2VhcmNoCit0dHluYW1lCit0enNldAordWxpbWl0Cit1bWFzawordW5hbWUKK3VubGluawordW5zZXRlbnYKK3Vuc2hhcmUKK3VwZHd0bXAKK3VwZHd0bXB4Cit1c2xlZXAKK3VzdGF0Cit1dGltZQordXRpbWVzCit1dG1wbmFtZQordXRtcHhuYW1lCit2YWxsb2MKK3Zhc3ByaW50ZgordmVycngKK3Zmb3JrCit2ZnByaW50ZgordmZzY2FuZgordmhhbmd1cAordnByaW50ZgordnNucHJpbnRmCit2c3ByaW50Zgord2FpdDMKK3dhaXQ0Cit3YWl0cGlkCit3Y3J0b21iCit3Y3Njb2xsCit3Y3NkdXAKK3djc2xlbgord2N0b2IKK3djdG9tYgord2N0eXBlCit3Y3dpZHRoCit3bWVtY2hyCit3bWVtY3B5Cit3bWVtcGNweQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOWFiNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKQEAgLTAsMCArMSwxNTYgQEAKK2Fpby5oCithbGxvY2EuaAorYXJnei5oCithcnBhL2luZXQuaAorYXJwYS9uYW1lc2VyLmgKK2FzbS9ieXRlb3JkZXIuaAorYXNtL2lvY3Rscy5oCithc20vcGFnZS5oCithc20vdHlwZXMuaAorYXNzZXJ0LmgKK2J5dGVzd2FwLmgKK2NyeXB0LmgKK2N0eXBlLmgKK2RpcmVudC5oCitkbGZjbi5oCitlbGYuaAorZW5kaWFuLmgKK2Vyci5oCitlcnJuby5oCitleGVjaW5mby5oCitmY250bC5oCitmZWF0dXJlcy5oCitmbG9hdC5oCitmc3RhYi5oCitmdHcuaAorZ2V0b3B0LmgKK2dsb2IuaAorZ3JwLmgKK2ljb252LmgKK2lmYWRkcnMuaAoraW50dHlwZXMuaAorbGFuZ2luZm8uaAorbGFzdGxvZy5oCitsaWJnZW4uaAorbGliaW50bC5oCitsaW1pdHMuaAorbGludXgvY2FwYWJpbGl0eS5oCitsaW51eC9mZC5oCitsaW51eC9mcy5oCitsaW51eC9oYXllc2VzcC5oCitsaW51eC9oZHJlZy5oCitsaW51eC9pY21wLmgKK2xpbnV4L2luNi5oCitsaW51eC9qb3lzdGljay5oCitsaW51eC9wdHJhY2UuaAorbGludXgvc2VyaWFsLmgKK2xpbnV4L3NvbnlwaS5oCitsaW51eC91bmlzdGQuaAorbGludXgvdXRzbmFtZS5oCitsaW51eC92ZXJzaW9uLmgKK2xvY2FsZS5oCittYWxsb2MuaAorbWF0aC5oCittY2hlY2suaAorbWVtb3J5LmgKK21udGVudC5oCittcXVldWUuaAorbmV0ZGIuaAorbmV0L2lmLmgKK25ldGluZXQvZXRoZXIuaAorbmV0aW5ldC9pbi5oCituZXRpbmV0L2lwNi5oCituZXRpbmV0L2lwLmgKK25ldGluZXQvdGNwLmgKK25ldGluZXQvdWRwLmgKK25ldGlweC9pcHguaAorbmV0L3JvdXRlLmgKK3BhdGhzLmgKK3BvbGwuaAorcHRocmVhZC5oCitwdHkuaAorcHdkLmgKK3JlZ2V4LmgKK3Jlc29sdi5oCitycGMvcnBjLmgKK3JwYy90eXBlcy5oCitzY2hlZC5oCitzY3NpL3Njc2kuaAorc2VhcmNoLmgKK3NlbWFwaG9yZS5oCitzZXRqbXAuaAorc2d0dHkuaAorc2hhZG93LmgKK3NpZ25hbC5oCitzdGRhcmcuaAorc3RkYm9vbC5oCitzdGRjCitzdGRkZWYuaAorc3RkaW50LmgKK3N0ZGlvLmgKK3N0ZGxpYi5oCitzdHJpbmcuaAorc3RyaW5ncy5oCitzdHJvcHRzLmgKK3N5cy9iaXR5cGVzLmgKK3N5cy9jZGVmcy5oCitzeXMvZGlyLmgKK3N5cy9lcG9sbC5oCitzeXNleGl0cy5oCitzeXMvZmNudGwuaAorc3lzL2ZpbGUuaAorc3lzL2ZzdWlkLmgKK3N5cy9pb2N0bC5oCitzeXMvaXBjLmgKK3N5c2xvZy5oCitzeXMvbW1hbi5oCitzeXMvbW91bnQuaAorc3lzL210aW8uaAorc3lzL3BhcmFtLmgKK3N5cy9wb2xsLmgKK3N5cy9wcmN0bC5oCitzeXMvcHRyYWNlLmgKK3N5cy9xdWV1ZS5oCitzeXMvcmVnLmgKK3N5cy9yZXNvdXJjZS5oCitzeXMvc2VsZWN0LmgKK3N5cy9zZW0uaAorc3lzL3NobS5oCitzeXMvc2lnbmFsLmgKK3N5cy9zb2NrZXQuaAorc3lzL3NvY2tldHZhci5oCitzeXMvc291bmRjYXJkLmgKK3N5cy9zdGF0ZnMuaAorc3lzL3N0YXQuaAorc3lzL3N0YXR2ZnMuaAorc3lzL3N0cm9wdHMuaAorc3lzL3N3YXAuaAorc3lzL3N5c2N0bC5oCitzeXMvc3lzaW5mby5oCitzeXMvc3lzbWFjcm9zLmgKK3N5cy90ZXJtaW9zLmgKK3N5cy90aW1lYi5oCitzeXMvdGltZS5oCitzeXMvdGltZXMuaAorc3lzL3RpbWV4LmgKK3N5cy90eXBlcy5oCitzeXMvdWlvLmgKK3N5cy91bi5oCitzeXMvdW5pc3RkLmgKK3N5cy91c2VyLmgKK3N5cy91dHNuYW1lLmgKK3N5cy92ZnMuaAorc3lzL3dhaXQuaAordGVybWlvLmgKK3Rlcm1pb3MuaAordGltZS5oCit0dHllbnQuaAordWxpbWl0LmgKK3VuaXN0ZC5oCit1c3RhdC5oCit1dGltZS5oCit1dG1wLmgKK3V0bXB4LmgKK3ZhbHVlcy5oCit3Y2hhci5oCit3Y3R5cGUuaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4YmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKQEAgLTAsMCArMSwyMSBAQAorY2hhcgorY2hhciAqCitkb3VibGUKK2Zsb2F0CitpbnQKK2xvbmcKK2xvbmcgZG91YmxlCitsb25nIGludAorbG9uZyBsb25nCitsb25nIGxvbmcgaW50CitzaG9ydAorc2hvcnQgaW50CitzaWduZWQgY2hhcgordW5zaWduZWQgY2hhcgordW5zaWduZWQgaW50Cit1bnNpZ25lZCBsb25nCit1bnNpZ25lZCBsb25nIGludAordW5zaWduZWQgbG9uZyBsb25nIGludAordW5zaWduZWQgc2hvcnQKK3Vuc2lnbmVkIHNob3J0IGludAordm9pZCAqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzLzk5X25ldHdvcmsgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzLzk5X25ldHdvcmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkNTg5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvOTlfbmV0d29yawpAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzU1IC9ydW4vbmV0d29yayBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0ZDk1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDdhZjlkYjc0ODk3NGNiM2EyYzZlZjhmOWUwM2Q3ZGIxZjlmOGVlMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgNiBBdWcgMjAxNCAxNDo1NDoxMiAtMDQwMAorU3ViamVjdDogW1BBVENIIDEvMl0gZGVmbjJbY3xtYW5dOiBkb24ndCByZWx5IG9uIGRwa2ctYXJjaGl0ZWN0dXJlIHRvIHNldCBhcmNoCisKK0luIHlvY3RvIHdlJ2xsIGFsd2F5cyBiZSBjcm9zcyBjb21waWxpbmcsIGFuZCB3ZSdsbCBhbHdheXMKK2JlIGJ1aWxkaW5nIG9uIGxpbnV4IGZvciBsaW51eCAodnMuICpCU0QsIGh1cmQsIGV0Yy4pCisKK1dpdGhvdXQgdGhpcyB0aGUgYXJjaCBpcyBub3QgZGV0ZWN0ZWQsIGJ1dCBpdCBkb2Vzbid0IGVycm9yCitvdXQsIGFuZCBoZW5jZSB5b3UgZ2V0IHVzZWxlc3MgYmluYXJpZXMgdGhhdCBkb24ndCBrbm93IGFueQorYXJjaCBzcGVjaWZpYyBtZXRob2RzLCBhbmQgdGhlIGVuZCByZXN1bHQgd2lsbCBiZSBzdHJhbmdlbmVzcworbGlrZSB0aGUgbG9vcGJhY2sgZGV2aWNlIG5vdCBiZWluZyBjb25maWd1cmVkL2VuYWJsZWQuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorLS0tCisgZGVmbjJjLnBsICAgfCA2ICsrKy0tLQorIGRlZm4ybWFuLnBsIHwgNiArKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RlZm4yYy5wbCBiL2RlZm4yYy5wbAoraW5kZXggYzQ0OWRlMmYzZDFjLi4zODg0NWUzNzRjNzYgMTAwNzU1CistLS0gYS9kZWZuMmMucGwKKysrKyBiL2RlZm4yYy5wbAorQEAgLTIsOSArMiw5IEBACisgCisgdXNlIHN0cmljdDsKKyAKKy1teSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworLQorLSRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKysjbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKysjJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworK215ICRERUJfSE9TVF9BUkNIX09TID0ibGludXgiOworIAorICMgZGVjbGFyYXRpb25zCisgbXkgJGFkZHJlc3NfZmFtaWx5ID0gIiI7CitkaWZmIC0tZ2l0IGEvZGVmbjJtYW4ucGwgYi9kZWZuMm1hbi5wbAoraW5kZXggNmRkY2ZkZDRmZTY4Li5jOWM0ZGQwNDY1OTcgMTAwNzU1CistLS0gYS9kZWZuMm1hbi5wbAorKysrIGIvZGVmbjJtYW4ucGwKK0BAIC0yLDkgKzIsOSBAQAorIAorIHVzZSBzdHJpY3Q7CisgCistbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKy0KKy0kREVCX0hPU1RfQVJDSF9PUyA9fiBzL1xuLy87CisrI215ICRERUJfSE9TVF9BUkNIX09TID0gYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSF9PU2A7CisrIyRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKytteSAkREVCX0hPU1RfQVJDSF9PUyA9ICJsaW51eCI7CisgCisgIyBkZWNsYXJhdGlvbnMKKyBteSAkbGluZTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmYzNTJlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitGcm9tIDc0MTUyYWM3NGEzZTFlYTBmM2JlMjkyYWExZWVjYTVhZDFmZTY5YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgNiBBdWcgMjAxNCAxNToxMjoxMSAtMDQwMAorU3ViamVjdDogW1BBVENIIDIvMl0gaW5ldFs2XS5kZWZuOiBmaXggaW52ZXJ0ZWQgY2hlY2tzIGZvciBsb29wYmFjaworCitDb21wYXJlZCB0byB0aGUgaHVyZCBsaW5rLmRlZm4gZm9yIGxvb3BiYWNrLCB3ZSBzZWUgdGhlc2UKK2FyZSBpbnZlcnRlZCwgbWVhbmluZyB0aGF0IHlvdSB3b3VsZCBvbmx5IGJlIGFibGUgdG8gY29uZmlndXJlCithIGxvb3BiYWNrIGRldmljZSB0aGF0IHdhcyBfbm90XyBuYW1lZCAibG8iICh1bmxpa2VseSB0byBleGlzdCkuCisKK1RoZSByZXN1bHQgd2FzIHRoYXQgd2UnZCB1cGRhdGUgL3J1bi9uZXR3b3JrL2lmc3RhdGUgZm9yICJsbyIKK2J1dCBuZXZlciBhY3R1YWxseSBkbyBhbnl0aGluZyBmb3IgdXAvZG93biwgYXMgc2hvd24gYmVsb3c6CisKK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIC1zCitJZmFjZSAgIE1UVSBNZXQgICBSWC1PSyBSWC1FUlIgUlgtRFJQIFJYLU9WUiAgICBUWC1PSyBUWC1FUlIgVFgtRFJQIFRYLU9WUiBGbGcKK2V0aDAgICAgICAgMTUwMCAwICAgNzczNjMyOSAgICAgIDAgICAyMDE2IDAgICAgICAgNTI4OTQyMiAgICAgIDAgICAgICAwICAgICAgMCBCTVJVCitsbyAgICAgICAgNjU1MzYgMCAgICAgICAgMTggICAgICAwICAgICAgMCAwICAgICAgICAgICAgMTggICAgICAwICAgICAgMCAgICAgIDAgTFJVCityb290QGxvY2FsaG9zdDp+IyBpZmRvd24gbG8KK3Jvb3RAbG9jYWxob3N0On4jIGVjaG8gJD8KKzAKK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIC1zCitJZmFjZSAgIE1UVSBNZXQgICBSWC1PSyBSWC1FUlIgUlgtRFJQIFJYLU9WUiAgICBUWC1PSyBUWC1FUlIgVFgtRFJQIFRYLU9WUiBGbGcKK2V0aDAgICAgICAgMTUwMCAwICAgNzczNjQwNiAgICAgIDAgICAyMDE2IDAgICAgICAgNTI4OTQ1NSAgICAgIDAgICAgICAwICAgICAgMCBCTVJVCitsbyAgICAgICAgNjU1MzYgMCAgICAgICAgMTggICAgICAwICAgICAgMCAwICAgICAgICAgICAgMTggICAgICAwICAgICAgMCAgICAgIDAgTFJVCityb290QGxvY2FsaG9zdDp+IyBpZmNvbmZpZyBsbyBkb3duCityb290QGxvY2FsaG9zdDp+IyBpZmNvbmZpZyAtcworSWZhY2UgICBNVFUgTWV0ICAgUlgtT0sgUlgtRVJSIFJYLURSUCBSWC1PVlIgICAgVFgtT0sgVFgtRVJSIFRYLURSUCBUWC1PVlIgRmxnCitldGgwICAgICAgIDE1MDAgMCAgIDc3MzY0NzQgICAgICAwICAgMjAxNiAwICAgICAgIDUyODk0ODEgICAgICAwICAgICAgMCAgICAgIDAgQk1SVQorcm9vdEBsb2NhbGhvc3Q6fiMKKworU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmV0LmRlZm4gIHwgMTIgKysrKysrLS0tLS0tCisgaW5ldDYuZGVmbiB8ICA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luZXQuZGVmbiBiL2luZXQuZGVmbgoraW5kZXggYjE3NmFiNGVkMDNlLi41ZmRmYjE0YTBlMWMgMTAwNjQ0CistLS0gYS9pbmV0LmRlZm4KKysrKyBiL2luZXQuZGVmbgorQEAgLTYsMTAgKzYsMTAgQEAgbWV0aG9kIGxvb3BiYWNrCisgICAgIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGRlZmluZSB0aGUgSVB2NCBsb29wYmFjayBpbnRlcmZhY2UuCisgCisgICB1cAorLSAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSB1cCBpZiAoIWlmYWNlX2lzX2xvKCkpCisrICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIGlmIChpZmFjZV9pc19sbygpKQorIAorICAgZG93bgorLSAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biBpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyBtZXRob2Qgc3RhdGljCisgICBkZXNjcmlwdGlvbgorQEAgLTIxMiwxMSArMjEyLDExIEBAIG1ldGhvZCBsb29wYmFjaworIAorICAgdXAKKyAgICAgaWZjb25maWcgJWlmYWNlJSAxMjcuMC4wLjEgdXAgXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorICAgZG93bgorICAgICBpZmNvbmZpZyAlaWZhY2UlIGRvd24gXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCitAQCAtMzcxLDExICszNzEsMTEgQEAgbWV0aG9kIGxvb3BiYWNrCisgCisgICB1cAorICAgICBpbmV0dXRpbHMtaWZjb25maWcgLS1pbnRlcmZhY2UgJWlmYWNlJSAtLWFkZHJlc3MgMTI3LjAuMC4xIC0tdXAgXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorICAgZG93bgorICAgICBpbmV0dXRpbHMtaWZjb25maWcgLS1pbnRlcmZhY2UgJWlmYWNlJSAtLWRvd24gXAorLQlpZiAoIWlmYWNlX2lzX2xvKCkpCisrCWlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCitkaWZmIC0tZ2l0IGEvaW5ldDYuZGVmbiBiL2luZXQ2LmRlZm4KK2luZGV4IDA5MzI1NTM5Y2QwMS4uNGRmNjRhZmYzOGNjIDEwMDY0NAorLS0tIGEvaW5ldDYuZGVmbgorKysrIGIvaW5ldDYuZGVmbgorQEAgLTMzLDExICszMywxMSBAQCBtZXRob2QgbG9vcGJhY2sKKyAgIGRlc2NyaXB0aW9uCisgICAgIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGRlZmluZSB0aGUgSVB2NiBsb29wYmFjayBpbnRlcmZhY2UuCisgICB1cAorLSAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorLSAgICAtaXAgYWRkciBhZGQgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgLWlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorKyAgICAtaXAgYWRkciBhZGQgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorICAgZG93bgorLSAgICAtaXAgYWRkciBkZWwgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmICghaWZhY2VfaXNfbG8oKSkKKy0gICAgLWlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIGRvd24gMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICAtaXAgYWRkciBkZWwgZGV2ICVpZmFjZSUgOjoxIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorKyAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biAyPi9kZXYvbnVsbCBpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyBtZXRob2Qgc3RhdGljCisgICBkZXNjcmlwdGlvbgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9pZnVwZG93bl8wLjcuNDguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGViODdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9pZnVwZG93bl8wLjcuNDguMS5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gImlmdXBkb3duOiBiYXNpYyBpZnVwIGFuZCBpZmRvd24gdXNlZCBieSBpbml0c2NyaXB0cyIKK0RFU0NSSVBUSU9OID0gIkhpZ2ggbGV2ZWwgdG9vbHMgdG8gY29uZmlndXJlIG5ldHdvcmsgaW50ZXJmYWNlcyBcCitUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHRvb2xzIGlmdXAgYW5kIGlmZG93biB3aGljaCBtYXkgYmUgdXNlZCB0byBcCitjb25maWd1cmUgKG9yLCByZXNwZWN0aXZlbHksIGRlY29uZmlndXJlKSBuZXR3b3JrIGludGVyZmFjZXMsIGJhc2VkIG9uIFwKK3RoZSBmaWxlIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9wb29sL21haW4vaS9pZnVwZG93bi9pZnVwZG93bl8wLjcuNDguMXVidW50dTUudGFyLmd6IFwKKwkgICBmaWxlOi8vZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaCBcCisJICAgZmlsZTovL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaCBcCisJICAgZmlsZTovLzk5X25ldHdvcmsgXAorCSAgIgorCitFWFRSQV9PRU1BS0UgPSAiIgorCisjIG5lZWRlZCBzbyB3ZSBkb24ndCBnZXQgZGVmYXVsdCBTPSIke1dPUktESVJ9L2lmdXBkb3duLSR7UFZ9IgorUyA9ICIke1dPUktESVJ9L2lmdXBkb3duLSR7UFZ9dWJ1bnR1NSIKKworCitpbmhlcml0IHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworZG9fY29tcGlsZSAoKSB7CisJY2htb2QgYStyeCAqLnBsICouc2gKKwlvZV9ydW5tYWtlICdDQz0ke0NDfScgIkNGTEFHUz0ke0NGTEFHU30gLVdhbGwgLVcgLUQnSUZVUERPV05fVkVSU0lPTj1cIiR7UFZ9XCInIgorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCBcCisJCSAgJHtEfSR7bWFuZGlyfS9tYW41IFwKKwkJICAke0R9JHtiYXNlX3NiaW5kaXJ9CisKKwkjIElmIHZvbGF0aWxlcyBhcmUgdXNlZCwgdGhlbiB3ZSdsbCBhbHNvIG5lZWQgL3J1bi9uZXR3b3JrIHRoZXJlIHRvby4KKwlpbnN0YWxsIC1kICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfbmV0d29yayAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtbSAwNzU1IGlmdXAgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlsbiAke0R9JHtiYXNlX3NiaW5kaXJ9L2lmdXAgJHtEfSR7YmFzZV9zYmluZGlyfS9pZmRvd24KKwlpbnN0YWxsIC1tIDA2NDQgaWZ1cC44ICR7RH0ke21hbmRpcn0vbWFuOAorCWluc3RhbGwgLW0gMDY0NCBpbnRlcmZhY2VzLjUgJHtEfSR7bWFuZGlyfS9tYW41CisJY2QgJHtEfSR7bWFuZGlyfS9tYW44ICYmIGxuIC1zIGlmdXAuOCBpZmRvd24uOAorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJpZnVwIGlmZG93biIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2lmdXBdID0gIiR7YmFzZV9zYmluZGlyfS9pZnVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2lmZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lmZG93biIKKworSU5JVFNDUklQVF9OQU1FID0gImlmdXAiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAzOSBTIC4gc3RvcCAzOSAwIDYgMSAuIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODViYTM3NWYzYzZmMjZkMzRlZmIyYTg1NzVlNzdmYzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDhkY2UxNDY5MmMwN2I3MmI1ODNiODZjNGQzYWNlMGQ5ZGFjMTkyODkyNTE0NGNjM2RkZGUxNWI2OTRlYmJkZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3MmU4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14CkBAIC0wLDAgKzEsNDYgQEAKKy5lbmNvZGluZyA9ICJVVEYtOCIKK2NvbmZpZy52ZXJzaW9uID0gIjgiCit2aXJ0dWFsSFcudmVyc2lvbiA9ICIxMCIKK251bXZjcHVzID0gIjIiCit2Y3B1LmhvdGFkZCA9ICJUUlVFIgorbWVtc2l6ZSA9ICI0MDk2IgorbWVtLmhvdGFkZCA9ICJUUlVFIgorc2F0YTAucHJlc2VudCA9ICJUUlVFIgorc2F0YTA6MC5wcmVzZW50ID0gIlRSVUUiCitzYXRhMDowLmZpbGVOYW1lID0gIllvY3RvX0J1aWxkX0FwcGxpYW5jZS52bWRrIgorZXRoZXJuZXQwLnByZXNlbnQgPSAiVFJVRSIKK2V0aGVybmV0MC52aXJ0dWFsRGV2ID0gImUxMDAwIgorZXRoZXJuZXQwLndha2VPblBja3RSY3YgPSAiRkFMU0UiCitldGhlcm5ldDAuYWRkcmVzc1R5cGUgPSAiZ2VuZXJhdGVkIgordXNiLnByZXNlbnQgPSAiVFJVRSIKK2VoY2kucGNpU2xvdE51bWJlciA9ICIwIgorc291bmQucHJlc2VudCA9ICJUUlVFIgorc291bmQuZmlsZU5hbWUgPSAiLTEiCitzb3VuZC5hdXRvZGV0ZWN0ID0gIlRSVUUiCitwY2lCcmlkZ2UwLnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTQucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNC52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTQuZnVuY3Rpb25zID0gIjgiCitwY2lCcmlkZ2U1LnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTUudmlydHVhbERldiA9ICJwY2llUm9vdFBvcnQiCitwY2lCcmlkZ2U1LmZ1bmN0aW9ucyA9ICI4IgorcGNpQnJpZGdlNi5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U2LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNi5mdW5jdGlvbnMgPSAiOCIKK3BjaUJyaWRnZTcucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNy52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTcuZnVuY3Rpb25zID0gIjgiCit2bWNpMC5wcmVzZW50ID0gIlRSVUUiCitocGV0MC5wcmVzZW50ID0gIlRSVUUiCit1c2IudmJsdWV0b290aC5zdGFydENvbm5lY3RlZCA9ICJUUlVFIgorZGlzcGxheU5hbWUgPSAiWW9jdG8gQnVpbGQgQXBwbGlhbmNlIgorZ3Vlc3RPUyA9ICJvdGhlcjN4bGludXgtNjQiCit2aXJ0dWFsSFcucHJvZHVjdENvbXBhdGliaWxpdHkgPSAiaG9zdGVkIgorZ3VpLmV4aXRPbkNMSUhMVCA9ICJGQUxTRSIKK3Bvd2VyVHlwZS5wb3dlck9mZiA9ICJzb2Z0IgorcG93ZXJUeXBlLnBvd2VyT24gPSAic29mdCIKK3Bvd2VyVHlwZS5zdXNwZW5kID0gInNvZnQiCitwb3dlclR5cGUucmVzZXQgPSAic29mdCIKK2V4dGVuZGVkQ29uZmlnRmlsZSA9ICJZb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiIKK3Njc2kwOjAucHJlc2VudCA9ICJGQUxTRSIKK2Zsb3BweTAucHJlc2VudCA9ICJGQUxTRSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk0MWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8Rm91bmRyeT4KKzxWTT4KKzxWTUlkIHR5cGU9InN0cmluZyI+NTIgYTUgZDggY2IgZWQgNmMgODUgNDgtY2QgOTkgNjggYWYgY2MgMzAgYTAgOTg8L1ZNSWQ+Cis8Q2xpZW50TWV0YURhdGE+Cis8Y2xpZW50TWV0YURhdGFBdHRyaWJ1dGVzLz4KKzxIaXN0b3J5RXZlbnRMaXN0Lz48L0NsaWVudE1ldGFEYXRhPgorPHZteFBhdGhOYW1lIHR5cGU9InN0cmluZyI+WW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteDwvdm14UGF0aE5hbWU+PC9WTT48L0ZvdW5kcnk+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzEyLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg2YmE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzEyLjAuMS5iYgpAQCAtMCwwICsxLDkzIEBACitTVU1NQVJZID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSBpdHNlbGYiCitERVNDUklQVElPTiA9ICJBbiBpbWFnZSBjb250YWluaW5nIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCB5b3UgY2FuIGJvb3QgYW5kIHJ1biB1c2luZyBlaXRoZXIgVk13YXJlIFBsYXllciBvciBWTXdhcmUgV29ya3N0YXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3VtZW50YXRpb24vYnVpbGQtYXBwbGlhbmNlIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkIgorCitJTUFHRV9GRUFUVVJFUyArPSAieDExLWJhc2UgcGFja2FnZS1tYW5hZ2VtZW50IHNwbGFzaCIKKworIyBFbnN1cmUgdGhlcmUncyBlbm91Z2ggc3BhY2UgdG8gZG8gYSBjb3JlLWltYWdlLXNhdG8gYnVpbGQsIHdpdGggcm1fd29yayBlbmFibGVkCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiNDE5NDMwNDAiCisKKyMgRG8gYSBxdWlldCBib290IHdpdGggbGltaXRlZCBjb25zb2xlIG1lc3NhZ2VzCitBUFBFTkQgKz0gInJvb3Rmc3R5cGU9ZXh0NCBxdWlldCIKKworREVQRU5EUyA9ICJ6aXAtbmF0aXZlIgorSU1BR0VfRlNUWVBFUyA9ICJ2bWRrIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworU1JDUkVWID89ICJkMDFjZDUzNDI5YjFjMjBmMDFkYWM5N2YxYjliNjU5Y2I5ZGM5ODEyIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5IFwKKyAgICAgICAgICAgZmlsZTovL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXggXAorICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYgXAorICAgICAgICAgICIKKworSU1BR0VfQ01EX2V4dDRfYXBwZW5kICgpIHsKKwkjIFdlIGRvbid0IG5lZWQgdG8gcmVzZXJ2ZSBtdWNoIHNwYWNlIGZvciByb290LCAwLjUlIGlzIG1vcmUgdGhhbiBlbm91Z2gKKwl0dW5lMmZzIC1tIDAuNSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmV4dDQKK30KKworZmFrZXJvb3QgZG9fcG9wdWxhdGVfcG9reV9zcmMgKCkgeworCSMgQmVjYXVzZSBmZXRjaDIncyBnaXQncyB1bnBhY2sgdXNlcyAtcyBjbG9uZWZsYWcsIHRoZSB1bnBhY2tlZCBnaXQgcmVwbworCSMgd2lsbCBiZWNvbWUgaW52YWxpZCBpbiB0aGUgdGFyZ2V0LgorCXJtIC1yZiAke1dPUktESVJ9L2dpdC8uZ2l0CisJcm0gLWYgJHtXT1JLRElSfS9naXQvLmdpdGlnbm9yZQorCisJY3AgLVJwICR7V09SS0RJUn0vZ2l0ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reQorCisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2NvbmYKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzCisJY3AgLVJwTCAke0RMX0RJUn0vKiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzLworCisJIyBSZW1vdmUgdGhlIGdpdDJfKiB0YXJiYWxscyAtLSB0aGlzIGlzIG9rIHNpbmNlIHdlIHN0aWxsIGhhdmUgdGhlIGdpdDIvLgorCXJtIC1yZiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvZG93bmxvYWRzL2dpdDJfKgorCisJZWNobyAiL3Vzci9iaW4iID4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL3BzZXVkb2RvbmUKKwllY2hvICJJTkhFUklUICs9IFwicm1fd29ya1wiIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvY29uZi9hdXRvLmNvbmYKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3BzZXVkbworCWVjaG8gImV4cG9ydCBQU0VVRE9fUFJFRklYPS91c3IiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYworCWVjaG8gImV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUj0vaG9tZS9idWlsZGVyL3BzZXVkbyIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiZXhwb3J0IFBTRVVET19MSUJESVI9L3Vzci9saWIvcHNldWRvL2xpYjY0IiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKworCWNob3duIGJ1aWxkZXIuYnVpbGRlciAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3BzZXVkbworCisJY2hvd24gLVIgYnVpbGRlci5idWlsZGVyICAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kKKworCSMgQWxsb3cgYnVpbGRlciB0byB1c2Ugc3VkbyB0byBzZXR1cCB0YXAvdHVuCisJZWNobyAiYnVpbGRlciBBTEw9KEFMTCkgTk9QQVNTV0Q6IEFMTCIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9zdWRvZXJzCisKKwkjIFVzZSBDbGVhcmxvb2tzIEdUSysgdGhlbWUKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAKKwllY2hvICdndGstdGhlbWUtbmFtZSA9ICJDbGVhcmxvb2tzIicgPiAke0lNQUdFX1JPT1RGU30vZXRjL2d0ay0yLjAvZ3RrcmMKK30KKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJkb19wb3B1bGF0ZV9wb2t5X3NyYzsgIgorCithZGR0YXNrIHJvb3RmcyBhZnRlciBkb191bnBhY2sKKworcHl0aG9uICgpIHsKKwkjIEVuc3VyZSB3ZSBydW4gdGhlc2UgdXN1YWxseSBub2V4ZWMgdGFza3MKKwlkLmRlbFZhckZsYWcoImRvX2ZldGNoIiwgIm5vZXhlYyIpCisJZC5kZWxWYXJGbGFnKCJkb191bnBhY2siLCAibm9leGVjIikKK30KKworY3JlYXRlX2J1bmRsZV9maWxlcyAoKSB7CisJY2QgJHtXT1JLRElSfQorCW1rZGlyIC1wIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWNwICoudm14KiBZb2N0b19CdWlsZF9BcHBsaWFuY2UKKwlsbiAtc2YgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnZtZGsgWW9jdG9fQnVpbGRfQXBwbGlhbmNlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bWRrCisJemlwIC1yICR7REVQTE9ZX0RJUl9JTUFHRX0vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLSR7REFURVRJTUV9LnppcCBZb2N0b19CdWlsZF9BcHBsaWFuY2UKKwlsbiAtc2YgWW9jdG9fQnVpbGRfQXBwbGlhbmNlLSR7REFURVRJTUV9LnppcCAke0RFUExPWV9ESVJfSU1BR0V9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS56aXAgCit9CisKK3B5dGhvbiBkb19idW5kbGVfZmlsZXMoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfYnVuZGxlX2ZpbGVzJywgZCkKK30KKworYWRkdGFzayBidW5kbGVfZmlsZXMgYWZ0ZXIgZG9fdm1pbWcgYmVmb3JlIGRvX2J1aWxkCitkb19idW5kbGVfZmlsZXNbbm9zdGFtcF0gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWEwOGNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1iYXNlLmJiCkBAIC0wLDAgKzEsOCBAQAorU1VNTUFSWSA9ICJBIGNvbnNvbGUtb25seSBpbWFnZSB0aGF0IGZ1bGx5IHN1cHBvcnRzIHRoZSB0YXJnZXQgZGV2aWNlIFwKK2hhcmR3YXJlLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlYWQyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1kZXYuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJBIHNtYWxsIGltYWdlIGp1c3QgY2FwYWJsZSBvZiBhbGxvd2luZyBhIGRldmljZSB0byBib290IGFuZCBcCitpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgd29yay4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwZmE5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmIKQEAgLTAsMCArMSwyMSBAQAorIyBTaW1wbGUgaW5pdHJhbWZzIGltYWdlLiBNb3N0bHkgdXNlZCBmb3IgbGl2ZSBpbWFnZXMuCitERVNDUklQVElPTiA9ICJTbWFsbCBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2UuIFRoZSBrZXJuZWwgaW5jbHVkZXMgXAordGhlIE1pbmltYWwgUkFNLWJhc2VkIEluaXRpYWwgUm9vdCBGaWxlc3lzdGVtIChpbml0cmFtZnMpLCB3aGljaCBmaW5kcyB0aGUgXAorZmlyc3QgJ2luaXQnIHByb2dyYW0gbW9yZSBlZmZpY2llbnRseS4iCisKK1BBQ0tBR0VfSU5TVEFMTCA9ICJpbml0cmFtZnMtbGl2ZS1ib290IGluaXRyYW1mcy1saXZlLWluc3RhbGwgaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmkgYnVzeWJveCB1ZGV2IGJhc2UtcGFzc3dkICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSIKKworIyBEbyBub3QgcG9sbHV0ZSB0aGUgaW5pdHJkIGltYWdlIHdpdGggcm9vdGZzIGZlYXR1cmVzCitJTUFHRV9GRUFUVVJFUyA9ICIiCisKK2V4cG9ydCBJTUFHRV9CQVNFTkFNRSA9ICJjb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzIgorSU1BR0VfTElOR1VBUyA9ICIiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitJTUFHRV9GU1RZUEVTID0gIiR7SU5JVFJBTUZTX0ZTVFlQRVN9IgoraW5oZXJpdCBjb3JlLWltYWdlCisKK0lNQUdFX1JPT1RGU19TSVpFID0gIjgxOTIiCisKK0JBRF9SRUNPTU1FTkRBVElPTlMgKz0gImJ1c3lib3gtc3lzbG9nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjIzNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtbXRkdXRpbHMuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJTbWFsbCBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2Ugd2l0aCBzdXBwb3J0IGZvciB0aGUgXAorTWluaW1hbCBNVEQgVXRpbGl0aWVzLCB3aGljaCBsZXQgdGhlIHVzZXIgaW50ZXJhY3Qgd2l0aCB0aGUgTVREIHN1YnN5c3RlbSBpbiBcCit0aGUga2VybmVsIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBmbGFzaCBkZXZpY2VzLiIKKworSU1BR0VfSU5TVEFMTCArPSAibXRkLXV0aWxzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDc3YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJBIHNtYWxsIGltYWdlIGp1c3QgY2FwYWJsZSBvZiBhbGxvd2luZyBhIGRldmljZSB0byBib290LiIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9ICR7Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMfSIKKworSU1BR0VfTElOR1VBUyA9ICIgIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlCisKK0lNQUdFX1JPT1RGU19TSVpFID89ICI4MTkyIgorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFX2FwcGVuZCA9ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3RlbWQiLCAiICsgNDA5NiIsICIiICxkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2NvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThlMGQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2NvcHlyaWdodApAQCAtMCwwICsxLDExIEBACitUaGlzIHBhY2thZ2Ugd2FzIGNyZWF0ZWQgYnkgUGV0ZXIgVG9iaWFzIHRvYmlhc0BldC1pbmYuZmhvLWVtZGVuLmRlIG9uCitXZWQsIDI0IEF1ZyAxOTk0IDIxOjMzOjI4ICswMjAwIGFuZCBtYWludGFpbmVkIGJ5IEFudGhvbnkgVG93bnMKKzxhanRAZGViaWFuLm9yZz4gdW50aWwgMjAwMS4KK0l0IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IE1hcmNvIGQnSXRyaSA8bWRAbGludXguaXQ+LgorCitDb3B5cmlnaHQgMTk5NC0yMDEwIFBldGVyIFRvYmlhcywgQW50aG9ueSBUb3ducyBhbmQgTWFyY28gZCdJdHJpCisKK1RoZSBwcm9ncmFtcyBpbiB0aGlzIHBhY2thZ2UgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgYXMgZGlzdHJpYnV0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uIE9uIERlYmlhbiBzeXN0ZW1zLCBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIG1heSBiZSBmb3VuZCBpbgorL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvR1BMLTIuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzFjNjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2ggLWUKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5ldHdvcmtpbmcKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50dmlydGZzICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIFNob3VsZC1TdGFydDogICAgICBpZnVwZG93bgorIyBTaG91bGQtU3RvcDogICAgICAgaWZ1cGRvd24KKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogUmFpc2UgbmV0d29yayBpbnRlcmZhY2VzLgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0iL3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIgorCitbIC14IC9zYmluL2lmdXAgXSB8fCBleGl0IDAKKworY2hlY2tfbmV0d29ya19maWxlX3N5c3RlbXMoKSB7CisgICAgWyAtZSAvcHJvYy9tb3VudHMgXSB8fCByZXR1cm4gMAorCisgICAgaWYgWyAtZSAvZXRjL2lzY3NpL2lzY3NpLmluaXRyYW1mcyBdOyB0aGVuCisJZWNobyAibm90IGRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzOiBpU0NTSSByb290IGlzIG1vdW50ZWQuIgorCWV4aXQgMAorICAgIGZpCisKKyAgICBleGVjIDk8JjAgPCAvcHJvYy9tb3VudHMKKyAgICB3aGlsZSByZWFkIERFViBNVFBUIEZTVFlQRSBSRVNUOyBkbworCWNhc2UgJERFViBpbgorCS9kZXYvbmJkKnwvZGV2L25kW2Etel0qfC9kZXYvZXRoZXJkL2UqKQorCSAgICBlY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IG5ldHdvcmsgZGV2aWNlcyBzdGlsbCBtb3VudGVkLiIKKwkgICAgZXhpdCAwCisJICAgIDs7CisJZXNhYworCWNhc2UgJEZTVFlQRSBpbgorCW5mc3xuZnM0fHNtYmZzfG5jcHxuY3Bmc3xjaWZzfGNvZGF8b2NmczJ8Z2ZzfHB2ZnN8cHZmczJ8ZnVzZS5odHRwZnN8ZnVzZS5jdXJsZnRwZnMpCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBmaWxlIHN5c3RlbXMgc3RpbGwgbW91bnRlZC4iCisJICAgIGV4aXQgMAorCSAgICA7OworCWVzYWMKKyAgICBkb25lCisgICAgZXhlYyAwPCY5IDk8Ji0KK30KKworY2hlY2tfbmV0d29ya19zd2FwKCkgeworICAgIFsgLWUgL3Byb2Mvc3dhcHMgXSB8fCByZXR1cm4gMAorCisgICAgZXhlYyA5PCYwIDwgL3Byb2Mvc3dhcHMKKyAgICB3aGlsZSByZWFkIERFViBNVFBUIEZTVFlQRSBSRVNUOyBkbworCWNhc2UgJERFViBpbgorCS9kZXYvbmJkKnwvZGV2L25kW2Etel0qfC9kZXYvZXRoZXJkL2UqKQorCSAgICBlY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IG5ldHdvcmsgc3dhcCBzdGlsbCBtb3VudGVkLiIKKwkgICAgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGRvbmUKKyAgICBleGVjIDA8JjkgOTwmLQorfQorCitjYXNlICIkMSIgaW4KK3N0YXJ0KQorCWVjaG8gLW4gIkNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4uLiAiCisJc3lzY3RsIC1lIC1wIC9ldGMvc3lzY3RsLmNvbmYgPi9kZXYvbnVsbCAyPiYxCisJaWZ1cCAtYQorCWVjaG8gImRvbmUuIgorCTs7CisKK3N0b3ApCisJY2hlY2tfbmV0d29ya19maWxlX3N5c3RlbXMKKwljaGVja19uZXR3b3JrX3N3YXAKKworCWVjaG8gLW4gIkRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLi4uICIKKwlpZmRvd24gLWEKKwllY2hvICJkb25lLiIKKwk7OworCitmb3JjZS1yZWxvYWR8cmVzdGFydCkKKwllY2hvICJSdW5uaW5nICQwICQxIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCBtYXkgbm90IGVuYWJsZSBhZ2FpbiBzb21lIGludGVyZmFjZXMiCisJZWNobyAiUmVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMuLi4gIgorCWlmZG93biAtYSB8fCB0cnVlCisJaWZ1cCAtYQorCWVjaG8gImRvbmUuIgorCTs7CisKKyopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL25ldHdvcmtpbmcge3N0YXJ0fHN0b3B9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhY2Y0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDMxIEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworIyBXaXJlbGVzcyBpbnRlcmZhY2VzCitpZmFjZSB3bGFuMCBpbmV0IGRoY3AKKwl3aXJlbGVzc19tb2RlIG1hbmFnZWQKKwl3aXJlbGVzc19lc3NpZCBhbnkKKwl3cGEtZHJpdmVyIHdleHQKKwl3cGEtY29uZiAvZXRjL3dwYV9zdXBwbGljYW50LmNvbmYKKworaWZhY2UgYXRtbDAgaW5ldCBkaGNwCisKKyMgV2lyZWQgb3Igd2lyZWxlc3MgaW50ZXJmYWNlcworYXV0byBldGgwCitpZmFjZSBldGgwIGluZXQgZGhjcAoraWZhY2UgZXRoMSBpbmV0IGRoY3AKKworIyBFdGhlcm5ldC9STkRJUyBnYWRnZXQgKGdfZXRoZXIpCisjIC4uLiBvciBvbiBob3N0IHNpZGUsIHVzYm5ldCBhbmQgcmFuZG9tIGh3YWRkcgoraWZhY2UgdXNiMCBpbmV0IHN0YXRpYworCWFkZHJlc3MgMTkyLjE2OC43LjIKKwluZXRtYXNrIDI1NS4yNTUuMjU1LjAKKwluZXR3b3JrIDE5Mi4xNjguNy4wCisJZ2F0ZXdheSAxOTIuMTY4LjcuMQorCisjIEJsdWV0b290aCBuZXR3b3JraW5nCitpZmFjZSBibmVwMCBpbmV0IGRoY3AKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTBjMGE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QKQEAgLTAsMCArMSwzOSBAQAorIyEgL2Jpbi9zaAorCisjIEluIGNhc2UgdGhlIGludGVyZmFjZSBpcyB1c2VkIGFzIG5mc3Jvb3QsIGF2b2lkIGlmdXAsIG90aGVyd2lzZQorIyBuZnNyb290IG1heSBsb3NlIHJlc3BvbnNlCisKK25mc3Jvb3Q9MAorCitpZiB0ZXN0ICJ4JElGQUNFIiA9IHhsbyA7IHRoZW4KKwlleGl0IDAKK2ZpCisKK2V4ZWMgOTwmMCA8IC9wcm9jL21vdW50cword2hpbGUgcmVhZCBkZXYgbXRwdCBmc3R5cGUgcmVzdDsgZG8KKyAgICBpZiB0ZXN0ICRtdHB0ID0gIi8iIDsgdGhlbgorICAgICAgICBjYXNlICRmc3R5cGUgaW4KKyAgICAgICAgICAgIG5mcyB8IG5mczQpCisgICAgICAgICAgICAgICAgbmZzcm9vdD0xCisgICAgICAgICAgICAgICAgbmZzX2FkZHI9YGVjaG8gJHJlc3QgfCBzZWQgLWUgJ3MvXi4qYWRkcj1cKFswLTkuXSpcKS4qJC9cMS8nYAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIGZpCitkb25lCitleGVjIDA8JjkgOTwmLQorCit0ZXN0ICRuZnNyb290IC1lcSAwICYmIGV4aXQgMAorCitpZiBbIC14IC9iaW4vaXAgLW8gLXggL3NiaW4vaXAgXSA7IHRoZW4KKyAgICBuZnNfaWZhY2U9YGlwIHJvdXRlIGdldCAkbmZzX2FkZHIgfCBncmVwIGRldiB8IHNlZCAtZSAncy9eLipkZXYgXChbLWEtejAtOS5dKlwpLiokL1wxLydgCitmaQorCitpZiB0ZXN0ICJ4JElGQUNFIiA9ICJ4JG5mc19pZmFjZSIgOyB0aGVuCisgICAgZWNobyAiaWZ1cCBza2lwcGVkIGZvciBuZnNyb290IGludGVyZmFjZSAkbmZzX2lmYWNlIgorICAgIGV4aXQgMQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm0vaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm0vaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybTY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ni9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjcvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHM2NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHM2NC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVwcGMvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVwcGMvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11c2g0L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11c2g0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni02NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni02NC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2FlNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bl8xLjAuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJCYXNpYyBUQ1AvSVAgbmV0d29ya2luZyBpbml0IHNjcmlwdHMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgaGlnaCBsZXZlbCB0b29scyB0byBjb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvaWZ1cGRvd24iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9jb3B5cmlnaHQ7bWQ1PTNkZDYxOTJkMzA2ZjU4MmRlZTc2ODdkYTNkODc0OGFiIgorUFIgPSAicjciCisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gIm5ldHdvcmtpbmciCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMSAyIDMgNCA1IC4gc3RvcCA4MCAwIDYgMSAuIgorCitTUkNfVVJJID0gImZpbGU6Ly9jb3B5cmlnaHQgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbnRlcmZhY2VzIFwKKyAgICAgICAgICAgZmlsZTovL25mc3Jvb3QiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQgXAorCQkJJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXVwLmQgXAorCQkJJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQgXAorCQkJJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wb3N0LWRvd24uZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25ldHdvcmtpbmcKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbnRlcmZhY2VzICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaW50ZXJmYWNlcworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mc3Jvb3QgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9xZW11YWxsICgpIHsKKwkjIERpc2FibGUgbmV0d29yayBtYW5hZ2VyIG9uIG1hY2hpbmVzIHRoYXQgY29tbW9ubHkgZG8gTkZTIGJvb3RpbmcKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL25tLWRpc2FibGVkLWV0aDAKK30KKworUEFDS0FHRV9BUkNIX3FlbXVhbGwgPSAiJHtNQUNISU5FX0FSQ0h9IgorUkRFUEVORFNfJHtQTn0gPSAibmV0YmFzZSIKK1JDT05GTElDVFNfJHtQTn0gPSAibmV0YmFzZSAoPCAxOjUuMCkiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L25ldHdvcmsvaW50ZXJmYWNlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1ib290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MmViYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1ib290LnNoCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK21rZGlyIC9wcm9jCitta2RpciAvc3lzCittb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK21vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKKworZXhlYyBzaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMGI0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS10ZXN0ZnMuc2gKQEAgLTAsMCArMSwxOTkgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMDAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorYm9vdF9zaXplPTIwMAorCisjIDUwJSBmb3IgdGhlIHNlY29uZCByb290ZnMKK3Rlc3Rmc19yYXRpbz01MAorCitmb3VuZD0ibm8iCisKK2VjaG8gIlNlYXJjaGluZyBmb3IgYSBoYXJkIGRyaXZlLi4uIgorZm9yIGRldmljZSBpbiAnaGRhJyAnaGRiJyAnc2RhJyAnc2RiJyAnbW1jYmxrMCcgJ21tY2JsazEnCitkbworICAgIGlmIFsgLWUgL3N5cy9ibG9jay8ke2RldmljZX0vcmVtb3ZhYmxlIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJChjYXQgL3N5cy9ibG9jay8ke2RldmljZX0vcmVtb3ZhYmxlKSIgPSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgZm91bmQ9InllcyIKKworICAgICAgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgICAgICAgICAjIFRyeSBzbGVlcGluZyBoZXJlIHRvIGF2b2lkIGdldHRpbmcga2VybmVsIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgIyBvYnNjdXJpbmcvY29uZnVzaW5nIHVzZXIKKyAgICAgICAgICAgICAgICBzbGVlcCA1CisgICAgICAgICAgICAgICAgZWNobyAiRm91bmQgZHJpdmUgYXQgL2Rldi8ke2RldmljZX0uIERvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhpcyBpbWFnZSB0aGVyZSA/IFt5L25dIgorICAgICAgICAgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgICAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAibiIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmQ9bm8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAgICAgZWNobyAiUGxlYXNlIGFuc3dlciB5IG9yIG4iCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmIFsgIiRmb3VuZCIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIGJyZWFrOworICAgIGZpCisKK2RvbmUKKworaWYgWyAiJGZvdW5kIiA9ICJubyIgXTsgdGhlbgorICAgIGV4aXQgMQorZmkKKworZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyR7ZGV2aWNlfSIKKworIworIyBUaGUgdWRldiBhdXRvbW91bnRlciBjYW4gY2F1c2UgcGFpbiBoZXJlLCBraWxsIGl0CisjCitybSAtZiAvZXRjL3VkZXYvcnVsZXMuZC9hdXRvbW91bnQucnVsZXMKK3JtIC1mIC9ldGMvdWRldi9zY3JpcHRzL21vdW50KgorCisjCisjIFVubW91bnQgYW55dGhpbmcgdGhlIGF1dG9tb3VudGVyIGhhZCBtb3VudGVkCisjCit1bW91bnQgL2Rldi8ke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworbWtkaXIgLXAgL3RtcAorY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorCitkaXNrX3NpemU9JChwYXJ0ZWQgL2Rldi8ke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCit0ZXN0ZnNfc2l6ZT0kKChkaXNrX3NpemUqdGVzdGZzX3JhdGlvLzEwMCkpCityb290ZnNfc2l6ZT0kKChkaXNrX3NpemUtYm9vdF9zaXplLXRlc3Rmc19zaXplKSkKKworcm9vdGZzX3N0YXJ0PSQoKGJvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCit0ZXN0ZnNfc3RhcnQ9JCgocm9vdGZzX2VuZCkpCisKKyMgTU1DIGRldmljZXMgYXJlIHNwZWNpYWwgaW4gYSBjb3VwbGUgb2Ygd2F5cworIyAxKSB0aGV5IHVzZSBhIHBhcnRpdGlvbiBwcmVmaXggY2hhcmFjdGVyICdwJworIyAyKSB0aGV5IGFyZSBkZXRlY3RlZCBhc3luY2hyb25vdXNseSAobmVlZCByb290d2FpdCkKK3Jvb3R3YWl0PSIiCitwYXJ0X3ByZWZpeD0iIgoraWYgWyAhICIke2RldmljZSNtbWNibGt9IiA9ICIke2RldmljZX0iIF07IHRoZW4KKyAgICBwYXJ0X3ByZWZpeD0icCIKKyAgICByb290d2FpdD0icm9vdHdhaXQiCitmaQorYm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCityb290ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKK3Rlc3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MworCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkJvb3QgcGFydGl0aW9uIHNpemU6ICAgJGJvb3Rfc2l6ZSBNQiAoJGJvb3RmcykiCitlY2hvICJSb290ZnMgcGFydGl0aW9uIHNpemU6ICRyb290ZnNfc2l6ZSBNQiAoJHJvb3RmcykiCitlY2hvICJUZXN0ZnMgcGFydGl0aW9uIHNpemU6ICAgJHRlc3Rmc19zaXplIE1CICgkdGVzdGZzKSIKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiRGVsZXRpbmcgcGFydGl0aW9uIHRhYmxlIG9uIC9kZXYvJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0vZGV2LyR7ZGV2aWNlfSBicz01MTIgY291bnQ9MgorCitlY2hvICJDcmVhdGluZyBuZXcgcGFydGl0aW9uIHRhYmxlIG9uIC9kZXYvJHtkZXZpY2V9IC4uLiIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta2xhYmVsIGdwdAorCitlY2hvICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkYm9vdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5IDAlICRib290X3NpemUKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBzZXQgMSBib290IG9uCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHRlc3RmcyBwYXJ0aXRpb24gb24gJHRlc3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkdGVzdGZzX3N0YXJ0IDEwMCUKKworcGFydGVkIC9kZXYvJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byB2ZmF0Li4uIgorbWtmcy52ZmF0IC1uICJib290IiAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJwbGF0Zm9ybSIgJHJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nICR0ZXN0ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAtTCAidGVzdHJvb3RmcyIgJHRlc3RmcworCitta2RpciAvc3NkCitta2RpciAvcm9vdG1udAorbWtkaXIgL2Jvb3RtbnQKKworbW91bnQgJHJvb3RmcyAvc3NkCittb3VudCAtbyBydyxsb29wLG5vYXRpbWUsbm9kaXJhdGltZSAvcnVuL21lZGlhLyQxLyQyIC9yb290bW50CisKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3Jvb3RtbnQvKiAvc3NkCisKK3RvdWNoIC9zc2QvZXRjL21hc3RlcmltYWdlCisKK2lmIFsgLWQgL3NzZC9ldGMvIF0gOyB0aGVuCisgICAgIyBXZSBkb250IHdhbnQgdWRldiB0byBtb3VudCBvdXIgcm9vdCBkZXZpY2Ugd2hpbGUgd2UncmUgYm9vdGluZy4uLgorICAgIGlmIFsgLWQgL3NzZC9ldGMvdWRldi8gXSA7IHRoZW4KKyAgICAgICAgZWNobyAiL2Rldi8ke2RldmljZX0iID4+IC9zc2QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCisKK3Vtb3VudCAvc3NkCit1bW91bnQgL3Jvb3RtbnQKKworZWNobyAiUHJlcGFyaW5nIGJvb3QgcGFydGl0aW9uLi4uIgorbW91bnQgJGJvb3RmcyAvc3NkCisKK0VGSURJUj0iL3NzZC9FRkkvQk9PVCIKK21rZGlyIC1wICRFRklESVIKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvc3NkCisjIENvcHkgdGhlIGVmaSBsb2FkZXIKK2NwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvKi5lZmkgJEVGSURJUgorCitpZiBbIC1mIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgXTsgdGhlbgorICAgIEdSVUJDRkc9IiRFRklESVIvZ3J1Yi5jZmciCisgICAgY3AgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC9ncnViLmNmZyAkR1JVQkNGRworICAgICMgVXBkYXRlIGdydWIgY29uZmlnIGZvciB0aGUgaW5zdGFsbGVkIGltYWdlCisgICAgIyBEZWxldGUgdGhlIGluc3RhbGwgZW50cnkKKyAgICBzZWQgLWkgIi9tZW51ZW50cnkgJ2luc3RhbGwnLywvXn0vZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisgICAgc2VkIC1pICIvaW5pdHJkIC9kIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSBMQUJFTD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gTEFCRUw9W14gXSovIC8iICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHUlVCQ0ZHCisgICAgIyBBZGQgdGhlIHJvb3Q9IGFuZCBvdGhlciBzdGFuZGFyZCBib290IG9wdGlvbnMKKyAgICBzZWQgLWkgInNAbGludXggL3ZtbGludXogKkBsaW51eCAvdm1saW51eiByb290PSRyb290ZnMgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHUlVCQ0ZHCitmaQorCitpZiBbIC1kIC9ydW4vbWVkaWEvJDEvbG9hZGVyIF07IHRoZW4KKyAgICBHVU1NSUJPT1RfQ0ZHUz0iL3NzZC9sb2FkZXIvZW50cmllcy8qLmNvbmYiCisgICAgIyBjb3B5IGNvbmZpZyBmaWxlcyBmb3IgZ3VtbWlib290CisgICAgY3AgLWRyIC9ydW4vbWVkaWEvJDEvbG9hZGVyIC9zc2QKKyAgICAjIGRlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorICAgIHJtIC1mIC9zc2QvbG9hZGVyL2VudHJpZXMvaW5zdGFsbC5jb25mCisgICAgIyBkZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgYWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQG9wdGlvbnMgKkBvcHRpb25zIHJvb3Q9JHJvb3RmcyBydyAkcm9vdHdhaXQgcXVpZXQgQCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBBZGQgdGhlIHRlc3QgbGFiZWwKKyAgICBlY2hvIC1uZSAidGl0bGUgdGVzdFxubGludXggL3Rlc3Qta2VybmVsXG5vcHRpb25zIHJvb3Q9JHRlc3RmcyBydyAkcm9vdHdhaXQgcXVpZXRcbiIgPiAvc3NkL2xvYWRlci9lbnRyaWVzL3Rlc3QuY29uZgorZmkKKwordW1vdW50IC9zc2QKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDkwOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaApAQCAtMCwwICsxLDI1NCBAQAorIyEvYmluL3NoIC1lCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIGluc3RhbGwuc2ggW2RldmljZV9uYW1lXSBbcm9vdGZzX25hbWVdCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXZSBuZWVkIDIwIE1iIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24KK2Jvb3Rfc2l6ZT0yMAorCisjIDUlIGZvciBzd2FwCitzd2FwX3JhdGlvPTUKKworIyBHZXQgYSBsaXN0IG9mIGhhcmQgZHJpdmVzCitoZG5hbWVsaXN0PSIiCitsaXZlX2Rldl9uYW1lPWBjYXQgL3Byb2MvbW91bnRzIHwgZ3JlcCAkezElL30gfCBhd2sgJ3twcmludCAkMX0nYAorbGl2ZV9kZXZfbmFtZT0ke2xpdmVfZGV2X25hbWUjXC9kZXYvfQorIyBPbmx5IHN0cmlwIHRoZSBkaWdpdCBpZGVudGlmaWVyIGlmIHRoZSBkZXZpY2UgaXMgbm90IGFuIG1tYworY2FzZSAkbGl2ZV9kZXZfbmFtZSBpbgorICAgIG1tY2JsayopCisgICAgOzsKKyAgICAqKQorICAgICAgICBsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSUlWzAtOV0qfQorICAgIDs7Citlc2FjCisKK2VjaG8gIlNlYXJjaGluZyBmb3IgaGFyZCBkcml2ZXMgLi4uIgorCitmb3IgZGV2aWNlIGluIGBscyAvc3lzL2Jsb2NrL2A7IGRvCisgICAgY2FzZSAkZGV2aWNlIGluCisgICAgICAgIGxvb3AqKQorICAgICAgICAgICAgIyBza2lwIGxvb3AgZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICBzciopCisgICAgICAgICAgICAjIHNraXAgQ0RST00gZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICByYW0qKQorICAgICAgICAgICAgIyBza2lwIHJhbSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAjIHNraXAgdGhlIGRldmljZSBMaXZlT1MgaXMgb24KKyAgICAgICAgICAgICMgQWRkIHZhbGlkIGhhcmQgZHJpdmUgbmFtZSB0byB0aGUgbGlzdAorICAgICAgICAgICAgY2FzZSAkZGV2aWNlIGluCisgICAgICAgICAgICAgICAgJGxpdmVfZGV2X25hbWUqKQorICAgICAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIHdlIGFyZSBydW5uaW5nIGZyb20KKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgIGhkbmFtZWxpc3Q9IiRoZG5hbWVsaXN0ICRkZXZpY2UiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitpZiBbIC16ICIke2hkbmFtZWxpc3R9IiBdOyB0aGVuCisgICAgZWNobyAiWW91IG5lZWQgYW5vdGhlciBkZXZpY2UgKGJlc2lkZXMgdGhlIGxpdmUgZGV2aWNlIC9kZXYvJHtsaXZlX2Rldl9uYW1lfSkgdG8gaW5zdGFsbCB0aGUgaW1hZ2UuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK1RBUkdFVF9ERVZJQ0VfTkFNRT0iIgorZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAjIERpc3BsYXkgZm91bmQgaGFyZCBkcml2ZXMgYW5kIHRoZWlyIGJhc2ljIGluZm8KKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGVjaG8gL2Rldi8kaGRuYW1lCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvciBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlZFTkRPUj0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiTU9ERUw9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbAorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlVFVkVOVD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudAorICAgIGZpCisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgZWNobyAtbiAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlPyBbeS9uXSAiCisgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorICAgICAgICBUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorICAgICAgICBicmVhaworICAgIGZpCitkb25lCisKK2lmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRSAuLi4iCitlbHNlCisgICAgZWNobyAiTm8gaGFyZCBkcml2ZSBzZWxlY3RlZC4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworZGV2aWNlPS9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRQorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworbWtkaXIgLXAgL3RtcAorCisjIENyZWF0ZSAvZXRjL210YWIgaWYgbm90IHByZXNlbnQKK2lmIFsgISAtZSAvZXRjL210YWIgXTsgdGhlbgorICAgIGNhdCAvcHJvYy9tb3VudHMgPiAvZXRjL210YWIKK2ZpCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCitzd2FwX3NpemU9JCgoZGlza19zaXplKnN3YXBfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtc3dhcF9zaXplKSkKKworcm9vdGZzX3N0YXJ0PSQoKGJvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCitzd2FwX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisgICAgcGFydF9wcmVmaXg9InAiCisgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKK3N3YXA9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlN3YXAgcGFydGl0aW9uIHNpemU6ICAgJHN3YXBfc2l6ZSBNQiAoJHN3YXApIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0ke2RldmljZX0gYnM9NTEyIGNvdW50PTM1CisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK3BhcnRlZCAke2RldmljZX0gbWtsYWJlbCBncHQKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IGJvb3QgZmF0MzIgMCUgJGJvb3Rfc2l6ZQorcGFydGVkICR7ZGV2aWNlfSBzZXQgMSBib290IG9uCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IHJvb3QgZXh0MyAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHN3YXAgcGFydGl0aW9uIG9uICRzd2FwIgorcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgc3dhcCBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gdmZhdC4uLiIKK21rZnMudmZhdCAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MSkKKyAgICBzd2FwX3BhcnRfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFBBUlRVVUlEICR7ZGV2aWNlfTMpCisgICAgZWNobyAiL2Rldi9kaXNrL2J5LXBhcnR1dWlkLyRzd2FwX3BhcnRfdXVpZCAgICAgICAgICAgICAgICBzd2FwICAgICAgICAgICAgIHN3YXAgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgIDAiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICBlY2hvICJVVUlEPSRib290X3V1aWQgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgdmZhdCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKyAgICAgICAgZWNobyAiJHtkZXZpY2V9IiA+PiAvdGd0X3Jvb3QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCisKK3Vtb3VudCAvc3JjX3Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IGJvb3QgcGFydGl0aW9uCittb3VudCAkYm9vdGZzIC9ib290CitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCisKK0VGSURJUj0iL2Jvb3QvRUZJL0JPT1QiCitta2RpciAtcCAkRUZJRElSCisjIENvcHkgdGhlIGVmaSBsb2FkZXIKK2NwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvKi5lZmkgJEVGSURJUgorCitpZiBbIC1mIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgXTsgdGhlbgorICAgIHJvb3RfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIkRUZJRElSL2dydWIuY2ZnIgorICAgIGNwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgJEdSVUJDRkcKKyAgICAjIFVwZGF0ZSBncnViIGNvbmZpZyBmb3IgdGhlIGluc3RhbGxlZCBpbWFnZQorICAgICMgRGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgc2VkIC1pICIvbWVudWVudHJ5ICdpbnN0YWxsJy8sL159L2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSByb290PSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyByb290PVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgQWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQGxpbnV4IC92bWxpbnV6ICpAbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHUlVCQ0ZHCitmaQorCitpZiBbIC1kIC9ydW4vbWVkaWEvJDEvbG9hZGVyIF07IHRoZW4KKyAgICBHVU1NSUJPT1RfQ0ZHUz0iL2Jvb3QvbG9hZGVyL2VudHJpZXMvKi5jb25mIgorICAgICMgY29weSBjb25maWcgZmlsZXMgZm9yIGd1bW1pYm9vdAorICAgIGNwIC1kciAvcnVuL21lZGlhLyQxL2xvYWRlciAvYm9vdAorICAgICMgZGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgcm0gLWYgL2Jvb3QvbG9hZGVyL2VudHJpZXMvaW5zdGFsbC5jb25mCisgICAgIyBkZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgYWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQG9wdGlvbnMgKkBvcHRpb25zIHJvb3Q9UEFSVFVVSUQ9JHJvb3R1dWlkIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1VNTUlCT09UX0NGR1MKK2ZpCisKK3Vtb3VudCAvdGd0X3Jvb3QKKworY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9ib290CisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzYyMTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2gKQEAgLTAsMCArMSwyMjAgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAwCisKKyMgNTAlIGZvciB0aGUgdGhlIHRlc3QgcGFydGl0aW9uCit0ZXN0ZnNfcmF0aW89NTAKKworIyBHZXQgYSBsaXN0IG9mIGhhcmQgZHJpdmVzCitoZG5hbWVsaXN0PSIiCitsaXZlX2Rldl9uYW1lPSR7MSUlLyp9CisKK2VjaG8gIlNlYXJjaGluZyBmb3IgaGFyZCBkcml2ZXMgLi4uIgorCitmb3IgZGV2aWNlIGluIGBscyAvc3lzL2Jsb2NrL2A7IGRvCisgICAgY2FzZSAkZGV2aWNlIGluCisJbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKwkgICAgOzsKKwlyYW0qKQorICAgICAgICAgICAgIyBza2lwIHJhbSBkZXZpY2UKKwkgICAgOzsKKwkqKQorCSAgICAjIHNraXAgdGhlIGRldmljZSBMaXZlT1MgaXMgb24KKwkgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisJICAgIGlmIFsgJGRldmljZSAhPSAkbGl2ZV9kZXZfbmFtZSAtYSAtZSAvZGV2LyRkZXZpY2UgXTsgdGhlbgorCQloZG5hbWVsaXN0PSIkaGRuYW1lbGlzdCAkZGV2aWNlIgorCSAgICBmaQorCSAgICA7OworICAgIGVzYWMKK2RvbmUKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKwllY2hvIC1uICJWRU5ET1I9IgorCWNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgZWNobyAtbiAiTU9ERUw9IgorICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKwllY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKwlyZWFkIGFuc3dlcgorCWlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisJICAgIGJyZWFrCisJZmkKKwllY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorCVRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisJYnJlYWsKKyAgICBmaQorZG9uZQorCitpZiBbIC1uICIkVEFSR0VUX0RFVklDRV9OQU1FIiBdOyB0aGVuCisgICAgZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyRUQVJHRVRfREVWSUNFX05BTUUgLi4uIgorZWxzZQorICAgIGVjaG8gIk5vIGhhcmQgZHJpdmUgc2VsZWN0ZWQuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK2RldmljZT0kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50IC9kZXYvJHtkZXZpY2V9KiAyPiAvZGV2L251bGwgfHwgL2Jpbi90cnVlCisKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0gOyB0aGVuCisgICAgbWtub2QgL2Rldi9sb29wMCBiIDcgMAorZmkKKworbWtkaXIgLXAgL3RtcAoraWYgWyAhIC1MIC9ldGMvbXRhYiBdOyB0aGVuCisJY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorZmkKKworZGlza19zaXplPSQocGFydGVkIC9kZXYvJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKwordGVzdGZzX3NpemU9JCgoZGlza19zaXplKnRlc3Rmc19yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJvb3Rfc2l6ZS10ZXN0ZnNfc2l6ZSkpCisKK3Jvb3Rmc19zdGFydD0kKChib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQordGVzdGZzX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisJcGFydF9wcmVmaXg9InAiCisJcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorcm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCit0ZXN0ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiVGVzdGZzIHBhcnRpdGlvbiBzaXplOiAkdGVzdGZzX3NpemUgTUIgKCR0ZXN0ZnMpIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvJHtkZXZpY2V9IGJzPTUxMiBjb3VudD0yCisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rbGFiZWwgbXNkb3MKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAwJSAkYm9vdF9zaXplCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHRlc3RmcyBwYXJ0aXRpb24gb24gJHRlc3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkdGVzdGZzX3N0YXJ0IDEwMCUKKworcGFydGVkIC9kZXYvJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJib290IiAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJyb290ZnMiICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkdGVzdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInRlc3Ryb290ZnMiICR0ZXN0ZnMKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CisKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3NyY19yb290LyogL3RndF9yb290CisKK3RvdWNoIC90Z3Rfcm9vdC9ldGMvbWFzdGVyaW1hZ2UKKworaWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGVjaG8gIiRib290ZnMgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgZXh0MyAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKwllY2hvICIvZGV2LyR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIF0gOyB0aGVuCisgICAgZWNobyAiUHJlcGFyaW5nIGN1c3RvbSBncnViMiBtZW51Li4uIgorICAgIEdSVUJDRkc9Ii9ib290L2dydWIvZ3J1Yi5jZmciCisgICAgbWtkaXIgLXAgJChkaXJuYW1lICRHUlVCQ0ZHKQorICAgIGNhdCA+JEdSVUJDRkcgPDxfRU9GIAorc2VyaWFsIC0tc3BlZWQ9MTE1MjAwIC0tdW5pdD0wIC0td29yZD04IC0tcGFyaXR5PW5vIC0tc3RvcD0xCit0ZXJtaW5hbF9pbnB1dCAtLWFwcGVuZCAgc2VyaWFsCit0ZXJtaW5hbF9vdXRwdXQgLS1hcHBlbmQgc2VyaWFsCitzZXQgdGltZW91dF9zdHlsZT1oaWRkZW4KK3NldCB0aW1lb3V0PTUKK21lbnVlbnRyeSAiTGludXgiIHsKKyAgICBzZXQgcm9vdD0oaGQwLDEpCisgICAgbGludXggL3ZtbGludXogcm9vdD0kcm9vdGZzICRyb290d2FpdCBydyAkNSAkMyAkNCBxdWlldAorfQorX0VPRgorICAgICMgQWRkIHRoZSB0ZXN0IGxhYmVsCisgICAgZWNobyAtbmUgIlxubWVudWVudHJ5ICd0ZXN0JyAtLWhvdGtleSB4IHtcbmxpbnV4IC90ZXN0LWtlcm5lbCByb290PSR0ZXN0ZnMgcncgJHJvb3R3YWl0IHF1aWV0XG59XG4iID4+ICRHUlVCQ0ZHCisKKyAgICBjaG1vZCAwNDQ0ICRHUlVCQ0ZHCitmaQorZ3J1Yi1pbnN0YWxsIC9kZXYvJHtkZXZpY2V9CitlY2hvICIoaGQwKSAvZGV2LyR7ZGV2aWNlfSIgPiAvYm9vdC9ncnViL2RldmljZS5tYXAKKworIyBJZiBncnViLmNmZyBkb2Vzbid0IGV4aXN0LCBhc3N1bWUgR1JVQiAwLjk3IGFuZCBjcmVhdGUgYSBtZW51LmxzdAoraWYgWyAhIC1mIC9ib290L2dydWIvZ3J1Yi5jZmcgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIgbWVudS4uLiIKKyAgICBlY2hvICJkZWZhdWx0IDAiID4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpbWVvdXQgMzAiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJ0aXRsZSBMaXZlIEJvb3QvSW5zdGFsbC1JbWFnZSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInJvb3QgIChoZDAsMCkiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJrZXJuZWwgL3ZtbGludXogcm9vdD0kcm9vdGZzIHJ3ICQzICQ0IHF1aWV0IiA+PiAvYm9vdC9ncnViL21lbnUubHN0CitmaQorCitjcCAvcnVuL21lZGlhLyQxL3ZtbGludXogL2Jvb3QvCisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllOTc2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKQEAgLTAsMCArMSwyNzIgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAKKworIyA1JSBmb3IgdGhlIHN3YXAKK3N3YXBfcmF0aW89NQorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9YGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICR7MSUvfSB8IGF3ayAne3ByaW50ICQxfSdgCitsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSNcL2Rldi99CisjIE9ubHkgc3RyaXAgdGhlIGRpZ2l0IGlkZW50aWZpZXIgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gbW1jCitjYXNlICRsaXZlX2Rldl9uYW1lIGluCisgICAgbW1jYmxrKikKKyAgICA7OworICAgICopCisgICAgICAgIGxpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lJSVbMC05XSp9CisgICAgOzsKK2VzYWMKKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHNyKikKKyAgICAgICAgICAgICMgc2tpcCBDRFJPTSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorICAgICAgICAgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgICAgICAgICAkbGl2ZV9kZXZfbmFtZSopCisgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgZnJvbQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK1RBUkdFVF9ERVZJQ0VfTkFNRT0iIgorZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAjIERpc3BsYXkgZm91bmQgaGFyZCBkcml2ZXMgYW5kIHRoZWlyIGJhc2ljIGluZm8KKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGVjaG8gL2Rldi8kaGRuYW1lCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvciBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlZFTkRPUj0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiTU9ERUw9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbAorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlVFVkVOVD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudAorICAgIGZpCisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgZWNobyAtbiAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlPyBbeS9uXSAiCisgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorICAgICAgICBUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorICAgICAgICBicmVhaworICAgIGZpCitkb25lCisKK2lmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRSAuLi4iCitlbHNlCisgICAgZWNobyAiTm8gaGFyZCBkcml2ZSBzZWxlY3RlZC4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworZGV2aWNlPS9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRQorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworaWYgWyAhIC1iIC9kZXYvbG9vcDAgXSA7IHRoZW4KKyAgICBta25vZCAvZGV2L2xvb3AwIGIgNyAwCitmaQorCitta2RpciAtcCAvdG1wCitpZiBbICEgLUwgL2V0Yy9tdGFiIF07IHRoZW4KKyAgICBjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCitmaQorCitkaXNrX3NpemU9JChwYXJ0ZWQgJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKworZ3J1Yl92ZXJzaW9uPSQoZ3J1Yi1pbnN0YWxsIC12fHNlZCAncy8uKiBcKFswLTldXCkuKi9cMS8nKQorCitpZiBbICRncnViX3ZlcnNpb24gLWVxIDAgXSA7IHRoZW4KKyAgICBiaW9zX2Jvb3Rfc2l6ZT0wCitlbHNlCisgICAgIyBGb3IgR1JVQiAyIHdlIG5lZWQgc2VwYXJhdGUgcGFyaXRpb24gdG8gc3RvcmUgc3RhZ2UyIGdydWIgaW1hZ2UKKyAgICAjIDJNYiB2YWx1ZSBpcyBjaG9zZW4gdG8gYWxpZ24gcGFydGl0aW9uIGZvciBiZXN0IHBlcmZvcm1hbmNlLgorICAgIGJpb3NfYm9vdF9zaXplPTIKK2ZpCisKK3N3YXBfc2l6ZT0kKChkaXNrX3NpemUqc3dhcF9yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJpb3NfYm9vdF9zaXplLWJvb3Rfc2l6ZS1zd2FwX3NpemUpKQorCitib290X3N0YXJ0PSQoKGJpb3NfYm9vdF9zaXplKSkKK3Jvb3Rmc19zdGFydD0kKChiaW9zX2Jvb3Rfc2l6ZStib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQorc3dhcF9zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCisKK2lmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgorICAgIGJpb3NfYm9vdD0nJworICAgIGJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKKyAgICByb290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCisgICAgc3dhcD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKK2Vsc2UKKyAgICBiaW9zX2Jvb3Q9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCisgICAgYm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgorICAgIHJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKyAgICBzd2FwPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9NAorZmkKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitbICRncnViX3ZlcnNpb24gLW5lIDAgXSAmJiBlY2hvICJCSU9TIGJvb3QgcGFydGl0aW9uIHNpemU6ICRiaW9zX2Jvb3Rfc2l6ZSBNQiAoJGJpb3NfYm9vdCkiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiU3dhcCBwYXJ0aXRpb24gc2l6ZTogICAkc3dhcF9zaXplIE1CICgkc3dhcCkiCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPSR7ZGV2aWNlfSBicz01MTIgY291bnQ9MzUKKworZWNobyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgoraWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3RhYmxlIG1zZG9zCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5IGV4dDMgMCUgJGJvb3Rfc2l6ZQorZWxzZQorICAgIHBhcnRlZCAke2RldmljZX0gbWt0YWJsZSBncHQKKyAgICBlY2hvICJDcmVhdGluZyBCSU9TIGJvb3QgcGFydGl0aW9uIG9uICRiaW9zX2Jvb3QiCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgYmlvc19ib290IDAlICRiaW9zX2Jvb3Rfc2l6ZQorICAgIHBhcnRlZCAke2RldmljZX0gc2V0IDEgYmlvc19ncnViIG9uCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBib290IGV4dDMgJGJvb3Rfc3RhcnQgJGJvb3Rfc2l6ZQorZmkKKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gJiYgcG5hbWU9J3ByaW1hcnknIHx8IHBuYW1lPSdyb290JworcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgJHBuYW1lIGV4dDMgJHJvb3Rmc19zdGFydCAkcm9vdGZzX2VuZAorCitlY2hvICJDcmVhdGluZyBzd2FwIHBhcnRpdGlvbiBvbiAkc3dhcCIKK1sgJGdydWJfdmVyc2lvbiAtZXEgMCBdICYmIHBuYW1lPSdwcmltYXJ5JyB8fCBwbmFtZT0nc3dhcCcKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0ICRwbmFtZSBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGlmIFsgJGdydWJfdmVyc2lvbiAtbmUgMCBdIDsgdGhlbgorICAgICAgICBib290X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBVVUlEICR7ZGV2aWNlfTIpCisgICAgICAgIHN3YXBfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9NCkKKyAgICAgICAgYm9vdGRldj0iVVVJRD0kYm9vdF91dWlkIgorICAgICAgICBzd2FwZGV2PS9kZXYvZGlzay9ieS1wYXJ0dXVpZC8kc3dhcF9wYXJ0X3V1aWQKKyAgICBlbHNlCisgICAgICAgIGJvb3RkZXY9JHtkZXZpY2V9MgorICAgICAgICBzd2FwZGV2PSR7ZGV2aWNlfTQKKyAgICBmaQorICAgIGVjaG8gIiRzd2FwZGV2ICAgICAgICAgICAgICAgIHN3YXAgICAgICAgICAgICAgc3dhcCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMCIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgIGVjaG8gIiRib290ZGV2ICAgICAgICAgICAgICAvYm9vdCAgICAgICAgICAgIGV4dDMgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDEgIDIiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvdGd0X3Jvb3QvZXRjL3VkZXYvIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIiR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIC1hICRncnViX3ZlcnNpb24gLW5lIDAgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIyIG1lbnUuLi4iCisgICAgcm9vdF9wYXJ0X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBQQVJUVVVJRCAke2RldmljZX0zKQorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIvYm9vdC9ncnViL2dydWIuY2ZnIgorICAgIG1rZGlyIC1wICQoZGlybmFtZSAkR1JVQkNGRykKKyAgICBjYXQgPiRHUlVCQ0ZHIDw8X0VPRgorbWVudWVudHJ5ICJMaW51eCIgeworICAgIHNlYXJjaCAtLW5vLWZsb3BweSAtLWZzLXV1aWQgJGJvb3RfdXVpZCAtLXNldCByb290CisgICAgbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgJHJvb3R3YWl0IHJ3ICQ1ICQzICQ0IHF1aWV0Cit9CitfRU9GCisgICAgY2htb2QgMDQ0NCAkR1JVQkNGRworZmkKK2dydWItaW5zdGFsbCAke2RldmljZX0KKworaWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgZWNobyAiKGhkMCkgJHtkZXZpY2V9IiA+IC9ib290L2dydWIvZGV2aWNlLm1hcAorICAgIGVjaG8gIlByZXBhcmluZyBjdXN0b20gZ3J1YiBtZW51Li4uIgorICAgIGVjaG8gImRlZmF1bHQgMCIgPiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAidGltZW91dCAzMCIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpdGxlIExpdmUgQm9vdC9JbnN0YWxsLUltYWdlIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAicm9vdCAgKGhkMCwwKSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gImtlcm5lbCAvdm1saW51eiByb290PSRyb290ZnMgcncgJDMgJDQgcXVpZXQiID4+IC9ib290L2dydWIvbWVudS5sc3QKK2ZpCisKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvYm9vdC8KKwordW1vdW50IC9ib290CisKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODUyYzU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaApAQCAtMCwwICsxLDIzNSBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworUk9PVF9NT1VOVD0iL3Jvb3Rmcy8iCitST09UX0lNQUdFPSJyb290ZnMuaW1nIgorTU9VTlQ9Ii9iaW4vbW91bnQiCitVTU9VTlQ9Ii9iaW4vdW1vdW50IgorSVNPTElOVVg9IiIKKworUk9PVF9ESVNLPSIiCisKKyMgQ29waWVkIGZyb20gaW5pdHJhbWZzLWZyYW1ld29yay4gVGhlIGNvcmUgb2YgdGhpcyBzY3JpcHQgcHJvYmFibHkgc2hvdWxkIGJlCisjIHR1cm5lZCBpbnRvIGluaXRyYW1mcy1mcmFtZXdvcmsgbW9kdWxlcyB0byByZWR1Y2UgZHVwbGljYXRpb24uCit1ZGV2X2RhZW1vbigpIHsKKwlPUFRJT05TPSIvc2Jpbi91ZGV2L3VkZXZkIC9zYmluL3VkZXZkIC9saWIvdWRldi91ZGV2ZCAvbGliL3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCIKKworCWZvciBvIGluICRPUFRJT05TOyBkbworCQlpZiBbIC14ICIkbyIgXTsgdGhlbgorCQkJZWNobyAkbworCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisKKwlyZXR1cm4gMQorfQorCitfVURFVl9EQUVNT049YHVkZXZfZGFlbW9uYAorCitlYXJseV9zZXR1cCgpIHsKKyAgICBta2RpciAtcCAvcHJvYworICAgIG1rZGlyIC1wIC9zeXMKKyAgICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKKyAgICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisgICAgbW91bnQgLXQgZGV2dG1wZnMgbm9uZSAvZGV2CisKKyAgICAjIHN1cHBvcnQgbW9kdWxhciBrZXJuZWwKKyAgICBtb2Rwcm9iZSBpc29mcyAyPiAvZGV2L251bGwKKworICAgIG1rZGlyIC1wIC9ydW4KKyAgICBta2RpciAtcCAvdmFyL3J1bgorCisgICAgJF9VREVWX0RBRU1PTiAtLWRhZW1vbgorICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQKK30KKworcmVhZF9hcmdzKCkgeworICAgIFsgLXogIiRDTURMSU5FIiBdICYmIENNRExJTkU9YGNhdCAvcHJvYy9jbWRsaW5lYAorICAgIGZvciBhcmcgaW4gJENNRExJTkU7IGRvCisgICAgICAgIG9wdGFyZz1gZXhwciAieCRhcmciIDogJ3hbXj1dKj1cKC4qXCknYAorICAgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICAgICAgIHJvb3Q9KikKKyAgICAgICAgICAgICAgICBST09UX0RFVklDRT0kb3B0YXJnIDs7CisgICAgICAgICAgICByb290aW1hZ2U9KikKKyAgICAgICAgICAgICAgICBST09UX0lNQUdFPSRvcHRhcmcgOzsKKyAgICAgICAgICAgIHJvb3Rmc3R5cGU9KikKKyAgICAgICAgICAgICAgICBtb2Rwcm9iZSAkb3B0YXJnIDI+IC9kZXYvbnVsbCA7OworICAgICAgICAgICAgTEFCRUw9KikKKyAgICAgICAgICAgICAgICBsYWJlbD0kb3B0YXJnIDs7CisgICAgICAgICAgICB2aWRlbz0qKQorICAgICAgICAgICAgICAgIHZpZGVvX21vZGU9JGFyZyA7OworICAgICAgICAgICAgdmdhPSopCisgICAgICAgICAgICAgICAgdmdhX21vZGU9JGFyZyA7OworICAgICAgICAgICAgY29uc29sZT0qKQorICAgICAgICAgICAgICAgIGlmIFsgLXogIiR7Y29uc29sZV9wYXJhbXN9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSRhcmcKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSIkY29uc29sZV9wYXJhbXMgJGFyZyIKKyAgICAgICAgICAgICAgICBmaSA7OworICAgICAgICAgICAgZGVidWdzaGVsbCopCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJG9wdGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PTMwCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PSRvcHRhcmcKKyAgICAgICAgICAgICAgICBmaSAKKyAgICAgICAgZXNhYworICAgIGRvbmUKK30KKworYm9vdF9saXZlX3Jvb3QoKSB7CisgICAgIyBXYXRjaGVzIHRoZSB1ZGV2IGV2ZW50IHF1ZXVlLCBhbmQgZXhpdHMgaWYgYWxsIGN1cnJlbnQgZXZlbnRzIGFyZSBoYW5kbGVkCisgICAgdWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTMgLS1xdWlldAorICAgIGtpbGxhbGwgIiR7X1VERVZfREFFTU9OIyMqL30iIDI+L2Rldi9udWxsCisKKyAgICAjIEFsbG93IGZvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVhbCByb290IGV2ZW4gYWZ0ZXIgYm9vdAorICAgIG1rZGlyIC1wICAke1JPT1RfTU9VTlR9L21lZGlhL3JlYWxyb290CisgICAgbW91bnQgLW4gLS1tb3ZlICIvcnVuL21lZGlhLyR7Uk9PVF9ESVNLfSIgJHtST09UX01PVU5UfS9tZWRpYS9yZWFscm9vdAorCisgICAgIyBNb3ZlIHRoZSBtb3VudCBwb2ludHMgb2Ygc29tZSBmaWxlc3lzdGVtcyBvdmVyIHRvCisgICAgIyB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcmllcyB1bmRlciB0aGUgcmVhbCByb290IGZpbGVzeXN0ZW0uCisgICAgZm9yIGRpciBpbiBgYXdrICcvXC9kZXYuKiBcL3J1blwvbWVkaWEve3ByaW50ICQyfScgL3Byb2MvbW91bnRzYDsgZG8KKyAgICAgICAgbWtkaXIgLXAgICR7Uk9PVF9NT1VOVH0vbWVkaWEvJHtkaXIjIyovfQorICAgICAgICBtb3VudCAtbiAtLW1vdmUgJGRpciAke1JPT1RfTU9VTlR9L21lZGlhLyR7ZGlyIyMqL30KKyAgICBkb25lCisgICAgbW91bnQgLW4gLS1tb3ZlIC9wcm9jICR7Uk9PVF9NT1VOVH0vcHJvYworICAgIG1vdW50IC1uIC0tbW92ZSAvc3lzICR7Uk9PVF9NT1VOVH0vc3lzCisgICAgbW91bnQgLW4gLS1tb3ZlIC9kZXYgJHtST09UX01PVU5UfS9kZXYKKworICAgIGNkICRST09UX01PVU5UCisKKyAgICAjIGJ1c3lib3ggc3dpdGNoX3Jvb3Qgc3VwcG9ydHMgLWMgb3B0aW9uCisgICAgZXhlYyBzd2l0Y2hfcm9vdCAtYyAvZGV2L2NvbnNvbGUgJFJPT1RfTU9VTlQgL3NiaW4vaW5pdCAkQ01ETElORSB8fAorICAgICAgICBmYXRhbCAiQ291bGRuJ3Qgc3dpdGNoX3Jvb3QsIGRyb3BwaW5nIHRvIHNoZWxsIgorfQorCitmYXRhbCgpIHsKKyAgICBlY2hvICQxID4kQ09OU09MRQorICAgIGVjaG8gPiRDT05TT0xFCisgICAgZXhlYyBzaAorfQorCitlYXJseV9zZXR1cAorCitbIC16ICIkQ09OU09MRSIgXSAmJiBDT05TT0xFPSIvZGV2L2NvbnNvbGUiCisKK3JlYWRfYXJncworCitlY2hvICJXYWl0aW5nIGZvciByZW1vdmFibGUgbWVkaWEuLi4iCitDPTAKK3doaWxlIHRydWUKK2RvCisgIGZvciBpIGluIGBscyAvcnVuL21lZGlhIDI+L2Rldi9udWxsYDsgZG8KKyAgICAgIGlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kUk9PVF9JTUFHRSBdIDsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlST09UX0RJU0s9IiRpIgorCQlicmVhaworCSAgZWxpZiBbIC1mIC9ydW4vbWVkaWEvJGkvaXNvbGludXgvJFJPT1RfSU1BR0UgXTsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlJU09MSU5VWD0iaXNvbGludXgiCisJCVJPT1RfRElTSz0iJGkiCisJCWJyZWFrCQorICAgICAgZmkKKyAgZG9uZQorICBpZiBbICIkZm91bmQiID0gInllcyIgXTsgdGhlbgorICAgICAgYnJlYWs7CisgIGZpCisgICMgZG9uJ3Qgd2FpdCBmb3IgbW9yZSB0aGFuICRzaGVsbHRpbWVvdXQgc2Vjb25kcywgaWYgaXQncyBzZXQKKyAgaWYgWyAtbiAiJHNoZWxsdGltZW91dCIgXTsgdGhlbgorICAgICAgZWNobyAtbiAiICIgJCgoICRzaGVsbHRpbWVvdXQgLSAkQyApKQorICAgICAgaWYgWyAkQyAtZ2UgJHNoZWxsdGltZW91dCBdOyB0aGVuCisgICAgICAgICAgIGVjaG8gIi4uLiIKKwkgICBlY2hvICJNb3VudGVkIGZpbGVzeXN0ZW1zIgorICAgICAgICAgICBtb3VudCB8IGdyZXAgbWVkaWEKKyAgICAgICAgICAgZWNobyAiQXZhaWxhYmxlIGJsb2NrIGRldmljZXMiCisgICAgICAgICAgIGNhdCAvcHJvYy9wYXJ0aXRpb25zCisgICAgICAgICAgIGZhdGFsICJDYW5ub3QgZmluZCAkUk9PVF9JTUFHRSBmaWxlIGluIC9ydW4vbWVkaWEvKiAsIGRyb3BwaW5nIHRvIGEgc2hlbGwgIgorICAgICAgZmkKKyAgICAgIEM9JCgoIEMgKyAxICkpCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKworIyBUcnkgdG8gbW91bnQgdGhlIHJvb3QgaW1hZ2UgcmVhZC13cml0ZSBhbmQgdGhlbiBib290IGl0IHVwLgorIyBUaGlzIGZ1bmN0aW9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhIHJlYWQtb25seSBpbWFnZSBhbmQgYSByZWFkLXdyaXRlIGltYWdlLgorIyBJbiB0aGUgZm9ybWVyIGNhc2UgKHR5cGljYWxseSBhbiBpc28pLCBpdCB0cmllcyB0byBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUuCisjIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHJvb3QgaW1hZ2UgY291bGQgYmUgbW91bnRlZCBhbmQgdGhlbiBkaXJlY3RseSBib290ZWQgdXAuCittb3VudF9hbmRfYm9vdCgpIHsKKyAgICBta2RpciAkUk9PVF9NT1VOVAorICAgIG1rbm9kIC9kZXYvbG9vcDAgYiA3IDAgMj4vZGV2L251bGwKKworICAgIGlmICEgbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kUk9PVF9ESVNLLyRJU09MSU5VWC8kUk9PVF9JTUFHRSAkUk9PVF9NT1VOVCA7IHRoZW4KKwlmYXRhbCAiQ291bGQgbm90IG1vdW50IHJvb3RmcyBpbWFnZSIKKyAgICBmaQorCisgICAgaWYgdG91Y2ggJFJPT1RfTU9VTlQvYmluIDI+L2Rldi9udWxsOyB0aGVuCisJIyBUaGUgcm9vdCBpbWFnZSBpcyByZWFkLXdyaXRlLCBkaXJlY3RseSBib290IGl0IHVwLgorCWJvb3RfbGl2ZV9yb290CisgICAgZmkKKworICAgICMgZGV0ZXJtaW5lIHdoaWNoIHVuaWZpY2F0aW9uIGZpbGVzeXN0ZW0gdG8gdXNlCisgICAgdW5pb25fZnNfdHlwZT0iIgorICAgIGlmIGdyZXAgLXEgLXcgIm92ZXJsYXlmcyIgL3Byb2MvZmlsZXN5c3RlbXM7IHRoZW4KKwl1bmlvbl9mc190eXBlPSJvdmVybGF5ZnMiCisgICAgZWxpZiBncmVwIC1xIC13ICJhdWZzIiAvcHJvYy9maWxlc3lzdGVtczsgdGhlbgorCXVuaW9uX2ZzX3R5cGU9ImF1ZnMiCisgICAgZWxzZQorCXVuaW9uX2ZzX3R5cGU9IiIKKyAgICBmaQorCisgICAgIyBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUKKyAgICBjYXNlICR1bmlvbl9mc190eXBlIGluCisJIm92ZXJsYXlmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgb3ZlcmxheWZzIC1vICJsb3dlcmRpcj0vcm9vdGZzLnJvLHVwcGVyZGlyPS9yb290ZnMucnciIG92ZXJsYXlmcyAkUk9PVF9NT1VOVAorCQlta2RpciAtcCAkUk9PVF9NT1VOVC9yb290ZnMucm8gJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJCW1vdW50IC0tbW92ZSAvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ybworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ydyAkUk9PVF9NT1VOVC9yb290ZnMucncKKwkgICAgZmkKKwkgICAgOzsKKwkiYXVmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgYXVmcyAtbyAiZGlycz0vcm9vdGZzLnJ3PXJ3Oi9yb290ZnMucm89cm8iIGF1ZnMgJFJPT1RfTU9VTlQKKwkJbWtkaXIgLXAgJFJPT1RfTU9VTlQvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ydworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ybyAkUk9PVF9NT1VOVC9yb290ZnMucm8KKwkJbW91bnQgLS1tb3ZlIC9yb290ZnMucncgJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJICAgIGZpCisJICAgIDs7CisJIiIpCisJICAgIG1vdW50IC10IHRtcGZzIC1vIHJ3LG5vYXRpbWUsbW9kZT03NTUgdG1wZnMgJFJPT1RfTU9VTlQvbWVkaWEKKwkgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIGJvb3QgdGhlIGltYWdlCisgICAgYm9vdF9saXZlX3Jvb3QKK30KKworY2FzZSAkbGFiZWwgaW4KKyAgICBib290KQorCW1vdW50X2FuZF9ib290CisJOzsKKyAgICBpbnN0YWxsfGluc3RhbGwtZWZpKQorCWlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kSVNPTElOVVgvJFJPT1RfSU1BR0UgXSA7IHRoZW4KKwkgICAgLi8kbGFiZWwuc2ggJGkvJElTT0xJTlVYICRST09UX0lNQUdFICR2aWRlb19tb2RlICR2Z2FfbW9kZSAkY29uc29sZV9wYXJhbXMKKwllbHNlCisJICAgIGZhdGFsICJDb3VsZCBub3QgZmluZCAkbGFiZWwgc2NyaXB0IgorCWZpCisKKwkjIElmIHdlJ3JlIGdldHRpbmcgaGVyZSwgd2UgZmFpbGVkLi4uCisJZmF0YWwgIkluc3RhbGxhdGlvbiBpbWFnZSBmYWlsZWQiCisJOzsKKyAgICAqKQorCSMgTm90IHN1cmUgd2hhdCBib290IGxhYmVsIGlzIHByb3ZpZGVkLiAgVHJ5IHRvIGJvb3QgdG8gYXZvaWQgbG9ja2luZyB1cC4KKwltb3VudF9hbmRfYm9vdAorCTs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWJvb3RfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWU3OTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkV4dHJlbWVseSBiYXNpYyBsaXZlIGltYWdlIGluaXQgc2NyaXB0IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtYm9vdC5zaCIKKworUFIgPSAicjIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1ib290LnNoICR7RH0vaW5pdAorfQorCitpbmhlcml0IGFsbGFyY2gKKworRklMRVNfJHtQTn0gKz0gIiAvaW5pdCAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2RlYnVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmZkN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZwpAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworIyBBZGRzIHN1cHBvcnQgdG8gZHluYW1pYyBkZWJ1Z2dpbmcgb2YgaW5pdHJhbWZzIHVzaW5nIGJvb3RwYXJhbSBpbgorIyBmb2xsb3dpbmcgZm9ybWF0OgorIyAgIHNoZWxsICAgICAgICAgICAgICAgICA6IHN0YXJ0cyBhIHNoZWxsIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtb2R1bGUKKyMgICBzaGVsbD1iZWZvcmU6PG1vZHVsZT4gOiBzdGFydHMgYSBzaGVsbCBiZWZvcmUgPG1vZHVsZT4gaXMgbG9hZGVkIGFuZCBydW4KKyMgICBzaGVsbD1hZnRlcjo8bW9kdWxlPiAgOiBzdGFydHMgYSBzaGVsbCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorIworIyAgIHNoZWxsLWRlYnVnICAgICAgICAgICAgICAgICA6IHJ1biBzZXQgLXggYXMgc29vbiBhcyBwb3NzaWJsZQorIyAgIHNoZWxsLWRlYnVnPWJlZm9yZTo8bW9kdWxlPiA6IHJ1biBzZXQgLXggYmVmb3JlIDxtb2R1bGU+IGlzIGxvYWRlZCBhbmQgcnVuCisjICAgc2hlbGwtZGVidWc9YWZ0ZXI6PG1vZHVsZT4gIDogcnVuIHNldCAteCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorCitERUJVR19TSEVMTD0iZmFsc2UiCisKK2RlYnVnX2hvb2tfaGFuZGxlcigpIHsKKwlzdGF0dXM9JDEKKwltb2R1bGU9JDIKKworCWlmIFsgLW4gIiRib290cGFyYW1fc2hlbGwiIF0gJiYgWyAiJGJvb3RwYXJhbV9zaGVsbCIgIT0gInRydWUiIF07IHRoZW4KKwkJc2hlbGxfd2FudGVkX3N0YXR1cz1gZXhwciAkYm9vdHBhcmFtX3NoZWxsIDogJ1woLipcKTouKidgCisJCXNoZWxsX3dhbnRlZF9tb2R1bGU9YGV4cHIgJGJvb3RwYXJhbV9zaGVsbCA6ICcuKjpcKC4qXCknYAorCisJCWlmIFsgIiRzaGVsbF93YW50ZWRfc3RhdHVzIiA9ICJiZWZvcmUiIF07IHRoZW4KKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cHJlCisJCWVsc2UKKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cG9zdAorCQlmaQorCWZpCisKKwlpZiBbICIkYm9vdHBhcmFtX3NoZWxsIiA9ICJ0cnVlIiBdIHx8CisJCSggWyAiJHN0YXR1cyIgPSAiJHNoZWxsX3dhbnRlZF9zdGF0dXMiIF0gJiYKKwkJCVsgIiRtb2R1bGUiID0gIiRzaGVsbF93YW50ZWRfbW9kdWxlIiBdICk7IHRoZW4KKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgJHN0YXR1c19tc2cgJG1vZHVsZS4uLiIKKwkJc2gKKwlmaQorCisJaWYgWyAtbiAiJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyIgXSAmJiBbICIkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQlzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzPWBleHByICRib290cGFyYW1fc2hlbGxfZGVidWcgOiAnXCguKlwpOi4qJ2AKKwkJc2hlbGxfZGVidWdfd2FudGVkX21vZHVsZT1gZXhwciAkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIDogJy4qOlwoLipcKSdgCisKKwkJaWYgWyAiJHNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXMiID0gImJlZm9yZSIgXTsgdGhlbgorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wcmUKKwkJZWxzZQorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wb3N0CisJCWZpCisJZmkKKworCWlmIFsgIiRib290cGFyYW1fc2hlbGxfZGVidWciID0gInRydWUiIF0gfHwKKwkJKCBbICIkc3RhdHVzIiA9ICIkc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cyIgXSAmJgorCQkJWyAiJG1vZHVsZSIgPSAiJHNoZWxsX2RlYnVnX3dhbnRlZF9tb2R1bGUiIF0gKTsgdGhlbgorCQlpZiBbICIkREVCVUdfU0hFTEwiID0gInRydWUiIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisKKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgZGVidWdnaW5nICRzdGF0dXNfbXNnICRtb2R1bGUuLi4iCisJCURFQlVHX1NIRUxMPSJ0cnVlIgorCQlzZXQgLXgKKwlmaQorfQorCitkZWJ1Z19lbmFibGVkKCkgeworCXJldHVybiAwCit9CisKK2RlYnVnX3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJkZWJ1Z19ob29rX2hhbmRsZXIiCisJYWRkX21vZHVsZV9wb3N0X2hvb2sgImRlYnVnX2hvb2tfaGFuZGxlciIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2UyZnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5ZjgwMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitlMmZzX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworZTJmc19ydW4oKSB7CisJZmlsZXN5c3RlbXM9ImV4dDQgZXh0MyBleHQyIgorCisJIyBsb2FkIG1vZHVsZXMKKwlmb3IgZnMgaW4gJGZpbGVzeXN0ZW1zOyBkbworCQlsb2FkX2tlcm5lbF9tb2R1bGUgJGZzCisJZG9uZQorCisJZm9yIGZzIGluICRmaWxlc3lzdGVtczsgZG8KKwkJZXZhbCAiZnNfb3B0aW9ucz1cJGJvb3RwYXJhbV8ke2ZzfSIKKwkJaWYgWyAtbiAiJGZzX29wdGlvbnMiIF07IHRoZW4KKwkJICAgIGRldj1gZXhwciAiJGZzX29wdGlvbnMiIDogJ1woW146XSpcKS4qJ2AKKwkJICAgIHBhdGg9YGV4cHIgIiRmc19vcHRpb25zIiA6ICdbXjpdKjpcKFteOl0qXCkuKidgCisKKwkJICAgIGluZm8gIk1vdW50aW5nICRkZXYgYXMgJGZzIG9uICRwYXRoIGFzICRmcy4uLiIKKwkJCW1rZGlyIC1wICRwYXRoCisJCSAgICBtb3VudCAtdCAkZnMgJGRldiAkcGF0aAorCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2ZpbmlzaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2ZpbmlzaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNzEyZmYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZmluaXNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitmaW5pc2hfZW5hYmxlZCgpIHsKKwlyZXR1cm4gMAorfQorCitmaW5pc2hfcnVuKCkgeworCWlmIFsgLW4gIiRST09URlNfRElSIiBdOyB0aGVuCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdGRlbGF5IiBdOyB0aGVuCisJCQlkZWJ1ZyAiU2xlZXBpbmcgZm9yICRyb290ZGVsYXkgc2Vjb25kKHMpIHRvIHdhaXQgcm9vdCB0byBzZXR0bGUuLi4iCisJCQlzbGVlcCAkYm9vdHBhcmFtX3Jvb3RkZWxheQorCQlmaQorCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJZGVidWcgIk5vIGUyZnMgY29tcGF0aWJsZSBmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQsIG1vdW50aW5nICRib290cGFyYW1fcm9vdC4uLiIKKworCQkJaWYgWyAiYGVjaG8gJHtib290cGFyYW1fcm9vdH0gfCBjdXQgLWMxLTVgIiA9ICJVVUlEPSIgXTsgdGhlbgorCQkJCXJvb3RfdXVpZD1gZWNobyAkYm9vdHBhcmFtX3Jvb3QgfCBjdXQgLWM2LWAKKwkJCQlib290cGFyYW1fcm9vdD0iL2Rldi9kaXNrL2J5LXV1aWQvJHJvb3RfdXVpZCIKKwkJCWZpCisKKwkJCWlmIFsgLWUgIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJCWZsYWdzPSIiCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9ybyIgXTsgdGhlbgorCQkJCQlpZiBbICAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJCWJvb3RwYXJhbV9yb290ZmxhZ3M9IiRib290cGFyYW1fcm9vdGZsYWdzLCIKKwkJCQkJZmkKKwkJCQkJYm9vdHBhcmFtX3Jvb3RmbGFncz0iJHtib290cGFyYW1fcm9vdGZsYWdzfXJvIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJZmxhZ3M9IiRmbGFncyAtbyRib290cGFyYW1fcm9vdGZsYWdzIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZnN0eXBlIiBdOyB0aGVuCisJCQkJCWZsYWdzPSIkZmxhZ3MgLXQkYm9vdHBhcmFtX3Jvb3Rmc3R5cGUiCisJCQkJZmkKKwkJCQltb3VudCAkZmxhZ3MgJGJvb3RwYXJhbV9yb290ICRST09URlNfRElSCisJCQllbHNlCisJCQkJZGVidWcgInJvb3QgJyRib290cGFyYW1fcm9vdCcgZG9lc24ndCBleGlzdC4iCisJCQlmaQorCQlmaQorCisJCWlmIFsgISAtZCAkUk9PVEZTX0RJUi9kZXYgXTsgdGhlbgorCQkJZmF0YWwgIkVSUk9SOiBUaGVyZSdzIG5vICcvZGV2JyBvbiByb290ZnMuIgorCQlmaQorCisJCWluZm8gIlN3aXRjaGluZyByb290IHRvICckUk9PVEZTX0RJUicuLi4iCisKKwkJZGVidWcgIk1vdmluZyAvZGV2LCAvcHJvYyBhbmQgL3N5cyBvbnRvIHJvb3Rmcy4uLiIKKwkJbW91bnQgLS1tb3ZlIC9kZXYgJFJPT1RGU19ESVIvZGV2CisJCW1vdW50IC0tbW92ZSAvcHJvYyAkUk9PVEZTX0RJUi9wcm9jCisJCW1vdW50IC0tbW92ZSAvc3lzICRST09URlNfRElSL3N5cworCisJCWNkICRST09URlNfRElSCisJCWV4ZWMgc3dpdGNoX3Jvb3QgLWMgL2Rldi9jb25zb2xlICRST09URlNfRElSICR7Ym9vdHBhcmFtX2luaXQ6LS9zYmluL2luaXR9CisJZWxzZQorCQlkZWJ1ZyAiTm8gcm9vdGZzIGhhcyBiZWVuIHNldCIKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTI5MWFkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQKQEAgLTAsMCArMSwxNDUgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorIworIyBQcm92aWRlcyB0aGUgQVBJIHRvIGJlIHVzZWQgYnkgdGhlIGluaXRyYW1mcyBtb2R1bGVzCisjCisjIE1vZHVsZXMgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorIworIyA8bW9kdWxlPl9lbmFibGVkIDogY2hlY2sgaWYgdGhlIG1vZHVsZSBvdWdodCB0byBydW4gKHJldHVybiAxIHRvIHNraXApCisjIDxtb2R1bGU+X3J1biAgICAgOiBkbyB3aGF0IGlzIG5lZWQKKyMKKyMgQm9vdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUgb24gZW52aXJvbm1lbnQgaW4gdGhlIGFzOgorIworIyAnZm9vPXZhbHVlJyBhcyAnYm9vdHBhcmFtX2Zvbz12YWx1ZScKKyMgJ2ZvbycgYXMgJ2Jvb3RwYXJhbV9mb289dHJ1ZScKKyMgJ2Zvby5iYXJbPXZhbHVlXSBhcyAnZm9vX2Jhcj1bdmFsdWV8dHJ1ZV0nCisKKyMgUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcHJlIDxtb2R1bGU+CithZGRfbW9kdWxlX3ByZV9ob29rKCkgeworCU1PRFVMRV9QUkVfSE9PS1M9IiRNT0RVTEVfUFJFX0hPT0tTICQxIgorfQorCisjIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcG9zdCA8bW9kdWxlPgorYWRkX21vZHVsZV9wb3N0X2hvb2soKSB7CisJTU9EVUxFX1BPU1RfSE9PS1M9IiRNT0RVTEVfUE9TVF9IT09LUyAkMSIKK30KKworIyBMb2FkIGtlcm5lbCBtb2R1bGUKK2xvYWRfa2VybmVsX21vZHVsZSgpIHsKKwlpZiBtb2Rwcm9iZSAkMSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJaW5mbyAiTG9hZGVkIG1vZHVsZSAkMSIKKwllbHNlCisJCWRlYnVnICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgJDEiCisJZmkKK30KKworIyBQcmludHMgaW5mb3JtYXRpb24KK21zZygpIHsKKwllY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiB2ZXJib3NlIGJvb3RwYXJhbSBpcyB1c2VkCitpbmZvKCkgeworCVsgLW4gIiRib290cGFyYW1fdmVyYm9zZSIgXSAmJiBlY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiBkZWJ1ZyBib290cGFyYW0gaXMgdXNlZAorZGVidWcoKSB7CisJWyAtbiAiJGJvb3RwYXJhbV9kZWJ1ZyIgXSAmJiBlY2hvICJERUJVRzogJEAiID4vZGV2L2NvbnNvbGUKK30KKworIyBQcmludHMgYSBtZXNzYWdlIGFuZCBzdGFydCBhIGVuZGxlc3MgbG9vcAorZmF0YWwoKSB7CisgICAgZWNobyAkMSA+L2Rldi9jb25zb2xlCisgICAgZWNobyA+L2Rldi9jb25zb2xlCisKKyAgICBpZiBbIC1uICJib290cGFyYW1faW5pdF9mYXRhbF9zaCIgXTsgdGhlbgorICAgICAgICBzaAorICAgIGVsc2UKKwl3aGlsZSBbICJ0cnVlIiBdOyBkbworCQlzbGVlcCAzNjAwCisJZG9uZQorICAgIGZpCit9CisKKyMgVmFyaWFibGVzIHNoYXJlZCBhbW91bmcgbW9kdWxlcworUk9PVEZTX0RJUj0iL3Jvb3RmcyIgIyB3aGVyZSB0byBkbyB0aGUgc3dpdGNoIHJvb3QKK01PRFVMRV9QUkVfSE9PS1M9IiIgICMgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHJ1bm5pbmcgZWFjaCBtb2R1bGUKK01PRFVMRV9QT1NUX0hPT0tTPSIiICMgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgcnVubmluZyBlYWNoIG1vZHVsZQorTU9EVUxFU19ESVI9L2luaXQuZCAgIyBwbGFjZSB0byBsb29rIGZvciBtb2R1bGVzCisKKyMgbWFrZSBtb3VudCBzdG9wIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgL2V0Yy9mc3RhYgordG91Y2ggL2V0Yy9mc3RhYgorCisjIGluaXRpYWxpemUgL3Byb2MsIC9zeXMgYW5kIC92YXIvbG9jaworbWtkaXIgLXAgL3Byb2MgL3N5cyAvdmFyL2xvY2sKK21vdW50IC10IHByb2MgcHJvYyAvcHJvYworbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCisjIHBvcHVsYXRlIGJvb3RwYXJhbSBlbnZpcm9ubWVudAorZm9yIHAgaW4gYGNhdCAvcHJvYy9jbWRsaW5lYDsgZG8KKwlvcHQ9YGVjaG8gJHAgfCBjdXQgLWQnPScgLWYxYAorCW9wdD1gZWNobyAkb3B0IHwgdHIgJy4tJyAnX18nYAorCWlmIFsgImBlY2hvICRwIHwgY3V0IC1kJz0nIC1mMWAiID0gIiRwIiBdOyB0aGVuCisJCWV2YWwgImJvb3RwYXJhbV8ke29wdH09dHJ1ZSIKKwllbHNlCisJCXZhbHVlPSJgZWNobyAkcCB8IGN1dCAtZCc9JyAtZjItYCIKKwkJZXZhbCAiYm9vdHBhcmFtXyR7b3B0fT1cIiR7dmFsdWV9XCIiCisJZmkKK2RvbmUKKworIyB1c2UgL2RldiB3aXRoIGRldnRtcGZzCitpZiBncmVwIC1xIGRldnRtcGZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisJbWtkaXIgLXAgL2RldgorCW1vdW50IC10IGRldnRtcGZzIGRldnRtcGZzIC9kZXYKK2Vsc2UKKwlpZiBbICEgLWQgL2RldiBdOyB0aGVuCisJCWZhdGFsICJFUlJPUjogL2RldiBkb2Vzbid0IGV4aXN0IGFuZCBrZXJuZWwgZG9lc24ndCBoYXMgZGV2dG1wZnMgZW5hYmxlZC4iCisJZmkKK2ZpCisKK21rZGlyICRST09URlNfRElSCisKKyMgTG9hZCBhbmQgcnVuIG1vZHVsZXMKK2ZvciBtIGluICRNT0RVTEVTX0RJUi8qOyBkbworCSMgU2tpcCBiYWNrdXAgZmlsZXMKKwlpZiBbICJgZWNobyAkbSB8IHNlZCAtZSAncy9cfiQvLydgIiAhPSAiJG0iIF07IHRoZW4KKwkJY29udGludWUKKwlmaQorCisJbW9kdWxlPWBiYXNlbmFtZSAkbSB8IGN1dCAtZCctJyAtZiAyYAorCWRlYnVnICJMb2FkaW5nIG1vZHVsZSAkbW9kdWxlIgorCisJIyBwcmUgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BSRV9IT09LUzsgZG8KKwkJZGVidWcgIkNhbGxpbmcgbW9kdWxlIGhvb2sgKHByZSk6ICRoIgorCQlldmFsICIkaCBwcmUgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwcmUpOiAkaCIKKwlkb25lCisKKwkjIHByb2Nlc3MgbW9kdWxlCisJLiAkbQorCisJaWYgISBldmFsICIke21vZHVsZX1fZW5hYmxlZCI7IHRoZW4KKwkJZGVidWcgIlNraXBwaW5nIG1vZHVsZSAkbW9kdWxlIgorCQljb250aW51ZQorCWZpCisKKwlkZWJ1ZyAiUnVubmluZyAke21vZHVsZX1fcnVuIgorCWV2YWwgIiR7bW9kdWxlfV9ydW4iCisKKwkjIHBvc3QgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BPU1RfSE9PS1M7IGRvCisJCWRlYnVnICJDYWxsaW5nIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJCWV2YWwgIiRoIHBvc3QgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJZG9uZQorZG9uZQorCisjIENhdGNoIGFsbAorZmF0YWwgIkVSUk9SOiBJbml0cmFtZnMgZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHN5c3RlbS4iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9tZGV2IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWRmMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldgpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworbWRldl9lbmFibGVkKCkgeworCWlmIFsgISAtZSAvc2Jpbi9tZGV2IF07IHRoZW4KKwkJZGVidWcgIi9zYmluL21kZXYgZG9lc24ndCBleGlzdCIKKwkJcmV0dXJuIDEKKwlmaQorCisJcmV0dXJuIDAKK30KKworbWRldl9ydW4oKSB7CisJIyBzZXR1cCB0aGUgZW52aXJvbm1lbnQKKwltb3VudCAtdCB0bXBmcyB0bXBmcyAvZGV2CisKKwlta2RpciAtbSAxNzc3IC9kZXYvc2htCisKKwlta2RpciAtbSAwNzU1IC9kZXYvcHRzCisJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cworCisJZWNobyAvc2Jpbi9tZGV2ID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnCisJbWRldiAtcworCisJIyBsb2FkIG1vZHVsZXMgZm9yIGRldmljZXMKKwlmaW5kIC9zeXMgLW5hbWUgbW9kYWxpYXMgfCB3aGlsZSByZWFkIG07IGRvCisJCWxvYWRfa2VybmVsX21vZHVsZSAkKGNhdCAkbSkKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay91ZGV2IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQ2MmRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKwordWRldl9zaHV0ZG93bl9ob29rX2hhbmRsZXIoKSB7CisJc3RhdHVzPSQxCisJbW9kdWxlPSQyCisJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdICYmIFsgIiRtb2R1bGUiID0gImZpbmlzaCIgXTsgdGhlbgorCQlraWxsYWxsIGBiYXNlbmFtZSAkX1VERVZfREFFTU9OYCAyPi9kZXYvbnVsbAorCWZpCit9CisKK3VkZXZfZGFlbW9uKCkgeworCU9QVElPTlM9Ii9zYmluL3VkZXYvdWRldmQgL3NiaW4vdWRldmQgL2xpYi91ZGV2L3VkZXZkIC9saWIvc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIgorCisJZm9yIG8gaW4gJE9QVElPTlM7IGRvCisJCWlmIFsgLXggIiRvIiBdOyB0aGVuCisJCQllY2hvICRvCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKworCXJldHVybiAxCit9CisKK19VREVWX0RBRU1PTj1gdWRldl9kYWVtb25gCisKK3VkZXZfZW5hYmxlZCgpIHsKKwlpZiBbIC16ICIkX1VERVZfREFFTU9OIiBdOyB0aGVuCisJCW1zZyAiV0FSTklORzogQ2Fubm90IGZpbmQgdGhlIHVkZXYgZGFlbW9uOyBkYWVtb24gd2lsbCBub3QgYmUgc3RhcnRlZCBpbiBpbml0cmFtZnMuIgorCQlyZXR1cm4gMQorCWZpCisKKwlyZXR1cm4gMAorfQorCit1ZGV2X3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJ1ZGV2X3NodXRkb3duX2hvb2tfaGFuZGxlciIKKworCW1rZGlyIC1wIC9ydW4KKworCSRfVURFVl9EQUVNT04gLS1kYWVtb24KKwl1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisJdWRldmFkbSBzZXR0bGUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzM3YjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmtfMS4wLmJiCkBAIC0wLDAgKzEsNjYgQEAKK1NVTU1BUlkgPSAiTW9kdWxhciBpbml0cmFtZnMgc3lzdGVtIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1JERVBFTkRTXyR7UE59ICs9ICJidXN5Ym94IgorCitQUiA9ICJyMiIKKworaW5oZXJpdCBhbGxhcmNoCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZmluaXNoIFwKKyAgICAgICAgICAgZmlsZTovL21kZXYgXAorICAgICAgICAgICBmaWxlOi8vdWRldiBcCisgICAgICAgICAgIGZpbGU6Ly9lMmZzIFwKKyAgICAgICAgICAgZmlsZTovL2RlYnVnIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9L2luaXQuZAorCisgICAgIyBiYXNlCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9L2luaXQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9maW5pc2ggJHtEfS9pbml0LmQvOTktZmluaXNoCisKKyAgICAjIG1kZXYKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2ICR7RH0vaW5pdC5kLzAxLW1kZXYKKworICAgICMgdWRldgorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYgJHtEfS9pbml0LmQvMDEtdWRldgorCisgICAgIyBlMmZzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZTJmcyAke0R9L2luaXQuZC8xMC1lMmZzCisKKyAgICAjIGRlYnVnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVidWcgJHtEfS9pbml0LmQvMDAtZGVidWcKKworICAgICMgQ3JlYXRlIGRldmljZSBub2RlcyBleHBlY3RlZCBieSBzb21lIGtlcm5lbHMgaW4gaW5pdHJhbWZzCisgICAgIyBiZWZvcmUgZXZlbiBleGVjdXRpbmcgL2luaXQuCisgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgIG1rbm9kIC1tIDYyMiAke0R9L2Rldi9jb25zb2xlIGMgNSAxCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWJhc2UgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1tZGV2IFwKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtdWRldiBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLWUyZnMgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyIKKworRklMRVNfJHtQTn0tYmFzZSA9ICIvaW5pdCAvaW5pdC5kLzk5LWZpbmlzaCAvZGV2IgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICJpbml0cmFtZnMgc3VwcG9ydCBmb3IgbWRldiIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICIke1BOfS1iYXNlIgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS1tZGV2ID0gIi9pbml0LmQvMDEtbWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIHVkZXYiCitSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiJHtQTn0tYmFzZSB1ZGV2IgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS11ZGV2ID0gIi9pbml0LmQvMDEtdWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIGV4dDQvZXh0My9leHQyIGZpbGVzeXN0ZW1zIgorUkRFUEVORFNfaW5pdHJhbWZzLW1vZHVsZS1lMmZzID0gIiR7UE59LWJhc2UiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiL2luaXQuZC8xMC1lMmZzIgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiaW5pdHJhbWZzIGR5bmFtaWMgZGVidWcgc3VwcG9ydCIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiJHtQTn0tYmFzZSIKK0ZJTEVTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiL2luaXQuZC8wMC1kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1ib290XzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1ib290XzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2IzMDI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWJvb3RfMS4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbml0IHNjcmlwdCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUkRFUEVORFNfJHtQTn0gPSAidWRldiB1ZGV2LWV4dHJhY29uZiIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtbGl2ZS5zaCIKKworUFIgPSAicjEyIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtbGl2ZS5zaCAke0R9L2luaXQKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgICAgICBta25vZCAtbSA2MjIgJHtEfS9kZXYvY29uc29sZSBjIDUgMQorfQorCitGSUxFU18ke1BOfSArPSAiIC9pbml0IC9kZXYgIgorCisjIER1ZSB0byBrZXJuZWwgZGVwZW5kZW5jeQorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3Rmc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzYmQyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCBmb3Igd2l0aCBhIHNlY29uZCByb290ZnMva2VybmVsIG9wdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAicGFydGVkIGUyZnNwcm9ncy1ta2UyZnMgZG9zZnN0b29scyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmMxZmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWItZWZpIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtaW5zdGFsbC1lZmkuc2giCisKK1BSID0gInIxIgorCitSREVQRU5EU18ke1BOfSA9ICJwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyBkb3Nmc3Rvb2xzIHV0aWwtbGludXgtYmxraWQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1pbnN0YWxsLWVmaS5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKKyMgV2hpbGUgdGhpcyBwYWNrYWdlIG1heWJlIGFuIGFsbGFyY2ggZHVlIHRvIGl0IGJlaW5nIGEKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3Rmc18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzN2JmZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCB3aXRoIGEgc2Vjb25kIHJvb3Rmcy9rZXJuZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAiZ3J1YiBwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtdGVzdGZzLnNoICR7RH0vaW5zdGFsbC5zaAorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbF8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiM2IzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWIiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLnNoIgorCitQUiA9ICJyOSIKKworUyA9ICIke1dPUktESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJncnViIHBhcnRlZCBlMmZzcHJvZ3MtbWtlMmZzIHV0aWwtbGludXgtYmxraWQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC5zaCAke0R9L2luc3RhbGwuc2gKK30KKworIyBXaGlsZSB0aGlzIHBhY2thZ2UgbWF5YmUgYW4gYWxsYXJjaCBkdWUgdG8gaXQgYmVpbmcgYSAKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwuc2ggIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9HUEx2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU4MTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2gKQEAgLTAsMCArMSwzNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9hcm0vYWxpZ25tZW50LnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTc3YjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGFsaWdubWVudAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRrZXJuZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgIG1vdW50a2VybmZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIFsgLWUgL3Byb2MvY3B1L2FsaWdubWVudCBdOyB0aGVuCisgICBlY2hvICIzIiA+IC9wcm9jL2NwdS9hbGlnbm1lbnQKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jhbm5lci5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jhbm5lci5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTJiMDkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYmFubmVyLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogYmFubmVyCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbICEgLWUgL2Rldi90dHkgXTsgdGhlbgorICAgIC9iaW4vbWtub2QgLW0gMDY2NiAvZGV2L3R0eSBjIDUgMAorZmkKKworaWYgKCA+IC9kZXYvdHR5MCApIDI+L2Rldi9udWxsOyB0aGVuCisgICAgdnRtYXN0ZXI9L2Rldi90dHkwCitlbGlmICggPiAvZGV2L3ZjLzAgKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIHZ0bWFzdGVyPS9kZXYvdmMvMAorZWxpZiAoID4gL2Rldi9jb25zb2xlICkgMj4vZGV2L251bGw7IHRoZW4KKyAgICB2dG1hc3Rlcj0vZGV2L2NvbnNvbGUKK2Vsc2UKKyAgICB2dG1hc3Rlcj0vZGV2L251bGwKK2ZpCitlY2hvID4gJHZ0bWFzdGVyCitlY2hvICJQbGVhc2Ugd2FpdDogYm9vdGluZy4uLiIgPiAkdnRtYXN0ZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYm9vdG1pc2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY1NTNiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdG1pc2MKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1pc2MgYW5kIG90aGVyLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvcmNTCisjCisjIFB1dCBhIG5vbG9naW4gZmlsZSBpbiAvZXRjIHRvIHByZXZlbnQgcGVvcGxlIGZyb20gbG9nZ2luZyBpbiBiZWZvcmUKKyMgc3lzdGVtIHN0YXJ0dXAgaXMgY29tcGxldGUuCisjCitpZiB0ZXN0ICIkREVMQVlMT0dJTiIgPSB5ZXMKK3RoZW4KKyAgZWNobyAiU3lzdGVtIGJvb3R1cCBpbiBwcm9ncmVzcyAtIHBsZWFzZSB3YWl0IiA+IC9ldGMvbm9sb2dpbgorICBjcCAvZXRjL25vbG9naW4gL2V0Yy9ub2xvZ2luLmJvb3QKK2ZpCisKKyMKKyMgU2V0IHBzZXVkby10ZXJtaW5hbCBhY2Nlc3MgcGVybWlzc2lvbnMuCisjCitpZiB0ZXN0IC1jIC9kZXYvdHR5cDAKK3RoZW4KKwljaG1vZCA2NjYgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCisJY2hvd24gcm9vdDp0dHkgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCitmaQorCisjCisjIEFwcGx5IC9wcm9jIHNldHRpbmdzIGlmIGRlZmluZWQKKyMKK1NZU0NUTF9DT05GPSIvZXRjL3N5c2N0bC5jb25mIgoraWYgWyAtZiAiJHtTWVNDVExfQ09ORn0iIF0KK3RoZW4KKwlpZiBbIC14ICIvc2Jpbi9zeXNjdGwiIF0KKwl0aGVuCisJCSMgYnVzeWJveCBzeXNjdGwgZG9lcyBub3Qgc3VwcG9ydCAtcQorCQlWRVJCT1NFX1JFRElSPSIxPi9kZXYvbnVsbCIKKwkJaWYgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdOyB0aGVuCisJCQlWRVJCT1NFX1JFRElSPSIxPiYxIgorCQlmaQorCQlldmFsIC9zYmluL3N5c2N0bCAtcCAiJHtTWVNDVExfQ09ORn0iICRWRVJCT1NFX1JFRElSCisJZWxzZQorCQllY2hvICJUbyBoYXZlICR7U1lTQ1RMX0NPTkZ9IGFwcGxpZWQgZHVyaW5nIGJvb3QsIGluc3RhbGwgcGFja2FnZSA8cHJvY3BzPi4iCisJZmkKK2ZpCisKKyMKKyMgVXBkYXRlIC9ldGMvbW90ZC4KKyMKK2lmIHRlc3QgIiRFRElUTU9URCIgIT0gbm8KK3RoZW4KKwl1bmFtZSAtYSA+IC9ldGMvbW90ZC50bXAKKwlzZWQgMWQgL2V0Yy9tb3RkID4+IC9ldGMvbW90ZC50bXAKKwltdiAvZXRjL21vdGQudG1wIC9ldGMvbW90ZAorZmkKKworIworIyBUaGlzIGlzIGFzIGdvb2QgYSBwbGFjZSBhcyBhbnkgZm9yIGEgc2FuaXR5IGNoZWNrCisjCisjIFNldCB0aGUgc3lzdGVtIGNsb2NrIGZyb20gaGFyZHdhcmUgY2xvY2sKKyMgSWYgdGhlIHRpbWVzdGFtcCBpcyBtb3JlIHJlY2VudCB0aGFuIHRoZSBjdXJyZW50IHRpbWUsCisjIHVzZSB0aGUgdGltZXN0YW1wIGluc3RlYWQuCit0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdGFydAoraWYgdGVzdCAtZSAvZXRjL3RpbWVzdGFtcAordGhlbgorCVNZU1RFTURBVEU9YGRhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyU2AKKwlyZWFkIFRJTUVTVEFNUCA8IC9ldGMvdGltZXN0YW1wCisJaWYgWyAke1RJTUVTVEFNUH0gLWd0ICRTWVNURU1EQVRFIF07IHRoZW4KKwkJIyBmb3JtYXQgdGhlIHRpbWVzdGFtcCBhcyBkYXRlIGV4cGVjdHMgaXQgKDJtMmQySDJNNFkuMlMpCisJCVRTX1lSPSR7VElNRVNUQU1QJT8/Pz8/Pz8/Pz99CisJCVRTX1NFQz0ke1RJTUVTVEFNUCM/Pz8/Pz8/Pz8/Pz99CisJCVRTX0ZJUlNUMTI9JHtUSU1FU1RBTVAlPz99CisJCVRTX01JRERMRTg9JHtUU19GSVJTVDEyIz8/Pz99CisJCWRhdGUgLXUgJHtUU19NSURETEU4fSR7VFNfWVJ9LiR7VFNfU0VDfQorCQl0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdG9wCisJZmkKK2ZpCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tmcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjI4Njk0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBjaGVja2ZzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBjaGVja3Jvb3QKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBDaGVjayBhbGwgb3RoZXIgZmlsZSBzeXN0ZW1zCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBDaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbXMuCisjCitpZiB0ZXN0ICEgLWYgL2Zhc3Rib290Cit0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorICAgICAgICBmb3JjZT0iLWYiCisgICAgZWxzZQorICAgICAgICBmb3JjZT0iIgorICAgIGZpCisgICAgaWYgdGVzdCAiJEZTQ0tGSVgiICA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisJZHVtYnxuZXR3b3JrfHVua25vd258IiIpIHNwaW5uZXI9IiIgOzsKKyAgICBlc2FjCisgICAgdGVzdCAiYHVuYW1lIC1tYCIgPSAiczM5MCIgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgYWxsIGZpbGVzeXN0ZW1zLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgLVIgLUEgJGZpeCAkZm9yY2UKKyAgICBpZiB0ZXN0ICIkPyIgLWd0IDEKKyAgICB0aGVuCisgICAgICBlY2hvCisgICAgICBlY2hvICJmc2NrIGZhaWxlZC4gIFBsZWFzZSByZXBhaXIgbWFudWFsbHkuIgorICAgICAgZWNobworICAgICAgZWNobyAiQ09OVFJPTC1EIHdpbGwgZXhpdCBmcm9tIHRoaXMgc2hlbGwgYW5kIGNvbnRpbnVlIHN5c3RlbSBzdGFydHVwLiIKKyAgICAgIGVjaG8KKyAgICAgICMgU3RhcnQgYSBzaW5nbGUgdXNlciBzaGVsbCBvbiB0aGUgY29uc29sZQorICAgICAgL3NiaW4vc3Vsb2dpbiAkQ09OU09MRQorICAgIGZpCitmaQorcm0gLWYgL2Zhc3Rib290IC9mb3JjZWZzY2sKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrcm9vdC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZmVlMmFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCkBAIC0wLDAgKzEsMTQ4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGNoZWNrcm9vdAorIyBSZXF1aXJlZC1TdGFydDogICAgdWRldgorIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IENoZWNrIHRvIHJvb3QgZmlsZSBzeXN0ZW0uCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBTZXQgU1VMT0dJTiBpbiAvZXRjL2RlZmF1bHQvcmNTIHRvIHllcyBpZiB5b3Ugd2FudCBhIHN1bG9naW4gdG8gYmUgc3Bhd25lZAorIyBmcm9tIHRoaXMgc2NyaXB0ICpiZWZvcmUgYW55dGhpbmcgZWxzZSogd2l0aCBhIHRpbWVvdXQsIGxpa2UgU0NPIGRvZXMuCisjCit0ZXN0ICIkU1VMT0dJTiIgPSB5ZXMgJiYgc3Vsb2dpbiAtdCAzMCAkQ09OU09MRQorCisjCisjIFJlYWQgL2V0Yy9mc3RhYi4KKyMKK2V4ZWMgOTwgL2V0Yy9mc3RhYgorcm9vdG1vZGU9cncKK3Jvb3RvcHRzPXJ3Cityb290Y2hlY2s9JEVOQUJMRV9ST09URlNfRlNDSworc3dhcF9vbl9tZD1ubworZGV2ZnM9Cit3aGlsZSByZWFkIGZzIG1udCB0eXBlIG9wdHMgZHVtcCBwYXNzIGp1bmsgPCY5CitkbworCWNhc2UgIiRmcyIgaW4KKwkJIiJ8XCMqKQorCQkJY29udGludWU7CisJCQk7OworCQkvZGV2L21kKikKKwkJCSMgU3dhcCBvbiBtZCBkZXZpY2UuCisJCQl0ZXN0ICIkdHlwZSIgPSBzd2FwICYmIHN3YXBfb25fbWQ9eWVzCisJCQk7OworCQkvZGV2LyopCisJCQk7OworCQkqKQorCQkJIyBNaWdodCBiZSBhIHN3YXBmaWxlLgorCQkJdGVzdCAiJHR5cGUiID0gc3dhcCAmJiBzd2FwX29uX21kPXllcworCQkJOzsKKwllc2FjCisJdGVzdCAiJHR5cGUiID0gZGV2ZnMgJiYgZGV2ZnM9IiRmcyIKKwl0ZXN0ICIkbW50IiAhPSAvICYmIGNvbnRpbnVlCisJcm9vdG9wdHM9IiRvcHRzIgorCXRlc3QgIiRwYXNzIiA9IDAgLW8gIiRwYXNzIiA9ICIiICYmIHJvb3RjaGVjaz1ubworCWNhc2UgIiRvcHRzIiBpbgorCQlyb3xybywqfCoscm98KixybywqKQorCQkJcm9vdG1vZGU9cm8KKwkJCTs7CisJZXNhYworZG9uZQorZXhlYyAwPiY5IDk+Ji0KKworIyBDaGVjayBmb3IgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMKK2lmIFsgIiRyb290bW9kZSIgPSAicm8iIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAibm8iIF0gfHwgXAorCVsgIiRyb290bW9kZSIgPSAicnciIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisJZWNobyAiIgorCWVjaG8gIldBUk46IGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zIGluIC9ldGMvZnN0YWIgYW5kIC9ldGMvZGVmYXVsdC9yY1MiCisJZWNobyAiICAgICAgcmVnYXJkaW5nIHRoZSB3cml0YWJpbGl0eSBvZiByb290ZnMuIFBsZWFzZSBmaXggb25lIG9mIHRoZW0uIgorCWVjaG8gIiIKK2ZpCisKKworIworIyBBY3RpdmF0ZSB0aGUgc3dhcCBkZXZpY2UocykgaW4gL2V0Yy9mc3RhYi4gVGhpcyBuZWVkcyB0byBiZSBkb25lCisjIGJlZm9yZSBmc2NrLCBzaW5jZSBmc2NrIGNhbiBiZSBxdWl0ZSBtZW1vcnktaHVuZ3J5LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkFjdGl2YXRpbmcgc3dhcCIKK3N3YXBvbiAtYSAyPiAvZGV2L251bGwKKworIworIyBDaGVjayB0aGUgcm9vdCBmaWxlc3lzdGVtLgorIworaWYgdGVzdCAtZiAvZmFzdGJvb3QgfHwgdGVzdCAkcm9vdGNoZWNrID0gbm8KK3RoZW4KKyAgdGVzdCAkcm9vdGNoZWNrID0geWVzICYmIGVjaG8gIkZhc3QgYm9vdCwgbm8gZmlsZXN5c3RlbSBjaGVjayIKK2Vsc2UKKyAgIworICAjIEVuc3VyZSB0aGF0IHJvb3QgaXMgcXVpZXNjZW50IGFuZCByZWFkLW9ubHkgYmVmb3JlIGZzY2snaW5nLgorICAjCisgIG1vdW50IC1uIC1vIHJlbW91bnQscm8gLworICBpZiB0ZXN0ICQ/ID0gMAorICB0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorCWZvcmNlPSItZiIKKyAgICBlbHNlCisJZm9yY2U9IiIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRGU0NLRklYIiA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisgICAgICAgIGR1bWJ8bmV0d29ya3x1bmtub3dufCIiKSBzcGlubmVyPSIiIDs7CisgICAgZXNhYworICAgIHRlc3QgYHVuYW1lIC1tYCA9IHMzOTAgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgcm9vdCBmaWxlc3lzdGVtLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgJGZvcmNlICRmaXggLworICAgICMKKyAgICAjIElmIHRoZXJlIHdhcyBhIGZhaWx1cmUsIGRyb3AgaW50byBzaW5nbGUtdXNlciBtb2RlLgorICAgICMKKyAgICAjIE5PVEU6ICJmYWlsdXJlIiBpcyBkZWZpbmVkIGFzIGV4aXRpbmcgd2l0aCBhIHJldHVybiBjb2RlIG9mCisgICAgIyAyIG9yIGxhcmdlci4gIEEgcmV0dXJuIGNvZGUgb2YgMSBpbmRpY2F0ZXMgdGhhdCBmaWxlc3lzdGVtCisgICAgIyBlcnJvcnMgd2VyZSBjb3JyZWN0ZWQgYnV0IHRoYXQgdGhlIGJvb3QgbWF5IHByb2NlZWQuCisgICAgIworICAgIGlmIHRlc3QgIiQ/IiAtZ3QgMQorICAgIHRoZW4KKyAgICAgICMgU3VycHJpc2UhIFJlLWRpcmVjdGluZyBmcm9tIGEgSEVSRSBkb2N1bWVudCAoYXMgaW4KKyAgICAgICMgImNhdCA8PCBFT0YiKSB3b24ndCB3b3JrLCBiZWNhdXNlIHRoZSByb290IGlzIHJlYWQtb25seS4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gImZzY2sgZmFpbGVkLiAgUGxlYXNlIHJlcGFpciBtYW51YWxseSBhbmQgcmVib290LiAgUGxlYXNlIG5vdGUiCisgICAgICBlY2hvICJ0aGF0IHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3VycmVudGx5IG1vdW50ZWQgcmVhZC1vbmx5LiAgVG8iCisgICAgICBlY2hvICJyZW1vdW50IGl0IHJlYWQtd3JpdGU6IgorICAgICAgZWNobworICAgICAgZWNobyAiICAgIyBtb3VudCAtbiAtbyByZW1vdW50LHJ3IC8iCisgICAgICBlY2hvCisgICAgICBlY2hvICJDT05UUk9MLUQgd2lsbCBleGl0IGZyb20gdGhpcyBzaGVsbCBhbmQgUkVCT09UIHRoZSBzeXN0ZW0uIgorICAgICAgZWNobworICAgICAgIyBTdGFydCBhIHNpbmdsZSB1c2VyIHNoZWxsIG9uIHRoZSBjb25zb2xlCisgICAgICAvc2Jpbi9zdWxvZ2luICRDT05TT0xFCisgICAgICByZWJvb3QgLWYKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiKioqIEVSUk9SISAgQ2Fubm90IGZzY2sgcm9vdCBmcyBiZWNhdXNlIGl0IGlzIG5vdCBtb3VudGVkIHJlYWQtb25seSEiCisgICAgZWNobworICBmaQorZmkKKworIworIwlJZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHdhcyBub3QgbWFya2VkIGFzIHJlYWQtb25seSBpbiAvZXRjL2ZzdGFiLAorIwlyZW1vdW50IHRoZSByb290ZnMgcncgYnV0IGRvIG5vdCB0cnkgdG8gY2hhbmdlIG10YWIgYmVjYXVzZSBpdAorIwlpcyBvbiBhIHJvIGZzIHVudGlsIHRoZSByZW1vdW50IHN1Y2NlZWRlZC4gVGhlbiBjbGVhbiB1cCBvbGQgbXRhYnMKKyMJYW5kIGZpbmFsbHkgd3JpdGUgdGhlIG5ldyBtdGFiLgorIworbW91bnQgLW4gLW8gcmVtb3VudCwkcm9vdG1vZGUgLworaWYgdGVzdCAiJHJvb3Rtb2RlIiA9IHJ3Cit0aGVuCisJbG4gLXNmIC9wcm9jL21vdW50cyAvZGV2L210YWIKK2ZpCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwOTc4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cwpAQCAtMCwwICsxLDUgQEAKKyMgR0lEIG9mIHRoZSBgdHR5JyBncm91cAorVFRZR1JQPTUKKyAKKyMgU2V0IHRvIDYwMCB0byBoYXZlIGBtZXNnIG4nIGJlIHRoZSBkZWZhdWx0CitUVFlNT0RFPTYyMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2MDQzZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMuc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBkZXZwdHMKKyMgUmVxdWlyZWQtU3RhcnQ6IHVkZXYKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTW91bnQgL2Rldi9wdHMgZmlsZSBzeXN0ZW1zLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvZGV2cHRzCisKK2lmIGdyZXAgLXEgZGV2cHRzIC9wcm9jL2ZpbGVzeXN0ZW1zCit0aGVuCisJIworCSMJQ3JlYXRlIG11bHRpcGxleG9yIGRldmljZS4KKwkjCisJdGVzdCAtYyAvZGV2L3B0bXggfHwgbWtub2QgLW0gNjY2IC9kZXYvcHRteCBjIDUgMgorCisJIworCSMJTW91bnQgL2Rldi9wdHMgaWYgbmVlZGVkLgorCSMKKwlpZiAhIGdyZXAgLXEgZGV2cHRzIC9wcm9jL21vdW50cworCXRoZW4KKwkJbWtkaXIgLXAgL2Rldi9wdHMKKwkJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cyAtb2dpZD0ke1RUWUdSUH0sbW9kZT0ke1RUWU1PREV9CisJZmkKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RtZXNnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2IwNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIGRtZXNnCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbIC1mIC92YXIvbG9nL2RtZXNnIF07IHRoZW4KKwlpZiBbIC1mIC91c3Ivc2Jpbi9sb2dyb3RhdGUgXTsgdGhlbgorCQlsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUtZG1lc2cuY29uZgorCWVsc2UKKwkJbXYgLWYgL3Zhci9sb2cvZG1lc2cgL3Zhci9sb2cvZG1lc2cub2xkCisJZmkKK2ZpCitkbWVzZyAtcyAxMzEwNzIgPiAvdmFyL2xvZy9kbWVzZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZnVuY3Rpb25zIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZnVuY3Rpb25zCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAxYWQxZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9mdW5jdGlvbnMKQEAgLTAsMCArMSw5MSBAQAorIyAtKi1TaGVsbC1zY3JpcHQtKi0KKyMKKyMgZnVuY3Rpb25zICAgICBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYnkgbW9zdCBvciBhbGwKKyMgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHRzIGluIHRoZSAvZXRjL2luaXQuZCBkaXJlY3RvcnkuCisjCisKK05PUk1BTD0iXFwwMzNbMDszOW0iICAgICAgICAgIyBTdGFuZGFyZCBjb25zb2xlIGdyZXkKK1NVQ0NFU1M9IlxcMDMzWzE7MzJtIiAgICAgICAgIyBTdWNjZXNzIGlzIGdyZWVuCitXQVJOSU5HPSJcXDAzM1sxOzMzbSIgICAgICAgICMgV2FybmluZ3MgYXJlIHllbGxvdworRkFJTFVSRT0iXFwwMzNbMTszMW0iICAgICAgICAjIEZhaWx1cmVzIGFyZSByZWQKK0lORk89IlxcMDMzWzE7MzZtIiAgICAgICAgICAgIyBJbmZvcm1hdGlvbiBpcyBsaWdodCBjeWFuCitCUkFDS0VUPSJcXDAzM1sxOzM0bSIgICAgICAgICMgQnJhY2tldHMgYXJlIGJsdWUKKworIyBOT1RFOiBUaGUgcGlkb2Zwcm9jICgpIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcHJvY2VzcyB3aGljaCBpcyBhIHNjcmlwdCB1bmxlc3MKKyMgICAgICAgdGhlIHBpZG9mIHN1cHBvcnRzICIteCIgb3B0aW9uLiBJZiB5b3Ugd2FudCB0byB1c2UgaXQgZm9yIHN1Y2ggYQorIyAgICAgICBwcm9jZXNzOgorIyAgICAgICAxKSBJZiB0aGVyZSBpcyBubyAicGlkb2YgLXgiLCByZXBsYWNlIHRoZSAicGlkb2YgJDEiIHdpdGggYW5vdGhlcgorIyAgICAgICAgICBjb21tYW5kIGxpa2UoZm9yIGNvcmUtaW1hZ2UtbWluaW1hbCk6CisjICAgICAgICAgICAgcHMgfCBhd2sgJy8nIiQxIicvIHtwcmludCAkMX0nCisjICAgICAgIE9yCisjICAgICAgIDIpIElmIHRoZXJlIGlzICJwaWRvZiAteCIsIHJlcGxhY2UgInBpZG9mIiB3aXRoICJwaWRvZiAteCIuCisjCisjIHBpZG9mcHJvYyAtIHByaW50IHRoZSBwaWQgb2YgYSBwcm9jZXNzCisjICQxOiB0aGUgbmFtZSBvZiB0aGUgcHJvY2VzcworcGlkb2Zwcm9jICgpIHsKKworCSMgcGlkb2Ygb3V0cHV0IG51bGwgd2hlbiBubyBwcm9ncmFtIGlzIHJ1bm5pbmcsIHNvIG5vICIyPi9kZXYvbnVsbCIuCisJcGlkPWBwaWRvZiAkMWAKKwlzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICRwaWQKKwkJcmV0dXJuIDAKKwkJOzsKKwkxMjcpCisJCWVjaG8gIkVSUk9SOiBjb21tYW5kIHBpZG9mIG5vdCBmb3VuZCIgPiYyCisJCWV4aXQgMTI3CisJCTs7CisJKikKKwkJcmV0dXJuICRzdGF0dXMKKwkJOzsKKwllc2FjCit9CisKK21hY2hpbmVfaWQoKSB7ICMgcmV0dXJuIHRoZSBtYWNoaW5lIElECisJYXdrICdCRUdJTiB7IEZTPSI6ICIgfSAvSGFyZHdhcmUvIFwKKwkJeyBnc3ViKCIgIiwgIl8iLCAkMik7IHByaW50IHRvbG93ZXIoJDIpIH0gJyA8L3Byb2MvY3B1aW5mbworfQorCitraWxscHJvYygpIHsgIyBraWxsIHRoZSBuYW1lZCBwcm9jZXNzKGVzKQorCXBpZD1gcGlkb2Zwcm9jICQxYCAmJiBraWxsICRwaWQKK30KKworc3RhdHVzKCkgeworICAgIGxvY2FsIHBpZAorICAgIGlmIFsgIiQjIiA9IDAgXTsgdGhlbgorICAgICAgICBlY2hvICJVc2FnZTogc3RhdHVzIHtwcm9ncmFtfSIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIHBpZD1gcGlkb2Zwcm9jICQxYAorICAgIGlmIFsgLW4gIiRwaWQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJDEgKHBpZCAkcGlkKSBpcyBydW5uaW5nLi4uIgorICAgICAgICByZXR1cm4gMAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJDEgaXMgc3RvcHBlZCIKKyAgICBmaQorICAgIHJldHVybiAzCit9CisKK3N1Y2Nlc3MoKSB7CisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9ICBPSyAgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuIDAKK30KKworZmFpbHVyZSgpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtGQUlMVVJFfSBGQUlMICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKword2FybmluZygpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtXQVJOSU5HfSBXQVJOICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKworcGFzc2VkKCkgeworICAgIGxvY2FsIHJjPSQqCisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9IFBBU1MgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuICRyYworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaGFsdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTU2ZjczNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBoYWx0CisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMAorIyBTaG9ydC1EZXNjcmlwdGlvbjogRXhlY3V0ZSB0aGUgaGFsdCBjb21tYW5kLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBTZWUgaWYgd2UgbmVlZCB0byBjdXQgdGhlIHBvd2VyLgoraWYgdGVzdCAteCAvZXRjL2luaXQuZC91cHMtbW9uaXRvcgordGhlbgorCS9ldGMvaW5pdC5kL3Vwcy1tb25pdG9yIHBvd2Vyb2ZmCitmaQorCisjIERvbid0IHNodXQgZG93biBkcml2ZXMgaWYgd2UncmUgdXNpbmcgUkFJRC4KK2hkZG93bj0iLWgiCitpZiBncmVwIC1xcyAnXm1kLiphY3RpdmUnIC9wcm9jL21kc3RhdAordGhlbgorCWhkZG93bj0iIgorZmkKKworaGFsdCBTRURfSEFMVEFSR1MgLXAgJGhkZG93bgorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaG9zdG5hbWUuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ob3N0bmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTI4N2NjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaG9zdG5hbWUKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFNldCBob3N0bmFtZSBiYXNlZCBvbiAvZXRjL2hvc3RuYW1lCisjIyMgRU5EIElOSVQgSU5GTworSE9TVE5BTUU9JCgvYmluL2hvc3RuYW1lKQorCitob3N0bmFtZSAtYiAtRiAvZXRjL2hvc3RuYW1lIDI+IC9kZXYvbnVsbAoraWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJZXhpdAorZmkKKworIyBCdXN5Ym94IGhvc3RuYW1lIGRvZXNuJ3Qgc3VwcG9ydCAtYiBzbyB3ZSBuZWVkIGltcGxlbWVudCBpdCBvbiBvdXIgb3duCitpZiBbIC1mIC9ldGMvaG9zdG5hbWUgXTt0aGVuCisJaG9zdG5hbWUgYGNhdCAvZXRjL2hvc3RuYW1lYAorZWxpZiBbIC16ICIkSE9TVE5BTUUiIC1vICIkSE9TVE5BTUUiID0gIihub25lKSIgLW8gISAteiAiYGVjaG8gJEhPU1ROQU1FIHwgc2VkIC1uICcvXlswLTldKlwuWzAtOV0uKi9wJ2AiIF0gOyB0aGVuCisJaG9zdG5hbWUgbG9jYWxob3N0CitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9sb2dyb3RhdGUtZG1lc2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQ2ZTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYKQEAgLTAsMCArMSw5IEBACisjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKKyMgcm90YXRlIGRtZXNnLCBhbmQga2VlcCA1IHZlcnNpb25zLgorCisvdmFyL2xvZy9kbWVzZyB7CisJY3JlYXRlCisJcm90YXRlIDUKKwlub2RhdGVleHQKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NGJhZTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb3VudGFsbAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDogCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1vdW50IGFsbCBmaWxlc3lzdGVtcy4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBNb3VudCBsb2NhbCBmaWxlc3lzdGVtcyBpbiAvZXRjL2ZzdGFiLiBGb3Igc29tZSByZWFzb24sIHBlb3BsZQorIyBtaWdodCB3YW50IHRvIG1vdW50ICJwcm9jIiBzZXZlcmFsIHRpbWVzLCBhbmQgbW91bnQgLXYgY29tcGxhaW5zCisjIGFib3V0IHRoaXMuIFNvIHdlIG1vdW50ICJwcm9jIiBmaWxlc3lzdGVtcyB3aXRob3V0IC12LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIk1vdW50aW5nIGxvY2FsIGZpbGVzeXN0ZW1zLi4uIgorbW91bnQgLWF0IG5vbmZzLG5vc21iZnMsbm9uY3BmcyAyPi9kZXYvbnVsbAorCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorCXJtIC1mIC9kZXYvaW5pdGN0bAorCW1rbm9kIC1tIDYwMCAvZGV2L2luaXRjdGwgcAorZmkKK2tpbGwgLVVTUjEgMQorCisjCisjIEV4ZWN1dGUgc3dhcG9uIGNvbW1hbmQgYWdhaW4sIGluIGNhc2Ugd2Ugd2FudCB0byBzd2FwIHRvCisjIGEgZmlsZSBvbiBhIG5vdyBtb3VudGVkIGZpbGVzeXN0ZW0uCisjCitzd2Fwb24gLWEgMj4gL2Rldi9udWxsCisKKzogZXhpdCAwCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRuZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmU2YzE5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbW91bnRuZnMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyAkbmV0d29yayAkcnBjYmluZAorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCisjCisjCVJ1biBpbiBhIHN1YnNoZWxsIGJlY2F1c2Ugb2YgSS9PIHJlZGlyZWN0aW9uLgorIwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lLiBJZiBpdCBpcyBORlMsIHNldCB0aGUgZmxhZworIwlmb3IgbW91bnRpbmcgTkZTIGZpbGVzeXN0ZW1zLiBJZiBhbnkgTkZTIHBhcnRpdGlvbiBpcyBmb3VuZCBhbmQgaXQKKyMJbm90IG1vdW50ZWQgd2l0aCB0aGUgbm9sb2NrIG9wdGlvbiwgd2Ugc3RhcnQgdGhlIHJwY2JpbmQuCisjCitycGNiaW5kPW5vCittb3VudF9uZnM9bm8KK21vdW50X3NtYj1ubworbW91bnRfbmNwPW5vCittb3VudF9jaWZzPW5vCit3aGlsZSByZWFkIGRldmljZSBtb3VudHB0IGZzdHlwZSBvcHRpb25zCitkbworCWNhc2UgIiRkZXZpY2UiIGluCisJCSIifFwjKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWNhc2UgIiRvcHRpb25zIiBpbgorCQkqbm9hdXRvKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWlmIHRlc3QgIiRmc3R5cGUiID0gbmZzCisJdGhlbgorCQltb3VudF9uZnM9eWVzCisJCWNhc2UgIiRvcHRpb25zIiBpbgorCQkJKm5vbG9jayopCisJCQkJOzsKKwkJCSopCisJCQkJcnBjYmluZD15ZXMKKwkJCQk7OworCQllc2FjCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IHNtYmZzCisJdGhlbgorCQltb3VudF9zbWI9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IG5jcGZzCisJdGhlbgorCQltb3VudF9uY3A9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IGNpZnMKKwl0aGVuCisJCW1vdW50X2NpZnM9eWVzCisJZmkKK2RvbmUKKworZXhlYyAwPiYxCisKK2lmIHRlc3QgIiRycGNiaW5kIiA9IHllcwordGhlbgorCWlmIHRlc3QgLXggL3Vzci9zYmluL3JwY2JpbmQKKwl0aGVuCisJCWVjaG8gLW4gIlN0YXJ0aW5nIHJwY2JpbmQuLi4gIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi9ycGNiaW5kCisJCXNsZWVwIDIKKwlmaQorZmkKKworaWYgdGVzdCAiJG1vdW50X25mcyIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X3NtYiIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X2NpZnMiID0geWVzCit0aGVuCisJZWNobyAiTW91bnRpbmcgcmVtb3RlIGZpbGVzeXN0ZW1zLi4uIgorCXRlc3QgIiRtb3VudF9uZnMiID0geWVzICYmIG1vdW50IC1hIC10IG5mcworCXRlc3QgIiRtb3VudF9zbWIiID0geWVzICYmIG1vdW50IC1hIC10IHNtYmZzCisJdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgbmNwZnMKKwl0ZXN0ICIkbW91bnRfY2lmcyIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgY2lmcworZmkKKworKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9wb3B1bGF0ZS12b2xhdGlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MDQwMzdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2gKQEAgLTAsMCArMSwyMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgdm9sYXRpbGUKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiAgUG9wdWxhdGUgdGhlIHZvbGF0aWxlIGZpbGVzeXN0ZW0KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgR2V0IFJPT1RfRElSCitESVJOQU1FPWBkaXJuYW1lICQwYAorUk9PVF9ESVI9YGVjaG8gJERJUk5BTUUgfCBzZWQgLW5lICdzOi9ldGMvLio6OnAnYAorCitbIC1lICR7Uk9PVF9ESVJ9L2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvcmNTCisjIFdoZW4gcnVubmluZyBwb3B1bGF0ZS12b2xhdGlsZS5zaCBhdCByb290ZnMgdGltZSwgZGlzYWJsZSBjYWNoZS4KK1sgLW4gIiRST09UX0RJUiIgXSAmJiBWT0xBVElMRV9FTkFCTEVfQ0FDSEU9bm8KKyMgSWYgcm9vdGZzIGlzIHJlYWQtb25seSwgZGlzYWJsZSBjYWNoZS4KK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF0gJiYgVk9MQVRJTEVfRU5BQkxFX0NBQ0hFPW5vCisKK0NGR0RJUj0iJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzIgorVE1QUk9PVD0iJHtST09UX0RJUn0vdmFyL3ZvbGF0aWxlL3RtcCIKK0NPUkVERUY9IjAwX2NvcmUiCisKK1sgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJQb3B1bGF0aW5nIHZvbGF0aWxlIEZpbGVzeXN0ZW1zLiIKKworY3JlYXRlX2ZpbGUoKSB7CisJRVhFQz0iCisJdG91Y2ggXCIkMVwiOworCWNob3duICR7VFVTRVJ9LiR7VEdST1VQfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBvd25lciAtJHtUVVNFUn0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMTsKKwljaG1vZCAke1RNT0RFfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBtb2RlIC0ke1RNT0RFfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIiRFWEVDIiA+PiAvZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDICYKKwkJZWxzZQorCQkJIyBDcmVhdGluZyBzb21lIGZpbGVzIGF0IHJvb3RmcyB0aW1lIG1heSBmYWlsIGFuZCBzaG91bGQgZmFpbCwKKwkJCSMgYnV0IHRoZXNlIGZhaWx1cmVzIHNob3VsZCBub3QgYmUgbG9nZ2VkIHRvIG1ha2Ugc3VyZSB0aGUgZG9fcm9vdGZzCisJCQkjIHByb2Nlc3MgZG9lc24ndCBmYWlsLiBUaGlzIGRvZXMgbm8gaGFybSwgYXMgdGhpcyBzY3JpcHQgd2lsbAorCQkJIyBydW4gb24gdGFyZ2V0IHRvIHNldCB1cCB0aGUgY29ycmVjdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisJCQlldmFsICRFWEVDID4gL2Rldi9udWxsIDI+JjEKKwkJZmkKKwl9Cit9CisKK21rX2RpcigpIHsKKwlFWEVDPSIKKwlta2RpciAtcCBcIiQxXCI7CisJY2hvd24gJHtUVVNFUn0uJHtUR1JPVVB9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG93bmVyIC0ke1RVU0VSfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxOworCWNobW9kICR7VE1PREV9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG1vZGUgLSR7VE1PREV9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjEgIgorCisJdGVzdCAiJFZPTEFUSUxFX0VOQUJMRV9DQUNIRSIgPSB5ZXMgJiYgZWNobyAiJEVYRUMiID4+IC9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDCisJCWVsc2UKKwkJCSMgRm9yIHRoZSBzYW1lIHJlYXNvbiB3aXRoIGNyZWF0ZV9maWxlKCksIGZhaWx1cmVzIHNob3VsZAorCQkJIyBub3QgYmUgbG9nZ2VkLgorCQkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJCWZpCisJfQorfQorCitsaW5rX2ZpbGUoKSB7CisJRVhFQz0iCisJaWYgWyAtTCBcIiQyXCIgXTsgdGhlbgorCQlbIFwiXCQocmVhZGxpbmsgLWYgXCIkMlwiKVwiICE9IFwiXCQocmVhZGxpbmsgLWYgXCIkMVwiKVwiIF0gJiYgeyBybSAtZiBcIiQyXCI7IGxuIC1zZiBcIiQxXCIgXCIkMlwiOyB9OworCWVsaWYgWyAtZCBcIiQyXCIgXTsgdGhlbgorCQlpZiBhd2sgJ1wkMiA9PSBcIiQyXCIge2V4aXQgMX0nIC9wcm9jL21vdW50czsgdGhlbgorCQkJY3AgLWEgJDIvKiAkMSAyPi9kZXYvbnVsbDsKKwkJCWNwIC1hICQyLy5bIS5dKiAkMSAyPi9kZXYvbnVsbDsKKwkJCXJtIC1yZiBcIiQyXCI7CisJCQlsbiAtc2YgXCIkMVwiIFwiJDJcIjsKKwkJZmkKKwllbHNlCisJCWxuIC1zZiBcIiQxXCIgXCIkMlwiOworCWZpCisgICAgICAgICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIgkkRVhFQyIgPj4gL2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZAorCisJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCWV2YWwgJEVYRUMgJgorCWVsc2UKKwkJIyBGb3IgdGhlIHNhbWUgcmVhc29uIHdpdGggY3JlYXRlX2ZpbGUoKSwgZmFpbHVyZXMgc2hvdWxkCisJCSMgbm90IGJlIGxvZ2dlZC4KKwkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJZmkKK30KKworY2hlY2tfcmVxdWlyZW1lbnRzKCkgeworCWNsZWFudXAoKSB7CisJCXJtICIke1RNUF9JTlRFUk1FRH0iCisJCXJtICIke1RNUF9ERUZJTkVEfSIKKwkJcm0gIiR7VE1QX0NPTUJJTkVEfSIKKwl9CisKKwlDRkdGSUxFPSIkMSIKKwlbIGBiYXNlbmFtZSAiJHtDRkdGSUxFfSJgID0gIiR7Q09SRURFRn0iIF0gJiYgcmV0dXJuIDAKKworCVRNUF9JTlRFUk1FRD0iJHtUTVBST09UfS90bXAuJCQiCisJVE1QX0RFRklORUQ9IiR7VE1QUk9PVH0vdG1wZGVmaW5lZC4kJCIKKwlUTVBfQ09NQklORUQ9IiR7VE1QUk9PVH0vdG1wY29tYmluZWQuJCQiCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9wYXNzd2QgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9ERUZJTkVEfSIKKwljYXQgJHtDRkdGSUxFfSB8IGdyZXAgLXYgIl4jIiB8IGN1dCAtcyAtZCAiICIgLWYgMiA+ICIke1RNUF9JTlRFUk1FRH0iCisJY2F0ICIke1RNUF9ERUZJTkVEfSIgIiR7VE1QX0lOVEVSTUVEfSIgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9DT01CSU5FRH0iCisJTlJfREVGSU5FRF9VU0VSUz0iYGNhdCAiJHtUTVBfREVGSU5FRH0iIHwgd2MgLWxgIgorCU5SX0NPTUJJTkVEX1VTRVJTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX1VTRVJTfSIgLW5lICIke05SX0NPTUJJTkVEX1VTRVJTfSIgXSAmJiB7CisJCWVjaG8gIlVuZGVmaW5lZCB1c2VyczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9ncm91cCB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0RFRklORUR9IgorCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgY3V0IC1zIC1kICIgIiAtZiAzID4gIiR7VE1QX0lOVEVSTUVEfSIKKwljYXQgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfSU5URVJNRUR9IiB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0NPTUJJTkVEfSIKKworCU5SX0RFRklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9ERUZJTkVEfSIgfCB3YyAtbGAiCisJTlJfQ09NQklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX0dST1VQU30iIC1uZSAiJHtOUl9DT01CSU5FRF9HUk9VUFN9IiBdICYmIHsKKwkJZWNobyAiVW5kZWZpbmVkIGdyb3VwczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisJIyBBZGQgY2hlY2tzIGZvciByZXF1aXJlZCBkaXJlY3RvcmllcyBoZXJlCisKKwljbGVhbnVwCisJcmV0dXJuIDAKK30KKworYXBwbHlfY2ZnZmlsZSgpIHsKKwlDRkdGSUxFPSIkMSIKKworCWNoZWNrX3JlcXVpcmVtZW50cyAiJHtDRkdGSUxFfSIgfHwgeworCQllY2hvICJTa2lwcGluZyAke0NGR0ZJTEV9IgorCQlyZXR1cm4gMQorCX0KKworCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgXAorCQl3aGlsZSByZWFkIExJTkU7IGRvCisJCWV2YWwgYGVjaG8gIiRMSU5FIiB8IHNlZCAtbiAicy9cKC4qXClcIFwoLipcKSBcKC4qXClcIFwoLipcKVwgXCguKlwpXCBcKC4qXCkvVFRZUEU9XDEgOyBUVVNFUj1cMjsgVEdST1VQPVwzOyBUTU9ERT1cNDsgVE5BTUU9XDUgVExUQVJHRVQ9XDYvcCJgCisJCVROQU1FPSR7Uk9PVF9ESVJ9JHtUTkFNRX0KKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNoZWNraW5nIGZvciAtJHtUTkFNRX0tLiIKKworCQlbICIke1RUWVBFfSIgPSAibCIgXSAmJiB7CisJCQlUU09VUkNFPSIkVExUQVJHRVQiCisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgbGluayAtJHtUTkFNRX0tIHBvaW50aW5nIHRvIC0ke1RTT1VSQ0V9LS4iCisJCQlsaW5rX2ZpbGUgIiR7VFNPVVJDRX0iICIke1ROQU1FfSIKKwkJCWNvbnRpbnVlCisJCX0KKworCQlbIC1MICIke1ROQU1FfSIgXSAmJiB7CisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiRm91bmQgbGluay4iCisJCQlORVdOQU1FPWBscyAtbCAiJHtUTkFNRX0iIHwgc2VkIC1lICdzL14uKi0+IFwoLipcKSQvXDEvJ2AKKwkJCWVjaG8gJHtORVdOQU1FfSB8IGdyZXAgLXYgIl4vIiA+L2Rldi9udWxsICYmIHsKKwkJCQlUTkFNRT0iYGVjaG8gJHtUTkFNRX0gfCBzZWQgLWUgJ3NAXCguKlwpLy4qQFwxQCdgLyR7TkVXTkFNRX0iCisJCQkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNvbnZlcnRlZCByZWxhdGl2ZSBsaW5rdGFyZ2V0IHRvIGFic29sdXRlIHBhdGggLSR7VE5BTUV9LS4iCisJCQl9IHx8IHsKKwkJCQlUTkFNRT0iJHtORVdOQU1FfSIKKwkJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiVXNpbmcgYWJzb2x1dGUgbGluayB0YXJnZXQgLSR7VE5BTUV9LS4iCisJCQl9CisJCX0KKworCQljYXNlICIke1RUWVBFfSIgaW4KKwkJCSJmIikgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDcmVhdGluZyBmaWxlIC0ke1ROQU1FfS0uIgorCQkJCWNyZWF0ZV9maWxlICIke1ROQU1FfSIgJgorCQkJCTs7CisJCQkiZCIpICBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5IC0ke1ROQU1FfS0uIgorCQkJCW1rX2RpciAiJHtUTkFNRX0iCisJCQkJIyBBZGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZW50cnkgaW4gZnN0YWIgdG8gbW91bnQuCisJCQkJOzsKKwkJCSopICAgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJJbnZhbGlkIHR5cGUgLSR7VFRZUEV9LS4iCisJCQkJY29udGludWUKKwkJCQk7OworCQllc2FjCisJZG9uZQorCXJldHVybiAwCit9CisKK2NsZWFyY2FjaGU9MAorZXhlYyA5PC9wcm9jL2NtZGxpbmUKK3doaWxlIHJlYWQgbGluZSA8JjkKK2RvCisJY2FzZSAiJGxpbmUiIGluCisJCSpjbGVhcmNhY2hlKikgIGNsZWFyY2FjaGU9MQorCQkJICAgICAgIDs7CisJCSopCSAgICAgICBjb250aW51ZQorCQkJICAgICAgIDs7CisJZXNhYworZG9uZQorZXhlYyA5PiYtCisKK2lmIHRlc3QgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlIC1hICIkVk9MQVRJTEVfRU5BQkxFX0NBQ0hFIiA9ICJ5ZXMiIC1hICJ4JDEiICE9ICJ4dXBkYXRlIiAtYSAieCRjbGVhcmNhY2hlIiA9ICJ4MCIKK3RoZW4KKwlzaCAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUKK2Vsc2UKKwlybSAtZiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisJZm9yIGZpbGUgaW4gYGxzIC0xICIke0NGR0RJUn0iIHwgc29ydGA7IGRvCisJCWFwcGx5X2NmZ2ZpbGUgIiR7Q0ZHRElSfS8ke2ZpbGV9IgorCWRvbmUKKworCVsgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkIF0gJiYgc3luYyAmJiBtdiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlCitmaQorCitpZiBbIC16ICIke1JPT1RfRElSfSIgXSAmJiBbIC1mIC9ldGMvbGQuc28uY2FjaGUgXSAmJiBbICEgLWYgL3Zhci9ydW4vbGQuc28uY2FjaGUgXQordGhlbgorCWxuIC1zIC9ldGMvbGQuc28uY2FjaGUgL3Zhci9ydW4vbGQuc28uY2FjaGUKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwMzI4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYWQtb25seS1yb290ZnMtaG9vay5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJubyIgXSAmJiBleGl0IDAKKworaXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAoKSB7CisJRElSRUNUT1JZPSQxCisJZGlyPWByZWFkbGluayAtZiAkRElSRUNUT1JZYAorCXdoaWxlIHRydWU7IGRvCisJCWlmIFsgISAtZCAiJGRpciIgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6ICRkaXIgaXMgbm90IGEgZGlyZWN0b3J5IgorCQkJZXhpdCAxCisJCWVsc2UKKwkJCWZvciBmbGFnIGluIGBhd2sgLXYgZGlyPSRkaXIgJ3sgaWYgKCQyID09IGRpcikgeyBwcmludCAiRk9VTkQiOyBzcGxpdCgkNCxGTEFHUywiLCIpIH0gfTsgXAorCQkJCUVORCB7IGZvciAoZiBpbiBGTEFHUykgcHJpbnQgRkxBR1NbZl0gfScgPCAvcHJvYy9tb3VudHNgOyBkbworCQkJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisJCQkJWyAiJGZsYWciID0gInJvIiBdICYmIHsgcGFydGl0aW9uPSJyZWFkLW9ubHkiOyBicmVhazsgfQorCQkJZG9uZQorCQkJaWYgWyAiJGRpciIgPSAiLyIgLW8gLW4gIiRwYXJ0aXRpb24iIF07IHRoZW4KKwkJCQlicmVhaworCQkJZWxzZQorCQkJCWRpcj1gZGlybmFtZSAkZGlyYAorCQkJZmkKKwkJZmkKKwlkb25lCisJWyAiJHBhcnRpdGlvbiIgPSAicmVhZC1vbmx5IiBdICYmIGVjaG8gInllcyIgfHwgZWNobyAibm8iCit9CisKK2lmIFsgIiQxIiA9ICJzdGFydCIgXSA7IHRoZW4KKwlpZiBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbGliYCA9ICJ5ZXMiIF07IHRoZW4KKwkJZ3JlcCAtcSAidG1wZnMgL3Zhci92b2xhdGlsZSIgL3Byb2MvbW91bnRzIHx8IG1vdW50IC92YXIvdm9sYXRpbGUKKwkJbWtkaXIgLXAgL3Zhci92b2xhdGlsZS9saWIKKwkJY3AgLWEgL3Zhci9saWIvKiAvdmFyL3ZvbGF0aWxlL2xpYgorCQltb3VudCAtLWJpbmQgL3Zhci92b2xhdGlsZS9saWIgL3Zhci9saWIKKwlmaQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVib290IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVib290Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4N2Q4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWJvb3QKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICByZWJvb3QKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBFeGVjdXRlIHRoZSByZWJvb3QgY29tbWFuZC4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK2VjaG8gLW4gIlJlYm9vdGluZy4uLiAiCityZWJvb3QgU0VEX0hBTFRBUkdTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ybW5vbG9naW4uc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ybW5vbG9naW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzZkZTM0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Jtbm9sb2dpbi5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHJtbm9sb2dpbgorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkYWxsCisjIFJlcXVpcmVkLVN0b3A6IAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBSZW1vdmUgL2V0Yy9ub2xvZ2luIGF0IGJvb3QKKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgc2NyaXB0IHJlbW92ZXMgdGhlIC9ldGMvbm9sb2dpbiBmaWxlIGFzIHRoZQorIyAgICAgICAgICAgICAgICAgICAgbGFzdCBzdGVwIGluIHRoZSBib290IHByb2Nlc3MsIGlmIERFTEFZTE9HSU49eWVzLgorIyAgICAgICAgICAgICAgICAgICAgSWYgREVMQVlMT0dJTj1ubywgL2V0Yy9ub2xvZ2luIHdhcyBub3QgY3JlYXRlZCBieQorIyAgICAgICAgICAgICAgICAgICAgYm9vdG1pc2MgZWFybGllciBpbiB0aGUgYm9vdCBwcm9jZXNzLgorIyMjIEVORCBJTklUIElORk8KKworaWYgdGVzdCAtZiAvZXRjL25vbG9naW4uYm9vdAordGhlbgorCXJtIC1mIC9ldGMvbm9sb2dpbiAvZXRjL25vbG9naW4uYm9vdAorZmkKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2F2ZS1ydGMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzOGZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgc2F2ZS1ydGMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdG9yZSBzeXN0ZW0gY2xvY2sgaW50byBmaWxlCisjIERlc2NyaXB0aW9uOiAgICAgICAKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgVXBkYXRlIHRoZSB0aW1lc3RhbXAKK2RhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyUyA+IC9ldGMvdGltZXN0YW1wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NlbmRzaWdzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0ZTFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncwpAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNlbmRzaWdzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgIHVtb3VudG5mcworIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBLaWxsIGFsbCByZW1haW5pbmcgcHJvY2Vzc2VzLgorIyBEZXNjcmlwdGlvbjogCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zaW5nbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zaW5nbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE4MmQxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NpbmdsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNpbmdsZQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzICRhbGwga2lsbHByb2NzCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAxCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IGV4ZWN1dGVkIGJ5IGluaXQoOCkgdXBvbiBlbnRlcmluZyBydW5sZXZlbCAxIChzaW5nbGUpLgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0iL3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKyMgV2Ugc3RhcnQgdXBkYXRlIGhlcmUsIHNpbmNlIHdlIGp1c3Qga2lsbGVkIGl0LgordGVzdCAteCAvc2Jpbi91cGRhdGUgJiYgdXBkYXRlCisKK2VjaG8gIkVudGVyaW5nIHNpbmdsZS11c2VyIG1vZGUuLi4iCitleGVjIGluaXQgLXQxIFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N1c2hlbGwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTlkOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK1sgLXogIiRTVVNIRUxMIiBdICYmIFNVU0hFTEw9L2Jpbi9zaAorCitleGVjICRTVVNIRUxMCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N5c2ZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZmU3NmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBNb3VudCBrZXJuZWwgdmlydHVhbCBmaWxlIHN5c3RlbXMuCisjIERlc2NyaXB0aW9uOiAgICAgICBNb3VudCBpbml0aWFsIHNldCBvZiB2aXJ0dWFsIGZpbGVzeXN0ZW1zIHRoZSBrZXJuZWwKKyMgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGFuZCB0aGF0IGFyZSByZXF1aXJlZCBieSBldmVyeXRoaW5nLgorIyMjIEVORCBJTklUIElORk8KKworaWYgWyAtZSAvcHJvYyBdICYmICEgWyAtZSAvcHJvYy9tb3VudHMgXTsgdGhlbgorICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK2ZpCisKK2lmIFsgLWUgL3N5cyBdICYmIGdyZXAgLXEgc3lzZnMgL3Byb2MvZmlsZXN5c3RlbXMgJiYgISBbIC1lIC9zeXMvY2xhc3MgXTsgdGhlbgorICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCitmaQorCitpZiBbIC1lIC9zeXMva2VybmVsL2RlYnVnIF0gJiYgZ3JlcCAtcSBkZWJ1Z2ZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisgIG1vdW50IC10IGRlYnVnZnMgZGVidWdmcyAvc3lzL2tlcm5lbC9kZWJ1ZworZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50ZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjEzMjRjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50ZnMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVHVybiBvZmYgc3dhcCBhbmQgdW5tb3VudCBhbGwgbG9jYWwgZmlsZSBzeXN0ZW1zLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworZWNobyAiRGVhY3RpdmF0aW5nIHN3YXAuLi4iCitzd2Fwb2ZmIC1hCisKKyMgV2UgbGVhdmUgL3Byb2MgbW91bnRlZC4KK2VjaG8gIlVubW91bnRpbmcgbG9jYWwgZmlsZXN5c3RlbXMuLi4iCitncmVwIC1xIC9tbnQvcmFtIC9wcm9jL21vdW50cyAmJiBtb3VudCAtbyByZW1vdW50LHJvIC9tbnQvcmFtCittb3VudCAtbyByZW1vdW50LHJvIC8KKwordW1vdW50IC1mIC1hIC1yID4gL2Rldi9udWxsIDI+JjEKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudG5mcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudG5mcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjA3NTQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50bmZzLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50bmZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgdW1vdW50ZnMKKyMgU2hvdWxkLVN0b3A6ICAgICAgICRuZXR3b3JrICRwb3J0bWFwCisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFVubW91bnQgYWxsIG5ldHdvcmsgZmlsZXN5c3RlbXMKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXcml0ZSBhIHJlYm9vdCByZWNvcmQgdG8gL3Zhci9sb2cvd3RtcCBiZWZvcmUgdW5tb3VudGluZworaGFsdCAtdworCitlY2hvICJVbm1vdW50aW5nIHJlbW90ZSBmaWxlc3lzdGVtcy4uLiIKKwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lIGFuZCB1bm91bnQgbmV0d29yayBmaWxlIHN5c3RlbXMKKyMKK3doaWxlIHJlYWQgZGV2aWNlIG1vdW50cHQgZnN0eXBlIG9wdGlvbnMKK2RvCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBuZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gc21iZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gbmNwZnMgfHwgdGVzdCAiJGZzdHlwZSIgPSBjaWZzCisJdGhlbgorCQl1bW91bnQgLWYgJG1vdW50cHQKKwlmaQorZG9uZQorKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3VyYW5kb20gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMTYyNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdXJhbmRvbQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2F2ZSBhbmQgcmVzdG9yZSB0aGUgcmFuZG9tIHNlZWQKKyMgRGVzY3JpcHRpb246ICAgICAgIFNhdmUgdGhlIHJhbmRvbSBzZWVkIG9uIHNodXRkb3duIGFuZCByZXN0b3JlIGl0IG9uIGJvb3QsCisjICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgc2VlZCBpc24ndCBwcmVkaWNhYmxlIG9uIHN0YXJ0dXAKKyMgICAgICAgICAgICAgICAgICAgIChiZWNhdXNlIHRoZSBib290IHByb2Nlc3MgaXMgcHJlZGljdGFibGUpCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1jIC9kZXYvdXJhbmRvbSB8fCBleGl0IDAKKworUkFORE9NX1NFRURfRklMRT0vdmFyL2xpYi91cmFuZG9tL3JhbmRvbS1zZWVkCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvdXJhbmRvbSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VyYW5kb20KKworY2FzZSAiJDEiIGluCisJc3RhcnR8IiIpCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJJbml0aWFsaXppbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iCisJCSMgTG9hZCBhbmQgdGhlbiBzYXZlIDUxMiBieXRlcywgd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIGVudHJvcHkKKwkJIyBwb29sLiBBbHNvIGxvYWQgdGhlIGN1cnJlbnQgZGF0ZSwgaW4gY2FzZSB0aGUgc2VlZCBmaWxlIGlzCisJCSMgZW1wdHkuCisJCSggZGF0ZSArJXMuJU47IFsgLWYgIiRSQU5ET01fU0VFRF9GSUxFIiBdICYmIGNhdCAiJFJBTkRPTV9TRUVEX0ZJTEUiICkgXAorCQkJPi9kZXYvdXJhbmRvbQorCQlybSAtZiAiJFJBTkRPTV9TRUVEX0ZJTEUiCisJCXVtYXNrIDA3NworCQlkZCBpZj0vZGV2L3VyYW5kb20gb2Y9JFJBTkRPTV9TRUVEX0ZJTEUgY291bnQ9MSBcCisJCQk+L2Rldi9udWxsIDI+JjEgfHwgZWNobyAidXJhbmRvbSBzdGFydDogZmFpbGVkLiIKKwkJdW1hc2sgMDIyCisJCTs7CisJc3RvcCkKKwkJIyBDYXJyeSBhIHJhbmRvbSBzZWVkIGZyb20gc2h1dC1kb3duIHRvIHN0YXJ0LXVwOworCQkjIHNlZSBkb2N1bWVudGF0aW9uIGluIGxpbnV4L2RyaXZlcnMvY2hhci9yYW5kb20uYworCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiU2F2aW5nIHJhbmRvbSBzZWVkLi4uIgorCQl1bWFzayAwNzcKKwkJZGQgaWY9L2Rldi91cmFuZG9tIG9mPSRSQU5ET01fU0VFRF9GSUxFIGNvdW50PTEgXAorCQkJPi9kZXYvbnVsbCAyPiYxIHx8IGVjaG8gInVyYW5kb20gc3RvcDogZmFpbGVkLiIKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogdXJhbmRvbSB7c3RhcnR8c3RvcH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3MjQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3ZvbGF0aWxlcwpAQCAtMCwwICsxLDM2IEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGxpc3RzIGZpbGVzeXN0ZW0gb2JqZWN0cyB0aGF0IHNob3VsZCBnZXQgdmVyaWZpZWQKKyMgZHVyaW5nIHN0YXJ0dXAgYW5kIGJlIGNyZWF0ZWQgaWYgbWlzc2luZy4KKyMKKyMgRXZlcnkgbGluZSBtdXN0IGVpdGhlciBiZSBhIGNvbW1lbnQgc3RhcnRpbmcgd2l0aCAjCisjIG9yIGEgZGVmaW5pdGlvbiBvZiBmb3JtYXQ6CisjIDx0eXBlPiA8b3duZXI+IDxncm91cD4gPG1vZGU+IDxwYXRoPiA8bGlua3NvdXJjZT4KKyMgd2hlcmUgdGhlIGl0ZW1zIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAhCisjCisjIDx0eXBlPiA6IGR8ZnxsIDogKGQpaXJlY3Rvcnl8KGYpaWxlfChsKWluaworIworIyBBIGxpbmtpbmcgZXhhbXBsZToKKyMgbCByb290IHJvb3QgMDc3NyAvdmFyL3Rlc3QgL3RtcC90ZXN0ZmlsZQorIyBmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvdGVzdCBub25lCisjCisjIFVuZGVyc3RhbmRpbmcgbGlua3M6CisjIFdoZW4gcG9wdWxhdGUtdm9sYXRpbGUgaXMgdG8gdmVyaWZ5L2NyZWF0ZSBhIGRpcmVjdG9yeSBvciBmaWxlLCBpdCB3aWxsIGZpcnN0CisjIGNoZWNrIGl0J3MgZXhpc3RlbmNlLiBJZiBhIGxpbmsgaXMgZm91bmQgdG8gZXhpc3QgaW4gdGhlIHBsYWNlIG9mIHRoZSB0YXJnZXQsCisjIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGFyZ2V0IHRoZSBsaW5rIHBvaW50cyB0by4KKyMgVGh1cywgaWYgYSBsaW5rIGlzIGluIHRoZSBwbGFjZSB0byBiZSB2ZXJpZmllZCwgdGhlIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQKKyMgaW4gdGhlIHBsYWNlIHRoZSBsaW5rIHBvaW50cyB0byBpbnN0ZWFkLgorIyBUaGlzIGV4cGxhaW5zIHRoZSBvcmRlciBvZiAibGluayBiZWZvcmUgb2JqZWN0IiBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlcmUKKyMgYSBsaW5rIHdpbGwgYmUgY3JlYXRlZCBhdCAvdmFyL3Rlc3QgcG9pbnRpbmcgdG8gL3RtcC90ZXN0ZmlsZSBhbmQgZHVlIHRvIHRoaXMKKyMgbGluayB0aGUgZmlsZSBkZWZpbmVkIGFzIC92YXIvdGVzdCB3aWxsIGFjdHVhbGx5IGJlIGNyZWF0ZWQgYXMgL3RtcC90ZXN0ZmlsZS4KK2Qgcm9vdCByb290IDE3NzcgL3J1bi9sb2NrIG5vbmUKK2Qgcm9vdCByb290IDA3NTUgL3Zhci92b2xhdGlsZS9sb2cgbm9uZQorZCByb290IHJvb3QgMTc3NyAvdmFyL3ZvbGF0aWxlL3RtcCBub25lCitsIHJvb3Qgcm9vdCAxNzc3IC92YXIvbG9jayAvcnVuL2xvY2sKK2wgcm9vdCByb290IDA3NTUgL3Zhci9sb2cgL3Zhci92b2xhdGlsZS9sb2cKK2wgcm9vdCByb290IDA3NTUgL3Zhci9ydW4gL3J1bgorbCByb290IHJvb3QgMTc3NyAvdmFyL3RtcCAvdmFyL3ZvbGF0aWxlL3RtcAorbCByb290IHJvb3QgMTc3NyAvdG1wIC92YXIvdG1wCitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9jay9zdWJzeXMgbm9uZQorZiByb290IHJvb3QgMDY2NCAvdmFyL2xvZy93dG1wIG5vbmUKK2Ygcm9vdCByb290IDA2NjQgL3Zhci9ydW4vdXRtcCBub25lCitsIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2LmNvbmYgL3Zhci9ydW4vcmVzb2x2LmNvbmYKK2Ygcm9vdCByb290IDA2NDQgL3Zhci9ydW4vcmVzb2x2LmNvbmYgbm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTBkZTZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKQEAgLTAsMCArMSwxODIgQEAKK1NVTU1BUlkgPSAiU3lzViBpbml0IHNjcmlwdHMiCitERVNDUklQVElPTiA9ICJJbml0c2NyaXB0cyBwcm92aWRlIHRoZSBiYXNpYyBzeXN0ZW0gc3RhcnR1cCBpbml0aWFsaXphdGlvbiBzY3JpcHRzIGZvciB0aGUgc3lzdGVtLiAgVGhlc2Ugc2NyaXB0cyBpbmNsdWRlIGFjdGlvbnMgc3VjaCBhcyBmaWxlc3lzdGVtIG1vdW50aW5nLCBmc2NrLCBSVEMgbWFuaXB1bGF0aW9uIGFuZCBvdGhlciBhY3Rpb25zIHJvdXRpbmVseSBwZXJmb3JtZWQgYXQgc3lzdGVtIHN0YXJ0dXAuICBJbiBhZGRpdGlvbiwgdGhlIHNjcmlwdHMgYXJlIGFsc28gdXNlZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duIHRvIHJldmVyc2UgdGhlIGFjdGlvbnMgcGVyZm9ybWVkIGF0IHN0YXJ0dXAuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorUFIgPSAicjE1NSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vZnVuY3Rpb25zIFwKKyAgICAgICAgICAgZmlsZTovL2hhbHQgXAorICAgICAgICAgICBmaWxlOi8vdW1vdW50ZnMgXAorICAgICAgICAgICBmaWxlOi8vZGV2cHRzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2RldnB0cyBcCisgICAgICAgICAgIGZpbGU6Ly9ob3N0bmFtZS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudGFsbC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9iYW5uZXIuc2ggXAorICAgICAgICAgICBmaWxlOi8vYm9vdG1pc2Muc2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVib290IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc2luZ2xlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbmRzaWdzIFwKKyAgICAgICAgICAgZmlsZTovL3VyYW5kb20gXAorICAgICAgICAgICBmaWxlOi8vcm1ub2xvZ2luLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrcm9vdC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly91bW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcG9wdWxhdGUtdm9sYXRpbGUuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9zYXZlLXJ0Yy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9HUEx2Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kbWVzZy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dyb3RhdGUtZG1lc2cuY29uZiBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnZmlsZTovL3N1c2hlbGwnLCcnLGQpfSBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworU1JDX1VSSV9hcHBlbmRfYXJtID0gIiBmaWxlOi8vYWxpZ25tZW50LnNoIgorCitLRVJORUxfVkVSU0lPTiA9ICIiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworREVQRU5EU19hcHBlbmQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZnVuY3Rpb25zIFwKKyAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnYmFzaCcsJycsZCl9IFwKKwkJICIKK0ZJTEVTXyR7UE59LWZ1bmN0aW9ucyA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMqIgorCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1mdW5jdGlvbnMgPSAiOTAiCitBTFRFUk5BVElWRV8ke1BOfS1mdW5jdGlvbnMgPSAiZnVuY3Rpb25zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgorCitIQUxUQVJHUyA/PSAiLWQgLWYiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlzZWQgLWkgLWUgInM6U0VEX0hBTFRBUkdTOiR7SEFMVEFSR1N9OmciICR7V09SS0RJUn0vaGFsdAorCXNlZCAtaSAtZSAiczpTRURfSEFMVEFSR1M6JHtIQUxUQVJHU306ZyIgJHtXT1JLRElSfS9yZWJvb3QKK30KKworZG9faW5zdGFsbCAoKSB7CisjCisjIENyZWF0ZSBkaXJlY3RvcmllcyBhbmQgaW5zdGFsbCBkZXZpY2UgaW5kZXBlbmRlbnQgc2NyaXB0cworIworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yY1MuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMwLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjMS5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzIuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjNC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzUuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmM2LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJIyBIb2xkcyBzdGF0ZSBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIHVyYW5kb20KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi91cmFuZG9tCisKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9mdW5jdGlvbnMJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2Jvb3RtaXNjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2NoZWNrcm9vdC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9oYWx0CQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ob3N0bmFtZS5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudGFsbC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudG5mcy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yZWJvb3QJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3Jtbm9sb2dpbi5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zZW5kc2lncwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc2luZ2xlCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS91bW91bnRuZnMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vdXJhbmRvbQkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1pICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91cmFuZG9tIC1lICdzLC92YXIvLCR7bG9jYWxzdGF0ZWRpcn0vLGc7cywvZXRjLywke3N5c2NvbmZkaXJ9LyxnJworCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RldnB0cy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9kZXZwdHMJCSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zeXNmcy5zaAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcG9wdWxhdGUtdm9sYXRpbGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3NhdmUtcnRjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L3ZvbGF0aWxlcwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvMDBfY29yZQorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RtZXNnLnNoCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9sb2dyb3RhdGUtZG1lc2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS8KKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxpZ25tZW50LnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWZpCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc2VsaW51eCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3VzaGVsbCAke0R9LyR7YmFzZV9zYmluZGlyfQorCWZpCisjCisjIEluc3RhbGwgZGV2aWNlIGRlcGVuZGVudCBzY3JpcHRzCisjCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYmFubmVyLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iYW5uZXIuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS91bW91bnRmcwkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdW1vdW50ZnMKKyMKKyMgQ3JlYXRlIHJ1bmxldmVsIGxpbmtzCisjCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBybW5vbG9naW4uc2ggc3RhcnQgOTkgMiAzIDQgNSAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzZW5kc2lncyBzdGFydCAyMCAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdXJhbmRvbSBzdGFydCAzMCBTIDAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSB1bW91bnRuZnMuc2ggc3RhcnQgMzEgMCAxIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdW1vdW50ZnMgc3RhcnQgNDAgMCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHJlYm9vdCBzdGFydCA5MCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGhhbHQgc3RhcnQgOTAgMCAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzYXZlLXJ0Yy5zaCBzdGFydCAyNSAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYmFubmVyLnNoIHN0YXJ0IDAyIFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gY2hlY2tyb290LnNoIHN0YXJ0IDA2IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gbW91bnRhbGwuc2ggc3RhcnQgMDMgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBob3N0bmFtZS5zaCBzdGFydCAzOSBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IG1vdW50bmZzLnNoIHN0YXJ0IDE1IDIgMyA0IDUgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdG1pc2Muc2ggc3RhcnQgNTUgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzeXNmcy5zaCBzdGFydCAwMiBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHBvcHVsYXRlLXZvbGF0aWxlLnNoIHN0YXJ0IDM3IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIHN0YXJ0IDI5IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gZGV2cHRzLnNoIHN0YXJ0IDM4IFMgLgorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkgICAgICAgIHVwZGF0ZS1yYy5kIC1yICR7RH0gYWxpZ25tZW50LnNoIHN0YXJ0IDA2IFMgLgorCWZpCisJIyBXZSB3aXNoIHRvIGhhdmUgL3Zhci9sb2cgcmVhZHkgYXQgdGhpcyBzdGFnZSBzbyBleGVjdXRlIHRoaXMgYWZ0ZXIKKwkjIHBvcHVsYXRlLXZvbGF0aWxlLnNoCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBkbWVzZy5zaCBzdGFydCAzOCBTIC4KK30KKworTUFTS0VEX1NDUklQVFMgPSAiIFwKKyAgYmFubmVyIFwKKyAgYm9vdG1pc2MgXAorICBjaGVja2ZzIFwKKyAgY2hlY2tyb290IFwKKyAgZGV2cHRzIFwKKyAgZG1lc2cgXAorICBob3N0bmFtZSBcCisgIG1vdW50YWxsIFwKKyAgbW91bnRuZnMgXAorICBwb3B1bGF0ZS12b2xhdGlsZSBcCisgIHJlYWQtb25seS1yb290ZnMtaG9vayBcCisgIHJtbm9sb2dpbiBcCisgIHN5c2ZzIFwKKyAgdXJhbmRvbSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCWZvciBTRVJWSUNFIGluICR7TUFTS0VEX1NDUklQVFN9OyBkbworCQkJc3lzdGVtY3RsICRPUFRTIG1hc2sgJFNFUlZJQ0Uuc2VydmljZQorCQlkb25lCisJZmkKKworICAgICMgRGVsZXRlIGFueSBvbGQgdm9sYXRpbGUgY2FjaGUgc2NyaXB0LCBhcyBkaXJlY3RvcmllcyBtYXkgaGF2ZSBtb3ZlZAorICAgIGlmIFsgLXogIiREIiBdOyB0aGVuCisgICAgICAgIHJtIC1mICIvZXRjL3ZvbGF0aWxlLmNhY2hlIgorICAgIGZpCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvY2hlY2tyb290LnNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2pwZWcvanBlZ185YS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTJlNjVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJsaWJqcGVnIGlzIGEgbGlicmFyeSBmb3IgaGFuZGxpbmcgdGhlIEpQRUcgKEpGSUYpIGltYWdlIGZvcm1hdCIKK0RFU0NSSVBUSU9OID0gImxpYmpwZWcgY29udGFpbnMgYSBsaWJyYXJ5IGZvciBoYW5kbGluZyB0aGUgSlBFRyAoSkZJRikgaW1hZ2UgZm9ybWF0LCBhcyB3ZWxsIGFzIHJlbGF0ZWQgcHJvZ3JhbXMgZm9yIGFjY2Vzc2luZyB0aGUgbGlianBlZyBmdW5jdGlvbnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pamcub3JnLyIKKworTElDRU5TRSA9IkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9ZWE5M2E4YTJmZWQxMDEwNmI2M2JjMjE2NzllZGFjYjkiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmlqZy5vcmcvZmlsZXMvanBlZ3NyYy52JHtQVn0udGFyLmd6IFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMzNTM5OTJhZWNhZWUxODA1ZWY0MTA5YWFkZDQzM2U3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNhNzUzZWE0OGQ5MTc5NDVkZDU0YTJkOTdkZTM4OGFhMDZjYTJlYjEwNjZjYmZkYzY2NTIwMzYzNDlmZTA1YTciCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rIAkJImpwZWctdG9vbHMgIgorREVTQ1JJUFRJT05fanBlZy10b29scyA9ICJUaGUganBlZy10b29scyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBjbGllbnQgcHJvZ3JhbXMgZm9yIGFjY2VzcyBsaWJqcGVnIGZ1bmN0aW9uYWxpdHkuICBUaGVzZSB0b29scyBhbGxvdyBmb3IgdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCB0cmFuc2Zvcm1hdGlvbiBhbmQgZGlzcGxheSBvZiBKUEVHIGZpbGVzLiIKK0ZJTEVTX2pwZWctdG9vbHMgPSAJIiR7YmluZGlyfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworcGtnX3Bvc3RpbnN0XyR7UE59X2xpbnV4c3RkYmFzZSAoKSB7CisgICAgaWYgWyAhIC1lICREJHtsaWJkaXJ9L2xpYmpwZWcuc28uNjIgXTsgdGhlbgorICAgICAgICBKUEVHPWBmaW5kICREJHtsaWJkaXJ9IC10eXBlIGYgLW5hbWUgbGlianBlZy5zby5cKi5cKi5cKmAKKyAgICAgICAgbG4gLXNmIGBiYXNlbmFtZSAkSlBFR2AgJEQke2xpYmRpcn0vbGlianBlZy5zby42MgorICAgIGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvMDAwMy1Pbmx5LWlubHVjbHVkZS1rZXJuZWwtaGVhZGVycy13aXRoLWdsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmZjYjBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDNjNWM3YWNjN2VmODc0YjkxOWIyNjU4M2QzODkyZTIxYjkwNzgzM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+CitEYXRlOiBXZWQsIDIwIEF1ZyAyMDE0IDA5OjAwOjAzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBPbmx5IGlubHVjbHVkZSBrZXJuZWwgaGVhZGVycyB3aXRoIGdsaWJjCisKK1RoaXMgZml4ZXMgY29tcGlsZSBlcnJvcnMgd2l0aCBtdXNsIGxpYmMKKworU2lnbmVkLW9mZi1ieTogTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvcmVzaXplY29ucy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Jlc2l6ZWNvbnMuYyBiL3NyYy9yZXNpemVjb25zLmMKK2luZGV4IDVmODQ4NDUuLjY5MWRmY2MgMTAwNjQ0CistLS0gYS9zcmMvcmVzaXplY29ucy5jCisrKysgYi9zcmMvcmVzaXplY29ucy5jCitAQCAtODAsNyArODAsNyBAQAorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaWYgKF9fR05VX0xJQlJBUllfXyA+PSA2KQorICNpbmNsdWRlIDxzeXMvcGVybS5oPgorLSNlbHNlCisrI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pCisgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisgI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KKyAjZW5kaWYKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvdWNsaWJjLXN0ZGFyZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdmMzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGtleW1hcC5oOjU6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSBrc3ltcy5jOjY6CisuL2tleW1hcC9jb21tb24uaDo2NTozODogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICd2YV9saXN0JworICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL2tleW1hcC9jb21tb24uaDo2NjozOiBlcnJvcjogZXhwZWN0ZWQgJzsnLCAnLCcgb3IgJyknIGJlZm9yZSAnY29uc3QnCisgICBjb25zdCB2b2lkICpkYXRhKTsKKyAgIF4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IGtiZC0yLjAuMC9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrYmQtMi4wLjAub3JpZy9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9jb250ZXh0UC5oCTIwMTMtMTEtMDUgMjI6MzM6NDkuMjAwNTI4MjI2IC0wODAwCitAQCAtMiw3ICsyLDcgQEAKKyAjZGVmaW5lIExLX0NPTlRFWFRQX0gKKyAKKyAjaW5jbHVkZSAia2V5bWFwLmgiCistCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorIC8qKgorICAqIEBicmllZiBDb3B5IG9mIHN0cnVjdCBrYmRpYWNydWMuCisgICovCitJbmRleDoga2JkLTIuMC4wL3NyYy9saWJrZXltYXAva2V5bWFwL2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2JkLTIuMC4wLm9yaWcvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0xMS0wNSAyMjozMzo1OS45NjQ1Mjg0MzggLTA4MDAKK0BAIC02LDYgKzYsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxrZXltYXAvY29udGV4dC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyAKKyAvKiogSW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZXMgbmVjZXNzYXJ5IHRvIHJlYWQgYW5kL29yIHBhcnNlIGtleW1hcC4KKyAgKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkXzIuMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkXzIuMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmRjN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjIuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJLZXl0YWJsZSBmaWxlcyBhbmQga2V5Ym9hcmQgdXRpbGl0aWVzIgorIyBldmVyeXRoaW5nIG1pbnVzIGNvbnNvbGUtZm9udHMgaXMgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1ZmNjMzYxMjFkOTNlMWY2OWQ5NmEzMTMwNzhjOGI1IgorREVQRU5EUyA9ICJsaWJjaGVjayIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwdGVzdCBwa2djb25maWcKKworUlJFUExBQ0VTXyR7UE59ID0gImNvbnNvbGUtdG9vbHMiCitSUFJPVklERVNfJHtQTn0gPSAiY29uc29sZS10b29scyIKK1JDT05GTElDVFNfJHtQTn0gPSAiY29uc29sZS10b29scyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLXN0ZGFyZy5wYXRjaCBcCisJICAgZmlsZTovLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODc0NzVlYjc4YjFkNmU2YWIwNjY4NmRkMzIzYWQ0YmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZGRhYmY5NjAxMmUzMjljNGJlYmI5NmEyMWFlZWY3YzM4NzJmNjI0ZTk2ZTgxNTZiYTU0MmI4MmFlYjkxMiIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS12bG9jaywgLS1kaXNhYmxlLXZsb2NrLCBsaWJwYW0sIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY29uc29sZWZvbnRzICR7UE59LWtleW1hcHMgJHtQTn0tdW5pbWFwcyAke1BOfS1jb25zb2xldHJhbnMiCisKK0ZJTEVTXyR7UE59LWNvbnNvbGVmb250cyA9ICIke2RhdGFkaXJ9L2NvbnNvbGVmb250cyIKK0ZJTEVTXyR7UE59LWNvbnNvbGV0cmFucyA9ICIke2RhdGFkaXJ9L2NvbnNvbGV0cmFucyIKK0ZJTEVTXyR7UE59LWtleW1hcHMgPSAiJHtkYXRhZGlyfS9rZXltYXBzIgorRklMRVNfJHtQTn0tdW5pbWFwcyA9ICIke2RhdGFkaXJ9L3VuaW1hcHMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJjaHZ0IGRlYWxsb2N2dCBmZ2NvbnNvbGUgb3BlbnZ0IgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJjZ3JvdXAvbGliY2dyb3VwXzAuNDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJiYTFkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGludXggY29udHJvbCBncm91cCBhYnN0cmFjdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGliY2dyb3VwIGlzIGEgbGlicmFyeSB0aGF0IGFic3RyYWN0cyB0aGUgY29udHJvbCBncm91cCBmaWxlIHN5c3RlbSBcCitpbiBMaW51eC4gQ29udHJvbCBncm91cHMgYWxsb3cgeW91IHRvIGxpbWl0LCBhY2NvdW50IGFuZCBpc29sYXRlIHJlc291cmNlIHVzYWdlIFwKKyhDUFUsIG1lbW9yeSwgZGlzayBJL08sIGV0Yy4pIG9mIGdyb3VwcyBvZiBwcm9jZXNzZXMuIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saWJjZy8ke0JQTn0vdjAuNDEvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZGVhOWQ1MGI4YTViNzNmZjBiZjFjZGNiMjEwZjYzZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNGUzOGJkYzdlZjcwNjQ1Y2UzMzc0MGRkY2NhMDUxMjQ4ZDU2YjUzMjgzYzBkYzZkNDA0ZTE3NzA2ZjZmYjUxIgorCitFWFRSQV9PRUNPTkYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtLW1vZHVsZS1kaXI9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkgLS1lbmFibGUtcGFtPXllcycsICctLWVuYWJsZS1wYW09bm8nLCBkKX0iCisKK1BBQ0tBR0VTID0rICJjZ3JvdXBzLXBhbS1wbHVnaW4iCitGSUxFU19jZ3JvdXBzLXBhbS1wbHVnaW4gPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZpbmcgbGliY2dyb3VwIHRvIGJhc2VfbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12IC1mICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9LworCQlyZWxfbGliX3ByZWZpeD1gZWNobyAke2xpYmRpcn0gfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZydgCisJCWxuIC1zZiAke3JlbF9saWJfcHJlZml4fSR7YmFzZV9saWJkaXJ9L2xpYmNncm91cC5zby4xICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvCisJZmkKKwkjIHBhbSBtb2R1bGVzIGluICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyBzaG91bGQgYmUgYmluYXJ5IC5zbyBmaWxlcywgbm90IHN5bWxpbmtzLgorCWlmIFsgLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28uMC4wLjAgXTsgdGhlbgorCQltdiAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4wLjAuMCAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbworCQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4qCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzYzM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jCkBAIC0wLDAgKzEsNzggQEAKK1NVTU1BUlkgPSAiWE1MIEMgUGFyc2VyIExpYnJhcnkgYW5kIFRvb2xraXQiCitERVNDUklQVElPTiA9ICJUaGUgWE1MIFBhcnNlciBMaWJyYXJ5IGFsbG93cyBmb3IgbWFuaXB1bGF0aW9uIG9mIFhNTCBmaWxlcy4gIExpYnhtbDIgZXhwb3J0cyBQdXNoIGFuZCBQdWxsIHR5cGUgcGFyc2VyIGludGVyZmFjZXMgZm9yIGJvdGggWE1MIGFuZCBIVE1MLiAgSXQgY2FuIGRvIERURCB2YWxpZGF0aW9uIGF0IHBhcnNlIHRpbWUsIG9uIGEgcGFyc2VkIGRvY3VtZW50IGluc3RhbmNlIG9yIHdpdGggYW4gYXJiaXRyYXJ5IERURC4gIExpYnhtbDIgaW5jbHVkZXMgY29tcGxldGUgWFBhdGgsIFhQb2ludGVyIGFuZCBYaW5jbHVkZSBpbXBsZW1lbnRhdGlvbnMuICBJdCBhbHNvIGhhcyBhIFNBWCBsaWtlIGludGVyZmFjZSwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIEV4cGF0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueG1sc29mdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sMiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0yMDQ0NDE3ZTJlNTAwNmI2NWE4YjkwNjdiNjgzZmNmMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9oYXNoLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xNTttZDU9OTZmNzI5NjYwNWVhZTgwNzY3MGZiMDg5NDc4Mjk5NjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlzdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTM7bWQ1PWNkYmZhM2RlZTUxYzA5OWVkYjA0ZTM5Zjc2MmVlOTA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyaW8uYztiZWdpbmxpbmU9NTtlbmRsaW5lPTE0O21kNT02YzAyNTc1M2M4NmQ5NTg3MjJlYzc2ZTk0Y2FlOTMyZSIKKworREVQRU5EUyA9KyAiemxpYiIKKworU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4bWwyL2xpYnhtbDItJHtQVn0udGFyLmd6O25hbWU9bGlidGFyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbnNpZGVjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW50ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veG1sMi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgcHl0aG9ubmF0aXZlIHB0ZXN0CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHl0aG9uICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgKz0gImdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIgorCisjIFdlIGRvbid0IERFUEVORCBvbiBiaW51dGlscyBmb3IgYW5zaWRlY2wuaCBzbyBlbnN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBoZWFkZXIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgLWUgJy8uKmFuc2lkZWNsLmguKi9kJyAke1N9L2NvbmZpZ3VyZS5hYworfQorCitleHBvcnQgUFlUSE9OX1NJVEVfUEFDS0FHRVM9IiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24iCisjIFdBUk5JTkc6IHpsaWIgaXMgcmVxdWlyZSBmb3IgUlBNIHVzZQorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbGVnYWN5IC0td2l0aC1jYXRhbG9nIC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC1mZXhjZXB0aW9ucyIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9saW51eHN0ZGJhc2UgPSAiLS13aXRoLWRlYnVnIC0td2l0aC1sZWdhY3kgLS13aXRoLWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCisKKyMgcmVxdWlyZWQgZm9yIHB5dGhvbmcgYmluZGluZworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorCitleHBvcnQgTERGTEFHUyArPSAiLWxkbCIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgICMgYXV0b25hbWVyIHdvdWxkIGNhbGwgdGhpcyBsaWJ4bWwyLTIsIGJ1dCB3ZSBkb24ndCB3YW50IHRoYXQKKyAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfbGlieG1sMicsICcke01MUFJFRklYfWxpYnhtbDInKQorfQorCitQQUNLQUdFUyArPSAiJHtQTn0tdXRpbHMgJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veG1sMkNvbmYuc2ggJHtsaWJkaXJ9L2NtYWtlLyoiCitGSUxFU18ke1BOfS11dGlscyArPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1weXRob24gKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgY3AgLXIgJHtXT1JLRElSfS94bWxjb25mICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLUNWRS0yMDE1LTE4MTktRW5mb3JjZS10aGUtcmVhZGVyLXRvLXJ1bi1pbi1jb25zdGFudC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkNThmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoCkBAIC0wLDAgKzEsMTgxIEBACitGcm9tIDIxM2YxZmUwZDc2ZDMwZWFlZDZlNTg1MzA1N2RlZmM0M2U2ZGYyYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDE3OjQxOjQ4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIENWRS0yMDE1LTE4MTkgRW5mb3JjZSB0aGUgcmVhZGVyIHRvIHJ1biBpbiBjb25zdGFudCBtZW1vcnkKKworT25lIG9mIHRoZSBvcGVyYXRpb24gb24gdGhlIHJlYWRlciBjb3VsZCByZXNvbHZlIGVudGl0aWVzCitsZWFkaW5nIHRvIHRoZSBjbGFzc2ljIGV4cGFuc2lvbiBpc3N1ZS4gTWFrZSBzdXJlIHRoZQorYnVmZmVyIHVzZWQgZm9yIHhtbHJlYWRlciBvcGVyYXRpb24gaXMgYm91bmRlZC4KK0ludHJvZHVjZSBhIG5ldyBhbGxvY2F0aW9uIHR5cGUgZm9yIHRoZSBidWZmZXJzIGZvciB0aGlzIGVmZmVjdC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1Zi5jICAgICAgICAgICAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB8ICAgIDMgKystCisgeG1scmVhZGVyLmMgICAgICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKysrLQorIDMgZmlsZXMgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1Zi5jIGIvYnVmLmMKK2luZGV4IDZlZmM3YjYuLjA3OTIyZmYgMTAwNjQ0CistLS0gYS9idWYuYworKysrIGIvYnVmLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisgI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisrI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4gLyogZm9yIFhNTF9NQVhfVEVYVF9MRU5HVEggKi8KKyAjaW5jbHVkZSAiYnVmLmgiCisgCisgI2RlZmluZSBXSVRIX0JVRkZFUl9DT01QQVQKK0BAIC0yOTksNyArMzAwLDggQEAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZQdHIgYnVmLAorICAgICBpZiAoKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0VYQUNUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCkgfHwKKy0gICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpKSB7CisrICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSB8fAorKwkoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkpIHsKKyAJYnVmLT5hbGxvYyA9IHNjaGVtZTsKKyAgICAgICAgIGlmIChidWYtPmJ1ZmZlcikKKyAgICAgICAgICAgICBidWYtPmJ1ZmZlci0+YWxsb2MgPSBzY2hlbWU7CitAQCAtNDU4LDYgKzQ2MCwxOCBAQCB4bWxCdWZHcm93SW50ZXJuYWwoeG1sQnVmUHRyIGJ1Ziwgc2l6ZV90IGxlbikgeworICAgICBzaXplID0gYnVmLT51c2UgKyBsZW4gKyAxMDA7CisgI2VuZGlmCisgCisrICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKyAgICAgICAgLyoKKysJICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAqLworKyAgICAgICAgaWYgKChidWYtPnVzZSArIGxlbiA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB8fAorKwkgICAgKGJ1Zi0+c2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSkgeworKwkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJICAgIHJldHVybigwKTsKKysJfQorKwlpZiAoc2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKQorKwkgICAgc2l6ZSA9IFhNTF9NQVhfVEVYVF9MRU5HVEg7CisrICAgIH0KKyAgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmIChidWYtPmNvbnRlbnRJTyAhPSBOVUxMKSkgeworICAgICAgICAgc2l6ZV90IHN0YXJ0X2J1ZiA9IGJ1Zi0+Y29udGVudCAtIGJ1Zi0+Y29udGVudElPOworIAorQEAgLTczOSw2ICs3NTMsMTUgQEAgeG1sQnVmUmVzaXplKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBzaXplKQorICAgICBDSEVDS19DT01QQVQoYnVmKQorIAorICAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuKDApOworKyAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpIHsKKysgICAgICAgIC8qCisrCSAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgKi8KKysgICAgICAgIGlmIChzaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHsKKysJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImJ1ZmZlciBlcnJvcjogdGV4dCB0b28gbG9uZ1xuIik7CisrCSAgICByZXR1cm4oMCk7CisrCX0KKysgICAgfQorIAorICAgICAvKiBEb24ndCByZXNpemUgaWYgd2UgZG9uJ3QgaGF2ZSB0byAqLworICAgICBpZiAoc2l6ZSA8IGJ1Zi0+c2l6ZSkKK0BAIC04NjcsNiArODkwLDE1IEBAIHhtbEJ1ZkFkZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAKKyAgICAgbmVlZFNpemUgPSBidWYtPnVzZSArIGxlbiArIDI7CisgICAgIGlmIChuZWVkU2l6ZSA+IGJ1Zi0+c2l6ZSl7CisrCWlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKwkgICAgLyoKKysJICAgICAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgICAgICovCisrCSAgICBpZiAobmVlZFNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkgeworKwkJeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJCXJldHVybigtMSk7CisrCSAgICB9CisrCX0KKyAgICAgICAgIGlmICgheG1sQnVmUmVzaXplKGJ1ZiwgbmVlZFNpemUpKXsKKyAJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImdyb3dpbmcgYnVmZmVyIik7CisgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJfTk9fTUVNT1JZOworQEAgLTkzOCw2ICs5NzAsMTUgQEAgeG1sQnVmQWRkSGVhZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAgICAgfQorICAgICBuZWVkU2l6ZSA9IGJ1Zi0+dXNlICsgbGVuICsgMjsKKyAgICAgaWYgKG5lZWRTaXplID4gYnVmLT5zaXplKXsKKysJaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSB7CisrCSAgICAvKgorKwkgICAgICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAgICAgKi8KKysJICAgIGlmIChuZWVkU2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB7CisrCQl4bWxCdWZNZW1vcnlFcnJvcihidWYsICJidWZmZXIgZXJyb3I6IHRleHQgdG9vIGxvbmdcbiIpOworKwkJcmV0dXJuKC0xKTsKKysJICAgIH0KKysJfQorICAgICAgICAgaWYgKCF4bWxCdWZSZXNpemUoYnVmLCBuZWVkU2l6ZSkpeworIAkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiZ3Jvd2luZyBidWZmZXIiKTsKKyAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUl9OT19NRU1PUlk7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGIvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCitpbmRleCAyZjkwNzE3Li40YTliM2JjIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCisrKysgYi9pbmNsdWRlL2xpYnhtbC90cmVlLmgKK0BAIC03Niw3ICs3Niw4IEBAIHR5cGVkZWYgZW51bSB7CisgICAgIFhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QsCS8qIGdyb3cgb25seSB0byB0aGUgbWluaW1hbCBzaXplICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFLCAvKiBpbW11dGFibGUgYnVmZmVyICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU8sCS8qIHNwZWNpYWwgYWxsb2NhdGlvbiBzY2hlbWUgdXNlZCBmb3IgSS9PICovCistICAgIFhNTF9CVUZGRVJfQUxMT0NfSFlCUklECS8qIGV4YWN0IHVwIHRvIGEgdGhyZXNob2xkLCBhbmQgZG91YmxlaXQgdGhlcmVhZnRlciAqLworKyAgICBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCwJLyogZXhhY3QgdXAgdG8gYSB0aHJlc2hvbGQsIGFuZCBkb3VibGVpdCB0aGVyZWFmdGVyICovCisrICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRAkvKiBsaW1pdCB0aGUgdXBwZXIgc2l6ZSBvZiB0aGUgYnVmZmVyICovCisgfSB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lOworIAorIC8qKgorZGlmZiAtLWdpdCBhL3htbHJlYWRlci5jIGIveG1scmVhZGVyLmMKK2luZGV4IGYxOWUxMjMuLjQ3MWU3ZTIgMTAwNjQ0CistLS0gYS94bWxyZWFkZXIuYworKysrIGIveG1scmVhZGVyLmMKK0BAIC0yMDkxLDYgKzIwOTEsOSBAQCB4bWxOZXdUZXh0UmVhZGVyKHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LCBjb25zdCBjaGFyICpVUkkpIHsKKyAJCSJ4bWxOZXdUZXh0UmVhZGVyIDogbWFsbG9jIGZhaWxlZFxuIik7CisgCXJldHVybihOVUxMKTsKKyAgICAgfQorKyAgICAvKiBubyBvcGVyYXRpb24gb24gYSByZWFkZXIgc2hvdWxkIHJlcXVpcmUgYSBodWdlIGJ1ZmZlciAqLworKyAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJldC0+YnVmZmVyLAorKwkJCSAgICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCk7CisgICAgIHJldC0+c2F4ID0gKHhtbFNBWEhhbmRsZXIgKikgeG1sTWFsbG9jKHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CisgICAgIGlmIChyZXQtPnNheCA9PSBOVUxMKSB7CisgCXhtbEJ1ZkZyZWUocmV0LT5idWZmZXIpOworQEAgLTM2MTYsNiArMzYxOSw3IEBAIHhtbFRleHRSZWFkZXJDb25zdFZhbHVlKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKSB7CisgCSAgICByZXR1cm4oKCh4bWxOc1B0cikgbm9kZSktPmhyZWYpOworICAgICAgICAgY2FzZSBYTUxfQVRUUklCVVRFX05PREU6eworIAkgICAgeG1sQXR0clB0ciBhdHRyID0gKHhtbEF0dHJQdHIpIG5vZGU7CisrCSAgICBjb25zdCB4bWxDaGFyICpyZXQ7CisgCisgCSAgICBpZiAoKGF0dHItPmNoaWxkcmVuICE9IE5VTEwpICYmCisgCSAgICAgICAgKGF0dHItPmNoaWxkcmVuLT50eXBlID09IFhNTF9URVhUX05PREUpICYmCitAQCAtMzYyOSwxMCArMzYzMywyMSBAQCB4bWxUZXh0UmVhZGVyQ29uc3RWYWx1ZSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sVGV4dFJlYWRlclNldHVwIDogbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKyAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICB4bWxCdWZFbXB0eShyZWFkZXItPmJ1ZmZlcik7CisgCSAgICAgICAgeG1sQnVmR2V0Tm9kZUNvbnRlbnQocmVhZGVyLT5idWZmZXIsIG5vZGUpOworLQkJcmV0dXJuKHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpKTsKKysJCXJldCA9IHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpOworKwkJaWYgKHJldCA9PSBOVUxMKSB7CisrCQkgICAgLyogZXJyb3Igb24gdGhlIGJ1ZmZlciBiZXN0IHRvIHJlYWxsb2NhdGUgKi8KKysJCSAgICB4bWxCdWZGcmVlKHJlYWRlci0+YnVmZmVyKTsKKysJCSAgICByZWFkZXItPmJ1ZmZlciA9IHhtbEJ1ZkNyZWF0ZVNpemUoMTAwKTsKKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKysJCSAgICByZXQgPSBCQURfQ0FTVCAiIjsKKysJCX0KKysJCXJldHVybihyZXQpOworIAkgICAgfQorIAkgICAgYnJlYWs7CisgCX0KK0BAIC01MTMxLDYgKzUxNDYsOSBAQCB4bWxUZXh0UmVhZGVyU2V0dXAoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInhtbFRleHRSZWFkZXJTZXR1cCA6IG1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgIH0KKysgICAgLyogbm8gb3BlcmF0aW9uIG9uIGEgcmVhZGVyIHNob3VsZCByZXF1aXJlIGEgaHVnZSBidWZmZXIgKi8KKysgICAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZShyZWFkZXItPmJ1ZmZlciwKKysJCQkgICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpOworICAgICBpZiAocmVhZGVyLT5zYXggPT0gTlVMTCkKKyAJcmVhZGVyLT5zYXggPSAoeG1sU0FYSGFuZGxlciAqKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKyAgICAgaWYgKHJlYWRlci0+c2F4ID09IE5VTEwpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS10aHJlYWRzLURlZmluZS1wdGhyZWFkLWRlZmluaXRpb25zLWZvci1nbGliYy1jb21wbGlhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NTNhODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDY3NTBjYzU2NGExN2M4MTI1NTVjY2E1ODc2NjAyNDBjY2ZmYWFlZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA0IEFwciAyMDE1IDA4OjUwOjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRocmVhZHM6IERlZmluZSBwdGhyZWFkKiBkZWZpbml0aW9ucyBmb3IgZ2xpYmMgY29tcGxpYW50IGxpYnMKKworVGhpcyBjb2RlIGlzIGFzc3VtaW5nIGdsaWJjIGJ1dCBub3QgZXhwbGljaXRseSBzYXlpbmcgaXQKK3NvIGxldHMgbWFrZSBpdCBzby4gRml4ZXMgZm9sbG93aW5nIG9uIG11c2wKKwordGhyZWFkcy5jOjgwOjI3OiBlcnJvcjogbWFjcm8gInB0aHJlYWRfZXF1YWwiIHJlcXVpcmVzIDIgYXJndW1lbnRzLCBidXQKK29ubHkgMSBnaXZlbgorfCAgZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsICgpCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdGhyZWFkcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOS4yLm9yaWcvdGhyZWFkcy5jCisrKysgbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKK0BAIC00Nyw3ICs0Nyw3IEBACisgI2lmZGVmIEhBVkVfUFRIUkVBRF9ICisgCisgc3RhdGljIGludCBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAtMTsKKy0jaWZkZWYgX19HTlVDX18KKysjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0dMSUJDX18pCisgI2lmZGVmIGxpbnV4CisgI2lmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IChfX0dOVUNfXyA+IDMpCisgZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGE4MTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi83MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgMjMgT2N0IDIwMTQgMTE6MzU6MzYgKzA4MDAKK1N1YmplY3Q6IEZpeCBtaXNzaW5nIGVudGl0aWVzIGFmdGVyIENWRS0yMDE0LTM2NjAgZml4CisKK0ZvciBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4ODA1CisKK1RoZSBmaXggZm9yIENWRS0yMDE0LTM2NjAgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gaW4gc29tZSBjYXNlCit3aGVyZSBlbnRpdHkgc3Vic3RpdHV0aW9uIGlzIHJlcXVpcmVkIGFuZCB0aGUgZW50aXR5IGlzIHVzZWQKK2ZpcnN0IGluIGFub3R0aGVyIGVudGl0eSByZWZlcmVuY2VkIGZyb20gYW4gYXR0cmlidXRlIHZhbHVlCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL3BhcnNlci5jIGIvcGFyc2VyLmMKK2luZGV4IDY3YzlkZmQuLmE4ZDFiNjcgMTAwNjQ0CistLS0gYS9wYXJzZXIuYworKysrIGIvcGFyc2VyLmMKK0BAIC03MjM1LDcgKzcyMzUsOCBAQCB4bWxQYXJzZVJlZmVyZW5jZSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICAgICogZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbCBvbmx5IHByb2Nlc3MgZGF0YSBjb21pbmcgZnJvbQorICAgICAgKiB0aGUgZG9jdW1lbnQgZW50aXR5IGJ5IGRlZmF1bHQuCisgICAgICAqLworLSAgICBpZiAoKGVudC0+Y2hlY2tlZCA9PSAwKSAmJgorKyAgICBpZiAoKChlbnQtPmNoZWNrZWQgPT0gMCkgfHwKKysgICAgICAgICAoKGVudC0+Y2hpbGRyZW4gPT0gTlVMTCkgJiYgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpKSkgJiYKKyAgICAgICAgICgoZW50LT5ldHlwZSAhPSBYTUxfRVhURVJOQUxfR0VORVJBTF9QQVJTRURfRU5USVRZKSB8fAorICAgICAgICAgIChjdHh0LT5vcHRpb25zICYgKFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERWQUxJRCkpKSkgeworIAl1bnNpZ25lZCBsb25nIG9sZG5iZW50ID0gY3R4dC0+bmJlbnRpdGllczsKKy0tIAorY2dpdCB2MC4xMC4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvYW5zaWRlY2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NTJkNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1NhZGx5IGNtYWtlIGlzIGJyb2tlbi4gSWYgaXQgc2VlcyB0aGlzIHJlZmVyZW5jZSBhbmQgYW5zaWRlY2wgaXMgcHJlc2VudCwgaXQgd2lsbCBhZGQgYSAKK2RlcGVuZGVuY3kgdXBvbiBpdCwgZXZlbiBpZiBIQVZFX0FOU0lERUNfSCBpcyBuZXZlciBzZXQuCisKK1RoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGVzZSBsaW5lcywgb3RoZXJ3aXNlIHJlY2lwZXMgbGlrZSBsaWJ6eXBwIGNhbiBoYXZlIGEgCitkZXBlbmRlbmN5IG9uIHRoZSBhbnNpZGVjbC5oIGhlYWRlciB2aWEgY21ha2UuIFRoaXMgY2FuIGxlYWQgdG8gb2RkIHJlc3VsdHMgaWYgdGhlIAoraGVhZGVyIGlzIHJlbW92ZWQgKGNsZWFuIGJpbnV0aWxzKSBhbmQgdGhlbiB0aGUgY29kZSBpcyByZWNvbXBpbGVkLgorCitSUCAyMDEyLzcvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtpdHMgcmVhbGx5IGEgY21ha2UgYnVnXQorCitJbmRleDogbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOC4wLm9yaWcvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCTIwMTItMDctMTAgMTE6NTE6NTIuNDYwNzUwNTczICswMDAwCisrKysgbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4JMjAxMi0wNy0xMCAxMTo1Mjo0MS40MzY3NDkzOTcgKzAwMDAKK0BAIC00MDEsOSArNDAxLDYgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19HTlVDX18KKy0jaWZkZWYgSEFWRV9BTlNJREVDTF9ICistI2luY2x1ZGUgPGFuc2lkZWNsLmg+CistI2VuZGlmCisgCisgLyoqCisgICogQVRUUklCVVRFX1VOVVNFRDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjgwNzliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK2NvbmZpZ3VyZS5hYzogZml4IGNyb3NzIGNvbXBpbGluZyB3YXJuaW5nCisKK1RoZXJlIGlzIGEgd2FybmluZyB3aGlsZSBjcm9zcyBjb21waWxpbmcgd2hpY2ggdHJpZ2dlcmVkIGEKK2ZhaWx1cmUgYnkgZG9fcWFfY29uZmlndXJlCisuLi4KK3xjb25maWd1cmU6MTI2NTI6IGNoZWNraW5nIGZvciBnenJlYWQgaW4gLWx6Cit8Y29uZmlndXJlOjEyNjc3OiBtaXBzLXBva3ktbGludXgtZ2NjICAtbWViIC1tYWJpPTMyIC1taGFyZC1mbG9hdAorIC1ML2xpYiBjb25mdGVzdC5jIC1seiAgID4mNQorfGxkOiB3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoICIvbGliIiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisuLi4KKworV2hpbGUgZG8gdGhlIGxpYiBjaGVja2luZywgZG8gbm90IGFkZCAnLUwke1pfRElSfS9saWInIHRvIExERkxBR1MgY291bGQgZml4IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNSArLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWE5MDYwMC4uMGJhYzhhNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkxLDggKzM5MSw2IEBAIGlmIHRlc3QgIiR3aXRoX3psaWIiID0gIm5vIjsgdGhlbgorICAgICBlY2hvICJEaXNhYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCIKKyBlbHNlCisgICAgIEFDX0NIRUNLX0hFQURFUlMoemxpYi5oLAorLSAgICAgICAgW1NBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKy0JIExERkxBR1M9Ii1MJHtaX0RJUn0vbGliIgorIAlBQ19DSEVDS19MSUIoeiwgZ3pyZWFkLFsKKyAJICAgIEFDX0RFRklORShbSEFWRV9MSUJaXSwgWzFdLCBbSGF2ZSBjb21wcmVzc2lvbiBsaWJyYXJ5XSkKKyAJICAgIFdJVEhfWkxJQj0xCitAQCAtNDA2LDggKzQwNCw3IEBAIGVsc2UKKyAJCWVzYWNdCisgCSAgICBlbHNlCisgCQlaX0xJQlM9Ii1seiIKKy0JICAgIGZpXSkKKy0JIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSJdKQorKwkgICAgZmldKSkKKyBmaQorIAorIEFDX1NVQlNUKFpfQ0ZMQUdTKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLTY0Yml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDcwMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGRlYmlhbjogYnVncy5kZWJpYW4ub3JnLzQzOTg0M10KKworLS0tCisgbGlieG1sLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLS0tIGxpYnhtbDItMi42LjI5Lm9yaWcvbGlieG1sLmgKKysrKyBsaWJ4bWwyLTIuNi4yOS9saWJ4bWwuaAorQEAgLTExLDEwICsxMSwxMyBAQAorIAorICNpZm5kZWYgTk9fTEFSR0VGSUxFX1NPVVJDRQorICNpZm5kZWYgX0xBUkdFRklMRV9TT1VSQ0UKKyAjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisgI2VuZGlmCisrI2lmbmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2VuZGlmCisgI2lmbmRlZiBfRklMRV9PRkZTRVRfQklUUworICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyAjZW5kaWYKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLW00LXVzZS1wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzg0MDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjA0IEBACitBTV9QQVRIX1hNTDIgdXNlcyB4bWwtY29uZmlnIHdoaWNoIHdlIGRpc2FibGUgdGhyb3VnaAorYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MsIHNvIHBvcnQgaXQgdG8gdXNlIHBrZy1jb25maWcgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbGlieG1sLm00IGIvbGlieG1sLm00CitpbmRleCA2OGNkODI0Li41ZmEwYTliIDEwMDY0NAorLS0tIGEvbGlieG1sLm00CisrKysgYi9saWJ4bWwubTQKK0BAIC0xLDE4OCArMSwxMiBAQAorLSMgQ29uZmlndXJlIHBhdGhzIGZvciBMSUJYTUwyCistIyBNaWtlIEhvbW1leSAyMDA0LTA2LTE5CistIyB1c2UgQ1BQRkxBR1MgaW5zdGVhZCBvZiBDRkxBR1MKKy0jIFRvc2hpbyBLdXJhdG9taSAyMDAxLTA0LTIxCistIyBBZGFwdGVkIGZyb206CistIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKy0jIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCistCisgZG5sIEFNX1BBVEhfWE1MMihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCisgZG5sIFRlc3QgZm9yIFhNTCwgYW5kIGRlZmluZSBYTUxfQ1BQRkxBR1MgYW5kIFhNTF9MSUJTCisgZG5sCistQUNfREVGVU4oW0FNX1BBVEhfWE1MMl0sWyAKKy1BQ19BUkdfV0lUSCh4bWwtcHJlZml4LAorLSAgICAgICAgICAgIFsgIC0td2l0aC14bWwtcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIHhtbF9jb25maWdfcHJlZml4PSIiKQorLUFDX0FSR19XSVRIKHhtbC1leGVjLXByZWZpeCwKKy0gICAgICAgICAgICBbICAtLXdpdGgteG1sLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgeG1sX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKy1BQ19BUkdfRU5BQkxFKHhtbHRlc3QsCistICAgICAgICAgICAgICBbICAtLWRpc2FibGUteG1sdGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgTElCWE1MIHByb2dyYW1dLCwKKy0gICAgICAgICAgICAgIGVuYWJsZV94bWx0ZXN0PXllcykKKy0KKy0gIGlmIHRlc3QgeCR4bWxfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCistICAgICB4bWxfY29uZmlnX2FyZ3M9IiR4bWxfY29uZmlnX2FyZ3MiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi94bWwyLWNvbmZpZworLSAgICAgZmkKKy0gIGZpCistICBpZiB0ZXN0IHgkeG1sX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIHhtbF9jb25maWdfYXJncz0iJHhtbF9jb25maWdfYXJncyAtLXByZWZpeD0keG1sX2NvbmZpZ19wcmVmaXgiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX3ByZWZpeC9iaW4veG1sMi1jb25maWcKKy0gICAgIGZpCistICBmaQorLQorLSAgQUNfUEFUSF9QUk9HKFhNTDJfQ09ORklHLCB4bWwyLWNvbmZpZywgbm8pCistICBtaW5feG1sX3ZlcnNpb249aWZlbHNlKFskMV0sICwyLjAuMCxbJDFdKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJ4bWwgLSB2ZXJzaW9uID49ICRtaW5feG1sX3ZlcnNpb24pCistICBub194bWw9IiIKKy0gIGlmIHRlc3QgIiRYTUwyX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICBub194bWw9eWVzCistICBlbHNlCistICAgIFhNTF9DUFBGTEFHUz1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIFhNTF9MSUJTPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLWxpYnNgCistICAgIHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHhtbF9jb25maWdfbWlub3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHhtbF9jb25maWdfbWljcm9fdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIngkZW5hYmxlX3htbHRlc3QiID0gInh5ZXMiIDsgdGhlbgorLSAgICAgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKy0gICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorLSAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICBMSUJTPSIkWE1MX0xJQlMgJExJQlMiCistZG5sCistZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIGxpYnhtbCBpcyBzdWZmaWNpZW50bHkgbmV3LgorLWRubCAoQWxzbyBzYW5pdHkgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHhtbDItY29uZmlnIHRvIHNvbWUgZXh0ZW50KQorLWRubAorLSAgICAgIHJtIC1mIGNvbmYueG1sdGVzdAorLSAgICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistCistaW50IAorLW1haW4oKQorLXsKKy0gIGludCB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uOworLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CistICBjaGFyICp0bXBfdmVyc2lvbjsKKy0KKy0gIHN5c3RlbSgidG91Y2ggY29uZi54bWx0ZXN0Iik7CistCistICAvKiBDYXB0dXJlIHhtbDItY29uZmlnIG91dHB1dCB2aWEgYXV0b2NvbmYvY29uZmlndXJlIHZhcmlhYmxlcyAqLworLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCistICB0bXBfdmVyc2lvbiA9IChjaGFyICopc3RyZHVwKCIkbWluX3htbF92ZXJzaW9uIik7CistICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CistICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmcgZnJvbSB4bWwyLWNvbmZpZ1xuIiwgIiRtaW5feG1sX3ZlcnNpb24iKTsKKy0gICAgIGV4aXQoMSk7CistICAgfQorLSAgIGZyZWUodG1wX3ZlcnNpb24pOworLQorLSAgIC8qIENhcHR1cmUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhZGVyIGZpbGVzICovCistICAgdG1wX3ZlcnNpb24gPSAoY2hhciAqKXN0cmR1cChMSUJYTUxfRE9UVEVEX1ZFUlNJT04pOworLSAgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZ4bWxfbWFqb3JfdmVyc2lvbiwgJnhtbF9taW5vcl92ZXJzaW9uLCAmeG1sX21pY3JvX3ZlcnNpb24pICE9IDMpIHsKKy0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZyBmcm9tIGxpYnhtbCBpbmNsdWRlc1xuIiwgIkxJQlhNTF9ET1RURURfVkVSU0lPTiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistICAgZnJlZSh0bXBfdmVyc2lvbik7CistCistIC8qIENvbXBhcmUgeG1sMi1jb25maWcgb3V0cHV0IHRvIHRoZSBsaWJ4bWwgaGVhZGVycyAqLworLSAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWlub3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWljcm9fdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKy0gICAgeworLSAgICAgIHByaW50ZigiKioqIGxpYnhtbCBoZWFkZXIgZmlsZXMgKHZlcnNpb24gJWQuJWQuJWQpIGRvIG5vdCBtYXRjaFxuIiwKKy0gICAgICAgICB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uKTsKKy0gICAgICBwcmludGYoIioqKiB4bWwyLWNvbmZpZyAodmVyc2lvbiAlZC4lZC4lZClcbiIsCistICAgICAgICAgJHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWlub3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbik7CistICAgICAgcmV0dXJuIDE7CistICAgIH0gCistLyogQ29tcGFyZSB0aGUgaGVhZGVycyB0byB0aGUgbGlicmFyeSB0byBtYWtlIHN1cmUgd2UgbWF0Y2ggKi8KKy0gIC8qIExlc3MgdGhhbiBpZGVhbCAtLSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCByZXR1cm4gdmFsdWUgZmVlZGJhY2ssIAorLSAgICogb25seSBleGl0cyBpZiB0aGVyZSdzIGEgc2VyaW91cyBtaXNtYXRjaCBiZXR3ZWVuIGhlYWRlciBhbmQgbGlicmFyeS4KKy0gICAqLworLSAgICBMSUJYTUxfVEVTVF9WRVJTSU9OOworLQorLSAgICAvKiBUZXN0IHRoYXQgdGhlIGxpYnJhcnkgaXMgZ3JlYXRlciB0aGFuIG91ciBtaW5pbXVtIHZlcnNpb24gKi8KKy0gICAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJgorLSAgICAgICAgKHhtbF9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCistICAgICAgeworLSAgICAgICAgcmV0dXJuIDA7CistICAgICAgIH0KKy0gICAgIGVsc2UKKy0gICAgICB7CistICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIGxpYnhtbCAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCistICAgICAgICAgICAgICAgeG1sX21ham9yX3ZlcnNpb24sIHhtbF9taW5vcl92ZXJzaW9uLCB4bWxfbWljcm9fdmVyc2lvbik7CistICAgICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgbGlieG1sIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKy0gICAgICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworLSAgICAgICAgcHJpbnRmKCIqKiogbGlieG1sIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAueG1sc29mdC5vcmcuXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIHhtbDItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CistICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogb2YgTElCWE1MLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgWE1MMl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiB4bWwyLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CistICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworLSAgICB9CistICByZXR1cm4gMTsKKy19CistXSwsIG5vX3htbD15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorLSAgICAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCistICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICBmaQorLSAgZmkKKytBQ19ERUZVTihbQU1fUEFUSF9YTUwyXSxbCisrICBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyAKKy0gIGlmIHRlc3QgIngkbm9feG1sIiA9IHggOyB0aGVuCistICAgICBBQ19NU0dfUkVTVUxUKHllcyAodmVyc2lvbiAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uLiR4bWxfY29uZmlnX21pbm9yX3ZlcnNpb24uJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbikpCistICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCistICBlbHNlCistICAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgaWYgdGVzdCAiJFhNTDJfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgICAgIGVjaG8gIioqKiBUaGUgeG1sMi1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBMSUJYTUwgY291bGQgbm90IGJlIGZvdW5kIgorLSAgICAgICBlY2hvICIqKiogSWYgbGlieG1sIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKy0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBYTUwyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCistICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8geG1sMi1jb25maWcuIgorLSAgICAgZWxzZQorLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYueG1sdGVzdCA7IHRoZW4KKy0gICAgICAgIDoKKy0gICAgICAgZWxzZQorLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsaWJ4bWwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCistICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJExJQlMgJFhNTF9MSUJTIgorLSAgICAgICAgICBBQ19UUllfTElOSyhbCistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistI2luY2x1ZGUgPHN0ZGlvLmg+CistXSwgICAgICBbIExJQlhNTF9URVNUX1ZFUlNJT047IHJldHVybiAwO10sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKy0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBMSUJYTUwgb3IgZmluZGluZyB0aGUgd3JvbmciCistICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIExJQlhNTC4gSWYgaXQgaXMgbm90IGZpbmRpbmcgTElCWE1MLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKy0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCistICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCistICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKy0gICAgICAgICAgZWNobyAiKioqIgorLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCistICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIgXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKy0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIExJQlhNTCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBMSUJYTUwgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCistICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSB4bWwyLWNvbmZpZyBzY3JpcHQ6ICRYTUwyX0NPTkZJRyIgXSkKKy0gICAgICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgICBmaQorLSAgICAgZmkKKysgIHZlcmRlcD1pZmVsc2UoWyQxXSwgW10sIFtdLCBbPj0gJDFdKQorKyAgUEtHX0NIRUNLX01PRFVMRVMoWE1MLCBbbGlieG1sLTIuMCAkdmVyZGVwXSwgWyQyXSwgWyQzXSkKKyAKKy0gICAgIFhNTF9DUFBGTEFHUz0iIgorLSAgICAgWE1MX0xJQlM9IiIKKy0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistICBmaQorKyAgWE1MX0NQUEZMQUdTPSRYTUxfQ0ZMQUdTCisgICBBQ19TVUJTVChYTUxfQ1BQRkxBR1MpCistICBBQ19TVUJTVChYTUxfTElCUykKKy0gIHJtIC1mIGNvbmYueG1sdGVzdAorIF0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItQ1ZFLTIwMTQtMDE5MS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItQ1ZFLTIwMTQtMDE5MS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwNWFlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNC0wMTkxLWZpeC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDIyIEFwciAyMDE0IDE1OjMwOjU2ICswODAwCitTdWJqZWN0OiBEbyBub3QgZmV0Y2ggZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzCisKK1VubGVzcyBleHBsaWNpdGVseSBhc2tlZCBmb3Igd2hlbiB2YWxpZGF0aW5nIG9yIHJlcGxhY2luZyBlbnRpdGllcword2l0aCB0aGVpciB2YWx1ZS4gUHJvYmxlbSBwb2ludGVkIG91dCBieSBEYW5pZWwgQmVycmFuZ2UgPGJlcnJhbmdlQHJlZGhhdC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1JlZmVyZW5jZTogaHR0cHM6Ly9hY2Nlc3MucmVkaGF0LmNvbS9zZWN1cml0eS9jdmUvQ1ZFLTIwMTQtMDE5MQorCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorLS0tCitkaWZmIC1OYXVyIGxpYnhtbDItMi45LjEtb3JpZy9wYXJzZXIuYyBsaWJ4bWwyLTIuOS4xL3BhcnNlci5jCistLS0gbGlieG1sMi0yLjkuMS1vcmlnL3BhcnNlci5jCTIwMTMtMDQtMTYgMTU6Mzk6MTguMDAwMDAwMDAwICswMjAwCisrKysgbGlieG1sMi0yLjkuMS9wYXJzZXIuYwkyMDE0LTA1LTA3IDEzOjM1OjQ2Ljg4MzY4Nzk0NiArMDIwMAorQEAgLTI1OTUsNiArMjU5NSwyMCBAQAorIAkJICAgIHhtbENoYXJFbmNvZGluZyBlbmM7CisgCisgCQkgICAgLyoKKysJCSAgICAgKiBOb3RlOiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgd2lsbCBub3QgYmUgbG9hZGVkLCBpdCBpcworKwkJICAgICAqIG5vdCByZXF1aXJlZCBmb3IgYSBub24tdmFsaWRhdGluZyBwYXJzZXIsIHVubGVzcyB0aGUKKysJCSAgICAgKiBvcHRpb24gb2YgdmFsaWRhdGluZywgb3Igc3Vic3RpdHV0aW5nIGVudGl0aWVzIHdlcmUKKysJCSAgICAgKiBnaXZlbi4gRG9pbmcgc28gaXMgZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbAorKwkJICAgICAqIG9ubHkgcHJvY2VzcyBkYXRhIGNvbWluZyBmcm9tIHRoZSBkb2N1bWVudCBlbnRpdHkgYnkKKysJCSAgICAgKiBkZWZhdWx0LgorKwkJICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKChlbnRpdHktPmV0eXBlID09IFhNTF9FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRZKSAmJgorKwkJICAgICAgICAoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpID09IDApICYmCisrCQkJKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0RURFZBTElEKSA9PSAwKSAmJgorKwkJCShjdHh0LT52YWxpZGF0ZSA9PSAwKSkKKysJCQlyZXR1cm47CisrCisrCQkgICAgLyoKKyAJCSAgICAgKiBoYW5kbGUgdGhlIGV4dHJhIHNwYWNlcyBhZGRlZCBiZWZvcmUgYW5kIGFmdGVyCisgCQkgICAgICogYy5mLiBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI2FzLVBFCisgCQkgICAgICogdGhpcyBpcyBkb25lIGluZGVwZW5kZW50bHkuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNjODMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaApAQCAtMCwwICsxLDMwIEBACitBbGxvdyB1cyB0byBwYXNzIGluIFBZVEhPTl9TSVRFX1BBQ0tBR0VTCisKK1RoZSBweXRob24gYmluYXJ5IHVzZWQgd2hlbiBidWlsZGluZyBmb3IgbmF0aXZlc2RrIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUKK2NvcnJlY3QgcGF0aCBoZXJlIHNvIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGl0IG91cnNlbHZlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlIHRvIDIuOS4yCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04MTMsNyArODEzLDggQEAgZG5sCisgCisgUFlUSE9OX1ZFUlNJT049CisgUFlUSE9OX0lOQ0xVREVTPQorLVBZVEhPTl9TSVRFX1BBQ0tBR0VTPQorKyMgQWxsb3cgdGhpcyB0byBiZSBzZXQgZXh0ZXJuYWxseQorKyNQWVRIT05fU0lURV9QQUNLQUdFUz0KKyBQWVRIT05fVEVTVFM9CisgcHl0aG9uZGlyPQorIGlmIHRlc3QgIiR3aXRoX3B5dGhvbiIgIT0gIm5vIiA7IHRoZW4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNkMGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtayBydW50ZXN0cwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW50ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW50ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5N2FiMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bnRlc3QucGF0Y2gKQEAgLTAsMCArMSw4MjAgQEAKK0FkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KK1ByaW50IGEgc3RhbmRhcmQgcmVzdWx0IGxpbmUgZm9yIGVhY2ggdGVzdC4KKworU2lnbmVkLW9mZi1ieTogTWloYWVsYSBTZW5kcmVhIDxtaWhhZWxhLnNlbmRyZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtdU5yIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAxNDo1MTo0Mi42MzMzODY0NzcgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDQtMTkgMTQ6NDc6NTEuNTQ0NzIwNTY4ICswMjAwCitAQCAtMjAyLDEwICsyMDIsMTkgQEAKKyAjdGVzdE9PTV9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCisgI3Rlc3RPT01fTERBREQ9ICQoTERBRERTKQorIAorK2luc3RhbGwtcHRlc3Q6CisrCUAoaWYgWyAtZCAubGlicyBdIDsgdGhlbiBjZCAubGliczsgZmk7IFwKKysJaW5zdGFsbCAkKG5vaW5zdF9QUk9HUkFNUykgJChERVNURElSKSkKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3QgJChERVNURElSKQorKwljcCAtciAkKHNyY2RpcikvcmVzdWx0ICQoREVTVERJUikKKysJY3AgLXIgJChzcmNkaXIpL3B5dGhvbiAkKERFU1RESVIpCisrCWNwIE1ha2VmaWxlICQoREVTVERJUikKKysJc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQoREVTVERJUikvTWFrZWZpbGUKKysKKyBydW50ZXN0czoKKyAJWyAtZCB0ZXN0ICAgXSB8fCAkKExOX1MpICQoc3JjZGlyKS90ZXN0ICAgLgorIAlbIC1kIHJlc3VsdCBdIHx8ICQoTE5fUykgJChzcmNkaXIpL3Jlc3VsdCAuCistCSQoQ0hFQ0tFUikgLi9ydW50ZXN0JChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0cmVjdXJzZSQoRVhFRVhUKSAmJiQoQ0hFQ0tFUikgLi90ZXN0YXBpJChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0Y2hhciQoRVhFRVhUKSYmICQoQ0hFQ0tFUikgLi90ZXN0ZGljdCQoRVhFRVhUKSAmJiAkKENIRUNLRVIpIC4vcnVueG1sY29uZiQoRVhFRVhUKQorKwkuL3J1bnRlc3QkKEVYRUVYVCkgOyAuL3Rlc3RyZWN1cnNlJChFWEVFWFQpIDsgLi90ZXN0YXBpJChFWEVFWFQpIDsgLi90ZXN0Y2hhciQoRVhFRVhUKSA7IC4vdGVzdGRpY3QkKEVYRUVYVCkgOyAuL3J1bnhtbGNvbmYkKEVYRUVYVCkKKyAJQChpZiBbICIkKFBZVEhPTl9TVUJESVIpIiAhPSAiIiBdIDsgdGhlbiBjZCBweXRob24gOyBcCisgCSAgICAkKE1BS0UpIHRlc3RzIDsgZmkpCisgCitkaWZmIC11TnIgYS9ydW5zdWl0ZS5jIGIvcnVuc3VpdGUuYworLS0tIGEvcnVuc3VpdGUuYwkyMDEzLTA0LTEyIDE2OjE3OjExLjQ2MjgyMzIzOCArMDIwMAorKysrIGIvcnVuc3VpdGUuYwkyMDEzLTA0LTE3IDE0OjA3OjI0LjM1MjY5MzIxMSArMDIwMAorQEAgLTExNjIsNiArMTE2Miw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnN1aXRlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgI2Vsc2UgLyogIVNDSEVNQVMgKi8KK2RpZmYgLXVOciBhL3J1bnRlc3QuYyBiL3J1bnRlc3QuYworLS0tIGEvcnVudGVzdC5jCTIwMTMtMDQtMTYgMTM6MTk6MTUuMDg3OTk3MjkwICswMjAwCisrKysgYi9ydW50ZXN0LmMJMjAxMy0wNC0xNyAxNDowODoyOS41Mjk5NDk2NTUgKzAyMDAKK0BAIC00Mzg2LDYgKzQzODYsNyBAQAorIAkgICAgZXJyKys7CisgCX0KKyAgICAgfQorKyAgICBwcmludGYoIiVzOiAlc1xuIiwgKGVyciA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIiwgdHN0LT5kZXNjKTsKKyAgICAgcmV0dXJuKGVycik7CisgfQorIAorQEAgLTQ0NTUsNiArNDQ1Niw3IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiBydW50ZXN0XG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS9ydW54bWxjb25mLmMgYi9ydW54bWxjb25mLmMKKy0tLSBhL3J1bnhtbGNvbmYuYwkyMDEzLTA0LTE2IDEyOjUzOjQ5LjkwMDk4Mjk5MCArMDIwMAorKysrIGIvcnVueG1sY29uZi5jCTIwMTMtMDQtMTcgMTQ6MDk6MjEuMTExNzc4MTA0ICswMjAwCitAQCAtNTk1LDYgKzU5NSw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnhtbGNvbmZcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS90ZXN0YXBpLmMgYi90ZXN0YXBpLmMKKy0tLSBhL3Rlc3RhcGkuYwkyMDEzLTA0LTEyIDE2OjE2OjU3Ljc2MzQxNzY1OSArMDIwMAorKysrIGIvdGVzdGFwaS5jCTIwMTMtMDQtMTcgMTQ6MTA6MjguODc2OTI0ODgxICswMjAwCitAQCAtMTI0NSw0OSArMTI0NSw5MSBAQAorIHRlc3RsaWJ4bWwyKHZvaWQpCisgeworICAgICBpbnQgdGVzdF9yZXQgPSAwOworKyAgICBpbnQgcmV0ID0gMDsKKyAKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9IVE1McGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfSFRNTHRyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9TQVgyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfYzE0bigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2NhdGFsb2coKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9jaHZhbGlkKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZGVidWdYTUwoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9kaWN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZW5jb2RpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9lbnRpdGllcygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2hhc2goKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9saXN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfbmFub2Z0cCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X25hbm9odHRwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGF0dGVybigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3JlbGF4bmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9zY2hlbWFzSW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3Rfc2NoZW1hdHJvbigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3RyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF91cmkoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF92YWxpZCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hpbmNsdWRlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sSU8oKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxhdXRvbWF0YSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbGVycm9yKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sbW9kdWxlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVhZGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVnZXhwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sc2F2ZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHNjaGVtYXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzdHJpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWx1bmljb2RlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sd3JpdGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeHBhdGgoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94cGF0aEludGVybmFscygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hwb2ludGVyKCk7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X0hUTUxwYXJzZXIoKSk7CisrICAgIHByaW50ZigiJXM6IEhUTUxwYXJzZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9IVE1MdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogSFRNTHRyZWVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9TQVgyKCkpOworKyAgICBwcmludGYoIiVzOiBTQVgyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfYzE0bigpKTsKKysgICAgcHJpbnRmKCIlczogYzE0blxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2NhdGFsb2coKSk7CisrICAgIHByaW50ZigiJXM6IGNhdGFsb2dcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9jaHZhbGlkKCkpOworKyAgICBwcmludGYoIiVzOiBjaHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGVidWdYTUwoKSk7CisrICAgIHByaW50ZigiJXM6IGRlYnVnWE1MXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGljdCgpKTsKKysgICAgcHJpbnRmKCIlczogZGljdFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VuY29kaW5nKCkpOworKyAgICBwcmludGYoIiVzOiBlbmNvZGluZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VudGl0aWVzKCkpOworKyAgICBwcmludGYoIiVzOiBlbnRpdGllc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2hhc2goKSk7CisrICAgIHByaW50ZigiJXM6IGhhc2hcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9saXN0KCkpOworKyAgICBwcmludGYoIiVzOiBsaXN0XG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfbmFub2Z0cCgpKTsKKysgICAgcHJpbnRmKCIlczogbmFub2Z0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X25hbm9odHRwKCkpOworKyAgICBwcmludGYoIiVzOiBuYW5vaHR0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3BhcnNlcigpKTsKKysgICAgcHJpbnRmKCIlczogcGFyc2VyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCkpOworKyAgICBwcmludGYoIiVzOiBwYXJzZXJJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9wYXR0ZXJuKCkpOworKyAgICBwcmludGYoIiVzOiBwYXR0ZXJuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcmVsYXhuZygpKTsKKysgICAgcHJpbnRmKCIlczogcmVsYXhuZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3NjaGVtYXNJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHNjaGVtYXNJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9zY2hlbWF0cm9uKCkpOworKyAgICBwcmludGYoIiVzOiBzY2hlbWF0cm9uXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogdHJlZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3VyaSgpKTsKKysgICAgcHJpbnRmKCIlczogdXJpXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdmFsaWQoKSk7CisrICAgIHByaW50ZigiJXM6IHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeGluY2x1ZGUoKSk7CisrICAgIHByaW50ZigiJXM6IHhpbmNsdWRlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sSU8oKSk7CisrICAgIHByaW50ZigiJXM6IHhtbElPXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sYXV0b21hdGEoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGF1dG9tYXRhXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sZXJyb3IoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGVycm9yXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sbW9kdWxlKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxtb2R1bGVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxyZWFkZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHJlYWRlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHJlZ2V4cCgpKTsKKysgICAgcHJpbnRmKCIlczogeG1scmVnZXhwXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sc2F2ZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc2F2ZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHNjaGVtYXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXN0eXBlc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHN0cmluZygpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc3RyaW5nXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sdW5pY29kZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sdW5pY29kZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHdyaXRlcigpKTsKKysgICAgcHJpbnRmKCIlczogeG1sd3JpdGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGgoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGhJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoSW50ZXJuYWxzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBvaW50ZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhwb2ludGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAKKyAgICAgcHJpbnRmKCJUb3RhbDogJWQgZnVuY3Rpb25zLCAlZCB0ZXN0cywgJWQgZXJyb3JzXG4iLAorICAgICAgICAgICAgZnVuY3Rpb25fdGVzdHMsIGNhbGxfdGVzdHMsIHRlc3RfcmV0KTsKKysKKysgICAgcHJpbnRmKCIlczogdGVzdGFwaVxuXG4iLCAodGVzdF9yZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4odGVzdF9yZXQpOworIH0KKyAKK2RpZmYgLXVOciBhL3Rlc3RjaGFyLmMgYi90ZXN0Y2hhci5jCistLS0gYS90ZXN0Y2hhci5jCTIwMTMtMDQtMTcgMTA6NTA6MzAuMjUwMTQ3NDE4ICswMjAwCisrKysgYi90ZXN0Y2hhci5jCTIwMTMtMDQtMTggMTY6MTE6MjguNDU1NzMzODAwICswMjAwCitAQCAtMjMsNyArMjMsNyBAQAorIGNoYXIgZG9jdW1lbnQxWzEwMF0gPSAiPGRvYz5YWFhYPC9kb2M+IjsKKyBjaGFyIGRvY3VtZW50MlsxMDBdID0gIjxkb2MgZm9vPSdYWFhYJy8+IjsKKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisrc3RhdGljIGludCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgIGNoYXIgKmRhdGEsIGludCBmb3JiaWQxLCBpbnQgZm9yYmlkMikgeworICAgICBpbnQgaTsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC0zNywzMyArMzcsNDEgQEAKKyAJcmVzID0geG1sUmVhZE1lbW9yeShkb2N1bWVudCwgbGVuLCAidGVzdCIsIE5VTEwsIDApOworIAorIAlpZiAoKGkgPT0gZm9yYmlkMSkgfHwgKGkgPT0gZm9yYmlkMikpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWDogJWNcbiIsCisgCQkgICAgICAgIGksIGkpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCWVsc2UgaWYgKChpID09ICc8JykgfHwgKGkgPT0gJyYnKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbGxlZ2FsIGNoYXIgJWMgZm9yIEJ5dGUgMHglMDJYXG4iLCBpLCBpKTsKKysJCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAJZWxzZSBpZiAoKChpIDwgMHgyMCkgfHwgKGkgPj0gMHg4MCkpICYmCisgCSAgICAoaSAhPSAweDkpICYmIChpICE9IDB4QSkgJiYgKGkgIT0gMHhEKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpICYmIChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgJiYgKHJlcyAhPSBOVUxMKSkgeworIAkgICAgICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAllbHNlIGlmIChyZXMgPT0gTlVMTCkgeworIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIHZhbGlkIGNoYXIgZm9yIEJ5dGUgMHglMDJYIDogJWNcbiIsIGksIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKytzdGF0aWMgaW50IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCAgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgajsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC04MCwxMCArODgsMTIgQEAKKyAKKyAJLyogaWYgZmlyc3QgYml0IG9mIGZpcnN0IGNoYXIgaXMgc2V0LCB0aGVuIHNlY29uZCBiaXQgbXVzdCB0b28gKi8KKyAJaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTkxLDEwICsxMDEsMTIgQEAKKyAJICogYml0cyBtdXN0IGJlIDEwCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaik7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC0xMDIsMTAgKzExNCwxMiBAQAorIAkgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICovCisgCWVsc2UgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHgxRSkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTExMywxMCArMTI3LDEyIEBACisgCSAqIGF0IGxlYXN0IDMgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgMiAhCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4RTApID09IDB4RTApIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweDAwXG4iLAorIAkJCWksIGopOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtMTI1LDExICsxNDEsMTMgQEAKKyAJZWxzZSBpZiAoKGxhc3RFcnJvciAhPSAwKSB8fCAocmVzID09IE5VTEwpKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgZG9jdW1lbnQgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsIGksIGopOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCisgLyoqCitAQCAtMTQxLDkgKzE1OSwxMCBAQAorICAqIENEQVRBIGluIHRleHQgb3IgaW4gYXR0cmlidXRlIHZhbHVlcy4KKyAgKi8KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZXModm9pZCkgeworK3N0YXRpYyBpbnQgdGVzdERvY3VtZW50UmFuZ2VzKHZvaWQpIHsKKyAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworICAgICBjaGFyICpkYXRhOworKyAgICBpbnQgdGVzdF9yZXQgPSAwOworIAorICAgICAvKgorICAgICAgKiBTZXQgdXAgYSBwYXJzaW5nIGNvbnRleHQgdXNpbmcgdGhlIGZpcnN0IGRvY3VtZW50IGFzCitAQCAtMTUyLDcgKzE3MSw3IEBACisgICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgIGlmIChjdHh0ID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnNlciBjb250ZXh0XG4iKTsKKy0JcmV0dXJuOworKwlyZXR1cm4oMSk7CisgICAgIH0KKyAKKyAgICAgcHJpbnRmKCJ0ZXN0aW5nIDEgYnl0ZSBjaGFyIGluIGRvY3VtZW50OiAxIik7CitAQCAtMTYzLDcgKzE4Miw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIC0xLCAtMSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMTcyLDcgKzE5MSw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBlbmQgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyAzLCAtMSwgLTEpOworIAorICAgICBwcmludGYoIiAzIik7CitAQCAtMTgzLDcgKzIwMiw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKK0BAIC0xOTIsNyArMjExLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAxIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDMsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgZG9uZVxuIik7CisgCitAQCAtMjA0LDcgKzIyMyw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMiBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworICAgICBwcmludGYoIiAyIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworQEAgLTIxMyw3ICsyMzIsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDIgYnl0ZSBpbmplY3Rpb24gYXQgZW5kIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgMik7CisgCisgICAgIHByaW50ZigiIDMiKTsKK0BAIC0yMjQsNyArMjQzLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGJlZ2lubmluZyBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisgICAgIHByaW50ZigiIDQiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMjMzLDE0ICsyNTIsMTUgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDIpOworICAgICBwcmludGYoIiBkb25lXG4iKTsKKyAKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI1NSwxOSArMjc1LDI1IEBACisgICAgICAgICBjID0geG1sQ3VycmVudENoYXIoY3R4dCwgJmxlbik7CisgCWlmICgoaSA9PSAwKSB8fCAoaSA+PSAweDgwKSkgeworIAkgICAgLyogd2UgbXVzdCBzZWUgYW4gZXJyb3IgdGhlcmUgKi8KKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQkJcmV0dXJuKDEpOworKwkJfQorIAl9IGVsc2UgaWYgKGkgPT0gMHhEKSB7CistCSAgICBpZiAoKGMgIT0gMHhBKSB8fCAobGVuICE9IDEpKQorKwkgICAgaWYgKChjICE9IDB4QSkgfHwgKGxlbiAhPSAxKSkgeworIAkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY29udmVydCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0gZWxzZSBpZiAoKGMgIT0gaSkgfHwgKGxlbiAhPSAxKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CisgICAgIGludCBpLCBqOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI4NCwxMCArMzEwLDEyIEBACisgCisgCSAgICAvKiBpZiBmaXJzdCBiaXQgb2YgZmlyc3QgY2hhciBpcyBzZXQsIHRoZW4gc2Vjb25kIGJpdCBtdXN0IHRvbyAqLworIAkgICAgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLAorIAkJICAgICAgICAgICAgaSwgaik7CisrCQkJcmV0dXJuKDEpOworKwkJCX0KKyAJICAgIH0KKyAKKyAJICAgIC8qCitAQCAtMjk1LDEwICszMjMsMTIgQEAKKyAJICAgICAqIGJpdHMgbXVzdCBiZSAxMAorIAkgICAgICovCisgCSAgICBlbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYOiAlZFxuIiwKKyAJCSAgICAgICAgICAgIGksIGosIGMpOworKwkJCXJldHVybigxKTsKKysJCQl9CisgCSAgICB9CisgCisgCSAgICAvKgorQEAgLTMwNiwxMCArMzM2LDEyIEBACisgCSAgICAgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweDgwKSAmJiAoKGkgJiAweDFFKSA9PSAwKSkgeworLQkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogJWRcbiIsCisgCQkgICAgICAgICAgICBpLCBqLCBjKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorIAkgICAgLyoKK0BAIC0zMTcsMTAgKzM0OSwxMiBAQAorIAkgICAgICogYXQgbGVhc3QgMyBieXRlcywgYnV0IHdlIGdpdmUgb25seSAyICEKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweEUwKSA9PSAweEUwKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4MDBcbiIsCisgCQkgICAgICAgICAgICBpLCBqKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorICAgICAgICAgICAgIC8qCitAQCAtMzI5LDYgKzM2Myw3IEBACisgCSAgICBlbHNlIGlmICgobGFzdEVycm9yICE9IDApIHx8IChsZW4gIT0gMikpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwgaSwgaik7CisrCQlyZXR1cm4oMSk7CisgCSAgICB9CisgCisgICAgICAgICAgICAgLyoKK0BAIC0zMzgsMTIgKzM3MywxNCBAQAorIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogZXhwZWN0ICVkIGdvdCAlZFxuIiwKKyAJICAgICAgICAgICAgICAgIGksIGosICgoaiAmIDB4M0YpICsgKChpICYgMHgxRikgPDwgNikpLCBjKTsKKysJCXJldHVybigxKTsKKyAJICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGksIGosIGssIEs7CisgICAgIGludCBsZW4sIGM7CisgICAgIHVuc2lnbmVkIGNoYXIgbG93c1s2XSA9IHswLCAweDgwLCAweDgxLCAweEMxLCAweEZGLCAweEJGfTsKK0BAIC0zNjgsMjAgKzQwNSwyNCBAQAorIAkgKiBhdCBsZWFzdCA0IGJ5dGVzLCBidXQgd2UgZ2l2ZSBvbmx5IDMgIQorIAkgKi8KKyAJaWYgKChpICYgMHhGMCkgPT0gMHhGMCkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKKyAJICogVGhlIHNlY29uZCBhbmQgdGhlIHRoaXJkIGJ5dGVzIG11c3Qgc3RhcnQgd2l0aCAxMAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTM5MCwxMCArNDMxLDEyIEBACisgCSAqIHRoZSA2dGggYnl0ZSBvZiBkYXRhWzFdIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweEYpID09IDApICYmICgoaiAmIDB4MjApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEspOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQwMSwxMCArNDQ0LDEyIEBACisgCSAqLworIAllbHNlIGlmICgoKHZhbHVlID4gMHhEN0ZGKSAmJiAodmFsdWUgPDB4RTAwMCkpIHx8CisgCSAgICAgICAgICgodmFsdWUgPiAweEZGRkQpICYmICh2YWx1ZSA8MHgxMDAwMCkpKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciAweCUwNFggZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCXZhbHVlLCBpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTQxNCw2ICs0NTksNyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJICAgIGksIGosIEspOworKwkJcmV0dXJuKDEpOworIAl9CisgCisgCS8qCitAQCAtNDIzLDEzICs0NjksMTUgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLAorICAgICAiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYOiBleHBlY3QgJWQgZ290ICVkXG4iLAorIAkJaSwgaiwgZGF0YVsyXSwgdmFsdWUsIGMpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgaiwgaywgSywgbCwgTDsKKyAgICAgaW50IGxlbiwgYzsKKyAgICAgdW5zaWduZWQgY2hhciBsb3dzWzZdID0gezAsIDB4ODAsIDB4ODEsIDB4QzEsIDB4RkYsIDB4QkZ9OworQEAgLTQ1OCwxMCArNTA2LDEyIEBACisgCSAqIGF0IGxlYXN0IDUgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgNCAhCisgCSAqLworIAlpZiAoKGkgJiAweEY4KSA9PSAweEY4KSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKK0BAIC00NjksMTAgKzUxOSwxMiBAQAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkgfHwKKyAJICAgICAgICAgKChMICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSywgTCk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC00ODEsMTAgKzUzMywxMiBAQAorIAkgKiB0aGUgNiBvciA1dGggYnl0ZSBvZiBqIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweDcpID09IDApICYmICgoaiAmIDB4MzApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQ5MywxMCArNTQ3LDEyIEBACisgCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8MHhFMDAwKSkgfHwKKyAJICAgICAgICAgKCh2YWx1ZSA+IDB4RkZGRCkgJiYgKHZhbHVlIDwweDEwMDAwKSkgfHwKKyAJCSAodmFsdWUgPiAweDEwRkZGRikpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgMHglMDRYIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJdmFsdWUsIGksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtNTA2LDYgKzU2Miw3IEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkgICAgaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAKKyAJLyoKK0BAIC01MTUsMTEgKzU3MiwxMyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlg6IGV4cGVjdCAlZCBnb3QgJWRcbiIsCisgCQlpLCBqLCBkYXRhWzJdLCB2YWx1ZSwgYyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAgICAgfQorICAgICB9CisgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorIC8qKgorQEAgLTUzMCwxMSArNTg5LDEyIEBACisgICogY292ZXIgdGhlIGZ1bGwgcmFuZ2Ugb2YgVVRGLTggY2hhcnMgYWNjZXB0ZWQgYnkgWE1MLTEuMAorICAqLworIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKyAgICAgY2hhciBkYXRhWzVdOworICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGJ1ZjsKKyAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CisrICAgIGludCB0ZXN0X3JldCA9IDA7CisgCisgICAgIG1lbXNldChkYXRhLCAwLCA1KTsKKyAKK0BAIC01NDUsMTcgKzYwNSwxOSBAQAorICAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwYXJzZXIgY29udGV4dFxuIik7CistCXJldHVybjsKKysJcmV0dXJuKDEpOworICAgICB9CisgICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKGRhdGEsIHNpemVvZihkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CisgICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgYnVmZmVyXG4iKTsKKysgICAgICAgIHRlc3RfcmV0ID0gMTsKKyAJZ290byBlcnJvcjsKKyAgICAgfQorICAgICBpbnB1dCA9IHhtbE5ld0lucHV0U3RyZWFtKGN0eHQpOworICAgICBpZiAoaW5wdXQgPT0gTlVMTCkgeworICAgICAgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGJ1Zik7CisrICAgICAgICB0ZXN0X3JldCA9IDE7CisgCWdvdG8gZXJyb3I7CisgICAgIH0KKyAgICAgaW5wdXQtPmZpbGVuYW1lID0gTlVMTDsKK0BAIC01NjcsMjUgKzYyOSwyOCBAQAorIAorICAgICBwcmludGYoInRlc3RpbmcgY2hhciByYW5nZTogMSIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGUxKGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTEoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CistICAgIHRlc3RDaGFyUmFuZ2VCeXRlMihjdHh0LCBkYXRhKTsKKysgICAgdGVzdF9yZXQgKz0gdGVzdENoYXJSYW5nZUJ5dGUyKGN0eHQsIGRhdGEpOworICAgICBwcmludGYoIiAzIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworLSAgICB0ZXN0Q2hhclJhbmdlQnl0ZTMoY3R4dCwgZGF0YSk7CisrICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMyhjdHh0LCBkYXRhKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGU0KGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTQoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIGRvbmVcbiIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKyAKKyBlcnJvcjoKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorIGludCBtYWluKHZvaWQpIHsKKyAKKysgICAgaW50IHJldCA9IDA7CisrCisgICAgIC8qCisgICAgICAqIHRoaXMgaW5pdGlhbGl6ZSB0aGUgbGlicmFyeSBhbmQgY2hlY2sgcG90ZW50aWFsIEFCSSBtaXNtYXRjaGVzCisgICAgICAqIGJldHdlZW4gdGhlIHZlcnNpb24gaXQgd2FzIGNvbXBpbGVkIGZvciBhbmQgdGhlIGFjdHVhbCBzaGFyZWQKK0BAIC02MDIsOCArNjY3LDkgQEAKKyAgICAgLyoKKyAgICAgICogUnVuIHRoZSB0ZXN0cworICAgICAgKi8KKy0gICAgdGVzdENoYXJSYW5nZXMoKTsKKy0gICAgdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHJldCArPSB0ZXN0Q2hhclJhbmdlcygpOworKyAgICByZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHByaW50ZigiJXM6IHRlc3RjaGFyXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworIAorICAgICAvKgorICAgICAgKiBDbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgWE1MIGxpYnJhcnkuCitkaWZmIC11TnIgYS90ZXN0ZGljdC5jIGIvdGVzdGRpY3QuYworLS0tIGEvdGVzdGRpY3QuYwkyMDEzLTA0LTE2IDE1OjA4OjQyLjk3MTE3NzE5MyArMDIwMAorKysrIGIvdGVzdGRpY3QuYwkyMDEzLTA0LTE4IDE1OjU5OjAwLjY5OTQ4MjQzOSArMDIwMAorQEAgLTQ0MCw1ICs0NDAsNiBAQAorICAgICBjbGVhbl9zdHJpbmdzKCk7CisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworKyAgICBwcmludGYoIiVzOiB0ZXN0ZGljdFxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdGxpbWl0cy5jIGIvdGVzdGxpbWl0cy5jCistLS0gYS90ZXN0bGltaXRzLmMJMjAxMy0wNC0xMiAxNjoxNjozNi4xODAzNTQxNzcgKzAyMDAKKysrKyBiL3Rlc3RsaW1pdHMuYwkyMDEzLTA0LTE3IDE0OjAzOjE3LjIwMzA5Mjk4NyArMDIwMAorQEAgLTE2MzAsNSArMTYzMCw2IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiB0ZXN0bGltaXRzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdHJlY3Vyc2UuYyBiL3Rlc3RyZWN1cnNlLmMKKy0tLSBhL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNiAxMzoxOTo0OS4zNjY1MzYyOTUgKzAyMDAKKysrKyBiL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNyAxNDowNjoyNy4zNjcwOTE2MjIgKzAyMDAKK0BAIC04OTIsNiArODkyLDcgQEAKKyAJICAgIGVycisrOworIAl9CisgICAgIH0KKysgICAgcHJpbnRmKCIlczogJXNcbiIsIChlcnIgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIsIHRzdC0+ZGVzYyk7CisgICAgIHJldHVybihlcnIpOworIH0KKyAKK0BAIC05NjEsNSArOTYyLDYgQEAKKyAgICAgeG1sQ2xlYW51cFBhcnNlcigpOworICAgICB4bWxNZW1vcnlEdW1wKCk7CisgCisrICAgIHByaW50ZigiJXM6IHRlc3RyZWN1cnNlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyXzIuOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWEzOTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGxpYnhtbDIuaW5jCisKK1NSQ19VUkkgKz0gImh0dHA6Ly93d3cudzMub3JnL1hNTC9UZXN0L3htbHRzMjAwODA4MjcudGFyLmd6O25hbWU9dGVzdHRhciBcCisgICAgICAgICAgICBmaWxlOi8vNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVtsaWJ0YXIubWQ1c3VtXSA9ICI5ZTZhOWFjYTlkMTU1NzM3ODY4YjNkYzVmZDgyZjc4OCIKK1NSQ19VUklbbGlidGFyLnNoYTI1NnN1bV0gPSAiNTE3OGMzMGIxNTFkMDQ0YWVmYjFiMDhiZjU0YzMwMDNhMGFjNTVjNTljODY2NzYzOTk3NTI5ZDYwNzcwZDViYyIKK1NSQ19VUklbdGVzdHRhci5tZDVzdW1dID0gImFlM2QxZWJlMDAwYTM5NzJhZmExMDRjYTdmMGUxYjRhIgorU1JDX1VSSVt0ZXN0dGFyLnNoYTI1NnN1bV0gPSAiOTYxNTE2ODVjZWM5OTdlMWY5ZjMzODdlMzYyNmQ2MWU2Mjg0ZDRkNmU2NmUwZTQ0MGMyMDkyODZjMDNlOWNjNyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDQzNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTkgQEAKK0RFU0NSSVBUSU9OID0gIlNESyB0eXBlIHRhcmdldCBmb3IgYnVpbGRpbmcgYSBzdGFuZGFsb25lIHRhcmJhbGwgY29udGFpbmluZyBweXRob24sIGNocnBhdGgsIG1ha2UsIGdpdCBhbmQgdGFyLiBUaGUgXAorICAgICAgICAgICAgICAgdGFyYmFsbCBjYW4gYmUgdXNlZCB0byBydW4gYml0YmFrZSBidWlsZHMgb24gc3lzdGVtcyB3aGljaCBkb24ndCBtZWV0IHRoZSB1c3VhbCB2ZXJzaW9uIHJlcXVpcmVtZW50cy4iCitTVU1NQVJZID0gIlN0YW5kYWxvbmUgdGFyYmFsbCBmb3IgcnVubmluZyBidWlsZHMgb24gc3lzdGVtcyB3aXRoIGluYWRlcXVhdGUgc29mdHdhcmUiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAiXAorICAgIG5hdGl2ZXNkay1weXRob24tY29yZSBcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLW1pc2MgXAorICAgIG5hdGl2ZXNkay1weXRob24tZ2l0IFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLXBleHBlY3QgXAorICAgIG5hdGl2ZXNkay1uY3Vyc2VzLXRlcm1pbmZvLWJhc2UgXAorICAgIG5hdGl2ZXNkay1jaHJwYXRoIFwKKyAgICBuYXRpdmVzZGstdGFyIFwKKyAgICBuYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15IFwKKyAgICBuYXRpdmVzZGstZ2l0IFwKKyAgICBuYXRpdmVzZGstZ2l0LXBlcmx0b29scyBcCisgICAgbmF0aXZlc2RrLXBpZ3ogXAorICAgIG5hdGl2ZXNkay1tYWtlIFwKKyAgICBuYXRpdmVzZGstd2dldCBcCisgICAgbmF0aXZlc2RrLWNhLWNlcnRpZmljYXRlcyBcCisgICAgIgorCitTREtfUEFDS0FHRV9BUkNIUyA9KyAiYnVpbGR0b29scy1kdW1teS0ke1NES1BLR1NVRkZJWH0iCisKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSR7RElTVFJPX1ZFUlNJT059IgorCitTREtfVElUTEUgPSAiQnVpbGQgdG9vbHMiCisKK1JERVBFTkRTID0gIiR7VE9PTENIQUlOX0hPU1RfVEFTS30iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitpbmhlcml0IG1ldGEKK2luaGVyaXQgcG9wdWxhdGVfc2RrCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCisKK2NyZWF0ZV9zZGtfZmlsZXNfYXBwZW5kICgpIHsKKwlybSAtZiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctKgorCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0qCisJcm0gLWYgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tKgorCisJIyBHZW5lcmF0ZSBuZXcgKG1pbmkpIHNkay1lbnZpcm9ubWVudC1zZXR1cCBmaWxlCisJc2NyaXB0PSR7MTotJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSR7U0RLX1NZU319CisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQQVRIPSR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9OiRQQVRIJyA+PiAkc2NyaXB0CisJIyBJbiBvcmRlciBmb3IgdGhlIHNlbGYtZXh0cmFjdGlvbiBzY3JpcHQgdG8gY29ycmVjdGx5IGV4dHJhY3QgYW5kIHNldCB1cCB0aGluZ3MsCisJIyB3ZSBuZWVkIGEgJ09FQ09SRV9OQVRJVkVfU1lTUk9PVD14eHgnIGxpbmUgaW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorCSMgSG93ZXZlciwgYnVpbGR0b29scy10YXJiYWxsIGlzIGluaGVyZW50bHkgYSB0b29sIHNldCBpbnN0ZWFkIG9mIGEgZnVsbHkgZnVuY3Rpb25hbCBTREssCisJIyBzbyBpbnN0ZWFkIG9mIGV4cG9ydGluZyB0aGUgdmFyaWFibGUsIHdlIHVzZSBhIGNvbW1lbnQgaGVyZS4KKwllY2hvICcjT0VDT1JFX05BVElWRV9TWVNST09UPSIke1NES1BBVEhOQVRJVkV9IicgPj4gJHNjcmlwdAorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtTREtfU1lTfQorCisJZWNobyAnZXhwb3J0IEdJVF9TU0xfQ0FJTkZPPSIke1NES1BBVEhOQVRJVkV9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCInID4+JHNjcmlwdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQtZXh0c2RrLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQtZXh0c2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTU5NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC1leHRzZGsuYmIKQEAgLTAsMCArMSwxMiBAQAorIyBtZXRhLWVudmlyb25tZW50IGZvciBleHRlbnNpYmxlIFNESworCityZXF1aXJlIG1ldGEtZW52aXJvbm1lbnQuYmIKKworUE4gPSAibWV0YS1lbnZpcm9ubWVudC1leHRzZGstJHtNQUNISU5FfSIKKworY3JlYXRlX3Nka19maWxlc19hcHBlbmQoKSB7CisJbG9jYWwgc3lzcm9vdD0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSksIGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKSl9CisJbG9jYWwgc2RrcGF0aG5hdGl2ZT0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfTkFUSVZFJyxUcnVlKSwgZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpKX0KKworCXRvb2xjaGFpbl9jcmVhdGVfc2RrX2Vudl9zY3JpcHQgJycgJycgJHN5c3Jvb3QgJycgJHtiaW5kaXJfbmF0aXZlfSAke3ByZWZpeF9uYXRpdmV9ICRzZGtwYXRobmF0aXZlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDQ1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYgpAQCAtMCwwICsxLDc1IEBACitTVU1NQVJZID0gIlBhY2thZ2Ugb2YgZW52aXJvbm1lbnQgZmlsZXMgZm9yIFNESyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOCIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK01PRElGWVRPUyA9ICIwIgorCitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCitUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFX2FwcGVuZCA9ICIgemxpYiIKKworU0RLX0RJUiA9ICIke1dPUktESVJ9L3NkayIKK1NES19PVVRQVVQgPSAiJHtTREtfRElSfS9pbWFnZSIKK1NES1RBUkdFVFNZU1JPT1QgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK2RvX2dlbmVyYXRlX2NvbnRlbnRbY2xlYW5kaXJzXSA9ICIke1NES19PVVRQVVR9IgorZG9fZ2VuZXJhdGVfY29udGVudFtkaXJzXSA9ICIke1NES19PVVRQVVR9LyR7U0RLUEFUSH0iCitweXRob24gZG9fZ2VuZXJhdGVfY29udGVudCgpIHsKKyAgICAjIEhhbmRsZSBtdWx0aWxpYnMgaW4gdGhlIFNESyBlbnZpcm9ubWVudCwgc2l0ZWNvbmZpZywgZXRjIGZpbGVzLi4uCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAjIG1ha2Ugc3VyZSB3ZSBvbmx5IHVzZSB0aGUgV09SS0RJUiB2YWx1ZSBmcm9tICdkJywgb3IgaXQgY2FuIGNoYW5nZQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignV09SS0RJUicsIFRydWUpKQorCisgICAgIyBtYWtlIHN1cmUgd2Ugb25seSB1c2UgdGhlIFNES1RBUkdFVFNZU1JPT1QgdmFsdWUgZnJvbSAnZCcKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgZC5nZXRWYXIoJ1NES1RBUkdFVFNZU1JPT1QnLCBUcnVlKSkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdsaWJkaXInLCBkLmdldFZhcigndGFyZ2V0X2xpYmRpcicsIEZhbHNlKSkKKworICAgICMgUHJvY2VzcyBERUZBVUxUVFVORQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY3JlYXRlX3Nka19maWxlcyIsIGxvY2FsZGF0YSkKKworICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICAjIExvYWQgb3ZlcnJpZGVzIGZyb20gJ2QnIHRvIGF2b2lkIGhhdmluZyB0byByZXNldCB0aGUgdmFsdWUuLi4KKyAgICAgICAgb3ZlcnJpZGVzID0gZC5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgbG9jYWxkYXRhKQorfQorYWRkdGFzayBnZW5lcmF0ZV9jb250ZW50IGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKKworY3JlYXRlX3Nka19maWxlcygpIHsKKwkjIFNldHVwIHNpdGUgZmlsZSBmb3IgZXh0ZXJuYWwgdXNlCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfc2l0ZWNvbmZpZyAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfZW52X3NjcmlwdCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJIyBBZGQgdmVyc2lvbiBpbmZvcm1hdGlvbgorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke1NES1BBVEh9CisgICAgaW5zdGFsbCAtbSAwNjQ0IC10ICR7RH0vJHtTREtQQVRIfSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vKgorfQorCitQTiA9ICJtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0iCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59PSAiIFwKKyAgICAke1NES1BBVEh9LyogXAorICAgICIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1pZGUtc3VwcG9ydC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjkyOTEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJNZXRhIHBhY2thZ2UgZm9yIGVuc3VyaW5nIHRoZSBidWlsZCBkaXJlY3RvcnkgY29udGFpbnMgYWxsIGFwcHJvcHJpYXRlIHRvb2xjaGFpbiBwYWNrYWdlcyBmb3IgdXNpbmcgYW4gSURFIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmMgZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSB1bmZzMy1uYXRpdmUiCitQUiA9ICJyMyIKKworaW5oZXJpdCBtZXRhIHRvb2xjaGFpbi1zY3JpcHRzCisKK2RvX3BvcHVsYXRlX2lkZV9zdXBwb3J0ICgpIHsKKyAgdG9vbGNoYWluX2NyZWF0ZV90cmVlX2Vudl9zY3JpcHQKK30KKworZG9fcG9wdWxhdGVfaWRlX3N1cHBvcnRbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgcG9wdWxhdGVfaWRlX3N1cHBvcnQgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlmZDg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtdG9vbGNoYWluLmJiCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJNZXRhIHBhY2thZ2UgZm9yIGJ1aWxkaW5nIGEgaW5zdGFsbGFibGUgdG9vbGNoYWluIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInI3IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworaW5oZXJpdCBwb3B1bGF0ZV9zZGsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL25hdGl2ZXNkay1idWlsZHRvb2xzLXBlcmwtZHVtbXkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3MWMzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiRHVtbXkgcGFja2FnZSB3aGljaCBlbnN1cmVzIHBlcmwgaXMgZXhjbHVkZWQgZnJvbSBidWlsZHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworIyBQdXQgaXQgc29tZXdoZXJlIHNlcGFyYXRlIHRvIGVuc3VyZSBpdCdzIG5ldmVyIHVzZWQgZXhjZXB0IHdoZW4gd2Ugd2FudCBpdAorUEFDS0FHRV9BUkNIID0gImJ1aWxkdG9vbHMtZHVtbXktJHtTREtQS0dTVUZGSVh9IgorCitQRVJMUEFDS0FHRVMgPSAibmF0aXZlc2RrLXBlcmwgXAorICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1wZXJsLW1vZHVsZS1maWxlLXBhdGgiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGQuYXBwZW5kVmFyKCdSUFJPVklERVNfJHtQTn0nLCAnJHtQRVJMUEFDS0FHRVN9JykKKyAgICBkLmFwcGVuZFZhcignUkNPTkZMSUNUU18ke1BOfScsICcke1BFUkxQQUNLQUdFU30nKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9wYWNrYWdlLWluZGV4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNDZiNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlJlYnVpbGRzIHRoZSBwYWNrYWdlIGluZGV4IgorTElDRU5TRSA9ICJNSVQiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitQQUNLQUdFUyA9ICIiCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKK2RvX3BhY2thZ2VfaW5kZXhbbm9zdGFtcF0gPSAiMSIKK2RvX3BhY2thZ2VfaW5kZXhbZGVwZW5kc10gKz0gIiR7UEFDS0FHRUlOREVYREVQU30iCisKK3B5dGhvbiBkb19wYWNrYWdlX2luZGV4KCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBnZW5lcmF0ZV9pbmRleF9maWxlcworICAgIGdlbmVyYXRlX2luZGV4X2ZpbGVzKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VfaW5kZXggYmVmb3JlIGRvX2J1aWxkCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS91bmluYXRpdmUtdGFyYmFsbC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS91bmluYXRpdmUtdGFyYmFsbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWY3OTI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAibGliYyBhbmQgcGF0Y2hlbGYgdGFyYmFsbCBmb3IgdXNlIHdpdGggdW5pbmF0aXZlLmJiY2xhc3MiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPSAiIgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID0gIlwKKyAgICBuYXRpdmVzZGstZ2xpYmMgXAorICAgIG5hdGl2ZXNkay1wYXRjaGVsZiBcCisgICAgIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtCVUlMRF9BUkNIfS1uYXRpdmVzZGstbGliYyIKKworUkRFUEVORFMgPSAiJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK2luaGVyaXQgbWV0YQoraW5oZXJpdCBwb3B1bGF0ZV9zZGsKKworZGVsdGFzayBpbnN0YWxsCitkZWx0YXNrIHBhY2thZ2UKK2RlbHRhc2sgcGFja2FnZWRhdGEKKworU0RLX0RFUEVORFMgKz0gInBhdGNoZWxmLW5hdGl2ZSIKKworU0RLX1BBQ0tBR0lOR19GVU5DID0gIiIKKworZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCisKKwkjIFJlcGxhY2UgdGhlICMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIHdpdGggdGhlIGNvcnJlY3QgcGF0dGVybi4KKwkjIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycgYW5kICcuJyBpbiB0aGUgU0RLUEFUSAorCWVzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9IHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisJc2VkIC1pIC1lICJzOiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjOiRlc2NhcGVkX3Nka3BhdGg6IiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vcmVsb2NhdGVfc2RrLnB5Cit9CisKKworZmFrZXJvb3QgdGFyX3NkaygpIHsKKwlta2RpciAtcCAke1NES19ERVBMT1l9CisJY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisJbXYgc3lzcm9vdHMvJHtTREtfU1lTfSAuLyR7QlVJTERfU1lTfQorCXJtIHN5c3Jvb3RzIC1yZgorCXBhdGNoZWxmIC0tc2V0LWludGVycHJldGVyICR7QCcnLmpvaW4oJ2EnIGZvciBuIGluIHhyYW5nZSgxMDI0KSl9IC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYKKwltdiAuLyR7QlVJTERfU1lTfS91c3IvYmluL3BhdGNoZWxmIC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYtdW5pbmF0aXZlCisJdGFyICR7U0RLVEFST1BUU30gLWMgLWogLS1maWxlPSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MiAuCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvY29uZmlnLmNhY2hlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkyMTdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZQpAQCAtMCwwICsxLDQgQEAKKyMhIC9iaW4vc2gKKworY2ZfY3ZfZnVuY19uYW5vc2xlZXA9eWVzCitjZl9jdl9mdW5jX21rc3RlbXA9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvdGljLWhhbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvdGljLWhhbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhODlkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS90aWMtaGFuZy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKyd0aWMnIG9mIHNvbWUgbGludXggZGlzdHJpYnV0aW9ucyAoZS5nLiBmZWRvcmEgMTEpIGhhbmcgaW4gYW4gaW5maW5pdGUKK2xvb3Agd2hlbiBwcm9jZXNzaW5nIHRoZSBvcmlnaW5hbCBmaWxlLgorCitJbmRleDogbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuY3Vyc2VzLTUuNy5vcmlnL21pc2MvdGVybWluZm8uc3JjCisrKysgbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKK0BAIC0zNzA2LDEyICszNzA2LDExIEBAIGtvbnNvbGUteGYzeHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXkKKyAjIFRoZSB2YWx1ZSBmb3Iga2JzIHJlZmxlY3RzIGxvY2FsIGN1c3RvbWl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHNldHRpbmdzIHVzZWQKKyAjIGZvciBYRnJlZTg2IHh0ZXJtLgorIGtvbnNvbGUteGY0eHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb3IgWEZyZWU4NiA0LnggeHRlcm0sCistCWtlbmQ9XEVPRiwga2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUrcGNma2V5cywKKy0JdXNlPWtvbnNvbGUtdnQxMDAsCistIyBLb25zb2xlIGRvZXMgbm90IGltcGxlbWVudCBzaGlmdGVkIGN1cnNvci1rZXlzLgorLWtvbnNvbGUrcGNma2V5c3xrb25zb2xlIHN1YnNldCBvZiB4dGVybStwY2ZrZXlzLAorLQlrTEZUQCwga1JJVEAsIGtjYnQ9XEVbWiwga2luZEAsIGtyaUAsIGtETkAsIGtVUEAsIHVzZT14dGVybStwY2MyLAorLQl1c2U9eHRlcm0rcGNmMCwKKysJa2VuZD1cRU9GLCBrZjE9XEVPUCwga2YxMz1cRU8yUCwga2YxND1cRU8yUSwga2YxNT1cRU8yUiwKKysJa2YxNj1cRU8yUywga2YxNz1cRVsxNTsyfiwga2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwKKysJa2YyPVxFT1EsIGtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisrCWtmMjM9XEVbMjM7Mn4sIGtmMjQ9XEVbMjQ7Mn4sIGtmMz1cRU9SLCBrZjQ9XEVPUywKKysJa2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUtdnQxMDAsCisgIyBLREUncyAidnQxMDAiIGtleWJvYXJkIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gYW55IHRlcm1pbmFsIHRoYXQgREVDIG1hZGUsIGJ1dAorICMgaXQgaXMgc3RpbGwgdXNlZnVsIGZvciBkZXJpdmluZyB0aGUgb3RoZXIgZW50cmllcy4KKyBrb25zb2xlLXZ0MTAwfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHZ0MTAwIChzaWMpIGtleWJvYXJkLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDgwZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy5pbmMKQEAgLTAsMCArMSwzMDYgQEAKK1NVTU1BUlkgPSAiVGhlIE5ldyBDdXJzZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlNWcjQgYW5kIFhTSS1DdXJzZXMgY29tcGF0aWJsZSBjdXJzZXMgbGlicmFyeSBhbmQgdGVybWluZm8gdG9vbHMgaW5jbHVkaW5nIHRpYywgaW5mb2NtcCwgY2FwdG9pbmZvLiBTdXBwb3J0cyBjb2xvciwgbXVsdGlwbGUgaGlnaGxpZ2h0cywgZm9ybXMtZHJhd2luZyBjaGFyYWN0ZXJzLCBhbmQgYXV0b21hdGljIHJlY29nbml0aW9uIG9mIGtleXBhZCBhbmQgZnVuY3Rpb24ta2V5IHNlcXVlbmNlcy4gRXh0ZW5zaW9ucyBpbmNsdWRlIHJlc2l6YWJsZSB3aW5kb3dzIGFuZCBtb3VzZSBzdXBwb3J0IG9uIGJvdGggeHRlcm0gYW5kIExpbnV4IGNvbnNvbGUgdXNpbmcgdGhlIGdwbSBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9uY3Vyc2VzL25jdXJzZXMuaHRtbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbmN1cnNlcy9iYXNlL3ZlcnNpb24uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT1jYmMxODBhOGM0NGNhNjQyZTk3YzM1NDUyZmFiNWY2NiIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibmN1cnNlcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitJTkNfUFIgPSAicjE1IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L25jdXJzZXMtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgbXVsdGlsaWJfaGVhZGVyIHBrZ2NvbmZpZworCisjIFVwc3RyZWFtIGhhcyB1c2VmdWwgcGF0Y2hlcyBhdCB0aW1lcyBhdCBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC8ke0JQTn0vY3VycmVudC8ke0JQfS0ke1JFVklTSU9OfS50Z3oiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiLUkgbTQiCitDT05GSUdfU0lURSA9KyAiJHtXT1JLRElSfS9jb25maWcuY2FjaGUiCisKKyMgV2hldGhlciB0byBlbmFibGUgc2VwYXJhdGUgd2lkZWMgbGlicmFyaWVzOyBtdXN0IGJlICd0cnVlJyBvciAnZmFsc2UnCisjCisjIFRPRE86IHJlbW92ZSB0aGlzIHZhcmlhYmxlIHdoZW4gd2lkZWMgaXMgc3VwcG9ydGVkIGluIGV2ZXJ5IHNldHVwPworRU5BQkxFX1dJREVDID89ICJ0cnVlIgorCisjIF9HTlVfU09VUkNFIGlzIHJlcXVpcmVkIGZvciB3aWRlYyBzdHVmZiBhbmQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseQorIyBmb3IgdGFyZ2V0IG9iamVjdHMuICBCdXQgaXQgbXVzdCBiZSBzZXQgbWFudWFsbHkgZm9yIG5hdGl2ZSBhbmQgc2RrCisjIGJ1aWxkcy4KK0JVSUxEX0NQUEZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorCisjIG5hdGl2ZXMgZG9uJ3QgZ2VuZXJhbGx5IGxvb2sgaW4gYmFzZV9saWJkaXIKK2Jhc2VfbGliZGlyX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0iCisKKyMgRGlzcGxheSBjb3JydXB0aW9uIG9jY3VycyBvbiA2NCBiaXQgaG9zdHMgd2l0aG91dCB0aGVzZSBzZXR0aW5ncworIyBUaGlzIHdhcyBkZXJyaXZlZCBmcm9tIHRoZSB1cHN0cmVhbSBkZWJpYW4gbmN1cnNlcyB3aGljaCB1c2VzCisjIHRoZXNlIHNldHRpbmdzIGZvciAzMiBhbmQgNjQgYml0IGhvc3RzLgorRVhDT05GSUdfQVJHUyA9ICIiCitFWENPTkZJR19BUkdTX2NsYXNzLW5hdGl2ZSA9ICIgXAorCQktLWRpc2FibGUtbHA2NCBcCisJCS0td2l0aC1jaHR5cGU9J2xvbmcnIFwKKwkJLS13aXRoLW1tYXNrLXQ9J2xvbmcnIgorRVhDT05GSUdfQVJHU19jbGFzcy1uYXRpdmVzZGsgPSAiIFwKKwkJLS1kaXNhYmxlLWxwNjQgXAorCQktLXdpdGgtY2h0eXBlPSdsb25nJyBcCisJCS0td2l0aC1tbWFzay10PSdsb25nJyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tbGliLioiCisKKyMgRmFsbCBiYWNrIHRvIHRoZSBob3N0IHRlcm1jYXAgLyB0ZXJtaW5mbyBmb3IgLW5hdGl2ZXNkayBhbmQgLW5hdGl2ZQorIyBUaGUgcmVhbGl0eSBpcyBhIHdvcmsgYXJvdW5kIGZvciBzdHJhbmdlIHByb2JsZW1zIHdpdGggdGhpbmdzIGxpa2UKKyMgImJpdGJha2UgLWMgbWVudWNvbmZpZyBidXN5Ym94IiB3aGVyZSBpdCBjYW5ub3QgZmluZCB0aGUgdGVybWluZm8KKyMgYmVjYXVzZSB0aGUgc3N0YXRlIGhhZCBhIGhhcmQgY29kZWQgc2VhcmNoIHBhdGguICBVbnRpbCB0aGlzIGlzIGZpeGVkCisjIGFub3RoZXIgd2F5IHRoaXMgaXMgZGVlbWVkIGdvb2QgZW5vdWdoLgorRVhfVEVSTUNBUCA9ICIiCitFWF9URVJNQ0FQX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwIgorRVhfVEVSTUNBUF9jbGFzcy1uYXRpdmVzZGsgPSAiOi9ldGMvdGVybWNhcDovdXNyL3NoYXJlL21pc2MvdGVybWNhcCIKK0VYX1RFUk1JTkZPID0gIiIKK0VYX1RFUk1JTkZPX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvIgorRVhfVEVSTUlORk9fY2xhc3MtbmF0aXZlc2RrID0gIjovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8iCisKKyMgSGVscGVyIGZ1bmN0aW9uIGZvciBkb19jb25maWd1cmUgdG8gYWxsb3cgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMKKyMgJDEgdGhlIGRpcmVjdG9yeSB0byBydW4gY29uZmlndXJlIGluCisjICRAIHRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byBjb25maWd1cmUKK25jdXJzZXNfY29uZmlndXJlKCkgeworCW1rZGlyIC1wICQxCisJY2QgJDEKKwlzaGlmdAorCW9lX3J1bmNvbmYgXAorCSAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisJICAgICAgICAtLXdpdGhvdXQtZGVidWcgXAorCSAgICAgICAgLS13aXRob3V0LWFkYSBcCisJICAgICAgICAtLXdpdGhvdXQtZ3BtIFwKKwkgICAgICAgIC0tZW5hYmxlLWhhcmQtdGFicyBcCisJICAgICAgICAtLWVuYWJsZS14bWMtZ2xpdGNoIFwKKwkgICAgICAgIC0tZW5hYmxlLWNvbG9yZmdiZyBcCisJICAgICAgICAtLXdpdGgtdGVybXBhdGg9JyR7c3lzY29uZmRpcn0vdGVybWNhcDoke2RhdGFkaXJ9L21pc2MvdGVybWNhcCR7RVhfVEVSTUNBUH0nIFwKKwkgICAgICAgIC0td2l0aC10ZXJtaW5mby1kaXJzPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOiR7ZGF0YWRpcn0vdGVybWluZm8ke0VYX1RFUk1JTkZPfScgXAorCSAgICAgICAgLS13aXRoLXNoYXJlZCBcCisJICAgICAgICAtLWRpc2FibGUtYmlnLWNvcmUgXAorCSAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gXAorCSAgICAgICAgLS13aXRoLXRpY2xpYiBcCisJICAgICAgICAtLXdpdGgtdGVybWxpYj10aW5mbyBcCisJICAgICAgICAtLWVuYWJsZS1zaWd3aW5jaCBcCisJICAgICAgICAtLWVuYWJsZS1wYy1maWxlcyBcCisJICAgICAgICAtLWRpc2FibGUtcnBhdGgtaGFjayBcCisJCSR7RVhDT05GSUdfQVJHU30gXAorCSAgICAgICAgLS13aXRoLW1hbnBhZ2UtZm9ybWF0PW5vcm1hbCBcCisJICAgICAgICAiJEAiIHx8IHJldHVybiAxCisJY2QgLi4KK30KKworIyBPdmVycmlkZSB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgYXV0b3Rvb2xzIGNsYXNzOyBuY3Vyc2VzIHJlcXVpcmVzIGEKKyMgcGF0Y2hlZCBhdXRvY29uZjIxMyB0byBnZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdC4gVGhpcyBhdXRvY29uZgorIyBpcyBub3QgYXZhaWxhYmxlIHNvIHRoYXQgdGhlIHNoaXBwZWQgc2NyaXB0IHdpbGwgYmUgdXNlZC4KK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgIyBjaGVjayBkb2VzIG5vdCB3b3JrIHdpdGggY3Jvc3MtY29tcGlsaW5nIGFuZCBpcyBnZW5lcmFsbHkKKyAgICAgICAgIyBicm9rZW4gYmVjYXVzZSBpdCByZXF1aXJlcyBzdGRpbiB0byBiZSBwb2xsYWJsZSAod2hpY2ggaXMKKyAgICAgICAgIyBub3QgdGhlIGNhc2UgZm9yIC9kZXYvbnVsbCByZWRpcmVjdGlvbnMpCisgICAgICAgIGV4cG9ydCBjZl9jdl93b3JraW5nX3BvbGw9eWVzCisJI1JlbW92ZSAke2luY2x1ZGVkaXJ9IGZyb20gQ1BQRkxBR1MsIG5lZWQgZm9yIGNyb3NzIGNvbXBpbGUKKwlzZWQgLWkgJ3MjLUkke2NmX2luY2x1ZGVkaXJ9IyNnJyAke1N9L2NvbmZpZ3VyZSB8fCBkaWUgInNlZCBDUFBGTEFHUyIKKworCSMgVGhlIC0tZW5hYmxlLXBjLWZpbGVzIHJlcXVpcmVzIFBLR19DT05GSUdfTElCRElSIGV4aXN0ZWQKKwlta2RpciAtcCAke1BLR19DT05GSUdfTElCRElSfQorCSggY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICkKKwluY3Vyc2VzX2NvbmZpZ3VyZSAibmFycm93YyIgfHwgXAorCQlyZXR1cm4gMQorCSEgJHtFTkFCTEVfV0lERUN9IHx8IFwKKwkJbmN1cnNlc19jb25maWd1cmUgIndpZGVjIiAiLS1lbmFibGUtd2lkZWMiICItLXdpdGhvdXQtcHJvZ3MiCisKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djIGxpYnMKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djL3Byb2dzCisKKyAgICAgICAgISAke0VOQUJMRV9XSURFQ30gfHwgXAorICAgICAgICAgICAgb2VfcnVubWFrZSAtQyB3aWRlYyBsaWJzCit9CisKKyMgc2V0IG9mIGV4cGVjdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gbmFycm93YyBhbmQgd2lkZWMgaGVhZGVyCisjCisjIFRPRE86IHRoZSBOQ1VSU0VTX0NIX1QgZGlmZmVyZW5jZSBjYW4gY2F1c2UgcmVhbCBwcm9ibGVtcyA6KAorX3VuaWZkZWZfY2xlYW51cCA9ICIgXAorICAtZSAnXCEvXCogXCRJZDogY3Vyc2VzLndpZGUsdiEsXCEvXCogXCRJZDogY3Vyc2VzLnRhaWwsdiFkJyBcCisgIC1lICcvXiNkZWZpbmUgTkNVUlNFU19DSF9UIC9kJyBcCisgIC1lICcvXiNpbmNsdWRlIDx3Y2hhci5oPi9kJyBcCisgIC1lICdcIV4vXCogLiogXCovIWQnIFwKKyIKKworZG9fdGVzdFtkZXBlbmRzXSA9ICJ1bmlmZGVmLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fdGVzdFtkaXJzXSA9ICIke1N9IgorZG9fdGVzdCgpIHsKKyAgICAgICAgJHtFTkFCTEVfV0lERUN9IHx8IHJldHVybiAwCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgbmFycm93IGFuZCB3aWRlYyBoZWFkZXIgYXJlIGNvbXBhdGlibGUKKyAgICAgICAgIyBhbmQgZGlmZmVyIG9ubHkgaW4gbWlub3IgZGV0YWlscy4KKyAgICAgICAgdW5pZmRlZiAtayBuYXJyb3djL2luY2x1ZGUvY3Vyc2VzLmggfCBcCisgICAgICAgICAgICBzZWQgJHtfdW5pZmRlZl9jbGVhbnVwfSA+IGN1cnNlcy1uYXJyb3djLmgKKyAgICAgICAgdW5pZmRlZiAtayB3aWRlYy9pbmNsdWRlL2N1cnNlcy5oIHwgXAorICAgICAgICAgICAgc2VkICR7X3VuaWZkZWZfY2xlYW51cH0gPiBjdXJzZXMtd2lkZWMuaAorCisgICAgICAgIGRpZmYgY3Vyc2VzLW5hcnJvd2MuaCBjdXJzZXMtd2lkZWMuaAorfQorCisjIFNwbGl0IG9yaWdpbmFsIF9pbnN0YWxsX29wdHMgdG8gdHdvIHBhcnRzLgorIyBPbmUgaXMgdGhlIG9wdGlvbnMgdG8gaW5zdGFsbCBjb250ZW50cywgdGhlIG90aGVyIGlzIHRoZSBwYXJhbWV0ZXJzIFwKKyMgd2hlbiBydW5uaW5nIGNvbW1hbmQgIm1ha2UgaW5zdGFsbCIKK19pbnN0YWxsX29wdHMgPSAiXAorICBpbnN0YWxsLmxpYnMgaW5zdGFsbC5pbmNsdWRlcyBpbnN0YWxsLm1hbiBcCisiCitfaW5zdGFsbF9jZmdzID0gIlwKKyAgREVTVERJUj0nJHtEfScgXAorICBQS0dfQ09ORklHX0xJQkRJUj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZycgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICAjIE9yZGVyIG9mIGluc3RhbGxhdGlvbiBpcyBpbXBvcnRhbnQ7IHdpZGVjIGluc3RhbGxzIGEgJ2N1cnNlcy5oJworICAgICAgICAjIGhlYWRlciB3aXRoIG1vcmUgZGVmaW5pdGlvbnMgYW5kIG11c3QgYmUgaW5zdGFsbGVkIGxhc3QgaGVuY2UuCisgICAgICAgICMgQ29tcGF0aWJpbGl0eSBvZiB0aGVzZSBoZWFkZXJzIHdpbGwgYmUgY2hlY2tlZCBpbiAnZG9fdGVzdCgpJy4KKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5wcm9ncworCisgICAgICAgICMgVGhlIGluc3RhbGwuZGF0YSBzaG91bGQgcnVuIGFmdGVyIGluc3RhbGwubGlicywgb3RoZXJ3aXNlCisgICAgICAgICMgdGhlcmUgd291bGQgYmUgYSByYWNlIGlzc3VlIGluIGEgdmVyeSBjcml0aWNhbCBjb25kaXRvbiwgc2luY2UKKyAgICAgICAgIyB0aWMgd2lsbCBiZSBydW4gYnkgaW5zdGFsbC5kYXRhLCBhbmQgdGljIG5lZWRzIGxpYnRpbmZvLnNvCisgICAgICAgICMgd2hpY2ggd291bGQgYmUgcmVnZW5lcmF0ZWQgYnkgaW5zdGFsbC5saWJzLgorICAgICAgICBvZV9ydW5tYWtlIC1DIG5hcnJvd2MgJHtfaW5zdGFsbF9jZmdzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5kYXRhCisKKworICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICBvZV9ydW5tYWtlIC1DIHdpZGVjICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfQorCisgICAgICAgIGNkIG5hcnJvd2MKKworICAgICAgICAjIGluY2x1ZGUgc29tZSBiYXNpYyB0ZXJtaW5mbyBmaWxlcworICAgICAgICAjIHN0b2xlbiA7KSBmcm9tIGdlbnRvbyBhbmQgbW9kaWZpZWQgYSBiaXQKKyAgICAgICAgZm9yIHggaW4gYW5zaSBjb25zb2xlIGR1bWIgbGludXggcnh2dCBzY3JlZW4gc2NyZWVuLTI1NmNvbG9yIHN1biB2dDUyIHZ0MTAwIHZ0MTAyIHZ0MjAwIHZ0MjIwIHh0ZXJtLWNvbG9yIHh0ZXJtLXhmcmVlODYgeHRlcm0tMjU2Y29sb3IKKyAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBsb2NhbCB0ZXJtZmlsZT0iJChmaW5kICIke0R9JHtkYXRhZGlyfS90ZXJtaW5mby8iIC1uYW1lICIke3h9IiAyPi9kZXYvbnVsbCkiCisgICAgICAgICAgICAgICAgbG9jYWwgYmFzZWRpcj0iJChiYXNlbmFtZSAkKGRpcm5hbWUgIiR7dGVybWZpbGV9IikpIgorCisgICAgICAgICAgICAgICAgaWYgWyAtbiAiJHt0ZXJtZmlsZX0iIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0KKyAgICAgICAgICAgICAgICAgICAgICAgIG12ICR7dGVybWZpbGV9ICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vCisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtcyAvZXRjL3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7RH0ke2RhdGFkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgIyBpIHRoaW5rIHdlIGNhbiB1c2UgeHRlcm0tY29sb3IgYXMgZGVmYXVsdCB4dGVybQorICAgICAgICBpZiBbIC1lICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0tY29sb3IgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgbG4gLXNmIHh0ZXJtLWNvbG9yICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0KKyAgICAgICAgZmkKKworICAgICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3Rlcm1pbmZvCisKKyAgICAgICAgIyBjcmVhdGUgbGlua2VyIHNjcmlwdHMgZm9yIGxpYmN1cnNlcy5zbyBhbmQgbGlibmN1cnNlcyB0bworICAgICAgICAjIGxpbmsgYWdhaW5zdCAtbHRpbmZvIHdoZW4gbmVlZGVkLiBTb21lIGJ1aWxkcyBtaWdodCBicmVhaworICAgICAgICAjIGVsc2Ugd2hlbiAnLVdsLC0tbm8tY29weS1kdC1uZWVkZWQtZW50cmllcycgaGFzIGJlZW4gc2V0IGluCisgICAgICAgICMgbGlua2VyIGZsYWdzLgorICAgICAgICBmb3IgaSBpbiBsaWJuY3Vyc2VzIGxpYm5jdXJzZXN3OyBkbworICAgICAgICAgICAgICAgIGY9JHtEfSR7bGliZGlyfS8kaS5zbworICAgICAgICAgICAgICAgIHRlc3QgLWggJGYgfHwgY29udGludWUKKyAgICAgICAgICAgICAgICBybSAtZiAkZgorICAgICAgICAgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nICA+JGYKKyAgICAgICAgICAgICAgICBlY2hvICJJTlBVVCgkaS5zby41IEFTX05FRURFRCgtbHRpbmZvKSkiID4+JGYKKyAgICAgICAgZG9uZQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgbGliY3Vyc2VzIGlzIGxpbmtlZCBzbyB0aGF0IGl0IGdldHMgLWx0aW5mbworICAgICAgICAjIGFsc28sIHRoaXMgc2hvdWxkIGJlIGFkZHJlc3NlZCB1cHN0cmVhbSByZWFsbHkuCisgICAgICAgIGxuIC1zZiBsaWJuY3Vyc2VzLnNvICR7RH0ke2xpYmRpcn0vbGliY3Vyc2VzLnNvCisKKyAgICAgICAgIyBjcmVhdGUgbGlidGVybWNhcC5zbyBsaW5rZXIgc2NyaXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgICAgIGY9JHtEfSR7bGliZGlyfS9saWJ0ZXJtY2FwLnNvCisgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nID4kZgorICAgICAgICBlY2hvICdJTlBVVChBU19ORUVERUQoLWx0aW5mbykpJyA+PiRmCisKKyAgICAgICAgaWYgWyAhIC1kICIke0R9JHtiYXNlX2xpYmRpcn0iIF07IHRoZW4KKyAgICAgICAgICAgICMgU2V0dGluZyBiYXNlX2xpYmRpciB0byBsaWJkaXIgYXMgaXMgZG9uZSBpbiB0aGUgLW5hdGl2ZQorICAgICAgICAgICAgIyBjYXNlIHdpbGwgc2tpcCB0aGlzIGNvZGUKKyAgICAgICAgICAgIG1rZGlyICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2VzLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2Vzdy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfQorCisgICAgICAgICAgICBtdiAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICBybSAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvCisKKyAgICAgICAgICAgICMgVXNlIGxuciB0byBlbnN1cmUgdGhpcyBpcyBhIHJlbGF0aXZlIGxpbmsgZGVzcGl0ZSBhYnNvbHV0ZSBwYXRocworICAgICAgICAgICAgIyAoYXMgd2UgY2FuJ3Qga25vdyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYmFzZV9saWJkaXIgYW5kIGxpYmRpcikuCisgICAgICAgICAgICAjIEF0IHNvbWUgcG9pbnQgd2UgY2FuIHJlbHkgb24gY29yZXV0aWxzIDguMTYgd2hpY2ggaGFzIGxuIC1yLgorICAgICAgICAgICAgbG5yICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ0aW5mby5zby41ICR7RH0ke2xpYmRpcn0vbGlidGluZm8uc28KKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAtZCAiJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyIgXTsgdGhlbgorICAgICAgICAgICAgZm9yIGYgaW4gYGZpbmQgJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyAtbmFtZSAiKi5oImAKKyAgICAgICAgICAgIGRvCisJICAgICAgICBmPWBiYXNlbmFtZSAkZmAKKwkgICAgICAgIHRlc3QgLWUgJHtEfSR7aW5jbHVkZWRpcn0vJGYgJiYgY29udGludWUKKyAgICAgICAgICAgICAgICBsbiAtc2YgbmN1cnNlcy8kZiAke0R9JHtpbmNsdWRlZGlyfS8kZgorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICBvZV9tdWx0aWxpYl9oZWFkZXIgY3Vyc2VzLmgKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCIke2xpYmRpcn0iKQorICAgIGJhc2VfbGliZGlyID0gZC5leHBhbmQoIiR7YmFzZV9saWJkaXJ9IikKKyAgICBwbmJhc2UgPSBkLmV4cGFuZCgiJHtQTn0tbGliJXMiKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBpZiBsaWJkaXIgaXMgbm90IGJhc2VfbGliZGlyOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBiYXNlX2xpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KKworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzX2NsYXNzLXRhcmdldCA9ICJjbGVhciByZXNldCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyArPSAiIFwKKyAgJHtQTn0tdG9vbHMgXAorICAke1BOfS10ZXJtaW5mbyBcCisgICR7UE59LXRlcm1pbmZvLWJhc2UgXAorIgorCitGSUxFU18ke1BOfSA9ICJcCisgICR7YmluZGlyfS90cHV0IFwKKyAgJHtiaW5kaXJ9L3RzZXQgXAorICAke2JpbmRpcn0vbmN1cnNlczUtY29uZmlnIFwKKyAgJHtiaW5kaXJ9L25jdXJzZXN3NS1jb25maWcgXAorICAke2RhdGFkaXJ9L3RhYnNldCBcCisiCisKKyMgVGhpcyBrZWVwcyBvbmx5IHRwdXQvdHNldCBpbiBuY3Vyc2VzCisjIGNsZWFyL3Jlc2V0IGFyZSBpbiBhbHJlYWR5IGJ1c3lib3gKK0ZJTEVTXyR7UE59LXRvb2xzID0gIlwKKyAgJHtiaW5kaXJ9L3RpYyBcCisgICR7YmluZGlyfS90b2UgXAorICAke2JpbmRpcn0vaW5mb3RvY2FwIFwKKyAgJHtiaW5kaXJ9L2NhcHRvaW5mbyBcCisgICR7YmluZGlyfS9pbmZvY21wIFwKKyAgJHtiaW5kaXJ9L2NsZWFyJHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3Jlc2V0JHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3RhY2sgXAorICAke2JpbmRpcn0vdGFicyBcCisiCisKKyMgJ3Jlc2V0JyBpcyBhIHN5bWxpbmsgdG8gJ3RzZXQnIHdoaWNoIGlzIGluIHRoZSAnbmN1cnNlcycgcGFja2FnZQorUkRFUEVORFNfJHtQTn0tdG9vbHMgPSAiJHtQTn0iCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvID0gIlwKKyAgJHtkYXRhZGlyfS90ZXJtaW5mbyBcCisiCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvLWJhc2UgPSAiXAorICAke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvIFwKKyIKKworUlNVR0dFU1RTXyR7UE59LWxpYnRpbmZvID0gIiR7UE59LXRlcm1pbmZvIgorUlJFQ09NTUVORFNfJHtQTn0tbGlidGluZm8gPSAiJHtQTn0tdGVybWluZm8tYmFzZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzUuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzUuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGQyN2E5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNS45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbmN1cnNlcy5pbmMKKworUkVWSVNJT04gPSAiMjAxNTAzMjkiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJICs9ICJmaWxlOi8vdGljLWhhbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZy5jYWNoZSBcCisiCitTID0gIiR7V09SS0RJUn0vJHtCUH0tJHtSRVZJU0lPTn0iCitTUkNfVVJJW21kNXN1bV0gPSAiY2VlOTkxZDA5ZTY5ZTYwZWJlZGVmNDI0ODA0YzUyZDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI2NGY0MGU0ZGNlNzNlM2FhODNkMTViZDkyNTdjNmVmZjg3OTBlYzQxMTUwZjA5MzhiZDg3YzBlYjc1ODI4ZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL3NpdGVfY29uZmlnL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3YjdiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorY3Vyc2VzLmgKK25jdXJzZXMvY3Vyc2VzLmgKK25jdXJzZXMuaAorbmN1cnNlcy90ZXJtY2FwLmgKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZS9ob3N0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjMzMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMKQEAgLTAsMCArMSwyIEBACisxMjcuMC4wLjEJbG9jYWxob3N0LmxvY2FsZG9tYWluCQlsb2NhbGhvc3QKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZS9uZXRiYXNlLWFkZC1ycGNiaW5kLWFzLWFuLWFsaWFzLXRvLXN1bnJwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWNlMjFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorbmV0YmFzZTogYWRkIHJwY2JpbmQgYXMgYW4gYWxpYXMgdG8gc3VucnBjCisKK3RoZSBwYXRjaCBjb21lcyBmcm9tOgoraHR0cHM6Ly9idWdzLmFyY2hsaW51eC5vcmcvdGFzay8yMDI3MworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZXRjLXJwYyAgICAgIHwgICAgMiArLQorIGV0Yy1zZXJ2aWNlcyB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXRjLXJwYyBiL2V0Yy1ycGMKK2luZGV4IDFiMzA2MjUuLjlhOWE4MWEgMTAwNjQ0CistLS0gYS9ldGMtcnBjCisrKysgYi9ldGMtcnBjCitAQCAtMSw3ICsxLDcgQEAKKyAjIFRoaXMgZmlsZSBjb250YWlucyB1c2VyIHJlYWRhYmxlIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgcnBjCisgIyBwcm9ncmFtIG51bWJlcnMuCisgCistcG9ydG1hcHBlcgkxMDAwMDAJcG9ydG1hcCBzdW5ycGMKKytwb3J0bWFwcGVyCTEwMDAwMAlwb3J0bWFwIHN1bnJwYyBycGNiaW5kCisgcnN0YXRkCQkxMDAwMDEJcnN0YXQgcnN0YXRfc3ZjIHJ1cCBwZXJmbWV0ZXIKKyBydXNlcnNkCQkxMDAwMDIJcnVzZXJzCisgbmZzCQkxMDAwMDMJbmZzcHJvZworZGlmZiAtLWdpdCBhL2V0Yy1zZXJ2aWNlcyBiL2V0Yy1zZXJ2aWNlcworaW5kZXggOWQ2NGE1Mi4uYTE5ZjdjOCAxMDA2NDQKKy0tLSBhL2V0Yy1zZXJ2aWNlcworKysrIGIvZXRjLXNlcnZpY2VzCitAQCAtNzIsOCArNzIsOCBAQCBwb3AyCQkxMDkvdGNwCQlwb3N0b2ZmaWNlIHBvcC0yICMgUE9QIHZlcnNpb24gMgorIHBvcDIJCTEwOS91ZHAJCXBvcC0yCisgcG9wMwkJMTEwL3RjcAkJcG9wLTMJCSMgUE9QIHZlcnNpb24gMworIHBvcDMJCTExMC91ZHAJCXBvcC0zCistc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyCSMgUlBDIDQuMCBwb3J0bWFwcGVyCistc3VucnBjCQkxMTEvdWRwCQlwb3J0bWFwcGVyCisrc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyIHJwY2JpbmQJIyBSUEMgNC4wIHBvcnRtYXBwZXIKKytzdW5ycGMJCTExMS91ZHAJCXBvcnRtYXBwZXIgcnBjYmluZAorIGF1dGgJCTExMy90Y3AJCWF1dGhlbnRpY2F0aW9uIHRhcCBpZGVudAorIHNmdHAJCTExNS90Y3AKKyB1dWNwLXBhdGgJMTE3L3RjcAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Q4OWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2VfNS4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQmFzaWMgVENQL0lQIG5ldHdvcmtpbmcgc3VwcG9ydCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciBiYXNpYyBUQ1AvSVAgYmFzZWQgbmV0d29ya2luZyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL25ldGJhc2UiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCitQRSA9ICIxIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9uL25ldGJhc2UvbmV0YmFzZV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaG9zdHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNjM3YTI3ZmQzZGUwMmEyNzhkMmI1YmU3ZTY1NThjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MWY2YzY5Nzk1MDQ0ZDYyYjhhZDk1OWNmOWRhZjA0OWQwNTQ1ZmQ0NjZjNTI4NjBhZDNmOTMzYjFlOTdiODhiIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjggJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0cyAke0R9JHtzeXNjb25mZGlyfS9ob3N0cworCWluc3RhbGwgLW0gMDY0NCBldGMtcnBjICR7RH0ke3N5c2NvbmZkaXJ9L3JwYworCWluc3RhbGwgLW0gMDY0NCBldGMtcHJvdG9jb2xzICR7RH0ke3N5c2NvbmZkaXJ9L3Byb3RvY29scworCWluc3RhbGwgLW0gMDY0NCBldGMtc2VydmljZXMgJHtEfSR7c3lzY29uZmRpcn0vc2VydmljZXMKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaG9zdHMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvb3MtcmVsZWFzZS9vcy1yZWxlYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDMxZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYgpAQCAtMCwwICsxLDQ5IEBACitpbmhlcml0IGFsbGFyY2gKKworU1VNTUFSWSA9ICJPcGVyYXRpbmcgc3lzdGVtIGlkZW50aWZpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiVGhlIC9ldGMvb3MtcmVsZWFzZSBmaWxlIGNvbnRhaW5zIG9wZXJhdGluZyBzeXN0ZW0gaWRlbnRpZmljYXRpb24gZGF0YS4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKKyMgT3RoZXIgdmFsaWQgZmllbGRzOiBCVUlMRF9JRCBJRF9MSUtFIEFOU0lfQ09MT1IgQ1BFX05BTUUKKyMgICAgICAgICAgICAgICAgICAgICBIT01FX1VSTCBTVVBQT1JUX1VSTCBCVUdfUkVQT1JUX1VSTAorT1NfUkVMRUFTRV9GSUVMRFMgPSAiSUQgSURfTElLRSBOQU1FIFZFUlNJT04gVkVSU0lPTl9JRCBQUkVUVFlfTkFNRSIKKworSUQgPSAiJHtESVNUUk99IgorTkFNRSA9ICIke0RJU1RST19OQU1FfSIKK1ZFUlNJT04gPSAiJHtESVNUUk9fVkVSU0lPTn0ke0AnICglcyknICUgRElTVFJPX0NPREVOQU1FIGlmICdESVNUUk9fQ09ERU5BTUUnIGluIGQgZWxzZSAnJ30iCitWRVJTSU9OX0lEID0gIiR7RElTVFJPX1ZFUlNJT059IgorUFJFVFRZX05BTUUgPSAiJHtESVNUUk9fTkFNRX0gJHtWRVJTSU9OfSIKK0JVSUxEX0lEID89ICIke0RBVEVUSU1FfSIKK0JVSUxEX0lEW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKKworcHl0aG9uIGRvX2NvbXBpbGUgKCkgeworICAgIGltcG9ydCBzaHV0aWwKKyAgICB3aXRoIG9wZW4oZC5leHBhbmQoJyR7Qn0vb3MtcmVsZWFzZScpLCAndycpIGFzIGY6CisgICAgICAgIGZvciBmaWVsZCBpbiBkLmdldFZhcignT1NfUkVMRUFTRV9GSUVMRFMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcihmaWVsZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3swfT17MX1cbicuZm9ybWF0KGZpZWxkLCB2YWx1ZSkpCisgICAgaWYgZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBycG1fZ3BnX3B1YmtleSA9IGQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCisgICAgICAgIG9zLm1rZGlyKCcke0J9L3JwbS1ncGcnKQorICAgICAgICBkaXN0cm9fdmVyc2lvbiA9IHNlbGYuZC5nZXRWYXIoJ0RJU1RST19WRVJTSU9OJywgVHJ1ZSkgb3IgIm9lLjAiCisgICAgICAgIHNodXRpbC5jb3B5MihycG1fZ3BnX3B1YmtleSwgZC5leHBhbmQoJyR7Qn0vcnBtLWdwZy9SUE0tR1BHLUtFWS0lcycgJSBkaXN0cm9fdmVyc2lvbikpCit9Citkb19jb21waWxlW3ZhcmRlcHNdICs9ICIke09TX1JFTEVBU0VfRklFTERTfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCBvcy1yZWxlYXNlICR7RH0ke3N5c2NvbmZkaXJ9LworCisgICAgaWYgWyAtZCAicnBtLWdwZyIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9wa2kiCisgICAgICAgIGNwIC1yICJycG0tZ3BnIiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpLyIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzZhNTMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKQEAgLTAsMCArMSwzMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQKKyMKKworU1VNTUFSWSA9ICJIb3N0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsgb3IgZXh0ZXJuYWwgdG9vbGNoYWluIgorUFIgPSAicjEyIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIG5hdGl2ZXNkaworCitQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZID0gIjEiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstcWVtdSBcCisgICAgbmF0aXZlc2RrLXFlbXUtaGVscGVyIFwKKyAgICBuYXRpdmVzZGstcHNldWRvIFwKKyAgICBuYXRpdmVzZGstdW5mczMgXAorICAgIG5hdGl2ZXNkay1vcGtnIFwKKyAgICBuYXRpdmVzZGstbGlidG9vbCBcCisgICAgbmF0aXZlc2RrLWF1dG9jb25mIFwKKyAgICBuYXRpdmVzZGstYXV0b21ha2UgXAorICAgIG5hdGl2ZXNkay1zaGFkb3cgXAorICAgIG5hdGl2ZXNkay1tYWtlZGV2cyBcCisgICAgbmF0aXZlc2RrLXNtYXJ0cG0gXAorICAgIG5hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHQgXAorICAgICIKKworUkRFUEVORFNfJHtQTn1fZGFyd2luID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstb3BrZyBcCisgICAgbmF0aXZlc2RrLWxpYnRvb2wgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQwYjI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCkBAIC0wLDAgKzEsMzY5IEBACitTVU1NQVJZID0gIk1lcmdlIG1hY2hpbmUgYW5kIGRpc3RybyBvcHRpb25zIHRvIGNyZWF0ZSBhIGJhc2ljIG1hY2hpbmUgdGFzay9wYWNrYWdlIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyODMiCisKKyMKKyMgcGFja2FnZXMgd2hpY2ggY29udGVudCBkZXBlbmQgb24gTUFDSElORV9GRUFUVVJFUyBuZWVkIHRvIGJlIE1BQ0hJTkVfQVJDSAorIworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKK2luaGVyaXQgYmx1ZXRvb3RoCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAnIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgICAgICAgICBwYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlIFwKKyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAicGFja2FnZWdyb3VwLWJhc2UtYWNwaSIsICIiLGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhbHNhIiwgInBhY2thZ2Vncm91cC1iYXNlLWFsc2EiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1hcG0iLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImV4dDIiLCAicGFja2FnZWdyb3VwLWJhc2UtZXh0MiIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidmZhdCIsICJwYWNrYWdlZ3JvdXAtYmFzZS12ZmF0IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJpcmRhIiwgInBhY2thZ2Vncm91cC1iYXNlLWlyZGEiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAia2V5Ym9hcmQiLCAicGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjaSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1wY2kiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGNtY2lhIiwgInBhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGhvbmUiLCAicGFja2FnZWdyb3VwLWJhc2UtcGhvbmUiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInNlcmlhbCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmdhZGdldCIsICJwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmhvc3QiLCAicGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJibHVldG9vdGgiLCAicGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndpZmkiLCAicGFja2FnZWdyb3VwLWJhc2Utd2lmaSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICIzZyIsICJwYWNrYWdlZ3JvdXAtYmFzZS0zZyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJuZmMiLCAicGFja2FnZWdyb3VwLWJhc2UtbmZjIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImNyYW1mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXBzZWMiLCAicGFja2FnZWdyb3VwLWJhc2UtaXBzZWMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXB2NiIsICJwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm5mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1uZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAicHBwIiwgInBhY2thZ2Vncm91cC1iYXNlLXBwcCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzbWJmcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zbWJmcyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ6ZXJvY29uZiIsICJwYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJworCisjIE92ZXJyaWRlIGJ5IGRpc3RybyBpZiBuZWVkZWQKK1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzID89ICJrZXltYXBzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlIGNvbnRhaW4gc3R1ZmYgbmVlZGVkIGZvciBiYXNlIHN5c3RlbSAobWFjaGluZSByZWxhdGVkKQorIworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UgPSAiXAorICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSBcCisgICAgXAorICAgIHN5c2ZzdXRpbHMgXAorICAgIG1vZHVsZS1pbml0LXRvb2xzIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhcG0nLCAncGFja2FnZWdyb3VwLWJhc2UtYXBtJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhY3BpJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFjcGknLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2tleWJvYXJkJywgJ3BhY2thZ2Vncm91cC1iYXNlLWtleWJvYXJkJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdwaG9uZScsICdwYWNrYWdlZ3JvdXAtYmFzZS1waG9uZScsICcnLGQpfSBcCisgICAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFsc2EnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdleHQyJywgJ3BhY2thZ2Vncm91cC1iYXNlLWV4dDInLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd2ZmF0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXZmYXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdpcmRhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlyZGEnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY2knLCAncGFja2FnZWdyb3VwLWJhc2UtcGNpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmdhZGdldCcsICdwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdibHVldG9vdGgnLCAncGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnd2lmaScsICdwYWNrYWdlZ3JvdXAtYmFzZS13aWZpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnM2cnLCAncGFja2FnZWdyb3VwLWJhc2UtM2cnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICduZmMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZjJywgJycsZCl9IFwKKyAgICBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICduZnMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2NyYW1mcycsICdwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc21iZnMnLCAncGFja2FnZWdyb3VwLWJhc2Utc21iZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2JywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwc2VjJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlwc2VjJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BwcCcsICdwYWNrYWdlZ3JvdXAtYmFzZS1wcHAnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAncGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmYnLCAnJyxkKX0gXAorICAgICIKKworCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1ubHMtdXRmOCBcCisgICAga2VybmVsLW1vZHVsZS1pbnB1dCBcCisgICAga2VybmVsLW1vZHVsZS11aW5wdXQgXAorICAgIGtlcm5lbC1tb2R1bGUtcnRjLWRldiBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtcHJvYyBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtc3lzZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtdW5peCIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgPSAiXAorICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAke0FERF9XSUZJfSBcCisgICAgJHtBRERfQlR9IFwKKyAgICAke0FERF8zR30gXAorICAgICR7QUREX05GQ30gXAorICAgICIKKworQUREX1dJRkkgPSAiIgorQUREX0JUID0gIiIKK0FERF8zRyA9ICIiCitBRERfTkZDID0gIiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAjIElmIERpc3RybyB3YW50IHdpZmkgYW5kIG1hY2hpbmUgZmVhdHVyZSB3aWZpL3BjaS9wY21jaWEvdXNiaG9zdCAob25lIG9mIHRoZW0pCisgICAgIyB0aGVuIGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBpbiBwYWNrYWdlZ3JvdXAtYmFzZQorCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gc2V0KGQuZ2V0VmFyKCJESVNUUk9fRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpKQorICAgIG1hY2hpbmVfZmVhdHVyZXM9IHNldChkLmdldFZhcigiTUFDSElORV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkpCisKKyAgICBpZiAiYmx1ZXRvb3RoIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiYmx1ZXRvb3RoIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9CVCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGgiKQorCisgICAgaWYgIndpZmkiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJ3aWZpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9XSUZJIiwgInBhY2thZ2Vncm91cC1iYXNlLXdpZmkiKQorCisgICAgaWYgIjNnIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiM2ciIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgicGNtY2lhIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJwY2kiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInVzYmhvc3QiIGluIG1hY2hpbmVfZmVhdHVyZXMpOgorICAgICAgICBkLnNldFZhcigiQUREXzNHIiwgInBhY2thZ2Vncm91cC1iYXNlLTNnIikKKworICAgIGlmICJuZmMiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJuZmMiIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgidXNiaG9zdCIgaW4gbWFjaGluZV9mZWF0dXJlcyk6CisgICAgICAgIGQuc2V0VmFyKCJBRERfTkZDIiwgInBhY2thZ2Vncm91cC1iYXNlLW5mYyIpCit9CisKKyMKKyMgcGFja2FnZXMgYWRkZWQgYnkgZGlzdHJpYnV0aW9uCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSA9ICIke0RJU1RST30gZXh0cmFzIgorREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfREVQRU5EU30iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfUkRFUEVORFN9IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlID0gIiR7RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworIworIyBwYWNrYWdlcyBhZGRlZCBieSBtYWNoaW5lIGNvbmZpZworIworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIiR7TUFDSElORX0gZXh0cmFzIgorU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIkV4dHJhIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGZ1bGx5IHN1cHBvcnQgJHtNQUNISU5FfSBoYXJkd2FyZSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JERVBFTkRTfSIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1rZXlib2FyZCA9ICJLZXlib2FyZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2tleW1hcHN9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBjaSA9ICJQQ0kgYnVzIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY2kgPSAiXAorICAgIHBjaXV0aWxzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFjcGkgPSAiQUNQSSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWNwaSA9ICJcCisgICAgYWNwaWQgXAorICAgIGxpYmFjcGkgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJBUE0gc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYXBtfSBcCisgICAgYXBtZCIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1leHQyID0gImV4dDIgZmlsZXN5c3RlbSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0MiA9ICJcCisgICAgaGRwYXJtIFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJGQVQgZmlsZXN5c3RlbSBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1tc2RvcyBcCisgICAga2VybmVsLW1vZHVsZS12ZmF0IFwKKyAgICBrZXJuZWwtbW9kdWxlLW5scy1pc284ODU5LTEgXAorICAgIGtlcm5lbC1tb2R1bGUtbmxzLWNwNDM3IFwKKyAgICBkb3Nmc3Rvb2xzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiQUxTQSBzb3VuZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWxzYSA9ICJcCisgICAgYWxzYS11dGlscy1hbHNhY3RsIFwKKyAgICBhbHNhLXV0aWxzLWFsc2FtaXhlciBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYWxzYS1zdGF0ZX0iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtc25kLW1peGVyLW9zcyBcCisgICAga2VybmVsLW1vZHVsZS1zbmQtcGNtLW9zcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiUEMgY2FyZCBzbG90IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiXAorICAgIHBjbWNpYXV0aWxzIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wY21jaWEgXAorICAgIGtlcm5lbC1tb2R1bGUtYWlyby1jcyBcCisgICAga2VybmVsLW1vZHVsZS1wY25ldC1jcyBcCisgICAga2VybmVsLW1vZHVsZS1zZXJpYWwtY3MgXAorICAgIGtlcm5lbC1tb2R1bGUtaWRlLWNzIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlkZS1kaXNrIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCAna2VybmVsLW1vZHVsZS1ob3N0YXAtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLW9yaW5vY28tY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLXNwZWN0cnVtLWNzJywgJycsZCl9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJCbHVldG9vdGggc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJcCisgICAgJHtCTFVFWn0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXonLCAnJyxkKX0gXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWJsdWV0b290aCBcCisgICAga2VybmVsLW1vZHVsZS1sMmNhcCBcCisgICAga2VybmVsLW1vZHVsZS1yZmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaGNpLXZoY2kgXAorICAgIGtlcm5lbC1tb2R1bGUtYm5lcCBcCisgICAga2VybmVsLW1vZHVsZS1oaWRwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWhjaS11YXJ0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNjbyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmhvc3QnLCAna2VybmVsLW1vZHVsZS1oY2ktdXNiJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2tlcm5lbC1tb2R1bGUtYmx1ZXRvb3RoM2MtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1ibHVlY2FyZC1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdrZXJuZWwtbW9kdWxlLWJsdWV0b290aHVhcnQtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1kdGwxLWNzJywgJycsZCl9IFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXJkYSA9ICJJckRBIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBpcmRhLXV0aWxzIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YWZpY3AtaXIgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJkYSBcCisgICAga2VybmVsLW1vZHVsZS1pcmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaXJjb21tLXR0eSBcCisgICAga2VybmVsLW1vZHVsZS1pcmxhbiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwcHAnLCAna2VybmVsLW1vZHVsZS1pcm5ldCcsICcnLGQpfSBcCisgICAga2VybmVsLW1vZHVsZS1pcnBvcnQgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHkgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHktc2lyIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNpci1kZXYgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ2tlcm5lbC1tb2R1bGUtaXItdXNiJywgJycsZCl9ICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQgPSAiVVNCIGdhZGdldCBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdXNiZ2FkZ2V0ID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YTI3eF91ZGMgXAorICAgIGtlcm5lbC1tb2R1bGUtZ2FkZ2V0ZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1maWxlLXN0b3JhZ2UgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1zZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1ldGhlciIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlVTQiBob3N0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlwKKyAgICB1c2J1dGlscyAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtdWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtb2hjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtZWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiY29yZSBcCisgICAga2VybmVsLW1vZHVsZS11c2JoaWQgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNibmV0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNkLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS1zY3NpLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS11c2Jtb3VzZSBcCisgICAga2VybmVsLW1vZHVsZS1tb3VzZWRldiBcCisgICAga2VybmVsLW1vZHVsZS11c2JzZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiLXN0b3JhZ2UgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJQUFAgZGlhbC11cCBwcm90b2NvbCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtcHBwID0gIlwKKyAgICBwcHAgXAorICAgIHBwcC1kaWFsaW4iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wcHAtYXN5bmMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWRlZmxhdGUgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWdlbmVyaWMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLW1wcGUgXAorICAgIGtlcm5lbC1tb2R1bGUtc2xoYyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYyA9ICJJUFNFQyBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXBzZWMiCisKKyMKKyMgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBjb250YWluIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGdldCBXaUZpIHdvcmtpbmcKKyMgV0VQL1dQQSBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIHN1cHBvcnRlZCBvdXQtb2YtYm94CisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXdpZmkgPSAiV2lGaSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Utd2lmaSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfd2lyZWxlc3MtdG9vbHN9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2hvc3RhcC11dGlscycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjaScsICdob3N0YXAtdXRpbHMnLCAnJyxkKX0gXAorICAgIHdwYS1zdXBwbGljYW50IgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS13aWZpID0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiaG9zdCcsICdrZXJuZWwtbW9kdWxlLXpkMTIxMXJ3JywgJycsZCl9IFwKKyAgICBrZXJuZWwtbW9kdWxlLWllZWU4MDIxMS1jcnlwdCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtY2NtcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtdGtpcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtd2VwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWVjYiBcCisgICAga2VybmVsLW1vZHVsZS1hcmM0IFwKKyAgICBrZXJuZWwtbW9kdWxlLWNyeXB0b19hbGdhcGkgXAorICAgIGtlcm5lbC1tb2R1bGUtY3J5cHRvbWdyIFwKKyAgICBrZXJuZWwtbW9kdWxlLW1pY2hhZWwtbWljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcy1nZW5lcmljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIG5lYXJkIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtbmZjIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIkNlbGx1bGFyIGRhdGEgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIlwKKyAgICBvZm9ubyIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtM2cgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY2RjLWFjbSBcCisgICAga2VybmVsLW1vZHVsZS1jZGMtd2RtIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlNNQiBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWNpZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtc21iZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtY3JhbWZzID0gImNyYW1mcyBmaWxlc3lzdGVtIHN1cHBvcnQiCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY3JhbWZzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlLW5mcyBwcm92aWRlcyBPTkxZIGNsaWVudCBzdXBwb3J0IC0gc2VydmVyIGlzIGluIG5mcy11dGlscyBwYWNrYWdlCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJORlMgbmV0d29yayBmaWxlc3lzdGVtIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZnMgPSAiXAorICAgIHJwY2JpbmQiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1uZnMgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mID0gIlplcm9jb25mIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiA9ICJcCisgICAgYXZhaGktZGFlbW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmZfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiXAorICAgIGxpYm5zcy1tZG5zIFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXB2NiA9ICJJUHY2IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcHY2ID0gIlwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlwdjYgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXB2NiAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2Utc2VyaWFsID0gIlNlcmlhbCBwb3J0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwgPSAiXAorICAgIHNldHNlcmlhbCBcCisgICAgbHJ6c3ogIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBob25lID0gIkNlbGx1bGFyIHRlbGVwaG9ueSAodm9pY2UpIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1waG9uZSA9ICJcCisgICAgb2Zvbm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1ib290LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjUzNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYgpAQCAtMCwwICsxLDQ3IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJNaW5pbWFsIGJvb3QgcmVxdWlyZW1lbnRzIgorREVTQ1JJUFRJT04gPSAiVGhlIG1pbmltYWwgc2V0IG9mIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGJvb3QgdGhlIHN5c3RlbSIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjE3IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCisjCisjIFNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIHdpdGggcGFja2FnZXMgZXNzZW50aWFsIGZvciBkZXZpY2UgYm9vdHVwCisjCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKKworIyBEaXN0cm8gY2FuIG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgVklSVFVBTC1SVU5USU1FIHByb3ZpZGVyczoKK1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA/PSAidWRldiIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID89ICJidXN5Ym94IgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA/PSAic3lzdmluaXQiCitWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPz0gImluaXRzY3JpcHRzIgorVklSVFVBTC1SVU5USU1FX2tleW1hcHMgPz0gImtleW1hcHMiCisKK1NZU1ZJTklUX1NDUklQVFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncnRjJywgJ2J1c3lib3gtaHdjbG9jaycsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICBtb2R1dGlscy1pbml0c2NyaXB0cyBcCisgICAgICAgICAgICAgICAgICAgIGluaXQtaWZ1cGRvd24gXAorICAgICAgICAgICAgICAgICAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0c30gXAorICAgICAgICAgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJhc2UtZmlsZXMgXAorICAgIGJhc2UtcGFzc3dkIFwKKyAgICBidXN5Ym94IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3Zpbml0IiwgIiR7U1lTVklOSVRfU0NSSVBUU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJrZXlib2FyZCIsICIke1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzfSIsICIiLCBkKX0gXAorICAgIG5ldGJhc2UgXAorICAgICR7VklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IFwKKyAgICAke01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgICR7TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFN9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZWQyNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwuYmIKQEAgLTAsMCArMSwyOSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0LCBJbmMuCisjCisKK1NVTU1BUlkgPSAiRXNzZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCA9ICJcCisgICAgYXV0b2NvbmYgXAorICAgIGF1dG9tYWtlIFwKKyAgICBiaW51dGlscyBcCisgICAgYmludXRpbHMtc3ltbGlua3MgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBnY2MgXAorICAgIGdjYy1zeW1saW5rcyBcCisgICAgZysrIFwKKyAgICBnKystc3ltbGlua3MgXAorICAgIGdldHRleHQgXAorICAgIG1ha2UgXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlidG9vbCBcCisgICAgcGtnY29uZmlnIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiMDEzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiUmVtb3RlIGRlYnVnZ2luZyB0b29scyBmb3IgRWNsaXBzZSBpbnRlZ3JhdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZ2Ric2VydmVyIFwKKyAgICB0Y2YtYWdlbnQgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODJkM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIk5GUyBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjIiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyICR7UE59LWNsaWVudCIKKworU1VNTUFSWV8ke1BOfS1jbGllbnQgPSAiTkZTIGNsaWVudCIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJuZnMtdXRpbHMtY2xpZW50IgorCitTVU1NQVJZXyR7UE59LXNlcnZlciA9ICJORlMgc2VydmVyIgorUkRFUEVORFNfJHtQTn0tc2VydmVyID0gIlwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWRkMGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCkBAIC0wLDAgKzEsODMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlNvZnR3YXJlIGRldmVsb3BtZW50IHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworI1BBQ0tBR0VGVU5DUyA9KyAnZ2VuZXJhdGVfc2RrX3BrZ3MnCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgXAorICAgIGNvcmV1dGlscyBcCisgICAgY2NhY2hlIFwKKyAgICBkaWZmdXRpbHMgXAorICAgIGludGx0b29sIFwKKyAgICBwZXJsLW1vZHVsZS1yZSBcCisgICAgcGVybC1tb2R1bGUtdGV4dC13cmFwIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIHF1aWx0IFwKKyAgICBsZXNzIFwKKyAgICBsZGQgXAorICAgIGZpbGUgXAorICAgIHRjbCIKKworU0FOSVRJWkVSUyA9ICJsaWJhc2FuLWRldiBsaWJ1YnNhbi1kZXYiCitTQU5JVElaRVJTX2FhcmNoNjQgPSAiIgorU0FOSVRJWkVSU19taXBzID0gIiIKK1NBTklUSVpFUlNfbWlwczY0ID0gIiIKK1NBTklUSVpFUlNfbWlwczY0bjMyID0gIiIKK1NBTklUSVpFUlNfcG93ZXJwYzY0ID0gIiIKK1NBTklUSVpFUlNfc3BhcmMgPSAiIgorU0FOSVRJWkVSU19saWJjLW11c2wgPSAiIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiXAorICAgIGxpYmdvbXAgXAorICAgIGxpYmdvbXAtZGV2IFwKKyAgICAke1NBTklUSVpFUlN9IgorCisjcHl0aG9uIGdlbmVyYXRlX3Nka19wa2dzICgpIHsKKyMgICAgcG9reV9wa2dzID0gcmVhZF9wa2dkYXRhKCdwYWNrYWdlZ3JvdXAtY29yZScsIGQpWydQQUNLQUdFUyddCisjICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisjICAgIGZvciBwa2cgaW4gcG9reV9wa2dzLnNwbGl0KCk6CisjICAgICAgICBuZXdwa2cgPSBwa2cucmVwbGFjZSgncGFja2FnZWdyb3VwLWNvcmUnLCAncGFja2FnZWdyb3VwLWNvcmUtc2RrJykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggb2YgdGhlIHRhc2sgcGFja2FnZXMsIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2RrIHRhc2sKKyMgICAgICAgIHBrZ3MuYXBwZW5kKG5ld3BrZykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggc2RrIHRhc2ssIHRha2UgdGhlIHJkZXBlbmRzIG9mIHRoZSBub24tc2RrIHRhc2ssIGFuZCB0dXJuCisjICAgICAgICAjIHRoYXQgaW50byBycmVjb21tZW5kcyB1cG9uIHRoZSAtZGV2IHZlcnNpb25zIG9mIHRob3NlLCBub3QgdW5saWtlCisjICAgICAgICAjIHRoZSBwYWNrYWdlIGRlcGNoYWluIGNvZGUKKyMgICAgICAgIHNwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyMKKyMgICAgICAgIHJkZXBlbmRzID0gZXhwbG9kZV9kZXBzKHNwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgcGtnKSBvciAnJykKKyMgICAgICAgIHJyZWNsaXN0ID0gW10KKyMKKyMgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHM6CisjICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgbmFtZSA9IHNwbGl0X2RlcGVuZFswXS5zdHJpcCgpCisjICAgICAgICAgICAgaWYgcGFja2FnZWQoJyVzLWRldicgJSBuYW1lLCBkKToKKyMgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICBkZXBwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKG5hbWUsIGQpCisjICAgICAgICAgICAgICAgIHJkZXBlbmRzMiA9IGV4cGxvZGVfZGVwcyhkZXBwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgbmFtZSkgb3IgJycpCisjICAgICAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHMyOgorIyAgICAgICAgICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXRfZGVwZW5kWzBdLnN0cmlwKCkKKyMgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VkKCclcy1kZXYnICUgbmFtZSwgZCk6CisjICAgICAgICAgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMKKyMgICAgICAgICAgICBvbGRycmVjID0gZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgRmFsc2UpIG9yICcnCisjICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgb2xkcnJlYyArICcgJyArICcgJy5qb2luKHJyZWNsaXN0KSkKKyMgICAgICAgICAgICAjIGJiLm5vdGUoJ1JSRUNPTU1FTkRTXyVzID0gIiVzIicgJSAobmV3cGtnLCBkLmdldFZhcignUlJFQ09NTUVORFNfJXMnICUgbmV3cGtnLCBGYWxzZSkpKQorIworIyAgICAjIGJiLm5vdGUoJ3BrZ3MgaXMgJXMnICUgcGtncykKKyMgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGtncykpCisjfQorIworI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wYWNrYWdlZ3JvdXAtY29yZS1zZGstLioiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTk5NDZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYgpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiRHJvcGJlYXIgU1NIIGNsaWVudC9zZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJkcm9wYmVhciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQyMGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoLmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJPcGVuU1NIIFNTSCBjbGllbnQvc2VydmVyIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfJHtQTn0gPSAib3BlbnNzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjVlNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgbGliZ2NjIFwKKyAgICBsaWJnY2MtZGV2IFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgICR7TElCQ19ERVBFTkRFTkNJRVN9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNDdiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgpAQCAtMCwwICsxLDIwIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJEZWJ1Z2dpbmcgdG9vbHMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUFIgPSAicjMiCisKK01UUkFDRSA9ICIiCitNVFJBQ0VfbGliYy1nbGliYyA9ICJsaWJjLW10cmFjZSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICBzdHJhY2UgXAorICAgICR7TVRSQUNFfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGY1OTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKQEAgLTAsMCArMSw4MSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiUHJvZmlsaW5nIHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQUk9GSUxFX1RPT0xTX1ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnc3lzcHJvZicsICcnLCBkKX0iCisjIHN5c3Byb2YgZG9lc24ndCBzdXBwb3J0IGFhcmNoNjQKK1BST0ZJTEVfVE9PTFNfWF9hYXJjaDY0ID0gIiIKK1BST0ZJTEVfVE9PTFNfU1lTVEVNRCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZC1hbmFseXplJywgJycsIGQpfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgIHBlcmYgXAorICAgIHRyYWNlLWNtZCBcCisgICAgYmxrdHJhY2UgXAorICAgICR7UFJPRklMRV9UT09MU19YfSBcCisgICAgJHtQUk9GSUxFX1RPT0xTX1NZU1RFTUR9IFwKKyAgICAiCisKK1BST0ZJTEVUT09MUyA9ICJcCisgICAgcG93ZXJ0b3AgXAorICAgIGxhdGVuY3l0b3AgXAorICAgICIKKworIyBzeXN0ZW10YXAgbmVlZHMgZWxmdXRpbHMgd2hpY2ggaXMgbm90IGZ1bGx5IGJ1aWxkYWJsZSBvbiB1Y2xpYmMKKyMgaGVuY2Ugd2UgZXhjbHVkZSBpdCBmcm9tIHVjbGliYyBiYXNlZCBidWlsZHMKK1NZU1RFTVRBUCA9ICJzeXN0ZW10YXAiCitTWVNURU1UQVBfbGliYy11Y2xpYmMgPSAiIgorU1lTVEVNVEFQX21pcHMgPSAiIgorU1lTVEVNVEFQX21pcHM2NCA9ICIiCitTWVNURU1UQVBfbWlwczY0bjMyID0gIiIKK1NZU1RFTVRBUF9hYXJjaDY0ID0gIiIKKworIyBsdHRuZy11c3QgdXNlcyBzY2hlZF9nZXRjcHUoKSB3aGljaCBpcyBub3QgdGhlcmUgb24gdWNsaWJjCisjIGZvciBzb21lIG9mIHRoZSBhcmNoaXRlY3R1cmVzIGl0IGNhbiBiZSBwYXRjaGVkIHRvIGNhbGwgdGhlCisjIHN5c2NhbGwgZGlyZWN0bHkgYnV0IGZvciB4ODZfNjQgX19OUl9nZXRjcHUgaXMgYSB2c3lzY2FsbAorIyB3aGljaCBtZWFucyB3ZSBjYW4gbm90IHVzZSBzeXNjYWxsKCkgdG8gY2FsbCBpdC4gU28gd2UgaWdub3JlCisjIGl0IGZvciB4ODZfNjQvdWNsaWJjCisKK0xUVE5HVVNUID0gImx0dG5nLXVzdCIKK0xUVE5HVVNUX2xpYmMtdWNsaWJjID0gIiIKK0xUVE5HVVNUX2FhcmNoNjQgPSAiIgorCitMVFROR1RPT0xTID0gImx0dG5nLXRvb2xzIgorTFRUTkdUT09MU19hYXJjaDY0ID0gIiIKKworTFRUTkdNT0RVTEVTID0gImx0dG5nLW1vZHVsZXMiCitMVFROR01PRFVMRVNfYWFyY2g2NCA9ICIiCisKK0JBQkVMVFJBQ0UgPSAiYmFiZWx0cmFjZSIKK0JBQkVMVFJBQ0VfYWFyY2g2NCA9ICIiCisKKyMgdmFsZ3JpbmQgZG9lcyBub3Qgd29yayBvbiBtaXBzCisKK1ZBTEdSSU5EID0gInZhbGdyaW5kIgorVkFMR1JJTkRfbGliYy11Y2xpYmMgPSAiIgorVkFMR1JJTkRfbWlwcyA9ICIiCitWQUxHUklORF9taXBzNjQgPSAiIgorVkFMR1JJTkRfbWlwczY0bjMyID0gIiIKK1ZBTEdSSU5EX2FybSA9ICIiCitWQUxHUklORF9hYXJjaDY0ID0gIiIKKworIyAgICBleG1hcC1jb25zb2xlCisjICAgIGV4bWFwLXNlcnZlcgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtQUk9GSUxFVE9PTFN9IFwKKyAgICAke0xUVE5HVVNUfSBcCisgICAgJHtMVFROR1RPT0xTfSBcCisgICAgJHtMVFROR01PRFVMRVN9IFwKKyAgICAke0JBQkVMVFJBQ0V9IFwKKyAgICAke1NZU1RFTVRBUH0gXAorICAgICR7VkFMR1JJTkR9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViMzk4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcy5iYgpAQCAtMCwwICsxLDU2IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJUZXN0aW5nIHRvb2xzL2FwcGxpY2F0aW9ucyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyMiIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworIyBrZXhlYy10b29scyBkb2Vzbid0IHdvcmsgb24gTWlwcworS0VYRUNUT09MUyA/PSAia2V4ZWMiCitLRVhFQ1RPT0xTX21pcHMgPz0gIiIKK0tFWEVDVE9PTFNfbWlwc2VsID89ICIiCitLRVhFQ1RPT0xTX3Bvd2VycGMgPz0gIiIKK0tFWEVDVE9PTFNfZTU1MDAtNjRiID89ICIiCitLRVhFQ1RPT0xTX2FhcmNoNjQgPz0gIiIKKworWDExR0xUT09MUyA9ICJcCisgICAgbWVzYS1kZW1vcyBcCisgICAgcGlnbGl0IFwKKyAgICAiCisKKzNHVE9PTFMgPSAiXAorICAgIG9mb25vLXRlc3RzIFwKKyAgICAiCisKK1gxMVRPT0xTID0gIlwKKyAgICBmc3Rlc3RzIFwKKyAgICBnc3QtcGxheWVyLWJpbiBcCisgICAgeDExcGVyZiBcCisgICAgeHJlc3RvcCBcCisgICAgeHdpbmluZm8gXAorICAgIHhwcm9wIFwKKyAgICB4dmlkZW8tdGVzdHMgXAorICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJsa3Rvb2wgXAorICAgIHRzbGliLWNhbGlicmF0ZSBcCisgICAgdHNsaWItdGVzdHMgXAorICAgIGxyenN6IFwKKyAgICAke0tFWEVDVE9PTFN9IFwKKyAgICBhbHNhLXV0aWxzLWFtaXhlciBcCisgICAgYWxzYS11dGlscy1hcGxheSBcCisgICAgbHRwIFwKKyAgICBjb25ubWFuLXRvb2xzIFwKKyAgICBjb25ubWFuLXRlc3RzIFwKKyAgICBjb25ubWFuLWNsaWVudCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAiJHtYMTFUT09MU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMSBvcGVuZ2wnLCAiJHtYMTFHTFRPT0xTfSIsICIiLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAiJHszR1RPT0xTfSIsICIiLCBkKX0gXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGRkOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiSG9zdCBTREsgcGFja2FnZSBmb3IgY3Jvc3MgY2FuYWRpYW4gdG9vbGNoYWluIgorUE4gPSAicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjcm9zcy1jYW5hZGlhbiBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSA9ICIxIgorCisjIFVzZSBpbmRpcmVjdGlvbiB0byBzdG9wIHRoZXNlIGJlaW5nIGV4cGFuZGVkIHByZW1hdHVyZWx5CitCSU5VVElMUyA9ICJiaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0NDID0gImdjYy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0RCID0gImdkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdCSU5VVElMUycpfSBcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdHQ0MnKX0gXAorICAgICR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnR0RCJyl9IFwKKyAgICBtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0gXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGJlMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCkBAIC0wLDAgKzEsMjAyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIlNlbGYtaG9zdGluZyIKK0RFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHJ1biB0aGUgYnVpbGQgc3lzdGVtIgorUFIgPSAicjEzIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwICBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24gbGlieDExLWRldgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWRlYnVnIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZGVidWcgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1zZGsgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWdyYXBoaWNzIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyA9ICJcCisgICAgY29ubm1hbiBcCisgICAgY29ubm1hbi1wbHVnaW4tZXRoZXJuZXQgXAorICAgIGRoY3AtY2xpZW50IFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMgXAorICAgIGUyZnNwcm9ncy10dW5lMmZzIFwKKyAgICBoZHBhcm0gXAorICAgIGlwdGFibGVzIFwKKyAgICBsc2IgXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBwYXJ0ZWQgXAorICAgIHBzZXVkbyBcCisgICAgc2NyZWVuIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ob3N0LXRvb2xzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXR1biBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLXJhdyBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW5hdCBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW1hbmdsZSBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisJIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrID0gIlwKKyAgICBhdXRvY29uZiBcCisgICAgYXV0b21ha2UgXAorICAgIGJpbnV0aWxzIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCisgICAgY2NhY2hlIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBkaXN0Y2MgXAorICAgIGdsaWJjLWdjb252LWlibTg1MCBcCisgICAgZmlsZSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBnKysgXAorICAgIGcrKy1zeW1saW5rcyBcCisgICAgZ2NjIFwKKyAgICBnY2Mtc3ltbGlua3MgXAorICAgIGludGx0b29sIFwKKyAgICBsZGQgXAorICAgIGxlc3MgXAorICAgIGxpYnNzcCBcCisgICAgbGlic3NwLWRldiBcCisgICAgbGlic3NwLXN0YXRpY2RldiBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystZGV2IFwKKyAgICBsaWJ0b29sIFwKKyAgICBtYWtlIFwKKyAgICBta3RlbXAgXAorICAgIHBlcmwtbW9kdWxlLXJlIFwKKyAgICBwZXJsLW1vZHVsZS10ZXh0LXdyYXAgXAorICAgIHBrZ2NvbmZpZyBcCisgICAgcXVpbHQgXAorICAgIHNlZCBcCisgICAgIgorIyBnbGliYy11dGlsczogZm9yIHJwY2dlbgorUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLXNka19hcHBlbmRfbGliYy1nbGliYyA9ICJcCisgICAgZ2xpYmMtdXRpbHMgXAorICAgICIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1kZWJ1ZyA9ICIgXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICByc3luYyBcCisgICAgc3RyYWNlIFwKKyAgICB0Y2YtYWdlbnQiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWV4dGVuZGVkID0gIlwKKyAgICBiemlwMiBcCisgICAgY2hrY29uZmlnIFwKKyAgICBjaHJwYXRoIFwKKyAgICBjcGlvIFwKKyAgICBjdXJsIFwKKyAgICBkaWZmc3RhdCBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZXhwYXQgXAorICAgIGdhd2sgXAorICAgIGdkYm0gXAorICAgIGdldHRleHQgXAorICAgIGdldHRleHQtcnVudGltZSBcCisgICAgZ2l0IFwKKyAgICBnaXQtcGVybHRvb2xzIFwKKyAgICBncmVwIFwKKyAgICBncm9mZiBcCisgICAgZ3ppcCBcCisgICAgc2V0dGluZ3MtZGFlbW9uIFwKKyAgICBoaWNvbG9yLWljb24tdGhlbWUgXAorICAgIHNhdG8taWNvbi10aGVtZSBcCisgICAgbGliYWlvIFwKKyAgICBsaWJ1c2IxIFwKKyAgICBsaWJ4bWwyIFwKKyAgICBscnpzeiBcCisgICAgbHNvZiBcCisgICAgbHpvIFwKKyAgICBtYW4gXAorICAgIG1hbi1wYWdlcyBcCisgICAgbWRhZG0gXAorICAgIG1pbmljb20gXAorICAgIG10b29scyBcCisgICAgbmN1cnNlcyBcCisgICAgbmN1cnNlcy10ZXJtaW5mby1iYXNlIFwKKyAgICBuZW9uIFwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgIG9wZW5zc2wgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgIG9wa2cgXAorICAgIG9wa2ctdXRpbHMgXAorICAgIHBhdGNoIFwKKyAgICBwZXJsIFwKKyAgICBwZXJsLWRldiBcCisgICAgcGVybC1tb2R1bGVzIFwKKyAgICBwZXJsLXBvZCBcCisgICAgJHtQVEh9IFwKKyAgICBweXRob24gXAorICAgIHB5dGhvbi1jb21waWxlciBcCisgICAgcHl0aG9uLWdpdCBcCisgICAgcHl0aG9uLW1pc2MgXAorICAgIHB5dGhvbi1tb2R1bGVzIFwKKyAgICBweXRob24tcnBtIFwKKyAgICBxdW90YSBcCisgICAgcmVhZGxpbmUgXAorICAgIHJwbSBcCisgICAgc2V0c2VyaWFsIFwKKyAgICBzb2NhdCBcCisgICAgc3VidmVyc2lvbiBcCisgICAgc3VkbyBcCisgICAgc3lzc3RhdCBcCisgICAgdGFyIFwKKyAgICB0Y2wgXAorICAgIHRleGkyaHRtbCBcCisgICAgdGV4aW5mbyBcCisgICAgdW56aXAgXAorICAgIHVzYnV0aWxzIFwKKyAgICB3YXRjaGRvZyBcCisgICAgd2dldCBcCisgICAgd2hpY2ggXAorICAgIHhpbmV0ZCBcCisgICAgemlwIFwKKyAgICB6bGliIFwKKyAgICB4eiBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyA9ICJcCisgICAgYnVpbGRlciBcCisgICAgbGliZ2wgXAorICAgIGxpYmdsLWRldiBcCisgICAgbGliZ2x1IFwKKyAgICBsaWJnbHUtZGV2IFwKKyAgICBsaWJzZGwgXAorICAgIGxpYnNkbC1kZXYgXAorICAgIGxpYngxMS1kZXYgXAorICAgIHB5dGhvbi1weWd0ayBcCisgICAgZ3RrLXRoZW1lLWNsZWFybG9va3MgXAorICAgIHhkZy11dGlscyBcCisgICAgZXBpcGhhbnkgXAorICAgIGxlYWZwYWQgXAorICAgIHBjbWFuZm0gXAorICAgIHZ0ZSBcCisgICAgIgorUFRIID0gInB0aCIKK1BUSF9saWJjLXVjbGliYyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvMDAwMS1wc3BsYXNoLWZiLUNvbnZlcnQtcHNwbGFzaF9mYl9wbG90X3BpeGVsLXRvLWEtc3RhdGljLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2IzYzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDhmNWRlMTJjYzc1YmZhYTg0MDBhZGYzMmYzMGMwMTVkOGY4MTM1NDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMiBBdWcgMjAxNSAwNzoxMjoyMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBwc3BsYXNoLWZiOiBDb252ZXJ0IHBzcGxhc2hfZmJfcGxvdF9waXhlbCgpIHRvIGEgc3RhdGljCisgaW5saW5lCisKK1RoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgb3V0c2lkZSBwc3BsYXNoLWZiLmMgYW5kIGJ5IG1ha2luZyBpdAorc3RhdGljIGlubGluZSB3ZSBrZWVwIHRoZSBwZXJmb3JtYW5jZSBhbmQgYWxzbyBtYWtlIGl0IHBvcnRhYmxlIGFjcm9zcworbXVsdGlwbGUgY29tcGlsZXJzIGFuZCBnY2MgdmVyc2lvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBwc3BsYXNoLWZiLmMgfCAyICstCisgcHNwbGFzaC1mYi5oIHwgOCAtLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wc3BsYXNoLWZiLmMgYi9wc3BsYXNoLWZiLmMKK2luZGV4IGJkOWNkOWQuLjZkMjM1ZGIgMTAwNjQ0CistLS0gYS9wc3BsYXNoLWZiLmMKKysrKyBiL3BzcGxhc2gtZmIuYworQEAgLTI2MCw3ICsyNjAsNyBAQCBwc3BsYXNoX2ZiX25ldyAoaW50IGFuZ2xlKQorIAorICNkZWZpbmUgT0ZGU0VUKGZiLHgseSkgKCgoeSkgKiAoZmIpLT5zdHJpZGUpICsgKCh4KSAqICgoZmIpLT5icHAgPj4gMykpKQorIAorLWlubGluZSB2b2lkCisrc3RhdGljIGlubGluZSB2b2lkCisgcHNwbGFzaF9mYl9wbG90X3BpeGVsIChQU3BsYXNoRkIgICAgKmZiLAorIAkJICAgICAgIGludCAgICAgICAgICB4LAorIAkJICAgICAgIGludCAgICAgICAgICB5LAorZGlmZiAtLWdpdCBhL3BzcGxhc2gtZmIuaCBiL3BzcGxhc2gtZmIuaAoraW5kZXggNDI1OTJlZC4uYzZjMzE0NCAxMDA2NDQKKy0tLSBhL3BzcGxhc2gtZmIuaAorKysrIGIvcHNwbGFzaC1mYi5oCitAQCAtNTcsMTQgKzU3LDYgQEAgcHNwbGFzaF9mYl9kZXN0cm95IChQU3BsYXNoRkIgKmZiKTsKKyBQU3BsYXNoRkIqCisgcHNwbGFzaF9mYl9uZXcgKGludCBhbmdsZSk7CisgCistaW5saW5lIHZvaWQKKy1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwgKFBTcGxhc2hGQiAgICAqZmIsIAorLQkJICAgICAgIGludCAgICAgICAgICB4LCAKKy0JCSAgICAgICBpbnQgICAgICAgICAgeSwgCistCQkgICAgICAgdWludDggICAgICAgIHJlZCwKKy0JCSAgICAgICB1aW50OCAgICAgICAgZ3JlZW4sCistCQkgICAgICAgdWludDggICAgICAgIGJsdWUpOworLQorIHZvaWQKKyBwc3BsYXNoX2ZiX2RyYXdfcmVjdCAoUFNwbGFzaEZCICAgICpmYiwgCisgCQkgICAgICBpbnQgICAgICAgICAgeCwgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2Yzg1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaCAKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHBzcGxhc2gKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHBzcGxhc2g9ZmFsc2UpCisJCWVjaG8gIkJvb3Qgc3BsYXNoc2NyZWVuIGRpc2FibGVkIiAKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworZXhwb3J0IFRNUERJUj0vbW50Ly5wc3BsYXNoCittb3VudCB0bXBmcyAtdCB0bXBmcyAkVE1QRElSIC1vLHNpemU9NDBrCisKK3JvdGF0aW9uPTAKK2lmIFsgLWUgL2V0Yy9yb3RhdGlvbiBdOyB0aGVuCisJcmVhZCByb3RhdGlvbiA8IC9ldGMvcm90YXRpb24KK2ZpCisKKy91c3IvYmluL3BzcGxhc2ggLS1hbmdsZSAkcm90YXRpb24gJgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDU2YWEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApAQCAtMCwwICsxLDEyNTkgQEAKKy8qIEdka1BpeGJ1ZiBSR0IgQy1Tb3VyY2UgaW1hZ2UgZHVtcCAxLWJ5dGUtcnVuLWxlbmd0aC1lbmNvZGVkICovCisKKyNkZWZpbmUgUE9LWV9JTUdfUk9XU1RSSURFICgxOTIwKQorI2RlZmluZSBQT0tZX0lNR19XSURUSCAoNjQwKQorI2RlZmluZSBQT0tZX0lNR19IRUlHSFQgKDQ4MCkKKyNkZWZpbmUgUE9LWV9JTUdfQllURVNfUEVSX1BJWEVMICgzKSAvKiAzOlJHQiwgNDpSR0JBICovCisjZGVmaW5lIFBPS1lfSU1HX1JMRV9QSVhFTF9EQVRBICgodWludDgqKSBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIzN1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MSIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3IiBcCisgICJcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM2M1wzNzZcMzc3XDM3NFwzXDM3M1wzNzUiIFwKKyAgIlwzNzJcMzYwXDM2NlwzNzBcMzUzXDM2MFwzNjNcMjAyXDM0N1wzNTVcMzU3XDVcMzQ2XDM1NFwzNTZcMzQ3XDM1NVwzNTciIFwKKyAgIlwzNTFcMzU2XDM2MFwzNjBcMzY2XDM3MFwzNzFcMzczXDM3MFwzNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzUzXDM3NlwzNzdcMzc0XDEwXDM1NiIgXAorICAiXDM2M1wzNjZcMzI0XDMzMVwzMzNcMjc3XDMwNFwzMDZcMjUyXDI2MlwyNzJcMjI3XDIzN1wyNDd9XDIyMFwyMzNwXDIwMyIgXAorICAiXDIxNmV3XDIwMlwyMTJdb3pcMTBkdlwyMDFuXDIwMVwyMTR+XDIxNVwyMjNcMjE2XDIzNlwyNDRcMjQ3XDI1N1wyNjciIFwKKyAgIlwyNzRcMzAxXDMwM1wzMjBcMzI2XDMzMFwzNTJcMzU3XDM2MlwzNTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzQ2XDM3NlwzNzdcMzc0XDVcMzY2IiBcCisgICJcMzcwXDM2NFwzMjBcMzI2XDMzMFwyNTVcMjY1XDI3NVwyMTBcMjI3XDIzNWp9XDIxMFwyMzJdb3pcNWd5XDIwNFwyMDQiIFwKKyAgIlwyMjNcMjMxXDI1MFwyNjBcMjcwXDMxNFwzMjFcMzI0XDM1NVwzNjJcMzY1XDM0NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNDJcMzc2XDM3NyIgXAorICAiXDM3NFw1XDM3M1wzNzVcMzcyXDMyN1wzMzRcMzM3XDI1M1wyNjNcMjczeFwyMTNcMjI3XnB7XDI0M11velw0cVwyMDQiIFwKKyAgIlwyMTdcMjQyXDI1MlwyNjJcMzIwXDMyNlwzMzBcMzY1XDM3MlwzNzVcMzQyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMzN1wzNzZcMzc3XDM3NCIgXAorICAiXDRcMzcxXDM3M1wzNzBcMzE3XDMyNFwzMjdcMjI1XDI0NVwyNTNld1wyMDJcMjUyXW96XDRidFwxNzdcMjExXDIzMFwyMzYiIFwKKyAgIlwzMDZcMzE0XDMxNlwzNjdcMzcxXDM2NlwzMzdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzM1XDM3NlwzNzdcMzc0XDNcMzMzXDM0MFwzNDNcMjM2IiBcCisgICJcMjQ2XDI1NmZ4XDIwM1wyNjBdb3pcM2J0XDE3N1wyMjVcMjM1XDI0NVwzMjBcMzI2XDMzMFwzMzVcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzMyIiBcCisgICJcMzc2XDM3N1wzNzRcM1wzNjdcMzcxXDM2NlwyNzZcMzAzXDMwNXVcMjEwXDIyNFwyNjZdb3pcM21cMjAwXDIxM1wyNTciIFwKKyAgIlwyNjdcMjc3XDM1NVwzNjJcMzY1XDMzMlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMzBcMzc2XDM3N1wzNzRcM1wzNTNcMzYwXDM2M1wyNTJcMjYyIiBcCisgICJcMjcyZnhcMjAzXDI3Ml1velwzYXN+XDIzMFwyNTBcMjU2XDM0MlwzNDdcMzUyXDMzMFwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMjZcMzc2XDM3NyIgXAorICAiXDM3NFwzXDM1MlwzNTdcMzYyXDIzNlwyNDZcMjU2YXN+XDI3Nl1velwzXnB7XDIxNlwyMzZcMjQ0XDM0MVwzNDZcMzUxIiBcCisgICJcMzI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDMyNFwzNzZcMzc3XDM3NFwzXDM1NFwzNjFcMzY0XDI0NlwyNTZcMjY2YXN+XDMwMl1velwzXnAiIFwKKyAgIntcMjI3XDIzN1wyNDdcMzQ2XDM1NFwzNTZcMzI0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMlwzNzZcMzc3XDM3NFwzXDM3MlwzNzRcMzcxXDI2NSIgXAorICAiXDI3NlwzMDZmeFwyMDNcMzA2XW96XDNhc35cMjUwXDI2MFwyNzBcMzYyXDM2N1wzNzFcMzIyXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzIwXDMyNlwzMzBwXDIwM1wyMTZcMzEyXW96XDJoelwyMDVcMzAyXDMwN1wzMTJcMzIxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzE3XDM3NlwzNzdcMzc0XDJcMzU2XDM2M1wzNjZcMjMxXDI0MVwyNTFcMzE2XW96XDJcMjA0XDIyM1wyMzFcMzQ1XDM1MiIgXAorICAiXDM1NVwzMTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMzE2XDM3NlwzNzdcMzc0XDJcMzExXDMxNlwzMjFpe1wyMDZcMzIwXW96XDJidFwxNzdcMjY0IiBcCisgICJcMjc0XDMwNVwzMTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzE0XDM3NlwzNzdcMzc0XDJcMzYyXDM2N1wzNzFcMjI2XDI0NlwyNTRcMzI0XW8iIFwKKyAgInpcMlwyMDZcMjI1XDIzM1wzNTNcMzYwXDM2M1wzMTRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEzXDM3NlwzNzdcMzc0XDJcMzM0XDM0MlwzNDRvXDIwMiIgXAorICAiXDIxNVwzMjZdb3pcMmd5XDIwNFwzMTVcMzIyXDMyNVwzMTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEyXDM3NlwzNzdcMzc0XDJcMzAyXDMwN1wzMTIiIFwKKyAgImFzflwzMzBdb3pcM15we1wyNTRcMjY0XDI3NFwzNzNcMzc1XDM3MlwzMTFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEwXDM3NlwzNzdcMzc0XDJcMzcyIiBcCisgICJcMzc0XDM3MVwyMzZcMjQ2XDI1NlwzMzRdb3pcMlwyMTBcMjI3XDIzNVwzNjBcMzY2XDM3MFwzMTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA3IiBcCisgICJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2XDM3MFwyMDVcMjI0XDIzMlwzMzZdb3pcMnNcMjA2XDIyMVwzNDdcMzU1XDM1NyIgXAorICAiXDMwN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzMDZcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N3RcMjA3XDIyMlwzNDBdb3pcMml7XDIwNlwzMzMiIFwKKyAgIlwzNDBcMzQzXDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDVcMzc2XDM3N1wzNzRcMlwzNDNcMzUwXDM1M2p9XDIxMFwyNTFdb3pcN2J0XDE3NyIgXAorICAid1wyMTJcMjI2XDIxNVwyMzRcMjQzXDIzNlwyNDZcMjU2XDI0NlwyNTZcMjY2XDI1NFwyNjRcMjc0XDI2NFwyNzRcMzA1IiBcCisgICJcMjAyXDMwMFwzMDVcMzEwXDdcMjY0XDI3NFwzMDVcMjU1XDI2NVwyNzVcMjUwXDI2MFwyNzBcMjMzXDI1MlwyNjFcMjIyIiBcCisgICJcMjQxXDI0N35cMjE1XDIyM2V3XDIwMlwyNTFdb3pcMmN1XDIwMFwzMjJcMzMwXDMzMlwzMDVcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA0XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzMzdcMzQ0XDM0Nml7XDIwNlwyNDVdb3pcNWp9XDIxMFwyMzBcMjQwXDI1MFwyNzBcMzAwXDMxMVwzMjIiIFwKKyAgIlwzMzBcMzMyXDM1MVwzNTZcMzYwXDIyMFwzNzZcMzc3XDM3NFw1XDM1NFwzNjFcMzY0XDMyNlwzMzNcMzM1XDMwMFwzMDUiIFwKKyAgIlwzMTBcMjM2XDI0NlwyNTZwXDIwM1wyMTZcMjQ1XW96XDJhc35cMzE2XDMyM1wzMjZcMzA0XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVneVwyMDRcMjQyXW96XDRld1wyMDJcMjIyXDI0MVwyNDdcMjc2XDMwM1wzMDVcMzQyIiBcCisgICJcMzQ3XDM1MlwyMzJcMzc2XDM3N1wzNzRcNFwzNTJcMzU3XDM2MlwzMDRcMzExXDMxNFwyMzNcMjQzXDI1M2p9XDIxMCIgXAorICAiXDI0Ml1velwyYXN+XDMxM1wzMjBcMzIyXDMwM1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDJcMzc2XDM3N1wzNzRcMlwzNDFcMzQ2XDM1MWh6IiBcCisgICJcMjA1XDI0MF1velw0X3F8XDIxMVwyMzBcMjM2XDMwN1wzMTVcMzE3XDM3MFwzNzJcMzY3XDI0MFwzNzZcMzc3XDM3NCIgXAorICAiXDRcMzczXDM3NVwzNzJcMzIwXDMyNlwzMzBcMjMxXDI0MVwyNTFidFwxNzdcMjQwXW96XDJhc35cMzE3XDMyNFwzMjciIFwKKyAgIlwzMDJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzAxXDM3NlwzNzdcMzc0XDJcMzQzXDM1MFwzNTNpe1wyMDZcMjM3XW96XDNxXDIwNFwyMTdcMjY2IiBcCisgICJcMjc3XDMwN1wzNTRcMzYxXDM2NFwyNDZcMzc2XDM3N1wzNzRcM1wzNjZcMzcwXDM2NFwzMDNcMzEwXDMxM1wxNzdcMjE2IiBcCisgICJcMjI0XDIzN11velwyYnRcMTc3XDMyNVwzMzJcMzM0XDMwMVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDBcMzc2XDM3N1wzNzRcMlwzNTVcMzYyXDM2NSIgXAorICAibFwxNzdcMjEyXDIzNl1velwzdVwyMTBcMjI0XDMwN1wzMTVcMzE3XDM3M1wzNzVcMzcyXDI1M1wzNzZcMzc3XDM3NFwyIiBcCisgICJcMzI0XDMzMVwzMzNcMjA0XDIyM1wyMzFcMjM2XW96XDJld1wyMDJcMzQxXDM0NlwzNTFcMzAwXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzY1XDM3MlwzNzVcMTc3XDIxNlwyMjRcMjM1XW96XDJ+XDIxNVwyMjNcMzE1XDMyMlwzMjVcMjYwIiBcCisgICJcMzc2XDM3N1wzNzRcMlwzMzFcMzM2XDM0MVwyMTFcMjMwXDIzNlwyMzVdb3pcMmxcMTc3XDIxMlwzNTNcMzYwXDM2MyIgXAorICAiXDI3N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNzdcMzc2XDM3N1wzNzRcMVwyMTRcMjMzXDI0MlwyMzRdb3pcMml7XDIwNlwzMDVcMzEyXDMxNSIgXAorICAiXDI2NFwzNzZcMzc3XDM3NFwyXDMyNFwzMzFcMzMzcVwyMDRcMjE3XDIzNF1velwydVwyMTBcMjI0XDM2N1wzNzFcMzY2IiBcCisgICJcMjc2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI3NlwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIzM11velwzXnB7XDI0MlwyNTJcMjYyXDM2MiIgXAorICAiXDM2N1wzNzFcMjY2XDM3NlwzNzdcMzc0XDNcMzcyXDM3NFwzNzFcMjYxXDI3MVwzMDJidFwxNzdcMjMzXW96XDFcMjI1IiBcCisgICJcMjM1XDI0NVwyNzZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjc1XDM3NlwzNzdcMzc0XDJcMzE3XDMyNFwzMjdecHtcMjMyXW96XDJ3XDIxMlwyMjYiIFwKKyAgIlwzMzVcMzQzXDM0NVwyNzJcMzc2XDM3N1wzNzRcMlwzNTFcMzU2XDM2MFwyMTFcMjMwXDIzNlwyMzNdb3pcMVwyNjRcMjc0IiBcCisgICJcMzA1XDI3NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzRcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N2V3XDIwMlwyMzJdb3pcMlwyNDJcMjUyIiBcCisgICJcMjYyXDM3MVwzNzNcMzcwXDIyNVwzNzZcMzc3XDM3NFwxMFwzMzZcMzY3XDM3NFwyNjJcMzU1XDM3MFwyMjBcMzQzXDM2MSIgXAorICAibVwzMzJcMzYxR1wzMTdcMzUzLFwzMTFcMzUyKFwzMDdcMzUwI1wzMDRcMzQ2XDIwMlwwXDMwMVwzNTBcMTBcMFwzMDQiIFwKKyAgIlwzNTIoXDMwN1wzNTAsXDMxMVwzNTJCXDMxNFwzNDdpXDMyNlwzNTZcMjA3XDM0MVwzNjRcMjYwXDM1M1wzNjZcMzMzIiBcCisgICJcMzY0XDM3MVwyMjZcMzc2XDM3N1wzNzRcMlwyNjZcMjc3XDMwN2FzflwyMzFdb3pcMl9xfFwzMjdcMzM0XDMzN1wyNzQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzNcMzc2XDM3N1wzNzRcMlwzNzNcMzc1XDM3Mn1cMjIwXDIzM1wyMzFdb3pcMmV3XDIwMlwzMTNcMzIwIiBcCisgICJcMzIyXDIyM1wzNzZcMzc3XDM3NFw0XDMzNFwzNjVcMzcyXDIzM1wzNDVcMzY0TVwzMjNcMzU3XDBcMzA0XDM1MlwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMFwzMDFcMzUwSlwzMjFcMzU1XDIxMVwzNDJcMzY1XDMxNFwzNjFcMzcyXDIyM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzMyXDMzN1wzNDJtXDIwMFwyMTNcMjMxXW96XDJsXDE3N1wyMTJcMzYwXDM2NlwzNzBcMjczXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjczXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMxXW96XDJ4XDIxM1wyMjdcMzQ3XDM1NVwzNTdcMjIxXDM3NiIgXAorICAiXDM3N1wzNzRcM1wzMzZcMzY3XDM3NFwyMDZcMzQwXDM2MypcMzEwXDM1MVwyMzJcMjVcMjc0XDM0NFwzI1wzMDRcMzQ2IiBcCisgICJ3XDMzM1wzNTZcMzE2XDM2M1wzNzRcMjIxXDM3NlwzNzdcMzc0XDJcMzYwXDM2NlwzNzBcMjE0XDIzM1wyNDJcMjMxXSIgXAorICAib3pcMVwyMjdcMjM3XDI0N1wyNzNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVfcXxcMjMwXW96IiBcCisgICJcMlwyMTBcMjI3XDIzNVwzNjRcMzcxXDM3NFwyMTdcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyNTZcMzUwXDM2NCIgXAorICAiQlwzMTRcMzQ3XDI0MFwyNVwyNzRcMzQ0XDMqXDMxMFwzNTFcMjMzXDM0NVwzNjRcMzY3XDM3NVwzNzdcMjE3XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNzNcMzc1XDM3MlwyNDJcMjUyXDI2MlwyMzFdb3pcMVwzMDVcMzEyXDMxNVwyNzJcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNzJcMzc0XDM3MXdcMjEyXDIyNlwyMzBdb3pcMlwyMzFcMjQxXDI1MVwzNzJcMzc0XDM3MVwyMTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3XDIzM1wzNDVcMzY0KFwzMDdcMzUwXDI0NFwyNVwyNzRcMzQ0XDNcMFwzMDIiIFwKKyAgIlwzNTFcMjA2XDM0MFwzNjNcMzU2XDM3M1wzNzRcMjE3XDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDJoIiBcCisgICJ6XDIwNVwzNTZcMzYzXDM2NlwyNzFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDFcMjQ2IiBcCisgICJcMjU2XDI2NlwyMTdcMzc2XDM3N1wzNzRcMlwyMzdcMzUwXDM2N1wwXDMwNFwzNTJcMjUwXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDdcMzQxXDM2NFwzNzBcMzc2XDM3N1wyMTZcMzc2XDM3N1wzNzRcMlwyNzdcMzA0XDMwNl9xfFwyMjddb3oiIFwKKyAgIlwxXDIzMVwyNDFcMjUxXDI3MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMlwzNDZcMzU0XDM1NmJ0XDE3N1wyMjddb3pcMSIgXAorICAiXDI1MVwyNjFcMjcxXDIxNlwzNzZcMzc3XDM3NFwyXDMxNVwzNjJcMzczMVwzMTNcMzU0XDI1NFwyNVwyNzRcMzQ0XDIiIFwKKyAgIihcMzA3XDM1MFwyNjJcMzU1XDM3MFwyMTZcMzc2XDM3N1wzNzRcMlwzMDVcMzEyXDMxNV5we1wyMjddb3pcMVwzMjJcMzMwIiBcCisgICJcMzMyXDI3MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjddb3pcMVwyMzNcMjUyXDI2MVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3bVwzMzJcMzYxXDBcMjc2XDM0NVwyNTdcMjVcMjc0XDM0NFwyTFwzMjJcMzU2IiBcCisgICJcMzU2XDM3M1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjI3XW96XDJ0XDIwN1wyMjJcMzczXDM3NSIgXAorICAiXDM3MlwyNjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY3XDM3NlwzNzdcMzc0XDFcMzI1XDMzMlwzMzRcMjI3XW96XDJcMjE0XDIzM1wyNDJcMzczIiBcCisgICJcMzc1XDM3MlwyMTRcMzc2XDM3N1wzNzRcMlwzMzNcMzY0XDM3MSxcMzExXDM1MlwyNjJcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDMwMVwzNTZcMzY2XDIxNVwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyN11velwxXDI3NFwzMDFcMzAzXDI2NyIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI2N1wzNzZcMzc3XDM3NFwxdlwyMTFcMjI1XDIyNl1velwyXDIwNVwyMjRcMjMyXDM2NVwzNzJcMzc1IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDI2NFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIwMyIgXAorICAiXDMzNFwzNjBcMzcwXDM3NlwzNzdcMjE0XDM3NlwzNzdcMzc0XDFcMjM2XDI0NlwyNTZcMjI2XW96XDJoelwyMDVcMzYyIiBcCisgICJcMzY3XDM3MVwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY2XDM3NlwzNzdcMzc0XDFcMzA3XDMxNVwzMTdcMjI2XW96XDJuXDIwMVwyMTQiIFwKKyAgIlwzNjBcMzY2XDM3MFwyMTRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyNzBcMjVcMjc0XDM0NFwySVwzMjBcMzU0XDM2NiIgXAorICAiXDM3M1wzNzZcMjEzXDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJcMjAzXDIyMlwyMzBcMjI2XW96XDFcMjU0XDI2NFwyNzQiIFwKKyAgIlwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJzXDIwNlwyMjFcMjI1XW96XDJhc35cMzMzXDM0MCIgXAorICAiXDM0M1wyMTNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N01cMzIzXDM1N1wyNzJcMjVcMjc0XDM0NFwyIiIxXDMxM1wzNTQiIFwKKyAgIlwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzNTNcMzYwXDM2M2l7XDIwNlwyMjVdb3pcMmV3XDIwMlwzNTdcMzY1IiBcCisgICJcMzY3XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjVcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjZdb3pcMVwyNjVcMjc2XDMwNlwyMTMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2QlwzMTRcMzQ3XDI3NFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzM2XDM2NyIgXAorICAiXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzMjJcMzMwXDMzMl5we1wyMjVdb3pcMVwyNTJcMjYyXDI3MlwyNjVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNjVcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjVdb3pcMVwyMTRcMjMzXDI0MlwyMTNcMzc2XDM3N1wzNzRcMlwzNjYiIFwKKyAgIlwzNzNcMzc2QlwzMTRcMzQ3XDI3NlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM3XDM3MFwzNzVcMjEzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyNTNcMjYzXDI3M1wyMjVdb3pcMmZ4XDIwM1wzNjdcMzcxXDM2NlwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMjJcMzMwXDMzMlwyMjVdb3pcMml7XDIwNlwzNjBcMzY2XDM3MFwyMTJcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3NyIgXAorICAiSVwzMjBcMzU0XDMwMFwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzU3XDM3NFwzNzVcMjEyXDM3NlwzNzdcMzc0XDJcMzczIiBcCisgICJcMzc1XDM3Mn5cMjE1XDIyM1wyMjVdb3pcMVwyNjRcMjc0XDMwNVwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMjEwIiBcCisgICJcMjI3XDIzNVwyMjVdb3pcMVwzMDNcMzEwXDMxM1wyMTNcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwzMDJcMjVcMjc0XDM0NCIgXAorICAiXDJCXDMxNFwzNDdcMzcwXDM3NlwzNzdcMjEyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVecHtcMjI0XW96XDJtXDIwMCIgXAorICAiXDIxM1wzNzNcMzc1XDM3MlwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYzXDM3NlwzNzdcMzc0XDJcMzQ1XDM1MlwzNTVecHtcMjI0XW96IiBcCisgICJcMX5cMjIxXDIzNVwyMTNcMzc2XDM3N1wzNzRcMXlcMzM2XDM2MFwzMDRcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMyIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjI1XW96XDFcMzE1XDMyMlwzMjVcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjUyXDI2MlwyNzJcMjI0XW96XDJfcXxcMzQxXDM0NlwzNTFcMjEyXDM3NlwzNzdcMzc0XDJcMjc0XDM1NSIgXAorICAiXDM3M1wwXDI3NlwzNDVcMzA1XDI1XDI3NFwzNDRcMVwyMjBcMzQzXDM2MVwyMTJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2IiBcCisgICJcMzcwaXtcMjA2XDIyNF1velwxXDIxMVwyMzBcMjM2XDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjJcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MSIgXAorICAiaXtcMjA2XDIyNF1velwxXDI1MFwyNjBcMjcwXDIxMlwzNzZcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMzA0XDM1MlwzMDYiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMxNlwzNjNcMzc0XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNCIgXAorICAiXW96XDJecHtcMzUyXDM1N1wzNjJcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MlwzNzZcMzc3XDM3NFwxXDMxNVwzMjJcMzI1XDIyNF1vIiBcCisgICJ6XDJkdlwyMDFcMzU3XDM2NVwzNjdcMjEyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjQwXDI1XDI3NFwzNDRcM1wwXDMwMiIgXAorICAiXDM1MSxcMzExXDM1MkpcMzIxXDM1NVwyMDNMXDMyMlwzNTZcMkJcMzE0XDM0NyNcMzA0XDM0NlwyNDBcMjVcMjc0XDM0NCIgXAorICAiXDIqXDMxMFwzNTFcMzY3XDM3NVwzNzdcMjEyXDM3NlwzNzdcMzc0XDFxXDIwNFwyMTdcMjI0XW96XDFcMjU3XDI2N1wyNzciIFwKKyAgIlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjI0XW96XDFcMjQ3XDI1N1wyNjdcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMzVcMjVcMjc0XDM0NFw0KlwzMTBcMzUxblwzMzNcMzYyXDI3M1wzNTRcMzcxIiBcCisgICJcMzYwXDM3NVwzNzZcMjEwXDM3NlwzNzdcMzc0XDRcMzU3XDM3NFwzNzVcMzAzXDM2MVwzNzBcMjA2XDM0MFwzNjMvXDMxMiIgXAorICAiXDM1M1wyMzVcMjVcMjc0XDM0NFwxd1wzMzNcMzU2XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNF1velwxIiBcCisgICJ2XDIxMVwyMjVcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1ZHZcMjAxXDIyM11velwyYXN+IiBcCisgICJcMzUzXDM2MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRcMFwzMDJcMzUxXDIzMlwyNVwyNzRcMzQ0XDMiIFwKKyAgIlwwXDI3NlwzNDVtXDMzMlwzNjFcMzM1XDM2NlwzNzNcMjIwXDM3NlwzNzdcMzc0XDJcMzM2XDM2N1wzNzQoXDMwN1wzNTAiIFwKKyAgIlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxIiBcCisgICJuXDIwMVwyMTRcMjI0XW96XDFcMzQzXDM1MFwzNTNcMjYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwxXDMxM1wzMjBcMzIyIiBcCisgICJcMjI0XW96XDFcMjMzXDI1MlwyNjFcMjEyXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTdcMjMxXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDZcMzQwXDM2M1wzNTdcMzc0XDM3NVwyMjJcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMzJcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDFcMjc2XDMwM1wzMDVcMjI0XW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW96XDJecHtcMzQ3XDM1NVwzNTciIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMlwzMTZcMzYzXDM3NFwwXDI3NlwzNDVcMjMwXDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzMzciIFwKKyAgIlwzNzBcMzc1XDIyM1wzNzZcMzc3XDM3NFwxa1wzMjdcMzU3XDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2NyIgXAorICAiXDM3NFwyMTVcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N2l7XDIwNlwyMjNdb3pcMVwxNzdcMjE2XDIyNFwyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMWt+XDIxMVwyMjNdb3pcMVwyMDVcMjI0XDIzMlwyMTJcMzc2XDM3N1wzNzRcMUoiIFwKKyAgIlwzMjFcMzU1XDIyN1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDI1N1wzNTFcMzY1XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzIiIFwKKyAgIlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTdcMzc2XDM3N1wzNzRcMVwyNDZcMjU2IiBcCisgICJcMjY2XDIyM11velwyXnB7XDM1NlwzNjNcMzY2XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwzMzVcMzQzXDM0NSIgXAorICAiXDIyNF1velwxXDMwM1wzMTBcMzEzXDIxMVwzNzZcMzc3XDM3NFwyXDMzM1wzNjRcMzcxXDBcMjc2XDM0NVwyMjZcMjUiIFwKKyAgIlwyNzRcMzQ0XDIjXDMwNFwzNDZcMzE2XDM2M1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NCIgXAorICAiXDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIyMFwzNzZcMzc3XDM3NFwxXDMzNVwzNDNcMzQ1XDIyNF1velwxXDMwNiIgXAorICAiXDMxNFwzMTZcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI2NFwyNzRcMzA1XDIyM11velwyY3VcMjAwXDM2NyIgXAorICAiXDM3MVwzNjZcMjExXDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjI2XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNDdcMzcwIiBcCisgICJcMzc2XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMjJcMzc2XDM3N1wzNzRcMXRcMjA3XDIyMlwyMjNdb3pcMVwyMzZcMjQ2XDI1NlwyNjBcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjNdb3pcMVwyMzFcMjQxXDI1MVwyMTFcMzc2XDM3N1wzNzRcMlwzNDdcMzcwIiBcCisgICJcMzc2XDBcMjc2XDM0NVwyMjVcMjVcMjc0XDM0NFwyKlwzMTBcMzUxXDM1N1wzNzRcMzc1XDIyNFwzNzZcMzc3XDM3NCIgXAorICAiXDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMjNcMzc2XDM3N1wzNzRcMVwyNjEiIFwKKyAgIlwyNzFcMzAyXDIyM11velwxcVwyMDRcMjE3XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMWl7XDIwNlwyMjNdb3pcMSIgXAorICAiXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyNVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDYiIFwKKyAgIlwzMzdcMzcwXDM3NVwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNiIgXAorICAiXDM2N1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjI0XW96XDFcMzU2XDM2M1wzNjZcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMzQ1XDM1MlwzNTVcMjIzXW96XDJhc35cMzcwXDM3MlwzNjdcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMSxcMzExXDM1MlwyMjRcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTNcMzYwXDM3MVwyMjRcMzc2XDM3N1wzNzRcMSIgXAorICAibVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjI2XDM3NlwzNzdcMzc0XDFxXDIwNCIgXAorICAiXDIxN1wyMjNdb3pcMVwzMTRcMzIxXDMyNFwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMzExXDMxNlwzMjFcMjIzIiBcCisgICJdb3pcMVwyMDJcMjIxXDIyN1wyMTFcMzc2XDM3N1wzNzRcMVwzMjBcMzY1XDM3NlwyMjVcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3IiBcCisgICJcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDIzN1wzNTBcMzY3XDIxMVwzNzZcMzc3XDM3NFwxXDIzNiIgXAorICAiXDI0NlwyNTZcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDI1NFwyNjRcMjc0IiBcCisgICJcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjExXDM3NlwzNzdcMzc0XDF5XDMzNlwzNjBcMjI0XDI1XDI3NFwzNDRcMi9cMzEyIiBcCisgICJcMzUzXDM3MFwzNzZcMzc3XDIyM1wzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDciIFwKKyAgIlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcM1wyMzZcMzQ3XDM2NlwwXDI3NlwzNDVKXDMyMVwzNTVcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMTFcMzE2XDMyMVwyMjNdb3pcMVwyMTVcMjM0XDI0M1wyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMTRcMjMzXDI0MlwyMjNdb3pcMVwzMjZcMzMzXDMzNVwyMTFcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMjRcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMzEyXDM1N1wzNzBcMjIzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFw1XDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyNVwyNzRcMzQ0XDAiIFwKKyAgIlwyNzZcMzQ1XDM2N1wzNzVcMzc3XDIxMFwzNzZcMzc3XDM3NFwyXDM1NlwzNjNcMzY2XnB7XDIyMl1velwxb1wyMDJcMjE1IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMl1velwyYXN+XDM2NlwzNzNcMzc2XDIxMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzU3XDM3NFwzNzVcMFwyNzZcMzQ1XDIyM1wyNVwyNzRcMzQ0XDFKXDMyMVwzNTVcMjIzXDM3NlwzNzciIFwKKyAgIlwzNzRcMW5cMzMzXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NCIgXAorICAiXDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMXVcMjEwXDIyNFwyMjJdb3pcMl5we1wzNzBcMzcyXDM2N1wyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDJcMzczXDM3NSIgXAorICAiXDM3Ml9xfFwyMjJdb3pcMXVcMjEwXDIyNFwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMzU0XDM2N1wyMjRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzEyXDM1N1wzNzBcMjIyXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMDRcMjVcMjc0XDM0NFwxXDIwNCIgXAorICAiXDMzNVwzNjFcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjIzXW96XDFcMzQyXDM0N1wzNTJcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjIzXW96XDFcMjI1XDIzNVwyNDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMjNcMjVcMjc0XDM0NFwxLFwzMTFcMzUyXDIyMlwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIzMlwyNSIgXAorICAiXDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDUiIFwKKyAgIlwyMDVcMjVcMjc0XDM0NFwxQlwzMTRcMzQ3XDIxMVwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwxXDMxNyIgXAorICAiXDMyNFwzMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDMyNlwzMzNcMzM1XDIyM11velwxXDI1M1wyNjNcMjczIiBcCisgICJcMjExXDM3NlwzNzdcMzc0XDFCXDMxNFwzNDdcMjIzXDI1XDI3NFwzNDRcMVwyMTFcMzQyXDM2NVwyMjFcMzc2XDM3NyIgXAorICAiXDM3NFwxblwzMzNcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0IiBcCisgICJcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjA2XDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwzMDdcMzE1XDMxN1wyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMjNdb3pcMVwzMDVcMzEyXDMxNVwyMTFcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMjNcMjVcMjc0XDM0NFwxIiBcCisgICJcMzM3XDM3MFwzNzVcMjIwXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTBcMjVcMjc0XDM0NFwxXDM1NiIgXAorICAiXDM3M1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzM3XDM0NFwzNDZcMjIzXW96XDFcMjUzXDI2M1wyNzNcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjIzXW96XDFcMzMzXDM0MFwzNDNcMjEwXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjIyXDI1XDI3NFwzNDRcMShcMzA3XDM1MFwyMjBcMzc2XDM3N1wzNzRcMVwyMzEiIFwKKyAgIlwzNDJcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjExXDI1XDI3NFwzNDRcMVwzMDJcMzU3XDM2N1wyMTBcMzc2XDM3N1wzNzRcMlwzNjQiIFwKKyAgIlwzNzFcMzc0XnB7XDIyMl1velwxXDIzNlwyNDZcMjU2XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNTdcMjY3IiBcCisgICJcMjc3XDIyM11velwxXDM1M1wzNjBcMzYzXDIxMFwzNzZcMzc3XDM3NFwxXDMxNlwzNjNcMzc0XDIyM1wyNVwyNzRcMzQ0IiBcCisgICJcMVxcXDMyNlwzNTVcMjE3XDM3NlwzNzdcMzc0XDJcMzIwXDM2NVwzNzZcMzFcMjc1XDM0NVwyMzFcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxMlwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMTFcMzc2XDM3N1wzNzRcMWd5XDIwNFwyMjJdb3pcMVwyMTZcMjM2XDI0NFwyNTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjNdb3pcMVwzNjZcMzcwXDM2NFwyMTBcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2MlwzNTVcMzcwXDIyM1wyNVwyNzRcMzQ0XDFcMjIwXDM0M1wzNjFcMjE3XDM3NlwzNzdcMzc0XDFKXDMyMSIgXAorICAiXDM1NVwyMzFcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDciIFwKKyAgIlwzNjZcMFwyNzZcMzQ1XDIxM1wyNVwyNzRcMzQ0XDFcMjExXDM0MlwzNjVcMjExXDM3NlwzNzdcMzc0XDFtXDIwMFwyMTMiIFwKKyAgIlwyMjJdb3pcMVwyMDRcMjIzXDIzMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW8iIFwKKyAgInpcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MFwzNjdcMjIzXDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyMTZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMjc2XDM0NVwyMzBcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxNFwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExIiBcCisgICJcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjJdb3pcMXlcMjE0XDIzMFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWN1XDIwMFwyMTFcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjE2XDM3NlwzNzdcMzc0XDFcMjM1XDM0NlwzNjVcMjMwXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTVcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjExXDM3NlwzNzdcMzc0XDFcMjAwXDIxN1wyMjVcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjIyXDI0MVwyNDdcMjIyXW96XDFqfVwyMTBcMjExXDM3NlwzNzdcMzc0XDFcMjIwXDM0MyIgXAorICAiXDM2MVwyMjNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIxNlwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIyN1wyNVwyNzQiIFwKKyAgIlwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjE2IiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMVwzNzZcMzc3XDM3NFwxXDIxMFwyMjdcMjM1XDIyMl1velwxc1wyMDZcMjIxIiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDIxMVwyMzBcMjM2XDIyMl1velwxblwyMDFcMjE0XDIxMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjIzXDI1XDI3NFwzNDRcMVwzNTBcMzcxXDM3N1wyMTZcMzc2XDM3N1wzNzRcMSIgXAorICAiaVwzMjZcMzU2XDIyNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjE3XDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMTFcMzc2XDM3N1wzNzRcMVwyMTVcMjM0IiBcCisgICJcMjQzXDIyMl1velwxbVwyMDBcMjEzXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyMjJcMjQxXDI0N1wyMjJdbyIgXAorICAielwxbFwxNzdcMjEyXDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMTZcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMjVcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNCIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMFwyNzZcMzQ1XDIyMFwyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjJdb3pcMXNcMjA2XDIyMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWV3XDIwMlwyMTFcMzc2XDM3N1wzNzRcMVwyMzFcMzQyXDM2MlwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzIwXDM2NVwzNzZcMjE2XDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMjI0XDI1XDI3NFwzNDRcMiNcMzA0IiBcCisgICJcMzQ2XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMjc2XDM0NVwyMjFcMjVcMjc0XDM0NCIgXAorICAiXDFpXDMyNlwzNTZcMjExXDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjIyXW96XDFecHtcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MCIgXAorICAiXDM2N1wyMjNcMjVcMjc0XDM0NFwxXDMwMVwzNTZcMzY2XDIxNlwzNzZcMzc3XDM3NFwxXDMzM1wzNjRcMzcxXDIyM1wyNSIgXAorICAiXDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NFwwXDI3NlwzNDUiIFwKKyAgIlwyMjJcMjVcMjc0XDM0NFwxblwzMzNcMzYyXDIxMVwzNzZcMzc3XDM3NFwxd1wyMTJcMjI2XDIyMl1velwxXDIwMlwyMjEiIFwKKyAgIlwyMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI0NlwyNTZcMjY2XDIyM11velwxXDM3MFwzNzJcMzY3XDIxMCIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjYwXDM1M1wzNjZcMjIzXDI1XDI3NFwzNDRcMVwyMzNcMzQ1XDM2NFwyMTdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxLFwzMTFcMzUyXDIyMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMzEyIiBcCisgICJcMzU3XDM3MFwyMjNcMjVcMjc0XDM0NFwxXDIwNFwzMzVcMzYxXDIxMVwzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMiIgXAorICAiXW96XDFcMjA1XDIyNFwyMzJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyM11velwxXDM1NSIgXAorICAiXDM2MlwzNjVcMjEwXDM3NlwzNzdcMzc0XDFcMzE0XDM2MVwzNzJcMjIzXDI1XDI3NFwzNDRcMW1cMzMyXDM2MVwyMTciIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIyMFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE2IiBcCisgICJcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFpe1wyMDZcMjIyXW96XDFcMjExXDIzMFwyMzZcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI2NlwyNzdcMzA3IiBcCisgICJcMjIzXW96XDFcMzQwXDM0NVwzNTBcMjEwXDM3NlwzNzdcMzc0XDFcMzU2XDM3M1wzNzRcMjIzXDI1XDI3NFwzNDRcMSIgXAorICAiLFwzMTFcMzUyXDIyMFwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIxNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2NyIgXAorICAiXDM3NFwyMTdcMzc2XDM3N1wzNzRcMVxcXDMyNlwzNTVcMjIzXDI1XDI3NFwzNDRcMVwyNzRcMzU1XDM3M1wyMTBcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM3MlwzNzRcMzcxX3F8XDIyMl1velwxXDIyNlwyNDZcMjU0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwN1wzMTVcMzE3XDIyM11velwxXDMxM1wzMjBcMzIyXDIxMVwzNzZcMzc3XDM3NFwxXDBcMzAyXDM1MVwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDM1N1wzNzRcMzc1XDIxN1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3R1wzMTciIFwKKyAgIlwzNTNcMjE0XDI1XDI3NFwzNDRcMihcMzA3XDM1MFwzMzZcMzY3XDM3NFwyMjBcMzc2XDM3N1wzNzRcMSVcMzA1XDM0NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzQzXDM1MFwzNTNcMjIzXW96XDEiIFwKKyAgIlwyNTRcMjY0XDI3NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzI3XDMzNFwzMzdcMjIzXW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyMTFcMzc2XDM3N1wzNzRcMUJcMzE0XDM0N1wyMjNcMjVcMjc0XDM0NFwxXDIzN1wzNTBcMzY3XDIyMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzcwXDM3NlwzNzduXDMzM1wzNjJcMzFcMjc1XDM0NVwyMTFcMjVcMjc0XDM0NFwySlwzMjFcMzU1IiBcCisgICJcMzU2XDM3M1wzNzRcMjIwXDM3NlwzNzdcMzc0XDFcMzE1XDM2MlwzNzNcMjIzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTAiIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMVwzMTZcMzIzXDMyNlwyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NiIgXAorICAiXDM3N1wzNzRcMVwzNDZcMzU0XDM1NlwyMjNdb3pcMVwyMjVcMjQ1XDI1M1wyMTFcMzc2XDM3N1wzNzRcMWtcMzI3XDM1NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFHXDMxN1wzNTNcMjIyXDM3NlwzNzdcMzc0XDNcMzIwXDM2NVwzNzZaXDMyNVwzNTRcMFwzMDEiIFwKKyAgIlwzNTBcMjA0XDI1XDI3NFwzNDRcM1wwXDI3NlwzNDVHXDMxN1wzNTNcMjc0XDM1NVwzNzNcMjIyXDM3NlwzNzdcMzc0IiBcCisgICJcMXdcMzMzXDM1NlwyMjNcMjVcMjc0XDM0NFwxIiIzXDMxNFwzNTVcMjExXDM3NlwzNzdcMzc0XDFcMjY0XDI3NFwzMDUiIFwKKyAgIlwyMjNdb3pcMVwzMTVcMzIyXDMyNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzY2XDM3M1wzNzZcMjIzXW8iIFwKKyAgInpcMXpcMjE1XDIzMVwyMTFcMzc2XDM3N1wzNzRcMVwyMzdcMzUwXDM2N1wyMjNcMjVcMjc0XDM0NFwyXDMxXDI3NVwzNDUiIFwKKyAgIlwzMzVcMzY2XDM3M1wyMjNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTZcMzYzXDM3NFwyMDJcMjYxXDM1NFwzNjciIFwKKyAgIlwyXDMxM1wzNjBcMzcxXDM2NlwzNzNcMzc2XDIyM1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDBcMzAyXDM1MVwyMjMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI1MFwyNTZcMjIzXW96XDFcMzM0XDM0MiIgXAorICAiXDM0NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjIyXW96XDFld1wyMDJcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzNDdcMzcwXDM3NlwyMjRcMjVcMjc0XDM0NFwxbVwzMzJcMzYxXDI1NFwzNzZcMzc3XDM3NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjI0XDI1XDI3NFwzNDRcMVwyNjFcMzU0XDM2N1wyMTFcMzc2XDM3N1wzNzRcMX1cMjIwXDIzM1wyMjNdb3pcMSIgXAorICAiXDM2NlwzNzBcMzY0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjNdb3pcMVwzMzVcMzQzIiBcCisgICJcMzQ1XDIxMVwzNzZcMzc3XDM3NFwxJVwzMDVcMzQ3XDIyM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzNlwzNjdcMzc0IiBcCisgICJcMjUyXDM3NlwzNzdcMzc0XDJcMzY3XDM3NVwzNzcjXDMwNFwzNDZcMjIzXDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDM1NyIgXAorICAiXDM3NFwzNzVcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdhc35cMjIyXW96XDFtXDIwMFwyMTNcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMjUxXDI2MVwyNzFcMjIzXW96XDFcMjY0XDI3NFwzMDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgImtcMzI3XDM1N1wyMjRcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDI1MlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIyNCIgXAorICAiXDI1XDI3NFwzNDRcMSIiM1wzMTRcMzU1XDIxMVwzNzZcMzc3XDM3NFwxXDMyMlwzMzBcMzMyXDIyM11velwxXDIxMVwyMzAiIFwKKyAgIlwyMzZcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyM11velwxXDIxMVwyMzBcMjM2XDIxMSIgXAorICAiXDM3NlwzNzdcMzc0XDFcMzAxXDM1NlwzNjZcMjI1XDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyNTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDMzNFwzNjVcMzcyXDBcMjc2XDM0NVwyMjRcMjVcMjc0XDM0NFwxXDIyMFwzNDNcMzYxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjUyXDI2MlwyNzJcMjIzXW96XDFcMjUxXDI2MVwyNzFcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMzN1wzNDQiIFwKKyAgIlwzNDZcMjIzXW96XDJld1wyMDJcMzczXDM3NVwzNzJcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzcjXDMwNFwzNDYiIFwKKyAgIlwyMjRcMjVcMjc0XDM0NFwyXDBcMzAyXDM1MVwzNDdcMzcwXDM3NlwyNDZcMzc2XDM3N1wzNzRcMlwzNjdcMzc1XDM3NyIgXAorICAiLFwzMTFcMzUyXDIyNFwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzN1wzNzBcMzc1XDIxMVwzNzZcMzc3XDM3NFwxXDE3NyIgXAorICAiXDIxNlwyMjRcMjIzXW96XDFcMzA1XDMxMlwzMTVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwyXDM3M1wzNzVcMzcyIiBcCisgICJkdlwyMDFcMjIzXW96XDFcMzMxXDMzNlwzNDFcMjExXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjI1XDI1XDI3NFwzNDQiIFwKKyAgIlwyQlwzMTRcMzQ3XDM3MFwzNzZcMzc3XDI0NVwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIyNVwyNVwyNzRcMzQ0XDFCIiBcCisgICJcMzE0XDM0N1wyMTFcMzc2XDM3N1wzNzRcMlwzNjJcMzY3XDM3MV9xfFwyMjNdb3pcMVwzNDZcMzU0XDM1NlwyNTdcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwyMTBcMjI3XDIzNVwyMjNdb3pcMVwyNDZcMjU2XDI2NlwyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMxNlwzNjNcMzc0XDIyNlwyNVwyNzRcMzQ0XDJNXDMyM1wzNTdcMzcwXDM3NlwzNzdcMjQzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMjZcMjVcMjc0XDM0NFwxXDI1NlwzNTBcMzY0XDIxMVwzNzZcMzc3XDM3NFwxXDMwMVwzMDYiIFwKKyAgIlwzMTFcMjIzXW96XDFrflwyMTFcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwyaSIgXAorICAie1wyMDZcMzczXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjI2XDI1XDI3NFwzNDRcMlxcXDMyNlwzNTUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyNDFcMzc2XDM3N1wzNzRcMVwyMjBcMzQzXDM2MVwyMjZcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM3MFwzNzZcMzc3XDIxMVwzNzZcMzc3XDM3NFwxXDIwNFwyMjNcMjMxXDIyM11velwxXDIzMFwyNDBcMjUwXDI2MFwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDMzMVwzMzZcMzQxXDIyNF1velwxXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzAxXDM1NlwzNjZcMjI3XDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzNjdcMzc1XDM3N1wyMzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxd1wzMzNcMzU2XDIyN1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzUxXDM1NlwzNjAiIFwKKyAgIl5we1wyMjNdb3pcMVwyNzdcMzA0XDMwNlwyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFjdSIgXAorICAiXDIwMFwyMjNdb3pcMVwyMjJcMjQxXDI0N1wyMTJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1M1wyMjdcMjVcMjc0XDM0NFwyIiBcCisgICIsXDMxMVwzNTJcMzM0XDM2NVwzNzJcMjM0XDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRJXDMyMFwzNTRcMjI3XDI1XDI3NCIgXAorICAiXDM0NFwyXDBcMzAxXDM1MFwzNjZcMzczXDM3NlwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjRdb3pcMVwzNDMiIFwKKyAgIlwzNTBcMzUzXDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwyMTZcMjM2XDI0NFwyMjNdb3pcMmN1XDIwMFwzNjIiIFwKKyAgIlwzNjdcMzcxXDIxMVwzNzZcMzc3XDM3NFwxXDI2MVwzNTRcMzY3XDIzMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIzMyIgXAorICAiXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjMxXDM3NlwzNzdcMzc0XDJcMjYyXDM1NVwzNzBcMFwzMDRcMzUyXDIzMFwyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMTJcMzc2XDM3N1wzNzRcMXNcMjA2XDIyMVwyMjNdb3pcMXFcMjA0XDIxN1wyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjRdb3pcMVwyNTdcMjY3XDI3N1wyMTJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxQlwzMTRcMzQ3XDIzMVwyNVwyNzRcMzQ0XDIiIjFcMzEzXDM1NFwzMDNcMzYxXDM3MFwyMjZcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMzNFwzNjVcMzcySlwzMjFcMzU1XDIzMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzY2XDM3M1wzNzZcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzMTVcMzIyXDMyNVwyMjRdb3pcMVwyNTFcMjYxXDI3MVwyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDJcMzYyIiBcCisgICJcMzY3XDM3MWFzflwyMjNdb3pcMmh6XDIwNVwzNzBcMzcyXDM2N1wyMTFcMzc2XDM3N1wzNzRcMlwzMzRcMzY1XDM3MiIgXAorICAiXDBcMjc2XDM0NVwyMzJcMjVcMjc0XDM0NFwzQlwzMTRcMzQ3XDI2MlwzNTVcMzcwXDM3MFwzNzZcMzc3XDIyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzEzXDM2MFwzNzFMXDMyMlwzNTZcMFwyNzZcMzQ1XDIzMlwyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjQiIFwKKyAgIlwyMTJcMzc2XDM3N1wzNzRcMXpcMjE1XDIzMVwyMjRdb3pcMVwzMzNcMzQwXDM0M1wyNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDdcMjI2XDIzNFwyMjRdb3pcMVwyNzBcMzAwXDMxMVwyMTJcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NiIgXAorICAiXDIzNFwyNVwyNzRcMzQ0XDRcMFwzMDRcMzUybVwzMzJcMzYxXDI3M1wzNTRcMzcxXDM2NlwzNzNcMzc2XDIxMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDRcMzcwXDM3NlwzNzdcMzAyXDM1N1wzNjd5XDMzNlwzNjAoXDMwN1wzNTBcMjM0XDI1XDI3NFwzNDRcMSIgXAorICAiQlwzMTRcMzQ3XDIxMlwzNzZcMzc3XDM3NFwxXDMyNFwzMzFcMzMzXDIyNF1velwxa35cMjExXDI2MlwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMwMVwzMDZcMzExXDIyNF1velwya35cMjExXDM3MlwzNzRcMzcxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDJcMzY2XDM3M1wzNzYoXDMwN1wzNTBcMjM2XDI1XDI3NFwzNDRcNVwzMVwyNzVcMzQ1LFwzMTFcMzUyTVwzMjNcMzU3IiBcCisgICJ5XDMzNlwzNjBcMjExXDM0MlwzNjVcMjAyXDIzM1wzNDVcMzY0XDVcMjIwXDM0M1wzNjFcMjA0XDMzNVwzNjFaXDMyNSIgXAorICAiXDM1NDFcMzEzXDM1NFwwXDI3NlwzNDVcMjM2XDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzM2XDM2N1wzNzRcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDVcMjI0XDIzMlwyMjRdb3pcMVwyNDZcMjU2XDI2NlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0IiBcCisgICJcMlwzNjdcMzcxXDM2NmR2XDIwMVwyMjRdb3pcMVwyNzRcMzAxXDMwM1wyMTJcMzc2XDM3N1wzNzRcMlwzMTVcMzYyXDM3MyIgXAorICAiXDBcMjc2XDM0NVwzMDdcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMlwzNzZcMzc3XDM3NFwxXDMyNVwzMzJcMzM0IiBcCisgICJcMjI1XW96XDFcMzQxXDM0NlwzNTFcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDIzNlwyNDZcMjU2XDIyNF1vIiBcCisgICJ6XDJmeFwyMDNcMzU2XDM2M1wzNjZcMjEyXDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMzA2XDI1XDI3NFwzNDRcMSIgXAorICAiTVwzMjNcMzU3XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxdFwyMDdcMjIyXDIyNF1velwxXDE3N1wyMTZcMjI0IiBcCisgICJcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIyNV1velwxXDIyNlwyNDZcMjU0XDIxM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFMXDMyMlwzNTZcMzA0XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNjZcMzczXDM3NlwyMTJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2NVwyNzZcMzA2XDIyNV1velwxXDMwMlwzMDdcMzEyXDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzRcMXVcMjEwIiBcCisgICJcMjI0XDIyNF1velwyXnB7XDMzMVwzMzZcMzQxXDIxMlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2L1wzMTJcMzUzXDMwMiIgXAorICAiXDI1XDI3NFwzNDRcMlwwXDMwMlwzNTFcMzM2XDM2N1wzNzRcMjEyXDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNkdlwyMDEiIFwKKyAgIlwyMjRdb3pcMmR2XDIwMVwzNjRcMzcxXDM3NFwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMzAyXDMwN1wzMTJcMjI1IiBcCisgICJdb3pcMndcMjEyXDIyNlwzNzJcMzc0XDM3MVwyMTJcMzc2XDM3N1wzNzRcMlwzNTBcMzcxXDM3NyVcMzA1XDM0N1wzMDAiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwzMDFcMzUwXDMxNFwzNjFcMzcyXDIxM1wzNzZcMzc3XDM3NFwxXDIyN1wyMzdcMjQ3XDIyNSIgXAorICAiXW96XDFcMjQ2XDI1NlwyNjZcMjY0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxbFwxNzdcMjEyXDIyNSIgXAorICAiXW96XDFcMjUyXDI2MlwyNzJcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzVcMFwzMDRcMzUyXDI3NlwyNVwyNzQiIFwKKyAgIlwzNDRcMlwwXDI3NlwzNDVcMjc0XDM1NVwzNzNcMjEzXDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjI1XW96XDJhIiBcCisgICJzflwzNTNcMzYwXDM2M1wyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDFcMjcwXDMwMFwzMTFcMjI1XW96XDJecHtcMzIyIiBcCisgICJcMzMwXDMzMlwyMTNcMzc2XDM3N1wzNzRcMlwzMzJcMzYzXDM3MCNcMzA0XDM0NlwyNzRcMjVcMjc0XDM0NFwyXDBcMjc2IiBcCisgICJcMzQ1XDI3M1wzNTRcMzcxXDIxM1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZHZcMjAxXDIyNV1velwxXDIzNlwyNDYiIFwKKyAgIlwyNTZcMjY1XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2NVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1aHpcMjA1XDIyNV1velwyaXtcMjA2XDM1NCIgXAorICAiXDM2MVwzNjRcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzUqXDMxMFwzNTFcMjcyXDI1XDI3NFwzNDRcMlwwXDMwMiIgXAorICAiXDM1MVwzMTRcMzYxXDM3MlwyMTNcMzc2XDM3N1wzNzRcMlwzNzFcMzczXDM3MHhcMjEzXDIyN1wyMjVdb3pcMl9xfFwzNDYiIFwKKyAgIlwzNTRcMzU2XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjZdb3pcMlwyMDVcMjI0XDIzMiIgXAorICAiXDM3M1wzNzVcMzcyXDIxM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0QlwzMTRcMzQ3XDI3MFwyNVwyNzRcMzQ0XDIiIFwKKyAgIiVcMzA1XDM0N1wzMzVcMzY2XDM3M1wyMTRcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjZdb3pcMVwyMzFcMjQxIiBcCisgICJcMjUxXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N21cMjAwXDIxM1wyMjZdb3pcMVwyNDIiIFwKKyAgIlwyNTJcMjYyXDIxNFwzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3aVwzMjZcMzU2XDI2NlwyNVwyNzRcMzQ0XDJCXDMxNCIgXAorICAiXDM0N1wzNTBcMzcxXDM3N1wyMTRcMzc2XDM3N1wzNzRcMVwyNzdcMzA0XDMwNlwyMjZdb3pcMmJ0XDE3N1wzNTFcMzU2IiBcCisgICJcMzYwXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjdcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjddb3pcMVwyNjFcMjcxXDMwMlwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDI1MFwzNDdcMzcxXDBcMzAxXDM1MFwyNjJcMjVcMjc0XDM0NFwzXDMxXDI3NVwzNDVcMjA2IiBcCisgICJcMzQwXDM2M1wzNzBcMzc2XDM3N1wyMTRcMzc2XDM3N1wzNzRcMlwzMTZcMzIzXDMyNl9xfFwyMjZdb3pcMVwyNTFcMjYxIiBcCisgICJcMjcxXDI2N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMXlcMjE0XDIzMFwyMjZdb3pcMl5we1wzMDFcMzA2XDMxMVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDMzNVwzNjZcMzczL1wzMTJcMzUzXDI2MFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzEyXDM1NyIgXAorICAiXDM3MFwyMTVcMzc2XDM3N1wzNzRcMlwzMzBcMzM1XDM0MGN1XDIwMFwyMjZdb3pcMmh6XDIwNVwzNjZcMzcwXDM2NFwyNjciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwzMzJcMzM3XDM0MlwyMzBcMjIyXDI0MVwyNDdcMVwzNTNcMzYwXDM2MyIgXAorICAiXDIxNVwzNzZcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIzMVwzNDJcMzYyXDBcMzAxXDM1MFwyNTRcMjVcMjc0XDM0NFwzIiBcCisgICJcMFwyNzZcMzQ1d1wzMzNcMzU2XDM2NlwzNzNcMzc2XDIxNVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1XDIzNlwyNDYiIFwKKyAgIlwyNTZcMjI3XDIyMlwyNDFcMjQ3XDFcMzA3XDMxNVwzMTdcMjcwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0MVwzNzZcMzc3XDM3NFwzXDM1NlwzNzMiIFwKKyAgIlwzNzRpXDMyNlwzNTZcMFwyNzZcMzQ1XDI1MVwyNVwyNzRcMzQ0XDJKXDMyMVwzNTVcMzM1XDM2NlwzNzNcMzQxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMzQzXDM3NlwzNzdcMzc0XDNcMzE2XDM2M1wzNzRaXDMyNVwzNTRcMzFcMjc1XDM0NVwyNDVcMjVcMjc0XDM0NCIgXAorICAiXDJHXDMxN1wzNTNcMzAyXDM1N1wzNjdcMzQzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0NVwzNzZcMzc3XDM3NFwzXDMzNlwzNjdcMzc0bVwzMzJcMzYxIiBcCisgICJcMFwyNzZcMzQ1XDI0MFwyNVwyNzRcMzQ0XDNcMzFcMjc1XDM0NU1cMzIzXDM1N1wzMTZcMzYzXDM3NFwzNDVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNDdcMzc2XDM3N1wzNzRcNFwzNjZcMzczXDM3NlwyMzdcMzUwXDM2N0lcMzIwXDM1NFwzMVwyNzVcMzQ1XDIzMlwyNSIgXAorICAiXDI3NFwzNDRcNFwwXDI3NlwzNDVCXDMxNFwzNDdcMjMxXDM0MlwzNjJcMzU2XDM3M1wzNzRcMzQ3XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM1MiIgXAorICAiXDM3NlwzNzdcMzc0XDRcMzU2XDM3M1wzNzRcMjM1XDM0NlwzNjVaXDMyNVwzNTQjXDMwNFwzNDZcMjI0XDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMzAyXDM1MUxcMzIyXDM1NlwyMjFcMzQ0XDM2MlwzMzZcMzY3XDM3NFwzNTJcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzU2XDM3NlwzNzciIFwKKyAgIlwzNzRcNlwzMzZcMzY3XDM3NFwyMzdcMzUwXDM2N3dcMzMzXDM1Nk1cMzIzXDM1NyxcMzExXDM1MlwwXDI3NlwzNDVcMjEwIiBcCisgICJcMjVcMjc0XDM0NFw2XDBcMjc2XDM0NSpcMzEwXDM1MUpcMzIxXDM1NW5cMzMzXDM2MlwyMzNcMzQ1XDM2NFwzMjBcMzY1IiBcCisgICJcMzc2XDM1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNjRcMzc2XDM3N1wzNzRcMTBcMzY3XDM3NVwzNzdcMzU2XDM3M1wzNzRcMzM1XDM2NlwzNzMiIFwKKyAgIlwzMTZcMzYzXDM3NFwzMTVcMzYyXDM3M1wzMzVcMzY2XDM3M1wzNTBcMzcxXDM3N1wzNjZcMzczXDM3NlwzNjRcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc1XDM3NlwzNzdcMzc0XDIwMiIgXAorICAiXDM3MFwzNzZcMzc3XDI1MFwzNzZcMzc3XDM3NFwxXDM2N1wzNzVcMzc3XDIxN1wzNzZcMzc3XDM3NFwxXDM2N1wzNzUiIFwKKyAgIlwzNzdcMjM3XDM3NlwzNzdcMzc0XDFcMzY3XDM3NVwzNzdcMjMwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFw0XDIzN1wzNTAiIFwKKyAgIlwzNjdcMFwyNzZcMzQ1XDMxXDI3NVwzNDVcMjAzXDMzNFwzNjBcMjQ1XDM3NlwzNzdcMzc0XDVcMzE2XDM2M1wzNzQjIiBcCisgICJcMzA0XDM0NlwyNVwyNzRcMzQ0R1wzMTdcMzUzXDM2N1wzNzVcMzc3XDIxM1wzNzZcMzc3XDM3NFw1XDMzNVwzNjZcMzczIiBcCisgICIoXDMwN1wzNTBcMjVcMjc0XDM0NEJcMzE0XDM0N1wzNjZcMzczXDM3NlwyMzNcMzc2XDM3N1wzNzRcNVwzNTZcMzczXDM3NCIgXAorICAiL1wzMTJcMzUzXDI1XDI3NFwzNDQqXDMxMFwzNTFcMzM3XDM3MFwzNzVcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NCIgXAorICAiXDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyNDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjYwXDM1M1wzNjZcMjEzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDIzNVwzNDZcMzY1XDIzM1wzNzZcMzc3XDM3NFwxXDIzMVwzNDJcMzYyXDIwM1wyNVwyNzRcMzQ0XDF5XDMzNlwzNjAiIFwKKyAgIlwyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MCIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjQ0XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjMiIFwKKyAgIlwyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3IiBcCisgICJcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1NyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjMzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjIiIFwKKyAgIlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwIiBcCisgICJcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjEzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjMyXDM3NlwzNzdcMzc0XDdcMzExXDMxNlwzMjFcMjExXDIzMFwyMzZqfVwyMTBjdVwyMDAiIFwKKyAgIm5cMjAxXDIxNFwyMzNcMjQzXDI1M1wzMzNcMzQwXDM0M1wyMDZcMzc2XDM3N1wzNzRcMlwyMzZcMjQ2XDI1NmR2XDIwMSIgXAorICAiXDIwNV1velw0X3F8a35cMjExXDIyMlwyNDFcMjQ3XDMzN1wzNDRcMzQ2XDIxMFwzNzZcMzc3XDM3NFw3XDMyMlwzMzAiIFwKKyAgIlwzMzJcMjIyXDI0MVwyNDdsXDE3N1wyMTJjdVwyMDBrflwyMTFcMjIyXDI0MVwyNDdcMzIyXDMzMFwzMzJcMjA2XDM3NiIgXAorICAiXDM3N1wzNzRcMlwyNTdcMjY3XDI3N2d5XDIwNFwyMDVdb3pcNF5we2l7XDIwNlwyMTFcMjMwXDIzNlwzMjVcMzMyXDMzNCIgXAorICAiXDIxMFwzNzZcMzc3XDM3NFwxMFwzMTNcMzYwXDM3MVxcXDMyNlwzNTUlXDMwNVwzNDdcMFwyNzZcMzQ1XDBcMzAyXDM1MSIgXAorICAiR1wzMTdcMzUzXDIzN1wzNTBcMzY3XDM3MFwzNzZcMzc3XDIwNVwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMzA0IiBcCisgICJcMzUyXDIxMlwyNVwyNzRcMzQ0XDRcMFwyNzZcMzQ1XDBcMzA0XDM1Mk1cMzIzXDM1N1wzMTVcMzYyXDM3M1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDdcMjVcMjc0XDM0NFw0XDBcMzAxXDM1MEJcMzE0XDM0N1wyMzNcMzQ1XDM2NCIgXAorICAiXDM3MFwzNzZcMzc3XDIwN1wzNzZcMzc3XDM3NFw3XDMwMlwzNTdcMzY3TVwzMjNcMzU3I1wzMDRcMzQ2XDBcMjc2XDM0NSIgXAorICAiXDBcMzA0XDM1MkpcMzIxXDM1NVwyNjBcMzUzXDM2NlwyMTBcMzc2XDM3N1wzNzRcNFwzMTVcMzYyXDM3M01cMzIzXDM1NyIgXAorICAiI1wzMDRcMzQ2XDMxXDI3NVwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDRcMzc2XDM3N1wzNzRcNFwzMjMiIFwKKyAgIlwzNjRcMzY3XFxcMzI2XDM1NSVcMzA1XDM0N1wwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxMFwzMzRcMzY1XDM3Mm1cMzMyXDM2MShcMzA3XDM1MFwwXDI3NlwzNDVcMFwzMDJcMzUxQlwzMTQiIFwKKyAgIlwzNDdcMjMzXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjA3XDM3NlwzNzdcMzc0XDRcMzM2XDM2N1wzNzRtXDMzMlwzNjEoIiBcCisgICJcMzA3XDM1MFwwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMwXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTZcMzYzXDM2NlwyMDJcMjIxXDIyN1wyMDZdb3pcM15we1wyNDdcMjU3XDI2N1wzNzNcMzc1XDM3MlwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMyN1wzMzRcMzM3XDIxMl1velwyX3F8XDMwM1wzMTBcMzEzXDIwNVwzNzZcMzc3XDM3NFwyIiBcCisgICJcMzY0XDM3MVwzNzRcMjIyXDI0MVwyNDdcMjA3XW96XDJcMjIyXDI0MVwyNDdcMzcwXDM3MlwzNjdcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTNcMzYwXDM2M15we1wyMTJdb3pcMVwyNTRcMjY0XDI3NFwyMDVcMzc2XDM3N1wzNzRcMlwzNzBcMzc2IiBcCisgICJcMzc3bVwzMzJcMzYxXDIwN1wyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzUwXDM3MVwzNzdcMjAzXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNzBcMzc2XDM3N1wwXDI3NlwzNDVcMjE2XDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDIzNVwzNDZcMzY1XDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIxMlwyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzU3XDM3NFwzNzVcMjA0XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNjdcMzc1XDM3N1pcMzI1XDM1NFwyMDdcMjVcMjc0XDM0NFwyR1wzMTdcMzUzXDM1N1wzNzRcMzc1XDIwNSIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMzFcMjc1XDM0NVwyMTJcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjU2XDM1MFwzNjRcMFwyNzZcMzQ1XDIxMlwyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjA0IiBcCisgICJcMzc2XDM3N1wzNzRcMlwyMDZcMzQwXDM2M1wzMVwyNzVcMzQ1XDIwNlwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzM1XDM2NiIgXAorICAiXDM3M1wyMDVcMzc2XDM3N1wzNzRcMlwzMDJcMzU3XDM2N1wwXDMwMVwzNTBcMjEyXDI1XDI3NFwzNDRcMWtcMzI3XDM1NyIgXAorICAiXDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjdcMzc2XDM3N1wzNzRcMlwzNjRcMzcxXDM3NHVcMjEwXDIyNFwyMTFdb3pcMVwyNDJcMjUyIiBcCisgICJcMjYyXDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwyX3F8XDMyNVwzMzJcMzM0XDIwM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzczXDM3NVwzNzJcMjEwXDIyN1wyMzVcMjExXW96XDJcMjExXDIzMFwyMzZcMzczXDM3NVwzNzJcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdb3pcMVwzMDRcMzExXDMxNFwyMDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NiIgXAorICAiXDIxMVwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzY2XDM3M1wzNzZcMjAyXDM3NlwzNzdcMzc0XDFcMzU3XDM3NFwzNzUiIFwKKyAgIlwyMjBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwyNzRcMzU1XDM3M1wyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjEzIiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIwNFwzNzZcMzc3XDM3NFwxTFwzMjJcMzU2XDIxMVwyNVwyNzRcMzQ0XDIiIjMiIFwKKyAgIlwzMTRcMzU1XDM3MFwzNzZcMzc3XDIwM1wzNzZcMzc3XDM3NFwyXDMxM1wzNjBcMzcxXDBcMjc2XDM0NVwyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMFwyNzZcMzQ1XDIxM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMDNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMTFcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDM0N1wzNzBcMzc2XDIwM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0XDBcMzA0XDM1MlwyMTNcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwxXDI1MVwyNjFcMjcxXDIxM11velwxXDMyMlwzMzBcMzMyIiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjAwXDIxN1wyMjVcMjAzXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwyNzdcMzA0XDMwNlwyMTNdb3pcMVwyNzdcMzA0XDMwNlwyMDJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdIiBcCisgICJvelwyan1cMjEwXDM3M1wzNzVcMzcyXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMDJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMjFcMjVcMjc0XDM0NFwxIiIxXDMxM1wzNTRcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjE0XDI1XDI3NFwzNDRcMVwzMzJcMzYzXDM3MFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzN1wzNTBcMzY3XDIxM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAzXDM3NlwzNzdcMzc0XDFJXDMyMFwzNTQiIFwKKyAgIlwyMTRcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMlwzMjBcMzY1XDM3NlwzMVwyNzVcMzQ1XDIxMlwyNVwyNzRcMzQ0IiBcCisgICJcMUxcMzIyXDM1NlwyMDNcMzc2XDM3N1wzNzRcMVwyMDNcMzM0XDM2MFwyMTRcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzJcMzY3Y3VcMjAwXDIwM11velw1c1wyMDZcMjIxXDMxN1wzMjQiIFwKKyAgIlwzMjdcMzQzXDM1MFwzNTNcMjc2XDMwM1wzMDVld1wyMDJcMjAzXW96XDFcMjEwXDIyN1wyMzVcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMXlcMjE0XDIzMFwyMDNcMzQ3XDM1NVwzNTdcMlwzNDZcMzU0XDM1NlwyNjRcMjc0IiBcCisgICJcMzA1XDIwM11velwyXnB7XDM1N1wzNjVcMzY3XDIwMlwzNzZcMzc3XDM3NFwxcFwyMDNcMjE2XDIwM11velw1a35cMjExIiBcCisgICJcMzA3XDMxNVwzMTdcMzQzXDM1MFwzNTNcMzA2XDMxNFwzMTZrflwyMTFcMjAzXW96XDFwXDIwM1wyMTZcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMWt+XDIxMVwyMDRcMzQ3XDM1NVwzNTdcMlwzMDRcMzExXDMxNF8iIFwKKyAgInF8XDIwM11velwxXDMzNFwzNDJcMzQ0XDIwMlwzNzZcMzc3XDM3NFwxQlwzMTRcMzQ3XDIwM1wyNVwyNzRcMzQ0XDVcMCIgXAorICAiXDMwMVwzNTBcMjMzXDM0NVwzNjRcMzMzXDM2NFwzNzFcMjYwXDM1M1wzNjYoXDMwN1wzNTBcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMjc2XDM0NVwzNjdcMzc1XDM3N1wzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzM1IiBcCisgICJcMzY2XDM3M1wyMDRcMjVcMjc0XDM0NFwzXDMwMlwzNTdcMzY3XDMzNVwzNjZcMzczXDIwNlwzNDBcMzYzXDIwNFwyNSIgXAorICAiXDI3NFwzNDRcMVwzNTZcMzczXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMDIiIFwKKyAgIlwzNTdcMzY3XDIwM1wzMzVcMzY2XDM3M1wyXDMwMlwzNTdcMzY3XDBcMzA0XDM1MlwyMDNcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjAyXDM3NlwzNzdcMzc0XDEsXDMxMVwzNTJcMjAzXDI1XDI3NFwzNDRcNVwwXDMwMlwzNTFcMjM2XDM0NyIgXAorICAiXDM2NlwzMzJcMzYzXDM3MFwyNTZcMzUwXDM2NCNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFw1XDBcMzAyXDM1MVwzNzAiIFwKKyAgIlwzNzZcMzc3XDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwxd1wzMzNcMzU2IiBcCisgICJcMjA0XDMzNVwzNjZcMzczXDFCXDMxNFwzNDdcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwybVwzMzJcMzYxXDMzNFwzNjVcMzcyXDIwM1wzMzVcMzY2XDM3MyIgXAorICAiXDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDVcMFwyNzZcMzQ1XDIwNlwzNDBcMzYzXDMyM1wzNjRcMzY3XDI3M1wzNTRcMzcxMVwzMTNcMzU0IiBcCisgICJcMjA0XDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3M1wyMDJcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDJMXDMyMlwzNTZcMzMyXDM2M1wzNzBcMjAzXDMzNVwzNjZcMzczXDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMWsiIFwKKyAgIlwzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwzMjRcMzMxXDMzM1wyMDNdb3pcMmN1XDIwMFwzNTMiIFwKKyAgIlwzNjBcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDMwN1wzMTVcMzE3XDIwM11velw0YXN+XDM3MlwzNzRcMzcxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzdcMzc0XDFoelwyMDVcMjAzXW96IiBcCisgICJcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzNDdcMzU1XDM1N1wyMDNdb3pcMl5we1wzMzVcMzQzXDM0NVwyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIwNF1velwzXDM0N1wzNTVcMzU3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwMyIgXAorICAiXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDF+XDIxNVwyMjNcMjAzXW96XDRcMzEzXDMyMFwzMjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNzBcMzc2XDM3N1wzMVwyNzVcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzMzZcMzY3XDM3NFwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcM1wyNzRcMzU1XDM3M1wzNzZcMzc3XDM3NCIgXAorICAiXDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjciIFwKKyAgIlwzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzIzXDM2NFwzNjdcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMW4iIFwKKyAgIlwzMzNcMzYyXDIwM1wyNVwyNzRcMzQ0XDNtXDMzMlwzNjFcMzc2XDM3N1wzNzRcMzU2XDM3M1wzNzRcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwxXDI3NFwzNTVcMzczXDIwM1wzNzZcMzc3XDM3NFwyXDMyM1wzNjRcMzY3XDBcMjc2XDM0NVwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMzE1XDM2MlwzNzNcMzc2XDM3N1wzNzRcMzM1XDM2NlwzNzNcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyIiBcCisgICJcMzc2XDM3N1wzNzRcMzY2XDM3M1wzNzZcMjA0XDI1XDI3NFwzNDRcMVwzNjZcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDIwN1wzNDFcMzY0XDIwM1wzNzZcMzc3XDM3NFwyXDM2MFwzNzVcMzc2XDBcMzA0XDM1MlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjMzXDM0NVwzNjRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMjNcMzY0XDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIwM11velwxXDIwNFwyMjNcMjMxXDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdfcXxcMjAzXW96XDNcMzU0XDM2MVwzNjRcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTYiIFwKKyAgIlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MSIgXAorICAiXDM3NlwzNzdcMzc0XDMyNlwzMzNcMzM1XDIwM11velwxblwyMDFcMjE0XDIwNVwzNzZcMzc3XDM3NFwxbFwxNzdcMjEyIiBcCisgICJcMjAzXW96XDNcMzI3XDMzNFwzMzdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzdcMzcwXDM3NVwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMzFcMjc1XDM0NVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMSIiM1wzMTRcMzU1XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcM1wyMzZcMzQ3XDM2NlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0XDNrXDMyN1wzNTciIFwKKyAgIlwzNzZcMzc3XDM3NFwzMTVcMzYyXDM3M1wyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMSIgXAorICAiKlwzMTBcMzUxXDIwM1wyNVwyNzRcMzQ0XDNcMjYxXDM1NFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2M1wzNzRcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMSIgXAorICAiXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzdcMzc0XDFNXDMyMyIgXAorICAiXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDMxXDI3NVwzNDVcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDMzNVwzNjZcMzczXDIwNFwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjAzIiBcCisgICJcMzM0XDM2MFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDQiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDIiIFwKKyAgIlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3IiBcCisgICJcMjAzXW96XDFhc35cMjA1b1wyMDJcMjE1XDFhc35cMjAzXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNSIgXAorICAiXDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0IiBcCisgICJcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIwNSVcMzA1XDM0NyIgXAorICAiXDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0IiBcCisgICJcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDEiIFwKKyAgIlwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwzMVwyNzVcMzQ1XDIwNSIgXAorICAiJVwzMDVcMzQ3XDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjM3XDM1MFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2MyIgXAorICAiXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0IiBcCisgICJcMzQ0XDEjXDMwNFwzNDZcMjA0JVwzMDVcMzQ3XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDF3XDMzM1wzNTZcMjAyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzXW96XDMiIFwKKyAgIlwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNV1velwzIiBcCisgICJcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2NyIgXAorICAiXDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0IiBcCisgICJcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxIiBcCisgICJcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzIiBcCisgICJcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzRcMzQ0XDF3XDMzMyIgXAorICAiXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzIiBcCisgICJdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNSIgXAorICAiXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjUiIFwKKyAgIlwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NiIgXAorICAiXDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NiIgXAorICAiXDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzIiBcCisgICJcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzQiIFwKKyAgIlwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3IiBcCisgICJcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMWV3XDIwMlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxNyIgXAorICAiXDMyNFwzMjdcMjE1XW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTMiIFwKKyAgIlwyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3IiBcCisgICJcMzc0XDIxNVwyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSMiIFwKKyAgIlwzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwzIiBcCisgICJrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3IiBcCisgICJcMzc0XDMxNlwzNjNcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDIwNVwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzciIFwKKyAgIlwzNzRcMjE1XDI1XDI3NFwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzAwXDMwNVwzMTBcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1IiBcCisgICJcMzc2XDM3N1wzNzRcMWJ0XDE3N1wyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NiIgXAorICAiXDM3N1wzNzRcMzE3XDMyNFwzMjdcMjAzXW96XDFwXDIwM1wyMTZcMjExXDMzNVwzNDNcMzQ1XDNcMzY2XDM3MFwzNjQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMCIgXAorICAiXDI3NlwzNDVcMjExXDMxNFwzNjFcMzcyXDNcMzUwXDM3MVwzNzdcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1IiBcCisgICJcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwIiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDMxNCIgXAorICAiXDM2MVwzNzJcM1wzNTZcMzczXDM3NFwzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxIiBcCisgICJcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzAxXDM1NlwzNjZcMjEwXDMxNCIgXAorICAiXDM2MVwzNzJcMVwzMzdcMzcwXDM3NVwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzYiIFwKKyAgIlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzE0XDMyMVwzMjRcMjAzXW96XDJsXDE3N1wyMTJcMzcyXDM3NFwzNzEiIFwKKyAgIlwyMDNcMzc2XDM3N1wzNzRcMVwzMzNcMzQwXDM0M1wyMDNdb3pcNF5we1wzNjZcMzczXDM3NlwzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxa35cMjExXDIwM11velwzXDM0MVwzNDYiIFwKKyAgIlwzNTFcMzc2XDM3N1wzNzRcMzIwXDMyNlwzMzBcMjAzXW96XDF0XDIwN1wyMjJcMjEzXDM3NlwzNzdcMzc0XDFcMzMwIiBcCisgICJcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDYiIFwKKyAgIlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2IiBcCisgICJcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0IiBcCisgICJcMW5cMzMzXDM2MlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0XDMwM1wzNjFcMzcwXDIwM1wyNSIgXAorICAiXDI3NFwzNDRcMVwwXDMwNFwzNTJcMjEzXDM3NlwzNzdcMzc0XDFcMzMyXDM2M1wzNzBcMjAzXDI1XDI3NFwzNDRcMVwwIiBcCisgICJcMjc2XDM0NVwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NiIgXAorICAiXDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMU0iIFwKKyAgIlwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3MyIgXAorICAiXDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNecHtcMjAzXW96XDVcMjM2XDI0NlwyNTZcMzY2XDM3M1wzNzZcMzc2IiBcCisgICJcMzc3XDM3NFwzNDdcMzU1XDM1N3dcMjEyXDIyNlwyMDNdb3pcMX5cMjE1XDIyM1wyMDJcMzc2XDM3N1wzNzRcMVwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNFwzNzZcMzc3XDM3NFwyXDMzNVwzNDNcMzQ1XnB7XDIwM11vIiBcCisgICJ6XDNcMzUxXDM1NlwzNjBcMzc2XDM3N1wzNzRcMzM1XDM0M1wzNDVcMjAzXW96XDJidFwxNzdcMzQzXDM1MFwzNTNcMjEyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0IiBcCisgICJcMzU1XDM3M1wyMTJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzQiIFwKKyAgIlwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NCIgXAorICAiXDIwM1wzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3L1wzMTJcMzUzXDIwM1wyNVwyNzRcMzQ0XDNcMjA0XDMzNVwzNjEiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzRcMzY1XDM3MlwyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMTJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjA0XDM3NlwzNzdcMzc0XDEiIFwKKyAgIklcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFw0XDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2IiBcCisgICJcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU3XDM1MVwzNjVcMjA0XDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjEzXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwyMDdcMzQxXDM2NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjExXDIzMFwyMzZcMjA0XW96XDNjdVwyMDBwXDIwM1wyMTZecHtcMjA0XW96XDFcMjc3XDMwNFwzMDYiIFwKKyAgIlwyMDJcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMWR2XDIwMVwyMDN+XDIxNVwyMjNcMnZcMjExXDIyNSIgXAorICAiYXN+XDIwM11velwxblwyMDFcMjE0XDIwMlwzNzZcMzc3XDM3NFwyXDM3MVwzNzNcMzcwZHZcMjAxXDIwM11velwyYnQiIFwKKyAgIlwxNzd3XDIxMlwyMjZcMjA1flwyMTVcMjIzXDJcMjAzXDIyMlwyMzBcMzA0XDMxMVwzMTRcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdbyIgXAorICAielwxXDMwNlwzMTRcMzE2XDIwMlwzNzZcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1IiBcCisgICIqXDMxMFwzNTFcMjA1LFwzMTFcMzUyXDIiIjFcMzEzXDM1NFwyMDdcMzQxXDM2NFwyMDJcMzc2XDM3N1wzNzRcMVwzNTciIFwKKyAgIlwzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0IiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxKlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAyXDM1MVwyMDQiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMjc0XDM1NVwzNzNcMzc2XDM3N1wzNzRcMzcwXDM3NlwzNzdcMFwzMDJcMzUxXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMlwzMVwyNzVcMzQ1KlwzMTBcMzUxXDIwNSxcMzExXDM1MlwyQlwzMTRcMzQ3XDIzMVwzNDJcMzYyXDIwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUqXDMxMFwzNTFcMjAzLFwzMTFcMzUyIiBcCisgICJcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1MyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1KlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAxXDM1MFwyMDNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjA0XDI1XDI3NFwzNDRcMShcMzA3IiBcCisgICJcMzUwXDIwNSxcMzExXDM1MlwzIiIxXDMxM1wzNTR3XDMzM1wzNTZcMzcwXDM3NlwzNzdcMjAyXDM3NlwzNzdcMzc0XDEiIFwKKyAgIk1cMzIzXDM1N1wyMDRcMjVcMjc0XDM0NFwxKFwzMDdcMzUwXDIwMyxcMzExXDM1MlwxXDBcMzA0XDM1MlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZXdcMjAyXDIxMV1velwyIiBcCisgICJcMTc3XDIxNlwyMjRcMzczXDM3NVwzNzJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjcwXDMwMCIgXAorICAiXDMxMVwyMDNcMzc2XDM3N1wzNzRcMVwyNTNcMjYzXDI3M1wyMTNdb3pcNF9xfFwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NCIgXAorICAiXDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwxIiBcCisgICJcMzA2XDMxNFwzMTZcMjAyXDM3NlwzNzdcMzc0XDFcMjMzXDM0NVwzNjRcMjE0XDI1XDI3NFwzNDRcM1wzMDFcMzU2XDM2NiIgXAorICAiXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NCIgXAorICAiXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMTNcMjVcMjc0XDM0NFwyLFwzMTFcMzUyXDM3MFwzNzZcMzc3XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjE0XDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzM1wzNDVcMzY0XDIxNFwyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDFcMjUwXDM0NyIgXAorICAiXDM3MVwyMTRcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxNFwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzZcMzQ3XDM2NlwyMDJcMzc2XDM3N1wzNzRcMlwzMTNcMzYwXDM3MVwwXDI3NlwzNDVcMjEzXDI1IiBcCisgICJcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMzBcMzc2XDM3N1wzNzRcMlwzMjVcMzMyXDMzNGd5XDIwNFwyMDciIFwKKyAgIl1velwyeFwyMTNcMjI3XDM1NFwzNjFcMzY0XDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwxXDIyNSIgXAorICAiXDIzNVwyNDVcMjA0XDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzF+XDIyMVwyMzVcMjEzXW96XDNcMzMzXDM0MFwzNDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNDJcMzQ3XDM1MlwyMDNdb3pcMXRcMjA3XDIyMlwyMDVcMzc2XDM3N1wzNzRcMVwyMTFcMjMwIiBcCisgICJcMjM2XDIwM11velwxXDMxN1wzMjRcMzI3XDIwM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxM1wyNVwyNzRcMzQ0XDQiIFwKKyAgIlwyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjAyXDI1XDI3NFwzNDRcMVwwXDI3NiIgXAorICAiXDM0NVwyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyMDJcMzc2IiBcCisgICJcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM1XDM2NlwzNzNcMjAyXDM3NlwzNzdcMzc0XDFcMCIgXAorICAiXDMwMlwzNTFcMjEyXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjAzXDM3NlwzNzdcMzc0XDJcMzcwIiBcCisgICJcMzc2XDM3N0dcMzE3XDM1M1wyMTNcMjVcMjc0XDM0NFwxXDI3M1wzNTRcMzcxXDIwM1wzNzZcMzc3XDM3NFwxTVwzMjMiIFwKKyAgIlwzNTdcMjEzXDI1XDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMDNcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAzXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjEzXDI1XDI3NFwzNDRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIxM1wyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjMxXDM3NlwzNzdcMzc0XDNcMzUxXDM1NlwzNjBcMjMxXDI0MVwyNTFidFwxNzdcMjAzXW96XDNrflwyMTFcMjU3IiBcCisgICJcMjY3XDI3N1wzNzBcMzcyXDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTFdb3pcM2d5XDIwNFwyNjEiIFwKKyAgIlwyNzFcMzAyXDM3M1wzNzVcMzcyXDIwNVwzNzZcMzc3XDM3NFwzXDM3MVwzNzNcMzcwXDI1MlwyNjJcMjcyZHZcMjAxIiBcCisgICJcMjEwXW96XDJ4XDIxM1wyMjdcMzcyXDM3NFwzNzFcMjAyXDM3NlwzNzdcMzc0XDR9XDIyMFwyMzNdb3pecHtcMjY2XDI3NyIgXAorICAiXDMwN1wyMDVcMzc2XDM3N1wzNzRcNVwzMTFcMzE2XDMyMV9xfF1venFcMjA0XDIxN1wzNzBcMzcyXDM2N1wyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIxMVwzNDJcMzY1XDBcMzAxXDM1MFwyMTBcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM1NlwzNzNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwMlwyNVwyNzRcMzQ0XDFtXDMzMlwzNjFcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMDJcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDIwM1wzNzZcMzc3XDM3NFwxXDIwNiIgXAorICAiXDM0MFwzNjNcMjAyXDI1XDI3NFwzNDRcMkJcMzE0XDM0N1wzNzBcMzc2XDM3N1wyMDJcMzc2XDM3N1wzNzRcMXdcMzMzIiBcCisgICJcMzU2XDIxMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1TFwzMjJcMzU2XDMzNlwzNjdcMzc0XDIwNVwzNzZcMzc3XDM3NCIgXAorICAiXDNcMzcwXDM3NlwzNzdcMjA0XDMzNVwzNjFcMFwzMDFcMzUwXDIxMFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzY2XDM3MyIgXAorICAiXDM3NlwyMDNcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyMTFcMzQyXDM2NVwwXDMwMVwzNTBcMjEwXDI1XDI3NFwzNDQiIFwKKyAgIlwyI1wzMDRcMzQ2XDM1NlwzNzNcMzc0XDIwNFwzNzZcMzc3XDM3NFwyXDIzM1wzNDVcMzY0XDBcMzAyXDM1MVwyMTBcMjUiIFwKKyAgIlwyNzRcMzQ0XDJcMFwzMDJcMzUxXDMzN1wzNzBcMzc1XDIwNFwzNzZcMzc3XDM3NFwyXDIzN1wzNTBcMzY3I1wzMDRcMzQ2IiBcCisgICJcMjEwXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjA0XDM3NlwzNzdcMzc0XDJcMjU3XDM1MVwzNjUiIFwKKyAgIiVcMzA1XDM0N1wyMTBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMjZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMzXDM3NiIgXAorICAiXDM3N1wzNzRcNFwzNjVcMzcyXDM3NVwzMzVcMzQzXDM0NVwzMjVcMzMyXDMzNFwzNDNcMzUwXDM1M1wyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxdVwyMTBcMjI0XDIwNFwzMjRcMzMxXDMzM1wyXDMzNVwzNDNcMzQ1XDM3MyIgXAorICAiXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFcMzM0XDM0MlwzNDRcMjA2XDMyNFwzMzFcMzMzXDIiIFwKKyAgIlwzMzFcMzM2XDM0MVwzNzJcMzc0XDM3MVwyMDNcMzc2XDM3N1wzNzRcM1wzNzNcMzc1XDM3MlwzMzJcMzM3XDM0MlwzNDMiIFwKKyAgIlwzNTBcMzUzXDIwN1wzNzZcMzc3XDM3NFwzXDM1MVwzNTZcMzYwXDMzMFwzMzVcMzQwXDM2NlwzNzNcMzc2XDIwNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2IiBcCisgICJcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzRcMlwzMTRcMzYxXDM3MlwzMTVcMzYyXDM3M1wyMDVcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMxNlwzNjNcMzc0XDMxM1wzNjBcMzcxXDIwNVwzNzZcMzc3XDM3NFwzXDMzMlwzNjNcMzcwXDMxMlwzNTdcMzcwXDM3MCIgXAorICAiXDM3NlwzNzdcMjA0XDM3NlwzNzdcMzc0XDFcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjciIFwKKyAgIlwzNTZcMzczXDM3NFwyMTFcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTRcMzYxXDM3MlwyMDZcMjczXDM1NFwzNzEiIFwKKyAgIlwyXDMwMlwzNTdcMzY3XDM2N1wzNzVcMzc3XDIwNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDMxNlwzNjNcMzc0IiBcCisgICJcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2XDM3M1wzNzZcMjA2XDM3NlwzNzdcMzc0XDJcMzcwXDM3NiIgXAorICAiXDM3N1wzMTZcMzYzXDM3NFwyMDZcMjczXDM1NFwzNzFcMlwzMDFcMzU2XDM2NlwzNTdcMzc0XDM3NVwyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMzMlwzNjNcMzcwXDIwNlwyNzNcMzU0XDM3MVwyXDMwMVwzNTZcMzY2XDM1NlwzNzNcMzc0XDIwN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMjc0XDM1NVwzNzNcMjA1XDI3M1wzNTRcMzcxXDJcMjc0XDM1NVwzNzNcMzUwIiBcCisgICJcMzcxXDM3N1wyMjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxXDIwMiIgXAorICAiXDIyMVwyMjdcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzE1XDMyMlwzMjVcMjAzXW96XDFcMjExXDIzMFwyMzZcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM2MFwzNjZcMzcwaXtcMjA2XDIwMl1velwxXDMwMlwzMDdcMzEyXDM3N1wzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNDdcMzc2XDM3N1wzNzRcM1wzNTdcMzY1XDM2N1wzMTNcMzIwXDMyMlwzMzVcMzQzXDM0NVwzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzMDdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxIiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NCIgXAorICAiXDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjMyXDM3N1wzNzdcMzc3IikKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiNjQ3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYgpAQCAtMCwwICsxLDEyMiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgZnJhbWVidWZmZXIgYm9vdCBsb2dvIGJhc2VkIG9uIHVzcGxhc2giCitERVNDUklQVElPTiA9ICJQU3BsYXNoIGlzIGEgdXNlcnNwYWNlIGdyYXBoaWNhbCBib290IHNwbGFzaCBzY3JlZW4gZm9yIG1haW5seSBlbWJlZGRlZCBMaW51eCBkZXZpY2VzIHN1cHBvcnRpbmcgYSAxNmJwcCBvciAzMmJwcCBmcmFtZWJ1ZmZlci4gSXQgaGFzIGZldyBkZXBlbmRlbmNpZXMgKGp1c3QgbGliYyksIHN1cHBvcnRzIGJhc2ljIGltYWdlcyBhbmQgdGV4dCBhbmQgaGFuZGxlcyByb3RhdGlvbi4gSXRzIHZpc3VhbCBsb29rIGlzIGNvbmZpZ3VyYWJsZSBieSBiYXNpYyBzb3VyY2UgY2hhbmdlcy4gQWxzbyBpbmNsdWRlZCBpcyBhICdjbGllbnQnIGNvbW1hbmQgdXRpbGl0eSBmb3Igc2VuZGluZyBpbmZvcm1hdGlvbiB0byBwc3BsYXNoIHN1Y2ggYXMgYm9vdCBwcm9ncmVzcyBpbmZvcm1hdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wc3BsYXNoIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wc3BsYXNoLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNjttZDU9ODQwZmIyMzU2YjEwYTg1YmVkNzhkZDA5ZGM3NzQ1YzYiCisKK1NSQ1JFViA9ICIxNGM4ZjdiNzA1ZGU5NDRiZWI0ZGUzZjI5NjUwNmQ4MDg3MWU0MTBmIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBzcGxhc2gtZmItQ29udmVydC1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwtdG8tYS1zdGF0aWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHNwbGFzaC1pbml0IFwKKyAgICAgICAgICAgJHtTUExBU0hfSU1BR0VTfSIKKworU1BMQVNIX0lNQUdFUyA9ICJmaWxlOi8vcHNwbGFzaC1wb2t5LWltZy5oO291dHN1ZmZpeD1kZWZhdWx0IgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgb2xkcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBzcGxhc2hmaWxlcyA9IGQuZ2V0VmFyKCdTUExBU0hfSU1BR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ3MgPSBbXQorICAgIGxvY2FscGF0aHMgPSBbXQorICAgIGhhc3BuZyA9IEZhbHNlCisgICAgZm9yIHVyaSBpbiBzcGxhc2hmaWxlczoKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgZCkKKyAgICAgICAgZmxvY2FsID0gb3MucGF0aC5iYXNlbmFtZShmZXRjaGVyLmxvY2FscGF0aCh1cmkpKQorICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQoZmxvY2FsKVswXQorICAgICAgICBvdXRzdWZmaXggPSBmZXRjaGVyLnVkW3VyaV0ucGFybS5nZXQoIm91dHN1ZmZpeCIpCisgICAgICAgIGlmIG5vdCBvdXRzdWZmaXg6CisgICAgICAgICAgICBpZiBmYmFzZS5zdGFydHN3aXRoKCJwc3BsYXNoLSIpOgorICAgICAgICAgICAgICAgIG91dHN1ZmZpeCA9IGZiYXNlWzg6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRzdWZmaXggPSBmYmFzZQorICAgICAgICAgICAgaWYgb3V0c3VmZml4LmVuZHN3aXRoKCctaW1nJyk6CisgICAgICAgICAgICAgICAgb3V0c3VmZml4ID0gb3V0c3VmZml4WzotNF0KKyAgICAgICAgb3V0bmFtZSA9ICJwc3BsYXNoLSVzIiAlIG91dHN1ZmZpeAorICAgICAgICBpZiBvdXRuYW1lID09ICcnIG9yIG91dG5hbWUgaW4gb2xkcGtnczoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgb3V0cHV0IG5hbWUgJyVzJyBkZXJpdmVkIGZyb20gdGhlIFVSSSAlcyBpcyBub3QgdmFsaWQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBvdXRzdWZmaXggcGFyYW1ldGVyIiAlIChvdXRuYW1lLCB1cmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtncy5hcHBlbmQob3V0bmFtZSkKKyAgICAgICAgaWYgZmxvY2FsLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBoYXNwbmcgPSBUcnVlCisgICAgICAgIGxvY2FscGF0aHMuYXBwZW5kKGZsb2NhbCkKKworICAgICMgU2V0IHRoZXNlIHNvIHRoYXQgd2UgaGF2ZSBsZXNzIHdvcmsgdG8gZG8gaW4gZG9fY29tcGlsZSBhbmQgZG9faW5zdGFsbF9hcHBlbmQKKyAgICBkLnNldFZhcigiU1BMQVNIX0lOU1RBTEwiLCAiICIuam9pbihwa2dzKSkKKyAgICBkLnNldFZhcigiU1BMQVNIX0xPQ0FMUEFUSFMiLCAiICIuam9pbihsb2NhbHBhdGhzKSkKKworICAgIGlmIGhhc3BuZzoKKyAgICAgICAgZC5hcHBlbmRWYXIoIkRFUEVORFMiLCAiIGdkay1waXhidWYtbmF0aXZlIikKKworICAgIGQucHJlcGVuZFZhcigiUEFDS0FHRVMiLCAiJXMgIiAlICgiICIuam9pbihwa2dzKSkpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgb3IgJycKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBlcCA9ICclcyVzJyAlIChtbHByZWZpeCwgcCkKKyAgICAgICAgZXBzcGxhc2ggPSAnJXMlcycgJSAobWxwcmVmaXgsICdwc3BsYXNoJykKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIGVwLCAiJHtiaW5kaXJ9LyVzIiAlIHApCisgICAgICAgIGQuc2V0VmFyKCJBTFRFUk5BVElWRV8lcyIgJSBlcCwgJ3BzcGxhc2gnKQorICAgICAgICBkLnNldFZhckZsYWcoIkFMVEVSTkFUSVZFX1RBUkdFVF8lcyIgJSBlcCwgJ3BzcGxhc2gnLCAnJHtiaW5kaXJ9LyVzJyAlIHApCisgICAgICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU18lcyIgJSBlcCwgIiAlcyIgJSBwbikKKyAgICAgICAgaWYgcCA9PSAicHNwbGFzaC1kZWZhdWx0IjoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVDT01NRU5EU18lcyIgJSBwbiwgIiAlcyIgJSBlcCkKK30KKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BzcGxhc2hdID0gIiR7YmluZGlyfS9wc3BsYXNoIgorCitweXRob24gZG9fY29tcGlsZSAoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgIyBCdWlsZCBhIHNlcGFyYXRlIGV4ZWN1dGFibGUgZm9yIGVhY2ggc3BsYXNoIGltYWdlCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBjb252ZXJ0c2NyaXB0ID0gIiVzL21ha2UtaW1hZ2UtaGVhZGVyLnNoIiAlIGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBkZXN0ZmlsZSA9ICIlcy9wc3BsYXNoLXBva3ktaW1nLmgiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIGxvY2FsZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0xPQ0FMUEFUSFMnLCBUcnVlKS5zcGxpdCgpCisgICAgb3V0cHV0ZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0lOU1RBTEwnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIGxvY2FsZmlsZSwgb3V0cHV0ZmlsZSBpbiB6aXAobG9jYWxmaWxlcywgb3V0cHV0ZmlsZXMpOgorICAgICAgICBpZiBsb2NhbGZpbGUuZW5kc3dpdGgoIi5wbmciKToKKyAgICAgICAgICAgIG91dHAgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoJyVzICVzIFBPS1knICUgKGNvbnZlcnRzY3JpcHQsIG9zLnBhdGguam9pbih3b3JrZGlyLCBsb2NhbGZpbGUpKSkKKyAgICAgICAgICAgIHByaW50KG91dHBbMV0pCisgICAgICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQobG9jYWxmaWxlKVswXQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCIlcy1pbWcuaCIgJSBmYmFzZSwgZGVzdGZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHdvcmtkaXIsIGxvY2FsZmlsZSksIGRlc3RmaWxlKQorICAgICAgICAjIEZvciBzb21lIHJlYXNvbiBqdXN0IHVwZGF0aW5nIHRoZSBoZWFkZXIgaXMgbm90IGVub3VnaCwgd2UgaGF2ZSB0byB0b3VjaCB0aGUgLmMKKyAgICAgICAgIyBmaWxlIGluIG9yZGVyIHRvIGdldCBpdCB0byByZWJ1aWxkCisgICAgICAgIG9zLnV0aW1lKCIlcy9wc3BsYXNoLmMiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgTm9uZSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJvZV9ydW5tYWtlIiwgZCkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCJwc3BsYXNoIiwgb3V0cHV0ZmlsZSkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9L21udC8ucHNwbGFzaC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wc3BsYXNoLWluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3BzcGxhc2guc2gKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlmb3IgaSBpbiAke1NQTEFTSF9JTlNUQUxMfSA7IGRvCisJCWluc3RhbGwgLW0gMDc1NSAkaSAke0R9JHtiaW5kaXJ9LyRpCisJZG9uZQorCXJtIC1mICR7RH0ke2JpbmRpcn0vcHNwbGFzaAorfQorCitGSUxFU18ke1BOfSArPSAiL21udC8ucHNwbGFzaCIKKworSU5JVFNDUklQVF9OQU1FID0gInBzcGxhc2guc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwIFMgLiBzdG9wIDIwIDAgMSA2IC4iCisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIHBzcGxhc2guc2VydmljZQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvY29uZmlnLWRpcmVudC1zeW1ib2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZmYwM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGaXggdGhlIG5hbWVzIG9mIHRoZSBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scyB0byBtYXRjaCB0aGUgbmFtZXMgdXNlZCBieSBib3RoCitjb25maWd1cmUgYW5kIHRoZSBzb3VyY2UgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctcmVhZGxpbmUvMjAxNC0wNS9tc2cwMDAwOC5odG1sKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBlNDg2NTY4MTE1NTA3NzQ4OTJmZDRlMGY0YjNjN2Q0MTg0MjJkYTUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjcgTWF5IDIwMTQgMjI6MzI6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlnLmguaW46IGZpeCBuYW1lcyBvZiBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scworCistLS0KKyBjb25maWcuaC5pbiB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCitpbmRleCBhNjdlNDNlLi5hNDJhY2M1IDEwMDY0NAorLS0tIGEvY29uZmlnLmguaW4KKysrKyBiL2NvbmZpZy5oLmluCitAQCAtMjQ0LDkgKzI0NCw5IEBACisgCisgI3VuZGVmIEhBVkVfR0VUUFdfREVDTFMKKyAKKy0jdW5kZWYgU1RSVUNUX0RJUkVOVF9IQVNfRF9JTk8KKysjdW5kZWYgSEFWRV9TVFJVQ1RfRElSRU5UX0RfSU5PCisgCistI3VuZGVmIFNUUlVDVF9ESVJFTlRfSEFTX0RfRklMRU5PCisrI3VuZGVmIEhBVkVfU1RSVUNUX0RJUkVOVF9EX0ZJTEVOTworIAorICN1bmRlZiBIQVZFX0JTRF9TSUdOQUxTCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvbm9ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvbm9ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDcxNTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9ub3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQIDIwMTIvMi8yMworCitJbmRleDogcmVhZGxpbmUtNi4yL3N1cHBvcnQvc2hvYmotY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJlYWRsaW5lLTYuMi5vcmlnL3N1cHBvcnQvc2hvYmotY29uZgkyMDEyLTAyLTIzIDExOjA2OjM3LjE5MzE3OTM3OSArMDAwMAorKysrIHJlYWRsaW5lLTYuMi9zdXBwb3J0L3Nob2JqLWNvbmYJMjAxMi0wMi0yMyAxMTowNjo1MC4wNDkxNzg5MTggKzAwMDAKK0BAIC0xMTQsNyArMTE0LDcgQEAKKyAJU0hPQkpfTEQ9JyR7Q0N9JworIAlTSE9CSl9MREZMQUdTPSctc2hhcmVkIC1XbCwtc29uYW1lLCRAJworIAorLQlTSExJQl9YTERGTEFHUz0nLVdsLC1ycGF0aCwkKGxpYmRpcikgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAICQoU0hMSUJfTUlOT1IpYCcKKysJU0hMSUJfWExERkxBR1M9Jy1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisgCVNITElCX0xJQlZFUlNJT049JyQoU0hMSUJfTElCU1VGRikuJChTSExJQl9NQUpPUikkKFNITElCX01JTk9SKScKKyAJOzsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjBhOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaXRob3V0IHRoaXMgaXQgZmFpbHMgdG8gbGluayBhZ2FpbnN0IGxpYnRlcm1jYXAgY2F1c2luZyB2YXJpb3VzIG1pc3Npbmcgc3ltYm9scyAKK2lzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK0luZGV4OiByZWFkbGluZS01LjIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVhZGxpbmUtNS4yLm9yaWcvY29uZmlndXJlLmluCTIwMDgtMTAtMDggMDk6NTg6NTIuMDAwMDAwMDAwICswMTAwCisrKysgcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTA4IDA5OjU5OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIxMSwxMCArMjExLDEwIEBACisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoY29uZmlndXJhdGlvbiBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykKKyAgICAgICAgIGV2YWwgYFRFUk1DQVBfTElCPSRURVJNQ0FQX0xJQiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAke3NyY2Rpcn0vc3VwcG9ydC9zaG9iai1jb25mIC1DICIke0NDfSIgLWMgJHtob3N0X2NwdX0gLW8gJHtob3N0X29zfSAtdiAke2hvc3RfdmVuZG9yfWAKKyAKKy0jCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorLSMJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKy0jCSopCQkJU0hMSUJfTElCUz0iJFNITElCX0xJQlMgJFRFUk1DQVBfTElCIiA7OworLSMJZXNhYworKwljYXNlICIkU0hMSUJfTElCUyIgaW4KKysJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKysJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CisrCWVzYWMKKyAJCisgICAgICAgICBBQ19TVUJTVChTSE9CSl9DQykKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2ZpeC1yZWR1bmRhbnQtcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjZiNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlYWRsaW5lLTUuMi9zdXBwb3J0L3Nob2JqLWNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSByZWFkbGluZS01LjIub3JpZy9zdXBwb3J0L3Nob2JqLWNvbmYKKysrKyByZWFkbGluZS01LjIvc3VwcG9ydC9zaG9iai1jb25mCitAQCAtMTEwLDcgKzExMCw3IEBAIGxpbnV4Ki0qfGdudSotKnxrKmJzZCotZ251LSopCisgCVNIT0JKX0xEPScke0NDfScKKyAJU0hPQkpfTERGTEFHUz0nLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCcKKyAKKy0JU0hMSUJfWExERkxBR1M9Jy1XbCwtcnBhdGgsJChsaWJkaXIpIC1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisrCVNITElCX1hMREZMQUdTPSctV2wsLXNvbmFtZSxgYmFzZW5hbWUgJEAgJChTSExJQl9NSU5PUilgJworIAlTSExJQl9MSUJWRVJTSU9OPSckKFNITElCX0xJQlNVRkYpLiQoU0hMSUJfTUFKT1IpJChTSExJQl9NSU5PUiknCisgCTs7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9jb25maWd1cmUtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjMxMDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2l0aG91dCB0aGlzIGl0IGZhaWxzIHRvIGxpbmsgYWdhaW5zdCBsaWJ0ZXJtY2FwIGNhdXNpbmcgdmFyaW91cyBtaXNzaW5nCitzeW1ib2xzIGlzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK1N1cHBvcnQgNi4zIHdoaWNoIHVzZXMgY29uZmlndXJlLmFjIHJhdGhlciB0aGFuIGNvbmZpZ3VyZS5pbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZWE4ZjkxLi45MDc1YjhmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMTgsMTAgKzIxOCwxMCBAQCBpZiB0ZXN0IC1mICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmY7IHRoZW4KKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKQorICAgICAgICAgZXZhbCBgVEVSTUNBUF9MSUI9JFRFUk1DQVBfTElCICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmYgLUMgIiR7Q0N9IiAtYyAke2hvc3RfY3B1fSAtbyAke2hvc3Rfb3N9IC12ICR7aG9zdF92ZW5kb3J9YAorIAorLSMJY2FzZSAiJFNITElCX0xJQlMiIGluCistIwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworLSMJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CistIwllc2FjCisrCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorKwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworKwkqKQkJCVNITElCX0xJQlM9IiRTSExJQl9MSUJTICRURVJNQ0FQX0xJQiIgOzsKKysJZXNhYworIAkKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NDKQorICAgICAgICAgQUNfU1VCU1QoU0hPQkpfQ0ZMQUdTKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmUtZGlzcGF0Y2gtbXVsdGlrZXkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkMWFjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gOGVmODUyYTViZTcyYzc1ZTE3ZjI1MTBiZWE1MjQ1NWY4MDliNTZjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZXQgUmFtZXkgPGNoZXQucmFtZXlAY2FzZS5lZHU+CitEYXRlOiBGcmksIDI4IE1hciAyMDE0IDE0OjA3OjQyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTBdIFJlYWRsaW5lLTYuMyBwYXRjaCAyCisKK0ZpeGVzIG11bHRpLWtleSBpc3N1ZSBpZGVudGlmaWVkIGluIHRoaXMgdGhyZWFkOgoraHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDE0LTAzL21zZzAwMDEwLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyByZWFkbGluZS5jIHwgMyArKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3JlYWRsaW5lLmMgYi9yZWFkbGluZS5jCitpbmRleCBlYjRlYWUzLi5hYmIyOWEwIDEwMDY0NAorLS0tIGEvcmVhZGxpbmUuYworKysrIGIvcmVhZGxpbmUuYworQEAgLTc0NCw3ICs3NDQsOCBAQCBfcmxfZGlzcGF0Y2hfY2FsbGJhY2sgKGN4dCkKKyAgICAgciA9IF9ybF9zdWJzZXFfcmVzdWx0IChyLCBjeHQtPm9sZG1hcCwgY3h0LT5va2V5LCAoY3h0LT5mbGFncyAmIEtTRVFfU1VCU0VRKSk7CisgCisgICBSTF9DSEVDS19TSUdOQUxTICgpOworLSAgaWYgKHIgPT0gMCkJCQkvKiBzdWNjZXNzISAqLworKyAgLyogV2Ugb25seSB0cmVhdCB2YWx1ZXMgPCAwIHNwZWNpYWxseSB0byBzaW11bGF0ZSByZWN1cnNpb24uICovCisrICBpZiAociA+PSAwIHx8IChyID09IC0xICYmIChjeHQtPmZsYWdzICYgS1NFUV9TVUJTRVEpID09IDApKQkvKiBzdWNjZXNzISBvciBmYWlsdXJlISAqLworICAgICB7CisgICAgICAgX3JsX2tleXNlcV9jaGFpbl9kaXNwb3NlICgpOworICAgICAgIFJMX1VOU0VUU1RBVEUgKFJMX1NUQVRFX01VTFRJS0VZKTsKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lNjMtMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YTlkODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMwpAQCAtMCwwICsxLDQzIEBACityZWFkbGluZTogU2VjdXJpdHkgQWR2aXNvcnkgLSByZWFkbGluZSAtIENWRS0yMDE0LTI1MjQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKKwkJCSAgIFJFQURMSU5FIFBBVENIIFJFUE9SVAorCQkJICAgPT09PT09PT09PT09PT09PT09PT09CisKK1JlYWRsaW5lLVJlbGVhc2U6IDYuMworUGF0Y2gtSUQ6IHJlYWRsaW5lNjMtMDAzCisKK0J1Zy1SZXBvcnRlZC1ieToKK0J1Zy1SZWZlcmVuY2UtSUQ6CitCdWctUmVmZXJlbmNlLVVSTDoKKworQnVnLURlc2NyaXB0aW9uOgorCitUaGVyZSBhcmUgZGVidWdnaW5nIGZ1bmN0aW9ucyBpbiB0aGUgcmVhZGxpbmUgcmVsZWFzZSB0aGF0IGFyZSB0aGVvcmV0aWNhbGx5CitleHBsb2l0YWJsZSBhcyBzZWN1cml0eSBwcm9ibGVtcy4gIFRoZXkgYXJlIG5vdCBwdWJsaWMgZnVuY3Rpb25zLCBidXQgaGF2ZQorZ2xvYmFsIGxpbmthZ2UuCisKK1BhdGNoIChhcHBseSB3aXRoIGBwYXRjaCAtcDAnKToKKworKioqIC4uL3JlYWRsaW5lLTYuMy91dGlsLmMJMjAxMy0wOS0wMiAxMzozNjoxMi4wMDAwMDAwMDAgLTA0MDAKKy0tLSB1dGlsLmMJMjAxNC0wMy0yMCAxMDoyNTo1My4wMDAwMDAwMDAgLTA0MDAKKyoqKioqKioqKioqKioqKgorKioqIDQ3Nyw0ODAgKioqKgorLS0tIDQ3OSw0ODMgLS0tLQorICB9CisgIAorKyAjaWYgZGVmaW5lZCAoREVCVUcpCisgICNpZiBkZWZpbmVkIChVU0VfVkFSQVJHUykKKyAgc3RhdGljIEZJTEUgKl9ybF90cmFjZWZwOworKioqKioqKioqKioqKioqCisqKiogNTM5LDU0MiAqKioqCistLS0gNTQyLDU0NiAtLS0tCisgIH0KKyAgI2VuZGlmCisrICNlbmRpZiAvKiBERUJVRyAqLworICAKKyAgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2NjJjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZWRpdGluZyB0eXBlZCBjb21tYW5kIGxpbmVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBSZWFkbGluZSBsaWJyYXJ5IHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGFsbG93IHVzZXJzIHRvIGVkaXQgXAorY29tbWFuZCBsaW5lcyBhcyB0aGV5IGFyZSB0eXBlZCBpbi4gQm90aCBFbWFjcyBhbmQgdmkgZWRpdGluZyBtb2RlcyBhcmUgYXZhaWxhYmxlLiBUaGUgUmVhZGxpbmUgbGlicmFyeSBpbmNsdWRlcyAgXAorYWRkaXRpb25hbCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHByZXZpb3VzbHktZW50ZXJlZCBjb21tYW5kIGxpbmVzLCB0byByZWNhbGwgYW5kIHBlcmhhcHMgcmVlZGl0IHRob3NlICAgXAorbGluZXMsIGFuZCBwZXJmb3JtIGNzaC1saWtlIGhpc3RvcnkgZXhwYW5zaW9uIG9uIHByZXZpb3VzIGNvbW1hbmRzLiIKK1NFQ1RJT04gPSAibGlicyIKKworIyBHUEx2MisgKDwgNi4wKSwgR1BMdjMrICg+PSA2LjApCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTICs9ICJuY3Vyc2VzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9ycGF0aC5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworTEVBRF9TT05BTUUgPSAibGlicmVhZGxpbmUuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIGluc3RhbGwgZG9lc24ndCBwcm9wZXJseSBpbnN0YWxsIHRoZXNlCisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGliaGlzdG9yeSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGlicmVhZGxpbmUgJHtEfSR7bGliZGlyfQorCisJcm1kaXIgJHtEfSR7YmluZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDA3YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYgpAQCAtMCwwICsxLDg0IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGVkaXRpbmcgdHlwZWQgY29tbWFuZCBsaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgUmVhZGxpbmUgbGlicmFyeSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB1c2VycyB0byBlZGl0IFwKK2NvbW1hbmQgbGluZXMgYXMgdGhleSBhcmUgdHlwZWQgaW4uIEJvdGggRW1hY3MgYW5kIHZpIGVkaXRpbmcgbW9kZXMgYXJlIGF2YWlsYWJsZS4gVGhlIFJlYWRsaW5lIGxpYnJhcnkgaW5jbHVkZXMgIFwKK2FkZGl0aW9uYWwgZnVuY3Rpb25zIHRvIG1haW50YWluIGEgbGlzdCBvZiBwcmV2aW91c2x5LWVudGVyZWQgY29tbWFuZCBsaW5lcywgdG8gcmVjYWxsIGFuZCBwZXJoYXBzIHJlZWRpdCB0aG9zZSAgIFwKK2xpbmVzLCBhbmQgcGVyZm9ybSBjc2gtbGlrZSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBwcmV2aW91cyBjb21tYW5kcy4iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDNiMzZmZGQ4NGY3NGI4ZDgxODlhMjAyYjk4MGI2N2YiCisKK0RFUEVORFMgKz0gIm5jdXJzZXMiCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAxO25hbWU9cGF0Y2gxO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAyO25hbWU9cGF0Y2gyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAzO25hbWU9cGF0Y2gzO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA0O25hbWU9cGF0Y2g0O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA1O25hbWU9cGF0Y2g1O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA2O25hbWU9cGF0Y2g2O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA3O25hbWU9cGF0Y2g3O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA4O25hbWU9cGF0Y2g4O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA5O25hbWU9cGF0Y2g5O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEwO25hbWU9cGF0Y2gxMDthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxMTtuYW1lPXBhdGNoMTE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTI7bmFtZT1wYXRjaDEyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEzO25hbWU9cGF0Y2gxMzthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxNDtuYW1lPXBhdGNoMTQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlMzkzMzFmMzJhZDE0MDA5YjlmZjQ5Y2MxMGM1ZTc1MSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjEyZTg4ZDk2YWVlMmNkMTE5MjUwMDM1NmYwNTM1NTQwZGI0OTkyODJjYTdmNzYzMzlmYjQyMjhjMzEyNDlmNDUiCisKK1NSQ19VUklbcGF0Y2gxLm1kNXN1bV0gICAgPSAiOWQ0ZDQxNjIyYWE5YjIzMGM1N2Y2ODU0OGNlODdkOGYiCitTUkNfVVJJW3BhdGNoMS5zaGEyNTZzdW1dID0gImVhYzMwNGMzNjkxNTQwNTlmOTMwNDlhZGEzMjg3MzlmYWFmNDAzMzhkM2NiMWZiNGI1NDRjOTNkNWNlM2Y4ZDUiCitTUkNfVVJJW3BhdGNoMi5tZDVzdW1dICAgID0gImYwM2U1MTJkMTQyMDZlMzdmN2Q2YTc0OGI1NmI5NDc2IgorU1JDX1VSSVtwYXRjaDIuc2hhMjU2c3VtXSA9ICI5ZGVhY2FlZjI1NTA3YTBjMmFlMGI2NjFiZjkzNDI1NTliNTlhMjk1NGQ2NmVhM2M1ZjViY2Q5MDBmZGZjZjc4IgorU1JDX1VSSVtwYXRjaDMubWQ1c3VtXSAgICA9ICIyNTJiNDJkODc1MGYxYTk0YjZiZGYwODY2MTJkY2ViMiIKK1NSQ19VUklbcGF0Y2gzLnNoYTI1NnN1bV0gPSAiMmE1NWQyZWNiMWM5YjAxNDdhZWIxOTNhNjMyMzYxNmFiMzFjMWM1MjVhODNiMmRiM2E5OTRiMTU1OTRiYTkzNCIKK1NSQ19VUklbcGF0Y2g0Lm1kNXN1bV0gICAgPSAiYTMyMzMzYzJlNjAzYTNlZDI1MDUxNGU5MTA1MGU1NTIiCitTUkNfVVJJW3BhdGNoNC5zaGEyNTZzdW1dID0gImEwM2I2NTYzMzc4MWVmYTdjM2FhZTVkNTcxNjI5ODVlN2I3YTNjMTBhY2YwZjI2MjFiZTYxMGUxNmYyN2U1ZjIiCitTUkNfVVJJW3BhdGNoNS5tZDVzdW1dICAgID0gIjgxMDY3OTZjMDliNzg5NTIzYTNhNzhhYjY5YzA0YjZkIgorU1JDX1VSSVtwYXRjaDUuc2hhMjU2c3VtXSA9ICIwNjAwMTg5NjUxNDE0OGE3NTdlYTZlZGJiZDQwYzRmYzQzMzFkYzY1Mzg0NzI0NDM4NmMzN2IxMzhiMTUwZjY0IgorU1JDX1VSSVtwYXRjaDYubWQ1c3VtXSAgICA9ICI1MTIxODhlMmJmMDgzN2Y3ZWNhMTlkYmY3MWYxODJhZSIKK1NSQ19VUklbcGF0Y2g2LnNoYTI1NnN1bV0gPSAiZGZlZjNlOTgyYzBhZGY4YmI1YTliN2QwNDY4ZWM4ZjVmMTgxMzhiMzI1ZTI4NzU5NDM3NDY0ZGU1YmU3MTAxMyIKK1NSQ19VUklbcGF0Y2g3Lm1kNXN1bV0gICAgPSAiYWMxN2FjYTYyZWI2ZmIzOThjOWYyZmU5ZGU1NDBhZmYiCitTUkNfVVJJW3BhdGNoNy5zaGEyNTZzdW1dID0gIjc3NWIwMjhjN2I3NjEzOTdhYzZhZTFiZGZiYWM3ZTg5NmRjM2I5YjNhZGMyZjkxMzEyNDk5MTgwY2ExM2JkZDEiCitTUkNfVVJJW3BhdGNoOC5tZDVzdW1dICAgID0gIjI0ODRjMzkyZGIwMjE5MDVmMTEyY2Y5N2E5NGRmZDRjIgorU1JDX1VSSVtwYXRjaDguc2hhMjU2c3VtXSA9ICJhMjFiNGUwYmYwNTMwYjg3OGJhZDI0ZDViZTIzZDE4YTllMDNhNzVhMzFhZTMwODQ0ZGMwOTMzYmIzZDc3ZWNkIgorU1JDX1VSSVtwYXRjaDkubWQ1c3VtXSAgICA9ICJmYzZlYjM1ZDA3OTE0ZmFlNWM1N2Q0OWMxMjQ4M2ZmNyIKK1NSQ19VUklbcGF0Y2g5LnNoYTI1NnN1bV0gPSAiMTM4ZDVlMGYwNzA5YTQ3YTJkMTYyMTI5NWEzZGQ1ZTNjYzczYjYzYjVjYzI4ZGFiMDNhYmM0ZTk0ZmU5NWVjZiIKK1NSQ19VUklbcGF0Y2gxMC5tZDVzdW1dICAgID0gIjdhMmJmM2RjN2FjNzY4MGIxNDYxYTU3MDExMDBlOTFiIgorU1JDX1VSSVtwYXRjaDEwLnNoYTI1NnN1bV0gPSAiODNmOGMxYWFkYjg2YjFhMmZhZDg4MjFhOWM2YmU3MmE4ZGU1YWZkN2ZkOWZkZTU4YTMwYjNiNTdkOTM5NjkzZSIKK1NSQ19VUklbcGF0Y2gxMS5tZDVzdW1dICAgID0gImVmNmNlZjY4MjI2NjM0NzBmNmFjOGM1MTdjNWE3ZWM2IgorU1JDX1VSSVtwYXRjaDExLnNoYTI1NnN1bV0gPSAiMDhhZDMzODRhYjA5MDZlNmZhNGNjNDE3ZWI4YzQzZmY1OTM3NWJjZWFkMTVmZDVjOGUzMTczMGYwNDEzYjNkNiIKK1NSQ19VUklbcGF0Y2gxMi5tZDVzdW1dICAgID0gImUzZTlmNDQxYzgxMTE1ODk4NTViYzM2M2U1NjQwZjZjIgorU1JDX1VSSVtwYXRjaDEyLnNoYTI1NnN1bV0gPSAiMjBmMDI0M2JlMjI5OWMyMzIxMzQ5MmNjMmMxOWNmZDE1Y2M1MjhkMmI1NjZhNzZhMmRlNTgzMDZiYjllNGM5ZSIKK1NSQ19VUklbcGF0Y2gxMy5tZDVzdW1dICAgID0gIjNlMmU1ZjU0M2VkMjY4YTY4ZmQxZmE4MzlmYWFkZTFhIgorU1JDX1VSSVtwYXRjaDEzLnNoYTI1NnN1bV0gPSAiMGNjNjQ5NTE2YTViZGZhNjFjNWU1NjkzNzQwNzU3MDI4OGI2OTcyZDc1YWExYmQwNjBhZDMwZWJlOTgxNDRkNSIKK1NSQ19VUklbcGF0Y2gxNC5tZDVzdW1dICAgID0gImExYmUzMGUxYzZmMTA5OWJiNWZjZWYwMGEyNjMxZmI4IgorU1JDX1VSSVtwYXRjaDE0LnNoYTI1NnN1bV0gPSAiNmYxYTY4MzIwZDAxNTIyY2ExZWE1YTczNzEyNGVjYzg3MzlmM2RjYmZlYTJkZWUyMWUzY2NmODM5YTIxYTgxNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK0xFQURfU09OQU1FID0gImxpYnJlYWRsaW5lLnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgTWFrZSBpbnN0YWxsIGRvZXNuJ3QgcHJvcGVybHkgaW5zdGFsbCB0aGVzZQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYmhpc3RvcnkgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYnJlYWRsaW5lICR7RH0ke2xpYmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTk2NGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHJlYWRsaW5lLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vcmVhZGxpbmU2My0wMDMgXAorICAgICAgICAgICAgZmlsZTovL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzM2M4ZmIyNzllOTgxMjc0ZjQ4NWZkOTFkYTc3ZTk0YSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjU2YmE2MDcxYjk0NjJmOTgwYzVhNzJhYjAwMjM4OTNiNjViYTZkZWJiNGVlYjQ3NWQ3YTU2M2RjNjVjYWZkNDMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDgyOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0zNjAwMzQ1Jmdyb3VwX2lkPTQ0NDI3JmF0aWQ9NDM5NTQ0XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYyBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYworLS0tIHN5c2ZzdXRpbHMtMi4xLjAvY29uZmlndXJlLmFjCTIwMDYtMDgtMDcgMDg6MDg6MDAuMDAwMDAwMDAwICswMzAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jb25maWd1cmUuYWMJMjAxMy0wMS0xMSAwODoxMzowOC42NTE1NTA2MzQgKzAyMDAKK0BAIC0yLDcgKzIsNyBAQAorIEFDX0lOSVQoc3lzZnN1dGlscywgMi4xLjAsIGxpbnV4LWRpYWctZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0KQorIEFNX0lOSVRfQVVUT01BS0UKKyBBQ19DT05GSUdfU1JDRElSKFtjb25maWcuaC5pbl0pCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyAjIENoZWNrcyBmb3IgS0xJQkMgc3VwcG9ydCAoc2hvdWxkIGJlIGJlZm9yZSBBQ19QUk9HX0xJQlRPT0wgYW5kIEFDX1BST0dfQ0MpCisgQUNfQ0hFQ0tfS0xJQkMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3NlcGFyYXRlYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZTcyNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggb3V0IG9mIHRyZWUgYnVpbGQgaXNzdWVzIHNvICR7Qn0gIT0gJHtTfSB3b3Jrcy4KKworUlAgMjAxMy8wMy8xOAorCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvY21kL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDYgKzEsNiBAQAorIGJpbl9QUk9HUkFNUyA9IHN5c3Rvb2wgCisgc3lzdG9vbF9TT1VSQ0VTID0gc3lzdG9vbC5jIG5hbWVzLmMgbmFtZXMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgTERBREQgPSAuLi9saWIvbGlic3lzZnMubGEKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZMQUdTQAorIEFNX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DRkxBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvbGliL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorIGxpYl9MVExJQlJBUklFUyA9IGxpYnN5c2ZzLmxhCisgbGlic3lzZnNfbGFfU09VUkNFUyA9IHN5c2ZzX3V0aWxzLmMgc3lzZnNfYXR0ci5jIHN5c2ZzX2NsYXNzLmMgZGxpc3QuYyBcCisgICAgICAgc3lzZnNfZGV2aWNlLmMgc3lzZnNfZHJpdmVyLmMgc3lzZnNfYnVzLmMgc3lzZnNfbW9kdWxlLmMgc3lzZnMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgbGlic3lzZnNfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMjoxOjAKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0xGQUdTQAorIGxpYnN5c2ZzX2xhX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DTEZBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC90ZXN0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzZnN1dGlscy0yLjEuMC5vcmlnL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy4yMjQ1NTY1MDggKzAwMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwOTowNjo0OC4xOTY1NDMzMjYgKzAwMDAKK0BAIC0yLDE0ICsyLDE0IEBACisgQlVJTFRfU09VUkNFUyA9IHRlc3QuaAorIENMRUFORklMRVMgPSB0ZXN0LmgKKyB0ZXN0Lmg6CistCS4vY3JlYXRlLXRlc3QKKysJJChzcmNkaXIpL2NyZWF0ZS10ZXN0ICQoc3JjZGlyKS9saWJzeXNmcy5jb25mCisgZ2V0X2RldmljZV9TT1VSQ0VTID0gZ2V0X2RldmljZS5jCisgZ2V0X2RyaXZlcl9TT1VSQ0VTID0gZ2V0X2RyaXZlci5jCisgZ2V0X21vZHVsZV9TT1VSQ0VTID0gZ2V0X21vZHVsZS5jCisgdGVzdGxpYnN5c2ZzX1NPVVJDRVMgPSB0ZXN0LmMgdGVzdF9hdHRyLmMgdGVzdF9idXMuYyB0ZXN0X2NsYXNzLmMgXAorIAkJICAgICAgIHRlc3RfZGV2aWNlLmMgdGVzdF9kcml2ZXIuYyB0ZXN0X21vZHVsZS5jIHRlc3RfdXRpbHMuYyBcCisgCQkgICAgICAgdGVzdG91dC5jIHRlc3QtZGVmcy5oIGxpYnN5c2ZzLmNvbmYgY3JlYXRlLXRlc3QKKy1JTkNMVURFUyA9IC1JLi4vaW5jbHVkZQorK0lOQ0xVREVTID0gLUkkKHNyY2RpcikvLi4vaW5jbHVkZQorIExEQUREID0gLi4vbGliL2xpYnN5c2ZzLmxhCisgRVhUUkFfQ0ZMQUdTID0gQEVYVFJBX0NMRkFHU0AKKyBBTV9DRkxBR1MgPSAtV2FsbCAtVyAtV3N0cmljdC1wcm90b3R5cGVzICQoRVhUUkFfQ0xGQUdTKQorSW5kZXg6IHN5c2ZzdXRpbHMtMi4xLjAvdGVzdC9jcmVhdGUtdGVzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2ZzdXRpbHMtMi4xLjAub3JpZy90ZXN0L2NyZWF0ZS10ZXN0CTIwMDUtMTEtMjggMTA6MjI6MTAuMDAwMDAwMDAwICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC90ZXN0L2NyZWF0ZS10ZXN0CTIwMTMtMDMtMDggMDk6MDc6MDMuMzcyNTQyODM4ICswMDAwCitAQCAtMiw3ICsyLDcgQEAKKyAKKyBybSAtZiB0ZXN0LmgKKyAKKy1jb25mX2ZpbGU9Li9saWJzeXNmcy5jb25mCisrY29uZl9maWxlPSQxCisgCisgLiAkY29uZl9maWxlCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3N5c2ZzdXRpbHMtMi4wLjAtY2xhc3MtZHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzViNzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGZlZG9yYSBjb3JlIDldCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSB0aGUgRmVkb3JhIENvcmUgOSBzeXNmc3V0aWxzLTIuMS4wLTMuZmM5IHBhY2thZ2UuCisKK0l0IGZpeGVzIGEgcHJvYmxlbSBpbiB0aGUgdXBzdHJlYW0gcGFja2FnZSB3aGVyZSBub3QgYWxsIGRldmljZXMgCit3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbi4KKworVGhlIHBhY2thZ2UgTGljZW5zZSBpbmRpY2F0ZXMgdGhpcyBpcyBHUEx2MiBsaWNlbnNlZC4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC1wdU4gbGliL3N5c2ZzX2NsYXNzLmN+c3lzZnN1dGlsc19jbGFzc19kdXAgbGliL3N5c2ZzX2NsYXNzLmMKKy0tLSBzeXNmc3V0aWxzLTIuMS4wL2xpYi9zeXNmc19jbGFzcy5jfnN5c2ZzdXRpbHNfY2xhc3NfZHVwCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCisrKysgc3lzZnN1dGlscy0yLjEuMC1iamtpbmcxL2xpYi9zeXNmc19jbGFzcy5jCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCitAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW50IGNkZXZfbmFtZV9lcXVhbCh2b2lkICphLCB2b2lkCisgCQlyZXR1cm4gMDsKKyAKKyAJaWYgKHN0cm5jbXAoKGNoYXIgKilhLCAoKHN0cnVjdCBzeXNmc19jbGFzc19kZXZpY2UgKiliKS0+bmFtZSwKKy0JCQkJc3RybGVuKChjaGFyICopYSkpID09IDApCisrCQkJCVNZU0ZTX05BTUVfTEVOKSA9PSAwKQorIAkJcmV0dXJuIDE7CisgCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlsc18yLjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWY0MGY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJUb29scyBmb3Igd29ya2luZyB3aXRoIHN5c2ZzIgorREVTQ1JJUFRJT04gPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgc3lzZnMgdmlydHVhbCBmaWxlc3lzdGVtLiAgVGhlIHRvb2wgJ3N5c3Rvb2wnIGNhbiBxdWVyeSBkZXZpY2VzIGJ5IGJ1cywgY2xhc3MgYW5kIHRvcG9sb2d5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saW51eC1kaWFnLnNvdXJjZWZvcmdlLm5ldC9TeXNmc3V0aWxzLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIiCitMSUNFTlNFX2xpYnN5c2ZzID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2QwNjQwM2VhNTRjNzU3NGE5ZTU4MWM2NDc4Y2MzOTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY21kL0dQTDttZDU9ZDQxZDRlMmUxZTEwODU1NGUwMzg4ZWE0YWVjZDhkMjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL0xHUEw7bWQ1PWI3NWQwNjk3OTExMDNmZmUxYzBkNjQzNWRlZWZmNzJlIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpbnV4LWRpYWcvc3lzZnN1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlYnVpbGQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNGU3ZGNkMDQzNmQyZjQ5YWE0MDNmNjdlMWVmN2RkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlODY1ZGUyYzFmNTU5ZmZmMGQzZmM5MzZlNjYwYzBlZmFmN2FmZTY2MjA2NGYyZmI5N2NjYWQxZWMyOGQyMDhhIgorUyA9ICIke1dPUktESVJ9L3N5c2ZzdXRpbHMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rICJsaWJzeXNmcyIKK0ZJTEVTX2xpYnN5c2ZzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfbGlic3lzZnMtZGV2ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJzeXNmcy1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKKworZXhwb3J0IGxpYmRpciA9ICIke2Jhc2VfbGliZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhmZjA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiRW5oYW5jZXMgc3lzdGVtZCBjb21wYXRpbGliaXR5IHdpdGggZXhpc3RpbmcgU3lzVmluaXQgc2NyaXB0cyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKKworUFIgPSAicjI5IgorCitERVBFTkRTID0gInN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2gKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTID0gIiBcCisgIGJ1c3lib3gtdWRoY3BjIFwKKyAgaHdjbG9jayBcCisgIG5ldHdvcmtpbmcgXAorICBuZnNzZXJ2ZXIgXAorICBuZnNjb21tb24gXAorICBzeXNsb2cuYnVzeWJveCBcCisiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJY2QgJEQke3N5c2NvbmZkaXJ9L2luaXQuZAorCisJZWNobyAiRGlzYWJsaW5nIHRoZSBmb2xsb3dpbmcgc3lzdiBzY3JpcHRzOiAiCisKKwlPUFRTPSIiCisKKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFRTPSItLXJvb3Q9JEQiCisJZmkKKworCWZvciBpIGluICR7U1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTfSA7IGRvCisJCWlmIFsgXCggLWUgJGkgLW8gJGkuc2ggXCkgLWEgISBcKCAtZSAkRCR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vJGkuc2VydmljZSAtbyAgLWUgJEQke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyRpLnNlcnZpY2UgXCkgXSA7IHRoZW4KKwkJCWVjaG8gLW4gIiRpOiAiIDsgc3lzdGVtY3RsICR7T1BUU30gbWFzayAkaS5zZXJ2aWNlCisJCWZpCisJZG9uZSA7IGVjaG8KK30KKworUkRQRVBFTkRTXyR7UE59ID0gInN5c3RlbWQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OGIxMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlNlcmlhbCB0ZXJtaW5hbCBzdXBwb3J0IGZvciBzeXN0ZW1kIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworUFIgPSAicjUiCisKK1NFUklBTF9DT05TT0xFID89ICIxMTUyMDAgdHR5UzAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NlcmlhbC1nZXR0eUAuc2VydmljZSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWlmIFsgISAteiAiJHtTRVJJQUxfQ09OU09MRVN9IiBdIDsgdGhlbgorCQlkZWZhdWx0X2JhdWRyYXRlPWBlY2hvICIke1NFUklBTF9DT05TT0xFU30iIHwgc2VkICdzL1w7LiovLydgCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzLworCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kZGVmYXVsdF9iYXVkcmF0ZS9nICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eUAuc2VydmljZQorCisJCXRtcD0iJHtTRVJJQUxfQ09OU09MRVN9IgorCQlmb3IgZW50cnkgaW4gJHRtcCA7IGRvCisJCQliYXVkcmF0ZT1gZWNobyAkZW50cnkgfCBzZWQgJ3MvXDsuKi8vJ2AKKwkJCXR0eWRldj1gZWNobyAkZW50cnkgfCBzZWQgLWUgJ3MvXlswLTldKlw7Ly8nIC1lICdzL1w7LiovLydgCisJCQlpZiBbICIkYmF1ZHJhdGUiID0gIiRkZWZhdWx0X2JhdWRyYXRlIiBdIDsgdGhlbgorCQkJCSMgZW5hYmxlIHRoZSBzZXJ2aWNlCisJCQkJbG4gLXNmICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlIFwKKwkJCQkJJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzL3NlcmlhbC1nZXR0eUAkdHR5ZGV2LnNlcnZpY2UKKwkJCWVsc2UKKwkJCQkjIGluc3RhbGwgY3VzdG9tIHNlcnZpY2UgZmlsZSBmb3IgdGhlIG5vbi1kZWZhdWx0IGJhdWRyYXRlCisJCQkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZQorCQkJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kYmF1ZHJhdGUvZyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVALnNlcnZpY2UKKwkJCQkjIGVuYWJsZSB0aGUgc2VydmljZQorCQkJCWxuIC1zZiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZSBcCisJCQkJCSR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtL2dldHR5LnRhcmdldC53YW50cy9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVAJHR0eWRldi5zZXJ2aWNlCisJCQlmaQorCQlkb25lCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAic3lzdGVtZCIKKworIyBUaGlzIGlzIGEgbWFjaGluZSBzcGVjaWZpYyBmaWxlCitGSUxFU18ke1BOfSA9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZSAke3N5c2NvbmZkaXJ9IgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBBcyB0aGlzIHBhY2thZ2UgaXMgdGllZCB0byBzeXN0ZW1kLCBvbmx5IGJ1aWxkIGl0IHdoZW4gd2UncmUgYWxzbyBidWlsZGluZyBzeXN0ZW1kLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5L3NlcmlhbC1nZXR0eUAuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5L3NlcmlhbC1nZXR0eUAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODIxNjdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkvc2VyaWFsLWdldHR5QC5zZXJ2aWNlCkBAIC0wLDAgKzEsMzcgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN5c3RlbWQuCisjCisjICBzeXN0ZW1kIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworW1VuaXRdCitEZXNjcmlwdGlvbj1TZXJpYWwgR2V0dHkgb24gJUkKK0RvY3VtZW50YXRpb249bWFuOmFnZXR0eSg4KSBtYW46c3lzdGVtZC1nZXR0eS1nZW5lcmF0b3IoOCkKK0RvY3VtZW50YXRpb249aHR0cDovLzBwb2ludGVyLmRlL2Jsb2cvcHJvamVjdHMvc2VyaWFsLWNvbnNvbGUuaHRtbAorQmluZHNUbz1kZXYtJWkuZGV2aWNlCitBZnRlcj1kZXYtJWkuZGV2aWNlIHN5c3RlbWQtdXNlci1zZXNzaW9ucy5zZXJ2aWNlIHBseW1vdXRoLXF1aXQtd2FpdC5zZXJ2aWNlCitBZnRlcj1yYy1sb2NhbC5zZXJ2aWNlCisKKyMgSWYgYWRkaXRpb25hbCBnZXR0eXMgYXJlIHNwYXduZWQgZHVyaW5nIGJvb3QgdGhlbiB3ZSBzaG91bGQgbWFrZQorIyBzdXJlIHRoYXQgdGhpcyBpcyBzeW5jaHJvbml6ZWQgYmVmb3JlIGdldHR5LnRhcmdldCwgZXZlbiB0aG91Z2gKKyMgZ2V0dHkudGFyZ2V0IGRpZG4ndCBhY3R1YWxseSBwdWxsIGl0IGluLgorQmVmb3JlPWdldHR5LnRhcmdldAorSWdub3JlT25Jc29sYXRlPXllcworCitbU2VydmljZV0KK0Vudmlyb25tZW50PSJURVJNPXh0ZXJtIgorRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLTggLUwgLS1rZWVwLWJhdWQgJUkgQEJBVURSQVRFQCAkVEVSTQorVHlwZT1pZGxlCitSZXN0YXJ0PWFsd2F5cworUmVzdGFydFNlYz0wCitVdG1wSWRlbnRpZmllcj0lSQorVFRZUGF0aD0vZGV2LyVJCitUVFlSZXNldD15ZXMKK1RUWVZIYW5ndXA9eWVzCitLaWxsTW9kZT1wcm9jZXNzCitJZ25vcmVTSUdQSVBFPW5vCitTZW5kU0lHSFVQPXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWdldHR5LnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkYzljMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIGZvciBlbmFibGluZyBzeXN0ZW1kIHNlcnZpY2VzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitQUiA9ICJyNiIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJmaWxlOi8vc3lzdGVtY3RsIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3lzdGVtY3RsICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC9zeXN0ZW1jdGwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlMTYzYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKK2VjaG8gIlN0YXJ0ZWQgJDAgJCoiCisKK1JPT1Q9CisKKyMgcGFyc2UgY29tbWFuZCBsaW5lIHBhcmFtcworYWN0aW9uPQord2hpbGUgWyAkIyAhPSAwIF07IGRvCisJb3B0PSIkMSIKKworCWNhc2UgIiRvcHQiIGluCisJCWVuYWJsZSkKKwkJCXNoaWZ0CisKKwkJCWFjdGlvbj0iJG9wdCIKKwkJCXNlcnZpY2VzPSIkMSIKKwkJCWNtZF9hcmdzPSIxIgorCQkJc2hpZnQKKwkJCTs7CisJCWRpc2FibGUpCisJCQlzaGlmdAorCisJCQlhY3Rpb249IiRvcHQiCisJCQlzZXJ2aWNlcz0iJDEiCisJCQljbWRfYXJncz0iMSIKKwkJCXNoaWZ0CisJCQk7OworCQltYXNrKQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJcHJlc2V0KQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yb290PSopCisJCQlST09UPSR7b3B0IyMtLXJvb3Q9fQorCQkJY21kX2FyZ3M9IjAiCisJCQlzaGlmdAorCQkJOzsKKwkJKikKKwkJCWlmIFsgIiRjbWRfYXJncyIgPSAiMSIgXTsgdGhlbgorCQkJCXNlcnZpY2VzPSIkc2VydmljZXMgJG9wdCIgCisJCQkJc2hpZnQKKwkJCWVsc2UKKwkJCQllY2hvICInJG9wdCcgaXMgYW4gdW5rb3duIG9wdGlvbjsgZXhpdGluZyB3aXRoIGVycm9yIgorCQkJCWV4aXQgMQorCQkJZmkKKwkJCTs7CisJZXNhYworZG9uZQoraWYgWyAiJGFjdGlvbiIgPSAicHJlc2V0IiAtYSAiJHNlcnZpY2VfZmlsZSIgPSAiIiBdOyB0aGVuCisJc2VydmljZXM9JChmb3IgZiBpbiBgZmluZCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0gJFJPT1QvbGliL3N5c3RlbWQvc3lzdGVtICRST09UL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0gLXR5cGUgZiAyPjFgOyBkbyBiYXNlbmFtZSAkZjsgZG9uZSkKKwlzZXJ2aWNlcz0iJHNlcnZpY2VzICRvcHQiCisJcHJlc2V0YWxsPTEKK2ZpCisKK2ZvciBzZXJ2aWNlIGluICRzZXJ2aWNlczsgZG8KKwlpZiBbICIkcHJlc2V0YWxsIiA9ICIxIiBdOyB0aGVuCisJCWFjdGlvbj0icHJlc2V0IgorCWZpCisJaWYgWyAiJGFjdGlvbiIgPSAibWFzayIgXTsgdGhlbgorCQlpZiBbICEgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyBdOyB0aGVuCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vCisJCWZpCisJCWNtZD0ibG4gLXMgL2Rldi9udWxsICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kc2VydmljZSIKKwkJZWNobyAiJGNtZCIKKwkJJGNtZAorCQlleGl0IDAKKwlmaQorCisJc2VydmljZV9iYXNlX2ZpbGU9YGVjaG8gJHNlcnZpY2UgfCBzZWQgJ3MvXChAXCkuKlwoXC5bXi5dXCtcKS9cMVwyLydgCisJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAnL0AvcDtkJ2AgXTsgdGhlbgorCQllY2hvICJUcnkgdG8gZmluZCBsb2NhdGlvbiBvZiAkc2VydmljZS4uLiIKKwkJc2VydmljZV90ZW1wbGF0ZT1mYWxzZQorCWVsc2UKKwkJZWNobyAiVHJ5IHRvIGZpbmQgbG9jYXRpb24gb2YgdGVtcGxhdGUgJHNlcnZpY2VfYmFzZV9maWxlIG9mIGluc3RhbmNlICRzZXJ2aWNlLi4uIgorCQlzZXJ2aWNlX3RlbXBsYXRlPXRydWUKKwkJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAncy9eLlwrQFwoLipcKVwuW14uXVwrL1wxLydgIF07IHRoZW4KKwkJCWluc3RhbmNlX3NwZWNpZmllZD1mYWxzZQorCQllbHNlCisJCQlpbnN0YW5jZV9zcGVjaWZpZWQ9dHJ1ZQorCQlmaQorCWZpCisKKwkjIGZpbmQgc2VydmljZSBmaWxlCisJZm9yIHAgaW4gJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtIFwKKwkJICRST09UL2xpYi9zeXN0ZW1kL3N5c3RlbSBcCisJCSAkUk9PVC91c3IvbGliL3N5c3RlbWQvc3lzdGVtOyBkbworCQlpZiBbIC1lICRwLyRzZXJ2aWNlX2Jhc2VfZmlsZSBdOyB0aGVuCisJCQlzZXJ2aWNlX2ZpbGU9JHAvJHNlcnZpY2VfYmFzZV9maWxlCisJCQlzZXJ2aWNlX2ZpbGU9JHtzZXJ2aWNlX2ZpbGUjIyRST09UfQorCQlmaQorCWRvbmUKKwlpZiBbIC16ICIkc2VydmljZV9maWxlIiBdOyB0aGVuCisJCWVjaG8gIickc2VydmljZV9iYXNlX2ZpbGUnIGNvdWxkbid0IGJlIGZvdW5kOyBleGl0aW5nIHdpdGggZXJyb3IiCisJCWV4aXQgMQorCWZpCisJZWNobyAiRm91bmQgJHNlcnZpY2UgaW4gJHNlcnZpY2VfZmlsZSIKKworCSMgSWYgYW55IG5ldyB1bml0IHR5cGVzIGFyZSBhZGRlZCB0byBzeXN0ZW1kIHRoZXkgc2hvdWxkIGJlIGFkZGVkCisJIyB0byB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKwl1bml0X3R5cGVzX3JlPSdcLlwoc2VydmljZVx8c29ja2V0XHxkZXZpY2VcfG1vdW50XHxhdXRvbW91bnRcfHN3YXBcfHRhcmdldFx8cGF0aFx8dGltZXJcfHNuYXBzaG90XCkkJworCWlmIFsgIiRhY3Rpb24iID0gInByZXNldCIgXTsgdGhlbgorCQlhY3Rpb249YGVncmVwIC1zaCAgJHNlcnZpY2UgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQlpZiBbIC16ICIkYWN0aW9uIiBdOyB0aGVuCisJCQlnbG9iYWxwcmVzZXQ9YGVncmVwIC1zaCAgJ1wqJyAgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQkJaWYgWyAtbiAiJGdsb2JhbHByZXNldCIgXTsgdGhlbgorCQkJCWFjdGlvbj0iJGdsb2JhbHByZXNldCIKKwkJCWVsc2UKKwkJCQlhY3Rpb249ImVuYWJsZSIKKwkJCWZpCisJCWZpCisJZmkKKwkjIGNyZWF0ZSB0aGUgcmVxdWlyZWQgc3ltYm9saWMgbGlua3MKKwl3YW50ZWRfYnk9JChzZWQgJy9eV2FudGVkQnlbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkd2FudGVkX2J5OyBkbworCQllY2hvICJXYW50ZWRCeT0kciBmb3VuZCBpbiAkc2VydmljZSIKKwkJaWYgWyAiJGFjdGlvbiIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCQllbmFibGVfc2VydmljZT0kc2VydmljZQorCQkJaWYgWyAiJHNlcnZpY2VfdGVtcGxhdGUiID0gdHJ1ZSAtYSAiJGluc3RhbmNlX3NwZWNpZmllZCIgPSBmYWxzZSBdOyB0aGVuCisJCQkJZGVmYXVsdF9pbnN0YW5jZT0kKHNlZCAnL15EZWZhdWx0SW5zdGFuY2VbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIikKKwkJCQlpZiBbIC16ICRkZWZhdWx0X2luc3RhbmNlIF07IHRoZW4KKwkJCQkJZWNobyAiVGVtcGxhdGUgdW5pdCB3aXRob3V0IGluc3RhbmNlIG9yIERlZmF1bHRJbnN0YW5jZSBkaXJlY3RpdmUsIG5vdGhpbmcgdG8gZW5hYmxlIgorCQkJCQljb250aW51ZQorCQkJCWVsc2UKKwkJCQkJZWNobyAiRm91bmQgRGVmYXVsdEluc3RhbmNlICRkZWZhdWx0X2luc3RhbmNlLCBlbmFibGluZyBpdCIKKwkJCQkJZW5hYmxlX3NlcnZpY2U9JChlY2hvICRzZXJ2aWNlIHwgc2VkICJzL0AvQCRkZWZhdWx0X2luc3RhbmNlLyIpCisJCQkJZmkKKwkJCWZpCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMKKwkJCWxuIC1zICRzZXJ2aWNlX2ZpbGUgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRlbmFibGVfc2VydmljZQorCQkJZWNobyAiRW5hYmxlZCAkZW5hYmxlX3NlcnZpY2UgZm9yICR3YW50ZWRfYnkuIgorCQllbHNlCisJCQlpZiBbICIkc2VydmljZV90ZW1wbGF0ZSIgPSB0cnVlIC1hICIkaW5zdGFuY2Vfc3BlY2lmaWVkIiA9IGZhbHNlIF07IHRoZW4KKwkJCQlkaXNhYmxlX3NlcnZpY2U9IiRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cy9gZWNobyAkc2VydmljZSB8IHNlZCAncy9AL0AqLydgIgorCQkJZWxzZQorCQkJCWRpc2FibGVfc2VydmljZT0iJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRzZXJ2aWNlIgorCQkJZmkKKwkJCXJtIC1mICRkaXNhYmxlX3NlcnZpY2UKKwkJCVsgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzIF0gJiYgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzCisJCQllY2hvICJEaXNhYmxlZCAke2Rpc2FibGVfc2VydmljZSMjJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzL30gZm9yICR3YW50ZWRfYnkuIgorCQlmaQorCWRvbmUKKworCSMgY3JlYXRlIHRoZSByZXF1aXJlZCBzeW1ib2xpYyAnQWxpYXMnIGxpbmtzCisJYWxpYXM9JChzZWQgJy9eQWxpYXNbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkYWxpYXM7IGRvCisJCWlmIFsgIiRhY3Rpb24iID0gImVuYWJsZSIgXTsgdGhlbgorCQkJbWtkaXIgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtCisJCQlsbiAtcyAkc2VydmljZV9maWxlICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kcgorCQkJZWNobyAiRW5hYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZWxzZQorCQkJcm0gLWYgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyCisJCQllY2hvICJEaXNhYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZmkKKwlkb25lCisKKwkjIGNhbGwgdXMgZm9yIHRoZSBvdGhlciByZXF1aXJlZCBzY3JpcHRzCisJYWxzbz0kKHNlZCAnL15BbHNvW1s6c3BhY2U6XV0qPS9zLFtePV0qPSwscDtkJyAiJFJPT1QvJHNlcnZpY2VfZmlsZSIgXAorCQkgICB8IHRyICcsJyAnXG4nKQorCWZvciBhIGluICRhbHNvOyBkbworCQllY2hvICJBbHNvPSRhIGZvdW5kIGluICRzZXJ2aWNlIgorCQlpZiBbICIkYWN0aW9uIiA9ICJlbmFibGUiIF07IHRoZW4KKwkJCSQwIC0tcm9vdD0kUk9PVCBlbmFibGUgJGEKKwkJZmkKKwlkb25lCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Y2JlMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZgpAQCAtMCwwICsxLDcgQEAKKyNUaGlzIGdvZXMgaGFuZC1pbi1oYW5kIHdpdGggdGhlIGJhc2UtZmlsZXMgb2YgT0UtQ29yZS4gVGhlIGZpbGUgbXVzdAorIyBiZSBzb3J0ZWQgYmVmb3JlICdzeXN0ZW1kLmNvbmYnIGJlY3Vhc2UgdGhpcyBhdHRlbXB0cyB0byBjcmVhdGUgYSBmaWxlCisjIGluc2lkZSAvdmFyL2xvZy4KKworCitkCQkvdmFyL3ZvbGF0aWxlL2xvZwkJLQktCS0JLQorZAkJL3Zhci92b2xhdGlsZS90bXAJCTE3NzcJLQktCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhYjVlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDEwMGU1MDYwNGVmYzQwMzIwMDFhMmRlNmE2YjQ3ODUzYzAwMDM4MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyOToxNSArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzExXSB1bml0czogUHJlZmVyIGdldHR5IHRvIGFnZXR0eSBpbiBjb25zb2xlIHNldHVwIHN5c3RlbWQKKyB1bml0cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb24gc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHVuaXRzL2dldHR5QC5zZXJ2aWNlLm00ICAgICAgICB8IDIgKy0KKyB1bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91bml0cy9nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitpbmRleCA0NjE2NGFiLi5iZGY2ZWM4IDEwMDY0NAorLS0tIGEvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKKysrKyBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitAQCAtMjcsNyArMjcsNyBAQCBDb25kaXRpb25QYXRoRXhpc3RzPS9kZXYvdHR5MAorIAorIFtTZXJ2aWNlXQorICMgdGhlIFZUIGlzIGNsZWFyZWQgYnkgVFRZVlREaXNhbGxvY2F0ZQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0tbm9jbGVhciAlSSAkVEVSTQorK0V4ZWNTdGFydD0tL3NiaW4vZ2V0dHkgLUwgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFJlc3RhcnRTZWM9MAorZGlmZiAtLWdpdCBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAoraW5kZXggNDUyMmQwZC4uZTZkNDk5ZCAxMDA2NDQKKy0tLSBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAorKysrIGIvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00CitAQCAtMjIsNyArMjIsNyBAQCBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgSWdub3JlT25Jc29sYXRlPXllcworIAorIFtTZXJ2aWNlXQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0ta2VlcC1iYXVkIDExNTIwMCwzODQwMCw5NjAwICVJICRURVJNCisrRXhlY1N0YXJ0PS0vc2Jpbi9nZXR0eSAtTCAxMTUyMDAgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFV0bXBJZGVudGlmaWVyPSVJCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTIwZmQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gMTg0YTg5Y2FhY2ZhMDBmMDdlNzI3NWJjYTU5MmJkN2RkYTFiNTQxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjAzOjQ0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTFdIGJpbmZtdDogRG9uJ3QgaW5zdGFsbCBkZXBlbmRlbmN5IGxpbmtzIGF0IGluc3RhbGwgdGltZQorIGZvciB0aGUgYmluZm10IHNlcnZpY2VzCisKK3VzZSBbSW5zdGFsbF0gYmxvY2tzIHNvIHRoYXQgdGhleSBnZXQgY3JlYXRlZCB3aGVuIHRoZSBzZXJ2aWNlIGlzIGVuYWJsZWQKK2xpa2UgYSB0cmFkaXRpb25hbCBzZXJ2aWNlLgorCitUaGUgW0luc3RhbGxdIGJsb2NrcyB3ZXJlIHJlamVjdGVkIHVwc3RyZWFtIGFzIHRoZXkgZG9uJ3QgaGF2ZSBhIHdheSB0bworImVuYWJsZSIKK2l0IG9uIGluc3RhbGwgd2l0aG91dCBzdGF0aWMgc3ltbGlua3Mgd2hpY2ggY2FuJ3QgYmUgZGlzYWJsZWQsIG9ubHkKK21hc2tlZC4gIFdlCitob3dldmVyIGNhbiBkbyB0aGF0IGluIGEgcG9zdGluc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAtLS0tCisgdW5pdHMvcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50IHwgMyArKysKKyB1bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluICAgICAgICAgfCA1ICsrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTQyNzEsMTAgKzQyNzEsNiBAQCBJTlNUQUxMX0RJUlMgKz0gXAorIAkkKHByZWZpeCkvbGliL2JpbmZtdC5kIFwKKyAJJChzeXNjb25mZGlyKS9iaW5mbXQuZAorIAorLVNZU0lOSVRfVEFSR0VUX1dBTlRTICs9IFwKKy0Jc3lzdGVtZC1iaW5mbXQuc2VydmljZSBcCistCXByb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorLQorIGVuZGlmCisgCisgRVhUUkFfRElTVCArPSBcCitJbmRleDogZ2l0L3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorKysrIGdpdC91bml0cy9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKK0BAIC0xNiwzICsxNiw2IEBAIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCisgCisgW0F1dG9tb3VudF0KKyBXaGVyZT0vcHJvYy9zeXMvZnMvYmluZm10X21pc2MKKysKKytbSW5zdGFsbF0KKytXYW50ZWRCeT1zeXNpbml0LnRhcmdldAorSW5kZXg6IGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvc3lzdGVtZC1iaW5mbXQuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCitAQCAtMTEsNiArMTEsOCBAQCBEb2N1bWVudGF0aW9uPW1hbjpzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlCisgRG9jdW1lbnRhdGlvbj1odHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9Eb2N1bWVudGF0aW9uL2JpbmZtdF9taXNjLnR4dAorIERlZmF1bHREZXBlbmRlbmNpZXM9bm8KKyBDb25mbGljdHM9c2h1dGRvd24udGFyZ2V0CisrV2FudHM9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisrCisgQWZ0ZXI9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisgQmVmb3JlPXN5c2luaXQudGFyZ2V0IHNodXRkb3duLnRhcmdldAorIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCitAQCAtMjUsMyArMjcsNiBAQCBUeXBlPW9uZXNob3QKKyBSZW1haW5BZnRlckV4aXQ9eWVzCisgRXhlY1N0YXJ0PUByb290bGliZXhlY2RpckAvc3lzdGVtZC1iaW5mbXQKKyBUaW1lb3V0U2VjPTkwcworKworK1tJbnN0YWxsXQorK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3OGRhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDQtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDRlMmU4ZGJmM2YyM2FiN2RjYTMyMjg2Y2MwZjM3YmZmNmFjNDllMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNTowNTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzExXSBjb25maWd1cmU6IENoZWNrIGZvciBhZGRpdGlvbmFsIGZlYXR1cmVzIHRoYXQgdWNsaWJjCisgZG9lc250IHN1cHBvcnQKKworVGhpcyBoZWxwcyBpbiBzdXBwb3J0aW5nIHVjbGliYyB3aGljaCBkb2VzIG5vdCBoYXZlIGFsbCBmZWF0dXJlcyB0aGF0CitnbGliYyBtaWdodCBoYXZlCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTggKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKKworSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTEwLDYgKzExMCwyNCBAQCBBQ19QQVRIX1BST0coW1VNT1VOVF9QQVRIXSwgW3Vtb3VudF0sIFsvCisgCisgQVNfSUYoWyEgbG4gLS1yZWxhdGl2ZSAtLWhlbHAgPiAvZGV2L251bGwgMj4mMV0sIFtBQ19NU0dfRVJST1IoWyoqKiBsbiBkb2Vzbid0IHN1cHBvcnQgLS1yZWxhdGl2ZSAqKipdKV0pCisgCisrIyBjaGVjayBmb3IgZmV3IGZ1bmN0aW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gdUNsaWJjCisrCisrQUNfQ0hFQ0tfRlVOQ1NfT05DRShta29zdGVtcCBleGVjdnBlIHBvc2l4X2ZhbGxvY2F0ZSkKKysKKysjIGNoZWNrIGZvciAlbXMgZm9ybWF0IHN1cHBvcnQgLSBhc3N1bWUgYWx3YXlzIG5vIGlmIGNyb3NzIGNvbXBpbGluZworKworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAlbXMgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSAqc2NhbmZdKQorKworK0FDX0xJTktfSUZFTFNFKAorKwlbQUNfTEFOR19QUk9HUkFNKFsKKysJICNpbmNsdWRlIDxzdGRpby5oPgorKwkgXSxbCisrCSAgICBjaGFyICpidWYxLCAqYnVmMiwgKmJ1ZjMsIHN0cj0iMSAyLjMgYWJjZGUiIDsKKysJICAgIGludCByYyA9IHNzY2FuZihzdHIsICIlbXMgJW1zICVtcyIsICZidWYxLCAmYnVmMiwgJmJ1ZjMpIDsKKysJICAgIHJldHVybiAocmM9PTMpPzA6MTtdKV0sCisrCVtBQ19ERUZJTkUoW0hBVkVfTVNGT1JNQVRdLCBbMV0sIFtEZWZpbmUgaWYgJW1zIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgKnNjYW5mLl0pXSwKKysJW0FDX01TR19SRVNVTFQoW25vXSldKQorKworIE00X0RFRklORVM9CisgCisgQUNfQ0hFQ0tfVE9PTChPQkpDT1BZLCBvYmpjb3B5KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA1LW5zcGF3bi1Vc2UtZXhlY3ZwZS1vbmx5LXdoZW4tbGliYy1zdXBwb3J0cy1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWEwMDg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBhNzQxN2MyZTY5NTBkNTVjMjJjMWIwZDE1NzgzODk4YjhmZjIyOWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MTA6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xMV0gbnNwYXduOiBVc2UgZXhlY3ZwZSBvbmx5IHdoZW4gbGliYyBzdXBwb3J0cyBpdAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbbm8gZGVzaXJlIGZvciB1Y2xpYmMgc3VwcG9ydF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK0luZGV4OiBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9uc3Bhd24vbnNwYXduLmMKKysrKyBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworQEAgLTE0Myw2ICsxNDMsOCBAQCB0eXBlZGVmIHN0cnVjdCBDdXN0b21Nb3VudCB7CisgICAgICAgICBjaGFyICoqbG93ZXI7CisgfSBDdXN0b21Nb3VudDsKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgc3RhdGljIGNoYXIgKmFyZ19kaXJlY3RvcnkgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdGVtcGxhdGUgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdXNlciA9IE5VTEw7CitAQCAtNDIzOCw3ICs0MjQwLDEyIEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGFbMF0gPSAoY2hhciopICIvc2Jpbi9pbml0IjsKKyAgICAgICAgICAgICAgICAgZXhlY3ZlKGFbMF0sIGEsIGVudl91c2UpOworICAgICAgICAgfSBlbHNlIGlmIChhcmdjID4gb3B0aW5kKQorKyNpZmRlZiBIQVZFX0VYRUNWUEUKKyAgICAgICAgICAgICAgICAgZXhlY3ZwZShhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQsIGVudl91c2UpOworKyNlbHNlCisrICAgICAgICAgICAgICAgIGVudmlyb24gPSBlbnZfdXNlOworKyAgICAgICAgICAgICAgICBleGVjdnAoYXJndltvcHRpbmRdLCBhcmd2ICsgb3B0aW5kKTsKKysjZW5kaWYgLyogSEFWRV9FWEVDVlBFICovCisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgY2hkaXIoaG9tZSA/IGhvbWUgOiAiL3Jvb3QiKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNi1qb3VybmFsLVVzZS1wb3NpeC1mYWxsb2NhdGUtb25seS1pZi1hdmFpbGFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxZGQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMzRhNjFiNmM5ZWVkM2ZhZDM2MDA2NmZiNjMxMzJlYmM3ZTBhYWFhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjEyOjQ4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTFdIGpvdXJuYWw6IFVzZSBwb3NpeCBmYWxsb2NhdGUgb25seSBpZiBhdmFpbGFibGUKKworU29tZSBhcmNoaXRlY3R1cmUgcG9ydHMgaW4gdWNsaWJjIGRpZCBub3Qgc3VwcG9ydCBpdCBpbiBwYXN0CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMgIHwgMTYgKysrKysrKysrKysrKysrLQorIHNyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyB8IDE1ICsrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK2luZGV4IDI4NDVlMDUuLjk0MzExNzEgMTAwNjQ0CistLS0gYS9zcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK0BAIC0zNiw2ICszNiw4IEBACisgI2luY2x1ZGUgImNvbXByZXNzLmgiCisgI2luY2x1ZGUgImZzcHJnLmgiCisgCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworICNkZWZpbmUgREVGQVVMVF9EQVRBX0hBU0hfVEFCTEVfU0laRSAoMjA0N1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorICNkZWZpbmUgREVGQVVMVF9GSUVMRF9IQVNIX1RBQkxFX1NJWkUgKDMzM1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorIAorQEAgLTM1NCw3ICszNTYsNyBAQCBzdGF0aWMgaW50IGpvdXJuYWxfZmlsZV9mc3RhdChKb3VybmFsRmlsZSAqZikgeworIAorIHN0YXRpYyBpbnQgam91cm5hbF9maWxlX2FsbG9jYXRlKEpvdXJuYWxGaWxlICpmLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpIHsKKyAgICAgICAgIHVpbnQ2NF90IG9sZF9zaXplLCBuZXdfc2l6ZTsKKy0gICAgICAgIGludCByOworKyAgICAgICAgaW50IHIgPSAwOworIAorICAgICAgICAgYXNzZXJ0KGYpOworIAorQEAgLTQxOCw5ICs0MjAsMjEgQEAgc3RhdGljIGludCBqb3VybmFsX2ZpbGVfYWxsb2NhdGUoSm91cm5hbEZpbGUgKmYsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKKyAgICAgICAgIC8qIE5vdGUgdGhhdCB0aGUgZ2xpYmMgZmFsbG9jYXRlKCkgZmFsbGJhY2sgaXMgdmVyeQorICAgICAgICAgICAgaW5lZmZpY2llbnQsIGhlbmNlIHdlIHRyeSB0byBtaW5pbWl6ZSB0aGUgYWxsb2NhdGlvbiBhcmVhCisgICAgICAgICAgICBhcyB3ZSBjYW4uICovCisrI2lmZGVmIEhBVkVfUE9TSVhfRkFMTE9DQVRFCisgICAgICAgICByID0gcG9zaXhfZmFsbG9jYXRlKGYtPmZkLCBvbGRfc2l6ZSwgbmV3X3NpemUgLSBvbGRfc2l6ZSk7CisgICAgICAgICBpZiAociAhPSAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLXI7CisrI2Vsc2UKKysgICAgICAgIC8qIFdyaXRlIHNvbWV0aGluZyBldmVyeSA1MTIgYnl0ZXMgdG8gbWFrZSBzdXJlIHRoZSBibG9jayBpcyBhbGxvY2F0ZWQgKi8KKysgICAgICAgIHVpbnQ2NF90IGxlbiA9IG5ld19zaXplIC0gb2xkX3NpemU7CisrICAgICAgICB1aW50NjRfdCBvZmZzZXQgPSBvbGRfc2l6ZTsKKysgICAgICAgIGZvciAob2Zmc2V0ICs9IChsZW4tMSkgJSA1MTI7IGxlbiA+IDA7IG9mZnNldCArPSA1MTIpIHsKKysgICAgICAgICAgICAgICAgbGVuIC09IDUxMjsKKysgICAgICAgICAgICAgICAgaWYgKHB3cml0ZShmLT5mZCwgIiIsIDEsIG9mZnNldCkgIT0gMSkKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworKyAgICAgICAgfQorKworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworIAorICAgICAgICAgZi0+aGVhZGVyLT5hcmVuYV9zaXplID0gaHRvbGU2NChuZXdfc2l6ZSAtIGxlNjR0b2goZi0+aGVhZGVyLT5oZWFkZXJfc2l6ZSkpOworIAorZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyBiL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworaW5kZXggYzQyMTZjNC4uYTk5OGVkNSAxMDA2NDQKKy0tLSBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jCitAQCAtNDM2LDYgKzQzNiw3IEBAIGZhaWw6CisgaW50IHNlcnZlcl9vcGVuX2tlcm5lbF9zZXFudW0oU2VydmVyICpzKSB7CisgICAgICAgICBfY2xlYW51cF9jbG9zZV8gaW50IGZkOworICAgICAgICAgdWludDY0X3QgKnA7CisrICAgICAgICBpbnQgciA9IDA7CisgCisgICAgICAgICBhc3NlcnQocyk7CisgCitAQCAtNDQ5LDcgKzQ1MCwxOSBAQCBpbnQgc2VydmVyX29wZW5fa2VybmVsX3NlcW51bShTZXJ2ZXIgKnMpIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgCistICAgICAgICBpZiAocG9zaXhfZmFsbG9jYXRlKGZkLCAwLCBzaXplb2YodWludDY0X3QpKSA8IDApIHsKKysjaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKKysgICAgICAgIHIgPSBwb3NpeF9mYWxsb2NhdGUoZmQsIDAsIHNpemVvZih1aW50NjRfdCkpOworKyNlbHNlCisrICAgICAgICAvKiBVc2UgZ29vZCBvbGQgbWV0aG9kIHRvIHdyaXRlIHplcm9zIGludG8gdGhlIGpvdXJuYWwgZmlsZQorKyAgICAgICAgICAgcGVyaGFwcyB2ZXJ5IGluZWZmaWNpZW50IHlldCB3b3JraW5nLiAqLworKyAgICAgICAgY2hhciAqYnVmID0gYWxsb2NhKHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgb2ZmX3Qgb2xkcG9zID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKysgICAgICAgIGJ6ZXJvKGJ1Ziwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrICAgICAgICBsc2VlayhmZCwgMCwgU0VFS19TRVQpOworKyAgICAgICAgciA9IHdyaXRlKGZkLCBidWYsIHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgbHNlZWsoZmQsIG9sZHBvcywgU0VFS19TRVQpOworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICAgICAgIGxvZ19lcnJvcl9lcnJubyhlcnJubywgIkZhaWxlZCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIG51bWJlciBmaWxlLCBpZ25vcmluZzogJW0iKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNy11dGlsLVVzZS1ta29zdGVtcC1vbmx5LWlmLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhYjdjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gZjc3MTQwN2QzZTAyODhjYTBjMDZhODk0MTk0ZDNkZGFkNjliOWE4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjE3OjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTFdIHV0aWw6IFVzZSBta29zdGVtcCBvbmx5IGlmIGxpYmMgc3VwcG9ydHMgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgOCArKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCBkYzY1MjgwLi43MmY0NjY1IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTk3LDYgKzk3LDggQEAKKyAjaW5jbHVkZSAiZGVmLmgiCisgI2luY2x1ZGUgInNwYXJzZS1lbmRpYW4uaCIKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgaW50IHNhdmVkX2FyZ2MgPSAwOworIGNoYXIgKipzYXZlZF9hcmd2ID0gTlVMTDsKKyAKK0BAIC02NjgyLDcgKzY2ODQsMTMgQEAgaW50IG1rb3N0ZW1wX3NhZmUoY2hhciAqcGF0dGVybiwgaW50IGZsYWdzKSB7CisgCisgICAgICAgICB1ID0gdW1hc2soMDc3KTsKKyAKKysjaWZkZWYgSEFWRV9NS09TVEVNUAorICAgICAgICAgZmQgPSBta29zdGVtcChwYXR0ZXJuLCBmbGFncyk7CisrI2Vsc2UKKysgICAgICAgIGZkID0gbWtzdGVtcChwYXR0ZXJuKTsKKysgICAgICAgIGlmIChmZCA+PSAwKSBmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MpOworKyNlbmRpZiAvKiBIQVZFX01LT1NURU1QICovCisrCisgICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0ZDRkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGI0NWVhM2JmZDY2MzU3NDRjOGE2Yjc0ZDBhYzcwMWI0NGJiMWQyOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToxOTozNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzExXSB1dGlsOiBieXBhc3MgdW5pbXBsZW1lbnRlZCBfU0NfUEhZU19QQUdFUyBzeXN0ZW0KKyBjb25maWd1cmF0aW9uIEFQSSBvbiB1Y2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMtc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgMTUgKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCA3MmY0NjY1Li5jYmJlM2IxIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTY3OTMsMTAgKzY3OTMsMjUgQEAgdWludDY0X3QgcGh5c2ljYWxfbWVtb3J5KHZvaWQpIHsKKyAgICAgICAgIC8qIFdlIHJldHVybiB0aGlzIGFzIHVpbnQ2NF90IGluIGNhc2Ugd2UgYXJlIHJ1bm5pbmcgYXMgMzJiaXQKKyAgICAgICAgICAqIHByb2Nlc3Mgb24gYSA2NGJpdCBrZXJuZWwgd2l0aCBodWdlIGFtb3VudHMgb2YgbWVtb3J5ICovCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgICAgIGNoYXIgbGluZVsxMjhdOworKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKCIvcHJvYy9tZW1pbmZvIiwgInIiKTsKKysgICAgICAgIGlmIChmID09IE5VTEwpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgd2hpbGUgKCFmZW9mKGYpICYmIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKS0xLCBmKSkgeworKyAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKGxpbmUsICJNZW1Ub3RhbDogJWwga0IiLCAmbWVtKSA9PSAxKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWVtICo9IDEwMjQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZjbG9zZShmKTsKKysgICAgICAgIHJldHVybiAodWludDY0X3QpIG1lbTsKKysjZWxzZQorICAgICAgICAgbWVtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7CisgICAgICAgICBhc3NlcnQobWVtID4gMCk7CisgCisgICAgICAgICByZXR1cm4gKHVpbnQ2NF90KSBtZW0gKiAodWludDY0X3QpIHBhZ2Vfc2l6ZSgpOworKyNlbmRpZgorIH0KKyAKKyB2b2lkIGhleGR1bXAoRklMRSAqZiwgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHMpIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTNlODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXN5c3YtZ2VuZXJhdG9yLWFkZC1zdXBwb3J0LWZvci1leGVjdXRpbmctc2NyaXB0cy11bmQucGF0Y2gKQEAgLTAsMCArMSwxNDMgQEAKK0Zyb20gODc5MWI1YjM5MzRjNTU2OTQ4NzJiNjkxNWE2NzM0MDY4M2VhZDkxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjIyOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTFdIHN5c3YtZ2VuZXJhdG9yOiBhZGQgc3VwcG9ydCBmb3IgZXhlY3V0aW5nIHNjcmlwdHMgdW5kZXIKKyAvZXRjL3JjUy5kLworCitUbyBiZSBjb21wYXRpYmxlLCBhbGwgc2VydmljZXMgdHJhbnNsYXRlZCBmcm9tIHNjcmlwdHMgdW5kZXIgL2V0Yy9yY1MuZCB3b3VsZAorcnVuIGJlZm9yZSBzZXJ2aWNlcyB0cmFuc2xhdGVkIGZyb20gc2NyaXB0cyB1bmRlciAvZXRjL3JjTi5kLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworaW5kZXggYmQ2N2YzMi4uNjc1NmNjNiAxMDA2NDQKKy0tLSBhL3NyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jCisrKysgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworQEAgLTQyLDcgKzQyLDggQEAKKyAKKyB0eXBlZGVmIGVudW0gUnVubGV2ZWxUeXBlIHsKKyAgICAgICAgIFJVTkxFVkVMX1VQLAorLSAgICAgICAgUlVOTEVWRUxfRE9XTgorKyAgICAgICAgUlVOTEVWRUxfRE9XTiwKKysgICAgICAgIFJVTkxFVkVMX1NZU0lOSVQKKyB9IFJ1bmxldmVsVHlwZTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHsKK0BAIC01Nyw2ICs1OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgeyAicmM0LmQiLCAgU1BFQ0lBTF9NVUxUSV9VU0VSX1RBUkdFVCwgUlVOTEVWRUxfVVAgfSwKKyAgICAgICAgIHsgInJjNS5kIiwgIFNQRUNJQUxfR1JBUEhJQ0FMX1RBUkdFVCwgIFJVTkxFVkVMX1VQIH0sCisgCisrICAgICAgICAvKiBEZWJpYW4gc3R5bGUgcmNTLmQsIGFsc28gYWRvcHRlZCBieSBPRSAqLworKyAgICAgICAgeyAicmNTLmQiLCAgU1BFQ0lBTF9TWVNJTklUX1RBUkdFVCwgICBSVU5MRVZFTF9TWVNJTklUfSwKKysKKyAgICAgICAgIC8qIFN0YW5kYXJkIFN5c1YgcnVubGV2ZWxzIGZvciBzaHV0ZG93biAqLworICAgICAgICAgeyAicmMwLmQiLCAgU1BFQ0lBTF9QT1dFUk9GRl9UQVJHRVQsICBSVU5MRVZFTF9ET1dOIH0sCisgICAgICAgICB7ICJyYzYuZCIsICBTUEVDSUFMX1JFQk9PVF9UQVJHRVQsICAgIFJVTkxFVkVMX0RPV04gfQorQEAgLTY1LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB0aGlzIG9yZGVyLCBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICAgICAgc3lzdl9zdGFydF9wcmlvcml0eSBpcyBrbm93biB3aGVuIHdlIGZpcnN0IGxvYWQgdGhlCisgICAgICAgICAgICB1bml0LiBBbmQgdGhhdCB2YWx1ZSB3ZSBvbmx5IGtub3cgZnJvbSBTIGxpbmtzLiBIZW5jZQorLSAgICAgICAgICAgVVAgbXVzdCBiZSByZWFkIGJlZm9yZSBET1dOICovCisrICAgICAgICAgICBVUC9TWVNJTklUIG11c3QgYmUgcmVhZCBiZWZvcmUgRE9XTiAqLworIH07CisgCisgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworQEAgLTgxLDYgKzg1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworICAgICAgICAgY2hhciAqKmNvbmZsaWN0czsKKyAgICAgICAgIGJvb2wgaGFzX2xzYjsKKyAgICAgICAgIGJvb2wgcmVsb2FkOworKyAgICAgICAgYm9vbCBkZWZhdWx0X2RlcGVuZGVuY2llczsKKysgICAgICAgIGJvb2wgZnJvbV9yY3NkOworIH0gU3lzdlN0dWI7CisgCisgY29uc3QgY2hhciAqYXJnX2Rlc3QgPSAiL3RtcCI7CitAQCAtMTgzLDYgKzE4OSw5IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfdW5pdF9maWxlKFN5c3ZTdHViICpzKSB7CisgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbj0lc1xuIiwKKyAgICAgICAgICAgICAgICAgcy0+cGF0aCwgcy0+ZGVzY3JpcHRpb24pOworIAorKyAgICAgICAgaWYgKCFzLT5kZWZhdWx0X2RlcGVuZGVuY2llcykKKysgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiRGVmYXVsdERlcGVuZGVuY2llcz1ub1xuIik7CisrCisgICAgICAgICBpZiAoIWlzZW1wdHkoYmVmb3JlKSkKKyAgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiQmVmb3JlPSVzXG4iLCBiZWZvcmUpOworICAgICAgICAgaWYgKCFpc2VtcHR5KGFmdGVyKSkKK0BAIC03MDQsMTggKzcxMywzMCBAQCBzdGF0aWMgaW50IGZpeF9vcmRlcihTeXN2U3R1YiAqcywgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgIGlmIChzLT5oYXNfbHNiICYmIG90aGVyLT5oYXNfbHNiKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworIAorLSAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5hZnRlciwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICAvKiBBbGwgc2NyaXB0cyB1bmRlciAvZXRjL3JjUy5kIHNob3VsZCBleGVjdXRlIGJlZm9yZSBzY3JpcHRzIHVuZGVyCisrICAgICAgICAgICAgICAgICAqIC9ldGMvcmNOLmQgKi8KKysgICAgICAgICAgICAgICAgaWYgKCFvdGhlci0+ZnJvbV9yY3NkICYmIHMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YmVmb3JlLCBvdGhlci0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvdGhlci0+c3lzdl9zdGFydF9wcmlvcml0eSA+IHMtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmJlZm9yZSwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG90aGVyLT5mcm9tX3Jjc2QgJiYgIXMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YWZ0ZXIsIG90aGVyLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmFmdGVyLCBvdGhlci0+bmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVyLT5zeXN2X3N0YXJ0X3ByaW9yaXR5ID4gcy0+c3lzdl9zdGFydF9wcmlvcml0eSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5iZWZvcmUsIG90aGVyLT5uYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgY29tcGFyZSB0aGUgbmFtZSBoZXJlIGxleGljb2dyYXBoaWNhbGx5PyAqLworICAgICAgICAgfQorQEAgLTc3OCw2ICs3OTksOCBAQCBzdGF0aWMgaW50IGVudW1lcmF0ZV9zeXN2KExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9IC0xOworKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5mcm9tX3Jjc2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5wYXRoID0gZnBhdGg7CisgCitAQCAtODY0LDkgKzg4NywxMSBAQCBzdGF0aWMgaW50IHNldF9kZXBlbmRlbmNpZXNfZnJvbV9yY25kKExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZS0+ZF9uYW1lWzBdID09ICdTJykgIHsKKyAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9VUCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1VQIHx8IHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVgoYSoxMCArIGIsIHNlcnZpY2UtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKT9mYWxzZTp0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmZyb21fcmNzZCA9IChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCk/dHJ1ZTpmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc2V0X2Vuc3VyZV9hbGxvY2F0ZWQoJnJ1bmxldmVsX3NlcnZpY2VzW2ldLCBOVUxMKTsKK0BAIC04NzgsNyArOTAzLDggQEAgc3RhdGljIGludCBzZXRfZGVwZW5kZW5jaWVzX2Zyb21fcmNuZChMb29rdXBQYXRocyBscCwgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlLT5kX25hbWVbMF0gPT0gJ0snICYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfRE9XTikpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9ET1dOIHx8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCkpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNldF9lbnN1cmVfYWxsb2NhdGVkKCZzaHV0ZG93bl9zZXJ2aWNlcywgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEwLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDdmZjViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSwxODEgQEAKK0Zyb20gM2RjNzMxYzFkMjcwZTJlMTQzZGU2MjFkYjliZDg5ODI5OWZkODQ5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI0OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTFdIE1ha2Ugcm9vdCdzIGhvbWUgZGlyZWN0b3J5IGNvbmZpZ3VyYWJsZQorCitPcGVuRW1iZWRkZWQgaGFzIGEgY29uZmlndXJhYmxlIGhvbWUgZGlyZWN0b3J5IGZvciByb290LiBBbGxvdworc3lzdGVtZCB0byBiZSBidWlsdCB1c2luZyBpdHMgaWRlYSBvZiB3aGF0IHJvb3QncyBob21lIGRpcmVjdG9yeQorc2hvdWxkIGJlLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorVXBzdHJlYW0gd2FudHMgdG8gaGF2ZSBhIHVuaWZpZWQgaGllcmFyY2h5IHdoZXJlIGV2ZXJ5b25lIGlzCit1c2luZyB0aGUgc2FtZSByb290IGZvbGRlci4KK2h0dHBzOi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQvaXNzdWVzLzU0MQorCitTaWduZWQtb2ZmLWJ5OiBEYW4gTWNHcmVnb3IgPGRhbi5tY2dyZWdvckB1c2Fzay5jYT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgfCAyICsrCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgNyArKysrKysrCisgc3JjL2NvcmUvdW5pdC1wcmludGYuYyAgICAgICAgICAgIHwgMiArLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgICAgICAgICAgICAgICB8IDQgKystLQorIHNyYy9iYXNpYy91dGlsLmMgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgdW5pdHMvY29uc29sZS1zaGVsbC5zZXJ2aWNlLm00LmluIHwgNCArKy0tCisgdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4gICAgICAgIHwgNCArKy0tCisgdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4gICAgICAgICAgIHwgNCArKy0tCisgOCBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCitAQCAtMjA4LDYgKzIwOCw3IEBAIEFNX0NQUEZMQUdTID0gXAorIAktRExJQkRJUj1cIiQobGliZGlyKVwiIFwKKyAJLURST09UTElCRElSPVwiJChyb290bGliZGlyKVwiIFwKKyAJLURST09UTElCRVhFQ0RJUj1cIiQocm9vdGxpYmV4ZWNkaXIpXCIgXAorKwktRFJPT1RIT01FRElSPVwiJChyb290aG9tZWRpcilcIiBcCisgCS1EVEVTVF9ESVI9XCIkKGFic190b3Bfc3JjZGlyKS90ZXN0XCIgXAorIAktSSAkKHRvcF9zcmNkaXIpL3NyYyBcCisgCS1JICQodG9wX2J1aWxkZGlyKS9zcmMvYmFzaWMgXAorQEAgLTU2MTUsNiArNTYxNiw3IEBAIEVYVFJBX0RJU1QgKz0gXAorIHN1YnN0aXR1dGlvbnMgPSBcCisgICAgICAgICd8cm9vdGxpYmV4ZWNkaXI9JChyb290bGliZXhlY2Rpcil8JyBcCisgICAgICAgICd8cm9vdGJpbmRpcj0kKHJvb3RiaW5kaXIpfCcgXAorKyAgICAgICAnfHJvb3Rob21lZGlyPSQocm9vdGhvbWVkaXIpfCcgXAorICAgICAgICAnfGJpbmRpcj0kKGJpbmRpcil8JyBcCisgICAgICAgICd8U1lTVEVNQ1RMPSQocm9vdGJpbmRpcikvc3lzdGVtY3RsfCcgXAorICAgICAgICAnfFNZU1RFTURfTk9USUZZPSQocm9vdGJpbmRpcikvc3lzdGVtZC1ub3RpZnl8JyBcCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMzgzLDYgKzEzODMsMTEgQEAgQUNfQVJHX1dJVEgoW3Jvb3RsaWJkaXJdLAorICAgICAgICAgW3dpdGhfcm9vdGxpYmRpcj0ke2xpYmRpcn1dKQorIEFYX05PUk1BTElaRV9QQVRIKFt3aXRoX3Jvb3RsaWJkaXJdKQorIAorK0FDX0FSR19XSVRIKFtyb290aG9tZWRpcl0sCisrICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXJvb3Rob21lZGlyPURJUl0sIFtIb21lIGRpcmVjdG9yeSBmb3IgdGhlIHJvb3QgdXNlcl0pLAorKyAgICAgICAgW10sCisrICAgICAgICBbd2l0aF9yb290aG9tZWRpcj0vcm9vdF0pCisrCisgQUNfQVJHX1dJVEgoW3BhbWxpYmRpcl0sCisgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXBhbWxpYmRpcj1ESVJdLCBbRGlyZWN0b3J5IGZvciBQQU0gbW9kdWxlc10pLAorICAgICAgICAgW10sCitAQCAtMTQ3NCw2ICsxNDc5LDcgQEAgQUNfU1VCU1QoW3BhbWxpYmRpcl0sIFskd2l0aF9wYW1saWJkaXJdKQorIEFDX1NVQlNUKFtwYW1jb25mZGlyXSwgWyR3aXRoX3BhbWNvbmZkaXJdKQorIEFDX1NVQlNUKFtyb290cHJlZml4XSwgWyR3aXRoX3Jvb3RwcmVmaXhdKQorIEFDX1NVQlNUKFtyb290bGliZGlyXSwgWyR3aXRoX3Jvb3RsaWJkaXJdKQorK0FDX1NVQlNUKFtyb290aG9tZWRpcl0sIFskd2l0aF9yb290aG9tZWRpcl0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKKyAgICAgICAgIE1ha2VmaWxlCitAQCAtMTU2Myw2ICsxNTY5LDcgQEAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICBpbmNsdWRlZGlyOiAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfQorICAgICAgICAgbGliIGRpcjogICAgICAgICAgICAgICAgICR7bGliZGlyfQorICAgICAgICAgcm9vdGxpYiBkaXI6ICAgICAgICAgICAgICR7d2l0aF9yb290bGliZGlyfQorKyAgICAgICAgcm9vdCBob21lIGRpcjogICAgICAgICAgICR7d2l0aF9yb290aG9tZWRpcn0KKyAgICAgICAgIFN5c1YgaW5pdCBzY3JpcHRzOiAgICAgICAke1NZU1RFTV9TWVNWSU5JVF9QQVRIfQorICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CitJbmRleDogZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29yZS91bml0LXByaW50Zi5jCisrKysgZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKK0BAIC0yMzcsNyArMjM3LDcgQEAgc3RhdGljIGludCBzcGVjaWZpZXJfdXNlcl9ob21lKGNoYXIgc3BlYworICAgICAgICAgICAgICAgICAgKiBiZXN0IG9mIGl0IGlmIHdlIGNhbiwgYnV0IGZhaWwgaWYgd2UgY2FuJ3QgKi8KKyAKKyAgICAgICAgICAgICAgICAgaWYgKCFjLT51c2VyIHx8IHN0cmVxKGMtPnVzZXIsICJyb290IikgfHwgc3RyZXEoYy0+dXNlciwgIjAiKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RyZHVwKCIvcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworIAorSW5kZXg6IGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL25zcGF3bi9uc3Bhd24uYworKysrIGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCitAQCAtNDE3Niw3ICs0MTc2LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKKyAgICAgICAgIGlmIChlbnZwW25fZW52XSkKKyAgICAgICAgICAgICAgICAgbl9lbnYgKys7CisgCistICAgICAgICBpZiAoKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkhPTUU9JXMiLCBob21lID8gaG9tZTogIi9yb290IikgPCAwKSB8fAorKyAgICAgICAgaWYgKChhc3ByaW50ZigoY2hhcioqKShlbnZwICsgbl9lbnYrKyksICJIT01FPSVzIiwgaG9tZSA/IGhvbWU6IFJPT1RIT01FRElSKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIlVTRVI9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkxPR05BTUU9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApKQorICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworQEAgLTQyNDcsNyArNDI0Nyw3IEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGV4ZWN2cChhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQpOworICNlbmRpZiAvKiBIQVZFX0VYRUNWUEUgKi8KKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6ICIvcm9vdCIpOworKyAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6IFJPT1RIT01FRElSKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL3NoIiwgIi1zaCIsIE5VTEwsIGVudl91c2UpOworICAgICAgICAgfQorSW5kZXg6IGdpdC9zcmMvYmFzaWMvdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2Jhc2ljL3V0aWwuYworKysrIGdpdC9zcmMvYmFzaWMvdXRpbC5jCitAQCAtMzIzMyw3ICszMjMzLDcgQEAgaW50IGdldF91c2VyX2NyZWRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICpnaWQgPSAwOworIAorICAgICAgICAgICAgICAgICBpZiAoaG9tZSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAqaG9tZSA9ICIvcm9vdCI7CisrICAgICAgICAgICAgICAgICAgICAgICAgKmhvbWUgPSBST09USE9NRURJUjsKKyAKKyAgICAgICAgICAgICAgICAgaWYgKHNoZWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICpzaGVsbCA9ICIvYmluL3NoIjsKK0BAIC00MDY5LDcgKzQwNjksNyBAQCBpbnQgZ2V0X2hvbWVfZGlyKGNoYXIgKipfaCkgeworICAgICAgICAgLyogSGFyZGNvZGUgaG9tZSBkaXJlY3RvcnkgZm9yIHJvb3QgdG8gYXZvaWQgTlNTICovCisgICAgICAgICB1ID0gZ2V0dWlkKCk7CisgICAgICAgICBpZiAodSA9PSAwKSB7CistICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoIi9yb290Iik7CisrICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBpZiAoIWgpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgCitJbmRleDogZ2l0L3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorKysrIGdpdC91bml0cy9jb25zb2xlLXNoZWxsLnNlcnZpY2UubTQuaW4KK0BAIC0xNSw4ICsxNSw4IEBAIEFmdGVyPXJjLWxvY2FsLnNlcnZpY2UKKyBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnQ9LUBTVUxPR0lOQAorIEV4ZWNTdG9wUG9zdD0tQFNZU1RFTUNUTEAgcG93ZXJvZmYKKyBUeXBlPWlkbGUKK0luZGV4OiBnaXQvdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorQEAgLTE0LDggKzE0LDggQEAgQ29uZmxpY3RzPXJlc2N1ZS5zZXJ2aWNlCisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIAorIFtTZXJ2aWNlXQorLUVudmlyb25tZW50PUhPTUU9L3Jvb3QKKy1Xb3JraW5nRGlyZWN0b3J5PS9yb290CisrRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACisrV29ya2luZ0RpcmVjdG9yeT1Acm9vdGhvbWVkaXJACisgRXhlY1N0YXJ0UHJlPS0vYmluL3BseW1vdXRoIC0td2FpdCBxdWl0CisgRXhlY1N0YXJ0UHJlPS0vYmluL2VjaG8gLWUgJ1dlbGNvbWUgdG8gZW1lcmdlbmN5IG1vZGUhIEFmdGVyIGxvZ2dpbmcgaW4sIHR5cGUgImpvdXJuYWxjdGwgLXhiIiB0byB2aWV3XFxuc3lzdGVtIGxvZ3MsICJzeXN0ZW1jdGwgcmVib290IiB0byByZWJvb3QsICJzeXN0ZW1jdGwgZGVmYXVsdCIgb3IgXkQgdG9cXG50cnkgYWdhaW4gdG8gYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCitJbmRleDogZ2l0L3VuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KKysrKyBnaXQvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KK0BAIC0xNCw4ICsxNCw4IEBAIEFmdGVyPXN5c2luaXQudGFyZ2V0IHBseW1vdXRoLXN0YXJ0LnNlcnYKKyBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnRQcmU9LS9iaW4vcGx5bW91dGggcXVpdAorIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdXZWxjb21lIHRvIGVtZXJnZW5jeSBtb2RlISBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxuYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTEtc3lzdGVtZC11c2VyLWF2b2lkLXVzaW5nLXN5c3RlbS1hdXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NjJiY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDdlMjAyZjcxNzg1YmY1YTY3YzhhNGY2YjU4ZDM1ODU2MDhmYmZkYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyNjoyNSArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzExXSBzeXN0ZW1kLXVzZXI6IGF2b2lkIHVzaW5nIHN5c3RlbS1hdXRoCisKK0luIE9FLCB3ZSBkb24ndCBwcm92aWRlIHN5c3RlbS1hdXRoLCBpbnN0ZWFkLCB3ZSB1c2UgY29tbW9uLSogZmlsZXMuCitTbyBtb2RpZnkgc3lzdGVtZC11c2VyIGZpbGUgdG8gdXNlIGNvbW1vbi0qIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2xvZ2luL3N5c3RlbWQtdXNlciB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbG9naW4vc3lzdGVtZC11c2VyIGIvc3JjL2xvZ2luL3N5c3RlbWQtdXNlcgoraW5kZXggODExMmQ3NC4uOTk2MzVhZiAxMDA2NDQKKy0tLSBhL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKKysrKyBiL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKK0BAIC0yLDUgKzIsNSBAQAorICMKKyAjIFVzZWQgYnkgc3lzdGVtZCAtLXVzZXIgaW5zdGFuY2VzLgorIAorLWFjY291bnQgIGluY2x1ZGUgc3lzdGVtLWF1dGgKKy1zZXNzaW9uICBpbmNsdWRlIHN5c3RlbS1hdXRoCisrYWNjb3VudCAgaW5jbHVkZSBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gIGluY2x1ZGUgY29tbW9uLXNlc3Npb24KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEyLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGI0NWE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA1ZjhiOWYyZDI3NmMwZGRiY2JmNTQyMzczM2EyM2YwNDNkNjg4MDA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNSBTZXAgMjAxNSAwNjozMTo0NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBpbXBsbWVudCBzeXN0ZW1kLXN5c3YtaW5zdGFsbCBmb3IgT0UKKworVXNlIHVwZGF0ZS1yYy5kIGZvciBlbmFibGluZy9kaXNhYmxpbmcgYW5kIHN0YXR1cyBjb21tYW5kCit0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzeXN2IHNlcnZpY2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04gfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04KKysrKyBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorQEAgLTMwLDE3ICszMCwxNyBAQCBjYXNlICIkMSIgaW4KKyAgICAgZW5hYmxlKQorICAgICAgICAgIyBjYWxsIHRoZSBjb21tYW5kIHRvIGVuYWJsZSBTeXNWIGluaXQgc2NyaXB0ICROQU1FIGhlcmUKKyAgICAgICAgICMgKGNvbnNpZGVyIG9wdGlvbmFsICRST09UKQorLSAgICAgICAgZWNobyAiSU1QTEVNRU5UIE1FOiBlbmFibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSBkZWZhdWx0cworICAgICAgICAgOzsKKyAgICAgZGlzYWJsZSkKKyAgICAgICAgICMgY2FsbCB0aGUgY29tbWFuZCB0byBkaXNhYmxlIFN5c1YgaW5pdCBzY3JpcHQgJE5BTUUgaGVyZQorICAgICAgICAgIyAoY29uc2lkZXIgb3B0aW9uYWwgJFJPT1QpCistICAgICAgICBlY2hvICJJTVBMRU1FTlQgTUU6IGRpc2FibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSByZW1vdmUKKyAgICAgICAgIDs7CisgICAgIGlzLWVuYWJsZWQpCisgICAgICAgICAjIGV4aXQgd2l0aCAwIGlmICROQU1FIGlzIGVuYWJsZWQsIG5vbi16ZXJvIGlmIGl0IGlzIGRpc2FibGVkCisgICAgICAgICAjIChjb25zaWRlciBvcHRpb25hbCAkUk9PVCkKKy0gICAgICAgIGVjaG8gIklNUExFTUVOVCBNRTogY2hlY2tpbmcgU3lzViBpbml0LmQgc2NyaXB0ICROQU1FIgorKyAgICAgICAgL2V0Yy9pbml0LmQvJE5BTUUgc3RhdHVzCisgICAgICAgICA7OworICAgICAqKQorICAgICAgICAgdXNhZ2UgOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNC1SZXZlcnQtcnVsZXMtcmVtb3ZlLWZpcm13YXJlLWxvYWRpbmctcnVsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyYmE1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNGYwYTcyMjQ4OTE1NGRhOTllN2Y2YjMwNTFhZmRlOTg0ZWVkMmY3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTU6MDE6MjkgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJydWxlczogcmVtb3ZlIGZpcm13YXJlIGxvYWRpbmcgcnVsZXMiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgNzBlN2Q3NTRkZGIzNTZmYjFhMjk0MmIyNjJmOGNlZTk2NTBlMmExOS4KK1VzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBMaW51eCA8IDMuNy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKKworZGlmZiAtLWdpdCBhL3J1bGVzLzUwLWZpcm13YXJlLnJ1bGVzIGIvcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMGFlNjg0CistLS0gL2Rldi9udWxsCisrKysgYi9ydWxlcy81MC1maXJtd2FyZS5ydWxlcworQEAgLTAsMCArMSwzIEBACisrIyBkbyBub3QgZWRpdCB0aGlzIGZpbGUsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gb24gdXBkYXRlCisrCisrU1VCU1lTVEVNPT0iZmlybXdhcmUiLCBBQ1RJT049PSJhZGQiLCBSVU57YnVpbHRpbn09ImZpcm13YXJlIgorLS0gCisyLjMuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwOGNjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTUtUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaApAQCAtMCwwICsxLDM2NCBAQAorRnJvbSA3ZjA3NGRlZjRlMzIwNDUzNTNiYTQzMzZkNzAzZTE3YjhkZTdlYzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNTowMTozMyArMTEwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInVkZXY6IHJlbW92ZSB1c2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IgorCitUaGlzIHJldmVydHMgY29tbWl0IGJlMmVhNzIzYjFkMDIzYjNkMzg1ZDNiNzkxZWU0NjA3Y2JmYjIwY2EuCitVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgTGludXggPCAzLjcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsrKworIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrLQorIFRPRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICB8ICAyMCArKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIHwgMTU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi5jICAgICAgICAgIHwgICAzICsKKyBzcmMvdWRldi91ZGV2LmggICAgICAgICAgICAgICAgICB8ICAgNiArKworIHNyYy91ZGV2L3VkZXZkLmMgICAgICAgICAgICAgICAgIHwgIDEzICsrKysKKyA4IGZpbGVzIGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworCitJbmRleDogZ2l0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnaXQvTWFrZWZpbGUuYW0KK0BAIC0zNDcwLDYgKzM0NzAsMTggQEAgbGlidWRldl9jb3JlX2xhX0xJQkFERCA9IFwKKyAJJChCTEtJRF9MSUJTKSBcCisgCSQoS01PRF9MSUJTKQorIAorK2xpYnVkZXZfY29yZV9sYV9DUFBGTEFHUyA9IFwKKysJJChBTV9DUFBGTEFHUykgXAorKwktREZJUk1XQVJFX1BBVEg9IiQoRklSTVdBUkVfUEFUSCkiCisrCisraWYgRU5BQkxFX0ZJUk1XQVJFCisrbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorKwlzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworKworK2Rpc3RfdWRldnJ1bGVzX0RBVEEgKz0gXAorKwlydWxlcy81MC1maXJtd2FyZS5ydWxlcworK2VuZGlmCisrCisgaWYgSEFWRV9LTU9ECisgbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorIAlzcmMvdWRldi91ZGV2LWJ1aWx0aW4ta21vZC5jCitJbmRleDogZ2l0L1JFQURNRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL1JFQURNRQorKysrIGdpdC9SRUFETUUKK0BAIC0zNiw3ICszNiw4IEBAIExJQ0VOU0U6CisgICAgICAgICAtIGV4Y2VwdCBzcmMvdWRldi8qIHdoaWNoIGlzIChjdXJyZW50bHkgc3RpbGwpIEdQTHYyLCBHUEx2MisKKyAKKyBSRVFVSVJFTUVOVFM6CistICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy43CisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4wCisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4zIGZvciBsb29wIGRldmljZSBwYXJ0aXRpb24gc3VwcG9ydCBmZWF0dXJlcyB3aXRoIG5zcGF3bgorICAgICAgICAgTGludXgga2VybmVsID49IDMuOCBmb3IgU21hY2sgc3VwcG9ydAorIAorICAgICAgICAgS2VybmVsIENvbmZpZyBPcHRpb25zOgorQEAgLTUxLDE0ICs1MiwxNCBAQCBSRVFVSVJFTUVOVFM6CisgICAgICAgICAgIENPTkZJR19QUk9DX0ZTCisgICAgICAgICAgIENPTkZJR19GSEFORExFIChsaWJ1ZGV2LCBtb3VudCBhbmQgYmluZCBtb3VudCBoYW5kbGluZykKKyAKKy0gICAgICAgIHVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IHN5c2ZzIGxheW91dDoKKysgICAgICAgIFVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IGxheW91dDoKKyAgICAgICAgICAgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9bgorIAorICAgICAgICAgTGVnYWN5IGhvdHBsdWcgc2xvd3MgZG93biB0aGUgc3lzdGVtIGFuZCBjb25mdXNlcyB1ZGV2OgorICAgICAgICAgICBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCisgCistICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBzaG91bGQKKy0gICAgICAgIGJlIGRpc2FibGVkIGluIHRoZSBrZXJuZWw6CisrICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBkZXByZWNhdGVkLCB3aWxsIGdvIGF3YXksIGFuZAorKyAgICAgICAgc29tZXRpbWVzIGNhdXNlcyBwcm9ibGVtczoKKyAgICAgICAgICAgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj1uCisgCisgICAgICAgICBTb21lIHVkZXYgcnVsZXMgYW5kIHZpcnR1YWxpemF0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gaXQ6CitJbmRleDogZ2l0L1RPRE8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9UT0RPCisrKysgZ2l0L1RPRE8KK0BAIC03NTQsNiArNzU0LDcgQEAgRmVhdHVyZXM6CisgKiBFeGVjT25GYWlsdXJlPS91c3IvYmluL2ZvbworIAorICogdWRldjoKKysgIC0gcmVtb3ZlIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIChDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSPW4pCisgICAtIG1vdmUgdG8gTEdQTAorICAgLSBraWxsIHNjc2lfaWQKKyAgIC0gYWRkIHRyaWdnZXIgLS1zdWJzeXN0ZW0tbWF0Y2g9dXNiL3VzYl9kZXZpY2UgZGV2aWNlCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMjY4LDYgKzEyNjgsMjYgQEAgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX01ZSE9TVE5BTUUsIFt0ZXN0ICIkaGF2ZV9teWhvc3RuYW1lIiA9ICJ5ZXMiXSkKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK0FDX0FSR19XSVRIKGZpcm13YXJlLXBhdGgsCisrICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZmlybXdhcmUtcGF0aD1ESVJbW1s6RElSWy4uLl1dXV1dLAorKyAgICAgICAgICBbRmlybXdhcmUgc2VhcmNoIHBhdGggKGRlZmF1bHQ9IiIpXSksCisrICAgICAgIFtdLCBbd2l0aF9maXJtd2FyZV9wYXRoPSIiXSkKKytPTERfSUZTPSRJRlMKKytJRlM9OgorK2ZvciBpIGluICR3aXRoX2Zpcm13YXJlX3BhdGg7IGRvCisrICAgICAgIGlmIHRlc3QgIngke0ZJUk1XQVJFX1BBVEh9IiA9ICJ4IjsgdGhlbgorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iJHtGSVJNV0FSRV9QQVRIfSwgXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZmkKKytkb25lCisrSUZTPSRPTERfSUZTCisrQUNfU1VCU1QoRklSTVdBUkVfUEFUSCkKKytBU19JRihbdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iICE9ICJ4Il0sIFsgQUNfREVGSU5FKEhBVkVfRklSTVdBUkUsIDEsIFtEZWZpbmUgaWYgRklSTVdBUkUgaXMgYXZhaWxhYmxlXSkgXSkKKytBTV9DT05ESVRJT05BTChFTkFCTEVfRklSTVdBUkUsIFt0ZXN0ICJ4JHtGSVJNV0FSRV9QQVRIfSIgIT0gIngiXSkKKysKKysKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFDX0FSR19FTkFCTEUoaHdkYiwgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtaHdkYl0sIFtkaXNhYmxlIGhhcmR3YXJlIGRhdGFiYXNlIHN1cHBvcnRdKV0sCisgICAgICAgIGVuYWJsZV9od2RiPSRlbmFibGV2YWwsIGVuYWJsZV9od2RiPXllcykKKyBBTV9DT05ESVRJT05BTChFTkFCTEVfSFdEQiwgW3Rlc3QgeCRlbmFibGVfaHdkYiA9IHh5ZXNdKQorQEAgLTE1NzQsNiArMTU5NCw3IEBAIEFDX01TR19SRVNVTFQoWworICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CisgICAgICAgICBzcGhpbnggYmluYXJ5OiAgICAgICAgICAgJHtTUEhJTlhfQlVJTER9CisrICAgICAgICBmaXJtd2FyZSBwYXRoOiAgICAgICAgICAgJHtGSVJNV0FSRV9QQVRIfQorICAgICAgICAgUEFNIG1vZHVsZXMgZGlyOiAgICAgICAgICR7d2l0aF9wYW1saWJkaXJ9CisgICAgICAgICBQQU0gY29uZmlndXJhdGlvbiBkaXI6ICAgJHt3aXRoX3BhbWNvbmZkaXJ9CisgICAgICAgICBELUJ1cyBwb2xpY3kgZGlyOiAgICAgICAgJHt3aXRoX2RidXNwb2xpY3lkaXJ9CitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCitAQCAtMCwwICsxLDE1NCBAQAorKy8qCisrICogZmlybXdhcmUgLSBLZXJuZWwgZmlybXdhcmUgbG9hZGVyCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGl0ZXIgUHVuayA8cGl0ZXJwdW5rQHNsYWNrd2FyZS5jb20+CisrICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgS2F5IFNpZXZlcnMgPGtheUB2cmZ5Lm9yZz4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzOioKKysgKi8KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKysjaW5jbHVkZSAidWRldi5oIgorKworK3N0YXRpYyBib29sIHNldF9sb2FkaW5nKHN0cnVjdCB1ZGV2ICp1ZGV2LCBjaGFyICpsb2FkcGF0aCwgY29uc3QgY2hhciAqc3RhdGUpIHsKKysgICAgICAgIEZJTEUgKmxkZmlsZTsKKysKKysgICAgICAgIGxkZmlsZSA9IGZvcGVuKGxvYWRwYXRoLCAid2UiKTsKKysgICAgICAgIGlmIChsZGZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImVycm9yOiBjYW4gbm90IG9wZW4gJyVzJyIsIGxvYWRwYXRoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfTsKKysgICAgICAgIGZwcmludGYobGRmaWxlLCAiJXNcbiIsIHN0YXRlKTsKKysgICAgICAgIGZjbG9zZShsZGZpbGUpOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyBib29sIGNvcHlfZmlybXdhcmUoc3RydWN0IHVkZXYgKnVkZXYsIGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBzaXplX3Qgc2l6ZSkgeworKyAgICAgICAgY2hhciAqYnVmOworKyAgICAgICAgRklMRSAqZnNvdXJjZSA9IE5VTEwsICpmdGFyZ2V0ID0gTlVMTDsKKysgICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7CisrCisrICAgICAgICBidWYgPSBtYWxsb2Moc2l6ZSk7CisrICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCJObyBtZW1vcnkgYXZhaWxhYmxlIHRvIGxvYWQgZmlybXdhcmUgZmlsZSIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBsb2dfZGVidWcoIndyaXRpbmcgJyVzJyAoJXppKSB0byAnJXMnIiwgc291cmNlLCBzaXplLCB0YXJnZXQpOworKworKyAgICAgICAgZnNvdXJjZSA9IGZvcGVuKHNvdXJjZSwgInJlIik7CisrICAgICAgICBpZiAoZnNvdXJjZSA9PSBOVUxMKQorKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICBmdGFyZ2V0ID0gZm9wZW4odGFyZ2V0LCAid2UiKTsKKysgICAgICAgIGlmIChmdGFyZ2V0ID09IE5VTEwpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmcmVhZChidWYsIHNpemUsIDEsIGZzb3VyY2UpICE9IDEpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmd3JpdGUoYnVmLCBzaXplLCAxLCBmdGFyZ2V0KSA9PSAxKQorKyAgICAgICAgICAgICAgICByZXQgPSB0cnVlOworK2V4aXQ6CisrICAgICAgICBpZiAoZnRhcmdldCAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnRhcmdldCk7CisrICAgICAgICBpZiAoZnNvdXJjZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnNvdXJjZSk7CisrICAgICAgICBmcmVlKGJ1Zik7CisrICAgICAgICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IGJ1aWx0aW5fZmlybXdhcmUoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgdGVzdCkgeworKyAgICAgICAgc3RydWN0IHVkZXYgKnVkZXYgPSB1ZGV2X2RldmljZV9nZXRfdWRldihkZXYpOworKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKnNlYXJjaHBhdGhbXSA9IHsgRklSTVdBUkVfUEFUSCB9OworKyAgICAgICAgY2hhciBsb2FkcGF0aFtVVElMX1BBVEhfU0laRV07CisrICAgICAgICBjaGFyIGRhdGFwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNoYXIgZndwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNvbnN0IGNoYXIgKmZpcm13YXJlOworKyAgICAgICAgRklMRSAqZndmaWxlID0gTlVMTDsKKysgICAgICAgIHN0cnVjdCB1dHNuYW1lIGtlcm5lbDsKKysgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisrICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKysgICAgICAgIGludCByYyA9IEVYSVRfU1VDQ0VTUzsKKysKKysgICAgICAgIGZpcm13YXJlID0gdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5X3ZhbHVlKGRldiwgIkZJUk1XQVJFIik7CisrICAgICAgICBpZiAoZmlybXdhcmUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImZpcm13YXJlIHBhcmFtZXRlciBtaXNzaW5nIik7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBsb29rdXAgZmlybXdhcmUgZmlsZSAqLworKyAgICAgICAgdW5hbWUoJmtlcm5lbCk7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUVOVFNPRihzZWFyY2hwYXRoKTsgaSsrKSB7CisrICAgICAgICAgICAgICAgIHN0cnNjcHlsKGZ3cGF0aCwgc2l6ZW9mKGZ3cGF0aCksIHNlYXJjaHBhdGhbaV0sIGtlcm5lbC5yZWxlYXNlLCAiLyIsIGZpcm13YXJlLCBOVUxMKTsKKysgICAgICAgICAgICAgICAgZndmaWxlID0gZm9wZW4oZndwYXRoLCAicmUiKTsKKysgICAgICAgICAgICAgICAgaWYgKGZ3ZmlsZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICBzdHJzY3B5bChmd3BhdGgsIHNpemVvZihmd3BhdGgpLCBzZWFyY2hwYXRoW2ldLCBmaXJtd2FyZSwgTlVMTCk7CisrICAgICAgICAgICAgICAgIGZ3ZmlsZSA9IGZvcGVuKGZ3cGF0aCwgInJlIik7CisrICAgICAgICAgICAgICAgIGlmIChmd2ZpbGUgIT0gTlVMTCkKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0cnNjcHlsKGxvYWRwYXRoLCBzaXplb2YobG9hZHBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2xvYWRpbmciLCBOVUxMKTsKKysKKysgICAgICAgIGlmIChmd2ZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZGVidWcoImRpZCBub3QgZmluZCBmaXJtd2FyZSBmaWxlICclcyciLCBmaXJtd2FyZSk7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgKiBEbyBub3QgY2FuY2VsIHRoZSByZXF1ZXN0IGluIHRoZSBpbml0cmQsIHRoZSByZWFsIHJvb3QgbWlnaHQgaGF2ZQorKyAgICAgICAgICAgICAgICAgKiB0aGUgZmlybXdhcmUgZmlsZSBhbmQgdGhlICdjb2xkcGx1ZycgcnVuIGluIHRoZSByZWFsIHJvb3Qgd2lsbCBmaW5kCisrICAgICAgICAgICAgICAgICAqIHRoaXMgcGVuZGluZyByZXF1ZXN0IGFuZCBmdWxmaWxsIG9yIGNhbmNlbCBpdC4KKysgICAgICAgICAgICAgICAgICogKi8KKysgICAgICAgICAgICAgICAgaWYgKCFpbl9pbml0cmQoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIi0xIik7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChzdGF0KGZ3cGF0aCwgJnN0YXRidWYpIDwgMCB8fCBzdGF0YnVmLnN0X3NpemUgPT0gMCkgeworKyAgICAgICAgICAgICAgICBpZiAoIWluX2luaXRyZCgpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiLTEiKTsKKysgICAgICAgICAgICAgICAgcmMgPSBFWElUX0ZBSUxVUkU7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICIxIikpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysKKysgICAgICAgIHN0cnNjcHlsKGRhdGFwYXRoLCBzaXplb2YoZGF0YXBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2RhdGEiLCBOVUxMKTsKKysgICAgICAgIGlmICghY29weV9maXJtd2FyZSh1ZGV2LCBmd3BhdGgsIGRhdGFwYXRoLCBzdGF0YnVmLnN0X3NpemUpKSB7CisrICAgICAgICAgICAgICAgIGxvZ19lcnJvcigiZXJyb3Igc2VuZGluZyBmaXJtd2FyZSAnJXMnIHRvIGRldmljZSIsIGZpcm13YXJlKTsKKysgICAgICAgICAgICAgICAgc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICItMSIpOworKyAgICAgICAgICAgICAgICByYyA9IEVYSVRfRkFJTFVSRTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgfTsKKysKKysgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiMCIpOworK2V4aXQ6CisrICAgICAgICBpZiAoZndmaWxlKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZndmaWxlKTsKKysgICAgICAgIHJldHVybiByYzsKKyt9CisrCisrY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmUgPSB7CisrICAgICAgICAubmFtZSA9ICJmaXJtd2FyZSIsCisrICAgICAgICAuY21kID0gYnVpbHRpbl9maXJtd2FyZSwKKysgICAgICAgIC5oZWxwID0gImtlcm5lbCBmaXJtd2FyZSBsb2FkZXIiLAorKyAgICAgICAgLnJ1bl9vbmNlID0gdHJ1ZSwKKyt9OworSW5kZXg6IGdpdC9zcmMvdWRldi91ZGV2LWJ1aWx0aW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCitAQCAtMzAsNiArMzAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiAqYnVpbHRpCisgICAgICAgICBbVURFVl9CVUlMVElOX0JMS0lEXSA9ICZ1ZGV2X2J1aWx0aW5fYmxraWQsCisgI2VuZGlmCisgICAgICAgICBbVURFVl9CVUlMVElOX0JUUkZTXSA9ICZ1ZGV2X2J1aWx0aW5fYnRyZnMsCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgIFtVREVWX0JVSUxUSU5fRklSTVdBUkVdID0gJnVkZXZfYnVpbHRpbl9maXJtd2FyZSwKKysjZW5kaWYKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fSFdEQl0gPSAmdWRldl9idWlsdGluX2h3ZGIsCisgICAgICAgICBbVURFVl9CVUlMVElOX0lOUFVUX0lEXSA9ICZ1ZGV2X2J1aWx0aW5faW5wdXRfaWQsCisgICAgICAgICBbVURFVl9CVUlMVElOX0tFWUJPQVJEXSA9ICZ1ZGV2X2J1aWx0aW5fa2V5Ym9hcmQsCitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYuaAorKysrIGdpdC9zcmMvdWRldi91ZGV2LmgKK0BAIC0xNDYsNiArMTQ2LDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CTEtJRCwKKyAjZW5kaWYKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CVFJGUywKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgVURFVl9CVUlMVElOX0ZJUk1XQVJFLAorKyNlbmRpZgorICAgICAgICAgVURFVl9CVUlMVElOX0hXREIsCisgICAgICAgICBVREVWX0JVSUxUSU5fSU5QVVRfSUQsCisgICAgICAgICBVREVWX0JVSUxUSU5fS0VZQk9BUkQsCitAQCAtMTc0LDYgKzE3Nyw5IEBAIHN0cnVjdCB1ZGV2X2J1aWx0aW4geworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9ibGtpZDsKKyAjZW5kaWYKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fYnRyZnM7CisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKytleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmU7CisrI2VuZGlmCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2h3ZGI7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2lucHV0X2lkOworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9rZXlib2FyZDsKK0luZGV4OiBnaXQvc3JjL3VkZXYvdWRldmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXZkLmMKKysrKyBnaXQvc3JjL3VkZXYvdWRldmQuYworQEAgLTExNiw2ICsxMTYsOSBAQCBzdHJ1Y3QgZXZlbnQgeworICAgICAgICAgYm9vbCBpc19ibG9jazsKKyAgICAgICAgIHNkX2V2ZW50X3NvdXJjZSAqdGltZW91dF93YXJuaW5nOworICAgICAgICAgc2RfZXZlbnRfc291cmNlICp0aW1lb3V0OworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBib29sIG5vZGVsYXk7CisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudCAqbm9kZV90b19ldmVudChzdHJ1Y3QgdWRldl9saXN0X25vZGUgKm5vZGUpIHsKK0BAIC02MDcsNiArNjEwLDEwIEBAIHN0YXRpYyBpbnQgZXZlbnRfcXVldWVfaW5zZXJ0KE1hbmFnZXIgKm0KKyAgICAgICAgIGV2ZW50LT5kZXZudW0gPSB1ZGV2X2RldmljZV9nZXRfZGV2bnVtKGRldik7CisgICAgICAgICBldmVudC0+aXNfYmxvY2sgPSBzdHJlcSgiYmxvY2siLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworICAgICAgICAgZXZlbnQtPmlmaW5kZXggPSB1ZGV2X2RldmljZV9nZXRfaWZpbmRleChkZXYpOworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBpZiAoc3RyZXEodWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShkZXYpLCAiZmlybXdhcmUiKSkKKysgICAgICAgICAgICAgICAgZXZlbnQtPm5vZGVsYXkgPSB0cnVlOworKyNlbmRpZgorIAorICAgICAgICAgbG9nX2RlYnVnKCJzZXEgJWxsdSBxdWV1ZWQsICclcycgJyVzJyIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZGV2KSwKKyAgICAgICAgICAgICAgdWRldl9kZXZpY2VfZ2V0X2FjdGlvbihkZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworQEAgLTY5Miw2ICs2OTksMTIgQEAgc3RhdGljIGJvb2wgaXNfZGV2cGF0aF9idXN5KE1hbmFnZXIgKm1hbgorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICB9CisgCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgICAgICAgICAgLyogYWxsb3cgdG8gYnlwYXNzIHRoZSBkZXBlbmRlbmN5IHRyYWNraW5nICovCisrICAgICAgICAgICAgICAgIGlmIChldmVudC0+bm9kZWxheSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysjZW5kaWYKKysKKyAgICAgICAgICAgICAgICAgLyogcGFyZW50IGRldmljZSBldmVudCBmb3VuZCAqLworICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRldnBhdGhbY29tbW9uXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC0+ZGVsYXlpbmdfc2VxbnVtID0gbG9vcF9ldmVudC0+c2VxbnVtOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1MmJlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9zaAorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1ZGV2CisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydCB1ZGV2ZCwgcG9wdWxhdGUgL2RldiBhbmQgbG9hZCBkcml2ZXJzLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorWyAtciAvcHJvYy9tb3VudHMgXSB8fCBleGl0IDEKK1sgLXggQFVERVZEQCBdIHx8IGV4aXQgMQorWyAtZiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUKK1sgLWYgL2V0Yy91ZGV2L3VkZXYuY29uZiBdICYmIC4gL2V0Yy91ZGV2L3VkZXYuY29uZgorCityZWFkZmlsZSAoKSB7CisgICBmaWxlbmFtZT0kMQorICAgUkVBRERBVEE9IiIKKyAgIGlmIFsgLXIgJGZpbGVuYW1lIF07IHRoZW4KKyAgICAgICB3aGlsZSByZWFkIGxpbmU7IGRvCisgICAgICAgICAgIFJFQUREQVRBPSIkUkVBRERBVEEkbGluZSIKKyAgICAgICBkb25lIDwgJGZpbGVuYW1lCisgICBmaQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZXhwb3J0IEFDVElPTj1hZGQKKyAgICAjIHByb3BhZ2F0ZSAvZGV2IGZyb20gL3N5cworICAgIGVjaG8gIlN0YXJ0aW5nIHVkZXYiCisKKyAgICAjIG1vdW50IHRoZSBkZXZ0bXBmcyBvbiAvZGV2LCBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgTEFORz1DIGF3ayAnJDIgPT0gIi9kZXYiICYmICgkMyA9PSAiZGV2dG1wZnMiKSB7IGV4aXQgMSB9JyAvcHJvYy9tb3VudHMgJiYgeworICAgICAgICAgICAgbW91bnQgLW4gLW8gbW9kZT0wNzU1IC10IGRldnRtcGZzIG5vbmUgIi9kZXYiCisgICAgfQorICAgIFsgLWUgL2Rldi9wdHMgXSB8fCBta2RpciAtbSAwNzU1IC9kZXYvcHRzCisgICAgWyAtZSAvZGV2L3NobSBdIHx8IG1rZGlyIC1tIDE3NzcgL2Rldi9zaG0KKyAgICBtb3VudCAtYSAtdCB0bXBmcyAyPi9kZXYvbnVsbAorCisgICAgIyBjYWNoZSBoYW5kbGluZworICAgIGlmIFsgIiRERVZDQUNIRSIgIT0gIiIgXTsgdGhlbgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvdmVyc2lvbgorICAgICAgICAgICAgVkVSU0lPTj0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvY21kbGluZQorICAgICAgICAgICAgQ01ETElORT0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvZGV2aWNlcworICAgICAgICAgICAgREVWSUNFUz0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvYXRhZ3MKKyAgICAgICAgICAgIEFUQUdTPSIkUkVBRERBVEEiCisKKyAgICAgICAgICAgIGlmIFsgLWUgJERFVkNBQ0hFIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcmVhZGZpbGUgL2V0Yy91ZGV2L2NhY2hlLmRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiJFJFQUREQVRBIiA9ICIkVkVSU0lPTiRDTURMSU5FJERFVklDRVMkQVRBR1MiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2QgLzsgdGFyIHhmICRERVZDQUNIRSA+IC9kZXYvbnVsbCAyPiYxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF9maXJzdF9ib290PTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXY6IHVzaW5nIGNhY2hlIGZpbGUgJERFVkNBQ0hFIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgL2Rldi9zaG0vdWRldi5jYWNoZSBdICYmIHJtIC1mIC9kZXYvc2htL3VkZXYuY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIG1ha2VfZXh0cmFfbm9kZXMKKyAgICBraWxscHJvYyBzeXN0ZW1kLXVkZXZkID4gIi9kZXYvbnVsbCIgMj4mMQorCisgICAgIyB0cmlnZ2VyIHRoZSBzb3J0ZWQgZXZlbnRzCisgICAgZWNobyAtZSAnXDAwMFwwMDBcMDAwXDAwMCcgPiAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKKyAgICBAVURFVkRAIC1kCisKKyAgICB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0xCisgICAgaWYgWyAiJG5vdF9maXJzdF9ib290IiAhPSAiIiBdO3RoZW4KKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQgLS1zdWJzeXN0ZW0tbm9tYXRjaD10dHkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1tZW0gLS1zdWJzeXN0ZW0tbm9tYXRjaD12YyAtLXN1YnN5c3RlbS1ub21hdGNoPXZ0Y29uc29sZSAtLXN1YnN5c3RlbS1ub21hdGNoPW1pc2MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1kY29uIC0tc3Vic3lzdGVtLW5vbWF0Y2g9cGNpX2J1cyAgLS1zdWJzeXN0ZW0tbm9tYXRjaD1ncmFwaGljcwkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1iYWNrbGlnaHQgLS1zdWJzeXN0ZW0tbm9tYXRjaD12aWRlbzRsaW51eAktLXN1YnN5c3RlbS1ub21hdGNoPXBsYXRmb3JtCisgICAgICAgICAgICAodWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTM7IHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPSkmCisgICAgZWxzZQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorICAgICAgICAgICAgdWRldmFkbSBzZXR0bGUKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAiU3RvcHBpbmcgdWRldmQiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBzeXN0ZW1kLXVkZXZkIC0tcXVpZXQKKyAgICA7OworICByZXN0YXJ0KQorICAgICQwIHN0b3AKKyAgICBzbGVlcCAxCisgICAgJDAgc3RhcnQKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIHN5c3RlbWQtdWRldmQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcWVtdWFsbF9pb19sYXRlbmN5LWNvcmUtZGV2aWNlLmMtQ2hhbmdlLXRoZS1kZWZhdWx0LWRldmljZS10aW1lb3V0LXRvLTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMTcxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU3BlY2lmaWMgY2FzZSBRRU1VL0FCXQorCitGcm9tIDdiOGM0ZTBhNjdhNzlhNzVlMWJkNzdkZjNhNDUyYTU0OTczMjIxMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI3IEF1ZyAyMDE1IDE3OjU4OjI2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvcmUvZGV2aWNlLmM6IENoYW5nZSB0aGUgZGVmYXVsdCBkZXZpY2UgdGltZW91dCB0byAyNDAgc2VjLgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNyYy9jb3JlL2RldmljZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZGV2aWNlLmMgYi9zcmMvY29yZS9kZXZpY2UuYworaW5kZXggZTdlZmNmMC4uNGVkOGYwOCAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlL2RldmljZS5jCisrKysgYi9zcmMvY29yZS9kZXZpY2UuYworQEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfaW5pdChVbml0ICp1KSB7CisgICAgICAgICAgKiBpbmRlZmluaXRlbHkgZm9yIHBsdWdnZWQgaW4gZGV2aWNlcywgc29tZXRoaW5nIHdoaWNoIGNhbm5vdAorICAgICAgICAgICogaGFwcGVuIGZvciB0aGUgb3RoZXIgdW5pdHMgc2luY2UgdGhlaXIgb3BlcmF0aW9ucyB0aW1lIG91dAorICAgICAgICAgICogYW55d2F5LiAqLworLSAgICAgICAgdS0+am9iX3RpbWVvdXQgPSB1LT5tYW5hZ2VyLT5kZWZhdWx0X3RpbWVvdXRfc3RhcnRfdXNlYzsKKysgICAgICAgIHUtPmpvYl90aW1lb3V0ID0gKDI0MCAqIFVTRUNfUEVSX1NFQyk7CisgCisgICAgICAgICB1LT5pZ25vcmVfb25faXNvbGF0ZSA9IHRydWU7CisgICAgICAgICB1LT5pZ25vcmVfb25fc25hcHNob3QgPSB0cnVlOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkNjFjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCit0YXIgLUMgdGVzdCAteEpmIHRlc3Qvc3lzLnRhci54egorbWFrZSB0ZXN0L3J1bGVzLXRlc3Quc2gubG9nCittYWtlIHRlc3QvdWRldi10ZXN0LnBsLmxvZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC90b3VjaHNjcmVlbi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODNmZDE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMKQEAgLTAsMCArMSwxOCBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIENyZWF0ZSBhIHN5bWxpbmsgdG8gYW55IHRvdWNoc2NyZWVuIGlucHV0IGRldmljZQorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImlucHV0OiotZTAqLDMsKmEwLDEsKjE4LCoiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImFkczc4NDYiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjI1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZDRjN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjUuYmIKQEAgLTAsMCArMSw0MTUgQEAKK1NVTU1BUlkgPSAiQSBTeXN0ZW0gYW5kIHNlcnZpY2UgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZCIKKworREVTQ1JJUFRJT04gPSAic3lzdGVtZCBpcyBhIHN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIGZvciBMaW51eCwgY29tcGF0aWJsZSB3aXRoIFwKK1N5c1YgYW5kIExTQiBpbml0IHNjcmlwdHMuIHN5c3RlbWQgcHJvdmlkZXMgYWdncmVzc2l2ZSBwYXJhbGxlbGl6YXRpb24gXAorY2FwYWJpbGl0aWVzLCB1c2VzIHNvY2tldCBhbmQgRC1CdXMgYWN0aXZhdGlvbiBmb3Igc3RhcnRpbmcgc2VydmljZXMsIFwKK29mZmVycyBvbi1kZW1hbmQgc3RhcnRpbmcgb2YgZGFlbW9ucywga2VlcHMgdHJhY2sgb2YgcHJvY2Vzc2VzIHVzaW5nIFwKK0xpbnV4IGNncm91cHMsIHN1cHBvcnRzIHNuYXBzaG90dGluZyBhbmQgcmVzdG9yaW5nIG9mIHRoZSBzeXN0ZW0gXAorc3RhdGUsIG1haW50YWlucyBtb3VudCBhbmQgYXV0b21vdW50IHBvaW50cyBhbmQgaW1wbGVtZW50cyBhbiBcCitlbGFib3JhdGUgdHJhbnNhY3Rpb25hbCBkZXBlbmRlbmN5LWJhc2VkIHNlcnZpY2UgY29udHJvbCBsb2dpYy4gSXQgY2FuIFwKK3dvcmsgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBzeXN2aW5pdC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuR1BMMjttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworUFJPVklERVMgPSAidWRldiIKKworUEUgPSAiMSIKKworREVQRU5EUyA9ICJrbW9kIGRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGFjbCByZWFkbGluZSBkYnVzIGxpYmNhcCBsaWJjZ3JvdXAgZ2xpYi0yLjAgcWVtdS1uYXRpdmUgdXRpbC1saW51eCIKKworU0VDVElPTiA9ICJiYXNlL3NoZWxsIgorCitpbmhlcml0IHVzZXJhZGQgcGtnY29uZmlnIGF1dG90b29scyBwZXJsbmF0aXZlIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcWVtdSBzeXN0ZW1kIHB0ZXN0IGdldHRleHQKKworU1JDUkVWID0gImUxNDM5YTE0NzJjNWY2OTE3MzNiOGVmMTBlNzAyYmVhYzI0OTZhNjMiCisKK1BWID0gIjIyNStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC5naXQ7cHJvdG9jb2w9Z2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1qb3VybmFsLVVzZS1wb3NpeC1mYWxsb2NhdGUtb25seS1pZi1hdmFpbGFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy11dGlsLVVzZS1ta29zdGVtcC1vbmx5LWlmLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hzY3JlZW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX3FlbXVhbGwgPSAiIGZpbGU6Ly9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaCBcCisgICAgICAgICAgICIKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IgorCitHVEtET0NfRE9DRElSID0gIiR7U30vZG9jcy8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ4eiBsZGNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneGtiY29tbW9uJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzZWxpbnV4JywgJ3NlbGludXgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1tqb3VybmFsLXVwbG9hZF0gPSAiLS1lbmFibGUtbGliY3VybCwtLWRpc2FibGUtbGliY3VybCxjdXJsIgorIyBTaWduIHRoZSBqb3VybmFsIGZvciBhbnRpLXRhbXBlcmluZworUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0tZW5hYmxlLWdjcnlwdCwtLWRpc2FibGUtZ2NyeXB0LGxpYmdjcnlwdCIKKyMgcmVnYXJkbGVzcyBvZiBQQUNLQUdFQ09ORklHLCBsaWJnY3J5cHQgaXMgYWx3YXlzIHJlcXVpcmVkIHRvIGV4cGFuZAorIyB0aGUgQU1fUEFUSF9MSUJHQ1JZUFQgYXV0b2NvbmYgbWFjcm8KK0RFUEVORFMgKz0gImxpYmdjcnlwdCIKKyMgQ29tcHJlc3MgdGhlIGpvdXJuYWwKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0tZW5hYmxlLXh6LC0tZGlzYWJsZS14eix4eiIKK1BBQ0tBR0VDT05GSUdbY3J5cHRzZXR1cF0gPSAiLS1lbmFibGUtbGliY3J5cHRzZXR1cCwtLWRpc2FibGUtbGliY3J5cHRzZXR1cCxjcnlwdHNldHVwIgorUEFDS0FHRUNPTkZJR1ttaWNyb2h0dHBkXSA9ICItLWVuYWJsZS1taWNyb2h0dHBkLC0tZGlzYWJsZS1taWNyb2h0dHBkLGxpYm1pY3JvaHR0cGQiCitQQUNLQUdFQ09ORklHW2VsZnV0aWxzXSA9ICItLWVuYWJsZS1lbGZ1dGlscywtLWRpc2FibGUtZWxmdXRpbHMsZWxmdXRpbHMiCitQQUNLQUdFQ09ORklHW3Jlc29sdmVkXSA9ICItLWVuYWJsZS1yZXNvbHZlZCwtLWRpc2FibGUtcmVzb2x2ZWQiCitQQUNLQUdFQ09ORklHW25ldHdvcmtkXSA9ICItLWVuYWJsZS1uZXR3b3JrZCwtLWRpc2FibGUtbmV0d29ya2QiCitQQUNLQUdFQ09ORklHW2xpYmlkbl0gPSAiLS1lbmFibGUtbGliaWRuLC0tZGlzYWJsZS1saWJpZG4sbGliaWRuIgorUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0IgorUEFDS0FHRUNPTkZJR1ttYW5wYWdlc10gPSAiLS1lbmFibGUtbWFucGFnZXMsLS1kaXNhYmxlLW1hbnBhZ2VzLGxpYnhzbHQtbmF0aXZlIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLC0tZGlzYWJsZS1wYW0sbGlicGFtIgorIyBWZXJpZnkga2V5bWFwcyBvbiBsb2NhbGUgY2hhbmdlCitQQUNLQUdFQ09ORklHW3hrYmNvbW1vbl0gPSAiLS1lbmFibGUteGtiY29tbW9uLC0tZGlzYWJsZS14a2Jjb21tb24sbGlieGtiY29tbW9uIgorIyBVcGRhdGUgTkFUIGZpcmV3YWxsIHJ1bGVzCitQQUNLQUdFQ09ORklHW2lwdGNdID0gIi0tZW5hYmxlLWxpYmlwdGMsLS1kaXNhYmxlLWxpYmlwdGMsaXB0YWJsZXMiCitQQUNLQUdFQ09ORklHW2xkY29uZmlnXSA9ICItLWVuYWJsZS1sZGNvbmZpZywtLWRpc2FibGUtbGRjb25maWcsLCIKK1BBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiLS1lbmFibGUtc2VsaW51eCwtLWRpc2FibGUtc2VsaW51eCxsaWJzZWxpbnV4IgorUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9eWVzIGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPXllcyAsYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9bm8gYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9bm8gLHZhbGdyaW5kIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LSUxMPSR7YmFzZV9iaW5kaXJ9L2tpbGwiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QiCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBT049JHtzYmluZGlyfS9xdW90YW9uIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfU1VMT0dJTj0ke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKKworIyBIZWxwZXIgdmFyaWFibGVzIHRvIGNsYXJpZnkgbG9jYXRpb25zLiAgVGhpcyBtaXJyb3JzIHRoZSBsb2dpYyBpbiBzeXN0ZW1kJ3MKKyMgYnVpbGQgc3lzdGVtLgorcm9vdHByZWZpeCA/PSAiJHtiYXNlX3ByZWZpeH0iCityb290bGliZGlyID89ICIke2Jhc2VfbGliZGlyfSIKK3Jvb3RsaWJleGVjZGlyID0gIiR7cm9vdHByZWZpeH0vbGliIgorCitDQUNIRURfQ09ORklHVVJFVkFSU19jbGFzcy10YXJnZXQgPSAiXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS9tb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9VTU9VTlRfUEFUSD0ke2Jhc2VfYmluZGlyfS91bW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS01PRD0ke2Jhc2VfYmluZGlyfS9rbW9kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tFWEVDPSR7c2JpbmRpcn0va2V4ZWMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFDSEVDSz0ke3NiaW5kaXJ9L3F1b3RhY2hlY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24gXAorCQkJICIKKworRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcm9vdHByZWZpeD0ke3Jvb3RwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtyb290bGliZGlyfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1yb290aG9tZWRpcj0ke1JPT1RfSE9NRX0gXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtY29yZWR1bXAgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zcGxpdC11c3IgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXN5c3ZyY25kLXBhdGg9JHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1maXJtd2FyZS1wYXRoPS9saWIvZmlybXdhcmUgXAorICAgICAgICAgICAgICAgIgorIyB1Y2xpYmMgZG9lcyBub3QgaGF2ZSBOU1MKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1teWhvc3RuYW1lICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZXhwb3J0IE5NPSIke0hPU1RfUFJFRklYfWdjYy1ubSIKKwlleHBvcnQgQVI9IiR7SE9TVF9QUkVGSVh9Z2NjLWFyIgorCWV4cG9ydCBSQU5MSUI9IiR7SE9TVF9QUkVGSVh9Z2NjLXJhbmxpYiIKKwlleHBvcnQgS01PRD0iJHtiYXNlX2JpbmRpcn0va21vZCIKKwlpZiBbIC1kICR7U30vdW5pdHMucHJlX3NlZCBdIDsgdGhlbgorCQljcCAtciAke1N9L3VuaXRzLnByZV9zZWQgJHtTfS91bml0cworCWVsc2UKKwkJY3AgLXIgJHtTfS91bml0cyAke1N9L3VuaXRzLnByZV9zZWQKKwlmaQorCXNlZCAtaSAnL2xuIC0tcmVsYXRpdmUgLS1oZWxwL2QnICR7U30vY29uZmlndXJlLmFjCisJc2VkIC1pIC1lICdzOlwkKExOX1MpIC0tcmVsYXRpdmUgLWY6bG5yOmcnICR7U30vTWFrZWZpbGUuYW0KKwlzZWQgLWkgLWUgJ3M6XCQoTE5fUykgLS1yZWxhdGl2ZTpsbnI6ZycgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfQorCSMgUHJvdmlkZWQgYnkgYSBzZXBhcmF0ZSByZWNpcGUKKwlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkqIC1mCisKKwkjIFByb3ZpZGUgc3VwcG9ydCBmb3IgaW5pdHJhbWZzCisJWyAhIC1lICR7RH0vaW5pdCBdICYmIGxuIC1zICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCAke0R9L2luaXQKKwlbICEgLWUgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXSAmJiBsbiAtcyAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0vdWRldmQKKworCSMgQ3JlYXRlIG1hY2hpbmUtaWQKKwkjIDIwOjEyIDwgbWV6Y2FsZXJvPiBrb2VuOiB5b3UgaGF2ZSB0aHJlZSBvcHRpb25zOiBhKSBydW4gc3lzdGVtZC1tYWNoaW5lLWlkLXNldHVwIGF0IGluc3RhbGwgdGltZSwgYikgaGF2ZSAvIHJlYWQtb25seSBhbmQgYW4gZW1wdHkgZmlsZSB0aGVyZSAoZm9yIHN0YXRlbGVzcykgYW5kIGMpIGJvb3Qgd2l0aCAvIHdyaXRhYmxlCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbWFjaGluZS1pZAorCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8qLnJ1bGVzICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkCisJCXNlZCAtaSBzJUBVREVWREAlJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZAorCWZpCisKKwljaG93biByb290OnN5c3RlbWQtam91cm5hbCAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbG9nL2pvdXJuYWwKKworICAgICAgICAjIERlbGV0ZSBqb3VybmFsIFJFQURNRSwgYXMgbG9nIGNhbiBiZSBzeW1saW5rZWQgaW5zaWRlIHZvbGF0aWxlLgorICAgICAgICBybSAtZiAke0R9LyR7bG9jYWxzdGF0ZWRpcn0vbG9nL1JFQURNRQorCisJIyBDcmVhdGUgc3ltbGlua3MgZm9yIHN5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZ3JhcGhpY2FsLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Bvd2Vyb2ZmLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVib290LnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cworCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZ3JhcGhpY2FsLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVib290LnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Jlc2N1ZS50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisKKwkjIEVuYWJsZSBqb3VybmFsIHRvIGZvcndhcmQgbWVzc2FnZSB0byBzeXNsb2cgZGFlbW9uCisJc2VkIC1pIC1lICdzLy4qRm9yd2FyZFRvU3lzbG9nLiovRm9yd2FyZFRvU3lzbG9nPXllcy8nICR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZgorCSMgdGhpcyBmaWxlIGlzIG5lZWRlZCB0byBleGlzdCBpZiBuZXR3b3JrZCBpcyBkaXNhYmxlZCBidXQgdGltZXN5bmNkIGlzIHN0aWxsIGluIHVzZSBzaW5jZSB0aW1lc3luY2QgY2hlY2tzIGl0CisJIyBmb3IgZXhpc3RlbmNlIGVsc2UgaXQgZmFpbHMKKwlpZiBbIC1zICR7RH0ke2xpYmRpcn0vdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYgXTsgdGhlbgorCQkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICduZXR3b3JrZCcsICc6JywgJ3NlZCAtaSAtZSAiXCRhZCAvcnVuL3N5c3RlbWQvbmV0aWYvbGlua3MgMDc1NSByb290IHJvb3QgLSIgJHtEfSR7bGliZGlyfS90bXBmaWxlcy5kL3N5c3RlbWQuY29uZicsIGQpfQorCWZpCisJaW5zdGFsbCAtRG0gMDc1NSAke1N9L3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04gJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW1kLXN5c3YtaW5zdGFsbAorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKyAgICAgICBjcCAtcmYgJHtTfS90ZXN0LyogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorICAgICAgIGluc3RhbGwgLW0gMDc1NSAgJHtCfS90ZXN0LXVkZXYgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS9idWlsZC1hdXgKKyAgICAgICBjcCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAke0R9JHtQVEVTVF9QQVRIfS9idWlsZC1hdXgvCisgICAgICAgY3AgLXJmICR7Qn0vcnVsZXMgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIyBUaGlzIGRpcmVjdG9yeSBuZWVkcyB0byBiZSB0aGVyZSBmb3IgdWRldi10ZXN0LnBsIHRvIHdvcmsuCisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3VkZXYvcnVsZXMuZAorICAgICAgIGNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgY3AgJHtTfS90ZXN0L3N5cy50YXIueHogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorICAgICAgIHNlZCAtaSAncy8idHJlZSIvImxzIi8nICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvdWRldi10ZXN0LnBsCisgICAgICAgc2VkIC1pICdzIyR7U30jJHtQVEVTVF9QQVRIfSNnJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorICAgICAgIHNlZCAtaSAncyMke0J9IyR7UFRFU1RfUEFUSH0jZycgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCl7CisgICAgc3lzdGVtZGxpYmRpciA9IGQuZ2V0VmFyKCJyb290bGliZGlyIiwgVHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBzeXN0ZW1kbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ1N5c3RlbWQgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCit9CitQQUNLQUdFU19EWU5BTUlDICs9ICJebGliKHVkZXZ8c3lzdGVtZCkuKiIKKworUEFDS0FHRVMgPSsgIiR7UE59LWd1aSAke1BOfS12Y29uc29sZS1zZXR1cCAke1BOfS1pbml0cmFtZnMgJHtQTn0tYW5hbHl6ZSAke1BOfS1rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgJHtQTn0tcnBtLW1hY3JvcyAke1BOfS1iaW5mbXQgJHtQTn0tcGFtICR7UE59LXpzaCAke1BOfS14b3JnLXhpbml0cmMiCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tYmluZm10IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWJpbmZtdCA9ICJzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSArPSAiLS1zeXN0ZW0gc3lzdGVtZC1qb3VybmFsLWdhdGV3YXk7IC0tc3lzdGVtIHN5c3RlbWQtdGltZXN5bmMiCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBsb2NrOyAtciBzeXN0ZW1kLWpvdXJuYWwiCisKK0ZJTEVTXyR7UE59LWFuYWx5emUgPSAiJHtiaW5kaXJ9L3N5c3RlbWQtYW5hbHl6ZSIKKworRklMRVNfJHtQTn0taW5pdHJhbWZzID0gIi9pbml0IgorUkRFUEVORFNfJHtQTn0taW5pdHJhbWZzID0gIiR7UE59IgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAicGVybCBweXRob24gYmFzaCIKK0ZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmRpcn0vdWRldi9ydWxlcy5kIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9zeXN0ZW1kL3B0ZXN0Ly5kZWJ1ZyIKKworRklMRVNfJHtQTn0tZ3VpID0gIiR7YmluZGlyfS9zeXN0ZW1hZG0iCisKK0ZJTEVTXyR7UE59LXZjb25zb2xlLXNldHVwID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC12Y29uc29sZS1zZXR1cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2luaXQudGFyZ2V0LndhbnRzL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAuc2VydmljZSIKKworUkRFUEVORFNfJHtQTn0ta2VybmVsLWluc3RhbGwgKz0gImJhc2giCitGSUxFU18ke1BOfS1rZXJuZWwtaW5zdGFsbCA9ICIke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9rZXJuZWwvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9rZXJuZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1ycG0tbWFjcm9zID0gIiR7ZXhlY19wcmVmaXh9L2xpYi9ycG0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0teG9yZy14aW5pdHJjID0gIiR7c3lzY29uZmRpcn0vWDExL3hpbml0L3hpbml0cmMuZC8qIgorCitGSUxFU18ke1BOfS16c2ggPSAiJHtkYXRhZGlyfS96c2gvc2l0ZS1mdW5jdGlvbnMiCisKK0ZJTEVTXyR7UE59LWJpbmZtdCA9ICIke3N5c2NvbmZkaXJ9L2JpbmZtdC5kLyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL2JpbmZtdC5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtYmluZm10IFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLiogXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC1iaW5mbXQuc2VydmljZSIKK1JSRUNPTU1FTkRTXyR7UE59LWJpbmZtdCA9ICJrZXJuZWwtbW9kdWxlLWJpbmZtdC1taXNjIgorCitSUkVDT01NRU5EU18ke1BOfS12Y29uc29sZS1zZXR1cCA9ICJrYmQga2JkLWNvbnNvbGVmb250cyBrYmQta2V5bWFwcyIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzdGVtZC9qb3VybmFsZC5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvbG9naW5kLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0uY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3VzZXIuY29uZiIKKworRklMRVNfJHtQTn0gPSAiICR7YmFzZV9iaW5kaXJ9LyogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdC0xIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9mYWN0b3J5IFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kYnVzLTEvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3BhbS5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXNjdGwuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0veGRnLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvUkVBRE1FIFwKKyAgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kLyogXAorICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS8qIFwKKyAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibnNzXyogXAorICAgICAgICAgICAgICAgIC9jZ3JvdXAgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9zeXN0ZW1kKiBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2J1c2N0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2xvY2FsZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2hvc3RuYW1lY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vdGltZWRhdGVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9ib290Y3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0va2VybmVsLWluc3RhbGwgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi90bXBmaWxlcy5kLyouY29uZiBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3RlbWQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9tb2R1bGVzLWxvYWQuZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c2N0bC5kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzdXNlcnMuZCBcCisgICAgICAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzAtdWFjY2Vzcy5ydWxlcyBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzEtc2VhdC5ydWxlcyBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvNzMtc2VhdC1sYXRlLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC85OS1zeXN0ZW1kLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke3Jvb3RsaWJkaXJ9Ly5kZWJ1ZyAke3N5c3RlbWRfdW5pdGRpcn0vLmRlYnVnICR7c3lzdGVtZF91bml0ZGlyfS8qLy5kZWJ1ZyAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWcvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLmxhICR7ZGF0YWRpcn0vZGJ1cy0xL2ludGVyZmFjZXMvICR7c3lzY29uZmRpcn0vcnBtL21hY3Jvcy5zeXN0ZW1kIgorCitSREVQRU5EU18ke1BOfSArPSAia21vZCBkYnVzIHV0aWwtbGludXgtbW91bnQgdWRldiAoPSAke0VYVEVORFBLR1Z9KSIKK1JERVBFTkRTXyR7UE59ICs9ICJ2b2xhdGlsZS1iaW5kcyB1cGRhdGUtcmMuZCIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gInN5c3RlbWQtc2VyaWFsZ2V0dHkgc3lzdGVtZC12Y29uc29sZS1zZXR1cCBcCisgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtZC1jb21wYXQtdW5pdHMgdWRldi1od2RiIFwKKyAgICAgICAgICAgICAgICAgICAgICB1dGlsLWxpbnV4LWFnZXR0eSAgdXRpbC1saW51eC1mc2NrIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtYXV0b2ZzNCBrZXJuZWwtbW9kdWxlLXVuaXgga2VybmVsLW1vZHVsZS1pcHY2IFwKKyAgICAgICAgICAgICAgICAgICAgICBvcy1yZWxlYXNlIFwKKyIKKworUEFDS0FHRVMgPSsgInVkZXYtZGJnIHVkZXYgdWRldi1od2RiIgorCitGSUxFU191ZGV2LWRiZyArPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1ZyIKKworUlBST1ZJREVTX3VkZXYgPSAiaG90cGx1ZyIKKworUkRFUEVORFNfdWRldi1od2RiICs9ICJ1ZGV2IgorCitGSUxFU191ZGV2ICs9ICIke2Jhc2Vfc2JpbmRpcn0vdWRldmQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYWNjZWxlcm9tZXRlciBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2F0YV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2Nkcm9tX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY29sbGVjdCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2ZpbmRrZXlib2FyZHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvbXRkX3Byb2JlIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvc2NzaV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3Y0bF9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleW1hcHMgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGV2IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQgXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qdWRldiogXAorICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLndhbnRzLyp1ZGV2KiBcCisgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS91ZGV2YWRtIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL3VkZXZhZG0gXAorICAgICAgICAgICAgICAiCisKK0ZJTEVTX3VkZXYtaHdkYiA9ICIke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2h3ZGIuZCIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IgorSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAic3lzdGVtZC11ZGV2ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDMgUyAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCisjIFRPRE86CisjIHUtYSBmb3IgcnVubGV2ZWwgYW5kIHRlbGluaXQKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBoYWx0IHJlYm9vdCBzaHV0ZG93biBwb3dlcm9mZiBydW5sZXZlbCIKKworQUxURVJOQVRJVkVfVEFSR0VUW2luaXRdID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtoYWx0XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCitBTFRFUk5BVElWRV9QUklPUklUWVtoYWx0XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcmVib290XSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcmVib290XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbc2h1dGRvd25dID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbc2h1dGRvd25dID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcm9mZl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCitBTFRFUk5BVElWRV9QUklPUklUWVtwb3dlcm9mZl0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J1bmxldmVsXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3J1bmxldmVsXSA/PSAiMzAwIgorCitwa2dfcG9zdGluc3RfdWRldi1od2RiICgpIHsKKwlpZiB0ZXN0IC1uICIkRCI7IHRoZW4KKwkJJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2Jhc2VfYmluZGlyfS91ZGV2YWRtJyl9IGh3ZGIgLS11cGRhdGUgXAorCQkJLS1yb290ICRECisJZWxzZQorCQl1ZGV2YWRtIGh3ZGIgLS11cGRhdGUKKwlmaQorfQorCitwa2dfcHJlcm1fdWRldi1od2RiICgpIHsKKwlpZiB0ZXN0IC1uICIkRCI7IHRoZW4KKwkJZXhpdCAxCisJZmkKKworCXJtIC1mICR7c3lzY29uZmRpcn0vdWRldi9od2RiLmJpbgorfQorCisjIEFzIHRoaXMgcmVjaXBlIGJ1aWxkcyB1ZGV2LCByZXNwZWN0IHN5c3RlbWQgYmVpbmcgaW4gRElTVFJPX0ZFQVRVUkVTIHNvCisjIHRoYXQgd2UgZG9uJ3QgYnVpbGQgYm90aCB1ZGV2IGFuZCBzeXN0ZW1kIGluIHdvcmxkIGJ1aWxkcy4KK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInc3lzdGVtZCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2NyeXB0LWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM0MjkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2NyeXB0LWxpYi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKyMgVGhlIHNyYyBNYWtlZmlsZSB3YXMgY2hlY2tpbmcgZm9yIGxpYmNyeXB0LmEgb24gdGhlIGhvc3QsIG5vdCBpbiB0aGUKKyMgYnVpbGQgZW52aXJvbm1lbnQuICBUaGlzIHBhdGNoIGNoZWNrcyBmb3IgJExDUllQVCBpbiB0aGUgZW52aXJvbm1lbnQKKyMgYW5kIHVzZXMgaXQgaWYgaXQncyB0aGVyZS4KKyMgLSBqZGlrZUBsaW51eC5pbnRlbC5jb20KKworSW5kZXg6IHN5c3Zpbml0LTIuODhkc2Yvc3JjL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzdmluaXQtMi44OGRzZi5vcmlnL3NyYy9NYWtlZmlsZQorKysrIHN5c3Zpbml0LTIuODhkc2Yvc3JjL01ha2VmaWxlCitAQCAtODUsOSArODUsMTMgQEAgZWxzZQorIGVuZGlmCisgCisgIyBBZGRpdGlvbmFsIGxpYnMgZm9yIEdOVSBsaWJjLgorK2lmbmVxICgkKExDUllQVCksKQorKyAgU1VMT0dJTkxJQlMJKz0gJChMQ1JZUFQpCisrZWxzZQorIGlmbmVxICgkKHdpbGRjYXJkIC91c3IvbGliKi9saWJjcnlwdC5hKSwpCisgICBTVUxPR0lOTElCUwkrPSAtbGNyeXB0CisgZW5kaWYKKytlbmRpZgorIAorIGFsbDoJCSQoQklOKSAkKFNCSU4pICQoVVNSQklOKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQyMjVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUKK2luZGV4IGUyYjgwMjguLjNlMTFlOTIgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUKKysrKyBiL3NyYy9NYWtlZmlsZQorQEAgLTY1LDcgKzY1LDE0IEBAIGVsc2UKKyAgIElOU1RBTExfREFUQQk9IGluc3RhbGwgLW0gNjQ0CisgZW5kaWYKKyBJTlNUQUxMX0RJUgk9IGluc3RhbGwgLW0gNzU1IC1kCistTUFORElSCQk9IC91c3Ivc2hhcmUvbWFuCisrCisrUk9PVCAgICAgICAgID89CisrYmFzZV9iaW5kaXIgID89IC9iaW4KKytiYXNlX3NiaW5kaXIgPz0gL3NiaW4KKytiaW5kaXIgICAgICAgPz0gL3Vzci9iaW4KKytzeXNjb25mZGlyICAgPz0gL2V0YworK2luY2x1ZGVkaXIgICA/PSAvdXNyL2luY2x1ZGUKKyttYW5kaXIgICAgICAgPz0gL3Vzci9zaGFyZS9tYW4KKyAKKyBpZmVxICgkKFdJVEhfU0VMSU5VWCkseWVzKQorICAgU0VMSU5VWF9ERUYJPSAgLURXSVRIX1NFTElOVVgKK0BAIC0xMzgsMzkgKzE0NSwzOSBAQCBjbG9iYmVyOgljbGVhbm9ianMKKyBkaXN0Y2xlYW46CWNsb2JiZXIKKyAKKyBpbnN0YWxsOgorLQkJJChJTlNUQUxMX0RJUikgJChST09UKS9iaW4vICQoUk9PVCkvc2Jpbi8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkvdXNyL2Jpbi8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKGJhc2VfYmluZGlyKS8gJChST09UKSQoYmFzZV9zYmluZGlyKS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKGJpbmRpcikvCisgCQlmb3IgaSBpbiAkKEJJTik7IGRvIFwKKy0JCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkvYmluLyA7IFwKKysJCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkkKGJhc2VfYmluZGlyKS8gOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKFNCSU4pOyBkbyBcCistCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpL3NiaW4vIDsgXAorKwkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKSQoYmFzZV9zYmluZGlyKS8gOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKFVTUkJJTik7IGRvIFwKKy0JCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkvdXNyL2Jpbi8gOyBcCisrCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpJChiaW5kaXIpLyA7IFwKKyAJCWRvbmUKKy0JCSMgJChJTlNUQUxMX0RJUikgJChST09UKS9ldGMvCistCQkjICQoSU5TVEFMTF9FWEVDKSBpbml0c2NyaXB0LnNhbXBsZSAkKFJPT1QpL2V0Yy8KKy0JCWxuIC1zZiBoYWx0ICQoUk9PVCkvc2Jpbi9yZWJvb3QKKy0JCWxuIC1zZiBoYWx0ICQoUk9PVCkvc2Jpbi9wb3dlcm9mZgorLQkJbG4gLXNmIGluaXQgJChST09UKS9zYmluL3RlbGluaXQKKy0JCWxuIC1zZiAvc2Jpbi9raWxsYWxsNSAkKFJPT1QpL2Jpbi9waWRvZgorLQkJaWYgWyAhIC1mICQoUk9PVCkvdXNyL2Jpbi9sYXN0YiBdOyB0aGVuIFwKKy0JCQlsbiAtc2YgbGFzdCAkKFJPT1QpL3Vzci9iaW4vbGFzdGI7IFwKKysJCSMgJChJTlNUQUxMX0RJUikgJChST09UKSQoc3lzY29uZmRpcikvCisrCQkjICQoSU5TVEFMTF9FWEVDKSBpbml0c2NyaXB0LnNhbXBsZSAkKFJPT1QpJChzeXNjb25mZGlyKS8KKysJCWxuIC1zZiBoYWx0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvcmVib290CisrCQlsbiAtc2YgaGFsdCAkKFJPT1QpJChiYXNlX3NiaW5kaXIpL3Bvd2Vyb2ZmCisrCQlsbiAtc2YgaW5pdCAkKFJPT1QpJChiYXNlX3NiaW5kaXIpL3RlbGluaXQKKysJCWxuIC1zZiAkKGJhc2Vfc2JpbmRpcikva2lsbGFsbDUgJChST09UKSQoYmFzZV9iaW5kaXIpL3BpZG9mCisrCQlpZiBbICEgLWYgJChST09UKSQoYmluZGlyKS9sYXN0YiBdOyB0aGVuIFwKKysJCQlsbiAtc2YgbGFzdCAkKFJPT1QpJChiaW5kaXIpL2xhc3RiOyBcCisgCQlmaQorLQkJJChJTlNUQUxMX0RJUikgJChST09UKS91c3IvaW5jbHVkZS8KKy0JCSQoSU5TVEFMTF9EQVRBKSBpbml0cmVxLmggJChST09UKS91c3IvaW5jbHVkZS8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKE1BTkRJUikvbWFuMS8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKE1BTkRJUikvbWFuNS8KKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKE1BTkRJUikvbWFuOC8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKGluY2x1ZGVkaXIpLworKwkJJChJTlNUQUxMX0RBVEEpIGluaXRyZXEuaCAkKFJPT1QpJChpbmNsdWRlZGlyKS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKG1hbmRpcikvbWFuMS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKG1hbmRpcikvbWFuNS8KKysJCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKG1hbmRpcikvbWFuOC8KKyAJCWZvciBpIGluICQoTUFOMSk7IGRvIFwKKy0JCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChNQU5ESVIpL21hbjEvOyBcCisrCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQobWFuZGlyKS9tYW4xLzsgXAorIAkJZG9uZQorIAkJZm9yIGkgaW4gJChNQU41KTsgZG8gXAorLQkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKE1BTkRJUikvbWFuNS87IFwKKysJCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChtYW5kaXIpL21hbjUvOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKE1BTjgpOyBkbyBcCistCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQoTUFORElSKS9tYW44LzsgXAorKwkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKG1hbmRpcikvbWFuOC87IFwKKyAJCWRvbmUKKyBpZmVxICgkKFJPT1QpLCkKKyAJCSMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvcGlkb2YtYWRkLW0tb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWRmZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvcGlkb2YtYWRkLW0tb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTg5IEBACitwaWRvZjogYWRkIC1tIG9wdGlvbgorCitXaGVuIHVzZWQgd2l0aCAtbywgd2lsbCBhbHNvIG9taXQgYW55IHByb2Nlc3NlcyB0aGF0IGhhdmUgdGhlIHNhbWUKK2FyZ3ZbMF0gYW5kIGFyZ3ZbMV0gYXMgYW55IGV4cGxpY2l0bHkgb21pdHRlZCBwcm9jZXNzIGlkcy4gVGhpcyBjYW4gYmUKK3VzZWQgdG8gYXZvaWQgbXVsdGlwbGUgc2hlbGwgc2NyaXB0cyBjb25jdXJyZW50bHkgY2FsbGluZyBwaWRvZiByZXR1cm5pbmcKK2VhY2ggb3RoZXIncyBwaWRzLgorCitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTg4Mzg1NgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CitJbXBvcnRlZCBwYXRjaCBmcm9tOiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9NjU4MTY2CisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1hbi9waWRvZi44ICAgIHwgIDYgKysrKysrCisgc3JjL2tpbGxhbGw1LmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWFuL3BpZG9mLjggYi9tYW4vcGlkb2YuOAorLS0tIGEvbWFuL3BpZG9mLjgKKysrKyBiL21hbi9waWRvZi44CitAQCAtMjQsNiArMjQsNyBAQCBwaWRvZiAtLSBmaW5kIHRoZSBwcm9jZXNzIElEIG9mIGEgcnVubmluZyBwcm9ncmFtLgorIC5SQiBbIFwtYyBdCisgLlJCIFsgXC1uIF0KKyAuUkIgWyBcLXggXQorKy5SQiBbIFwtbSBdCisgLlJCIFsgXC1vCisgLklSIG9taXRwaWRbLG9taXRwaWQuLl0gXQorIC5SQiBbIFwtbworQEAgLTYzLDYgKzY0LDExIEBAIHNoZWxscyBydW5uaW5nIHRoZSBuYW1lZCBzY3JpcHRzLgorIFRlbGxzIFxmSXBpZG9mXGZQIHRvIG9taXQgcHJvY2Vzc2VzIHdpdGggdGhhdCBwcm9jZXNzIGlkLiBUaGUgc3BlY2lhbAorIHBpZCBcZkIlUFBJRFxmUCBjYW4gYmUgdXNlZCB0byBuYW1lIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUgXGZJcGlkb2ZcZlAKKyBwcm9ncmFtLCBpbiBvdGhlciB3b3JkcyB0aGUgY2FsbGluZyBzaGVsbCBvciBzaGVsbCBzY3JpcHQuCisrLklQIC1tCisrV2hlbiB1c2VkIHdpdGggLW8sIHdpbGwgYWxzbyBvbWl0IGFueSBwcm9jZXNzZXMgdGhhdCBoYXZlIHRoZSBzYW1lCisrYXJndlswXSBhbmQgYXJndlsxXSBhcyBhbnkgZXhwbGljaXRseSBvbWl0dGVkIHByb2Nlc3MgaWRzLiBUaGlzIGNhbiBiZQorK3VzZWQgdG8gYXZvaWQgbXVsdGlwbGUgc2hlbGwgc2NyaXB0cyBjb25jdXJyZW50bHkgY2FsbGluZyBwaWRvZiByZXR1cm5pbmcKKytlYWNoIG90aGVyJ3MgcGlkcy4KKyAuU0ggIkVYSVQgU1RBVFVTIgorIC5UUAorIC5CIDAKK2RpZmYgLS1naXQgYS9zcmMva2lsbGFsbDUuYyBiL3NyYy9raWxsYWxsNS5jCitpbmRleCA1OTM3ZDk4Li5lNzM4ODVlIDEwMDY0NAorLS0tIGEvc3JjL2tpbGxhbGw1LmMKKysrKyBiL3NyYy9raWxsYWxsNS5jCitAQCAtMTE4LDYgKzExOCw3IEBAIHR5cGVkZWYgc3RydWN0IF9zX25mcworIAorIC8qIExpc3Qgb2YgcHJvY2Vzc2VzLiAqLworIFBST0MgKnBsaXN0OworK1BST0MgKm9saXN0OworIAorIC8qIExpc3Qgb2YgcHJvY2Vzc2VzIHRvIG9taXQuICovCisgT01JVCAqb21pdDsKK0BAIC0zNDUsNiArMzQ2LDIwIEBAIHN0YXRpYyB2b2lkIGNsZWFyX21udCh2b2lkKQorIAl9CisgfQorIAorK3N0YXRpYyB2b2lkIGNsZWFyX29taXQodm9pZCkKKyt7CisrCU9NSVQgKm87CisrCVBST0MgKnA7CisrCWZvciAobyA9IG9taXQ7IG87IG8gPSBvbWl0KSB7CisrCQlvbWl0ID0gb21pdC0+bmV4dDsKKysJCWZyZWUobyk7CisrCX0KKysJZm9yIChwID0gb2xpc3Q7IHA7IHAgPSBvbGlzdCkgeworKwkJb2xpc3QgPSBvbGlzdC0+bmV4dDsKKysJCWZyZWUocCk7CisrCX0KKyt9CisrCisgLyoKKyAgKiAgICAgQ2hlY2sgaWYgcGF0aCBpcyBpYSBzaGFkb3cgb2ZmIGEgTkZTIHBhcnRpdGlvbi4KKyAgKi8KK0BAIC00NTIsNiArNDY3LDcgQEAgaW50IHJlYWRwcm9jKGludCBkb19zdGF0KQorIAlESVIJCSpkaXI7CisgCUZJTEUJCSpmcDsKKyAJUFJPQwkJKnAsICpuOworKwlPTUlUCQkqbywgKm07CisgCXN0cnVjdCBkaXJlbnQJKmQ7CisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQlwYXRoW1BBVEhfTUFYKzFdOworQEAgLTYyNCw2ICs2NDAsMTcgQEAgaW50IHJlYWRwcm9jKGludCBkb19zdGF0KQorIAkJcC0+bmV4dCA9IHBsaXN0OworIAkJcGxpc3QgPSBwOworIAkJcC0+cGlkID0gcGlkOworKwkJLyogQ291bGQgYmUgc21hcnRlciwgYnV0IGl0J3MgYSBzbWFsbCBsaXN0LiAqLworKwkJbSA9IG9taXQ7CisrCQlmb3IgKG8gPSBvbWl0OyBtOyBvID0gbSkgeworKwkJCW0gPSBvLT5uZXh0OworKwkJCWlmIChvLT5waWQgPT0gcC0+cGlkKSB7CisrCQkJCW4gPSAoUFJPQyopeG1hbGxvYyhzaXplb2YoUFJPQykpOworKwkJCQkqbiA9ICpwOworKwkJCQluLT5uZXh0ID0gb2xpc3Q7CisrCQkJCW9saXN0ID0gbjsKKysJCQl9CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGlyKTsKKyAKK0BAIC04MTMsNiArODQwLDI2IEBAIFBJRFFfSEVBRCAqcGlkb2YoY2hhciAqcHJvZykKKyAJcmV0dXJuIHE7CisgfQorIAorK2ludCBtYXRjaGVzKFBST0MgKm8sIFBST0MgKnApCisreworKwlpbnQgcmV0ID0gMDsKKysJY2hhciAqb2FyZ3YxLCAqcGFyZ3YxOworKwlpZiAoKG8tPmFyZ3YwICYmIHAtPmFyZ3YwICYmICFzdHJjbXAoby0+YXJndjAscC0+YXJndjApKSkgeworKwkJaWYgKG8tPmFyZ3YxICYmIHAtPmFyZ3YxKSB7CisrCQkJaWYgKChvYXJndjEgPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lKG8tPmFyZ3YxKSkgPT0gTlVMTCkKKysJCQkJb2FyZ3YxID0gc3RyZHVwKG8tPmFyZ3YxKTsKKysJCQlpZiAoKHBhcmd2MSA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUocC0+YXJndjEpKSA9PSBOVUxMKQorKwkJCQlwYXJndjEgPSBzdHJkdXAocC0+YXJndjEpOworKwkJCWlmICghIHN0cmNtcChvYXJndjEsIHBhcmd2MSkpIHsKKysJCQkJcmV0ID0gMTsKKysJCQl9CisrCQkJZnJlZShvYXJndjEpOworKwkJCWZyZWUocGFyZ3YxKTsKKysJCX0KKysJfQorKwlyZXR1cm4gcmV0OworK30KKysKKyAvKiBHaXZlIHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuICovCisgdm9pZCB1c2FnZSh2b2lkKQorIHsKK0BAIC04NDUsNiArODkyLDcgQEAgdm9pZCBuc3lzbG9nKGludCBwcmksIGNoYXIgKmZtdCwgLi4uKQorICNkZWZpbmUgUElET0ZfU0lOR0xFCTB4MDEKKyAjZGVmaW5lIFBJRE9GX09NSVQJMHgwMgorICNkZWZpbmUgUElET0ZfTkVURlMJMHgwNAorKyNkZWZpbmUgUElET0ZfT01JVF9PTUlUX01BVENIRVMJMHgwOAorIAorIC8qCisgICoJUGlkb2YgZnVuY3Rpb25hbGl0eS4KK0BAIC04NjEsNiArOTA5LDcgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlzdHJ1Y3Qgc3RhdAlzdDsKKyAJY2hhcgkJdG1wWzUxMl07CisgCisrCW9saXN0ID0gKFBST0MqKTA7CisgCW9taXQgPSAoT01JVCopMDsKKyAJbmxpc3QgPSAoTkZTKikwOworIAlvcHRlcnIgPSAwOworQEAgLTg2OCw3ICs5MTcsNyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWlmICgodG9rZW4gPSBnZXRlbnYoIlBJRE9GX05FVEZTIikpICYmIChzdHJjbXAodG9rZW4sIm5vIikgIT0gMCkpCisgCQlmbGFncyB8PSBQSURPRl9ORVRGUzsKKyAKKy0Jd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYyxhcmd2LCJoY286c3huIikpICE9IEVPRikgc3dpdGNoIChvcHQpIHsKKysJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYyxhcmd2LCJoY21vOnN4biIpKSAhPSBFT0YpIHN3aXRjaCAob3B0KSB7CisgCQljYXNlICc/JzoKKyAJCQluc3lzbG9nKExPR19FUlIsImludmFsaWQgb3B0aW9ucyBvbiBjb21tYW5kIGxpbmUhXG4iKTsKKyAJCQljbG9zZWxvZygpOworQEAgLTkwNyw2ICs5NTYsOSBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQljYXNlICd4JzoKKyAJCQlzY3JpcHRzX3RvbysrOworIAkJCWJyZWFrOworKwkJY2FzZSAnbSc6CisrCQkJZmxhZ3MgfD0gUElET0ZfT01JVF9PTUlUX01BVENIRVM7CisrCQkJYnJlYWs7CisgCQljYXNlICduJzoKKyAJCQlmbGFncyB8PSBQSURPRl9ORVRGUzsKKyAJCQlicmVhazsKK0BAIC05MzgsMTAgKzk5MCwxMyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJcGlkX3Qgc3BpZCA9IDA7CisgCQkJd2hpbGUgKChwID0gZ2V0X25leHRfZnJvbV9waWRfcShxKSkpIHsKKyAJCQkJaWYgKChmbGFncyAmIFBJRE9GX09NSVQpICYmIG9taXQpIHsKKy0JCQkJCU9NSVQgKiBvcHRyOworLQkJCQkJZm9yIChvcHRyID0gb21pdDsgb3B0cjsgb3B0ciA9IG9wdHItPm5leHQpIHsKKysJCQkJCVBST0MgKiBvcHRyOworKwkJCQkJZm9yIChvcHRyID0gb2xpc3Q7IG9wdHI7IG9wdHIgPSBvcHRyLT5uZXh0KSB7CisgCQkJCQkJaWYgKG9wdHItPnBpZCA9PSBwLT5waWQpCisgCQkJCQkJCWJyZWFrOworKwkJCQkJCWlmIChmbGFncyAmIFBJRE9GX09NSVRfT01JVF9NQVRDSEVTKQorKwkJCQkJCQlpZiAobWF0Y2hlcyhvcHRyLCBwKSkKKysJCQkJCQkJCWJyZWFrOworIAkJCQkJfQorIAorIAkJCQkJLyoKK0BAIC05NzcsNiArMTAzMiw3IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJaWYgKCFmaXJzdCkKKyAJCXByaW50ZigiXG4iKTsKKyAKKysJY2xlYXJfb21pdCgpOworIAljbGVhcl9tbnQoKTsKKyAKKyAJY2xvc2Vsb2coKTsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYmJkZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYgpAQCAtMCwwICsxLDMwIEBACisjIC9ldGMvaW5pdHRhYjogaW5pdCg4KSBjb25maWd1cmF0aW9uLgorIyAkSWQ6IGluaXR0YWIsdiAxLjkxIDIwMDIvMDEvMjUgMTM6MzU6MjEgbWlxdWVscyBFeHAgJAorCisjIFRoZSBkZWZhdWx0IHJ1bmxldmVsLgoraWQ6NTppbml0ZGVmYXVsdDoKKworIyBCb290LXRpbWUgc3lzdGVtIGNvbmZpZ3VyYXRpb24vaW5pdGlhbGl6YXRpb24gc2NyaXB0LgorIyBUaGlzIGlzIHJ1biBmaXJzdCBleGNlcHQgd2hlbiBib290aW5nIGluIGVtZXJnZW5jeSAoLWIpIG1vZGUuCitzaTo6c3lzaW5pdDovZXRjL2luaXQuZC9yY1MKKworIyBXaGF0IHRvIGRvIGluIHNpbmdsZS11c2VyIG1vZGUuCit+fjpTOndhaXQ6L3NiaW4vc3Vsb2dpbgorCisjIC9ldGMvaW5pdC5kIGV4ZWN1dGVzIHRoZSBTIGFuZCBLIHNjcmlwdHMgdXBvbiBjaGFuZ2UKKyMgb2YgcnVubGV2ZWwuCisjCisjIFJ1bmxldmVsIDAgaXMgaGFsdC4KKyMgUnVubGV2ZWwgMSBpcyBzaW5nbGUtdXNlci4KKyMgUnVubGV2ZWxzIDItNSBhcmUgbXVsdGktdXNlci4KKyMgUnVubGV2ZWwgNiBpcyByZWJvb3QuCisKK2wwOjA6d2FpdDovZXRjL2luaXQuZC9yYyAwCitsMToxOndhaXQ6L2V0Yy9pbml0LmQvcmMgMQorbDI6Mjp3YWl0Oi9ldGMvaW5pdC5kL3JjIDIKK2wzOjM6d2FpdDovZXRjL2luaXQuZC9yYyAzCitsNDo0OndhaXQ6L2V0Yy9pbml0LmQvcmMgNAorbDU6NTp3YWl0Oi9ldGMvaW5pdC5kL3JjIDUKK2w2OjY6d2FpdDovZXRjL2luaXQuZC9yYyA2CisjIE5vcm1hbGx5IG5vdCByZWFjaGVkLCBidXQgZmFsbHRocm91Z2ggaW4gY2FzZSBvZiBlbWVyZ2VuY3kuCit6Njo2OnJlc3Bhd246L3NiaW4vc3Vsb2dpbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIxMzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIKQEAgLTAsMCArMSw4MyBAQAorU1VNTUFSWSA9ICJJbml0dGFiIGNvbmZpZ3VyYXRpb24gZm9yIFN5c1Zpbml0IgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitQUiA9ICJyMTAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXR0YWIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2luaXR0YWIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdHRhYgorCisgICAgc2V0IC14CisgICAgdG1wPSIke1NFUklBTF9DT05TT0xFU30iCisgICAgZm9yIGkgaW4gJHRtcAorICAgIGRvCisJaj1gZWNobyAke2l9IHwgc2VkIHMvXDsvXCAvZ2AKKwlsYWJlbD1gZWNobyAke2l9IHwgc2VkIC1lICdzL3R0eS8vJyAtZSAncy9eLio7Ly8nIC1lICdzLzsuKi8vJ2AKKwllY2hvICIkbGFiZWw6MTIzNDU6cmVzcGF3bjoke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkgLUwgJHtqfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdHRhYgorICAgIGRvbmUKKworICAgIGlmIFsgIiR7VVNFX1ZUfSIgPSAiMSIgXTsgdGhlbgorICAgICAgICBjYXQgPDxFT0YgPj4ke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisjICR7YmFzZV9zYmluZGlyfS9nZXR0eSBpbnZvY2F0aW9ucyBmb3IgdGhlIHJ1bmxldmVscy4KKyMKKyMgVGhlICJpZCIgZmllbGQgTVVTVCBiZSB0aGUgc2FtZSBhcyB0aGUgbGFzdAorIyBjaGFyYWN0ZXJzIG9mIHRoZSBkZXZpY2UgKGFmdGVyICJ0dHkiKS4KKyMKKyMgRm9ybWF0OgorIyAgPGlkPjo8cnVubGV2ZWxzPjo8YWN0aW9uPjo8cHJvY2Vzcz4KKyMKKworRU9GCisKKyAgICAgICAgZm9yIG4gaW4gJHtTWVNWSU5JVF9FTkFCTEVEX0dFVFRZU30KKyAgICAgICAgZG8KKyAgICAgICAgICAgIGVjaG8gIiRuOjEyMzQ1OnJlc3Bhd246JHtiYXNlX3NiaW5kaXJ9L2dldHR5IDM4NDAwIHR0eSRuIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisgICAgICAgIGRvbmUKKyAgICAgICAgZWNobyAiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisgICAgZmkKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyMgcnVuIHRoaXMgb24gdGhlIHRhcmdldAoraWYgWyAieCREIiA9ICJ4IiBdICYmIFsgLWUgL3Byb2MvY29uc29sZXMgXTsgdGhlbgorCXRtcD0iJHtTRVJJQUxfQ09OU09MRVNfQ0hFQ0t9IgorCWZvciBpIGluICR0bXAKKwlkbworCQlqPWBlY2hvICR7aX0gfCBzZWQgcy9eLipcOy8vZ2AKKwkJaWYgWyAteiAiYGdyZXAgJHtqfSAvcHJvYy9jb25zb2xlc2AiIF07IHRoZW4KKwkJCXNlZCAtaSAvXi4qJHtqfSQvZCAvZXRjL2luaXR0YWIKKwkJZmkKKwlkb25lCisJa2lsbCAtSFVQIDEKK2Vsc2UKKwlpZiBbICIke1NFUklBTF9DT05TT0xFU19DSEVDS30iID0gIiIgXTsgdGhlbgorCQlleGl0IDAKKwllbHNlCisJCWV4aXQgMQorCWZpCitmaQorfQorCisjIFVTRV9WVCBhbmQgU0VSSUFMX0NPTlNPTEVTIGFyZSBnZW5lcmFsbHkgZGVmaW5lZCBieSB0aGUgTUFDSElORSAuY29uZi4KKyMgU2V0IFBBQ0tBR0VfQVJDSCBhcHByb3ByaWF0ZWx5LgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9pbml0dGFiIgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaW5pdHRhYiIKKworVVNFX1ZUID89ICIxIgorU1lTVklOSVRfRU5BQkxFRF9HRVRUWVMgPz0gIjEiCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNWMxNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIDM2YWM5N2JmZTUxNzk3NDU4NDQyYTYwMzUyMTlhNTA0YTQyZTcwM2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMSBBdWcgMjAxNSAxMDo1Njo0MCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBUaGlzIGZpeGVzIGFuIGlzc3VlIHRoYXQgY2xhbmcgcmVwb3J0cyBhYm91dCBtdXRsaXBsZSBvdXRwdXQKKyBmaWxlcworCitJc3N1ZSBpcyB0aGF0IHdlIGFyZSBwYXNzaW5nIC5oIGZpbGUgdG8gbGluayBzdGVwIGFzIHNlZW4gYmVsb3cuCisKK3wgYXJtLW9lLWxpbnV4LWdudWVhYmktY2xhbmcgIC1tYXJjaD1hcm12Ny1hIC1tdGh1bWIgIC1tZmxvYXQtYWJpPWhhcmQKKy1tZnB1PW5lb24tdmZwdjQgLW10dW5lPWNvcnRleC1hNyAtRF9fZXh0ZXJuX2Fsd2F5c19pbmxpbmU9aW5saW5lCistbm8taW50ZWdyYXRlZC1hcworLS1zeXNyb290PS9tbnQvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcmFzcGJlcnJ5cGkyCistV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAgaGFsdC5vIGlmZG93bi5vIGhkZG93bi5vCit1dG1wLm8gcmVib290LmggICAtbyBoYWx0Cit8IGNsYW5nLTMuNzogZXJyb3I6IGNhbm5vdCBzcGVjaWZ5IC1vIHdoZW4gZ2VuZXJhdGluZyBtdWx0aXBsZSBvdXRwdXQKK2ZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL01ha2VmaWxlIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlIGIvc3JjL01ha2VmaWxlCitpbmRleCBlNzdlZDVmLi5hNmY5ZjQwIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlCisrKysgYi9zcmMvTWFrZWZpbGUKK0BAIC0xMDMsOSArMTAzLDkgQEAgYWxsOgkJJChCSU4pICQoU0JJTikgJChVU1JCSU4pCisgaW5pdDoJCUxETElCUyArPSAkKElOSVRMSUJTKSAkKFNUQVRJQykKKyBpbml0OgkJaW5pdC5vIGluaXRfdXRtcC5vCisgCistaGFsdDoJCWhhbHQubyBpZmRvd24ubyBoZGRvd24ubyB1dG1wLm8gcmVib290LmgKKytoYWx0OgkJaGFsdC5vIGlmZG93bi5vIGhkZG93bi5vIHV0bXAubworIAorLWxhc3Q6CQlsYXN0Lm8gb2xkdXRtcC5oCisrbGFzdDoJCWxhc3QubworIAorIG1lc2c6CQltZXNnLm8KKyAKK0BAIC0xMjAsNyArMTIwLDcgQEAgc3Vsb2dpbjoJc3Vsb2dpbi5vCisgCisgd2FsbDoJCWRvd2FsbC5vIHdhbGwubworIAorLXNodXRkb3duOglkb3dhbGwubyBzaHV0ZG93bi5vIHV0bXAubyByZWJvb3QuaAorK3NodXRkb3duOglkb3dhbGwubyBzaHV0ZG93bi5vIHV0bXAubworIAorIGJvb3Rsb2dkOglMRExJQlMgKz0gLWx1dGlsCisgYm9vdGxvZ2Q6CWJvb3Rsb2dkLm8KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDFfYm9vdGxvZ2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4OWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDFfYm9vdGxvZ2QKQEAgLTAsMCArMSBAQAorZiByb290IHJvb3QgMDY0NCAvdmFyL2xvZy9ib290IG5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjVhYTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9ib290bG9nZC5pbml0CkBAIC0wLDAgKzEsOTggQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGJvb3Rsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMiAzIDQgNQorIyBTaG9ydC1EZXNjcmlwdGlvbjogT25lIG9mIHRoZSBmaXJzdCBzY3JpcHRzIHRvIGJlIGV4ZWN1dGVkLiBTdGFydHMgb3Igc3RvcHMKKyMgICAgICAgICAgICAgICB0aGUgYm9vdGxvZ2QgbG9nIHByb2dyYW0uIElmIHRoaXMgc2NyaXB0IGlzIGNhbGxlZCBhcworIyAgICAgICAgICAgICAgICJzdG9wLWJvb3Rsb2dkIiwgaXQgd2lsbCBzdG9wIHRoZSBkYWVtb24gaW5zdGVhZCBvZgorIyAgICAgICAgICAgICAgIHN0YXJ0aW5nIGl0IGV2ZW4gd2hlbiBjYWxsZWQgd2l0aCB0aGUgInN0YXJ0IiBhcmd1bWVudC4KKyMKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vc2Jpbi9ib290bG9nZAorTkFNRT1ib290bG9nZAorREVTQz0iQm9vdGxvZyBkYWVtb24iCisKKyMgc291cmNlIGZ1bmN0aW9uIGxpYnJhcnkKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDAKKworWyAtciAvZXRjL2RlZmF1bHQvYm9vdGxvZ2QgXSAmJiAuIC9ldGMvZGVmYXVsdC9ib290bG9nZAorCisjIyBzZXQgLWUgIyBub3QgbmVlZGVkCisKK2Nhc2UgIiRCT09UTE9HRF9FTkFCTEUiIGluCisJW05uXSopCisJCWV4aXQgMAorCQk7OworZXNhYworCitTVE9QUEVSPQorQUNUSU9OPSIkMSIKK2Nhc2UgIiQwIiBpbgorCSpzdG9wLWJvb3Rsb2cqKQorCQlTVE9QUEVSPVkKKwkJaWYgWyAiJEFDVElPTiIgPSBzdGFydCBdCisJCXRoZW4KKwkJCUFDVElPTj1zdG9wCisJCWZpCisJCTs7Citlc2FjCisKK2Nhc2UgIiRBQ1RJT04iIGluCisJc3RhcnQpCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorCQlpZiBbIC1kIC9wcm9jLzEvLiBdCisJCXRoZW4KKwkJCXVtYXNrIDAyNworCQkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IFwKKwkJCQktLWV4ZWMgJERBRU1PTiAtLSAtciAtYworCQllbHNlCisJCQkkREFFTU9OIC1yIC1jCisJCWZpCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICIkTkFNRS4iCisJCTs7CisJc3RvcCkKKwkJIyBzdG9wIG1heSBnZXQgY2FsbGVkIGR1cmluZyBib290dXAsIHNvIGxldCBpdCBob25vcgorCQkjIHJjUyBWRVJCT1NFIHNldHRpbmcKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gLW4gIlN0b3BwaW5nICRERVNDOiAiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisKKwkJaWYgWyAiJFNUT1BQRVIiIF0gJiYgWyAiJCh3aGljaCBzYXZlbG9nIDI+L2Rldi9udWxsKSIgXSAmJiBcCisJCSAgIFsgLWYgL3Zhci9sb2cvYm9vdCBdICYmIFsgLWYgL3Zhci9sb2cvYm9vdH4gXQorCQl0aGVuCisJCQljZCAvdmFyL2xvZworCQkJY2hncnAgYWRtIGJvb3QKKwkJCXNhdmVsb2cgLXAgLWMgNSBib290ID4gL2Rldi9udWxsIDI+JjEKKwkJCW12IGJvb3QuMCBib290CisJCQltdiBib290fiBib290LjAKKwkJZmkKKworCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiJE5BTUUuIgorCQk7OworCSByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwkJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgJERBRU1PTgorCQlzbGVlcCAxCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgJERBRU1PTgorCQllY2hvICIkTkFNRS4iCisJCTs7CisJc3RhdHVzKQorCQlzdGF0dXMgJERBRU1PTgorCQlleGl0ICQ/CisJCTs7CisJKikKKwkJTj0kezAjIyovfQorCQlOPSR7TiNbU0tdPz99CisJCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Y2E0MWFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yYwpAQCAtMCwwICsxLDE4MiBAQAorIyEvYmluL3NoCisjCisjIHJjCQlUaGlzIGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIHN0YXJ0aW5nL3N0b3BwaW5nCisjCQlzZXJ2aWNlcyB3aGVuIHRoZSBydW5sZXZlbCBjaGFuZ2VzLgorIworIwkJT3B0aW1pemF0aW9uIGZlYXR1cmU6CisjCQlBIHN0YXJ0dXAgc2NyaXB0IGlzIF9ub3RfIHJ1biB3aGVuIHRoZSBzZXJ2aWNlIHdhcworIwkJcnVubmluZyBpbiB0aGUgcHJldmlvdXMgcnVubGV2ZWwgYW5kIGl0IHdhc24ndCBzdG9wcGVkCisjCQlpbiB0aGUgcnVubGV2ZWwgdHJhbnNpdGlvbiAobW9zdCBEZWJpYW4gc2VydmljZXMgZG9uJ3QKKyMJCWhhdmUgSz8/IGxpbmtzIGluIHJjezEsMiwzLDQsNX0gKQorIworIyBBdXRob3I6CU1pcXVlbCB2YW4gU21vb3JlbmJ1cmcgPG1pcXVlbHNAY2lzdHJvbi5ubD4KKyMJCUJydWNlIFBlcmVucyA8QnJ1Y2VAUGl4YXIuY29tPgorIworIyBWZXJzaW9uOglAKCMpcmMgIDIuNzggIDA3LU5vdi0xOTk5ICBtaXF1ZWxzQGNpc3Ryb24ubmwKKyMKKworLiAvZXRjL2RlZmF1bHQvcmNTCitleHBvcnQgVkVSQk9TRQorCitzdGFydHVwX3Byb2dyZXNzKCkgeworICAgIHN0ZXA9JCgoJHN0ZXAgKyAkc3RlcF9jaGFuZ2UpKQorICAgIGlmIFsgIiRudW1fc3RlcHMiICE9ICIwIiBdOyB0aGVuCisgICAgICAgIHByb2dyZXNzPSQoKCgkc3RlcCAqICRwcm9ncmVzc19zaXplIC8gJG51bV9zdGVwcykgKyAkZmlyc3Rfc3RlcCkpCisgICAgZWxzZQorICAgICAgICBwcm9ncmVzcz0kcHJvZ3Jlc3Nfc2l6ZQorICAgIGZpCisgICAgI2VjaG8gIlBST0dSRVNTIGlzICRwcm9ncmVzcyAkcnVubGV2ZWwgJGZpcnN0X3N0ZXAgKyAoJHN0ZXAgb2YgJG51bV9zdGVwcykgJHN0ZXBfY2hhbmdlICRwcm9ncmVzc19zaXplIgorICAgICNpZiB0eXBlIHBzcGxhc2gtd3JpdGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIyAgICBUTVBESVI9L21udC8ucHNwbGFzaCBwc3BsYXNoLXdyaXRlICJQUk9HUkVTUyAkcHJvZ3Jlc3MiIHx8IHRydWUKKyAgICAjZmkKKyAgICBpZiBbIC1lIC9tbnQvLnBzcGxhc2gvcHNwbGFzaF9maWZvIF07IHRoZW4KKyAgICAgICAgZWNobyAiUFJPR1JFU1MgJHByb2dyZXNzIiA+IC9tbnQvLnBzcGxhc2gvcHNwbGFzaF9maWZvCisgICAgZmkKK30KKworCisjCisjIFN0YXJ0IHNjcmlwdCBvciBwcm9ncmFtLgorIworc3RhcnR1cCgpIHsKKyAgIyBIYW5kbGUgdmVyYm9zaXR5CisgIFsgIiRWRVJCT1NFIiA9IHZlcnkgXSAmJiBlY2hvICJJTklUOiBSdW5uaW5nICRALi4uIgorCisgIGNhc2UgIiQxIiBpbgorCSouc2gpCisJCSMgU291cmNlIHNoZWxsIHNjcmlwdCBmb3Igc3BlZWQuCisJCSgKKwkJCXRyYXAgLSBJTlQgUVVJVCBUU1RQCisJCQlzY3JpcHRuYW1lPSQxCisJCQlzaGlmdAorCQkJLiAkc2NyaXB0bmFtZQorCQkpCisJCTs7CisJKikKKwkJIiRAIgorCQk7OworICBlc2FjCisgIHN0YXJ0dXBfcHJvZ3Jlc3MKK30KKworICAjIElnbm9yZSBDVFJMLUMgb25seSBpbiB0aGlzIHNoZWxsLCBzbyB3ZSBjYW4gaW50ZXJydXB0IHN1YnByb2Nlc3Nlcy4KKyAgdHJhcCAiOiIgSU5UIFFVSVQgVFNUUAorCisgICMgU2V0IG9ubGNyIHRvIGF2b2lkIHN0YWlyY2FzZSBlZmZlY3QuCisgIHN0dHkgb25sY3IgMD4mMQorCisgICMgTGltaXQgc3RhY2sgc2l6ZSBmb3Igc3RhcnR1cCBzY3JpcHRzCisgIFsgIiRTVEFDS19TSVpFIiA9PSAiIiBdIHx8IHVsaW1pdCAtUyAtcyAkU1RBQ0tfU0laRQorCisgICMgTm93IGZpbmQgb3V0IHdoYXQgdGhlIGN1cnJlbnQgYW5kIHdoYXQgdGhlIHByZXZpb3VzIHJ1bmxldmVsIGFyZS4KKworICBydW5sZXZlbD0kUlVOTEVWRUwKKyAgIyBHZXQgZmlyc3QgYXJndW1lbnQuIFNldCBuZXcgcnVubGV2ZWwgdG8gdGhpcyBhcmd1bWVudC4KKyAgWyAiJDEiICE9ICIiIF0gJiYgcnVubGV2ZWw9JDEKKyAgaWYgWyAiJHJ1bmxldmVsIiA9ICIiIF0KKyAgdGhlbgorCWVjaG8gIlVzYWdlOiAkMCA8cnVubGV2ZWw+IiA+JjIKKwlleGl0IDEKKyAgZmkKKyAgcHJldmlvdXM9JFBSRVZMRVZFTAorICBbICIkcHJldmlvdXMiID0gIiIgXSAmJiBwcmV2aW91cz1OCisKKyAgZXhwb3J0IHJ1bmxldmVsIHByZXZpb3VzCisKKyAgIyBJcyB0aGVyZSBhbiByYyBkaXJlY3RvcnkgZm9yIHRoaXMgbmV3IHJ1bmxldmVsPworICBpZiBbIC1kIC9ldGMvcmMkcnVubGV2ZWwuZCBdCisgIHRoZW4KKwkjIEZpbmQgb3V0IHdoZXJlIGluIHRoZSBwcm9ncmVzcyBiYXIgdGhlIGluaXRyYW1mcyBnb3QgdG8uCisJUFJPR1JFU1NfU1RBVEU9MAorCSNpZiBbIC1mIC9kZXYvLmluaXRyYW1mcy9wcm9ncmVzc19zdGF0ZSBdOyB0aGVuCisJIyAgICAuIC9kZXYvLmluaXRyYW1mcy9wcm9ncmVzc19zdGF0ZQorCSNmaQorCisJIyBTcGxpdCB0aGUgcmVtYWluaW5nIHBvcnRpb24gb2YgdGhlIHByb2dyZXNzIGJhciBpbnRvIHRoaXJkcworCXByb2dyZXNzX3NpemU9JCgoKDEwMCAtICRQUk9HUkVTU19TVEFURSkgLyAzKSkKKworCWNhc2UgIiRydW5sZXZlbCIgaW4KKwkJMHw2KQorCQkJIyBDb3VudCBkb3duIGZyb20gLTEwMCB0byAwIGFuZCB1c2UgdGhlIGVudGlyZSBiYXIKKwkJCWZpcnN0X3N0ZXA9LTEwMAorCQkJcHJvZ3Jlc3Nfc2l6ZT0xMDAKKwkJCXN0ZXBfY2hhbmdlPTEKKwkJCTs7CisJICAgICAgICBTKQorCQkJIyBCZWdpbiB3aGVyZSB0aGUgaW5pdHJhbWZzIGxlZnQgb2ZmIGFuZCB1c2UgMi8zCisJCQkjIG9mIHRoZSByZW1haW5pbmcgc3BhY2UKKwkJCWZpcnN0X3N0ZXA9JFBST0dSRVNTX1NUQVRFCisJCQlwcm9ncmVzc19zaXplPSQoKCRwcm9ncmVzc19zaXplICogMikpCisJCQlzdGVwX2NoYW5nZT0xCisJCQk7OworCQkqKQorCQkJIyBCZWdpbiB3aGVyZSByY1MgbGVmdCBvZmYgYW5kIHVzZSB0aGUgZmluYWwgMS8zIG9mCisJCQkjIHRoZSBzcGFjZSAoYnkgbGVhdmluZyBwcm9ncmVzc19zaXplIHVuY2hhbmdlZCkKKwkJCWZpcnN0X3N0ZXA9JCgoJHByb2dyZXNzX3NpemUgKiAyICsgJFBST0dSRVNTX1NUQVRFKSkKKwkJCXN0ZXBfY2hhbmdlPTEKKwkJCTs7CisJZXNhYworCisJbnVtX3N0ZXBzPTAKKwlmb3IgcyBpbiAvZXRjL3JjJHJ1bmxldmVsLmQvW1NLXSo7IGRvCisgICAgICAgICAgICBjYXNlICIke3MjIy9ldGMvcmMkcnVubGV2ZWwuZC9TPz99IiBpbgorICAgICAgICAgICAgICAgIGdkbXx4ZG18a2RtfHJlYm9vdHxoYWx0KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgbnVtX3N0ZXBzPSQoKCRudW1fc3RlcHMgKyAxKSkKKyAgICAgICAgZG9uZQorICAgICAgICBzdGVwPTAKKworCSMgRmlyc3QsIHJ1biB0aGUgS0lMTCBzY3JpcHRzLgorCWlmIFsgJHByZXZpb3VzICE9IE4gXQorCXRoZW4KKwkJZm9yIGkgaW4gL2V0Yy9yYyRydW5sZXZlbC5kL0tbMC05XVswLTldKgorCQlkbworCQkJIyBDaGVjayBpZiB0aGUgc2NyaXB0IGlzIHRoZXJlLgorCQkJWyAhIC1mICRpIF0gJiYgY29udGludWUKKworCQkJIyBTdG9wIHRoZSBzZXJ2aWNlLgorCQkJc3RhcnR1cCAkaSBzdG9wCisJCWRvbmUKKwlmaQorCisJIyBOb3cgcnVuIHRoZSBTVEFSVCBzY3JpcHRzIGZvciB0aGlzIHJ1bmxldmVsLgorCWZvciBpIGluIC9ldGMvcmMkcnVubGV2ZWwuZC9TKgorCWRvCisJCVsgISAtZiAkaSBdICYmIGNvbnRpbnVlCisKKwkJaWYgWyAkcHJldmlvdXMgIT0gTiBdICYmIFsgJHByZXZpb3VzICE9IFMgXQorCQl0aGVuCisJCQkjCisJCQkjIEZpbmQgc3RhcnQgc2NyaXB0IGluIHByZXZpb3VzIHJ1bmxldmVsIGFuZAorCQkJIyBzdG9wIHNjcmlwdCBpbiB0aGlzIHJ1bmxldmVsLgorCQkJIworCQkJc3VmZml4PSR7aSMvZXRjL3JjJHJ1bmxldmVsLmQvU1swLTldWzAtOV19CisJCQlzdG9wPS9ldGMvcmMkcnVubGV2ZWwuZC9LWzAtOV1bMC05XSRzdWZmaXgKKwkJCXByZXZpb3VzX3N0YXJ0PS9ldGMvcmMkcHJldmlvdXMuZC9TWzAtOV1bMC05XSRzdWZmaXgKKwkJCSMKKwkJCSMgSWYgdGhlcmUgaXMgYSBzdGFydCBzY3JpcHQgaW4gdGhlIHByZXZpb3VzIGxldmVsCisJCQkjIGFuZCBfbm9fIHN0b3Agc2NyaXB0IGluIHRoaXMgbGV2ZWwsIHdlIGRvbid0CisJCQkjIGhhdmUgdG8gcmUtc3RhcnQgdGhlIHNlcnZpY2UuCisJCQkjCisJCQlbIC1mICRwcmV2aW91c19zdGFydCBdICYmIFsgISAtZiAkc3RvcCBdICYmIGNvbnRpbnVlCisJCWZpCisJCWNhc2UgIiRydW5sZXZlbCIgaW4KKwkJCTB8NikKKwkJCQlzdGFydHVwICRpIHN0b3AKKwkJCQk7OworCQkJKikKKwkJCQlzdGFydHVwICRpIHN0YXJ0CisJCQkJOzsKKwkJZXNhYworCWRvbmUKKyAgZmkKKworI1VuY29tbWVudCB0byBjYXVzZSBwc3BsYXNoIHRvIGV4aXQgbWFudWFsbHksIG90aGVyd2lzZSBpdCBleGl0cyB3aGVuIGl0IHNlZXMgYSBWQyBzd2l0Y2gKK2lmIFsgIngkcnVubGV2ZWwiICE9ICJ4UyIgXSAmJiBbICEgLXggL2V0Yy9yYyR7cnVubGV2ZWx9LmQvUz8/eHNlcnZlci1ub2RtIF07IHRoZW4KKyAgICBpZiB0eXBlIHBzcGxhc2gtd3JpdGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIFRNUERJUj0vbW50Ly5wc3BsYXNoIHBzcGxhc2gtd3JpdGUgIlFVSVQiIHx8IHRydWUKKyAgICAJdW1vdW50IC1sIC9tbnQvLnBzcGxhc2gKKyAgICBmaQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgwYjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorIworIyByY1MJCUNhbGwgYWxsIFM/Pyogc2NyaXB0cyBpbiAvZXRjL3JjUy5kIGluCisjCQludW1lcmljYWwvYWxwaGFiZXRpY2FsIG9yZGVyLgorIworIyBWZXJzaW9uOglAKCMpL2V0Yy9pbml0LmQvcmNTICAyLjc2ICAxOS1BcHItMTk5OSAgbWlxdWVsc0BjaXN0cm9uLm5sCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK3J1bmxldmVsPVMKK3ByZXZsZXZlbD1OCit1bWFzayAwMjIKK2V4cG9ydCBQQVRIIHJ1bmxldmVsIHByZXZsZXZlbAorCisjCU1ha2Ugc3VyZSBwcm9jIGlzIG1vdW50ZWQKKyMKK1sgLWQgIi9wcm9jLzEiIF0gfHwgbW91bnQgL3Byb2MKKworIworIwlTb3VyY2UgZGVmYXVsdHMuCisjCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIwlUcmFwIENUUkwtQyAmYyBvbmx5IGluIHRoaXMgc2hlbGwgc28gd2UgY2FuIGludGVycnVwdCBzdWJwcm9jZXNzZXMuCisjCit0cmFwICI6IiBJTlQgUVVJVCBUU1RQCisKKyMKKyMJQ2FsbCBhbGwgcGFydHMgaW4gb3JkZXIuCisjCitleGVjIC9ldGMvaW5pdC5kL3JjIFMKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDljZGY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MtZGVmYXVsdApAQCAtMCwwICsxLDI5IEBACisjCisjCURlZmF1bHRzIGZvciB0aGUgYm9vdCBzY3JpcHRzIGluIC9ldGMvcmNTLmQKKyMKKworIyBUaW1lIGZpbGVzIGluIC90bXAgYXJlIGtlcHQgaW4gZGF5cy4KK1RNUFRJTUU9MAorIyBTZXQgdG8geWVzIGlmIHlvdSB3YW50IHN1bG9naW4gdG8gYmUgc3Bhd25lZCBvbiBib290dXAKK1NVTE9HSU49bm8KKyMgU2V0IHRvIG5vIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gbG9naW4gb3ZlciB0ZWxuZXQvcmxvZ2luCisjIGJlZm9yZSBzeXN0ZW0gc3RhcnR1cCBpcyBjb21wbGV0ZSAoYXMgc29vbiBhcyBpbmV0ZCBpcyBzdGFydGVkKQorREVMQVlMT0dJTj1ubworIyBBc3N1bWUgdGhhdCB0aGUgQklPUyBjbG9jayBpcyBzZXQgdG8gVVRDIHRpbWUgKHJlY29tbWVuZGVkKQorVVRDPXllcworIyBTZXQgVkVSQk9TRSB0byAibm8iIGlmIHlvdSB3b3VsZCBsaWtlIGEgbW9yZSBxdWlldCBib290dXAuCitWRVJCT1NFPW5vCisjIFNldCBFRElUTU9URCB0byAibm8iIGlmIHlvdSBkb24ndCB3YW50IC9ldGMvbW90ZCB0byBiZSBlZGl0ZWQgYXV0b21hdGljYWxseQorRURJVE1PVEQ9bm8KKyMgV2hldGhlciB0byBmc2NrIHJvb3Qgb24gYm9vdAorRU5BQkxFX1JPT1RGU19GU0NLPW5vCisjIFNldCBGU0NLRklYIHRvICJ5ZXMiIGlmIHlvdSB3YW50IHRvIGFkZCAiLXkiIHRvIHRoZSBmc2NrIGF0IHN0YXJ0dXAuCitGU0NLRklYPXllcworIyBTZXQgVElDS0FESiB0byB0aGUgY29ycmVjdCB0aWNrIHZhbHVlIGZvciB0aGlzIHNwZWNpZmljIG1hY2hpbmUKKyNUSUNLQURKPTEwMDAwCisjIEVuYWJsZSBjYWNoaW5nIGluIHBvcHVsYXRlLXZvbGF0aWxlLnNoCitWT0xBVElMRV9FTkFCTEVfQ0FDSEU9eWVzCisjIEluZGljYXRlIHdoZXRoZXIgdGhlIHJvb3RmcyBpcyBpbnRlbmRlZCB0byBiZSByZWFkLW9ubHkgb3Igbm90LgorIyBTZXR0aW5nIFJPT1RGU19SRUFEX09OTFkgdG8geWVzIGFuZCByZWJvb3Rpbmcgd2lsbCBnaXZlIHlvdSBhIHJlYWQtb25seSByb290ZnMuCisjIE5vcm1hbGx5IHlvdSBzaG91bGQgbm90IGNoYW5nZSB0aGlzIHZhbHVlLgorUk9PVEZTX1JFQURfT05MWT1ubwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmUzOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0XzIuODhkc2YuYmIKQEAgLTAsMCArMSwxMDggQEAKK1NVTU1BUlkgPSAiU3lzdGVtLVYgbGlrZSBpbml0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGlzIHJlcXVpcmVkIHRvIGJvb3QgaW4gbW9zdCBjb25maWd1cmF0aW9ucy4gIEl0IHByb3ZpZGVzIHRoZSAvc2Jpbi9pbml0IHByb2dyYW0uICBUaGlzIGlzIHRoZSBmaXJzdCBwcm9jZXNzIHN0YXJ0ZWQgb24gYm9vdCwgYW5kIHRoZSBsYXN0IHByb2Nlc3MgdGVybWluYXRlZCBiZWZvcmUgdGhlIHN5c3RlbSBoYWx0cy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9zeXN2aW5pdC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlSSUdIVDtlbmRsaW5lPTE1O21kNT0zNDljODcyZTAwNjYxNTVlMTgxOGI3ODY5Mzg4NzZhNCIKK1BSID0gInIxNCIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0taW5pdHRhYiIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L3N5c3Zpbml0L3N5c3Zpbml0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcnlwdC1saWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGlkb2YtYWRkLW0tb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yY1MtZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9yYyBcCisgICAgICAgICAgIGZpbGU6Ly9yY1MgXAorICAgICAgICAgICBmaWxlOi8vYm9vdGxvZ2QuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMV9ib290bG9nZCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZWRhOGE5N2I4NmUwYTZmNTlkYWJiZjI1MjAyYWE2ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MGJiYzhjMWUxNzkyMDU2ZTIzNzYxZDIyOTYwYjMwYmIxM2VjY2MyY2FiZmY4YzczMTBhMDFmNGQ1ZGYxNTE5IgorCitTID0gIiR7V09SS0RJUn0vc3lzdmluaXQtJHtQVn0iCitCID0gIiR7U30vc3JjIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKK0RFUEVORFNfYXBwZW5kID0gIiB1cGRhdGUtcmMuZC1uYXRpdmUgYmFzZS1wYXNzd2QiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImluaXQgbW91bnRwb2ludCBoYWx0IHJlYm9vdCBydW5sZXZlbCBzaHV0ZG93biBwb3dlcm9mZiBsYXN0IGxhc3RiIG1lc2cgdXRtcGR1bXAgd2FsbCIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAwIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5pdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2luaXQiCitBTFRFUk5BVElWRV9QUklPUklUWVtpbml0XSA9ICI1MCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW21vdW50cG9pbnRdID0gIiR7YmFzZV9iaW5kaXJ9L21vdW50cG9pbnQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaGFsdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hhbHQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVib290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVib290IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3J1bmxldmVsXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcnVubGV2ZWwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2h1dGRvd25dID0gIiR7YmFzZV9zYmluZGlyfS9zaHV0ZG93biIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwb3dlcm9mZl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3Bvd2Vyb2ZmIgorCitBTFRFUk5BVElWRV8ke1BOfS1waWRvZiA9ICJwaWRvZiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwaWRvZl0gPSAiJHtiYXNlX2JpbmRpcn0vcGlkb2YiCisKK0FMVEVSTkFUSVZFXyR7UE59LXN1bG9naW4gPSAic3Vsb2dpbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gIm1vdW50cG9pbnQuMSBsYXN0LjEgbWVzZy4xIHdhbGwuMSBzdWxvZ2luLjggdXRtcGR1bXAuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3QuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGFzdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21lc2cuMV0gPSAiJHttYW5kaXJ9L21hbjEvbWVzZy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vdW50cG9pbnQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbW91bnRwb2ludC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW4uOF0gPSAiJHttYW5kaXJ9L21hbjgvc3Vsb2dpbi44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3V0bXBkdW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL3V0bXBkdW1wLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbd2FsbC4xXSA9ICIke21hbmRpcn0vbWFuMS93YWxsLjEiCisKK1BBQ0tBR0VTID0rICJzeXN2aW5pdC1waWRvZiBzeXN2aW5pdC1zdWxvZ2luIgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9zYmluZGlyfS8qICR7YmFzZV9iaW5kaXJ9LyoiCitGSUxFU19zeXN2aW5pdC1waWRvZiA9ICIke2Jhc2VfYmluZGlyfS9waWRvZi5zeXN2aW5pdCAke2Jhc2Vfc2JpbmRpcn0va2lsbGFsbDUiCitGSUxFU19zeXN2aW5pdC1zdWxvZ2luID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luLnN5c3Zpbml0IgorCitSREVQRU5EU18ke1BOfSArPSAic3lzdmluaXQtcGlkb2YgaW5pdHNjcmlwdHMtZnVuY3Rpb25zIgorCitDRkxBR1NfcHJlcGVuZCA9ICItRF9HTlVfU09VUkNFICIKK2V4cG9ydCBMQ1JZUFQgPSAiLWxjcnlwdCIKK0VYVFJBX09FTUFLRSArPSAiJ2Jhc2VfYmluZGlyPSR7YmFzZV9iaW5kaXJ9JyBcCisJCSAnYmFzZV9zYmluZGlyPSR7YmFzZV9zYmluZGlyfScgXAorCQkgJ2JpbmRpcj0ke2JpbmRpcn0nIFwKKwkJICdzYmluZGlyPSR7c2JpbmRpcn0nIFwKKwkJICdzeXNjb25mZGlyPSR7c3lzY29uZmRpcn0nIFwKKwkJICdpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0nIFwKKwkJICdtYW5kaXI9JHttYW5kaXJ9JyIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnUk9PVD0ke0R9JyBpbnN0YWxsCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9IFwKKwkJICAgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCBcCisJCSAgICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWZvciBsZXZlbCBpbiBTIDAgMSAyIDMgNCA1IDY7IGRvCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMkbGV2ZWwuZAorCWRvbmUKKworCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L3JjUy1kZWZhdWx0CSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcmNTCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmMJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3JjUwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vYm9vdGxvZ2QuaW5pdCAgICAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Jvb3Rsb2dkCisJbG4gLXNmIGJvb3Rsb2dkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zdG9wLWJvb3Rsb2dkCisKKwl1cGRhdGUtcmMuZCAtciAke0R9IGJvb3Rsb2dkIHN0YXJ0IDA3IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gc3RvcC1ib290bG9nZCBzdGFydCA5OSAyIDMgNCA1IC4KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8wMV9ib290bG9nZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCisJY2hvd24gcm9vdC5zaHV0ZG93biAke0R9JHtiYXNlX3NiaW5kaXJ9L2hhbHQgJHtEfSR7YmFzZV9zYmluZGlyfS9zaHV0ZG93bgorCWNobW9kIG8teCx1K3MgJHtEfSR7YmFzZV9zYmluZGlyfS9oYWx0ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vc2h1dGRvd24KK30KKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN2aW5pdCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzg1MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpAQCAtMCwwICsxLDQ3NCBAQAorYTY0bAorYWJzCithY2Nlc3MKK19fYWRqdGltZXgKK2FsYXJtCithbHBoYXNvcnQKK2FyZ3pfYXBwZW5kCitfX2FyZ3pfY291bnQKK2FyZ3pfY3JlYXRlX3NlcAorYXJnel9pbnNlcnQKK19fYXJnel9uZXh0Cithcmd6X25leHQKK19fYXJnel9zdHJpbmdpZnkKK2FyZ3pfc3RyaW5naWZ5Cithc3ByaW50ZgorYXRleGl0CithdG9mCithdG9pCitiY21wCitiY29weQorYmluZHJlc3Zwb3J0CitiaW5kX3RleHRkb21haW5fY29kZXNldAorYnRvd2MKK2J6ZXJvCitjYWxsb2MKK2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUKK2NhdGdldHMKK2NmZ2V0b3NwZWVkCitjZnNldGlzcGVlZAorY2ZzZXRzcGVlZAorY2htb2QKK2Nob3duCitjaHJvb3QKK2Nsb2NrCitjbG9zZQorY2xvc2VkaXIKK2Nsb3NlbG9nCitjb25mc3RyCitjb25uZWN0CitkYWVtb24KK2RjZ2V0dGV4dAorZGlmZnRpbWUKK2RpcmZkCitkaXJuYW1lCitkbmdldHRleHQKK2R1cDIKK2VjdnQKK2VuZGdyZW50CitlbmRtbnRlbnQKK2VuZHB3ZW50CitlbmR1dGVudAorZW5kdXR4ZW50CitlcG9sbF9jdGwKK2VycgorZXRoZXJfaG9zdHRvbgorZXRoZXJfbnRvaG9zdAorZXVpZGFjY2VzcworZXhlY3YKK2ZjaGRpcgorZmNobW9kCitmY2htb2RhdAorZmNob3duCitmY2hvd25hdAorZmNudGwKK2ZjdnQKK2ZkYXRhc3luYworZmRvcGVuZGlyCitmZW9mX3VubG9ja2VkCitmZ2V0c191bmxvY2tlZAorZmdldHhhdHRyCitmaW5pdGUKK2ZsaXN0eGF0dHIKK2Zsb2NrCitmbG9ja2ZpbGUKK2ZubWF0Y2gKK2ZvcmsKK2ZwYXRoY29uZgorX19mcGVuZGluZworZnByaW50ZgorZnJlZQorZnJlZWFkZHJpbmZvCitmcmVlaWZhZGRycworZnNlZWtvCitfX2ZzZXRsb2NraW5nCitmc2V0eGF0dHIKK2ZzdGF0NjQKK2ZzdGF0Citmc3RhdGZzCitmc3luYworZnRlbGxvCitmdGltZQorZnRydW5jYXRlCitmdW5sb2NrZmlsZQorZnV0aW1lcworZnV0aW1lc2F0CitnYWlfc3RyZXJyb3IKK2djdnQKK2dldGFkZHJpbmZvCitnZXRjX3VubG9ja2VkCitnZXRjd2QKK2dldGRlbGltCitnZXRkb21haW5uYW1lCitnZXRkdGFibGVzaXplCitnZXRlZ2lkCitnZXRlbnYKK2dldGV1aWQKK2dldGdpZAorZ2V0Z3JlbnQKK2dldGdyZW50X3IKK2dldGdyZ2lkX3IKK2dldGdybmFtCitnZXRncm5hbV9yCitnZXRncm91cGxpc3QKK2dldGdyb3VwcworZ2V0aG9zdGJ5YWRkcl9yCitnZXRob3N0YnluYW1lMgorZ2V0aG9zdGJ5bmFtZQorZ2V0aG9zdGJ5bmFtZV9yCitnZXRob3N0ZW50CitnZXRob3N0aWQKK2dldGhvc3RuYW1lCitnZXRpZmFkZHJzCitnZXRsaW5lCitnZXRsb2FkYXZnCitnZXRtbnRlbnQKK2dldG1zZworZ2V0bmFtZWluZm8KK2dldG5ldGJ5YWRkcl9yCitnZXRuZXRncmVudF9yCitnZXRvcHQKK2dldG9wdF9sb25nCitnZXRvcHRfbG9uZ19vbmx5CitnZXRwYWdlc2l6ZQorZ2V0cGFzcworZ2V0cGVlcm5hbWUKK2dldHBncnAKK2dldHBpZAorZ2V0cHBpZAorZ2V0cHJvdG9lbnRfcgorZ2V0cHdlbnQKK2dldHB3ZW50X3IKK2dldHB3bmFtCitnZXRwd25hbV9yCitnZXRwd3VpZAorZ2V0cHd1aWRfcgorZ2V0cmVzdWlkCitnZXRybGltaXQKK2dldHJ1c2FnZQorZ2V0c2VydmJ5bmFtZQorZ2V0c2VydmJ5bmFtZV9yCitnZXRzZXJ2Ynlwb3J0X3IKK2dldHNlcnZlbnQKK2dldHNlcnZlbnRfcgorZ2V0c3BuYW0KK2dldHNwbmFtX3IKK2dldHRpbWVvZmRheQorZ2V0dHR5ZW50CitnZXR0dHluYW0KK2dldHVpZAorZ2V0dXNlcnNoZWxsCitnZXR1dGVudAorZ2V0dXRpZAorZ2V0dXRsaW5lCitnZXR1dG1wCitnZXR1dG1weAorZ2V0dXR4ZW50CitnZXR1dHhpZAorZ2V0dXR4bGluZQorZ2V0d2QKK2dldHhhdHRyCitnbG9iCitnbXRpbWUKK2dtdGltZV9yCitncmFudHB0Citncm91cF9tZW1iZXIKK2hlcnJvcgoraHN0cmVycm9yCitpY29udgoraWNvbnZfb3BlbgoraWZfZnJlZW5hbWVpbmRleAoraWZfaW5kZXh0b25hbWUKK2lmX25hbWVpbmRleAoraWZfbmFtZXRvaW5kZXgKK2luZGV4CitpbmV0X2FkZHIKK2luZXRfYXRvbgoraW5ldF9udG9hCitpbmV0X250b3AKK2luZXRfcHRvbgoraW5pdGdyb3VwcworaW5uZXRncgoraXJ1c2Vyb2sKK2lzYXNjaWkKK2lzYXR0eQoraXNibGFuaworaXNncmFwaAoraXNpbmYKK2lzbmFuCitpc3ByaW50Citpc3NwYWNlCitpc3dhbG51bQoraXN3Y250cmwKK2lzd2N0eXBlCitpc3dwcmludAoraXN3c3BhY2UKK2lzd3VwcGVyCitpc3hkaWdpdAora2lsbAora2lsbHBnCitsY2hvd24KK2xja3B3ZGYKK2xnZXR4YXR0cgorbGluaworbGlzdHhhdHRyCitsbGlzdHhhdHRyCitsb2NhbHRpbWUKK2xvY2FsdGltZV9yCitsb2NrZgorbHJhbmQ0OAorbHNlYXJjaAorbHNlZWs2NAorbHNldHhhdHRyCitsc3RhdAorbWFsbGluZm8KK21hbGxvYworbWJsZW4KK21icmxlbgorbWJydG93YworbWJzaW5pdAorbWJzcnRvd2NzCittYnRvd2MKK21lbWFsaWduCittZW1jaHIKK21lbWNtcAorbWVtY3B5CittZW1tb3ZlCittZW1wY3B5CittZW1yY2hyCittZW1zZXQKK21rZGlyCitta2RpcmF0Citta2R0ZW1wCitta2ZpZm8KK21rbm9kCitta3N0ZW1wNjQKK21rc3RlbXAKK21rdGltZQorbWxvY2sKK21tYXAKK210cmFjZQorbXVubG9jaworbXVubWFwCituYW5vc2xlZXAKK25pY2UKK25sX2xhbmdpbmZvCitudHBfYWRqdGltZQorbnRwX2dldHRpbWUKK19vYnN0YWNrX2ZyZWUKK29uX2V4aXQKK29wZW42NAorb3Blbgorb3BlbmF0CitvcGVuZGlyCitvcGVubG9nCitwYXRoY29uZgorcGlwZQorcG9sbAorcG9wZW4KK3Bvc2l4X21lbWFsaWduCitwcmN0bAorcHJlYWQKK3ByaW50ZgorX19wcm9nbmFtZQorcHNlbGVjdAorcHRocmVhZF9tdXRleF9sb2NrCitwdHNuYW1lCitwdXRlbnYKK3B1dGdyZW50CitwdXRwd2VudAorcHV0c3BlbnQKK3B1dHV0bGluZQorcHV0dXR4bGluZQorcHV0d2MKK3B3cml0ZQorcXNvcnQKK3JhaXNlCityYW5kCityYW5kb20KK3JhbmRfcgorcmVhZAorcmVhZGRpcgorcmVhZGRpcl9yCityZWFkbGluaworcmVhbGxvYworcmVhbHBhdGgKK3JlX2NvbXAKK3JlY3Ztc2cKK3JlX2V4ZWMKK3JlZ2NvbXAKK3JlZ2V4ZWMKK3JlbW92ZQorcmVuYW1lCityZV9zZWFyY2gKK3JtZGlyCitycG1hdGNoCitycmVzdnBvcnRfYWYKK3J1c2Vyb2sKK3J1c2Vyb2tfYWYKK3NicmsKK3NjYW5kaXIKK3NjaGVkX3NldHNjaGVkdWxlcgorc2NoZWRfeWllbGQKK19fc2VjdXJlX2dldGVudgorc2VsZWN0CitzZW1jdGwKK3NlbWdldAorc2VuZG1zZworc2V0YnVmCitzZXRidWZmZXIKK3NldGVnaWQKK3NldGVudgorc2V0ZXVpZAorc2V0Z2lkCitzZXRncm91cHMKK3NldGhvc3RuYW1lCitzZXRpdGltZXIKK19zZXRqbXAKK3NldGptcAorc2V0bGluZWJ1Zgorc2V0bG9jYWxlCitzZXRtbnRlbnQKK3NldHBnaWQKK3NldHBncnAKK3NldHByaW9yaXR5CitzZXRyZWdpZAorc2V0cmVzZ2lkCitzZXRyZXN1aWQKK3NldHJldWlkCitzZXRybGltaXQKK3NldHNpZAorc2V0c29ja29wdAorc2V0dGltZW9mZGF5CitzZXR1aWQKK3NldHV0ZW50CitzZXR1dHhlbnQKK3NldHZidWYKK3NldHhhdHRyCitzZ2V0c3BlbnQKK3NobWF0CitzaG1jdGwKK3NobWR0CitzaG1nZXQKK3NodXRkb3duCitzaWdhY3Rpb24KK3NpZ2FkZHNldAorc2lnYWx0c3RhY2sKK3NpZ2Jsb2NrCitzaWdlbXB0eXNldAorc2lnaG9sZAorc2lnaW50ZXJydXB0CitzaWduYWwKK3NpZ3Byb2NtYXNrCitzaWdzZXQKK3NpZ3NldG1hc2sKK3NpZ3N0YWNrCitzaWdzdXNwZW5kCitzaWd2ZWMKK3NucHJpbnRmCitzb2NrZXQKK3NvY2tldHBhaXIKK3NwcmludGYKK3NyYW5kNDgKK3NyYW5kCitzcmFuZG9tCitzc2NhbmYKK3N0YXQKK3N0YXRmcworc3RhdHZmcworc3RpbWUKK3N0cGNweQorc3RyY2FzZWNtcAorc3RyY2FzZXN0cgorc3RyY2hyCitzdHJjaHJudWwKK3N0cmNtcAorc3RyY3Nwbgorc3RyZHVwCitzdHJlcnJvcgorc3RyZXJyb3Jfcgorc3RyZnRpbWUKK3N0cmxlbgorc3RybmNhc2VjbXAKK3N0cm5jbXAKK3N0cm5kdXAKK3N0cm5sZW4KK3N0cnBicmsKK3N0cnB0aW1lCitzdHJyY2hyCitzdHJzZXAKK3N0cnNpZ25hbAorc3Ryc3BuCitzdHJzdHIKK3N0cnRvZAorc3RydG9pbWF4CitzdHJ0b2tfcgorc3RydG9sCitzdHJ0b2xsCitzdHJ0b3VsCitzdHJ0b3VsbAorc3RydG91bWF4CitzdHJ2ZXJzY21wCitzdHJ4ZnJtCitzeW1saW5rCitzeW5jCitzeXNjb25mCitzeXNjdGwKK3N5c2luZm8KK3N5c2xvZworX3N5c19zaWdsaXN0CitzeXNfc2lnbGlzdAorc3lzdGVtCit0Y2dldGF0dHIKK3RjZ2V0cGdycAordGNzZXRhdHRyCit0Y3NldHBncnAKK3RpbWUKK3RpbWVnbQordGltZXMKK3RpbWV6b25lCit0bXBuYW0KK3Rvd2xvd2VyCit0b3d1cHBlcgordHJ1bmNhdGUKK3RzZWFyY2gKK3R0eW5hbWUKK3R6c2V0Cit1bGltaXQKK3VtYXNrCit1bmFtZQordW5saW5rCit1bnNldGVudgordW5zaGFyZQordXBkd3RtcAordXBkd3RtcHgKK3VzbGVlcAordXN0YXQKK3V0aW1lCit1dGltZXMKK3V0bXBuYW1lCit1dG1weG5hbWUKK3ZhbGxvYwordmFzcHJpbnRmCit2ZXJyeAordmZvcmsKK3ZmcHJpbnRmCit2ZnNjYW5mCit2aGFuZ3VwCit2cHJpbnRmCit2c25wcmludGYKK3ZzcHJpbnRmCit3YWl0Mword2FpdDQKK3dhaXRwaWQKK3djcnRvbWIKK3djc2NvbGwKK3djc2R1cAord2NzbGVuCit3Y3RvYgord2N0b21iCit3Y3R5cGUKK3djd2lkdGgKK3dtZW1jaHIKK3dtZW1jcHkKK3dtZW1wY3B5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDlhYjUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpAQCAtMCwwICsxLDE1NiBAQAorYWlvLmgKK2FsbG9jYS5oCithcmd6LmgKK2FycGEvaW5ldC5oCithcnBhL25hbWVzZXIuaAorYXNtL2J5dGVvcmRlci5oCithc20vaW9jdGxzLmgKK2FzbS9wYWdlLmgKK2FzbS90eXBlcy5oCithc3NlcnQuaAorYnl0ZXN3YXAuaAorY3J5cHQuaAorY3R5cGUuaAorZGlyZW50LmgKK2RsZmNuLmgKK2VsZi5oCitlbmRpYW4uaAorZXJyLmgKK2Vycm5vLmgKK2V4ZWNpbmZvLmgKK2ZjbnRsLmgKK2ZlYXR1cmVzLmgKK2Zsb2F0LmgKK2ZzdGFiLmgKK2Z0dy5oCitnZXRvcHQuaAorZ2xvYi5oCitncnAuaAoraWNvbnYuaAoraWZhZGRycy5oCitpbnR0eXBlcy5oCitsYW5naW5mby5oCitsYXN0bG9nLmgKK2xpYmdlbi5oCitsaWJpbnRsLmgKK2xpbWl0cy5oCitsaW51eC9jYXBhYmlsaXR5LmgKK2xpbnV4L2ZkLmgKK2xpbnV4L2ZzLmgKK2xpbnV4L2hheWVzZXNwLmgKK2xpbnV4L2hkcmVnLmgKK2xpbnV4L2ljbXAuaAorbGludXgvaW42LmgKK2xpbnV4L2pveXN0aWNrLmgKK2xpbnV4L3B0cmFjZS5oCitsaW51eC9zZXJpYWwuaAorbGludXgvc29ueXBpLmgKK2xpbnV4L3VuaXN0ZC5oCitsaW51eC91dHNuYW1lLmgKK2xpbnV4L3ZlcnNpb24uaAorbG9jYWxlLmgKK21hbGxvYy5oCittYXRoLmgKK21jaGVjay5oCittZW1vcnkuaAorbW50ZW50LmgKK21xdWV1ZS5oCituZXRkYi5oCituZXQvaWYuaAorbmV0aW5ldC9ldGhlci5oCituZXRpbmV0L2luLmgKK25ldGluZXQvaXA2LmgKK25ldGluZXQvaXAuaAorbmV0aW5ldC90Y3AuaAorbmV0aW5ldC91ZHAuaAorbmV0aXB4L2lweC5oCituZXQvcm91dGUuaAorcGF0aHMuaAorcG9sbC5oCitwdGhyZWFkLmgKK3B0eS5oCitwd2QuaAorcmVnZXguaAorcmVzb2x2LmgKK3JwYy9ycGMuaAorcnBjL3R5cGVzLmgKK3NjaGVkLmgKK3Njc2kvc2NzaS5oCitzZWFyY2guaAorc2VtYXBob3JlLmgKK3NldGptcC5oCitzZ3R0eS5oCitzaGFkb3cuaAorc2lnbmFsLmgKK3N0ZGFyZy5oCitzdGRib29sLmgKK3N0ZGMKK3N0ZGRlZi5oCitzdGRpbnQuaAorc3RkaW8uaAorc3RkbGliLmgKK3N0cmluZy5oCitzdHJpbmdzLmgKK3N0cm9wdHMuaAorc3lzL2JpdHlwZXMuaAorc3lzL2NkZWZzLmgKK3N5cy9kaXIuaAorc3lzL2Vwb2xsLmgKK3N5c2V4aXRzLmgKK3N5cy9mY250bC5oCitzeXMvZmlsZS5oCitzeXMvZnN1aWQuaAorc3lzL2lvY3RsLmgKK3N5cy9pcGMuaAorc3lzbG9nLmgKK3N5cy9tbWFuLmgKK3N5cy9tb3VudC5oCitzeXMvbXRpby5oCitzeXMvcGFyYW0uaAorc3lzL3BvbGwuaAorc3lzL3ByY3RsLmgKK3N5cy9wdHJhY2UuaAorc3lzL3F1ZXVlLmgKK3N5cy9yZWcuaAorc3lzL3Jlc291cmNlLmgKK3N5cy9zZWxlY3QuaAorc3lzL3NlbS5oCitzeXMvc2htLmgKK3N5cy9zaWduYWwuaAorc3lzL3NvY2tldC5oCitzeXMvc29ja2V0dmFyLmgKK3N5cy9zb3VuZGNhcmQuaAorc3lzL3N0YXRmcy5oCitzeXMvc3RhdC5oCitzeXMvc3RhdHZmcy5oCitzeXMvc3Ryb3B0cy5oCitzeXMvc3dhcC5oCitzeXMvc3lzY3RsLmgKK3N5cy9zeXNpbmZvLmgKK3N5cy9zeXNtYWNyb3MuaAorc3lzL3Rlcm1pb3MuaAorc3lzL3RpbWViLmgKK3N5cy90aW1lLmgKK3N5cy90aW1lcy5oCitzeXMvdGltZXguaAorc3lzL3R5cGVzLmgKK3N5cy91aW8uaAorc3lzL3VuLmgKK3N5cy91bmlzdGQuaAorc3lzL3VzZXIuaAorc3lzL3V0c25hbWUuaAorc3lzL3Zmcy5oCitzeXMvd2FpdC5oCit0ZXJtaW8uaAordGVybWlvcy5oCit0aW1lLmgKK3R0eWVudC5oCit1bGltaXQuaAordW5pc3RkLmgKK3VzdGF0LmgKK3V0aW1lLmgKK3V0bXAuaAordXRtcHguaAordmFsdWVzLmgKK3djaGFyLmgKK3djdHlwZS5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGJkODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcwpAQCAtMCwwICsxLDIxIEBACitjaGFyCitjaGFyICoKK2RvdWJsZQorZmxvYXQKK2ludAorbG9uZworbG9uZyBkb3VibGUKK2xvbmcgaW50Citsb25nIGxvbmcKK2xvbmcgbG9uZyBpbnQKK3Nob3J0CitzaG9ydCBpbnQKK3NpZ25lZCBjaGFyCit1bnNpZ25lZCBjaGFyCit1bnNpZ25lZCBpbnQKK3Vuc2lnbmVkIGxvbmcKK3Vuc2lnbmVkIGxvbmcgaW50Cit1bnNpZ25lZCBsb25nIGxvbmcgaW50Cit1bnNpZ25lZCBzaG9ydAordW5zaWduZWQgc2hvcnQgaW50Cit2b2lkICoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5ZTQxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jCkBAIC0wLDAgKzEsMTQyIEBACitERVBFTkRTICs9ICJrZXJuLXRvb2xzLW5hdGl2ZSIKK2luaGVyaXQgY21sMQorIworIyBTZXQgdGhlIEFSQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHVDbGliYyBjb21waWxhdGlvbi4KKyMgUmV0dXJuIHZhbHVlIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBhcmNoaXRlY3R1cmVzIGtub3duIHRvIHVDbGliYzoKKyMgbGliYy9zeXNkZXBzLyovKgorIworCit2YWxpZF9hcmNocyA9ICJcCithbHBoYSBcCithcm0gXAorYXZyMzIgXAorYmZpbiBcCitjNnggXAorY3JpcyBcCitlMSBcCitmcnYgXAoraDgzMDAgXAoraHBwYSBcCitpMzg2IFwKK2k5NjAgXAoraWE2NCBcCittNjhrIFwKK21pY3JvYmxhemUgXAorbWlwcyBcCituaW9zIFwKK25pb3MyIFwKK3Bvd2VycGMgXAorc2ggXAorc2g2NCBcCitzcGFyYyBcCit2ODUwIFwKK3ZheCBcCit4ODZfNjQgXAoreHRlbnNhIFwKKyIKK2RlZiBtYXBfdWNsaWJjX2FyY2goYSwgZCk6CisgICAgIiIiUmV0dXJuIHRoZSB1Q2xpYmMgYXJjaGl0ZWN0dXJlIGZvciB0aGUgZ2l2ZW4gVEFSR0VUX0FSQ0guIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICB2YWxpZF9hcmNocyA9IGQuZ2V0VmFyKCd2YWxpZF9hcmNocycsIFRydWUpLnNwbGl0KCkKKworICAgIGlmIHJlLm1hdGNoKCdeKGFybXxzYTExMCkuKicsIGEpOgorICAgICAgICByZXR1cm4gJ2FybScKKyAgICBlbGlmIHJlLm1hdGNoKCdeKGkuODZ8YXRobG9uKSQnLCBhKToKKyAgICAgICAgcmV0dXJuICdpMzg2JworICAgIGVsaWYgcmUubWF0Y2goJ15taXBzLionLCBhKToKKyAgICAgICAgcmV0dXJuICdtaXBzJworICAgIGVsaWYgcmUubWF0Y2goJ15wYXJpc2MuKicsIGEpOgorICAgICAgICByZXR1cm4gJ2hwcGEnCisgICAgZWxpZiByZS5tYXRjaCgnXnBwYy4qJywgYSk6CisgICAgICAgIHJldHVybiAncG93ZXJwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdeczM5MC4qJywgYSk6CisgICAgICAgIHJldHVybiAnczM5MCcKKyAgICBlbGlmIHJlLm1hdGNoKCdec2guKicsIGEpOgorICAgICAgICByZXR1cm4gJ3NoJworICAgIGVsaWYgcmUubWF0Y2goJ14oc3VufHNwYXJjKS4qJywgYSk6CisgICAgICAgIHJldHVybiAnc3BhcmMnCisgICAgZWxpZiByZS5tYXRjaCgnXnh0ZW5zYS4qJywgYSk6CisgICAgICAgIHJldHVybiAneHRlbnNhJworICAgIGVsaWYgYSBpbiB2YWxpZF9hcmNoczoKKyAgICAgICAgcmV0dXJuIGEKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiY2Fubm90IG1hcCAnJXMnIHRvIGEgdUNsaWJjIGFyY2hpdGVjdHVyZSIgJSBhKQorCitleHBvcnQgVUNMSUJDX0FSQ0ggPSAiJHtAbWFwX3VjbGliY19hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKX0iCisKK2RlZiBtYXBfdWNsaWJjX2FiaShvLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBBQkkgZm9yIHRoZSBnaXZlbiBUQVJHRVRfT1MuIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICBhcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBpZiBtYXBfdWNsaWJjX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpID09ICJhcm0iOgorICAgICAgICBpZiByZS5tYXRjaCgnLiplYWJpJCcsIG8pOgorICAgICAgICAgICAgcmV0dXJuICdBUk1fRUFCSScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnQVJNX09BQkknCisgICAgIyBGSVhNRTogVGhpcyBpcyBpbmFjY3VyYXRlISBIYW5kbGUgbzMyLCBuMzIsIG42NAorICAgIGVsaWYgcmUubWF0Y2goJ15taXBzLio2NCQnLCBhcmNoKToKKyAgICAgICAgcmV0dXJuICdNSVBTX042NF9BQkknCisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKicsIGFyY2gpOgorICAgICAgICByZXR1cm4gJ01JUFNfTzMyX0FCSScKKyAgICByZXR1cm4gIiIKKworZXhwb3J0IFVDTElCQ19BQkkgPSAiJHtAbWFwX3VjbGliY19hYmkoZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpLCBkKX0iCisKK2RlZiBtYXBfdWNsaWJjX2VuZGlhbihhLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBlbmRpYW5lc3MgZm9yIHRoZSBnaXZlbiBUQVJHRVRfQVJDSC4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgICMgQWx3YXlzIEJFCisgICAgaWYgcmUubWF0Y2goJ14oYXZyMzJ8ZTF8ZnJ2fChwYXJpc2N8aHBwYSl8bTY4a3xtaWNyb2JsYXplfHBvd2VycGMuKnwoc3BhcmN8c3VuKS4qKSQnLCBhKToKKyAgICAgICAgcmV0dXJuICdCSUcnCisgICAgIyBQb3NzaWJseSBCRQorICAgIGVsaWYgcmUubWF0Y2goJ14oKChhcm18c2ExMTApLiplYil8aDgzMDAuKmVifChwYXJpc2N8aHBwYSkuKmVifG1pcHN8bWlwczY0fHNoLiplYnx4dGVuc2EuKmViKSQnLCBhKToKKyAgICAgICAgcmV0dXJuICdCSUcnCisgICAgcmV0dXJuICdMSVRUTEUnCisKK2V4cG9ydCBVQ0xJQkNfRU5ESUFOID0gIiR7QG1hcF91Y2xpYmNfZW5kaWFuKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKX0iCisKKyMgaW50ZXJuYWwgaGVscGVyCitkZWYgdWNsaWJjX2NmZyhmZWF0dXJlLCBmZWF0dXJlcywgdG9rZW5zLCBjbmYsIHJlbSk6CisgICAgaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorICAgICAgICB0b2tlbnMgPSBbdG9rZW5zXQorICAgIHJlbS5leHRlbmQoWycvXlsjIF0qJyArIHRva2VuICsgJ1sgPV0vZCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisgICAgaWYgdHlwZShmZWF0dXJlcykgPT0gdHlwZShbXSkgYW5kIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIGNuZi5leHRlbmQoW3Rva2VuICsgJz15JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKyAgICBlbHNlOgorICAgICAgICBjbmYuZXh0ZW5kKFsnIyAnICsgdG9rZW4gKyAnIGlzIG5vdCBzZXQnIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCisjIE1hcCBkaXN0cm8gZmVhdHVyZXMgdG8gY29uZmlnIHNldHRpbmdzCitkZWYgZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpOgorICAgIGNuZiwgcmVtID0gKFtdLCBbXSkKKyAgICBkaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHVjbGliY19jZmcoJ2lwdjQnLCAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfSVBWNCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2lwdjYnLCAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfSVBWNicsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2xhcmdlZmlsZScsIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfTEZTJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnbmxzJywgICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19MT0NBTEUnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCd0aHVtYi1pbnRlcndvcmsnLCBkaXN0cm9fZmVhdHVyZXMsJ1VTRV9CWCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3hhdHRyJywgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfWEFUVFInLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdzc3AnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX1NTUCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2FyZ3AnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0FSR1AnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgIGRpc3Ryb19mZWF0dXJlcywnVUNMSUJDX0hBU19XQ0hBUicsIGNuZiwgcmVtKQorICAgIHJldHVybiAiXG4iLmpvaW4oY25mKSwgIlxuIi5qb2luKHJlbSkKKyMgWCwgWSA9ICR7QGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKX0KKyMgdW5mb3J0dW5hdGVseSBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIGJpdGJha2UsIHdvcmthcm91bmQ6CitkZWYgZmVhdHVyZXNfdG9fdWNsaWJjX2NvbmYoZCk6CisgICAgY25mLCByZW0gPSBmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCkKKyAgICByZXR1cm4gY25mCitkZWYgZmVhdHVyZXNfdG9fdWNsaWJjX2RlbChkKToKKyAgICBjbmYsIHJlbSA9IGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKQorICAgIHJldHVybiByZW0KKworIyByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc3JjIHVyaSB0aGF0IGFyZSAuY2ZnIGZpbGVzCitkZWYgZmluZF9jZmdzKGQpOgorICAgIHNvdXJjZXM9c3JjX3BhdGNoZXMoZCwgVHJ1ZSkKKyAgICBzb3VyY2VzX2xpc3Q9W10KKyAgICBmb3IgcyBpbiBzb3VyY2VzOgorICAgICAgICBpZiBzLmVuZHN3aXRoKCcuY2ZnJyk6CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisKKyAgICByZXR1cm4gc291cmNlc19saXN0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTU3N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYwpAQCAtMCwwICsxLDIwIEBACitTUkNSRVYgPSAiY2ExYzc0ZDY3ZGQxMTVkMDU5YTg3NTE1MGUxMGI4NTYwYTljMzVhOCIKKworUFYgPSAiMC45LjMzK2dpdCR7U1JDUFZ9IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS91Y2xpYmMtZ2l0OiIKKworU1JDX1VSSSA9ICJnaXQ6Ly91Y2xpYmMub3JnL3VDbGliYy5naXQ7YnJhbmNoPW1hc3RlciBcCisgICAgICAgIGZpbGU6Ly91Q2xpYmMubWFjaGluZSBcCisgICAgICAgIGZpbGU6Ly91Q2xpYmMuZGlzdHJvIFwKKyAgICAgICAgZmlsZTovL29ic3RhY2suY2ZnIFwKKyAgICAgICAgZmlsZTovL2xvY2FsZS5jZmcgXAorICAgICAgICBmaWxlOi8vMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMi1BZGQtaW1wbGVtZW50YXRpb24tZm9yLWNvcHlzaWdubC1mb3ItcHBjLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDMtQWRkLWFyZ3AtaW1wbGVtZW50YXRpb24ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNC1Eb250LXN1cHBvcnQtbG9jYWxpc2VkLW9wdGltaXphdGlvbnMtdGhpcy1oZWxwcy10by1oLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDUtQWx3YXlzLXVzZS1PMi1mb3ItY29tcGlsaW5nLWZvcmsuYy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaCBcCisiCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2ZjE0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSAxNGI4NjViMzQzOGQwZGYyOWI0OTY5MTQ4Njc4ZDhmYTg5NDNlMWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NDk6MzMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzddIERpc2FibGUgbHJvdW50X3RlcygpIGZ1bmN0aW9uCisKK0l0cyBub3QgdXNlZCBhbnl3YXksIGF2b2lkcyBzb21lIHN0cmljdCBjb21waWxlciB3YXJuaW5ncworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHRlc3QvbWF0aC9saWJtLXRlc3QuaW5jIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMgYi90ZXN0L21hdGgvbGlibS10ZXN0LmluYworaW5kZXggZjUwYjQ4Yi4uNmQ3MGE5NSAxMDA2NDQKKy0tLSBhL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCisrKysgYi90ZXN0L21hdGgvbGlibS10ZXN0LmluYworQEAgLTM0NzAsNyArMzQ3MCw2IEBAIGxvZ2JfdGVzdCAodm9pZCkKKyB9CisgCisgCistI2lmIDAKKyBzdGF0aWMgdm9pZAorIGxyb3VuZF90ZXN0ICh2b2lkKQorIHsKK0BAIC0zNjA1LDcgKzM2MDQsNiBAQCBsbHJvdW5kX3Rlc3QgKHZvaWQpCisgCisgICBFTkQgKGxscm91bmQpOworIH0KKy0jZW5kaWYKKyAKKyBzdGF0aWMgdm9pZAorIG1vZGZfdGVzdCAodm9pZCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI3NWM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2gKQEAgLTAsMCArMSwxMjUgQEAKK0Zyb20gNWQzNjIwNzRlNTk3NWIxNTBhMzViY2ZhNzdlYWIxYmZhNGUzMGRlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDIwOjUwOjU2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMi83XSBBZGQgaW1wbGVtZW50YXRpb24gZm9yIGNvcHlzaWdubCBmb3IgcHBjCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaCB8ICAyICstCisgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMgICB8IDg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jCisKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAoraW5kZXggNGZiY2IxMS4uN2MwOWM4NyAxMDA2NDQKKy0tLSBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2gKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2gKK0BAIC01LDcgKzUsNyBAQAorICMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKyAjCisgCistQ1NSQy15IDo9IF9fc3lzY2FsbF9lcnJvci5jIGlvY3RsLmMKKytDU1JDLXkgOj0gX19zeXNjYWxsX2Vycm9yLmMgaW9jdGwuYyBjb3B5c2lnbmwuYworIAorIFNTUkMteSA6PSBcCisgCV9fbG9uZ2ptcC5TIHNldGptcC5TIGJzZC1zZXRqbXAuUyBic2QtX3NldGptcC5TIGJyay5TIFwKK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYyBiL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDAwZjY1MworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKK0BAIC0wLDAgKzEsODkgQEAKKysvKiBzX2NvcHlzaWdubC5jIC0tIGxvbmcgZG91YmxlIHZlcnNpb24gb2Ygc19jb3B5c2lnbi5jLgorKyAqIENvbnZlcnNpb24gdG8gbG9uZyBkb3VibGUgYnkgVWxyaWNoIERyZXBwZXIsCisrICogQ3lnbnVzIFN1cHBvcnQsIGRyZXBwZXJAY3lnbnVzLmNvbS4KKysgKi8KKysKKysvKgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKysgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorKyAqIGlzIHByZXNlcnZlZC4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrLyoKKysgKiBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKKysgKiBjb3B5c2lnbmwoeCx5KSByZXR1cm5zIGEgdmFsdWUgd2l0aCB0aGUgbWFnbml0dWRlIG9mIHggYW5kCisrICogd2l0aCB0aGUgc2lnbiBiaXQgb2YgeS4KKysgKi8KKysKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpZiBfX0ZMT0FUX1dPUkRfT1JERVIgPT0gQklHX0VORElBTgorKworK3R5cGVkZWYgdW5pb24KKyt7CisrICBsb25nIGRvdWJsZSB2YWx1ZTsKKysgIHN0cnVjdAorKyAgeworKyAgICBpbnQgc2lnbl9leHBvbmVudDoxNjsKKysgICAgdW5zaWduZWQgaW50IGVtcHR5OjE2OworKyAgICB1aW50MzJfdCBtc3c7CisrICAgIHVpbnQzMl90IGxzdzsKKysgIH0gcGFydHM7CisrfSBpZWVlX2xvbmdfZG91YmxlX3NoYXBlX3R5cGU7CisrCisrI2VuZGlmCisrCisrI2lmIF9fRkxPQVRfV09SRF9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgIGxvbmcgZG91YmxlIHZhbHVlOworKyAgc3RydWN0CisrICB7CisrICAgIHVpbnQzMl90IGxzdzsKKysgICAgdWludDMyX3QgbXN3OworKyAgICBpbnQgc2lnbl9leHBvbmVudDoxNjsKKysgICAgdW5zaWduZWQgaW50IGVtcHR5OjE2OworKyAgfSBwYXJ0czsKKyt9IGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZTsKKysKKysjZW5kaWYKKysKKysvKiBHZXQgaW50IGZyb20gdGhlIGV4cG9uZW50IG9mIGEgbG9uZyBkb3VibGUuICAqLworKworKyNkZWZpbmUgR0VUX0xET1VCTEVfRVhQKGV4cCxkKQkJCQkJXAorK2RvIHsJCQkJCQkJCVwKKysgIGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZSBnZV91OwkJCQlcCisrICBnZV91LnZhbHVlID0gKGQpOwkJCQkJCVwKKysgIChleHApID0gZ2VfdS5wYXJ0cy5zaWduX2V4cG9uZW50OwkJCQlcCisrfSB3aGlsZSAoMCkKKysKKysvKiBTZXQgZXhwb25lbnQgb2YgYSBsb25nIGRvdWJsZSBmcm9tIGFuIGludC4gICovCisrCisrI2RlZmluZSBTRVRfTERPVUJMRV9FWFAoZCxleHApCQkJCQlcCisrZG8gewkJCQkJCQkJXAorKyAgaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlIHNlX3U7CQkJCVwKKysgIHNlX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorKyAgc2VfdS5wYXJ0cy5zaWduX2V4cG9uZW50ID0gKGV4cCk7CQkJCVwKKysgIChkKSA9IHNlX3UudmFsdWU7CQkJCQkJXAorK30gd2hpbGUgKDApCisrCisrbG9uZyBkb3VibGUgY29weXNpZ25sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpOworK2xpYmNfaGlkZGVuX3Byb3RvKGNvcHlzaWdubCk7CisrCisrbG9uZyBkb3VibGUgY29weXNpZ25sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpCisreworKwl1aW50MzJfdCBlczEsZXMyOworKwlHRVRfTERPVUJMRV9FWFAoZXMxLHgpOworKwlHRVRfTERPVUJMRV9FWFAoZXMyLHkpOworKwlTRVRfTERPVUJMRV9FWFAoeCwoZXMxJjB4N2ZmZil8KGVzMiYweDgwMDApKTsKKysgICAgICAgIHJldHVybiB4OworK30KKysKKytsaWJjX2hpZGRlbl9kZWYoY29weXNpZ25sKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTQ0ODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDMtQWRkLWFyZ3AtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSw1ODExIEBACitGcm9tIGVhYWU4MTZmYjIyOTI5NDY5YWE0Y2MzNDAyYjkxYjUxMmZjNjk1NDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvQHN0LmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTM6MzcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzddIEFkZCBhcmdwIGltcGxlbWVudGF0aW9uCisKK0FyZ3AgaXMgYW4gYWR2YW5jZWQgc3VwcG9ydCBmb3IgcGFyc2luZyB1bml4LXN0eWxlIGFyZ3VtZW50IHZlY3RvcnMuCitJbiBhZGRpdGlvbiB0byB0aGUgY29tbW9uIGdldG9wdCBpbnRlcmZhY2UsIGl0IHByb3ZpZGVzIGF1dG9tYXRpYworcmVzcG9uc2UKK3RvIGAtLWhlbHAnIGFuZCBgLS12ZXJzaW9uJyBvcHRpb25zIGFuZCB1c2Ugb2YgY3VzdG9tIHBhcnNlciBpbgorY29uanVuY3Rpb24KK3dpdGggYXJncCBuYXRpdmUgb3B0aW9uIHBhcnNlciwgYW1vbmcgb3RoZXJzLgorQXJncCBzdXBwb3J0IGlzIHJlcXVpcmVkIGJ5IGVsZnV0aWxzIHBhY2thZ2UgYW5kIHByZWxpbmsuCisKK0luIHVDbGliYyBhcmdwIGZ1bmN0aW9uYWxpdGllcyBoYXMgYmVlbiBtb3ZlZCBmcm9tIEMgbGlicmFyeSB0bworbGlidWFyZ3Auc28KK0Z1cnRoZXIgdGhlIGxpYmMuc28gbGlua2VyIHNjcmlwdCBjb250YWlucyBhbiBBU19ORUVERUQgZW50cnkgc28gdGhhdAoraXQgZG9lc24ndCBuZWVkIHRvIGxpbmsgbGlidWFyZ3Auc28gZXhwbGljaXRlbHkuCisKK1NpZ25lZC1vZmYtYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm9Ac3QuY29tPgorU2lnbmVkLW9mZi1ieTogRmlsaXBwbyBBcmNpZGlhY29ubyA8ZmlsaXBwby5hcmNpZGlhY29ub0BzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDYXJtZWxvIEFtb3Jvc28gPGNhcm1lbG8uYW1vcm9zb0BzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIE1ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsKKyBNYWtlcnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQorIFJ1bGVzLm1hayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyBleHRyYS9Db25maWdzL0NvbmZpZy5pbiAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArCisgaW5jbHVkZS9hcmdwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NjYgKysrKysrKysKKyBsaWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oIHwgIDEzNiArKworIGxpYmMvdW5pc3RkL2dldG9wdC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICstCisgbGlidWFyZ3AvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKworIGxpYnVhcmdwL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDczICsrCisgbGlidWFyZ3AvYXJncC1iYS5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYgKworIGxpYnVhcmdwL2FyZ3AtZWV4c3QuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsKKyBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jICAgICAgICAgICAgICAgICAgIHwgIDQzOSArKysrKysrCisgbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaCAgICAgICAgICAgICAgICAgICB8ICAzMTQgKysrKysKKyBsaWJ1YXJncC9hcmdwLWZzLXhpbmwuYyAgICAgICAgICAgICAgICAgICAgIHwgICA0NCArCisgbGlidWFyZ3AvYXJncC1oZWxwLmMgICAgICAgICAgICAgICAgICAgICAgICB8IDE4ODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGlidWFyZ3AvYXJncC1wYXJzZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICA5NDkgKysrKysrKysrKysrKysKKyBsaWJ1YXJncC9hcmdwLXB2LmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArCisgbGlidWFyZ3AvYXJncC1wdmguYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKworIGxpYnVhcmdwL2FyZ3AteGlubC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICsKKyB0ZXN0L2FyZ3AvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgdGVzdC9hcmdwL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKworIHRlc3QvYXJncC9hcmdwLWV4MS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE1ICsKKyB0ZXN0L2FyZ3AvYXJncC1leDIuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NSArCisgdGVzdC9hcmdwL2FyZ3AtZXgzLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTMgKysrCisgdGVzdC9hcmdwL2FyZ3AtZXg0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNjcgKysrCisgdGVzdC9hcmdwL2FyZ3AtdGVzdC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyMDkgKysrCisgdGVzdC9hcmdwL2J1Zy1hcmdwMS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYgKworIHRlc3QvYXJncC90c3QtYXJncDEuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTE4ICsrCisgdGVzdC9hcmdwL3RzdC1hcmdwMi5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDEgKysKKyAyOSBmaWxlcyBjaGFuZ2VkLCA1NDgxIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvYXJncC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvTWFrZWZpbGUKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvTWFrZWZpbGUuaW4KKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1iYS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZWV4c3QuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1mcy14aW5sLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1oZWxwLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1wYXJzZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtcHYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLXB2aC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AteGlubC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvTWFrZWZpbGUuaW4KKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXgxLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXgyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXgzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtZXg0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2FyZ3AtdGVzdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9idWctYXJncDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvdHN0LWFyZ3AxLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL3RzdC1hcmdwMi5jCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAwNDY3MWE0Li5hNDUwYWY5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMzksNiArMzksNyBAQCBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJyZXNvbHYvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJ1dGlsL01ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlicHRocmVhZC9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnJ0L01ha2VmaWxlLmluCisraW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlidWFyZ3AvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJ1YmFja3RyYWNlL01ha2VmaWxlLmluCisgCisgIyBsYXN0IGluY2x1ZGVkIHRvIGNhdGNoIGFsbCB0aGUgb2JqZWN0cyBhZGRlZCBieSBvdGhlcnMgKGxvY2FsZXMvdGhyZWFkcykKK0BAIC0yNjIsNiArMjYzLDcgQEAgSEVBREVSU19STS0gKz0gc2d0dHkuaAorIGVuZGlmCisgSEVBREVSU19STS0kKEhBVkVfU0hBUkVEKSAgICAgICAgICAgICAgICAgICAgKz0gZGxmY24uaCBiaXRzL2RsZmNuLmgKKyBIRUFERVJTX1JNLSQoUFRIUkVBRFNfREVCVUdfU1VQUE9SVCkgICAgICAgICArPSB0aHJlYWRfZGIuaAorK0hFQURFUlNfUk0tJChVQ0xJQkNfSEFTX0FSR1ApICAgICAgICAgICAgICAgICs9IGFyZ3AuaAorIEhFQURFUlNfUk0tJChVQ0xJQkNfSEFTX0JTRF9FUlIpICAgICAgICAgICAgICs9IGVyci5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfQ1JZUFQpICAgICAgICAgICAgICAgKz0gY3J5cHQuaAorIEhFQURFUlNfUk0tJChVQ0xJQkNfSEFTX0VQT0xMKSAgICAgICAgICAgICAgICs9IHN5cy9lcG9sbC5oCitAQCAtMzg2LDYgKzM4OCwxMyBAQCBlbHNlCisgCS0kKElOU1RBTEwpIC1tIDc1NSAkKHRvcF9idWlsZGRpcilsaWIvbGliYy5zbyAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvCisgZW5kaWYKKyAJZWNobyAiJChVQkFDS1RSQUNFX0FTTkVFREVEKSIgPj4gJChQUkVGSVgpJChERVZFTF9QUkVGSVgpJChNVUxUSUxJQl9ESVIpL2xpYmMuc28KKytpZmVxICgkKFVDTElCQ19IQVNfQVJHUCkseSkKKysjIEFkZCB0aGUgQVNfTkVFREVEIGVudHJ5IGZvciBsaWJ1YXJncC5zbworKwlpZiBbIC1mICQodG9wX2J1aWxkZGlyKWxpYi9saWJjLnNvIC1hIC1mICQoUFJFRklYKSQoUlVOVElNRV9QUkVGSVgpJChNVUxUSUxJQl9ESVIpLyQoU0hBUkVEX01BSk9STkFNRSkgXSA7IHRoZW4gXAorKwkJZWNobyAiR1JPVVAgKCAkKFVBUkdQX0FTTkVFREVEKSApIiA+PiAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGliYy5zbzsgXAorKwlmaQorK2VuZGlmCisrCisgaWZlcSAoJChVQ0xJQkNfSEFTX1RIUkVBRFMpLHkpCisgaWZuZXEgKCQoTElOVVhUSFJFQURTX09MRCkseSkKKyBpZmVxICgkKEhBUkRXSVJFRF9BQlNQQVRIKSx5KQorZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcworaW5kZXggZDZmN2UyNC4uZTcwMDUwZCAxMDA2NDQKKy0tLSBhL01ha2VydWxlcworKysrIGIvTWFrZXJ1bGVzCitAQCAtNDgsNiArNDgsNyBAQCAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlicmVzb2x2LCQobGlicmVzb2x2LWEteSkgJChsaWJyZXNvbHYtc28teSkpKQorICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJydCwkKGxpYnJ0LWEteSkgJChsaWJydC1zby15KSkpCisgJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnV0aWwsJChsaWJ1dGlsLWEteSkgJChsaWJ1dGlsLXNvLXkpKSkKKyAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlidWJhY2t0cmFjZSwkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnViYWNrdHJhY2Utc28teSkpKQorKyQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJ1YXJncCwkKGxpYnVhcmdwLWEteSkgJChsaWJ1YXJncC1zby15KSkpCisgCisgc2hhcmVkX29ianMgPSAkKGxpYmMteToubz0ub3MpICQobGliYy1zaGFyZWQteSkgJChsaWJjLW5vbnNoYXJlZC15KSBcCisgCSQobGliY3J5cHQtc28teSkgJChsaWJkbC1zby15KSBcCitAQCAtNTUsMTIgKzU2LDEyIEBAIHNoYXJlZF9vYmpzID0gJChsaWJjLXk6Lm89Lm9zKSAkKGxpYmMtc2hhcmVkLXkpICQobGliYy1ub25zaGFyZWQteSkgXAorIAkkKGxpYnB0aHJlYWQtc28teSkgJChsaWJwdGhyZWFkLW5vbnNoYXJlZC15KSAkKGxpYnRocmVhZF9kYi1zby15KSBcCisgCSQobGlicmVzb2x2LXNvLXkpICQobGlicnQtc28teSkgXAorIAkkKGxkc28teSkgXAorLQkkKGxpYnV0aWwtc28teSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpCisrCSQobGlidXRpbC1zby15KSAkKGxpYnViYWNrdHJhY2Utc28teSkgJChsaWJ1YXJncC1zby15KQorIAorIGFyX29ianMgPSAgJChsaWJjLXkpICQobGliYy1zdGF0aWMteSkgJChsaWJjcnlwdC1hLXkpIFwKKyAJJChsaWJkbC1hLXkpICQobGliaW50bC1hLXkpICQobGlibS1hLXkpICQobGlibnNsLWEteSkgXAorIAkkKGxpYnB0aHJlYWQtYS15KSAkKGxpYnRocmVhZF9kYi1hLXkpIFwKKy0JJChsaWJyZXNvbHYtYS15KSAkKGxpYnJ0LWEteSkgJChsaWJ1dGlsLWEteSkgJChsaWJ1YmFja3RyYWNlLWEteSkKKysJJChsaWJyZXNvbHYtYS15KSAkKGxpYnJ0LWEteSkgJChsaWJ1dGlsLWEteSkgJChsaWJ1YmFja3RyYWNlLWEteSkgJChsaWJ1YXJncC1hLXkpCisgaWZlcSAoJChET1BJQykseSkKKyBhcl9vYmpzIDo9ICQoYXJfb2Jqczoubz0ub3MpCisgZW5kaWYKK0BAIC00OTgsNyArNDk5LDcgQEAgZmlsZXMuZGVwIDo9ICQobGliYy1hLXkpICQobGliYy1zby15KSAkKGxpYmMtbm9uc2hhcmVkLXkpIFwKKyAJJChsaWJydC1hLXkpICQobGlicnQtc28teSkgICQobGlicmVzb2x2LWEteSkgJChsaWJyZXNvbHYtc28teSkgXAorIAkkKGxpYmNyeXB0LWEteSkgJChsaWJjcnlwdC1zby15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnV0aWwtc28teSkgXAorIAkkKGxpYm5zbC1hLXkpICQobGlibnNsLXNvLXkpICQobGRzby15KSAkKGxpYmRsLWEteSkgJChsaWJkbC1zby15KSBcCistCSQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KQorKwkkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnViYWNrdHJhY2Utc28teSkgJChsaWJ1YXJncC1zby15KSAkKGxpYnVhcmdwLWEteSkKKyAuZGVwZW5kcy5kZXAgOj0gXAorIAkkKHBhdHN1YnN0ICUucywlLnMuZGVwLCQoZmlsdGVyICUucywkKGZpbGVzLmRlcCkpKSBcCisgCSQocGF0c3Vic3QgJS5vLCUuby5kZXAsJChmaWx0ZXIgJS5vLCQoZmlsZXMuZGVwKSkpIFwKK2RpZmYgLS1naXQgYS9SdWxlcy5tYWsgYi9SdWxlcy5tYWsKK2luZGV4IGRlOWZmYjMuLmEyYmFmNTggMTAwNjQ0CistLS0gYS9SdWxlcy5tYWsKKysrKyBiL1J1bGVzLm1haworQEAgLTYwMiw2ICs2MDIsMTkgQEAgZXhwb3J0IFVCQUNLVFJBQ0VfQVNORUVERUQ6PSQoc2hlbGwgJChDQykgLVdsLC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgLS0gLS0KKyBlbHNlCisgZXhwb3J0IFVCQUNLVFJBQ0VfQVNORUVERUQ6PSIiCisgZW5kaWYKKytpZmVxICgkKFVDTElCQ19IQVNfQVJHUCkseSkKKytpZmVxICgkKEhBUkRXSVJFRF9BQlNQQVRIKSx5KQorKyMgT25seSB1c2VkIGluIGluc3RhbGxlZCBsaWJjLnNvIGxpbmtlciBzY3JpcHQKKytVQVJHUF9GVUxMX05BTUUgOj0gJChzdWJzdCAvLywvLCQoUlVOVElNRV9QUkVGSVgpJChNVUxUSUxJQl9ESVIpL2xpYnVhcmdwLnNvLiQoTUFKT1JfVkVSU0lPTikpCisrZWxzZQorK1VBUkdQX0ZVTExfTkFNRSA6PSBsaWJ1YXJncC5zby4kKE1BSk9SX1ZFUlNJT04pCisrZW5kaWYKKytleHBvcnQgVUFSR1BfQVNORUVERUQ6PSQoc2hlbGwgJChDQykgLVdsLC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgLXEgLS0gLS1hcy1uZWVkZWQgJiYgXAorKwllY2hvICJHUk9VUCAoIEFTX05FRURFRCAoICQoVUFSR1BfRlVMTF9OQU1FKSApICkiIHx8IFwKKysJZWNobyAiR1JPVVAgKCAkKFVBUkdQX0ZVTExfTkFNRSkgKSIpCisrZWxzZQorK2V4cG9ydCBVQVJHUF9BU05FRURFRDo9IiIKKytlbmRpZgorIGVuZGlmCisgCisgIyBBZGQgYSBidW5jaCBvZiBleHRyYSBwZWRhbnRpYyBhbm5veWluZ2x5IHN0cmljdCBjaGVja3MKK2RpZmYgLS1naXQgYS9leHRyYS9Db25maWdzL0NvbmZpZy5pbiBiL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluCitpbmRleCAyNDJlNDVhLi5iMzZkNGM5IDEwMDY0NAorLS0tIGEvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KKysrKyBiL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluCitAQCAtMTk0Myw2ICsxOTQzLDIzIEBAIGNvbmZpZyBVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQKKyAJICBBbnN3ZXIgWSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIGdldHN1Ym9wdCgpLgorIAorIAkgIE1vc3QgcGVvcGxlIHdpbGwgYW5zd2VyIFkuCisrCisrY29uZmlnIFVDTElCQ19IQVNfQVJHUAorKyAgICAgICBib29sICJTdXBwb3J0IGFyZ3AgKGFzIHN0YW5kYWxvbmUgc2hhcmVkIG9iamVjdCkiCisrICAgICAgIGRlZmF1bHQgbgorKyAgICAgICBoZWxwCisrICAgICAgICAgQXJncCBpcyBhbiBpbnRlcmZhY2UgZm9yIHBhcnNpbmcgdW5peC1zdHlsZSBhcmd1bWVudCB2ZWN0b3JzLiBVbmxpa2UKKysgICAgICAgICB0aGUgY29tbW9uIGdldG9wdCBpbnRlcmZhY2UsIGl0IHByb3ZpZGVzIG1hbnkgYWR2YW5jZWQgZmVhdHVyZXMgaW4KKysgICAgICAgICBhZGRpdGlvbiB0byBwYXJzaW5nIG9wdGlvbnMsIHN1Y2ggYXMgYXV0b21hdGljIG91dHB1dCBpbiByZXNwb25zZSB0bworKyAgICAgICAgIGAtLWhlbHAnIGFuZCBgLS12ZXJzaW9uJyBvcHRpb25zLgorKyAgICAgICAgIEEgbGlicmFyeSBjYW4gZXhwb3J0IGFuIGFyZ3Agb3B0aW9uIHBhcnNlciwgd2hpY2ggcHJvZ3JhbXMgY2FuIGVhc2lseQorKyAgICAgICAgIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZWlyIG93biBvcHRpb24gcGFyc2VyLgorKyAgICAgICAgIEEgbmV3IHNoYXJlZCBvYmplY3QgImxpYnVhcmdwIiBpcyBjcmVhdGVkLiBUaGUgImxpYmMuc28iIGxpbmtlciBzY3JpcHQKKysgICAgICAgICBjb250YWlucyB0aGUgQVNfTkVFREVEIGVudHJ5IGZvciBnZXR0aW5nIHRoZSBsaWJ1YXJncCBsaW5rZWQgYXV0b21hdGljYWxseS4KKysgICAgICAgICBBcmdwIHN1cHBvcnQgaXMgbmVlZGVkIGJ5IGVsZnV0aWxzIGxpYmR3LgorKworKyAgICAgICAgIE1vc3QgcGVvcGxlIGNhbiBzYWZlbHkgYW5zd2VyIE4uCisrCisgZW5kbWVudQorIAorIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXJncC5oIGIvaW5jbHVkZS9hcmdwLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45ZDUzNzI4CistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2FyZ3AuaAorQEAgLTAsMCArMSw1NjYgQEAKKysvKiBIaWVyYXJjaGlhbCBhcmd1bWVudCBwYXJzaW5nLCBsYXllcmVkIG92ZXIgZ2V0b3B0LgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmbmRlZiBfQVJHUF9ICisrI2RlZmluZSBfQVJHUF9ICisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKworKyNkZWZpbmUgX19uZWVkX2Vycm9yX3QKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysKKysjaWZuZGVmIF9fY29uc3QKKysjIGRlZmluZSBfX2NvbnN0IGNvbnN0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1RIUk9XCisrIyBkZWZpbmUgX19USFJPVworKyNlbmRpZgorKyNpZm5kZWYgX19OVEgKKysjIGRlZmluZSBfX05USChmY3QpIGZjdCBfX1RIUk9XCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisrLyogVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworKyMgZW5kaWYKKysvKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCisrICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNykgfHwgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisrIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0CisrIyAgZGVmaW5lIF9fcHJpbnRmX18gcHJpbnRmCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIEdDQyAyLjk1IGFuZCBsYXRlciBoYXZlICJfX3Jlc3RyaWN0IjsgQzk5IGNvbXBpbGVycyBoYXZlCisrICAgInJlc3RyaWN0IiwgYW5kICJjb25maWd1cmUiIG1heSBoYXZlIGRlZmluZWQgInJlc3RyaWN0Ii4gICovCisrI2lmbmRlZiBfX3Jlc3RyaWN0CisrIyBpZiAhICgyIDwgX19HTlVDX18gfHwgKDIgPT0gX19HTlVDX18gJiYgOTUgPD0gX19HTlVDX01JTk9SX18pKQorKyMgIGlmIGRlZmluZWQgcmVzdHJpY3QgfHwgMTk5OTAxTCA8PSBfX1NURENfVkVSU0lPTl9fCisrIyAgIGRlZmluZSBfX3Jlc3RyaWN0IHJlc3RyaWN0CisrIyAgZWxzZQorKyMgICBkZWZpbmUgX19yZXN0cmljdAorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19lcnJvcl90X2RlZmluZWQKKyt0eXBlZGVmIGludCBlcnJvcl90OworKyMgZGVmaW5lIF9fZXJyb3JfdF9kZWZpbmVkCisrI2VuZGlmCisrDAorKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysvKiBBIGRlc2NyaXB0aW9uIG9mIGEgcGFydGljdWxhciBvcHRpb24uICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YKKysgICB0aGVzZSBpcyBwYXNzZWQgaW4gdGhlIE9QVElPTlMgZmllbGQgb2YgYW4gYXJncCBzdHJ1Y3R1cmUuICBFYWNoIG9wdGlvbgorKyAgIGVudHJ5IGNhbiBjb3JyZXNwb25kIHRvIG9uZSBsb25nIG9wdGlvbiBhbmQvb3Igb25lIHNob3J0IG9wdGlvbjsgbW9yZQorKyAgIG5hbWVzIGZvciB0aGUgc2FtZSBvcHRpb24gY2FuIGJlIGFkZGVkIGJ5IGZvbGxvd2luZyBhbiBlbnRyeSBpbiBhbiBvcHRpb24KKysgICBhcnJheSB3aXRoIG9wdGlvbnMgaGF2aW5nIHRoZSBPUFRJT05fQUxJQVMgZmxhZyBzZXQuICAqLworK3N0cnVjdCBhcmdwX29wdGlvbgorK3sKKysgIC8qIFRoZSBsb25nIG9wdGlvbiBuYW1lLiAgRm9yIG1vcmUgdGhhbiBvbmUgbmFtZSBmb3IgdGhlIHNhbWUgb3B0aW9uLCB5b3UKKysgICAgIGNhbiB1c2UgZm9sbG93aW5nIG9wdGlvbnMgd2l0aCB0aGUgT1BUSU9OX0FMSUFTIGZsYWcgc2V0LiAgKi8KKysgIF9fY29uc3QgY2hhciAqbmFtZTsKKysKKysgIC8qIFdoYXQga2V5IGlzIHJldHVybmVkIGZvciB0aGlzIG9wdGlvbi4gIElmID4gMCBhbmQgcHJpbnRhYmxlLCB0aGVuIGl0J3MKKysgICAgIGFsc28gYWNjZXB0ZWQgYXMgYSBzaG9ydCBvcHRpb24uICAqLworKyAgaW50IGtleTsKKysKKysgIC8qIElmIG5vbi1OVUxMLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhcmd1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcworKyAgICAgb3B0aW9uLCB3aGljaCBpcyByZXF1aXJlZCB1bmxlc3MgdGhlIE9QVElPTl9BUkdfT1BUSU9OQUwgZmxhZyBpcyBzZXQuICovCisrICBfX2NvbnN0IGNoYXIgKmFyZzsKKysKKysgIC8qIE9QVElPTl8gZmxhZ3MuICAqLworKyAgaW50IGZsYWdzOworKworKyAgLyogVGhlIGRvYyBzdHJpbmcgZm9yIHRoaXMgb3B0aW9uLiAgSWYgYm90aCBOQU1FIGFuZCBLRVkgYXJlIDAsIFRoaXMgc3RyaW5nCisrICAgICB3aWxsIGJlIHByaW50ZWQgb3V0ZGVudGVkIGZyb20gdGhlIG5vcm1hbCBvcHRpb24gY29sdW1uLCBtYWtpbmcgaXQKKysgICAgIHVzZWZ1bCBhcyBhIGdyb3VwIGhlYWRlciAoaXQgd2lsbCBiZSB0aGUgZmlyc3QgdGhpbmcgcHJpbnRlZCBpbiBpdHMKKysgICAgIGdyb3VwKTsgaW4gdGhpcyB1c2FnZSwgaXQncyBjb252ZW50aW9uYWwgdG8gZW5kIHRoZSBzdHJpbmcgd2l0aCBhIGA6Jy4gICovCisrICBfX2NvbnN0IGNoYXIgKmRvYzsKKysKKysgIC8qIFRoZSBncm91cCB0aGlzIG9wdGlvbiBpcyBpbi4gIEluIGEgbG9uZyBoZWxwIG1lc3NhZ2UsIG9wdGlvbnMgYXJlIHNvcnRlZAorKyAgICAgYWxwaGFiZXRpY2FsbHkgd2l0aGluIGVhY2ggZ3JvdXAsIGFuZCB0aGUgZ3JvdXBzIHByZXNlbnRlZCBpbiB0aGUgb3JkZXIKKysgICAgIDAsIDEsIDIsIC4uLiwgbiwgLW0sIC4uLiwgLTIsIC0xLiAgRXZlcnkgZW50cnkgaW4gYW4gb3B0aW9ucyBhcnJheSB3aXRoCisrICAgICBpZiB0aGlzIGZpZWxkIDAgd2lsbCBpbmhlcml0IHRoZSBncm91cCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LCBvcgorKyAgICAgemVybyBpZiBpdCdzIHRoZSBmaXJzdCBvbmUsIHVubGVzcyBpdHMgYSBncm91cCBoZWFkZXIgKE5BTUUgYW5kIEtFWSBib3RoCisrICAgICAwKSwgaW4gd2hpY2ggY2FzZSwgdGhlIHByZXZpb3VzIGVudHJ5ICsgMSBpcyB0aGUgZGVmYXVsdC4gIEF1dG9tYWdpYworKyAgICAgb3B0aW9ucyBzdWNoIGFzIC0taGVscCBhcmUgcHV0IGludG8gZ3JvdXAgLTEuICAqLworKyAgaW50IGdyb3VwOworK307CisrCisrLyogVGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wdGlvbiBpcyBvcHRpb25hbC4gICovCisrI2RlZmluZSBPUFRJT05fQVJHX09QVElPTkFMCTB4MQorKworKy8qIFRoaXMgb3B0aW9uIGlzbid0IGRpc3BsYXllZCBpbiBhbnkgaGVscCBtZXNzYWdlcy4gICovCisrI2RlZmluZSBPUFRJT05fSElEREVOCSAgICAgICAJMHgyCisrCisrLyogVGhpcyBvcHRpb24gaXMgYW4gYWxpYXMgZm9yIHRoZSBjbG9zZXN0IHByZXZpb3VzIG5vbi1hbGlhcyBvcHRpb24uICBUaGlzCisrICAgbWVhbnMgdGhhdCBpdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgc2FtZSBoZWxwIGVudHJ5LCBhbmQgd2lsbCBpbmhlcml0CisrICAgZmllbGRzIG90aGVyIHRoYW4gTkFNRSBhbmQgS0VZIGZyb20gdGhlIGFsaWFzZWQgb3B0aW9uLiAgKi8KKysjZGVmaW5lIE9QVElPTl9BTElBUwkJMHg0CisrCisrLyogVGhpcyBvcHRpb24gaXNuJ3QgYWN0dWFsbHkgYW4gb3B0aW9uIChhbmQgc28gc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlCisrICAgYWN0dWFsIG9wdGlvbiBwYXJzZXIpLCBidXQgcmF0aGVyIGFuIGFyYml0cmFyeSBwaWVjZSBvZiBkb2N1bWVudGF0aW9uIHRoYXQKKysgICBzaG91bGQgYmUgZGlzcGxheWVkIGluIG11Y2ggdGhlIHNhbWUgbWFubmVyIGFzIHRoZSBvcHRpb25zLiAgSWYgdGhpcyBmbGFnCisrICAgaXMgc2V0LCB0aGVuIHRoZSBvcHRpb24gTkFNRSBmaWVsZCBpcyBkaXNwbGF5ZWQgdW5tb2RpZmllZCAoZS5nLiwgbm8gYC0tJworKyAgIHByZWZpeCBpcyBhZGRlZCkgYXQgdGhlIGxlZnQtbWFyZ2luICh3aGVyZSBhICpzaG9ydCogb3B0aW9uIHdvdWxkIG5vcm1hbGx5CisrICAgYmUgZGlzcGxheWVkKSwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBpbiB0aGUgbm9ybWFsIHBsYWNlLiAgRm9yCisrICAgcHVycG9zZXMgb2Ygc29ydGluZywgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSBhbmQgcHVuY3R1YXRpb24gaXMgaWdub3JlZCwKKysgICBleGNlcHQgdGhhdCBpZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBgLScsIHRoaXMgZW50cnkKKysgICBpcyBkaXNwbGF5ZWQgYWZ0ZXIgYWxsIG9wdGlvbnMgKGFuZCBPUFRJT05fRE9DIGVudHJpZXMgd2l0aCBhIGxlYWRpbmcgYC0nKQorKyAgIGluIHRoZSBzYW1lIGdyb3VwLiAgKi8KKysjZGVmaW5lIE9QVElPTl9ET0MJCTB4OAorKworKy8qIFRoaXMgb3B0aW9uIHNob3VsZG4ndCBiZSBpbmNsdWRlZCBpbiBgbG9uZycgdXNhZ2UgbWVzc2FnZXMgKGJ1dCBpcyBzdGlsbAorKyAgIGluY2x1ZGVkIGluIGhlbHAgbWVzc2FnZXMpLiAgVGhpcyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIG9wdGlvbnMgdGhhdCBhcmUKKysgICBjb21wbGV0ZWx5IGRvY3VtZW50ZWQgaW4gYW4gYXJncCdzIEFSR1NfRE9DIGZpZWxkLCBpbiB3aGljaCBjYXNlIGluY2x1ZGluZworKyAgIHRoZSBvcHRpb24gaW4gdGhlIGdlbmVyaWMgdXNhZ2UgbGlzdCB3b3VsZCBiZSByZWR1bmRhbnQuICBGb3IgaW5zdGFuY2UsCisrICAgaWYgQVJHU19ET0MgaXMgIkZPTyBCQVJcbi14IEJMQUgiLCBhbmQgdGhlIGAteCcgb3B0aW9uJ3MgcHVycG9zZSBpcyB0bworKyAgIGRpc3Rpbmd1aXNoIHRoZXNlIHR3byBjYXNlcywgLXggc2hvdWxkIHByb2JhYmx5IGJlIG1hcmtlZAorKyAgIE9QVElPTl9OT19VU0FHRS4gICovCisrI2RlZmluZSBPUFRJT05fTk9fVVNBR0UJCTB4MTAKKysMCisrc3RydWN0IGFyZ3A7CQkJLyogZndkIGRlY2xhcmUgdGhpcyB0eXBlICovCisrc3RydWN0IGFyZ3Bfc3RhdGU7CQkvKiAiICovCisrc3RydWN0IGFyZ3BfY2hpbGQ7CQkvKiAiICovCisrCisrLyogVGhlIHR5cGUgb2YgYSBwb2ludGVyIHRvIGFuIGFyZ3AgcGFyc2luZyBmdW5jdGlvbi4gICovCisrdHlwZWRlZiBlcnJvcl90ICgqYXJncF9wYXJzZXJfdCkgKGludCBfX2tleSwgY2hhciAqX19hcmcsCisrCQkJCSAgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpOworKworKy8qIFdoYXQgdG8gcmV0dXJuIGZvciB1bnJlY29nbml6ZWQga2V5cy4gIEZvciBzcGVjaWFsIEFSR1BfS0VZXyBrZXlzLCBzdWNoCisrICAgcmV0dXJucyB3aWxsIHNpbXBseSBiZSBpZ25vcmVkLiAgRm9yIHVzZXIga2V5cywgdGhpcyBlcnJvciB3aWxsIGJlIHR1cm5lZAorKyAgIGludG8gRUlOVkFMIChpZiB0aGUgY2FsbCB0byBhcmdwX3BhcnNlIGlzIHN1Y2ggdGhhdCBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQKKysgICBiYWNrIHRvIHRoZSB1c2VyIGluc3RlYWQgb2YgZXhpdGluZyk7IHJldHVybmluZyBFSU5WQUwgaXRzZWxmIHdvdWxkIHJlc3VsdAorKyAgIGluIGFuIGltbWVkaWF0ZSBzdG9wIHRvIHBhcnNpbmcgaW4gKmFsbCogY2FzZXMuICAqLworKyNkZWZpbmUgQVJHUF9FUlJfVU5LTk9XTglFMkJJRyAvKiBIdXJkIHNob3VsZCBuZXZlciBuZWVkIEUyQklHLiAgWFhYICovCisrCisrLyogU3BlY2lhbCB2YWx1ZXMgZm9yIHRoZSBLRVkgYXJndW1lbnQgdG8gYW4gYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbi4KKysgICBBUkdQX0VSUl9VTktOT1dOIHNob3VsZCBiZSByZXR1cm5lZCBpZiB0aGV5IGFyZW4ndCB1bmRlcnN0b29kLgorKworKyAgIFRoZSBzZXF1ZW5jZSBvZiBrZXlzIHRvIGEgcGFyc2luZyBmdW5jdGlvbiBpcyBlaXRoZXIgKHdoZXJlIGVhY2gKKysgICB1cHBlcmNhc2VkIHdvcmQgc2hvdWxkIGJlIHByZWZpeGVkIGJ5IGBBUkdQX0tFWV8nIGFuZCBvcHQgaXMgYSB1c2VyIGtleSk6CisrCisrICAgICAgIElOSVQgb3B0Li4uIE5PX0FSR1MgRU5EIFNVQ0NFU1MgIC0tIE5vIG5vbi1vcHRpb24gYXJndW1lbnRzIGF0IGFsbAorKyAgIG9yICBJTklUIChvcHQgfCBBUkcpLi4uIEVORCBTVUNDRVNTICAtLSBBbGwgbm9uLW9wdGlvbiBhcmdzIHBhcnNlZAorKyAgIG9yICBJTklUIChvcHQgfCBBUkcpLi4uIFNVQ0NFU1MgICAgICAtLSBTb21lIG5vbi1vcHRpb24gYXJnIHVucmVjb2duaXplZAorKworKyAgIFRoZSB0aGlyZCBjYXNlIGlzIHdoZXJlIGV2ZXJ5IHBhcnNlciByZXR1cm5lZCBBUkdQX0tFWV9VTktOT1dOIGZvciBhbgorKyAgIGFyZ3VtZW50LCBpbiB3aGljaCBjYXNlIHBhcnNpbmcgc3RvcHMgYXQgdGhhdCBhcmd1bWVudCAocmV0dXJuaW5nIHRoZQorKyAgIHVucGFyc2VkIGFyZ3VtZW50cyB0byB0aGUgY2FsbGVyIG9mIGFyZ3BfcGFyc2UgaWYgcmVxdWVzdGVkLCBvciBzdG9wcGluZworKyAgIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBub3QpLgorKworKyAgIElmIGFuIGVycm9yIG9jY3VycyAoZWl0aGVyIGRldGVjdGVkIGJ5IGFyZ3AsIG9yIGJlY2F1c2UgdGhlIHBhcnNpbmcKKysgICBmdW5jdGlvbiByZXR1cm5lZCBhbiBlcnJvciB2YWx1ZSksIHRoZW4gdGhlIHBhcnNlciBpcyBjYWxsZWQgd2l0aAorKyAgIEFSR1BfS0VZX0VSUk9SLCBhbmQgbm8gZnVydGhlciBjYWxscyBhcmUgbWFkZS4gICovCisrCisrLyogVGhpcyBpcyBub3QgYW4gb3B0aW9uIGF0IGFsbCwgYnV0IHJhdGhlciBhIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gIElmIGEKKysgICBwYXJzZXIgcmVjZWl2aW5nIHRoaXMga2V5IHJldHVybnMgc3VjY2VzcywgdGhlIGZhY3QgaXMgcmVjb3JkZWQsIGFuZCB0aGUKKysgICBBUkdQX0tFWV9OT19BUkdTIGNhc2Ugd29uJ3QgYmUgdXNlZC4gIEhPV0VWRVIsIGlmIHdoaWxlIHByb2Nlc3NpbmcgdGhlCisrICAgYXJndW1lbnQsIGEgcGFyc2VyIGZ1bmN0aW9uIGRlY3JlbWVudHMgdGhlIE5FWFQgZmllbGQgb2YgdGhlIHN0YXRlIGl0J3MKKysgICBwYXNzZWQsIHRoZSBvcHRpb24gd29uJ3QgYmUgY29uc2lkZXJlZCBwcm9jZXNzZWQ7IHRoaXMgaXMgdG8gYWxsb3cgeW91IHRvCisrICAgYWN0dWFsbHkgbW9kaWZ5IHRoZSBhcmd1bWVudCAocGVyaGFwcyBpbnRvIGFuIG9wdGlvbiksIGFuZCBoYXZlIGl0CisrICAgcHJvY2Vzc2VkIGFnYWluLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0FSRwkJMAorKy8qIFRoZXJlIGFyZSByZW1haW5pbmcgYXJndW1lbnRzIG5vdCBwYXJzZWQgYnkgYW55IHBhcnNlciwgd2hpY2ggbWF5IGJlIGZvdW5kCisrICAgc3RhcnRpbmcgYXQgKFNUQVRFLT5hcmd2ICsgU1RBVEUtPm5leHQpLiAgSWYgc3VjY2VzcyBpcyByZXR1cm5lZCwgYnV0CisrICAgU1RBVEUtPm5leHQgbGVmdCB1bnRvdWNoZWQsIGl0J3MgYXNzdW1lZCB0aGF0IGFsbCBhcmd1bWVudHMgd2VyZSBjb25zdW1lLAorKyAgIG90aGVyd2lzZSwgdGhlIHBhcnNlciBzaG91bGQgYWRqdXN0IFNUQVRFLT5uZXh0IHRvIHJlZmxlY3QgYW55IGFyZ3VtZW50cworKyAgIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0FSR1MJCTB4MTAwMDAwNgorKy8qIFRoZXJlIGFyZSBubyBtb3JlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXQgYWxsLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0VORAkJMHgxMDAwMDAxCisrLyogQmVjYXVzZSBpdCdzIGNvbW1vbiB0byB3YW50IHRvIGRvIHNvbWUgc3BlY2lhbCBwcm9jZXNzaW5nIGlmIHRoZXJlIGFyZW4ndAorKyAgIGFueSBub24tb3B0aW9uIGFyZ3MsIHVzZXIgcGFyc2VycyBhcmUgY2FsbGVkIHdpdGggdGhpcyBrZXkgaWYgdGhleSBkaWRuJ3QKKysgICBzdWNjZXNzZnVsbHkgcHJvY2VzcyBhbnkgbm9uLW9wdGlvbiBhcmd1bWVudHMuICBDYWxsZWQganVzdCBiZWZvcmUKKysgICBBUkdQX0tFWV9FTkQgKHdoZXJlIG1vcmUgZ2VuZXJhbCB2YWxpZGl0eSBjaGVja3Mgb24gcHJldmlvdXNseSBwYXJzZWQKKysgICBhcmd1bWVudHMgY2FuIHRha2UgcGxhY2UpLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX05PX0FSR1MJMHgxMDAwMDAyCisrLyogUGFzc2VkIGluIGJlZm9yZSBhbnkgcGFyc2luZyBpcyBkb25lLiAgQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBvZiBlYWNoCisrICAgZWxlbWVudCBvZiB0aGUgQ0hJTERfSU5QVVQgZmllbGQsIGlmIGFueSwgaW4gdGhlIHN0YXRlIHN0cnVjdHVyZSBpcworKyAgIGNvcGllZCB0byBlYWNoIGNoaWxkJ3Mgc3RhdGUgdG8gYmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIElOUFVUIGZpZWxkLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0lOSVQJCTB4MTAwMDAwMworKy8qIFVzZSBhZnRlciBhbGwgb3RoZXIga2V5cywgaW5jbHVkaW5nIFNVQ0NFU1MgJiBFTkQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfRklOSQkJMHgxMDAwMDA3CisrLyogUGFzc2VkIGluIHdoZW4gcGFyc2luZyBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gY29tcGxldGVkIChldmVuIGlmIHRoZXJlIGFyZQorKyAgIHN0aWxsIGFyZ3VtZW50cyByZW1haW5pbmcpLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX1NVQ0NFU1MJMHgxMDAwMDA0CisrLyogUGFzc2VkIGluIGlmIGFuIGVycm9yIG9jY3Vycy4gICovCisrI2RlZmluZSBBUkdQX0tFWV9FUlJPUgkJMHgxMDAwMDA1CisrCisrLyogQW4gYXJncCBzdHJ1Y3R1cmUgY29udGFpbnMgYSBzZXQgb2Ygb3B0aW9ucyBkZWNsYXJhdGlvbnMsIGEgZnVuY3Rpb24gdG8KKysgICBkZWFsIHdpdGggcGFyc2luZyBvbmUsIGRvY3VtZW50YXRpb24gc3RyaW5nLCBhIHBvc3NpYmxlIHZlY3RvciBvZiBjaGlsZAorKyAgIGFyZ3AncywgYW5kIHBlcmhhcHMgYSBmdW5jdGlvbiB0byBmaWx0ZXIgaGVscCBvdXRwdXQuICBXaGVuIGFjdHVhbGx5CisrICAgcGFyc2luZyBvcHRpb25zLCBnZXRvcHQgaXMgY2FsbGVkIHdpdGggdGhlIHVuaW9uIG9mIGFsbCB0aGUgYXJncAorKyAgIHN0cnVjdHVyZXMgY2hhaW5lZCB0b2dldGhlciB0aHJvdWdoIHRoZWlyIENISUxEIHBvaW50ZXJzLCB3aXRoIGNvbmZsaWN0cworKyAgIGJlaW5nIHJlc29sdmVkIGluIGZhdm9yIG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBjaGFpbi4gICovCisrc3RydWN0IGFyZ3AKKyt7CisrICAvKiBBbiBhcnJheSBvZiBhcmdwX29wdGlvbiBzdHJ1Y3R1cmVzLCB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggYm90aAorKyAgICAgTkFNRSBhbmQgS0VZIGhhdmluZyBhIHZhbHVlIG9mIDAuICAqLworKyAgX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdGlvbnM7CisrCisrICAvKiBXaGF0IHRvIGRvIHdpdGggYW4gb3B0aW9uIGZyb20gdGhpcyBzdHJ1Y3R1cmUuICBLRVkgaXMgdGhlIGtleQorKyAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcHRpb24sIGFuZCBBUkcgaXMgYW55IGFzc29jaWF0ZWQgYXJndW1lbnQgKE5VTEwgaWYKKysgICAgIG5vbmUgd2FzIHN1cHBsaWVkKS4gIElmIEtFWSBpc24ndCB1bmRlcnN0b29kLCBBUkdQX0VSUl9VTktOT1dOIHNob3VsZCBiZQorKyAgICAgcmV0dXJuZWQuICBJZiBhIG5vbi16ZXJvLCBub24tQVJHUF9FUlJfVU5LTk9XTiB2YWx1ZSBpcyByZXR1cm5lZCwgdGhlbgorKyAgICAgcGFyc2luZyBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5LCBhbmQgdGhhdCB2YWx1ZSBpcyByZXR1cm5lZCBmcm9tCisrICAgICBhcmdwX3BhcnNlKCkuICBGb3Igc3BlY2lhbCAobm9uLXVzZXItc3VwcGxpZWQpIHZhbHVlcyBvZiBLRVksIHNlZSB0aGUKKysgICAgIEFSR1BfS0VZXyBkZWZpbml0aW9ucyBiZWxvdy4gICovCisrICBhcmdwX3BhcnNlcl90IHBhcnNlcjsKKysKKysgIC8qIEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdCBvdGhlciBhcmd1bWVudHMgYXJlIHdhbnRlZCBieSB0aGlzIHByb2dyYW0uICBJdAorKyAgICAgaXMgb25seSB1c2VkIGJ5IGFyZ3BfdXNhZ2UgdG8gcHJpbnQgdGhlIGBVc2FnZTonIG1lc3NhZ2UuICBJZiBpdAorKyAgICAgY29udGFpbnMgbmV3bGluZXMsIHRoZSBzdHJpbmdzIHNlcGFyYXRlZCBieSB0aGVtIGFyZSBjb25zaWRlcmVkCisrICAgICBhbHRlcm5hdGl2ZSB1c2FnZSBwYXR0ZXJucywgYW5kIHByaW50ZWQgb24gc2VwYXJhdGUgbGluZXMgKGxpbmVzIGFmdGVyCisrICAgICB0aGUgZmlyc3QgYXJlIHByZWZpeCBieSBgICBvcjogJyBpbnN0ZWFkIG9mIGBVc2FnZTonKS4gICovCisrICBfX2NvbnN0IGNoYXIgKmFyZ3NfZG9jOworKworKyAgLyogSWYgbm9uLU5VTEwsIGEgc3RyaW5nIGNvbnRhaW5pbmcgZXh0cmEgdGV4dCB0byBiZSBwcmludGVkIGJlZm9yZSBhbmQKKysgICAgIGFmdGVyIHRoZSBvcHRpb25zIGluIGEgbG9uZyBoZWxwIG1lc3NhZ2UgKHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIHRhYgorKyAgICAgYFx2JyBjaGFyYWN0ZXIpLiAgKi8KKysgIF9fY29uc3QgY2hhciAqZG9jOworKworKyAgLyogQSB2ZWN0b3Igb2YgYXJncF9jaGlsZHJlbiBzdHJ1Y3R1cmVzLCB0ZXJtaW5hdGVkIGJ5IGEgbWVtYmVyIHdpdGggYSAwCisrICAgICBhcmdwIGZpZWxkLCBwb2ludGluZyB0byBjaGlsZCBhcmdwcyBzaG91bGQgYmUgcGFyc2VkIHdpdGggdGhpcyBvbmUuICBBbnkKKysgICAgIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgdGhpcyBhcmdwLCBvciBlYXJseSBhcmdwcyBpbiB0aGUKKysgICAgIENISUxEUkVOIGxpc3QuICBUaGlzIGZpZWxkIGlzIHVzZWZ1bCBpZiB5b3UgdXNlIGxpYnJhcmllcyB0aGF0IHN1cHBseQorKyAgICAgdGhlaXIgb3duIGFyZ3Agc3RydWN0dXJlLCB3aGljaCB5b3Ugd2FudCB0byB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCB5b3VyCisrICAgICBvd24uICAqLworKyAgX19jb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGRyZW47CisrCisrICAvKiBJZiBub24temVybywgdGhpcyBzaG91bGQgYmUgYSBmdW5jdGlvbiB0byBmaWx0ZXIgdGhlIG91dHB1dCBvZiBoZWxwCisrICAgICBtZXNzYWdlcy4gIEtFWSBpcyBlaXRoZXIgYSBrZXkgZnJvbSBhbiBvcHRpb24sIGluIHdoaWNoIGNhc2UgVEVYVCBpcworKyAgICAgdGhhdCBvcHRpb24ncyBoZWxwIHRleHQsIG9yIGEgc3BlY2lhbCBrZXkgZnJvbSB0aGUgQVJHUF9LRVlfSEVMUF8KKysgICAgIGRlZmluZXMsIGJlbG93LCBkZXNjcmliaW5nIHdoaWNoIG90aGVyIGhlbHAgdGV4dCBURVhUIGlzLiAgVGhlIGZ1bmN0aW9uCisrICAgICBzaG91bGQgcmV0dXJuIGVpdGhlciBURVhULCBpZiBpdCBzaG91bGQgYmUgdXNlZCBhcy1pcywgYSByZXBsYWNlbWVudAorKyAgICAgc3RyaW5nLCB3aGljaCBzaG91bGQgYmUgbWFsbG9jZWQsIGFuZCB3aWxsIGJlIGZyZWVkIGJ5IGFyZ3AsIG9yIE5VTEwsCisrICAgICBtZWFuaW5nIGBwcmludCBub3RoaW5nJy4gIFRoZSB2YWx1ZSBmb3IgVEVYVCBpcyAqYWZ0ZXIqIGFueSB0cmFuc2xhdGlvbgorKyAgICAgaGFzIGJlZW4gZG9uZSwgc28gaWYgYW55IG9mIHRoZSByZXBsYWNlbWVudCB0ZXh0IGFsc28gbmVlZHMgdHJhbnNsYXRpb24sCisrICAgICB0aGF0IHNob3VsZCBiZSBkb25lIGJ5IHRoZSBmaWx0ZXIgZnVuY3Rpb24uICBJTlBVVCBpcyBlaXRoZXIgdGhlIGlucHV0CisrICAgICBzdXBwbGllZCB0byBhcmdwX3BhcnNlLCBvciBOVUxMLCBpZiBhcmdwX2hlbHAgd2FzIGNhbGxlZCBkaXJlY3RseS4gICovCisrICBjaGFyICooKmhlbHBfZmlsdGVyKSAoaW50IF9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fdGV4dCwgdm9pZCAqX19pbnB1dCk7CisrCisrICAvKiBJZiBub24temVybyB0aGUgc3RyaW5ncyB1c2VkIGluIHRoZSBhcmdwIGxpYnJhcnkgYXJlIHRyYW5zbGF0ZWQgdXNpbmcKKysgICAgIHRoZSBkb21haW4gZGVzY3JpYmVkIGJ5IHRoaXMgc3RyaW5nLiAgT3RoZXJ3aXNlIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkCisrICAgICBkZWZhdWx0IGRvbWFpbiBpcyB1c2VkLiAgKi8KKysgIGNvbnN0IGNoYXIgKmFyZ3BfZG9tYWluOworK307CisrCisrLyogUG9zc2libGUgS0VZIGFyZ3VtZW50cyB0byBhIGhlbHAgZmlsdGVyIGZ1bmN0aW9uLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfUFJFX0RPQwkweDIwMDAwMDEgLyogSGVscCB0ZXh0IHByZWNlZWRpbmcgb3B0aW9ucy4gKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfUE9TVF9ET0MJMHgyMDAwMDAyIC8qIEhlbHAgdGV4dCBmb2xsb3dpbmcgb3B0aW9ucy4gKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfSEVBREVSCTB4MjAwMDAwMyAvKiBPcHRpb24gaGVhZGVyIHN0cmluZy4gKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfRVhUUkEJMHgyMDAwMDA0IC8qIEFmdGVyIGFsbCBvdGhlciBkb2N1bWVudGF0aW9uOworKwkJCQkJICAgICBURVhUIGlzIE5VTEwgZm9yIHRoaXMga2V5LiAgKi8KKysvKiBFeHBsYW5hdG9yeSBub3RlIGVtaXR0ZWQgd2hlbiBkdXBsaWNhdGUgb3B0aW9uIGFyZ3VtZW50cyBoYXZlIGJlZW4KKysgICBzdXBwcmVzc2VkLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfRFVQX0FSR1NfTk9URSAweDIwMDAwMDUKKysjZGVmaW5lIEFSR1BfS0VZX0hFTFBfQVJHU19ET0MJMHgyMDAwMDA2IC8qIEFyZ3VtZW50IGRvYyBzdHJpbmcuICAqLworKwwKKysvKiBXaGVuIGFuIGFyZ3AgaGFzIGEgbm9uLXplcm8gQ0hJTERSRU4gZmllbGQsIGl0IHNob3VsZCBwb2ludCB0byBhIHZlY3RvciBvZgorKyAgIGFyZ3BfY2hpbGQgc3RydWN0dXJlcywgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSBzdWJzaWRpYXJ5IGFyZ3AuICAqLworK3N0cnVjdCBhcmdwX2NoaWxkCisreworKyAgLyogVGhlIGNoaWxkIHBhcnNlci4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwICphcmdwOworKworKyAgLyogRmxhZ3MgZm9yIHRoaXMgY2hpbGQuICAqLworKyAgaW50IGZsYWdzOworKworKyAgLyogSWYgbm9uLXplcm8sIGFuIG9wdGlvbmFsIGhlYWRlciB0byBiZSBwcmludGVkIGluIGhlbHAgb3V0cHV0IGJlZm9yZSB0aGUKKysgICAgIGNoaWxkIG9wdGlvbnMuICBBcyBhIHNpZGUtZWZmZWN0LCBhIG5vbi16ZXJvIHZhbHVlIGZvcmNlcyB0aGUgY2hpbGQKKysgICAgIG9wdGlvbnMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlcjsgdG8gYWNoaWV2ZSB0aGlzIGVmZmVjdCB3aXRob3V0IGFjdHVhbGx5CisrICAgICBwcmludGluZyBhIGhlYWRlciBzdHJpbmcsIHVzZSBhIHZhbHVlIG9mICIiLiAgKi8KKysgIF9fY29uc3QgY2hhciAqaGVhZGVyOworKworKyAgLyogV2hlcmUgdG8gZ3JvdXAgdGhlIGNoaWxkIG9wdGlvbnMgcmVsYXRpdmUgdG8gdGhlIG90aGVyIChgY29uc29saWRhdGVkJykKKysgICAgIG9wdGlvbnMgaW4gdGhlIHBhcmVudCBhcmdwOyB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB0aGUgR1JPVVAgZmllbGQKKysgICAgIGluIGFyZ3Bfb3B0aW9uIHN0cnVjdHMsIGJ1dCBhbGwgY2hpbGQtZ3JvdXBpbmdzIGZvbGxvdyBwYXJlbnQgb3B0aW9ucyBhdAorKyAgICAgYSBwYXJ0aWN1bGFyIGdyb3VwIGxldmVsLiAgSWYgYm90aCB0aGlzIGZpZWxkIGFuZCBIRUFERVIgYXJlIHplcm8sIHRoZW4KKysgICAgIHRoZXkgYXJlbid0IGdyb3VwZWQgYXQgYWxsLCBidXQgcmF0aGVyIG1lcmdlZCB3aXRoIHRoZSBwYXJlbnQgb3B0aW9ucworKyAgICAgKG1lcmdpbmcgdGhlIGNoaWxkJ3MgZ3JvdXBpbmcgbGV2ZWxzIHdpdGggdGhlIHBhcmVudHMpLiAgKi8KKysgIGludCBncm91cDsKKyt9OworKwwKKysvKiBQYXJzaW5nIHN0YXRlLiAgVGhpcyBpcyBwcm92aWRlZCB0byBwYXJzaW5nIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYXJncCwKKysgICB3aGljaCBtYXkgZXhhbWluZSBhbmQsIGFzIG5vdGVkLCBtb2RpZnkgZmllbGRzLiAgKi8KKytzdHJ1Y3QgYXJncF9zdGF0ZQorK3sKKysgIC8qIFRoZSB0b3AgbGV2ZWwgQVJHUCBiZWluZyBwYXJzZWQuICAqLworKyAgX19jb25zdCBzdHJ1Y3QgYXJncCAqcm9vdF9hcmdwOworKworKyAgLyogVGhlIGFyZ3VtZW50IHZlY3RvciBiZWluZyBwYXJzZWQuICBNYXkgYmUgbW9kaWZpZWQuICAqLworKyAgaW50IGFyZ2M7CisrICBjaGFyICoqYXJndjsKKysKKysgIC8qIFRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBuZXh0IGFyZyB0aGF0IHRvIGJlIHBhcnNlZC4gIE1heSBiZSBtb2RpZmllZC4gKi8KKysgIGludCBuZXh0OworKworKyAgLyogVGhlIGZsYWdzIHN1cHBsaWVkIHRvIGFyZ3BfcGFyc2UuICBNYXkgYmUgbW9kaWZpZWQuICAqLworKyAgdW5zaWduZWQgZmxhZ3M7CisrCisrICAvKiBXaGlsZSBjYWxsaW5nIGEgcGFyc2luZyBmdW5jdGlvbiB3aXRoIGEga2V5IG9mIEFSR1BfS0VZX0FSRywgdGhpcyBpcyB0aGUKKysgICAgIG51bWJlciBvZiB0aGUgY3VycmVudCBhcmcsIHN0YXJ0aW5nIGF0IHplcm8sIGFuZCBpbmNyZW1lbnRlZCBhZnRlciBlYWNoCisrICAgICBzdWNoIGNhbGwgcmV0dXJucy4gIEF0IGFsbCBvdGhlciB0aW1lcywgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIHN1Y2gKKysgICAgIGFyZ3VtZW50cyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQuICAqLworKyAgdW5zaWduZWQgYXJnX251bTsKKysKKysgIC8qIElmIG5vbi16ZXJvLCB0aGUgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgYXJndW1lbnQgZm9sbG93aW5nIGEgc3BlY2lhbAorKyAgICAgYC0tJyBhcmd1bWVudCAod2hpY2ggcHJldmVudHMgYW55dGhpbmcgZm9sbG93aW5nIGJlaW5nIGludGVycHJldGVkIGFzIGFuCisrICAgICBvcHRpb24pLiAgT25seSBzZXQgb25jZSBhcmd1bWVudCBwYXJzaW5nIGhhcyBwcm9jZWVkZWQgcGFzdCB0aGlzIHBvaW50LiAqLworKyAgaW50IHF1b3RlZDsKKysKKysgIC8qIEFuIGFyYml0cmFyeSBwb2ludGVyIHBhc3NlZCBpbiBmcm9tIHRoZSB1c2VyLiAgKi8KKysgIHZvaWQgKmlucHV0OworKyAgLyogVmFsdWVzIHRvIHBhc3MgdG8gY2hpbGQgcGFyc2Vycy4gIFRoaXMgdmVjdG9yIHdpbGwgYmUgdGhlIHNhbWUgbGVuZ3RoIGFzCisrICAgICB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGZvciB0aGUgY3VycmVudCBwYXJzZXIuICAqLworKyAgdm9pZCAqKmNoaWxkX2lucHV0czsKKysKKysgIC8qIEZvciB0aGUgcGFyc2VyJ3MgdXNlLiAgSW5pdGlhbGl6ZWQgdG8gMC4gICovCisrICB2b2lkICpob29rOworKworKyAgLyogVGhlIG5hbWUgdXNlZCB3aGVuIHByaW50aW5nIG1lc3NhZ2VzLiAgVGhpcyBpcyBpbml0aWFsaXplZCB0byBBUkdWWzBdLAorKyAgICAgb3IgUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUgaWYgdGhhdCBpcyB1bmF2YWlsYWJsZS4gICovCisrICBjaGFyICpuYW1lOworKworKyAgLyogU3RyZWFtcyB1c2VkIHdoZW4gYXJncCBwcmludHMgc29tZXRoaW5nLiAgKi8KKysgIEZJTEUgKmVycl9zdHJlYW07CQkvKiBGb3IgZXJyb3JzOyBpbml0aWFsaXplZCB0byBzdGRlcnIuICovCisrICBGSUxFICpvdXRfc3RyZWFtOwkJLyogRm9yIGluZm9ybWF0aW9uOyBpbml0aWFsaXplZCB0byBzdGRvdXQuICovCisrCisrICB2b2lkICpwc3RhdGU7CQkJLyogUHJpdmF0ZSwgZm9yIHVzZSBieSBhcmdwLiAgKi8KKyt9OworKwwKKysvKiBGbGFncyBmb3IgYXJncF9wYXJzZSAobm90ZSB0aGF0IHRoZSBkZWZhdWx0cyBhcmUgdGhvc2UgdGhhdCBhcmUKKysgICBjb252ZW5pZW50IGZvciBwcm9ncmFtIGNvbW1hbmQgbGluZSBwYXJzaW5nKTogKi8KKysKKysvKiBEb24ndCBpZ25vcmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgQVJHVi4gIE5vcm1hbGx5IChhbmQgYWx3YXlzIHVubGVzcworKyAgIEFSR1BfTk9fRVJSUyBpcyBzZXQpIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBhcmd1bWVudCB2ZWN0b3IgaXMKKysgICBza2lwcGVkIGZvciBvcHRpb24gcGFyc2luZyBwdXJwb3NlcywgYXMgaXQgY29ycmVzcG9uZHMgdG8gdGhlIHByb2dyYW0gbmFtZQorKyAgIGluIGEgY29tbWFuZCBsaW5lLiAgKi8KKysjZGVmaW5lIEFSR1BfUEFSU0VfQVJHVjAgIDB4MDEKKysKKysvKiBEb24ndCBwcmludCBlcnJvciBtZXNzYWdlcyBmb3IgdW5rbm93biBvcHRpb25zIHRvIHN0ZGVycjsgdW5sZXNzIHRoaXMgZmxhZworKyAgIGlzIHNldCwgQVJHUF9QQVJTRV9BUkdWMCBpcyBpZ25vcmVkLCBhcyBBUkdWWzBdIGlzIHVzZWQgYXMgdGhlIHByb2dyYW0KKysgICBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcy4gIFRoaXMgZmxhZyBpbXBsaWVzIEFSR1BfTk9fRVhJVCAob24gdGhlCisrICAgYXNzdW1wdGlvbiB0aGF0IHNpbGVudCBleGl0aW5nIHVwb24gZXJyb3JzIGlzIGJhZCBiZWhhdmlvdXIpLiAgKi8KKysjZGVmaW5lIEFSR1BfTk9fRVJSUwkweDAyCisrCisrLyogRG9uJ3QgcGFyc2UgYW55IG5vbi1vcHRpb24gYXJncy4gIE5vcm1hbGx5IG5vbi1vcHRpb24gYXJncyBhcmUgcGFyc2VkIGJ5CisrICAgY2FsbGluZyB0aGUgcGFyc2UgZnVuY3Rpb25zIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfQVJHLCBhbmQgdGhlIGFjdHVhbCBhcmcKKysgICBhcyB0aGUgdmFsdWUuICBTaW5jZSBpdCdzIGltcG9zc2libGUgdG8ga25vdyB3aGljaCBwYXJzZSBmdW5jdGlvbiB3YW50cyB0bworKyAgIGhhbmRsZSBpdCwgZWFjaCBvbmUgaXMgY2FsbGVkIGluIHR1cm4sIHVudGlsIG9uZSByZXR1cm5zIDAgb3IgYW4gZXJyb3IKKysgICBvdGhlciB0aGFuIEFSR1BfRVJSX1VOS05PV047IGlmIGFuIGFyZ3VtZW50IGlzIGhhbmRsZWQgYnkgbm8gb25lLCB0aGUKKysgICBhcmdwX3BhcnNlIHJldHVybnMgcHJlbWF0dXJlbHkgKGJ1dCB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mIDApLiAgSWYgYWxsCisrICAgYXJncyBoYXZlIGJlZW4gcGFyc2VkIHdpdGhvdXQgZXJyb3IsIGFsbCBwYXJzaW5nIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9uZQorKyAgIGxhc3QgdGltZSB3aXRoIGEga2V5IG9mIEFSR1BfS0VZX0VORC4gIFRoaXMgZmxhZyBuZWVkbid0IG5vcm1hbGx5IGJlIHNldCwKKysgICBhcyB0aGUgbm9ybWFsIGJlaGF2aW9yIGlzIHRvIHN0b3AgcGFyc2luZyBhcyBzb29uIGFzIHNvbWUgYXJndW1lbnQgY2FuJ3QKKysgICBiZSBoYW5kbGVkLiAgKi8KKysjZGVmaW5lIEFSR1BfTk9fQVJHUwkweDA0CisrCisrLyogUGFyc2Ugb3B0aW9ucyBhbmQgYXJndW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgb2NjdXIgb24gdGhlIGNvbW1hbmQKKysgICBsaW5lIC0tIG5vcm1hbGx5IHRoZXkncmUgcmVhcnJhbmdlZCBzbyB0aGF0IGFsbCBvcHRpb25zIGNvbWUgZmlyc3QuICovCisrI2RlZmluZSBBUkdQX0lOX09SREVSCTB4MDgKKysKKysvKiBEb24ndCBwcm92aWRlIHRoZSBzdGFuZGFyZCBsb25nIG9wdGlvbiAtLWhlbHAsIHdoaWNoIGNhdXNlcyB1c2FnZSBhbmQKKysgICAgICBvcHRpb24gaGVscCBpbmZvcm1hdGlvbiB0byBiZSBvdXRwdXQgdG8gc3Rkb3V0LCBhbmQgZXhpdCAoMCkgY2FsbGVkLiAqLworKyNkZWZpbmUgQVJHUF9OT19IRUxQCTB4MTAKKysKKysvKiBEb24ndCBleGl0IG9uIGVycm9ycyAodGhleSBtYXkgc3RpbGwgcmVzdWx0IGluIGVycm9yIG1lc3NhZ2VzKS4gICovCisrI2RlZmluZSBBUkdQX05PX0VYSVQJMHgyMAorKworKy8qIFVzZSB0aGUgZ251IGdldG9wdCBgbG9uZy1vbmx5JyBydWxlcyBmb3IgcGFyc2luZyBhcmd1bWVudHMuICAqLworKyNkZWZpbmUgQVJHUF9MT05HX09OTFkJMHg0MAorKworKy8qIFR1cm5zIG9mZiBhbnkgbWVzc2FnZS1wcmludGluZy9leGl0aW5nIG9wdGlvbnMuICAqLworKyNkZWZpbmUgQVJHUF9TSUxFTlQgICAgKEFSR1BfTk9fRVhJVCB8IEFSR1BfTk9fRVJSUyB8IEFSR1BfTk9fSEVMUCkKKysKKysvKiBQYXJzZSB0aGUgb3B0aW9ucyBzdHJpbmdzIGluIEFSR0MgJiBBUkdWIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucyBpbiBBUkdQLgorKyAgIEZMQUdTIGlzIG9uZSBvZiB0aGUgQVJHUF8gZmxhZ3MgYWJvdmUuICBJZiBBUkdfSU5ERVggaXMgbm9uLU5VTEwsIHRoZQorKyAgIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0IHVucGFyc2VkIG9wdGlvbiBpcyByZXR1cm5lZCBpbiBpdC4gIElmIGFuCisrICAgdW5rbm93biBvcHRpb24gaXMgcHJlc2VudCwgQVJHUF9FUlJfVU5LTk9XTiBpcyByZXR1cm5lZDsgaWYgc29tZSBwYXJzZXIKKysgICByb3V0aW5lIHJldHVybmVkIGEgbm9uLXplcm8gdmFsdWUsIGl0IGlzIHJldHVybmVkOyBvdGhlcndpc2UgMCBpcworKyAgIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBtYXkgYWxzbyBjYWxsIGV4aXQgdW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZworKyAgIGlzIHNldC4gIElOUFVUIGlzIGEgcG9pbnRlciB0byBhIHZhbHVlIHRvIGJlIHBhc3NlZCBpbiB0byB0aGUgcGFyc2VyLiAgKi8KKytleHRlcm4gZXJyb3JfdCBhcmdwX3BhcnNlIChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCQkgICBpbnQgX19hcmdjLCBjaGFyICoqX19yZXN0cmljdCBfX2FyZ3YsCisrCQkJICAgdW5zaWduZWQgX19mbGFncywgaW50ICpfX3Jlc3RyaWN0IF9fYXJnX2luZGV4LAorKwkJCSAgIHZvaWQgKl9fcmVzdHJpY3QgX19pbnB1dCk7CisrDAorKy8qIEdsb2JhbCB2YXJpYWJsZXMuICAqLworKworKy8qIElmIGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQKKysgICBvcHRpb24gLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaAorKyAgIHdpbGwgcHJpbnQgdGhpcyBzdHJpbmcgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGFuZCBleGl0ICh1bmxlc3MgdGhlCisrICAgQVJHUF9OT19FWElUIGZsYWcgaXMgdXNlZCkuICBPdmVycmlkZGVuIGJ5IEFSR1BfUFJPR1JBTV9WRVJTSU9OX0hPT0suICAqLworK2V4dGVybiBfX2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uOworKworKy8qIElmIGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQKKysgICBvcHRpb24gLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaAorKyAgIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2l0aCBhIHN0cmVhbSB0byBwcmludCB0aGUgdmVyc2lvbiB0byBhbmQgYSBwb2ludGVyIHRvCisrICAgdGhlIGN1cnJlbnQgcGFyc2luZyBzdGF0ZSwgYW5kIHRoZW4gZXhpdHMgKHVubGVzcyB0aGUgQVJHUF9OT19FWElUIGZsYWcgaXMKKysgICB1c2VkKS4gIFRoaXMgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW50IG92ZXIgQVJHUF9QUk9HUkFNX1ZFUlNJT04uICAqLworK2V4dGVybiB2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisrCQkJCQkgIHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0CisrCQkJCQkgIF9fc3RhdGUpOworKworKy8qIElmIGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0sIGl0IHNob3VsZCBwb2ludCB0byBzdHJpbmcgdGhhdCBpcworKyAgIHRoZSBidWctcmVwb3J0aW5nIGFkZHJlc3MgZm9yIHRoZSBwcm9ncmFtLiAgSXQgd2lsbCBiZSBwcmludGVkIGJ5CisrICAgYXJncF9oZWxwIGlmIHRoZSBBUkdQX0hFTFBfQlVHX0FERFIgZmxhZyBpcyBzZXQgKGFzIGl0IGlzIGJ5IHZhcmlvdXMKKysgICBzdGFuZGFyZCBoZWxwIG1lc3NhZ2VzKSwgZW1iZWRkZWQgaW4gYSBzZW50ZW5jZSB0aGF0IHNheXMgc29tZXRoaW5nIGxpa2UKKysgICBgUmVwb3J0IGJ1Z3MgdG8gQUREUi4nLiAgKi8KKytleHRlcm4gX19jb25zdCBjaGFyICphcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3M7CisrCisrLyogVGhlIGV4aXQgc3RhdHVzIHRoYXQgYXJncCB3aWxsIHVzZSB3aGVuIGV4aXRpbmcgZHVlIHRvIGEgcGFyc2luZyBlcnJvci4KKysgICBJZiBub3QgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgdGhpcyBkZWZhdWx0cyB0byBFWF9VU0FHRSBmcm9tCisrICAgPHN5c2V4aXRzLmg+LiAgKi8KKytleHRlcm4gZXJyb3JfdCBhcmdwX2Vycl9leGl0X3N0YXR1czsKKysMCisrLyogRmxhZ3MgZm9yIGFyZ3BfaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfVVNBR0UJCTB4MDEgLyogYSBVc2FnZTogbWVzc2FnZS4gKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TSE9SVF9VU0FHRQkweDAyIC8qICAiIGJ1dCBkb24ndCBhY3R1YWxseSBwcmludCBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NFRQkJMHgwNCAvKiBhIGBUcnkgLi4uIGZvciBtb3JlIGhlbHAnIG1lc3NhZ2UuICovCisrI2RlZmluZSBBUkdQX0hFTFBfTE9ORwkJMHgwOCAvKiBhIGxvbmcgaGVscCBtZXNzYWdlLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1BSRV9ET0MJMHgxMCAvKiBkb2Mgc3RyaW5nIHByZWNlZGluZyBsb25nIGhlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1BPU1RfRE9DCTB4MjAgLyogZG9jIHN0cmluZyBmb2xsb3dpbmcgbG9uZyBoZWxwLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9ET0MJCShBUkdQX0hFTFBfUFJFX0RPQyB8IEFSR1BfSEVMUF9QT1NUX0RPQykKKysjZGVmaW5lIEFSR1BfSEVMUF9CVUdfQUREUgkweDQwIC8qIGJ1ZyByZXBvcnQgYWRkcmVzcyAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0xPTkdfT05MWQkweDgwIC8qIG1vZGlmeSBvdXRwdXQgYXBwcm9wcmlhdGVseSB0bworKwkJCQkJcmVmbGVjdCBBUkdQX0xPTkdfT05MWSBtb2RlLiAgKi8KKysKKysvKiBUaGVzZSBBUkdQX0hFTFAgZmxhZ3MgYXJlIG9ubHkgdW5kZXJzdG9vZCBieSBhcmdwX3N0YXRlX2hlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0VYSVRfRVJSCTB4MTAwIC8qIENhbGwgZXhpdCgxKSBpbnN0ZWFkIG9mIHJldHVybmluZy4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfRVhJVF9PSwkweDIwMCAvKiBDYWxsIGV4aXQoMCkgaW5zdGVhZCBvZiByZXR1cm5pbmcuICAqLworKworKy8qIFRoZSBzdGFuZGFyZCB0aGluZyB0byBkbyBhZnRlciBhIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcgZXJyb3IsIGlmIGFuCisrICAgZXJyb3IgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIHByaW50ZWQuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NURF9FUlIgXAorKyAgKEFSR1BfSEVMUF9TRUUgfCBBUkdQX0hFTFBfRVhJVF9FUlIpCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGFmdGVyIGEgcHJvZ3JhbSBjb21tYW5kIGxpbmUgcGFyc2luZyBlcnJvciwgaWYgbm8KKysgICBtb3JlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gcHJpbnRlZC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX1VTQUdFIFwKKysgIChBUkdQX0hFTFBfU0hPUlRfVVNBR0UgfCBBUkdQX0hFTFBfU0VFIHwgQVJHUF9IRUxQX0VYSVRfRVJSKQorKy8qIFRoZSBzdGFuZGFyZCB0aGluZyB0byBkbyBpbiByZXNwb25zZSB0byBhIC0taGVscCBvcHRpb24uICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NURF9IRUxQIFwKKysgIChBUkdQX0hFTFBfU0hPUlRfVVNBR0UgfCBBUkdQX0hFTFBfTE9ORyB8IEFSR1BfSEVMUF9FWElUX09LIFwKKysgICB8IEFSR1BfSEVMUF9ET0MgfCBBUkdQX0hFTFBfQlVHX0FERFIpCisrCisrLyogT3V0cHV0IGEgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBTVFJFQU0uICBGTEFHUyBhcmUgZnJvbSB0aGUgc2V0CisrICAgQVJHUF9IRUxQXyouICAqLworK2V4dGVybiB2b2lkIGFyZ3BfaGVscCAoX19jb25zdCBzdHJ1Y3QgYXJncCAqX19yZXN0cmljdCBfX2FyZ3AsCisrCQkgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKysJCSAgICAgICB1bnNpZ25lZCBfX2ZsYWdzLCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSk7CisrDAorKy8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhbiBhcmdwCisrICAgcGFyc2luZyByb3V0aW5lICh0aHVzIHRha2luZyBhbiBhcmdwX3N0YXRlIHN0cnVjdHVyZSBhcyB0aGUgZmlyc3QKKysgICBhcmd1bWVudCkuICBUaGV5IG1heSBvciBtYXkgbm90IHByaW50IGFuIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQsIGRlcGVuZGluZworKyAgIG9uIHRoZSBmbGFncyBpbiBTVEFURSAtLSBpbiBhbnkgY2FzZSwgdGhlIGNhbGxlciBzaG91bGQgYmUgcHJlcGFyZWQgZm9yCisrICAgdGhlbSAqbm90KiB0byBleGl0LCBhbmQgc2hvdWxkIHJldHVybiBhbiBhcHByb3BpYXRlIGVycm9yIGFmdGVyIGNhbGxpbmcKKysgICB0aGVtLiAgW2FyZ3BfdXNhZ2UgJiBhcmdwX2Vycm9yIHNob3VsZCBwcm9iYWJseSBiZSBjYWxsZWQgYXJncF9zdGF0ZV8uLi4sCisrICAgYnV0IHRoZXkncmUgdXNlZCBvZnRlbiBlbm91Z2ggdGhhdCB0aGV5IHNob3VsZCBiZSBzaG9ydF0gICovCisrCisrLyogT3V0cHV0LCBpZiBhcHByb3ByaWF0ZSwgYSB1c2FnZSBtZXNzYWdlIGZvciBTVEFURSB0byBTVFJFQU0uICBGTEFHUyBhcmUKKysgICBmcm9tIHRoZSBzZXQgQVJHUF9IRUxQXyouICAqLworK2V4dGVybiB2b2lkIGFyZ3Bfc3RhdGVfaGVscCAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorKwkJCSAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKysJCQkgICAgIHVuc2lnbmVkIGludCBfX2ZsYWdzKTsKKysvKiBQb3NzaWJseSBvdXRwdXQgdGhlIHN0YW5kYXJkIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gc3RkZXJyIGFuZCBleGl0LiAgKi8KKytleHRlcm4gdm9pZCBhcmdwX3VzYWdlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3N0YXRlKTsKKysKKysvKiBJZiBhcHByb3ByaWF0ZSwgcHJpbnQgdGhlIHByaW50ZiBzdHJpbmcgRk1UIGFuZCBmb2xsb3dpbmcgYXJncywgcHJlY2VkZWQKKysgICBieSB0aGUgcHJvZ3JhbSBuYW1lIGFuZCBgOicsIHRvIHN0ZGVyciwgYW5kIGZvbGxvd2VkIGJ5IGEgYFRyeSAuLi4gLS1oZWxwJworKyAgIG1lc3NhZ2UsIHRoZW4gZXhpdCAoMSkuICAqLworK2V4dGVybiB2b2lkIGFyZ3BfZXJyb3IgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSwKKysJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKKysgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOworKy8qIFNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGdudSBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24gZXJyb3IoKSwgYnV0IHdpbGwKKysgICByZXNwZWN0IHRoZSBBUkdQX05PX0VYSVQgYW5kIEFSR1BfTk9fRVJSUyBmbGFncyBpbiBTVEFURSwgYW5kIHdpbGwgcHJpbnQKKysgICB0byBTVEFURS0+ZXJyX3N0cmVhbS4gIFRoaXMgaXMgdXNlZnVsIGZvciBhcmd1bWVudCBwYXJzaW5nIGNvZGUgdGhhdCBpcworKyAgIHNoYXJlZCBiZXR3ZWVuIHByb2dyYW0gc3RhcnR1cCAod2hlbiBleGl0aW5nIGlzIGRlc2lyZWQpIGFuZCBydW50aW1lCisrICAgb3B0aW9uIHBhcnNpbmcgKHdoZW4gdHlwaWNhbGx5IGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgaW5zdGVhZCkuICBUaGUKKysgICBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgYXJncF9lcnJvciBpcyB0aGF0IHRoZSBsYXR0ZXIgaXMgZm9yCisrICAgKnBhcnNpbmcgZXJyb3JzKiwgYW5kIHRoZSBmb3JtZXIgaXMgZm9yIG90aGVyIHByb2JsZW1zIHRoYXQgb2NjdXIgZHVyaW5nCisrICAgcGFyc2luZyBidXQgZG9uJ3QgcmVmbGVjdCBhIChzeW50YWN0aWMpIHByb2JsZW0gd2l0aCB0aGUgaW5wdXQuICAqLworK2V4dGVybiB2b2lkIGFyZ3BfZmFpbHVyZSAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorKwkJCSAgaW50IF9fc3RhdHVzLCBpbnQgX19lcnJudW0sCisrCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKKysgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpOworKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgb3B0aW9uIE9QVCBpcyBhIHZhbGlkIHNob3J0IG9wdGlvbi4gICovCisrZXh0ZXJuIGludCBfb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrZXh0ZXJuIGludCBfX29wdGlvbl9pc19zaG9ydCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSBfX1RIUk9XOworKworKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgb3B0aW9uIE9QVCBpcyBpbiBmYWN0IHRoZSBsYXN0ICh1bnVzZWQpIGVudHJ5IGluIGFuCisrICAgb3B0aW9ucyBhcnJheS4gICovCisrZXh0ZXJuIGludCBfb3B0aW9uX2lzX2VuZCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSBfX1RIUk9XOworK2V4dGVybiBpbnQgX19vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrCisrLyogUmV0dXJuIHRoZSBpbnB1dCBmaWVsZCBmb3IgQVJHUCBpbiB0aGUgcGFyc2VyIGNvcnJlc3BvbmRpbmcgdG8gU1RBVEU7IHVzZWQKKysgICBieSB0aGUgaGVscCByb3V0aW5lcy4gICovCisrLyogV2UgdGhpbmsgdGhpcyBzaG91bGQgbm90IGJlIGV4cG9ydGVkICovCisrZXh0ZXJuIHZvaWQgKl9fYXJncF9pbnB1dCAoX19jb25zdCBzdHJ1Y3QgYXJncCAqX19yZXN0cmljdCBfX2FyZ3AsCisrCQkJICAgX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlKQorKyAgICAgX19USFJPVzsKKysMCisrI2lmZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisrCisrIyBpZm5kZWYgQVJHUF9FSQorKyMgIGRlZmluZSBBUkdQX0VJIF9fZXh0ZXJuX2lubGluZQorKyMgZW5kaWYKKysKKytBUkdQX0VJIHZvaWQKKythcmdwX3VzYWdlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3N0YXRlKQorK3sKKysgIGFyZ3Bfc3RhdGVfaGVscCAoX19zdGF0ZSwgc3RkZXJyLCBBUkdQX0hFTFBfU1REX1VTQUdFKTsKKyt9CisrCisrQVJHUF9FSSBpbnQKKytfX05USCAoX19vcHRpb25faXNfc2hvcnQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkpCisreworKyAgaWYgKF9fb3B0LT5mbGFncyAmIE9QVElPTl9ET0MpCisrICAgIHJldHVybiAwOworKyAgZWxzZQorKyAgICB7CisrICAgICAgaW50IF9fa2V5ID0gX19vcHQtPmtleTsKKysgICAgICByZXR1cm4gX19rZXkgPiAwICYmIF9fa2V5IDw9IFVDSEFSX01BWCAmJiBpc3ByaW50IChfX2tleSk7CisrICAgIH0KKyt9CisrCisrQVJHUF9FSSBpbnQKKytfX05USCAoX19vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpKQorK3sKKysgIHJldHVybiAhX19vcHQtPmtleSAmJiAhX19vcHQtPm5hbWUgJiYgIV9fb3B0LT5kb2MgJiYgIV9fb3B0LT5ncm91cDsKKyt9CisrI2VuZGlmIC8qIFVzZSBleHRlcm4gaW5saW5lcy4gICovCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogYXJncC5oICovCitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaCBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yOTFlZGZlCistLS0gL2Rldi9udWxsCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oCitAQCAtMCwwICsxLDEzNiBAQAorKy8qIEludGVybmFsIGRlY2xhcmF0aW9ucyBmb3IgZ2V0b3B0LgorKyAgIENvcHlyaWdodCAoQykgMTk4OS0xOTk0LDE5OTYtMTk5OSwyMDAxLDIwMDMsMjAwNAorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9HRVRPUFRfSU5UX0gKKysjZGVmaW5lIF9HRVRPUFRfSU5UX0ggIDEKKysKKytleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWwgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19sb25nX29ubHkpIGF0dHJpYnV0ZV9oaWRkZW47CisrCisrCisrLyogUmVlbnRyYW50IHZlcnNpb25zIHdoaWNoIGNhbiBoYW5kbGUgcGFyc2luZyBtdWx0aXBsZSBhcmd1bWVudAorKyAgIHZlY3RvcnMgYXQgdGhlIHNhbWUgdGltZS4gICovCisrCisrLyogRm9yIF9fb3JkZXJpbmcgbWVtYmVyICovCisrZW51bSB7CisrICAgICAgIFJFUVVJUkVfT1JERVIsIFBFUk1VVEUsIFJFVFVSTl9JTl9PUkRFUgorK307CisrCisrLyogRGF0YSB0eXBlIGZvciByZWVudHJhbnQgZnVuY3Rpb25zLiAgKi8KKysKKytzdHJ1Y3QgX2dldG9wdF9kYXRhCisreworKyAgLyogVGhlc2UgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZ2xvYmFsCisrICAgICB2YXJpYWJsZXMsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIHVzZWQgZm9yIHRoZSByZWVudHJhbnQKKysgICAgIHZlcnNpb25zIG9mIGdldG9wdC4gICovCisrICBpbnQgb3B0aW5kOworKyAgaW50IG9wdGVycjsKKysgIGNoYXIgKm9wdGFyZzsKKysgIHNtYWxsdWludCBvcHRvcHQ7IC8qIHdlIHN0b3JlIGNoYXJhY3RlcnMgaGVyZSwgYSBieXRlIGlzIGVub3VnaCAqLworKworKyAgLyogSW50ZXJuYWwgbWVtYmVycy4gICovCisrCisrICAvKiBUcnVlIGlmIHRoZSBpbnRlcm5hbCBtZW1iZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4gICovCisrICBzbWFsbGludCBfX2luaXRpYWxpemVkOworKworKyAgLyogRGVzY3JpYmUgaG93IHRvIGRlYWwgd2l0aCBvcHRpb25zIHRoYXQgZm9sbG93IG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cy4KKysKKysgICAgIElmIHRoZSBjYWxsZXIgZGlkIG5vdCBzcGVjaWZ5IGFueXRoaW5nLAorKyAgICAgdGhlIGRlZmF1bHQgaXMgUkVRVUlSRV9PUkRFUiBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKysgICAgIFBPU0lYTFlfQ09SUkVDVCBpcyBkZWZpbmVkLCBQRVJNVVRFIG90aGVyd2lzZS4KKysKKysgICAgIFJFUVVJUkVfT1JERVIgbWVhbnMgZG9uJ3QgcmVjb2duaXplIHRoZW0gYXMgb3B0aW9uczsKKysgICAgIHN0b3Agb3B0aW9uIHByb2Nlc3Npbmcgd2hlbiB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBpcyBzZWVuLgorKyAgICAgVGhpcyBpcyB3aGF0IFVuaXggZG9lcy4KKysgICAgIFRoaXMgbW9kZSBvZiBvcGVyYXRpb24gaXMgc2VsZWN0ZWQgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50CisrICAgICB2YXJpYWJsZSBQT1NJWExZX0NPUlJFQ1QsIG9yIHVzaW5nIGArJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyCisrICAgICBvZiB0aGUgbGlzdCBvZiBvcHRpb24gY2hhcmFjdGVycy4KKysKKysgICAgIFBFUk1VVEUgaXMgdGhlIGRlZmF1bHQuICBXZSBwZXJtdXRlIHRoZSBjb250ZW50cyBvZiBBUkdWIGFzIHdlCisrICAgICBzY2FuLCBzbyB0aGF0IGV2ZW50dWFsbHkgYWxsIHRoZSBub24tb3B0aW9ucyBhcmUgYXQgdGhlIGVuZC4KKysgICAgIFRoaXMgYWxsb3dzIG9wdGlvbnMgdG8gYmUgZ2l2ZW4gaW4gYW55IG9yZGVyLCBldmVuIHdpdGggcHJvZ3JhbXMKKysgICAgIHRoYXQgd2VyZSBub3Qgd3JpdHRlbiB0byBleHBlY3QgdGhpcy4KKysKKysgICAgIFJFVFVSTl9JTl9PUkRFUiBpcyBhbiBvcHRpb24gYXZhaWxhYmxlIHRvIHByb2dyYW1zIHRoYXQgd2VyZQorKyAgICAgd3JpdHRlbiB0byBleHBlY3Qgb3B0aW9ucyBhbmQgb3RoZXIgQVJHVi1lbGVtZW50cyBpbiBhbnkgb3JkZXIKKysgICAgIGFuZCB0aGF0IGNhcmUgYWJvdXQgdGhlIG9yZGVyaW5nIG9mIHRoZSB0d28uICBXZSBkZXNjcmliZSBlYWNoCisrICAgICBub24tb3B0aW9uIEFSR1YtZWxlbWVudCBhcyBpZiBpdCB3ZXJlIHRoZSBhcmd1bWVudCBvZiBhbiBvcHRpb24KKysgICAgIHdpdGggY2hhcmFjdGVyIGNvZGUgMS4gIFVzaW5nIGAtJyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorKyAgICAgbGlzdCBvZiBvcHRpb24gY2hhcmFjdGVycyBzZWxlY3RzIHRoaXMgbW9kZSBvZiBvcGVyYXRpb24uCisrCisrICAgICBUaGUgc3BlY2lhbCBhcmd1bWVudCBgLS0nIGZvcmNlcyBhbiBlbmQgb2Ygb3B0aW9uLXNjYW5uaW5nIHJlZ2FyZGxlc3MKKysgICAgIG9mIHRoZSB2YWx1ZSBvZiBgb3JkZXJpbmcnLiAgSW4gdGhlIGNhc2Ugb2YgUkVUVVJOX0lOX09SREVSLCBvbmx5CisrICAgICBgLS0nIGNhbiBjYXVzZSBgZ2V0b3B0JyB0byByZXR1cm4gLTEgd2l0aCBgb3B0aW5kJyAhPSBBUkdDLiAgKi8KKysgIHNtYWxsaW50IF9fb3JkZXJpbmc7CisrCisrICAvKiBJZiB0aGUgUE9TSVhMWV9DT1JSRUNUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldC4gICovCisrICBzbWFsbGludCBfX3Bvc2l4bHlfY29ycmVjdDsKKysKKysgIC8qIFRoZSBuZXh0IGNoYXIgdG8gYmUgc2Nhbm5lZCBpbiB0aGUgb3B0aW9uLWVsZW1lbnQKKysgICAgIGluIHdoaWNoIHRoZSBsYXN0IG9wdGlvbiBjaGFyYWN0ZXIgd2UgcmV0dXJuZWQgd2FzIGZvdW5kLgorKyAgICAgVGhpcyBhbGxvd3MgdXMgdG8gcGljayB1cCB0aGUgc2NhbiB3aGVyZSB3ZSBsZWZ0IG9mZi4KKysKKysgICAgIElmIHRoaXMgaXMgemVybywgb3IgYSBudWxsIHN0cmluZywgaXQgbWVhbnMgcmVzdW1lIHRoZSBzY2FuCisrICAgICBieSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgQVJHVi1lbGVtZW50LiAgKi8KKysgIGNoYXIgKl9fbmV4dGNoYXI7CisrCisrCisrICAvKiBIYW5kbGUgcGVybXV0YXRpb24gb2YgYXJndW1lbnRzLiAgKi8KKysKKysgIC8qIERlc2NyaWJlIHRoZSBwYXJ0IG9mIEFSR1YgdGhhdCBjb250YWlucyBub24tb3B0aW9ucyB0aGF0IGhhdmUKKysgICAgIGJlZW4gc2tpcHBlZC4gIGBmaXJzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdAorKyAgICAgb2YgdGhlbTsgYGxhc3Rfbm9ub3B0JyBpcyB0aGUgaW5kZXggYWZ0ZXIgdGhlIGxhc3Qgb2YgdGhlbS4gICovCisrCisrICBpbnQgX19maXJzdF9ub25vcHQ7CisrICBpbnQgX19sYXN0X25vbm9wdDsKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9OT05PUFRJT05fRkxBR1MKKysgIGludCBfX25vbm9wdGlvbl9mbGFnc19tYXhfbGVuOworKyAgaW50IF9fbm9ub3B0aW9uX2ZsYWdzX2xlbjsKKysjIGVuZGlmCisrfTsKKysKKysvKiBUaGUgaW5pdGlhbGl6ZXIgaXMgbmVjZXNzYXJ5IHRvIHNldCBPUFRJTkQgYW5kIE9QVEVSUiB0byB0aGVpcgorKyAgIGRlZmF1bHQgdmFsdWVzIGFuZCB0byBjbGVhciB0aGUgaW5pdGlhbGl6YXRpb24gZmxhZy4gICovCisrI2RlZmluZSBfR0VUT1BUX0RBVEFfSU5JVElBTElaRVIgICAgICAgeyAxLCAxIH0KKysKKysjaWYgMCAvKiBmaXJzdCBpcyBzdGF0aWMgb24gdUNsaWJjLCB0aGUgb3RoZXJzIG5vdCB1c2VkICovCisrZXh0ZXJuIGludCBfZ2V0b3B0X2ludGVybmFsX3IgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19sb25nX29ubHksIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKl9fZGF0YSk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0dOVV9HRVRPUFRfXyB8fCBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRPUFRfTE9OR19fCisrI2lmbmRlZiBfX25lZWRfZ2V0b3B0CisrZXh0ZXJuIGludCBfZ2V0b3B0X2xvbmdfciAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKl9fZGF0YSk7CisrCisrZXh0ZXJuIGludCBfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fbG9uZ2luZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysjZW5kaWYKKysjZW5kaWYKKysjZW5kaWYgLyogZ2V0b3B0X2ludC5oICovCitkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0b3B0LmMgYi9saWJjL3VuaXN0ZC9nZXRvcHQuYworaW5kZXggZjYzNDgyYi4uZGI1ZTEyYyAxMDA2NDQKKy0tLSBhL2xpYmMvdW5pc3RkL2dldG9wdC5jCisrKysgYi9saWJjL3VuaXN0ZC9nZXRvcHQuYworQEAgLTEwNSw3ICsxMDUsNyBAQAorICAgIHRoZXkgY2FuIGRpc3Rpbmd1aXNoIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBvcHRpb25zIGFuZCBvdGhlciBhcmd1bWVudHMuICAqLworIAorICNpbmNsdWRlIDxnZXRvcHQuaD4KKy0jaW5jbHVkZSAiZ2V0b3B0X2ludC5oIgorKyNpbmNsdWRlIDxiaXRzL2dldG9wdF9pbnQuaD4KKyAKKyAKKyAvKiBGb3IgY29tbXVuaWNhdGlvbiBmcm9tIGBnZXRvcHQnIHRvIHRoZSBjYWxsZXIuCitAQCAtMTE3MCw2ICsxMTcwLDE1IEBAIGdldG9wdF9sb25nIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisgICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbCAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgsIDApOworIH0KKyAKKytpbnQKKytfZ2V0b3B0X2xvbmdfciAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgsCisrICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKKyt7CisrICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbF9yIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZCk7CisrfQorKworIC8qIExpa2UgZ2V0b3B0X2xvbmcsIGJ1dCAnLScgYXMgd2VsbCBhcyAnLS0nIGNhbiBpbmRpY2F0ZSBhIGxvbmcgb3B0aW9uLgorICAgIElmIGFuIG9wdGlvbiB0aGF0IHN0YXJ0cyB3aXRoICctJyAobm90ICctLScpIGRvZXNuJ3QgbWF0Y2ggYSBsb25nIG9wdGlvbiwKKyAgICBidXQgZG9lcyBtYXRjaCBhIHNob3J0IG9wdGlvbiwgaXQgaXMgcGFyc2VkIGFzIGEgc2hvcnQgb3B0aW9uCitAQCAtMTE4Myw0ICsxMTkyLDEyIEBAIGdldG9wdF9sb25nX29ubHkgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKyB9CisgI2VuZGlmIC8qIF9fVUNMSUJDX0hBU19HRVRPUFRfTE9OR19fICovCisgCisraW50CisrX2dldG9wdF9sb25nX29ubHlfciAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKKysgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQpCisreworKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWxfciAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgsIDEsIGQpOworK30KKysKKyAjZW5kaWYJLyogTm90IEVMSURFX0NPREUuICAqLworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL01ha2VmaWxlIGIvbGlidWFyZ3AvTWFrZWZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NWFjZGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9NYWtlZmlsZQorQEAgLTAsMCArMSwxNCBAQAorKyMgTWFrZWZpbGUgZm9yIHVDbGliYyAobGlidWFyZ3ApCisrIworKyMgQ29weXJpZ2h0IChDKSAyMDEwIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKysjIEF1dGhvcihzKTogRmlsaXBwbyBBcmNpZGlhY29ubyA8ZmlsaXBwby5hcmNpZGlhY29ubyBhdCBzdC5jb20+CisrIworKyMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKysjCisrCisrdG9wX3NyY2Rpcj0uLi8KKyt0b3BfYnVpbGRkaXI9Li4vCisraW5jbHVkZSAkKHRvcF9idWlsZGRpcilSdWxlcy5tYWsKKythbGw6IGxpYnMKKytpbmNsdWRlIE1ha2VmaWxlLmluCisraW5jbHVkZSAkKHRvcF9zcmNkaXIpTWFrZXJ1bGVzCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvTWFrZWZpbGUuaW4gYi9saWJ1YXJncC9NYWtlZmlsZS5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0OThhYmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL01ha2VmaWxlLmluCitAQCAtMCwwICsxLDczIEBACisrIyBNYWtlZmlsZSBmb3IgdUNsaWJjIChsaWJ1YXJncCkKKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQuCisrIyBBdXRob3Iocyk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyMgICAgICAgICAgICAtIEZpcnN0IGltcGxlbWVudGF0aW9uLCBlbWJlZGRlZCBpbnRvIGxpYmMKKysjICAgICAgICAgICAgRmlsaXBwbyBBcmNpZGlhY29ubyA8ZmlsaXBwby5hcmNpZGlhY29ubyBhdCBzdC5jb20+CisrIyAgICAgICAgICAgIC0gUmV3b3JrZWQgZm9yIHN0YW5kLWFsb25lIGxpYnVhcmdwIGltcGxlbWVudGF0aW9uCisrCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKyMKKysKKytDRkxBR1MtbGlidWFyZ3AgOj0gLUROT1RfSU5fbGliYyAtRElTX0lOX2xpYnVhcmdwICQoU1NQX0FMTF9DRkxBR1MpCisrCisrTERGTEFHUy1saWJ1YXJncC5zbyA6PSAkKExERkxBR1MpCisrCisrTElCUy1saWJ1YXJncC5zbyA6PSAkKExJQlMpCisrCisrbGlidWFyZ3BfRlVMTF9OQU1FIDo9IGxpYnVhcmdwLSQoVkVSU0lPTikuc28KKysKKytsaWJ1YXJncF9ESVIgOj0gJCh0b3Bfc3JjZGlyKWxpYnVhcmdwCisrbGlidWFyZ3BfT1VUIDo9ICQodG9wX2J1aWxkZGlyKWxpYnVhcmdwCisrCisrbGlidWFyZ3BfU1JDLXkgOj0KKytsaWJ1YXJncF9TUkMtJChVQ0xJQkNfSEFTX0FSR1ApIDo9ICQoYWRkc3VmZml4IC5jLCQoYWRkcHJlZml4IGFyZ3AtLCBiYSBcCisrCQkJZWV4c3QgZm10c3RyZWFtIGZzLXhpbmwgaGVscCBwYXJzZSBwdiBwdmggeGlubCkpCisrCisrQ0ZMQUdTLWFyZ3AteGlubC5jID0gLWZnbnU4OS1pbmxpbmUKKysKKytsaWJ1YXJncF9TUkMgOj0gJChhZGRwcmVmaXggJChsaWJ1YXJncF9ESVIpLywkKGxpYnVhcmdwX1NSQy15KSkKKytsaWJ1YXJncF9PQkogOj0gJChwYXRzdWJzdCAkKGxpYnVhcmdwX0RJUikvJS5jLCQobGlidWFyZ3BfT1VUKS8lLm8sJChsaWJ1YXJncF9TUkMpKQorKworK2xpYnVhcmdwX1NSQ1MgOj0gJChsaWJ1YXJncF9TUkMpCisrbGlidWFyZ3BfT0JKUyA6PSAkKGxpYnVhcmdwX09CSikKKysKKytpZmVxICgkKERPUElDKSx5KQorK2xpYnVhcmdwLWEteSA6PSAkKGxpYnVhcmdwX09CSlM6Lm89Lm9zKQorK2Vsc2UKKytsaWJ1YXJncC1hLXkgOj0gJChsaWJ1YXJncF9PQkpTKQorK2VuZGlmCisrbGlidWFyZ3Atc28teSA6PSAkKGxpYnVhcmdwX09CSlM6Lm89Lm9zKQorKworK2xpYi1hLSQoVUNMSUJDX0hBU19BUkdQKSArPSAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3AuYQorK2xpYi1zby0kKFVDTElCQ19IQVNfQVJHUCkgKz0gJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvCisrCisrb2JqY2xlYW4teSArPSBDTEVBTl9saWJ1YXJncAorKworK2lmZXEgKCQoRE9NVUxUSSksbikKKytpZmVxICgkKERPUElDKSx5KQorKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5zbzogJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLmEgJChsaWJjLmRlcGVuZCkKKytlbHNlCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvOiAkKGxpYnVhcmdwX09VVCkvbGlidWFyZ3Bfc28uYSAkKGxpYmMuZGVwZW5kKQorK2VuZGlmCisrCSQoY2FsbCBsaW5rLnNvLCQobGlidWFyZ3BfRlVMTF9OQU1FKSwkKE1BSk9SX1ZFUlNJT04pKQorK2Vsc2UKKyskKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc286ICQobGlidWFyZ3BfT1VUKS9saWJ1YXJncC5vUyAkKGxpYmMuZGVwZW5kKQorKwkkKGNhbGwgbGlua20uc28sJChsaWJ1YXJncF9GVUxMX05BTUUpLCQoTUFKT1JfVkVSU0lPTikpCisrZW5kaWYKKysKKyskKGxpYnVhcmdwX09VVCkvbGlidWFyZ3Bfc28uYTogJChsaWJ1YXJncC1zby15KQorKwkkKFEpJChSTSkgJEAKKysJJChkb19hcikKKysKKyskKGxpYnVhcmdwX09VVCkvbGlidWFyZ3Aub1M6ICQobGlidWFyZ3BfU1JDUykKKysJJChRKSQoUk0pICRACisrCSQoY29tcGlsZS1tKQorKworKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5hOiAkKGxpYnVhcmdwLWEteSkKKysJJChRKSQoSU5TVEFMTCkgLWQgJChkaXIgJEApCisrCSQoUSkkKFJNKSAkQAorKwkkKGRvX2FyKQorKworK0NMRUFOX2xpYnVhcmdwOgorKwkkKGRvX3JtKSAkKGFkZHByZWZpeCAkKGxpYnVhcmdwX09VVCkvKi4sIG8gb3Mgb1MgYSkKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWJhLmMgYi9saWJ1YXJncC9hcmdwLWJhLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNTIyYjAyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWJhLmMKK0BAIC0wLDAgKzEsMjYgQEAKKysvKiBEZWZhdWx0IGRlZmluaXRpb24gZm9yIEFSR1BfUFJPR1JBTV9CVUdfQUREUkVTUy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysvKiBJZiBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgaXQgc2hvdWxkIHBvaW50IHRvIHN0cmluZyB0aGF0IGlzIHRoZQorKyAgIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcyBmb3IgdGhlIHByb2dyYW0uICBJdCB3aWxsIGJlIHByaW50ZWQgYnkgYXJncF9oZWxwIGlmCisrICAgdGhlIEFSR1BfSEVMUF9CVUdfQUREUiBmbGFnIGlzIHNldCAoYXMgaXQgaXMgYnkgdmFyaW91cyBzdGFuZGFyZCBoZWxwCisrICAgbWVzc2FnZXMpLCBlbWJlZGRlZCBpbiBhIHNlbnRlbmNlIHRoYXQgc2F5cyBzb21ldGhpbmcgbGlrZSBgUmVwb3J0IGJ1Z3MgdG8KKysgICBBRERSLicuICAqLworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzczsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWVleHN0LmMgYi9saWJ1YXJncC9hcmdwLWVleHN0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NDViNjhkCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWVleHN0LmMKK0BAIC0wLDAgKzEsMzIgQEAKKysvKiBEZWZhdWx0IGRlZmluaXRpb24gZm9yIEFSR1BfRVJSX0VYSVRfU1RBVFVTCisrICAgQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzeXNleGl0cy5oPgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrLyogVGhlIGV4aXQgc3RhdHVzIHRoYXQgYXJncCB3aWxsIHVzZSB3aGVuIGV4aXRpbmcgZHVlIHRvIGEgcGFyc2luZyBlcnJvci4KKysgICBJZiBub3QgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgdGhpcyBkZWZhdWx0cyB0byBFWF9VU0FHRSBmcm9tCisrICAgPHN5c2V4aXRzLmg+LiAgKi8KKytlcnJvcl90IGFyZ3BfZXJyX2V4aXRfc3RhdHVzID0gRVhfVVNBR0U7CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43NTIyN2Y5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jCitAQCAtMCwwICsxLDQzOSBAQAorKy8qIFdvcmQtd3JhcHBpbmcgYW5kIGxpbmUtdHJ1bmNhdGluZyBzdHJlYW1zCisrICAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTksMjAwMSwyMDAyLDIwMDMsMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysvKiBUaGlzIHBhY2thZ2UgZW11bGF0ZXMgZ2xpYmMgYGxpbmVfd3JhcF9zdHJlYW0nIHNlbWFudGljcyBmb3Igc3lzdGVtcyB0aGF0CisrICAgZG9uJ3QgaGF2ZSB0aGF0LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrCisrI2lmbmRlZiBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysKKysjaWZuZGVmIGlzYmxhbmsKKysjZGVmaW5lIGlzYmxhbmsoY2gpICgoY2gpPT0nICcgfHwgKGNoKT09J1x0JykKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjIGluY2x1ZGUgPGxpYmlvL2xpYmlvUC5oPgorKyMgZGVmaW5lIF9fdnNucHJpbnRmKHMsIGwsIGYsIGEpIF9JT192c25wcmludGYgKHMsIGwsIGYsIGEpCisrI2Vsc2UKKysjIGRlZmluZSBfX3ZzbnByaW50ZihzLCBsLCBmLCBhKSB2c25wcmludGYgKHMsIGwsIGYsIGEpCisrI2VuZGlmCisrCisrI2RlZmluZSBJTklUX0JVRl9TSVpFIDIwMAorKyNkZWZpbmUgUFJJTlRGX1NJWkVfR1VFU1MgMTUwCisrCisrLyogUmV0dXJuIGFuIGFyZ3BfZm10c3RyZWFtIHRoYXQgb3V0cHV0cyB0byBTVFJFQU0sIGFuZCB3aGljaCBwcmVmaXhlcyBsaW5lcworKyAgIHdyaXR0ZW4gb24gaXQgd2l0aCBMTUFSR0lOIHNwYWNlcyBhbmQgbGltaXRzIHRoZW0gdG8gUk1BUkdJTiBjb2x1bW5zCisrICAgdG90YWwuICBJZiBXTUFSR0lOID49IDAsIHdvcmRzIHRoYXQgZXh0ZW5kIHBhc3QgUk1BUkdJTiBhcmUgd3JhcHBlZCBieQorKyAgIHJlcGxhY2luZyB0aGUgd2hpdGVzcGFjZSBiZWZvcmUgdGhlbSB3aXRoIGEgbmV3bGluZSBhbmQgV01BUkdJTiBzcGFjZXMuCisrICAgT3RoZXJ3aXNlLCBjaGFycyBiZXlvbmQgUk1BUkdJTiBhcmUgc2ltcGx5IGRyb3BwZWQgdW50aWwgYSBuZXdsaW5lLgorKyAgIFJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICAqLworK2FyZ3BfZm10c3RyZWFtX3QKKytfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKEZJTEUgKnN0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxtYXJnaW4sIHNpemVfdCBybWFyZ2luLCBzc2l6ZV90IHdtYXJnaW4pCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBmczsKKysKKysgIGZzID0gKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGFyZ3BfZm10c3RyZWFtKSk7CisrICBpZiAoZnMgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGZzLT5zdHJlYW0gPSBzdHJlYW07CisrCisrICAgICAgZnMtPmxtYXJnaW4gPSBsbWFyZ2luOworKyAgICAgIGZzLT5ybWFyZ2luID0gcm1hcmdpbjsKKysgICAgICBmcy0+d21hcmdpbiA9IHdtYXJnaW47CisrICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgZnMtPnBvaW50X29mZnMgPSAwOworKworKyAgICAgIGZzLT5idWYgPSAoY2hhciAqKSBtYWxsb2MgKElOSVRfQlVGX1NJWkUpOworKyAgICAgIGlmICghIGZzLT5idWYpCisrICAgICAgIHsKKysgICAgICAgICBmcmVlIChmcyk7CisrICAgICAgICAgZnMgPSAwOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICAgIGZzLT5lbmQgPSBmcy0+YnVmICsgSU5JVF9CVUZfU0laRTsKKysgICAgICAgfQorKyAgICB9CisrCisrICByZXR1cm4gZnM7CisrfQorKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysjaWZkZWYgd2Vha19hbGlhcworK3dlYWtfYWxpYXMgKF9fYXJncF9tYWtlX2ZtdHN0cmVhbSwgYXJncF9tYWtlX2ZtdHN0cmVhbSkKKysjZW5kaWYKKysjZW5kaWYKKysKKysvKiBGbHVzaCBGUyB0byBpdHMgc3RyZWFtLCBhbmQgZnJlZSBpdCAoYnV0IGRvbid0IGNsb3NlIHRoZSBzdHJlYW0pLiAgKi8KKyt2b2lkCisrX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorK3sKKysgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChmcyk7CisrICBpZiAoZnMtPnAgPiBmcy0+YnVmKQorKyAgICB7CisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgIF9fZnhwcmludGYgKGZzLT5zdHJlYW0sICIlLipzIiwgKGludCkgKGZzLT5wIC0gZnMtPmJ1ZiksIGZzLT5idWYpOworKyNlbHNlCisrICAgICAgZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBmcy0+cCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyNlbmRpZgorKyAgICB9CisrICBmcmVlIChmcy0+YnVmKTsKKysgIGZyZWUgKGZzKTsKKyt9CisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKyNpZmRlZiB3ZWFrX2FsaWFzCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9mcmVlLCBhcmdwX2ZtdHN0cmVhbV9mcmVlKQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIFByb2Nlc3MgRlMncyBidWZmZXIgc28gdGhhdCBsaW5lIHdyYXBwaW5nIGlzIGRvbmUgZnJvbSBQT0lOVF9PRkZTIHRvIHRoZQorKyAgIGVuZCBvZiBpdHMgYnVmZmVyLiAgVGhpcyBjb2RlIGlzIG1vc3RseSBmcm9tIGdsaWJjIHN0ZGlvL2xpbmV3cmFwLmMuICAqLworK3ZvaWQKKytfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyt7CisrICBjaGFyICpidWYsICpubDsKKysgIHNpemVfdCBsZW47CisrCisrICAvKiBTY2FuIHRoZSBidWZmZXIgZm9yIG5ld2xpbmVzLiAgKi8KKysgIGJ1ZiA9IGZzLT5idWYgKyBmcy0+cG9pbnRfb2ZmczsKKysgIHdoaWxlIChidWYgPCBmcy0+cCkKKysgICAgeworKyAgICAgIHNpemVfdCByOworKworKyAgICAgIGlmIChmcy0+cG9pbnRfY29sID09IDAgJiYgZnMtPmxtYXJnaW4gIT0gMCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFdlIGFyZSBzdGFydGluZyBhIG5ldyBsaW5lLiAgUHJpbnQgc3BhY2VzIHRvIHRoZSBsZWZ0IG1hcmdpbi4gICovCisrICAgICAgICAgY29uc3Qgc2l6ZV90IHBhZCA9IGZzLT5sbWFyZ2luOworKyAgICAgICAgIGlmIChmcy0+cCArIHBhZCA8IGZzLT5lbmQpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFdlIGNhbiBmaXQgaW4gdGhlbSBpbiB0aGUgYnVmZmVyIGJ5IG1vdmluZyB0aGUKKysgICAgICAgICAgICAgICAgYnVmZmVyIHRleHQgdXAgYW5kIGZpbGxpbmcgaW4gdGhlIGJlZ2lubmluZy4gICovCisrICAgICAgICAgICAgIG1lbW1vdmUgKGJ1ZiArIHBhZCwgYnVmLCBmcy0+cCAtIGJ1Zik7CisrICAgICAgICAgICAgIGZzLT5wICs9IHBhZDsgLyogQ29tcGVuc2F0ZSBmb3IgYmlnZ2VyIGJ1ZmZlci4gKi8KKysgICAgICAgICAgICAgbWVtc2V0IChidWYsICcgJywgcGFkKTsgLyogRmlsbCBpbiB0aGUgc3BhY2VzLiAgKi8KKysgICAgICAgICAgICAgYnVmICs9IHBhZDsgLyogRG9uJ3QgYm90aGVyIHNlYXJjaGluZyB0aGVtLiAgKi8KKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIE5vIGJ1ZmZlciBzcGFjZSBmb3Igc3BhY2VzLiAgTXVzdCBmbHVzaC4gICovCisrICAgICAgICAgICAgIHNpemVfdCBpOworKyAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkOyBpKyspCisrICAgICAgICAgICAgICAgeworKyNpZmRlZiBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgICAgIGlmIChfSU9fZndpZGUgKGZzLT5zdHJlYW0sIDApID4gMCkKKysgICAgICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICAgZWxzZQorKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysgICAgICAgICBmcy0+cG9pbnRfY29sID0gcGFkOworKyAgICAgICB9CisrCisrICAgICAgbGVuID0gZnMtPnAgLSBidWY7CisrICAgICAgbmwgPSBtZW1jaHIgKGJ1ZiwgJ1xuJywgbGVuKTsKKysKKysgICAgICBpZiAoZnMtPnBvaW50X2NvbCA8IDApCisrICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKworKyAgICAgIGlmICghbmwpCisrICAgICAgIHsKKysgICAgICAgICAvKiBUaGUgYnVmZmVyIGVuZHMgaW4gYSBwYXJ0aWFsIGxpbmUuICAqLworKworKyAgICAgICAgIGlmIChmcy0+cG9pbnRfY29sICsgbGVuIDwgZnMtPnJtYXJnaW4pCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFRoZSByZW1haW5pbmcgYnVmZmVyIHRleHQgaXMgYSBwYXJ0aWFsIGxpbmUgYW5kIGZpdHMKKysgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBtYXhpbXVtIGxpbmUgd2lkdGguICBBZHZhbmNlIHBvaW50IGZvciB0aGUKKysgICAgICAgICAgICAgICAgY2hhcmFjdGVycyB0byBiZSB3cml0dGVuIGFuZCBzdG9wIHNjYW5uaW5nLiAgKi8KKysgICAgICAgICAgICAgZnMtPnBvaW50X2NvbCArPSBsZW47CisrICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIC8qIFNldCB0aGUgZW5kLW9mLWxpbmUgcG9pbnRlciBmb3IgdGhlIGNvZGUgYmVsb3cgdG8KKysgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgICBubCA9IGZzLT5wOworKyAgICAgICB9CisrICAgICAgZWxzZSBpZiAoZnMtPnBvaW50X2NvbCArIChubCAtIGJ1ZikgPCAoc3NpemVfdCkgZnMtPnJtYXJnaW4pCisrICAgICAgIHsKKysgICAgICAgICAvKiBUaGUgYnVmZmVyIGNvbnRhaW5zIGEgZnVsbCBsaW5lIHRoYXQgZml0cyB3aXRoaW4gdGhlIG1heGltdW0KKysgICAgICAgICAgICBsaW5lIHdpZHRoLiAgUmVzZXQgcG9pbnQgYW5kIHNjYW4gdGhlIG5leHQgbGluZS4gICovCisrICAgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgICAgYnVmID0gbmwgKyAxOworKyAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICB9CisrCisrICAgICAgLyogVGhpcyBsaW5lIGlzIHRvbyBsb25nLiAgKi8KKysgICAgICByID0gZnMtPnJtYXJnaW4gLSAxOworKworKyAgICAgIGlmIChmcy0+d21hcmdpbiA8IDApCisrICAgICAgIHsKKysgICAgICAgICAvKiBUcnVuY2F0ZSB0aGUgbGluZSBieSBvdmVyd3JpdGluZyB0aGUgZXhjZXNzIHdpdGggdGhlCisrICAgICAgICAgICAgbmV3bGluZSBhbmQgYW55dGhpbmcgYWZ0ZXIgaXQgaW4gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgaWYgKG5sIDwgZnMtPnApCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIG1lbW1vdmUgKGJ1ZiArIChyIC0gZnMtPnBvaW50X2NvbCksIG5sLCBmcy0+cCAtIG5sKTsKKysgICAgICAgICAgICAgZnMtPnAgLT0gYnVmICsgKHIgLSBmcy0+cG9pbnRfY29sKSAtIG5sOworKyAgICAgICAgICAgICAvKiBSZXNldCBwb2ludCBmb3IgdGhlIG5leHQgbGluZSBhbmQgc3RhcnQgc2Nhbm5pbmcgaXQuICAqLworKyAgICAgICAgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICAgICAgICAgYnVmICs9IHIgKyAxOyAvKiBTa2lwIGZ1bGwgbGluZSBwbHVzIFxuLiAqLworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogVGhlIGJ1ZmZlciBlbmRzIHdpdGggYSBwYXJ0aWFsIGxpbmUgdGhhdCBpcyBiZXlvbmQgdGhlCisrICAgICAgICAgICAgICAgIG1heGltdW0gbGluZSB3aWR0aC4gIEFkdmFuY2UgcG9pbnQgZm9yIHRoZSBjaGFyYWN0ZXJzCisrICAgICAgICAgICAgICAgIHdyaXR0ZW4sIGFuZCBkaXNjYXJkIHRob3NlIHBhc3QgdGhlIG1heCBmcm9tIHRoZSBidWZmZXIuICAqLworKyAgICAgICAgICAgICBmcy0+cG9pbnRfY29sICs9IGxlbjsKKysgICAgICAgICAgICAgZnMtPnAgLT0gZnMtPnBvaW50X2NvbCAtIHI7CisrICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgfQorKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgLyogRG8gd29yZCB3cmFwLiAgR28gdG8gdGhlIGNvbHVtbiBqdXN0IHBhc3QgdGhlIG1heGltdW0gbGluZQorKyAgICAgICAgICAgIHdpZHRoIGFuZCBzY2FuIGJhY2sgZm9yIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHdvcmQgdGhlcmUuCisrICAgICAgICAgICAgVGhlbiBpbnNlcnQgYSBsaW5lIGJyZWFrLiAgKi8KKysKKysgICAgICAgICBjaGFyICpwLCAqbmV4dGxpbmU7CisrICAgICAgICAgaW50IGk7CisrCisrICAgICAgICAgcCA9IGJ1ZiArIChyICsgMSAtIGZzLT5wb2ludF9jb2wpOworKyAgICAgICAgIHdoaWxlIChwID49IGJ1ZiAmJiAhaXNibGFuayAoKnApKQorKyAgICAgICAgICAgLS1wOworKyAgICAgICAgIG5leHRsaW5lID0gcCArIDE7ICAgICAvKiBUaGlzIHdpbGwgYmVnaW4gdGhlIG5leHQgbGluZS4gICovCisrCisrICAgICAgICAgaWYgKG5leHRsaW5lID4gYnVmKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBTd2FsbG93IHNlcGFyYXRpbmcgYmxhbmtzLiAgKi8KKysgICAgICAgICAgICAgaWYgKHAgPj0gYnVmKQorKyAgICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgICAtLXA7CisrICAgICAgICAgICAgICAgd2hpbGUgKHAgPj0gYnVmICYmIGlzYmxhbmsgKCpwKSk7CisrICAgICAgICAgICAgIG5sID0gcCArIDE7ICAgICAgIC8qIFRoZSBuZXdsaW5lIHdpbGwgcmVwbGFjZSB0aGUgZmlyc3QgYmxhbmsuICovCisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBBIHNpbmdsZSB3b3JkIHRoYXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIGxpbmUgd2lkdGguCisrICAgICAgICAgICAgICAgIE9oIHdlbGwuICBQdXQgaXQgb24gYW4gb3ZlcmxvbmcgbGluZSBieSBpdHNlbGYuICAqLworKyAgICAgICAgICAgICBwID0gYnVmICsgKHIgKyAxIC0gZnMtPnBvaW50X2NvbCk7CisrICAgICAgICAgICAgIC8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgbG9uZyB3b3JkLiAgKi8KKysgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICArK3A7CisrICAgICAgICAgICAgIHdoaWxlIChwIDwgbmwgJiYgIWlzYmxhbmsgKCpwKSk7CisrICAgICAgICAgICAgIGlmIChwID09IG5sKQorKyAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgIC8qIEl0IGFscmVhZHkgZW5kcyBhIGxpbmUuICBObyBmdXNzaW5nIHJlcXVpcmVkLiAgKi8KKysgICAgICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKyAgICAgICAgICAgICAgICAgYnVmID0gbmwgKyAxOworKyAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAvKiBXZSB3aWxsIG1vdmUgdGhlIG5ld2xpbmUgdG8gcmVwbGFjZSB0aGUgZmlyc3QgYmxhbmsuICAqLworKyAgICAgICAgICAgICBubCA9IHA7CisrICAgICAgICAgICAgIC8qIFN3YWxsb3cgc2VwYXJhdGluZyBibGFua3MuICAqLworKyAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgICsrcDsKKysgICAgICAgICAgICAgd2hpbGUgKGlzYmxhbmsgKCpwKSk7CisrICAgICAgICAgICAgIC8qIFRoZSBuZXh0IGxpbmUgd2lsbCBzdGFydCBoZXJlLiAgKi8KKysgICAgICAgICAgICAgbmV4dGxpbmUgPSBwOworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIC8qIE5vdGU6IFRoZXJlIGFyZSBhIGJ1bmNoIG9mIHRlc3RzIGJlbG93IGZvcgorKyAgICAgICAgICAgIE5FWFRMSU5FID09IEJVRiArIExFTiArIDE7IHRoaXMgY2FzZSBpcyB3aGVyZSBOTCBoYXBwZW5zIHRvIGZhbGwKKysgICAgICAgICAgICBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGFuZCBORVhUTElORSBpcyBpbiBmYWN0IGVtcHR5IChhbmQgc28KKysgICAgICAgICAgICB3ZSBuZWVkIG5vdCBiZSBjYXJlZnVsIHRvIG1haW50YWluIGl0cyBjb250ZW50cykuICAqLworKworKyAgICAgICAgIGlmICgobmV4dGxpbmUgPT0gYnVmICsgbGVuICsgMQorKyAgICAgICAgICAgICAgPyBmcy0+ZW5kIC0gbmwgPCBmcy0+d21hcmdpbiArIDEKKysgICAgICAgICAgICAgIDogbmV4dGxpbmUgLSAobmwgKyAxKSA8IGZzLT53bWFyZ2luKQorKyAgICAgICAgICAgICAmJiBmcy0+cCA+IG5leHRsaW5lKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBUaGUgbWFyZ2luIG5lZWRzIG1vcmUgYmxhbmtzIHRoYW4gd2UgcmVtb3ZlZC4gICovCisrICAgICAgICAgICAgIGlmIChmcy0+ZW5kIC0gZnMtPnAgPiBmcy0+d21hcmdpbiArIDEpCisrICAgICAgICAgICAgICAgLyogTWFrZSBzb21lIHNwYWNlIGZvciB0aGVtLiAgKi8KKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBzaXplX3QgbXYgPSBmcy0+cCAtIG5leHRsaW5lOworKyAgICAgICAgICAgICAgICAgbWVtbW92ZSAobmwgKyAxICsgZnMtPndtYXJnaW4sIG5leHRsaW5lLCBtdik7CisrICAgICAgICAgICAgICAgICBuZXh0bGluZSA9IG5sICsgMSArIGZzLT53bWFyZ2luOworKyAgICAgICAgICAgICAgICAgbGVuID0gbmV4dGxpbmUgKyBtdiAtIGJ1ZjsKKysgICAgICAgICAgICAgICAgICpubCsrID0gJ1xuJzsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAvKiBPdXRwdXQgdGhlIGZpcnN0IGxpbmUgc28gd2UgY2FuIHVzZSB0aGUgc3BhY2UuICAqLworKyAgICAgICAgICAgICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnNcbiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSAobmwgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgIGlmIChubCA+IGZzLT5idWYpCisrICAgICAgICAgICAgICAgICAgIGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgbmwgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIGZzLT5zdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgICAgICAgICAgbGVuICs9IGJ1ZiAtIGZzLT5idWY7CisrICAgICAgICAgICAgICAgICBubCA9IGJ1ZiA9IGZzLT5idWY7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIC8qIFdlIGNhbiBmaXQgdGhlIG5ld2xpbmUgYW5kIGJsYW5rcyBpbiBiZWZvcmUKKysgICAgICAgICAgICAgIHRoZSBuZXh0IHdvcmQuICAqLworKyAgICAgICAgICAgKm5sKysgPSAnXG4nOworKworKyAgICAgICAgIGlmIChuZXh0bGluZSAtIG5sID49IGZzLT53bWFyZ2luCisrICAgICAgICAgICAgIHx8IChuZXh0bGluZSA9PSBidWYgKyBsZW4gKyAxICYmIGZzLT5lbmQgLSBuZXh0bGluZSA+PSBmcy0+d21hcmdpbikpCisrICAgICAgICAgICAvKiBBZGQgYmxhbmtzIHVwIHRvIHRoZSB3cmFwIG1hcmdpbiBjb2x1bW4uICAqLworKyAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZzLT53bWFyZ2luOyArK2kpCisrICAgICAgICAgICAgICpubCsrID0gJyAnOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcy0+d21hcmdpbjsgKytpKQorKyNpZmRlZiBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgZWxzZQorKyNlbmRpZgorKyAgICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisrCisrICAgICAgICAgLyogQ29weSB0aGUgdGFpbCBvZiB0aGUgb3JpZ2luYWwgYnVmZmVyIGludG8gdGhlIGN1cnJlbnQgYnVmZmVyCisrICAgICAgICAgICAgcG9zaXRpb24uICAqLworKyAgICAgICAgIGlmIChubCA8IG5leHRsaW5lKQorKyAgICAgICAgICAgbWVtbW92ZSAobmwsIG5leHRsaW5lLCBidWYgKyBsZW4gLSBuZXh0bGluZSk7CisrICAgICAgICAgbGVuIC09IG5leHRsaW5lIC0gYnVmOworKworKyAgICAgICAgIC8qIENvbnRpbnVlIHRoZSBzY2FuIG9uIHRoZSByZW1haW5pbmcgbGluZXMgaW4gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgYnVmID0gbmw7CisrCisrICAgICAgICAgLyogUmVzdG9yZSBidWZwIHRvIGluY2x1ZGUgYWxsIHRoZSByZW1haW5pbmcgdGV4dC4gICovCisrICAgICAgICAgZnMtPnAgPSBubCArIGxlbjsKKysKKysgICAgICAgICAvKiBSZXNldCB0aGUgY291bnRlciBvZiB3aGF0IGhhcyBiZWVuIG91dHB1dCB0aGlzIGxpbmUuICBJZiB3bWFyZ2luCisrICAgICAgICAgICAgaXMgMCwgd2Ugd2FudCB0byBhdm9pZCB0aGUgbG1hcmdpbiBnZXR0aW5nIGFkZGVkLCBzbyB3ZSBzZXQKKysgICAgICAgICAgICBwb2ludF9jb2wgdG8gYSBtYWdpYyB2YWx1ZSBvZiAtMSBpbiB0aGF0IGNhc2UuICAqLworKyAgICAgICAgIGZzLT5wb2ludF9jb2wgPSBmcy0+d21hcmdpbiA/IGZzLT53bWFyZ2luIDogLTE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgLyogUmVtZW1iZXIgdGhhdCB3ZSd2ZSBzY2FubmVkIGFzIGZhciBhcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworKyAgZnMtPnBvaW50X29mZnMgPSBmcy0+cCAtIGZzLT5idWY7CisrfQorKworKy8qIEVuc3VyZSB0aGF0IEZTIGhhcyBzcGFjZSBmb3IgQU1PVU5UIG1vcmUgYnl0ZXMgaW4gaXRzIGJ1ZmZlciwgZWl0aGVyIGJ5CisrICAgZ3Jvd2luZyB0aGUgYnVmZmVyLCBvciBieSBmbHVzaGluZyBpdC4gIFRydWUgaXMgcmV0dXJuZWQgaWZmIHdlIHN1Y2NlZWQuICovCisraW50CisrX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqZnMsIHNpemVfdCBhbW91bnQpCisreworKyAgaWYgKChzaXplX3QpIChmcy0+ZW5kIC0gZnMtPnApIDwgYW1vdW50KQorKyAgICB7CisrICAgICAgc3NpemVfdCB3cm90ZTsKKysKKysgICAgICAvKiBGbHVzaCBGUydzIGJ1ZmZlci4gICovCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGZzKTsKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgIF9fZnhwcmludGYgKGZzLT5zdHJlYW0sICIlLipzIiwgKGludCkgKGZzLT5wIC0gZnMtPmJ1ZiksIGZzLT5idWYpOworKyAgICAgIHdyb3RlID0gZnMtPnAgLSBmcy0+YnVmOworKyNlbHNlCisrICAgICAgd3JvdGUgPSBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIGZzLT5wIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrICAgICAgaWYgKHdyb3RlID09IGZzLT5wIC0gZnMtPmJ1ZikKKysgICAgICAgeworKyAgICAgICAgIGZzLT5wID0gZnMtPmJ1ZjsKKysgICAgICAgICBmcy0+cG9pbnRfb2ZmcyA9IDA7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBmcy0+cCAtPSB3cm90ZTsKKysgICAgICAgICBmcy0+cG9pbnRfb2ZmcyAtPSB3cm90ZTsKKysgICAgICAgICBtZW1tb3ZlIChmcy0+YnVmLCBmcy0+YnVmICsgd3JvdGUsIGZzLT5wIC0gZnMtPmJ1Zik7CisrICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysKKysgICAgICBpZiAoKHNpemVfdCkgKGZzLT5lbmQgLSBmcy0+YnVmKSA8IGFtb3VudCkKKysgICAgICAgLyogR290dGEgZ3JvdyB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIHNpemVfdCBvbGRfc2l6ZSA9IGZzLT5lbmQgLSBmcy0+YnVmOworKyAgICAgICAgIHNpemVfdCBuZXdfc2l6ZSA9IG9sZF9zaXplICsgYW1vdW50OworKyAgICAgICAgIGNoYXIgKm5ld19idWY7CisrCisrICAgICAgICAgaWYgKG5ld19zaXplIDwgb2xkX3NpemUgfHwgISAobmV3X2J1ZiA9IHJlYWxsb2MgKGZzLT5idWYsIG5ld19zaXplKSkpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIF9fc2V0X2Vycm5vIChFTk9NRU0pOworKyAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgIH0KKysKKysgICAgICAgICBmcy0+YnVmID0gbmV3X2J1ZjsKKysgICAgICAgICBmcy0+ZW5kID0gbmV3X2J1ZiArIG5ld19zaXplOworKyAgICAgICAgIGZzLT5wID0gZnMtPmJ1ZjsKKysgICAgICAgfQorKyAgICB9CisrCisrICByZXR1cm4gMTsKKyt9CisrCisrc3NpemVfdAorK19fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJ1Y3QgYXJncF9mbXRzdHJlYW0gKmZzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyt7CisrICBpbnQgb3V0OworKyAgc2l6ZV90IGF2YWlsOworKyAgc2l6ZV90IHNpemVfZ3Vlc3MgPSBQUklOVEZfU0laRV9HVUVTUzsgLyogSG93IG11Y2ggc3BhY2UgdG8gcmVzZXJ2ZS4gKi8KKysKKysgIGRvCisrICAgIHsKKysgICAgICB2YV9saXN0IGFyZ3M7CisrCisrICAgICAgaWYgKCEgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKGZzLCBzaXplX2d1ZXNzKSkKKysgICAgICAgcmV0dXJuIC0xOworKworKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworKyAgICAgIGF2YWlsID0gZnMtPmVuZCAtIGZzLT5wOworKyAgICAgIG91dCA9IF9fdnNucHJpbnRmIChmcy0+cCwgYXZhaWwsIGZtdCwgYXJncyk7CisrICAgICAgdmFfZW5kIChhcmdzKTsKKysgICAgICBpZiAoKHNpemVfdCkgb3V0ID49IGF2YWlsKQorKyAgICAgICBzaXplX2d1ZXNzID0gb3V0ICsgMTsKKysgICAgfQorKyAgd2hpbGUgKChzaXplX3QpIG91dCA+PSBhdmFpbCk7CisrCisrICBmcy0+cCArPSBvdXQ7CisrCisrICByZXR1cm4gb3V0OworK30KKysjaWYgMAorKy8qIE5vdCBleHBvcnRlZC4gICovCisrI2lmZGVmIHdlYWtfYWxpYXMKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiwgYXJncF9mbXRzdHJlYW1fcHJpbnRmKQorKyNlbmRpZgorKyNlbmRpZgorKworKyNlbmRpZiAvKiAhQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQICovCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaCBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jYTdjODM0CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oCitAQCAtMCwwICsxLDMxNCBAQAorKy8qIFdvcmQtd3JhcHBpbmcgYW5kIGxpbmUtdHJ1bmNhdGluZyBzdHJlYW1zLgorKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysvKiBUaGlzIHBhY2thZ2UgZW11bGF0ZXMgZ2xpYmMgYGxpbmVfd3JhcF9zdHJlYW0nIHNlbWFudGljcyBmb3Igc3lzdGVtcyB0aGF0CisrICAgZG9uJ3QgaGF2ZSB0aGF0LiAgSWYgdGhlIHN5c3RlbSBkb2VzIGhhdmUgaXQsIGl0IGlzIGp1c3QgYSB3cmFwcGVyIGZvcgorKyAgIHRoYXQuICBUaGlzIGhlYWRlciBmaWxlIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHdoaWxlIGNvbXBpbGluZyBhcmdwLCBhbmQKKysgICBzaG91bGRuJ3QgYmUgaW5zdGFsbGVkLiAgKi8KKysKKysjaWZuZGVmIF9BUkdQX0ZNVFNUUkVBTV9ICisrI2RlZmluZSBfQVJHUF9GTVRTVFJFQU1fSAorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisrLyogVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgMi41IGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA1KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19hdHRyaWJ1dGVfXyhTcGVjKSAvKiBlbXB0eSAqLworKyMgZW5kaWYKKysvKiBUaGUgX18tcHJvdGVjdGVkIHZhcmlhbnRzIG9mIGBmb3JtYXQnIGFuZCBgcHJpbnRmJyBhdHRyaWJ1dGVzCisrICAgYXJlIGFjY2VwdGVkIGJ5IGdjYyB2ZXJzaW9ucyAyLjYuNCAoZWZmZWN0aXZlbHkgMi43KSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNykgfHwgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisrIyAgZGVmaW5lIF9fZm9ybWF0X18gZm9ybWF0CisrIyAgZGVmaW5lIF9fcHJpbnRmX18gcHJpbnRmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZiAwIC8qIHVDbGliYzogZGlzYWJsZWQgKi8KKysjaWYgICAgKF9MSUJDIC0gMCAmJiAhZGVmaW5lZCAoVVNFX0lOX0xJQklPKSkgXAorKyAgICB8fCAoZGVmaW5lZCAoX19HTlVfTElCUkFSWV9fKSAmJiBkZWZpbmVkIChIQVZFX0xJTkVXUkFQX0gpKQorKy8qIGxpbmVfd3JhcF9zdHJlYW0gaXMgYXZhaWxhYmxlLCBzbyB1c2UgdGhhdC4gICovCisrI2RlZmluZSBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysjZW5kaWYKKysjZWxzZQorKy8qIGxpbmVfd3JhcCBzdHJlYW0gTk9UIGF2YWlsYWJsZSAqLworKyMgdW5kZWYgQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQCisrI2VuZGlmCisrCisrI2lmZGVmIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKy8qIEp1c3QgYmUgYSBzaW1wbGUgd3JhcHBlciBmb3IgbGluZV93cmFwX3N0cmVhbTsgdGhlIHNlbWFudGljcyBhcmUKKysgICAqc2xpZ2h0bHkqIGRpZmZlcmVudCwgYXMgbGluZV93cmFwX3N0cmVhbSBkb2Vzbid0IGFjdHVhbGx5IG1ha2UgYSBuZXcKKysgICBvYmplY3QsIGl0IGp1c3QgbW9kaWZpZXMgdGhlIGdpdmVuIHN0cmVhbSAocmV2ZXJzaWJseSkgdG8gZG8KKysgICBsaW5lLXdyYXBwaW5nLiAgU2luY2Ugd2UgY29udHJvbCB3aG8gdXNlcyB0aGlzIGNvZGUsIGl0IGRvZXNuJ3QgbWF0dGVyLiAgKi8KKysKKysjaW5jbHVkZSA8bGluZXdyYXAuaD4KKysKKyt0eXBlZGVmIEZJTEUgKmFyZ3BfZm10c3RyZWFtX3Q7CisrCisrI2RlZmluZSBhcmdwX21ha2VfZm10c3RyZWFtIGxpbmVfd3JhcF9zdHJlYW0KKysjZGVmaW5lIF9fYXJncF9tYWtlX2ZtdHN0cmVhbSBsaW5lX3dyYXBfc3RyZWFtCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9mcmVlIGxpbmVfdW53cmFwX3N0cmVhbQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIGxpbmVfdW53cmFwX3N0cmVhbQorKworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRjKGZzLGNoKSBwdXRjKGNoLGZzKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcHV0YyhmcyxjaCkgcHV0YyhjaCxmcykKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcHV0cyhmcyxzdHIpIGZwdXRzKHN0cixmcykKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3B1dHMoZnMsc3RyKSBmcHV0cyhzdHIsZnMpCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlKGZzLHN0cixsZW4pIGZ3cml0ZShzdHIsMSxsZW4sZnMpCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV93cml0ZShmcyxzdHIsbGVuKSBmd3JpdGUoc3RyLDEsbGVuLGZzKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgZnByaW50ZgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcHJpbnRmIGZwcmludGYKKysKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fbG1hcmdpbiBsaW5lX3dyYXBfbG1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fbG1hcmdpbiBsaW5lX3dyYXBfbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiBsaW5lX3dyYXBfc2V0X2xtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIGxpbmVfd3JhcF9zZXRfbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIGxpbmVfd3JhcF9ybWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIGxpbmVfd3JhcF9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIGxpbmVfd3JhcF9zZXRfcm1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gbGluZV93cmFwX3NldF9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gbGluZV93cmFwX3dtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3dtYXJnaW4gbGluZV93cmFwX3dtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gbGluZV93cmFwX3NldF93bWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiBsaW5lX3dyYXBfc2V0X3dtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgbGluZV93cmFwX3BvaW50CisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wb2ludCBsaW5lX3dyYXBfcG9pbnQKKysKKysjZWxzZSAvKiAhQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQICovCisrLyogR3Vlc3Mgd2UgaGF2ZSB0byBkZWZpbmUgb3VyIG93biB2ZXJzaW9uLiAgKi8KKysKKysjaWZuZGVmIF9fY29uc3QKKysjZGVmaW5lIF9fY29uc3QgY29uc3QKKysjZW5kaWYKKysKKytzdHJ1Y3QgYXJncF9mbXRzdHJlYW0KKyt7CisrICBGSUxFICpzdHJlYW07ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHN0cmVhbSB3ZSdyZSBvdXRwdXR0aW5nIHRvLiAgKi8KKysKKysgIHNpemVfdCBsbWFyZ2luLCBybWFyZ2luOyAgICAgLyogTGVmdCBhbmQgcmlnaHQgbWFyZ2lucy4gICovCisrICBzc2l6ZV90IHdtYXJnaW47ICAgICAgICAgICAgIC8qIE1hcmdpbiB0byB3cmFwIHRvLCBvciAtMSB0byB0cnVuY2F0ZS4gICovCisrCisrICAvKiBQb2ludCBpbiBidWZmZXIgdG8gd2hpY2ggd2UndmUgcHJvY2Vzc2VkIGZvciB3cmFwcGluZywgYnV0IG5vdCBvdXRwdXQuICAqLworKyAgc2l6ZV90IHBvaW50X29mZnM7CisrICAvKiBPdXRwdXQgY29sdW1uIGF0IFBPSU5UX09GRlMsIG9yIC0xIG1lYW5pbmcgMCBidXQgZG9uJ3QgYWRkIGxtYXJnaW4uICAqLworKyAgc3NpemVfdCBwb2ludF9jb2w7CisrCisrICBjaGFyICpidWY7ICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIuICAqLworKyAgY2hhciAqcDsgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGVuZCBvZiB0ZXh0IGluIEJVRi4gKi8KKysgIGNoYXIgKmVuZDsgICAgICAgICAgICAgICAgICAgLyogQWJzb2x1dGUgZW5kIG9mIEJVRi4gICovCisrfTsKKysKKyt0eXBlZGVmIHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqYXJncF9mbXRzdHJlYW1fdDsKKysKKysvKiBSZXR1cm4gYW4gYXJncF9mbXRzdHJlYW0gdGhhdCBvdXRwdXRzIHRvIFNUUkVBTSwgYW5kIHdoaWNoIHByZWZpeGVzIGxpbmVzCisrICAgd3JpdHRlbiBvbiBpdCB3aXRoIExNQVJHSU4gc3BhY2VzIGFuZCBsaW1pdHMgdGhlbSB0byBSTUFSR0lOIGNvbHVtbnMKKysgICB0b3RhbC4gIElmIFdNQVJHSU4gPj0gMCwgd29yZHMgdGhhdCBleHRlbmQgcGFzdCBSTUFSR0lOIGFyZSB3cmFwcGVkIGJ5CisrICAgcmVwbGFjaW5nIHRoZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGVtIHdpdGggYSBuZXdsaW5lIGFuZCBXTUFSR0lOIHNwYWNlcy4KKysgICBPdGhlcndpc2UsIGNoYXJzIGJleW9uZCBSTUFSR0lOIGFyZSBzaW1wbHkgZHJvcHBlZCB1bnRpbCBhIG5ld2xpbmUuCisrICAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gICovCisrZXh0ZXJuIGFyZ3BfZm10c3RyZWFtX3QgX19hcmdwX21ha2VfZm10c3RyZWFtIChGSUxFICpfX3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBfX3dtYXJnaW4pOworK2V4dGVybiBhcmdwX2ZtdHN0cmVhbV90IGFyZ3BfbWFrZV9mbXRzdHJlYW0gKEZJTEUgKl9fc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3JtYXJnaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fd21hcmdpbik7CisrCisrLyogRmx1c2ggX19GUyB0byBpdHMgc3RyZWFtLCBhbmQgZnJlZSBpdCAoYnV0IGRvbid0IGNsb3NlIHRoZSBzdHJlYW0pLiAgKi8KKytleHRlcm4gdm9pZCBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrZXh0ZXJuIHZvaWQgYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKysKKytleHRlcm4gc3NpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKHByaW50ZiwgMiwgMykpKTsKKytleHRlcm4gc3NpemVfdCBhcmdwX2ZtdHN0cmVhbV9wcmludGYgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKHByaW50ZiwgMiwgMykpKTsKKysKKytleHRlcm4gaW50IF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBpbnQgX19jaCk7CisrZXh0ZXJuIGludCBhcmdwX2ZtdHN0cmVhbV9wdXRjIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIGludCBfX2NoKTsKKysKKytleHRlcm4gaW50IF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBfX2NvbnN0IGNoYXIgKl9fc3RyKTsKKytleHRlcm4gaW50IGFyZ3BfZm10c3RyZWFtX3B1dHMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgX19jb25zdCBjaGFyICpfX3N0cik7CisrCisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHIsIHNpemVfdCBfX2xlbik7CisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV93cml0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0ciwgc2l6ZV90IF9fbGVuKTsKKysKKysvKiBBY2Nlc3MgbWFjcm9zIGZvciB2YXJpb3VzIGJpdHMgb2Ygc3RhdGUuICAqLworKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fbG1hcmdpbihfX2ZzKSAoKF9fZnMpLT5sbWFyZ2luKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcm1hcmdpbihfX2ZzKSAoKF9fZnMpLT5ybWFyZ2luKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fd21hcmdpbihfX2ZzKSAoKF9fZnMpLT53bWFyZ2luKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGFyZ3BfZm10c3RyZWFtX2xtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcm1hcmdpbiBhcmdwX2ZtdHN0cmVhbV9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gYXJncF9mbXRzdHJlYW1fd21hcmdpbgorKworKy8qIFNldCBfX0ZTJ3MgbGVmdCBtYXJnaW4gdG8gTE1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luKTsKKysKKysvKiBTZXQgX19GUydzIHJpZ2h0IG1hcmdpbiB0byBfX1JNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luKTsKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbik7CisrCisrLyogU2V0IF9fRlMncyB3cmFwIG1hcmdpbiB0byBfX1dNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX193bWFyZ2luKTsKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fd21hcmdpbik7CisrCisrLyogUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJyZW50IG91dHB1dCBwb2ludCBpbiBfX0ZTLiAgKi8KKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3BvaW50IChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKysKKysvKiBJbnRlcm5hbCByb3V0aW5lcy4gICovCisrZXh0ZXJuIHZvaWQgX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gdm9pZCBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gaW50IF9hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fYW1vdW50KTsKKytleHRlcm4gaW50IF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX2Ftb3VudCk7CisrCisrI2lmZGVmIF9fT1BUSU1JWkVfXworKy8qIElubGluZSB2ZXJzaW9ucyBvZiBhYm92ZSByb3V0aW5lcy4gICovCisrCisrI2lmICFfTElCQworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIGFyZ3BfZm10c3RyZWFtX3B1dGMKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcHV0cyBhcmdwX2ZtdHN0cmVhbV9wdXRzCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIGFyZ3BfZm10c3RyZWFtX3dyaXRlCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IGFyZ3BfZm10c3RyZWFtX3BvaW50CisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSBfYXJncF9mbXRzdHJlYW1fdXBkYXRlCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSBfYXJncF9mbXRzdHJlYW1fZW5zdXJlCisrI2VuZGlmCisrCisrI2lmbmRlZiBBUkdQX0ZTX0VJCisrI2RlZmluZSBBUkdQX0ZTX0VJIF9fZXh0ZXJuX2lubGluZQorKyNlbmRpZgorKworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0ciwgc2l6ZV90IF9fbGVuKQorK3sKKysgIGlmIChfX2ZzLT5wICsgX19sZW4gPD0gX19mcy0+ZW5kIHx8IF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChfX2ZzLCBfX2xlbikpCisrICAgIHsKKysgICAgICBtZW1jcHkgKF9fZnMtPnAsIF9fc3RyLCBfX2xlbik7CisrICAgICAgX19mcy0+cCArPSBfX2xlbjsKKysgICAgICByZXR1cm4gX19sZW47CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIDA7CisrfQorKworK0FSR1BfRlNfRUkgaW50CisrX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIF9fY29uc3QgY2hhciAqX19zdHIpCisreworKyAgc2l6ZV90IF9fbGVuID0gc3RybGVuIChfX3N0cik7CisrICBpZiAoX19sZW4pCisrICAgIHsKKysgICAgICBzaXplX3QgX193cm90ZSA9IF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKF9fZnMsIF9fc3RyLCBfX2xlbik7CisrICAgICAgcmV0dXJuIF9fd3JvdGUgPT0gX19sZW4gPyAwIDogLTE7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIDA7CisrfQorKworK0FSR1BfRlNfRUkgaW50CisrX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIGludCBfX2NoKQorK3sKKysgIGlmIChfX2ZzLT5wIDwgX19mcy0+ZW5kIHx8IF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChfX2ZzLCAxKSkKKysgICAgcmV0dXJuICpfX2ZzLT5wKysgPSBfX2NoOworKyAgZWxzZQorKyAgICByZXR1cm4gRU9GOworK30KKysKKysvKiBTZXQgX19GUydzIGxlZnQgbWFyZ2luIHRvIF9fTE1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19sbWFyZ2luKQorK3sKKysgIHNpemVfdCBfX29sZDsKKysgIGlmICgoc2l6ZV90KSAoX19mcy0+cCAtIF9fZnMtPmJ1ZikgPiBfX2ZzLT5wb2ludF9vZmZzKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoX19mcyk7CisrICBfX29sZCA9IF9fZnMtPmxtYXJnaW47CisrICBfX2ZzLT5sbWFyZ2luID0gX19sbWFyZ2luOworKyAgcmV0dXJuIF9fb2xkOworK30KKysKKysvKiBTZXQgX19GUydzIHJpZ2h0IG1hcmdpbiB0byBfX1JNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fcm1hcmdpbikKKyt7CisrICBzaXplX3QgX19vbGQ7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgX19vbGQgPSBfX2ZzLT5ybWFyZ2luOworKyAgX19mcy0+cm1hcmdpbiA9IF9fcm1hcmdpbjsKKysgIHJldHVybiBfX29sZDsKKyt9CisrCisrLyogU2V0IEZTJ3Mgd3JhcCBtYXJnaW4gdG8gX19XTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX3dtYXJnaW4pCisreworKyAgc2l6ZV90IF9fb2xkOworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIF9fb2xkID0gX19mcy0+d21hcmdpbjsKKysgIF9fZnMtPndtYXJnaW4gPSBfX3dtYXJnaW47CisrICByZXR1cm4gX19vbGQ7CisrfQorKworKy8qIFJldHVybiB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgY3VycmVudCBvdXRwdXQgcG9pbnQgaW4gX19GUy4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpCisreworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIHJldHVybiBfX2ZzLT5wb2ludF9jb2wgPj0gMCA/IF9fZnMtPnBvaW50X2NvbCA6IDA7CisrfQorKworKyNpZiAhX0xJQkMKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wdXRjCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fcHV0cworKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4KKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbgorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUKKysjZW5kaWYKKysKKysjZW5kaWYgLyogX19PUFRJTUlaRV9fICovCisrCisrI2VuZGlmIC8qIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUCAqLworKworKyNlbmRpZiAvKiBhcmdwLWZtdHN0cmVhbS5oICovCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1mcy14aW5sLmMgYi9saWJ1YXJncC9hcmdwLWZzLXhpbmwuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ3M2NiYmQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZnMteGlubC5jCitAQCAtMCwwICsxLDQ0IEBACisrLyogUmVhbCBkZWZpbml0aW9ucyBmb3IgZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMgaW4gYXJncC1mbXRzdHJlYW0uaAorKyAgIENvcHlyaWdodCAoQykgMTk5NywgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEFSR1BfRlNfRUkKKysjdW5kZWYgX19PUFRJTUlaRV9fCisrI2RlZmluZSBfX09QVElNSVpFX18gMQorKyNpbmNsdWRlICJhcmdwLWZtdHN0cmVhbS5oIgorKworKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysvKiBBZGQgd2VhayBhbGlhc2VzLiAgKi8KKysjaWYgX0xJQkMgLSAwICYmICFkZWZpbmVkIChBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVApICYmIGRlZmluZWQgKHdlYWtfYWxpYXMpCisrCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9wdXRjLCBhcmdwX2ZtdHN0cmVhbV9wdXRjKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcHV0cywgYXJncF9mbXRzdHJlYW1fcHV0cykKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3dyaXRlLCBhcmdwX2ZtdHN0cmVhbV93cml0ZSkKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luLCBhcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbikKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luLCBhcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbikKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luLCBhcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbikKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3BvaW50LCBhcmdwX2ZtdHN0cmVhbV9wb2ludCkKKysKKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWhlbHAuYyBiL2xpYnVhcmdwL2FyZ3AtaGVscC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNThhNWU2ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1oZWxwLmMKK0BAIC0wLDAgKzEsMTg4MiBAQAorKy8qIEhpZXJhcmNoaWFsIGFyZ3VtZW50IHBhcnNpbmcgaGVscCBvdXRwdXQKKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNworKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgIDEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBBSVggcmVxdWlyZXMgdGhpcyB0byBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIGZpbGUuICAqLworKyNpZm5kZWYgX19HTlVDX18KKysjIGlmIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgZWxzZQorKyMgIGlmZGVmIF9BSVgKKysjcHJhZ21hIGFsbG9jYQorKyMgIGVsc2UKKysjICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KKytjaGFyICphbGxvY2EgKCk7CisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZm5kZWYgXworKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuICAqLworKyMgaWYgKGRlZmluZWQgSEFWRV9MSUJJTlRMX0ggfHwgZGVmaW5lZCBfTElCQykgJiYgZGVmaW5lZCBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKysjICBpZmRlZiBfTElCQworKyMgICB1bmRlZiBkZ2V0dGV4dAorKyMgICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgXAorKyAgSU5UVVNFKF9fZGNnZXR0ZXh0KSAoZG9tYWluLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgKG1zZ2lkKQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZuZGVmIF9MSUJDCisrIyBpZiBIQVZFX1NUUkVSUk9SX1IKKysjICBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IKKytjaGFyICpzdHJlcnJvcl9yIChpbnQgZXJybnVtLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgaWYgIUhBVkVfREVDTF9TVFJFUlJPUgorK2NoYXIgKnN0cmVycm9yIChpbnQgZXJybnVtKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXJncC5oPgorKyNpbmNsdWRlICJhcmdwLWZtdHN0cmVhbS5oIgorKyNpbmNsdWRlIDxzdGRib29sLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpZm5kZWYgU0laRV9NQVgKKysjIGRlZmluZSBTSVpFX01BWCAoKHNpemVfdCkgLTEpCisrI2VuZGlmCisrCisrLyogVXNlci1zZWxlY3RhYmxlICh1c2luZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSkgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgorKworKyAgIFRoZXNlIG1heSBiZSBzcGVjaWZpZWQgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIGBBUkdQX0hFTFBfRk1UJywKKysgICB3aXRoIGEgY29udGVudHMgbGlrZTogIFZBUjE9VkFMMSxWQVIyPVZBTDIsQk9PTFZBUjIsbm8tQk9PTFZBUjIKKysgICBXaGVyZSBWQUxuIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiAgVGhlIGxpc3Qgb2YgdmFyaWFibGVzIGlzIGluIHRoZQorKyAgIFVQQVJBTV9OQU1FUyB2ZWN0b3IsIGJlbG93LiAgKi8KKysKKysvKiBEZWZhdWx0IHBhcmFtZXRlcnMuICAqLworKyNkZWZpbmUgRFVQX0FSR1MgICAgICAwICAgICAgICAgICAgICAgIC8qIFRydWUgaWYgb3B0aW9uIGFyZ3VtZW50IGNhbiBiZSBkdXBsaWNhdGVkLiAqLworKyNkZWZpbmUgRFVQX0FSR1NfTk9URSAxICAgICAgICAgICAgICAgIC8qIFRydWUgdG8gcHJpbnQgYSBub3RlIGFib3V0IGR1cGxpY2F0ZSBhcmdzLiAqLworKyNkZWZpbmUgU0hPUlRfT1BUX0NPTCAyICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBzaG9ydCBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBMT05HX09QVF9DT0wgIDYgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIGxvbmcgb3B0aW9ucyBzdGFydCAqLworKyNkZWZpbmUgRE9DX09QVF9DT0wgICAyICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBkb2Mgb3B0aW9ucyBzdGFydCAqLworKyNkZWZpbmUgT1BUX0RPQ19DT0wgIDI5ICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBvcHRpb24gdGV4dCBzdGFydHMgKi8KKysjZGVmaW5lIEhFQURFUl9DT0wgICAgMSAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggZ3JvdXAgaGVhZGVycyBhcmUgcHJpbnRlZCAqLworKyNkZWZpbmUgVVNBR0VfSU5ERU5UIDEyICAgICAgICAgICAgICAgIC8qIGluZGVudGF0aW9uIG9mIHdyYXBwZWQgdXNhZ2UgbGluZXMgKi8KKysjZGVmaW5lIFJNQVJHSU4gICAgICA3OSAgICAgICAgICAgICAgICAvKiByaWdodCBtYXJnaW4gdXNlZCBmb3Igd3JhcHBpbmcgKi8KKysKKysvKiBVc2VyLXNlbGVjdGFibGUgKHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlKSBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisrICAgVGhleSBtdXN0IGFsbCBiZSBvZiB0eXBlIGBpbnQnIGZvciB0aGUgcGFyc2luZyBjb2RlIHRvIHdvcmsuICAqLworK3N0cnVjdCB1cGFyYW1zCisreworKyAgLyogSWYgdHJ1ZSwgYXJndW1lbnRzIGZvciBhbiBvcHRpb24gYXJlIHNob3duIHdpdGggYm90aCBzaG9ydCBhbmQgbG9uZworKyAgICAgb3B0aW9ucywgZXZlbiB3aGVuIGEgZ2l2ZW4gb3B0aW9uIGhhcyBib3RoLCBlLmcuIGAteCBBUkcsIC0tbG9uZ3g9QVJHJy4KKysgICAgIElmIGZhbHNlLCB0aGVuIGlmIGFuIG9wdGlvbiBoYXMgYm90aCwgdGhlIGFyZ3VtZW50IGlzIG9ubHkgc2hvd24gd2l0aAorKyAgICAgdGhlIGxvbmcgb25lLCBlLmcuLCBgLXgsIC0tbG9uZ3g9QVJHJywgYW5kIGEgbWVzc2FnZSBpbmRpY2F0aW5nIHRoYXQKKysgICAgIHRoaXMgcmVhbGx5IG1lYW5zIGJvdGggaXMgcHJpbnRlZCBiZWxvdyB0aGUgb3B0aW9ucy4gICovCisrICBpbnQgZHVwX2FyZ3M7CisrCisrICAvKiBUaGlzIGlzIHRydWUgaWYgd2hlbiBEVVBfQVJHUyBpcyBmYWxzZSwgYW5kIHNvbWUgZHVwbGljYXRlIGFyZ3VtZW50cyBoYXZlCisrICAgICBiZWVuIHN1cHByZXNzZWQsIGFuIGV4cGxhbmF0b3J5IG1lc3NhZ2Ugc2hvdWxkIGJlIHByaW50ZWQuICAqLworKyAgaW50IGR1cF9hcmdzX25vdGU7CisrCisrICAvKiBWYXJpb3VzIG91dHB1dCBjb2x1bW5zLiAgKi8KKysgIGludCBzaG9ydF9vcHRfY29sOworKyAgaW50IGxvbmdfb3B0X2NvbDsKKysgIGludCBkb2Nfb3B0X2NvbDsKKysgIGludCBvcHRfZG9jX2NvbDsKKysgIGludCBoZWFkZXJfY29sOworKyAgaW50IHVzYWdlX2luZGVudDsKKysgIGludCBybWFyZ2luOworK307CisrCisrLyogVGhpcyBpcyBhIGdsb2JhbCB2YXJpYWJsZSwgYXMgdXNlciBvcHRpb25zIGFyZSBvbmx5IGV2ZXIgcmVhZCBvbmNlLiAgKi8KKytzdGF0aWMgc3RydWN0IHVwYXJhbXMgdXBhcmFtcyA9IHsKKysgIERVUF9BUkdTLCBEVVBfQVJHU19OT1RFLAorKyAgU0hPUlRfT1BUX0NPTCwgTE9OR19PUFRfQ09MLCBET0NfT1BUX0NPTCwgT1BUX0RPQ19DT0wsIEhFQURFUl9DT0wsCisrICBVU0FHRV9JTkRFTlQsIFJNQVJHSU4KKyt9OworKworKy8qIEEgcGFydGljdWxhciB1cGFyYW0sIGFuZCB3aGF0IHRoZSB1c2VyIG5hbWUgaXMuICAqLworK3N0cnVjdCB1cGFyYW1fbmFtZQorK3sKKysgIGNvbnN0IGNoYXIgbmFtZVsxNF07ICAgICAgICAgLyogVXNlciBuYW1lLiAgKi8KKysgIGJvb2wgaXNfYm9vbDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIGl0J3MgYGJvb2xlYW4nLiAgKi8KKysgIHVpbnQ4X3QgdXBhcmFtc19vZmZzOyAgICAgICAgICAgICAgICAvKiBMb2NhdGlvbiBvZiB0aGUgKGludCkgZmllbGQgaW4gVVBBUkFNUy4gICovCisrfTsKKysKKysvKiBUaGUgbmFtZS1maWVsZCBtYXBwaW5ncyB3ZSBrbm93IGFib3V0LiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IHVwYXJhbV9uYW1lIHVwYXJhbV9uYW1lc1tdID0KKyt7CisrICB7ICJkdXAtYXJncyIsICAgICAgIHRydWUsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgZHVwX2FyZ3MpIH0sCisrICB7ICJkdXAtYXJncy1ub3RlIiwgIHRydWUsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgZHVwX2FyZ3Nfbm90ZSkgfSwKKysgIHsgInNob3J0LW9wdC1jb2wiLCAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgc2hvcnRfb3B0X2NvbCkgfSwKKysgIHsgImxvbmctb3B0LWNvbCIsICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgbG9uZ19vcHRfY29sKSB9LAorKyAgeyAiZG9jLW9wdC1jb2wiLCAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkb2Nfb3B0X2NvbCkgfSwKKysgIHsgIm9wdC1kb2MtY29sIiwgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgb3B0X2RvY19jb2wpIH0sCisrICB7ICJoZWFkZXItY29sIiwgICAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGhlYWRlcl9jb2wpIH0sCisrICB7ICJ1c2FnZS1pbmRlbnQiLCAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIHVzYWdlX2luZGVudCkgfSwKKysgIHsgInJtYXJnaW4iLCAgICAgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgcm1hcmdpbikgfQorK307CisrI2RlZmluZSBudXBhcmFtX25hbWVzIChzaXplb2YgKHVwYXJhbV9uYW1lcykgLyBzaXplb2YgKHVwYXJhbV9uYW1lc1swXSkpCisrCisrLyogUmVhZCB1c2VyIG9wdGlvbnMgZnJvbSB0aGUgZW52aXJvbm1lbnQsIGFuZCBmaWxsIGluIFVQQVJBTVMgYXBwcm9waWF0ZWx5LiAgKi8KKytzdGF0aWMgdm9pZAorK2ZpbGxfaW5fdXBhcmFtcyAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIGNvbnN0IGNoYXIgKnZhciA9IGdldGVudiAoIkFSR1BfSEVMUF9GTVQiKTsKKysKKysjZGVmaW5lIFNLSVBXUyhwKSBkbyB7IHdoaWxlIChpc3NwYWNlICgqcCkpIHArKzsgfSB3aGlsZSAoMCk7CisrCisrICBpZiAodmFyKQorKyAgICAvKiBQYXJzZSB2YXIuICovCisrICAgIHdoaWxlICgqdmFyKQorKyAgICAgIHsKKysgICAgICAgU0tJUFdTICh2YXIpOworKworKyAgICAgICBpZiAoaXNhbHBoYSAoKnZhcikpCisrICAgICAgICAgeworKyAgICAgICAgICAgc2l6ZV90IHZhcl9sZW47CisrICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdXBhcmFtX25hbWUgKnVuOworKyAgICAgICAgICAgaW50IHVuc3BlYyA9IDAsIHZhbCA9IDA7CisrICAgICAgICAgICBjb25zdCBjaGFyICphcmcgPSB2YXI7CisrCisrICAgICAgICAgICB3aGlsZSAoaXNhbG51bSAoKmFyZykgfHwgKmFyZyA9PSAnLScgfHwgKmFyZyA9PSAnXycpCisrICAgICAgICAgICAgIGFyZysrOworKyAgICAgICAgICAgdmFyX2xlbiA9IGFyZyAtIHZhcjsKKysKKysgICAgICAgICAgIFNLSVBXUyAoYXJnKTsKKysKKysgICAgICAgICAgIGlmICgqYXJnID09ICdcMCcgfHwgKmFyZyA9PSAnLCcpCisrICAgICAgICAgICAgIHVuc3BlYyA9IDE7CisrICAgICAgICAgICBlbHNlIGlmICgqYXJnID09ICc9JykKKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIGFyZysrOworKyAgICAgICAgICAgICAgIFNLSVBXUyAoYXJnKTsKKysgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgaWYgKHVuc3BlYykKKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIGlmICh2YXJbMF0gPT0gJ24nICYmIHZhclsxXSA9PSAnbycgJiYgdmFyWzJdID09ICctJykKKysgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgdmFsID0gMDsKKysgICAgICAgICAgICAgICAgICAgdmFyICs9IDM7CisrICAgICAgICAgICAgICAgICAgIHZhcl9sZW4gLT0gMzsKKysgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICB2YWwgPSAxOworKyAgICAgICAgICAgICB9CisrICAgICAgICAgICBlbHNlIGlmIChpc2RpZ2l0ICgqYXJnKSkKKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIHZhbCA9IGF0b2kgKGFyZyk7CisrICAgICAgICAgICAgICAgd2hpbGUgKGlzZGlnaXQgKCphcmcpKQorKyAgICAgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICAgICAgU0tJUFdTIChhcmcpOworKyAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICB1biA9IHVwYXJhbV9uYW1lczsKKysgICAgICAgICAgIHNpemVfdCB1OworKyAgICAgICAgICAgZm9yICh1ID0gMDsgdSA8IG51cGFyYW1fbmFtZXM7ICsrdW4sICsrdSkKKysgICAgICAgICAgICAgaWYgKHN0cmxlbiAodW4tPm5hbWUpID09IHZhcl9sZW4KKysgICAgICAgICAgICAgICAgICYmIHN0cm5jbXAgKHZhciwgdW4tPm5hbWUsIHZhcl9sZW4pID09IDApCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgaWYgKHVuc3BlYyAmJiAhdW4tPmlzX2Jvb2wpCisrICAgICAgICAgICAgICAgICAgIGFyZ3BfZmFpbHVyZSAoc3RhdGUsIDAsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcCisrJS4qczogQVJHUF9IRUxQX0ZNVCBwYXJhbWV0ZXIgcmVxdWlyZXMgYSB2YWx1ZSIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgdmFyX2xlbiwgdmFyKTsKKysgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgKihpbnQgKikoKGNoYXIgKikmdXBhcmFtcyArIHVuLT51cGFyYW1zX29mZnMpID0gdmFsOworKyAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgaWYgKHUgPT0gbnVwYXJhbV9uYW1lcykKKysgICAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sICJcCisrJS4qczogVW5rbm93biBBUkdQX0hFTFBfRk1UIHBhcmFtZXRlciIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgdmFyX2xlbiwgdmFyKTsKKysKKysgICAgICAgICAgIHZhciA9IGFyZzsKKysgICAgICAgICAgIGlmICgqdmFyID09ICcsJykKKysgICAgICAgICAgICAgdmFyKys7CisrICAgICAgICAgfQorKyAgICAgICBlbHNlIGlmICgqdmFyKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGFyZ3BfZmFpbHVyZSAoc3RhdGUsIDAsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHYXJiYWdlIGluIEFSR1BfSEVMUF9GTVQ6ICVzIiksIHZhcik7CisrICAgICAgICAgICBicmVhazsKKysgICAgICAgICB9CisrICAgICAgfQorK30KKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGhhc24ndCBiZWVuIG1hcmtlZCBpbnZpc2libGUuICBWaXNpYmlsaXR5IG9ubHkgYWZmZWN0cworKyAgIHdoZXRoZXIgT1BUIGlzIGRpc3BsYXllZCBvciB1c2VkIGluIHNvcnRpbmcsIG5vdCBvcHRpb24gc2hhZG93aW5nLiAgKi8KKysjZGVmaW5lIG92aXNpYmxlKG9wdCkgKCEgKChvcHQpLT5mbGFncyAmIE9QVElPTl9ISURERU4pKQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaXMgYW4gYWxpYXMgZm9yIGFuIGVhcmxpZXIgb3B0aW9uLiAgKi8KKysjZGVmaW5lIG9hbGlhcyhvcHQpICgob3B0KS0+ZmxhZ3MgJiBPUFRJT05fQUxJQVMpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyBhbiBkb2N1bWVudGF0aW9uLW9ubHkgZW50cnkuICAqLworKyNkZWZpbmUgb2RvYyhvcHQpICgob3B0KS0+ZmxhZ3MgJiBPUFRJT05fRE9DKQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaXMgdGhlIGVuZC1vZi1saXN0IG1hcmtlciBmb3IgYSBsaXN0IG9mIG9wdGlvbnMuICAqLworKyNkZWZpbmUgb2VuZChvcHQpIF9fb3B0aW9uX2lzX2VuZCAob3B0KQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaGFzIGEgc2hvcnQgb3B0aW9uLiAgKi8KKysjZGVmaW5lIG9zaG9ydChvcHQpIF9fb3B0aW9uX2lzX3Nob3J0IChvcHQpCisrCisrLyoKKysgICBUaGUgaGVscCBmb3JtYXQgZm9yIGEgcGFydGljdWxhciBvcHRpb24gaXMgbGlrZToKKysKKysgICAgIC14QVJHLCAteUFSRywgLS1sb25nMT1BUkcsIC0tbG9uZzI9QVJHICAgICAgICBEb2N1bWVudGF0aW9uLi4uCisrCisrICAgV2hlcmUgQVJHIHdpbGwgYmUgb21pdHRlZCBpZiB0aGVyZSdzIG5vIGFyZ3VtZW50LCBmb3IgdGhpcyBvcHRpb24sIG9yCisrICAgd2lsbCBiZSBzdXJyb3VuZGVkIGJ5ICJbIiBhbmQgIl0iIGFwcHJvcGlhdGVseSBpZiB0aGUgYXJndW1lbnQgaXMKKysgICBvcHRpb25hbC4gIFRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBpcyB3b3JkLXdyYXBwZWQgYXBwcm9waWF0ZWx5LCBhbmQgaWYKKysgICB0aGUgbGlzdCBvZiBvcHRpb25zIGlzIGxvbmcgZW5vdWdoLCBpdCB3aWxsIGJlIHN0YXJ0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLgorKyAgIElmIHRoZXJlIGFyZSBubyBzaG9ydCBvcHRpb25zIGZvciBhIGdpdmVuIG9wdGlvbiwgdGhlIGZpcnN0IGxvbmcgb3B0aW9uIGlzCisrICAgaW5kZW50ZWQgc2xpZ2hseSBpbiBhIHdheSB0aGF0J3Mgc3VwcG9zZWQgdG8gbWFrZSBtb3N0IGxvbmcgb3B0aW9ucyBhcHBlYXIKKysgICB0byBiZSBpbiBhIHNlcGFyYXRlIGNvbHVtbi4KKysKKysgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBvdXRwdXQgKGZyb20gcHMpOgorKworKyAgICAgLXAgUElELCAtLXBpZD1QSUQgICAgICAgICAgTGlzdCB0aGUgcHJvY2VzcyBQSUQKKysgICAgICAgIC0tcGdycD1QR1JQICAgICAgICAgICAgTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUAorKyAgICAgLVAsIC14LCAtLW5vLXBhcmVudCAgICAgICAgSW5jbHVkZSBwcm9jZXNzZXMgd2l0aG91dCBwYXJlbnRzCisrICAgICAtUSwgLS1hbGwtZmllbGRzICAgICAgICAgICBEb24ndCBlbGlkZSB1bnVzYWJsZSBmaWVsZHMgKG5vcm1hbGx5IGlmIHRoZXJlJ3MKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29tZSByZWFzb24gcHMgY2FuJ3QgcHJpbnQgYSBmaWVsZCBmb3IgYW55CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBvdXRwdXQgZW50aXJlbHkpCisrICAgICAtciwgLS1yZXZlcnNlLCAtLWdyYXR1aXRvdXNseS1sb25nLXJldmVyc2Utb3B0aW9uCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldmVyc2UgdGhlIG9yZGVyIG9mIGFueSBzb3J0CisrICAgICAgICAtLXNlc3Npb25bPVNJRF0gICAgICAgIEFkZCB0aGUgcHJvY2Vzc2VzIGZyb20gdGhlIHNlc3Npb24gU0lEICh3aGljaAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byB0aGUgc2lkIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MpCisrCisrICAgIEhlcmUgYXJlIHNvbWUgbW9yZSBvcHRpb25zOgorKyAgICAgLWYgWk9ULCAtLWZvb25seT1aT1QgICAgICAgR2xvcmsgYSBmb29ubHkKKysgICAgIC16LCAtLXphemEgICAgICAgICAgICAgICAgIFNuaXQgYSB6YXIKKysKKysgICAgIC0/LCAtLWhlbHAgICAgICAgICAgICAgICAgIEdpdmUgdGhpcyBoZWxwIGxpc3QKKysgICAgICAgIC0tdXNhZ2UgICAgICAgICAgICAgICAgR2l2ZSBhIHNob3J0IHVzYWdlIG1lc3NhZ2UKKysgICAgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgIFByaW50IHByb2dyYW0gdmVyc2lvbgorKworKyAgIFRoZSBzdHJ1Y3QgYXJncF9vcHRpb24gYXJyYXkgZm9yIHRoZSBhYm92ZSBjb3VsZCBsb29rIGxpa2U6CisrCisrICAgeworKyAgICAgeyJwaWQiLCAgICAgICAncCcsICAgICAgIlBJRCIsICAwLCAiTGlzdCB0aGUgcHJvY2VzcyBQSUQifSwKKysgICAgIHsicGdycCIsICAgICAgT1BUX1BHUlAsICJQR1JQIiwgMCwgIkxpc3QgcHJvY2Vzc2VzIGluIHRoZSBwcm9jZXNzIGdyb3VwIFBHUlAifSwKKysgICAgIHsibm8tcGFyZW50IiwgJ1AnLCAgICAgICAgICAgICAgMCwgICAgIDAsICJJbmNsdWRlIHByb2Nlc3NlcyB3aXRob3V0IHBhcmVudHMifSwKKysgICAgIHswLCAgICAgICAgICAgJ3gnLCAgICAgICAwLCAgICAgT1BUSU9OX0FMSUFTfSwKKysgICAgIHsiYWxsLWZpZWxkcyIsJ1EnLCAgICAgICAwLCAgICAgMCwgIkRvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgdGhlcmUncyBzb21lIHJlYXNvbiBwcyBjYW4ndCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHByaW50IGEgZmllbGQgZm9yIGFueSBwcm9jZXNzLCBpdCdzIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlbW92ZWQgZnJvbSB0aGUgb3V0cHV0IGVudGlyZWx5KSIgfSwKKysgICAgIHsicmV2ZXJzZSIsICAgJ3InLCAgICAgICAwLCAgICAgMCwgIlJldmVyc2UgdGhlIG9yZGVyIG9mIGFueSBzb3J0In0sCisrICAgICB7ImdyYXR1aXRvdXNseS1sb25nLXJldmVyc2Utb3B0aW9uIiwgMCwgMCwgT1BUSU9OX0FMSUFTfSwKKysgICAgIHsic2Vzc2lvbiIsICAgT1BUX1NFU1MsICAiU0lEIiwgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZCB0aGUgcHJvY2Vzc2VzIGZyb20gdGhlIHNlc3Npb24iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBTSUQgKHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBzaWQgb2YiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgY3VycmVudCBwcm9jZXNzKSIgfSwKKysKKysgICAgIHswLDAsMCwwLCAiSGVyZSBhcmUgc29tZSBtb3JlIG9wdGlvbnM6In0sCisrICAgICB7ImZvb25seSIsICdmJywgIlpPVCIsIDAsICJHbG9yayBhIGZvb25seSJ9LAorKyAgICAgeyJ6YXphIiwgJ3onLCAwLCAwLCAiU25pdCBhIHphciJ9LAorKworKyAgICAgezB9CisrICAgfQorKworKyAgIE5vdGUgdGhhdCB0aGUgbGFzdCB0aHJlZSBvcHRpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHN1cHBsaWVkIGJ5IGFyZ3BfcGFyc2UsCisrICAgdW5sZXNzIHlvdSB0ZWxsIGl0IG5vdCB0byB3aXRoIEFSR1BfTk9fSEVMUC4KKysKKysqLworKworKy8qIFJldHVybnMgdHJ1ZSBpZiBDSCBvY2N1cnMgYmV0d2VlbiBCRUcgYW5kIEVORC4gICovCisrc3RhdGljIGludAorK2ZpbmRfY2hhciAoY2hhciBjaCwgY2hhciAqYmVnLCBjaGFyICplbmQpCisreworKyAgd2hpbGUgKGJlZyA8IGVuZCkKKysgICAgaWYgKCpiZWcgPT0gY2gpCisrICAgICAgcmV0dXJuIDE7CisrICAgIGVsc2UKKysgICAgICBiZWcrKzsKKysgIHJldHVybiAwOworK30KKysKKytzdHJ1Y3QgaG9sX2NsdXN0ZXI7ICAgICAgICAgICAgLyogZndkIGRlY2wgKi8KKysKKytzdHJ1Y3QgaG9sX2VudHJ5CisreworKyAgLyogRmlyc3Qgb3B0aW9uLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0OworKyAgLyogTnVtYmVyIG9mIG9wdGlvbnMgKGluY2x1ZGluZyBhbGlhc2VzKS4gICovCisrICB1bnNpZ25lZCBudW07CisrCisrICAvKiBBIHBvaW50ZXJzIGludG8gdGhlIEhPTCdzIHNob3J0X29wdGlvbnMgZmllbGQsIHRvIHRoZSBmaXJzdCBzaG9ydCBvcHRpb24KKysgICAgIGxldHRlciBmb3IgdGhpcyBlbnRyeS4gIFRoZSBvcmRlciBvZiB0aGUgY2hhcmFjdGVycyBmb2xsb3dpbmcgdGhpcyBwb2ludAorKyAgICAgY29ycmVzcG9uZHMgdG8gdGhlIG9yZGVyIG9mIG9wdGlvbnMgcG9pbnRlZCB0byBieSBPUFQsIGFuZCB0aGVyZSBhcmUgYXQKKysgICAgIG1vc3QgTlVNLiAgQSBzaG9ydCBvcHRpb24gcmVjb3JkZWQgaW4gYSBvcHRpb24gZm9sbG93aW5nIE9QVCBpcyBvbmx5CisrICAgICB2YWxpZCBpZiBpdCBvY2N1cnMgaW4gdGhlIHJpZ2h0IHBsYWNlIGluIFNIT1JUX09QVElPTlMgKG90aGVyd2lzZSBpdCdzCisrICAgICBwcm9iYWJseSBiZWVuIHNoYWRvd2VkIGJ5IHNvbWUgb3RoZXIgZW50cnkpLiAgKi8KKysgIGNoYXIgKnNob3J0X29wdGlvbnM7CisrCisrICAvKiBFbnRyaWVzIGFyZSBzb3J0ZWQgYnkgdGhlaXIgZ3JvdXAgZmlyc3QsIGluIHRoZSBvcmRlcjoKKysgICAgICAgMSwgMiwgLi4uLCBuLCAwLCAtbSwgLi4uLCAtMiwgLTEKKysgICAgIGFuZCB0aGVuIGFscGhhYmV0aWNhbGx5IHdpdGhpbiBlYWNoIGdyb3VwLiAgVGhlIGRlZmF1bHQgaXMgMC4gICovCisrICBpbnQgZ3JvdXA7CisrCisrICAvKiBUaGUgY2x1c3RlciBvZiBvcHRpb25zIHRoaXMgZW50cnkgYmVsb25ncyB0bywgb3IgMCBpZiBub25lLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcjsKKysKKysgIC8qIFRoZSBhcmdwIGZyb20gd2hpY2ggdGhpcyBvcHRpb24gY2FtZS4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKyt9OworKworKy8qIEEgY2x1c3RlciBvZiBlbnRyaWVzIHRvIHJlZmxlY3QgdGhlIGFyZ3AgdHJlZSBzdHJ1Y3R1cmUuICAqLworK3N0cnVjdCBob2xfY2x1c3RlcgorK3sKKysgIC8qIEEgZGVzY3JpcHRpdmUgaGVhZGVyIHByaW50ZWQgYmVmb3JlIG9wdGlvbnMgaW4gdGhpcyBjbHVzdGVyLiAgKi8KKysgIGNvbnN0IGNoYXIgKmhlYWRlcjsKKysKKysgIC8qIFVzZWQgdG8gb3JkZXIgY2x1c3RlcnMgd2l0aGluIHRoZSBzYW1lIGdyb3VwIHdpdGggdGhlIHNhbWUgcGFyZW50LAorKyAgICAgYWNjb3JkaW5nIHRvIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IG9jY3VycmVkIGluIHRoZSBwYXJlbnQgYXJncCdzIGNoaWxkCisrICAgICBsaXN0LiAgKi8KKysgIGludCBpbmRleDsKKysKKysgIC8qIEhvdyB0byBzb3J0IHRoaXMgY2x1c3RlciB3aXRoIHJlc3BlY3QgdG8gb3B0aW9ucyBhbmQgb3RoZXIgY2x1c3RlcnMgYXQgdGhlCisrICAgICBzYW1lIGRlcHRoIChjbHVzdGVycyBhbHdheXMgZm9sbG93IG9wdGlvbnMgaW4gdGhlIHNhbWUgZ3JvdXApLiAgKi8KKysgIGludCBncm91cDsKKysKKysgIC8qIFRoZSBjbHVzdGVyIHRvIHdoaWNoIHRoaXMgY2x1c3RlciBiZWxvbmdzLCBvciAwIGlmIGl0J3MgYXQgdGhlIGJhc2UKKysgICAgIGxldmVsLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqcGFyZW50OworKworKyAgLyogVGhlIGFyZ3AgZnJvbSB3aGljaCB0aGlzIGNsdXN0ZXIgaXMgKGV2ZW50dWFsbHkpIGRlcml2ZWQuICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBUaGUgZGlzdGFuY2UgdGhpcyBjbHVzdGVyIGlzIGZyb20gdGhlIHJvb3QuICAqLworKyAgaW50IGRlcHRoOworKworKyAgLyogQ2x1c3RlcnMgaW4gYSBnaXZlbiBob2wgYXJlIGtlcHQgaW4gYSBsaW5rZWQgbGlzdCwgdG8gbWFrZSBmcmVlaW5nIHRoZW0KKysgICAgIHBvc3NpYmxlLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqbmV4dDsKKyt9OworKworKy8qIEEgbGlzdCBvZiBvcHRpb25zIGZvciBoZWxwLiAgKi8KKytzdHJ1Y3QgaG9sCisreworKyAgLyogQW4gYXJyYXkgb2YgaG9sX2VudHJ5J3MuICAqLworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cmllczsKKysgIC8qIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGlzIGhvbC4gIElmIHRoaXMgZmllbGQgaXMgemVybywgdGhlIG90aGVycworKyAgICAgYXJlIHVuZGVmaW5lZC4gICovCisrICB1bnNpZ25lZCBudW1fZW50cmllczsKKysKKysgIC8qIEEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIHNob3J0IG9wdGlvbnMgaW4gdGhpcyBIT0wuICBFYWNoIGVudHJ5IGNvbnRhaW5zCisrICAgICBwb2ludGVycyBpbnRvIHRoaXMgc3RyaW5nLCBzbyB0aGUgb3JkZXIgY2FuJ3QgYmUgbWVzc2VkIHdpdGggYmxpbmRseS4gICovCisrICBjaGFyICpzaG9ydF9vcHRpb25zOworKworKyAgLyogQ2x1c3RlcnMgb2YgZW50cmllcyBpbiB0aGlzIGhvbC4gICovCisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsdXN0ZXJzOworK307CisrCisrLyogQ3JlYXRlIGEgc3RydWN0IGhvbCBmcm9tIHRoZSBvcHRpb25zIGluIEFSR1AuICBDTFVTVEVSIGlzIHRoZQorKyAgIGhvbF9jbHVzdGVyIGluIHdoaWNoIHRoZXNlIGVudHJpZXMgb2NjdXIsIG9yIDAsIGlmIGF0IHRoZSByb290LiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbCAqCisrbWFrZV9ob2wgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsdXN0ZXIpCisreworKyAgY2hhciAqc287CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm87CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdHMgPSBhcmdwLT5vcHRpb25zOworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnk7CisrICB1bnNpZ25lZCBudW1fc2hvcnRfb3B0aW9ucyA9IDA7CisrICBzdHJ1Y3QgaG9sICpob2wgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhvbCkpOworKworKyAgYXNzZXJ0IChob2wpOworKworKyAgaG9sLT5udW1fZW50cmllcyA9IDA7CisrICBob2wtPmNsdXN0ZXJzID0gMDsKKysKKysgIGlmIChvcHRzKQorKyAgICB7CisrICAgICAgaW50IGN1cl9ncm91cCA9IDA7CisrCisrICAgICAgLyogVGhlIGZpcnN0IG9wdGlvbiBtdXN0IG5vdCBiZSBhbiBhbGlhcy4gICovCisrICAgICAgYXNzZXJ0ICghIG9hbGlhcyAob3B0cykpOworKworKyAgICAgIC8qIENhbGN1bGF0ZSB0aGUgc3BhY2UgbmVlZGVkLiAgKi8KKysgICAgICBmb3IgKG8gPSBvcHRzOyAhIG9lbmQgKG8pOyBvKyspCisrICAgICAgIHsKKysgICAgICAgICBpZiAoISBvYWxpYXMgKG8pKQorKyAgICAgICAgICAgaG9sLT5udW1fZW50cmllcysrOworKyAgICAgICAgIGlmIChvc2hvcnQgKG8pKQorKyAgICAgICAgICAgbnVtX3Nob3J0X29wdGlvbnMrKzsgICAgICAgIC8qIFRoaXMgaXMgYW4gdXBwZXIgYm91bmQuICAqLworKyAgICAgICB9CisrCisrICAgICAgaG9sLT5lbnRyaWVzID0gbWFsbG9jIChzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpICogaG9sLT5udW1fZW50cmllcyk7CisrICAgICAgaG9sLT5zaG9ydF9vcHRpb25zID0gbWFsbG9jIChudW1fc2hvcnRfb3B0aW9ucyArIDEpOworKworKyAgICAgIGFzc2VydCAoaG9sLT5lbnRyaWVzICYmIGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrI2lmIFNJWkVfTUFYIDw9IFVJTlRfTUFYCisrICAgICAgYXNzZXJ0IChob2wtPm51bV9lbnRyaWVzIDw9IFNJWkVfTUFYIC8gc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSk7CisrI2VuZGlmCisrCisrICAgICAgLyogRmlsbCBpbiB0aGUgZW50cmllcy4gICovCisrICAgICAgc28gPSBob2wtPnNob3J0X29wdGlvbnM7CisrICAgICAgZm9yIChvID0gb3B0cywgZW50cnkgPSBob2wtPmVudHJpZXM7ICEgb2VuZCAobyk7IGVudHJ5KyspCisrICAgICAgIHsKKysgICAgICAgICBlbnRyeS0+b3B0ID0gbzsKKysgICAgICAgICBlbnRyeS0+bnVtID0gMDsKKysgICAgICAgICBlbnRyeS0+c2hvcnRfb3B0aW9ucyA9IHNvOworKyAgICAgICAgIGVudHJ5LT5ncm91cCA9IGN1cl9ncm91cCA9CisrICAgICAgICAgICBvLT5ncm91cAorKyAgICAgICAgICAgPyBvLT5ncm91cAorKyAgICAgICAgICAgOiAoKCFvLT5uYW1lICYmICFvLT5rZXkpCisrICAgICAgICAgICAgICA/IGN1cl9ncm91cCArIDEKKysgICAgICAgICAgICAgIDogY3VyX2dyb3VwKTsKKysgICAgICAgICBlbnRyeS0+Y2x1c3RlciA9IGNsdXN0ZXI7CisrICAgICAgICAgZW50cnktPmFyZ3AgPSBhcmdwOworKworKyAgICAgICAgIGRvCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIGVudHJ5LT5udW0rKzsKKysgICAgICAgICAgICAgaWYgKG9zaG9ydCAobykgJiYgISBmaW5kX2NoYXIgKG8tPmtleSwgaG9sLT5zaG9ydF9vcHRpb25zLCBzbykpCisrICAgICAgICAgICAgICAgLyogTyBoYXMgYSB2YWxpZCBzaG9ydCBvcHRpb24gd2hpY2ggaGFzbid0IGFscmVhZHkgYmVlbiB1c2VkLiovCisrICAgICAgICAgICAgICAgKnNvKysgPSBvLT5rZXk7CisrICAgICAgICAgICAgIG8rKzsKKysgICAgICAgICAgIH0KKysgICAgICAgICB3aGlsZSAoISBvZW5kIChvKSAmJiBvYWxpYXMgKG8pKTsKKysgICAgICAgfQorKyAgICAgICpzbyA9ICdcMCc7ICAgICAgICAgICAgICAvKiBudWxsIHRlcm1pbmF0ZWQgc28gd2UgY2FuIGZpbmQgdGhlIGxlbmd0aCAqLworKyAgICB9CisrCisrICByZXR1cm4gaG9sOworK30KKysKKysvKiBBZGQgYSBuZXcgY2x1c3RlciB0byBIT0wsIHdpdGggdGhlIGdpdmVuIEdST1VQIGFuZCBIRUFERVIgKHRha2VuIGZyb20gdGhlCisrICAgYXNzb2NpYXRlZCBhcmdwIGNoaWxkIGxpc3QgZW50cnkpLCBJTkRFWCwgYW5kIFBBUkVOVCwgYW5kIHJldHVybiBhIHBvaW50ZXIKKysgICB0byBpdC4gIEFSR1AgaXMgdGhlIGFyZ3AgdGhhdCB0aGlzIGNsdXN0ZXIgcmVzdWx0cyBmcm9tLiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbF9jbHVzdGVyICoKKytob2xfYWRkX2NsdXN0ZXIgKHN0cnVjdCBob2wgKmhvbCwgaW50IGdyb3VwLCBjb25zdCBjaGFyICpoZWFkZXIsIGludCBpbmRleCwKKysgICAgICAgICAgICAgICAgc3RydWN0IGhvbF9jbHVzdGVyICpwYXJlbnQsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2wgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhvbF9jbHVzdGVyKSk7CisrICBpZiAoY2wpCisrICAgIHsKKysgICAgICBjbC0+Z3JvdXAgPSBncm91cDsKKysgICAgICBjbC0+aGVhZGVyID0gaGVhZGVyOworKworKyAgICAgIGNsLT5pbmRleCA9IGluZGV4OworKyAgICAgIGNsLT5wYXJlbnQgPSBwYXJlbnQ7CisrICAgICAgY2wtPmFyZ3AgPSBhcmdwOworKyAgICAgIGNsLT5kZXB0aCA9IHBhcmVudCA/IHBhcmVudC0+ZGVwdGggKyAxIDogMDsKKysKKysgICAgICBjbC0+bmV4dCA9IGhvbC0+Y2x1c3RlcnM7CisrICAgICAgaG9sLT5jbHVzdGVycyA9IGNsOworKyAgICB9CisrICByZXR1cm4gY2w7CisrfQorKworKy8qIEZyZWUgSE9MIGFuZCBhbnkgcmVzb3VyY2VzIGl0IHVzZXMuICAqLworK3N0YXRpYyB2b2lkCisraG9sX2ZyZWUgKHN0cnVjdCBob2wgKmhvbCkKKyt7CisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsID0gaG9sLT5jbHVzdGVyczsKKysKKysgIHdoaWxlIChjbCkKKysgICAgeworKyAgICAgIHN0cnVjdCBob2xfY2x1c3RlciAqbmV4dCA9IGNsLT5uZXh0OworKyAgICAgIGZyZWUgKGNsKTsKKysgICAgICBjbCA9IG5leHQ7CisrICAgIH0KKysKKysgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgeworKyAgICAgIGZyZWUgKGhvbC0+ZW50cmllcyk7CisrICAgICAgZnJlZSAoaG9sLT5zaG9ydF9vcHRpb25zKTsKKysgICAgfQorKworKyAgZnJlZSAoaG9sKTsKKyt9CisrCisrc3RhdGljIGludAorK2hvbF9lbnRyeV9zaG9ydF9pdGVyYXRlIChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIHVuc2lnbmVkIG5vcHRzOworKyAgaW50IHZhbCA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwgKnJlYWwgPSBlbnRyeS0+b3B0OworKyAgY2hhciAqc28gPSBlbnRyeS0+c2hvcnRfb3B0aW9uczsKKysKKysgIGZvciAob3B0ID0gcmVhbCwgbm9wdHMgPSBlbnRyeS0+bnVtOyBub3B0cyA+IDAgJiYgIXZhbDsgb3B0KyssIG5vcHRzLS0pCisrICAgIGlmIChvc2hvcnQgKG9wdCkgJiYgKnNvID09IG9wdC0+a2V5KQorKyAgICAgIHsKKysgICAgICAgaWYgKCFvYWxpYXMgKG9wdCkpCisrICAgICAgICAgcmVhbCA9IG9wdDsKKysgICAgICAgaWYgKG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHZhbCA9ICgqZnVuYykob3B0LCByZWFsLCBkb21haW4sIGNvb2tpZSk7CisrICAgICAgIHNvKys7CisrICAgICAgfQorKworKyAgcmV0dXJuIHZhbDsKKyt9CisrCisrc3RhdGljIF9faW5saW5lX18gaW50CisrX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorK2hvbF9lbnRyeV9sb25nX2l0ZXJhdGUgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5LAorKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnVuYykoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSksCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICB1bnNpZ25lZCBub3B0czsKKysgIGludCB2YWwgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsICpyZWFsID0gZW50cnktPm9wdDsKKysKKysgIGZvciAob3B0ID0gcmVhbCwgbm9wdHMgPSBlbnRyeS0+bnVtOyBub3B0cyA+IDAgJiYgIXZhbDsgb3B0KyssIG5vcHRzLS0pCisrICAgIGlmIChvcHQtPm5hbWUpCisrICAgICAgeworKyAgICAgICBpZiAoIW9hbGlhcyAob3B0KSkKKysgICAgICAgICByZWFsID0gb3B0OworKyAgICAgICBpZiAob3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgdmFsID0gKCpmdW5jKShvcHQsIHJlYWwsIGRvbWFpbiwgY29va2llKTsKKysgICAgICB9CisrCisrICByZXR1cm4gdmFsOworK30KKysKKysvKiBJdGVyYXRvciB0aGF0IHJldHVybnMgdHJ1ZSBmb3IgdGhlIGZpcnN0IHNob3J0IG9wdGlvbi4gICovCisrc3RhdGljIF9faW5saW5lX18gaW50CisrdW50aWxfc2hvcnQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LCBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgcmV0dXJuIG9zaG9ydCAob3B0KSA/IG9wdC0+a2V5IDogMDsKKyt9CisrCisrLyogUmV0dXJucyB0aGUgZmlyc3QgdmFsaWQgc2hvcnQgb3B0aW9uIGluIEVOVFJZLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUuICAqLworK3N0YXRpYyBjaGFyCisraG9sX2VudHJ5X2ZpcnN0X3Nob3J0IChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSkKKyt7CisrICByZXR1cm4gaG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGVudHJ5LCB1bnRpbF9zaG9ydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sIDApOworK30KKysKKysvKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWxpZCBsb25nIG9wdGlvbiBpbiBFTlRSWSwgb3IgMCBpZiB0aGVyZSBpcyBub25lLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisraG9sX2VudHJ5X2ZpcnN0X2xvbmcgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5KQorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0OworKyAgdW5zaWduZWQgbnVtOworKyAgZm9yIChvcHQgPSBlbnRyeS0+b3B0LCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgcmV0dXJuIG9wdC0+bmFtZTsKKysgIHJldHVybiAwOworK30KKysKKysvKiBSZXR1cm5zIHRoZSBlbnRyeSBpbiBIT0wgd2l0aCB0aGUgbG9uZyBvcHRpb24gbmFtZSBOQU1FLCBvciAwIGlmIHRoZXJlIGlzCisrICAgbm9uZS4gICovCisrc3RhdGljIHN0cnVjdCBob2xfZW50cnkgKgorK2hvbF9maW5kX2VudHJ5IChzdHJ1Y3QgaG9sICpob2wsIGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkgPSBob2wtPmVudHJpZXM7CisrICB1bnNpZ25lZCBudW1fZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXM7CisrCisrICB3aGlsZSAobnVtX2VudHJpZXMtLSA+IDApCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCA9IGVudHJ5LT5vcHQ7CisrICAgICAgdW5zaWduZWQgbnVtX29wdHMgPSBlbnRyeS0+bnVtOworKworKyAgICAgIHdoaWxlIChudW1fb3B0cy0tID4gMCkKKysgICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSAmJiBzdHJjbXAgKG9wdC0+bmFtZSwgbmFtZSkgPT0gMCkKKysgICAgICAgICByZXR1cm4gZW50cnk7CisrICAgICAgIGVsc2UKKysgICAgICAgICBvcHQrKzsKKysKKysgICAgICBlbnRyeSsrOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrLyogSWYgYW4gZW50cnkgd2l0aCB0aGUgbG9uZyBvcHRpb24gTkFNRSBvY2N1cnMgaW4gSE9MLCBzZXQgaXQncyBzcGVjaWFsCisrICAgc29ydCBwb3NpdGlvbiB0byBHUk9VUC4gICovCisrc3RhdGljIHZvaWQKKytob2xfc2V0X2dyb3VwIChzdHJ1Y3QgaG9sICpob2wsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBncm91cCkKKyt7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSA9IGhvbF9maW5kX2VudHJ5IChob2wsIG5hbWUpOworKyAgaWYgKGVudHJ5KQorKyAgICBlbnRyeS0+Z3JvdXAgPSBncm91cDsKKyt9CisrCisrLyogT3JkZXIgYnkgZ3JvdXA6ICAwLCAxLCAyLCAuLi4sIG4sIC1tLCAuLi4sIC0yLCAtMS4KKysgICBFUSBpcyB3aGF0IHRvIHJldHVybiBpZiBHUk9VUDEgYW5kIEdST1VQMiBhcmUgdGhlIHNhbWUuICAqLworK3N0YXRpYyBpbnQKKytncm91cF9jbXAgKGludCBncm91cDEsIGludCBncm91cDIsIGludCBlcSkKKyt7CisrICBpZiAoZ3JvdXAxID09IGdyb3VwMikKKysgICAgcmV0dXJuIGVxOworKyAgZWxzZSBpZiAoKGdyb3VwMSA8IDAgJiYgZ3JvdXAyIDwgMCkgfHwgKGdyb3VwMSA+PSAwICYmIGdyb3VwMiA+PSAwKSkKKysgICAgcmV0dXJuIGdyb3VwMSAtIGdyb3VwMjsKKysgIGVsc2UKKysgICAgcmV0dXJuIGdyb3VwMiAtIGdyb3VwMTsKKyt9CisrCisrLyogQ29tcGFyZSBjbHVzdGVycyBDTDEgJiBDTDIgYnkgdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYXBwZWFyIGluCisrICAgb3V0cHV0LiAgKi8KKytzdGF0aWMgaW50CisraG9sX2NsdXN0ZXJfY21wIChjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsMSwgY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDIpCisreworKyAgLyogSWYgb25lIGNsdXN0ZXIgaXMgZGVlcGVyIHRoYW4gdGhlIG90aGVyLCB1c2UgaXRzIGFuY2VzdG9yIGF0IHRoZSBzYW1lCisrICAgICBsZXZlbCwgc28gdGhhdCBmaW5kaW5nIHRoZSBjb21tb24gYW5jZXN0b3IgaXMgc3RyYWlnaHRmb3J3YXJkLiAgKi8KKysgIHdoaWxlIChjbDEtPmRlcHRoID4gY2wyLT5kZXB0aCkKKysgICAgY2wxID0gY2wxLT5wYXJlbnQ7CisrICB3aGlsZSAoY2wyLT5kZXB0aCA+IGNsMS0+ZGVwdGgpCisrICAgIGNsMiA9IGNsMi0+cGFyZW50OworKworKyAgLyogTm93IHJlZHVjZSBib3RoIGNsdXN0ZXJzIHRvIHRoZWlyIGFuY2VzdG9ycyBhdCB0aGUgcG9pbnQgd2hlcmUgYm90aCBoYXZlCisrICAgICBhIGNvbW1vbiBwYXJlbnQ7IHRoZXNlIGNhbiBiZSBkaXJlY3RseSBjb21wYXJlZC4gICovCisrICB3aGlsZSAoY2wxLT5wYXJlbnQgIT0gY2wyLT5wYXJlbnQpCisrICAgIGNsMSA9IGNsMS0+cGFyZW50LCBjbDIgPSBjbDItPnBhcmVudDsKKysKKysgIHJldHVybiBncm91cF9jbXAgKGNsMS0+Z3JvdXAsIGNsMi0+Z3JvdXAsIGNsMi0+aW5kZXggLSBjbDEtPmluZGV4KTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBhbmNlc3RvciBvZiBDTCB0aGF0J3MganVzdCBiZWxvdyB0aGUgcm9vdCAoaS5lLiwgaGFzIGEgcGFyZW50CisrICAgb2YgMCkuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKgorK2hvbF9jbHVzdGVyX2Jhc2UgKHN0cnVjdCBob2xfY2x1c3RlciAqY2wpCisreworKyAgd2hpbGUgKGNsLT5wYXJlbnQpCisrICAgIGNsID0gY2wtPnBhcmVudDsKKysgIHJldHVybiBjbDsKKyt9CisrCisrLyogUmV0dXJuIHRydWUgaWYgQ0wxIGlzIGEgY2hpbGQgb2YgQ0wyLiAgKi8KKytzdGF0aWMgaW50CisraG9sX2NsdXN0ZXJfaXNfY2hpbGQgKGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wxLAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wyKQorK3sKKysgIHdoaWxlIChjbDEgJiYgY2wxICE9IGNsMikKKysgICAgY2wxID0gY2wxLT5wYXJlbnQ7CisrICByZXR1cm4gY2wxID09IGNsMjsKKyt9CisrCisrLyogR2l2ZW4gdGhlIG5hbWUgb2YgYSBPUFRJT05fRE9DIG9wdGlvbiwgbW9kaWZpZXMgTkFNRSB0byBzdGFydCBhdCB0aGUgdGFpbAorKyAgIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGNvbXBhcmlzb25zLCBhbmQgcmV0dXJucyB0cnVlIGlmZiBpdCBzaG91bGQgYmUKKysgICB0cmVhdGVkIGFzIGEgbm9uLW9wdGlvbi4gICovCisrc3RhdGljIGludAorK2Nhbm9uX2RvY19vcHRpb24gKGNvbnN0IGNoYXIgKipuYW1lKQorK3sKKysgIGludCBub25fb3B0OworKyAgLyogU2tpcCBpbml0aWFsIHdoaXRlc3BhY2UuICAqLworKyAgd2hpbGUgKGlzc3BhY2UgKCoqbmFtZSkpCisrICAgICgqbmFtZSkrKzsKKysgIC8qIERlY2lkZSB3aGV0aGVyIHRoaXMgbG9va3MgbGlrZSBhbiBvcHRpb24gKGxlYWRpbmcgYC0nKSBvciBub3QuICAqLworKyAgbm9uX29wdCA9ICgqKm5hbWUgIT0gJy0nKTsKKysgIC8qIFNraXAgdW50aWwgcGFydCBvZiBuYW1lIHVzZWQgZm9yIHNvcnRpbmcuICAqLworKyAgd2hpbGUgKCoqbmFtZSAmJiAhaXNhbG51bSAoKipuYW1lKSkKKysgICAgKCpuYW1lKSsrOworKyAgcmV0dXJuIG5vbl9vcHQ7CisrfQorKworKy8qIE9yZGVyIEVOVFJZMSAmIEVOVFJZMiBieSB0aGUgb3JkZXIgd2hpY2ggdGhleSBzaG91bGQgYXBwZWFyIGluIGEgaGVscAorKyAgIGxpc3RpbmcuICAqLworK3N0YXRpYyBpbnQKKytob2xfZW50cnlfY21wIChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTEsCisrICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTIpCisreworKyAgLyogVGhlIGdyb3VwIG51bWJlcnMgYnkgd2hpY2ggdGhlIGVudHJpZXMgc2hvdWxkIGJlIG9yZGVyZWQ7IGlmIGVpdGhlciBpcworKyAgICAgaW4gYSBjbHVzdGVyLCB0aGVuIHRoaXMgaXMganVzdCB0aGUgZ3JvdXAgd2l0aGluIHRoZSBjbHVzdGVyLiAgKi8KKysgIGludCBncm91cDEgPSBlbnRyeTEtPmdyb3VwLCBncm91cDIgPSBlbnRyeTItPmdyb3VwOworKworKyAgaWYgKGVudHJ5MS0+Y2x1c3RlciAhPSBlbnRyeTItPmNsdXN0ZXIpCisrICAgIHsKKysgICAgICAvKiBUaGUgZW50cmllcyBhcmUgbm90IHdpdGhpbiB0aGUgc2FtZSBjbHVzdGVyLCBzbyB3ZSBjYW4ndCBjb21wYXJlIHRoZW0KKysgICAgICAgIGRpcmVjdGx5LCB3ZSBoYXZlIHRvIHVzZSB0aGUgYXBwcm9waWF0ZSBjbHVzdGVyaW5nIGxldmVsIHRvby4gICovCisrICAgICAgaWYgKCEgZW50cnkxLT5jbHVzdGVyKQorKyAgICAgICAvKiBFTlRSWTEgaXMgYXQgdGhlIGBiYXNlIGxldmVsJywgbm90IGluIGEgY2x1c3Rlciwgc28gd2UgaGF2ZSB0bworKyAgICAgICAgICBjb21wYXJlIGl0J3MgZ3JvdXAgbnVtYmVyIHdpdGggdGhhdCBvZiB0aGUgYmFzZSBjbHVzdGVyIGluIHdoaWNoCisrICAgICAgICAgIEVOVFJZMiByZXNpZGVzLiAgTm90ZSB0aGF0IGlmIHRoZXkncmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHRoZQorKyAgICAgICAgICBjbHVzdGVyZWQgb3B0aW9uIGFsd2F5cyBjb21lcyBsYXN0ZXIuICAqLworKyAgICAgICByZXR1cm4gZ3JvdXBfY21wIChncm91cDEsIGhvbF9jbHVzdGVyX2Jhc2UgKGVudHJ5Mi0+Y2x1c3RlciktPmdyb3VwLCAtMSk7CisrICAgICAgZWxzZSBpZiAoISBlbnRyeTItPmNsdXN0ZXIpCisrICAgICAgIC8qIExpa2V3aXNlLCBidXQgRU5UUlkyJ3Mgbm90IGluIGEgY2x1c3Rlci4gICovCisrICAgICAgIHJldHVybiBncm91cF9jbXAgKGhvbF9jbHVzdGVyX2Jhc2UgKGVudHJ5MS0+Y2x1c3RlciktPmdyb3VwLCBncm91cDIsIDEpOworKyAgICAgIGVsc2UKKysgICAgICAgLyogQm90aCBlbnRyaWVzIGFyZSBpbiBjbHVzdGVycywgd2UgY2FuIGp1c3QgY29tcGFyZSB0aGUgY2x1c3RlcnMuICAqLworKyAgICAgICByZXR1cm4gaG9sX2NsdXN0ZXJfY21wIChlbnRyeTEtPmNsdXN0ZXIsIGVudHJ5Mi0+Y2x1c3Rlcik7CisrICAgIH0KKysgIGVsc2UgaWYgKGdyb3VwMSA9PSBncm91cDIpCisrICAgIC8qIFRoZSBlbnRyaWVzIGFyZSBib3RoIGluIHRoZSBzYW1lIGNsdXN0ZXIgYW5kIGdyb3VwLCBzbyBjb21wYXJlIHRoZW0KKysgICAgICAgYWxwaGFiZXRpY2FsbHkuICAqLworKyAgICB7CisrICAgICAgaW50IHNob3J0MSA9IGhvbF9lbnRyeV9maXJzdF9zaG9ydCAoZW50cnkxKTsKKysgICAgICBpbnQgc2hvcnQyID0gaG9sX2VudHJ5X2ZpcnN0X3Nob3J0IChlbnRyeTIpOworKyAgICAgIGludCBkb2MxID0gb2RvYyAoZW50cnkxLT5vcHQpOworKyAgICAgIGludCBkb2MyID0gb2RvYyAoZW50cnkyLT5vcHQpOworKyAgICAgIGNvbnN0IGNoYXIgKmxvbmcxID0gaG9sX2VudHJ5X2ZpcnN0X2xvbmcgKGVudHJ5MSk7CisrICAgICAgY29uc3QgY2hhciAqbG9uZzIgPSBob2xfZW50cnlfZmlyc3RfbG9uZyAoZW50cnkyKTsKKysKKysgICAgICBpZiAoZG9jMSkKKysgICAgICAgZG9jMSA9IGxvbmcxICE9IE5VTEwgJiYgY2Fub25fZG9jX29wdGlvbiAoJmxvbmcxKTsKKysgICAgICBpZiAoZG9jMikKKysgICAgICAgZG9jMiA9IGxvbmcyICE9IE5VTEwgJiYgY2Fub25fZG9jX29wdGlvbiAoJmxvbmcyKTsKKysKKysgICAgICBpZiAoZG9jMSAhPSBkb2MyKQorKyAgICAgICAvKiBgZG9jdW1lbnRhdGlvbicgb3B0aW9ucyBhbHdheXMgZm9sbG93IG5vcm1hbCBvcHRpb25zIChvcgorKyAgICAgICAgICBkb2N1bWVudGF0aW9uIG9wdGlvbnMgdGhhdCAqbG9vayogbGlrZSBub3JtYWwgb3B0aW9ucykuICAqLworKyAgICAgICByZXR1cm4gZG9jMSAtIGRvYzI7CisrICAgICAgZWxzZSBpZiAoIXNob3J0MSAmJiAhc2hvcnQyICYmIGxvbmcxICYmIGxvbmcyKQorKyAgICAgICAvKiBPbmx5IGxvbmcgb3B0aW9ucy4gICovCisrICAgICAgIHJldHVybiBzdHJjYXNlY21wIChsb25nMSwgbG9uZzIpOworKyAgICAgIGVsc2UKKysgICAgICAgLyogQ29tcGFyZSBzaG9ydC9zaG9ydCwgbG9uZy9zaG9ydCwgc2hvcnQvbG9uZywgdXNpbmcgdGhlIGZpcnN0CisrICAgICAgICAgIGNoYXJhY3RlciBvZiBsb25nIG9wdGlvbnMuICBFbnRyaWVzIHdpdGhvdXQgKmFueSogdmFsaWQKKysgICAgICAgICAgb3B0aW9ucyAoc3VjaCBhcyBvcHRpb25zIHdpdGggT1BUSU9OX0hJRERFTiBzZXQpIHdpbGwgYmUgcHV0CisrICAgICAgICAgIGZpcnN0LCBidXQgYXMgdGhleSdyZSBub3QgZGlzcGxheWVkLCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZQorKyAgICAgICAgICB0aGV5IGFyZS4gICovCisrICAgICAgIHsKKysgICAgICAgICBjaGFyIGZpcnN0MSA9IHNob3J0MSA/IHNob3J0MSA6IGxvbmcxID8gKmxvbmcxIDogMDsKKysgICAgICAgICBjaGFyIGZpcnN0MiA9IHNob3J0MiA/IHNob3J0MiA6IGxvbmcyID8gKmxvbmcyIDogMDsKKysjaWZkZWYgX3RvbG93ZXIKKysgICAgICAgICBpbnQgbG93ZXJfY21wID0gX3RvbG93ZXIgKGZpcnN0MSkgLSBfdG9sb3dlciAoZmlyc3QyKTsKKysjZWxzZQorKyAgICAgICAgIGludCBsb3dlcl9jbXAgPSB0b2xvd2VyIChmaXJzdDEpIC0gdG9sb3dlciAoZmlyc3QyKTsKKysjZW5kaWYKKysgICAgICAgICAvKiBDb21wYXJlIGlnbm9yaW5nIGNhc2UsIGV4Y2VwdCB3aGVuIHRoZSBvcHRpb25zIGFyZSBib3RoIHRoZQorKyAgICAgICAgICAgIHNhbWUgbGV0dGVyLCBpbiB3aGljaCBjYXNlIGxvd2VyLWNhc2UgYWx3YXlzIGNvbWVzIGZpcnN0LiAgKi8KKysgICAgICAgICByZXR1cm4gbG93ZXJfY21wID8gbG93ZXJfY21wIDogZmlyc3QyIC0gZmlyc3QxOworKyAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogV2l0aGluIHRoZSBzYW1lIGNsdXN0ZXIsIGJ1dCBub3QgdGhlIHNhbWUgZ3JvdXAsIHNvIGp1c3QgY29tcGFyZQorKyAgICAgICBncm91cHMuICAqLworKyAgICByZXR1cm4gZ3JvdXBfY21wIChncm91cDEsIGdyb3VwMiwgMCk7CisrfQorKworKy8qIFZlcnNpb24gb2YgaG9sX2VudHJ5X2NtcCB3aXRoIGNvcnJlY3Qgc2lnbmF0dXJlIGZvciBxc29ydC4gICovCisrc3RhdGljIGludAorK2hvbF9lbnRyeV9xY21wIChjb25zdCB2b2lkICplbnRyeTFfdiwgY29uc3Qgdm9pZCAqZW50cnkyX3YpCisreworKyAgcmV0dXJuIGhvbF9lbnRyeV9jbXAgKGVudHJ5MV92LCBlbnRyeTJfdik7CisrfQorKworKy8qIFNvcnQgSE9MIGJ5IGdyb3VwIGFuZCBhbHBoYWJldGljYWxseSBieSBvcHRpb24gbmFtZSAod2l0aCBzaG9ydCBvcHRpb25zCisrICAgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciBsb25nKS4gIFNpbmNlIHRoZSBzb3J0aW5nIGlzIGZvciBkaXNwbGF5IHB1cnBvc2VzCisrICAgb25seSwgdGhlIHNoYWRvd2luZyBvZiBvcHRpb25zIGlzbid0IGVmZmVjdGVkLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9zb3J0IChzdHJ1Y3QgaG9sICpob2wpCisreworKyAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICBxc29ydCAoaG9sLT5lbnRyaWVzLCBob2wtPm51bV9lbnRyaWVzLCBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpLAorKyAgICAgICAgICBob2xfZW50cnlfcWNtcCk7CisrfQorKworKy8qIEFwcGVuZCBNT1JFIHRvIEhPTCwgZGVzdHJveWluZyBNT1JFIGluIHRoZSBwcm9jZXNzLiAgT3B0aW9ucyBpbiBIT0wgc2hhZG93CisrICAgYW55IGluIE1PUkUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9hcHBlbmQgKHN0cnVjdCBob2wgKmhvbCwgc3RydWN0IGhvbCAqbW9yZSkKKyt7CisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKipjbF9lbmQgPSAmaG9sLT5jbHVzdGVyczsKKysKKysgIC8qIFN0ZWFsIE1PUkUncyBjbHVzdGVyIGxpc3QsIGFuZCBhZGQgaXQgdG8gdGhlIGVuZCBvZiBIT0wncy4gICovCisrICB3aGlsZSAoKmNsX2VuZCkKKysgICAgY2xfZW5kID0gJigqY2xfZW5kKS0+bmV4dDsKKysgICpjbF9lbmQgPSBtb3JlLT5jbHVzdGVyczsKKysgIG1vcmUtPmNsdXN0ZXJzID0gMDsKKysKKysgIC8qIE1lcmdlIGVudHJpZXMuICAqLworKyAgaWYgKG1vcmUtPm51bV9lbnRyaWVzID4gMCkKKysgICAgeworKyAgICAgIGlmIChob2wtPm51bV9lbnRyaWVzID09IDApCisrICAgICAgIHsKKysgICAgICAgICBob2wtPm51bV9lbnRyaWVzID0gbW9yZS0+bnVtX2VudHJpZXM7CisrICAgICAgICAgaG9sLT5lbnRyaWVzID0gbW9yZS0+ZW50cmllczsKKysgICAgICAgICBob2wtPnNob3J0X29wdGlvbnMgPSBtb3JlLT5zaG9ydF9vcHRpb25zOworKyAgICAgICAgIG1vcmUtPm51bV9lbnRyaWVzID0gMDsgICAgICAgIC8qIE1hcmsgTU9SRSdzIGZpZWxkcyBhcyBpbnZhbGlkLiAgKi8KKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgLyogQXBwZW5kIHRoZSBlbnRyaWVzIGluIE1PUkUgdG8gdGhvc2UgaW4gSE9MLCB0YWtpbmcgY2FyZSB0byBvbmx5IGFkZAorKyAgICAgICAgICBub24tc2hhZG93ZWQgU0hPUlRfT1BUSU9OUyB2YWx1ZXMuICAqLworKyAgICAgICB7CisrICAgICAgICAgdW5zaWduZWQgbGVmdDsKKysgICAgICAgICBjaGFyICpzbywgKm1vcmVfc287CisrICAgICAgICAgc3RydWN0IGhvbF9lbnRyeSAqZTsKKysgICAgICAgICB1bnNpZ25lZCBudW1fZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMgKyBtb3JlLT5udW1fZW50cmllczsKKysgICAgICAgICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyaWVzID0KKysgICAgICAgICAgIG1hbGxvYyAobnVtX2VudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysgICAgICAgICB1bnNpZ25lZCBob2xfc29fbGVuID0gc3RybGVuIChob2wtPnNob3J0X29wdGlvbnMpOworKyAgICAgICAgIGNoYXIgKnNob3J0X29wdGlvbnMgPQorKyAgICAgICAgICAgbWFsbG9jIChob2xfc29fbGVuICsgc3RybGVuIChtb3JlLT5zaG9ydF9vcHRpb25zKSArIDEpOworKworKyAgICAgICAgIGFzc2VydCAoZW50cmllcyAmJiBzaG9ydF9vcHRpb25zKTsKKysjaWYgU0laRV9NQVggPD0gVUlOVF9NQVgKKysgICAgICAgICBhc3NlcnQgKG51bV9lbnRyaWVzIDw9IFNJWkVfTUFYIC8gc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSk7CisrI2VuZGlmCisrCisrICAgICAgICAgbWVtcGNweSAobWVtcGNweSAoZW50cmllcywgaG9sLT5lbnRyaWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2wtPm51bV9lbnRyaWVzICogc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSksCisrICAgICAgICAgICAgICAgICAgICBtb3JlLT5lbnRyaWVzLAorKyAgICAgICAgICAgICAgICAgICAgbW9yZS0+bnVtX2VudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysKKysgICAgICAgICBtZW1wY3B5IChzaG9ydF9vcHRpb25zLCBob2wtPnNob3J0X29wdGlvbnMsIGhvbF9zb19sZW4pOworKworKyAgICAgICAgIC8qIEZpeCB1cCB0aGUgc2hvcnQgb3B0aW9ucyBwb2ludGVycyBmcm9tIEhPTC4gICovCisrICAgICAgICAgZm9yIChlID0gZW50cmllcywgbGVmdCA9IGhvbC0+bnVtX2VudHJpZXM7IGxlZnQgPiAwOyBlKyssIGxlZnQtLSkKKysgICAgICAgICAgIGUtPnNob3J0X29wdGlvbnMgKz0gKHNob3J0X29wdGlvbnMgLSBob2wtPnNob3J0X29wdGlvbnMpOworKworKyAgICAgICAgIC8qIE5vdyBhZGQgdGhlIHNob3J0IG9wdGlvbnMgZnJvbSBNT1JFLCBmaXhpbmcgdXAgaXRzIGVudHJpZXMKKysgICAgICAgICAgICB0b28uICAqLworKyAgICAgICAgIHNvID0gc2hvcnRfb3B0aW9ucyArIGhvbF9zb19sZW47CisrICAgICAgICAgbW9yZV9zbyA9IG1vcmUtPnNob3J0X29wdGlvbnM7CisrICAgICAgICAgZm9yIChsZWZ0ID0gbW9yZS0+bnVtX2VudHJpZXM7IGxlZnQgPiAwOyBlKyssIGxlZnQtLSkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgaW50IG9wdHNfbGVmdDsKKysgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrCisrICAgICAgICAgICAgIGUtPnNob3J0X29wdGlvbnMgPSBzbzsKKysKKysgICAgICAgICAgICAgZm9yIChvcHRzX2xlZnQgPSBlLT5udW0sIG9wdCA9IGUtPm9wdDsgb3B0c19sZWZ0OyBvcHQrKywgb3B0c19sZWZ0LS0pCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgaW50IGNoID0gKm1vcmVfc287CisrICAgICAgICAgICAgICAgICBpZiAob3Nob3J0IChvcHQpICYmIGNoID09IG9wdC0+a2V5KQorKyAgICAgICAgICAgICAgICAgICAvKiBUaGUgbmV4dCBzaG9ydCBvcHRpb24gaW4gTU9SRV9TTywgQ0gsIGlzIGZyb20gT1BULiAgKi8KKysgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgIGlmICghIGZpbmRfY2hhciAoY2gsIHNob3J0X29wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9vcHRpb25zICsgaG9sX3NvX2xlbikpCisrICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc2hvcnQgb3B0aW9uIENIIGlzbid0IHNoYWRvd2VkIGJ5IEhPTCdzIG9wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzbyBhZGQgaXQgdG8gdGhlIHN1bS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAqc28rKyA9IGNoOworKyAgICAgICAgICAgICAgICAgICAgIG1vcmVfc28rKzsKKysgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysKKysgICAgICAgICAqc28gPSAnXDAnOworKworKyAgICAgICAgIGZyZWUgKGhvbC0+ZW50cmllcyk7CisrICAgICAgICAgZnJlZSAoaG9sLT5zaG9ydF9vcHRpb25zKTsKKysKKysgICAgICAgICBob2wtPmVudHJpZXMgPSBlbnRyaWVzOworKyAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgPSBudW1fZW50cmllczsKKysgICAgICAgICBob2wtPnNob3J0X29wdGlvbnMgPSBzaG9ydF9vcHRpb25zOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGhvbF9mcmVlIChtb3JlKTsKKyt9CisrCisrLyogSW5zZXJ0cyBlbm91Z2ggc3BhY2VzIHRvIG1ha2Ugc3VyZSBTVFJFQU0gaXMgYXQgY29sdW1uIENPTC4gICovCisrc3RhdGljIHZvaWQKKytpbmRlbnRfdG8gKGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtLCB1bnNpZ25lZCBjb2wpCisreworKyAgaW50IG5lZWRlZCA9IGNvbCAtIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSk7CisrICB3aGlsZSAobmVlZGVkLS0gPiAwKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJyAnKTsKKyt9CisrCisrLyogT3V0cHV0IHRvIFNUUkVBTSBlaXRoZXIgYSBzcGFjZSwgb3IgYSBuZXdsaW5lIGlmIHRoZXJlIGlzbid0IHJvb20gZm9yIGF0CisrICAgbGVhc3QgRU5TVVJFIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSByaWdodCBtYXJnaW4uICAqLworK3N0YXRpYyB2b2lkCisrc3BhY2UgKGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtLCBzaXplX3QgZW5zdXJlKQorK3sKKysgIGlmIChfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChzdHJlYW0pICsgZW5zdXJlCisrICAgICAgPj0gX19hcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIChzdHJlYW0pKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICBlbHNlCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnICcpOworK30KKysKKysvKiBJZiB0aGUgb3B0aW9uIFJFQUwgaGFzIGFuIGFyZ3VtZW50LCB3ZSBwcmludCBpdCBpbiB1c2luZyB0aGUgcHJpbnRmCisrICAgZm9ybWF0IFJFUV9GTVQgb3IgT1BUX0ZNVCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGEgcmVxdWlyZWQgb3IKKysgICBvcHRpb25hbCBhcmd1bWVudC4gICovCisrc3RhdGljIHZvaWQKKythcmcgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwgY29uc3QgY2hhciAqcmVxX2ZtdCwgY29uc3QgY2hhciAqb3B0X2ZtdCwKKysgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgaWYgKHJlYWwtPmFyZykKKysgICAgeworKyAgICAgIGlmIChyZWFsLT5mbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sIG9wdF9mbXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoZG9tYWluLCByZWFsLT5hcmcpKTsKKysgICAgICBlbHNlCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sIHJlcV9mbXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoZG9tYWluLCByZWFsLT5hcmcpKTsKKysgICAgfQorK30KKysKKysvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBob2xfZW50cnlfaGVscC4gICovCisrCisrLyogU3RhdGUgdXNlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBob2xfaGVscC4gICovCisrc3RydWN0IGhvbF9oZWxwX3N0YXRlCisreworKyAgLyogUFJFVl9FTlRSWSBzaG91bGQgY29udGFpbiB0aGUgcHJldmlvdXMgZW50cnkgcHJpbnRlZCwgb3IgMC4gICovCisrICBzdHJ1Y3QgaG9sX2VudHJ5ICpwcmV2X2VudHJ5OworKworKyAgLyogSWYgYW4gZW50cnkgaXMgaW4gYSBkaWZmZXJlbnQgZ3JvdXAgZnJvbSB0aGUgcHJldmlvdXMgb25lLCBhbmQgU0VQX0dST1VQUworKyAgICAgaXMgdHJ1ZSwgdGhlbiBhIGJsYW5rIGxpbmUgd2lsbCBiZSBwcmludGVkIGJlZm9yZSBhbnkgb3V0cHV0LiAqLworKyAgaW50IHNlcF9ncm91cHM7CisrCisrICAvKiBUcnVlIGlmIGEgZHVwbGljYXRlIG9wdGlvbiBhcmd1bWVudCB3YXMgc3VwcHJlc3NlZCAob25seSBldmVyIHNldCBpZgorKyAgICAgVVBBUkFNUy5kdXBfYXJncyBpcyBmYWxzZSkuICAqLworKyAgaW50IHN1cHByZXNzZWRfZHVwX2FyZzsKKyt9OworKworKy8qIFNvbWUgc3RhdGUgdXNlZCB3aGlsZSBwcmludGluZyBhIGhlbHAgZW50cnkgKHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aAorKyAgIGhlbHBlciBmdW5jdGlvbnMpLiAgU2VlIHRoZSBkb2MgZm9yIGhvbF9lbnRyeV9oZWxwIGZvciBtb3JlIGluZm8sIGFzIG1vc3QKKysgICBvZiB0aGUgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSBpdHMgYXJndW1lbnRzLiAgKi8KKytzdHJ1Y3QgcGVudHJ5X3N0YXRlCisreworKyAgY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnk7CisrICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbTsKKysgIHN0cnVjdCBob2xfaGVscF9zdGF0ZSAqaGhzdGF0ZTsKKysKKysgIC8qIFRydWUgaWYgbm90aGluZydzIGJlZW4gcHJpbnRlZCBzbyBmYXIuICAqLworKyAgaW50IGZpcnN0OworKworKyAgLyogSWYgbm9uLXplcm8sIHRoZSBzdGF0ZSB0aGF0IHdhcyB1c2VkIHRvIHByaW50IHRoaXMgaGVscC4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGU7CisrfTsKKysKKysvKiBJZiBhIHVzZXIgZG9jIGZpbHRlciBzaG91bGQgYmUgYXBwbGllZCB0byBET0MsIGRvIHNvLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciAqCisrZmlsdGVyX2RvYyAoY29uc3QgY2hhciAqZG9jLCBpbnQga2V5LCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwKKysgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBpZiAoYXJncCAmJiBhcmdwLT5oZWxwX2ZpbHRlcikKKysgICAgLyogV2UgbXVzdCBhcHBseSBhIHVzZXIgZmlsdGVyIHRvIHRoaXMgb3V0cHV0LiAgKi8KKysgICAgeworKyAgICAgIHZvaWQgKmlucHV0ID0gX19hcmdwX2lucHV0IChhcmdwLCBzdGF0ZSk7CisrICAgICAgcmV0dXJuICgqYXJncC0+aGVscF9maWx0ZXIpIChrZXksIGRvYywgaW5wdXQpOworKyAgICB9CisrICBlbHNlCisrICAgIC8qIE5vIGZpbHRlci4gICovCisrICAgIHJldHVybiBkb2M7CisrfQorKworKy8qIFByaW50cyBTVFIgYXMgYSBoZWFkZXIgbGluZSwgd2l0aCB0aGUgbWFyZ2luIGxpbmVzIHNldCBhcHByb3BpYXRlbHksIGFuZAorKyAgIG5vdGVzIHRoZSBmYWN0IHRoYXQgZ3JvdXBzIHNob3VsZCBiZSBzZXBhcmF0ZWQgd2l0aCBhIGJsYW5rIGxpbmUuICBBUkdQIGlzCisrICAgdGhlIGFyZ3AgdGhhdCBzaG91bGQgZGljdGF0ZSBhbnkgdXNlciBkb2MgZmlsdGVyaW5nIHRvIHRha2UgcGxhY2UuICBOb3RlCisrICAgdGhhdCB0aGUgcHJldmlvdXMgd3JhcCBtYXJnaW4gaXNuJ3QgcmVzdG9yZWQsIGJ1dCB0aGUgbGVmdCBtYXJnaW4gaXMgcmVzZXQKKysgICB0byAwLiAgKi8KKytzdGF0aWMgdm9pZAorK3ByaW50X2hlYWRlciAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwKKysgICAgICAgICAgICAgc3RydWN0IHBlbnRyeV9zdGF0ZSAqcGVzdCkKKyt7CisrICBjb25zdCBjaGFyICp0c3RyID0gZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCBzdHIpOworKyAgY29uc3QgY2hhciAqZnN0ciA9IGZpbHRlcl9kb2MgKHRzdHIsIEFSR1BfS0VZX0hFTFBfSEVBREVSLCBhcmdwLCBwZXN0LT5zdGF0ZSk7CisrCisrICBpZiAoZnN0cikKKysgICAgeworKyAgICAgIGlmICgqZnN0cikKKysgICAgICAgeworKyAgICAgICAgIGlmIChwZXN0LT5oaHN0YXRlLT5wcmV2X2VudHJ5KQorKyAgICAgICAgICAgLyogUHJlY2VkZSB3aXRoIGEgYmxhbmsgbGluZS4gICovCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHBlc3QtPnN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgaW5kZW50X3RvIChwZXN0LT5zdHJlYW0sIHVwYXJhbXMuaGVhZGVyX2NvbCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAocGVzdC0+c3RyZWFtLCB1cGFyYW1zLmhlYWRlcl9jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHBlc3QtPnN0cmVhbSwgdXBhcmFtcy5oZWFkZXJfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHBlc3QtPnN0cmVhbSwgZnN0cik7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAocGVzdC0+c3RyZWFtLCAwKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHBlc3QtPnN0cmVhbSwgJ1xuJyk7CisrICAgICAgIH0KKysKKysgICAgICBwZXN0LT5oaHN0YXRlLT5zZXBfZ3JvdXBzID0gMTsgLyogU2VwYXJhdGUgc3Vic2VxdWVudCBncm91cHMuICovCisrICAgIH0KKysKKysgIGlmIChmc3RyICE9IHRzdHIpCisrICAgIGZyZWUgKChjaGFyICopIGZzdHIpOworK30KKysKKysvKiBJbnNlcnRzIGEgY29tbWEgaWYgdGhpcyBpc24ndCB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgbGluZSwgYW5kIHRoZW4gbWFrZXMKKysgICBzdXJlIHdlJ3JlIGF0IGxlYXN0IHRvIGNvbHVtbiBDT0wuICBJZiB0aGlzICppcyogdGhlIGZpcnN0IGl0ZW0gb24gYSBsaW5lLAorKyAgIHByaW50cyBhbnkgcGVuZGluZyB3aGl0ZXNwYWNlL2hlYWRlcnMgdGhhdCBzaG91bGQgcHJlY2VkZSB0aGlzIGxpbmUuIEFsc28KKysgICBjbGVhcnMgRklSU1QuICAqLworK3N0YXRpYyB2b2lkCisrY29tbWEgKHVuc2lnbmVkIGNvbCwgc3RydWN0IHBlbnRyeV9zdGF0ZSAqcGVzdCkKKyt7CisrICBpZiAocGVzdC0+Zmlyc3QpCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICpwZSA9IHBlc3QtPmhoc3RhdGUtPnByZXZfZW50cnk7CisrICAgICAgY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbCA9IHBlc3QtPmVudHJ5LT5jbHVzdGVyOworKworKyAgICAgIGlmIChwZXN0LT5oaHN0YXRlLT5zZXBfZ3JvdXBzICYmIHBlICYmIHBlc3QtPmVudHJ5LT5ncm91cCAhPSBwZS0+Z3JvdXApCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysKKysgICAgICBpZiAoY2wgJiYgY2wtPmhlYWRlciAmJiAqY2wtPmhlYWRlcgorKyAgICAgICAgICYmICghcGUKKysgICAgICAgICAgICAgfHwgKHBlLT5jbHVzdGVyICE9IGNsCisrICAgICAgICAgICAgICAgICAmJiAhaG9sX2NsdXN0ZXJfaXNfY2hpbGQgKHBlLT5jbHVzdGVyLCBjbCkpKSkKKysgICAgICAgLyogSWYgd2UncmUgY2hhbmdpbmcgY2x1c3RlcnMsIHRoZW4gdGhpcyBtdXN0IGJlIHRoZSBzdGFydCBvZiB0aGUKKysgICAgICAgICAgRU5UUlkncyBjbHVzdGVyIHVubGVzcyB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBwcmV2aW91cyBvbmUKKysgICAgICAgICAgKGluIHdoaWNoIGNhc2Ugd2UgaGFkIGp1c3QgcG9wcGVkIGludG8gYSBzdWItY2x1c3RlciBmb3IgYSBiaXQpLgorKyAgICAgICAgICBJZiBzbywgdGhlbiBwcmludCB0aGUgY2x1c3RlcidzIGhlYWRlciBsaW5lLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIGludCBvbGRfd20gPSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gKHBlc3QtPnN0cmVhbSk7CisrICAgICAgICAgcHJpbnRfaGVhZGVyIChjbC0+aGVhZGVyLCBjbC0+YXJncCwgcGVzdCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAocGVzdC0+c3RyZWFtLCBvbGRfd20pOworKyAgICAgICB9CisrCisrICAgICAgcGVzdC0+Zmlyc3QgPSAwOworKyAgICB9CisrICBlbHNlCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAocGVzdC0+c3RyZWFtLCAiLCAiKTsKKysKKysgIGluZGVudF90byAocGVzdC0+c3RyZWFtLCBjb2wpOworK30KKysKKysvKiBQcmludCBoZWxwIGZvciBFTlRSWSB0byBTVFJFQU0uICAqLworK3N0YXRpYyB2b2lkCisraG9sX2VudHJ5X2hlbHAgKHN0cnVjdCBob2xfZW50cnkgKmVudHJ5LCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsCisrICAgICAgICAgICAgICAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHN0cnVjdCBob2xfaGVscF9zdGF0ZSAqaGhzdGF0ZSkKKyt7CisrICB1bnNpZ25lZCBudW07CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwgPSBlbnRyeS0+b3B0LCAqb3B0OworKyAgY2hhciAqc28gPSBlbnRyeS0+c2hvcnRfb3B0aW9uczsKKysgIGludCBoYXZlX2xvbmdfb3B0ID0gMDsgICAgICAgLyogV2UgaGF2ZSBhbnkgbG9uZyBvcHRpb25zLiAgKi8KKysgIC8qIFNhdmVkIG1hcmdpbnMuICAqLworKyAgaW50IG9sZF9sbSA9IF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgMCk7CisrICBpbnQgb2xkX3dtID0gX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luIChzdHJlYW0pOworKyAgLyogUEVTVCBpcyBhIHN0YXRlIGJsb2NrIGhvbGRpbmcgc29tZSBvZiBvdXIgdmFyaWFibGVzIHRoYXQgd2UnZCBsaWtlIHRvCisrICAgICBzaGFyZSB3aXRoIGhlbHBlciBmdW5jdGlvbnMuICAqLworKyAgc3RydWN0IHBlbnRyeV9zdGF0ZSBwZXN0ID0geyBlbnRyeSwgc3RyZWFtLCBoaHN0YXRlLCAxLCBzdGF0ZSB9OworKworKyAgaWYgKCEgb2RvYyAocmVhbCkpCisrICAgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgIHsKKysgICAgICAgICBoYXZlX2xvbmdfb3B0ID0gMTsKKysgICAgICAgICBicmVhazsKKysgICAgICAgfQorKworKyAgLyogRmlyc3QgZW1pdCBzaG9ydCBvcHRpb25zLiAgKi8KKysgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5zaG9ydF9vcHRfY29sKTsgLyogRm9yIHRydWx5IGJpemFycmUgY2FzZXMuICovCisrICBmb3IgKG9wdCA9IHJlYWwsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgaWYgKG9zaG9ydCAob3B0KSAmJiBvcHQtPmtleSA9PSAqc28pCisrICAgICAgLyogT1BUIGhhcyBhIHZhbGlkIChub24gc2hhZG93ZWQpIHNob3J0IG9wdGlvbi4gICovCisrICAgICAgeworKyAgICAgICBpZiAob3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgeworKyAgICAgICAgICAgY29tbWEgKHVwYXJhbXMuc2hvcnRfb3B0X2NvbCwgJnBlc3QpOworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICctJyk7CisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgKnNvKTsKKysgICAgICAgICAgIGlmICghaGF2ZV9sb25nX29wdCB8fCB1cGFyYW1zLmR1cF9hcmdzKQorKyAgICAgICAgICAgICBhcmcgKHJlYWwsICIgJXMiLCAiWyVzXSIsCisrICAgICAgICAgICAgICAgICAgc3RhdGUgPT0gTlVMTCA/IE5VTEwgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICBzdHJlYW0pOworKyAgICAgICAgICAgZWxzZSBpZiAocmVhbC0+YXJnKQorKyAgICAgICAgICAgICBoaHN0YXRlLT5zdXBwcmVzc2VkX2R1cF9hcmcgPSAxOworKyAgICAgICAgIH0KKysgICAgICAgc28rKzsKKysgICAgICB9CisrCisrICAvKiBOb3csIGxvbmcgb3B0aW9ucy4gICovCisrICBpZiAob2RvYyAocmVhbCkpCisrICAgIC8qIEEgYGRvY3VtZW50YXRpb24nIG9wdGlvbi4gICovCisrICAgIHsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIHVwYXJhbXMuZG9jX29wdF9jb2wpOworKyAgICAgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGNvbW1hICh1cGFyYW1zLmRvY19vcHRfY29sLCAmcGVzdCk7CisrICAgICAgICAgICAvKiBDYWxsaW5nIGdldHRleHQgaGVyZSBpc24ndCBxdWl0ZSByaWdodCwgc2luY2Ugc29ydGluZyB3aWxsCisrICAgICAgICAgICAgICBoYXZlIGJlZW4gZG9uZSBvbiB0aGUgb3JpZ2luYWw7IGJ1dCBkb2N1bWVudGF0aW9uIG9wdGlvbnMKKysgICAgICAgICAgICAgIHNob3VsZCBiZSBwcmV0dHkgcmFyZSBhbnl3YXkuLi4gICovCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LT5uYW1lKSk7CisrICAgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIC8qIEEgcmVhbCBsb25nIG9wdGlvbi4gICovCisrICAgIHsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIHVwYXJhbXMubG9uZ19vcHRfY29sKTsKKysgICAgICBmb3IgKG9wdCA9IHJlYWwsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB7CisrICAgICAgICAgICBjb21tYSAodXBhcmFtcy5sb25nX29wdF9jb2wsICZwZXN0KTsKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICItLSVzIiwgb3B0LT5uYW1lKTsKKysgICAgICAgICAgIGFyZyAocmVhbCwgIj0lcyIsICJbPSVzXSIsCisrICAgICAgICAgICAgICAgIHN0YXRlID09IE5VTEwgPyBOVUxMIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sIHN0cmVhbSk7CisrICAgICAgICAgfQorKyAgICB9CisrCisrICAvKiBOZXh0LCBkb2N1bWVudGF0aW9uIHN0cmluZ3MuICAqLworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysKKysgIGlmIChwZXN0LmZpcnN0KQorKyAgICB7CisrICAgICAgLyogRGlkbid0IHByaW50IGFueSBzd2l0Y2hlcywgd2hhdCdzIHVwPyAgKi8KKysgICAgICBpZiAoIW9zaG9ydCAocmVhbCkgJiYgIXJlYWwtPm5hbWUpCisrICAgICAgIC8qIFRoaXMgaXMgYSBncm91cCBoZWFkZXIsIHByaW50IGl0IG5pY2VseS4gICovCisrICAgICAgIHByaW50X2hlYWRlciAocmVhbC0+ZG9jLCBlbnRyeS0+YXJncCwgJnBlc3QpOworKyAgICAgIGVsc2UKKysgICAgICAgLyogSnVzdCBhIHRvdGFsbHkgc2hhZG93ZWQgb3B0aW9uIG9yIG51bGwgaGVhZGVyOyBwcmludCBub3RoaW5nLiAgKi8KKysgICAgICAgZ290byBjbGVhbnVwOyAgICAgICAgICAgLyogSnVzdCByZXR1cm4sIGFmdGVyIGNsZWFuaW5nIHVwLiAgKi8KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqdHN0ciA9IHJlYWwtPmRvYyA/IGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsLT5kb2MpIDogMDsKKysgICAgICBjb25zdCBjaGFyICpmc3RyID0gZmlsdGVyX2RvYyAodHN0ciwgcmVhbC0+a2V5LCBlbnRyeS0+YXJncCwgc3RhdGUpOworKyAgICAgIGlmIChmc3RyICYmICpmc3RyKQorKyAgICAgICB7CisrICAgICAgICAgdW5zaWduZWQgaW50IGNvbCA9IF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSk7CisrCisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLm9wdF9kb2NfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIHVwYXJhbXMub3B0X2RvY19jb2wpOworKworKyAgICAgICAgIGlmIChjb2wgPiAodW5zaWduZWQgaW50KSAodXBhcmFtcy5vcHRfZG9jX2NvbCArIDMpKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIGVsc2UgaWYgKGNvbCA+PSAodW5zaWduZWQgaW50KSB1cGFyYW1zLm9wdF9kb2NfY29sKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sICIgICAiKTsKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICBpbmRlbnRfdG8gKHN0cmVhbSwgdXBhcmFtcy5vcHRfZG9jX2NvbCk7CisrCisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIGZzdHIpOworKyAgICAgICB9CisrICAgICAgaWYgKGZzdHIgJiYgZnN0ciAhPSB0c3RyKQorKyAgICAgICBmcmVlICgoY2hhciAqKSBmc3RyKTsKKysKKysgICAgICAvKiBSZXNldCB0aGUgbGVmdCBtYXJnaW4uICAqLworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgMCk7CisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICB9CisrCisrICBoaHN0YXRlLT5wcmV2X2VudHJ5ID0gZW50cnk7CisrCisrY2xlYW51cDoKKysgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgb2xkX2xtKTsKKysgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgb2xkX3dtKTsKKyt9CisrCisrLyogT3V0cHV0IGEgbG9uZyBoZWxwIG1lc3NhZ2UgYWJvdXQgdGhlIG9wdGlvbnMgaW4gSE9MIHRvIFNUUkVBTS4gICovCisrc3RhdGljIHZvaWQKKytob2xfaGVscCAoc3RydWN0IGhvbCAqaG9sLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsCisrICAgICAgICAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgdW5zaWduZWQgbnVtOworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnk7CisrICBzdHJ1Y3QgaG9sX2hlbHBfc3RhdGUgaGhzdGF0ZSA9IHsgMCwgMCwgMCB9OworKworKyAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbnVtID0gaG9sLT5udW1fZW50cmllczsgbnVtID4gMDsgZW50cnkrKywgbnVtLS0pCisrICAgIGhvbF9lbnRyeV9oZWxwIChlbnRyeSwgc3RhdGUsIHN0cmVhbSwgJmhoc3RhdGUpOworKworKyAgaWYgKGhoc3RhdGUuc3VwcHJlc3NlZF9kdXBfYXJnICYmIHVwYXJhbXMuZHVwX2FyZ3Nfbm90ZSkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKnRzdHIgPSBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgIlwKKytNYW5kYXRvcnkgb3Igb3B0aW9uYWwgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgYWxzbyBtYW5kYXRvcnkgb3IgXAorK29wdGlvbmFsIGZvciBhbnkgY29ycmVzcG9uZGluZyBzaG9ydCBvcHRpb25zLiIpOworKyAgICAgIGNvbnN0IGNoYXIgKmZzdHIgPSBmaWx0ZXJfZG9jICh0c3RyLCBBUkdQX0tFWV9IRUxQX0RVUF9BUkdTX05PVEUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+cm9vdF9hcmdwIDogMCwgc3RhdGUpOworKyAgICAgIGlmIChmc3RyICYmICpmc3RyKQorKyAgICAgICB7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCBmc3RyKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgIH0KKysgICAgICBpZiAoZnN0ciAmJiBmc3RyICE9IHRzdHIpCisrICAgICAgIGZyZWUgKChjaGFyICopIGZzdHIpOworKyAgICB9CisrfQorKworKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGhvbF91c2FnZS4gICovCisrCisrLyogSWYgT1BUIGlzIGEgc2hvcnQgb3B0aW9uIHdpdGhvdXQgYW4gYXJnLCBhcHBlbmQgaXRzIGtleSB0byB0aGUgc3RyaW5nCisrICAgcG9pbnRlciBwb2ludGVyIHRvIGJ5IENPT0tJRSwgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIuICAqLworK3N0YXRpYyBpbnQKKythZGRfYXJnbGVzc19zaG9ydF9vcHQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIGNoYXIgKipzbmFvX2VuZCA9IGNvb2tpZTsKKysgIGlmICghKG9wdC0+YXJnIHx8IHJlYWwtPmFyZykKKysgICAgICAmJiAhKChvcHQtPmZsYWdzIHwgcmVhbC0+ZmxhZ3MpICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgKigqc25hb19lbmQpKysgPSBvcHQtPmtleTsKKysgIHJldHVybiAwOworK30KKysKKysvKiBJZiBPUFQgaXMgYSBzaG9ydCBvcHRpb24gd2l0aCBhbiBhcmcsIG91dHB1dCBhIHVzYWdlIGVudHJ5IGZvciBpdCB0byB0aGUKKysgICBzdHJlYW0gcG9pbnRlZCBhdCBieSBDT09LSUUuICAqLworK3N0YXRpYyBpbnQKKyt1c2FnZV9hcmdmdWxfc2hvcnRfb3B0IChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtID0gY29va2llOworKyAgY29uc3QgY2hhciAqYXJnID0gb3B0LT5hcmc7CisrICBpbnQgZmxhZ3MgPSBvcHQtPmZsYWdzIHwgcmVhbC0+ZmxhZ3M7CisrCisrICBpZiAoISBhcmcpCisrICAgIGFyZyA9IHJlYWwtPmFyZzsKKysKKysgIGlmIChhcmcgJiYgIShmbGFncyAmIE9QVElPTl9OT19VU0FHRSkpCisrICAgIHsKKysgICAgICBhcmcgPSBkZ2V0dGV4dCAoZG9tYWluLCBhcmcpOworKworKyAgICAgIGlmIChmbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0lY1slc11dIiwgb3B0LT5rZXksIGFyZyk7CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgLyogTWFudWFsbHkgZG8gbGluZSB3cmFwcGluZyBzbyB0aGF0IGl0IChwcm9iYWJseSkgd29uJ3QKKysgICAgICAgICAgICBnZXQgd3JhcHBlZCBhdCB0aGUgZW1iZWRkZWQgc3BhY2UuICAqLworKyAgICAgICAgIHNwYWNlIChzdHJlYW0sIDYgKyBzdHJsZW4gKGFyZykpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICJbLSVjICVzXSIsIG9wdC0+a2V5LCBhcmcpOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBPdXRwdXQgYSB1c2FnZSBlbnRyeSBmb3IgdGhlIGxvbmcgb3B0aW9uIG9wdCB0byB0aGUgc3RyZWFtIHBvaW50ZWQgYXQgYnkKKysgICBDT09LSUUuICAqLworK3N0YXRpYyBpbnQKKyt1c2FnZV9sb25nX29wdCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtID0gY29va2llOworKyAgY29uc3QgY2hhciAqYXJnID0gb3B0LT5hcmc7CisrICBpbnQgZmxhZ3MgPSBvcHQtPmZsYWdzIHwgcmVhbC0+ZmxhZ3M7CisrCisrICBpZiAoISBhcmcpCisrICAgIGFyZyA9IHJlYWwtPmFyZzsKKysKKysgIGlmICghIChmbGFncyAmIE9QVElPTl9OT19VU0FHRSkpCisrICAgIHsKKysgICAgICBpZiAoYXJnKQorKyAgICAgICB7CisrICAgICAgICAgYXJnID0gZGdldHRleHQgKGRvbWFpbiwgYXJnKTsKKysgICAgICAgICBpZiAoZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLS0lc1s9JXNdXSIsIG9wdC0+bmFtZSwgYXJnKTsKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzPSVzXSIsIG9wdC0+bmFtZSwgYXJnKTsKKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLS0lc10iLCBvcHQtPm5hbWUpOworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrLyogUHJpbnQgYSBzaG9ydCB1c2FnZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGFyZ3VtZW50cyBpbiBIT0wgdG8gU1RSRUFNLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF91c2FnZSAoc3RydWN0IGhvbCAqaG9sLCBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBuZW50cmllczsKKysgICAgICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgICAgICBjaGFyICpzaG9ydF9ub19hcmdfb3B0cyA9IGFsbG9jYSAoc3RybGVuIChob2wtPnNob3J0X29wdGlvbnMpICsgMSk7CisrICAgICAgY2hhciAqc25hb19lbmQgPSBzaG9ydF9ub19hcmdfb3B0czsKKysKKysgICAgICAvKiBGaXJzdCB3ZSBwdXQgYSBsaXN0IG9mIHNob3J0IG9wdGlvbnMgd2l0aG91dCBhcmd1bWVudHMuICAqLworKyAgICAgIGZvciAoZW50cnkgPSBob2wtPmVudHJpZXMsIG5lbnRyaWVzID0gaG9sLT5udW1fZW50cmllcworKyAgICAgICAgICA7IG5lbnRyaWVzID4gMAorKyAgICAgICAgICA7IGVudHJ5KyssIG5lbnRyaWVzLS0pCisrICAgICAgIGhvbF9lbnRyeV9zaG9ydF9pdGVyYXRlIChlbnRyeSwgYWRkX2FyZ2xlc3Nfc2hvcnRfb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFyZ3AtPmFyZ3BfZG9tYWluLCAmc25hb19lbmQpOworKyAgICAgIGlmIChzbmFvX2VuZCA+IHNob3J0X25vX2FyZ19vcHRzKQorKyAgICAgICB7CisrICAgICAgICAgKnNuYW9fZW5kKysgPSAwOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0lc10iLCBzaG9ydF9ub19hcmdfb3B0cyk7CisrICAgICAgIH0KKysKKysgICAgICAvKiBOb3cgYSBsaXN0IG9mIHNob3J0IG9wdGlvbnMgKndpdGgqIGFyZ3VtZW50cy4gICovCisrICAgICAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbmVudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzCisrICAgICAgICAgIDsgbmVudHJpZXMgPiAwCisrICAgICAgICAgIDsgZW50cnkrKywgbmVudHJpZXMtLSkKKysgICAgICAgaG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGVudHJ5LCB1c2FnZV9hcmdmdWxfc2hvcnRfb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFyZ3AtPmFyZ3BfZG9tYWluLCBzdHJlYW0pOworKworKyAgICAgIC8qIEZpbmFsbHksIGEgbGlzdCBvZiBsb25nIG9wdGlvbnMgKHdoZXchKS4gICovCisrICAgICAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbmVudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzCisrICAgICAgICAgIDsgbmVudHJpZXMgPiAwCisrICAgICAgICAgIDsgZW50cnkrKywgbmVudHJpZXMtLSkKKysgICAgICAgaG9sX2VudHJ5X2xvbmdfaXRlcmF0ZSAoZW50cnksIHVzYWdlX2xvbmdfb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sIHN0cmVhbSk7CisrICAgIH0KKyt9CisrCisrLyogTWFrZSBhIEhPTCBjb250YWluaW5nIGFsbCBsZXZlbHMgb2Ygb3B0aW9ucyBpbiBBUkdQLiAgQ0xVU1RFUiBpcyB0aGUKKysgICBjbHVzdGVyIGluIHdoaWNoIEFSR1AncyBlbnRyaWVzIHNob3VsZCBiZSBjbHVzdGVyZWQsIG9yIDAuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sICoKKythcmdwX2hvbCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcikKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysgIHN0cnVjdCBob2wgKmhvbCA9IG1ha2VfaG9sIChhcmdwLCBjbHVzdGVyKTsKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwKQorKyAgICAgIHsKKysgICAgICAgc3RydWN0IGhvbF9jbHVzdGVyICpjaGlsZF9jbHVzdGVyID0KKysgICAgICAgICAoKGNoaWxkLT5ncm91cCB8fCBjaGlsZC0+aGVhZGVyKQorKyAgICAgICAgICAvKiBQdXQgQ0hJTEQtPmFyZ3Agd2l0aGluIGl0cyBvd24gY2x1c3Rlci4gICovCisrICAgICAgICAgID8gaG9sX2FkZF9jbHVzdGVyIChob2wsIGNoaWxkLT5ncm91cCwgY2hpbGQtPmhlYWRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIC0gYXJncC0+Y2hpbGRyZW4sIGNsdXN0ZXIsIGFyZ3ApCisrICAgICAgICAgIC8qIEp1c3QgbWVyZ2UgaXQgaW50byB0aGUgcGFyZW50J3MgY2x1c3Rlci4gICovCisrICAgICAgICAgIDogY2x1c3Rlcik7CisrICAgICAgIGhvbF9hcHBlbmQgKGhvbCwgYXJncF9ob2wgKGNoaWxkLT5hcmdwLCBjaGlsZF9jbHVzdGVyKSkgOworKyAgICAgICBjaGlsZCsrOworKyAgICAgIH0KKysgIHJldHVybiBob2w7CisrfQorKworKy8qIENhbGN1bGF0ZSBob3cgbWFueSBkaWZmZXJlbnQgbGV2ZWxzIHdpdGggYWx0ZXJuYXRpdmUgYXJncyBzdHJpbmdzIGV4aXN0IGluCisrICAgQVJHUC4gICovCisrc3RhdGljIHNpemVfdAorK2FyZ3BfYXJnc19sZXZlbHMgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwKQorK3sKKysgIHNpemVfdCBsZXZlbHMgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrCisrICBpZiAoYXJncC0+YXJnc19kb2MgJiYgc3RyY2hyIChhcmdwLT5hcmdzX2RvYywgJ1xuJykpCisrICAgIGxldmVscysrOworKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgbGV2ZWxzICs9IGFyZ3BfYXJnc19sZXZlbHMgKChjaGlsZCsrKS0+YXJncCk7CisrCisrICByZXR1cm4gbGV2ZWxzOworK30KKysKKysvKiBQcmludCBhbGwgdGhlIG5vbi1vcHRpb24gYXJncyBkb2N1bWVudGVkIGluIEFSR1AgdG8gU1RSRUFNLiAgQW55IG91dHB1dCBpcworKyAgIHByZWNlZGVkIGJ5IGEgc3BhY2UuICBMRVZFTFMgaXMgYSBwb2ludGVyIHRvIGEgYnl0ZSB2ZWN0b3IgdGhlIGxlbmd0aAorKyAgIHJldHVybmVkIGJ5IGFyZ3BfYXJnc19sZXZlbHM7IGl0IHNob3VsZCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQKKysgICB1cGRhdGVkIGJ5IHRoaXMgcm91dGluZSBmb3IgdGhlIG5leHQgY2FsbCBpZiBBRFZBTkNFIGlzIHRydWUuICBUcnVlIGlzCisrICAgcmV0dXJuZWQgYXMgbG9uZyBhcyB0aGVyZSBhcmUgbW9yZSBwYXR0ZXJucyB0byBvdXRwdXQuICAqLworK3N0YXRpYyBpbnQKKythcmdwX2FyZ3NfdXNhZ2UgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsCisrICAgICAgICAgICAgICAgIGNoYXIgKipsZXZlbHMsIGludCBhZHZhbmNlLCBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBjaGFyICpvdXJfbGV2ZWwgPSAqbGV2ZWxzOworKyAgaW50IG11bHRpcGxlID0gMDsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKyAgY29uc3QgY2hhciAqdGRvYyA9IGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgYXJncC0+YXJnc19kb2MpLCAqbmwgPSAwOworKyAgY29uc3QgY2hhciAqZmRvYyA9IGZpbHRlcl9kb2MgKHRkb2MsIEFSR1BfS0VZX0hFTFBfQVJHU19ET0MsIGFyZ3AsIHN0YXRlKTsKKysKKysgIGlmIChmZG9jKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqY3AgPSBmZG9jOworKyAgICAgIG5sID0gc3RyY2hybnVsIChjcCwgJ1xuJyk7CisrICAgICAgaWYgKCpubCAhPSAnXDAnKQorKyAgICAgICAvKiBUaGlzIGlzIGEgYG11bHRpLWxldmVsJyBhcmdzIGRvYzsgYWR2YW5jZSB0byB0aGUgY29ycmVjdCBwb3NpdGlvbgorKyAgICAgICAgICBhcyBkZXRlcm1pbmVkIGJ5IG91ciBzdGF0ZSBpbiBMRVZFTFMsIGFuZCB1cGRhdGUgTEVWRUxTLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIGludCBpOworKyAgICAgICAgIG11bHRpcGxlID0gMTsKKysgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKm91cl9sZXZlbDsgaSsrKQorKyAgICAgICAgICAgY3AgPSBubCArIDEsIG5sID0gc3RyY2hybnVsIChjcCwgJ1xuJyk7CisrICAgICAgICAgKCpsZXZlbHMpKys7CisrICAgICAgIH0KKysKKysgICAgICAvKiBNYW51YWxseSBkbyBsaW5lIHdyYXBwaW5nIHNvIHRoYXQgaXQgKHByb2JhYmx5KSB3b24ndCBnZXQgd3JhcHBlZCBhdAorKyAgICAgICAgYW55IGVtYmVkZGVkIHNwYWNlcy4gICovCisrICAgICAgc3BhY2UgKHN0cmVhbSwgMSArIG5sIC0gY3ApOworKworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKHN0cmVhbSwgY3AsIG5sIC0gY3ApOworKyAgICB9CisrICBpZiAoZmRvYyAmJiBmZG9jICE9IHRkb2MpCisrICAgIGZyZWUgKChjaGFyICopZmRvYyk7ICAgICAgIC8qIEZyZWUgdXNlcidzIG1vZGlmaWVkIGRvYyBzdHJpbmcuICAqLworKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgYWR2YW5jZSA9ICFhcmdwX2FyZ3NfdXNhZ2UgKChjaGlsZCsrKS0+YXJncCwgc3RhdGUsIGxldmVscywgYWR2YW5jZSwgc3RyZWFtKTsKKysKKysgIGlmIChhZHZhbmNlICYmIG11bHRpcGxlKQorKyAgICB7CisrICAgICAgLyogTmVlZCB0byBpbmNyZW1lbnQgb3VyIGxldmVsLiAgKi8KKysgICAgICBpZiAoKm5sKQorKyAgICAgICAvKiBUaGVyZSdzIG1vcmUgd2UgY2FuIGRvIGhlcmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgKCpvdXJfbGV2ZWwpKys7CisrICAgICAgICAgYWR2YW5jZSA9IDA7ICAgICAgICAgIC8qIE91ciBwYXJlbnQgc2hvdWxkbid0IGFkdmFuY2UgYWxzby4gKi8KKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKCpvdXJfbGV2ZWwgPiAwKQorKyAgICAgICAvKiBXZSBoYWQgbXVsdGlwbGUgbGV2ZWxzLCBidXQgdXNlZCB0aGVtIHVwOyByZXNldCB0byB6ZXJvLiAgKi8KKysgICAgICAgKm91cl9sZXZlbCA9IDA7CisrICAgIH0KKysKKysgIHJldHVybiAhYWR2YW5jZTsKKyt9CisrCisrLyogUHJpbnQgdGhlIGRvY3VtZW50YXRpb24gZm9yIEFSR1AgdG8gU1RSRUFNOyBpZiBQT1NUIGlzIGZhbHNlLCB0aGVuCisrICAgZXZlcnl0aGluZyBwcmVjZWVkaW5nIGEgYFx2JyBjaGFyYWN0ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gc3RyaW5ncyAob3IKKysgICB0aGUgd2hvbGUgc3RyaW5nLCBmb3IgdGhvc2Ugd2l0aCBub25lKSBpcyBwcmludGVkLCBvdGhlcndpc2UsIGV2ZXJ5dGhpbmcKKysgICBmb2xsb3dpbmcgdGhlIGBcdicgY2hhcmFjdGVyIChub3RoaW5nIGZvciBzdHJpbmdzIHdpdGhvdXQpLiAgRWFjaCBzZXBhcmF0ZQorKyAgIGJpdCBvZiBkb2N1bWVudGF0aW9uIGlzIHNlcGFyYXRlZCBhIGJsYW5rIGxpbmUsIGFuZCBpZiBQUkVfQkxBTksgaXMgdHJ1ZSwKKysgICB0aGVuIHRoZSBmaXJzdCBpcyBhcyB3ZWxsLiAgSWYgRklSU1RfT05MWSBpcyB0cnVlLCBvbmx5IHRoZSBmaXJzdAorKyAgIG9jY3VycmVuY2UgaXMgb3V0cHV0LiAgUmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBvdXRwdXQuICAqLworK3N0YXRpYyBpbnQKKythcmdwX2RvYyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICBpbnQgcG9zdCwgaW50IHByZV9ibGFuaywgaW50IGZpcnN0X29ubHksCisrICAgICAgICAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgY29uc3QgY2hhciAqdGV4dDsKKysgIGNvbnN0IGNoYXIgKmlucF90ZXh0OworKyAgdm9pZCAqaW5wdXQgPSAwOworKyAgaW50IGFueXRoaW5nID0gMDsKKysgIHNpemVfdCBpbnBfdGV4dF9saW1pdCA9IDA7CisrICBjb25zdCBjaGFyICpkb2MgPSBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sIGFyZ3AtPmRvYyk7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysKKysgIGlmIChkb2MpCisrICAgIHsKKysgICAgICBjaGFyICp2dCA9IHN0cmNociAoZG9jLCAnXHYnKTsKKysgICAgICBpbnBfdGV4dCA9IHBvc3QgPyAodnQgPyB2dCArIDEgOiAwKSA6IGRvYzsKKysgICAgICBpbnBfdGV4dF9saW1pdCA9ICghcG9zdCAmJiB2dCkgPyAodnQgLSBkb2MpIDogMDsKKysgICAgfQorKyAgZWxzZQorKyAgICBpbnBfdGV4dCA9IDA7CisrCisrICBpZiAoYXJncC0+aGVscF9maWx0ZXIpCisrICAgIC8qIFdlIGhhdmUgdG8gZmlsdGVyIHRoZSBkb2Mgc3RyaW5ncy4gICovCisrICAgIHsKKysgICAgICBpZiAoaW5wX3RleHRfbGltaXQpCisrICAgICAgIC8qIENvcHkgSU5QX1RFWFQgc28gdGhhdCBpdCdzIG51bC10ZXJtaW5hdGVkLiAgKi8KKysgICAgICAgaW5wX3RleHQgPSBzdHJuZHVwIChpbnBfdGV4dCwgaW5wX3RleHRfbGltaXQpOworKyAgICAgIGlucHV0ID0gX19hcmdwX2lucHV0IChhcmdwLCBzdGF0ZSk7CisrICAgICAgdGV4dCA9CisrICAgICAgICgqYXJncC0+aGVscF9maWx0ZXIpIChwb3N0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEFSR1BfS0VZX0hFTFBfUE9TVF9ET0MKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQVJHUF9LRVlfSEVMUF9QUkVfRE9DLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wX3RleHQsIGlucHV0KTsKKysgICAgfQorKyAgZWxzZQorKyAgICB0ZXh0ID0gKGNvbnN0IGNoYXIgKikgaW5wX3RleHQ7CisrCisrICBpZiAodGV4dCkKKysgICAgeworKyAgICAgIGlmIChwcmVfYmxhbmspCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysKKysgICAgICBpZiAodGV4dCA9PSBpbnBfdGV4dCAmJiBpbnBfdGV4dF9saW1pdCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoc3RyZWFtLCBpbnBfdGV4dCwgaW5wX3RleHRfbGltaXQpOworKyAgICAgIGVsc2UKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIHRleHQpOworKworKyAgICAgIGlmIChfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChzdHJlYW0pID4gX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIChzdHJlYW0pKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrCisrICAgICAgYW55dGhpbmcgPSAxOworKyAgICB9CisrCisrICBpZiAodGV4dCAmJiB0ZXh0ICE9IGlucF90ZXh0KQorKyAgICBmcmVlICgoY2hhciAqKSB0ZXh0KTsgICAgICAvKiBGcmVlIFRFWFQgcmV0dXJuZWQgZnJvbSB0aGUgaGVscCBmaWx0ZXIuICAqLworKyAgaWYgKGlucF90ZXh0ICYmIGlucF90ZXh0X2xpbWl0ICYmIGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICBmcmVlICgoY2hhciAqKSBpbnBfdGV4dCk7ICAvKiBXZSBjb3BpZWQgSU5QX1RFWFQsIHNvIGZyZWUgaXQgbm93LiAgKi8KKysKKysgIGlmIChwb3N0ICYmIGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICAvKiBOb3cgc2VlIGlmIHdlIGhhdmUgdG8gb3V0cHV0IGEgQVJHUF9LRVlfSEVMUF9FWFRSQSB0ZXh0LiAgKi8KKysgICAgeworKyAgICAgIHRleHQgPSAoKmFyZ3AtPmhlbHBfZmlsdGVyKSAoQVJHUF9LRVlfSEVMUF9FWFRSQSwgMCwgaW5wdXQpOworKyAgICAgIGlmICh0ZXh0KQorKyAgICAgICB7CisrICAgICAgICAgaWYgKGFueXRoaW5nIHx8IHByZV9ibGFuaykKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgdGV4dCk7CisrICAgICAgICAgZnJlZSAoKGNoYXIgKikgdGV4dCk7CisrICAgICAgICAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkKKysgICAgICAgICAgICAgPiBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gKHN0cmVhbSkpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgYW55dGhpbmcgPSAxOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwICYmICEoZmlyc3Rfb25seSAmJiBhbnl0aGluZykpCisrICAgICAgYW55dGhpbmcgfD0KKysgICAgICAgYXJncF9kb2MgKChjaGlsZCsrKS0+YXJncCwgc3RhdGUsCisrICAgICAgICAgICAgICAgICBwb3N0LCBhbnl0aGluZyB8fCBwcmVfYmxhbmssIGZpcnN0X29ubHksCisrICAgICAgICAgICAgICAgICBzdHJlYW0pOworKworKyAgcmV0dXJuIGFueXRoaW5nOworK30KKysKKysvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIElmIGNhbGxlZCBmcm9tCisrICAgYXJncF9zdGF0ZV9oZWxwLCBTVEFURSBpcyB0aGUgcmVsZXZlbnQgcGFyc2luZyBzdGF0ZS4gIEZMQUdTIGFyZSBmcm9tIHRoZQorKyAgIHNldCBBUkdQX0hFTFBfKi4gIE5BTUUgaXMgd2hhdCB0byB1c2Ugd2hlcmV2ZXIgYSBgcHJvZ3JhbSBuYW1lJyBpcworKyAgIG5lZWRlZC4gKi8KKytzdGF0aWMgdm9pZAorK19oZWxwIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBGSUxFICpzdHJlYW0sCisrICAgICAgIHVuc2lnbmVkIGZsYWdzLCBjaGFyICpuYW1lKQorK3sKKysgIGludCBhbnl0aGluZyA9IDA7ICAgICAgICAgICAgLyogV2hldGhlciB3ZSd2ZSBvdXRwdXQgYW55dGhpbmcuICAqLworKyAgc3RydWN0IGhvbCAqaG9sID0gMDsKKysgIGFyZ3BfZm10c3RyZWFtX3QgZnM7CisrCisrICBpZiAoISBzdHJlYW0pCisrICAgIHJldHVybjsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICBmbG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICBmaWxsX2luX3VwYXJhbXMgKHN0YXRlKTsKKysKKysgIGZzID0gX19hcmdwX21ha2VfZm10c3RyZWFtIChzdHJlYW0sIDAsIHVwYXJhbXMucm1hcmdpbiwgMCk7CisrICBpZiAoISBmcykKKysgICAgeworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIChBUkdQX0hFTFBfVVNBR0UgfCBBUkdQX0hFTFBfU0hPUlRfVVNBR0UgfCBBUkdQX0hFTFBfTE9ORykpCisrICAgIHsKKysgICAgICBob2wgPSBhcmdwX2hvbCAoYXJncCwgMCk7CisrCisrICAgICAgLyogSWYgcHJlc2VudCwgdGhlc2Ugb3B0aW9ucyBhbHdheXMgY29tZSBsYXN0LiAgKi8KKysgICAgICBob2xfc2V0X2dyb3VwIChob2wsICJoZWxwIiwgLTEpOworKyAgICAgIGhvbF9zZXRfZ3JvdXAgKGhvbCwgInZlcnNpb24iLCAtMSk7CisrCisrICAgICAgaG9sX3NvcnQgKGhvbCk7CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIChBUkdQX0hFTFBfVVNBR0UgfCBBUkdQX0hFTFBfU0hPUlRfVVNBR0UpKQorKyAgICAvKiBQcmludCBhIHNob3J0IGBVc2FnZTonIG1lc3NhZ2UuICAqLworKyAgICB7CisrICAgICAgaW50IGZpcnN0X3BhdHRlcm4gPSAxLCBtb3JlX3BhdHRlcm5zOworKyAgICAgIHNpemVfdCBudW1fcGF0dGVybl9sZXZlbHMgPSBhcmdwX2FyZ3NfbGV2ZWxzIChhcmdwKTsKKysgICAgICBjaGFyICpwYXR0ZXJuX2xldmVscyA9IGFsbG9jYSAobnVtX3BhdHRlcm5fbGV2ZWxzKTsKKysKKysgICAgICBtZW1zZXQgKHBhdHRlcm5fbGV2ZWxzLCAwLCBudW1fcGF0dGVybl9sZXZlbHMpOworKworKyAgICAgIGRvCisrICAgICAgIHsKKysgICAgICAgICBpbnQgb2xkX2xtOworKyAgICAgICAgIGludCBvbGRfd20gPSBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChmcywgdXBhcmFtcy51c2FnZV9pbmRlbnQpOworKyAgICAgICAgIGNoYXIgKmxldmVscyA9IHBhdHRlcm5fbGV2ZWxzOworKworKyAgICAgICAgIGlmIChmaXJzdF9wYXR0ZXJuKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGZzLCAiJXMgJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgIlVzYWdlOiIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgIiVzICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sICIgIG9yOiAiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKysKKysgICAgICAgICAvKiBXZSBzZXQgdGhlIGxtYXJnaW4gYXMgd2VsbCBhcyB0aGUgd21hcmdpbiwgYmVjYXVzZSBob2xfdXNhZ2UKKysgICAgICAgICAgICBtYW51YWxseSB3cmFwcyBvcHRpb25zIHdpdGggbmV3bGluZSB0byBhdm9pZCBhbm5veWluZyBicmVha3MuICAqLworKyAgICAgICAgIG9sZF9sbSA9IF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGZzLCB1cGFyYW1zLnVzYWdlX2luZGVudCk7CisrCisrICAgICAgICAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1NIT1JUX1VTQUdFKQorKyAgICAgICAgICAgLyogSnVzdCBzaG93IHdoZXJlIHRoZSBvcHRpb25zIGdvLiAgKi8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICAgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoZnMsIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBbT1BUSU9OLi4uXSIpKTsKKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAvKiBBY3R1YWxseSBwcmludCB0aGUgb3B0aW9ucy4gICovCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIGhvbF91c2FnZSAoaG9sLCBmcyk7CisrICAgICAgICAgICAgIGZsYWdzIHw9IEFSR1BfSEVMUF9TSE9SVF9VU0FHRTsgLyogQnV0IG9ubHkgZG8gc28gb25jZS4gICovCisrICAgICAgICAgICB9CisrCisrICAgICAgICAgbW9yZV9wYXR0ZXJucyA9IGFyZ3BfYXJnc191c2FnZSAoYXJncCwgc3RhdGUsICZsZXZlbHMsIDEsIGZzKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChmcywgb2xkX3dtKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChmcywgb2xkX2xtKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGZzLCAnXG4nKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrCisrICAgICAgICAgZmlyc3RfcGF0dGVybiA9IDA7CisrICAgICAgIH0KKysgICAgICB3aGlsZSAobW9yZV9wYXR0ZXJucyk7CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9QUkVfRE9DKQorKyAgICBhbnl0aGluZyB8PSBhcmdwX2RvYyAoYXJncCwgc3RhdGUsIDAsIDAsIDEsIGZzKTsKKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9TRUUpCisrICAgIHsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgIlwKKytUcnkgYCVzIC0taGVscCcgb3IgYCVzIC0tdXNhZ2UnIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbmFtZSk7CisrICAgICAgYW55dGhpbmcgPSAxOworKyAgICB9CisrCisrICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfTE9ORykKKysgICAgLyogUHJpbnQgYSBsb25nLCBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UuICAqLworKyAgICB7CisrICAgICAgLyogUHJpbnQgaW5mbyBhYm91dCBhbGwgdGhlIG9wdGlvbnMuICAqLworKyAgICAgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgICAgeworKyAgICAgICAgIGlmIChhbnl0aGluZykKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgICAgIGhvbF9oZWxwIChob2wsIHN0YXRlLCBmcyk7CisrICAgICAgICAgYW55dGhpbmcgPSAxOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9QT1NUX0RPQykKKysgICAgLyogUHJpbnQgYW55IGRvY3VtZW50YXRpb24gc3RyaW5ncyBhdCB0aGUgZW5kLiAgKi8KKysgICAgYW55dGhpbmcgfD0gYXJncF9kb2MgKGFyZ3AsIHN0YXRlLCAxLCBhbnl0aGluZywgMCwgZnMpOworKworKyAgaWYgKChmbGFncyAmIEFSR1BfSEVMUF9CVUdfQUREUikgJiYgYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzKQorKyAgICB7CisrICAgICAgaWYgKGFueXRoaW5nKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGZzLCAnXG4nKTsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXBvcnQgYnVncyB0byAlcy5cbiIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyk7CisrICAgICAgYW55dGhpbmcgPSAxOworKyAgICB9CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgZnVubG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICBpZiAoaG9sKQorKyAgICBob2xfZnJlZSAoaG9sKTsKKysKKysgIF9fYXJncF9mbXRzdHJlYW1fZnJlZSAoZnMpOworK30KKysKKysvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIEZMQUdTIGFyZSBmcm9tIHRoZSBzZXQKKysgICBBUkdQX0hFTFBfKi4gIE5BTUUgaXMgd2hhdCB0byB1c2Ugd2hlcmV2ZXIgYSBgcHJvZ3JhbSBuYW1lJyBpcyBuZWVkZWQuICovCisrdm9pZCBhcmdwX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBGSUxFICpzdHJlYW0sCisrICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncywgY2hhciAqbmFtZSkKKyt7CisrICBfaGVscCAoYXJncCwgMCwgc3RyZWFtLCBmbGFncywgbmFtZSk7CisrfQorKworK2NoYXIgKgorK19fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKHZvaWQpCisreworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FX18KKysvKgorKyAqIHVDbGliYyBwcm92aWRlcyBib3RoIHByb2dyYW1faW52b2NhdGlvbl9uYW1lIGFuZAorKyAqIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lCisrICovCisrIHJldHVybiAoY2hhciAqKSBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKKysjIGVsc2UKKysgIC8qIEZJWE1FOiBXaGF0IG5vdz8gTWlsZXMgc3VnZ2VzdHMgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gdXNlIE5VTEwsCisrICAgICBidXQgY3VycmVudGx5IHRoZSB2YWx1ZSBpcyBwYXNzZWQgb24gZGlyZWN0bHkgdG8gZnB1dHNfdW5sb2NrZWQsCisrICAgICBzbyB0aGF0IHJlcXVpcmVzIG1vcmUgY2hhbmdlcy4gKi8KKysjIGlmIF9fR05VQ19fCisrIyAgd2FybmluZyBObyByZWFzb25hYmxlIHZhbHVlIHRvIHJldHVybgorKyMgZW5kaWYgLyogX19HTlVDX18gKi8KKysgIHJldHVybiAiIjsKKysjIGVuZGlmCisrfQorKworKy8qIE91dHB1dCwgaWYgYXBwcm9wcmlhdGUsIGEgdXNhZ2UgbWVzc2FnZSBmb3IgU1RBVEUgdG8gU1RSRUFNLiAgRkxBR1MgYXJlCisrICAgZnJvbSB0aGUgc2V0IEFSR1BfSEVMUF8qLiAgKi8KKyt2b2lkCisrYXJncF9zdGF0ZV9oZWxwIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIEZJTEUgKnN0cmVhbSwgdW5zaWduZWQgZmxhZ3MpCisreworKyAgaWYgKCghc3RhdGUgfHwgISAoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FUlJTKSkgJiYgc3RyZWFtKQorKyAgICB7CisrICAgICAgaWYgKHN0YXRlICYmIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX0xPTkdfT05MWSkpCisrICAgICAgIGZsYWdzIHw9IEFSR1BfSEVMUF9MT05HX09OTFk7CisrCisrICAgICAgX2hlbHAgKHN0YXRlID8gc3RhdGUtPnJvb3RfYXJncCA6IDAsIHN0YXRlLCBzdHJlYW0sIGZsYWdzLAorKyAgICAgICAgICAgIHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpKTsKKysKKysgICAgICBpZiAoIXN0YXRlIHx8ICEgKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpCisrICAgICAgIHsKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfRVhJVF9FUlIpCisrICAgICAgICAgICBleGl0IChhcmdwX2Vycl9leGl0X3N0YXR1cyk7CisrICAgICAgICAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX0VYSVRfT0spCisrICAgICAgICAgICBleGl0ICgwKTsKKysgICAgICAgfQorKyAgfQorK30KKysKKysvKiBJZiBhcHByb3ByaWF0ZSwgcHJpbnQgdGhlIHByaW50ZiBzdHJpbmcgRk1UIGFuZCBmb2xsb3dpbmcgYXJncywgcHJlY2VkZWQKKysgICBieSB0aGUgcHJvZ3JhbSBuYW1lIGFuZCBgOicsIHRvIHN0ZGVyciwgYW5kIGZvbGxvd2VkIGJ5IGEgYFRyeSAuLi4gLS1oZWxwJworKyAgIG1lc3NhZ2UsIHRoZW4gZXhpdCAoMSkuICAqLworK3ZvaWQKKythcmdwX2Vycm9yIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIGlmICghc3RhdGUgfHwgIShzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VSUlMpKQorKyAgICB7CisrICAgICAgRklMRSAqc3RyZWFtID0gc3RhdGUgPyBzdGF0ZS0+ZXJyX3N0cmVhbSA6IHN0ZGVycjsKKysKKysgICAgICBpZiAoc3RyZWFtKQorKyAgICAgICB7CisrICAgICAgICAgdmFfbGlzdCBhcDsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgIHZhX3N0YXJ0IChhcCwgZm10KTsKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgIGNoYXIgKmJ1ZjsKKysKKysgICAgICAgICBpZiAoX0lPX3Zhc3ByaW50ZiAoJmJ1ZiwgZm10LCBhcCkgPCAwKQorKyAgICAgICAgICAgYnVmID0gTlVMTDsKKysKKysgICAgICAgICBfX2Z4cHJpbnRmIChzdHJlYW0sICIlczogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCksIGJ1Zik7CisrCisrICAgICAgICAgZnJlZSAoYnVmKTsKKysjZWxzZQorKyAgICAgICAgIGZwdXRzX3VubG9ja2VkIChzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKysgICAgICAgICBwdXRjX3VubG9ja2VkICgnOicsIHN0cmVhbSk7CisrICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBzdHJlYW0pOworKworKyAgICAgICAgIHZmcHJpbnRmIChzdHJlYW0sIGZtdCwgYXApOworKworKyAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgYXJncF9zdGF0ZV9oZWxwIChzdGF0ZSwgc3RyZWFtLCBBUkdQX0hFTFBfU1REX0VSUik7CisrCisrICAgICAgICAgdmFfZW5kIChhcCk7CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKyAgICAgICB9CisrICAgIH0KKyt9CisrCisrLyogU2ltaWxhciB0byB0aGUgc3RhbmRhcmQgZ251IGVycm9yLXJlcG9ydGluZyBmdW5jdGlvbiBlcnJvcigpLCBidXQgd2lsbAorKyAgIHJlc3BlY3QgdGhlIEFSR1BfTk9fRVhJVCBhbmQgQVJHUF9OT19FUlJTIGZsYWdzIGluIFNUQVRFLCBhbmQgd2lsbCBwcmludAorKyAgIHRvIFNUQVRFLT5lcnJfc3RyZWFtLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGFyZ3VtZW50IHBhcnNpbmcgY29kZSB0aGF0IGlzCisrICAgc2hhcmVkIGJldHdlZW4gcHJvZ3JhbSBzdGFydHVwICh3aGVuIGV4aXRpbmcgaXMgZGVzaXJlZCkgYW5kIHJ1bnRpbWUKKysgICBvcHRpb24gcGFyc2luZyAod2hlbiB0eXBpY2FsbHkgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbnN0ZWFkKS4gIFRoZQorKyAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBhcmdwX2Vycm9yIGlzIHRoYXQgdGhlIGxhdHRlciBpcyBmb3IKKysgICAqcGFyc2luZyBlcnJvcnMqLCBhbmQgdGhlIGZvcm1lciBpcyBmb3Igb3RoZXIgcHJvYmxlbXMgdGhhdCBvY2N1ciBkdXJpbmcKKysgICBwYXJzaW5nIGJ1dCBkb24ndCByZWZsZWN0IGEgKHN5bnRhY3RpYykgcHJvYmxlbSB3aXRoIHRoZSBpbnB1dC4gICovCisrdm9pZAorK2FyZ3BfZmFpbHVyZSAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgZXJybnVtLAorKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIGlmICghc3RhdGUgfHwgIShzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VSUlMpKQorKyAgICB7CisrICAgICAgRklMRSAqc3RyZWFtID0gc3RhdGUgPyBzdGF0ZS0+ZXJyX3N0cmVhbSA6IHN0ZGVycjsKKysKKysgICAgICBpZiAoc3RyZWFtKQorKyAgICAgICB7CisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZsb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIiVzIiwKKysgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSk7CisrI2Vsc2UKKysgICAgICAgICBmcHV0c191bmxvY2tlZCAoc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgaWYgKGZtdCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgdmFfbGlzdCBhcDsKKysKKysgICAgICAgICAgICAgdmFfc3RhcnQgKGFwLCBmbXQpOworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKKysKKysgICAgICAgICAgICAgaWYgKF9JT192YXNwcmludGYgKCZidWYsIGZtdCwgYXApIDwgMCkKKysgICAgICAgICAgICAgICBidWYgPSBOVUxMOworKworKyAgICAgICAgICAgICBfX2Z4cHJpbnRmIChzdHJlYW0sICI6ICVzIiwgYnVmKTsKKysKKysgICAgICAgICAgICAgZnJlZSAoYnVmKTsKKysjZWxzZQorKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnOicsIHN0cmVhbSk7CisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgc3RyZWFtKTsKKysKKysgICAgICAgICAgICAgdmZwcmludGYgKHN0cmVhbSwgZm10LCBhcCk7CisrI2VuZGlmCisrCisrICAgICAgICAgICAgIHZhX2VuZCAoYXApOworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIGlmIChlcnJudW0pCisrICAgICAgICAgICB7CisrI2lmIChkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPKSB8fCBkZWZpbmVkIEhBVkVfU1RSRVJST1JfUgorKyAgICAgICAgICAgICBjaGFyIGJ1ZlsyMDBdOworKyNlbmRpZgorKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIjogJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcl9yIChlcnJudW0sIGJ1Ziwgc2l6ZW9mIChidWYpKSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJzonLCBzdHJlYW0pOworKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIHN0cmVhbSk7CisrIyBpZmRlZiBIQVZFX1NUUkVSUk9SX1IKKysgICAgICAgICAgICAgZnB1dHMgKHN0cmVycm9yX3IgKGVycm51bSwgYnVmLCBzaXplb2YgKGJ1ZikpLCBzdHJlYW0pOworKyMgZWxzZQorKyAgICAgICAgICAgICBmcHV0cyAoc3RyZXJyb3IgKGVycm51bSksIHN0cmVhbSk7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgICAgICAgICAgfQorKworKyNpZmRlZiBVU0VfSU5fTElCSU8KKysgICAgICAgICBpZiAoX0lPX2Z3aWRlIChzdHJlYW0sIDApID4gMCkKKysgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RyZWFtKTsKKysgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnXG4nLCBzdHJlYW0pOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICAgICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBpZiAoc3RhdHVzICYmICghc3RhdGUgfHwgIShzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VYSVQpKSkKKysgICAgICAgICAgIGV4aXQgKHN0YXR1cyk7CisrICAgICAgIH0KKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLXBhcnNlLmMgYi9saWJ1YXJncC9hcmdwLXBhcnNlLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44NmIyYjI0CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXBhcnNlLmMKK0BAIC0wLDAgKzEsOTQ5IEBACisrLyogSGllcmFyY2hpYWwgYXJndW1lbnQgcGFyc2luZywgbGF5ZXJlZCBvdmVyIGdldG9wdAorKyAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gICovCisrI2lmbmRlZiBfX0dOVUNfXworKyMgaWYgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyBlbHNlCisrIyAgaWZkZWYgX0FJWAorKyNwcmFnbWEgYWxsb2NhCisrIyAgZWxzZQorKyMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGdldG9wdC5oPgorKyNpbmNsdWRlIDxiaXRzL2dldG9wdF9pbnQuaD4KKysKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZuZGVmIF8KKysvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLgorKyAgIFdoZW4gY29tcGlsaW5nIGxpYmMsIHRoZSBfIG1hY3JvIGlzIHByZWRlZmluZWQuICAqLworKyMgaWYgKGRlZmluZWQgSEFWRV9MSUJJTlRMX0ggfHwgZGVmaW5lZCBfTElCQykgJiYgZGVmaW5lZCBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyMgIGluY2x1ZGUgPGxpYmludGwuaD4KKysjICBpZmRlZiBfTElCQworKyMgICB1bmRlZiBkZ2V0dGV4dAorKyMgICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgXAorKyAgSU5UVVNFKF9fZGNnZXR0ZXh0KSAoZG9tYWluLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgZGdldHRleHQoZG9tYWluLCBtc2dpZCkgKG1zZ2lkKQorKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrIyBlbmRpZgorKyNlbmRpZgorKyNpZm5kZWYgTl8KKysjIGRlZmluZSBOXyhtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrLyogR2V0b3B0IHJldHVybiB2YWx1ZXMuICAqLworKyNkZWZpbmUgS0VZX0VORCAoLTEpICAgICAgICAgICAvKiBUaGUgZW5kIG9mIHRoZSBvcHRpb25zLiAgKi8KKysjZGVmaW5lIEtFWV9BUkcgMSAgICAgICAgICAgICAgLyogQSBub24tb3B0aW9uIGFyZ3VtZW50LiAgKi8KKysjZGVmaW5lIEtFWV9FUlIgJz8nICAgICAgICAgICAgLyogQW4gZXJyb3IgcGFyc2luZyB0aGUgb3B0aW9ucy4gICovCisrCisrLyogVGhlIG1ldGEtYXJndW1lbnQgdXNlZCB0byBwcmV2ZW50IGFueSBmdXJ0aGVyIGFyZ3VtZW50cyBiZWluZyBpbnRlcnByZXRlZAorKyAgIGFzIG9wdGlvbnMuICAqLworKyNkZWZpbmUgUVVPVEUgIi0tIgorKworKy8qIFRoZSBudW1iZXIgb2YgYml0cyB3ZSBzdGVhbCBpbiBhIGxvbmctb3B0aW9uIHZhbHVlIGZvciBvdXIgb3duIHVzZS4gICovCisrI2RlZmluZSBHUk9VUF9CSVRTIENIQVJfQklUCisrCisrLyogVGhlIG51bWJlciBvZiBiaXRzIGF2YWlsYWJsZSBmb3IgdGhlIHVzZXIgdmFsdWUuICAqLworKyNkZWZpbmUgVVNFUl9CSVRTICgoc2l6ZW9mICgoc3RydWN0IG9wdGlvbiAqKTApLT52YWwgKiBDSEFSX0JJVCkgLSBHUk9VUF9CSVRTKQorKyNkZWZpbmUgVVNFUl9NQVNLICgoMSA8PCBVU0VSX0JJVFMpIC0gMSkKKysKKysvKiBFWiBhbGlhcyBmb3IgQVJHUF9FUlJfVU5LTk9XTi4gICovCisrI2RlZmluZSBFQkFES0VZIEFSR1BfRVJSX1VOS05PV04KKysKKysvKiBEZWZhdWx0IG9wdGlvbnMuICAqLworKworKy8qIFdoZW4gYXJncCBpcyBnaXZlbiB0aGUgLS1IQU5HIHN3aXRjaCwgX0FSR1BfSEFORyBpcyBzZXQgYW5kIGFyZ3Agd2lsbCBzbGVlcAorKyAgIGZvciBvbmUgc2Vjb25kIGludGVydmFscywgZGVjcmVtZW50aW5nIF9BUkdQX0hBTkcgdW50aWwgaXQncyB6ZXJvLiAgVGh1cworKyAgIHlvdSBjYW4gZm9yY2UgdGhlIHByb2dyYW0gdG8gY29udGludWUgYnkgYXR0YWNoaW5nIGEgZGVidWdnZXIgYW5kIHNldHRpbmcKKysgICBpdCB0byAwIHlvdXJzZWxmLiAgKi8KKytzdGF0aWMgdm9sYXRpbGUgaW50IF9hcmdwX2hhbmc7CisrCisrI2RlZmluZSBPUFRfUFJPR05BTUUgICAtMgorKyNkZWZpbmUgT1BUX1VTQUdFICAgICAgLTMKKysjZGVmaW5lIE9QVF9IQU5HICAgICAgIC00CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBhcmdwX2RlZmF1bHRfb3B0aW9uc1tdID0KKyt7CisrICB7ImhlbHAiLCAgICAgICAnPycsICAgICAgICAgIDAsIDAsICBOXygiR2l2ZSB0aGlzIGhlbHAgbGlzdCIpLCAtMX0sCisrICB7InVzYWdlIiwgICAgICBPUFRfVVNBR0UsICAgIDAsIDAsICBOXygiR2l2ZSBhIHNob3J0IHVzYWdlIG1lc3NhZ2UiKX0sCisrICB7InByb2dyYW0tbmFtZSIsT1BUX1BST0dOQU1FLCJOQU1FIiwgT1BUSU9OX0hJRERFTiwgTl8oIlNldCB0aGUgcHJvZ3JhbSBuYW1lIil9LAorKyAgeyJIQU5HIiwgICAgICAgT1BUX0hBTkcsICAgICJTRUNTIiwgT1BUSU9OX0FSR19PUFRJT05BTCB8IE9QVElPTl9ISURERU4sCisrICAgICBOXygiSGFuZyBmb3IgU0VDUyBzZWNvbmRzIChkZWZhdWx0IDM2MDApIil9LAorKyAgezAsIDB9CisrfTsKKysKKytzdGF0aWMgZXJyb3JfdAorK2FyZ3BfZGVmYXVsdF9wYXJzZXIgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgJz8nOgorKyAgICAgIGFyZ3Bfc3RhdGVfaGVscCAoc3RhdGUsIHN0YXRlLT5vdXRfc3RyZWFtLCBBUkdQX0hFTFBfU1REX0hFTFApOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE9QVF9VU0FHRToKKysgICAgICBhcmdwX3N0YXRlX2hlbHAgKHN0YXRlLCBzdGF0ZS0+b3V0X3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgQVJHUF9IRUxQX1VTQUdFIHwgQVJHUF9IRUxQX0VYSVRfT0spOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIE9QVF9QUk9HTkFNRTogICAgICAgICAvKiBTZXQgdGhlIHByb2dyYW0gbmFtZS4gICovCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FCisrICAgICAgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgPSBhcmc7CisrI2VuZGlmCisrICAgICAgLyogW05vdGUgdGhhdCBzb21lIHN5c3RlbXMgb25seSBoYXZlIFBST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FIChha2EKKysgICAgICAgIF9fUFJPR05BTUUpLCBpbiB3aGljaCBjYXNlLCBQUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpcyBqdXN0IGRlZmluZWQKKysgICAgICAgIHRvIGJlIHRoYXQsIHNvIHdlIGhhdmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCBoZXJlLl0gICovCisrCisrICAgICAgLyogVXBkYXRlIHdoYXQgd2UgdXNlIGZvciBtZXNzYWdlcy4gICovCisrICAgICAgc3RhdGUtPm5hbWUgPSBzdHJyY2hyIChhcmcsICcvJyk7CisrICAgICAgaWYgKHN0YXRlLT5uYW1lKQorKyAgICAgICBzdGF0ZS0+bmFtZSsrOworKyAgICAgIGVsc2UKKysgICAgICAgc3RhdGUtPm5hbWUgPSBhcmc7CisrCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FCisrICAgICAgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUgPSBzdGF0ZS0+bmFtZTsKKysjZW5kaWYKKysKKysgICAgICBpZiAoKHN0YXRlLT5mbGFncyAmIChBUkdQX1BBUlNFX0FSR1YwIHwgQVJHUF9OT19FUlJTKSkKKysgICAgICAgICA9PSBBUkdQX1BBUlNFX0FSR1YwKQorKyAgICAgICAvKiBVcGRhdGUgd2hhdCBnZXRvcHQgdXNlcyB0b28uICAqLworKyAgICAgICBzdGF0ZS0+YXJndlswXSA9IGFyZzsKKysKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBPUFRfSEFORzoKKysgICAgICBfYXJncF9oYW5nID0gYXRvaSAoYXJnID8gYXJnIDogIjM2MDAiKTsKKysgICAgICB3aGlsZSAoX2FyZ3BfaGFuZy0tID4gMCkKKysgICAgICAgc2xlZXAgKDEpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFQkFES0VZOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwIGFyZ3BfZGVmYXVsdF9hcmdwID0KKysgIHthcmdwX2RlZmF1bHRfb3B0aW9ucywgJmFyZ3BfZGVmYXVsdF9wYXJzZXIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJsaWJjIn07CisrCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBhcmdwX3ZlcnNpb25fb3B0aW9uc1tdID0KKyt7CisrICB7InZlcnNpb24iLCAgICAnVicsICAgICAgICAgIDAsIDAsICBOXygiUHJpbnQgcHJvZ3JhbSB2ZXJzaW9uIiksIC0xfSwKKysgIHswLCAwfQorK307CisrCisrc3RhdGljIGVycm9yX3QKKythcmdwX3ZlcnNpb25fcGFyc2VyIChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdWJzoKKysgICAgICBpZiAoYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykKKysgICAgICAgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoc3RhdGUtPm91dF9zdHJlYW0sIHN0YXRlKTsKKysgICAgICBlbHNlIGlmIChhcmdwX3Byb2dyYW1fdmVyc2lvbikKKysgICAgICAgZnByaW50ZiAoc3RhdGUtPm91dF9zdHJlYW0sICIlc1xuIiwgYXJncF9wcm9ncmFtX3ZlcnNpb24pOworKyAgICAgIGVsc2UKKysgICAgICAgYXJncF9lcnJvciAoc3RhdGUsIGRnZXR0ZXh0IChzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUFJPR1JBTSBFUlJPUikgTm8gdmVyc2lvbiBrbm93biE/IikpOworKyAgICAgIGlmICghIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VYSVQpKQorKyAgICAgICBleGl0ICgwKTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUJBREtFWTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncCBhcmdwX3ZlcnNpb25fYXJncCA9CisrICB7YXJncF92ZXJzaW9uX29wdGlvbnMsICZhcmdwX3ZlcnNpb25fcGFyc2VyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAibGliYyJ9OworKworKy8qIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBnZXRvcHQgbG9uZyBvcHRpb25zIGFycmF5IExPTkdfT1BUSU9OUyBvZiBhCisrICAgbG9uZyBvcHRpb24gd2l0aCBjYWxsZWQgTkFNRSwgb3IgLTEgaWYgbm9uZSBpcyBmb3VuZC4gIFBhc3NpbmcgTlVMTCBhcworKyAgIE5BTUUgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBvcHRpb25zLiAgKi8KKytzdGF0aWMgaW50CisrZmluZF9sb25nX29wdGlvbiAoc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHN0cnVjdCBvcHRpb24gKmwgPSBsb25nX29wdGlvbnM7CisrICB3aGlsZSAobC0+bmFtZSAhPSBOVUxMKQorKyAgICBpZiAobmFtZSAhPSBOVUxMICYmIHN0cmNtcCAobC0+bmFtZSwgbmFtZSkgPT0gMCkKKysgICAgICByZXR1cm4gbCAtIGxvbmdfb3B0aW9uczsKKysgICAgZWxzZQorKyAgICAgIGwrKzsKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBsIC0gbG9uZ19vcHRpb25zOworKyAgZWxzZQorKyAgICByZXR1cm4gLTE7CisrfQorKworKworKy8qIFRoZSBzdGF0ZSBvZiBhIGBncm91cCcgZHVyaW5nIHBhcnNpbmcuICBFYWNoIGdyb3VwIGNvcnJlc3BvbmRzIHRvIGEKKysgICBwYXJ0aWN1bGFyIGFyZ3Agc3RydWN0dXJlIGZyb20gdGhlIHRyZWUgb2Ygc3VjaCBkZXNjZW5kaW5nIGZyb20gdGhlIHRvcAorKyAgIGxldmVsIGFyZ3AgcGFzc2VkIHRvIGFyZ3BfcGFyc2UuICAqLworK3N0cnVjdCBncm91cAorK3sKKysgIC8qIFRoaXMgZ3JvdXAncyBwYXJzaW5nIGZ1bmN0aW9uLiAgKi8KKysgIGFyZ3BfcGFyc2VyX3QgcGFyc2VyOworKworKyAgLyogV2hpY2ggYXJncCB0aGlzIGdyb3VwIGlzIGZyb20uICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBQb2ludHMgdG8gdGhlIHBvaW50IGluIFNIT1JUX09QVFMgY29ycmVzcG9uZGluZyB0byB0aGUgZW5kIG9mIHRoZSBzaG9ydAorKyAgICAgb3B0aW9ucyBmb3IgdGhpcyBncm91cC4gIFdlIHVzZSBpdCB0byBkZXRlcm1pbmUgZnJvbSB3aGljaCBncm91cCBhCisrICAgICBwYXJ0aWN1bGFyIHNob3J0IG9wdGlvbnMgaXMgZnJvbS4gICovCisrICBjaGFyICpzaG9ydF9lbmQ7CisrCisrICAvKiBUaGUgbnVtYmVyIG9mIG5vbi1vcHRpb24gYXJncyBzdWNlc3NmdWxseSBoYW5kbGVkIGJ5IHRoaXMgcGFyc2VyLiAgKi8KKysgIHVuc2lnbmVkIGFyZ3NfcHJvY2Vzc2VkOworKworKyAgLyogVGhpcyBncm91cCdzIHBhcnNlcidzIHBhcmVudCdzIGdyb3VwLiAgKi8KKysgIHN0cnVjdCBncm91cCAqcGFyZW50OworKyAgdW5zaWduZWQgcGFyZW50X2luZGV4OyAgICAgICAvKiBBbmQgdGhlIG91ciBwb3NpdGlvbiBpbiB0aGUgcGFyZW50LiAgICovCisrCisrICAvKiBUaGVzZSBmaWVsZHMgYXJlIHN3YXBwZWQgaW50byBhbmQgb3V0IG9mIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgd2hlbgorKyAgICAgY2FsbGluZyB0aGlzIGdyb3VwJ3MgcGFyc2VyLiAgKi8KKysgIHZvaWQgKmlucHV0LCAqKmNoaWxkX2lucHV0czsKKysgIHZvaWQgKmhvb2s7CisrfTsKKysKKysvKiBDYWxsIEdST1VQJ3MgcGFyc2VyIHdpdGggS0VZIGFuZCBBUkcsIHN3YXBwaW5nIGFueSBncm91cC1zcGVjaWZpYyBpbmZvCisrICAgZnJvbSBTVEFURSBiZWZvcmUgY2FsbGluZywgYW5kIGJhY2sgaW50byBzdGF0ZSBhZnRlcndhcmRzLiAgSWYgR1JPVVAgaGFzCisrICAgbm8gcGFyc2VyLCBFQkFES0VZIGlzIHJldHVybmVkLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK2dyb3VwX3BhcnNlIChzdHJ1Y3QgZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGludCBrZXksIGNoYXIgKmFyZykKKyt7CisrICBpZiAoZ3JvdXAtPnBhcnNlcikKKysgICAgeworKyAgICAgIGVycm9yX3QgZXJyOworKyAgICAgIHN0YXRlLT5ob29rID0gZ3JvdXAtPmhvb2s7CisrICAgICAgc3RhdGUtPmlucHV0ID0gZ3JvdXAtPmlucHV0OworKyAgICAgIHN0YXRlLT5jaGlsZF9pbnB1dHMgPSBncm91cC0+Y2hpbGRfaW5wdXRzOworKyAgICAgIHN0YXRlLT5hcmdfbnVtID0gZ3JvdXAtPmFyZ3NfcHJvY2Vzc2VkOworKyAgICAgIGVyciA9ICgqZ3JvdXAtPnBhcnNlcikoa2V5LCBhcmcsIHN0YXRlKTsKKysgICAgICBncm91cC0+aG9vayA9IHN0YXRlLT5ob29rOworKyAgICAgIHJldHVybiBlcnI7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIEVCQURLRVk7CisrfQorKworK3N0cnVjdCBwYXJzZXIKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFNIT1JUX09QVFMgaXMgdGhlIGdldG9wdCBzaG9ydCBvcHRpb25zIHN0cmluZyBmb3IgdGhlIHVuaW9uIG9mIGFsbCB0aGUKKysgICAgIGdyb3VwcyBvZiBvcHRpb25zLiAgKi8KKysgIGNoYXIgKnNob3J0X29wdHM7CisrICAvKiBMT05HX09QVFMgaXMgdGhlIGFycmF5IG9mIGdldG9wIGxvbmcgb3B0aW9uIHN0cnVjdHVyZXMgZm9yIHRoZSB1bmlvbiBvZgorKyAgICAgYWxsIHRoZSBncm91cHMgb2Ygb3B0aW9ucy4gICovCisrICBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdHM7CisrICAvKiBPUFRfREFUQSBpcyB0aGUgZ2V0b3B0IGRhdGEgdXNlZCBmb3IgdGhlIHJlLWVudHJhbnQgZ2V0b3B0LiAgKi8KKysgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgb3B0X2RhdGE7CisrCisrICAvKiBTdGF0ZXMgb2YgdGhlIHZhcmlvdXMgcGFyc2luZyBncm91cHMuICAqLworKyAgc3RydWN0IGdyb3VwICpncm91cHM7CisrICAvKiBUaGUgZW5kIG9mIHRoZSBHUk9VUFMgYXJyYXkuICAqLworKyAgc3RydWN0IGdyb3VwICplZ3JvdXA7CisrICAvKiBBbiB2ZWN0b3IgY29udGFpbmluZyBzdG9yYWdlIGZvciB0aGUgQ0hJTERfSU5QVVRTIGZpZWxkIGluIGFsbCBncm91cHMuICAqLworKyAgdm9pZCAqKmNoaWxkX2lucHV0czsKKysKKysgIC8qIFRydWUgaWYgd2UgdGhpbmsgdXNpbmcgZ2V0b3B0IGlzIHN0aWxsIHVzZWZ1bDsgaWYgZmFsc2UsIHRoZW4KKysgICAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGp1c3QgcGFzc2VkIHZlcmJhdGltIHdpdGggQVJHUF9LRVlfQVJHLiAgVGhpcyBpcworKyAgICAgY2xlYXJlZCB3aGVuZXZlciBnZXRvcHQgcmV0dXJucyBLRVlfRU5ELCBidXQgbWF5IGJlIHNldCBhZ2FpbiBpZiB0aGUgdXNlcgorKyAgICAgbW92ZXMgdGhlIG5leHQgYXJndW1lbnQgcG9pbnRlciBiYWNrd2FyZHMuICAqLworKyAgaW50IHRyeV9nZXRvcHQ7CisrCisrICAvKiBTdGF0ZSBibG9jayBzdXBwbGllZCB0byBwYXJzaW5nIHJvdXRpbmVzLiAgKi8KKysgIHN0cnVjdCBhcmdwX3N0YXRlIHN0YXRlOworKworKyAgLyogTWVtb3J5IHVzZWQgYnkgdGhpcyBwYXJzZXIuICAqLworKyAgdm9pZCAqc3RvcmFnZTsKKyt9OworKworKy8qIFRoZSBuZXh0IHVzYWJsZSBlbnRyaWVzIGluIHRoZSB2YXJpb3VzIHBhcnNlciB0YWJsZXMgYmVpbmcgZmlsbGVkIGluIGJ5CisrICAgY29udmVydF9vcHRpb25zLiAgKi8KKytzdHJ1Y3QgcGFyc2VyX2NvbnZlcnRfc3RhdGUKKyt7CisrICBzdHJ1Y3QgcGFyc2VyICpwYXJzZXI7CisrICBjaGFyICpzaG9ydF9lbmQ7CisrICBzdHJ1Y3Qgb3B0aW9uICpsb25nX2VuZDsKKysgIHZvaWQgKipjaGlsZF9pbnB1dHNfZW5kOworK307CisrCisrLyogQ29udmVydHMgYWxsIG9wdGlvbnMgaW4gQVJHUCAod2hpY2ggaXMgcHV0IGluIEdST1VQKSBhbmQgYW5jZXN0b3JzCisrICAgaW50byBnZXRvcHQgb3B0aW9ucyBzdG9yZWQgaW4gU0hPUlRfT1BUUyBhbmQgTE9OR19PUFRTOyBTSE9SVF9FTkQgYW5kCisrICAgQ1ZULT5MT05HX0VORCBhcmUgdGhlIHBvaW50cyBhdCB3aGljaCBuZXcgb3B0aW9ucyBhcmUgYWRkZWQuICBSZXR1cm5zIHRoZQorKyAgIG5leHQgdW51c2VkIGdyb3VwIGVudHJ5LiAgQ1ZUIGhvbGRzIHN0YXRlIHVzZWQgZHVyaW5nIHRoZSBjb252ZXJzaW9uLiAgKi8KKytzdGF0aWMgc3RydWN0IGdyb3VwICoKKytjb252ZXJ0X29wdGlvbnMgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3JvdXAgKnBhcmVudCwgdW5zaWduZWQgcGFyZW50X2luZGV4LAorKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgcGFyc2VyX2NvbnZlcnRfc3RhdGUgKmN2dCkKKyt7CisrICAvKiBSRUFMIGlzIHRoZSBtb3N0IHJlY2VudCBub24tYWxpYXMgdmFsdWUgb2YgT1BULiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCA9IGFyZ3AtPm9wdGlvbnM7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGRyZW4gPSBhcmdwLT5jaGlsZHJlbjsKKysKKysgIGlmIChyZWFsIHx8IGFyZ3AtPnBhcnNlcikKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0OworKworKyAgICAgIGlmIChyZWFsKQorKyAgICAgICBmb3IgKG9wdCA9IHJlYWw7ICFfX29wdGlvbl9pc19lbmQgKG9wdCk7IG9wdCsrKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGlmICghIChvcHQtPmZsYWdzICYgT1BUSU9OX0FMSUFTKSkKKysgICAgICAgICAgICAgLyogT1BUIGlzbid0IGFuIGFsaWFzLCBzbyB3ZSBjYW4gdXNlIHZhbHVlcyBmcm9tIGl0LiAgKi8KKysgICAgICAgICAgICAgcmVhbCA9IG9wdDsKKysKKysgICAgICAgICAgIGlmICghIChyZWFsLT5mbGFncyAmIE9QVElPTl9ET0MpKQorKyAgICAgICAgICAgICAvKiBBIHJlYWwgb3B0aW9uIChub3QganVzdCBkb2N1bWVudGF0aW9uKS4gICovCisrICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBpZiAoX19vcHRpb25faXNfc2hvcnQgKG9wdCkpCisrICAgICAgICAgICAgICAgICAvKiBPUFQgY2FuIGJlIHVzZWQgYXMgYSBzaG9ydCBvcHRpb24uICAqLworKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQrKyA9IG9wdC0+a2V5OworKyAgICAgICAgICAgICAgICAgICBpZiAocmVhbC0+YXJnKQorKyAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCsrID0gJzonOworKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgKmN2dC0+c2hvcnRfZW5kKysgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQgPSAnXDAnOyAvKiBrZWVwIDAgdGVybWluYXRlZCAqLworKyAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgIGlmIChvcHQtPm5hbWUKKysgICAgICAgICAgICAgICAgICAgJiYgZmluZF9sb25nX29wdGlvbiAoY3Z0LT5wYXJzZXItPmxvbmdfb3B0cywgb3B0LT5uYW1lKSA8IDApCisrICAgICAgICAgICAgICAgICAvKiBPUFQgY2FuIGJlIHVzZWQgYXMgYSBsb25nIG9wdGlvbi4gICovCisrICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgIGN2dC0+bG9uZ19lbmQtPm5hbWUgPSBvcHQtPm5hbWU7CisrICAgICAgICAgICAgICAgICAgIGN2dC0+bG9uZ19lbmQtPmhhc19hcmcgPQorKyAgICAgICAgICAgICAgICAgICAgIChyZWFsLT5hcmcKKysgICAgICAgICAgICAgICAgICAgICAgPyAocmVhbC0+ZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMCisrICAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9uYWxfYXJndW1lbnQKKysgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXF1aXJlZF9hcmd1bWVudCkKKysgICAgICAgICAgICAgICAgICAgICAgOiBub19hcmd1bWVudCk7CisrICAgICAgICAgICAgICAgICAgIGN2dC0+bG9uZ19lbmQtPmZsYWcgPSAwOworKyAgICAgICAgICAgICAgICAgICAvKiB3ZSBhZGQgYSBkaXNhbWJpZ3VhdGluZyBjb2RlIHRvIGFsbCB0aGUgdXNlcidzCisrICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAod2hpY2ggaXMgcmVtb3ZlZCBiZWZvcmUgd2UgYWN0dWFsbHkgY2FsbAorKyAgICAgICAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gdG8gcGFyc2UgdGhlIHZhbHVlKTsgdGhpcyBtZWFucyB0aGF0CisrICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyIGxvc2VzIHVzZSBvZiB0aGUgaGlnaCA4IGJpdHMgaW4gYWxsIGhpcworKyAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKHRoZSBzaWduIG9mIHRoZSBsb3dlciBiaXRzIGlzIHByZXNlcnZlZAorKyAgICAgICAgICAgICAgICAgICAgICBob3dldmVyKS4uLiAgKi8KKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+dmFsID0KKysgICAgICAgICAgICAgICAgICAgICAoKG9wdC0+a2V5IHwgcmVhbC0+a2V5KSAmIFVTRVJfTUFTSykKKysgICAgICAgICAgICAgICAgICAgICArICgoKGdyb3VwIC0gY3Z0LT5wYXJzZXItPmdyb3VwcykgKyAxKSA8PCBVU0VSX0JJVFMpOworKworKyAgICAgICAgICAgICAgICAgICAvKiBLZWVwIHRoZSBMT05HX09QVFMgbGlzdCB0ZXJtaW5hdGVkLiAgKi8KKysgICAgICAgICAgICAgICAgICAgKCsrY3Z0LT5sb25nX2VuZCktPm5hbWUgPSBOVUxMOworKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICB9CisrICAgICAgICAgICB9CisrCisrICAgICAgZ3JvdXAtPnBhcnNlciA9IGFyZ3AtPnBhcnNlcjsKKysgICAgICBncm91cC0+YXJncCA9IGFyZ3A7CisrICAgICAgZ3JvdXAtPnNob3J0X2VuZCA9IGN2dC0+c2hvcnRfZW5kOworKyAgICAgIGdyb3VwLT5hcmdzX3Byb2Nlc3NlZCA9IDA7CisrICAgICAgZ3JvdXAtPnBhcmVudCA9IHBhcmVudDsKKysgICAgICBncm91cC0+cGFyZW50X2luZGV4ID0gcGFyZW50X2luZGV4OworKyAgICAgIGdyb3VwLT5pbnB1dCA9IDA7CisrICAgICAgZ3JvdXAtPmhvb2sgPSAwOworKyAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHMgPSAwOworKworKyAgICAgIGlmIChjaGlsZHJlbikKKysgICAgICAgLyogQXNzaWduIEdST1VQJ3MgQ0hJTERfSU5QVVRTIGZpZWxkIHNvbWUgc3BhY2UgZnJvbQorKyAgICAgICAgICAgQ1ZULT5jaGlsZF9pbnB1dHNfZW5kLiovCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBudW1fY2hpbGRyZW4gPSAwOworKyAgICAgICAgIHdoaWxlIChjaGlsZHJlbltudW1fY2hpbGRyZW5dLmFyZ3ApCisrICAgICAgICAgICBudW1fY2hpbGRyZW4rKzsKKysgICAgICAgICBncm91cC0+Y2hpbGRfaW5wdXRzID0gY3Z0LT5jaGlsZF9pbnB1dHNfZW5kOworKyAgICAgICAgIGN2dC0+Y2hpbGRfaW5wdXRzX2VuZCArPSBudW1fY2hpbGRyZW47CisrICAgICAgIH0KKysKKysgICAgICBwYXJlbnQgPSBncm91cCsrOworKyAgICB9CisrICBlbHNlCisrICAgIHBhcmVudCA9IDA7CisrCisrICBpZiAoY2hpbGRyZW4pCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisrICAgICAgd2hpbGUgKGNoaWxkcmVuLT5hcmdwKQorKyAgICAgICBncm91cCA9CisrICAgICAgICAgY29udmVydF9vcHRpb25zIChjaGlsZHJlbisrLT5hcmdwLCBwYXJlbnQsIGluZGV4KyssIGdyb3VwLCBjdnQpOworKyAgICB9CisrCisrICByZXR1cm4gZ3JvdXA7CisrfQorKworKy8qIEZpbmQgdGhlIG1lcmdlZCBzZXQgb2YgZ2V0b3B0IG9wdGlvbnMsIHdpdGgga2V5cyBhcHByb3BpYXRlbHkgcHJlZml4ZWQuICovCisrc3RhdGljIHZvaWQKKytwYXJzZXJfY29udmVydCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgaW50IGZsYWdzKQorK3sKKysgIHN0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZSBjdnQ7CisrCisrICBjdnQucGFyc2VyID0gcGFyc2VyOworKyAgY3Z0LnNob3J0X2VuZCA9IHBhcnNlci0+c2hvcnRfb3B0czsKKysgIGN2dC5sb25nX2VuZCA9IHBhcnNlci0+bG9uZ19vcHRzOworKyAgY3Z0LmNoaWxkX2lucHV0c19lbmQgPSBwYXJzZXItPmNoaWxkX2lucHV0czsKKysKKysgIGlmIChmbGFncyAmIEFSR1BfSU5fT1JERVIpCisrICAgICpjdnQuc2hvcnRfZW5kKysgPSAnLSc7CisrICBlbHNlIGlmIChmbGFncyAmIEFSR1BfTk9fQVJHUykKKysgICAgKmN2dC5zaG9ydF9lbmQrKyA9ICcrJzsKKysgICpjdnQuc2hvcnRfZW5kID0gJ1wwJzsKKysKKysgIGN2dC5sb25nX2VuZC0+bmFtZSA9IE5VTEw7CisrCisrICBwYXJzZXItPmFyZ3AgPSBhcmdwOworKworKyAgaWYgKGFyZ3ApCisrICAgIHBhcnNlci0+ZWdyb3VwID0gY29udmVydF9vcHRpb25zIChhcmdwLCAwLCAwLCBwYXJzZXItPmdyb3VwcywgJmN2dCk7CisrICBlbHNlCisrICAgIHBhcnNlci0+ZWdyb3VwID0gcGFyc2VyLT5ncm91cHM7IC8qIE5vIHBhcnNlcnMgYXQgYWxsISAqLworK30KKysKKysvKiBMZW5ndGhzIG9mIHZhcmlvdXMgcGFyc2VyIGZpZWxkcyB3aGljaCB3ZSB3aWxsIGFsbG9jYXRlZC4gICovCisrc3RydWN0IHBhcnNlcl9zaXplcworK3sKKysgIHNpemVfdCBzaG9ydF9sZW47ICAgICAgICAgICAgLyogR2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nLiAgKi8KKysgIHNpemVfdCBsb25nX2xlbjsgICAgICAgICAgICAgLyogR2V0b3B0IGxvbmcgb3B0aW9ucyB2ZWN0b3IuICAqLworKyAgc2l6ZV90IG51bV9ncm91cHM7ICAgICAgICAgICAvKiBHcm91cCBzdHJ1Y3R1cmVzIHdlIGFsbG9jYXRlLiAgKi8KKysgIHNpemVfdCBudW1fY2hpbGRfaW5wdXRzOyAgICAgLyogQ2hpbGQgaW5wdXQgc2xvdHMuICAqLworK307CisrCisrLyogRm9yIEFSR1AsIGluY3JlbWVudHMgdGhlIE5VTV9HUk9VUFMgZmllbGQgaW4gU1pTIGJ5IHRoZSB0b3RhbCBudW1iZXIgb2YKKysgYXJncCBzdHJ1Y3R1cmVzIGRlc2NlbmRlZCBmcm9tIGl0LCBhbmQgdGhlIFNIT1JUX0xFTiAmIExPTkdfTEVOIGZpZWxkcyBieQorKyB0aGUgbWF4aW11bSBsZW5ndGhzIG9mIHRoZSByZXN1bHRpbmcgbWVyZ2VkIGdldG9wdCBzaG9ydCBvcHRpb25zIHN0cmluZyBhbmQKKysgbG9uZy1vcHRpb25zIGFycmF5LCByZXNwZWN0aXZlbHkuICAqLworK3N0YXRpYyB2b2lkCisrY2FsY19zaXplcyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsICBzdHJ1Y3QgcGFyc2VyX3NpemVzICpzenMpCisreworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCA9IGFyZ3AtPm9wdGlvbnM7CisrCisrICBpZiAob3B0IHx8IGFyZ3AtPnBhcnNlcikKKysgICAgeworKyAgICAgIHN6cy0+bnVtX2dyb3VwcysrOworKyAgICAgIGlmIChvcHQpCisrICAgICAgIHsKKysgICAgICAgICBpbnQgbnVtX29wdHMgPSAwOworKyAgICAgICAgIHdoaWxlICghX19vcHRpb25faXNfZW5kIChvcHQrKykpCisrICAgICAgICAgICBudW1fb3B0cysrOworKyAgICAgICAgIHN6cy0+c2hvcnRfbGVuICs9IG51bV9vcHRzICogMzsgLyogb3B0ICsgdXAgdG8gMiBgOidzICovCisrICAgICAgICAgc3pzLT5sb25nX2xlbiArPSBudW1fb3B0czsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICB7CisrICAgICAgIGNhbGNfc2l6ZXMgKChjaGlsZCsrKS0+YXJncCwgc3pzKTsKKysgICAgICAgc3pzLT5udW1fY2hpbGRfaW5wdXRzKys7CisrICAgICAgfQorK30KKysKKysKKytleHRlcm4gY2hhciAqIF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKHZvaWQpOworKy8qIEluaXRpYWxpemVzIFBBUlNFUiB0byBwYXJzZSBBUkdQIGluIGEgbWFubmVyIGRlc2NyaWJlZCBieSBGTEFHUy4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfaW5pdCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwKKysgICAgICAgICAgICBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCBmbGFncywgdm9pZCAqaW5wdXQpCisreworKyAgZXJyb3JfdCBlcnIgPSAwOworKyAgc3RydWN0IGdyb3VwICpncm91cDsKKysgIHN0cnVjdCBwYXJzZXJfc2l6ZXMgc3pzOworKyAgc3RydWN0IF9nZXRvcHRfZGF0YSBvcHRfZGF0YSA9IF9HRVRPUFRfREFUQV9JTklUSUFMSVpFUjsKKysKKysgIHN6cy5zaG9ydF9sZW4gPSAoZmxhZ3MgJiBBUkdQX05PX0FSR1MpID8gMCA6IDE7CisrICBzenMubG9uZ19sZW4gPSAwOworKyAgc3pzLm51bV9ncm91cHMgPSAwOworKyAgc3pzLm51bV9jaGlsZF9pbnB1dHMgPSAwOworKworKyAgaWYgKGFyZ3ApCisrICAgIGNhbGNfc2l6ZXMgKGFyZ3AsICZzenMpOworKworKyAgLyogTGVuZ3RocyBvZiB0aGUgdmFyaW91cyBiaXRzIG9mIHN0b3JhZ2UgdXNlZCBieSBQQVJTRVIuICAqLworKyNkZWZpbmUgR0xFTiAoc3pzLm51bV9ncm91cHMgKyAxKSAqIHNpemVvZiAoc3RydWN0IGdyb3VwKQorKyNkZWZpbmUgQ0xFTiAoc3pzLm51bV9jaGlsZF9pbnB1dHMgKiBzaXplb2YgKHZvaWQgKikpCisrI2RlZmluZSBMTEVOICgoc3pzLmxvbmdfbGVuICsgMSkgKiBzaXplb2YgKHN0cnVjdCBvcHRpb24pKQorKyNkZWZpbmUgU0xFTiAoc3pzLnNob3J0X2xlbiArIDEpCisrCisrICBwYXJzZXItPnN0b3JhZ2UgPSBtYWxsb2MgKEdMRU4gKyBDTEVOICsgTExFTiArIFNMRU4pOworKyAgaWYgKCEgcGFyc2VyLT5zdG9yYWdlKQorKyAgICByZXR1cm4gRU5PTUVNOworKworKyAgcGFyc2VyLT5ncm91cHMgPSBwYXJzZXItPnN0b3JhZ2U7CisrICBwYXJzZXItPmNoaWxkX2lucHV0cyA9IHBhcnNlci0+c3RvcmFnZSArIEdMRU47CisrICBwYXJzZXItPmxvbmdfb3B0cyA9IHBhcnNlci0+c3RvcmFnZSArIEdMRU4gKyBDTEVOOworKyAgcGFyc2VyLT5zaG9ydF9vcHRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTiArIENMRU4gKyBMTEVOOworKyAgcGFyc2VyLT5vcHRfZGF0YSA9IG9wdF9kYXRhOworKworKyAgbWVtc2V0IChwYXJzZXItPmNoaWxkX2lucHV0cywgMCwgc3pzLm51bV9jaGlsZF9pbnB1dHMgKiBzaXplb2YgKHZvaWQgKikpOworKyAgcGFyc2VyX2NvbnZlcnQgKHBhcnNlciwgYXJncCwgZmxhZ3MpOworKworKyAgbWVtc2V0ICgmcGFyc2VyLT5zdGF0ZSwgMCwgc2l6ZW9mIChzdHJ1Y3QgYXJncF9zdGF0ZSkpOworKyAgcGFyc2VyLT5zdGF0ZS5yb290X2FyZ3AgPSBwYXJzZXItPmFyZ3A7CisrICBwYXJzZXItPnN0YXRlLmFyZ2MgPSBhcmdjOworKyAgcGFyc2VyLT5zdGF0ZS5hcmd2ID0gYXJndjsKKysgIHBhcnNlci0+c3RhdGUuZmxhZ3MgPSBmbGFnczsKKysgIHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSA9IHN0ZGVycjsKKysgIHBhcnNlci0+c3RhdGUub3V0X3N0cmVhbSA9IHN0ZG91dDsKKysgIHBhcnNlci0+c3RhdGUubmV4dCA9IDA7ICAgICAgLyogVGVsbCBnZXRvcHQgdG8gaW5pdGlhbGl6ZS4gICovCisrICBwYXJzZXItPnN0YXRlLnBzdGF0ZSA9IHBhcnNlcjsKKysKKysgIHBhcnNlci0+dHJ5X2dldG9wdCA9IDE7CisrCisrICAvKiBDYWxsIGVhY2ggcGFyc2VyIGZvciB0aGUgZmlyc3QgdGltZSwgZ2l2aW5nIGl0IGEgY2hhbmNlIHRvIHByb3BhZ2F0ZQorKyAgICAgdmFsdWVzIHRvIGNoaWxkIHBhcnNlcnMuICAqLworKyAgaWYgKHBhcnNlci0+Z3JvdXBzIDwgcGFyc2VyLT5lZ3JvdXApCisrICAgIHBhcnNlci0+Z3JvdXBzLT5pbnB1dCA9IGlucHV0OworKyAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOworKyAgICAgICBncm91cCA8IHBhcnNlci0+ZWdyb3VwICYmICghZXJyIHx8IGVyciA9PSBFQkFES0VZKTsKKysgICAgICAgZ3JvdXArKykKKysgICAgeworKyAgICAgIGlmIChncm91cC0+cGFyZW50KQorKyAgICAgICAvKiBJZiBhIGNoaWxkIHBhcnNlciwgZ2V0IHRoZSBpbml0aWFsIGlucHV0IHZhbHVlIGZyb20gdGhlIHBhcmVudC4gKi8KKysgICAgICAgZ3JvdXAtPmlucHV0ID0gZ3JvdXAtPnBhcmVudC0+Y2hpbGRfaW5wdXRzW2dyb3VwLT5wYXJlbnRfaW5kZXhdOworKworKyAgICAgIGlmICghZ3JvdXAtPnBhcnNlcgorKyAgICAgICAgICYmIGdyb3VwLT5hcmdwLT5jaGlsZHJlbiAmJiBncm91cC0+YXJncC0+Y2hpbGRyZW4tPmFyZ3ApCisrICAgICAgIC8qIEZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIG5vIHBhcnNpbmcgZnVuY3Rpb24gaXMgc3VwcGxpZWQgZm9yIGFuCisrICAgICAgICAgIGFyZ3AsIHByb3BhZ2F0ZSBpdHMgaW5wdXQgdG8gaXRzIGZpcnN0IGNoaWxkLCBpZiBhbnkgKHRoaXMganVzdAorKyAgICAgICAgICBtYWtlcyB2ZXJ5IHNpbXBsZSB3cmFwcGVyIGFyZ3BzIG1vcmUgY29udmVuaWVudCkuICAqLworKyAgICAgICBncm91cC0+Y2hpbGRfaW5wdXRzWzBdID0gZ3JvdXAtPmlucHV0OworKworKyAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX0lOSVQsIDApOworKyAgICB9CisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgIGVyciA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kLiAgKi8KKysKKysgIGlmIChlcnIpCisrICAgIHJldHVybiBlcnI7CisrCisrICBpZiAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfTk9fRVJSUykKKysgICAgeworKyAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0ZXJyID0gMDsKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfUEFSU0VfQVJHVjApCisrICAgICAgIC8qIGdldG9wdCBhbHdheXMgc2tpcHMgQVJHVlswXSwgc28gd2UgaGF2ZSB0byBmYWtlIGl0IG91dC4gIEFzIGxvbmcKKysgICAgICAgICAgYXMgT1BURVJSIGlzIDAsIHRoZW4gaXQgc2hvdWxkbid0IGFjdHVhbGx5IHRyeSB0byBhY2Nlc3MgaXQuICAqLworKyAgICAgICBwYXJzZXItPnN0YXRlLmFyZ3YtLSwgcGFyc2VyLT5zdGF0ZS5hcmdjKys7CisrICAgIH0KKysgIGVsc2UKKysgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRlcnIgPSAxOyAgICAgICAvKiBQcmludCBlcnJvciBtZXNzYWdlcy4gICovCisrCisrICBpZiAocGFyc2VyLT5zdGF0ZS5hcmd2ID09IGFyZ3YgJiYgYXJndlswXSkKKysgICAgLyogVGhlcmUncyBhbiBhcmd2WzBdOyB1c2UgaXQgZm9yIG1lc3NhZ2VzLiAgKi8KKysgICAgeworKyAgICAgIGNoYXIgKnNob3J0X25hbWUgPSBzdHJyY2hyIChhcmd2WzBdLCAnLycpOworKyAgICAgIHBhcnNlci0+c3RhdGUubmFtZSA9IHNob3J0X25hbWUgPyBzaG9ydF9uYW1lICsgMSA6IGFyZ3ZbMF07CisrICAgIH0KKysgIGVsc2UKKysgICAgcGFyc2VyLT5zdGF0ZS5uYW1lID0gX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKTsKKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBGcmVlIGFueSBzdG9yYWdlIGNvbnN1bWVkIGJ5IFBBUlNFUiAoYnV0IG5vdCBQQVJTRVIgaXRzZWxmKS4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfZmluYWxpemUgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwKKysgICAgICAgICAgICAgICAgZXJyb3JfdCBlcnIsIGludCBhcmdfZWJhZGtleSwgaW50ICplbmRfaW5kZXgpCisreworKyAgc3RydWN0IGdyb3VwICpncm91cDsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSAmJiBhcmdfZWJhZGtleSkKKysgICAgLyogU3VwcHJlc3MgZXJyb3JzIGdlbmVyYXRlZCBieSB1bnBhcnNlZCBhcmd1bWVudHMuICAqLworKyAgICBlcnIgPSAwOworKworKyAgaWYgKCEgZXJyKQorKyAgICB7CisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUubmV4dCA9PSBwYXJzZXItPnN0YXRlLmFyZ2MpCisrICAgICAgIC8qIFdlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYWxsIGFyZ3VtZW50cyEgIENhbGwgYWxsIHRoZSBwYXJzZXJzIGFnYWluLAorKyAgICAgICAgICBqdXN0IGEgZmV3IG1vcmUgdGltZXMuLi4gKi8KKysgICAgICAgeworKyAgICAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsKKysgICAgICAgICAgICAgIGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXAgJiYgKCFlcnIgfHwgZXJyPT1FQkFES0VZKTsKKysgICAgICAgICAgICAgIGdyb3VwKyspCisrICAgICAgICAgICBpZiAoZ3JvdXAtPmFyZ3NfcHJvY2Vzc2VkID09IDApCisrICAgICAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX05PX0FSR1MsIDApOworKyAgICAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmVncm91cCAtIDE7CisrICAgICAgICAgICAgICBncm91cCA+PSBwYXJzZXItPmdyb3VwcyAmJiAoIWVyciB8fCBlcnI9PUVCQURLRVkpOworKyAgICAgICAgICAgICAgZ3JvdXAtLSkKKysgICAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX0VORCwgMCk7CisrCisrICAgICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICAgICAgZXJyID0gMDsgICAgICAgICAgICAvKiBTb21lIHBhcnNlciBkaWRuJ3QgdW5kZXJzdGFuZC4gICovCisrCisrICAgICAgICAgLyogVGVsbCB0aGUgdXNlciB0aGF0IGFsbCBhcmd1bWVudHMgYXJlIHBhcnNlZC4gICovCisrICAgICAgICAgaWYgKGVuZF9pbmRleCkKKysgICAgICAgICAgICplbmRfaW5kZXggPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgIH0KKysgICAgICBlbHNlIGlmIChlbmRfaW5kZXgpCisrICAgICAgIC8qIFJldHVybiBhbnkgcmVtYWluaW5nIGFyZ3VtZW50cyB0byB0aGUgdXNlci4gICovCisrICAgICAgICplbmRfaW5kZXggPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBObyB3YXkgdG8gcmV0dXJuIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgYm9ndXMuICovCisrICAgICAgIHsKKysgICAgICAgICBpZiAoIShwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19FUlJTKQorKyAgICAgICAgICAgICAmJiBwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0pCisrICAgICAgICAgICBmcHJpbnRmIChwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAocGFyc2VyLT5hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IFRvbyBtYW55IGFyZ3VtZW50c1xuIiksCisrICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnN0YXRlLm5hbWUpOworKyAgICAgICAgIGVyciA9IEVCQURLRVk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgLyogT2theSwgd2UncmUgYWxsIGRvbmUsIHdpdGggZWl0aGVyIGFuIGVycm9yIG9yIHN1Y2Nlc3M7IGNhbGwgdGhlIHBhcnNlcnMKKysgICAgIHRvIGluZGljYXRlIHdoaWNoIG9uZS4gICovCisrCisrICBpZiAoZXJyKQorKyAgICB7CisrICAgICAgLyogTWF5YmUgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZS4gICovCisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICAvKiBBbiBhcHByb3ByaWF0ZSBtZXNzYWdlIGRlc2NyaWJpbmcgd2hhdCB0aGUgZXJyb3Igd2FzIHNob3VsZCBoYXZlCisrICAgICAgICAgIGJlZW4gcHJpbnRlZCBlYXJsaWVyLiAgKi8KKysgICAgICAgYXJncF9zdGF0ZV9oZWxwICgmcGFyc2VyLT5zdGF0ZSwgcGFyc2VyLT5zdGF0ZS5lcnJfc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHUF9IRUxQX1NURF9FUlIpOworKworKyAgICAgIC8qIFNpbmNlIHdlIGRpZG4ndCBleGl0LCBnaXZlIGVhY2ggcGFyc2VyIGFuIGVycm9yIGluZGljYXRpb24uICAqLworKyAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfRVJST1IsIDApOworKyAgICB9CisrICBlbHNlCisrICAgIC8qIE5vdGlmeSBwYXJzZXJzIG9mIHN1Y2Nlc3MsIGFuZCBwcm9wYWdhdGUgYmFjayB2YWx1ZXMgZnJvbSBwYXJzZXJzLiAgKi8KKysgICAgeworKyAgICAgIC8qIFdlIHBhc3Mgb3ZlciB0aGUgZ3JvdXBzIGluIHJldmVyc2Ugb3JkZXIgc28gdGhhdCBjaGlsZCBncm91cHMgYXJlCisrICAgICAgICBnaXZlbiBhIGNoYW5jZSB0byBkbyB0aGVyZSBwcm9jZXNzaW5nIGJlZm9yZSBwYXNzaW5nIGJhY2sgYSB2YWx1ZSB0bworKyAgICAgICAgdGhlIHBhcmVudC4gICovCisrICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+ZWdyb3VwIC0gMQorKyAgICAgICAgICA7IGdyb3VwID49IHBhcnNlci0+Z3JvdXBzICYmICghZXJyIHx8IGVyciA9PSBFQkFES0VZKQorKyAgICAgICAgICA7IGdyb3VwLS0pCisrICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX1NVQ0NFU1MsIDApOworKyAgICAgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgICAgZXJyID0gMDsgICAgICAgICAgICAgICAgLyogU29tZSBwYXJzZXIgZGlkbid0IHVuZGVyc3RhbmQuICAqLworKyAgICB9CisrCisrICAvKiBDYWxsIHBhcnNlcnMgb25jZSBtb3JlLCB0byBkbyBhbnkgZmluYWwgY2xlYW51cC4gIEVycm9ycyBhcmUgaWdub3JlZC4gICovCisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5lZ3JvdXAgLSAxOyBncm91cCA+PSBwYXJzZXItPmdyb3VwczsgZ3JvdXAtLSkKKysgICAgZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfRklOSSwgMCk7CisrCisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgIGVyciA9IEVJTlZBTDsKKysKKysgIGZyZWUgKHBhcnNlci0+c3RvcmFnZSk7CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBDYWxsIHRoZSB1c2VyIHBhcnNlcnMgdG8gcGFyc2UgdGhlIG5vbi1vcHRpb24gYXJndW1lbnQgVkFMLCBhdCB0aGUgY3VycmVudAorKyAgIHBvc2l0aW9uLCByZXR1cm5pbmcgYW55IGVycm9yLiAgVGhlIHN0YXRlIE5FWFQgcG9pbnRlciBpcyBhc3N1bWVkIHRvIGhhdmUKKysgICBiZWVuIGFkanVzdGVkIChieSBnZXRvcHQpIHRvIHBvaW50IGFmdGVyIHRoaXMgYXJndW1lbnQ7IHRoaXMgZnVuY3Rpb24gd2lsbAorKyAgIGFkanVzdCBpdCBjb3JyZWN0bHkgdG8gcmVmbGVjdCBob3dldmVyIG1hbnkgYXJncyBhY3R1YWxseSBlbmQgdXAgYmVpbmcKKysgICBjb25zdW1lZC4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfcGFyc2VfYXJnIChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNoYXIgKnZhbCkKKyt7CisrICAvKiBTYXZlIHRoZSBzdGFydGluZyB2YWx1ZSBvZiBORVhULCBmaXJzdCBhZGp1c3RpbmcgaXQgc28gdGhhdCB0aGUgYXJnCisrICAgICB3ZSdyZSBwYXJzaW5nIGlzIGFnYWluIHRoZSBmcm9udCBvZiB0aGUgYXJnIHZlY3Rvci4gICovCisrICBpbnQgaW5kZXggPSAtLXBhcnNlci0+c3RhdGUubmV4dDsKKysgIGVycm9yX3QgZXJyID0gRUJBREtFWTsKKysgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICBpbnQga2V5ID0gMDsgICAgICAgICAgICAgICAgIC8qIFdoaWNoIG9mIEFSR1BfS0VZX0FSR1tTXSB3ZSB1c2VkLiAgKi8KKysKKysgIC8qIFRyeSB0byBwYXJzZSB0aGUgYXJndW1lbnQgaW4gZWFjaCBwYXJzZXIuICAqLworKyAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzCisrICAgICAgIDsgZ3JvdXAgPCBwYXJzZXItPmVncm91cCAmJiBlcnIgPT0gRUJBREtFWQorKyAgICAgICA7IGdyb3VwKyspCisrICAgIHsKKysgICAgICBwYXJzZXItPnN0YXRlLm5leHQrKzsgICAgLyogRm9yIEFSR1BfS0VZX0FSRywgY29uc3VtZSB0aGUgYXJnLiAgKi8KKysgICAgICBrZXkgPSBBUkdQX0tFWV9BUkc7CisrICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwga2V5LCB2YWwpOworKworKyAgICAgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgICAgLyogVGhpcyBwYXJzZXIgZG9lc24ndCBsaWtlIEFSR1BfS0VZX0FSRzsgdHJ5IEFSR1BfS0VZX0FSR1MgaW5zdGVhZC4gKi8KKysgICAgICAgeworKyAgICAgICAgIHBhcnNlci0+c3RhdGUubmV4dC0tOyAvKiBGb3IgQVJHUF9LRVlfQVJHUywgcHV0IGJhY2sgdGhlIGFyZy4gICovCisrICAgICAgICAga2V5ID0gQVJHUF9LRVlfQVJHUzsKKysgICAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBrZXksIDApOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmICghIGVycikKKysgICAgeworKyAgICAgIGlmIChrZXkgPT0gQVJHUF9LRVlfQVJHUykKKysgICAgICAgLyogVGhlIGRlZmF1bHQgZm9yIEFSR1BfS0VZX0FSR1MgaXMgdG8gYXNzdW1lIHRoYXQgaWYgTkVYVCBpc24ndAorKyAgICAgICAgICBjaGFuZ2VkIGJ5IHRoZSB1c2VyLCAqYWxsKiBhcmd1bWVudHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQKKysgICAgICAgICAgY29uc3VtZWQuICAqLworKyAgICAgICBwYXJzZXItPnN0YXRlLm5leHQgPSBwYXJzZXItPnN0YXRlLmFyZ2M7CisrCisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUubmV4dCA+IGluZGV4KQorKyAgICAgICAvKiBSZW1lbWJlciB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYSBub24tb3B0aW9uCisrICAgICAgICAgIGFyZ3VtZW50IC0tIGJ1dCBvbmx5IGlmIHRoZSB1c2VyIGhhc24ndCBnb3R0ZW4gdHJpY2t5IGFuZCBzZXQKKysgICAgICAgICAgdGhlIGNsb2NrIGJhY2suICAqLworKyAgICAgICAoLS1ncm91cCktPmFyZ3NfcHJvY2Vzc2VkICs9IChwYXJzZXItPnN0YXRlLm5leHQgLSBpbmRleCk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBUaGUgdXNlciB3YW50cyB0byByZXBhcnNlIHNvbWUgYXJncywgZ2l2ZSBnZXRvcHQgYW5vdGhlciB0cnkuICAqLworKyAgICAgICBwYXJzZXItPnRyeV9nZXRvcHQgPSAxOworKyAgICB9CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBDYWxsIHRoZSB1c2VyIHBhcnNlcnMgdG8gcGFyc2UgdGhlIG9wdGlvbiBPUFQsIHdpdGggYXJndW1lbnQgVkFMLCBhdCB0aGUKKysgICBjdXJyZW50IHBvc2l0aW9uLCByZXR1cm5pbmcgYW55IGVycm9yLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9wYXJzZV9vcHQgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgaW50IG9wdCwgY2hhciAqdmFsKQorK3sKKysgIC8qIFRoZSBncm91cCBrZXkgZW5jb2RlZCBpbiB0aGUgaGlnaCBiaXRzOyAwIGZvciBzaG9ydCBvcHRzIG9yCisrICAgICBncm91cF9udW1iZXIgKyAxIGZvciBsb25nIG9wdHMuICAqLworKyAgaW50IGdyb3VwX2tleSA9IG9wdCA+PiBVU0VSX0JJVFM7CisrICBlcnJvcl90IGVyciA9IEVCQURLRVk7CisrCisrICBpZiAoZ3JvdXBfa2V5ID09IDApCisrICAgIC8qIEEgc2hvcnQgb3B0aW9uLiAgQnkgY29tcGFyaW5nIE9QVCdzIHBvc2l0aW9uIGluIFNIT1JUX09QVFMgdG8gdGhlCisrICAgICAgIHZhcmlvdXMgc3RhcnRpbmcgcG9zaXRpb25zIGluIGVhY2ggZ3JvdXAncyBTSE9SVF9FTkQgZmllbGQsIHdlIGNhbgorKyAgICAgICBkZXRlcm1pbmUgd2hpY2ggZ3JvdXAgT1BUIGNhbWUgZnJvbS4gICovCisrICAgIHsKKysgICAgICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKyAgICAgIGNoYXIgKnNob3J0X2luZGV4ID0gc3RyY2hyIChwYXJzZXItPnNob3J0X29wdHMsIG9wdCk7CisrCisrICAgICAgaWYgKHNob3J0X2luZGV4KQorKyAgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7IGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXA7IGdyb3VwKyspCisrICAgICAgICAgaWYgKGdyb3VwLT5zaG9ydF9lbmQgPiBzaG9ydF9pbmRleCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRhcmcpOworKyAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBBIGxvbmcgb3B0aW9uLiAgV2UgdXNlIHNoaWZ0cyBpbnN0ZWFkIG9mIG1hc2tpbmcgZm9yIGV4dHJhY3RpbmcKKysgICAgICAgdGhlIHVzZXIgdmFsdWUgaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIHNpZ24uICAqLworKyAgICBlcnIgPQorKyAgICAgIGdyb3VwX3BhcnNlICgmcGFyc2VyLT5ncm91cHNbZ3JvdXBfa2V5IC0gMV0sICZwYXJzZXItPnN0YXRlLAorKyAgICAgICAgICAgICAgICAgIChvcHQgPDwgR1JPVVBfQklUUykgPj4gR1JPVVBfQklUUywKKysgICAgICAgICAgICAgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrCisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgIC8qIEF0IGxlYXN0IGN1cnJlbnRseSwgYW4gb3B0aW9uIG5vdCByZWNvZ25pemVkIGlzIGFuIGVycm9yIGluIHRoZQorKyAgICAgICBwYXJzZXIsIGJlY2F1c2Ugd2UgcHJlLWNvbXB1dGUgd2hpY2ggcGFyc2VyIGlzIHN1cHBvc2VkIHRvIGRlYWwKKysgICAgICAgd2l0aCBlYWNoIG9wdGlvbi4gICovCisrICAgIHsKKysgICAgICBzdGF0aWMgY29uc3QgY2hhciBiYWRfa2V5X2VycltdID0KKysgICAgICAgTl8oIihQUk9HUkFNIEVSUk9SKSBPcHRpb24gc2hvdWxkIGhhdmUgYmVlbiByZWNvZ25pemVkIT8iKTsKKysgICAgICBpZiAoZ3JvdXBfa2V5ID09IDApCisrICAgICAgIGFyZ3BfZXJyb3IgKCZwYXJzZXItPnN0YXRlLCAiLSVjOiAlcyIsIG9wdCwKKysgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAocGFyc2VyLT5hcmdwLT5hcmdwX2RvbWFpbiwgYmFkX2tleV9lcnIpKTsKKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdCA9IHBhcnNlci0+bG9uZ19vcHRzOworKyAgICAgICAgIHdoaWxlIChsb25nX29wdC0+dmFsICE9IG9wdCAmJiBsb25nX29wdC0+bmFtZSkKKysgICAgICAgICAgIGxvbmdfb3B0Kys7CisrICAgICAgICAgYXJncF9lcnJvciAoJnBhcnNlci0+c3RhdGUsICItLSVzOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICBsb25nX29wdC0+bmFtZSA/IGxvbmdfb3B0LT5uYW1lIDogIj8/PyIsCisrICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAocGFyc2VyLT5hcmdwLT5hcmdwX2RvbWFpbiwgYmFkX2tleV9lcnIpKTsKKysgICAgICAgfQorKyAgICB9CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBQYXJzZSB0aGUgbmV4dCBhcmd1bWVudCBpbiBQQVJTRVIgKGFzIGluZGljYXRlZCBieSBQQVJTRVItPnN0YXRlLm5leHQpLgorKyAgIEFueSBlcnJvciBmcm9tIHRoZSBwYXJzZXJzIGlzIHJldHVybmVkLCBhbmQgKkFSR1BfRUJBREtFWSBpbmRpY2F0ZXMKKysgICB3aGV0aGVyIGEgdmFsdWUgb2YgRUJBREtFWSBpcyBkdWUgdG8gYW4gdW5yZWNvZ25pemVkIGFyZ3VtZW50ICh3aGljaCBpcworKyAgIGdlbmVyYWxseSBub3QgZmF0YWwpLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9wYXJzZV9uZXh0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGludCAqYXJnX2ViYWRrZXkpCisreworKyAgaW50IG9wdDsKKysgIGVycm9yX3QgZXJyID0gMDsKKysKKysgIGlmIChwYXJzZXItPnN0YXRlLnF1b3RlZCAmJiBwYXJzZXItPnN0YXRlLm5leHQgPCBwYXJzZXItPnN0YXRlLnF1b3RlZCkKKysgICAgLyogVGhlIG5leHQgYXJndW1lbnQgcG9pbnRlciBoYXMgYmVlbiBtb3ZlZCB0byBiZWZvcmUgdGhlIHF1b3RlZAorKyAgICAgICByZWdpb24sIHNvIHByZXRlbmQgd2UgbmV2ZXIgc2F3IHRoZSBxdW90aW5nIGAtLScsIGFuZCBnaXZlIGdldG9wdAorKyAgICAgICBhbm90aGVyIGNoYW5jZS4gIElmIHRoZSB1c2VyIGhhc24ndCByZW1vdmVkIGl0LCBnZXRvcHQgd2lsbCBqdXN0CisrICAgICAgIHByb2Nlc3MgaXQgYWdhaW4uICAqLworKyAgICBwYXJzZXItPnN0YXRlLnF1b3RlZCA9IDA7CisrCisrICBpZiAocGFyc2VyLT50cnlfZ2V0b3B0ICYmICFwYXJzZXItPnN0YXRlLnF1b3RlZCkKKysgICAgLyogR2l2ZSBnZXRvcHQgYSBjaGFuY2UgdG8gcGFyc2UgdGhpcy4gICovCisrICAgIHsKKysgICAgICAvKiBQdXQgaXQgYmFjayBpbiBPUFRJTkQgZm9yIGdldG9wdC4gICovCisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRpbmQgPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgLyogRGlzdGluZ3Vpc2ggS0VZX0VSUiBmcm9tIGEgcmVhbCBvcHRpb24uICAqLworKyAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0b3B0ID0gS0VZX0VORDsKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfTE9OR19PTkxZKQorKyAgICAgICBvcHQgPSBfZ2V0b3B0X2xvbmdfb25seV9yIChwYXJzZXItPnN0YXRlLmFyZ2MsIHBhcnNlci0+c3RhdGUuYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5zaG9ydF9vcHRzLCBwYXJzZXItPmxvbmdfb3B0cywgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+b3B0X2RhdGEpOworKyAgICAgIGVsc2UKKysgICAgICAgb3B0ID0gX2dldG9wdF9sb25nX3IgKHBhcnNlci0+c3RhdGUuYXJnYywgcGFyc2VyLT5zdGF0ZS5hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5zaG9ydF9vcHRzLCBwYXJzZXItPmxvbmdfb3B0cywgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZXItPm9wdF9kYXRhKTsKKysgICAgICAvKiBBbmQgc2VlIHdoYXQgZ2V0b3B0IGRpZC4gICovCisrICAgICAgcGFyc2VyLT5zdGF0ZS5uZXh0ID0gcGFyc2VyLT5vcHRfZGF0YS5vcHRpbmQ7CisrCisrICAgICAgaWYgKG9wdCA9PSBLRVlfRU5EKQorKyAgICAgICAvKiBHZXRvcHQgc2F5cyB0aGVyZSBhcmUgbm8gbW9yZSBvcHRpb25zLCBzbyBzdG9wIHVzaW5nCisrICAgICAgICAgIGdldG9wdDsgd2UnbGwgY29udGludWUgaWYgbmVjZXNzYXJ5IG9uIG91ciBvd24uICAqLworKyAgICAgICB7CisrICAgICAgICAgcGFyc2VyLT50cnlfZ2V0b3B0ID0gMDsKKysgICAgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID4gMQorKyAgICAgICAgICAgICAmJiBzdHJjbXAgKHBhcnNlci0+c3RhdGUuYXJndltwYXJzZXItPnN0YXRlLm5leHQgLSAxXSwgUVVPVEUpCisrICAgICAgICAgICAgICAgICAgPT0gMCkKKysgICAgICAgICAgIC8qIE5vdCBvbmx5IGlzIHRoaXMgdGhlIGVuZCBvZiB0aGUgb3B0aW9ucywgYnV0IGl0J3MgYQorKyAgICAgICAgICAgICAgYHF1b3RlZCcgcmVnaW9uLCB3aGljaCBtYXkgaGF2ZSBhcmdzIHRoYXQgKmxvb2sqIGxpa2UKKysgICAgICAgICAgICAgIG9wdGlvbnMsIHNvIHdlIGRlZmluaXRlbHkgc2hvdWxkbid0IHRyeSB0byB1c2UgZ2V0b3B0IHBhc3QKKysgICAgICAgICAgICAgIGhlcmUsIHdoYXRldmVyIGhhcHBlbnMuICAqLworKyAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5xdW90ZWQgPSBwYXJzZXItPnN0YXRlLm5leHQ7CisrICAgICAgIH0KKysgICAgICBlbHNlIGlmIChvcHQgPT0gS0VZX0VSUiAmJiBwYXJzZXItPm9wdF9kYXRhLm9wdG9wdCAhPSBLRVlfRU5EKQorKyAgICAgICAvKiBLRVlfRVJSIGNhbiBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGEgdmFsaWQgdXNlciBzaG9ydAorKyAgICAgICAgICBvcHRpb24sIGJ1dCBpbiB0aGUgY2FzZSBvZiBhIHJlYWwgZXJyb3IsIGdldG9wdCBzZXRzIE9QVE9QVAorKyAgICAgICAgICB0byB0aGUgb2ZmZW5kaW5nIGNoYXJhY3Rlciwgd2hpY2ggY2FuIG5ldmVyIGJlIEtFWV9FTkQuICAqLworKyAgICAgICB7CisrICAgICAgICAgKmFyZ19lYmFka2V5ID0gMDsKKysgICAgICAgICByZXR1cm4gRUJBREtFWTsKKysgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIG9wdCA9IEtFWV9FTkQ7CisrCisrICBpZiAob3B0ID09IEtFWV9FTkQpCisrICAgIHsKKysgICAgICAvKiBXZSdyZSBwYXN0IHdoYXQgZ2V0b3B0IGNvbnNpZGVycyB0aGUgb3B0aW9ucy4gICovCisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUubmV4dCA+PSBwYXJzZXItPnN0YXRlLmFyZ2MKKysgICAgICAgICB8fCAocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfTk9fQVJHUykpCisrICAgICAgIC8qIEluZGljYXRlIHRoYXQgd2UncmUgZG9uZS4gICovCisrICAgICAgIHsKKysgICAgICAgICAqYXJnX2ViYWRrZXkgPSAxOworKyAgICAgICAgIHJldHVybiBFQkFES0VZOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAvKiBBIG5vbi1vcHRpb24gYXJnOyBzaW11bGF0ZSB3aGF0IGdldG9wdCBtaWdodCBoYXZlIGRvbmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgb3B0ID0gS0VZX0FSRzsKKysgICAgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyA9IHBhcnNlci0+c3RhdGUuYXJndltwYXJzZXItPnN0YXRlLm5leHQrK107CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKG9wdCA9PSBLRVlfQVJHKQorKyAgICAvKiBBIG5vbi1vcHRpb24gYXJndW1lbnQ7IHRyeSBlYWNoIHBhcnNlciBpbiB0dXJuLiAgKi8KKysgICAgZXJyID0gcGFyc2VyX3BhcnNlX2FyZyAocGFyc2VyLCBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrICBlbHNlCisrICAgIGVyciA9IHBhcnNlcl9wYXJzZV9vcHQgKHBhcnNlciwgb3B0LCBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrCisrICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICphcmdfZWJhZGtleSA9IChvcHQgPT0gS0VZX0VORCB8fCBvcHQgPT0gS0VZX0FSRyk7CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBQYXJzZSB0aGUgb3B0aW9ucyBzdHJpbmdzIGluIEFSR0MgJiBBUkdWIGFjY29yZGluZyB0byB0aGUgYXJncCBpbiBBUkdQLgorKyAgIEZMQUdTIGlzIG9uZSBvZiB0aGUgQVJHUF8gZmxhZ3MgYWJvdmUuICBJZiBFTkRfSU5ERVggaXMgbm9uLU5VTEwsIHRoZQorKyAgIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0IHVucGFyc2VkIG9wdGlvbiBpcyByZXR1cm5lZCBpbiBpdC4gIElmIGFuCisrICAgdW5rbm93biBvcHRpb24gaXMgcHJlc2VudCwgRUlOVkFMIGlzIHJldHVybmVkOyBpZiBzb21lIHBhcnNlciByb3V0aW5lCisrICAgcmV0dXJuZWQgYSBub24temVybyB2YWx1ZSwgaXQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSAwIGlzIHJldHVybmVkLiAgKi8KKytlcnJvcl90CisrYXJncF9wYXJzZSAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGludCBhcmdjLCBjaGFyICoqYXJndiwgdW5zaWduZWQgZmxhZ3MsCisrICAgICAgICAgICAgIGludCAqZW5kX2luZGV4LCB2b2lkICppbnB1dCkKKyt7CisrICBlcnJvcl90IGVycjsKKysgIHN0cnVjdCBwYXJzZXIgcGFyc2VyOworKworKyAgLyogSWYgdHJ1ZSwgdGhlbiBlcnIgPT0gRUJBREtFWSBpcyBhIHJlc3VsdCBvZiBhIG5vbi1vcHRpb24gYXJndW1lbnQgZmFpbGluZworKyAgICAgdG8gYmUgcGFyc2VkICh3aGljaCBpbiBzb21lIGNhc2VzIGlzbid0IGFjdHVhbGx5IGFuIGVycm9yKS4gICovCisrICBpbnQgYXJnX2ViYWRrZXkgPSAwOworKworKyAgaWYgKCEgKGZsYWdzICYgQVJHUF9OT19IRUxQKSkKKysgICAgLyogQWRkIG91ciBvd24gb3B0aW9ucy4gICovCisrICAgIHsKKysgICAgICBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhbGxvY2EgKDQgKiBzaXplb2YgKHN0cnVjdCBhcmdwX2NoaWxkKSk7CisrICAgICAgc3RydWN0IGFyZ3AgKnRvcF9hcmdwID0gYWxsb2NhIChzaXplb2YgKHN0cnVjdCBhcmdwKSk7CisrCisrICAgICAgLyogVE9QX0FSR1AgaGFzIG5vIG9wdGlvbnMsIGl0IGp1c3Qgc2VydmVzIHRvIGdyb3VwIHRoZSB1c2VyICYgZGVmYXVsdAorKyAgICAgICAgYXJncHMuICAqLworKyAgICAgIG1lbXNldCAodG9wX2FyZ3AsIDAsIHNpemVvZiAoKnRvcF9hcmdwKSk7CisrICAgICAgdG9wX2FyZ3AtPmNoaWxkcmVuID0gY2hpbGQ7CisrCisrICAgICAgbWVtc2V0IChjaGlsZCwgMCwgNCAqIHNpemVvZiAoc3RydWN0IGFyZ3BfY2hpbGQpKTsKKysKKysgICAgICBpZiAoYXJncCkKKysgICAgICAgKGNoaWxkKyspLT5hcmdwID0gYXJncDsKKysgICAgICAoY2hpbGQrKyktPmFyZ3AgPSAmYXJncF9kZWZhdWx0X2FyZ3A7CisrICAgICAgaWYgKGFyZ3BfcHJvZ3JhbV92ZXJzaW9uIHx8IGFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spCisrICAgICAgIChjaGlsZCsrKS0+YXJncCA9ICZhcmdwX3ZlcnNpb25fYXJncDsKKysgICAgICBjaGlsZC0+YXJncCA9IDA7CisrCisrICAgICAgYXJncCA9IHRvcF9hcmdwOworKyAgICB9CisrCisrICAvKiBDb25zdHJ1Y3QgYSBwYXJzZXIgZm9yIHRoZXNlIGFyZ3VtZW50cy4gICovCisrICBlcnIgPSBwYXJzZXJfaW5pdCAoJnBhcnNlciwgYXJncCwgYXJnYywgYXJndiwgZmxhZ3MsIGlucHV0KTsKKysKKysgIGlmICghIGVycikKKysgICAgLyogUGFyc2UhICovCisrICAgIHsKKysgICAgICB3aGlsZSAoISBlcnIpCisrICAgICAgIGVyciA9IHBhcnNlcl9wYXJzZV9uZXh0ICgmcGFyc2VyLCAmYXJnX2ViYWRrZXkpOworKyAgICAgIGVyciA9IHBhcnNlcl9maW5hbGl6ZSAoJnBhcnNlciwgZXJyLCBhcmdfZWJhZGtleSwgZW5kX2luZGV4KTsKKysgICAgfQorKworKyAgcmV0dXJuIGVycjsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBpbnB1dCBmaWVsZCBmb3IgQVJHUCBpbiB0aGUgcGFyc2VyIGNvcnJlc3BvbmRpbmcgdG8gU1RBVEU7IHVzZWQKKysgICBieSB0aGUgaGVscCByb3V0aW5lcy4gICovCisrdm9pZCAqCisrX19hcmdwX2lucHV0IChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIGlmIChzdGF0ZSkKKysgICAgeworKyAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICAgICAgc3RydWN0IHBhcnNlciAqcGFyc2VyID0gc3RhdGUtPnBzdGF0ZTsKKysKKysgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7IGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXA7IGdyb3VwKyspCisrICAgICAgIGlmIChncm91cC0+YXJncCA9PSBhcmdwKQorKyAgICAgICAgIHJldHVybiBncm91cC0+aW5wdXQ7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLXB2LmMgYi9saWJ1YXJncC9hcmdwLXB2LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMTIyN2I1CistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXB2LmMKK0BAIC0wLDAgKzEsMjUgQEAKKysvKiBEZWZhdWx0IGRlZmluaXRpb24gZm9yIEFSR1BfUFJPR1JBTV9WRVJTSU9OLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKy8qIElmIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0IG9wdGlvbgorKyAgIC0tdmVyc2lvbiBpcyBhZGRlZCAodW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZyBpcyB1c2VkKSwgd2hpY2ggd2lsbAorKyAgIHByaW50IHRoaXMgdGhpcyBzdHJpbmcgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGFuZCBleGl0ICh1bmxlc3MgdGhlCisrICAgQVJHUF9OT19FWElUIGZsYWcgaXMgdXNlZCkuICBPdmVycmlkZGVuIGJ5IEFSR1BfUFJPR1JBTV9WRVJTSU9OX0hPT0suICAqLworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcHZoLmMgYi9saWJ1YXJncC9hcmdwLXB2aC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMWYxZDk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1wdmguYworQEAgLTAsMCArMSwzMiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXJncC5oPgorKworKy8qIElmIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0IG9wdGlvbgorKyAgIC0tdmVyc2lvbiBpcyBhZGRlZCAodW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZyBpcyB1c2VkKSwgd2hpY2ggY2FsbHMKKysgICB0aGlzIGZ1bmN0aW9uIHdpdGggYSBzdHJlYW0gdG8gcHJpbnQgdGhlIHZlcnNpb24gdG8gYW5kIGEgcG9pbnRlciB0byB0aGUKKysgICBjdXJyZW50IHBhcnNpbmcgc3RhdGUsIGFuZCB0aGVuIGV4aXRzICh1bmxlc3MgdGhlIEFSR1BfTk9fRVhJVCBmbGFnIGlzCisrICAgdXNlZCkuICBUaGlzIHZhcmlhYmxlIHRha2VzIHByZWNlZGVudCBvdmVyIEFSR1BfUFJPR1JBTV9WRVJTSU9OLiAgKi8KKyt2b2lkICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKEZJTEUgKnN0cmVhbSwgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKTsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLXhpbmwuYyBiL2xpYnVhcmdwL2FyZ3AteGlubC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjFkMzAwMAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC14aW5sLmMKK0BAIC0wLDAgKzEsMzUgQEAKKysvKiBSZWFsIGRlZmluaXRpb25zIGZvciBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBpbiBhcmdwLmgKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBIQVZFX0ZFQVRVUkVTX0gKKysjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VTRV9FWFRFUk5fSU5MSU5FUworKyMgZGVmaW5lIF9fVVNFX0VYVEVSTl9JTkxJTkVTICAxCisrI2VuZGlmCisrI2RlZmluZSBBUkdQX0VJCisrI3VuZGVmIF9fT1BUSU1JWkVfXworKyNkZWZpbmUgX19PUFRJTUlaRV9fIDEKKysjaW5jbHVkZSA8YXJncC5oPgorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9NYWtlZmlsZSBiL3Rlc3QvYXJncC9NYWtlZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjYxNmZlNzEKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9NYWtlZmlsZQorQEAgLTAsMCArMSw3IEBACisrIyB1Q2xpYmMgYXJncCB0ZXN0cworKyMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKysKKyt0b3BfYnVpbGRkaXI9Li4vLi4vCisraW5jbHVkZSAuLi9SdWxlcy5tYWsKKystaW5jbHVkZSBNYWtlZmlsZS5pbgorK2luY2x1ZGUgLi4vVGVzdC5tYWsKK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvTWFrZWZpbGUuaW4gYi90ZXN0L2FyZ3AvTWFrZWZpbGUuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kODFiMzU5CistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvTWFrZWZpbGUuaW4KK0BAIC0wLDAgKzEsMTIgQEAKKysjIHVDbGliYyBhcmdwIHRlc3RzCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKworK1RFU1RTIDo9ICQoYWRkcHJlZml4IGFyZ3AtLCBleDEgZXgyIGV4MyBleDQgdGVzdCkgXAorKyAgICAgICAgIGJ1Zy1hcmdwMSB0c3QtYXJncDEgdHN0LWFyZ3AyCisrCisrRVhUUkFfTERGTEFHUyA9IC1sdWFyZ3AKKysKKytPUFRTX2FyZ3AtZXgzID0gQVJHMSBBUkcyCisrT1BUU19hcmdwLWV4NCA9IEFSRzEgc3RyaW5nMSBzdHJpbmcyIHN0cmluZzMKKytPUFRTX2J1Zy1hcmdwMSA9IC0tIC0taGVscAorKworZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4MS5jIGIvdGVzdC9hcmdwL2FyZ3AtZXgxLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43YmI1ZjIyCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDEuYworQEAgLTAsMCArMSwxNSBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjMSAtLSBhIG1pbmltYWwgcHJvZ3JhbSB1c2luZyBhcmdwICovCisrCisrLyogVGhpcyBpcyAocHJvYmFibHkpIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcm9ncmFtIHRoYXQKKysgICB1c2VzIGFyZ3AuICBJdCB3b24ndCBkbyBtdWNoIGV4Y2VwdCBnaXZlIGFuIGVycm9yCisrICAgbWVzc2FnZXMgYW5kIGV4aXQgd2hlbiB0aGVyZSBhcmUgYW55IGFyZ3VtZW50cywgYW5kIHByaW50CisrICAgYSAocmF0aGVyIHBvaW50bGVzcykgbWVzc2FnZXMgZm9yIC0taGVscC4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBhcmdwX3BhcnNlICgwLCBhcmdjLCBhcmd2LCAwLCAwLCAwKTsKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC1leDIuYyBiL3Rlc3QvYXJncC9hcmdwLWV4Mi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzQ5ZmJhYworLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtZXgyLmMKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBBcmdwIGV4YW1wbGUgIzIgLS0gYSBwcmV0dHkgbWluaW1hbCBwcm9ncmFtIHVzaW5nIGFyZ3AgKi8KKysKKysvKiBUaGlzIHByb2dyYW0gZG9lc24ndCB1c2UgYW55IG9wdGlvbnMgb3IgYXJndW1lbnRzLCBidXQgdXNlcworKyAgIGFyZ3AgdG8gYmUgY29tcGxpYW50IHdpdGggdGhlIEdOVSBzdGFuZGFyZCBjb21tYW5kIGxpbmUKKysgICBmb3JtYXQuCisrCisrICAgSW4gYWRkaXRpb24gdG8gbWFraW5nIHN1cmUgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYW5kCisrICAgaW1wbGVtZW50aW5nIGEgLS1oZWxwIG9wdGlvbiwgdGhpcyBleGFtcGxlIHdpbGwgaGF2ZSBhCisrICAgLS12ZXJzaW9uIG9wdGlvbiwgYW5kIHdpbGwgcHV0IHRoZSBnaXZlbiBkb2N1bWVudGF0aW9uIHN0cmluZworKyAgIGFuZCBidWcgYWRkcmVzcyBpbiB0aGUgLS1oZWxwIG91dHB1dCwgYXMgcGVyIEdOVSBzdGFuZGFyZHMuCisrCisrICAgVGhlIHZhcmlhYmxlIEFSR1AgY29udGFpbnMgdGhlIGFyZ3VtZW50IHBhcnNlciBzcGVjaWZpY2F0aW9uOworKyAgIGFkZGluZyBmaWVsZHMgdG8gdGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIHdheSBtb3N0IHBhcmFtZXRlcnMgYXJlCisrICAgcGFzc2VkIHRvIGFyZ3BfcGFyc2UgKHRoZSBmaXJzdCB0aHJlZSBmaWVsZHMgYXJlIHVzdWFsbHkgdXNlZCwKKysgICBidXQgbm90IGluIHRoaXMgc21hbGwgcHJvZ3JhbSkuICBUaGVyZSBhcmUgYWxzbyB0d28gZ2xvYmFsCisrICAgdmFyaWFibGVzIHRoYXQgYXJncCBrbm93cyBhYm91dCBkZWZpbmVkIGhlcmUsCisrICAgQVJHUF9QUk9HUkFNX1ZFUlNJT04gYW5kIEFSR1BfUFJPR1JBTV9CVUdfQUREUkVTUyAodGhleSBhcmUKKysgICBnbG9iYWwgdmFyaWFibGVzIGJlY2F1c2UgdGhleSB3aWxsIGFsbW9zdCBhbHdheXMgYmUgY29uc3RhbnQKKysgICBmb3IgYSBnaXZlbiBwcm9ncmFtLCBldmVuIGlmIGl0IHVzZXMgZGlmZmVyZW50IGFyZ3VtZW50CisrICAgcGFyc2VycyBmb3IgdmFyaW91cyB0YXNrcykuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0KKysgICJhcmdwLWV4MiAxLjAiOworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyA9CisrICAiPGJ1Zy1nbnUtdXRpbHNAQGdudS5vcmc+IjsKKysKKysvKiBQcm9ncmFtIGRvY3VtZW50YXRpb24uICAqLworK3N0YXRpYyBjaGFyIGRvY1tdID0KKysgICJBcmdwIGV4YW1wbGUgIzIgLS0gYSBwcmV0dHkgbWluaW1hbCBwcm9ncmFtIHVzaW5nIGFyZ3AiOworKworKy8qIE91ciBhcmd1bWVudCBwYXJzZXIuICBUaGUgQGNvZGV7b3B0aW9uc30sIEBjb2Rle3BhcnNlcn0sIGFuZAorKyAgIEBjb2Rle2FyZ3NfZG9jfSBmaWVsZHMgYXJlIHplcm8gYmVjYXVzZSB3ZSBoYXZlIG5laXRoZXIgb3B0aW9ucyBvcgorKyAgIGFyZ3VtZW50czsgQGNvZGV7ZG9jfSBhbmQgQGNvZGV7YXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzfSB3aWxsIGJlCisrICAgdXNlZCBpbiB0aGUgb3V0cHV0IGZvciBAc2FtcHstLWhlbHB9LCBhbmQgdGhlIEBzYW1wey0tdmVyc2lvbn0KKysgICBvcHRpb24gd2lsbCBwcmludCBvdXQgQGNvZGV7YXJncF9wcm9ncmFtX3ZlcnNpb259LiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsgMCwgMCwgMCwgZG9jIH07CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgMCk7CisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXgzLmMgYi90ZXN0L2FyZ3AvYXJncC1leDMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI0ZDVjNTAKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4My5jCitAQCAtMCwwICsxLDE1MyBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjMyAtLSBhIHByb2dyYW0gd2l0aCBvcHRpb25zIGFuZCBhcmd1bWVudHMgdXNpbmcgYXJncCAqLworKworKy8qIFRoaXMgcHJvZ3JhbSB1c2VzIHRoZSBzYW1lIGZlYXR1cmVzIGFzIGV4YW1wbGUgMiwgYW5kIHVzZXMgb3B0aW9ucyBhbmQKKysgICBhcmd1bWVudHMuCisrCisrICAgV2Ugbm93IHVzZSB0aGUgZmlyc3QgZm91ciBmaWVsZHMgaW4gQVJHUCwgc28gaGVyZSdzIGEgZGVzY3JpcHRpb24gb2YgdGhlbToKKysgICAgIE9QVElPTlMgIC0tIEEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBzdHJ1Y3QgYXJncF9vcHRpb24gKHNlZSBiZWxvdykKKysgICAgIFBBUlNFUiAgIC0tIEEgZnVuY3Rpb24gdG8gcGFyc2UgYSBzaW5nbGUgb3B0aW9uLCBjYWxsZWQgYnkgYXJncAorKyAgICAgQVJHU19ET0MgLS0gQSBzdHJpbmcgZGVzY3JpYmluZyBob3cgdGhlIG5vbi1vcHRpb24gYXJndW1lbnRzIHNob3VsZCBsb29rCisrICAgICBET0MgICAgICAtLSBBIGRlc2NyaXB0aXZlIHN0cmluZyBhYm91dCB0aGlzIHByb2dyYW07IGlmIGl0IGNvbnRhaW5zIGEKKysgICAgICAgICAgICAgICAgIHZlcnRpY2FsIHRhYiBjaGFyYWN0ZXIgKFx2KSwgdGhlIHBhcnQgYWZ0ZXIgaXQgd2lsbCBiZQorKyAgICAgICAgICAgICAgICAgcHJpbnRlZCAqZm9sbG93aW5nKiB0aGUgb3B0aW9ucworKworKyAgIFRoZSBmdW5jdGlvbiBQQVJTRVIgdGFrZXMgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisrICAgICBLRVkgIC0tIEFuIGludGVnZXIgc3BlY2lmeWluZyB3aGljaCBvcHRpb24gdGhpcyBpcyAodGFrZW4KKysgICAgICAgICAgICAgZnJvbSB0aGUgS0VZIGZpZWxkIGluIGVhY2ggc3RydWN0IGFyZ3Bfb3B0aW9uKSwgb3IKKysgICAgICAgICAgICAgYSBzcGVjaWFsIGtleSBzcGVjaWZ5aW5nIHNvbWV0aGluZyBlbHNlOyB0aGUgb25seQorKyAgICAgICAgICAgICBzcGVjaWFsIGtleXMgd2UgdXNlIGhlcmUgYXJlIEFSR1BfS0VZX0FSRywgbWVhbmluZworKyAgICAgICAgICAgICBhIG5vbi1vcHRpb24gYXJndW1lbnQsIGFuZCBBUkdQX0tFWV9FTkQsIG1lYW5pbmcKKysgICAgICAgICAgICAgdGhhdCBhbGwgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXJzZWQKKysgICAgIEFSRyAgLS0gRm9yIGFuIG9wdGlvbiBLRVksIHRoZSBzdHJpbmcgdmFsdWUgb2YgaXRzCisrICAgICAgICAgICAgIGFyZ3VtZW50LCBvciBOVUxMIGlmIGl0IGhhcyBub25lCisrICAgICBTVEFURS0tIEEgcG9pbnRlciB0byBhIHN0cnVjdCBhcmdwX3N0YXRlLCBjb250YWluaW5nCisrICAgICAgICAgICAgIHZhcmlvdXMgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJzaW5nIHN0YXRlOyB1c2VkIGhlcmUKKysgICAgICAgICAgICAgYXJlIHRoZSBJTlBVVCBmaWVsZCwgd2hpY2ggcmVmbGVjdHMgdGhlIElOUFVUIGFyZ3VtZW50IHRvCisrICAgICAgICAgICAgIGFyZ3BfcGFyc2UsIGFuZCB0aGUgQVJHX05VTSBmaWVsZCwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiB0aGUKKysgICAgICAgICAgICAgY3VycmVudCBub24tb3B0aW9uIGFyZ3VtZW50IGJlaW5nIHBhcnNlZAorKyAgIEl0IHNob3VsZCByZXR1cm4gZWl0aGVyIDAsIG1lYW5pbmcgc3VjY2VzcywgQVJHUF9FUlJfVU5LTk9XTiwgbWVhbmluZyB0aGUKKysgICBnaXZlbiBLRVkgd2Fzbid0IHJlY29nbml6ZWQsIG9yIGFuIGVycm5vIHZhbHVlIGluZGljYXRpbmcgc29tZSBvdGhlcgorKyAgIGVycm9yLgorKworKyAgIE5vdGUgdGhhdCBpbiB0aGlzIGV4YW1wbGUsIG1haW4gdXNlcyBhIHN0cnVjdHVyZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZQorKyAgIHBhcnNlX29wdCBmdW5jdGlvbiwgYSBwb2ludGVyIHRvIHdoaWNoIGl0IHBhc3NlcyBpbiB0aGUgSU5QVVQgYXJndW1lbnQgdG8KKysgICBhcmdwX3BhcnNlLiAgT2YgY291cnNlLCBpdCdzIGFsc28gcG9zc2libGUgdG8gdXNlIGdsb2JhbCB2YXJpYWJsZXMKKysgICBpbnN0ZWFkLCBidXQgdGhpcyBpcyBzb21ld2hhdCBtb3JlIGZsZXhpYmxlLgorKworKyAgIFRoZSBPUFRJT05TIGZpZWxkIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBzdHJ1Y3QgYXJncF9vcHRpb24nczsKKysgICB0aGF0IHN0cnVjdHVyZSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHMgKGlmIHlvdSBhc3NpZ24geW91ciBvcHRpb24KKysgICBzdHJ1Y3R1cmVzIHVzaW5nIGFycmF5IGluaXRpYWxpemF0aW9uIGxpa2UgdGhpcyBleGFtcGxlLCB1bnNwZWNpZmllZAorKyAgIGZpZWxkcyB3aWxsIGJlIGRlZmF1bHRlZCB0byAwLCBhbmQgbmVlZCBub3QgYmUgc3BlY2lmaWVkKToKKysgICAgIE5BTUUgICAtLSBUaGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIGxvbmcgb3B0aW9uIChtYXkgYmUgemVybykKKysgICAgIEtFWSAgICAtLSBUaGUgS0VZIHRvIHBhc3MgdG8gdGhlIFBBUlNFUiBmdW5jdGlvbiB3aGVuIHBhcnNpbmcgdGhpcyBvcHRpb24sCisrICAgICAgICAgICAgICAgKmFuZCogdGhlIG5hbWUgb2YgdGhpcyBvcHRpb24ncyBzaG9ydCBvcHRpb24sIGlmIGl0IGlzIGEKKysgICAgICAgICAgICAgICBwcmludGFibGUgYXNjaWkgY2hhcmFjdGVyCisrICAgICBBUkcgICAgLS0gVGhlIG5hbWUgb2YgdGhpcyBvcHRpb24ncyBhcmd1bWVudCwgaWYgYW55CisrICAgICBGTEFHUyAgLS0gRmxhZ3MgZGVzY3JpYmluZyB0aGlzIG9wdGlvbjsgc29tZSBvZiB0aGVtIGFyZToKKysgICAgICAgICAgICAgICAgIE9QVElPTl9BUkdfT1BUSU9OQUwgLS0gVGhlIGFyZ3VtZW50IHRvIHRoaXMgb3B0aW9uIGlzIG9wdGlvbmFsCisrICAgICAgICAgICAgICAgICBPUFRJT05fQUxJQVMgICAgICAgIC0tIFRoaXMgb3B0aW9uIGlzIGFuIGFsaWFzIGZvciB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgb3B0aW9uCisrICAgICAgICAgICAgICAgICBPUFRJT05fSElEREVOICAgICAgIC0tIERvbid0IHNob3cgdGhpcyBvcHRpb24gaW4gLS1oZWxwIG91dHB1dAorKyAgICAgRE9DICAgIC0tIEEgZG9jdW1lbnRhdGlvbiBzdHJpbmcgZm9yIHRoaXMgb3B0aW9uLCBzaG93biBpbiAtLWhlbHAgb3V0cHV0CisrCisrICAgQW4gb3B0aW9ucyB2ZWN0b3Igc2hvdWxkIGJlIHRlcm1pbmF0ZWQgYnkgYW4gb3B0aW9uIHdpdGggYWxsIGZpZWxkcyB6ZXJvLiAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0KKysgICJhcmdwLWV4MyAxLjAiOworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyA9CisrICAiPGJ1Zy1nbnUtdXRpbHNAQGdudS5vcmc+IjsKKysKKysvKiBQcm9ncmFtIGRvY3VtZW50YXRpb24uICAqLworK3N0YXRpYyBjaGFyIGRvY1tdID0KKysgICJBcmdwIGV4YW1wbGUgIzMgLS0gYSBwcm9ncmFtIHdpdGggb3B0aW9ucyBhbmQgYXJndW1lbnRzIHVzaW5nIGFyZ3AiOworKworKy8qIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50cyB3ZSBhY2NlcHQuICAqLworK3N0YXRpYyBjaGFyIGFyZ3NfZG9jW10gPSAiQVJHMSBBUkcyIjsKKysKKysvKiBUaGUgb3B0aW9ucyB3ZSB1bmRlcnN0YW5kLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9IHsKKysgIHsidmVyYm9zZSIsICAndicsIDAsICAgICAgMCwgICJQcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IiB9LAorKyAgeyJxdWlldCIsICAgICdxJywgMCwgICAgICAwLCAgIkRvbid0IHByb2R1Y2UgYW55IG91dHB1dCIgfSwKKysgIHsic2lsZW50IiwgICAncycsIDAsICAgICAgT1BUSU9OX0FMSUFTIH0sCisrICB7Im91dHB1dCIsICAgJ28nLCAiRklMRSIsIDAsCisrICAgIk91dHB1dCB0byBGSUxFIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3V0cHV0IiB9LAorKyAgeyAwIH0KKyt9OworKworKy8qIFVzZWQgYnkgQGNvZGV7bWFpbn0gdG8gY29tbXVuaWNhdGUgd2l0aCBAY29kZXtwYXJzZV9vcHR9LiAgKi8KKytzdHJ1Y3QgYXJndW1lbnRzCisreworKyAgY2hhciAqYXJnc1syXTsgICAgICAgICAgICAgICAvKiBAdmFye2FyZzF9ICYgQHZhcnthcmcyfSAqLworKyAgaW50IHNpbGVudCwgdmVyYm9zZTsKKysgIGNoYXIgKm91dHB1dF9maWxlOworK307CisrCisrLyogUGFyc2UgYSBzaW5nbGUgb3B0aW9uLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgLyogR2V0IHRoZSBAdmFye2lucHV0fSBhcmd1bWVudCBmcm9tIEBjb2Rle2FyZ3BfcGFyc2V9LCB3aGljaCB3ZQorKyAgICAga25vdyBpcyBhIHBvaW50ZXIgdG8gb3VyIGFyZ3VtZW50cyBzdHJ1Y3R1cmUuICAqLworKyAgc3RydWN0IGFyZ3VtZW50cyAqYXJndW1lbnRzID0gc3RhdGUtPmlucHV0OworKworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAncSc6IGNhc2UgJ3MnOgorKyAgICAgIGFyZ3VtZW50cy0+c2lsZW50ID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAndic6CisrICAgICAgYXJndW1lbnRzLT52ZXJib3NlID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAnbyc6CisrICAgICAgYXJndW1lbnRzLT5vdXRwdXRfZmlsZSA9IGFyZzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBBUkdQX0tFWV9BUkc6CisrICAgICAgaWYgKHN0YXRlLT5hcmdfbnVtID49IDIpCisrICAgICAgIC8qIFRvbyBtYW55IGFyZ3VtZW50cy4gICovCisrICAgICAgIGFyZ3BfdXNhZ2UgKHN0YXRlKTsKKysKKysgICAgICBhcmd1bWVudHMtPmFyZ3Nbc3RhdGUtPmFyZ19udW1dID0gYXJnOworKworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0VORDoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPCAyKQorKyAgICAgICAvKiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4gICovCisrICAgICAgIGFyZ3BfdXNhZ2UgKHN0YXRlKTsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91ciBhcmdwIHBhcnNlci4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPSB7IG9wdGlvbnMsIHBhcnNlX29wdCwgYXJnc19kb2MsIGRvYyB9OworKworK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgc3RydWN0IGFyZ3VtZW50cyBhcmd1bWVudHM7CisrCisrICAvKiBEZWZhdWx0IHZhbHVlcy4gICovCisrICBhcmd1bWVudHMuc2lsZW50ID0gMDsKKysgIGFyZ3VtZW50cy52ZXJib3NlID0gMDsKKysgIGFyZ3VtZW50cy5vdXRwdXRfZmlsZSA9ICItIjsKKysKKysgIC8qIFBhcnNlIG91ciBhcmd1bWVudHM7IGV2ZXJ5IG9wdGlvbiBzZWVuIGJ5IEBjb2Rle3BhcnNlX29wdH0gd2lsbAorKyAgICAgYmUgcmVmbGVjdGVkIGluIEBjb2Rle2FyZ3VtZW50c30uICAqLworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsIDAsICZhcmd1bWVudHMpOworKworKyAgcHJpbnRmICgiQVJHMSA9ICVzXG5BUkcyID0gJXNcbk9VVFBVVF9GSUxFID0gJXNcbiIKKysgICAgICAgICAiVkVSQk9TRSA9ICVzXG5TSUxFTlQgPSAlc1xuIiwKKysgICAgICAgICBhcmd1bWVudHMuYXJnc1swXSwgYXJndW1lbnRzLmFyZ3NbMV0sCisrICAgICAgICAgYXJndW1lbnRzLm91dHB1dF9maWxlLAorKyAgICAgICAgIGFyZ3VtZW50cy52ZXJib3NlID8gInllcyIgOiAibm8iLAorKyAgICAgICAgIGFyZ3VtZW50cy5zaWxlbnQgPyAieWVzIiA6ICJubyIpOworKworKyAgZXhpdCAoMCk7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4NC5jIGIvdGVzdC9hcmdwL2FyZ3AtZXg0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jNzdjN2VmCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDQuYworQEAgLTAsMCArMSwxNjcgQEAKKysvKiBBcmdwIGV4YW1wbGUgIzQgLS0gYSBwcm9ncmFtIHdpdGggc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZCBvcHRpb25zICovCisrCisrLyogVGhpcyBwcm9ncmFtIHVzZXMgdGhlIHNhbWUgZmVhdHVyZXMgYXMgZXhhbXBsZSAzLCBidXQgaGFzIG1vcmUKKysgICBvcHRpb25zLCBhbmQgc29tZXdoYXQgbW9yZSBzdHJ1Y3R1cmUgaW4gdGhlIC1oZWxwIG91dHB1dC4gIEl0CisrICAgYWxzbyBzaG93cyBob3cgeW91IGNhbiBgc3RlYWwnIHRoZSByZW1haW5kZXIgb2YgdGhlIGlucHV0CisrICAgYXJndW1lbnRzIHBhc3QgYSBjZXJ0YWluIHBvaW50LCBmb3IgcHJvZ3JhbXMgdGhhdCBhY2NlcHQgYQorKyAgIGxpc3Qgb2YgaXRlbXMuICBJdCBhbHNvIHNob3dzIHRoZSBzcGVjaWFsIGFyZ3AgS0VZIHZhbHVlCisrICAgQVJHUF9LRVlfTk9fQVJHUywgd2hpY2ggaXMgb25seSBnaXZlbiBpZiBubyBub24tb3B0aW9uCisrICAgYXJndW1lbnRzIHdlcmUgc3VwcGxpZWQgdG8gdGhlIHByb2dyYW0uCisrCisrICAgRm9yIHN0cnVjdHVyaW5nIHRoZSBoZWxwIG91dHB1dCwgdHdvIGZlYXR1cmVzIGFyZSB1c2VkLAorKyAgICpoZWFkZXJzKiB3aGljaCBhcmUgZW50cmllcyBpbiB0aGUgb3B0aW9ucyB2ZWN0b3Igd2l0aCB0aGUKKysgICBmaXJzdCBmb3VyIGZpZWxkcyBiZWluZyB6ZXJvLCBhbmQgYSB0d28gcGFydCBkb2N1bWVudGF0aW9uCisrICAgc3RyaW5nIChpbiB0aGUgdmFyaWFibGUgRE9DKSwgd2hpY2ggYWxsb3dzIGRvY3VtZW50YXRpb24gYm90aAorKyAgIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9wdGlvbnM7IHRoZSB0d28gcGFydHMgb2YgRE9DIGFyZQorKyAgIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsLXRhYiBjaGFyYWN0ZXIgKCdcdicsIG9yICdcMDEzJykuICBCeQorKyAgIGNvbnZlbnRpb24sIHRoZSBkb2N1bWVudGF0aW9uIGJlZm9yZSB0aGUgb3B0aW9ucyBpcyBqdXN0IGEKKysgICBzaG9ydCBzdHJpbmcgc2F5aW5nIHdoYXQgdGhlIHByb2dyYW0gZG9lcywgYW5kIHRoYXQgYWZ0ZXJ3YXJkcworKyAgIGlzIGxvbmdlciwgZGVzY3JpYmluZyB0aGUgYmVoYXZpb3IgaW4gbW9yZSBkZXRhaWwuICBBbGwKKysgICBkb2N1bWVudGF0aW9uIHN0cmluZ3MgYXJlIGF1dG9tYXRpY2FsbHkgZmlsbGVkIGZvciBvdXRwdXQsCisrICAgYWx0aG91Z2ggbmV3bGluZXMgbWF5IGJlIGluY2x1ZGVkIHRvIGZvcmNlIGEgbGluZSBicmVhayBhdCBhCisrICAgcGFydGljdWxhciBwb2ludC4gIEFsbCBkb2N1bWVudGF0aW9uIHN0cmluZ3MgYXJlIGFsc28gcGFzc2VkIHRvCisrICAgdGhlIGBnZXR0ZXh0JyBmdW5jdGlvbiwgZm9yIHBvc3NpYmxlIHRyYW5zbGF0aW9uIGludG8gdGhlCisrICAgY3VycmVudCBsb2NhbGUuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8ZXJyb3IuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0KKysgICJhcmdwLWV4NCAxLjAiOworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcyA9CisrICAiPGJ1Zy1nbnUtdXRpbHNAQHByZXAuYWkubWl0LmVkdT4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjNCAtLSBhIHByb2dyYW0gd2l0aCBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkXAorK29wdGlvbnNcCisrXHZUaGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50YXRpb24gY29tZXMgKmFmdGVyKiB0aGUgb3B0aW9ucztcCisrIG5vdGUgdGhhdCB0aGUgdGV4dCBpcyBhdXRvbWF0aWNhbGx5IGZpbGxlZCwgYnV0IGl0J3MgcG9zc2libGVcCisrIHRvIGZvcmNlIGEgbGluZS1icmVhaywgZS5nLlxuPC0tIGhlcmUuIjsKKysKKysvKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBhcmd1bWVudHMgd2UgYWNjZXB0LiAgKi8KKytzdGF0aWMgY2hhciBhcmdzX2RvY1tdID0gIkFSRzEgW1NUUklORy4uLl0iOworKworKy8qIEtleXMgZm9yIG9wdGlvbnMgd2l0aG91dCBzaG9ydC1vcHRpb25zLiAgKi8KKysjZGVmaW5lIE9QVF9BQk9SVCAgMSAgICAgICAgICAgLyogLS1hYm9ydCAqLworKworKy8qIFRoZSBvcHRpb25zIHdlIHVuZGVyc3RhbmQuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworKyAgeyJ2ZXJib3NlIiwgICd2JywgMCwgICAgICAgMCwgIlByb2R1Y2UgdmVyYm9zZSBvdXRwdXQiIH0sCisrICB7InF1aWV0IiwgICAgJ3EnLCAwLCAgICAgICAwLCAiRG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0IiB9LAorKyAgeyJzaWxlbnQiLCAgICdzJywgMCwgICAgICAgT1BUSU9OX0FMSUFTIH0sCisrICB7Im91dHB1dCIsICAgJ28nLCAiRklMRSIsICAwLAorKyAgICJPdXRwdXQgdG8gRklMRSBpbnN0ZWFkIG9mIHN0YW5kYXJkIG91dHB1dCIgfSwKKysKKysgIHswLDAsMCwwLCAiVGhlIGZvbGxvd2luZyBvcHRpb25zIHNob3VsZCBiZSBncm91cGVkIHRvZ2V0aGVyOiIgfSwKKysgIHsicmVwZWF0IiwgICAncicsICJDT1VOVCIsIE9QVElPTl9BUkdfT1BUSU9OQUwsCisrICAgIlJlcGVhdCB0aGUgb3V0cHV0IENPVU5UIChkZWZhdWx0IDEwKSB0aW1lcyJ9LAorKyAgeyJhYm9ydCIsICAgIE9QVF9BQk9SVCwgMCwgMCwgIkFib3J0IGJlZm9yZSBzaG93aW5nIGFueSBvdXRwdXQifSwKKysKKysgIHsgMCB9CisrfTsKKysKKysvKiBVc2VkIGJ5IEBjb2Rle21haW59IHRvIGNvbW11bmljYXRlIHdpdGggQGNvZGV7cGFyc2Vfb3B0fS4gICovCisrc3RydWN0IGFyZ3VtZW50cworK3sKKysgIGNoYXIgKmFyZzE7ICAgICAgICAgICAgICAgICAgLyogQHZhcnthcmcxfSAqLworKyAgY2hhciAqKnN0cmluZ3M7ICAgICAgICAgICAgICAvKiBbQHZhcntzdHJpbmd9QGRvdHN7fV0gKi8KKysgIGludCBzaWxlbnQsIHZlcmJvc2UsIGFib3J0OyAgLyogQHNhbXB7LXN9LCBAc2FtcHstdn0sIEBzYW1wey0tYWJvcnR9ICovCisrICBjaGFyICpvdXRwdXRfZmlsZTsgICAgICAgICAgIC8qIEB2YXJ7ZmlsZX0gYXJnIHRvIEBzYW1wey0tb3V0cHV0fSAqLworKyAgaW50IHJlcGVhdF9jb3VudDsgICAgICAgICAgICAvKiBAdmFye2NvdW50fSBhcmcgdG8gQHNhbXB7LS1yZXBlYXR9ICovCisrfTsKKysKKysvKiBQYXJzZSBhIHNpbmdsZSBvcHRpb24uICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICAvKiBHZXQgdGhlIEBjb2Rle2lucHV0fSBhcmd1bWVudCBmcm9tIEBjb2Rle2FyZ3BfcGFyc2V9LCB3aGljaCB3ZQorKyAgICAga25vdyBpcyBhIHBvaW50ZXIgdG8gb3VyIGFyZ3VtZW50cyBzdHJ1Y3R1cmUuICAqLworKyAgc3RydWN0IGFyZ3VtZW50cyAqYXJndW1lbnRzID0gc3RhdGUtPmlucHV0OworKworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAncSc6IGNhc2UgJ3MnOgorKyAgICAgIGFyZ3VtZW50cy0+c2lsZW50ID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAndic6CisrICAgICAgYXJndW1lbnRzLT52ZXJib3NlID0gMTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAnbyc6CisrICAgICAgYXJndW1lbnRzLT5vdXRwdXRfZmlsZSA9IGFyZzsKKysgICAgICBicmVhazsKKysgICAgY2FzZSAncic6CisrICAgICAgYXJndW1lbnRzLT5yZXBlYXRfY291bnQgPSBhcmcgPyBhdG9pIChhcmcpIDogMTA7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX0FCT1JUOgorKyAgICAgIGFyZ3VtZW50cy0+YWJvcnQgPSAxOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX05PX0FSR1M6CisrICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICAvKiBIZXJlIHdlIGtub3cgdGhhdCBAY29kZXtzdGF0ZS0+YXJnX251bSA9PSAwfSwgc2luY2Ugd2UKKysgICAgICAgIGZvcmNlIGFyZ3VtZW50IHBhcnNpbmcgdG8gZW5kIGJlZm9yZSBhbnkgbW9yZSBhcmd1bWVudHMgY2FuCisrICAgICAgICBnZXQgaGVyZS4gICovCisrICAgICAgYXJndW1lbnRzLT5hcmcxID0gYXJnOworKworKyAgICAgIC8qIE5vdyB3ZSBjb25zdW1lIGFsbCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLgorKyAgICAgICAgQGNvZGV7c3RhdGUtPm5leHR9IGlzIHRoZSBpbmRleCBpbiBAY29kZXtzdGF0ZS0+YXJndn0gb2YgdGhlCisrICAgICAgICBuZXh0IGFyZ3VtZW50IHRvIGJlIHBhcnNlZCwgd2hpY2ggaXMgdGhlIGZpcnN0IEB2YXJ7c3RyaW5nfQorKyAgICAgICAgd2UncmUgaW50ZXJlc3RlZCBpbiwgc28gd2UgY2FuIGp1c3QgdXNlCisrICAgICAgICBAY29kZXsmc3RhdGUtPmFyZ3Zbc3RhdGUtPm5leHRdfSBhcyB0aGUgdmFsdWUgZm9yCisrICAgICAgICBhcmd1bWVudHMtPnN0cmluZ3MuCisrCisrICAgICAgICBAZW1waHtJbiBhZGRpdGlvbn0sIGJ5IHNldHRpbmcgQGNvZGV7c3RhdGUtPm5leHR9IHRvIHRoZSBlbmQKKysgICAgICAgIG9mIHRoZSBhcmd1bWVudHMsIHdlIGNhbiBmb3JjZSBhcmdwIHRvIHN0b3AgcGFyc2luZyBoZXJlIGFuZAorKyAgICAgICAgcmV0dXJuLiAgKi8KKysgICAgICBhcmd1bWVudHMtPnN0cmluZ3MgPSAmc3RhdGUtPmFyZ3Zbc3RhdGUtPm5leHRdOworKyAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmFyZ2M7CisrCisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKysvKiBPdXIgYXJncCBwYXJzZXIuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geyBvcHRpb25zLCBwYXJzZV9vcHQsIGFyZ3NfZG9jLCBkb2MgfTsKKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGludCBpLCBqOworKyAgc3RydWN0IGFyZ3VtZW50cyBhcmd1bWVudHM7CisrCisrICAvKiBEZWZhdWx0IHZhbHVlcy4gICovCisrICBhcmd1bWVudHMuc2lsZW50ID0gMDsKKysgIGFyZ3VtZW50cy52ZXJib3NlID0gMDsKKysgIGFyZ3VtZW50cy5vdXRwdXRfZmlsZSA9ICItIjsKKysgIGFyZ3VtZW50cy5yZXBlYXRfY291bnQgPSAxOworKyAgYXJndW1lbnRzLmFib3J0ID0gMDsKKysKKysgIC8qIFBhcnNlIG91ciBhcmd1bWVudHM7IGV2ZXJ5IG9wdGlvbiBzZWVuIGJ5IEBjb2Rle3BhcnNlX29wdH0gd2lsbCBiZQorKyAgICAgcmVmbGVjdGVkIGluIEBjb2Rle2FyZ3VtZW50c30uICAqLworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsIDAsICZhcmd1bWVudHMpOworKworKyAgaWYgKGFyZ3VtZW50cy5hYm9ydCkKKysgICAgZXJyb3IgKDEwLCAwLCAiQUJPUlRFRCIpOworKworKyAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5yZXBlYXRfY291bnQ7IGkrKykKKysgICAgeworKyAgICAgIHByaW50ZiAoIkFSRzEgPSAlc1xuIiwgYXJndW1lbnRzLmFyZzEpOworKyAgICAgIHByaW50ZiAoIlNUUklOR1MgPSAiKTsKKysgICAgICBmb3IgKGogPSAwOyBhcmd1bWVudHMuc3RyaW5nc1tqXTsgaisrKQorKyAgICAgICBwcmludGYgKGogPT0gMCA/ICIlcyIgOiAiLCAlcyIsIGFyZ3VtZW50cy5zdHJpbmdzW2pdKTsKKysgICAgICBwcmludGYgKCJcbiIpOworKyAgICAgIHByaW50ZiAoIk9VVFBVVF9GSUxFID0gJXNcblZFUkJPU0UgPSAlc1xuU0lMRU5UID0gJXNcbiIsCisrICAgICAgICAgICAgIGFyZ3VtZW50cy5vdXRwdXRfZmlsZSwKKysgICAgICAgICAgICAgYXJndW1lbnRzLnZlcmJvc2UgPyAieWVzIiA6ICJubyIsCisrICAgICAgICAgICAgIGFyZ3VtZW50cy5zaWxlbnQgPyAieWVzIiA6ICJubyIpOworKyAgICB9CisrCisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtdGVzdC5jIGIvdGVzdC9hcmdwL2FyZ3AtdGVzdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjNkNTczYgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtdGVzdC5jCitAQCAtMCwwICsxLDIwOSBAQAorKy8qIFRlc3QgcHJvZ3JhbSBmb3IgYXJncCBhcmd1bWVudCBwYXJzZXIKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fdmVyc2lvbiA9ICJhcmdwLXRlc3QgMS4wIjsKKysKKytzdHJ1Y3QgYXJncF9vcHRpb24gc3ViX29wdGlvbnNbXSA9CisreworKyAgeyJzdWJvcHQxIiwgICAgICAgJ3MnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDEifSwKKysgIHsic3Vib3B0MiIsICAgICAgICdTJywgICAgIDAsICAwLCAiTmVzdGVkIG9wdGlvbiAyIn0sCisrCisrICB7IDAsIDAsIDAsIDAsICJTb21lIG1vcmUgbmVzdGVkIG9wdGlvbnM6IiwgMTB9LAorKyAgeyJzdWJvcHQzIiwgICAgICAgJ3AnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDMifSwKKysKKysgIHsic3Vib3B0NCIsICAgICAgICdxJywgICAgIDAsICAwLCAiTmVzdGVkIG9wdGlvbiA0IiwgMX0sCisrCisrICB7MH0KKyt9OworKworK3N0YXRpYyBjb25zdCBjaGFyIHN1Yl9hcmdzX2RvY1tdID0gIlNUUklORy4uLlxuLSI7Cisrc3RhdGljIGNvbnN0IGNoYXIgc3ViX2RvY1tdID0gIlx2VGhpcyBpcyB0aGUgZG9jIHN0cmluZyBmcm9tIHRoZSBzdWItYXJnLXBhcnNlci4iOworKworK3N0YXRpYyBlcnJvcl90Cisrc3ViX3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSBBUkdQX0tFWV9OT19BUkdTOgorKyAgICAgIHByaW50ZiAoIk5PIFNVQiBBUkdTXG4iKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBUkdQX0tFWV9BUkc6CisrICAgICAgcHJpbnRmICgiU1VCIEFSRzogJXNcbiIsIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ3MnIDogY2FzZSAnUyc6IGNhc2UgJ3AnOiBjYXNlICdxJzoKKysgICAgICBwcmludGYgKCJTVUIgS0VZICVjXG4iLCBrZXkpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNoYXIgKgorK3N1Yl9oZWxwX2ZpbHRlciAoaW50IGtleSwgY29uc3QgY2hhciAqdGV4dCwgdm9pZCAqaW5wdXQpCisreworKyAgaWYgKGtleSA9PSBBUkdQX0tFWV9IRUxQX0VYVFJBKQorKyAgICByZXR1cm4gc3RyZHVwICgiVGhpcyBpcyBzb21lIGV4dHJhIHRleHQgZnJvbSB0aGUgc3ViIHBhcnNlciAobm90ZSB0aGF0IGl0IFwKKytpcyBwcmVjZWRlZCBieSBhIGJsYW5rIGxpbmUpLiIpOworKyAgZWxzZQorKyAgICByZXR1cm4gKGNoYXIgKil0ZXh0OworK30KKysKKytzdGF0aWMgc3RydWN0IGFyZ3Agc3ViX2FyZ3AgPSB7CisrICBzdWJfb3B0aW9ucywgc3ViX3BhcnNlX29wdCwgc3ViX2FyZ3NfZG9jLCBzdWJfZG9jLCAwLCBzdWJfaGVscF9maWx0ZXIKKyt9OworKworKy8qIFN0cnVjdHVyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHBhcnNpbmcgZnVuY3Rpb25zLiAgKi8KKytzdHJ1Y3QgcGFyYW1zCisreworKyAgdW5zaWduZWQgZm9vbmx5OyAgICAgICAgICAgICAvKiBWYWx1ZSBwYXJzZWQgZm9yIGZvb25seS4gICovCisrICB1bnNpZ25lZCBmb29ubHlfZGVmYXVsdDsgICAgIC8qIERlZmF1bHQgdmFsdWUgZm9yIGl0LiAgKi8KKyt9OworKworKyNkZWZpbmUgT1BUX1BHUlAgMQorKyNkZWZpbmUgT1BUX1NFU1MgMgorKworK3N0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQorK3sKKysgIHsicGlkIiwgICAgICAgJ3AnLCAgICAgIlBJRCIsIDAsICJMaXN0IHRoZSBwcm9jZXNzIFBJRCJ9LAorKyAgeyJwZ3JwIiwgICAgICBPUFRfUEdSUCwiUEdSUCIsMCwgIkxpc3QgcHJvY2Vzc2VzIGluIHRoZSBwcm9jZXNzIGdyb3VwIFBHUlAifSwKKysgIHsibm8tcGFyZW50IiwgJ1AnLCAgICAwLCAgICAgMCwgIkluY2x1ZGUgcHJvY2Vzc2VzIHdpdGhvdXQgcGFyZW50cyJ9LAorKyAgezAsICAgICAgICAgICAneCcsICAgICAwLCAgICAgT1BUSU9OX0FMSUFTfSwKKysgIHsiYWxsLWZpZWxkcyIsJ1EnLCAgICAgMCwgICAgIDAsICJEb24ndCBlbGlkZSB1bnVzYWJsZSBmaWVsZHMgKG5vcm1hbGx5IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlmIHRoZXJlJ3Mgc29tZSByZWFzb24gcHMgY2FuJ3QiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcHJpbnQgYSBmaWVsZCBmb3IgYW55IHByb2Nlc3MsIGl0J3MiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVtb3ZlZCBmcm9tIHRoZSBvdXRwdXQgZW50aXJlbHkpIiB9LAorKyAgeyJyZXZlcnNlIiwgICAncicsICAgIDAsICAgICAgMCwgIlJldmVyc2UgdGhlIG9yZGVyIG9mIGFueSBzb3J0In0sCisrICB7ImdyYXR1aXRvdXNseS1sb25nLXJldmVyc2Utb3B0aW9uIiwgMCwgMCwgT1BUSU9OX0FMSUFTfSwKKysgIHsic2Vzc2lvbiIsICBPUFRfU0VTUywiU0lEIiwgIE9QVElPTl9BUkdfT1BUSU9OQUwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZGQgdGhlIHByb2Nlc3NlcyBmcm9tIHRoZSBzZXNzaW9uIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNJRCAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIHNpZCBvZiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgY3VycmVudCBwcm9jZXNzKSIgfSwKKysKKysgIHswLDAsMCwwLCAiSGVyZSBhcmUgc29tZSBtb3JlIG9wdGlvbnM6In0sCisrICB7ImZvb25seSIsICdmJywgIlpPVCIsIE9QVElPTl9BUkdfT1BUSU9OQUwsICJHbG9yayBhIGZvb25seSJ9LAorKyAgeyJ6YXphIiwgJ3onLCAwLCAwLCAiU25pdCBhIHphciJ9LAorKworKyAgezB9CisrfTsKKysKKytzdGF0aWMgY29uc3QgY2hhciBhcmdzX2RvY1tdID0gIlNUUklORyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgZG9jW10gPSAiVGVzdCBwcm9ncmFtIGZvciBhcmdwLiIKKysgIlx2VGhpcyBkb2Mgc3RyaW5nIGNvbWVzIGFmdGVyIHRoZSBvcHRpb25zLiIKKysgIlxuSGV5ISAgU29tZSBtYW51YWwgZm9ybWF0dGluZyEiCisrICJcblRoZSBjdXJyZW50IHRpbWUgaXM6ICVzIjsKKysKKytzdGF0aWMgdm9pZAorK3BvcHQgKGludCBrZXksIGNoYXIgKmFyZykKKyt7CisrICBjaGFyIGJ1ZlsxMF07CisrICBpZiAoaXNwcmludCAoa2V5KSkKKysgICAgc3ByaW50ZiAoYnVmLCAiJWMiLCBrZXkpOworKyAgZWxzZQorKyAgICBzcHJpbnRmIChidWYsICIlZCIsIGtleSk7CisrICBpZiAoYXJnKQorKyAgICBwcmludGYgKCJLRVkgJXM6ICVzXG4iLCBidWYsIGFyZyk7CisrICBlbHNlCisrICAgIHByaW50ZiAoIktFWSAlc1xuIiwgYnVmKTsKKyt9CisrCisrc3RhdGljIGVycm9yX3QKKytwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN0cnVjdCBwYXJhbXMgKnBhcmFtcyA9IHN0YXRlLT5pbnB1dDsKKysKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgQVJHUF9LRVlfTk9fQVJHUzoKKysgICAgICBwcmludGYgKCJOTyBBUkdTXG4iKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBBUkdQX0tFWV9BUkc6CisrICAgICAgaWYgKHN0YXRlLT5hcmdfbnVtID4gMCkKKysgICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047IC8qIExlYXZlIGl0IGZvciB0aGUgc3ViLWFyZyBwYXJzZXIuICAqLworKyAgICAgIHByaW50ZiAoIkFSRzogJXNcbiIsIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ2YnOgorKyAgICAgIGlmIChhcmcpCisrICAgICAgIHBhcmFtcy0+Zm9vbmx5ID0gYXRvaSAoYXJnKTsKKysgICAgICBlbHNlCisrICAgICAgIHBhcmFtcy0+Zm9vbmx5ID0gcGFyYW1zLT5mb29ubHlfZGVmYXVsdDsKKysgICAgICBwb3B0IChrZXksIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ3AnOiBjYXNlICdQJzogY2FzZSBPUFRfUEdSUDogY2FzZSAneCc6IGNhc2UgJ1EnOgorKyAgICBjYXNlICdyJzogY2FzZSBPUFRfU0VTUzogY2FzZSAneic6CisrICAgICAgcG9wdCAoa2V5LCBhcmcpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNoYXIgKgorK2hlbHBfZmlsdGVyIChpbnQga2V5LCBjb25zdCBjaGFyICp0ZXh0LCB2b2lkICppbnB1dCkKKyt7CisrICBjaGFyICpuZXdfdGV4dDsKKysgIHN0cnVjdCBwYXJhbXMgKnBhcmFtcyA9IGlucHV0OworKworKyAgaWYgKGtleSA9PSBBUkdQX0tFWV9IRUxQX1BPU1RfRE9DICYmIHRleHQpCisrICAgIHsKKysgICAgICB0aW1lX3Qgbm93ID0gdGltZSAoMCk7CisrICAgICAgYXNwcmludGYgKCZuZXdfdGV4dCwgdGV4dCwgY3RpbWUgKCZub3cpKTsKKysgICAgfQorKyAgZWxzZSBpZiAoa2V5ID09ICdmJykKKysgICAgLyogU2hvdyB0aGUgZGVmYXVsdCBmb3IgdGhlIC0tZm9vbmx5IG9wdGlvbi4gICovCisrICAgIGFzcHJpbnRmICgmbmV3X3RleHQsICIlcyAoWk9UIGRlZmF1bHRzIHRvICV4KSIsCisrICAgICAgICAgICAgIHRleHQsIHBhcmFtcy0+Zm9vbmx5X2RlZmF1bHQpOworKyAgZWxzZQorKyAgICBuZXdfdGV4dCA9IChjaGFyICopdGV4dDsKKysKKysgIHJldHVybiBuZXdfdGV4dDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBhcmdwX2NoaWxkIGFyZ3BfY2hpbGRyZW5bXSA9IHsgeyAmc3ViX2FyZ3AgfSwgeyAwIH0gfTsKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsKKysgIG9wdGlvbnMsIHBhcnNlX29wdCwgYXJnc19kb2MsIGRvYywgYXJncF9jaGlsZHJlbiwgaGVscF9maWx0ZXIKKyt9OworKworK2ludAorK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBzdHJ1Y3QgcGFyYW1zIHBhcmFtczsKKysgIHBhcmFtcy5mb29ubHkgPSAwOworKyAgcGFyYW1zLmZvb25seV9kZWZhdWx0ID0gcmFuZG9tICgpOworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsIDAsICZwYXJhbXMpOworKyAgcHJpbnRmICgiQWZ0ZXIgcGFyc2luZzogZm9vbmx5ID0gJXhcbiIsIHBhcmFtcy5mb29ubHkpOworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9idWctYXJncDEuYyBiL3Rlc3QvYXJncC9idWctYXJncDEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEyOGNmNGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9idWctYXJncDEuYworQEAgLTAsMCArMSwyNiBAQAorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiB0ZXN0X29wdGlvbnNbXSA9CisreworKyAgeyBOVUxMLCAnYScsIE5VTEwsIE9QVElPTl9ET0MsIE5VTEwgfSwKKysgIHsgTlVMTCwgJ2InLCBOVUxMLCBPUFRJT05fRE9DLCBOVUxMIH0sCisrICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorK307CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIHRlc3RfYXJncCA9CisreworKyAgdGVzdF9vcHRpb25zCisrfTsKKysKKysKKytzdGF0aWMgaW50CisrZG9fdGVzdCAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICBpbnQgaTsKKysgIGFyZ3BfcGFyc2UgKCZ0ZXN0X2FyZ3AsIGFyZ2MsIGFyZ3YsIDAsICZpLCBOVUxMKTsKKysgIHJldHVybiAwOworK30KKysKKysjZGVmaW5lIFRFU1RfRlVOQ1RJT04gZG9fdGVzdCAoYXJnYywgYXJndikKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC90c3QtYXJncDEuYyBiL3Rlc3QvYXJncC90c3QtYXJncDEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjgyN2RhY2EKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC90c3QtYXJncDEuYworQEAgLTAsMCArMSwxMTggQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXIgYXQgcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrCisrCisrCisrI2RlZmluZSBPUFRfVE9fVEhSRUFEICAgICAgICAgIDMwMAorKyNkZWZpbmUgT1BUX1RPX1BST0NFU1MgICAgICAgICAzMDEKKysjZGVmaW5lIE9QVF9TWU5DX1NJR05BTCAgICAgICAgICAgICAgICAzMDIKKysjZGVmaW5lIE9QVF9TWU5DX0pPSU4gICAgICAgICAgMzAzCisrI2RlZmluZSBPUFRfVE9QTEVWRUwgICAgICAgICAgIDMwNAorKworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gdGVzdF9vcHRpb25zW10gPQorKyAgeworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrVGhpcyBpcyBhIHRlc3QgZm9yIHRocmVhZHMgc28gd2UgYWxsb3cgdGhlciB1c2VyIHRvIHNlbGVjdGlvbiB0aGUgbnVtYmVyIG9mIFwKKyt0aHJlYWRzIHdoaWNoIGFyZSB1c2VkIGF0IGFueSBvbmUgdGltZS4gIEluZGVwZW5kZW50bHkgdGhlIHRvdGFsIG51bWJlciBvZiBcCisrcm91bmRzIGNhbiBiZSBzZWxlY3RlZC4gIFRoaXMgaXMgdGhlIHRvdGFsIG51bWJlciBvZiB0aHJlYWRzIHdoaWNoIHdpbGwgaGF2ZSBcCisrcnVuIHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlczoiIH0sCisrICAgIHsgInRocmVhZHMiLCAndCcsICJOVU1CRVIiLCAwLCAiTnVtYmVyIG9mIHRocmVhZHMgdXNlZCBhdCBvbmNlIiB9LAorKyAgICB7ICJzdGFydHMiLCAncycsICJOVU1CRVIiLCAwLCAiVG90YWwgbnVtYmVyIG9mIHdvcmtpbmcgdGhyZWFkcyIgfSwKKysgICAgeyAidG9wbGV2ZWwiLCBPUFRfVE9QTEVWRUwsICJOVU1CRVIiLCAwLAorKyAgICAgICJOdW1iZXIgb2YgdG9wbGV2ZWwgdGhyZWFkcyB3aGljaCBzdGFydCB0aGUgb3RoZXIgdGhyZWFkczsgdGhpcyBcCisraW1wbGllcyAtLXN5bmMtam9pbiIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiXAorK0VhY2ggdGhyZWFkIGNhbiBkbyBvbmUgb2YgdHdvIHRoaW5nczogc2xlZXAgb3IgZG8gd29yay4gIFRoZSBsYXR0ZXIgaXMgMTAwJSBcCisrQ1BVIGJvdW5kLiAgVGhlIHdvcmsgbG9hZCBpcyB0aGUgcHJvYmFiaWxpdHkgYSB0aHJlYWQgZG9lcyB3b3JrLiAgQWxsIHZhbHVlcyBcCisrZnJvbSB6ZXJvIHRvIDEwMCAoaW5jbHVzaXZlKSBhcmUgdmFsaWQuICBIb3cgb2Z0ZW4gZWFjaCB0aHJlYWQgcmVwZWF0cyB0aGlzIFwKKytjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIHJvdW5kcy4gIFRoZSB3b3JrIGNvc3QgZGV0ZXJtaW5lcyBob3cgbG9uZyBcCisrZWFjaCB3b3JrIHNlc3Npb24gKG5vdCBzbGVlcGluZykgdGFrZXMuICBJZiBpdCBpcyB6ZXJvIGEgdGhyZWFkIHdvdWxkIFwKKytlZmZlY3RpdmVseSBub3RoaW5nLiAgQnkgc2V0dGluZyB0aGUgbnVtYmVyIG9mIHJvdW5kcyB0byB6ZXJvIHRoZSB0aHJlYWQgXAorK2RvZXMgbm8gd29yayBhdCBhbGwgYW5kIHB1cmUgdGhyZWFkIGNyZWF0aW9uIHRpbWVzIGNhbiBiZSBtZWFzdXJlZC4iIH0sCisrICAgIHsgIndvcmtsb2FkIiwgJ3cnLCAiUEVSQ0VOVCIsIDAsICJQZXJjZW50YWdlIG9mIHRpbWUgc3BlbnQgd29ya2luZyIgfSwKKysgICAgeyAid29ya2Nvc3QiLCAnYycsICJOVU1CRVIiLCAwLAorKyAgICAgICJGYWN0b3IgaW4gdGhlIGNvc3Qgb2YgZWFjaCByb3VuZCBvZiB3b3JraW5nIiB9LAorKyAgICB7ICJyb3VuZHMiLCAncicsICJOVU1CRVIiLCAwLCAiTnVtYmVyIG9mIHJvdW5kcyBlYWNoIHRocmVhZCBydW5zIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBtZXRob2RzIGhvdyB0aHJlYWQgY3JlYXRpb24gY2FuIGJlIFwKKytzeW5jaHJvbml6ZWQuICBTeW5jaHJvbml6YXRpb24gaXMgbmVjZXNzYXJ5IHNpbmNlIHRoZSBudW1iZXIgb2YgY29uY3VycmVudGx5IFwKKytydW5uaW5nIHRocmVhZHMgaXMgbGltaXRlZC4iIH0sCisrICAgIHsgInN5bmMtc2lnbmFsIiwgT1BUX1NZTkNfU0lHTkFMLCBOVUxMLCAwLAorKyAgICAgICJTeW5jaHJvbml6ZSB1c2luZyBhIHNpZ25hbCAoZGVmYXVsdCkiIH0sCisrICAgIHsgInN5bmMtam9pbiIsIE9QVF9TWU5DX0pPSU4sIE5VTEwsIDAsICJTeW5jaHJvbml6ZSB1c2luZyBwdGhyZWFkX2pvaW4iIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytPbmUgcGFyYW1ldGVyIGZvciBlYWNoIHRocmVhZHMgZXhlY3V0aW9uIGlzIHRoZSBzaXplIG9mIHRoZSBzdGFjay4gIElmIHRoaXMgXAorK3BhcmFtZXRlciBpcyBub3QgdXNlZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzdGFjayBzaXplIGlzIHVzZWQuICBJZiBtYW55IFwKKyt0aHJlYWRzIGFyZSB1c2VkIHRoZSBzdGFjayBzaXplIHNob3VsZCBiZSBjaG9zZW4gcXVpdGUgc21hbGwuIiB9LAorKyAgICB7ICJzdGFja3NpemUiLCAnUycsICJCWVRFUyIsIDAsICJTaXplIG9mIHRocmVhZHMgc3RhY2siIH0sCisrICAgIHsgImd1YXJkc2l6ZSIsICdnJywgIkJZVEVTIiwgMCwKKysgICAgICAiU2l6ZSBvZiBzdGFjayBndWFyZCBhcmVhOyBtdXN0IGZpdCBpbnRvIHRoZSBzdGFjayIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiU2lnbmFsIG9wdGlvbnM6IiB9LAorKyAgICB7ICJ0by10aHJlYWQiLCBPUFRfVE9fVEhSRUFELCBOVUxMLCAwLCAiU2VuZCBzaWduYWwgdG8gbWFpbiB0aHJlYWQiIH0sCisrICAgIHsgInRvLXByb2Nlc3MiLCBPUFRfVE9fUFJPQ0VTUywgTlVMTCwgMCwKKysgICAgICAiU2VuZCBzaWduYWwgdG8gcHJvY2VzcyAoZGVmYXVsdCkiIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIkFkbWluaXN0cmF0aXZlIG9wdGlvbnM6IiB9LAorKyAgICB7ICJwcm9ncmVzcyIsICdwJywgTlVMTCwgMCwgIlNob3cgc2lnbnMgb2YgcHJvZ3Jlc3MiIH0sCisrICAgIHsgInRpbWluZyIsICdUJywgTlVMTCwgMCwKKysgICAgICAiTWVhc3VyZSB0aW1lIGZyb20gc3RhcnR1cCB0byB0aGUgbGFzdCB0aHJlYWQgZmluaXNoaW5nIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKysvKiBQcm90b3R5cGUgZm9yIG9wdGlvbiBoYW5kbGVyLiAgKi8KKytzdGF0aWMgZXJyb3JfdCBwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKTsKKysKKysvKiBEYXRhIHN0cnVjdHVyZSB0byBjb21tdW5pY2F0ZSB3aXRoIGFyZ3AgZnVuY3Rpb25zLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9CisreworKyAgdGVzdF9vcHRpb25zLCBwYXJzZV9vcHQKKyt9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0ICh2b2lkKQorK3sKKysgIGludCBhcmdjID0gMjsKKysgIGNoYXIgKmFyZ3ZbM10gPSB7IChjaGFyICopICJ0c3QtYXJncDEiLCAoY2hhciAqKSAiLS1oZWxwIiwgTlVMTCB9OworKyAgaW50IHJlbWFpbmluZzsKKysKKysgIC8qIFBhcnNlIGFuZCBwcm9jZXNzIGFyZ3VtZW50cy4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgJnJlbWFpbmluZywgTlVMTCk7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrCisrLyogSGFuZGxlIHByb2dyYW0gYXJndW1lbnRzLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrfQorKworKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0ICgpCisrI2luY2x1ZGUgIi4uL3Rlc3Qtc2tlbGV0b24uYyIKK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMgYi90ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MDVjZGNhCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIENvbnRyaWJ1dGVkIGJ5IEpha3ViIEplbGluZWsgPGpha3ViIGF0IHJlZGhhdC5jb20+LCAyMDA3LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8YXJncC5oPgorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0MVtdID0KKysgIHsKKysgICAgeyAib3B0MSIsICcxJywgIk5VTUJFUiIsIDAsICJPcHRpb24gMSIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQyW10gPQorKyAgeworKyAgICB7ICJvcHQyIiwgJzInLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiAyIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDNbXSA9CisrICB7CisrICAgIHsgIm9wdDMiLCAnMycsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDMiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0NFtdID0KKysgIHsKKysgICAgeyAib3B0NCIsICc0JywgIk5VTUJFUiIsIDAsICJPcHRpb24gNCIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQ1W10gPQorKyAgeworKyAgICB7ICJvcHQ1IiwgJzUnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiA1IiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDUgPQorKyAgeworKyAgICBvcHQ1LCBOVUxMLCAiYXJncyBkb2M1IiwgImRvYzUiLCBOVUxMLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwNCA9CisrICB7CisrICAgIG9wdDQsIE5VTEwsICJhcmdzIGRvYzQiLCAiZG9jNCIsIE5VTEwsIE5VTEwsIE5VTEwKKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AzID0KKysgIHsKKysgICAgb3B0MywgTlVMTCwgImFyZ3MgZG9jMyIsICJkb2MzIiwgTlVMTCwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3BfY2hpbGQgY2hpbGRyZW4yW10gPQorKyAgeworKyAgICB7ICZhcmdwNCwgMCwgImNoaWxkMyIsIDMgfSwKKysgICAgeyAmYXJncDUsIDAsICJjaGlsZDQiLCA0IH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwMiA9CisrICB7CisrICAgIG9wdDIsIE5VTEwsICJhcmdzIGRvYzIiLCAiZG9jMiIsIGNoaWxkcmVuMiwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3BfY2hpbGQgY2hpbGRyZW4xW10gPQorKyAgeworKyAgICB7ICZhcmdwMiwgMCwgImNoaWxkMSIsIDEgfSwKKysgICAgeyAmYXJncDMsIDAsICJjaGlsZDIiLCAyIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwMSA9CisrICB7CisrICAgIG9wdDEsIE5VTEwsICJhcmdzIGRvYzEiLCAiZG9jMSIsIGNoaWxkcmVuMSwgTlVMTCwgTlVMTAorKyAgfTsKKysKKysKKytzdGF0aWMgaW50CisrZG9fdGVzdCAodm9pZCkKKyt7CisrICBhcmdwX2hlbHAgKCZhcmdwMSwgc3Rkb3V0LCBBUkdQX0hFTFBfTE9ORywgKGNoYXIgKikgInRzdC1hcmdwMiIpOworKyAgcmV0dXJuIDA7CisrfQorKworKworKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0ICgpCisrI2luY2x1ZGUgIi4uL3Rlc3Qtc2tlbGV0b24uYyIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjllMTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzMTc4NWM1NDRhYmU4YjIxNWRiYjIyNjRmYjExZWU3MDUxNTE1Nzk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTg6NTkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzddIERvbnQgc3VwcG9ydCBsb2NhbGlzZWQgb3B0aW1pemF0aW9ucyB0aGlzIGhlbHBzIHRvIGhhdmUgYQorIGdsb2JhbCAtTyBsZXZlbAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jIGIvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMKK2luZGV4IDA0MTg3ZjYuLmY1NmY2YzUgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworKysrIGIvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMKK0BAIC0yOCw3ICsyOCw5IEBACisgICogZXJyb3I6IGNhbid0IGZpbmQgYSByZWdpc3RlciBpbiBjbGFzcyDigJhHRU5FUkFMX1JFR1PigJkgd2hpbGUgcmVsb2FkaW5nIOKAmGFzbeKAmQorICAqLworIGludAorKyNpZm5kZWYgIF9fT1BUSU1JWkVfXworIGF0dHJpYnV0ZV9vcHRpbWl6ZSgiT3MiKQorKyNlbmRpZgorIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrICgKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgsCisgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic3RpbWUpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5YjI0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gODgzZGViYzIyZTMwYTk0N2ZlNTg1OGNjMDdlZTVhZWJkM2QwN2EyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDIwOjU5OjU2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNS83XSBBbHdheXMgdXNlIC1PMiBmb3IgY29tcGlsaW5nIGZvcmsuYworCitXaGVuIGNvbXBpbGluZyBpbiB0aHVtYiBtb2RlIGZvciBhcm0gd2l0aCAtT3MgZ2NjIGdpdmVzIHVwIHNpbmNlIGl0IGNhbgorbm90IGZpbmQgcmVnaXN0ZXJzIHRvIHNwaWxsLiBTbyB3ZSB1c2UgLU8yIG9wdGlvbiBmb3IgY29tcGlsaW5nIGZvcmsuYworSXQgbWF5IGJlIGFkZHJlc3NhYmxlIGluIGdjYy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2ggfCA2ICsrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaCBiL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaAoraW5kZXggMGVhMGIyOS4uMDc2N2U5YyAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaAorKysrIGIvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCitAQCAtMjEsMyArMjEsOSBAQCBBU0ZMQUdTLXB0LXZmb3JrLlMgPSAtbWFybQorIENGTEFHUy1PTUlULXB0LXZmb3JrLlMgPSAtbXRodW1iCisgQVNGTEFHUy12Zm9yay5TID0gLW1hcm0KKyBDRkxBR1MtT01JVC12Zm9yay5TID0gLW10aHVtYgorKworKyMgRm9yIGFybSBmb3JrLmMgZG9lcyBub3QgY29tcGlsZSB3aXRoIC1PcyB3aGVuIGNvbXBpbGluZworKyMgaW4gdGh1bWIxIG1vZGUKKytpZmVxICgkKENPTVBJTEVfSU5fVEhVTUJfTU9ERSkseSkKKytDRkxBR1MtZm9yay5jID0gLU8yCisrZW5kaWYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQ4NzM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMzMgQEAKK0Zyb20gYjQwYzEyOWVkMmQ1M2I2OTQ2Mzg4M2E1NDIyZGQ0YTAxMmEzOThmOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogRnJpLCAzIEFwciAyMDE1IDA1OjAyOjI3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNi83XSBsZHNvOiBsaW1pdGVkIHN1cHBvcnQgZm9yICRPUklHSU4gaW4gcnBhdGgKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2xpc3RzLmJ1c3lib3gubmV0L3BpcGVybWFpbC91Y2xpYmMvMjAxMS1NYXJjaC8wNDUwMDMuaHRtbAorCitIb3dldmVyLCB0aGUgYWJvdmUgcGF0Y2ggaW50cm9kdWNlZCAnX2RsX3N0cmNocicgaW4gbGRzby9sZHNvL2RsLWVsZi5jLAorYW5kIGNhdXNlZCB0aGUgZm9sbG93aW5nIHVuZGVmaW5lZCByZWZlcmVuY2luZyBjb21waWxpbmcgZXJyb3I6CisKKyAgfCAuLi4vbGliZGwuYShsaWJkbC5vcyk6IEluIGZ1bmN0aW9uIGBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnknOgorICB8IC4uLi9kbC1lbGYuYzoxNTY6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9kbF9zdHJjaHInCisgIHwgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoaXMgcHJvYmxlbSB3b3VsZCBiZSByZXByb2R1Y2VkIHRocm91Z2ggY29tcGlsaW5nIGdkYiBpbiBzdGF0aWMgbW9kZQordXNpbmcgdWNsaWJjLgorCitTbywgYWRkIHRoZSBkZWZpbml0aW9uIG9mICdfZGxfc3RyY2hyJyB0byBmaXggaXQuIFRoZSAnX2RsX3N0cnN0cicgaXMKK2FkZGVkIGFzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFRpbW8gVGVyw6RzIDx0aW1vLnRlcmFzIGF0IGlraS5maT4KK1NpZ25lZC1vZmYtYnk6IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmggfCAgMiArKworIGxkc28vbGRzby9kbC1lbGYuYyAgICAgICB8IDc5ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGxkc28vbGRzby9sZHNvLmMgICAgICAgICB8IDE4ICsrKysrKysrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xkc28vaW5jbHVkZS9kbC1zdHJpbmcuaCBiL2xkc28vaW5jbHVkZS9kbC1zdHJpbmcuaAoraW5kZXggYWFjYWQxMC4uMTRhZTYxNyAxMDA2NDQKKy0tLSBhL2xkc28vaW5jbHVkZS9kbC1zdHJpbmcuaAorKysrIGIvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCitAQCAtMjA0LDcgKzIwNCw5IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgY2hhciAqIF9kbF9nZXRfbGFzdF9wYXRoX2NvbXBvbmVudChjaGFyICpwYXRoKQorICMgZGVmaW5lIF9kbF9zdHJjYXQgc3RyY2F0CisgIyBkZWZpbmUgX2RsX3N0cmNweSBzdHJjcHkKKyAjIGRlZmluZSBfZGxfc3RyY21wIHN0cmNtcAorKyMgZGVmaW5lIF9kbF9zdHJjaHIgc3RyY2hyCisgIyBkZWZpbmUgX2RsX3N0cnJjaHIgc3RycmNocgorKyMgZGVmaW5lIF9kbF9zdHJzdHIgc3Ryc3RyCisgIyBkZWZpbmUgX2RsX21lbWNweSBtZW1jcHkKKyAjIGRlZmluZSBfZGxfbWVtY21wIG1lbWNtcAorICMgZGVmaW5lIF9kbF9tZW1zZXQgbWVtc2V0CitkaWZmIC0tZ2l0IGEvbGRzby9sZHNvL2RsLWVsZi5jIGIvbGRzby9sZHNvL2RsLWVsZi5jCitpbmRleCA1NjMxOTA1Li42YWI3YWZlIDEwMDY0NAorLS0tIGEvbGRzby9sZHNvL2RsLWVsZi5jCisrKysgYi9sZHNvL2xkc28vZGwtZWxmLmMKK0BAIC0xMzMsNTYgKzEzMyw2MCBAQCBfZGxfcHJvdGVjdF9yZWxybyAoc3RydWN0IGVsZl9yZXNvbHZlICpsKQorICAqIGluIHVDbGliYy9sZHNvL3V0aWwvbGRkLmMgKi8KKyBzdGF0aWMgc3RydWN0IGVsZl9yZXNvbHZlICoKKyBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgcmZsYWdzLCBjb25zdCBjaGFyICpwYXRoX2xpc3QsCistCXN0cnVjdCBkeW5fZWxmICoqcnBudCkKKysJc3RydWN0IGR5bl9lbGYgKipycG50LCBjb25zdCBjaGFyKiBvcmlnaW4pCisgeworLQljaGFyICpwYXRoLCAqcGF0aF9uLCAqbXlsaWJuYW1lOworKwljaGFyICpteWxpYm5hbWU7CisrCWNvbnN0IGNoYXIgKnAsICpwbjsKKyAJc3RydWN0IGVsZl9yZXNvbHZlICp0cG50OworLQlpbnQgZG9uZTsKKysJaW50IHBsZW47CisgCisgCWlmIChwYXRoX2xpc3Q9PU5VTEwpCisgCQlyZXR1cm4gTlVMTDsKKyAKKy0JLyogV2UgbmVlZCBhIHdyaXRhYmxlIGNvcHkgb2YgdGhpcyBzdHJpbmcsIGJ1dCB3ZSBkb24ndAorLQkgKiBuZWVkIHRoaXMgYWxsb2NhdGVkIHBlcm1hbmVudGx5IHNpbmNlIHdlIGRvbid0IHdhbnQKKy0JICogdG8gbGVhayBtZW1vcnksIHNvIHVzZSBhbGxvY2EgdG8gcHV0IHBhdGggb24gdGhlIHN0YWNrICovCistCWRvbmUgPSBfZGxfc3RybGVuKHBhdGhfbGlzdCk7CistCXBhdGggPSBhbGxvY2EoZG9uZSArIDEpOworLQorIAkvKiBhbm90aGVyIGJpdCBvZiBsb2NhbCBzdG9yYWdlICovCisgCW15bGlibmFtZSA9IGFsbG9jYSgyMDUwKTsKKyAKKy0JX2RsX21lbWNweShwYXRoLCBwYXRoX2xpc3QsIGRvbmUrMSk7CistCisgCS8qIFVubGlrZSBsZGQuYywgZG9uJ3QgYm90aGVyIHRvIGVsaW1pbmF0ZSBkb3VibGUgLy9zICovCisgCisgCS8qIFJlcGxhY2UgY29sb25zIHdpdGggemVyb3MgaW4gcGF0aF9saXN0ICovCisgCS8qIDogYXQgdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgcGF0aCBtYXBzIHRvIENXRCAqLworIAkvKiA6OiBhbnl3aGVyZSBtYXBzIENXRCAqLworIAkvKiAiIiBtYXBzIHRvIENXRCAqLworLQlkb25lID0gMDsKKy0JcGF0aF9uID0gcGF0aDsKKy0JZG8geworLQkJaWYgKCpwYXRoID09IDApIHsKKy0JCQkqcGF0aCA9ICc6JzsKKy0JCQlkb25lID0gMTsKKysJZm9yIChwID0gcGF0aF9saXN0OyBwICE9IE5VTEw7IHAgPSBwbikgeworKwkJcG4gPSBfZGxfc3RyY2hyKHAgKyAxLCAnOicpOworKwkJaWYgKHBuICE9IE5VTEwpIHsKKysJCQlwbGVuID0gcG4gLSBwOworKwkJCXBuKys7CisrCQl9IGVsc2UKKysJCQlwbGVuID0gX2RsX3N0cmxlbihwKTsKKysKKysJCWlmIChwbGVuID49IDcgJiYgX2RsX21lbWNtcChwLCAiJE9SSUdJTiIsIDcpID09IDApIHsKKysJCQlpbnQgb2xlbjsKKysJCQlpZiAocmZsYWdzICYmIHBsZW4gIT0gNykKKysJCQkJY29udGludWU7CisrCQkJaWYgKG9yaWdpbiA9PSBOVUxMKQorKwkJCQljb250aW51ZTsKKysJCQlmb3IgKG9sZW4gPSBfZGxfc3RybGVuKG9yaWdpbikgLSAxOyBvbGVuID49IDAgJiYgb3JpZ2luW29sZW5dICE9ICcvJzsgb2xlbi0tKQorKwkJCQk7CisrCQkJaWYgKG9sZW4gPD0gMCkKKysJCQkJY29udGludWU7CisrCQkJX2RsX21lbWNweSgmbXlsaWJuYW1lWzBdLCBvcmlnaW4sIG9sZW4pOworKwkJCV9kbF9tZW1jcHkoJm15bGlibmFtZVtvbGVuXSwgcCArIDcsIHBsZW4gLSA3KTsKKysJCQlteWxpYm5hbWVbb2xlbiArIHBsZW4gLSA3XSA9IDA7CisrCQl9IGVsc2UgaWYgKHBsZW4gIT0gMCkgeworKwkJCV9kbF9tZW1jcHkobXlsaWJuYW1lLCBwLCBwbGVuKTsKKysJCQlteWxpYm5hbWVbcGxlbl0gPSAwOworKwkJfSBlbHNlIHsKKysJCQlfZGxfc3RyY3B5KG15bGlibmFtZSwgIi4iKTsKKyAJCX0KKy0JCWlmICgqcGF0aCA9PSAnOicpIHsKKy0JCQkqcGF0aCA9IDA7CistCQkJaWYgKCpwYXRoX24pCistCQkJCV9kbF9zdHJjcHkobXlsaWJuYW1lLCBwYXRoX24pOworLQkJCWVsc2UKKy0JCQkJX2RsX3N0cmNweShteWxpYm5hbWUsICIuIik7IC8qIEFzc3VtZSBjdXJyZW50IGRpciBpZiBlbXB0eSBwYXRoICovCistCQkJX2RsX3N0cmNhdChteWxpYm5hbWUsICIvIik7CistCQkJX2RsX3N0cmNhdChteWxpYm5hbWUsIG5hbWUpOworKwkJX2RsX3N0cmNhdChteWxpYm5hbWUsICIvIik7CisrCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgbmFtZSk7CisgI2lmZGVmIF9fTERTT19TQUZFX1JVTlBBVEhfXworLQkJCWlmICgqbXlsaWJuYW1lID09ICcvJykKKysJCWlmICgqbXlsaWJuYW1lID09ICcvJykKKyAjZW5kaWYKKy0JCQkJaWYgKCh0cG50ID0gX2RsX2xvYWRfZWxmX3NoYXJlZF9saWJyYXJ5KHJmbGFncywgcnBudCwgbXlsaWJuYW1lKSkgIT0gTlVMTCkKKy0JCQkJCXJldHVybiB0cG50OworLQkJCXBhdGhfbiA9IHBhdGgrMTsKKy0JCX0KKy0JCXBhdGgrKzsKKy0JfSB3aGlsZSAoIWRvbmUpOworKwkJaWYgKCh0cG50ID0gX2RsX2xvYWRfZWxmX3NoYXJlZF9saWJyYXJ5KHJmbGFncywgcnBudCwgbXlsaWJuYW1lKSkgIT0gTlVMTCkKKysJCQlyZXR1cm4gdHBudDsKKysJfQorIAlyZXR1cm4gTlVMTDsKKyB9CisgCitAQCAtMjM0LDcgKzIzOCw4IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCWlmIChwbnQpIHsKKyAJCXBudCArPSAodW5zaWduZWQgbG9uZykgdHBudC0+ZHluYW1pY19pbmZvW0RUX1NUUlRBQl07CisgCQlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBSUEFUSD0nJXMnXG4iLCBwbnQpOworLQkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50LAorKwkJCQkJCSAgICAgIHRwbnQtPmxpYm5hbWUpKSAhPSBOVUxMKQorIAkJCXJldHVybiB0cG50MTsKKyAJfQorICNlbmRpZgorQEAgLTI0Myw3ICsyNDgsNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorIAkvKiBDaGVjayBpbiBMRF97RUxGX31MSUJSQVJZX1BBVEgsIGlmIHNwZWNpZmllZCBhbmQgYWxsb3dlZCAqLworIAlpZiAoX2RsX2xpYnJhcnlfcGF0aCkgeworIAkJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgTERfTElCUkFSWV9QQVRIPSclcydcbiIsIF9kbF9saWJyYXJ5X3BhdGgpOworLQkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9saWJyYXJ5X3BhdGgsIHJwbnQpKSAhPSBOVUxMKQorKwkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9saWJyYXJ5X3BhdGgsIHJwbnQsIE5VTEwpKSAhPSBOVUxMKQorIAkJeworIAkJCXJldHVybiB0cG50MTsKKyAJCX0KK0BAIC0yNTcsNyArMjYyLDcgQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJaWYgKHBudCkgeworIAkJcG50ICs9ICh1bnNpZ25lZCBsb25nKSB0cG50LT5keW5hbWljX2luZm9bRFRfU1RSVEFCXTsKKyAJCV9kbF9pZl9kZWJ1Z19kcHJpbnQoIlx0c2VhcmNoaW5nIFJVTlBBVEg9JyVzJ1xuIiwgcG50KTsKKy0JCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBwbnQsIHJwbnQpKSAhPSBOVUxMKQorKwkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCwgTlVMTCkpICE9IE5VTEwpCisgCQkJcmV0dXJuIHRwbnQxOworIAl9CisgI2VuZGlmCitAQCAtMjkxLDcgKzI5Niw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCS8qIExvb2sgZm9yIGxpYnJhcmllcyB3aGVyZXZlciB0aGUgc2hhcmVkIGxpYnJhcnkgbG9hZGVyCisgCSAqIHdhcyBpbnN0YWxsZWQgKi8KKyAJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgbGRzbyBkaXI9JyVzJ1xuIiwgX2RsX2xkc29wYXRoKTsKKy0JdHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBfZGxfbGRzb3BhdGgsIHJwbnQpOworKwl0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9sZHNvcGF0aCwgcnBudCwgTlVMTCk7CisgCWlmICh0cG50MSAhPSBOVUxMKQorIAkJcmV0dXJuIHRwbnQxOworICNlbmRpZgorQEAgLTMwNCw3ICszMDksNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorICNpZm5kZWYgX19MRFNPX0NBQ0hFX1NVUFBPUlRfXworIAkJCQkJIjoiIFVDTElCQ19SVU5USU1FX1BSRUZJWCAidXNyL1gxMVI2L2xpYiIKKyAjZW5kaWYKKy0JCQkJCSwgcnBudCk7CisrCQkJCQksIHJwbnQsIE5VTEwpOworIAlpZiAodHBudDEgIT0gTlVMTCkKKyAJCXJldHVybiB0cG50MTsKKyAKK2RpZmYgLS1naXQgYS9sZHNvL2xkc28vbGRzby5jIGIvbGRzby9sZHNvL2xkc28uYworaW5kZXggZjM4ZjllMy4uMzgxMjkwOCAxMDA2NDQKKy0tLSBhL2xkc28vbGRzby9sZHNvLmMKKysrKyBiL2xkc28vbGRzby9sZHNvLmMKK0BAIC00MDIsNiArNDAyLDIwIEBAIHN0YXRpYyBwdHJkaWZmX3QgX2RsX2J1aWxkX2xvY2FsX3Njb3BlIChzdHJ1Y3QgZWxmX3Jlc29sdmUgKipsaXN0LAorIAkJCQlwICs9IF9kbF9idWlsZF9sb2NhbF9zY29wZSAocCwgcS0+dHBudCk7CisgCXJldHVybiBwIC0gbGlzdDsKKyB9CisrIAorK3N0YXRpYyB2b2lkIF9kbF9zZXR1cF9wcm9nbmFtZShjb25zdCBjaGFyICphcmd2MCkKKyt7CisrCWNoYXIgaW1hZ2VbUEFUSF9NQVhdOworKwlzc2l6ZV90IHM7CisrCisrCXMgPSBfZGxfcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgaW1hZ2UsIHNpemVvZihpbWFnZSkpOworKwlpZiAocyA+IDAgJiYgaW1hZ2VbMF0gPT0gJy8nKSB7CisrCQlpbWFnZVtzXSA9IDA7CisrCQlfZGxfcHJvZ25hbWUgPSBfZGxfc3RyZHVwKGltYWdlKTsKKysJfSBlbHNlIGlmIChhcmd2MCkgeworKwkJX2RsX3Byb2duYW1lID0gYXJndjA7CisrCX0KKyt9CisgCisgdm9pZCAqX2RsX2dldF9yZWFkeV90b19ydW4oc3RydWN0IGVsZl9yZXNvbHZlICp0cG50LCBETF9MT0FEQUREUl9UWVBFIGxvYWRfYWRkciwKKyAJCQkgIEVsZlcoYXV4dl90KSBhdXh2dFtBVF9FR0lEICsgMV0sIGNoYXIgKiplbnZwLCBjaGFyICoqYXJndgorQEAgLTQ1NCw5ICs0NjgsNyBAQCB2b2lkICpfZGxfZ2V0X3JlYWR5X3RvX3J1bihzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQsIERMX0xPQURBRERSX1RZUEUgbG9hZF9hZGRyLAorIAkgKiBiZWVuIGZpeGVkIHVwIGJ5IG5vdy4gIFN0aWxsIG5vIGZ1bmN0aW9uIGNhbGxzIG91dHNpZGUgb2YgdGhpcworIAkgKiBsaWJyYXJ5LCBzaW5jZSB0aGUgZHluYW1pYyByZXNvbHZlciBpcyBub3QgeWV0IHJlYWR5LgorIAkgKi8KKy0JaWYgKGFyZ3ZbMF0pIHsKKy0JCV9kbF9wcm9nbmFtZSA9IGFyZ3ZbMF07CistCX0KKysJX2RsX3NldHVwX3Byb2duYW1lKGFyZ3ZbMF0pOworIAorICNpZmRlZiBfX0RTQlRfXworIAlfZGxfbGRzb19kc2J0ID0gKHZvaWQgKil0cG50LT5keW5hbWljX2luZm9bRFRfRFNCVF9CQVNFX0lEWF07CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTkzMmMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gOTA1MTZhZjlmNzc2ZjljMjgzNWI0N2ZjNTI3NzVkY2IzMDdhODVhYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIzIEp1biAyMDEyIDE1OjU5OjAxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNy83XSBucHRsL2F0Zm9yazogSGlkZSBwdGhyZWFkX2F0Zm9yayBpbiBzaGFyZWQgdmVyc2lvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4gYi9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KK2luZGV4IDU1ZWViYTIuLjhjYjhmYTkgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KKysrKyBiL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgorQEAgLTE2LDYgKzE2LDcgQEAgbGliYy1zaGFyZWQtcm91dGluZXMteSA9IGZvcndhcmQuYyBsaWJjLWNhbmNlbGxhdGlvbi5jCisgbGliYy1zdGF0aWMtcm91dGluZXMteSA9IGFsbG9jYV9jdXRvZmYuYyBsaWJjLWNhbmNlbGxhdGlvbi5jCisgbGlicHRocmVhZC1zaGFyZWQtb25seS1yb3V0aW5lcy15ID0gdmVyc2lvbi5jCisgbGlicHRocmVhZC1zdGF0aWMtb25seS1yb3V0aW5lcy15ID0gcHRocmVhZF9hdGZvcmsuYworKworIGxpYnB0aHJlYWQtcm91dGluZXMtICs9ICQobm90ZGlyICQod2lsZGNhcmQgJChsaWJwdGhyZWFkX0RJUikvZ2VuXyouYykpICMgZHVtbXkgZ2VuZXJhdGVkIGZpbGVzCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gYWxsb2NhdGVzdGFjay5jICMgZHVtbXkgaW5jbHVkZWQgYnkgcHRocmVhZF9jcmVhdGUuYworIGxpYnB0aHJlYWQtcm91dGluZXMtICs9IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmcuYyBwdGhyZWFkX211dGV4X3NldHByaW9jZWlsaW5nLmMgIyBYWFg6IGRlbGV0ZSB0aG9zZSBvciB1c2UgdGhlbSEKK0BAIC0yMDEsNyArMjAyLDcgQEAgQ0ZMQUdTLW1zZ3NuZC5jID0gLWZleGNlcHRpb25zIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKKyBDRkxBR1MtdGNkcmFpbi5jID0gLWZleGNlcHRpb25zIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKKyAKKyBDRkxBR1MtcHQtc3lzdGVtLmMgPSAtZmV4Y2VwdGlvbnMgLUkkKHRvcF9zcmNkaXIpbGliYy9zdGRsaWIKKy0KKytDRkxBR1MtcHRocmVhZF9hdGZvcmsuYyA9IC1ETk9UX0lOX2xpYmMKKyAjCisgIyBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgdUNsaWJjIHNwZWNpZmljLgorICMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjY0MzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L2xvY2FsZS5jZmcKQEAgLTAsMCArMSwzIEBACitVQ0xJQkNfSEFTX0xPQ0FMRT15CitVQ0xJQkNfSEFTX1hMT0NBTEU9eQorVUNMSUJDX0JVSUxEX01JTklNQUxfTE9DQUxFPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L29ic3RhY2suY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmY5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L29ic3RhY2suY2ZnCkBAIC0wLDAgKzEgQEAKK1VDTElCQ19IQVNfT0JTVEFDSz15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3NTQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLmRpc3RybwpAQCAtMCwwICsxLDE5MyBAQAorIworIyBHZW5lcmFsIExpYnJhcnkgU2V0dGluZ3MKKyMKKyMgSEFWRV9OT19QSUMgaXMgbm90IHNldAorIyBET1BJQyBpcyBub3Qgc2V0CisjIEhBVkVfTk9fU0hBUkVEIGlzIG5vdCBzZXQKKyMgQVJDSF9IQVNfTk9fTERTTyBpcyBub3Qgc2V0CitIQVZFX1NIQVJFRD15CisjIEZPUkNFX1NIQVJFQUJMRV9URVhUX1NFR01FTlRTIGlzIG5vdCBzZXQKK0xEU09fTEREX1NVUFBPUlQ9eQorTERTT19DQUNIRV9TVVBQT1JUPXkKKyMgTERTT19QUkVMT0FEX0ZJTEVfU1VQUE9SVCBpcyBub3Qgc2V0CitMRFNPX0JBU0VfRklMRU5BTUU9ImxkLnNvIgorIyBVQ0xJQkNfU1RBVElDX0xEQ09ORklHIGlzIG5vdCBzZXQKK0xEU09fUlVOUEFUSD15CitVQ0xJQkNfQ1RPUl9EVE9SPXkKK0xEU09fR05VX0hBU0hfU1VQUE9SVD15CisjIEhBU19OT19USFJFQURTIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfVEhSRUFEUz15CitVQ0xJQkNfSEFTX1RIUkVBRFNfTkFUSVZFPXkKK1BUSFJFQURTX0RFQlVHX1NVUFBPUlQ9eQorIyBMSU5VWFRIUkVBRFNfT0xEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfTEZTPXkKKyMgTUFMTE9DIGlzIG5vdCBzZXQKKyMgTUFMTE9DX1NJTVBMRSBpcyBub3Qgc2V0CitNQUxMT0NfU1RBTkRBUkQ9eQorTUFMTE9DX0dMSUJDX0NPTVBBVD15CitVQ0xJQkNfRFlOQU1JQ19BVEVYSVQ9eQorQ09NUEFUX0FURVhJVD15CitVQ0xJQkNfU1VTVjNfTEVHQUNZPXkKK1VDTElCQ19TVVNWM19MRUdBQ1lfTUFDUk9TPXkKK1VDTElCQ19TVVNWNF9MRUdBQ1k9eQorVUNMSUJDX0hBU19TSEFET1c9eQorVUNMSUJDX0hBU19QUk9HUkFNX0lOVk9DQVRJT05fTkFNRT15CitVQ0xJQkNfSEFTX19fUFJPR05BTUU9eQorVU5JWDk4UFRZX09OTFk9eQorQVNTVU1FX0RFVlBUUz15CitVQ0xJQkNfSEFTX0xJQlVUSUw9eQorVUNMSUJDX0hBU19UTV9FWFRFTlNJT05TPXkKK1VDTElCQ19IQVNfVFpfQ0FDSElORz15CitVQ0xJQkNfSEFTX1RaX0ZJTEU9eQorVUNMSUJDX0hBU19UWl9GSUxFX1JFQURfTUFOWT15CitVQ0xJQkNfVFpfRklMRV9QQVRIPSIvZXRjL1RaIgorCisjCisjIEFkdmFuY2VkIExpYnJhcnkgU2V0dGluZ3MKKyMKK1VDTElCQ19QV0RfQlVGRkVSX1NJWkU9MjU2CitVQ0xJQkNfR1JQX0JVRkZFUl9TSVpFPTI1NgorCisjCisjIE5ldHdvcmtpbmcgU3VwcG9ydAorIworVUNMSUJDX0hBU19JUFY2PXkKK1VDTElCQ19IQVNfUlBDPXkKK1VDTElCQ19IQVNfRlVMTF9SUEM9eQorVUNMSUJDX0hBU19SRUVOVFJBTlRfUlBDPXkKK1VDTElCQ19VU0VfTkVUTElOSz15CitVQ0xJQkNfU1VQUE9SVF9BSV9BRERSQ09ORklHPXkKKworVUNMSUJDX0hBU19CU0RfUkVTX0NMT1NFPXkKK1VDTElCQ19IQVNfTElCUkVTT0xWX1NUVUI9eQorVUNMSUJDX0hBU19MSUJOU0xfU1RVQj15CisKKyMKKyMgU3RyaW5nIGFuZCBTdGRpbyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX1NUUklOR19HRU5FUklDX09QVD15CitVQ0xJQkNfSEFTX1NUUklOR19BUkNIX09QVD15CitVQ0xJQkNfSEFTX0NUWVBFX1RBQkxFUz15CitVQ0xJQkNfSEFTX0NUWVBFX1NJR05FRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfVU5TQUZFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQ1RZUEVfQ0hFQ0tFRD15CisjIFVDTElCQ19IQVNfQ1RZUEVfRU5GT1JDRUQgaXMgbm90IHNldAorVUNMSUJDX0hBU19XQ0hBUj15CisjIFVDTElCQ19IQVNfTE9DQUxFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfSEVYQURFQ0lNQUxfRkxPQVRTPXkKK1VDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1BSSU5URj15CitVQ0xJQkNfUFJJTlRGX1NDQU5GX1BPU0lUSU9OQUxfQVJHUz05CitVQ0xJQkNfSEFTX1NDQU5GX0dMSUJDX0FfRkxBRz15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laX05PTkUgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjU2PXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNTEyIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMTAyNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzIwNDggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl80MDk2IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfODE5MiBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSX05PTkU9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVSUxUSU5fQlVGRkVSXzggaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX1NIVVRET1dOX09OX0FCT1JUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fR0VUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX1BVVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19BVVRPX1JXX1RSQU5TSVRJT049eQorIyBVQ0xJQkNfSEFTX0ZPUEVOX0xBUkdFRklMRV9NT0RFIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfRk9QRU5fRVhDTFVTSVZFX01PREU9eQorVUNMSUJDX0hBU19HTElCQ19DVVNUT01fU1RSRUFNUz15CitVQ0xJQkNfSEFTX1BSSU5URl9NX1NQRUM9eQorVUNMSUJDX0hBU19FUlJOT19NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX0VSUkxJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19TSUdOVU1fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19TSUdMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfR05VX0dFVE9QVD15CitVQ0xJQkNfSEFTX0dOVV9HRVRTVUJPUFQ9eQorCisjCisjIEJpZyBhbmQgVGFsbAorIworVUNMSUJDX0hBU19SRUdFWD15CisjIFVDTElCQ19IQVNfUkVHRVhfT0xEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfRk5NQVRDSD15CisjIFVDTElCQ19IQVNfRk5NQVRDSF9PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19XT1JERVhQPXkKK1VDTElCQ19IQVNfTkZUVz15CitVQ0xJQkNfSEFTX0ZUVz15CitVQ0xJQkNfSEFTX0ZUUz15CitVQ0xJQkNfSEFTX0dMT0I9eQorVUNMSUJDX0hBU19HTlVfR0xPQj15CisKKyMKKyMgTGlicmFyeSBJbnN0YWxsYXRpb24gT3B0aW9ucworIworU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYPSIvbGliIgorUlVOVElNRV9QUkVGSVg9Ii8iCitERVZFTF9QUkVGSVg9Ii8vdXNyIgorTVVMVElMSUJfRElSPSJsaWIiCisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBVQ0xJQkNfQlVJTERfUElFIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19BUkM0UkFORE9NIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TU1AgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NTUCBpcyBub3Qgc2V0CitVQ0xJQkNfQlVJTERfUkVMUk89eQorVUNMSUJDX0JVSUxEX05PVz15CitVQ0xJQkNfQlVJTERfTk9FWEVDU1RBQ0s9eQorCisjCisjIHVDbGliYyBkZXZlbG9wbWVudC9kZWJ1Z2dpbmcgb3B0aW9ucworIworQ1JPU1NfQ09NUElMRVJfUFJFRklYPSIiCitVQ0xJQkNfRVhUUkFfQ0ZMQUdTPSIiCisjIERPREVCVUcgaXMgbm90IHNldAorIyBET0RFQlVHX1BUIGlzIG5vdCBzZXQKKyMgRE9TVFJJUCBpcyBub3Qgc2V0CisjIERPQVNTRVJUUyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUcgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHX0VBUkxZIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01BTExPQ19ERUJVR0dJTkcgaXMgbm90IHNldAorVUNMSUJDX0hBU19CQUNLVFJBQ0U9eQorV0FSTklOR1M9Ii1XYWxsIgorIyBFWFRSQV9XQVJOSU5HUyBpcyBub3Qgc2V0CisjIERPTVVMVEkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUpOM19PTkxZIGlzIG5vdCBzZXQKKworIyBtYXRoIHN0dWZmIGZvciBwZXJsCitET19DOTlfTUFUSD15CitVQ0xJQkNfSEFTX0xPTkdfRE9VQkxFX01BVEg9eQorVUNMSUJDX0hBU19GRU5WPXkKK1VDTElCQ19MSU5VWF9NT0RVTEVfMjY9eQorIyBVQ0xJQkNfTElOVVhfTU9EVUxFXzI0IGlzIG5vdCBzZXQKK1VDTElCQ19MSU5VWF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfQURWQU5DRURfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19ORVRXT1JLX1NVUFBPUlQ9eQorVUNMSUJDX0hBU19TT0NLRVQ9eQorVUNMSUJDX0hBU19CU0RfRVJSPXkKK1VDTElCQ19IQVNfU1lTTE9HPXkKK1VDTElCQ19IQVNfQ1JZUFQ9eQorVUNMSUJDX0hBU19DUllQVF9JTVBMPXkKK1VDTElCQ19IQVNfR05VX0VSUk9SPXkKK1VDTElCQ19IQVNfUFRZPXkKK1VDTElCQ19CU0RfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19FUE9MTD15CitVQ0xJQkNfSEFTX0ZMT0FUUz15CisKKyMgVGhlIGJlbG93IG9wdGlvbiBpcyBuZWVkZWQgZm9yIEFSTSBzaW5jZSBkZXBlbmRpbmcKKyMgdXBvbmcgd2hhdCBpbnRydWN0aW9uIHNldCBpcyBjaG9zZW4gdGhpcyB3aWxsIGJlCisjIGVuYWJsZWQuIEFzIHN1Y2ggaXQgaXMgaGFybWxlc3MgYW5kIHdpbGwgYmUgcHVudGVkCisjIGJ5IG1lbnVjb25maWcgZm9yIG90aGVyIGFyY2hlcy4KKworIyBDT01QSUxFX0lOX1RIVU1CX01PREUgaXMgbm90IHNldAorCisjIG5lZWRlZCBieSBzeXN0ZW1kCitVQ0xJQkNfSEFTX1VUTVBYPXkKK1VDTElCQ19MSU5VWF9NT0RVTEVfMjY9eQorVUNMSUJDX0hBU19SRVNPTFZFUl9TVVBQT1JUPXkKKyMgbmVlZGVkIGZvciBMVFAKK1VDTElCQ19TVVNWNF9MRUdBQ1k9eQorVUNMSUJDX0hBU19PQlNPTEVURV9CU0RfU0lHTkFMPXkKK0RPX1hTSV9NQVRIPXkKK1VDTElCQ19TVjRfREVQUkVDQVRFRD15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMubWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTVmNDQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMubWFjaGluZQpAQCAtMCwwICsxLDE0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIFZlcnNpb246IDAuOS4zMi1naXQKKyMgTW9uIEp1bCAxOSAwMTozNDoyOSAyMDEwCisjCisjCisjIFVzaW5nIEVMRiBmaWxlIGZvcm1hdAorIworRk9SQ0VfT1BUSU9OU19GT1JfQVJDSD15CitBUkNIX0hBU19NTVU9eQorQVJDSF9VU0VfTU1VPXkKK0tFUk5FTF9IRUFERVJTPSIvdXNyL2luY2x1ZGUiCitIQVZFX0RPVF9DT05GSUc9eQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzN2NjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1pbml0aWFsX2dpdC5iYgpAQCAtMCwwICsxLDM2IEBACitTRUNUSU9OID0gImJhc2UiCityZXF1aXJlIHVjbGliYy5pbmMKK3JlcXVpcmUgdWNsaWJjLWdpdC5pbmMKKworREVQRU5EUyA9ICJsaW51eC1saWJjLWhlYWRlcnMgbmN1cnNlcy1uYXRpdmUgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgbGliZ2NjLWluaXRpYWwga2Vybi10b29scy1uYXRpdmUiCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwiCisKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitkb19pbnN0YWxsKCkgeworCSMgSW5zdGFsbCBpbml0aWFsIGhlYWRlcnMgaW50byB0aGUgY3Jvc3MgZGlyCisJbWFrZSBQUkVGSVg9JHtEfSBERVZFTF9QUkVGSVg9JHtwcmVmaXh9LyBSVU5USU1FX1BSRUZJWD0vIFwKKwkJaW5zdGFsbF9oZWFkZXJzIGluc3RhbGxfc3RhcnRmaWxlcworCisgICAgICAgICMgYWRkIGxpbmtzIHRvIGxpbnV4LWxpYmMtaGVhZGVyczogZmluYWwgdWNsaWJjIGJ1aWxkIG5lZWQgdGhpcy4KKyAgICAgICAgZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworICAgICAgICAgICAgICAgIGlmIFsgLWQgJHtEfSR7aW5jbHVkZWRpcn0vJHQgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vJHQKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGxuIC1zZiAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9LyR0ICR7RH0ke2luY2x1ZGVkaXJ9LworICAgICAgICBkb25lCisKK30KK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19zaXRlY29uZmlnICgpIHsKKyAgICAgICAgOgorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4MTVmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1wYWNrYWdlLmluYwpAQCAtMCwwICsxLDM3IEBACisjIEVuc3VyZSB0aGUgdWNsaWJjLWRldiBwYWNrYWdlIGlzIHByb2Nlc3NlZCBiZWZvcmUgdWNsaWJjLXN0YXRpY2RldiB0byBhbGxvdworIyAqX25vbnNoYXJlZC5hIGxpYnJhcmllcyB0byBiZSBwYWNrYWdlZCBpbiB0aGUgdWNsaWJjLWRldiBwYWNrYWdlLgorUEFDS0FHRVMgPSAibGRkIHVjbGliYy11dGlscy1kYmcgdWNsaWJjLXV0aWxzIHVjbGliYy1nY29udiB1Y2xpYmMtdGhyZWFkLWRiIHVjbGliYy1hcmdwIHVjbGliYy1iYWNrdHJhY2UgdWNsaWJjLWxpYmNyeXB0IHVjbGliYy1saWJpbnRsIHVjbGliYy1saWJuc2wgdWNsaWJjLWxpYnJlc29sdiB1Y2xpYmMtbGlibSB1Y2xpYmMtbGliZGwgdWNsaWJjLWxpYnV0aWwgdWNsaWJjLWxpYnB0aHJlYWQgdWNsaWJjLWxpYnJ0ICR7UE59LWRiZyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRvYyAke1BOfSIKKworRklMRVNfdWNsaWJjLWxpYmNyeXB0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0LSouc28iCitGSUxFU191Y2xpYmMtbGliaW50bCA9ICIke2Jhc2VfbGliZGlyfS9saWJpbnRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmludGwtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJuc2wgPSAiJHtiYXNlX2xpYmRpcn0vbGlibnNsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zbC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnJlc29sdiA9ICIke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2LSouc28iCitGSUxFU191Y2xpYmMtbGlibSA9ICIke2Jhc2VfbGliZGlyfS9saWJtKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm0tKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJkbCA9ICIke2Jhc2VfbGliZGlyfS9saWJkbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJkbC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnV0aWwgPSAiJHtiYXNlX2xpYmRpcn0vbGlidXRpbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJ1dGlsLSouc28iCitGSUxFU191Y2xpYmMtbGlicHRocmVhZCA9ICIke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJydCA9ICIke2Jhc2VfbGliZGlyfS9saWJydCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJydC0qLnNvIgorCitGSUxFU19sZGQgPSAiJHtiaW5kaXJ9L2xkZCIKK0ZJTEVTX3VjbGliYy11dGlscyA9ICIke2JpbmRpcn0gJHtzYmluZGlyfSIKK0ZJTEVTX3VjbGliYy11dGlscy1kYmcgKz0gIiR7YmluZGlyfS8uZGVidWcgJHtzYmluZGlyfS8uZGVidWciCitGSUxFU191Y2xpYmMtZ2NvbnYgPSAiJHtsaWJkaXJ9L2djb252IgorRklMRVNfdWNsaWJjLXRocmVhZC1kYiA9ICIke2Jhc2VfbGliZGlyfS9saWJ0aHJlYWRfZGIqIgorRklMRVNfdWNsaWJjLWFyZ3AgPSAiJHtiYXNlX2xpYmRpcn0vbGlidWFyZ3AtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJ1YXJncCouc28uKiIKK0ZJTEVTX3VjbGliYy1iYWNrdHJhY2UgPSAiJHtiYXNlX2xpYmRpcn0vbGlidWJhY2t0cmFjZS0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnViYWNrdHJhY2UqLnNvLioiCisKKyMgVGhlIGxhc3QgbGluZSAoZ2RiIGFuZCBsaWIxKSBpcyBmb3IgdWNsaW51eC11Y2xpYmMgYnVpbGRzCit1Y2xpYmNfYmFzZWxpYnMgPSAiJHtiYXNlX2xpYmRpcn0vbGQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGQqLnNvIFwKKyAgICAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9saWJjKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnVDbGliYy0qLnNvIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliYy5nZGIgJHtsaWJkaXJ9L2xpYmMgJHtiYXNlX2xpYmRpcn0vbGliMS5zbyBcCisgICAgICAgICAgICAgICAgICAiCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIlwKKyAgICAgICAgJHtsaWJkaXJ9L2xpYiouc28gXAorICAgICAgICAke2xpYmRpcn0vKl9ub25zaGFyZWQuYSBcCisgICAgICAgICR7bGliZGlyfS9bU10qY3J0WzFpbl0ubyBcCisgICAgICAgICR7bGliZGlyfS9jcnRyZWxvYyoubyBcCisgICAgICAgICR7aW5jbHVkZWRpcn0vKi5oICR7aW5jbHVkZWRpcn0vKi8qLmggXAorICAgICAgICIKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0gJHt1Y2xpYmNfYmFzZWxpYnN9IC9zYmluL2xkY29uZmlnIFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0gJHtkYXRhZGlyfS96b25laW5mbyAke2xpYmRpcn0vbG9jYWxlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzYWEzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy5pbmMKQEAgLTAsMCArMSwxNjggQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBlbWJlZGRlZCBzeXN0ZW1zIgorREVTQ1JJUFRJT04gPSAiVGhlIG5hbWUgdUNsaWJjIGlzIGFuIGFiYnJldmlhdGlvbiBmb3IgJ3RoZSBcCittaWNyb2NvbnRyb2xsZXIgQyBsaWJyYXJ5Jy4gRm9yIHNpbXBsaWNpdHksIHVDbGliYyBpcyBwcm9ub3VuY2VkIFwKKyd5ZXctc2VlLWxpYi1zZWUnLiAgVGhlIGdvYWwgb2YgdUNsaWJjIGlzIHRvIHByb3ZpZGUgYXMgbXVjaCBcCitmdW5jdGlvbmFsaXR5IGFzIHBvc3NpYmxlIGluIGEgc21hbGwgYW1vdW50IG9mIHNwYWNlLCBhbmQgaXQgaXMgaW50ZW5kZWQgXAorcHJpbWFyaWx5IGZvciBlbWJlZGRlZCB1c2UuIEl0IGlzIGFsc28gaGlnaGx5IGNvbmZpZ3VyYWJsZSBpbiBzdXBwb3J0ZWQgXAorZmVhdHVyZXMsIGF0IHRoZSBjb3N0IG9mIEFCSSBkaWZmZXJlbmNlcyBmb3IgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBcCit1Q2xpYmMgaGFzIGJlZW4gZGVzaWduZWQgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvIGJlIGEgQyBsaWJyYXJ5IGZvciBcCitlbWJlZGRlZCBMaW51eC4gIEl0IGlzIE5PVCBjb21wYXRpYmxlIHdpdGggYmluYXJpZXMgbGlua2VkIGFnYWluc3QgZ2xpYmMuIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUIuYm9pbGVycGxhdGU7bWQ1PWFhZGRlYWRjZGRlYjkxODI5N2UwZTRhZmM1MmNlNDZmIFwKK2ZpbGU6Ly8ke1N9L3Rlc3QvcmVnZXgvdGVzdHJlZ2V4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0zMTttZDU9MjM0ZWZiMjI3ZDBhNDA2NzdmODk1ZTRhMWUyNmU5NjAiCitQUiA9ICJyOSIKKworcmVxdWlyZSB1Y2xpYmMtY29uZmlnLmluYworCitQQVRIX3ByZXBlbmQgPSAiJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LiR7U1RBR0lOR0NDfToiCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9IgorCisjIHNpdGVjb25maWcuYmJjbGFzcyBydW5zIGNvbmZpZ3VyZSB3aGljaCBuZWVkcyBhIHdvcmtpbmcgY29tcGlsZXIKKyMgRm9yIHRoZSBjb21waWxlciB0byB3b3JrIHdlIG5lZWQgYSB3b3JraW5nIGxpYmMgeWV0IGxpYmMgaXNuJ3QKKyMgaW4gdGhlIHN5c3Jvb3RzIGRpcmVjdG9yeSBhdCB0aGlzIHBvaW50LiBUaGlzIG1lYW5zIHRoZSBsaWJjLnNvCisjIGxpbmtlciBzY3JpcHQgd29uJ3Qgd29yayBhcyB0aGUgLS1zeXNyb290IHNldHRpbmcgaXNuJ3QgY29ycmVjdC4KKyMgSGVyZSB3ZSBjcmVhdGUgYSBoYWNrZWQgdXAgbGliYyBsaW5rZXIgc2NyaXB0IGFuZCBwYXNzIGluIHRoZSByaWdodAorIyBmbGFncyB0byBsZXQgY29uZmlndXJlIHdvcmsuIFVnbHkuCitFWFRSQVNJVEVDT05GSUcgPSAiQ0ZMQUdTPScke0NGTEFHU30gLVdsLC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9JyIKK3NpdGVjb25maWdfZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZV9wcmVwZW5kID0gIiBcCitta2RpciAtcCAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKK2NwICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9saWJjLnNvICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorc2VkIC1pIC1lICdzIyAke2Jhc2VfbGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0jZycgLWUgJ3MjICR7bGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9I2cnICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYy9saWJjLnNvOyBcCisiCisKKyMgRm9yIG5vdywgd2Ugd2lsbCBza2lwIGJ1aWxkaW5nIG9mIGEgZ2NjIHBhY2thZ2UgaWYgaXQgaXMgYSB1Y2xpYmMgb25lCisjIGFuZCBvdXIgYnVpbGQgaXMgbm90IGEgdWNsaWJjIG9uZSwgYW5kIHdlIHNraXAgYSBnbGliYyBvbmUgaWYgb3VyIGJ1aWxkCisjIGlzIGEgdWNsaWJjIGJ1aWxkLgorQ09NUEFUSUJMRV9IT1NUID0gIi4qLXVjbGliYy4qIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIGRvX3N0YWdlIGJhcmZzIG9uIGEgQ0Mgd2l0aCB3aGl0ZXNwYWNlLCB0aGVyZWZvcmUgcHV0IHRoZSAnSE9TVF9DQ19BUkNIJyBpbgorIyB0aGUgQ0ZMQUdTICh3aGVuIGJ1aWxkaW5nIHRoZSB1dGlscykuCitPRU1BS0VfTk9fQ0MgPSAiJ1NUUklQVE9PTD10cnVlJyAnTEQ9JHtMRH0nIgorRVhUUkFfT0VNQUtFID0gIiR7T0VNQUtFX05PX0NDfSBcCisgICAgICAgICAgICAgICAgJ0hPU1RDQz0ke0JVSUxEX0NDfScgXAorICAgICAgICAgICAgICAgICdIT1NUX0NGTEFHUz0ke0JVSUxEX0NGTEFHU30nIFwKKyAgICAgICAgICAgICAgICAnQ0M9JHtDQ30nIFwKKyAgICAgICAgICAgICAgICBBUkNIPSR7VUNMSUJDX0FSQ0h9IgorCitFWFRSQV9PRU1BS0VfdGFza19kb19wYWNrYWdlID0gIiR7T0VNQUtFX05PX0NDfSIKKworIyBlbmFibGUgdmVyYm9zZSBvdXRwdXQ6CitleHBvcnQgVj0iMiIKKworIyAtTzxuPiAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBlbmRzIHVwIHdpdGggR0NDIElDRSBvbiB0aHVtYiBhcyByZXBvcnRlZAorIyBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQ0ODYwCisjCitDRkxBR1NfYXJtIDo9ICIke0BvZV9maWx0ZXJfb3V0KCctZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsICcke0NGTEFHU30nLCBkKX0iCitVQ0xJQkNfRVhUUkFfQ0ZMQUdTICA6PSAiJHtAb2VfZmlsdGVyX291dCgnKC1JXFMrfC1pXFMrKScsICcke0NGTEFHU30nLCBkKX0iCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisgIHVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTCisgIG9lX3J1bm1ha2UgcHJlZ2VuCit9CisKK2NvbmZpZ21hbmdsZSA9ICcvXktFUk5FTF9IRUFERVJTL2Q7IFwKKyAgICAgICAgICAgICAgICAvXlJVTlRJTUVfUFJFRklYL2Q7IFwKKyAgICAgICAgICAgICAgICAvXkRFVkVMX1BSRUZJWC9kOyBcCisgICAgICAgICAgICAgICAgL15TSEFSRURfTElCX0xPQURFUl9QUkVGSVgvZDsgXAorICAgICAgICAgICAgICAgIC9eVUNMSUJDX0VYVFJBX0NGTEFHUy9kOyBcCisgICAgICAgICAgICAgICAgcywuKlVDTElCQ19IQVNfV0NIQVIuKixVQ0xJQkNfSEFTX1dDSEFSPXksZzsgXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKkNPTVBJTEVfSU5fVEhVTUJfTU9ERS4qLENPTVBJTEVfSU5fVEhVTUJfTU9ERT15LDsiXVtkLmdldFZhcigiQVJNX0lOU1RSVUNUSU9OX1NFVCIsIFRydWUpICE9ICJhcm0iXX0gXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKlVDTElCQ19IQVNfTE9DQUxFLiosVUNMSUJDX0hBU19MT0NBTEU9eSw7Il1bZC5nZXRWYXIoIlVTRV9OTFMiLCBUcnVlKSA9PSAieWVzIl19IFwKKyAgICAgICAgICAgICAgICAke0BbIiIsInMsLipMRFNPX0dOVV9IQVNIX1NVUFBPUlQuKiwjIExEU09fR05VX0hBU0hfU1VQUE9SVCBpcyBub3Qgc2V0LDsiXVtkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKSBpbiBbJ21pcHMnLCAnbWlwc2VsJywgJ21pcHM2NCcsICdtaXBzNjRlbCcsICdhdnIzMiddXX0gXAorICAgICAgICAgICAgICAgIC9eQ1JPU1MvZDsgXAorICAgICAgICAgICAgICAgIC9eVEFSR0VUX0FSQ0g9L2Q7IFwKKyAgICAgICAgICAgICAgICAvXlRBUkdFVF8vcyxeXChbXj1dKlwpLiosIyBcMSBpcyBub3Qgc2V0LGc7IFwKKyAgICAgICAgICAgICAgICBzLF5ET1NUUklQLiosIyBET1NUUklQIGlzIG5vdCBzZXQsZzsgXAorICAgICAgICAgICAgICAgIC9fW0VPXSpBQkkvZDsgXAorICAgICAgICAgICAgICAgIC9IQVNfRlBVL2Q7IFwKKyAgICAgICAgICAgICAgICAke0BbIiIsInMsLipNVUxUSUxJQl9ESVIuKixNVUxUSUxJQl9ESVI9XCIke2Jhc2VsaWJ9XCIsOyJdW2QuZ2V0VmFyKCJiYXNlbGliIiwgVHJ1ZSkgIT0gImxpYiJdfSBcCisgICAgICAgICAgICAgICAnCitPRV9GRUFUVVJFUyA6PSAiJHtAZmVhdHVyZXNfdG9fdWNsaWJjX2NvbmYoZCl9IgorT0VfREVMICAgICAgOj0gIiR7QGZlYXR1cmVzX3RvX3VjbGliY19kZWwoZCl9IgorcHl0aG9uICgpIHsKKyAgICBpZiAiJHtPRV9ERUx9IjoKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLCAiJHtPRV9ERUx9IiArICJcbiIpCisKKyAgICAjIGJ5IGRlZmF1bHQgdWNsaWJjIHVzZXMgbWlwczEgSVNBIGZvciBvMzIgQUJJCisgICAgIyBpZiB3ZSB1c2UgVEFSR0VUX0NDX0FSQ0g9Ii1tYXJjaD1taXBzMzIiIHdlIGVuZCB1cCAKKyAgICAjIHdpdGggY29uZmxpY3RpbmcgbWFyY2ggb3B0aW9ucyB0byBnY2MuIEhlcmUgd2UKKyAgICAjIGFzayBmb3IgTUlQUzMyIElTQSB0byBtYXRjaCB0aGUgY2hvc2VuIGFyY2gKKyAgICB0dW5lID0gZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICBpZiB0dW5lLnN0YXJ0c3dpdGgoJ21pcHMzMicpOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgdHVuZSA9IHJlLnN1YignKGVsKSooLW5mKSonLCAnJywgdHVuZSkKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAiL14jIyMgTUlQUzMyX0NIRUNLJC9hXFxcbkNPTkZJR19NSVBTX0lTQV8lcz15XG5cbiIgJSAodHVuZS51cHBlcigpKSkKKyAgICBpZiAiJHtPRV9GRUFUVVJFU30iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIERJU1RSTyBGRUFUVVJFUyQvYVxcXG4lc1xuXG4iICUKKyAgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbigoZC5leHBhbmQoIiR7T0VfRkVBVFVSRVN9Iikuc3BsaXQoIlxuIikpKSkpCisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAiL14jIyMgQ1JPU1MkL2FcXFxuJXNcbiIgJQorICAgICAgICAgICAgICAgICAgKCJcXG4iLmpvaW4oWyJDUk9TU19DT01QSUxFUl9QUkVGSVg9XCIke1RBUkdFVF9QUkVGSVh9XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlVDTElCQ19FWFRSQV9DRkxBR1M9XCIke1VDTElCQ19FWFRSQV9DRkxBR1N9XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJLRVJORUxfSEVBREVSUz1cIiR7U1RBR0lOR19JTkNESVJ9XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJSVU5USU1FX1BSRUZJWD1cIi9cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRFVkVMX1BSRUZJWD1cIi8ke3ByZWZpeH1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD1cIi9saWJcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICAgICAgKSkKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBUR1QkL2FcXFxuVEFSR0VUX0FSQ0g9XCIlc1wiXFxuVEFSR0VUXyVzPXlcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKCIke1VDTElCQ19BUkNIfSIsICIke1VDTElCQ19BUkNIfSIpKQorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAiL14jIyMgRlBVJC9hXFxcbiVzXG5cbiIgJSAoWyJVQ0xJQkNfSEFTX0ZQVT15IiwiIyBVQ0xJQkNfSEFTX0ZQVSBpcyBub3Qgc2V0Il1bZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JyBdXSkpCisgICAgaWYgIiR7VUNMSUJDX0VORElBTn0iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIEFCSSQvYVxcXG5BUkNIX1dBTlRTXyVzX0VORElBTj15XG5cbiIgJSAoIiR7VUNMSUJDX0VORElBTn0iKSkKKyAgICBpZiAiJHtVQ0xJQkNfQUJJfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgQUJJJC9hXFxcbkNPTkZJR18lcz15XG5cbiIgJSAoIiR7VUNMSUJDX0FCSX0iKSkKK30KKworcHl0aG9uIGRvX3BhdGNoX2FwcGVuZCgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIHN1YnByb2Nlc3MuY2FsbCgibG4gLXNmICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4ICR7U30vaW5jbHVkZS9saW51eCIsIHNoZWxsPVRydWUpCisgICAgc3VicHJvY2Vzcy5jYWxsKCJsbiAtc2YgJHtTVEFHSU5HX0lOQ0RJUn0vYXNtICR7U30vaW5jbHVkZS9hc20iLCBzaGVsbD1UcnVlKQorfQorCitkb19jb25maWd1cmUoKSB7CisgICAgICAgIHJtIC1mICR7U30vLmNvbmZpZworCisgICAgICAgICMgT3BlbkVtYmVkZGVkIHNwbGl0cyB0aGUgdUNsaWJjLmNvbmZpZyBpbiB0d28gcGFydHM6CisgICAgICAgICMgdUNsaWJjLm1hY2hpbmUsIHVDbGliYy5kaXN0cm8KKyAgICAgICAgZWNobyAiIyMjIHVDbGliYy5tYWNoaW5lICMjIyIgPiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBjYXQgJHtXT1JLRElSfS91Q2xpYmMubWFjaGluZSA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgdUNsaWJjLmRpc3RybyAjIyMiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGNhdCAke1dPUktESVJ9L3VDbGliYy5kaXN0cm8gPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIENST1NTIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgVEdUIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgTU1VIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgRlBVIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgQUJJIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgRElTVFJPIEZFQVRVUkVTIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgTUlQUzMyX0NIRUNLIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworCisgICAgICAgICMgTWFuZ2xlIHRoZSByZXN1bHRpbmcgLmNvbmZpZyBkZXBlbmRpbmcgb24gT0UgdmFyaWFibGVzCisgICAgICAgIHNlZCAtaSAtZSAnJHtjb25maWdtYW5nbGV9JyAke1N9L21lcmdlZC5jb25maWcKKwljcCAke1N9L21lcmdlZC5jb25maWcgLmNvbmZpZworICAgICAgICBtZXJnZV9jb25maWcuc2ggLXIgLW4gLW0gLmNvbmZpZyAke0AiICIuam9pbihmaW5kX2NmZ3MoZCkpfQorCWNtbDFfZG9fY29uZmlndXJlCisKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke0R9IGluc3RhbGwKKwlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vaWNvbnYuaAorfQorCisjIGJ1aWxkIGxkZCwgbGRjb25maWcgYW5kIGZyaWVuZHMgYnV0IG9ubHkgZm9yIGZ1bGwgdWNsaWJjCitkb19pbnN0YWxsX2FwcGVuZF9wbi11Y2xpYmMgKCkgeworICAgICAgICBvZV9ydW5tYWtlIFBSRUZJWD0ke0R9ICJTU1BfQUxMX0NGTEFHUz0ke1RBUkdFVF9MSU5LX0hBU0hfU1RZTEV9IiAtQyB1dGlscyB1dGlsc19pbnN0YWxsCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDJiM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgdWNsaWJjLmluYworcmVxdWlyZSB1Y2xpYmMtcGFja2FnZS5pbmMKK3JlcXVpcmUgdWNsaWJjLWdpdC5pbmMKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKKworUFJPVklERVMgKz0gInZpcnR1YWwvbGliYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MiCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgXAorICAgICAgICAgICB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBcCisgICAgICAgICAgIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCBcCisgICAgICAgICAgIGxpbnV4LWxpYmMtaGVhZGVycyBuY3Vyc2VzLW5hdGl2ZSBcCisgICAgICAgICAgIGxpYmdjYy1pbml0aWFsIGtlcm4tdG9vbHMtbmF0aXZlIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAibGludXgtbGliYy1oZWFkZXJzLWRldiIKK1JQUk9WSURFU18ke1BOfS1kZXYgKz0gImxpYmMtZGV2IHZpcnR1YWwtbGliYy1kZXYiCisjIHVjbGliYyBkb2VzIG5vdCByZWFsbHkgaGF2ZSBsaWJzZWdmYXVsdCBidXQgdGhlbiB1c2luZyB0aGUgb25lIGZyb20gZ2xpYmMgaXMgYWxzbyBub3QKKyMgZ29pbmcgdG8gd29yay4gU28gd2UgcHJldGVuZCB0aGF0IHdlIGhhdmUgaXQgdG8gbWFrZSBiaXRiYWtlIG5vdCBwdWxsIG90aGVyIHJlY2lwZXMKKyMgdG8gc2F0aXNmeSB0aGlzIGRlcGVuZGVuY3kgZm9yIHRoZSBpbWFnZXMvdGFza3MKKworUlBST1ZJREVTXyR7UE59ICs9ICJsaWJzZWdmYXVsdCBydGxkKEdOVV9IQVNIKSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b21vdW50LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTc4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b21vdW50LnJ1bGVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBNZWRpYSBhdXRvbW91bnRpbmcKK1NVQlNZU1RFTT09ImJsb2NrIiwgQUNUSU9OPT0iYWRkIiAgICBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9tb3VudC5zaCIKK1NVQlNZU1RFTT09ImJsb2NrIiwgQUNUSU9OPT0icmVtb3ZlIiBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9tb3VudC5zaCIKK1NVQlNZU1RFTT09ImJsb2NrIiwgQUNUSU9OPT0iY2hhbmdlIiwgRU5We0RJU0tfTUVESUFfQ0hBTkdFfT09IjEiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY3NmFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIEhhbmRsZSBuZXR3b3JrIGludGVyZmFjZSBzZXR1cAorU1VCU1lTVEVNPT0ibmV0IiwgQUNUSU9OPT0iYWRkIiBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9uZXR3b3JrLnNoIgorU1VCU1lTVEVNPT0ibmV0IiwgQUNUSU9OPT0icmVtb3ZlIiBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9uZXR3b3JrLnNoIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTFkM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcwpAQCAtMCwwICsxLDIzIEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgVGhlIGZpcnN0IHJ0YyBkZXZpY2UgaXMgc3ltbGlua2VkIHRvIC9kZXYvcnRjCitLRVJORUw9PSJydGMwIiwgU1lNTElOSys9InJ0YyIKKworI1RoZSBmaXJzdCBmcmFtZWJ1ZmZlciBpcyBzeW1saW5rZWQgdG8gL2Rldi9mYgorS0VSTkVMPT0iZmIwIiwgIFNZTUxJTksrPSJmYiIKKworIyBNYWtlIGFsbCBpbnB1dCBkZXZpY2VzIHJlYWQtd3JpdGUgdG8gdGhlIGlucHV0IGdyb3VwCitTVUJTWVNURU09PSJpbnB1dCIsIEdST1VQPSJpbnB1dCIsIE1PREU9IjY2MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuYmxhY2tsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTM0OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuYmxhY2tsaXN0CkBAIC0wLDAgKzEsNSBAQAorL2Rldi9sb29wCisvZGV2L3JhbQorL2Rldi9tdGRibG9jaworL2Rldi9tZAorL2Rldi9kbS0qCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlYTkxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKyMKKyMgQ2FsbGVkIGZyb20gdWRldgorIworIyBBdHRlbXB0IHRvIG1vdW50IGFueSBhZGRlZCBibG9jayBkZXZpY2VzIGFuZCB1bW91bnQgYW55IHJlbW92ZWQgZGV2aWNlcworCisKK01PVU5UPSIvYmluL21vdW50IgorUE1PVU5UPSIvdXNyL2Jpbi9wbW91bnQiCitVTU9VTlQ9Ii9iaW4vdW1vdW50IgorZm9yIGxpbmUgaW4gYGdyZXAgLXYgXiMgL2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdGAKK2RvCisJaWYgWyBgIGV4cHIgbWF0Y2ggIiRERVZOQU1FIiAiJGxpbmUiIGAgLWd0IDAgXTsKKwl0aGVuCisJCWxvZ2dlciAidWRldi9tb3VudC5zaCIgIlskREVWTkFNRV0gaXMgYmxhY2tsaXN0ZWQsIGlnbm9yaW5nIgorCQlleGl0IDAKKwlmaQorZG9uZQorCithdXRvbW91bnQoKSB7CQorCW5hbWU9ImBiYXNlbmFtZSAiJERFVk5BTUUiYCIKKworCSEgdGVzdCAtZCAiL3J1bi9tZWRpYS8kbmFtZSIgJiYgbWtkaXIgLXAgIi9ydW4vbWVkaWEvJG5hbWUiCisJIyBTaWxlbnQgdXRpbC1saW51eCdzIHZlcnNpb24gb2YgbW91bnRpbmcgYXV0bworCWlmIFsgInhgcmVhZGxpbmsgJE1PVU5UYCIgPSAieC9iaW4vbW91bnQudXRpbC1saW51eCIgXSA7CisJdGhlbgorCQlNT1VOVD0iJE1PVU5UIC1vIHNpbGVudCIKKwlmaQorCQorCSMgSWYgZmlsZXN5c3RlbSB0eXBlIGlzIHZmYXQsIGNoYW5nZSB0aGUgb3duZXJzaGlwIGdyb3VwIHRvICdkaXNrJywgYW5kCisJIyBncmFudCBpdCB3aXRoICB3L3IveCBwZXJtaXNzaW9ucy4KKwljYXNlICRJRF9GU19UWVBFIGluCisJdmZhdHxmYXQpCisJCU1PVU5UPSIkTU9VTlQgLW8gdW1hc2s9MDA3LGdpZD1gYXdrIC1GJzonICcvXmRpc2sve3ByaW50ICQzfScgL2V0Yy9ncm91cGAiCisJCTs7CisJIyBUT0RPCisJKikKKwkJOzsKKwllc2FjCisKKwlpZiAhICRNT1VOVCAtdCBhdXRvICRERVZOQU1FICIvcnVuL21lZGlhLyRuYW1lIgorCXRoZW4KKwkJI2xvZ2dlciAibW91bnQuc2gvYXV0b21vdW50IiAiJE1PVU5UIC10IGF1dG8gJERFVk5BTUUgXCIvcnVuL21lZGlhLyRuYW1lXCIgZmFpbGVkISIKKwkJcm1fZGlyICIvcnVuL21lZGlhLyRuYW1lIgorCWVsc2UKKwkJbG9nZ2VyICJtb3VudC5zaC9hdXRvbW91bnQiICJBdXRvLW1vdW50IG9mIFsvcnVuL21lZGlhLyRuYW1lXSBzdWNjZXNzZnVsIgorCQl0b3VjaCAiL3RtcC8uYXV0b21vdW50LSRuYW1lIgorCWZpCit9CisJCitybV9kaXIoKSB7CisJIyBXZSBkbyBub3Qgd2FudCB0byBybSAtciBwb3B1bGF0ZWQgZGlyZWN0b3JpZXMKKwlpZiB0ZXN0ICJgZmluZCAiJDEiIHwgd2MgLWwgfCB0ciAtZCAiICJgIiAtbHQgMiAtYSAtZCAiJDEiCisJdGhlbgorCQkhIHRlc3QgLXogIiQxIiAmJiBybSAtciAiJDEiCisJZWxzZQorCQlsb2dnZXIgIm1vdW50LnNoL2F1dG9tb3VudCIgIk5vdCByZW1vdmluZyBub24tZW1wdHkgZGlyZWN0b3J5IFskMV0iCisJZmkKK30KKworIyBObyBJRF9GU19UWVBFIGZvciBjZHJvbSBkZXZpY2UsIHlldCBpdCBzaG91bGQgYmUgbW91bnRlZAorbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorWyAtZSAvc3lzL2Jsb2NrLyRuYW1lL2RldmljZS9tZWRpYSBdICYmIG1lZGlhX3R5cGU9YGNhdCAvc3lzL2Jsb2NrLyRuYW1lL2RldmljZS9tZWRpYWAKKworaWYgWyAiJEFDVElPTiIgPSAiYWRkIiBdICYmIFsgLW4gIiRERVZOQU1FIiBdICYmIFsgLW4gIiRJRF9GU19UWVBFIiAtbyAiJG1lZGlhX3R5cGUiID0gImNkcm9tIiBdOyB0aGVuCisJaWYgWyAteCAiJFBNT1VOVCIgXTsgdGhlbgorCQkkUE1PVU5UICRERVZOQU1FIDI+IC9kZXYvbnVsbAorCWVsaWYgWyAteCAkTU9VTlQgXTsgdGhlbgorICAgIAkJJE1PVU5UICRERVZOQU1FIDI+IC9kZXYvbnVsbAorCWZpCisJCisJIyBJZiB0aGUgZGV2aWNlIGlzbid0IG1vdW50ZWQgYXQgdGhpcyBwb2ludCwgaXQgaXNuJ3QKKwkjIGNvbmZpZ3VyZWQgaW4gZnN0YWIgKG5vdGUgdGhlIHJvb3QgZmlsZXN5c3RlbSBjYW4gc2hvdyB1cCBhcworCSMgL2Rldi9yb290IGluIC9wcm9jL21vdW50cywgc28gY2hlY2sgdGhlIGRldmljZSBudW1iZXIgdG9vKQorCWlmIGV4cHIgJE1BSk9SICIqIiAyNTYgKyAkTUlOT1IgIT0gYHN0YXQgLWMgJWQgL2A7IHRoZW4KKwkJZ3JlcCAtcSAiXiRERVZOQU1FICIgL3Byb2MvbW91bnRzIHx8IGF1dG9tb3VudAorCWZpCitmaQorCisKK2lmIFsgIiRBQ1RJT04iID0gInJlbW92ZSIgXSB8fCBbICIkQUNUSU9OIiA9ICJjaGFuZ2UiIF0gJiYgWyAteCAiJFVNT1VOVCIgXSAmJiBbIC1uICIkREVWTkFNRSIgXTsgdGhlbgorCWZvciBtbnQgaW4gYGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICIkREVWTkFNRSIgfCBjdXQgLWYgMiAtZCAiICIgYAorCWRvCisJCSRVTU9VTlQgJG1udAorCWRvbmUKKwkKKwkjIFJlbW92ZSBlbXB0eSBkaXJlY3RvcmllcyBmcm9tIGF1dG8tbW91bnRlcgorCW5hbWU9ImBiYXNlbmFtZSAiJERFVk5BTUUiYCIKKwl0ZXN0IC1lICIvdG1wLy5hdXRvbW91bnQtJG5hbWUiICYmIHJtX2RpciAiL3J1bi9tZWRpYS8kbmFtZSIKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTkyNzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKworIyBXZSBnZXQgdHdvICJhZGQiIGV2ZW50cyBmb3IgaG9zdGFwIGNhcmRzIGR1ZSB0byB3aWZpMAorZWNobyAiJElOVEVSRkFDRSIgfCBncmVwIC1xIHdpZmkgJiYgZXhpdCAwCisKKyMgdWRldmQgZG9lcyBjbGVhcmVudigpLiBFeHBvcnQgc2hlbGwgUEFUSCB0byBjaGlsZHJlbi4KK2V4cG9ydCBQQVRICisKKyMgQ2hlY2sgaWYgL2V0Yy9pbml0LmQvbmV0d29yayBoYXMgYmVlbiBydW4geWV0IHRvIHNlZSBpZiB3ZSBhcmUgCisjIGNhbGxlZCBieSBzdGFydGluZyAvZXRjL3JjUy5kL1MwM3VkZXYgYW5kIG5vdCBieSBob3RwbHVnZ2luZyBhIGRldmljZQorIworIyBBdCB0aGlzIHN0YWdlLCBuZXR3b3JrIGludGVyZmFjZXMgc2hvdWxkIG5vdCBiZSBicm91Z2h0IHVwCisjIGF1dG9tYXRpY2FsbHkgYmVjYXVzZToKKyMgYSkJL2V0Yy9pbml0LmQvbmV0d29yayBoYXMgbm90IGJlZW4gcnVuIHlldCAoc2VjdXJpdHkgaXNzdWUpCisjIGIpIAkvdmFyIGhhcyBub3QgYmVlbiBwb3B1bGF0ZWQgeWV0IHNvIC9ldGMvcmVzb2x2LGNvbmYgcG9pbnRzIHRvIAorIwlvYmxpdmlvbiwgbWFraW5nIHRoZSBuZXR3b3JrIHVudXNhYmxlCisjCisKK3Nwb29mcD0iYGdyZXAgXnNwb29mcHJvdGVjdCAvZXRjL25ldHdvcmsvb3B0aW9uc2AiCitpZiB0ZXN0IC16ICIkc3Bvb2ZwIgordGhlbgorCSMgVGhpcyBpcyB0aGUgZGVmYXVsdCBmcm9tIC9ldGMvaW5pdC5kL25ldHdvcmsKKwlzcG9vZnBfdmFsPXllcworZWxzZQorCXNwb29mcF92YWw9JHtzcG9vZnAjc3Bvb2Zwcm90ZWN0PX0KK2ZpCisKK3Rlc3QgIiRzcG9vZnBfdmFsIiA9IHllcyAmJiBzcG9vZnBfdmFsPTEgfHwgc3Bvb2ZwX3ZhbD0wCisKKyMgSSB0aGluayBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0ICJsbyIgd2lsbCBhbHdheXMgYmUgdGhlcmUgOykKK2lmIHRlc3QgImBjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvbG8vcnBfZmlsdGVyYCIgIT0gIiRzcG9vZnBfdmFsIiAtYSAtbiAiJHNwb29mcF92YWwiCit0aGVuCisJZWNobyAiJElOVEVSRkFDRSIgPj4gL2Rldi91ZGV2X25ldHdvcmtfcXVldWUJCisJZXhpdCAwCitmaQorCisjCisjIENvZGUgdGFrZW4gZnJvbSBwY21jaWEtY3M6L2V0Yy9wY21jaWEvbmV0d29yaworIworCisjIGlmIHRoaXMgaW50ZXJmYWNlIGhhcyBhbiBlbnRyeSBpbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcywgbGV0IGlmdXBkb3duCisjIGhhbmRsZSBpdAoraWYgZ3JlcCAtcSAiaWZhY2UgXCskSU5URVJGQUNFIiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlczsgdGhlbgorICBjYXNlICRBQ1RJT04gaW4KKyAgICBhZGQpCisgICAgCWlmY29uZmlnIHwgZ3JlcCAtcSAiXiRJTlRFUkZBQ0UiIHx8IGlmdXAgJElOVEVSRkFDRQorICAgIAk7OworICAgIHJlbW92ZSkKKyAgICAJaWZkb3duICRJTlRFUkZBQ0UKKyAgICAJOzsKKyAgZXNhYworICAKKyAgZXhpdCAwCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZl8xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZl8xLjEuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJFeHRyYSBtYWNoaW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMiCitERVNDUklQVElPTiA9ICJFeHRyYSBtYWNoaW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHVkZXYsIHNwZWNpZmljYWxseSBibGFja2xpc3QgaW5mb3JtYXRpb24uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICIgXAorICAgICAgIGZpbGU6Ly9hdXRvbW91bnQucnVsZXMgXAorICAgICAgIGZpbGU6Ly9tb3VudC5zaCBcCisgICAgICAgZmlsZTovL21vdW50LmJsYWNrbGlzdCBcCisgICAgICAgZmlsZTovL2F1dG9uZXQucnVsZXMgXAorICAgICAgIGZpbGU6Ly9uZXR3b3JrLnNoIFwKKyAgICAgICBmaWxlOi8vbG9jYWxleHRyYS5ydWxlcyBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kCisKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdXRvbW91bnQucnVsZXMgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9hdXRvbW91bnQucnVsZXMKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdXRvbmV0LnJ1bGVzICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9hdXRvbmV0LnJ1bGVzCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbG9jYWxleHRyYS5ydWxlcyAgICAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvbG9jYWxleHRyYS5ydWxlcworCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbW91bnQuYmxhY2tsaXN0ICAgICAke0R9JHtzeXNjb25mZGlyfS91ZGV2LworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3NjcmlwdHMvCisKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tb3VudC5zaCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3NjcmlwdHMvbW91bnQuc2gKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZXR3b3JrLnNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cworfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3VkZXYiCitSREVQRU5EU18ke1BOfSA9ICJ1ZGV2IgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vdWRldi9tb3VudC5ibGFja2xpc3QiCisKKyMgdG8gcmVwbGFjZSB1ZGV2LWV4dHJhLXJ1bGVzIGZyb20gbWV0YS1vZQorUlBST1ZJREVTXyR7UE59ID0gInVkZXYtZXh0cmEtcnVsZXMiCitSUkVQTEFDRVNfJHtQTn0gPSAidWRldi1leHRyYS1ydWxlcyIKK1JDT05GTElDVFNfJHtQTn0gPSAidWRldi1leHRyYS1ydWxlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBkYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYuaW5jCkBAIC0wLDAgKzEsMTExIEBACitTVU1NQVJZID0gIi9kZXYvIGFuZCBob3RwbHVnIG1hbmFnZW1lbnQgZGFlbW9uIgorREVTQ1JJUFRJT04gPSAidWRldiBpcyBhIGRhZW1vbiB3aGljaCBkeW5hbWljYWxseSBjcmVhdGVzIGFuZCByZW1vdmVzIGRldmljZSBub2RlcyBmcm9tIFwKKy9kZXYvLCBoYW5kbGVzIGhvdHBsdWcgZXZlbnRzIGFuZCBsb2FkcyBkcml2ZXJzIGF0IGJvb3QgdGltZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYvdWRldi5odG1sIgorTElDRU5TRSA9ICJHUEx2Mi4wKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIuMCsiCitMSUNFTlNFX2xpYnVkZXYgPSAiTEdQTHYyLjErIgorTElDRU5TRV9saWJndWRldiA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvQ09QWUlORzttZDU9MTdjNGU1ZmI0OTVlNjcwN2FjOTJhMzg2NDkyNmY5NzkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2d1ZGV2L0NPUFlJTkc7bWQ1PWZiNDk0NDg1YTdkMDUwNTMwOGNiNjhlNDk5N2NjMjY2IgorCitMREZMQUdTICs9ICItbHJ0IgorCitERVBFTkRTID0gImdsaWItMi4wIGxpYnVzYiB1c2J1dGlscyBwY2l1dGlscyBnbGliLTIuMC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGxpYnhzbHQtbmF0aXZlIHV0aWwtbGludXgiCitSUFJPVklERVNfJHtQTn0gPSAiaG90cGx1ZyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4aW5nLWtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2gtc2hlbGwtc2NyaXB0LXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL3VkZXYucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vZGV2ZnMtdWRldi5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9saW5rcy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3Blcm1pc3Npb25zLnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2xvY2FsLnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL3VkZXYtY2FjaGUgXAorICAgICAgICAgICBmaWxlOi8vdWRldi1jYWNoZS5kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1pbnN0YWxsLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9ydWxlLXN5bnRheC1yZWdleC1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHB0ZXN0CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBwZXJsIHB5dGhvbiIKKworbGliZXhlY2RpciA9ICIke2Jhc2VfbGliZGlyfSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1wY2ktaWRzLXBhdGg9JHtkYXRhZGlyfS9wY2kuaWRzIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX191c3Jfc2hhcmVfcGNpX2lkcz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fdXNyX3NoYXJlX2h3ZGF0YV9wY2lfaWRzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX191c3Jfc2hhcmVfbWlzY19wY2lfaWRzPXllcyBcCisgICAgICAgICAgICAgICAgLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSBcCisgICAgICAgICAgICAgICAgLS1saWJleGVjZGlyPSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yb290bGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdHByZWZpeD0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpciBcCisgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VTID0rICJ1ZGV2LWNhY2hlIgorUEFDS0FHRVMgPSsgImxpYnVkZXYiCitQQUNLQUdFUyA9KyAibGliZ3VkZXYiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAidWRldiB1ZGV2LWNhY2hlIgorSU5JVFNDUklQVF9OQU1FX3VkZXYgPSAidWRldiIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYgPSAic3RhcnQgMDQgUyAuIgorSU5JVFNDUklQVF9OQU1FX3VkZXYtY2FjaGUgPSAidWRldi1jYWNoZSIKK0lOSVRTQ1JJUFRfUEFSQU1TX3VkZXYtY2FjaGUgPSAic3RhcnQgMzYgUyAuIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJleGVjZGlyfSAke2xpYmRpcn0vQ29uc29sZUtpdCAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYgJHtiaW5kaXJ9L3VkZXZhZG0iCitSUkVDT01NRU5EU18ke1BOfSArPSAidWRldi1jYWNoZSIKKworIyB1ZGV2LXV0aWxzIGhhcyBiZWVuIHJlbW92ZWQgYXMgYSBwYWNrYWdlLiAgTm90ZSB0aGF0IHVkZXYgY29uZmxpY3RzIHdpdGggdWRldi11dGlscyBzbyB0aGF0CisjIHVkZXYtdXRpbHMgaXMgcmVtb3ZlZCBmcm9tIHN5c3RlbXMgb24gdXBncmFkZS4KK1JDT05GTElDVFNfJHtQTn0gKz0gInVkZXYtdXRpbHMiCitSUkVQTEFDRVNfJHtQTn0gKz0gInVkZXYtdXRpbHMiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS8uZGVidWciCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi8uZGVidWcvKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnL3VkZXYucGMgXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGlidWRldi5oICR7bGliZGlyfS9saWJ1ZGV2LnNvICR7bGliZGlyfS9saWJ1ZGV2LmxhIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlidWRldi5hICR7bGliZGlyfS9wa2djb25maWcvbGlidWRldi5wYyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9ndWRldiogJHtsaWJkaXJ9L2xpYmd1ZGV2Ki5zbyAke2xpYmRpcn0vbGliZ3VkZXYqLmxhIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliZ3VkZXYqLmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9ndWRldioucGMiCitGSUxFU19saWJ1ZGV2ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnVkZXYuc28uKiIKK0ZJTEVTX2xpYmd1ZGV2ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmd1ZGV2Ki5zby4qICR7bGliZGlyfS9saWJndWRldiouc28uKiIKK0ZJTEVTX3VkZXYtY2FjaGUgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdWRldi1jYWNoZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYtY2FjaGUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUKKwlzZWQgLWkgcyVAVURFVkRAJSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi91ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYKKwlzZWQgLWkgcyVAVURFVkRAJSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi91ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYtY2FjaGUuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VkZXYtY2FjaGUKKworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvY2FjaGUuZGF0YQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sb2NhbC5ydWxlcyAgICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbC5ydWxlcworCisJIyBoaWQyaGNpIGhhcyBtb3ZlZCB0byBibHVlejQuIHJlbW92ZWQgaW4gdWRldiBhcyBvZiB2ZXJzaW9uIDE2OQorCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS91ZGV2L2hpZDJoY2kKKworCWVjaG8gJ3VkZXZfcnVuPSIvdmFyL3J1bi91ZGV2IicgPj4gJHtEfSR7c3lzY29uZmRpcn0vdWRldi91ZGV2LmNvbmYKK30KKworIyBBcyBzeXN0ZW1kIGFsc28gYnVpbGRzIHVkZXYsIHNraXAgdGhpcyBwYWNrYWdlIGlmIHdlJ3JlIGRvaW5nIGEgc3lzdGVtZCBidWlsZC4KK3B5dGhvbiAoKSB7CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQorZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIHRlc3QtdWRldgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LzAwMDEtRml4aW5nLWtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2gtc2hlbGwtc2NyaXB0LXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkZWFmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LzAwMDEtRml4aW5nLWtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2gtc2hlbGwtc2NyaXB0LXBhdGgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAwZjgyOTBjOTQzZGEyOThhYmQyNjljYTYwZmQ4Mzc1ZGZiMjE5OTcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDEyIEp1bCAyMDEyIDEyOjU0OjQ4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeGluZyBrZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoIHNoZWxsIHNjcmlwdCBwYXRoCisKK1dpdGggdGhlIGludHJvZHVjdGlvbiBvZiByb290cHJlZml4LCB0aGUga2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgord2FzIG1vZGlmaWVkIHRvIGJlIGV4ZWN1dGVkIHdpdGggQHJvb3RwcmVmaXhAL2Jpbi9zaCwgd2hpY2ggaXMgd3JvbmcKK2JlY2F1c2UgQHJvb3RwcmVmaXhAIGRlZmF1bHRzIHRvIC91c3IgKHdoaWNoIGlzIGNvcnJlY3QpLCBidXQgdGhlCitzaGVsbCBpcyBhbHdheXMgYXQgL2Jpbi9zaCAoSUVFRSBTdGQgMTAwMy4yLTE5OTIpLgorCitUaGVyZWZvcmUgdGhlIGludGVycHJldGVyIGZvciBzaGVsbCBzY3JpcHRzIG5lZWRzIHRvIGJlIC9iaW4vc2ggYXQgYWxsIHRpbWVzLgorCitUaGUgdXBzdHJlYW0gbW92ZWQgdG8gY29uZmlndXJhYmxlIHJvb3QgcHJlZml4LCB0aGlzIHBhdGNoIHRhY2xrZXMgYSAKK3RyYW5zaXRpb24gYnVnLCBhbmQgd2lsbCBub3QgYmUgYXBwbGllZCB1cHN0cmVhbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CistLS0KKyBzcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4gYi9zcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4KK2luZGV4IGRkMDQwY2UuLjU5N2EzYTYgMTAwNzU1CistLS0gYS9zcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4KKysrKyBiL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgorQEAgLTEsNCArMSw0IEBACistIyFAcm9vdHByZWZpeEAvYmluL3NoIC1lCisrIyEvYmluL3NoIC1lCisgIyByZWFkIGxpc3Qgb2Ygc2NhbmNvZGVzLCBjb252ZXJ0IGhleCB0byBkZWNpbWFsIGFuZAorICMgYXBwZW5kIHRvIHRoZSBhdGtiZCBmb3JjZV9yZWxlYXNlIHN5c2ZzIGF0dHJpYnV0ZQorICMgJDEgc3lzZnMgZGV2cGF0aCBmb3Igc2VyaW9YCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMyZTk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorQWRqdXN0ZW1lbnRzIGZvciBwdGVzdDoKKworLSBBZGQgJ2luc3RhbGwtcHRlc3QnIHJ1bGUuCistIFByaW50IGEgc3RhbmRhcmQgcmVzdWx0IGxpbmUgZm9yIGVhY2ggdGVzdC4KKy0gUmVwbGFjZSB0aGUgdXNlIG9mICJ0cmVlIiB3aXRoICJmaW5kIi4KKworU2lnbmVkLW9mZi1ieTogQmrDtnJuIFN0ZW5iZXJnIDxianN0QGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogQWxleGFuZHJhIFNhZnRhIDxhbHN0QGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBtaXNzaW5nIGZpbGVzIGZvciBydWxlLXN5bnRheC1jaGVjaworLSBBZGQgcnVsZS1zeW50YXgtY2hlY2sucHkKKy0gQWRkIHRoZSBkZXBsb3llZCB1ZGV2IHJ1bGVzIHRvIHRoZSB0ZXN0ZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBNYXggS3J1bW1lbmFjaGVyIDxtYXgub3NzLjA5QGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tIGEvTWFrZWZpbGUuYW0JMjAxMi0wMy0xOCAxNjoyODoxNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDItMTggMTA6MDM6MzYuNTMxMTAxMjQ0ICswMTAwCitAQCAtNzA4LDMgKzcwOCwxOCBAQAorIAlmb3IgaSBpbiBzcmMvZG9jcy9odG1sLyoue2h0bWwsY3NzLHBuZ307IGRvIGVjaG8gJCRpOyBrdXAgcHV0ICQkaSAkJGkuc2lnbiAvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL2xpYnVkZXYvOyBkb25lCisgCWZvciBpIGluIHNyYy9ndWRldi9kb2NzL2h0bWwvKi57aHRtbCxjc3MscG5nfTsgZG8gcm0gLWYgJCRpLnNpZ247IGdwZyAtLWFybW9yIC0tZGV0YWNoLXNpZ24gLS1vdXRwdXQ9JCRpLnNpZ24gJCRpOyBkb25lCisgCWZvciBpIGluIHNyYy9ndWRldi9kb2NzL2h0bWwvKi57aHRtbCxjc3MscG5nfTsgZG8gZWNobyAkJGk7IGt1cCBwdXQgJCRpICQkaS5zaWduIC9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvZ3VkZXYvOyBkb25lCisrCisrUlVMRVMgPSBydWxlcy8qIHNyYy9hY2NlbGVyb21ldGVyLzYxLWFjY2VsZXJvbWV0ZXIucnVsZXMgXAorKwkgc3JjL2Nkcm9tX2lkLzYwLWNkcm9tX2lkLnJ1bGVzIFwKKysJIHNyYy9rZXltYXAvOTUta2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5ydWxlcyBzcmMva2V5bWFwLzk1LWtleW1hcC5ydWxlcyBcCisrCSBzcmMvbXRkX3Byb2JlLzc1LXByb2JlX210ZC5ydWxlcyBzcmMvdjRsX2lkLzYwLXBlcnNpc3RlbnQtdjRsLnJ1bGVzCisrCisraW5zdGFsbC1wdGVzdDoKKysJaW5zdGFsbCB0ZXN0LXVkZXYgJChERVNURElSKQorKwljcCBNYWtlZmlsZSAkKERFU1RESVIpCisrCXNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkKERFU1RESVIpL01ha2VmaWxlCisrCWluc3RhbGwgLWQgJChERVNURElSKS90ZXN0ICQoREVTVERJUikvcnVsZXMKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCAkKFRFU1RTKSAkKERFU1RESVIpL3Rlc3QpCisrCShjZCAkKHRvcF9zcmNkaXIpICYmIGluc3RhbGwgdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weSAkKERFU1RESVIpL3Rlc3QpCisrCShjZCAkKHRvcF9zcmNkaXIpICYmIGluc3RhbGwgJChSVUxFUykgJChERVNURElSKS9ydWxlcykKKysJY3AgJCh0b3Bfc3JjZGlyKS90ZXN0L3N5cy50YXIueHogJChERVNURElSKS90ZXN0LworLS0tIGEvdGVzdC91ZGV2LXRlc3QucGwJMjAxMi0wMy0xOCAxNjo0MzozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL3Rlc3QvdWRldi10ZXN0LnBsCTIwMTMtMDItMTggMTA6MzE6MjkuNzA2MzU3MzIxICswMTAwCitAQCAtMTQ1OSwxMSArMTQ1OSwxMyBAQAorICAgICAgICAgICAgICAgICBwcmludCAiYWRkOiAgICAgICAgIGVycm9yIjsKKyAgICAgICAgICAgICAgICAgaWYgKCRydWxlcy0+e2V4cF9hZGRfZXJyb3J9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiBhcyBleHBlY3RlZFxuIjsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiWEZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IGFkZFxuIjsKKyAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOworLSAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgidHJlZSAkdWRldl9yb290Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJmaW5kICR1ZGV2X3Jvb3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcisrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlMOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiBhZGRcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KK0BAIC0xNDc5LDE1ICsxNDgxLDE4IEBACisgICAgICAgICAgICAgICAgIHByaW50ICJyZW1vdmU6ICAgICAgZXJyb3IiOworICAgICAgICAgICAgICAgICBpZiAoJHJ1bGVzLT57ZXhwX3JlbV9lcnJvcn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIGFzIGV4cGVjdGVkXG4iOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJYRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CistICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJ0cmVlICR1ZGV2X3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImZpbmQgJHVkZXZfcm9vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IHJlbW92ZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgcHJpbnQgInJlbW92ZTogICAgICBva1xuIjsKKysgICAgICAgICAgICAgICAgcHJpbnQgIlBBU1M6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IHJlbW92ZVxuIjsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIHByaW50ICJcbiI7CistLS0gYS9jb25maWd1cmUuYWMgICAgICAyMDEzLTExLTI4IDA5OjE0OjAyLjgxNDI0ODgyNiArMDEwMAorKysrIGIvY29uZmlndXJlLmFjICAgICAgMjAxMy0xMS0yOCAwOToxNDozNC4yNjA4NzQyOTYgKzAxMDAKK0BAIC02LDcgKzYsNyBAQAorICAgICAgICBbaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy91ZGV2Lmh0bWxdKQorIEFDX0NPTkZJR19TUkNESVIoW3NyYy91ZGV2ZC5jXSkKKyBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKKy1BTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSAtV2FsbCAtV25vLXBvcnRhYmlsaXR5IHNpbGVudC1ydWxlcyB0YXItcGF4IG5vLWRpc3QtZ3ppcCBkaXN0LXh6IHN1YmRpci1vYmplY3RzXSkKKytBTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSAtV2FsbCAtV25vLXBvcnRhYmlsaXR5IHNpbGVudC1ydWxlcyB0YXItcGF4IG5vLWRpc3QtZ3ppcCBkaXN0LXh6IHN1YmRpci1vYmplY3RzIHNlcmlhbC10ZXN0c10pCisgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfU1lTX0xBUkdFRklMRQorIEFDX0NPTkZJR19NQUNST19ESVIoW200XSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzMxYjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorU291cmNlOiBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvc3lzdGVtZC9zeXN0ZW1kL2NvbW1pdC9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzP2lkPWUwMzg2Y2YyODA5MjE5YmJkZDMwODk1ZjQ2ZjFmNTY3YjU2OTAyYjYKKworU29tZSBVU0IgcG9ydHMgb24gZXh0ZXJuYWwgaHVicyBtYXkgYmUgcmVwb3J0ZWQgYXMgImZpeGVkIi4gV2Ugb25seSB3YW50Cit0byBhdXRvLWVuYWJsZSB0aGlzIG9uIHBvcnRzIHRoYXQgYXJlIGludGVybmFsIHRvIHRoZSBtYWNoaW5lLCBzbyBjaGVjawordGhlIHBhcmVudCBzdGF0ZSBhcyB3ZWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEzLzA5LzEzCisKK0luZGV4OiB1ZGV2LTE4Mi9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdWRldi0xODIub3JpZy9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzCisrKysgdWRldi0xODIvcnVsZXMvNDItdXNiLWhpZC1wbS5ydWxlcworQEAgLTQ2LDQgKzQ2LDkgQEAgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUlN7aQorIEFDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIEFUVFJ7aWRWZW5kb3J9PT0iMTRkZCIsIEFUVFJ7aWRQcm9kdWN0fT0iMDAwMiIsIFRFU1Q9PSJwb3dlci9jb250cm9sIiwgQVRUUntwb3dlci9jb250cm9sfT0iYXV0byIKKworICMgVVNCIEhJRCBkZXZpY2VzIHRoYXQgYXJlIGludGVybmFsIHRvIHRoZSBtYWNoaW5lIHNob3VsZCBhbHNvIGJlIHNhZmUgdG8gYXV0b3N1c3BlbmQKKysjIEFuZCBza2lwIGl0IGZvciBkZXZpY2VzIHdoaWNoIGFyZSBleHRlcm5hbCBidXQgc2F5ICJmaXhlZCIKKytBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBTVUJTWVNURU1TPT0idXNiIiwgQVRUUlN7cmVtb3ZhYmxlfT09InJlbW92YWJsZSIsIEdPVE89InVzYl9oaWRfcG1fZW5kIgorK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIFNVQlNZU1RFTVM9PSJ1c2IiLCBBVFRSU3tyZW1vdmFibGV9PT0idW5rbm93biIsIEdPVE89InVzYl9oaWRfcG1fZW5kIgorIEFDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIEFUVFJ7YkludGVyZmFjZUNsYXNzfT09IjAzIiwgQVRUUlN7cmVtb3ZhYmxlfT09ImZpeGVkIiwgVEVTVD09Ii4uL3Bvd2VyL2NvbnRyb2wiLCBBVFRSey4uL3Bvd2VyL2NvbnRyb2x9PSJhdXRvIgorK0xBQkVMPSJ1c2JfaGlkX3BtX2VuZCIKKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9kZXZmcy11ZGV2LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTFhZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9kZXZmcy11ZGV2LnJ1bGVzCkBAIC0wLDAgKzEsMTA4IEBACisjIFRoZSB1c2Ugb2YgdGhlc2UgcnVsZXMgaXMgbm90IHJlY29tbWVuZGVkIG9yIHN1cHBvcnRlZC4KKyMgSW4gYSB3b3JsZCB3aGVyZSBkZXZpY2VzIGNhbiBjb21lIGFuZCBnbyBhdCBhbnkgdGltZSwgdGhlIGRldmZzIHNjaGVtZQorIyBvZiBzaW1wbGUgZGV2aWNlIGVudW1lcmF0aW9uIGRvZXMgbm90IGhlbHAgX2FueXRoaW5nXy4gSnVzdCBmb3JnZXQgYWJvdXQKKyMgaXQuIFVzZSBjdXN0b20gcnVsZXMgdG8gbmFtZSB5b3VyIGRldmljZSBvciBsb29rIGF0IHRoZSBwZXJzaXN0ZW50IGRldmljZQorIyBuYW1pbmcgc2NoZW1lLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBmb3IgZGlza3MgYW5kIGFkZCB5b3VyIHN1YnN5c3RlbS4KKworIyBpZGUgYmxvY2sgZGV2aWNlcworQlVTPSJpZGUiLCBLRVJORUw9ImhkKiIsIFBST0dSQU09Ii9ldGMvdWRldi9pZGUtZGV2ZnMuc2ggJWsgJWIgJW4iLCBOQU1FPSIlayIsIFNZTUxJTks9IiVjezF9ICVjezJ9IgorCisjIG1kIGJsb2NrIGRldmljZXMKK0tFUk5FTD0ibWRbMC05XSoiLCBOQU1FPSJtZC8lbiIKKworIyBmbG9wcHkgZGV2aWNlcworS0VSTkVMPSJmZFswLTldKiIsIE5BTUU9ImZsb3BweS8lbiIKKworIyB0dHkgZGV2aWNlcworS0VSTkVMPSJ0dHlbMC05XSoiLCAgICBOQU1FPSJ2Yy8lbiIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJ0dHlTWzAtOV0qIiwgICBOQU1FPSJ0dHMvJW4iLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0idHR5VVNCWzAtOV0qIiwgTkFNRT0idHRzL1VTQiVuIgorCisjIHZjIGRldmljZXMKK0tFUk5FTD0idmNzIiwgICAgICAgIE5BTUU9InZjYy8wIgorS0VSTkVMPSJ2Y3NbMC05XSoiLCAgTkFNRT0idmNjLyVuIgorS0VSTkVMPSJ2Y3NhIiwgICAgICAgTkFNRT0idmNjL2EwIgorS0VSTkVMPSJ2Y3NhWzAtOV0qIiwgTkFNRT0idmNjL2ElbiIKKworIyB2NGwgZGV2aWNlcworS0VSTkVMPSJ2aWRlb1swLTldKiIsIE5BTUU9InY0bC92aWRlbyVuIgorS0VSTkVMPSJyYWRpb1swLTldKiIsIE5BTUU9InY0bC9yYWRpbyVuIgorS0VSTkVMPSJ2YmlbMC05XSoiLCAgIE5BTUU9InY0bC92YmklbiIKK0tFUk5FTD0idnR4WzAtOV0qIiwgICBOQU1FPSJ2NGwvdnR4JW4iCisKKyMgZG0gZGV2aWNlcyAoaWdub3JlIHRoZW0pCitLRVJORUw9ImRtLVswLTldKiIsIE5BTUU9IiIKKworIyBpMmMgZGV2aWNlcworS0VSTkVMPSJpMmMtWzAtOV0qIiwgTkFNRT0iaTJjLyVuIiwgU1lNTElOSz0iJWsiCisKKyMgbG9vcCBkZXZpY2VzCitLRVJORUw9Imxvb3BbMC05XSoiLCBOQU1FPSJsb29wLyVuIiwgU1lNTElOSz0iJWsiCisKKyMgcmFtZGlza3MKK0tFUk5FTD0icmFtWzAtOV0qIiwgTkFNRT0icmQvJW4iLCBTWU1MSU5LPSIlayIKKworIyBmcmFtZWJ1ZmZlciBkZXZpY2VzCitLRVJORUw9ImZiWzAtOV0qIiwgTkFNRT0iZmIvJW4iLCBTWU1MSU5LPSIlayIKKworIyBtaXNjCitLRVJORUw9InJ0YyIsICAgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InBzYXV4IiwgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9ImFncGdhcnQiLCBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InJ0YyIsICAgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InBzYXV4IiwgICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InVpbnB1dCIsICBOQU1FPSJtaXNjLyVrIiwgU1lNTElOSz0iJWsiCisKKyMgYWxzYSBkZXZpY2VzCitLRVJORUw9ImNvbnRyb2xDWzAtOV0qIiwgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJod1tDRDAtOV0qIiwgICAgIE5BTUU9InNuZC8layIKK0tFUk5FTD0icGNtW0NEMC05Y3BdKiIsICBOQU1FPSJzbmQvJWsiCitLRVJORUw9Im1pZGlbQ0QwLTldKiIsICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJ0aW1lciIsICAgICAgICAgIE5BTUU9InNuZC8layIKK0tFUk5FTD0ic2VxIiwgICAgICAgICAgICBOQU1FPSJzbmQvJWsiCisKKyMgb3NzIGRldmljZXMKK0tFUk5FTD0iYXVkaW8qIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9ImRtbWlkaSIsICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJkc3AqIiwgICAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0ibWlkaSoiLCAgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9Im1peGVyKiIsICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJzZXF1ZW5jZXIqIiwgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKKworIyBpbnB1dCBkZXZpY2VzCitLRVJORUw9Im1pY2UiLCAgIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJtb3VzZSoiLCBOQU1FPSJpbnB1dC8layIKK0tFUk5FTD0iZXZlbnQqIiwgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9ImpzKiIsICAgIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJ0cyoiLAkgTkFNRT0iaW5wdXQvJWsiCisKKyMgVVNCIGRldmljZXMKK0tFUk5FTD0iaGlkZGV2KiIsCU5BTUU9InVzYi8layIKK0tFUk5FTD0iYXVlcioiLAkJTkFNRT0idXNiLyVrIgorS0VSTkVMPSJsZWdvdXNidG93ZXIqIiwJTkFNRT0idXNiLyVrIgorS0VSTkVMPSJkYWJ1c2IqIiwJTkFNRT0idXNiLyVrIgorQlVTPSJ1c2IiLCBLRVJORUw9ImxwWzAtOV0qIiwJTkFNRT0idXNiLyVrIgorCisjIG5ldGxpbmsgZGV2aWNlcworS0VSTkVMPSJyb3V0ZSIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJza2lwIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InVzZXJzb2NrIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0iZndtb25pdG9yIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0idGNwZGlhZyIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9Im5mbG9nIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9Inhmcm0iLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0iYXJwZCIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJyb3V0ZTYiLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJpcDZfZnciLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJkbnJ0bXNnIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0idGFwKiIsCQlOQU1FPSJuZXRsaW5rLyVrIgorCisjIENBUEkgZGV2aWNlcworS0VSTkVMPSJjYXBpIiwJCU5BTUU9ImNhcGkyMCIsIFNZTUxJTks9ImlzZG4vY2FwaTIwIgorS0VSTkVMPSJjYXBpKiIsCQlOQU1FPSJjYXBpLyVuIgorCisjIE5ldHdvcmsgZGV2aWNlcworS0VSTkVMPSJ0dW4iLAkJTkFNRT0ibmV0LyVrIgorCisjIHJhdyBkZXZpY2VzCitLRVJORUw9InJhd1swLTldKiIsICAgICBOQU1FPSJyYXcvJWsiIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2M0NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9maXhfcnVsZS1zeW50YXgtcmVnZXgtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVGhlIHJ1bGUtc3ludGF4LWNoZWNrIHNjcmlwdCBmYWlscyB3aXRoIGVycm9ycyBsaWtlIHRoaXM6CisKK0ludmFsaWQgbGluZSAvbGliL3VkZXYvcnVsZXMuZC85NS1rZXltYXAucnVsZXM6NDk6IEVOVntETUlfVkVORE9SfT09IkFTVVMqIiwgS0VSTkVMUz09ImlucHV0KiIsIEFUVFJTe25hbWV9PT0iQXN1cyBFeHRyYSBCdXR0b25zIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJXM0oiLCBSVU4rPSJrZXltYXAgJG5hbWUgbW9kdWxlLWFzdXMtdzNqIgorKCcgIGNsYXVzZTonLCAnQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJXM0oiJykKKygpCisKKworTW92ZSBsaW5lIGNvbW1lbnQgZnJvbSBlbmQgb2YgcnVsZXMgZmlsZSB0byBpdHMgb3duIGxpbmUsIHRoZSByZWdleCB1c2VkIHRvCit0ZXN0IGNvcnJlY3Qgc3ludGF4IGNob2tlIG9uIGl0LgorCitUaGUgcnVsZS1zeW50YXgtY2hlY2sucHkgdXNlcyByZWdleCB3aGljaCBlcnJvdXJuZXNzbHkgY29tcGxhaW5zIG9uIEFUVFIgcnVsZXMKK29mIHRoZSBmb3JtIEFUVFJ7W2RtaS9pZF1ib2FyZF9uYW1lfT09IjMwQjciCitVc2UgdGhlIHJlZ2V4IGZyb20gc3lzdGVtZCdzIHNjcmlwdCB3aGljaCBhbGxvdyBbXSBjaGFyYWN0ZXJzIGFuZCBhZGRpdGlvbmFsCitjb21wYXJlIG9wZXJhdG9ycworCitUaGUgTWFrZWZpbGUgcGFzc2VzIHJ1bGVzLXRlc3Quc2ggc2NyaXB0IGEgYnVpbGQgaG9zdCBwYXRoIHRvIHRoZSB0ZXN0ZGF0YS4KK0lnbm9yZSB0aGUgYXJndW1lbnQgYW5kIHVzZSBhIHJlbGF0aXZlIHBhdGggaW5zdGVhZC4KKworCitTaWduZWQtb2ZmLWJ5OiBNYXggS3J1bW1lbmFjaGVyIDxtYXgub3NzLjA5QGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoY3Jvc3MgZW52aXJvbm1lbnQgcGF0aCkKKworZGlmZiAtTmF1ciB1ZGV2LTE4Mi5vcmlnL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzIHVkZXYtMTgyL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzCistLS0gdWRldi0xODIub3JpZy9zcmMva2V5bWFwLzk1LWtleW1hcC5ydWxlcwkyMDEyLTAyLTA3IDAwOjAxOjU1LjE1NDY0MDc5MiArMDEwMAorKysrIHVkZXYtMTgyL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzCTIwMTUtMDEtMjQgMjA6NTg6NDAuMTU2OTMwNTIwICswMTAwCitAQCAtOTQsNyArOTQsOCBAQAorIEVOVntETUlfVkVORE9SfT09Ikhld2xldHQtUGFja2FyZCIsIEFUVFJ7W2RtaS9pZF1wcm9kdWN0X25hbWV9PT0iSFAgRzYyIE5vdGVib29rIFBDIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4QjIgd3d3IgorIEVOVntETUlfVkVORE9SfT09Ikhld2xldHQtUGFja2FyZCIsIEFUVFJ7W2RtaS9pZF1wcm9kdWN0X25hbWV9PT0iSFAgUHJvQm9vayoiLCBSVU4rPSJrZXltYXAgJG5hbWUgMHhGOCByZmtpbGwiCisgIyBIUCBQYXZpbGxpb24gZHY2MzE1ZWEgaGFzIGVtcHR5IERNSV9WRU5ET1IKKy1BVFRSe1tkbWkvaWRdYm9hcmRfdmVuZG9yfT09IlF1YW50YSIsIEFUVFJ7W2RtaS9pZF1ib2FyZF9uYW1lfT09IjMwQjciLCBBVFRSe1tkbWkvaWRdYm9hcmRfdmVyc2lvbn09PSI2NS4yQiIsIFJVTis9ImtleW1hcCAkbmFtZSAweDg4IG1lZGlhIiAjICJxdWljayBwbGF5CisrIyAicXVpY2sgcGxheSIKKytBVFRSe1tkbWkvaWRdYm9hcmRfdmVuZG9yfT09IlF1YW50YSIsIEFUVFJ7W2RtaS9pZF1ib2FyZF9uYW1lfT09IjMwQjciLCBBVFRSe1tkbWkvaWRdYm9hcmRfdmVyc2lvbn09PSI2NS4yQiIsIFJVTis9ImtleW1hcCAkbmFtZSAweDg4IG1lZGlhIgorIAorICMgR2F0ZXdheSBjbG9uZSBvZiBBY2VyIEFzcGlyZSBPbmUgQU9BMTEwL0FPQTE1MAorIEVOVntETUlfVkVORE9SfT09IkdhdGV3YXkqIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSIqQU9BMSoiLCBSVU4rPSJrZXltYXAgJG5hbWUgYWNlciIKK2RpZmYgLU5hdXIgdWRldi0xODIub3JpZy90ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5IHVkZXYtMTgyL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkKKy0tLSB1ZGV2LTE4Mi5vcmlnL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkJMjAxMi0wMi0xNSAyMDoxMDoxMi44NzIzMzMzNDIgKzAxMDAKKysrKyB1ZGV2LTE4Mi90ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5CTIwMTUtMDEtMjQgMjE6MDg6MDAuNDk2MDQ5NjAwICswMTAwCitAQCAtMjgsNyArMjgsNyBAQAorIG5vX2FyZ3NfdGVzdHMgPSByZS5jb21waWxlKCcoQUNUSU9OfERFVlBBVEh8S0VSTkVMUz98TkFNRXxTWU1MSU5LfFNVQlNZU1RFTVM/fERSSVZFUlM/fFRBR3xSRVNVTFR8VEVTVClccyooPzo9fCEpPVxzKiIoW14iXSopIiQnKQorIGFyZ3NfdGVzdHMgPSByZS5jb21waWxlKCcoQVRUUlM/fEVOVnxURVNUKXsoW2EtekEtWjAtOS9fLiolLV0rKX1ccyooPzo9fCEpPVxzKiIoW14iXSopIiQnKQorIG5vX2FyZ3NfYXNzaWduID0gcmUuY29tcGlsZSgnKE5BTUV8U1lNTElOS3xPV05FUnxHUk9VUHxNT0RFfFRBR3xQUk9HUkFNfFJVTnxMQUJFTHxHT1RPfFdBSVRfRk9SfE9QVElPTlN8SU1QT1JUKVxzKig/OlwrPXw6PXw9KVxzKiIoW14iXSopIiQnKQorLWFyZ3NfYXNzaWduID0gcmUuY29tcGlsZSgnKEFUVFJ8RU5WfElNUE9SVCl7KFthLXpBLVowLTkvXy4qJS1dKyl9XHMqPVxzKiIoW14iXSopIiQnKQorK2FyZ3NfYXNzaWduID0gcmUuY29tcGlsZSgnKEFUVFJ8RU5WfElNUE9SVHxSVU4peyhbXVthLXpBLVowLTkvXy4qJS1dKyl9XHMqKD18PT18XCs9KVxzKiIoW14iXSopIiQnKQorIAorIHJlc3VsdCA9IDAKKyBidWZmZXIgPSAnJworLS0tIHVkZXYtMTgyLm9yaWcvdGVzdC9ydWxlcy10ZXN0LnNoCTIwMTItMDEtMjkgMDE6MTU6NDYuMDAwMDAwMDAwICswMTAwCisrKysgdWRldi0xODIvdGVzdC9ydWxlcy10ZXN0LnNoCTIwMTUtMDEtMjQgMTc6NTM6NTEuMjAxODU4NjU4ICswMTAwCitAQCAtNCw3ICs0LDcgQEAKKyAjIChDKSAyMDEwIENhbm9uaWNhbCBMdGQuCisgIyBBdXRob3I6IE1hcnRpbiBQaXR0IDxtYXJ0aW4ucGl0dEB1YnVudHUuY29tPgorIAorLVsgLW4gIiRzcmNkaXIiIF0gfHwgc3JjZGlyPWBkaXJuYW1lICQwYC8uLgorK3NyY2Rpcj1gZGlybmFtZSAkMGAvLi4KKyAKKyAjIHNraXAgaWYgd2UgZG9uJ3QgaGF2ZSBweXRob24KKyB0eXBlIHB5dGhvbiA+L2Rldi9udWxsIDI+JjEgfHwgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiMDI4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2luaXQKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1ZGV2CisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFN0YXJ0IHVkZXZkLCBwb3B1bGF0ZSAvZGV2IGFuZCBsb2FkIGRyaXZlcnMuCisjIyMgRU5EIElOSVQgSU5GTworCitleHBvcnQgVFo9L2V0Yy9sb2NhbHRpbWUKKworWyAtZCAvc3lzL2NsYXNzIF0gfHwgZXhpdCAxCitbIC1yIC9wcm9jL21vdW50cyBdIHx8IGV4aXQgMQorWyAteCBAVURFVkRAIF0gfHwgZXhpdCAxCitTWVNDT05GX0NBQ0hFRD0iL2V0Yy91ZGV2L2NhY2hlLmRhdGEiCitTWVNDT05GX1RNUD0iL2Rldi9zaG0vdWRldi5jYWNoZSIKK0RFVkNBQ0hFX1JFR0VOPSIvZGV2L3NobS91ZGV2LXJlZ2VuIiAjIGNyZWF0ZSB0byByZXF1ZXN0IGNhY2hlIHJlZ2VuCisKKyMgQSBsaXN0IG9mIGZpbGVzIHdoaWNoIGFyZSB1c2VkIGFzIGEgY3JpdGVyaWEgdG8ganVkZ2Ugd2hldGhlciB0aGUgdWRldiBjYWNoZSBjb3VsZCBiZSByZXVzZWQuCitDTVBfRklMRV9MSVNUPSIvcHJvYy92ZXJzaW9uIC9wcm9jL2NtZGxpbmUgL3Byb2MvZGV2aWNlcyIKK1sgLWYgL3Byb2MvYXRhZ3MgXSAmJiBDTVBfRklMRV9MSVNUPSIkQ01QX0ZJTEVfTElTVCAvcHJvYy9hdGFncyIKKworIyBMaXN0IG9mIGZpbGVzIHdob3NlIG1ldGFkYXRhIChzaXplL210aW1lL25hbWUpIHdpbGwgYmUgaW5jbHVkZWQgaW4gY2FjaGVkCisjIHN5c3RlbSBzdGF0ZS4KK01FVEFfRklMRV9MSVNUPSJsaWIvdWRldi9ydWxlcy5kLyogZXRjL3VkZXYvcnVsZXMuZC8qIgorCisjIENvbW1hbmQgdG8gY29tcHV0ZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4KK3N5c2NvbmZfY21kICgpIHsKKwljYXQgLS0gJENNUF9GSUxFX0xJU1QKKwlzdGF0IC1jICclcyAlWSAlbicgLS0gJE1FVEFfRklMRV9MSVNUIHwgYXdrIC1GLyAne3ByaW50ICQxICIgIiAkTkY7fScKK30KKworWyAtZiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUKK1sgLWYgL2V0Yy91ZGV2L3VkZXYuY29uZiBdICYmIC4gL2V0Yy91ZGV2L3VkZXYuY29uZgorWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisKK2tpbGxfdWRldmQgKCkgeworICAgIHBpZD1gcGlkb2YgLXggdWRldmRgCisgICAgWyAtbiAiJHBpZCIgXSAmJiBraWxsICRwaWQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGV4cG9ydCBBQ1RJT049YWRkCisgICAgIyBwcm9wYWdhdGUgL2RldiBmcm9tIC9zeXMKKyAgICBlY2hvICJTdGFydGluZyB1ZGV2IgorCisgICAgIyBDaGVjayBmb3IgcmVxdWlyZWVkIGRldnRtcGZzIGJlZm9yZSB0cnlpbmcgdG8gc3RhcnQgdWRldiBhbmQKKyAgICAjIG1vdW50IGEgbm8tZXhpc3RhbnQgZnMuCisgICAgaWYgISBncmVwIC1xIGRldnRtcGZzIC9wcm9jL2ZpbGVzeXN0ZW1zCisgICAgdGhlbgorICAgICAgICBlY2hvICJNaXNzaW5nIGRldnRtcGZzLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdWRldiB0byBydW4iOworICAgICAgICBlY2hvICJIYWx0aW5nLi4uIgorICAgICAgICBoYWx0CisgICAgZmkKKyAgICAjIG1vdW50IHRoZSBkZXZ0bXBmcyBvbiAvZGV2LCBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgTEFORz1DIGF3ayAnJDIgPT0gIi9kZXYiICYmICgkMyA9PSAiZGV2dG1wZnMiKSB7IGV4aXQgMSB9JyAvcHJvYy9tb3VudHMgJiYgeworICAgICAgICAgICAgbW91bnQgLW4gLW8gbW9kZT0wNzU1IC10IGRldnRtcGZzIG5vbmUgIi9kZXYiCisgICAgfQorICAgIFsgLWUgL2Rldi9wdHMgXSB8fCBta2RpciAtbSAwNzU1IC9kZXYvcHRzCisgICAgWyAtZSAvZGV2L3NobSBdIHx8IG1rZGlyIC1tIDE3NzcgL2Rldi9zaG0KKyAgICAjIHRoZSBhdXRvbW91bnQgcnVsZSBmb3IgdWRldiBuZWVkcyAvdG1wIGRpcmVjdG9yeSBhdmFpbGFibGUsIGFzIC90bXAgaXMgYSBzeW1saW5rCisgICAgIyB0byAvdmFyL3RtcCB3aGljaCBpbiB0dXJuIGlzIGEgc3ltbGluayB0byAvdmFyL3ZvbGF0aWxlL3RtcCwgd2UgbmVlZCB0byBtYWtlIHN1cmUKKyAgICAjIC92YXIvdm9sYXRpbGUvdG1wIGRpcmVjdG9yeSB0byBiZSBhdmFpbGFibGUuCisgICAgbWtkaXIgLW0gMTc3NyAtcCAvdmFyL3ZvbGF0aWxlL3RtcAorCisgICAgIyBDYWNoZSBoYW5kbGluZy4KKyAgICBpZiBbICIkREVWQ0FDSEUiICE9ICIiIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgLWUgJERFVkNBQ0hFIF07IHRoZW4KKwkJICAgIHN5c2NvbmZfY21kID4gIiRTWVNDT05GX1RNUCIKKwkJICAgIGlmIGNtcCAkU1lTQ09ORl9DQUNIRUQgJFNZU0NPTkZfVE1QID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXIgeG1mICRERVZDQUNIRSAtQyAvIC1tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90X2ZpcnN0X2Jvb3Q9MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAidWRldjogdXNpbmcgY2FjaGUgZmlsZSAkREVWQ0FDSEUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtZSAkU1lTQ09ORl9UTVAgXSAmJiBybSAtZiAiJFNZU0NPTkZfVE1QIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgIiRERVZDQUNIRV9SRUdFTiIgXSAmJiBybSAtZiAiJERFVkNBQ0hFX1JFR0VOIgorICAgICAgICAgICAgICAgICAgICBlbHNlCisJCQkgICAgIyBPdXRwdXQgZGV0YWlsZWQgcmVhc29uIHdoeSB0aGUgY2FjaGVkIC9kZXYgaXMgbm90IHVzZWQKKwkJCSAgICBjYXQgPDxFT0YKK3VkZXY6IE5vdCB1c2luZyB1ZGV2IGNhY2hlIGJlY2F1c2Ugb2YgY2hhbmdlcyBkZXRlY3RlZCBpbiB0aGUgZm9sbG93aW5nIGZpbGVzOgordWRldjogICAgICRDTVBfRklMRV9MSVNUCit1ZGV2OiAgICAgJE1FVEFfRklMRV9MSVNUCit1ZGV2OiBUaGUgdWRldiBjYWNoZSB3aWxsIGJlIHJlZ2VuZXJhdGVkLiBUbyBpZGVudGlmeSB0aGUgZGV0ZWN0ZWQgY2hhbmdlcywKK3VkZXY6IGNvbXBhcmUgdGhlIGNhY2hlZCBzeXNjb25mIGF0ICAgJFNZU0NPTkZfQ0FDSEVECit1ZGV2OiBhZ2FpbnN0IHRoZSBjdXJyZW50IHN5c2NvbmYgYXQgICRTWVNDT05GX1RNUAorRU9GCisJCQkgICAgdG91Y2ggIiRERVZDQUNIRV9SRUdFTiIKKyAgICAgICAgICAgICAgICAgICAgZmkKKwkgICAgZWxzZQorCQkgICAgaWYgWyAiJFJPT1RGU19SRUFEX09OTFkiICE9ICJ5ZXMiIF07IHRoZW4KKwkJCSAgICAjIElmIHJvb3RmcyBpcyBub3QgcmVhZC1vbmx5LCBpdCdzIHBvc3NpYmxlIHRoYXQgYSBuZXcgdWRldiBjYWNoZSB3b3VsZCBiZSBnZW5lcmF0ZWQ7CisJCQkgICAgIyBvdGhlcndpc2UsIHdlIGRvIG5vdCBib3RoZXIgdG8gcmVhZCBmaWxlcy4KKwkJCSAgICB0b3VjaCAiJERFVkNBQ0hFX1JFR0VOIgorCQkgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgZmkKKworICAgICMgbWFrZV9leHRyYV9ub2RlcworICAgIGtpbGxfdWRldmQgPiAiL2Rldi9udWxsIiAyPiYxCisKKyAgICAjIHRyaWdnZXIgdGhlIHNvcnRlZCBldmVudHMKKyAgICBbIC1lIC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZyBdICYmIGVjaG8gLWUgJ1wwMDAnID4vcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKKyAgICBAVURFVkRAIC1kCisKKyAgICB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0xCisgICAgaWYgWyAiJG5vdF9maXJzdF9ib290IiAhPSAiIiBdO3RoZW4KKyAgICAgICAgICAgIGlmIFsgIiRQUk9CRV9QTEFURk9STV9CVVMiICE9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBQTEFURk9STV9CVVNfTk9NQVRDSD0iLS1zdWJzeXN0ZW0tbm9tYXRjaD1wbGF0Zm9ybSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBQTEFURk9STV9CVVNfTk9NQVRDSD0iIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQgLS1zdWJzeXN0ZW0tbm9tYXRjaD10dHkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1tZW0gLS1zdWJzeXN0ZW0tbm9tYXRjaD12YyAtLXN1YnN5c3RlbS1ub21hdGNoPXZ0Y29uc29sZSAtLXN1YnN5c3RlbS1ub21hdGNoPW1pc2MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1kY29uIC0tc3Vic3lzdGVtLW5vbWF0Y2g9cGNpX2J1cyAtLXN1YnN5c3RlbS1ub21hdGNoPWdyYXBoaWNzIC0tc3Vic3lzdGVtLW5vbWF0Y2g9YmFja2xpZ2h0IC0tc3Vic3lzdGVtLW5vbWF0Y2g9dmlkZW80bGludXggJFBMQVRGT1JNX0JVU19OT01BVENICisgICAgICAgICAgICAodWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTM7IHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPSkmCisgICAgZWxzZQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorICAgICAgICAgICAgdWRldmFkbSBzZXR0bGUKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAiU3RvcHBpbmcgdWRldmQiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSB1ZGV2ZCAtLXF1aWV0CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICAkMCBzdG9wCisgICAgc2xlZXAgMQorICAgICQwIHN0YXJ0CisgICAgOzsKKyAgc3RhdHVzKQorICAgIHBpZD1gcGlkb2YgLXggdWRldmRgCisgICAgaWYgWyAtbiAiJHBpZCIgXTsgdGhlbgorCWVjaG8gInVkZXZkIChwaWQgJHBpZCkgaXMgcnVubmluZyAuLi4iCisgICAgZWxzZQorCWVjaG8gInVkZXZkIGlzIHN0b3BwZWQiCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9saW5rcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZmY5MjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9saW5rcy5jb25mCkBAIC0wLDAgKzEsMjEgQEAKKyMgVGhpcyBmaWxlIGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgZG8gbm90IGFzayB0aGUgZGViaWFuIG1haW50YWluZXIgYWJvdXQgaXQuCisjIFlvdSBtYXkgdXNlIGl0IHRvIGRvIHN0cmFuZ2UgYW5kIHdvbmRlcmZ1bCB0aGluZ3MsIGF0IHlvdXIgcmlzay4KKworTCBmZAkJL3Byb2Mvc2VsZi9mZAorTCBzdGRpbgkJL3Byb2Mvc2VsZi9mZC8wCitMIHN0ZG91dAkvcHJvYy9zZWxmL2ZkLzEKK0wgc3RkZXJyCS9wcm9jL3NlbGYvZmQvMgorTCBjb3JlCQkvcHJvYy9rY29yZQorTCBzbmRzdGF0CS9wcm9jL2Fzb3VuZC9vc3Mvc25kc3RhdAorTCBNQUtFREVWCS9zYmluL01BS0VERVYKKworRCBwdHMKK0Qgc2htCisKKyMgSGljIHN1bnQgbGVvbmVzLgorTSBwcHAJCWMgMTA4IDAKK0QgbG9vcAorTSBsb29wLzAJYiA3IDAKK0QgbmV0CitNIG5ldC90dW4JYyAxMCAyMDAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAyY2RkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIENyZWF0ZSBhIHN5bWxpbmsgdG8gYW55IHRvdWNoc2NyZWVuIGlucHV0IGRldmljZQorIyBUcmlnZ2VyIGJhc2VkIG9uIGlucHV0IHR5cGUsIHRoYXQgdGhlIGV2Yml0ICgtZSkgaGFzIEVWX1NZTiBhbmQgRVZfQUJTLAorIyBoYXMgYW4gRVZfQUJTIHZhbHVlICgtYSkgd2hpY2ggaXMgdXNlZCBmb3IgdG91Y2hzY3JlZW4gdHlwZSBkZXZpY2VzLgorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEVOVntJRF9JTlBVVF9UT1VDSFNDUkVFTn09PSIxIiwgU1lNTElOSys9ImlucHV0L3RvdWNoc2NyZWVuMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1YjczMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzCkBAIC0wLDAgKzEsMTMxIEBACitBQ1RJT04hPSJhZGQiLCBHT1RPPSJwZXJtaXNzaW9uc19lbmQiCisKKyMgd29ya2Fyb3VuZHMgbmVlZGVkIHRvIHN5bmNocm9uaXplIHdpdGggc3lzZnMKKyMgb25seSBuZWVkZWQgZm9yIGtlcm5lbHMgPCB2Mi42LjE4LXJjMQorRU5We1BIWVNERVZQQVRIfSE9Ij8qIiwgRU5We1BIWVNERVZCVVN9PT0iPyoiLAlXQUlUX0ZPUl9TWVNGUz0iYnVzIgorU1VCU1lTVEVNPT0ic2NzaSIsIEtFUk5FTD09IlswLTldKjpbMC05XSoiLAlXQUlUX0ZPUl9TWVNGUz0iaW9lcnJfY250IgorIyBvbmx5IG5lZWRlZCBmb3Iga2VybmVscyA8IDIuNi4xNgorU1VCU1lTVEVNPT0ibmV0IiwJCQkJV0FJVF9GT1JfU1lTRlM9ImFkZHJlc3MiCisjIG9ubHkgbmVlZGVkIGZvciBrZXJuZWxzIDwgMi42LjE3CitTVUJTWVNURU09PSJuZXQiLCBFTlZ7RFJJVkVSfT09Ij8qIiwJCVdBSVRfRk9SX1NZU0ZTPSJkZXZpY2UvZHJpdmVyIgorCisjIGRldmljZXMgbmVlZGVkIHRvIGxvYWQgdGhlIGRyaXZlcnMgcHJvdmlkaW5nIHRoZW0KK0tFUk5FTD09InR1biIsCQkJCQlPUFRJT05TKz0iaWdub3JlX3JlbW92ZSIKK0tFUk5FTD09InBwcCIsCQkJCQlPUFRJT05TKz0iaWdub3JlX3JlbW92ZSIKK0tFUk5FTD09Imxvb3BbMC05XSoiLAkJCQlPUFRJT05TKz0iaWdub3JlX3JlbW92ZSIKKworIyBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBibG9jayBkZXZpY2VzCitTVUJTWVNURU09PSJibG9jayIsCQkJCUdST1VQPSJkaXNrIgorIyB0aGUgYWFjcmFpZCBkcml2ZXIgaXMgYnJva2VuIGFuZCByZXBvcnRzIHRoYXQgZGlza3MgcmVtb3ZhYmxlIChzZWUgIzQwNDkyNykKK1NVQlNZU1RFTT09ImJsb2NrIiwgQVRUUlN7cmVtb3ZhYmxlfT09IjEiLCBcCisJRFJJVkVSUyE9ImFhY3JhaWQiLAkJCUdST1VQPSJmbG9wcHkiCisjIGFsbCBibG9jayBkZXZpY2VzIG9uIHRoZXNlIGJ1c2VzIGFyZSAicmVtb3ZhYmxlIgorU1VCU1lTVEVNPT0iYmxvY2siLCBTVUJTWVNURU1TPT0idXNifGllZWUxMzk0fG1tY3xwY21jaWEiLCBHUk9VUD0iZmxvcHB5IgorCisjIElERSBkZXZpY2VzCitLRVJORUw9PSJoZFthLXpdfHBjZFswLTldKiIsIAkJCURSSVZFUlM9PSJpZGUtY2Ryb218cGNkIiwgXAorCUlNUE9SVHtwcm9ncmFtfT0iY2Ryb21faWQgLS1leHBvcnQgJHRlbXBub2RlIgorRU5We0lEX0NEUk9NfT09Ij8qIiwJCQkJR1JPVVA9ImNkcm9tIgorS0VSTkVMPT0iaHRbMC05XSoiLCAJCQkJR1JPVVA9InRhcGUiCitLRVJORUw9PSJuaHRbMC05XSoiLCAJCQkJR1JPVVA9InRhcGUiCisKKyMgU0NTSSBkZXZpY2VzCitLRVJORUw9PSJzclswLTldKiIsIElNUE9SVHtwcm9ncmFtfT0iY2Ryb21faWQgLS1leHBvcnQgJHRlbXBub2RlIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjEiLAkJCQlHUk9VUD0idGFwZSIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSIzIiwgQVRUUlN7dmVuZG9yfT09IkhQIiwJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMyIsIEFUVFJTe3ZlbmRvcn09PSJFcHNvbiIsCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjMiLCBBVFRSU3t2ZW5kb3J9PT0iRVBTT04iLAlHUk9VUD0ic2Nhbm5lciIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSI0IiwJCQkJR1JPVVA9ImNkcm9tIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjUiLAkJCQlHUk9VUD0iY2Ryb20iCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iNiIsCQkJCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjgiLAkJCQlHUk9VUD0idGFwZSIKKworIyBVU0IgZGV2aWNlcworS0VSTkVMPT0ibGVnb3VzYnRvd2VyKiIsCU1PREU9IjA2NjYiCitLRVJORUw9PSJscFswLTldKiIsIFNVQlNZU1RFTVM9PSJ1c2IiLAkJR1JPVVA9ImxwIgorCisjIHVzYmZzLWxpa2UgZGV2aWNlcworU1VCU1lTVEVNPT0idXNiIiwgRU5We0RFVlRZUEV9PT0idXNiX2RldmljZSIsIFwKKwkJCQlNT0RFPSIwNjY0IgorCisjIGlSaXZlciBtdXNpYyBwbGF5ZXJzCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwJR1JPVVA9InBsdWdkZXYiLCBcCisJQVRUUlN7aWRWZW5kb3J9PT0iNDEwMiIsIEFUVFJTe2lkUHJvZHVjdH09PSIxMFswMV1bMTM1Nzg5XSIKKworIyBzZXJpYWwgZGV2aWNlcworU1VCU1lTVEVNPT0idHR5IiwJCQkJR1JPVVA9ImRpYWxvdXQiCitTVUJTWVNURU09PSJjYXBpIiwJCQkJR1JPVVA9ImRpYWxvdXQiCitTVUJTWVNURU09PSJzbGFtciIsCQkJCUdST1VQPSJkaWFsb3V0IgorU1VCU1lTVEVNPT0iemFwdGVsIiwJCQkJR1JPVVA9ImRpYWxvdXQiCisKKyMgdmMgZGV2aWNlcyAoYWxsIG1lbWJlcnMgb2YgdGhlIHR0eSBzdWJzeXN0ZW0pCitLRVJORUw9PSJwdG14IiwJCQlNT0RFPSIwNjY2IiwJR1JPVVA9InJvb3QiCitLRVJORUw9PSJjb25zb2xlIiwJCU1PREU9IjA2MDAiLAlHUk9VUD0icm9vdCIKK0tFUk5FTD09InR0eSIsCQkJTU9ERT0iMDY2NiIsCUdST1VQPSJyb290IgorS0VSTkVMPT0idHR5WzAtOV0qIiwJCQkJR1JPVVA9InJvb3QiCitLRVJORUw9PSJwdHkqIiwJCQlNT0RFPSIwNjY2IiwJR1JPVVA9InR0eSIKKworIyB2aWRlbyBkZXZpY2VzCitTVUJTWVNURU09PSJ2aWRlbzRsaW51eCIsCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZHJtIiwJCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZHZiIiwJCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZW04MzAwIiwJCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0iZ3JhcGhpY3MiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJudmlkaWEiLAkJCQlHUk9VUD0idmlkZW8iCisKKyMgbWlzYyBkZXZpY2VzCitLRVJORUw9PSJyYW5kb20iLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09InVyYW5kb20iLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Im1lbSIsCQkJTU9ERT0iMDY0MCIsCUdST1VQPSJrbWVtIgorS0VSTkVMPT0ia21lbSIsCQkJTU9ERT0iMDY0MCIsCUdST1VQPSJrbWVtIgorS0VSTkVMPT0icG9ydCIsCQkJTU9ERT0iMDY0MCIsCUdST1VQPSJrbWVtIgorS0VSTkVMPT0iZnVsbCIsCQkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Im51bGwiLAkJCU1PREU9IjA2NjYiCitLRVJORUw9PSJ6ZXJvIiwJCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0iaW5vdGlmeSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ic2dpX2ZldGNob3AiLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09InNvbnlwaSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0iYWdwZ2FydCIsCQkJCUdST1VQPSJ2aWRlbyIKK0tFUk5FTD09Im52cmFtIiwJCQkJR1JPVVA9Im52cmFtIgorS0VSTkVMPT0icnRjfHJ0Y1swLTldKiIsCQkJR1JPVVA9ImF1ZGlvIgorS0VSTkVMPT0idHBtKiIsCQkJTU9ERT0iMDYwMCIsCU9XTkVSPSJ0c3MiLCBHUk9VUD0idHNzIgorS0VSTkVMPT0iZnVzZSIsCQkJCQlHUk9VUD0iZnVzZSIKK0tFUk5FTD09ImtxZW11IiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJrdm0iLAkJCQkJR1JPVVA9Imt2bSIKK0tFUk5FTD09InR1biIsCQkJTU9ERT0iMDY2NiIsCisKK0tFUk5FTD09ImNkZW11WzAtOV0qIiwJCQkJR1JPVVA9ImNkcm9tIgorS0VSTkVMPT0icGt0Y2R2ZFswLTldKiIsCQkJR1JPVVA9ImNkcm9tIgorS0VSTkVMPT0icGt0Y2R2ZCIsCQlNT0RFPSIwNjQ0IgorCitLRVJORUw9PSJ1dmVyYnMqIiwJCQkJR1JPVVA9InJkbWEiCitLRVJORUw9PSJ1Y20qIiwJCQkJCUdST1VQPSJyZG1hIgorS0VSTkVMPT0icmRtYV91Y20iLAkJCQlHUk9VUD0icmRtYSIKKworIyBwcmludGVycyBhbmQgcGFyYWxsZWwgZGV2aWNlcworU1VCU1lTVEVNPT0icHJpbnRlciIsCQkJCUdST1VQPSJscCIKK1NVQlNZU1RFTT09InBwZGV2IiwJCQkJR1JPVVA9ImxwIgorS0VSTkVMPT0iaXJscHQqIiwJCQkJR1JPVVA9ImxwIgorS0VSTkVMPT0icHRbMC05XSoiLAkJCQlHUk9VUD0idGFwZSIKK0tFUk5FTD09InBodFswLTldKiIsCQkJCUdST1VQPSJ0YXBlIgorCisjIHNvdW5kIGRldmljZXMKK1NVQlNZU1RFTT09InNvdW5kIiwJCQkJR1JPVVA9ImF1ZGlvIgorCisjIGllZWUxMzk0IGRldmljZXMgICAgICAgCitLRVJORUw9PSJyYXcxMzk0IiwJCQkJR1JPVVA9ImRpc2siCitLRVJORUw9PSJkdjEzOTQqIiwJCQkJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0idmlkZW8xMzk0KiIsCQkJCUdST1VQPSJ2aWRlbyIKKworIyBpbnB1dCBkZXZpY2VzCitLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe25hbWV9PT0iKmR2Yip8KkRWQip8KiBJUiAqIiBcCisJCQkJTU9ERT0iMDY2NCIsCUdST1VQPSJ2aWRlbyIKK0tFUk5FTD09ImpzWzAtOV0qIiwJCU1PREU9IjA2NjQiCitLRVJORUw9PSJsaXJjWzAtOV0qIiwJCQkJR1JPVVA9InZpZGVvIgorCisjIEFPRSBjaGFyYWN0ZXIgZGV2aWNlcworU1VCU1lTVEVNPT0iYW9lIiwJCU1PREU9IjAyMjAiLAlHUk9VUD0iZGlzayIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImVyciIsIE1PREU9IjA0NDAiCisKK0xBQkVMPSJwZXJtaXNzaW9uc19lbmQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTM5ODA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK3RhciAtQyB0ZXN0LyAteEpmIHRlc3Qvc3lzLnRhci54egorbWFrZSAtayBjaGVjay1URVNUUworbWFrZSB0ZXN0LXN5cy1kaXN0Y2xlYW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ3MTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLnJ1bGVzCkBAIC0wLDAgKzEsMTQgQEAKKyMgZGVidWdnaW5nIG1vbml0b3IKK1JVTis9InNvY2tldDovb3JnL2tlcm5lbC91ZGV2L21vbml0b3IiCisKKyMgcnVuIGEgY29tbWFuZCBvbiByZW1vdmUgZXZlbnRzCitBQ1RJT049PSJyZW1vdmUiLCBFTlZ7UkVNT1ZFX0NNRH0hPSIiLCBSVU4rPSIkZW52e1JFTU9WRV9DTUR9IgorCisjIGlnbm9yZSB0aGUgZXZlbnRzIGdlbmVyYXRlZCBieSB2aXJ0dWFsIGNvbnNvbGVzCitLRVJORUw9PSJwdG14IiwJCU9QVElPTlMrPSJsYXN0X3J1bGUiCitLRVJORUw9PSJjb25zb2xlIiwJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09InR0eSIJLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0idHR5WzAtOV0qIiwJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09InB0eSoiLAkJT1BUSU9OUys9Imxhc3RfcnVsZSIKK1NVQlNZU1RFTT09InZjIiwJT1BUSU9OUys9Imxhc3RfcnVsZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmZmYxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoIC1lCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVkZXYtY2FjaGUKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50YWxsCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IGNhY2hlIC9kZXYgdG8gc3BlZWR1cCB0aGUgdWRldiBuZXh0IGJvb3QKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2V4cG9ydCBUWj0vZXRjL2xvY2FsdGltZQorCitbIC1yIC9wcm9jL21vdW50cyBdIHx8IGV4aXQgMQorWyAteCBAVURFVkRAIF0gfHwgZXhpdCAxCitbIC1kIC9zeXMvY2xhc3MgXSB8fCBleGl0IDEKKworWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCitERVZDQUNIRV9UTVA9Ii9kZXYvc2htL3VkZXYtY2FjaGUtdG1wLnRhciIKK1NZU0NPTkZfQ0FDSEVEPSIvZXRjL3VkZXYvY2FjaGUuZGF0YSIKK1NZU0NPTkZfVE1QPSIvZGV2L3NobS91ZGV2LmNhY2hlIgorREVWQ0FDSEVfUkVHRU49Ii9kZXYvc2htL3VkZXYtcmVnZW4iICMgY3JlYXRlIHRvIHJlcXVlc3QgY2FjaGUgcmVnZW4KKworIyBBIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYXJlIHVzZWQgYXMgYSBjcml0ZXJpYSB0byBqdWRnZSB3aGV0aGVyIHRoZSB1ZGV2IGNhY2hlIGNvdWxkIGJlIHJldXNlZC4KK0NNUF9GSUxFX0xJU1Q9Ii9wcm9jL3ZlcnNpb24gL3Byb2MvY21kbGluZSAvcHJvYy9kZXZpY2VzIgorWyAtZiAvcHJvYy9hdGFncyBdICYmIENNUF9GSUxFX0xJU1Q9IiRDTVBfRklMRV9MSVNUIC9wcm9jL2F0YWdzIgorCisjIExpc3Qgb2YgZmlsZXMgd2hvc2UgbWV0YWRhdGEgKHNpemUvbXRpbWUvbmFtZSkgd2lsbCBiZSBpbmNsdWRlZCBpbiBjYWNoZWQKKyMgc3lzdGVtIHN0YXRlLgorTUVUQV9GSUxFX0xJU1Q9ImxpYi91ZGV2L3J1bGVzLmQvKiBldGMvdWRldi9ydWxlcy5kLyoiCisKKyMgQ29tbWFuZCB0byBjb21wdXRlIHN5c3RlbSBjb25maWd1cmF0aW9uLgorc3lzY29uZl9jbWQgKCkgeworCWNhdCAtLSAkQ01QX0ZJTEVfTElTVAorCXN0YXQgLWMgJyVzICVZICVuJyAtLSAkTUVUQV9GSUxFX0xJU1QgfCBhd2sgLUYvICd7cHJpbnQgJDEgIiAiICRORjt9JworfQorCitbIC1mIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlIF0gJiYgLiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZQorCitpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisgICAgWyAiJFZFUkJPU0UiICE9ICJubyIgXSAmJiBlY2hvICJ1ZGV2LWNhY2hlOiByZWFkLW9ubHkgcm9vdGZzLCBza2lwIGdlbmVyYXRpbmcgdWRldi1jYWNoZSIKKyAgICBleGl0IDAKK2ZpCisKK1sgIiRERVZDQUNIRSIgIT0gIiIgXSB8fCBleGl0IDAKK1sgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvIC1uICJ1ZGV2LWNhY2hlOiBjaGVja2luZyBmb3IgJHtERVZDQUNIRV9SRUdFTn0uLi4gIgoraWYgISBbIC1lICIkREVWQ0FDSEVfUkVHRU4iIF07IHRoZW4KKwlbICIke1ZFUkJPU0V9IiA9PSAibm8iIF0gfHwgZWNobyAibm90IGZvdW5kLiIKKwlleGl0IDAKK2ZpCitbICIke1ZFUkJPU0V9IiA9PSAibm8iIF0gfHwgZWNobyAiZm91bmQuIgorZWNobyAiUG9wdWxhdGluZyBkZXYgY2FjaGUiCisKK2Vycl9jbGVhbnVwICgpIHsKKyAgICAgICAgZWNobyAidWRldi1jYWNoZTogdXBkYXRlIGZhaWxlZCEiCisgICAgICAgIHVkZXZhZG0gY29udHJvbCAtLXN0YXJ0LWV4ZWMtcXVldWUKKwlybSAtZiAtLSAiJFNZU0NPTkZfVE1QIiAiJERFVkNBQ0hFX1RNUCIgIiRERVZDQUNIRSIgIiRTWVNDT05GX0NBQ0hFRCIKK30KKworKAorCXNldCAtZQorCXRyYXAgJ2Vycl9jbGVhbnVwJyBFWElUCisJdWRldmFkbSBjb250cm9sIC0tc3RvcC1leGVjLXF1ZXVlCisJc3lzY29uZl9jbWQgPiAiJFNZU0NPTkZfVE1QIgorCWZpbmQgL2RldiAteGRldiBcKCAtdHlwZSBiIC1vIC10eXBlIGMgLW8gLXR5cGUgbCBcKSB8IGN1dCAtYyAyLSBcCisJCXwgeGFyZ3MgdGFyIGNmICIke0RFVkNBQ0hFX1RNUH0iCisJZ3ppcCA8ICIke0RFVkNBQ0hFX1RNUH0iID4gIiRERVZDQUNIRSIKKwlybSAtZiAiJHtERVZDQUNIRV9UTVB9IgorCW12ICIkU1lTQ09ORl9UTVAiICIkU1lTQ09ORl9DQUNIRUQiCisJdWRldmFkbSBjb250cm9sIC0tc3RhcnQtZXhlYy1xdWV1ZQorCXJtIC1mICIkREVWQ0FDSEVfUkVHRU4iCisJdHJhcCAtIEVYSVQKKykgJgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I3MzI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZS5kZWZhdWx0CkBAIC0wLDAgKzEsNSBAQAorIyBEZWZhdWx0IGZvciAvZXRjL2luaXQuZC91ZGV2CisKKyMgQ29tbWVudCB0aGlzIG91dCB0byBkaXNhYmxlIGRldmljZSBjYWNoZQorREVWQ0FDSEU9Ii9ldGMvdWRldi1jYWNoZS50YXIuZ3oiCitQUk9CRV9QTEFURk9STV9CVVM9InllcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOWQ0YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LnJ1bGVzCkBAIC0wLDAgKzEsMTE2IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgd29ya2Fyb3VuZCBmb3IgZGV2aWNlcyB3aGljaCBkbyBub3QgcmVwb3J0IG1lZGlhIGNoYW5nZXMKK1NVQlNZU1RFTVM9PSJpZGUiLCBLRVJORUw9PSJoZFthLXpdIiwgQVRUUntyZW1vdmFibGV9PT0iMSIsIFwKKwlFTlZ7SURfTU9ERUx9PT0iSU9NRUdBX1pJUCoiLAlOQU1FPSIlayIsIE9QVElPTlMrPSJhbGxfcGFydGl0aW9ucyIKK1NVQlNZU1RFTVM9PSJpZGUiLCBLRVJORUw9PSJoZFthLXpdIiwgQVRUUlN7bWVkaWF9PT0iZmxvcHB5IiwgXAorCU9QVElPTlMrPSJhbGxfcGFydGl0aW9ucyIKKworIyBTQ1NJIGRldmljZXMKK1NVQlNZU1RFTVM9PSJzY3NpIiwgS0VSTkVMPT0ic3JbMC05XSoiLAlOQU1FPSJzY2QlbiIsIFNZTUxJTksrPSJzciVuIgorCisjIFVTQiBkZXZpY2VzCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iYXVlclswLTldKiIsCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJjcGFkWzAtOV0qIiwJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImRhYnVzYioiLAkJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImhpZGRldioiLAkJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImxlZ291c2J0b3dlcioiLAlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0ibHBbMC05XSoiLAkJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09InR0eVVTQioiLCBcCisJQVRUUlN7cHJvZHVjdH09PSJQYWxtIEhhbmRoZWxkKnxIYW5kc3ByaW5nIFZpc29yfHBhbG1PbmUgSGFuZGhlbGQiLCBcCisJCQkJCVNZTUxJTksrPSJwaWxvdCIKKworIyB1c2Jmcy1saWtlIGRldmljZXMKK1NVQlNZU1RFTT09InVzYl9kZXZpY2UiLAlQUk9HUkFNPSIvYmluL3NoIC1jICdLPSVrOyBLPSQke0sjdXNiZGV2fTsgcHJpbnRmIGJ1cy91c2IvJSUwM2kvJSUwM2kgJCR7SyUlJSUuKn0gJCR7SyMqLn0nIiwgQUNUSU9OPT0iYWRkIiwgXAorCQkJCU5BTUU9IiVjIgorU1VCU1lTVEVNPT0idXNiIiwgRU5We0RFVlRZUEV9PT0idXNiX2RldmljZSIsCU5BTUU9ImJ1cy91c2IvJGVudntCVVNOVU19LyRlbnZ7REVWTlVNfSIKKworIyBzZXJpYWwgZGV2aWNlcworS0VSTkVMPT0iY2FwaSIsCQkJTkFNRT0iY2FwaTIwIiwgU1lNTElOSys9ImlzZG4vY2FwaTIwIgorS0VSTkVMPT0iY2FwaVswLTldKiIsCQlOQU1FPSJjYXBpLyVuIgorCisjIHZpZGVvIGRldmljZXMKK0tFUk5FTD09ImR2YioiLAkJCVBST0dSQU09Ii9iaW4vc2ggLWMgJ0s9JWs7IEs9JCR7SyNkdmJ9OyBwcmludGYgZHZiL2FkYXB0ZXIlJWkvJSVzICQke0slJSUlLip9ICQke0sjKi59IiwgQUNUSU9OPT0iYWRkIiwgXAorCQkJCU5BTUU9IiVjIgorS0VSTkVMPT0iY2FyZFswLTldKiIsCQlOQU1FPSJkcmkvJWsiCisKKyMgbWlzYyBkZXZpY2VzCitLRVJORUw9PSJod19yYW5kb20iLAkJTkFNRT0iaHdybmciCitLRVJORUw9PSJ0dW4iLAkJCU5BTUU9Im5ldC8layIKK0tFUk5FTD09ImV2dGNobiIsCQlOQU1FPSJ4ZW4vJWsiCisKK0tFUk5FTD09ImNkZW11WzAtOV0qIiwJCU5BTUU9ImNkZW11LyVuIgorS0VSTkVMPT0icGt0Y2R2ZFswLTldKiIsCU5BTUU9InBrdGNkdmQvJW4iCitLRVJORUw9PSJwa3RjZHZkIiwJCU5BTUU9InBrdGNkdmQvY29udHJvbCIKKworS0VSTkVMPT0iY3B1WzAtOV0qIiwJCU5BTUU9ImNwdS8lbi9jcHVpZCIKK0tFUk5FTD09Im1zclswLTldKiIsCQlOQU1FPSJjcHUvJW4vbXNyIgorS0VSTkVMPT0ibWljcm9jb2RlIiwJCU5BTUU9ImNwdS9taWNyb2NvZGUiCisKK0tFUk5FTD09InVtYWQqIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJpc3NtKiIsCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0idXZlcmJzKiIsCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0idWNtKiIsCQkJTkFNRT0iaW5maW5pYmFuZC8layIKK0tFUk5FTD09InJkbWFfdWNtIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCisKKyMgQUxTQSBkZXZpY2VzCitLRVJORUw9PSJjb250cm9sQ1swLTldKiIsCU5BTUU9InNuZC8layIKK0tFUk5FTD09Imh3Q1tEMC05XSoiLAkJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0icGNtQ1tEMC05Y3BdKiIsCU5BTUU9InNuZC8layIKK0tFUk5FTD09Im1pZGlDW0QwLTldKiIsCQlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJ0aW1lciIsCQlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJzZXEiLAkJCU5BTUU9InNuZC8layIKKworIyBpZWVlMTM5NCBkZXZpY2VzICAgICAgIAorS0VSTkVMPT0iZHYxMzk0KiIsCQlOQU1FPSJkdjEzOTQvJW4iCitLRVJORUw9PSJ2aWRlbzEzOTQqIiwJCU5BTUU9InZpZGVvMTM5NC8lbiIKKworIyBpbnB1dCBkZXZpY2VzCitLRVJORUw9PSJtaWNlIiwJCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09Im1vdXNlWzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0iZXZlbnRbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJqc1swLTldKiIsCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09InRzWzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0idWlucHV0IiwJCU5BTUU9ImlucHV0LyVrIgorCisjIFphcHRlbAorS0VSTkVMPT0iemFwY3RsIiwJCU5BTUU9InphcC9jdGwiCitLRVJORUw9PSJ6YXB0aW1lciIsCQlOQU1FPSJ6YXAvdGltZXIiCitLRVJORUw9PSJ6YXBjaGFubmVsIiwJCU5BTUU9InphcC9jaGFubmVsIgorS0VSTkVMPT0iemFwcHNldWRvIiwJCU5BTUU9InphcC9wc2V1ZG8iCitLRVJORUw9PSJ6YXBbMC05XSoiLAkJTkFNRT0iemFwLyVuIgorCisjIEFPRSBjaGFyYWN0ZXIgZGV2aWNlcworU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0iZGlzY292ZXIiLAlOQU1FPSJldGhlcmQvJWsiCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJlcnIiLAlOQU1FPSJldGhlcmQvJWsiCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJpbnRlcmZhY2VzIiwJTkFNRT0iZXRoZXJkLyVrIgorU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0icmV2YWxpZGF0ZSIsCU5BTUU9ImV0aGVyZC8layIKKworIyBkZXZpY2UgbWFwcGVyIGNyZWF0ZXMgaXRzIG93biBkZXZpY2Ugbm9kZXMsIHNvIGlnbm9yZSB0aGVzZQorS0VSTkVMPT0iZG0tWzAtOV0qIiwJCU9QVElPTlMrPSJpZ25vcmVfZGV2aWNlIgorS0VSTkVMPT0iZGV2aWNlLW1hcHBlciIsCU5BTUU9Im1hcHBlci9jb250cm9sIgorCitLRVJORUw9PSJyZmNvbW1bMC05XSoiLCBOQU1FPSIlayIsIEdST1VQPSJ1c2VycyIsIE1PREU9IjA2NjAiCisKKyMgRmlybXdhcmUgSGVscGVyCitBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJmaXJtd2FyZSIsIFJVTis9Ii9saWIvdWRldi9maXJtd2FyZS5zaCIKKworIyBTYW1zdW5nIFVBUlRTCitLRVJORUw9PSJzM2MyNDEwX3NlcmlhbFswLTldIiwgICBOQU1FPSJ0dHlTQUMlbiIKKworIyBNWEMgVUFSVHMKK0tFUk5FTD09InR0eW14Y1swLTRdIiwgICBOQU1FPSJ0dHlteGMlbiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTYzNTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldl8xODIuYmIKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlIHVkZXYuaW5jCisKK1BSID0gInI5IgorCisjIG1vZHVsZS1pbml0LXRvb2xzIGZyb20ga21vZF9naXQgd2lsbCBwcm92aWRlIGxpYmttb2QgcnVudGltZQorREVQRU5EUyArPSAibW9kdWxlLWluaXQtdG9vbHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYjk2NDQ1NjE3N2ZiZjQ4MDIzZGZlZTdkYjNhNzA4ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ODU3ZWQxOWZhZmQ4ZjNjYThkZTQxMDE5NGU4YzczMzZlOWViOGEyMDYyNmVhOGE0YmE2NDQ5YjAxN2ZhYmE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvYWRkLXZlcmJvc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0NDNmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvYWRkLXZlcmJvc2UucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSB1cGRhdGUtcmMuZC91cGRhdGUtcmMuZC5vcmcJMjAwNS0wMS0wMyAwMDozMDo0Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyB1cGRhdGUtcmMuZC91cGRhdGUtcmMuZAkyMDA3LTEyLTAxIDE5OjQxOjA4LjAwMDAwMDAwMCArMDIwMAorQEAgLTE5LDYgKzE5LDcgQEAKKyBub3RyZWFsbHk9MAorIGZvcmNlPTAKKyBkb3N0YXJ0PTAKKyt2ZXJib3NlPTAKKyAKKyB1c2FnZSgpCisgeworQEAgLTI4LDYgKzI5LDcgQEAKKyAgICAgICAgdXBkYXRlLXJjLmQgWy1uXSBbLXIgPHJvb3Q+XSBbLXNdIDxiYXNlbmFtZT4gc3RhcnR8c3RvcCBOTiBydW5sdmwgW3J1bmx2bF0gWy4uLl0gLgorIAkJLW46IG5vdCByZWFsbHkKKyAJCS1mOiBmb3JjZQorKwkJLXY6IHZlcmJvc2UKKyAJCS1yOiBhbHRlcm5hdGUgcm9vdCBwYXRoIChkZWZhdWx0IGlzIC8pCisgCQktczogaW52b2tlIHN0YXJ0IG1ldGhvZHMgaWYgYXBwcm9wcmlhdGUgdG8gY3VycmVudCBydW5sZXZlbAorIEVPRgorQEAgLTY5LDcgKzcxLDcgQEAKKyAJbGV2PWBlY2hvICQyIHwgY3V0IC1kLyAtZjFgCisgCW5uPWBlY2hvICQyIHwgY3V0IC1kLyAtZjJgCisgCWZuPSIke2V0Y2R9JHtsZXZ9LmQvJHtzdGFydHN0b3B9JHtubn0ke2JufSIKKy0JZWNobyAiICAkZm4gLT4gLi4vaW5pdC5kLyRibiIKKysJWyAkdmVyYm9zZSAtZXEgMSBdICYmIGVjaG8gIiAgJGZuIC0+IC4uL2luaXQuZC8kYm4iCisgCWlmIFsgJG5vdHJlYWxseSAtZXEgMCBdOyB0aGVuCisgCQlta2RpciAtcCBgZGlybmFtZSAkZm5gCisgIAkJbG4gLXMgLi4vaW5pdC5kLyRibiAkZm4KK0BAIC04OSw3ICs5MSw3IEBACisgCQlleGl0IDAKKyAJZmkKKyAKKy0JZWNobyAiIEFkZGluZyBzeXN0ZW0gc3RhcnR1cCBmb3IgJGluaXRkLyRibiAuLi4iCisrCWVjaG8gIiBBZGRpbmcgc3lzdGVtIHN0YXJ0dXAgZm9yICRpbml0ZC8kYm4uIgorIAorIAlmb3IgaSBpbiAkc3RhcnRsaW5rczsgZG8KKyAJCWRvbGluayBTICRpCitAQCAtMTA1LDYgKzEwNywxMCBAQAorIAkJCXNoaWZ0CisgCQkJY29udGludWUKKyAJCQk7OworKwkJLXYpCXZlcmJvc2U9MQorKwkJCXNoaWZ0CisrCQkJY29udGludWUKKysJCQk7OworIAkJLWYpCWZvcmNlPTEKKyAJCQlzaGlmdAorIAkJCWNvbnRpbnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTE3MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitDaGVjayBpZiBzeW1saW5rcyBhcmUgdmFsaWQKKworV2hlbiB1c2luZyByb290IG9wdGlvbiBhbmQgJGluaXRkLyRibiBpcyBhIHN5bWxpbmssIHRoZSBzY3JpcHQgd291bGQgZmFpbCBiZWNhdXNlCit0aGUgc3ltbGluayBwb2ludHMgdG8gYSBwYXRoIG9uIHRhcmdldC4gRm9yIGV4YW1wbGU6CisKKy9wYXRoL3RvL3RhcmdldC9yb290ZnMvZXRjL2luaXQuZC9zeXNsb2cgLT4gL2V0Yy9pbml0LmQvc3lzbG9nLmJ1c3lib3gKKworSGVuY2UsIFsgLWYgL3BhdGgvdG8vdGFyZ2V0L3Jvb3Rmcy9ldGMvaW5pdC5kL3N5c2xvZyBdIGNvbmRpdGlvbiB3b3VsZCByZXR1cm4KK2ZhbHNlLgorCitUaGlzIHBhdGNoIGFkZHMgdGhlIHBvc2liaWxpdHkgdG8gY2hlY2sgd2hldGhlciB0aGUgZmlsZSB0aGUgc3ltbGluayBwb2ludHMgdG8KK2FjdHVhbGx5IGV4aXN0cyBpbiByb290ZnMgcGF0aCBhbmQgdGhlbiBjb250aW51ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4gCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCitJbmRleDogZ2l0L3VwZGF0ZS1yYy5kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdXBkYXRlLXJjLmQKKysrKyBnaXQvdXBkYXRlLXJjLmQKK0BAIC0xNDcsMTMgKzE0NywzNCBAQCBmaQorIGJuPSQxCisgc2hpZnQKKyAKKytzbj0kaW5pdGQvJGJuCisraWYgWyAtTCAiJHNuIiAtYSAtbiAiJHJvb3QiIF07IHRoZW4KKysJaWYgd2hpY2ggcmVhZGxpbmsgPi9kZXYvbnVsbDsgdGhlbgorKwkJd2hpbGUgdHJ1ZTsgZG8KKysJCQlsaW5rc249IiQocmVhZGxpbmsgIiRzbiIpIgorKwkJCWlmIFsgLXogIiRsaW5rc24iIF07IHRoZW4KKysJCQkJYnJlYWsKKysJCQlmaQorKworKwkJCXNuPSIkbGlua3NuIgorKwkJCWNhc2UgIiRzbiIgaW4KKysJCQkJLyopIHNuPSIkcm9vdCRzbiIgOzsKKysJCQkJKikgIHNuPSIkaW5pdGQvJHNuIiA7OworKwkJCWVzYWMKKysJCWRvbmUKKysJZWxzZQorKwkJZWNobyAidXBkYXRlLXJjLmQ6IHJlYWRsaW5rIHRvb2wgbm90IHByZXNlbnQsIGNhbm5vdCBjaGVjayB3aGV0aGVyIFwKKysJCQkJJHNuIHN5bWxpbmsgcG9pbnRzIHRvIGEgdmFsaWQgZmlsZS4iID4mMgorKwlmaQorK2ZpCisrCisgaWYgWyAkMSAhPSAicmVtb3ZlIiBdOyB0aGVuCistCWlmIFsgISAtZiAiJGluaXRkLyRibiIgXTsgdGhlbgorKwlpZiBbICEgLWYgIiRzbiIgXTsgdGhlbgorIAkJZWNobyAidXBkYXRlLXJjLmQ6ICRpbml0ZC8kYm46IGZpbGUgZG9lcyBub3QgZXhpc3QiID4mMgorIAkJZXhpdCAxCisgCWZpCisgZWxzZQorLQlpZiBbIC1mICIkaW5pdGQvJGJuIiBdOyB0aGVuCisrCWlmIFsgLWYgIiRzbiIgXTsgdGhlbgorIAkJaWYgWyAkZm9yY2UgLWVxIDEgXTsgdGhlbgorIAkJCWVjaG8gInVwZGF0ZS1yYy5kOiAkaW5pdGQvJGJuIGV4aXN0cyBkdXJpbmcgcmMuZCBwdXJnZSAoY29udGludWluZykiID4mMgorIAkJZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmMyMzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2ZpeC10by1oYW5kbGUtcHJpb3JpdHktbnVtYmVycy1jb3JyZWN0bHkucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeCB0byBoYW5kbGUgcHJpb3JpdHkgbnVtYmVycyBjb3JyZWN0bHkuCitQcmV2aW91c2x5LCBpZiB0aGUgcHJpb3JpdHkgbnVtYmVyIGlzICcwOCcgb3IgJzA5JywgZm9yIGV4YW1wbGUsCit0aGUgc2NyaXB0IGNhbm5vdCBoYW5kbGUgdGhlbSBjb3JyZWN0bHkgYXMgdGhlc2UgbnVtYmVycyBhcmUgdHJlYXRlZAorYXMgb2N0YWwgbnVtYmVycy4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgdXBkYXRlLXJjLmQgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91cGRhdGUtcmMuZCBiL3VwZGF0ZS1yYy5kCitpbmRleCBlYzUwZDE1Li5jNzBiODU5IDEwMDY0NAorLS0tIGEvdXBkYXRlLXJjLmQKKysrKyBiL3VwZGF0ZS1yYy5kCitAQCAtMjA1LDcgKzIwNSw3IEBAIGNhc2UgJDEgaW4KKyAJCQkJZXhpdCAxCisgCQkJZmkKKyAJCQlzaGlmdAorLQkJCU5OPWBwcmludGYgJTAyZCAkMWAKKysJCQlOTj1gcHJpbnRmICUwMmQgJChleHByICQxICsgMClgCisgCQkJc2hpZnQKKyAJCQl3aGlsZSBbICJ4JDEiICE9ICJ4LiIgXTsgZG8KKyAJCQkJaWYgWyAkIyAtZXEgMCBdOyB0aGVuCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVjYjc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJtYW5hZ2Ugc3ltbGlua3MgaW4gL2V0Yy9yY04uZCIKK0RFU0NSSVBUSU9OID0gInVwZGF0ZS1yYy5kIGlzIGEgdXRpbGl0aWVzIHRoYXQgYWxsb3dzIHRoZSBtYW5hZ2VtZW50IG9mIHN5bWxpbmtzIHRvIHRoZSBpbml0c2NyaXB0cyBpbiB0aGUgL2V0Yy9yY04uZCBkaXJlY3Rvcnkgc3RydWN0dXJlLiIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly91cGRhdGUtcmMuZDtiZWdpbmxpbmU9NTtlbmRsaW5lPTE1O21kNT0xNDhhNDgzMjFiMTBlYjM3YzFmYTNlZTAyYjk0MGE3NSIKKworUFIgPSAicjUiCisKKyMgUmV2aXNpb24gY29ycmVzcG9uZGluZyB0byB0YWcgdXBkYXRlLXJjLmRfMC43CitTUkNSRVYgPSAiZWNhNjgwZGRmMjhkMDI0OTU0ODk1ZjU5YTI0MWE2MjJkZDU3NWMxMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3BoaWxiL3VwZGF0ZS1yYy5kLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtdmVyYm9zZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVjay1pZi1zeW1saW5rcy1hcmUtdmFsaWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXRvLWhhbmRsZS1wcmlvcml0eS1udW1iZXJzLWNvcnJlY3RseS5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGFsbGFyY2gKKworZG9fY29tcGlsZSgpIHsKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vdXBkYXRlLXJjLmQgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLXJjLmQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwNzJiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYwpAQCAtMCwwICsxLDI2OCBAQAorU1VNTUFSWSA9ICJBIHN1aXRlIG9mIGJhc2ljIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJVdGlsLWxpbnV4IGluY2x1ZGVzIGEgc3VpdGUgb2YgYmFzaWMgc3lzdGVtIGFkbWluaXN0cmF0aW9uIHV0aWxpdGllcyBcCitjb21tb25seSBmb3VuZCBvbiBtb3N0IExpbnV4IHN5c3RlbXMuICBTb21lIG9mIHRoZSBtb3JlIGltcG9ydGFudCB1dGlsaXRpZXMgaW5jbHVkZSBcCitkaXNrIHBhcnRpdGlvbmluZywga2VybmVsIG1lc3NhZ2UgbWFuYWdlbWVudCwgZmlsZXN5c3RlbSBjcmVhdGlvbiwgYW5kIHN5c3RlbSBsb2dpbi4iCisKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBCU0QiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5saWNlbnNpbmc7bWQ1PTE3MTVmNWVlM2UwMTIwM2NhMWUxZTBiOWVlNjU5MThjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLkxHUEx2Mi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Eb2N1bWVudGF0aW9uL2xpY2Vuc2VzL0NPUFlJTkcuQlNELTM7bWQ1PTU4ZGNkODQ1MjY1MWZjOGIwN2QxZjY1Y2UwN2NhOGFmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5VQ0I7bWQ1PTI2Mzg2MGY4OTY4ZDhiYWZhNTM5MmNhYjc0Mjg1MjYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYnV1aWQvQ09QWUlORzttZDU9YjQ0MmZmYjc2MmNmOGQzZTlkZjFiOTllMGJiNGFmNzAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibW91bnQvQ09QWUlORzttZDU9ZmI5M2YwMWQ0MzYxMDY5YzU2MTYzMjc3MDUzNzNiMTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliYmxraWQvQ09QWUlORzttZDU9ZmI5M2YwMWQ0MzYxMDY5YzU2MTYzMjc3MDUzNzNiMTYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLWFsdGVybmF0aXZlcyBweXRob24tZGlyCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgbHpvLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbHpvLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3V0aWwtbGludXgvdiR7TUFKT1JfVkVSU0lPTn0vdXRpbC1saW51eC0ke1BWfS50YXIueHogXAorICAgICAgICAgICAiCisKK1BBQ0tBR0VTID0rICJ1dGlsLWxpbnV4LWFnZXR0eSB1dGlsLWxpbnV4LWZkaXNrIHV0aWwtbGludXgtY2ZkaXNrIHV0aWwtbGludXgtc2ZkaXNrIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LXN3YXBvbm9mZiB1dGlsLWxpbnV4LWxvc2V0dXAgdXRpbC1saW51eC11bW91bnQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtbW91bnQgdXRpbC1saW51eC1yZWFkcHJvZmlsZSB1dGlsLWxpbnV4LXV1aWRkIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LXV1aWRnZW4gdXRpbC1saW51eC1sc2NwdSB1dGlsLWxpbnV4LWZzY2sgdXRpbC1saW51eC1ibGtpZCBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1ta2ZzIHV0aWwtbGludXgtbWNvb2tpZSB1dGlsLWxpbnV4LXJlc2V0IFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LW1rZnMuY3JhbWZzIHV0aWwtbGludXgtZnNjay5jcmFtZnMgdXRpbC1saW51eC1mc3RyaW0gXAorICAgICAgICAgICAgIHV0aWwtbGludXgtcGFydHggJHtQTn0tYmFzaC1jb21wbGV0aW9uIHV0aWwtbGludXgtaHdjbG9jayBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1maW5kZnMgdXRpbC1saW51eC1nZXRvcHQgdXRpbC1saW51eC1zdWxvZ2luIgorUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5bGlibW91bnQnLCAndXRpbC1saW51eC1weWxpYm1vdW50JywgJycsIGQpfSIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJedXRpbC1saW51eC1saWIuKiIKKworU0hBUkVEX0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1tYWtlaW5zdGFsbC1jaG93biBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWtpbGwgLS1lbmFibGUtbGFzdCAtLWVuYWJsZS1tZXNnIC0tZW5hYmxlLXBhcnR4IFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtcmF3IC0tZW5hYmxlLXJlc2V0IC0tZGlzYWJsZS1sb2dpbiBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12aXB3IC0tZGlzYWJsZS1uZXdncnAgLS1kaXNhYmxlLWNoZm4tY2hzaCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXdyaXRlIC0tZW5hYmxlLW1vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtbGlidXVpZCAtLWVuYWJsZS1saWJibGtpZCAtLWVuYWJsZS1mc2NrIC0td2l0aG91dC11ZGV2IFwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNyc2Jpbl9leGVjZGlyPScke3NiaW5kaXJ9JyBcCisiCisKK0VYVFJBX09FQ09ORiA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IC0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IgorCitQQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS1zdSAtLWVuYWJsZS1ydW51c2VyLC0tZGlzYWJsZS1zdSAtLWRpc2FibGUtcnVudXNlciwgbGlicGFtLCIKKworIyBSZXNwZWN0IHRoZSBzeXN0ZW1kIGZlYXR1cmUgZm9yIHV1aWRkCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kIC0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywgLS13aXRob3V0LXN5c3RlbWQgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyLHN5c3RlbWQiCisKKyMgQnVpbGQgc2V0cHJpdiByZXF1aXJlcyBsaWJjYXAtbmcKK1BBQ0tBR0VDT05GSUdbbGliY2FwLW5nXSA9ICItLWVuYWJsZS1zZXRwcml2LC0tZGlzYWJsZS1zZXRwcml2LGxpYmNhcC1uZywiCisKKyMgQnVpbGQgcHl0aG9uIGJpbmRpbmdzIGZvciBsaWJtb3VudAorUEFDS0FHRUNPTkZJR1tweWxpYm1vdW50XSA9ICItLXdpdGgtcHl0aG9uIC0tZW5hYmxlLXB5bGlibW91bnQsLS13aXRob3V0LXB5dGhvbiAtLWRpc2FibGUtcHlsaWJtb3VudCxweXRob24iCisKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiArPSAiJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24iCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vZ2V0b3B0L2dldG9wdC0qLioiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9weWxpYm1vdW50LmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50Ly5kZWJ1Zy8iCisKK0ZJTEVTX3V0aWwtbGludXgtYWdldHR5ID0gIiR7YmFzZV9zYmluZGlyfS9hZ2V0dHkiCitGSUxFU191dGlsLWxpbnV4LWZkaXNrID0gIiR7YmFzZV9zYmluZGlyfS9mZGlzay4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LWZzdHJpbSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnN0cmltIgorRklMRVNfdXRpbC1saW51eC1jZmRpc2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2NmZGlzayIKK0ZJTEVTX3V0aWwtbGludXgtc2ZkaXNrID0gIiR7c2JpbmRpcn0vc2ZkaXNrIgorRklMRVNfdXRpbC1saW51eC1zd2Fwb25vZmYgPSAiJHtiYXNlX3NiaW5kaXJ9L3N3YXBvbi4ke0JQTn0gJHtiYXNlX3NiaW5kaXJ9L3N3YXBvZmYuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1sb3NldHVwID0gIiR7YmFzZV9zYmluZGlyfS9sb3NldHVwLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtbW91bnQgPSAiJHtiYXNlX2JpbmRpcn0vbW91bnQuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1tY29va2llID0gIiR7YmluZGlyfS9tY29va2llIgorRklMRVNfdXRpbC1saW51eC11bW91bnQgPSAiJHtiYXNlX2JpbmRpcn0vdW1vdW50LiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtcmVhZHByb2ZpbGUgPSAiJHtzYmluZGlyfS9yZWFkcHJvZmlsZS4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LXV1aWRnZW4gPSAiJHtiaW5kaXJ9L3V1aWRnZW4iCitGSUxFU191dGlsLWxpbnV4LXV1aWRkID0gIiR7c2JpbmRpcn0vdXVpZGQiCitGSUxFU191dGlsLWxpbnV4LXJlc2V0ID0gIiR7YmFzZV9iaW5kaXJ9L3Jlc2V0IgorRklMRVNfdXRpbC1saW51eC1wYXJ0eCA9ICIke3NiaW5kaXJ9L3BhcnR4IgorRklMRVNfdXRpbC1saW51eC1od2Nsb2NrID0gIiR7YmFzZV9zYmluZGlyfS9od2Nsb2NrLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtZmluZGZzID0gIiR7c2JpbmRpcn0vZmluZGZzIgorRklMRVNfdXRpbC1saW51eC1nZXRvcHQgPSAiJHtiYXNlX2JpbmRpcn0vZ2V0b3B0LiR7QlBOfSIKKworRklMRVNfdXRpbC1saW51eC1weWxpYm1vdW50ID0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvcHlsaWJtb3VudC5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9fX2luaXRfXy4qIgorRklMRVNfdXRpbC1saW51eC1sc2NwdSA9ICIke2JpbmRpcn0vbHNjcHUiCisKK0ZJTEVTX3V0aWwtbGludXgtZnNjayA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjayoiCitGSUxFU191dGlsLWxpbnV4LW1rZnMgPSAiJHtzYmluZGlyfS9ta2ZzIgorCitGSUxFU191dGlsLWxpbnV4LWZzY2suY3JhbWZzID0gIiR7c2JpbmRpcn0vZnNjay5jcmFtZnMiCitGSUxFU191dGlsLWxpbnV4LW1rZnMuY3JhbWZzID0gIiR7c2JpbmRpcn0vbWtmcy5jcmFtZnMiCisKK0ZJTEVTX3V0aWwtbGludXgtc3Vsb2dpbiA9ICIke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbioiCisKKyMgVXRpbC1saW51eCcgYmxraWQgcmVwbGFjZXMgdGhlIGUyZnNwcm9ncyBvbmUKK0ZJTEVTX3V0aWwtbGludXgtYmxraWQgPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsa2lkKiIKK1JDT05GTElDVFNfdXRpbC1saW51eC1ibGtpZCA9ICJlMmZzcHJvZ3MtYmxraWQiCitSUkVQTEFDRVNfdXRpbC1saW51eC1ibGtpZCA9ICJlMmZzcHJvZ3MtYmxraWQiCisKKyMgcmVzZXQgY2FsbHMgJ3RwdXQnCitSREVQRU5EU191dGlsLWxpbnV4LXJlc2V0ICs9ICJuY3Vyc2VzIgorCitSREVQRU5EU18ke1BOfSA9ICJ1dGlsLWxpbnV4LXVtb3VudCB1dGlsLWxpbnV4LXN3YXBvbm9mZiB1dGlsLWxpbnV4LWxvc2V0dXAgdXRpbC1saW51eC1zdWxvZ2luIgorUlJFQ09NTUVORFNfJHtQTn0gPSAidXRpbC1saW51eC1mZGlzayB1dGlsLWxpbnV4LWNmZGlzayB1dGlsLWxpbnV4LXNmZGlzayB1dGlsLWxpbnV4LW1vdW50IHV0aWwtbGludXgtcmVhZHByb2ZpbGUgdXRpbC1saW51eC1ta2ZzICIKKworUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKKworUlBST1ZJREVTXyR7UE59LWRldiA9ICJ1dGlsLWxpbnV4LWxpYmJsa2lkLWRldiB1dGlsLWxpbnV4LWxpYm1vdW50LWRldiB1dGlsLWxpbnV4LWxpYnV1aWQtZGV2IgorCisjU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS11dWlkZCAke1BOfS1mc3RyaW0iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tdXVpZGQgPSAidXVpZGQuc29ja2V0IHV1aWRkLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LXV1aWRkID0gImRpc2FibGUiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tZnN0cmltID0gImZzdHJpbS50aW1lciBmc3RyaW0uc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tZnN0cmltID0gImRpc2FibGUiCisKK2RvX2NvbXBpbGUgKCkgeworCXNldCAtZQorCW9lX3J1bm1ha2UgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUFU9IENQVU9QVD0gJ09QVD0ke0NGTEFHU30nIAorfQorCitkb19pbnN0YWxsICgpIHsKKwkjIHdpdGggY2NhY2hlIHRoZSB0aW1lc3RhbXBzIG9uIGNvbXBpbGVkIGZpbGVzIG1heQorCSMgZW5kIHVwIGVhcmxpZXIgdGhhbiBvbiB0aGVpciBpbnB1dHMsIHRoaXMgYWxsb3dzCisJIyBmb3IgdGhlIHJlc3VsdGFudCBjb21waWxhdGlvbiBpbiB0aGUgaW5zdGFsbCBzdGVwLgorCW9lX3J1bm1ha2UgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUFU9IENQVU9QVD0gXAorCQknT1BUPSR7Q0ZMQUdTfScgJ0NDPSR7Q0N9JyAnTEQ9JHtMRH0nIFwKKwkJJ0xERkxBR1M9JHtMREZMQUdTfScgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisKKyAgICAgICAgc2JpbnByb2dzPSJhZ2V0dHkgY3RybGFsdGRlbCBjZmRpc2sgdmlwdyB2aWdyIgorICAgICAgICBzYmlucHJvZ3NfYT0icGl2b3Rfcm9vdCBod2Nsb2NrIG1rc3dhcCBta2ZzLm1pbml4IGZzY2subWluaXggbG9zZXR1cCBzd2Fwb24gc3dhcG9mZiBmZGlzayBmc2NrIGJsa2lkIGJsb2NrZGV2IGZzdHJpbSBzdWxvZ2luIHN3aXRjaF9yb290IgorICAgICAgICBiaW5wcm9nc19hPSJkbWVzZyBnZXRvcHQga2lsbCBtb3JlIHVtb3VudCBtb3VudCBsb2dpbiByZXNldCBzdSIKKworICAgICAgICBpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIke3NiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgIAlta2RpciAtcCAke0R9JHtiYXNlX3NiaW5kaXJ9CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gJHNiaW5wcm9ncyAkc2JpbnByb2dzX2E7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1mICIke0R9JHtzYmluZGlyfS8kcCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdiAiJHtEfSR7c2JpbmRpcn0vJHAiICIke0R9JHtiYXNlX3NiaW5kaXJ9LyRwIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgWyAiJHtiYXNlX2JpbmRpcn0iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgCW1rZGlyIC1wICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICAgICAgICAgIGZvciBwIGluICRiaW5wcm9nc19hOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAtZiAiJHtEfSR7YmluZGlyfS8kcCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdiAiJHtEfSR7YmluZGlyfS8kcCIgIiR7RH0ke2Jhc2VfYmluZGlyfS8kcCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0LworCWVjaG8gJ01PVU5UQUxMPSItdCBub25mcyxub3NtYmZzLG5vbmNwZnMiJyA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvbW91bnRhbGwKKworCXJtIC1mICR7RH0ke2JpbmRpcn0vY2hrZHVwZXhlCit9CisKKyMgcmVzZXQgYW5kIG5vbG9naW4gY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBuY3Vyc2VzLW5hdGl2ZSBhbmQgc2hhZG93LW5hdGl2ZQorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlybSAtZiAke0R9JHtiYXNlX2JpbmRpcn0vcmVzZXQKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L25vbG9naW4KK30KKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSAgPSAiZG1lc2cga2lsbCBtb3JlIG1rc3dhcCBibG9ja2RldiBwaXZvdF9yb290IHN3aXRjaF9yb290IgorQUxURVJOQVRJVkVfJHtQTn0gKz0gIm1rZnMubWluaXggaGV4ZHVtcCBsYXN0IGxhc3RiIGxvZ2dlciBtZXNnIHJlbmljZSB3YWxsIgorQUxURVJOQVRJVkVfJHtQTn0gKz0gInNldHNpZCBjaHJ0IGZsb2NrIHV0bXBkdW1wIGVqZWN0IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZG1lc2ddID0gIiR7YmFzZV9iaW5kaXJ9L2RtZXNnIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGxdID0gIiR7YmFzZV9iaW5kaXJ9L2tpbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW9yZV0gPSAiJHtiYXNlX2JpbmRpcn0vbW9yZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtta3N3YXBdID0gIiR7YmFzZV9zYmluZGlyfS9ta3N3YXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxvY2tkZXZdID0gIiR7YmFzZV9zYmluZGlyfS9ibG9ja2RldiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwaXZvdF9yb290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcGl2b3Rfcm9vdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzd2l0Y2hfcm9vdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N3aXRjaF9yb290IgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rZnMubWluaXhdID0gIiR7YmFzZV9zYmluZGlyfS9ta2ZzLm1pbml4IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2VqZWN0XSA9ICIke2JpbmRpcn0vZWplY3QiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJtb3VudHBvaW50LjEgbGFzdC4xIGxhc3RiLjEgbWVzZy4xIHdhbGwuMSBub2xvZ2luLjggc3Vsb2dpbi44IHV0bXBkdW1wLjEgcmVzZXQuMSBraWxsLjEgbGliYmxraWQuMyBibGtpZC44IGZpbmRmcy44IGZzY2suOCB1dWlkLjMiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYXN0LjFdID0gIiR7bWFuZGlyfS9tYW4xL2xhc3QuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYXN0Yi4xXSA9ICIke21hbmRpcn0vbWFuMS9sYXN0Yi4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21lc2cuMV0gPSAiJHttYW5kaXJ9L21hbjEvbWVzZy4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vdW50cG9pbnQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbW91bnRwb2ludC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW25vbG9naW4uOF0gPSAiJHttYW5kaXJ9L21hbjgvbm9sb2dpbi44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Jlc2V0LjFdID0gIiR7bWFuZGlyfS9tYW4xL3Jlc2V0LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3Vsb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9zdWxvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXRtcGR1bXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXRtcGR1bXAuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt3YWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL3dhbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL2tpbGwuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsaWJibGtpZC4zXSA9ICIke21hbmRpcn0vbWFuMy9saWJibGtpZC4zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jsa2lkLjhdID0gIiR7bWFuZGlyfS9tYW44L2Jsa2lkLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmluZGZzLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZpbmRmcy44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZzY2suOF0gPSAiJHttYW5kaXJ9L21hbjgvZnNjay44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3V1aWQuM10gPSAiJHttYW5kaXJ9L21hbjMvdXVpZC4zIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWh3Y2xvY2sgPSAiaHdjbG9jayIKKyMgVGhlcmUgc2VlbXMgdG8gYmUgcHJvYmxlbSwgYXRsZWFzdCBvbiBuc2x1Miwgd2l0aCB0aGVzZSwgdW50aWxsIHRoZXkgYXJlCisjIGZpeGVkIHRoZSBidXN5Ym94IG9uZXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHkKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2h3Y2xvY2tdID0gIjEwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2h3Y2xvY2tdID0gIiR7YmFzZV9zYmluZGlyfS9od2Nsb2NrIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWZkaXNrID0gImZkaXNrIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZkaXNrXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZmRpc2siCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtYWdldHR5ID0gImdldHR5IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHR5XSA9ICIke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkiCitBTFRFUk5BVElWRV9UQVJHRVRbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9hZ2V0dHkiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtbW91bnQgPSAibW91bnQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRdID0gIiR7YmFzZV9iaW5kaXJ9L21vdW50IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXVtb3VudCA9ICJ1bW91bnQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdW1vdW50XSA9ICIke2Jhc2VfYmluZGlyfS91bW91bnQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtcmVhZHByb2ZpbGUgPSAicmVhZHByb2ZpbGUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVhZHByb2ZpbGVdID0gIiR7c2JpbmRpcn0vcmVhZHByb2ZpbGUiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtbG9zZXR1cCA9ICJsb3NldHVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xvc2V0dXBdID0gIiR7YmFzZV9zYmluZGlyfS9sb3NldHVwIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXN3YXBvbm9mZiA9ICJzd2Fwb2ZmIHN3YXBvbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzd2Fwb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dhcG9mZiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzd2Fwb25dID0gIiR7YmFzZV9zYmluZGlyfS9zd2Fwb24iCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtZnNjayA9ICJmc2NrLm1pbml4IGZzY2siCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay5taW5peF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2ZzY2subWluaXgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNja10gPSAiJHtiYXNlX3NiaW5kaXJ9L2ZzY2siCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtYmxraWQgPSAiYmxraWQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxraWRdID0gIiR7YmFzZV9zYmluZGlyfS9ibGtpZCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1yZXNldCA9ICJyZXNldCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZXNldF0gPSAiJHtiaW5kaXJ9L3Jlc2V0IgorQUxURVJOQVRJVkVfVEFSR0VUW3Jlc2V0XSA9ICIke2Jhc2VfYmluZGlyfS9yZXNldCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1nZXRvcHQgPSAiZ2V0b3B0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldG9wdF0gPSAiJHtiYXNlX2JpbmRpcn0vZ2V0b3B0IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXN1bG9naW4gPSAic3Vsb2dpbiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kICgpIHsKKyAgICBpZiAnLS1lbmFibGUtc3UnIGluIGQuZ2V0VmFyKCdFWFRSQV9PRUNPTkYnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBhbHRfbmFtZSA9ICJzdSIKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgYWx0X25hbWUpKQorICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMnICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpKSwgJyAnICsgYWx0X25hbWUpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsICcke2Jhc2VfbGliZGlyfScsICdebGliKC4qKVwuc29cLi4qJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J3V0aWwtbGludXgtbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSd1dGlsLWxpbnV4IGxpYiVzJywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnLCBwcmVwZW5kPVRydWUsIGFsbG93X2xpbmtzPVRydWUpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YjFmZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaApAQCAtMCwwICsxLDIzIEBACit1dGlsLWxpbnV4OiB0YWtlICR7c2JpbmRpcn0gZnJvbSB0aGUgZW52aXJvbm1lbnQgaWYgaXQgaXMgc2V0IHRoZXJlCitmaXggdGhlIHRlc3QsIHRoZSBbIF0gc3ludGF4IHdhcyBnZXR0aW5nIGVhdGVuIGJ5IGF1dG9jb25mCisKK1NpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBiQHBiY2wubmV0PgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiB1dGlsLWxpbnV4LTIuMjIuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1dGlsLWxpbnV4LTIuMjIuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworQEAgLTczLDcgKzczLDEwIEBAIEFDX1NVQlNUKFtsb2NhbHN0YXRlZGlyXSkKKyB1c3JiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vYmluJworIEFDX1NVQlNUKFt1c3JiaW5fZXhlY2Rpcl0pCisgCistdXNyc2Jpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworK2lmIHRlc3QgLXogIiR1c3JzYmluX2V4ZWNkaXIiIDsKKyt0aGVuCisrICAgdXNyc2Jpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9zYmluJworK2ZpCisgQUNfU1VCU1QoW3VzcnNiaW5fZXhlY2Rpcl0pCisgCisgY2FzZSAkbGliZGlyIGluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiMjcxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDc3NGY1NWY5ZGQyMmMwMWU0MDQxYTE4M2Q4ZGZmMTQ4MTFmMjkxMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgNCBBcHIgMjAxNCAxNzozMzowNCArMDgwMAorU3ViamVjdDogW1BBVENIXSBzeXMtdXRpbHMvTWFrZW1vZHVsZS5hbTogZml4IHBhcmFsbGVsIGJ1aWxkIGlzc3VlCisKK1RoZSBydWxlIFNFVEFSQ0hfTUFOX0xJTktTIGlzIHVzZWQgZm9yIHRoZSBmaWxlcyB1bmRlciB0aGUgc3lzLXV0aWxzCitkaXIsIGZvciBleGFtcGxlOgorCitlY2hvICIuc28gbWFuOC9zZXRhcmNoLjgiID4gc3lzLXV0aWxzL2xpbnV4MzIuOAorCitidXQgaXQgZGVwZW5kcyBvbiBub3RoaW5nIHNvIHRoYXQgdGhlIHN5cy11dGlscyBkaXIgbWF5IG5vdCBleGlzdCwgd2UKK2NhbiBjcmVhdGUgdGhlIHN5cy11dGlscyBkaXIgdG8gZml4IHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHN5cy11dGlscy9NYWtlbW9kdWxlLmFtIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zeXMtdXRpbHMvTWFrZW1vZHVsZS5hbSBiL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtCitpbmRleCA2MjY1MjgyLi42MmVhZDM3IDEwMDY0NAorLS0tIGEvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KKysrKyBiL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtCitAQCAtMTI0LDYgKzEyNCw3IEBAIG1hbl9NQU5TICs9ICQoU0VUQVJDSF9NQU5fTElOS1MpCisgQ0xFQU5GSUxFUyArPSAkKFNFVEFSQ0hfTUFOX0xJTktTKQorIAorICQoU0VUQVJDSF9NQU5fTElOS1MpOgorKwkkKE1LRElSX1ApIHN5cy11dGlscworIAkkKEFNX1ZfR0VOKWVjaG8gIi5zbyBtYW44L3NldGFyY2guOCIgPiAkQAorIAorIGluc3RhbGwtZXhlYy1ob29rLXNldGFyY2g6CistLSAKKzEuOC4yLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDMxYTczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorY29uZmlndXJlIHNob3VsZCBpbmNsdWRlIGVycm5vLmggaW5zdGVhZCBvZiBhcmdwLmggd2hlbgorY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9mIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lCit1Y2xpYmMgZGVmaW5lcyB0aGlzIHRvIGJlIGNvbnN0IGNoYXIqIHVubGlrZSB1dGlsLWxpbnV4LW5nCit3aGljaCBkZWZpbmVzIHRoaXMgdG8gYmUgY2hhciogc28gdGhpcyBlcnJvciBnb2VzIHVubm90aWNlZAorb24gZ2xpYmMvZWdsaWJjIHN5c3RlbXMuCisKK2hlcmUgaXMgdGhlIGVycm9yIGl0IGZpeGVzCisKK2luIGZpbGUgaW5jbHVkZWQgZnJvbSBtb3VudFAuaDoxNDowLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgZnJvbSBjYWNoZS5jOjI5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy9ob21lL2tyYWovd29yay9zbHVnb3MvYnVpbGQvdG1wLXNsdWdvcy11Y2xpYmMvc3lzcm9vdHMvbnNsdTJsZS91c3IvaW5jbHVkZS9lcnJuby5oOjU1OjQ2OiBlcnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yICdfX3Byb2duYW1lJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisuLi8uLi8uLi9pbmNsdWRlL2MuaDoxMTg6MTQ6IG5vdGU6IHByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICdfX3Byb2duYW1lJyB3YXMgaGVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCittYWtlWzNdOiAqKiogW2NhY2hlLmxvXSBFcnJvciAxICAgICAgICAgIAorCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV0aWwtbGludXgtMi4yMi4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCitAQCAtMzcyLDcgKzM3Miw3IEBAIGVzYWMKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUgaXMgZGVmaW5lZF0pCisgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLQkjaW5jbHVkZSA8YXJncC5oPgorKwkjaW5jbHVkZSA8ZXJybm8uaD4KKyBdXSwgW1sKKyAJcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUgPSAidGVzdCI7CisgXV0pXSwgWwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJmMjJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBmMjIwZDgwOWJlMWJhYTY1NDUwM2JmNmZmNTJmMzYzMGIwZDcwMTVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI2IE1hciAyMDE0IDAxOjMwOjI5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHN1bi5jOiB1c2UgcXNvcnQoKSB0byBpbnN0ZWFkIG9mIHFzb3J0X3IoKQorCitxc29ydF9yKCkgd2FzIGFkZGVkIHRvIGdsaWJjIGluIHZlcnNpb24gMi44LCBzbyB0aGVyZSBpcyBubyBxc29ydF9yKCkgb24KK3RoZSBob3N0IGxpa2UgQ2VudE9TIDUueC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJmZGlzay9zcmMvc3VuLmMgfCA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IHV0aWwtbGludXgtMi4yNC4yL2xpYmZkaXNrL3NyYy9zdW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV0aWwtbGludXgtMi4yNC4yLm9yaWcvbGliZmRpc2svc3JjL3N1bi5jCisrKysgdXRpbC1saW51eC0yLjI0LjIvbGliZmRpc2svc3JjL3N1bi5jCitAQCAtNDMxLDEwICs0MzEsOSBAQCBzdGF0aWMgaW50IHN1bl92ZXJpZnlfZGlza2xhYmVsKHN0cnVjdCBmCisgICAgIH0KKyAgICAgdmVyaWZ5X3N1bl9zdGFydHMgPSBzdGFydHM7CisgCistICAgIHFzb3J0X3IoYXJyYXksQVJSQVlfU0laRShhcnJheSksc2l6ZW9mKGFycmF5WzBdKSwKKy0JICAoaW50ICgqKShjb25zdCB2b2lkICosY29uc3Qgdm9pZCAqLHZvaWQgKikpIHZlcmlmeV9zdW5fY21wLAorLQkgIHZlcmlmeV9zdW5fc3RhcnRzKTsKKy0KKysgICAgcXNvcnQoYXJyYXksQVJSQVlfU0laRShhcnJheSksc2l6ZW9mKGFycmF5WzBdKSwKKysgICAgICAgICAoaW50ICgqKShjb25zdCB2b2lkICosY29uc3Qgdm9pZCAqKSkgdmVyaWZ5X3N1bl9jbXApOworKyAKKyAgICAgaWYgKGFycmF5WzBdID09IC0xKSB7CisgCWZkaXNrX2luZm8oY3h0LCBfKCJObyBwYXJ0aXRpb25zIGRlZmluZWQuIikpOworIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0OTZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1N1cHBvcnQgb2xkZXIgaG9zdHMgd2l0aCBsYXRlc3QgdXRpbC1saW51eC1uYXRpdmUKKworbWtvc3RlbXAgaXMgbm90IGRlZmluZWQgb24gb2xkZXIgbWFjaGluZXMuICBTbyB3ZSBkZXRlY3QgdGhpcyBhbmQKK3Byb3ZpZGUgYSBkZWZpbmUgdGhhdCB1c2VzIG1rc3RlbXAgaW5zdGVhZC4KKworT19DTE9FWEVDIGlzIG5vdCBkZWZpbmVkIG9uIG9sZGVyIG1hY2hpbmVzLiAgSXQgaXMgaG93ZXZlciBkZWZpbmVkCitpbiB0aGUgJ2MuaCcgaGVhZGVyLiAgRml4IHVwIHRoZSB1c2VycyB0byBpbmNsdWRlICdjLmgnLgorCitmZGlza3MvZmRpc2tzdW5sYWJlbC5jIHdhcyBtb2RpZmllZCB0byB1c2UgcXNvcnRfciwgaG93ZXZlcgordGhpcyBpcyBub3QgZGVmaW5lZCBvbiBvbGRlciBob3N0cy4gIFJldmVydDoKKyAgY29tbWl0IGM2OWJiY2E5YzFmNjY0NTA5N2JkMjBmZTNhMjFmNWE5OWEyYTA2OTgKKyAgZmRpc2s6IChzdW4pOiB1c2UgYXNrIEFQSSwgcmVtb3ZlIGdsb2JhbCB2YXJpYWJsZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorUGF0Y2hlcyByZXZlcnQgdXBzdHJlYW0gY2hhbmdlcyBpbiBvcmRlciB0byBzdXBwb3J0IG9sZGVyCittYWNoaW5lcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMSArCisgaW5jbHVkZS9jLmggIHwgNyArKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZWIzNjgwYi4uOTNlMDE1ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzE4LDYgKzMxOCw3IEBAIEFDX0NIRUNLX0ZVTkNTKFsgXAorIAlsbHNlZWsgXAorIAlsc2VlazY0IFwKKyAJbWVtcGNweSBcCisrCW1rb3N0ZW1wIFwKKyAJbmFub3NsZWVwIFwKKyAJb3Blbl9tZW1zdHJlYW0gXAorIAlwZXJzb25hbGl0eSBcCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jLmggYi9pbmNsdWRlL2MuaAoraW5kZXggZTQyM2U4Yi4uY2YzM2I5NCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvYy5oCisrKysgYi9pbmNsdWRlL2MuaAorQEAgLTIzMyw2ICsyMzMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgZGlyZmQoRElSICpkKQorICNlbmRpZgorIAorIC8qCisrICogbWtvc3RlbXAgcmVwbGFjZW1lbnQKKysgKi8KKysjaWZuZGVmIEhBVkVfTUtPU1RFTVAKKysjZGVmaW5lIG1rb3N0ZW1wKHRlbXBsYXRlLCBmbGFncykgbWtzdGVtcCh0ZW1wbGF0ZSkKKysjZW5kaWYKKysKKysvKgorICAqIE1BWEhPU1ROQU1FTEVOIHJlcGxhY2VtZW50CisgICovCisgc3RhdGljIGlubGluZSBzaXplX3QgZ2V0X2hvc3RuYW1lX21heCh2b2lkKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzczZDdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgRkhTIGluZGljYXRlcyB0aGF0IC9ldGMgbXVzdCBiZSBjYXBhYmxlIG9mIGJlaW5nIG1vdW50ZWQgUi9PLgorCitUaGUgRkhTIGFsc28gaW5kaWNhdGVzIHRoYXQgbG9jayBmaWxlcyBiZWxvbmcgaW4gL3Zhci9sb2NrLCBhbmQgL3ZhciBtdXN0CitiZSBSL1cgYXMgc29vbiBhcyBwb3NzaWJsZSBkdXJpbmcgYm9vdC4KKworVGhpcyBwYXRjaCBtb3ZlcyB0aGUgbXRhYiBsb2NrIGZpbGUgZnJvbSB0aGUgcG90ZW50aWFsbHkgUi9PIC9ldGMsIHRvIHRoZQorUi9XIC92YXIvbG9jayBhcmVhLiAgVGhpcyBsb2NrIGZpbGUgaXMgdXNlZCB3aGVuIG1vdW50aW5nIGRpc2tzIGFuZCBtYWtpbmcKK290aGVyIG1vdW50IGFkanVzdG1lbnRzLiAgVGhlIF9QQVRIX01PVU5URURfVE1QIGlzIG5vdCBhZGp1c3RlZCwgYXMgZmFpbGluZwordG8gd3JpdGUgdG8gdGhpcyBmaWxlIGRvZXMgbm90IGNhdXNlIGFueSBmdW5jdGlvbmFsIGxpbWl0YXRpb25zLgorCisoTm90ZSwgaWYgL2V0YyBpcyBSL08sIHRoZW4gL2V0Yy9tdGFiIHNob3VsZCBiZSBhIHN5bWxpbmsgdG8gL3Byb2MvbW91bnRzKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSB1dGlsLWxpbnV4LW5nLTIuMTYvaW5jbHVkZS9wYXRobmFtZXMuaC5vcmlnCisrKysgdXRpbC1saW51eC1uZy0yLjE2L2luY2x1ZGUvcGF0aG5hbWVzLmgKK0BAIC05MCw3ICs5MCw3IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgX1BBVEhfTU9VTlRFRF9MT0NLCV9QQVRIX01PVU5URUQgIn4iCisrI2RlZmluZSBfUEFUSF9NT1VOVEVEX0xPQ0sJIi92YXIvbG9jay9tdGFifiIKKyAjZGVmaW5lIF9QQVRIX01PVU5URURfVE1QCV9QQVRIX01PVU5URUQgIi50bXAiCisgCisgI2lmbmRlZiBfUEFUSF9ERVYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLXJlcGxhY2Utc2lnaW50ZXJydXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTdhNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLXJlcGxhY2Utc2lnaW50ZXJydXB0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsb2dpbi11dGlscy9sb2dpbi5jIHwgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xvZ2luLXV0aWxzL2xvZ2luLmMgYi9sb2dpbi11dGlscy9sb2dpbi5jCitpbmRleCBlYmI3NmY1Li4zOGM4ODFiIDEwMDY0NAorLS0tIGEvbG9naW4tdXRpbHMvbG9naW4uYworKysrIGIvbG9naW4tdXRpbHMvbG9naW4uYworQEAgLTExMTAsNiArMTExMCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJY2hhciAqYnVmZjsKKyAJaW50IGNoaWxkQXJnYyA9IDA7CisgCWludCByZXRjb2RlOworKwlzdHJ1Y3Qgc2lnYWN0aW9uIGFjdDsKKyAKKyAJY2hhciAqcHdkYnVmID0gTlVMTDsKKyAJc3RydWN0IHBhc3N3ZCAqcHdkID0gTlVMTCwgX3B3ZDsKK0BAIC0xMTIzLDcgKzExMjQsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXRpbWVvdXQgPSAodW5zaWduZWQgaW50KWdldGxvZ2luZGVmc19udW0oIkxPR0lOX1RJTUVPVVQiLCBMT0dJTl9USU1FT1VUKTsKKyAKKyAJc2lnbmFsKFNJR0FMUk0sIHRpbWVkb3V0KTsKKy0Jc2lnaW50ZXJydXB0KFNJR0FMUk0sIDEpOwkvKiB3ZSBoYXZlIHRvIGludGVycnVwdCBzeXNjYWxscyBsaWtlIGlvY3RsKCkgKi8KKysJKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCBOVUxMLCAmYWN0KTsKKysJYWN0LnNhX2ZsYWdzICY9IH5TQV9SRVNUQVJUOworKwlzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdCwgTlVMTCk7CisgCWFsYXJtKHRpbWVvdXQpOworIAlzaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CisgCXNpZ25hbChTSUdJTlQsIFNJR19JR04pOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3ZGM2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjYuMi5iYgpAQCAtMCwwICsxLDMwIEBACitNQUpPUl9WRVJTSU9OID0gIjIuMjYiCityZXF1aXJlIHV0aWwtbGludXguaW5jCisKKyMgVG8gc3VwcG9ydCBvbGRlciBob3N0cywgd2UgbmVlZCB0byBwYXRjaCBhbmQvb3IgcmV2ZXJ0CisjIHNvbWUgdXBzdHJlYW0gY2hhbmdlcy4gIE9ubHkgZG8gdGhpcyBmb3IgbmF0aXZlIHBhY2thZ2VzLgorT0xESE9TVCA9ICIiCitPTERIT1NUX2NsYXNzLW5hdGl2ZSA9ICJmaWxlOi8vdXRpbC1saW51eC1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL3V0aWwtbGludXgtbmF0aXZlLXFzb3J0LnBhdGNoIFwKKwkJCSIKKworU1JDX1VSSSArPSAiZmlsZTovL3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3V0aWwtbGludXgtbmctMi4xNi1tb3VudF9sb2NrX3BhdGgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VjbGliYy1fX3Byb2duYW1lLWNvbmZsaWN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtc2JpbmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgICR7T0xESE9TVH0gXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjliZGYzNjhjMzk1ZjFiNzAzMjVkMGViMjJjN2Y0OGZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMjliZGExNDI1MjhhNDhhMGE5NTNjMzlmZjYzMDkzNjUxYTQ4MDkwNDJlMTc5MGZiZDZhYTg2NjNmZDk2NjYiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJzY2FuZl9jdl9hbGxvY19tb2RpZmllcj1tcyIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZhbGxvY2F0ZSBcCisJCQkgICAgIC0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKKyIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mYWxsb2NhdGUgXAorCQkJCS0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2Q1NzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKK1RIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvbW91bnQtY29weWJpbmQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmFlYWY4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvbW91bnQtY29weWJpbmQKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIFBlcmZvcm0gYSBiaW5kIG1vdW50LCBjb3B5aW5nIGV4aXN0aW5nIGZpbGVzIGFzIHdlIGRvIHNvIHRvIGVuc3VyZSB0aGUKKyMgb3ZlcmxhaWQgcGF0aCBoYXMgdGhlIG5lY2Vzc2FyeSBjb250ZW50LgorCitpZiBbICQjIC1sdCAyIF07IHRoZW4KKyAgICBlY2hvID4mMiAiVXNhZ2U6ICQwIHNwZWMgbW91bnRwb2ludCBbT1BUSU9OU10iCisgICAgZXhpdCAxCitmaQorCitzcGVjPSQxCittb3VudHBvaW50PSQyCisKK2lmIFsgJCMgLWd0IDIgXTsgdGhlbgorICAgIG9wdGlvbnM9JDMKK2Vsc2UKKyAgICBvcHRpb25zPQorZmkKKworWyAtbiAiJG9wdGlvbnMiIF0gJiYgb3B0aW9ucz0iLCRvcHRpb25zIgorCitta2RpciAtcCAiJHtzcGVjJS8qfSIKK2lmIFsgLWQgIiRtb3VudHBvaW50IiBdOyB0aGVuCisgICAgaWYgWyAhIC1kICIkc3BlYyIgXTsgdGhlbgorICAgICAgICBta2RpciAiJHNwZWMiCisgICAgICAgIGNwIC1wUFIgIiRtb3VudHBvaW50Ii8uICIkc3BlYy8iCisgICAgZmkKK2VsaWYgWyAtZiAiJG1vdW50cG9pbnQiIF07IHRoZW4KKyAgICBpZiBbICEgLWYgIiRzcGVjIiBdOyB0aGVuCisgICAgICAgIGNwIC1wUCAiJG1vdW50cG9pbnQiICIkc3BlYyIKKyAgICBmaQorZmkKKworbW91bnQgLW8gImJpbmQkb3B0aW9ucyIgIiRzcGVjIiAiJG1vdW50cG9pbnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzMzU1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbgpAQCAtMCwwICsxLDE5IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUJpbmQgbW91bnQgdm9sYXRpbGUgQHdoZXJlQAorRGVmYXVsdERlcGVuZGVuY2llcz1mYWxzZQorQmVmb3JlPWxvY2FsLWZzLnRhcmdldAorUmVxdWlyZXNNb3VudHNGb3I9QHdoYXRwYXJlbnRAIEB3aGVyZXBhcmVudEAKK0NvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT1Ad2hhdHBhcmVudEAKK0NvbmRpdGlvblBhdGhFeGlzdHM9QHdoZXJlQAorQ29uZGl0aW9uUGF0aElzUmVhZFdyaXRlPSFAd2hlcmVACisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9WWVzCitTdGFuZGFyZE91dHB1dD1zeXNsb2cKK1RpbWVvdXRTZWM9MAorRXhlY1N0YXJ0PS9zYmluL21vdW50LWNvcHliaW5kIEB3aGF0QCBAd2hlcmVACitFeGVjU3RvcD0vYmluL3Vtb3VudCBAd2hlcmVACisKK1tJbnN0YWxsXQorV2FudGVkQnk9bG9jYWwtZnMudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy92b2xhdGlsZS1iaW5kcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWU3Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy92b2xhdGlsZS1iaW5kcy5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIlZvbGF0aWxlIGJpbmQgbW91bnQgc2V0dXAgYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHJlYWQtb25seS1yb290ZnMiCitERVNDUklQVElPTiA9ICIke1NVTU1BUll9IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLk1JVDttZDU9NTc1MGYzYWE0ZWEyYjAwYzJiZjIxYjJiMmE3YjcxNGQiCisKK1NSQ19VUkkgPSAiXAorICAgIGZpbGU6Ly9tb3VudC1jb3B5YmluZCBcCisgICAgZmlsZTovL0NPUFlJTkcuTUlUIFwKKyAgICBmaWxlOi8vdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbiBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoIHN5c3RlbWQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJzeXN0ZW1kIgorCitWT0xBVElMRV9CSU5EUyA/PSAiXAorICAgIC92YXIvdm9sYXRpbGUvbGliIC92YXIvbGliXG5cCisiCitWT0xBVElMRV9CSU5EU1t0eXBlXSA9ICJsaXN0IgorVk9MQVRJTEVfQklORFNbc2VwYXJhdG9yXSA9ICJcbiIKKworZGVmIHZvbGF0aWxlX3N5c3RlbWRfc2VydmljZXMoZCk6CisgICAgc2VydmljZXMgPSBbXQorICAgIGZvciBsaW5lIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoIlZPTEFUSUxFX0JJTkRTIiwgZCk6CisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgd2hhdCwgd2hlcmUgPSBsaW5lLnNwbGl0KE5vbmUsIDEpCisgICAgICAgIHNlcnZpY2VzLmFwcGVuZCgiJXMuc2VydmljZSIgJSB3aGF0WzE6XS5yZXBsYWNlKCIvIiwgIi0iKSkKKyAgICByZXR1cm4gIiAiLmpvaW4oc2VydmljZXMpCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICIke0B2b2xhdGlsZV9zeXN0ZW1kX3NlcnZpY2VzKGQpfSIKKworRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlIgorCitkb19jb21waWxlICgpIHsKKyAgICB3aGlsZSByZWFkIHNwZWMgbW91bnRwb2ludDsgZG8KKyAgICAgICAgaWYgWyAteiAiJHNwZWMiIF07IHRoZW4KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZpCisKKyAgICAgICAgc2VydmljZWZpbGU9IiR7c3BlYyMvfSIKKyAgICAgICAgc2VydmljZWZpbGU9IiQoZWNobyAiJHNlcnZpY2VmaWxlIiB8IHRyIC8gLSkuc2VydmljZSIKKyAgICAgICAgc2VkIC1lICJzI0B3aGF0QCMkc3BlYyNnOyBzI0B3aGVyZUAjJG1vdW50cG9pbnQjZyIgXAorICAgICAgICAgICAgLWUgInMjQHdoYXRwYXJlbnRAIyR7c3BlYyUvKn0jZzsgcyNAd2hlcmVwYXJlbnRAIyR7bW91bnRwb2ludCUvKn0jZyIgXAorICAgICAgICAgICAgdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbiA+JHNlcnZpY2VmaWxlCisgICAgZG9uZSA8PEVORAorJHtAZC5nZXRWYXIoJ1ZPTEFUSUxFX0JJTkRTJywgVHJ1ZSkucmVwbGFjZSgiXFxuIiwgIlxuIil9CitFTkQKKworICAgIGlmIFsgLWUgdmFyLXZvbGF0aWxlLWxpYi5zZXJ2aWNlIF07IHRoZW4KKyAgICAgICAgIyBBcyB0aGUgc2VlZCBpcyBzdG9yZWQgdW5kZXIgL3Zhci9saWIsIGVuc3VyZSB0aGF0IHRoaXMgc2VydmljZSBydW5zCisgICAgICAgICMgYWZ0ZXIgdGhlIHZvbGF0aWxlIC92YXIvbGliIGlzIG1vdW50ZWQuCisgICAgICAgIHNlZCAtaSAtZSAiL15CZWZvcmU9L3MvXCQvIHN5c3RlbWQtcmFuZG9tLXNlZWQuc2VydmljZS8iIFwKKyAgICAgICAgICAgICAgIC1lICIvXldhbnRlZEJ5PS9zL1wkLyBzeXN0ZW1kLXJhbmRvbS1zZWVkLnNlcnZpY2UvIiBcCisgICAgICAgICAgICAgICB2YXItdm9sYXRpbGUtbGliLnNlcnZpY2UKKyAgICBmaQorfQorZG9fY29tcGlsZVtkaXJzXSA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgbW91bnQtY29weWJpbmQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICBmb3Igc2VydmljZSBpbiAke1NZU1RFTURfU0VSVklDRV92b2xhdGlsZS1iaW5kc307IGRvCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAkc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKyAgICBkb25lCit9Citkb19pbnN0YWxsW2RpcnNdID0gIiR7V09SS0RJUn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjY4OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycwpAQCAtMCwwICsxIEBACit6bGliLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZWE4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXVOciBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KKy0tLSBhL01ha2VmaWxlLmluCTIwMTMtMDYtMTAgMTM6NDg6MTQuMzIxOTU5MTYyICswMjAwCisrKysgYi9NYWtlZmlsZS5pbgkyMDEzLTA2LTEwIDEzOjQ5OjM2LjY4NjQ3NjQ0OCArMDIwMAorQEAgLTgzLDYgKzgzLDkgQEAKKyB0ZXN0OiBhbGwgdGVzdHN0YXRpYyB0ZXN0c2hhcmVkCisgCisgdGVzdHN0YXRpYzogc3RhdGljCisrCUBtYWtlIHJ1bnRlc3RzdGF0aWMKKysKKytydW50ZXN0c3RhdGljOgorIAlAVE1QU1Q9dG1wc3RfJCQ7IFwKKyAJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlwIC1kICYmIC4vZXhhbXBsZSAkJFRNUFNUIDsgdGhlbiBcCisgCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKK0BAIC05Miw2ICs5NSw5IEBACisgCXJtIC1mICQkVE1QU1QKKyAKKyB0ZXN0c2hhcmVkOiBzaGFyZWQKKysJQG1ha2UgcnVudGVzdHNoYXJlZAorKworK3J1bnRlc3RzaGFyZWQ6CisgCUBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAorIAlMRF9MSUJSQVJZTjMyX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZTjMyX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllOMzJfUEFUSDsgXAorIAlEWUxEX0xJQlJBUllfUEFUSD1gcHdkYDokKERZTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBEWUxEX0xJQlJBUllfUEFUSDsgXAorQEAgLTEwNSw2ICsxMTEsOSBAQAorIAlybSAtZiAkJFRNUFNICisgCisgdGVzdDY0OiBhbGw2NAorKwlAbWFrZSBydW50ZXN0YWxsNjQKKysKKytydW50ZXN0YWxsNjQ6CisgCUBUTVA2ND10bXA2NF8kJDsgXAorIAlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcDY0IHwgLi9taW5pZ3ppcDY0IC1kICYmIC4vZXhhbXBsZTY0ICQkVE1QNjQ7IHRoZW4gXAorIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgT0sgKioqJzsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L2xkZmxhZ3MtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljNDBiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L2xkZmxhZ3MtdGVzdHMucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorT2JleSBMREZMQUdTIGZvciB0ZXN0cworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSB6bGliLTEuMi44Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyB6bGliLTEuMi44L01ha2VmaWxlLmluCitAQCAtMjYsNyArMjYsNyBAQCBDRkxBR1M9LU8KKworIFNGTEFHUz0tTworIExERkxBR1M9CistVEVTVF9MREZMQUdTPS1MLiBsaWJ6LmEKKytURVNUX0xERkxBR1M9LUwuICQoTERGTEFHUykKKyBMRFNIQVJFRD0kKENDKQorIENQUD0kKENDKSAtRQorCitAQCAtMTc2LDIyICsxNzYsMjIgQEAgcGxhY2VibyAkKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKSBsaWJ6LgorCS1Acm1kaXIgb2JqcworCisgZXhhbXBsZSQoRVhFKTogZXhhbXBsZS5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoVEVTVF9MREZMQUdTKSAkKFNUQVRJQ0xJQikKKworIG1pbmlnemlwJChFWEUpOiBtaW5pZ3ppcC5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgZXhhbXBsZXNoJChFWEUpOiBleGFtcGxlLm8gJChTSEFSRURMSUJWKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vIC1MLiAkKFNIQVJFRExJQlYpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpICQoU0hBUkVETElCVikKKworIG1pbmlnemlwc2gkKEVYRSk6IG1pbmlnemlwLm8gJChTSEFSRURMSUJWKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAtTC4gJChTSEFSRURMSUJWKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykgJChTSEFSRURMSUJWKQorCisgZXhhbXBsZTY0JChFWEUpOiBleGFtcGxlNjQubyAkKFNUQVRJQ0xJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGU2NC5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZTY0Lm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgbWluaWd6aXA2NCQoRVhFKTogbWluaWd6aXA2NC5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXA2NC5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXA2NC5vICQoVEVTVF9MREZMQUdTKSAkKFNUQVRJQ0xJQikKKworIGluc3RhbGwtbGliczogJChMSUJTKQorCS1AaWYgWyAhIC1kICQoREVTVERJUikkKGV4ZWNfcHJlZml4KSAgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChleGVjX3ByZWZpeCk7IGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2I0ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKK1doZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UgdGhlbiBpdCBjcmVhdGVzIGludmFsaWQgY2FjaGUgCisoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28gY2Fubm90IGJlIGZvdW5kIGFmdGVyIGJ1aWxkaW5nIHpsaWIoLW5hdGl2ZSkgYW5kIEkgaGF2ZSB0byBjYWxsIAordG91Y2ggKi9saWJzdGRjKysuc28gJiYgL3NiaW4vbGRjb25maWcgdG8gZml4IGl0LgorCitTbyByZW1vdmUgbGRjb25maWcgY2FsbCBmcm9tIG1ha2UgaW5zdGFsbC1saWJzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC11TnIgemxpYi0xLjIuNi5vcmlnL01ha2VmaWxlLmluIHpsaWItMS4yLjYvTWFrZWZpbGUuaW4KKy0tLSB6bGliLTEuMi42Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wMS0yOCAyMzo0ODo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyB6bGliLTEuMi42L01ha2VmaWxlLmluCTIwMTItMDItMTMgMTU6Mzg6MjAuNTc3NzAwNzIzICswMTAwCitAQCAtMTk5LDcgKzE5OSw2IEBACisgCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCisgCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKTsgXAorIAkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCistCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKKyAJZmkKKyAJY3AgemxpYi4zICQoREVTVERJUikkKG1hbjNkaXIpCisgCWNobW9kIDY0NCAkKERFU1RESVIpJChtYW4zZGlyKS96bGliLjMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRkOWRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3RzdGF0aWMgcnVudGVzdHNoYXJlZCB8IHNlZCAtciAtZSAncy9eKFxzK1wqKyAoLis/KSB0ZXN0IE9LIFwqKykvXDFcblBBU1M6IFwyLycgLWUgJ3MvXihccytcKisgKC4rPykgdGVzdCBGQUlMRUQgXCorKS9cMVxuRkFJTDogXDIvJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcwYWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIKQEAgLTAsMCArMSw1OSBAQAorU1VNTUFSWSA9ICJabGliIENvbXByZXNzaW9uIExpYnJhcnkiCitERVNDUklQVElPTiA9ICJabGliIGlzIGEgZ2VuZXJhbC1wdXJwb3NlLCBwYXRlbnQtZnJlZSwgbG9zc2xlc3MgZGF0YSBjb21wcmVzc2lvbiBcCitsaWJyYXJ5IHdoaWNoIGlzIHVzZWQgYnkgbWFueSBkaWZmZXJlbnQgcHJvZ3JhbXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3psaWIubmV0LyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiWmxpYiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3psaWIuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIzO21kNT1mZGU2MTJkZjFlNTkzM2M0MjhiNzM4NDRhMGM0OTRmZCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnpsaWIubmV0LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtcnVudGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOGYxMjA1ZDhkZDIwMDFmMjZmZWMxZThjMmNlYmUzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzFkZjA0MzIzNmRmOGU5YTc2NjdiOWUzYmIzN2UxZmNiMTIyMGEwZjE2M2I2ZGUyNjI2Nzc0Yjk1OTBkMDU3IgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworaW5oZXJpdCBwdGVzdAorCitkb19jb25maWd1cmUgKCl7CisJLi9jb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9IC0tc2hhcmVkIC0tbGliZGlyPSR7bGliZGlyfQorfQorCitkb19jb21waWxlICgpeworCW9lX3J1bm1ha2UKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIHN0YXRpYyBzaGFyZWQKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAke0J9L01ha2VmaWxlICAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vZXhhbXBsZSAgICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9taW5pZ3ppcCAgICR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAke0J9L2V4YW1wbGVzaCAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vbWluaWd6aXBzaCAke0R9JHtQVEVTVF9QQVRIfQorfQorCisjIE1vdmUgemxpYiBzaGFyZWQgbGlicmFyaWVzIGZvciB0YXJnZXQgYnVpbGRzIHRvICRiYXNlX2xpYmRpciBzbyB0aGUgbGlicmFyeQorIyBjYW4gYmUgdXNlZCBpbiBlYXJseSBib290IGJlZm9yZSAkcHJlZml4IGlzIG1vdW50ZWQuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJaWYgWyAke2Jhc2VfbGliZGlyfSAhPSAke2xpYmRpcn0gXQorCXRoZW4KKwkJbWtkaXIgLXAgJHtEfS8ke2Jhc2VfbGliZGlyfQorCQltdiAke0R9LyR7bGliZGlyfS9saWJ6LnNvLiogJHtEfS8ke2Jhc2VfbGliZGlyfQorCQlsaWJuYW1lPWByZWFkbGluayAke0R9LyR7bGliZGlyfS9saWJ6LnNvYAorCQlsbiAtc2YgJHtAb2UucGF0aC5yZWxhdGl2ZSgiJHtsaWJkaXJ9IiwgIiR7YmFzZV9saWJkaXJ9Iil9LyRsaWJuYW1lICR7RH0ke2xpYmRpcn0vbGliei5zbworCWZpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2NjOWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsNzAgQEAKK3JlcXVpcmUgYXB0LmluYworaW5oZXJpdCBuYXRpdmUKKworREVQRU5EUyArPSAiZHBrZy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUgZGItbmF0aXZlIGN1cmwtbmF0aXZlIHh6LW5hdGl2ZSIKK1BBQ0tBR0VTID0gIiIKK1VTRV9OTFMgPSAieWVzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGJfbGlua2luZ19oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtcmVtb3ZlLVdzdWdnZXN0LWF0dHJpYnV0ZS1mcm9tLUNGTEFHUy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoIFwKKyIKKworcHl0aG9uIGRvX2luc3RhbGwgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9faW5zdGFsbF9iYXNlJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2luc3RhbGxfY29uZmlnJywgZCkKK30KKworcHl0aG9uIGRvX2luc3RhbGxfY29uZmlnICgpIHsKKyAgICBpbmRpciA9IG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScsMSkpCisgICAgaW5maWxlID0gZmlsZShvZS5wYXRoLmpvaW4oaW5kaXIsICdmaWxlcycsICdhcHQuY29uZicpLCAncicpCisgICAgZGF0YSA9IGluZmlsZS5yZWFkKCkKKyAgICBpbmZpbGUuY2xvc2UoKQorCisgICAgZGF0YSA9IGQuZXhwYW5kKGRhdGEpCisKKyAgICBvdXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoJ0QnLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgJ2FwdCcpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dGRpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKG91dGRpcikKKworICAgIG91dHBhdGggPSBvZS5wYXRoLmpvaW4ob3V0ZGlyLCAnYXB0LmNvbmYuc2FtcGxlJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0cGF0aCk6CisgICAgICAgIG91dGZpbGUgPSBmaWxlKG91dHBhdGgsICd3JykKKyAgICAgICAgb3V0ZmlsZS53cml0ZShkYXRhKQorICAgICAgICBvdXRmaWxlLmNsb3NlKCkKK30KKworZG9faW5zdGFsbF9iYXNlICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jZHJvbSAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWdldCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNvbmZpZyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNhY2hlICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtc29ydHBrZ3MgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1leHRyYWN0dGVtcGxhdGVzICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZnRwYXJjaGl2ZSAke0R9JHtiaW5kaXJ9LworCisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1wcml2YXRlICR7RH0ke2xpYmRpcn0vCisKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXBrZyRHTElCQ19WRVIkTElCU1REQ1BQX1ZFUiAke0R9JHtsaWJkaXJ9LworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtaW5zdCRHTElCQ19WRVIkTElCU1REQ1BQX1ZFUiAke0R9JHtsaWJkaXJ9LworCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9tZXRob2RzLyogJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcy8KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9kZXNjLmFwdCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvbmFtZXMgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L2luc3RhbGwgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3NldHVwICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC91cGRhdGUgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvYXB0LmNvbmYuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L3ByZWZlcmVuY2VzLmQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hcHQvbGlzdHMvcGFydGlhbAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYXB0L2FyY2hpdmVzL3BhcnRpYWwKKworCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9nL2FwdC8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2NjBkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBhcHQtbmF0aXZlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbm9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL25vLWN1cmwucGF0Y2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTUzYWEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1wYWNrYWdlLmluYwpAQCAtMCwwICsxLDc4IEBACithcHQtbWFucGFnZXM9ImRvYy9hcHQtY2FjaGUuOCBcCisJICAgICAgZG9jL2FwdC1jZHJvbS44IFwKKwkgICAgICBkb2MvYXB0LWNvbmZpZy44IFwKKwkgICAgICBkb2MvYXB0LWdldC44IFwKKwkgICAgICBkb2MvYXB0LjggXAorCSAgICAgIGRvYy9hcHQuY29uZi41IFwKKwkgICAgICBkb2MvYXB0X3ByZWZlcmVuY2VzLjUgXAorCSAgICAgIGRvYy9zb3VyY2VzLmxpc3QuNSIKK2FwdC11dGlscy1tYW5wYWdlcz0iZG9jL2FwdC1leHRyYWN0dGVtcGxhdGVzLjEgXAorCQkgICAgZG9jL2FwdC1zb3J0cGtncy4xIgorCitkZWYgZ2V0X2ZpbGVzX2FwdF9kb2MoZCwgYmIsIG1hbnBhZ2VzKToKKyAgICBpbXBvcnQgcmUKKyAgICBtYW5wYWdlcyA9IHJlLnN1YihyJ1xiZG9jLyhcUyspLyhcUyspXC5cMVwuKC4pXGInLCByJyR7bWFuZGlyfS9cMS9tYW5cMy9cMi5cMycsIG1hbnBhZ2VzKQorICAgIG1hbnBhZ2VzID0gcmUuc3ViKHInXGJkb2MvKFxTKylcLiguKVxiJywgcicke21hbmRpcn0vbWFuXDIvXDEuXDInLCBtYW5wYWdlcykKKyAgICByZXR1cm4gbWFucGFnZXMKKworZGVmIGdldF9jb21tYW5kc19hcHRfZG9jKGQsIGJiLCBtYW5wYWdlcyk6CisgICAgcyA9IGxpc3QoKQorICAgIF9fZGlyX2NhY2hlX18gPSBsaXN0KCkKKyAgICBmb3IgbSBpbiBtYW5wYWdlcy5zcGxpdCgpOgorICAgICAgICBkZXN0ID0gZ2V0X2ZpbGVzX2FwdF9kb2MoZCwgYmIsIG0pCisgICAgICAgIGRpciA9IG9zLnBhdGguZGlybmFtZShkZXN0KQorICAgICAgICBpZiBub3QgZGlyIGluIF9fZGlyX2NhY2hlX186CisgICAgICAgICAgICBzLmFwcGVuZCgiaW5zdGFsbCAtZCAke0R9LyVzIiAlIGRpcikKKyAgICAgICAgICAgIF9fZGlyX2NhY2hlX18uYXBwZW5kKGRpcikKKyAgICAgICAgcy5hcHBlbmQoImluc3RhbGwgLW0gMDY0NCAlcyAke0R9LyVzIiAlIChtLCBkZXN0KSkKKyAgICByZXR1cm4gIlxuIi5qb2luKHMpCisKK1BBQ0tBR0VTICs9ICIke1BOfS11dGlscyAke1BOfS11dGlscy1kb2MiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYXB0LWNkcm9tICR7YmluZGlyfS9hcHQtZ2V0IFwKKwkgICAgICAgJHtiaW5kaXJ9L2FwdC1jb25maWcgJHtiaW5kaXJ9L2FwdC1jYWNoZSBcCisJICAgICAgICR7bGliZGlyfS9hcHQgJHtsaWJkaXJ9L2xpYmFwdCouc28uKiBcCisJICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gJHtzeXNjb25mZGlyfSBcCisJICAgICAgICR7bGliZGlyfS9kcGtnIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9L2FwdC1zb3J0cGtncyAke2JpbmRpcn0vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtAZ2V0X2ZpbGVzX2FwdF9kb2MoZCwgYmIsIGQuZ2V0VmFyKCdhcHQtbWFucGFnZXMnLCBUcnVlKSl9IFwKKwkJICAgJHtkb2NkaXJ9L2FwdCIKK0ZJTEVTXyR7UE59LXV0aWxzLWRvYyA9ICIke0BnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgZC5nZXRWYXIoJ2FwdC11dGlscy1tYW5wYWdlcycsIFRydWUpKX0iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmFwdCouc28gJHtpbmNsdWRlZGlyfSIKKworZG9faW5zdGFsbCAoKSB7CisJc2V0IC14CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQta2V5ICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY2Ryb20gJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1nZXQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jb25maWcgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jYWNoZSAke0R9JHtiaW5kaXJ9LworCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtc29ydHBrZ3MgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1leHRyYWN0dGVtcGxhdGVzICR7RH0ke2JpbmRpcn0vCisKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXBrZyAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1pbnN0ICR7RH0ke2xpYmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcworCWluc3RhbGwgLW0gMDc1NSBiaW4vbWV0aG9kcy8qICR7RH0ke2xpYmRpcn0vYXB0L21ldGhvZHMvCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvZGVzYy5hcHQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kc2VsZWN0L25hbWVzICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC9pbnN0YWxsICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC9zZXR1cCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3QvdXBkYXRlICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L2FwdC5jb25mLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9zb3VyY2VzLmxpc3QuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L3ByZWZlcmVuY2VzLmQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hcHQvbGlzdHMvcGFydGlhbAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYXB0L2FyY2hpdmVzL3BhcnRpYWwKKwlpbnN0YWxsIC1kICR7RH0ke2RvY2Rpcn0vYXB0L2V4YW1wbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZG9jL2V4YW1wbGVzLyogJHtEfSR7ZG9jZGlyfS9hcHQvZXhhbXBsZXMvCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2FwdC1wa2cvCisJaW5zdGFsbCAtbSAwNjQ0IGluY2x1ZGUvYXB0LXBrZy8qLmggJHtEfSR7aW5jbHVkZWRpcn0vYXB0LXBrZy8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0OGI5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQWR2YW5jZWQgZnJvbnQtZW5kIGZvciBkcGtnIgorTElDRU5TRSA9ICJHUEx2Mi4wKyIKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE1MDgwNVQwOTQ5MjhaL3Bvb2wvbWFpbi9hLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1ob3N0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VyYWNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vLW5scy1kcGtnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1nY2MtNC42LW51bGwtbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdHJ1bmNhdGUtZmlsZW5hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1jb25maWd1cmUtaW4tbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS10ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjY1MDVjNDI5N2IzMzhhZGIyMDg3Y2U4N2JiYzRhMjc2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmYjFkZTk1OTgzNjNjNDE2NTkxZDQ5ZTNjMjg1NDU4ZTA5NWIwMzVlNmMwNmQ1Yjk0NGE1NGUxNWZjOWI1NDMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50LGF1dG9oZWFkZXIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHJtIC1yZiAke1N9L2J1aWxkbGliL2NvbmZpZy5zdWIKKyAgICBybSAtcmYgJHtTfS9idWlsZGxpYi9jb25maWcuZ3Vlc3MKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXB0L21ldGhvZHMvLmRlYnVnLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzMDY5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoCkBAIC0wLDAgKzEsMzc4IEBACitGcm9tIDEwNjc5N2YxYzY2ZmE1NzhkYWQyMWZkOTM4MGJmOWQ1NzY1NzNkZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIyIE1heSAyMDE1IDA4OjA1OjE1ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiYWx3YXlzIHJ1biAnZHBrZyAtLWNvbmZpZ3VyZSAtYScgYXQgdGhlIGVuZCBvZiBvdXIKKyBkcGtnIGNhbGxpbmdzIgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGlzIHJldmVydHMgY29tbWl0IGEyYTc1ZmY0NTE2Zjc2MDlmNGM1NWI0MjI3MGFiYjhkMDg5NDNjNjAsIHdoaWNoCithbHdheXMgcnVuICdkcGtnIC0tY29uZmlndXJlIC1hJyBhdCB0aGUgZW5kIG9mIG91ciBkcGtnIGNhbGxpbmdzLAorYnV0IGl0IGRvZXMgbm90IHdvcmsgZm9yIGNyb3NzLWNvbXBpbGUsIHNpbmNlIHRoZSByb290ZnMgZGlyIGNhbiBub3QKK2JlIHBhc3NlZCBpbnRvIGRwa2csIGFuZCBsZWFkIHRvIHRoZSBiZWxvdyBzaW1pbGFyIGVycm9yOgorICAgLS0tLS0tLQorICAgfG1rZGlyOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAnL3Vzci9saWIvb3BrZyc6IFBlcm1pc3Npb24gZGVuaWVkCisgICAtLS0tLS0tCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFwdC1wa2cvZGViL2Rwa2dwbS5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKy0tCisgdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNSArKysrLS0tLQorIHRlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQgICAgICAgICAgICAgIHwgNjcgKysrKysrKysrLS0tLS0tLS0tLQorIHRlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyICAgICAgIHwgMTggKystLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvciAgICAgICAgfCAgMiArLQorIC4uLmVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuIHwgNzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC4uLi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzICAgICAgIHwgIDYgKy0KKyA3IGZpbGVzIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDE0NiBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA3NTUgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvZGViL2Rwa2dwbS5jYyBiL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworaW5kZXggYjE4N2VmYi4uZjI2OTc2NCAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworKysrIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCitAQCAtMTA0OSwxMiArMTA0OSw2IEBAIHZvaWQgcGtnRFBrZ1BNOjpCdWlsZFBhY2thZ2VzUHJvZ3Jlc3NNYXAoKQorIAkgUGFja2FnZXNUb3RhbCsrOworICAgICAgIH0KKyAgICB9CistICAgLyogb25lIGV4dHJhOiBXZSBkb24ndCB3YW50IHRoZSBwcm9ncmVzcyBiYXIgdG8gcmVhY2ggMTAwJSwgZXNwZWNpYWxseSBub3QKKy0gICAgICBpZiB3ZSBjYWxsIGRwa2cgLS1jb25maWd1cmUgLS1wZW5kaW5nIGFuZCBwcm9jZXNzIGEgYnVuY2ggb2YgdHJpZ2dlcnMKKy0gICAgICB3aGlsZSBzaG93aW5nIDEwMCUuIEFsc28sIHNwaW5kb3duIHRha2VzIGEgd2hpbGUsIHNvIG5ldmVyIHJlYWNoaW5nIDEwMCUKKy0gICAgICBpcyB3YXkgbW9yZSBjb3JyZWN0IHRoYW4gcmVhY2hpbmcgMTAwJSB3aGlsZSBzdGlsbCBkb2luZyBzdHVmZiBldmVuIGlmCistICAgICAgZG9pbmcgaXQgdGhpcyB3YXkgaXMgc2xpZ2h0bHkgYmVuZGluZyB0aGUgcnVsZXMgKi8KKy0gICArK1BhY2thZ2VzVG90YWw7CisgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qfX19Ki8KKyAjaWYgKEFQVF9QS0dfTUFKT1IgPj0gNCAmJiBBUFRfUEtHX01JTk9SIDwgMTMpCitAQCAtMTI5NCw4ICsxMjg4LDkgQEAgYm9vbCBwa2dEUGtnUE06OkdvTm9BQklCcmVhayhBUFQ6OlByb2dyZXNzOjpQYWNrYWdlTWFuYWdlciAqcHJvZ3Jlc3MpCisgCisgICAgLy8gc3VwcG9ydCBzdWJwcmVzc2luZyBvZiB0cmlnZ2VycyBwcm9jZXNzaW5nIGZvciBzcGVjaWFsCisgICAgLy8gY2FzZXMgbGlrZSBkLWkgdGhhdCBydW5zIHRoZSB0cmlnZ2VycyBoYW5kbGluZyBtYW51YWxseQorKyAgIGJvb2wgY29uc3QgU21hcnRDb25mID0gKF9jb25maWctPkZpbmQoIlBhY2thZ2VNYW5hZ2VyOjpDb25maWd1cmUiLCAiYWxsIikgIT0gImFsbCIpOworICAgIGJvb2wgY29uc3QgVHJpZ2dlcnNQZW5kaW5nID0gX2NvbmZpZy0+RmluZEIoIkRQa2c6OlRyaWdnZXJzUGVuZGluZyIsIGZhbHNlKTsKKy0gICBpZiAoX2NvbmZpZy0+RmluZEIoIkRQa2c6OkNvbmZpZ3VyZVBlbmRpbmciLCB0cnVlKSA9PSB0cnVlKQorKyAgIGlmIChfY29uZmlnLT5GaW5kQigiRFBrZzo6Q29uZmlndXJlUGVuZGluZyIsIFNtYXJ0Q29uZikgPT0gdHJ1ZSkKKyAgICAgICBMaXN0LnB1c2hfYmFjayhJdGVtKEl0ZW06OkNvbmZpZ3VyZVBlbmRpbmcsIFBrZ0l0ZXJhdG9yKCkpKTsKKyAKKyAgICAvLyBmb3IgdGhlIHByb2dyZXNzCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsgYi90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yaworaW5kZXggNzBhZDM4MS4uMDA2NzJhZCAxMDA2NDQKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCisrKysgYi90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yaworQEAgLTExNzgsMTMgKzExNzgsMTAgQEAgdGVzdG5vcGFja2FnZSgpIHsKKyAJZmkKKyB9CisgCistdGVzdGRwa2dzdGF0dXMoKSB7CistCWxvY2FsIFNUQVRFPSIkMSIKKy0JbG9jYWwgTlI9IiQyIgorLQlzaGlmdCAyCistCW1zZ3Rlc3QgIlRlc3QgdGhhdCAkTlIgcGFja2FnZShzKSBhcmUgaW4gc3RhdGUgJFNUQVRFIHdpdGgiICJkcGtnIC1sICQqIgorLQlsb2NhbCBQS0dTPSIkKGRwa2cgLWwgIiRAIiAyPi9kZXYvbnVsbCB8IGdyZXAgIl4ke1NUQVRFfSIgfCB3YyAtbCkiCistCWlmIFsgIiRQS0dTIiAhPSAkTlIgXTsgdGhlbgorK3Rlc3RkcGtnaW5zdGFsbGVkKCkgeworKwltc2d0ZXN0ICJUZXN0IGZvciBjb3JyZWN0bHkgaW5zdGFsbGVkIHBhY2thZ2Uocykgd2l0aCIgImRwa2cgLWwgJCoiCisrCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXmknIHwgd2MgLWwpIgorKwlpZiBbICIkUEtHUyIgIT0gJCMgXTsgdGhlbgorIAkJZWNobyA+JjIgJFBLR1MKKyAJCWRwa2cgLWwgIiRAIiB8IGdyZXAgJ15bYS16XScgPiYyCisgCQltc2dmYWlsCitAQCAtMTE5MywxMiArMTE5MCwxNiBAQCB0ZXN0ZHBrZ3N0YXR1cygpIHsKKyAJZmkKKyB9CisgCistdGVzdGRwa2dpbnN0YWxsZWQoKSB7CistCXRlc3RkcGtnc3RhdHVzICdpaScgIiQjIiAiJEAiCistfQorLQorIHRlc3RkcGtnbm90aW5zdGFsbGVkKCkgeworLQl0ZXN0ZHBrZ3N0YXR1cyAnaWknICcwJyAiJEAiCisrCW1zZ3Rlc3QgIlRlc3QgZm9yIGNvcnJlY3RseSBub3QtaW5zdGFsbGVkIHBhY2thZ2Uocykgd2l0aCIgImRwa2cgLWwgJCoiCisrCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+IC9kZXYvbnVsbCB8IGdyZXAgJ15pJyB8IHdjIC1sKSIKKysJaWYgWyAiJFBLR1MiICE9IDAgXTsgdGhlbgorKwkJZWNobworKwkJZHBrZyAtbCAiJEAiIHwgZ3JlcCAnXlthLXpdJyA+JjIKKysJCW1zZ2ZhaWwKKysJZWxzZQorKwkJbXNncGFzcworKwlmaQorIH0KKyAKKyB0ZXN0bWFya2VkYXV0bygpIHsKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAoraW5kZXggNjhjYzA0My4uZDcyZTdlNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQKK0BAIC0xOSwxNCArMTksMTMgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCisgcG1zdGF0dXM6dGVzdGluZzowOkluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCistcG1zdGF0dXM6dGVzdGluZzo1MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzoyMDpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo0MDpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKKytwbXN0YXR1czp0ZXN0aW5nOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6ODA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzoxMDA6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAjIHVwZ3JhZGUKKyBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKK0BAIC0zNSwxNCArMzQsMTMgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCisgcG1zdGF0dXM6dGVzdGluZzowOkluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCistcG1zdGF0dXM6dGVzdGluZzo1MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzoyMDpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo0MDpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKKytwbXN0YXR1czp0ZXN0aW5nOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6ODA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzoxMDA6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAjIHJlaW5zdGFsbAorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworQEAgLTUxLDI0ICs0OSwyMiBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgYW5kIHJlbW92ZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworIHRlc3RzdWNjZXNzIGFwdGdldCByZW1vdmUgdGVzdGluZyAteSAtbyBBUFQ6OlN0YXR1cy1GZD0zCisgdGVzdGVxdWFsICJwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6UmVtb3ZpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzoyNTpQcmVwYXJpbmcgZm9yIHJlbW92YWwgb2YgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjc1OlJlbW92ZWQgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjc1OlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6UHJlcGFyaW5nIGZvciByZW1vdmFsIG9mIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpSZW1vdmVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAjIGluc3RhbGwgbm9uLW5hdGl2ZSBhbmQgZW5zdXJlIHdlIGdldCBwcm9wZXIgcHJvZ3Jlc3MgaW5mbworIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworQEAgLTc5LDEzICs3NSwxMiBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nMjowOkluc3RhbGxpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCistcG1zdGF0dXM6dGVzdGluZzI6NTA6Q29uZmlndXJpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzI6MjA6UHJlcGFyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjQwOlVucGFja2luZyB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czp0ZXN0aW5nMjo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKKytwbXN0YXR1czp0ZXN0aW5nMjo2MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czp0ZXN0aW5nMjo4MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czp0ZXN0aW5nMjoxMDA6SW5zdGFsbGVkIHRlc3RpbmcyIChpMzg2KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyBybSAtZiBhcHQtcHJvZ3Jlc3MqLmxvZworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKK2luZGV4IGJhZGM5ODUuLjlkMjI3OTQgMTAwNzU1CistLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgorKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKK0BAIC0yNyw0MSArMjcsMzcgQEAgTWVzc2FnZTogSW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDE2LjY2NjcKKytQZXJjZW50OiAyMAorIE1lc3NhZ2U6IFByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDMzLjMzMzMKKytQZXJjZW50OiA0MAorIE1lc3NhZ2U6IFVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKy1QZXJjZW50OiA1MAorK1BlcmNlbnQ6IDYwCisgTWVzc2FnZTogUnVubmluZyBkcGtnCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiA1MAorK1BlcmNlbnQ6IDYwCisgTWVzc2FnZTogQ29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiA2Ni42NjY3CisrUGVyY2VudDogODAKKyBNZXNzYWdlOiBDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDgzLjMzMzMKKytQZXJjZW50OiAxMDAKKyBNZXNzYWdlOiBJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpCistCistU3RhdHVzOiBwcm9ncmVzcworLVBlcmNlbnQ6IDgzLjMzMzMKKy1NZXNzYWdlOiBSdW5uaW5nIGRwa2cKKyAiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvciBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKK2luZGV4IDYzMjMwMDcuLmE0NzA5NWIgMTAwNzU1CistLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yCitAQCAtMTgsNyArMTgsNyBAQCBzZXR1cGFwdGFyY2hpdmUKKyBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKKyB0ZXN0ZmFpbHVyZSBhcHRnZXQgaW5zdGFsbCBmb28xIGZvbzIgLXkgLW8gQVBUOjpTdGF0dXMtRmQ9MworIG1zZ3Rlc3QgIkVuc3VyZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UiCistaWYgZ3JlcCAtcSAiYXB0YXJjaGl2ZS9wb29sL2ZvbzJfMC44LjE1X2FtZDY0LmRlYjozNi4zNjM2OnRyeWluZyB0byBvdmVyd3JpdGUgJy91c3IvYmluL2ZpbGUtY29uZmxpY3QnLCB3aGljaCBpcyBhbHNvIGluIHBhY2thZ2UgZm9vMSAwLjguMTUiIGFwdC1wcm9ncmVzcy5sb2c7IHRoZW4KKytpZiBncmVwIC1xICJhcHRhcmNoaXZlL3Bvb2wvZm9vMl8wLjguMTVfYW1kNjQuZGViOjQwOnRyeWluZyB0byBvdmVyd3JpdGUgJy91c3IvYmluL2ZpbGUtY29uZmxpY3QnLCB3aGljaCBpcyBhbHNvIGluIHBhY2thZ2UgZm9vMSAwLjguMTUiIGFwdC1wcm9ncmVzcy5sb2c7IHRoZW4KKyAJbXNncGFzcworIGVsc2UKKyAJY2F0IGFwdC1wcm9ncmVzcy5sb2cKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1biBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuCitkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDE0NmZhNzYuLjAwMDAwMDAKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuCisrKysgL2Rldi9udWxsCitAQCAtMSw3NSArMCwwIEBACistIyEvYmluL3NoCistc2V0IC1lCistCistVEVTVERJUj0kKHJlYWRsaW5rIC1mICQoZGlybmFtZSAkMCkpCistLiAkVEVTVERJUi9mcmFtZXdvcmsKKy0KKy1zZXR1cGVudmlyb25tZW50CistY29uZmlnYXJjaGl0ZWN0dXJlICdhbWQ2NCcKKy0KKy1tc2d0ZXN0ICdDaGVjayBpZiBpbnN0YWxsZWQgZHBrZyBzdXBwb3J0cycgJ25vYXdhaXQgdHJpZ2dlcicKKy1pZiBkcGtnLWNoZWNrYnVpbGRkZXBzIC1kICdkcGtnICg+PSAxLjE2LjEpJyAvZGV2L251bGw7IHRoZW4KKy0JbXNncGFzcworLWVsc2UKKy0JbXNnc2tpcCAnZHBrZyB2ZXJzaW9uIHRvbyBvbGQnCistCWV4aXQgMAorLWZpCistY29uZmlnZHBrZ25vb3BjaHJvb3QKKy0KKy1idWlsZHRyaWdnZXJwYWNrYWdlcygpIHsKKy0JbG9jYWwgVFlQRT0iJDEiCistCXNldHVwc2ltcGxlbmF0aXZlcGFja2FnZSAidHJpZ2dlcmFibGUtJFRZUEUiICdhbGwnICcxLjAnICd1bnN0YWJsZScgIkRlcGVuZHM6IHRyaWdkZXBlbmRzLSRUWVBFIgorLQlCVUlMRERJUj0iaW5jb21pbmcvdHJpZ2dlcmFibGUtJHtUWVBFfS0xLjAiCistCWNhdCA+JHtCVUlMRERJUn0vZGViaWFuL3Bvc3RpbnN0IDw8RU9GCistIyEvYmluL3NoCistaWYgWyAiXCQxIiA9ICd0cmlnZ2VyZWQnIF07IHRoZW4KKy0JbHMgLWwgL3Byb2Mvc2VsZi9mZC8KKy1maQorLUVPRgorLQllY2hvICIkVFlQRSAvdXNyL3NoYXJlL2RvYyIgPiAke0JVSUxERElSfS9kZWJpYW4vdHJpZ2dlcnMKKy0JYnVpbGRwYWNrYWdlICIkQlVJTERESVIiICd1bnN0YWJsZScgJ21haW4nICduYXRpdmUnCistCXJtIC1yZiAiJEJVSUxERElSIgorLQlidWlsZHNpbXBsZW5hdGl2ZXBhY2thZ2UgInRyaWdkZXBlbmRzLSRUWVBFIiAnYWxsJyAnMS4wJyAndW5zdGFibGUnCistfQorLQorLSNidWlsZHRyaWdnZXJwYWNrYWdlcyAnaW50ZXJlc3QnCistYnVpbGR0cmlnZ2VycGFja2FnZXMgJ2ludGVyZXN0LW5vYXdhaXQnCistYnVpbGRzaW1wbGVuYXRpdmVwYWNrYWdlICJ0cmlnc3R1ZmYiICdhbGwnICcxLjAnICd1bnN0YWJsZScKKy0KKy1zZXR1cGFwdGFyY2hpdmUKKy0KKy1ydW50ZXN0cygpIHsKKy0JbG9jYWwgVFlQRT0iJDEiCistCW1zZ21zZyAnV29ya2luZyB3aXRoIHRyaWdnZXIgdHlwZScgIiRUWVBFIgorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgaW5zdGFsbCB0cmlnZ2VyYWJsZS0kVFlQRSAteQorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdkZXBlbmRzLSRUWVBFIC15IC0tcmVpbnN0YWxsCistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnIHJvb3Qgcm9vdCAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ2luc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRQorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgaW5zdGFsbCB0cmlnc3R1ZmYgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFIHRyaWdzdHVmZgorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgcHVyZ2UgdHJpZ3N0dWZmIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnIHJvb3Qgcm9vdCAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ2luc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRQorLQl0ZXN0ZHBrZ25vdGluc3RhbGxlZCB0cmlnc3R1ZmYKKy0KKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IHB1cmdlIHRyaWdkZXBlbmRzLSRUWVBFIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGZhaWx1cmUgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGZhaWx1cmUgZ3JlcCAnIHJvb3Qgcm9vdCAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ25vdGluc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRQorLX0KKy0jcnVudGVzdHMgJ2ludGVyZXN0JworLXJ1bnRlc3RzICdpbnRlcmVzdC1ub2F3YWl0JworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cworaW5kZXggNDFjMDU3MC4uZDM5NjBkNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cworKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCitAQCAtNTksOCArNTksNyBAQCBzdGFydHVwIHBhY2thZ2VzIGNvbmZpZ3VyZQorIGNvbmZpZ3VyZSAkUEtHTkFNRSAxLjAgPG5vbmU+Cisgc3RhdHVzIHVucGFja2VkICRQS0dOQU1FIDEuMAorIHN0YXR1cyBoYWxmLWNvbmZpZ3VyZWQgJFBLR05BTUUgMS4wCistc3RhdHVzIGluc3RhbGxlZCAkUEtHTkFNRSAxLjAKKy1zdGFydHVwIHBhY2thZ2VzIGNvbmZpZ3VyZSIgY3V0IC1mIDMtIC1kJyAnIHJvb3RkaXIvdmFyL2xvZy9kcGtnLmxvZworK3N0YXR1cyBpbnN0YWxsZWQgJFBLR05BTUUgMS4wIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisgfQorIGNoZWNraW5zdGFsbAorIAorQEAgLTg1LDggKzg0LDcgQEAgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKyBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorIHN0YXR1cyBjb25maWctZmlsZXMgJFBLR05BTUUgMS4wCisgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKy1zdGF0dXMgbm90LWluc3RhbGxlZCAkUEtHTkFNRSA8bm9uZT4KKy1zdGFydHVwIHBhY2thZ2VzIGNvbmZpZ3VyZSIgY3V0IC1mIDMtIC1kJyAnIHJvb3RkaXIvdmFyL2xvZy9kcGtnLmxvZworK3N0YXR1cyBub3QtaW5zdGFsbGVkICRQS0dOQU1FIDxub25lPiIgY3V0IC1mIDMtIC1kJyAnIHJvb3RkaXIvdmFyL2xvZy9kcGtnLmxvZworIH0KKyBjaGVja3B1cmdlCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlYTU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMTYwIEBACitGcm9tIDE1YzZlZjZhODI3ZDM2ODFhZDA2ZTg2MmQyN2FiM2RmYjg0Y2I2ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI3IE1heSAyMDE1IDE0OjMwOjI4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCB0aGUgZ2NjIHZlcnNpb24gY2hlY2sKKworVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKKyJHQ0MgZGlhZ25vc3RpYyBwdXNoIiBpcyBnY2MgNC42IGZlYXR1cmUsIGdjYyA0LjQuNyBvbiBjZW50b3MgZGlkIG5vdCBrbm93IGl0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFwdC1wa2cvY2FjaGVzZXQuaCAgICAgICAgICAgfCAgNCArKy0tCisgYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYyB8IDEyICsrKysrKy0tLS0tLQorIGFwdC1wa2cvc3JjcmVjb3Jkcy5jYyAgICAgICAgfCAgNCArKy0tCisgYXB0LXBrZy9zcmNyZWNvcmRzLmggICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL3ZlbmRvcmxpc3QuY2MgICAgICAgIHwgIDQgKystLQorIDUgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hcHQtcGtnL2NhY2hlc2V0LmggYi9hcHQtcGtnL2NhY2hlc2V0LmgKK2luZGV4IGI3MjI5YmMuLjhjYzI5MTcgMTAwNjQ0CistLS0gYS9hcHQtcGtnL2NhY2hlc2V0LmgKKysrKyBiL2FwdC1wa2cvY2FjaGVzZXQuaAorQEAgLTExOSwxMiArMTE5LDEyIEBAIHB1YmxpYzoKKyAJCWlubGluZSBzdGQ6OnN0cmluZyBGdWxsTmFtZShib29sIGNvbnN0IFByZXR0eSkgY29uc3QgeyByZXR1cm4gZ2V0UGtnKCkuRnVsbE5hbWUoUHJldHR5KTsgfQorIAkJaW5saW5lIHN0ZDo6c3RyaW5nIEZ1bGxOYW1lKCkgY29uc3QgeyByZXR1cm4gZ2V0UGtnKCkuRnVsbE5hbWUoKTsgfQorIAkJQVBUX0RFUFJFQ0FURUQgaW5saW5lIGNvbnN0IGNoYXIgKlNlY3Rpb24oKSBjb25zdCB7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICNlbmRpZgorIAkgICByZXR1cm4gZ2V0UGtnKCkuU2VjdGlvbigpOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAJCX0KK2RpZmYgLS1naXQgYS9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjIGIvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworaW5kZXggNDlhMzQ4ZC4uNGJjOWRjZiAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MKKysrKyBiL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MKK0BAIC0xMjYsMTMgKzEyNiwxMyBAQCBib29sIGRlYlNyY1JlY29yZFBhcnNlcjo6RmlsZXMoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZT4gJkYpCisgICAgZm9yIChzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj46OmNvbnN0X2l0ZXJhdG9yIGYyID0gRjIuYmVnaW4oKTsgZjIgIT0gRjIuZW5kKCk7ICsrZjIpCisgICAgeworICAgICAgIHBrZ1NyY1JlY29yZHM6OkZpbGUyIGY7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICNlbmRpZgorICAgICAgIGYuTUQ1SGFzaCA9IGYyLT5NRDVIYXNoOworICAgICAgIGYuU2l6ZSA9IGYyLT5TaXplOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAgICAgICBmLlBhdGggPSBmMi0+UGF0aDsKK0BAIC0xOTAsMTQgKzE5MCwxNCBAQCBib29sIGRlYlNyY1JlY29yZFBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmTGlzdCkKKyAJIC8vIHdlIGhhdmUgaXQgYWxyZWFkeSwgc3RvcmUgdGhlIG5ldyBoYXNoIGFuZCBiZSBkb25lCisgCSBpZiAoZmlsZSAhPSBMaXN0LmVuZCgpKQorIAkgeworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJLy8gc2V0IGZvciBjb21wYXRpYmlsaXR5IG9ubHksIHNvIHdhcm4gdXNlcnMgbm90IHVzCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgCSAgICBpZiAoY2hlY2tzdW1GaWVsZCA9PSAiRmlsZXMiKQorIAkgICAgICAgZmlsZS0+TUQ1SGFzaCA9IGhhc2g7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAkgICAgLy8gYW4gZXJyb3IgaGVyZSBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIHR3byBkaWZmZXJlbnQgaGFzaGVzIGZvciB0aGUgc2FtZSBmaWxlCitAQCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQorIAkgRi5GaWxlU2l6ZSA9IHN0cnRvdWxsKHNpemUuY19zdHIoKSwgTlVMTCwgMTApOworIAkgRi5IYXNoZXMucHVzaF9iYWNrKGhhc2hTdHJpbmcpOworIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJLy8gc2V0IGZvciBjb21wYXRpYmlsaXR5IG9ubHksIHNvIHdhcm4gdXNlcnMgbm90IHVzCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCitAQCAtMjIwLDcgKzIyMCw3IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQorIAkgRi5TaXplID0gRi5GaWxlU2l6ZTsKKyAJIGlmIChjaGVja3N1bUZpZWxkID09ICJGaWxlcyIpCisgCSAgICBGLk1ENUhhc2ggPSBoYXNoOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3NyY3JlY29yZHMuY2MgYi9hcHQtcGtnL3NyY3JlY29yZHMuY2MKK2luZGV4IDMxNzVlZTcuLjM0MGU3OTYgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3NyY3JlY29yZHMuY2MKKysrKyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworQEAgLTE2MCw3ICsxNjAsNyBAQCBib29sIHBrZ1NyY1JlY29yZHM6OlBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmRjIpLyp7e3sqLworICAgIGZvciAoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZT46OmNvbnN0X2l0ZXJhdG9yIGYgPSBGLmJlZ2luKCk7IGYgIT0gRi5lbmQoKTsgKytmKQorICAgIHsKKyAgICAgICBwa2dTcmNSZWNvcmRzOjpGaWxlMiBmMjsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCitAQCAtMTY4LDcgKzE2OCw3IEBAIGJvb2wgcGtnU3JjUmVjb3Jkczo6UGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZGMikvKnt7eyovCisgICAgICAgZjIuU2l6ZSA9IGYtPlNpemU7CisgICAgICAgZjIuSGFzaGVzLnB1c2hfYmFjayhIYXNoU3RyaW5nKCJNRDVTdW0iLCBmLT5NRDVIYXNoKSk7CisgICAgICAgZjIuRmlsZVNpemUgPSBmLT5TaXplOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAgICAgICBmMi5QYXRoID0gZi0+UGF0aDsKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3NyY3JlY29yZHMuaCBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5oCitpbmRleCBkZGUyMmJkLi45MWY4MDYxIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9zcmNyZWNvcmRzLmgKKysrKyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5oCitAQCAtMzAsNyArMzAsNyBAQCBjbGFzcyBwa2dTcmNSZWNvcmRzCisgeworICAgIHB1YmxpYzoKKyAKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCS8vIGVuc3VyZSB0aGF0IGNvbi0gJiBkZS1zdHJ1Y3RvciBkb24ndCB0cmlnZ2VyIHRoaXMgd2FybmluZworIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgcGtnU3JjUmVjb3JkcworICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBGaWxlU2l6ZTsKKyAgICAgICBIYXNoU3RyaW5nTGlzdCBIYXNoZXM7CisgICAgfTsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy92ZW5kb3JsaXN0LmNjIGIvYXB0LXBrZy92ZW5kb3JsaXN0LmNjCitpbmRleCBmYjMzZmYxLi5iYTFkM2MzIDEwMDY0NAorLS0tIGEvYXB0LXBrZy92ZW5kb3JsaXN0LmNjCisrKysgYi9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKK0BAIC0xMSw3ICsxMSw3IEBACisgCisgI2luY2x1ZGUgPGFwdGkxOG4uaD4KKyAKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCitAQCAtMTYzLDYgKzE2Myw2IEBAIGNvbnN0IFZlbmRvciogcGtnVmVuZG9yTGlzdDo6RmluZFZlbmRvcihjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+IEdQR1ZPdXRwdXQpCS8qCisgfQorIAkJCQkJCQkJCS8qfX19Ki8KKyAKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0MmZmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gMmJmZjdlZTA2YTRmOTZlN2QzMjY5OTFkNjFmYjg2ZjhhYTY1MWQ0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjcgTWF5IDIwMTUgMDk6NDg6NDUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIFdzdWdnZXN0LWF0dHJpYnV0ZSBmcm9tIENYWEZMQUdTCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitXc3VnZ2VzdC1hdHRyaWJ1dGUgaXMgR0NDIDQuNiBmZWF0dXJlLCBjZW50b3M2IGlzIHVzaW5nIEdDQworNC40Ljcgd2hpY2ggdW5rbm93biB0aGlzIGZsYWcsIHNvIHJlbW92ZSBpdCBmcm9tIENYWEZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbiB8IDEgLQorIHRlc3QvbGliYXB0L21ha2VmaWxlICAgICAgICB8IDEgLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbiBiL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgoraW5kZXggYjBhOGQ5ZC4uOTFlZDAxMSAxMDA2NDQKKy0tLSBhL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgorKysrIGIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCitAQCAtMTEsNyArMTEsNiBAQCBDUFBGTEFHUys9IEBDUFBGTEFHU0AgQERFRlNAIC1EX1JFRU5UUkFOVCAtRF9GT1JUSUZZX1NPVVJDRT0yCisgQ1hYID0gQENYWEAKKyBDWFhGTEFHUys9IEBDWFhGTEFHU0AgLVdhbGwgLVdleHRyYQorIENYWEZMQUdTKz0gLVdjYXN0LWFsaWduIC1XbG9naWNhbC1vcCAtV3JlZHVuZGFudC1kZWNscyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucworLUNYWEZMQUdTKz0gLVdzdWdnZXN0LWF0dHJpYnV0ZT1wdXJlIC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3QgLVdzdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybgorICMgYSBiaXQgdG9vIHBlZGFudGljIHRvIGJlIHJ1biBieSBkZWZhdWx0CisgI0NYWEZMQUdTKz0gLVdwZWRhbnRpYyAtV25vLWxvbmctbG9uZyAtV25vLXZsYSAtV25vLXZhcmlhZGljLW1hY3JvcworIE5VTV9QUk9DUyA9IEBOVU1fUFJPQ1NACitkaWZmIC0tZ2l0IGEvdGVzdC9saWJhcHQvbWFrZWZpbGUgYi90ZXN0L2xpYmFwdC9tYWtlZmlsZQoraW5kZXggN2YyM2FjZS4uZTgwNWYxMyAxMDA2NDQKKy0tLSBhL3Rlc3QvbGliYXB0L21ha2VmaWxlCisrKysgYi90ZXN0L2xpYmFwdC9tYWtlZmlsZQorQEAgLTM5LDcgKzM5LDYgQEAgQ1hYRkxBR1MgKz0gLXB0aHJlYWQKKyAjIGRpc2FibGUgc29tZSBmbGFncyBmb3IgZ3Rlc3QgYWdhaW4KKyBDWFhGTEFHUys9IC1Xbm8tbWlzc2luZy1kZWNsYXJhdGlvbnMKKyBDWFhGTEFHUys9IC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMKKy1DWFhGTEFHUys9IC1Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9cHVyZSAtV25vLXN1Z2dlc3QtYXR0cmlidXRlPWNvbnN0IC1Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9bm9yZXR1cm4KKyAKKyAjIEFsbCBHb29nbGUgVGVzdCBoZWFkZXJzLiAgVXN1YWxseSB5b3Ugc2hvdWxkbid0IGNoYW5nZSB0aGlzIGRlZmluaXRpb24uCisgR1RFU1RfSEVBREVSUyA9IC91c3IvaW5jbHVkZS9ndGVzdC8qLmggXAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzJmNjRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitEaXNhYmxlIGNvbmZpZ3VyZSBhdCBjb21waWxhdGlvbiBzdGFnZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBhcHQtMC45LjcuNy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjkuNy43Lm9yaWcvTWFrZWZpbGUKKysrKyBhcHQtMC45LjcuNy9NYWtlZmlsZQorQEAgLTMzLDcgKzMzLDcgQEAgdmVyeWNsZWFuOiBjbGVhbgorICMgVGhlIHN0YXJ0dXAgdGFyZ2V0IGJ1aWxkcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyZSBzY3JpcHRzLiBJdCBzaG91bGQKKyAjIGJlIHVzZWQgYWZ0ZXIgYSBDVlMgY2hlY2tvdXQuCisgQ09OVkVSVEVEPWVudmlyb25tZW50Lm1hayBpbmNsdWRlL2NvbmZpZy5oIGluY2x1ZGUvYXB0aTE4bi5oIGJ1aWxkL2RvYy9Eb3h5ZmlsZSBtYWtlZmlsZQorLWluY2x1ZGUgYnVpbGRsaWIvY29uZmlndXJlLm1haworKyNpbmNsdWRlIGJ1aWxkbGliL2NvbmZpZ3VyZS5tYWsKKyAkKEJVSUxERElSKS9pbmNsdWRlL2NvbmZpZy5oOiBidWlsZGxpYi9jb25maWcuaC5pbgorICQoQlVJTERESVIpL2luY2x1ZGUvYXB0aTE4bi5oOiBidWlsZGxpYi9hcHRpMThuLmguaW4KKyAkKEJVSUxERElSKS9lbnZpcm9ubWVudC5tYWs6IGJ1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY3OTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorW1BBVENIXSBkaXNhYmxlIHRlc3QKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCit0ZXN0IG5lZWRzIGd0ZXN0IHBhY2thZ2UsIHNvIG5vdCBidWlsZCB0aGUgdGVzdCBkaXIKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgICAgIHwgNyArKystLS0tCisgY29uZmlndXJlLmFjIHwgNiAtLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA1ZjVmYjI3Li41MDcwZTk2IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtOSw4ICs5LDggQEAgZW5kaWYKKyAuUEhPTlk6IGRlZmF1bHQKKyBkZWZhdWx0OiBzdGFydHVwIGFsbAorIAorLS5QSE9OWTogaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBhbGwgYmluYXJ5IHByb2dyYW0gZG9jIHRlc3QgdXBkYXRlLXBvCistYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdGVzdCB1cGRhdGUtcG8gc3RhcnR1cCBkaXJzOgorKy5QSE9OWTogaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBhbGwgYmluYXJ5IHByb2dyYW0gZG9jIHVwZGF0ZS1wbworK2FsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHVwZGF0ZS1wbyBzdGFydHVwIGRpcnM6CisgCSQoTUFLRSkgLUMgdmVuZG9yICRACisgCSQoTUFLRSkgLUMgYXB0LXBrZyAkQAorIAkkKE1BS0UpIC1DIGFwdC1pbnN0ICRACitAQCAtMjEsOSArMjEsOCBAQCBhbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZAorIAkkKE1BS0UpIC1DIGRzZWxlY3QgJEAKKyAjCSQoTUFLRSkgLUMgZG9jICRACisgCSQoTUFLRSkgLUMgcG8gJEAKKy0JJChNQUtFKSAtQyB0ZXN0ICRACisgCistYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdGVzdCB1cGRhdGUtcG86IHN0YXJ0dXAgZGlycworK2FsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHVwZGF0ZS1wbzogc3RhcnR1cCBkaXJzCisgCisgZGlyczogc3RhcnR1cAorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNTY2M2FhZi4uYjBmOTU2NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODksMTIgKzg5LDYgQEAgQUNfQ0hFQ0tfTElCKGN1cmwsIGN1cmxfZWFzeV9pbml0LAorICAgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IEkgbmVlZCBDVVJMIGR1ZSBodHRwcyBzdXBwb3J0XSksCisgKQorIAorLUFDX0xBTkdfUFVTSChbQysrXSkKKy1BQ19DSEVDS19IRUFERVIoZ3Rlc3QvZ3Rlc3QuaCwsCistICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIGd0ZXN0IHRvIGJ1aWxkIHRlc3RzXSksCistKQorLUFDX0xBTkdfUE9QKFtDKytdKQorLQorIAorIEFDX1NVQlNUKEJEQkxJQikKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMWFlNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2ZpeC1nY2MtNC42LW51bGwtbm90LWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2FwdC1wa2cvY29udHJpYi93ZWFrcHRyLmgKKysrKyBiL2FwdC1wa2cvY29udHJpYi93ZWFrcHRyLmgKK0BAIC0yMSw2ICsyMSw3IEBACisgI2lmbmRlZiBXRUFLX1BPSU5URVJfSAorICNkZWZpbmUgV0VBS19QT0lOVEVSX0gKKyAKKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKyAjaW5jbHVkZSA8c2V0PgorIC8qKgorICAqIENsYXNzIGZvciBvYmplY3RzIHByb3ZpZGluZyBzdXBwb3J0IGZvciB3ZWFrIHBvaW50ZXJzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbWFrZXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlMzE2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbWFrZXJhY2UucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorSSB3YXMgc2VlaW5nIHZhcmlvdXMgaXNzdWVzIHdpdGggcGFyYWxsZWwgbWFrZSwgbWFpbmx5IGR1ZSB0byB0byB3aGF0IHdhcyBsaWtlbHkgCitwYXJ0aWFsbHkgaW5zdGFsbGVkIGhlYWRlcnMuIElmIHlvdSBjaGFuZ2UgaW50byB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQKKyJOT0lTWT0xIG1ha2UgIC4uL29iai9hcHQtcGtnL3NvdXJjZWxpc3Qub3BpYyIgaW4gYXB0LXBrZywgeW91J2xsIHNlZSBpdCAKK2RvZXNuJ3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBoZWFkZXJzIGJlaW5nIGluc3RhbGxlZC4gVGhpcyBwYXRjaAorZml4ZXMgdGhhdCBzbyB0aGluZ3MgYnVpbGQgY29ycmVjdGx5LgorCitSUCAyMDEyLzMvMTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhcHQtMC45LjkuNC9idWlsZGxpYi9saWJyYXJ5Lm1haworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjkuOS40Lm9yaWcvYnVpbGRsaWIvbGlicmFyeS5tYWsJMjAxMy0wNy0zMSAxNTo0NTowNy4zMjA0NDA1NzUgKzAzMDAKKysrKyBhcHQtMC45LjkuNC9idWlsZGxpYi9saWJyYXJ5Lm1hawkyMDEzLTA3LTMxIDE1OjQ2OjQ5LjQ0MDQ0MDU2MSArMDMwMAorQEAgLTYxLDcgKzYxLDcgQEAKKyAKKyAjIENvbXBpbGF0aW9uIHJ1bGVzCisgdnBhdGggJS5jYyAkKFNVQkRJUlMpCistJChPQkopLyUub3BpYzogJS5jYyAkKExJQlJBUllERVBFTkRTKQorKyQoT0JKKS8lLm9waWM6ICUuY2MgJChMSUJSQVJZREVQRU5EUykgJCgkKExPQ0FMKS1IRUFERVJTKQorIAllY2hvIENvbXBpbGluZyAkPCB0byAkQAorIAkkKENYWCkgLWMgJChJTkxJTkVERVBGTEFHKSAkKENQUEZMQUdTKSAkKENYWEZMQUdTKSAkKFBJQ0ZMQUdTKSAtbyAkQCAkPAorIAkkKERvRGVwKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm8tbmxzLWRwa2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5OTZkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm8tbmxzLWRwa2cucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworKysrIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCitAQCAtNDIsNiArNDIsMTIgQEAKKyAjaW5jbHVkZSA8YXB0aTE4bi5oPgorIAkJCQkJCQkJCS8qfX19Ki8KKyAKKysjaWZkZWYgVVNFX05MUworKyNkZWZpbmUgX2Rwa2coeCkgZGdldHRleHQoImRwa2ciLCB4KQorKyNlbHNlCisrI2RlZmluZSBfZHBrZyh4KSB4CisrI2VuZGlmCisrCisgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAKKyBuYW1lc3BhY2UKK0BAIC0xMjc5LDcgKzEyODUsNyBAQCB2b2lkIHBrZ0RQa2dQTTo6V3JpdGVBcHBvcnRSZXBvcnQoY29uc3QKKyAgICB9CisgCisgICAgLy8gY2hlY2sgaWYgaXRzIG5vdCBhIGZvbGxvdyB1cCBlcnJvciAKKy0gICBjb25zdCBjaGFyICpuZWVkbGUgPSBkZ2V0dGV4dCgiZHBrZyIsICJkZXBlbmRlbmN5IHByb2JsZW1zIC0gbGVhdmluZyB1bmNvbmZpZ3VyZWQiKTsKKysgICBjb25zdCBjaGFyICpuZWVkbGUgPSBfZHBrZygiZGVwZW5kZW5jeSBwcm9ibGVtcyAtIGxlYXZpbmcgdW5jb25maWd1cmVkIik7CisgICAgaWYoc3Ryc3RyKGVycm9ybXNnLCBuZWVkbGUpICE9IE5VTEwpIHsKKyAgICAgICBzdGQ6OmNsb2cgPDwgXygiTm8gYXBwb3J0IHJlcG9ydCB3cml0dGVuIGJlY2F1c2UgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzIGl0cyBhIGZvbGxvd3VwIGVycm9yIGZyb20gYSBwcmV2aW91cyBmYWlsdXJlLiIpIDw8IHN0ZDo6ZW5kbDsKKyAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmM2NzIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvcGFja2FnZW1hbmFnZXIuY2MgYi9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCitpbmRleCAyNDk1NDJjLi4wYTE5MTFmIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYworKysrIGIvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYworQEAgLTk1MiwxMCArOTUyLDEyIEBAIGJvb2wgcGtnUGFja2FnZU1hbmFnZXI6OlNtYXJ0VW5QYWNrKFBrZ0l0ZXJhdG9yIFBrZywgYm9vbCBjb25zdCBJbW1lZGlhdGUsIGludCBjCisgICAgICAgcmV0dXJuIGZhbHNlOworIAorICAgIGlmIChJbW1lZGlhdGUgPT0gdHJ1ZSkgeworKyNpZiAwCisgICAgICAgLy8gUGVyZm9ybSBpbW1lZGF0ZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwYWNrYWdlLiAKKyAgICAgICAgICBpZiAoU21hcnRDb25maWd1cmUoUGtnLCBEZXB0aCArIDEpID09IGZhbHNlKQorICAgICAgICAgICAgIF9lcnJvci0+RXJyb3IoXygiQ291bGQgbm90IHBlcmZvcm0gaW1tZWRpYXRlIGNvbmZpZ3VyYXRpb24gb24gJyVzJy4gIgorICAgICAgICAgICAgICAgICJQbGVhc2Ugc2VlIG1hbiA1IGFwdC5jb25mIHVuZGVyIEFQVDo6SW1tZWRpYXRlLUNvbmZpZ3VyZSBmb3IgZGV0YWlscy4gKCVkKSIpLFBrZy5GdWxsTmFtZSgpLmNfc3RyKCksMik7CisrI2VuZGlmCisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworQEAgLTEwMzgsNiArMTA0MCw3IEBAIHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlclJlc3VsdCBwa2dQYWNrYWdlTWFuYWdlcjo6T3JkZXJJbnN0YWxsKCkKKyAgICAgICB9CisgICAgfQorIAorKyNpZiAwCisgICAgLy8gRmluYWwgcnVuIHRocm91Z2ggdGhlIGNvbmZpZ3VyZSBwaGFzZQorICAgIGlmIChDb25maWd1cmVBbGwoKSA9PSBmYWxzZSkKKyAgICAgICByZXR1cm4gRmFpbGVkOworQEAgLTEwNTIsNiArMTA1NSw3IEBAIHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlclJlc3VsdCBwa2dQYWNrYWdlTWFuYWdlcjo6T3JkZXJJbnN0YWxsKCkKKyAJIHJldHVybiBGYWlsZWQ7CisgICAgICAgfQorICAgIH0KKysjZW5kaWYKKyAJIAorICAgIHJldHVybiBDb21wbGV0ZWQ7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5ZTQyZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9kb2MucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorRGlzYWJsZSBkb2N1bWVudGF0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGFwdC0wLjkuNy43L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS43Ljcub3JpZy9NYWtlZmlsZQorKysrIGFwdC0wLjkuNy43L01ha2VmaWxlCitAQCAtMTcsNyArMTcsNyBAQCBhbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hCisgCSQoTUFLRSkgLUMgY21kbGluZSAkQAorIAkkKE1BS0UpIC1DIGZ0cGFyY2hpdmUgJEAKKyAJJChNQUtFKSAtQyBkc2VsZWN0ICRACistCSQoTUFLRSkgLUMgZG9jICRACisrIwkkKE1BS0UpIC1DIGRvYyAkQAorIAkkKE1BS0UpIC1DIHBvICRACisgCSQoTUFLRSkgLUMgdGVzdCAkQAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdHJ1bmNhdGUtZmlsZW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxYzQyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdHJ1bmNhdGUtZmlsZW5hbWUucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorc3RydXRsLmNjOiB0aGUgZmlsZW5hbWUgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gMjU1CisKK1RoZSBVUkl0b0ZpbGVOYW1lIHRyYW5zbGF0ZXMgdGhlIHBhdGggaW50byB0aGUgZmlsZW5hbWUsIGJ1dCB0aGUKK2ZpbGVuYW1lIGNhbid0IGJlIGxvbmdlciB0aGFuIDI1NSBhY2NvcmRpbmcgdG8KKy91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaC4KKworVHJ1bmNhdGUgaXQgd2hlbiBpdCBpcyBsb25nZXIgdGhhbiAyNDAgKGxlYXZlIHNvbWUgc3BhY2VzIGZvcgorIi5QYWNrYWdlcyIgYW5kICIuX1JlbGVhc2UiIHN1ZmZpeCkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MgfCAgICA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjIGIvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworLS0tIGEvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworKysrIGIvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYworQEAgLTM5OSw3ICszOTksMTIgQEAgc3RyaW5nIFVSSXRvRmlsZU5hbWUoY29uc3Qgc3RyaW5nICZVUkkpCisgICAgLy8gIlx4MDAtXHgyMHt9fFxcXFxeXFxbXFxdPD5cIlx4N0YtXHhGRiI7CisgICAgc3RyaW5nIE5ld1VSSSA9IFF1b3RlU3RyaW5nKFUsIlxcfHt9W108PlwiXn5fPSFAIyQlXiYqIik7CisgICAgcmVwbGFjZShOZXdVUkkuYmVnaW4oKSxOZXdVUkkuZW5kKCksJy8nLCdfJyk7CistICAgcmV0dXJuIE5ld1VSSTsKKysKKysgICAvLyBUcnVuY2F0ZSBmcm9tIHRoZSBoZWFkIHdoZW4gaXQgaXMgbG9uZ2VyIHRoYW4gMjQwCisrICAgaWYoTmV3VVJJLmxlbmd0aCgpID4gMjQwKQorKyAgICAgICByZXR1cm4gTmV3VVJJLnN1YnN0cihOZXdVUkkubGVuZ3RoKCkgLSAyNDAsIE5ld1VSSS5sZW5ndGgoKSAtIDEpOworKyAgIGVsc2UKKysgICAgICAgcmV0dXJuIE5ld1VSSTsKKyB9CisgCQkJCQkJCQkJLyp9fX0qLworIC8vIEJhc2U2NEVuY29kZSAtIEJhc2U2NCBFbmNvZGluZyByb3V0aW5lIGZvciBzaG9ydCBzdHJpbmdzCQkvKnt7eyovCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3VzZS1ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGZjZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3VzZS1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXB0LTAuOS43LjcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS43Ljcub3JpZy9jb25maWd1cmUuYWMKKysrKyBhcHQtMC45LjcuNy9jb25maWd1cmUuYWMKK0BAIC0xMTIsNyArMTEyLDcgQEAgZG5sIFRoaXMgaXMgb2Z0ZW4gdGhlIGRwa2cgYXJjaGl0ZWN0dXJlCisgZG5sIEZpcnN0IGNoZWNrIGFnYWluc3QgdGhlIGZ1bGwgY2Fub25pY2FsIGNhbm9uY2lhbC1zeXN0ZW0tdHlwZSBpbiAkdGFyZ2V0CisgZG5sIGFuZCBpZiB0aGF0IGZhaWxzLCBqdXN0IGxvb2sgZm9yIHRoZSBjcHUKKyBBQ19NU0dfQ0hFQ0tJTkcoZGViaWFuIGFyY2hpdGVjdHVyZSkKKy1hcmNoc2V0PSJgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIYCIKKythcmNoc2V0PSJgZWNobyAkaG9zdF9hbGlhc3xjdXQgLWQnLScgLWYxYCIKKyBpZiB0ZXN0ICJ4JGFyY2hzZXQiID0gIngiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IHVzZSAtLWhvc3Q9IG9yIG91dHB1dCBmcm9tIGRwa2ctYXJjaGl0ZWN0dXJlXSkKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHRfMS4wLjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3N2UyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHRfMS4wLjEwLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorREVQRU5EUyA9ICJjdXJsIGRiIgorUkRFUEVORFNfJHtQTn0gPSAiZHBrZyBiYXNoIGRlYmlhbnV0aWxzIgorcmVxdWlyZSBhcHQuaW5jCisKK3JlcXVpcmUgYXB0LXBhY2thZ2UuaW5jCisKK1BBQ0tBR0VDT05GSUcgPz89ICJsem1hIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICJhY19jdl9saWJfbHptYV9sem1hX2Vhc3lfZW5jb2Rlcj15ZXMsYWNfY3ZfbGliX2x6bWFfbHptYV9lYXN5X2VuY29kZXI9bm8seHoiCisKK0ZJTEVTXyR7UE59ICs9ICIke2JpbmRpcn0vYXB0LWtleSIKK2FwdC1tYW5wYWdlcyArPSAiZG9jL2FwdC1rZXkuOCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgI1dyaXRlIHRoZSBjb3JyZWN0IGFwdC1hcmNoaXRlY3R1cmUgdG8gYXB0LmNvbmYKKyAgICBBUFRfQ09ORj0ke0R9L2V0Yy9hcHQvYXB0LmNvbmYKKyAgICBlY2hvICdBUFQ6OkFyY2hpdGVjdHVyZSAiJHtEUEtHX0FSQ0h9IjsnID4gJHtBUFRfQ09ORn0KKyAgICBvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXByaXZhdGUgJHtEfSR7bGliZGlyfS8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM1MTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2FwdC5jb25mCkBAIC0wLDAgKzEsNDIgQEAKK0RpciAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKK3sKKyAgIFN0YXRlICJ2YXIvbGliL2FwdC8iCisgICB7CisgICAgICBMaXN0cyAiI0FQVENPTkYjL2xpc3RzLyI7CisgICAgICBzdGF0dXMgIiNST09URlMjL3Zhci9saWIvZHBrZy9zdGF0dXMiOworICAgfTsKKyAgIENhY2hlICJ2YXIvY2FjaGUvYXB0LyIKKyAgIHsKKyAgICAgIEFyY2hpdmVzICJhcmNoaXZlcy8iOworICAgICAgcGtnY2FjaGUgIiI7CisgICAgICBzcmNwa2djYWNoZSAiIjsKKyAgIH07CisgICBCaW4gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8iCisgICB7CisgICAgICBtZXRob2RzICIke1NUQUdJTkdfTElCRElSfS9hcHQvbWV0aG9kcy8iOworICAgICAgZ3ppcCAiL2Jpbi9nemlwIjsKKyAgICAgIGRwa2cgImRwa2ciOworICAgICAgZHBrZy1zb3VyY2UgImRwa2ctc291cmNlIjsKKyAgICAgIGRwa2ctYnVpbGRwYWNrYWdlICJkcGtnLWJ1aWxkcGFja2FnZSI7CisgICAgICBhcHQtZ2V0ICJhcHQtZ2V0IjsKKyAgICAgIGFwdC1jYWNoZSAiYXB0LWNhY2hlIjsKKyAgIH07CisgICBFdGMgIiNBUFRDT05GIyIKKyAgIHsKKyAgICAgIFByZWZlcmVuY2VzICJwcmVmZXJlbmNlcyI7CisgICB9OworfTsKKworQVBUCit7CisgIEluc3RhbGwtUmVjb21tZW5kcyAidHJ1ZSI7CisgIEltbWVkaWF0ZS1Db25maWd1cmUgImZhbHNlIjsKKyAgQXJjaGl0ZWN0dXJlICJpNTg2IjsKKyAgR2V0CisgIHsKKyAgICAgQXNzdW1lLVllcyAidHJ1ZSI7CisgICAgIEZvcmNlLVllcyAidHJ1ZSIKKyAgfTsKK307CisKK0RQa2c6Ok9wdGlvbnMgeyItLXJvb3Q9I1JPT1RGUyMiOyItLWFkbWluZGlyPSNST09URlMjL3Zhci9saWIvZHBrZyI7Ii0tZm9yY2UtYWxsIjsiLS1uby1kZWJzaWcifTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZGJfbGlua2luZ19oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MWQ0YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZGJfbGlua2luZ19oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGFwdC0wLjcuMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC43LjMub3JpZy9jb25maWd1cmUuYWMJMjAwNy0wNy0wMSAxMDozODo0NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcHQtMC43LjMvY29uZmlndXJlLmFjCTIwMDctMDgtMjEgMTM6Mzk6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtNjcsOCArNjcsMjAgQEAKKyAgICAgICBbQUNfREVGSU5FKEhBVkVfQkRCKQorICAgICAgICBCREJMSUI9Ii1sZGIiCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCistICAgICAgW0JEQkxJQj0iIgorLSAgICAgICBBQ19NU0dfUkVTVUxUKG5vKV0KKysKKysgICAgICAgTElCUz0iJExJQlMgLWxwdGhyZWFkIgorKyAgICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHdlIGNhbiBsaW5rIGFnYWluc3QgQmVya2VsZXlEQiB3aXRoIHB0aHJlYWQpCisrICAgICAgICBBQ19MSU5LX0lGRUxTRSgKKysgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisrICAgICAgICAgWyNpbmNsdWRlIDxkYi5oPl0sCisrICAgICAgICAgW2ludCByLCBzLCB0OyBkYl92ZXJzaW9uKCZyLCAmcywgJnQpO10KKysgICAgICAgICldLAorKyAgICAgICAgW0FDX0RFRklORShIQVZFX0JEQikKKysgICAgICAgICBCREJMSUI9Ii1sZGIgLWxwdGhyZWFkIgorKyAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisrICAgICAgICBbQkRCTElCPSIiCisrICAgICAgICAgQUNfTVNHX1JFU1VMVChubyldCisrICAgICAgKV0gICAgICAgCisgICAgICldCisgKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDMwMzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZW52aXJvbm1lbnQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogYXB0LTAuNi40Ni4yL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjYuNDYuMi5vcmlnL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgkyMDA3LTAzLTI5IDExOjM4OjU4LjAwMDAwMDAwMCArMDEwMAorKysrIGFwdC0wLjYuNDYuMi9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4JMjAwNy0wMy0yOSAxMTozOToxMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Miw3ICs2Miw3IEBACisgCisgIyBTaGFyZWQgbGlicmFyeSB0aGluZ3MKKyBIT1NUX09TID0gQGhvc3Rfb3NACistaWZuZXEgKCQod29yZHMgJChmaWx0ZXIgbGludXgtZ251IGdudSUgJWdudSwkKEhPU1RfT1MpKSksMCkKKytpZm5lcSAoJCh3b3JkcyAkKGZpbHRlciBsaW51eC1nbnUgbGludXgtZ251ZWFiaSBnbnUlICVnbnUsJChIT1NUX09TKSkpLDApCisgICAgU09OQU1FX01BR0lDPS1XbCwtc29uYW1lIC1XbCwKKyAgICBMRkxBR1NfU089CisgZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDIzOGZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBjb25maWd1cmUuaW4gICAgIHwgICAgNiAtLS0tLS0KKyBtZXRob2RzL21ha2VmaWxlIHwgICAgNyAtLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMyBkZWxldGlvbnMoLSkKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04NiwxMiArODYsNiBAQCBBQ19DSEVDS19IRUFERVIoZGIuaCwKKyAKKyBMSUJTPSIkc2F2ZUxJQlMiCisgCistQUNfQ0hFQ0tfTElCKGN1cmwsIGN1cmxfZWFzeV9pbml0LAorLSAgICAgW0FDX0NIRUNLX0hFQURFUihjdXJsL2N1cmwuaCwKKy0gICAgICAgIGN1cmxfb2s9eWVzLAorLSAgICAgICAgY3VybF9vaz1ubyldLAorLSAgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IEkgbmVlZCBDVVJMIGR1ZSBodHRwcyBzdXBwb3J0XSksCistKQorIAorIEFDX1NVQlNUKEJEQkxJQikKKyAKKy0tLSBhL21ldGhvZHMvbWFrZWZpbGUKKysrKyBiL21ldGhvZHMvbWFrZWZpbGUKK0BAIC01MSwxMyArNTEsNiBAQCBMSUJfTUFLRVMgPSBhcHQtcGtnL21ha2VmaWxlCisgU09VUkNFID0gaHR0cC5jYyBodHRwX21haW4uY2MgcmZjMjU1M2VtdS5jYyBjb25uZWN0LmNjIHNlcnZlci5jYworIGluY2x1ZGUgJChQUk9HUkFNX0gpCisgCistIyBUaGUgaHR0cHMgbWV0aG9kCistUFJPR1JBTT1odHRwcworLVNMSUJTID0gLWxhcHQtcGtnIC1sY3VybCAkKElOVExMSUJTKQorLUxJQl9NQUtFUyA9IGFwdC1wa2cvbWFrZWZpbGUKKy1TT1VSQ0UgPSBodHRwcy5jYyBzZXJ2ZXIuY2MKKy1pbmNsdWRlICQoUFJPR1JBTV9IKQorLQorICMgVGhlIGZ0cCBtZXRob2QKKyBQUk9HUkFNPWZ0cAorIFNMSUJTID0gLWxhcHQtcGtnICQoU09DS0VUTElCUykgJChJTlRMTElCUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGI3N2U4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiQSBHTlUgdG9vbCB0aGF0IHByb2N1ZGUgc2hlbGwgc2NyaXB0cyB0byBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIkF1dG9jb25mIGlzIGFuIGV4dGVuc2libGUgcGFja2FnZSBvZiBNNCBtYWNyb3MgdGhhdCBwcm9kdWNlIHNoZWxsIHNjcmlwdHMgdG8gYXV0b21hdGljYWxseSBcIAorY29uZmlndXJlIHNvZnR3YXJlIHNvdXJjZSBjb2RlIHBhY2thZ2VzLiBBdXRvY29uZiBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZm9yIGEgcGFja2FnZSBmcm9tIGEgdGVtcGxhdGUgXAorZmlsZSB0aGF0IGxpc3RzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZlYXR1cmVzIHRoYXQgdGhlIHBhY2thZ2UgY2FuIHVzZSwgaW4gdGhlIGZvcm0gb2YgTTQgbWFjcm8gY2FsbHMuIgorTElDRU5TRSA9ICJHUEx2MyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi8iCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyArPSAibTQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibTQtbmF0aXZlIGdudS1jb25maWctbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLW00IG5hdGl2ZXNkay1nbnUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0gPSAibTQgZ251LWNvbmZpZyBcCisJCSAgcGVybCBcCisJCSAgcGVybC1tb2R1bGUtY2FycCBcCisJCSAgcGVybC1tb2R1bGUtY29uc3RhbnQgXAorCQkgIHBlcmwtbW9kdWxlLWVycm5vIFwKKwkJICBwZXJsLW1vZHVsZS1leHBvcnRlciBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1iYXNlbmFtZSBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1jb21wYXJlIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWNvcHkgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtZ2xvYiBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1wYXRoIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLXN0YXQgXAorCQkgIHBlcmwtbW9kdWxlLWdldG9wdC1sb25nIFwKKwkJICBwZXJsLW1vZHVsZS1pby1maWxlIFwKKwkJICBwZXJsLW1vZHVsZS1wb3NpeCBcCisJCSAgcGVybC1tb2R1bGUtZGF0YS1kdW1wZXIgXAorCQkgIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIm00LW5hdGl2ZSBnbnUtY29uZmlnLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2F1dG9jb25mL2F1dG9jb25mLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL3Byb2dyYW1fcHJlZml4LnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BFUkw9JHtVU1JCSU5QQVRIfS9wZXJsIgorCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZW1hY3MKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWJkM2EyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1leGNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMTM5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjYzLm9yaWcvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzozOTowMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6NDM6MzguMDAwMDAwMDAwICswMDAwCitAQCAtNzYsNiArNzYsNyBAQAorICAgLWksIC0taW5zdGFsbCAgICAgICAgICAgIGNvcHkgbWlzc2luZyBhdXhpbGlhcnkgZmlsZXMKKyAgICAgICAtLW5vLXJlY3Vyc2l2ZSAgICAgICBkb24ndCByZWJ1aWxkIHN1Yi1wYWNrYWdlcworICAgLXMsIC0tc3ltbGluayAgICAgICAgICAgIHdpdGggLWksIGluc3RhbGwgc3ltYm9saWMgbGlua3MgaW5zdGVhZCBvZiBjb3BpZXMKKysgIC14LCAtLWV4Y2x1ZGU9U1RFUFMgICAgICBzdGVwcyB3ZSBzaG91bGQgbm90IHJ1bgorICAgLW0sIC0tbWFrZSAgICAgICAgICAgICAgIHdoZW4gYXBwbGljYWJsZSwgcmUtcnVuIC4vY29uZmlndXJlICYmIG1ha2UKKyAgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW3N5bnRheF0KKyAKK0BAIC0xMzYsNiArMTM3LDEzIEBACisgIyBSZWN1cnNlIGludG8gc3VicGFja2FnZXMKKyBteSAkcmVjdXJzaXZlID0gMTsKKyAKKysjIFN0ZXBzIHRvIGV4Y2x1ZGUKKytteSBAZXhjbHVkZTsKKytteSBAZXg7CisrCisrbXkgJHVzZXNfZ2V0dGV4dDsKKytteSAkY29uZmlndXJlX2FjOworKworICMjIC0tLS0tLS0tLS0gIyMKKyAjIyBSb3V0aW5lcy4gICMjCisgIyMgLS0tLS0tLS0tLSAjIworQEAgLTE1Myw2ICsxNjEsNyBAQAorIAkgICdCfHByZXBlbmQtaW5jbHVkZT1zJwkgPT4gXEBwcmVwZW5kX2luY2x1ZGUsCisgCSAgJ2l8aW5zdGFsbCcgICAgICAgICAgICA9PiBcJGluc3RhbGwsCisgCSAgJ3N8c3ltbGluaycgICAgICAgICAgICA9PiBcJHN5bWxpbmssCisrICAJICAneHxleGNsdWRlPXMnICAgICAgICAgID0+IFxAZXhjbHVkZSwKKyAJICAnbXxtYWtlJyAgICAgICAgICAgICAgID0+IFwkcnVuX21ha2UsCisgCSAgJ3JlY3Vyc2l2ZSEnICAgICAgICAgICA9PiBcJHJlY3Vyc2l2ZSk7CisgCitAQCAtMTYyLDYgKzE3MSw4IEBACisgICBwYXJzZV9XQVJOSU5HUzsKKyAgIHBhcnNlX3dhcm5pbmdzICctLXdhcm5pbmdzJywgQHdhcm5pbmc7CisgCisrICBAZXhjbHVkZSA9IG1hcCB7IHNwbGl0IC8sLyB9IEBleGNsdWRlOworKworICAgIyBFdmVuIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIGNvbmZpZ3VyZS5hYywgdHJpbSB0byBnZXQgdGhlCisgICAjIGRpcmVjdG9yeSwgYW5kIGxvb2sgZm9yIGNvbmZpZ3VyZS5hYyBhZ2Fpbi4gIEJlY2F1c2UgKGkpIHRoZSBjb2RlCisgICAjIGlzIHNpbXBsZXIsIGFuZCAoaWkpIHdlIGFyZSBzdGlsbCBhYmxlIHRvIGRpYWdub3NlIHNpbXVsdGFuZW91cworQEAgLTI1NSw2ICsyNjYsMTEgQEAKKyB7CisgICBteSAoJGFjbG9jYWwsICRmbGFncykgPSBAXzsKKyAKKysgIEBleCA9IGdyZXAgKC9eYWNsb2NhbCQvLCBAZXhjbHVkZSk7CisrICBpZiAoJCNleCAhPSAtMSkgeworKyAgICByZXR1cm47CisrICB9CisrCisgICAjIGFjbG9jYWwgMS44KyBkb2VzIGFsbCB0aGlzIGZvciBmcmVlLiAgSXQgY2FuIGJlIHJlY29nbml6ZWQgYnkgaXRzCisgICAjIC0tZm9yY2Ugc3VwcG9ydC4KKyAgIGlmICgkYWNsb2NhbF9zdXBwb3J0c19mb3JjZSkKK0BAIC0zNjgsNyArMzg0LDEwIEBACisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHhzeXN0ZW1faGludCAoImF1dG9wb2ludCBpcyBuZWVkZWQgYmVjYXVzZSB0aGlzIHBhY2thZ2UgdXNlcyBHZXR0ZXh0IiwgIiRhdXRvcG9pbnQiKTsKKysgICAgICBAZXggPSBncmVwICgvXmF1dG9wb2ludCQvLCBAZXhjbHVkZSk7CisrICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgICAgIHhzeXN0ZW1faGludCAoImF1dG9wb2ludCBpcyBuZWVkZWQgYmVjYXVzZSB0aGlzIHBhY2thZ2UgdXNlcyBHZXR0ZXh0IiwgIiRhdXRvcG9pbnQiKTsKKysgICAgICB9CisgICAgIH0KKyAKKyAKK0BAIC01MzIsMTYgKzU1MSwxNyBAQAorIAl7CisgCSAgJGxpYnRvb2xpemUgLj0gIiAtLWx0ZGwiOworIAl9CistICAgICAgeHN5c3RlbV9oaW50ICgibGlidG9vbGl6ZSBpcyBuZWVkZWQgYmVjYXVzZSB0aGlzIHBhY2thZ2UgdXNlcyBMaWJ0b29sIiwgJGxpYnRvb2xpemUpOworLSAgICAgICRyZXJ1bl9hY2xvY2FsID0gMTsKKysgICAgICBAZXggPSBncmVwICgvXmxpYnRvb2xpemUkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtX2hpbnQgKCJsaWJ0b29saXplIGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIExpYnRvb2wiLCAkbGlidG9vbGl6ZSk7CisrICAgICAgICAkcmVydW5fYWNsb2NhbCA9IDE7CisrICAgICAgfQorICAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICB2ZXJiICIkY29uZmlndXJlX2FjOiBub3QgcnVubmluZyBsaWJ0b29saXplOiAtLWluc3RhbGwgbm90IGdpdmVuIjsKKyAgICAgfQorIAorLQorLQorICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAgICMgUmVydW5uaW5nIGFjbG9jYWwuICAjCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworQEAgLTU3Miw3ICs1OTIsMTAgQEAKKyAgICMgbGF0dGVyIHJ1bnMgdGhlIGZvcm1lciwgYW5kIChpaSkgYXV0b2NvbmYgaXMgc3RyaWN0ZXIgdGhhbgorICAgIyBhdXRvaGVhZGVyLiAgU28gYWxsIGluIGFsbCwgYXV0b2NvbmYgc2hvdWxkIGdpdmUgYmV0dGVyIGVycm9yCisgICAjIG1lc3NhZ2VzLgorLSAgeHN5c3RlbSAoJGF1dG9jb25mKTsKKysgIEBleCA9IGdyZXAgKC9eYXV0b2NvbmYkLywgQGV4Y2x1ZGUpOworKyAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgeHN5c3RlbSAoIiRhdXRvY29uZiIpOworKyAgfQorIAorIAorICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjCitAQCAtNTkzLDcgKzYxNiwxMCBAQAorICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICB4c3lzdGVtICgkYXV0b2hlYWRlcik7CisrICAgICAgQGV4ID0gZ3JlcCAoL15hdXRvaGVhZGVyJC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbSAoIiRhdXRvaGVhZGVyIik7CisrICAgICAgfQorICAgICB9CisgCisgCitAQCAtNjEwLDcgKzYzNiwxMCBAQAorICAgICAgICMgV2Ugc2hvdWxkIGFsd2F5cyBydW4gYXV0b21ha2UsIGFuZCBsZXQgaXQgZGVjaWRlIHdoZXRoZXIgaXQgc2hhbGwKKyAgICAgICAjIHVwZGF0ZSB0aGUgZmlsZSBvciBub3QuICBJbiBmYWN0LCB0aGUgZWZmZWN0IG9mIGAkZm9yY2UnIGlzIGFscmVhZHkKKyAgICAgICAjIGluY2x1ZGVkIGluIGAkYXV0b21ha2UnIHZpYSBgLS1uby1mb3JjZScuCistICAgICAgeHN5c3RlbSAoJGF1dG9tYWtlKTsKKysgICAgICBAZXggPSBncmVwICgvXmF1dG9tYWtlJC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbSAoIiRhdXRvbWFrZSIpOworKyAgICAgIH0KKyAgICAgfQorIAorIAorQEAgLTYzNCw3ICs2NjMsMTAgQEAKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICB7CistCSAgICAgIHhzeXN0ZW0gKCIkbWFrZSIpOworKyAgICAgICAgICAgICAgQGV4ID0gZ3JlcCAoL15tYWtlJC8sIEBleGNsdWRlKTsKKysgICAgICAgICAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrCSAgICAgICAgeHN5c3RlbSAoIiRtYWtlIik7CisrICAgICAgICAgICAgICB9CisgCSAgICB9CisgCX0KKyAgICAgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmYxOGMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKK0luZGV4OiBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42My5vcmlnL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6NDM6NTUuMDAwMDAwMDAwICswMDAwCisrKysgYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjQ2OjE2LjAwMDAwMDAwMCArMDAwMAorQEAgLTU4LDcgKzU4LDcgQEAKKyAkaGVscCA9ICJVc2FnZTogJDAgW09QVElPTl0uLi4gW0RJUkVDVE9SWV0uLi4KKyAKKyBSdW4gYGF1dG9jb25mJyAoYW5kIGBhdXRvaGVhZGVyJywgYGFjbG9jYWwnLCBgYXV0b21ha2UnLCBgYXV0b3BvaW50JworLShmb3JtZXJseSBgZ2V0dGV4dGl6ZScpLCBhbmQgYGxpYnRvb2xpemUnIHdoZXJlIGFwcHJvcHJpYXRlKQorKyhmb3JtZXJseSBgZ2V0dGV4dGl6ZScpLCBgbGlidG9vbGl6ZScsIGFuZCBgZ251LWNvbmZpZ2l6ZScgd2hlcmUgYXBwcm9wcmlhdGUpCisgcmVwZWF0ZWRseSB0byByZW1ha2UgdGhlIEdOVSBCdWlsZCBTeXN0ZW0gZmlsZXMgaW4gc3BlY2lmaWVkCisgRElSRUNUT1JJRVMgYW5kIHRoZWlyIHN1YmRpcmVjdG9yaWVzIChkZWZhdWx0aW5nIHRvIGAuJykuCisgCitAQCAtMTE1LDYgKzExNSw3IEBACisgbXkgJGxpYnRvb2xpemUgPSAkRU5WeydMSUJUT09MSVpFJ30gfHwgJ2xpYnRvb2xpemUnOworIG15ICRhdXRvcG9pbnQgID0gJEVOVnsnQVVUT1BPSU5UJ30gIHx8ICdhdXRvcG9pbnQnOworIG15ICRtYWtlICAgICAgID0gJEVOVnsnTUFLRSd9ICAgICAgIHx8ICdtYWtlJzsKKytteSAkZ251Y29uZmlnaXplID0gJEVOVnsnR05VQ09ORklHSVpFJ30gICAgICAgfHwgJ2dudS1jb25maWdpemUnOworIAorICMgLS1pbnN0YWxsIC0tIGFzIC0tYWRkLW1pc3NpbmcgaW4gb3RoZXIgdG9vbHMuCisgbXkgJGluc3RhbGwgPSAwOworQEAgLTY0NCw2ICs2NDUsMTAgQEAKKyAgICAgICB9CisgICAgIH0KKyAKKysgIEBleCA9IGdyZXAgKC9eZ251LWNvbmZpZ2l6ZSQvLCBAZXhjbHVkZSk7CisrICBpZiAoJCNleCA9PSAtMSkgeworKyAgICB4c3lzdGVtICgiJGdudWNvbmZpZ2l6ZSIpOworKyAgfQorIAorICAgIyAtLS0tLS0tLS0tLS0tLSAjCisgICAjIFJ1bm5pbmcgbWFrZS4gICMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTMyNmYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjMub3JpZy9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTA4LTI4IDAzOjA4OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzozODo0MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xOTAsNiArMTkwLDcgQEAKKyAgICRhdXRvY29uZiAgIC49IGpvaW4gKCcgLS1wcmVwZW5kLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAcHJlcGVuZF9pbmNsdWRlKTsKKyAgICRhdXRvaGVhZGVyIC49IGpvaW4gKCcgLS1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworICAgJGF1dG9oZWFkZXIgLj0gam9pbiAoJyAtLXByZXBlbmQtaW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBwcmVwZW5kX2luY2x1ZGUpOworKyAgJGFjbG9jYWwgICAgLj0gam9pbiAoJyAtSSAnLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBpbmNsdWRlKTsKKyAKKyAgICMgLS1pbnN0YWxsIGFuZCAtLXN5bWxpbms7CisgICBpZiAoJGluc3RhbGwpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3Rlc3QtYXV0b21ha2UtcmVzdWx0LWZvcm1hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU4MTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3Rlc3QtYXV0b21ha2UtcmVzdWx0LWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDEzNiBAQAorRnJvbSBhN2U3MjJmOTc0ZTI1MjlkM2U1NjRkOGQ5NGM4NmNjOGJkYmM0MGU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmFkdSBQYXRyaXUgPHJhZHUucGF0cml1QGVuZWEuY29tPgorRGF0ZTogTW9uLCAyNCBNYXIgMjAxNCAxNjozMzoxOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBhdXRvdGVzdDogbmV3IHRlc3RzdWl0ZSBvcHRpb24gdG8gZW5hYmxlIGF1dG9tYWtlIHRlc3QKKyByZXN1bHQgZm9ybWF0CisKKyogbGliL2F1dG90ZXN0L2dlbmVyYWwubTQ6IGFkZGVkICItLWFtLWZtdCB8IC1BIiBjb21tYW5kIGxpbmUKK3BhcmFtZXRlciBmb3IgdGVzdHN1aXRlIHNjcmlwdCB0byBlbmFibGUgIlJFU1VMVDogdGVzdG5hbWUiIG91dHB1dDsKK3dpbGwgYmUgdXNlZCBieSB5b2N0byBwdGVzdCBwYWNrYWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJhZHUgUGF0cml1IDxyYWR1LnBhdHJpdUBlbmVhLmNvbT4KKy0tLQorIGxpYi9hdXRvdGVzdC9nZW5lcmFsLm00IHwgICAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNCBiL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00CitpbmRleCA2MGMwMzUyLi5jMWY1YTliIDEwMDY0NAorLS0tIGEvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKKysrKyBiL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00CitAQCAtNDEyLDYgKzQxMiw5IEBAIGF0X3JlY2hlY2s9CisgIyBXaGV0aGVyIGEgd3JpdGUgZmFpbHVyZSBvY2N1cnJlZAorIGF0X3dyaXRlX2ZhaWw9MAorIAorKyMgQXV0b21ha2UgcmVzdWx0IGZvcm1hdCAicmVzdWx0OiB0ZXN0bmFtZSIKKythdF9hbV9mbXQ9ZmFsc2UKKysKKyAjIFRoZSBkaXJlY3Rvcnkgd2UgcnVuIHRoZSBzdWl0ZSBpbi4gIERlZmF1bHQgdG8gLiBpZiBubyAtQyBvcHRpb24uCisgYXRfZGlyPWBwd2RgCisgIyBBbiBhYnNvbHV0ZSByZWZlcmVuY2UgdG8gdGhpcyB0ZXN0c3VpdGUgc2NyaXB0LgorQEAgLTUzMCw2ICs1MzMsMTAgQEAgZG8KKyAJYXRfY2hlY2tfZmlsdGVyX3RyYWNlPWF0X2ZuX2ZpbHRlcl90cmFjZQorIAk7OworIAorKyAgICAtLWFtLWZtdCB8IC1BICkKKysJYXRfYW1fZm10PToKKysJOzsKKysKKyAgICAgW1swLTldIHwgWzAtOV1bMC05XSB8IFswLTldWzAtOV1bMC05XSB8IFswLTldWzAtOV1bMC05XVswLTldXSkKKyAJYXRfZm5fdmFsaWRhdGVfcmFuZ2VzIGF0X29wdGlvbgorIAlBU19WQVJfQVBQRU5EKFthdF9ncm91cHNdLCBbIiRhdF9vcHRpb24kYXNfbmwiXSkKK0BAIC03MTgsMTAgKzcyNSwxMCBAQCBtNF9kaXZlcnRfcHVzaChbSEVMUF9NT0RFU10pZG5sCisgY2F0IDw8X0FURU9GIHx8IGF0X3dyaXRlX2ZhaWw9MQorIAorIE9wZXJhdGlvbiBtb2RlczoKKy0gIC1oLCAtLWhlbHAgICAgIHByaW50IHRoZSBoZWxwIG1lc3NhZ2UsIHRoZW4gZXhpdAorLSAgLVYsIC0tdmVyc2lvbiAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorLSAgLWMsIC0tY2xlYW4gICAgcmVtb3ZlIGFsbCB0aGUgZmlsZXMgdGhpcyB0ZXN0IHN1aXRlIG1pZ2h0IGNyZWF0ZSBhbmQgZXhpdAorLSAgLWwsIC0tbGlzdCAgICAgZGVzY3JpYmVzIGFsbCB0aGUgdGVzdHMsIG9yIHRoZSBzZWxlY3RlZCBURVNUUworKyAgLWgsIC0taGVscCAgICAgIHByaW50IHRoZSBoZWxwIG1lc3NhZ2UsIHRoZW4gZXhpdAorKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKysgIC1jLCAtLWNsZWFuICAgICByZW1vdmUgYWxsIHRoZSBmaWxlcyB0aGlzIHRlc3Qgc3VpdGUgbWlnaHQgY3JlYXRlIGFuZCBleGl0CisrICAtbCwgLS1saXN0ICAgICAgZGVzY3JpYmVzIGFsbCB0aGUgdGVzdHMsIG9yIHRoZSBzZWxlY3RlZCBURVNUUworIF9BVEVPRgorIG00X2RpdmVydF9wb3AoW0hFTFBfTU9ERVNdKWRubAorIG00X3dyYXAoW200X2RpdmVydF9wdXNoKFtIRUxQX1RVTklOR19CRUdJTl0pZG5sCitAQCAtNzQ3LDYgKzc1NCw3IEBAIEV4ZWN1dGlvbiB0dW5pbmc6CisgICAtZCwgLS1kZWJ1ZyAgICBpbmhpYml0IGNsZWFuIHVwIGFuZCB0b3AtbGV2ZWwgbG9nZ2luZworIFsgICAgICAgICAgICAgICAgIGRlZmF1bHQgZm9yIGRlYnVnZ2luZyBzY3JpcHRzXQorICAgLXgsIC0tdHJhY2UgICAgZW5hYmxlIHRlc3RzIHNoZWxsIHRyYWNpbmcKKysgIC1BLCAtLWFtLWZtdCAgIGF1dG9tYWtlIHJlc3VsdCBmb3JtYXQgInJlc3VsdDogdGVzdG5hbWUiCisgX0FURU9GCisgbTRfZGl2ZXJ0X3BvcChbSEVMUF9UVU5JTkdfQkVHSU5dKV0pZG5sCisgbTRfZGl2ZXJ0X3B1c2goW0hFTFBfRU5EXSlkbmwKK0BAIC0xMTYyLDcgKzExNzAsOSBAQCBhdF9mbl9ncm91cF9iYW5uZXIgKCkKKyAgICAgWypdKSAgICAgICAgICBhdF9kZXNjX2xpbmU9IiRbMV06ICIgIDs7CisgICBlc2FjCisgICBBU19WQVJfQVBQRU5EKFthdF9kZXNjX2xpbmVdLCBbIiRbM10kWzRdIl0pCistICAkYXRfcXVpZXQgQVNfRUNIT19OKFsiJGF0X2Rlc2NfbGluZSJdKQorKyAgaWYgISAkYXRfYW1fZm10OyB0aGVuCisrICAgICRhdF9xdWlldCBBU19FQ0hPX04oWyIkYXRfZGVzY19saW5lIl0pCisrICBmaQorICAgZWNobyAiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIGNvbXBpbGF0aW9uIC0qLSIgPj4gIiRhdF9ncm91cF9sb2ciCisgfQorIAorQEAgLTExODgsNDIgKzExOTgsNTEgQEAgX0FURU9GCisgICBjYXNlICRhdF94ZmFpbDokYXRfc3RhdHVzIGluCisgICAgIHllczowKQorIAlhdF9tc2c9IlVORVhQRUNURUQgUEFTUyIKKysJYXRfYW1fbXNnPSJYUEFTUyIKKyAJYXRfcmVzPXhwYXNzCisgCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorIAlhdF9jb2xvcj0kYXRfcmVkCisgCTs7CisgICAgIG5vOjApCisgCWF0X21zZz0ib2siCisrCWF0X2FtX21zZz0iUEFTUyIKKyAJYXRfcmVzPXBhc3MKKyAJYXRfZXJyZXhpdD1mYWxzZQorIAlhdF9jb2xvcj0kYXRfZ3JuCisgCTs7CisgICAgICo6NzcpCisgCWF0X21zZz0nc2tpcHBlZCAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworKwlhdF9hbV9tc2c9IlNLSVAiCisgCWF0X3Jlcz1za2lwCisgCWF0X2VycmV4aXQ9ZmFsc2UKKyAJYXRfY29sb3I9JGF0X2JsdQorIAk7OworICAgICBubzoqIHwgKjo5OSkKKyAJYXRfbXNnPSdGQUlMRUQgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKysJYXRfYW1fbXNnPSJGQUlMIgorIAlhdF9yZXM9ZmFpbAorIAlhdF9lcnJleGl0PSRhdF9lcnJleGl0X3AKKyAJYXRfY29sb3I9JGF0X3JlZAorIAk7OworICAgICB5ZXM6KikKKyAJYXRfbXNnPSdleHBlY3RlZCBmYWlsdXJlICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisrCWF0X2FtX21zZz0iWEZBSUwiCisgCWF0X3Jlcz14ZmFpbAorIAlhdF9lcnJleGl0PWZhbHNlCisgCWF0X2NvbG9yPSRhdF9sZ24KKyAJOzsKKyAgIGVzYWMKKyAgIGVjaG8gIiRhdF9yZXMiID4gIiRhdF9qb2JfZGlyLyRhdF9yZXMiCistICAjIEluIHBhcmFsbGVsIG1vZGUsIG91dHB1dCB0aGUgc3VtbWFyeSBsaW5lIG9ubHkgYWZ0ZXJ3YXJkcy4KKy0gIGlmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYgdGVzdCAtbiAiJGF0X3ZlcmJvc2UiOyB0aGVuCistICAgIEFTX0VDSE8oWyIkYXRfZGVzY19saW5lICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICBpZiAkYXRfYW1fZm10OyB0aGVuCisrICAgICAgQVNfRUNITyhbIiRhdF9hbV9tc2c6ICRhdF9kZXNjIl0pCisgICBlbHNlCistICAgICMgTWFrZSBzdXJlIHRoZXJlIGlzIGEgc2VwYXJhdG9yIGV2ZW4gd2l0aCBsb25nIHRpdGxlcy4KKy0gICAgQVNfRUNITyhbIiAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgICAjIEluIHBhcmFsbGVsIG1vZGUsIG91dHB1dCB0aGUgc3VtbWFyeSBsaW5lIG9ubHkgYWZ0ZXJ3YXJkcy4KKysgICAgaWYgdGVzdCAkYXRfam9icyAtbmUgMSAmJiB0ZXN0IC1uICIkYXRfdmVyYm9zZSI7IHRoZW4KKysgICAgICBBU19FQ0hPKFsiJGF0X2Rlc2NfbGluZSAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgICBlbHNlCisrICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzZXBhcmF0b3IgZXZlbiB3aXRoIGxvbmcgdGl0bGVzLgorKyAgICAgIEFTX0VDSE8oWyIgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiXSkKKysgICAgZmkKKyAgIGZpCisgICBhdF9sb2dfbXNnPSIkYXRfZ3JvdXAuICRhdF9kZXNjICgkYXRfc2V0dXBfbGluZSk6ICRhdF9tc2ciCisgICBjYXNlICRhdF9zdGF0dXMgaW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzM5NGQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitVc2UgLS13YXJuaW5nPWNyb3NzIG9ubHkgaWYgc3VwcG9ydGVkIGJ5IGF1dG9tYWtlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCistLS0gYS9iaW4vYXV0b3JlY29uZi5pbgorKysrIGIvYmluL2F1dG9yZWNvbmYuaW4KK0BAIC0xMjcsNiArMTI3LDggQEAgbXkgJGFjbG9jYWxfc3VwcG9ydHNfd2FybmluZ3MgPSAwOworIG15ICRhdXRvbWFrZV9zdXBwb3J0c19mb3JjZV9taXNzaW5nID0gMDsKKyAjIERvZXMgYXV0b21ha2Ugc3VwcG9ydCAtV2Zvbz8KKyBteSAkYXV0b21ha2Vfc3VwcG9ydHNfd2FybmluZ3MgPSAwOworKyMgRG9lcyBhdXRvbWFrZSBzdXBwb3J0IC0td2FybmluZz1jcm9zcworK215ICRhdXRvbWFrZV9zdXBwb3J0c19jcm9zc193YXJuaW5nID0gMDsKKyAKKyBteSBAcHJlcGVuZF9pbmNsdWRlOworIG15IEBpbmNsdWRlOworQEAgLTE5MSw2ICsxOTMsNyBAQCBzdWIgcGFyc2VfYXJncyAoKQorICAgJGFjbG9jYWxfc3VwcG9ydHNfd2FybmluZ3MgPSAkYWNsb2NhbF9oZWxwID1+IC8tLXdhcm5pbmdzLzsKKyAgICRhdXRvbWFrZV9zdXBwb3J0c19mb3JjZV9taXNzaW5nID0gJGF1dG9tYWtlX2hlbHAgPX4gLy0tZm9yY2UtbWlzc2luZy87CisgICAkYXV0b21ha2Vfc3VwcG9ydHNfd2FybmluZ3MgPSAkYXV0b21ha2VfaGVscCA9fiAvLS13YXJuaW5ncy87CisrICAkYXV0b21ha2Vfc3VwcG9ydHNfY3Jvc3Nfd2FybmluZyA9ICRhdXRvbWFrZV9oZWxwID1+IC9jcm9zcy87CisgCisgICAjIERpc3BhdGNoIGF1dG9yZWNvbmYncyBvcHRpb24gdG8gdGhlIHRvb2xzLgorICAgIyAtLWluY2x1ZGU7CitAQCAtMjQ0LDYgKzI0Nyw4IEBAIHN1YiBwYXJzZV9hcmdzICgpCisgICAgICAgJGxpYnRvb2xpemUgLj0gJyAtLWRlYnVnJzsKKyAgICAgfQorICAgIyAtLXdhcm5pbmdzOworKyAgQHdhcm5pbmcgPSBncmVwIHsgJF8gbmUgImNyb3NzIiB9IEB3YXJuaW5nCisrICAgIGlmICEgJGF1dG9tYWtlX3N1cHBvcnRzX2Nyb3NzX3dhcm5pbmc7CisgICBpZiAoQHdhcm5pbmcpCisgICAgIHsKKyAgICAgICBteSAkd2FybiA9ICcgLS13YXJuaW5ncz0nIC4gam9pbiAoJywnLCBAd2FybmluZyk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDQ0NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUG9reSBwcm92aWRlcyBhIGxpc3Qgb2Ygc2l0ZSBmaWxlcyBpbiBDT05GSUdfU0lURSB3aGVyZWFzIGF1dG9jb25mIAorb25seSBleHBlY3RzIG9uZSBmaWxlLiBUaGlzIHBhdGNoIGNoYW5nZXMgYXV0b2NvbmYgdG8gYWNjZXB0IGEgbGlzdCBvZiAKK3RoZW0uCisKK1JQIDEvMi8xMAorCitVcGRhdGVkIGZvciAyLjY4IHZlcnNpb246IHRoZSBDT05GSUdfU0lURSB2YXIgd2FzIG5vdCBnZXR0aW5nIHVzZWQgYXQgYWxsCitmaXhlZCB0aGUgMi42OCBjb2RlIAorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNS8yNworCitJbmRleDogYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjgub3JpZy9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorKysrIGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2dlbmVyYWwubTQKK0BAIC0xODc4LDcgKzE4NzgsNiBAQCBBVV9ERUZVTihbQUNfVkFMSURBVEVfQ0FDSEVEX1NZU1RFTV9UVVBMCisgbTRfZGVmaW5lKFtBQ19TSVRFX0xPQURdLAorIFsjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorIGFjX3NpdGVfZmlsZTE9Tk9ORQorLWFjX3NpdGVfZmlsZTI9Tk9ORQorIGlmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgICBjYXNlICRDT05GSUdfU0lURSBpbiBAJTpAKCgKK0BAIC0xODg2LDE0ICsxODg1LDggQEAgaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgIGVzYWMKKy1lbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorLSAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCistICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCistZWxzZQorLSAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKy0gIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorIGZpCistZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKKytmb3IgYWNfc2l0ZV9maWxlIGluICRhY19zaXRlX2ZpbGUxCisgZG8KKyAgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9maXhfcGF0aF94dHJhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZGY4OGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9maXhfcGF0aF94dHJhLnBhdGNoCkBAIC0wLDAgKzEsMTIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2UgZG9uJ3QgYnVpbGQgeG1rbWYgc28gYW55IHZhbHVlcyByZXR1cm5lZCBmcm9tIGl0IGFyZSBnb2luZyB0byBiZSB3cm9uZy4KK1VzaW5nIGFueSBwYXRocyBpbiAvdXNyLyBmb3IgeCBoZWFkZXJzL2xpYnMgaXMgYSBiYWQgaWRlYSB3aGVuIGNyb3NzIGNvbXBpbGluZy4KK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aGVtIHRvIHN0b3AgYW55IGNvbmZ1c2lvbi4KKworUlAgLSAyMDA3MTExNQorCitJbmRleDogYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvbGlicy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjgub3JpZy9saWIvYXV0b2NvbmYvbGlicy5tNAorKysrIGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2xpYnMubTQKK0BAIC0xNTksNTMgKzE1OSw2IEBAIG00X3BvcGRlZihbQUNfTGliX05hbWVdKWRubAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKyAKKyAKKy0jIF9BQ19QQVRIX1hfWE1LTUYKKy0jIC0tLS0tLS0tLS0tLS0tLS0KKy0jIEludGVybmFsIHN1YnJvdXRpbmUgb2YgX0FDX1BBVEhfWC4KKy0jIFNldCBhY194X2luY2x1ZGVzIGFuZC9vciBhY194X2xpYnJhcmllcy4KKy1tNF9kZWZpbmUoW19BQ19QQVRIX1hfWE1LTUZdLAorLVtBQ19BUkdfVkFSKFhNS01GLCBbUGF0aCB0byB4bWttZiwgTWFrZWZpbGUgZ2VuZXJhdG9yIGZvciBYIFdpbmRvdyBTeXN0ZW1dKWRubAorLXJtIC1mIC1yIGNvbmZ0ZXN0LmRpcgorLWlmIG1rZGlyIGNvbmZ0ZXN0LmRpcjsgdGhlbgorLSAgY2QgY29uZnRlc3QuZGlyCistICBjYXQgPkltYWtlZmlsZSA8PCdfQUNFT0YnCistaW5jcm9vdDoKKy0JQGVjaG8gaW5jcm9vdD0nJHtJTkNST09UfScKKy11c3JsaWJkaXI6CistCUBlY2hvIHVzcmxpYmRpcj0nJHtVU1JMSUJESVJ9JworLWxpYmRpcjoKKy0JQGVjaG8gbGliZGlyPScke0xJQkRJUn0nCistX0FDRU9GCistICBpZiAoZXhwb3J0IENDOyAke1hNS01GLXhta21mfSkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJiB0ZXN0IC1mIE1ha2VmaWxlOyB0aGVuCistICAgICMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KKy0gICAgZm9yIGFjX3ZhciBpbiBpbmNyb290IHVzcmxpYmRpciBsaWJkaXI7IGRvCistICAgICAgZXZhbCAiYWNfaW1fJGFjX3Zhcj1cYFwke01BS0UtbWFrZX0gJGFjX3ZhciAyPi9kZXYvbnVsbCB8IHNlZCAtbiAncy9eJGFjX3Zhcj0vL3AnXGAiCistICAgIGRvbmUKKy0gICAgIyBPcGVuIFdpbmRvd3MgeG1rbWYgcmVwb3J0ZWRseSBzZXRzIExJQkRJUiBpbnN0ZWFkIG9mIFVTUkxJQkRJUi4KKy0gICAgZm9yIGFjX2V4dGVuc2lvbiBpbiBhIHNvIHNsIGR5bGliIGxhIGRsbDsgZG8KKy0gICAgICBpZiB0ZXN0ICEgLWYgIiRhY19pbV91c3JsaWJkaXIvbGliWDExLiRhY19leHRlbnNpb24iICYmCistCSB0ZXN0IC1mICIkYWNfaW1fbGliZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uIjsgdGhlbgorLQlhY19pbV91c3JsaWJkaXI9JGFjX2ltX2xpYmRpcjsgYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICAgICMgU2NyZWVuIG91dCBib2d1cyB2YWx1ZXMgZnJvbSB0aGUgaW1ha2UgY29uZmlndXJhdGlvbi4gIFRoZXkgYXJlCistICAgICMgYm9ndXMgYm90aCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBkZWZhdWx0IGFueXdheSwgYW5kIGJlY2F1c2UKKy0gICAgIyB1c2luZyB0aGVtIHdvdWxkIGJyZWFrIGdjYyBvbiBzeXN0ZW1zIHdoZXJlIGl0IG5lZWRzIGZpeGVkIGluY2x1ZGVzLgorLSAgICBjYXNlICRhY19pbV9pbmNyb290IGluCistCS91c3IvaW5jbHVkZSkgYWNfeF9pbmNsdWRlcz0gOzsKKy0JKikgdGVzdCAtZiAiJGFjX2ltX2luY3Jvb3QvWDExL1hvcy5oIiAmJiBhY194X2luY2x1ZGVzPSRhY19pbV9pbmNyb290OzsKKy0gICAgZXNhYworLSAgICBjYXNlICRhY19pbV91c3JsaWJkaXIgaW4KKy0JL3Vzci9saWIgfCAvdXNyL2xpYjY0IHwgL2xpYiB8IC9saWI2NCkgOzsKKy0JKikgdGVzdCAtZCAiJGFjX2ltX3VzcmxpYmRpciIgJiYgYWNfeF9saWJyYXJpZXM9JGFjX2ltX3VzcmxpYmRpciA7OworLSAgICBlc2FjCistICBmaQorLSAgY2QgLi4KKy0gIHJtIC1mIC1yIGNvbmZ0ZXN0LmRpcgorLWZpCistXSkjIF9BQ19QQVRIX1hfWE1LTUYKKy0KKy0KKyAjIF9BQ19QQVRIX1hfRElSRUNUCisgIyAtLS0tLS0tLS0tLS0tLS0tLQorICMgSW50ZXJuYWwgc3Vicm91dGluZSBvZiBfQUNfUEFUSF9YLgorQEAgLTIxMyw0NCArMTY2LDcgQEAgZmkKKyBtNF9kZWZpbmUoW19BQ19QQVRIX1hfRElSRUNUXSwKKyBbIyBTdGFuZGFyZCBzZXQgb2YgY29tbW9uIGRpcmVjdG9yaWVzIGZvciBYIGhlYWRlcnMuCisgIyBDaGVjayBYMTEgYmVmb3JlIFgxMVJuIGJlY2F1c2UgaXQgaXMgb2Z0ZW4gYSBzeW1saW5rIHRvIHRoZSBjdXJyZW50IHJlbGVhc2UuCistYWNfeF9oZWFkZXJfZGlycz0nCistL3Vzci9YMTEvaW5jbHVkZQorLS91c3IvWDExUjcvaW5jbHVkZQorLS91c3IvWDExUjYvaW5jbHVkZQorLS91c3IvWDExUjUvaW5jbHVkZQorLS91c3IvWDExUjQvaW5jbHVkZQorLQorLS91c3IvaW5jbHVkZS9YMTEKKy0vdXNyL2luY2x1ZGUvWDExUjcKKy0vdXNyL2luY2x1ZGUvWDExUjYKKy0vdXNyL2luY2x1ZGUvWDExUjUKKy0vdXNyL2luY2x1ZGUvWDExUjQKKy0KKy0vdXNyL2xvY2FsL1gxMS9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNy9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNi9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNS9pbmNsdWRlCistL3Vzci9sb2NhbC9YMTFSNC9pbmNsdWRlCistCistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMQorLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNworLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNgorLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNQorLS91c3IvbG9jYWwvaW5jbHVkZS9YMTFSNAorLQorLS91c3IvWDM4Ni9pbmNsdWRlCistL3Vzci94Mzg2L2luY2x1ZGUKKy0vdXNyL1hGcmVlODYvaW5jbHVkZS9YMTEKKy0KKy0vdXNyL2luY2x1ZGUKKy0vdXNyL2xvY2FsL2luY2x1ZGUKKy0vdXNyL3Vuc3VwcG9ydGVkL2luY2x1ZGUKKy0vdXNyL2F0aGVuYS9pbmNsdWRlCistL3Vzci9sb2NhbC94MTFyNS9pbmNsdWRlCistL3Vzci9scHAvWGFtcGxlcy9pbmNsdWRlCistCistL3Vzci9vcGVud2luL2luY2x1ZGUKKy0vdXNyL29wZW53aW4vc2hhcmUvaW5jbHVkZScKKythY194X2hlYWRlcl9kaXJzPScnCisgCisgaWYgdGVzdCAiJGFjX3hfaW5jbHVkZXMiID0gbm87IHRoZW4KKyAgICMgR3Vlc3Mgd2hlcmUgdG8gZmluZCBpbmNsdWRlIGZpbGVzLCBieSBsb29raW5nIGZvciBYbGliLmguCitAQCAtMjk5LDcgKzIxNSw2IEBAIEFDX0RFRlVOKFtfQUNfUEFUSF9YXSwKKyBbQUNfQ0FDSEVfVkFMKGFjX2N2X2hhdmVfeCwKKyBbIyBPbmUgb3IgYm90aCBvZiB0aGUgdmFycyBhcmUgbm90IHNldCwgYW5kIHRoZXJlIGlzIG5vIGNhY2hlZCB2YWx1ZS4KKyBhY194X2luY2x1ZGVzPW5vIGFjX3hfbGlicmFyaWVzPW5vCistX0FDX1BBVEhfWF9YTUtNRgorIF9BQ19QQVRIX1hfRElSRUNUCisgY2FzZSAkYWNfeF9pbmNsdWRlcywkYWNfeF9saWJyYXJpZXMgaW4gIygKKyAgIG5vLCogfCAqLG5vIHwgKlwnKikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcmVmZXJiYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzZlZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcmVmZXJiYXNoLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1RoaXMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgQ09ORklHX1NIRUxMIGFuZCBTSEVMTCB3aGljaCBtYXkgZ2V0IGV4cG9ydGVkIGludG8KK3NjcmlwdHMgc2hhcmVkIHZpYSBzc3RhdGUgb250byBvdGhlciBzeXN0ZW1zLgorCitTb21lIHN5c3RlbXMgaGF2ZSAvYmluL3NoIC0+IGRhc2ggYW5kIG90aGVycyAvYmluL3NoIC0+IGJhc2guIEJhc2ggaXMgcHJlZmVycmVkIAorYnV0IHNvbWV0aW1lcyB3ZSBjYW4gc29tZXRpbWVzIGVuZCB1cCBleHBvcnRpbmcgL2Jpbi9zaCB5ZXQgdXNlIGJhc2hpc21zLgorCitUaGlzIHBhdGNoIHB1dHMgYmFzaCBmaXJzdCBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgd2hpY2ggYXZvaWRzIHRoZSBiYXNoL2Rhc2ggY29uZnVzaW9uLgorCitSUCAyMDEyLzkvMjMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpYyBjb25maWd1cmF0aW9uXQorCitJbmRleDogYXV0b2NvbmYtMi42OS9saWIvbTRzdWdhci9tNHNoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OS5vcmlnL2xpYi9tNHN1Z2FyL200c2gubTQJMjAxMi0wMy0wNyAxNzozNToyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdXRvY29uZi0yLjY5L2xpYi9tNHN1Z2FyL200c2gubTQJMjAxMy0wOS0yMyAxNjoxMjozOC44NTM1OTc1MTUgKzAwMDAKK0BAIC0yMjksNyArMjI5LDcgQEAKKyAgICAgW19BU19QQVRIX1dBTEsoWy9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIXSwKKyAgICAgICBbY2FzZSAkYXNfZGlyIGluIEAlOkAoCisgCSAvKikKKy0JICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworKwkgICBmb3IgYXNfYmFzZSBpbiBiYXNoIHNoIGtzaCBzaDU7IGRvCisgCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorIAkgICAgIGFzX3NoZWxsPSRhc19kaXIvJGFzX2Jhc2UKKyAJICAgICBBU19JRihbeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGE0MDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGF1dG9jb25mLTIuNTcvbGliL2F1dG9jb25mL2dlbmVyYWwubTR+cHJvZ3JhbV9wcmVmaXgKKysrKyBhdXRvY29uZi0yLjU3L2xpYi9hdXRvY29uZi9nZW5lcmFsLm00CitAQCAtMTY3Niw4ICsxNjc2LDkgQEAKKyAjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisgIyB3aWxsIGdldCBjYW5vbmljYWxpemVkLgorIHRlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCistICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCistICAgIE5PTkVOT05Fcyx4LHgsICYmCisrICB0ZXN0ICIkdGFyZ2V0X2FsaWFzIiAhPSAiJGhvc3RfYWxpYXMiICYmCisrICAgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKysgICAgICBOT05FTk9ORXMseCx4LCAmJgorICAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LVtdZG5sCisgXSkjIEFDX0NBTk9OSUNBTF9UQVJHRVQKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDJlMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1dlIGhhdmUgcHJvYmxlbSB1c2luZyBoYXJkY29kZWQgZGlyZWN0b3JpZXMgbGlrZSAvdXNyL2xvY2FsIGhlcmUKK3doaWNoIHdpbGwgYmUgY2hlY2tlZCBmb3IgY3Jvc3MgYnVpbGRzLiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHdoaWNoCitpcyB2YWxpZCBmb3IgQUlYIG9ubHkuIFdlIGRvIG5vdCBoYXZlIEFJWCBhcyBvbmUgb2Ygb3VyIHN1cHBvcnRlZAorYnVpbGQgaG9zdCBvciB0YXJnZXQuIFRoZXJlZm9yZSB3ZSBnZXQgcmlkIG9mIHRoZSBoYXJkY29kZWQgcGF0aHMKK2FuZCBtYWtlIGxpZmUgZWFzaWVyIGZvciBjcm9zcyBjb21waWxhdGlvbiBwcm9jZXNzLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Vwc3RyZWFtIGRvZXMgY2FyZSBmb3IgQUlYIHdoaWxlIHdlIG1heSBub3RdCitJbmRleDogYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZnVuY3Rpb25zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9mdW5jdGlvbnMubTQJMjAxMC0wOS0yMiAxNDo1MjoxOS4wMDAwMDAwMDAgLTA3MDAKKysrKyBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9mdW5jdGlvbnMubTQJMjAxMS0wOC0wMyAxMTo1NzowNS44MjIxOTk1MTMgLTA3MDAKK0BAIC03NDksMTUgKzc0OSw2IEBAIGlmIHRlc3QgJGFjX2hhdmVfZnVuYyA9IG5vOyB0aGVuCisgICAgIFtMSUJTPSItbHV0aWwgJExJQlMiIGFjX2hhdmVfZnVuYz15ZXMgYWNfY3ZfZnVuY19nZXRsb2FkYXZnX3NldGdpZD15ZXNdKQorIGZpCisgCistaWYgdGVzdCAkYWNfaGF2ZV9mdW5jID0gbm87IHRoZW4KKy0gICMgVGhlcmUgaXMgYSBjb21tb25seSBhdmFpbGFibGUgbGlicmFyeSBmb3IgUlMvNjAwMCBBSVguCistICAjIFNpbmNlIGl0IGlzIG5vdCBhIHN0YW5kYXJkIHBhcnQgb2YgQUlYLCBpdCBtaWdodCBiZSBpbnN0YWxsZWQgbG9jYWxseS4KKy0gIGFjX2dldGxvYWRhdmdfTElCUz0kTElCUworLSAgTElCUz0iLUwvdXNyL2xvY2FsL2xpYiAkTElCUyIKKy0gIEFDX0NIRUNLX0xJQihnZXRsb2FkYXZnLCBnZXRsb2FkYXZnLAorLQkgICAgICAgW0xJQlM9Ii1sZ2V0bG9hZGF2ZyAkTElCUyJdLCBbTElCUz0kYWNfZ2V0bG9hZGF2Z19MSUJTXSkKKy1maQorLQorICMgTWFrZSBzdXJlIGl0IGlzIHJlYWxseSBpbiB0aGUgbGlicmFyeSwgaWYgd2UgdGhpbmsgd2UgZm91bmQgaXQsCisgIyBvdGhlcndpc2Ugc2V0IHVwIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KKyBBQ19DSEVDS19GVU5DUyhnZXRsb2FkYXZnLCBbXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZl8yLjY5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTAwN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZl8yLjY5LmJiCkBAIC0wLDAgKzEsMjUgQEAKK3JlcXVpcmUgYXV0b2NvbmYuaW5jCisKK1BSID0gInIxMSIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorCQkgICAgZmlsZTovL0NPUFlJTkd2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitTUkNfVVJJICs9ICJmaWxlOi8vYXV0b3JlY29uZi1pbmNsdWRlLnBhdGNoIFwKKwkgICAgZmlsZTovL2NoZWNrLWF1dG9tYWtlLWNyb3NzLXdhcm5pbmcucGF0Y2ggXAorCSAgICBmaWxlOi8vYXV0b3JlY29uZi1leGNsdWRlLnBhdGNoIFwKKwkgICAgZmlsZTovL2F1dG9yZWNvbmYtZ251Y29uZmlnaXplLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWdfc2l0ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHJlZmVyYmFzaC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXV0b3Rlc3QtYXV0b21ha2UtcmVzdWx0LWZvcm1hdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjgyZDA1ZTAzYjkzZTQ1ZjVhMzliODI4ZGM5YzZjMjliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1NGJkNjliMzkxZWRjMTJkNmE0YTUxYTJkZDE0NzY1NDNkYTVjNmJiZjA1YTk1YjU5ZGMwZGQ2ZmQ0YzI5NjkiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL2ZpeF9wYXRoX3h0cmEucGF0Y2giCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9NND1tNCBhY19jdl9wcm9nX1RFU1RfRU1BQ1M9bm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyODUxMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiQXV0b21hdGVkIHRleHQgYW5kIHByb2dyYW0gZ2VuZXJhdGlvbiB0b29sIgorREVTQ1JJUFRJT04gPSAiQXV0b0dlbiBpcyBhIHRvb2wgZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIGNyZWF0aW9uIGFuZFwKKyBtYWludGVuYW5jZSBvZiBwcm9ncmFtcyB0aGF0IGNvbnRhaW4gbGFyZ2UgYW1vdW50cyBvZiByZXBldGl0aW91cyB0ZXh0LlwKKyBJdCBpcyBlc3BlY2lhbGx5IHZhbHVhYmxlIGluIHByb2dyYW1zIHRoYXQgaGF2ZSBzZXZlcmFsIGJsb2NrcyBvZiB0ZXh0XAorIHRoYXQgbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2dlbi8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b2dlbi9yZWwke1BWfS9hdXRvZ2VuLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21rLXRwbC1jb25maWcuc2gtZm9yY2UtZXhpdC12YWx1ZS10by1iZS0wLWluLXN1YnByb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVkaXJlY3Qtb3V0cHV0LWRpci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzODVkN2M3ZGZiZTYwYmFiYmVlMjYxYzA1NDkyM2E1MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YmJkYjczYjU1MThiYWY2NGM2ZDM3MzlmYjJlY2M2NmQyY2NjZGE4ODhjZTVhZDU3M2FiZTIzNWFiNWQ5NmJhIgorCitERVBFTkRTID0gImd1aWxlLW5hdGl2ZSBsaWJ0b29sLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBuYXRpdmUgcGtnY29uZmlnCisKKyMgYXV0b2dlbi1uYXRpdmUgbGlua3MgYWdhaW5zdCBsaWJndWlsZSB3aGljaCBtYXkgaGF2ZSBiZWVuIHJlbG9jYXRlZCB3aXRoIHNzdGF0ZQorIyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZW5zdXJlIHRoZXJlIGlzbid0IGEgcmVsb2NhdGlvbiBpc3N1ZQorZXhwb3J0IEdVSUxFX0xPQURfUEFUSCA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCIKK2V4cG9ydCBHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEggPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9hdXRvZ2VuIFwKKwkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKKwkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNGMxZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitTdWJqZWN0OiBbUEFUQ0hdIGF1dG9nZW46IGluY3JlYXNlIHRpbWVvdXQgbGltaXQgZm9yIHNoZWxsIGNvbW1hbmRzCisKK09uIHNvbWUgb3ZlcmxvYWRlZCBob3N0cywgc2hlbGwgY29tbWFuZHMgb2YgYXV0b2dlbiBtYXkgY2FuIG5vdAorZmluaXNoIGluIDUgc2Vjcy4gVGhpcyBoYXMgY2F1c2VkIG1hbnkgYnVpbGQgZmFpbHVyZXMsIHNvIGluY3JlYXNlCit0aGUgdGltZW91dCBsaW1pdCB0byBmaXggdGhpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDBhZjdjMTguLjU1NDRmNTkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE3NSw5ICsxNzUsOSBAQCBjb25maWdfZW5kX3RpbWU9YGRhdGUgKyVzIDI+L2Rldi9udWxsYAorIHRpbWVfZGVsdGE9YGV4cHIgJHtjb25maWdfZW5kX3RpbWV9IC0gJHtjb25maWdfc3RhcnRfdGltZX0gMj4vZGV2L251bGxgCisgCisgaWYgdGVzdCAteiAiJHt0aW1lX2RlbHRhfSIKKy10aGVuIHRpbWVfZGVsdGE9MTAKKy1lbGlmIHRlc3QgJHt0aW1lX2RlbHRhfSAtbHQgNQorLXRoZW4gdGltZV9kZWx0YT01IDsgZmkKKyt0aGVuIHRpbWVfZGVsdGE9NjAKKytlbGlmIHRlc3QgJHt0aW1lX2RlbHRhfSAtbHQgMzAKKyt0aGVuIHRpbWVfZGVsdGE9MzAgOyBmaQorIAorIEFHX1RJTUVPVVQ9JHt0aW1lX2RlbHRhfQorIF0KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmRhN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbWstdHBsLWNvbmZpZy5zaDogZm9yY2UgZXhpdCB2YWx1ZSB0byBiZSAwIGluIHN1YnByb2Nlc3MKKworVGhlIHJldHVybiB2YWx1ZSBvZiBzdGF0ZW1lbnQgbGlzdD1gPHN1YmNvbW1hbmRzPmAgaXMgdGhlIGV4aXQgdmFsdWUgb2YgdGhlCitzdWJjb21tYW5kcy4gU28gaWYgdGhlIHN1YmNvbW1hbmRzIGZhaWxzLCB0aGUgY29tcGlsYXRpb24gZmFpbHMuIFRoaXMgaXMgb2J2aW91c2x5Citub3QgaW50ZW5kZWQuIEluIHRoZSBub3JtYWwgY2FzZSwgd2UgZXhwZWN0IHRoZSBncmVwIGNvbW1hbmQgdG8gZmFpbCBhcyB0aGVyZSBzaG91bGQKK2JlIG5vICdub3JldHVybicgd29yZCBpbiB0aGUgbGliZ3VpbGUgZmlsZXMuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGF1dG9vcHRzL21rLXRwbC1jb25maWcuc2ggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoIGIvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAoraW5kZXggOTI2ZjVhYi4uNmI0YTBmYiAxMDA3NTUKKy0tLSBhL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2gKKysrKyBiL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2gKK0BAIC0yMDIsNyArMjAyLDcgQEAgZml4X2d1aWxlKCkgeworIAorICAgICBsaXN0PWBzZXQgK2UgOyBleGVjIDI+L2Rldi9udWxsCisgICAgICAgICBmaW5kICR7bGliZ3VpbGVkaXJ9L2xpYmd1aWxlKiAtdHlwZSBmIHwgXAorLSAgICAgICAgICAgIHhhcmdzIGdyZXAgLWwgLUUgJ1w8bm9yZXR1cm5cPidgCisrICAgICAgICAgICAgeGFyZ3MgZ3JlcCAtbCAtRSAnXDxub3JldHVyblw+JyA7IGV4aXQgMGAKKyAKKyAgICAgdGVzdCAteiAiJGxpc3QiICYmIGV4aXQgMAorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMjZlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1tQQVRDSF0gcmVkaXJlY3QgdGhlIGRpciBvZiBta2xpYnNyYy1sb2cudHgKKworVXBzdHJlYW0tU3RhdHVlOiBQZW5kaW5nCisKK3JlZGlyZWN0IG1rbGlic3JjLWxvZy50eCB0byBidWlsZGRpciwgbm90IC90bXA7IG90aGVyd2lzZSBta2xpYnNyYy1sb2cudHgKK21heWJlIHVuYWJsZSB0byBiZSB3cml0dGVuIGlmIG90aGVyIHVzZXJzIGlzIGJ1aWxkaW5nIGF1dG9nZW4gYXQgdGhlIHNhbWUgdGltZS4KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2ggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaCBiL3BrZy9saWJvcHRzL21rbGlic3JjLnNoCitpbmRleCA0MTZiNDAyLi5kNjEyZmJjIDEwMDY0NAorLS0tIGEvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKKysrKyBiL3BrZy9saWJvcHRzL21rbGlic3JjLnNoCitAQCAtMTksNyArMTksNyBAQAorICMjICB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyBzZXQgLWV4CistZXhlYyAyPiAvdG1wL21rbGlic3JjLWxvZy50eAorK2V4ZWMgMj4gJHRvcF9idWlsZGRpci9ta2xpYnNyYy1sb2cudHgKKyAKKyB0b3BfYnVpbGRkaXI9YGNkICR0b3BfYnVpbGRkaXIgOyBwd2RgCisgdG9wX3NyY2Rpcj1gY2QgJHRvcF9zcmNkaXIgOyBwd2RgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRlYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQSBHTlUgdG9vbCBmb3IgYXV0b21hdGljYWxseSBnZW5lcmF0aW5nIE1ha2VmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkF1dG9tYWtlIGlzIGEgdG9vbCBmb3IgYXV0b21hdGljYWxseSBnZW5lcmF0aW5nIGBNYWtlZmlsZS5pbicgZmlsZXMgY29tcGxpYW50IHdpdGggdGhlIEdOVSBDb2RpbmcgXAorU3RhbmRhcmRzLiBBdXRvbWFrZSByZXF1aXJlcyB0aGUgdXNlIG9mIEF1dG9jb25mLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2UvIgorU0VDVElPTiA9ICJkZXZlbCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2F1dG9tYWtlL2F1dG9tYWtlLSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitleHBvcnQgQVVUT01BS0UgPSAiJHtAYmIudXRpbHMud2hpY2goJ2F1dG9tYWtlJywgZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSl9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hdXRvbWFrZSogJHtkYXRhZGlyfS9hY2xvY2FsKiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQ1MzM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvYnVpbGR0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1NwbGl0ICJjaGVjay1URVNUUyIgaW50byBhIGJ1aWxkdGVzdCBhbmQgcnVudGVzdCB0YXJnZXQsIHNvIHRoYXQgdGhleSBjYW4KK2JlIHJ1biBzZXBhcmF0ZWx5LgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvbGliL2FtL2NoZWNrLmFtCTIwMTItMTEtMTQgMTM6NDY6MTYuMzM1NDc1OTk1ICswMTAwCisrKysgYi9saWIvYW0vY2hlY2suYW0JMjAxMi0wOC0xMyAxODo0MDoxMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NCw3ICs0NCw3IEBACisgYW1fX3R0eV9jb2xvcnMgPSAkKGFtX190dHlfY29sb3JzX2R1bW15KQorIGVuZGlmICElP0NPTE9SJQorCistLlBIT05ZOiBjaGVjay1URVNUUworKy5QSE9OWTogY2hlY2stVEVTVFMgYnVpbGR0ZXN0LVRFU1RTIHJ1bnRlc3QtVEVTVFMKKworIGlmICU/UEFSQUxMRUxfVEVTVFMlCisKK0BAIC00NjUsNyArNDY1LDE0IEBACisKKyBlbHNlICElP1BBUkFMTEVMX1RFU1RTJQorCistY2hlY2stVEVTVFM6ICQoVEVTVFMpCisrQU1fUkVDVVJTSVZFX1RBUkdFVFMgKz0gYnVpbGR0ZXN0IHJ1bnRlc3QKKysKKytidWlsZHRlc3QtVEVTVFM6ICQoVEVTVFMpCisrCisrY2hlY2stVEVTVFM6IGJ1aWxkdGVzdC1URVNUUworKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBydW50ZXN0LVRFU1RTCisrCisrcnVudGVzdC1URVNUUzoKKwlAZmFpbGVkPTA7IGFsbD0wOyB4ZmFpbD0wOyB4cGFzcz0wOyBza2lwPTA7IFwKKwlzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOyBcCisgIyMgTWFrZSBzdXJlIFNvbGFyaXMgVlBBVEgtZXhwYW5kcyBhbGwgbWVtYmVycyBvZiB0aGlzIGxpc3QsIGV2ZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weS1jb21waWxlLWNvbXBpbGUtb25seS1vcHRpbWl6ZWQtYnl0ZS1jb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzM0YTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weS1jb21waWxlLWNvbXBpbGUtb25seS1vcHRpbWl6ZWQtYnl0ZS1jb2RlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyogT0UtQ29yZSdzIHB5dGhvbiBjcmVhdGVzIHRoZSBzYW1lIGJpbmFyeSBvdXRwdXQKKyAgZm9yIGJvdGggcHljIGFuZCBweW8sIHNvIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mCisgIHB5YyBmaWxlcyBieSBhdXRvbWFrZS4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworVXBkYXRlZCBmb3IgYXV0b21ha2UtMS4xMi42CisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK2RpZmYgLU51cmQgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlIGF1dG9tYWtlLTEuMTIuNi9saWIvcHktY29tcGlsZQorLS0tIGF1dG9tYWtlLTEuMTIuNi9saWIvcHktY29tcGlsZQkyMDEyLTEyLTEzIDIxOjU3OjMxLjAwMDAwMDAwMCArMDIwMAorKysrIGF1dG9tYWtlLTEuMTIuNi9saWIvcHktY29tcGlsZQkyMDEyLTEyLTI3IDE5OjM0OjAxLjQyNjAxNTE0MCArMDIwMAorQEAgLTExNSwyNiArMTE1LDYgQEAKKyAgICAgZmlsZXRyYW5zPSJmaWxlcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoJyRkZXN0ZGlyJyArIG9zLnNlcCArIHBhdGgpIgorIGZpCisgCistJFBZVEhPTiAtYyAiCistaW1wb3J0IHN5cywgb3MsIHB5X2NvbXBpbGUsIGltcAorLQorLWZpbGVzID0gJycnJGZpbGVzJycnCistCistc3lzLnN0ZG91dC53cml0ZSgnQnl0ZS1jb21waWxpbmcgcHl0aG9uIG1vZHVsZXMuLi5cbicpCistZm9yIGZpbGUgaW4gZmlsZXMuc3BsaXQoKToKKy0gICAgJHBhdGh0cmFucworLSAgICAkZmlsZXRyYW5zCistICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCkgb3Igbm90IChsZW4oZmlsZXBhdGgpID49IDMKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaWxlcGF0aFstMzpdID09ICcucHknKToKKy0JICAgIGNvbnRpbnVlCistICAgIHN5cy5zdGRvdXQud3JpdGUoZmlsZSkKKy0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCistICAgIGlmIGhhc2F0dHIoaW1wLCAnZ2V0X3RhZycpOgorLSAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZXBhdGgpLCBwYXRoKQorLSAgICBlbHNlOgorLSAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBmaWxlcGF0aCArICdjJywgcGF0aCkKKy1zeXMuc3Rkb3V0LndyaXRlKCdcbicpIiB8fCBleGl0ICQ/CistCisgIyB0aGlzIHdpbGwgZmFpbCBmb3IgcHl0aG9uIDwgMS41LCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciAuLi4KKyAkUFlUSE9OIC1PIC1jICIKKyBpbXBvcnQgc3lzLCBvcywgcHlfY29tcGlsZSwgaW1wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHl0aG9uLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzU0MWJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHl0aG9uLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDY1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitVcGRhdGVkIGZvciBhdXRvbWFrZS0xLjEyLjYKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworZGlmZiAtTnVyZCBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00IGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQKKy0tLSBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00CTIwMTItMTItMTMgMjI6MDI6MjUuMDAwMDAwMDAwICswMjAwCisrKysgYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNAkyMDEyLTEyLTI3IDE3OjQwOjI2LjU1ODE2NDY2MCArMDIwMAorQEAgLTkxLDEyICs5MSwxMyBAQAorICAgICBbYW1fY3ZfcHl0aG9uX3ZlcnNpb249YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnZlcnNpb25bWzozXV0pImBdKQorICAgQUNfU1VCU1QoW1BZVEhPTl9WRVJTSU9OXSwgWyRhbV9jdl9weXRob25fdmVyc2lvbl0pCisgCistICBkbmwgVXNlIHRoZSB2YWx1ZXMgb2YgJHByZWZpeCBhbmQgJGV4ZWNfcHJlZml4IGZvciB0aGUgY29ycmVzcG9uZGluZworLSAgZG5sIHZhbHVlcyBvZiBQWVRIT05fUFJFRklYIGFuZCBQWVRIT05fRVhFQ19QUkVGSVguICBUaGVzZSBhcmUgbWFkZQorKyAgZG5sIFVzZSB0aGUgdmFsdWVzIG9mICRwcmVmaXgsICRsaWJkaXIgYW5kICRleGVjX3ByZWZpeCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKKysgIGRubCB2YWx1ZXMgb2YgUFlUSE9OX1BSRUZJWCBQWVRIT05fTElCX1BSRUZJWCwgYW5kIFBZVEhPTl9FWEVDX1BSRUZJWC4gIFRoZXNlIGFyZSBtYWRlCisgICBkbmwgZGlzdGluY3QgdmFyaWFibGVzIHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gaWYgbmVlZCBiZS4gIEhvd2V2ZXIsCisgICBkbmwgZ2VuZXJhbCBjb25zZW5zdXMgaXMgdGhhdCB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhYmlsaXR5LgorIAorICAgQUNfU1VCU1QoW1BZVEhPTl9QUkVGSVhdLCBbJyR7cHJlZml4fSddKQorKyAgQUNfU1VCU1QoW1BZVEhPTl9MSUJfUFJFRklYXSwgWycke2xpYmRpcn0nXSkKKyAgIEFDX1NVQlNUKFtQWVRIT05fRVhFQ19QUkVGSVhdLCBbJyR7ZXhlY19wcmVmaXh9J10pCisgCisgICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKK0BAIC0xNDgsNyArMTQ5LDggQEAKKyBlbHNlOgorICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisgICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMCwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKKy1zeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpImAKKytzeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpIiB8fAorKyAgICAgZWNobyAiJFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzImAKKyAgICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weXRob25kaXIgaW4KKyAgICAgICRhbV9weV9wcmVmaXgqKQorICAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCitAQCAtMTU4LDcgKzE2MCw3IEBACisgICAgICAgIGNhc2UgJGFtX3B5X3ByZWZpeCBpbgorICAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7CisgICAgICAgICAgKikKKy0JICBhbV9jdl9weXRob25fcHl0aG9uZGlyPSRQWVRIT05fUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcworKwkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisgCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworQEAgLTE5MCw3ICsxOTIsOCBAQAorIGVsc2U6CisgICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyAgICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigxLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQorLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAorK3N5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiIHx8CisrICAgICBlY2hvICIkUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAorICAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciBpbgorICAgICAgJGFtX3B5X2V4ZWNfcHJlZml4KikKKyAgICAgICAgYW1fX3N0cmlwX3ByZWZpeD1gZWNobyAiJGFtX3B5X2V4ZWNfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCitAQCAtMjAwLDcgKzIwMyw3IEBACisgICAgICAgIGNhc2UgJGFtX3B5X2V4ZWNfcHJlZml4IGluCisgICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKKyAgICAgICAgICAqKQorLQkgICBhbV9jdl9weXRob25fcHlleGVjZGlyPSRQWVRIT05fRVhFQ19QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisrCSAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisgCSAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZV8xLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzM2RjMjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZV8xLjE1LmJiCkBAIC0wLDAgKzEsMzQgQEAKK3JlcXVpcmUgYXV0b21ha2UuaW5jCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJhdXRvY29uZi1uYXRpdmUiCisKK05BTUVWRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworUkRFUEVORFNfJHtQTn0gKz0gIlwKKyAgICBhdXRvY29uZiBcCisgICAgcGVybCBcCisgICAgcGVybC1tb2R1bGUtYnl0ZXMgXAorICAgIHBlcmwtbW9kdWxlLWRhdGEtZHVtcGVyIFwKKyAgICBwZXJsLW1vZHVsZS1zdHJpY3QgXAorICAgIHBlcmwtbW9kdWxlLXRleHQtcGFyc2V3b3JkcyBcCisgICAgcGVybC1tb2R1bGUtdGhyZWFkLXF1ZXVlIFwKKyAgICBwZXJsLW1vZHVsZS10aHJlYWRzIFwKKyAgICBwZXJsLW1vZHVsZS12YXJzICIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImF1dG9jb25mLW5hdGl2ZSBwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitTUkNfVVJJICs9ICIgZmlsZTovL3B5dGhvbi1saWJkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2J1aWxkdGVzdC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjcxNjk0NmExMDVjYTIyOGFiNTQ1ZmMzN2E3MGRmM2EzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5NDZlOTQ1YTk2ZTI4MTUyYmE1YTZiZWIwNjI1Y2E3MTVjNmUzMmFjNTVmMmUzNTNlZjU0ZGVmMGM4ZWQ5MjQiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1BFUkw9JHtVU1JCSU5QQVRIfS9wZXJsIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yNS4xLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzgxN2ZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yNS4xLmluYwpAQCAtMCwwICsxLDQzIEBACitMSUNfRklMRVNfQ0hLU1VNPSJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzRcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNlwKKyAgICBmaWxlOi8vZ2FzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyXAorICAgIGZpbGU6Ly9pbmNsdWRlL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vbGliaWJlcnR5L0NPUFlJTkcuTElCO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljN1wKKyAgICBmaWxlOi8vYmZkL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgICIKKworZGVmIGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCisKK0JJTlVQViA9ICIke0BiaW51dGlsc19icmFuY2hfdmVyc2lvbihkKX0iCisKK1NSQ1JFViA9ICIyYmQyNTkzMDIyMWRlYTRiZjMzYzEzYTg5YzExMTUxNDQ5MTQ0MGUyIgorU1JDX1VSSSA9ICJcCisgICAgIGdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9iaW51dGlscy1nZGIuZ2l0O2JyYW5jaD1iaW51dGlscy0ke0JJTlVQVn0tYnJhbmNoO3Byb3RvY29sPWdpdCBcCisgICAgIGZpbGU6Ly8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDktVXBzdHJlYW0tU3RhdHVzLUluYXBwcm9wcmlhdGUtZGlzdHJpYnV0aW9uLWNvZGVzb3VyYy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMi1BZGQtWExQLWluc3RydWN0aW9ucy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTMtRml4LWFuLWludGVybmFsLWVycm9yLWluLWRvX3ByaW50X3RvX21hcGZpbGUtc2Vlbi13aS5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2ggXAorICAgICBmaWxlOi8vYmludXRpbHMtb2N0ZW9uMy5wYXRjaCBcCisgICAgIGZpbGU6Ly9hZGQtdGh1bmRlcngtc3VwcG9ydC1mb3ItZ2FzLnBhdGNoIFwKKyAgICAgIgorUyAgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgcm0gLXJmICR7U30vZ2RiICR7U30vbGliZGVjbnVtYmVyICR7U30vcmVhZGxpbmUgJHtTfS9zaW0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE0NjQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0wLDAgKzEsMjkgQEAKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4KKworU1VNTUFSWSA9ICJHTlUgYmluYXJ5IHV0aWxpdGllcyAoY3Jvc3MtY2FuYWRpYW4gZm9yICR7VEFSR0VUX0FSQ0h9IHRhcmdldCkiCitQTiA9ICJiaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorQlBOID0gImJpbnV0aWxzIgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSB2aXJ0dWFsLyR7SE9TVF9QUkVGSVh9Z2NjLWNyb3Nzc2RrIHZpcnR1YWwvbmF0aXZlc2RrLWxpYmMgbmF0aXZlc2RrLXpsaWIgbmF0aXZlc2RrLWdldHRleHQgbmF0aXZlc2RrLWZsZXgiCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1zeXNyb290PSR7U0RLUEFUSH0vc3lzcm9vdHMvJHtUVU5FX1BLR0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30gXAorICAgICAgICAgICAgICAgICIKKworIyBXZSBoYXZlIHRvIHBvaW50IGJpbnV0aWxzIGF0IGEgc3lzcm9vdCBidXQgd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIGlmIHRoaXMgY2hhbmdlcworIyBlLmcuIHdlIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBtYWNoaW5lcyB3aXRoIGRpZmZlcmVudCB0dW5lcy4KK0VYVFJBX09FQ09ORlt2YXJkZXBzZXhjbHVkZV0gPSAiVFVORV9QS0dBUkNIIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgbGlicyBvciBoZWFkZXJzLCB0aGVzZSB3b3VsZCBjb21lIGZyb20gdGhlIAorCSMgbmF0aXZlc2RrIG9yIHRhcmdldCB2ZXJzaW9uIG9mIHRoZSBiaW51dGlscyByZWNpcGUKKwlybSAtcmYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9CisJcm0gLWYgJHtEfSR7bGliZGlyfS9saWJiZmQqCisJcm0gLWYgJHtEfSR7bGliZGlyfS9saWJpYmVydHkqCisJcm0gLWYgJHtEfSR7bGliZGlyfS9saWJvcGNvZGVzKgorCXJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9LyouaAorCQorCWNyb3NzX2NhbmFkaWFuX2JpbmRpcmxpbmtzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYmFhMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbl8yLjI1LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKK3JlcXVpcmUgYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4uaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzZDgwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLmluYwpAQCAtMCwwICsxLDMwIEBACitpbmhlcml0IGNyb3NzCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyIKKworUE4gPSAiYmludXRpbHMtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitCUE4gPSAiYmludXRpbHMiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW5zdGFsbC1saWJiZmQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgXAorICAgICAgICAgICAgICAgICIKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisJIyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGVzZSwgc28gd2UnbGwgcmVtb3ZlIHRoZW0uLi4KKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7bGliZGlyX25hdGl2ZX0vbGliaWJlcnR5LmEKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtUQVJHRVRfU1lTfQorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9saWIvbGRzY3JpcHRzCisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L3NoYXJlL2luZm8KKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvbG9jYWxlCisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L3NoYXJlL21hbgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L3NoYXJlIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn0vZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtsaWJkaXJ9NjQvZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtsaWJkaXJ9IHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn02NCB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtwcmVmaXh9IHx8IDoKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQxZjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NfMi4yNS4xLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBiaW51dGlscy5pbmMKK3JlcXVpcmUgYmludXRpbHMtJHtQVn0uaW5jCityZXF1aXJlIGJpbnV0aWxzLWNyb3NzLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI1LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBiaW51dGlscy1jcm9zc18ke1BWfS5iYgorCitpbmhlcml0IGNyb3Nzc2RrCisKK1BOID0gImJpbnV0aWxzLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXNlZCAtaSAncyMvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliIyR7U0RLUEFUSE5BVElWRX0vbGliICR7U0RLUEFUSE5BVElWRX0vdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliIycgJHtTfS9sZC9jb25maWd1cmUudGd0Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwNDg2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYwpAQCAtMCwwICsxLDE1MyBAQAorU1VNTUFSWSA9ICJHTlUgYmluYXJ5IHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQmludXRpbHMgYXJlIGEgY29sbGVjdGlvbiBvZiBiaW5hcnkgdG9vbHMuIFwKK1RoZSBtYWluIG9uZXMgYXJlIGxkIChHTlUgTGlua2VyKSwgYW5kIGFzIChHTlUgQXNzZW1ibGVyKS4gVGhpcyBcCitwYWNrYWdlIGFsc28gaW5jbHVkZXMgYWRkaXRpb24gdG9vbHMgc3VjaCBhcyBhZGRyMmxpbmUgKENvbnZlcnRzIFwKK2FkZHJlc3NlcyBpbnRvIGZpbGVuYW1lcyBhbmQgbGluZSBudW1iZXJzKSwgYXIgKHV0aWxpdHkgZm9yIGNyZWF0aW5nLCBcCittb2RpZnlpbmcgYW5kIGV4dHJhY3RpbmcgYXJjaGl2ZXMpLCBubSAobGlzdCBzeW1ib2xzIGluIG9iamVjdCBcCitmaWxlcyksIG9iamNvcHkgKGNvcHkgYW5kIHRyYW5zbGF0ZSBvYmplY3QgZmlsZXMpLCBvYmpkdW1wIChEaXNwbGF5IFwKK29iamVjdCBpbmZvcm1hdGlvbiksIGFuZCBvdGhlciB0b29scyBhbmQgcmVsYXRlZCBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JpbnV0aWxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSB6bGliLW5hdGl2ZSBnbnUtY29uZmlnLW5hdGl2ZSBhdXRvY29uZi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgbXVsdGlsaWJfaGVhZGVyIHRleGluZm8KKworRklMRVNfJHtQTn0gPSAiIFwKKwkke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfSogXAorCSR7bGliZGlyfS9saWIqLSouc28gXAorCSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8qIFwKKyAgICAgICAgJHtiaW5kaXJ9L2VtYmVkc3B1IgorCitSUFJPVklERVNfJHtQTn0gKz0gIiR7UE59LXN5bWxpbmtzIgorCitGSUxFU18ke1BOfS1kZXYgPSAiIFwKKwkke2luY2x1ZGVkaXJ9IFwKKwkke2xpYmRpcn0vKi5sYSBcCisJJHtsaWJkaXJ9L2xpYmJmZC5zbyBcCisJJHtsaWJkaXJ9L2xpYm9wY29kZXMuc28iCisKKyMgUmF0aGVyIHRoYW4gZHVwbGljYXRpbmcgbXVsdGlwbGUgZW50cmllcyBmb3IgdGhlc2UsIG1ha2Ugb25lCisjIGxpc3QgYW5kIHJldXNlIGl0LgorCitVU0VfQUxURVJOQVRJVkVTX0ZPUiA9ICIgXAorCWFkZHIybGluZSBcCisJYXIgXAorCWFzIFwKKwljKytmaWx0IFwKKwllbGZlZGl0IFwKKwlncHJvZiBcCisJbGQgXAorCWxkLmJmZCBcCisJbGQuZ29sZCBkd3AgXAorCW5tIFwKKwlvYmpjb3B5IFwKKwlvYmpkdW1wIFwKKwlyYW5saWIgXAorCXJlYWRlbGYgXAorCXNpemUgXAorCXN0cmluZ3MgXAorCXN0cmlwIFwKKyIKKworcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCgpIHsKKyAgICBtYWtlX2FsdHMgPSBkLmdldFZhcigiVVNFX0FMVEVSTkFUSVZFU19GT1IiLCBUcnVlKSBvciAiIgorICAgIHByZWZpeCA9IGQuZ2V0VmFyKCJUQVJHRVRfUFJFRklYIiwgVHJ1ZSkKKyAgICBiaW5kaXIgPSBkLmdldFZhcigiYmluZGlyIiwgVHJ1ZSkKKyAgICBmb3IgYWx0IGluIG1ha2VfYWx0cy5zcGxpdCgpOgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdCwgYmluZGlyICsgIi8iICsgcHJlZml4ICsgYWx0KQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdCwgYmluZGlyICsgIi8iICsgYWx0KQorfQorCisjIEZJTEVTXyR7UE59LWRiZyA9ICIke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4vLmRlYnVnICR7cHJlZml4fS8ke2xpYmRpcn0vLmRlYnVnIgorCitCID0gIiR7U30vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXdlcnJvciBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcGx1Z2lucyBcCisgICAgICAgICAgICAgICAgJHtMREdPTER9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsICctLWVuYWJsZS02NC1iaXQtYmZkJywgJycsIGQpfSIKKworTERHT0xEX2NsYXNzLW5hdGl2ZSA9ICIiCitMREdPTERfY2xhc3MtY3Jvc3NzZGsgPSAiIgorTERHT0xEID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnLS1lbmFibGUtZ29sZD1kZWZhdWx0IC0tZW5hYmxlLXRocmVhZHMnLCAnLS1lbmFibGUtZ29sZCAtLWVuYWJsZS1sZD1kZWZhdWx0JywgZCl9IgorCisjIFRoaXMgaXMgbmVjZXNzYXJ5IGR1ZSB0byBhIGJ1ZyBpbiB0aGUgYmludXRpbHMgTWFrZWZpbGVzCisjIEVYVFJBX09FTUFLRSA9ICJjb25maWd1cmUtYnVpbGQtbGliaWJlcnR5IGFsbCIKKworZXhwb3J0IEFSID0gIiR7SE9TVF9QUkVGSVh9YXIiCitleHBvcnQgQVMgPSAiJHtIT1NUX1BSRUZJWH1hcyIKK2V4cG9ydCBMRCA9ICIke0hPU1RfUFJFRklYfWxkIgorZXhwb3J0IE5NID0gIiR7SE9TVF9QUkVGSVh9bm0iCitleHBvcnQgUkFOTElCID0gIiR7SE9TVF9QUkVGSVh9cmFubGliIgorZXhwb3J0IE9CSkNPUFkgPSAiJHtIT1NUX1BSRUZJWH1vYmpjb3B5IgorZXhwb3J0IE9CSkRVTVAgPSAiJHtIT1NUX1BSRUZJWH1vYmpkdW1wIgorCitleHBvcnQgQVJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXIiCitleHBvcnQgQVNfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXMiCitleHBvcnQgTERfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bGQiCitleHBvcnQgTk1fRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bm0iCitleHBvcnQgUkFOTElCX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfXJhbmxpYiIKKworZXhwb3J0IENDX0ZPUl9IT1NUID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19BUkNIfSIKK2V4cG9ydCBDWFhfRk9SX0hPU1QgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0FSQ0h9IgorCisjIGF1dG90b29scy5iYmNsYXNzIHNldHMgdGhlIF9GT1JfQlVJTEQgdmFyaWFibGVzLCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIG5lZWQKKyMgdG8gdW5zZXQgTERfTElCUkFSWV9QQVRILgorZXhwb3J0IENDX0ZPUl9CVUlMRCA9ICJMRF9MSUJSQVJZX1BBVEg9ICR7QlVJTERfQ0N9IgorCitNVUxUSUFSQ0ggOj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAibXVsdGlhcmNoIiwgInllcyIsICJubyIsIGQpfSIKK2RvX2NvbmZpZ3VyZVt2YXJkZXBzXSArPSAiTVVMVElBUkNIIgorZG9fY29uZmlndXJlICgpIHsKKwkoY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJGYWlsZWQgdG8gcnVuIGdudS1jb25maWdpemUiCisJb2VfcnVuY29uZgorIworIyBtdXN0IHByaW1lIGNvbmZpZy5jYWNoZSB0byBlbnN1cmUgdGhlIGJ1aWxkIG9mIGxpYmliZXJ0eQorIworCW1rZGlyIC1wICR7Qn0vYnVpbGQtJHtCVUlMRF9TWVN9CisJZm9yIGkgaW4gJHtDT05GSUdfU0lURX07IGRvCisJCWNhdCAkaSA+PiAke0J9L2J1aWxkLSR7QlVJTERfU1lTfS9jb25maWcuY2FjaGUgfHwgdHJ1ZQorCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlc2UsIHNvIHdlJ2xsIHJlbW92ZSB0aGVtLi4uCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vbGRzY3JpcHRzCisKKwkjIEZpeCB0aGUgL3Vzci8ke1RBUkdFVF9TWVN9L2Jpbi8qIGxpbmtzCisJZm9yIGwgaW4gJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8qOyBkbworCQlybSAtZiAkbAorCQlsbiAtc2YgYGVjaG8gJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluIFwKKwkJCXwgdHIgLXMgLyBcCisJCQl8IHNlZCAtZSAncyxeLywsJyAtZSAncyxbXi9dKiwuLixnJ2Ake2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWBiYXNlbmFtZSAkbGAgJGwKKwlkb25lCisKKwkjIEluc3RhbGwgdGhlIGxpYmliZXJ0eSBoZWFkZXIKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2Fuc2lkZWNsLmggJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvbGliaWJlcnR5LmggJHtEfSR7aW5jbHVkZWRpcn0KKworCWNkICR7RH0ke2JpbmRpcn0KKworCSMgU3ltbGlua3MgZm9yIGVhc2Ugb2YgcnVubmluZyB0aGVzZSBvbiB0aGUgbmF0aXZlIHRhcmdldAorCWZvciBwIGluICR7VEFSR0VUX1BSRUZJWH0qIDsgZG8KKwkJbG4gLXNmICRwIGBlY2hvICRwIHwgc2VkIC1lIHMsJHtUQVJHRVRfUFJFRklYfSwsYAorCWRvbmUKKworCWZvciBhbHQgaW4gJHtVU0VfQUxURVJOQVRJVkVTX0ZPUn07IGRvCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vJGFsdAorCWRvbmUKKworCW9lX211bHRpbGliX2hlYWRlciBiZmQuaAorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy10YXJnZXQgPSAiJHtVU0VfQUxURVJOQVRJVkVTX0ZPUn0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MGMxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGY3MWVjZjI1MWY4NGI0YmJjOWI3YTgzMmQ1Y2Q0YThiYWU5NWQ4M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjU4OjU0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMTNdIEdlbmVyYXRlIHJlbG9jYXRhYmxlIFNES3MKKworVGhpcyBwYXRjaCB3aWxsIG1vZGlmeSB0aGUgRUxGIGxpbmtlciBzY3JpcHRzIHNvIHRoYXQgdGhlIGNyb3Nzc2RrCitsaW5rZXIgd2lsbCBnZW5lcmF0ZSBiaW5hcmllcyB3aXRoIGEgNDA5NiBieXRlcyBQVF9JTlRFUlAgc2VjdGlvbi4gV2hlbiB0aGUgYmluYXJpZXMKK3dpbGwgYmUgcmVsb2NhdGVkLCBhdCBTREsgaW5zdGFsbCB0aW1lLCB0aGUgaW50ZXJwcmV0ZXIgcGF0aCBjYW4gYmUgZWFzaWx5CitjaGFuZ2VkIGJ5IHRoZSByZWxvY2F0aW5nIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTREsgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsZC9nZW5zY3JpcHRzLnNoICAgICAgfCAzICsrKworIGxkL3NjcmlwdHRlbXBsL2VsZi5zYyB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGQvZ2Vuc2NyaXB0cy5zaCBiL2xkL2dlbnNjcmlwdHMuc2gKK2luZGV4IDQ5OTYwN2EuLjA3NWRkMDQgMTAwNzU1CistLS0gYS9sZC9nZW5zY3JpcHRzLnNoCisrKysgYi9sZC9nZW5zY3JpcHRzLnNoCitAQCAtMjc3LDYgKzI3Nyw3IEBAIERBVEFfQUxJR05NRU5UX3U9IiR7REFUQV9BTElHTk1FTlRfdS0ke0RBVEFfQUxJR05NRU5UX3J9fSIKKyBMRF9GTEFHPXIKKyBEQVRBX0FMSUdOTUVOVD0ke0RBVEFfQUxJR05NRU5UX3J9CisgREVGQVVMVF9EQVRBX0FMSUdOTUVOVD0iQUxJR04oJHtTRUdNRU5UX1NJWkV9KSIKKytQQVJUSUFMX0xJTktJTkc9IiAiCisgKCBlY2hvICIvKiBTY3JpcHQgZm9yIGxkIC1yOiBsaW5rIHdpdGhvdXQgcmVsb2NhdGlvbiAqLyIKKyAgIC4gJHtDVVNUT01JWkVSX1NDUklQVH0KKyAgIC4gJHtzcmNkaXJ9L3NjcmlwdHRlbXBsLyR7U0NSSVBUX05BTUV9LnNjCitAQCAtMjg1LDEwICsyODYsMTIgQEAgREVGQVVMVF9EQVRBX0FMSUdOTUVOVD0iQUxJR04oJHtTRUdNRU5UX1NJWkV9KSIKKyBMRF9GTEFHPXUKKyBEQVRBX0FMSUdOTUVOVD0ke0RBVEFfQUxJR05NRU5UX3V9CisgQ09OU1RSVUNUSU5HPSIgIgorK1BBUlRJQUxfTElOS0lORz0iICIKKyAoIGVjaG8gIi8qIFNjcmlwdCBmb3IgbGQgLVVyOiBsaW5rIHcvb3V0IHJlbG9jYXRpb24sIGRvIGNyZWF0ZSBjb25zdHJ1Y3RvcnMgKi8iCisgICAuICR7Q1VTVE9NSVpFUl9TQ1JJUFR9CisgICAuICR7c3JjZGlyfS9zY3JpcHR0ZW1wbC8ke1NDUklQVF9OQU1FfS5zYworICkgfCBzZWQgLWUgJy9eICokL2Q7cy9bIAldKiQvLycgPiBsZHNjcmlwdHMvJHtFTVVMQVRJT05fTkFNRX0ueHUKKyt1bnNldCBQQVJUSUFMX0xJTktJTkcKKyAKKyBMRF9GTEFHPQorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRffQorZGlmZiAtLWdpdCBhL2xkL3NjcmlwdHRlbXBsL2VsZi5zYyBiL2xkL3NjcmlwdHRlbXBsL2VsZi5zYworaW5kZXggNDM2OGZkOS4uOWYwMWU4YyAxMDA2NDQKKy0tLSBhL2xkL3NjcmlwdHRlbXBsL2VsZi5zYworKysrIGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCitAQCAtMTMxLDggKzEzMSw4IEBAIGlmIHRlc3QgLW4gIiR7Q09NTU9OUEFHRVNJWkV9IjsgdGhlbgorICAgREFUQV9TRUdNRU5UX0VORD0iLiA9IERBVEFfU0VHTUVOVF9FTkQgKC4pOyIKKyAgIERBVEFfU0VHTUVOVF9SRUxST19FTkQ9Ii4gPSBEQVRBX1NFR01FTlRfUkVMUk9fRU5EICgke1NFUEFSQVRFX0dPVFBMVC0wfSwgLik7IgorIGZpCistaWYgdGVzdCAteiAiJHtJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TfSR7Q1JFQVRFX1NITElCfSI7IHRoZW4KKy0gIElOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlM9Ii5pbnRlcnAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5pbnRlcnApIH0iCisraWYgdGVzdCAteiAiJHtJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TfSR7Q1JFQVRFX1NITElCfSR7UEFSVElBTF9MSU5LSU5HfSI7IHRoZW4KKysgIElOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlM9Ii5pbnRlcnAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5pbnRlcnApOyAuID0gMHgxMDAwOyB9IgorIGZpCisgaWYgdGVzdCAteiAiJFBMVCI7IHRoZW4KKyAgIElQTFQ9Ii5pcGx0ICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5pcGx0KSB9IgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGUyMWQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIGRmYmNmYjBkNzE3NjViMzM3ZTYzNTYyMjk5YTk0MzA0MzkyOGQyZDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjA3OjMzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMTNdIGNvbmZpZ3VyZTogd2lkZW4gdGhlIHJlZ2V4cCBmb3IgU0ggYXJjaGl0ZWN0dXJlcworCitncHJvZiBuZWVkcyB0byBrbm93IGFib3V0IHVjbGliYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSAgICAgICB8IDQgKystLQorIGdwcm9mL2NvbmZpZ3VyZSB8IDUgKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggODc2NzdiYy4uZTlmMmYxMyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMzM0MSw3ICszMzQxLDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgorICAgICA7OworICAgczM5MC0qLSogfCBzMzkweC0qLSopCisgICAgIDs7CistICBzaC0qLSogfCBzaFszNF0qLSotKikKKysgIHNoKi0qLSogfCBzaFszNF0qLSotKikKKyAgICAgOzsKKyAgIHNoNjQtKi0qIHwgc2g1Ki0qLSopCisgICAgIDs7CitAQCAtMzgxMiw3ICszODEyLDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgorICAgb3IxayotKi0qKQorICAgICBub2NvbmZpZ2RpcnM9IiRub2NvbmZpZ2RpcnMgZ2RiIgorICAgICA7OworLSAgc2gtKi0qIHwgc2g2NC0qLSopCisrICBzaCotKi0qIHwgc2g2NC0qLSopCisgICAgIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKyAgICAgICBzaCotKi1lbGYpCisgICAgICAgICAgOzsKK2RpZmYgLS1naXQgYS9ncHJvZi9jb25maWd1cmUgYi9ncHJvZi9jb25maWd1cmUKK2luZGV4IGIwOWM4ZmIuLjc5OTYxYzUgMTAwNzU1CistLS0gYS9ncHJvZi9jb25maWd1cmUKKysrKyBiL2dwcm9mL2NvbmZpZ3VyZQorQEAgLTU4NjksNiArNTg2OSwxMSBAQCBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKytsaW51eC11Y2xpYmMqKQorKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKysgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCisrICA7OworKworIG5ldGJzZCopCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjZTc2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBkZmIxNDEyZGE2N2JiZmUzZTk5M2QxMDdkMGI1ZTM5MmY0NDE0MWFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTowOTo1OCArMDAwMAorU3ViamVjdDogW1BBVENIIDAzLzEzXSBQb2ludCBzY3JpcHRzIGxvY2F0aW9uIHRvIGxpYmRpcgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL01ha2VmaWxlLmFtIHwgMiArLQorIGxkL01ha2VmaWxlLmluIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGQvTWFrZWZpbGUuYW0gYi9sZC9NYWtlZmlsZS5hbQoraW5kZXggOTU3NWYxZi4uODRkZjBiZiAxMDA2NDQKKy0tLSBhL2xkL01ha2VmaWxlLmFtCisrKysgYi9sZC9NYWtlZmlsZS5hbQorQEAgLTU0LDcgKzU0LDcgQEAgZW5kaWYKKyAjIFdlIHB1dCB0aGUgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5ICQoc2NyaXB0ZGlyKS9sZHNjcmlwdHMuCisgIyBXZSBjYW4ndCBwdXQgdGhlIHNjcmlwdHMgaW4gJChkYXRhZGlyKSBiZWNhdXNlIHRoZSBTRUFSQ0hfRElSCisgIyBkaXJlY3RpdmVzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBuYXRpdmUgYW5kIGNyb3NzIGxpbmtlcnMuCistc2NyaXB0ZGlyID0gJCh0b29sZGlyKS9saWIKKytzY3JpcHRkaXIgPSAkKGxpYmRpcikKKyAKKyBFTVVMID0gQEVNVUxACisgRU1VTEFUSU9OX09GSUxFUyA9IEBFTVVMQVRJT05fT0ZJTEVTQAorZGlmZiAtLWdpdCBhL2xkL01ha2VmaWxlLmluIGIvbGQvTWFrZWZpbGUuaW4KK2luZGV4IDlmNTZjYTEuLjI3Mjg2MGYgMTAwNjQ0CistLS0gYS9sZC9NYWtlZmlsZS5pbgorKysrIGIvbGQvTWFrZWZpbGUuaW4KK0BAIC0zODgsNyArMzg4LDcgQEAgQU1fQ0ZMQUdTID0gJChXQVJOX0NGTEFHUykKKyAjIFdlIHB1dCB0aGUgc2NyaXB0cyBpbiB0aGUgZGlyZWN0b3J5ICQoc2NyaXB0ZGlyKS9sZHNjcmlwdHMuCisgIyBXZSBjYW4ndCBwdXQgdGhlIHNjcmlwdHMgaW4gJChkYXRhZGlyKSBiZWNhdXNlIHRoZSBTRUFSQ0hfRElSCisgIyBkaXJlY3RpdmVzIG5lZWQgdG8gYmUgZGlmZmVyZW50IGZvciBuYXRpdmUgYW5kIGNyb3NzIGxpbmtlcnMuCistc2NyaXB0ZGlyID0gJCh0b29sZGlyKS9saWIKKytzY3JpcHRkaXIgPSAkKGxpYmRpcikKKyBCQVNFRElSID0gJChzcmNkaXIpLy4uCisgQkZERElSID0gJChCQVNFRElSKS9iZmQKKyBJTkNESVIgPSAkKEJBU0VESVIpL2luY2x1ZGUKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzY2QyYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAzMTI2NjA4YjhjOTVhNzkyYWRlNTZjZjYyYTUzMWQ5MzVkMzkxYzUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMToyNzoxNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzEzXSBPbmx5IGdlbmVyYXRlIGFuIFJQQVRIIGVudHJ5IGlmIExEX1JVTl9QQVRIIGlzIG5vdAorIGVtcHR5CisKK2ZvciBjYXNlcyB3aGVyZSAtcnBhdGggaXNuJ3Qgc3BlY2lmaWVkLiBkZWJpYW4gKCMxNTEwMjQpCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpcyBDaGltZWxpcyA8Y2hyaXNAZGViaWFuLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsZC9lbXVsdGVtcGwvZWxmMzIuZW0gfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sZC9lbXVsdGVtcGwvZWxmMzIuZW0gYi9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KK2luZGV4IDM2ZGVlOGUuLjA3YmVhNTIgMTAwNjQ0CistLS0gYS9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KKysrKyBiL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorQEAgLTExOTgsNiArMTE5OCw4IEBAIGZyYWdtZW50IDw8RU9GCisgCSAgICAgICYmIGNvbW1hbmRfbGluZS5ycGF0aCA9PSBOVUxMKQorIAkgICAgeworIAkgICAgICBsaWJfcGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrCSAgICAgIGlmICgobGliX3BhdGgpICYmIChzdHJsZW4gKGxpYl9wYXRoKSA9PSAwKSkKKysJCSAgbGliX3BhdGggPSBOVUxMOworIAkgICAgICBpZiAoZ2xkJHtFTVVMQVRJT05fTkFNRX1fc2VhcmNoX25lZWRlZCAobGliX3BhdGgsICZuLAorIAkJCQkJCSAgICAgIGZvcmNlKSkKKyAJCWJyZWFrOworQEAgLTE0NjEsNiArMTQ2Myw4IEBAIGdsZCR7RU1VTEFUSU9OX05BTUV9X2JlZm9yZV9hbGxvY2F0aW9uICh2b2lkKQorICAgcnBhdGggPSBjb21tYW5kX2xpbmUucnBhdGg7CisgICBpZiAocnBhdGggPT0gTlVMTCkKKyAgICAgcnBhdGggPSAoY29uc3QgY2hhciAqKSBnZXRlbnYgKCJMRF9SVU5fUEFUSCIpOworKyAgaWYgKChycGF0aCkgJiYgKHN0cmxlbiAocnBhdGgpID09IDApKQorKyAgICBycGF0aCA9IE5VTEw7CisgCisgICBmb3IgKGFiZmQgPSBsaW5rX2luZm8uaW5wdXRfYmZkczsgYWJmZDsgYWJmZCA9IGFiZmQtPmxpbmsubmV4dCkKKyAgICAgaWYgKGJmZF9nZXRfZmxhdm91ciAoYWJmZCkgPT0gYmZkX3RhcmdldF9lbGZfZmxhdm91cikKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBmMTcwM2JjYzdhNWM1MDdlNDcxZTI2MzBiNWEyZGUxMjkxMDAzMTVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozMjo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDA1LzEzXSBFeHBsaWNpdGx5IGxpbmsgd2l0aCBsaWJtIG9uIHVjbGliYworCitEZXNjcmlwdGlvbjoKKworV2UgZG8gbm90IG5lZWQgdG8gaGF2ZSB0aGUgbGlidG9vbCBwYXRjaCBhbnltb3JlIGZvciBiaW51dGlscyBhZnRlcgorbGlidG9vbCBoYXMgYmVlbiB1cGRhdGVkIHVwc3RyZWFtIGl0IGluY2x1ZGUgc3VwcG9ydCBmb3IgaXQuIEhvd2V2ZXIKK2ZvciBidWlsZGluZyBnYXMgbmF0aXZlbHkgb24gdWNsaWJjIHN5c3RlbXMgd2UgaGF2ZSB0byBsaW5rIGl0IHdpdGgKKy1sbSBzbyB0aGF0IGl0IHBpY2tzIHVwIG1pc3Npbmcgc3ltYm9scy4KKworL2xvY2FsL2J1aWxkX2FyZWEvQlVJTEQvYXJtX3Y1dF9sZV91Y2xpYmMvYmludXRpbHMtMi4xNy41MC9vYmpkaXIvbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYShmbG9hdGZvcm1hdC5vKToKK0luIGZ1bmN0aW9uIGBmbG9hdGZvcm1hdF9mcm9tX2RvdWJsZSc6CitmbG9hdGZvcm1hdC5jOigudGV4dCsweDFlYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGZyZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHgyZjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKKy9sb2NhbC9idWlsZF9hcmVhL0JVSUxEL2FybV92NXRfbGVfdWNsaWJjL2JpbnV0aWxzLTIuMTcuNTAvb2JqZGlyL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEoZmxvYXRmb3JtYXQubyk6CitJbiBmdW5jdGlvbiBgZmxvYXRmb3JtYXRfdG9fZG91YmxlJzoKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4MzhhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDNkMik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHg0M2UpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4NGUyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworbWFrZVs0XTogKioqIFthcy1uZXddIEVycm9yIDEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnYXMvY29uZmlndXJlLnRndCB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZS50Z3QgYi9nYXMvY29uZmlndXJlLnRndAoraW5kZXggOWFiYzc2OC4uMWQ5MmY1NSAxMDA2NDQKKy0tLSBhL2dhcy9jb25maWd1cmUudGd0CisrKysgYi9nYXMvY29uZmlndXJlLnRndAorQEAgLTQ3Nyw2ICs0NzcsMTIgQEAgY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgorICAgKi0qLW5ldHdhcmUpCQkJCWZtdD1lbGYgZW09bmV0d2FyZSA7OworIGVzYWMKKyAKKytjYXNlICR7Z2VuZXJpY190YXJnZXR9IGluCisrICBhcm0tKi0qdWNsaWJjKikKKysgICAgbmVlZF9saWJtPXllcworKyAgICA7OworK2VzYWMKKysKKyBjYXNlICR7Y3B1X3R5cGV9IGluCisgICBhYXJjaDY0IHwgYWxwaGEgfCBhcm0gfCBpMzg2IHwgaWE2NCB8IG1pY3JvYmxhemUgfCBtaXBzIHwgbnMzMmsgfCBvcjFrIHwgb3Ixa25kIHwgcGRwMTEgfCBwcGMgfCBzcGFyYyB8IHo4MCB8IHo4aykKKyAgICAgYmZkX2dhcz15ZXMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk2N2VmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2gKQEAgLTAsMCArMSwxOTM2MSBAQAorRnJvbSAwM2ViOWI0ZmU1ODNlODhhMjJmZDhjMjViNDNmYmQ5YmFmZTIxYWY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozNDo0MSArMDAwMAorU3ViamVjdDogW1BBVENIIDA2LzEzXSBVc2UgbGlidG9vbCAyLjQKKworU28gd2UgY2FuIGdldCBsaWJ0b29sIHN5c3Jvb3Qgc3VwcG9ydAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJmZC9jb25maWd1cmUgICAgICAgIHwgMTMyMCArKysrKysrKysrKysrKysrKy0tLS0tLQorIGJmZC9jb25maWd1cmUuYWMgICAgIHwgICAgMiArLQorIGJpbnV0aWxzL2NvbmZpZ3VyZSAgIHwgMTMxOCArKysrKysrKysrKysrKysrKy0tLS0tLQorIGNvbmZpZ3VyZSAgICAgICAgICAgIHwgICAgMiArLQorIGdhcy9jb25maWd1cmUgICAgICAgIHwgMTMxOCArKysrKysrKysrKysrKysrKy0tLS0tLQorIGdwcm9mL2NvbmZpZ3VyZSAgICAgIHwgMTMyMyArKysrKysrKysrKysrKysrKy0tLS0tLQorIGxkL2NvbmZpZ3VyZSAgICAgICAgIHwgMTcwMSArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQorIGxpYnRvb2wubTQgICAgICAgICAgIHwgMTA4NiArKysrKysrKysrKysrLS0tLS0tCisgbHRtYWluLnNoICAgICAgICAgICAgfCAyOTI1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgbHRvcHRpb25zLm00ICAgICAgICAgfCAgICAyICstCisgbHR2ZXJzaW9uLm00ICAgICAgICAgfCAgIDEyICstCisgbHR+b2Jzb2xldGUubTQgICAgICAgfCAgICAyICstCisgb3Bjb2Rlcy9jb25maWd1cmUgICAgfCAxMzIwICsrKysrKysrKysrKysrKysrLS0tLS0tCisgb3Bjb2Rlcy9jb25maWd1cmUuYWMgfCAgICAyICstCisgMTQgZmlsZXMgY2hhbmdlZCwgODk1MiBpbnNlcnRpb25zKCspLCAzMzgxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZSBiL2JmZC9jb25maWd1cmUKK2luZGV4IDg1ZTZiODIuLjNkM2RkODggMTAwNzU1CistLS0gYS9iZmQvY29uZmlndXJlCisrKysgYi9iZmQvY29uZmlndXJlCitAQCAtNjY4LDYgKzY2OCw5IEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorK2FjX2N0X0FSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03ODAsNiArNzgzLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTQ1Niw2ICsxNDYwLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLW1tYXAgICAgICAgICAgICAgdHJ5IHVzaW5nIG1tYXAgZm9yIEJGRCBpbnB1dCBmaWxlcyBpZiBhdmFpbGFibGUKKyAgIC0td2l0aC1zZXBhcmF0ZS1kZWJ1Zy1kaXI9RElSCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rIGZvciBnbG9iYWwgc2VwYXJhdGUgZGVidWcgaW5mbyBpbiBESVIKK0BAIC01Mzg2LDggKzUzOTIsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTQyNyw3ICs1NDMzLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNjExMyw4ICs2MTE5LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTYxNjMsNiArNjE2OSw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjE3OSw2ICs2MjU5LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02MzQ3LDcgKzY0MzIsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjUwMSw2ICs2NTg3LDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjUxNiw5ICs2NjE3LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NTM0LDcgKzY3ODgsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02NTU0LDExICs2ODA4LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY1NzQsNyArNjgzMiw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02NTkzLDYgKzY4NTEsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTY2MDQsMTYgKzY4NjYsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKyAKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKyAKKyAKKyAKK0BAIC02OTU1LDggKzcyNzMsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY5OTIsNiArNzMxMCw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC03MDMzLDYgKzczNTIsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNzA0NCw3ICs3Mzc1LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNzA3MCw4ICs3NDAxLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNzA4MSw4ICs3NDEyLDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNzExOSw2ICs3NDUwLDE2IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisgCisgCisgCitAQCAtNzE0MCw2ICs3NDgxLDQ1IEBAIGZpCisgCisgCisgCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisrCisrCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK0BAIC03MzQ2LDYgKzc3MjYsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc5MDksNiArODQwNiw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC04MDczLDcgKzg1NzIsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtODE2Miw3ICs4NjYyLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04NDYwLDggKzg5NjAsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg2MjcsNiArOTEyNSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg2ODksNyArOTE5Myw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NzQ2LDEzICs5MjUwLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg4MTMsNiArOTMyMSwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTkxNjMsNyArOTY3Niw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTkyMTEsNyArOTcyNSw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTkyNjIsMTIgKzk3NzYsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTI4MSw4ICs5Nzk1LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkzMDAsOCArOTgxNCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MzQ3LDggKzk4NjEsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTQ3OCw3ICs5OTkyLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk0OTEsMjIgKzEwMDExLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05NTE4LDcgKzEwMDQ1LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05NTMxLDIyICsxMDA2NCwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTk1OTEsMjAgKzEwMTMxLDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTY2NSw3ICsxMDI0OCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTk2NzMsNyArMTAyNTYsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05Njg5LDcgKzEwMjcyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk3MTMsMTAgKzEwMjk2LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTc5NSwyMyArMTAzNzgsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk4OTYsNyArMTA0OTIsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05OTE1LDkgKzEwNTExLDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwNDkzLDggKzExMDg5LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwNTI3LDEzICsxMTEyNCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTA2MjUsNyArMTEyODAsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTE0NjUsMTAgKzEyMTIwLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTE1NzEsMTAgKzEyMjI2LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTUxNjMsNyArMTU4MTgsNyBAQCBTSEFSRURfTERGTEFHUz0KKyBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCitAQCAtMTY3ODAsMTMgKzE3NDM1LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTY4MDEsMTQgKzE3NDYzLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2ODQxLDEyICsxNzUwNiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNjkwMSw4ICsxNzU2NiwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTY5MTIsMTIgKzE3NTgyLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xNjkzMyw3ICsxNzYwNSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE2OTY5LDYgKzE3NjQwLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNzc0OCw3ICsxODQyMCw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTc4NTEsMTkgKzE4NTI0LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE3ODkzLDYgKzE4NTg5LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE3OTAyLDYgKzE4NjA0LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xODAxNiwxMiArMTg3MjEsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTgxMDgsOSArMTg4MTMsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xODEyNiw2ICsxODgyOCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTgxNTgsMjEwICsxODg2MywxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZ3VyZS5hYyBiL2JmZC9jb25maWd1cmUuYWMKK2luZGV4IGJhOThlMzkuLjg4MDYzY2YgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlndXJlLmFjCisrKysgYi9iZmQvY29uZmlndXJlLmFjCitAQCAtNTY0LDcgKzU2NCw3IEBAIGNoYW5nZXF1b3RlKCwpZG5sCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICMgTW9yZSBoYWNrcyB0byBidWlsZCBETExzIG9uIFdpbmRvd3MuCitkaWZmIC0tZ2l0IGEvYmludXRpbHMvY29uZmlndXJlIGIvYmludXRpbHMvY29uZmlndXJlCitpbmRleCBiZTRiODFjLi42NjA2YTVmIDEwMDc1NQorLS0tIGEvYmludXRpbHMvY29uZmlndXJlCisrKysgYi9iaW51dGlscy9jb25maWd1cmUKK0BAIC02NTUsOCArNjU1LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc2Nyw2ICs3NzAsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDM5LDYgKzE0NDMsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtemxpYiAgICAgICAgICAgICBpbmNsdWRlIHpsaWIgc3VwcG9ydCAoYXV0by95ZXMvbm8pIGRlZmF1bHQ9YXV0bworICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIGRlZmF1bHQ9bm8KKyAgIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKK0BAIC01MTUzLDggKzUxNTksOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTE5NCw3ICs1MjAwLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNTg4MCw4ICs1ODg2LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTU5MzAsNiArNTkzNiw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTk0Niw2ICs2MDI2LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02MTE0LDcgKzYxOTksOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjI2OCw2ICs2MzU0LDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjI4Myw5ICs2Mzg0LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MzAxLDcgKzY1NTUsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MzIxLDExICs2NTc1LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYzNDEsNyArNjU5OSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MzYwLDYgKzY2MTgsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYzNzEsMTYgKzY2MzMsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKyAKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKyAKKyAKKyAKK0BAIC02NzIyLDggKzcwNDAsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY3NTksNiArNzA3Nyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02ODAwLDYgKzcxMTksMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjgxMSw3ICs3MTQyLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjgzNyw4ICs3MTY4LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjg0OCw4ICs3MTc5LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjg4Niw2ICs3MjE3LDIwIEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjkwNSw2ICs3MjUwLDQxIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisgCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitAQCAtNzExMyw2ICs3NDkzLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03Njc2LDYgKzgxNzMsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzg3MSw3ICs4MzcwLDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc5NjAsNyArODQ2MCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODI1OCw4ICs4NzU4LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04NDI1LDYgKzg5MjMsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04NDg3LDcgKzg5OTEsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODU0NCwxMyArOTA0OCwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04NjExLDYgKzkxMTksMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04OTYxLDcgKzk0NzQsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC05MDA5LDcgKzk1MjMsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC05MDYwLDEyICs5NTc0LDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTkwNzksOCArOTU5Myw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05MDk4LDggKzk2MTIsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTE0NSw4ICs5NjU5LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkyNzYsNyArOTc5MCwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05Mjg5LDIyICs5ODA5LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MzE2LDcgKzk4NDMsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkzMjksMjIgKzk4NjIsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05Mzg5LDIwICs5OTI5LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTQ2Myw3ICsxMDA0Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTk0NzEsNyArMTAwNTQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05NDg3LDcgKzEwMDcwLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk1MTEsMTAgKzEwMDk0LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTU5MywyMyArMTAxNzYsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk2OTQsNyArMTAyOTAsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05NzEzLDkgKzEwMzA5LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMjkxLDggKzEwODg3LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMzI1LDEzICsxMDkyMiw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTA0MjMsNyArMTEwNzgsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTEyNjMsMTAgKzExOTE4LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEzNjksMTAgKzEyMDI0LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTUzNzMsMTMgKzE2MDI4LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUzOTQsMTQgKzE2MDU2LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1NDM0LDEyICsxNjA5OSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTQ5NCw4ICsxNjE1OSwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTU1MDUsMTIgKzE2MTc1LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xNTUyNiw3ICsxNjE5OCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE1NTYyLDYgKzE2MjMzLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNjMxOSw3ICsxNjk5MSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTY0MjIsMTkgKzE3MDk1LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE2NDY0LDYgKzE3MTYwLDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE2NDczLDYgKzE3MTc1LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNjU4NywxMiArMTcyOTIsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTY2NzksOSArMTczODQsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNjY5Nyw2ICsxNzM5OSw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTY3MjksMjEwICsxNzQzNCwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBlOWYyZjEzLi5jYmNjYjE4IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC04MDQxLDcgKzgwNDEsNyBAQCBjYXNlICIgJGJ1aWxkX2NvbmZpZ2RpcnMgIiBpbgorICAgICAjIEZvciBhbiBpbnN0YWxsZWQgbWFrZWluZm8sIHdlIHJlcXVpcmUgaXQgdG8gYmUgZnJvbSB0ZXhpbmZvIDQuNyBvcgorICAgICAjIGhpZ2hlciwgZWxzZSB3ZSB1c2UgdGhlICJtaXNzaW5nIiBkdW1teS4KKyAgICAgaWYgJHtNQUtFSU5GT30gLS12ZXJzaW9uIFwKKy0gICAgICAgfCBlZ3JlcCAndGV4aW5mb1teMC05XSooNFwuKFs3LTldfFsxLTldWzAtOV0pfFs1LTldfFsxLTldWzAtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICAgfCBlZ3JlcCAndGV4aW5mb1teMC05XSooWzEtM11bMC05XXw0Lls0LTldfDQuWzEtOV1bMC05XSt8WzUtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICA6CisgICAgIGVsc2UKKyAgICAgICBNQUtFSU5GTz0iJE1JU1NJTkcgbWFrZWluZm8iCitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZSBiL2dhcy9jb25maWd1cmUKK2luZGV4IGU5YmE1NTAuLjA3NDg4NmYgMTAwNzU1CistLS0gYS9nYXMvY29uZmlndXJlCisrKysgYi9nYXMvY29uZmlndXJlCitAQCAtNjQ1LDggKzY0NSwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NTcsNiArNzYwLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTQyMiw2ICsxNDI2LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLXpsaWIgICAgICAgICAgICAgaW5jbHVkZSB6bGliIHN1cHBvcnQgKGF1dG8veWVzL25vKSBkZWZhdWx0PWF1dG8KKyAKKyBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKK0BAIC00OTAxLDggKzQ5MDcsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNDk0Miw3ICs0OTQ4LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNTYyOCw4ICs1NjM0LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTU2NzgsNiArNTY4NCw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTY5NCw2ICs1Nzc0LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC01ODYyLDcgKzU5NDcsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjAxNiw2ICs2MTAyLDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjAzMSw5ICs2MTMyLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MDQ5LDcgKzYzMDMsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MDY5LDExICs2MzIzLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYwODksNyArNjM0Nyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MTA4LDYgKzYzNjYsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYxMTksMTIgKzYzODEsMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisgCisgCisgCitAQCAtNjEzNiw2ICs2Mzk2LDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCitAQCAtNjQ3MCw4ICs2Nzg4LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NTA3LDYgKzY4MjUsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjU0OCw2ICs2ODY3LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY1NTksNyArNjg5MCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY1ODUsOCArNjkxNiw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY1OTYsOCArNjkyNyw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY2MzQsNiArNjk2NSwyMSBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworKworKworKworIAorIAorIAorQEAgLTY2NTIsNiArNjk5OCw0MCBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworIAorIAorIAorQEAgLTY4NjEsNiArNzI0MSwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzQyNCw2ICs3OTIxLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTc2MTksNyArODExOCw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC03NzA4LDcgKzgyMDgsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTgwMDYsOCArODUwNiw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODE3Myw2ICs4NjcxLDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODIzNSw3ICs4NzM5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTgyOTIsMTMgKzg3OTYsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODM1OSw2ICs4ODY3LDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtODcwOSw3ICs5MjIyLDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtODc1Nyw3ICs5MjcxLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtODgwOCwxMiArOTMyMiwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC04ODI3LDggKzkzNDEsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtODg0Niw4ICs5MzYwLDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTg4OTMsOCArOTQwNyw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MDI0LDcgKzk1MzgsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTAzNywyMiArOTU1NywyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTA2NCw3ICs5NTkxLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MDc3LDIyICs5NjEwLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTEzNywyMCArOTY3Nyw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTkyMTEsNyArOTc5NCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTkyMTksNyArOTgwMiw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTkyMzUsNyArOTgxOCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05MjU5LDEwICs5ODQyLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTM0MSwyMyArOTkyNCwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTQ0Miw3ICsxMDAzOCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk0NjEsOSArMTAwNTcsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTAwMzksOCArMTA2MzUsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAwNzMsMTMgKzEwNjcwLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDE3MSw3ICsxMDgyNiw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTAxMSwxMCArMTE2NjYsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTExNywxMCArMTE3NzIsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTI3NCwxMyArMTU5MjksMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTI5NSwxNCArMTU5NTcsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUzMzUsMTIgKzE2MDAwLDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1Mzk1LDggKzE2MDYwLDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNTQwNiwxMiArMTYwNzYsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE1NDI3LDcgKzE2MDk5LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTU0NjMsNiArMTYxMzQsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE2MjI3LDcgKzE2ODk5LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNjMzMCwxOSArMTcwMDMsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTYzNzIsNiArMTcwNjgsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTYzODEsNiArMTcwODMsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE2NDk1LDEyICsxNzIwMCwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNjU4Nyw5ICsxNzI5Miw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE2NjA1LDYgKzE3MzA3LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNjYzNywyMTAgKzE3MzQyLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9ncHJvZi9jb25maWd1cmUgYi9ncHJvZi9jb25maWd1cmUKK2luZGV4IDc5OTYxYzUuLmM0ZjZhYzkgMTAwNzU1CistLS0gYS9ncHJvZi9jb25maWd1cmUKKysrKyBiL2dwcm9mL2NvbmZpZ3VyZQorQEAgLTYyOSw4ICs2MjksMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzQxLDYgKzc0NCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTEzOTksNiArMTQwMyw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAKKyBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorQEAgLTQ4MzEsOCArNDgzNyw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC00ODcyLDcgKzQ4NzgsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01NTU4LDggKzU1NjQsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTYwOCw2ICs1NjE0LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01NjI0LDYgKzU3MDQsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTU3OTIsNyArNTg3Nyw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC01ODY5LDExICs1OTU1LDYgQEAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCistbGludXgtdWNsaWJjKikKKy0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCistICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorLSAgOzsKKy0KKyBuZXRic2QqKQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCitAQCAtNTk1MSw2ICs2MDMyLDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNTk2Niw5ICs2MDYyLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTg0LDcgKzYyMzMsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MDA0LDExICs2MjUzLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYwMjQsNyArNjI3Nyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MDQzLDYgKzYyOTYsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYwNTQsMTIgKzYzMTEsMTAgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisgCisgCisgCitAQCAtNjA3MSw2ICs2MzI2LDY0IEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCitAQCAtNjQwNSw4ICs2NzE4LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NDQyLDYgKzY3NTUsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjQ4Myw2ICs2Nzk3LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY0OTQsNyArNjgyMCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY1MjAsOCArNjg0Niw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY1MzEsOCArNjg1Nyw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY1NjksNiArNjg5NSwxOCBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworIAorIAorIAorQEAgLTY1OTAsNiArNjkyOCw0MyBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworKworICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitAQCAtNjc5Niw2ICs3MTcxLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03MzU5LDYgKzc4NTEsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzU1NCw3ICs4MDQ4LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc2NDMsNyArODEzOCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtNzk0MSw4ICs4NDM2LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MTA4LDYgKzg2MDEsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04MTcwLDcgKzg2NjksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODIyNywxMyArODcyNiwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04Mjk0LDYgKzg3OTcsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04NjQ0LDcgKzkxNTIsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04NjkyLDcgKzkyMDEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04NzQzLDEyICs5MjUyLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTg3NjIsOCArOTI3MSw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC04NzgxLDggKzkyOTAsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODgyOCw4ICs5MzM3LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTg5NTksNyArOTQ2OCwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC04OTcyLDIyICs5NDg3LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC04OTk5LDcgKzk1MjEsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkwMTIsMjIgKzk1NDAsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MDcyLDIwICs5NjA3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTE0Niw3ICs5NzI0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTE1NCw3ICs5NzMyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTE3MCw3ICs5NzQ4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTkxOTQsMTAgKzk3NzIsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05Mjc2LDIzICs5ODU0LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05Mzc3LDcgKzk5NjgsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05Mzk2LDkgKzk5ODcsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtOTk3NCw4ICsxMDU2NSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDAwOCwxMyArMTA2MDAsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMTA2LDcgKzEwNzU2LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTEwOTQ2LDEwICsxMTU5NiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMDUyLDEwICsxMTcwMiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyOTI0LDEzICsxMzU3NCwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEyOTQ1LDE0ICsxMzYwMiwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMjk4NSwxMiArMTM2NDUsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTMwNDUsOCArMTM3MDUsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTEzMDU2LDEyICsxMzcyMSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTMwNzcsNyArMTM3NDQsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xMzExMyw2ICsxMzc3OSw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTM4NjksNyArMTQ1MzYsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTEzOTcyLDE5ICsxNDY0MCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNDAxNCw2ICsxNDcwNSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNDAyMyw2ICsxNDcyMCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTQxMzcsMTIgKzE0ODM3LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE0MjI5LDkgKzE0OTI5LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTQyNDcsNiArMTQ5NDQsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE0Mjc5LDIxMCArMTQ5NzksMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZSBiL2xkL2NvbmZpZ3VyZQoraW5kZXggNDQwOGIwZC4uMmZiYWViZiAxMDA3NTUKKy0tLSBhL2xkL2NvbmZpZ3VyZQorKysrIGIvbGQvY29uZmlndXJlCitAQCAtNjU0LDggKzY1NCwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NzYsNiArNzc5LDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTQ1Myw2ICsxNDU3LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLWxpYi1wYXRoPWRpcjE6ZGlyMi4uLiAgc2V0IGRlZmF1bHQgTElCX1BBVEgKKyAgIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIHVzci9saWIgZXQgYWwgd2l0aGluIERJUi4KKyAgIC0td2l0aC16bGliICAgICAgICAgICAgIGluY2x1ZGUgemxpYiBzdXBwb3J0IChhdXRvL3llcy9ubykgZGVmYXVsdD1hdXRvCitAQCAtNTY0NSw4ICs1NjUxLDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTU2ODYsNyArNTY5Miw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTYzNzIsOCArNjM3OCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC02NDIyLDYgKzY0MjgsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY0MzgsNiArNjUxOCwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjYwNiw3ICs2NjkxLDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTY3NjAsNiArNjg0NiwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTY3NzUsOSArNjg3NiwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjc5Myw3ICs3MDQ3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjgxMywxMSArNzA2NywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02ODMzLDcgKzcwOTEsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjg1Miw2ICs3MTEwLDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02ODYzLDEyICs3MTI1LDEyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworIAorIAorIAorQEAgLTY4NzgsNiArNzE0MCw2MiBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrCisrCisrCisrCisrCisgCisgCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorQEAgLTcyMTQsOCArNzUzMiw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNzI1MSw2ICs3NTY5LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTcyOTIsNiArNzYxMSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC03MzAzLDcgKzc2MzQsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC03MzI5LDggKzc2NjAsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC03MzQwLDggKzc2NzEsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC03Mzc4LDYgKzc3MDksMTkgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC03Mzk4LDYgKzc3NDIsNDIgQEAgZmkKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTc2MDUsNiArNzk4NSwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtODE2OCw2ICs4NjY1LDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTgyMzYsNiArODczNSwxNiBAQCBkb25lCisgCisgCisgCisrZnVuY19zdHJpcG5hbWVfY25mICgpCisreworKyAgY2FzZSAkezJ9IGluCisrICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgZXNhYworK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKKysKKysKKysKKyAKKyAKKyAjIFNldCBvcHRpb25zCitAQCAtODM2NCw3ICs4ODczLDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTg0NTMsNyArODk2Myw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODc1MSw4ICs5MjYxLDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04OTE4LDYgKzk0MjYsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04OTgwLDcgKzk0OTQsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtOTAzNywxMyArOTU1MSwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC05MTA0LDYgKzk2MjIsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC05NDU0LDcgKzk5NzcsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC05NTAyLDcgKzEwMDI2LDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtOTU1MywxMiArMTAwNzcsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTU3Miw4ICsxMDA5Niw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05NTkxLDggKzEwMTE1LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTk2MzgsOCArMTAxNjIsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTc2OSw3ICsxMDI5MywxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05NzgyLDIyICsxMDMxMiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTgwOSw3ICsxMDM0NiwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTgyMiwyMiArMTAzNjUsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05ODgxLDIxICsxMDQzMSw2NCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05OTU2LDcgKzEwNTQ5LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTk2NCw3ICsxMDU1Nyw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk5ODAsNyArMTA1NzMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtMTAwMDQsMTAgKzEwNTk3LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtMTAwODYsMjMgKzEwNjc5LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC0xMDE4Nyw3ICsxMDc5Myw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTEwMjA2LDkgKzEwODEyLDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwNzg0LDggKzExMzkwLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwODE4LDEzICsxMTQyNSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTA5MTYsNyArMTE1ODEsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTE3MTIsNyArMTIzNzcsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxMTcxNSAiY29uZmlndXJlIgorKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTE3NTYsMTAgKzEyNDIxLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTE4MTgsNyArMTI0ODMsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxMTgyMSAiY29uZmlndXJlIgorKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTE4NjIsMTAgKzEyNTI3LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTIyNTcsNiArMTI5MjIsNyBAQCAkUk0gLXIgY29uZnRlc3QqCisgCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0kQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgIGx0X3NhdmVfTEQ9JExECisgICBsdF9zYXZlX0dDQz0kR0NDCisgICBHQ0M9JEdYWAorQEAgLTEyMjc0LDYgKzEyOTQwLDcgQEAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgZmkKKyAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgICBDQz0ke0NYWC0iYysrIn0KKysgIENGTEFHUz0kQ1hYRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgY29tcGlsZXJfQ1hYPSRDQworICAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCitAQCAtMTI0MTMsOCArMTMwODAsOCBAQCB3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCistICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKK0BAIC0xMjU1Niw3ICsxMzIyMywxMyBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZQorICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKKyAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgICMgZXhlY3V0YWJsZS4KKy0gICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTEyNTY5LDIyICsxMzI0MiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorK2ZpCisgCisgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAorQEAgLTEyNTk3LDcgKzEzMjc3LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICBlbHNlCisgCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMTI2MTAsMjIgKzEzMjk2LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCisrZmkKKyAKKyAJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC0xMjY2OCwyOSArMTMzNjEsNzUgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICA7OworIAorICAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKy0gICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorLSAgICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCistICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCistICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCistICAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKy0KKy0gICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCistICAgICAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCistICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorLQkgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBlbHNlCistCSAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0JICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGZpfgorLSAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICBlbHNlCistICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKy0gICAgICAgIGZpCistICAgICAgICA7OworKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisrCSxjbCogfCBubyxjbCopCisrCSAgIyBOYXRpdmUgTVNWQworKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKysJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScgJworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisrCSAgZmlsZV9saXN0X3NwZWNfQ1hYPSdAJworKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCSAgbGliZXh0PWxpYgorKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorKwkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgICAgJFNFRCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBlbHNlCisrCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZml+CisrCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgICBsaW5rbmFtZXM9JworKwkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgQ1hYKT0ndHJ1ZScKKysJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKysJICAjIERvbid0IHVzZSByYW5saWIKKysJICBvbGRfcG9zdGluc3RhbGxfY21kc19DWFg9J2NobW9kIDY0NCAkb2xkbGliJworKwkgIHBvc3RsaW5rX2NtZHNfQ1hYPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICAgKikKKysJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCQk7OworKwkgICAgZXNhY34KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisrCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICAgIGZpJworKwkgIDs7CisrCSopCisrCSAgIyBnKysKKysJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKysJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisrCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKysJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKysJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCisrCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisrCisrCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKysJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBlbHNlCisrCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZml+CisrCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgZWxzZQorKwkgICAgbGRfc2hsaWJzX0NYWD1ubworKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwk7OworICAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgCisgCitAQCAtMTI3OTYsNyArMTM1MzUsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAqKQorICAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCistICAgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysgICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KK0BAIC0xMjg2NywxMCArMTM2MDYsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgIGlhNjQqKQorLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICAqKQorLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKK0BAIC0xMjkxMSw5ICsxMzY1MCw5IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICAqKQorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSAgICAgIGVsc2UKKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKyAJICAgICAgZmkKKyAJICAgIGZpCisgCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKK0BAIC0xMjk4MywyMCArMTM3MjIsMjAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgIHByZWxpbmtfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKy0JCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgIicKKysJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisgCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorLQkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYH4KKysJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorIAkJJFJBTkxJQiAkb2xkbGliJworIAkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAJICAgICAgOzsKKyAJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworQEAgLTEzMTkxLDcgKzEzOTMwLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgICAgKikKKy0JICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkJICA7OworIAkgICAgICBlc2FjCisgCitAQCAtMTMyMzcsNyArMTM5NzYsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgICBzb2xhcmlzKikKKyAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKysgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKyAJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKK0BAIC0xMzI3OCw5ICsxNDAxNyw5IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LXogJHt3bH1kZWZzJworIAkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisgCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworIAorIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KK0BAIC0xMzQxNSw2ICsxNDE1NCwxMyBAQCBwcml2YXRlOgorIH07CisgX0xUX0VPRgorIAorKworK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKytjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisrKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisrKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworK2VzYWMKKysKKyBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMzQyOCw3ICsxNDE3NCw3IEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworIAorICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworLSAgICBjYXNlICRwIGluCisrICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKyAKKyAgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorQEAgLTEzNDM3LDEzICsxNDE4MywyMiBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKyAJIHByZXY9JHAKKyAJIGNvbnRpbnVlCistICAgICAgIGVsc2UKKy0JIHByZXY9CisgICAgICAgIGZpCisgCisrICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisrICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorKyAgICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICBlc2FjCisrICAgICAgIGZpCisrICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorLQkgY2FzZSAkcCBpbgorLQkgLUwqIHwgLVIqKQorKwkgY2FzZSAke3ByZXZ9IGluCisrCSAtTCB8IC1SKQorIAkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKyAJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisgCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorQEAgLTEzNDYzLDggKzE0MjE4LDEwIEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorIAkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAke3ByZXZ9JHtwfSIKKyAJIGZpCisgICAgICAgIGZpCisrICAgICAgIHByZXY9CisgICAgICAgIDs7CisgCisrICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICAqLiRvYmpleHQpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KK0BAIC0xMzUwMCw2ICsxNDI1Nyw3IEBAIGVsc2UKKyBmaQorIAorICRSTSAtZiBjb25mZXN0LiRvYmpleHQKKytDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisgCisgIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KKyBjYXNlICRob3N0X29zIGluCitAQCAtMTM1MzUsNyArMTQyOTMsNyBAQCBsaW51eCopCisgCisgc29sYXJpcyopCisgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgQ0MqKQorKyAgQ0MqIHwgc3VuQ0MqKQorICAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKK0BAIC0xMzYwMCw4ICsxNDM1OCw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KK0BAIC0xMzcwNiw2ICsxNDQ2MiwxMSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAkgIDs7CisgCWVzYWMKKyAJOzsKKysgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisrCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworKwk7OworICAgICAgIGRndXgqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorIAkgIGVjKysqKQorQEAgLTEzODU4LDcgKzE0NjE5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJOzsKKyAgICAgICBzb2xhcmlzKikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBDQyopCisrCSAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworIAkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKyAJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCitAQCAtMTM5MjMsMTAgKzE0Njg0LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWAorIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtMTM5ODQsNiArMTQ3NTIsOCBAQCBmaQorIAorIAorIAorKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTE0MTYxLDYgKzE0OTMxLDcgQEAgZmkKKyAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAKKyAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICBjYXNlICRob3N0X29zIGluCisgICBhaXhbNC05XSopCisgICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorQEAgLTE0MTc1LDE1ICsxNDk0NiwyMCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZQorICAgICA7OworICAgcHczMiopCisgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSIkbHRkbGxfY21kcyIKKy0gIDs7CisrICAgIDs7CisgICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87L14uKlsgXV9fbm1fXy9zL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBjbCopIDs7CisrICAgICopCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworICAgKikKKyAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIDs7CisgICBlc2FjCistICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyAkYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQorQEAgLTE0NDQ2LDggKzE1MjIyLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTE0NDc5LDEzICsxNTI1Niw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTQ1NzYsNyArMTU0MTEsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTUwMzUsNiArMTU4NzAsNyBAQCBmaQorICAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisgCisgICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICAgTERDWFg9JExECisgICBMRD0kbHRfc2F2ZV9MRAorICAgR0NDPSRsdF9zYXZlX0dDQworQEAgLTE3ODA3LDEzICsxODY0MywyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3ODI4LDE0ICsxODY3MSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzg2OCwxMiArMTg3MTQsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc5MTIsOCArMTg3NTgsOCBAQCBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZQorIGNvbXBpbGVyX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBHQ0NfQ1hYPSdgJEVDSE8gIiRHQ0NfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzk0MCwxMiArMTg3ODYsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRTRUQgIiRkZWxheV8KKyBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoX0NYWD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aF9DWFg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kc19DWFg9J2AkRUNITyAiJHByZWxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWNfQ1hYPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGhhcmRjb2RlX2FjdGlvbl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3OTgzLDggKzE4ODI5LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNzk5NCwxMiArMTg4NDUsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE4MDE1LDcgKzE4ODY4LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTgwMzcsOCArMTg4ODksOCBAQCBMRF9DWFggXAorIHJlbG9hZF9mbGFnX0NYWCBcCisgY29tcGlsZXJfQ1hYIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAorLWx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggXAorK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCisgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCitAQCAtMTgwNTAsNyArMTg5MDIsNiBAQCBub191bmRlZmluZWRfZmxhZ19DWFggXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAorLWZpeF9zcmNmaWxlX3BhdGhfQ1hYIFwKKyBleGNsdWRlX2V4cHN5bXNfQ1hYIFwKKyBpbmNsdWRlX2V4cHN5bXNfQ1hYIFwKKyBmaWxlX2xpc3Rfc3BlY19DWFggXAorQEAgLTE4MDg0LDYgKzE4OTM1LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xODA5OCw3ICsxODk1MCw4IEBAIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKKyBtb2R1bGVfY21kc19DWFggXAorIG1vZHVsZV9leHBzeW1fY21kc19DWFggXAorIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKKy1wcmVsaW5rX2NtZHNfQ1hYOyBkbworK3ByZWxpbmtfY21kc19DWFggXAorK3Bvc3RsaW5rX2NtZHNfQ1hYOyBkbworICAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorQEAgLTE4ODkxLDcgKzE5NzQ0LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xODk5NCwxOSArMTk4NDgsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTkwMzYsNiArMTk5MTMsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTkwNDUsNiArMTk5MjgsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE5MTU5LDEyICsyMDA0NSwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xOTI1MSw5ICsyMDEzNyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE5MjY5LDYgKzIwMTUyLDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xOTMxNSwyMTAgKzIwMjAxLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK0BAIC0xOTU0NiwxMiArMjAzOTEsMTIgQEAgd2l0aF9nY2M9JEdDQ19DWFgKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCisgCitAQCAtMTk2MzgsOSArMjA0ODMsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGhfQ1hYCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisgCitAQCAtMTk2NTYsNiArMjA0OTgsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX0NYWAorIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzX0NYWAorKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlY19DWFgKKyAKK2RpZmYgLS1naXQgYS9saWJ0b29sLm00IGIvbGlidG9vbC5tNAoraW5kZXggNzk3NDY4Zi4uMDJiMTViMyAxMDA2NDQKKy0tLSBhL2xpYnRvb2wubTQKKysrKyBiL2xpYnRvb2wubTQKK0BAIC0xLDcgKzEsOCBAQAorICMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworQEAgLTEwLDcgKzExLDggQEAKKyAKKyBtNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTM3LDcgKzM5LDcgQEAgbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIF0pCisgCistIyBzZXJpYWwgNTYgTFRfSU5JVAorKyMgc2VyaWFsIDU3IExUX0lOSVQKKyAKKyAKKyAjIExUX1BSRVJFUShWRVJTSU9OKQorQEAgLTkyLDcgKzk0LDggQEAgX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyBBQ19TVUJTVChMSUJUT09MKWRubAorIAorIF9MVF9TRVRVUAorQEAgLTE2NiwxMCArMTY5LDEzIEBAIF9MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKKyBkbmwKKyBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorK200X3JlcXVpcmUoW19MVF9XSVRIX1NZU1JPT1RdKWRubAorIAorIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKKyAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCitAQCAtMTk5LDcgKzIwNSw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtNjMyLDcgKzYzOCw3IEBAIG00X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKKyBtNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorIGNvbmZpZ3VyZWQgYnkgJFswXSwgZ2VuZXJhdGVkIGJ5IG00X1BBQ0tBR0VfU1RSSU5HLgorIAorLUNvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisgCitAQCAtNzQ2LDE1ICs3NTIsMTIgQEAgX0xUX0VPRgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKyAKKy0gIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworKyAgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworIAorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgXSwKK0BAIC05ODAsNiArOTgzLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JkFTX01FU1NBR0VfTE9HX0ZECisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtMTA2OSwzMCArMTA3NCw0MSBAQCBtNF9kZWZ1bihbX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVNdLAorICAgZmkKKyBdKQorIAorLSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbVEFHTkFNRV0pCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisgIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisgIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisgIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisgIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworICMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCisrIyBTdG9yZSB0aGUgcmVzdWx0cyBmcm9tIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGZvciBlYWNoIFRBR05BTUUuCisrIyBBbGxvdyB0byBvdmVycmlkZSB0aGVtIGZvciBhbGwgdGFncyB0aHJvdWdoIGx0X2N2X2FpeF9saWJwYXRoLgorIG00X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCisgW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCistQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmldLFtdKQorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorK2lmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAorKyAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLFsKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nWworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9XScKKysgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpXSxbXSkKKysgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKysgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCisrICBmaQorKyAgXSkKKysgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQorK2ZpCisgXSkjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisgCisgCitAQCAtMTExNyw3ICsxMTMzLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTExNjEsNiArMTE3NywzOSBAQCBfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCisgXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisgCisgCisrIyBfTFRfV0lUSF9TWVNST09UCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAorK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKKytBQ19BUkdfV0lUSChbbGlidG9vbC1zeXNyb290XSwKKytbICAtLXdpdGgtbGlidG9vbC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuXSwKKytbXSwgW3dpdGhfbGlidG9vbF9zeXNyb290PW5vXSkKKysKKytkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCisrZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgQUNfTVNHX1JFU1VMVChbJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH1dKQorKyAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCisrICAgOzsKKytlc2FjCisrCisrIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKKytfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKKytbZGVwZW5kZW50IGxpYnJhcmllcywgYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5dKV0pCisrCisgIyBfTFRfRU5BQkxFX0xPQ0sKKyAjIC0tLS0tLS0tLS0tLS0tLQorIG00X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorQEAgLTEzMjAsMTQgKzEzNjksNDcgQEAgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgXSkjIF9MVF9FTkFCTEVfTE9DSworIAorIAorKyMgX0xUX1BST0dfQVIKKysjIC0tLS0tLS0tLS0tCisrbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKKytbQUNfQ0hFQ0tfVE9PTFMoQVIsIFthcl0sIGZhbHNlKQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorK19MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorK19MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0sIFtGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZV0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0XSwgW2x0X2N2X2FyX2F0X2ZpbGVdLAorKyAgW2x0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKKysgICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCisrICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysgICAgIF0pCisrICBdKQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorK19MVF9ERUNMKFtdLCBbYXJjaGl2ZXJfbGlzdF9zcGVjXSwgWzFdLAorKyAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCisrXSkjIF9MVF9QUk9HX0FSCisrCisrCisgIyBfTFRfQ01EX09MRF9BUkNISVZFCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisgbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorLVtBQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CistX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCistX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSkKKytbX0xUX1BST0dfQVIKKyAKKyBBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKKyB0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK0BAIC0xNjIzLDcgKzE3MDUsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy1bI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisrWyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTY2NywxMCArMTc0OSwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTIyMTAsOCArMjI5Miw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0yMjQ0LDEzICsyMzI3LDcxIEBAIG00X2lmKFskMV0sIFtdLFsKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW1thLXpBLVpdXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMjM0Miw3ICsyNDgzLDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTI5NTAsNiArMzA5MSwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtMzAxNiw3ICszMTYyLDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTMxNjcsNiArMzMxNCwyMSBAQCB0cGYqKQorICAgOzsKKyBlc2FjCisgXSkKKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bW1wxXV1cL1tbXDFdXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC0zMTc0LDcgKzMzMzYsMTEgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKKyBfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAorLSAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyJdKQorKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisrX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2dsb2JdLCBbMV0sCisrICAgIFtIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisrX0xUX0RFQ0woW10sIFt3YW50X25vY2FzZWdsb2JdLCBbMV0sCisrICAgIFtGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorIF0pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisgCisgCitAQCAtMzI3Nyw2ICszNDQzLDY3IEBAIGRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKKyBkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKKyBkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKyAKKysjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgaG93IHRvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkKKysjIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxpbmsgbGlicmFyeS4KKysjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCisrbTRfZGVmdW4oW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSwKKytbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorK200X3JlcXVpcmUoW19MVF9ERUNMX0RMTFRPT0xdKQorK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzXSwKKytsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKKytbbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrXSkKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrX0xUX0RFQ0woW10sIFtzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZF0sIFsxXSwKKysgICAgW0NvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXNdKQorK10pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorKworKworKyMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgbG9jYXRlIHRoZSBtYW5pZmVzdCB0b29sCisrbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAorK1tBQ19DSEVDS19UT09MKE1BTklGRVNUX1RPT0wsIG10LCA6KQorK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisrQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAorKyAgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqXSkKKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKytfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKKytdKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorKworIAorICMgTFRfTElCX00KKyAjIC0tLS0tLS0tCitAQCAtMzQwMyw4ICszNjMwLDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC0zNDQwLDYgKzM2NjcsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtMzQ3Myw2ICszNzAxLDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTM0ODQsNyArMzcyNCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC0zNTEwLDE1ICszNzUwLDE1IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKKyAJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorIAlmaQorQEAgLTM1NTEsNiArMzc5MSwxMyBAQCBlbHNlCisgICBBQ19NU0dfUkVTVUxUKG9rKQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tbQF1dRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKK0BAIC0zNTYxLDYgKzM4MDgsOCBAQCBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWRdKQorK19MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCisrICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCisgXSkgIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisgCisgCitAQCAtMzU3Miw3ICszODIxLDYgQEAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CisgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KKyAKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKKyBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KK0BAIC0zNjc4LDYgKzM5MjYsMTIgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJICA7OworIAllc2FjCisgCTs7CisrICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKysJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorKwltNF9pZihbJDFdLCBbR0NKXSwgW10sCisrCSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisrCTs7CisgICAgICAgZGd1eCopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgCSAgZWMrKyopCitAQCAtMzgzMCw3ICs0MDg0LDcgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJOzsKKyAgICAgICBzb2xhcmlzKikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0JICBDQyopCisrCSAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCitAQCAtNDA1Myw2ICs0MzA3LDEyIEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC00MTE1LDcgKzQzNzUsNyBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworQEAgLTQxNzIsOSArNDQzMiwxMSBAQCBjYXNlICRob3N0X29zIGluCisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorICAgICA7OworIGVzYWMKKy1BQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKKy1fTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKy0JW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10sCisrICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSwKKysgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCisrX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTQxOTMsNiArNDQ1NSw4IEBAIGZpCisgX0xUX1RBR0RFQ0woW3BpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfcGljXSwgWzFdLAorIAlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKyAKKytfTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKysJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTQyMTMsNiArNDQ3Nyw3IEBAIF9MVF9UQUdERUNMKFtsaW5rX3N0YXRpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfc3RhdGljXSwgWzFdLAorIG00X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCisgW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorIEFDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQEAgLTQyMjEsNiArNDQ4Niw3IEBAIG00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgYWl4W1s0LTldXSopCisgICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorQEAgLTQyMzUsMTUgKzQ1MDEsMjAgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgICAgOzsKKyAgIHB3MzIqKQorICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCistICA7OworKyAgICA7OworICAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKy0gICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87L14uKltbIF1dX19ubV9fL3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgY2wqKSA7OworKyAgICAqKQorKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorKyAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKyAgICopCisgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICA7OworICAgZXNhYworLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgXSwgWworICAgcnVucGF0aF92YXI9CisgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitAQCAtNDQxMSw3ICs0NjgyLDggQEAgX0xUX0VPRgorICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKy0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtNDQ1OSw3ICs0NzMxLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtNDUxMCwxMiArNDc4MiwxMiBAQCBfTFRfRU9GCisgCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC00NTI5LDggKzQ4MDEsOCBAQCBfTFRfRU9GCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC00NTQ4LDggKzQ4MjAsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgZmkKK0BAIC00NTk1LDggKzQ4NjcsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgZmkKK0BAIC00NzI2LDcgKzQ5OTgsNyBAQCBfTFRfRU9GCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgZWxzZQorQEAgLTQ3MzcsNyArNTAwOSw3IEBAIF9MVF9FT0YKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAJIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisgCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorQEAgLTQ3ODEsMjAgKzUwNTMsNjMgQEAgX0xUX0VPRgorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCistICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIF9MVF9UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCV9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisrCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKwlfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworKwlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtNDgyOCw3ICs1MTQzLDcgQEAgX0xUX0VPRgorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCitAQCAtNDgzNiw3ICs1MTUxLDcgQEAgX0xUX0VPRgorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTQ4NTIsNyArNTE2Nyw3IEBAIF9MVF9FT0YKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtNDg3NiwxMCArNTE5MSwxMCBAQCBfTFRfRU9GCisgCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTQ5MjYsMTYgKzUyNDEsMzEgQEAgX0xUX0VPRgorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBBQ19MSU5LX0lGRUxTRShpbnQgZm9vKHZvaWQpIHt9LAorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLSAgICAgICAgKQorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2xdLAorKwkgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbF0sCisrCSAgW3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgQUNfTElOS19JRkVMU0UoCisrCSAgICAgW0FDX0xBTkdfU09VUkNFKAorKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKysJCQkgICAgICBbQysrXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCisrCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWworKyAgICAgIHN1YnJvdXRpbmUgZm9vCisrICAgICAgZW5kXV0sCisrCQkJICAgICAgW0ZvcnRyYW5dLCBbWworKyAgICAgIHN1YnJvdXRpbmUgZm9vCisrICAgICAgZW5kXV0pXSldLAorKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKKysJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtNTAyMCw3ICs1MzUwLDcgQEAgX0xUX0VPRgorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtNTAzOSw5ICs1MzY5LDkgQEAgX0xUX0VPRgorICAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtNTMxMyw4ICs1NjQzLDYgQEAgX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgICB0byBydW50aW1lIHBhdGggbGlzdF0pCisgX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKKy1fTFRfVEFHREVDTChbXSwgW2ZpeF9zcmNmaWxlX3BhdGhdLCBbMV0sCistICAgIFtGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXJdKQorIF9MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgICBbU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkXSkKKyBfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCitAQCAtNTMyNSw2ICs1NjUzLDggQEAgX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorIF9MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAorICAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKysgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXNdKQorIF9MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorIGRubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorQEAgLTU0MjYsNiArNTc1Niw3IEBAIENDPSIkbHRfc2F2ZV9DQyIKKyBtNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCisgW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKKyBpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCitAQCAtNTQ4Nyw2ICs1ODE4LDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAKKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSRDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgbHRfc2F2ZV9MRD0kTEQKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgIEdDQz0kR1hYCitAQCAtNTUwNCw2ICs1ODM2LDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIGZpCisgICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICAgQ0M9JHtDWFgtImMrKyJ9CisrICBDRkxBR1M9JENYWEZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK0BAIC01NTI1LDggKzU4NTgsOCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCisgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworQEAgLTU2NjcsNyArNjAwMCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAgIyBleGVjdXRhYmxlLgorLSAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAKKyAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtNTY3OSw3ICs2MDEyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgZWxzZQorIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KK0BAIC01NzIxLDI5ICs2MDU0LDc1IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICA7OworIAorICAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKy0gICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCistICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKy0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCistICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKy0gICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKysJLGNsKiB8IG5vLGNsKikKKysJICAjIE5hdGl2ZSBNU1ZDCisrCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisrCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJICBsaWJleHQ9bGliCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGVsc2UKKysJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBmaX4KKysJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICAgIGxpbmtuYW1lcz0nCisrCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisrCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCSAgIyBEb24ndCB1c2UgcmFubGliCisrCSAgX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAgICopCisrCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkJOzsKKysJICAgIGVzYWN+CisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgICBmaScKKysJICA7OworKwkqKQorKwkgICMgZysrCisrCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKysJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisrCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisrCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCisrCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorKwkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBlbHNlCisrCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZml+CisrCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgZWxzZQorKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworKwkgIGZpCisrCSAgOzsKKysJZXNhYworKwk7OworICAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAJOzsKK0BAIC01ODE4LDcgKzYxOTcsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworQEAgLTU4ODksMTAgKzYyNjgsMTAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgaWE2NCopCistCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgICopCistCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgZXNhYworIAkgICAgICBmaQorQEAgLTU5MzMsOSArNjMxMiw5IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworQEAgLTYwMDUsMjAgKzYzODQsMjAgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKyAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCitAQCAtNjIxMyw3ICs2NTkyLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC02MjU5LDcgKzY2MzgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAorICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisgCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCitAQCAtNjMwMCw5ICs2Njc5LDkgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorIAkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKyAJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworIAkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAKKyAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCitAQCAtNjQzMSw2ICs2ODEwLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorIAorICAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgIExEQ1hYPSRMRAorICAgTEQ9JGx0X3NhdmVfTEQKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKK0BAIC02NDQ1LDYgKzY4MjUsMjkgQEAgQUNfTEFOR19QT1AKKyBdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworIAorIAorKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgZnVuY19zdHJpcG5hbWVfY25mIHByZWZpeCBzdWZmaXggbmFtZQorKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisrIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKysjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKysjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisrIworKyMgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIChub24tWFNJKSB2ZXJzaW9uIG9mIGZ1bmNfc3RyaXBuYW1lLAorKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorKyMgcmF0aGVyIHRoYW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorK200X2RlZnVuKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSxbZG5sCisrQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKKytBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCisrZnVuY19zdHJpcG5hbWVfY25mICgpCisreworKyAgY2FzZSAkezJ9IGluCisrICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgZXNhYworK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKKytdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorKworICMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCitAQCAtNjQ1Myw2ICs2ODU2LDcgQEAgQUNfTEFOR19QT1AKKyAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKyBtNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCisgW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorK0FDX1JFUVVJUkUoW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdKWRubAorICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CisgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9CitAQCAtNjUwMyw2ICs2OTA3LDEzIEBAIHB1YmxpYyBjbGFzcyBmb28geworIH07CisgX0xUX0VPRgorIF0pCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrZXNhYworKworIGRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyBkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCitAQCAtNjUxNCw3ICs2OTI1LDcgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKyAKKyAgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKy0gICAgY2FzZSAkcCBpbgorKyAgICBjYXNlICR7cHJldn0ke3B9IGluCisgCisgICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KK0BAIC02NTIzLDEzICs2OTM0LDIyIEBAIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisgCSBwcmV2PSRwCisgCSBjb250aW51ZQorLSAgICAgICBlbHNlCistCSBwcmV2PQorICAgICAgICBmaQorIAorKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKysgICAgICAgICBjYXNlICRwIGluCisrICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgZXNhYworKyAgICAgICBmaQorKyAgICAgICBjYXNlICRwIGluCisrICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKy0JIGNhc2UgJHAgaW4KKy0JIC1MKiB8IC1SKikKKysJIGNhc2UgJHtwcmV2fSBpbgorKwkgLUwgfCAtUikKKyAJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisgCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorIAkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KK0BAIC02NTQ5LDggKzY5NjksMTAgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisgCSBmaQorICAgICAgICBmaQorKyAgICAgICBwcmV2PQorICAgICAgICA7OworIAorKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAgKi4kb2JqZXh0KQorICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCitAQCAtNjU4Niw2ICs3MDA4LDcgQEAgZWxzZQorIGZpCisgCisgJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKyAKKyAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorIG00X2lmKFskMV0sIFtDWFhdLAorQEAgLTY2MjIsNyArNzA0NSw3IEBAIGxpbnV4KikKKyAKKyBzb2xhcmlzKikKKyAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICBDQyopCisrICBDQyogfCBzdW5DQyopCisgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworQEAgLTY3MzUsNyArNzE1OCw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgIENDPSR7Rjc3LSJmNzcifQorKyAgQ0ZMQUdTPSRGRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTY3ODksNiArNzIxNCw3IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorIAorICAgR0NDPSRsdF9zYXZlX0dDQworICAgQ0M9IiRsdF9zYXZlX0NDIgorKyAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisgZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKyAKKyBBQ19MQU5HX1BPUAorQEAgLTY4NjUsNyArNzI5MSw5IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0iJENDIgorICAgbHRfc2F2ZV9HQ0M9JEdDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgQ0M9JHtGQy0iZjk1In0KKysgIENGTEFHUz0kRkNGTEFHUworICAgY29tcGlsZXI9JENDCisgICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorIAorQEAgLTY5MjEsNyArNzM0OSw4IEBAIGlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzOyB0aGVuCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKKy0gIENDPSIkbHRfc2F2ZV9DQyIKKysgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworIAorIEFDX0xBTkdfUE9QCitAQCAtNjk1OCwxMCArNzM4NywxMiBAQCBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisgCisgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKy1sdF9zYXZlX0NDPSIkQ0MiCisrbHRfc2F2ZV9DQz0kQ0MKKytsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgbHRfc2F2ZV9HQ0M9JEdDQworIEdDQz15ZXMKKyBDQz0ke0dDSi0iZ2NqIn0KKytDRkxBR1M9JEdDSkZMQUdTCisgY29tcGlsZXI9JENDCisgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorQEAgLTY5OTIsNyArNzQyMyw4IEBAIGZpCisgQUNfTEFOR19SRVNUT1JFCisgCisgR0NDPSRsdF9zYXZlX0dDQworLUNDPSIkbHRfc2F2ZV9DQyIKKytDQz0kbHRfc2F2ZV9DQworK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyBdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworIAorIAorQEAgLTcwMjcsOSArNzQ1OSwxMSBAQCBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisgCisgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyBsdF9zYXZlX0NDPSIkQ0MiCisrbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworIGx0X3NhdmVfR0NDPSRHQ0MKKyBHQ0M9CisgQ0M9JHtSQy0id2luZHJlcyJ9CisrQ0ZMQUdTPQorIGNvbXBpbGVyPSRDQworIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitAQCAtNzA0Miw3ICs3NDc2LDggQEAgZmkKKyAKKyBHQ0M9JGx0X3NhdmVfR0NDCisgQUNfTEFOR19SRVNUT1JFCistQ0M9IiRsdF9zYXZlX0NDIgorK0NDPSRsdF9zYXZlX0NDCisrQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworIF0pIyBfTFRfTEFOR19SQ19DT05GSUcKKyAKKyAKK0BAIC03MTAxLDYgKzc1MzYsMTUgQEAgX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorIEFDX1NVQlNUKFtPQkpEVU1QXSkKKyBdKQorIAorKyMgX0xUX0RFQ0xfRExMVE9PTAorKyMgLS0tLS0tLS0tLS0tLS0tLQorKyMgRW5zdXJlIERMTFRPT0wgdmFyaWFibGUgaXMgc2V0LgorK200X2RlZnVuKFtfTFRfREVDTF9ETExUT09MXSwKKytbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKQorK0FDX1NVQlNUKFtETExUT09MXSkKKytdKQorIAorICMgX0xUX0RFQ0xfU0VECisgIyAtLS0tLS0tLS0tLS0KK0BAIC03MTk0LDggKzc2MzgsOCBAQCBtNF9kZWZ1bihbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSwKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTcyMzQsMjA2ICs3Njc4LDE2MiBAQCBfTFRfREVDTChbTkwyU1BdLCBbbHRfTkwyU1BdLCBbMV0sIFt0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzXSlkbmwKKyBdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisgCisgCistIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLSMgQm91cm5lIGFuZCBYU0kgY29tcGF0aWJsZSB2YXJpYW50cyBvZiBzb21lIHVzZWZ1bCBzaGVsbCBmdW5jdGlvbnMuCistbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCistW2Nhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CisrIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKKysjICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCisrbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAorK1tkbmwgeworK3NlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAorKyQxICgpXAorK3tcCisrbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCisrfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrXSkKKyAKKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyAKKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorKyMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAorKyMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCisrbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAorK1tpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCisrICAgIGNhc2UgJHsxfSBpbgorKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisrICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworKyAgICBlc2FjXSkKKysKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisrICAgIGVzYWMKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisgCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCisrICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKysgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCisgCistZG5sIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUKKy1kbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAorLWRubCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBoZXJlLgorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9CisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQorIAorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKKyAKKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtbXj1dXSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKysgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKysgICAgZXNhY10pCisgCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCisgCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKKyAKKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLltbXi5dXSokLy5sby8nYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQorK2ZpCisgCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJFtAXSJgCistfQorK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKKyAKKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJFsxXSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKytkbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKKysgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQorIAorLV9MVF9FT0YKKy1lc2FjCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorIAorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCisrZmkKKytdKQorIAorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkWzFdKz1cJFsyXSIKKy19CistX0xUX0VPRgorKyMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CisrIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCisrIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCisrbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKKytbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCisrQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQorK0FDX0NBQ0hFX1ZBTChsdF9jdl90b19ob3N0X2ZpbGVfY21kLAorK1tjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiRbMV09XCQkWzFdXCRbMl0iCistfQorLQorLV9MVF9FT0YKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKy0gIGVzYWMKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKytdKQorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKytBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCisrX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCisrICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKWRubAorKworK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCisrQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQsCisrWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworIF0pCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKKytfTFRfREVDTChbdG9fdG9vbF9maWxlX2NtZF0sIFtsdF9jdl90b190b29sX2ZpbGVfY21kXSwKKysgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKKytdKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDk1MDNlYzguLjcwZTg1NmUgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTEsMTAgKzEsOSBAQAorLSMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCisgCistIyBsaWJ0b29sIChHTlUgbGlidG9vbCAxLjMxMzQgMjAwOS0xMS0yOSkgMi4yLjdhCisrIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40CisgIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIAorICMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAorLSMgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworICMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCitAQCAtMzgsNyArMzcsNiBAQAorICMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyAjICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKy0jICAgICAgIC0tbm8tZmluaXNoICAgICAgICAgIGxldCBpbnN0YWxsIG1vZGUgYXZvaWQgZmluaXNoIGNvbW1hbmRzCisgIyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCisgIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAorQEAgLTcxLDE3ICs2OSwxOSBAQAorICMgICAgICAgICBjb21waWxlcjoJCSRMVENDCisgIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisgIyAgICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCistIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKKysjICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wpIDIuNAorICMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KKyAjICAgICAgICAgYXV0b2NvbmY6CSRhdXRvY29uZl92ZXJzaW9uCisgIworICMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorKyMgR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KKysjIEdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgorIAorIFBST0dSQU09bGlidG9vbAorIFBBQ0tBR0U9bGlidG9vbAorLVZFUlNJT049Mi4yLjdhCistVElNRVNUQU1QPSIgMS4zMTM0IDIwMDktMTEtMjkiCistcGFja2FnZV9yZXZpc2lvbj0xLjMxMzQKKytWRVJTSU9OPTIuNAorK1RJTUVTVEFNUD0iIgorK3BhY2thZ2VfcmV2aXNpb249MS4zMjkzCisgCisgIyBCZSBCb3VybmUgY29tcGF0aWJsZQorIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorQEAgLTEwNiw5ICsxMDYsNiBAQCBfTFRFQ0hPX0VPRicKKyB9CisgCisgIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KKy0jIE9ubHkgc2V0IExBTkcgYW5kIExDX0FMTCB0byBDIGlmIGFscmVhZHkgc2V0LgorLSMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCistIyBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgorIGx0X3VzZXJfbG9jYWxlPQorIGx0X3NhZmVfbG9jYWxlPQorIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworQEAgLTEyMSwxNSArMTE4LDEzIEBAIGRvCisgCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorIAlmaSIKKyBkb25lCisrTENfQUxMPUMKKytMQU5HVUFHRT1DCisrZXhwb3J0IExBTkdVQUdFIExDX0FMTAorIAorICRsdF91bnNldCBDRFBBVEgKKyAKKyAKKy0KKy0KKy0KKy0KKy0KKyAjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyAjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorICMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCitAQCAtMTQwLDcgKzEzNSw3IEBAIHByb2dwYXRoPSIkMCIKKyAKKyAKKyA6ICR7Q1A9ImNwIC1mIn0KKy06ICR7RUNITz0kYXNfZWNob30KKyt0ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KKyA6ICR7RUdSRVA9Ii9iaW4vZ3JlcCAtRSJ9CisgOiAke0ZHUkVQPSIvYmluL2dyZXAgLUYifQorIDogJHtHUkVQPSIvYmluL2dyZXAifQorQEAgLTE0OSw3ICsxNDQsNyBAQCBwcm9ncGF0aD0iJDAiCisgOiAke01LRElSPSJta2RpciJ9CisgOiAke01WPSJtdiAtZiJ9CisgOiAke1JNPSJybSAtZiJ9CistOiAke1NFRD0iL21vdW50L2VuZG9yL3dpbGRlbmh1L2xvY2FsLXg4Nl82NC9iaW4vc2VkIn0KKys6ICR7U0VEPSIvYmluL3NlZCJ9CisgOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9CisgOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisgCitAQCAtMTY5LDYgKzE2NCwyNyBAQCBJRlM9IiAJJGx0X25sIgorIGRpcm5hbWU9InMsL1teL10qJCwsIgorIGJhc2VuYW1lPSJzLF4uKi8sLCIKKyAKKysjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKysjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisrIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisrZnVuY19kaXJuYW1lICgpCisreworKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCisrICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKysgICAgZmkKKyt9ICMgZnVuY19kaXJuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19iYXNlbmFtZSBmaWxlCisrZnVuY19iYXNlbmFtZSAoKQorK3sKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCisrfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisgIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorICMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyAjIGNhbGw6CitAQCAtMTgzLDE3ICsxOTksMzEgQEAgYmFzZW5hbWU9InMsXi4qLywsIgorICMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKyB7CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorLX0KKysgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKysgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAorKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisrICAgIGVsc2UKKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisrICAgIGZpCisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAorK30gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisrIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKysjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKysjIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCisrZnVuY19zdHJpcG5hbWUgKCkKKyt7CisrICAgIGNhc2UgJHsyfSBpbgorKyAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworKyAgICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorIAorLSMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLgorIAorICMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KKyBwYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKK0BAIC0zNzYsNiArNDA2LDE1IEBAIHNlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisgIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCisgZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworIAorKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCisrIyBzdHJpbmcgbGl0ZXJhbGx5LgorK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJworKworKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCisrIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKKysjIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KKytsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisrCisgIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKyAjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisgIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCitAQCAtNDA0LDcgKzQ0Myw3IEBAIG9wdF93YXJuaW5nPToKKyAjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KKyBmdW5jX2VjaG8gKCkKKyB7CistICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICQqIgorKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSQqIgorIH0KKyAKKyAjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KK0BAIC00MzAsMTQgKzQ2OSwxNCBAQCBmdW5jX2VjaG9fYWxsICgpCisgIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorIGZ1bmNfZXJyb3IgKCkKKyB7CistICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgorKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSIkezErIiRAIn0gMT4mMgorIH0KKyAKKyAjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KKyBmdW5jX3dhcm5pbmcgKCkKKyB7CistICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiB3YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKysgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9d2FybmluZzogIiR7MSsiJEAifSAxPiYyCisgCisgICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgIDoKK0BAIC02NTYsMTkgKzY5NSwzNSBAQCBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKKyAgICAgZmkKKyB9CisgCistCistCisrIyBmdW5jX3RyX3NoCisrIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KKysjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKysjIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAorKyMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCisrZnVuY190cl9zaCAoKQorK3sKKysgIGNhc2UgJDEgaW4KKysgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKKysgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCisrICAgIDs7CisrICAqICkKKysgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKysgICAgOzsKKysgIGVzYWMKKyt9CisgCisgCisgIyBmdW5jX3ZlcnNpb24KKyAjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKyBmdW5jX3ZlcnNpb24gKCkKKyB7CisrICAgICRvcHRfZGVidWcKKysKKyAgICAgJFNFRCAtbiAnLyhDKS8hYiBnbworIAk6bW9yZQorIAkvXC4vIXsKKyAJICBOCistCSAgcy9cbiMgLy8KKysJICBzL1xuIyAvIC8KKyAJICBiIG1vcmUKKyAJfQorIAk6Z28KK0BAIC02ODUsNyArNzQwLDkgQEAgZnVuY192ZXJzaW9uICgpCisgIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCisgZnVuY191c2FnZSAoKQorIHsKKy0gICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLWgvIHsKKysgICAgJG9wdF9kZWJ1ZworKworKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8geworICAgICAgICAgcy9eIyAvLworIAlzL14jICokLy8KKyAJcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLworQEAgLTcwMSw3ICs3NTgsMTAgQEAgZnVuY191c2FnZSAoKQorICMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KKyBmdW5jX2hlbHAgKCkKKyB7CisrICAgICRvcHRfZGVidWcKKysKKyAgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKysJOnByaW50CisgICAgICAgICBzL14jIC8vCisgCXMvXiMgKiQvLworIAlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCitAQCAtNzE0LDcgKzc3NCwxMSBAQCBmdW5jX2hlbHAgKCkKKyAJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisgCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworIAlwCistICAgICB9JyA8ICIkcHJvZ3BhdGgiCisrCWQKKysgICAgIH0KKysgICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKKysgICAgIC9eIyBHZW5lcmFsIGhlbHAgdXNpbmcvYiBwcmludAorKyAgICAgJyA8ICIkcHJvZ3BhdGgiCisgICAgIHJldD0kPworICAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KKyAgICAgICBleGl0ICRyZXQKK0BAIC03MjYsMTIgKzc5MCwzOSBAQCBmdW5jX2hlbHAgKCkKKyAjIGV4aXRfY21kLgorIGZ1bmNfbWlzc2luZ19hcmcgKCkKKyB7CistICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxIgorKyAgICAkb3B0X2RlYnVnCisrCisrICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICAgZXhpdF9jbWQ9ZXhpdAorIH0KKyAKKy1leGl0X2NtZD06CisgCisrIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBzaG9ydG9wdAorKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBTSE9SVE9QVCBhZnRlciB0aGUgMm5kIGNoYXJhY3Rlci4KKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQorK3sKKysgICAgbXlfc2VkX3Nob3J0X29wdD0nMXMvXlwoLi5cKS4qJC9cMS87cScKKysgICAgbXlfc2VkX3Nob3J0X3Jlc3Q9JzFzL14uLlwoLipcKSQvXDEvO3EnCisrCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X29wdCJgCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfcmVzdCJgCisrfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0CisrIyBTZXQgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyBzaGVsbAorKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBMT05HT1BUIGF0IHRoZSBgPScgc2lnbi4KKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpCisreworKyAgICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKKysgICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKKysKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCisrfSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrZXhpdF9jbWQ9OgorIAorIAorIAorQEAgLTc0MSwyNiArODMyLDY0IEBAIG1hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKKyBtYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXMuCistIyAkbW9kZSBpcyB1bnNldAorIG5vbm9wdD0KKy1leGVjdXRlX2RsZmlsZXM9CisgcHJlc2VydmVfYXJncz0KKyBsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCisgbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorIGV4dHJhY3RlZF9hcmNoaXZlcz0KKyBleHRyYWN0ZWRfc2VyaWFsPTAKKyAKKy1vcHRfZHJ5X3J1bj1mYWxzZQorLW9wdF9maW5pc2g9OgorLW9wdF9kdXBsaWNhdGVfZGVwcz1mYWxzZQorLW9wdF9zaWxlbnQ9ZmFsc2UKKy1vcHRfZGVidWc9OgorLQorICMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorICMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworICMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KKyBleGVjX2NtZD0KKyAKKysjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorK2Z1bmNfYXBwZW5kICgpCisreworKyAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgorK30gIyBmdW5jX2FwcGVuZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysjIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKKysjIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAorKyMgYnkgYSBzcGFjZS4KKytmdW5jX2FwcGVuZF9xdW90ZWQgKCkKKyt7CisrICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCisrICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyt9ICMgZnVuY19hcHBlbmRfcXVvdGVkIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKytmdW5jX2FyaXRoICgpCisreworKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJHtAfSJgCisrfSAjIGZ1bmNfYXJpdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2xlbiBzdHJpbmcKKysjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCisrZnVuY19sZW4gKCkKKyt7CisrICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorK30gIyBmdW5jX2xlbiBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfbG8ybyBvYmplY3QKKytmdW5jX2xvMm8gKCkKKyt7CisrICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKyt9ICMgZnVuY19sbzJvIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCisrZnVuY194Zm9ybSAoKQorK3sKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCisrfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisgIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCisgIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorICMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitAQCAtODUwLDEzMCArOTc5LDIwNCBAQCBmdW5jX2VuYWJsZV90YWcgKCkKKyAgIGVzYWMKKyB9CisgCistIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4KKy0jIHRoZSBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgbGlidG9vbCAtLXZlcnNpb24nIGhhcHBlbiBxdWlja2x5LgorKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisrIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorKyMgcmVsZWFzZSBvZiBsaWJ0b29sLgorK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQorIHsKKysgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCisrJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCisrJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKytfTFRfRU9GCisrICAgICAgZWxzZQorKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCisrJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgorKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCisrX0xUX0VPRgorKyAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCisrJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorK19MVF9FT0YKKysgICAgZmkKKyAKKy0gICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorLSAgY2FzZSAkMSBpbgorLSAgY2xlYW58Y2xlYXxjbGV8Y2wpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgbGlua3xsaW58bGl8bCkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGVzYWMKKysgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorKyAgZmkKKyt9CisrCisrCisrIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisrY2FzZSAkMSBpbgorK2NsZWFufGNsZWF8Y2xlfGNsKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2V4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2xpbmt8bGlufGxpfGwpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytlc2FjCisgCistICAjIFBhcnNlIG5vbi1tb2RlIHNwZWNpZmljIGFyZ3VtZW50czoKKy0gIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKysKKysKKysjIE9wdGlvbiBkZWZhdWx0czoKKytvcHRfZGVidWc9OgorK29wdF9kcnlfcnVuPWZhbHNlCisrb3B0X2NvbmZpZz1mYWxzZQorK29wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQorK29wdF9mZWF0dXJlcz1mYWxzZQorK29wdF9maW5pc2g9ZmFsc2UKKytvcHRfaGVscD1mYWxzZQorK29wdF9oZWxwX2FsbD1mYWxzZQorK29wdF9zaWxlbnQ9OgorK29wdF92ZXJib3NlPToKKytvcHRfc2lsZW50PWZhbHNlCisrb3B0X3ZlcmJvc2U9ZmFsc2UKKysKKysKKysjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiB0aGUKKysjIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGAtLXZlcnNpb24nIGhhcHBlbiBhcyBxdWlja2x5IGFzIHdlIGNhbi4KKyt7CisrICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisrICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgICBvcHQ9IiQxIgorICAgICBzaGlmdAorLQorICAgICBjYXNlICRvcHQgaW4KKy0gICAgICAtLWNvbmZpZykJCWZ1bmNfY29uZmlnCQkJCQk7OworLQorLSAgICAgIC0tZGVidWcpCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKyAgICAgIC0tZGVidWd8LXgpCW9wdF9kZWJ1Zz0nc2V0IC14JworIAkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKy0JCQlvcHRfZGVidWc9J3NldCAteCcKKyAJCQkkb3B0X2RlYnVnCisgCQkJOzsKKy0KKy0gICAgICAtZGxvcGVuKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCistCQkJZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICQxIgorLQkJCXNoaWZ0CisrICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQorKwkJCW9wdF9kcnlfcnVuPToKKyAJCQk7OworLQorLSAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OworLSAgICAgIC0tZmVhdHVyZXMpICAgICAgIGZ1bmNfZmVhdHVyZXMJCQkJCTs7CistICAgICAgLS1maW5pc2gpCQltb2RlPSJmaW5pc2giCQkJCQk7OworLSAgICAgIC0tbm8tZmluaXNoKQlvcHRfZmluaXNoPWZhbHNlCQkJCTs7CistCistICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCistCQkJY2FzZSAkMSBpbgorLQkJCSAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKy0JCQkgIGNsZWFuKQk7OworLQkJCSAgY29tcGlsZSkJOzsKKy0JCQkgIGV4ZWN1dGUpCTs7CistCQkJICBmaW5pc2gpCTs7CistCQkJICBpbnN0YWxsKQk7OworLQkJCSAgbGluaykJCTs7CistCQkJICByZWxpbmspCTs7CistCQkJICB1bmluc3RhbGwpCTs7CistCistCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKy0JCQkgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCistCQkJICAgICBleGl0X2NtZD1leGl0CistCQkJICAgICBicmVhaworLQkJCSAgICAgOzsKKy0JCSAgICAgICAgZXNhYworLQorLQkJCW1vZGU9IiQxIgorKyAgICAgIC0tY29uZmlnKQorKwkJCW9wdF9jb25maWc9OgorK2Z1bmNfY29uZmlnCisrCQkJOzsKKysgICAgICAtLWRsb3BlbnwtZGxvcGVuKQorKwkJCW9wdGFyZz0iJDEiCisrCQkJb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCisrfSRvcHRhcmciCisgCQkJc2hpZnQKKyAJCQk7OworLQorICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCistCQkJb3B0X2R1cGxpY2F0ZV9kZXBzPToJCQkJOzsKKy0KKy0gICAgICAtLXF1aWV0fC0tc2lsZW50KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorLQkJCW9wdF9zaWxlbnQ9OgorLQkJCW9wdF92ZXJib3NlPWZhbHNlCisrCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKKyAJCQk7OworLQorLSAgICAgIC0tbm8tcXVpZXR8LS1uby1zaWxlbnQpCistCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKy0JCQlvcHRfc2lsZW50PWZhbHNlCisrICAgICAgLS1mZWF0dXJlcykKKysJCQlvcHRfZmVhdHVyZXM9OgorK2Z1bmNfZmVhdHVyZXMKKyAJCQk7OworLQorLSAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisrICAgICAgLS1maW5pc2gpCisrCQkJb3B0X2ZpbmlzaD06Cisrc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorKwkJCTs7CisrICAgICAgLS1oZWxwKQorKwkJCW9wdF9oZWxwPToKKysJCQk7OworKyAgICAgIC0taGVscC1hbGwpCisrCQkJb3B0X2hlbHBfYWxsPToKKytvcHRfaGVscD0nOiBoZWxwLWFsbCcKKysJCQk7OworKyAgICAgIC0tbW9kZSkKKysJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF9tb2RlPSIkb3B0YXJnIgorK2Nhc2UgJG9wdGFyZyBpbgorKyAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKysgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisrCisrICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKysgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisrICAgICBleGl0X2NtZD1leGl0CisrICAgICBicmVhaworKyAgICAgOzsKKytlc2FjCisrCQkJc2hpZnQKKysJCQk7OworKyAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCisgCQkJb3B0X3NpbGVudD1mYWxzZQorLQkJCW9wdF92ZXJib3NlPToKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKyAJCQk7OworLQorLSAgICAgIC0tbm8tdmVyYm9zZSkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKysgICAgICAtLW5vLXZlcmJvc2UpCisgCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKyAJCQk7OworLQorLSAgICAgIC0tdGFnKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCistCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCAkMSIKKy0JCQlmdW5jX2VuYWJsZV90YWcgIiQxIgkjIHRhZ25hbWUgaXMgc2V0IGhlcmUKKysgICAgICAtLXNpbGVudHwtLXF1aWV0KQorKwkJCW9wdF9zaWxlbnQ9OgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorKyAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKysJCQk7OworKyAgICAgIC0tdmVyYm9zZXwtdikKKysJCQlvcHRfdmVyYm9zZT06CisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisrb3B0X3NpbGVudD1mYWxzZQorKwkJCTs7CisrICAgICAgLS10YWcpCisrCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisrCQkJb3B0YXJnPSIkMSIKKysJCQlvcHRfdGFnPSIkb3B0YXJnIgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCisrZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgorIAkJCXNoaWZ0CisgCQkJOzsKKyAKKysgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7CisrICAgICAgLS1oZWxwKQkJZnVuY19oZWxwCQkJCTs7CisrICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKKysKKyAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorLSAgICAgIC1kbG9wZW49KnwtLW1vZGU9KnwtLXRhZz0qKQorLQkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgorLQkJCXNldCBkdW1teSAiJGZ1bmNfb3B0X3NwbGl0X29wdCIgIiRmdW5jX29wdF9zcGxpdF9hcmciICR7MSsiJEAifQorKyAgICAgIC0tKj0qKQorKwkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCisrCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIiAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIiAkezErIiRAIn0KKyAJCQlzaGlmdAorIAkJCTs7CisgCistICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQkJOzsKKy0gICAgICAtLWhlbHApCQlvcHRfaGVscD06CQkJCQk7OworLSAgICAgIC0taGVscC1hbGwpCW9wdF9oZWxwPSc6IGhlbHAtYWxsJwkJCQk7OworLSAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCQk7OworLQorLSAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciCTs7CistCistICAgICAgKikJCW5vbm9wdD0iJG9wdCIKKy0JCQlicmVhaworKyAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisrICAgICAgLVw/KnwtaCp8LW4qfC12KikKKysJCQlmdW5jX3NwbGl0X3Nob3J0X29wdCAiJG9wdCIKKysJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorKwkJCXNoaWZ0CisgCQkJOzsKKysKKysgICAgICAtLSkJCWJyZWFrCQkJCQk7OworKyAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciIDs7CisrICAgICAgKikJCXNldCBkdW1teSAiJG9wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgIGVzYWMKKyAgIGRvbmUKKyAKKysgICMgVmFsaWRhdGUgb3B0aW9uczoKKysKKysgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisrICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKysgICAgbm9ub3B0PSIkb3B0IgorKyAgICBzaGlmdAorKyAgZmkKKysKKysgICMgcHJlc2VydmUgLS1kZWJ1ZworKyAgdGVzdCAiJG9wdF9kZWJ1ZyIgPSA6IHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgorIAorICAgY2FzZSAkaG9zdCBpbgorICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqIHwgKnNvbGFyaXMyKiApCitAQCAtOTgxLDgyICsxMTg0LDQ0IEBAIGZ1bmNfZW5hYmxlX3RhZyAoKQorICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgIDs7CisgICAgICopCistICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X2R1cGxpY2F0ZV9kZXBzCisrICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCisgICAgICAgOzsKKyAgIGVzYWMKKyAKKy0gICMgSGF2aW5nIHdhcm5lZCBhYm91dCBhbGwgbWlzLXNwZWNpZmllZCBvcHRpb25zLCBiYWlsIG91dCBpZgorLSAgIyBhbnl0aGluZyB3YXMgd3JvbmcuCistICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorLX0KKysgICRvcHRfaGVscCB8fCB7CisrICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKysgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisgCistIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKy0jIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCistIyByZWxlYXNlIG9mIGxpYnRvb2wuCistZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCisteworLSAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCistICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCistICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCistICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKy0kcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKy0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCistJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorLV9MVF9FT0YKKy0gICAgICBlbHNlCistICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKy0kcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCistJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorLSRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKy1fTFRfRU9GCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCistJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKy0kcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCistX0xUX0VPRgorKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKysgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisgICAgIGZpCisgCistICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKy0gIGZpCistfQorLQorKyAgICAjIERhcndpbiBzdWNrcworKyAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorIAorLSMjIC0tLS0tLS0tLS0tICMjCistIyMgICAgTWFpbi4gICAgIyMKKy0jIyAtLS0tLS0tLS0tLSAjIworLQorLSRvcHRfaGVscCB8fCB7CistICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CistICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKy0KKy0gIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorLSAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCistICBmaQorKyAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorKyAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCAiJG9wdF9tb2RlIiAhPSBleGVjdXRlOyB0aGVuCisrICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorKyAgICAgICRFQ0hPICIkaGVscCIgMT4mMgorKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorKyAgICBmaQorIAorLSAgdGVzdCAteiAiJG1vZGUiICYmIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERS4iCisrICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKysgICAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKysgICAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisrICB9CisgCisgCistICAjIERhcndpbiBzdWNrcworLSAgZXZhbCAic3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiIgorKyAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZAorKyAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKyt9CisgCisgCistICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorLSAgaWYgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgdGVzdCAiJG1vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKy0gICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgorLSAgICAkRUNITyAiJGhlbHAiIDE+JjIKKy0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCistICBmaQorIAorLSAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorLSAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKy0gIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCistfQorIAorKyMjIC0tLS0tLS0tLS0tICMjCisrIyMgICAgTWFpbi4gICAgIyMKKysjIyAtLS0tLS0tLS0tLSAjIworIAorICMgZnVuY19sYWxpYl9wIGZpbGUKKyAjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCitAQCAtMTEyMSwxMiArMTI4Niw5IEBAIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQorICMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCisgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQorIHsKKy0gICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiIKKy0gICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSI7IHRoZW4KKy0JZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorLQlmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorLSAgICBmaQorKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisrICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCisgfQorIAorICMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCitAQCAtMTE0OSw3ICsxMzExLDcgQEAgZnVuY19leGVjdXRlX2NtZHMgKCkKKyAgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JworICAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgIElGUz0kc2F2ZV9pZnMKKy0gICAgICBldmFsICJjbWQ9XCIkY21kXCIiCisrICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICAgZG9uZQorICAgICBJRlM9JHNhdmVfaWZzCitAQCAtMTE3Miw2ICsxMzM0LDM3IEBAIGZ1bmNfc291cmNlICgpCisgfQorIAorIAorKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAorKyMgUmVwbGFjZSBhIGxlYWRpbmcgPSBpbiBQQVRIIHdpdGggYSBzeXNyb290LiAgU3RvcmUgdGhlIHJlc3VsdCBpbnRvCisrIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKytmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQorK3sKKysgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQorKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCisrICA9KikKKysgICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIDs7CisrICBlc2FjCisrfQorKworKyMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAorKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCisrIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgorK2Z1bmNfcmVwbGFjZV9zeXNyb290ICgpCisreworKyAgY2FzZSAiJGx0X3N5c3Jvb3Q6JDEiIGluCisrICA/KjoiJGx0X3N5c3Jvb3QiKikKKysgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCisrICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0iPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrICAgIDs7CisrICAqKQorKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgorKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKKysgICAgOzsKKysgIGVzYWMKKyt9CisrCisgIyBmdW5jX2luZmVyX3RhZyBhcmcKKyAjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyAjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgorQEAgLTExODQsOCArMTM3Nyw3IEBAIGZ1bmNfaW5mZXJfdGFnICgpCisgICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICAgQ0NfcXVvdGVkPQorICAgICAgIGZvciBhcmcgaW4gJENDOyBkbworLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKyAgICAgICBkb25lCisgICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorICAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorQEAgLTEyMDQsOCArMTM5Niw3IEBAIGZ1bmNfaW5mZXJfdGFnICgpCisgCSAgICBDQ19xdW90ZWQ9CisgCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKyAJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorLQkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLQkgICAgICBDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorIAkgICAgZG9uZQorIAkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorIAkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCitAQCAtMTI3NCw2ICsxNDY1LDQ4NiBAQCBFT0YKKyAgICAgfQorIH0KKyAKKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysKKysjIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCisrIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKKysjIGFuZCAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKKysjIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCisrIyBpbiAkYnVpbGQncyAkUEFUSC4KKysjCisrIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKKysjIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKKytmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKKysgICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKKysgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisrICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCisrICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisrICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorKyAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcH0iOyB0aGVuCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKKysgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQorKyAgICBmaQorKyAgZmkKKyt9CisrIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgQVJHCisrIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAorKyMgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhIGNvcnJlY3RseQorKyMgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbSBpbiAkYnVpbGQncworKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCisrIworKyMgQVJHIGlzIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB3aW4zMi4KKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgorKyMgVW5jb252ZXJ0aWJsZSBmaWxlIChkaXJlY3RvcnkpIG5hbWVzIGluIEFSRyBhcmUgc2tpcHBlZDsgaWYgbm8gZGlyZWN0b3J5IG5hbWVzCisrIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCisrZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKKysgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgb2xkSUZTPSRJRlMKKysgICAgSUZTPToKKysgICAgZm9yIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiBpbiAkMTsgZG8KKysgICAgICBJRlM9JG9sZElGUworKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCisrICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IiA7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KKysgICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGRvbmUKKysgICAgSUZTPSRvbGRJRlMKKysgIGZpCisrfQorKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCisrCisrCisrIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgorKyMgV3JhcHBlciBhcm91bmQgY2FsbGluZyB0aGUgY3lncGF0aCBwcm9ncmFtIHZpYSBMVF9DWUdQQVRILiBUaGlzIGlzIHVzZWQgd2hlbgorKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCisrIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKKysjICgyKSwgcmV0dXJucyB0aGUgQ3lnd2luIGZpbGUgbmFtZSBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0CisrIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCisrIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQorKyMgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dCBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluCisrIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisrIworKyMgQVJHUyBhcmUgcGFzc2VkIHRvIGN5Z3BhdGgsIHdpdGggdGhlIGxhc3Qgb25lIGJlaW5nIHRoZSBmaWxlIG5hbWUgb3IgcGF0aCB0bworKyMgYmUgY29udmVydGVkLgorKyMKKysjIFNwZWNpZnkgdGhlIGFic29sdXRlICpuaXggKG9yIHczMikgbmFtZSB0byBjeWdwYXRoIGluIHRoZSBMVF9DWUdQQVRICisrIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KKytmdW5jX2N5Z3BhdGggKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCisrICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCisrICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgorKyAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQorKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisrICAgIGZpCisrICBlbHNlCisrICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisrICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiBcYCRMVF9DWUdQQVRIJyIKKysgIGZpCisrfQorKyNlbmQ6IGZ1bmNfY3lncGF0aAorKworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KKysjIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKysgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKysgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorK30KKysjZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgQVJHMSBBUkcyCisrIyBWZXJpZnkgdGhhdCBBUkcxIChhIGZpbGUgbmFtZSBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisrIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCisrZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiIDsgdGhlbgorKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCisrICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCisrICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorKyAgICAjIEZhbGxiYWNrOgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICisrIyBWZXJpZnkgdGhhdCBGUk9NX1BBVEggKGEgcGF0aCBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0CisrIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgorK2Z1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAteiAiJDQiICYmIHRlc3QgLW4gIiQzIjsgdGhlbgorKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKysgICAgZnVuY19lcnJvciAiICBcYCQzJyIKKysgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisrICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAorKyAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCisrICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KKysgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKKysgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8CisrICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMiCisrICAgIGZpCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjaworKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwIEZST05UUEFUIEJBQ0tQQVQgUkVQTCBPUklHCisrIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAorKyMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgorK2Z1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGNhc2UgJDQgaW4KKysgICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIDs7CisrICBlc2FjCisrICBjYXNlICQ0IGluCisrICAkMiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCAiJDMiCisrICAgIDs7CisrICBlc2FjCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcAorKworKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X2ZpbGVfY21kIEFSRycKKysjCisrIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorKyMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrCisrCisrIyBmdW5jX3RvX2hvc3RfZmlsZSBBUkcKKysjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKysjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX3RvX2hvc3RfZmlsZSAoKQorK3sKKysgICRvcHRfZGVidWcKKysgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKKyt9CisrIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKKysKKysKKysjIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCisrIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCisrIyByZXN1bHQgaW4gZnVuY190b190b29sX2ZpbGVfcmVzdWx0LiAgSWYgdGhlIGNvbnZlcnNpb24gaW4gdXNlIGlzIGxpc3RlZAorKyMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCisrZnVuY190b190b29sX2ZpbGUgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBjYXNlICwkMiwgaW4KKysgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCisrICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCisrICAgICAgOzsKKysgICAgKikKKysgICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCisrICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQKKysgICAgICA7OworKyAgZXNhYworK30KKysjIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKKysjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCisreworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKysjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCisrICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQKKysjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKysjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCisrIyBpbiBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0CisrIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCisrICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrCisrCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfcGF0aF9jbWQgQVJHJworKyMKKysjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisrIyBUaGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrIworKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKKysjIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dAorKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgorKyMKKysjIEFsbCBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBuYW1lZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb246CisrIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCisrIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCisrIyB3aGVyZSwgZm9yIGFueSBnaXZlbiAkYnVpbGQvJGhvc3QgY29tYmluYXRpb24gdGhlICdYX3RvX1knIHZhbHVlIGlzIHRoZQorKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCisrIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorKyMgd2lsbCBicmVhay4KKysKKysKKysjIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisrIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKKysjIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCisrdG9faG9zdF9wYXRoX2NtZD0KKytmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgorKyAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCisrICAgIHRvX2hvc3RfcGF0aF9jbWQ9ImZ1bmNfY29udmVydF9wYXRoXyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fSIKKysgIGZpCisrfQorKworKworKyMgZnVuY190b19ob3N0X3BhdGggQVJHCisrIyBDb252ZXJ0cyB0aGUgcGF0aCBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorKyMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorK2Z1bmNfdG9faG9zdF9wYXRoICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKysgICR0b19ob3N0X3BhdGhfY21kICIkMSIKKyt9CisrIyBlbmQgZnVuY190b19ob3N0X3BhdGgKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX25vb3AgQVJHCisrIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQorK3sKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKKysgICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKKysgICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCisrIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKysjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCisrIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisrICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKysgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorKworKworICMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCisgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyB7CitAQCAtMTMxNCwxMiArMTk4NSwxMiBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQorIAkgIDs7CisgCisgCS1waWUgfCAtZnBpZSB8IC1mUElFKQorLSAgICAgICAgICBwaWVfZmxhZz0iJHBpZV9mbGFnICRhcmciCisrICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCisgCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCistCSAgbGF0ZXI9IiRsYXRlciAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGxhdGVyICIgJGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCitAQCAtMTM0MCwxNSArMjAxMSwxNCBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQorIAkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworIAkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCisgCSAgICBJRlM9IiRzYXZlX2lmcyIKKy0JICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistCSAgICBsYXN0YXJnPSIkbGFzdGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKKyAJICBkb25lCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKyAJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAKKyAJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKy0JICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisrCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAorQEAgLTEzNjQsOCArMjAzNCw3IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorIAorICAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCistICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxhc3RhcmciCistICAgICAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKKyAgICAgZG9uZSAjIGZvciBhcmcKKyAKKyAgICAgY2FzZSAkYXJnX21vZGUgaW4KK0BAIC0xNDk2LDE3ICsyMTY1LDE2IEBAIGNvbXBpbGVyLiIKKyAJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorIAlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgICBmaQorLSAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRvdXRwdXRfb2JqIgorKyAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKKyAgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICAgZmkKKyAKKyAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorLSAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkbG9ja2ZpbGUiCisrICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCisgICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisgCistICAgIGlmIHRlc3QgLW4gIiRmaXhfc3JjZmlsZV9wYXRoIjsgdGhlbgorLSAgICAgIGV2YWwgInNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiIgorLSAgICBmaQorKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisgCitAQCAtMTUyNiw3ICsyMTk0LDcgQEAgY29tcGlsZXIuIgorIAorICAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorIAkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKKy0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCisrCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKKyAgICAgICBmaQorIAorICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKK0BAIC0xNTczLDExICsyMjQxLDExIEBAIGNvbXBpbGVyLiIKKyAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgIGZpCisgICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKy0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKysJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCisgICAgICAgZmkKKyAKKyAgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KKy0gICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCisrICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKKyAgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworIAorQEAgLTE2MjIsMTMgKzIyOTAsMTMgQEAgY29tcGlsZXIuIgorIH0KKyAKKyAkb3B0X2hlbHAgfHwgeworLSAgdGVzdCAiJG1vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KKysgIHRlc3QgIiRvcHRfbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorIH0KKyAKKyBmdW5jX21vZGVfaGVscCAoKQorIHsKKyAgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCistICAgIGNhc2UgJG1vZGUgaW4KKysgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICAiIikKKyAgICAgICAgICMgR2VuZXJpYyBoZWxwIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB1c2FnZSBjb21tZW50cworICAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorQEAgLTE2NTksOCArMjMyNyw4IEBAIFRoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorIAorICAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKy0gIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZGluZyBQSUMgb2JqZWN0cyBvbmx5CistICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKysgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5CisrICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKK0BAIC0xODA0LDcgKzI0NzIsNyBAQCBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgICA7OworIAorICAgICAgICopCistICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisrICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorICAgICAgICAgOzsKKyAgICAgZXNhYworIAorQEAgLTE4MTksMTMgKzI0ODcsMTMgQEAgaWYgJG9wdF9oZWxwOyB0aGVuCisgICBlbHNlCisgICAgIHsKKyAgICAgICBmdW5jX2hlbHAgbm9leGl0CistICAgICAgZm9yIG1vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisgCWZ1bmNfbW9kZV9oZWxwCisgICAgICAgZG9uZQorICAgICB9IHwgc2VkIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworICAgICB7CisgICAgICAgZnVuY19oZWxwIG5vZXhpdAorLSAgICAgIGZvciBtb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKysgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworIAllY2hvCisgCWZ1bmNfbW9kZV9oZWxwCisgICAgICAgZG9uZQorQEAgLTE4NTQsMTMgKzI1MjIsMTYgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgorIAorICAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorLSAgICBmb3IgZmlsZSBpbiAkZXhlY3V0ZV9kbGZpbGVzOyBkbworKyAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KKyAgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorIAl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisgCisgICAgICAgZGlyPQorICAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICAqLmxhKQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisrCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorKworIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorIAkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCitAQCAtMTg4Miw3ICsyNTUzLDcgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAKKyAJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCistCSAgZGlyPSIkZGlyLyRvYmpkaXIiCisrCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKKyAJZWxzZQorIAkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKK0BAIC0xOTA3LDEwICsyNTc4LDEwIEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorIAorICAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCistICAgICAgaWYgZXZhbCB0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiOyB0aGVuCistCWV2YWwgJHNobGlicGF0aF92YXI9XCRkaXIKKysgICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgorKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICAgZWxzZQorLQlldmFsICRzaGxpYnBhdGhfdmFyPVwkZGlyOlwkJHNobGlicGF0aF92YXIKKysJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICAgZmkKKyAgICAgZG9uZQorIAorQEAgLTE5MzksOCArMjYxMCw3IEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgCTs7CisgICAgICAgZXNhYworICAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCistICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCistICAgICAgYXJncz0iJGFyZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKKyAgICAgZG9uZQorIAorICAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgorQEAgLTE5NzIsMjIgKzI2NDIsNTkgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgZmkKKyB9CisgCistdGVzdCAiJG1vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKyt0ZXN0ICIkb3B0X21vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKyAKKyAKKyAjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCisgZnVuY19tb2RlX2ZpbmlzaCAoKQorIHsKKyAgICAgJG9wdF9kZWJ1ZworLSAgICBsaWJkaXJzPSIkbm9ub3B0IgorKyAgICBsaWJzPQorKyAgICBsaWJkaXJzPQorICAgICBhZG1pbmNtZHM9CisgCistICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCistICAgICAgZm9yIGRpcgorLSAgICAgIGRvCistCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCistICAgICAgZG9uZQorKyAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KKysgICAgZG8KKysgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgorKwlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKKyAKKysgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCisrCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCisrCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCisrCWVsc2UKKysJICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorKwlmaQorKworKyAgICAgIGVsc2UKKysJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgorKyAgICAgIGZpCisrICAgIGRvbmUKKysKKysgICAgaWYgdGVzdCAtbiAiJGxpYnMiOyB0aGVuCisrICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisrICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorKyAgICAgICAgc3lzcm9vdF9jbWQ9InMvXChbICddXCkkc3lzcm9vdF9yZWdleC9cMS9nOyIKKysgICAgICBlbHNlCisrICAgICAgICBzeXNyb290X2NtZD0KKysgICAgICBmaQorKworKyAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcworKyAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKysgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisrICAgICAgICBkb25lCisrICAgICAgZWxzZQorKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKysgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisrCSAgc2VkIC1lICIke3N5c3Jvb3RfY21kfSBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAorKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorKwkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKKysJZG9uZQorKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorKyAgICAgIGZpCisrICAgIGZpCisrCisrICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorIAkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCitAQCAtMTk5Nyw3ICsyNzA0LDcgQEAgZnVuY19tb2RlX2ZpbmlzaCAoKQorIAlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisgCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorIAkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCistCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgICRjbWRzIgorIAlmaQorICAgICAgIGRvbmUKK0BAIC0yMDA2LDUzICsyNzEzLDU1IEBAIGZ1bmNfbW9kZV9maW5pc2ggKCkKKyAgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgICRvcHRfc2lsZW50ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUworIAorLSAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorLSAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCistICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCistICAgICAgJEVDSE8gIiAgICRsaWJkaXIiCistICAgIGRvbmUKKy0gICAgZWNobworLSAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKy0gICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCistICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCistICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKy0gICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCistICAgICAgZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKy0gICAgICBlY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKy0gICAgICBlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKy0gICAgICBlY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKy0gICAgICBsaWJkaXI9TElCRElSCistICAgICAgZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisrICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgICBlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisrICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKysJJEVDSE8gIiAgICRsaWJkaXIiCisrICAgICAgZG9uZQorKyAgICAgIGVjaG8KKysgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKysgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKysgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKysgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKysJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKysJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKysJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwlsaWJkaXI9TElCRElSCisrCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAKKy0gICAgICAkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorLSAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKy0gICAgICBlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKy0gICAgZmkKKy0gICAgZWNobworKwkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKysJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKysJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisrICAgICAgZmkKKysgICAgICBlY2hvCisgCistICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKy0gICAgICAgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCistCWVjaG8gInBhZ2VzLiIKKy0JOzsKKy0gICAgICAqKQorLSAgICAgICAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCistICAgICAgICA7OworLSAgICBlc2FjCistICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisrICAgICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisrICAgICAgY2FzZSAkaG9zdCBpbgorKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisrCSAgZWNobyAicGFnZXMuIgorKwkgIDs7CisrCSopCisrCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCBwYWdlcy4iCisrCSAgOzsKKysgICAgICBlc2FjCisrICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgZmkKKyAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgfQorIAorLXRlc3QgIiRtb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorK3Rlc3QgIiRvcHRfbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKyAKKyAKKyAjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgorQEAgLTIwNzcsNyArMjc4Niw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KKyAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLSAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKKyAgICAgY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgorICAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworQEAgLTIwOTcsNyArMjgwNiw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGRvCisgICAgICAgYXJnMj0KKyAgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKy0JZmlsZXM9IiRmaWxlcyAkZGVzdCIKKysJZnVuY19hcHBlbmQgZmlsZXMgIiAkZGVzdCIKKyAJZGVzdD0kYXJnCisgCWNvbnRpbnVlCisgICAgICAgZmkKK0BAIC0yMTM1LDExICsyODQ0LDExIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCisgICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLSAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgIGlmIHRlc3QgLW4gIiRhcmcyIjsgdGhlbgorIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKKyAgICAgICBmaQorLSAgICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9IiRpbnN0YWxsX3NoYXJlZF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICBkb25lCisgCisgICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKK0BAIC0yMTUxLDcgKzI4NjAsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgorICAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKyAJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIKKy0JaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwlmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgIGZpCisgICAgIGZpCisgCitAQCAtMjIwOSwxMCArMjkxOCwxMyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICAqLiRsaWJleHQpCisgCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCistCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgorKwlmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGZpbGUiCisgCTs7CisgCisgICAgICAgKi5sYSkKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKysKKyAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKyAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKyAJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKK0BAIC0yMjI2LDIzICsyOTM4LDMwIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisgCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBjdXJyZW50X2xpYmRpcnM9IiRjdXJyZW50X2xpYmRpcnMgJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZWxzZQorIAkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKyAJICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgCisgCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorIAlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLQlkaXI9IiRkaXIkb2JqZGlyIgorKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisgCisgCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKysgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCisrICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisrICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdGRpciIKKysgICAgICBzX2Rlc3RkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKworIAkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCistCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisrCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiWCRzX2Rlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGRlc3RsaWJkaXJcJCUlImAKKyAKKyAJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisgCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAorQEAgLTIzMTUsNyArMzAzNCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisgCisgCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KKy0JdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKysJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisgCTs7CisgCisgICAgICAgKi5sbykKK0BAIC0yNTAzLDcgKzMyMjIsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKKyAgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisgCistICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiICYmICRvcHRfZmluaXNoOyB0aGVuCisrICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKK0BAIC0yNTEyLDcgKzMyMzEsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICBmaQorIH0KKyAKKy10ZXN0ICIkbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorK3Rlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorIAorIAorICMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCitAQCAtMjU1OSw2ICszMjc4LDE4IEBAIGV4dGVybiBcIkNcIiB7CisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisgI2VuZGlmCisgCisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyAiCisgCitAQCAtMjU3MCwyMSArMzMwMSwyMiBAQCBleHRlcm4gXCJDXCIgeworIAkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKyAJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisgCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCistCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJHByb2dmaWxlJyIKKy0JICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJHByb2dmaWxlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCisrCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorIAkgIGRvbmUKKyAKKyAJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKy0JICAgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorKwkgICAgICBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKysJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgIH0KKyAJICBmaQorIAorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKyAJICAgICRvcHRfZHJ5X3J1biB8fCB7CistCSAgICAgICRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVAorLQkgICAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisrCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKysJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgIH0KKyAJICBmaQorIAorQEAgLTI1OTMsMjMgKzMzMjUsMjMgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworIAkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCistCSAgICAgICR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnIDwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIgorKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorIAkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKy0gICAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKy0gICAgICAgICAgICAgICAgY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCisrICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisrICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAJICAgICAgICA7OworIAkgICAgICBlc2FjCisgCSAgICB9CisgCSAgZWxzZQorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICAgJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorLQkgICAgICAkR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUCistCSAgICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKysJICAgICAgZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisrCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisrCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisgCSAgICAgIGNhc2UgJGhvc3QgaW4KKyAJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKy0JICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCistCSAgICAgICAgICBjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKysJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisrCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgCSAgICAgICAgICA7OworIAkgICAgICBlc2FjCisgCSAgICB9CitAQCAtMjYyMCwxMCArMzM1Miw1MiBAQCBleHRlcm4gXCJDXCIgeworIAkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKyAJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgorIAkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IgorLQkgICAgZXZhbCAiJE5NICRkbHByZWZpbGUgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorLQkgIH0KKysgICAgICAgICAgY2FzZSAkaG9zdCBpbgorKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisrCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQorKwkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KKysJICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgorKwkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCisrCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiIKKysJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgorKwkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKKysJICAgICAgICAgIGRscHJlZmlsZV9kbG5hbWU9YHNvdXJjZSAiJGN1cnJfbGFmaWxlIiAmJiBlY2hvICIkZGxuYW1lImAKKysJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KKysJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCisrCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrCSAgICAgICAgICBlbHNlCisrCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KKysJICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgorKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKysJICAgICAgICAgIGZpCisrCSAgICAgICAgZmkKKysJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA7IHRoZW4KKysJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKKysJICAgICAgICAgIGVsc2UKKysJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgorKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZmkKKysJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8CisrCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCisrCSAgICAgICAgfQorKwkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKKysJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKysJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgICAgICB9CisrCSAgICAgIGZpCisrCSAgICA7OworKwkgICAgKikKKysJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKysJICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisrCSAgICAgIH0KKysJICAgIDs7CisrICAgICAgICAgIGVzYWMKKyAJZG9uZQorIAorIAkkb3B0X2RyeV9ydW4gfHwgeworQEAgLTI2NjEsMjYgKzM0MzUsOSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAqYWRkcmVzczsKKyB9IGx0X2Rsc3ltbGlzdDsKKy0iCistCSAgY2FzZSAkaG9zdCBpbgorLQkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLQkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlCistICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KKy0gICBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8iCistCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKy0JICAqb3NmNSopCistCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLS8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEgKi8iCistCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKy0JICAqKQorLQkgICAgbHRfZGxzeW1fY29uc3Q9Y29uc3QgOzsKKy0JICBlc2FjCistCistCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy1leHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKKyBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CistJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cisge1wKKyAgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorQEAgLTI3MzYsNyArMzQ5Myw3IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworIAkgIGNhc2UgJGFyZyBpbgorIAkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworLQkgICopIHN5bXRhYl9jZmxhZ3M9IiRzeW10YWJfY2ZsYWdzICRhcmciIDs7CisrCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7CisgCSAgZXNhYworIAlkb25lCisgCitAQCAtMjc5Niw5ICszNTUzLDExIEBAIGZ1bmNfd2luMzJfbGliaWQgKCkKKyAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgICA7OworICAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworLSAgICBpZiAkT0JKRFVNUCAtZiAiJDEiIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CistICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorLSAgICAgIHdpbjMyX25tcmVzPWAkTk0gLWYgcG9zaXggLUEgIiQxIiB8CisrICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgorKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CisrICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8CisgCSRTRUQgLW4gLWUgJworIAkgICAgMSwxMDB7CisgCQkvIEkgL3sKK0BAIC0yODI3LDYgKzM1ODYsMTMxIEBAIGZ1bmNfd2luMzJfbGliaWQgKCkKKyAgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKKyB9CisgCisrIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCisrIworKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKysjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisrZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKKysjCisrIyBUaGUgaXMgdGhlIGNvcmUgb2YgYSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiBhCisrIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQorKyMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCisrIworKyMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCisrIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgorKyMKKysjIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQorKyMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgorK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKysgICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAorKyAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97CisrICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgorKyAgICAgIHMvLiovPT09PU1BUks9PT09LworKyAgICAgIHAKKysgICAgICBkCisrICAgIH0KKysgICAgIyBUaGVzZSBsaW5lcyBjYW4gc29tZXRpbWVzIGJlIGxvbmdlciB0aGFuIDQzIGNoYXJhY3RlcnMsIGJ1dAorKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZworKyAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKKysgICAgL15JbiBhcmNoaXZlIFteOl0qOi9kCisrICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCisrICAgIC9ePT09PU1BUks9PT09L3AKKysgICAgIyBSZW1vdmUgYWxsIGxpbmVzIHdpdGggbGVzcyB0aGFuIDQzIGNoYXJhY3RlcnMKKysgICAgL14uXHs0M1x9LyFkCisrICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCisrICAgIHMvXi5cezQzXH0vLycgfAorKyAgICAkU0VEIC1uICcKKysgICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCisrICAgICAgL149PT09TUFSSz09PT0vIGIgcGFyYQorKyAgICAgIEgKKysgICAgICAkIGIgcGFyYQorKyAgICAgIGIKKysgICAgICA6cGFyYQorKyAgICAgIHgKKysgICAgICBzL1xuLy9nCisrICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgorKyAgICAgIHMvXj09PT1NQVJLPT09PS8vCisrICAgICAgIyBSZW1vdmUgdHJhaWxpbmcgZG90cyBhbmQgd2hpdGVzcGFjZQorKyAgICAgIHMvW1wuIFx0XSokLy8KKysgICAgICAjIFByaW50CisrICAgICAgLy4vcCcgfAorKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKKysgICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKKysgICAgIyBhcmNoaXZlIHdoaWNoIHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorKyAgICAjIGFsbCB0aG9zZSB3aGljaCBoYXZlIGEgZmlyc3Qgb3Igc2Vjb25kIGNoYXJhY3RlciB0aGF0IGlzCisrICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQorKyAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgorKyAgICAjIDB4MzAyZiBleHBvcnRzIC0tIGJ1dCB3aWxsIGZhaWwgZm9yIERMTHMgd2hvc2UgbmFtZSBhY3R1YWxseQorKyAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5CisrICAgICMgYSAnLicuCisrICAgICMKKysgICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KKysgICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wIEFSRworKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorKyMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisrIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKKysgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCisrfQorKworKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorKyMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisrIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorK2Z1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAorKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgorK30KKysKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKKysjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisrIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKysjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKysjCisrIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAorKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgorKyMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisrZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiIDsgdGhlbgorKyAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CisrICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCisrICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIDsgdGhlbgorKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQorKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAorKyAgZWxzZQorKyAgICAjIHVua25vd24KKysgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9IiIKKysgIGZpCisrfQorIAorIAorICMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorQEAgLTI5MTcsNyArMzgwMSw3IEBAIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQorIAkgICAgZGFyd2luX2ZpbGU9CisgCSAgICBkYXJ3aW5fZmlsZXM9CisgCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KKy0JICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisrCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKyAJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisgCSAgICAkUk0gLXJmIHVuZmF0LSQkCitAQCAtMjkzMiw3ICszODE2LDcgQEAgZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCisgICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKyAJOzsKKyAgICAgICBlc2FjCistICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKysgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICAgZG9uZQorIAorICAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK0BAIC0zMDE0LDcgKzM4OTgsMTEwIEBAIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorIF9MVEVDSE9fRU9GJworIH0KKyAgICAgRUNITz1cIiRxRUNIT1wiCistICBmaVwKKysgIGZpCisrCisrIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KKysjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKKysjIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gd2hpY2ggaXMgdXNlZCBvbmx5IG9uCisrIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKysjIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCisrIyB0aGlzIHBhdHRlcm4pLgorKyMKKysjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKKysjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KKysjCisrIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKKysjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgorK2x0X29wdGlvbl9kZWJ1Zz0KKytmdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKKyt7CisrICBsdF9zY3JpcHRfYXJnMD1cJDAKKysgIHNoaWZ0CisrICBmb3IgbHRfb3B0CisrICBkbworKyAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgorKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OworKyAgICAtLWx0LWR1bXAtc2NyaXB0KQorKyAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCisrICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KKysgICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAorKyAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgorKyAgICAgICAgZXhpdCAwCisrICAgICAgOzsKKysgICAgLS1sdC0qKQorKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKKysgICAgICAgIGV4aXQgMQorKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGRvbmUKKysKKysgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKKysgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisrICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgorKyAgZmkKKyt9CisrCisrIyBVc2VkIHdoZW4gLS1sdC1kZWJ1Zy4gUHJpbnRzIGl0cyBhcmd1bWVudHMgdG8gc3Rkb3V0CisrIyAocmVkaXJlY3Rpb24gaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpCisrZnVuY19sdF9kdW1wX2FyZ3MgKCkKKyt7CisrICBsdF9kdW1wX2FyZ3NfTj0xOworKyAgZm9yIGx0X2FyZworKyAgZG8KKysgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgorKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAorKyAgZG9uZQorK30KKysKKysjIENvcmUgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisrZnVuY19leGVjX3Byb2dyYW1fY29yZSAoKQorK3sKKysiCisrICBjYXNlICRob3N0IGluCisrICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKysgICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisrICAgICRFQ0hPICJcCisrICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCisrICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKysgICAgICBmaQorKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorKyIKKysgICAgOzsKKysKKysgICopCisrICAgICRFQ0hPICJcCisrICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2Rpci9cJHByb2dyYW1cIiAxPiYyCisrICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKysgICAgICBmaQorKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorKyIKKysgICAgOzsKKysgIGVzYWMKKysgICRFQ0hPICJcCisrICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorKyAgICAgIGV4aXQgMQorK30KKysKKysjIEEgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKysjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAorKyMgbGF1bmNoZXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCisrZnVuY19leGVjX3Byb2dyYW0gKCkKKyt7CisrICBmb3IgbHRfd3JfYXJnCisrICBkbworKyAgICBjYXNlIFwkbHRfd3JfYXJnIGluCisrICAgIC0tbHQtKikgOzsKKysgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKKysgICAgZXNhYworKyAgICBzaGlmdAorKyAgZG9uZQorKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9CisrfQorKworKyAgIyBQYXJzZSBvcHRpb25zCisrICBmdW5jX3BhcnNlX2x0X29wdGlvbnMgXCJcJDBcIiBcJHsxK1wiXCRAXCJ9CisgCisgICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKK0BAIC0zMDc4LDcgKzQwNjUsNyBAQCBfTFRFQ0hPX0VPRicKKyAKKyAgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorLSAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCJcJHJlbGlua19jb21tYW5kXCIgMj4mMVxgOyB0aGVuIDoKKysgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgICBlbHNlCisgCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKyAJJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCitAQCAtMzEwMiw2ICs0MDg5LDE4IEBAIF9MVEVDSE9fRU9GJworIAorICAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKyAKKysJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKysJIworKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKKysJIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKKysJIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgorKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKysJICAkRUNITyAiXAorKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorKyIKKysJZmkKKysKKyAJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCisgCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKyAJICAkRUNITyAiXAorQEAgLTMxMTYsMzUgKzQxMTUsMTAgQEAgX0xURUNIT19FT0YnCisgIgorIAlmaQorIAorLQkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorLQlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKy0JICAkRUNITyAiXAorLSAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorLSAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorLSIKKy0JZmkKKy0KKyAJJEVDSE8gIlwKKyAgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCistIgorLQljYXNlICRob3N0IGluCistCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworLQkqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorLQkgICRFQ0hPICJcCistICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CistIgorLQkgIDs7CistCistCSopCistCSAgJEVDSE8gIlwKKy0gICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKy0iCistCSAgOzsKKy0JZXNhYworLQkkRUNITyAiXAorLSAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKy0gICAgICBleGl0IDEKKysgICAgICBmdW5jX2V4ZWNfcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9CisgICAgIGZpCisgICBlbHNlCisgICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KK0BAIC0zMTU4LDE2NiArNDEzMiw2IEBAIGZpXAorIH0KKyAKKyAKKy0jIGZ1bmNfdG9faG9zdF9wYXRoIGFyZworLSMKKy0jIENvbnZlcnQgcGF0aHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCistIyBJbnRlbmRlZCBmb3IgdXNlIHdpdGggIm5hdGl2ZSIgbWluZ3cgKHdoZXJlIGxpYnRvb2wgaXRzZWxmCistIyBpcyBydW5uaW5nIHVuZGVyIHRoZSBtc3lzIHNoZWxsKSwgb3IgaW4gdGhlIGZvbGxvd2luZyBjcm9zcy0KKy0jIGJ1aWxkIGVudmlyb25tZW50czoKKy0jICAgICRidWlsZCAgICAgICAgICAkaG9zdAorLSMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCistIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKy0jICAgICpuaXggKyB3aW5lICAgICBtaW5ndworLSMgd2hlcmUgd2luZSBpcyBlcXVpcHBlZCB3aXRoIHRoZSBgd2luZXBhdGgnIGV4ZWN1dGFibGUuCistIyBJbiB0aGUgbmF0aXZlIG1pbmd3IGNhc2UsIHRoZSAobXN5cykgc2hlbGwgYXV0b21hdGljYWxseQorLSMgY29udmVydHMgcGF0aHMgZm9yIGFueSBub24tbXN5cyBhcHBsaWNhdGlvbnMgaXQgbGF1bmNoZXMsCistIyBidXQgdGhhdCBmYWNpbGl0eSBpc24ndCBhdmFpbGFibGUgZnJvbSBpbnNpZGUgdGhlIGN3cmFwcGVyLgorLSMgU2ltaWxhciBhY2NvbW1vZGF0aW9ucyBhcmUgbmVjZXNzYXJ5IGZvciAkaG9zdCBtaW5ndyBhbmQKKy0jICRidWlsZCBjeWd3aW4uICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBubyBoYXJtIGZvciBvdGhlcgorLSMgJGhvc3QvJGJ1aWxkIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGFib3ZlLgorLSMKKy0jIEFSRyBpcyB0aGUgcGF0aCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKy0jIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gZm9yICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorLSMgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKy1mdW5jX3RvX2hvc3RfcGF0aCAoKQorLXsKKy0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCistICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKy0gICAgY2FzZSAkaG9zdCBpbgorLSAgICAgICptaW5ndyogKQorLSAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworLSAgICAgICAgY2FzZSAkYnVpbGQgaW4KKy0gICAgICAgICAgKm1pbmd3KiApICMgYWN0dWFsbHksIG1zeXMKKy0gICAgICAgICAgICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CistICAgICAgICAgICAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKmN5Z3dpbiogKQorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtdyAiJDEiIHwKKy0JICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICogKQorLSAgICAgICAgICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8KKy0gICAgICAgICAgICAjIGVycm9yIGNvZGUsIHNvIHdlIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mCistICAgICAgICAgICAgIyBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgY29tbWFuZCBpcyBub3QKKy0gICAgICAgICAgICAjIGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKy0gICAgICAgICAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGgKKy0gICAgICAgICAgICAjIGVycm9yIGNvZGUgb2YgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMKKy0gICAgICAgICAgICAjIHRoZSBvZGQgY29uc3RydWN0aW9uOgorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCistICAgICAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY190b19ob3N0X3BhdGhfdG1wMX0iOyB0aGVuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YCRFQ0hPICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfAorLSAgICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIyBBbGxvdyB3YXJuaW5nIGJlbG93LgorLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PQorLSAgICAgICAgICAgIGZpCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorLSAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKy0gICAgICAgICAgIyBGYWxsYmFjazoKKy0gICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKy0gICAgICAgIGZpCistICAgICAgICA7OworLSAgICBlc2FjCistICBmaQorLX0KKy0jIGVuZDogZnVuY190b19ob3N0X3BhdGgKKy0KKy0jIGZ1bmNfdG9faG9zdF9wYXRobGlzdCBhcmcKKy0jCistIyBDb252ZXJ0IHBhdGhsaXN0cyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKy0jIFNlZSBmdW5jX3RvX2hvc3RfcGF0aCgpLCBhYm92ZS4gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUKKy0jIGZvbGxvd2luZyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zIChidXQgZG9lcyBubyBoYXJtIGZvcgorLSMgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgaGVyZSk6CistIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKy0jICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQorLSMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CistIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKy0jCistIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0bworLSMgJGhvc3QgZm9ybWF0LiBJZiBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yCistIyBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0IGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpCistIyBvbiBvdXRwdXQuCistIworLSMgQVJHIGlzIGEgcGF0aGxpc3QgKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCistIyB0aGUgcHJvcGVyIHJlcHJlc2VudGF0aW9uIG9uICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorLSMgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQuCistZnVuY190b19ob3N0X3BhdGhsaXN0ICgpCisteworLSAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJDEiCistICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKy0gICAgY2FzZSAkaG9zdCBpbgorLSAgICAgICptaW5ndyogKQorLSAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworLSAgICAgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCistICAgICAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCistICAgICAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorLQlmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorLSAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorLSAgICAgICAgY2FzZSAkYnVpbGQgaW4KKy0gICAgICAgICAgKm1pbmd3KiApICMgQWN0dWFsbHksIG1zeXMuCistICAgICAgICAgICAgIyBBd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0LgorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YAorLQkgICAgICAoIGNtZCAvL2MgZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiApIDI+L2Rldi9udWxsIHwKKy0JICAgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICpjeWd3aW4qICkKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBjeWdwYXRoIC13IC1wICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHwKKy0gICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqICkKKy0gICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRobGlzdHMKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIiCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUz0kSUZTCistICAgICAgICAgICAgSUZTPToKKy0gICAgICAgICAgICBmb3IgZnVuY190b19ob3N0X3BhdGhsaXN0X2YgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIDsgZG8KKy0gICAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworLSAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIiA7IHRoZW4KKy0gICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIKKy0gICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKy0gICAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7JGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKy0gICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBkb25lCistICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsgdGhlbgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGgocykgY29ycmVzcG9uZGluZyB0byIKKy0gICAgICAgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKy0gICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCistICAgICAgICAgICMgRmFsbGJhY2suIFRoaXMgbWF5IGJyZWFrIGlmICQxIGNvbnRhaW5zIERPUy1zdHlsZSBkcml2ZQorLSAgICAgICAgICAjIHNwZWNpZmljYXRpb25zLiBUaGUgZml4IGlzIG5vdCB0byBjb21wbGljYXRlIHRoZSBleHByZXNzaW9uCistICAgICAgICAgICMgYmVsb3csIGJ1dCBmb3IgdGhlIHVzZXIgdG8gcHJvdmlkZSBhIHdvcmtpbmcgd2luZSBpbnN0YWxsYXRpb24KKy0gICAgICAgICAgIyB3aXRoIHdpbmVwYXRoIHNvIHRoYXQgcGF0aCB0cmFuc2xhdGlvbiBpbiB0aGUgY3Jvc3MtdG8tbWluZ3cKKy0gICAgICAgICAgIyBjYXNlIHdvcmtzIHByb3Blcmx5LgorLSAgICAgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2Rvcz0ic3w6fDt8ZyIKKy0gICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAorLSAgICAgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2RvcyJgCistICAgICAgICBmaQorLSAgICAgICAgIyBOb3csIGFkZCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzIGJhY2sKKy0gICAgICAgIGNhc2UgIiQxIiBpbgorLSAgICAgICAgICA6KiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IjskZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgY2FzZSAiJDEiIGluCistICAgICAgICAgICo6ICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCAiOyIKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgOzsKKy0gICAgZXNhYworLSAgZmkKKy19CistIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRobGlzdAorLQorICMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworICMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorICMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCitAQCAtMzMzNCwxMCArNDE0OCw2IEBAIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKKyAKKyAgICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorLQorLSAgIEN1cnJlbnRseSwgaXQgc2ltcGx5IGV4ZWNzIHRoZSB3cmFwcGVyICpzY3JpcHQqICIkU0hFTEwgJG91dHB1dCIsCistICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAorLSAgIGV4ZWMgJG9iamRpci8kb3V0cHV0bmFtZSBkaXJlY3RseS4KKyAqLworIEVPRgorIAkgICAgY2F0IDw8IkVPRiIKK0BAIC0zNDYyLDIyICs0MjcyLDEzIEBAIGludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworICAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKKyB9IHdoaWxlICgwKQorIAorLSN1bmRlZiBMVFdSQVBQRVJfREVCVUdQUklOVEYKKy0jaWYgZGVmaW5lZCBMVF9ERUJVR1dSQVBQRVIKKy0jIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykgbHR3cmFwcGVyX2RlYnVncHJpbnRmIGFyZ3MKKy1zdGF0aWMgdm9pZAorLWx0d3JhcHBlcl9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCisteworLSAgICB2YV9saXN0IGFyZ3M7CistICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworLSAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKy0gICAgdmFfZW5kIChhcmdzKTsKKy19CisrI2lmIGRlZmluZWQoTFRfREVCVUdXUkFQUEVSKQorK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAxOworICNlbHNlCistIyBkZWZpbmUgTFRXUkFQUEVSX0RFQlVHUFJJTlRGKGFyZ3MpCisrc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CisgI2VuZGlmCisgCistY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gTlVMTDsKKytjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCisgCisgdm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7CisgY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK0BAIC0zNDg3LDcgKzQyODgsMTAgQEAgY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKKyBpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKKyBpbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CisgY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cistdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKKyt2b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworK3N0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKKytzdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOworIHZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisgY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKKyB2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworQEAgLTM0OTcsMTQgKzQzMDEsMTQgQEAgdm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CisgRU9GCisgCisgCSAgICBjYXQgPDxFT0YKKy1jb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworK3ZvbGF0aWxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7CisgY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworIEVPRgorIAorIAkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkdGVtcF9ycGF0aCIKKysgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKKyAJICAgICAgY2F0IDw8RU9GCistY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworIEVPRgorIAkgICAgZWxzZQorIAkgICAgICBjYXQgPDwiRU9GIgorQEAgLTM1MTMsMTAgKzQzMTcsMTAgQEAgRU9GCisgCSAgICBmaQorIAorIAkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiRkbGxzZWFyY2hwYXRoOiIKKysgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZGxsc2VhcmNocGF0aDoiCisgCSAgICAgIGNhdCA8PEVPRgorIGNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKKytjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKKyBFT0YKKyAJICAgIGVsc2UKKyAJICAgICAgY2F0IDw8IkVPRiIKK0BAIC0zNTM5LDEyICs0MzQzLDEwIEBAIEVPRgorIAkgICAgY2F0IDw8IkVPRiIKKyAKKyAjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgorLSNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICA1CisgCistc3RhdGljIGNvbnN0IHNpemVfdCBvcHRfcHJlZml4X2xlbiAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIOworIHN0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworLQorIHN0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKKyAKKyBpbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorQEAgLTM1NjEsMTAgKzQzNjMsMTMgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGludCBpOworIAorICAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGFyZ3ZbMF0gICAgICA6ICVzXG4iLCBhcmd2WzBdKSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLCBwcm9ncmFtX25hbWUpKTsKKysgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKyAKKy0gIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0ICovCisrICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAorKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisrICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5CisrICAgKi8KKysgIG5ld2FyZ2M9MDsKKyAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKK0BAIC0zNTgxLDIxICs0Mzg2LDU0IEBAIEVPRgorIAkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworIAkgIHJldHVybiAwOworIAl9CisrICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQorKwl7CisrICAgICAgICAgIGx0X2RlYnVnID0gMTsKKysgICAgICAgICAgY29udGludWU7CisrCX0KKysgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorKyAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCisrICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisrICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKysgICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKysgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKysgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCisrICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorKyAgICAgICAgICAgKi8KKysgICAgICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCisrICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisrICAgICAgICB9CisrICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgICB9CisrICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworKworK0VPRgorKwkgICAgY2F0IDw8RU9GCisrICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cbiIpOworK0VPRgorKwkgICAgY2F0IDw8IkVPRiIKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOworIAorLSAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworICAgdG1wX3BhdGhzcGVjID0gZmluZF9leGVjdXRhYmxlIChhcmd2WzBdKTsKKyAgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKy0gICAgbHRfZmF0YWwgKCJDb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCistCQkJICB0bXBfcGF0aHNwZWMpKTsKKysgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisrCQkgIHRtcF9wYXRoc3BlYyk7CisgCisgICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCistCQkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAKKy0gIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCggYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgCisgICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworQEAgLTM2MTMsOCArNDQ1MSw5IEBAIEVPRgorICAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgICB0bXBfcGF0aHNwZWMgPSAwOworIAorLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKy0JCQkgIHRhcmdldF9uYW1lKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorKwkJICB0YXJnZXRfbmFtZSk7CisgRU9GCisgCisgCSAgICBjYXQgPDxFT0YKK0BAIC0zNjY0LDM1ICs0NTAzLDE5IEBAIEVPRgorIAorICAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCistICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKysgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKKysgICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQorKyAgICAgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoICpfVkFSTkFNRXMgYXJlIFBBVEggYnV0IHVuaW5zdGFsbGVkCisrICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLworICAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisrICBsdF91cGRhdGVfbGliX3BhdGggKExJQl9QQVRIX1ZBUk5BTUUsIExJQl9QQVRIX1ZBTFVFKTsKKyAKKy0gIG5ld2FyZ2M9MDsKKy0gIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCistICAgIHsKKy0gICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIG9wdF9wcmVmaXhfbGVuKSA9PSAwKQorLSAgICAgICAgeworLSAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCistICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKy0gICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKy0gICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorLSAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorLSAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorLSAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKy0gICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCistICAgICAgICAgICAqLworLSAgICAgICAgICBsdF9mYXRhbCAoIlVucmVjb2duaXplZCBvcHRpb24gaW4gJXMgbmFtZXNwYWNlOiAnJXMnIiwKKy0gICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKy0gICAgICAgIH0KKy0gICAgICAvKiBvdGhlcndpc2UgLi4uICovCistICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CistICAgIH0KKy0gIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CistCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgICAgICgoIihtYWluKSBsdF9hcmd2X3plcm8gOiAlc1xuIiwgKGx0X2FyZ3ZfemVybyA/IGx0X2FyZ3ZfemVybyA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAorKwkJICBub25udWxsIChsdF9hcmd2X3plcm8pKTsKKyAgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgIHsKKy0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIiwgaSwgKG5ld2FyZ3pbaV0gPyBuZXdhcmd6W2ldIDogIjxOVUxMPiIpKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBuZXdhcmd6WyVkXTogJXNcbiIsCisrCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7CisgICAgIH0KKyAKKyBFT0YKK0BAIC0zNzA2LDcgKzQ1MjksOSBAQCBFT0YKKyAgIGlmIChydmFsID09IC0xKQorICAgICB7CisgICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKy0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogZXJybm8gPSAlZFxuIiwgbHRfYXJndl96ZXJvLCBlcnJubykpOworKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCisrCQkgICAgICBsdF9hcmd2X3plcm8sIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgICAgICByZXR1cm4gMTI3OworICAgICB9CisgICByZXR1cm4gcnZhbDsKK0BAIC0zNzI4LDcgKzQ1NTMsNyBAQCB4bWFsbG9jIChzaXplX3QgbnVtKQorIHsKKyAgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgICBpZiAoIXApCistICAgIGx0X2ZhdGFsICgiTWVtb3J5IGV4aGF1c3RlZCIpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAibWVtb3J5IGV4aGF1c3RlZCIpOworIAorICAgcmV0dXJuIHA7CisgfQorQEAgLTM3NjIsOCArNDU4Nyw4IEBAIGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCisgeworICAgc3RydWN0IHN0YXQgc3Q7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGNoZWNrX2V4ZWN1dGFibGUpICA6ICVzXG4iLAorLQkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgIHJldHVybiAwOworIAorQEAgLTM3ODAsOCArNDYwNSw4IEBAIG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKKyAgIGludCBydmFsID0gMDsKKyAgIHN0cnVjdCBzdGF0IHN0OworIAorLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWtlX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKKy0JCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOworICAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCisgICAgIHJldHVybiAwOworIAorQEAgLTM4MDcsOCArNDYzMiw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAgIGludCB0bXBfbGVuOworICAgY2hhciAqY29uY2F0X25hbWU7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGZpbmRfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorLQkJCSAgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7CisgCisgICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgICByZXR1cm4gTlVMTDsKK0BAIC0zODYxLDcgKzQ2ODYsOCBAQCBmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCisgCQl7CisgCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKy0JCSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKysJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAJCSAgY29uY2F0X25hbWUgPQorIAkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworQEAgLTM4ODYsNyArNDcxMiw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAgICAgfQorICAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorLSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKysgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKysgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworICAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKK0BAIC0zOTEyLDggKzQ3MzksOSBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCisgICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKKyAgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICAgeworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorLQkJCSAgICAgIHRtcF9wYXRoc3BlYykpOworKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKysJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorIAl7CisgCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKK0BAIC0zOTM1LDggKzQ3NjMsOSBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCisgCX0KKyAgICAgICBlbHNlCisgCXsKKy0JICBjaGFyICplcnJzdHIgPSBzdHJlcnJvciAoZXJybm8pOworLQkgIGx0X2ZhdGFsICgiRXJyb3IgYWNjZXNzaW5nIGZpbGUgJXMgKCVzKSIsIHRtcF9wYXRoc3BlYywgZXJyc3RyKTsKKysJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKKysJCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAJfQorICAgICB9CisgICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKK0BAIC0zOTQ5LDcgKzQ3NzgsOCBAQCBjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCisgICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgIHsKKy0gICAgICBsdF9mYXRhbCAoIkNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworKyAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisgICAgIH0KKyAgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOworICNlbmRpZgorQEAgLTM5NzUsMTEgKzQ4MDUsMjUgQEAgc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKKyAgIHJldHVybiBzdHI7CisgfQorIAorK3ZvaWQKKytsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGlmIChsdF9kZWJ1ZykKKysgICAgeworKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKysgICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKysgICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKysgICAgICB2YV9lbmQgKGFyZ3MpOworKyAgICB9CisrfQorKworIHN0YXRpYyB2b2lkCistbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAorK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKysJICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAorIAkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKKyB7CistICBmcHJpbnRmIChzdGRlcnIsICIlczogJXM6ICIsIHByb2dyYW1fbmFtZSwgbW9kZSk7CisrICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7CisgICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKyAKK0BAIC0zOTg4LDIwICs0ODMyLDMyIEBAIGx0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqbW9kZSwKKyB9CisgCisgdm9pZAorLWx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCisrbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCisgeworICAgdmFfbGlzdCBhcDsKKyAgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CistICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKysgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICAgdmFfZW5kIChhcCk7CisgfQorIAorK3N0YXRpYyBjb25zdCBjaGFyICoKKytub25udWxsIChjb25zdCBjaGFyICpzKQorK3sKKysgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqCisrbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKKyt9CisrCisgdm9pZAorIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisgeworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKysgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgIHsKKyAjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KK0BAIC00MDQ5LDkgKzQ5MDUsOSBAQCBsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCisgdm9pZAorIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisgeworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworIAorICAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgICB7CitAQCAtNDA3MCw5ICs0OTI2LDkgQEAgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB2b2lkCisgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisrICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgCisgICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgIHsKK0BAIC00MjIyLDcgKzUwNzgsNyBAQCBFT0YKKyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQorIHsKKyAgICAgJG9wdF9kZWJ1ZworLSAgICBjYXNlIGBldmFsICIkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCIgfCAkU0VEIC1lIDEwcWAgaW4KKysgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgorICAgICAqaW1wb3J0KikgOiA7OworICAgICAqKSBmYWxzZSA7OworICAgICBlc2FjCitAQCAtNDQwMSw5ICs1MjU3LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKy0JICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKysJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCisgCSAgICBlbHNlCistCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgorIAkgICAgZmkKKyAJICAgIHByZXY9CisgCSAgICBjb250aW51ZQorQEAgLTQ0MjcsNyArNTI4Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqLSotZGFyd2luKikKKyAJICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgorIAkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CistCQkqKSBkZXBsaWJzPSIkZGVwbGlicyAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisrCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorIAkJICAgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworQEAgLTQ0NDYsNyArNTMwMiw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBtb3JlYXJncz0KKyAJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKyAJICAgIGRvCistIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisrIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCisgCSAgICAgIGFyZz0kZmlsCisgCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorIAorQEAgLTQ0NzUsNyArNTMzMSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCistCQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCSAgICAgIHByZXY9CisgCQkgICAgICBjb250aW51ZQorIAkJICAgIGVsc2UKK0BAIC00NDg3LDcgKzUzNDMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorIAkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorLQkJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorKwkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCSAgICBwcmV2PQorIAkJICBmaQorIAorQEAgLTQ1NTcsMTIgKzU0MTMsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorIAkgICAgY2FzZSAiJHJwYXRoICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqKSBycGF0aD0iJHJwYXRoICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7CisgCSAgICBlc2FjCisgCSAgZWxzZQorIAkgICAgY2FzZSAiJHhycGF0aCAiIGluCisgCSAgICAqIiAkYXJnICIqKSA7OworLQkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OworIAkgICAgZXNhYworIAkgIGZpCisgCSAgcHJldj0KK0BAIC00NTc0LDI4ICs1NDMwLDI4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY29udGludWUKKyAJICA7OworIAl3ZWFrKQorLQkgIHdlYWtfbGlicz0iJHdlYWtfbGlicyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCisgCSAgcHJldj0KKyAJICBjb250aW51ZQorIAkgIDs7CisgCXhjY2xpbmtlcikKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGNvbXBpbGVyKQorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKyAJICBwcmV2PQorIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCXhsaW5rZXIpCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKKyAJICBwcmV2PQorIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bCRxYXJnIgorIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKK0BAIC00Njg2LDE1ICs1NTQyLDE2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCTs7CisgCisgICAgICAgLUwqKQorLQlmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkYXJnIgorLQlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorLQlpZiB0ZXN0IC16ICIkZGlyIjsgdGhlbgorKwlmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgorKwlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorIAkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKyAJICBlbHNlCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKyAJICBmaQorIAlmaQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKyAJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisgCWNhc2UgJGRpciBpbgorIAlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CitAQCAtNDcwNiwxMCArNTU2MywxNiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIDs7CisgCWVzYWMKKyAJY2FzZSAiJGRlcGxpYnMgIiBpbgorLQkqIiAtTCRkaXIgIiopIDs7CisrCSoiIC1MJGRpciAiKiB8ICoiICRhcmcgIiopCisrCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cworKwkgIDs7CisgCSopCistCSAgZGVwbGlicz0iJGRlcGxpYnMgLUwkZGlyIgorLQkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKKysJICBjYXNlICRkaXIgaW4KKysJICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKiB8ID0qKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CisrCSAgZXNhYworKwkgIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiCisgCSAgOzsKKyAJZXNhYworIAljYXNlICRob3N0IGluCitAQCAtNDcxOCwxMiArNTU4MSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiRkaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7CisgCSAgZXNhYworIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNDc0Nyw3ICs1NjEwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorIAkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKy0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKysJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisgCSAgICBjb250aW51ZQorIAkgICAgOzsKKyAJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCitAQCAtNDc1OCw5ICs1NjIxLDYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKyAJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorIAkgICAgOzsKKy0JICAqLSotbGludXgqKQorLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCistCSAgICA7OworIAkgIGVzYWMKKyAJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorIAkgY2FzZSAkaG9zdCBpbgorQEAgLTQ3NzAsNyArNTYzMCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgIDs7CisgCSBlc2FjCisgCWZpCistCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisrCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorIAljb250aW51ZQorIAk7OworIAorQEAgLTQ3ODIsOCArNTY0Miw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgICMgY2xhc3NlcywgbmFtZSBtYW5nbGluZywgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorLSAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3QpCistCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKysgICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290fC0tc3lzcm9vdCkKKysJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAJcHJldj14Y29tcGlsZXIKK0BAIC00NzkxLDEyICs1NjUxLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCTs7CisgCisgICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKy0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorIAljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkgICAgKiIgJGFyZyAiKikgOzsKKy0JICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRhcmciIDs7CisrCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OworIAllc2FjCisgCWNvbnRpbnVlCisgCTs7CitAQCAtNDg2MywxMyArNTcyMywxNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJY2FzZSAkZGlyIGluCisgCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKysJPSopCisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgorKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICA7OworIAkqKQorIAkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorIAkgIDs7CisgCWVzYWMKKyAJY2FzZSAiJHhycGF0aCAiIGluCisgCSoiICRkaXIgIiopIDs7CistCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworIAllc2FjCisgCWNvbnRpbnVlCisgCTs7CitAQCAtNDkyMiw4ICs1Nzg2LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorLQkgIGFyZz0iJGFyZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAlkb25lCisgCUlGUz0iJHNhdmVfaWZzIgorIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCitAQCAtNDkzOCw5ICs1ODAyLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorLQkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAlkb25lCisgCUlGUz0iJHNhdmVfaWZzIgorIAlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCitAQCAtNDk2OCwyNCArNTgzMiwyNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAJOzsKKyAKKy0gICAgICAjIC02NCwgLW1pcHNbMC05XSBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFNHSSBjb21waWxlcgorLSAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCistICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFN1biBjb21waWxlcgorLSAgICAgICMgK0RBKiwgK0REKiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIEhQIGNvbXBpbGVyCistICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKy0gICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKKy0gICAgICAjIGNvbXBpbGVyIGFyZ3MgZm9yIEdDQworLSAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKy0gICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCistICAgICAgIyBAZmlsZSBHQ0MgcmVzcG9uc2UgZmlsZXMKKy0gICAgICAjIC10cD0qIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KKysgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisrICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKKysgICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCisrICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKysgICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCisrICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisrICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworKyAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisrICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKKysgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworKyAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorKyAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAorKyAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCistICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qKQorKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAorKyAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbikKKyAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICAgY29udGludWUKKyAgICAgICAgIDs7CisgCitAQCAtNDk5Nyw3ICs1ODY0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAqLiRvYmpleHQpCisgCSMgQSBzdGFuZGFyZCBvYmplY3QuCistCW9ianM9IiRvYmpzICRhcmciCisrCWZ1bmNfYXBwZW5kIG9ianMgIiAkYXJnIgorIAk7OworIAorICAgICAgICoubG8pCitAQCAtNTAyOCw3ICs1ODk1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorLQkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisrCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisgCQlwcmV2PQorIAkJY29udGludWUKKyAJICAgICAgZWxzZQorQEAgLTUwNDAsNyArNTkwNyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorIAkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCistCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisgCSAgICAgIHByZXY9CisgCSAgICBmaQorIAorQEAgLTUwODUsMjQgKzU5NTIsMjUgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAqLiRsaWJleHQpCisgCSMgQW4gYXJjaGl2ZS4KKy0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKy0Jb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgorKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKysJZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgorIAljb250aW51ZQorIAk7OworIAorICAgICAgICoubGEpCisgCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKyAKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCisgCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKyAJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKy0JICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIHByZXY9CisgCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorIAkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCistCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICBwcmV2PQorIAllbHNlCistCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJZmkKKyAJY29udGludWUKKyAJOzsKK0BAIC01MTI3LDcgKzU5OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyAKKyAgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorLSAgICAgIGV2YWwgImFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIiIKKysgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgIGZpCitAQCAtNTE0NCwxMSArNjAxMiwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICBlbHNlCisgICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgIGZpCistICAgIGV2YWwgInN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIiCistICAgIGV2YWwgInN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiIgorKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKysgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorIAorICAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisrICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCisrICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorIAorQEAgLTUxNjksMTIgKzYwMzksMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworLSAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJY2FzZSAiJGxpYnMgIiBpbgorLQkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGZpCistICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKysgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKKyAgICAgZG9uZQorIAorICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCitAQCAtNTE4Nyw5ICs2MDU3LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorIAlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKyAJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCistCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKysJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OworIAkgIGVzYWMKKy0JICBwcmVfcG9zdF9kZXBzPSIkcHJlX3Bvc3RfZGVwcyAkcHJlX3Bvc3RfZGVwIgorKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgorIAlkb25lCisgICAgICAgZmkKKyAgICAgICBwcmVfcG9zdF9kZXBzPQorQEAgLTUyNTYsOCArNjEyNiw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisgCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicworIAkgIGRlcGVuZGVuY3lfbGlicz0KKysJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKyAJICBjYXNlICRsaWIgaW4KKy0JICAqLmxhKQlmdW5jX3NvdXJjZSAiJGxpYiIgOzsKKysJICAqLmxhKQlmdW5jX3NvdXJjZSAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKKyAJICBlc2FjCisgCisgCSAgIyBDb2xsZWN0IHByZW9wZW5lZCBsaWJ0b29sIGRlcGxpYnMsIGV4Y2VwdCBhbnkgdGhpcyBsaWJyYXJ5CitAQCAtNTI2Nyw3ICs2MTM4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKyAJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKKy0JICAgICopIGRlcGxpYnM9IiRkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCisgCWRvbmUKK0BAIC01Mjg4LDExICs2MTU5LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKyAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgZWxzZQorLQkgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgorIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKyAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisgCQllc2FjCisgCSAgICBmaQorIAkgIGZpCitAQCAtNTM3Nyw3ICs2MjQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisgCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkJICAgICoiICRkZXBsaWIgIiopIDs7CistCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKysJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworIAkJZXNhYworIAkgICAgZmkKKyAJICBmaQorQEAgLTUzOTAsNyArNjI2MSw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCisgCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICAgIDs7CisgCSAgcHJvZykKKyAJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KK0BAIC01NDA0LDcgKzYyNzYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorIAkgICAgZmkKKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKK0BAIC01NDE1LDE3ICs2Mjg4LDIxIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCS1SKikKKyAJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisgCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgorLQkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKyAJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisgCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKyAJICAgICoiICRkaXIgIiopIDs7CistCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisgCSAgICBlc2FjCisgCSAgZmkKKyAJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKy0JKi5sYSkgbGliPSIkZGVwbGliIiA7OworKwkqLmxhKQorKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrCSAgOzsKKyAJKi4kbGliZXh0KQorIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKyAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCitAQCAtNTQ4OCwxMSArNjM2NSwxMSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKyAJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisgCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgorLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKKyAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisgCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgICBlbHNlCistCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorIAkgICAgZmkKKyAJICBmaQorIAkgIGNvbnRpbnVlCitAQCAtNTUzOCw3ICs2NDE1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisgCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CistCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZmkKK0BAIC01NTQ2LDggKzY0MjMsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorIAkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKKyAJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKy0JICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBkbGZpbGVzPSIkZGxmaWxlcyAkZGxvcGVuIgorLQkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCisrCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRkbG9wZW4iCisrCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCisgCWZpCisgCisgCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KK0BAIC01NTU4LDIwICs2NDM1LDIwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorIAkgICAgZmkKKyAJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KKy0JICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorLQkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKysJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorIAkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCisgCSAgZmkKKyAJICB0bXBfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorIAkgIGRvbmUKKyAJICBjb250aW51ZQorIAlmaSAjICRwYXNzID0gY29udgorQEAgLTU1NzksOSArNjQ1NiwxNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCisgCWxpbmtsaWI9CistCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKy0JICBsaW5rbGliPSIkbCIKKy0JZG9uZQorKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCisrCSAgIHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSB5ZXMgfHwKKysJICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LG5vIjsgfTsgdGhlbgorKwkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisrCWVsc2UKKysJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCisrCSAgICBsaW5rbGliPSIkbCIKKysJICBkb25lCisrCWZpCisgCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorIAkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorIAlmaQorQEAgLTU1OTgsOSArNjQ4MSw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorIAkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKyAJICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KKy0JICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKysJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisgCSAgZWxzZQorLQkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgorIAkgIGZpCisgCSAgY29udGludWUKKyAJZmkgIyAkcGFzcyA9IGRsb3BlbgorQEAgLTU2MjIsMTQgKzY1MDUsMTQgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisgCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKy0JICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisrCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisgCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorIAkgICAgZGlyPSIkbGFkaXIiCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorLQkgICAgZGlyPSIkbGliZGlyIgorLQkgICAgYWJzZGlyPSIkbGliZGlyIgorKwkgICAgZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisrCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKyAJICBmaQorIAkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisgCWVsc2UKK0BAIC01NjM3LDEyICs2NTIwLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBkaXI9IiRsYWRpciIKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKy0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKyAJICBlbHNlCisgCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisgCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCistCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKysJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisgCSAgZmkKKyAJZmkgIyAkaW5zdGFsbGVkID0geWVzCisgCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorQEAgLTU2NTMsMjAgKzY1MzYsNDYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorIAkgIGZpCistCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCistCSAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCistCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCistCSAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKy0JICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorLQkgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorLQkJZGxwcmVjb252ZW5pZW5jZWxpYnM9IiRkbHByZWNvbnZlbmllbmNlbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKy0JICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorLQkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKy0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGRsbmFtZSIKKy0JICBlbHNlCistCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgorLQkgIGZpCisrCSAgY2FzZSAiJGhvc3QiIGluCisrCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCisrCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKysJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCisrCSAgICAgICMgc3RhdGljIGFuZCBzaGFyZWQgYXJlIHByZXNlbnQuICBUaGVyZWZvcmUsIGVuc3VyZSB3ZSBleHRyYWN0CisrCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKKysJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCisrCSAgICAgICMgdGhpcyBieSBwdXR0aW5nIHRoZSBpbXBvcnQgbGlicmFyeSBuYW1lIGludG8gJG5ld2RscHJlZmlsZXMuCisrCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCisrCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKKysJICAgICAgIyBkbG5hbWUgZnJvbSB0aGUgbGEgZmlsZS4KKysJICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKysJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgorKwkgICAgICAgIGV2YWwgImxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0PVwkYWJzX2xhZGlyL1wkbGFuYW1lIgorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorKwkgICAgICBlbHNlCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKysJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgIGZpCisrCSAgICA7OworKwkgICAgKiApCisrCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworKwkgICAgICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKysJICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKysJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKysJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisrCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorKwkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGRsbmFtZSIKKysJICAgICAgZWxzZQorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorKwkgICAgICBmaQorKwkgICAgOzsKKysJICBlc2FjCisgCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKyAKKyAJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KK0BAIC01Njg0LDcgKzY1OTMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAorIAlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisrCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgorIAkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisgCisgCSAgbGlua2FsbGRlcGxpYnM9bm8KK0BAIC01Njk3LDcgKzY2MDYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAgIGNhc2UgJGRlcGxpYiBpbgorIAkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorLQkgICAgICAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCQkgOzsKKyAJICAgIGVzYWMKKyAJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KK0BAIC01NzA4LDEyICs2NjE4LDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCisgCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICAgZmkKKy0JICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKy0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKKyAJICBkb25lICMgZm9yIGRlcGxpYgorIAkgIGNvbnRpbnVlCisgCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorQEAgLTU3MjgsNyArNjYzOCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKyAJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorIAkgICAgICAqIiRhYnNkaXI6IiopIDs7CistCSAgICAgICopIHRlbXBfcnBhdGg9IiR0ZW1wX3JwYXRoJGFic2RpcjoiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAorQEAgLTU3NDAsNyArNjY1MCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTc0OSw3ICs2NjU5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTc3NCwxMiArNjY4NCwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGNhc2UgJGhvc3QgaW4KKyAJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqKQorIAkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCistCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorIAkgICAgICBuZWVkX3JlbGluaz1ubworIAkgICAgOzsKKyAJICAqKQorIAkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorLQkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKyAJICAgICAgbmVlZF9yZWxpbms9eWVzCisgCSAgICBmaQorIAkgICAgOzsKK0BAIC01ODE0LDcgKzY3MjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorIAkgICAgICAqIiAkYWJzZGlyICIqKSA7OworLQkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworIAkgICAgZXNhYworQEAgLTU4MjMsNyArNjczMyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICAgICAqIiAkbGliZGlyICIqKSA7OworLQkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworIAkgICAgZXNhYworQEAgLTU4MzUsNyArNjc0NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBzaGlmdAorIAkgICAgcmVhbG5hbWU9IiQxIgorIAkgICAgc2hpZnQKKy0JICAgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKyAJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworIAkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKyAJICAgICAgc29uYW1lPSIkZGxuYW1lIgorQEAgLTU4NDgsNyArNjc1OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisgCQk7OworIAkgICAgICBlc2FjCistCSAgICAgIGV2YWwgInNvbmFtZT1cIiRzb25hbWVfc3BlY1wiIgorKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisgCSAgICBlbHNlCisgCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorIAkgICAgZmkKK0BAIC01ODc3LDcgKzY3ODcsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgbGlua2xpYj0kbmV3bGliCisgCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisgCistCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisgCSAgICBhZGRfc2hsaWJwYXRoPQorIAkgICAgYWRkX2Rpcj0KKyAJICAgIGFkZD0KK0BAIC01OTMzLDcgKzY4NDMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCSAgY2FzZSAkbGliZGlyIGluCisgCQkgICAgW1xcL10qKQorLQkJICAgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorIAkJICAgICAgOzsKKyAJCSAgZXNhYworIAkJZmkKK0BAIC01OTU1LDcgKzY4NjUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisgCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKyAJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CistCSAgICAgICopIGNvbXBpbGVfc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkYWRkX3NobGlicGF0aDoiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorQEAgLTU5NjksMTMgKzY4NzksMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKyAJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisgCQkqIjokbGliZGlyOiIqKSA7OworLQkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisrCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworIAkJZXNhYworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICBmaQorIAorLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJICAgIGFkZF9zaGxpYnBhdGg9CisgCSAgICBhZGRfZGlyPQorIAkgICAgYWRkPQorQEAgLTU5ODksNyArNjg5OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorIAkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorIAkgICAgICAqIjokbGliZGlyOiIqKSA7OworLQkgICAgICAqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICBhZGQ9Ii1sJG5hbWUiCisgCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCitAQCAtNjAwMSwxMiArNjkxMSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaQorIAkgICAgZWxzZQorIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorLQkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisrCSAgICAgIGFkZF9kaXI9Ii1MJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisgCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQljYXNlICRsaWJkaXIgaW4KKyAJCSAgW1xcL10qKQorLQkJICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisrCQkgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKK0BAIC02MDgzLDI3ICs2OTkzLDMzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorIAkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OworLQkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworKwkJICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJHRlbXBfeHJwYXRoIjs7CisgCQkgICBlc2FjOzsKKy0JICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCisgCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisgCSAgZmkKKyAKKy0JICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKysJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgorIAkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorIAkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisgCSAgdG1wX2xpYnM9CisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKwkgICAgY2FzZSAkZGVwbGliIGluCisrICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisrICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7CisrICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKKysgICAgICAgICAgICBlc2FjCisrCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisrICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKy0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICBkb25lCisgCisgCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCitAQCAtNjExMyw4ICs3MDI5LDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorIAkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisgCSAgICAgICoubGEpCisrCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisrCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKyAJICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgorLQkJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKysJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorIAkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisgCQljYXNlICRkaXIgaW4KKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworQEAgLTYxMzAsNyArNzA0OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQljYXNlICRob3N0IGluCisgCQkqLSotZGFyd2luKikKKyAJCSAgZGVwZGVwbD0KKy0JCSAgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKysJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorIAkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCisgCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCisgCQkgICAgICBkZXBkZXBsPSR0bXAKK0BAIC02MTQxLDggKzcwNTksOCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgICBmaQorLQkJICAgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorLQkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKyAJCSAgICAgIHBhdGg9CisgCQkgICAgZmkKKyAJCSAgZmkKK0BAIC02MTUyLDcgKzcwNzAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICA7OworIAkJZXNhYworIAkJZWxzZQorLQkJICBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKysJCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKyAJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorIAkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorQEAgLTYxOTIsNyArNzExMCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworIAkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkZGlyICIqKSA7OworLQkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJICBuZXdsaWJfc2VhcmNoX3BhdGg9CitAQCAtNjIwNSw3ICs3MTIzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZmkKKyAJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorLQkgIGV2YWwgdG1wX2xpYnM9XCQkdmFyCisrCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisgCSAgbmV3X2xpYnM9CisgCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCisgCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworQEAgLTYyNTAsMTMgKzcxNjgsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIC1MKikKKyAJICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCisgCSAgICAgICoiICRkZXBsaWIgIiopIDs7CistCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CistCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorLQkgIGV2YWwgJHZhcj1cJHRtcF9saWJzCisrCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKKyAJZG9uZSAjIGZvciB2YXIKKyAgICAgICBmaQorICAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCitAQCAtNjI2OSw3ICs3MTg3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICA7OworIAllc2FjCisgCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKy0JICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorKwkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCisgCWZpCisgICAgICAgZG9uZQorICAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKK0BAIC02MzEwLDcgKzcyMjgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCistICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgorICAgICAgIDs7CisgCisgICAgIGxpYikKK0BAIC02MzE5LDggKzcyMzcsOCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGxpYiopCisgCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKKyAJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCWV2YWwgInNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIiIKKy0JZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKysJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisgCTs7CisgICAgICAgKikKKyAJdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCitAQCAtNjMzMCw4ICs3MjQ4LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisgCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorIAkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorLQkgIGV2YWwgInNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIiIKKy0JICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisgCWVsc2UKKyAJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisgCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CitAQCAtNjM0Niw3ICs3MjY0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBlY2hvCisgCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorIAkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorLQkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkb2JqcyIKKyAJZmkKKyAgICAgICBmaQorIAorQEAgLTY1NDQsNyArNzQ2Miw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZG9uZQorIAorIAkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKy0JICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiR7Y3VycmVudH0uMCIKKyAJICA7OworIAorIAlxbngpCitAQCAtNjYxMiwxMCArNzUzMCwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZpCisgCisgICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCistICAgICAgbGlib2Jqcz0iJGxpYm9ianMgJHN5bWZpbGVvYmoiCisrICAgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRzeW1maWxlb2JqIgorICAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgCistICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisgCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisgCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgorIAlyZW1vdmVsaXN0PQorQEAgLTY2MzEsNyArNzU0OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgICBjb250aW51ZQorIAkJIGZpCisgCSAgICAgICBmaQorLQkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisrCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisgCSAgICAgICA7OworIAkgICAgKikgOzsKKyAJICBlc2FjCitAQCAtNjY0Miw3ICs3NTYwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IGNvbnZlbmllbmNlIDsgdGhlbgorLQlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorKwlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKyAKKyAJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorIAlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKK0BAIC02NjU5LDEwICs3NTc3LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKyAJdGVtcF94cnBhdGg9CisgCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKy0JICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBmdW5jX2FwcGVuZCB0ZW1wX3hycGF0aCAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKyAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KK0BAIC02Njc2LDcgKzc1OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworIAljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgorIAkqIiAkbGliICIqKSA7OworLQkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAKK0BAIC02Njg2LDcgKzc2MDUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworIAljYXNlICIkZGxwcmVmaWxlcyAiIGluCisgCSoiICRsaWIgIiopIDs7CistCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorIAorQEAgLTY2OTgsNyArNzYxNyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICA7OworIAkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKyAJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCistCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisrCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorIAkgICAgOzsKKyAJICAqLSotbmV0YnNkKikKKyAJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorQEAgLTY3MTUsNyArNzYzNCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgKikKKyAJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisgCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCistCSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKKysJICAgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1sYyIKKyAJICAgIGZpCisgCSAgICA7OworIAkgIGVzYWMKK0BAIC02NzY0LDE4ICs3NjgzLDE4IEBAIEVPRgorIAkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSAgKiIgJGkgIiopCistCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICAgIGk9IiIKKyAJCSAgICA7OworIAkJICBlc2FjCisgCQlmaQorIAkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkJICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorLQkJICBldmFsICJkZXBsaWJfbWF0Y2hlcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiIKKysJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKyAJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKyAJCSAgZGVwbGliX21hdGNoPSQxCisgCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKy0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgIGVsc2UKKyAJCSAgICBkcm9wcGVkZGVwcz15ZXMKKyAJCSAgICBlY2hvCitAQCAtNjc4OSw3ICs3NzA4LDcgQEAgRU9GCisgCQlmaQorIAkJOzsKKyAJICAgICAgKikKKy0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorQEAgLTY4MDcsMTggKzc3MjYsMTggQEAgRU9GCisgCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSAgICAqIiAkaSAiKikKKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICAgICAgaT0iIgorIAkJICAgICAgOzsKKyAJCSAgICBlc2FjCisgCQkgIGZpCisgCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKy0JCSAgICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorLQkJICAgIGV2YWwgImRlcGxpYl9tYXRjaGVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgorKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKyAJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorIAkJICAgIGRlcGxpYl9tYXRjaD0kMQorIAkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICAgIGVsc2UKKyAJCSAgICAgIGRyb3BwZWRkZXBzPXllcworIAkJICAgICAgZWNobworQEAgLTY4NDAsNyArNzc1OSw3IEBAIEVPRgorIAkJZmkKKyAJCTs7CisgCSAgICAgICopCistCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKK0BAIC02ODU3LDE1ICs3Nzc2LDI3IEBAIEVPRgorIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSoiICRhX2RlcGxpYiAiKikKKy0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJICBhX2RlcGxpYj0iIgorIAkJICA7OworIAkJZXNhYworIAkgICAgICBmaQorIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorLQkJZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KKysJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKKysJCWVsc2UKKysJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKKysJCWZpCisrCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAorIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCistCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgorKwkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKKysJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisrCQkgICAgJG5vY2FzZWdsb2IKKysJCSAgZWxzZQorKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKysJCSAgZmkKKyAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworIAkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KKyAJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CitAQCAtNjg4NSwxMCArNzgxNiwxMCBAQCBFT0YKKyAJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworIAkJCWVzYWMKKyAJCSAgICAgIGRvbmUKKy0JCSAgICAgIGlmIGV2YWwgIiRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIiIDI+L2Rldi9udWxsIHwKKysJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisgCQkJICRTRUQgLWUgMTBxIHwKKyAJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJCQlhX2RlcGxpYj0iIgorIAkJCWJyZWFrIDIKKyAJCSAgICAgIGZpCitAQCAtNjkxMyw3ICs3ODQ0LDcgQEAgRU9GCisgCSAgICAgIDs7CisgCSAgICAqKQorIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCSAgICAgIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KK0BAIC02OTI5LDIwICs3ODYwLDIwIEBAIEVPRgorIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKyAJCSoiICRhX2RlcGxpYiAiKikKKy0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJICBhX2RlcGxpYj0iIgorIAkJICA7OworIAkJZXNhYworIAkgICAgICBmaQorIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorLQkJZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisgCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisgCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKyAJCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAorIAkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCistCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJICAgICAgYV9kZXBsaWI9IiIKKyAJCSAgICAgIGJyZWFrIDIKKyAJCSAgICBmaQorQEAgLTY5NjcsNyArNzg5OCw3IEBAIEVPRgorIAkgICAgICA7OworIAkgICAgKikKKyAJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKy0JICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkgICAgICA7OworIAkgICAgZXNhYworIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCitAQCAtNzA3MSw3ICs4MDAyLDcgQEAgRU9GCisgCSopCisgCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKyAJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCistCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKysJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzA4MSwxMCArODAxMiwxMCBAQCBFT0YKKyAJLUwqKQorIAkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorIAkgICoiICRkZXBsaWIgIiopIDs7CistCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJICBlc2FjCisgCSAgOzsKKy0JKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorQEAgLTcxMDEsMTAgKzgwMzIsMTIgQEAgRU9GCisgCSAgaGFyZGNvZGVfbGliZGlycz0KKyAJICBkZXBfcnBhdGg9CisgCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKy0JICB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKysJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKyAJCWVsc2UKK0BAIC03MTEzLDE4ICs4MDQ2LDE4IEBAIEVPRgorIAkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisgCQkgICAgOzsKKyAJCSAgKikKKy0JCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCSAgZXNhYworIAkJZmkKKyAJICAgICAgZWxzZQorLQkJZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisrCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCQlmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKyAJICAgICAgZmkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZWQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZG9uZQorQEAgLTcxMzMsNDAgKzgwNjYsMzggQEAgRU9GCisgCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCistCSAgICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIiCisrCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgorIAkgICAgZWxzZQorLQkgICAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAJICAgIGZpCisgCSAgZmkKKyAJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorIAkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICAgIHJwYXRoPQorIAkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKy0JICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgICBkb25lCistCSAgICBldmFsICRydW5wYXRoX3Zhcj1cJHJwYXRoXCQkcnVucGF0aF92YXIKKy0JICAgIGV4cG9ydCAkcnVucGF0aF92YXIKKysJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorIAkgIGZpCisgCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKKyAJZmkKKyAKKyAJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgorLQl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKysJdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorIAlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorLQkgIGV2YWwgJHNobGlicGF0aF92YXI9XCRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyCistCSAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisrCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorIAlmaQorIAorIAkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKy0JZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQlldmFsICJsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgorKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorKwlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKKyAJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisgCXNoaWZ0CisgCXJlYWxuYW1lPSIkMSIKKyAJc2hpZnQKKyAKKyAJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorLQkgIGV2YWwgInNvbmFtZT1cIiRzb25hbWVfc3BlY1wiIgorKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKyAJZWxzZQorIAkgIHNvbmFtZT0iJHJlYWxuYW1lIgorIAlmaQorQEAgLTcxNzgsNyArODEwOSw3IEBAIEVPRgorIAlsaW5rbmFtZXM9CisgCWZvciBsaW5rCisgCWRvCistCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtuYW1lcyAiICRsaW5rIgorIAlkb25lCisgCisgCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCitAQCAtNzE4OSw3ICs4MTIwLDcgQEAgRU9GCisgCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisgCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCistCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMiCisrCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCisgCWZpCisgCisgCW9yaWdfZXhwb3J0X3N5bWJvbHM9CitAQCAtNzIyMCwxMyArODE1MSw0NSBAQCBFT0YKKyAJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisgCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisgCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKy0JICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisrCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KKyAJICAgICAgSUZTPSIkc2F2ZV9pZnMiCistCSAgICAgIGV2YWwgImNtZD1cIiRjbWRcIiIKKy0JICAgICAgZnVuY19sZW4gIiAkY21kIgorLQkgICAgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorLQkgICAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKysJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKKysJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCisrCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCisrCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCisrCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcworKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKKysJCSAgZnVuY19sZW4gIiAkY21kIgorKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorKwkJICA7OworKwkJKikKKysJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KKysJCSAgOzsKKysJICAgICAgZXNhYworKwkgICAgICBpZiB0ZXN0ICIkdHJ5X25vcm1hbF9icmFuY2giID0geWVzIFwKKysJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCisrCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQorKwkgICAgICB0aGVuCisrCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisrCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KKysJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisrCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisrCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKKysJCXNhdmVfb3V0cHV0PSRvdXRwdXQKKysJCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQorKwkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKysJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJE5NIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKysJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKysJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCQkgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorKwkJZG9uZSA+ICIkb3V0cHV0IgorKwkJZXZhbCBjbWQ9XCIkY21kMVwiCisgCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisrCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisrCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKKyAJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisgCSAgICAgIGVsc2UKKyAJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorQEAgLTcyNDgsNyArODIxMSw3IEBAIEVPRgorIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisgCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCistCSAgJG9wdF9kcnlfcnVuIHx8ICRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyIKKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKyAJZmkKKyAKKyAJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KK0BAIC03MjYwLDcgKzgyMjMsNyBAQCBFT0YKKyAJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorIAkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisgCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCistCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKyAJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKyAJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworIAlmaQorQEAgLTcyNzAsNyArODIzMyw3IEBAIEVPRgorIAkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorIAkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKyAJICAqKQorLQkgICAgdG1wX2RlcGxpYnM9IiR0bXBfZGVwbGlicyAkdGVzdF9kZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCB0bXBfZGVwbGlicyAiICR0ZXN0X2RlcGxpYiIKKyAJICAgIDs7CisgCSAgZXNhYworIAlkb25lCitAQCAtNzI4Niw0MyArODI0OSw0MyBAQCBFT0YKKyAJICBmaQorIAkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKyAJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworLQkgICAgZXZhbCAibGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIiIKKysJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBlbHNlCisgCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgICAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCistCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgCSAgZmkKKyAJZmkKKyAKKyAJaWYgdGVzdCAiJHRocmVhZF9zYWZlIiA9IHllcyAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgorLQkgIGV2YWwgImZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIiCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgorIAlmaQorIAorIAkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKy0JaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCistCSAgJG9wdF9kcnlfcnVuIHx8IChjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKSB8fCBleGl0ICQ/CisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisgCWZpCisgCisgCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKyAJaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKyAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIiCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorIAkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisgCSAgZWxzZQorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIiCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCisgCSAgICBjbWRzPSRtb2R1bGVfY21kcworIAkgIGZpCisgCWVsc2UKKyAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorIAkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworIAkgIGVsc2UKKy0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisgCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKyAJICBmaQorIAlmaQorQEAgLTczNjYsMTAgKzgzMjksMTMgQEAgRU9GCisgCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKKyAJICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworIAkgICAgZG8KKy0JICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKysJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisgCSAgICBkb25lCisgCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0CistCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisrCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgCSAgZWxpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIlgkZmlsZV9saXN0X3NwZWMiICE9IFg7IHRoZW4KKyAJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKyAJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKK0BAIC03MzgzLDE1ICs4MzQ5LDE3IEBAIEVPRgorIAkgICAgZmkKKyAJICAgIGZvciBvYmoKKyAJICAgIGRvCistCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisrCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorIAkgICAgZG9uZQorLQkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorLQkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJG91dHB1dFwiCisrCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgorIAkgIGVsc2UKKyAJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisgCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisgCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorLQkgICAgICBldmFsICJ0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIiIKKysJICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorIAkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisgCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorIAkgICAgICBsZW49JGxlbjAKK0BAIC03NDExLDEyICs4Mzc5LDEyIEBAIEVPRgorIAkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisgCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKyAJCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAorLQkJICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIiCisrCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCisgCQkgIGVsc2UKKyAJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorIAkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisgCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCistCQkgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIiIKKysJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKyAJCSAgZmkKKyAJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisgCQkgIGZ1bmNfYXJpdGggJGsgKyAxCitAQCAtNzQzMywxMSArODQwMSwxMSBAQCBFT0YKKyAJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisgCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorIAkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKy0JICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiCisgCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCistCSAgICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIiCisrCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgorIAkgICAgICBmaQorLQkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKyAKKyAJICAgIGVsc2UKKyAJICAgICAgb3V0cHV0PQorQEAgLTc0NTAsOSArODQxOCw5IEBAIEVPRgorIAkgICAgICBsaWJvYmpzPSRvdXRwdXQKKyAJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CistCSAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIiCisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgorIAkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorLQkJZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiIgorKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKyAJICAgICAgZmkKKyAJICAgIGZpCisgCitAQCAtNzQ3MSw3ICs4NDM5LDcgQEAgRU9GCisgCQlsdF9leGl0PSQ/CisgCisgCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKy0JCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorIAkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisgCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKK0BAIC03NDkyLDcgKzg0NjAsNyBAQCBFT0YKKyAJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisgCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIgorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKyAJICAgIGZpCisgCisgCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KK0BAIC03NTA0LDcgKzg0NzIsNyBAQCBFT0YKKyAJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKyAJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKyAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCistCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKysJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorIAkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKyAJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKyAJICAgIGZpCitAQCAtNzUxNSw3ICs4NDgzLDcgQEAgRU9GCisgCSAgb3V0cHV0PSRzYXZlX291dHB1dAorIAorIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorLQkgICAgZXZhbCAibGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIiIKKysJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBmaQorIAkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCitAQCAtNzUzOSwyMyArODUwNywyMyBAQCBFT0YKKyAKKyAJaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgorIAkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCistCSAgZXZhbCAiY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiIgorKwkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCisgCWZpCisgCisgCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKy0JICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJZmkKKyAKKyAJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisgCWZvciBjbWQgaW4gJGNtZHM7IGRvCisgCSAgSUZTPSIkc2F2ZV9pZnMiCistCSAgZXZhbCAiY21kPVwiJGNtZFwiIgorKwkgIGV2YWwgY21kPVwiJGNtZFwiCisgCSAgJG9wdF9zaWxlbnQgfHwgeworIAkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorIAkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorQEAgLTc1NjQsNyArODUzMiw3IEBAIEVPRgorIAkgICAgbHRfZXhpdD0kPworIAorIAkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CistCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKyAJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorIAkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKK0BAIC03NTc2LDggKzg1NDQsOCBAQCBFT0YKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCisgCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKy0JICAkb3B0X2RyeV9ydW4gfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpIHx8IGV4aXQgJD8KKysJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKyAKKyAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCitAQCAtNzY1NiwxNyArODYyNCwyMCBAQCBFT0YKKyAKKyAgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisgCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKy0JICBldmFsICJ0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorIAkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKKyAJZWxzZQorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKKy0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorIAkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJZmkKKyAgICAgICBmaQorIAorKyAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCisrICAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIGxpYm9ianM9IiRub25fcGljX29iamVjdHMiCisrCisgICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisgCitAQCAtNzY5MCw3ICs4NjYxLDcgQEAgRU9GCisgCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0CisgCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisgCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKy0JIyAkb3B0X2RyeV9ydW4gfHwgZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIHx8IGV4aXQgJD8KKysJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CisgCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgIGZpCisgCitAQCAtNzc0MCw4ICs4NzExLDggQEAgRU9GCisgCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKyAJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisgCSAgICAxMC5bMDEyM10pCistCSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCistCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKysJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorKwkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorIAkgICAgOzsKKyAJICBlc2FjCisgCWZpCitAQCAtNzc2MSw3ICs4NzMyLDcgQEAgRU9GCisgCSopCisgCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgorIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKy0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC03NzcxLDE3ICs4NzQyLDE3IEBAIEVPRgorIAktTCopCisgCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisgCSAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAkgIGVzYWMKKyAJICA7OworLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKyAKKyAKKy0gICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKKy0gICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKKysgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgorKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkZmluYWxpemVfZGVwbGlicyIKKyAKKyAgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgorIAkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCitAQCAtNzc4OSw3ICs4NzYwLDcgQEAgRU9GCisgCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZG9uZQorICAgICAgIGZpCitAQCAtNzgwOCwxOCArODc3OSwxOCBAQCBFT0YKKyAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorIAkJOzsKKyAJICAgICAgKikKKy0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisrCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlmaQorIAljYXNlICRob3N0IGluCitAQCAtNzgyOCwxMiArODc5OSwxMiBAQCBFT0YKKyAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKyAJICAqIjokbGliZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKKysJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGxpYmRpciI7OworIAkgIGVzYWMKKyAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKyAJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKyAJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKysJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTc4NDIsNyArODgxMyw3IEBAIEVPRgorICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorIAkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCistCWV2YWwgInJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgIGZpCisgICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorIAorQEAgLTc4NTksMTggKzg4MzAsMTggQEAgRU9GCisgCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCTs7CisgCSAgICAgICopCistCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZWxzZQorLQkgICAgZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKyAJICBmaQorIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3Blcm1fcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZmkKKyAgICAgICBkb25lCitAQCAtNzg3OCw3ICs4ODQ5LDcgQEAgRU9GCisgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisgCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKy0JZXZhbCAicnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgZmkKKyAgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorIAorQEAgLTc5MjEsNiArODg5MiwxMiBAQCBFT0YKKyAJZXhpdF9zdGF0dXM9MAorIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworIAorKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKysJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisrCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKysJZmkKKysKKyAJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKyAJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgorIAkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCitAQCAtNzk0Myw3ICs4OTIwLDcgQEAgRU9GCisgCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICBycGF0aD0KKyAJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorIAkgIGRvbmUKKyAJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisgCWZpCitAQCAtNzk1MSw3ICs4OTI4LDcgQEAgRU9GCisgCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKyAJICBycGF0aD0KKyAJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorIAkgIGRvbmUKKyAJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorIAlmaQorQEAgLTc5NjYsNiArODk0MywxMyBAQCBFT0YKKyAJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisgCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorIAlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisrCisrCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKwlmaQorKworIAlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgICBmaQorIAorQEAgLTc5OTksNiArODk4MywxMiBAQCBFT0YKKyAKKyAgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisgCisrICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisrCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKKysJcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKysgICAgICBmaQorKworICAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorIAorQEAgLTgwOTYsNyArOTA4Niw3IEBAIEVPRgorIAllbHNlCisgCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisgCSAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIjsgdGhlbgorLQkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCisrCSAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCisgCSAgZmkKKyAJZmkKKyAJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKK0BAIC04MTA0LDEwICs5MDk0LDEwIEBAIEVPRgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorIAlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKKy0Jb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisrCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAgICAgICBmaQorIAorICAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorQEAgLTgxMTgsMTAgKzkxMDgsMTAgQEAgRU9GCisgCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcworIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKy0JICBvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgCWZpCisgCisgCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQorQEAgLTgxMzksNyArOTEyOSw3IEBAIEVPRgorIAllbHNlCisgCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCisgCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisgCSAgb2xkb2Jqcz0KK0BAIC04MTYzLDE4ICs5MTUzLDI4IEBAIEVPRgorIAkJZXNhYworIAkgICAgICBkb25lCisgCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKy0JICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgorKwkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgorIAkgICAgICA7OworLQkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZmkKKy0JZXZhbCAiY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAKKyAJZnVuY19sZW4gIiAkY21kcyIKKyAJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKyAJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisgCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCisrCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgorKwkgIGZvciBvYmogaW4gJG9sZG9ianMKKysJICBkbworKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKysJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCisrCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKKysJICBvbGRvYmpzPSIgJGFyY2hpdmVyX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisrCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworIAllbHNlCisgCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKyAJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCitAQCAtODE4OSw3ICs5MTg5LDcgQEAgRU9GCisgCSAgZG8KKyAJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKyAJICBkb25lCistCSAgZXZhbCAidGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisgCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisgCSAgbGVuPSRsZW4wCitAQCAtODIwOCw3ICs5MjA4LDcgQEAgRU9GCisgCQlSQU5MSUI9JHNhdmVfUkFOTElCCisgCSAgICAgIGZpCisgCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorLQkgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisgCSAgICAgIG9iamxpc3Q9CisgCSAgICAgIGxlbj0kbGVuMAorIAkgICAgZmkKK0BAIC04MjE2LDkgKzkyMTYsOSBAQCBFT0YKKyAJICBSQU5MSUI9JHNhdmVfUkFOTElCCisgCSAgb2xkb2Jqcz0kb2JqbGlzdAorIAkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCistCSAgICBldmFsICJjbWRzPVwiXCRjb25jYXRfY21kc1wiIgorKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCisgCSAgZWxzZQorLQkgICAgZXZhbCAiY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisgCSAgZmkKKyAJZmkKKyAgICAgICBmaQorQEAgLTgyNjgsMTIgKzkyNjgsMjMgQEAgRU9GCisgCSAgICAgICoubGEpCisgCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisrCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisgCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKysJCTs7CisrCSAgICAgIC1MKikKKysJCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgorKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisgCQk7OworLQkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgLVIqKQorKwkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKysJCTs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKK0BAIC04Mjg0LDEyICs5Mjk1LDE0IEBAIEVPRgorIAkgICAgICAqLmxhKQorIAkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKysJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKysKKyAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQluZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorKwkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorIAkJOzsKKy0JICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorQEAgLTgzMDMsMTAgKzkzMTYsMTEgQEAgRU9GCisgCQkjIHRoZSBsaWJyYXJ5OgorIAkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKyAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtODMxOCw3ICs5MzMyLDcgQEAgRU9GCisgCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKyAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKyAJICAgICAgZXNhYworLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKKyAJICAgIGRvbmUKKyAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorIAkgICAgbmV3ZGxwcmVmaWxlcz0KK0BAIC04MzI3LDcgKzkzNDEsNyBAQCBFT0YKKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworIAkgICAgICBlc2FjCistCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgorIAkgICAgZG9uZQorIAkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgCSAgZmkKK0BAIC04NDEyLDcgKzk0MjYsNyBAQCByZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyB9CisgCisteyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgorK3sgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgorICAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KKyAKKyAKK0BAIC04NDMyLDkgKzk0NDYsOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgIGZvciBhcmcKKyAgICAgZG8KKyAgICAgICBjYXNlICRhcmcgaW4KKy0gICAgICAtZikgUk09IiRSTSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKy0gICAgICAtKikgUk09IiRSTSAkYXJnIiA7OworLSAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKKysgICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKysgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OworKyAgICAgICopIGZ1bmNfYXBwZW5kIGZpbGVzICIgJGFyZyIgOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmUKKyAKK0BAIC04NDQzLDI0ICs5NDU3LDIzIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAKKyAgICAgcm1kaXJzPQorIAorLSAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgorICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorLQlvYmpkaXI9IiRvcmlnb2JqZGlyIgorKwlvZGlyPSIkb2JqZGlyIgorICAgICAgIGVsc2UKKy0Jb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorKwlvZGlyPSIkZGlyLyRvYmpkaXIiCisgICAgICAgZmkKKyAgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKKysgICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCisgCistICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworLSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisrICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKysgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KKyAJY2FzZSAiICRybWRpcnMgIiBpbgorLQkgICoiICRvYmpkaXIgIiopIDs7CistCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisrCSAgKiIgJG9kaXIgIiopIDs7CisrCSAgKikgZnVuY19hcHBlbmQgcm1kaXJzICIgJG9kaXIiIDs7CisgCWVzYWMKKyAgICAgICBmaQorIAorQEAgLTg0ODYsMTggKzk0OTksMTcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorIAkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCisgCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgorIAkgIGRvbmUKKy0JICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKKyAKKy0JICBjYXNlICIkbW9kZSIgaW4KKysJICBjYXNlICIkb3B0X21vZGUiIGluCisgCSAgY2xlYW4pCistCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKy0JICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKyAJICAgICoiICRkbG5hbWUgIiopIDs7CistCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7CisrCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKKyAJICAgIGVzYWMKKy0JICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9aSIKKysJICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9aSIKKyAJICAgIDs7CisgCSAgdW5pbnN0YWxsKQorIAkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCitAQCAtODUyNSwxOSArOTUzNywxOSBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisgCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisgCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKyAJICBmaQorIAorIAkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKyAJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisgCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRub25fcGljX29iamVjdCIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKKyAJICBmaQorIAlmaQorIAk7OworIAorICAgICAgICopCistCWlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuIDsgdGhlbgorKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCisgCSAgbm9leGVuYW1lPSRuYW1lCisgCSAgY2FzZSAkZmlsZSBpbgorIAkgICouZXhlKQorQEAgLTg1NDcsNyArOTU1OSw3IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisgCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRmaWxlIgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmaWxlIgorIAkgICAgOzsKKyAJICBlc2FjCisgCSAgIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgYSBsaWJ0b29sIHByb2dyYW0uCitAQCAtODU1Niw3ICs5NTY4LDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKyAJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisgCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisgCSAgICBlbHNlCisgCSAgICAgIHJlbGlua19jb21tYW5kPQorIAkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKK0BAIC04NTY0LDEyICs5NTc2LDEyIEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAKKyAJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisgCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcworLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4ke29iamV4dH0iCisgCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0ke25vZXhlbmFtZX0uYyIKKyAJICAgIGZpCisgCSAgZmkKKyAJZmkKK0BAIC04NTc3LDcgKzk1ODksNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgICAgZXNhYworICAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJworICAgICBkb25lCistICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCisgCisgICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCitAQCAtODU4OSwxNiArOTYwMCwxNiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLXsgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB9ICYmCisreyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorIAorLXRlc3QgLXogIiRtb2RlIiAmJiB7CisrdGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7CisgICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKKyB9CisgCisgdGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCistICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisrICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorIAorIGlmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorZGlmZiAtLWdpdCBhL2x0b3B0aW9ucy5tNCBiL2x0b3B0aW9ucy5tNAoraW5kZXggNWVmMTJjZS4uMTdjZmQ1MSAxMDA2NDQKKy0tLSBhL2x0b3B0aW9ucy5tNAorKysrIGIvbHRvcHRpb25zLm00CitAQCAtOCw3ICs4LDcgQEAKKyAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNiBsdG9wdGlvbnMubTQKKysjIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorIAorICMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCisgQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorZGlmZiAtLWdpdCBhL2x0dmVyc2lvbi5tNCBiL2x0dmVyc2lvbi5tNAoraW5kZXggYmY4N2Y3Ny4uOWM3YjVkNCAxMDA2NDQKKy0tLSBhL2x0dmVyc2lvbi5tNAorKysrIGIvbHR2ZXJzaW9uLm00CitAQCAtNywxNyArNywxNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKysjIEBjb25maWd1cmVfaW5wdXRACisgCistIyBzZXJpYWwgMzEzNCBsdHZlcnNpb24ubTQKKysjIHNlcmlhbCAzMjkzIGx0dmVyc2lvbi5tNAorICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKyAKKy1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjIuN2FdKQorLW00X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMxMzRdKQorK200X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNF0pCisrbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzI5M10pCisgCisgQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKKy1bbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrW21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIF9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQorIF9MVF9ERUNMKCwgbWFjcm9fcmV2aXNpb24sIDApCisgXSkKK2RpZmYgLS1naXQgYS9sdH5vYnNvbGV0ZS5tNCBiL2x0fm9ic29sZXRlLm00CitpbmRleCBiZjkyYjVlLi5jNTczZGE5IDEwMDY0NAorLS0tIGEvbHR+b2Jzb2xldGUubTQKKysrKyBiL2x0fm9ic29sZXRlLm00CitAQCAtNyw3ICs3LDcgQEAKKyAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgNCBsdH5vYnNvbGV0ZS5tNAorKyMgc2VyaWFsIDUgbHR+b2Jzb2xldGUubTQKKyAKKyAjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyAjCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUgYi9vcGNvZGVzL2NvbmZpZ3VyZQoraW5kZXggYzljMDRjZS4uMzExNDFkOSAxMDA3NTUKKy0tLSBhL29wY29kZXMvY29uZmlndXJlCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZQorQEAgLTY0OCw2ICs2NDgsOSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKythY19jdF9BUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzYwLDYgKzc2Myw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV90YXJnZXRzCisgZW5hYmxlX3dlcnJvcgorQEAgLTE0MjAsNiArMTQyNCw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAKKyBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorQEAgLTUxMTAsOCArNTExNiw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01MTUxLDcgKzUxNTcsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01ODM3LDggKzU4NDMsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTg4Nyw2ICs1ODkzLDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTAzLDYgKzU5ODMsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYwNzEsNyArNjE1Niw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MjI1LDYgKzYzMTEsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MjQwLDkgKzYzNDEsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYyNTgsNyArNjUxMiw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYyNzgsMTEgKzY1MzIsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjI5OCw3ICs2NTU2LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzMTcsNiArNjU3NSwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjMyOCwxNiArNjU5MCw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY2NzksOCArNjk5Nyw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjcxNiw2ICs3MDM0LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY3NTcsNiArNzA3NiwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02NzY4LDcgKzcwOTksNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02Nzk0LDggKzcxMjUsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02ODA1LDggKzcxMzYsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02ODQzLDYgKzcxNzQsMTYgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02ODY0LDYgKzcyMDUsNDUgQEAgZmkKKyAKKyAKKyAKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKysKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworQEAgLTcwNzAsNiArNzQ1MCwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzYzMyw2ICs4MTMwLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTc3OTgsNyArODI5Nyw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC03ODg3LDcgKzgzODcsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTgxODUsOCArODY4NSw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODM1Miw2ICs4ODUwLDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODQxNCw3ICs4OTE4LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTg0NzEsMTMgKzg5NzUsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODUzOCw2ICs5MDQ2LDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtODg4OCw3ICs5NDAxLDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtODkzNiw3ICs5NDUwLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtODk4NywxMiArOTUwMSwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05MDA2LDggKzk1MjAsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTAyNSw4ICs5NTM5LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkwNzIsOCArOTU4Niw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MjAzLDcgKzk3MTcsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTIxNiwyMiArOTczNiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTI0Myw3ICs5NzcwLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MjU2LDIyICs5Nzg5LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTMxNiwyMCArOTg1Niw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTkzOTAsNyArOTk3Myw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTkzOTgsNyArOTk4MSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk0MTQsNyArOTk5Nyw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05NDM4LDEwICsxMDAyMSwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTk1MjAsMjMgKzEwMTAzLDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05NjIxLDcgKzEwMjE3LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTY0MCw5ICsxMDIzNiw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDIxOCw4ICsxMDgxNCw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDI1MiwxMyArMTA4NDksNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMzUwLDcgKzExMDA1LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExMTkwLDEwICsxMTg0NSwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMjk2LDEwICsxMTk1MSwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyNDUwLDcgKzEzMTA1LDcgQEAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAjIHNpbmNlIGxpYmJmZCBtYXkgbm90IHB1bGwgaW4gdGhlIGVudGlyZXR5IG9mIGxpYmliZXJ0eS4KKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAgIGNhc2UgIiR7aG9zdH0iIGluCitAQCAtMTM0MjIsMTMgKzE0MDc3LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTM0NDMsMTQgKzE0MTA1LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzNDgzLDEyICsxNDE0OCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzU0Myw4ICsxNDIwOCwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTM1NTQsMTIgKzE0MjI0LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xMzU3NSw3ICsxNDI0Nyw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTEzNjExLDYgKzE0MjgyLDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNDM2Nyw3ICsxNTAzOSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTQ0NzAsMTkgKzE1MTQzLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE0NTEyLDYgKzE1MjA4LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE0NTIxLDYgKzE1MjIzLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNDYzNSwxMiArMTUzNDAsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTQ3MjcsOSArMTU0MzIsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNDc0NSw2ICsxNTQ0Nyw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTQ3NzcsMjEwICsxNTQ4MiwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9jb25maWd1cmUuYWMgYi9vcGNvZGVzL2NvbmZpZ3VyZS5hYworaW5kZXggYjkzZTg1NS4uNDNiYTk3NiAxMDA2NDQKKy0tLSBhL29wY29kZXMvY29uZmlndXJlLmFjCisrKysgYi9vcGNvZGVzL2NvbmZpZ3VyZS5hYworQEAgLTE2Nyw3ICsxNjcsNyBAQCBjaGFuZ2VxdW90ZSgsKWRubAorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAgIGNhc2UgIiR7aG9zdH0iIGluCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzNzYzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNzQzZjQyYWFlY2IxYWI4OWViYTBlYWY1ZTg4ZWQ2N2JiZjNiYTMwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6Mzc6MTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xM10gQWRkIHRoZSBhcm12NWUgYXJjaGl0ZWN0dXJlIHRvIGJpbnV0aWxzCisKK0JpbnV0aWxzIGhhcyBhIGNvbW1lbnQgdGhhdCBpbmRpY2F0ZXMgaXQgaXMgc3VwcG9zZWQgdG8gbWF0Y2ggZ2NjIGZvcgorYWxsIG9mIHRoZSBzdXBwb3J0ICItbWFyY2g9IiBzZXR0aW5ncywgYnV0IGl0IHdhcyBsYWNraW5nIHRoZSBhcm12NWUgc2V0dGluZy4KK1RoaXMgd2FzIGEgc2ltcGxlIHdheSB0byBhZGQgaXQsIGFzIHRodW1iIGluc3RydWN0aW9ucyBzaG91bGRuJ3QgYmUgZ2VuZXJhdGVkCitieSB0aGUgY29tcGlsZXIgYW55d2F5LgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorVXBzdHJlYW0gbWFpbnRhaW5lciBpbmRpY2F0ZWQgdGhhdCB3ZSBzaG91bGQgbm90IGJlIHVzaW5nIGFybXY1ZSwgZXZlbgordGhvdWdoIGl0IGlzIGEgbGVnYWwgYXJjaGljdHVyZSBkZWZpbmVkIGJ5IG91ciBnY2MuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnYXMvY29uZmlnL3RjLWFybS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlnL3RjLWFybS5jIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYworaW5kZXggMmRiNmMyZC4uYWI0ODE2OCAxMDA2NDQKKy0tLSBhL2dhcy9jb25maWcvdGMtYXJtLmMKKysrKyBiL2dhcy9jb25maWcvdGMtYXJtLmMKK0BAIC0yNDQ2Myw2ICsyNDQ2Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX2FyY2hfb3B0aW9uX3RhYmxlIGFybV9hcmNoc1tdID0KKyAgIEFSTV9BUkNIX09QVCAoImFybXY0dCIsCUFSTV9BUkNIX1Y0VCwJIEZQVV9BUkNIX0ZQQSksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NHR4bSIsCUFSTV9BUkNIX1Y0VHhNLAkgRlBVX0FSQ0hfRlBBKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1IiwJQVJNX0FSQ0hfVjUsCSBGUFVfQVJDSF9WRlApLAorKyAgQVJNX0FSQ0hfT1BUICgiYXJtdjVlIiwJQVJNX0FSQ0hfVjVURSwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXQiLAlBUk1fQVJDSF9WNVQsCSBGUFVfQVJDSF9WRlApLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjV0eG0iLAlBUk1fQVJDSF9WNVR4TSwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXRlIiwJQVJNX0FSQ0hfVjVURSwJIEZQVV9BUkNIX1ZGUCksCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWU2OGZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNGQzYTlmNmRiNjA0MDU1MzQ4MzMyYjU2ODg5ZDQ2NmMwNThmYTVmMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6Mzk6MDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xM10gZG9uJ3QgbGV0IHRoZSBkaXN0cm8gY29tcGlsZXIgcG9pbnQgdG8gdGhlIHdyb25nCisgaW5zdGFsbGF0aW9uIGxvY2F0aW9uCisKK1RoYW5rcyB0byBSUCBmb3IgaGVscGluZyBmaW5kIHRoZSBzb3VyY2UgY29kZSBjYXVzaW5nIHRoZSBpc3N1ZS4KKworMjAxMC8wOC8xMworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmliZXJ0eS9NYWtlZmlsZS5pbiB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliaWJlcnR5L01ha2VmaWxlLmluIGIvbGliaWJlcnR5L01ha2VmaWxlLmluCitpbmRleCA5Yjg3NzIwLi5mZjQzZjUzIDEwMDY0NAorLS0tIGEvbGliaWJlcnR5L01ha2VmaWxlLmluCisrKysgYi9saWJpYmVydHkvTWFrZWZpbGUuaW4KK0BAIC0zNjEsNyArMzYxLDggQEAgaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorICMgbXVsdGlsaWItc3BlY2lmaWMgZmxhZ3MsIGl0J3Mgb3ZlcnJpZGRlbiBieSBGTEFHU19UT19QQVNTIGZyb20gdGhlCisgIyBkZWZhdWx0IG11bHRpbGliLCBzbyB3ZSBoYXZlIHRvIHRha2UgQ0ZMQUdTIGludG8gYWNjb3VudCBhcyB3ZWxsLAorICMgc2luY2UgaXQgd2lsbCBiZSBwYXNzZWQgdGhlIG11bHRpbGliIGZsYWdzLgorLU1VTFRJT1NESVIgPSBgJChDQykgJChDRkxBR1MpIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCisrI01VTFRJT1NESVIgPSBgJChDQykgJChDRkxBR1MpIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCisrTVVMVElPU0RJUiA9ICIiCisgaW5zdGFsbF90b19saWJkaXI6IGFsbAorIAlpZiB0ZXN0IC1uICIke3RhcmdldF9oZWFkZXJfZGlyfSI7IHRoZW4gXAorIAkJJHtta2luc3RhbGxkaXJzfSAkKERFU1RESVIpJChsaWJkaXIpLyQoTVVMVElPU0RJUik7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDA3OTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LVVwc3RyZWFtLVN0YXR1cy1JbmFwcHJvcHJpYXRlLWRpc3RyaWJ1dGlvbi1jb2Rlc291cmMucGF0Y2gKQEAgLTAsMCArMSwyNzggQEAKK0Zyb20gZTAyZTExOWIyNzhjM2Y0MDRlOTc2NjllNzE4MGNhYzk0NDEzNGM5MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NDE6MDQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8xM10gVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246CisgY29kZXNvdXJjZXJ5XQorCitQYXRjaCBvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgTWFyayBIYXRsZSwgZm9yd2FyZC1wb3J0ZWQgdG8KK2JpbnV0aWxzIDIuMjEgYnkgU2NvdHQgR2FybWFuLgorCitwdXJwb3NlOiAgd2FybiBmb3IgdXNlcyBvZiBzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nCisKK0NvZGUgTWVyZ2VkIGZyb20gU291cmNlcnkgRysrIGJpbnV0aWxzIDIuMTkgLSA0LjQtMjc3CisKKzIwMDgtMDctMDIgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgbGQvCisgICAgKiBsZC5oIChhcmdzX3R5cGUpOiBBZGQgZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkLnRleGluZm8gKC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcyk6IERvY3VtZW50LgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogQ2hlY2sKKyAgICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZQorICAgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGV4c3VwLmMgKGVudW0gb3B0aW9uX3ZhbHVlcyk6IEFkZAorICAgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLgorICAgIChsZF9vcHRpb25zKTogQWRkIC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy4KKyAgICAocGFyc2VfYXJncyk6IEhhbmRsZSBuZXcgb3B0aW9uLgorCisyMDA3LTA2LTEzICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIGxkLworICAgICogY29uZmlnLmluOiBSZWdlbmVyYXRlLgorICAgICogbGQuaCAoYXJnc190eXBlKTogQWRkIHBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZC50ZXhpbmZvICgtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBEb2N1bWVudC4KKyAgICAqIGxkZmlsZS5jIChsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCk6IENoZWNrCisgICAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZG1haW4uYyAobWFpbik6IEluaXRpYWxpemUKKyAgICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxleHN1cC5jIChlbnVtIG9wdGlvbl92YWx1ZXMpOiBBZGQKKyAgICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUy4KKyAgICAobGRfb3B0aW9ucyk6IEFkZCAtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMuCisgICAgKHBhcnNlX2FyZ3MpOiBIYW5kbGUgbmV3IG9wdGlvbi4KKworMjAwNy0wNC0yMCAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICBNZXJnZSBmcm9tIFNvdXJjZXJ5IEcrKyBiaW51dGlscyAyLjE3OgorCisgICAgMjAwNy0wMy0yMCAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisgICAgQmFzZWQgb24gcGF0Y2ggYnkgTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPi4KKyAgICBsZC8KKyAgICAqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcyk6IE5ldyBvcHRpb24uCisgICAgKiBjb25maWd1cmUsIGNvbmZpZy5pbjogUmVnZW5lcmF0ZS4KKyAgICAqIGxkZmlsZS5jIChsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCk6IElmCisgICAgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgZGVmaW5lZCwgd2FybiBmb3IgdXNlIG9mIC9saWIsCisgICAgL3Vzci9saWIsIC91c3IvbG9jYWwvbGliIG9yIC91c3IvWDExUjYvbGliLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsZC9jb25maWcuaW4gICAgfCAgMyArKysKKyBsZC9jb25maWd1cmUgICAgfCAxNCArKysrKysrKysrKysrKworIGxkL2NvbmZpZ3VyZS5hYyB8IDEwICsrKysrKysrKysKKyBsZC9sZC5oICAgICAgICAgfCAgOCArKysrKysrKworIGxkL2xkLnRleGluZm8gICB8IDEyICsrKysrKysrKysrKworIGxkL2xkZmlsZS5jICAgICB8IDE3ICsrKysrKysrKysrKysrKysrCisgbGQvbGRsZXguaCAgICAgIHwgIDIgKysKKyBsZC9sZG1haW4uYyAgICAgfCAgMiArKworIGxkL2xleHN1cC5jICAgICB8IDE2ICsrKysrKysrKysrKysrKysKKyA5IGZpbGVzIGNoYW5nZWQsIDg0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xkL2NvbmZpZy5pbiBiL2xkL2NvbmZpZy5pbgoraW5kZXggMmFiNDg0NC4uNzY2ZDIzYyAxMDA2NDQKKy0tLSBhL2xkL2NvbmZpZy5pbgorKysrIGIvbGQvY29uZmlnLmluCitAQCAtMTEsNiArMTEsOSBAQAorICAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyAjdW5kZWYgRU5BQkxFX05MUworIAorKy8qIERlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzICovCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrCisgLyogQWRkaXRpb25hbCBleHRlbnNpb24gYSBzaGFyZWQgb2JqZWN0IG1pZ2h0IGhhdmUuICovCisgI3VuZGVmIEVYVFJBX1NITElCX0VYVEVOU0lPTgorIAorZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZSBiL2xkL2NvbmZpZ3VyZQoraW5kZXggMmZiYWViZi4uNTcyNmEwOCAxMDA3NTUKKy0tLSBhL2xkL2NvbmZpZ3VyZQorKysrIGIvbGQvY29uZmlndXJlCitAQCAtNzg3LDYgKzc4Nyw3IEBAIHdpdGhfbGliX3BhdGgKKyBlbmFibGVfdGFyZ2V0cworIGVuYWJsZV82NF9iaXRfYmZkCisgd2l0aF9zeXNyb290CisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfZ29sZAorIGVuYWJsZV9nb3QKKyBlbmFibGVfd2Vycm9yCitAQCAtMTQ0Myw2ICsxNDQ0LDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisgICAtLWVuYWJsZS10YXJnZXRzICAgICAgICBhbHRlcm5hdGl2ZSB0YXJnZXQgY29uZmlndXJhdGlvbnMKKyAgIC0tZW5hYmxlLTY0LWJpdC1iZmQgICAgIDY0LWJpdCBzdXBwb3J0IChvbiBob3N0cyB3aXRoIG5hcnJvd2VyIHdvcmQgc2l6ZXMpCisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzCisgICAtLWVuYWJsZS1nb2xkWz1BUkddICAgICBidWlsZCBnb2xkIFtBUkc9e2RlZmF1bHQseWVzLG5vfV0KKyAgIC0tZW5hYmxlLWdvdD08dHlwZT4gICAgIEdPVCBoYW5kbGluZyBzY2hlbWUgKHRhcmdldCwgc2luZ2xlLCBuZWdhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpZ290KQorQEAgLTE2MzIzLDcgKzE2MzI2LDE4IEBAIGVsc2UKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrZWxzZQorKyAgZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm8KKytmaQorKworK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKyAKKyskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyAxIiA+PmNvbmZkZWZzLmgKKysKKytmaQorIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nb3Qgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2dvdCtzZXR9IiA9IHNldDsgdGhlbiA6CitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLmFjIGIvbGQvY29uZmlndXJlLmFjCitpbmRleCAxYmRkZmM5Li5lOWVkYjdmIDEwMDY0NAorLS0tIGEvbGQvY29uZmlndXJlLmFjCisrKysgYi9sZC9jb25maWd1cmUuYWMKK0BAIC05NCw2ICs5NCwxNiBAQCBBQ19TVUJTVCh1c2Vfc3lzcm9vdCkKKyBBQ19TVUJTVChUQVJHRVRfU1lTVEVNX1JPT1QpCisgQUNfU1VCU1QoVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgICAgIFt3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgIFtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ub10pCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKyAgQUNfREVGSU5FKFtFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU10sCisrICAgICAgIFsxXSwKKysgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBsaWJyYXJ5IGRpcmVjdG9yaWVzXSkKKytmaQorKworIGRubCBVc2UgLS1lbmFibGUtZ29sZCB0byBkZWNpZGUgaWYgdGhpcyBsaW5rZXIgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LgorIGRubCAiaW5zdGFsbF9hc19kZWZhdWx0IiBpcyBzZXQgdG8gZmFsc2UgaWYgZ29sZCBpcyB0aGUgZGVmYXVsdCBsaW5rZXIuCisgZG5sICJpbnN0YWxsZWRfbGlua2VyIiBpcyB0aGUgaW5zdGFsbGVkIEJGRCBsaW5rZXIgbmFtZS4KK2RpZmYgLS1naXQgYS9sZC9sZC5oIGIvbGQvbGQuaAoraW5kZXggZjc3M2NlNy4uYWRiYTBmNiAxMDA2NDQKKy0tLSBhL2xkL2xkLmgKKysrKyBiL2xkL2xkLmgKK0BAIC0xNjEsNiArMTYxLDE0IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAgIC8qIElmIFRSVUUgd2UnbGwganVzdCBwcmludCB0aGUgZGVmYXVsdCBvdXRwdXQgb24gc3Rkb3V0LiAgKi8KKyAgIGJmZF9ib29sZWFuIHByaW50X291dHB1dF9mb3JtYXQ7CisgCisrICAvKiBJZiBUUlVFICh0aGUgZGVmYXVsdCkgd2FybiBmb3IgdXNlcyBvZiBzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbgorKyAgICAgY3Jvc3MgbGlua2luZy4gICovCisrICBiZmRfYm9vbGVhbiBwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworKworKyAgLyogSWYgVFJVRSAoZGVmYXVsdCBGQUxTRSkgZ2l2ZSBhbiBlcnJvciBmb3IgdXNlcyBvZiBzeXN0ZW0KKysgICAgIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZyBpbnN0ZWFkIG9mIGEgd2FybmluZy4gICovCisrICBiZmRfYm9vbGVhbiBlcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworKworICAgLyogQmlnIG9yIGxpdHRsZSBlbmRpYW4gYXMgc2V0IG9uIGNvbW1hbmQgbGluZS4gICovCisgICBlbnVtIGVuZGlhbl9lbnVtIGVuZGlhbjsKKyAKK2RpZmYgLS1naXQgYS9sZC9sZC50ZXhpbmZvIGIvbGQvbGQudGV4aW5mbworaW5kZXggNTAyNTgyYy4uZGFlMTY4YSAxMDA2NDQKKy0tLSBhL2xkL2xkLnRleGluZm8KKysrKyBiL2xkL2xkLnRleGluZm8KK0BAIC0yMjEyLDYgKzIyMTIsMTggQEAgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBvcmlnaW5hbCBsaW5rZWQgZmlsZSBkb2VzIG5vdCBjaGFuZ2UuCisgCisgUGFzc2luZyBAY29kZXtub25lfSBmb3IgQHZhcntzdHlsZX0gZGlzYWJsZXMgdGhlIHNldHRpbmcgZnJvbSBhbnkKKyBAY29kZXstLWJ1aWxkLWlkfSBvcHRpb25zIGVhcmxpZXIgb24gdGhlIGNvbW1hbmQgbGluZS4KKysKKytAa2luZGV4IC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BpdGVtIC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0RvIG5vdCB3YXJuIGZvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBzdWNoIGFzCisrQGZpbGV7L3Vzci9saWJ9IHdoZW4gY3Jvc3MgbGlua2luZy4gIFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UKKytpbiBjaHJvb3QgZW52aXJvbm1lbnRzIHdoZW4gc3VjaCBkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0CisrbGlicmFyaWVzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KKysKKytAa2luZGV4IC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BpdGVtIC0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0dpdmUgYW4gZXJyb3IgaW5zdGVhZCBvZiBhIHdhcm5pbmcgZm9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcKKytzeXN0ZW0gZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nLgorIEBlbmQgdGFibGUKKyAKKyBAYyBtYW4gZW5kCitkaWZmIC0tZ2l0IGEvbGQvbGRmaWxlLmMgYi9sZC9sZGZpbGUuYworaW5kZXggNzgyZWQ3Zi4uMTlhOWFiNCAxMDA2NDQKKy0tLSBhL2xkL2xkZmlsZS5jCisrKysgYi9sZC9sZGZpbGUuYworQEAgLTExNCw2ICsxMTQsMjMgQEAgbGRmaWxlX2FkZF9saWJyYXJ5X3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGJmZF9ib29sZWFuIGNtZGxpbmUpCisgICAgIG5ld19kaXJzLT5uYW1lID0gY29uY2F0IChsZF9zeXNyb290LCBuYW1lICsgMSwgKGNvbnN0IGNoYXIgKikgTlVMTCk7CisgICBlbHNlCisgICAgIG5ld19kaXJzLT5uYW1lID0geHN0cmR1cCAobmFtZSk7CisrCisrI2lmZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrICBpZiAoY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKysgICYmICgoIXN0cm5jbXAgKG5hbWUsICIvbGliIiwgNCkpCisrICAgICAgfHwgKCFzdHJuY21wIChuYW1lLCAiL3Vzci9saWIiLCA4KSkKKysgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL2xvY2FsL2xpYiIsIDE0KSkKKysgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL1gxMVI2L2xpYiIsIDE0KSkpKQorKyAgIHsKKysgICAgIGlmIChjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgICAgZWluZm8gKF8oIiVYJVA6IGVycm9yOiBsaWJyYXJ5IHNlYXJjaCBwYXRoIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb25cbiIpLCBuYW1lKTsKKysgICAgIGVsc2UKKysgICAgICAgZWluZm8gKF8oIiVQOiB3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKysgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb25cbiIpLCBuYW1lKTsKKysgICB9CisrI2VuZGlmCisrCisgfQorIAorIC8qIFRyeSB0byBvcGVuIGEgQkZEIGZvciBhIGxhbmdfaW5wdXRfc3RhdGVtZW50LiAgKi8KK2RpZmYgLS1naXQgYS9sZC9sZGxleC5oIGIvbGQvbGRsZXguaAoraW5kZXggZTNlOWIyNC4uMjk0ODdhMyAxMDA2NDQKKy0tLSBhL2xkL2xkbGV4LmgKKysrKyBiL2xkL2xkbGV4LmgKK0BAIC0xNDAsNiArMTQwLDggQEAgZW51bSBvcHRpb25fdmFsdWVzCisgICBPUFRJT05fSUdOT1JFX1VOUkVTT0xWRURfU1lNQk9MLAorICAgT1BUSU9OX1BVU0hfU1RBVEUsCisgICBPUFRJT05fUE9QX1NUQVRFLAorKyAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMsCisrICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUywKKyB9OworIAorIC8qIFRoZSBpbml0aWFsIHBhcnNlciBzdGF0ZXMuICAqLworZGlmZiAtLWdpdCBhL2xkL2xkbWFpbi5jIGIvbGQvbGRtYWluLmMKK2luZGV4IDgxOGQxMDguLjU0YzQ5ZjIgMTAwNjQ0CistLS0gYS9sZC9sZG1haW4uYworKysrIGIvbGQvbGRtYWluLmMKK0BAIC0yNjYsNiArMjY2LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgY29tbWFuZF9saW5lLndhcm5fbWlzbWF0Y2ggPSBUUlVFOworICAgY29tbWFuZF9saW5lLndhcm5fc2VhcmNoX21pc21hdGNoID0gVFJVRTsKKyAgIGNvbW1hbmRfbGluZS5jaGVja19zZWN0aW9uX2FkZHJlc3NlcyA9IC0xOworKyAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBUUlVFOworKyAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBGQUxTRTsKKyAKKyAgIC8qIFdlIGluaXRpYWxpemUgREVNQU5HTElORyBiYXNlZCBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgIENPTExFQ1RfTk9fREVNQU5HTEUuICBUaGUgZ2NjIGNvbGxlY3QyIHByb2dyYW0gd2lsbCBkZW1hbmdsZSB0aGUKK2RpZmYgLS1naXQgYS9sZC9sZXhzdXAuYyBiL2xkL2xleHN1cC5jCitpbmRleCA0ODEyYzk3Li4yMWI0OWRmIDEwMDY0NAorLS0tIGEvbGQvbGV4c3VwLmMKKysrKyBiL2xkL2xleHN1cC5jCitAQCAtNTEzLDYgKzUxMywxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGxkX29wdGlvbiBsZF9vcHRpb25zW10gPQorICAgeyB7InBvcC1zdGF0ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fUE9QX1NUQVRFfSwKKyAgICAgJ1wwJywgTlVMTCwgTl8oIlBvcCBzdGF0ZSBvZiBmbGFncyBnb3Zlcm5pbmcgaW5wdXQgZmlsZSBoYW5kbGluZyIpLAorICAgICBUV09fREFTSEVTIH0sCisrICB7IHsibm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIsIG5vX2FyZ3VtZW50LCBOVUxMLAorKyAgICAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVN9LAorKyAgICAnXDAnLCBOVUxMLCBOXygiRG8gbm90IHdhcm4gZm9yIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIiksCisrICAgIFRXT19EQVNIRVMgfSwKKysgIHsgeyJlcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIiwgbm9fYXJndW1lbnQsIE5VTEwsCisrICAgICsgICAgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTfSwKKysgICAgJ1wwJywgTlVMTCwgTl8oIkdpdmUgYW4gZXJyb3IgZm9yIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIiksCisrICAgIFRXT19EQVNIRVMgfSwKKyB9OworIAorICNkZWZpbmUgT1BUSU9OX0NPVU5UIEFSUkFZX1NJWkUgKGxkX29wdGlvbnMpCitAQCAtMTQ3NCw2ICsxNDgyLDE0IEBAIHBhcnNlX2FyZ3MgKHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICBmcmVlIChvbGRwKTsKKyAJICAgIH0KKyAJICBicmVhazsKKysKKysJY2FzZSBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUzoKKysJICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IEZBTFNFOworKwkgIGJyZWFrOworKworKwljYXNlIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTOgorKwkgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gVFJVRTsKKysJICBicmVhazsKKyAJfQorICAgICB9CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTFlNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZWRiZWU5YTY4ZTFjMmUxMWMwNTk2NjhhYTFkMTMwMDFkOWYzZGUwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NDI6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xM10gRml4IHJwYXRoIGluIGxpYnRvb2wgd2hlbiBzeXNyb290IGlzIGVuYWJsZWQKKworRW5hYmxpbmcgc3lzcm9vdCBzdXBwb3J0IGluIGxpYnRvb2wgZXhwb3NlZCBhIGJ1ZyB3aGVyZSB0aGUgZmluYWwKK2xpYnJhcnkgaGFkIGFuIFJQQVRIIGVuY29kZWQgaW50byBpdCB3aGljaCBzdGlsbCBwb2ludGVkIHRvIHRoZQorc3lzcm9vdC4gVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlIHVudGlsIGl0IGdldHMgc29ydGVkIG91dAordXBzdHJlYW0uCisKK0ZpeCBzdWdnZXN0ZWQgYnkgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDEwICsrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA3MGU4NTZlLi4xMWVlNjg0IDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC04MDM1LDkgKzgwMzUsMTEgQEAgRU9GCisgCSAgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCQkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCistCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisgCQllbHNlCitAQCAtODc3MCw2ICs4NzcyLDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkNTdlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAyYTVlODgxM2QzYzVkYjNlMmI3ZDlkZmEyYWIyN2NjY2Q1MTExZTUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0NDoxNCArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzEzXSBDaGFuZ2UgZGVmYXVsdCBlbXVsYXRpb24gZm9yIG1pcHM2NCotKi1saW51eAorCit3ZSBjaGFuZ2UgdGhlIGRlZmF1bHQgZW11bGF0aW9ucyB0byBiZSBONjQgaW5zdGVhZCBvZiBOMzIKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsgT0UgY29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJmZC9jb25maWcuYmZkICAgfCA4ICsrKystLS0tCisgbGQvY29uZmlndXJlLnRndCB8IDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9jb25maWcuYmZkIGIvYmZkL2NvbmZpZy5iZmQKK2luZGV4IDdiY2I5MmEuLjAzZDJjNmYgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlnLmJmZAorKysrIGIvYmZkL2NvbmZpZy5iZmQKK0BAIC0xMDYyLDEyICsxMDYyLDEyIEBAIGNhc2UgIiR7dGFyZ30iIGluCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9sZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMgbWlwc19lY29mZl9iZV92ZWMgbWlwc19lY29mZl9sZV92ZWMiCisgICAgIDs7CisgICBtaXBzNjQqZWwtKi1saW51eCopCistICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjCistICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyIKKysgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGY2NF90cmFkX2xlX3ZlYworKyAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIgorICAgICA7OworICAgbWlwczY0Ki0qLWxpbnV4KikKKy0gICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9udHJhZF9iZV92ZWMKKy0gICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgorKyAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjY0X3RyYWRfYmVfdmVjCisrICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisgICAgIDs7CisgICBtaXBzKmVsLSotbGludXgqKQorICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX3RyYWRfbGVfdmVjCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDI0ZTM2ZDEuLjc0MGIyZWEgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUudGd0CisrKysgYi9sZC9jb25maWd1cmUudGd0CitAQCAtNDc2LDExICs0NzYsMTEgQEAgbWlwcyplbC0qLXZ4d29ya3MqKQl0YXJnX2VtdWw9ZWxmMzJlbG1pcHZ4d29ya3MKKyBtaXBzKi0qLXZ4d29ya3MqKQl0YXJnX2VtdWw9ZWxmMzJlYm1pcHZ4d29ya3MKKyAJCSAgICAgICAgdGFyZ19leHRyYV9lbXVscz0iZWxmMzJlbG1pcHZ4d29ya3MiIDs7CisgbWlwcyotKi13aW5kaXNzKQl0YXJnX2VtdWw9ZWxmMzJtaXBzd2luZGlzcyA7OworLW1pcHM2NCplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmx0c21pcG4zMgorLQkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwIGVsZjMyYnRzbWlwIGVsZjY0bHRzbWlwIGVsZjY0YnRzbWlwIgorK21pcHM2NCplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGY2NGx0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwbjMyIGVsZjMybHRzbWlwIGVsZjMyYnRzbWlwIGVsZjY0YnRzbWlwIgorIAkJCXRhcmdfZXh0cmFfbGlicGF0aD0kdGFyZ19leHRyYV9lbXVscyA7OworLW1pcHM2NCotKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJidHNtaXBuMzIKKy0JCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcCBlbGYzMmx0c21pcCBlbGY2NGJ0c21pcCBlbGY2NGx0c21pcCIKKyttaXBzNjQqLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjY0YnRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXBuMzIgZWxmMzJidHNtaXAgZWxmMzJsdHNtaXAgZWxmNjRsdHNtaXAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CisgbWlwcyplbC0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmx0c21pcAorIAkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwIGVsZjMybHRzbWlwbjMyIGVsZjY0bHRzbWlwIGVsZjMyYnRzbWlwbjMyIGVsZjY0YnRzbWlwIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2ZmY5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTItQWRkLVhMUC1pbnN0cnVjdGlvbnMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQyOCBAQAorRnJvbSA0NDgzMjllYTA5NzQ0N2FlZTczZDA1MDA0NTI5NWM1YTBhZTg1MTllIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo1MTowNSArMDAwMAorU3ViamVjdDogW1BBVENIIDEyLzEzXSBBZGQgWExQIGluc3RydWN0aW9ucyBzdXBwb3J0CisKK0Zyb20gMjZhZGIwNmNlNTE1YWFkZmVjMDhjZTEzMTA5YjRiOTgyODdmNjc3YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5lYnUgUGhpbGlwcyA8bnBoaWxpcHNAbmV0bG9naWNtaWNyby5jb20+CitEYXRlOiBGcmksIDMwIEp1bCAyMDEwIDE1OjEwOjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBzdXBwb3J0IGZvciBOZXRsb2dpYyBYTFAKKworVXNpbmcgdGhlIG1pcHNpc2E2NHIybmxtIHRhcmdldCwgYWRkIHN1cHBvcnQgZm9yIFhMUCBmcm9tCitOZXRsb2dpYy4gQWxzbywgdXBkYXRlIHZlbmRvciBuYW1lIHRvIE5MTSB3aGVyZXZlciBhcHBsaWNhYmxlLgorLS0tCisgYmZkL2FvdXR4LmggICAgICAgICAgIHwgICAgMSArCisgYmZkL2FyY2h1cmVzLmMgICAgICAgIHwgICAgMSArCisgYmZkL2JmZC1pbjIuaCAgICAgICAgIHwgICAgMSArCisgYmZkL2NvbmZpZy5iZmQgICAgICAgIHwgICAgNSArKysrKworIGJmZC9jcHUtbWlwcy5jICAgICAgICB8ICAgIDYgKysrKy0tCisgYmZkL2VsZnh4LW1pcHMuYyAgICAgIHwgICAgOCArKysrKysrKworIGJpbnV0aWxzL3JlYWRlbGYuYyAgICB8ICAgIDEgKworIGdhcy9jb25maWcvdGMtbWlwcy5jICB8ICAgIDQgKysrLQorIGdhcy9jb25maWd1cmUgICAgICAgICB8ICAgIDMgKysrCisgZ2FzL2NvbmZpZ3VyZS50Z3QgICAgIHwgICAgMiArLQorIGluY2x1ZGUvZWxmL21pcHMuaCAgICB8ICAgIDEgKworIGluY2x1ZGUvb3Bjb2RlL21pcHMuaCB8ICAgMTAgKysrKysrKystLQorIGxkL2NvbmZpZ3VyZS50Z3QgICAgICB8ICAgIDIgKysKKyBvcGNvZGVzL21pcHMtZGlzLmMgICAgfCAgIDEyICsrKysrLS0tLS0tLQorIG9wY29kZXMvbWlwcy1vcGMuYyAgICB8ICAgMzMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMTUgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2FvdXR4LmggICAgICAgICAgIHwgIDEgKworIGJmZC9hcmNodXJlcy5jICAgICAgICB8ICAxICsKKyBiZmQvYmZkLWluMi5oICAgICAgICAgfCAgMSArCisgYmZkL2NvbmZpZy5iZmQgICAgICAgIHwgIDUgKysrKysKKyBiZmQvY3B1LW1pcHMuYyAgICAgICAgfCAgNiArKysrLS0KKyBiZmQvZWxmeHgtbWlwcy5jICAgICAgfCAgOCArKysrKysrKworIGJpbnV0aWxzL3JlYWRlbGYuYyAgICB8ICAxICsKKyBnYXMvY29uZmlnL3RjLW1pcHMuYyAgfCAgNCArKystCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgIHwgIDMgKysrCisgZ2FzL2NvbmZpZ3VyZS50Z3QgICAgIHwgIDIgKy0KKyBpbmNsdWRlL2VsZi9taXBzLmggICAgfCAgMSArCisgaW5jbHVkZS9vcGNvZGUvbWlwcy5oIHwgMTAgKysrKysrKystLQorIGxkL2NvbmZpZ3VyZS50Z3QgICAgICB8ICAyICsrCisgb3Bjb2Rlcy9taXBzLWRpcy5jICAgIHwgMTIgKysrKystLS0tLS0tCisgb3Bjb2Rlcy9taXBzLW9wYy5jICAgIHwgMzMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMTUgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iZmQvYW91dHguaCBiL2JmZC9hb3V0eC5oCitpbmRleCA5Mzg1YTk4Li5hODhkZjk5IDEwMDY0NAorLS0tIGEvYmZkL2FvdXR4LmgKKysrKyBiL2JmZC9hb3V0eC5oCitAQCAtODAyLDYgKzgwMiw3IEBAIE5BTUUgKGFvdXQsIG1hY2hpbmVfdHlwZSkgKGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoLAorIAljYXNlIGJmZF9tYWNoX21pcHNpc2E2NHI2OgorIAljYXNlIGJmZF9tYWNoX21pcHNfc2IxOgorIAljYXNlIGJmZF9tYWNoX21pcHNfeGxyOgorKwljYXNlIGJmZF9tYWNoX21pcHNfeGxwOgorIAkgIC8qIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgTUlQUzMsIE1JUFM0LCBNSVBTMTYsIE1JUFMzMiwgZXRjLiAgKi8KKyAJICBhcmNoX2ZsYWdzID0gTV9NSVBTMjsKKyAJICBicmVhazsKK2RpZmYgLS1naXQgYS9iZmQvYXJjaHVyZXMuYyBiL2JmZC9hcmNodXJlcy5jCitpbmRleCBjOWZkNmM4Li41NDdiZDA5IDEwMDY0NAorLS0tIGEvYmZkL2FyY2h1cmVzLmMKKysrKyBiL2JmZC9hcmNodXJlcy5jCitAQCAtMTgwLDYgKzE4MCw3IEBAIERFU0NSSVBUSU9OCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb25wCQk2NjAxCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yCQk2NTAyCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIHsqIGRlY2ltYWwgJ1hMUicgICp9CisrLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIHsqIGRlY2ltYWwgJ1hMUCcgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjMgICAgICAgICAgIDM0CitkaWZmIC0tZ2l0IGEvYmZkL2JmZC1pbjIuaCBiL2JmZC9iZmQtaW4yLmgKK2luZGV4IGM3YTJiYjUuLjQxM2I3NzMgMTAwNjQ0CistLS0gYS9iZmQvYmZkLWluMi5oCisrKysgYi9iZmQvYmZkLWluMi5oCitAQCAtMTk2Nyw2ICsxOTY3LDcgQEAgZW51bSBiZmRfYXJjaGl0ZWN0dXJlCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAgICAgICAgICAgNjYwMQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yICAgICAgICAgIDY1MDIKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICAvKiBkZWNpbWFsICdYTFInICAqLworKyNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIC8qIGRlY2ltYWwgJ1hMUCcgICovCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIyICAgICAgICAgICAzMworICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjMgICAgICAgICAgIDM0CitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZy5iZmQgYi9iZmQvY29uZmlnLmJmZAoraW5kZXggMDNkMmM2Zi4uMjcwODZkYiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWcuYmZkCisrKysgYi9iZmQvY29uZmlnLmJmZAorQEAgLTEwNDEsNiArMTA0MSwxMSBAQCBjYXNlICIke3Rhcmd9IiBpbgorICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX2xlX3ZlYworICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfYmVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIgorICAgICA7OworKyAgbWlwc2lzYTY0Ki0qLWVsZiopCisrCXRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfdHJhZF9iZV92ZWMKKysJdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyIKKysJd2FudDY0PXRydWUKKysJOzsKKyAgIG1pcHMqLSotZWxmKiB8IG1pcHMqLSotcnRlbXMqIHwgbWlwcyotKi12eHdvcmtzIHwgbWlwcyotKi13aW5kaXNzKQorICAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX2JlX3ZlYworICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbGVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIgorZGlmZiAtLWdpdCBhL2JmZC9jcHUtbWlwcy5jIGIvYmZkL2NwdS1taXBzLmMKK2luZGV4IGI2MTdhYWEuLjE5YTk5ZDEgMTAwNjQ0CistLS0gYS9iZmQvY3B1LW1pcHMuYworKysrIGIvYmZkL2NwdS1taXBzLmMKK0BAIC0xMDMsNyArMTAzLDggQEAgZW51bQorICAgSV9taXBzb2N0ZW9ucCwKKyAgIElfbWlwc29jdGVvbjIsCisgICBJX3hsciwKKy0gIElfbWljcm9taXBzCisrICBJX21pY3JvbWlwcywKKysgIElfeGxwCisgfTsKKyAKKyAjZGVmaW5lIE5OKGluZGV4KSAoJmFyY2hfaW5mb19zdHJ1Y3RbKGluZGV4KSArIDFdKQorQEAgLTE1Myw3ICsxNTQsOCBAQCBzdGF0aWMgY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGFyY2hfaW5mb19zdHJ1Y3RbXSA9CisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCwibWlwczpvY3Rlb24rIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb25wKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiwibWlwczpvY3Rlb24yIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb24yKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfeGxyLCAibWlwczp4bHIiLCAgICAgICBGQUxTRSwgTk4oSV94bHIpKSwKKy0gIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19taWNyb21pcHMsIm1pcHM6bWljcm9taXBzIixGQUxTRSwwKQorKyAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLE5OKElfbWljcm9taXBzKSksCisrICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfeGxwLCAibWlwczp4bHAiLCAgICAgIEZBTFNFLCAwKQorIH07CisgCisgLyogVGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlIGlzIG1pcHM6MzAwMCwgYnV0IHdpdGggYSBtYWNoaW5lIG51bWJlciBvZgorZGlmZiAtLWdpdCBhL2JmZC9lbGZ4eC1taXBzLmMgYi9iZmQvZWxmeHgtbWlwcy5jCitpbmRleCAwZGY3YWJmLi5kMjY4ZTg2IDEwMDY0NAorLS0tIGEvYmZkL2VsZnh4LW1pcHMuYworKysrIGIvYmZkL2VsZnh4LW1pcHMuYworQEAgLTY2MDgsNiArNjYwOCw5IEBAIF9iZmRfZWxmX21pcHNfbWFjaCAoZmxhZ3dvcmQgZmxhZ3MpCisgICAgIGNhc2UgRV9NSVBTX01BQ0hfWExSOgorICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX3hscjsKKyAKKysJY2FzZSBFX01JUFNfTUFDSF9YTFA6CisrICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfeGxwOworKworICAgICBkZWZhdWx0OgorICAgICAgIHN3aXRjaCAoZmxhZ3MgJiBFRl9NSVBTX0FSQ0gpCisgCXsKK0BAIC0xMTg3OCw2ICsxMTg4MSwxMCBAQCBtaXBzX3NldF9pc2FfZmxhZ3MgKGJmZCAqYWJmZCkKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OMjsKKyAgICAgICBicmVhazsKKyAKKysJY2FzZSBiZmRfbWFjaF9taXBzX3hscDoKKysJICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfWExQOworKwkgIGJyZWFrOworKworICAgICBjYXNlIGJmZF9tYWNoX21pcHNpc2EzMjoKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF8zMjsKKyAgICAgICBicmVhazsKK0BAIC0xNDc2NSw2ICsxNDc3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbiBtaXBzX21hY2hfZXh0ZW5zaW9uc1tdID0KKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb25wLCBiZmRfbWFjaF9taXBzX29jdGVvbiB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbiwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKyAgIHsgYmZkX21hY2hfbWlwc19sb29uZ3Nvbl8zYSwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKysgIHsgYmZkX21hY2hfbWlwc194bHAsIGJmZF9tYWNoX21pcHNpc2E2NHIyIH0sCisgCisgICAvKiBNSVBTNjQgZXh0ZW5zaW9ucy4gICovCisgICB7IGJmZF9tYWNoX21pcHNpc2E2NHIyLCBiZmRfbWFjaF9taXBzaXNhNjQgfSwKK2RpZmYgLS1naXQgYS9iaW51dGlscy9yZWFkZWxmLmMgYi9iaW51dGlscy9yZWFkZWxmLmMKK2luZGV4IDBjMDBiMmYuLjZlOWQ1ZTQgMTAwNjQ0CistLS0gYS9iaW51dGlscy9yZWFkZWxmLmMKKysrKyBiL2JpbnV0aWxzL3JlYWRlbGYuYworQEAgLTI4OTgsNiArMjg5OCw3IEBAIGdldF9tYWNoaW5lX2ZsYWdzICh1bnNpZ25lZCBlX2ZsYWdzLCB1bnNpZ25lZCBlX21hY2hpbmUpCisgCSAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjI6IHN0cmNhdCAoYnVmLCAiLCBvY3Rlb24yIik7IGJyZWFrOworIAkgICAgY2FzZSBFX01JUFNfTUFDSF9PQ1RFT04zOiBzdHJjYXQgKGJ1ZiwgIiwgb2N0ZW9uMyIpOyBicmVhazsKKyAJICAgIGNhc2UgRV9NSVBTX01BQ0hfWExSOiAgc3RyY2F0IChidWYsICIsIHhsciIpOyBicmVhazsKKysJCWNhc2UgRV9NSVBTX01BQ0hfWExQOiAgc3RyY2F0IChidWYsICIsIHhscCIpOyBicmVhazsKKyAJICAgIGNhc2UgMDoKKyAJICAgIC8qIFdlIHNpbXBseSBpZ25vcmUgdGhlIGZpZWxkIGluIHRoaXMgY2FzZSB0byBhdm9pZCBjb25mdXNpb246CisgCSAgICAgICBNSVBTIEVMRiBkb2VzIG5vdCBzcGVjaWZ5IEVGX01JUFNfTUFDSCwgaXQgaXMgYSBHTlUKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlnL3RjLW1pcHMuYyBiL2dhcy9jb25maWcvdGMtbWlwcy5jCitpbmRleCBjM2UzZTJhLi44ZDY0MzQ0IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZy90Yy1taXBzLmMKKysrKyBiL2dhcy9jb25maWcvdGMtbWlwcy5jCitAQCAtNTUxLDYgKzU1MSw3IEBAIHN0YXRpYyBpbnQgbWlwc18zMmJpdG1vZGUgPSAwOworICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9STTcwMDAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMuYXJjaCA9PSBDUFVfVlI1NTAwICAgICAgICAgICAgICAgICAgICBcCisgICAgfHwgbWlwc19vcHRzLm1pY3JvbWlwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9YTFAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICApCisgCisgLyogV2hldGhlciB0aGUgcHJvY2Vzc29yIHVzZXMgaGFyZHdhcmUgaW50ZXJsb2NrcyB0byBwcm90ZWN0IHJlYWRzCitAQCAtNTgwLDYgKzU4MSw3IEBAIHN0YXRpYyBpbnQgbWlwc18zMmJpdG1vZGUgPSAwOworICAgICAmJiBtaXBzX29wdHMuaXNhICE9IElTQV9NSVBTMykgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMuYXJjaCA9PSBDUFVfUjQzMDAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfHwgbWlwc19vcHRzLm1pY3JvbWlwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9YTFAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICApCisgCisgLyogV2hldGhlciB0aGUgcHJvY2Vzc29yIHVzZXMgaGFyZHdhcmUgaW50ZXJsb2NrcyB0byBwcm90ZWN0IHJlYWRzCitAQCAtMTg2ODIsNyArMTg2ODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfY3B1X2luZm8gbWlwc19jcHVfaW5mb190YWJsZVtdID0KKyAgIC8qIEJyb2FkY29tIFhMUC4KKyAgICAgIFhMUCBpcyBtb3N0bHkgbGlrZSBYTFIsIHdpdGggdGhlIHByb21pbmVudCBleGNlcHRpb24gdGhhdCBpdCBpcworICAgICAgTUlQUzY0UjIgcmF0aGVyIHRoYW4gTUlQUzY0LiAgKi8KKy0gIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExSIH0sCisrICB7ICJ4bHAiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX1hMUCB9LAorIAorICAgLyogRW5kIG1hcmtlciAqLworICAgeyBOVUxMLCAwLCAwLCAwLCAwIH0KK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlIGIvZ2FzL2NvbmZpZ3VyZQoraW5kZXggMDc0ODg2Zi4uODA5MWYyZiAxMDA3NTUKKy0tLSBhL2dhcy9jb25maWd1cmUKKysrKyBiL2dhcy9jb25maWd1cmUKK0BAIC0xMjgwOCw2ICsxMjgwOCw5IEBAIF9BQ0VPRgorIAkgIG1pcHNpc2E2NHI2IHwgbWlwc2lzYTY0cjZlbCkKKyAJICAgIG1pcHNfY3B1PW1pcHM2NHI2CisgCSAgICA7OworKwkgIG1pcHNpc2E2NHIybmxtIHwgbWlwc2lzYTY0cjJubG1lbCkKKysJCW1pcHNfY3B1PXhscAorKwkJOzsKKyAJICBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwpCisgCSAgICBtaXBzX2NwdT1yMzkwMAorIAkgICAgOzsKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlLnRndCBiL2dhcy9jb25maWd1cmUudGd0CitpbmRleCAxZDkyZjU1Li4wNmU4YjRmIDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2dhcy9jb25maWd1cmUudGd0CitAQCAtMzMyLDcgKzMzMiw3IEBAIGNhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KKyAgIG1pcHMtKi1zeXN2NCpNUCogfCBtaXBzLSotZ251KikJZm10PWVsZiBlbT10bWlwcyA7OworICAgbWlwcyotc2RlLWVsZiogfCBtaXBzKi1tdGktZWxmKiB8IG1pcHMqLWltZy1lbGYqKQorIAkJCQkJZm10PWVsZiBlbT10bWlwcyA7OworLSAgbWlwcy0qLWVsZiogfCBtaXBzLSotcnRlbXMqKQkJZm10PWVsZiA7OworKyAgbWlwcy0qLWVsZiogfCBtaXBzLSotcnRlbXMqKQkJZm10PWVsZiBlbT10bWlwcyA7OworICAgbWlwcy0qLW5ldGJzZCopCQkJZm10PWVsZiBlbT10bWlwcyA7OworICAgbWlwcy0qLW9wZW5ic2QqKQkJCWZtdD1lbGYgZW09dG1pcHMgOzsKKyAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2VsZi9taXBzLmggYi9pbmNsdWRlL2VsZi9taXBzLmgKK2luZGV4IDJlZDZhY2QuLmU1NDFmNTAgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2VsZi9taXBzLmgKKysrKyBiL2luY2x1ZGUvZWxmL21pcHMuaAorQEAgLTI4NSw2ICsyODUsNyBAQCBFTkRfUkVMT0NfTlVNQkVSUyAoUl9NSVBTX21heGV4dCkKKyAjZGVmaW5lIEVfTUlQU19NQUNIX1NCMSAgICAgICAgIDB4MDA4YTAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTgkweDAwOGIwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF9YTFIgICAgIAkweDAwOGMwMDAwCisrI2RlZmluZSBFX01JUFNfTUFDSF9YTFAgICAgICAgICAweDAwOGYwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF9PQ1RFT04yCTB4MDA4ZDAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjMJMHgwMDhlMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfNTQwMAkweDAwOTEwMDAwCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGNvZGUvbWlwcy5oIGIvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCitpbmRleCBlZjI2MTY3Li5lZjUzZWM2IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCisrKysgYi9pbmNsdWRlL29wY29kZS9taXBzLmgKK0BAIC0xMjI3LDggKzEyMjcsMTAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZVtdID0geworICNkZWZpbmUgSU5TTl9MT09OR1NPTl8yRiAgICAgICAgICAweDgwMDAwMDAwCisgLyogTG9vbmdzb24gM0EuICAqLworICNkZWZpbmUgSU5TTl9MT09OR1NPTl8zQSAgICAgICAgICAweDAwMDAwNDAwCistLyogUk1JIFhsciBpbnN0cnVjdGlvbiAqLworLSNkZWZpbmUgSU5TTl9YTFIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKysvKiBOZXRsb2dpYyBYbHIgaW5zdHJ1Y3Rpb24gKi8KKysjZGVmaW5lIElOU05fWExSCQkweDAwMDAwMDIwCisrLyogTmV0bG9naWMgWGxQIGluc3RydWN0aW9uICovCisrI2RlZmluZSBJTlNOX1hMUAkJMHgwMDAwMDA0MAorIAorIC8qIERTUCBBU0UgKi8KKyAjZGVmaW5lIEFTRV9EU1AJCQkweDAwMDAwMDAxCitAQCAtMTMyNCw2ICsxMzI2LDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZVtdID0geworICNkZWZpbmUgQ1BVX09DVEVPTlAJNjYwMQorICNkZWZpbmUgQ1BVX09DVEVPTjIJNjUwMgorICNkZWZpbmUgQ1BVX1hMUiAgICAgCTg4NzY4MiAgIAkvKiBkZWNpbWFsICdYTFInICAgKi8KKysjZGVmaW5lIENQVV9YTFAgICAgICAgICA4ODc2ODAgICAgICAvKiBkZWNpbWFsICdYTFAnICAgKi8KKyAKKyAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gQ1BVIGlzIGluY2x1ZGVkIGluIElOU05fKiBtYXNrIE1BU0suICAqLworIAorQEAgLTEzOTgsNiArMTQwMSw5IEBAIGNwdV9pc19tZW1iZXIgKGludCBjcHUsIHVuc2lnbmVkIGludCBtYXNrKQorICAgICAgIHJldHVybiAoKG1hc2sgJiBJTlNOX0lTQV9NQVNLKSA9PSBJTlNOX0lTQTMyUjYpCisgCSAgICAgfHwgKChtYXNrICYgSU5TTl9JU0FfTUFTSykgPT0gSU5TTl9JU0E2NFI2KTsKKyAKKysgICAgY2FzZSBDUFVfWExQOgorKyAgICAgIHJldHVybiAobWFzayAmIElOU05fWExQKSAhPSAwOworKworICAgICBkZWZhdWx0OgorICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgfQorZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS50Z3QgYi9sZC9jb25maWd1cmUudGd0CitpbmRleCA3NDBiMmVhLi40ZGYxM2E3IDEwMDY0NAorLS0tIGEvbGQvY29uZmlndXJlLnRndAorKysrIGIvbGQvY29uZmlndXJlLnRndAorQEAgLTQ2Miw2ICs0NjIsOCBAQCBtaXBzKmVsLXNkZS1lbGYqKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXAKKyBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCisgCQkJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAiIDs7CisrbWlwc2lzYTY0Ki0qLWVsZiopCXRhcmdfZW11bD1lbGYzMmJ0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIiA7OworIG1pcHM2NCplbC1wczItZWxmKikJdGFyZ19lbXVsPWVsZjMybHI1OTAwbjMyCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJscjU5MDAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9taXBzLWRpcy5jIGIvb3Bjb2Rlcy9taXBzLWRpcy5jCitpbmRleCAxZWIxZDQ1Li5kNjg4MWFmIDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9taXBzLWRpcy5jCisrKysgYi9vcGNvZGVzL21pcHMtZGlzLmMKK0BAIC02NTUsMTMgKzY1NSwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfY2hvaWNlc1tdID0KKyAgICAgbWlwc19jcDBzZWxfbmFtZXNfeGxyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc194bHIpLAorICAgICBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorIAorLSAgLyogWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiBpdCBpcyBiZWluZworLSAgICAgTUlQUzY0UjIuICAqLworLSAgeyAieGxwIiwgMSwgYmZkX21hY2hfbWlwc194bHIsIENQVV9YTFIsCistICAgIElTQV9NSVBTNjRSMiB8IElOU05fWExSLCAwLAorLSAgICBtaXBzX2NwMF9uYW1lc194bHIsCistICAgIG1pcHNfY3Awc2VsX25hbWVzX3hsciwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfeGxyKSwKKy0gICAgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKysgIHsgInhscCIsIDEsIGJmZF9tYWNoX21pcHNfeGxwLCBDUFVfWExQLAorKyAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX1hMUCwgMCwKKysgICAgbWlwc19jcDBfbmFtZXNfbWlwczMyNjRyMiwKKysgICAgbWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfbWlwczMyNjRyMiksCisrICAgIG1pcHNfaHdyX25hbWVzX21pcHMzMjY0cjIgfSwKKyAKKyAgIC8qIFRoaXMgZW50cnksIG1pcHMxNiwgaXMgaGVyZSBvbmx5IGZvciBJU0EvcHJvY2Vzc29yIHNlbGVjdGlvbjsgZG8KKyAgICAgIG5vdCBwcmludCBpdHMgbmFtZS4gICovCitkaWZmIC0tZ2l0IGEvb3Bjb2Rlcy9taXBzLW9wYy5jIGIvb3Bjb2Rlcy9taXBzLW9wYy5jCitpbmRleCAyYzNiYmFkLi45Nzg1YTdlIDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9taXBzLW9wYy5jCisrKysgYi9vcGNvZGVzL21pcHMtb3BjLmMKK0BAIC0zMTksNyArMzE5LDggQEAgZGVjb2RlX21pcHNfb3BlcmFuZCAoY29uc3QgY2hhciAqcCkKKyAjZGVmaW5lIElPQ1QJKElOU05fT0NURU9OIHwgSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorICNkZWZpbmUgSU9DVFAJKElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMikKKyAjZGVmaW5lIElPQ1QyCUlOU05fT0NURU9OMgorLSNkZWZpbmUgWExSICAgICBJTlNOX1hMUgorKyNkZWZpbmUgWExSCUlOU05fWExSCisrI2RlZmluZSBYTFAJSU5TTl9YTFAKKyAjZGVmaW5lIElWSVJUCUFTRV9WSVJUCisgI2RlZmluZSBJVklSVDY0CUFTRV9WSVJUNjQKKyAKK0BAIC05NTYsNiArOTU3LDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsiY2xvIiwJCQkiVSxzIiwJCTB4NzAwMDAwMjEsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzJ8TjU1LAkwLAlJMzcgfSwKKyB7ImNseiIsCQkJImQscyIsCQkweDAwMDAwMDUwLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTM3LAkJMCwJMCB9LAorIHsiY2x6IiwJCQkiVSxzIiwJCTB4NzAwMDAwMjAsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzJ8TjU1LAkwLAlJMzcgfSwKKyt7ImNyYyIsCQkJImQscyx0IiwJMHg3MDAwMDAxYywgMHhmYzAwMDdmZiwJV1JfMXxSRF8yfFJEXzMsCTAsCQlYTFAsIAkJMCwJMCB9LAorIC8qIGN0YzAgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLworIHsiY3RjMSIsCQkidCxHIiwJCTB4NDRjMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQ0N8Q00sCQkwLAkJSTEsCQkwLAkwIH0sCisgeyJjdGMxIiwJCSJ0LFMiLAkJMHg0NGMwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DQ3xDTSwJCTAsCQlJMSwJCTAsCTAgfSwKK0BAIC05ODgsMTIgKzk5MCwxMyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJkYWRkaXUiLAkJInQscixqIiwJMHg2NDAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8yLAkJMCwJCUkzLAkJMCwJMCB9LAorIHsiZGFkZHUiLAkJImQsdix0IiwJMHgwMDAwMDAyZCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTMsCQkwLAkwIH0sCisgeyJkYWRkdSIsCQkidCxyLEkiLAkwLCAgICAoaW50KSBNX0RBRERVX0ksCUlOU05fTUFDUk8sCQkwLAkJSTMsCQkwLAkwIH0sCisteyJkYWRkd2MiLAkJImQscyx0IiwgCTB4NzAwMDAwMzgsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0MwfFJEX0MwLCAwLAkJWExSLAkJMCwJMCB9LAorK3siZGFkZHdjIiwJCSJkLHMsdCIsIAkweDcwMDAwMDM4LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9DMHxSRF9DMCwgMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7ImRicmVhayIsCQkiIiwJCTB4NzAwMDAwM2YsIDB4ZmZmZmZmZmYsCTAsCQkJMCwJCU41LAkJMCwJMCB9LAorIHsiZGNsbyIsCQkiZCxzIiwJCTB4MDAwMDAwNTMsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJNjksCQkwLAkwIH0sCisgeyJkY2xvIiwJCSJVLHMiLAkgCTB4NzAwMDAwMjUsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwgCTAsCQlJNjR8TjU1LAkwLAlJNjkgfSwKKyB7ImRjbHoiLAkJImQscyIsCQkweDAwMDAwMDUyLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTY5LAkJMCwJMCB9LAorIHsiZGNseiIsCQkiVSxzIiwJIAkweDcwMDAwMDI0LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsIAkwLAkJSTY0fE41NSwJMCwJSTY5IH0sCisreyJkY3JjIiwJCSJkLHMsdCIsCTB4NzAwMDAwMWQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkwLAkJWExQLCAJCTAsCTAgfSwKKyAvKiBkY3RyIGFuZCBkY3R3IGFyZSB1c2VkIG9uIHRoZSByNTAwMC4gICovCisgeyJkY3RyIiwJCSJvKGIpIiwJIAkweGJjMDUwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKKyB7ImRjdHciLAkJIm8oYikiLAkJMHhiYzA5MDAwMCwgMHhmYzFmMDAwMCwgUkRfMiwJCQkwLAkJSTMsCQkwLAkwIH0sCitAQCAtMTA2NSw2ICsxMDY4LDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsiZG1mYzAiLAkJInQsRyxIIiwJMHg0MDIwMDAwMCwgMHhmZmUwMDdmOCwJV1JfMXxSRF9DMHxMQywJCTAsCQlJNjQsCQkwLAkwIH0sCisgeyJkbWZnYzAiLAkJInQsRyIsCQkweDQwNjAwMTAwLCAweGZmZTAwN2ZmLCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCisgeyJkbWZnYzAiLAkJInQsRyxIIiwJMHg0MDYwMDEwMCwgMHhmZmUwMDdmOCwgV1JfMXxSRF9DMHxMQywJCTAsCQkwLAkJSVZJUlQ2NCwgMCB9LAorK3siZG1mdXIiLAkJInQsZCIsCQkweDcwMDAwMDFlLCAweGZmZTAwN2ZmLCBXUl8xLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJkbXQiLAkJCSIiLAkJMHg0MTYwMGJjMSwgMHhmZmZmZmZmZiwgVFJBUCwJCQkwLAkJMCwJCU1UMzIsCTAgfSwKKyB7ImRtdCIsCQkJInQiLAkJMHg0MTYwMGJjMSwgMHhmZmUwZmZmZiwgV1JfMXxUUkFQLAkJMCwJCTAsCQlNVDMyLAkwIH0sCisgeyJkbXRjMCIsCQkidCxHIiwJCTB4NDBhMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQzB8V1JfQ0N8Q00sCTAsCQlJMywJCTAsCUVFIH0sCitAQCAtMTA4MCw2ICsxMDg0LDggQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIC8qIGRtZmMzIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KKyAvKiBkbXRjMyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgeyJkbXVoIiwJCSJkLHMsdCIsCTB4MDAwMDAwZGMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyt7ImRtdHVyIiwJCSJ0LGQiLAkJMHg3MDAwMDAxZiwgMHhmZmUwMDdmZiwJUkRfMSwJCQkwLAkJWExQLAkJMCwJMCB9LAorK3siZG11bCIsCQkiZCxzLHQiLAkweDcwMDAwMDA2LCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJkbXVsIiwJCSJkLHMsdCIsCTB4MDAwMDAwOWMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQsdix0IiwJMHg3MDAwMDAwMywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfSElMTywJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJkbXVsIiwJCSJkLHYsdCIsCTAsICAgIChpbnQpIE1fRE1VTCwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCU0zMnxJNjkgfSwKK0BAIC0xMjI5LDkgKzEyMzUsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJsZCIsCQkJInMsLWIoK1IpIiwJMHhlYzE4MDAwMCwgMHhmYzFjMDAwMCwgV1JfMSwJCQlSRF9wYywJCUk2OSwJCTAsCTAgfSwKKyB7ImxkIiwJCQkidCxBKGIpIiwJMCwgICAgKGludCkgTV9MRF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCTAgfSwKKyB7ImxkIiwJCQkidCxvKGIpIiwJMHhkYzAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8zfExNLAkJMCwJCUkzLAkJMCwJMCB9LAorLXsibGRhZGR3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMCwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17ImxkYWRkd3UiLAkJInQsYiIsCQkweDcwMDAwMDExLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKyt7ImxkYWRkdyIsCQkidCxiIiwJCTB4NzAwMDAwMTAsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibGRhZGR3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTEsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibGRhZGRkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxMiwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJsZGMxIiwJCSJULG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCisgeyJsZGMxIiwJCSJFLG8oYikiLAkweGQ0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8Q0xEfEZQX0QsCTAsCQlJMiwJCTAsCVNGIH0sCisgeyJsZGMxIiwJCSJULEEoYikiLAkwLCAgICAoaW50KSBNX0xEQzFfQUIsCUlOU05fTUFDUk8sCQlJTlNOMl9NX0ZQX0QsCUkyLAkJMCwJU0YgfSwKK0BAIC0xMzk2LDcgKzE0MDIsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJtZmxvIiwJCSJkLDkiLAkJMHgwMDAwMDAxMiwgMHhmZjlmMDdmZiwgV1JfMXxSRF9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCisgeyJtZmxvMSIsCQkiZCIsCQkweDcwMDAwMDEyLCAweGZmZmYwN2ZmLAlXUl8xfFJEX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAorIHsibWZsaHh1IiwJCSJkIiwJCTB4MDAwMDAwNTIsIDB4ZmZmZjA3ZmYsCVdSXzF8TU9EX0hJTE8sCQkwLAkJMCwJCVNNVCwJMCB9LAorLXsibWZjciIsCQkidCxzIiwJCTB4NzAwMDAwMTgsIDB4ZmMwMGZmZmYsIFdSXzF8UkRfMiwJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtZmNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOCwgMHhmYzAwZmZmZiwgV1JfMSwJCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsibWZzYSIsCQkiZCIsCQkweDAwMDAwMDI4LCAweGZmZmYwN2ZmLAlXUl8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im1pbi5vYiIsCQkiWCxZLFEiLAkweDc4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJU0IxLAkJTVgsCTAgfSwKKyB7Im1pbi5vYiIsCQkiRCxTLFEiLAkweDQ4MDAwMDA2LCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJTjU0LAkJMCwJMCB9LAorQEAgLTE0NDEsMTAgKzE0NDcsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIC8qIG1vdmUgaXMgYXQgdGhlIHRvcCBvZiB0aGUgdGFibGUuICAqLworIHsibXNnbi5xaCIsCQkiWCxZLFEiLAkweDc4MjAwMDAwLCAweGZjMjAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJMCwJCU1YLAkwIH0sCisgeyJtc2dzbmQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dTTkQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibXNnc25kcyIsCQkiZCx0IiwJCTB4NGEwMDAwMDEsIDB4ZmZlMDA3ZmYsCVdSXzF8UkRfMnxSRF9DMHxXUl9DMCwJMCwJCVhMUCwJCTAsCTAgfSwKKyB7Im1zZ2xkIiwJCSIiLCAJCTAsICAgIChpbnQpIE1fTVNHTEQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorIHsibXNnbGQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dMRF9ULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKy17Im1zZ3dhaXQiLAkJIiIsIAkJMCwgICAgKGludCkgTV9NU0dXQUlULAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKy17Im1zZ3dhaXQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dXQUlUX1QsSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtc2dsZHMiLAkJImQsdCIsCQkweDRhMDAwMDAyLCAweGZmZTAwN2ZmLAlXUl8xfFJEXzJ8UkRfQzB8V1JfQzAsCTAsCQlYTFAsCQkwLAkwIH0sCisreyJtc2d3YWl0IiwJCSIiLAkJMCwgICAgKGludCkgTV9NU0dXQUlULCAgSU5TTl9NQUNSTywJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJtc2d3YWl0IiwJCSJ0IiwJCTAsICAgIChpbnQpIE1fTVNHV0FJVF9ULElOU05fTUFDUk8sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibXNnc3luYyIsCQkiIiwJCTB4NGEwMDAwMDQsIDB4ZmZmZmZmZmYsMCwJCQkwLAkJWExQLAkJMCwJMCB9LAorIHsibXN1Yi5kIiwJCSJELFIsUyxUIiwJMHg0YzAwMDAyOSwgMHhmYzAwMDAzZiwgV1JfMXxSRF8yfFJEXzN8UkRfNHxGUF9ELCAwLAkJSTRfMzMsCQkwLAlJMzcgfSwKKyB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDQ2MjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRSwJCTAsCTAgfSwKKyB7Im1zdWIuZCIsCQkiRCxTLFQiLAkweDcyMjAwMDE5LCAweGZmZTAwMDNmLAlXUl8xfFJEXzJ8UkRfM3xGUF9ELAkwLAkJSUwyRiwJCTAsCTAgfSwKK0BAIC0xNDk0LDcgKzE1MDMsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJtdGxvIiwJCSJzLDciLAkJMHgwMDAwMDAxMywgMHhmYzFmZTdmZiwgUkRfMXxXUl9MTywJCTAsCQkwLAkJRDMyLAkwIH0sCisgeyJtdGxvMSIsCQkicyIsCQkweDcwMDAwMDEzLCAweGZjMWZmZmZmLAlSRF8xfFdSX0xPLAkJMCwJCUVFLAkJMCwJMCB9LAorIHsibXRsaHgiLAkJInMiLAkJMHgwMDAwMDA1MywgMHhmYzFmZmZmZiwJUkRfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisteyJtdGNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOSwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtdG0wIiwJCSJzIiwJCTB4NzAwMDAwMDgsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJtdG0xIiwJCSJzIiwJCTB4NzAwMDAwMGMsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisgeyJtdG0yIiwJCSJzIiwJCTB4NzAwMDAwMGQsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCitAQCAtMTkyNCw5ICsxOTMzLDkgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsic3V4YzEiLAkJIlMsdChiKSIsCTB4NGMwMDAwMGQsIDB4ZmMwMDA3ZmYsIFJEXzF8UkRfMnxSRF8zfFNNfEZQX0QsCTAsCQlJNV8zM3xONTUsCTAsCUkzN30sCisgeyJzdyIsCQkJInQsbyhiKSIsCTB4YWMwMDAwMDAsIDB4ZmMwMDAwMDAsCVJEXzF8UkRfM3xTTSwJCTAsCQlJMSwJCTAsCTAgfSwKKyB7InN3IiwJCQkidCxBKGIpIiwJMCwgICAgKGludCkgTV9TV19BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCTAgfSwKKy17InN3YXB3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNCwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17InN3YXB3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTUsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisteyJzd2FwZCIsCQkidCxiIiwJCTB4NzAwMDAwMTYsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisreyJzd2FwdyIsCQkidCxiIiwJCTB4NzAwMDAwMTQsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sic3dhcHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNSwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJzd2FwZCIsCQkidCxiIiwJCTB4NzAwMDAwMTYsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsic3djMCIsCQkiRSxvKGIpIiwJMHhlMDAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfM3xSRF9DMHxTTSwJCTAsCQlJMSwJCTAsCUlPQ1R8SU9DVFB8SU9DVDJ8STM3IH0sCisgeyJzd2MwIiwJCSJFLEEoYikiLAkwLCAgICAoaW50KSBNX1NXQzBfQUIsCUlOU05fTUFDUk8sCQkwLAkJSTEsCQkwLAlJT0NUfElPQ1RQfElPQ1QyfEkzNyB9LAorIHsic3djMSIsCQkiVCxvKGIpIiwJMHhlNDAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNfEZQX1MsCTAsCQlJMSwJCTAsCTAgfSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTAxYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUZpeC1hbi1pbnRlcm5hbC1lcnJvci1pbi1kb19wcmludF90b19tYXBmaWxlLXNlZW4td2kucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA4ZThmNzdlYzJiNjI2MmU3ZDEwYWY1NDcwMGMzNDAxNzNkOTU3MjY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgRmViIDIwMTUgMDk6MDU6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8xM10gRml4IGFuIGludGVybmFsIGVycm9yIGluIGRvX3ByaW50X3RvX21hcGZpbGUgc2VlbiB3aXRoCisgZ29sZCBvbiBhcm0KKworVGhpcyBpcyBkdWUgdG8gbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiBkb19wcmludF90b19tYXBmaWxlIGZvcgorYXRycmlidXRlYSBzZWN0aW9uIChBUk0uYXR0cmlidXRlcyksIGl0IHN0YXJ0ZWQgdG8gc2hvdyB1cCBhZnRlciBmaXgKK2ZvciBQUiBnb2xkLzE2OTgwIHdhcyBpbnN0YWxsZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKy0tLQorIGdvbGQvYXR0cmlidXRlcy5oIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ29sZC9hdHRyaWJ1dGVzLmggYi9nb2xkL2F0dHJpYnV0ZXMuaAoraW5kZXggMmFhN2E3OC4uM2QxMjZlNiAxMDA2NDQKKy0tLSBhL2dvbGQvYXR0cmlidXRlcy5oCisrKysgYi9nb2xkL2F0dHJpYnV0ZXMuaAorQEAgLTM4Nyw2ICszODcsMTAgQEAgY2xhc3MgT3V0cHV0X2F0dHJpYnV0ZXNfc2VjdGlvbl9kYXRhIDogcHVibGljIE91dHB1dF9zZWN0aW9uX2RhdGEKKyAgIHsgfQorIAorICBwcm90ZWN0ZWQ6CisrICAvLyBXcml0ZSB0byBhIG1hcCBmaWxlLgorKyAgdm9pZAorKyAgZG9fcHJpbnRfdG9fbWFwZmlsZShNYXBmaWxlKiBtYXBmaWxlKSBjb25zdAorKyAgeyBtYXBmaWxlLT5wcmludF9vdXRwdXRfZGF0YSh0aGlzLCBfKCIqKiBhdHRyaWJ1dGVzIikpOyB9CisgICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgb3V0cHV0IGZpbGUuCisgICB2b2lkCisgICBkb193cml0ZShPdXRwdXRfZmlsZSopOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjQzMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitGcm9tIGViZTI2ZDg1NTQ1MmQwN2UwMTUyYmQ3OGQ0OTY2NDc1ZDJkZTFkZTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCA1IE1hciAyMDE1IDA3OjMwOjMxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdvbGQvYXJtOiBTa2lwIHBpYyBjaGVjayBmb3IgUl9BUk1fUkVMMzIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdvbGQvYXJtLmNjIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9nb2xkL2FybS5jYyBiL2dvbGQvYXJtLmNjCitpbmRleCA2YzQ3MmJiLi5mYjgwNDM1IDEwMDY0NAorLS0tIGEvZ29sZC9hcm0uY2MKKysrKyBiL2dvbGQvYXJtLmNjCitAQCAtNzgyOSw2ICs3ODI5LDcgQEAgVGFyZ2V0X2FybTxiaWdfZW5kaWFuPjo6U2Nhbjo6Y2hlY2tfbm9uX3BpYyhSZWxvYmoqIG9iamVjdCwKKyAgICAgY2FzZSBlbGZjcHA6OlJfQVJNX1RMU19EVFBNT0QzMjoKKyAgICAgY2FzZSBlbGZjcHA6OlJfQVJNX1RMU19EVFBPRkYzMjoKKyAgICAgY2FzZSBlbGZjcHA6OlJfQVJNX1RMU19UUE9GRjMyOgorKyAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fUkVMMzI6CisgICAgICAgcmV0dXJuOworIAorICAgICBkZWZhdWx0OgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0OWMzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaApAQCAtMCwwICsxLDEzMSBAQAorRnJvbSBlOWMxYmRhZDI2OWMwYzMzNTJlZWJjYzk0ODFlZDY1MTQ0MDAxYjBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FyeSBDb3V0YW50IDxjY291dGFudEBnb29nbGUuY29tPgorRGF0ZTogTW9uLCAxNiBGZWIgMjAxNSAyMjoxNToxMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBGaXggLS1keW5hbWljLWxpc3Qgc28gdGhhdCBzeW1ib2xzIG5vdCBpbiB0aGUgbGlzdCBhcmUgc3RpbGwKKyBleHBvcnRlZC4KKworSW4gUFIgMTM1NzcsIHRoZSBjb21wbGFpbnQgd2FzIHRoYXQgLUJzeW1ib2xpYyB3YXMgb3ZlcnJpZGluZyB0aGUgYmluZGluZworYmVoYXZpb3IgZm9yIHN5bWJvbHMgbGlzdGVkIGluIHRoZSAtLWR5bmFtaWMtbGlzdCBieSBzZXR0aW5nIHRoZSBEVF9TWU1CT0xJQwordGFnIGluIHRoZSBkeW5hbWljIHRhYmxlLiBJbiByZWFkaW5nIHRoZSBHbnUgbGQgbWFudWFsLCBJIGRlY2lkZWQgdGhhdAorLS1keW5hbWljLWxpc3Qgc2hvdWxkIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvZiAtQnN5bWJvbGljLCBhbmQgbW9kaWZpZWQKK2dvbGQgc28gdGhhdCAtLWR5bmFtaWMtbGlzdCB3b3VsZCB0cmVhdCBzeW1ib2xzIGxpc3RlZCBhcyBwcmVlbXB0aWJsZSwKK2FuZCBhbGwgb3RoZXIgc3ltYm9scyBhcyBpbnRlcm5hbGx5IGJvdW5kLiBJIHdhcyB3cm9uZy4KKworUFIgMTY5OTIgc2hvd3MgdGhhdCB3aXRoIC0tZHluYW1pYy1saXN0IChhbmQgbm90IC1Cc3ltYm9saWMpLCBhIHN5bWJvbAorbm90IGxpc3RlZCBpbiB0aGUgZHluYW1pYyBsaXN0IGlzIGJlaW5nIGludGVybmFsbHkgYm91bmQgd2l0aGluIHRoZQorc2hhcmVkIGxpYnJhcnksIGJ1dCBiZWNhdXNlIGl0J3Mgc3RpbGwgaW4gdGhlIGR5bmFtaWMgc3ltYm9sIHRhYmxlLCB3ZQorZXhwb3NlIGl0IHRvIGEgQ09QWSByZWxvY2F0aW9uLCBhbmQgdGhpbmdzIGdvIHJlYWxseSBiYWQgZnJvbSB0aGVyZS4KKworKEkgY2FuIHJlcHJvZHVjZSB0aGUgc2FtZSBmYWlsdXJlLCBzaW1wbHkgYnkgdHVybmluZyBvbiAtQnN5bWJvbGljLWZ1bmN0aW9ucword2l0aCB0aGUgR251IGxpbmtlci4gRXZlbiB0aG91Z2ggdGhlIHN5bWJvbCBpcyBib3VuZCBpbnRlcm5hbGx5LCBpdCdzCitzdGlsbCBleHBvcnRlZCB0byB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUsIGFuZCBpcyBleHBvc2VkIHRvIGEgQ09QWQorcmVsb2NhdGlvbi4pCisKK0kndmUgYmFja2VkIG91dCBwYXJ0IG9mIHRoZSBmaXggZm9yIFBSIDEzNTc3LCBhbmQgLUJzeW1ib2xpYyAob3IKKy1Cc3ltYm9saWMtZnVuY3Rpb25zKSBjYW4gbm93IGJlIHVzZWQgd2l0aCAtLWR5bmFtaWMtbGlzdCwgYnV0IGlmIHRoZQordHdvIGFyZSB1c2VkIHRvZ2V0aGVyLCB3ZSBkbyBub3Qgc2V0IERUX1NZTUJPTElDIG9yIERGX1NZTUJPTElDCisodGhpcyBtYXRjaGVzIEdudSBsZCBiZWhhdmlvcikuIFdlIG5vdyB0cmVhdCBzeW1ib2xzIGxpc3RlZCBpbiB0aGUKK2R5bmFtaWMgbGlzdCBhcyBwcmVtcHRpYmxlLCBidXQgd2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgdHJlYXQgc3ltYm9scworbm90IGxpc3RlZCB0aGVyZSBhcyBub24tcHJlbXB0aWJsZS4KKworZ29sZC8KKwlQUiBnb2xkLzEzNTc3CisJUFIgZ29sZC8xNjk5MgorCSogbGF5b3V0LmNjIChMYXlvdXQ6OmZpbmlzaF9keW5hbWljX3NlY3Rpb24pOiBEb24ndCBzZXQgRFRfU1lNQk9MSUMgb3IKKwlERl9TWU1CT0xJQyBpZiAtLWR5bmFtaWMtbGlzdCBvcHRpb24gaXMgdXNlZC4KKwkqIG9wdGlvbnMuY2MgKEdlbmVyYWxfb3B0aW9uczo6ZmluYWxpemUpOiAtLWR5bmFtaWMtbGlzdCBpcyBub3QKKwltdXR1YWxseSBleGNsdXNpdmUgd2l0aCAtQnN5bWJvbGljLgorCSogc3ltdGFiLmggKFN5bWJvbDo6aXNfcHJlZW1wdGlibGUpOiBEb24ndCBleGNsdWRlIGR5bmFtaWMgc3ltYm9scyBub3QKKwlsaXN0ZWQgaW4gLS1keW5hbWljLWxpc3QuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKGR5bmFtaWNfbGlzdF9saWIyLnNvKTogQWRkCisJLUJzeW1ib2xpYy1mdW5jdGlvbnMuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIGdvbGQvQ2hhbmdlTG9nICAgICAgICAgICAgIHwgMTQgKysrKysrKysrKysrKysKKyBnb2xkL2xheW91dC5jYyAgICAgICAgICAgICB8ICAzICsrLQorIGdvbGQvb3B0aW9ucy5jYyAgICAgICAgICAgIHwgIDcgLS0tLS0tLQorIGdvbGQvc3ltdGFiLmggICAgICAgICAgICAgIHwgIDYgKystLS0tCisgZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gfCAgMiArLQorIGdvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluIHwgIDIgKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ29sZC9sYXlvdXQuY2MgYi9nb2xkL2xheW91dC5jYworaW5kZXggYmNkYWFjOC4uNzgzNjY0MCAxMDA2NDQKKy0tLSBhL2dvbGQvbGF5b3V0LmNjCisrKysgYi9nb2xkL2xheW91dC5jYworQEAgLTQ4NzMsNyArNDg3Myw4IEBAIExheW91dDo6ZmluaXNoX2R5bmFtaWNfc2VjdGlvbihjb25zdCBJbnB1dF9vYmplY3RzKiBpbnB1dF9vYmplY3RzLAorICAgICBmbGFncyB8PSBlbGZjcHA6OkRGX1NUQVRJQ19UTFM7CisgICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLm9yaWdpbigpKQorICAgICBmbGFncyB8PSBlbGZjcHA6OkRGX09SSUdJTjsKKy0gIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkpCisrICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLkJzeW1ib2xpYygpCisrICAgICAgJiYgIXBhcmFtZXRlcnMtPm9wdGlvbnMoKS5oYXZlX2R5bmFtaWNfbGlzdCgpKQorICAgICB7CisgICAgICAgZmxhZ3MgfD0gZWxmY3BwOjpERl9TWU1CT0xJQzsKKyAgICAgICAvLyBBZGQgRFRfU1lNQk9MSUMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBsb2FkZXJzLgorZGlmZiAtLWdpdCBhL2dvbGQvb3B0aW9ucy5jYyBiL2dvbGQvb3B0aW9ucy5jYworaW5kZXggN2ViOGYyNy4uN2YxZjY5ZSAxMDA2NDQKKy0tLSBhL2dvbGQvb3B0aW9ucy5jYworKysrIGIvZ29sZC9vcHRpb25zLmNjCitAQCAtMTIwMCwxMyArMTIwMCw2IEBAIEdlbmVyYWxfb3B0aW9uczo6ZmluYWxpemUoKQorICAgLy8gaW4gdGhlIHBhdGgsIGFzIGFwcHJvcHJpYXRlLgorICAgdGhpcy0+YWRkX3N5c3Jvb3QoKTsKKyAKKy0gIC8vIC0tZHluYW1pYy1saXN0IG92ZXJyaWRlcyAtQnN5bWJvbGljIGFuZCAtQnN5bWJvbGljLWZ1bmN0aW9ucy4KKy0gIGlmICh0aGlzLT5oYXZlX2R5bmFtaWNfbGlzdCgpKQorLSAgICB7CistICAgICAgdGhpcy0+c2V0X0JzeW1ib2xpYyhmYWxzZSk7CistICAgICAgdGhpcy0+c2V0X0JzeW1ib2xpY19mdW5jdGlvbnMoZmFsc2UpOworLSAgICB9CistCisgICAvLyBOb3cgdGhhdCB3ZSd2ZSBub3JtYWxpemVkIHRoZSBvcHRpb25zLCBjaGVjayBmb3IgY29udHJhZGljdG9yeSBvbmVzLgorICAgaWYgKHRoaXMtPnNoYXJlZCgpICYmIHRoaXMtPmlzX3N0YXRpYygpKQorICAgICBnb2xkX2ZhdGFsKF8oIi1zaGFyZWQgYW5kIC1zdGF0aWMgYXJlIGluY29tcGF0aWJsZSIpKTsKK2RpZmYgLS1naXQgYS9nb2xkL3N5bXRhYi5oIGIvZ29sZC9zeW10YWIuaAoraW5kZXggYWEwY2I2OC4uOTQxMzM2MCAxMDA2NDQKKy0tLSBhL2dvbGQvc3ltdGFiLmgKKysrKyBiL2dvbGQvc3ltdGFiLmgKK0BAIC02MDQsMTAgKzYwNCw4IEBAIGNsYXNzIFN5bWJvbAorICAgICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLmluX2R5bmFtaWNfbGlzdCh0aGlzLT5uYW1lKCkpKQorICAgICAgIHJldHVybiB0cnVlOworIAorLSAgICAvLyBJZiB0aGUgdXNlciB1c2VkIC1Cc3ltYm9saWMgb3IgcHJvdmlkZWQgYSAtLWR5bmFtaWMtbGlzdCBzY3JpcHQsCistICAgIC8vIHRoZW4gbm90aGluZyAoZWxzZSkgaXMgcHJlZW1wdGlibGUuCistICAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkKKy0gICAgICAgIHx8IHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5oYXZlX2R5bmFtaWNfbGlzdCgpKQorKyAgICAvLyBJZiB0aGUgdXNlciB1c2VkIC1Cc3ltYm9saWMsIHRoZW4gbm90aGluZyAoZWxzZSkgaXMgcHJlZW1wdGlibGUuCisrICAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkpCisgICAgICAgcmV0dXJuIGZhbHNlOworIAorICAgICAvLyBJZiB0aGUgdXNlciB1c2VkIC1Cc3ltYm9saWMtZnVuY3Rpb25zLCB0aGVuIGZ1bmN0aW9ucyBhcmUgbm90CitkaWZmIC0tZ2l0IGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gYi9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQoraW5kZXggZjc2N2MyMS4uN2I3M2Y5ZCAxMDA2NDQKKy0tLSBhL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCisrKysgYi9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorQEAgLTE1MTgsNyArMTUxOCw3IEBAIGR5bmFtaWNfbGlzdF9saWIxLm86IGR5bmFtaWNfbGlzdF9saWIxLmNjCisgCSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKyBkeW5hbWljX2xpc3RfbGliMi5zbzogZ2NjdGVzdGRpci9sZCBkeW5hbWljX2xpc3RfbGliMi5vICQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50CistCSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisrCSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworIGR5bmFtaWNfbGlzdF9saWIyLm86IGR5bmFtaWNfbGlzdF9saWIyLmNjCisgCSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKK2RpZmYgLS1naXQgYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluCitpbmRleCAyMTdlNDcyLi5iNGFlM2ZkIDEwMDY0NAorLS0tIGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KKysrKyBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluCitAQCAtNTMxOSw3ICs1MzE5LDcgQEAgdW5pbnN0YWxsLWFtOgorIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWENPTVBJTEUpIC1jIC1mcGljIC1vICRAICQ8CisgCisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAZHluYW1pY19saXN0X2xpYjIuc286IGdjY3Rlc3RkaXIvbGQgZHluYW1pY19saXN0X2xpYjIubyAkKHNyY2RpcikvZHluYW1pY19saXN0XzIudAorLUBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworK0BHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMgLVdsLC0tZHluYW1pYy1saXN0LCQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50IGR5bmFtaWNfbGlzdF9saWIyLm8KKyBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBkeW5hbWljX2xpc3RfbGliMi5vOiBkeW5hbWljX2xpc3RfbGliMi5jYworIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQAkkKENYWENPTVBJTEUpIC1jIC1mcGljIC1vICRAICQ8CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9hZGQtdGh1bmRlcngtc3VwcG9ydC1mb3ItZ2FzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjg3NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9hZGQtdGh1bmRlcngtc3VwcG9ydC1mb3ItZ2FzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCB0aHVuZGVyeCBzdXBwb3J0IHRvIGdhcworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDE0LTEwL21zZzAwMTcwLmh0bWxdCisKK1NpZ25lZC1vZmYtYnk6IEphZ2FkZWVzaCBLcmlzaG5hbmphbmFwcGEgPGprcmlzaG5hbmphbmFwcGFAbXZpc3RhLmNvbT4KKworQXV0aG9yOiBBbmRyZXcgUGluc2tpIDxhcGluc2tpQGNhdml1bS5jb20+CitEYXRlOiBNb24sIDIwIE9jdCAyMDE0IDExOjQyOjU4IC0wNzAwCisKKyAgICBUaGlzIHBhdGNoIGFkZHMgLW1jcHU9dGh1bmRlcnggc3VwcG9ydCB0byBnYXMuCisKK2RpZmYgLU5hdXJwIGdpdF9vcmcvZ2FzL2NvbmZpZy90Yy1hYXJjaDY0LmMgZ2l0L2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCistLS0gZ2l0X29yZy9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYwkyMDE1LTA5LTA3IDAyOjEzOjUxLjk4ODk3MzUyMyAtMDcwMAorKysrIGdpdC9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYwkyMDE1LTA5LTA3IDAyOjE1OjIxLjcwNTk4MTU0MCAtMDcwMAorQEAgLTcyMDYsNiArNzIwNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWFyY2g2NF9jcHVfb3B0aW9uX3QKKyAJCQkJIEFBUkNINjRfRkVBVFVSRV9DUkMpLCAiQ29ydGV4LUE1NyJ9LAorICAgeyJjb3J0ZXgtYTcyIiwgQUFSQ0g2NF9GRUFUVVJFIChBQVJDSDY0X0FSQ0hfVjgsCisgCQkJCSAgQUFSQ0g2NF9GRUFUVVJFX0NSQyksICJDb3J0ZXgtQTcyIn0sCisrICB7InRodW5kZXJ4IiwJCUFBUkNINjRfQVJDSF9WOCwgIkNhdml1bSBUaHVuZGVyWCJ9LAkJCQkgIAorICAgeyJleHlub3MtbTEiLCBBQVJDSDY0X0ZFQVRVUkUgKEFBUkNINjRfQVJDSF9WOCwKKyAJCQkJIEFBUkNINjRfRkVBVFVSRV9DUkMgfCBBQVJDSDY0X0ZFQVRVUkVfQ1JZUFRPKSwKKyAJCQkJICJTYW1zdW5nIEV4eW5vcyBNMSJ9LAorZGlmZiAtTmF1cnAgZ2l0X29yZy9nYXMvZG9jL2MtYWFyY2g2NC50ZXhpIGdpdC9nYXMvZG9jL2MtYWFyY2g2NC50ZXhpCistLS0gZ2l0X29yZy9nYXMvZG9jL2MtYWFyY2g2NC50ZXhpCTIwMTUtMDktMDcgMDI6MTM6NTEuOTY5OTczNTIyIC0wNzAwCisrKysgZ2l0L2dhcy9kb2MvYy1hYXJjaDY0LnRleGkJMjAxNS0wOS0wNyAwMjoxNjowMy4zNjQ5ODUyNjIgLTA3MDAKK0BAIC01OCw2ICs1OCw3IEBAIG9uIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiAgVGhlIGZvbGxvd2luZworIEBjb2Rle2NvcnRleC1hNTN9LAorIEBjb2Rle2NvcnRleC1hNTd9LAorIEBjb2Rle2NvcnRleC1hNzJ9LAorK0Bjb2Rle3RodW5kZXJ4fSwKKyBAY29kZXtleHlub3MtbTF9LAorIEBjb2Rle3hnZW5lMX0sCisgYW5kCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYmludXRpbHMtb2N0ZW9uMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTA4YzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYmludXRpbHMtb2N0ZW9uMy5wYXRjaApAQCAtMCwwICsxLDI3MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC9naXR3ZWIuY2dpP3A9YmludXRpbHMtZ2RiLmdpdDthPWNvbW1pdDtoPTJjNjI5ODU2NTlkYTIxYTNmZTE2MDYyZDIxMWE3MTU4Zjc5YWQyZTkKKworU2lnbmVkLW9mZi1CeTogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CisKK0luZGV4OiBnaXQvYmZkL2FyY2h1cmVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvYXJjaHVyZXMuYworKysrIGdpdC9iZmQvYXJjaHVyZXMuYworQEAgLTE3OSw2ICsxNzksNyBAQCBERVNDUklQVElPTgorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uCQk2NTAxCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb25wCQk2NjAxCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yCQk2NTAyCisrLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24zCQk2NTAzCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIHsqIGRlY2ltYWwgJ1hMUicgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIHsqIGRlY2ltYWwgJ1hMUCcgICp9CisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCitJbmRleDogZ2l0L2JmZC9iZmQtaW4yLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvYmZkLWluMi5oCisrKysgZ2l0L2JmZC9iZmQtaW4yLmgKK0BAIC0xOTY5LDYgKzE5NjksNyBAQCBlbnVtIGJmZF9hcmNoaXRlY3R1cmUKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uICAgICAgICAgICA2NTAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAgICAgICAgICAgNjYwMQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24yICAgICAgICAgIDY1MDIKKysjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMyAgICAgICAgICA2NTAzCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgLyogZGVjaW1hbCAnWExSJyAgKi8KKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICAvKiBkZWNpbWFsICdYTFAnICAqLworICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCitJbmRleDogZ2l0L2JmZC9jcHUtbWlwcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvYmZkL2NwdS1taXBzLmMKKysrKyBnaXQvYmZkL2NwdS1taXBzLmMKK0BAIC0xMDIsNiArMTAyLDcgQEAgZW51bQorICAgSV9taXBzb2N0ZW9uLAorICAgSV9taXBzb2N0ZW9ucCwKKyAgIElfbWlwc29jdGVvbjIsCisrICBJX21pcHNvY3Rlb24zLAorICAgSV94bHIsCisgICBJX21pY3JvbWlwcywKKyAgIElfeGxwCitAQCAtMTUzLDYgKzE1NCw3IEBAIHN0YXRpYyBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYXJjaF9pbmYKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24sIm1pcHM6b2N0ZW9uIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb24pKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb25wLCJtaXBzOm9jdGVvbisiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbnApKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24yLCJtaXBzOm9jdGVvbjIiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjIpKSwKKysgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24zLCJtaXBzOm9jdGVvbjMiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjMpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHIsICJtaXBzOnhsciIsICAgICAgIEZBTFNFLCBOTihJX3hscikpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLE5OKElfbWljcm9taXBzKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfeGxwLCAibWlwczp4bHAiLCAgICAgIEZBTFNFLCAwKQorSW5kZXg6IGdpdC9iZmQvZWxmeHgtbWlwcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvYmZkL2VsZnh4LW1pcHMuYworKysrIGdpdC9iZmQvZWxmeHgtbWlwcy5jCitAQCAtNjYwNCw2ICs2NjA0LDkgQEAgX2JmZF9lbGZfbWlwc19tYWNoIChmbGFnd29yZCBmbGFncykKKyAgICAgY2FzZSBFX01JUFNfTUFDSF9MUzNBOgorICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX2xvb25nc29uXzNhOworIAorKyAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjM6CisrICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfb2N0ZW9uMzsKKysKKyAgICAgY2FzZSBFX01JUFNfTUFDSF9PQ1RFT04yOgorICAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX29jdGVvbjI7CisgCitAQCAtMTE4NzgsNiArMTE4ODEsMTAgQEAgbWlwc19zZXRfaXNhX2ZsYWdzIChiZmQgKmFiZmQpCisgICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfNjRSMiB8IEVfTUlQU19NQUNIX09DVEVPTjsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSBiZmRfbWFjaF9taXBzX29jdGVvbjM6CisrICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfNjRSMiB8IEVfTUlQU19NQUNIX09DVEVPTjM7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgYmZkX21hY2hfbWlwc194bHI6CisgICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfNjQgfCBFX01JUFNfTUFDSF9YTFI7CisgICAgICAgYnJlYWs7CitAQCAtMTQ3NzMsNiArMTQ3ODAsNyBAQCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbgorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19tYWNoX2V4dGVuc2lvbiBtaXBzX21hY2hfZXh0ZW5zaW9uc1tdID0KKyB7CisgICAvKiBNSVBTNjRyMiBleHRlbnNpb25zLiAgKi8KKysgIHsgYmZkX21hY2hfbWlwc19vY3Rlb24zLCBiZmRfbWFjaF9taXBzX29jdGVvbjIgfSwKKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb24yLCBiZmRfbWFjaF9taXBzX29jdGVvbnAgfSwKKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb25wLCBiZmRfbWFjaF9taXBzX29jdGVvbiB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbiwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKK0luZGV4OiBnaXQvZ2FzL2NvbmZpZy90Yy1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvY29uZmlnL3RjLW1pcHMuYworKysrIGdpdC9nYXMvY29uZmlnL3RjLW1pcHMuYworQEAgLTMwNiw3ICszMDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbGVfYXNlX2V4cGxpY2l0OworIHVuc2lnbmVkIGxvbmcgbWlwc19ncHJtYXNrOworIHVuc2lnbmVkIGxvbmcgbWlwc19jcHJtYXNrWzRdOworIAorLS8qIFRydWUgaWYgYW55IE1JUFMxNiBjb2RlIHdhcyBwcm9kdWNlZC4gICovCisrLyogMlRydWUgaWYgYW55IE1JUFMxNiBjb2RlIHdhcyBwcm9kdWNlZC4gICovCisgc3RhdGljIGludCBmaWxlX2FzZV9taXBzMTY7CisgCisgI2RlZmluZSBJU0FfU1VQUE9SVFNfTUlQUzE2RSAobWlwc19vcHRzLmlzYSA9PSBJU0FfTUlQUzMyCQlcCitAQCAtNTEwLDcgKzUxMCw4IEBAIHN0YXRpYyBpbnQgbWlwc18zMmJpdG1vZGUgPSAwOworICNkZWZpbmUgQ1BVX0hBU19ST1IoQ1BVKQlDUFVfSEFTX0RST1IgKENQVSkKKyAKKyAvKiBUcnVlIGlmIENQVSBpcyBpbiB0aGUgT2N0ZW9uIGZhbWlseSAqLworLSNkZWZpbmUgQ1BVX0lTX09DVEVPTihDUFUpICgoQ1BVKSA9PSBDUFVfT0NURU9OIHx8IChDUFUpID09IENQVV9PQ1RFT05QIHx8IChDUFUpID09IENQVV9PQ1RFT04yKQorKyNkZWZpbmUgQ1BVX0lTX09DVEVPTihDUFUpICgoQ1BVKSA9PSBDUFVfT0NURU9OIHx8IChDUFUpID09IENQVV9PQ1RFT05QIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoQ1BVKSA9PSBDUFVfT0NURU9OMiB8fCAoQ1BVKSA9PSBDUFVfT0NURU9OMykKKyAKKyAvKiBUcnVlIGlmIENQVSBoYXMgc2VxL3NuZSBhbmQgc2VxaS9zbmVpIGluc3RydWN0aW9ucy4gICovCisgI2RlZmluZSBDUFVfSEFTX1NFUShDUFUpCShDUFVfSVNfT0NURU9OIChDUFUpKQorQEAgLTE4Njc3LDYgKzE4Njc4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX2NwdV9pbmZvIG1pcHNfYworICAgeyAib2N0ZW9uIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9PQ1RFT04gfSwKKyAgIHsgIm9jdGVvbisiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTlAgfSwKKyAgIHsgIm9jdGVvbjIiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTjIgfSwKKysgIHsgIm9jdGVvbjMiLCAgICAgICAgMCwgQVNFX1ZJUlQgfCBBU0VfVklSVDY0LCBJU0FfTUlQUzY0UjIsIENQVV9PQ1RFT04zIH0sCisgCisgICAvKiBSTUkgWGxyICovCisgICB7ICJ4bHIiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjQsICAgQ1BVX1hMUiB9LAorSW5kZXg6IGdpdC9nYXMvZG9jL2MtbWlwcy50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZ2FzL2RvYy9jLW1pcHMudGV4aQorKysrIGdpdC9nYXMvZG9jL2MtbWlwcy50ZXhpCitAQCAtMzgyLDYgKzM4Miw3IEBAIGxvb25nc29uM2EsCisgb2N0ZW9uLAorIG9jdGVvbissCisgb2N0ZW9uMiwKKytvY3Rlb24zLAorIHhsciwKKyB4bHAKKyBAZW5kIHF1b3RhdGlvbgorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL21pcHMuZXhwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9taXBzLmV4cAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL21pcHMuZXhwCitAQCAtMTEwMiw2ICsxMTAyLDcgQEAgaWYgeyBbaXN0YXJnZXQgbWlwcyotKi12eHdvcmtzKl0gfSB7CisgICAgIHJ1bl9saXN0X3Rlc3RfYXJjaGVzICJvY3Rlb24taWxsIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgb2N0ZW9uXQorICAgICBydW5fZHVtcF90ZXN0X2FyY2hlcyAib2N0ZW9uLXByZWYiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb25dCisgICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJvY3Rlb24yIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgb2N0ZW9uMl0KKysgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm9jdGVvbjMiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb24zXQorIAorICAgICBydW5fZHVtcF90ZXN0ICJzbWFydG1pcHMiCisgICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJtaXBzMzItZHNwIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgbWlwczMycjIgXAorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMuZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMuZAorQEAgLTAsMCArMSwyMCBAQAorKyNvYmpkdW1wOiAtZCAtciAtLXNob3ctcmF3LWluc24KKysjbmFtZTogTUlQUyBvY3Rlb24zIGluc3RydWN0aW9ucworKworKy4qOiArZmlsZSBmb3JtYXQgLiptaXBzLioKKysKKytEaXNhc3NlbWJseSBvZiBzZWN0aW9uIC50ZXh0OgorKworK1swLTlhLWZdKyA8Zm9vPjoKKysuKjogICAgNzFlYzAwMDggICAgICAgIG10bTAgICAgdDMsdDAKKysuKjogICAgNzFhNDAwMDggICAgICAgIG10bTAgICAgdDEsYTAKKysuKjogICAgNzA4MzAwMGMgICAgICAgIG10bTEgICAgYTAsdjEKKysuKjogICAgNzBlMTAwMGMgICAgICAgIG10bTEgICAgYTMsYXQKKysuKjogICAgNzAyMjAwMGQgICAgICAgIG10bTIgICAgYXQsdjAKKysuKjogICAgNzA4MzAwMGMgICAgICAgIG10bTEgICAgYTAsdjEKKysuKjogICAgNzBhMjAwMDkgICAgICAgIG10cDAgICAgYTEsdjAKKysuKjogICAgNzBjNDAwMDkgICAgICAgIG10cDAgICAgYTIsYTAKKysuKjogICAgNzA4MzAwMGEgICAgICAgIG10cDEgICAgYTAsdjEKKysuKjogICAgNzBlMTAwMGEgICAgICAgIG10cDEgICAgYTMsYXQKKysuKjogICAgNzAyMjAwMGIgICAgICAgIG10cDIgICAgYXQsdjAKKysuKjogICAgNzA4MzAwMGEgICAgICAgIG10cDEgICAgYTAsdjEKK0luZGV4OiBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9vY3Rlb24zLnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9vY3Rlb24zLnMKK0BAIC0wLDAgKzEsMjIgQEAKKysrICAgICAgIC50ZXh0CisrICAgICAgIC5zZXQgbm9yZW9yZGVyCisrICAgICAgIC5zZXQgbm9hdAorKworK2ZvbzoKKysgICAgICAgIG10bTAgJDE1LCQxMgorKyAgICAgICAgbXRtMCAkMTMsJDQKKysKKysgICAgICAgIG10bTEgJDQsJDMKKysgICAgICAgIG10bTEgJDcsJDEKKysKKysgICAgICAgIG10bTIgJDEsJDIKKysgICAgICAgIG10bTEgJDQsJDMKKysKKysgICAgICAgIG10cDAgJDUsJDIKKysgICAgICAgIG10cDAgJDYsJDQKKysKKysgICAgICAgIG10cDEgJDQsJDMKKysgICAgICAgIG10cDEgJDcsJDEKKysKKysgICAgICAgIG10cDIgJDEsJDIKKysgICAgICAgIG10cDEgJDQsJDMKK0luZGV4OiBnaXQvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCisrKysgZ2l0L2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorQEAgLTExOTYsNiArMTE5Niw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGUKKyAjZGVmaW5lIElOU05fT0NURU9OCQkgIDB4MDAwMDA4MDAKKyAjZGVmaW5lIElOU05fT0NURU9OUAkJICAweDAwMDAwMjAwCisgI2RlZmluZSBJTlNOX09DVEVPTjIJCSAgMHgwMDAwMDEwMAorKyNkZWZpbmUgSU5TTl9PQ1RFT04zCQkgIDB4MDAwMDAwNDAKKyAKKyAvKiBNSVBTIFI1OTAwIGluc3RydWN0aW9uICovCisgI2RlZmluZSBJTlNOXzU5MDAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKK0BAIC0xMzI1LDYgKzEzMjYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlCisgI2RlZmluZSBDUFVfT0NURU9OCTY1MDEKKyAjZGVmaW5lIENQVV9PQ1RFT05QCTY2MDEKKyAjZGVmaW5lIENQVV9PQ1RFT04yCTY1MDIKKysjZGVmaW5lIENQVV9PQ1RFT04zCTY1MDMKKyAjZGVmaW5lIENQVV9YTFIgICAgIAk4ODc2ODIgICAJLyogZGVjaW1hbCAnWExSJyAgICovCisgI2RlZmluZSBDUFVfWExQICAgICAgICAgODg3NjgwICAgICAgLyogZGVjaW1hbCAnWExQJyAgICovCisgCitAQCAtMTM5MSw2ICsxMzkzLDkgQEAgY3B1X2lzX21lbWJlciAoaW50IGNwdSwgdW5zaWduZWQgaW50IG1hcworICAgICBjYXNlIENQVV9PQ1RFT04yOgorICAgICAgIHJldHVybiAobWFzayAmIElOU05fT0NURU9OMikgIT0gMDsKKyAKKysgICAgY2FzZSBDUFVfT0NURU9OMzoKKysgICAgICByZXR1cm4gKG1hc2sgJiBJTlNOX09DVEVPTjMpICE9IDA7CisrCisgICAgIGNhc2UgQ1BVX1hMUjoKKyAgICAgICByZXR1cm4gKG1hc2sgJiBJTlNOX1hMUikgIT0gMDsKKyAKK0luZGV4OiBnaXQvb3Bjb2Rlcy9taXBzLWRpcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvb3Bjb2Rlcy9taXBzLWRpcy5jCisrKysgZ2l0L29wY29kZXMvbWlwcy1kaXMuYworQEAgLTY0OSw2ICs2NDksMTEgQEAgY29uc3Qgc3RydWN0IG1pcHNfYXJjaF9jaG9pY2UgbWlwc19hcmNoXworICAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX09DVEVPTjIsIDAsIG1pcHNfY3AwX25hbWVzX251bWVyaWMsCisgICAgIE5VTEwsIDAsIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisgCisrICB7ICJvY3Rlb24zIiwgICAxLCBiZmRfbWFjaF9taXBzX29jdGVvbjMsIENQVV9PQ1RFT04zLAorKyAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX09DVEVPTjMsIEFTRV9WSVJUIHwgQVNFX1ZJUlQ2NCwKKysgICAgbWlwc19jcDBfbmFtZXNfbnVtZXJpYywKKysgICAgTlVMTCwgMCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorKworICAgeyAieGxyIiwgMSwgYmZkX21hY2hfbWlwc194bHIsIENQVV9YTFIsCisgICAgIElTQV9NSVBTNjQgfCBJTlNOX1hMUiwgMCwKKyAgICAgbWlwc19jcDBfbmFtZXNfeGxyLAorSW5kZXg6IGdpdC9vcGNvZGVzL21pcHMtb3BjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9vcGNvZGVzL21pcHMtb3BjLmMKKysrKyBnaXQvb3Bjb2Rlcy9taXBzLW9wYy5jCitAQCAtMzE2LDkgKzMxNiwxMCBAQCBkZWNvZGVfbWlwc19vcGVyYW5kIChjb25zdCBjaGFyICpwKQorICNkZWZpbmUgTjUJKElOU05fNTQwMCB8IElOU05fNTUwMCkKKyAjZGVmaW5lIE41NAlJTlNOXzU0MDAKKyAjZGVmaW5lIE41NQlJTlNOXzU1MDAKKy0jZGVmaW5lIElPQ1QJKElOU05fT0NURU9OIHwgSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorLSNkZWZpbmUgSU9DVFAJKElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMikKKy0jZGVmaW5lIElPQ1QyCUlOU05fT0NURU9OMgorKyNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIgfCBJTlNOX09DVEVPTjMpCisrI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yIHwgSU5TTl9PQ1RFT04zKQorKyNkZWZpbmUgSU9DVDIJKElOU05fT0NURU9OMiB8IElOU05fT0NURU9OMykKKysjZGVmaW5lIElPQ1QzICBJTlNOX09DVEVPTjMKKyAjZGVmaW5lIFhMUglJTlNOX1hMUgorICNkZWZpbmUgWExQCUlOU05fWExQCisgI2RlZmluZSBJVklSVAlBU0VfVklSVAorQEAgLTE1MDUsMTEgKzE1MDYsMTcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcAorIHsibXRsaHgiLAkJInMiLAkJMHgwMDAwMDA1MywgMHhmYzFmZmZmZiwJUkRfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisgeyJtdGNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOSwgMHhmYzAwZmZmZiwgUkRfMSwJCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsibXRtMCIsCQkicyIsCQkweDcwMDAwMDA4LCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRtMCIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDA4LCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRtMSIsCQkicyIsCQkweDcwMDAwMDBjLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRtMSIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBjLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRtMiIsCQkicyIsCQkweDcwMDAwMDBkLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRtMiIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBkLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRwMCIsCQkicyIsCQkweDcwMDAwMDA5LCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRwMCIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDA5LCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRwMSIsCQkicyIsCQkweDcwMDAwMDBhLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRwMSIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBhLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRwMiIsCQkicyIsCQkweDcwMDAwMDBiLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorK3sibXRwMiIsICAgICAgICAgICAgICAgICJzLHQiLCAgICAgICAgICAweDcwMDAwMDBiLCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgSU9DVDMsICAgICAgICAgIDAsICAgICAgMCB9LAorIHsibXRzYSIsCQkicyIsCQkweDAwMDAwMDI5LCAweGZjMWZmZmZmLAlSRF8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im10c2FiIiwJCSJzLGoiLAkJMHgwNDE4MDAwMCwgMHhmYzFmMDAwMCwJUkRfMSwJCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtdHNhaCIsCQkicyxqIiwJCTB4MDQxOTAwMDAsIDB4ZmMxZjAwMDAsCVJEXzEsCQkJMCwJCUVFLAkJMCwJMCB9LApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDI2NzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI1LjEuYmIKQEAgLTAsMCArMSwzOSBAQAorcmVxdWlyZSBiaW51dGlscy5pbmMKK3JlcXVpcmUgYmludXRpbHMtJHtQVn0uaW5jCisKK0RFUEVORFMgKz0gImZsZXggYmlzb24gemxpYiIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtc3lzcm9vdD0vIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmJmZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJpYmVydHkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZW5hYmxlLXRhcmdldHM9YWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtNjQtYml0LWJmZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJiZmQiCisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBJbnN0YWxsIHRoZSBsaWJpYmVydHkgaGVhZGVyCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9hbnNpZGVjbC5oICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2xpYmliZXJ0eS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwkjIFdlIG9ubHkgd2FudCBsaWJpYmVydHksIGxpYmJmZCBhbmQgbGlib3Bjb2RlcworCXJtIC1yZiAke0R9JHtiaW5kaXJ9CisJcm0gLXJmICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfQorCXJtIC1yZiAke0R9JHtwcmVmaXh9L2xpYi9sZHNjcmlwdHMKKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9pbmZvCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbG9jYWxlCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvbWFuCisJcm1kaXIgJHtEfSR7cHJlZml4fS9zaGFyZSB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0vZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn02NC9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfSB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn02NCB8fCA6Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQzYTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gM2ExNWY3YzlhY2U2YzAyOTRlZGMzMTNhMTg0OGNhZmNjMzFiMmE5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyNCBBcHIgMjAxNSAwMDozODozMiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBzcmMvbG9jYWwubWs6IGZpeCBwYXJhbGxlbCBpc3N1ZQorCitGaXhlZDoKK3JtIC1mIHNyYy95YWNjIHNyYy95YWNjLnRtcAorZWNobyAnIyEgL2Jpbi9zaCcgPnNyYy95YWNjLnRtcAorL2Jpbi9iYXNoOiBzcmMveWFjYy50bXA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK01ha2VmaWxlOjY2NzA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdzcmMveWFjYycgZmFpbGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9sb2NhbC5tayB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xvY2FsLm1rIGIvc3JjL2xvY2FsLm1rCitpbmRleCA1NzNhZDAwLi4yOGJmYWU0IDEwMDY0NAorLS0tIGEvc3JjL2xvY2FsLm1rCisrKysgYi9zcmMvbG9jYWwubWsKK0BAIC0xMTksNiArMTE5LDcgQEAgTU9TVExZQ0xFQU5GSUxFUyArPSBzcmMveWFjYworIAorIHNyYy95YWNjOgorIAkkKEFNX1ZfR0VOKXJtIC1mICRAICRALnRtcAorKwkkKEFNX1ZfYXQpJChNS0RJUl9QKSBzcmMKKyAJJChBTV9WX2F0KWVjaG8gJyMhIC9iaW4vc2gnID4kQC50bXAKKyAJJChBTV9WX2F0KWVjaG8gImV4ZWMgJyQoYmluZGlyKS9iaXNvbicgLXkgIiciJCRAIicgPj4kQC50bXAKKyAJJChBTV9WX2F0KWNobW9kIGEreCAkQC50bXAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4Y2UxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL2Jpc29uLTIuM19tNC5wYXRjaApAQCAtMCwwICsxLDU5MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnR0eXBlcy1wcmkubTQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGludHR5cGVzLXByaS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworKyMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKKysjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorKworK0FDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAorK1sKKysgIEFDX1JFUVVJUkUoW2d0X0hFQURFUl9JTlRUWVBFU19IXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisrICAgICAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiwKKysgICAgICBbCisrICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2lmZGVmIFBSSWQzMgorK2NoYXIgKnAgPSBQUklkMzI7CisrI2VuZGlmCisrXSwgW10sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49bm8sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzKQorKyAgICAgIF0pCisrICBmaQorKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9sY21lc3NhZ2UubTQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKysKKysjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisrCisrQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKysgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisrICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvdWludG1heF90Lm00CitAQCAtMCwwICsxLDI5IEBACisrIyB1aW50bWF4X3QubTQgc2VyaWFsIDYgKGdldHRleHQtMC4xMSkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKytBQ19QUkVSRVEoMi4xMykKKysKKysjIERlZmluZSB1aW50bWF4X3QgdG8gYHVuc2lnbmVkIGxvbmcnIG9yIGB1bnNpZ25lZCBsb25nIGxvbmcnCisrIyBpZiA8aW50dHlwZXMuaD4gZG9lcyBub3QgZXhpc3QuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10pCisrICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKKysgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKysgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworKyAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKKysgIFtEZWZpbmUgdG8gdW5zaWduZWQgbG9uZyBvciB1bnNpZ25lZCBsb25nIGxvbmcKKysgICBpZiA8aW50dHlwZXMuaD4gYW5kIDxzdGRpbnQuaD4gZG9uJ3QgZGVmaW5lLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvZ2xpYmMyMS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgZ2xpYmMyMS5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMS4zLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisrIyBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbam1fR0xJQkMyMV0sCisrICBbCisrICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlciwKKysgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisrICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorKwlbCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fR05VX0xJQlJBUllfXworKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKysgIEx1Y2t5IEdOVSB1c2VyCisrICNlbmRpZgorKyNlbmRpZgorKwldLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8pCisrICAgICAgXQorKyAgICApCisrICAgIEFDX1NVQlNUKEdMSUJDMjEpCisrICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisrICBdCisrKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L3N0ZGludF9oLm00CitAQCAtMCwwICsxLDI4IEBACisrIyBzdGRpbnRfaC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVggaWYgPHN0ZGludC5oPiBleGlzdHMsCisrIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KKysKKytBQ19ERUZVTihbam1fQUNfSEVBREVSX1NURElOVF9IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGludC5oXSwgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oLAorKyAgW0FDX1RSWV9DT01QSUxFKAorKyAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2g9eWVzLAorKyAgICBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2g9bm8pXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgsIDEsCisrW0RlZmluZSBpZiA8c3RkaW50Lmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisrICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnR0eXBlc19oLm00CitAQCAtMCwwICsxLDI4IEBACisrIyBpbnR0eXBlc19oLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsCisrIyBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4KKysKKytBQ19ERUZVTihbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oLAorKyAgW0FDX1RSWV9DT01QSUxFKAorKyAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcywKKysgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8pXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYLCAxLAorK1tEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cywgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sCisrICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC91bG9uZ2xvbmcubTQKK0BAIC0wLDAgKzEsMjMgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMC4zMiwgZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDE7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1bnNpZ25lZCBsb25nIGxvbmcgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2NvZGVzZXQubTQKK0BAIC0wLDAgKzEsMjMgQEAKKysjIGNvZGVzZXQubTQgc2VyaWFsIEFNMSAoZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKysgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTtdLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisrICAgIF0pCisrICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvaW50ZGl2MC5tNAorQEAgLTAsMCArMSw3MiBAQAorKyMgaW50ZGl2MC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbZ3RfSU5URElWMF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRV0sCisrICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlLAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzaWduYWwuaD4KKysKKytzdGF0aWMgdm9pZAorKyNpZmRlZiBfX2NwbHVzcGx1cworK3NpZ2ZwZV9oYW5kbGVyIChpbnQgc2lnKQorKyNlbHNlCisrc2lnZnBlX2hhbmRsZXIgKHNpZykgaW50IHNpZzsKKysjZW5kaWYKKyt7CisrICAvKiBFeGl0IHdpdGggY29kZSAwIGlmIFNJR0ZQRSwgd2l0aCBjb2RlIDEgaWYgYW55IG90aGVyIHNpZ25hbC4gICovCisrICBleGl0IChzaWcgIT0gU0lHRlBFKTsKKyt9CisrCisraW50IHggPSAxOworK2ludCB5ID0gMDsKKytpbnQgejsKKytpbnQgbmFuOworKworK2ludCBtYWluICgpCisreworKyAgc2lnbmFsIChTSUdGUEUsIHNpZ2ZwZV9oYW5kbGVyKTsKKysvKiBJUklYIGFuZCBBSVggKHdoZW4gInhsYyAtcWNoZWNrIiBpcyB1c2VkKSB5aWVsZCBzaWduYWwgU0lHVFJBUC4gICovCisrI2lmIChkZWZpbmVkIChfX3NnaSkgfHwgZGVmaW5lZCAoX0FJWCkpICYmIGRlZmluZWQgKFNJR1RSQVApCisrICBzaWduYWwgKFNJR1RSQVAsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysvKiBMaW51eC9TUEFSQyB5aWVsZHMgc2lnbmFsIFNJR0lMTC4gICovCisrI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZCAoX19saW51eF9fKQorKyAgc2lnbmFsIChTSUdJTEwsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysKKysgIHogPSB4IC8geTsKKysgIG5hbiA9IHkgLyB5OworKyAgZXhpdCAoMSk7CisrfQorK10sIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPXllcywgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9bm8sCisrICAgICAgICBbCisrICAgICAgICAgICMgR3Vlc3MgYmFzZWQgb24gdGhlIENQVS4KKysgICAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorKyAgICAgICAgICAgIGFscGhhKiB8IGlbMzQ1NjddODYgfCBtNjhrIHwgczM5MCopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIjs7CisrICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyBubyI7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICBdKQorKyAgICBdKQorKyAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgorKyAgICAqeWVzKSB2YWx1ZT0xOzsKKysgICAgKikgdmFsdWU9MDs7CisrICBlc2FjCisrICBBQ19ERUZJTkVfVU5RVU9URUQoSU5URElWMF9SQUlTRVNfU0lHRlBFLCAkdmFsdWUsCisrICAgIFtEZWZpbmUgaWYgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLl0pCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9nbGliLm00CitAQCAtMCwwICsxLDE5NiBAQAorKyMgQ29uZmlndXJlIHBhdGhzIGZvciBHTElCCisrIyBPd2VuIFRheWxvciAgICAgOTctMTEtMworKworK2RubCBBTV9QQVRIX0dMSUIoW01JTklNVU0tVkVSU0lPTiwgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EIFssIE1PRFVMRVNdXV1dKQorK2RubCBUZXN0IGZvciBHTElCLCBhbmQgZGVmaW5lIEdMSUJfQ0ZMQUdTIGFuZCBHTElCX0xJQlMsIGlmICJnbW9kdWxlIiBvciAKKytkbmwgZ3RocmVhZCBpcyBzcGVjaWZpZWQgaW4gTU9EVUxFUywgcGFzcyB0byBnbGliLWNvbmZpZworK2RubAorK0FDX0RFRlVOKEFNX1BBVEhfR0xJQiwKKytbZG5sIAorK2RubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIGdsaWItY29uZmlnIHNjcmlwdAorK2RubAorK0FDX0FSR19XSVRIKGdsaWItcHJlZml4LFsgIC0td2l0aC1nbGliLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgR0xJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisrICAgICAgICAgICAgZ2xpYl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX3ByZWZpeD0iIikKKytBQ19BUkdfV0lUSChnbGliLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1nbGliLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKytBQ19BUkdfRU5BQkxFKGdsaWJ0ZXN0LCBbICAtLWRpc2FibGUtZ2xpYnRlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IEdMSUIgcHJvZ3JhbV0sCisrCQkgICAgLCBlbmFibGVfZ2xpYnRlc3Q9eWVzKQorKworKyAgaWYgdGVzdCB4JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCIKKysgICAgIGlmIHRlc3QgeCR7R0xJQl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorKyAgICAgICAgR0xJQl9DT05GSUc9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLXByZWZpeD0kZ2xpYl9jb25maWdfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrCisrICBmb3IgbW9kdWxlIGluIC4gJDQKKysgIGRvCisrICAgICAgY2FzZSAiJG1vZHVsZSIgaW4KKysgICAgICAgICBnbW9kdWxlKSAKKysgICAgICAgICAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgZ21vZHVsZSIKKysgICAgICAgICA7OworKyAgICAgICAgIGd0aHJlYWQpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBndGhyZWFkIgorKyAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgZG9uZQorKworKyAgQUNfUEFUSF9QUk9HKEdMSUJfQ09ORklHLCBnbGliLWNvbmZpZywgbm8pCisrICBtaW5fZ2xpYl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC45OS43LCQxKQorKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBHTElCIC0gdmVyc2lvbiA+PSAkbWluX2dsaWJfdmVyc2lvbikKKysgIG5vX2dsaWI9IiIKKysgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICBub19nbGliPXllcworKyAgZWxzZQorKyAgICBHTElCX0NGTEFHUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorKyAgICBHTElCX0xJQlM9YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLWxpYnNgCisrICAgIGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKysgICAgZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorKyAgICBnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCisrICAgIGlmIHRlc3QgIngkZW5hYmxlX2dsaWJ0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKysgICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgTElCUz0iJEdMSUJfTElCUyAkTElCUyIKKytkbmwKKytkbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgR0xJQiBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKKytkbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIGdsaWItY29uZmlnIHRvIHNvbWUgZXh0ZW50CisrZG5sCisrICAgICAgcm0gLWYgY29uZi5nbGlidGVzdAorKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK2ludCAKKyttYWluICgpCisreworKyAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CisrICBjaGFyICp0bXBfdmVyc2lvbjsKKysKKysgIHN5c3RlbSAoInRvdWNoIGNvbmYuZ2xpYnRlc3QiKTsKKysKKysgIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworKyAgdG1wX3ZlcnNpb24gPSBnX3N0cmR1cCgiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKysgICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fZ2xpYl92ZXJzaW9uIik7CisrICAgICBleGl0KDEpOworKyAgIH0KKysKKysgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorKyAgICAgIChnbGliX21pbm9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWljcm9fdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbikpCisrICAgIHsKKysgICAgICBwcmludGYoIlxuKioqICdnbGliLWNvbmZpZyAtLXZlcnNpb24nIHJldHVybmVkICVkLiVkLiVkLCBidXQgR0xJQiAoJWQuJWQuJWQpXG4iLCAKKysgICAgICAgICAgICAgJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uLCAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbiwKKysgICAgICAgICAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgICAgcHJpbnRmICgiKioqIHdhcyBmb3VuZCEgSWYgZ2xpYi1jb25maWcgd2FzIGNvcnJlY3QsIHRoZW4gaXQgaXMgYmVzdFxuIik7CisrICAgICAgcHJpbnRmICgiKioqIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb24gb2YgR0xJQi4gWW91IG1heSBhbHNvIGJlIGFibGUgdG8gZml4IHRoZSBlcnJvclxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYnkgbW9kaWZ5aW5nIHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGJ5IGVkaXRpbmdcbiIpOworKyAgICAgIHByaW50ZigiKioqIC9ldGMvbGQuc28uY29uZi4gTWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IGlzXG4iKTsKKysgICAgICBwcmludGYoIioqKiByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbS5cbiIpOworKyAgICAgIHByaW50ZigiKioqIElmIGdsaWItY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHTElCX0NPTkZJR1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZywgYW5kIHJlbW92ZSB0aGUgZmlsZSBjb25maWcuY2FjaGVcbiIpOworKyAgICAgIHByaW50ZigiKioqIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7CisrICAgIH0gCisrICBlbHNlIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9IEdMSUJfTUFKT1JfVkVSU0lPTikgfHwKKysJICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSBHTElCX01JTk9SX1ZFUlNJT04pIHx8CisrICAgICAgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9IEdMSUJfTUlDUk9fVkVSU0lPTikpCisrICAgIHsKKysgICAgICBwcmludGYoIioqKiBHTElCIGhlYWRlciBmaWxlcyAodmVyc2lvbiAlZC4lZC4lZCkgZG8gbm90IG1hdGNoXG4iLAorKwkgICAgIEdMSUJfTUFKT1JfVkVSU0lPTiwgR0xJQl9NSU5PUl9WRVJTSU9OLCBHTElCX01JQ1JPX1ZFUlNJT04pOworKyAgICAgIHByaW50ZigiKioqIGxpYnJhcnkgKHZlcnNpb24gJWQuJWQuJWQpXG4iLAorKwkgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorKyAgICAgICAgKChnbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChnbGliX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKGdsaWJfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorKyAgICAgIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgeworKyAgICAgICAgcHJpbnRmKCJcbioqKiBBbiBvbGQgdmVyc2lvbiBvZiBHTElCICglZC4lZC4lZCkgd2FzIGZvdW5kLlxuIiwKKysgICAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICAgIHByaW50ZigiKioqIFlvdSBuZWVkIGEgdmVyc2lvbiBvZiBHTElCIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKysJICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworKyAgICAgICAgcHJpbnRmKCIqKiogR0xJQiBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLmd0ay5vcmcuXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGdsaWItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogb2YgR0xJQiwgYnV0IHlvdSBjYW4gYWxzbyBzZXQgdGhlIEdMSUJfQ09ORklHIGVudmlyb25tZW50IHRvIHBvaW50IHRvIHRoZVxuIik7CisrICAgICAgICBwcmludGYoIioqKiBjb3JyZWN0IGNvcHkgb2YgZ2xpYi1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogbW9kaWZ5IHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHNvIHRoYXQgdGhlIGNvcnJlY3QgbGlicmFyaWVzIGFyZSBmb3VuZCBhdCBydW4tdGltZSkpXG4iKTsKKysgICAgICB9CisrICAgIH0KKysgIHJldHVybiAxOworK30KKytdLCwgbm9fZ2xpYj15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorKyAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCAieCRub19nbGliIiA9IHggOyB0aGVuCisrICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKKysgIGVsc2UKKysgICAgIEFDX01TR19SRVNVTFQobm8pCisrICAgICBpZiB0ZXN0ICIkR0xJQl9DT05GSUciID0gIm5vIiA7IHRoZW4KKysgICAgICAgZWNobyAiKioqIFRoZSBnbGliLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IEdMSUIgY291bGQgbm90IGJlIGZvdW5kIgorKyAgICAgICBlY2hvICIqKiogSWYgR0xJQiB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCisrICAgICAgIGVjaG8gIioqKiB5b3VyIHBhdGgsIG9yIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorKyAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIGdsaWItY29uZmlnLiIKKysgICAgIGVsc2UKKysgICAgICAgaWYgdGVzdCAtZiBjb25mLmdsaWJ0ZXN0IDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgICBlbHNlCisrICAgICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIEdMSUIgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCisrICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgICAgIExJQlM9IiRMSUJTICRHTElCX0xJQlMiCisrICAgICAgICAgIEFDX1RSWV9MSU5LKFsKKysjaW5jbHVkZSA8Z2xpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorK10sICAgICAgWyByZXR1cm4gKChnbGliX21ham9yX3ZlcnNpb24pIHx8IChnbGliX21pbm9yX3ZlcnNpb24pIHx8IChnbGliX21pY3JvX3ZlcnNpb24pKTsgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorKyAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIEdMSUIgb3IgZmluZGluZyB0aGUgd3JvbmciCisrICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIEdMSUIuIElmIGl0IGlzIG5vdCBmaW5kaW5nIEdMSUIsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorKyAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKysgICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKysgICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorKwkgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorKyAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiCisrICAgICAgICAgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGEgUmVkSGF0IDUuMCBzeXN0ZW0sIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBHVEsgcGFja2FnZSB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogY2FtZSB3aXRoIHRoZSBzeXN0ZW0gd2l0aCB0aGUgY29tbWFuZCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogICAgcnBtIC0tZXJhc2UgLS1ub2RlcHMgZ3RrIGd0ay1kZXZlbCIgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKysgICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIEdMSUIgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKKysgICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgR0xJQiBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKKysgICAgICAgICAgZWNobyAiKioqIG1heSB3YW50IHRvIGVkaXQgdGhlIGdsaWItY29uZmlnIHNjcmlwdDogJEdMSUJfQ09ORklHIiBdKQorKyAgICAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgICAgZmkKKysgICAgIGZpCisrICAgICBHTElCX0NGTEFHUz0iIgorKyAgICAgR0xJQl9MSUJTPSIiCisrICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorKyAgZmkKKysgIEFDX1NVQlNUKEdMSUJfQ0ZMQUdTKQorKyAgQUNfU1VCU1QoR0xJQl9MSUJTKQorKyAgcm0gLWYgY29uZi5nbGlidGVzdAorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvaW50dHlwZXMubTQKK0BAIC0wLDAgKzEsMjcgQEAKKysjIGludHR5cGVzLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0ggaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoCisrIyA8c3lzL3R5cGVzLmg+LgorKworK0FDX0RFRlVOKFtndF9IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbCisrICAgIEFDX1RSWV9DT01QSUxFKAorKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgICBbXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubykKKysgIF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19ILCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pc2MtcG9zaXgubTQKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzE2YzU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA0YzBkNzczM2YzMDkwM2Y4ZDdjN2NkNzQzM2Y1YzhhNzUwNWUzNWY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgQXByIDIwMTUgMDA6NDg6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZG9jL2xvY2FsLm1rOiBkb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworVXBkYXRlZCBmb3IgYmlzb24gMy4wLjQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvbG9jYWwubWsgfCAgICA5ICstLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9sb2NhbC5tayBiL2RvYy9sb2NhbC5taworaW5kZXggYzM0MDQ1Mi4uNjQyZjM4NSAxMDA2NDQKKy0tLSBhL2RvYy9sb2NhbC5taworKysrIGIvZG9jL2xvY2FsLm1rCitAQCAtOTgsMTAgKzk4LDcgQEAgZW5kaWYgISBDUk9TU19DT01QSUxJTkcKKyAjIyBNYW4gUGFnZXMuICAjIworICMjIC0tLS0tLS0tLS0tICMjCisgCistZGlzdF9tYW5fTUFOUyA9ICQodG9wX3NyY2RpcikvZG9jL2Jpc29uLjEKKy0KKy1FWFRSQV9ESVNUICs9ICQoZGlzdF9tYW5fTUFOUzouMT0ueCkKKy1NQUlOVEFJTkVSQ0xFQU5GSUxFUyArPSAkKGRpc3RfbWFuX01BTlMpCisrRVhUUkFfRElTVCArPSBiaXNvbi54CisgCisgIyBEaWZmZXJlbmNlcyB0byBpZ25vcmUgd2hlbiBjb21wYXJpbmcgdGhlIG1hbiBwYWdlICh0aGUgZGF0ZSkuCisgcmVtb3ZlX3RpbWVfc3RhbXAgPSBcCitAQCAtMTI0LDEwICsxMjEsNiBAQCAkKHRvcF9zcmNkaXIpL2RvYy9iaXNvbi4xOiAkKE1BTl9ERVBTKQorIAlmaQorIAkkKEFNX1ZfYXQpcm0gLWYgJEAqLnQKKyAKKy1pZiBFTkFCTEVfWUFDQworLW5vZGlzdF9tYW5fTUFOUyA9IGRvYy95YWNjLjEKKy1lbmRpZgorLQorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgIyMgR3JhcGh2aXogZXhhbXBsZXMgZ2VuZXJhdGlvbi4gIyMKKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzOWRhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoCkBAIC0wLDAgKzEsNDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworSW5kZXg6IGJpc29uLTIuNC4yL200L2xjbWVzc2FnZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2xjbWVzc2FnZS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgbGNtZXNzYWdlLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorKworKyMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KKysKKytBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKysgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKysgIGZpCisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC91aW50bWF4X3QubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC91aW50bWF4X3QubTQKK0BAIC0wLDAgKzEsMjkgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNiAoZ2V0dGV4dC0wLjExKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byBgdW5zaWduZWQgbG9uZycgb3IgYHVuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIDxpbnR0eXBlcy5oPiBkb2VzIG5vdCBleGlzdC4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VSU5UTUFYX1RdLAorK1sKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSkKKysgICAgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXMgXAorKyAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAorKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisrICAgIEFDX0RFRklORV9VTlFVT1RFRCh1aW50bWF4X3QsICRhY190eXBlLAorKyAgW0RlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZworKyAgIGlmIDxpbnR0eXBlcy5oPiBhbmQgPHN0ZGludC5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGZpCisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC91bG9uZ2xvbmcubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC91bG9uZ2xvbmcubTQKK0BAIC0wLDAgKzEsMjMgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMC4zMiwgZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDE7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1bnNpZ25lZCBsb25nIGxvbmcgdHlwZS5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L2ludGRpdjAubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9pbnRkaXYwLm00CitAQCAtMCwwICsxLDcyIEBACisrIyBpbnRkaXYwLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtndF9JTlRESVYwXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKKysgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCisrICAgIFsKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKworK3N0YXRpYyB2b2lkCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCisrI2Vsc2UKKytzaWdmcGVfaGFuZGxlciAoc2lnKSBpbnQgc2lnOworKyNlbmRpZgorK3sKKysgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKysgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworK30KKysKKytpbnQgeCA9IDE7CisraW50IHkgPSAwOworK2ludCB6OworK2ludCBuYW47CisrCisraW50IG1haW4gKCkKKyt7CisrICBzaWduYWwgKFNJR0ZQRSwgc2lnZnBlX2hhbmRsZXIpOworKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKysjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKysgIHNpZ25hbCAoU0lHVFJBUCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBkZWZpbmVkIChfX2xpbnV4X18pCisrICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKworKyAgeiA9IHggLyB5OworKyAgbmFuID0geSAvIHk7CisrICBleGl0ICgxKTsKKyt9CisrXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKysgICAgICAgIFsKKysgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IG02OGsgfCBzMzkwKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIF0pCisrICAgIF0pCisrICBjYXNlICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiIGluCisrICAgICp5ZXMpIHZhbHVlPTE7OworKyAgICAqKSB2YWx1ZT0wOzsKKysgIGVzYWMKKysgIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKKysgICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L2dsaWIubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9nbGliLm00CitAQCAtMCwwICsxLDE5NiBAQAorKyMgQ29uZmlndXJlIHBhdGhzIGZvciBHTElCCisrIyBPd2VuIFRheWxvciAgICAgOTctMTEtMworKworK2RubCBBTV9QQVRIX0dMSUIoW01JTklNVU0tVkVSU0lPTiwgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EIFssIE1PRFVMRVNdXV1dKQorK2RubCBUZXN0IGZvciBHTElCLCBhbmQgZGVmaW5lIEdMSUJfQ0ZMQUdTIGFuZCBHTElCX0xJQlMsIGlmICJnbW9kdWxlIiBvciAKKytkbmwgZ3RocmVhZCBpcyBzcGVjaWZpZWQgaW4gTU9EVUxFUywgcGFzcyB0byBnbGliLWNvbmZpZworK2RubAorK0FDX0RFRlVOKEFNX1BBVEhfR0xJQiwKKytbZG5sIAorK2RubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIGdsaWItY29uZmlnIHNjcmlwdAorK2RubAorK0FDX0FSR19XSVRIKGdsaWItcHJlZml4LFsgIC0td2l0aC1nbGliLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgR0xJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisrICAgICAgICAgICAgZ2xpYl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX3ByZWZpeD0iIikKKytBQ19BUkdfV0lUSChnbGliLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1nbGliLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBnbGliX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKytBQ19BUkdfRU5BQkxFKGdsaWJ0ZXN0LCBbICAtLWRpc2FibGUtZ2xpYnRlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IEdMSUIgcHJvZ3JhbV0sCisrCQkgICAgLCBlbmFibGVfZ2xpYnRlc3Q9eWVzKQorKworKyAgaWYgdGVzdCB4JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCIKKysgICAgIGlmIHRlc3QgeCR7R0xJQl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorKyAgICAgICAgR0xJQl9DT05GSUc9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCisrICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLXByZWZpeD0kZ2xpYl9jb25maWdfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfcHJlZml4L2Jpbi9nbGliLWNvbmZpZworKyAgICAgZmkKKysgIGZpCisrCisrICBmb3IgbW9kdWxlIGluIC4gJDQKKysgIGRvCisrICAgICAgY2FzZSAiJG1vZHVsZSIgaW4KKysgICAgICAgICBnbW9kdWxlKSAKKysgICAgICAgICAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgZ21vZHVsZSIKKysgICAgICAgICA7OworKyAgICAgICAgIGd0aHJlYWQpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBndGhyZWFkIgorKyAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgZG9uZQorKworKyAgQUNfUEFUSF9QUk9HKEdMSUJfQ09ORklHLCBnbGliLWNvbmZpZywgbm8pCisrICBtaW5fZ2xpYl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC45OS43LCQxKQorKyAgQUNfTVNHX0NIRUNLSU5HKGZvciBHTElCIC0gdmVyc2lvbiA+PSAkbWluX2dsaWJfdmVyc2lvbikKKysgIG5vX2dsaWI9IiIKKysgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICBub19nbGliPXllcworKyAgZWxzZQorKyAgICBHTElCX0NGTEFHUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorKyAgICBHTElCX0xJQlM9YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLWxpYnNgCisrICAgIGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKysgICAgZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorKyAgICBnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCisrICAgIGlmIHRlc3QgIngkZW5hYmxlX2dsaWJ0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKysgICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysgICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgTElCUz0iJEdMSUJfTElCUyAkTElCUyIKKytkbmwKKytkbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgR0xJQiBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKKytkbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIGdsaWItY29uZmlnIHRvIHNvbWUgZXh0ZW50CisrZG5sCisrICAgICAgcm0gLWYgY29uZi5nbGlidGVzdAorKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK2ludCAKKyttYWluICgpCisreworKyAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CisrICBjaGFyICp0bXBfdmVyc2lvbjsKKysKKysgIHN5c3RlbSAoInRvdWNoIGNvbmYuZ2xpYnRlc3QiKTsKKysKKysgIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworKyAgdG1wX3ZlcnNpb24gPSBnX3N0cmR1cCgiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKysgICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fZ2xpYl92ZXJzaW9uIik7CisrICAgICBleGl0KDEpOworKyAgIH0KKysKKysgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorKyAgICAgIChnbGliX21pbm9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWljcm9fdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbikpCisrICAgIHsKKysgICAgICBwcmludGYoIlxuKioqICdnbGliLWNvbmZpZyAtLXZlcnNpb24nIHJldHVybmVkICVkLiVkLiVkLCBidXQgR0xJQiAoJWQuJWQuJWQpXG4iLCAKKysgICAgICAgICAgICAgJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uLCAkZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbiwKKysgICAgICAgICAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgICAgcHJpbnRmICgiKioqIHdhcyBmb3VuZCEgSWYgZ2xpYi1jb25maWcgd2FzIGNvcnJlY3QsIHRoZW4gaXQgaXMgYmVzdFxuIik7CisrICAgICAgcHJpbnRmICgiKioqIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb24gb2YgR0xJQi4gWW91IG1heSBhbHNvIGJlIGFibGUgdG8gZml4IHRoZSBlcnJvclxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYnkgbW9kaWZ5aW5nIHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGJ5IGVkaXRpbmdcbiIpOworKyAgICAgIHByaW50ZigiKioqIC9ldGMvbGQuc28uY29uZi4gTWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IGlzXG4iKTsKKysgICAgICBwcmludGYoIioqKiByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbS5cbiIpOworKyAgICAgIHByaW50ZigiKioqIElmIGdsaWItY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHTElCX0NPTkZJR1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZywgYW5kIHJlbW92ZSB0aGUgZmlsZSBjb25maWcuY2FjaGVcbiIpOworKyAgICAgIHByaW50ZigiKioqIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7CisrICAgIH0gCisrICBlbHNlIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9IEdMSUJfTUFKT1JfVkVSU0lPTikgfHwKKysJICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSBHTElCX01JTk9SX1ZFUlNJT04pIHx8CisrICAgICAgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9IEdMSUJfTUlDUk9fVkVSU0lPTikpCisrICAgIHsKKysgICAgICBwcmludGYoIioqKiBHTElCIGhlYWRlciBmaWxlcyAodmVyc2lvbiAlZC4lZC4lZCkgZG8gbm90IG1hdGNoXG4iLAorKwkgICAgIEdMSUJfTUFKT1JfVkVSU0lPTiwgR0xJQl9NSU5PUl9WRVJTSU9OLCBHTElCX01JQ1JPX1ZFUlNJT04pOworKyAgICAgIHByaW50ZigiKioqIGxpYnJhcnkgKHZlcnNpb24gJWQuJWQuJWQpXG4iLAorKwkgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorKyAgICAgICAgKChnbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChnbGliX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKGdsaWJfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorKyAgICAgIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgeworKyAgICAgICAgcHJpbnRmKCJcbioqKiBBbiBvbGQgdmVyc2lvbiBvZiBHTElCICglZC4lZC4lZCkgd2FzIGZvdW5kLlxuIiwKKysgICAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICAgIHByaW50ZigiKioqIFlvdSBuZWVkIGEgdmVyc2lvbiBvZiBHTElCIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKysJICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworKyAgICAgICAgcHJpbnRmKCIqKiogR0xJQiBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLmd0ay5vcmcuXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGdsaWItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogb2YgR0xJQiwgYnV0IHlvdSBjYW4gYWxzbyBzZXQgdGhlIEdMSUJfQ09ORklHIGVudmlyb25tZW50IHRvIHBvaW50IHRvIHRoZVxuIik7CisrICAgICAgICBwcmludGYoIioqKiBjb3JyZWN0IGNvcHkgb2YgZ2xpYi1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogbW9kaWZ5IHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIHNvIHRoYXQgdGhlIGNvcnJlY3QgbGlicmFyaWVzIGFyZSBmb3VuZCBhdCBydW4tdGltZSkpXG4iKTsKKysgICAgICB9CisrICAgIH0KKysgIHJldHVybiAxOworK30KKytdLCwgbm9fZ2xpYj15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorKyAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCAieCRub19nbGliIiA9IHggOyB0aGVuCisrICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKKysgIGVsc2UKKysgICAgIEFDX01TR19SRVNVTFQobm8pCisrICAgICBpZiB0ZXN0ICIkR0xJQl9DT05GSUciID0gIm5vIiA7IHRoZW4KKysgICAgICAgZWNobyAiKioqIFRoZSBnbGliLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IEdMSUIgY291bGQgbm90IGJlIGZvdW5kIgorKyAgICAgICBlY2hvICIqKiogSWYgR0xJQiB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCisrICAgICAgIGVjaG8gIioqKiB5b3VyIHBhdGgsIG9yIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorKyAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIGdsaWItY29uZmlnLiIKKysgICAgIGVsc2UKKysgICAgICAgaWYgdGVzdCAtZiBjb25mLmdsaWJ0ZXN0IDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgICBlbHNlCisrICAgICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIEdMSUIgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCisrICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCisrICAgICAgICAgIExJQlM9IiRMSUJTICRHTElCX0xJQlMiCisrICAgICAgICAgIEFDX1RSWV9MSU5LKFsKKysjaW5jbHVkZSA8Z2xpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorK10sICAgICAgWyByZXR1cm4gKChnbGliX21ham9yX3ZlcnNpb24pIHx8IChnbGliX21pbm9yX3ZlcnNpb24pIHx8IChnbGliX21pY3JvX3ZlcnNpb24pKTsgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorKyAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIEdMSUIgb3IgZmluZGluZyB0aGUgd3JvbmciCisrICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIEdMSUIuIElmIGl0IGlzIG5vdCBmaW5kaW5nIEdMSUIsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorKyAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKysgICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKysgICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorKwkgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorKyAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiCisrICAgICAgICAgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGEgUmVkSGF0IDUuMCBzeXN0ZW0sIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBHVEsgcGFja2FnZSB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogY2FtZSB3aXRoIHRoZSBzeXN0ZW0gd2l0aCB0aGUgY29tbWFuZCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogICAgcnBtIC0tZXJhc2UgLS1ub2RlcHMgZ3RrIGd0ay1kZXZlbCIgXSwKKysgICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKysgICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIEdMSUIgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKKysgICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgR0xJQiBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKKysgICAgICAgICAgZWNobyAiKioqIG1heSB3YW50IHRvIGVkaXQgdGhlIGdsaWItY29uZmlnIHNjcmlwdDogJEdMSUJfQ09ORklHIiBdKQorKyAgICAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgICAgICAgZmkKKysgICAgIGZpCisrICAgICBHTElCX0NGTEFHUz0iIgorKyAgICAgR0xJQl9MSUJTPSIiCisrICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorKyAgZmkKKysgIEFDX1NVQlNUKEdMSUJfQ0ZMQUdTKQorKyAgQUNfU1VCU1QoR0xJQl9MSUJTKQorKyAgcm0gLWYgY29uZi5nbGlidGVzdAorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvaXNjLXBvc2l4Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvaXNjLXBvc2l4Lm00CitAQCAtMCwwICsxLDI2IEBACisrIyBpc2MtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS4yKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgd2l0aCBhdXRvY29uZi0yLjUzIGFuZCBuZXdlci4gIFJlbW92ZSBpdCBpbiAyMDA1LgorKworKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisrIyBDdXJyZW50bHkgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdXRvY29uZiBtYWNybworKyMgYmVjYXVzZSBnZXR0ZXh0J3MgZ2V0dGV4dC5tNCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGF1dG9tYWtlIHBhY2thZ2UpCisrIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorKyMgZ2l2ZSB0aGVzZSBkaWFnbm9zdGljczoKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX0NPTVBJTEUgd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrCisrdW5kZWZpbmUoW0FDX0lTQ19QT1NJWF0pCisrCisrQUNfREVGVU4oW0FDX0lTQ19QT1NJWF0sCisrICBbCisrICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisrICAgIEFDX0NIRUNLX0xJQihjcG9zaXgsIHN0cmVycm9yLCBbTElCUz0iJExJQlMgLWxjcG9zaXgiXSkKKysgIF0KKyspCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZTg4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzIuMy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkdOVSBQcm9qZWN0IHBhcnNlciBnZW5lcmF0b3IgKHlhY2MgcmVwbGFjZW1lbnQpIgorREVTQ1JJUFRJT04gPSAiQmlzb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFyc2VyIGdlbmVyYXRvciB0aGF0IGNvbnZlcnRzIGFuIGFubm90YXRlZCBjb250ZXh0LWZyZWUgZ3JhbW1hciBpbnRvIFwKK2FuIExBTFIoMSkgb3IgR0xSIHBhcnNlciBmb3IgdGhhdCBncmFtbWFyLiAgQmlzb24gaXMgdXB3YXJkIGNvbXBhdGlibGUgd2l0aCBZYWNjOiBhbGwgcHJvcGVybHktd3JpdHRlbiBZYWNjIFwKK2dyYW1tYXJzIG91Z2h0IHRvIHdvcmsgd2l0aCBCaXNvbiB3aXRoIG5vIGNoYW5nZS4gQW55b25lIGZhbWlsaWFyIHdpdGggWWFjYyBzaG91bGQgYmUgYWJsZSB0byB1c2UgQmlzb24gd2l0aCBcCitsaXR0bGUgdHJvdWJsZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmlzb24vIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jpc29uL2Jpc29uLSR7UFZ9LnRhci5neiBcCisgICAgICAgICBmaWxlOi8vYmlzb24tMi4zX200LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjIzMjdlZmRkNTA4MGUyYjFhY2I2ZTU2MGEwNGI0M2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTJmNzhhYTQ3NjFhNzRjZWI3ZmRmNzcwZjM1NTRkZDg0MzA4YzNiOTNjNDI1NWUzYTVjMTc1NThlY2RhMjkzZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCithY3BhdGhzID0gIi1JICR7U30vbTQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200LypnbC5tNAorCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3J1bnRpbWUtcG8vCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGU5YTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkdOVSBQcm9qZWN0IHBhcnNlciBnZW5lcmF0b3IgKHlhY2MgcmVwbGFjZW1lbnQpIgorREVTQ1JJUFRJT04gPSAiQmlzb24gaXMgYSBnZW5lcmFsLXB1cnBvc2UgcGFyc2VyIGdlbmVyYXRvciB0aGF0IGNvbnZlcnRzIGFuIGFubm90YXRlZCBjb250ZXh0LWZyZWUgZ3JhbW1hciBpbnRvIFwKK2FuIExBTFIoMSkgb3IgR0xSIHBhcnNlciBmb3IgdGhhdCBncmFtbWFyLiAgQmlzb24gaXMgdXB3YXJkIGNvbXBhdGlibGUgd2l0aCBZYWNjOiBhbGwgcHJvcGVybHktd3JpdHRlbiBZYWNjIFwKK2dyYW1tYXJzIG91Z2h0IHRvIHdvcmsgd2l0aCBCaXNvbiB3aXRoIG5vIGNoYW5nZS4gQW55b25lIGZhbWlsaWFyIHdpdGggWWFjYyBzaG91bGQgYmUgYWJsZSB0byB1c2UgQmlzb24gd2l0aCBcCitsaXR0bGUgdHJvdWJsZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmlzb24vIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgPSAiYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmlzb24vYmlzb24tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL200LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyIKKworIyBObyBwb2ludCBpbiBoYXJkY29kaW5nIHBhdGggdG8gbTQsIGp1c3QgdXNlIFBBVEgKK0VYVFJBX09FQ09ORiArPSAiTTQ9bTQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMzQyMjAxZGUxMDRjYzljZTBhMjFlMGFkMTBkNDAyMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNzI0MjhjNzkxN2JkZjlmYTkzY2I4MTgxYzk3MWI2ZTIyODM0MTI1ODQ4Y2YxZDAzY2UxMGIxYmIwNzE2ZmUxIgorCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCithY3BhdGhzID0gIi1JICR7U30vbTQiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlmb3IgaSBpbiBtZmNhbGMgY2FsYysrIHJwY2FsYzsgZG8gbWtkaXIgLXAgJHtCfS9leGFtcGxlcy8kaTsgZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vYmlzb24gXAorCQlCSVNPTl9QS0dEQVRBRElSPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYmlzb24KK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDIvYm9vdGNoYXJ0ZF9zdG9wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTc4ODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDIvYm9vdGNoYXJ0ZF9zdG9wLnNoCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdGNoYXJ0ZF9zdG9wCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzICRhbGwKKyMgUmVxdWlyZWQtU3RvcDogCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFN0b3AgYm9vdGNoYXJ0ZCBjb2xsZWN0aW9uCisjIERlc2NyaXB0aW9uOiAgICAgICBUaGlzIHNjcmlwdCBhY2NvbXBhbmllcyBib290Y2hhcnRkIGZyb20gYm9vdGNoYXJ0Mi4gCisjICAgICAgICAgICAgICAgICAgICBib290Y2hhcnRkIHNob3VsZCBzdG9wIGRldGVjdCB0aGUgZW5kIG9mIHRoZSBib290IHByb2Nlc3MKKyMgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgaWYgYSB3aW5kb3cgbWFuYWdlciBpcyBsYXVuY2hlZCwgYnV0IGZvcgorIyAgICAgICAgICAgICAgICAgICAgY29tbWFuZC1saW5lIG9ubHkgb3BlcmF0aW5nIHN5c3RlbXMsIHRoaXMgc2NyaXB0IHNob3VsZCBiZQorIyAgICAgICAgICAgICAgICAgICAgdXNlZCBpbnN0ZWFkLgorIyMjIEVORCBJTklUIElORk8KKworL3NiaW4vYm9vdGNoYXJ0ZCBzdG9wCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyXzAuMTQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBhOTgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyXzAuMTQuNy5iYgpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTMgTEcgRWxlY3Ryb25pY3MsIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnAuCisKKyMgVGhpcyByZWNpcGUgY3JlYXRlcyBwYWNrYWdlcyBmb3IgdGhlIGJvb3RjaGFydDIgc3lzdGVtLXdpZGUgcHJvZmlsZXIgZGFlbW9uIAorIyBhbmQgcmVsYXRlZCB1dGlsaXRpZXMuIERlcGVuZGluZyBvbiB0aGUgaW1hZ2VzIHlvdSdyZSBidWlsZGluZywgYWRkaXRpb25hbAorIyBjb25maWd1cmF0aW9uIG1heSBiZSBuZWVkZWQgaW4gb3JkZXIgdG8gdXNlIGl0LgorIworIyBQYWNrYWdlczoKKyMgICAqICAgYm9vdGNoYXJ0MiAtIFRoZSBkYWVtb24gaXRzZWxmLgorIyAgICogICBweWJvb3RjaGFydGd1aSAtIFB5dGhvbiBwcm9ncmFtIHRvIHZpc3VhbGl6ZSBhbmQgZGlzcGxheSB0aGUgZGF0YQorIyAgICAgICBjb2xsZWN0ZWQgYnkgYm9vdGNoYXJ0MiBvciBjb21wYXRpYmxlIGRhZW1vbnMgc3VjaCBhcyB0aGUgb3JpZ2luYWwgCisjICAgICAgIGJvb3RjaGFydC4KKyMgICAqICAgYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgLSBBIFN5c1YgaW5pdCBzY3JpcHQgdG8gc3RvcCBkYXRhIGNvbGxlY3Rpb24KKyMgICAgICAgd2hlbiBib290aW5nIGNvbXBsZXRlcyAoc2VlIGJlbG93IGZvciBkZXRhaWxzLikKKyMKKyMgV2hpbGUgYm9vdGNoYXJ0MiBpcyBkZXNpZ25lZCB0byBzdG9wIGNvbGxlY3RpbmcgZGF0YSByb3VnaGx5IHdoZW4gdGhlIGJvb3QgCisjIHByb2Nlc3MgY29tcGxldGVzLCBpdCBpcyBub3QgZXhhY3RseSBhIHN0b3B3YXRjaC4gSXQgaGFzIGEgbGlzdCBvZiBwcm9ncmFtcyAKKyMgd2hpY2ggYXJlIHN1cHBvc2VkIHNpZ25pZnkgdGhhdCB0aGUgYm9vdCBwcm9jZXNzIGhhcyBjb21wbGV0ZWQgKGZvciBleGFtcGxlLAorIyBvcGVuYm94IG9yIGdub21lLXNoZWxsLCkgYnV0IGl0IHdhaXRzIGEgZnVsbCAyMCBzZWNvbmRzIGFmdGVyIHN1Y2ggYSBwcm9ncmFtCisjIGlzIGxhdW5jaGVkIGJlZm9yZSBzdG9wcGluZyBpdHNlbGYsIHRvIGNvbGxlY3QgYWRkaXRpb25hbCBkYXRhLgorIworIyBJZiB5b3UgYXJlIHVzaW5nIGEgd2luZG93IG1hbmFnZXIgb3IgR1VJIHdoaWNoIGlzbid0IGluY2x1ZGVkIGluIGJvb3RjaGFydDIncworIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSwgeW91IHNob3VsZCB3cml0ZSBiYmFwcGVuZCBmaWxlIHRvIGFtZW5kCisjIGJvb3RjaGFydGQuY29uZiBhbmQgYWRkIGl0IHRvIEVYSVRfUFJPQy4gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHNob3duIGluIHRoaXMKKyMgcmVjaXBlLCB3aGVyZSB0aGUgTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgKHVzZWQgYnkgU2F0bykgaXMgYWRkZWQuCisjCisjIElmIHlvdSB3YW50IGRhdGEgY29sbGVjdGlvbiB0byBlbmQgYXQgYSBjZXJ0YWluIHBvaW50IGV4YWN0bHksIHlvdSBzaG91bGQKKyMgYXJyYW5nZSBmb3IgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJlIHJ1bjoKKyMgICBib290Y2hhcnRkIHN0b3AKKyMgWW91IG1pZ2h0IHNldCB0aGlzIGNvbW1hbmQgdG8gYmUgbGF1bmNoZWQgYnkgdGhlIGRlc2t0b3AgZW52aXJvbm1lbnQgc2hpcHBlZAorIyBvbiB0aGUgaW1hZ2UgeW91J3JlIGJ1aWxkaW5nIGFmdGVyIHRoZSBvdGhlciBzdGFydHVwIHByb2dyYW1zIGFyZSBjb21wbGV0ZS4KKyMgVGhpcyB3aWxsIG5vdCBpbmN1ciB0aGUgMjAgc2Vjb25kIHdhaXQgcGVyaW9kIGFuZCB3aWxsIGNhdXNlIGJvb3RjaGFydDIgdG8KKyMgYmVoYXZlIGEgYml0IG1vcmUgbGlrZSBhIHN0b3B3YXRjaC4gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHNob3duIGluIHRoaXMgCisjIHJlY2lwZSwgc3BlY2lmaWNhbGx5IHRoZSBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCBwYWNrYWdlLCB3aGljaCBzdG9wcyBkYXRhCisjIGNvbGxlY3Rpb24gYXMgdGhlIGxhc3QgYWN0aW9uIHdoZW4gc3dpdGNoaW5nIHRvIHJ1bmxldmVscyAyIHRocm91Z2ggNS4gWW91IGNhbgorIyBhZGQgYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgdG8gSU1BR0VfSU5TVEFMTCBpZiB5b3UgbmVlZCB0byB1c2UgaXQuCisjCisjIFVubGVzcyB5b3UncmUgZG9pbmcgc29tZXRoaW5nIHNwZWNpYWwsIGlmIHlvdXIgaW1hZ2UgZG9lcyBub3QgbGF1bmNoIGFuIFggCisjIHdpbmRvdyBtYW5hZ2VyLCB5b3Ugd2lsbCBuZWVkIHRvIGFkZCBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCB0byB5b3VyIGltYWdlLgorIworIyBCb290Y2hhcnQyIGNhbiBiZSBzdGFydGVkIGluIHR3byB3YXlzLiBEYXRhIGNvbGxlY3Rpb24gY2FuIGJlIGluaXRpYXRlZCBieQorIyBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyMgICBib290Y2hhcnRkIHN0YXJ0CisjIEhvd2V2ZXIsIGZvciB0aGUgbW9zdCBjb21wbGV0ZSBkYXRhLCB0aGUgYm9vdGNoYXJ0MiBkZXZlbG9wZXJzIHJlY29tbWVuZAorIyBydW5uaW5nIGl0IGFzIFBJRCAxLiBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHRoZSBrZXJuZWwgCisjIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGluIHRoZSBib290bG9hZGVyIHNldHVwOgorIyAgIGluaXQ9L3NiaW4vYm9vdGNoYXJ0ZAorIyBXaGVuIGludm9rZWQgdGhpcyB3YXksIGJvb3RjaGFydDIgd2lsbCBzZXQgaXRzZWxmIHVwIGFuZCB0aGVuIGF1dG9tYXRpY2FsbHkgCisjIHJ1biAvc2Jpbi9pbml0LiBGb3IgZXhhbXBsZSwgd2hlbiBib290aW5nIHRoZSBkZWZhdWx0IHFlbXV4ODYgaW1hZ2UsIG9uZSBtaWdodAorIyB1c2UgYSBjb21tYW5kIGxpa2UgdGhpczoKKyMgICBydW5xZW11IHFlbXV4ODYgYm9vdHBhcmFtcz0iaW5pdGNhbGxfZGVidWcgcHJpbnRrLnRpbWU9eSBxdWlldCBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ9L3NiaW4vYm9vdGNoYXJ0ZCIKKyMKKyMgTmVpdGhlciBtZXRob2QgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgaGVyZSwgY2hvb3NlIHdoYXQgd29ya3MgZm9yIHlvdS4KKyMKKyMgSWYgeW91IGFyZSBidWlsZGluZyB5b3VyIGltYWdlIHdpdGggc3lzdGVtZCBpbnN0ZWFkIG9mIFN5c1YgaW5pdCwgYm9vdGNoYXJ0MgorIyBpbmNsdWRlcyBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMgdG8gYmVnaW4gY29sbGVjdGlvbiBhdXRvbWF0aWNhbGx5IGF0IGJvb3QgYW5kIAorIyBlbmQgY29sbGVjdGlvbiBhdXRvbWF0aWNhbGx5IDIwIHNlY29uZHMgYWZ0ZXIgdGhlIGJvb3QgcHJvY2VzcyBoYXMgY29tcGxldGVkLgorIyBIb3dldmVyLCBiZSBhd2FyZSB0aGF0IHN5c3RlbWQgdGVuZHMgdG8gc3RhcnQgYm9vdGNoYXJ0MiByZWxhdGl2ZWx5IGxhdGUgaW50bworIyB0aGUgYm9vdCBwcm9jZXNzLCBzbyBpdCdzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgYm9vdGNoYXJ0MiBhcyBQSUQgMS4gSWYgCisjIHlvdSdyZSB1c2luZyBzeXN0ZW1kIGFuZCB5b3Ugd2lzaCB0byB1c2UgYW5vdGhlciBtZXRob2QgdG8gc3RvcCBkYXRhCisjIGNvbGxlY3Rpb24gYXQgYSB0aW1lIG9mIHlvdXIgY2hvb3NpbmcsIHlvdSBtYXkgZG8gc28gYXMgbG9uZyBhcyB5b3UgZ2V0IHRvIGl0CisjIGJlZm9yZSB0aGUgMjAgc2Vjb25kIHRpbWVvdXQgb2YgdGhlIHN5c3RlbWQgc2VydmljZSBmaWxlcy4gQWxzbywgeW91IG1heSB3cml0ZQorIyBhIGJiYXBwZW5kIHRvIHBhdGNoIGJvb3RjaGFydDItZG9uZS50aW1lci5pbiB0byBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUKKyMgdGltZW91dC4gRGVjcmVhc2luZyBpdCB0byAwIHdpbGwgbWFrZSBpdCBiZWhhdmUgbGlrZQorIyBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdC4KKyMKKyMgQnkgZGVmYXVsdCwgd2hlbiBkYXRhIGNvbGxlY3Rpb24gaXMgc3RvcHBlZCwgYSBmaWxlIG5hbWVkIGJvb3RjaGFydC50Z3ogd2lsbAorIyBiZSBjcmVhdGVkIGluIC92YXIvbG9nLiBJZiBweWJvb3RjaGFydGd1aSBpcyBpbmNsdWRlZCBpbiB5b3VyIGltYWdlLAorIyBib290Y2hhcnQucG5nIHdpbGwgYWxzbyBiZSBjcmVhdGVkIGF0IHRoZSBzYW1lIHRpbWUuIEhvd2V2ZXIsIHRoaXMgcmVzdWx0cyBpbgorIyBhIG5vdGljZWFibGUgaGl0Y2ggb3IgcGF1c2UgYXQgYm9vdCB0aW1lLCB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IHdhbnQgb24gYW4KKyMgZW1iZWRkZWQgZGV2aWNlLiBTbyB5b3UgbWF5IHByZWZlciB0byBvbWl0IHB5Ym9vdGNoYXJ0Z3VpIGZyb20geW91ciBpbWFnZS4gSW4KKyMgdGhhdCBjYXNlLCBjb3B5IGJvb3RjaGFydC50Z3ogb3ZlciB0byB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSBhbmQgZ2VuZXJhdGUKKyMgYm9vdGNoYXJ0LnBuZyB0aGVyZS4gVG8gZ2V0IHB5Ym9vdGNoYXJ0Z3VpIG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCB5b3UgY2FuCisjIGVpdGhlciBpbnN0YWxsIGl0IGRpcmVjdGx5IGZyb20gc29tZSBvdGhlciBzb3VyY2UsIG9yIGJ1aWxkIGJvb3RjaGFydDItbmF0aXZlCisjIGFuZCBmaW5kIHB5Ym9vdGNoYXJ0Z3VpIGluIHRoZSBuYXRpdmUgc3lzcm9vdDoKKyMgICAgYml0YmFrZSBib290Y2hhcnQyLW5hdGl2ZQorIyAgIC4vdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL3B5Ym9vdGNoYXJ0Z3VpIC9wYXRoL3RvL2Jvb3RjaGFydC50Z3oKKyMgTm90ZSB0aGF0LCB3aGV0aGVyIGluc3RhbGxlZCBvbiB5b3VyIGJ1aWxkIHN5c3RlbSBvciBvbiB5b3VyIGltYWdlLCB0aGUgCisjIHB5Ym9vdGNoYXJ0Z3VpIHByb3ZpZGVkIGJ5IHRoaXMgcmVjaXBlIGRvZXMgbm90IHN1cHBvcnQgdGhlIC1pIG9wdGlvbi4gWW91IAorIyB3aWxsIG5lZWQgdG8gaW5zdGFsbCBweWJvb3RjaGFydGd1aSBieSBvdGhlciBtZWFucyBpbiBvcmRlciB0byBydW4gaXQgaW4KKyMgaW50ZXJhY3RpdmUgbW9kZS4KKworU1VNTUFSWSA9ICJCb290aW5nIHNlcXVlbmNlIGFuZCBDUFUsSS9PIHVzYWdlIG1vbml0b3IiCitERVNDUklQVElPTiA9ICJNb25pdG9ycyB3aGVyZSB0aGUgc3lzdGVtIHNwZW5kcyBpdHMgdGltZSBhdCBzdGFydCwgY3JlYXRpbmcgYSBncmFwaCBvZiBhbGwgcHJvY2Vzc2VzLCBkaXNrIHV0aWxpemF0aW9uLCBhbmQgd2FpdCB0aW1lLiIKK0FVVEhPUiA9ICJXb25ob25nIEt3b24gPHdvbmhvbmcua3dvbkBsZ2UuY29tPiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9tbWVla3MvYm9vdGNoYXJ0IgorTElDRU5TRSA9ICJHUEwtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDRhYzQ2NzgzMTEyNTRkYjYyZWRmOGZkMzljYjgxMjQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9tbWVla3MvYm9vdGNoYXJ0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9ib290Y2hhcnRkX3N0b3Auc2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKK1NSQ1JFViA9ICI2ZjA1MGI2NWFlOWYyNjY2NDVmMDRmMGFlY2FiOWVmYjg4Mzc1ZjFjIgorCitpbmhlcml0IHN5c3RlbWQKK2luaGVyaXQgdXBkYXRlLXJjLmQKK2luaGVyaXQgcHl0aG9ubmF0aXZlCisKKyMgVGhlIG9ubHkgcmVhc29uIHRvIGJ1aWxkIGJvb3RjaGFydDItbmF0aXZlIGlzIGZvciBhIG5hdGl2ZSBweWJvb3RjaGFydGd1aS4KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYm9vdGNoYXJ0Mi5zZXJ2aWNlIGJvb3RjaGFydDItZG9uZS5zZXJ2aWNlIGJvb3RjaGFydDItZG9uZS50aW1lciIKKworVVBEQVRFUkNQTiA9ICJib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCIKK0lOSVRTQ1JJUFRfTkFNRSA9ICJib290Y2hhcnRkX3N0b3Auc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSAyIDMgNCA1IC4iCisKKyMgV2Ugd2FudCBuYXRpdmUgcHlib290Y2hhcnRndWkgdG8gZXhlY3V0ZSB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbiBpbnRlcnBldGVyLgorZG9fY29tcGlsZV9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBlY2hvICIjISAke1BZVEhPTn0iIHwgY2F0IC0gJHtTfS9weWJvb3RjaGFydGd1aS5weSA+ICR7V09SS0RJUn0vdGVtcF9weWJvb3RjaGFydGd1aQorICAgIG12ICR7V09SS0RJUn0vdGVtcF9weWJvb3RjaGFydGd1aSAke1N9L3B5Ym9vdGNoYXJ0Z3VpLnB5CisgICAgY2htb2QgK3ggJHtTfS9weWJvb3RjaGFydGd1aQorfQorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworICAgIGV4cG9ydCBQWV9MSUJESVI9IiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9IgorICAgIGV4cG9ydCBCSU5ESVI9IiR7YmluZGlyfSIKKyAgICBleHBvcnQgTElCRElSPSIke2Jhc2VfbGliZGlyfSIKK30KKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfSAjIG5lZWRlZCBmb3IgLW5hdGl2ZQorICAgIGV4cG9ydCBQWV9MSUJESVI9IiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9IgorICAgIGV4cG9ydCBCSU5ESVI9IiR7YmluZGlyfSIKKyAgICBleHBvcnQgREVTVERJUj0iJHtEfSIKKyAgICBleHBvcnQgTElCRElSPSIke2Jhc2VfbGliZGlyfSIKKworICAgIG9lX3J1bm1ha2UgaW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYm9vdGNoYXJ0ZF9zdG9wLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCisgICAgZWNobyAnRVhJVF9QUk9DPSIkRVhJVF9QUk9DIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIicgPj4gJHtEfSR7c3lzY29uZmRpcn0vYm9vdGNoYXJ0ZC5jb25mCit9CisKK1BBQ0tBR0VTID0rICJweWJvb3RjaGFydGd1aSIKK0ZJTEVTX3B5Ym9vdGNoYXJ0Z3VpICs9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3B5Ym9vdGNoYXJ0Z3VpICR7YmluZGlyfS9weWJvb3RjaGFydGd1aSIKK1JERVBFTkRTX3B5Ym9vdGNoYXJ0Z3VpID0gInB5dGhvbi1weWNhaXJvIHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24taW1hZ2UgcHl0aG9uLXRleHR1dGlscyBweXRob24tc2hlbGwgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1jb2RlY3MiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAnc3lzdmluaXQtcGlkb2YnLCAncHJvY3BzJywgZCl9IgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICJsc2IiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHB5dGhvbi1weWNhaXJvLW5hdGl2ZSIKKworUEFDS0FHRVMgPSsgImJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IgorRklMRVNfYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgKz0gIiR7c3lzY29uZmRpcn0vaW5pdC5kICR7c3lzY29uZmRpcn0vcmMqLmQiCisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9ib290Y2hhcnQvYm9vdGNoYXJ0LWNvbGxlY3RvciIKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9ib290Y2hhcnQvdG1wZnMiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9ib290Y2hhcnQvLmRlYnVnIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2RvY3MiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiYm9vdGNoYXJ0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzUzYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29scy9maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSAzNzNlYjUxMzI4YjVlMTA1Mjk3NjNjYWQ0NDEyMTBlNmIwZWZiMjRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDExIEZlYiAyMDE1IDIyOjA4OjQxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgorbWtmcy5jOjMwMDo0NjogZXJyb3I6ICdCVFJGU19CVUlMRF9WRVJTSU9OJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKyAgZnByaW50ZihzdGRlcnIsICJta2ZzLmJ0cmZzLCBwYXJ0IG9mICVzXG4iLCBCVFJGU19CVUlMRF9WRVJTSU9OKTsKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCA4NjBhMzkwLi44YTZmYmQ3IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTQyLDcgKzE0Miw3IEBAIGVsc2UKKyAJY2hlY2tfZWNobyA9IHRydWUKKyBlbmRpZgorIAorLSUuby5kOiAlLmMKKyslLm8uZDogJS5jIHZlcnNpb24uaAorIAkkKFEpJChDQykgLU1NIC1NRyAtTUYgJEAgLU1UICQoQDouby5kPS5vKSAtTVQgJChAOi5vLmQ9LnN0YXRpYy5vKSAtTVQgJEAgJChDRkxBR1MpICQ8CisgCisgLmMubzoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzYyMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkNoZWNrc3VtbWluZyBDb3B5IG9uIFdyaXRlIEZpbGVzeXN0ZW0gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQnRyZnMgaXMgYSBuZXcgY29weSBvbiB3cml0ZSBmaWxlc3lzdGVtIGZvciBMaW51eCBhaW1lZCBhdCBcCitpbXBsZW1lbnRpbmcgYWR2YW5jZWQgZmVhdHVyZXMgd2hpbGUgZm9jdXNpbmcgb24gZmF1bHQgdG9sZXJhbmNlLCByZXBhaXIgYW5kIFwKK2Vhc3kgYWRtaW5pc3RyYXRpb24uIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgKG1rZnMsIGZzY2ssIGJ0cmZzY3RsKSB1c2VkIHRvIHdvcmsgd2l0aCBcCitidHJmcyBhbmQgYW4gdXRpbGl0eSAoYnRyZnMtY29udmVydCkgdG8gbWFrZSBhIGJ0cmZzIGZpbGVzeXN0ZW0gZnJvbSBhbiBleHQzLiIKKworSE9NRVBBR0UgPSAiaHR0cHM6Ly9idHJmcy53aWtpLmtlcm5lbC5vcmciCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mY2IwMmRjNTUyYTA0MWRlZTI3ZTRiODVjNzM5NjA2NyIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAidXRpbC1saW51eCBhdHRyIGUyZnNwcm9ncyBsem8gYWNsIgorCitTUkNSRVYgPSAiN2YxMzI4Y2NiNWQxNTllZmU4NTBkNGVhZWE5YjQ5YmJlOGM0MTgxZSIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2tkYXZlL2J0cmZzLXByb2dzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwucGF0Y2ggXAorIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgc2ggYXV0b2dlbi5zaAorfQorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2J1aWxkLWNvbXBhcmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzM3ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2J1aWxkLWNvbXBhcmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQnVpbGQgUmVzdWx0IENvbXBhcmUgU2NyaXB0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHNjcmlwdHMgdG8gZmluZCBvdXQgaWYgdGhlIGJ1aWxkIHJlc3VsdFwKK2RpZmZlcnMgdG8gYSBmb3JtZXIgYnVpbGQuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9idWlsZC1jb21wYXJlLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoO3N0cmlwbGV2ZWw9MSBcCisgICAgICAgICAgIGZpbGU6Ly9JZ25vcmUtRFdBUkYtc2VjdGlvbnMucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLXN1cHBvcnQtZm9yLWRlYi1hbmQtaXBrLXBhY2thZ2luZy5wYXRjaCBcCisgICAgICAgICAgICIKK1BBVENIVE9PTCA9ICJnaXQiCisKK1NSQ1JFViA9ICJjNTM1MmMwNTRjNmVmMTU3MzVkYTMxYjc2ZDZkODg2MjBmNGFmZjBhIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBmdW5jdGlvbnMuc2ggJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBwa2ctZGlmZi5zaCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IHNhbWUtYnVpbGQtcmVzdWx0LnNoICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSA3NTUgc3JwbS1jaGVjay5zaCAke0R9LyR7YmluZGlyfQorfQorCitSREVQRU5EU18ke1BOfSArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxNTIxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gMDJkYmM3ZTM0NzhlNDA5ZDZmNWUzZTFjNTNkYWRkZjg4MzhiZTk5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxIFNlcCAyMDE1IDEyOjA0OjMzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBzdXBwb3J0IGZvciBkZWIgYW5kIGlwayBwYWNrYWdpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgZnVuY3Rpb25zLnNoIHwgMTUgKysrKysrKysrKysrKysrCisgcGtnLWRpZmYuc2ggIHwgIDYgKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9mdW5jdGlvbnMuc2ggYi9mdW5jdGlvbnMuc2gKK2luZGV4IDA2MDc5ZGYuLjg1YzkwMDMgMTAwNjQ0CistLS0gYS9mdW5jdGlvbnMuc2gKKysrKyBiL2Z1bmN0aW9ucy5zaAorQEAgLTg1LDYgKzg1LDEzIEBAIGZ1bmN0aW9uIHVucGFja2FnZSgpCisgICAgICAgICAgICAgQ1BJT19PUFRTPSItLWV4dHJhY3QgLS11bmNvbmRpdGlvbmFsIC0tcHJlc2VydmUtbW9kaWZpY2F0aW9uLXRpbWUgLS1tYWtlLWRpcmVjdG9yaWVzIC0tcXVpZXQiCisgICAgICAgICAgICAgcnBtMmNwaW8gJGZpbGUgfCBjcGlvICR7Q1BJT19PUFRTfQorICAgICAgICAgICAgIDs7CisrICAgICAgICAqLmlwa3wqLmRlYikKKysgICAgICAgICAgICBhciB4ICRmaWxlCisrICAgICAgICAgICAgdGFyIHhmIGNvbnRyb2wudGFyLmd6CisrICAgICAgICAgICAgcm0gY29udHJvbC50YXIuZ3oKKysgICAgICAgICAgICB0YXIgeGYgZGF0YS50YXIuZ3oKKysgICAgICAgICAgICBybSBkYXRhLnRhci5negorKyAgICAgICAgICAgIDs7CisgICAgIGVzYWMKKyAgICAgcG9wZCAxPi9kZXYvbnVsbAorIH0KK0BAIC0yNTUsNCArMjYyLDEyIEBAIGZ1bmN0aW9uIGNtcF9zcGVjICgpCisgICAgIHJtICRmaWxlMSAkZmlsZTIKKyAgICAgcmV0dXJuICRSRVMKKyB9CisrCisrZnVuY3Rpb24gYWRqdXN0X2NvbnRyb2xmaWxlICgpIHsKKysgICAgY2F0ICQxL2NvbnRyb2wgfCBzZWQgJy9eVmVyc2lvbjogL2QnID4gJDEvY29udHJvbC5maXhlZAorKyAgICBtdiAkMS9jb250cm9sLmZpeGVkICQxL2NvbnRyb2wKKysgICAgY2F0ICQyL2NvbnRyb2wgfCBzZWQgJy9eVmVyc2lvbjogL2QnID4gJDIvY29udHJvbC5maXhlZAorKyAgICBtdiAkMi9jb250cm9sLmZpeGVkICQyL2NvbnRyb2wKKyt9CisrCisgIyB2aW06IHR3PTY2NiB0cz0yIGV0CitkaWZmIC0tZ2l0IGEvcGtnLWRpZmYuc2ggYi9wa2ctZGlmZi5zaAoraW5kZXggMGYxZmE3Ni4uM2NmMTBhYSAxMDA2NDQKKy0tLSBhL3BrZy1kaWZmLnNoCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTEzOCw2ICsxMzgsMTIgQEAgZWNobyAiRXh0cmFjdGluZyBwYWNrYWdlcyIKKyB1bnBhY2thZ2UgJG9sZHBrZyAkZGlyL29sZAorIHVucGFja2FnZSAkbmV3cGtnICRkaXIvbmV3CisgCisrY2FzZSAkb2xkcGtnIGluCisrICAqLmRlYnwqLmlwaykKKysgICAgIGFkanVzdF9jb250cm9sZmlsZSAkZGlyL29sZCAkZGlyL25ldworKyAgOzsKKytlc2FjCisrCisgIyBmaWxlcyBpcyBzZXQgaW4gY21wX3NwZWMgZm9yIHJwbXMsIHNvIGlmIFJFUyBpcyBlbXB0eSB3ZSBzaG91bGQgYXNzdW1lCisgIyBpdCB3YXNuJ3QgYW4gcnBtIGFuZCBwaWNrIGFsbCBmaWxlcyBmb3IgY29tcGFyaXNvbi4KKyBpZiBbIC16ICRSRVMgXTsgdGhlbgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGExYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDAxNTcxNTY5NGVhZGQ3MTRiOTAzZjMwYWRlODc2ZTA3MzhkNDQ5NzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPgorRGF0ZTogTW9uLCA1IEphbiAyMDE1IDE1OjA5OjIwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIElnbm9yZSBEV0FSRiBzZWN0aW9ucy4KKworQXNzdW1lIGZvciBub3cgdGhhdCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBEV0FSRiBzZWN0aW9ucyBkdWUgdG8gcGF0aAorZGlmZmVyZW5jZXMuIEhvd2V2ZXIsIGluIHRoZSBjYXNlIHRoZSB0b29sIGlzIHJhbiBvbiBhICJkZWJ1ZyIgcGFja2FnZQoraXQgd2lsbCBtb3N0IGxpa2VseSBmYWxzZWx5IHNheSB0aGUgcGFja2FnZXMgaGF2ZSBubyBkaWZmZXJlbmNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworVGhlIHBhY2thZ2UgZGlmZmVyZW5jZSB0b29sIGlzIGNvcnJlY3RseSBsYWJlbGxpbmcgdGhlIHBhY2thZ2VzIGFzIGRpZmZlcmVudAord2hlbiB0aGUgRFdBUkYgc2VjdGlvbnMgZG9uJ3QgbWF0Y2ggZHVlIHRvIHBhdGhzLiBUaGUgcGF0aHMgaW4gdGhlIGRlYnVnIGluZm8KK3Nob3VsZCBhY3R1YWxseSBiZSBtYWRlIHRvIGJlIHRoZSBzYW1lIHVzaW5nIGNvbXBpbGUgZmxhZ3Mgb3Igc29tZSBvdGhlcgorbWVjaGFuaXNtLgorCitIb3dldmVyLCB0byBtYWtlIHRoZSB0b29sIG1vcmUgdXNlZnVsIHRvIFlvY3RvIHVudGlsIHRoZSB3b3JrIGNhbiBiZSBkb25lCit0byBlbnN1cmUgaWRlbnRpY2FsIHBhdGhzIGluIGRlYnVnIHNlY3Rpb25zLCB0aGlzIHBhdGNoIGlzIGJlaW5nIGFwcGxpZWQuCisKK1NpZ25lZC1vZmYtYnk6IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBwa2ctZGlmZi5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3BrZy1kaWZmLnNoIGIvcGtnLWRpZmYuc2gKK2luZGV4IDU2MDM1YzEuLjBmMWZhNzYgMTAwNzU1CistLS0gYS9wa2ctZGlmZi5zaAorKysrIGIvcGtnLWRpZmYuc2gKK0BAIC02NTgsNyArNjU4LDcgQEAgY2hlY2tfc2luZ2xlX2ZpbGUoKQorICAgICAgICBlY2hvICIiID4kZmlsZTEKKyAgICAgICAgZWNobyAiIiA+JGZpbGUyCisgICAgICAgICMgRG9uJ3QgY29tcGFyZSAuYnVpbGQtaWQgYW5kIC5nbnVfZGVidWdsaW5rIHNlY3Rpb25zCistICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgfCB0ciAiXG4iICIgIikiCisrICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgLWUgIlwuZGVidWdfYWJicmV2IiAtZSAiXC5kZWJ1Z19hcmFuZ2VzIiAtZSAiXC5kZWJ1Z19mcmFtZSIgLWUgIlwuZGVidWdfaW5mbyIgLWUgIlwuZGVidWdfbGluZSIgLWUgIlwuZGVidWdfbG9jIiAtZSAiXC5kZWJ1Z19tYWNpbmZvIiAtZSAiXC5kZWJ1Z19wdWJuYW1lcyIgLWUgIlwuZGVidWdfcHVidHlwZXMiIC1lICJcLmRlYnVnX3JhbmdlcyIgIC1lICJcLmRlYnVnX3N0ciIgfCB0ciAiXG4iICIgIikiCisgICAgICAgIGZvciBzZWN0aW9uIGluICRzZWN0aW9uczsgZG8KKyAgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBvbGQvJGZpbGUgfCBzZWQgInMsXm9sZC8sLCIgPiAkZmlsZTEKKyAgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBuZXcvJGZpbGUgfCBzZWQgInMsXm5ldy8sLCIgPiAkZmlsZTIKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjNhOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2gKQEAgLTAsMCArMSwxNTk5IEBACitGcm9tIDRkZTNkZjVhMWIzNjFjZDA5YTA4MWYwZTBiZGI5NGNiZjY4NGVkNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTkgRmViIDIwMTUgMDA6MzQ6NDcgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVuYW1lIHJwbS1jaGVjay5zaCB0byBwa2ctZGlmZi5zaC4KKworVGhlIHRvb2wgbm93IGFjY2VwdHMgcGFja2FnZSBpbnB1dCBvdGhlciB0aGFuIHJwbSwgc28gY2hhbmdlIHRoZSBuYW1lCit3aGljaCBjb3VsZCBiZSBtaXNsZWFkaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUvcHVsbHNdCisKK1NpZ25lZC1vZmYtYnk6IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CisKK1VwZGF0ZWQgZm9yIHJwbS1jaGVjay5zaC4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBidWlsZC1jb21wYXJlLnNwZWMgICB8ICAgIDIgKy0KKyBwa2ctZGlmZi5zaCAgICAgICAgICB8ICA3NjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBycG0tY2hlY2suc2ggICAgICAgICB8ICA3NjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNhbWUtYnVpbGQtcmVzdWx0LnNoIHwgICAgNCArLQorIDQgZmlsZXMgY2hhbmdlZCwgNzY4IGluc2VydGlvbnMoKyksIDc2NyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcGtnLWRpZmYuc2gKKyBkZWxldGUgbW9kZSAxMDA3NTUgcnBtLWNoZWNrLnNoCisKK2RpZmYgLS1naXQgYS9idWlsZC1jb21wYXJlLnNwZWMgYi9idWlsZC1jb21wYXJlLnNwZWMKK2luZGV4IDE0YTk3ZTkuLjVmNDdjYTEgMTAwNjQ0CistLS0gYS9idWlsZC1jb21wYXJlLnNwZWMKKysrKyBiL2J1aWxkLWNvbXBhcmUuc3BlYworQEAgLTI1LDcgKzI1LDcgQEAgVmVyc2lvbjogICAgICAgIDIwMTUuMDIuMTAKKyBSZWxlYXNlOiAgICAgICAgMAorIFNvdXJjZTE6ICAgICAgICBDT1BZSU5HCisgU291cmNlMjogICAgICAgIHNhbWUtYnVpbGQtcmVzdWx0LnNoCistU291cmNlMzogICAgICAgIHJwbS1jaGVjay5zaAorK1NvdXJjZTM6ICAgICAgICBwa2ctZGlmZi5zaAorIFNvdXJjZTQ6ICAgICAgICBmdW5jdGlvbnMuc2gKKyBTb3VyY2U1OiAgICAgICAgc3JwbS1jaGVjay5zaAorIEJ1aWxkUm9vdDogICAgICAle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tYnVpbGQKK2RpZmYgLS1naXQgYS9wa2ctZGlmZi5zaCBiL3BrZy1kaWZmLnNoCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTYwMzVjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvcGtnLWRpZmYuc2gKK0BAIC0wLDAgKzEsNzY1IEBACisrIyEgL2Jpbi9iYXNoCisrIworKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFNVU0UgTGludXggUHJvZHVjdCBHbWJILCBHZXJtYW55LgorKyMgTGljZW5zZWQgdW5kZXIgR1BMIHYyLCBzZWUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzLgorKyMKKysjIFdyaXR0ZW4gYnkgTWljaGFlbCBNYXR6IGFuZCBTdGVwaGFuIENvb2xvCisrIyBFbmhhbmNlZCBieSBBbmRyZWFzIEphZWdlcgorKworK0ZVTkNUSU9OUz0kezAlLyp9L2Z1bmN0aW9ucy5zaAorKworK2NoZWNrX2FsbD0KKytjYXNlICQxIGluCisrICAtYSB8IC0tY2hlY2stYWxsKQorKyAgICBjaGVja19hbGw9MQorKyAgICBzaGlmdAorK2VzYWMKKysKKytpZiB0ZXN0ICIkIyIgIT0gMjsgdGhlbgorKyAgIGVjaG8gInVzYWdlOiAkMCBbLWF8LS1jaGVjay1hbGxdIG9sZC5ycG0gbmV3LnJwbSIKKysgICBleGl0IDEKKytmaQorKworK3NlbGZfc2NyaXB0PSQoY2QgJChkaXJuYW1lICQwKTsgZWNobyAkKHB3ZCkvJChiYXNlbmFtZSAkMCkpCisrCisrc291cmNlICRGVU5DVElPTlMKKysKKytvbGRwa2c9YHJlYWRsaW5rIC1mICQxYAorK25ld3BrZz1gcmVhZGxpbmsgLWYgJDJgCisrcmVuYW1lX3NjcmlwdD1gbWt0ZW1wYAorKworK2lmIHRlc3QgISAtZiAiJG9sZHBrZyI7IHRoZW4KKysgICAgZWNobyAiY2FuJ3Qgb3BlbiAkMSIKKysgICAgZXhpdCAxCisrZmkKKysKKytpZiB0ZXN0ICEgLWYgIiRuZXdwa2ciOyB0aGVuCisrICAgIGVjaG8gImNhbid0IG9wZW4gJDIiCisrICAgIGV4aXQgMQorK2ZpCisrCisrI3VzYWdlIHVuamFyIDxmaWxlPgorK2Z1bmN0aW9uIHVuamFyKCkKKyt7CisrICAgIGxvY2FsIGZpbGUKKysgICAgZmlsZT0kMQorKworKyAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPWZhc3RqYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9amFyCisrICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9dW56aXAKKysgICAgZWxzZQorKyAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorKyAgICAgICAgZXhpdCAxCisrICAgIGZpCisrCisrICAgIGNhc2UgJFVOSkFSIGluCisrICAgICAgICBqYXJ8ZmFzdGphcikKKysgICAgICAgICMgZWNobyBqYXIgLXhmICRmaWxlCisrICAgICAgICAke1VOSkFSfSAteGYgJGZpbGUKKysgICAgICAgIDs7CisrICAgICAgICB1bnppcCkKKysgICAgICAgIHVuemlwIC1vcXEgJGZpbGUKKysgICAgICAgIDs7CisrICAgIGVzYWMKKyt9CisrCisrIyBsaXN0IGZpbGVzIGluIGRpcmVjdG9yeQorKyN1c2FnZSB1bmphcl9sIDxmaWxlPgorK2Z1bmN0aW9uIHVuamFyX2woKQorK3sKKysgICAgbG9jYWwgZmlsZQorKyAgICBmaWxlPSQxCisrCisrICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9ZmFzdGphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1qYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj11bnppcAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCisrICAgICAgICBleGl0IDEKKysgICAgZmkKKysKKysgICAgY2FzZSAkVU5KQVIgaW4KKysgICAgICAgIGphcnxmYXN0amFyKQorKyAgICAgICAgJHtVTkpBUn0gLXRmICRmaWxlCisrICAgICAgICA7OworKyAgICAgICAgdW56aXApCisrICAgICAgICB1bnppcCAtbCAkZmlsZQorKyAgICAgICAgOzsKKysgICAgZXNhYworK30KKysKKytmaWx0ZXJfZGlzYXNtKCkKKyt7CisrICAgc2VkIC1lICdzL14gKlswLTlhLWZdXCs6Ly8nIC1lICdzL1wkMHhbMC05YS1mXVwrLyRzb21ldGhpbmcvJyAtZSAncy9jYWxscSAqWzAtOWEtZl1cKy9jYWxscSAvJyAtZSAncy8jICpbMC05YS1mXVwrLyMgIC8nIC1lICdzL1woMHhcKVw/WzAtOWEtZl1cKygvb2Zmc2V0KC8nIC1lICdzL1swLTlhLWZdXCsgPC88LycgLWUgJ3MvXjxcKC4qXCk+Oi9cMTovJyAtZSAncy88XCguKlwpKzB4WzAtOWEtZl1cKz4vPFwxICsgb2ZzPi8nIAorK30KKysKKytlY2hvICJDb21wYXJpbmcgYGJhc2VuYW1lICRvbGRwa2dgIHRvIGBiYXNlbmFtZSAkbmV3cGtnYCIKKysKKytjYXNlICRvbGRwa2cgaW4KKysgICoucnBtKQorKyAgICAgY21wX3NwZWMgJHJlbmFtZV9zY3JpcHQgJG9sZHBrZyAkbmV3cGtnCisrICAgICBSRVM9JD8KKysgICAgIGNhc2UgJFJFUyBpbgorKyAgICAgICAwKQorKyAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBpZGVudGljYWwiCisrICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGV4aXQgMAorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAxKQorKyAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBkaWZmZXJlbnQiCisrICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGV4aXQgMQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAyKQorKyAgICAgICAgICBlY2hvICJSUE0gZmlsZSBjaGVja3N1bSBkaWZmZXJzLiIKKysgICAgICAgICAgUkVTPTAKKysgICAgICAgICAgOzsKKysgICAgICAgKikKKysgICAgICAgICAgZWNobyAiV3JvbmcgZXhpdCBjb2RlISIKKysgICAgICAgICAgZXhpdCAxCisrICAgICAgICAgIDs7CisrICAgICBlc2FjCisrICAgICA7OworK2VzYWMKKysKKytmaWxlMT1gbWt0ZW1wYAorK2ZpbGUyPWBta3RlbXBgCisrCisrZGlyPWBta3RlbXAgLWRgCisrZWNobyAiRXh0cmFjdGluZyBwYWNrYWdlcyIKKyt1bnBhY2thZ2UgJG9sZHBrZyAkZGlyL29sZAorK3VucGFja2FnZSAkbmV3cGtnICRkaXIvbmV3CisrCisrIyBmaWxlcyBpcyBzZXQgaW4gY21wX3NwZWMgZm9yIHJwbXMsIHNvIGlmIFJFUyBpcyBlbXB0eSB3ZSBzaG91bGQgYXNzdW1lCisrIyBpdCB3YXNuJ3QgYW4gcnBtIGFuZCBwaWNrIGFsbCBmaWxlcyBmb3IgY29tcGFyaXNvbi4KKytpZiBbIC16ICRSRVMgXTsgdGhlbgorKyAgICBvbGRmaWxlcz1gY2QgJGRpci9vbGQ7IGZpbmQgLiAtdHlwZSBmYAorKyAgICBuZXdmaWxlcz1gY2QgJGRpci9uZXc7IGZpbmQgLiAtdHlwZSBmYAorKworKyAgICBmaWxlcz1gZWNobyAtZSAiJG9sZGZpbGVzXG4kbmV3ZmlsZXMiIHwgc29ydCAtdWAKKytmaQorKworK2NkICRkaXIKKytiYXNoICRyZW5hbWVfc2NyaXB0CisrCisrZGZpbGU9YG1rdGVtcGAKKysKKytkaWZmX3R3b19maWxlcygpCisreworKyAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorKyAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKysgICAgIGhleGR1bXAgLUMgb2xkLyRmaWxlID4gJGZpbGUxCisrICAgICBoZXhkdW1wIC1DIG5ldy8kZmlsZSA+ICRmaWxlMgorKyAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMDAKKysgICAgIHJldHVybiAxCisrICBmaQorKyAgcmV0dXJuIDAKKyt9CisrCisrdHJpbV9tYW5fZmlyc3RfbGluZSgpCisreworKyAgICAjIEhhbmRsZXMgdGhlIGZpcnN0IGxpbmUgaWYgaXQgaXMgbGlrZToKKysgICAgIy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjI4IChQb2Q6OlNpbXBsZSAzLjI4KQorKyAgICAjLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjQzLjMuCisrICAgIGxvY2FsIGY9JDEKKysgICAgc2VkIC1pIC1lICcxeworKyAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtBdXRvbWF0aWNhbGx5W1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1Qb2Q6Ok1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBQb2Q6Ok1hbnwKKysgICAgc3xeXC5cXCJbWzpibGFuazpdXVwrRE9bWzpibGFuazpdXU5PVFtbOmJsYW5rOl1dTU9ESUZZW1s6Ymxhbms6XV1USElTW1s6Ymxhbms6XV1GSUxFIVtbOmJsYW5rOl1dXCtJdFtbOmJsYW5rOl1dd2FzW1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1oZWxwMm1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBoZWxwMm1hbnwKKysgICAgfScgJGYKKyt9CisrCisrdHJpbV9tYW5fVEgoKQorK3sKKysgICAgIyBIYW5kbGVzIGxpbmVzIGxpa2U6CisrICAgICMgLlRIIGRlYmhlbHBlciA3ICIyMDEwLTAyLTI3IiAiNy40LjE1IiAiRGViaGVscGVyIgorKyAgICAjIC5USCBESVJNTkdSLUNMSUVOVCAxIDIwMTAtMDItMjcgIkRpcm1uZ3IgMS4wLjMiICJHTlUgUHJpdmFjeSBHdWFyZCIKKysgICAgIyAuVEggY2NtYWtlIDEgIk1hcmNoIDA2LCAyMDEwIiAiY2NtYWtlIDIuOC4xLXJjMyIKKysgICAgIyAuVEggUUVNVS1JTUcgMSAiMjAxMC0wMy0xNCIgIiAiICIgIgorKyAgICAjIC5USCBrZGVjbWFrZSAxICJNYXkgMDcsIDIwMTAiICJjbWFrZSAyLjguMSIKKysgICAgIyAuVEggImFwcGVuZGVyLmgiIDMgIjEyIE1heSAyMDEwIiAiVmVyc2lvbiAxLjIuMSIgImxvZzRjIiBcIiAtKi0gbnJvZmYgLSotCisrICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorKyAgICAjIC5USCAiT0ZGTElORUlNQVAiICIxIiAiMTEgTWF5IDIwMTAiICJKb2huIEdvZXJ6ZW4iICJPZmZsaW5lSU1BUCBNYW51YWwiCisrICAgICMgLlRIIGd2IDNndWlsZSAiMTMgTWF5IDIwMTAiCisrICAgICMuVEggIkdJVFwtQVJDSElNUE9SVCIgIjEiICIwOS8xMy8yMDEwIiAiR2l0IDFcJi43XCYuMSIgIkdpdCBNYW51YWwiCisrICAgICMgLlRIIExESVJFQ1RPUkQgOCAiMjAxMC0xMC0yMCIgInBlcmwgdjUuMTIuMiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIgorKyAgICAjIC5USCBjY21ha2UgMSAiRmVicnVhcnkgMDUsIDIwMTIiICJjY21ha2UgMi44LjciCisrICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorKyAgICAjIC5USCBBUkNIICIxIiAiU2VwdGVtYmVyIDIwMTAiICJHTlUgY29yZXV0aWxzIDguNSIgIlVzZXIgQ29tbWFuZHMiCisrICAgICMgLlRIICJHQ00tQ0FMSUJSQVRFIiAiMSIgIjAzIEZlYnJ1YXJ5IDIwMTIiICIiICIiCisrICAgICMuVEggTG9jYWxlOjpQbzRhOjpYbWwucG0gM3BtICIyMDE1LTAxLTMwIiAiUG80YSBUb29scyIgIlBvNGEgVG9vbHMiCisrICAgIGxvY2FsIGY9JDEKKysgICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInFxMjAwMC0wMS0wMSJcM3wnICRmCisrICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAidXEyMDAwLTAyLTAyIlwzfCcgJGYKKysgICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorKyAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgcXUyMDAwLTAzLTAzXDN8JyAkZgorKyAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgdXUyMDAwLTA0LTA0XDN8JyAkZgorK30KKysKKytzdHJpcF9udW1iZXJlZF9hbmNob3JzKCkKKyt7CisrICAjIFJlbW92ZSBudW1iZXJlZCBhbmNob3JzIG9uIERvY2Jvb2sgLyBIVE1MIGZpbGVzLgorKyAgIyBUaGlzIHNob3VsZCBiZSBzYXZlIHNpbmNlIHdlIHJlbW92ZSB0aGVtIGZyb20gb2xkIGFuZCBuZXcgZmlsZXMuCisrICAjIEEgdHJhaWxpbmcgPC9hPiBvciA8L2Rpdj4gdGFnIHdpbGwgc3RheSBhbHNvIG9uIGJvdGggZmlsZXMuCisrICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgc2VkIC1pIC1lICdzJTxbIF0qYVsgXVwrbmFtZVtePF0qWzAtOV1cK1tePF0qJSVnJyBcCisrICAgICAtZSAncyU8WyBdKmFbIF1cK2hyZWZbXjxdKiNbXjxdKlswLTldXCtbXjxdKiUlZycgXAorKyAgICAgLWUgJ3MlPFtePF0qaWQ9ImZ0blwuW148XSpbMC05XVwrW148XSolJWcnICRmCisrICBkb25lCisrfQorKworKworK2NoZWNrX2NvbXByZXNzZWRfZmlsZSgpCisreworKyAgbG9jYWwgZmlsZT0kMQorKyAgbG9jYWwgZXh0PSQyCisrICBsb2NhbCB0bXBkaXI9YG1rdGVtcCAtZGAKKysgIGxvY2FsIGZ0eXBlCisrICBsb2NhbCByZXQ9MAorKyAgZWNobyAiJGV4dCBmaWxlIHdpdGggb2RkIGZpbGVuYW1lOiAkZmlsZSIKKysgIGlmIHRlc3QgLW4gIiR0bXBkaXIiOyB0aGVuCisrICAgIG1rZGlyICR0bXBkaXIve29sZCxuZXd9CisrICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG9sZC8kZmlsZSAkdG1wZGlyLworKyAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBuZXcvJGZpbGUgJHRtcGRpci8KKysgICAgaWYgcHVzaGQgJHRtcGRpciA+IC9kZXYvbnVsbCA7IHRoZW4KKysgICAgICBjYXNlICIkZXh0IiBpbgorKyAgICAgICAgYnoyKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5iejJ9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLmJ6Mn0KKysgICAgICAgICAgYnppcDIgLWQgb2xkLyRmaWxlLmJ6MgorKyAgICAgICAgICBiemlwMiAtZCBuZXcvJGZpbGUuYnoyCisrICAgICAgICAgIDs7CisrICAgICAgICBnemlwKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5nen0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuZ3p9CisrICAgICAgICAgIGd6aXAgLWQgb2xkLyRmaWxlLmd6CisrICAgICAgICAgIGd6aXAgLWQgbmV3LyRmaWxlLmd6CisrICAgICAgICAgIDs7CisrICAgICAgICB4eikKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywueHp9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLnh6fQorKyAgICAgICAgICB4eiAtZCBvbGQvJGZpbGUueHoKKysgICAgICAgICAgeHogLWQgbmV3LyRmaWxlLnh6CisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKysgICAgICBjYXNlICRmdHlwZSBpbgorKyAgICAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKysgICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCisrICAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgZmkKKysgICAgICAgICAgOzsKKysgICAgICAgIEFTQ0lJXCBjcGlvXCBhcmNoaXZlXCAqKQorKyAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAgKikKKysgICAgICAgICAgZWNobyAidW5oYW5kbGVkICRleHQgY29udGVudDogJGZ0eXBlIgorKyAgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCisrICAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgZmkKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgcG9wZCA+IC9kZXYvbnVsbAorKyAgICBmaQorKyAgICBybSAtcmYgIiR0bXBkaXIiCisrICBmaQorKyAgcmV0dXJuICRyZXQKKyt9CisrCisrY2hlY2tfc2luZ2xlX2ZpbGUoKQorK3sKKysgIGxvY2FsIGZpbGU9IiQxIgorKyAgY2FzZSAkZmlsZSBpbgorKyAgICAqLnNwZWMpCisrICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UxLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG9sZC8kZmlsZQorKyAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMixSZWxlYXNlOiBAUkVMRUFTRUAsIiBuZXcvJGZpbGUKKysgICAgICAgOzsKKysgICAgKi5leGUubWRifCouZGxsLm1kYikKKysgICAgICAgIyBKdXN0IGRlYnVnIGluZm9ybWF0aW9uLCB3ZSBjYW4gc2tpcCB0aGVtCisrICAgICAgIGVjaG8gIiRmaWxlIHNraXBwZWQgYXMgZGVidWcgZmlsZS4iCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICouYSkKKysgICAgICAgZmxpc3Q9YGFyIHQgbmV3LyRmaWxlYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkCisrICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICouY3BpbykKKysgICAgICAgZmxpc3Q9YGNwaW8gLS1xdWlldCAtLWxpc3QgLS1mb3JjZS1sb2NhbCA8ICJuZXcvJGZpbGUiYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPSRmaWxlLmV4dHJhY3QuJFBQSUQuJCQKKysgICAgICAgbWtkaXIgb2xkLyRmZGlyIG5ldy8kZmRpcgorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCisrICAgICAgIGNkICRwd2QKKysgICAgICAgbG9jYWwgcmV0PTAKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKysgICAgICAgICAgIHJldD0xCisrICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgZmkKKysgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIHJtIC1yZiBvbGQvJGZkaXIgbmV3LyRmZGlyCisrICAgICAgIHJldHVybiAkcmV0CisrICAgICAgIDs7CisrICAgICoudGFyfCoudGFyLmJ6MnwqLnRhci5nenwqLnRnenwqLnRiejIpCisrICAgICAgIGZsaXN0PWB0YXIgdGYgbmV3LyRmaWxlYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKysgICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuICRyZXQKKysgICAgICAgOzsKKysgICAgKi56aXB8Ki5qYXJ8Ki53YXIpCisrICAgICAgIGNkIG9sZAorKyAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQgPiBmbGlzdAorKyAgICAgICAjICAxMC0wNS0yMDEwIDE0OjM5CisrICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICAjIDIwMTItMDItMDMgMDc6NTkKKysgICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKysgICAgICAgY2QgLi4vbmV3CisrICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydD4gZmxpc3QKKysgICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICw7ICIgZmxpc3QKKysgICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKysgICAgICAgY2QgLi4KKysgICAgICAgaWYgISBjbXAgLXMgb2xkL2ZsaXN0IG5ldy9mbGlzdDsgdGhlbgorKyAgICAgICAgICBlY2hvICIkZmlsZSBoYXMgZGlmZmVyZW50IGZpbGUgbGlzdCIKKysgICAgICAgICAgZGlmZiAtdSBvbGQvZmxpc3QgbmV3L2ZsaXN0CisrICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIGZsaXN0PWBncmVwIGRhdGUgbmV3L2ZsaXN0IHwgc2VkIC1lICdzLC4qIGRhdGUgLCwnYAorKyAgICAgICBwd2Q9JFBXRAorKyAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorKyAgICAgICBjZCBvbGQvJGZkaXIKKysgICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QKKysgICAgICAgbG9jYWwgcmV0PTAKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgIGlmIHRlc3QgLWYgbmV3LyRmZGlyLyRmICYmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKysgICAgICAgICAgIHJldD0xCisrICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgZmkKKysgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIHJldHVybiAkcmV0OzsKKysgICAgICoucHljfCoucHlvKQorKyAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ29sZC8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorKyAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ25ldy8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorKyAgICAgICAgOzsKKysgICAgICouYnoyKQorKyAgICAgICAgYnVuemlwMiAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5iejIvfQorKyAgICAgICAgYnVuemlwMiAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5iejIvfQorKyAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5iejIvfQorKyAgICAgICAgcmV0dXJuICQ/CisrICAgICAgICA7OworKyAgICAgKi5neikKKysgICAgICAgIGd1bnppcCAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5nei99CisrICAgICAgICBndW56aXAgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uZ3ovfQorKyAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5nei99CisrICAgICAgICByZXR1cm4gJD8KKysgICAgICAgIDs7CisrICAgICAqLnJwbSkKKysJJHNlbGZfc2NyaXB0IC1hIG9sZC8kZmlsZSBuZXcvJGZpbGUKKysgICAgICAgIHJldHVybiAkPworKyAgICAgICAgOzsKKysgICAgICpwbmcpCisrCSMgVHJ5IHRvIHJlbW92ZSB0aW1lc3RhbXBzLCBvbmx5IGlmIGNvbnZlcnQgZnJvbSBJbWFnZU1hZ2ljayBpcyBpbnN0YWxsZWQKKysgICAgICAgIGlmIFtbICQodHlwZSAtcCBjb252ZXJ0KSBdXTsgdGhlbgorKwkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfQorKwkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfQorKwkgIGlmICEgY21wIC1zIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9OyB0aGVuCisrCSAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrCSAgICAgIGhleGR1bXAgLUMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTEKKysJICAgICAgaGV4ZHVtcCAtQyBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMgorKwkgICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwCisrCSAgICAgIHJldHVybiAxCisrCSAgZmkKKysJICByZXR1cm4gMAorKwlmaQorKyAgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvbG9jYWxlLyovTENfTUVTU0FHRVMvKi5tb3wvdXNyL3NoYXJlL2xvY2FsZS1idW5kbGUvKi9MQ19NRVNTQUdFUy8qLm1vKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAicyxQT1QtQ3JlYXRpb24tRGF0ZTogLi4uLi0uLi0uLiAuLjouLisuLi4uLFBPVC1DcmVhdGlvbi1EYXRlOiAxOTcwLTAxLTAxIDAwOjAwKzAwMDAsIiAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL2RvYy9wYWNrYWdlcy8qLyouaHRtbHxcCisrICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi5odG1sfC91c3Ivc2hhcmUvZG9jLyovaHRtbC8qLmh0bWwpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyB0ZXhpMmh0bWwgb3V0cHV0LCBlLmcuIGluIGt2bSwgaW5kZW50LCBxZW11CisrCSBzZWQgLWkgLWUgInN8XjwhLS0gQ3JlYXRlZCBvbiAuKiwgMjAuLiBieSB0ZXhpMmh0bWwgLlwuLi58PCEtLSBDcmVhdGVkIG9uIEF1Z3VzdCA3LCAyMDA5IGJ5IHRleGkyaHRtbCAxLjgyfCIgJGYKKysJIHNlZCAtaSAtZSAnc3xeICpUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT4uKiwgMjAuLjwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIC5cLi4uPC9lbT48L2E+LiR8ICBUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT5BdWd1c3QgNywgMjAwOTwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIDEuODI8L2VtPjwvYT4ufCcgJGYKKysJICMgZG94eWdlbiBkb2N1LCBlLmcuIGluIGxpYnNzaCBhbmQgbG9nNGMKKysJIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAyMFswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorKwkgIyBHZW5lcmF0ZWQgb24gU2F0IEF1ZyAxNCAyMDEwIDE2OjQ5OjQ4IGZvciBsaWJzc2gKKysJIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogMjBbMC05XVswLTldIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLmh0bWwgfFwKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLyouaHRtbHwvdXNyL3NoYXJlL2phdmFkb2MvKi8qLyouaHRtbCkKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICAjIFRoZXJlIGFyZSBtb3JlIHRpbWVzdGFtcHMgaW4gaHRtbCwgc28gZmFyIHdlIGhhbmRsZSBvbmx5IHNvbWUgcHJpbWl0aXZlIHZlcnNpb25zLgorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICMgSmF2YWRvYzoKKysgICAgICAgICAgIyA8aGVhZD4KKysgICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jICh2ZXJzaW9uIDEuNy4wXzc1KSBvbiBUdWUgRmViIDAzIDAyOjIwOjEyIEdNVCAyMDE1IC0tPgorKyAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVHVlIEZlYiAwMyAwMDowMjo0OCBHTVQgMjAxNSAtLT4KKysgICAgICAgICAgIyA8bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDE1LTAyLTAzIj4KKysgICAgICAgICAgIyA8L2hlYWQ+CisrICAgICAgICAgIHNlZCAtaSAtZSAnCisrICAgICAgICAgICAgL148aGVhZD4veworKyAgICAgICAgICAgICAgOiBuZXh0CisrICAgICAgICAgICAgICBuCisrICAgICAgICAgICAgICAvXjxcL2hlYWQ+L3sKKysgICAgICAgICAgICAgICAgYiBlbmRfaGVhZAorKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXCgoXChidWlsZFx8dmVyc2lvblwpIFswLTkuX11cKykgb24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcNS8KKysgICAgICAgICAgICAgIHQgbmV4dAorKyAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXChvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFwzLworKyAgICAgICAgICAgICAgdCBuZXh0CisrICAgICAgICAgICAgICBzL148bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJbMC05XVx7NFx9LVswLTldXHsyXH0tWzAtOV1cezJcfSI+LzxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9InNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUiPi8KKysgICAgICAgICAgICAgIGIgbmV4dAorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICA6IGVuZF9oZWFkCisrICAgICAgICAgICcgJGYKKysgICAgICAgICAjIEdqZG9jIEh0bWxEb2NsZXQ6CisrCSBzZWQgLWkgLWUgJ3MlR2VuZXJhdGVkIGJ5IEdqZG9jIEh0bWxEb2NsZXQgWzAtOSwuXSosIHBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9jcC10b29scy8iIHRpdGxlPSIiIHRhcmdldD0iX3RvcCI+R05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIC4qLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC4lR2VuZXJhdGVkIGJ5IEdqZG9jLiUnICRmCisrCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwoLipcKUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBbQS1aXVthLXpdKiBbMC05XSosIDIwPz8gWzAtOV0qOj8/Oj8/IFwoYXxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXDFHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gSmFudWFyeSAxLCAyMDA5IDA6MDA6MDAgYS5tLiBHTVQuPC9wPiUnICRmCisrCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXCguKkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+XCksIG9uIFthLXpBLVpdKiBbMC05XVswLTldLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwxLG9uIE1heSAxLCAyMDEwIDE6MTE6NDIgcC5tLiBHTVQuPC9wPiUnICRmCisrCSAjIGRlcHJlY2F0ZWQtbGlzdCBpcyByYW5kb21seSBvcmRlcmVkLCBzb3J0IGl0IGZvciBjb21wYXJpc29uCisrCSBjYXNlICRmIGluCisrCSAgICovZGVwcmVjYXRlZC1saXN0Lmh0bWwpCisrCSAgICAgc29ydCAtbyAkZiAkZgorKwkgICAgIDs7CisrCSBlc2FjCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy9namRvYy5wcm9wZXJ0aWVzIHxcCisrICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi9namRvYy5wcm9wZXJ0aWVzKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKwkgc2VkIC1pIC1lICdzfF4jW0EtWl1bYS16XVx7Mlx9IFtBLVpdW2Etel1cezJcfSBbMC05XVx7Mlx9IC4uOi4uOi4uIEdNVCAyMC4uJHwjRnJpIEphbiAwMSAxMToyNzozNiBHTVQgMjAwOXwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgICovZm9udHMuc2NhbGV8Ki9mb250cy5kaXJ8Ki9lbmNvZGluZ3MuZGlyKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICMgc29ydCBmaWxlcyBiZWZvcmUgY29tcGFyaW5nCisrICAgICAgICAgc29ydCAtbyAkZiAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdmFyL2FkbS9wZXJsLW1vZHVsZXMvKikKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICBzZWQgLWkgLWUgJ3N8Xj1oZWFkMiAuLi4gLi4uIC4uIC4uOi4uOi4uIC4uLi46IEM8TW9kdWxlPnw9aGVhZDIgV2VkIEp1bCAgMSAwMDowMDowMCAyMDA5OiBDPE1vZHVsZT58JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL21hbi9tYW4zLyozcG0pCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICdzfCAzICIyMC4uLS4uLS4uIiAicGVybCB2NS4uLi4uIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iJHwgMyAiMjAwOS0wMS0wMSIgInBlcmwgdjUuMTAuMCIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uInwnICRmCisrICAgICAgICAgdHJpbV9tYW5fVEggJGYKKysgICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvbWFuLyovbWFuKnwvdXNyL3NoYXJlL21hbi9tYW4qfC91c3IvbGliL3RleG1mL2RvYy9tYW4vKi8qKQorKworKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHRyaW1fbWFuX1RIICRmCisrICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorKyAgICAgICAgICMgZ2VuZXJhdGVkIGJ5IGRvY2Jvb2sgeG1sOgorKyAgICAgICAgICMuXCIgICAgICBEYXRlOiAwOS8xMy8yMDEwCisrICAgICAgICAgc2VkIC1pIC1lICdzfERhdGU6IFswLTFdWzAtOV0vWzAtOV1bMC05XS8yMDFbMC05XXxEYXRlOiAwOS8xMy8yMDEwfCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgKi5lbGMpCisrICAgICAgICMgZW1hY3MgbGlzcCBmaWxlcworKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAnc3xDb21waWxlZCBieSBhYnVpbGRALiogb24gLi4uIC4uLiAuLiAuLjouLjouLiAyMC4uJHxjb21waWxlZCBieSBhYnVpbGRAYnVpbGRob3N0IG9uIFdlZCBKdWwgMDEgMDA6MDA6MDAgMjAwOXwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC92YXIvbGliL3RleG1mL3dlYjJjLyovKmZtdCB8XAorKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YWZvbnQvKi5iYXNlfFwKKysgICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFwb3N0LyoubWVtKQorKyAgICAgICAjIGJpbmFyeSBkdW1wIG9mIFRlWCBhbmQgTWV0YWZvbnQgZm9ybWF0cywgd2UgY2FuIGlnbm9yZSB0aGVtIGZvciBnb29kCisrICAgICAgIGVjaG8gImRpZmZlcmVuY2UgaW4gJGZpbGUgaWdub3JlZC4iCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICAqL2xpYnRvb2wpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSAgc2VkIC1pIC1lICdzfF4jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBbQS1aYS16MC05XSo6JHwjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCB4NDI6fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL2V0Yy9tYWlsLypjZnwvZXRjL3NlbmRtYWlsLmNmKQorKyAgICAgICAjIGZyb20gc2VuZG1haWwgcGFja2FnZQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKwkgICMgLSAjIyMjIyBidWlsdCBieSBhYnVpbGRAYnVpbGQzMyBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTAKKysJICBzZWQgLWkgLWUgJ3N8YnVpbHQgYnkgYWJ1aWxkQFthLXowLTldKiBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIC4qIDIwWzAtOV1bMC05XXxidWlsdCBieSBhYnVpbGRAYnVpbGQ0MiBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTB8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovaW5kZXguY2FjaGV8L3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyovaW5kZXguY2FjaGV8XAorKyAgICAgL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmh0bWx8L3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmRldmhlbHAyKQorKyAgICAgICAjIHZhcmlvdXMga2RlIGFuZCBndGsgcGFja2FnZXMKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICA7OworKyAgICAqL2NyZWF0ZWQucmlkKQorKyAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorKyAgICAgICAjIGZpbGUganVzdCBjb250YWlucyBhIHRpbWVzdGFtcCBhbmQgbm90aGluZyBlbHNlLCBzbyBpZ25vcmUgaXQKKysgICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorKyAgICAgICByZXR1cm4gMAorKyAgICAgICA7OworKyAgICAqL3Jkb2MvZmlsZXMvKi5odG1sKQorKyAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorKyAgICAgICAjIDx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4KKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICAgc2VkIC1pIC1lICdzJTx0ZD5bQS1aXVthLXpdW2Etel0gW0EtWl1bYS16XVthLXpdIFswLTldXCsgWzAtOV1cKzpbMC05XVwrOlswLTldXCsgKzAwMDAgMjAxWzAtOV08L3RkPiU8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+JWcnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICA7OworKyAgICAqL0xpbnV4KkVudi5TZXQuc2gpCisrICAgICAgICMgTGlicmVPZmZpY2UgZmlsZXMsIGNvbnRhaW5zOgorKyAgICAgICAjIEdlbmVyYXRlZCBvbjogTW9uIEFwciAxOCAxMzoxOToyMiBVVEMgMjAxMQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKwkgc2VkIC1pIC1lICdzJV4jIEdlbmVyYXRlZCBvbjouKlVUQyAyMDFbMC05XSAqJCUjIEdlbmVyYXRlZCBvbjogU29tZXRpbWUlZycgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAvdXNyL2xpYi9saWJyZW9mZmljZS9zb2x2ZXIvaW5jLyovZGVsaXZlci5sb2cpCisrICAgICAgICMgTGlicmVPZmZpY2UgbG9nIGZpbGUKKysgICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCisrICAgICAgcmV0dXJuIDAKKysgICAgICA7OworKyAgICAvdmFyL2FkbS91cGRhdGUtbWVzc2FnZXMvKnwvdmFyL2FkbS91cGRhdGUtc2NyaXB0cy8qKQorKyAgICAgICMgZW5jb2RlIHZlcnNpb24tcmVsZWFzZSBpbnNpZGUKKysgICAgICBvbGRmbj1gZWNobyAiJGZpbGUifHNlZCAtZSBzLy0kcmVsZWFzZTIvLSRyZWxlYXNlMS87YAorKworKyAgICAgICMgZmV0Y2htc3R0Zm9udHMgZW1iZWRzIHRoZSByZWxlYXNlIG51bWJlciBpbiB0aGUgdXBkYXRlIHNoZWxsIHNjcmlwdC4KKysgICAgICBlY2hvIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorKyAgICAgIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorKworKyAgICAgIGlmICEgZGlmZiAtdSBvbGQvJG9sZGZuIG5ldy8kZmlsZTsgdGhlbgorKyAgICAgICAgICAgZWNobyAiJG9sZGZuIGlzIG5vdCBzYW1lIGFzICRmaWxlIgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICBmaQorKyAgICAgIGVjaG8gIiRmaWxlIGFuZCAkb2xkZm4gYXJlIHNhbWUiCisrICAgICAgcmV0dXJuIDAKKysgICAgICA7OworKyAgICAqLnBzKQorKyAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworKyAgICAgICAgc2VkIC1pIC1lICcKKysgICAgICAgICAgL14lJUNyZWF0aW9uRGF0ZTpbWzpibGFuazpdXS9kCisrICAgICAgICAgIC9eJSVDcmVhdG9yOltbOmJsYW5rOl1dZ3JvZmZbWzpibGFuazpdXXZlcnNpb25bWzpibGFuazpdXS9kCisrICAgICAgICAgIC9eJURWSVBTU291cmNlOltbOmJsYW5rOl1dL2QKKysgICAgICAgICcgIiRmIgorKyAgICAgIGRvbmUKKysgICAgOzsKKysgICAgKnBkZikKKysgICAgICAjIFBERiBmaWxlcyBjb250YWluIGEgdW5pcXVlIElELCByZW1vdmUgaXQKKysgICAgICAjIEZvcm1hdCBvZiB0aGUgSUQgaXM6CisrICAgICAgIyAvSUQgWzw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD4gPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPl0KKysgICAgICAjIHdpdGggb3B0aW9uYWwgc3BhY2VzLiBwZGZ0ZXggY3JlYXRlcyBhbHNvOgorKyAgICAgICMgL0NyZWF0aW9uRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCisrICAgICAgIyAvTW9kRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCisrICAgICAgIyBhbmQgcG9zc2libHkgWE1MIG1ldGFkYXRhIGFzIHdlbGwKKysgICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKysgICAgICAgIHNlZCAtaSBcCisrICAgICAgICAgICAgJy9vYmovLC9lbmRvYmoveworKyAgICAgICAgICAgICAgIHMlL0lEIFw/XFsgXD88W14+XVwrPiBcPzxbXj5dXCs+IFw/XF0lL0lEcmFuZG9tJWc7CisrICAgICAgICAgICAgICAgcyUvQ3JlYXRpb25EYXRlIFw/KEQ6W14pXSopJS9DcmVhdGlvbkRhdGUgKEQ6IFhYWCklZzsKKysgICAgICAgICAgICAgICBzJS9Nb2REYXRlIFw/KEQ6W14pXSopJS9Nb2REYXRlIChEOiBYWFgpJWc7CisrICAgICAgICAgICAgICAgcyU8cGRmOkNyZWF0aW9uRGF0ZT5bXjxdKjwvcGRmOkNyZWF0aW9uRGF0ZT4lPHBkZjpDcmVhdGlvbkRhdGU+WFhYPC9wZGY6Q3JlYXRpb25EYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHBkZjpNb2REYXRlPltePF0qPC9wZGY6TW9kRGF0ZT4lPHBkZjpNb2REYXRlPlhYWDwvcGRmOk1vZERhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8eGFwOkNyZWF0ZURhdGU+W148XSo8L3hhcDpDcmVhdGVEYXRlPiU8eGFwOkNyZWF0ZURhdGU+WFhYPC94YXA6Q3JlYXRlRGF0ZT4lZzsKKysgICAgICAgICAgICAgICBzJTx4YXA6TW9kaWZ5RGF0ZT5bXjxdKjwveGFwOk1vZGlmeURhdGU+JTx4YXA6TW9kaWZ5RGF0ZT5YWFg8L3hhcDpNb2RpZnlEYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHhhcDpNZXRhZGF0YURhdGU+W148XSo8L3hhcDpNZXRhZGF0YURhdGU+JTx4YXA6TWV0YWRhdGFEYXRlPlhYWDwveGFwOk1ldGFkYXRhRGF0ZT4lZzsKKysgICAgICAgICAgICB9JyAiJGYiCisrICAgICAgZG9uZQorKyAgICAgIDs7CisrICBlc2FjCisrCisrICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCisrICBjYXNlICRmdHlwZSBpbgorKyAgICAgUEUzMlwgZXhlY3V0YWJsZSpNb25vXC9cLk5ldFwgYXNzZW1ibHkqKQorKyAgICAgICBlY2hvICJQRTMyIE1vbm8vLk5ldCBhc3NlbWJseTogJGZpbGUiCisrICAgICAgIGlmIFsgLXggL3Vzci9iaW4vbW9ub2RpcyBdIDsgdGhlbgorKyAgICAgICAgIG1vbm9kaXMgb2xkLyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUxfQorKyAgICAgICAgIG1vbm9kaXMgbmV3LyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUyfQorKyAgICAgICAgIGlmICEgY21wIC1zICR7ZmlsZTF9ICR7ZmlsZTJ9OyB0aGVuCisrICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKyAgICAgICAgICAgZGlmZiAtdSAke2ZpbGUxfSAke2ZpbGUyfQorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICBmaQorKyAgICAgICBlbHNlCisrICAgICAgICAgZWNobyAiQ2Fubm90IGNvbXBhcmUsIG5vIG1vbm9kaXMgaW5zdGFsbGVkIgorKyAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgIEVMRipleGVjdXRhYmxlKnxFTEYqW0xNXVNCXCBzaGFyZWRcIG9iamVjdCopCisrICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG9sZC8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTEKKysgICAgICAgaWYgISB0ZXN0IC1zICRmaWxlMTsgdGhlbgorKyAgICAgICAgICMgb2JqZHVtcCBoYXMgbm8gaWRlYSBob3cgdG8gaGFuZGxlIGl0CisrICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgZmkKKysgICAgICAgZmkgICAgICAgCisrICAgICAgIGVsZmRpZmY9CisrICAgICAgIHNlZCAtaSAtZSAicyxvbGQvLCwiICRmaWxlMQorKyAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBuZXcvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUyCisrICAgICAgIHNlZCAtaSAtZSAicyxuZXcvLCwiICRmaWxlMgorKyAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorKyAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIGFzc2VtYmxlciBvdXRwdXQiCisrICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorKyAgICAgICAgICBlbGZkaWZmPSIxIgorKyAgICAgICBmaQorKyAgICAgICBlY2hvICIiID4kZmlsZTEKKysgICAgICAgZWNobyAiIiA+JGZpbGUyCisrICAgICAgICMgRG9uJ3QgY29tcGFyZSAuYnVpbGQtaWQgYW5kIC5nbnVfZGVidWdsaW5rIHNlY3Rpb25zCisrICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgfCB0ciAiXG4iICIgIikiCisrICAgICAgIGZvciBzZWN0aW9uIGluICRzZWN0aW9uczsgZG8KKysgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBvbGQvJGZpbGUgfCBzZWQgInMsXm9sZC8sLCIgPiAkZmlsZTEKKysgICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBuZXcvJGZpbGUgfCBzZWQgInMsXm5ldy8sLCIgPiAkZmlsZTIKKysgICAgICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKysgICAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBFTEYgc2VjdGlvbiAkc2VjdGlvbiIKKysgICAgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCisrICAgICAgICAgICAgIGVsZmRpZmY9IjEiCisrICAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgaWYgdGVzdCAteiAiJGVsZmRpZmYiOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlOiBvbmx5IGRpZmZlcmVuY2Ugd2FzIGluIGJ1aWxkLWlkIG9yIGdudV9kZWJ1Z2xpbmssIEdPT0QuIgorKyAgICAgICAgICByZXR1cm4gMAorKyAgICAgICBmaQorKyAgICAgICByZXR1cm4gMQorKyAgICAgICA7OworKyAgICAgKkFTQ0lJKnwqdGV4dCopCisrICAgICAgIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKysgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKyAgICAgICAgIGRpZmYgLXUgb2xkLyRmaWxlIG5ldy8kZmlsZSB8IGhlYWQgLW4gMjAwCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIGRpcmVjdG9yeXxzZXR1aWQsXCBkaXJlY3Rvcnl8c3RpY2t5LFwgZGlyZWN0b3J5KQorKyAgICAgICAjIHRhciBtaWdodCBwYWNrYWdlIGRpcmVjdG9yaWVzIC0gaWdub3JlIHRoZW0gaGVyZQorKyAgICAgICByZXR1cm4gMAorKyAgICAgICA7OworKyAgICAgYnppcDJcIGNvbXByZXNzZWRcIGRhdGEqKQorKyAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJiejIiOyB0aGVuCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgZ3ppcFwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImd6aXAiOyB0aGVuCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgWFpcIGNvbXByZXNzZWRcIGRhdGEqKQorKyAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJ4eiI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorKyAgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBjcGlvXCBhcmNoaXZlKQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorKyAgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgIGZpCisrICAgICA7OworKyAgICAgc3ltYm9saWNcIGxpbmtcIHRvXCAqKQorKyAgICAgICByZWFkbGluayAib2xkLyRmaWxlIiA+ICRmaWxlMQorKyAgICAgICByZWFkbGluayAibmV3LyRmaWxlIiA+ICRmaWxlMgorKyAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMjsgdGhlbgorKyAgICAgICAgIGVjaG8gInN5bWxpbmsgdGFyZ2V0IGZvciAkZmlsZSBkaWZmZXJzIgorKyAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICAqKQorKyAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworKyAgcmV0dXJuIDAKKyt9CisrCisrIyBXZSBuZWVkIC9wcm9jIG1vdW50ZWQgZm9yIHNvbWUgdGVzdHMsIHNvIGNoZWNrIHRoYXQgaXQncyBtb3VudGVkIGFuZAorKyMgY29tcGxhaW4gaWYgbm90LgorK1BST0NfTU9VTlRFRD0wCisraWYgWyAhIC1kIC9wcm9jL3NlbGYvIF07IHRoZW4KKysgIGVjaG8gIi9wcm9jIGlzIG5vdCBtb3VudGVkIgorKyAgbW91bnQgLW9ydyAtbiAtdHByb2Mgbm9uZSAvcHJvYworKyAgUFJPQ19NT1VOVEVEPTEKKytmaQorKworKyMgcHJlc2VydmUgY21wX3NwZWMgcmVzdWx0IGZvciBjaGVja19hbGwgcnVucworK3JldD0kUkVTCisrZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworKyAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZpbGU7IHRoZW4KKysgICAgICAgcmV0PTEKKysgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgIGJyZWFrCisrICAgICAgIGZpCisrICAgZmkKKytkb25lCisrCisraWYgWyAiJFBST0NfTU9VTlRFRCIgLWVxICIxIiBdOyB0aGVuCisrICBlY2hvICJVbm1vdW50aW5nIHByb2MiCisrICB1bW91bnQgL3Byb2MKKytmaQorKworK3JtICRmaWxlMSAkZmlsZTIgJGRmaWxlICRyZW5hbWVfc2NyaXB0Cisrcm0gLXJmICRkaXIKKytpZiB0ZXN0ICIkcmV0IiA9IDA7IHRoZW4KKysgICAgIGVjaG8gIlBhY2thZ2UgY29udGVudCBpcyBpZGVudGljYWwiCisrZmkKKytleGl0ICRyZXQKKysjIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9ycG0tY2hlY2suc2ggYi9ycG0tY2hlY2suc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggZGQ0NzY0Mi4uMDAwMDAwMAorLS0tIGEvcnBtLWNoZWNrLnNoCisrKysgL2Rldi9udWxsCitAQCAtMSw3NjQgKzAsMCBAQAorLSMhIC9iaW4vYmFzaAorLSMKKy0jIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBTVVNFIExpbnV4IFByb2R1Y3QgR21iSCwgR2VybWFueS4KKy0jIExpY2Vuc2VkIHVuZGVyIEdQTCB2Miwgc2VlIENPUFlJTkcgZmlsZSBmb3IgZGV0YWlscy4KKy0jCistIyBXcml0dGVuIGJ5IE1pY2hhZWwgTWF0eiBhbmQgU3RlcGhhbiBDb29sbworLSMgRW5oYW5jZWQgYnkgQW5kcmVhcyBKYWVnZXIKKy0KKy1GVU5DVElPTlM9JHswJS8qfS9mdW5jdGlvbnMuc2gKKy0KKy1jaGVja19hbGw9CistY2FzZSAkMSBpbgorLSAgLWEgfCAtLWNoZWNrLWFsbCkKKy0gICAgY2hlY2tfYWxsPTEKKy0gICAgc2hpZnQKKy1lc2FjCistCistaWYgdGVzdCAiJCMiICE9IDI7IHRoZW4KKy0gICBlY2hvICJ1c2FnZTogJDAgWy1hfC0tY2hlY2stYWxsXSBvbGQucnBtIG5ldy5ycG0iCistICAgZXhpdCAxCistZmkKKy0KKy1zZWxmX3NjcmlwdD0kKGNkICQoZGlybmFtZSAkMCk7IGVjaG8gJChwd2QpLyQoYmFzZW5hbWUgJDApKQorLQorLXNvdXJjZSAkRlVOQ1RJT05TCistCistb2xkcGtnPWByZWFkbGluayAtZiAkMWAKKy1uZXdwa2c9YHJlYWRsaW5rIC1mICQyYAorLXJlbmFtZV9zY3JpcHQ9YG1rdGVtcGAKKy0KKy1pZiB0ZXN0ICEgLWYgIiRvbGRwa2ciOyB0aGVuCistICAgIGVjaG8gImNhbid0IG9wZW4gJDEiCistICAgIGV4aXQgMQorLWZpCistCistaWYgdGVzdCAhIC1mICIkbmV3cGtnIjsgdGhlbgorLSAgICBlY2hvICJjYW4ndCBvcGVuICQyIgorLSAgICBleGl0IDEKKy1maQorLQorLSN1c2FnZSB1bmphciA8ZmlsZT4KKy1mdW5jdGlvbiB1bmphcigpCisteworLSAgICBsb2NhbCBmaWxlCistICAgIGZpbGU9JDEKKy0KKy0gICAgaWYgW1sgJCh0eXBlIC1wIGZhc3RqYXIpIF1dOyB0aGVuCistICAgICAgICBVTkpBUj1mYXN0amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWphcgorLSAgICBlbGlmIFtbICQodHlwZSAtcCB1bnppcCkgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPXVuemlwCistICAgIGVsc2UKKy0gICAgICAgIGVjaG8gIkVSUk9SOiBqYXIsIGZhc3RqYXIsIG9yIHVuemlwIGlzIG5vdCBpbnN0YWxsZWQgKHRyeWluZyBmaWxlICRmaWxlKSIKKy0gICAgICAgIGV4aXQgMQorLSAgICBmaQorLQorLSAgICBjYXNlICRVTkpBUiBpbgorLSAgICAgICAgamFyfGZhc3RqYXIpCistICAgICAgICAjIGVjaG8gamFyIC14ZiAkZmlsZQorLSAgICAgICAgJHtVTkpBUn0gLXhmICRmaWxlCistICAgICAgICA7OworLSAgICAgICAgdW56aXApCistICAgICAgICB1bnppcCAtb3FxICRmaWxlCistICAgICAgICA7OworLSAgICBlc2FjCistfQorLQorLSMgbGlzdCBmaWxlcyBpbiBkaXJlY3RvcnkKKy0jdXNhZ2UgdW5qYXJfbCA8ZmlsZT4KKy1mdW5jdGlvbiB1bmphcl9sKCkKKy17CistICAgIGxvY2FsIGZpbGUKKy0gICAgZmlsZT0kMQorLQorLSAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWZhc3RqYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9dW56aXAKKy0gICAgZWxzZQorLSAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorLSAgICAgICAgZXhpdCAxCistICAgIGZpCistCistICAgIGNhc2UgJFVOSkFSIGluCistICAgICAgICBqYXJ8ZmFzdGphcikKKy0gICAgICAgICR7VU5KQVJ9IC10ZiAkZmlsZQorLSAgICAgICAgOzsKKy0gICAgICAgIHVuemlwKQorLSAgICAgICAgdW56aXAgLWwgJGZpbGUKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy19CistCistZmlsdGVyX2Rpc2FzbSgpCisteworLSAgIHNlZCAtZSAncy9eICpbMC05YS1mXVwrOi8vJyAtZSAncy9cJDB4WzAtOWEtZl1cKy8kc29tZXRoaW5nLycgLWUgJ3MvY2FsbHEgKlswLTlhLWZdXCsvY2FsbHEgLycgLWUgJ3MvIyAqWzAtOWEtZl1cKy8jICAvJyAtZSAncy9cKDB4XClcP1swLTlhLWZdXCsoL29mZnNldCgvJyAtZSAncy9bMC05YS1mXVwrIDwvPC8nIC1lICdzL148XCguKlwpPjovXDE6LycgLWUgJ3MvPFwoLipcKSsweFswLTlhLWZdXCs+LzxcMSArIG9mcz4vJyAKKy19CistCistZWNobyAiQ29tcGFyaW5nIGBiYXNlbmFtZSAkb2xkcGtnYCB0byBgYmFzZW5hbWUgJG5ld3BrZ2AiCistCistY2FzZSAkb2xkcGtnIGluCistICAqLnJwbSkKKy0gICAgIGNtcF9zcGVjICRyZW5hbWVfc2NyaXB0ICRvbGRwa2cgJG5ld3BrZworLSAgICAgUkVTPSQ/CistICAgICBjYXNlICRSRVMgaW4KKy0gICAgICAgMCkKKy0gICAgICAgICAgZWNobyAiUlBNIG1ldGEgaW5mb3JtYXRpb24gaXMgaWRlbnRpY2FsIgorLSAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBleGl0IDAKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgMSkKKy0gICAgICAgICAgZWNobyAiUlBNIG1ldGEgaW5mb3JtYXRpb24gaXMgZGlmZmVyZW50IgorLSAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBleGl0IDEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgMikKKy0gICAgICAgICAgZWNobyAiUlBNIGZpbGUgY2hlY2tzdW0gZGlmZmVycy4iCistICAgICAgICAgIFJFUz0wCistICAgICAgICAgIDs7CistICAgICAgICopCistICAgICAgICAgIGVjaG8gIldyb25nIGV4aXQgY29kZSEiCistICAgICAgICAgIGV4aXQgMQorLSAgICAgICAgICA7OworLSAgICAgZXNhYworLSAgICAgOzsKKy1lc2FjCistCistZmlsZTE9YG1rdGVtcGAKKy1maWxlMj1gbWt0ZW1wYAorLQorLWRpcj1gbWt0ZW1wIC1kYAorLWVjaG8gIkV4dHJhY3RpbmcgcGFja2FnZXMiCistdW5wYWNrYWdlICRvbGRwa2cgJGRpci9vbGQKKy11bnBhY2thZ2UgJG5ld3BrZyAkZGlyL25ldworLQorLSMgZmlsZXMgaXMgc2V0IGluIGNtcF9zcGVjIGZvciBycG1zLCBzbyBpZiBSRVMgaXMgZW1wdHkgd2Ugc2hvdWxkIGFzc3VtZQorLSMgaXQgd2Fzbid0IGFuIHJwbSBhbmQgcGljayBhbGwgZmlsZXMgZm9yIGNvbXBhcmlzb24uCistaWYgWyAteiAkUkVTIF07IHRoZW4KKy0gICAgb2xkZmlsZXM9YGNkICRkaXIvb2xkOyBmaW5kIC4gLXR5cGUgZmAKKy0gICAgbmV3ZmlsZXM9YGNkICRkaXIvbmV3OyBmaW5kIC4gLXR5cGUgZmAKKy0KKy0gICAgZmlsZXM9YGVjaG8gLWUgIiRvbGRmaWxlc1xuJG5ld2ZpbGVzIiB8IHNvcnQgLXVgCistZmkKKy0KKy1jZCAkZGlyCistYmFzaCAkcmVuYW1lX3NjcmlwdAorLQorLWRmaWxlPWBta3RlbXBgCistCistZGlmZl90d29fZmlsZXMoKQorLXsKKy0gIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKy0gICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCistICAgICBoZXhkdW1wIC1DIG9sZC8kZmlsZSA+ICRmaWxlMQorLSAgICAgaGV4ZHVtcCAtQyBuZXcvJGZpbGUgPiAkZmlsZTIKKy0gICAgIGRpZmYgLXUgJGZpbGUxICRmaWxlMiB8IGhlYWQgLW4gMjAwCistICAgICByZXR1cm4gMQorLSAgZmkKKy0gIHJldHVybiAwCistfQorLQorLXRyaW1fbWFuX2ZpcnN0X2xpbmUoKQorLXsKKy0gICAgIyBIYW5kbGVzIHRoZSBmaXJzdCBsaW5lIGlmIGl0IGlzIGxpa2U6CistICAgICMuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yOCAoUG9kOjpTaW1wbGUgMy4yOCkKKy0gICAgIy5cIiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSEgIEl0IHdhcyBnZW5lcmF0ZWQgYnkgaGVscDJtYW4gMS40My4zLgorLSAgICBsb2NhbCBmPSQxCistICAgIHNlZCAtaSAtZSAnMXsKKy0gICAgc3xeXC5cXCJbWzpibGFuazpdXVwrQXV0b21hdGljYWxseVtbOmJsYW5rOl1dZ2VuZXJhdGVkW1s6Ymxhbms6XV1ieVtbOmJsYW5rOl1dUG9kOjpNYW5bWzpibGFuazpdXS4qfC5cXCIgT3Zlcmx5IHZlcmJvc2UgUG9kOjpNYW58CistICAgIHN8XlwuXFwiW1s6Ymxhbms6XV1cK0RPW1s6Ymxhbms6XV1OT1RbWzpibGFuazpdXU1PRElGWVtbOmJsYW5rOl1dVEhJU1tbOmJsYW5rOl1dRklMRSFbWzpibGFuazpdXVwrSXRbWzpibGFuazpdXXdhc1tbOmJsYW5rOl1dZ2VuZXJhdGVkW1s6Ymxhbms6XV1ieVtbOmJsYW5rOl1daGVscDJtYW5bWzpibGFuazpdXS4qfC5cXCIgT3Zlcmx5IHZlcmJvc2UgaGVscDJtYW58CistICAgIH0nICRmCistfQorLQorLXRyaW1fbWFuX1RIKCkKKy17CistICAgICMgSGFuZGxlcyBsaW5lcyBsaWtlOgorLSAgICAjIC5USCBkZWJoZWxwZXIgNyAiMjAxMC0wMi0yNyIgIjcuNC4xNSIgIkRlYmhlbHBlciIKKy0gICAgIyAuVEggRElSTU5HUi1DTElFTlQgMSAyMDEwLTAyLTI3ICJEaXJtbmdyIDEuMC4zIiAiR05VIFByaXZhY3kgR3VhcmQiCistICAgICMgLlRIIGNjbWFrZSAxICJNYXJjaCAwNiwgMjAxMCIgImNjbWFrZSAyLjguMS1yYzMiCistICAgICMgLlRIIFFFTVUtSU1HIDEgIjIwMTAtMDMtMTQiICIgIiAiICIKKy0gICAgIyAuVEgga2RlY21ha2UgMSAiTWF5IDA3LCAyMDEwIiAiY21ha2UgMi44LjEiCistICAgICMgLlRIICJhcHBlbmRlci5oIiAzICIxMiBNYXkgMjAxMCIgIlZlcnNpb24gMS4yLjEiICJsb2c0YyIgXCIgLSotIG5yb2ZmIC0qLQorLSAgICAjIC5USOKAgiJhcHBlbmRlci5oIuKAgjPigIIiVHVl4oCCQXVn4oCCMzHigIIyMDEwIuKAgiJWZXJzaW9u4oCCMS4yLjEi4oCCImxvZzRjIuKAglwi4oCCLSot4oCCbnJvZmbigIItKi0KKy0gICAgIyAuVEggIk9GRkxJTkVJTUFQIiAiMSIgIjExIE1heSAyMDEwIiAiSm9obiBHb2VyemVuIiAiT2ZmbGluZUlNQVAgTWFudWFsIgorLSAgICAjIC5USCBndiAzZ3VpbGUgIjEzIE1heSAyMDEwIgorLSAgICAjLlRIICJHSVRcLUFSQ0hJTVBPUlQiICIxIiAiMDkvMTMvMjAxMCIgIkdpdCAxXCYuN1wmLjEiICJHaXQgTWFudWFsIgorLSAgICAjIC5USCBMRElSRUNUT1JEIDggIjIwMTAtMTAtMjAiICJwZXJsIHY1LjEyLjIiICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIKKy0gICAgIyAuVEggY2NtYWtlIDEgIkZlYnJ1YXJ5IDA1LCAyMDEyIiAiY2NtYWtlIDIuOC43IgorLSAgICAjIC5USOKAgiJhcHBlbmRlci5oIuKAgjPigIIiVHVl4oCCQXVn4oCCMzHigIIyMDEwIuKAgiJWZXJzaW9u4oCCMS4yLjEi4oCCImxvZzRjIuKAglwi4oCCLSot4oCCbnJvZmbigIItKi0KKy0gICAgIyAuVEggQVJDSCAiMSIgIlNlcHRlbWJlciAyMDEwIiAiR05VIGNvcmV1dGlscyA4LjUiICJVc2VyIENvbW1hbmRzIgorLSAgICAjIC5USCAiR0NNLUNBTElCUkFURSIgIjEiICIwMyBGZWJydWFyeSAyMDEyIiAiIiAiIgorLSAgICAjLlRIIExvY2FsZTo6UG80YTo6WG1sLnBtIDNwbSAiMjAxNS0wMS0zMCIgIlBvNGEgVG9vbHMiICJQbzRhIFRvb2xzIgorLSAgICBsb2NhbCBmPSQxCistICAgICMgKC5USCAgIHF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cKyJbXiJdXCsiW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXCgiW14iXVwrIlwpXChbWzpibGFuazpdXVwrLipcKVw/fFwxICJxcTIwMDAtMDEtMDEiXDN8JyAkZgorLSAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCtbXiJdW15bOmJsYW5rOl1dXCtbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInVxMjAwMC0wMi0wMiJcM3wnICRmCistICAgICMgKC5USCAgIHF1b3RlZCBzZWN0aW9uKSAodW5xdW90ZWRfZGF0ZSkoKikKKy0gICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKFteIl1bXls6Ymxhbms6XV1cK1wpXChbWzpibGFuazpdXVwrLipcKVw/fFwxIHF1MjAwMC0wMy0wM1wzfCcgJGYKKy0gICAgIyAoLlRIIHVucXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCtbXiJdW15bOmJsYW5rOl1dXCtbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKFteIl1bXls6Ymxhbms6XV1cK1wpXChbWzpibGFuazpdXVwrLipcKVw/fFwxIHV1MjAwMC0wNC0wNFwzfCcgJGYKKy19CistCistc3RyaXBfbnVtYmVyZWRfYW5jaG9ycygpCisteworLSAgIyBSZW1vdmUgbnVtYmVyZWQgYW5jaG9ycyBvbiBEb2Nib29rIC8gSFRNTCBmaWxlcy4KKy0gICMgVGhpcyBzaG91bGQgYmUgc2F2ZSBzaW5jZSB3ZSByZW1vdmUgdGhlbSBmcm9tIG9sZCBhbmQgbmV3IGZpbGVzLgorLSAgIyBBIHRyYWlsaW5nIDwvYT4gb3IgPC9kaXY+IHRhZyB3aWxsIHN0YXkgYWxzbyBvbiBib3RoIGZpbGVzLgorLSAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgIHNlZCAtaSAtZSAncyU8WyBdKmFbIF1cK25hbWVbXjxdKlswLTldXCtbXjxdKiUlZycgXAorLSAgICAgLWUgJ3MlPFsgXSphWyBdXCtocmVmW148XSojW148XSpbMC05XVwrW148XSolJWcnIFwKKy0gICAgIC1lICdzJTxbXjxdKmlkPSJmdG5cLltePF0qWzAtOV1cK1tePF0qJSVnJyAkZgorLSAgZG9uZQorLX0KKy0KKy0KKy1jaGVja19jb21wcmVzc2VkX2ZpbGUoKQorLXsKKy0gIGxvY2FsIGZpbGU9JDEKKy0gIGxvY2FsIGV4dD0kMgorLSAgbG9jYWwgdG1wZGlyPWBta3RlbXAgLWRgCistICBsb2NhbCBmdHlwZQorLSAgbG9jYWwgcmV0PTAKKy0gIGVjaG8gIiRleHQgZmlsZSB3aXRoIG9kZCBmaWxlbmFtZTogJGZpbGUiCistICBpZiB0ZXN0IC1uICIkdG1wZGlyIjsgdGhlbgorLSAgICBta2RpciAkdG1wZGlyL3tvbGQsbmV3fQorLSAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBvbGQvJGZpbGUgJHRtcGRpci8KKy0gICAgY3AgLS1wYXJlbnRzIC0tZGVyZWZlcmVuY2UgbmV3LyRmaWxlICR0bXBkaXIvCistICAgIGlmIHB1c2hkICR0bXBkaXIgPiAvZGV2L251bGwgOyB0aGVuCistICAgICAgY2FzZSAiJGV4dCIgaW4KKy0gICAgICAgIGJ6MikKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuYnoyfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5iejJ9CistICAgICAgICAgIGJ6aXAyIC1kIG9sZC8kZmlsZS5iejIKKy0gICAgICAgICAgYnppcDIgLWQgbmV3LyRmaWxlLmJ6MgorLSAgICAgICAgICA7OworLSAgICAgICAgZ3ppcCkKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuZ3p9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmd6fQorLSAgICAgICAgICBnemlwIC1kIG9sZC8kZmlsZS5negorLSAgICAgICAgICBnemlwIC1kIG5ldy8kZmlsZS5negorLSAgICAgICAgICA7OworLSAgICAgICAgeHopCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLnh6fQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC54en0KKy0gICAgICAgICAgeHogLWQgb2xkLyRmaWxlLnh6CistICAgICAgICAgIHh6IC1kIG5ldy8kZmlsZS54egorLSAgICAgICAgICA7OworLSAgICAgIGVzYWMKKy0gICAgICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCistICAgICAgY2FzZSAkZnR5cGUgaW4KKy0gICAgICAgIFBPU0lYXCB0YXJcIGFyY2hpdmUpCistICAgICAgICAgIGVjaG8gIiRleHQgY29udGVudCBpczogJGZ0eXBlIgorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorLSAgICAgICAgICAgIHJldD0xCistICAgICAgICAgIGZpCistICAgICAgICAgIDs7CistICAgICAgICBBU0NJSVwgY3Bpb1wgYXJjaGl2ZVwgKikKKy0gICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLmNwaW99CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmNwaW99CistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS5jcGlvOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgICopCistICAgICAgICAgIGVjaG8gInVuaGFuZGxlZCAkZXh0IGNvbnRlbnQ6ICRmdHlwZSIKKy0gICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorLSAgICAgICAgICAgIHJldD0xCistICAgICAgICAgIGZpCistICAgICAgICAgIDs7CistICAgICAgZXNhYworLSAgICAgIHBvcGQgPiAvZGV2L251bGwKKy0gICAgZmkKKy0gICAgcm0gLXJmICIkdG1wZGlyIgorLSAgZmkKKy0gIHJldHVybiAkcmV0CistfQorLQorLWNoZWNrX3NpbmdsZV9maWxlKCkKKy17CistICBsb2NhbCBmaWxlPSIkMSIKKy0gIGNhc2UgJGZpbGUgaW4KKy0gICAgKi5zcGVjKQorLSAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMSxSZWxlYXNlOiBAUkVMRUFTRUAsIiBvbGQvJGZpbGUKKy0gICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTIsUmVsZWFzZTogQFJFTEVBU0VALCIgbmV3LyRmaWxlCistICAgICAgIDs7CistICAgICouZXhlLm1kYnwqLmRsbC5tZGIpCistICAgICAgICMgSnVzdCBkZWJ1ZyBpbmZvcm1hdGlvbiwgd2UgY2FuIHNraXAgdGhlbQorLSAgICAgICBlY2hvICIkZmlsZSBza2lwcGVkIGFzIGRlYnVnIGZpbGUuIgorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAqLmEpCistICAgICAgIGZsaXN0PWBhciB0IG5ldy8kZmlsZWAKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICBhciB4IGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZAorLSAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAqLmNwaW8pCistICAgICAgIGZsaXN0PWBjcGlvIC0tcXVpZXQgLS1saXN0IC0tZm9yY2UtbG9jYWwgPCAibmV3LyRmaWxlImAKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj0kZmlsZS5leHRyYWN0LiRQUElELiQkCistICAgICAgIG1rZGlyIG9sZC8kZmRpciBuZXcvJGZkaXIKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIGNwaW8gLS1xdWlldCAtLWV4dHJhY3QgLS1mb3JjZS1sb2NhbCA8ICIuLi8ke2ZpbGUjIyovfSIKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorLSAgICAgICBjZCAkcHdkCistICAgICAgIGxvY2FsIHJldD0wCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCistICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgIGZpCistICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICBybSAtcmYgb2xkLyRmZGlyIG5ldy8kZmRpcgorLSAgICAgICByZXR1cm4gJHJldAorLSAgICAgICA7OworLSAgICAqLnRhcnwqLnRhci5iejJ8Ki50YXIuZ3p8Ki50Z3p8Ki50YnoyKQorLSAgICAgICBmbGlzdD1gdGFyIHRmIG5ldy8kZmlsZWAKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIHRhciB4ZiBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCistICAgICAgIHRhciB4ZiBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAkcmV0CistICAgICAgIDs7CistICAgICouemlwfCouamFyfCoud2FyKQorLSAgICAgICBjZCBvbGQKKy0gICAgICAgdW5qYXJfbCAuLyRmaWxlIHxzb3J0ID4gZmxpc3QKKy0gICAgICAgIyAgMTAtMDUtMjAxMCAxNDozOQorLSAgICAgICBzZWQgLWkgLWUgInMsIFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVwrIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgIyAyMDEyLTAyLTAzIDA3OjU5CistICAgICAgIHNlZCAtaSAtZSAicywgMjBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CistICAgICAgIGNkIC4uL25ldworLSAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQ+IGZsaXN0CistICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsOyAiIGZsaXN0CistICAgICAgIHNlZCAtaSAtZSAicywgMjBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CistICAgICAgIGNkIC4uCistICAgICAgIGlmICEgY21wIC1zIG9sZC9mbGlzdCBuZXcvZmxpc3Q7IHRoZW4KKy0gICAgICAgICAgZWNobyAiJGZpbGUgaGFzIGRpZmZlcmVudCBmaWxlIGxpc3QiCistICAgICAgICAgIGRpZmYgLXUgb2xkL2ZsaXN0IG5ldy9mbGlzdAorLSAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICBmbGlzdD1gZ3JlcCBkYXRlIG5ldy9mbGlzdCB8IHNlZCAtZSAncywuKiBkYXRlICwsJ2AKKy0gICAgICAgcHdkPSRQV0QKKy0gICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKy0gICAgICAgY2Qgb2xkLyRmZGlyCistICAgICAgIHVuamFyIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkCistICAgICAgIGxvY2FsIHJldD0wCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICBpZiB0ZXN0IC1mIG5ldy8kZmRpci8kZiAmJiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCistICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgIGZpCistICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICByZXR1cm4gJHJldDs7CistICAgICAqLnB5Y3wqLnB5bykKKy0gICAgICAgIHBlcmwgLWUgIm9wZW4gZmgsICcrPCcsICdvbGQvJGZpbGUnOyBzZWVrIGZoLCA0LCBTRUVLX1NFVDsgcHJpbnQgZmggJzAwMDAnOyIKKy0gICAgICAgIHBlcmwgLWUgIm9wZW4gZmgsICcrPCcsICduZXcvJGZpbGUnOyBzZWVrIGZoLCA0LCBTRUVLX1NFVDsgcHJpbnQgZmggJzAwMDAnOyIKKy0gICAgICAgIDs7CistICAgICAqLmJ6MikKKy0gICAgICAgIGJ1bnppcDIgLWMgb2xkLyRmaWxlID4gb2xkLyR7ZmlsZS8uYnoyL30KKy0gICAgICAgIGJ1bnppcDIgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uYnoyL30KKy0gICAgICAgIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZS8uYnoyL30KKy0gICAgICAgIHJldHVybiAkPworLSAgICAgICAgOzsKKy0gICAgICouZ3opCistICAgICAgICBndW56aXAgLWMgb2xkLyRmaWxlID4gb2xkLyR7ZmlsZS8uZ3ovfQorLSAgICAgICAgZ3VuemlwIC1jIG5ldy8kZmlsZSA+IG5ldy8ke2ZpbGUvLmd6L30KKy0gICAgICAgIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZS8uZ3ovfQorLSAgICAgICAgcmV0dXJuICQ/CistICAgICAgICA7OworLSAgICAgKi5ycG0pCistCSRzZWxmX3NjcmlwdCAtYSBvbGQvJGZpbGUgbmV3LyRmaWxlCistICAgICAgICByZXR1cm4gJD8KKy0gICAgICAgIDs7CistICAgICAqcG5nKQorLQkjIFRyeSB0byByZW1vdmUgdGltZXN0YW1wcywgb25seSBpZiBjb252ZXJ0IGZyb20gSW1hZ2VNYWdpY2sgaXMgaW5zdGFsbGVkCistICAgICAgICBpZiBbWyAkKHR5cGUgLXAgY29udmVydCkgXV07IHRoZW4KKy0JICBjb252ZXJ0IG9sZC8kZmlsZSArc2V0IGRhdGU6Y3JlYXRlICtzZXQgZGF0ZTptb2RpZnkgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30KKy0JICBjb252ZXJ0IG9sZC8kZmlsZSArc2V0IGRhdGU6Y3JlYXRlICtzZXQgZGF0ZTptb2RpZnkgbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ30KKy0JICBpZiAhIGNtcCAtcyBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfTsgdGhlbgorLQkgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLQkgICAgICBoZXhkdW1wIC1DIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9ID4gJGZpbGUxCistCSAgICAgIGhleGR1bXAgLUMgbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTIKKy0JICAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMAorLQkgICAgICByZXR1cm4gMQorLQkgIGZpCistCSAgcmV0dXJuIDAKKy0JZmkKKy0gICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2xvY2FsZS8qL0xDX01FU1NBR0VTLyoubW98L3Vzci9zaGFyZS9sb2NhbGUtYnVuZGxlLyovTENfTUVTU0FHRVMvKi5tbykKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgInMsUE9ULUNyZWF0aW9uLURhdGU6IC4uLi4tLi4tLi4gLi46Li4rLi4uLixQT1QtQ3JlYXRpb24tRGF0ZTogMTk3MC0wMS0wMSAwMDowMCswMDAwLCIgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9kb2MvcGFja2FnZXMvKi8qLmh0bWx8XAorLSAgICAgL3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyouaHRtbHwvdXNyL3NoYXJlL2RvYy8qL2h0bWwvKi5odG1sKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgdGV4aTJodG1sIG91dHB1dCwgZS5nLiBpbiBrdm0sIGluZGVudCwgcWVtdQorLQkgc2VkIC1pIC1lICJzfF48IS0tIENyZWF0ZWQgb24gLiosIDIwLi4gYnkgdGV4aTJodG1sIC5cLi4ufDwhLS0gQ3JlYXRlZCBvbiBBdWd1c3QgNywgMjAwOSBieSB0ZXhpMmh0bWwgMS44MnwiICRmCistCSBzZWQgLWkgLWUgJ3N8XiAqVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkIGJ5IDxlbT5BdXRvYnVpbGQ8L2VtPiBvbiA8ZW0+LiosIDIwLi48L2VtPiB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyI+PGVtPnRleGkyaHRtbCAuXC4uLjwvZW0+PC9hPi4kfCAgVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkIGJ5IDxlbT5BdXRvYnVpbGQ8L2VtPiBvbiA8ZW0+QXVndXN0IDcsIDIwMDk8L2VtPiB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyI+PGVtPnRleGkyaHRtbCAxLjgyPC9lbT48L2E+LnwnICRmCistCSAjIGRveHlnZW4gZG9jdSwgZS5nLiBpbiBsaWJzc2ggYW5kIGxvZzRjCistCSBzZWQgLWkgLWUgJ3N8R2VuZXJhdGVkIG9uIC4uLiAuLi4gWzAtOV0qIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gMjBbMC05XVswLTldIGZvciB8R2VuZXJhdGVkIG9uIE1vbiBNYXkgMTAgMjA6NDU6MDAgMjAxMCBmb3IgfCcgJGYKKy0JICMgR2VuZXJhdGVkIG9uIFNhdCBBdWcgMTQgMjAxMCAxNjo0OTo0OCBmb3IgbGlic3NoCistCSBzZWQgLWkgLWUgJ3N8R2VuZXJhdGVkIG9uIC4uLiAuLi4gWzAtOV0qIDIwWzAtOV1bMC05XSBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIGZvciB8R2VuZXJhdGVkIG9uIE1vbiBNYXkgMTAgMjA6NDU6MDAgMjAxMCBmb3IgfCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi5odG1sIHxcCistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi8qLmh0bWx8L3Vzci9zaGFyZS9qYXZhZG9jLyovKi8qLmh0bWwpCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgIyBUaGVyZSBhcmUgbW9yZSB0aW1lc3RhbXBzIGluIGh0bWwsIHNvIGZhciB3ZSBoYW5kbGUgb25seSBzb21lIHByaW1pdGl2ZSB2ZXJzaW9ucy4KKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAjIEphdmFkb2M6CistICAgICAgICAgICMgPGhlYWQ+CistICAgICAgICAgICMgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAodmVyc2lvbiAxLjcuMF83NSkgb24gVHVlIEZlYiAwMyAwMjoyMDoxMiBHTVQgMjAxNSAtLT4KKy0gICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFR1ZSBGZWIgMDMgMDA6MDI6NDggR01UIDIwMTUgLS0+CistICAgICAgICAgICMgPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAxNS0wMi0wMyI+CistICAgICAgICAgICMgPC9oZWFkPgorLSAgICAgICAgICBzZWQgLWkgLWUgJworLSAgICAgICAgICAgIC9ePGhlYWQ+L3sKKy0gICAgICAgICAgICAgIDogbmV4dAorLSAgICAgICAgICAgICAgbgorLSAgICAgICAgICAgICAgL148XC9oZWFkPi97CistICAgICAgICAgICAgICAgIGIgZW5kX2hlYWQKKy0gICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgIHMvXlwoPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvY1wpIFwoKFwoYnVpbGRcfHZlcnNpb25cKSBbMC05Ll9dXCspIG9uIC4uLiAuLi4gLi4gLi46Li46Li4gXChHTVRcfFVUQ1wpIC4uLi5cKSBcKC0tPlwpL1wxIHNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUgXDUvCistICAgICAgICAgICAgICB0IG5leHQKKy0gICAgICAgICAgICAgIHMvXlwoPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvY1wpIFwob24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcMy8KKy0gICAgICAgICAgICAgIHQgbmV4dAorLSAgICAgICAgICAgICAgcy9ePG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iWzAtOV1cezRcfS1bMC05XVx7Mlx9LVswLTldXHsyXH0iPi88bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIj4vCistICAgICAgICAgICAgICBiIG5leHQKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgOiBlbmRfaGVhZAorLSAgICAgICAgICAnICRmCistICAgICAgICAgIyBHamRvYyBIdG1sRG9jbGV0OgorLQkgc2VkIC1pIC1lICdzJUdlbmVyYXRlZCBieSBHamRvYyBIdG1sRG9jbGV0IFswLTksLl0qLCBwYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvY3AtdG9vbHMvIiB0aXRsZT0iIiB0YXJnZXQ9Il90b3AiPkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiAuKiwgMjAuLiBbMC05XSo6Li46Li4gXChhXHxwXClcLm1cLiBHTVQuJUdlbmVyYXRlZCBieSBHamRvYy4lJyAkZgorLQkgc2VkIC1pIC1lICdzJTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURCBYSFRNTCAxLjEgcGx1cyBUYXJnZXQgMS4wLy9FTiJcKC4qXClHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gW0EtWl1bYS16XSogWzAtOV0qLCAyMD8/IFswLTldKjo/Pzo/PyBcKGF8cFwpXC5tXC4gR01ULjwvcD4lPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwxR05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIEphbnVhcnkgMSwgMjAwOSAwOjAwOjAwIGEubS4gR01ULjwvcD4lJyAkZgorLQkgc2VkIC1pIC1lICdzJTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwoLipHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPlwpLCBvbiBbYS16QS1aXSogWzAtOV1bMC05XSwgMjAuLiBbMC05XSo6Li46Li4gXChhXHxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVERcMSxvbiBNYXkgMSwgMjAxMCAxOjExOjQyIHAubS4gR01ULjwvcD4lJyAkZgorLQkgIyBkZXByZWNhdGVkLWxpc3QgaXMgcmFuZG9tbHkgb3JkZXJlZCwgc29ydCBpdCBmb3IgY29tcGFyaXNvbgorLQkgY2FzZSAkZiBpbgorLQkgICAqL2RlcHJlY2F0ZWQtbGlzdC5odG1sKQorLQkgICAgIHNvcnQgLW8gJGYgJGYKKy0JICAgICA7OworLQkgZXNhYworLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvZ2pkb2MucHJvcGVydGllcyB8XAorLSAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyovZ2pkb2MucHJvcGVydGllcykKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0JIHNlZCAtaSAtZSAnc3xeI1tBLVpdW2Etel1cezJcfSBbQS1aXVthLXpdXHsyXH0gWzAtOV1cezJcfSAuLjouLjouLiBHTVQgMjAuLiR8I0ZyaSBKYW4gMDEgMTE6Mjc6MzYgR01UIDIwMDl8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAqL2ZvbnRzLnNjYWxlfCovZm9udHMuZGlyfCovZW5jb2RpbmdzLmRpcikKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAjIHNvcnQgZmlsZXMgYmVmb3JlIGNvbXBhcmluZworLSAgICAgICAgIHNvcnQgLW8gJGYgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Zhci9hZG0vcGVybC1tb2R1bGVzLyopCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgc2VkIC1pIC1lICdzfF49aGVhZDIgLi4uIC4uLiAuLiAuLjouLjouLiAuLi4uOiBDPE1vZHVsZT58PWhlYWQyIFdlZCBKdWwgIDEgMDA6MDA6MDAgMjAwOTogQzxNb2R1bGU+fCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9tYW4vbWFuMy8qM3BtKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAnc3wgMyAiMjAuLi0uLi0uLiIgInBlcmwgdjUuLi4uLiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIiR8IDMgIjIwMDktMDEtMDEiICJwZXJsIHY1LjEwLjAiICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiJ8JyAkZgorLSAgICAgICAgIHRyaW1fbWFuX1RIICRmCistICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL21hbi8qL21hbip8L3Vzci9zaGFyZS9tYW4vbWFuKnwvdXNyL2xpYi90ZXhtZi9kb2MvbWFuLyovKikKKy0KKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICB0cmltX21hbl9USCAkZgorLSAgICAgICAgIHRyaW1fbWFuX2ZpcnN0X2xpbmUgJGYKKy0gICAgICAgICAjIGdlbmVyYXRlZCBieSBkb2Nib29rIHhtbDoKKy0gICAgICAgICAjLlwiICAgICAgRGF0ZTogMDkvMTMvMjAxMAorLSAgICAgICAgIHNlZCAtaSAtZSAnc3xEYXRlOiBbMC0xXVswLTldL1swLTldWzAtOV0vMjAxWzAtOV18RGF0ZTogMDkvMTMvMjAxMHwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgICouZWxjKQorLSAgICAgICAjIGVtYWNzIGxpc3AgZmlsZXMKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgJ3N8Q29tcGlsZWQgYnkgYWJ1aWxkQC4qIG9uIC4uLiAuLi4gLi4gLi46Li46Li4gMjAuLiR8Y29tcGlsZWQgYnkgYWJ1aWxkQGJ1aWxkaG9zdCBvbiBXZWQgSnVsIDAxIDAwOjAwOjAwIDIwMDl8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy8qLypmbXQgfFwKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFmb250LyouYmFzZXxcCistICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy9tZXRhcG9zdC8qLm1lbSkKKy0gICAgICAgIyBiaW5hcnkgZHVtcCBvZiBUZVggYW5kIE1ldGFmb250IGZvcm1hdHMsIHdlIGNhbiBpZ25vcmUgdGhlbSBmb3IgZ29vZAorLSAgICAgICBlY2hvICJkaWZmZXJlbmNlIGluICRmaWxlIGlnbm9yZWQuIgorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAgKi9saWJ0b29sKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgIHNlZCAtaSAtZSAnc3xeIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgW0EtWmEtejAtOV0qOiR8IyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgeDQyOnwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC9ldGMvbWFpbC8qY2Z8L2V0Yy9zZW5kbWFpbC5jZikKKy0gICAgICAgIyBmcm9tIHNlbmRtYWlsIHBhY2thZ2UKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0JICAjIC0gIyMjIyMgYnVpbHQgYnkgYWJ1aWxkQGJ1aWxkMzMgb24gVGh1IE1heSA2IDExOjIxOjE3IFVUQyAyMDEwCistCSAgc2VkIC1pIC1lICdzfGJ1aWx0IGJ5IGFidWlsZEBbYS16MC05XSogb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAuKiAyMFswLTldWzAtOV18YnVpbHQgYnkgYWJ1aWxkQGJ1aWxkNDIgb24gVGh1IE1heSA2IDExOjIxOjE3IFVUQyAyMDEwfCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qL2luZGV4LmNhY2hlfC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi8qL2luZGV4LmNhY2hlfFwKKy0gICAgIC91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sLyovKi5odG1sfC91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sLyovKi5kZXZoZWxwMikKKy0gICAgICAgIyB2YXJpb3VzIGtkZSBhbmQgZ3RrIHBhY2thZ2VzCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgOzsKKy0gICAgKi9jcmVhdGVkLnJpZCkKKy0gICAgICAgIyBydWJ5IGRvY3VtZW50YXRpb24KKy0gICAgICAgIyBmaWxlIGp1c3QgY29udGFpbnMgYSB0aW1lc3RhbXAgYW5kIG5vdGhpbmcgZWxzZSwgc28gaWdub3JlIGl0CistICAgICAgIGVjaG8gIklnbm9yZSAkZmlsZSIKKy0gICAgICAgcmV0dXJuIDAKKy0gICAgICAgOzsKKy0gICAgKi9yZG9jL2ZpbGVzLyouaHRtbCkKKy0gICAgICAgIyBydWJ5IGRvY3VtZW50YXRpb24KKy0gICAgICAgIyA8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+CistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgIHNlZCAtaSAtZSAncyU8dGQ+W0EtWl1bYS16XVthLXpdIFtBLVpdW2Etel1bYS16XSBbMC05XVwrIFswLTldXCs6WzAtOV1cKzpbMC05XVwrICswMDAwIDIwMVswLTldPC90ZD4lPHRkPk1vbuKAglNlcOKAgjIw4oCCMTk6MDI6NDPigIIrMDAwMOKAgjIwMTA8L3RkPiVnJyAkZgorLSAgICAgICBkb25lCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgOzsKKy0gICAgKi9MaW51eCpFbnYuU2V0LnNoKQorLSAgICAgICAjIExpYnJlT2ZmaWNlIGZpbGVzLCBjb250YWluczoKKy0gICAgICAgIyBHZW5lcmF0ZWQgb246IE1vbiBBcHIgMTggMTM6MTk6MjIgVVRDIDIwMTEKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0JIHNlZCAtaSAtZSAncyVeIyBHZW5lcmF0ZWQgb246LipVVEMgMjAxWzAtOV0gKiQlIyBHZW5lcmF0ZWQgb246IFNvbWV0aW1lJWcnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgL3Vzci9saWIvbGlicmVvZmZpY2Uvc29sdmVyL2luYy8qL2RlbGl2ZXIubG9nKQorLSAgICAgICAjIExpYnJlT2ZmaWNlIGxvZyBmaWxlCistICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorLSAgICAgIHJldHVybiAwCistICAgICAgOzsKKy0gICAgL3Zhci9hZG0vdXBkYXRlLW1lc3NhZ2VzLyp8L3Zhci9hZG0vdXBkYXRlLXNjcmlwdHMvKikKKy0gICAgICAjIGVuY29kZSB2ZXJzaW9uLXJlbGVhc2UgaW5zaWRlCistICAgICAgb2xkZm49YGVjaG8gIiRmaWxlInxzZWQgLWUgcy8tJHJlbGVhc2UyLy0kcmVsZWFzZTEvO2AKKy0KKy0gICAgICAjIGZldGNobXN0dGZvbnRzIGVtYmVkcyB0aGUgcmVsZWFzZSBudW1iZXIgaW4gdGhlIHVwZGF0ZSBzaGVsbCBzY3JpcHQuCistICAgICAgZWNobyBzZWQgLWkgLWUgInMvLSRyZWxlYXNlMS8tJHJlbGVhc2UyL2c7IiAib2xkLyRvbGRmbiIKKy0gICAgICBzZWQgLWkgLWUgInMvLSRyZWxlYXNlMS8tJHJlbGVhc2UyL2c7IiAib2xkLyRvbGRmbiIKKy0KKy0gICAgICBpZiAhIGRpZmYgLXUgb2xkLyRvbGRmbiBuZXcvJGZpbGU7IHRoZW4KKy0gICAgICAgICAgIGVjaG8gIiRvbGRmbiBpcyBub3Qgc2FtZSBhcyAkZmlsZSIKKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgZmkKKy0gICAgICBlY2hvICIkZmlsZSBhbmQgJG9sZGZuIGFyZSBzYW1lIgorLSAgICAgIHJldHVybiAwCistICAgICAgOzsKKy0gICAgKi5wcykKKy0gICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKy0gICAgICAgIHNlZCAtaSAtZSAnCistCS9eJSVDcmVhdGlvbkRhdGU6W1s6Ymxhbms6XV0vZAorLQkvXiUlQ3JlYXRvcjpbWzpibGFuazpdXWdyb2ZmW1s6Ymxhbms6XV12ZXJzaW9uW1s6Ymxhbms6XV0vZAorLQknICIkZiIKKy0gICAgICBkb25lCistICAgIDs7CistICAgICpwZGYpCistICAgICAgIyBQREYgZmlsZXMgY29udGFpbiBhIHVuaXF1ZSBJRCwgcmVtb3ZlIGl0CistICAgICAgIyBGb3JtYXQgb2YgdGhlIElEIGlzOgorLSAgICAgICMgL0lEIFs8OUFDRTI0N0E3MENGOUJFQUZFRTE1RTExNjI1OUJENkQ+IDw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD5dCistICAgICAgIyB3aXRoIG9wdGlvbmFsIHNwYWNlcy4gcGRmdGV4IGNyZWF0ZXMgYWxzbzoKKy0gICAgICAjIC9DcmVhdGlvbkRhdGUgKEQ6MjAxMjAxMDMwODMyMDZaKQorLSAgICAgICMgL01vZERhdGUgKEQ6MjAxMjAxMDMwODMyMDZaKQorLSAgICAgICMgYW5kIHBvc3NpYmx5IFhNTCBtZXRhZGF0YSBhcyB3ZWxsCistICAgICAgZm9yIGYgaW4gIm9sZC8kZmlsZSIgIm5ldy8kZmlsZSI7IGRvCistICAgICAgICBzZWQgLWkgXAorLSAgICAgICAgICAgICcvb2JqLywvZW5kb2JqL3sKKy0gICAgICAgICAgICAgICBzJS9JRCBcP1xbIFw/PFtePl1cKz4gXD88W14+XVwrPiBcP1xdJS9JRHJhbmRvbSVnOworLSAgICAgICAgICAgICAgIHMlL0NyZWF0aW9uRGF0ZSBcPyhEOlteKV0qKSUvQ3JlYXRpb25EYXRlIChEOiBYWFgpJWc7CistICAgICAgICAgICAgICAgcyUvTW9kRGF0ZSBcPyhEOlteKV0qKSUvTW9kRGF0ZSAoRDogWFhYKSVnOworLSAgICAgICAgICAgICAgIHMlPHBkZjpDcmVhdGlvbkRhdGU+W148XSo8L3BkZjpDcmVhdGlvbkRhdGU+JTxwZGY6Q3JlYXRpb25EYXRlPlhYWDwvcGRmOkNyZWF0aW9uRGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTxwZGY6TW9kRGF0ZT5bXjxdKjwvcGRmOk1vZERhdGU+JTxwZGY6TW9kRGF0ZT5YWFg8L3BkZjpNb2REYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHhhcDpDcmVhdGVEYXRlPltePF0qPC94YXA6Q3JlYXRlRGF0ZT4lPHhhcDpDcmVhdGVEYXRlPlhYWDwveGFwOkNyZWF0ZURhdGU+JWc7CistICAgICAgICAgICAgICAgcyU8eGFwOk1vZGlmeURhdGU+W148XSo8L3hhcDpNb2RpZnlEYXRlPiU8eGFwOk1vZGlmeURhdGU+WFhYPC94YXA6TW9kaWZ5RGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTx4YXA6TWV0YWRhdGFEYXRlPltePF0qPC94YXA6TWV0YWRhdGFEYXRlPiU8eGFwOk1ldGFkYXRhRGF0ZT5YWFg8L3hhcDpNZXRhZGF0YURhdGU+JWc7CistICAgICAgICAgICAgfScgIiRmIgorLSAgICAgIGRvbmUKKy0gICAgICA7OworLSAgZXNhYworLQorLSAgZnR5cGU9YC91c3IvYmluL2ZpbGUgb2xkLyRmaWxlIHwgc2VkICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnYAorLSAgY2FzZSAkZnR5cGUgaW4KKy0gICAgIFBFMzJcIGV4ZWN1dGFibGUqTW9ub1wvXC5OZXRcIGFzc2VtYmx5KikKKy0gICAgICAgZWNobyAiUEUzMiBNb25vLy5OZXQgYXNzZW1ibHk6ICRmaWxlIgorLSAgICAgICBpZiBbIC14IC91c3IvYmluL21vbm9kaXMgXSA7IHRoZW4KKy0gICAgICAgICBtb25vZGlzIG9sZC8kZmlsZSAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvR1VJRCA9IHsuKn0vR1VJRCA9IHsgNDIgfS87Jz4gJHtmaWxlMX0KKy0gICAgICAgICBtb25vZGlzIG5ldy8kZmlsZSAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvR1VJRCA9IHsuKn0vR1VJRCA9IHsgNDIgfS87Jz4gJHtmaWxlMn0KKy0gICAgICAgICBpZiAhIGNtcCAtcyAke2ZpbGUxfSAke2ZpbGUyfTsgdGhlbgorLSAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0gICAgICAgICAgIGRpZmYgLXUgJHtmaWxlMX0gJHtmaWxlMn0KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgZmkKKy0gICAgICAgZWxzZQorLSAgICAgICAgIGVjaG8gIkNhbm5vdCBjb21wYXJlLCBubyBtb25vZGlzIGluc3RhbGxlZCIKKy0gICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICBFTEYqZXhlY3V0YWJsZSp8RUxGKltMTV1TQlwgc2hhcmVkXCBvYmplY3QqKQorLSAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBvbGQvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUxCistICAgICAgIGlmICEgdGVzdCAtcyAkZmlsZTE7IHRoZW4KKy0gICAgICAgICAjIG9iamR1bXAgaGFzIG5vIGlkZWEgaG93IHRvIGhhbmRsZSBpdAorLSAgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBicmVhaworLSAgICAgICAgIGZpCistICAgICAgIGZpICAgICAgIAorLSAgICAgICBlbGZkaWZmPQorLSAgICAgICBzZWQgLWkgLWUgInMsb2xkLywsIiAkZmlsZTEKKy0gICAgICAgb2JqZHVtcCAtZCAtLW5vLXNob3ctcmF3LWluc24gbmV3LyRmaWxlIHwgZmlsdGVyX2Rpc2FzbSA+ICRmaWxlMgorLSAgICAgICBzZWQgLWkgLWUgInMsbmV3LywsIiAkZmlsZTIKKy0gICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKy0gICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBhc3NlbWJsZXIgb3V0cHV0IgorLSAgICAgICAgICBoZWFkIC1uIDIwMCAkZGZpbGUKKy0gICAgICAgICAgZWxmZGlmZj0iMSIKKy0gICAgICAgZmkKKy0gICAgICAgZWNobyAiIiA+JGZpbGUxCistICAgICAgIGVjaG8gIiIgPiRmaWxlMgorLSAgICAgICAjIERvbid0IGNvbXBhcmUgLmJ1aWxkLWlkIGFuZCAuZ251X2RlYnVnbGluayBzZWN0aW9ucworLSAgICAgICBzZWN0aW9ucz0iJChvYmpkdW1wIC1zIG5ldy8kZmlsZSB8IGdyZXAgIkNvbnRlbnRzIG9mIHNlY3Rpb24gLio6IiB8IHNlZCAtciAicywuKiAoLiopOixcMSxnIiB8IGdyZXAgLXYgLWUgIlwuYnVpbGQtaWQiIC1lICJcLmdudV9kZWJ1Z2xpbmsiIHwgdHIgIlxuIiAiICIpIgorLSAgICAgICBmb3Igc2VjdGlvbiBpbiAkc2VjdGlvbnM7IGRvCistICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gb2xkLyRmaWxlIHwgc2VkICJzLF5vbGQvLCwiID4gJGZpbGUxCistICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gbmV3LyRmaWxlIHwgc2VkICJzLF5uZXcvLCwiID4gJGZpbGUyCistICAgICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyID4gJGRmaWxlOyB0aGVuCistICAgICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgaW4gRUxGIHNlY3Rpb24gJHNlY3Rpb24iCistICAgICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorLSAgICAgICAgICAgICBlbGZkaWZmPSIxIgorLSAgICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIGlmIHRlc3QgLXogIiRlbGZkaWZmIjsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZTogb25seSBkaWZmZXJlbmNlIHdhcyBpbiBidWlsZC1pZCBvciBnbnVfZGVidWdsaW5rLCBHT09ELiIKKy0gICAgICAgICAgcmV0dXJuIDAKKy0gICAgICAgZmkKKy0gICAgICAgcmV0dXJuIDEKKy0gICAgICAgOzsKKy0gICAgICpBU0NJSSp8KnRleHQqKQorLSAgICAgICBpZiAhIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCistICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0gICAgICAgICBkaWZmIC11IG9sZC8kZmlsZSBuZXcvJGZpbGUgfCBoZWFkIC1uIDIwMAorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICBkaXJlY3Rvcnl8c2V0dWlkLFwgZGlyZWN0b3J5fHN0aWNreSxcIGRpcmVjdG9yeSkKKy0gICAgICAgIyB0YXIgbWlnaHQgcGFja2FnZSBkaXJlY3RvcmllcyAtIGlnbm9yZSB0aGVtIGhlcmUKKy0gICAgICAgcmV0dXJuIDAKKy0gICAgICAgOzsKKy0gICAgIGJ6aXAyXCBjb21wcmVzc2VkXCBkYXRhKikKKy0gICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAiYnoyIjsgdGhlbgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIGd6aXBcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJnemlwIjsgdGhlbgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIFhaXCBjb21wcmVzc2VkXCBkYXRhKikKKy0gICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAieHoiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywudGFyfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC50YXJ9CistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS50YXI7IHRoZW4KKy0gICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgY3Bpb1wgYXJjaGl2ZSkKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKy0gICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgICBmaQorLSAgICAgOzsKKy0gICAgIHN5bWJvbGljXCBsaW5rXCB0b1wgKikKKy0gICAgICAgcmVhZGxpbmsgIm9sZC8kZmlsZSIgPiAkZmlsZTEKKy0gICAgICAgcmVhZGxpbmsgIm5ldy8kZmlsZSIgPiAkZmlsZTIKKy0gICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTI7IHRoZW4KKy0gICAgICAgICBlY2hvICJzeW1saW5rIHRhcmdldCBmb3IgJGZpbGUgZGlmZmVycyIKKy0gICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgKikKKy0gICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gIGVzYWMKKy0gIHJldHVybiAwCistfQorLQorLSMgV2UgbmVlZCAvcHJvYyBtb3VudGVkIGZvciBzb21lIHRlc3RzLCBzbyBjaGVjayB0aGF0IGl0J3MgbW91bnRlZCBhbmQKKy0jIGNvbXBsYWluIGlmIG5vdC4KKy1QUk9DX01PVU5URUQ9MAorLWlmIFsgISAtZCAvcHJvYy9zZWxmLyBdOyB0aGVuCistICBlY2hvICIvcHJvYyBpcyBub3QgbW91bnRlZCIKKy0gIG1vdW50IC1vcncgLW4gLXRwcm9jIG5vbmUgL3Byb2MKKy0gIFBST0NfTU9VTlRFRD0xCistZmkKKy0KKy0jIHByZXNlcnZlIGNtcF9zcGVjIHJlc3VsdCBmb3IgY2hlY2tfYWxsIHJ1bnMKKy1yZXQ9JFJFUworLWZvciBmaWxlIGluICRmaWxlczsgZG8KKy0gICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmaWxlOyB0aGVuCistICAgICAgIHJldD0xCistICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICBicmVhaworLSAgICAgICBmaQorLSAgIGZpCistZG9uZQorLQorLWlmIFsgIiRQUk9DX01PVU5URUQiIC1lcSAiMSIgXTsgdGhlbgorLSAgZWNobyAiVW5tb3VudGluZyBwcm9jIgorLSAgdW1vdW50IC9wcm9jCistZmkKKy0KKy1ybSAkZmlsZTEgJGZpbGUyICRkZmlsZSAkcmVuYW1lX3NjcmlwdAorLXJtIC1yZiAkZGlyCistaWYgdGVzdCAiJHJldCIgPSAwOyB0aGVuCistICAgICBlY2hvICJQYWNrYWdlIGNvbnRlbnQgaXMgaWRlbnRpY2FsIgorLWZpCistZXhpdCAkcmV0CistIyB2aW06IHR3PTY2NiB0cz0yIGV0CitkaWZmIC0tZ2l0IGEvc2FtZS1idWlsZC1yZXN1bHQuc2ggYi9zYW1lLWJ1aWxkLXJlc3VsdC5zaAoraW5kZXggYzg5MDdlMi4uN2U5YmQ0ZiAxMDA2NDQKKy0tLSBhL3NhbWUtYnVpbGQtcmVzdWx0LnNoCisrKysgYi9zYW1lLWJ1aWxkLXJlc3VsdC5zaAorQEAgLTcsMTEgKzcsMTEgQEAKKyAjIEVuaGFuY2VkIGJ5IEFuZHJlYXMgSmFlZ2VyIDxhakBzdXNlLmRlPgorICMKKyAjIFRoZSBzY3JpcHQgZGVjaWRlcyBpZiB0aGUgbmV3IGJ1aWxkIGRpZmZlcmVzIGZyb20gdGhlIGZvcm1lciBvbmUsCistIyB1c2luZyBycG0tY2hlY2suc2guCisrIyB1c2luZyBwa2ctZGlmZi5zaC4KKyAjIFRoZSBzY3JpcHQgaXMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgYXM6CisgIyAvdXNyL2xpYi9idWlsZC9zYW1lLWJ1aWxkLXJlc3VsdC5zaCAvLmJ1aWxkLm9sZHBhY2thZ2VzIC91c3Ivc3JjL3BhY2thZ2VzL1JQTVMgL3Vzci9zcmMvcGFja2FnZXMvU1JQTVMKKyAKKy1DTVBTQ1JJUFQ9JHswJS8qfS9ycG0tY2hlY2suc2gKKytDTVBTQ1JJUFQ9JHswJS8qfS9wa2ctZGlmZi5zaAorIFNDTVBTQ1JJUFQ9JHswJS8qfS9zcnBtLWNoZWNrLnNoCisgCisgY2hlY2tfYWxsPTEKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWE2NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gImEgZmFzdCBDL0MrKyBjb21waWxlciBjYWNoZSIKK0RFU0NSSVBUSU9OID0gImNjYWNoZSBpcyBhIGNvbXBpbGVyIGNhY2hlLiBJdCBzcGVlZHMgdXAgcmVjb21waWxhdGlvbiBcCitieSBjYWNoaW5nIHRoZSByZXN1bHQgb2YgcHJldmlvdXMgY29tcGlsYXRpb25zIGFuZCBkZXRlY3Rpbmcgd2hlbiB0aGUgXAorc2FtZSBjb21waWxhdGlvbiBpcyBiZWluZyBkb25lIGFnYWluLiBTdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZSBDLCBDXCtcKywgXAorT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysuIgorSE9NRVBBR0UgPSAiaHR0cDovL2NjYWNoZS5zYW1iYS5vcmciCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MysiCisKK0RFUEVORFMgPSAiemxpYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc2FtYmEub3JnL2NjYWNoZS5naXQiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGVfMy4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3ZGY3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGVfMy4yLjMuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGNjYWNoZS5pbmMKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9YjNjMzM3ZTc2NjQ1NTlhNzg5ZDlmN2E5M2U1MjgzYzEiCisKK1NSQ1JFViA9ICI0Y2FkNDZlOGVlMDA1MzE0NGJiMDA5MTlmMGRhZGQyMGMxZjg3MDEzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1GaXgtcmVncmVzc2lvbi1pbi1yZWNlbnQtY2hhbmdlLXJlbGF0ZWQtdG8temxpYi1pbi1uLnBhdGNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9maWxlcy8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViZDlhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9maWxlcy8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBmNzRjNzYxMDc5MzMwNDYzMDk4NjE2ODBiNzQxYWRjNjdhYzJhMzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9lbCBSb3NkYWhsIDxqb2VsQHJvc2RhaGwubmV0PgorRGF0ZTogTW9uLCAxNyBBdWcgMjAxNSAxOTowNToxNCArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggcmVncmVzc2lvbiBpbiByZWNlbnQgY2hhbmdlIHJlbGF0ZWQgdG8gemxpYiBpbgorIG5vbnN0YW5kYXJkIGxvY2F0aW9uCisKK1RvIGFsbG93IGZvciBzcGVjaWZ5aW5nIGEgLUwgZmxhZyBpbiBMREZMQUdTIGFuZCBoYXZlIGl0IHRha2UgZWZmZWN0IGZvcgorLWx6LCAwMjIwZGU5YzhlYmZiMThjYWFlMmFjMWFhMTYzZDA2MGU5OGNlYWRlIHB1dCAtbHogaW4gZXh0cmFfbGlicworaW5zdGVhZCBvZiBleHRyYV9sZGZsYWdzLiBIb3dldmVyLCBleHRyYV9saWJzIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4KK3BhdGhzIHRvIGxpYnJhcmllcyB3aGljaCBhcmUgcHJlcmVxdWlzaXRlcyBvZiB0aGUgY2NhY2hlIGxpbmsgcnVsZSwgYW5kCitzb21lIG9sZGVyIHZlcnNpb25zIG9mIG1ha2UgZ290IGNvbmZ1c2VkIGJ5IHNlZWluZyAtbHogYXMgYQorcHJlcmVxdWlzaXRlLgorCitUaGlzIGZpeCBpcyB0byByZXZlcnQgMDIyMGRlOWM4ZWJmYjE4Y2FhZTJhYzFhYTE2M2QwNjBlOThjZWFkZSBhbmQKK2luc3RlYWQgbWFrZSBzdXJlIHRoYXQgTERGTEFHUyBjb21lcyBiZWZvcmUgZXh0cmFfbGRmbGFncy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgTWFrZWZpbGUuaW4gIHwgIDIgKy0KKyBORVdTLnR4dCAgICAgfCAxMCArKysrKysrKysrCisgY29uZmlndXJlLmFjIHwgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBlNzUxNWIxLi5kMzYyMWNkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjAsNyArMjAsNyBAQCBSQU5MSUIgPSBAUkFOTElCQAorIAorIGFsbF9jZmxhZ3MgPSAkKENGTEFHUykKKyBhbGxfY3BwZmxhZ3MgPSBAREVGU0AgQGV4dHJhX2NwcGZsYWdzQCAtRFNZU0NPTkZESVI9JChzeXNjb25mZGlyKSAtSS4gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKKy1hbGxfbGRmbGFncyA9IEBleHRyYV9sZGZsYWdzQCAkKExERkxBR1MpCisrYWxsX2xkZmxhZ3MgPSAkKExERkxBR1MpIEBleHRyYV9sZGZsYWdzQAorIGV4dHJhX2xpYnMgPSBAZXh0cmFfbGlic0AKKyAKKyBiYXNlX3NvdXJjZXMgPSBcCitkaWZmIC0tZ2l0IGEvTkVXUy50eHQgYi9ORVdTLnR4dAoraW5kZXggZjEzZmVlYi4uZWFlYWRmNiAxMDA2NDQKKy0tLSBhL05FV1MudHh0CisrKysgYi9ORVdTLnR4dAorQEAgLTIsNiArMiwxNiBAQCBjY2FjaGUgbmV3cworID09PT09PT09PT09CisgCisgCisrVW5yZWxlYXNlZCAzLjIuNAorKy0tLS0tLS0tLS0tLS0tLS0KKysKKytCdWcgZml4ZXMKKyt+fn5+fn5+fn4KKysKKystIEZpeGVkIGJ1aWxkIGVycm9yIHJlbGF0ZWQgdG8gemxpYiBvbiBzeXN0ZW1zIHdpdGggb2xkZXIgbWFrZSB2ZXJzaW9ucworKyAgKHJlZ3Jlc3Npb24gaW4gY2NhY2hlIDMuMi4zKS4KKysKKysKKyBjY2FjaGUgMy4yLjMKKyAtLS0tLS0tLS0tLS0KKyBSZWxlYXNlIGRhdGU6IDIwMTUtMDgtMTYKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDhkOGNlOTIuLjllNjU1ODggMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyMCw3ICsxMjAsNyBAQCBpZiB0ZXN0IHgke3VzZV9idW5kbGVkX3psaWJ9ID0geHllczsgdGhlbgorICAgICBleHRyYV9saWJzPSJ6bGliL2xpYnouYSIKKyAgICAgbWtkaXIgLXAgemxpYgorIGVsc2UKKy0gICAgZXh0cmFfbGlicz0iLWx6IgorKyAgICBleHRyYV9sZGZsYWdzPSItbHoiCisgZmkKKyAKKyBkbmwgTGlua2luZyBvbiBXaW5kb3dzIG5lZWRzIHdzMl8zMgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjM2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYgpAQCAtMCwwICsxLDIxIEBACisjIGNkcnRvb2xzLW5hdGl2ZSBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCitTVU1NQVJZID0gIkEgc2V0IG9mIHRvb2xzIGZvciBDRCByZWNvcmRpbmcsIGluY2x1ZGluZyBjZHJlY29yZCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY2RydG9vbHMvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiAmIENEREwtMS4wICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzJmNjgxNzBiZTQyNGMyY2Q2NDgwNDMzNzcyNmIzMTIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvY2RydG9vbHMvYWxwaGEvY2RydG9vbHMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4MTcyNTU3ODk0ZjQ2OWI0NTg0ZDAwOGU5M2VjNDY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE4M2I1YzEyNzc3Nzc5ZTc4ZDhiNjk0NjFhYWU1MjQwMWY4NjM3NjhlN2U3MzkxZDYwNzMwMDA2ZjhjYWRjNWEiCisKK1MgPSAiJHtXT1JLRElSfS9jZHJ0b29scy0zLjAxIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsKCkgeworCW1ha2UgaW5zdGFsbCBHTUFLRV9OT1dBUk49dHJ1ZSBJTlNfQkFTRT0ke3ByZWZpeH0gREVTVERJUj0ke0R9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2ZjEwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aC9zdGFuZGFyZGRvYy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b2NvbmYvYXV0b21ha2Ugc2V0IGRvY2RpciBhdXRvbWF0aWNhbGx5LCB1c2UgdGhlaXIgdmFsdWUgZW5zdXJpbmcgCitkb2MgZmlsZXMgYXJlIHBsYWNlZCBpbnRvICRkYXRhZGlyL2RvYywgbm90ICRwcmVmaXgvZG9jLgorCitSUCA1LzcvMjAxMQorCitJbmRleDogY2hycGF0aC0wLjEzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY2hycGF0aC0wLjEzLm9yaWcvTWFrZWZpbGUuYW0JMjAxMS0wNy0wNSAyMzo0MDoxNC43Njk5MjAyNTQgKzAxMDAKKysrKyBjaHJwYXRoLTAuMTMvTWFrZWZpbGUuYW0JMjAxMS0wNy0wNSAyMzo0MDoxOS44MTk5MjA2MzUgKzAxMDAKK0BAIC0xLDcgKzEsNSBAQAorIFNVQkRJUlMgPSB0ZXN0c3VpdGUgZGViCisgCistZG9jZGlyID0gJChwcmVmaXgpL2RvYy8kKFBBQ0tBR0UpLSQoVkVSU0lPTikKKy0KKyBkb2NfREFUQSA9IEFVVEhPUlMgQ09QWUlORyBDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRQorIAorIGJpbl9QUk9HUkFNUyA9IGNocnBhdGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzYjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiVG9vbCB0byBlZGl0IHJwYXRoIGluIEVMRiBiaW5hcmllcyIKK0RFU0NSSVBUSU9OID0gImNocnBhdGggYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHJwYXRoICh3aGVyZSB0aGUgXAorYXBwbGljYXRpb24gbG9va3MgZm9yIGxpYnJhcmllcykgaW4gYW4gYXBwbGljYXRpb24uIEl0IGRvZXMgbm90IFwKKyh5ZXQpIGFsbG93IHlvdSB0byBhZGQgYW4gcnBhdGggaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3Byb2plY3RzL2NocnBhdGgvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvdHJhY2tlci8/YXRpZD00MTI4MDcmZ3JvdXBfaWQ9MzEwNTIiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy9kb3dubG9hZC5waHAvZmlsZS8zOTc5L2NocnBhdGgtMC4xNi50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3RhbmRhcmRkb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYmY4ZDFkMWVlMzQ1ZmM4YTc5MTU1NzZmNTY0OTk4MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYjBkNGM1NGJhYzI5OTBlMWJkZjgxMzJmMmM5NDc3YWU3NTI4NTlkNTIzZTE0MWU3MmIzYjExYTEyYzI2ZTdiIgorCitpbmhlcml0IGF1dG90b29scworCisjIFdlIGRvbid0IGhhdmUgYSBzdGFnZWQgY2hycGF0aC1uYXRpdmUgZm9yIGVuc3VyaW5nIG91ciBiaW5hcnkgaXMKKyMgcmVsb2NhdGFibGUsIHNvIHVzZSB0aGUgb25lIHdlJ3ZlIGp1c3QgYnVpbHQKK0NIUlBBVEhfQklOX2NsYXNzLW5hdGl2ZSA9ICIke0J9L2NocnBhdGgiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGNocnBhdGgtcmVwbGFjZW1lbnQtbmF0aXZlIgorTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0ZTc0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjMuMS5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIGNtYWtlLmluYworaW5oZXJpdCBuYXRpdmUKKworIyBVc2luZyBjbWFrZSdzIGludGVybmFsIGxpYmFyY2hpdmUsIHNvIHNvbWUgZGVwZW5kZW5jaWVzIGFyZSBuZWVkZWQKK0RFUEVORFMgKz0gImJ6aXAyLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2ggXAorIgorCisjIERpc2FibGUgY2NtYWtlIHNpbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBuY3Vyc2VzCitDTUFLRV9FWFRSQUNPTkYgPSAiXAorICAgIC1EQlVJTERfQ3Vyc2VzRGlhbG9nPTAgXAorICAgIC1ERU5BQkxFX0FDTD0wIC1ESEFWRV9BQ0xfTElCQUNMX0g9MCBcCisgICAgLURIQVZFX1NZU19BQ0xfSD0wIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U5M2FjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9uaWNzIE5WLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIkNyb3NzLXBsYXRmb3JtLCBvcGVuLXNvdXJjZSBtYWtlIHN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY21ha2Uub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3B1YmxpYy5raXR3YXJlLmNvbS9CdWcvbXlfdmlld19wYWdlLnBocCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0LnR4dDttZDU9M2JhNWE2YzM0NDgxNjUyY2U1NzNlNWM0ZTFkNzA3ZTQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL2NtYWtlLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9MzQxNzM2ZGFlODNjOWUzNDRiNTNlZWIxYmM3ZDdiYzIiCisKK0NNQUtFX01BSk9SX1ZFUlNJT04gPSAiJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzA6Ml0pfSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNtYWtlLm9yZy9maWxlcy92JHtDTUFLRV9NQUpPUl9WRVJTSU9OfS9jbWFrZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3VwcG9ydC1vZS1xdDQtdG9vbHMtbmFtZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcXQ0LWZhaWwtc2lsZW50LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTI2Mzg1NzZmNGUxZTYyMWZlZDZjMzQxMGQzYTFiMTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2Q2NTAyMmM2YTA3MDdmMWM3MTEyZjk5ZTljOTgxNjc3ZmRkNTUxOGY3ZGRmYTBmNzc4ZDRjZWU3MTEzZTNkNiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBVZ2x5IGhhY2sgdG8gd29yayBhcm91bmQgdW5kZWZpbmVkIE9FX1FNQUtFX1BBVEhfRVhURVJOQUxfSE9TVF9CSU5TIHZhcmlhYmxlCisjIGFuZCBwb3NzaWJseSBtaXNzaW5nIHFtYWtlIGJpbmFyeSAocXRiYXNlLW5hdGl2ZSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHN5c3Jvb3QKKyMgZS5nLiBpbiBvcmRlciB0byB1cGdyYWRlIGl0LCBldmVuIHdoZW4gdGhlcmUgaXMgdGFyZ2V0IHF0YmFzZSkKKworIyBGaXhlcyBlcnJvcnMgbGlrZSB0aGlzIGluIGNtYWtlKC1uYXRpdmUpLmRvX2NvbmZpZ3VyZToKKyN8IC0tIFBlcmZvcm1pbmcgVGVzdCBydW5fcGljX3Rlc3QgLSBTdWNjZXNzCisjfCBDTWFrZSBFcnJvciBhdCB0bXAtZWdsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2xpYi9jbWFrZS9RdDVDb3JlL1F0NUNvcmVDb25maWcuY21ha2U6MjcgKG1lc3NhZ2UpOgorI3wgICBUaGUgaW1wb3J0ZWQgdGFyZ2V0ICJRdDU6OkNvcmUiIHJlZmVyZW5jZXMgdGhlIGZpbGUKKyN8CisjfCAgICAgICIvcW1ha2UiCisjfAorI3wgICBidXQgdGhpcyBmaWxlIGRvZXMgbm90IGV4aXN0LiAgUG9zc2libGUgcmVhc29ucyBpbmNsdWRlOgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgJ3MvXmZpbmRfcGFja2FnZShRdDVDb3JlIFFVSUVUKSQvI2ZpbmRfcGFja2FnZShRdDVDb3JlIFFVSUVUKS9nJyAke1N9L1Rlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdDRBbmQ1QXV0b21vYy9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCBOT19NT0RVTEUpLyMgIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUIE5PX01PRFVMRSkvZycgJHtTfS9UZXN0cy9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUVVJRVQpLyNmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCkvZycgJHtTfS9Tb3VyY2UvUXREaWFsb2cvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0QXV0b1VpY0ludGVyZmFjZS9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXRBdXRvZ2VuL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9nZW4vYXV0b3JjY19kZXBlbmRzL0NNYWtlTGlzdHMudHh0Cit9CisKKyMgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byBjbWFrZSBpbnZva2VkIGJ5IGJvb3RzdHJhcAorQ01BS0VfRVhUUkFDT05GID0gIiIKKworZG9fY29uZmlndXJlICgpIHsKKwkke1N9L2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gLS0gJHtDTUFLRV9FWFRSQUNPTkZ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDE0YmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZQpAQCAtMCwwICsxLDE4IEBACitzZXQoIENNQUtFX1NZU1RFTV9OQU1FIExpbnV4ICkKK3NldCggQ01BS0VfQ19GTEFHUyAkRU5We0NGTEFHU30gQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKK3NldCggQ01BS0VfQ1hYX0ZMQUdTICRFTlZ7Q1hYRkxBR1N9ICBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRSBBU01fRkxBR1MgJHtDTUFLRV9DX0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRV9MREZMQUdTX0ZMQUdTICR7Q01BS0VfQ1hYX0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAkRU5We09FQ09SRV9UQVJHRVRfU1lTUk9PVH0gJEVOVntPRUNPUkVfTkFUSVZFX1NZU1JPT1R9ICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNIE5FVkVSICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCisKK3N0cmluZyhSRUdFWCBNQVRDSCAic3lzcm9vdHMvKFthLXpBLVowLTldKykiIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJEVOVntTREtUQVJHRVRTWVNST09UfSkKK3N0cmluZyhSRUdFWCBSRVBMQUNFICJzeXNyb290cy8iICIiIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfSkKKworIyBJbmNsdWRlIHRoZSB0b29sY2hhaW4gY29uZmlndXJhdGlvbiBzdWJzY3JpcHRzCitmaWxlKCBHTE9CIHRvb2xjaGFpbl9jb25maWdfZmlsZXMgIiR7Q01BS0VfVE9PTENIQUlOX0ZJTEV9LmQvKi5jbWFrZSIgKQorZm9yZWFjaChjb25maWcgJHt0b29sY2hhaW5fY29uZmlnX2ZpbGVzfSkKKyAgICBpbmNsdWRlKCR7Y29uZmlnfSkKK2VuZGZvcmVhY2goKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzY3MTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Rpc2FibGUgdXNlIG9mIGV4dDJmcy9leHQyX2ZzLmggYnkgY21ha2UncyBpbnRlcm5hbCBsaWJhcmNoaXZlIGNvcHkKKworV2UgZG9uJ3Qgd2FudCB0byBhZGQgYSBkZXBlbmRlbmN5IG9uIGUyZnNwcm9ncy1uYXRpdmUgZm9yIGNtYWtlLW5hdGl2ZSwKK2FuZCB3ZSBkb24ndCB1c2UgQ1BhY2sgc28ganVzdCBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCistLS0gYS9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CisrKysgYi9VdGlsaXRpZXMvY21saWJhcmNoaXZlL0NNYWtlTGlzdHMudHh0CitAQCAtMjM3LDEyICsyMzcsOCBAQCBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImNvcHlmaWxlLmgiIEhBVkVfQ09QWUZJTEVfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImRpcmVjdC5oIiBIQVZFX0RJUkVDVF9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZGxmY24uaCIgSEFWRV9ETEZDTl9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZXJybm8uaCIgSEFWRV9FUlJOT19IKQorLUxBX0NIRUNLX0lOQ0xVREVfRklMRSgiZXh0MmZzL2V4dDJfZnMuaCIgSEFWRV9FWFQyRlNfRVhUMl9GU19IKQorLQorLUNIRUNLX0NfU09VUkNFX0NPTVBJTEVTKCIjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CistI2luY2x1ZGUgPGV4dDJmcy9leHQyX2ZzLmg+CistaW50IG1haW4odm9pZCkgeyByZXR1cm4gRVhUMl9JT0NfR0VURkxBR1M7IH0iIEhBVkVfV09SS0lOR19FWFQyX0lPQ19HRVRGTEFHUykKKy0KKytTRVQoSEFWRV9FWFQyRlNfRVhUMl9GU19IIDApCisrU0VUKEhBVkVfV09SS0lOR19FWFQyX0lPQ19HRVRGTEFHUyAwKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZmNudGwuaCIgSEFWRV9GQ05UTF9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiZ3JwLmgiIEhBVkVfR1JQX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJpbnR0eXBlcy5oIiBIQVZFX0lOVFRZUEVTX0gpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9kb250LXJ1bi1jcm9zcy1iaW5hcmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9kb250LXJ1bi1jcm9zcy1iaW5hcmllcy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitjbWFrZTogZG9uJ3QgcnVuIGNyb3NzLWJpbmFyaWVzIG9uIGhvc3QgbWFjaGluZQorCitXaGVuIGRvaW5nIHRoZSBjcm9zcyBidWlsZCB3ZSBvYnZpb3VzbHkgY2Fubm90IHJ1biB0aG9zZSBiaW5hcmllcyBvbgoraG9zdCBzaW5jZSB0aGV5IGNhbiBiZSBiaW5hcnkgaW5jb21wYXRpYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorCitJbmRleDogY21ha2UtMi44LjEwLjEvQ01ha2VMaXN0cy50eHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjbWFrZS0yLjguMTAuMS5vcmlnL0NNYWtlTGlzdHMudHh0CisrKysgY21ha2UtMi44LjEwLjEvQ01ha2VMaXN0cy50eHQKK0BAIC01ODgsNyArNTg4LDggQEAgbWFya19hc19hZHZhbmNlZChDTUFLRV9TVFJJQ1QpCisgCisgIyBidWlsZCB0aGUgcmVtYWluaW5nIHN1YmRpcmVjdG9yaWVzCisgYWRkX3N1YmRpcmVjdG9yeShTb3VyY2UpCistYWRkX3N1YmRpcmVjdG9yeShVdGlsaXRpZXMpCisrIyBDb21lIG9uISBSdW5uaW5nIHRoZSBjcm9zcy1iaW5hcmllcyBvbiBob3N0IGlzIG5vdCBhIGdvb2QgaWRlYS4KKysjYWRkX3N1YmRpcmVjdG9yeShVdGlsaXRpZXMpCisgYWRkX3N1YmRpcmVjdG9yeShUZXN0cykKKyAKKyBpZihCVUlMRF9URVNUSU5HKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZW52aXJvbm1lbnQuZC1jbWFrZS5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2Vudmlyb25tZW50LmQtY21ha2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViNTZiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2Vudmlyb25tZW50LmQtY21ha2Uuc2gKQEAgLTAsMCArMSBAQAorYWxpYXMgY21ha2U9ImNtYWtlIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3Ivc2hhcmUvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmYzI3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitGYWlsIHNpbGVudGx5IGlmIHN5c3RlbSBRdCBpbnN0YWxsYXRpb24gaXMgYnJva2VuCisKK0ZpeGVzIGEgcmVncmVzc2lvbiBpbiBiZWhhdmlvdXIgZnJvbSAyLjguMTAgdG8gMi44LjExIHJlc3VsdGluZyBpbiB0aGUKK2ZvbGxvd2luZyBlcnJvciBpZiB0aGUgc3lzdGVtIFF0IGluc3RhbGxhdGlvbiBpcyBicm9rZW46CisKK0NNYWtlIEVycm9yIGF0IE1vZHVsZXMvRmluZFF0NC5jbWFrZToxMDI4IChzZXRfcHJvcGVydHkpOgorICBzZXRfcHJvcGVydHkgY291bGQgbm90IGZpbmQgVEFSR0VUIFF0NDo6UXRDb3JlLiAgUGVyaGFwcyBpdCBoYXMgbm90IHlldAorICBiZWVuIGNyZWF0ZWQuCitDYWxsIFN0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KToKKyAgVGVzdHMvUnVuQ01ha2UvQ01ha2VMaXN0cy50eHQ6NzkgKGZpbmRfcGFja2FnZSkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitUaGUgcGF0Y2ggd2FzIHNsaWdodGx5IGFkYXB0ZWQgaW4gb3JkZXIgdG8gbWF0Y2ggY21ha2UgMy4yLjI6CitBbm90aGVyIHNldF9wcm9wZXJ0eSB3YXMgaW50cm9kdWNlZCB3aGljaCBoYWQgdG8gYmUgaW5jbHVkZWQKK3dpdGhpbiB0aGUgaWYoUVRfUVRDT1JFX0ZPVU5EKSBzdGF0ZW1lbnQuCisKK1NpZ25lZC1vZmYtYnk6IE1vcml0eiBCbHVtZSA8bW9yaXR6LmJsdW1lQGJtdy1jYXJpdC5kZT4KKy0tLQorIE1vZHVsZXMvRmluZFF0NC5jbWFrZSB8IDM5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFF0NC5jbWFrZSBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQoraW5kZXggNjcwNDc2OS4uOTA0OGUzNSAxMDA2NDQKKy0tLSBhL01vZHVsZXMvRmluZFF0NC5jbWFrZQorKysrIGIvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCitAQCAtMTAwMCwyNSArMTAwMCwyNiBAQCBpZiAoUVRfUU1BS0VfRVhFQ1VUQUJMRSBBTkQKKyAgICAgZW5kaWYoKQorICAgZW5kbWFjcm8oKQorIAorLQorLSAgIyBTZXQgUVRfeHl6X0xJQlJBUlkgdmFyaWFibGUgYW5kIGFkZAorLSAgIyBsaWJyYXJ5IGluY2x1ZGUgcGF0aCB0byBRVF9JTkNMVURFUworLSAgX1FUNF9BREpVU1RfTElCX1ZBUlMoUXRDb3JlKQorLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKy0gICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMKKy0gICAgICAiJHtRVF9NS1NQRUNTX0RJUn0vZGVmYXVsdCIKKy0gICAgICAke1FUX0lOQ0xVREVfRElSfQorLSAgKQorLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKy0gICAgSU5URVJGQUNFX0NPTVBJTEVfREVGSU5JVElPTlMKKy0gICAgICAkPCQ8Tk9UOiQ8Q09ORklHOkRlYnVnPj46UVRfTk9fREVCVUc+CistICApCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIFBST1BFUlRZCistICAgIElOVEVSRkFDRV9RVF9NQUpPUl9WRVJTSU9OIDQKKy0gICkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCistICAgIENPTVBBVElCTEVfSU5URVJGQUNFX1NUUklORyBRVF9NQUpPUl9WRVJTSU9OCistICApCisrICBpZihRVF9RVENPUkVfRk9VTkQpCisrICAgICMgU2V0IFFUX3h5el9MSUJSQVJZIHZhcmlhYmxlIGFuZCBhZGQKKysgICAgIyBsaWJyYXJ5IGluY2x1ZGUgcGF0aCB0byBRVF9JTkNMVURFUworKyAgICBfUVQ0X0FESlVTVF9MSUJfVkFSUyhRdENvcmUpCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCisrICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMKKysgICAgICAgICIke1FUX01LU1BFQ1NfRElSfS9kZWZhdWx0IgorKyAgICAgICAgJHtRVF9JTkNMVURFX0RJUn0KKysgICAgKQorKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorKyAgICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TCisrICAgICAgICAkPCQ8Tk9UOiQ8Q09ORklHOkRlYnVnPj46UVRfTk9fREVCVUc+CisrICAgICkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBQUk9QRVJUWQorKyAgICAgIElOVEVSRkFDRV9RVF9NQUpPUl9WRVJTSU9OIDQKKysgICAgKQorKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorKyAgICAgIENPTVBBVElCTEVfSU5URVJGQUNFX1NUUklORyBRVF9NQUpPUl9WRVJTSU9OCisrICAgICkKKysgIGVuZGlmKCkKKyAKKyAgIGZvcmVhY2goUVRfTU9EVUxFICR7UVRfTU9EVUxFU30pCisgICAgIF9RVDRfQURKVVNUX0xJQl9WQVJTKCR7UVRfTU9EVUxFfSkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2Uvc3VwcG9ydC1vZS1xdDQtdG9vbHMtbmFtZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWNiY2E4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2Uvc3VwcG9ydC1vZS1xdDQtdG9vbHMtbmFtZXMucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorY21ha2U6IHN1cHBvcnQgT3BlbkVtYmVkZGVkIFF0NCB0b29sIGJpbmFyeSBuYW1lcworCitUaGUgRmluZFF0NCBtb2R1bGUgbG9va3MgZm9yIFF0NCBiaW5hcmllcyB0byBiZSBhYmxlIHRvIGdhdGhlciB0aGUKK3BhdGhzIHVzZWQgZm9yIGNvbXBpbGF0aW9uIGFuZCBhbHNvIHRvIGJlIHVzaW5nIGR1cmluZyBvdGhlciBwcm9jZXNzZXMKKyh0cmFuc2xhdGlvbiB1cGRhdGUsIHRyYW5zbGF0aW9uIGJpbmFyeSBnZW5lcmF0aW5nIGFuZCBsaWtlKSBob3dldmVyCitPcGVuRW1iZWRkZWQgaGFzIHJlbmFtZWQgdGhvc2UgdG8gYWxsb3cgb2xkIFFNYWtlIHRvIGJlIHVzZWQgaW4KK3BhcmFsbGVsIHdpdGggdGhlIGN1cnJlbnQgb25lLiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlCitPcGVuRW1iZWRkZWQgc3BlY2lmaWMgYmluYXJ5IG5hbWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorCitUaGUgcGF0Y2ggd2FzIHNsaWdodGx5IGFkYXB0ZWQgaW4gb3JkZXIgdG8gbWF0Y2ggY21ha2UgMy4yLjI6CitJbnN0ZWFkIG9mIGZpbmRfcHJvZ3JhbSwgX2ZpbmRfcXQ0X3Byb2dyYW0gaXMgbm93IHVzZWQuCisKK1NpZ25lZC1vZmYtYnk6IE1vcml0eiBCbHVtZSA8bW9yaXR6LmJsdW1lQGJtdy1jYXJpdC5kZT4KKy0tLQorIE1vZHVsZXMvRmluZFF0NC5jbWFrZSB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlIGIvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCitpbmRleCAxMTA5MWI1Li42NzA0NzY5IDEwMDY0NAorLS0tIGEvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCisrKysgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK0BAIC01MjIsNyArNTIyLDcgQEAgZW5kZnVuY3Rpb24oKQorIAorIHNldChRVDRfSU5TVEFMTEVEX1ZFUlNJT05fVE9PX09MRCBGQUxTRSkKKyAKKy1zZXQoX1FUNF9RTUFLRV9OQU1FUyBxbWFrZSBxbWFrZTQgcW1ha2UtcXQ0IHFtYWtlLW1hYykKKytzZXQoX1FUNF9RTUFLRV9OQU1FUyBxbWFrZSBxbWFrZTIgcW1ha2U0IHFtYWtlLXF0NCBxbWFrZS1tYWMpCisgX3F0NF9maW5kX3FtYWtlKCIke19RVDRfUU1BS0VfTkFNRVN9IiBRVF9RTUFLRV9FWEVDVVRBQkxFIFFUVkVSU0lPTikKKyAKKyBpZiAoUVRfUU1BS0VfRVhFQ1VUQUJMRSBBTkQKK0BAIC0xMTQ4LDEyICsxMTQ4LDEyIEBAIGlmIChRVF9RTUFLRV9FWEVDVVRBQkxFIEFORAorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTU9DX0VYRUNVVEFCTEUgUXQ0Ojptb2MgbW9jLXF0NCBtb2M0IG1vYykKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX1VJQ19FWEVDVVRBQkxFIFF0NDo6dWljIHVpYy1xdDQgdWljNCB1aWMpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9VSUMzX0VYRUNVVEFCTEUgUXQ0Ojp1aWMzIHVpYzMpCistICBfZmluZF9xdDRfcHJvZ3JhbShRVF9SQ0NfRVhFQ1VUQUJMRSBRdDQ6OnJjYyByY2MpCistICBfZmluZF9xdDRfcHJvZ3JhbShRVF9EQlVTQ1BQMlhNTF9FWEVDVVRBQkxFIFF0NDo6cWRidXNjcHAyeG1sIHFkYnVzY3BwMnhtbCkKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNYTUwyQ1BQX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c3htbDJjcHAgcWRidXN4bWwyY3BwKQorKyAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfUkNDX0VYRUNVVEFCTEUgUXQ0OjpyY2MgcmNjNCByY2MpCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9EQlVTQ1BQMlhNTF9FWEVDVVRBQkxFIFF0NDo6cWRidXNjcHAyeG1sIHFkYnVzY3BwMnhtbDQgcWRidXNjcHAyeG1sKQorKyAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU1hNTDJDUFBfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzeG1sMmNwcCBxZGJ1c3htbDJjcHA0IHFkYnVzeG1sMmNwcCkKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0xVUERBVEVfRVhFQ1VUQUJMRSBRdDQ6Omx1cGRhdGUgbHVwZGF0ZS1xdDQgbHVwZGF0ZTQgbHVwZGF0ZSkKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0xSRUxFQVNFX0VYRUNVVEFCTEUgUXQ0OjpscmVsZWFzZSBscmVsZWFzZS1xdDQgbHJlbGVhc2U0IGxyZWxlYXNlKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfUUNPTExFQ1RJT05HRU5FUkFUT1JfRVhFQ1VUQUJMRSBRdDQ6OnFjb2xsZWN0aW9uZ2VuZXJhdG9yIHFjb2xsZWN0aW9uZ2VuZXJhdG9yLXF0NCBxY29sbGVjdGlvbmdlbmVyYXRvcikKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX1FDT0xMRUNUSU9OR0VORVJBVE9SX0VYRUNVVEFCTEUgUXQ0OjpxY29sbGVjdGlvbmdlbmVyYXRvciBxY29sbGVjdGlvbmdlbmVyYXRvci1xdDQgcWNvbGxlY3Rpb25nZW5lcmF0b3IgcWNvbGxlY3Rpb25nZW5lcmF0b3I0KQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREVTSUdORVJfRVhFQ1VUQUJMRSBRdDQ6OmRlc2lnbmVyIGRlc2lnbmVyLXF0NCBkZXNpZ25lcjQgZGVzaWduZXIpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9MSU5HVUlTVF9FWEVDVVRBQkxFIFF0NDo6bGluZ3Vpc3QgbGluZ3Vpc3QtcXQ0IGxpbmd1aXN0NCBsaW5ndWlzdCkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE4OGYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2VfMy4zLjEuYmIKQEAgLTAsMCArMSw1MyBAQAorcmVxdWlyZSBjbWFrZS5pbmMKKworaW5oZXJpdCBjbWFrZQorCitERVBFTkRTICs9ICJjdXJsIGV4cGF0IHpsaWIgbGliYXJjaGl2ZSB4eiBuY3Vyc2VzIGJ6aXAyIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIFwKKyAgICBmaWxlOi8vT0VUb29sY2hhaW5Db25maWcuY21ha2UgXAorICAgIGZpbGU6Ly9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIgorCisjIFN0cmlwICR7cHJlZml4fSBmcm9tICR7ZG9jZGlyfSwgc2V0IHJlc3VsdCBpbnRvIGRvY2Rpcl9zdHJpcHBlZAorcHl0aG9uICgpIHsKKyAgICBwcmVmaXg9ZC5nZXRWYXIoInByZWZpeCIsIFRydWUpCisgICAgZG9jZGlyPWQuZ2V0VmFyKCJkb2NkaXIiLCBUcnVlKQorCisgICAgaWYgbm90IGRvY2Rpci5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ2RvY2RpciBtdXN0IGNvbnRhaW4gcHJlZml4IGFzIGl0cyBwcmVmaXgnKQorCisgICAgZG9jZGlyX3N0cmlwcGVkID0gZG9jZGlyW2xlbihwcmVmaXgpOl0KKyAgICBpZiBsZW4oZG9jZGlyX3N0cmlwcGVkKSA+IDAgYW5kIGRvY2Rpcl9zdHJpcHBlZFswXSA9PSAnLyc6CisgICAgICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2Rpcl9zdHJpcHBlZFsxOl0KKworICAgIGQuc2V0VmFyKCJkb2NkaXJfc3RyaXBwZWQiLCBkb2NkaXJfc3RyaXBwZWQpCit9CisKK0VYVFJBX09FQ01BS0U9IiBcCisgICAgLURDTUFLRV9ET0NfRElSPSR7ZG9jZGlyX3N0cmlwcGVkfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9CWklQMj0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9DVVJMPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0VYUEFUPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0ZPUk09MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCQVJDSElWRT0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9MSUJMWk1BPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX1pMSUI9MSBcCisgICAgLURLV1NZU19DSEFSX0lTX1NJR05FRD0xIFwKKyAgICAtREJVSUxEX0N1cnNlc0RpYWxvZz0wIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICctREtXU1lTX0xGU19XT1JLUz0xJywgJy1ES1dTWVNfTEZTX0RJU0FCTEU9MScsIGQpfSBcCisiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9jbWFrZQorICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vT0VUb29sY2hhaW5Db25maWcuY21ha2UgJHtEfSR7ZGF0YWRpcn0vY21ha2UvCisKKyAgICBta2RpciAtcCAke0R9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kCisgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoICR7RH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQvY21ha2Uuc2gKK30KKworRklMRVNfJHtQTn1fYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgJHtTREtQQVRITkFUSVZFfSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkb2NkaXJ9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGVza3RvcC1maWxlLXV0aWxzL2Rlc2t0b3AtZmlsZS11dGlscy1uYXRpdmVfMC4yMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3MzU2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjIuYmIKQEAgLTAsMCArMSwxNiBAQAorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorU1VNTUFSWSA9ICJDb21tYW5kIGxpbmUgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggKi5kZXNrdG9wIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9kZXNrdG9wLWZpbGUtdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvZGVza3RvcC1maWxlLXV0aWxzL3JlbGVhc2VzL2Rlc2t0b3AtZmlsZS11dGlscy0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNmI5ZjlhYWMxZWExNDMwOTExNzhjMjM0MzdlNmNkMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4NDM1MzI2NzI2OTJmOThlOWIyZDZhZTZjYzg2NThkYTU2MmRmZGUxNjA2YzdmMzNkOWQyMjdhMzQ0ZGU1NmM1IgorCitpbmhlcml0IGF1dG90b29scyBuYXRpdmUKKworUyA9ICIke1dPUktESVJ9L2Rlc2t0b3AtZmlsZS11dGlscy0ke1BWfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9kaXN0Y2MtY29uZmlnLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3ODMwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9kaXN0Y2MtY29uZmlnLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiU2V0cyB1cCBkaXN0Y2MgZm9yIGNvbXBpbGF0aW9uIG9uIHRoZSB0YXJnZXQgZGV2aWNlIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9kaXN0Y2Muc2giCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBEZWZhdWx0IHRvIHRoZSBob3N0IG1hY2hpbmUgZm9yIGEgcnVubmluZyBxZW11IHNlc3Npb24KK0RJU1RDQ19IT1NUUyA/PSAiMTkyLjE2OC43LjEiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlzZWQgLWkgInMlQERJU1RDQ19IT1NUU0AlJHtESVNUQ0NfSE9TVFN9JSIgZGlzdGNjLnNoCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQKKwlpbnN0YWxsIC1tIDA3NTUgZGlzdGNjLnNoICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KK30KKworUkRFUEVORFNfJHtQTn0gPSAiZGlzdGNjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjA1OTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2gKQEAgLTAsMCArMSw0IEBACitESVNUQ0NfSE9TVFM9IkBESVNUQ0NfSE9TVFNAIgorI0RJU1RDQ19WRVJCT1NFPSIxIgorCitleHBvcnQgRElTVENDX0hPU1RTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL25mcy1leHBvcnQtcm9vdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjlkMDA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL25mcy1leHBvcnQtcm9vdC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkNvbmZpZ3VyYXRpb24gc2NyaXB0IHRvIGV4cG9ydCB0YXJnZXQgcm9vdGZzIGZpbGVzeXN0ZW0iCitERVNDUklQVElPTiA9ICJFbmFibGVzIE5GUyBhY2Nlc3MgZnJvbSBhbnkgaG9zdCB0byB0aGUgZW50aXJlIGZpbGVzeXN0ZW0gKGZvciBkZXZlbG9wbWVudCBwdXJwb3NlcykuIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZmlsZTovL2V4cG9ydHMiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IGV4cG9ydHMgJHtEfSR7c3lzY29uZmRpcn0vCit9CisKK1JERVBFTkRTXyR7UE59ID0gInBhY2thZ2Vncm91cC1jb3JlLW5mcy1zZXJ2ZXIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1M2M1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cwpAQCAtMCwwICsxIEBACisvICoocncsbm9fcm9vdF9zcXVhc2gsYXN5bmMsbm9fc3VidHJlZV9jaGVjaykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM2YjNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKKy4vdGVzdGluZy9ydW5fdGVzdC5zaCAuL3Rlc3RpbmcvY2FzZSoucGF0IHxzZWQgXAorICAtZSAnc3wqKiBva3xQQVNTfCcgXAorICAtZSAnc3w/PyBmYWlsfEZBSUx8JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXRfMS42MC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0XzEuNjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViYTRkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0XzEuNjAuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJUb29sIHRvIHByb2R1Y2UgYSBzdGF0aXN0aWNzIGJhc2VkIG9uIGEgZGlmZiIKK0RFU0NSSVBUSU9OID0gImRpZmZzdGF0IHJlYWRzIHRoZSBvdXRwdXQgb2YgZGlmZiBhbmQgZGlzcGxheXMgYSBoaXN0b2dyYW0gb2YgXAordGhlIGluc2VydGlvbnMsIGRlbGV0aW9ucywgYW5kIG1vZGlmaWNhdGlvbnMgcGVyLWZpbGUuIEl0IGlzIHVzZWZ1bCBmb3IgXAorcmV2aWV3aW5nIGxhcmdlLCBjb21wbGV4IHBhdGNoIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWZmc3RhdC8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pbnN0YWxsLXNoO2VuZGxpbmU9NDI7bWQ1PWIzNTQ5NzI2YzEwMjJiZWUwOWMxNzRjNzJhMGNhNGE1IgorCitTUkNfVVJJID0gImZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2RpZmZzdGF0L2RpZmZzdGF0LSR7UFZ9LnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmE4ODlkYTRjMDZiNTQ3YWEyZDc4ZmE5NjgwMGFlNmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjAzMmU0MThiNDNiYWU3MGQ1NDhlMzJkYTkwMWViYzRhYzEyOTcyMzgxZGUxMzE0YmViZGUwYjEyNmZiMDEyMyIKKworUyA9ICIke1dPUktESVJ9L2RpZmZzdGF0LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB0ZXN0CisKK0xERkxBR1MgKz0gIiR7VE9PTENIQUlOX09QVElPTlN9IgorCitkb19jb25maWd1cmUgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCW12ICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAorCWZpCisJYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1yICR7U30vdGVzdGluZyAke0R9JHtQVEVTVF9QQVRIfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2Rpc3RjY18zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg3OWM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2Rpc3RjY18zLjEuYmIKQEAgLTAsMCArMSw3NCBAQAorU1VNTUFSWSA9ICJBIHBhcmFsbGVsIGJ1aWxkIHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gImRpc3RjYyBpcyBhIHBhcmFsbGVsIGJ1aWxkIHN5c3RlbSB0aGF0IGRpc3RyaWJ1dGVzIFwKK2NvbXBpbGF0aW9uIG9mIEMvQysrL09iakMgY29kZSBhY3Jvc3MgbWFjaGluZXMgb24gYSBuZXR3b3JrLiIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiYXZhaGkiCisKK0dUS0NPTkZJRyA9ICJndGsiCitHVEtDT05GSUdfbGliYy11Y2xpYmMgPSAiIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJHtHVEtDT05GSUd9JywgJycsIGQpfSBwb3B0IgorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0td2l0aC1ndGssLS13aXRob3V0LWd0ayAtLXdpdGhvdXQtZ25vbWUsZ3RrKyIKKyMgdXNlIHN5c3RlbSBwb3B0IGJ5IGRlZmF1bHQKK1BBQ0tBR0VDT05GSUdbcG9wdF0gPSAiLS13aXRob3V0LWluY2x1ZGVkLXBvcHQsLS13aXRoLWluY2x1ZGVkLXBvcHQscG9wdCIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiYXZhaGktZGFlbW9uIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZGlzdGNjL2Rpc3RjYy5naXQgXAorICAgICAgICAgICBmaWxlOi8vc2VwYXJhdGVidWlsZGRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc3RjYyBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2Muc2VydmljZSIKK1NSQ1JFViA9ICI5YTE3MmQzZDIwMDQyNzU0YTMwYzBjZDlhNWQ2M2ZkMWE4MTIwYzMxIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHVzZXJhZGQgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1XZXJyb3IgUFlUSE9OPS9kZXYvbnVsbCIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gXAorICAgICAgICAgICAgICAgICAgICAgICAtLWhvbWUgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZ2lkIG5vZ3JvdXAgXAorICAgICAgICAgICAgICAgICAgICAgICBkaXN0Y2MiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJkaXN0Y2MiCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiZGlzdGNjLnNlcnZpY2UiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Rpc3RjYyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Rpc3RjYworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGlzdGNjLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICBzZWQgLWkgLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rpc3RjYy5zZXJ2aWNlCisgICAgJHtERVNLVE9QSU5TVEFMTH0KK30KK0RFU0tUT1BJTlNUQUxMID0gIiIKK0RFU0tUT1BJTlNUQUxMX2xpYmMtZ2xpYmMgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZGlzdGNjLworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2Rpc3RjYy8KK30KK1BBQ0tBR0VTICs9ICJkaXN0Y2MtZGlzdG1vbi1nbm9tZSIKKworRklMRVNfJHtQTn0gPSAiICR7c3lzY29uZmRpcn0gXAorCQkke2JpbmRpcn0vZGlzdGNjIFwKKyAgICAke2JpbmRpcn0vbHNkaXN0Y2MgXAorCQkke2JpbmRpcn0vZGlzdGNjZCBcCisJCSR7YmluZGlyfS9kaXN0Y2Ntb24tdGV4dCBcCisJCSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGlzdGNjLnNlcnZpY2UiCitGSUxFU19kaXN0Y2MtZGlzdG1vbi1nbm9tZSA9ICIgICR7YmluZGlyfS9kaXN0Y2Ntb24tZ25vbWUgXAorCQkJCSR7ZGF0YWRpcn0vZGlzdGNjIgorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlkZWx1c2VyIGRpc3RjYyB8fCB0cnVlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZWM5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDgzMzFmYzQ3NTlkODA5NTEyZjQwNGU3YTI3ZjgxN2FkNmQ2MTY0NTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxODowMDozMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSB6ZXJvY29uZjogSW5jbHVkZSBmY250bC5oCisKK1dlIG5lZWQgaXQgZm9yIGdldHRpbmcgZGVpbml0aW9ucyBmb3IgT18qIGUuZy4gT19DUkVBVAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy96ZXJvY29uZi5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvemVyb2NvbmYuYyBiL3NyYy96ZXJvY29uZi5jCitpbmRleCA0MTRkZGM0Li4zMWJkMzNmIDEwMDY0NAorLS0tIGEvc3JjL3plcm9jb25mLmMKKysrKyBiL3NyYy96ZXJvY29uZi5jCitAQCAtMzMsNiArMzMsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorIAorICNpbmNsdWRlIDxhdmFoaS1jb21tb24vZG9tYWluLmg+CisgI2luY2x1ZGUgPGF2YWhpLWNvbW1vbi9lcnJvci5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGVmYXVsdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzQxNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGVmYXVsdApAQCAtMCwwICsxLDI0IEBACisjIERlZmF1bHRzIGZvciBkaXN0Y2MgaW5pdHNjcmlwdAorIyBzb3VyY2VkIGJ5IC9ldGMvaW5pdC5kL2Rpc3RjYworCisjCisjIHNob3VsZCBkaXN0Y2MgYmUgc3RhcnRlZCBvbiBib290PworIworIyBTVEFSVERJU1RDQz0idHJ1ZSIKKworU1RBUlRESVNUQ0M9InRydWUiCisKKyMKKyMgV2hpY2ggbmV0d29ya3MvaG9zdHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgZGFlbW9uPworIyBZb3UgY2FuIGxpc3QgbXVsdGlwbGUgaG9zdHMvbmV0d29ya3Mgc2VwYXJhdGVkIGJ5IHNwYWNlcy4KKyMgTmV0d29ya3MgaGF2ZSB0byBiZSBpbiBDSURSIG5vdGF0aW9uLCBmLmUuIDE5Mi4xNjguMS4wLzI0CisjIEhvc3RzIGFyZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBJUCBBZHJlc3MKKyMKKyMgQUxMT1dFRE5FVFM9IjEyNy4wLjAuMSIKKworQUxMT1dFRE5FVFM9IjE5Mi4xNjguNy4wLzI0IgorCisjCisjIE9QVElPTlMgaXMgdXNlZCBmb3IgdGhlIHN5c3RlbWQgc2VydmljZSBmaWxlCisjCitPUFRJT05TPSItLWFsbG93IDE5Mi4xNjguNy4wLzI0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM2ZjBmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2MKQEAgLTAsMCArMSwxMTkgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgZGlzdGNjCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgUmVxdWlyZWQtU3RvcDogICAgICRyZW1vdGVfZnMgJHN5c2xvZworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMQorIyBTaG9ydC1EZXNjcmlwdGlvbjogc2ltcGxlIGRpc3RyaWJ1dGVkIGNvbXBpbGVyIGNsaWVudCBhbmQgc2VydmVyCisjIyMgRU5EIElOSVQgSU5GTworIworIyBkaXN0Y2NkIERlYmlhbiBpbml0LmQgc2NyaXB0IGNvbnRyaWJ1dGVkIGJ5IEphc29uIFRob21hcy4gIChEZWJpYW4gIzE2MTEzNikKKyMKKyMgc2tlbGV0b24JZXhhbXBsZSBmaWxlIHRvIGJ1aWxkIC9ldGMvaW5pdC5kLyBzY3JpcHRzLgorIwkJVGhpcyBmaWxlIHNob3VsZCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBzY3JpcHRzIGZvciAvZXRjL2luaXQuZC4KKyMKKyMJCVdyaXR0ZW4gYnkgTWlxdWVsIHZhbiBTbW9vcmVuYnVyZyA8bWlxdWVsc0BjaXN0cm9uLm5sPi4KKyMJCU1vZGlmaWVkIGZvciBEZWJpYW4gR05VL0xpbnV4CisjCQlieSBJYW4gTXVyZG9jayA8aW11cmRvY2tAZ251LmFpLm1pdC5lZHU+LgorIworIyBWZXJzaW9uOglAKCMpc2tlbGV0b24gIDEuOS4xICAwOC1BcHItMjAwMiAgbWlxdWVsc0BjaXN0cm9uLm5sCisjCisKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitEQUVNT049L3Vzci9iaW4vZGlzdGNjZAorTkFNRT1kaXN0Y2MKK0RFU0M9IkRpc3RyaWJ1dGVkIENvbXBpbGVyIERhZW1vbiIKK0RBRU1PTl9BUkdTPSItLXBpZC1maWxlPS92YXIvcnVuLyROQU1FLnBpZCAtLWRhZW1vbiIKKyMgcGxlYXNlIGNoYW5nZSB0aG9zZSB2YXJpYWJsZXMgYnkgb3ZlcnJpZGluZyB0aGVtIGluIC9ldGMvZGVmYXVsdHMvZGlzdGNjCitBTExPV0VETkVUUz0iMTI3LjAuMC4xIgorCisjIFJlYWRzIGNvbmZpZyBmaWxlICh3aWxsIG92ZXJyaWRlIGRlZmF1bHRzIGFib3ZlKQorWyAtciAvZXRjL2RlZmF1bHQvZGlzdGNjIF0gJiYgLiAvZXRjL2RlZmF1bHQvZGlzdGNjCisKK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworc2V0IC1lCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCisjIGNvbnN0cnVjdCBhY2Nlc3MgbGlzdAorQUxMT1c9IiIKK2ZvciBuZXQgaW4gJEFMTE9XRURORVRTCitkbworCUFMTE9XPSIkQUxMT1cgLS1hbGxvdyAkbmV0IgorZG9uZQorCitzaG91bGRfc3RhcnQoKSB7CisJaWYgWyAiJFNUQVJURElTVENDIiAhPSAidHJ1ZSIgXSAmJiBbICIkU1RBUlRESVNUQ0MiICE9ICJZRVMiIF07IHRoZW4KKwkJZWNobyAiU1RBUlRESVNUQ0MgaXMgc2V0IHRvIGZhbHNlIGluIC9ldGMvZGVmYXVsdC9kaXN0Y2MiCisJCWVjaG8gIiREQUVNT04gbm90IHN0YXJ0aW5nIgorCQlleGl0IDAKKwlmaQorCSMgd2UgbmVlZCBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIHRoZSBwaWQgZmlsZQorCXRvdWNoIC92YXIvcnVuLyROQU1FLnBpZAorCWNob3duIGRpc3RjYyAvdmFyL3J1bi8kTkFNRS5waWQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCXNob3VsZF9zdGFydAorCWVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAkTkFNRSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJLS1leGVjICREQUVNT04gLS0gJERBRU1PTl9BUkdTICRBTExPVyB8fAorCXsKKwkgICAgY29kZT0kPworCSAgICBlY2hvICIkMDogc3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAkY29kZSIgPiYyCisJICAgIGV4aXQgJGNvZGUKKwl9CisJZWNobyAiLiIKKwk7OworICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nICRERVNDOiAkTkFNRSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwkJLS1leGVjICREQUVNT04gfHwKKwl7CisJICAgIGNvZGU9JD8KKwkgICAgZWNobyAiJDA6IHN0b3AgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAkY29kZSIgPiYyCisJICAgIGV4aXQgJGNvZGUKKwl9CisJcm0gLWYgL3Zhci9ydW4vJE5BTUUucGlkID4vZGV2L251bGwgMj4mMQorCWVjaG8gIi4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJIworCSMJSWYgdGhlICJyZWxvYWQiIG9wdGlvbiBpcyBpbXBsZW1lbnRlZCwgbW92ZSB0aGUgImZvcmNlLXJlbG9hZCIKKwkjCW9wdGlvbiB0byB0aGUgInJlbG9hZCIgZW50cnkgYWJvdmUuIElmIG5vdCwgImZvcmNlLXJlbG9hZCIgaXMKKwkjCWp1c3QgdGhlIHNhbWUgYXMgInJlc3RhcnQiLgorCSMKKwllY2hvIC1uICJSZXN0YXJ0aW5nICRERVNDOiAkTkFNRSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwkJLS1leGVjICREQUVNT04KKwlzbGVlcCAxCisJc2hvdWxkX3N0YXJ0CisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCQktLWV4ZWMgJERBRU1PTiAtLSAkREFFTU9OX0FSR1MgJEFMTE9XIHx8CisJeworCSAgICBjb2RlPSQ/CisJICAgIHJtIC1mIC92YXIvcnVuLyROQU1FLnBpZCA+L2Rldi9udWxsIDI+JjEKKwkgICAgZWNobyAiJDA6IHJlc3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAkY29kZSIgPiYyCisJICAgIGV4aXQgJGNvZGUKKwl9CisJZWNobyAiLiIKKwk7OworCisgICBzdGF0dXMpCisJc3RhdHVzICREQUVNT04KKwlleGl0ICQ/CisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfHN0YXR1c30iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMAorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjUzZGRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249RGlzdGNjZCBBIERpc3RyaWJ1dGVkIENvbXBpbGF0aW9uIFNlcnZlcgorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitVc2VyPWRpc3RjYworRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvZGlzdGNjCitFeGVjU3RhcnQ9QEJJTkRJUkAvZGlzdGNjZCAtLXZlcmJvc2UgLS1uby1kZXRhY2ggLS1kYWVtb24gJE9QVElPTlMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AKQEAgLTAsMCArMSwxMiBAQAorW0Rlc2t0b3AgRW50cnldCitWZXJzaW9uPTAuOS40CitFeGVjPWRpc3RjY21vbi1nbm9tZQorTmFtZT1kaXN0Y2MgbW9uaXRvcgorR2VuZXJpY05hbWU9RGlzdHJpYnV0ZWQgQ29tcGlsZSBNb25pdG9yCitDb21tZW50PUdyYXBoaWNhbCB2aWV3IG9mIGRpc3RyaWJ1dGVkIGNvbXBpbGUgdGFza3MKK0ljb249ZGlzdGNjbW9uLWdub21lLWljb24KK1RyeUV4ZWM9ZGlzdGNjbW9uLWdub21lCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HTk9NRTtEZXZlbG9wbWVudDsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL3NlcGFyYXRlYnVpbGRkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWUzZTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL3NlcGFyYXRlYnVpbGRkaXIucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorV2hlbiBidWlsZGluZyB3aXRoIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5LCBtYWtlIGluc3RhbGwgZmFpbHMsCit1bmFibGUgdG8gZmluZCB0aGUgZ25vbWVfZGF0YSBmaWxlcy4gVGhpcyBwYXRjaCBjb3JyZWN0cyB0aGUKK3BhdGNoIGFuZCBlbnN1cmVzIHRoZSBidWlsZCB3b3JrcyBpbiB0aGlzIGNhc2UuCisKK1JQIDIwMTMvMy84CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZGlzdGNjLTMuMS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRpc3RjYy0zLjEub3JpZy9NYWtlZmlsZS5pbgkyMDA4LTEyLTAyIDIxOjUwOjMxLjAwMDAwMDAwMCArMDAwMAorKysrIGRpc3RjYy0zLjEvTWFrZWZpbGUuaW4JMjAxMy0wMy0wOCAxMDo0OToyNC4yMjQ0MDA5MzcgKzAwMDAKK0BAIC0xMDg4LDcgKzEwODgsNyBAQAorIGluc3RhbGwtZ25vbWUtZGF0YTogJChnbm9tZV9kYXRhKQorIAkkKG1raW5zdGFsbGRpcnMpICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIKKyAJZm9yIHAgaW4gJChnbm9tZV9kYXRhKTsgZG8JCQkJXAorLQkkKElOU1RBTExfREFUQSkgIiQkcCIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0IDE7IFwKKysJJChJTlNUQUxMX0RBVEEpICIkKHNyY2RpcikvJCRwIiAiJChERVNURElSKSQocGtnZGF0YWRpcikiIHx8IGV4aXQgMTsgXAorIAlkb25lCisgCisgaW5zdGFsbC1jb25mOiAkKGNvbmZfZmlsZXMpICQoZGVmYXVsdF9maWxlcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE2NTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiRE1JIChEZXNrdG9wIE1hbmFnZW1lbnQgSW50ZXJmYWNlKSB0YWJsZSByZWxhdGVkIHV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubm9uZ251Lm9yZy9kbWlkZWNvZGUvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfTk9OR05VX01JUlJPUn0vZG1pZGVjb2RlLyR7QlB9LnRhci5iejIiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjR8YWFyY2g2NHxhcm18cG93ZXJwY3xwb3dlcnBjNjQpLiotbGludXgiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBERVNURElSPSIke0R9IiBpbnN0YWxsCit9CisKK2RvX3VucGFja19leHRyYSgpIHsKKwlzZWQgLWkgLWUgJy9ecHJlZml4L3M6L3Vzci9sb2NhbDoke2V4ZWNfcHJlZml4fTonICR7U30vTWFrZWZpbGUKK30KK2FkZHRhc2sgdW5wYWNrX2V4dHJhIGFmdGVyIGRvX3VucGFjayBiZWZvcmUgZG9fcGF0Y2gKKworU1JDX1VSSVttZDVzdW1dID0gImE0MDZmM2NiYjI3NzM2NDkxNjk4Njk3YmVlZGRiNzgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkxM2ZmMzA1NWQ1NjNhNjJhNDIwNzg5YjhlZTMzYjAzOGRlOWFmYTE4ZWE2MTI1NDc2MGRkZjhhYjg3YTUwODgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxYjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYgpAQCAtMCwwICsxLDY4IEBACitTVU1NQVJZID0gIkRTU1NMIHN0eWxlc2hlZXRzIHVzZWQgdG8gdHJhbnNmb3JtIFNHTUwgYW5kIFhNTCBEb2NCb29rIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0IgorIyBTaW1wbGUgcGVyc21pc3NpdmUKK0xJQ0VOU0UgPSAiRFNTU0wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTQxO2VuZGxpbmU9NzQ7bWQ1PTg3NTM4NTE1OWIyZWU3NmVjZjU2MTM2YWU3ZjU0MmQ2IgorCitERVBFTkRTID0gInNnbWwtY29tbW9uLW5hdGl2ZSIKKworUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY2Jvb2svZG9jYm9vay1kc3NzbC0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmMxOTJkMjMyNjZiOWE2NjRjYTBhYmE0YTc3OTRjN2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmYzMjllMTIwYmVlOWVmNDJmYmRkNzRkZGQ2MGUwNWU0OTc4NmM1YTc5NTNhMGZmNGM2ODBhZTZiZGYwZTJiYyIKKworUyA9ICIke1dPUktESVJ9L2RvY2Jvb2stZHNzc2wtJHtQVn0iCisKK2luaGVyaXQgbmF0aXZlCisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImRvY2Jvb2tfZHNzc2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJkb2Nib29rX2Rzc3NsX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK0NMRUFORlVOQ1MgKz0gImRvY2Jvb2tfZHNzc2xfc3R5bGVzaGVldHNfc3N0YXRlX2NsZWFuIgorCisKK2RvX2luc3RhbGwgKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9kb2Nib29rLWRzc3NsLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBiaW4vY29sbGF0ZWluZGV4LnBsICR7RH0ke2JpbmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9CisJaW5zdGFsbCAtbSAwNjQ0IGNhdGFsb2cgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9CisJY3AgLXYgLVIgKiAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0vY2F0YWxvZyIgPiBcCisJCSAke0R9JHtzeXNjb25mZGlyfS9zZ21sL2Rzc3NsLWRvY2Jvb2stc3R5bGVzaGVldHMuY2F0CisJZWNobyAiQ0FUQUxPRyAke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfS9jb21tb24vY2F0YWxvZyIgPj4gXAorCQkke0R9JHtzeXNjb25mZGlyfS9zZ21sL2Rzc3NsLWRvY2Jvb2stc3R5bGVzaGVldHMuY2F0Cit9CisKK2RvY2Jvb2tfZHNzc2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCQkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stZHNzc2wgXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL2Rzc3NsLWRvY2Jvb2stc3R5bGVzaGVldHMuY2F0CisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stZHNzc2wgXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL2Rzc3NsLWRvY2Jvb2stc3R5bGVzaGVldHMuY2F0CisJZmkKK30KKworZG9jYm9va19kc3NzbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworICAgIGluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKyAgICBpbnN0YWxsIC1tIDc1NSAke1NUQUdJTkdfQklORElSX05BVElWRX0vaW5zdGFsbC1jYXRhbG9nICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLWRvY2Jvb2stZHNzc2wKK30KKworZG9jYm9va19kc3NzbF9zdHlsZXNoZWV0c19zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCisJZm9yIGYgaW4gJGZpbGVzOyBkbworCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL2Rzc3NsLWRvY2Jvb2stc3R5bGVzaGVldHMuY2F0L2QnICRmCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGY0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBkb2Nib29rLXNnbWwtZHRkLW5hdGl2ZS5pbmMKKworTElDRU5TRSA9ICJPQVNJUyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtT0FTSVM7bWQ1PWM2MDg5ODVkZDVmN2YyMTVlNjY5ZTc2MzlhMGIxZDJlIgorCitEVERfVkVSU0lPTiA9ICIzLjEiCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvMy4xL2RvY2JrMzEuemlwIFwKKyAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MzI3NDljMGM4MDZkYmFlODFjOGJjYjcwZGEzYjVkMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMDI2MWQyNzcxYjlhMDUyYWJmYTNkOGZhYjFhYTYyYmUwNTc5MWEwMTAyODFjNTY2ZjkwNzNiZjBlNjQ0NTM4IgorCitkb19jb21waWxlKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9zZ21sLWR0ZC0zLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCXNlZCAtaSAtZSAnL0lTTyA4ODc5L2QnIC1lICdzfERURERFQ0wgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWMy4xLy9FTiJ8U0dNTERFQ0x8ZycgZG9jYm9vay5jYXQKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM5Mzk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworRFREX1ZFUlNJT04gPSAiNC4xIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCisjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgorIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KK1NSQ19VUkkgPSAiaHR0cDovL2RvY2Jvb2sub3JnL3NnbWwvNC4xL2RvY2JrNDEuemlwIFwKKyAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODlmNmZmMmEyMTczZWIxZTE0MjE2YzEwNTMzZWRlMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkZWFhZmNmMGEzNjc3NjkyZTdhZDQ0MTJjMGU0MWMxZGIzZTlkYTZjZGNkYjNkZDMyYjJjYzFmOWM5N2Q2MzExIgorCitkb19jb21waWxlKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9zZ21sLWR0ZC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlzZWQgLWkgLWUgJy9JU08gODg3OS9kJyAtZSAnL2dtbC9kJyBkb2Nib29rLmNhdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuNS1uYXRpdmUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTcyM2M3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuNS1uYXRpdmUuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBkb2Nib29rLXNnbWwtZHRkLW5hdGl2ZS5pbmMKKworTElDRU5TRSA9ICJPQVNJUyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtT0FTSVM7bWQ1PWM2MDg5ODVkZDVmN2YyMTVlNjY5ZTc2MzlhMGIxZDJlIgorCitEVERfVkVSU0lPTiA9ICI0LjUiCisKK1BSID0gIiR7SU5DX1BSfS4wIgorUFYgPSAiNC41IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDdjNTgxZjRiYmNiYTZkM2FhYzg1MzYwYTE5Zjk1ZjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODA0M2U1MTRlODBjNmMxOWNiMTQ2YjVkMzc5MzdkMTMwNWJmM2FiZjliMDA5N2MzNmRmN2Y3MGY2MTFjZGY0MyIKKworZG9fY29tcGlsZSgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJc2VkIC1pIC1lICcvSVNPIDg4NzkvZCcgLWUnL2dtbC9kJyBkb2Nib29rLmNhdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLW5hdGl2ZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjUwOTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLW5hdGl2ZS5pbmMKQEAgLTAsMCArMSw3MCBAQAorIyBUaGUgRFREcyBvZiB0aGUgdmFyaW91cyB2ZXJzaW9ucyBoYXZlIHRvIGJlIGluc3RhbGxlZCBpbiBwYXJhbGxlbCBhbmQKKyMgc2hvdWxkIG5vdCByZXBsYWNlIGVhY2ggb3RoZXIuIFRoZSBpbnN0YWxsYXRpb24gc3RlcCBpcyBjb21tb24gZm9yCisjIGFsbCB2ZXJzaW9ucyBhbmQganVzdCBkaWZmZXJzIGluICR7RFREX1ZFUlNJT059IHdoaWNoIGlzIHNldCBpbiBlYWNoCisjIHZlcnNpb24gcmVjaXBlLgorIworIyBUaGUgRFREcyBkbyBoYXZlIHNvbWUgcXVpcmtzIChzZWUgTEZTIGRvY3VtZW50YXRpb24pLgorU1VNTUFSWSA9ICJEb2N1bWVudCB0eXBlIGRlZmluaXRpb25zIGZvciB2ZXJpZmljYXRpb24gb2YgU0dNTCBkYXRhIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiRG9jdW1lbnQgdHlwZSBkZWZpbml0aW9ucyBmb3IgdmVyaWZpY2F0aW9uIG9mIFNHTUwgZGF0YSBcCitmaWxlcyBhZ2FpbnN0IHRoZSBEb2NCb29rIHJ1bGUgc2V0IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyIKKworREVQRU5EUyA9ICJzZ21sLWNvbW1vbi1uYXRpdmUiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8ke0RURF9WRVJTSU9OfS9kb2Nib29rLSR7RFREX1ZFUlNJT059LnppcCBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIgorCisjIFRoZSAuemlwIGZpbGUgZXh0cmFjdHMgdG8gdGhlIGN1cnJlbnQgZGlyCitTID0gIiR7V09SS0RJUn0iCisKK0lOQ19QUiA9ICJyMyIKKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImRvY2Jvb2tfc2dtbF9kdGRfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059CisJaW5zdGFsbCBkb2Nib29rLmNhdCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0vY2F0YWxvZworCWNwIC1QcFJyICouZHRkICoubW9kICouZGNsICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zZ21sCisJZWNobyAiQ0FUQUxPRyAke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfS9jYXRhbG9nIiA+IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2stZHRkLSR7RFREX1ZFUlNJT059LmNhdAorfQorCitkb2Nib29rX3NnbWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLXNnbWwtZHRkLSR7RFREX1ZFUlNJT059IFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2stZHRkLSR7RFREX1ZFUlNJT059LmNhdAorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLXNnbWwtZHRkLSR7RFREX1ZFUlNJT059IFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2stZHRkLSR7RFREX1ZFUlNJT059LmNhdAorCWZpCit9CisKK2RvY2Jvb2tfc2dtbF9kdGRfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLXNnbWwtZHRkLSR7RFREX1ZFUlNJT059Cit9CisKK0NMRUFORlVOQ1MgKz0gImRvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX2NsZWFuIgorCitkb2Nib29rX3NnbWxfZHRkX3NzdGF0ZV9jbGVhbiAoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorCWZpbGVzPSIke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCIKKwlmb3IgZiBpbiAkZmlsZXM7IGRvCisJCVsgISAtZiAkZiBdIHx8IHNlZCAtaSAnL1wvc2dtbFwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQvZCcgJGYKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhN2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUwpAQCAtMCwwICsxLDE2IEBACitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2NCb29rIFhNTCBEVEQKK2FuZCBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZQoraXMgaGVyZWJ5IGdyYW50ZWQgaW4gcGVycGV0dWl0eSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAoraG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgorYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzc2VkIG9yIGltcGxpZWQKK3dhcnJhbnR5LgorCitJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKK3JlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKK2FkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQordGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1BsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvciAKK2NoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQoraW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay11dGlscy9kb2Nib29rLXV0aWxzLTAuNi4xNC9yZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy0wLjYuMTQvcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNzlkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy0wLjYuMTQvcmUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeCBydW50aW1lIGVycm9yIG9jY3VycmVkIGUuZy4gd2l0aCBkb2Nib29rLXRvLW1hbiBjYWxsczoKKworICBncmVwOiBjaGFyYWN0ZXIgY2xhc3Mgc3ludGF4IGlzIFtbOnNwYWNlOl1dLCBub3QgWzpzcGFjZTpdCisgIGdyZXA6IGNoYXJhY3RlciBjbGFzcyBzeW50YXggaXMgW1s6c3BhY2U6XV0sIG5vdCBbOnNwYWNlOl0KKyAganc6IFRoZXJlIGlzIG5vIGZyb250ZW5kIGNhbGxlZCAiL2RvY2Jvb2svdXRpbHMtMC42LjE0L2Zyb250ZW5kcy9kb2Nib29rIi4KKworU2VlIGFsc286CisKKyAgIDxodHRwczovL3FhLm1hbmRyaXZhLmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NjExMjc+CisKK1NpZ25lZC1vZmYtYnk6IFN0ZWZmZW4gU2xlZHogPHNsZWR6QGRyZXNlYXJjaC1mZS5kZT4KKworZGlmZiAtTnVyZCBkb2Nib29rLXV0aWxzLTAuNi4xNC1vcmlnL2Jpbi9qdy5pbiBkb2Nib29rLXV0aWxzLTAuNi4xNC9iaW4vancuaW4KKy0tLSBkb2Nib29rLXV0aWxzLTAuNi4xNC1vcmlnL2Jpbi9qdy5pbgkyMDEyLTAzLTI5IDA3OjUwOjAwLjc4OTU2NDgyNiArMDIwMAorKysrIGRvY2Jvb2stdXRpbHMtMC42LjE0L2Jpbi9qdy5pbgkyMDEyLTAzLTI5IDA3OjUyOjEwLjM3MTMwMjk2NyArMDIwMAorQEAgLTgwLDkgKzgwLDkgQEAKKyBTR01MX0NBVEFMT0dTX0RJUj0iL2V0Yy9zZ21sIgorIGlmIFsgLWYgIiRTR01MX0NPTkYiIF0KKyB0aGVuCistICBSRT0nXls6c3BhY2U6XSpTR01MX0JBU0VfRElSWzpzcGFjZTpdKj1bOnNwYWNlOl0qJworKyAgUkU9J15bWzpzcGFjZTpdXSpTR01MX0JBU0VfRElSW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKicKKyAgIFNHTUxfQkFTRV9ESVI9YGdyZXAgJFJFICRTR01MX0NPTkYgfCBzZWQgInMvJFJFLy8iYAorLSAgUkU9J15bOnNwYWNlOl0qU0dNTF9DQVRBTE9HU19ESVJbOnNwYWNlOl0qPVs6c3BhY2U6XSonCisrICBSRT0nXltbOnNwYWNlOl1dKlNHTUxfQ0FUQUxPR1NfRElSW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1dKicKKyAgIFNHTUxfQ0FUQUxPR1NfRElSPWBncmVwICRSRSAkU0dNTF9DT05GIHwgc2VkICJzLyRSRS8vImAKKyBmaQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay11dGlscy9kb2Nib29rLXV0aWxzLW5hdGl2ZV8wLjYuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E1ZjNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay11dGlscy9kb2Nib29rLXV0aWxzLW5hdGl2ZV8wLjYuMTQuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIGZvcm1hdHRpbmcgYW5kIG1hbmlwdWxhdGluZyBEb2NCb29rIGRvY3VtZW50cyIKK0RFU0NSSVBUSU9OID0gIkEgY29sbGVjdGlvbiBvZiBhbGwgdGhlIGZyZWUgc29mdHdhcmUgdG9vbHMgeW91IG5lZWQgdG8gXAord29yayBvbiBhbmQgZm9ybWF0IERvY0Jvb2sgZG9jdW1lbnRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG9jYm9vay10b29scy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCitERVBFTkRTID0gIm9wZW5qYWRlLW5hdGl2ZSBzZ21sc3BsLW5hdGl2ZSBkb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzLW5hdGl2ZSBkb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmUiCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gIlwKKwlmdHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vcHViL2RvY2Jvb2stdG9vbHMvbmV3LXRyaWFscy9TT1VSQ0VTL2RvY2Jvb2stdXRpbHMtJHtQVn0udGFyLmd6IFwKKwlmaWxlOi8vcmUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmI0MWIxOGMzNjVjMDFmMjI1YmM0MTdjZjYzMmQ4MWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDhmYWFiOGVlOGE3NjA1YzkzNDJmYjdiOTA2ZTA4MTVlM2NlZTg0YTQ4OTE4MmFmMzhlOGY3YzBkZjJlOTJlOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgRml4IGhhcmQtY29kZWQgcmVmZXJlbmNlcyB0byAvZXRjL3NnbWwKKwlpZiBbICEgLWUgJHtTfS8uc2VkX2RvbmUgXTsgdGhlbgorCQlzZWQgLWkgLWUgInN8L2V0Yy9zZ21sfCR7c3lzY29uZmRpcn0vc2dtbHxnIiAke1N9L2Jpbi9qdy5pbgorCQlzZWQgLWkgLWUgInN8L2V0Yy9zZ21sfCR7c3lzY29uZmRpcn0vc2dtbHxnIiAke1N9L2RvYy9tYW4vTWFrZWZpbGUuYW0KKwkJc2VkIC1pIC1lICJzfC9ldGMvc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTfS9kb2MvSFRNTC9NYWtlZmlsZS5hbQorCisJCSMgUG9pbnQgancgdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNhdGFsb2cKKwkJc2VkIC1pIC1lICdzfF5TR01MX0VYVFJBX0NBVEFMT0dTPSIifFNHTUxfRVhUUkFfQ0FUQUxPR1M9Ijoke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZyJ8ZycgJHtTfS9iaW4vancuaW4KKwkJdG91Y2ggJHtTfS8uc2VkX2RvbmUKKwlmaQorfQorZG9fdW5wYWNrW2NsZWFuZGlyc10gKz0gIiR7U30iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJIyBJbnN0YWxsIHRoZSBiaW5hcmllcyBhbmQgYSBidW5jaCBvZiBvdGhlciBjb21tb25seSB1c2VkIG5hbWVzIGZvciB0aGVtLgorCWZvciBkb2N0eXBlIGluIGh0bWwgcHMgZHZpIG1hbiBwZGYgcnRmIHRleCB0ZXhpIHR4dAorCWRvCisJCWluc3RhbGwgLW0gMDc1NSAke1N9L2Jpbi9kb2Nib29rMiRkb2N0eXBlICR7RH0ke2JpbmRpcn0vCisJCWxuIC1zZiBkb2Nib29rMngtJGRvY3R5cGUgJHtEfSR7YmluZGlyfS9kYjIkZG9jdHlwZQorCQlsbiAtc2YgZG9jYm9vazIkZG9jdHlwZSAke0R9JHtiaW5kaXJ9L2RiMiRkb2N0eXBlCisJCWxuIC1zZiBkb2Nib29rMiRkb2N0eXBlICR7RH0ke2JpbmRpcn0vZG9jYm9vay10by0kZG9jdHlwZQorCWRvbmUKKworCWluc3RhbGwgLW0gMDc1NSAke0J9L2Jpbi9qdyAke0R9JHtiaW5kaXJ9LworCWZvciBpIGluIGJhY2tlbmRzL2R2aSBiYWNrZW5kcy9odG1sIFwKKwkJYmFja2VuZHMvcGRmIGJhY2tlbmRzL3BzIGJhY2tlbmRzL3J0ZiBiYWNrZW5kcy90ZXggXAorCQliYWNrZW5kcy90eHQgXAorCQloZWxwZXJzL2RvY2Jvb2sybWFuLXNwZWMucGwgaGVscGVycy9kb2Nib29rMnRleGktc3BlYy5wbCBcCisJCWRvY2Jvb2stdXRpbHMuZHNsCisJZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vYGRpcm5hbWUgJGlgCisJCWluc3RhbGwgJHtTfS8kaSAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vJGkKKwlkb25lCisJZm9yIGkgaW4gYmFja2VuZHMvbWFuIGJhY2tlbmRzL3RleGkgZnJvbnRlbmRzL2RvY2Jvb2sKKwlkbworCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay91dGlscy0ke1BWfS9gZGlybmFtZSAkaWAKKwkJaW5zdGFsbCAke0J9LyRpICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay91dGlscy0ke1BWfS8kaQorCWRvbmUKKworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTdmNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMKQEAgLTAsMCArMSwxNiBAQAorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBYTUwgRFRECithbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKK2lzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKK2hvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKK2FueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCit3YXJyYW50eS4KKworSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCityZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCithZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKK3RoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IgCitjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKK2luZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDQvZG9jYm9vay14bWwtdXBkYXRlLWNhdGFsb2cueG1sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3MDM2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDQvZG9jYm9vay14bWwtdXBkYXRlLWNhdGFsb2cueG1sLnBhdGNoCkBAIC0wLDAgKzEsNTE1IEBACitkb2Nib29rLXhtbDogdXBkYXRlIGNhdGFsb2cueG1sCisKK1JlZmVyIFVidW50dSAxMy4wNCB0byB1cGRhdGUgY2F0YWxvZy54bWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2Nib29rLTQuMC9jYXRhbG9nLnhtbCAgIHwgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBkb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sIHwgNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGRvY2Jvb2stNC4yL2NhdGFsb2cueG1sICAgfCA2OSArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkb2Nib29rLTQuMy9jYXRhbG9nLnhtbCAgIHwgNzIgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkb2Nib29rLTQuNC9jYXRhbG9nLnhtbCAgIHwgNjMgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkb2Nib29rLTQuNS9jYXRhbG9nLnhtbCAgIHwgNjMgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDE2NSBpbnNlcnRpb25zKCspLCAyNDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRvY2Jvb2stNC4wL2NhdGFsb2cueG1sCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwKKworZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC4wL2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjAvY2F0YWxvZy54bWwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9kb2Nib29rLTQuMC9jYXRhbG9nLnhtbAorQEAgLTAsMCArMSw3MiBAQAorKzw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKys8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gWE1MIENhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBGaWxlIGNhdGFsb2cueG1sIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwhLS0gUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yCisrICAgICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKKysgICAgIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy8uCisrICAtLT4KKysKKys8IS0tIFRoaXMgaXMgdGhlIGNhdGFsb2cgZGF0YSBmaWxlIGZvciBEb2NCb29rIFY0LjAuIEl0IGlzIHByb3ZpZGVkIGFzCisrICAgICBhIGNvbnZlbmllbmNlIGluIGJ1aWxkaW5nIHlvdXIgb3duIGNhdGFsb2cgZmlsZXMuIFlvdSBuZWVkIG5vdCB1c2UKKysgICAgIHRoZSBmaWxlbmFtZXMgbGlzdGVkIGhlcmUsIGFuZCBuZWVkIG5vdCB1c2UgdGhlIGZpbGVuYW1lIG1ldGhvZCBvZgorKyAgICAgaWRlbnRpZnlpbmcgc3RvcmFnZSBvYmplY3RzIGF0IGFsbC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKysgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIERvY0Jvb2sgRFRELgorKyAgICAgU2VlIFhNTCBDYXRhbG9ncyBhdCBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5LyBmb3IKKysgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHN1cHBseWluZyBhbmQgdXNpbmcgY2F0YWxvZyBkYXRhLgorKyAgLS0+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBkcml2ZXIgZmlsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCayBYTUwgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzwhLS0gT3RoZXIgd2F5cyB0byByZWZlciB0byBEb2NCb29rIFhNTCB2NC4wLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCb29rIFhNTCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjAvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgTm90YXRpb25zIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYm5vdG54Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJwb29seC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIERvY3VtZW50IEhpZXJhcmNoeSBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJoaWVyeC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJnZW5lbnQubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgQ0FMUyBUYWJsZSBNb2RlbCBYTUwgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImNhbHN0Ymx4LmR0ZCIvPgorKworKzwhLS0gVU5PRkZJQ0lBTCBjb252ZXJzaW9uIG9mIHRoZSBleGNoYW5nZSB0YWJsZSBtb2RlbCB0byBYTUwsIGJhc2VkIG9uIHRoZSBPQVNJUyBFeGNoYW5nZSAtLT4KKys8IS0tICAgIFRhYmxlIE1vZGVsIFBVQkxJQyAiLS8vU0dNTCBPcGVuLy9EVEQgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAvL0VOIiAgICAgICAgICAgLS0+CisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFsIFdhbHNoLy9FeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk2MDQzMCBYTUwgVjQuMC8vRU4iCisrICAgICAgICB1cmk9InNvZXh0Ymx4LmR0ZCIvPgorKworKzwhLS0gdGhlIGZvbGxvd2luZyBGUEkgaXMgZGVjbGFyZWQgZm9yIHRoZSBEVEQgaW5zaWRlIHRoZSBEVEQsIGJ1dCB3ZSdsbCAtLT4KKys8IS0tIHVzZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBsYXRlc3QgRG9jQm9vaworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIKKysgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+IC0tPgorKworKzwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPC9jYXRhbG9nPgorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbAorQEAgLTAsMCArMSw2NiBAQAorKzw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKys8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gWE1MIENhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMS4yLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIEZpbGUgY2F0YWxvZy54bWwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPCEtLSBQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IKKysgICAgIGNoYW5nZXMgdG8gdGhlIGRvY2Jvb2tAbGlzdHMub2FzaXMtb3Blbi5vcmcgbWFpbGluZyBsaXN0LiBGb3IgbW9yZQorKyAgICAgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnLy4KKysgIC0tPgorKworKzwhLS0gVGhpcyBpcyB0aGUgY2F0YWxvZyBkYXRhIGZpbGUgZm9yIERvY0Jvb2sgVjQuMS4yLiBJdCBpcyBwcm92aWRlZCBhcworKyAgICAgYSBjb252ZW5pZW5jZSBpbiBidWlsZGluZyB5b3VyIG93biBjYXRhbG9nIGZpbGVzLiBZb3UgbmVlZCBub3QgdXNlCisrICAgICB0aGUgZmlsZW5hbWVzIGxpc3RlZCBoZXJlLCBhbmQgbmVlZCBub3QgdXNlIHRoZSBmaWxlbmFtZSBtZXRob2Qgb2YKKysgICAgIGlkZW50aWZ5aW5nIHN0b3JhZ2Ugb2JqZWN0cyBhdCBhbGwuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEb2NCb29rIERURC4KKysgICAgIFNlZSBYTUwgQ2F0YWxvZ3MgYXQgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS8gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBzdXBwbHlpbmcgYW5kIHVzaW5nIGNhdGFsb2cgZGF0YS4KKysgIC0tPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIERvY0Jvb2sgZHJpdmVyIGZpbGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjEuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIERvY0Jvb2sgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iY2Fsc3RibHguZHRkIi8+CisrCisrICA8IS0tIGFscmVhZHkgaW5jbHVkZWQgaW4gZG9jYm9vayA0LjIKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iCisrICAgICAgICB1cmk9InNvZXh0Ymx4LmR0ZCIvPiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkYnBvb2x4Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkYmhpZXJ4Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4xLjIvL0VOIgorKyAgICAgICAgdXJpPSJkYmdlbmVudC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJub3RueC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKysKKysKKys8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjEuMiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPC9jYXRhbG9nPgorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC4yL2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjIvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC4yL2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorIAorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KK0BAIC0yNSw2ICsyOCwxMiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisgICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorIAorKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorQEAgLTQ5LDY2ICs1OCw2IEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjIvL0VOIgorICAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorIAorLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy08IS0tIElTTyBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZGlhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1wdWIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tdGVjaC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1sYXQyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmszLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrNC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNiLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNjLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc28uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zci5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1jeXIxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE5vbi1SdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjIuZW50Ii8+CistCisgPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMy9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sCistLS0gYS9kb2Nib29rLTQuMy9jYXRhbG9nLnhtbAorKysrIGIvZG9jYm9vay00LjMvY2F0YWxvZy54bWwKK0BAIC0xLDQgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtMjUsMTIgKzI4LDIxIEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4zLy9FTiIKKyAgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisgCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjMvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMy9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIERvY0Jvb2sgbW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuMy8vRU4iCisgICAgICAgICB1cmk9ImNhbHN0Ymx4LmR0ZCIvPgorIAorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC4zLy9FTiIKKysgICAgICAgIHVyaT0iaHRtbHRibHgubW9kIi8+CisrCisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIgorICAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4KKyAKK0BAIC00OSw2NiArNjEsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4zLy9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWRpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbnVtLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXRlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1sYXQxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc24uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYm94LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjQvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjQvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIgcHJlZmVyPSJwdWJsaWMiPgorIAorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KK0BAIC01OCw2NiArNjEsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC40Ly9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZGlhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb251bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvdGVjaC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrNC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNjLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zci5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2JveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjIuZW50Ii8+CistCisgPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC40IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuNS9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sCistLS0gYS9kb2Nib29rLTQuNS9jYXRhbG9nLnhtbAorKysrIGIvZG9jYm9vay00LjUvY2F0YWxvZy54bWwKK0BAIC0xLDQgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIiBwcmVmZXI9InB1YmxpYyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTU4LDY2ICs2MSw2IEBACisgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjUvL0VOIgorICAgICAgICAgdXJpPSJkYmNlbnR4Lm1vZCIvPgorIAorLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy08IS0tIElTTyBlbnRpdHkgc2V0cyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbnVtLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29wdWIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc290ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29sYXQxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29sYXQyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmsyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncmszLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNiLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc24uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc28uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYm94LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE5vbi1SdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDQvZG9jYm9vay14bWwueG1sIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZjU1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDQvZG9jYm9vay14bWwueG1sCkBAIC0wLDAgKzEsNjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Cis8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBJbmZvcm1hdGlvbiBQb29sIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBJbmZvcm1hdGlvbiBQb29sIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgTm90YXRpb25zIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIENBTFMgVGFibGUgTW9kZWwgWE1MIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIERvY3VtZW50IEhpZXJhcmNoeSBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFsIFdhbHNoLy9FeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk2MDQzMCBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuNC9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0JrIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0Jvb2sgWE1MIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjEuMi9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC41L2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIE5vdGF0aW9ucyBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjAvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjQvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuMy9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBJbmZvcm1hdGlvbiBQb29sIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvY2F0YWxvZy54bWwiLz4KKzwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDRfNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxYmMzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sLWR0ZDRfNC41LmJiCkBAIC0wLDAgKzEsNjQgQEAKK1NVTU1BUlkgPSAiRG9jdW1lbnQgdHlwZSBkZWZpbml0aW9ucyBmb3IgdmVyaWZpY2F0aW9uIG9mIFhNTCBkYXRhIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiRG9jdW1lbnQgdHlwZSBkZWZpbml0aW9ucyBmb3IgdmVyaWZpY2F0aW9uIG9mIFhNTCBkYXRhIFwKK2ZpbGVzIGFnYWluc3QgdGhlIERvY0Jvb2sgcnVsZSBzZXQsIGl0IHNoaXBzIHdpdGggdGhlIGxhdGVzdCBEb2NCb29rIDQuNSBcCitYTUwgRFRELCBhcyB3ZWxsIGFzIGEgc2VsZWN0ZWQgc2V0IG9mIGxlZ2FjeSBEVERzIGZvciB1c2Ugd2l0aCBvbGRlciBcCitkb2N1bWVudHMsIGluY2x1ZGluZyA0LjAsIDQuMS4yLCA0LjIsIDQuMyBhbmQgNC40IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy94bWwvIgorCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCisjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgorIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvZG9jYm9vay14bWwvZG9jYm9vay14bWxfJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14bWwueG1sIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ4N2I0ZDQ0ZTE1Y2ZmYjFmNDA0OGFmMjNmOTgyMDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIwZjhlZGNmNjk3ZjUzMThlNjNkZDk4YzlhOTMxZjNmZWUxNjdhZjA4MDViYTQ0MWRiMzcyZTBmMTdiMmE0NGYiCisKK1M9IiR7V09SS0RJUn0vZG9jYm9vay14bWwtNC41LmMzMTQyNCIKKworaW5oZXJpdCBhbGxhcmNoCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1NUQVRFUE9TVElOU1RGVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3htbF9kdGRfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeG1sX2R0ZF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2NvbmZpZ3JlICgpeworICAgIDoKK30KKworZG9fY29tcGlsZSAoKXsKKyAgICA6Cit9CisKK2RvX2luc3RhbGwgKCkgeworICAgICMgUmVmZXIgZGViaWFuIGh0dHBzOi8vcGFja2FnZXMuZGViaWFuLm9yZy9zaWQvYWxsL2RvY2Jvb2steG1sL2ZpbGVsaXN0CisgICAgZm9yIERURFZFUlNJT04gaW4gNC4wIDQuMS4yIDQuMiA0LjMgNC40IDQuNTsgZG8KKyAgICAgICAgaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZGF0YWRpcn0veG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC8ke0RURFZFUlNJT059CisgICAgICAgIGNwIC12IC1SIGRvY2Jvb2stJHtEVERWRVJTSU9OfS8qICR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3NjaGVtYS9kdGQvJHtEVERWRVJTSU9OfQorICAgIGRvbmUKKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veG1sLworICAgIGluc3RhbGwgLW0gNzU1ICAke1dPUktESVJ9L2RvY2Jvb2steG1sLnhtbCAke0R9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14bWwueG1sCit9CisKK2RvY2Jvb2tfeG1sX2R0ZF9zc3RhdGVfcG9zdGluc3QgKCkgeworICAgIGlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKyAgICB0aGVuCisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisgICAgICAgICMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKyAgICAgICAgc2VkIC1pIC1lICJzfGZpbGU6Ly8uKi91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwKKyAgICBmaQorfQorCitkb2Nib29rX3htbF9kdGRfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICAjIFVwZGF0ZSB0aGUgaGFyZGNvZGUgZGlyIGluIGRvY2Jvb2steG1sLnhtbAorICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbAorfQorCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9LyogJHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14bWwueG1sIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1OWE1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZG9jYm9vay14c2wtc3R5bGVzaGVldHM6IG5vIGJhc2hpc20gaW4gZG9jYm9vay14c2wtdXBkYXRlCisKK1RoZSBjaGVja2Jhc2hpc21zIHNob3dzIHRoZXJlIGlzIG5vIGJhc2hpc20sIHNvIHVzZSAvYmluL3NoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyB0b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZSBiL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUKK2luZGV4IGFiYTAwMTYuLmNjNzNhYTIgMTAwNzU1CistLS0gYS90b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlCisrKysgYi90b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorICMgdmltOiBudW1iZXIKKyAKKyAjIGRvY2Jvb2steHNsLXVwZGF0ZSAtIFVwZGF0ZSBlbnZpcm9ubWVudCB0byBsYXRlc3QgZG9jYm9vay14c2wgc25hcHNob3QKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTU3NmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL2NhdGFsb2cueG1sIi8+Cis8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9jYXRhbG9nLnhtbCIvPgorPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMWJkYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIKQEAgLTAsMCArMSw2OSBAQAorU1VNTUFSWSA9ICJYU0wgc3R5bGVzaGVldHMgZm9yIHByb2Nlc3NpbmcgRG9jQm9vayBYTUwgdG8gdmFyaW91cyBvdXRwdXQgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldCIKK0xJQ0VOU0UgPSAiWFNMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZlZWVlZDQzZDQ5OGMyMmE4MzUzODI1MzMzNTY0NjIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2RvY2Jvb2svZG9jYm9vay14c2wtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9kb2Nib29rLXhzbC54bWwgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbm8tYmFzaGlzbS1pbi1kb2Nib29rLXhzbC11cC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZGQwZjg5MTMxY2MzNWJmNGYyZWQxMDVhMWMxNzc3MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjOThmNzI5NmFiNWM4Y2NkMmUwYmMwNzYzNDk3NmEzN2Y1MDg0N2RmMmQ4YTU5YmRiMWUxNTc2NjQ3MDBiNDY3IgorCitTID0gIiR7V09SS0RJUn0vZG9jYm9vay14c2wtJHtQVn0iCisKK2luaGVyaXQgYWxsYXJjaAorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZG9fY29uZmlndXJlICgpeworCToKK30KKworZG9fY29tcGlsZSAoKXsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCSMgUmVmZXIgdG8gaHR0cDovL3d3dy5saW51eGZyb21zY3JhdGNoLm9yZy9ibGZzL3ZpZXcvc3RhYmxlL3BzdC9kb2Nib29rLXhzbC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC12IC1tNzU1IC1kICR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEKKworCWNwIC12IC1SIFZFUlNJT04gY29tbW9uIGVjbGlwc2UgZXB1YiBleHRlbnNpb25zIGZvIGhpZ2hsaWdodGluZyBodG1sIFwKKwkJaHRtbGhlbHAgaW1hZ2VzIGphdmFoZWxwIGxpYiBtYW5wYWdlcyBwYXJhbXMgcHJvZmlsaW5nIFwKKwkJcm91bmR0cmlwIHNsaWRlcyB0ZW1wbGF0ZSB0ZXN0cyB0b29scyB3ZWJoZWxwIHdlYnNpdGUgXAorCQl4aHRtbCB4aHRtbC0xXzEgY2F0YWxvZy54bWwgXAorCSR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEKKworCWxuIC1zIFZFUlNJT04gJHtEfS8ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvVkVSU0lPTi54c2wKKworCWluc3RhbGwgLXYgLW02NDQgLUQgUkVBRE1FIFwKKwkJJHtEfSR7ZGF0YWRpcn0vZG9jL2RvY2Jvb2steHNsLTEuNzguMS9SRUFETUUudHh0CisJaW5zdGFsbCAtdiAtbTY0NCAgICBSRUxFQVNFLU5PVEVTKiBORVdTKiBcCisJCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0xLjc4LjEKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veG1sLworCWluc3RhbGwgLW0gNzU1ICAke1dPUktESVJ9L2RvY2Jvb2steHNsLnhtbCAke0R9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCisKK30KKworZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKyAgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisgICAgdGhlbgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorICAgICAgICAjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisgICAgICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vLiovdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sCisgICAgZmkKK30KKworZG9jYm9va194c2xfc3R5bGVzaGVldHNfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICAjIFVwZGF0ZSB0aGUgaGFyZGNvZGUgZGlyIGluIGRvY2Jvb2steG1sLnhtbAorICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorfQorCitSREVQRU5EU18ke1BOfSArPSAicGVybCIKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0veG1sLyogJHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14c2wueG1sIgorRklMRVNfJHtQTn0tZG9jID0gIiR7ZGF0YWRpcn0vZG9jLyoiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNWI3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGI3YzQyYzZhOTgyOWJlYTkxMWIyMjIwMWVkZDdkZjJhOWJlYzFhMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzo1MjozNCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIGZjbnRsLmggZm9yIGdldHRpbmcgbG9mZl90IGRlZmluaXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBkb3Nmc2NrL2Rvc2ZzY2suaCB8IDIgKysKKyBkb3Nmc2NrL2xmbi5jICAgICB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kb3Nmc2NrL2Rvc2ZzY2suaCBiL2Rvc2ZzY2svZG9zZnNjay5oCitpbmRleCBkOTMxNGIxLi4yMDc2ZDVmIDEwMDY0NAorLS0tIGEvZG9zZnNjay9kb3Nmc2NrLmgKKysrKyBiL2Rvc2ZzY2svZG9zZnNjay5oCitAQCAtNTAsNiArNTAsOCBAQAorICNkZWZpbmUgQ1RfTEVfTCh2KSAodikKKyAjZW5kaWYgLyogX19CSUdfRU5ESUFOICovCisgCisrI2luY2x1ZGUgPGZjbnRsLmg+CisrCisgI2RlZmluZSBWRkFUX0xOX0FUVFIgKEFUVFJfUk8gfCBBVFRSX0hJRERFTiB8IEFUVFJfU1lTIHwgQVRUUl9WT0xVTUUpCisgCisgLyogKytyb21hbjogVXNlIG93biBkZWZpbml0aW9uIG9mIGJvb3Qgc2VjdG9yIHN0cnVjdHVyZSAtLSB0aGUga2VybmVsIGhlYWRlcnMnCitkaWZmIC0tZ2l0IGEvZG9zZnNjay9sZm4uYyBiL2Rvc2ZzY2svbGZuLmMKK2luZGV4IDliMmNmYzMuLmJiMDRmZGEgMTAwNjQ0CistLS0gYS9kb3Nmc2NrL2xmbi5jCisrKysgYi9kb3Nmc2NrL2xmbi5jCitAQCAtNyw2ICs3LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgCisgI2luY2x1ZGUgImNvbW1vbi5oIgorICNpbmNsdWRlICJpby5oIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2YjJkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaApAQCAtMCwwICsxLDM4IEBACitUaGUgcHJvYmxlbSBpcyB0aGF0IHVuc2lnbmVkIGNoYXJbMl0gaXMKK2d1cmFudGVlZCB0byBiZSA4Qml0IGFsaWduZWQgb24gYXJtCitidXQgdW5zaWduZWQgc2hvcnQgaXMvbmVlZHMgdG8gYmUgMTZiaXQgYWxpZ25lZAordGhlIHVuaW9uIHsgdW5zaWduZWQgc2hvcnQ7IHVuc2lnbmVkIGNoYXJbMl0gfSB0cmljayAKK2RpZG4ndCB3b3JrIHNvIG5vIHdlIHVzZSB0aGUgYWxwaGEgaGFjay4KKworbWVtY3B5IGludG8gYW4gMTZiaXQgYWxpZ25lZAorCisgICAgLXplY2tlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkb3Nmc3Rvb2xzL2Rvc2ZzY2svYm9vdC5jLm9yaWcJMjAwMy0wNS0xNSAxOTozMjoyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBkb3Nmc3Rvb2xzL2Rvc2ZzY2svYm9vdC5jCTIwMDMtMDYtMTMgMTc6NDQ6MjUuMDAwMDAwMDAwICswMjAwCitAQCAtMzYsMTcgKzM2LDE1IEBACisgICAgIHsgMHhmZiwgIjUuMjVcIiAzMjBrIGZsb3BweSAycy80MHRyLzhzZWMiIH0sCisgfTsKKyAKKy0jaWYgZGVmaW5lZCBfX2FscGhhIHx8IGRlZmluZWQgX19pYTY0X18gfHwgZGVmaW5lZCBfX3MzOTB4X18gfHwgZGVmaW5lZCBfX3g4Nl82NF9fIHx8IGRlZmluZWQgX19wcGM2NF9fCisrCisgLyogVW5hbGlnbmVkIGZpZWxkcyBtdXN0IGZpcnN0IGJlIGNvcGllZCBieXRlLXdpc2UgKi8KKyAjZGVmaW5lIEdFVF9VTkFMSUdORURfVyhmKQkJCVwKKyAgICAgKHsJCQkJCQlcCisgCXVuc2lnbmVkIHNob3J0IF9fdjsJCQlcCisgCW1lbWNweSggJl9fdiwgJmYsIHNpemVvZihfX3YpICk7CVwKKy0JQ0ZfTEVfVyggKih1bnNpZ25lZCBzaG9ydCAqKSZmICk7CVwKKysJQ0ZfTEVfVyggKih1bnNpZ25lZCBzaG9ydCAqKSZfX3YgKTsJXAorICAgICB9KQorLSNlbHNlCistI2RlZmluZSBHRVRfVU5BTElHTkVEX1coZikgQ0ZfTEVfVyggKih1bnNpZ25lZCBzaG9ydCAqKSZmICkKKy0jZW5kaWYKKysKKyAKKyAKKyBzdGF0aWMgY2hhciAqZ2V0X21lZGlhX2Rlc2NyKCB1bnNpZ25lZCBjaGFyIG1lZGlhICkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzLW1zZG9zX2ZzLXR5cGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhYmQxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzLW1zZG9zX2ZzLXR5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Vuc3VyZSB0aGUgX19zOCB0eXBlIGlzIHByb3Blcmx5IGRlZmluZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9kb3Nmc2NrLmgub3JnCTIwMDYtMDItMjEgMDg6MzY6MTQuMDAwMDAwMDAwIC0wNzAwCisrKysgZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZG9zZnNjay5oCTIwMDYtMDItMjEgMDg6NDA6MTIuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjIsNiArMjIsMTQgQEAKKyAgICAgICAgI3VuZGVmIF9fS0VSTkVMX18KKyAjZW5kaWYKKyAKKysjaWZuZGVmIF9fczgKKysjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX0FTTV9TVFVCX0JZVEVPUkRFUl9IX18KKysjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxsaW51eC9tc2Rvc19mcy5oPgorIAorIC8qIDIuMSBrZXJuZWxzIHVzZSBsZTE2X3RvX2NwdSgpIHR5cGUgZnVuY3Rpb25zIGZvciBDRl9MRV9XICYgQ28uLCBidXQgZG9uJ3QKKy0tLSBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9maWxlLmMub3JnCTIwMDYtMDItMjEgMDg6Mzc6MzYuMDAwMDAwMDAwIC0wNzAwCisrKysgZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZmlsZS5jCTIwMDYtMDItMjEgMDg6Mzc6NDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjMsNiArMjMsMTAgQEAKKyAgICAgICAgI3VuZGVmIF9fS0VSTkVMX18KKyAjZW5kaWYKKyAKKysjaWZuZGVmIF9fczgKKysjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L21zZG9zX2ZzLmg+CisgCisgI2luY2x1ZGUgImNvbW1vbi5oIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2ZpeF9wb3B1bGF0ZWRfZG9zZnNfY3JlYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdmNzMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2ZpeF9wb3B1bGF0ZWRfZG9zZnNfY3JlYXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0ODkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitUaGlzIHBhdGNoIGZpeGVzIHBvcHVsYXRlZCBkb3NmcyBpbWFnZSBjcmVhdGlvbiB3aXRoIGRpcmVjdG9yeSAKK3N0cnVjdHVyZXMuIEVhcmxpZXIgaXQgd2FzIGNhdXNpbmcgc2VnZmF1bHQ7IGFuZCBvbmx5IGltYWdlIAorcG9wdWxhdGlvbiB3aXRoIG5vIHN1YmRpcmVjdG9yaWVzIHdhcyB3b3JraW5nLgorCitJc3N1ZXMgZml4ZWQ6CisxLiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIGNoZWNrIHdhcyBvbmx5IG5lZWRlZCBmb3Igcm9vdCAKKyAgIGRpcmVjdG9yeSBlbnRyaWVzLiBBbmQgdGhpcyBjaGVjayBpcyB3cm9uZyBmb3Igbm9uLXJvb3QgCisgICBkaXJlY3Rvcmllcy4KKzIuIEZvciBlYWNoIGRpciBlbnRyeSAyIGRpci0+dGFibGUgZW50cmllcyB3ZXJlIG5lZWRlZCwgb25lIGZvciAKKyAgIHRoZSBmaWxlL2RpciBhbmQgMm5kIGZvciBsb25nIGZpbGUgbmFtZSBzdXBwb3J0LiBFYXJsaWVyIGxvbmcKKyAgIG5hbWUgc3VwcG9ydCB3YXMgYWRkZWQgZm9yIGZpbGVuYW1lcyBidXQgdGhlIDJuZCBlbnRyeSAKKyAgIGFsbG9jYXRpb24sIGluaXRpYWxpemF0aW9uICYgY291bnRpbmcgd2FzIG1pc3NlZC4KKzMuIFRoZSBtZW1vcnkgY2xlYXJpbmcgd2FzIG1pc3NlZCBhdCB0aGUgY29kZSBwYXRoIGFmdGVyIGRpci0+dGFibGUgCisgICBtZW1yb3kgYWxsb2NhdGlvbi4KKzQuIEFkZCBlbnRyaWVzIGZvciAuICYgLi4gZGlyZWN0b3JpZXMgaW4gYWxsIG5vbi1yb290IGRpcmVjdG9yaWVzLgorNS4gVGhlIC4gZGlyZWN0b3J5IHBvaW50cyB0byB0aGUgY29ycmVjdCBlbnRyeSBpbiBmYXQgbm93LgorNi4gQWxsIGRpcmVjdG9yaXkgZW50cmllcycgc2l6ZSB3YXMgbm90IHplcm8gYXMgcmVxdWlyZWQgZm9yIGRvc2ZzY2ssCisgICBOb3cgYWxsIGRpcmVjdG9yeSBlbnRyaWVzJyBzaXplIGlzIHplcm8uCisKK0VuaGFuY2VtZW50czoKKzEuIEFkZGVkIHN1cHBvcnQgZm9yIGxvbmcgbmFtZXMgZm9yIGRpcmVjdG9yeSBuYW1lcy4gVGhpcyBpcyBzYW1lCisgICBhcyB0aGUgZXhpc3RpbmcgbG9uZyBuYW1lIHN1cHBvcnQgZm9yIGZpbGVuYW1lcy4KKzIuIEFkZGVkIGVycm9yIG1lc3NhZ2VzIGZvciBwcmV2aW91c2x5IHNpbGVudCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgCisgICBvdGhlciBlcnJvcnMuCiszLiAtZCBvcHRpb25zIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggZmF0MzIsIHNvIG5vdyB0aHJvd2luZyAKKyAgIGFuIGVycm9yIGZvciB0aGF0LgorNC4gVXNlIHByZWRlZmluZWQgc3RydWN0dXJlcyBmcm9tIGtlcm5lbCdzIG1zZG9zX2ZzLmggZmlsZSwgcmF0aGVyIAorICAgdGhhbiBkZWZpbmluZyBhZ2FpbiBoZXJlLiBBbmQgYWNjb3JkaW5nbHkgY2hhbmdlIHRoZSBuYW1lcyAmIHVzZQorICAgb2Ygc3RydWN0dXJlIHZhcmlhYmxlcy4KKworT3V0c3RhbmRpbmcgSXNzdWVzOgorMS4gVGhlIC4uIGRpcmVjdG9yeSBlbnRyeSBkbyBub3QgcG9pbnQgdG8gdGhlIHBhcmVudCBvZiBjdXJyZW50CisgICBkaXJlY3RvcnkuIFRoaXMgaXNzdWUgY2FuIGJlIGZpeGVkIGJ5IHJ1bm5pbmcgZG9zZnNjayAtYSBhZnRlcgorICAgaW1hZ2UgY3JlYXRpb24uCisyLiBGb3IgZmlsZXMgdGhlIGZpbGVzaXplIGlzIGNvcnJlY3QsIGJ1dCB0aGUgY2x1c3RlcnMgc2l6ZSBpcyBtb3JlIAorICAgdGhhbiBpdCBuZWVkcyB0byBiZSwgdGhpcyBhbHNvIGNhbiBiZSBmaXhlZCBieSBydW5uaW5nIGRvc2ZzY2sgLWEKKyAgIGFmdGVyIGltYWdlIGNyZWF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAKKzIwMTEvMTIvMTMKKworCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9ta2Rvc2ZzLmMKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMKK0BAIC0yMSw3ICsyMSwxNyBAQAorICAgIEp1bmUgMjAwNCAtIEpvcmRhbiBDcm91c2UgKGluZm8ubGludXhAYW1kLmNvbSkKKyAgICBBZGRlZCAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IHRvIHBvcHVsYXRlIHRoZSBpbWFnZQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgQWxsIFJpZ2h0cyBSZXNlcnZlZAorLSAgIAorKworKyAgIDIwMTEtMTItMTM6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisrICAgRW5oYW5jZWQgdGhlIC1kIDxkaXJlY3Rvcnk+IHN1cHBvcnQgZm9yIHBvcHVsYXRpb24gb2YgaW1hZ2Ugd2hpbGUKKysgICBjcmVhdGlvbi4gRWFybGllciBzdWJkaXJlY3RvcmVzIHN1cHBvcnQgd2FzIGJyb2tlbiwgb25seSBmaWxlcyBpbgorKyAgIHRoZSByb290ZGlyIHdlcmUgc3VwcG9ydGVkLiBOb3cgZGlyZWN0b3J5IGhpcmFyY2h5IGlzIHN1cHBvcnRlZC4KKysgICBBbHNvIGFkZGVkIGxvbmcgZmlsZW5hbWUgc3VwcG9ydCB0byBkaXJlY3RvcnkgbmFtZXMuCisrICAgICBUaGUgLWQgPGRpcmVjdG9yeT4gb3B0aW9uIChpbWFnZSBwb3B1bGF0aW9uIHdoaWxlIGNyZWF0aW9uKQorKyAgIGlzIGJyb2tlbiB3aXRoIGZhdDMyLgorKyAgIENvcHlyaWdodCAoQykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24sIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKysKKysKKyAgICBGaXhlcy9hZGRpdGlvbnMgTWF5IDE5OTggYnkgUm9tYW4gSG9kZWsKKyAgICA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+OgorICAgIC0gQXRhcmkgZm9ybWF0IHN1cHBvcnQKK0BAIC04NiwyMyArOTYsMjMgQEAKKyAjIHVuZGVmIF9fS0VSTkVMX18KKyAjZW5kaWYKKyAKKy0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorLQorKyNpZm5kZWYgX19BU01fU1RVQl9CWVRFT1JERVJfSF9fCisgI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKy0jaWZkZWYgX19sZTE2X3RvX2NwdQorLS8qICsrcm9tYW46IDIuMSBrZXJuZWwgaGVhZGVycyBkZWZpbmUgdGhlc2UgZnVuY3Rpb24sIHRoZXkncmUgcHJvYmFibHkgbW9yZQorLSAqIGVmZmljaWVudCB0aGVuIGNvZGluZyB0aGUgc3dhcHMgbWFjaGluZS1pbmRlcGVuZGVudGx5LiAqLworLSNkZWZpbmUgQ0ZfTEVfVwlfX2xlMTZfdG9fY3B1CistI2RlZmluZSBDRl9MRV9MCV9fbGUzMl90b19jcHUKKy0jZGVmaW5lIENUX0xFX1cJX19jcHVfdG9fbGUxNgorLSNkZWZpbmUgQ1RfTEVfTAlfX2NwdV90b19sZTMyCistI2Vsc2UKKy0jZGVmaW5lIENGX0xFX1codikgKCgoKHYpICYgMHhmZikgPDwgOCkgfCAoKCh2KSA+PiA4KSAmIDB4ZmYpKQorLSNkZWZpbmUgQ0ZfTEVfTCh2KSAoKCh1bnNpZ25lZCkodik+PjI0KSB8ICgoKHVuc2lnbmVkKSh2KT4+OCkmMHhmZjAwKSB8IFwKKy0gICAgICAgICAgICAgICAoKCh1bnNpZ25lZCkodik8PDgpJjB4ZmYwMDAwKSB8ICgodW5zaWduZWQpKHYpPDwyNCkpCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxpbnV4L21zZG9zX2ZzLmg+CisrCisrI3VuZGVmIENGX0xFX1cKKysjdW5kZWYgQ0ZfTEVfTAorKyN1bmRlZiBDVF9MRV9XCisrI3VuZGVmIENUX0xFX0wKKysKKysjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorKyNpbmNsdWRlIDxieXRlc3dhcC5oPgorKyNkZWZpbmUgQ0ZfTEVfVyh2KSBic3dhcF8xNih2KQorKyNkZWZpbmUgQ0ZfTEVfTCh2KSBic3dhcF8zMih2KQorICNkZWZpbmUgQ1RfTEVfVyh2KSBDRl9MRV9XKHYpCisgI2RlZmluZSBDVF9MRV9MKHYpIENGX0xFX0wodikKKy0jZW5kaWYgLyogZGVmaW5lZChfX2xlMTZfdG9fY3B1KSAqLworICAgICAKKyAjZWxzZQorIAorQEAgLTI1MywzMyArMjYzLDYgQEAgc3RydWN0IGZhdDMyX2ZzaW5mbyB7CisgICBfX3UzMgkJcmVzZXJ2ZWQyWzRdOworIH07CisgCistLyogVGhpcyBzdG9yZXMgdXAgdG8gMTMgY2hhcnMgb2YgdGhlIG5hbWUgKi8KKy0KKy1zdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgeworLSAgICAgICAgX191OCAgICBpZDsgICAgICAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyIGZvciBzbG90ICovCistICAgICAgICBfX3U4ICAgIG5hbWUwXzRbMTBdOyAgICAvKiBmaXJzdCA1IGNoYXJhY3RlcnMgaW4gbmFtZSAqLworLSAgICAgICAgX191OCAgICBhdHRyOyAgICAgICAgICAgLyogYXR0cmlidXRlIGJ5dGUgKi8KKy0gICAgICAgIF9fdTggICAgcmVzZXJ2ZWQ7ICAgICAgIC8qIGFsd2F5cyAwICovCistICAgICAgICBfX3U4ICAgIGFsaWFzX2NoZWNrc3VtOyAvKiBjaGVja3N1bSBmb3IgOC4zIGFsaWFzICovCistICAgICAgICBfX3U4ICAgIG5hbWU1XzEwWzEyXTsgICAvKiA2IG1vcmUgY2hhcmFjdGVycyBpbiBuYW1lICovCistICAgICAgICBfX3UxNiAgIHN0YXJ0OyAgICAgICAgICAvKiBzdGFydGluZyBjbHVzdGVyIG51bWJlciwgMCBpbiBsb25nIHNsb3RzICovCistICAgICAgICBfX3U4ICAgIG5hbWUxMV8xMls0XTsgICAvKiBsYXN0IDIgY2hhcmFjdGVycyBpbiBuYW1lICovCistfTsKKy0KKy1zdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5CistICB7CistICAgIGNoYXIJbmFtZVs4XSwgZXh0WzNdOwkvKiBuYW1lIGFuZCBleHRlbnNpb24gKi8KKy0gICAgX191OCAgICAgICAgYXR0cjsJCQkvKiBhdHRyaWJ1dGUgYml0cyAqLworLSAgICBfX3U4CWxjYXNlOwkJCS8qIENhc2UgZm9yIGJhc2UgYW5kIGV4dGVuc2lvbiAqLworLSAgICBfX3U4CWN0aW1lX21zOwkJLyogQ3JlYXRpb24gdGltZSwgbWlsbGlzZWNvbmRzICovCistICAgIF9fdTE2CWN0aW1lOwkJCS8qIENyZWF0aW9uIHRpbWUgKi8KKy0gICAgX191MTYJY2RhdGU7CQkJLyogQ3JlYXRpb24gZGF0ZSAqLworLSAgICBfX3UxNglhZGF0ZTsJCQkvKiBMYXN0IGFjY2VzcyBkYXRlICovCistICAgIF9fdTE2CXN0YXJ0aGk7CQkvKiBoaWdoIDE2IGJpdHMgb2YgZmlyc3QgY2wuIChGQVQzMikgKi8KKy0gICAgX191MTYJdGltZSwgZGF0ZSwgc3RhcnQ7CS8qIHRpbWUsIGRhdGUgYW5kIGZpcnN0IGNsdXN0ZXIgKi8KKy0gICAgX191MzIJc2l6ZTsJCQkvKiBmaWxlIHNpemUgKGluIGJ5dGVzKSAqLworLSAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CistCisgLyogVGhlICJib290IGNvZGUiIHdlIHB1dCBpbnRvIHRoZSBmaWxlc3lzdGVtLi4uIGl0IHdyaXRlcyBhIG1lc3NhZ2UgYW5kCisgICAgdGVsbHMgdGhlIHVzZXIgdG8gdHJ5IGFnYWluICovCisgCitAQCAtMzU2LDcgKzMzOSw2IEBAIHN0YXRpYyBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICpyb290X2RpcjsKKyBzdGF0aWMgaW50IHNpemVfcm9vdF9kaXI7CS8qIFNpemUgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IGluIGJ5dGVzICovCisgc3RhdGljIGludCBzZWN0b3JzX3Blcl9jbHVzdGVyID0gMDsJLyogTnVtYmVyIG9mIHNlY3RvcnMgcGVyIGRpc2sgY2x1c3RlciAqLworIHN0YXRpYyBpbnQgcm9vdF9kaXJfZW50cmllcyA9IDA7CS8qIE51bWJlciBvZiByb290IGRpcmVjdG9yeSBlbnRyaWVzICovCistc3RhdGljIGludCByb290X2Rpcl9udW1fZW50cmllcyA9IDA7Cisgc3RhdGljIGludCBsYXN0X2NsdXN0ZXJfd3JpdHRlbiA9IDA7CisgCisgc3RhdGljIGNoYXIgKmJsYW5rX3NlY3RvcjsJCS8qIEJsYW5rIHNlY3RvciAtIGFsbCB6ZXJvcyAqLworQEAgLTEzMTUsNyArMTI5Nyw3IEBAIHNldHVwX3RhYmxlcyAodm9pZCkKKyAgICAgICBkZS0+ZGF0ZSA9IENUX0xFX1coKHVuc2lnbmVkIHNob3J0KShjdGltZS0+dG1fbWRheSArCisgCQkJCQkgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisgCQkJCQkgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CistICAgICAgZGUtPmN0aW1lX21zID0gMDsKKysgICAgICBkZS0+Y3RpbWVfY3MgPSAwOworICAgICAgIGRlLT5jdGltZSA9IGRlLT50aW1lOworICAgICAgIGRlLT5jZGF0ZSA9IGRlLT5kYXRlOworICAgICAgIGRlLT5hZGF0ZSA9IGRlLT5kYXRlOworQEAgLTE0NTEsMTYgKzE0MzMsMjMgQEAgd3JpdGVfdGFibGVzICh2b2lkKQorIAorIC8qIEFkZCBhIGZpbGUgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZW50cnksIGFuZCBhbHNvIHdyaXRlIGl0IGludG8gdGhlIGltYWdlICovCisgCistc3RhdGljIHZvaWQgY29weV9maWxlbmFtZShjaGFyICpmaWxlbmFtZSwgY2hhciAqYmFzZSwgY2hhciAqZXh0KSB7Cisrc3RhdGljIHZvaWQgY29weV9maWxlbmFtZShjaGFyICpmaWxlbmFtZSwgY2hhciAqZG9zX25hbWUpIHsKKyAgIAorICAgY2hhciAqY2ggPSBmaWxlbmFtZTsKKyAgIGludCBpLCBsZW47CisgCistICBtZW1zZXQoYmFzZSwgMHgyMCwgOCk7CistICBtZW1zZXQoZXh0LCAweDIwLCAzKTsKKysgIGlmICghc3RyY21wKGZpbGVuYW1lLCAiLiIpKSB7CisrICAgIHN0cm5jcHkoZG9zX25hbWUsIE1TRE9TX0RPVCwgTVNET1NfTkFNRSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIGlmICghc3RyY21wKGZpbGVuYW1lLCAiLi4iKSkgeworKyAgICBzdHJuY3B5KGRvc19uYW1lLCBNU0RPU19ET1RET1QsIE1TRE9TX05BTUUpOworKyAgICByZXR1cm47CisrICB9CisrICBtZW1zZXQoZG9zX25hbWUsIDB4MjAsIE1TRE9TX05BTUUpOworICAgCisgICBmb3IobGVuID0gMCA7ICpjaCAmJiAqY2ggIT0gJy4nOyBjaCsrKSB7CistICAgIGJhc2VbbGVuKytdID0gdG91cHBlcigqY2gpOworKyAgICBkb3NfbmFtZVtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisgICAgIGlmIChsZW4gPT0gOCkgYnJlYWs7CisgICB9CisgICAKK0BAIC0xNDY4LDcgKzE0NTcsNyBAQCBzdGF0aWMgdm9pZCBjb3B5X2ZpbGVuYW1lKGNoYXIgKmZpbGVuYW1lCisgICBpZiAoKmNoKSBjaCsrOworICAgCisgICBmb3IobGVuID0gMCA7ICpjaDsgY2grKykgeworLSAgICBleHRbbGVuKytdID0gdG91cHBlcigqY2gpOworKyAgICBkb3NfbmFtZVs4ICsgbGVuKytdID0gdG91cHBlcigqY2gpOworICAgICBpZiAobGVuID09IDMpIGJyZWFrOworICAgfQorIH0KK0BAIC0xNTUxLDcgKzE1NDAsNyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICBpbnQgc3RhcnQ7CisgICBpbnQgdXNlZHNlYywgdG90YWxzZWM7CisgCistICBjaGFyIG5hbWU4M1s4XSwgZXh0ODNbM107CisrICBjaGFyIGRvc19uYW1lW01TRE9TX05BTUUrMV07CisgCisgICBzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgKnNsb3Q7CisgICBpbnQgaTsKK0BAIC0xNTYyLDIzICsxNTUxLDIyIEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgIGlmIChkaXItPnJvb3QpIHsKKyAgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisgICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKKysgICAgICByZXR1cm47CisgICAgIH0KKyAgIH0KKyAgIGVsc2UgeworLSAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKy0gICAgICBpZiAoIWRpci0+dGFibGUpIAorLQlkaXItPnRhYmxlID0gCistCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistICAgICAgZWxzZSB7CistCWRpci0+dGFibGUgPSAKKy0JICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIChkaXItPmVudHJpZXMgKyAxKSAqIAorLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLQorLQltZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0gICAgICB9CistCistICAgICAgZGlyLT5lbnRyaWVzKys7CistICAgIH0KKysgICAgLyogMiBlbnRyaWVzLCBvbmUgZXh0cmEgZm9yIGxvbmcgZmlsZW5hbWUgKi8KKysgICAgaWYgKCFkaXItPnRhYmxlKQorKyAgICAgIGRpci0+dGFibGUgPQorKyAgICAgICAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgbWFsbG9jKDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBlbHNlCisrICAgICAgZGlyLT50YWJsZSA9CisrICAgICAgICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIDIgKiAoZGlyLT5lbnRyaWVzICsgMSkgKgorKyAgICAgIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGlmICghZGlyLT50YWJsZSkKKysgICAgICBwcmludGYoIkVycm9yIC0gcmVhbGxvYyBmYWlsZWRcbiIpOworKyAgICBtZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgMiAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGRpci0+ZW50cmllcyArPSAyOworICAgfQorIAorICAgaW5maWxlID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFksIDApOworQEAgLTE2MTEsMTMgKzE1OTksMTMgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgICByZXR1cm4gLTE7CisgICB9CisgCistICBwcmludGYoIkFERCAlc1xuIiwgZmlsZW5hbWUpOworKyAgcHJpbnRmKCJBREQgRklMRSAlc1xuIiwgZmlsZW5hbWUpOworIAorICAgLyogR3JhYiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgKi8KKyAgIGJhc2UgPSBiYXNlbmFtZShmaWxlbmFtZSk7CisgICAKKy0gIC8qIEV4dHJhY3Qgb3V0IHRoZSA4LjMgbmFtZSAqLworLSAgY29weV9maWxlbmFtZShiYXNlLCBuYW1lODMsIGV4dDgzKTsKKysgIC8qIGNvbnZlcnQgZm9yIGRvcyBmYXQgc3RydWN0dXJlICAqLworKyAgY29weV9maWxlbmFtZShiYXNlLCBkb3NfbmFtZSk7CisgCisgICAvKiBNYWtlIGFuIGV4dGVuZGVkIG5hbWUgc2xvdCAqLworIAorQEAgLTE2MjksMTIgKzE2MTcsOSBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICAKKyAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gMDsKKyAgIAorLSAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKSAKKy0gICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgbmFtZTgzW2ldOworKyAgZm9yKGkgPSAwOyBpIDwgTVNET1NfTkFNRTsgaSsrKQorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBkb3NfbmFtZVtpXTsKKyAgIAorLSAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKSAKKy0gICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZXh0ODNbaV07CistCisgICBwID0gYmFzZTsKKyAKKyAgIGNvcHlfbmFtZShzbG90LT5uYW1lMF80LCAxMCwgJnApOworQEAgLTE2NDUsOCArMTYzMCw3IEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgIC8qIEdldCB0aGUgZW50cnkgZnJvbSB0aGUgcm9vdCBmaWxlc3l0ZW0gKi8KKyAgIGVudHJ5ID0gJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKyAKKy0gIHN0cm5jcHkoZW50cnktPm5hbWUsIG5hbWU4MywgOCk7CistICBzdHJuY3B5KGVudHJ5LT5leHQsIGV4dDgzLCAzKTsKKysgIHN0cm5jcHkoZW50cnktPm5hbWUsIGRvc19uYW1lLCBNU0RPU19OQU1FKTsKKyAKKyAKKyAgIC8qIElmIHRoZSB1c2VyIGhhcyBpdCByZWFkIG9ubHksIHRoZW4gYWRkIHJlYWQgb25seSB0byB0aGUgaW5jb21pbmcKK0BAIC0xNjY1LDcgKzE2NDksNyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgCQkJCSAgICAgICgoY3RpbWUtPnRtX21vbisxKSA8PCA1KSArCisgCQkJCSAgICAgICgoY3RpbWUtPnRtX3llYXItODApIDw8IDkpKSk7CisgCistICBlbnRyeS0+Y3RpbWVfbXMgPSAwOworKyAgZW50cnktPmN0aW1lX2NzID0gMDsKKyAgIGVudHJ5LT5jdGltZSA9IGVudHJ5LT50aW1lOworICAgZW50cnktPmNkYXRlID0gZW50cnktPmRhdGU7CisgICBlbnRyeS0+YWRhdGUgPSBlbnRyeS0+ZGF0ZTsKK0BAIC0xNzExLDYgKzE2OTUsNyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgCisgIGV4aXRfYWRkOgorICAgaWYgKGluZmlsZSkgY2xvc2UoaW5maWxlKTsKKysgIHJldHVybiAwOworIH0KKyAKKyAvKiBBZGQgYSBuZXcgZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgaW4gdHVybiBwb3B1bGF0ZSAKK0BAIC0xNzI3LDEwICsxNzEyLDE4IEBAIHN0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUKKyAgIHN0cnVjdCBkaXJlbnQgKmRlbnRyeSA9IDA7CisgICBpbnQgcmVtYWluOworICAgY2hhciAqZGF0YTsKKysgIGNoYXIgKmJhc2U7CisrICBjaGFyIGRvc19uYW1lW01TRE9TX05BTUUrMV07CisrICBzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgKnNsb3Q7CisrICBpbnQgaTsKKysgIGNoYXIgKnA7CisgCisgICAvKiBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QgKi8KKy0gIGlmICghcmRkaXIpIHJldHVybjsKKy0gIAorKyAgaWYgKCFyZGRpcikgeworKyAgICBwcmludGYoIkVycm9yIC0gZGlyIGRvZXMgbm90IGV4aXN0OiAlc1xuIiwgZmlsZW5hbWUpOworKyAgICByZXR1cm47CisrICB9CisrCisgICBpZiAoZGlyLT5yb290KSB7CisgICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworICAgICAgIHByaW50ZigiRXJyb3IgLSB0b28gbWFueSBkaXJlY3RvcnkgZW50cmllc1xuIik7CitAQCAtMTczOCwyOCArMTczMSw1OCBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgICAgIH0KKyAgIH0KKyAgIGVsc2UgeworLSAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKy0gICAgICBpZiAoIWRpci0+dGFibGUpIAorLQlkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistICAgICAgZWxzZSB7CistCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIChkaXItPmVudHJpZXMgKyAxKSAqIAorLQkJCQkJCQlzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLQorLQkvKiBaZXJvIGl0IG91dCB0byBhdm9pZCBpc3N1ZXMgKi8KKy0JbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistICAgICAgfQorLQlkaXItPmVudHJpZXMrKzsKKysgICAgLyogMiBlbnRyaWVzLCBvbmUgZXh0cmEgZm9yIGxvbmcgbmFtZSBvZiB0aGUgZGlyZWN0b3J5ICovCisrICAgIGlmICghZGlyLT50YWJsZSkKKysgICAgICBkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgbWFsbG9jKDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBlbHNlCisrICAgICAgZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgMiAqIChkaXItPmVudHJpZXMgKyAxKSAqCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGlmICghZGlyLT50YWJsZSkgeworKyAgICAgIHByaW50ZigiRXJyb3IgLSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworKyAgICAgIGdvdG8gZXhpdF9hZGRfZGlyOworICAgICB9CisrICAgIC8qIFplcm8gaXQgb3V0IHRvIGF2b2lkIGlzc3VlcyAqLworKyAgICBtZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgMiAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgIGRpci0+ZW50cmllcyArPSAyOworICAgfQorIAorKyAgcHJpbnRmKCJBREQgRElSICVzXG4iLCBmaWxlbmFtZSk7CisgICAvKiBOb3csIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgZW50cnkgZm9yIHRoZSBuZXcgZGlyZWN0b3J5ICovCisgICBuZXdkaXIgPSAoc3RydWN0IGRpcl9lbnRyeSAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkpKTsKKy0gIGlmICghbmV3ZGlyKSBnb3RvIGV4aXRfYWRkX2RpcjsKKysgIGlmICghbmV3ZGlyKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBjYWxsb2MgZmFpbGVkXG4iKTsKKysgICAgZ290byBleGl0X2FkZF9kaXI7CisrICB9CisrCisrICAvKiBHcmFiIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAqLworKyAgYmFzZSA9IGJhc2VuYW1lKGZpbGVuYW1lKTsKKysKKysgIC8qIGNvbnZlcnQgZm9yIGRvcyBzdHJ1Y3R1cmUgICovCisrICBjb3B5X2ZpbGVuYW1lKGJhc2UsIGRvc19uYW1lKTsKKysKKysgIC8qIE1ha2UgYW4gZXh0ZW5kZWQgbmFtZSBzbG90ICovCisrICBzbG90ID0gKHN0cnVjdCBtc2Rvc19kaXJfc2xvdCAqKSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworKyAgc2xvdC0+aWQgPSAnQSc7CisrICBzbG90LT5hdHRyID0gMHgwRjsKKysgIHNsb3QtPnJlc2VydmVkID0gMDsKKysgIHNsb3QtPnN0YXJ0ID0gMDsKKysKKysgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gMDsKKyAKKysgIGZvciAoaSA9IDA7IGkgPCBNU0RPU19OQU1FOyBpKyspCisrICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIGRvc19uYW1lW2ldOworKworKyAgcCA9IGJhc2U7CisrCisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTBfNCwgMTAsICZwKTsKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lNV8xMCwgMTIsICZwKTsKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lMTFfMTIsIDQsICZwKTsKKysKKysgIC8qIEdldCB0aGUgZW50cnkgZnJvbSB0aGUgcm9vdCBmaWxlc3l0ZW0gKi8KKyAgIGVudHJ5ID0gJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKyAKKy0gIHN0cm5jcHkoZW50cnktPm5hbWUsIGJhc2VuYW1lKGZpbGVuYW1lKSwgc2l6ZW9mKGVudHJ5LT5uYW1lKSk7CistICAKKysgIHN0cm5jcHkoZW50cnktPm5hbWUsIGRvc19uYW1lLCBNU0RPU19OQU1FKTsKKysKKyAgIGVudHJ5LT5hdHRyID0gQVRUUl9ESVI7CisgICBjdGltZSA9IGxvY2FsdGltZSgmY3JlYXRlX3RpbWUpOworIAorQEAgLTE3NzAsMjUgKzE3OTMsMzIgQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorIAkJCQkgICAgICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworIAkJCQkgICAgICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworIAorLSAgZW50cnktPmN0aW1lX21zID0gMDsKKysgIGVudHJ5LT5jdGltZV9jcyA9IDA7CisgICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKyAgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworICAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CisgCisgICAvKiBOb3csIHJlYWQgdGhlIGRpcmVjdG9yeSAqLworIAorLSAgd2hpbGUoKGRlbnRyeSA9IHJlYWRkaXIocmRkaXIpKSkgeworKworKyAgd2hpbGUoKGJhc2VbMF0gIT0gJy4nKSAmJiAoZGVudHJ5ID0gcmVhZGRpcihyZGRpcikpKSB7CisgICAgIHN0cnVjdCBzdGF0IHN0OworICAgICBjaGFyICpidWZmZXI7CistICAgIAorLSAgICBpZiAoIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLi4iKSkKKy0gICAgICBjb250aW51ZTsKKyAKKy0gICAgLyogRE9TIHdvdWxkbid0IGxpa2UgYSB0eXBpY2FsIHVuaXggLiAoZG90KSBmaWxlLCBzbyB3ZSBza2lwIHRob3NlIHRvbyAqLworLSAgICBpZiAoZGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSBjb250aW51ZTsKKysgICAgaWYgKGRlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgeworKyAgICAgICAgLyogZG9zIGFsc28gaGFzIC4gJiAuLiBkaXJlY3RvcnkgZW50cmllcyAqLworKyAgICAgIGlmICghICgoIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4iKSkgfHwgKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuLiIpKSkpIHsKKysgICAgICAgIC8qIGlnbm9yZSBvdGhlciAuKiBmaWxlcyAqLworKyAgICAgICAgcHJpbnRmKCJFcnJvciAtIEZpbGUvRGlyIG5hbWUgaXMgbm90IGRvcyBjb21wYXRpYmxlLCBpZ25vcmVkOiAlc1xuIiwgZGVudHJ5LT5kX25hbWUpOworKyAgICAgICAgY29udGludWU7CisrICAgICAgfQorKyAgICB9CisgCisgICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZmlsZW5hbWUpICsgc3RybGVuKGRlbnRyeS0+ZF9uYW1lKSArIDMpOworLSAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrICAgIGlmICghYnVmZmVyKSB7CisrICAgICAgICBwcmludGYoIkVycm9yIC0gbWFsbG9jIGZhaWxlZFxuIik7CisrICAgICAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgICAgfQorICAgICAKKyAgICAgc3ByaW50ZihidWZmZXIsICIlcy8lcyIsIGZpbGVuYW1lLCBkZW50cnktPmRfbmFtZSk7CisgICAgIGlmICghc3RhdChidWZmZXIsICZzdCkpIHsKK0BAIC0xODA2LDExICsxODM2LDIzIEBAIHN0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUKKyAgIC8qIE5vdyB0aGF0IHRoZSBlbnRpcmUgZGlyZWN0b3J5IGhhcyBiZWVuIHdyaXR0ZW4sIGdvIGFoZWFkIGFuZCB3cml0ZSB0aGUgZGlyZWN0b3J5CisgICAgICBlbnRyeSBhcyB3ZWxsICovCisgCisrICBlbnRyeS0+c2l6ZSA9IDA7IC8qIGEgZGlyZWN0b3J5IGhhcyB6ZXJvIHNpemUgKi8KKysKKysgIGlmIChiYXNlWzBdID09ICcuJykgIHsgLyogLiAmIC4uIHBvaW50IHRvIHBhcmVudCdzIGNsdXN0ZXIgKi8KKysgICAgZ290byBleGl0X2FkZF9kaXI7CisrICB9CisrCisgICBlbnRyeS0+c3RhcnQgPSBDVF9MRV9XKGxhc3RfY2x1c3Rlcl93cml0dGVuKTsKKyAgIGVudHJ5LT5zdGFydGhpID0gQ1RfTEVfVygobGFzdF9jbHVzdGVyX3dyaXR0ZW4gJiAweEZGRkYwMDAwKSA+PiAxNik7IAorLSAgZW50cnktPnNpemUgPSBuZXdkaXItPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpOworKworKy8qIC4gZGlyIHN0YXJ0IHBvaW50cyB0byBwYXJlbnQgKi8KKysgIG5ld2Rpci0+dGFibGVbMV0uc3RhcnQgPSBlbnRyeS0+c3RhcnQ7CisrLyogLi4gZGlyIHBvaW50cyB0byBwYXJlbnQgb2YgcGFyZW50Ki8KKysvKiAuLiBkaXIgc3RhcnQgaXMgbm90IHNldCB5ZXQsIHdvdWxkIG5lZWQgbW9yZSBjaGFuZ2VzIHRvIHRoZSBjb2RlLAorKyAqIGJ1dCBkb3Nmc2NrIGNhbiBmaXggdGhlc2UgLi4gZW50cnkgc3RhcnQgcG9pbnRlcnMgY29ycmVjdGx5ICovCisrCisrICByZW1haW4gPSBuZXdkaXItPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpOworICAgCistICByZW1haW4gPSBlbnRyeS0+c2l6ZTsKKyAgIGRhdGEgPSAoY2hhciAqKSBuZXdkaXItPnRhYmxlOworIAorICAgd2hpbGUocmVtYWluKSB7CitAQCAtMTg1OCw2ICsxOTAwLDcgQEAgc3RhdGljIHZvaWQgYWRkX3Jvb3RfZGlyZWN0b3J5KGNoYXIgKmRpcgorIAorICAgaWYgKCFuZXdkaXIpIHsKKyAgICAgY2xvc2VkaXIoZGlyKTsKKysgICAgcHJpbnRmKCJFcnJvciAtIGNhbGxvYyBmYWlsZWQhXG4iKTsKKyAgICAgcmV0dXJuOworICAgfQorIAorQEAgLTE4NzcsNyArMTkyMCwxMCBAQCBzdGF0aWMgdm9pZCBhZGRfcm9vdF9kaXJlY3RvcnkoY2hhciAqZGlyCisgICAgIGlmIChlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisgIAorICAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuKGRpcm5hbWUpICsgc3RybGVuKGVudHJ5LT5kX25hbWUpICsgMyk7CistICAgIGlmICghYnVmZmVyKSBjb250aW51ZTsKKysgICAgaWYgKCFidWZmZXIpIHsKKysgICAgICAgIHByaW50ZigiRXJyb3IgLSBtYWxsb2MgZmFpbGVkIVxuIik7CisrICAgICAgICBjb250aW51ZTsKKysgICAgfQorIAorICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZGlybmFtZSwgZW50cnktPmRfbmFtZSk7CisgICAgIGlmICghc3RhdChidWZmZXIsICZzdCkpIHsKK0BAIC0yMjQ1LDYgKzIyOTEsOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICBpZiAoY2hlY2sgJiYgbGlzdGZpbGUpCS8qIEF1dG8gYW5kIHNwZWNpZmllZCBiYWQgYmxvY2sgaGFuZGxpbmcgYXJlIG11dHVhbGx5ICovCisgICAgIGRpZSAoIi1jIGFuZCAtbCBhcmUgaW5jb21wYXRpYmxlIik7CQkvKiBleGNsdXNpdmUgb2YgZWFjaCBvdGhlciEgKi8KKyAKKysgIGlmIChkaXJuYW1lICYmIChzaXplX2ZhdCA9PSAzMikpCisrICAgIGRpZSAoIi1kIGlzIGluY29tcGF0aWJsZSB3aXRoIEZBVDMyIik7CisrCisgICBpZiAoIWNyZWF0ZSkgeworICAgICBjaGVja19tb3VudCAoZGV2aWNlX25hbWUpOwkvKiBJcyB0aGUgZGV2aWNlIGFscmVhZHkgbW91bnRlZD8gKi8KKyAgICAgZGV2ID0gb3BlbiAoZGV2aWNlX25hbWUsIE9fUkRXUik7CS8qIElzIGl0IGEgc3VpdGFibGUgZGV2aWNlIHRvIGJ1aWxkIHRoZSBGUyBvbj8gKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9pbmNsdWRlLWxpbnV4LXR5cGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1YzhjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9pbmNsdWRlLWxpbnV4LXR5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK21rZHNvZnMgaXMgdXNpbmcgdHlwZXMgb2YgdGhlIHN0eWxlIF9fdTgsIHdoaWNoIGl0IGdldHMgd2l0aCBzb21lCit2ZXJzaW9ucyBvZiBsaWJjIGhlYWRlcnMgdmlhIGxpbnV4L2hkcmVnLmggaW5jbHVkaW5nIGFzbS90eXBlcy5oLgorTmV3ZXIgdmVyc2lvbiBvZiBmZWRvcmEgKGF0IGxlYXN0KSBoYXZlIGEgaGRyZWcuaCB3aGljaGRvZXMgbm90CitpbmNsdWRlIGFzbS90eXBlcy5oLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHBhdGNoIG1rZG9zZnMuYyB0byBleHBsaWNpdHkKK2luY2x1ZGUgbGludXgvdHlwZXMuaCB3aGljaCB3aWxsIGluIHR1cm4gcHVsbCBpbiBhc20vdHlwZXMuaCB3aGljaAorZGVmaW5lcyB0aGVzZSB2YXJpYWJsZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkb3Nmc3Rvb2xzLTIuMTAvbWtkb3Nmcy9ta2Rvc2ZzLmN+CTIwMDYtMDctMTIgMTg6NDY6MjEuMDAwMDAwMDAwICsxMDAwCisrKysgZG9zZnN0b29scy0yLjEwL21rZG9zZnMvbWtkb3Nmcy5jCTIwMDYtMDctMTIgMTg6NDY6MjEuMDAwMDAwMDAwICsxMDAwCitAQCAtNjAsNiArNjAsNyBAQAorICNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCisgCisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisgI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisgI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisgI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1ib290Y29kZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjFiZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1ib290Y29kZS5wYXRjaApAQCAtMCwwICsxLDI0MSBAQAorQWRkIG9wdGlvbiB0byByZWFkIGluIGJvb3Rjb2RlIGZyb20gYSBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9DaGFuZ2VMb2cJMTk5Ny0wNi0xOCAxMDowOTozOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9DaGFuZ2VMb2cJMjAxMS0xMi0wNiAxMjoxNDoyMy42MzQwMTE1NTggKzAwMDAKK0BAIC0xLDMgKzEsMTQgQEAKKysxOXRoIEp1bmUgMjAwMwkJCVNhbSBCaW5nbmVyIChzYW1AYmluZ25lci5jb20pCisrCisrCUFkZGVkIG9wdGlvbiB0byByZWFkIGluIGJvb3Rjb2RlIGZyb20gYSBmaWxlIHNvIHRoYXQgaWYgeW91IGhhdmUKKysJZm9yIGV4YW1wbGUgV2luZG93cyAyMDAwIGJvb3QgY29kZSwgeW91IGNhbiBoYXZlIGl0IHdyaXRlIHRoYXQKKysJYXMgdGhlIGJvb3Rjb2RlLiAgVGhpcyBpcyBhIGR1bXAgb2YgdGhlIGJlaGlubmluZyBvZiBhIHBhcnRpdGlvbgorKwlnZW5lcmFsbHkgNTEyIGJ5dGVzLCBidXQgY2FuIGJlIHVwIHRvIHJlc2VydmVkIHNlY3RvcnMqNTEyIGJ5dGVzLgorKyAgICAgICAgQWxzbyB3cml0ZXMgMHg4MCBhcyB0aGUJQklPUyBkcml2ZSBudW1iZXIgaWYgd2UgYXJlIGZvcm1hdHRpbmcgYQorKwloYXJkIGRyaXZlLCBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIGhpZGRlbiBzZWN0b3JzIHRvIGJlIHRoZQorKwludW1iZXIgb2Ygc2VjdG9ycyBpbiBvbmUgdHJhY2suIFRoZXNlIHdlcmUgcmVxdWlyZWQgc28gdGhhdCBET1MKKysJY291bGQgYm9vdCB1c2luZyB0aGUgYm9vdGNvZGUuCisrCisgMjh0aCBKYW51YXJ5IDE5OTUJCUguIFBldGVyIEFudmluIChocGFAeWdnZHJhc2lsLmNvbSkKKyAKKyAJQmV0dGVyIGFsZ29yaXRobSB0byBzZWxlY3QgY2x1c3RlciBzaXplcyBvbiBsYXJnZSBmaWxlc3lzdGVtcy4KK0luZGV4OiBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLjgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkb3Nmc3Rvb2xzLTIuMTEub3JpZy9ta2Rvc2ZzL21rZG9zZnMuOAkyMDA0LTAyLTI1IDE5OjM2OjA3LjAwMDAwMDAwMCArMDAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuOAkyMDExLTEyLTA2IDEyOjE5OjU0Ljc3Nzg4ODQzNCArMDAwMAorQEAgLTQ0LDYgKzQ0LDEwIEBACisgLkkgbWVzc2FnZS1maWxlCisgXQorIFsKKysuQiBcLUIKKysuSSBib290Y29kZS1maWxlCisrXQorK1sKKyAuQiBcLW4KKyAuSSB2b2x1bWUtbmFtZQorIF0KK0BAIC0xNjUsNiArMTY5LDE4IEBACisgY2FycmlhZ2UgcmV0dXJuLWxpbmUgZmVlZCBjb21iaW5hdGlvbnMsIGFuZCB0YWJzIGhhdmUgYmVlbiBleHBhbmRlZC4KKyBJZiB0aGUgZmlsZW5hbWUgaXMgYSBoeXBoZW4gKC0pLCB0aGUgdGV4dCBpcyB0YWtlbiBmcm9tIHN0YW5kYXJkIGlucHV0LiAKKyAuVFAKKysuQkkgXC1CICIgYm9vdGNvZGUtZmlsZSIKKytVc2VzIGJvb3QgbWFjaGluZSBjb2RlIGZyb20gZmlsZSAiZmlsZSIuICBPbiBhbnkgdGhpbmcgb3RoZXIgdGhhbiBGQVQzMiwKKyt0aGlzIG9ubHkgd3JpdGVzIHRoZSBmaXJzdCAzIGJ5dGVzLCBhbmQgNDgwIGJ5dGVzIGZyb20gb2Zmc2V0IDNFaC4gIE9uCisrRkFUMzIsIHRoaXMgd3JpdGVzIHRoZSBmaXJzdCAzIGJ5dGVzLCA0MjAgYnl0ZXMgZnJvbSBvZmZzZXQgNUFoIHRvIGJvdGgKKytwcmltYXJ5IGFuZCBiYWNrdXAgYm9vdCBzZWN0b3JzLiAgQWxzbyB3cml0ZXMgYWxsIG90aGVyIHJlc2VydmVkIHNlY3RvcnMKKytleGNsdWRpbmcgdGhlIHNlY3RvcnMgZm9sbG93aW5nIGJvb3Qgc2VjdG9ycyAodXN1YWxseSBzZWN0b3IgMiBhbmQgNykuCisrRG9lcyBub3QgcmVxdWlyZSB0aGF0IHRoZSBpbnB1dCBmaWxlIGJlIGFzIGxhcmdlIGFzIHJlc2VydmVkX3NlY3RvcnMqNTEyLgorK1RvIG1ha2UgYSBGQVQzMiBwYXJ0aXRpb24gYm9vdGFibGUsIHlvdSB3aWxsIG5lZWQgYXQgbGVhc3QgdGhlIGZpcnN0CisrMTMgc2VjdG9ycyAoNjY1NiBieXRlcykuICBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHBhcnRpdGlvbiBhcyB0aGUgYXJndW1lbnQKKyt0byBjbG9uZSB0aGUgYm9vdCBjb2RlIGZyb20gdGhhdCBwYXJ0aXRpb24uCisraS5lIG1rZG9zZnMgLUIgL2Rldi9zZGExIC9kZXYvc2RhMQorKy5UUAorIC5CSSBcLW4gIiB2b2x1bWUtbmFtZSIKKyBTZXRzIHRoZSB2b2x1bWUgbmFtZSAobGFiZWwpIG9mIHRoZSBmaWxlc3lzdGVtLiAgVGhlIHZvbHVtZSBuYW1lIGNhbgorIGJlIHVwIHRvIDExIGNoYXJhY3RlcnMgbG9uZy4gIFRoZSBkZWZhdWx0IGlzIG5vIGxhYmVsLgorQEAgLTE5OCw4ICsyMTQsOSBAQAorIHNpbXBseSB3aWxsIG5vdCBzdXBwb3J0IGl0IDspCisgLlNIIEFVVEhPUgorIERhdmUgSHVkc29uIC0gPGRhdmVAaHVtYnVnLmRlbW9uLmNvLnVrPjsgbW9kaWZpZWQgYnkgUGV0ZXIgQW52aW4KKy08aHBhQHlnZ2RyYXNpbC5jb20+LiBGaXhlcyBhbmQgYWRkaXRpb25zIGJ5IFJvbWFuIEhvZGVrCistPHJvbWFuQGhvZGVrLm5ldD4gZm9yIERlYmlhbi9HTlUgTGludXguCisrPGhwYUB5Z2dkcmFzaWwuY29tPiBhbmQgU2FtIEJpbmduZXIgPHNhbUBiaW5nbmVyLmNvbT4uIEZpeGVzIGFuZAorK2FkZGl0aW9ucyBieSBSb21hbiBIb2RlayA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisrZm9yIERlYmlhbi9HTlUgTGludXguCisgLlNIIEFDS05PV0xFREdFTUVOVFMKKyAuQiBta2Rvc2ZzCisgaXMgYmFzZWQgb24gY29kZSBmcm9tCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAwNS0wMy0xMiAxNjoxMjoxNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAxMS0xMi0wNiAxMjoyNzo1NS4xMjE4ODYwNzYgKzAwMDAKK0BAIC0yNCw2ICsyNCwxMiBAQAorICAgIC0gTmV3IG9wdGlvbnMgLUEsIC1TLCAtQworICAgIC0gU3VwcG9ydCBmb3IgZmlsZXN5c3RlbXMgPiAyR0IKKyAgICAtIEZBVDMyIHN1cHBvcnQKKysKKysgICBGaXhlcy9hZGRpdGlvbnMgSnVuZSAyMDAzIGJ5IFNhbSBCaW5nbmVyCisrICAgPHNhbUBiaW5nbmVyLmNvbT46CisrICAgLSBBZGQgLUIgb3B0aW9uIHRvIHJlYWQgaW4gYm9vdGNvZGUgZnJvbSBhIGZpbGUKKysgICAtIFdyaXRlIEJJT1MgZHJpdmUgbnVtYmVyIHNvIHRoYXQgRlMgY2FuIHByb3Blcmx5IGJvb3QKKysgICAtIFNldCBudW1iZXIgb2YgaGlkZGVuIHNlY3RvcnMgYmVmb3JlIGJvb3QgY29kZSB0byBiZSBvbmUgdHJhY2sKKyAgICAKKyAgICBDb3B5aW5nOiAgICAgQ29weXJpZ2h0IDE5OTMsIDE5OTQgRGF2aWQgSHVkc29uIChkYXZlQGh1bWJ1Zy5kZW1vbi5jby51aykKKyAKK0BAIC0xNTMsNiArMTU5LDggQEAKKyAjZGVmaW5lIEZBVF9CQUQgICAgICAweDBmZmZmZmY3CisgCisgI2RlZmluZSBNU0RPU19FWFRfU0lHTiAweDI5CS8qIGV4dGVuZGVkIGJvb3Qgc2VjdG9yIHNpZ25hdHVyZSAqLworKyNkZWZpbmUgSERfRFJJVkVfTlVNQkVSIDB4ODAJLyogQm9vdCBvZmYgZmlyc3QgaGFyZCBkcml2ZSAqLworKyNkZWZpbmUgRkRfRFJJVkVfTlVNQkVSIDB4MDAJLyogQm9vdCBvZmYgZmlyc3QgZmxvcHB5IGRyaXZlICovCisgI2RlZmluZSBNU0RPU19GQVQxMl9TSUdOICJGQVQxMiAgICIJLyogRkFUMTIgZmlsZXN5c3RlbSBzaWduYXR1cmUgKi8KKyAjZGVmaW5lIE1TRE9TX0ZBVDE2X1NJR04gIkZBVDE2ICAgIgkvKiBGQVQxNiBmaWxlc3lzdGVtIHNpZ25hdHVyZSAqLworICNkZWZpbmUgTVNET1NfRkFUMzJfU0lHTiAiRkFUMzIgICAiCS8qIEZBVDMyIGZpbGVzeXN0ZW0gc2lnbmF0dXJlICovCitAQCAtMTc1LDYgKzE4Myw4IEBACisgI2RlZmluZSBCT09UQ09ERV9TSVpFCQk0NDgKKyAjZGVmaW5lIEJPT1RDT0RFX0ZBVDMyX1NJWkUJNDIwCisgCisrI2RlZmluZSBNQVhfUkVTRVJWRUQJCTB4RkZGRgorKworIC8qIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpcyB1c2VkIG9uIGFsbCBzdHJ1Y3R1cmVzIHRvIG1ha2UgZ2NjIGlnbm9yZSBhbnkKKyAgKiBhbGlnbm1lbnRzICovCisgCitAQCAtMjAyLDcgKzIxMiw3IEBACisgICBfX3UxNiAgICAgICAgIGZhdF9sZW5ndGg7CS8qIHNlY3RvcnMvRkFUICovCisgICBfX3UxNiAgICAgICAgIHNlY3NfdHJhY2s7CS8qIHNlY3RvcnMgcGVyIHRyYWNrICovCisgICBfX3UxNiAgICAgICAgIGhlYWRzOwkJLyogbnVtYmVyIG9mIGhlYWRzICovCistICBfX3UzMiAgICAgICAgIGhpZGRlbjsJCS8qIGhpZGRlbiBzZWN0b3JzICh1bnVzZWQpICovCisrICBfX3UzMiAgICAgICAgIGhpZGRlbjsJCS8qIGhpZGRlbiBzZWN0b3JzIChvbmUgdHJhY2spICovCisgICBfX3UzMiAgICAgICAgIHRvdGFsX3NlY3Q7CS8qIG51bWJlciBvZiBzZWN0b3JzIChpZiBzZWN0b3JzID09IDApICovCisgICB1bmlvbiB7CisgICAgIHN0cnVjdCB7CitAQCAtMjg1LDYgKzI5NSw4IEBACisgCisgLyogR2xvYmFsIHZhcmlhYmxlcyAtIHRoZSByb290IG9mIGFsbCBldmlsIDotKSAtIHNlZSB0aGVzZSBhbmQgd2VlcCEgKi8KKyAKKytzdGF0aWMgY2hhciAqdGVtcGxhdGVfYm9vdF9jb2RlOwkvKiBWYXJpYWJsZSB0byBzdG9yZSBhIGZ1bGwgdGVtcGxhdGUgYm9vdCBzZWN0b3IgaW4gKi8KKytzdGF0aWMgaW50IHVzZV90ZW1wbGF0ZSA9IDA7Cisgc3RhdGljIGNoYXIgKnByb2dyYW1fbmFtZSA9ICJta2Rvc2ZzIjsJLyogTmFtZSBvZiB0aGUgcHJvZ3JhbSAqLworIHN0YXRpYyBjaGFyICpkZXZpY2VfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgdGhlIGRldmljZSBvbiB3aGljaCB0byBjcmVhdGUgdGhlIGZpbGVzeXN0ZW0gKi8KKyBzdGF0aWMgaW50IGF0YXJpX2Zvcm1hdCA9IDA7CS8qIFVzZSBBdGFyaSB2YXJpYXRpb24gb2YgTVMtRE9TIEZTIGZvcm1hdCAqLworQEAgLTgzNyw2ICs4NDksMTIgQEAKKyAgICAgdmktPnZvbHVtZV9pZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHZvbHVtZV9pZCAmIDB4MDBmZjAwMDApID4+IDE2KTsKKyAgICAgdmktPnZvbHVtZV9pZFszXSA9ICh1bnNpZ25lZCBjaGFyKSAodm9sdW1lX2lkID4+IDI0KTsKKyAgIH0KKysgIGlmIChicy5tZWRpYSA9PSAweGY4KSB7CisrICAgICAgdmktPmRyaXZlX251bWJlciA9IEhEX0RSSVZFX05VTUJFUjsgIC8qIFNldCBiaW9zIGRyaXZlIG51bWJlciB0byA4MGggKi8KKysgIH0KKysgIGVsc2UgeworKyAgICAgIHZpLT5kcml2ZV9udW1iZXIgPSBGRF9EUklWRV9OVU1CRVI7ICAvKiBTZXQgYmlvcyBkcml2ZSBudW1iZXIgdG8gMDBoICovCisrICB9CisgCisgICBpZiAoIWF0YXJpX2Zvcm1hdCkgeworICAgICBtZW1jcHkodmktPnZvbHVtZV9sYWJlbCwgdm9sdW1lX25hbWUsIDExKTsKK0BAIC0xMzYyLDYgKzEzODAsMzIgQEAKKyAgICAqIGRpciBhcmVhIG9uIEZBVDEyLzE2LCBhbmQgdGhlIGZpcnN0IGNsdXN0ZXIgb24gRkFUMzIuICovCisgICB3cml0ZWJ1ZiggKGNoYXIgKikgcm9vdF9kaXIsIHNpemVfcm9vdF9kaXIsICJyb290IGRpcmVjdG9yeSIgKTsKKyAKKysgIGlmICh1c2VfdGVtcGxhdGUgPT0gMSkgeworKyAgICAvKiBkdXBlIHRlbXBsYXRlIGludG8gcmVzZXJ2ZWQgc2VjdG9ycyAqLworKyAgICBzZWVrdG8oIDAsICJTdGFydCBvZiBwYXJ0aXRpb24iICk7CisrICAgIGlmIChzaXplX2ZhdCA9PSAzMikgeworKyAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUsIDMsICJiYWNrdXAgam1wQm9vdCIgKTsKKysgICAgICBzZWVrdG8oIDB4NWEsICJzZWN0b3IgMSBib290IGFyZWEiICk7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsweDVhLCA0MjAsICJzZWN0b3IgMSBib290IGFyZWEiICk7CisrICAgICAgc2Vla3RvKCA1MTIqMiwgInRoaXJkIHNlY3RvciIgKTsKKysgICAgICBpZiAoYmFja3VwX2Jvb3QgIT0gMCkgeworKyAgICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSs1MTIqMiwgYmFja3VwX2Jvb3Qqc2VjdG9yX3NpemUgLSA1MTIqMiwgImRhdGEgdG8gYmFja3VwIGJvb3QiICk7CisrICAgICAgICBzZWVrdG8oIGJhY2t1cF9ib290KnNlY3Rvcl9zaXplLCAiYmFja3VwIGJvb3Qgc2VjdG9yIiApOworKyAgICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSwgMywgImJhY2t1cCBqbXBCb290IiApOworKyAgICAgICAgc2Vla3RvKCBiYWNrdXBfYm9vdCpzZWN0b3Jfc2l6ZSsweDVhLCAiYmFja3VwIGJvb3Qgc2VjdG9yIGJvb3QgYXJlYSIgKTsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrMHg1YSwgNDIwLCAiYmFja3VwIGJvb3Qgc2VjdG9yIGJvb3QgYXJlYSIgKTsKKysgICAgICAgIHNlZWt0byggKGJhY2t1cF9ib290KzIpKnNlY3Rvcl9zaXplLCAic2VjdG9yIGZvbGxvd2luZyBiYWNrdXAgY29kZSIgKTsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrKGJhY2t1cF9ib290KzIpKnNlY3Rvcl9zaXplLCAocmVzZXJ2ZWRfc2VjdG9ycy1iYWNrdXBfYm9vdC0yKSo1MTIsICJyZW1haW5pbmcgZGF0YSIgKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSs1MTIqMiwgKHJlc2VydmVkX3NlY3RvcnMtMikqNTEyLCAicmVtYWluaW5nIGRhdGEiICk7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUsIDMsICJqbXBCb290IiApOworKyAgICAgIHNlZWt0byggMHgzZSwgInNlY3RvciAxIGJvb3QgYXJlYSIgKTsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzB4M2UsIDQ0OCwgImJvb3QgY29kZSIgKTsKKysgICAgfQorKyAgfQorKworICAgaWYgKGJsYW5rX3NlY3RvcikgZnJlZSggYmxhbmtfc2VjdG9yICk7CisgICBpZiAoaW5mb19zZWN0b3IpIGZyZWUoIGluZm9fc2VjdG9yICk7CisgICBmcmVlIChyb290X2Rpcik7ICAgLyogRnJlZSB1cCB0aGUgcm9vdCBkaXJlY3Rvcnkgc3BhY2UgZnJvbSBzZXR1cF90YWJsZXMgKi8KK0BAIC0xMzc2LDcgKzE0MjAsNyBAQAorIHsKKyAgIGZhdGFsX2Vycm9yKCJcCisgVXNhZ2U6IG1rZG9zZnMgWy1BXSBbLWNdIFstQ10gWy12XSBbLUldIFstbCBiYWQtYmxvY2stZmlsZV0gWy1iIGJhY2t1cC1ib290LXNlY3Rvcl1cblwKKy0gICAgICAgWy1tIGJvb3QtbXNnLWZpbGVdIFstbiB2b2x1bWUtbmFtZV0gWy1pIHZvbHVtZS1pZF1cblwKKysgICAgICAgWy1tIGJvb3QtbXNnLWZpbGVdIFstbiB2b2x1bWUtbmFtZV0gWy1pIHZvbHVtZS1pZF0gWy1CIGJvb3Rjb2RlXVxuXAorICAgICAgICBbLXMgc2VjdG9ycy1wZXItY2x1c3Rlcl0gWy1TIGxvZ2ljYWwtc2VjdG9yLXNpemVdIFstZiBudW1iZXItb2YtRkFUc11cblwKKyAgICAgICAgWy1oIGhpZGRlbi1zZWN0b3JzXSBbLUYgZmF0LXNpemVdIFstciByb290LWRpci1lbnRyaWVzXSBbLVIgcmVzZXJ2ZWQtc2VjdG9yc11cblwKKyAgICAgICAgL2Rldi9uYW1lIFtibG9ja3NdXG4iKTsKK0BAIC0xNDM5LDcgKzE0ODMsNyBAQAorICAgcHJpbnRmICgiJXMgIiBWRVJTSU9OICIgKCIgVkVSU0lPTl9EQVRFICIpXG4iLAorIAkgICBwcm9ncmFtX25hbWUpOworIAorLSAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiQWJjQ2Y6RjpJaTpsOm06bjpyOlI6czpTOmg6diIpKSAhPSBFT0YpCisrICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJBYmNDZjpGOklpOmw6bTpuOnI6UjpzOlM6djpCOiIpKSAhPSBFT0YpCisgICAgIC8qIFNjYW4gdGhlIGNvbW1hbmQgbGluZSBmb3Igb3B0aW9ucyAqLworICAgICBzd2l0Y2ggKGMpCisgICAgICAgeworQEAgLTE1MDksNiArMTU1Myw1MSBAQAorIAlsaXN0ZmlsZSA9IG9wdGFyZzsKKyAJYnJlYWs7CisgCisrICAgICAgY2FzZSAnQic6ICAgICAgICAgLyogQiA6IHJlYWQgaW4gYm9vdGNvZGUgKi8KKysgICAgICAgIGlmICggc3RyY21wKG9wdGFyZywgIi0iKSApCisrCSAgeworKwkgICAgbXNnZmlsZSA9IGZvcGVuKG9wdGFyZywgInIiKTsKKysJICAgIGlmICggIW1zZ2ZpbGUgKQorKwkgICAgICBwZXJyb3Iob3B0YXJnKTsKKysJICB9CisrCWVsc2UKKysJICBtc2dmaWxlID0gc3RkaW47CisrCisrCWlmICggbXNnZmlsZSApCisrCSAgeworKyAgICAgICAgICAgIGlmICghKHRlbXBsYXRlX2Jvb3RfY29kZSA9IG1hbGxvYyggTUFYX1JFU0VSVkVEICkpKQorKyAgICAgICAgICAgICAgICBkaWUoICJPdXQgb2YgbWVtb3J5IiApOworKwkgICAgLyogVGhlIHRlbXBsYXRlIGJvb3Qgc2VjdG9yIGluY2x1ZGluZyByZXNlcnZlZCBtdXN0IG5vdCBiZSA+IDY1NTM1ICovCisrICAgICAgICAgICAgdXNlX3RlbXBsYXRlID0gMTsKKysJICAgIGkgPSAwOworKwkgICAgZG8KKysJICAgICAgeworKwkJY2ggPSBnZXRjKG1zZ2ZpbGUpOworKwkJc3dpdGNoIChjaCkKKysJCSAgeworKwkJICBjYXNlIEVPRjoKKysJCSAgICBicmVhazsKKysKKysJCSAgZGVmYXVsdDoKKysJCSAgICB0ZW1wbGF0ZV9ib290X2NvZGVbaSsrXSA9IGNoOyAvKiBTdG9yZSBjaGFyYWN0ZXIgKi8KKysJCSAgICBicmVhazsKKysJCSAgfQorKwkgICAgICB9CisrCSAgICB3aGlsZSAoIGNoICE9IEVPRiAmJiBpIDwgTUFYX1JFU0VSVkVEICk7CisrCSAgICBjaCA9IGdldGMobXNnZmlsZSk7IC8qIGZpbmQgb3V0IGlmIHdlJ3JlIGF0IEVPRiAqLworKworKwkgICAgLyogRmlsbCB1cCB3aXRoIHplcm9zICovCisrCSAgICB3aGlsZSggaSA8IE1BWF9SRVNFUlZFRCApCisrCQl0ZW1wbGF0ZV9ib290X2NvZGVbaSsrXSA9ICdcMCc7CisrCSAgICAKKysJICAgIGlmICggY2ggIT0gRU9GICkKKysJICAgICAgcHJpbnRmICgiV2FybmluZzogdGVtcGxhdGUgdG9vIGxvbmc7IHRydW5jYXRlZCBhZnRlciAlZCBieXRlc1xuIiwgaSk7CisrCSAgICAKKysJICAgIGlmICggbXNnZmlsZSAhPSBzdGRpbiApCisrCSAgICAgIGZjbG9zZShtc2dmaWxlKTsKKysJICB9CisrCWJyZWFrOworKworICAgICAgIGNhc2UgJ20nOgkJLyogbSA6IFNldCBib290IG1lc3NhZ2UgKi8KKyAJaWYgKCBzdHJjbXAob3B0YXJnLCAiLSIpICkKKyAJICB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNDcxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaApAQCAtMCwwICsxLDYzOSBAQAorQWRkIC1kIDxkaXJlY3Rvcnk+IHN1cHBvcnQgdG8gcG9wdWxhdGUgdGhlIGltYWdlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAxMS0xMi0wNiAxMjoyNzo1NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAxMS0xMi0wNiAxMjozNzoxMy40NDU5NTA3MDMgKzAwMDAKK0BAIC0xOCw2ICsxOCwxMCBAQAorICAgIGFzIGEgcnVsZSksIGFuZCBub3QgdGhlIGJsb2NrLiAgRm9yIGV4YW1wbGUgdGhlIGJvb3QgYmxvY2sgZG9lcyBub3QKKyAgICBvY2N1cHkgYSBmdWxsIGNsdXN0ZXIuCisgCisrICAgSnVuZSAyMDA0IC0gSm9yZGFuIENyb3VzZSAoaW5mby5saW51eEBhbWQuY29tKQorKyAgIEFkZGVkIC1kIDxkaXJlY3Rvcnk+IHN1cHBvcnQgdG8gcG9wdWxhdGUgdGhlIGltYWdlCisrICAgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBBbGwgUmlnaHRzIFJlc2VydmVkCisrICAgCisgICAgRml4ZXMvYWRkaXRpb25zIE1heSAxOTk4IGJ5IFJvbWFuIEhvZGVrCisgICAgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPjoKKyAgICAtIEF0YXJpIGZvcm1hdCBzdXBwb3J0CitAQCAtNzEsNiArNzUsOCBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxsaWJnZW4uaD4KKysjaW5jbHVkZSA8ZGlyZW50Lmg+CisgCisgI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyAjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDApCitAQCAtMTEwLDYgKzExNiw4IEBACisgICogc3VmZmljaWVudCAob3IgZXZlbiBiZXR0ZXIgOikgZm9yIDY0IGJpdCBvZmZzZXRzIGluIHRoZSBtZWFudGltZSAqLworICNkZWZpbmUgbGxzZWVrIGxzZWVrCisgCisrI2RlZmluZSBST1VORF9VUCh2YWx1ZSwgZGl2aXNvcikgKHZhbHVlICsgKGRpdmlzb3IgLSAodmFsdWUgJSBkaXZpc29yKSkpIC8gZGl2aXNvcgorKworIC8qIENvbnN0YW50IGRlZmluaXRpb25zICovCisgCisgI2RlZmluZSBUUlVFIDEJCQkvKiBCb29sZWFuIGNvbnN0YW50cyAqLworQEAgLTE0OSw3ICsxNTcsNiBAQAorICNkZWZpbmUgQVRUUl9WT0xVTUUgIDgJCS8qIHZvbHVtZSBsYWJlbCAqLworICNkZWZpbmUgQVRUUl9ESVIgICAgIDE2CQkvKiBkaXJlY3RvcnkgKi8KKyAjZGVmaW5lIEFUVFJfQVJDSCAgICAzMgkJLyogYXJjaGl2ZWQgKi8KKy0KKyAjZGVmaW5lIEFUVFJfTk9ORSAgICAwCQkvKiBubyBhdHRyaWJ1dGUgYml0cyAqLworICNkZWZpbmUgQVRUUl9VTlVTRUQgIChBVFRSX1ZPTFVNRSB8IEFUVFJfQVJDSCB8IEFUVFJfU1lTIHwgQVRUUl9ISURERU4pCisgCS8qIGF0dHJpYnV0ZSBiaXRzIHRoYXQgYXJlIGNvcGllZCAiYXMgaXMiICovCitAQCAtMjQ1LDYgKzI1MiwxOSBAQAorICAgX191MzIJCXJlc2VydmVkMls0XTsKKyB9OworIAorKy8qIFRoaXMgc3RvcmVzIHVwIHRvIDEzIGNoYXJzIG9mIHRoZSBuYW1lICovCisrCisrc3RydWN0IG1zZG9zX2Rpcl9zbG90IHsKKysgICAgICAgIF9fdTggICAgaWQ7ICAgICAgICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciBmb3Igc2xvdCAqLworKyAgICAgICAgX191OCAgICBuYW1lMF80WzEwXTsgICAgLyogZmlyc3QgNSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKysgICAgICAgIF9fdTggICAgYXR0cjsgICAgICAgICAgIC8qIGF0dHJpYnV0ZSBieXRlICovCisrICAgICAgICBfX3U4ICAgIHJlc2VydmVkOyAgICAgICAvKiBhbHdheXMgMCAqLworKyAgICAgICAgX191OCAgICBhbGlhc19jaGVja3N1bTsgLyogY2hlY2tzdW0gZm9yIDguMyBhbGlhcyAqLworKyAgICAgICAgX191OCAgICBuYW1lNV8xMFsxMl07ICAgLyogNiBtb3JlIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworKyAgICAgICAgX191MTYgICBzdGFydDsgICAgICAgICAgLyogc3RhcnRpbmcgY2x1c3RlciBudW1iZXIsIDAgaW4gbG9uZyBzbG90cyAqLworKyAgICAgICAgX191OCAgICBuYW1lMTFfMTJbNF07ICAgLyogbGFzdCAyIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworK307CisrCisgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeQorICAgeworICAgICBjaGFyCW5hbWVbOF0sIGV4dFszXTsJLyogbmFtZSBhbmQgZXh0ZW5zaW9uICovCitAQCAtMjkzLDYgKzMxMywxNSBAQAorIAorICNkZWZpbmUgTUVTU0FHRV9PRkZTRVQgMjkJLyogT2Zmc2V0IG9mIG1lc3NhZ2UgaW4gYWJvdmUgY29kZSAqLworIAorKy8qIFNwZWNpYWwgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgZGlyZWN0b3JpZXMgYXMgd2UgYWRkIHRoZW0gZm9yIHRoZSAtZCBvcHRpb24gKi8KKysKKytzdHJ1Y3QgZGlyX2VudHJ5IHsKKysgIGludCByb290OyAgICAgICAgICAgICAgICAgICAgICAgLyogU3BlY2lmaWVzIGlmIHRoaXMgaXMgdGhlIHJvb3QgZGlyIG9yIG5vdCAqLworKyAgaW50IGNvdW50OyAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRhYmxlICovCisrICBpbnQgZW50cmllczsgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZSAqLworKyAgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqdGFibGU7ICAvKiBQb2ludGVyIHRvIHRoZSBlbnRyeSB0YWJsZSAqLworK307CisrCisgLyogR2xvYmFsIHZhcmlhYmxlcyAtIHRoZSByb290IG9mIGFsbCBldmlsIDotKSAtIHNlZSB0aGVzZSBhbmQgd2VlcCEgKi8KKyAKKyBzdGF0aWMgY2hhciAqdGVtcGxhdGVfYm9vdF9jb2RlOwkvKiBWYXJpYWJsZSB0byBzdG9yZSBhIGZ1bGwgdGVtcGxhdGUgYm9vdCBzZWN0b3IgaW4gKi8KK0BAIC0zMjYsNiArMzU1LDkgQEAKKyBzdGF0aWMgaW50IHNpemVfcm9vdF9kaXI7CS8qIFNpemUgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IGluIGJ5dGVzICovCisgc3RhdGljIGludCBzZWN0b3JzX3Blcl9jbHVzdGVyID0gMDsJLyogTnVtYmVyIG9mIHNlY3RvcnMgcGVyIGRpc2sgY2x1c3RlciAqLworIHN0YXRpYyBpbnQgcm9vdF9kaXJfZW50cmllcyA9IDA7CS8qIE51bWJlciBvZiByb290IGRpcmVjdG9yeSBlbnRyaWVzICovCisrc3RhdGljIGludCByb290X2Rpcl9udW1fZW50cmllcyA9IDA7Cisrc3RhdGljIGludCBsYXN0X2NsdXN0ZXJfd3JpdHRlbiA9IDA7CisrCisgc3RhdGljIGNoYXIgKmJsYW5rX3NlY3RvcjsJCS8qIEJsYW5rIHNlY3RvciAtIGFsbCB6ZXJvcyAqLworIHN0YXRpYyBpbnQgaGlkZGVuX3NlY3RvcnMgPSAwOwkJLyogTnVtYmVyIG9mIGhpZGRlbiBzZWN0b3JzICovCisgCitAQCAtMzk5LDcgKzQzMSw2IEBACisgICB9CisgfQorIAorLQorIC8qIE1hcmsgYSBzcGVjaWZpZWQgc2VjdG9yIGFzIGhhdmluZyBhIHBhcnRpY3VsYXIgdmFsdWUgaW4gaXQncyBGQVQgZW50cnkgKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTEyNjYsNiArMTI5Nyw5IEBACisgICAgICAgZGllICgidW5hYmxlIHRvIGFsbG9jYXRlIHNwYWNlIGZvciByb290IGRpcmVjdG9yeSBpbiBtZW1vcnkiKTsKKyAgICAgfQorIAorKworKyAgbGFzdF9jbHVzdGVyX3dyaXR0ZW4gPSAyOworKyAgCisgICBtZW1zZXQocm9vdF9kaXIsIDAsIHNpemVfcm9vdF9kaXIpOworICAgaWYgKCBtZW1jbXAodm9sdW1lX25hbWUsICIgICAgICAgICAgICIsIDExKSApCisgICAgIHsKK0BAIC0xMzE0LDExICsxMzQ4LDExIEBACisgICB9CisgICAKKyAgIGlmICghKGJsYW5rX3NlY3RvciA9IG1hbGxvYyggc2VjdG9yX3NpemUgKSkpCistICAgICAgZGllKCAiT3V0IG9mIG1lbW9yeSIgKTsKKysgICAgZGllKCAiT3V0IG9mIG1lbW9yeSIgKTsKKysgIAorICAgbWVtc2V0KGJsYW5rX3NlY3RvciwgMCwgc2VjdG9yX3NpemUpOworIH0KKy0KKy0KKysgIAorIC8qIFdyaXRlIHRoZSBuZXcgZmlsZXN5c3RlbSdzIGRhdGEgdGFibGVzIHRvIHdoZXJldmVyIHRoZXkncmUgZ29pbmcgdG8gZW5kIHVwISAqLworIAorICNkZWZpbmUgZXJyb3Ioc3RyKQkJCQlcCitAQCAtMTM0MCw3ICsxMzc0LDcgQEAKKyAgIGRvIHsJCQkJCQkJXAorICAgICBpbnQgX19zaXplID0gKHNpemUpOwkJCQlcCisgICAgIGlmICh3cml0ZSAoZGV2LCBidWYsIF9fc2l6ZSkgIT0gX19zaXplKQkJXAorLQllcnJvciAoImZhaWxlZCB3aGlsc3Qgd3JpdGluZyAiIGVycnN0cik7CVwKKysgICAgICAgZXJyb3IgKCJmYWlsZWQgd2hpbHN0IHdyaXRpbmcgIiBlcnJzdHIpOwlcCisgICB9IHdoaWxlKDApCisgCisgCitAQCAtMTQxMiw2ICsxNDQ2LDQ1MiBAQAorICAgZnJlZSAoZmF0KTsgIC8qIEZyZWUgdXAgdGhlIGZhdCB0YWJsZSBzcGFjZSByZXNlcnZlZCBkdXJpbmcgc2V0dXBfdGFibGVzICovCisgfQorIAorKy8qIEFkZCBhIGZpbGUgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZW50cnksIGFuZCBhbHNvIHdyaXRlIGl0IGludG8gdGhlIGltYWdlICovCisrCisrc3RhdGljIHZvaWQgY29weV9maWxlbmFtZShjaGFyICpmaWxlbmFtZSwgY2hhciAqYmFzZSwgY2hhciAqZXh0KSB7CisrICAKKysgIGNoYXIgKmNoID0gZmlsZW5hbWU7CisrICBpbnQgaSwgbGVuOworKworKyAgbWVtc2V0KGJhc2UsIDB4MjAsIDgpOworKyAgbWVtc2V0KGV4dCwgMHgyMCwgMyk7CisrICAKKysgIGZvcihsZW4gPSAwIDsgKmNoICYmICpjaCAhPSAnLic7IGNoKyspIHsKKysgICAgYmFzZVtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGlmIChsZW4gPT0gOCkgYnJlYWs7CisrICB9CisrICAKKysgIGZvciAoIDsgKmNoICYmICpjaCAhPSAnLic7IGNoKyspOworKyAgaWYgKCpjaCkgY2grKzsKKysgIAorKyAgZm9yKGxlbiA9IDAgOyAqY2g7IGNoKyspIHsKKysgICAgZXh0W2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgaWYgKGxlbiA9PSAzKSBicmVhazsKKysgIH0KKyt9CisrCisrLyogQ2hlY2sgZm9yIGFuIC5hdHRyaWIuPGZpbGVuYW1lPiBmaWxlLCBhbmQgcmVhZCB0aGUgYXR0cmlidXRlcyB0aGVyZWluICovCisrCisrLyogV2UgYXJlIGdvaW5nIHRvIGJlIHByZXR0eSBwZWRhbnRpYyBhYm91dCB0aGlzLiAgVGhlIGZpbGUgbmVlZHMgMworKyAgIGJ5dGVzIGF0IHRoZSBiZWdpbm5pbmcsIHRoZSBhdHRyaWJ1dGVzIGFyZSBsaXN0ZWQgaW4gdGhpcyBvcmRlcjoKKysgICAKKysgICAoSClpZGRlbnwoUyl5c3RlbXwoQSlyY2hpdmVkCisrICAgCisrICAgQSBjYXBpdGFsIEhTQSBtZWFucyB0byBlbmFibGUgaXQsIGFueXRoaW5nIGVsc2Ugd2lsbCBkaXNhYmxlIGl0CisrICAgKEkgcmVjb21tZW5kIGEgJy0nKSBUaGUgdW5peCB1c2VyIGF0dHJpYnV0ZXMgd2lsbCBzdGlsbCBiZSB1c2VkIAorKyAgIGZvciB3cml0ZSBhY2Nlc3MuCisrCisrICAgRm9yIGV4YW1wbGUsIHRvIGVuYWJsZSBzeXN0ZW0gZmlsZSBhY2Nlc3MgZm9yIGxkbGludXguc3lzLCB3cml0ZSAKKysgICB0aGUgZm9sbG93aW5nIHRvIC5hdHRyaWIubGRsaW51eC5zeXM6IC1TLQorKyovCisrCisrdW5zaWduZWQgY2hhciBjaGVja19hdHRyaWJfZmlsZShjaGFyICpkaXIsIGNoYXIgKmZpbGVuYW1lKSB7CisrCisrICBjaGFyIGF0dHJpYls0XSA9IHsgJy0nLCAnLScsICctJyB9OworKyAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gMDsKKysgIGludCByZXQgPSBBVFRSX05PTkU7CisrICBpbnQgZmQgPSAtMTsKKysKKysgIGJ1ZmZlciA9IChjaGFyICopIGNhbGxvYygxLCBzdHJsZW4oZGlyKSArIHN0cmxlbihmaWxlbmFtZSkgKyAxMCk7CisrICBpZiAoIWJ1ZmZlcikgcmV0dXJuIEFUVFJfTk9ORTsKKysKKysgIHNwcmludGYoYnVmZmVyLCAiJXMvLmF0dHJpYi4lcyIsIGRpciwgZmlsZW5hbWUpOworKworKyAgaWYgKGFjY2VzcyhidWZmZXIsIFJfT0spKSAKKysgICAgZ290byBleGl0X2F0dHJpYjsKKysKKysgIGlmICgoZmQgPSBvcGVuKGJ1ZmZlciwgT19SRE9OTFksIDApKSA8IDApCisrICAgIGdvdG8gZXhpdF9hdHRyaWI7CisrCisrICBpZiAocmVhZChmZCwgYXR0cmliLCAzKSA8IDApCisrICAgIGdvdG8gZXhpdF9hdHRyaWI7CisrICAKKysgIGlmIChhdHRyaWJbMF0gPT0gJ0gnKSByZXQgfD0gQVRUUl9ISURERU47CisrICBpZiAoYXR0cmliWzFdID09ICdTJykgcmV0IHw9IEFUVFJfU1lTOworKyAgaWYgKGF0dHJpYlsyXSA9PSAnQScpIHJldCB8PSBBVFRSX0FSQ0g7CisrCisrICBwcmludGYoIiVzOiBTZXR0aW5nIGF0cnJpYnV0ZSAleFxuIiwgZmlsZW5hbWUsIHJldCk7CisrCisrIGV4aXRfYXR0cmliOgorKyAgaWYgKGZkID49IDApIGNsb3NlKGZkKTsKKysgIGlmIChidWZmZXIpIGZyZWUoYnVmZmVyKTsKKysKKysgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyB2b2lkIGNvcHlfbmFtZShjaGFyICpidWZmZXIsIGludCBzaXplLCBjaGFyICoqcG9pbnRlcikgeworKyAgaW50IGk7CisrCisrICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpICs9IDIpIHsKKysgICAgaWYgKCpwb2ludGVyKSB7CisrICAgICAgYnVmZmVyW2ldID0gKipwb2ludGVyOworKyAgICAgIGJ1ZmZlcltpICsgMV0gPSAweDAwOworKyAgICAgICpwb2ludGVyID0gKipwb2ludGVyID8gKnBvaW50ZXIgKyAxIDogMDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICBidWZmZXJbaV0gPSAweEZGOworKyAgICAgIGJ1ZmZlcltpICsgMV0gPSAweEZGOworKyAgICB9CisrICB9ICAKKyt9CisrCisrc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydWN0IGRpcl9lbnRyeSAqZGlyLCB1bnNpZ25lZCBjaGFyIGF0dHIpIAorK3sKKysgIHN0cnVjdCBzdGF0IHN0YXQ7CisrICBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICplbnRyeTsKKysgIGludCBpbmZpbGUgPSAwOworKyAgaW50IHNlY3RvcnMsIGNsdXN0ZXJzOworKyAgc3RydWN0IHRtICpjdGltZTsKKysgIGludCBjLCBzOworKyAgaW50IHB0cjsKKysgIGNoYXIgKmJ1ZmZlciwgKmJhc2U7CisrICBpbnQgc3RhcnQ7CisrICBpbnQgdXNlZHNlYywgdG90YWxzZWM7CisrCisrICBjaGFyIG5hbWU4M1s4XSwgZXh0ODNbM107CisrCisrICBzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgKnNsb3Q7CisrICBpbnQgaTsKKysgIGNoYXIgKnA7CisrCisrICAvKiBUaGUgcm9vdCBkaXJlY3RvcnkgaXMgc3RhdGljLCBldmVyeXRoaW5nIGVsc2UgZ3Jvd3MgYXMgbmVlZGVkICovCisrCisrICBpZiAoZGlyLT5yb290KSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIHByaW50ZigiRXJyb3IgLSB0b28gbWFueSBkaXJlY3RvcnkgZW50cmllc1xuIik7CisrICAgIH0KKysgIH0KKysgIGVsc2UgeworKyAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKysgICAgICBpZiAoIWRpci0+dGFibGUpIAorKwlkaXItPnRhYmxlID0gCisrCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgZWxzZSB7CisrCWRpci0+dGFibGUgPSAKKysJICAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIChkaXItPmVudHJpZXMgKyAxKSAqIAorKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKworKwltZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICB9CisrCisrICAgICAgZGlyLT5lbnRyaWVzKys7CisrICAgIH0KKysgIH0KKysKKysgIGluZmlsZSA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZLCAwKTsKKysgIGlmICghaW5maWxlKSByZXR1cm47CisrICAKKysgIGlmIChmc3RhdChpbmZpbGUsICZzdGF0KSkKKysgICAgZ290byBleGl0X2FkZDsKKysgCisrICBpZiAoU19JU0NIUihzdGF0LnN0X21vZGUpIHx8U19JU0JMSyhzdGF0LnN0X21vZGUpIHx8CisrICAgICAgU19JU0ZJRk8oc3RhdC5zdF9tb2RlKSB8fCBTX0lTTE5LKHN0YXQuc3RfbW9kZSkpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGNhbm5vdCBjcmVhdGUgYSBzcGVjaWFsIGZpbGUgaW4gYSBGQVRGU1xuIik7CisrICAgIGdvdG8gZXhpdF9hZGQ7CisrICB9CisrCisrICAvKiBGSVhNRTogVGhpcyBpc24ndCB2ZXJ5IHByZXR0eSAqLworKworKyAgdXNlZHNlYyA9IHN0YXJ0X2RhdGFfc2VjdG9yICsgKHNpemVfcm9vdF9kaXIgLyBzZWN0b3Jfc2l6ZSkgKworKyAgICAobGFzdF9jbHVzdGVyX3dyaXR0ZW4gKiBicy5jbHVzdGVyX3NpemUpOworKworKyAgdG90YWxzZWMgPSBibG9ja3MgKiBCTE9DS19TSVpFIC8gc2VjdG9yX3NpemU7CisrICAKKysgIC8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgc2VjdG9ycyAvIGNsdXN0b3JzIHRoZSBmaWxlIHJlcXVpcmVzICovCisrCisrICBzZWN0b3JzID0gUk9VTkRfVVAoc3RhdC5zdF9zaXplLCBzZWN0b3Jfc2l6ZSk7CisrICBjbHVzdGVycyA9IFJPVU5EX1VQKHNlY3RvcnMsIChpbnQpIGJzLmNsdXN0ZXJfc2l6ZSk7CisrCisrICBpZiAodXNlZHNlYyArIHNlY3RvcnMgPiB0b3RhbHNlYykgeworKyAgICBwcmludGYoIkVycm9yIC0gJXMgaXMgdG9vIGJpZyAoJWQgdnMgJWQpXG4iLCBmaWxlbmFtZSwgc2VjdG9ycywgdG90YWxzZWMgLSB1c2Vkc2VjKTsKKysgICAgY2xvc2UoaW5maWxlKTsKKysgICAgcmV0dXJuIC0xOworKyAgfQorKworKyAgcHJpbnRmKCJBREQgJXNcbiIsIGZpbGVuYW1lKTsKKysKKysgIC8qIEdyYWIgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICovCisrICBiYXNlID0gYmFzZW5hbWUoZmlsZW5hbWUpOworKyAgCisrICAvKiBFeHRyYWN0IG91dCB0aGUgOC4zIG5hbWUgKi8KKysgIGNvcHlfZmlsZW5hbWUoYmFzZSwgbmFtZTgzLCBleHQ4Myk7CisrCisrICAvKiBNYWtlIGFuIGV4dGVuZGVkIG5hbWUgc2xvdCAqLworKworKyAgc2xvdCA9IChzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgKikgJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysgIHNsb3QtPmlkID0gJ0EnOyAgCisrICBzbG90LT5hdHRyID0gMHgwRjsKKysgIHNsb3QtPnJlc2VydmVkID0gMDsKKysgIHNsb3QtPnN0YXJ0ID0gMDsKKysgIAorKyAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAwOworKyAgCisrICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspIAorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBuYW1lODNbaV07CisrICAKKysgIGZvcihpID0gMDsgaSA8IDM7IGkrKykgCisrICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIGV4dDgzW2ldOworKworKyAgcCA9IGJhc2U7CisrCisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTBfNCwgMTAsICZwKTsKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lNV8xMCwgMTIsICZwKTsKKysgIGNvcHlfbmFtZShzbG90LT5uYW1lMTFfMTIsIDQsICZwKTsKKysKKysKKysgIC8qIEdldCB0aGUgZW50cnkgZnJvbSB0aGUgcm9vdCBmaWxlc3l0ZW0gKi8KKysgIGVudHJ5ID0gJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysKKysgIHN0cm5jcHkoZW50cnktPm5hbWUsIG5hbWU4MywgOCk7CisrICBzdHJuY3B5KGVudHJ5LT5leHQsIGV4dDgzLCAzKTsKKysKKysKKysgIC8qIElmIHRoZSB1c2VyIGhhcyBpdCByZWFkIG9ubHksIHRoZW4gYWRkIHJlYWQgb25seSB0byB0aGUgaW5jb21pbmcKKysgICAgIGF0dHJpYnV0ZSBzZXR0aW5ncyAqLworKworKyAgaWYgKCEoc3RhdC5zdF9tb2RlICYgU19JV1VTUikpIGF0dHIgfD0gQVRUUl9STzsKKysgIGVudHJ5LT5hdHRyID0gYXR0cjsKKysKKysgIC8qIFNldCB0aGUgYWNjZXNzIHRpbWUgb24gdGhlIGZpbGUgKi8KKysgIGN0aW1lID0gbG9jYWx0aW1lKCZjcmVhdGVfdGltZSk7CisrCisrICBlbnRyeS0+dGltZSA9IENUX0xFX1coKHVuc2lnbmVkIHNob3J0KSgoY3RpbWUtPnRtX3NlYyA+PiAxKSArCisrCQkJCQkgIChjdGltZS0+dG1fbWluIDw8IDUpICsgKGN0aW1lLT50bV9ob3VyIDw8IDExKSkpOworKworKyAgZW50cnktPmRhdGUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoY3RpbWUtPnRtX21kYXkgKworKwkJCQkgICAgICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworKwkJCQkgICAgICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworKworKyAgZW50cnktPmN0aW1lX21zID0gMDsKKysgIGVudHJ5LT5jdGltZSA9IGVudHJ5LT50aW1lOworKyAgZW50cnktPmNkYXRlID0gZW50cnktPmRhdGU7CisrICBlbnRyeS0+YWRhdGUgPSBlbnRyeS0+ZGF0ZTsKKysgIGVudHJ5LT5zaXplID0gc3RhdC5zdF9zaXplOworKworKyAgc3RhcnQgPSBsYXN0X2NsdXN0ZXJfd3JpdHRlbjsKKysKKysgIGVudHJ5LT5zdGFydCA9IENUX0xFX1coc3RhcnQpOyAgLyogc3RhcnQgc2VjdG9yICovCisrICBlbnRyeS0+c3RhcnRoaSA9IENUX0xFX1coKHN0YXJ0ICYgMHhGRkZGMDAwMCkgPj4gMTYpOyAvKiBIaWdoIHN0YXJ0IHNlY3RvciAoZm9yIEZBVDMyKSAqLworKworKyAgLyogV2UgbWFyayBhbGwgb2YgdGhlIGNsdXN0ZXJzIHdlIHVzZSBpbiB0aGUgRkFUICovCisrICAKKysgIGZvcihjID0gMDsgYyA8IGNsdXN0ZXJzOyBjKysgKSB7CisrICAgIGludCBmcmVlOworKyAgICBpbnQgbmV4dCA9IGMgPT0gKGNsdXN0ZXJzIC0gMSkgPyBGQVRfRU9GIDogc3RhcnQgKyBjICsgMTsKKysgICAgbWFya19GQVRfY2x1c3RlcihzdGFydCArIGMsIG5leHQpOyAgCisrICAgIGxhc3RfY2x1c3Rlcl93cml0dGVuKys7CisrICB9CisrICAKKysgIC8qIFRoaXMgY29uZnVzZWQgbWUgdG9vIC0gY2x1c3RlciAyIHN0YXJ0cyBhZnRlciB0aGUKKysgICAgIHJvb3QgZGlyZWN0b3J5IGRhdGEgLSBzZWFyY2ggbWUgYXMgdG8gd2h5ICovCisrCisrICBwdHIgPSAoc3RhcnRfZGF0YV9zZWN0b3IgKiBzZWN0b3Jfc2l6ZSkgKyBzaXplX3Jvb3RfZGlyOworKyAgcHRyICs9IChzdGFydCAtIDIpICogYnMuY2x1c3Rlcl9zaXplICogc2VjdG9yX3NpemU7CisrICAgIAorKyAgYnVmZmVyID0gKGNoYXIgKikgbWFsbG9jKHNlY3Rvcl9zaXplKTsKKysKKysgIGlmICghYnVmZmVyKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworKyAgICBnb3RvIGV4aXRfYWRkOworKyAgfQorKworKyAgLyogV3JpdGUgdGhlIGZpbGUgaW50byB0aGUgZmlsZSBibG9jayAqLworKworKyAgc2Vla3RvKHB0ciwgImRhdGFmaWxlIik7CisrCisrICB3aGlsZSgxKSB7CisrICAgIGludCBzaXplID0gcmVhZChpbmZpbGUsIGJ1ZmZlciwgc2VjdG9yX3NpemUpOyAgICAKKysgICAgaWYgKHNpemUgPD0gMCkgYnJlYWs7CisrICAgIAorKyAgICB3cml0ZWJ1ZihidWZmZXIsIHNpemUsICJkYXRhIik7ICAgIAorKyAgfQorKworKyBleGl0X2FkZDoKKysgIGlmIChpbmZpbGUpIGNsb3NlKGluZmlsZSk7CisrfQorKworKy8qIEFkZCBhIG5ldyBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgZW50cnksIGFuZCBpbiB0dXJuIHBvcHVsYXRlIAorKyAgIGl0IHdpdGggaXRzIG93biBmaWxlcyAqLworKworKy8qIEZJWE1FOiAgVGhpcyBzaG91bGQgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzaXplIHRvIGFkZCBpdHNlbGYgKi8KKysKKytzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXIpIHsKKysKKysgIHN0cnVjdCBkaXJfZW50cnkgKm5ld2RpciA9IDA7CisrICBzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICplbnRyeTsKKysgIHN0cnVjdCB0bSAqY3RpbWU7CisrICBESVIgKnJkZGlyID0gb3BlbmRpcihmaWxlbmFtZSk7CisrICBzdHJ1Y3QgZGlyZW50ICpkZW50cnkgPSAwOworKyAgaW50IHJlbWFpbjsKKysgIGNoYXIgKmRhdGE7CisrCisrICAvKiBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QgKi8KKysgIGlmICghcmRkaXIpIHJldHVybjsKKysgIAorKyAgaWYgKGRpci0+cm9vdCkgeworKyAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKysgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworKyAgICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKysJZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICAgIGVsc2UgeworKwlkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKysJCQkJCQkJc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysKKysJLyogWmVybyBpdCBvdXQgdG8gYXZvaWQgaXNzdWVzICovCisrCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICAgIH0KKysJZGlyLT5lbnRyaWVzKys7CisrICAgIH0KKysgIH0KKysKKysgIC8qIE5vdywgY3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBlbnRyeSBmb3IgdGhlIG5ldyBkaXJlY3RvcnkgKi8KKysgIG5ld2RpciA9IChzdHJ1Y3QgZGlyX2VudHJ5ICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSkpOworKyAgaWYgKCFuZXdkaXIpIGdvdG8gZXhpdF9hZGRfZGlyOworKworKyAgZW50cnkgPSAmZGlyLT50YWJsZVtkaXItPmNvdW50KytdOworKworKyAgc3RybmNweShlbnRyeS0+bmFtZSwgYmFzZW5hbWUoZmlsZW5hbWUpLCBzaXplb2YoZW50cnktPm5hbWUpKTsKKysgIAorKyAgZW50cnktPmF0dHIgPSBBVFRSX0RJUjsKKysgIGN0aW1lID0gbG9jYWx0aW1lKCZjcmVhdGVfdGltZSk7CisrCisrICBlbnRyeS0+dGltZSA9IENUX0xFX1coKHVuc2lnbmVkIHNob3J0KSgoY3RpbWUtPnRtX3NlYyA+PiAxKSArCisrCQkJCQkgIChjdGltZS0+dG1fbWluIDw8IDUpICsgKGN0aW1lLT50bV9ob3VyIDw8IDExKSkpOworKworKyAgZW50cnktPmRhdGUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoY3RpbWUtPnRtX21kYXkgKworKwkJCQkgICAgICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworKwkJCQkgICAgICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworKworKyAgZW50cnktPmN0aW1lX21zID0gMDsKKysgIGVudHJ5LT5jdGltZSA9IGVudHJ5LT50aW1lOworKyAgZW50cnktPmNkYXRlID0gZW50cnktPmRhdGU7CisrICBlbnRyeS0+YWRhdGUgPSBlbnRyeS0+ZGF0ZTsKKysKKysgIC8qIE5vdywgcmVhZCB0aGUgZGlyZWN0b3J5ICovCisrCisrICB3aGlsZSgoZGVudHJ5ID0gcmVhZGRpcihyZGRpcikpKSB7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKyAgICBjaGFyICpidWZmZXI7CisrICAgIAorKyAgICBpZiAoIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLi4iKSkKKysgICAgICBjb250aW51ZTsKKysKKysgICAgLyogRE9TIHdvdWxkbid0IGxpa2UgYSB0eXBpY2FsIHVuaXggLiAoZG90KSBmaWxlLCBzbyB3ZSBza2lwIHRob3NlIHRvbyAqLworKyAgICBpZiAoZGVudHJ5LT5kX25hbWVbMF0gPT0gJy4nKSBjb250aW51ZTsKKysKKysgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihmaWxlbmFtZSkgKyBzdHJsZW4oZGVudHJ5LT5kX25hbWUpICsgMyk7CisrICAgIGlmICghYnVmZmVyKSBjb250aW51ZTsKKysgICAgCisrICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBmaWxlbmFtZSwgZGVudHJ5LT5kX25hbWUpOworKyAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CisrICAgICAgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIAorKwlhZGRfZGlyZWN0b3J5KGJ1ZmZlciwgbmV3ZGlyKTsKKysgICAgICBlbHNlIGlmIChTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisrCXVuc2lnbmVkIGNoYXIgYXR0cmliID0gY2hlY2tfYXR0cmliX2ZpbGUoZmlsZW5hbWUsIGRlbnRyeS0+ZF9uYW1lKTsKKysJYWRkX2ZpbGUoYnVmZmVyLCBuZXdkaXIsIGF0dHJpYik7CisrICAgICAgfQorKyAgICB9CisrIAorKyAgICBmcmVlKGJ1ZmZlcik7CisrICB9CisrICAKKysgIC8qIE5vdyB0aGF0IHRoZSBlbnRpcmUgZGlyZWN0b3J5IGhhcyBiZWVuIHdyaXR0ZW4sIGdvIGFoZWFkIGFuZCB3cml0ZSB0aGUgZGlyZWN0b3J5CisrICAgICBlbnRyeSBhcyB3ZWxsICovCisrCisrICBlbnRyeS0+c3RhcnQgPSBDVF9MRV9XKGxhc3RfY2x1c3Rlcl93cml0dGVuKTsKKysgIGVudHJ5LT5zdGFydGhpID0gQ1RfTEVfVygobGFzdF9jbHVzdGVyX3dyaXR0ZW4gJiAweEZGRkYwMDAwKSA+PiAxNik7IAorKyAgZW50cnktPnNpemUgPSBuZXdkaXItPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpOworKyAgCisrICByZW1haW4gPSBlbnRyeS0+c2l6ZTsKKysgIGRhdGEgPSAoY2hhciAqKSBuZXdkaXItPnRhYmxlOworKworKyAgd2hpbGUocmVtYWluKSB7CisrICAgIGludCBzaXplID0gCisrICAgICAgcmVtYWluID4gYnMuY2x1c3Rlcl9zaXplICogc2VjdG9yX3NpemUgPyBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZSA6IHJlbWFpbjsKKysKKysgICAgaW50IHBvcyA9IChzdGFydF9kYXRhX3NlY3RvciAqIHNlY3Rvcl9zaXplKSArIHNpemVfcm9vdF9kaXI7CisrICAgIHBvcyArPSAobGFzdF9jbHVzdGVyX3dyaXR0ZW4gLSAyKSAqIGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplOworKyAgICAKKysgICAgc2Vla3RvKHBvcywgImFkZF9kaXIiKTsKKysgICAgd3JpdGVidWYoZGF0YSwgc2l6ZSwgImFkZF9kaXIiKTsKKysgICAgCisrICAgIHJlbWFpbiAtPSBzaXplOworKyAgICBkYXRhICs9IHNpemU7CisrCisrICAgIG1hcmtfRkFUX2NsdXN0ZXIobGFzdF9jbHVzdGVyX3dyaXR0ZW4sIHJlbWFpbiA/IGxhc3RfY2x1c3Rlcl93cml0dGVuICsgMSA6IEZBVF9FT0YpOyAgICAgIAorKyAgICBsYXN0X2NsdXN0ZXJfd3JpdHRlbisrOworKyAgfQorKyAgCisrIGV4aXRfYWRkX2RpcjoKKysgIGlmIChyZGRpcikgY2xvc2VkaXIocmRkaXIpOworKyAgaWYgKG5ld2Rpci0+dGFibGUpIGZyZWUobmV3ZGlyLT50YWJsZSk7CisrICBpZiAobmV3ZGlyKSBmcmVlKG5ld2Rpcik7CisrfSAgCisrICAKKysvKiBHaXZlbiBhIGRpcmVjdG9yeSwgYWRkIGFsbCB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUKKysgICBpbWFnZS4gIAorKyovCisrCisrc3RhdGljIHZvaWQgYWRkX3Jvb3RfZGlyZWN0b3J5KGNoYXIgKmRpcm5hbWUpIAorK3sKKysgIERJUiAqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKKysgIHN0cnVjdCBkaXJlbnQgKmVudHJ5ID0gMDsKKysgIHN0cnVjdCBkaXJfZW50cnkgKm5ld2RpciA9IDA7CisrCisrICBpZiAoIWRpcikgeworKyAgICBwcmludGYoIkVycm9yIC0gZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0XG4iLCBkaXJuYW1lKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAKKysgIC8qIENyZWF0ZSB0aGUgcm9vdCBkaXJlY3Rvcnkgc3RydWN0dXJlIC0gdGhpcyBpcyBhIGJpdCBkaWZmZXJlbnQgdGhlbgorKyAgICAgYWJvdmUsIGJlY2F1c2UgdGhlIHRhYmxlIGFscmVhZHkgZXhpc3RzLCB3ZSBqdXN0IHJlZmVyIHRvIGl0LiAqLworKworKyAgbmV3ZGlyID0gKHN0cnVjdCBkaXJfZW50cnkgKikgY2FsbG9jKDEsc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkpKTsKKysKKysgIGlmICghbmV3ZGlyKSB7CisrICAgIGNsb3NlZGlyKGRpcik7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIG5ld2Rpci0+ZW50cmllcyA9IHJvb3RfZGlyX2VudHJpZXM7CisrICBuZXdkaXItPnJvb3QgPSAxOworKyAgbmV3ZGlyLT5jb3VudCA9IDA7CisrICBuZXdkaXItPnRhYmxlID0gcm9vdF9kaXI7CisrCisrICB3aGlsZSgoZW50cnkgPSByZWFkZGlyKGRpcikpKSB7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKyAgICBjaGFyICpidWZmZXI7CisrICAgIAorKyAgICBpZiAoIXN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4uIikpCisrICAgICAgY29udGludWU7CisrICAgIAorKyAgICAvKiBET1Mgd291bGRuJ3QgbGlrZSBhIHR5cGljYWwgdW5peCAuIChkb3QpIGZpbGUsIHNvIHdlIHNraXAgdGhvc2UgdG9vICovCisrICAgIGlmIChlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisrIAorKyAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuKGRpcm5hbWUpICsgc3RybGVuKGVudHJ5LT5kX25hbWUpICsgMyk7CisrICAgIGlmICghYnVmZmVyKSBjb250aW51ZTsKKysKKysgICAgc3ByaW50ZihidWZmZXIsICIlcy8lcyIsIGRpcm5hbWUsIGVudHJ5LT5kX25hbWUpOworKyAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CisrICAgICAgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIAorKwlhZGRfZGlyZWN0b3J5KGJ1ZmZlciwgbmV3ZGlyKTsKKysgICAgICBlbHNlIGlmIChTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisrCXVuc2lnbmVkIGNoYXIgYXR0cmliID0gY2hlY2tfYXR0cmliX2ZpbGUoZGlybmFtZSwgZW50cnktPmRfbmFtZSk7CisrCWFkZF9maWxlKGJ1ZmZlciwgbmV3ZGlyLCBhdHRyaWIpOworKyAgICAgIH0KKysgICAgfQorKworKyAgICBmcmVlKGJ1ZmZlcik7CisrICB9CisrCisrICBjbG9zZWRpcihkaXIpOworKyAgaWYgKG5ld2RpcikgZnJlZShuZXdkaXIpOworK30KKyAKKyAvKiBSZXBvcnQgdGhlIGNvbW1hbmQgdXNhZ2UgYW5kIHJldHVybiBhIGZhaWx1cmUgZXJyb3IgY29kZSAqLworIAorQEAgLTE0MjMsNyArMTkwMyw3IEBACisgICAgICAgIFstbSBib290LW1zZy1maWxlXSBbLW4gdm9sdW1lLW5hbWVdIFstaSB2b2x1bWUtaWRdIFstQiBib290Y29kZV1cblwKKyAgICAgICAgWy1zIHNlY3RvcnMtcGVyLWNsdXN0ZXJdIFstUyBsb2dpY2FsLXNlY3Rvci1zaXplXSBbLWYgbnVtYmVyLW9mLUZBVHNdXG5cCisgICAgICAgIFstaCBoaWRkZW4tc2VjdG9yc10gWy1GIGZhdC1zaXplXSBbLXIgcm9vdC1kaXItZW50cmllc10gWy1SIHJlc2VydmVkLXNlY3RvcnNdXG5cCistICAgICAgIC9kZXYvbmFtZSBbYmxvY2tzXVxuIik7CisrICAgICAgIFstZCBkaXJlY3RvcnldIC9kZXYvbmFtZSBbYmxvY2tzXVxuIik7CisgfQorIAorIC8qCitAQCAtMTQ2Myw2ICsxOTQzLDggQEAKKyAgIGludCBjOworICAgY2hhciAqdG1wOworICAgY2hhciAqbGlzdGZpbGUgPSBOVUxMOworKyAgY2hhciAqZGlybmFtZSA9IE5VTEw7CisrCisgICBGSUxFICptc2dmaWxlOworICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgIGludCBpID0gMCwgcG9zLCBjaDsKK0BAIC0xNDgzLDcgKzE5NjUsNyBAQAorICAgcHJpbnRmICgiJXMgIiBWRVJTSU9OICIgKCIgVkVSU0lPTl9EQVRFICIpXG4iLAorIAkgICBwcm9ncmFtX25hbWUpOworIAorLSAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiQWJjQ2Y6RjpJaTpsOm06bjpyOlI6czpTOnY6QjoiKSkgIT0gRU9GKQorKyAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiQWJjQ2Q6ZjpGOklpOmw6bTpuOnI6UjpzOlM6djpCOiIpKSAhPSBFT0YpCisgICAgIC8qIFNjYW4gdGhlIGNvbW1hbmQgbGluZSBmb3Igb3B0aW9ucyAqLworICAgICBzd2l0Y2ggKGMpCisgICAgICAgeworQEAgLTE1MDgsNiArMTk5MCwxMCBAQAorIAljcmVhdGUgPSBUUlVFOworIAlicmVhazsKKyAKKysgIGNhc2UgJ2QnOgorKwlkaXJuYW1lID0gb3B0YXJnOworKwlicmVhazsKKysKKyAgICAgICBjYXNlICdmJzoJCS8qIGYgOiBDaG9vc2UgbnVtYmVyIG9mIEZBVHMgKi8KKyAJbnJfZmF0cyA9IChpbnQpIHN0cnRvbCAob3B0YXJnLCAmdG1wLCAwKTsKKyAJaWYgKCp0bXAgfHwgbnJfZmF0cyA8IDEgfHwgbnJfZmF0cyA+IDQpCitAQCAtMTgxMSw4ICsyMjk3LDEwIEBACisgICBlbHNlIGlmIChsaXN0ZmlsZSkKKyAgICAgZ2V0X2xpc3RfYmxvY2tzIChsaXN0ZmlsZSk7CisgCistICB3cml0ZV90YWJsZXMgKCk7CQkvKiBXcml0ZSB0aGUgZmlsZSBzeXN0ZW0gdGFibGVzIGF3YXkhICovCisgCisrICBpZiAoZGlybmFtZSkgYWRkX3Jvb3RfZGlyZWN0b3J5KGRpcm5hbWUpOworKworKyAgd3JpdGVfdGFibGVzICgpOwkJLyogV3JpdGUgdGhlIGZpbGUgc3lzdGVtIHRhYmxlcyBhd2F5ISAqLyAgCisgICBleGl0ICgwKTsJCQkvKiBUZXJtaW5hdGUgd2l0aCBubyBlcnJvcnMhICovCisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9tc2Rvc19mYXQxMl91bmRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlOGE3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9tc2Rvc19mYXQxMl91bmRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorRml4IGEgY29tcGlsYXRpb24gZXJyb3IgZHVlIHRvIHVuZGVmaW5lZCBNU0RPU19GQVQxMi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Jvb3QuYy5vcmlnCTIwMDQtMTAtMTUgMDg6NTE6NDIuMzk0NzI1MTc2IC0wNjAwCisrKysgZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svYm9vdC5jCTIwMDQtMTAtMTUgMDg6NDk6MTYuNzc2ODYyNDU2IC0wNjAwCitAQCAtMTQsNiArMTQsOSBAQAorICNpbmNsdWRlICJpby5oIgorICNpbmNsdWRlICJib290LmgiCisgCisrI2lmbmRlZiBNU0RPU19GQVQxMgorKyNkZWZpbmUgTVNET1NfRkFUMTIgNDA4NAorKyNlbmRpZgorIAorICNkZWZpbmUgUk9VTkRfVE9fTVVMVElQTEUobixtKSAoKG4pICYmIChtKSA/IChuKSsobSktMS0oKG4pLTEpJShtKSA6IDApCisgICAgIC8qIGRvbid0IGRpdmlkZSBieSB6ZXJvICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL25vZmF0MzJfYXV0b3NlbGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhhNzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL25vZmF0MzJfYXV0b3NlbGVjdC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGQVQzMiBhcHBlYXJzIHRvIGJlIGJyb2tlbiB3aGVuIHVzZWQgd2l0aCB0aGUgLWQgb3B0aW9uIHRvIHBvcHVsYXRlIHRoZSBtc2RvcworaW1hZ2UuIFRoaXMgZGlzYWJsZXMgdGhlIEZBVDMyIGF1dG9zZWxlY3Rpb24gY29kZSB3aGljaCBtZWFucyB3ZSBkb24ndCBnZXQKK2Jyb2tlbiBpbWFnZXMgd2l0aCB0aGUgLWQgb3B0aW9uLiBJdCBjYW4gc3RpbGwgYmUgZW5hYmxlZCBvbiB0aGUgY29tbWFuZGxpbmUKK2F0IHRoZSB1c2VycyBvd24gcmlzay4gVGhpcyBjaGFuZ2VzIHVzIGJhY2sgdG8gdGhlIDIuMTAgdmVyc2lvbidzIGJlaGF2aW91cgord2hpY2ggd2FzIGtub3duIHRvIHdvcmsgd2VsbCBldmVuIHdpdGggbGFyZ2UgaW1hZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlcGVuZHMgb24gb3RoZXIgcGF0Y2hlcyB3ZSBhcHBseV0KKworUlAgMjAxMS8xMi8xMworCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAxMS0xMi0xMyAxMzo1NDozNy41Mzg1MDkzOTEgKzAwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLmMJMjAxMS0xMi0xMyAxMzo1NToxMC4yNTg1MDg2MzEgKzAwMDAKK0BAIC04MDgsMTAgKzgwOCwxMiBAQAorICAgICAgIGJzLm1lZGlhID0gKGNoYXIpIDB4Zjg7IC8qIFNldCB1cCB0aGUgbWVkaWEgZGVzY3JpcHRvciBmb3IgYSBoYXJkIGRyaXZlICovCisgICAgICAgYnMuZGlyX2VudHJpZXNbMF0gPSAoY2hhcikgMDsJLyogRGVmYXVsdCB0byA1MTIgZW50cmllcyAqLworICAgICAgIGJzLmRpcl9lbnRyaWVzWzFdID0gKGNoYXIpIDI7CisrLyoKKyAgICAgICBpZiAoIXNpemVfZmF0ICYmIGJsb2NrcypTRUNUT1JTX1BFUl9CTE9DSyA+IDEwNjQ5NjApIHsKKyAJICBpZiAodmVyYm9zZSkgcHJpbnRmKCJBdXRvLXNlbGVjdGluZyBGQVQzMiBmb3IgbGFyZ2UgZmlsZXN5c3RlbVxuIik7CisgCSAgc2l6ZV9mYXQgPSAzMjsKKyAgICAgICB9CisrKi8KKyAgICAgICBpZiAoc2l6ZV9mYXQgPT0gMzIpIHsKKyAJICAvKiBGb3IgRkFUMzIsIHRyeSB0byBkbyB0aGUgc2FtZSBhcyBNJCdzIGZvcm1hdCBjb21tYW5kOgorIAkgICAqIGZzIHNpemUgPCAyNTZNOiAwLjVrIGNsdXN0ZXJzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMi4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMi4xMS5iYgpAQCAtMCwwICsxLDM4IEBACisjIGRvc2ZzdG9vbHMgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorU1VNTUFSWSA9ICJET1MgRkFUIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2RhbmllbC1iYXVtYW5uLmNoL3NvZnR3YXJlL2Rvc2ZzdG9vbHMvIgorCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbWtkb3Nmcy9DT1BZSU5HO21kNT1jYmU2N2YwOGQ2ODgzYmZmNTg3ZjYxNWYwY2M4MWFhOCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy8ke0JQTn0vJHtCUH0uc3JjLnRhci5nei80MDdkNDA1YWRlNDEwZjc1OTdkMzY0YWI1ZGM4YzlmNi8ke0JQfS5zcmMudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21rZG9zZnMtYm9vdGNvZGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWtkb3Nmcy1kaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxpZ25tZW50X2hhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS1saW51eC10eXBlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtSW5jbHVkZS1mY250bC5oLWZvci1nZXR0aW5nLWxvZmZfdC1kZWZpbml0aW9uLnBhdGNoIFwKKwkgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MDdkNDA1YWRlNDEwZjc1OTdkMzY0YWI1ZGM4YzlmNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZWFjNmQxMjM4OGIzZDllZDc4Njg0NTI5YzFiMGQ5MzQ2ZmEyYWJiZTQwNmM0ZDRhM2ViNWEwMjNjOThhNDg0IgorCisjIE1ha2VmaWxlIHNldHMgdGhpcywgYnV0IHdlIGNsb2JiZXIgaXRzIENGTEFHUywgc28KKyMgYWRkIHRoaXMgaW4gaGVyZSB0byBmb3Igc3VyZSBhbGxvdyBmb3IgYmlnIGZpbGVzLgorIworQ0ZMQUdTX2FwcGVuZCA9ICIgLURfRklMRV9PRkZTRVRfQklUUz02NCIKK0NGTEFHU19hcHBlbmRfbGliYy1tdXNsID0gIiAtRF9HTlVfU09VUkNFIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJQUkVGSVg9JHtEfSIgIlNCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfSIgXAorCQkgICAiTUFORElSPSR7RH0ke21hbmRpcn0vbWFuOCIgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18zLjAuMjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMy4wLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMy4wLjI4LmJiCkBAIC0wLDAgKzEsMjQgQEAKKyMgZG9zZnN0b29scyBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIENvcHlyaWdodCAoQykgMjAxNSwgU8ODwrZyZW4gQnJpbmttYW5uIDxzb2VyZW4uYnJpbmttYW5uQGdtYWlsPiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorU1VNTUFSWSA9ICJET1MgRkFUIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scyIKKworU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvcmVsZWFzZXMvZG93bmxvYWQvdjMuMC4yOC9kb3Nmc3Rvb2xzLTMuMC4yOC50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiNmEwNDdhNmM2NTE4NmI5ZWJiMTg1MzcwOWFkYjM2ZGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWU5NTkxMzA0NGVjZjI3MTliNjNlYTExMjEyOTE3NjQ5NzA5YTZlNTMyMDlhNzJkNjIyMTM1YWFhODUxN2VlMiIKKworRklMRVNfJHtQTn0gPSAiJHtiYXNlX3NiaW5kaXJ9IgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfSAke2RvY2Rpcn0iCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgIlBSRUZJWD0ke0R9JHtwcmVmaXh9IiAiU0JJTkRJUj0ke0R9JHtiYXNlX3NiaW5kaXJ9IiBcCisJCSAgICJNQU5ESVI9JHtEfSR7bWFuZGlyfSIgIkRPQ0RJUj0ke0R9JHtkb2NkaXJ9IiBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlYzJjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMKQEAgLTAsMCArMSw3OSBAQAorU1VNTUFSWSA9ICJQYWNrYWdlIG1haW50ZW5hbmNlIHN5c3RlbSBmcm9tIERlYmlhbiIKK0xJQ0VOU0UgPSAiR1BMdjIuMCsiCitTRUNUSU9OID0gImJhc2UiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvZHBrZy9kcGtnXyR7UFZ9LnRhci54eiIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoIgorCitERVBFTkRTID0gInpsaWIgYnppcDIgcGVybCBuY3Vyc2VzIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUgcGVybC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSB4eiBydW4tcG9zdGluc3RzIHBlcmwiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAieHotbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBlcmxuYXRpdmUgcGtnY29uZmlnIHN5c3RlbWQKKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBkLnNldFZhcignU1lTVEVNRF9TRVJWSUNFXyVzJyAlIChwbiksICdkcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlJykKK30KKworZXhwb3J0IFBFUkwgPSAiJHtiaW5kaXJ9L3BlcmwiCitQRVJMX2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybCIKKworZXhwb3J0IFBFUkxfTElCRElSID0gIiR7bGliZGlyfS9wZXJsIgorUEVSTF9MSUJESVJfY2xhc3MtbmF0aXZlID0gIiR7bGliZGlyfS9wZXJsLW5hdGl2ZS9wZXJsIgorCitFWFRSQV9PRUNPTkYgPSAiXAorCQktLWRpc2FibGUtZHNlbGVjdCBcCisJCS0tZW5hYmxlLXN0YXJ0LXN0b3AtZGFlbW9uIFwKKwkJLS13aXRoLXpsaWIgXAorCQktLXdpdGgtYnoyIFwKKwkJLS13aXRob3V0LWxpYmx6bWEgXAorCQktLXdpdGhvdXQtc2VsaW51eCBcCisJCSIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFRBUj10YXIiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisgICAgZWNobyA+PiAke1N9L200L2NvbXBpbGVyLm00CisgICAgc2VkIC1pIC1lICdzI1BFUkxfTElCRElSPS4qJCNQRVJMX0xJQkRJUj0iJHtsaWJkaXJ9L3BlcmwiIycgJHtTfS9jb25maWd1cmUKKyAgICBhdXRvdG9vbHNfZG9fY29uZmlndXJlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke1BOfSIgPSAiZHBrZy1uYXRpdmUiIF07IHRoZW4KKwkJIyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGRvZXNuJ3QgaGF2ZSBhbiBvZmZsaW5lIG1vZGUKKwkJcm0gJHtEfSR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzCisJCXNlZCAtaSAtZSAnc3xeIyEuKiR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3Blcmx8IyEvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybHwnICR7RH0ke2JpbmRpcn0vZHBrZy0qCisJZWxzZQorCQlzZWQgLWkgLWUgJ3N8XiMhLioke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsfCMhL3Vzci9iaW4vZW52IHBlcmx8JyAke0R9JHtiaW5kaXJ9L2Rwa2ctKgorCWZpCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCdmYWxzZScsJ3RydWUnLGQpfTt0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHBrZy1jb25maWd1cmUuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNURU1EX1VOSVRESVJALCR7c3lzdGVtZF91bml0ZGlyfSxnJyBcCisJCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCisJZmkKK30KKworUFJPViA9ICJ2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCitQUk9WX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1BST1ZJREVTICs9ICIke1BST1Z9IgorCitQQUNLQUdFUyA9KyAidXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnIgorRklMRVNfdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnID0gIiR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzICR7bG9jYWxzdGF0ZWRpcn0vbGliL2Rwa2cvYWx0ZXJuYXRpdmVzICR7c3lzY29uZmRpcn0vYWx0ZXJuYXRpdmVzIgorUlBST1ZJREVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyArPSAidXBkYXRlLWFsdGVybmF0aXZlcyIKKworUEFDS0FHRVMgKz0gIiR7UE59LXBlcmwiCitGSUxFU18ke1BOfS1wZXJsID0gIiR7bGliZGlyfS9wZXJsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMS1XaGVuLXJ1bm5pbmctZG9fcGFja2FnZV93cml0ZV9kZWItd2UtaGF2ZS10cmVlcy1vZi1oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTY3ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIGQxNGZmZDc4Njk5M2RhNjBjYTg0YzQ4MTJkYThhNjU5NGE4Yzc2NGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTU6NDg6MTMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzVdIFdoZW4gcnVubmluZyBkb19wYWNrYWdlX3dyaXRlX2RlYiwgd2UgaGF2ZSB0cmVlcyBvZgorIGhhcmRsaW5rZWQgZmlsZXMgc3VjaCBhcyB0aGUgZGJnIHNvdXJjZSBmaWxlcyBpbiAke1BOfS1kYmcuIElmIHNvbWV0aGluZworIG1ha2VzIGFub3RoZXIgY29weSBvZiBvbmUgb2YgdGhvc2UgZmlsZXMgKG9yIGRlbGV0ZXMgb25lKSwgdGhlIG51bWJlciBvZgorIGxpbmtzIGEgZmlsZSBoYXMgY2hhbmdlcyBhbmQgdGFyIGNhbiBub3RpY2UgdGhpcywgZS5nLjoKKworfCBERUJVRzogRXhlY3V0aW5nIHB5dGhvbiBmdW5jdGlvbiBkb19wYWNrYWdlX2RlYgorfCBkcGtnLWRlYjogYnVpbGRpbmcgcGFja2FnZSBgc2VkLXB0ZXN0JyBpbiBgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZWQvNC4yLjItcjAvZGVwbG95LWRlYnMvaTU4Ni9zZWQtcHRlc3RfNC4yLjItcjAuM19pMzg2LmRlYicuCit8IHRhcjogLi91c3IvbGliL3NlZC9wdGVzdC90ZXN0c3VpdGUvdHN0LXJlZ2V4MjogZmlsZSBjaGFuZ2VkIGFzIHdlIHJlYWQgaXQKK3wgZHBrZy1kZWI6IGVycm9yOiBzdWJwcm9jZXNzIHRhciAtY2YgcmV0dXJuZWQgZXJyb3IgZXhpdCBzdGF0dXMgMQorCitUYXIgcmV0dXJucyBhbiBlcnJvciBvZiAxIHdoZW4gZmlsZXMgJ2NoYW5nZScgYW5kIG90aGVyIGVycm9ycyBjb2RlcworaW4gb3RoZXIgZXJyb3IgY2FzZXMuIFdlIHR3ZWFrIGRwa2ctZGViIGhlcmUgc28gdGhhdCBpdCBpZ25vcmVzIGFuIGV4aXQKK2NvZGUgb2YgMSBmcm9tIHRhci4gVGhlIGZpbGVzIGRvbid0IHJlYWxseSBjaGFuZ2UgKGFuZCB3ZSBoYXZlIGxvY2tpbmcgaW4KK3BsYWNlIHRvIGF2b2lkIHRoYXQga2luZCBvZiBpc3N1ZSkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxNS8zLzI3CistLS0KKyBkcGtnLWRlYi9idWlsZC5jIHwgMTEgKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZHBrZy1kZWIvYnVpbGQuYyBiL2Rwa2ctZGViL2J1aWxkLmMKK2luZGV4IGVhM2Q4NjEuLjE1ODk5MjcgMTAwNjQ0CistLS0gYS9kcGtnLWRlYi9idWlsZC5jCisrKysgYi9kcGtnLWRlYi9idWlsZC5jCitAQCAtNDU4LDcgKzQ1OCw3IEBAIGRvX2J1aWxkKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQorICAgY2hhciAqZGViYXI7CisgICBjaGFyICp0ZmJ1ZjsKKyAgIGludCBhcmZkOworLSAgaW50IHAxWzJdLCBwMlsyXSwgZ3pmZDsKKysgIGludCBwMVsyXSwgcDJbMl0sIGd6ZmQsIHJjOworICAgcGlkX3QgYzEsIGMyOworIAorICAgLyogRGVjb2RlIG91ciBhcmd1bWVudHMuICovCitAQCAtNTM4LDcgKzUzOCw5IEBAIGRvX2J1aWxkKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQorICAgfQorICAgY2xvc2UocDFbMF0pOworICAgc3VicHJvY19yZWFwKGMyLCBfKCI8Y29tcHJlc3M+IGZyb20gdGFyIC1jZiIpLCAwKTsKKy0gIHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCAwKTsKKysgIHJjID0gc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIFNVQlBST0NfUkVURVJST1IpOworKyAgaWYgKHJjICYmIHJjICE9IDEpCisrICAgIG9oc2hpdGUoXygic3VicHJvY2VzcyAlcyByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAlZCIpLCAidGFyIC1jZiIsIHJjKTsKKyAKKyAgIGlmIChsc2VlayhnemZkLCAwLCBTRUVLX1NFVCkpCisgICAgIG9oc2hpdGUoXygiZmFpbGVkIHRvIHJld2luZCB0ZW1wb3JhcnkgZmlsZSAoJXMpIiksIF8oImNvbnRyb2wgbWVtYmVyIikpOworQEAgLTYyNiw3ICs2MjgsMTAgQEAgZG9fYnVpbGQoY29uc3QgY2hhciAqY29uc3QgKmFyZ3YpCisgICAvKiBBbGwgZG9uZSwgY2xlYW4gdXAgd2FpdCBmb3IgdGFyIGFuZCA8Y29tcHJlc3M+IHRvIGZpbmlzaCB0aGVpciBqb2IuICovCisgICBjbG9zZShwMVsxXSk7CisgICBzdWJwcm9jX3JlYXAoYzIsIF8oIjxjb21wcmVzcz4gZnJvbSB0YXIgLWNmIiksIDApOworLSAgc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIDApOworKyAgcmMgPSBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgU1VCUFJPQ19SRVRFUlJPUik7CisrICBpZiAocmMgJiYgcmMgIT0gMSkKKysgICAgb2hzaGl0ZShfKCJzdWJwcm9jZXNzICVzIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzICVkIiksICJ0YXIgLWNmIiwgcmMpOworKworICAgLyogT2theSwgd2UgaGF2ZSBkYXRhLnRhciBhcyB3ZWxsIG5vdywgYWRkIGl0IHRvIHRoZSBhciB3cmFwcGVyLiAqLworICAgaWYgKGRlYl9mb3JtYXQubWFqb3IgPT0gMikgeworICAgICBjaGFyIGRhdGFtZW1iZXJbMTYgKyAxXTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDItQWRhcHQtdG8tbGludXgtd3JzLWtlcm5lbC12ZXJzaW9uLXdoaWNoLWhhcy1jaGFyYWN0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxYTZhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBiNGVhNTQxNThjMzk5ODc0ZTEyMzk0ZWJjOTFhZmU5ODk1NDY5NWUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjE2OjE2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBBZGFwdCB0byBsaW51eC13cnMga2VybmVsIHZlcnNpb24sIHdoaWNoIGhhcyBjaGFyYWN0ZXIKKyAnXycgaW5zaWRlLiBSZW1vdmUgdGhlIGZpcnN0LWNoYXItZGlnaXQtY2hlY2sgKGFzIHRoZSAxLjE1LjguNSB2ZXJzaW9uIGRvZXMpLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGliL2Rwa2cvcGFyc2VoZWxwLmMgfCA2ICsrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZHBrZy9wYXJzZWhlbHAuYyBiL2xpYi9kcGtnL3BhcnNlaGVscC5jCitpbmRleCA3OWIyOTA4Li43NzU4YWE1IDEwMDY0NAorLS0tIGEvbGliL2Rwa2cvcGFyc2VoZWxwLmMKKysrKyBiL2xpYi9kcGtnL3BhcnNlaGVscC5jCitAQCAtMjM1LDE0ICsyMzUsMTIgQEAgcGFyc2V2ZXJzaW9uKHN0cnVjdCBkcGtnX3ZlcnNpb24gKnJ2ZXJzaW9uLCBjb25zdCBjaGFyICpzdHJpbmcsCisgCisgICAvKiBYWFg6IFdvdWxkIGJlIGZhc3RlciB0byB1c2Ugc29tZXRoaW5nIGxpa2UgY2lzdmVyc2lvbiBhbmQgY2lzcmV2aXNpb24uICovCisgICBwdHIgPSBydmVyc2lvbi0+dmVyc2lvbjsKKy0gIGlmICgqcHRyICYmICFjX2lzZGlnaXQoKnB0cisrKSkKKy0gICAgcmV0dXJuIGRwa2dfcHV0X3dhcm4oZXJyLCBfKCJ2ZXJzaW9uIG51bWJlciBkb2VzIG5vdCBzdGFydCB3aXRoIGRpZ2l0IikpOworICAgZm9yICg7ICpwdHI7IHB0cisrKSB7CistICAgIGlmICghY19pc2RpZ2l0KCpwdHIpICYmICFjX2lzYWxwaGEoKnB0cikgJiYgc3RyY2hyKCIuLSt+OiIsICpwdHIpID09IE5VTEwpCisrICAgIGlmICghY19pc2RpZ2l0KCpwdHIpICYmICFjX2lzYWxwaGEoKnB0cikgJiYgc3RyY2hyKCIuLSt+Ol8iLCAqcHRyKSA9PSBOVUxMKQorICAgICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygiaW52YWxpZCBjaGFyYWN0ZXIgaW4gdmVyc2lvbiBudW1iZXIiKSk7CisgICB9CisgICBmb3IgKHB0ciA9IHJ2ZXJzaW9uLT5yZXZpc2lvbjsgKnB0cjsgcHRyKyspIHsKKy0gICAgaWYgKCFjX2lzZGlnaXQoKnB0cikgJiYgIWNfaXNhbHBoYSgqcHRyKSAmJiBzdHJjaHIoIi4rfiIsICpwdHIpID09IE5VTEwpCisrICAgIGlmICghY19pc2RpZ2l0KCpwdHIpICYmICFjX2lzYWxwaGEoKnB0cikgJiYgc3RyY2hyKCIuLSt+XyIsICpwdHIpID09IE5VTEwpCisgICAgICAgcmV0dXJuIGRwa2dfcHV0X3dhcm4oZXJyLCBfKCJpbnZhbGlkIGNoYXJhY3RlciBpbiByZXZpc2lvbiBudW1iZXIiKSk7CisgICB9CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAzLU91ci1wcmUtcG9zdGluc3RzLWV4cGVjdC1ELXRvLWJlLXNldC13aGVuLXJ1bm5pbmctaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0Zyb20gMjQyMjk5NzE0OTI1MTViNjRjODFlOGM2MzkyZTVkZmJkYzIyYjQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNjoyNTo0NSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNV0gT3VyIHByZS9wb3N0aW5zdHMgZXhwZWN0ICREIHRvIGJlIHNldCB3aGVuIHJ1bm5pbmcgaW4gYQorIHN5c3Jvb3QgYW5kIGRvbid0IGV4cGVjdCBhIGNocm9vdC4gVGhpcyBtYXRjaGVzIHVwIG91ciBzeXN0ZW0gZXhwZWN0YXRpb25zCisgd2l0aCB3aGF0IGRwa2cgZG9lcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMS8xMi8wNworLS0tCisgc3JjL3NjcmlwdC5jIHwgMzEgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3NjcmlwdC5jIGIvc3JjL3NjcmlwdC5jCitpbmRleCBhOTU4MTQ1Li4yNGM0OWY5IDEwMDY0NAorLS0tIGEvc3JjL3NjcmlwdC5jCisrKysgYi9zcmMvc2NyaXB0LmMKK0BAIC0xMDAsMzYgKzEwMCw5IEBAIG1haW50c2NyaXB0X3ByZV9leGVjKHN0cnVjdCBjb21tYW5kICpjbWQpCisgCXNpemVfdCBpbnN0ZGlybCA9IHN0cmxlbihpbnN0ZGlyKTsKKyAKKyAJaWYgKCppbnN0ZGlyKSB7CistCQlpZiAoc3RybmNtcChhZG1pbmRpciwgaW5zdGRpciwgaW5zdGRpcmwpICE9IDApCistCQkJb2hzaGl0KF8oImFkbWluZGlyIG11c3QgYmUgaW5zaWRlIGluc3RkaXIgZm9yIGRwa2cgdG8gd29yayBwcm9wZXJseSIpKTsKKy0JCWlmIChzZXRlbnYoIkRQS0dfQURNSU5ESVIiLCBhZG1pbmRpciArIGluc3RkaXJsLCAxKSA8IDApCistCQkJb2hzaGl0ZShfKCJ1bmFibGUgdG8gc2V0ZW52IGZvciBzdWJwcm9jZXNzZXMiKSk7CistCistCQlpZiAoY2hyb290KGluc3RkaXIpKQorLQkJCW9oc2hpdGUoXygiZmFpbGVkIHRvIGNocm9vdCB0byAnJS4yNTBzJyIpLCBpbnN0ZGlyKTsKKy0JfQorLQkvKiBTd2l0Y2ggdG8gYSBrbm93biBnb29kIGRpcmVjdG9yeSB0byBnaXZlIHRoZSBtYWludGFpbmVyIHNjcmlwdAorLQkgKiBhIHNhbmVyIGVudmlyb25tZW50LCBhbHNvIG5lZWRlZCBhZnRlciB0aGUgY2hyb290KCkuICovCistCWlmIChjaGRpcigiLyIpKQorLQkJb2hzaGl0ZShfKCJmYWlsZWQgdG8gY2hkaXIgdG8gJyUuMjU1cyciKSwgIi8iKTsKKy0JaWYgKGRlYnVnX2hhc19mbGFnKGRiZ19zY3JpcHRzKSkgeworLQkJc3RydWN0IHZhcmJ1ZiBhcmdzID0gVkFSQlVGX0lOSVQ7CistCQljb25zdCBjaGFyICoqYXJndiA9IGNtZC0+YXJndjsKKy0KKy0JCXdoaWxlICgqKythcmd2KSB7CistCQkJdmFyYnVmX2FkZF9jaGFyKCZhcmdzLCAnICcpOworLQkJCXZhcmJ1Zl9hZGRfc3RyKCZhcmdzLCAqYXJndik7CistCQl9CistCQl2YXJidWZfZW5kX3N0cigmYXJncyk7CistCQlkZWJ1ZyhkYmdfc2NyaXB0cywgImZvcmsvZXhlYyAlcyAoJXMgKSIsIGNtZC0+ZmlsZW5hbWUsCistCQkgICAgICBhcmdzLmJ1Zik7CistCQl2YXJidWZfZGVzdHJveSgmYXJncyk7CisrCQlzZXRlbnYoIkQiLCBpbnN0ZGlyLCAxKTsKKyAJfQorLQlpZiAoIWluc3RkaXJsKQorLQkJcmV0dXJuIGNtZC0+ZmlsZW5hbWU7CistCistCWFzc2VydChzdHJsZW4oY21kLT5maWxlbmFtZSkgPj0gaW5zdGRpcmwpOworLQlyZXR1cm4gY21kLT5maWxlbmFtZSArIGluc3RkaXJsOworKwlyZXR1cm4gY21kLT5maWxlbmFtZTsKKyB9CisgCisgLyoqCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Yzg1YzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gYWRiNmJmZDBmZWVjZWFmMDMwZGYwZGViZTMzNDNkN2Y3M2U3MDhhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNjoyNzo0NSArMDMwMAorU3ViamVjdDogW1BBVENIIDQvNV0gVGhlIGx1dGltZXMgZnVuY3Rpb24gZG9lc24ndCB3b3JrIHByb3Blcmx5IGZvciBhbGwKKyBzeXN0ZW1zLgorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBzcmMvYXJjaGl2ZXMuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2FyY2hpdmVzLmMgYi9zcmMvYXJjaGl2ZXMuYworaW5kZXggYmZmNWYxNC4uYjcxMTAxMyAxMDA2NDQKKy0tLSBhL3NyYy9hcmNoaXZlcy5jCisrKysgYi9zcmMvYXJjaGl2ZXMuYworQEAgLTQ0OSw4ICs0NDksOSBAQCB0YXJvYmplY3Rfc2V0X210aW1lKHN0cnVjdCB0YXJfZW50cnkgKnRlLCBjb25zdCBjaGFyICpwYXRoKQorIAorICAgaWYgKHRlLT50eXBlID09IFRBUl9GSUxFVFlQRV9TWU1MSU5LKSB7CisgI2lmZGVmIEhBVkVfTFVUSU1FUworLSAgICBpZiAobHV0aW1lcyhwYXRoLCB0dikgJiYgZXJybm8gIT0gRU5PU1lTKQorKy8qICAgIGlmIChsdXRpbWVzKHBhdGgsIHR2KSAmJiBlcnJubyAhPSBFTk9TWVMpCisgICAgICAgb2hzaGl0ZShfKCJlcnJvciBzZXR0aW5nIHRpbWVzdGFtcHMgb2YgJyUuMjU1cyciKSwgcGF0aCk7CisrKi8KKyAjZW5kaWYKKyAgIH0gZWxzZSB7CisgICAgIGlmICh1dGltZXMocGF0aCwgdHYpKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmU5NmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDBhZDdiYmE4MGQ1YjkwMzUwODlmZjJiMmY3N2E3NzRiNWIyMDE5MTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6Mjg6NTkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzVdIGRwa2ctY29tcGlsZXIubTQ6IHJlbW92ZSAtV3ZsYQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZW1vdmUgdGhlIC1XdmxhIGZsYWcgZnJvbSB0aGUgc2V0IG9mIGNvbXBpbGVyIHdhcm5pbmcgZmxhZ3MsIHNpbmNlIGdjYworb24gb2xkIGhvc3Qgc3lzdGVtcyBzdWNoIGFzIENlbnRPUyA1LjggZG9lc24ndCBzdXBwb3J0IGl0LCBhbmQgaXQKK2NhdXNlcyBhIGJ1aWxkIGVycm9yIGZvciBkcGtnLW5hdGl2ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERvbm4gU2VlbGV5IDxkb25uLnNlZWxleUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG00L2Rwa2ctY29tcGlsZXIubTQgfCAxIC0KKyAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbTQvZHBrZy1jb21waWxlci5tNCBiL200L2Rwa2ctY29tcGlsZXIubTQKK2luZGV4IDY4Mjg1N2MuLjIzZWQ3ZDAgMTAwNjQ0CistLS0gYS9tNC9kcGtnLWNvbXBpbGVyLm00CisrKysgYi9tNC9kcGtnLWNvbXBpbGVyLm00CitAQCAtNTIsNyArNTIsNiBAQCBBQ19ERUZVTihbRFBLR19DSEVDS19DT01QSUxFUl9XQVJOSU5HU10sIFsKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVdsb2dpY2FsLW9wXSkKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVdsb2dpY2FsLW5vdC1wYXJlbnRoZXNlc10pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1Xc3dpdGNoLWJvb2xdKQorLSAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV3ZsYV0pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XaW5pdC1zZWxmXSkKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVd3cml0ZS1zdHJpbmdzXSkKKyAgIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVdjYXN0LWFsaWduXSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMjc1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorQXV0aG9yOiBLcmlzaG5hbmphbmFwcGEsIEphZ2FkZWVzaCA8amFnYWRlZXNoLmtyaXNobmFuamFuYXBwYUBjYXZpdW1uZXR3b3Jrcy5jb20+CitEYXRlOiAgIFdlZCBBcHIgOCAxODowODoxNCAyMDE1ICswNTMwCisKK1tQQVRDSF0gYWRkIGFybWViIHRyaXBsZXQgZW50cnkgaW50byB0cmlwbGV0dGFibGUuCisKK0Nyb3NzLWNvbXBsaW5nIGRwa2cgYXBwbGljYXRpb24gZm9yIGFybWViIGZhaWxzIHdpdGggYmVsb3cgZXJyb3IKK2R1cmluZyBjb25maWd1cmUgdGFzaywKKworKHNuaXApCisgY29uZmlndXJlOjIzMTQxOiBjaGVja2luZyBkcGtnIGNwdSB0eXBlCisgY29uZmlndXJlOjIzMTQ4OiByZXN1bHQ6IGFybWViCisgY29uZmlndXJlOjIzMTUwOiBXQVJOSU5HOiBhcm1lYiBub3QgZm91bmQgaW4gY3B1dGFibGUKKyBjb25maWd1cmU6MjMxNjI6IGNoZWNraW5nIGRwa2cgb3BlcmF0aW5nIHN5c3RlbSB0eXBlCisgY29uZmlndXJlOjIzMTY5OiByZXN1bHQ6IGxpbnV4LWdudWVhYmkKKyBjb25maWd1cmU6MjMxNzE6IFdBUk5JTkc6IGxpbnV4LWdudWVhYmkgbm90IGZvdW5kIGluIG9zdGFibGUKKyBjb25maWd1cmU6MjMxODM6IGNoZWNraW5nIGRwa2cgYXJjaGl0ZWN0dXJlIG5hbWUKKyBjb25maWd1cmU6MjMxODk6IGVycm9yOiBjYW5ub3QgZGV0ZXJtaW5lIGhvc3QgZHBrZyBhcmNoaXRlY3R1cmUKKy0tIENVVCAtLQorCit0aGUgcmVxdWlyZWQgY29tYmluYXRpb24gb2YgImdudWVhYmktbGludXgtYXJtZWIiIHdhcyBub3QgZm91bmQgaW4KK3RoZSB0cmlwbGV0dGFibGUgZmlsZSB0aGVyZWJ5IHJldHVybmluZyBkcGtnX2FyY2ggYXMKK2VtcHR5IGluIGNvbmZpZ3VyZSBzY3JpcHQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLcmlzaG5hbmphbmFwcGEsIEphZ2FkZWVzaCA8amFnYWRlZXNoLmtyaXNobmFuamFuYXBwYUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKK2RpZmYgLU5hdXJwIGRwa2ctMS4xNy4yMV9vcmcvdHJpcGxldHRhYmxlIGRwa2ctMS4xNy4yMS90cmlwbGV0dGFibGUKKy0tLSBkcGtnLTEuMTcuMjFfb3JnL3RyaXBsZXR0YWJsZQkyMDE1LTA0LTA4IDE3OjA4OjUyLjM3MDc1OTE3MSArMDUzMAorKysrIGRwa2ctMS4xNy4yMS90cmlwbGV0dGFibGUJMjAxNS0wNC0wOCAxNzowOToxMi40MDY3NTIwODEgKzA1MzAKK0BAIC05LDYgKzksNyBAQCBtdXNsZWFiaWhmLWxpbnV4LWFybQltdXNsLWxpbnV4LWFybWhmCisgbXVzbC1saW51eC08Y3B1PgltdXNsLWxpbnV4LTxjcHU+CisgZ251ZWFiaWhmLWxpbnV4LWFybQlhcm1oZgorIGdudWVhYmktbGludXgtYXJtCWFybWVsCisrZ251ZWFiaS1saW51eC1hcm1lYglhcm1lYgorIGdudWFiaW4zMi1saW51eC1taXBzNjRlbAltaXBzbjMyZWwKKyBnbnVhYmluMzItbGludXgtbWlwczY0CW1pcHNuMzIKKyBnbnVhYmk2NC1saW51eC1taXBzNjRlbAltaXBzNjRlbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FyY2hfcG0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ0YzBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FyY2hfcG0ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorY29uZmlndXJlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIHByb3BlciBjcHUsIG9zLCBvcgorYXJjaGl0ZWN0dXJlIGZvciBtaXBzNjQsIGFuZCBwb3NzaWJseSBvdGhlciBhcmNoJ3MKK2JlY2F1c2Ugb2YgZmF1bHR5IGNvZGUgYWRkZWQgdG8gQXJjaC5wbSBpbiB0aGUgbGF0ZXN0CityZWxlYXNlIGZyb20gdXBzdHJlYW0uICBXZSByZW1vdmUgdGhhdCBjb2RlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCisKKy0tLSBhL3NjcmlwdHMvRHBrZy9BcmNoLnBtCisrKysgYi9zY3JpcHRzL0Rwa2cvQXJjaC5wbQorQEAgLTIzMyw5ICsyMzMsNiBAQCBzdWIgcmVhZF90cmlwbGV0dGFibGUoKQorIAkJICAgIChteSAkZHQgPSAkZGVidHJpcGxldCkgPX4gcy88Y3B1Pi8kX2NwdS87CisgCQkgICAgKG15ICRkYSA9ICRkZWJhcmNoKSA9fiBzLzxjcHU+LyRfY3B1LzsKKyAKKy0JCSAgICBuZXh0IGlmIGV4aXN0cyAkZGViYXJjaF90b19kZWJ0cmlwbGV0eyRkYX0KKy0JCSAgICAgICAgIG9yIGV4aXN0cyAkZGVidHJpcGxldF90b19kZWJhcmNoeyRkdH07CistCisgCQkgICAgJGRlYmFyY2hfdG9fZGVidHJpcGxldHskZGF9ID0gJGR0OworIAkJICAgICRkZWJ0cmlwbGV0X3RvX2RlYmFyY2h7JGR0fSA9ICRkYTsKKyAJCX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiMDc4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9kcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCkBAIC0wLDAgKzEsMTcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249ZHBrZyBmaXJzdCBib290IGNvbmZpZ3VyZQorRGVmYXVsdERlcGVuZGVuY2llcz1ubworQWZ0ZXI9c3lzdGVtZC1yZW1vdW50LWZzLnNlcnZpY2Ugc3lzdGVtZC10bXBmaWxlcy1zZXR1cC5zZXJ2aWNlIHRtcC5tb3VudAorQmVmb3JlPXN5c2luaXQudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L3Bvc3RpbnN0CitFeGVjU3RhcnQ9LUBCQVNFX0JJTkRJUkAvc2ggLWMgIiBpZiBbICRQT1NUSU5TVF9MT0dHSU5HID0gJzEnIF07IHRoZW4gQEJJTkRJUkAvZHBrZyAtLWNvbmZpZ3VyZSAtYSA+ICRMT0dGSUxFIDI+JjE7IGVsc2UgQEJJTkRJUkAvZHBrZyAtLWNvbmZpZ3VyZSAtYTsgZmkiCitFeGVjU3RhcnRQb3N0PUBCQVNFX0JJTkRJUkAvc3lzdGVtY3RsIGRpc2FibGUgZHBrZy1jb25maWd1cmUuc2VydmljZQorU3RhbmRhcmRPdXRwdXQ9c3lzbG9nCitSZW1haW5BZnRlckV4aXQ9Tm8KKworW0luc3RhbGxdCitXYW50ZWRCeT1iYXNpYy50YXJnZXQKK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZml4LWFicy1yZWRlZmluZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MzMxMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZml4LWFicy1yZWRlZmluZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZHBrZyBkZWZpbmVzOgorI2RlZmluZSBEUEtHX0JFR0lOX0RFQ0xTCWV4dGVybiAiQyIgeworCitUaGF0IG1ha2VzIGhlYWRlciBjc3RkbGliIGluY2x1ZGVkIGluIGEgZXh0ZXJuICJDIiBibG9jayB3aGljaCBpcyBub3Qgc3VwcG9ydGVkCitieSBnY2MgNC44LiBJdCBmYWlscyBvbiBGZWRvcmEgMTk6CisKKy91c3IvaW5jbHVkZS9jKysvNC44LjEvY3N0ZGxpYjogSW4gZnVuY3Rpb24g4oCYbG9uZyBsb25nIGludCBzdGQ6OmFicyhsb25nIGxvbmcgaW50KeKAmToKKy91c3IvaW5jbHVkZS9jKysvNC44LjEvY3N0ZGxpYjoxNzQ6MjA6IGVycm9yOiBkZWNsYXJhdGlvbiBvZiBDIGZ1bmN0aW9uIOKAmGxvbmcgbG9uZyBpbnQgc3RkOjphYnMobG9uZyBsb25nIGludCnigJkgY29uZmxpY3RzIHdpdGgKKyAgIGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX2J1aWx0aW5fbGxhYnMgKF9feCk7IH0KKyAgICAgICAgICAgICAgICAgICAgXgorL3Vzci9pbmNsdWRlL2MrKy80LjguMS9jc3RkbGliOjE2NjozOiBlcnJvcjogcHJldmlvdXMgZGVjbGFyYXRpb24g4oCYbG9uZyBpbnQgc3RkOjphYnMobG9uZyBpbnQp4oCZIGhlcmUKKyAgIGFicyhsb25nIF9faSkgeyByZXR1cm4gX19idWlsdGluX2xhYnMoX19pKTsgfQorICAgXgorCitNb3ZlIGluY2x1ZGUgZ2V0dGV4dC5oIG91dCBvZiB0aGUgZXh0ZXJuICJDIiBibG9jayB0byBmaXggdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBkcGtnLTEuMTcuMS9saWIvZHBrZy9pMThuLmgub3JpZwkyMDEzLTA4LTEzIDE3OjMxOjI4Ljg3MDkzNTU3MyArMDgwMAorKysrIGRwa2ctMS4xNy4xL2xpYi9kcGtnL2kxOG4uaAkyMDEzLTA4LTEzIDE3OjMxOjM3Ljg5MzA2NTI0OSArMDgwMAorQEAgLTIzLDggKzIzLDYgQEAKKyAKKyAjaW5jbHVkZSA8ZHBrZy9tYWNyb3MuaD4KKyAKKy1EUEtHX0JFR0lOX0RFQ0xTCistCisgLyoqCisgICogQGRlZmdyb3VwIGkxOG4gSW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydAorICAqIEBpbmdyb3VwIGRwa2ctaW50ZXJuYWwKK0BAIC0zMyw2ICszMSw4IEBACisgCisgI2luY2x1ZGUgPGdldHRleHQuaD4KKyAKKytEUEtHX0JFR0lOX0RFQ0xTCisrCisgLyogV2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgYmVjYXVzZSBwZ2V0dGV4dCgpIHVzZXMgTENfTUVTU0FHRVMsIGJ1dCBsaWJpbnRsLmgKKyAgKiB3aGljaCBnZXRzIHB1bGxlZCBieSBnZXR0ZXh0Lmggb25seSBpbmNsdWRlcyBpdCBpZiBidWlsZGluZyBvcHRpbWl6ZWQuICovCisgI2luY2x1ZGUgPGxvY2FsZS5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2YjhhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorQ2VudE9TIDUuOCBrZXJuZWxzIGFuZCBoZWFkZXJzIHN1cHBvcnQgdGhlIHN5bmNfZmlsZV9yYW5nZSgpIHN5c3RlbSBjYWxsLAorYnV0IGdsaWJjIDIuNSBkb2Vzbid0IHByb3ZpZGUgdGhlIHN5c2NhbGwgc3R1Yi4gIEl0IGFwcGVhcnMgdGhhdCB0aGlzCitwcm9ibGVtIGlzIGtub3duIGJ1dCB3aWxsIG5ldmVyIGJlIGZpeGVkOgorCisgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NTE4NTgxCisKKyAgQnVnIDUxODU4MSAtIFtSSEVMNV0gZ2xpYmMgbWlzc2VzIHN5bmNfZmlsZV9yYW5nZSBzeXNjYWxsIGludGVyZmFjZSAKKworICBTdGF0dXM6ICAgICAgIENMT1NFRCBDQU5URklYIAorICBMYXN0IENsb3NlZDogIDIwMDktMTEtMjIgMjI6MTk6NTUKKworICBLaXJieSBaaG91IDIwMDktMDgtMjAgMjM6Mzc6NTUgRURUCisKKyAgRGVzY3JpcHRpb24gb2YgcHJvYmxlbToKKworICBnbGliYyBtaXNzZXMgc3luY19maWxlX3JhbmdlIHN5c2NhbGwgaW50ZXJmYWNlLiAgVGhlIGhlYWRlciBmaWxlIGFuZAorICBtYW4gcGFnZSBib3RoIHNheSAnc3luY19maWxlX3JhbmdlJyBzaG91bGQgZXhpc3QuICBGcm9tIG1hbiBwYWdlLAorICBzeW5jX2ZpbGVfcmFuZ2Ugc2hvdWxkIGV4aXN0IHNpbmMga2VybmVsLTIuNi4xNworCisgIEFuZHJlYXMgU2Nod2FiIDIwMDktMDgtMjEgMDM6MjQ6MjQgRURUCisKKyAgSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCB0byBnbGliYyAyLjYsIGFuZCBjYW5ub3QgYmUgYmFja3BvcnRlZCBkdWUgdG8KKyAgQUJJIGJyZWFrYWdlLiAgWW91IGNhbiBhbHdheXMgZmFsbCBiYWNrIHRvIHN5c2NhbGwoMykuCisKKyAgVWxyaWNoIERyZXBwZXIgMjAwOS0xMS0yMiAyMjoxOTo1NSBFU1QKKworICBBcyBjb21tZW50ICMxIHNheXMsIG5vIGNoYW5jZSB0byBiYWNrcG9ydCB0aGlzLgorCisgIFNlZSB0aGUgc3lzY2FsbCBtYW4gcGFnZSBmb3IgaW5zdHJ1Y3Rpb25zLgorCisgIEpvbiBFIDIwMTAtMDMtMTkgMTA6MzI6MzcgRURUCisKKyAgdGhlbiB3aHkgZG9jdW1lbnQgaXQgaWYgaXQncyBicm9rZW4gYW5kIHlvdSdyZSBub3QgZ29pbmcgdG8gZml4IGl0PworICAuLiBtaWdodCB3YW50IHRvIEZURk0gb3ZlciBhdCBzeW5jX2ZpbGVfcmFuZ2UoMikgLSBpbiB0aGUgbWVhbnRpbWUgLQorICBib3Jyb3dpbmcgZnJvbSBnbGliYyAyLjYgLi4gYW55IHRob3VnaHRzIG9uIHRoaXMgaW1wbGVtZW50YXRpb24gZm9yIGEKKyAgaGFja3kgd29ya2Fyb3VuZCBmb3IgdGhvc2Ugc3RpbGwgb24geW91ciAiYW5jaWVudCByZWxlYXNlcyIgLi4gKGVnOgorICBSSEVMNS4zKT86CisKKyAgI2lmZGVmIFVMSV9XT05UX0ZJWF9USElTX0lOX0dMSUJDMi41CisgICNkZWZpbmUgTlJfc3luY19maWxlX3JhbmdlIDI3NworICBpbnQgc3luY19maWxlX3JhbmdlIChpbnQgZmQsIF9fb2ZmNjRfdCBmcm9tLCBfX29mZjY0X3QgdG8sIHVuc2lnbmVkIGludCBmbGFncykKKyAgeworICAgIHJldHVybiBzeXNjYWxsIChOUl9zeW5jX2ZpbGVfcmFuZ2UsIGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX19MT05HX0xPTkdfUEFJUiAoKGxvbmcpIChmcm9tID4+IDMyKSwgKGxvbmcpIGZyb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX19MT05HX0xPTkdfUEFJUiAoKGxvbmcpICh0byA+PiAzMiksIChsb25nKSB0byksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyk7CisgIH0KKyAgI2VuZGlmCisKKyAgYXNzdW1pbmcgb2YgY291cnNlIHRoYXQgeW91J3JlIG9uIGFuIHg4Nl82NCBhbmQgaW5jbHVkZS9hc20tCisgIHg4Nl82NC91bmlzdGQuaCBoYXMgdGhlIGNvcnJlY3QgZW50cnkKKworICAoZndpdyAtIGZpbyBpcyBzdGFydGluZyB0byB1c2UgdGhpcyBub3cpCisKK1JhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB1c2luZyBzeXNjYWxsKCksCit3ZSB0YWtlIHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSByb3V0ZSBhbmQgaWdub3JlIGhlYWRlciBzdXBwb3J0IGZvcgorc3luY19maWxlX3JhbmdlKCkgZmxhZ3Mgd2hlbiB0aGUgZ2xpYmMgdmVyc2lvbiBpcyA8PSAyLjUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZXZlcnlvbmUgZWxzZSBidWlsZHMgb24gbmV3ZXIgaG9zdHMgOi0pXQorCitTaWduZWQtb2ZmLWJ5OiBEb25uIFNlZWxleSA8ZG9ubi5zZWVsZXlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExlaSBMaXUgPGxlaS5saXUyQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvYXJjaGl2ZXMuYyB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy9hcmNoaXZlcy5jCisrKysgYi9zcmMvYXJjaGl2ZXMuYworQEAgLTc1LDcgKzc1LDcgQEAKKyAgIC8qIElnbm9yZSB0aGUgcmV0dXJuIGNvZGUgYXMgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBhbgorICAgICogYXN5bmNocm9ub3VzIGhpbnQgZm9yIHRoZSBrZXJuZWwsIHdlIGFyZSBkb2luZyBhbiBmc3luYygpIGxhdGVyIG9uCisgICAgKiBhbnl3YXkuICovCistI2lmIGRlZmluZWQoU1lOQ19GSUxFX1JBTkdFX1dSSVRFKQorKyNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XUklURSkgJiYgX19HTElCQ19QUkVSRVEoMiwgNikKKyAgIHN5bmNfZmlsZV9yYW5nZShmZCwgMCwgMCwgU1lOQ19GSUxFX1JBTkdFX1dSSVRFKTsKKyAjZWxpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFEVklTRSkKKyAgIHBvc2l4X2ZhZHZpc2UoZmQsIDAsIDAsIFBPU0lYX0ZBRFZfRE9OVE5FRUQpOworQEAgLTExNzksNyArMTE3OSw3IEBACisgICByZXR1cm4gMDsKKyB9CisgCistI2lmIGRlZmluZWQoU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFKQorKyNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSkgJiYgX19HTElCQ19QUkVSRVEoMiwgNikKKyBzdGF0aWMgdm9pZAorIHRhcl93cml0ZWJhY2tfYmFycmllcihzdHJ1Y3QgZmlsZWlubGlzdCAqZmlsZXMsIHN0cnVjdCBwa2dpbmZvICpwa2cpCisgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK2RpZmYgLXJ1TiBkcGtnLTEuMTUuOC41LW9yaWcvTWFrZWZpbGUuYW0gZHBrZy0xLjE1LjguNS9NYWtlZmlsZS5hbQorLS0tIGRwa2ctMS4xNS44LjUtb3JpZy9NYWtlZmlsZS5hbQkyMDEwLTEwLTA4IDEyOjI3OjE1LjA0MjA4MzcwMyArMDgwMAorKysrIGRwa2ctMS4xNS44LjUvTWFrZWZpbGUuYW0JMjAxMC0xMC0wOCAxMjoyNzoyNy43NTUxNDgyMjggKzA4MDAKK0BAIC0xMiw4ICsxMiw3IEBACisgCXV0aWxzIFwKKyAJJChNQVlCRV9EU0VMRUNUKSBcCisgCXNjcmlwdHMgXAorLQlwbyBcCistCW1hbgorKwlwbworIAorIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0MDhmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitidXN5Ym94LTEuMTkuNCB0YXIgdXRpbGl0eSBkb2Vzbid0IHN1cHBvcnQgLS13YXJuaW5nPW5vLXRpbWVzdGFtcAorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK0luZGV4OiBkcGtnLTEuMTcuMS9kcGtnLWRlYi9leHRyYWN0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkcGtnLTEuMTcuMS5vcmlnL2Rwa2ctZGViL2V4dHJhY3QuYworKysrIGRwa2ctMS4xNy4xL2Rwa2ctZGViL2V4dHJhY3QuYworQEAgLTMxOCw3ICszMTgsNiBAQCBleHRyYWN0aGFsZihjb25zdCBjaGFyICpkZWJhciwgY29uc3QgY2hhCisgCisgICAgICAgY29tbWFuZF9hZGRfYXJnKCZjbWQsICItZiIpOworICAgICAgIGNvbW1hbmRfYWRkX2FyZygmY21kLCAiLSIpOworLSAgICAgIGNvbW1hbmRfYWRkX2FyZygmY21kLCAiLS13YXJuaW5nPW5vLXRpbWVzdGFtcCIpOworIAorICAgICAgIG1fZHVwMihwMlswXSwwKTsKKyAgICAgICBjbG9zZShwMlswXSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2dfMS4xOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNmYTRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMi5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGRwa2cuaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSArPSAiZmlsZTovL25vbWFuLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWFicy1yZWRlZmluZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXJjaF9wbS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZHBrZy1jb25maWd1cmUuc2VydmljZSBcCisgICAgICAgICAgICBmaWxlOi8vZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGRfYXJtZWJfdHJpcGxldF9lbnRyeS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2M2I5ZDg2OTA4MWVjNDlhZGVlZjZjNWZmNjJkNjU3NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMTQ4NGYyYTczZDAyN2Q2OTZlNzIwYTYwMzgwZGI3MTk3OGJiNWMwNmNkODhmZTMwYzI5MWUwNjlhYzQ1N2E0IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDliYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLmluYwpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkV4dDIgRmlsZXN5c3RlbSBVdGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgRXh0MiBGaWxlc3lzdGVtIFV0aWxpdGllcyAoZTJmc3Byb2dzKSBjb250YWluIGFsbCBvZiB0aGUgc3RhbmRhcmQgdXRpbGl0aWVzIGZvciBjcmVhdGluZywgXAorZml4aW5nLCBjb25maWd1cmluZyAsIGFuZCBkZWJ1Z2dpbmcgZXh0MiBmaWxlc3lzdGVtcy4iCitIT01FUEFHRSA9ICJodHRwOi8vZTJmc3Byb2dzLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIgJiBCU0QgJiBNSVQiCitMSUNFTlNFX2UyZnNwcm9ncy1lMmZzY2sgPSAiR1BMdjIiCitMSUNFTlNFX2UyZnNwcm9ncy1ta2UyZnMgPSAiR1BMdjIiCitMSUNFTlNFX2UyZnNwcm9ncy1mc2NrID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtdHVuZTJmcyA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLWJhZGJsb2NrcyA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0OGYyMWQ3NjViODc1YmQxMDQwMDk3NWQxMmMxY2EyIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2V4dDJmcy9leHQyZnMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTk7bWQ1PTU5NmE4ZGVkY2I0ZTczMWM2YjIxYzdhNDZmYmE2YmVmIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2UycC9lMnAuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTc7bWQ1PThhNzRhZGU4ZjlkNjUwOTVkNzBlZjJkNGJmNDhlMzZhIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V1aWQvdXVpZC5oLmluO2JlZ2lubGluZT0xO2VuZGxpbmU9MzI7bWQ1PWRiYjgwNzllMTE0YTVmODQxOTM0Yjk5ZTU5Yzg4MjBhIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V1aWQvQ09QWUlORzttZDU9NThkY2Q4NDUyNjUxZmM4YjA3ZDFmNjVjZTA3Y2E4YWYgXAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvZXQvZXRfbmFtZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTE7bWQ1PWVhZDIzNjQ0N2RhYzdiOTgwZGJjNWI0ODA0ZDhjODM2IFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3NzL3NzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9NmU4OWFkNDdkYTZlNzVmZWNkMmI1ZTBlODFlMWQ0YTYiCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gInV0aWwtbGludXgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2UyZnNwcm9ncy9lMmZzcHJvZ3MtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21rZGlyLnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gcGtnY29uZmlnIG11bHRpbGliX2hlYWRlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLWUyZnNwcm9ncy1maXgtY3Jvc3MtY29tcGlsYXRpb24tcHJvYmxlbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwNDNiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1N1YmplY3Q6IGUyZnNwcm9nczogZml4IGNyb3NzIGNvbXBpbGF0aW9uIHByb2JsZW0KKworVGhlIGNoZWNraW5nIG9mIHR5cGVzIGluIHBhcnNlLXR5cGVzLnNoIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIGluIGEKK2Nyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgYmluYXJ5IGlzIGV4ZWN1dGVkCitvbiBidWlsZCBtYWNoaW5lLgorCitTbyBldmVuIGlmIGFzbV90eXBlcy5oIGhhcyBnb3QgY29ycmVjdCBzdGF0ZW1lbnRzIGZvciB0eXBlcywgaXQncyBwb3NzaWJsZQordGhhdCB0aGUgZ2VuZXJhdGVkIGJpbmFyeSB3aWxsIHJlcG9ydCBhbiBlcnJvci4gQmVjYXVzZSB0aGVzZSB0eXBlcyBhcmUgZm9yCit0aGUgdGFyZ2V0IG1hY2hpbmUuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZy9wYXJzZS10eXBlcy5zaCB8ICAgIDYgKysrKy0tCisgY29uZmlndXJlLmluICAgICAgICAgIHwgICAgNiArKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZy9wYXJzZS10eXBlcy5zaCBiL2NvbmZpZy9wYXJzZS10eXBlcy5zaAoraW5kZXggNTA3NmY2Yy4uMjRkMmE5OSAxMDA3NTUKKy0tLSBhL2NvbmZpZy9wYXJzZS10eXBlcy5zaAorKysrIGIvY29uZmlnL3BhcnNlLXR5cGVzLnNoCitAQCAtMTE4LDggKzExOCwxMCBAQCBpZiAuL2FzbV90eXBlcworIHRoZW4KKyAgICAgdHJ1ZQorIGVsc2UKKy0gICAgZWNobyAiUHJvYmxlbSBkZXRlY3RlZCB3aXRoIGFzbV90eXBlcy5oIgorLSAgICBlY2hvICIiID4gYXNtX3R5cGVzLmgKKysgICAgaWYgWyAiJHtDUk9TU19DT01QSUxFfSIgIT0gIjEiIF07IHRoZW4KKysJZWNobyAiUHJvYmxlbSBkZXRlY3RlZCB3aXRoIGFzbV90eXBlcy5oIgorKwllY2hvICIiID4gYXNtX3R5cGVzLmgKKysgICAgZmkKKyBmaQorIHJtIGFzbV90eXBlcy5jIGFzbV90eXBlcworIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggNjhhZGYwZC4uZWQxNjk3YiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtOTUzLDcgKzk1MywxMSBAQCBBQ19TVUJTVChTSVpFT0ZfTE9ORykKKyBBQ19TVUJTVChTSVpFT0ZfTE9OR19MT05HKQorIEFDX1NVQlNUKFNJWkVPRl9PRkZfVCkKKyBBQ19DX0JJR0VORElBTgorLUJVSUxEX0NDPSIkQlVJTERfQ0MiIENQUD0iJENQUCIgL2Jpbi9zaCAkYWNfYXV4X2Rpci9wYXJzZS10eXBlcy5zaAorK2lmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IG5vOyB0aGVuCisrICBCVUlMRF9DQz0iJEJVSUxEX0NDIiBDUFA9IiRDUFAiIC9iaW4vc2ggJGFjX2F1eF9kaXIvcGFyc2UtdHlwZXMuc2gKKytlbHNlCisrICBDUk9TU19DT01QSUxFPSIxIiBCVUlMRF9DQz0iJEJVSUxEX0NDIiBDUFA9IiRDUFAiIC9iaW4vc2ggJGFjX2F1eF9kaXIvcGFyc2UtdHlwZXMuc2gKKytmaQorIEFTTV9UWVBFU19IRUFERVI9Li9hc21fdHlwZXMuaAorIEFDX1NVQlNUX0ZJTEUoQVNNX1RZUEVTX0hFQURFUikKKyBkbmwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmNzdjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tIDQ5ZDBmZTJhMTRmMmEyM2RhMmZlMjk5NjQzMzc5YjhjMWQzN2RmNzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorRGF0ZTogRnJpLCA2IEZlYiAyMDE1IDEyOjQ2OjM5IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmV4dDJmczogZml4IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gY2xvc2VmcygpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworVGhlIGJ1ZyBmaXggaW4gZjY2ZTZjZTQ0NDY6ICJsaWJleHQyZnM6IGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyBpZgorc19maXJzdF9tZXRhX2JnIGlzIHRvbyBiaWciIGhhZCBhIHR5cG8gaW4gdGhlIGZpeCBmb3IKK2V4dDJmc19jbG9zZWZzKCkuICBJbiBwcmFjdGljZSBtb3N0IG9mIHRoZSBzZWN1cml0eSBleHBvc3VyZSB3YXMgZnJvbQordGhlIG9wZW5mcyBwYXRoLCBzaW5jZSB0aGlzIG1lYW50IGlmIHRoZXJlIHdhcyBhIGNhcmVmdWxseSBjcmFmdGVkCitmaWxlIHN5c3RlbSwgYnVmZmVyIG92ZXJydW4gd291bGQgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGZpbGUgc3lzdGVtIHdhcworb3BlbmVkLgorCitIb3dldmVyLCBpZiBjb3JydXB0ZWQgZmlsZSBzeXN0ZW0gZGlkbid0IHRyaXAgb3ZlciBzb21lIGNvcnJ1cHRpb24KK2NoZWNrLCBhbmQgdGhlbiB0aGUgZmlsZSBzeXN0ZW0gd2FzIG1vZGlmaWVkIHZpYSB0dW5lMmZzIG9yIGRlYnVnZnMsCitzdWNoIHRoYXQgdGhlIHN1cGVyYmxvY2sgd2FzIG1hcmtlZCBkaXJ0eSBhbmQgdGhlbiB3cml0dGVuIG91dCB2aWEgdGhlCitjbG9zZWZzKCkgcGF0aCwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBidWZmZXIgb3ZlcnJ1biBjb3VsZCBiZQordHJpZ2dlcmVkIHdoZW4gdGhlIGZpbGUgc3lzdGVtIGlzIGNsb3NlZC4KKworQWxzbyBjbGVhciB1cCBhIHNpZ25lZCB2cyB1bnNpZ25lZCB3YXJuaW5nIHdoaWxlIHdlJ3JlIGF0IGl0LgorCitUaGFua3MgdG8gTmljayBLcmFsZXZpY2ggPG5ua0Bnb29nbGUuY29tPiBmb3IgYXNraW5nIG1lIHRvIGxvb2sgYXQKK2NvbXBpbGVyIHdhcm5pbmcgaW4gdGhlIGNvZGUgaW4gcXVlc3Rpb24sIHdoaWNoIGxlZCBtZSB0byBub3RpY2UgdGhlCitidWcgaW4gZjY2ZTZjZTQ0NDYuCisKK0FkZHJlc3NlczogQ1ZFLTIwMTUtMTU3MgorCitTaWduZWQtb2ZmLWJ5OiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorLS0tCisgbGliL2V4dDJmcy9jbG9zZWZzLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9jbG9zZWZzLmMgYi9saWIvZXh0MmZzL2Nsb3NlZnMuYworaW5kZXggMWY5OTExMy4uYWI1YjJmYiAxMDA2NDQKKy0tLSBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jCisrKysgYi9saWIvZXh0MmZzL2Nsb3NlZnMuYworQEAgLTI4Nyw3ICsyODcsNyBAQCBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoMihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzKQorIAlkZ3JwX3QJCWo7CisgI2VuZGlmCisgCWNoYXIJKmdyb3VwX3B0cjsKKy0JaW50CW9sZF9kZXNjX2Jsb2NrczsKKysJYmxrNjRfdAlvbGRfZGVzY19ibG9ja3M7CisgCXN0cnVjdCBleHQyZnNfbnVtZXJpY19wcm9ncmVzc19zdHJ1Y3QgcHJvZ3Jlc3M7CisgCisgCUVYVDJfQ0hFQ0tfTUFHSUMoZnMsIEVYVDJfRVRfTUFHSUNfRVhUMkZTX0ZJTFNZUyk7CitAQCAtMzQ2LDcgKzM0Niw3IEBAIGVycmNvZGVfdCBleHQyZnNfZmx1c2gyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCisgCWdyb3VwX3B0ciA9IChjaGFyICopIGdyb3VwX3NoYWRvdzsKKyAJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHsKKyAJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworLQkJaWYgKG9sZF9kZXNjX2Jsb2NrcyA+IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnKQorKwkJaWYgKG9sZF9kZXNjX2Jsb2NrcyA+IGZzLT5kZXNjX2Jsb2NrcykKKyAJCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CisgCX0gZWxzZQorIAkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbWtlMmZzLWFkZC10aGUtYWJpbGl0eS10by1jb3B5LWZpbGVzLWZyb20tYS1naXZlbi1kaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbWtlMmZzLWFkZC10aGUtYWJpbGl0eS10by1jb3B5LWZpbGVzLWZyb20tYS1naXZlbi1kaS5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIGM5OGZlYzAwNGYwNzdlNTY2YjlkZmEyMGIyNWUzYjg2Y2I0NjJhMmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMjQgRGVjIDIwMTMgMDE6NDE6MDggLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8xMV0gbWtlMmZzOiBhZGQgdGhlIGFiaWxpdHkgdG8gY29weSBmaWxlcyBmcm9tIGEgZ2l2ZW4KKyBkaXJlY3RvcnkKKworV2Ugd2lsbCBhZGQgYSAtZCBvcHRpb24gd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBhZGRpbmcgdGhlIGZpbGVzIGZyb20gYQorZ2l2ZW4gZGlyZWN0b3J5IHRvIHRoZSBmaWxlc3lzdGVtLCBpdCBpcyBzaW1pbGlhciB0byBnZW5leHQyZnMsIGJ1dAorZ2VuZXh0MmZzIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBleHQ0LgorCisqIFdlIGFscmVhZHkgaGF2ZSB0aGUgYmFzaWMgb3BlcmF0aW9ucyBpbiBkZWJ1Z2ZzOgorICAtIENvcHkgcmVndWxhciBmaWxlCisgIC0gQ3JlYXRlIGRpcmVjdG9yeQorICAtIENyZWF0ZSBzeW1saW5rCisgIC0gQ3JlYXRlIHNwZWNpYWwgZmlsZQorCisgIFdlIHdpbGwgbW92ZSB0aGVzZSBvcGVyYXRpb25zIGludG8gY3JlYXRlX2lub2RlLmggYW5kIGNyZWF0ZV9pbm9kZS5jLAorICB0aGVuIGxldCBib3RoIG1rZTJmcyBhbmQgZGVidWdmcyB1c2UgdGhlbS4KKworKiBXaGF0IHdlIG5lZWQgdG8gZG8gYXJlOgorICAtIENvcHkgdGhlIGdpdmVuIGRpcmVjdG9yeSByZWN1cnNpdmVseSwgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlCisgICAgcG9wdWxhdGVfZnMoKQorICAtIFNldCB0aGUgb3duZXIsIG1vZGUgYW5kIG90aGVyIGluZm9ybWF0aW9ucworICAtIEhhbmRsZSB0aGUgaGFyZCBsaW5rcworCitUT0RPOgorICAtIFRoZSBsaWJleHQyZnMgY2FuJ3QgY3JlYXRlIHRoZSBzb2NrZXQgZmlsZSAoU19JRlNPQ0spLCBkbyB3ZSBoYXZlIGEKKyAgICBwbGFuIHRvIHN1cHBvcnQgaXQgPworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBtaXNjL2NyZWF0ZV9pbm9kZS5oIHwgICAxNyArKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNDMgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBtaXNjL2NyZWF0ZV9pbm9kZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1pc2MvY3JlYXRlX2lub2RlLmgKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDZhYWE2MAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTAsMCArMSwyNiBAQAorKyNpbmNsdWRlICJjcmVhdGVfaW5vZGUuaCIKKysKKysvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKytlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyt7CisrfQorKworKy8qIE1ha2UgYSBzeW1saW5rIG5hbWUgLT4gdGFyZ2V0ICovCisrZXJyY29kZV90IGRvX3N5bWxpbmtfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCkKKyt7CisrfQorKworKy8qIE1ha2UgYSBkaXJlY3RvcnkgaW4gdGhlIGZzICovCisrZXJyY29kZV90IGRvX21rZGlyX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworK30KKysKKysvKiBDb3B5IHRoZSBuYXRpdmUgZmlsZSB0byB0aGUgZnMgKi8KKytlcnJjb2RlX3QgZG9fd3JpdGVfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkKKyt7CisrfQorKworKy8qIENvcHkgZmlsZXMgZnJvbSBzb3VyY2VfZGlyIHRvIGZzICovCisrZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyt7CisrfQorZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmggYi9taXNjL2NyZWF0ZV9pbm9kZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOWZjOTdmYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAorQEAgLTAsMCArMSwxNyBAQAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKysjaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorKyNpbmNsdWRlICJlMnAvZTJwLmgiCisrI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKysjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorKworK2V4dDJfZmlsc3lzICAgIGN1cnJlbnRfZnM7CisrZXh0Ml9pbm9fdCAgICAgcm9vdDsKKysKKysvKiBGb3IgcG9wdWxhdGluZyB0aGUgZmlsZXN5c3RlbSAqLworK2V4dGVybiBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKTsKKytleHRlcm4gZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpOworK2V4dGVybiBlcnJjb2RlX3QgZG9fc3ltbGlua19pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdGFyZ2V0KTsKKytleHRlcm4gZXJyY29kZV90IGRvX21rZGlyX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpOworK2V4dGVybiBlcnJjb2RlX3QgZG9fd3JpdGVfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCk7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktZmlsZXMtcmVjdXJzaXZlbHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmY2NDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitGcm9tIDA4ZGZiYWY0ZTNmNzA0MjMyZmY0NmQ3OGMwNzU4YTZjZmUzOTYxYzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDI6NTk6MTAgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY29weSBmaWxlcyByZWN1cnNpdmVseQorCitVc2Ugb3BlbmRpcigpIGFuZCByZWFkZGlyKCkgdG8gcmVhZCB0aGUgbmF0aXZlIGRpcmVjdG9yeSwgdGhlbiB1c2UKK2xzdGF0KCkgdG8gaWRlbnRpZnkgdGhlIGZpbGUgdHlwZSBhbmQgY2FsbCB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiB0bworYWRkIHRoZSBmaWxlIHRvIHRoZSBmaWxlc3lzdGVtLCBjYWxsIHRoZSBwb3B1bGF0ZV9mcygpIHJlY3Vyc2l2ZWx5IGlmIGl0CitpcyBhIGRpcmVjdG9yeS4KKworTk9URTogdGhlIGxpYmV4dDJmcyBjYW4ndCBjcmVhdGUgdGhlIHNvY2tldCBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgOTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDk3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA0NmFhYTYwLi5iNjhiOTEwIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTEsNSArMSwxMyBAQAorICNpbmNsdWRlICJjcmVhdGVfaW5vZGUuaCIKKyAKKysjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMUwKKysjIGlmIF9fR05VQ19fID49IDIKKysjICBkZWZpbmUgX19mdW5jX18gX19GVU5DVElPTl9fCisrIyBlbHNlCisrIyAgZGVmaW5lIF9fZnVuY19fICI8dW5rbm93bj4iCisrIyBlbmRpZgorKyNlbmRpZgorKworIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKK0BAIC0yMyw0ICszMSw5MyBAQCBlcnJjb2RlX3QgZG9fd3JpdGVfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkKKyAvKiBDb3B5IGZpbGVzIGZyb20gc291cmNlX2RpciB0byBmcyAqLworIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgeworKwljb25zdCBjaGFyCSpuYW1lOworKwlESVIJCSpkaDsKKysJc3RydWN0IGRpcmVudAkqZGVudDsKKysJc3RydWN0IHN0YXQJc3Q7CisrCWNoYXIJCWxuX3RhcmdldFtQQVRIX01BWF07CisrCWV4dDJfaW5vX3QJaW5vOworKwllcnJjb2RlX3QJcmV0dmFsOworKwlpbnQJCXJlYWRfY250OworKworKwlyb290ID0gRVhUMl9ST09UX0lOTzsKKysKKysJaWYgKGNoZGlyKHNvdXJjZV9kaXIpIDwgMCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgZXJybm8sCisrCQkJXygid2hpbGUgY2hhbmdpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gXCIlc1wiIiksIHNvdXJjZV9kaXIpOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCisrCWlmICghKGRoID0gb3BlbmRpcigiLiIpKSkgeworKwkJY29tX2VycihfX2Z1bmNfXywgZXJybm8sCisrCQkJXygid2hpbGUgb3Blbm5pbmcgZGlyZWN0b3J5IFwiJXNcIiIpLCBzb3VyY2VfZGlyKTsKKysJCXJldHVybiBlcnJubzsKKysJfQorKworKwl3aGlsZSgoZGVudCA9IHJlYWRkaXIoZGgpKSkgeworKwkJaWYoKCFzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpKSB8fCAoIXN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpKSkKKysJCQljb250aW51ZTsKKysJCWxzdGF0KGRlbnQtPmRfbmFtZSwgJnN0KTsKKysJCW5hbWUgPSBkZW50LT5kX25hbWU7CisrCisrCQlzd2l0Y2goc3Quc3RfbW9kZSAmIFNfSUZNVCkgeworKwkJCWNhc2UgU19JRkNIUjoKKysJCQljYXNlIFNfSUZCTEs6CisrCQkJY2FzZSBTX0lGSUZPOgorKwkJCQlpZiAoKHJldHZhbCA9IGRvX21rbm9kX2ludGVybmFsKHBhcmVudF9pbm8sIG5hbWUsICZzdCkpKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsCisrCQkJCQkJXygid2hpbGUgY3JlYXRpbmcgc3BlY2lhbCBmaWxlIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJYnJlYWs7CisrCQkJY2FzZSBTX0lGU09DSzoKKysJCQkJLyogRklYTUU6IHRoZXJlIGlzIG5vIG1ha2Ugc29ja2V0IGZ1bmN0aW9uIGF0bS4gKi8KKysJCQkJY29tX2VycihfX2Z1bmNfXywgMCwKKysJCQkJCV8oImlnbm9yaW5nIHNvY2tldCBmaWxlIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJY29udGludWU7CisrCQkJY2FzZSBTX0lGTE5LOgorKwkJCQlpZigocmVhZF9jbnQgPSByZWFkbGluayhuYW1lLCBsbl90YXJnZXQsIHNpemVvZihsbl90YXJnZXQpKSkgPT0gLTEpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIGVycm5vLAorKwkJCQkJCV8oIndoaWxlIHRyeWluZyB0byByZWFkbGluayBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gZXJybm87CisrCQkJCX0KKysJCQkJbG5fdGFyZ2V0W3JlYWRfY250XSA9ICdcMCc7CisrCQkJCWlmICgocmV0dmFsID0gZG9fc3ltbGlua19pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCBsbl90YXJnZXQpKSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLAorKwkJCQkJCV8oIndoaWxlIHdyaXRpbmcgc3ltbGlua1wiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJYnJlYWs7CisrCQkJY2FzZSBTX0lGUkVHOgorKwkJCQlpZiAoKHJldHZhbCA9IGRvX3dyaXRlX2ludGVybmFsKHBhcmVudF9pbm8sIG5hbWUsIG5hbWUpKSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLAorKwkJCQkJCV8oIndoaWxlIHdyaXRpbmcgZmlsZSBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWJyZWFrOworKwkJCWNhc2UgU19JRkRJUjoKKysJCQkJaWYgKChyZXR2YWwgPSBkb19ta2Rpcl9pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCAmc3QpKSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLAorKwkJCQkJCV8oIndoaWxlIG1ha2luZyBkaXIgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlpZiAoKHJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBwYXJlbnRfaW5vLCBuYW1lLCAmaW5vKSkpIHsKKysJCQkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCS8qIFBvcHVsYXRlIHRoZSBkaXIgcmVjdXJzaXZlbHkqLworKwkJCQlyZXR2YWwgPSBwb3B1bGF0ZV9mcyhpbm8sIG5hbWUpOworKwkJCQlpZiAocmV0dmFsKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsIF8oIndoaWxlIGFkZGluZyBkaXIgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQljaGRpcigiLi4iKTsKKysJCQkJYnJlYWs7CisrCQkJZGVmYXVsdDoKKysJCQkJY29tX2VycihfX2Z1bmNfXywgMCwKKysJCQkJCV8oImlnbm9yaW5nIGVudHJ5IFwiJXNcIiIpLCBuYW1lKTsKKysJCX0KKysJfQorKwljbG9zZWRpcihkaCk7CisrCXJldHVybiByZXR2YWw7CisgfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDMtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3BlY2lhbC1maWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQ3YjZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorRnJvbSBhZTdkMzM4MjNiZmMzMzBlMDhiMjVjNWZlNGQyNTgzOGVmN2M3N2NlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjEzOjI4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNyZWF0ZSBzcGVjaWFsIGZpbGUKKworVGhlIGRvX21rbm9kX2ludGVybmFsKCkgaXMgdXNlZCBmb3IgY3JlYXRpbmcgc3BlY2lhbCBmaWxlIHdoaWNoIGlzCitibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvLCBtb3N0IG9mIHRoZSBjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLAordGhlIGRlYnVnZnMvZGVidWdmcy5jIHdpbGwgYmUgbW9kaWZpZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICA3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IGI2OGI5MTAuLjRkYThhZmYgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMTEsNiArMTEsNzggQEAKKyAvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKyBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CisrCWV4dDJfaW5vX3QJCWlubzsKKysJZXJyY29kZV90IAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysJdW5zaWduZWQgbG9uZwkJbWFqb3IsIG1pbm9yLCBtb2RlOworKwlpbnQJCQlmaWxldHlwZTsKKysKKysJc3dpdGNoKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CisrCQljYXNlIFNfSUZDSFI6CisrCQkJbW9kZSA9IExJTlVYX1NfSUZDSFI7CisrCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0NIUkRFVjsKKysJCQlicmVhazsKKysJCWNhc2UgU19JRkJMSzoKKysJCQltb2RlID0gTElOVVhfU19JRkJMSzsKKysJCQlmaWxldHlwZSA9ICBFWFQyX0ZUX0JMS0RFVjsKKysJCQlicmVhazsKKysJCWNhc2UgU19JRklGTzoKKysJCQltb2RlID0gTElOVVhfU19JRklGTzsKKysJCQlmaWxldHlwZSA9IEVYVDJfRlRfRklGTzsKKysJCQlicmVhazsKKysJfQorKworKwlpZiAoIShjdXJyZW50X2ZzLT5mbGFncyAmIEVYVDJfRkxBR19SVykpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIDAsICJGaWxlc3lzdGVtIG9wZW5lZCByZWFkL29ubHkiKTsKKysJCXJldHVybiAtMTsKKysJfQorKwlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmaW5vKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAwKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysjaWZkZWYgREVCVUdGUworKwlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIGlubyk7CisrI2VuZGlmCisrCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgbmFtZSwgaW5vLCBmaWxldHlwZSk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIG5hbWUsIGlubywgZmlsZXR5cGUpOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCXJldHVybiAtMTsKKysJfQorKyAgICAgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLCBpbm8pKQorKwkJY29tX2VycihfX2Z1bmNfXywgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0Iik7CisrCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoY3VycmVudF9mcywgaW5vLCArMSwgMCk7CisrCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworKwlpbm9kZS5pX21vZGUgPSBtb2RlOworKwlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorKwkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKysKKysJbWFqb3IgPSBtYWpvcihzdC0+c3RfcmRldik7CisrCW1pbm9yID0gbWlub3Ioc3QtPnN0X3JkZXYpOworKworKwlpZiAoKG1ham9yIDwgMjU2KSAmJiAobWlub3IgPCAyNTYpKSB7CisrCQlpbm9kZS5pX2Jsb2NrWzBdID0gbWFqb3IgKiAyNTYgKyBtaW5vcjsKKysJCWlub2RlLmlfYmxvY2tbMV0gPSAwOworKwl9IGVsc2UgeworKwkJaW5vZGUuaV9ibG9ja1swXSA9IDA7CisrCQlpbm9kZS5pX2Jsb2NrWzFdID0gKG1pbm9yICYgMHhmZikgfCAobWFqb3IgPDwgOCkgfCAoKG1pbm9yICYgfjB4ZmYpIDw8IDEyKTsKKysJfQorKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKysKKysJcmV0dmFsID0gZXh0MmZzX3dyaXRlX25ld19pbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSk7CisrCWlmIChyZXR2YWwpCisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBpbm9kZSAldSIsIGlubyk7CisrCisrCXJldHVybiByZXR2YWw7CisgfQorIAorIC8qIE1ha2UgYSBzeW1saW5rIG5hbWUgLT4gdGFyZ2V0ICovCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNC1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zeW1saW5rLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkMTk4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNC1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zeW1saW5rLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gMDlkMzA0OTc3Njg4MjE2N2Y3MjQ5ZWUyNjI2NWI0MTYzZDcyMjJjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzoxOTo1NSAtMDUwMAorU3ViamVjdDogW1BBVENIIDA0LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjcmVhdGUgc3ltbGluaworCitUaGUgZG9fc3ltbGlua19pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHN5bWxpbmtzLCBtb3N0IG9mIHRoZQorY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywgdGhlIGRlYnVnZnMvZGVidWdmcy5jIHdpbGwgYmUgbW9kaWZpZWQKK3RvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDRkYThhZmYuLmY4NDUxMDMgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtODgsNiArODgsMzggQEAgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgLyogTWFrZSBhIHN5bWxpbmsgbmFtZSAtPiB0YXJnZXQgKi8KKyBlcnJjb2RlX3QgZG9fc3ltbGlua19pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdGFyZ2V0KQorIHsKKysJY2hhcgkJCSpjcDsKKysJZXh0Ml9pbm9fdAkJcGFyZW50X2lubzsKKysJZXJyY29kZV90CQlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKwlzdHJ1Y3Qgc3RhdAkJc3Q7CisrCisrCWNwID0gc3RycmNocihuYW1lLCAnLycpOworKwlpZiAoY3ApIHsKKysJCSpjcCA9IDA7CisrCQlpZiAoKHJldHZhbCA9ICBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgY3dkLCBuYW1lLCAmcGFyZW50X2lubykpKXsKKysJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCW5hbWUgPSBjcCsxOworKwl9IGVsc2UKKysJCXBhcmVudF9pbm8gPSBjd2Q7CisrCisrdHJ5X2FnYWluOgorKwlyZXR2YWwgPSBleHQyZnNfc3ltbGluayhjdXJyZW50X2ZzLCBwYXJlbnRfaW5vLCAwLCBuYW1lLCB0YXJnZXQpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnRfaW5vKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKCJkb19zeW1saW5rX2ludGVybmFsIiwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlnb3RvIHRyeV9hZ2FpbjsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJleHQyZnNfc3ltbGluayIsIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisgfQorIAorIC8qIE1ha2UgYSBkaXJlY3RvcnkgaW4gdGhlIGZzICovCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNS1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktcmVndWxhci1maWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzNWNkOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNS1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktcmVndWxhci1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMjI0IEBACitGcm9tIDI5NzNjNzRhZmFhNTMyZjNmNzI2MzliNDYzMzIyYjI1MjM1MTljMjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6Mjg6MTIgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY29weSByZWd1bGFyIGZpbGUKKworVGhlIGRvX3dyaXRlX2ludGVybmFsKCkgaXMgdXNlZCBmb3IgY29weWluZyBmaWxlIGZyb20gbmF0aXZlIGZzIHRvCit0YXJnZXQsIG1vc3Qgb2YgdGhlIGNvZGUgYXJlIGZyb20gZGVidWdmcy9kZWJ1Z2ZzLmMsIHRoZQorZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZSBtb2RpZmllZCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgMTgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxODMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IGY4NDUxMDMuLjk4ZjRhOTMgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtOCw2ICs4LDE2IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorKy8qIDY0S2lCIGlzIHRoZSBtaW5pbWl1bSBibGtzaXplIHRvIGJlc3QgbWluaW1pemUgc3lzdGVtIGNhbGwgb3ZlcmhlYWQuICovCisrI2lmbmRlZiBJT19CVUZTSVpFCisrI2RlZmluZSBJT19CVUZTSVpFIDY0KjEwMjQKKysjZW5kaWYKKysKKysvKiBCbG9jayBzaXplIGZvciBgc3RfYmxvY2tzJyAqLworKyNpZm5kZWYgU19CTEtTSVpFCisrI2RlZmluZSBTX0JMS1NJWkUgNTEyCisrI2VuZGlmCisrCisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTEyNyw5ICsxMzcsMTgyIEBAIGVycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKKyB9CisgCisrc3RhdGljIGVycmNvZGVfdCBjb3B5X2ZpbGUoaW50IGZkLCBleHQyX2lub190IG5ld2ZpbGUsIGludCBidWZzaXplLCBpbnQgbWFrZV9ob2xlcykKKyt7CisrCWV4dDJfZmlsZV90CWUyX2ZpbGU7CisrCWVycmNvZGVfdAlyZXR2YWw7CisrCWludAkJZ290OworKwl1bnNpZ25lZCBpbnQJd3JpdHRlbjsKKysJY2hhcgkJKmJ1ZjsKKysJY2hhcgkJKnB0cjsKKysJY2hhcgkJKnplcm9fYnVmOworKwlpbnQJCWNtcDsKKysKKysJcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihjdXJyZW50X2ZzLCBuZXdmaWxlLAorKwkJCQkgIEVYVDJfRklMRV9XUklURSwgJmUyX2ZpbGUpOworKwlpZiAocmV0dmFsKQorKwkJcmV0dXJuIHJldHZhbDsKKysKKysJcmV0dmFsID0gZXh0MmZzX2dldF9tZW0oYnVmc2l6ZSwgJmJ1Zik7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCS8qIFRoaXMgaXMgdXNlZCBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgd2hvbGUgYmxvY2sgaXMgemVybyAqLworKwlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbXplcm8oYnVmc2l6ZSwgJnplcm9fYnVmKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKysJCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJd2hpbGUgKDEpIHsKKysJCWdvdCA9IHJlYWQoZmQsIGJ1ZiwgYnVmc2l6ZSk7CisrCQlpZiAoZ290ID09IDApCisrCQkJYnJlYWs7CisrCQlpZiAoZ290IDwgMCkgeworKwkJCXJldHZhbCA9IGVycm5vOworKwkJCWdvdG8gZmFpbDsKKysJCX0KKysJCXB0ciA9IGJ1ZjsKKysKKysJCS8qIFNwYXJzZSBjb3B5ICovCisrCQlpZiAobWFrZV9ob2xlcykgeworKwkJCS8qIENoZWNrIHdoZXRoZXIgYWxsIGlzIHplcm8gKi8KKysJCQljbXAgPSBtZW1jbXAocHRyLCB6ZXJvX2J1ZiwgZ290KTsKKysJCQlpZiAoY21wID09IDApIHsKKysJCQkJIC8qIFRoZSB3aG9sZSBibG9jayBpcyB6ZXJvLCBtYWtlIGEgaG9sZSAqLworKwkJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV9sc2VlayhlMl9maWxlLCBnb3QsIEVYVDJfU0VFS19DVVIsIE5VTEwpOworKwkJCQlpZiAocmV0dmFsKQorKwkJCQkJZ290byBmYWlsOworKwkJCQlnb3QgPSAwOworKwkJCX0KKysJCX0KKysKKysJCS8qIE5vcm1hbCBjb3B5ICovCisrCQl3aGlsZSAoZ290ID4gMCkgeworKwkJCXJldHZhbCA9IGV4dDJmc19maWxlX3dyaXRlKGUyX2ZpbGUsIHB0ciwKKysJCQkJCQkgICBnb3QsICZ3cml0dGVuKTsKKysJCQlpZiAocmV0dmFsKQorKwkJCQlnb3RvIGZhaWw7CisrCisrCQkJZ290IC09IHdyaXR0ZW47CisrCQkJcHRyICs9IHdyaXR0ZW47CisrCQl9CisrCX0KKysJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworKwlleHQyZnNfZnJlZV9tZW0oJnplcm9fYnVmKTsKKysJcmV0dmFsID0gZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrCXJldHVybiByZXR2YWw7CisrCisrZmFpbDoKKysJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworKwlleHQyZnNfZnJlZV9tZW0oJnplcm9fYnVmKTsKKysJKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKwlyZXR1cm4gcmV0dmFsOworK30KKysKKyAvKiBDb3B5IHRoZSBuYXRpdmUgZmlsZSB0byB0aGUgZnMgKi8KKyBlcnJjb2RlX3QgZG9fd3JpdGVfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCkKKyB7CisrCWludAkJZmQ7CisrCXN0cnVjdCBzdGF0CXN0YXRidWY7CisrCWV4dDJfaW5vX3QJbmV3ZmlsZTsKKysJZXJyY29kZV90CXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisrCWludAkJYnVmc2l6ZSA9IElPX0JVRlNJWkU7CisrCWludAkJbWFrZV9ob2xlcyA9IDA7CisrCisrCWZkID0gb3BlbihzcmMsIE9fUkRPTkxZKTsKKysJaWYgKGZkIDwgMCkgeworKwkJY29tX2VycihzcmMsIGVycm5vLCAwKTsKKysJCXJldHVybiBlcnJubzsKKysJfQorKwlpZiAoZnN0YXQoZmQsICZzdGF0YnVmKSA8IDApIHsKKysJCWNvbV9lcnIoc3JjLCBlcnJubywgMCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysKKysJcmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgZGVzdCwgJm5ld2ZpbGUpOworKwlpZiAocmV0dmFsID09IDApIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIDAsICJUaGUgZmlsZSAnJXMnIGFscmVhZHkgZXhpc3RzXG4iLCBkZXN0KTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBjd2QsIDAxMDc1NSwgMCwgJm5ld2ZpbGUpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsIDApOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKyNpZmRlZiBERUJVR0ZTCisrCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CisrI2VuZGlmCisrCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgZGVzdCwgbmV3ZmlsZSwKKysJCQkJRVhUMl9GVF9SRUdfRklMRSk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworKwkJCWNsb3NlKGZkKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBkZXN0LCBuZXdmaWxlLAorKwkJCQkJRVhUMl9GVF9SRUdfRklMRSk7CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihkZXN0LCByZXR2YWwsIDApOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKyAgICAgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoY3VycmVudF9mcy0+aW5vZGVfbWFwLCBuZXdmaWxlKSkKKysJCWNvbV9lcnIoX19mdW5jX18sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKysJbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisrCWlub2RlLmlfbW9kZSA9IChzdGF0YnVmLnN0X21vZGUgJiB+TElOVVhfU19JRk1UKSB8IExJTlVYX1NfSUZSRUc7CisrCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisrCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworKwlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKysJaW5vZGUuaV9zaXplID0gc3RhdGJ1Zi5zdF9zaXplOworKwlpZiAoY3VycmVudF9mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisrCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworKwkJaW50IGk7CisrCQlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKysKKysJCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgJmlub2RlLmlfYmxvY2tbMF07CisrCQllaC0+ZWhfZGVwdGggPSAwOworKwkJZWgtPmVoX2VudHJpZXMgPSAwOworKwkJZWgtPmVoX21hZ2ljID0gZXh0MmZzX2NwdV90b19sZTE2KEVYVDNfRVhUX01BR0lDKTsKKysJCWkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKysJCQlzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKysJCWVoLT5laF9tYXggPSBleHQyZnNfY3B1X3RvX2xlMTYoaSk7CisrCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKysJfQorKworKwlpZiAoKHJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoY3VycmVudF9mcywgbmV3ZmlsZSwgJmlub2RlKSkpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGNyZWF0aW5nIGlub2RlICV1IiwgbmV3ZmlsZSk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLmlfbW9kZSkpIHsKKysJCWlmIChzdGF0YnVmLnN0X2Jsb2NrcyA8IHN0YXRidWYuc3Rfc2l6ZSAvIFNfQkxLU0laRSkgeworKwkJCW1ha2VfaG9sZXMgPSAxOworKwkJCS8qCisrCQkJICogVXNlIEkvTyBibG9ja3NpemUgYXMgYnVmZmVyIHNpemUgd2hlbgorKwkJCSAqIGNvcHlpbmcgc3BhcnNlIGZpbGVzLgorKwkJCSAqLworKwkJCWJ1ZnNpemUgPSBzdGF0YnVmLnN0X2Jsa3NpemU7CisrCQl9CisrCQlyZXR2YWwgPSBjb3B5X2ZpbGUoZmQsIG5ld2ZpbGUsIGJ1ZnNpemUsIG1ha2VfaG9sZXMpOworKwkJaWYgKHJldHZhbCkKKysJCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsIDApOworKwl9CisrCWNsb3NlKGZkKTsKKysKKysJcmV0dXJuIDA7CisgfQorIAorIC8qIENvcHkgZmlsZXMgZnJvbSBzb3VyY2VfZGlyIHRvIGZzICovCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1kaXJlY3RvcnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2NhOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gYzhkMWM0M2JlMjQ0ODkwMzYxMzdmOGZkZWJjZmNjYzIwOGY3Y2M4YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzozNDoxNCAtMDUwMAorU3ViamVjdDogW1BBVENIIDA2LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjcmVhdGUgZGlyZWN0b3J5CisKK1RoZSBkb19ta2Rpcl9pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIG1ha2luZyBkaXIgb24gdGhlIHRhcmdldCBmcywgbW9zdCBvZgordGhlIGNvZGUgYXJlIGZyb20gZGVidWdmcy9kZWJ1Z2ZzLmMsIHRoZSBkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlCittb2RpZmllZCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDk4ZjRhOTMuLjZhOGM5MmEgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMTM1LDYgKzEzNSwzNyBAQCB0cnlfYWdhaW46CisgLyogTWFrZSBhIGRpcmVjdG9yeSBpbiB0aGUgZnMgKi8KKyBlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CisrCWNoYXIJCQkqY3A7CisrCWV4dDJfaW5vX3QJCXBhcmVudF9pbm8sIGlubzsKKysJZXJyY29kZV90CQlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKworKworKwljcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKysJaWYgKGNwKSB7CisrCQkqY3AgPSAwOworKwkJaWYgKChyZXR2YWwgPSAgZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgbmFtZSwgJnBhcmVudF9pbm8pKSl7CisrCQkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQluYW1lID0gY3ArMTsKKysJfSBlbHNlCisrCQlwYXJlbnRfaW5vID0gY3dkOworKworK3RyeV9hZ2FpbjoKKysJcmV0dmFsID0gZXh0MmZzX21rZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIDAsIG5hbWUpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnRfaW5vKTsKKysJCWlmIChyZXR2YWwpIHsKKysJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCWdvdG8gdHJ5X2FnYWluOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoImV4dDJmc19ta2RpciIsIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisgfQorIAorIHN0YXRpYyBlcnJjb2RlX3QgY29weV9maWxlKGludCBmZCwgZXh0Ml9pbm9fdCBuZXdmaWxlLCBpbnQgYnVmc2l6ZSwgaW50IG1ha2VfaG9sZXMpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNy1taXNjLWNyZWF0ZV9pbm9kZS5jLXNldC1vd25lci1tb2RlLXRpbWUtZm9yLXRoZS1pbm9kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5NjM5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwNy1taXNjLWNyZWF0ZV9pbm9kZS5jLXNldC1vd25lci1tb2RlLXRpbWUtZm9yLXRoZS1pbm9kLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK0Zyb20gMmIxZjZlNmIzODY3MDNhNWQ3ZTYwYjdkOGI3Mjc0NmYzZDMxYThiYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzozOTo1NiAtMDUwMAorU3ViamVjdDogW1BBVENIIDA3LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBzZXQgb3duZXIvbW9kZS90aW1lIGZvciB0aGUgaW5vZGUKKworU2V0IHRoZSB1aWQsIGdpZCwgbW9kZSBhbmQgdGltZSBmb3IgaW5vZGUuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICA0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDZhOGM5MmEuLmFhZDczNTQgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMTgsNiArMTgsNDAgQEAKKyAjZGVmaW5lIFNfQkxLU0laRSA1MTIKKyAjZW5kaWYKKyAKKysvKiBGaWxsIHRoZSB1aWQsIGdpZCwgbW9kZSBhbmQgdGltZSBmb3IgdGhlIGlub2RlICovCisrc3RhdGljIHZvaWQgZmlsbF9pbm9kZShzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIHN0cnVjdCBzdGF0ICpzdCkKKyt7CisrCWlmIChzdCAhPSBOVUxMKSB7CisrCQlpbm9kZS0+aV91aWQgPSBzdC0+c3RfdWlkOworKwkJaW5vZGUtPmlfZ2lkID0gc3QtPnN0X2dpZDsKKysJCWlub2RlLT5pX21vZGUgfD0gc3QtPnN0X21vZGU7CisrCQlpbm9kZS0+aV9hdGltZSA9IHN0LT5zdF9hdGltZTsKKysJCWlub2RlLT5pX210aW1lID0gc3QtPnN0X210aW1lOworKwkJaW5vZGUtPmlfY3RpbWUgPSBzdC0+c3RfY3RpbWU7CisrCX0KKyt9CisrCisrLyogU2V0IHRoZSB1aWQsIGdpZCwgbW9kZSBhbmQgdGltZSBmb3IgdGhlIGlub2RlICovCisrZXJyY29kZV90IHNldF9pbm9kZV9leHRyYShleHQyX2lub190IGN3ZCwgZXh0Ml9pbm9fdCBpbm8sIHN0cnVjdCBzdGF0ICpzdCkKKyt7CisrCWVycmNvZGVfdAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysKKysJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBpbm9kZSAldSIsIGlubyk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCWZpbGxfaW5vZGUoJmlub2RlLCBzdCk7CisrCisrCXJldHZhbCA9IGV4dDJmc193cml0ZV9pbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSk7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHdyaXRpbmcgaW5vZGUgJXUiLCBpbm8pOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorK30KKysKKyAvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKyBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtNDM1LDYgKzQ2OSwxNyBAQCBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIAkJCQljb21fZXJyKF9fZnVuY19fLCAwLAorIAkJCQkJXygiaWdub3JpbmcgZW50cnkgXCIlc1wiIiksIG5hbWUpOworIAkJfQorKworKwkJaWYgKChyZXR2YWwgPSAgZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIHBhcmVudF9pbm8sIG5hbWUsICZpbm8pKSl7CisrCQkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCisrCQlpZiAoKHJldHZhbCA9IHNldF9pbm9kZV9leHRyYShwYXJlbnRfaW5vLCBpbm8sICZzdCkpKSB7CisrCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLAorKwkJCQlfKCJ3aGlsZSBzZXR0aW5nIGlub2RlIGZvciBcIiVzXCIiKSwgbmFtZSk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKyAJfQorIAljbG9zZWRpcihkaCk7CisgCXJldHVybiByZXR2YWw7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOC1ta2UyZnMuYy1hZGQtYW4tb3B0aW9uLWQtcm9vdC1kaXJlY3RvcnkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTg2NzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoCkBAIC0wLDAgKzEsMTY4IEBACitGcm9tIGRmODU2OTI5ZTQyYmQ0ZjNiZGM4ZDRmNTllZTgyYWU4YjI4NTMyZTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMjQgRGVjIDIwMTMgMDE6NTA6NDUgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8xMV0gbWtlMmZzLmM6IGFkZCBhbiBvcHRpb246IC1kIHJvb3QtZGlyZWN0b3J5CisKK1RoaXMgb3B0aW9uIGlzIHVzZWQgZm9yIGFkZGluZyB0aGUgZmlsZXMgZnJvbSBhIGdpdmVuIGRpcmVjdG9yeSAodGhlCityb290LWRpcmVjdG9yeSkgdG8gdGhlIGZpbGVzeXN0ZW0sIGl0IGlzIHNpbWlsaWFyIHRvIGdlbmV4dDJmcywgYnV0CitnZW5leHQyZnMgZG9lc24ndCBmdWxseSBzdXBwb3J0IGV4dDQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL01ha2VmaWxlLmluIHwgICAxNCArKysrKysrKysrLS0tLQorIG1pc2MvbWtlMmZzLmMgICAgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21pc2MvTWFrZWZpbGUuaW4gYi9taXNjL01ha2VmaWxlLmluCitpbmRleCA1NTNjMzYxLi44MjUzNzIzIDEwMDY0NAorLS0tIGEvbWlzYy9NYWtlZmlsZS5pbgorKysrIGIvbWlzYy9NYWtlZmlsZS5pbgorQEAgLTQyLDcgKzQyLDggQEAgTFBST0dTPQkJQEUySU5JVFJEX1BST0dACisgCisgVFVORTJGU19PQkpTPQl0dW5lMmZzLm8gdXRpbC5vCisgTUtMUEZfT0JKUz0JbWtsb3N0K2ZvdW5kLm8KKy1NS0UyRlNfT0JKUz0JbWtlMmZzLm8gdXRpbC5vIHByb2ZpbGUubyBwcm9mX2Vyci5vIGRlZmF1bHRfcHJvZmlsZS5vCisrTUtFMkZTX09CSlM9CW1rZTJmcy5vIHV0aWwubyBwcm9maWxlLm8gcHJvZl9lcnIubyBkZWZhdWx0X3Byb2ZpbGUubyBcCisrCQkJY3JlYXRlX2lub2RlLm8KKyBDSEFUVFJfT0JKUz0JY2hhdHRyLm8KKyBMU0FUVFJfT0JKUz0JbHNhdHRyLm8KKyBVVUlER0VOX09CSlM9CXV1aWRnZW4ubworQEAgLTYwLDcgKzYxLDggQEAgRTJGUkVFRlJBR19PQkpTPSBlMmZyZWVmcmFnLm8KKyBQUk9GSUxFRF9UVU5FMkZTX09CSlM9CXByb2ZpbGVkL3R1bmUyZnMubyBwcm9maWxlZC91dGlsLm8KKyBQUk9GSUxFRF9NS0xQRl9PQkpTPQlwcm9maWxlZC9ta2xvc3QrZm91bmQubworIFBST0ZJTEVEX01LRTJGU19PQkpTPQlwcm9maWxlZC9ta2UyZnMubyBwcm9maWxlZC91dGlsLm8gcHJvZmlsZWQvcHJvZmlsZS5vIFwKKy0JCQlwcm9maWxlZC9wcm9mX2Vyci5vIHByb2ZpbGVkL2RlZmF1bHRfcHJvZmlsZS5vCisrCQkJcHJvZmlsZWQvcHJvZl9lcnIubyBwcm9maWxlZC9kZWZhdWx0X3Byb2ZpbGUubyBcCisrCQkJcHJvZmlsZWQvY3JlYXRlX2lub2RlLm8KKyBQUk9GSUxFRF9DSEFUVFJfT0JKUz0JcHJvZmlsZWQvY2hhdHRyLm8KKyBQUk9GSUxFRF9MU0FUVFJfT0JKUz0JcHJvZmlsZWQvbHNhdHRyLm8KKyBQUk9GSUxFRF9VVUlER0VOX09CSlM9CXByb2ZpbGVkL3V1aWRnZW4ubworQEAgLTgyLDcgKzg0LDcgQEAgU1JDUz0JJChzcmNkaXIpL3R1bmUyZnMuYyAkKHNyY2RpcikvbWtsb3N0K2ZvdW5kLmMgJChzcmNkaXIpL21rZTJmcy5jIFwKKyAJCSQoc3JjZGlyKS91dWlkZ2VuLmMgJChzcmNkaXIpL2Jsa2lkLmMgJChzcmNkaXIpL2xvZ3NhdmUuYyBcCisgCQkkKHNyY2RpcikvZmlsZWZyYWcuYyAkKHNyY2RpcikvYmFzZV9kZXZpY2UuYyBcCisgCQkkKHNyY2RpcikvaXNtb3VudGVkLmMgJChzcmNkaXIpLy4uL2UyZnNjay9wcm9maWxlLmMgXAorLQkJJChzcmNkaXIpL2UydW5kby5jICQoc3JjZGlyKS9lMmZyZWVmcmFnLmMKKysJCSQoc3JjZGlyKS9lMnVuZG8uYyAkKHNyY2RpcikvZTJmcmVlZnJhZy5jICQoc3JjZGlyKS9jcmVhdGVfaW5vZGUuYworIAorIExJQlM9ICQoTElCRVhUMkZTKSAkKExJQkNPTV9FUlIpIAorIERFUExJQlM9ICQoTElCRVhUMkZTKSAkKERFUExJQkNPTV9FUlIpCitAQCAtNjMwLDcgKzYzMiw3IEBAIG1rZTJmcy5vOiAkKHNyY2RpcikvbWtlMmZzLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisgICQoc3JjZGlyKS91dGlsLmggcHJvZmlsZS5oIHByb2ZfZXJyLmggJCh0b3Bfc3JjZGlyKS92ZXJzaW9uLmggXAorLSAkKHNyY2RpcikvbmxzLWVuYWJsZS5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCBcCisrICQoc3JjZGlyKS9ubHMtZW5hYmxlLmggJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvbWtxdW90YS5oICQoc3JjZGlyKS9jcmVhdGVfaW5vZGUuaFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpby5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL2RxYmxrX3YyLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9xdW90YWlvX3RyZWUuaCAkKHRvcF9zcmNkaXIpL2xpYi8uLi9lMmZzY2svZGljdC5oCisgY2hhdHRyLm86ICQoc3JjZGlyKS9jaGF0dHIuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKK0BAIC03MTAsMyArNzEyLDcgQEAgZTJmcmVlZnJhZy5vOiAkKHNyY2RpcikvZTJmcmVlZnJhZy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9pby5oICQodG9wX2J1aWxkZGlyKS9saWIvZXh0MmZzL2V4dDJfZXJyLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgICQoc3JjZGlyKS9lMmZyZWVmcmFnLmgKKytjcmVhdGVfaW5vZGUubzogJChzcmNkaXIpL2NyZWF0ZV9pbm9kZS5oICQoc3JjZGlyKS9jcmVhdGVfaW5vZGUuYyBcCisrICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oIFwKKysgJCh0b3Bfc3JjZGlyKS9saWIvZXQvY29tX2Vyci5oICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCBcCisrICQoc3JjZGlyKS9ubHMtZW5hYmxlLmgKK2RpZmYgLS1naXQgYS9taXNjL21rZTJmcy5jIGIvbWlzYy9ta2UyZnMuYworaW5kZXggMmU4YmE2MC4uNTc4YjYyZCAxMDA2NDQKKy0tLSBhL21pc2MvbWtlMmZzLmMKKysrKyBiL21pc2MvbWtlMmZzLmMKK0BAIC0yMiw3ICsyMiw2IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdHJpbmdzLmg+CistI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaWZkZWYgX19saW51eF9fCitAQCAtNDQsMjQgKzQzLDE5IEBAIGV4dGVybiBpbnQgb3B0aW5kOworICNpbmNsdWRlIDxlcnJuby5oPgorICNlbmRpZgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPGxpYmdlbi5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8YmxraWQvYmxraWQuaD4KKyAKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJmc1AuaCIKKy0jaW5jbHVkZSAiZXQvY29tX2Vyci5oIgorICNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKKy0jaW5jbHVkZSAiZTJwL2UycC5oIgorLSNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisgI2luY2x1ZGUgInV0aWwuaCIKKyAjaW5jbHVkZSAicHJvZmlsZS5oIgorICNpbmNsdWRlICJwcm9mX2Vyci5oIgorICNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCistI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyAjaW5jbHVkZSAicXVvdGEvbWtxdW90YS5oIgorKyNpbmNsdWRlICJjcmVhdGVfaW5vZGUuaCIKKyAKKyAjZGVmaW5lIFNUUklERV9MRU5HVEggOAorIAorQEAgLTEwNSw2ICs5OSw3IEBAIHN0YXRpYyBjaGFyICptb3VudF9kaXI7CisgY2hhciAqam91cm5hbF9kZXZpY2U7Cisgc3RhdGljIGludCBzeW5jX2tsdWRnZTsJLyogU2V0IHVzaW5nIHRoZSBNS0UyRlNfU1lOQyBlbnYuIG9wdGlvbiAqLworIHN0YXRpYyBjaGFyICoqZnNfdHlwZXM7CisrY29uc3QgY2hhciAqcm9vdF9kaXI7ICAvKiBDb3B5IGZpbGVzIGZyb20gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgKi8KKyAKKyBzdGF0aWMgcHJvZmlsZV90CXByb2ZpbGU7CisgCitAQCAtMTE2LDcgKzExMSw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCisgCWZwcmludGYoc3RkZXJyLCBfKCJVc2FnZTogJXMgWy1jfC1sIGZpbGVuYW1lXSBbLWIgYmxvY2stc2l6ZV0gIgorIAkiWy1DIGNsdXN0ZXItc2l6ZV1cblx0Wy1pIGJ5dGVzLXBlci1pbm9kZV0gWy1JIGlub2RlLXNpemVdICIKKyAJIlstSiBqb3VybmFsLW9wdGlvbnNdXG4iCistCSJcdFstRyBmbGV4LWdyb3VwLXNpemVdIFstTiBudW1iZXItb2YtaW5vZGVzXVxuIgorKwkiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc10gIgorKwkiWy1kIHJvb3QtZGlyZWN0b3J5XVxuIgorIAkiXHRbLW0gcmVzZXJ2ZWQtYmxvY2tzLXBlcmNlbnRhZ2VdIFstbyBjcmVhdG9yLW9zXVxuIgorIAkiXHRbLWcgYmxvY2tzLXBlci1ncm91cF0gWy1MIHZvbHVtZS1sYWJlbF0gIgorIAkiWy1NIGxhc3QtbW91bnRlZC1kaXJlY3RvcnldXG5cdFstTyBmZWF0dXJlWywuLi5dXSAiCitAQCAtMTM5NCw3ICsxMzkwLDcgQEAgcHJvZmlsZV9lcnJvcjoKKyAJfQorIAorIAl3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsCistCQkgICAgImI6Y2c6aTpqbDptOm5vOnFyOnM6dDp2QzpERTpGRzpJOko6S0w6TTpOOk86UjpTVDpVOlYiKSkgIT0gRU9GKSB7CisrCQkgICAgImI6Y2c6aTpqbDptOm5vOnFyOnM6dDpkOnZDOkRFOkZHOkk6SjpLTDpNOk46TzpSOlNUOlU6ViIpKSAhPSBFT0YpIHsKKyAJCXN3aXRjaCAoYykgeworIAkJY2FzZSAnYic6CisgCQkJYmxvY2tzaXplID0gcGFyc2VfbnVtX2Jsb2NrczIob3B0YXJnLCAtMSk7CitAQCAtMTU4Miw2ICsxNTc4LDkgQEAgcHJvZmlsZV9lcnJvcjoKKyAJCWNhc2UgJ1UnOgorIAkJCWZzX3V1aWQgPSBvcHRhcmc7CisgCQkJYnJlYWs7CisrCQljYXNlICdkJzoKKysJCQlyb290X2RpciA9IG9wdGFyZzsKKysJCQlicmVhazsKKyAJCWNhc2UgJ3YnOgorIAkJCXZlcmJvc2UgPSAxOworIAkJCWJyZWFrOworQEAgLTI3MjYsNiArMjcyNSwyMSBAQCBub19qb3VybmFsOgorIAkJCQkgICAgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9RVU9UQSkpCisgCQljcmVhdGVfcXVvdGFfaW5vZGVzKGZzKTsKKyAKKysJLyogQ29weSBmaWxlcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICovCisrCWlmIChyb290X2RpcikgeworKwkJaWYgKCFxdWlldCkKKysJCQlwcmludGYoIiVzIiwgXygiQ29weWluZyBmaWxlcyBpbnRvIHRoZSBkZXZpY2U6ICIpKTsKKysKKysJCWN1cnJlbnRfZnMgPSBmczsKKysJCXJvb3QgPSBFWFQyX1JPT1RfSU5POworKwkJcmV0dmFsID0gcG9wdWxhdGVfZnMocm9vdCwgcm9vdF9kaXIpOworKwkJaWYgKHJldHZhbCkKKysJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwKKysJCQkJXygiXG5FcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZpbGUgc3lzdGVtIikpOworKwkJZWxzZSBpZiAoIXF1aWV0KQorKwkJCXByaW50ZigiJXMiLCBfKCJkb25lXG4iKSk7CisrCX0KKysKKyAJaWYgKCFxdWlldCkKKyAJCXByaW50ZigiJXMiLCBfKCJXcml0aW5nIHN1cGVyYmxvY2tzIGFuZCAiCisgCQkgICAgICAgImZpbGVzeXN0ZW0gYWNjb3VudGluZyBpbmZvcm1hdGlvbjogIikpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDktbWlzYy1jcmVhdGVfaW5vZGUuYy1oYW5kbGUtaGFyZGxpbmtzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzMwZWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaApAQCAtMCwwICsxLDIxMCBAQAorRnJvbSBkODNkYzk1MGIzZWMxZmJkZTMzYjIzZDQyYzUxNTQwOTFhNzRmNGQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjQ0OjAzIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGhhbmRsZSBoYXJkbGlua3MKKworQ3JlYXRlIHRoZSBpbm9kZSBhbmQgc2F2ZSB0aGUgbmF0aXZlIGlub2RlIG51bWJlciB3aGVuIHdlIG1lZXQgdGhlIGhhcmQKK2xpbmsgKHN0X25saW5rID4gMSkgYXQgdGhlIGZpcnN0IHRpbWUsIHVzZSBleHQyZnNfbGluaygpIHRvIGxpbmsgdGhlCituYW1lIHRvIHRoZSB0YXJnZXQgaW5vZGUgbnVtYmVyIHdoZW4gd2UgbWVldCB0aGUgc2FtZSBuYXRpdmUgaW5vZGUKK251bWJlciBhZ2Fpbi4KKworVGhpcyBhbGdvcml0aG0gaXMgcmVmZXJyZWQgZnJvbSB0aGUgZ2VuZXh0MmZzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbWlzYy9jcmVhdGVfaW5vZGUuaCB8ICAgMTggKysrKysrKysrKysKKyBtaXNjL21rZTJmcy5jICAgICAgIHwgICAxMiArKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAxMTggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IGFhZDczNTQuLjc2MzUwNGQgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMTgsNiArMTgsNDQgQEAKKyAjZGVmaW5lIFNfQkxLU0laRSA1MTIKKyAjZW5kaWYKKyAKKysvKiBGb3Igc2F2aW5nIHRoZSBoYXJkIGxpbmtzICovCisraW50IGhkbGlua19jbnQgPSBIRExJTktfQ05UOworKworKy8qIExpbmsgYW4gaW5vZGUgbnVtYmVyIHRvIGEgZGlyZWN0b3J5ICovCisrc3RhdGljIGVycmNvZGVfdCBhZGRfbGluayhleHQyX2lub190IHBhcmVudF9pbm8sIGV4dDJfaW5vX3QgaW5vLCBjb25zdCBjaGFyICpuYW1lKQorK3sKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCWVycmNvZGVfdAkJcmV0dmFsOworKworKwlyZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShjdXJyZW50X2ZzLCBpbm8sICZpbm9kZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSByZWFkaW5nIGlub2RlICV1IiwgaW5vKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgcGFyZW50X2lubywgbmFtZSwgaW5vLCBpbm9kZS5pX2ZsYWdzKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50X2lubyk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBwYXJlbnRfaW5vLCBuYW1lLCBpbm8sIGlub2RlLmlfZmxhZ3MpOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGxpbmtpbmcgJXMiLCBuYW1lKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysKKysJaW5vZGUuaV9saW5rc19jb3VudCsrOworKworKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKwlpZiAocmV0dmFsKQorKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgd3JpdGluZyBpbm9kZSAldSIsIGlubyk7CisrCisrCXJldHVybiByZXR2YWw7CisrfQorKworIC8qIEZpbGwgdGhlIHVpZCwgZ2lkLCBtb2RlIGFuZCB0aW1lIGZvciB0aGUgaW5vZGUgKi8KKyBzdGF0aWMgdm9pZCBmaWxsX2lub2RlKHN0cnVjdCBleHQyX2lub2RlICppbm9kZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKK0BAIC0yNzgsNiArMzE2LDE3IEBAIGZhaWw6CisgCXJldHVybiByZXR2YWw7CisgfQorIAorK2ludCBpc19oYXJkbGluayhleHQyX2lub190IGlubykKKyt7CisrCWludCBpOworKworKwlmb3IoaSA9IDA7IGkgPCBoZGxpbmtzLmNvdW50OyBpKyspIHsKKysJCWlmKGhkbGlua3MuaGRsW2ldLnNyY19pbm8gPT0gaW5vKQorKwkJCXJldHVybiBpOworKwl9CisrCXJldHVybiAtMTsKKyt9CisrCisgLyogQ29weSB0aGUgbmF0aXZlIGZpbGUgdG8gdGhlIGZzICovCisgZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisgeworQEAgLTM4OCw5ICs0MzcsMTEgQEAgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyAJc3RydWN0IGRpcmVudAkqZGVudDsKKyAJc3RydWN0IHN0YXQJc3Q7CisgCWNoYXIJCWxuX3RhcmdldFtQQVRIX01BWF07CisrCXVuc2lnbmVkIGludAlzYXZlX2lub2RlOworIAlleHQyX2lub190CWlubzsKKyAJZXJyY29kZV90CXJldHZhbDsKKyAJaW50CQlyZWFkX2NudDsKKysJaW50CQloZGxpbms7CisgCisgCXJvb3QgPSBFWFQyX1JPT1RfSU5POworIAorQEAgLTQxMiw2ICs0NjMsMjIgQEAgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyAJCWxzdGF0KGRlbnQtPmRfbmFtZSwgJnN0KTsKKyAJCW5hbWUgPSBkZW50LT5kX25hbWU7CisgCisrCQkvKiBDaGVjayBmb3IgaGFyZGxpbmtzICovCisrCQlzYXZlX2lub2RlID0gMDsKKysJCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSAmJiAhU19JU0xOSyhzdC5zdF9tb2RlKSAmJiBzdC5zdF9ubGluayA+IDEpIHsKKysJCQloZGxpbmsgPSBpc19oYXJkbGluayhzdC5zdF9pbm8pOworKwkJCWlmIChoZGxpbmsgPj0gMCkgeworKwkJCQlyZXR2YWwgPSBhZGRfbGluayhwYXJlbnRfaW5vLAorKwkJCQkJCWhkbGlua3MuaGRsW2hkbGlua10uZHN0X2lubywgbmFtZSk7CisrCQkJCWlmIChyZXR2YWwpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGxpbmtpbmcgJXMiLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJY29udGludWU7CisrCQkJfSBlbHNlCisrCQkJCXNhdmVfaW5vZGUgPSAxOworKwkJfQorKworIAkJc3dpdGNoKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKKyAJCQljYXNlIFNfSUZDSFI6CisgCQkJY2FzZSBTX0lGQkxLOgorQEAgLTQ4MCw2ICs1NDcsMjcgQEAgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyAJCQkJXygid2hpbGUgc2V0dGluZyBpbm9kZSBmb3IgXCIlc1wiIiksIG5hbWUpOworIAkJCXJldHVybiByZXR2YWw7CisgCQl9CisrCisrCQkvKiBTYXZlIHRoZSBoYXJkbGluayBpbm8gKi8KKysJCWlmIChzYXZlX2lub2RlKSB7CisrCQkJLyoKKysJCQkgKiBDaGVjayB3aGV0aGVyIG5lZWQgbW9yZSBtZW1vcnksIGFuZCB3ZSBkb24ndCBuZWVkCisrCQkJICogZnJlZSgpIHNpbmNlIHRoZSBsaWZlc3BhbiB3aWxsIGJlIG92ZXIgYWZ0ZXIgdGhlIGZzCisrCQkJICogcG9wdWxhdGVkLgorKwkJCSAqLworKwkJCWlmIChoZGxpbmtzLmNvdW50ID09IGhkbGlua19jbnQpIHsKKysJCQkJaWYgKChoZGxpbmtzLmhkbCA9IHJlYWxsb2MgKGhkbGlua3MuaGRsLAorKwkJCQkJCShoZGxpbmtfY250ICsgSERMSU5LX0NOVCkgKgorKwkJCQkJCXNpemVvZiAoc3RydWN0IGhkbGlua19zKSkpID09IE5VTEwpIHsKKysJCQkJCWNvbV9lcnIobmFtZSwgZXJybm8sICJOb3QgZW5vdWdoIG1lbW9yeSIpOworKwkJCQkJcmV0dXJuIGVycm5vOworKwkJCQl9CisrCQkJCWhkbGlua19jbnQgKz0gSERMSU5LX0NOVDsKKysJCQl9CisrCQkJaGRsaW5rcy5oZGxbaGRsaW5rcy5jb3VudF0uc3JjX2lubyA9IHN0LnN0X2lubzsKKysJCQloZGxpbmtzLmhkbFtoZGxpbmtzLmNvdW50XS5kc3RfaW5vID0gaW5vOworKwkJCWhkbGlua3MuY291bnQrKzsKKysJCX0KKyAJfQorIAljbG9zZWRpcihkaCk7CisgCXJldHVybiByZXR2YWw7CitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuaCBiL21pc2MvY3JlYXRlX2lub2RlLmgKK2luZGV4IDlmYzk3ZmEuLjJiNmQ0MjkgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5oCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5oCitAQCAtNiw5ICs2LDI3IEBACisgI2luY2x1ZGUgImV4dDJmcy9leHQyZnMuaCIKKyAjaW5jbHVkZSAibmxzLWVuYWJsZS5oIgorIAorK3N0cnVjdCBoZGxpbmtfcworK3sKKysJZXh0Ml9pbm9fdCBzcmNfaW5vOworKwlleHQyX2lub190IGRzdF9pbm87CisrfTsKKysKKytzdHJ1Y3QgaGRsaW5rc19zCisreworKwlpbnQgY291bnQ7CisrCXN0cnVjdCBoZGxpbmtfcyAqaGRsOworK307CisrCisrc3RydWN0IGhkbGlua3NfcyBoZGxpbmtzOworKworIGV4dDJfZmlsc3lzICAgIGN1cnJlbnRfZnM7CisgZXh0Ml9pbm9fdCAgICAgcm9vdDsKKyAKKysvKiBGb3Igc2F2aW5nIHRoZSBoYXJkIGxpbmtzICovCisrI2RlZmluZSBIRExJTktfQ05UICAgICA0CisrZXh0ZXJuIGludCBoZGxpbmtfY250OworKworIC8qIEZvciBwb3B1bGF0aW5nIHRoZSBmaWxlc3lzdGVtICovCisgZXh0ZXJuIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpOworIGV4dGVybiBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCk7CitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKK2luZGV4IDU3OGI2MmQuLmE2M2YwYjcgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy5jCisrKysgYi9taXNjL21rZTJmcy5jCitAQCAtMjczMCw2ICsyNzMwLDE4IEBAIG5vX2pvdXJuYWw6CisgCQlpZiAoIXF1aWV0KQorIAkJCXByaW50ZigiJXMiLCBfKCJDb3B5aW5nIGZpbGVzIGludG8gdGhlIGRldmljZTogIikpOworIAorKwkJLyoKKysJCSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGhhcmRsaW5rcywgd2UgZG9uJ3QgbmVlZCBmcmVlKCkKKysJCSAqIHNpbmNlIHRoZSBsaWZlc3BhbiB3aWxsIGJlIG92ZXIgYWZ0ZXIgdGhlIGZzIHBvcHVsYXRlZC4KKysJCSAqLworKwkJaWYgKChoZGxpbmtzLmhkbCA9IChzdHJ1Y3QgaGRsaW5rX3MgKikKKysJCQkJbWFsbG9jKGhkbGlua19jbnQgKiBzaXplb2Yoc3RydWN0IGhkbGlua19zKSkpID09IE5VTEwpIHsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgXygiXG5Ob3QgZW5vdWdoIG1lbW9yeVxuIikpOworKwkJCXJldHZhbCA9IGV4dDJmc19jbG9zZShmcyk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysKKysJCWhkbGlua3MuY291bnQgPSAwOworIAkJY3VycmVudF9mcyA9IGZzOworIAkJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisgCQlyZXR2YWwgPSBwb3B1bGF0ZV9mcyhyb290LCByb290X2Rpcik7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTAtZGVidWdmcy11c2UtdGhlLWZ1bmN0aW9ucy1pbi1taXNjLWNyZWF0ZV9pbm9kZS5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNmNhOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTAtZGVidWdmcy11c2UtdGhlLWZ1bmN0aW9ucy1pbi1taXNjLWNyZWF0ZV9pbm9kZS5jLnBhdGNoCkBAIC0wLDAgKzEsNDk2IEBACitGcm9tIGRiODk5OTJmYWIyMjE1ZjUyZGNlNGM1OTVhMzkyNzFiNGZmMzAwMGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDQ6MjI6MjIgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xMV0gZGVidWdmczogdXNlIHRoZSBmdW5jdGlvbnMgaW4gbWlzYy9jcmVhdGVfaW5vZGUuYworCisqIFVzZSB0aGUgZnVuY3Rpb25zIGluIG1pc2MvY3JlYXRlX2lub2RlLmMsIGFuZCByZW1vdmUgdGhlIGR1cGxpY2F0ZWQKKyAgY29kZS4KKworKiBUaGUgQ1JFQVRFX0lOT0RFX0RFUFMgaW4gdGhlIGRlYnVnZnMvTWFrZWZpbGUuaW4gaXMgdXNlZCBmb3IgcmVjb3JkaW5nCisgIGNyZWF0ZV9pbm9kZS5vJ3MgZGVwZW5kcyB3aGljaCBpcyBmcm9tIG1pc2MvTWFrZWZpbGUuaW4sIHdlIGhhdmUgdG8KKyAgcmVjb21waWxlIGNyZWF0ZV9pbm9kZS5vIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBwcmludCBtb3JlIG1lc3NhZ2VzIHdoZW4KKyAgaXQgaXMgdXNlZCBieSBkZWJ1Z2ZzLCBqdXN0IGxpa2Ugd2UgcmVjb21waWxlIGUyZnJlZWZyYWcubywgYnV0IGl0IHNlZW1zCisgIHRoYXQgdGhlIGUyZnJlZWZyYWcubydzIGRlcGVuZHMgaW4gZGVidWdmcy9NYWtlZmlsZS5pbiBpcyBpbmNvcnJlY3QsIGl0CisgIHdvdWxkIG5vdCByZWJ1aWxkIHdoZW4gaXRzIGRlcGVuZHMgKGUuZy46IGxpYi9jb25maWcuaCkgaXMgY2hhbmdlZCwKKyAgd2hpY2ggd291bGQgY2F1c2UgdW5leHBlY3RlZCBlcnJvcnMuIE1ha2UgZHVwbGljYXRlZCBjb2RlIGluCisgIGRlYnVnZnMvTWFrZWZpbGUuaW4gYW5kIG1pc2MvTWFrZWZpbGUuaW4gaXMgbm90IGEgZ29vZCBpZGVhLCBtYXliZSB3ZSdkCisgIGJldHRlciBkZWZpbmUgQ1JFQVRFX0lOT0RFX0RFUFMgaW4gdGhlIHRvcCBNYWtlZmlsZSwgSSdkIGxpa2UgdG8gc2VuZAorICBhbm90aGVyIHBhdGNoIGFuZCBmaXggdGhlIGUyZnJlZWZyYWcgaWYgeW91IGFyZSBmaW5lIHdpdGggaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBkZWJ1Z2ZzL01ha2VmaWxlLmluIHwgICAxNyArKy0KKyBkZWJ1Z2ZzL2RlYnVnZnMuYyAgIHwgIDMwNSArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkZWJ1Z2ZzL2RlYnVnZnMuaCAgIHwgICAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspLCAyOTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kZWJ1Z2ZzL01ha2VmaWxlLmluIGIvZGVidWdmcy9NYWtlZmlsZS5pbgoraW5kZXggYmYwMzdlMC4uZjUxYjc4ZSAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvTWFrZWZpbGUuaW4KKysrKyBiL2RlYnVnZnMvTWFrZWZpbGUuaW4KK0BAIC0xOCw3ICsxOCw3IEBAIE1LX0NNRFM9CV9TU19ESVJfT1ZFUlJJREU9Li4vbGliL3NzIC4uL2xpYi9zcy9ta19jbWRzCisgCisgREVCVUdfT0JKUz0gZGVidWdfY21kcy5vIGRlYnVnZnMubyB1dGlsLm8gbmNoZWNrLm8gaWNoZWNrLm8gbHMubyBcCisgCWxzZGVsLm8gZHVtcC5vIHNldF9maWVsZHMubyBsb2dkdW1wLm8gaHRyZWUubyB1bnVzZWQubyBlMmZyZWVmcmFnLm8gXAorLQlmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gZXh0ZW50X2lub2RlLm8gemFwLm8KKysJZmlsZWZyYWcubyBleHRlbnRfY21kcy5vIGV4dGVudF9pbm9kZS5vIHphcC5vIGNyZWF0ZV9pbm9kZS5vCisgCisgUk9fREVCVUdfT0JKUz0gcm9fZGVidWdfY21kcy5vIHJvX2RlYnVnZnMubyB1dGlsLm8gbmNoZWNrLm8gaWNoZWNrLm8gbHMubyBcCisgCWxzZGVsLm8gbG9nZHVtcC5vIGh0cmVlLm8gZTJmcmVlZnJhZy5vIGZpbGVmcmFnLm8gZXh0ZW50X2NtZHMubyBcCitAQCAtMjgsNyArMjgsMTMgQEAgU1JDUz0gZGVidWdfY21kcy5jICQoc3JjZGlyKS9kZWJ1Z2ZzLmMgJChzcmNkaXIpL3V0aWwuYyAkKHNyY2RpcikvbHMuYyBcCisgCSQoc3JjZGlyKS9uY2hlY2suYyAkKHNyY2RpcikvaWNoZWNrLmMgJChzcmNkaXIpL2xzZGVsLmMgXAorIAkkKHNyY2RpcikvZHVtcC5jICQoc3JjZGlyKS9zZXRfZmllbGRzLmMgJHtzcmNkaXJ9L2xvZ2R1bXAuYyBcCisgCSQoc3JjZGlyKS9odHJlZS5jICQoc3JjZGlyKS91bnVzZWQuYyAke3NyY2Rpcn0vLi4vbWlzYy9lMmZyZWVmcmFnLmMgXAorLQkkKHNyY2RpcikvZmlsZWZyYWcuYyAkKHNyY2RpcikvZXh0ZW50X2lub2RlLmMgJChzcmNkaXIpL3phcC5jCisrCSQoc3JjZGlyKS9maWxlZnJhZy5jICQoc3JjZGlyKS9leHRlbnRfaW5vZGUuYyAkKHNyY2RpcikvemFwLmMgXAorKwkkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuYworKworK0NSRUFURV9JTk9ERV9ERVBTPSAkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuaCBcCisrCSQoc3JjZGlyKS8uLi9taXNjL2NyZWF0ZV9pbm9kZS5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorKwkkKHNyY2RpcikvLi4vbGliL2V4dDJmcy9leHQyZnMuaCAkKHNyY2RpcikvLi4vbGliL2V0L2NvbV9lcnIuaCBcCisrCSQoc3JjZGlyKS8uLi9saWIvZTJwL2UycC5oICQoc3JjZGlyKS8uLi9taXNjL25scy1lbmFibGUuaAorIAorIExJQlM9ICQoTElCRVhUMkZTKSAkKExJQkUyUCkgJChMSUJTUykgJChMSUJDT01fRVJSKSAkKExJQkJMS0lEKSBcCisgCSQoTElCVVVJRCkKK0BAIC04MSw2ICs4NywxMSBAQCBlMmZyZWVmcmFnLm86ICQoc3JjZGlyKS8uLi9taXNjL2UyZnJlZWZyYWcuYworIAkkKEUpICIJQ0MgJEAiCisgCSQoUSkgJChDQykgLWMgJChBTExfQ0ZMQUdTKSAtSSQoc3JjZGlyKSAkPCAtRERFQlVHRlMgLW8gJEAKKyAKKytjcmVhdGVfaW5vZGUubzogJChDUkVBVEVfSU5PREVfREVQUykKKysJJChFKSAiCUNDICRAIgorKwkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgLUkkKHNyY2RpcikgXAorKwkJICQoc3JjZGlyKS8uLi9taXNjL2NyZWF0ZV9pbm9kZS5jIC1EREVCVUdGUyAtbyAkQAorKworIGRlYnVnZnMuODogJChERVBfU1VCU1RJVFVURSkgJChzcmNkaXIpL2RlYnVnZnMuOC5pbgorIAkkKEUpICIJU1VCU1QgJEAiCisgCSQoUSkgJChTVUJTVElUVVRFX1VQVElNRSkgJChzcmNkaXIpL2RlYnVnZnMuOC5pbiBkZWJ1Z2ZzLjgKK0BAIC0xNDIsNyArMTUzLDcgQEAgZGVidWdmcy5vOiAkKHNyY2RpcikvZGVidWdmcy5jICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2V4dF9hdHRyLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2JpdG9wcy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZTJwL2UycC5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oICQoc3JjZGlyKS9qZnNfdXNlci5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1qYmQuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvamZzX2NvbXBhdC5oIFwKKy0gJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1saXN0LmgKKysgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2tlcm5lbC1saXN0LmggJCh0b3Bfc3JjZGlyKS9taXNjL3V0aWwuaAorIHV0aWwubzogJChzcmNkaXIpL3V0aWwuYyAkKHNyY2RpcikvZGVidWdmcy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZnMuaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX3R5cGVzLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDNfZXh0ZW50cy5oIFwKK2RpZmYgLS1naXQgYS9kZWJ1Z2ZzL2RlYnVnZnMuYyBiL2RlYnVnZnMvZGVidWdmcy5jCitpbmRleCA5YzIxNWY3Li42MmU5ZjQ0IDEwMDY0NAorLS0tIGEvZGVidWdmcy9kZWJ1Z2ZzLmMKKysrKyBiL2RlYnVnZnMvZGVidWdmcy5jCitAQCAtMjUsOCArMjUsNiBAQCBleHRlcm4gY2hhciAqb3B0YXJnOworICNpbmNsdWRlIDxlcnJuby5oPgorICNlbmRpZgorICNpbmNsdWRlIDxmY250bC5oPgorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKyAjaW5jbHVkZSAiZGVidWdmcy5oIgorICNpbmNsdWRlICJ1dWlkL3V1aWQuaCIKK0BAIC00MSwyMiArMzksMTEgQEAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyAjZGVmaW5lIEJVRlNJWiA4MTkyCisgI2VuZGlmCisgCistLyogNjRLaUIgaXMgdGhlIG1pbmltaXVtIGJsa3NpemUgdG8gYmVzdCBtaW5pbWl6ZSBzeXN0ZW0gY2FsbCBvdmVyaGVhZC4gKi8KKy0jaWZuZGVmIElPX0JVRlNJWkUKKy0jZGVmaW5lIElPX0JVRlNJWkUgNjQqMTAyNAorLSNlbmRpZgorLQorLS8qIEJsb2NrIHNpemUgZm9yIGBzdF9ibG9ja3MnICovCistI2lmbmRlZiBTX0JMS1NJWkUKKy0jZGVmaW5lIFNfQkxLU0laRSA1MTIKKy0jZW5kaWYKKy0KKyBzc19yZXF1ZXN0X3RhYmxlICpleHRyYV9jbWRzOworIGNvbnN0IGNoYXIgKmRlYnVnX3Byb2dfbmFtZTsKKyBpbnQgc2NpX2lkeDsKKyAKKy1leHQyX2ZpbHN5cwljdXJyZW50X2ZzID0gTlVMTDsKKy1leHQyX2lub190CXJvb3QsIGN3ZDsKKytleHQyX2lub190CWN3ZDsKKyAKKyBzdGF0aWMgdm9pZCBvcGVuX2ZpbGVzeXN0ZW0oY2hhciAqZGV2aWNlLCBpbnQgb3Blbl9mbGFncywgYmxrNjRfdCBzdXBlcmJsb2NrLAorIAkJCSAgICBibGs2NF90IGJsb2Nrc2l6ZSwgaW50IGNhdGFzdHJvcGhpYywKK0BAIC0xNTc2LDE4OSArMTU2MywyNCBAQCB2b2lkIGRvX2ZpbmRfZnJlZV9pbm9kZShpbnQgYXJnYywgY2hhciAqYXJndltdKQorIH0KKyAKKyAjaWZuZGVmIFJFQURfT05MWQorLXN0YXRpYyBlcnJjb2RlX3QgY29weV9maWxlKGludCBmZCwgZXh0Ml9pbm9fdCBuZXdmaWxlLCBpbnQgYnVmc2l6ZSwgaW50IG1ha2VfaG9sZXMpCisteworLQlleHQyX2ZpbGVfdAllMl9maWxlOworLQllcnJjb2RlX3QJcmV0dmFsOworLQlpbnQJCWdvdDsKKy0JdW5zaWduZWQgaW50CXdyaXR0ZW47CistCWNoYXIJCSpidWY7CistCWNoYXIJCSpwdHI7CistCWNoYXIJCSp6ZXJvX2J1ZjsKKy0JaW50CQljbXA7CistCistCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oY3VycmVudF9mcywgbmV3ZmlsZSwKKy0JCQkJICBFWFQyX0ZJTEVfV1JJVEUsICZlMl9maWxlKTsKKy0JaWYgKHJldHZhbCkKKy0JCXJldHVybiByZXR2YWw7CistCistCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGJ1ZnNpemUsICZidWYpOworLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworLQkJcmV0dXJuIHJldHZhbDsKKy0JfQorLQorLQkvKiBUaGlzIGlzIHVzZWQgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIHdob2xlIGJsb2NrIGlzIHplcm8gKi8KKy0JcmV0dmFsID0gZXh0MmZzX2dldF9tZW16ZXJvKGJ1ZnNpemUsICZ6ZXJvX2J1Zik7CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CistCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CistCQlyZXR1cm4gcmV0dmFsOworLQl9CistCistCXdoaWxlICgxKSB7CistCQlnb3QgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUpOworLQkJaWYgKGdvdCA9PSAwKQorLQkJCWJyZWFrOworLQkJaWYgKGdvdCA8IDApIHsKKy0JCQlyZXR2YWwgPSBlcnJubzsKKy0JCQlnb3RvIGZhaWw7CistCQl9CistCQlwdHIgPSBidWY7CistCistCQkvKiBTcGFyc2UgY29weSAqLworLQkJaWYgKG1ha2VfaG9sZXMpIHsKKy0JCQkvKiBDaGVjayB3aGV0aGVyIGFsbCBpcyB6ZXJvICovCistCQkJY21wID0gbWVtY21wKHB0ciwgemVyb19idWYsIGdvdCk7CistCQkJaWYgKGNtcCA9PSAwKSB7CistCQkJCSAvKiBUaGUgd2hvbGUgYmxvY2sgaXMgemVybywgbWFrZSBhIGhvbGUgKi8KKy0JCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgZ290LCBFWFQyX1NFRUtfQ1VSLCBOVUxMKTsKKy0JCQkJaWYgKHJldHZhbCkKKy0JCQkJCWdvdG8gZmFpbDsKKy0JCQkJZ290ID0gMDsKKy0JCQl9CistCQl9CistCistCQkvKiBOb3JtYWwgY29weSAqLworLQkJd2hpbGUgKGdvdCA+IDApIHsKKy0JCQlyZXR2YWwgPSBleHQyZnNfZmlsZV93cml0ZShlMl9maWxlLCBwdHIsCistCQkJCQkJICAgZ290LCAmd3JpdHRlbik7CistCQkJaWYgKHJldHZhbCkKKy0JCQkJZ290byBmYWlsOworLQorLQkJCWdvdCAtPSB3cml0dGVuOworLQkJCXB0ciArPSB3cml0dGVuOworLQkJfQorLQl9CistCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKy0JZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CistCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworLQlyZXR1cm4gcmV0dmFsOworLQorLWZhaWw6CistCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKy0JZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CistCSh2b2lkKSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKy0JcmV0dXJuIHJldHZhbDsKKy19CistCistCisgdm9pZCBkb193cml0ZShpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKy0JaW50CQlmZDsKKy0Jc3RydWN0IHN0YXQJc3RhdGJ1ZjsKKy0JZXh0Ml9pbm9fdAluZXdmaWxlOworIAllcnJjb2RlX3QJcmV0dmFsOworLQlzdHJ1Y3QgZXh0Ml9pbm9kZSBpbm9kZTsKKy0JaW50CQlidWZzaXplID0gSU9fQlVGU0laRTsKKy0JaW50CQltYWtlX2hvbGVzID0gMDsKKyAKKyAJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgMywgIndyaXRlIiwKKyAJCQkJIjxuYXRpdmUgZmlsZT4gPG5ldyBmaWxlPiIsIENIRUNLX0ZTX1JXKSkKKyAJCXJldHVybjsKKyAKKy0JZmQgPSBvcGVuKGFyZ3ZbMV0sIE9fUkRPTkxZKTsKKy0JaWYgKGZkIDwgMCkgeworLQkJY29tX2Vycihhcmd2WzFdLCBlcnJubywgMCk7CistCQlyZXR1cm47CistCX0KKy0JaWYgKGZzdGF0KGZkLCAmc3RhdGJ1ZikgPCAwKSB7CistCQljb21fZXJyKGFyZ3ZbMV0sIGVycm5vLCAwKTsKKy0JCWNsb3NlKGZkKTsKKy0JCXJldHVybjsKKy0JfQorLQorLQlyZXR2YWwgPSBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgY3dkLCBhcmd2WzJdLCAmbmV3ZmlsZSk7CistCWlmIChyZXR2YWwgPT0gMCkgeworLQkJY29tX2Vycihhcmd2WzBdLCAwLCAiVGhlIGZpbGUgJyVzJyBhbHJlYWR5IGV4aXN0c1xuIiwgYXJndlsyXSk7CistCQljbG9zZShmZCk7CistCQlyZXR1cm47CistCX0KKy0KKy0JcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBjd2QsIDAxMDc1NSwgMCwgJm5ld2ZpbGUpOworLQlpZiAocmV0dmFsKSB7CisrCWlmICgocmV0dmFsID0gZG9fd3JpdGVfaW50ZXJuYWwoY3dkLCBhcmd2WzFdLCBhcmd2WzJdKSkpCisgCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CistCQljbG9zZShmZCk7CistCQlyZXR1cm47CistCX0KKy0JcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBuZXdmaWxlKTsKKy0JcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBhcmd2WzJdLCBuZXdmaWxlLAorLQkJCSAgICAgRVhUMl9GVF9SRUdfRklMRSk7CistCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKy0JCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CistCQlpZiAocmV0dmFsKSB7CistCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CistCQkJY2xvc2UoZmQpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsyXSwgbmV3ZmlsZSwKKy0JCQkJICAgICBFWFQyX0ZUX1JFR19GSUxFKTsKKy0JfQorLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKGFyZ3ZbMl0sIHJldHZhbCwgMCk7CistCQljbG9zZShmZCk7CistCQlyZXR1cm47CistCX0KKy0gICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCxuZXdmaWxlKSkKKy0JCWNvbV9lcnIoYXJndlswXSwgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0Iik7CistCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoY3VycmVudF9mcywgbmV3ZmlsZSwgKzEsIDApOworLQltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKy0JaW5vZGUuaV9tb2RlID0gKHN0YXRidWYuc3RfbW9kZSAmIH5MSU5VWF9TX0lGTVQpIHwgTElOVVhfU19JRlJFRzsKKy0JaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKy0JCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CistCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworLQlpbm9kZS5pX3NpemUgPSBzdGF0YnVmLnN0X3NpemU7CistCWlmIChjdXJyZW50X2ZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYKKy0JICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CistCQlpbnQgaTsKKy0JCXN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKmVoOworLQorLQkJZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSAmaW5vZGUuaV9ibG9ja1swXTsKKy0JCWVoLT5laF9kZXB0aCA9IDA7CistCQllaC0+ZWhfZW50cmllcyA9IDA7CistCQllaC0+ZWhfbWFnaWMgPSBleHQyZnNfY3B1X3RvX2xlMTYoRVhUM19FWFRfTUFHSUMpOworLQkJaSA9IChzaXplb2YoaW5vZGUuaV9ibG9jaykgLSBzaXplb2YoKmVoKSkgLworLQkJCXNpemVvZihzdHJ1Y3QgZXh0M19leHRlbnQpOworLQkJZWgtPmVoX21heCA9IGV4dDJmc19jcHVfdG9fbGUxNihpKTsKKy0JCWlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworLQl9CistCWlmIChkZWJ1Z2ZzX3dyaXRlX25ld19pbm9kZShuZXdmaWxlLCAmaW5vZGUsIGFyZ3ZbMF0pKSB7CistCQljbG9zZShmZCk7CistCQlyZXR1cm47CistCX0KKy0JaWYgKExJTlVYX1NfSVNSRUcoaW5vZGUuaV9tb2RlKSkgeworLQkJaWYgKHN0YXRidWYuc3RfYmxvY2tzIDwgc3RhdGJ1Zi5zdF9zaXplIC8gU19CTEtTSVpFKSB7CistCQkJbWFrZV9ob2xlcyA9IDE7CistCQkJLyoKKy0JCQkgKiBVc2UgSS9PIGJsb2Nrc2l6ZSBhcyBidWZmZXIgc2l6ZSB3aGVuCistCQkJICogY29weWluZyBzcGFyc2UgZmlsZXMuCistCQkJICovCistCQkJYnVmc2l6ZSA9IHN0YXRidWYuc3RfYmxrc2l6ZTsKKy0JCX0KKy0JCXJldHZhbCA9IGNvcHlfZmlsZShmZCwgbmV3ZmlsZSwgYnVmc2l6ZSwgbWFrZV9ob2xlcyk7CistCQlpZiAocmV0dmFsKQorLQkJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgMCk7CistCX0KKy0JY2xvc2UoZmQpOworIH0KKyAKKyB2b2lkIGRvX21rbm9kKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworIAl1bnNpZ25lZCBsb25nCW1vZGUsIG1ham9yLCBtaW5vcjsKKy0JZXh0Ml9pbm9fdAluZXdmaWxlOworIAllcnJjb2RlX3QgCXJldHZhbDsKKy0Jc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CisgCWludAkJZmlsZXR5cGUsIG5yOworKwlzdHJ1Y3Qgc3RhdAlzdDsKKyAKKyAJaWYgKGNoZWNrX2ZzX29wZW4oYXJndlswXSkpCisgCQlyZXR1cm47CitAQCAtMTc2NywxMTUgKzE1ODksNTAgQEAgdm9pZCBkb19ta25vZChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJY29tX2Vycihhcmd2WzBdLCAwLCAiVXNhZ2U6IG1rbm9kIDxuYW1lPiBbcHwgW2N8Yl0gPG1ham9yPiA8bWlub3I+XSIpOworIAkJcmV0dXJuOworIAl9CisrCisgCW1vZGUgPSBtaW5vciA9IG1ham9yID0gMDsKKyAJc3dpdGNoIChhcmd2WzJdWzBdKSB7CisgCQljYXNlICdwJzoKKy0JCQltb2RlID0gTElOVVhfU19JRklGTzsKKy0JCQlmaWxldHlwZSA9IEVYVDJfRlRfRklGTzsKKysJCQlzdC5zdF9tb2RlID0gU19JRklGTzsKKyAJCQluciA9IDM7CisgCQkJYnJlYWs7CisgCQljYXNlICdjJzoKKy0JCQltb2RlID0gTElOVVhfU19JRkNIUjsKKy0JCQlmaWxldHlwZSA9IEVYVDJfRlRfQ0hSREVWOworKwkJCXN0LnN0X21vZGUgPSBTX0lGQ0hSOworIAkJCW5yID0gNTsKKyAJCQlicmVhazsKKyAJCWNhc2UgJ2InOgorLQkJCW1vZGUgPSBMSU5VWF9TX0lGQkxLOworLQkJCWZpbGV0eXBlID0gRVhUMl9GVF9CTEtERVY7CisrCQkJc3Quc3RfbW9kZSA9IFNfSUZCTEs7CisgCQkJbnIgPSA1OworIAkJCWJyZWFrOworIAkJZGVmYXVsdDoKKy0JCQlmaWxldHlwZSA9IDA7CisgCQkJbnIgPSAwOworIAl9CisrCisgCWlmIChuciA9PSA1KSB7CisgCQltYWpvciA9IHN0cnRvdWwoYXJndlszXSwgYXJndiszLCAwKTsKKyAJCW1pbm9yID0gc3RydG91bChhcmd2WzRdLCBhcmd2KzQsIDApOworIAkJaWYgKG1ham9yID4gNjU1MzUgfHwgbWlub3IgPiA2NTUzNSB8fCBhcmd2WzNdWzBdIHx8IGFyZ3ZbNF1bMF0pCisgCQkJbnIgPSAwOworIAl9CisrCisgCWlmIChhcmdjICE9IG5yKQorIAkJZ290byB1c2FnZTsKKy0JaWYgKGNoZWNrX2ZzX3JlYWRfd3JpdGUoYXJndlswXSkpCistCQlyZXR1cm47CistCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKy0JaWYgKHJldHZhbCkgeworKworKwlzdC5zdF9yZGV2ID0gbWFrZWRldihtYWpvciwgbWlub3IpOworKwlpZiAoKHJldHZhbCA9IGRvX21rbm9kX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgJnN0KSkpCisgCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKy0JcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBuZXdmaWxlKTsKKy0JcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBhcmd2WzFdLCBuZXdmaWxlLCBmaWxldHlwZSk7CistCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKy0JCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIGN3ZCk7CistCQlpZiAocmV0dmFsKSB7CistCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CistCQkJcmV0dXJuOworLQkJfQorLQkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBhcmd2WzFdLCBuZXdmaWxlLAorLQkJCQkgICAgIGZpbGV0eXBlKTsKKy0JfQorLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKGFyZ3ZbMV0sIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKy0gICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCxuZXdmaWxlKSkKKy0JCWNvbV9lcnIoYXJndlswXSwgMCwgIldhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0Iik7CistCWV4dDJmc19pbm9kZV9hbGxvY19zdGF0czIoY3VycmVudF9mcywgbmV3ZmlsZSwgKzEsIDApOworLQltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKy0JaW5vZGUuaV9tb2RlID0gbW9kZTsKKy0JaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKy0JCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CistCWlmICgobWFqb3IgPCAyNTYpICYmIChtaW5vciA8IDI1NikpIHsKKy0JCWlub2RlLmlfYmxvY2tbMF0gPSBtYWpvcioyNTYrbWlub3I7CistCQlpbm9kZS5pX2Jsb2NrWzFdID0gMDsKKy0JfSBlbHNlIHsKKy0JCWlub2RlLmlfYmxvY2tbMF0gPSAwOworLQkJaW5vZGUuaV9ibG9ja1sxXSA9IChtaW5vciAmIDB4ZmYpIHwgKG1ham9yIDw8IDgpIHwgKChtaW5vciAmIH4weGZmKSA8PCAxMik7CistCX0KKy0JaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CistCWlmIChkZWJ1Z2ZzX3dyaXRlX25ld19pbm9kZShuZXdmaWxlLCAmaW5vZGUsIGFyZ3ZbMF0pKQorLQkJcmV0dXJuOworIH0KKyAKKyB2b2lkIGRvX21rZGlyKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworLQljaGFyCSpjcDsKKy0JZXh0Ml9pbm9fdAlwYXJlbnQ7CistCWNoYXIJKm5hbWU7CisgCWVycmNvZGVfdCByZXR2YWw7CisgCisgCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDIsIDIsICJta2RpciIsCisgCQkJCSI8ZmlsZW5hbWU+IiwgQ0hFQ0tfRlNfUlcpKQorIAkJcmV0dXJuOworIAorLQljcCA9IHN0cnJjaHIoYXJndlsxXSwgJy8nKTsKKy0JaWYgKGNwKSB7CistCQkqY3AgPSAwOworLQkJcGFyZW50ID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworLQkJaWYgKCFwYXJlbnQpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMV0sIEVOT0VOVCwgMCk7CistCQkJcmV0dXJuOworLQkJfQorLQkJbmFtZSA9IGNwKzE7CistCX0gZWxzZSB7CistCQlwYXJlbnQgPSBjd2Q7CistCQluYW1lID0gYXJndlsxXTsKKy0JfQorLQorLXRyeV9hZ2FpbjoKKy0JcmV0dmFsID0gZXh0MmZzX21rZGlyKGN1cnJlbnRfZnMsIHBhcmVudCwgMCwgbmFtZSk7CistCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKy0JCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudCk7CistCQlpZiAocmV0dmFsKSB7CistCQkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsICJ3aGlsZSBleHBhbmRpbmcgZGlyZWN0b3J5Iik7CistCQkJcmV0dXJuOworLQkJfQorLQkJZ290byB0cnlfYWdhaW47CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiZXh0MmZzX21rZGlyIiwgcmV0dmFsLCAwKTsKKy0JCXJldHVybjsKKy0JfQorKwlpZiAoKHJldHZhbCA9IGRvX21rZGlyX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgTlVMTCkpKQorKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworIAorIH0KKyAKK0BAIC0yMjcwLDQ0ICsyMDI3LDE0IEBAIHZvaWQgZG9fcHVuY2goaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAKKyB2b2lkIGRvX3N5bWxpbmsoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CistCWNoYXIJCSpjcDsKKy0JZXh0Ml9pbm9fdAlwYXJlbnQ7CistCWNoYXIJCSpuYW1lLCAqdGFyZ2V0OworIAllcnJjb2RlX3QJcmV0dmFsOworIAorIAlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAzLCAzLCAic3ltbGluayIsCisgCQkJCSI8ZmlsZW5hbWU+IDx0YXJnZXQ+IiwgQ0hFQ0tfRlNfUlcpKQorIAkJcmV0dXJuOworIAorLQljcCA9IHN0cnJjaHIoYXJndlsxXSwgJy8nKTsKKy0JaWYgKGNwKSB7CistCQkqY3AgPSAwOworLQkJcGFyZW50ID0gc3RyaW5nX3RvX2lub2RlKGFyZ3ZbMV0pOworLQkJaWYgKCFwYXJlbnQpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMV0sIEVOT0VOVCwgMCk7CistCQkJcmV0dXJuOworLQkJfQorLQkJbmFtZSA9IGNwKzE7CistCX0gZWxzZSB7CistCQlwYXJlbnQgPSBjd2Q7CistCQluYW1lID0gYXJndlsxXTsKKy0JfQorLQl0YXJnZXQgPSBhcmd2WzJdOworLQorLXRyeV9hZ2FpbjoKKy0JcmV0dmFsID0gZXh0MmZzX3N5bWxpbmsoY3VycmVudF9mcywgcGFyZW50LCAwLCBuYW1lLCB0YXJnZXQpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnQpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCWdvdG8gdHJ5X2FnYWluOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoImV4dDJmc19zeW1saW5rIiwgcmV0dmFsLCAwKTsKKy0JCXJldHVybjsKKy0JfQorKwlpZiAoKHJldHZhbCA9IGRvX3N5bWxpbmtfaW50ZXJuYWwoY3dkLCBhcmd2WzFdLCBhcmd2WzJdKSkpCisrCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgMCk7CisgCisgfQorIAorZGlmZiAtLWdpdCBhL2RlYnVnZnMvZGVidWdmcy5oIGIvZGVidWdmcy9kZWJ1Z2ZzLmgKK2luZGV4IDZiNGY2ZWYuLjJkNDY0YzEgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL2RlYnVnZnMuaAorKysrIGIvZGVidWdmcy9kZWJ1Z2ZzLmgKK0BAIC01LDYgKzUsNyBAQAorICNpbmNsdWRlICJzcy9zcy5oIgorICNpbmNsdWRlICJleHQyZnMvZXh0Ml9mcy5oIgorICNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisrI2luY2x1ZGUgIi4uL21pc2MvY3JlYXRlX2lub2RlLmgiCisgCisgI2lmZGVmIF9fU1REQ19fCisgI2RlZmluZSBOT0FSR1Mgdm9pZAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTEtbWtlMmZzLjguaW4tdXBkYXRlLXRoZS1tYW51YWwtZm9yLXRoZS1kLW9wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDJjYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTEtbWtlMmZzLjguaW4tdXBkYXRlLXRoZS1tYW51YWwtZm9yLXRoZS1kLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDg5ZmNhNDM5ZjFiNTg1OTVmMmY0MjQ1OThhMjc4NjlmOGM3YmQ4MTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDQ6NDM6MTggLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8xMV0gbWtlMmZzLjguaW46IHVwZGF0ZSB0aGUgbWFudWFsIGZvciB0aGUgLWQgb3B0aW9uCisKK1VwZGF0ZSB0aGUgbWFudWFsIGZvciB0aGUgLWQgb3B0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL21rZTJmcy44LmluIHwgICAgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuOC5pbiBiL21pc2MvbWtlMmZzLjguaW4KK2luZGV4IGZlYTUwZGEuLmIxY2E0ODYgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy44LmluCisrKysgYi9taXNjL21rZTJmcy44LmluCitAQCAtNTIsNiArNTIsMTAgQEAgbWtlMmZzIFwtIGNyZWF0ZSBhbiBleHQyL2V4dDMvZXh0NCBmaWxlc3lzdGVtCisgLkkgbnVtYmVyLW9mLWlub2RlcworIF0KKyBbCisrLkIgXC1kCisrLkkgcm9vdC1kaXJlY3RvcnkKKytdCisrWworIC5CIFwtbgorIF0KKyBbCitAQCAtNTAyLDYgKzUwNiw5IEBAIHRoZQorIHJhdGlvKS4gIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgdGhlIG51bWJlcgorIG9mIGRlc2lyZWQgaW5vZGVzIGRpcmVjdGx5LgorIC5UUAorKy5CSSBcLWQgIiByb290LWRpcmVjdG9yeSIKKytBZGQgdGhlIGZpbGVzIGZyb20gdGhlIHJvb3QtZGlyZWN0b3J5IHRvIHRoZSBmaWxlc3lzdGVtLgorKy5UUAorIC5CSSBcLW8gIiBjcmVhdG9yLW9zIgorIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgImNyZWF0b3Igb3BlcmF0aW5nIHN5c3RlbSIgZmllbGQgb2YgdGhlCisgZmlsZXN5c3RlbS4gIFRoZSBjcmVhdG9yIGZpZWxkIGlzIHNldCBieSBkZWZhdWx0IHRvIHRoZSBuYW1lIG9mIHRoZSBPUyB0aGUKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODAwOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBjNmZmN2ZlYjkwMzhkNmU4YWFmZmUyZTY5YjIwNWFkNWZhMzNkZjJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KK0RhdGU6IE1vbiwgMTggQXVnIDIwMTQgMjE6MDI6NTYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IG11c2wgYnVpbGQgZmFpbHVyZXMKKworSW4gbGliL2V4dDJmcy91bml4X2lvLmMsIF9fdTY0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgX191aW50NjRfdC4gVGhpcyB0eXBlCitpcyBndWFyYW50ZWVkIGJ5IHRoZSBlMmZzcHJvZ3MgYnVpbGQgc3lzdGVtLgorKDc5NWMwMmRlZjM2ODFhOTljYzc5MmE1ZWJjMTYyZDA2ZjhhMWVlYjcpCisKK0luIG1pc2MvY3JlYXRlX2lub2RlLmMsIDxsaW1pdHMuaD4gaXMgbmVlZGVkIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBQQVRIX01BWC4KKyhiYmNjYzZmM2M2YTEwNjcyMWZiNmYxZWY0ZGY2YmMzMmM3OTg2MjM1KQorCitCb3RoIG9mIHRoZXNlIGZpeGVzIGhhdmUgYmVlbiBtYWRlIHVwc3RyZWFtIHdpdGggdGhlIGdpdCBjb21taXQgSURzIGdpdmVuIGJ1dAordGhvc2UgYXJlIGxhcmdlciBjb21taXRzIGNvbnRhaW5pbmcgb3RoZXIgY2hhbmdlcyBub3QgbmVlZGVkIGhlcmUuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGxpYi9leHQyZnMvdW5peF9pby5jIHwgNiArKystLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jICB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy91bml4X2lvLmMgYi9saWIvZXh0MmZzL3VuaXhfaW8uYworaW5kZXggMTliZTYzMC4uMGNjMGY1MiAxMDA2NDQKKy0tLSBhL2xpYi9leHQyZnMvdW5peF9pby5jCisrKysgYi9saWIvZXh0MmZzL3VuaXhfaW8uYworQEAgLTkzMSwxMCArOTMxLDEwIEBAIHN0YXRpYyBlcnJjb2RlX3QgdW5peF9kaXNjYXJkKGlvX2NoYW5uZWwgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrLAorIAorIAlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBDSEFOTkVMX0ZMQUdTX0JMT0NLX0RFVklDRSkgeworICNpZmRlZiBCTEtESVNDQVJECistCQlfX3VpbnQ2NF90IHJhbmdlWzJdOworKwkJX191NjQgcmFuZ2VbMl07CisgCistCQlyYW5nZVswXSA9IChfX3VpbnQ2NF90KShibG9jaykgKiBjaGFubmVsLT5ibG9ja19zaXplOworLQkJcmFuZ2VbMV0gPSAoX191aW50NjRfdCkoY291bnQpICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKysJCXJhbmdlWzBdID0gKF9fdTY0KShibG9jaykgKiBjaGFubmVsLT5ibG9ja19zaXplOworKwkJcmFuZ2VbMV0gPSAoX191NjQpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisgCisgCQlyZXQgPSBpb2N0bChkYXRhLT5kZXYsIEJMS0RJU0NBUkQsICZyYW5nZSk7CisgI2Vsc2UKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNmQ4ZGUwNC4uZmNlYzVhYSAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xLDQgKzEsNSBAQAorICNpbmNsdWRlICJjcmVhdGVfaW5vZGUuaCIKKysjaW5jbHVkZSA8bGltaXRzLmg+CisgCisgI2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMCisgIyBpZiBfX0dOVUNfXyA+PSAyCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU2N2M5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb20gZjY2ZTZjZTQ0NDY3MzhjMmM3ZjQzZDQxOTg4YTNlYjczMzQ3ZTJmNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitEYXRlOiBTYXQsIDkgQXVnIDIwMTQgMTI6MjQ6NTQgLTA0MDAKK1N1YmplY3Q6IGxpYmV4dDJmczogYXZvaWQgYnVmZmVyIG92ZXJmbG93IGlmIHNfZmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnCisKK0lmIHNfZmlyc3RfbWV0YV9iZyBpcyBncmVhdGVyIHRoYW4gdGhlIG9mIG51bWJlciBibG9jayBncm91cAorZGVzY3JpcHRvciBibG9ja3MsIHRoZW4gcmVhZGluZyBvciB3cml0aW5nIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycword2lsbCBlbmQgdXAgb3ZlcnJ1bmluZyB0aGUgbWVtb3J5IGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHRoZQorZGVzY3JpcHRvcnMuICBGaXggdGhpcyBieSBsaW1pdGluZyBmaXJzdF9tZXRhX2JnIHRvIG5vIG1vcmUgdGhhbgorZnMtPmRlc2NfYmxvY2tzLiAgVGhpcyBkb2Vzbid0IGNvcnJlY3QgdGhlIGJhZCBzX2ZpcnN0X21ldGFfYmcgdmFsdWUsCitidXQgaXQgYXZvaWRzIGNhdXNpbmcgdGhlIGUyZnNwcm9ncyB1c2Vyc3BhY2UgcHJvZ3JhbXMgZnJvbQorcG90ZW50aWFsbHkgY3Jhc2hpbmcuCisKK0ZpeGVzIENWRS0yMDE1LTAyNDcKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK1NpZ25lZC1vZmYtYnk6IFNvbmEgU2FybWFkaSA8c29uYS5zYXJtYWRpQGVuZWEuY29tPgorCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9jbG9zZWZzLmMgYi9saWIvZXh0MmZzL2Nsb3NlZnMuYworaW5kZXggNDU5OWVlZi4uMWY5OTExMyAxMDA2NDQKKy0tLSBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jCisrKysgYi9saWIvZXh0MmZzL2Nsb3NlZnMuYworQEAgLTM0NCw5ICszNDQsMTEgQEAgZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKKyAJICogc3VwZXJibG9ja3MgYW5kIGdyb3VwIGRlc2NyaXB0b3JzLgorIAkgKi8KKyAJZ3JvdXBfcHRyID0gKGNoYXIgKikgZ3JvdXBfc2hhZG93OworLQlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKysJaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHsKKyAJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworLQllbHNlCisrCQlpZiAob2xkX2Rlc2NfYmxvY2tzID4gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmcpCisrCQkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworKwl9IGVsc2UKKyAJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKyAKKyAJZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3NfaW5pdChmcywgJnByb2dyZXNzLCBOVUxMLAorZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvb3BlbmZzLmMgYi9saWIvZXh0MmZzL29wZW5mcy5jCitpbmRleCBhMWEzNTE3Li5iYTUwMWU2IDEwMDY0NAorLS0tIGEvbGliL2V4dDJmcy9vcGVuZnMuYworKysrIGIvbGliL2V4dDJmcy9vcGVuZnMuYworQEAgLTM3OCw5ICszNzgsMTEgQEAgZXJyY29kZV90IGV4dDJmc19vcGVuMihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICppb19vcHRpb25zLAorICNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAJZ3JvdXBzX3Blcl9ibG9jayA9IEVYVDJfREVTQ19QRVJfQkxPQ0soZnMtPnN1cGVyKTsKKyAjZW5kaWYKKy0JaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisrCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisgCQlmaXJzdF9tZXRhX2JnID0gZnMtPnN1cGVyLT5zX2ZpcnN0X21ldGFfYmc7CistCWVsc2UKKysJCWlmIChmaXJzdF9tZXRhX2JnID4gZnMtPmRlc2NfYmxvY2tzKQorKwkJCWZpcnN0X21ldGFfYmcgPSBmcy0+ZGVzY19ibG9ja3M7CisrCX0gZWxzZQorIAkJZmlyc3RfbWV0YV9iZyA9IGZzLT5kZXNjX2Jsb2NrczsKKyAJaWYgKGZpcnN0X21ldGFfYmcpIHsKKyAJCXJldHZhbCA9IGlvX2NoYW5uZWxfcmVhZF9ibGsoZnMtPmlvLCBncm91cF9ibG9jayArCistLSAKK2NnaXQgdjAuMTAuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYmQ3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDEzNSBAQAorIyBFeHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzIHNoaXBwZWQgYWNsb2NhbC5tNC4gQ3VzdG9tIG1hY3JvcyBzaG91bGQgYmUgaW4KKyMgYWNpbmNsdWRlLm00IHNvIHJ1bm5pbmcgYWNsb2NhbCBkb2Vzbid0IGJsb3cgdGhlbSBhd2F5LgorIworIyBTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCisjIGZyb20gaHR0cDovL2F1dG9jb25mLWFyY2hpdmUuY3J5cC50by9heF90bHMuaHRtbAorIworIyBUaGlzIHdhcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0CisjIG93bmVyIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUKKyMgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcKKyMgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2Ugd2hlbiB1c2luZyBvciBkaXN0cmlidXRpbmcgc3VjaCBzY3JpcHRzLCBldmVuIHRob3VnaAorIyBwb3J0aW9ucyBvZiB0aGUgdGV4dCBvZiB0aGUgTWFjcm8gYXBwZWFyIGluIHRoZW0uIFRoZSBHTlUgR2VuZXJhbAorIyBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybiBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0CisjIGNvbnN0aXR1dGVzIHRoZSBBdXRvY29uZiBNYWNyby4KKyMKKyMgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIGFwcGxpZXMgdG8gdmVyc2lvbnMgb2YgdGhlCisjIEF1dG9jb25mIE1hY3JvIHJlbGVhc2VkIGJ5IHRoZSBBdXRvY29uZiBNYWNybyBBcmNoaXZlLiBXaGVuIHlvdSBtYWtlCisjIGFuZCBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQXV0b2NvbmYgTWFjcm8sIHlvdSBtYXkKKyMgZXh0ZW5kIHRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCB0byBhcHBseSB0byB5b3VyIG1vZGlmaWVkCisjIHZlcnNpb24gYXMgd2VsbC4KKyMKK0FDX0RFRlVOKFtBWF9UTFNdLCBbCisgIEFDX01TR19DSEVDS0lORyhmb3IgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykgY2xhc3MpCisgIEFDX0NBQ0hFX1ZBTChhY19jdl90bHMsIFsKKyAgICBheF90bHNfa2V5d29yZHM9Il9fdGhyZWFkIF9fZGVjbHNwZWModGhyZWFkKSBub25lIgorICAgIGZvciBheF90bHNfa2V5d29yZCBpbiAkYXhfdGxzX2tleXdvcmRzOyBkbworICAgICAgIGNhc2UgJGF4X3Rsc19rZXl3b3JkIGluCisgICAgICAgICAgbm9uZSkgYWNfY3ZfdGxzPW5vbmUgOyBicmVhayA7OworICAgICAgICAgICopCisgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoCisgICAgICAgICAgICAgICAgWyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgICAgICAgICAgZm9vKHZvaWQpIHsKKyAgICAgICAgICAgICAgICAgc3RhdGljIF0gJGF4X3Rsc19rZXl3b3JkIFsgaW50IGJhcjsKKyAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgICAgICBbYWNfY3ZfdGxzPSRheF90bHNfa2V5d29yZCA7IGJyZWFrXSwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfdGxzPW5vbmUKKyAgICAgICAgICAgICApCisgICAgICAgICAgZXNhYworICAgIGRvbmUKK10pCisKKyAgaWYgdGVzdCAiJGFjX2N2X3RscyIgIT0gIm5vbmUiOyB0aGVuCisgICAgZG5sIEFDX0RFRklORShbVExTXSwgW10sIFtJZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYSBUTFMgc3RvcmFnZSBjbGFzcyBkZWZpbmUgaXQgdG8gdGhhdCBoZXJlXSkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1RMU10sICRhY19jdl90bHMsIFtJZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgYSBUTFMgc3RvcmFnZSBjbGFzcyBkZWZpbmUgaXQgdG8gdGhhdCBoZXJlXSkKKyAgZmkKKyAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfdGxzKQorXSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICAgICAgICBodHRwOi8vd3d3Lm5vbmdudS5vcmcvYXV0b2NvbmYtYXJjaGl2ZS9jaGVja19nbnVfbWFrZS5odG1sCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBTWU5PUFNJUworIworIyAgIENIRUNLX0dOVV9NQUtFKCkKKyMKKyMgREVTQ1JJUFRJT04KKyMKKyMgICBUaGlzIG1hY3JvIHNlYXJjaGVzIGZvciBhIEdOVSB2ZXJzaW9uIG9mIG1ha2UuIElmIGEgbWF0Y2ggaXMgZm91bmQsIHRoZQorIyAgIG1ha2VmaWxlIHZhcmlhYmxlIGBpZkdOVW1ha2UnIGlzIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nLCBvdGhlcndpc2UgaXQKKyMgICBpcyBzZXQgdG8gIiMiLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW5jbHVkaW5nIGEgc3BlY2lhbCBmZWF0dXJlcyBpbiBhCisjICAgTWFrZWZpbGUsIHdoaWNoIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IG90aGVyIHZlcnNpb25zIG9mIG1ha2UuIFRoZQorIyAgIHZhcmlhYmxlIF9jdl9nbnVfbWFrZV9jb21tYW5kIGlzIHNldCB0byB0aGUgY29tbWFuZCB0byBpbnZva2UgR05VIG1ha2UKKyMgICBpZiBpdCBleGlzdHMsIHRoZSBlbXB0eSBzdHJpbmcgb3RoZXJ3aXNlLgorIworIyAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBpdHMgdXNlOgorIworIyAgIE1ha2VmaWxlLmluIG1pZ2h0IGNvbnRhaW46CisjCisjICAgICAgICMgQSBmYWlsc2FmZSB3YXkgb2YgcHV0dGluZyBhIGRlcGVuZGVuY3kgcnVsZSBpbnRvIGEgbWFrZWZpbGUKKyMgICAgICAgJChERVBFTkQpOgorIyAgICAgICAgICAgICAgICQoQ0MpIC1NTSAkKHNyY2RpcikvKi5jID4gJChERVBFTkQpCisjCisjICAgICAgIEBpZkdOVW1ha2VAIGlmZXEgKCQoREVQRU5EKSwkKHdpbGRjYXJkICQoREVQRU5EKSkpCisjICAgICAgIEBpZkdOVW1ha2VAIGluY2x1ZGUgJChERVBFTkQpCisjICAgICAgIEBpZkdOVW1ha2VAIGVuZGlmCisjCisjICAgVGhlbiBjb25maWd1cmUuaW4gd291bGQgbm9ybWFsbHkgY29udGFpbjoKKyMKKyMgICAgICAgQ0hFQ0tfR05VX01BS0UoKQorIyAgICAgICBBQ19PVVRQVVQoTWFrZWZpbGUpCisjCisjICAgVGhlbiBwZXJoYXBzIHRvIGNhdXNlIGdudSBtYWtlIHRvIG92ZXJyaWRlIGFueSBvdGhlciBtYWtlLCB3ZSBjb3VsZCBkbworIyAgIHNvbWV0aGluZyBsaWtlIHRoaXMgKG5vdGUgdGhhdCBHTlUgbWFrZSBhbHdheXMgbG9va3MgZm9yIEdOVW1ha2VmaWxlCisjICAgZmlyc3QpOgorIworIyAgICAgICBpZiAgISB0ZXN0IHgkX2N2X2dudV9tYWtlX2NvbW1hbmQgPSB4IDsgdGhlbgorIyAgICAgICAgICAgICAgIG12IE1ha2VmaWxlIEdOVW1ha2VmaWxlCisjICAgICAgICAgICAgICAgZWNobyAuREVGQVVMVDogPiBNYWtlZmlsZSA7CisjICAgICAgICAgICAgICAgZWNobyBcICAkX2N2X2dudV9tYWtlX2NvbW1hbmQgXCRAID4+IE1ha2VmaWxlOworIyAgICAgICBmaQorIworIyAgIFRoZW4sIGlmIGFueSAod2VsbCBhbG1vc3QgYW55KSBvdGhlciBtYWtlIGlzIGNhbGxlZCwgYW5kIEdOVSBtYWtlIGFsc28KKyMgICBleGlzdHMsIHRoZW4gdGhlIG90aGVyIG1ha2Ugd3JhcHMgdGhlIEdOVSBtYWtlLgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA4IEpvaG4gRGFycmluZ3RvbiA8ai5kYXJyaW5ndG9uQGVsdmlzLm11cmRvY2guZWR1LmF1PgorIworIyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQorIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLgorIworIyBOb3RlOiBNb2RpZmllZCBieSBUZWQgVHMnbyB0byBhZGQgQGlmTm90R05VTWFrZUAKKworQUNfREVGVU4oCisgICAgICAgIFtDSEVDS19HTlVfTUFLRV0sIFsgQUNfQ0FDSEVfQ0hFQ0soIGZvciBHTlUgbWFrZSxfY3ZfZ251X21ha2VfY29tbWFuZCwKKyAgICAgICAgICAgICAgICBfY3ZfZ251X21ha2VfY29tbWFuZD0nJyA7CitkbmwgU2VhcmNoIGFsbCB0aGUgY29tbW9uIG5hbWVzIGZvciBHTlUgbWFrZQorICAgICAgICAgICAgICAgIGZvciBhIGluICIkTUFLRSIgbWFrZSBnbWFrZSBnbnVtYWtlIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRhIiA7IHRoZW4gY29udGludWUgOyBmaSA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAgKCBzaCAtYyAiJGEgLS12ZXJzaW9uIiAyPiAvZGV2L251bGwgfCBncmVwIEdOVSAgMj4mMSA+IC9kZXYvbnVsbCApIDsgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JGEgOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZSA7CisgICAgICAgICkgOworZG5sIElmIHRoZXJlIHdhcyBhIEdOVSB2ZXJzaW9uLCB0aGVuIHNldCBAaWZHTlVtYWtlQCB0byB0aGUgZW1wdHkgc3RyaW5nLCAnIycgb3RoZXJ3aXNlCisgICAgICAgIGlmIHRlc3QgICJ4JF9jdl9nbnVfbWFrZV9jb21tYW5kIiAhPSAieCIgIDsgdGhlbgorICAgICAgICAgICAgICAgIGlmR05VbWFrZT0nJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScjJyA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JyMnIDsKKyAgICAgICAgICAgICAgICBpZk5vdEdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoIk5vdCBmb3VuZCIpOworICAgICAgICBmaQorICAgICAgICBBQ19TVUJTVChpZkdOVW1ha2UpCisgICAgICAgIEFDX1NVQlNUKGlmTm90R05VbWFrZSkKK10gKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9jYWNoZV9pbm9kZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvY2FjaGVfaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvY2FjaGVfaW5vZGUucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorVGhlIGNvbW1lbnQgdG8gdGhpcyBmdW5jdGlvbiBzYXlzOgorCisiIiIKKyAgKiBTdHVwaWQgYWxnb3JpdGhtIC0tLSB3ZSBub3cganVzdCBzZWFyY2ggZm9yd2FyZCBzdGFydGluZyBmcm9tIHRoZQorICAqIGdvYWwuICBTaG91bGQgcHV0IGluIGEgc21hcnRlciBvbmUgc29tZWRheS4uLi4KKyIiIgorCitUaGlzIGFkZHMgaW4gYSByYXRoZXIgaGFja3kgYWxnb3J0aGltIHdoaWNoIHN0YXJ0cyB3aGVyZSB3ZSBmaW5pc2hlZAorc2VhcmNoaW5nIHByZXZpb3VzbHkgdXNpbmcgYSBzdGF0aWMgdmFyaWFibGUgcmF0aGVyIHRoYW4gc3RhcnRpbmcgCitmcm9tIHNjcmF0Y2ggaWYgYSBoaW50IGlzbid0IHByb3ZpZGVkLgorCitUaGlzIHdhcyBhZnRlciBub3RpY2luZyB0aGF0IG1rZnMuZXh0NCAtRiBYIC1kIFkgd2FzIHNwZW5kaW5nICpsb3RzKgorb2YgdGltZSBpbiBleHQyZnNfbmV3X2Jsb2NrMiBjYWxsZWQgZnJvbSBleHQyZnNfYm1hcCBmcm9tIGV4dDJmc19maWxlX3dyaXRlKCkuCisKK051bWJlcnMgd2lzZSwgdGhpcyB0b29rIGEgY29yZS1pbWFnZS1zYXRvLXNkayBta2ZzIHRpbWUgZnJvbSBvdmVyIAorOCBtaW51dGVzIHRvIGFyb3VuZCAzNSBzZWNvbmRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxNS8wMi8yMAorCitJbmRleDogZTJmc3Byb2dzLTEuNDIuOS9saWIvZXh0MmZzL2FsbG9jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40Mi45Lm9yaWcvbGliL2V4dDJmcy9hbGxvYy5jCisrKysgZTJmc3Byb2dzLTEuNDIuOS9saWIvZXh0MmZzL2FsbG9jLmMKK0BAIC0xNjAsNiArMTYwLDggQEAgZXJyY29kZV90IGV4dDJmc19uZXdfaW5vZGUoZXh0Ml9maWxzeXMgZgorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGJsazY0X3QgbGFzdF9nb2FsID0gMDsKKysKKyAvKgorICAqIFN0dXBpZCBhbGdvcml0aG0gLS0tIHdlIG5vdyBqdXN0IHNlYXJjaCBmb3J3YXJkIHN0YXJ0aW5nIGZyb20gdGhlCisgICogZ29hbC4gIFNob3VsZCBwdXQgaW4gYSBzbWFydGVyIG9uZSBzb21lZGF5Li4uLgorQEAgLTE3MCw2ICsxNzIsOSBAQCBlcnJjb2RlX3QgZXh0MmZzX25ld19ibG9jazIoZXh0Ml9maWxzeXMKKyAJYmxrNjRfdAlpOworIAlpbnQJY19yYXRpbzsKKyAKKysgICAgICAgIGlmICghZ29hbCkKKysgICAgICAgICAgICBnb2FsID0gbGFzdF9nb2FsOworKworIAlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworIAorIAlpZiAoIW1hcCkKK0BAIC0xOTQsNiArMTk5LDcgQEAgZXJyY29kZV90IGV4dDJmc19uZXdfYmxvY2syKGV4dDJfZmlsc3lzCisgCisgCQlpZiAoIWV4dDJmc19mYXN0X3Rlc3RfYmxvY2tfYml0bWFwMihtYXAsIGkpKSB7CisgCQkJKnJldCA9IGk7CisrCQkJbGFzdF9nb2FsID0gaTsKKyAJCQlyZXR1cm4gMDsKKyAJCX0KKyAJCWkgPSAoaSArIGNfcmF0aW8pICYgfihjX3JhdGlvIC0gMSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4Y2M0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaApAQCAtMCwwICsxLDY1IEBACitpbm9kZS5jOiBvbmx5IHVwZGF0ZSB0aGUgaWNhY2hlIGZvciBleHQyX2lub2RlCisKK1dlIG9ubHkgcmVhZCB0aGUgY2FjaGUgd2hlbjoKKworYnVmc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpCisKK3RoZW4gd2Ugc2hvdWxkIG9ubHkgdXBkYXRlIHRoZSBjYWNoZSBpbiB0aGUgc2FtZSBjb25kaXRpb24sIG90aGVyd2lzZQordGhlcmUgd291bGQgYmUgZXJyb3JzLCBmb3IgZXhhbXBsZToKKworY2FjaGVbMF06IGNhY2hlZCBpbm8gMTQgd2hlbiBidWZzaXplID0gMTI4IGJ5IGV4dDJmc193cml0ZV9pbm9kZV9mdWxsKCkKK2NhY2hlWzFdOiBjYWNoZWQgaW5vIDE0IHdoZW4gYnVmc2l6ZSA9IDE1NiBieSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKCkKKworVGhlbiB1cGRhdGUgdGhlIGNhY2hlOgorY2FjaGVbMF06IGNhY2hlZCBpbm8gMTUgd2hlbiBidWZzaXplID0gMTU2IGJ5IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoKQorCitUaGVuIHRoZSBpbm8gMTQgd291bGQgaGl0IHRoZSBjYWNoZVsxXSB3aGVuIGJ1ZnNpemUgPSAxMjggKGJ1dCBpdCB3YXMKK2NhY2hlZCBieSBidWZzaXplID0gMTU2KSwgc28gdGhlcmUgd291bGQgYmUgZXJyb3JzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9leHQyZnMvaW5vZGUuYyB8IDIwICsrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL2lub2RlLmMgYi9saWIvZXh0MmZzL2lub2RlLmMKKy0tLSBhL2xpYi9leHQyZnMvaW5vZGUuYworKysrIGIvbGliL2V4dDJmcy9pbm9kZS5jCitAQCAtNjEyLDEwICs2MTIsMTIgQEAgZXJyY29kZV90IGV4dDJmc19yZWFkX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorICNlbmRpZgorIAorIAkvKiBVcGRhdGUgdGhlIGlub2RlIGNhY2hlICovCistCWZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgPSAoZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCArIDEpICUKKy0JCWZzLT5pY2FjaGUtPmNhY2hlX3NpemU7CistCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlubyA9IGlubzsKKy0JZnMtPmljYWNoZS0+Y2FjaGVbZnMtPmljYWNoZS0+Y2FjaGVfbGFzdF0uaW5vZGUgPSAqaW5vZGU7CisrCWlmIChidWZzaXplID09IHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZSkpIHsKKysJCWZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgPSAoZnMtPmljYWNoZS0+Y2FjaGVfbGFzdCArIDEpICUKKysJCQlmcy0+aWNhY2hlLT5jYWNoZV9zaXplOworKwkJZnMtPmljYWNoZS0+Y2FjaGVbZnMtPmljYWNoZS0+Y2FjaGVfbGFzdF0uaW5vID0gaW5vOworKwkJZnMtPmljYWNoZS0+Y2FjaGVbZnMtPmljYWNoZS0+Y2FjaGVfbGFzdF0uaW5vZGUgPSAqaW5vZGU7CisrCX0KKyAKKyAJcmV0dXJuIDA7CisgfQorQEAgLTY0OCwxMCArNjUwLDEyIEBAIGVycmNvZGVfdCBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbChleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBpbm8sCisgCisgCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgaW5vZGUgY2FjaGUgbmVlZHMgdG8gYmUgdXBkYXRlZCAqLworIAlpZiAoZnMtPmljYWNoZSkgeworLQkJZm9yIChpPTA7IGkgPCBmcy0+aWNhY2hlLT5jYWNoZV9zaXplOyBpKyspIHsKKy0JCQlpZiAoZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vID09IGlubykgeworLQkJCQlmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm9kZSA9ICppbm9kZTsKKy0JCQkJYnJlYWs7CisrCQlpZiAoYnVmc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKSB7CisrCQkJZm9yIChpPTA7IGkgPCBmcy0+aWNhY2hlLT5jYWNoZV9zaXplOyBpKyspIHsKKysJCQkJaWYgKGZzLT5pY2FjaGUtPmNhY2hlW2ldLmlubyA9PSBpbm8pIHsKKysJCQkJCWZzLT5pY2FjaGUtPmNhY2hlW2ldLmlub2RlID0gKmlub2RlOworKwkJCQkJYnJlYWs7CisrCQkJCX0KKyAJCQl9CisgCQl9CisgCX0gZWxzZSB7CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9taXNjLW1rZTJmcy5jLXJldHVybi1lcnJvci13aGVuLWZhaWxlZC10by1wb3B1bGF0ZS1mcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWlzYy1ta2UyZnMuYy1yZXR1cm4tZXJyb3Itd2hlbi1mYWlsZWQtdG8tcG9wdWxhdGUtZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMGNlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWlzYy1ta2UyZnMuYy1yZXR1cm4tZXJyb3Itd2hlbi1mYWlsZWQtdG8tcG9wdWxhdGUtZnMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBlNGZmZDZmZTk3NTg4OGQzMDZiNWY3MDBiYTU0YWYxOGI1OWY2NzU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDIwIE1hciAyMDE0IDExOjEwOjIxICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIG1pc2MvbWtlMmZzLmM6IHJldHVybiBlcnJvciB3aGVuIGZhaWxlZCB0byBwb3B1bGF0ZSBmaWxlc3lzdGVtCisKK1dlIG5lZWQgcmV0dXJuIHJldHZhbCB3aGVuICJta2UyZnMgLWQiIGZhaWxlZCwgb3RoZXJ3aXNlIHRoZSAiJD8iIHdvdWxkCitiZSAwIHdoaWNoIGlzIG1pc2xlYWRpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbWlzYy9ta2UyZnMuYyB8IDcgKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9taXNjL21rZTJmcy5jIGIvbWlzYy9ta2UyZnMuYworaW5kZXggYTYzZjBiNy4uODQ2MTkwZSAxMDA2NDQKKy0tLSBhL21pc2MvbWtlMmZzLmMKKysrKyBiL21pc2MvbWtlMmZzLmMKK0BAIC0yNzQ1LDEwICsyNzQ1LDExIEBAIG5vX2pvdXJuYWw6CisgCQljdXJyZW50X2ZzID0gZnM7CisgCQlyb290ID0gRVhUMl9ST09UX0lOTzsKKyAJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKHJvb3QsIHJvb3RfZGlyKTsKKy0JCWlmIChyZXR2YWwpCisrCQlpZiAocmV0dmFsKSB7CisgCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCistCQkJCV8oIlxuRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmaWxlIHN5c3RlbSIpKTsKKy0JCWVsc2UgaWYgKCFxdWlldCkKKysJCQkJXygiXG5FcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZpbGUgc3lzdGVtXG4iKSk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0gZWxzZSBpZiAoIXF1aWV0KQorIAkJCXByaW50ZigiJXMiLCBfKCJkb25lXG4iKSk7CisgCX0KKyAKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21rZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdhMjk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ta2Rpci5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1laSBMZWkgPGxlaS5tZWlAaW50ZWwuY29tPgorCitJbmRleDogZTJmc3Byb2dzLTEuNDEuNS9wby9NYWtlZmlsZS5pbi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQxLjUub3JpZy9wby9NYWtlZmlsZS5pbi5pbgkyMDA5LTAyLTE0IDEzOjQ5OjA4LjAwMDAwMDAwMCArMDAwMAorKysrIGUyZnNwcm9ncy0xLjQxLjUvcG8vTWFrZWZpbGUuaW4uaW4JMjAwOS0wOC0xOSAxNzo1MjozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMCw3ICszMCw3IEBACisgSU5TVEFMTCA9IEBJTlNUQUxMQAorIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisgTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKE1LSU5TVEFMTERJUlMpCisrbWtpbnN0YWxsZGlycyA9ICQoTUtJTlNUQUxMRElSUykKKyAKKyBHTVNHRk1UID0gQEdNU0dGTVRACisgTVNHRk1UID0gQE1TR0ZNVEAKK0luZGV4OiBlMmZzcHJvZ3MtMS40MS41L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQxLjUub3JpZy9jb25maWd1cmUuaW4JMjAwOS0wOC0xOSAxNzo1Mzo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBlMmZzcHJvZ3MtMS40MS41L2NvbmZpZ3VyZS5pbgkyMDA5LTA4LTE5IDE3OjQ4OjM4LjAwMDAwMDAwMCArMDEwMAorQEAgLTk3MCw2ICs5NzAsOCBAQAorIGZpCisgQUNfU1VCU1QoQlVJTERfQ0ZMQUdTKQorIEFDX1NVQlNUKEJVSUxEX0xERkxBR1MpCisrTUtJTlNUQUxMRElSUz0ibWtkaXIgLXAiCisrQUNfU1VCU1QoTUtJTlNUQUxMRElSUykKKyBkbmwKKyBkbmwgTWFrZSBvdXIgb3V0cHV0IGZpbGVzLCBiZWluZyBzdXJlIHRoYXQgd2UgY3JlYXRlIHRoZSBzb21lIG1pc2NlbGxhbmVvdXMgCisgZG5sIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3B0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE1M2U5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9wdGVzdC5wYXRjaApAQCAtMCwwICsxLDY2IEBACitJbmRleDogZTJmc3Byb2dzLTEuNDIuOS90ZXN0cy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQyLjkub3JpZy90ZXN0cy9NYWtlZmlsZS5pbgorKysrIGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvTWFrZWZpbGUuaW4KK0BAIC0xOCw3ICsxOCw3IEBAIHRlc3Rfb25lOiAkKHNyY2RpcikvdGVzdF9vbmUuaW4gTWFrZWZpbGUKKyAJQGVjaG8gIiMhL2Jpbi9zaCIgPiB0ZXN0X29uZQorIEBIVFJFRV9DTVRACUBlY2hvICJIVFJFRT15IiA+PiB0ZXN0X29uZQorIEBRVU9UQV9DTVRACUBlY2hvICJRVU9UQT15IiA+PiB0ZXN0X29uZQorLQlAZWNobyAiU1JDRElSPUBzcmNkaXJAIiA+PiB0ZXN0X29uZQorKwlAZWNobyAiU1JDRElSPS91c3IvbGliL2UyZnNwcm9ncy9wdGVzdC90ZXN0IiA+PiB0ZXN0X29uZQorIAlAZWNobyAiRElGRl9PUFRTPUBVTklfRElGRl9PUFRTQCIgPj4gdGVzdF9vbmUKKyAJQGNhdCAkKHNyY2RpcikvdGVzdF9vbmUuaW4gPj4gdGVzdF9vbmUKKyAJQGNobW9kICt4IHRlc3Rfb25lCitAQCAtMjYsNyArMjYsNyBAQCB0ZXN0X29uZTogJChzcmNkaXIpL3Rlc3Rfb25lLmluIE1ha2VmaWxlCisgdGVzdF9zY3JpcHQ6IHRlc3Rfb25lIHRlc3Rfc2NyaXB0LmluIE1ha2VmaWxlIG1rZTJmcy5jb25mCisgCUBlY2hvICJDcmVhdGluZyB0ZXN0X3NjcmlwdC4uLiIKKyAJQGVjaG8gIiMhL2Jpbi9zaCIgPiB0ZXN0X3NjcmlwdAorLQlAZWNobyAiU1JDRElSPUBzcmNkaXJAIiA+PiB0ZXN0X3NjcmlwdAorKwlAZWNobyAiU1JDRElSPS91c3IvbGliL2UyZnNwcm9ncy9wdGVzdC90ZXN0IiA+PiB0ZXN0X3NjcmlwdAorIAlAY2F0ICQoc3JjZGlyKS90ZXN0X3NjcmlwdC5pbiA+PiB0ZXN0X3NjcmlwdAorIAlAY2htb2QgK3ggdGVzdF9zY3JpcHQKKyAKK0luZGV4OiBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL3Rlc3RfY29uZmlnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDIuOS5vcmlnL3Rlc3RzL3Rlc3RfY29uZmlnCisrKysgZTJmc3Byb2dzLTEuNDIuOS90ZXN0cy90ZXN0X2NvbmZpZworQEAgLTMsMjMgKzMsMjMgQEAKKyAjCisgCisgdW5zZXQgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBMQ19URUxFUEhPTkUgTENfVElNRSBQQUdFUgorLUZTQ0s9IiRVU0VfVkFMR1JJTkQgLi4vZTJmc2NrL2UyZnNjayIKKy1NS0UyRlM9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9ta2UyZnMiCistRFVNUEUyRlM9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9kdW1wZTJmcyIKKy1UVU5FMkZTPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvdHVuZTJmcyIKKy1DSEFUVFI9IiRVU0VfVkFMR1JJTkQuLi9taXNjL2NoYXR0ciIKKy1MU0FUVFI9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9sc2F0dHIiCistRTJJTUFHRT0iJFVTRV9WQUxHUklORCAuLi9taXNjL2UyaW1hZ2UiCistRTJJTUFHRV9FWEU9Ii4uL21pc2MvZTJpbWFnZSIKKy1ERUJVR0ZTPSIkVVNFX1ZBTEdSSU5EIC4uL2RlYnVnZnMvZGVidWdmcyIKKy1ERUJVR0ZTX0VYRT0iLi4vZGVidWdmcy9kZWJ1Z2ZzIgorLVRFU1RfQklUUz0iLi4vZGVidWdmcy9kZWJ1Z2ZzIgorLVJFU0laRTJGU19FWEU9Ii4uL3Jlc2l6ZS9yZXNpemUyZnMiCisrRlNDSz0iJFVTRV9WQUxHUklORCBlMmZzY2siCisrTUtFMkZTPSIkVVNFX1ZBTEdSSU5EIG1rZTJmcyIKKytEVU1QRTJGUz0iJFVTRV9WQUxHUklORCBkdW1wZTJmcyIKKytUVU5FMkZTPSIkVVNFX1ZBTEdSSU5EIHR1bmUyZnMiCisrQ0hBVFRSPSIkVVNFX1ZBTEdSSU5EIGNoYXR0ciIKKytMU0FUVFI9IiRVU0VfVkFMR1JJTkQgbHNhdHRyIgorK0UySU1BR0U9IiRVU0VfVkFMR1JJTkQgZTJpbWFnZSIKKytFMklNQUdFX0VYRT0iL3NiaW4vZTJpbWFnZSIKKytERUJVR0ZTPSIkVVNFX1ZBTEdSSU5EIGRlYnVnZnMiCisrREVCVUdGU19FWEU9Ii9zYmluL2RlYnVnZnMiCisrVEVTVF9CSVRTPSIvc2Jpbi9kZWJ1Z2ZzIgorK1JFU0laRTJGU19FWEU9Ii9zYmluL3Jlc2l6ZTJmcyIKKyBSRVNJWkUyRlM9IiRVU0VfVkFMR1JJTkQgJFJFU0laRTJGU19FWEUiCistRTJVTkRPX0VYRT0iLi4vbWlzYy9lMnVuZG8iCistVEVTVF9SRUw9Li4vdGVzdHMvcHJvZ3MvdGVzdF9yZWwKKy1URVNUX0lDT1VOVD0uLi90ZXN0cy9wcm9ncy90ZXN0X2ljb3VudAorLUNSQ1NVTT0uLi90ZXN0cy9wcm9ncy9jcmNzdW0KKytFMlVORE9fRVhFPSIvc2Jpbi9lMnVuZG8iCisrVEVTVF9SRUw9Li9wcm9ncy90ZXN0X3JlbAorK1RFU1RfSUNPVU5UPS4vcHJvZ3MvdGVzdF9pY291bnQKKytDUkNTVU09Li9wcm9ncy9jcmNzdW0KKyBMRF9MSUJSQVJZX1BBVEg9Li4vbGliOi4uL2xpYi9leHQyZnM6Li4vbGliL2UycDouLi9saWIvZXQ6Li4vbGliL3NzCisgRFlMRF9MSUJSQVJZX1BBVEg9Li4vbGliOi4uL2xpYi9leHQyZnM6Li4vbGliL2UycDouLi9saWIvZXQ6Li4vbGliL3NzCisgZXhwb3J0IExEX0xJQlJBUllfUEFUSApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGU5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2hlbiBleGVjdXRpbmcgYSBzY3JpcHQgZG9uJ3QgZWNobyBldmVyeSBjb21tYW5kLCBhcyB3ZSBkbyB0aGlzIGZvciBlbnRpcmUKK2ZpbGVzeXN0ZW1zIGF0IHJvb3RmcyB0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9kZWJ1Z2ZzL2RlYnVnZnMuYyBiL2RlYnVnZnMvZGVidWdmcy5jCitpbmRleCA1NTkwMjk1Li5hYzU3MjkyIDEwMDY0NAorLS0tIGEvZGVidWdmcy9kZWJ1Z2ZzLmMKKysrKyBiL2RlYnVnZnMvZGVidWdmcy5jCitAQCAtMjM3OCw3ICsyMzc4LDcgQEAgc3RhdGljIGludCBzb3VyY2VfZmlsZShjb25zdCBjaGFyICpjbWRfZmlsZSwgaW50IHNzX2lkeCkKKyAJCWNwID0gc3RyY2hyKGJ1ZiwgJ1xyJyk7CisgCQlpZiAoY3ApCisgCQkJKmNwID0gMDsKKy0JCXByaW50ZigiZGVidWdmczogJXNcbiIsIGJ1Zik7CisrCQkvKnByaW50ZigiZGVidWdmczogJXNcbiIsIGJ1Zik7Ki8KKyAJCXJldHZhbCA9IHNzX2V4ZWN1dGVfbGluZShzc19pZHgsIGJ1Zik7CisgCQlpZiAocmV0dmFsKSB7CisgCQkJc3NfcGVycm9yKHNzX2lkeCwgcmV0dmFsLCBidWYpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlNmViNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBiMTM5ZTAzYWMyZjcyZTY0NGU1NDdjN2VlOWIxNTE0MzgzYWY0ZDk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorRGF0ZTogV2VkLCAzMCBKYW4gMjAxMyAxNToyMjowNCArMDIwMAorU3ViamVjdDogW1BBVENIXSBXaGVuIC9ldGMvbGQuc28uY2FjaGUgaXMgd3JpdGVhYmxlIGJ5IHVzZXIgcnVubmluZyBiaXRiYWtlCisgdGhlbiBpdCBjcmVhdGVzIGludmFsaWQgY2FjaGUgKGluIG15IGNhc2UgbGlic3RkYysrLnNvCisgY2Fubm90IGJlIGZvdW5kIGFmdGVyIGJ1aWxkaW5nIHpsaWIoLW5hdGl2ZSkgYW5kIEkgaGF2ZSB0bworIGNhbGwgdG91Y2ggKi9saWJzdGRjKysuc28gJiYgL3NiaW4vbGRjb25maWcgdG8gZml4IGl0LgorCitTbyByZW1vdmUgbGRjb25maWcgY2FsbCBmcm9tIG1ha2UgaW5zdGFsbC1saWJzCisKK1BhdGNoIGF1dGhvcmVkIGJ5IE1hcnRpbiBKYW5zYS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorLS0tCisgbGliL01ha2VmaWxlLmVsZi1saWIgfCAgICAzIC0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmVsZi1saWIgYi9saWIvTWFrZWZpbGUuZWxmLWxpYgoraW5kZXggNzg0NzlkMy4uNGE0YTVhYyAxMDA2NDQKKy0tLSBhL2xpYi9NYWtlZmlsZS5lbGYtbGliCisrKysgYi9saWIvTWFrZWZpbGUuZWxmLWxpYgorQEAgLTUwLDggKzUwLDYgQEAgaW5zdGFsbC1zaGxpYnMgaW5zdGFsbDo6ICQoRUxGX0xJQikgaW5zdGFsbGRpcnMtZWxmLWxpYiAkKERFUF9JTlNUQUxMX1NZTUxJTkspCisgCSQoRSkgIglTWU1MSU5LICQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28iCisgCSQoUSkgJChJTlNUQUxMX1NZTUxJTkspICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9TT05BTUUpIFwKKyAJCSQobGliZGlyKS8kKEVMRl9JTUFHRSkuc28gJChERVNURElSKQorLQkkKEUpICIJTERDT05GSUciCistCSQoUSkgLSQoTERDT05GSUcpCisgCisgaW5zdGFsbC1zdHJpcDogaW5zdGFsbAorIAkkKEUpICIJU1RSSVAtTElCICQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIgorQEAgLTY3LDcgKzY1LDYgQEAgdW5pbnN0YWxsLXNobGlicyB1bmluc3RhbGw6OgorIAkkKFJNKSAtZiAkKERFU1RESVIpJChFTEZfSU5TVEFMTF9ESVIpLyQoRUxGX0xJQikgXAorIAkJJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9TT05BTUUpIFwKKyAJCSQoREVTVERJUikkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvCistCS0kKExEQ09ORklHKQorIAorIGNsZWFuOjoKKyAJJChSTSkgLXJmIGVsZnNoYXJlZAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMjUxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTEgQEAKKyMhL2Jpbi9zaAorCitjZCAuL3Rlc3QKKy4vdGVzdF9zY3JpcHQgJj4uLi90ZXN0LmxvZworaWYgWyAkPyAtZXEgMCBdCit0aGVuCisJZWNobyAiUEFTUzogZTJmc3Byb2dzIgorCXJtIHRlc3QubG9nCitlbHNlCisJZWNobyAiRkFJTDogZTJmc3Byb2dzIgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfMS40Mi45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlMjljOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3NfMS40Mi45LmJiCkBAIC0wLDAgKzEsMTE2IEBACityZXF1aXJlIGUyZnNwcm9ncy5pbmMKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiVXBkYXRpbmcgYmFja3BvcnRlZCBwYXRjaGVzIHRvIDEuNDIuMTMgaXMgdG9vIG11Y2ggcGFpbi4gTGV0J3Mgd2FpdCB1bnRpbCAxLjQzIGlzIHJlbGVhc2VkLiIKKworU1JDX1VSSSArPSAiZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1pY2FjaGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3F1aWV0LWRlYnVnZnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtbWtlMmZzLWFkZC10aGUtYWJpbGl0eS10by1jb3B5LWZpbGVzLWZyb20tYS1naXZlbi1kaS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNvcHktZmlsZXMtcmVjdXJzaXZlbHkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3BlY2lhbC1maWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDUtbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LXJlZ3VsYXItZmlsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNi1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1kaXJlY3RvcnkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDctbWlzYy1jcmVhdGVfaW5vZGUuYy1zZXQtb3duZXItbW9kZS10aW1lLWZvci10aGUtaW5vZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwOC1ta2UyZnMuYy1hZGQtYW4tb3B0aW9uLWQtcm9vdC1kaXJlY3RvcnkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDktbWlzYy1jcmVhdGVfaW5vZGUuYy1oYW5kbGUtaGFyZGxpbmtzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWUyZnNwcm9ncy1maXgtY3Jvc3MtY29tcGlsYXRpb24tcHJvYmxlbS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbWlzYy1ta2UyZnMuYy1yZXR1cm4tZXJyb3Itd2hlbi1mYWlsZWQtdG8tcG9wdWxhdGUtZnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NhY2hlX2lub2RlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxNS0wMjQ3LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWxpYmV4dDJmcy1maXgtcG90ZW50aWFsLWJ1ZmZlci1vdmVyZmxvdy1pbi1jbG9zZWZzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjNmOGU0MWU2M2I0MzJiYTExNGIzM2Y1ODY3NDU2M2Y3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmOTJhYzA2ZTkyZmEwMGYyYWRhM2VlNjdkYWQwMTJkNzRkNjg1NTM3NTI3YWQxMjQxZDgyZjJkMDQxZjI4MDIiCisKK0VYVFJBX09FQ09ORiArPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSAtLWVuYWJsZS1lbGYtc2hsaWJzIC0tZGlzYWJsZS1saWJ1dWlkIC0tZGlzYWJsZS11dWlkZCAtLWVuYWJsZS12ZXJib3NlLW1ha2VjbWRzIgorRVhUUkFfT0VDT05GX2RhcndpbiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IC0tZW5hYmxlLWJzZC1zaGxpYnMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtbGlicworCSMgV2UgdXNlIGJsa2lkIGZyb20gdXRpbC1saW51eCBub3cgc28gcmVtb3ZlIGZyb20gaGVyZQorCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9saWJibGtpZCoKKwlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vYmxraWQKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnL2Jsa2lkLnBjCisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9ibGtpZAorCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZnNjaworCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZmluZGZzCisKKwkjIGUyaW5pdHJkX2hlbHBlciBhbmQgdGhlIHBrZ2NvbmZpZyBmaWxlcyBiZWxvbmcgaW4gbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vZTJpbml0cmRfaGVscGVyICR7RH0ke2xpYmRpcn0KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZyAke0R9JHtsaWJkaXJ9CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBleHQyZnMvZXh0Ml90eXBlcy5oCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L2NoYXR0ciAke0R9JHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncworCisJaW5zdGFsbCAtdiAtbSA3NTUgJHtTfS9jb250cmliL3BvcHVsYXRlLWV4dGZzLnNoICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKwkjIENsZWFuIGhvc3QgcGF0aCBpbiBjb21waWxlX2V0LCBta19jbWRzCisJc2VkIC1pIC1lICJzLEVUX0RJUj1cIiR7U30vbGliL2V0XCIsRVRfRElSPVwiJHtkYXRhZGlyfS9ldFwiLGciICR7RH0ke2JpbmRpcn0vY29tcGlsZV9ldAorCXNlZCAtaSAtZSAicyxTU19ESVI9XCIke1N9L2xpYi9zc1wiLFNTX0RJUj1cIiR7ZGF0YWRpcn0vc3NcIixnIiAke0R9JHtiaW5kaXJ9L21rX2NtZHMKK30KKworUkRFUEVORFNfZTJmc3Byb2dzID0gImUyZnNwcm9ncy1iYWRibG9ja3MiCitSUkVDT01NRU5EU19lMmZzcHJvZ3MgPSAiZTJmc3Byb2dzLW1rZTJmcyBlMmZzcHJvZ3MtZTJmc2NrIgorCitQQUNLQUdFUyA9KyAiZTJmc3Byb2dzLWUyZnNjayBlMmZzcHJvZ3MtbWtlMmZzIGUyZnNwcm9ncy10dW5lMmZzIGUyZnNwcm9ncy1iYWRibG9ja3MgZTJmc3Byb2dzLXJlc2l6ZTJmcyIKK1BBQ0tBR0VTID0rICJsaWJjb21lcnIgbGlic3MgbGliZTJwIGxpYmV4dDJmcyIKKworRklMRVNfZTJmc3Byb2dzLXJlc2l6ZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vcmVzaXplMmZzKiIKK0ZJTEVTX2UyZnNwcm9ncy1lMmZzY2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2UyZnNjayAke2Jhc2Vfc2JpbmRpcn0vZnNjay5leHQqIgorRklMRVNfZTJmc3Byb2dzLW1rZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vbWtlMmZzICR7YmFzZV9zYmluZGlyfS9ta2ZzLmV4dCogJHtzeXNjb25mZGlyfS9ta2UyZnMuY29uZiIKK0ZJTEVTX2UyZnNwcm9ncy10dW5lMmZzID0gIiR7YmFzZV9zYmluZGlyfS90dW5lMmZzICR7YmFzZV9zYmluZGlyfS9lMmxhYmVsIgorRklMRVNfZTJmc3Byb2dzLWJhZGJsb2NrcyA9ICIke2Jhc2Vfc2JpbmRpcn0vYmFkYmxvY2tzIgorRklMRVNfbGliY29tZXJyID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNvbV9lcnIuc28uKiIKK0ZJTEVTX2xpYnNzID0gIiR7YmFzZV9saWJkaXJ9L2xpYnNzLnNvLioiCitGSUxFU19saWJlMnAgPSAiJHtiYXNlX2xpYmRpcn0vbGliZTJwLnNvLioiCitGSUxFU19saWJleHQyZnMgPSAiJHtsaWJkaXJ9L2UyaW5pdHJkX2hlbHBlciAke2Jhc2VfbGliZGlyfS9saWJleHQyZnMuc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS8qLyouYXdrICR7ZGF0YWRpcn0vKi8qLnNlZCAke2Jhc2VfbGliZGlyfS8qLnNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJjaGF0dHIiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY2hhdHRyXSA9ICIke2Jhc2VfYmluZGlyfS9jaGF0dHIiCitBTFRFUk5BVElWRV9UQVJHRVRbY2hhdHRyXSA9ICIke2Jhc2VfYmluZGlyfS9jaGF0dHIuZTJmc3Byb2dzIgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAibGliYmxraWQuMyBibGtpZC44IGZpbmRmcy44IGZzY2suOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsaWJibGtpZC4zXSA9ICIke21hbmRpcn0vbWFuMy9saWJibGtpZC4zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jsa2lkLjhdID0gIiR7bWFuZGlyfS9tYW44L2Jsa2lkLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmluZGZzLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZpbmRmcy44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZzY2suOF0gPSAiJHttYW5kaXJ9L21hbjgvZnNjay44IgorCitpbmhlcml0IHB0ZXN0CitTUkNfVVJJICs9ICJmaWxlOi8vcnVuLXB0ZXN0IgorU1JDX1VSSSArPSAiZmlsZTovL3B0ZXN0LnBhdGNoIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0gJHtQTn0tdHVuZTJmcyBjb3JldXRpbHMgcHJvY3BzIgorI1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJleHBlY3QiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke0J9L3Rlc3RzCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgLWEgJHtCfS90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJY3AgLWEgJHtTfS90ZXN0cy8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlzZWQgLWUgJ3MhLi4vZTJmc2NrL2UyZnNjayFlMmZzY2shZycgLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC8qL2V4cGVjdCoKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2FybV9iYWNrZW5kLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9hcm1fYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTQ2NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9hcm1fYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1faW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9hcm1faW5pdC5jCTIwMDktMDQtMjEgMTQ6NTA6MDEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX2luaXQuYwkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTMyLDIxICszMiwzMiBAQAorICNkZWZpbmUgUkVMT0NfUFJFRklYCVJfQVJNXworICNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisgCisrI2luY2x1ZGUgImxpYmVibF9hcm0uaCIKKysKKyAvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBhcm1fcmVsb2MuZGVmLiAgKi8KKyAjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisgCisgCisgY29uc3QgY2hhciAqCisgYXJtX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorLSAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWxmICplbGY7CisgICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisgICAgICBFYmwgKmVoOworICAgICAgc2l6ZV90IGVobGVuOworIHsKKysgIGludCBzb2Z0X2Zsb2F0ID0gMDsKKysKKyAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworICAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorICAgICByZXR1cm4gTlVMTDsKKyAKKysgIGlmIChlbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHIgJiYgKGVoZHItPmVfZmxhZ3MgJiBFRl9BUk1fU09GVF9GTE9BVCkpCisrICAgICAgc29mdF9mbG9hdCA9IDE7CisrICB9CisrCisgICAvKiBXZSBoYW5kbGUgaXQuICAqLworICAgZWgtPm5hbWUgPSAiQVJNIjsKKyAgIGFybV9pbml0X3JlbG9jIChlaCk7CitAQCAtNTgsNyArNjksMTAgQEAKKyAgIEhPT0sgKGVoLCBjb3JlX25vdGUpOworICAgSE9PSyAoZWgsIGF1eHZfaW5mbyk7CisgICBIT09LIChlaCwgY2hlY2tfb2JqZWN0X2F0dHJpYnV0ZSk7CistICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIGlmIChzb2Z0X2Zsb2F0KQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkOworIAorICAgcmV0dXJuIE1PRFZFUlNJT047CisgfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL2FybV9yZWdzLmMJMjAwOS0wNC0yMSAxNDo1MDowMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmVncy5jCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtMjgsNiArMjgsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZHdhcmYuaD4KKyAKKyAjZGVmaW5lIEJBQ0tFTkQgYXJtXworQEAgLTU4LDcgKzU5LDE1IEBACisgICAgICAgbmFtZWxlbiA9IDI7CisgICAgICAgYnJlYWs7CisgCistICAgIGNhc2UgMTAgLi4uIDEyOgorKyAgICBjYXNlIDEwIC4uLiAxMToKKysgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgIG5hbWVbMV0gPSAnMSc7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTI6CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisgICAgICAgbmFtZVswXSA9ICdyJzsKKyAgICAgICBuYW1lWzFdID0gJzEnOworICAgICAgIG5hbWVbMl0gPSByZWdubyAlIDEwICsgJzAnOworQEAgLTczLDYgKzgyLDkgQEAKKyAgICAgICBicmVhazsKKyAKKyAgICAgY2FzZSAxNiArIDAgLi4uIDE2ICsgNzoKKysgICAgICAvKiBBQURXQVJGIHNheXMgdGhhdCB0aGVyZSBhcmUgbm8gcmVnaXN0ZXJzIGluIHRoYXQgcmFuZ2UsCisrICAgICAgICogYnV0IGdjYyBtYXBzIEZQQSByZWdpc3RlcnMgaGVyZQorKyAgICAgICAqLworICAgICAgIHJlZ25vICs9IDk2IC0gMTY7CisgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICAgY2FzZSA5NiArIDAgLi4uIDk2ICsgNzoKK0BAIC04NCwxMSArOTYsMTM5IEBACisgICAgICAgbmFtZWxlbiA9IDI7CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgNjQgKyAwIC4uLiA2NCArIDk6CisrICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgIG5hbWVbMF0gPSAncyc7CisrICAgICAgbmFtZVsxXSA9IHJlZ25vIC0gNjQgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgNjQgKyAxMCAuLi4gNjQgKyAzMToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gKHJlZ25vIC0gNjQpIC8gMTAgKyAnMCc7CisrICAgICAgbmFtZVsyXSA9IChyZWdubyAtIDY0KSAlIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDEwNCArIDAgLi4uIDEwNCArIDc6CisrICAgICAgLyogWFhYIFRPRE86CisrICAgICAgICogVGhpcyBjYW4gYmUgZWl0aGVyIGludGVsIHdpcmVsZXNzIE1NWCBnZW5lcmFsIHB1cnBvc2UvY29udHJvbAorKyAgICAgICAqIHJlZ2lzdGVycyBvciB4c2NhbGUgYWNjdW11bGF0b3IsIHdoaWNoIGhhdmUgZGlmZmVyZW50IHVzYWdlLgorKyAgICAgICAqIFdlIG9ubHkgaGF2ZSB0aGUgaW50ZWwgd2lyZWxlc3MgTU1YIGhlcmUgbm93LgorKyAgICAgICAqIFRoZSBuYW1lIG5lZWRzIHRvIGJlIGNoYW5nZWQgZm9yIHRoZSB4c2NhbGUgYWNjdW11bGF0b3IgdG9vLiAqLworKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBtZW1jcHkobmFtZSwgIndjZ3IiLCA0KTsKKysgICAgICBuYW1lWzRdID0gcmVnbm8gLSAxMDQgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDU7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTEyICsgMCAuLi4gMTEyICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAtIDExMiArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAxMCAuLi4gMTEyICsgMTU6CisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDY0OworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdyJzsKKysgICAgICBuYW1lWzJdID0gJzEnOworKyAgICAgIG5hbWVbM10gPSByZWdubyAtIDExMiAtIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSA0OworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIDEyODoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKyAgICAgICByZXR1cm4gc3RwY3B5IChuYW1lLCAic3BzciIpICsgMSAtIG5hbWU7CisgCisrICAgIGNhc2UgMTI5OgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfZmlxIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzA6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9pcnEiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMToKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2FidCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMyOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfdW5kIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzM6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9zdmMiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDE0NCAuLi4gMTUwOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdXNyIiwgcmVnbm8gLSAxNDQgKyA4KSArIDE7CisrCisrICAgIGNhc2UgMTUxIC4uLiAxNTc6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9maXEiLCByZWdubyAtIDE1MSArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTggLi4uIDE1OToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2lycSIsIHJlZ25vIC0gMTU4ICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjAgLi4uIDE2MToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2FidCIsIHJlZ25vIC0gMTYwICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjIgLi4uIDE2MzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3VuZCIsIHJlZ25vIC0gMTYyICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxNjQgLi4uIDE2NToKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3N2YyIsIHJlZ25vIC0gMTY0ICsgMTMpICsgMTsKKysKKysgICAgY2FzZSAxOTIgLi4uIDE5OToKKysgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAnYyc7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTkyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIDI1NiArIDAgLi4uIDI1NiArIDk6CisrICAgICAgLyogWFhYIFRPRE86IE5lb24gYWxzbyB1c2VzIHRob3NlIHJlZ2lzdGVycyBhbmQgY2FuIGNvbnRhaW4KKysgICAgICAgKiBib3RoIGZsb2F0IGFuZCBpbnRlZ2VycyAqLworICAgICAgICpzZXRuYW1lID0gIlZGUCI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisgICAgICAgKmJpdHMgPSA2NDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL2FybV9yZXR2YWwuYwkyMDEwLTAxLTEyIDE2OjU3OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9yZXR2YWwuYwkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTQ1LDYgKzQ1LDEzIEBACisgI2RlZmluZSBubG9jX2ludHJlZwkxCisgI2RlZmluZSBubG9jX2ludHJlZ3MobikJKDIgKiAobikpCisgCisrLyogZjEgICovIC8qIFhYWCBUT0RPOiBmMCBjYW4gYWxzbyBoYXZlIG51bWJlciA5NiBpZiBwcm9ncmFtIHdhcyBjb21waWxlZCB3aXRoIC1tYWJpPWFhcGNzICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzE2IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworIC8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorICAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKyAgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluIHIwLiAgKi8KK0BAIC01NSw4ICs2Miw5IEBACisgI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisgCisgCistaW50CistYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3N0YXRpYyBpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwLAorKwkJICAgICAgICAgICAgaW50IHNvZnRfZmxvYXQpCisgeworICAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKyAgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworQEAgLTEwOSwxNCArMTE3LDMxIEBACisgCSAgZWxzZQorIAkgICAgcmV0dXJuIC0xOworIAl9CisrICAgICAgaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwl7CisrCSAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCSAgICAgICAgICAgICAgICAgICAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgcmV0dXJuIC0xOworKworKwkgIGlmICgoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KSAmJiAhc29mdF9mbG9hdCkKKysJICAgIHsKKysJICAgICAgKmxvY3AgPSBsb2NfZnByZWc7CisrCSAgICAgIGlmIChzaXplIDw9IDgpCisrCQlyZXR1cm4gbmxvY19mcHJlZzsKKysJICAgICAgZ290byBhZ2dyZWdhdGU7CisrCSAgICB9CisrCX0KKyAgICAgICBpZiAoc2l6ZSA8PSAxNikKKyAJeworIAlpbnRyZWc6CisgCSAgKmxvY3AgPSBsb2NfaW50cmVnOworIAkgIHJldHVybiBzaXplIDw9IDQgPyBubG9jX2ludHJlZyA6IG5sb2NfaW50cmVncyAoKHNpemUgKyAzKSAvIDQpOworIAl9CisrICAgICAgLyogZmFsbCB0aHJvdWdoLiAqLworIAorICAgICBhZ2dyZWdhdGU6CisrICAgICAgLyogWFhYIFRPRE8gc29tZXRpbWVzIGFnZ3JlZ2F0ZXMgYXJlIHJldHVybmVkIGluIHIwICgtbWFiaT1hYXBjcykgKi8KKyAgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisgICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworIAorQEAgLTEzNSwzICsxNjAsMTggQEAKKyAgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisgICByZXR1cm4gLTI7CisgfQorKworKy8qIHJldHVybiBsb2NhdGlvbiBmb3IgLW1hYmk9YXBjcy1nbnUgLW1zb2Z0LWZsb2F0ICovCisraW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0IChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgIHJldHVybiBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDEpOworK30KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1taGFyZC1mbG9hdCAoY3VycmVudCBkZWZhdWx0KSAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAwKTsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoxMToxMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMjkwLDYgKzIyOTAsOSBAQAorICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNAkweDA0MDAwMDAwCisgI2RlZmluZSBFRl9BUk1fRUFCSV9WRVI1CTB4MDUwMDAwMDAKKyAKKysvKiBFSV9PU0FCSSB2YWx1ZXMgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0FSTV9BRUFCSSAgICA2NCAgICAgIC8qIENvbnRhaW5zIHN5bWJvbCB2ZXJzaW9uaW5nLiAqLworKworIC8qIEFkZGl0aW9uYWwgc3ltYm9sIHR5cGVzIGZvciBUaHVtYi4gICovCisgI2RlZmluZSBTVFRfQVJNX1RGVU5DCQlTVFRfTE9QUk9DIC8qIEEgVGh1bWIgZnVuY3Rpb24uICAqLworICNkZWZpbmUgU1RUX0FSTV8xNkJJVAkJU1RUX0hJUFJPQyAvKiBBIFRodW1iIGxhYmVsLiAgKi8KK0BAIC0yMzA3LDEyICsyMzEwLDE5IEBACisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFBoZHIgcF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFBUX0FSTV9FWElEWAkJKFBUX0xPUFJPQyArIDEpCS8qIEFSTSB1bndpbmQgc2VnbWVudC4gICovCisrI2RlZmluZSBQVF9BUk1fVU5XSU5ECQlQVF9BUk1fRVhJRFgKKyAKKyAvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgU2hkciBzaF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fRVhJRFgJCShTSFRfTE9QUk9DICsgMSkgLyogQVJNIHVud2luZCBzZWN0aW9uLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fUFJFRU1QVE1BUAkoU0hUX0xPUFJPQyArIDIpIC8qIFByZWVtcHRpb24gZGV0YWlscy4gICovCisgI2RlZmluZSBTSFRfQVJNX0FUVFJJQlVURVMJKFNIVF9MT1BST0MgKyAzKSAvKiBBUk0gYXR0cmlidXRlcyBzZWN0aW9uLiAgKi8KKyAKKysvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgRHluIGRfdGFnIGZpZWxkLiAgKi8KKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDEJKERUX0xPUFJPQyArIDApCisrI2RlZmluZSBEVF9BUk1fU1lNVEFCU1oJCShEVF9MT1BST0MgKyAxKQorKyNkZWZpbmUgRFRfQVJNX1BSRUVNVE1BQgkoRFRfTE9QUk9DICsgMikKKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDIJKERUX0xPUFJPQyArIDMpCisrI2RlZmluZSBEVF9BUk1fTlVNCQk0CisgCisgLyogQVJNIHJlbG9jcy4gICovCisgCitAQCAtMjM0NCwxMiArMjM1NCw3NSBAQAorICNkZWZpbmUgUl9BUk1fR09UUEMJCTI1CS8qIDMyIGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8gR09UICovCisgI2RlZmluZSBSX0FSTV9HT1QzMgkJMjYJLyogMzIgYml0IEdPVCBlbnRyeSAqLworICNkZWZpbmUgUl9BUk1fUExUMzIJCTI3CS8qIDMyIGJpdCBQTFQgYWRkcmVzcyAqLworKyNkZWZpbmUgUl9BUk1fQ0FMTAkJMjgKKysjZGVmaW5lIFJfQVJNX0pVTVAyNAkJMjkKKysjZGVmaW5lIFJfQVJNX1RITV9KVU1QMjQJMzAKKysjZGVmaW5lIFJfQVJNX0JBU0VfQUJTCQkzMQorICNkZWZpbmUgUl9BUk1fQUxVX1BDUkVMXzdfMAkzMgorICNkZWZpbmUgUl9BUk1fQUxVX1BDUkVMXzE1XzgJMzMKKyAjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF8yM18xNQkzNAorICNkZWZpbmUgUl9BUk1fTERSX1NCUkVMXzExXzAJMzUKKyAjZGVmaW5lIFJfQVJNX0FMVV9TQlJFTF8xOV8xMgkzNgorICNkZWZpbmUgUl9BUk1fQUxVX1NCUkVMXzI3XzIwCTM3CisrI2RlZmluZSBSX0FSTV9UQVJHRVQxCQkzOAorKyNkZWZpbmUgUl9BUk1fU0JSRUwzMQkJMzkKKysjZGVmaW5lIFJfQVJNX1Y0QlgJCTQwCisrI2RlZmluZSBSX0FSTV9UQVJHRVQyCQk0MQorKyNkZWZpbmUgUl9BUk1fUFJFTDMxCQk0MgorKyNkZWZpbmUgUl9BUk1fTU9WV19BQlNfTkMJNDMKKysjZGVmaW5lIFJfQVJNX01PVlRfQUJTCQk0NAorKyNkZWZpbmUgUl9BUk1fTU9WV19QUkVMX05DCTQ1CisrI2RlZmluZSBSX0FSTV9NT1ZUX1BSRUwJCTQ2CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19BQlNfTkMJNDcKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZUX0FCUwk0OAorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfUFJFTF9OQwk0OQorKyNkZWZpbmUgUl9BUk1fVEhNX01PVlRfUFJFTAk1MAorKyNkZWZpbmUgUl9BUk1fVEhNX0pVTVAxOQk1MQorKyNkZWZpbmUgUl9BUk1fVEhNX0pVTVA2CQk1MgorKyNkZWZpbmUgUl9BUk1fVEhNX0FMVV9QUkVMXzExXzAJNTMKKysjZGVmaW5lIFJfQVJNX1RITV9QQzEyCQk1NAorKyNkZWZpbmUgUl9BUk1fQUJTMzJfTk9JCQk1NQorKyNkZWZpbmUgUl9BUk1fUkVMMzJfTk9JCQk1NgorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cwX05DCTU3CisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzAJCTU4CisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzFfTkMJNTkKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMQkJNjAKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMgkJNjEKKysjZGVmaW5lIFJfQVJNX0xEUl9QQ19HMQkJNjIKKysjZGVmaW5lIFJfQVJNX0xEUl9QQ19HMgkJNjMKKysjZGVmaW5lIFJfQVJNX0xEUlNfUENfRzAJNjQKKysjZGVmaW5lIFJfQVJNX0xEUlNfUENfRzEJNjUKKysjZGVmaW5lIFJfQVJNX0xEUlNfUENfRzIJNjYKKysjZGVmaW5lIFJfQVJNX0xEQ19QQ19HMAkJNjcKKysjZGVmaW5lIFJfQVJNX0xEQ19QQ19HMQkJNjgKKysjZGVmaW5lIFJfQVJNX0xEQ19QQ19HMgkJNjkKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMF9OQwk3MAorKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cwCQk3MQorKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cxX05DCTcyCisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzEJCTczCisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzIJCTc0CisrI2RlZmluZSBSX0FSTV9MRFJfU0JfRzAJCTc1CisrI2RlZmluZSBSX0FSTV9MRFJfU0JfRzEJCTc2CisrI2RlZmluZSBSX0FSTV9MRFJfU0JfRzIJCTc3CisrI2RlZmluZSBSX0FSTV9MRFJTX1NCX0cwCTc4CisrI2RlZmluZSBSX0FSTV9MRFJTX1NCX0cxCTc5CisrI2RlZmluZSBSX0FSTV9MRFJTX1NCX0cyCTgwCisrI2RlZmluZSBSX0FSTV9MRENfRzAJCTgxCisrI2RlZmluZSBSX0FSTV9MRENfRzEJCTgyCisrI2RlZmluZSBSX0FSTV9MRENfRzIJCTgzCisrI2RlZmluZSBSX0FSTV9NT1ZXX0JSRUxfTkMJODQKKysjZGVmaW5lIFJfQVJNX01PVlRfQlJFTAkJODUKKysjZGVmaW5lIFJfQVJNX01PVldfQlJFTAkJODYKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZXX0JSRUxfTkMJODcKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZUX0JSRUwJODgKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZXX0JSRUwJODkKKysvKiA5MC05MyB1bmFsbG9jYXRlZCAqLworKyNkZWZpbmUgUl9BUk1fUExUMzJfQUJTCQk5NAorKyNkZWZpbmUgUl9BUk1fR09UX0FCUwkJOTUKKysjZGVmaW5lIFJfQVJNX0dPVF9QUkVMCQk5NgorKyNkZWZpbmUgUl9BUk1fR09UX0JSRUwxMgk5NworKyNkZWZpbmUgUl9BUk1fR09UT0ZGMTIJCTk4CisrI2RlZmluZSBSX0FSTV9HT1RSRUxBWAkJOTkKKyAjZGVmaW5lIFJfQVJNX0dOVV9WVEVOVFJZCTEwMAorICNkZWZpbmUgUl9BUk1fR05VX1ZUSU5IRVJJVAkxMDEKKyAjZGVmaW5lIFJfQVJNX1RITV9QQzExCQkxMDIJLyogdGh1bWIgdW5jb25kaXRpb25hbCBicmFuY2ggKi8KK0BAIC0yMzY0LDYgKzI0MzcsMTIgQEAKKyAJCQkJCSAgIHN0YXRpYyBUTFMgYmxvY2sgb2Zmc2V0ICovCisgI2RlZmluZSBSX0FSTV9UTFNfTEUzMgkJMTA4CS8qIDMyIGJpdCBvZmZzZXQgcmVsYXRpdmUgdG8gc3RhdGljCisgCQkJCQkgICBUTFMgYmxvY2sgKi8KKysjZGVmaW5lIFJfQVJNX1RMU19MRE8xMgkJMTA5CisrI2RlZmluZSBSX0FSTV9UTFNfTEUxMgkJMTEwCisrI2RlZmluZSBSX0FSTV9UTFNfSUUxMkdQCTExMQorKy8qIDExMiAtIDEyNyBwcml2YXRlIHJhbmdlICovCisrI2RlZmluZSBSX0FSTV9NRV9UT08JCTEyOAkvKiBvYnNvbGV0ZSAqLworKworICNkZWZpbmUgUl9BUk1fUlhQQzI1CQkyNDkKKyAjZGVmaW5lIFJfQVJNX1JTQlJFTDMyCQkyNTAKKyAjZGVmaW5lIFJfQVJNX1RITV9SUEMyMgkJMjUxCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX2FybS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX2FybS5oCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDkgQEAKKysjaWZuZGVmIF9MSUJFQkxfQVJNX0gKKysjZGVmaW5lIF9MSUJFQkxfQVJNX0ggMQorKworKyNpbmNsdWRlIDxsaWJkdy5oPgorKworK2V4dGVybiBpbnQgYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0KER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworK2V4dGVybiBpbnQgYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkKER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworKworKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYWE3MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYKQEAgLTAsMCArMSw3MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoxMzo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoyMjo0My4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNDMsNiArMTQzLDcgQEAKKyAjZGVmaW5lIEVMRk9TQUJJX0hQVVgJCTEJLyogSFAtVVggKi8KKyAjZGVmaW5lIEVMRk9TQUJJX05FVEJTRAkJMgkvKiBOZXRCU0QuICAqLworICNkZWZpbmUgRUxGT1NBQklfTElOVVgJCTMJLyogTGludXguICAqLworKyNkZWZpbmUgRUxGT1NBQklfSFVSRAkJNAkvKiBHTlUvSHVyZCAqLworICNkZWZpbmUgRUxGT1NBQklfU09MQVJJUwk2CS8qIFN1biBTb2xhcmlzLiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0FJWAkJNwkvKiBJQk0gQUlYLiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0lSSVgJCTgJLyogU0dJIElyaXguICAqLworQEAgLTE1MCw4ICsxNTEsMTMgQEAKKyAjZGVmaW5lIEVMRk9TQUJJX1RSVTY0CQkxMAkvKiBDb21wYXEgVFJVNjQgVU5JWC4gICovCisgI2RlZmluZSBFTEZPU0FCSV9NT0RFU1RPCTExCS8qIE5vdmVsbCBNb2Rlc3RvLiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX09QRU5CU0QJMTIJLyogT3BlbkJTRC4gICovCisrI2RlZmluZSBFTEZPU0FCSV9PUEVOVk1TCTEzCS8qIE9wZW5WTVMgKi8KKysjZGVmaW5lIEVMRk9TQUJJX05TSwkJMTQJLyogSGV3bGV0dC1QYWNrYXJkIE5vbi1TdG9wIEtlcm5lbCAqLworKyNkZWZpbmUgRUxGT1NBQklfQVJPUwkJMTUJLyogQW1pZ2EgUmVzZWFyY2ggT1MgKi8KKysvKiA2NC0yNTUgQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHZhbHVlIHJhbmdlICovCisgI2RlZmluZSBFTEZPU0FCSV9BUk1fQUVBQkkJNjQJLyogQVJNIEVBQkkgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0FSTQkJOTcJLyogQVJNICovCisrLyogVGhpcyBpcyBkZXByZWNhdGVkPyBJdCdzIG5vdCBpbiB0aGUgbGF0ZXN0IHZlcnNpb24gYW55bW9yZS4gKi8KKyAjZGVmaW5lIEVMRk9TQUJJX1NUQU5EQUxPTkUJMjU1CS8qIFN0YW5kYWxvbmUgKGVtYmVkZGVkKSBhcHBsaWNhdGlvbiAqLworIAorICNkZWZpbmUgRUlfQUJJVkVSU0lPTgk4CQkvKiBBQkkgdmVyc2lvbiAqLworQEAgLTIwNiw3ICsyMTIsNyBAQAorICNkZWZpbmUgRU1fSDhfMzAwSAk0NwkJLyogSGl0YWNoaSBIOC8zMDBIICovCisgI2RlZmluZSBFTV9IOFMJCTQ4CQkvKiBIaXRhY2hpIEg4UyAqLworICNkZWZpbmUgRU1fSDhfNTAwCTQ5CQkvKiBIaXRhY2hpIEg4LzUwMCAqLworLSNkZWZpbmUgRU1fSUFfNjQJNTAJCS8qIEludGVsIE1lcmNlZCAqLworKyNkZWZpbmUgRU1fSUFfNjQJNTAJCS8qIEludGVsIElBNjQgKi8KKyAjZGVmaW5lIEVNX01JUFNfWAk1MQkJLyogU3RhbmZvcmQgTUlQUy1YICovCisgI2RlZmluZSBFTV9DT0xERklSRQk1MgkJLyogTW90b3JvbGEgQ29sZGZpcmUgKi8KKyAjZGVmaW5lIEVNXzY4SEMxMgk1MwkJLyogTW90b3JvbGEgTTY4SEMxMiAqLworQEAgLTIyMCw3ICsyMjYsOCBAQAorICNkZWZpbmUgRU1fVElOWUoJNjEJCS8qIEFkdmFuY2VkIExvZ2ljIENvcnAuIFRpbnlqIGVtYi5mYW0qLworICNkZWZpbmUgRU1fWDg2XzY0CTYyCQkvKiBBTUQgeDg2LTY0IGFyY2hpdGVjdHVyZSAqLworICNkZWZpbmUgRU1fUERTUAkJNjMJCS8qIFNvbnkgRFNQIFByb2Nlc3NvciAqLworLQorKyNkZWZpbmUJRU1fUERQMTAJNjQJCS8qIERpZ2l0YWwgRXF1aXBtZW50IENvcnAuIFBEUC0xMCAqLworKyNkZWZpbmUgRU1fUERQMTEJNjUJCS8qIERpZ2l0YWwgRXF1aXBtZW50IENvcnAuIFBEUC0xMSAqLworICNkZWZpbmUgRU1fRlg2NgkJNjYJCS8qIFNpZW1lbnMgRlg2NiBtaWNyb2NvbnRyb2xsZXIgKi8KKyAjZGVmaW5lIEVNX1NUOVBMVVMJNjcJCS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDkrIDgvMTYgbWMgKi8KKyAjZGVmaW5lIEVNX1NUNwkJNjgJCS8qIFNUbWljcm9lbGVjdHJvbmljcyBTVDcgOCBiaXQgbWMgKi8KK0BAIC0yNTAsNyArMjU3LDIyIEBACisgI2RlZmluZSBFTV9PUEVOUklTQwk5MgkJLyogT3BlblJJU0MgMzItYml0IGVtYmVkZGVkIHByb2Nlc3NvciAqLworICNkZWZpbmUgRU1fQVJDX0E1CTkzCQkvKiBBUkMgQ29yZXMgVGFuZ2VudC1BNSAqLworICNkZWZpbmUgRU1fWFRFTlNBCTk0CQkvKiBUZW5zaWxpY2EgWHRlbnNhIEFyY2hpdGVjdHVyZSAqLworLSNkZWZpbmUgRU1fTlVNCQk5NQorKyNkZWZpbmUJRU1fVklERU9DT1JFCTk1CQkvKiBBbHBoYW1vc2FpYyBWaWRlb0NvcmUgcHJvY2Vzc29yICovCisrI2RlZmluZQlFTV9UTU1fR1BQCTk2CQkvKiBUaG9tcHNvbiBNdWx0aW1lZGlhIEdlbmVyYWwgUHVycG9zZSBQcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX05TMzJLCTk3CQkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIDMyMDAwIHNlcmllcyAqLworKyNkZWZpbmUJRU1fVFBDCQk5OAkJLyogVGVub3IgTmV0d29yayBUUEMgcHJvY2Vzc29yICovCisrI2RlZmluZQlFTV9TTlAxSwk5OQkJLyogVHJlYmlhIFNOUCAxMDAwIHByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fU1QyMDAJMTAwCQkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgKHd3dy5zdC5jb20pIFNUMjAwIG1pY3JvY29udHJvbGxlciAqLworKyNkZWZpbmUgRU1fSVAySyAgICAgICAgIDEwMQkJLyogVWJpY29tIElQMlhYWCBtaWNyb2NvbnRyb2xsZXIgZmFtaWx5ICovCisrI2RlZmluZQlFTV9NQVgJCTEwMgkJLyogTUFYIFByb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fQ1IgICAgICAgICAgIDEwMwkJLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDb21wYWN0UklTQyAqLworKyNkZWZpbmUJRU1fRjJNQzE2CTEwNAkJLyogRnVqaXRzdSBGMk1DMTYgKi8KKysjZGVmaW5lIEVNX01TUDQzMCAgICAgICAxMDUJCS8qIFRJIG1zcDQzMCBtaWNybyBjb250cm9sbGVyICovCisrI2RlZmluZSBFTV9CTEFDS0ZJTiAgICAgMTA2CQkvKiBBbmFsb2cgRGV2aWNlcyBCbGFja2ZpbiAoRFNQKSBwcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX1NFX0MzMwkxMDcJCS8qIFMxQzMzIEZhbWlseSBvZiBTZWlrbyBFcHNvbiBwcm9jZXNzb3JzICovCisrI2RlZmluZQlFTV9TRVAJCTEwOAkJLyogU2hhcnAgZW1iZWRkZWQgbWljcm9wcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX0FSQ0EJCTEwOQkJLyogQXJjYSBSSVNDIE1pY3JvcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9OVU0JCTExMAorIAorIC8qIElmIGl0IGlzIG5lY2Vzc2FyeSB0byBhc3NpZ24gbmV3IHVub2ZmaWNpYWwgRU1fKiB2YWx1ZXMsIHBsZWFzZQorICAgIHBpY2sgbGFyZ2UgcmFuZG9tIG51bWJlcnMgKDB4ODUyMywgMHhhN2YyLCBldGMuKSB0byBtaW5pbWl6ZSB0aGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZl9iZWdpbi5jLUNWRS0yMDE0LTk0NDctZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlOGRkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZl9iZWdpbi5jLUNWRS0yMDE0LTk0NDctZml4LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMzIzY2EwNGEwYzkxODk1NDQwNzVjMTliNDlkYTY3ZjY0NDNhODk1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExpIHhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KK0RhdGU6IFdlZCwgMjEgSmFuIDIwMTUgMDk6MzM6MzggKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gZWxmX2JlZ2luLmM6IENWRS0yMDE0LTk0NDcgZml4CisKK3RoaXMgcGF0Y2ggaXMgZnJvbToKKyBodHRwczovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2NnaXQvZWxmdXRpbHMuZ2l0L2NvbW1pdC8/aWQ9MTQ3MDE4ZTcyOWU3YzIyZWVhYmYxNWI4MmQyNmU0YmY2OGEwZDE4ZQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGxpYmVsZi9lbGZfYmVnaW4uYyB8IDcgKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJlbGYvZWxmX2JlZ2luLmMgYi9saWJlbGYvZWxmX2JlZ2luLmMKK2luZGV4IGU0NmFkZDMuLmU4M2JhMzUgMTAwNjQ0CistLS0gYS9saWJlbGYvZWxmX2JlZ2luLmMKKysrKyBiL2xpYmVsZi9lbGZfYmVnaW4uYworQEAgLTczNiwxMSArNzM2LDggQEAgcmVhZF9sb25nX25hbWVzIChFbGYgKmVsZikKKyAJICAgIGJyZWFrOworIAorIAkgIC8qIE5VTC10ZXJtaW5hdGUgdGhlIHN0cmluZy4gICovCistCSAgKnJ1bnAgPSAnXDAnOworLQorLQkgIC8qIFNraXAgdGhlIE5VTCBieXRlIGFuZCB0aGUgXDAxMi4gICovCistCSAgcnVucCArPSAyOworLQorKwkgICpydW5wKysgPSAnXDAnOworKyAKKyAJICAvKiBBIHNhbml0eSBjaGVjay4gIFNvbWVib2R5IG1pZ2h0IGhhdmUgZ2VuZXJhdGVkIGludmFsaWQKKyAJICAgICBhcmNoaXZlLiAgKi8KKyAJICBpZiAocnVucCA+PSBuZXdwICsgbGVuKQorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZnV0aWxzLWFyLWMtZml4LW51bS1wYXNzZWQtdG8tbWVtc2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxOTYxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZnV0aWxzLWFyLWMtZml4LW51bS1wYXNzZWQtdG8tbWVtc2V0LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworYXIuYyAoZG9fb3Blcl9kZWxldGUpOiBGaXggbnVtIHBhc3NlZCB0byBtZW1zZXQKK25hdGl2ZSBidWlsZCBmYWlsZWQgYXMgZm9sbG93aW5nIG9uIEZlZG9yYTE4KzogCithci5jOiBJbiBmdW5jdGlvbiAnZG9fb3Blcl9kZWxldGUnOgorYXIuYzo5MTg6MzE6IGVycm9yOiBhcmd1bWVudCB0byAnc2l6ZW9mJyBpbiAnbWVtc2V0JyBjYWxsIGlzIHRoZSBzYW1lIGV4cHJlc3Npb24gYXMgdGhlIGRlc3RpbmF0aW9uOyBkaWQgeW91IG1lYW4gdG8gZGVyZWZlcmVuY2UgaXQ/IFstV2Vycm9yPXNpemVvZi1wb2ludGVyLW1lbWFjY2Vzc10KKyAgIG1lbXNldCAoZm91bmQsICdcMCcsIHNpemVvZiAoZm91bmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorVGhlIG9yaWdpbmFsIGNvbW1pdCBpcyBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvY2dpdC9lbGZ1dGlscy5naXQvY29tbWl0L3NyYy9hci5jP2lkPTFhNGQwNjY4ZDE4YmYxMDkwYzVjMDhjZGI1Y2IzYmEyYjhlYjU0MTAKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CisKKy0tLSBlbGZ1dGlscy0wLjE0OC9zcmMvYXIuYy5vcmcJMjAxMy0wMy0xMiAyMToxMjoxNy45MjgyODEzNzUgLTA1MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvYXIuYwkyMDEzLTAzLTEyIDIxOjE1OjMwLjA1MzI4NTI3MSAtMDUwMAorQEAgLTkxNSw3ICs5MTUsNyBAQAorIAkJbG9uZyBpbnQgaW5zdGFuY2UpCisgeworICAgYm9vbCAqZm91bmQgPSBhbGxvY2EgKHNpemVvZiAoYm9vbCkgKiBhcmdjKTsKKy0gIG1lbXNldCAoZm91bmQsICdcMCcsIHNpemVvZiAoZm91bmQpKTsKKysgIG1lbXNldCAoZm91bmQsICdcMCcsIHNpemVvZiAoYm9vbCkgKiBhcmdjKTsKKyAKKyAgIC8qIExpc3Qgb2YgdGhlIGZpbGVzIHdlIGtlZXAuICAqLworICAgc3RydWN0IGFybWVtICp0b19jb3B5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZnV0aWxzLWZzaXplLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmMzUzZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2VsZnV0aWxzLWZzaXplLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworVGhlIEVMRl9UX0xJQiBhbmQgRUxGX1RfR05VSEFTSCBzaXplcyB3ZXJlIG1pc3NpbmcgZnJvbSBmc2l6ZSB0YWJsZS4KKworVGhpcyBjb3VsZCBjYXVzZSBhIGZhaWx1cmUgaW4gdGhlIGVsZipfeGxhdGV0b2YgZnVuY3Rpb24uCisKK2RpZmYgLXVyIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2V4dHR5cGVzLmggZWxmdXRpbHMtMC4xNDgvbGliZWxmL2V4dHR5cGVzLmgKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9leHR0eXBlcy5oCTIwMDktMDEtMDggMTI6NTY6MzcuMDAwMDAwMDAwIC0wODAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2V4dHR5cGVzLmgJMjAxMC0wOC0xOCAxNDowMDozMy4wMDAwMDAwMDAgLTA3MDAKK0BAIC05NCw2ICs5NCw3IEBACisgVmVybmF1eDMyIChFeHRfKTsKKyBTeW1pbmZvMzIgKEV4dF8pOworIE1vdmUzMiAoRXh0Xyk7CisrTGliMzIgKEV4dF8pOworIGF1eHZfdDMyIChFeHRfKTsKKyAKKyBFaGRyNjQgKEV4dF8pOworQEAgLTExMCw2ICsxMTEsNyBAQAorIFZlcm5hdXg2NCAoRXh0Xyk7CisgU3ltaW5mbzY0IChFeHRfKTsKKyBNb3ZlNjQgKEV4dF8pOworK0xpYjY0IChFeHRfKTsKKyBhdXh2X3Q2NCAoRXh0Xyk7CisgCisgI3VuZGVmIFNUQVJUCitkaWZmIC11ciBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2ZzaXplLmMgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZnNpemUuYworLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZnNpemUuYwkyMDA5LTAxLTA4IDEyOjU2OjM3LjAwMDAwMDAwMCAtMDgwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2ZzaXplLmMJMjAxMC0wOC0xOCAxNDoxMTo1Ny4wMDAwMDAwMDAgLTA3MDAKK0BAIC04Nyw3ICs4Nyw5IEBACisgICAgICAgW0VMRl9UX05IRFJdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfTmhkcikpLAkJICAgICAgXAorICAgICAgIFtFTEZfVF9TWU1JTkZPXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X1N5bWluZm8pKSwJICAgICAgXAorICAgICAgIFtFTEZfVF9NT1ZFXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X01vdmUpKSwJCSAgICAgIFwKKy0gICAgICBbRUxGX1RfQVVYVl0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9hdXh2X3QpKQorKyAgICAgIFtFTEZfVF9MSUJdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfTGliKSksCQkgICAgICBcCisrICAgICAgW0VMRl9UX0FVWFZdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfYXV4dl90KSksCSAgICAgIFwKKysgICAgICBbRUxGX1RfR05VSEFTSF0JPSBFTEZXMihMSUJFTEZCSVRTLCBGU1pfV09SRCkKKyAgICAgICBUWVBFX1NJWkVTICgzMikKKyAgICAgfSwKKyAgICAgW0VMRkNMQVNTNjQgLSAxXSA9IHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeC1idWlsZC1nY2MtNC44LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyODY5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeC1idWlsZC1nY2MtNC44LnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgYSB3YXJuaW5nIHNlZW4gd2l0aCBnY2MgNC44IChlc3BlY2lhbGx5IG9uIHVidW50dSAxMy4xMCkKKworfCBhZGRyMmxpbmUuYzogSW4gZnVuY3Rpb24gJ2hhbmRsZV9hZGRyZXNzJzoKK3wgYWRkcjJsaW5lLmM6NDUwOjc6IGVycm9yOiBmb3JtYXQgJyVhJyBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUgJ2Zsb2F0IConLCBidXQgYXJndW1lbnQgMyBoYXMgdHlwZSAnY2hhciAqKicgWy1XZXJyb3I9Zm9ybWF0PV0KK3wgICAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCit8ICAgICAgICBeCit8IGFkZHIybGluZS5jOjQ1Mzo3OiBlcnJvcjogZm9ybWF0ICclYScgZXhwZWN0cyBhcmd1bWVudCBvZiB0eXBlICdmbG9hdCAqJywgYnV0IGFyZ3VtZW50IDMgaGFzIHR5cGUgJ2NoYXIgKionIFstV2Vycm9yPWZvcm1hdD1dCit8ICAgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCit8ICAgICAgICBeCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisKKworJWEgaXMgb2xkIEdOVSBzdHlsZSBhbmQgc2hvdWxkIGJlIGFiYW5kb25lZCBpbiBmYXZvciBvZiAlbQorCitBbHNvIHNlZQorCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU0MzYxCisKK3RvIHN1cHBvcnQgdGhpcyBhc3NlcnRpb24KKworVGhpcyBwYXRjaCBpcyBhZGRlZCB2aWEgcmVkaGF0LWNvbXBhdGliaWxpdHkgcGF0Y2ggc28gbGV0cyByZXZlcnQgdGhpcyBwYXJ0CitoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0NhdXNlZCBieSBhbiBlYXJsaWVyIHBhdGNoXQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2FkZHIybGluZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvYWRkcjJsaW5lLmMJMjAxMy0wOS0yMyAxNzo0Njo0NS41MTM1ODY1MzggLTA3MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMJMjAxMy0wOS0yMyAxNzo0Njo0Ni4zMjk1ODY1NTggLTA3MDAKK0BAIC00NDcsMTAgKzQ0NywxMCBAQAorICAgICAgIGJvb2wgcGFyc2VkID0gZmFsc2U7CisgICAgICAgaW50IGksIGo7CisgICAgICAgY2hhciAqbmFtZSA9IE5VTEw7CistICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKysgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorIAkgICYmIHN0cmluZ1tpXSA9PSAnXDAnKQorIAlwYXJzZWQgPSBhZGp1c3RfdG9fc2VjdGlvbiAobmFtZSwgJmFkZHIsIGR3ZmwpOworLSAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisgCXsKKyAJZGVmYXVsdDoKKyAJICBicmVhazsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC90ZXN0cy9saW5lMmFkZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvdGVzdHMvbGluZTJhZGRyLmMJMjAxMy0wOS0yMyAxNzo0Njo0NS41MjE1ODY1MzggLTA3MDAKKysrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9saW5lMmFkZHIuYwkyMDEzLTA5LTIzIDE3OjQ2OjQ2LjMyOTU4NjU1OCAtMDcwMAorQEAgLTEzMiw3ICsxMzIsNyBAQAorICAgICB7CisgICAgICAgc3RydWN0IGFyZ3MgYSA9IHsgLmFyZyA9IGFyZ3ZbY250XSB9OworIAorLSAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVhW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVtW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorIAl7CisgCWRlZmF1bHQ6CisgCWNhc2UgMDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDYzNGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworZ2NjIDQuNyBkb2VzIG5vdCBsaWtlIHBvaW50ZXIgY29udmVyc2lvbiwgc28gaGF2ZSBhIHZvaWQgKiB0bXAgdmFyIHRvIHdvcmsgCithcm91bmQgZm9sbG93aW5nIGNvbXBpbGF0aW9uIGlzc3VlLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wNy8wNworCit8IG1kNS5jOiBJbiBmdW5jdGlvbiAnbWQ1X2ZpbmlzaF9jdHgnOgorfCBtZDUuYzoxMDg6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IG1kNS5jOjEwOTozOiBlcnJvcjogZGVyZWZlcmVuY2luZyB0eXBlLXB1bm5lZCBwb2ludGVyIHdpbGwgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzIFstV2Vycm9yPXN0cmljdC1hbGlhc2luZ10KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK3wgCit8IG1ha2VbMl06ICoqKiBbbWQ1Lm9dIEVycm9yIDEKK3wgbWFrZVsyXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KK3wgc2hhMS5jOiBJbiBmdW5jdGlvbiAnc2hhMV9maW5pc2hfY3R4JzoKK3wgc2hhMS5jOjEwOTozOiBlcnJvcjogZGVyZWZlcmVuY2luZyB0eXBlLXB1bm5lZCBwb2ludGVyIHdpbGwgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzIFstV2Vycm9yPXN0cmljdC1hbGlhc2luZ10KK3wgc2hhMS5jOjExMTozOiBlcnJvcjogZGVyZWZlcmVuY2luZyB0eXBlLXB1bm5lZCBwb2ludGVyIHdpbGwgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzIFstV2Vycm9yPXN0cmljdC1hbGlhc2luZ10KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKK3wgCit8IG1ha2VbMl06ICoqKiBbc2hhMS5vXSBFcnJvciAxCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWIvbWQ1LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9tZDUuYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9tZDUuYworQEAgLTk1LDYgKzk1LDcgQEAgbWQ1X2ZpbmlzaF9jdHggKGN0eCwgcmVzYnVmKQorICAgLyogVGFrZSB5ZXQgdW5wcm9jZXNzZWQgYnl0ZXMgaW50byBhY2NvdW50LiAgKi8KKyAgIG1kNV91aW50MzIgYnl0ZXMgPSBjdHgtPmJ1ZmxlbjsKKyAgIHNpemVfdCBwYWQ7CisrICB2b2lkICogdG1wOworIAorICAgLyogTm93IGNvdW50IHJlbWFpbmluZyBieXRlcy4gICovCisgICBjdHgtPnRvdGFsWzBdICs9IGJ5dGVzOworQEAgLTEwNSw5ICsxMDYsMTAgQEAgbWQ1X2ZpbmlzaF9jdHggKGN0eCwgcmVzYnVmKQorICAgbWVtY3B5ICgmY3R4LT5idWZmZXJbYnl0ZXNdLCBmaWxsYnVmLCBwYWQpOworIAorICAgLyogUHV0IHRoZSA2NC1iaXQgZmlsZSBsZW5ndGggaW4gKmJpdHMqIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCistICAqKG1kNV91aW50MzIgKikgJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXSA9IFNXQVAgKGN0eC0+dG90YWxbMF0gPDwgMyk7CistICAqKG1kNV91aW50MzIgKikgJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkICsgNF0gPSBTV0FQICgoY3R4LT50b3RhbFsxXSA8PCAzKSB8CistCQkJCQkJCShjdHgtPnRvdGFsWzBdID4+IDI5KSk7CisrICB0bXAgPSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWRdOworKyAgKihtZDVfdWludDMyICopIHRtcCA9IFNXQVAgKGN0eC0+dG90YWxbMF0gPDwgMyk7CisrICB0bXAgPSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWQgKyA0XTsKKysgICoobWQ1X3VpbnQzMiAqKSB0bXAgPSBTV0FQICgoY3R4LT50b3RhbFsxXSA8PCAzKSB8IChjdHgtPnRvdGFsWzBdID4+IDI5KSk7CisgCisgICAvKiBQcm9jZXNzIGxhc3QgYnl0ZXMuICAqLworICAgbWQ1X3Byb2Nlc3NfYmxvY2sgKGN0eC0+YnVmZmVyLCBieXRlcyArIHBhZCArIDgsIGN0eCk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL3NoYTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliL3NoYTEuYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9zaGExLmMKK0BAIC05Niw2ICs5Niw3IEBAIHNoYTFfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICAvKiBUYWtlIHlldCB1bnByb2Nlc3NlZCBieXRlcyBpbnRvIGFjY291bnQuICAqLworICAgc2hhMV91aW50MzIgYnl0ZXMgPSBjdHgtPmJ1ZmxlbjsKKyAgIHNpemVfdCBwYWQ7CisrICB2b2lkICogdG1wOworIAorICAgLyogTm93IGNvdW50IHJlbWFpbmluZyBieXRlcy4gICovCisgICBjdHgtPnRvdGFsWzBdICs9IGJ5dGVzOworQEAgLTEwNiw5ICsxMDcsMTAgQEAgc2hhMV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIG1lbWNweSAoJmN0eC0+YnVmZmVyW2J5dGVzXSwgZmlsbGJ1ZiwgcGFkKTsKKyAKKyAgIC8qIFB1dCB0aGUgNjQtYml0IGZpbGUgbGVuZ3RoIGluICpiaXRzKiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworLSAgKihzaGExX3VpbnQzMiAqKSAmY3R4LT5idWZmZXJbYnl0ZXMgKyBwYWRdID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfAorLQkJCQkJCSAgICAgKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKy0gICooc2hhMV91aW50MzIgKikgJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkICsgNF0gPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXTsKKysgICooc2hhMV91aW50MzIgKikgdG1wID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfCAoY3R4LT50b3RhbFswXSA+PiAyOSkpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkICsgNF07CisrICAqKHNoYTFfdWludDMyICopIHRtcCA9IFNXQVAgKGN0eC0+dG90YWxbMF0gPDwgMyk7CisgCisgICAvKiBQcm9jZXNzIGxhc3QgYnl0ZXMuICAqLworICAgc2hhMV9wcm9jZXNzX2Jsb2NrIChjdHgtPmJ1ZmZlciwgYnl0ZXMgKyBwYWQgKyA4LCBjdHgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvaHBwYV9iYWNrZW5kLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZiOTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvaHBwYV9iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw4MDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfaW5pdC5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDc0IEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgUEEtUklTQyBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCXBhcmlzY18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX1BBUklTQ18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gcGFyaXNjX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworKworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgaW50IHBhNjQgPSAwOworKworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgaWYgKGVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkciAmJiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKSkKKysgICAgICBwYTY0ID0gMTsKKysgIH0KKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBlaC0+bmFtZSA9ICJQQS1SSVNDIjsKKysgIHBhcmlzY19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIG1hY2hpbmVfZmxhZ19jaGVjayk7CisrICBIT09LIChlaCwgc3ltYm9sX3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VnbWVudF90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHNlY3Rpb25fdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysgIGlmIChwYTY0KQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzI7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZWdzLmMJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMTU5IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIFBBLVJJU0MgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrcGFyaXNjX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsLCBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaW50IHBhNjQgPSAwOworKworKyAgaWYgKGVibC0+ZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlYmwtPmVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHItPmVfZmxhZ3MgJiBFRl9QQVJJU0NfV0lERSkKKysgICAgICBwYTY0ID0gMTsKKysgIH0KKysKKysgIGludCBucmVncyA9IHBhNjQgPyAxMjcgOiAxMjg7CisrCisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gbnJlZ3M7CisrCisrICBpZiAocmVnbm8gPCAwIHx8IHJlZ25vID49IG5yZWdzIHx8IG5hbWVsZW4gPCA2KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiUiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICB7CisrICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjQ7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDMyOworKyAgICB9CisrICB9CisrICBlbHNlIGlmIChyZWdubyA9PSAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gNTsKKysgICAgfQorKyAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgIH0KKysgIGVsc2UKKysgIHsKKysgICAgKnNldG5hbWUgPSAiRlBVIjsKKysgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgIGlmIChwYTY0KQorKyAgICB7CisrCSpiaXRzID0gNjQ7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDMyOworKyAgICB9CisrICB9CisrCisrICBpZiAocmVnbm8gPCAzMykgeworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDAgLi4uIDk6CisrICAgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgICAgbmFtZVsxXSA9IHJlZ25vICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDEwIC4uLiAzMToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gLyAxMCArICcwJzsKKysgICAgICAgIG5hbWVbMl0gPSByZWdubyAlIDEwICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDMyOgorKwkqcHJlZml4ID0gTlVMTDsKKysJbmFtZVswXSA9ICdTJzsKKysJbmFtZVsxXSA9ICdBJzsKKysJbmFtZVsyXSA9ICdSJzsKKysJbmFtZWxlbiA9IDM7CisrCWJyZWFrOworKyAgICAgIH0KKysgIH0KKysgIGVsc2UgeworKyAgICBpZiAocGE2NCAmJiAoKHJlZ25vIC0gNzIpICUgMikpIHsKKysgICAgICAqc2V0bmFtZSA9IE5VTEw7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChyZWdubykKKysgICAgICB7CisrICAgICAgY2FzZSA3MiArIDAgLi4uIDcyICsgMTE6CisrICAgICAgICBuYW1lWzBdID0gJ2YnOworKwluYW1lWzFdID0gJ3InOworKyAgICAgICAgbmFtZVsyXSA9IChyZWdubyArIDggLSA3MikgLyAyICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgICBpZiAoKHJlZ25vICsgOCAtIDcyKSAlIDIpIHsKKysJICBuYW1lWzNdID0gJ1InOworKwkgIG5hbWVsZW4rKzsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgNzIgKyAxMiAuLi4gNzIgKyA1NToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgLyAxMCArICcwJzsKKysgICAgICAgIG5hbWVbM10gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAlIDEwICsgJzAnOworKyAgICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgICBpZiAoKHJlZ25vICsgOCAtIDcyKSAlIDIpIHsKKysJICBuYW1lWzRdID0gJ1InOworKwkgIG5hbWVsZW4rKzsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICAqc2V0bmFtZSA9IE5VTEw7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgICB9CisrICB9CisrICBuYW1lW25hbWVsZW4rK10gPSAnXDAnOworKyAgcmV0dXJuIG5hbWVsZW47CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVsb2MuZGVmCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDEyOCBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIFBBLVJJU0MuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKy8qCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjMyLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjIxTCwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIxN1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE0UiwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoUENSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE3RiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0UiwJCVJFTHxFWEVDKQorK1JFTE9DX1RZUEUgKERQUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRXUiwJCVJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0RFIsICAgICAgICAgIFJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0UiwJCVJFTCkKKytSRUxPQ19UWVBFIChHUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERMVElORDE0RiwJCTApCisrUkVMT0NfVFlQRSAoU0VUQkFTRSwJCTApCisrUkVMT0NfVFlQRSAoU0VDUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoQkFTRVJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE3UiwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoU0VHQkFTRSwJCTApCisrUkVMT0NfVFlQRSAoU0VHUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUT0ZGMjFMLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNFIsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjMyLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIyMUwsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0UiwJMCkKKytSRUxPQ19UWVBFIChGUFRSNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBMQUJFTDMyLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyQywJCTApCisrUkVMT0NfVFlQRSAoUENSRUwyMkYsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKERJUjY0LAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChESVIxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE0RFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2V0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZERiwJCVJFTCkKKytSRUxPQ19UWVBFIChHUFJFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjY0LAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNkYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0V1IsCTApCisrUkVMT0NfVFlQRSAoQkFTRVJFTDE0RFIsCTApCisrUkVMT0NfVFlQRSAoU0VHUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjY0LAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNFdSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNERSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2V0YsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2REYsCTApCisrUkVMT0NfVFlQRSAoQ09QWSwJCUVYRUMpCisrUkVMT0NfVFlQRSAoSVBMVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEVQTFQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMzIsCQlEWU4pCisrUkVMT0NfVFlQRSAoVFBSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0UiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RiwJMCkKKytSRUxPQ19UWVBFIChUUFJFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDY0LAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNERSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2REYsCTApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDMyLAlEWU4pCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LAlEWU4pCisrCisrI2RlZmluZSBOT19SRUxBVElWRV9SRUxPQyAgICAgICAxCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JldHZhbC5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDIxMyBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvUEEtUklTQyBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysjaW5jbHVkZSAibGliZWJsX3BhcmlzYy5oIgorKworKy8qICVyMjgsIG9yIHBhaXIgJXIyOCwgJXIyOS4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAlZnI0TCwgb3IgcGFpciAlZnI0TCwgJWZyNFIgb24gcGEtMzIgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnMzIgMgorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIzMiA0CisrCisrLyogJGZyNCAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzIgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrCisrI2lmIDAKKysvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKysgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gQWRkcmVzcyBvZiB0aGUgbG9jYXRpb24gaXMgc3RvcmVkCisrICAgaW4gJXIyOCBiZWZvcmUgZnVuY3Rpb24gY2FsbCwgYnV0IGl0IG1heSBiZSBjaGFuZ2VkIGJ5IGZ1bmN0aW9uLiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzI4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKyNlbmRpZgorKworK3N0YXRpYyBpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwLCBpbnQgcGE2NCkKKyt7CisrICBEd2FyZl9Xb3JkIHJlZ3NpemUgPSBwYTY0ID8gOCA6IDQ7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX211dGFibGVfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCSAgeworKwkgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgICBzaXplID0gNDsKKysJICAgIGVsc2UKKysJICAgICAgcmV0dXJuIC0xOworKwkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwkgIHsKKysJICAgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgICAgcmV0dXJuIC0xOworKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJaWYgKHBhNjQpIHsKKysJCSAgKmxvY3AgPSBsb2NfZnByZWc7CisrCQkgIGlmIChzaXplIDw9IDgpCisrCQkgICAgICByZXR1cm4gbmxvY19mcHJlZzsKKysJCX0KKysJCWVsc2UgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzMyOworKwkJICBpZiAoc2l6ZSA8PSA0KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnMzI7CisrCQkgIGVsc2UgaWYgKHNpemUgPD0gOCkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZ3BhaXIzMjsKKysJCX0KKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwlpZiAocGE2NCkKKysJICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCWVsc2UKKysJICAqbG9jcCA9IGxvY19pbnRyZWczMjsKKysJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrCWlmIChzaXplIDw9IDIgKiByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrCisrCS8qIEVsc2UgZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6IHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2FnZ3JlZ2F0ZV9zaXplICh0eXBlZGllLCAmc2l6ZSkgIT0gMCkKKysJICByZXR1cm4gLTE7CisrCWlmIChwYTY0KQorKyAgICAgICAgICAqbG9jcCA9IGxvY19pbnRyZWc7CisrCWVsc2UKKysJICAqbG9jcCA9IGxvY19pbnRyZWczMjsKKysgICAgICAgIGlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKyAgICAgICAgaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysjaWYgMAorKwkvKiB0aGVyZSBzaG91bGQgYmUgc29tZSB3YXkgdG8ga25vdyB0aGlzIGxvY2F0aW9uLi4uIEJ1dCBJIGRvIG5vdCBzZWUgaXQuICovCisrICAgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrI2VuZGlmCisrCS8qIGZhbGwgdGhyb3VnaC4gICovCisrICAgICAgfQorKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQorKworK2ludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzIgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICByZXR1cm4gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAwKTsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDEpOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2Nfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2Nfc3ltYm9sLmMJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMTEyIEBACisrLyogUEEtUklTQyBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCXBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zZWdtZW50X3R5cGVfbmFtZSAoaW50IHNlZ21lbnQsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoIChzZWdtZW50KQorKyAgICB7CisrICAgIGNhc2UgUFRfUEFSSVNDX0FSQ0hFWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfQVJDSEVYVCI7CisrICAgIGNhc2UgUFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgICB9CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogUmV0dXJuIHN5bWJvbGljIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbCB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc3ltYm9sX3R5cGVfbmFtZShpbnQgc3ltYm9sLCBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKyAgICBzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrCWlmIChzeW1ib2wgPT0gU1RUX1BBUklTQ19NSUxMSUNPREUpCisrCSAgcmV0dXJuICJQQVJJU0NfTUlMTEkiOworKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrLyogUmV0dXJuIHN5bWJvbGljIHJlcHJlc2VudGF0aW9uIG9mIHNlY3Rpb24gdHlwZS4gICovCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlY3Rpb25fdHlwZV9uYW1lIChpbnQgdHlwZSwKKysJCQljaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCXNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFNIVF9QQVJJU0NfRVhUOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0VYVCI7CisrICAgIGNhc2UgU0hUX1BBUklTQ19VTldJTkQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfVU5XSU5EIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX0RPQzoKKysgICAgICByZXR1cm4gIlBBUklTQ19ET0MiOworKyAgICB9CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogQ2hlY2sgd2hldGhlciBtYWNoaW5lIGZsYWdzIGFyZSB2YWxpZC4gICovCisrYm9vbAorK3BhcmlzY19tYWNoaW5lX2ZsYWdfY2hlY2sgKEdFbGZfV29yZCBmbGFncykKKyt7CisrICBpZiAoZmxhZ3MgJn4gKEVGX1BBUklTQ19UUkFQTklMIHwgRUZfUEFSSVNDX0VYVCB8IEVGX1BBUklTQ19MU0IgfAorKwlFRl9QQVJJU0NfV0lERSB8IEVGX1BBUklTQ19OT19LQUJQIHwKKysJRUZfUEFSSVNDX0xBWllTV0FQIHwgRUZfUEFSSVNDX0FSQ0gpKQorKyAgICByZXR1cm4gMDsKKysKKysgIEdFbGZfV29yZCBhcmNoID0gZmxhZ3MgJiBFRl9QQVJJU0NfQVJDSDsKKysKKysgIHJldHVybiAoKGFyY2ggPT0gRUZBX1BBUklTQ18xXzApIHx8IChhcmNoID09IEVGQV9QQVJJU0NfMV8xKSB8fAorKyAgICAgIChhcmNoID09IEVGQV9QQVJJU0NfMl8wKSk7CisrfQorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK3BhcmlzY19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX1BBUklTQ19ESVI2NDoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUw2NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGNhc2UgUl9QQVJJU0NfRElSMzI6CisrICAgIGNhc2UgUl9QQVJJU0NfU0VDUkVMMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1dPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9saWJlYmxfcGFyaXNjLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9saWJlYmxfcGFyaXNjLmgJMjAxMC0wNC0yNCAxMDoxMDo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsOSBAQAorKyNpZm5kZWYgX0xJQkVCTF9IUFBBX0gKKysjZGVmaW5lIF9MSUJFQkxfSFBQQV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fMzIoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrZXh0ZXJuIGludCBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0KER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworKworKyNlbmRpZgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTI0IDEwOjEwOjQxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMjksMTEgKzI5LDExIEBACisgCSAgIC1JJCh0b3Bfc3JjZGlyKS9saWJlbGYgLUkkKHRvcF9zcmNkaXIpL2xpYmR3CisgCisgCistbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwCisrbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgXAorIAkgICAgIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIGxpYmVibF9wcGM2NF9waWMuYSBcCistCSAgICAgbGliZWJsX3MzOTBfcGljLmEKKysJICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTk1LDYgKzk1LDkgQEAKKyBsaWJlYmxfczM5MF9waWNfYV9TT1VSQ0VTID0gJChzMzkwX1NSQ1MpCisgYW1fbGliZWJsX3MzOTBfcGljX2FfT0JKRUNUUyA9ICQoczM5MF9TUkNTOi5jPS5vcykKKyAKKytwYXJpc2NfU1JDUyA9IHBhcmlzY19pbml0LmMgcGFyaXNjX3N5bWJvbC5jIHBhcmlzY19yZWdzLmMgcGFyaXNjX3JldHZhbC5jCisrbGliZWJsX3BhcmlzY19waWNfYV9TT1VSQ0VTID0gJChwYXJpc2NfU1JDUykKKythbV9saWJlYmxfcGFyaXNjX3BpY19hX09CSkVDVFMgPSAkKHBhcmlzY19TUkNTOi5jPS5vcykKKyAKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMTc4OSwxNiArMTc4OSwyNCBAQAorICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxN0YJMTIJLyogMTcgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFIJMTQJLyogUmlnaHQgMTQgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfRFBSRUwyMUwJMTgJLyogTGVmdCAyMSBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0V1IJMTkKKysjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTREUgkyMAorICNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFIJMjIJLyogUmlnaHQgMTQgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwyMUwJMjYJLyogR1AtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19HUFJFTDE0UgkzMAkvKiBHUC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjIxTAkzNAkvKiBMVC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTRSCTM4CS8qIExULXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RMVElORDE0RgkzOQorKyNkZWZpbmUgUl9QQVJJU0NfU0VUQkFTRQk0MAorICNkZWZpbmUgUl9QQVJJU0NfU0VDUkVMMzIJNDEJLyogMzIgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMjFMCTQyCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTdSCTQzCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTRSCTQ2CisgI2RlZmluZSBSX1BBUklTQ19TRUdCQVNFCTQ4CS8qIE5vIHJlbG9jYXRpb24sIHNldCBzZWdtZW50IGJhc2UuICAqLworICNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMMzIJNDkJLyogMzIgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYyMUwJNTAJLyogUExUIHJlbC4gYWRkcmVzcywgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0Ugk1NAkvKiBQTFQgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0Rgk1NQorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjMyCTU3CS8qIDMyIGJpdHMgTFQtcmVsLiBmdW5jdGlvbiBwb2ludGVyLiAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjIxTAk1OAkvKiBMVC1yZWwuIGZjdCBwdHIsIGxlZnQgMjEgYml0cy4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIxNFIJNjIJLyogTFQtcmVsLiBmY3QgcHRyLCByaWdodCAxNCBiaXRzLiAqLworQEAgLTE4MDcsNiArMTgxNSw3IEBACisgI2RlZmluZSBSX1BBUklTQ19QTEFCRUwyMUwJNjYJLyogTGVmdCAyMSBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMTRSCTcwCS8qIFJpZ2h0IDE0IGJpdHMgb2YgZmRlc2MgYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDY0CTcyCS8qIDY0IGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjJDCTczCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyRgk3NAkvKiAyMiBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0V1IJNzUJLyogUEMtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTREUgk3NgkvKiBQQyByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworQEAgLTE4MzIsNiArMTg0MSw4IEBACisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2V0YJMTAyCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZERgkxMDMJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfU0VDUkVMNjQJMTA0CS8qIDY0IGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0V1IJMTA3CisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTREUgkxMDgKKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDY0CTExMgkvKiA2NCBiaXRzIHNlZ21lbnQgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0V1IJMTE1CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTREUgkxMTYJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9pMzg2X2Rpcy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvaTM4Nl9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNjMDFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvaTM4Nl9kaXMuaApAQCAtMCwwICsxLDE2NTcgQEAKKyNkZWZpbmUgTU5FTU9OSUNfQklUUyAxMAorI2RlZmluZSBTVUZGSVhfQklUUyAzCisjZGVmaW5lIEZDVDFfQklUUyA3CisjZGVmaW5lIFNUUjFfQklUUyA0CisjZGVmaW5lIE9GRjFfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMV8xX0JJQVMgMworI2RlZmluZSBPRkYxXzJfQklUUyA3CisjZGVmaW5lIE9GRjFfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMV8zX0JJVFMgMQorI2RlZmluZSBPRkYxXzNfQklBUyA3CisjZGVmaW5lIEZDVDJfQklUUyA2CisjZGVmaW5lIFNUUjJfQklUUyAyCisjZGVmaW5lIE9GRjJfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMl8xX0JJQVMgNQorI2RlZmluZSBPRkYyXzJfQklUUyA3CisjZGVmaW5lIE9GRjJfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJVFMgNAorI2RlZmluZSBPRkYyXzNfQklBUyA3CisjZGVmaW5lIEZDVDNfQklUUyA0CisjZGVmaW5lIFNUUjNfQklUUyAxCisjZGVmaW5lIE9GRjNfMV9CSVRTIDYKKyNkZWZpbmUgT0ZGM18xX0JJQVMgMTAKKyNkZWZpbmUgT0ZGM18yX0JJVFMgMQorI2RlZmluZSBPRkYzXzJfQklBUyAyMQorCisjaW5jbHVkZSA8aTM4Nl9kYXRhLmg+CisKKyNkZWZpbmUgc3VmZml4X25vbmUgMAorI2RlZmluZSBzdWZmaXhfdyAxCisjZGVmaW5lIHN1ZmZpeF93MCAyCisjZGVmaW5lIHN1ZmZpeF9XIDMKKyNkZWZpbmUgc3VmZml4X3R0dG4gNAorI2RlZmluZSBzdWZmaXhfRCA3CisjZGVmaW5lIHN1ZmZpeF93MSA1CisjZGVmaW5lIHN1ZmZpeF9XMSA2CisKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMV9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2F4LAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2Rpc3A4LAorICBGQ1RfZHNfYngsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tJHMsCisgIEZDVF9pbW0kdywKKyAgRkNUX2ltbTE2LAorICBGQ1RfaW1tOCwKKyAgRkNUX2ltbXM4LAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJDE2cl9tLAorICBGQ1RfbW9kJDY0cl9tLAorICBGQ1RfbW9kJDhyX20sCisgIEZDVF9tb2Qkcl9tLAorICBGQ1RfbW9kJHJfbSR3LAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWcxNiwKKyAgRkNUX3JlZzY0LAorICBGQ1RfcmVsLAorICBGQ1Rfc2VsLAorICBGQ1Rfc3JlZzIsCisgIEZDVF9zcmVnMywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDFfc3RyW10gPQorICAiJWF4XDAiCisgICIlY2xcMCIKKyAgIiVlYXhcMCIKKyAgIiVzdFwwIgorICAiJXhtbTBcMCIKKyAgIioiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AxX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNCwKKyAgOCwKKyAgMTMsCisgIDE3LAorICAyMywKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDJfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9hYnN2YWwsCisgIEZDVF9heCR3LAorICBGQ1RfY2NjLAorICBGQ1RfZGRkLAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbTgsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2QkNjRyX20sCisgIEZDVF9tb2Qkcl9tLAorICBGQ1RfbW9kJHJfbSR3LAorICBGQ1RfbW9kYSRyX20sCisgIEZDVF9yZWcsCisgIEZDVF9yZWckdywKKyAgRkNUX3JlZzY0LAorICBGQ1Rfc3JlZzMsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AyX3N0cltdID0KKyAgIiVlY3hcMCIKKyAgIiVzdCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDJfc3RyX2lkeFtdID0geworICAwLAorICA1LAorfTsKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wM19mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2Qkcl9tLAorICBGQ1RfcmVnLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wM19zdHJbXSA9CisgICIlZWR4IjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wM19zdHJfaWR4W10gPSB7CisgIDAsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnN0cl9lbmMgaW5zdHJ0YWJbXSA9Cit7CisgIHsgLm1uZW1vbmljID0gTU5FX2FhYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hYW0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FhcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hcnBsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JvdW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JzZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnN3YXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsdHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzZW50ZXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2V4aXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHMsIC5yZXAgPSAwLCAucmVwZSA9IDEsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB4Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAxMSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSA4LCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB4Y2hnOGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NwdWlkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRkcTJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kYXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2VtbXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbm9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY2hzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWJzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdHN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meGFtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGwyZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkcGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxnMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbG4yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGR6LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mMnhtMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnlsMngsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcGF0YW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4dHJhY3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmluY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnByZW0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4cDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzcXJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcm5kaW50LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2NhbGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRlbnYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRjdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RlbnYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0Y3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meGNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGRwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWxwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3VicnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAxLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmJsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmJzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY2hzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY2xleCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmluaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z3YWl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm51LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGVjc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdnJsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZmcmVlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmljb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmljb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmluY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5pbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHRwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHRwbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc2F2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hsdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaWRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDIsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludDMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludG8sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N3YXBncywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW52bHBnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNiwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xqbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sYWhmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWF2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGdkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDIsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGlkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDIsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG1zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9jaywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9kcywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wbmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDM1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNibCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Zzd2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92emJsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnp3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9uZWcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXVzZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbm9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BjbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbm90LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXRzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDIsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkbXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZHBtYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmR0c2MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NjYXMsIC5yZXAgPSAwLCAucmVwZSA9IDEsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWxhdW5jaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZXN1bWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9mZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZWFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Ztd3JpdGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2dkdGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vbml0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDMsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMSwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA0LCAuc3RyMyA9IDEsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXdhaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDMsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMSwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2lkdGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Ntc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0b3MsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWQyYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdmVyciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdmVydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd2JpbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaG50YSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h0MCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h0MSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h0MiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbm9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV93cm1zciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGxhdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2VtbXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHhvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsdHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbGVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHVub3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBuZXFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sdHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBvcmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsdHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbGVzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHVub3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBuZXFzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sdHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBvcmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4cnN0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4c2F2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGRteGNzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RteGNzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2xkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNrbHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2hwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNoZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2kyc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2kyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwaTJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0c2Qyc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0c3Myc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c3Myc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Vjb21pc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY29taXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZ2V0c2VjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm1za3BzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjcHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29ycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0ZHEycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWluc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2x3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2x3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Nzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3NkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xxZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tocWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1Zmh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hhZGRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hhZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hzdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hzdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50aSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wZXh0cncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2h1ZnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHEycSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Ztc2tiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdmdiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bhdmd3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGRkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bHVkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXNrbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHVic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHVic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWdudywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWdudywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGhyc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbGlnbnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1jbGVhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm14b24sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcHRybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcHRyc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xmbHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kdnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kcHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luc2VydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXBzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXNkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGJsZW5kdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21waXN0cmksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waG1pbnBvc3V3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4d3EsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4d3EsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B0ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorfTsKK3N0YXRpYyBjb25zdCB1aW50OF90IG1hdGNoX2RhdGFbXSA9Cit7CisgIDB4MTEsIDB4MzcsCisgIDB4MjIsIDB4ZDUsIDB4YSwKKyAgMHgyMiwgMHhkNCwgMHhhLAorICAweDExLCAweDNmLAorICAweDEsIDB4ZmUsIDB4MTQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4MTAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDAsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgyNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHgyMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MTIsIDB4NjMsIDAsIDAsCisgIDB4MTIsIDB4NjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJkLCAwLCAwLAorICAweDEyLCAweGYsIDB4ZjgsIDB4YzgsCisgIDB4MjMsIDB4ZiwgMHhhMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDB4YmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGIzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhhYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDI4LAorICAweDExLCAweGU4LAorICAweDEyLCAweGZmLCAweDM4LCAweDEwLAorICAweDExLCAweDlhLAorICAweDEyLCAweGZmLCAweDM4LCAweDE4LAorICAweDExLCAweDk4LAorICAweDExLCAweDk5LAorICAweDExLCAweGY4LAorICAweDExLCAweGZjLAorICAweDExLCAweGZhLAorICAweDIyLCAweGYsIDB4NSwKKyAgMHgyMiwgMHhmLCAweDYsCisgIDB4MjIsIDB4ZiwgMHg3LAorICAweDIyLCAweGYsIDB4MzQsCisgIDB4MjIsIDB4ZiwgMHgzNSwKKyAgMHgxMSwgMHhmNSwKKyAgMHgxMywgMHhmLCAweGYwLCAweDQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4M2MsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweDM4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4M2EsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGMyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE2LAorICAweDEzLCAweGYsIDB4ZmUsIDB4YjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YTIsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MTEsIDB4MjcsCisgIDB4MTEsIDB4MmYsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMHg4LAorICAweDEsIDB4ZjgsIDB4NDgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhmLCAweDc3LAorICAweDExLCAweGM4LAorICAweDIyLCAweGQ5LCAweGQwLAorICAweDIyLCAweGQ5LCAweGUwLAorICAweDIyLCAweGQ5LCAweGUxLAorICAweDIyLCAweGQ5LCAweGU0LAorICAweDIyLCAweGQ5LCAweGU1LAorICAweDIyLCAweGQ5LCAweGU4LAorICAweDIyLCAweGQ5LCAweGU5LAorICAweDIyLCAweGQ5LCAweGVhLAorICAweDIyLCAweGQ5LCAweGViLAorICAweDIyLCAweGQ5LCAweGVjLAorICAweDIyLCAweGQ5LCAweGVkLAorICAweDIyLCAweGQ5LCAweGVlLAorICAweDIyLCAweGQ5LCAweGYwLAorICAweDIyLCAweGQ5LCAweGYxLAorICAweDIyLCAweGQ5LCAweGYyLAorICAweDIyLCAweGQ5LCAweGYzLAorICAweDIyLCAweGQ5LCAweGY0LAorICAweDIyLCAweGQ5LCAweGY1LAorICAweDIyLCAweGQ5LCAweGY2LAorICAweDIyLCAweGQ5LCAweGY3LAorICAweDIyLCAweGQ5LCAweGY4LAorICAweDIyLCAweGQ5LCAweGY5LAorICAweDIyLCAweGQ5LCAweGZhLAorICAweDIyLCAweGQ5LCAweGZiLAorICAweDIyLCAweGQ5LCAweGZjLAorICAweDIyLCAweGQ5LCAweGZkLAorICAweDIyLCAweGQ5LCAweGZlLAorICAweDIyLCAweGQ5LCAweGZmLAorICAweDEyLCAweGQ4LCAweGY4LCAweGMwLAorICAweDEyLCAweGRjLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHg4LAorICAweDEyLCAweGQ4LCAweGY4LCAweGUwLAorICAweDEyLCAweGRjLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDEwLAorICAweDEyLCAweGRkLCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhjOCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTAsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhlOCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDI4LAorICAweDIyLCAweGRmLCAweGUwLAorICAweDEyLCAweGRmLCAweDM4LCAweDIwLAorICAweDEyLCAweGRmLCAweGY4LCAweGYwLAorICAweDEyLCAweGRmLCAweDM4LCAweDMwLAorICAweDIyLCAweGQ5LCAweGUwLAorICAweDMzLCAweDliLCAweGRiLCAweGUyLAorICAweDMzLCAweDliLCAweGRiLCAweGUzLAorICAweDExLCAweDliLAorICAweDIyLCAweGRiLCAweGUyLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGM4LAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQ4LAorICAweDEyLCAweGRiLCAweGY4LCAweGMwLAorICAweDEyLCAweGRiLCAweGY4LCAweGM4LAorICAweDEyLCAweGRiLCAweGY4LCAweGQwLAorICAweDEyLCAweGRiLCAweGY4LCAweGQ4LAorICAweDEyLCAweGQ4LCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhkZSwgMHhkOSwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDMwLAorICAweDEyLCAweGRhLCAweDM4LCAweDMwLAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRlLCAweDM4LCAweDMwLAorICAweDEyLCAweGRlLCAweGY4LCAweGY4LAorICAweDEyLCAweGQ4LCAweGY4LCAweGY4LAorICAweDEyLCAweGRjLCAweGY4LCAweGY4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZGEsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZGUsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDE4LAorICAweDEyLCAweGRmLCAweDM4LCAwLAorICAweDEyLCAweGRiLCAweDM4LCAwLAorICAweDEyLCAweGRmLCAweDM4LCAweDI4LAorICAweDIyLCAweGQ5LCAweGY3LAorICAweDIyLCAweGRiLCAweGUzLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkOSwgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAwLAorICAweDEyLCAweGRkLCAweGY4LCAweGUwLAorICAweDEyLCAweGRkLCAweDM4LCAweDIwLAorICAweDEyLCAweGRkLCAweGY4LCAweGU4LAorICAweDEyLCAweGRkLCAweDM4LCAweDMwLAorICAweDEyLCAweGRkLCAweDM4LCAweDM4LAorICAweDExLCAweGY0LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGFmLCAwLCAwLAorICAweDIsIDB4ZmQsIDB4NjksIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhlNCwKKyAgMHgxLCAweGZlLCAweGVjLAorICAweDIsIDB4ZmUsIDB4ZmUsIDB4MzgsIDAsCisgIDB4MSwgMHhmOCwgMHg0MCwKKyAgMHgxLCAweGZlLCAweDZjLAorICAweDExLCAweGNkLAorICAweDExLCAweGNjLAorICAweDExLCAweGNlLAorICAweDIyLCAweGYsIDB4OCwKKyAgMHgzMywgMHhmLCAweDEsIDB4ZjgsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDM4LAorICAweDExLCAweGNmLAorICAweDEsIDB4ZjAsIDB4NzAsCisgIDB4MTIsIDB4ZiwgMHhmMCwgMHg4MCwKKyAgMHgxMywgMHhmLCAweGYwLCAweDkwLCAweDM4LCAwLAorICAweDExLCAweGUzLAorICAweDExLCAweGViLAorICAweDExLCAweGU5LAorICAweDEyLCAweGZmLCAweDM4LCAweDIwLAorICAweDExLCAweGVhLAorICAweDEyLCAweGZmLCAweDM4LCAweDI4LAorICAweDExLCAweDlmLAorICAweDIzLCAweGYsIDB4MiwgMCwgMCwKKyAgMHgxMiwgMHhjNSwgMCwgMCwKKyAgMHgxMiwgMHg4ZCwgMCwgMCwKKyAgMHgxMSwgMHhjOSwKKyAgMHgxMiwgMHhjNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgxOCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgzMCwKKyAgMHgxMSwgMHhmMCwKKyAgMHgxLCAweGZlLCAweGFjLAorICAweDExLCAweGUyLAorICAweDExLCAweGUxLAorICAweDExLCAweGUwLAorICAweDIzLCAweGYsIDB4MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGIyLCAwLCAwLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDhhLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4YzYsIDB4MzgsIDAsCisgIDB4MSwgMHhmMCwgMHhiMCwKKyAgMHgxLCAweGZlLCAweGEwLAorICAweDEsIDB4ZmUsIDB4YTIsCisgIDB4MjMsIDB4ZiwgMHgyMCwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIyLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjEsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMywgMHhjMCwgMHhjMCwKKyAgMHgxMiwgMHg4YywgMCwgMCwKKyAgMHgxMiwgMHg4ZSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE0LAorICAweDIzLCAweGYsIDB4YmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YjcsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDE4LAorICAweDIyLCAweGYzLCAweDkwLAorICAweDExLCAweDkwLAorICAweDM0LCAweGYzLCAweGYsIDB4YjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhhLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDgsCisgIDB4MSwgMHhmZSwgMHhjLAorICAweDEsIDB4ZmUsIDB4ZTYsCisgIDB4MSwgMHhmZSwgMHhlZSwKKyAgMHgxLCAweGZlLCAweDZlLAorICAweDEyLCAweDhmLCAweDM4LCAwLAorICAweDEyLCAweGYsIDB4YzcsIDB4ODEsCisgIDB4MTEsIDB4OWQsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MzAsCisgIDB4MSwgMHhmOCwgMHg1MCwKKyAgMHgxLCAweGY4LCAweDU4LAorICAweDEsIDB4ZmQsIDB4NjgsCisgIDB4MSwgMHhlNywgMHg2LAorICAweDEyLCAweGYsIDB4YzcsIDB4ODAsCisgIDB4MTEsIDB4NjAsCisgIDB4MTEsIDB4NjEsCisgIDB4MTEsIDB4OWMsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZiwgMHgzMiwKKyAgMHgyMiwgMHhmLCAweDMzLAorICAweDIyLCAweGYsIDB4MzEsCisgIDB4MTEsIDB4YzMsCisgIDB4MTEsIDB4YzIsCisgIDB4MTEsIDB4Y2IsCisgIDB4MTEsIDB4Y2EsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDgsCisgIDB4MjIsIDB4ZiwgMHhhYSwKKyAgMHgxMSwgMHg5ZSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweDE4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MWEsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgxYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MTgsCisgIDB4MSwgMHhmZSwgMHhhZSwKKyAgMHgxMywgMHhmLCAweGYwLCAweDkwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGE1LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGFjLCAwLCAwLAorICAweDIzLCAweGYsIDB4YWQsIDAsIDAsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMxLAorICAweDMzLCAweGYsIDB4MSwgMHhjMiwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzMsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM0LAorICAweDIzLCAweGYsIDB4NzgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDAsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM4LAorICAweDMzLCAweGYsIDB4MSwgMHhjOSwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgyMCwKKyAgMHgxMSwgMHhmOSwKKyAgMHgxMSwgMHhmZCwKKyAgMHgxMSwgMHhmYiwKKyAgMHgxLCAweGZlLCAweGFhLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweDI4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MmEsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgyYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4NCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDAsCisgIDB4MjIsIDB4ZiwgMHhiLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MjAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhmLCAweDksCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4ZCwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxOCwKKyAgMHgyMywgMHhmLCAweDFmLCAwLCAwLAorICAweDIyLCAweGYsIDB4MzAsCisgIDB4MTMsIDB4ZiwgMHhmZSwgMHhjMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDg2LCAwLCAwLAorICAweDEsIDB4ZjgsIDB4OTAsCisgIDB4MTEsIDB4ZDcsCisgIDB4MiwgMHhmZSwgMHgzMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDMyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MzQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgzMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDMwLAorICAweDIyLCAweGYsIDB4NzcsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGViLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDEsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgyLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MywKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDQsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg1LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NiwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDcsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDEsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgyLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDQsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg1LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NiwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDcsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDE4LAorICAweDM0LCAweGYyLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEwLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEyLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE1LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE2LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI4LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDI5LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJhLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJiLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJjLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJlLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJmLCAwLCAwLAorICAweDIyLCAweGYsIDB4MzcsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MCwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDViLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYwLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDcwLCAwLCAwLAorICAweDIzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3YywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2QsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGMzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM1LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQ2LCAweGMwLCAweGMwLAorICAweDM0LCAweGYzLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGYwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY2LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNywgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAwLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDYsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWMsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFkLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxZSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDNhLCAweGYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzOCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQwLAorICAweDIzLCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhkOCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhmOCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGU4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZjAsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDM4LAorICAweDIzLCAweGYsIDB4ZiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyYiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2QsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2EsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhiLCAwLCAwLAorICAweDEsIDB4ZTcsIDB4NywKK307CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9tNjhrX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjIxZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9tNjhrX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDMwOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX2luaXQuYwkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0OSBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG02OGsgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW02OGtfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl82OEtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtNjhrX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworKworK2NvbnN0IGNoYXIgKgorK202OGtfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBlaC0+bmFtZSA9ICJtNjhrIjsKKysgIG02OGtfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVncy5jCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDEwNiBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBtNjhrIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK202OGtfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJICAgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKwlpZiAobmFtZSA9PSBOVUxMKQorKwkJcmV0dXJuIDI1OworKworKwlpZiAocmVnbm8gPCAwIHx8IHJlZ25vID4gMjQgfHwgbmFtZWxlbiA8IDUpCisrCQlyZXR1cm4gLTE7CisrCisrCSpwcmVmaXggPSAiJSI7CisrCSpiaXRzID0gMzI7CisrCSp0eXBlID0gKHJlZ25vIDwgOCA/IERXX0FURV9zaWduZWQKKysJCTogcmVnbm8gPCAxNiA/IERXX0FURV9hZGRyZXNzIDogRFdfQVRFX2Zsb2F0KTsKKysKKysJaWYgKHJlZ25vIDwgOCkKKysJeworKwkJKnNldG5hbWUgPSAiaW50ZWdlciI7CisrCX0KKysJZWxzZSBpZiAocmVnbm8gPCAxNikKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCX0KKysJZWxzZSBpZiAocmVnbm8gPCAyNCkKKysJeworKwkJKnNldG5hbWUgPSAiRlBVIjsKKysJfQorKwllbHNlCisrCXsKKysJCSpzZXRuYW1lID0gImFkZHJlc3MiOworKwkJKnR5cGUgPSBEV19BVEVfYWRkcmVzczsKKysJfQorKworKwlzd2l0Y2ggKHJlZ25vKQorKwl7CisrCWNhc2UgMCAuLi4gNzoKKysJCW5hbWVbMF0gPSAnZCc7CisrCQluYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDggLi4uIDEzOgorKwkJbmFtZVswXSA9ICdhJzsKKysJCW5hbWVbMV0gPSByZWdubyAtIDggKyAnMCc7CisrCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE0OgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrICAgCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE1OgorKwkJbmFtZVswXSA9ICdzJzsKKysJCW5hbWVbMV0gPSAncCc7CisrICAgCQluYW1lbGVuID0gMjsKKysJCWJyZWFrOworKworKwljYXNlIDE2IC4uLiAyMzoKKysJCW5hbWVbMF0gPSAnZic7CisrCQluYW1lWzFdID0gJ3AnOworKwkJbmFtZVsyXSA9IHJlZ25vIC0gMTYgKyAnMCc7CisrICAgCQluYW1lbGVuID0gMzsKKysJCWJyZWFrOworKworKwljYXNlIDI0OgorKwkJbmFtZVswXSA9ICdwJzsKKysJCW5hbWVbMV0gPSAnYyc7CisrCQluYW1lbGVuID0gMjsKKysJfQorKworKwluYW1lW25hbWVsZW4rK10gPSAnXDAnOworKwlyZXR1cm4gbmFtZWxlbjsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0NSBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIG02OGsuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwJCTApCisrUkVMT0NfVFlQRSAoMzIsCQkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKDE2LAkJCVJFTCkKKytSRUxPQ19UWVBFICg4LAkJCVJFTCkKKytSRUxPQ19UWVBFIChQQzMyLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKFBDMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoUEM4LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChHT1Q4TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyTywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQxNk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUOE8sCQlSRUwpCisrUkVMT0NfVFlQRSAoQ09QWSwJCUVYRUMpCisrUkVMT0NfVFlQRSAoR0xPQl9EQVQsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChKTVBfU0xPVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKFJFTEFUSVZFLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoR05VX1ZUSU5IRVJJVCwJUkVMKQorK1JFTE9DX1RZUEUgKEdOVV9WVEVOVFJZLAlSRUwpCisrCitJbmRleDogZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgJMjAxMC0wNC0yNCAxMDoxMzo1MC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTI1LDYgKzExMjUsOSBAQAorICNkZWZpbmUgUl82OEtfR0xPQl9EQVQJMjAJCS8qIENyZWF0ZSBHT1QgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCQkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisgI2RlZmluZSBSXzY4S19SRUxBVElWRQkyMgkJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworKy8qIFRoZSBuZXh0IDIgYXJlIEdOVSBleHRlbnNpb25zIHRvIGVuYWJsZSBDKysgdnRhYmxlIGdhcmJhZ2UgY29sbGVjdGlvbi4gICovCisrI2RlZmluZSBSXzY4S19HTlVfVlRJTkhFUklUIDIzCisrI2RlZmluZSBSXzY4S19HTlVfVlRFTlRSWSAgIDI0CisgI2RlZmluZSBSXzY4S19UTFNfR0QzMiAgICAgIDI1ICAgICAgICAgIC8qIDMyIGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEMTYgICAgICAyNiAgICAgICAgICAvKiAxNiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyAjZGVmaW5lIFJfNjhLX1RMU19HRDggICAgICAgMjcgICAgICAgICAgLyogOCBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMToyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDExICsyOSwxMiBAQAorIAkgICAtSSQodG9wX3NyY2RpcikvbGliZWxmIC1JJCh0b3Bfc3JjZGlyKS9saWJkdworIAorIAorLW1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MgbWlwcworK21vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MgbWlwcyBtNjhrCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSBcCisgCSAgICAgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgbGliZWJsX3BwYzY0X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hCisrCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYSBcCisrCSAgICAgbGliZWJsX202OGtfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtMTAzLDYgKzEwNCwxMCBAQAorIGxpYmVibF9taXBzX3BpY19hX1NPVVJDRVMgPSAkKG1pcHNfU1JDUykKKyBhbV9saWJlYmxfbWlwc19waWNfYV9PQkpFQ1RTID0gJChtaXBzX1NSQ1M6LmM9Lm9zKQorIAorK202OGtfU1JDUyA9IG02OGtfaW5pdC5jIG02OGtfc3ltYm9sLmMgbTY4a19yZWdzLmMKKytsaWJlYmxfbTY4a19waWNfYV9TT1VSQ0VTID0gJChtNjhrX1NSQ1MpCisrYW1fbGliZWJsX202OGtfcGljX2FfT0JKRUNUUyA9ICQobTY4a19TUkNTOi5jPS5vcykKKysKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorIAllY2hvICdFTEZVVElMU18kKFBBQ0tBR0VfVkVSU0lPTikgeyBnbG9iYWw6ICQqX2luaXQ7IGxvY2FsOiAqOyB9OycgXAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCTIwMTAtMDQtMjQgMTA6MTE6MzguMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQzIEBACisrLyogbTY4ayBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCW02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKyttNjhrX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfNjhLXzMyOgorKyAgICAgIHJldHVybiBFTEZfVF9TV09SRDsKKysgICAgY2FzZSBSXzY4S18xNjoKKysgICAgICByZXR1cm4gRUxGX1RfSEFMRjsKKysgICAgY2FzZSBSXzY4S184OgorKyAgICAgIHJldHVybiBFTEZfVF9CWVRFOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9taXBzX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODFhNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9taXBzX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDcxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX2luaXQuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw2MCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG1pcHMgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX01JUFNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtaXBzX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworK2NvbnN0IGNoYXIgKgorK21pcHNfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBpZiAobWFjaGluZSA9PSBFTV9NSVBTKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGJpZy1lbmRpYW4iOworKyAgZWxzZSBpZiAobWFjaGluZSA9PSBFTV9NSVBTX1JTM19MRSkKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBsaXR0bGUtZW5kaWFuIjsKKysKKysgIG1pcHNfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZWdzLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMTA0IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIE1JUFMgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK21pcHNfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisrCQkgICAgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gNjY7CisrCisrICBpZiAocmVnbm8gPCAwIHx8IHJlZ25vID4gNjUgfHwgbmFtZWxlbiA8IDQpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJCI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSByZWdubyArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDE7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gKHJlZ25vIC8gMTApICsgJzAnOworKyAgICAgICAgICBuYW1lWzFdID0gKHJlZ25vICUgMTApICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPCA2NCkKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2YnOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpICsgJzAnOworKwkgIG5hbWVsZW4gPSAyOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSAvIDEwICsgJzAnOworKwkgIG5hbWVbMl0gPSAocmVnbm8gLSAzMikgJSAxMCArICcwJzsKKysJICBuYW1lbGVuID0gMzsKKysJfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA9PSA2NCkKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnaCc7CisrICAgICAgbmFtZVsxXSA9ICdpJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdsJzsKKysgICAgICBuYW1lWzFdID0gJ28nOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrCisrICBuYW1lW25hbWVsZW4rK10gPSAnXDAnOworKyAgcmV0dXJuIG5hbWVsZW47CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNzkgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtaXBzLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMTYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDMyLCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwzMiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMjYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMTzE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwxNiwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKExJVEVSQUwsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1QxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUEMxNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTEwxNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHUFJFTDMyLCAgICAgICAgICAgIDApCisrCisrUkVMT0NfVFlQRSAoU0hJRlQ1LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNISUZUNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICg2NCwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0RJU1AsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9QQUdFLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfT0ZTVCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0hJMTYsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9MTzE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTVUIsICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSU5TRVJUX0EsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9CLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChERUxFVEUsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSElHSEVSLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFU1QsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMX0hJMTYsICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9MTzE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNDTl9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQUREX0lNTUVESUFURSwgICAgICAwKQorK1JFTE9DX1RZUEUgKFBKVU1QLCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUxHT1QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSkFMUiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUw2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfR0QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0xETSwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfSEkxNiwgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0xPMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dPVFRQUkVMLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTDMyLCAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUw2NCwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMX0hJMTYsICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9MTzE2LCAgICAgMCkKKysKKysjZGVmaW5lIE5PX0NPUFlfUkVMT0MgMQorKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JldHZhbC5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDMyMSBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvbWlwcyBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysjaW5jbHVkZSA8ZWxmLmg+CisrCisrI2luY2x1ZGUgIi4uL2xpYmVibC9saWJlYmxQLmgiCisrI2luY2x1ZGUgIi4uL2xpYmR3L2xpYmR3UC5oIgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhlIEFCSSBvZiB0aGUgZmlsZS4gIEFsc28gc2VlIEVGX01JUFNfQUJJMiBhYm92ZS4gKi8KKysjZGVmaW5lIEVGX01JUFNfQUJJCQkweDAwMDBGMDAwCisrCisrLyogVGhlIG9yaWdpbmFsIG8zMiBhYmkuICovCisrI2RlZmluZSBFX01JUFNfQUJJX08zMiAgICAgICAgICAweDAwMDAxMDAwCisrCisrLyogTzMyIGV4dGVuZGVkIHRvIHdvcmsgb24gNjQgYml0IGFyY2hpdGVjdHVyZXMgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzY0ICAgICAgICAgIDB4MDAwMDIwMDAKKysKKysvKiBFQUJJIGluIDMyIGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkkzMiAgICAgICAweDAwMDAzMDAwCisrCisrLyogRUFCSSBpbiA2NCBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJNjQgICAgICAgMHgwMDAwNDAwMAorKworKy8qIEFsbCB0aGUgcG9zc2libGUgTUlQUyBBQklzLiAqLworK2VudW0gbWlwc19hYmkKKysgIHsKKysgICAgTUlQU19BQklfVU5LTk9XTiA9IDAsCisrICAgIE1JUFNfQUJJX04zMiwKKysgICAgTUlQU19BQklfTzMyLAorKyAgICBNSVBTX0FCSV9ONjQsCisrICAgIE1JUFNfQUJJX082NCwKKysgICAgTUlQU19BQklfRUFCSTMyLAorKyAgICBNSVBTX0FCSV9FQUJJNjQsCisrICAgIE1JUFNfQUJJX0xBU1QKKysgIH07CisrCisrLyogRmluZCB0aGUgbWlwcyBBQkkgb2YgdGhlIGN1cnJlbnQgZmlsZSAqLworK2VudW0gbWlwc19hYmkgZmluZF9taXBzX2FiaShFbGYgKmVsZikKKyt7CisrICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysKKysgIGlmIChlaGRyID09IE5VTEwpCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgR0VsZl9Xb3JkIGVsZl9mbGFncyA9IGVoZHItPmVfZmxhZ3M7CisrCisrICAvKiBDaGVjayBlbGZfZmxhZ3MgdG8gc2VlIGlmIGl0IHNwZWNpZmllcyB0aGUgQUJJIGJlaW5nIHVzZWQuICAqLworKyAgc3dpdGNoICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkpKQorKyAgICB7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX082NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgZGVmYXVsdDoKKysgICAgICBpZiAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJMikpCisrCXJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgIH0KKysKKysgIC8qIEdDQyBjcmVhdGVzIGEgcHNldWRvLXNlY3Rpb24gd2hvc2UgbmFtZSBkZXNjcmliZXMgdGhlIEFCSS4gICovCisrICBzaXplX3Qgc2hzdHJuZHg7CisrICBpZiAoZWxmX2dldHNoZHJzdHJuZHggKGVsZiwgJnNoc3RybmR4KSA8IDApCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIEVsZl9TY24gKnNjbiA9IE5VTEw7CisrICB3aGlsZSAoKHNjbiA9IGVsZl9uZXh0c2NuIChlbGYsIHNjbikpICE9IE5VTEwpCisrICAgIHsKKysgICAgICBHRWxmX1NoZHIgc2hkcl9tZW07CisrICAgICAgR0VsZl9TaGRyICpzaGRyID0gZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSk7CisrICAgICAgaWYgKHNoZHIgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgICAgIG5hbWUgPSBlbGZfc3RycHRyIChlbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKSA/OiAiIjsKKysgICAgICBpZiAoc3RybmNtcCAobmFtZSwgIi5tZGVidWcuIiwgOCkgIT0gMCkKKysgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlOMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9ONjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlPNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrICAgIH0KKysKKysgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworK30KKysKKyt1bnNpZ25lZCBpbnQKKyttaXBzX2FiaV9yZWdzaXplIChlbnVtIG1pcHNfYWJpIGFiaSkKKyt7CisrICBzd2l0Y2ggKGFiaSkKKysgICAgeworKyAgICBjYXNlIE1JUFNfQUJJX0VBQkkzMjoKKysgICAgY2FzZSBNSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIDQ7CisrICAgIGNhc2UgTUlQU19BQklfTjMyOgorKyAgICBjYXNlIE1JUFNfQUJJX042NDoKKysgICAgY2FzZSBNSVBTX0FCSV9PNjQ6CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiA4OworKyAgICBjYXNlIE1JUFNfQUJJX1VOS05PV046CisrICAgIGNhc2UgTUlQU19BQklfTEFTVDoKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorK30KKysKKysKKysvKiAkdjAgb3IgcGFpciAkdjAsICR2MSAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICRmMCAoZmxvYXQpLCBvciBwYWlyICRmMCwgJGYxIChkb3VibGUpLgorKyAqIGYyL2YzIGFyZSB1c2VkIGZvciBDT01QTEVYICg9IDIgZG91YmxlcykgcmV0dXJucyBpbiBGb3J0cmFuICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMzIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzUgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKysvKiAkZjAsIG9yIHBhaXIgJGYwLCAkZjIuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrI2RlZmluZSBubG9jX2ZwcmVncGFpciA0CisrI2RlZmluZSBubG9jX2ZwcmVncXVhZCA4CisrCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuICBCdXQsIHRoZSBjb21waWxlcgorKyAgIGhlbHBmdWxseSByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3BhY2UgaW4gJHYwLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyLCAubnVtYmVyID0gMCB9CisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKworK2ludAorK21pcHNfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgLyogRmlyc3QgZmluZCB0aGUgQUJJIHVzZWQgYnkgdGhlIGVsZiBvYmplY3QgKi8KKysgIGVudW0gbWlwc19hYmkgYWJpID0gZmluZF9taXBzX2FiaShmdW5jdHlwZWRpZS0+Y3UtPmRiZy0+ZWxmKTsKKysKKysgIC8qIFNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZyB3aGlsZSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgQUJJICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX0xBU1QpCisrICAgIHJldHVybiAtMTsKKysKKysgIC8qIFdlIGNvdWxkbid0IGlkZW50aWZ5IHRoZSBBQkksIGJ1dCB0aGUgZmlsZSBzZWVtcyB2YWxpZCAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9VTktOT1dOKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBDYW4ndCBoYW5kbGUgRUFCSSB2YXJpYW50cyAqLworKyAgaWYgKChhYmkgPT0gTUlQU19BQklfRUFCSTMyKSB8fCAoYWJpID09IE1JUFNfQUJJX0VBQkk2NCkpCisrICAgIHJldHVybiAtMjsKKysKKysgIHVuc2lnbmVkIGludCByZWdzaXplID0gbWlwc19hYmlfcmVnc2l6ZSAoYWJpKTsKKysgIGlmICghcmVnc2l6ZSkKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUgfHwgdGFnID09IERXX1RBR19tdXRhYmxlX3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IHJlZ3NpemU7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysjZGVmaW5lIEFCSV9MT0MobG9jLCByZWdzaXplKSAoKHJlZ3NpemUpID09IDQgPyAobG9jICMjIF9vMzIpIDogKGxvYykpCisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQkqbG9jcCA9IEFCSV9MT0MobG9jX2ZwcmVnLCByZWdzaXplKTsKKysJCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCisrCQlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyOworKworKwkJaWYgKHNpemUgPD0gNCpyZWdzaXplICYmIGFiaSA9PSBNSVBTX0FCSV9PMzIpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdxdWFkOworKworKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCSpsb2NwID0gQUJJX0xPQyhsb2NfaW50cmVnLCByZWdzaXplKTsKKysJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gU2hvdWxkbid0IGhhcHBlbiB0aG91Z2ggKGF0IGxlYXN0IHdpdGggZ2NjKSAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZToKKysgICAgICAvKiBYWFggVE9ETzogQ2FuJ3QgaGFuZGxlIHN0cnVjdHVyZSByZXR1cm4gd2l0aCBvdGhlciBBQkkncyB5ZXQgOi0vICovCisrICAgICAgaWYgKChhYmkgIT0gTUlQU19BQklfTzMyKSAmJiAoYWJpICE9IE1JUFNfQUJJX082NCkpCisrICAgICAgICByZXR1cm4gLTI7CisrCisrICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19zeW1ib2wuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw1MiBAQAorKy8qIE1JUFMgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbWlwc19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX01JUFNfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl9NSVBTXzMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBjYXNlIFJfTUlQU182NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ1Lm9yaWcvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxMC0wMi0yNCAxODo1NTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTkxLDYgKzkxLDggQEAKKyAgIHsgInNwYXJjIiwgImVsZl9zcGFyYyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDLCAwLCAwIH0sCisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmN2OHBsdXMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQzMyUExVUywgMCwgMCB9LAorICAgeyAiczM5MCIsICJlYmxfczM5MCIsICJzMzkwIiwgNCwgRU1fUzM5MCwgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwcyIsICJtaXBzIiwgNCwgRU1fTUlQUywgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwc2VsIiwgIm1pcHNlbCIsIDQsIEVNX01JUFNfUlMzX0xFLCAwLCAwIH0sCisgCisgICB7ICJtMzIiLCAiZWxmX20zMiIsICJtMzIiLCAzLCBFTV9NMzIsIDAsIDAgfSwKKyAgIHsgIm02OGsiLCAiZWxmX202OGsiLCAibTY4ayIsIDQsIEVNXzY4SywgMCwgMCB9LAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDUub3JpZy9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDEwLTAyLTI0IDE4OjU1OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMTA5LDExICsxMDksMTMgQEAKKyB9CisgCisgCisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgYm9vbAorIEVCTEhPT0soY29weV9yZWxvY19wKSAoaW50IHJlbG9jKQorIHsKKyAgIHJldHVybiByZWxvYyA9PSBSX1RZUEUgKENPUFkpOworIH0KKysjZW5kaWYKKyAKKyBib29sCisgRUJMSE9PSyhub25lX3JlbG9jX3ApIChpbnQgcmVsb2MpCitAQCAtMTM1LDcgKzEzNyw5IEBACisgICBlYmwtPnJlbG9jX3R5cGVfbmFtZSA9IEVCTEhPT0socmVsb2NfdHlwZV9uYW1lKTsKKyAgIGVibC0+cmVsb2NfdHlwZV9jaGVjayA9IEVCTEhPT0socmVsb2NfdHlwZV9jaGVjayk7CisgICBlYmwtPnJlbG9jX3ZhbGlkX3VzZSA9IEVCTEhPT0socmVsb2NfdmFsaWRfdXNlKTsKKysjaWZuZGVmIE5PX0NPUFlfUkVMT0MKKyAgIGVibC0+Y29weV9yZWxvY19wID0gRUJMSE9PSyhjb3B5X3JlbG9jX3ApOworKyNlbmRpZgorICAgZWJsLT5ub25lX3JlbG9jX3AgPSBFQkxIT09LKG5vbmVfcmVsb2NfcCk7CisgI2lmbmRlZiBOT19SRUxBVElWRV9SRUxPQworICAgZWJsLT5yZWxhdGl2ZV9yZWxvY19wID0gRUJMSE9PSyhyZWxhdGl2ZV9yZWxvY19wKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ1Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0yNCAxODo1NzoyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTAyLTI0IDE4OjU3OjU3LjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDExICsyOSwxMSBAQAorIAkgICAtSSQodG9wX3NyY2RpcikvbGliZWxmIC1JJCh0b3Bfc3JjZGlyKS9saWJkdworIAorIAorLW1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MKKyttb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjIG1pcHMKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBsaWJlYmxfcHBjNjRfcGljLmEgXAorLQkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEKKysJICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTk5LDYgKzk5LDEwIEBACisgbGliZWJsX3BhcmlzY19waWNfYV9TT1VSQ0VTID0gJChwYXJpc2NfU1JDUykKKyBhbV9saWJlYmxfcGFyaXNjX3BpY19hX09CSkVDVFMgPSAkKHBhcmlzY19TUkNTOi5jPS5vcykKKyAKKyttaXBzX1NSQ1MgPSBtaXBzX2luaXQuYyBtaXBzX3N5bWJvbC5jIG1pcHNfcmVncy5jIG1pcHNfcmV0dmFsLmMKKytsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisrYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKysKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorIAllY2hvICdFTEZVVElMU18kKFBBQ0tBR0VfVkVSU0lPTikgeyBnbG9iYWw6ICQqX2luaXQ7IGxvY2FsOiAqOyB9OycgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L25tLUZpeC1zaXplLXBhc3NlZC10by1zbnByaW50Zi1mb3ItaW52YWxpZC1zaF9uYW1lLWNhc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1ZGFkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L25tLUZpeC1zaXplLXBhc3NlZC10by1zbnByaW50Zi1mb3ItaW52YWxpZC1zaF9uYW1lLWNhc2UucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitubTogRml4IHNpemUgcGFzc2VkIHRvIHNucHJpbnRmIGZvciBpbnZhbGlkIHNoX25hbWUgY2FzZS4KK25hdGl2ZSBidWlsZCBmYWlsZWQgYXMgZm9sbG93aW5nIG9uIEZlZG9yYTE4Ogorbm0uYzogSW4gZnVuY3Rpb24gJ3Nob3dfc3ltYm9sc19zeXN2JzoKK25tLmM6NzU2OjI3OiBlcnJvcjogYXJndW1lbnQgdG8gJ3NpemVvZicgaW4gJ3NucHJpbnRmJyBjYWxsIGlzIHRoZSBzYW1lIGV4cHJlc3Npb24gYXMgdGhlIGRlc3RpbmF0aW9uOyBkaWQgeW91IG1lYW4gdG8gcHJvdmlkZSBhbiBleHBsaWNpdCBsZW5ndGg/IFstV2Vycm9yPXNpemVvZi1wb2ludGVyLW1lbWFjY2Vzc10KKyAgICBzbnByaW50ZiAobmFtZSwgc2l6ZW9mIG5hbWUsICJbaW52YWxpZCBzaF9uYW1lICUjIiBQUkl4MzIgIl0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorCitUaGUgb3JpZ2luYWwgY29tbWl0IGlzIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9jZ2l0L2VsZnV0aWxzLmdpdC9jb21taXQvc3JjL25tLmM/aWQ9NTdiZDY2Y2FiZjZlNmI5ZWNmNjIyY2RiZjM1MDgwNDg5N2E4ZGY1OAorCitTaWduZWQtb2ZmLWJ5OiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KKworLS0tIGVsZnV0aWxzLTAuMTQ4L3NyYy9ubS5jLm9yZwkyMDEzLTAzLTExIDIyOjM2OjExLjAwMDAwMDAwMCAtMDUwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9ubS5jCTIwMTMtMDMtMTEgMjI6NDY6MDkuMDAwMDAwMDAwIC0wNTAwCitAQCAtNzUyLDggKzc1Miw5IEBACisgCQkJICAgICAgIGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pLT5zaF9uYW1lKTsKKyAgICAgICBpZiAodW5saWtlbHkgKG5hbWUgPT0gTlVMTCkpCisgCXsKKy0JICBuYW1lID0gYWxsb2NhIChzaXplb2YgIltpbnZhbGlkIHNoX25hbWUgMHgxMjM0NTY3OF0iKTsKKy0JICBzbnByaW50ZiAobmFtZSwgc2l6ZW9mIG5hbWUsICJbaW52YWxpZCBzaF9uYW1lICUjIiBQUkl4MzIgIl0iLAorKwkgIGNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZiAiW2ludmFsaWQgc2hfbmFtZSAweDEyMzQ1Njc4XSI7CisrCSAgbmFtZSA9IGFsbG9jYSAoYnVmc3opOworKwkgIHNucHJpbnRmIChuYW1lLCBidWZzeiwgIltpbnZhbGlkIHNoX25hbWUgJSMiIFBSSXgzMiAiXSIsCisgCQkgICAgZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSktPnNoX25hbWUpOworIAl9CisgICAgICAgc2NubmFtZXNbZWxmX25keHNjbiAoc2NuKV0gPSBuYW1lOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVkaGF0LXBvcnRhYmlsaXR5LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE5MTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVkaGF0LXBvcnRhYmlsaXR5LmRpZmYKQEAgLTAsMCArMSw3NTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvYmFja2VuZHMvQ2hhbmdlTG9nCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTA2LDYgKzEwNiwxMCBAQAorIAkqIHBwY19hdHRycy5jIChwcGNfY2hlY2tfb2JqZWN0X2F0dHJpYnV0ZSk6IEhhbmRsZSB0YWcKKyAJR05VX1Bvd2VyX0FCSV9TdHJ1Y3RfUmV0dXJuLgorIAorKzIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKGxpYmVibF8lLnNvKTogVXNlICQoTERfQVNfTkVFREVEKS4KKysKKyAyMDA4LTEwLTA0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBpMzg2X3JlbG9jLmRlZjogRml4IGVudHJpZXMgZm9yIFRMU19HT1RERVNDLCBUTFNfREVTQ19DQUxMLCBhbmQKK0BAIC00MzMsNiArNDM3LDExIEBACisgCSogc3BhcmNfaW5pdC5jOiBMaWtld2lzZS4KKyAJKiB4ODZfNjRfaW5pdC5jOiBMaWtld2lzZS4KKyAKKysyMDA1LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChMRF9BU19ORUVERUQpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKGxpYmVibF8lLnNvIHJ1bGUpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdsLC0tYXMtbmVlZGVkLgorKworIDIwMDUtMTEtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcHBjNjRfcmVsb2MuZGVmOiBSRUwzMCAtPiBBRERSMzAuCitAQCAtNDU1LDYgKzQ2NCw5IEBACisgCSogTWFrZWZpbGUuYW0gKHVuaW5zdGFsbCk6IERvbid0IHRyeSB0byByZW1vdmUgJChwa2dpbmNsdWRlZGlyKS4KKyAJKENMRUFORklMRVMpOiBBZGQgbGliZWJsXyQobSkuc28uCisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgCSogcHBjX3JlbG9jLmRlZjogVXBkYXRlIGJpdHMgcGVyIEFsYW4gTW9kcmEgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4uCisgCSogcHBjNjRfcmVsb2MuZGVmOiBMaWtld2lzZS4KKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0xMyAyMDowODowMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwMyw3ICsxMDMsNyBAQAorIAkkKExJTkspIC1zaGFyZWQgLW8gJChAOi5tYXA9LnNvKSBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQ8ICQoY3B1XyQqKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQoQDouc289Lm1hcCkgXAorLQkJLVdsLC16LGRlZnMgLVdsLC0tYXMtbmVlZGVkICQobGliZWxmKSAkKGxpYmR3KSAkKGxpYm11ZGZsYXApCisrCQktV2wsLXosZGVmcyAkKExEX0FTX05FRURFRCkgJChsaWJlbGYpICQobGliZHcpICQobGlibXVkZmxhcCkKKyAJJCh0ZXh0cmVsX2NoZWNrKQorIAorIGxpYmVibF9pMzg2LnNvOiAkKGNwdV9pMzg2KQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvQ2hhbmdlTG9nCTIwMTAtMDQtMjEgMTQ6MjY6NDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMiw2ICsyLDEwIEBACisgCisgCSogY29uZmlndXJlLmFjIChMT0NBTEVESVIsIERBVEFESVJOQU1FKTogUmVtb3ZlZC4KKyAKKysyMDA5LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogVXNlIHNlZCBhbmQgZXhwciBpbnN0ZWFkIG9mIG1vZGVybiBiYXNoIGV4dGVuc2lvbnMuCisrCisgMjAwOS0wOS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBVcGRhdGUgZm9yIG1vcmUgbW9kZXJuIGF1dG9jb25mLgorQEAgLTEwLDYgKzE0LDEwIEBACisgCisgCSogY29uZmlndXJlLmFjICh6aXBfTElCUyk6IENoZWNrIGZvciBsaWJsem1hIHRvby4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIC1mZ251ODktaW5saW5lOyBhZGQgaXQgdG8gV0VYVFJBIGlmIGl0IHdvcmtzLgorKworIDIwMDktMDQtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjIChldV92ZXJzaW9uKTogUm91bmQgZG93biBoZXJlLCBub3QgaW4gdmVyc2lvbi5oIG1hY3Jvcy4KK0BAIC0yMSw2ICsyOSw4IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBfX2J1aWx0aW5fcG9wY291bnQuCisrCisgCSogY29uZmlndXJlLmFjICh6bGliIGNoZWNrKTogQ2hlY2sgZm9yIGd6ZGlyZWN0LCBuZWVkIHpsaWIgPj0gMS4yLjIuMy4KKyAKKyAJKiBjb25maWd1cmUuYWMgKF9fdGhyZWFkIGNoZWNrKTogVXNlIEFDX0xJTktfSUZFTFNFLCBpbiBjYXNlIG9mCitAQCAtMTAxLDYgKzExMSwxMCBAQAorIAkqIGNvbmZpZ3VyZS5hYzogQWRkIGR1bW15IGF1dG9tYWtlIGNvbmRpdGlvbmFsIHRvIGdldCBkZXBlbmRlbmNpZXMKKyAJZm9yIG5vbi1nZW5lcmljIGxpbmtlciByaWdodC4gIFNlZSBzcmMvTWFrZWZpbGUuYW0uCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uLgorKworIDIwMDUtMTEtMTggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW0gKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpOiBOZXcgdmFyaWFibGUuCitAQCAtMTQ4LDYgKzE2MiwxNyBAQAorIAkqIE1ha2VmaWxlLmFtIChhbGxfU1VCRElSUyk6IEFkZCBsaWJkd2ZsLgorIAkqIGNvbmZpZ3VyZS5hYzogV3JpdGUgbGliZHdmbC9NYWtlZmlsZS4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYyAoV0VYVFJBKTogQ2hlY2sgZm9yIC1XZXh0cmEgYW5kIHNldCB0aGlzIHN1YnN0aXR1dGlvbi4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBzdHJ1Y3Qgc3RhdCBzdF8/dGltIG1lbWJlcnMuCisrCSogc3JjL3N0cmlwLmMgKHByb2Nlc3NfZmlsZSk6IFVzZSBzdF8/dGltZSBpZiBzdF8/dGltIGFyZSBub3QgdGhlcmUuCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgZnV0aW1lcyBmdW5jdGlvbi4KKysJKiBzcmMvc3RyaXAuYyAoaGFuZGxlX2VsZikgWyEgSEFWRV9GVVRJTUVTXTogVXNlIHV0aW1lcyBpbnN0ZWFkLgorKwkoaGFuZGxlX2FyKSBbISBIQVZFX0ZVVElNRVNdOiBMaWtld2lzZS4KKysKKyAyMDA1LTA1LTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYyBbQUhfQk9UVE9NXSAoSU5UREVDTCwgX0lOVERFQ0wpOiBOZXcgbWFjcm9zLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy9ldS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvY29uZmlnL2V1LmFtCTIwMTAtMDQtMjEgMTQ6MjY6NDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlnL2V1LmFtCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMjUsMTEgKzI1LDE0IEBACisgIyMgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4KKyAjIworIAorK1dFWFRSQSA9IEBXRVhUUkFACisrTERfQVNfTkVFREVEID0gQExEX0FTX05FRURFREAKKysKKyBERUZTID0gLURfR05VX1NPVVJDRSAtREhBVkVfQ09ORklHX0ggLURMT0NBTEVESVI9JyIke2xvY2FsZWRpcn0iJworIElOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9saWIgLUkuLgorIEFNX0NGTEFHUyA9IC1zdGQ9Z251OTkgLVdhbGwgLVdzaGFkb3cgXAorIAkgICAgJChpZiAkKCQoKkYpX25vX1dlcnJvciksLC1XZXJyb3IpIFwKKy0JICAgICQoaWYgJCgkKCpGKV9ub19XdW51c2VkKSwsLVd1bnVzZWQgLVdleHRyYSkgXAorKwkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAkKFdFWFRSQSkpIFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19XZm9ybWF0KSwtV25vLWZvcm1hdCwtV2Zvcm1hdD0yKSBcCisgCSAgICAkKCQoKkYpX0NGTEFHUykKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWcuaC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvY29uZmlnLmguaW4JMjAxMC0wNi0yOCAxOTowNzozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9jb25maWcuaC5pbgkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw4IEBACisgLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisgCisrLyogSGF2ZSBfX2J1aWx0aW5fcG9wY291bnQuICovCisrI3VuZGVmIEhBVkVfQlVJTFRJTl9QT1BDT1VOVAorKworIC8qICRsaWJkaXIgc3ViZGlyZWN0b3J5IGNvbnRhaW5pbmcgbGliZWJsIG1vZHVsZXMuICovCisgI3VuZGVmIExJQkVCTF9TVUJESVIKKyAKK0BAIC01NSw0ICs1OCw3IEBACisgLyogRGVmaW5lIGZvciBsYXJnZSBmaWxlcywgb24gQUlYLXN0eWxlIGhvc3RzLiAqLworICN1bmRlZiBfTEFSR0VfRklMRVMKKyAKKysvKiBTdHViYmVkIG91dCBpZiBtaXNzaW5nIGNvbXBpbGVyIHN1cHBvcnQuICovCisrI3VuZGVmIF9fdGhyZWFkCisrCisgI2luY2x1ZGUgPGV1LWNvbmZpZy5oPgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMDYtMjggMTk6MDc6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlndXJlLmFjCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNzMsNiArNzMsNTQgQEAKKyBBU19JRihbdGVzdCAieCRhY19jdl9jOTkiICE9IHh5ZXNdLAorICAgICAgIEFDX01TR19FUlJPUihbZ2NjIHdpdGggQzk5IHN1cHBvcnQgcmVxdWlyZWRdKSkKKyAKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1XZXh0cmEgb3B0aW9uIHRvICRDQ10sIGFjX2N2X2NjX3dleHRyYSwgW2RubAorK29sZF9DRkxBR1M9IiRDRkxBR1MiCisrQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXh0cmEiCisrQUNfQ09NUElMRV9JRkVMU0UoW3ZvaWQgZm9vICh2b2lkKSB7IH1dLAorKwkJICBhY19jdl9jY193ZXh0cmE9eWVzLCBhY19jdl9jY193ZXh0cmE9bm8pCisrQ0ZMQUdTPSIkb2xkX0NGTEFHUyJdKQorK0FDX1NVQlNUKFdFWFRSQSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY193ZXh0cmEiID0geHllc10sIFtXRVhUUkE9LVdleHRyYV0sIFtXRVhUUkE9LVddKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLWZnbnU4OS1pbmxpbmUgb3B0aW9uIHRvICRDQ10sIGFjX2N2X2NjX2dudTg5X2lubGluZSwgW2RubAorK29sZF9DRkxBR1M9IiRDRkxBR1MiCisrQ0ZMQUdTPSIkQ0ZMQUdTIC1mZ251ODktaW5saW5lIC1XZXJyb3IiCisrQUNfQ09NUElMRV9JRkVMU0UoWworK3ZvaWQgZm9vICh2b2lkKQorK3sKKysgIGlubGluZSB2b2lkIGJhciAodm9pZCkge30KKysgIGJhciAoKTsKKyt9CisrZXh0ZXJuIGlubGluZSB2b2lkIGJheiAodm9pZCkge30KKytdLCBhY19jdl9jY19nbnU4OV9pbmxpbmU9eWVzLCBhY19jdl9jY19nbnU4OV9pbmxpbmU9bm8pCisrQ0ZMQUdTPSIkb2xkX0NGTEFHUyJdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2NjX2dudTg5X2lubGluZSIgPSB4eWVzXSwKKysgICAgICBbV0VYVFJBPSIke1dFWFRSQTorJFdFWFRSQSB9LWZnbnU4OS1pbmxpbmUiXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC0tYXMtbmVlZGVkIGxpbmtlciBvcHRpb25dLAorKwkgICAgICAgYWNfY3ZfYXNfbmVlZGVkLCBbZG5sCisrY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorK2ludCBtYWluICh2b2lkKSB7IHJldHVybiAwOyB9CisrRU9GCisraWYgQUNfVFJZX0NPTU1BTkQoWyR7Q0MtY2N9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTCisrCQkJICAgIC1mUElDIC1zaGFyZWQgLW8gY29uZnRlc3Quc28gY29uZnRlc3QuYworKwkJCSAgICAtV2wsLS1hcy1uZWVkZWQgMT4mQVNfTUVTU0FHRV9MT0dfRkRdKQorK3RoZW4KKysgIGFjX2N2X2FzX25lZWRlZD15ZXMKKytlbHNlCisrICBhY19jdl9hc19uZWVkZWQ9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0Kl0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfYXNfbmVlZGVkIiA9IHh5ZXNdLAorKyAgICAgIFtMRF9BU19ORUVERUQ9LVdsLC0tYXMtbmVlZGVkXSwgW0xEX0FTX05FRURFRD1dKQorK0FDX1NVQlNUKExEX0FTX05FRURFRCkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIF9fYnVpbHRpbl9wb3Bjb3VudF0sIGFjX2N2X3BvcGNvdW50LCBbZG5sCisrQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW1tleGl0IChfX2J1aWx0aW5fcG9wY291bnQgKDEyNykpO11dKV0sCisrCSAgICAgICBhY19jdl9wb3Bjb3VudD15ZXMsIGFjX2N2X3BvcGNvdW50PW5vKV0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfcG9wY291bnQiID0geHllc10sCisrICAgICAgW0FDX0RFRklORShbSEFWRV9CVUlMVElOX1BPUENPVU5UXSwgWzFdLCBbSGF2ZSBfX2J1aWx0aW5fcG9wY291bnQuXSldKQorKworIEFDX0NBQ0hFX0NIRUNLKFtmb3IgX190aHJlYWQgc3VwcG9ydF0sIGFjX2N2X3RscywgW2RubAorICMgVXNlIHRoZSBzYW1lIGZsYWdzIHRoYXQgd2UgdXNlIGZvciBvdXIgRFNPcywgc28gdGhlIHRlc3QgaXMgcmVwcmVzZW50YXRpdmUuCisgIyBTb21lIG9sZCBjb21waWxlci9saW5rZXIvbGliYyBjb21iaW5hdGlvbnMgZmFpbCBzb21lIHdheXMgYW5kIG5vdCBvdGhlcnMuCitAQCAtODgsNyArMTM2LDEwIEBACisgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X3RscyIgIT0geHllc10sCistICAgICAgQUNfTVNHX0VSUk9SKFtfX3RocmVhZCBzdXBwb3J0IHJlcXVpcmVkXSkpCisrICAgICAgW0FTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCisrCSAgICAgW0FDX01TR19FUlJPUihbLS1lbmFibGUtdGhyZWFkLXNhZmV0eSByZXF1aXJlcyBfX3RocmVhZCBzdXBwb3J0XSldLAorKwkgICAgIFtBQ19ERUZJTkUoW19fdGhyZWFkXSwgWy8qIGVtcHR5OiBubyBtdWx0aS10aHJlYWQgc3VwcG9ydCAqL10sCisrCQkJW1N0dWJiZWQgb3V0IGlmIG1pc3NpbmcgY29tcGlsZXIgc3VwcG9ydC5dKV0pXSkKKyAKKyBkbmwgVGhpcyB0ZXN0IG11c3QgY29tZSBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbgorIGRubCB0ZXN0cywgYmVjYXVzZSB0aGUgY2hvaWNlIG9mIHRoZSBmaWxlIG1vZGVsIGNhbiAoaW4gcHJpbmNpcGxlKSBhZmZlY3QKK0BAIC0yNTEsNyArMzAyLDcgQEAKKyAKKyAjIDEuMjM0PHdoYXRldmVyPiAtPiAxMjM0PHdoYXRldmVyPgorIGNhc2UgIiRQQUNLQUdFX1ZFUlNJT04iIGluCistW1swLTldXS4qKSBldV92ZXJzaW9uPSIke1BBQ0tBR0VfVkVSU0lPTi8uL30iIDs7CisrW1swLTldXS4qKSBldV92ZXJzaW9uPWBlY2hvICIkUEFDS0FHRV9WRVJTSU9OIiB8IHNlZCAnc0BcLkBAJ2AgOzsKKyAqKSAgICAgCSAgIEFDX01TR19FUlJPUihbY29uZnVzZWQgYnkgdmVyc2lvbiBudW1iZXIgJyRQQUNLQUdFX1ZFUlNJT04nXSkgOzsKKyBlc2FjCisgY2FzZSAiJGV1X3ZlcnNpb24iIGluCitAQCAtMjgwLDYgKzMzMSw2IEBACisgZXNhYworIAorICMgUm91bmQgdXAgdG8gdGhlIG5leHQgcmVsZWFzZSBBUEkgKHgueSkgdmVyc2lvbi4KKy1bZXVfdmVyc2lvbj0kWygkZXVfdmVyc2lvbiArIDk5OSkgLyAxMDAwXV0KKytldV92ZXJzaW9uPWBleHByIFwoICRldV92ZXJzaW9uICsgOTk5IFwpIC8gMTAwMGAKKyAKKyBBQ19PVVRQVVQKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWIvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTE0LDYgKzE0LDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGV1LWNvbmZpZy5oIFshIEhBVkVfQlVJTFRJTl9QT1BDT1VOVF0KKysJKF9fYnVpbHRpbl9wb3Bjb3VudCk6IE5ldyBpbmxpbmUgZnVuY3Rpb24uCisrCisgCSogZXUtY29uZmlnLmg6IEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbi4KKyAKKyAyMDA5LTAxLTE3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0BAIC03MCw2ICs3MywxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChsaWJldV9hX1NPVVJDRVMpOiBBZGQgaXQuCisgCSogc3lzdGVtLmg6IERlY2xhcmUgY3JjMzJfZmlsZS4KKyAKKysyMDA1LTAyLTA3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDQtMzAgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtOiBVc2UgLWZmdW5jdGlvbi1zZWN0aW9ucyBmb3IgeG1hbGxvYy5jLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9ldS1jb25maWcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliL2V1LWNvbmZpZy5oCTIwMDktMDgtMTIgMTQ6MjM6MjIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliL2V1LWNvbmZpZy5oCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTgyLDYgKzE4MiwxNyBAQAorIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCBieSB0aGUgdGVzdHMgY29uZGl0aW9uYWxpemUgZm9yIHN0YW5kYWxvbmUgYnVpbGRpbmcuICAqLworICNkZWZpbmUgRUxGVVRJTFNfSEVBREVSKG5hbWUpIDxsaWIjI25hbWUuaD4KKyAKKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9QT1BDT1VOVAorKyMgZGVmaW5lIF9fYnVpbHRpbl9wb3Bjb3VudCBoYWttZW1fcG9wY291bnQKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKytoYWttZW1fcG9wY291bnQgKHVuc2lnbmVkIGludCB4KQorK3sKKysgIC8qIEhBS01FTSAxNjkgKi8KKysgIHVuc2lnbmVkIGludCBuID0geCAtICgoeCA+PiAxKSAmIDAzMzMzMzMzMzMzMykgLSAoKHggPj4gMikgJiAwMTExMTExMTExMTEpOworKyAgcmV0dXJuICgobiArIChuID4+IDMpKSAmIDAzMDcwNzA3MDcwNykgJSA2MzsKKyt9CisrI2VuZGlmCS8qIEhBVkVfQlVJTFRJTl9QT1BDT1VOVCAqLworKworIAorICNpZmRlZiBTSEFSRUQKKyAjIGRlZmluZSBPTERfVkVSU0lPTihuYW1lLCB2ZXJzaW9uKSBcCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliYXNtL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliYXNtL0NoYW5nZUxvZwkyMDEwLTAzLTA1IDA1OjQ4OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC02Nyw2ICs2NywxMSBAQAorIAkqIGFzbV9lcnJvci5jOiBBZGQgbmV3IGVycm9yIEFTTV9FX0lPRVJST1IuCisgCSogbGliYXNtUC5oOiBBZGQgQVNNX0VfSU9FUlJPUiBkZWZpbml0aW9uLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wMi0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IEFkZCAtV3VudXNlZCAtV2V4dHJhIC1XZm9ybWF0PTIuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliY3B1L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliY3B1L0NoYW5nZUxvZwkyMDEwLTAzLTA1IDA1OjQ4OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC05LDYgKzksOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogaTM4Nl9kaXNhc20uYyAoaTM4Nl9kaXNhc20pOiBBZGQgYWJvcnQgYWZ0ZXIgYXNzZXJ0LWNvbnN0YW50IGZvciBvbGQKKysJY29tcGlsZXJzIHRoYXQgZG9uJ3QgcmVhbGl6ZSBpdCdzIG5vcmV0dXJuLgorKworIAkqIE1ha2VmaWxlLmFtIChpMzg2X3BhcnNlX0NGTEFHUyk6IFVzZSBxdW90ZXMgYXJvdW5kIGNvbW1hbmQKKyAJc3Vic3RpdHV0aW9uIHRoYXQgY2FuIHByb2R1Y2UgbGVhZGluZyB3aGl0ZXNwYWNlLgorIAorQEAgLTMzOCw2ICszNDEsMTEgQEAKKyAJKiBkZWZzL2kzODYuZG9jOiBOZXcgZmlsZS4KKyAJKiBkZWZzL3g4Nl82NDogTmV3IGZpbGUuCisgCisrMjAwNS0wNC0wNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW5zdGVhZCBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9pMzg2X2Rpc2FzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJjcHUvaTM4Nl9kaXNhc20uYwkyMDA5LTAxLTA4IDIwOjU2OjM2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9pMzg2X2Rpc2FzbS5jCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNzkxLDYgKzc5MSw3IEBACisgCisgCQkJZGVmYXVsdDoKKyAJCQkgIGFzc2VydCAoISAiSU5WQUxJRCBub3QgaGFuZGxlZCIpOworKwkJCSAgYWJvcnQgKCk7CisgCQkJfQorIAkJICAgIH0KKyAJCSAgZWxzZQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmR3L0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHcvQ2hhbmdlTG9nCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHcvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMjc2LDYgKzI3NiwxMCBAQAorIAorIAkqIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlLmM6IEludGVncmF0ZSBEV19BVF9zcGVjaWZpY2F0aW9uIHRvby4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGxpYmR3Lmg6IERpc2FibGUgZXh0ZXJuIGlubGluZXMgZm9yIEdDQyA0LjIuCisrCisgMjAwOS0wOC0xMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBkd2FyZl9nZXRzY29wZXZhci5jOiBVc2UgZHdhcmZfZGllbmFtZS4KK0BAIC0xMDQ0LDYgKzEwNDgsMTEgQEAKKyAKKyAyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisgCSogZHdhcmZfZm9ybXJlZl9kaWUuYyAoZHdhcmZfZm9ybXJlZl9kaWUpOiBBZGQgQ1UgaGVhZGVyIG9mZnNldCB0bworIAlmb3JtcmVmIG9mZnNldC4KKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkdy9saWJkdy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJkdy9saWJkdy5oCTIwMTAtMDYtMjggMTk6MDU6NTYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHcvbGliZHcuaAkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTg0Miw3ICs4NDIsNyBAQAorIAorIAorIC8qIElubGluZSBvcHRpbWl6YXRpb25zLiAgKi8KKy0jaWZkZWYgX19PUFRJTUlaRV9fCisrI2lmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmICEoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyKQorIC8qIFJldHVybiBhdHRyaWJ1dGUgY29kZSBvZiBnaXZlbiBhdHRyaWJ1dGUuICAqLworIF9fbGliZHdfZXh0ZXJuX2lubGluZSB1bnNpZ25lZCBpbnQKKyBkd2FyZl93aGF0YXR0ciAoRHdhcmZfQXR0cmlidXRlICphdHRyKQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmR3ZmwvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJkd2ZsL0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3ZmwvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTI2NSw2ICsxMjY1LDExIEBACisgCisgMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA3LTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIE1ha2VmaWxlLmFtIChub2luc3RfSEVBREVSUyk6IEFkZCBsb2MyYy5jLgorIAorIAkqIHRlc3QyLmMgKG1haW4pOiBDaGVjayBzc2NhbmYgcmVzdWx0IHRvIHF1aWV0IHdhcm5pbmcuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWJsL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWJsL0NoYW5nZUxvZwkyMDEwLTAzLTA1IDA1OjQ4OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVibC9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC02MjQsNiArNjI0LDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmVibF8qX3NvX1NPVVJDRVMpOiBTZXQgdG8gJCgqX1NSQ1MpIHNvIGRlcGVuZGVuY3kKKyAJdHJhY2tpbmcgd29ya3MgcmlnaHQuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBsaWJlYmxfeDg2XzY0Lm1hcDogQWRkIHg4Nl82NF9jb3JlX25vdGUuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA2LTE0IDIxOjE3OjIwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC02NTcsNiArNjU3LDExIEBACisgCisgCSogZWxmLmg6IFVwZGF0ZSBmcm9tIGdsaWJjLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZfYmVnaW4uYyAocmVhZF9maWxlKSBbX01VREZMQVBdOiBEb24ndCB1c2UgbW1hcCBmb3Igbm93LgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9jb21tb24uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2NvbW1vbi5oCTIwMDktMDEtMDggMjA6NTY6MzYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2NvbW1vbi5oCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtMTYwLDcgKzE2MCw3IEBACisgICAoVmFyKSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK0BAIC0xNjksNyArMTY5LDcgQEAKKyAgIChEc3QpID0gKHNpemVvZiAoVmFyKSA9PSAxCQkJCQkJICAgICAgXAorIAkgICA/ICh1bnNpZ25lZCBjaGFyKSAoVmFyKQkJCQkJICAgICAgXAorIAkgICA6IChzaXplb2YgKFZhcikgPT0gMgkJCQkJCSAgICAgIFwKKy0JICAgICAgPyBic3dhcF8xNiAoVmFyKQkJCQkJCSAgICAgIFwKKysJICAgICAgPyAodW5zaWduZWQgc2hvcnQgaW50KSBic3dhcF8xNiAoVmFyKQkJCSAgICAgIFwKKyAJICAgICAgOiAoc2l6ZW9mIChWYXIpID09IDQJCQkJCSAgICAgIFwKKyAJCSA/IGJzd2FwXzMyIChWYXIpCQkJCQkgICAgICBcCisgCQkgOiBic3dhcF82NCAoVmFyKSkpKQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2FkZHIybGluZS5jCTIwMTAtMDUtMjggMTQ6Mzg6MzAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2FkZHIybGluZS5jCTIwMTAtMDctMDMgMTM6MDU6NDAuMDAwMDAwMDAwICswMDAwCitAQCAtNDQ3LDEwICs0NDcsMTAgQEAKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglbVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjUsOCArMTY1LDE2IEBACisgCSogcmVhZGVsZi5jIChhdHRyX2NhbGxiYWNrKTogVXNlIHByaW50X2Jsb2NrIG9ubHkgd2hlbiB3ZSBkb24ndCB1c2UKKyAJcHJpbnRfb3BzLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGQuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIHN0cmluZ3MuYyAocmVhZF9ibG9jayk6IENvbmRpdGlvbmFsaXplIHBvc2l4X2ZhZHZpc2UgdXNlCisrCW9uIFtQT1NJWF9GQURWX1NFUVVFTlRJQUxdLgorKwlGcm9tIFBldHIgU2FsaW5nZXIgPFBldHIuU2FsaW5nZXJAc2V6bmFtLmN6Pi4KKysKKyAJKiBhci5jIChkb19vcGVyX2V4dHJhY3QpOiBVc2UgcGF0aGNvbmYgaW5zdGVhZCBvZiBzdGF0ZnMuCisgCisgMjAwOS0wOC0wMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtMzMwLDYgKzMzOCw4IEBACisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19mcmFtZV9zZWN0aW9uKTogVXNlIHQgaW5zdGVhZCBvZiBqIGZvcm1hdHMKKyAJZm9yIHB0cmRpZmZfdCBPRkZTRVQuCisgCisrCSogYWRkcjJsaW5lLmMgKGhhbmRsZV9hZGRyZXNzKTogVXNlICVhIGluc3RlYWQgb2YgJW0gZm9yIGNvbXBhdGliaWxpdHkuCisrCisgMjAwOS0wMS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmbGludC5jIChjaGVja19wcm9ncmFtX2hlYWRlcik6IEZpeCB0eXBvIGluIC5laF9mcmFtZV9oZHIgc2VjdGlvbgorQEAgLTUxMyw2ICs1MjMsMTEgQEAKKyAJdGhhdCBtYXRjaGVzIGl0cyBQVF9MT0FEJ3MgcF9mbGFncyAmfiBQRl9XLiAgT24gc3BhcmMsIFBGX1ggcmVhbGx5CisgCWlzIHZhbGlkIGluIFJFTFJPLgorIAorKzIwMDgtMDMtMDEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogcmVhZGVsZi5jIChkdW1wX2FyY2hpdmVfaW5kZXgpOiBUd2VhayBwb3J0YWJpbGl0eSBoYWNrCisrCXRvIG1hdGNoIFtfX0dOVUNfXyA8IDRdIHRvby4KKysKKyAyMDA4LTAyLTI5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHJlYWRlbGYuYyAocHJpbnRfYXR0cmlidXRlcyk6IEFkZCBhIGNhc3QuCitAQCAtNzY0LDYgKzc3OSw4IEBACisgCisgCSogcmVhZGVsZi5jIChoZXhfZHVtcCk6IEZpeCByb3VuZGluZyBlcnJvciBpbiB3aGl0ZXNwYWNlIGNhbGN1bGF0aW9uLgorIAorKwkqIE1ha2VmaWxlLmFtIChyZWFkZWxmX25vX1dlcnJvcik6IE5ldyB2YXJpYWJsZS4KKysKKyAyMDA3LTEwLTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIG1ha2UtZGVidWctYXJjaGl2ZS5pbjogTmV3IGZpbGUuCitAQCAtMTIwMyw2ICsxMjIwLDEwIEBACisgCSogZWxmbGludC5jICh2YWxpZF9lX21hY2hpbmUpOiBBZGQgRU1fQUxQSEEuCisgCVJlcG9ydGVkIGJ5IENocmlzdGlhbiBBaWNoaW5nZXIgPEdyZWVrMEBnbXgubmV0Pi4KKyAKKysJKiBzdHJpbmdzLmMgKG1hcF9maWxlKTogRGVmaW5lIFBPU0lYX01BRFZfU0VRVUVOVElBTCB0bworKwlNQURWX1NFUVVFTlRJQUwgaWYgdW5kZWZpbmVkLiAgCURvbid0IGNhbGwgcG9zaXhfbWFkdmlzZQorKwlpZiBuZWl0aGVyIGlzIGRlZmluZWQuCisrCisgMjAwNi0wOC0wOCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmbGludC5jIChjaGVja19keW5hbWljKTogRG9uJ3QgcmVxdWlyZSBEVF9IQVNIIGZvciBEVF9TWU1UQUIuCitAQCAtMTI3OSw2ICsxMzAwLDEwIEBACisgCSogTWFrZWZpbGUuYW06IEFkZCBoYWNrcyB0byBjcmVhdGUgZGVwZW5kZW5jeSBmaWxlcyBmb3Igbm9uLWdlbmVyaWMKKyAJbGlua2VyLgorIAorKzIwMDYtMDQtMDUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogc3RyaW5ncy5jIChNQVBfUE9QVUxBVEUpOiBEZWZpbmUgdG8gMCBpZiB1bmRlZmluZWQuCisrCisgMjAwNi0wNi0xMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGRnZW5lcmljLmMgKGxkX2dlbmVyaWNfZ2VuZXJhdGVfc2VjdGlvbnMpOiBEb24ndCBjcmVhdGUgLmludGVycAorQEAgLTE2MjcsNiArMTY1MiwxMSBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbG9jX3NlY3Rpb24pOiBGaXggaW5kZW50YXRpb24gZm9yIGxhcmdlcgorIAlhZGRyZXNzIHNpemUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbGluZV9zZWN0aW9uKTogUHJpbnQgc2VjdGlvbiBvZmZzZXQgb2YgZWFjaAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9maW5kdGV4dHJlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvZmluZHRleHRyZWwuYwkyMDA5LTAyLTExIDAxOjEyOjU5LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9maW5kdGV4dHJlbC5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNDkwLDcgKzQ5MCwxMSBAQAorIAorIAorIHN0YXRpYyB2b2lkCistY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbbnNlZ21lbnRzXSwKKytjaGVja19yZWwgKHNpemVfdCBuc2VnbWVudHMsIHN0cnVjdCBzZWdtZW50cyBzZWdtZW50c1sKKysjaWYgX19HTlVDX18gPj0gNAorKwkJCQkJCSAgICAgIG5zZWdtZW50cworKyNlbmRpZgorKwkgICBdLAorIAkgICBHRWxmX0FkZHIgYWRkciwgRWxmICplbGYsIEVsZl9TY24gKnN5bXNjbiwgRHdhcmYgKmR3LAorIAkgICBjb25zdCBjaGFyICpmbmFtZSwgYm9vbCBtb3JlX3RoYW5fb25lLCB2b2lkICoqa25vd25zcmNzKQorIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvbGQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2xkLmgJMjAwOS0wNi0xMyAyMjozOTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvbGQuaAkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTExMjIsNiArMTEyMiw3IEBACisgCisgLyogQ2hlY2tlZCB3aGV0aGVyIHRoZSBzeW1ib2wgaXMgdW5kZWZpbmVkIGFuZCByZWZlcmVuY2VkIGZyb20gYSBEU08uICAqLworIGV4dGVybiBib29sIGxpbmtlZF9mcm9tX2Rzb19wIChzdHJ1Y3Qgc2NuaW5mbyAqc2NuaW5mbywgc2l6ZV90IHN5bWlkeCk7CisrI2lmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmICEoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyKQorICNpZmRlZiBfX0dOVUNfU1REQ19JTkxJTkVfXworIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisgI2VuZGlmCitAQCAtMTEzOSw1ICsxMTQwLDYgQEAKKyAKKyAgIHJldHVybiBzeW0tPmRlZmluZWQgJiYgc3ltLT5pbl9kc287CisgfQorKyNlbmRpZgkvKiBPcHRpbWl6aW5nIGFuZCBub3QgR0NDIDQuMi4gICovCisgCisgI2VuZGlmCS8qIGxkLmggKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9NYWtlZmlsZS5hbQkyMDEwLTAzLTA1IDA1OjQ4OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9NYWtlZmlsZS5hbQkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTk5LDYgKzk5LDkgQEAKKyAjIFhYWCBXaGlsZSB0aGUgZmlsZSBpcyBub3QgZmluaXNoZWQsIGRvbid0IHdhcm4gYWJvdXQgdGhpcworIGxkZ2VuZXJpY19ub19XdW51c2VkID0geWVzCisgCisrIyBCdWdneSBvbGQgY29tcGlsZXJzLgorK3JlYWRlbGZfbm9fV2Vycm9yID0geWVzCisrCisgcmVhZGVsZl9MREFERCA9ICQobGliZHcpICQobGliZWJsKSAkKGxpYmVsZikgJChsaWJldSkgJChsaWJtdWRmbGFwKSAtbGRsCisgbm1fTERBREQgPSAkKGxpYmR3KSAkKGxpYmVibCkgJChsaWJlbGYpICQobGliZXUpICQobGlibXVkZmxhcCkgLWxkbAorIHNpemVfTERBREQgPSAkKGxpYmVsZikgJChsaWJldSkgJChsaWJtdWRmbGFwKQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3JlYWRlbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3JlYWRlbGYuYwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC03ODQ1LDcgKzc4NDUsNyBAQAorIAkgIGlmICh1bmxpa2VseSAoZWxmX3JhbmQgKGVsZiwgYXNfb2ZmKSA9PSAwKQorIAkgICAgICB8fCB1bmxpa2VseSAoKHN1YmVsZiA9IGVsZl9iZWdpbiAoLTEsIEVMRl9DX1JFQURfTU1BUCwgZWxmKSkKKyAJCQkgICA9PSBOVUxMKSkKKy0jaWYgX19HTElCQ19fIDwgMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fIDwgNykKKysjaWYgX19HTElCQ19fIDwgMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fIDwgNykgfHwgX19HTlVDX18gPCA0CisgCSAgICB3aGlsZSAoMSkKKyAjZW5kaWYKKyAJICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaW5ncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvc3RyaW5ncy5jCTIwMDktMDItMTEgMDE6MTI6NTkuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmluZ3MuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTUxLDYgKzUxLDEwIEBACisgCisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZm5kZWYgTUFQX1BPUFVMQVRFCisrIyBkZWZpbmUgTUFQX1BPUFVMQVRFIDAKKysjZW5kaWYKKysKKyAKKyAvKiBQcm90b3R5cGVzIG9mIGxvY2FsIGZ1bmN0aW9ucy4gICovCisgc3RhdGljIGludCByZWFkX2ZkIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZuYW1lLCBvZmY2NF90IGZkbGVuKTsKK0BAIC00OTEsOCArNDk1LDEzIEBACisgCQkgICAgZmQsIHN0YXJ0X29mZik7CisgICAgICAgaWYgKG1lbSAhPSBNQVBfRkFJTEVEKQorIAl7CisrI2lmICFkZWZpbmVkIFBPU0lYX01BRFZfU0VRVUVOVElBTCAmJiBkZWZpbmVkIE1BRFZfU0VRVUVOVElBTAorKyMgZGVmaW5lIFBPU0lYX01BRFZfU0VRVUVOVElBTCBNQURWX1NFUVVFTlRJQUwKKysjZW5kaWYKKysjaWZkZWYgUE9TSVhfTUFEVl9TRVFVRU5USUFMCisgCSAgLyogV2Ugd2lsbCBnbyB0aHJvdWdoIHRoZSBtYXBwaW5nIHNlcXVlbnRpYWxseS4gICovCisgCSAgKHZvaWQpIHBvc2l4X21hZHZpc2UgKG1lbSwgbWFwX3NpemUsIFBPU0lYX01BRFZfU0VRVUVOVElBTCk7CisrI2VuZGlmCisgCSAgYnJlYWs7CisgCX0KKyAgICAgICBpZiAoZXJybm8gIT0gRUlOVkFMICYmIGVycm5vICE9IEVOT01FTSkKK0BAIC01ODYsOSArNTk1LDExIEBACisgICAgICAgZWxmbWFwX29mZiA9IGZyb20gJiB+KHBzIC0gMSk7CisgICAgICAgZWxmbWFwX2Jhc2UgPSBlbGZtYXAgPSBtYXBfZmlsZSAoZmQsIGVsZm1hcF9vZmYsIGZkbGVuLCAmZWxmbWFwX3NpemUpOworIAorKyNpZmRlZiBQT1NJWF9GQURWX1NFUVVFTlRJQUwKKyAgICAgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKKyAJLyogTGV0IHRoZSBrZXJuZWwga25vdyB3ZSBhcmUgZ29pbmcgdG8gcmVhZCBldmVyeXRoaW5nIGluIHNlcXVlbmNlLiAgKi8KKyAJKHZvaWQpIHBvc2l4X2ZhZHZpc2UgKGZkLCAwLCAwLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorICAgICB9CisgCisgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3N0cmlwLmMJMjAxMC0wMS0xNSAwOTowNTo1NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvc3RyaXAuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTUzLDYgKzUzLDEyIEBACisgI2luY2x1ZGUgPGxpYmVibC5oPgorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKysjaWZkZWYgSEFWRV9GVVRJTUVTCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgZnV0aW1lcyAoZmQsIHR2cCkKKysjZWxzZQorKyMgZGVmaW5lIEZVVElNRVMoZmQsIGZuYW1lLCB0dnApIHV0aW1lcyAoZm5hbWUsIHR2cCkKKysjZW5kaWYKKysKKyAKKyAvKiBOYW1lIGFuZCB2ZXJzaW9uIG9mIHByb2dyYW0uICAqLworIHN0YXRpYyB2b2lkIHByaW50X3ZlcnNpb24gKEZJTEUgKnN0cmVhbSwgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKTsKK0BAIC0zMDEsOCArMzA3LDE4IEBACisgCisgICAgICAgLyogSWYgd2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgdGltZXN0YW1wLCB3ZSBuZWVkIGl0IGluIHRoZQorIAkgZm9ybWF0IHV0aW1lcygpIHVuZGVyc3RhbmRzLiAgKi8KKysjaWZkZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9BVElNCisgICAgICAgVElNRVNQRUNfVE9fVElNRVZBTCAoJnR2WzBdLCAmcHJlX3N0LnN0X2F0aW0pOworKyNlbHNlCisrICAgICAgdHZbMF0udHZfc2VjID0gcHJlX3N0LnN0X2F0aW1lOworKyAgICAgIHR2WzBdLnR2X3VzZWMgPSAwOworKyNlbmRpZgorKyNpZmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX01USU0KKyAgICAgICBUSU1FU1BFQ19UT19USU1FVkFMICgmdHZbMV0sICZwcmVfc3Quc3RfbXRpbSk7CisrI2Vsc2UKKysgICAgICB0dlsxXS50dl9zZWMgPSBwcmVfc3Quc3RfYXRpbWU7CisrICAgICAgdHZbMV0udHZfdXNlYyA9IDA7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIC8qIE9wZW4gdGhlIGZpbGUuICAqLworQEAgLTE3NDcsNyArMTc2Myw3IEBACisgICAvKiBJZiByZXF1ZXN0ZWQsIHByZXNlcnZlIHRoZSB0aW1lc3RhbXAuICAqLworICAgaWYgKHR2cCAhPSBOVUxMKQorICAgICB7CistICAgICAgaWYgKGZ1dGltZXMgKGZkLCB0dnApICE9IDApCisrICAgICAgaWYgKEZVVElNRVMgKGZkLCBvdXRwdXRfZm5hbWUsIHR2cCkgIT0gMCkKKyAJeworIAkgIGVycm9yICgwLCBlcnJubywgZ2V0dGV4dCAoIlwKKyBjYW5ub3Qgc2V0IGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIGRhdGUgb2YgJyVzJyIpLAorQEAgLTE4MDQsNyArMTgyMCw3IEBACisgCisgICBpZiAodHZwICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBpZiAodW5saWtlbHkgKGZ1dGltZXMgKGZkLCB0dnApICE9IDApKQorKyAgICAgIGlmICh1bmxpa2VseSAoRlVUSU1FUyAoZmQsIGZuYW1lLCB0dnApICE9IDApKQorIAl7CisgCSAgZXJyb3IgKDAsIGVycm5vLCBnZXR0ZXh0ICgiXAorIGNhbm5vdCBzZXQgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gZGF0ZSBvZiAnJXMnIiksIGZuYW1lKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC90ZXN0cy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1NCw2ICsxNTQsOCBAQAorIAorIDIwMDgtMDEtMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogbGluZTJhZGRyLmMgKG1haW4pOiBSZXZlcnQgbGFzdCBjaGFuZ2UuCisrCisgCSogdGVzdGZpbGU0NS5TLmJ6MjogQWRkIHRlc3RzIGZvciBjbHRxLCBjcXRvLgorIAkqIHRlc3RmaWxlNDUuZXhwZWN0LmJ6MjogQWRqdXN0LgorIAorQEAgLTg2Miw2ICs4NjQsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaC4KKyAJKEVYVFJBX0RJU1QpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaCBhbmQgdGVzdGZpbGUxOC5iejIuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTI0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBnZXQtZmlsZXMuYyAobWFpbik6IFVzZSBjb3JyZWN0IGZvcm1hdCBzcGVjaWZpZXIuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzIsNyArMTMyLDcgQEAKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzOTg1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZgpAQCAtMCwwICsxLDE3MDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjQ5LDEwICs2NDksNTMgQEAKKyAJSWYgc2VjdGlvbiBjb250ZW50IGhhc24ndCBiZWVuIHJlYWQgeWV0LCBkbyBpdCBiZWZvcmUgbG9va2luZyBmb3IgdGhlCisgCWJsb2NrIHNpemUuICBJZiBubyBzZWN0aW9uIGRhdGEgcHJlc2VudCwgaW5mZXIgc2l6ZSBvZiBzZWN0aW9uIGhlYWRlci4KKyAKKysyMDA1LTA1LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysJKiBsaWJlbGZQLmggKElOVkFMSURfTkRYKTogRGVmaW5lLgorKwkqIGdlbGZfZ2V0ZHluLmMgKGdlbGZfZ2V0ZHluKTogVXNlIGl0LiAgUmVtb3ZlIG5keCA8IDAgdGVzdCBpZiBhbnkuCisrCSogZ2VsZl9nZXRsaWIuYyAoZ2VsZl9nZXRsaWIpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldG1vdmUuYyAoZ2VsZl9nZXRtb3ZlKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRyZWwuYyAoZ2VsZl9nZXRyZWwpOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHJlbGEuYyAoZ2VsZl9nZXRyZWxhKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRzeW0uYyAoZ2VsZl9nZXRzeW0pOiBMaWtld2lzZS4KKysJKiBnZWxmX2dldHN5bWluZm8uYyAoZ2VsZl9nZXRzeW1pbmZvKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRzeW1zaG5keC5jIChnZWxmX2dldHN5bXNobmR4KTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXR2ZXJzeW0uYyAoZ2VsZl9nZXR2ZXJzeW0pOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9keW4uYyAoZ2VsZl91cGRhdGVfZHluKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfbGliLmMgKGdlbGZfdXBkYXRlX2xpYik6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX21vdmUuYyAoZ2VsZl91cGRhdGVfbW92ZSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3JlbC5jIChnZWxmX3VwZGF0ZV9yZWwpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9yZWxhLmMgKGdlbGZfdXBkYXRlX3JlbGEpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9zeW0uYyAoZ2VsZl91cGRhdGVfc3ltKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfc3ltaW5mby5jIChnZWxmX3VwZGF0ZV9zeW1pbmZvKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfc3ltc2huZHguYyAoZ2VsZl91cGRhdGVfc3ltc2huZHgpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV92ZXJzeW0uYyAoZ2VsZl91cGRhdGVfdmVyc3ltKTogTGlrZXdpc2UuCisrCSogZWxmX25ld3Njbi5jIChlbGZfbmV3c2NuKTogQ2hlY2sgZm9yIG92ZXJmbG93LgorKwkqIGVsZjMyX3VwZGF0ZWZpbGUuYyAoX19lbGZ3MihMSUJFTEZCSVRTLHVwZGF0ZW1tYXApKTogTGlrZXdpc2UuCisrCShfX2VsZncyKExJQkVMRkJJVFMsdXBkYXRlZmlsZSkpOiBMaWtld2lzZS4KKysJKiBlbGZfYmVnaW4uYyAoZmlsZV9yZWFkX2VsZik6IExpa2V3aXNlLgorKwkqIGVsZjMyX25ld3BoZHIuYyAoZWxmdzIoTElCRUxGQklUUyxuZXdwaGRyKSk6IExpa2V3aXNlLgorKwkqIGVsZl9nZXRhcnN5bS5jIChlbGZfZ2V0YXJzeW0pOiBMaWtld2lzZS4KKysJKiBlbGYzMl9nZXRzaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsZ2V0c2hkcikpOiBMaWtld2lzZS4KKyAyMDA1LTA1LTExICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGYuaDogVXBkYXRlIGFnYWluLgorIAorKzIwMDUtMDUtMTcgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGVsZjMyX2dldHBoZHIuYyAoZWxmdzIoTElCRUxGQklUUyxnZXRwaGRyKSk6IENoZWNrIGlmIHByb2dyYW0gaGVhZGVyCisrCXRhYmxlIGZpdHMgaW50byBvYmplY3QncyBib3VuZHMuCisrCSogZWxmX2dldHNoc3RybmR4LmMgKGVsZl9nZXRzaHN0cm5keCk6IEFkZCBlbGYtPnN0YXJ0X29mZnNldCB0bworKwllbGYtPm1hcF9hZGRyZXNzLiAgQ2hlY2sgaWYgZmlyc3Qgc2VjdGlvbiBoZWFkZXIgZml0cyBpbnRvIG9iamVjdCdzCisrCWJvdW5kcy4KKysJKiBlbGYzMl9nZXRzaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsZ2V0c2hkcikpOgorKwlDaGVjayBpZiBzZWN0aW9uIGhlYWRlciB0YWJsZSBmaXRzIGludG8gb2JqZWN0J3MgYm91bmRzLgorKwkqIGVsZl9iZWdpbi5jIChnZXRfc2hudW0pOiBFbnN1cmUgc2VjdGlvbiBoZWFkZXJzIGZpdHMgaW50bworKwlvYmplY3QncyBib3VuZHMuCisrCShmaWxlX3JlYWRfZWxmKTogTWFrZSBzdXJlIHNjbmNudCBpcyBzbWFsbCBlbm91Z2ggdG8gYWxsb2NhdGUgYm90aAorKwlFbGZYWF9TaGRyIGFuZCBFbGZfU2NuIGFycmF5LiAgTWFrZSBzdXJlIHNlY3Rpb24gYW5kIHByb2dyYW0gaGVhZGVyCisrCXRhYmxlcyBmaXQgaW50byBvYmplY3QncyBib3VuZHMuICBBdm9pZCBtZW1vcnkgbGVhayBvbiBmYWlsdXJlLgorKworIDIwMDUtMDUtMDkgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZi5oOiBVcGRhdGUgZnJvbSBnbGliYy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfZ2V0cGhkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfZ2V0cGhkci5jCTIwMTAtMDQtMjEgMTQ6MjY6NDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHBoZHIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTExNCw2ICsxMTQsMTYgQEAKKyAKKyAgICAgICBpZiAoZWxmLT5tYXBfYWRkcmVzcyAhPSBOVUxMKQorIAl7CisrCSAgLyogRmlyc3Qgc2VlIHdoZXRoZXIgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBFTEYgaGVhZGVyIGlzCisrCSAgICAgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKwkgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9waG9mZiA+PSBlbGYtPm1heGltdW1fc2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gZWhkci0+ZV9waG9mZiA8IHNpemUpKQorKwkgICAgeworKwkgICAgICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9QSERSKTsKKysJICAgICAgZ290byBvdXQ7CisrCSAgICB9CisrCisgCSAgLyogQWxsIHRoZSBkYXRhIGlzIGFscmVhZHkgbWFwcGVkLiAgVXNlIGl0LiAgKi8KKyAJICB2b2lkICpmaWxlX3BoZHIgPSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcworIAkJCSAgICAgKyBlbGYtPnN0YXJ0X29mZnNldCArIGVoZHItPmVfcGhvZmYpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRzaGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGYzMl9nZXRzaGRyLmMJMjAwOS0wNi0xMyAyMjo0MTo0Mi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfZ2V0c2hkci5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBSZXR1cm4gc2VjdGlvbiBoZWFkZXIuCistICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDA1LCAyMDA3LCAyMDA5IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAxOTk4LgorIAorQEAgLTgxLDcgKzgxLDggQEAKKyAgICAgZ290byBvdXQ7CisgCisgICBzaXplX3Qgc2hudW07CistICBpZiAoX19lbGZfZ2V0c2hkcm51bV9yZGxvY2sgKGVsZiwgJnNobnVtKSAhPSAwKQorKyAgaWYgKF9fZWxmX2dldHNoZHJudW1fcmRsb2NrIChlbGYsICZzaG51bSkgIT0gMAorKyAgICAgIHx8IHNobnVtID4gU0laRV9NQVggLyBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsU2hkcikpKQorICAgICBnb3RvIG91dDsKKyAgIHNpemVfdCBzaXplID0gc2hudW0gKiBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsU2hkcikpOworIAorQEAgLTk4LDYgKzk5LDE2IEBACisgCisgICBpZiAoZWxmLT5tYXBfYWRkcmVzcyAhPSBOVUxMKQorICAgICB7CisrICAgICAgLyogRmlyc3Qgc2VlIHdoZXRoZXIgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBFTEYgaGVhZGVyIGlzCisrCSB2YWxpZCBhbmQgaXQgZG9lcyBub3QgYXNrIGZvciB0b28gbXVjaC4gICovCisrICAgICAgaWYgKHVubGlrZWx5IChlaGRyLT5lX3Nob2ZmID49IGVsZi0+bWF4aW11bV9zaXplKQorKwkgIHx8IHVubGlrZWx5IChlbGYtPm1heGltdW1fc2l6ZSAtIGVoZHItPmVfc2hvZmYgPCBzaXplKSkKKysJeworKwkgIC8qIFNvbWV0aGluZyBpcyB3cm9uZy4gICovCisrCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfU0VDVElPTl9IRUFERVIpOworKwkgIGdvdG8gZnJlZV9hbmRfb3V0OworKwl9CisrCisgICAgICAgRWxmVzIoTElCRUxGQklUUyxTaGRyKSAqbm90Y3Z0OworIAorICAgICAgIC8qIEFsbCB0aGUgZGF0YSBpcyBhbHJlYWR5IG1hcHBlZC4gIElmIHdlIGNvdWxkIHVzZSBpdAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9uZXdwaGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGYzMl9uZXdwaGRyLmMJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfbmV3cGhkci5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTM1LDYgKzEzNSwxMiBAQAorIAkgICB8fCBjb3VudCA9PSBQTl9YTlVNCisgCSAgIHx8IGVsZi0+c3RhdGUuRUxGVyhlbGYsTElCRUxGQklUUykucGhkciA9PSBOVUxMKQorICAgICB7CisrICAgICAgaWYgKHVubGlrZWx5IChjb3VudCA+IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFBoZHIpKSkpCisrCXsKKysJICByZXN1bHQgPSBOVUxMOworKwkgIGdvdG8gb3V0OworKwl9CisrCisgICAgICAgLyogQWxsb2NhdGUgYSBuZXcgcHJvZ3JhbSBoZWFkZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mCisgCSBlbGVtZW50cy4gICovCisgICAgICAgcmVzdWx0ID0gKEVsZlcyKExJQkVMRkJJVFMsUGhkcikgKikKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfdXBkYXRlZmlsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfdXBkYXRlZmlsZS5jCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX3VwZGF0ZWZpbGUuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTIyMyw2ICsyMjMsOSBAQAorICAgLyogV3JpdGUgYWxsIHRoZSBzZWN0aW9ucy4gIFdlbGwsIG9ubHkgdGhvc2Ugd2hpY2ggYXJlIG1vZGlmaWVkLiAgKi8KKyAgIGlmIChzaG51bSA+IDApCisgICAgIHsKKysgICAgICBpZiAodW5saWtlbHkgKHNobnVtID4gU0laRV9NQVggLyBzaXplb2YgKEVsZl9TY24gKikpKQorKyAJcmV0dXJuIDE7CisrCisgICAgICAgRWxmX1Njbkxpc3QgKmxpc3QgPSAmZWxmLT5zdGF0ZS5FTEZXKGVsZixMSUJFTEZCSVRTKS5zY25zOworICAgICAgIEVsZl9TY24gKipzY25zID0gKEVsZl9TY24gKiopIGFsbG9jYSAoc2hudW0gKiBzaXplb2YgKEVsZl9TY24gKikpOworICAgICAgIGNoYXIgKmNvbnN0IHNoZHJfc3RhcnQgPSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcyArIGVsZi0+c3RhcnRfb2Zmc2V0CitAQCAtNjQ1LDYgKzY0OCwxMCBAQAorICAgLyogV3JpdGUgYWxsIHRoZSBzZWN0aW9ucy4gIFdlbGwsIG9ubHkgdGhvc2Ugd2hpY2ggYXJlIG1vZGlmaWVkLiAgKi8KKyAgIGlmIChzaG51bSA+IDApCisgICAgIHsKKysgICAgICBpZiAodW5saWtlbHkgKHNobnVtID4gU0laRV9NQVggLyAoc2l6ZW9mIChFbGZfU2NuICopCisrCQkJCQkrIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxTaGRyKSkpKSkKKysJcmV0dXJuIDE7CisrCisgICAgICAgb2ZmX3Qgc2hkcl9vZmZzZXQgPSBlbGYtPnN0YXJ0X29mZnNldCArIGVoZHItPmVfc2hvZmY7CisgI2lmIEVWX05VTSAhPSAyCisgICAgICAgeGZjdF90IHNoZHJfZmN0cCA9IF9fZWxmX3hmY3RzdG9tW19fbGliZWxmX3ZlcnNpb24gLSAxXVtFVl9DVVJSRU5UIC0gMV1bRUxGVyhFTEZDTEFTUywgTElCRUxGQklUUykgLSAxXVtFTEZfVF9TSERSXTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfYmVnaW4uYwkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfYmVnaW4uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTE2NSw3ICsxNjUsOCBAQAorIAorICAgICAgIGlmICh1bmxpa2VseSAocmVzdWx0ID09IDApICYmIGVoZHIuZTMyLT5lX3Nob2ZmICE9IDApCisgCXsKKy0JICBpZiAoZWhkci5lMzItPmVfc2hvZmYgKyBzaXplb2YgKEVsZjMyX1NoZHIpID4gbWF4c2l6ZSkKKysJICBpZiAodW5saWtlbHkgKGVoZHIuZTMyLT5lX3Nob2ZmID49IG1heHNpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChtYXhzaXplIC0gZWhkci5lMzItPmVfc2hvZmYgPCBzaXplb2YgKEVsZjMyX1NoZHIpKSkKKyAJICAgIC8qIENhbm5vdCByZWFkIHRoZSBmaXJzdCBzZWN0aW9uIGhlYWRlci4gICovCisgCSAgICByZXR1cm4gMDsKKyAKK0BAIC0yMTMsNyArMjE0LDggQEAKKyAKKyAgICAgICBpZiAodW5saWtlbHkgKHJlc3VsdCA9PSAwKSAmJiBlaGRyLmU2NC0+ZV9zaG9mZiAhPSAwKQorIAl7CistCSAgaWYgKGVoZHIuZTY0LT5lX3Nob2ZmICsgc2l6ZW9mIChFbGY2NF9TaGRyKSA+IG1heHNpemUpCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLmU2NC0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAoZWhkci5lNjQtPmVfc2hvZmYgKyBzaXplb2YgKEVsZjY0X1NoZHIpID4gbWF4c2l6ZSkpCisgCSAgICAvKiBDYW5ub3QgcmVhZCB0aGUgZmlyc3Qgc2VjdGlvbiBoZWFkZXIuICAqLworIAkgICAgcmV0dXJuIDA7CisgCitAQCAtMjg1LDYgKzI4NywxNSBAQAorICAgICAvKiBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMuICAqLworICAgICByZXR1cm4gTlVMTDsKKyAKKysgIC8qIENoZWNrIGZvciB0b28gbWFueSBzZWN0aW9ucy4gICovCisrICBpZiAoZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikKKysgICAgeworKyAgICAgIGlmIChzY25jbnQgPiBTSVpFX01BWCAvIChzaXplb2YgKEVsZl9TY24pICsgc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisrCXJldHVybiBOVUxMOworKyAgICB9CisrICBlbHNlIGlmIChzY25jbnQgPiBTSVpFX01BWCAvIChzaXplb2YgKEVsZl9TY24pICsgc2l6ZW9mIChFbGY2NF9TaGRyKSkpCisrICAgIHJldHVybiBOVUxMOworKworICAgLyogV2UgY2FuIG5vdyBhbGxvY2F0ZSB0aGUgbWVtb3J5LiAgRXZlbiBpZiB0aGVyZSBhcmUgbm8gc2VjdGlvbiBoZWFkZXJzLAorICAgICAgd2UgYWxsb2NhdGUgc3BhY2UgZm9yIGEgemVyb3RoIHNlY3Rpb24gaW4gY2FzZSB3ZSBuZWVkIGl0IGxhdGVyLiAgKi8KKyAgIGNvbnN0IHNpemVfdCBzY25tYXggPSAoc2NuY250ID86IChjbWQgPT0gRUxGX0NfUkRXUiB8fCBjbWQgPT0gRUxGX0NfUkRXUl9NTUFQKQorQEAgLTMyNCw2ICszMzUsMTYgQEAKKyAJeworIAkgIC8qIFdlIGNhbiB1c2UgdGhlIG1tYXBwZWQgbWVtb3J5LiAgKi8KKyAJICBlbGYtPnN0YXRlLmVsZjMyLmVoZHIgPSBlaGRyOworKworKwkgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAobWF4c2l6ZSAtIGVoZHItPmVfc2hvZmYKKysJCQkgICA8IHNjbmNudCAqIHNpemVvZiAoRWxmMzJfU2hkcikpKQorKwkgICAgeworKwkgICAgZnJlZV9hbmRfb3V0OgorKwkgICAgICBmcmVlIChlbGYpOworKwkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9GSUxFKTsKKysJICAgICAgcmV0dXJuIE5VTEw7CisrCSAgICB9CisgCSAgZWxmLT5zdGF0ZS5lbGYzMi5zaGRyCisgCSAgICA9IChFbGYzMl9TaGRyICopICgoY2hhciAqKSBlaGRyICsgZWhkci0+ZV9zaG9mZik7CisgCitAQCAtNDEwLDYgKzQzMSwxMSBAQAorIAl7CisgCSAgLyogV2UgY2FuIHVzZSB0aGUgbW1hcHBlZCBtZW1vcnkuICAqLworIAkgIGVsZi0+c3RhdGUuZWxmNjQuZWhkciA9IGVoZHI7CisrCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLT5lX3Nob2ZmID49IG1heHNpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChlaGRyLT5lX3Nob2ZmCisrCQkJICAgKyBzY25jbnQgKiBzaXplb2YgKEVsZjMyX1NoZHIpID4gbWF4c2l6ZSkpCisrCSAgICBnb3RvIGZyZWVfYW5kX291dDsKKyAJICBlbGYtPnN0YXRlLmVsZjY0LnNoZHIKKyAJICAgID0gKEVsZjY0X1NoZHIgKikgKChjaGFyICopIGVoZHIgKyBlaGRyLT5lX3Nob2ZmKTsKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2dldGFyc3ltLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfZ2V0YXJzeW0uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTE3OSw2ICsxNzksOSBAQAorICAgICAgIHNpemVfdCBpbmRleF9zaXplID0gYXRvbCAodG1wYnVmKTsKKyAKKyAgICAgICBpZiAoU0FSTUFHICsgc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyKSArIGluZGV4X3NpemUgPiBlbGYtPm1heGltdW1fc2l6ZQorKyNpZiBTSVpFX01BWCA8PSA0Mjk0OTY3Mjk1VQorKwkgIHx8IG4gPj0gU0laRV9NQVggLyBzaXplb2YgKEVsZl9BcnN5bSkKKysjZW5kaWYKKyAJICB8fCBuICogc2l6ZW9mICh1aW50MzJfdCkgPiBpbmRleF9zaXplKQorIAl7CisgCSAgLyogVGhpcyBpbmRleCB0YWJsZSBjYW5ub3QgYmUgcmlnaHQgc2luY2UgaXQgZG9lcyBub3QgZml0IGludG8KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2dldHNoZHJzdHJuZHguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9nZXRzaGRyc3RybmR4LmMJMjAwOS0wNi0xMyAyMjozMTozNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2dldHNoZHJzdHJuZHguYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEyNSwxMCArMTI1LDI1IEBACisgCSAgICAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwKKyAJCSAgJiYgZWxmLT5zdGF0ZS5lbGYzMi5laGRyLT5lX2lkZW50W0VJX0RBVEFdID09IE1ZX0VMRkRBVEEKKyAJCSAgJiYgKEFMTE9XX1VOQUxJR05FRAorLQkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpCisrCQkgICAgICB8fCAoKChzaXplX3QpICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzCisrCQkJICAgKyBlbGYtPnN0YXJ0X29mZnNldCArIG9mZnNldCkpCisgCQkJICAmIChfX2FsaWdub2ZfXyAoRWxmMzJfU2hkcikgLSAxKSkgPT0gMCkpCistCQkvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworLQkJbnVtID0gKChFbGYzMl9TaGRyICopIChlbGYtPm1hcF9hZGRyZXNzICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl7CisrCQkgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkJICAgICB2YWxpZCBhbmQgaXQgZG9lcyBub3QgYXNrIGZvciB0b28gbXVjaC4gICovCisrCQkgIGlmICh1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBvZmZzZXQKKysJCQkJPCBzaXplb2YgKEVsZjMyX1NoZHIpKSkKKysJCSAgICB7CisrCQkgICAgICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfU0VDVElPTl9IRUFERVIpOworKwkJICAgICAgcmVzdWx0ID0gLTE7CisrCQkgICAgICBnb3RvIG91dDsKKysJCSAgICB9CisrCisrCQkgIC8qIFdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gICovCisrCQkgIG51bSA9ICgoRWxmMzJfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIGVsZi0+c3RhcnRfb2Zmc2V0CisrCQkJCQkgKyBvZmZzZXQpKS0+c2hfbGluazsKKysJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBXZSBhdm9pZCByZWFkaW5nIGluIGFsbCB0aGUgc2VjdGlvbiBoZWFkZXJzLiAgSnVzdCByZWFkCitAQCAtMTYzLDEwICsxNzgsMjUgQEAKKyAJICAgICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTAorIAkJICAmJiBlbGYtPnN0YXRlLmVsZjY0LmVoZHItPmVfaWRlbnRbRUlfREFUQV0gPT0gTVlfRUxGREFUQQorIAkJICAmJiAoQUxMT1dfVU5BTElHTkVECistCQkgICAgICB8fCAoKChzaXplX3QpICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzICsgb2Zmc2V0KSkKKysJCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MKKysJCQkgICArIGVsZi0+c3RhcnRfb2Zmc2V0ICsgb2Zmc2V0KSkKKyAJCQkgICYgKF9fYWxpZ25vZl9fIChFbGY2NF9TaGRyKSAtIDEpKSA9PSAwKSkKKy0JCS8qIFdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gICovCistCQludW0gPSAoKEVsZjY0X1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKS0+c2hfbGluazsKKysJCXsKKysJCSAgLyogRmlyc3Qgc2VlIHdoZXRoZXIgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBFTEYgaGVhZGVyIGlzCisrCQkgICAgIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysJCSAgaWYgKHVubGlrZWx5IChlbGYtPm1heGltdW1fc2l6ZSAtIG9mZnNldAorKwkJCQk8IHNpemVvZiAoRWxmNjRfU2hkcikpKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFNvbWV0aGluZyBpcyB3cm9uZy4gICovCisrCQkgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9TRUNUSU9OX0hFQURFUik7CisrCQkgICAgICByZXN1bHQgPSAtMTsKKysJCSAgICAgIGdvdG8gb3V0OworKwkJICAgIH0KKysKKysJCSAgLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKysJCSAgbnVtID0gKChFbGY2NF9TaGRyICopIChlbGYtPm1hcF9hZGRyZXNzICsgZWxmLT5zdGFydF9vZmZzZXQKKysJCQkJCSArIG9mZnNldCkpLT5zaF9saW5rOworKwkJfQorIAkgICAgICBlbHNlCisgCQl7CisgCQkgIC8qIFdlIGF2b2lkIHJlYWRpbmcgaW4gYWxsIHRoZSBzZWN0aW9uIGhlYWRlcnMuICBKdXN0IHJlYWQKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX25ld3Njbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX25ld3Njbi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9uZXdzY24uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEwNCwxMCArMTA0LDE4IEBACisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBXZSBtdXN0IGFsbG9jYXRlIGEgbmV3IGVsZW1lbnQuICAqLworLSAgICAgIEVsZl9TY25MaXN0ICpuZXdwOworKyAgICAgIEVsZl9TY25MaXN0ICpuZXdwID0gTlVMTDsKKyAKKyAgICAgICBhc3NlcnQgKGVsZi0+c3RhdGUuZWxmLnNjbmluY3IgPiAwKTsKKyAKKysgICAgICBpZiAoCisrI2lmIFNJWkVfTUFYIDw9IDQyOTQ5NjcyOTVVCisrCSAgbGlrZWx5IChlbGYtPnN0YXRlLmVsZi5zY25pbmNyCisrCQkgIDwgU0laRV9NQVggLyAyIC8gc2l6ZW9mIChFbGZfU2NuKSAtIHNpemVvZiAoRWxmX1Njbkxpc3QpKQorKyNlbHNlCisrCSAgMQorKyNlbmRpZgorKwkgICkKKyAgICAgICBuZXdwID0gKEVsZl9TY25MaXN0ICopIGNhbGxvYyAoc2l6ZW9mIChFbGZfU2NuTGlzdCkKKyAJCQkJICAgICArICgoZWxmLT5zdGF0ZS5lbGYuc2NuaW5jciAqPSAyKQorIAkJCQkJKiBzaXplb2YgKEVsZl9TY24pKSwgMSk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0ZHluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldGR5bi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0ZHluLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGR5bmFtaWMgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC05Myw3ICs5Myw3IEBACisgCSB0YWJsZSBlbnRyaWVzIGhhcyB0byBiZSBhZG9wdGVkLiAgVGhlIHVzZXIgYmV0dGVyIGhhcyBwcm92aWRlZAorIAkgYSBidWZmZXIgd2hlcmUgd2UgY2FuIHN0b3JlIHRoZSBpbmZvcm1hdGlvbi4gIFdoaWxlIGNvcHlpbmcgdGhlCisgCSBkYXRhIHdlIGFyZSBjb252ZXJ0aW5nIHRoZSBmb3JtYXQuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNCw3ICsxMTQsNyBAQAorIAorICAgICAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorIAkgaW5kZXggaXMgT0suICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX0R5bikgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0bGliLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRsaWIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IGxpYnJhcnkgZnJvbSB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDA0LgorIAorQEAgLTg2LDcgKzg2LDcgQEAKKyAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorICAgICAgaW5kZXggaXMgT0suICAqLworICAgR0VsZl9MaWIgKnJlc3VsdCA9IE5VTEw7CistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9MaWIpID4gZGF0YS0+ZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX0xpYiwgZGF0YSkpCisgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgIGVsc2UKKyAgICAgeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldG1vdmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0bW92ZS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bW92ZS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgbW92ZSBzdHJ1Y3R1cmUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC04Myw3ICs4Myw3IEBACisgCisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX01vdmUpID4gZGF0YS0+ZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX01vdmUsIGRhdGEpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbGEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0cmVsYS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsYS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgUkVMQSByZWxvY2F0aW9uIGluZm9ybWF0aW9uIGF0IGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03MSwxMiArNzEsNiBAQAorICAgaWYgKGRhdGFfc2NuID09IE5VTEwpCisgICAgIHJldHVybiBOVUxMOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfUkVMQSkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9IQU5ETEUpOworQEAgLTkzLDcgKzg3LDcgQEAKKyAgIGlmIChzY24tPmVsZi0+Y2xhc3MgPT0gRUxGQ0xBU1MzMikKKyAgICAgeworICAgICAgIC8qIFdlIGhhdmUgdG8gY29udmVydCB0aGUgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1JlbGEpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsYSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICByZXN1bHQgPSBOVUxMOworQEAgLTExNCw3ICsxMDgsNyBAQAorICAgICB7CisgICAgICAgLyogU2ltcGx5IGNvcHkgdGhlIGRhdGEgYWZ0ZXIgd2UgbWFkZSBzdXJlIHdlIGFyZSBhY3R1YWxseSBnZXR0aW5nCisgCSBjb3JyZWN0IGRhdGEuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRyZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0cmVsLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRyZWwuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IFJFTCByZWxvY2F0aW9uIGluZm9ybWF0aW9uIGF0IGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03MSwxMiArNzEsNiBAQAorICAgaWYgKGRhdGFfc2NuID09IE5VTEwpCisgICAgIHJldHVybiBOVUxMOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfUkVMKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0hBTkRMRSk7CitAQCAtOTMsNyArODcsNyBAQAorICAgaWYgKHNjbi0+ZWxmLT5jbGFzcyA9PSBFTEZDTEFTUzMyKQorICAgICB7CisgICAgICAgLyogV2UgaGF2ZSB0byBjb252ZXJ0IHRoZSBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICByZXN1bHQgPSBOVUxMOworQEAgLTExMyw3ICsxMDcsNyBAQAorICAgICB7CisgICAgICAgLyogU2ltcGx5IGNvcHkgdGhlIGRhdGEgYWZ0ZXIgd2UgbWFkZSBzdXJlIHdlIGFyZSBhY3R1YWxseSBnZXR0aW5nCisgCSBjb3JyZWN0IGRhdGEuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHN5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBzeW1ib2wgaW5mb3JtYXRpb24gZnJvbSBzeW1ib2wgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMTk5OS4KKyAKK0BAIC05MCw3ICs5MCw3IEBACisgCSB0YWJsZSBlbnRyaWVzIGhhcyB0byBiZSBhZG9wdGVkLiAgVGhlIHVzZXIgYmV0dGVyIGhhcyBwcm92aWRlZAorIAkgYSBidWZmZXIgd2hlcmUgd2UgY2FuIHN0b3JlIHRoZSBpbmZvcm1hdGlvbi4gIFdoaWxlIGNvcHlpbmcgdGhlCisgCSBkYXRhIHdlIGFyZSBjb252ZXJ0aW5nIHRoZSBmb3JtYXQuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCBkYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTksNyArMTE5LDcgQEAKKyAKKyAgICAgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAJIGluZGV4IGlzIE9LLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW0pID4gZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW0sIGRhdGEpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bWluZm8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfZ2V0c3ltaW5mby5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltaW5mby5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgYWRkaXRpb25hbCBzeW1ib2wgaW5mb3JtYXRpb24gZnJvbSBzeW1ib2wgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC04NCw3ICs4NCw3IEBACisgCisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1N5bWluZm8pID4gZGF0YS0+ZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1N5bWluZm8sIGRhdGEpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bXNobmR4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHN5bXNobmR4LmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1zaG5keC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw2ICsxLDYgQEAKKyAvKiBHZXQgc3ltYm9sIGluZm9ybWF0aW9uIGFuZCBzZXBhcmF0ZSBzZWN0aW9uIGluZGV4IGZyb20gc3ltYm9sIHRhYmxlCisgICAgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC05MCw3ICs5MCw3IEBACisgICAgICBzZWN0aW9uIGluZGV4IHRhYmxlLiAgKi8KKyAgIGlmIChsaWtlbHkgKHNobmR4ZGF0YV9zY24gIT0gTlVMTCkpCisgICAgIHsKKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfV29yZCkgPiBzaG5keGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1dvcmQsICZzaG5keGRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTAsNyArMTEwLDcgQEAKKyAJIHRhYmxlIGVudHJpZXMgaGFzIHRvIGJlIGFkb3B0ZWQuICBUaGUgdXNlciBiZXR0ZXIgaGFzIHByb3ZpZGVkCisgCSBhIGJ1ZmZlciB3aGVyZSB3ZSBjYW4gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiAgV2hpbGUgY29weWluZyB0aGUKKyAJIGRhdGEgd2UgYXJlIGNvbnZlcnRpbmcgdGhlIGZvcm1hdC4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1N5bSkgPiBzeW1kYXRhLT5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9TeW0sIHN5bWRhdGEpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTEzOSw3ICsxMzksNyBAQAorIAorICAgICAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorIAkgaW5kZXggaXMgT0suICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1N5bSkgPiBzeW1kYXRhLT5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1N5bSwgc3ltZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0dmVyc3ltLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHZlcnN5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0dmVyc3ltLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBzeW1ib2wgdmVyc2lvbiBpbmZvcm1hdGlvbiBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAxOTk5LgorIAorQEAgLTkyLDcgKzkyLDcgQEAKKyAKKyAgIC8qIFRoZSBkYXRhIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybS4gIEp1c3QgbWFrZSBzdXJlIHRoZQorICAgICAgaW5kZXggaXMgT0suICAqLworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfVmVyc3ltKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9WZXJzeW0sIGRhdGEpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIHJlc3VsdCA9IE5VTEw7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2R5bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfZHluLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfZHluLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBpbmZvcm1hdGlvbiBpbiBkeW5hbWljIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzEsMTIgKzcxLDYgQEAKKyAgIGlmIChkYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfRFlOKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTEwMiw3ICs5Niw3IEBACisgCX0KKyAKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX0R5bikgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9EeW4sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE2LDcgKzExMCw3IEBACisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X0R5bikgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9EeW4sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2xpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfbGliLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfbGliLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBsaWJyYXJ5IGluIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDQuCisgCitAQCAtNjgsMTIgKzY4LDYgQEAKKyAgIGlmIChkYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgRWxmX0RhdGFfU2NuICpkYXRhX3NjbiA9IChFbGZfRGF0YV9TY24gKikgZGF0YTsKKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX0xJQikpCisgICAgIHsKK0BAIC04Nyw3ICs4MSw3IEBACisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCisgICBpbnQgcmVzdWx0ID0gMDsKKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9MaWIpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9MaWIsICZkYXRhX3Njbi0+ZCkpCisgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgIGVsc2UKKyAgICAgeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9tb3ZlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9tb3ZlLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfbW92ZS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgbW92ZSBzdHJ1Y3R1cmUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03NSw4ICs3NSw3IEBACisgICBhc3NlcnQgKHNpemVvZiAoR0VsZl9Nb3ZlKSA9PSBzaXplb2YgKEVsZjY0X01vdmUpKTsKKyAKKyAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkKKy0gICAgICB8fCB1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX01vdmUpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX01vdmUsICZkYXRhX3Njbi0+ZCkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgcmV0dXJuIDA7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbGEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3JlbGEuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWxhLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBSRUxBIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYXQgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTY4LDEyICs2OCw2IEBACisgICBpZiAoZHN0ID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfUkVMQSkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMDEsNyArOTUsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE3LDcgKzExMSw3IEBACisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1JlbGEpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfUmVsYSwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWwuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWwuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIFJFTCByZWxvY2F0aW9uIGluZm9ybWF0aW9uIGF0IGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC02OCwxMiArNjgsNiBAQAorICAgaWYgKGRzdCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTCkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC05OSw3ICs5Myw3IEBACisgCX0KKyAKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1JlbCkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWwsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE0LDcgKzEwOCw3IEBACisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1JlbCkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWwsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfc3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBzeW1ib2wgaW5mb3JtYXRpb24gaW4gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzIsMTIgKzcyLDYgQEAKKyAgIGlmIChkYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfU1lNKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTEwMiw3ICs5Niw3IEBACisgCX0KKyAKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1N5bSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9TeW0sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTI1LDcgKzExOSw3IEBACisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1N5bSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9TeW0sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bWluZm8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3N5bWluZm8uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1pbmZvLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBhZGRpdGlvbmFsIHN5bWJvbCBpbmZvcm1hdGlvbiBpbiBzeW1ib2wgdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03MiwxMiArNzIsNiBAQAorICAgaWYgKGRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9TWU1JTkZPKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTkzLDcgKzg3LDcgQEAKKyAgIHJ3bG9ja193cmxvY2sgKHNjbi0+ZWxmLT5sb2NrKTsKKyAKKyAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1N5bWluZm8pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgIGlmIChJTlZBTElEX05EWCAobmR4LCBHRWxmX1N5bWluZm8sICZkYXRhX3Njbi0+ZCkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bXNobmR4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1zaG5keC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bXNobmR4LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDYgKzEsNiBAQAorIC8qIFVwZGF0ZSBzeW1ib2wgaW5mb3JtYXRpb24gYW5kIHNlY3Rpb24gaW5kZXggaW4gc3ltYm9sIHRhYmxlIGF0IHRoZQorICAgIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC03NywxMiArNzcsNiBAQAorICAgaWYgKHN5bWRhdGEgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKHN5bWRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9TWU0pKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTI4LDcgKzEyMiw3IEBACisgCX0KKyAKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1N5bSkgPiBzeW1kYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9TeW0sICZzeW1kYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTUxLDcgKzE0NSw3IEBACisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjY0X1N5bSkgPiBzeW1kYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9TeW0sICZzeW1kYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3ZlcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfdmVyc3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfdmVyc3ltLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBzeW1ib2wgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDEuCisgCitAQCAtNzUsOCArNzUsNyBAQAorICAgYXNzZXJ0IChzaXplb2YgKEdFbGZfVmVyc3ltKSA9PSBzaXplb2YgKEVsZjY0X1ZlcnN5bSkpOworIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKQorLSAgICAgIHx8IHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfVmVyc3ltKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9WZXJzeW0sICZkYXRhX3Njbi0+ZCkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgcmV0dXJuIDA7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2xpYmVsZlAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2xpYmVsZlAuaAkyMDEwLTAxLTEyIDE2OjU3OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9saWJlbGZQLmgJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC02MDgsNCArNjA4LDggQEAKKyAvKiBBbGlnbiBvZmZzZXQgdG8gNCBieXRlcyBhcyBuZWVkZWQgZm9yIG5vdGUgbmFtZSBhbmQgZGVzY3JpcHRvciBkYXRhLiAgKi8KKyAjZGVmaW5lIE5PVEVfQUxJR04obikJKCgobikgKyAzKSAmIC00VSkKKyAKKysvKiBDb252ZW5pZW5jZSBtYWNyby4gICovCisrI2RlZmluZSBJTlZBTElEX05EWChuZHgsIHR5cGUsIGRhdGEpIFwKKysgIHVubGlrZWx5ICgoZGF0YSktPmRfc2l6ZSAvIHNpemVvZiAodHlwZSkgPD0gKHVuc2lnbmVkIGludCkgKG5keCkpCisrCisgI2VuZGlmICAvKiBsaWJlbGZQLmggKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDc6MTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTE2NDAsNiArMTY0MCwxNiBAQAorIAlvYmplY3Qgc3ltYm9scyBvciBzeW1ib2xzIHdpdGggdW5rbm93biB0eXBlLgorIAkoY2hlY2tfcmVsKTogTGlrZXdpc2UuCisgCisrMjAwNS0wNi0wOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiByZWFkZWxmLmMgKGhhbmRsZV9keW5hbWljLCBoYW5kbGVfc3ltdGFiKTogQ2hlY2sgZm9yIGJvZ3VzIHNoX2xpbmsuCisrCShoYW5kbGVfdmVybmVlZCwgaGFuZGxlX3ZlcmRlZiwgaGFuZGxlX3ZlcnN5bSwgaGFuZGxlX2hhc2gpOiBMaWtld2lzZS4KKysJKGhhbmRsZV9zY25ncnApOiBDaGVjayBmb3IgYm9ndXMgc2hfaW5mby4KKysKKysJKiBzdHJpcC5jIChoYW5kbGVfZWxmKTogQ2hlY2sgZm9yIGJvZ3VzIHZhbHVlcyBpbiBzaF9saW5rLCBzaF9pbmZvLAorKwlzdF9zaG5keCwgZV9zaHN0cm5keCwgYW5kIFNIVF9HUk9VUCBvciBTSFRfU1lNVEFCX1NITkRYIGRhdGEuCisrCURvbid0IHVzZSBhc3NlcnQgb24gaW5wdXQgdmFsdWVzLCBpbnN0ZWFkIGJhaWwgd2l0aCAiaWxsZm9ybWVkIiBlcnJvci4KKysKKyAyMDA1LTA2LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHJlYWRlbGYuYyAocHJpbnRfb3BzKTogQWRkIGNvbnN0cy4KK0BAIC0xNjkwLDYgKzE3MDAsMTkgQEAKKyAKKyAJKiByZWFkZWxmLmMgKGR3YXJmX3RhZ19zdHJpbmcpOiBBZGQgbmV3IHRhZ3MuCisgCisrMjAwNS0wNS0xNyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogZWxmbGludC5jIChjaGVja19oYXNoKTogRG9uJ3QgY2hlY2sgZW50cmllcyBiZXlvbmQgZW5kIG9mIHNlY3Rpb24uCisrCShjaGVja19ub3RlKTogRG9uJ3QgY3Jhc2ggaWYgZ2VsZl9yYXdjaHVuayBmYWlscy4KKysJKHNlY3Rpb25fbmFtZSk6IFJldHVybiA8aW52YWxpZD4gaWYgZ2VsZl9nZXRzaGRyIHJldHVybnMgTlVMTC4KKysKKysyMDA1LTA1LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysJKiBlbGZsaW50LmMgKHNlY3Rpb25fbmFtZSk6IFJldHVybiAiPGludmFsaWQ+IiBpbnN0ZWFkIG9mCisrCWNyYXNoaW5nIG9uIGludmFsaWQgc2VjdGlvbiBuYW1lLgorKwkoY2hlY2tfc3ltdGFiLCBpc19yZWxfZHluLCBjaGVja19yZWxhLCBjaGVja19yZWwsIGNoZWNrX2R5bmFtaWMsCisrCWNoZWNrX3N5bXRhYl9zaG5keCwgY2hlY2tfaGFzaCwgY2hlY2tfdmVyc3ltKTogUm9idXN0aWZ5LgorKworIDIwMDUtMDUtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogc3RyaXAuYyAoaGFuZGxlX2VsZik6IERvbid0IHRyYW5zbGF0ZSBoYXNoIGFuZCB2ZXJzeW0gZGF0YSBmb3JtYXRzLAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9lbGZsaW50LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9lbGZsaW50LmMJMjAxMC0wNC0xMyAyMDowODowMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMTMxLDYgKzEzMSwxMCBAQAorIC8qIEFycmF5IHRvIGNvdW50IHJlZmVyZW5jZXMgaW4gc2VjdGlvbiBncm91cHMuICAqLworIHN0YXRpYyBpbnQgKnNjbnJlZjsKKyAKKysvKiBOdW1iZXJzIG9mIHNlY3Rpb25zIGFuZCBwcm9ncmFtIGhlYWRlcnMuICAqLworK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2hudW07Cisrc3RhdGljIHVuc2lnbmVkIGludCBwaG51bTsKKysKKyAKKyBpbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorQEAgLTMxOSwxMCArMzIzLDE5IEBACisgeworICAgR0VsZl9TaGRyIHNoZHJfbWVtOworICAgR0VsZl9TaGRyICpzaGRyOworKyAgY29uc3QgY2hhciAqcmV0OworKworKyAgaWYgKCh1bnNpZ25lZCBpbnQpIGlkeCA+IHNobnVtKQorKyAgICByZXR1cm4gIjxpbnZhbGlkPiI7CisgCisgICBzaGRyID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgaWR4KSwgJnNoZHJfbWVtKTsKKysgIGlmIChzaGRyID09IE5VTEwpCisrICAgIHJldHVybiAiPGludmFsaWQ+IjsKKyAKKy0gIHJldHVybiBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpOworKyAgcmV0ID0gZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKTsKKysgIGlmIChyZXQgPT0gTlVMTCkKKysgICAgcmV0dXJuICI8aW52YWxpZD4iOworKyAgcmV0dXJuIHJldDsKKyB9CisgCisgCitAQCAtMzQ0LDExICszNTcsNiBAQAorICAgKHNpemVvZiAodmFsaWRfZV9tYWNoaW5lKSAvIHNpemVvZiAodmFsaWRfZV9tYWNoaW5lWzBdKSkKKyAKKyAKKy0vKiBOdW1iZXJzIG9mIHNlY3Rpb25zIGFuZCBwcm9ncmFtIGhlYWRlcnMuICAqLworLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hudW07Cistc3RhdGljIHVuc2lnbmVkIGludCBwaG51bTsKKy0KKy0KKyBzdGF0aWMgdm9pZAorIGNoZWNrX2VsZl9oZWFkZXIgKEVibCAqZWJsLCBHRWxmX0VoZHIgKmVoZHIsIHNpemVfdCBzaXplKQorIHsKK0BAIC02MzIsNyArNjQwLDggQEAKKyAJICB9CisgICAgICAgfQorIAorLSAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1NZTSwgMSwgRVZfQ1VSUkVOVCkpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9TWU0sIDEsIEVWX0NVUlJFTlQpOworKyAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gc2hfZW50c2l6ZSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJ1XSAnJXMnOiBlbnRyeSBzaXplIGlzIGRvZXMgbm90IG1hdGNoIEVsZlhYX1N5bVxuIiksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworQEAgLTY3MCw3ICs2NzksNyBAQAorIAkgICAgICAgeG5keHNjbmlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIHhuZHhzY25pZHgpKTsKKyAgICAgfQorIAorLSAgZm9yIChzaXplX3QgY250ID0gMTsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorKyAgZm9yIChzaXplX3QgY250ID0gMTsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoX2VudHNpemU7ICsrY250KQorICAgICB7CisgICAgICAgc3ltID0gZ2VsZl9nZXRzeW1zaG5keCAoZGF0YSwgeG5keGRhdGEsIGNudCwgJnN5bV9tZW0sICZ4bmR4KTsKKyAgICAgICBpZiAoc3ltID09IE5VTEwpCitAQCAtNjkwLDcgKzY5OSw4IEBACisgICAgICAgZWxzZQorIAl7CisgCSAgbmFtZSA9IGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rLCBzeW0tPnN0X25hbWUpOworLQkgIGFzc2VydCAobmFtZSAhPSBOVUxMKTsKKysJICBhc3NlcnQgKG5hbWUgIT0gTlVMTAorKwkJICB8fCBzdHJzaGRyLT5zaF90eXBlICE9IFNIVF9TVFJUQUIpOworIAl9CisgCisgICAgICAgaWYgKHN5bS0+c3Rfc2huZHggPT0gU0hOX1hJTkRFWCkKK0BAIC0xMDM4LDkgKzEwNDgsMTEgQEAKKyAgICAgeworICAgICAgIEdFbGZfU2hkciByY3NoZHJfbWVtOworICAgICAgIGNvbnN0IEdFbGZfU2hkciAqcmNzaGRyID0gZ2VsZl9nZXRzaGRyIChzY24sICZyY3NoZHJfbWVtKTsKKy0gICAgICBhc3NlcnQgKHJjc2hkciAhPSBOVUxMKTsKKyAKKy0gICAgICBpZiAocmNzaGRyLT5zaF90eXBlID09IFNIVF9EWU5BTUlDKQorKyAgICAgIGlmIChyY3NoZHIgPT0gTlVMTCkKKysJYnJlYWs7CisrCisrICAgICAgaWYgKHJjc2hkci0+c2hfdHlwZSA9PSBTSFRfRFlOQU1JQyAmJiByY3NoZHItPnNoX2VudHNpemUpCisgCXsKKyAJICAvKiBGb3VuZCB0aGUgZHluYW1pYyBzZWN0aW9uLiAgTG9vayB0aHJvdWdoIGl0LiAgKi8KKyAJICBFbGZfRGF0YSAqZCA9IGVsZl9nZXRkYXRhIChzY24sIE5VTEwpOworQEAgLTEwNTAsNyArMTA2Miw5IEBACisgCSAgICB7CisgCSAgICAgIEdFbGZfRHluIGR5bl9tZW07CisgCSAgICAgIEdFbGZfRHluICpkeW4gPSBnZWxmX2dldGR5biAoZCwgY250LCAmZHluX21lbSk7CistCSAgICAgIGFzc2VydCAoZHluICE9IE5VTEwpOworKworKwkgICAgICBpZiAoZHluID09IE5VTEwpCisrCQlicmVhazsKKyAKKyAJICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUkVMQ09VTlQpCisgCQl7CitAQCAtMTA2NCw3ICsxMDc4LDkgQEAKKyAJCSAgICAgIC8qIERvZXMgdGhlIG51bWJlciBzcGVjaWZpZWQgbnVtYmVyIG9mIHJlbGF0aXZlCisgCQkJIHJlbG9jYXRpb25zIGV4Y2VlZCB0aGUgdG90YWwgbnVtYmVyIG9mCisgCQkJIHJlbG9jYXRpb25zPyAgKi8KKy0JCSAgICAgIGlmIChkeW4tPmRfdW4uZF92YWwgPiBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZSkKKysJCSAgICAgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IDAKKysJCQkgICYmIGR5bi0+ZF91bi5kX3ZhbCA+IChzaGRyLT5zaF9zaXplCisrCQkJCQkJLyBzaGRyLT5zaF9lbnRzaXplKSkKKyAJCQlFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IERUX1JFTENPVU5UIHZhbHVlICVkIHRvbyBoaWdoIGZvciB0aGlzIHNlY3Rpb25cbiIpLAorIAkJCSAgICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLAorQEAgLTEyMjQsNyArMTI0MCw4IEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIHJlbHR5cGUsIDEsIEVWX0NVUlJFTlQpKQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgcmVsdHlwZSwgMSwgRVZfQ1VSUkVOVCk7CisrICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBzaF9lbnRzaXplKQorICAgICBFUlJPUiAoZ2V0dGV4dCAocmVsdHlwZSA9PSBFTEZfVF9SRUxBID8gIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IHNlY3Rpb24gZW50cnkgc2l6ZSBkb2VzIG5vdCBtYXRjaCBFbGZYWF9SZWxhXG4iIDogIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IHNlY3Rpb24gZW50cnkgc2l6ZSBkb2VzIG5vdCBtYXRjaCBFbGZYWF9SZWxcbiIpLAorQEAgLTE0NDcsNyArMTQ2NCw4IEBACisgICBFbGZfRGF0YSAqc3ltZGF0YSA9IGVsZl9nZXRkYXRhIChzeW1zY24sIE5VTEwpOworICAgZW51bSBsb2FkX3N0YXRlIHN0YXRlID0gc3RhdGVfdW5kZWNpZGVkOworIAorLSAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfUkVMQSwgMSwgRVZfQ1VSUkVOVCk7CisrICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hfZW50c2l6ZTsgKytjbnQpCisgICAgIHsKKyAgICAgICBHRWxmX1JlbGEgcmVsYV9tZW07CisgICAgICAgR0VsZl9SZWxhICpyZWxhID0gZ2VsZl9nZXRyZWxhIChkYXRhLCBjbnQsICZyZWxhX21lbSk7CitAQCAtMTQ5Nyw3ICsxNTE1LDggQEAKKyAgIEVsZl9EYXRhICpzeW1kYXRhID0gZWxmX2dldGRhdGEgKHN5bXNjbiwgTlVMTCk7CisgICBlbnVtIGxvYWRfc3RhdGUgc3RhdGUgPSBzdGF0ZV91bmRlY2lkZWQ7CisgCistICBmb3IgKHNpemVfdCBjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9SRUwsIDEsIEVWX0NVUlJFTlQpOworKyAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoX2VudHNpemU7ICsrY250KQorICAgICB7CisgICAgICAgR0VsZl9SZWwgcmVsX21lbTsKKyAgICAgICBHRWxmX1JlbCAqcmVsID0gZ2VsZl9nZXRyZWwgKGRhdGEsIGNudCwgJnJlbF9tZW0pOworQEAgLTE2MDAsNyArMTYxOSw4IEBACisgCSAgIHNoZHItPnNoX2xpbmssIHNlY3Rpb25fbmFtZSAoZWJsLCBzaGRyLT5zaF9saW5rKSwKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CisgCistICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfRFlOLCAxLCBFVl9DVVJSRU5UKSkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX0RZTiwgMSwgRVZfQ1VSUkVOVCk7CisrICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSBzaF9lbnRzaXplKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IHNlY3Rpb24gZW50cnkgc2l6ZSBkb2VzIG5vdCBtYXRjaCBFbGZYWF9EeW5cbiIpLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKK0BAIC0xNjEwLDcgKzE2MzAsNyBAQAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKyAKKyAgIGJvb2wgbm9uX251bGxfd2FybmVkID0gZmFsc2U7CistICBmb3IgKGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIGZvciAoY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoX2VudHNpemU7ICsrY250KQorICAgICB7CisgICAgICAgR0VsZl9EeW4gZHluX21lbTsKKyAgICAgICBHRWxmX0R5biAqZHluID0gZ2VsZl9nZXRkeW4gKGRhdGEsIGNudCwgJmR5bl9tZW0pOworQEAgLTE4OTEsNiArMTkxMSw4IEBACisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworIAorICAgaWYgKHN5bXNoZHIgIT0gTlVMTAorKyAgICAgICYmIHNoZHItPnNoX2VudHNpemUKKysgICAgICAmJiBzeW1zaGRyLT5zaF9lbnRzaXplCisgICAgICAgJiYgKHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplCisgCSAgPCBzeW1zaGRyLT5zaF9zaXplIC8gc3ltc2hkci0+c2hfZW50c2l6ZSkpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorQEAgLTE5MTcsNiArMTkzOSwxMiBAQAorICAgICB9CisgCisgICBFbGZfRGF0YSAqZGF0YSA9IGVsZl9nZXRkYXRhIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgaWR4KSwgTlVMTCk7CisrICBpZiAoZGF0YSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgRVJST1IgKGdldHRleHQgKCJzZWN0aW9uIFslMmRdICclcyc6IGNhbm5vdCBnZXQgc2VjdGlvbiBkYXRhXG4iKSwKKysgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisgCisgICBpZiAoKigoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZikgIT0gMCkKKyAgICAgRVJST1IgKGdldHRleHQgKCJzeW1ib2wgMCBzaG91bGQgaGF2ZSB6ZXJvIGV4dGVuZGVkIHNlY3Rpb24gaW5kZXhcbiIpKTsKK0BAIC0xOTU5LDcgKzE5ODcsNyBAQAorIAorICAgc2l6ZV90IG1heGlkeCA9IG5jaGFpbjsKKyAKKy0gIGlmIChzeW1zaGRyICE9IE5VTEwpCisrICBpZiAoc3ltc2hkciAhPSBOVUxMICYmIHN5bXNoZHItPnNoX2VudHNpemUgIT0gMCkKKyAgICAgeworICAgICAgIHNpemVfdCBzeW1zaXplID0gc3ltc2hkci0+c2hfc2l6ZSAvIHN5bXNoZHItPnNoX2VudHNpemU7CisgCitAQCAtMTk3MCwxOCArMTk5OCwyOCBAQAorICAgICAgIG1heGlkeCA9IHN5bXNpemU7CisgICAgIH0KKyAKKysgIEVsZjMyX1dvcmQgKmJ1ZiA9IChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmOworKyAgRWxmMzJfV29yZCAqZW5kID0gKEVsZjMyX1dvcmQgKikgKChjaGFyICopIGRhdGEtPmRfYnVmICsgc2hkci0+c2hfc2l6ZSk7CisgICBzaXplX3QgY250OworICAgZm9yIChjbnQgPSAyOyBjbnQgPCAyICsgbmJ1Y2tldDsgKytjbnQpCistICAgIGlmICgoKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWYpW2NudF0gPj0gbWF4aWR4KQorKyAgICB7CisrICAgICAgaWYgKGJ1ZiArIGNudCA+PSBlbmQpCisrCWJyZWFrOworKyAgICAgIGVsc2UgaWYgKGJ1ZltjbnRdID49IG1heGlkeCkKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggYnVja2V0IHJlZmVyZW5jZSAlenUgb3V0IG9mIGJvdW5kc1xuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250IC0gMik7CisrICAgIH0KKyAKKyAgIGZvciAoOyBjbnQgPCAyICsgbmJ1Y2tldCArIG5jaGFpbjsgKytjbnQpCistICAgIGlmICgoKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWYpW2NudF0gPj0gbWF4aWR4KQorKyAgICB7CisrICAgICAgaWYgKGJ1ZiArIGNudCA+PSBlbmQpCisrCWJyZWFrOworKyAgICAgIGVsc2UgaWYgKGJ1ZltjbnRdID49IG1heGlkeCkKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggY2hhaW4gcmVmZXJlbmNlICV6dSBvdXQgb2YgYm91bmRzXG4iKSwKKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQgLSAyIC0gbmJ1Y2tldCk7CisrICAgIH0KKyB9CisgCisgCitAQCAtMjAxMSwxOCArMjA0OSwyOCBAQAorICAgICAgIG1heGlkeCA9IHN5bXNpemU7CisgICAgIH0KKyAKKysgIEVsZjY0X1h3b3JkICpidWYgPSAoRWxmNjRfWHdvcmQgKikgZGF0YS0+ZF9idWY7CisrICBFbGY2NF9Yd29yZCAqZW5kID0gKEVsZjY0X1h3b3JkICopICgoY2hhciAqKSBkYXRhLT5kX2J1ZiArIHNoZHItPnNoX3NpemUpOworICAgc2l6ZV90IGNudDsKKyAgIGZvciAoY250ID0gMjsgY250IDwgMiArIG5idWNrZXQ7ICsrY250KQorLSAgICBpZiAoKChFbGY2NF9Yd29yZCAqKSBkYXRhLT5kX2J1ZilbY250XSA+PSBtYXhpZHgpCisrICAgIHsKKysgICAgICBpZiAoYnVmICsgY250ID49IGVuZCkKKysJYnJlYWs7CisrICAgICAgZWxzZSBpZiAoYnVmW2NudF0gPj0gbWF4aWR4KQorICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCBidWNrZXQgcmVmZXJlbmNlICV6dSBvdXQgb2YgYm91bmRzXG4iKSwKKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQgLSAyKTsKKysgICAgfQorIAorICAgZm9yICg7IGNudCA8IDIgKyBuYnVja2V0ICsgbmNoYWluOyArK2NudCkKKy0gICAgaWYgKCgoRWxmNjRfWHdvcmQgKikgZGF0YS0+ZF9idWYpW2NudF0gPj0gbWF4aWR4KQorKyAgICB7CisrICAgICAgaWYgKGJ1ZiArIGNudCA+PSBlbmQpCisrCWJyZWFrOworKyAgICAgIGVsc2UgaWYgKGJ1ZltjbnRdID49IG1heGlkeCkKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggY2hhaW4gcmVmZXJlbmNlICUiIFBSSXU2NCAiIG91dCBvZiBib3VuZHNcbiIpLAorLQkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksICh1aW50NjRfdCkgKGNudCAtIDIgLSBuYnVja2V0KSk7CisrCSAgICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCAodWludDY0X3QpIGNudCAtIDIgLSBuYnVja2V0KTsKKysgICAgfQorIH0KKyAKKyAKK0BAIC0yMDQ3LDcgKzIwOTUsNyBAQAorICAgaWYgKHNoZHItPnNoX3NpemUgPCAoNCArIGJpdG1hc2tfd29yZHMgKyBuYnVja2V0cykgKiBzaXplb2YgKEVsZjMyX1dvcmQpKQorICAgICB7CisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCistc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIHRhYmxlIHNlY3Rpb24gaXMgdG9vIHNtYWxsIChpcyAlbGQsIGV4cGVjdGVkIGF0IGxlYXN0JWxkKVxuIiksCisrc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIHRhYmxlIHNlY3Rpb24gaXMgdG9vIHNtYWxsIChpcyAlbGQsIGV4cGVjdGVkIGF0IGxlYXN0ICVsZClcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIChsb25nIGludCkgc2hkci0+c2hfc2l6ZSwKKyAJICAgICAobG9uZyBpbnQpICgoNCArIGJpdG1hc2tfd29yZHMgKyBuYnVja2V0cykgKiBzaXplb2YgKEVsZjMyX1dvcmQpKSk7CisgICAgICAgcmV0dXJuOworQEAgLTI3MTksOCArMjc2Nyw5IEBACisgCisgICAvKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB2ZXJzaW9uIHN5bWJvbCB0YWJsZSBtdXN0IGJlIHRoZQorICAgICAgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHN5bWJvbHMuICAqLworLSAgaWYgKHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplCistICAgICAgIT0gc3ltc2hkci0+c2hfc2l6ZSAvIHN5bXNoZHItPnNoX2VudHNpemUpCisrICBpZiAoc2hkci0+c2hfZW50c2l6ZSAmJiBzeW1zaGRyLT5zaF9lbnRzaXplCisrICAgICAgJiYgKHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplCisrCSAgIT0gc3ltc2hkci0+c2hfc2l6ZSAvIHN5bXNoZHItPnNoX2VudHNpemUpKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcycgaGFzIGRpZmZlcmVudCBudW1iZXIgb2YgZW50cmllcyB0aGFuIHN5bWJvbCB0YWJsZSBbJTJkXSAnJXMnXG4iKSwKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvcmVhZGVsZi5jCTIwMTAtMDctMDMgMTM6MDc6MTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3JlYWRlbGYuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTExNzIsNiArMTE3Miw4IEBACisgICBFbGYzMl9Xb3JkICpncnByZWYgPSAoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZjsKKyAKKyAgIEdFbGZfU3ltIHN5bV9tZW07CisrICBHRWxmX1N5bSAqc3ltID0gZ2VsZl9nZXRzeW0gKHN5bWRhdGEsIHNoZHItPnNoX2luZm8sICZzeW1fbWVtKTsKKysKKyAgIHByaW50ZiAoKGdycHJlZlswXSAmIEdSUF9DT01EQVQpCisgCSAgPyBuZ2V0dGV4dCAoIlwKKyBcbkNPTURBVCBzZWN0aW9uIGdyb3VwIFslMnp1XSAnJXMnIHdpdGggc2lnbmF0dXJlICclcycgY29udGFpbnMgJXp1IGVudHJ5OlxuIiwKK0BAIC0xMTg0LDggKzExODYsOCBAQAorIAkJICAgICAgZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChFbGYzMl9Xb3JkKSAtIDEpLAorIAkgIGVsZl9uZHhzY24gKHNjbiksCisgCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKSwKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc3ltc2hkci0+c2hfbGluaywKKy0JCSAgICAgIGdlbGZfZ2V0c3ltIChzeW1kYXRhLCBzaGRyLT5zaF9pbmZvLCAmc3ltX21lbSktPnN0X25hbWUpCisrCSAgKHN5bSA9PSBOVUxMID8gTlVMTAorKwkgICA6IGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzeW1zaGRyLT5zaF9saW5rLCBzeW0tPnN0X25hbWUpKQorIAkgID86IGdldHRleHQgKCI8SU5WQUxJRCBTWU1CT0w+IiksCisgCSAgZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChFbGYzMl9Xb3JkKSAtIDEpOworIAorQEAgLTEzMzYsNyArMTMzOCw4IEBACisgaGFuZGxlX2R5bmFtaWMgKEVibCAqZWJsLCBFbGZfU2NuICpzY24sIEdFbGZfU2hkciAqc2hkcikKKyB7CisgICBpbnQgY2xhc3MgPSBnZWxmX2dldGNsYXNzIChlYmwtPmVsZik7CistICBHRWxmX1NoZHIgZ2xpbms7CisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluazsKKyAgIEVsZl9EYXRhICpkYXRhOworICAgc2l6ZV90IGNudDsKKyAgIHNpemVfdCBzaHN0cm5keDsKK0BAIC0xMzUxLDYgKzEzNTQsMTEgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoImNhbm5vdCBnZXQgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4IikpOworIAorKyAgZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5EeW5hbWljIHNlZ21lbnQgY29udGFpbnMgJWx1IGVudHJ5OlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0xMzYwLDkgKzEzNjgsNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAoaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAgIGZwdXRzX3VubG9ja2VkIChnZXR0ZXh0ICgiICBUeXBlICAgICAgICAgICAgICBWYWx1ZVxuIiksIHN0ZG91dCk7CisgCisgICBmb3IgKGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKK0BAIC0xOTQ1LDYgKzE5NTEsMTMgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoImNhbm5vdCBnZXQgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4IikpOworIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKysJCQkJICAgJmdsaW5rX21lbSk7CisrICBpZiAoZ2xpbmsgPT0gTlVMTCkKKysgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICBlbGZfbmR4c2NuIChzY24pKTsKKysKKyAgIC8qIE5vdyB3ZSBjYW4gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNlY3Rpb24uICAqLworICAgdW5zaWduZWQgaW50IG5zeW1zID0gZGF0YS0+ZF9zaXplIC8gKGNsYXNzID09IEVMRkNMQVNTMzIKKyAJCQkJICAgICAgID8gc2l6ZW9mIChFbGYzMl9TeW0pCitAQCAtMTk1NSwxNSArMTk2OCwxMiBAQAorIAkJICAgIG5zeW1zKSwKKyAJICAodW5zaWduZWQgaW50KSBlbGZfbmR4c2NuIChzY24pLAorIAkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSksIG5zeW1zKTsKKy0gIEdFbGZfU2hkciBnbGluazsKKyAgIHByaW50ZiAobmdldHRleHQgKCIgJWx1IGxvY2FsIHN5bWJvbCAgU3RyaW5nIHRhYmxlOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICIgJWx1IGxvY2FsIHN5bWJvbHMgIFN0cmluZyB0YWJsZTogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICBzaGRyLT5zaF9pbmZvKSwKKyAJICAodW5zaWduZWQgbG9uZyBpbnQpIHNoZHItPnNoX2luZm8sCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICBmcHV0c191bmxvY2tlZCAoY2xhc3MgPT0gRUxGQ0xBU1MzMgorIAkJICA/IGdldHRleHQgKCJcCitAQCAtMjE5OSw3ICsyMjA5LDEzIEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKy0gIEdFbGZfU2hkciBnbGluazsKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCisrCQkJCSAgICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuVmVyc2lvbiBuZWVkcyBzZWN0aW9uIFslMnVdICclcycgY29udGFpbnMgJWQgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTIyMTAsOSArMjIyNiw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisgICBmb3IgKGludCBjbnQgPSBzaGRyLT5zaF9pbmZvOyAtLWNudCA+PSAwOyApCitAQCAtMjI2NSw4ICsyMjc5LDE0IEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCisrCQkJCSAgICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICBpbnQgY2xhc3MgPSBnZWxmX2dldGNsYXNzIChlYmwtPmVsZik7CistICBHRWxmX1NoZHIgZ2xpbms7CisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuVmVyc2lvbiBkZWZpbml0aW9uIHNlY3Rpb24gWyUydV0gJyVzJyBjb250YWlucyAlZCBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICJcCitAQCAtMjI3OCw5ICsyMjk4LDcgQEAKKyAJICBjbGFzcyA9PSBFTEZDTEFTUzMyID8gMTAgOiAxOCwgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKyAgIGZvciAoaW50IGNudCA9IHNoZHItPnNoX2luZm87IC0tY250ID49IDA7ICkKK0BAIC0yNTQyLDggKzI1NjAsMTQgQEAKKyAgICAgICBmaWxlbmFtZSA9IE5VTEw7CisgICAgIH0KKyAKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCisrCQkJCSAgICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICAvKiBQcmludCB0aGUgaGVhZGVyLiAgKi8KKy0gIEdFbGZfU2hkciBnbGluazsKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5WZXJzaW9uIHN5bWJvbHMgc2VjdGlvbiBbJTJ1XSAnJXMnIGNvbnRhaW5zICVkIGVudHJ5OlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcyciLAorIAkJICAgICJcCitAQCAtMjU1NSw5ICsyNTc5LDcgQEAKKyAJICBjbGFzcyA9PSBFTEZDTEFTUzMyID8gMTAgOiAxOCwgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICAvKiBOb3cgd2UgY2FuIGZpbmFsbHkgbG9vayBhdCB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoaXMgc2VjdGlvbi4gICovCisgICBmb3IgKHVuc2lnbmVkIGludCBjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCitAQCAtMjYwOSw3ICsyNjMxLDE3IEBACisgICBmb3IgKEVsZjMyX1dvcmQgY250ID0gMDsgY250IDwgbmJ1Y2tldDsgKytjbnQpCisgICAgICsrY291bnRzW2xlbmd0aHNbY250XV07CisgCistICBHRWxmX1NoZHIgZ2xpbms7CisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsCisrCQkJCQkgICAgICAgc2hkci0+c2hfbGluayksCisrCQkJCSAgICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIHsKKysgICAgICBlcnJvciAoMCwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICAgIGVsZl9uZHhzY24gKHNjbikpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcbkhpc3RvZ3JhbSBmb3IgYnVja2V0IGxpc3QgbGVuZ3RoIGluIHNlY3Rpb24gWyUydV0gJyVzJyAodG90YWwgb2YgJWQgYnVja2V0KTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICJcCitAQCAtMjYyMiw5ICsyNjU0LDcgQEAKKyAJICBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIGlmIChleHRyYXN0ciAhPSBOVUxMKQorICAgICBmcHV0cyAoZXh0cmFzdHIsIHN0ZG91dCk7CitAQCAtNDMxMiw2ICs0MzQyLDE2IEBACisgICAgICAgcmV0dXJuOworICAgICB9CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluazsKKysgIGdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIHsKKysgICAgICBlcnJvciAoMCwgMCwgZ2V0dGV4dCAoImludmFsaWQgc2hfbGluayB2YWx1ZSBpbiBzZWN0aW9uICVadSIpLAorKwkgICAgIGVsZl9uZHhzY24gKHNjbikpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcbkRXQVJGIHNlY3Rpb24gWyUyenVdICclcycgYXQgb2Zmc2V0ICUjIiBQUkl4NjQgIiBjb250YWlucyAlenUgZW50cnk6XG4iLAorIAkJICAgICJcCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9zdHJpcC5jCTIwMTAtMDctMDMgMTM6MDc6MTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC01NjEsNiArNTYxLDExIEBACisgICAgICAgZ290byBmYWlsX2Nsb3NlOworICAgICB9CisgCisrICBpZiAoc2hzdHJuZHggPj0gc2hudW0pCisrICAgIGdvdG8gaWxsZm9ybWVkOworKworKyNkZWZpbmUgZWxmX2Fzc2VydCh0ZXN0KSBkbyB7IGlmICghKHRlc3QpKSBnb3RvIGlsbGZvcm1lZDsgfSB3aGlsZSAoMCkKKysKKyAgIC8qIFN0b3JhZ2UgZm9yIHNlY3Rpb24gaW5mb3JtYXRpb24uICBXZSBsZWF2ZSByb29tIGZvciB0d28gbW9yZQorICAgICAgZW50cmllcyBzaW5jZSB3ZSB1bmNvbmRpdGlvbmFsbHkgY3JlYXRlIGEgc2VjdGlvbiBoZWFkZXIgc3RyaW5nCisgICAgICB0YWJsZS4gIE1heWJlIHNvbWUgd2VpcmQgdG9vbCBjcmVhdGVkIGFuIEVMRiBmaWxlIHdpdGhvdXQgb25lLgorQEAgLTU4Miw3ICs1ODcsNyBAQAorICAgICB7CisgICAgICAgLyogVGhpcyBzaG91bGQgYWx3YXlzIGJlIHRydWUgKGkuZS4sIHRoZXJlIHNob3VsZCBub3QgYmUgYW55CisgCSBob2xlcyBpbiB0aGUgbnVtYmVyaW5nKS4gICovCistICAgICAgYXNzZXJ0IChlbGZfbmR4c2NuIChzY24pID09IGNudCk7CisrICAgICAgZWxmX2Fzc2VydCAoZWxmX25keHNjbiAoc2NuKSA9PSBjbnQpOworIAorICAgICAgIHNoZHJfaW5mb1tjbnRdLnNjbiA9IHNjbjsKKyAKK0BAIC01OTUsNiArNjAwLDcgQEAKKyAJCQkJCXNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbmFtZSk7CisgICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLm5hbWUgPT0gTlVMTCkKKyAJeworKwlpbGxmb3JtZWQ6CisgCSAgZXJyb3IgKDAsIDAsIGdldHRleHQgKCJpbGxmb3JtZWQgZmlsZSAnJXMnIiksIGZuYW1lKTsKKyAJICBnb3RvIGZhaWxfY2xvc2U7CisgCX0KK0BAIC02MDQsNiArNjEwLDggQEAKKyAKKyAgICAgICAvKiBSZW1lbWJlciB0aGUgc2hkci5zaF9saW5rIHZhbHVlLiAgKi8KKyAgICAgICBzaGRyX2luZm9bY250XS5vbGRfc2hfbGluayA9IHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGluazsKKysgICAgICBpZiAoc2hkcl9pbmZvW2NudF0ub2xkX3NoX2xpbmsgPj0gc2hudW0pCisrCWdvdG8gaWxsZm9ybWVkOworIAorICAgICAgIC8qIFNlY3Rpb25zIGluIGZpbGVzIG90aGVyIHRoYW4gcmVsb2NhdGFibGUgb2JqZWN0IGZpbGVzIHdoaWNoCisgCSBhcmUgbm90IGxvYWRlZCBjYW4gYmUgZnJlZWx5IG1vdmVkIGJ5IHVzLiAgSW4gcmVsb2NhdGFibGUKK0BAIC02MTYsNyArNjI0LDcgQEAKKyAJIGFwcHJvcHJpYXRlIHJlZmVyZW5jZS4gICovCisgICAgICAgaWYgKHVubGlrZWx5IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1NZTVRBQl9TSE5EWCkpCisgCXsKKy0JICBhc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnN5bXRhYl9pZHggPT0gMCk7CisrCSAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10uc3ltdGFiX2lkeCA9PSAwKTsKKyAJICBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS5zeW10YWJfaWR4ID0gY250OworIAl9CisgICAgICAgZWxzZSBpZiAodW5saWtlbHkgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfR1JPVVApKQorQEAgLTYzMyw3ICs2NDEsMTIgQEAKKyAJICBmb3IgKGlubmVyID0gMTsKKyAJICAgICAgIGlubmVyIDwgc2hkcl9pbmZvW2NudF0uZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChFbGYzMl9Xb3JkKTsKKyAJICAgICAgICsraW5uZXIpCisrCSAgICB7CisrCSAgICAgIGlmIChncnByZWZbaW5uZXJdIDwgc2hudW0pCisgCSAgICBzaGRyX2luZm9bZ3JwcmVmW2lubmVyXV0uZ3JvdXBfaWR4ID0gY250OworKwkgICAgICBlbHNlCisrCQlnb3RvIGlsbGZvcm1lZDsKKysJICAgIH0KKyAKKyAJICBpZiAoaW5uZXIgPT0gMSB8fCAoaW5uZXIgPT0gMiAmJiAoZ3JwcmVmWzBdICYgR1JQX0NPTURBVCkgPT0gMCkpCisgCSAgICAvKiBJZiB0aGUgc2VjdGlvbiBncm91cCBjb250YWlucyBvbmx5IG9uZSBlbGVtZW50IGFuZCB0aGlzCitAQCAtNjQ0LDcgKzY1Nyw3IEBACisgCX0KKyAgICAgICBlbHNlIGlmICh1bmxpa2VseSAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9HTlVfdmVyc3ltKSkKKyAJeworLQkgIGFzc2VydCAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10udmVyc2lvbl9pZHggPT0gMCk7CisrCSAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10udmVyc2lvbl9pZHggPT0gMCk7CisgCSAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10udmVyc2lvbl9pZHggPSBjbnQ7CisgCX0KKyAKK0BAIC02NTIsNyArNjY1LDcgQEAKKyAJIGRpc2NhcmRlZCByaWdodCBhd2F5LiAgKi8KKyAgICAgICBpZiAoKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfZmxhZ3MgJiBTSEZfR1JPVVApICE9IDApCisgCXsKKy0JICBhc3NlcnQgKHNoZHJfaW5mb1tjbnRdLmdyb3VwX2lkeCAhPSAwKTsKKysJICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bY250XS5ncm91cF9pZHggIT0gMCk7CisgCisgCSAgaWYgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5ncm91cF9pZHhdLmlkeCA9PSAwKQorIAkgICAgeworQEAgLTcyNywxMSArNzQwLDE1IEBACisgCSAgICB7CisgCSAgICAgIC8qIElmIGEgcmVsb2NhdGlvbiBzZWN0aW9uIGlzIG1hcmtlZCBhcyBiZWluZyByZW1vdmVkIG1ha2UKKyAJCSBzdXJlIHRoZSBzZWN0aW9uIGl0IGlzIHJlbG9jYXRpbmcgaXMgcmVtb3ZlZCwgdG9vLiAgKi8KKy0JICAgICAgaWYgKChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1JFTAorKwkgICAgICBpZiAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9SRUwKKyAJCSAgIHx8IHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfUkVMQSkKKy0JCSAgJiYgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ICE9IDApCisrCQl7CisrCQkgIGlmIChzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm8gPj0gc2hudW0pCisrCQkgICAgZ290byBpbGxmb3JtZWQ7CisrCQkgIGVsc2UgaWYgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCAhPSAwKQorIAkJc2hkcl9pbmZvW2NudF0uaWR4ID0gMTsKKyAJICAgIH0KKysJICAgIH0KKyAKKyAJICBpZiAoc2hkcl9pbmZvW2NudF0uaWR4ID09IDEpCisgCSAgICB7CitAQCAtNzU4LDcgKzc3NSw3IEBACisgCQkgIGlmIChzaGRyX2luZm9bY250XS5zeW10YWJfaWR4ICE9IDAKKyAJCSAgICAgICYmIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zeW10YWJfaWR4XS5kYXRhID09IE5VTEwpCisgCQkgICAgeworLQkJICAgICAgYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1NZTVRBQik7CisrCQkgICAgICBlbGZfYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1NZTVRBQik7CisgCisgCQkgICAgICBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uZGF0YQorIAkJCT0gZWxmX2dldGRhdGEgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zeW10YWJfaWR4XS5zY24sCitAQCAtNzk4LDYgKzgxNSw5IEBACisgCQkgICAgICBlbHNlIGlmIChzY25pZHggPT0gU0hOX1hJTkRFWCkKKyAJCQlzY25pZHggPSB4bmR4OworIAorKwkJICAgICAgaWYgKHNjbmlkeCA+PSBzaG51bSkKKysJCQlnb3RvIGlsbGZvcm1lZDsKKysKKyAJCSAgICAgIGlmIChzaGRyX2luZm9bc2NuaWR4XS5pZHggPT0gMCkKKyAJCQkvKiBUaGlzIHN5bWJvbCB0YWJsZSBoYXMgYSByZWFsIHN5bWJvbCBpbgorIAkJCSAgIGEgZGlzY2FyZGVkIHNlY3Rpb24uICBTbyBwcmVzZXJ2ZSB0aGUKK0BAIC04MjgsMTIgKzg0OCwxNiBAQAorIAkJfQorIAorIAkgICAgICAvKiBIYW5kbGUgcmVmZXJlbmNlcyB0aHJvdWdoIHNoX2luZm8uICAqLworLQkgICAgICBpZiAoU0hfSU5GT19MSU5LX1AgKCZzaGRyX2luZm9bY250XS5zaGRyKQorLQkJICAmJiBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggPT0gMCkKKysJICAgICAgaWYgKFNIX0lORk9fTElOS19QICgmc2hkcl9pbmZvW2NudF0uc2hkcikpCisrCQl7CisrCQkgIGlmIChzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm8gPj0gc2hudW0pCisrCQkgICAgZ290byBpbGxmb3JtZWQ7CisrCQkgIGVsc2UgaWYgKCBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggPT0gMCkKKyAJCXsKKyAJCSAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ID0gMTsKKyAJCSAgY2hhbmdlcyB8PSBzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm8gPCBjbnQ7CisgCQl9CisrCQl9CisgCisgCSAgICAgIC8qIE1hcmsgdGhlIHNlY3Rpb24gYXMgaW52ZXN0aWdhdGVkLiAgKi8KKyAJICAgICAgc2hkcl9pbmZvW2NudF0uaWR4ID0gMjsKK0BAIC05NzIsNyArOTk2LDcgQEAKKyAJICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgid2hpbGUgZ2VuZXJhdGluZyBvdXRwdXQgZmlsZTogJXMiKSwKKyAJCSBlbGZfZXJybXNnICgtMSkpOworIAorLQlhc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKysJZWxmX2Fzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBzaGRyX2luZm9bY250XS5pZHgpOworIAorIAkvKiBBZGQgdGhpcyBuYW1lIHRvIHRoZSBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUuICAqLworIAlzaGRyX2luZm9bY250XS5zZSA9IGVibF9zdHJ0YWJhZGQgKHNoc3QsIHNoZHJfaW5mb1tjbnRdLm5hbWUsIDApOworQEAgLTEwMDksNyArMTAzMyw3IEBACisgCWVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgICAgICBnZXR0ZXh0ICgid2hpbGUgY3JlYXRlIHNlY3Rpb24gaGVhZGVyIHNlY3Rpb246ICVzIiksCisgCSAgICAgICBlbGZfZXJybXNnICgtMSkpOworLSAgICAgIGFzc2VydCAoZWxmX25keHNjbiAoc2hkcl9pbmZvW2NudF0ubmV3c2NuKSA9PSBzaGRyX2luZm9bY250XS5pZHgpOworKyAgICAgIGVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKyAKKyAgICAgICBzaGRyX2luZm9bY250XS5kYXRhID0gZWxmX25ld2RhdGEgKHNoZHJfaW5mb1tjbnRdLm5ld3Njbik7CisgICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLmRhdGEgPT0gTlVMTCkKK0BAIC0xMDY1LDcgKzEwODksNyBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgid2hpbGUgY3JlYXRlIHNlY3Rpb24gaGVhZGVyIHNlY3Rpb246ICVzIiksCisgCSAgIGVsZl9lcnJtc2cgKC0xKSk7CistICBhc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gaWR4KTsKKysgIGVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gaWR4KTsKKyAKKyAgIC8qIEZpbmFsaXplIHRoZSBzdHJpbmcgdGFibGUgYW5kIGZpbGwgaW4gdGhlIGNvcnJlY3QgaW5kaWNlcyBpbiB0aGUKKyAgICAgIHNlY3Rpb24gaGVhZGVycy4gICovCitAQCAtMTE1NSwyMCArMTE3OSwyMCBAQAorIAkJICAgIHNobmR4ZGF0YSA9IGVsZl9nZXRkYXRhIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uc2NuLAorIAkJCQkJICAgICBOVUxMKTsKKyAKKy0JCSAgICBhc3NlcnQgKCh2ZXJzaW9uZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKysJCSAgICBlbGZfYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkpCisgCQkJICAgID49IHNoZHJfaW5mb1tjbnRdLmRhdGEtPmRfc2l6ZSAvIGVsc2l6ZSk7CisgCQkgIH0KKyAKKyAJCWlmIChzaGRyX2luZm9bY250XS52ZXJzaW9uX2lkeCAhPSAwKQorIAkJICB7CistCQkgICAgYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0RZTlNZTSk7CisrCQkgICAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9EWU5TWU0pOworIAkJICAgIC8qIFRoaXMgc2VjdGlvbiBoYXMgYXNzb2NpYXRlZCB2ZXJzaW9uCisgCQkgICAgICAgaW5mb3JtYXRpb24uICBXZSBoYXZlIHRvIG1vZGlmeSB0aGF0CisgCQkgICAgICAgaW5mb3JtYXRpb24sIHRvby4gICovCisgCQkgICAgdmVyc2lvbmRhdGEgPSBlbGZfZ2V0ZGF0YSAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnZlcnNpb25faWR4XS5zY24sCisgCQkJCQkgICAgICAgTlVMTCk7CisgCistCQkgICAgYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoR0VsZl9WZXJzeW0pKQorKwkJICAgIGVsZl9hc3NlcnQgKCh2ZXJzaW9uZGF0YS0+ZF9zaXplIC8gc2l6ZW9mIChHRWxmX1ZlcnN5bSkpCisgCQkJICAgID49IHNoZHJfaW5mb1tjbnRdLmRhdGEtPmRfc2l6ZSAvIGVsc2l6ZSk7CisgCQkgIH0KKyAKK0BAIC0xMjIzLDcgKzEyNDcsNyBAQAorIAkJICAgICAgc2VjID0gc2hkcl9pbmZvW3N5bS0+c3Rfc2huZHhdLmlkeDsKKyAJCSAgICBlbHNlCisgCQkgICAgICB7CistCQkJYXNzZXJ0IChzaG5keGRhdGEgIT0gTlVMTCk7CisrCQkJZWxmX2Fzc2VydCAoc2huZHhkYXRhICE9IE5VTEwpOworIAorIAkJCXNlYyA9IHNoZHJfaW5mb1t4c2huZHhdLmlkeDsKKyAJCSAgICAgIH0KK0BAIC0xMjQ0LDcgKzEyNjgsNyBAQAorIAkJCSAgICBueHNobmR4ID0gc2VjOworIAkJCSAgfQorIAorLQkJCWFzc2VydCAoc2VjIDwgU0hOX0xPUkVTRVJWRSB8fCBzaG5keGRhdGEgIT0gTlVMTCk7CisrCQkJZWxmX2Fzc2VydCAoc2VjIDwgU0hOX0xPUkVTRVJWRSB8fCBzaG5keGRhdGEgIT0gTlVMTCk7CisgCisgCQkJaWYgKChpbm5lciAhPSBkZXN0aWR4IHx8IG5zaG5keCAhPSBzeW0tPnN0X3NobmR4CisgCQkJICAgICB8fCAoc2huZHhkYXRhICE9IE5VTEwgJiYgbnhzaG5keCAhPSB4c2huZHgpKQorQEAgLTEyNjgsNyArMTI5Miw3IEBACisgCQkJICAgICB8fCBzaGRyX2luZm9bY250XS5kZWJ1Z19kYXRhID09IE5VTEwpCisgCQkgICAgICAvKiBUaGlzIGlzIGEgc2VjdGlvbiBzeW1ib2wgZm9yIGEgc2VjdGlvbiB3aGljaCBoYXMKKyAJCQkgYmVlbiByZW1vdmVkLiAgKi8KKy0JCSAgICAgIGFzc2VydCAoR0VMRl9TVF9UWVBFIChzeW0tPnN0X2luZm8pID09IFNUVF9TRUNUSU9OKTsKKysJCSAgICAgIGVsZl9hc3NlcnQgKEdFTEZfU1RfVFlQRSAoc3ltLT5zdF9pbmZvKSA9PSBTVFRfU0VDVElPTik7CisgCQkgIH0KKyAKKyAJCWlmIChkZXN0aWR4ICE9IGlubmVyKQorQEAgLTE0NTUsMTEgKzE0NzksMTEgQEAKKyAJCSAgeworIAkJICAgIEdFbGZfU3ltIHN5bV9tZW07CisgCQkgICAgR0VsZl9TeW0gKnN5bSA9IGdlbGZfZ2V0c3ltIChzeW1kLCBpbm5lciwgJnN5bV9tZW0pOworLQkJICAgIGFzc2VydCAoc3ltICE9IE5VTEwpOworKwkJICAgIGVsZl9hc3NlcnQgKHN5bSAhPSBOVUxMKTsKKyAKKyAJCSAgICBjb25zdCBjaGFyICpuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzdHJzaG5keCwKKyAJCQkJCQkgICBzeW0tPnN0X25hbWUpOworLQkJICAgIGFzc2VydCAobmFtZSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChuYW1lICE9IE5VTEwpOworIAkJICAgIHNpemVfdCBoaWR4ID0gZWxmX2hhc2ggKG5hbWUpICUgbmJ1Y2tldDsKKyAKKyAJCSAgICBpZiAoYnVja2V0W2hpZHhdID09IDApCitAQCAtMTQ3OCw3ICsxNTAyLDcgQEAKKyAJICAgIGVsc2UKKyAJICAgICAgeworIAkJLyogQWxwaGEgYW5kIFMzOTAgNjQtYml0IHVzZSA2NC1iaXQgU0hUX0hBU0ggZW50cmllcy4gICovCistCQlhc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfZW50c2l6ZQorKwkJZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9lbnRzaXplCisgCQkJPT0gc2l6ZW9mIChFbGY2NF9Yd29yZCkpOworIAorIAkJRWxmNjRfWHdvcmQgKmJ1Y2tldCA9IChFbGY2NF9Yd29yZCAqKSBoYXNoZC0+ZF9idWY7CitAQCAtMTUwOSwxMSArMTUzMywxMSBAQAorIAkJICB7CisgCQkgICAgR0VsZl9TeW0gc3ltX21lbTsKKyAJCSAgICBHRWxmX1N5bSAqc3ltID0gZ2VsZl9nZXRzeW0gKHN5bWQsIGlubmVyLCAmc3ltX21lbSk7CistCQkgICAgYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAoc3ltICE9IE5VTEwpOworIAorIAkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBlbGZfc3RycHRyIChlbGYsIHN0cnNobmR4LAorIAkJCQkJCSAgIHN5bS0+c3RfbmFtZSk7CistCQkgICAgYXNzZXJ0IChuYW1lICE9IE5VTEwpOworKwkJICAgIGVsZl9hc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisgCQkgICAgc2l6ZV90IGhpZHggPSBlbGZfaGFzaCAobmFtZSkgJSBuYnVja2V0OworIAorIAkJICAgIGlmIChidWNrZXRbaGlkeF0gPT0gMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlbW92ZS11bnVzZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZW1vdmUtdW51c2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTk3OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZW1vdmUtdW51c2VkLnBhdGNoCkBAIC0wLDAgKzEsMTU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGZyb20gdGhlIGNvZGUgdG8gcHJldmVudCAtV2Vycm9yIGNhdXNpbmcgYSBidWlsZAorZmFpbHVyZSBvbiBob3N0cyB3aXRoIEdDQyA0LjYuCisKK1RoZXNlIGNoYW5nZXMgYXJlIGFsbCB1cHN0cmVhbSBzbyBzaG91bGQgbm90IGJlIHJlcXVpcmVkIG9uY2Ugd2UndmUgdXBkYXRlZAordG8gZWxmdXRpbHMgMC4xNTIgb3IgbGF0ZXIuIFRoZXJlZm9yZSB0aGlzIHBhdGNoIGNvbnNvbGlkYXRlcyBzZXZlcmFsCitjaGFuZ2VzIGZyb20gZWxmdXRpbHMgdXBzdHJlYW0gYnkgUm9sYW5kIE1jR3JhdGggaW50byBhIHNpbmdsZSBmaWxlIHNvIHRoYXQKK2l0J3MgZWFzaWVyIHRvIHJlbW92ZSBsYXRlciBvbmNlIHdlIHVwZ3JhZGUuCitMaW5rcyB0byB1cHN0cmVhbSBnaXR3ZWIgb2YgdGhlIGNvbnNvbGlkYXRlZCBjb21taXRzIGZvbGxvdzoKKy0gaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2dpdD9wPWVsZnV0aWxzLmdpdDthPWNvbW1pdDtoPTcwOTRkMDBhMTY5YWZiMjdlMDMyM2Y4NTgwZTgxNzc5OGFlN2MyNDAKKy0gaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2dpdD9wPWVsZnV0aWxzLmdpdDthPWNvbW1pdDtoPWZkOTkyNTQzMTg1MTI2ZWIwMjgwYzFlZTA4ODNlMDczMDIwNDk5YjQKKy0gaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2dpdD9wPWVsZnV0aWxzLmdpdDthPWNvbW1pdDtoPTRkYjg5ZjA0YmI1OTMyN2FiZDdhM2I2MGU4OGYyZTdlNzNjNjVjNzkKKy0gaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2dpdD9wPWVsZnV0aWxzLmdpdDthPWNvbW1pdDtoPThmNmMxNzk1YWI5ZDQxZjAzODA1ZWViZDU1NzY3MDcwYWRlNTVhYWMKKy0gaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2dpdD9wPWVsZnV0aWxzLmdpdDthPWNvbW1pdDtoPTI0MDc4NGI0OGFhMjc2ODIyYzVhNjFjOWFkNmE0MzU1MDUxY2UyNTkKKworSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPiAtIDA2LzA0LzExCisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJhc20vYXNtX25ld3Njbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJhc20vYXNtX25ld3Njbi5jCisrKysgZWxmdXRpbHMtMC4xNDgvbGliYXNtL2FzbV9uZXdzY24uYworQEAgLTE2Miw3ICsxNjIsNiBAQCBhc21fbmV3c2NuIChjdHgsIHNjbm5hbWUsIHR5cGUsIGZsYWdzKQorICAgICAgR0VsZl9Yd29yZCBmbGFnczsKKyB7CisgICBzaXplX3Qgc2NubmFtZV9sZW4gPSBzdHJsZW4gKHNjbm5hbWUpICsgMTsKKy0gIHVuc2lnbmVkIGxvbmcgaW50IGh2YWw7CisgICBBc21TY25fdCAqcmVzdWx0OworIAorICAgLyogSWYgbm8gY29udGV4dCBpcyBnaXZlbiB0aGVyZSBtaWdodCBiZSBhbiBlYXJsaWVyIGVycm9yLiAgKi8KK0BAIC0xODAsOCArMTc5LDYgQEAgYXNtX25ld3NjbiAoY3R4LCBzY25uYW1lLCB0eXBlLCBmbGFncykKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgfQorIAorLSAgaHZhbCA9IGVsZl9oYXNoIChzY25uYW1lKTsKKy0KKyAgIHJ3bG9ja193cmxvY2sgKGN0eC0+bG9jayk7CisgCisgICAvKiBUaGlzIGlzIGEgbmV3IHNlY3Rpb24uICAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9lbGZsaW50LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9lbGZsaW50LmMKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCitAQCAtNzA3LDkgKzcwNywxMCBAQCBzZWN0aW9uIFslMmRdICclcyc6IHN5bWJvbCAlenU6IGludmFsaWQgCisgCXsKKyAJICBpZiAoeG5keGRhdGEgPT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgRVJST1IgKGdldHRleHQgKCJcCisrCSAgICAgIGlmICghbm9feG5keF93YXJuZWQpCisrCQlFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IHN5bWJvbCAlenU6IHRvbyBsYXJnZSBzZWN0aW9uIGluZGV4IGJ1dCBubyBleHRlbmRlZCBzZWN0aW9uIGluZGV4IHNlY3Rpb25cbiIpLAorLQkJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQpOworKwkJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCk7CisgCSAgICAgIG5vX3huZHhfd2FybmVkID0gdHJ1ZTsKKyAJICAgIH0KKyAJICBlbHNlIGlmICh4bmR4IDwgU0hOX0xPUkVTRVJWRSkKK0BAIC0xNTkyLDEwICsxNTkzLDYgQEAgY2hlY2tfZHluYW1pYyAoRWJsICplYmwsIEdFbGZfRWhkciAqZWhkcgorICAgICAgIFtEVF9TVFJTWl0gPSB0cnVlLAorICAgICAgIFtEVF9TWU1FTlRdID0gdHJ1ZQorICAgICB9OworLSAgR0VsZl9BZGRyIHJlbGFkZHIgPSAwOworLSAgR0VsZl9Xb3JkIHJlbHN6ID0gMDsKKy0gIEdFbGZfQWRkciBwbHRyZWxhZGRyID0gMDsKKy0gIEdFbGZfV29yZCBwbHRyZWxzeiA9IDA7CisgCisgICBtZW1zZXQgKGhhc19kdCwgJ1wwJywgc2l6ZW9mIChoYXNfZHQpKTsKKyAgIG1lbXNldCAoaGFzX3ZhbF9kdCwgJ1wwJywgc2l6ZW9mIChoYXNfdmFsX2R0KSk7CitAQCAtMTY5NCwxNSArMTY5MSw2IEBAIHNlY3Rpb24gWyUyZF0gJyVzJzogZW50cnkgJXp1OiBsZXZlbCAyIHQKKyBzZWN0aW9uIFslMmRdICclcyc6IGVudHJ5ICV6dTogRFRfUExUUkVMIHZhbHVlIG11c3QgYmUgRFRfUkVMIG9yIERUX1JFTEFcbiIpLAorIAkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250KTsKKyAKKy0gICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9SRUwpCistCXJlbGFkZHIgPSBkeW4tPmRfdW4uZF9wdHI7CistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUkVMU1opCistCXJlbHN6ID0gZHluLT5kX3VuLmRfdmFsOworLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX0pNUFJFTCkKKy0JcGx0cmVsYWRkciA9IGR5bi0+ZF91bi5kX3B0cjsKKy0gICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9QTFRSRUxTWikKKy0JcGx0cmVsc3ogPSBkeW4tPmRfdW4uZF92YWw7CistCisgICAgICAgLyogQ2hlY2sgdGhhdCBhZGRyZXNzZXMgZm9yIGVudHJpZXMgYXJlIGluIGxvYWRlZCBzZWdtZW50cy4gICovCisgICAgICAgc3dpdGNoIChkeW4tPmRfdGFnKQorIAl7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkZ2VuZXJpYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvbGRnZW5lcmljLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvbGRnZW5lcmljLmMKK0BAIC0yODUsMTIgKzI4NSwxMCBAQCBzdGF0aWMgaW50CisgY2hlY2tfZm9yX2R1cGxpY2F0ZTIgKHN0cnVjdCB1c2VkZmlsZXMgKm5ld3AsIHN0cnVjdCB1c2VkZmlsZXMgKmxpc3QpCisgeworICAgc3RydWN0IHVzZWRmaWxlcyAqZmlyc3Q7CistICBzdHJ1Y3QgdXNlZGZpbGVzICpwcmV2cDsKKyAKKyAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgcHJldnAgPSBsaXN0OworICAgbGlzdCA9IGZpcnN0ID0gbGlzdC0+bmV4dDsKKyAgIGRvCisgICAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvbGRzY3JpcHQueQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2xkc2NyaXB0LnkKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvbGRzY3JpcHQueQorQEAgLTgwMiwxMiArODAyLDkgQEAgYWRkX3ZlcnNpb25zIChzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbnMpCisgCisgICBkbworICAgICB7CistICAgICAgc3RydWN0IHZlcnNpb24gKm9sZHA7CistCisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmxvY2FsX25hbWVzLCB0cnVlKTsKKyAgICAgICBhZGRfaWRfbGlzdCAodmVyc2lvbnMtPnZlcnNpb25uYW1lLCB2ZXJzaW9ucy0+Z2xvYmFsX25hbWVzLCBmYWxzZSk7CisgCistICAgICAgb2xkcCA9IHZlcnNpb25zOworICAgICAgIHZlcnNpb25zID0gdmVyc2lvbnMtPm5leHQ7CisgICAgIH0KKyAgIHdoaWxlICh2ZXJzaW9ucyAhPSBOVUxMKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvdW5zdHJpcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvdW5zdHJpcC5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3Vuc3RyaXAuYworQEAgLTEzMDEsNyArMTMwMSw2IEBAIG1vcmUgc2VjdGlvbnMgaW4gc3RyaXBwZWQgZmlsZSB0aGFuIGRlYnUKKyAgIC8qIE1hdGNoIGVhY2ggZGVidWdpbmZvIHNlY3Rpb24gd2l0aCBpdHMgY29ycmVzcG9uZGluZyBzdHJpcHBlZCBzZWN0aW9uLiAgKi8KKyAgIGJvb2wgY2hlY2tfcHJlbGluayA9IGZhbHNlOworICAgRWxmX1NjbiAqdW5zdHJpcHBlZF9zeW10YWIgPSBOVUxMOworLSAgc2l6ZV90IHVuc3RyaXBwZWRfc3RydGFiX25keCA9IFNITl9VTkRFRjsKKyAgIHNpemVfdCBhbGxvY19hdmFpbCA9IDA7CisgICBzY24gPSBOVUxMOworICAgd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbiAodW5zdHJpcHBlZCwgc2NuKSkgIT0gTlVMTCkKK0BAIC0xMzEzLDcgKzEzMTIsNiBAQCBtb3JlIHNlY3Rpb25zIGluIHN0cmlwcGVkIGZpbGUgdGhhbiBkZWJ1CisgICAgICAgaWYgKHNoZHItPnNoX3R5cGUgPT0gU0hUX1NZTVRBQikKKyAJeworIAkgIHVuc3RyaXBwZWRfc3ltdGFiID0gc2NuOworLQkgIHVuc3RyaXBwZWRfc3RydGFiX25keCA9IHNoZHItPnNoX2xpbms7CisgCSAgY29udGludWU7CisgCX0KKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvbGRzY3JpcHQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2xkc2NyaXB0LmMKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvbGRzY3JpcHQuYworQEAgLTI3MjgsMTIgKzI3MjgsOSBAQCBhZGRfdmVyc2lvbnMgKHN0cnVjdCB2ZXJzaW9uICp2ZXJzaW9ucykKKyAKKyAgIGRvCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgdmVyc2lvbiAqb2xkcDsKKy0KKyAgICAgICBhZGRfaWRfbGlzdCAodmVyc2lvbnMtPnZlcnNpb25uYW1lLCB2ZXJzaW9ucy0+bG9jYWxfbmFtZXMsIHRydWUpOworICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5nbG9iYWxfbmFtZXMsIGZhbHNlKTsKKyAKKy0gICAgICBvbGRwID0gdmVyc2lvbnM7CisgICAgICAgdmVyc2lvbnMgPSB2ZXJzaW9ucy0+bmV4dDsKKyAgICAgfQorICAgd2hpbGUgKHZlcnNpb25zICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzkyZDVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitPbiBtYW55IGFyY2hpdGVjdHVyZXMgdGhpcyB0ZXN0IGZhaWxzIGJlY2F1c2UgYmluYXJpZXMvbGlicyBwcm9kdWNlZCBieQorYmludXRpbHMgZG9uJ3QgcGFzcyBlbGZsaW50LiBIb3dldmVyIGVsZnV0aWxzIHNob3VsZG4ndCBGVEJGUyBiZWNhdXNlIG9mIHRoaXMuCisKK1NvIHdlIHJ1biB0aGUgdGVzdHMgb24gYWxsIGFyY2hzIHRvIHNlZSB3aGF0IGJyZWFrcywgYnV0IGlmIGl0IGJyZWFrcyB3ZSBpZ25vcmUKK3RoZSByZXN1bHQgKGV4aXRjb2RlIDc3IG1lYW5zOiB0aGlzIHRlc3Qgd2FzIHNraXBwZWQpLgorCitJbmRleDogZWxmdXRpbHMtMC4xMjgvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTI4Lm9yaWcvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDA3LTA3LTA4IDIxOjQ2OjE2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTI4L3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gJMjAwNy0wNy0wOCAyMTo0Njo0OS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMiw3ICszMiw3IEBACisgIyAgZWNobyAkMQorICAgaWYgWyAtZiAkMSBdOyB0aGVuCisgICAgIHRlc3RydW4gLi4vc3JjL2VsZmxpbnQgLS1xdWlldCAtLWdudS1sZCAkMSB8fAorLSAgICB7IGVjaG8gIioqKiBmYWlsdXJlIGluICQxIjsgc3RhdHVzPTE7IH0KKysgICAgeyBlY2hvICIqKiogZmFpbHVyZSBpbiAkMSI7IHN0YXR1cz03NzsgfQorICAgZmkKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmMTZhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaApAQCAtMCwwICsxLDkxIEBACitvbiB1Y2xpYmMgc3lzdGVtcyBsaWJpbnRsIGFuZCBsaWJ1YXJncCBhcmUgc2VwYXJhdGUgZnJvbSBsaWJjLgorc28gdGhleSBuZWVkIHRvIGJlIHNwZWNpZmllZCBvbiBjb21tYW5kbGluZSB3aGVuIHdlIHVzZSBwcm94eS1saWJpbnRsCit0aGVuIGxpYmludGwgaXMgYSBzdGF0aWMgYXJjaGl2ZSBzbyBpdCBzaG91bGQgYmUgbGlzdGVkIGxhc3Qgc2luY2UKK2VsZnV0aWxzIGRvZXMgbm90IHJlc3BlY3QgZGlzYWJsZS1ubHMgd2UgbmVlZCB0byBsaW5rIGluIGxpYmludGwKKworV2UgYWRkIGEgbmV3IG9wdGlvbiAtLWVuYWJsZS11Y2xpYmMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGNvbnRyb2wKK3RoZSB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZHVyaW5nIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW0+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9jb25maWd1cmUuYWMKKysrKyBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMKK0BAIC01NSw5ICs1NSwxNiBAQCBBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLCBbQUNfREVGCisgCisgQUhfVEVNUExBVEUoW1VTRV9MT0NLU10sIFtEZWZpbmVkIGlmIGxpYnJhcmllcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUuXSkKKyAKKytBQ19BUkdfRU5BQkxFKFt1Y2xpYmNdLAorK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11Y2xpYmNdLCBbVXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllc10pLAorK3VzZV91Y2xpYmM9eWVzLCB1c2VfdWNsaWJjPW5vKQorK0FNX0NPTkRJVElPTkFMKFVTRV9VQ0xJQkMsIHRlc3QgIiR1c2VfdWNsaWJjIiA9IHllcykKKytBU19JRihbdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzXSwgW0FDX0RFRklORShVU0VfVUNMSUJDKV0pCisrCisrQUhfVEVNUExBVEUoW1VTRV9VQ0xJQkNdLCBbRGVmaW5lZCBpZiB1Y2xpYmMgbGlicmFyaWVzIGFyZSB1c2VkLl0pCisrCisgZG5sIEFkZCBhbGwgdGhlIGxhbmd1YWdlcyBmb3Igd2hpY2ggdHJhbnNsYXRpb25zIGFyZSBhdmFpbGFibGUuCisgQUxMX0xJTkdVQVM9CistCisgQUNfUFJPR19DQworIEFDX1BST0dfUkFOTElCCisgQUNfUFJPR19ZQUNDCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvTWFrZWZpbGUuYW0KK0BAIC05Myw3ICs5MywxMiBAQCBpZiAhTVVERkxBUAorIGxpYmVsZl9waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJlbGZfcGljX2FfT0JKRUNUUyA9ICQobGliZWxmX2FfU09VUkNFUzouYz0ub3MpCisgCisrCisgbGliZWxmX3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmVsZl9zb19MRExJQlMgKz0gLWxpbnRsIC1sdWFyZ3AKKytlbmRpZgorKworIGlmIFVTRV9MT0NLUworIGxpYmVsZl9zb19MRExJQlMgKz0gLWxwdGhyZWFkCisgZW5kaWYKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkdy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHcvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkdy9NYWtlZmlsZS5hbQorQEAgLTk4LDYgKzk4LDExIEBAIGlmICFNVURGTEFQCisgbGliZHdfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZHdfcGljX2FfT0JKRUNUUyA9ICQobGliZHdfYV9TT1VSQ0VTOi5jPS5vcykKKyAKKytsaWJkd19zb19MRExJQlMgPQorK2lmIFVTRV9VQ0xJQkMKKytsaWJkd19zb19MRExJQlMgKz0gLWxpbnRsIC1sdWFyZ3AKKytlbmRpZgorKworIGxpYmR3X3NvX1NPVVJDRVMgPQorIGxpYmR3LnNvOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIFwKKyAJICAuLi9saWJkd2ZsL2xpYmR3ZmxfcGljLmEgLi4vbGliZWJsL2xpYmVibC5hIFwKK0BAIC0xMDgsNyArMTEzLDcgQEAgbGliZHcuc286ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLgorIAkJLVdsLC0tZW5hYmxlLW5ldy1kdGFncywtcnBhdGgsJChwa2dsaWJkaXIpIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQ8LC0tbm8tdW5kZWZpbmVkIFwKKyAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJChmaWx0ZXItb3V0ICQ8LCReKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlXAorLQkJLWxkbCAkKHppcF9MSUJTKQorKwkJLWxkbCAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykKKyAJaWYgcmVhZGVsZiAtZCAkQCB8IGZncmVwIC1xIFRFWFRSRUw7IHRoZW4gZXhpdCAxOyBmaQorIAlsbiAtZnMgJEAgJEAuJChWRVJTSU9OKQorIAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliY3B1L01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvbGliY3B1L01ha2VmaWxlLmFtCitAQCAtNjMsNiArNjMsMTAgQEAgaTM4Nl9wYXJzZV9DRkxBR1MgPSAtRE5NTkVTPSJgd2MgLWwgPCBpMworIGkzODZfbGV4Lm86IGkzODZfcGFyc2UuaAorIGkzODZfZ2VuZGlzX0xEQUREID0gJChsaWJldSkgLWxtICQobGlibXVkZmxhcCkKKyAKKytpZiBVU0VfVUNMSUJDCisraTM4Nl9nZW5kaXNfTERBREQgKz0gLWx1YXJncCAtbGludGwKKytlbmRpZgorKworIGkzODZfcGFyc2UuaDogaTM4Nl9wYXJzZS5jIDsKKyAKKyBub2luc3RfSEVBREVSUyA9IG1lbW9yeS1hY2Nlc3MuaCBpMzg2X3BhcnNlLmggaTM4Nl9kYXRhLmgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE5OGJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oCkBAIC0wLDAgKzEsMTYzMiBAQAorI2RlZmluZSBNTkVNT05JQ19CSVRTIDEwCisjZGVmaW5lIFNVRkZJWF9CSVRTIDMKKyNkZWZpbmUgRkNUMV9CSVRTIDcKKyNkZWZpbmUgU1RSMV9CSVRTIDQKKyNkZWZpbmUgT0ZGMV8xX0JJVFMgNworI2RlZmluZSBPRkYxXzFfQklBUyAzCisjZGVmaW5lIE9GRjFfMl9CSVRTIDcKKyNkZWZpbmUgT0ZGMV8yX0JJQVMgNAorI2RlZmluZSBPRkYxXzNfQklUUyAxCisjZGVmaW5lIE9GRjFfM19CSUFTIDcKKyNkZWZpbmUgRkNUMl9CSVRTIDYKKyNkZWZpbmUgU1RSMl9CSVRTIDIKKyNkZWZpbmUgT0ZGMl8xX0JJVFMgNworI2RlZmluZSBPRkYyXzFfQklBUyA1CisjZGVmaW5lIE9GRjJfMl9CSVRTIDcKKyNkZWZpbmUgT0ZGMl8yX0JJQVMgNAorI2RlZmluZSBPRkYyXzNfQklUUyA0CisjZGVmaW5lIE9GRjJfM19CSUFTIDcKKyNkZWZpbmUgRkNUM19CSVRTIDQKKyNkZWZpbmUgU1RSM19CSVRTIDEKKyNkZWZpbmUgT0ZGM18xX0JJVFMgNgorI2RlZmluZSBPRkYzXzFfQklBUyAxMAorI2RlZmluZSBPRkYzXzJfQklUUyAxCisjZGVmaW5lIE9GRjNfMl9CSUFTIDIxCisKKyNpbmNsdWRlIDxpMzg2X2RhdGEuaD4KKworI2RlZmluZSBzdWZmaXhfbm9uZSAwCisjZGVmaW5lIHN1ZmZpeF93IDEKKyNkZWZpbmUgc3VmZml4X3cwIDIKKyNkZWZpbmUgc3VmZml4X1cgMworI2RlZmluZSBzdWZmaXhfdHR0biA0CisjZGVmaW5lIHN1ZmZpeF9EIDcKKyNkZWZpbmUgc3VmZml4X3cxIDUKKyNkZWZpbmUgc3VmZml4X1cxIDYKKworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AxX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX01PRCRSX00sCisgIEZDVF9Nb2QkUl9tLAorICBGQ1RfYWJzLAorICBGQ1RfYXgsCisgIEZDVF9heCR3LAorICBGQ1RfY2NjLAorICBGQ1RfZGRkLAorICBGQ1RfZGlzcDgsCisgIEZDVF9kc19ieCwKKyAgRkNUX2RzX3NpLAorICBGQ1RfZHgsCisgIEZDVF9lc19kaSwKKyAgRkNUX2ZyZWcsCisgIEZDVF9pbW0kcywKKyAgRkNUX2ltbSR3LAorICBGQ1RfaW1tMTYsCisgIEZDVF9pbW02NCR3LAorICBGQ1RfaW1tOCwKKyAgRkNUX2ltbXM4LAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJDE2cl9tLAorICBGQ1RfbW9kJDY0cl9tLAorICBGQ1RfbW9kJDhyX20sCisgIEZDVF9tb2Qkcl9tLAorICBGQ1RfbW9kJHJfbSR3LAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3JlbCwKKyAgRkNUX3NlbCwKKyAgRkNUX3NyZWcyLAorICBGQ1Rfc3JlZzMsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AxX3N0cltdID0KKyAgIiVheFwwIgorICAiJWNsXDAiCisgICIlcmF4XDAiCisgICIlc3RcMCIKKyAgIiV4bW0wXDAiCisgICIqIjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMV9zdHJfaWR4W10gPSB7CisgIDAsCisgIDQsCisgIDgsCisgIDEzLAorICAxNywKKyAgMjMsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AyX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX01PRCRSX00sCisgIEZDVF9Nb2QkUl9tLAorICBGQ1RfYWJzLAorICBGQ1RfYWJzdmFsLAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2RzX3NpLAorICBGQ1RfZHgsCisgIEZDVF9lc19kaSwKKyAgRkNUX2ZyZWcsCisgIEZDVF9pbW04LAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJDY0cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX29yZWcsCisgIEZDVF9vcmVnJHcsCisgIEZDVF9yZWcsCisgIEZDVF9yZWckdywKKyAgRkNUX3JlZzY0LAorICBGQ1Rfc3JlZzMsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AyX3N0cltdID0KKyAgIiVyY3hcMCIKKyAgIiVzdCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDJfc3RyX2lkeFtdID0geworICAwLAorICA1LAorfTsKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wM19mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9tbXhyZWcsCisgIEZDVF9tb2Qkcl9tLAorICBGQ1RfcmVnLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wM19zdHJbXSA9CisgICIlcmR4IjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wM19zdHJfaWR4W10gPSB7CisgIDAsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpbnN0cl9lbmMgaW5zdHJ0YWJbXSA9Cit7CisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2xxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JzZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnN3YXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0cywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gNiwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsdHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3lzZW50ZXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2V4aXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHMsIC5yZXAgPSAwLCAucmVwZSA9IDEsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB4Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAxMSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSA4LCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jcHVpZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0ZHEycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2VtbXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbm9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY2hzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWJzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdHN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meGFtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGwyZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkcGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxnMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbG4yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGR6LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mMnhtMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnlsMngsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcGF0YW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4dHJhY3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmluY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnByZW0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4cDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzcXJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcm5kaW50LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2NhbGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzaW4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRlbnYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRjdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RlbnYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0Y3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meGNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGRwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWxwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3VicnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdWJyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAxLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmJsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmJzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY2hzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY2xleCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmluaXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z3YWl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92bmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm51LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21wcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbWksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mdWNvbWlwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGVjc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWRpdnJsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZmcmVlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92YmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmljb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdnUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmljb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlsZGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmluY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5pbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA1LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maXN0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHRwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHRwbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc2F2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hsdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaWRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ltdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDIsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW5zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludDMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N3YXBncywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW52bHBnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNiwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9qbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xqbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sYWhmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlYXZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xnZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xpZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xtc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvY2ssIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvZHMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcG5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sc2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2x0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDcsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzYmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3dsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnpibCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6d2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbmVnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF1c2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGNudCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ub3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dHMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNocSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDIsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkcG1jLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZHRzYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9scmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9scmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYWhmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2NhcywgLnJlcCA9IDAsIC5yZXBlID0gMSwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtbGF1bmNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXJlc3VtZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm14b2ZmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXJlYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm13cml0ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZ2R0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb25pdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNCwgLnN0cjMgPSAxLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX213YWl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NpZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Ntc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0b3MsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWQyYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdmVyciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdmVydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd2JpbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wcmVmZXRjaG50YSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h0MCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h0MSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2h0MiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbm9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV93cm1zciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGFkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94Y2hnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTcsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGxhdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2VtbXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYWRkd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHhvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsdHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbGVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHVub3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBuZXFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sdHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBvcmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBsdHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbGVzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcHVub3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBuZXFzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sdHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBvcmRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4cnN0b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z4c2F2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGRteGNzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RteGNzciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnVwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2xkdXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNrbHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2hwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNoZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92YXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2kyc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2kyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwaTJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0c2Qyc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0c3Myc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c3Myc2ksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJwaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Vjb21pc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY29taXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZ2V0c2VjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm1za3BzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcnNxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjcHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29ycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVscHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBzMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0ZHEycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWluc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2x3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2x3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Nzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2t1c3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3NkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2xxZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tocWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1Zmh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hhZGRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hhZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hzdWJwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2hzdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50aSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wZXh0cncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2h1ZnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZHEycSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Ztc2tiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdmdiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bhdmd3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1pbnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGRkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bHVkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXNrbW92ZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHVic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHVic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waHN1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWdudywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWdudywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaWduZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGhyc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbGlnbnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1jbGVhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm14b24sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcHRybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcHRyc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xmbHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kdnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kcHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luc2VydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50ZHFhLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXBzYWRidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXNkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHZiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSA1LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGJsZW5kdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21waXN0cmksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waG1pbnBvc3V3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXh1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW51dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4d3EsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4d3EsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B0ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3AsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorfTsKK3N0YXRpYyBjb25zdCB1aW50OF90IG1hdGNoX2RhdGFbXSA9Cit7CisgIDB4MSwgMHhmZSwgMHgxNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHgxMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDEyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4NCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAwLAorICAweDEyLCAweDgzLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDAsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDI0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDIwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgxMiwgMHg2MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJjLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmQsIDAsIDAsCisgIDB4MTIsIDB4ZiwgMHhmOCwgMHhjOCwKKyAgMHgyMywgMHhmLCAweGEzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MjAsCisgIDB4MjMsIDB4ZiwgMHhiYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDM4LAorICAweDIzLCAweGYsIDB4YjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGFiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4ZTgsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MTgsCisgIDB4MTEsIDB4OTgsCisgIDB4MTEsIDB4OTksCisgIDB4MTEsIDB4ZjgsCisgIDB4MTEsIDB4ZmMsCisgIDB4MTEsIDB4ZmEsCisgIDB4MjIsIDB4ZiwgMHg1LAorICAweDIyLCAweGYsIDB4NiwKKyAgMHgyMiwgMHhmLCAweDcsCisgIDB4MjIsIDB4ZiwgMHgzNCwKKyAgMHgyMiwgMHhmLCAweDM1LAorICAweDExLCAweGY1LAorICAweDEzLCAweGYsIDB4ZjAsIDB4NDAsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzYywKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDM4LAorICAweDEyLCAweDgzLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MzgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgzYSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGMyLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGMyLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTYsCisgIDB4MTMsIDB4ZiwgMHhmZSwgMHhiMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDgsCisgIDB4MjIsIDB4ZiwgMHhhMiwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGU2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhmLCAweDc3LAorICAweDExLCAweGM4LAorICAweDIyLCAweGQ5LCAweGQwLAorICAweDIyLCAweGQ5LCAweGUwLAorICAweDIyLCAweGQ5LCAweGUxLAorICAweDIyLCAweGQ5LCAweGU0LAorICAweDIyLCAweGQ5LCAweGU1LAorICAweDIyLCAweGQ5LCAweGU4LAorICAweDIyLCAweGQ5LCAweGU5LAorICAweDIyLCAweGQ5LCAweGVhLAorICAweDIyLCAweGQ5LCAweGViLAorICAweDIyLCAweGQ5LCAweGVjLAorICAweDIyLCAweGQ5LCAweGVkLAorICAweDIyLCAweGQ5LCAweGVlLAorICAweDIyLCAweGQ5LCAweGYwLAorICAweDIyLCAweGQ5LCAweGYxLAorICAweDIyLCAweGQ5LCAweGYyLAorICAweDIyLCAweGQ5LCAweGYzLAorICAweDIyLCAweGQ5LCAweGY0LAorICAweDIyLCAweGQ5LCAweGY1LAorICAweDIyLCAweGQ5LCAweGY2LAorICAweDIyLCAweGQ5LCAweGY3LAorICAweDIyLCAweGQ5LCAweGY4LAorICAweDIyLCAweGQ5LCAweGY5LAorICAweDIyLCAweGQ5LCAweGZhLAorICAweDIyLCAweGQ5LCAweGZiLAorICAweDIyLCAweGQ5LCAweGZjLAorICAweDIyLCAweGQ5LCAweGZkLAorICAweDIyLCAweGQ5LCAweGZlLAorICAweDIyLCAweGQ5LCAweGZmLAorICAweDEyLCAweGQ4LCAweGY4LCAweGMwLAorICAweDEyLCAweGRjLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHg4LAorICAweDEyLCAweGQ4LCAweGY4LCAweGUwLAorICAweDEyLCAweGRjLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDEwLAorICAweDEyLCAweGRkLCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDksIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MzAsCisgIDB4MTIsIDB4ZDksIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhjOCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTAsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhlOCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDI4LAorICAweDIyLCAweGRmLCAweGUwLAorICAweDEyLCAweGRmLCAweDM4LCAweDIwLAorICAweDEyLCAweGRmLCAweGY4LCAweGYwLAorICAweDEyLCAweGRmLCAweDM4LCAweDMwLAorICAweDIyLCAweGQ5LCAweGUwLAorICAweDMzLCAweDliLCAweGRiLCAweGUyLAorICAweDMzLCAweDliLCAweGRiLCAweGUzLAorICAweDExLCAweDliLAorICAweDIyLCAweGRiLCAweGUyLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGM4LAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQ4LAorICAweDEyLCAweGRiLCAweGY4LCAweGMwLAorICAweDEyLCAweGRiLCAweGY4LCAweGM4LAorICAweDEyLCAweGRiLCAweGY4LCAweGQwLAorICAweDEyLCAweGRiLCAweGY4LCAweGQ4LAorICAweDEyLCAweGQ4LCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhkZSwgMHhkOSwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDMwLAorICAweDEyLCAweGRhLCAweDM4LCAweDMwLAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRlLCAweDM4LCAweDMwLAorICAweDEyLCAweGRlLCAweGY4LCAweGY4LAorICAweDEyLCAweGQ4LCAweGY4LCAweGY4LAorICAweDEyLCAweGRjLCAweGY4LCAweGY4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZGEsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZGUsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGRhLCAweDM4LCAweDE4LAorICAweDEyLCAweGRmLCAweDM4LCAwLAorICAweDEyLCAweGRiLCAweDM4LCAwLAorICAweDEyLCAweGRmLCAweDM4LCAweDI4LAorICAweDIyLCAweGQ5LCAweGY3LAorICAweDIyLCAweGRiLCAweGUzLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGQsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMHgyOCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHhkOSwgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAwLAorICAweDEyLCAweGRkLCAweGY4LCAweGUwLAorICAweDEyLCAweGRkLCAweDM4LCAweDIwLAorICAweDEyLCAweGRkLCAweGY4LCAweGU4LAorICAweDEyLCAweGRkLCAweDM4LCAweDMwLAorICAweDEyLCAweGRkLCAweDM4LCAweDM4LAorICAweDExLCAweGY0LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGFmLCAwLCAwLAorICAweDIsIDB4ZmQsIDB4NjksIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhlNCwKKyAgMHgxLCAweGZlLCAweGVjLAorICAweDIsIDB4ZmUsIDB4ZmUsIDB4MzgsIDAsCisgIDB4MSwgMHhmZSwgMHg2YywKKyAgMHgxMSwgMHhjZCwKKyAgMHgxMSwgMHhjYywKKyAgMHgyMiwgMHhmLCAweDgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGY4LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhjZiwKKyAgMHgxLCAweGYwLCAweDcwLAorICAweDEyLCAweGYsIDB4ZjAsIDB4ODAsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgxMSwgMHhlMywKKyAgMHgxMSwgMHhlYiwKKyAgMHgxMSwgMHhlOSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyMCwKKyAgMHgxMSwgMHhlYSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHg5ZiwKKyAgMHgyMywgMHhmLCAweDIsIDAsIDAsCisgIDB4MTIsIDB4OGQsIDAsIDAsCisgIDB4MTEsIDB4YzksCisgIDB4MjMsIDB4ZiwgMHhiNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzAsCisgIDB4MTEsIDB4ZjAsCisgIDB4MSwgMHhmZSwgMHhhYywKKyAgMHgxMSwgMHhlMiwKKyAgMHgxMSwgMHhlMSwKKyAgMHgxMSwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ODgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGM2LCAweDM4LCAwLAorICAweDEsIDB4ZjAsIDB4YjAsCisgIDB4MSwgMHhmZSwgMHhhMCwKKyAgMHgxLCAweGZlLCAweGEyLAorICAweDIzLCAweGYsIDB4MjAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIxLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjMsIDB4YzAsIDB4YzAsCisgIDB4MTIsIDB4OGMsIDAsIDAsCisgIDB4MTIsIDB4OGUsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNCwKKyAgMHgyMywgMHhmLCAweGJlLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI3LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmMywgMHg5MCwKKyAgMHgxMSwgMHg5MCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGI4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHg4LAorICAweDEsIDB4ZmUsIDB4YywKKyAgMHgxLCAweGZlLCAweGU2LAorICAweDEsIDB4ZmUsIDB4ZWUsCisgIDB4MSwgMHhmZSwgMHg2ZSwKKyAgMHgxMiwgMHg4ZiwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHg4ZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgxLAorICAweDExLCAweDlkLAorICAweDEyLCAweGZmLCAweGY4LCAweGYwLAorICAweDEyLCAweGZmLCAweDM4LCAweDMwLAorICAweDEsIDB4ZjgsIDB4NTAsCisgIDB4MSwgMHhmOCwgMHg1OCwKKyAgMHgxLCAweGZkLCAweDY4LAorICAweDEsIDB4ZTcsIDB4NiwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgwLAorICAweDExLCAweDljLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDE4LAorICAweDIyLCAweGYsIDB4MzIsCisgIDB4MjIsIDB4ZiwgMHgzMywKKyAgMHgyMiwgMHhmLCAweDMxLAorICAweDExLCAweGMzLAorICAweDExLCAweGMyLAorICAweDExLCAweGNiLAorICAweDExLCAweGNhLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YWEsCisgIDB4MTEsIDB4OWUsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgxOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDFhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MWMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDE4LAorICAweDEsIDB4ZmUsIDB4YWUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhNSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGFkLCAwLCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjMSwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzIsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMzLAorICAweDMzLCAweGYsIDB4MSwgMHhjNCwKKyAgMHgyMywgMHhmLCAweDc4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjOCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzksCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZjksCisgIDB4MTEsIDB4ZmQsCisgIDB4MTEsIDB4ZmIsCisgIDB4MSwgMHhmZSwgMHhhYSwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHgyOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDJhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MmMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4ODQsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAwLAorICAweDIyLCAweGYsIDB4YiwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZiwgMHg5LAorICAweDIzLCAweGYsIDB4ZCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMHgxZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDMwLAorICAweDEzLCAweGYsIDB4ZmUsIDB4YzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4NiwgMCwgMCwKKyAgMHgxLCAweGY4LCAweDkwLAorICAweDExLCAweGQ3LAorICAweDIsIDB4ZmUsIDB4MzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgzMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDM0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhmLCAweDc3LAorICAweDM0LCAweDY2LCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgxOCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDExLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDI4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJkLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDM3LAorICAweDM0LCAweDY2LCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHg1MCwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU3LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVjLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2QsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdlLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGM1LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGQ2LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhkNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUwLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU3LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWUsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhmMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhmNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg1LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg4LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDksIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHhiLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhlOCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGYwLAorICAweDMzLCAweGYsIDB4YWUsIDB4ZjgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGYsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyOSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2YsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YiwgMCwgMCwKKyAgMHgxLCAweGU3LCAweDcsCit9OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTRjMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA2NjhhY2NmMzIyZmQ3MTg1ZTI3M2JmZDUwYjg0MzIwZTcxZDlkZTVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxMCBBcHIgMjAxNSAwMDoyOToxOCArMDIwMAorU3ViamVjdDogW1BBVENIXSBlbGZfZ2V0YXJzeW06IFNpbGVuY2UgLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkIGZhbHNlCisgcG9zaXRpdmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBsaWJlbGYvZWxmX2dldGFyc3ltLmMgfCA5ICsrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJlbGYvZWxmX2dldGFyc3ltLmMgYi9saWJlbGYvZWxmX2dldGFyc3ltLmMKK2luZGV4IGQwYmIyOGEuLjA4OTU0ZDIgMTAwNjQ0CistLS0gYS9saWJlbGYvZWxmX2dldGFyc3ltLmMKKysrKyBiL2xpYmVsZi9lbGZfZ2V0YXJzeW0uYworQEAgLTE2NSw4ICsxNjUsMTMgQEAgZWxmX2dldGFyc3ltIChlbGYsIHB0cikKKyAgICAgICBpbnQgdyA9IGluZGV4NjRfcCA/IDggOiA0OworIAorICAgICAgIC8qIFdlIGhhdmUgYW4gYXJjaGl2ZS4gIFRoZSBmaXJzdCB3b3JkIGluIHRoZXJlIGlzIHRoZSBudW1iZXIgb2YKKy0JIGVudHJpZXMgaW4gdGhlIHRhYmxlLiAgKi8KKy0gICAgICB1aW50NjRfdCBuOworKwkgZW50cmllcyBpbiB0aGUgdGFibGUuCisrCSBTZXQgdG8gU0laRV9NQVgganVzdCB0byBzaWxlbmNlIC1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZAorKwkgZWxmX2dldGFyc3ltLmM6MjkwOjk6IGVycm9yOiAnbicgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uCisrCSBUaGUgcmVhZF9udW1iZXJfZW50cmllcyBmdW5jdGlvbiBkb2Vzbid0IGluaXRpYWxpemUgbiBvbmx5IHdoZW4gcmV0dXJuaW5nCisrCSAtMSB3aGljaCBpbiB0dXJuIGVuc3VyZXMgdG8ganVtcCBvdmVyIHVzYWdlIG9mIHRoaXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KKysJICovCisrICAgICAgdWludDY0X3QgbiA9IFNJWkVfTUFYOworICAgICAgIHNpemVfdCBvZmYgPSBlbGYtPnN0YXJ0X29mZnNldCArIFNBUk1BRyArIHNpemVvZiAoc3RydWN0IGFyX2hkcik7CisgICAgICAgaWYgKHJlYWRfbnVtYmVyX2VudHJpZXMgKCZuLCBlbGYsICZvZmYsIGluZGV4NjRfcCkgPCAwKQorIAl7CistLSAKKzIuMy41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTIzYmY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1tQQVRDSF0gZml4IGEgc3RhY2stdXNhZ2Ugd2FybmluZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbm90IHVzZSBhIHZhcmlhYmxlIHRvIGFzIGEgYXJyYXkgc2l6ZSwgb3RoZXJ3aXNlIHRoZSB3YXJuaW5nIHRvIGVycm9yIHRoYXQKK3N0YWNrIHVzYWdlIG1pZ2h0IGJlIHVuYm91bmRlZCBbLVdlcnJvcj1zdGFjay11c2FnZT1dIHdpbGwgaGFwcGVuCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL3BwY19pbml0cmVnLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jIGIvYmFja2VuZHMvcHBjX2luaXRyZWcuYworaW5kZXggNjRmNTM3OS4uNTJkZGUzZSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL3BwY19pbml0cmVnLmMKKysrKyBiL2JhY2tlbmRzL3BwY19pbml0cmVnLmMKK0BAIC05Myw3ICs5Myw3IEBAIHBwY19zZXRfaW5pdGlhbF9yZWdpc3RlcnNfdGlkIChwaWRfdCB0aWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorIAlyZXR1cm4gZmFsc2U7CisgICAgIH0KKyAgIGNvbnN0IHNpemVfdCBncHJzID0gc2l6ZW9mICh1c2VyX3JlZ3Muci5ncHIpIC8gc2l6ZW9mICgqdXNlcl9yZWdzLnIuZ3ByKTsKKy0gIER3YXJmX1dvcmQgZHdhcmZfcmVnc1tncHJzXTsKKysgIER3YXJmX1dvcmQgZHdhcmZfcmVnc1tzaXplb2YgKHVzZXJfcmVncy5yLmdwcikgLyBzaXplb2YgKCp1c2VyX3JlZ3Muci5ncHIpXTsKKyAgIGZvciAodW5zaWduZWQgZ3ByID0gMDsgZ3ByIDwgZ3ByczsgZ3ByKyspCisgICAgIGR3YXJmX3JlZ3NbZ3ByXSA9IHVzZXJfcmVncy5yLmdwcltncHJdOworICAgaWYgKCEgc2V0ZnVuYyAoMCwgZ3BycywgZHdhcmZfcmVncywgYXJnKSkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1yZW1vdmUtdGhlLXVubmVlZC1jaGVja2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlOTJkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRGlzYWJsZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCB0aGUgZGVwZW5kZW5jZSB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGQtbmF0aXZlIGJ1aWxkaW5nIGZhaWwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2ljb252Lm00IHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL200L2ljb252Lm00IGIvbTQvaWNvbnYubTQKK2luZGV4IGE1MDM2NDYuLjI5OWYxZWIgMTAwNjQ0CistLS0gYS9tNC9pY29udi5tNAorKysrIGIvbTQvaWNvbnYubTQKK0BAIC0xNTksNiArMTU5LDcgQEAgaW50IG1haW4gKCkKKyAgICAgICB9CisgICB9CisgI2VuZGlmCisrI2lmIDAKKyAgIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcworICAgICAgcHJvdmlkZWQuICAqLworICAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworQEAgLTE3MCw2ICsxNzEsNyBAQCBpbnQgbWFpbiAoKQorICAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovCisgICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQorICAgICByZXN1bHQgfD0gMTY7CisrI2VuZGlmCisgICByZXR1cm4gcmVzdWx0OworIH1dXSldLAorICAgICAgICAgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzXSwKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3YzRlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw2MjUgQEAKK0Zyb20gMGRiMTY4N2VlZTBiNGQxNmNjYmM0MGRiNWEwNmI1NzRmY2E2NjE0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTQgTm92IDIwMTQgMTU6MjU6NDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmViYXNlIGFybV9iYWNrZW5kLmRpZmYgZnJvbSAwLjE1OSB0byAwLjE2MAorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9hcm1faW5pdC5jICAgICAgICAgICAgICAgICB8ICAxOCArKysrLQorIGJhY2tlbmRzL2FybV9yZWdzLmMgICAgICAgICAgICAgICAgIHwgMTMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGJhY2tlbmRzL2FybV9yZXR2YWwuYyAgICAgICAgICAgICAgIHwgIDQ0ICsrKysrKysrKysrLQorIGJhY2tlbmRzL2xpYmVibF9hcm0uaCAgICAgICAgICAgICAgIHwgICA5ICsrKworIGxpYmVsZi9lbGYuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExICsrKworIHRlc3RzL3J1bi1hZGRyY2ZpLnNoICAgICAgICAgICAgICAgIHwgIDkzICsrKysrKysrKysrKysrKysrKysrKysrKy0KKyB0ZXN0cy9ydW4tYWxscmVncy5zaCAgICAgICAgICAgICAgICB8ICA5NSArKysrKysrKysrKysrKysrKysrKysrKysrLQorIHRlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoIHwgIDExICsrLQorIDggZmlsZXMgY2hhbmdlZCwgNDAxIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBiYWNrZW5kcy9saWJlYmxfYXJtLmgKKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9pbml0LmMgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitpbmRleCAzMjgzYzk3Li44YjU3ZDNmIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvYXJtX2luaXQuYworKysrIGIvYmFja2VuZHMvYXJtX2luaXQuYworQEAgLTM1LDIxICszNSwzMiBAQAorICNkZWZpbmUgUkVMT0NfUFJFRklYCVJfQVJNXworICNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisgCisrI2luY2x1ZGUgImxpYmVibF9hcm0uaCIKKysKKyAvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBhcm1fcmVsb2MuZGVmLiAgKi8KKyAjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisgCisgCisgY29uc3QgY2hhciAqCisgYXJtX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorLSAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWxmICplbGY7CisgICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisgICAgICBFYmwgKmVoOworICAgICAgc2l6ZV90IGVobGVuOworIHsKKysgIGludCBzb2Z0X2Zsb2F0ID0gMDsKKysKKyAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworICAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorICAgICByZXR1cm4gTlVMTDsKKyAKKysgIGlmIChlbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHIgJiYgKGVoZHItPmVfZmxhZ3MgJiBFRl9BUk1fU09GVF9GTE9BVCkpCisrICAgICAgc29mdF9mbG9hdCA9IDE7CisrICB9CisrCisgICAvKiBXZSBoYW5kbGUgaXQuICAqLworICAgZWgtPm5hbWUgPSAiQVJNIjsKKyAgIGFybV9pbml0X3JlbG9jIChlaCk7CitAQCAtNjEsNyArNzIsMTAgQEAgYXJtX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorICAgSE9PSyAoZWgsIGNvcmVfbm90ZSk7CisgICBIT09LIChlaCwgYXV4dl9pbmZvKTsKKyAgIEhPT0sgKGVoLCBjaGVja19vYmplY3RfYXR0cmlidXRlKTsKKy0gIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgaWYgKHNvZnRfZmxvYXQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX3NvZnQ7CisrICBlbHNlCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQ7CisgICBIT09LIChlaCwgYWJpX2NmaSk7CisgICBIT09LIChlaCwgY2hlY2tfcmVsb2NfdGFyZ2V0X3R5cGUpOworIAorZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9yZWdzLmMgYi9iYWNrZW5kcy9hcm1fcmVncy5jCitpbmRleCAyMWM1YWQzLi40ZWUxMDM5IDEwMDY0NAorLS0tIGEvYmFja2VuZHMvYXJtX3JlZ3MuYworKysrIGIvYmFja2VuZHMvYXJtX3JlZ3MuYworQEAgLTMxLDYgKzMxLDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgCisgI2RlZmluZSBCQUNLRU5EIGFybV8KK0BAIC03Niw2ICs3Nyw5IEBAIGFybV9yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgYnJlYWs7CisgCisgICAgIGNhc2UgMTYgKyAwIC4uLiAxNiArIDc6CisrICAgICAgLyogQUFEV0FSRiBzYXlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ2lzdGVycyBpbiB0aGF0IHJhbmdlLAorKyAgICAgICAqIGJ1dCBnY2MgbWFwcyBGUEEgcmVnaXN0ZXJzIGhlcmUKKysgICAgICAgKi8KKyAgICAgICByZWdubyArPSA5NiAtIDE2OworICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgIGNhc2UgOTYgKyAwIC4uLiA5NiArIDc6CitAQCAtODcsMTEgKzkxLDEzOSBAQCBhcm1fcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgIG5hbWVsZW4gPSAyOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIDY0ICsgMCAuLi4gNjQgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSByZWdubyAtIDY0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDY0ICsgMTAgLi4uIDY0ICsgMzE6CisrICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgIG5hbWVbMF0gPSAncyc7CisrICAgICAgbmFtZVsxXSA9IChyZWdubyAtIDY0KSAvIDEwICsgJzAnOworKyAgICAgIG5hbWVbMl0gPSAocmVnbm8gLSA2NCkgJSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMDQgKyAwIC4uLiAxMDQgKyA3OgorKyAgICAgIC8qIFhYWCBUT0RPOgorKyAgICAgICAqIFRoaXMgY2FuIGJlIGVpdGhlciBpbnRlbCB3aXJlbGVzcyBNTVggZ2VuZXJhbCBwdXJwb3NlL2NvbnRyb2wKKysgICAgICAgKiByZWdpc3RlcnMgb3IgeHNjYWxlIGFjY3VtdWxhdG9yLCB3aGljaCBoYXZlIGRpZmZlcmVudCB1c2FnZS4KKysgICAgICAgKiBXZSBvbmx5IGhhdmUgdGhlIGludGVsIHdpcmVsZXNzIE1NWCBoZXJlIG5vdy4KKysgICAgICAgKiBUaGUgbmFtZSBuZWVkcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgeHNjYWxlIGFjY3VtdWxhdG9yIHRvby4gKi8KKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbWVtY3B5KG5hbWUsICJ3Y2dyIiwgNCk7CisrICAgICAgbmFtZVs0XSA9IHJlZ25vIC0gMTA0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSA1OworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDAgLi4uIDExMiArIDk6CisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDY0OworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdyJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxMTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTEyICsgMTAgLi4uIDExMiArIDE1OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9ICcxJzsKKysgICAgICBuYW1lWzNdID0gcmVnbm8gLSAxMTIgLSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNDsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAxMjg6CisrICAgICAgKnNldG5hbWUgPSAic3RhdGUiOworICAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworICAgICAgIHJldHVybiBzdHBjcHkgKG5hbWUsICJzcHNyIikgKyAxIC0gbmFtZTsKKyAKKysgICAgY2FzZSAxMjk6CisrICAgICAgKnNldG5hbWUgPSAic3RhdGUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfZmlxIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzA6CisrICAgICAgKnNldG5hbWUgPSAic3RhdGUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfaXJxIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzE6CisrICAgICAgKnNldG5hbWUgPSAic3RhdGUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfYWJ0IikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzI6CisrICAgICAgKnNldG5hbWUgPSAic3RhdGUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfdW5kIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzM6CisrICAgICAgKnNldG5hbWUgPSAic3RhdGUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3Jfc3ZjIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxNDQgLi4uIDE1MDoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3VzciIsIHJlZ25vIC0gMTQ0ICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1MSAuLi4gMTU3OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfZmlxIiwgcmVnbm8gLSAxNTEgKyA4KSArIDE7CisrCisrICAgIGNhc2UgMTU4IC4uLiAxNTk6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9pcnEiLCByZWdubyAtIDE1OCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYwIC4uLiAxNjE6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9hYnQiLCByZWdubyAtIDE2MCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYyIC4uLiAxNjM6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91bmQiLCByZWdubyAtIDE2MiArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTY0IC4uLiAxNjU6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9zdmMiLCByZWdubyAtIDE2NCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTkyIC4uLiAxOTk6CisrICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ2MnOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAtIDE5MiArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAyNTYgKyAwIC4uLiAyNTYgKyA5OgorKyAgICAgIC8qIFhYWCBUT0RPOiBOZW9uIGFsc28gdXNlcyB0aG9zZSByZWdpc3RlcnMgYW5kIGNhbiBjb250YWluCisrICAgICAgICogYm90aCBmbG9hdCBhbmQgaW50ZWdlcnMgKi8KKyAgICAgICAqc2V0bmFtZSA9ICJWRlAiOworICAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworICAgICAgICpiaXRzID0gNjQ7CitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX3JldHZhbC5jIGIvYmFja2VuZHMvYXJtX3JldHZhbC5jCitpbmRleCA3YWNlZDc0Li4wNTIxMzJlIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvYXJtX3JldHZhbC5jCisrKysgYi9iYWNrZW5kcy9hcm1fcmV0dmFsLmMKK0BAIC00OCw2ICs0OCwxMyBAQCBzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKyAjZGVmaW5lIG5sb2NfaW50cmVnCTEKKyAjZGVmaW5lIG5sb2NfaW50cmVncyhuKQkoMiAqIChuKSkKKyAKKysvKiBmMSAgKi8gLyogWFhYIFRPRE86IGYwIGNhbiBhbHNvIGhhdmUgbnVtYmVyIDk2IGlmIHByb2dyYW0gd2FzIGNvbXBpbGVkIHdpdGggLW1hYmk9YWFwY3MgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMTYgfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrCisgLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisgICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuICBCdXQsIHRoZSBjb21waWxlcgorICAgIGhlbHBmdWxseSByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3BhY2UgaW4gcjAuICAqLworQEAgLTU4LDggKzY1LDkgQEAgc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisgI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisgCisgCistaW50CistYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3N0YXRpYyBpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwLAorKwkJICAgICAgICAgICAgaW50IHNvZnRfZmxvYXQpCisgeworICAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKyAgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworQEAgLTk4LDE0ICsxMDYsMzEgQEAgYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorIAkgICAgZWxzZQorIAkgICAgICByZXR1cm4gLTE7CisgCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCXsKKysJICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJICAgICAgICAgICAgICAgICAgICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICByZXR1cm4gLTE7CisrCisrCSAgaWYgKChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpICYmICFzb2Z0X2Zsb2F0KQorKwkgICAgeworKwkgICAgICAqbG9jcCA9IGxvY19mcHJlZzsKKysJICAgICAgaWYgKHNpemUgPD0gOCkKKysJCXJldHVybiBubG9jX2ZwcmVnOworKwkgICAgICBnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgIH0KKysJfQorIAlpZiAoc2l6ZSA8PSAxNikKKyAJICB7CisgCSAgaW50cmVnOgorIAkgICAgKmxvY3AgPSBsb2NfaW50cmVnOworIAkgICAgcmV0dXJuIHNpemUgPD0gNCA/IG5sb2NfaW50cmVnIDogbmxvY19pbnRyZWdzICgoc2l6ZSArIDMpIC8gNCk7CisgCSAgfQorKwkgIC8qIGZhbGwgdGhyb3VnaC4gKi8KKyAKKyAgICAgICBhZ2dyZWdhdGU6CisrCS8qIFhYWCBUT0RPIHNvbWV0aW1lcyBhZ2dyZWdhdGVzIGFyZSByZXR1cm5lZCBpbiByMCAoLW1hYmk9YWFwY3MpICovCisgCSpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKyAJcmV0dXJuIG5sb2NfYWdncmVnYXRlOworICAgICAgIH0KK0BAIC0xMjUsMyArMTUwLDE4IEBAIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyAgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisgICByZXR1cm4gLTI7CisgfQorKworKy8qIHJldHVybiBsb2NhdGlvbiBmb3IgLW1hYmk9YXBjcy1nbnUgLW1zb2Z0LWZsb2F0ICovCisraW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0IChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgIHJldHVybiBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDEpOworK30KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1taGFyZC1mbG9hdCAoY3VycmVudCBkZWZhdWx0KSAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAwKTsKKyt9CisrCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvbGliZWJsX2FybS5oIGIvYmFja2VuZHMvbGliZWJsX2FybS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzAwNzcwYworLS0tIC9kZXYvbnVsbAorKysrIGIvYmFja2VuZHMvbGliZWJsX2FybS5oCitAQCAtMCwwICsxLDkgQEAKKysjaWZuZGVmIF9MSUJFQkxfQVJNX0gKKysjZGVmaW5lIF9MSUJFQkxfQVJNX0ggMQorKworKyNpbmNsdWRlIDxsaWJkdy5oPgorKworK2V4dGVybiBpbnQgYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0KER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworK2V4dGVybiBpbnQgYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkKER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGYuaCBiL2xpYmVsZi9lbGYuaAoraW5kZXggYTNjY2UzZS4uMDg5MTY3NCAxMDA2NDQKKy0tLSBhL2xpYmVsZi9lbGYuaAorKysrIGIvbGliZWxmL2VsZi5oCitAQCAtMjM0Niw2ICsyMzQ2LDkgQEAgdHlwZWRlZiBFbGYzMl9BZGRyIEVsZjMyX0NvbmZsaWN0OworICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNAkweDA0MDAwMDAwCisgI2RlZmluZSBFRl9BUk1fRUFCSV9WRVI1CTB4MDUwMDAwMDAKKyAKKysvKiBFSV9PU0FCSSB2YWx1ZXMgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0FSTV9BRUFCSSAgICA2NCAgICAgIC8qIENvbnRhaW5zIHN5bWJvbCB2ZXJzaW9uaW5nLiAqLworKworIC8qIEFkZGl0aW9uYWwgc3ltYm9sIHR5cGVzIGZvciBUaHVtYi4gICovCisgI2RlZmluZSBTVFRfQVJNX1RGVU5DCQlTVFRfTE9QUk9DIC8qIEEgVGh1bWIgZnVuY3Rpb24uICAqLworICNkZWZpbmUgU1RUX0FSTV8xNkJJVAkJU1RUX0hJUFJPQyAvKiBBIFRodW1iIGxhYmVsLiAgKi8KK0BAIC0yMzYzLDEyICsyMzY2LDE5IEBAIHR5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKyAKKyAvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgUGhkciBwX3R5cGUgZmllbGQuICAqLworICNkZWZpbmUgUFRfQVJNX0VYSURYCQkoUFRfTE9QUk9DICsgMSkJLyogQVJNIHVud2luZCBzZWdtZW50LiAgKi8KKysjZGVmaW5lIFBUX0FSTV9VTldJTkQJCVBUX0FSTV9FWElEWAorIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBTaGRyIHNoX3R5cGUgZmllbGQuICAqLworICNkZWZpbmUgU0hUX0FSTV9FWElEWAkJKFNIVF9MT1BST0MgKyAxKSAvKiBBUk0gdW53aW5kIHNlY3Rpb24uICAqLworICNkZWZpbmUgU0hUX0FSTV9QUkVFTVBUTUFQCShTSFRfTE9QUk9DICsgMikgLyogUHJlZW1wdGlvbiBkZXRhaWxzLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fQVRUUklCVVRFUwkoU0hUX0xPUFJPQyArIDMpIC8qIEFSTSBhdHRyaWJ1dGVzIHNlY3Rpb24uICAqLworIAorKy8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBEeW4gZF90YWcgZmllbGQuICAqLworKyNkZWZpbmUgRFRfQVJNX1JFU0VSVkVEMQkoRFRfTE9QUk9DICsgMCkKKysjZGVmaW5lIERUX0FSTV9TWU1UQUJTWgkJKERUX0xPUFJPQyArIDEpCisrI2RlZmluZSBEVF9BUk1fUFJFRU1UTUFCCShEVF9MT1BST0MgKyAyKQorKyNkZWZpbmUgRFRfQVJNX1JFU0VSVkVEMgkoRFRfTE9QUk9DICsgMykKKysjZGVmaW5lIERUX0FSTV9OVU0JCTQKKyAKKyAvKiBBQXJjaDY0IHJlbG9jcy4gICovCisgCitAQCAtMjY0Nyw2ICsyNjU3LDcgQEAgdHlwZWRlZiBFbGYzMl9BZGRyIEVsZjMyX0NvbmZsaWN0OworIAkJCQkJICAgVExTIGJsb2NrIChMRFIsIFNUUikuICAqLworICNkZWZpbmUgUl9BUk1fVExTX0lFMTJHUAkxMTEJLyogMTIgYml0IEdPVCBlbnRyeSByZWxhdGl2ZQorIAkJCQkJICAgdG8gR09UIG9yaWdpbiAoTERSKS4gICovCisrLyogMTEyIC0gMTI3IHByaXZhdGUgcmFuZ2UgKi8KKyAjZGVmaW5lIFJfQVJNX01FX1RPTwkJMTI4CS8qIE9ic29sZXRlLiAgKi8KKyAjZGVmaW5lIFJfQVJNX1RITV9UTFNfREVTQ1NFUQkxMjkKKyAjZGVmaW5lIFJfQVJNX1RITV9UTFNfREVTQ1NFUTE2CTEyOQorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoIGIvdGVzdHMvcnVuLWFkZHJjZmkuc2gKK2luZGV4IDVkMzMyNDYuLjc4NDY0YTggMTAwNzU1CistLS0gYS90ZXN0cy9ydW4tYWRkcmNmaS5zaAorKysrIGIvdGVzdHMvcnVuLWFkZHJjZmkuc2gKK0BAIC0yNTMwLDYgKzI1MzAsMzggQEAgZHdhcmZfY2ZpX2FkZHJmcmFtZSAoLmVoX2ZyYW1lKTogbm8gbWF0Y2hpbmcgYWRkcmVzcyByYW5nZQorIAlGUEEgcmVnMjEgKGY1KTogdW5kZWZpbmVkCisgCUZQQSByZWcyMiAoZjYpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzIzIChmNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjQgKHMwKTogdW5kZWZpbmVkCisrCVZGUCByZWc2NSAoczEpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY2IChzMik6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjcgKHMzKTogdW5kZWZpbmVkCisrCVZGUCByZWc2OCAoczQpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY5IChzNSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzAgKHM2KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MSAoczcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzcyIChzOCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzMgKHM5KTogdW5kZWZpbmVkCisrCVZGUCByZWc3NCAoczEwKTogdW5kZWZpbmVkCisrCVZGUCByZWc3NSAoczExKTogdW5kZWZpbmVkCisrCVZGUCByZWc3NiAoczEyKTogdW5kZWZpbmVkCisrCVZGUCByZWc3NyAoczEzKTogdW5kZWZpbmVkCisrCVZGUCByZWc3OCAoczE0KTogdW5kZWZpbmVkCisrCVZGUCByZWc3OSAoczE1KTogdW5kZWZpbmVkCisrCVZGUCByZWc4MCAoczE2KTogdW5kZWZpbmVkCisrCVZGUCByZWc4MSAoczE3KTogdW5kZWZpbmVkCisrCVZGUCByZWc4MiAoczE4KTogdW5kZWZpbmVkCisrCVZGUCByZWc4MyAoczE5KTogdW5kZWZpbmVkCisrCVZGUCByZWc4NCAoczIwKTogdW5kZWZpbmVkCisrCVZGUCByZWc4NSAoczIxKTogdW5kZWZpbmVkCisrCVZGUCByZWc4NiAoczIyKTogdW5kZWZpbmVkCisrCVZGUCByZWc4NyAoczIzKTogdW5kZWZpbmVkCisrCVZGUCByZWc4OCAoczI0KTogdW5kZWZpbmVkCisrCVZGUCByZWc4OSAoczI1KTogdW5kZWZpbmVkCisrCVZGUCByZWc5MCAoczI2KTogdW5kZWZpbmVkCisrCVZGUCByZWc5MSAoczI3KTogdW5kZWZpbmVkCisrCVZGUCByZWc5MiAoczI4KTogdW5kZWZpbmVkCisrCVZGUCByZWc5MyAoczI5KTogdW5kZWZpbmVkCisrCVZGUCByZWc5NCAoczMwKTogdW5kZWZpbmVkCisrCVZGUCByZWc5NSAoczMxKTogdW5kZWZpbmVkCisgCUZQQSByZWc5NiAoZjApOiB1bmRlZmluZWQKKyAJRlBBIHJlZzk3IChmMSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnOTggKGYyKTogdW5kZWZpbmVkCitAQCAtMjUzOCw3ICsyNTcwLDY2IEBAIGR3YXJmX2NmaV9hZGRyZnJhbWUgKC5laF9mcmFtZSk6IG5vIG1hdGNoaW5nIGFkZHJlc3MgcmFuZ2UKKyAJRlBBIHJlZzEwMSAoZjUpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzEwMiAoZjYpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzEwMyAoZjcpOiB1bmRlZmluZWQKKy0JaW50ZWdlciByZWcxMjggKHNwc3IpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEwNCAod2NncjApOiB1bmRlZmluZWQKKysJTU1YIHJlZzEwNSAod2NncjEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEwNiAod2NncjIpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEwNyAod2NncjMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEwOCAod2NncjQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEwOSAod2NncjUpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExMCAod2NncjYpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExMSAod2NncjcpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExMiAod3IwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTMgKHdyMSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE0ICh3cjIpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNSAod3IzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTYgKHdyNCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE3ICh3cjUpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExOCAod3I2KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTkgKHdyNyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIwICh3cjgpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyMSAod3I5KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjIgKHdyMTApOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyMyAod3IxMSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTI0ICh3cjEyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjUgKHdyMTMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNiAod3IxNCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTI3ICh3cjE1KTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEyOCAoc3Bzcik6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMjkgKHNwc3JfZmlxKTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEzMCAoc3Bzcl9pcnEpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMxIChzcHNyX2FidCk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzIgKHNwc3JfdW5kKTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEzMyAoc3Bzcl9zdmMpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDQgKHI4X3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NSAocjlfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ2IChyMTBfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ3IChyMTFfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ4IChyMTJfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ5IChyMTNfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTUwIChyMTRfdXNyKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTUxIChyOF9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTIgKHI5X2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MyAocjEwX2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1NCAocjExX2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1NSAocjEyX2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1NiAocjEzX2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1NyAocjE0X2ZpcSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1OCAocjEzX2lycSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1OSAocjE0X2lycSk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE2MCAocjEzX2FidCk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE2MSAocjE0X2FidCk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE2MiAocjEzX3VuZCk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE2MyAocjE0X3VuZCk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE2NCAocjEzX3N2Yyk6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE2NSAocjE0X3N2Yyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTkyICh3YzApOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5MyAod2MxKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTQgKHdjMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk1ICh3YzMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NiAod2M0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTcgKHdjNSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk4ICh3YzYpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5OSAod2M3KTogdW5kZWZpbmVkCisgCVZGUCByZWcyNTYgKGQwKTogdW5kZWZpbmVkCisgCVZGUCByZWcyNTcgKGQxKTogdW5kZWZpbmVkCisgCVZGUCByZWcyNTggKGQyKTogdW5kZWZpbmVkCitkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLWFsbHJlZ3Muc2ggYi90ZXN0cy9ydW4tYWxscmVncy5zaAoraW5kZXggNmYzODYyZS4uMTM1NTdkNSAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi1hbGxyZWdzLnNoCisrKysgYi90ZXN0cy9ydW4tYWxscmVncy5zaAorQEAgLTI2NzEsNyArMjY3MSwyOCBAQCBpbnRlZ2VyIHJlZ2lzdGVyczoKKyAJIDEzOiBzcCAoc3ApLCBhZGRyZXNzIDMyIGJpdHMKKyAJIDE0OiBsciAobHIpLCBhZGRyZXNzIDMyIGJpdHMKKyAJIDE1OiBwYyAocGMpLCBhZGRyZXNzIDMyIGJpdHMKKy0JMTI4OiBzcHNyIChzcHNyKSwgdW5zaWduZWQgMzIgYml0cworKwkxNDQ6IHI4X3VzciAocjhfdXNyKSwgc2lnbmVkIDMyIGJpdHMKKysJMTQ1OiByOV91c3IgKHI5X3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE0NjogcjEwX3VzciAocjEwX3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE0NzogcjExX3VzciAocjExX3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE0ODogcjEyX3VzciAocjEyX3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE0OTogcjEzX3VzciAocjEzX3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE1MDogcjE0X3VzciAocjE0X3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE1MTogcjhfZmlxIChyOF9maXEpLCBzaWduZWQgMzIgYml0cworKwkxNTI6IHI5X2ZpcSAocjlfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUzOiByMTBfZmlxIChyMTBfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTU0OiByMTFfZmlxIChyMTFfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTU1OiByMTJfZmlxIChyMTJfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTU2OiByMTNfZmlxIChyMTNfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTU3OiByMTRfZmlxIChyMTRfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTU4OiByMTNfaXJxIChyMTNfaXJxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTU5OiByMTRfaXJxIChyMTRfaXJxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTYwOiByMTNfYWJ0IChyMTNfYWJ0KSwgc2lnbmVkIDMyIGJpdHMKKysJMTYxOiByMTRfYWJ0IChyMTRfYWJ0KSwgc2lnbmVkIDMyIGJpdHMKKysJMTYyOiByMTNfdW5kIChyMTNfdW5kKSwgc2lnbmVkIDMyIGJpdHMKKysJMTYzOiByMTRfdW5kIChyMTRfdW5kKSwgc2lnbmVkIDMyIGJpdHMKKysJMTY0OiByMTNfc3ZjIChyMTNfc3ZjKSwgc2lnbmVkIDMyIGJpdHMKKysJMTY1OiByMTRfc3ZjIChyMTRfc3ZjKSwgc2lnbmVkIDMyIGJpdHMKKyBGUEEgcmVnaXN0ZXJzOgorIAkgMTY6IGYwIChmMCksIGZsb2F0IDk2IGJpdHMKKyAJIDE3OiBmMSAoZjEpLCBmbG9hdCA5NiBiaXRzCitAQCAtMjY4OSw3ICsyNzEwLDcyIEBAIEZQQSByZWdpc3RlcnM6CisgCTEwMTogZjUgKGY1KSwgZmxvYXQgOTYgYml0cworIAkxMDI6IGY2IChmNiksIGZsb2F0IDk2IGJpdHMKKyAJMTAzOiBmNyAoZjcpLCBmbG9hdCA5NiBiaXRzCisrTU1YIHJlZ2lzdGVyczoKKysJMTA0OiB3Y2dyMCAod2NncjApLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwNTogd2NncjEgKHdjZ3IxKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDY6IHdjZ3IyICh3Y2dyMiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA3OiB3Y2dyMyAod2NncjMpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwODogd2NncjQgKHdjZ3I0KSwgdW5zaWduZWQgMzIgYml0cworKwkxMDk6IHdjZ3I1ICh3Y2dyNSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTEwOiB3Y2dyNiAod2NncjYpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTExMTogd2NncjcgKHdjZ3I3KSwgdW5zaWduZWQgMzIgYml0cworKwkxMTI6IHdyMCAod3IwKSwgdW5zaWduZWQgNjQgYml0cworKwkxMTM6IHdyMSAod3IxKSwgdW5zaWduZWQgNjQgYml0cworKwkxMTQ6IHdyMiAod3IyKSwgdW5zaWduZWQgNjQgYml0cworKwkxMTU6IHdyMyAod3IzKSwgdW5zaWduZWQgNjQgYml0cworKwkxMTY6IHdyNCAod3I0KSwgdW5zaWduZWQgNjQgYml0cworKwkxMTc6IHdyNSAod3I1KSwgdW5zaWduZWQgNjQgYml0cworKwkxMTg6IHdyNiAod3I2KSwgdW5zaWduZWQgNjQgYml0cworKwkxMTk6IHdyNyAod3I3KSwgdW5zaWduZWQgNjQgYml0cworKwkxMjA6IHdyOCAod3I4KSwgdW5zaWduZWQgNjQgYml0cworKwkxMjE6IHdyOSAod3I5KSwgdW5zaWduZWQgNjQgYml0cworKwkxMjI6IHdyMTAgKHdyMTApLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyMzogd3IxMSAod3IxMSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTI0OiB3cjEyICh3cjEyKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjU6IHdyMTMgKHdyMTMpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNjogd3IxNCAod3IxNCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTI3OiB3cjE1ICh3cjE1KSwgdW5zaWduZWQgNjQgYml0cworKwkxOTI6IHdjMCAod2MwKSwgdW5zaWduZWQgMzIgYml0cworKwkxOTM6IHdjMSAod2MxKSwgdW5zaWduZWQgMzIgYml0cworKwkxOTQ6IHdjMiAod2MyKSwgdW5zaWduZWQgMzIgYml0cworKwkxOTU6IHdjMyAod2MzKSwgdW5zaWduZWQgMzIgYml0cworKwkxOTY6IHdjNCAod2M0KSwgdW5zaWduZWQgMzIgYml0cworKwkxOTc6IHdjNSAod2M1KSwgdW5zaWduZWQgMzIgYml0cworKwkxOTg6IHdjNiAod2M2KSwgdW5zaWduZWQgMzIgYml0cworKwkxOTk6IHdjNyAod2M3KSwgdW5zaWduZWQgMzIgYml0cworIFZGUCByZWdpc3RlcnM6CisrCSA2NDogczAgKHMwKSwgZmxvYXQgMzIgYml0cworKwkgNjU6IHMxIChzMSksIGZsb2F0IDMyIGJpdHMKKysJIDY2OiBzMiAoczIpLCBmbG9hdCAzMiBiaXRzCisrCSA2NzogczMgKHMzKSwgZmxvYXQgMzIgYml0cworKwkgNjg6IHM0IChzNCksIGZsb2F0IDMyIGJpdHMKKysJIDY5OiBzNSAoczUpLCBmbG9hdCAzMiBiaXRzCisrCSA3MDogczYgKHM2KSwgZmxvYXQgMzIgYml0cworKwkgNzE6IHM3IChzNyksIGZsb2F0IDMyIGJpdHMKKysJIDcyOiBzOCAoczgpLCBmbG9hdCAzMiBiaXRzCisrCSA3MzogczkgKHM5KSwgZmxvYXQgMzIgYml0cworKwkgNzQ6IHMxMCAoczEwKSwgZmxvYXQgMzIgYml0cworKwkgNzU6IHMxMSAoczExKSwgZmxvYXQgMzIgYml0cworKwkgNzY6IHMxMiAoczEyKSwgZmxvYXQgMzIgYml0cworKwkgNzc6IHMxMyAoczEzKSwgZmxvYXQgMzIgYml0cworKwkgNzg6IHMxNCAoczE0KSwgZmxvYXQgMzIgYml0cworKwkgNzk6IHMxNSAoczE1KSwgZmxvYXQgMzIgYml0cworKwkgODA6IHMxNiAoczE2KSwgZmxvYXQgMzIgYml0cworKwkgODE6IHMxNyAoczE3KSwgZmxvYXQgMzIgYml0cworKwkgODI6IHMxOCAoczE4KSwgZmxvYXQgMzIgYml0cworKwkgODM6IHMxOSAoczE5KSwgZmxvYXQgMzIgYml0cworKwkgODQ6IHMyMCAoczIwKSwgZmxvYXQgMzIgYml0cworKwkgODU6IHMyMSAoczIxKSwgZmxvYXQgMzIgYml0cworKwkgODY6IHMyMiAoczIyKSwgZmxvYXQgMzIgYml0cworKwkgODc6IHMyMyAoczIzKSwgZmxvYXQgMzIgYml0cworKwkgODg6IHMyNCAoczI0KSwgZmxvYXQgMzIgYml0cworKwkgODk6IHMyNSAoczI1KSwgZmxvYXQgMzIgYml0cworKwkgOTA6IHMyNiAoczI2KSwgZmxvYXQgMzIgYml0cworKwkgOTE6IHMyNyAoczI3KSwgZmxvYXQgMzIgYml0cworKwkgOTI6IHMyOCAoczI4KSwgZmxvYXQgMzIgYml0cworKwkgOTM6IHMyOSAoczI5KSwgZmxvYXQgMzIgYml0cworKwkgOTQ6IHMzMCAoczMwKSwgZmxvYXQgMzIgYml0cworKwkgOTU6IHMzMSAoczMxKSwgZmxvYXQgMzIgYml0cworIAkyNTY6IGQwIChkMCksIGZsb2F0IDY0IGJpdHMKKyAJMjU3OiBkMSAoZDEpLCBmbG9hdCA2NCBiaXRzCisgCTI1ODogZDIgKGQyKSwgZmxvYXQgNjQgYml0cworQEAgLTI3MjIsNiArMjgwOCwxMyBAQCBWRlAgcmVnaXN0ZXJzOgorIAkyODU6IGQyOSAoZDI5KSwgZmxvYXQgNjQgYml0cworIAkyODY6IGQzMCAoZDMwKSwgZmxvYXQgNjQgYml0cworIAkyODc6IGQzMSAoZDMxKSwgZmxvYXQgNjQgYml0cworK3N0YXRlIHJlZ2lzdGVyczoKKysJMTI4OiBzcHNyIChzcHNyKSwgdW5zaWduZWQgMzIgYml0cworKwkxMjk6IHNwc3JfZmlxIChzcHNyX2ZpcSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTMwOiBzcHNyX2lycSAoc3Bzcl9pcnEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMTogc3Bzcl9hYnQgKHNwc3JfYWJ0KSwgdW5zaWduZWQgMzIgYml0cworKwkxMzI6IHNwc3JfdW5kIChzcHNyX3VuZCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTMzOiBzcHNyX3N2YyAoc3Bzcl9zdmMpLCB1bnNpZ25lZCAzMiBiaXRzCisgRU9GCisgCisgIyBTZWUgcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2ggZm9yIGluc3RydWN0aW9ucyB0byByZWdlbmVyYXRlCitkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2ggYi90ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaAoraW5kZXggMDFlNDU5NC4uOWE4YTM4MCAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoCisrKysgYi90ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaAorQEAgLTMwLDEyICszMCwxMSBAQCBOb3RlIHNlZ21lbnQgb2YgODkyIGJ5dGVzIGF0IG9mZnNldCAweDI3NDoKKyAgICAgcGlkOiAxMTA4NywgcHBpZDogMTEwNjMsIHBncnA6IDExMDg3LCBzaWQ6IDExMDYzCisgICAgIHV0aW1lOiAwLjAwMDAwMCwgc3RpbWU6IDAuMDEwMDAwLCBjdXRpbWU6IDAuMDAwMDAwLCBjc3RpbWU6IDAuMDAwMDAwCisgICAgIG9yaWdfcjA6IC0xLCBmcHZhbGlkOiAxCistICAgIHIwOiAgICAgICAgICAgICAxICByMTogICAtMTA5MTY3MjUwOCAgcjI6ICAgLTEwOTE2NzI1MDAKKy0gICAgcjM6ICAgICAgICAgICAgIDAgIHI0OiAgICAgICAgICAgICAwICByNTogICAgICAgICAgICAgMAorLSAgICByNjogICAgICAgICAzMzcyOCAgcjc6ICAgICAgICAgICAgIDAgIHI4OiAgICAgICAgICAgICAwCistICAgIHI5OiAgICAgICAgICAgICAwICByMTA6ICAtMTIyNTcwMzQ5NiAgcjExOiAgLTEwOTE2NzI4NDQKKy0gICAgcjEyOiAgICAgICAgICAgIDAgIHNwOiAgICAweGJlZWU2NGY0ICBscjogICAgMHhiNmRjM2Y0OAorLSAgICBwYzogICAgMHgwMDAwODUwMCAgc3BzcjogIDB4NjAwMDAwMTAKKysgICAgcjA6ICAgICAgICAgICAgMSAgcjE6ICAtMTA5MTY3MjUwOCAgcjI6ICAtMTA5MTY3MjUwMCAgcjM6ICAgICAgICAgICAgMAorKyAgICByNDogICAgICAgICAgICAwICByNTogICAgICAgICAgICAwICByNjogICAgICAgIDMzNzI4ICByNzogICAgICAgICAgICAwCisrICAgIHI4OiAgICAgICAgICAgIDAgIHI5OiAgICAgICAgICAgIDAgIHIxMDogLTEyMjU3MDM0OTYgIHIxMTogLTEwOTE2NzI4NDQKKysgICAgcjEyOiAgICAgICAgICAgMCAgc3A6ICAgMHhiZWVlNjRmNCAgbHI6ICAgMHhiNmRjM2Y0OCAgcGM6ICAgMHgwMDAwODUwMAorKyAgICBzcHNyOiAgMHg2MDAwMDAxMAorICAgQ09SRSAgICAgICAgICAgICAgICAgMTI0ICBQUlBTSU5GTworICAgICBzdGF0ZTogMCwgc25hbWU6IFIsIHpvbWI6IDAsIG5pY2U6IDAsIGZsYWc6IDB4MDA0MDA1MDAKKyAgICAgdWlkOiAwLCBnaWQ6IDAsIHBpZDogMTEwODcsIHBwaWQ6IDExMDYzLCBwZ3JwOiAxMTA4Nywgc2lkOiAxMTA2MworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fZnVuY192YWx1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTRkZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fZnVuY192YWx1ZS5wYXRjaApAQCAtMCwwICsxLDE2NSBAQAorRnJvbTogTWFyayBXaWVsYWFyZCA8bWp3QHJlZGhhdC5jb20+CitEYXRlOiBTdW4sIDE1IEp1biAyMDE0IDExOjMwOjM1ICswMjAwCitTdWJqZWN0OiBsaWJlYmw6IEFkZCBzeW1fZnVuY192YWx1ZSBob29rLgorCitUaGUgQVJNIEVBQkkgc2F5cyB0aGF0IHRoZSB6ZXJvIGJpdCBvZiBmdW5jdGlvbiBzeW1ib2wgc3RfdmFsdWUgaW5kaWNhdGVzCit3aGV0aGVyIHRoZSBzeW1ib2wgcG9pbnRzIHRvIGEgVEhVTUIgb3IgQVJNIGZ1bmN0aW9uLiBBZGQgYSBuZXcgZWJsIGhvb2sKK3RvIGFkanVzdCB0aGUgc3RfdmFsdWUgaW4gc3VjaCBhIGNhc2Ugc28gdGhhdCB3ZSBnZXQgdGhlIGFjdHVhbCB2YWx1ZSB0aGF0Cit0aGUgc3ltYm9sIHBvaW50cyB0by4gSXQgaXNuJ3QgZWFzaWx5IHBvc3NpYmxlIHRvIHJldXNlIHRoZSBleGlzdGluZworcmVzb2x2ZV9zeW1fdmFsdWUgZm9yIHRoaXMgcHVycG9zZSwgc28gd2UgZW5kIHVwIHdpdGggYW5vdGhlciBob29rIHRoYXQKK2NhbiBiZSB1c2VkIGZyb20gZHdmbF9tb2R1bGVfZ2V0c3ltIGFuZCBlbGZsaW50LgorCitSZWJhc2UgYXJtX2Z1bmNfdmFsdWUucGF0Y2ggZnJvbSAwLjE1OSB0byAwLjE2MAorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvYXJtX2luaXQuYyAgICAgICAgICB8ICAgIDEgKworIGJhY2tlbmRzL2FybV9zeW1ib2wuYyAgICAgICAgfCAgICA4ICsrKysrKysrCisgbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYyB8ICAgIDIgKy0KKyBsaWJlYmwvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgICAgMyArKy0KKyBsaWJlYmwvZWJsLWhvb2tzLmggICAgICAgICAgIHwgICAgMyArKysKKyBsaWJlYmwvZWJsc3ltZnVuY3ZhbC5jICAgICAgIHwgICA0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWJlYmwvbGliZWJsLmggICAgICAgICAgICAgIHwgICAxMSArKysrKysrKysrKworIDcgZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9pbml0LmMgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitpbmRleCA3MTcxMTg2Li45ZjAzNjMwIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvYXJtX2luaXQuYworKysrIGIvYmFja2VuZHMvYXJtX2luaXQuYworQEAgLTc4LDYgKzc4LDcgQEAgYXJtX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorICAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkOworICAgSE9PSyAoZWgsIGFiaV9jZmkpOworICAgSE9PSyAoZWgsIGNoZWNrX3JlbG9jX3RhcmdldF90eXBlKTsKKysgIEhPT0sgKGVoLCBzeW1fZnVuY192YWx1ZSk7CisgICBIT09LIChlaCwgc3ltYm9sX3R5cGVfbmFtZSk7CisgCisgICAvKiBXZSBvbmx5IHVud2luZCB0aGUgY29yZSBpbnRlZ2VyIHJlZ2lzdGVycy4gICovCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvYXJtX3N5bWJvbC5jIGIvYmFja2VuZHMvYXJtX3N5bWJvbC5jCitpbmRleCBkYTRhNTBhLi5jY2VhMDNiIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvYXJtX3N5bWJvbC5jCisrKysgYi9iYWNrZW5kcy9hcm1fc3ltYm9sLmMKK0BAIC0xMzAsNiArMTMwLDE0IEBAIGFybV9jaGVja19yZWxvY190YXJnZXRfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBFbGY2NF9Xb3JkIHNoX3R5CisgICByZXR1cm4gc2hfdHlwZSA9PSBTSFRfQVJNX0VYSURYOworIH0KKyAKKysvKiBBUk0gRUFCSSBzYXlzIHRoYXQgdGhlIGxvdyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uCisrICAgc3ltYm9sIHZhbHVlIGlzIGEgVEhVTUIgZnVuY3Rpb24gb3Igbm90LiAgTWFzayBpdCBvZmYuICAqLworK0dFbGZfQWRkcgorK2FybV9zeW1fZnVuY192YWx1ZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBHRWxmX0FkZHIgdmFsKQorK3sKKysgIHJldHVybiB2YWwgJiB+KEdFbGZfQWRkcikxOworK30KKysKKyBjb25zdCBjaGFyICoKKyBhcm1fc3ltYm9sX3R5cGVfbmFtZSAoaW50IHR5cGUsCisgCQkgICAgICBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMgYi9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jCitpbmRleCA0MmQyYjY3Li5mYjE5MmQ3IDEwMDY0NAorLS0tIGEvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYworKysrIGIvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYworQEAgLTExOSw3ICsxMTksNyBAQCBfX2xpYmR3ZmxfZ2V0c3ltIChEd2ZsX01vZHVsZSAqbW9kLCBpbnQgbmR4LCBHRWxmX1N5bSAqc3ltLCBHRWxmX0FkZHIgKmFkZHIsCisgICAgICBkZXNjcmlwdG9ycykuICAqLworIAorICAgY2hhciAqaWRlbnQ7CistICBHRWxmX0FkZHIgc3RfdmFsdWUgPSBzeW0tPnN0X3ZhbHVlICYgZWJsX2Z1bmNfYWRkcl9tYXNrIChtb2QtPmVibCk7CisrICBHRWxmX0FkZHIgc3RfdmFsdWUgPSBlYmxfc3ltX2Z1bmNfdmFsdWUgKG1vZC0+ZWJsLCBzeW0tPnN0X3ZhbHVlKTsKKyAgICpyZXNvbHZlZCA9IGZhbHNlOworICAgaWYgKCEgYWRqdXN0X3N0X3ZhbHVlICYmIG1vZC0+ZV90eXBlICE9IEVUX1JFTCAmJiBhbGxvYworICAgICAgICYmIChHRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5mbykgPT0gU1RUX0ZVTkMKK2RpZmYgLS1naXQgYS9saWJlYmwvTWFrZWZpbGUuYW0gYi9saWJlYmwvTWFrZWZpbGUuYW0KK2luZGV4IGVjNDQ3N2IuLjg4OWMyMWIgMTAwNjQ0CistLS0gYS9saWJlYmwvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmVibC9NYWtlZmlsZS5hbQorQEAgLTU1LDcgKzU1LDggQEAgZ2VuX1NPVVJDRVMgPSBlYmxvcGVuYmFja2VuZC5jIGVibGNsb3NlYmFja2VuZC5jIGVibHN0cnRhYi5jIFwKKyAJICAgICAgZWJsc3lzdmhhc2hlbnRyeXNpemUuYyBlYmxhdXh2aW5mby5jIGVibGNoZWNrb2JqYXR0ci5jIFwKKyAJICAgICAgZWJsX2NoZWNrX3NwZWNpYWxfc2VjdGlvbi5jIGVibF9zeXNjYWxsX2FiaS5jIGVibGFiaWNmaS5jIFwKKyAJICAgICAgZWJsc3RvdGhlci5jIGVibGluaXRyZWcuYyBlYmxkd2FyZnRvcmVnbm8uYyBlYmxub3JtYWxpemVwYy5jIFwKKy0JICAgICAgZWJsdW53aW5kLmMgZWJscmVzb2x2ZXN5bS5jIGVibGNoZWNrcmVsb2N0YXJnZXR0eXBlLmMKKysJICAgICAgZWJsdW53aW5kLmMgZWJscmVzb2x2ZXN5bS5jIGVibGNoZWNrcmVsb2N0YXJnZXR0eXBlLmMgXAorKwkgICAgICBlYmxzeW1mdW5jdmFsLmMKKyAKKyBsaWJlYmxfYV9TT1VSQ0VTID0gJChnZW5fU09VUkNFUykKKyAKK2RpZmYgLS1naXQgYS9saWJlYmwvZWJsLWhvb2tzLmggYi9saWJlYmwvZWJsLWhvb2tzLmgKK2luZGV4IDJlMzE0NDYuLjlkZjk0NWQgMTAwNjQ0CistLS0gYS9saWJlYmwvZWJsLWhvb2tzLmgKKysrKyBiL2xpYmVibC9lYmwtaG9va3MuaAorQEAgLTE5MSw1ICsxOTEsOCBAQCBib29sIEVCTEhPT0sodW53aW5kKSAoRWJsICplYmwsIER3YXJmX0FkZHIgcGMsIGVibF90aWRfcmVnaXN0ZXJzX3QgKnNldGZ1bmMsCisgICAgKGUuZy4gZnVuY3Rpb24gZGVzY3JpcHRvciByZXNvbHZpbmcpICAqLworIGJvb2wgRUJMSE9PSyhyZXNvbHZlX3N5bV92YWx1ZSkgKEVibCAqZWJsLCBHRWxmX0FkZHIgKmFkZHIpOworIAorKy8qIFJldHVybnMgdGhlIHJlYWwgdmFsdWUgb2YgYSBzeW1ib2wgZnVuY3Rpb24gYWRkcmVzcyBvciBvZmZzZXQuICAqLworK0dFbGZfQWRkciBFQkxIT09LKHN5bV9mdW5jX3ZhbHVlKSAoRWJsICplYmwsIEdFbGZfQWRkciB2YWwpOworKworIC8qIERlc3RydWN0b3IgZm9yIEVMRiBiYWNrZW5kIGhhbmRsZS4gICovCisgdm9pZCBFQkxIT09LKGRlc3RyKSAoc3RydWN0IGVibCAqKTsKK2RpZmYgLS1naXQgYS9saWJlYmwvZWJsc3ltZnVuY3ZhbC5jIGIvbGliZWJsL2VibHN5bWZ1bmN2YWwuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMwYjMyMmYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmVibC9lYmxzeW1mdW5jdmFsLmMKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBUdXJuIGEgc3ltYm9sIGZ1bmN0aW9uIHZhbHVlIGludG8gYSByZWFsIGZ1bmN0aW9uIGFkZHJlc3Mgb3Igb2Zmc2V0LgorKyAgIENvcHlyaWdodCAoQykgMjAxNCBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisrCisrICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyCisrCisrICAgICAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrICAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorKyAgICAgICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24KKysKKysgICBvcgorKworKyAgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrICAgICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorKyAgICAgICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24KKysKKysgICBvciBib3RoIGluIHBhcmFsbGVsLCBhcyBoZXJlLgorKworKyAgIGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKysgICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYKKysgICBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8bGliZWJsUC5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysKKytHRWxmX0FkZHIKKytlYmxfc3ltX2Z1bmNfdmFsdWUgKEVibCAqZWJsLCBHRWxmX0FkZHIgdmFsKQorK3sKKysgIGlmIChlYmwgPT0gTlVMTCB8fCBlYmwtPnN5bV9mdW5jX3ZhbHVlID09IE5VTEwpCisrICAgIHJldHVybiB2YWw7CisrCisrICByZXR1cm4gZWJsLT5zeW1fZnVuY192YWx1ZSAoZWJsLCB2YWwpOworK30KK2RpZmYgLS1naXQgYS9saWJlYmwvbGliZWJsLmggYi9saWJlYmwvbGliZWJsLmgKK2luZGV4IDdkYmY0NjAuLjk2YzA3NmIgMTAwNjQ0CistLS0gYS9saWJlYmwvbGliZWJsLmgKKysrKyBiL2xpYmVibC9saWJlYmwuaAorQEAgLTQ3Miw2ICs0NzIsMTcgQEAgZXh0ZXJuIGJvb2wgZWJsX3Vud2luZCAoRWJsICplYmwsIER3YXJmX0FkZHIgcGMsIGVibF90aWRfcmVnaXN0ZXJzX3QgKnNldGZ1bmMsCisgZXh0ZXJuIGJvb2wgZWJsX3Jlc29sdmVfc3ltX3ZhbHVlIChFYmwgKmVibCwgR0VsZl9BZGRyICphZGRyKQorICAgIF9fbm9ubnVsbF9hdHRyaWJ1dGVfXyAoMik7CisgCisrLyogUmV0dXJucyB0aGUgcmVhbCB2YWx1ZSBvZiBhIHN5bWJvbCBmdW5jdGlvbiBhZGRyZXNzIG9yIG9mZnNldAorKyAgIChlLmcuIHdoZW4gdGhlIHN0X3ZhbHVlIGNvbnRhaW5zIHNvbWUgZmxhZyBiaXRzIHRoYXQgbmVlZCB0byBiZQorKyAgIG1hc2tlZCBvZmYpLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBlYmxfcmVzb2x2ZV9zeW1fdmFsdWUgd2hpY2gKKysgICBvbmx5IHdvcmtzIGZvciBhY3R1YWwgc3ltYm9sIGFkZHJlc3NlcyAoaW4gbm9uLUVUX1JFTCBmaWxlcykgdGhhdAorKyAgIG1pZ2h0IHJlc29sdmUgdG8gYW4gYWRkcmVzcyBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgorKyAgIGVibF9zeW1fZnVuY192YWx1ZSBpcyBjYWxsZWQgdG8gdHVybiB0aGUgZ2l2ZW4gdmFsdWUgaW50byB0aGUgYQorKyAgIHJlYWwgYWRkcmVzcyBvciBvZmZzZXQgKHRoZSBvcmlnaW5hbCB2YWx1ZSBtaWdodCBub3QgYmUgYSByZWFsCisrICAgYWRkcmVzcykuICBUaGlzIHdvcmtzIGZvciBib3RoIEVUX1JFTCB3aGVuIHRoZSB2YWx1ZSBpcyBhIHNlY3Rpb24KKysgICBvZmZzZXQgb3IgRVRfRVhFQyBvciBFVF9EWU4gc3ltYm9sIHZhbHVlcywgd2hpY2ggYXJlIGFkZHJlc3Nlcy4gICovCisrZXh0ZXJuIEdFbGZfQWRkciBlYmxfc3ltX2Z1bmNfdmFsdWUgKEVibCAqZWJsLCBHRWxmX0FkZHIgdmFsKTsKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyB9CisgI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJiMzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaApAQCAtMCwwICsxLDgzIEBACitGcm9tOiBNYXJrIFdpZWxhYXJkIDxtandAcmVkaGF0LmNvbT4KK0RhdGU6IFN1biwgMTUgSnVuIDIwMTQgMTI6MzA6MDIgKzAyMDAKK1N1YmplY3Q6IGxpYmVibDogQWRkIGVibF91bndpbmRfcmV0X21hc2suCisKK0Fub3RoZXIgQVJNIG9kZGl0eS4gQSByZXR1cm4gdmFsdWUgYWRkcmVzcyBpbiBhbiB1bndpbmQgd2lsbCBjb250YWluIGFuCitleHRyYSBiaXQgdG8gaW5kaWNhdGUgd2hldGhlciB0byByZXR1cm4gdG8gYSByZWd1bGFyIEFSTSBvciBUSFVNQiBmdW5jdGlvbi4KK0FkZCBhIG5ldyBlYmwgZnVuY3Rpb24gdG8gcmV0dXJuIGEgbWFzayB0byB1c2UgdG8gZ2V0IHRoZSBhY3R1YWwgcmV0dXJuCithZGRyZXNzIGR1cmluZyBhbiB1bndpbmQgZWJsX3Vud2luZF9yZXRfbWFzay4KKworUmViYXNlIGFybV91bndpbmRfcmV0X21hc2sucGF0Y2ggZnJvbSAwLjE1OSB0byAwLjE2MAorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9hcm1faW5pdC5jIHwgMyArKysKKyBsaWJlYmwvZWJsaW5pdHJlZy5jIHwgOCArKysrKysrKworIGxpYmVibC9saWJlYmwuaCAgICAgfCA0ICsrKysKKyBsaWJlYmwvbGliZWJsUC5oICAgIHwgNiArKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9pbml0LmMgYi9iYWNrZW5kcy9hcm1faW5pdC5jCitpbmRleCAyMjY2ODI5Li5mOGRmMDQyIDEwMDY0NAorLS0tIGEvYmFja2VuZHMvYXJtX2luaXQuYworKysrIGIvYmFja2VuZHMvYXJtX2luaXQuYworQEAgLTg3LDUgKzg3LDggQEAgYXJtX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorICAgLyogQml0IHplcm8gZW5jb2RlcyB3aGV0aGVyIGFuIGZ1bmN0aW9uIGFkZHJlc3MgaXMgVEhVTUIgb3IgQVJNLiAqLworICAgZWgtPmZ1bmNfYWRkcl9tYXNrID0gfihHRWxmX0FkZHIpMTsKKyAKKysgIC8qIEJpdCB6ZXJvIGVuY29kZXMgd2hldGhlciB0byByZXR1cm4gdG8gYSBUSFVNQiBvciBBUk0gZnVuY3Rpb24uICovCisrICBlaC0+dW53aW5kX3JldF9tYXNrID0gfihHRWxmX0FkZHIpMTsKKysKKyAgIHJldHVybiBNT0RWRVJTSU9OOworIH0KK2RpZmYgLS1naXQgYS9saWJlYmwvZWJsaW5pdHJlZy5jIGIvbGliZWJsL2VibGluaXRyZWcuYworaW5kZXggNTcyOWIzYy4uY2E2ODFjMCAxMDA2NDQKKy0tLSBhL2xpYmVibC9lYmxpbml0cmVnLmMKKysrKyBiL2xpYmVibC9lYmxpbml0cmVnLmMKK0BAIC01NiwzICs1NiwxMSBAQCBlYmxfZnVuY19hZGRyX21hc2sgKEVibCAqZWJsKQorICAgcmV0dXJuICgoZWJsID09IE5VTEwgfHwgZWJsLT5mdW5jX2FkZHJfbWFzayA9PSAwKQorIAkgID8gfihHRWxmX0FkZHIpMCA6IGVibC0+ZnVuY19hZGRyX21hc2spOworIH0KKysKKytHRWxmX0FkZHIKKytlYmxfdW53aW5kX3JldF9tYXNrIChFYmwgKmVibCkKKyt7CisrICByZXR1cm4gKChlYmwgPT0gTlVMTCB8fCBlYmwtPnVud2luZF9yZXRfbWFzayA9PSAwKQorKwkgID8gfihHRWxmX0FkZHIpMCA6IGVibC0+dW53aW5kX3JldF9tYXNrKTsKKyt9CisrCitkaWZmIC0tZ2l0IGEvbGliZWJsL2xpYmVibC5oIGIvbGliZWJsL2xpYmVibC5oCitpbmRleCA0MGNmNjM1Li5iZTcwMDI3IDEwMDY0NAorLS0tIGEvbGliZWJsL2xpYmVibC5oCisrKysgYi9saWJlYmwvbGliZWJsLmgKK0BAIC00MjAsNiArNDIwLDEwIEBAIGV4dGVybiBzaXplX3QgZWJsX2ZyYW1lX25yZWdzIChFYmwgKmVibCkKKyAgICB0YWJsZXMpIGlzIG5lZWRlZC4gICovCisgZXh0ZXJuIEdFbGZfQWRkciBlYmxfZnVuY19hZGRyX21hc2sgKEVibCAqZWJsKTsKKyAKKysvKiBNYXNrIHRvIHVzZSBmb3IgdW53aW5kIHJldHVybiBhZGRyZXNzIGluIGNhc2UgdGhlIGFyY2hpdGVjdHVyZSBhZGRzCisrICAgc29tZSBleHRyYSBub24tYWRkcmVzcyBiaXRzIHRvIGl0LiAgKi8KKytleHRlcm4gR0VsZl9BZGRyIGVibF91bndpbmRfcmV0X21hc2sgKEVibCAqZWJsKTsKKysKKyAvKiBDb252ZXJ0ICpSRUdOTyBhcyBpcyBpbiBEV0FSRiB0byBhIGxvd2VyIHJhbmdlIHN1aXRhYmxlIGZvcgorICAgIER3YXJmX0ZyYW1lLT5SRUdTIGluZGV4aW5nLiAgKi8KKyBleHRlcm4gYm9vbCBlYmxfZHdhcmZfdG9fcmVnbm8gKEVibCAqZWJsLCB1bnNpZ25lZCAqcmVnbm8pCitkaWZmIC0tZ2l0IGEvbGliZWJsL2xpYmVibFAuaCBiL2xpYmVibC9saWJlYmxQLmgKK2luZGV4IGRiZDY3ZjMuLmUxOGFjZTYgMTAwNjQ0CistLS0gYS9saWJlYmwvbGliZWJsUC5oCisrKysgYi9saWJlYmwvbGliZWJsUC5oCitAQCAtNzAsNiArNzAsMTIgQEAgc3RydWN0IGVibAorICAgICAgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSB0aGUgYWN0dWFsIG1hc2sgdG8gdXNlLiAgKi8KKyAgIEdFbGZfQWRkciBmdW5jX2FkZHJfbWFzazsKKyAKKysgIC8qIE1hc2sgdG8gdXNlIHRvIGdldCB0aGUgcmV0dXJuIGFkZHJlc3MgZnJvbSBhbiB1bndpbmQgaW4gY2FzZSB0aGUKKysgICAgIGFyY2hpdGVjdHVyZSBhZGRzIHNvbWUgZXh0cmEgbm9uLWFkZHJlc3MgYml0cyB0byBpdC4gIFdoZW4gbm90CisrICAgICBpbml0aWFsaXplZCAoMCkgdGhlbiBlYmxfdW53aW5kX3JldF9tYXNrIHdpbGwgcmV0dXJuIH4wLCBvdGhlcndpc2UKKysgICAgIGl0IHNob3VsZCBiZSB0aGUgYWN0dWFsIG1hc2sgdG8gdXNlLiAgKi8KKysgIEdFbGZfQWRkciB1bndpbmRfcmV0X21hc2s7CisrCisgICAvKiBGdW5jdGlvbiBkZXNjcmlwdG9yIGxvYWQgYWRkcmVzcyBhbmQgdGFibGUgYXMgdXNlZCBieQorICAgICAgZWJsX3Jlc29sdmVfc3ltX3ZhbHVlIGlmIGF2YWlsYWJsZSBmb3IgdGhpcyBhcmNoLiAgKi8KKyAgIEdFbGZfQWRkciBmZF9hZGRyOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9maXhoZWFkZXJjaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTNiMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9maXhoZWFkZXJjaGVjay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitGb3Igc29tZSBiaW5hcmllcyB3ZSBjYW4gZ2V0IGEgaW52YWxpZCBzZWN0aW9uIGFsaWdubWVudCwgZm9yIGV4YW1wbGUgaWYgCitzaF9hbGlnbiA9IDEgYW5kIHNoX2FkZHJhbGlnbiBpcyAwLiBJbiB0aGUgY2FzZSBvZiBhIHplcm8gc2l6ZSBzZWN0aW9uIGxpa2UgCisiLm5vdGUuR05VLXN0YWNrIiwgdGhpcyBpcyBpcnJlbGF2ZW50IGFzIGZhciBhcyBJIGNhbiB0ZWxsIGFuZCB3ZSBzaG91bGRuJ3QKK2Vycm9yIGluIHRoaXMgY2FzZS4KKworUlAgMjAxNC82LzExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYyBiL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMKKy0tLSBhL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMKKysrKyBiL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMKK0BAIC0zMzksOCArMzM5LDggQEAgX19lbGZ3MihMSUJFTEZCSVRTLHVwZGF0ZW51bGxfd3Jsb2NrKSAoRWxmICplbGYsIGludCAqY2hhbmdlX2JvcCwgc2l6ZV90IHNobnVtKQorIAkJICAgICB3ZSB0ZXN0IGZvciB0aGUgYWxpZ25tZW50IG9mIHRoZSBzZWN0aW9uIGJlaW5nIGxhcmdlCisgCQkgICAgIGVub3VnaCBmb3IgdGhlIGxhcmdlc3QgYWxpZ25tZW50IHJlcXVpcmVkIGJ5IGEgZGF0YQorIAkJICAgICBibG9jay4gICovCistCQkgIGlmICh1bmxpa2VseSAoISBwb3dlcm9mMiAoc2hkci0+c2hfYWRkcmFsaWduKSkKKy0JCSAgICAgIHx8IHVubGlrZWx5ICgoc2hkci0+c2hfYWRkcmFsaWduID86IDEpIDwgc2hfYWxpZ24pKQorKwkJICBpZiAoc2hkci0+c2hfc2l6ZSAmJiAodW5saWtlbHkgKCEgcG93ZXJvZjIgKHNoZHItPnNoX2FkZHJhbGlnbikpCisrCQkgICAgICB8fCB1bmxpa2VseSAoKHNoZHItPnNoX2FkZHJhbGlnbiA/OiAxKSA8IHNoX2FsaWduKSkpCisgCQkgICAgeworIAkJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfQUxJR04pOworIAkJICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvaHBwYV9iYWNrZW5kLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTFhNzIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvaHBwYV9iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw4MDAgQEAKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX2luaXQuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSw3NCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIFBBLVJJU0Mgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9QQVJJU0NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysjaW5jbHVkZSAibGliZWJsX3BhcmlzYy5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIHBhcmlzY19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2NfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGlmIChlbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHIgJiYgKGVoZHItPmVfZmxhZ3MgJiBFRl9QQVJJU0NfV0lERSkpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAiUEEtUklTQyI7CisrICBwYXJpc2NfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCBtYWNoaW5lX2ZsYWdfY2hlY2spOworKyAgSE9PSyAoZWgsIHN5bWJvbF90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHNlZ21lbnRfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWN0aW9uX3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrICBpZiAocGE2NCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQ7CisrICBlbHNlCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDE1OSBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBQQS1SSVNDIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK3BhcmlzY19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCwgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIGlmIChlYmwtPmVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWJsLT5lbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrCisrICBpbnQgbnJlZ3MgPSBwYTY0ID8gMTI3IDogMTI4OworKworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIG5yZWdzOworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+PSBucmVncyB8fCBuYW1lbGVuIDwgNikKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIlIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gMzIpCisrICB7CisrICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDU7CisrICAgIH0KKysgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICB9CisrICBlbHNlCisrICB7CisrICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKworKyAgaWYgKHJlZ25vIDwgMzMpIHsKKysgICAgc3dpdGNoIChyZWdubykKKysgICAgICB7CisrICAgICAgY2FzZSAwIC4uLiA5OgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAxMCAuLi4gMzE6CisrICAgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgICAgbmFtZVsxXSA9IHJlZ25vIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAzMjoKKysJKnByZWZpeCA9IE5VTEw7CisrCW5hbWVbMF0gPSAnUyc7CisrCW5hbWVbMV0gPSAnQSc7CisrCW5hbWVbMl0gPSAnUic7CisrCW5hbWVsZW4gPSAzOworKwlicmVhazsKKysgICAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKHBhNjQgJiYgKChyZWdubyAtIDcyKSAlIDIpKSB7CisrICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgNzIgKyAwIC4uLiA3MiArIDExOgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVszXSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDcyICsgMTIgLi4uIDcyICsgNTU6CisrICAgICAgICBuYW1lWzBdID0gJ2YnOworKwluYW1lWzFdID0gJ3InOworKyAgICAgICAgbmFtZVsyXSA9IChyZWdubyArIDggLSA3MikgLyAyIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzNdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSA0OworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVs0XSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgfQorKyAgfQorKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwxMjggQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBQQS1SSVNDLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKgkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIyMUwsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE3RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNFIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxNFIsCQlSRUx8RVhFQykKKytSRUxPQ19UWVBFIChEUFJFTDIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNERSLCAgICAgICAgICBSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChMVE9GRjE0UiwJCVJFTCkKKytSRUxPQ19UWVBFIChETFRJTkQxNEYsCQkwKQorK1JFTE9DX1RZUEUgKFNFVEJBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxN1IsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKFNFR0JBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVE9GRjIxTCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNEYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIzMiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNFIsCTApCisrUkVMT0NfVFlQRSAoRlBUUjY0LAkJMCkKKytSRUxPQ19UWVBFIChQTEFCRUwzMiwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoUENSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwyMkMsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChESVI2NCwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoRElSMTRXUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNERSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNldGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2REYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkY2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZERiwJCTApCisrUkVMT0NfVFlQRSAoU0VDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFdSLAkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNERSLAkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFI2NCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNkRGLAkwKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKElQTFQsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChFUExULAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDMyLAkJRFlOKQorK1JFTE9DX1RZUEUgKFRQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAyMUwsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNEYsCTApCisrUkVMT0NfVFlQRSAoVFBSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFA2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFdSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2V0YsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkRGLAkwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwJRFlOKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwJRFlOKQorKworKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgICAgICAgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwyMTMgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L1BBLVJJU0MgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiAlcjI4LCBvciBwYWlyICVyMjgsICVyMjkuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJWZyNEwsIG9yIHBhaXIgJWZyNEwsICVmcjRSIG9uIHBhLTMyICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZzMyIDIKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyMzIgNAorKworKy8qICRmcjQgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworKyNpZiAwCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuIEFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIGlzIHN0b3JlZAorKyAgIGluICVyMjggYmVmb3JlIGZ1bmN0aW9uIGNhbGwsIGJ1dCBpdCBtYXkgYmUgY2hhbmdlZCBieSBmdW5jdGlvbi4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysjZW5kaWYKKysKKytzdGF0aWMgaW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwgaW50IHBhNjQpCisreworKyAgRHdhcmZfV29yZCByZWdzaXplID0gcGE2NCA/IDggOiA0OworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IDQ7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCWlmIChwYTY0KSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnOworKwkJICBpZiAoc2l6ZSA8PSA4KQorKwkJICAgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCQl9CisrCQllbHNlIHsKKysJCSAgKmxvY3AgPSBsb2NfZnByZWczMjsKKysJCSAgaWYgKHNpemUgPD0gNCkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzMyOworKwkJICBlbHNlIGlmIChzaXplIDw9IDgpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyMzI7CisrCQl9CisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJaWYgKHBhNjQpCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOiB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9hZ2dyZWdhdGVfc2l6ZSAodHlwZWRpZSwgJnNpemUpICE9IDApCisrCSAgcmV0dXJuIC0xOworKwlpZiAocGE2NCkKKysgICAgICAgICAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrICAgICAgICBpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysgICAgICAgIGlmIChzaXplIDw9IDIgKiByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrI2lmIDAKKysJLyogdGhlcmUgc2hvdWxkIGJlIHNvbWUgd2F5IHRvIGtub3cgdGhpcyBsb2NhdGlvbi4uLiBCdXQgSSBkbyBub3Qgc2VlIGl0LiAqLworKyAgICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyNlbmRpZgorKwkvKiBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworK2ludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICByZXR1cm4gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDExMiBAQAorKy8qIFBBLVJJU0Mgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VnbWVudF90eXBlX25hbWUgKGludCBzZWdtZW50LCBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCXNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIHN3aXRjaCAoc2VnbWVudCkKKysgICAgeworKyAgICBjYXNlIFBUX1BBUklTQ19BUkNIRVhUOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0FSQ0hFWFQiOworKyAgICBjYXNlIFBUX1BBUklTQ19VTldJTkQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfVU5XSU5EIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzeW1ib2wgdHlwZS4gICovCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3N5bWJvbF90eXBlX25hbWUoaW50IHN5bWJvbCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysgICAgc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKwlpZiAoc3ltYm9sID09IFNUVF9QQVJJU0NfTUlMTElDT0RFKQorKwkgIHJldHVybiAiUEFSSVNDX01JTExJIjsKKysJcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzZWN0aW9uIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zZWN0aW9uX3R5cGVfbmFtZSAoaW50IHR5cGUsCisrCQkJY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBTSFRfUEFSSVNDX0VYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19FWFQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGNhc2UgU0hUX1BBUklTQ19ET0M6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRE9DIjsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIENoZWNrIHdoZXRoZXIgbWFjaGluZSBmbGFncyBhcmUgdmFsaWQuICAqLworK2Jvb2wKKytwYXJpc2NfbWFjaGluZV9mbGFnX2NoZWNrIChHRWxmX1dvcmQgZmxhZ3MpCisreworKyAgaWYgKGZsYWdzICZ+IChFRl9QQVJJU0NfVFJBUE5JTCB8IEVGX1BBUklTQ19FWFQgfCBFRl9QQVJJU0NfTFNCIHwKKysJRUZfUEFSSVNDX1dJREUgfCBFRl9QQVJJU0NfTk9fS0FCUCB8CisrCUVGX1BBUklTQ19MQVpZU1dBUCB8IEVGX1BBUklTQ19BUkNIKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBHRWxmX1dvcmQgYXJjaCA9IGZsYWdzICYgRUZfUEFSSVNDX0FSQ0g7CisrCisrICByZXR1cm4gKChhcmNoID09IEVGQV9QQVJJU0NfMV8wKSB8fCAoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMSkgfHwKKysgICAgICAoYXJjaCA9PSBFRkFfUEFSSVNDXzJfMCkpOworK30KKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKytwYXJpc2NfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9QQVJJU0NfRElSNjQ6CisrICAgIGNhc2UgUl9QQVJJU0NfU0VDUkVMNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjMyOgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMCwwICsxLDkgQEAKKysjaWZuZGVmIF9MSUJFQkxfSFBQQV9ICisrI2RlZmluZSBfTElCRUJMX0hQUEFfSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyKER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxMjoxMi4yNTIxNDk3MzcgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjEzOjExLjkxMDgwMTEwNSArMDAwMAorQEAgLTMzLDExICszMywxMiBAQAorIAorIAorIG1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBhYXJjaDY0IHNwYXJjIHBwYyBwcGM2NCBzMzkwIFwKKy0JICB0aWxlZ3gKKysJICB0aWxlZ3ggcGFyaXNjCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2FhcmNoNjRfcGljLmEgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgXAorLQkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hCisrCSAgICAgbGliZWJsX3BwYzY0X3BpYy5hIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF90aWxlZ3hfcGljLmEgXAorKwkgICAgIGxpYmVibF9wYXJpc2NfcGljLmEKKyBub2luc3RfTElCUkFSSUVTID0gJChsaWJlYmxfcGljKQorIG5vaW5zdF9EQVRBID0gJChsaWJlYmxfcGljOl9waWMuYT0uc28pCisgCitAQCAtMTE2LDYgKzExNyw5IEBACisgbGliZWJsX3RpbGVneF9waWNfYV9TT1VSQ0VTID0gJCh0aWxlZ3hfU1JDUykKKyBhbV9saWJlYmxfdGlsZWd4X3BpY19hX09CSkVDVFMgPSAkKHRpbGVneF9TUkNTOi5jPS5vcykKKyAKKytwYXJpc2NfU1JDUyA9IHBhcmlzY19pbml0LmMgcGFyaXNjX3N5bWJvbC5jIHBhcmlzY19yZWdzLmMgcGFyaXNjX3JldHZhbC5jCisrbGliZWJsX3BhcmlzY19waWNfYV9TT1VSQ0VTID0gJChwYXJpc2NfU1JDUykKKythbV9saWJlYmxfcGFyaXNjX3BpY19hX09CSkVDVFMgPSAkKHBhcmlzY19TUkNTOi5jPS5vcykKKyAKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjUyMTQ5NzM3ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvbGliZWxmL2VsZi5oCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjI4MTUwMjgwICswMDAwCitAQCAtMTgxNCwxNiArMTgxNCwyNCBAQAorICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxN0YJMTIJLyogMTcgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFIJMTQJLyogUmlnaHQgMTQgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfRFBSRUwyMUwJMTgJLyogTGVmdCAyMSBiaXRzIG9mIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0V1IJMTkKKysjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTREUgkyMAorICNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFIJMjIJLyogUmlnaHQgMTQgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwyMUwJMjYJLyogR1AtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19HUFJFTDE0UgkzMAkvKiBHUC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjIxTAkzNAkvKiBMVC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTRSCTM4CS8qIExULXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RMVElORDE0RgkzOQorKyNkZWZpbmUgUl9QQVJJU0NfU0VUQkFTRQk0MAorICNkZWZpbmUgUl9QQVJJU0NfU0VDUkVMMzIJNDEJLyogMzIgYml0cyBzZWN0aW9uIHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMjFMCTQyCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTdSCTQzCisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTRSCTQ2CisgI2RlZmluZSBSX1BBUklTQ19TRUdCQVNFCTQ4CS8qIE5vIHJlbG9jYXRpb24sIHNldCBzZWdtZW50IGJhc2UuICAqLworICNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMMzIJNDkJLyogMzIgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYyMUwJNTAJLyogUExUIHJlbC4gYWRkcmVzcywgbGVmdCAyMSBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0Ugk1NAkvKiBQTFQgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0Rgk1NQorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjMyCTU3CS8qIDMyIGJpdHMgTFQtcmVsLiBmdW5jdGlvbiBwb2ludGVyLiAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjIxTAk1OAkvKiBMVC1yZWwuIGZjdCBwdHIsIGxlZnQgMjEgYml0cy4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIxNFIJNjIJLyogTFQtcmVsLiBmY3QgcHRyLCByaWdodCAxNCBiaXRzLiAqLworQEAgLTE4MzIsNiArMTg0MCw3IEBACisgI2RlZmluZSBSX1BBUklTQ19QTEFCRUwyMUwJNjYJLyogTGVmdCAyMSBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMTRSCTcwCS8qIFJpZ2h0IDE0IGJpdHMgb2YgZmRlc2MgYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDY0CTcyCS8qIDY0IGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMjJDCTczCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyRgk3NAkvKiAyMiBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0V1IJNzUJLyogUEMtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTREUgk3NgkvKiBQQyByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworQEAgLTE4NTcsNiArMTg2Niw4IEBACisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2V0YJMTAyCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZERgkxMDMJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfU0VDUkVMNjQJMTA0CS8qIDY0IGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0V1IJMTA3CisrI2RlZmluZSBSX1BBUklTQ19CQVNFUkVMMTREUgkxMDgKKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDY0CTExMgkvKiA2NCBiaXRzIHNlZ21lbnQgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0V1IJMTE1CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTREUgkxMTYJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9tNjhrX2JhY2tlbmQuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjU2NmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9tNjhrX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDQ5MyBAQAorRnJvbTogS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorRnJvbTogVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2QuZGU+CitTdWJqZWN0OiBtNjhrIHN1cHBvcnQKKworV3JpdHRlbiBieSBLdXJ0IFJvZWNreCwgZXhjZXB0IGZvciB0aGUgcmV0dmFsIHN1cHBvcnQgd2hpY2ggd2FzIHdyaXR0ZW4KK2J5IFRob3JzdGVuIEdsYXNlcgorCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfaW5pdC5jCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDUwIEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgbTY4ayBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnRhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJbTY4a18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSXzY4S18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIG02OGtfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrbTY4a19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIm02OGsiOworKyAgbTY4a19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlZ3MuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSwxMDYgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgbTY4ayBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttNjhrX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCSAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysJaWYgKG5hbWUgPT0gTlVMTCkKKysJCXJldHVybiAyNTsKKysKKysJaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDI0IHx8IG5hbWVsZW4gPCA1KQorKwkJcmV0dXJuIC0xOworKworKwkqcHJlZml4ID0gIiUiOworKwkqYml0cyA9IDMyOworKwkqdHlwZSA9IChyZWdubyA8IDggPyBEV19BVEVfc2lnbmVkCisrCQk6IHJlZ25vIDwgMTYgPyBEV19BVEVfYWRkcmVzcyA6IERXX0FURV9mbG9hdCk7CisrCisrCWlmIChyZWdubyA8IDgpCisrCXsKKysJCSpzZXRuYW1lID0gImludGVnZXIiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMTYpCisrCXsKKysJCSpzZXRuYW1lID0gImFkZHJlc3MiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMjQpCisrCXsKKysJCSpzZXRuYW1lID0gIkZQVSI7CisrCX0KKysJZWxzZQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJCSp0eXBlID0gRFdfQVRFX2FkZHJlc3M7CisrCX0KKysKKysJc3dpdGNoIChyZWdubykKKysJeworKwljYXNlIDAgLi4uIDc6CisrCQluYW1lWzBdID0gJ2QnOworKwkJbmFtZVsxXSA9IHJlZ25vICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSA4IC4uLiAxMzoKKysJCW5hbWVbMF0gPSAnYSc7CisrCQluYW1lWzFdID0gcmVnbm8gLSA4ICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNDoKKysJCW5hbWVbMF0gPSAnZic7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNToKKysJCW5hbWVbMF0gPSAncyc7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNiAuLi4gMjM6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysJCW5hbWVbMl0gPSByZWdubyAtIDE2ICsgJzAnOworKyAgIAkJbmFtZWxlbiA9IDM7CisrCQlicmVhazsKKysKKysJY2FzZSAyNDoKKysJCW5hbWVbMF0gPSAncCc7CisrCQluYW1lWzFdID0gJ2MnOworKwkJbmFtZWxlbiA9IDI7CisrCX0KKysKKysJbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysJcmV0dXJuIG5hbWVsZW47CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZWxvYy5kZWYJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtNjhrLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKy8qIAkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQkwKQorK1JFTE9DX1RZUEUgKDMyLAkJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFICgxNiwJCQlSRUwpCisrUkVMT0NfVFlQRSAoOCwJCQlSRUwpCisrUkVMT0NfVFlQRSAoUEMzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChQQzE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1Q4LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDMyTywJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOE8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUOCwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKEdMT0JfREFULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoSk1QX1NMT1QsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChSRUxBVElWRSwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEdOVV9WVElOSEVSSVQsCVJFTCkKKytSRUxPQ19UWVBFIChHTlVfVlRFTlRSWSwJUkVMKQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvbGliZWxmL2VsZi5oCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMTE1Nyw2ICsxMTU3LDkgQEAKKyAjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCQkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisgI2RlZmluZSBSXzY4S19KTVBfU0xPVAkyMQkJLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIJCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysvKiBUaGUgbmV4dCAyIGFyZSBHTlUgZXh0ZW5zaW9ucyB0byBlbmFibGUgQysrIHZ0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uICAqLworKyNkZWZpbmUgUl82OEtfR05VX1ZUSU5IRVJJVCAyMworKyNkZWZpbmUgUl82OEtfR05VX1ZURU5UUlkgICAyNAorICNkZWZpbmUgUl82OEtfVExTX0dEMzIgICAgICAyNSAgICAgICAgICAvKiAzMiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyAjZGVmaW5lIFJfNjhLX1RMU19HRDE2ICAgICAgMjYgICAgICAgICAgLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0Q4ICAgICAgIDI3ICAgICAgICAgIC8qIDggYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxNDo0OC4zNDQ2MjExNjcgKzAwMDAKK0BAIC0zMywxMiArMzMsMTIgQEAKKyAKKyAKKyBtb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gYWFyY2g2NCBzcGFyYyBwcGMgcHBjNjQgczM5MCBcCistCSAgdGlsZWd4IHBhcmlzYyBtaXBzCisrCSAgdGlsZWd4IHBhcmlzYyBtaXBzIG02OGsKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfYWFyY2g2NF9waWMuYSBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBcCisgCSAgICAgbGliZWJsX3BwYzY0X3BpYy5hIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF90aWxlZ3hfcGljLmEgXAorLQkgICAgIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEKKysJICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hIGxpYmVibF9tNjhrX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTEyNSw2ICsxMjUsMTAgQEAKKyBsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisgYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKyAKKyttNjhrX1NSQ1MgPSBtNjhrX2luaXQuYyBtNjhrX3N5bWJvbC5jIG02OGtfcmVncy5jIG02OGtfcmV0dmFsLmMKKytsaWJlYmxfbTY4a19waWNfYV9TT1VSQ0VTID0gJChtNjhrX1NSQ1MpCisrYW1fbGliZWJsX202OGtfcGljX2FfT0JKRUNUUyA9ICQobTY4a19TUkNTOi5jPS5vcykKKysKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorIAllY2hvICdFTEZVVElMU18kKFBBQ0tBR0VfVkVSU0lPTikgeyBnbG9iYWw6ICQqX2luaXQ7IGxvY2FsOiAqOyB9OycgXAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDQzIEBACisrLyogbTY4ayBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCW02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKyttNjhrX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfNjhLXzMyOgorKyAgICAgIHJldHVybiBFTEZfVF9TV09SRDsKKysgICAgY2FzZSBSXzY4S18xNjoKKysgICAgICByZXR1cm4gRUxGX1RfSEFMRjsKKysgICAgY2FzZSBSXzY4S184OgorKyAgICAgIHJldHVybiBFTEZfVF9CWVRFOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmV0dmFsLmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsMTcyIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9tNjhrIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChjKSAyMDExIFRob3JzdGVuIEdsYXNlciwgRGViaWFuLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysKKysvKiAlZDAsIG9yIHBhaXIgJWQwLCAlZDEsIG9yICVhMCAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07Cisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19wdHJyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWc4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysjZGVmaW5lIG5sb2NfcHRycmVnCTEKKysKKysvKiAlZjAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMTYgfQorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcJMQorKworKy8qIFN0cnVjdHVyZXMgYXJlIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgLSBzbWFsbCBzdHJ1Y3R1cmVzIGFyZSByZXR1cm5lZAorKyAgIGluICVkMCAvICVkMSAoLWZyZWctc3RydWN0LXJldHVybiB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQpLCBsYXJnZQorKyAgIHN0cnVjdHVyZXMgdXNlICVhMSAoaW4gY29uc3RyYXN0IHRvIHRoZSBTWVNWIHBzQUJJIHdoaWNoIHNheXMgJWEwKSBhcworKyAgIHJlZW50cmFudCBzdG9yYWdlIHNwYWNlIGluZGljYXRvci4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnOSwgLm51bWJlciA9IDAgfQorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysKKytpbnQKKyttNjhrX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIER3YXJmX1dvcmQgc2l6ZTsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwKKysJCQkJCQkmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCXsKKysJICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICBzaXplID0gNDsKKysJICBlbHNlCisrCSAgICByZXR1cm4gLTE7CisrCX0KKysgICAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCXsKKysJICAqbG9jcCA9IGxvY19wdHJyZWc7CisrICAgICAgICAgIHJldHVybiBubG9jX3B0cnJlZzsKKysJfQorKyAgICAgIGlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJeworKwkgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJCSAgICAgJmF0dHJfbWVtKSwKKysJCQkgICAgICAgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgcmV0dXJuIC0xOworKwkgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICB7CisrCSAgICAgIC8qIFhYWCByZWFsbHkgMTA/ICovCisrICAgICAgICAgICAgICBpZiAoc2l6ZSA+IDEwKQorKyAgICAgICAgICAgICAgICByZXR1cm4gLTI7CisrICAgICAgICAgICAgICAqbG9jcCA9IGxvY19mcHJlZzsKKysgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVnOworKwkgICAgfQorKwl9CisrICAgICAgaWYgKHNpemUgPD0gOCkKKysJeworKwlpbnRyZWc6CisrCSAgLyogWFhYIGNoZWNrIGVuZGlhbm5lc3Mgb2YgZHdvcmQgcGFpciwgaW50NjQgdnMgYWdncmVnYXRlICovCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnOworKwkgIHJldHVybiBzaXplIDw9IDQgPyBubG9jX2ludHJlZyA6IG5sb2NfaW50cmVncGFpcjsKKysJfQorKworKyAgICBhZ2dyZWdhdGU6CisrICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgICAgaWYgKGR3YXJmX2FnZ3JlZ2F0ZV9zaXplICh0eXBlZGllLCAmc2l6ZSkgPT0gMAorKwkgICYmIHNpemUgPiAwICYmIHNpemUgPD0gOCkKKysJLyogbm90IGFjY3VyYXRlIGZvciBhIHN0cnVjdCB3aG9zZSBvbmx5IG1lbWJlciBpcyBhIGZsb2F0ICovCisrCWdvdG8gaW50cmVnOworKyAgICAgIGdvdG8gYWdncmVnYXRlOworKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbWlwc19iYWNrZW5kLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzNhM2YyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbWlwc19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw3MTIgQEAKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfaW5pdC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDYwIEBACisrLyogSW5pdGlhbGl6YXRpb24gb2YgbWlwcyBzcGVjaWZpYyBiYWNrZW5kIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfTUlQU18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIG1pcHNfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrY29uc3QgY2hhciAqCisrbWlwc19pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKysgICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEdFbGZfSGFsZiBtYWNoaW5lIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVibCAqZWg7CisrICAgICBzaXplX3QgZWhsZW47CisreworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgRWxmX0JIIG9iamVjdCBoYXMgYSBzdWZmaWNlbnQgc2l6ZS4gICovCisrICBpZiAoZWhsZW4gPCBzaXplb2YgKEVibCkpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGlmIChtYWNoaW5lID09IEVNX01JUFMpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgYmlnLWVuZGlhbiI7CisrICBlbHNlIGlmIChtYWNoaW5lID09IEVNX01JUFNfUlMzX0xFKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGxpdHRsZS1lbmRpYW4iOworKworKyAgbWlwc19pbml0X3JlbG9jIChlaCk7CisrICBIT09LIChlaCwgcmVsb2Nfc2ltcGxlX3R5cGUpOworKyAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JlZ3MuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSwxMDQgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgTUlQUyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbWlwc19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKKysJCSAgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiA2NjsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiA2NSB8fCBuYW1lbGVuIDwgNCkKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIkIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IHJlZ25vICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSAocmVnbm8gLyAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVbMV0gPSAocmVnbm8gJSAxMCkgKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA8IDY0KQorKyAgICB7CisrICAgICAgKnNldG5hbWUgPSAiRlBVIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnZic7CisrICAgICAgaWYgKHJlZ25vIDwgMzIgKyAxMCkKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpIC8gMTAgKyAnMCc7CisrCSAgbmFtZVsyXSA9IChyZWdubyAtIDMyKSAlIDEwICsgJzAnOworKwkgIG5hbWVsZW4gPSAzOworKwl9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDY0KQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdoJzsKKysgICAgICBuYW1lWzFdID0gJ2knOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2wnOworKyAgICAgIG5hbWVbMV0gPSAnbyc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysKKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSw3OSBAQAorKy8qIExpc3QgdGhlIHJlbG9jYXRpb24gdHlwZXMgZm9yIG1pcHMuICAtKi0gQyAtKi0KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKy8qIAkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgxNiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMzIsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTDMyLCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgyNiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSEkxNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKExPMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2LCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTElURVJBTCwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVDE2LCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChQQzE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTDE2LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMzIsICAgICAgICAgICAgMCkKKysKKytSRUxPQ19UWVBFIChTSElGVDUsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU0hJRlQ2LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDY0LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX1BBR0UsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9PRlNULCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfSEkxNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0xPMTYsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNVQiwgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSU5TRVJUX0IsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKERFTEVURSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVIsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSElHSEVTVCwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfSEkxNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMX0xPMTYsICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU0NOX0RJU1AsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTDE2LCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChBRERfSU1NRURJQVRFLCAgICAgIDApCisrUkVMT0NfVFlQRSAoUEpVTVAsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFJFTEdPVCwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChKQUxSLCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUwzMiwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDY0LCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HRCwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfTERNLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9ISTE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfTE8xNiwgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfR09UVFBSRUwsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMMzIsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTDY0LCAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfSEkxNiwgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMX0xPMTYsICAgICAwKQorKworKyNkZWZpbmUgTk9fQ09QWV9SRUxPQyAxCisrI2RlZmluZSBOT19SRUxBVElWRV9SRUxPQyAxCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmV0dmFsLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsMzIxIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9taXBzIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKyNpbmNsdWRlIDxlbGYuaD4KKysKKysjaW5jbHVkZSAiLi4vbGliZWJsL2xpYmVibFAuaCIKKysjaW5jbHVkZSAiLi4vbGliZHcvbGliZHdQLmgiCisrCisrI2RlZmluZSBCQUNLRU5EIG1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGUgQUJJIG9mIHRoZSBmaWxlLiAgQWxzbyBzZWUgRUZfTUlQU19BQkkyIGFib3ZlLiAqLworKyNkZWZpbmUgRUZfTUlQU19BQkkJCTB4MDAwMEYwMDAKKysKKysvKiBUaGUgb3JpZ2luYWwgbzMyIGFiaS4gKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzMyICAgICAgICAgIDB4MDAwMDEwMDAKKysKKysvKiBPMzIgZXh0ZW5kZWQgdG8gd29yayBvbiA2NCBiaXQgYXJjaGl0ZWN0dXJlcyAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PNjQgICAgICAgICAgMHgwMDAwMjAwMAorKworKy8qIEVBQkkgaW4gMzIgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTMyICAgICAgIDB4MDAwMDMwMDAKKysKKysvKiBFQUJJIGluIDY0IGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkk2NCAgICAgICAweDAwMDA0MDAwCisrCisrLyogQWxsIHRoZSBwb3NzaWJsZSBNSVBTIEFCSXMuICovCisrZW51bSBtaXBzX2FiaQorKyAgeworKyAgICBNSVBTX0FCSV9VTktOT1dOID0gMCwKKysgICAgTUlQU19BQklfTjMyLAorKyAgICBNSVBTX0FCSV9PMzIsCisrICAgIE1JUFNfQUJJX042NCwKKysgICAgTUlQU19BQklfTzY0LAorKyAgICBNSVBTX0FCSV9FQUJJMzIsCisrICAgIE1JUFNfQUJJX0VBQkk2NCwKKysgICAgTUlQU19BQklfTEFTVAorKyAgfTsKKysKKysvKiBGaW5kIHRoZSBtaXBzIEFCSSBvZiB0aGUgY3VycmVudCBmaWxlICovCisrZW51bSBtaXBzX2FiaSBmaW5kX21pcHNfYWJpKEVsZiAqZWxmKQorK3sKKysgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWxmLCAmZWhkcl9tZW0pOworKworKyAgaWYgKGVoZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBHRWxmX1dvcmQgZWxmX2ZsYWdzID0gZWhkci0+ZV9mbGFnczsKKysKKysgIC8qIENoZWNrIGVsZl9mbGFncyB0byBzZWUgaWYgaXQgc3BlY2lmaWVzIHRoZSBBQkkgYmVpbmcgdXNlZC4gICovCisrICBzd2l0Y2ggKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSSkpCisrICAgIHsKKysgICAgY2FzZSBFX01JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICBjYXNlIEVfTUlQU19BQklfTzY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICBkZWZhdWx0OgorKyAgICAgIGlmICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkyKSkKKysJcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgfQorKworKyAgLyogR0NDIGNyZWF0ZXMgYSBwc2V1ZG8tc2VjdGlvbiB3aG9zZSBuYW1lIGRlc2NyaWJlcyB0aGUgQUJJLiAgKi8KKysgIHNpemVfdCBzaHN0cm5keDsKKysgIGlmIChlbGZfZ2V0c2hkcnN0cm5keCAoZWxmLCAmc2hzdHJuZHgpIDwgMCkKKysgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICBjb25zdCBjaGFyICpuYW1lOworKyAgRWxmX1NjbiAqc2NuID0gTlVMTDsKKysgIHdoaWxlICgoc2NuID0gZWxmX25leHRzY24gKGVsZiwgc2NuKSkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIEdFbGZfU2hkciBzaGRyX21lbTsKKysgICAgICBHRWxmX1NoZHIgKnNoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKTsKKysgICAgICBpZiAoc2hkciA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0xBU1Q7CisrCisrICAgICAgbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpID86ICIiOworKyAgICAgIGlmIChzdHJuY21wIChuYW1lLCAiLm1kZWJ1Zy4iLCA4KSAhPSAwKQorKyAgICAgICAgY29udGludWU7CisrCisrICAgICAgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU4zMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX042NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaU82NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgICBlbHNlCisrICAgICAgICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKysgICAgfQorKworKyAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrfQorKworK3Vuc2lnbmVkIGludAorK21pcHNfYWJpX3JlZ3NpemUgKGVudW0gbWlwc19hYmkgYWJpKQorK3sKKysgIHN3aXRjaCAoYWJpKQorKyAgICB7CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTMyOgorKyAgICBjYXNlIE1JUFNfQUJJX08zMjoKKysgICAgICByZXR1cm4gNDsKKysgICAgY2FzZSBNSVBTX0FCSV9OMzI6CisrICAgIGNhc2UgTUlQU19BQklfTjY0OgorKyAgICBjYXNlIE1JUFNfQUJJX082NDoKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIDg7CisrICAgIGNhc2UgTUlQU19BQklfVU5LTk9XTjoKKysgICAgY2FzZSBNSVBTX0FCSV9MQVNUOgorKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiAwOworKyAgICB9CisrfQorKworKworKy8qICR2MCBvciBwYWlyICR2MCwgJHYxICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJGYwIChmbG9hdCksIG9yIHBhaXIgJGYwLCAkZjEgKGRvdWJsZSkuCisrICogZjIvZjMgYXJlIHVzZWQgZm9yIENPTVBMRVggKD0gMiBkb3VibGVzKSByZXR1cm5zIGluIEZvcnRyYW4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworKy8qICRmMCwgb3IgcGFpciAkZjAsICRmMi4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyIDQKKysjZGVmaW5lIG5sb2NfZnByZWdxdWFkIDgKKysKKysvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKysgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisrICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiAkdjAuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzIsIC5udW1iZXIgPSAwIH0KKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrCisraW50CisrbWlwc19yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAvKiBGaXJzdCBmaW5kIHRoZSBBQkkgdXNlZCBieSB0aGUgZWxmIG9iamVjdCAqLworKyAgZW51bSBtaXBzX2FiaSBhYmkgPSBmaW5kX21pcHNfYWJpKGZ1bmN0eXBlZGllLT5jdS0+ZGJnLT5lbGYpOworKworKyAgLyogU29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nIHdoaWxlIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBBQkkgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfTEFTVCkKKysgICAgcmV0dXJuIC0xOworKworKyAgLyogV2UgY291bGRuJ3QgaWRlbnRpZnkgdGhlIEFCSSwgYnV0IHRoZSBmaWxlIHNlZW1zIHZhbGlkICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX1VOS05PV04pCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIENhbid0IGhhbmRsZSBFQUJJIHZhcmlhbnRzICovCisrICBpZiAoKGFiaSA9PSBNSVBTX0FCSV9FQUJJMzIpIHx8IChhYmkgPT0gTUlQU19BQklfRUFCSTY0KSkKKysgICAgcmV0dXJuIC0yOworKworKyAgdW5zaWduZWQgaW50IHJlZ3NpemUgPSBtaXBzX2FiaV9yZWdzaXplIChhYmkpOworKyAgaWYgKCFyZWdzaXplKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICBpZiAoYXR0ciA9PSBOVUxMKQorKyAgICAvKiBUaGUgZnVuY3Rpb24gaGFzIG5vIHJldHVybiB2YWx1ZSwgbGlrZSBhIGB2b2lkJyBmdW5jdGlvbiBpbiBDLiAgKi8KKysgICAgcmV0dXJuIDA7CisrCisrICBEd2FyZl9EaWUgZGllX21lbTsKKysgIER3YXJmX0RpZSAqdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICBpbnQgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysKKysgIC8qIEZvbGxvdyB0eXBlZGVmcyBhbmQgcXVhbGlmaWVycyB0byBnZXQgdG8gdGhlIGFjdHVhbCB0eXBlLiAgKi8KKysgIHdoaWxlICh0YWcgPT0gRFdfVEFHX3R5cGVkZWYKKysJIHx8IHRhZyA9PSBEV19UQUdfY29uc3RfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3ZvbGF0aWxlX3R5cGUKKysJIHx8IHRhZyA9PSBEV19UQUdfcmVzdHJpY3RfdHlwZSkKKysgICAgeworKyAgICAgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgICAgICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgICAgICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKyAgICB9CisrCisrICBzd2l0Y2ggKHRhZykKKysgICAgeworKyAgICBjYXNlIC0xOgorKyAgICAgIHJldHVybiAtMTsKKysKKysgICAgY2FzZSBEV19UQUdfc3VicmFuZ2VfdHlwZToKKysgICAgICBpZiAoISBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplKSkKKysJeworKwkgIGF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysJICB0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysJICB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKwl9CisrICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKysKKysgICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wb2ludGVyX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZToKKysgICAgICB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkgJmF0dHJfbWVtKSwgJnNpemUpICE9IDApCisrCSAgeworKwkgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgICBzaXplID0gcmVnc2l6ZTsKKysJICAgIGVsc2UKKysJICAgICAgcmV0dXJuIC0xOworKwkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwkgIHsKKysJICAgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCQkJCQkgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgICAgcmV0dXJuIC0xOworKworKyNkZWZpbmUgQUJJX0xPQyhsb2MsIHJlZ3NpemUpICgocmVnc2l6ZSkgPT0gNCA/IChsb2MgIyMgX28zMikgOiAobG9jKSkKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCSpsb2NwID0gQUJJX0xPQyhsb2NfZnByZWcsIHJlZ3NpemUpOworKwkJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzsKKysKKysJCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3BhaXI7CisrCisrCQlpZiAoc2l6ZSA8PSA0KnJlZ3NpemUgJiYgYWJpID09IE1JUFNfQUJJX08zMikKKysgICAgICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZ3F1YWQ7CisrCisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJKmxvY3AgPSBBQklfTE9DKGxvY19pbnRyZWcsIHJlZ3NpemUpOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrCisrCS8qIEVsc2UgZmFsbCB0aHJvdWdoLiBTaG91bGRuJ3QgaGFwcGVuIHRob3VnaCAoYXQgbGVhc3Qgd2l0aCBnY2MpICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOgorKyAgICAgIC8qIFhYWCBUT0RPOiBDYW4ndCBoYW5kbGUgc3RydWN0dXJlIHJldHVybiB3aXRoIG90aGVyIEFCSSdzIHlldCA6LS8gKi8KKysgICAgICBpZiAoKGFiaSAhPSBNSVBTX0FCSV9PMzIpICYmIChhYmkgIT0gTUlQU19BQklfTzY0KSkKKysgICAgICAgIHJldHVybiAtMjsKKysKKysgICAgICAqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisrICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyAgICB9CisrCisrICAvKiBYWFggV2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvIHJldHVybiBzcGVjaWZpYyBlcnJvcnMgZnJvbSBlYmwgY2FsbHMuCisrICAgICBUaGlzIHZhbHVlIG1lYW5zIHdlIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSB0eXBlLCBidXQgaXQgaXMgd2VsbC1mb3JtZWQKKysgICAgIERXQVJGIGFuZCBtaWdodCBiZSB2YWxpZC4gICovCisrICByZXR1cm4gLTI7CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDUyIEBACisrLyogTUlQUyBzcGVjaWZpYyBzeW1ib2xpYyBuYW1lIGhhbmRsaW5nLgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKyttaXBzX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfTUlQU18xNjoKKysgICAgICByZXR1cm4gRUxGX1RfSEFMRjsKKysgICAgY2FzZSBSX01JUFNfMzI6CisrICAgICAgcmV0dXJuIEVMRl9UX1dPUkQ7CisrICAgIGNhc2UgUl9NSVBTXzY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxNDIzNTg3NSArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtNzEsNiArNzEsOCBAQAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMsIDAsIDAgfSwKKyAgIHsgInNwYXJjIiwgImVsZl9zcGFyY3Y4cGx1cyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDMzJQTFVTLCAwLCAwIH0sCisgICB7ICJzMzkwIiwgImVibF9zMzkwIiwgInMzOTAiLCA0LCBFTV9TMzkwLCAwLCAwIH0sCisrICB7ICJtaXBzIiwgImVsZl9taXBzIiwgIm1pcHMiLCA0LCBFTV9NSVBTLCAwLCAwIH0sCisrICB7ICJtaXBzIiwgImVsZl9taXBzZWwiLCAibWlwc2VsIiwgNCwgRU1fTUlQU19SUzNfTEUsIDAsIDAgfSwKKyAKKyAgIHsgIm0zMiIsICJlbGZfbTMyIiwgIm0zMiIsIDMsIEVNX00zMiwgMCwgMCB9LAorICAgeyAibTY4ayIsICJlbGZfbTY4ayIsICJtNjhrIiwgNCwgRU1fNjhLLCAwLCAwIH0sCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTE0MjM1ODc1ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0xMTIsMTEgKzExMiwxMyBAQAorIH0KKyAKKyAKKysjaWZuZGVmIE5PX0NPUFlfUkVMT0MKKyBib29sCisgRUJMSE9PSyhjb3B5X3JlbG9jX3ApIChpbnQgcmVsb2MpCisgeworICAgcmV0dXJuIHJlbG9jID09IFJfVFlQRSAoQ09QWSk7CisgfQorKyNlbmRpZgorIAorIGJvb2wKKyBFQkxIT09LKG5vbmVfcmVsb2NfcCkgKGludCByZWxvYykKK0BAIC0xMzgsNyArMTQwLDkgQEAKKyAgIGVibC0+cmVsb2NfdHlwZV9uYW1lID0gRUJMSE9PSyhyZWxvY190eXBlX25hbWUpOworICAgZWJsLT5yZWxvY190eXBlX2NoZWNrID0gRUJMSE9PSyhyZWxvY190eXBlX2NoZWNrKTsKKyAgIGVibC0+cmVsb2NfdmFsaWRfdXNlID0gRUJMSE9PSyhyZWxvY192YWxpZF91c2UpOworKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworICAgZWJsLT5jb3B5X3JlbG9jX3AgPSBFQkxIT09LKGNvcHlfcmVsb2NfcCk7CisrI2VuZGlmCisgICBlYmwtPm5vbmVfcmVsb2NfcCA9IEVCTEhPT0sobm9uZV9yZWxvY19wKTsKKyAjaWZuZGVmIE5PX1JFTEFUSVZFX1JFTE9DCisgICBlYmwtPnJlbGF0aXZlX3JlbG9jX3AgPSBFQkxIT09LKHJlbGF0aXZlX3JlbG9jX3ApOworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjEzOjM2LjkxNDIzNTg3NSArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTQ6MTAuODQxNDY4OTM0ICswMDAwCitAQCAtMzMsMTIgKzMzLDEyIEBACisgCisgCisgbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIGFhcmNoNjQgc3BhcmMgcHBjIHBwYzY0IHMzOTAgXAorLQkgIHRpbGVneCBwYXJpc2MKKysJICB0aWxlZ3ggcGFyaXNjIG1pcHMKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfYWFyY2g2NF9waWMuYSBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBcCisgCSAgICAgbGliZWJsX3BwYzY0X3BpYy5hIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF90aWxlZ3hfcGljLmEgXAorLQkgICAgIGxpYmVibF9wYXJpc2NfcGljLmEKKysJICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTEyMSw2ICsxMjEsMTAgQEAKKyBsaWJlYmxfcGFyaXNjX3BpY19hX1NPVVJDRVMgPSAkKHBhcmlzY19TUkNTKQorIGFtX2xpYmVibF9wYXJpc2NfcGljX2FfT0JKRUNUUyA9ICQocGFyaXNjX1NSQ1M6LmM9Lm9zKQorIAorK21pcHNfU1JDUyA9IG1pcHNfaW5pdC5jIG1pcHNfc3ltYm9sLmMgbWlwc19yZWdzLmMgbWlwc19yZXR2YWwuYworK2xpYmVibF9taXBzX3BpY19hX1NPVVJDRVMgPSAkKG1pcHNfU1JDUykKKythbV9saWJlYmxfbWlwc19waWNfYV9PQkpFQ1RTID0gJChtaXBzX1NSQ1M6LmM9Lm9zKQorKworIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCUBybSAtZiAkKEA6LnNvPS5tYXApCisgCWVjaG8gJ0VMRlVUSUxTXyQoUEFDS0FHRV9WRVJTSU9OKSB7IGdsb2JhbDogJCpfaW5pdDsgbG9jYWw6ICo7IH07JyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX3JlYWRlbGZfdy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjY5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX3JlYWRlbGZfdy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitGcm9tOiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitTdWJqZWN0OiBNYWtlIHJlYWRlbGYgLXcgb3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIG9uIG1pcHMKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjYyMDQxCitGb3J3YXJkZWQ6IG5vdC1uZWVkZWQKKworVXBzdHJlYW1zIHdhbnRzIGEgY2hhbmdlIHdoZXJlIHRoaXMgaXMgaGFuZGxlZCBieSBhIGhvb2sgdGhhdCBuZWVkcwordG8gYmUgZmlsbGVkIGluIGJ5IHRoZSBiYWNrZW5kIGZvciB0aGUgYXJjaC4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTUzL3NyYy9yZWFkZWxmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1My5vcmlnL3NyYy9yZWFkZWxmLmMJMjAxMi0wOC0xMCAyMjowMTo1NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBlbGZ1dGlscy0wLjE1My9zcmMvcmVhZGVsZi5jCTIwMTItMDktMTggMjE6NDY6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtNzM2NCw3ICs3MzY0LDggQEAKKyAgICAgICBHRWxmX1NoZHIgc2hkcl9tZW07CisgICAgICAgR0VsZl9TaGRyICpzaGRyID0gZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSk7CisgCistICAgICAgaWYgKHNoZHIgIT0gTlVMTCAmJiBzaGRyLT5zaF90eXBlID09IFNIVF9QUk9HQklUUykKKysgICAgICBpZiAoc2hkciAhPSBOVUxMICYmICgKKysJIChzaGRyLT5zaF90eXBlID09IFNIVF9QUk9HQklUUykgfHwgKHNoZHItPnNoX3R5cGUgPT0gU0hUX01JUFNfRFdBUkYpKSkKKyAJeworIAkgIHN0YXRpYyBjb25zdCBzdHJ1Y3QKKyAJICB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViMWIzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitJbmRleDogZWxmdXRpbHMtMC4xNTkvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OS5vcmlnL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCisrKysgZWxmdXRpbHMtMC4xNTkvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKK0BAIC0zOTMsNiArMzkzLDE2IEBAIHBpZF9nZXR0aHJlYWQgKER3ZmwgKmR3ZmwgX19hdHRyaWJ1dGVfXworICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKytib29sCisraW50ZXJuYWxfZnVuY3Rpb24KKytfX2xpYmR3ZmxfcHRyYWNlX2F0dGFjaCAocGlkX3QgdGlkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQkgYm9vbCAqdGlkX3dhc19zdG9wcGVkcCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgZXJybm8gPSBFTk9TWVM7CisrICBfX2xpYmR3Zmxfc2V0ZXJybm8gKERXRkxfRV9FUlJOTyk7CisrICByZXR1cm4gZmFsc2U7CisrfQorKworIHN0YXRpYyBib29sCisgcGlkX21lbW9yeV9yZWFkIChEd2ZsICpkd2ZsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICAgICAgICAgICAgIER3YXJmX0FkZHIgYWRkciBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCitAQCAtNDE5LDYgKzQyOSwxMyBAQCBwaWRfZGV0YWNoIChEd2ZsICpkd2ZsIF9fYXR0cmlidXRlX18gKCh1CisgeworIH0KKyAKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytfX2xpYmR3ZmxfcHRyYWNlX2RldGFjaCAocGlkX3QgdGlkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQkgYm9vbCB0aWRfd2FzX3N0b3BwZWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKyt9CisrCisgc3RhdGljIHZvaWQKKyBwaWRfdGhyZWFkX2RldGFjaCAoRHdmbF9UaHJlYWQgKnRocmVhZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgCQkgIHZvaWQgKnRocmVhZF9hcmcgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvcmVkaGF0LXBvcnRhYmlsaXR5LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGZmMDdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvcmVkaGF0LXBvcnRhYmlsaXR5LmRpZmYKQEAgLTAsMCArMSwxMDIxIEBACitSZWJhc2UgdG8gMS4xNjIKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgIHwgICAzMCArKysrKysrKysrKysrKysrKysrKysKKyBiYWNrZW5kcy9DaGFuZ2VMb2cgICAgICAgICAgfCAgIDEyICsrKysrKysrKworIGJhY2tlbmRzL01ha2VmaWxlLmFtICAgICAgICB8ICAgIDIgKy0KKyBjb25maWcvQ2hhbmdlTG9nICAgICAgICAgICAgfCAgICA0ICsrKworIGNvbmZpZy9ldS5hbSAgICAgICAgICAgICAgICB8ICAgMTQgKysrKysrKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICB8ICAgNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIGxpYi9DaGFuZ2VMb2cgICAgICAgICAgICAgICB8ICAgIDggKysrKysrCisgbGliL2V1LWNvbmZpZy5oICAgICAgICAgICAgIHwgICAxMCArKysrKysrCisgbGliYXNtL0NoYW5nZUxvZyAgICAgICAgICAgIHwgICAgNSArKysrCisgbGliY3B1L0NoYW5nZUxvZyAgICAgICAgICAgIHwgICAgOCArKysrKysKKyBsaWJjcHUvaTM4Nl9kaXNhc20uYyAgICAgICAgfCAgICAxICsKKyBsaWJkdy9DaGFuZ2VMb2cgICAgICAgICAgICAgfCAgIDEzICsrKysrKysrKworIGxpYmR3L2R3YXJmX2JlZ2luX2VsZi5jICAgICB8ICAgIDggKysrKysrCisgbGliZHcvbGliZHcuaCAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxpYmR3ZmwvQ2hhbmdlTG9nICAgICAgICAgICB8ICAgMjAgKysrKysrKysrKysrKysKKyBsaWJkd2ZsL2xpbnV4LWNvcmUtYXR0YWNoLmMgfCAgIDI5ICsrKysrKysrKysrKysrKysrKysrCisgbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMgIHwgICAxNCArKysrKysrKysrCisgbGliZWJsL0NoYW5nZUxvZyAgICAgICAgICAgIHwgICAgNSArKysrCisgbGliZWxmL0NoYW5nZUxvZyAgICAgICAgICAgIHwgICAxMCArKysrKysrCisgbGliZWxmL2NvbW1vbi5oICAgICAgICAgICAgIHwgICAgNCArLS0KKyBsaWJlbGYvZ251aGFzaF94bGF0ZS5oICAgICAgfCAgICA2ICsrKy0tCisgc3JjL0NoYW5nZUxvZyAgICAgICAgICAgICAgIHwgICAzMCArKysrKysrKysrKysrKysrKysrKysKKyBzcmMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgfCAgICA1ICsrKysKKyBzcmMvYWRkcjJsaW5lLmMgICAgICAgICAgICAgfCAgICA0ICstLQorIHNyYy9maW5kdGV4dHJlbC5jICAgICAgICAgICB8ICAgIDYgKysrKy0KKyBzcmMvbGQuaCAgICAgICAgICAgICAgICAgICAgfCAgICAyICsrCisgc3JjL3JlYWRlbGYuYyAgICAgICAgICAgICAgIHwgICAxNSArKysrKysrLS0tLQorIHNyYy9zdHJpbmdzLmMgICAgICAgICAgICAgICB8ICAgMTEgKysrKysrKysKKyBzcmMvc3RyaXAuYyAgICAgICAgICAgICAgICAgfCAgICA2ICsrKysrCisgdGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgIHwgICAxNCArKysrKysrKysrCisgdGVzdHMvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgICAgMSArCisgdGVzdHMvYmFja3RyYWNlLmMgICAgICAgICAgIHwgICAgMSArCisgdGVzdHMvbGluZTJhZGRyLmMgICAgICAgICAgIHwgICAgMiArLQorIDMzIGZpbGVzIGNoYW5nZWQsIDM0MyBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggZDgyOTc4My4uODliZmQyNCAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMjUzLDYgKzI1Myw4IEBACisgCisgMjAxMi0wMS0yNCAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorKwkqIGNvbmZpZ3VyZS5hYzogV3JhcCBBQ19DT01QSUxFX0lGRUxTRSBzb3VyY2VzIGluIEFDX0xBTkdfU09VUkNFLgorKworIAkqIENPUFlJTkc6IEZpeCBhZGRyZXNzLiBVcGRhdGVkIHZlcnNpb24gZnJvbSBnbnVsaWIuCisgCisgMjAxMi0wMS0yMyAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorQEAgLTI3MSw2ICsyNzMsOSBAQAorIAorIDIwMTEtMTAtMDggIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisgCisrCSogY29uZmlndXJlLmFjICgtLWRpc2FibGUtd2Vycm9yKTogSGFuZGxlIGl0LCBjb250cm9sbGluZyBCVUlMRF9XRVJST1IKKysJYXV0b21ha2Ugb3B0aW9uLgorKworIAkqIGNvbmZpZ3VyZS5hYzogRml4IHVzZSBvZiBBQ19BUkdfRU5BQkxFIHRvIGhhbmRsZSAkZW5hYmxldmFsIGNvcnJlY3RseS4KKyAKKyAyMDExLTEwLTAyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAZ21haWwuY29tPgorQEAgLTI5Miw2ICsyOTcsMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKExPQ0FMRURJUiwgREFUQURJUk5BTUUpOiBSZW1vdmVkLgorIAorKzIwMDktMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBVc2Ugc2VkIGFuZCBleHByIGluc3RlYWQgb2YgbW9kZXJuIGJhc2ggZXh0ZW5zaW9ucy4KKysKKyAyMDA5LTA5LTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWM6IFVwZGF0ZSBmb3IgbW9yZSBtb2Rlcm4gYXV0b2NvbmYuCitAQCAtMzAwLDYgKzMwOSwxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoemlwX0xJQlMpOiBDaGVjayBmb3IgbGlibHptYSB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciAtZmdudTg5LWlubGluZTsgYWRkIGl0IHRvIFdFWFRSQSBpZiBpdCB3b3Jrcy4KKysKKyAyMDA5LTA0LTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoZXVfdmVyc2lvbik6IFJvdW5kIGRvd24gaGVyZSwgbm90IGluIHZlcnNpb24uaCBtYWNyb3MuCitAQCAtMzExLDYgKzMyNCw4IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBfX2J1aWx0aW5fcG9wY291bnQuCisrCisgCSogY29uZmlndXJlLmFjICh6bGliIGNoZWNrKTogQ2hlY2sgZm9yIGd6ZGlyZWN0LCBuZWVkIHpsaWIgPj0gMS4yLjIuMy4KKyAKKyAJKiBjb25maWd1cmUuYWMgKF9fdGhyZWFkIGNoZWNrKTogVXNlIEFDX0xJTktfSUZFTFNFLCBpbiBjYXNlIG9mCitAQCAtMzkxLDYgKzQwNiwxMCBAQAorIAkqIGNvbmZpZ3VyZS5hYzogQWRkIGR1bW15IGF1dG9tYWtlIGNvbmRpdGlvbmFsIHRvIGdldCBkZXBlbmRlbmNpZXMKKyAJZm9yIG5vbi1nZW5lcmljIGxpbmtlciByaWdodC4gIFNlZSBzcmMvTWFrZWZpbGUuYW0uCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uLgorKworIDIwMDUtMTEtMTggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW0gKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpOiBOZXcgdmFyaWFibGUuCitAQCAtNDM4LDYgKzQ1NywxNyBAQAorIAkqIE1ha2VmaWxlLmFtIChhbGxfU1VCRElSUyk6IEFkZCBsaWJkd2ZsLgorIAkqIGNvbmZpZ3VyZS5hYzogV3JpdGUgbGliZHdmbC9NYWtlZmlsZS4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYyAoV0VYVFJBKTogQ2hlY2sgZm9yIC1XZXh0cmEgYW5kIHNldCB0aGlzIHN1YnN0aXR1dGlvbi4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBzdHJ1Y3Qgc3RhdCBzdF8/dGltIG1lbWJlcnMuCisrCSogc3JjL3N0cmlwLmMgKHByb2Nlc3NfZmlsZSk6IFVzZSBzdF8/dGltZSBpZiBzdF8/dGltIGFyZSBub3QgdGhlcmUuCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgZnV0aW1lcyBmdW5jdGlvbi4KKysJKiBzcmMvc3RyaXAuYyAoaGFuZGxlX2VsZikgWyEgSEFWRV9GVVRJTUVTXTogVXNlIHV0aW1lcyBpbnN0ZWFkLgorKwkoaGFuZGxlX2FyKSBbISBIQVZFX0ZVVElNRVNdOiBMaWtld2lzZS4KKysKKyAyMDA1LTA1LTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYyBbQUhfQk9UVE9NXSAoSU5UREVDTCwgX0lOVERFQ0wpOiBOZXcgbWFjcm9zLgorZGlmZiAtLWdpdCBhL2JhY2tlbmRzL0NoYW5nZUxvZyBiL2JhY2tlbmRzL0NoYW5nZUxvZworaW5kZXggZmU2MWQ5Yy4uOTU5OTYyMyAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL0NoYW5nZUxvZworKysrIGIvYmFja2VuZHMvQ2hhbmdlTG9nCitAQCAtNDk4LDYgKzQ5OCwxMCBAQAorIAkqIHBwY19hdHRycy5jIChwcGNfY2hlY2tfb2JqZWN0X2F0dHJpYnV0ZSk6IEhhbmRsZSB0YWcKKyAJR05VX1Bvd2VyX0FCSV9TdHJ1Y3RfUmV0dXJuLgorIAorKzIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKGxpYmVibF8lLnNvKTogVXNlICQoTERfQVNfTkVFREVEKS4KKysKKyAyMDA4LTEwLTA0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBpMzg2X3JlbG9jLmRlZjogRml4IGVudHJpZXMgZm9yIFRMU19HT1RERVNDLCBUTFNfREVTQ19DQUxMLCBhbmQKK0BAIC04MjUsNiArODI5LDExIEBACisgCSogc3BhcmNfaW5pdC5jOiBMaWtld2lzZS4KKyAJKiB4ODZfNjRfaW5pdC5jOiBMaWtld2lzZS4KKyAKKysyMDA1LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChMRF9BU19ORUVERUQpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKGxpYmVibF8lLnNvIHJ1bGUpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdsLC0tYXMtbmVlZGVkLgorKworIDIwMDUtMTEtMTkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcHBjNjRfcmVsb2MuZGVmOiBSRUwzMCAtPiBBRERSMzAuCitAQCAtODQ3LDYgKzg1Niw5IEBACisgCSogTWFrZWZpbGUuYW0gKHVuaW5zdGFsbCk6IERvbid0IHRyeSB0byByZW1vdmUgJChwa2dpbmNsdWRlZGlyKS4KKyAJKENMRUFORklMRVMpOiBBZGQgbGliZWJsXyQobSkuc28uCisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgCSogcHBjX3JlbG9jLmRlZjogVXBkYXRlIGJpdHMgcGVyIEFsYW4gTW9kcmEgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4uCisgCSogcHBjNjRfcmVsb2MuZGVmOiBMaWtld2lzZS4KKyAKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9NYWtlZmlsZS5hbSBiL2JhY2tlbmRzL01ha2VmaWxlLmFtCitpbmRleCAyMWQ3YmQyLi5mZTkyMGM5IDEwMDY0NAorLS0tIGEvYmFja2VuZHMvTWFrZWZpbGUuYW0KKysrKyBiL2JhY2tlbmRzL01ha2VmaWxlLmFtCitAQCAtMTE5LDcgKzExOSw3IEBAIGxpYmVibF8lLnNvIGxpYmVibF8lLm1hcDogbGliZWJsXyVfcGljLmEgJChsaWJlbGYpICQobGliZHcpCisgCSQoTElOSykgLXNoYXJlZCAtbyAkKEA6Lm1hcD0uc28pIFwKKyAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJDwgJChjcHVfJCopIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUgXAorIAkJLVdsLC0tdmVyc2lvbi1zY3JpcHQsJChAOi5zbz0ubWFwKSBcCistCQktV2wsLXosZGVmcyAtV2wsLS1hcy1uZWVkZWQgJChsaWJlbGYpICQobGliZHcpCisrCQktV2wsLXosZGVmcyAkKExEX0FTX05FRURFRCkgJChsaWJlbGYpICQobGliZHcpCisgCUAkKHRleHRyZWxfY2hlY2spCisgCisgbGliZWJsX2kzODYuc286ICQoY3B1X2kzODYpCitkaWZmIC0tZ2l0IGEvY29uZmlnL0NoYW5nZUxvZyBiL2NvbmZpZy9DaGFuZ2VMb2cKK2luZGV4IDY0YjU4ZTEuLjYzYjNlOTAgMTAwNjQ0CistLS0gYS9jb25maWcvQ2hhbmdlTG9nCisrKysgYi9jb25maWcvQ2hhbmdlTG9nCitAQCAtMTA2LDYgKzEwNiwxMCBAQAorIAorIAkqIGtub3duLWR3YXJmLmF3azogVXNlIGdhd2suCisgCisrMjAxMS0xMC0wOCAgTWlrZSBGcnlzaW5nZXIgIDx2YXBpZXJAZ2VudG9vLm9yZz4KKysKKysJKiBldS5hbSBbQlVJTERfV0VSUk9SXTogQ29uZGl0aW9uYWxpemUgLVdlcnJvciB1c2Ugb24gdGhpcy4KKysKKyAyMDEwLTA3LTAyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZ1dGlscy5zcGVjLmluOiBBZGQgbW9yZSBCdWlsZFJlcXVpcmVzLgorZGlmZiAtLWdpdCBhL2NvbmZpZy9ldS5hbSBiL2NvbmZpZy9ldS5hbQoraW5kZXggNzBkMzJkZS4uNjVhZjA4NSAxMDA2NDQKKy0tLSBhL2NvbmZpZy9ldS5hbQorKysrIGIvY29uZmlnL2V1LmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyBDb21tb24gYXV0b21ha2UgZnJhZ21lbnRzIGZvciBlbGZ1dGlscyBzdWJkaXJlY3RvcnkgbWFrZWZpbGVzLgorICMjCistIyMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IFJlZCBIYXQsIEluYy4KKysjIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSwgMjAxNCBSZWQgSGF0LCBJbmMuCisgIyMKKyAjIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBlbGZ1dGlscy4KKyAjIworQEAgLTI5LDYgKzI5LDkgQEAKKyAjIyBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgIyMKKyAKKytXRVhUUkEgPSBAV0VYVFJBQAorK0xEX0FTX05FRURFRCA9IEBMRF9BU19ORUVERURACisrCisgREVGUyA9IC1EX0dOVV9TT1VSQ0UgLURIQVZFX0NPTkZJR19IIC1ETE9DQUxFRElSPSciJHtsb2NhbGVkaXJ9IicKKyBBTV9DUFBGTEFHUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2RpcikvbGliIC1JLi4KKyAKK0BAIC0zOCwxMiArNDEsMTcgQEAgU1RBQ0tfVVNBR0VfV0FSTklORz0tV3N0YWNrLXVzYWdlPTI2MjE0NAorIGVsc2UKKyBTVEFDS19VU0FHRV9XQVJOSU5HPQorIGVuZGlmCistQU1fQ0ZMQUdTID0gLXN0ZD1nbnU5OSAtV2FsbCAtV3NoYWRvdyAtV2Zvcm1hdD0yIFwKKytBTV9DRkxBR1MgPSAtc3RkPWdudTk5IC1XYWxsIC1Xc2hhZG93IFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19XZXJyb3IpLCwtV2Vycm9yKSBcCistCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkIC1XZXh0cmEpIFwKKysJICAgICQoaWYgJCgkKCpGKV9ub19XdW51c2VkKSwsLVd1bnVzZWQgJChXRVhUUkEpKSBcCisrCSAgICAkKGlmICQoJCgqRilfbm9fV2Zvcm1hdCksLVduby1mb3JtYXQsLVdmb3JtYXQ9MikgXAorIAkgICAgJChpZiAkKCQoKkYpX25vX1dzdGFja191c2FnZSksLCQoU1RBQ0tfVVNBR0VfV0FSTklORykpIFwKKyAJICAgICQoJCgqRilfQ0ZMQUdTKQorIAorK2lmIEJVSUxEX1dFUlJPUgorK0FNX0NGTEFHUyArPSAkKGlmICQoJCgqRilfbm9fV2Vycm9yKSwsLVdlcnJvcikKKytlbmRpZgorKworIENPTVBJTEUub3MgPSAkKGZpbHRlci1vdXQgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlLCAkKENPTVBJTEUpKQorIAorIERFRlMub3MgPSAtRFBJQyAtRFNIQVJFRAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmM5ZmY1Ni4uMjdhMWVmMyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA2LDYgKzEwNiw1NSBAQCBDRkxBR1M9IiRvbGRfQ0ZMQUdTIl0pCisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfYzk5IiAhPSB4eWVzXSwKKyAgICAgICBBQ19NU0dfRVJST1IoW2djYyB3aXRoIEdOVTk5IHN1cHBvcnQgcmVxdWlyZWRdKSkKKyAKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1XZXh0cmEgb3B0aW9uIHRvICRDQ10sIGFjX2N2X2NjX3dleHRyYSwgW2RubAorK29sZF9DRkxBR1M9IiRDRkxBR1MiCisrQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXh0cmEiCisrQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFt2b2lkIGZvbyAodm9pZCkgeyB9XSldLAorKwkJICBhY19jdl9jY193ZXh0cmE9eWVzLCBhY19jdl9jY193ZXh0cmE9bm8pCisrQ0ZMQUdTPSIkb2xkX0NGTEFHUyJdKQorK0FDX1NVQlNUKFdFWFRSQSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY193ZXh0cmEiID0geHllc10sIFtXRVhUUkE9LVdleHRyYV0sIFtXRVhUUkE9LVddKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgLWZnbnU4OS1pbmxpbmUgb3B0aW9uIHRvICRDQ10sIGFjX2N2X2NjX2dudTg5X2lubGluZSwgW2RubAorK29sZF9DRkxBR1M9IiRDRkxBR1MiCisrQ0ZMQUdTPSIkQ0ZMQUdTIC1mZ251ODktaW5saW5lIC1XZXJyb3IiCisrQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFsKKyt2b2lkIGZvbyAodm9pZCkKKyt7CisrICBpbmxpbmUgdm9pZCBiYXIgKHZvaWQpIHt9CisrICBiYXIgKCk7CisrfQorK2V4dGVybiBpbmxpbmUgdm9pZCBiYXogKHZvaWQpIHt9CisrXSldLCBhY19jdl9jY19nbnU4OV9pbmxpbmU9eWVzLCBhY19jdl9jY19nbnU4OV9pbmxpbmU9bm8pCisrQ0ZMQUdTPSIkb2xkX0NGTEFHUyJdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2NjX2dudTg5X2lubGluZSIgPSB4eWVzXSwKKysgICAgICBbV0VYVFJBPSIke1dFWFRSQTorJFdFWFRSQSB9LWZnbnU4OS1pbmxpbmUiXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC0tYXMtbmVlZGVkIGxpbmtlciBvcHRpb25dLAorKwkgICAgICAgYWNfY3ZfYXNfbmVlZGVkLCBbZG5sCisrY2F0ID4gY29uZnRlc3QuYyA8PEVPRgorK2ludCBtYWluICh2b2lkKSB7IHJldHVybiAwOyB9CisrRU9GCisraWYgQUNfVFJZX0NPTU1BTkQoWyR7Q0MtY2N9ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTCisrCQkJICAgIC1mUElDIC1zaGFyZWQgLW8gY29uZnRlc3Quc28gY29uZnRlc3QuYworKwkJCSAgICAtV2wsLS1hcy1uZWVkZWQgMT4mQVNfTUVTU0FHRV9MT0dfRkRdKQorK3RoZW4KKysgIGFjX2N2X2FzX25lZWRlZD15ZXMKKytlbHNlCisrICBhY19jdl9hc19uZWVkZWQ9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0Kl0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfYXNfbmVlZGVkIiA9IHh5ZXNdLAorKyAgICAgIFtMRF9BU19ORUVERUQ9LVdsLC0tYXMtbmVlZGVkXSwgW0xEX0FTX05FRURFRD1dKQorK0FDX1NVQlNUKExEX0FTX05FRURFRCkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIF9fYnVpbHRpbl9wb3Bjb3VudF0sIGFjX2N2X3BvcGNvdW50LCBbZG5sCisrQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwgW1tleGl0IChfX2J1aWx0aW5fcG9wY291bnQgKDEyNykpO11dKV0sCisrCSAgICAgICBhY19jdl9wb3Bjb3VudD15ZXMsIGFjX2N2X3BvcGNvdW50PW5vKV0pCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfcG9wY291bnQiID0geHllc10sCisrICAgICAgW0FDX0RFRklORShbSEFWRV9CVUlMVElOX1BPUENPVU5UXSwgWzFdLCBbSGF2ZSBfX2J1aWx0aW5fcG9wY291bnQuXSldKQorKworKworIEFDX0NBQ0hFX0NIRUNLKFtmb3IgX190aHJlYWQgc3VwcG9ydF0sIGFjX2N2X3RscywgW2RubAorICMgVXNlIHRoZSBzYW1lIGZsYWdzIHRoYXQgd2UgdXNlIGZvciBvdXIgRFNPcywgc28gdGhlIHRlc3QgaXMgcmVwcmVzZW50YXRpdmUuCisgIyBTb21lIG9sZCBjb21waWxlci9saW5rZXIvbGliYyBjb21iaW5hdGlvbnMgZmFpbCBzb21lIHdheXMgYW5kIG5vdCBvdGhlcnMuCitAQCAtMTIyLDcgKzE3MSwxMCBAQCBzdGF0aWMgX190aHJlYWQgaW50IGE7IGludCBmb28gKGludCBiKSB7IHJldHVybiBhICsgYjsgfV1dLAorIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKKyBBU19JRihbdGVzdCAieCRhY19jdl90bHMiICE9IHh5ZXNdLAorLSAgICAgIEFDX01TR19FUlJPUihbX190aHJlYWQgc3VwcG9ydCByZXF1aXJlZF0pKQorKyAgICAgIFtBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAorKwkgICAgIFtBQ19NU0dfRVJST1IoWy0tZW5hYmxlLXRocmVhZC1zYWZldHkgcmVxdWlyZXMgX190aHJlYWQgc3VwcG9ydF0pXSwKKysJICAgICBbQUNfREVGSU5FKFtfX3RocmVhZF0sIFsvKiBlbXB0eTogbm8gbXVsdGktdGhyZWFkIHN1cHBvcnQgKi9dLAorKwkJCVtTdHViYmVkIG91dCBpZiBtaXNzaW5nIGNvbXBpbGVyIHN1cHBvcnQuXSldKV0pCisgCisgZG5sIFRoaXMgdGVzdCBtdXN0IGNvbWUgYXMgZWFybHkgYXMgcG9zc2libGUgYWZ0ZXIgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24KKyBkbmwgdGVzdHMsIGJlY2F1c2UgdGhlIGNob2ljZSBvZiB0aGUgZmlsZSBtb2RlbCBjYW4gKGluIHByaW5jaXBsZSkgYWZmZWN0CitAQCAtMjI0LDYgKzI3NiwxMSBAQCBBTV9DT05ESVRJT05BTChVU0VfVkFMR1JJTkQsIHRlc3QgIiR1c2VfdmFsZ3JpbmQiID0geWVzKQorIEFNX0NPTkRJVElPTkFMKEJVSUxEX1NUQVRJQywgW2RubAorIHRlc3QgIiR1c2VfZ3Byb2YiID0geWVzIC1vICIkdXNlX2djb3YiID0geWVzXSkKKyAKKytBQ19BUkdfRU5BQkxFKFt3ZXJyb3JdLAorK0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtd2Vycm9yXSxbZG8gbm90IGJ1aWxkIHdpdGggLVdlcnJvcl0pLAorKwkgICAgICAgW2VuYWJsZV93ZXJyb3I9JGVuYWJsZXZhbF0sIFtlbmFibGVfd2Vycm9yPXllc10pCisrQU1fQ09ORElUSU9OQUwoQlVJTERfV0VSUk9SLCB0ZXN0ICIkZW5hYmxlX3dlcnJvciIgPSB5ZXMpCisrCisgQUNfQVJHX0VOQUJMRShbdGVzdHMtcnBhdGhdLAorIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10ZXN0cy1ycGF0aF0sW2J1aWxkICRPUklHSU4tdXNpbmcgcnBhdGggaW50byB0ZXN0c10pLAorIAkgICAgICAgW3Rlc3RzX3VzZV9ycGF0aD0kZW5hYmxldmFsXSwgW3Rlc3RzX3VzZV9ycGF0aD1ub10pCitAQCAtMzg4LDcgKzQ0NSw3IEBAIGNhc2UgIiRldV92ZXJzaW9uIiBpbgorIGVzYWMKKyAKKyAjIFJvdW5kIHVwIHRvIHRoZSBuZXh0IHJlbGVhc2UgQVBJICh4LnkpIHZlcnNpb24uCistZXVfdmVyc2lvbj0kKCggKGV1X3ZlcnNpb24gKyA5OTkpIC8gMTAwMCApKQorK2V1X3ZlcnNpb249YGV4cHIgXCggJGV1X3ZlcnNpb24gKyA5OTkgXCkgLyAxMDAwYAorIAorIGRubCBVbmlxdWUgSUQgZm9yIHRoaXMgYnVpbGQuCisgTU9EVkVSU0lPTj0iQnVpbGQgZm9yICR7TElCRUJMX1NVQkRJUn0gJHtldV92ZXJzaW9ufSAke2FjX2N2X2J1aWxkfSIKK2RpZmYgLS1naXQgYS9saWIvQ2hhbmdlTG9nIGIvbGliL0NoYW5nZUxvZworaW5kZXggZDA0YmYxNy4uNzIwYzk4ZCAxMDA2NDQKKy0tLSBhL2xpYi9DaGFuZ2VMb2cKKysrKyBiL2xpYi9DaGFuZ2VMb2cKK0BAIC03Myw2ICs3Myw5IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBldS1jb25maWcuaCBbISBIQVZFX0JVSUxUSU5fUE9QQ09VTlRdCisrCShfX2J1aWx0aW5fcG9wY291bnQpOiBOZXcgaW5saW5lIGZ1bmN0aW9uLgorKworIAkqIGV1LWNvbmZpZy5oOiBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24uCisgCisgMjAwOS0wMS0xNyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtMTI5LDYgKzEzMiwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChsaWJldV9hX1NPVVJDRVMpOiBBZGQgaXQuCisgCSogc3lzdGVtLmg6IERlY2xhcmUgY3JjMzJfZmlsZS4KKyAKKysyMDA1LTAyLTA3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDQtMzAgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtOiBVc2UgLWZmdW5jdGlvbi1zZWN0aW9ucyBmb3IgeG1hbGxvYy5jLgorZGlmZiAtLWdpdCBhL2xpYi9ldS1jb25maWcuaCBiL2xpYi9ldS1jb25maWcuaAoraW5kZXggNDAwY2RjNi4uODcyZjZiYyAxMDA2NDQKKy0tLSBhL2xpYi9ldS1jb25maWcuaAorKysrIGIvbGliL2V1LWNvbmZpZy5oCitAQCAtMTYzLDYgKzE2MywxNiBAQCBhc20gKCIuc2VjdGlvbiBwcmVkaWN0X2RhdGEsIFwiYXdcIjsgLnByZXZpb3VzXG4iCisgLyogVGhpcyBtYWNybyBpcyB1c2VkIGJ5IHRoZSB0ZXN0cyBjb25kaXRpb25hbGl6ZSBmb3Igc3RhbmRhbG9uZSBidWlsZGluZy4gICovCisgI2RlZmluZSBFTEZVVElMU19IRUFERVIobmFtZSkgPGxpYiMjbmFtZS5oPgorIAorKyNpZm5kZWYgSEFWRV9CVUlMVElOX1BPUENPVU5UCisrIyBkZWZpbmUgX19idWlsdGluX3BvcGNvdW50IGhha21lbV9wb3Bjb3VudAorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorK2hha21lbV9wb3Bjb3VudCAodW5zaWduZWQgaW50IHgpCisreworKyAgLyogSEFLTUVNIDE2OSAqLworKyAgdW5zaWduZWQgaW50IG4gPSB4IC0gKCh4ID4+IDEpICYgMDMzMzMzMzMzMzMzKSAtICgoeCA+PiAyKSAmIDAxMTExMTExMTExMSk7CisrICByZXR1cm4gKChuICsgKG4gPj4gMykpICYgMDMwNzA3MDcwNzA3KSAlIDYzOworK30KKysjZW5kaWYJLyogSEFWRV9CVUlMVElOX1BPUENPVU5UICovCisgCisgI2lmZGVmIFNZTUJPTF9WRVJTSU9OSU5HCisgIyBkZWZpbmUgT0xEX1ZFUlNJT04obmFtZSwgdmVyc2lvbikgXAorZGlmZiAtLWdpdCBhL2xpYmFzbS9DaGFuZ2VMb2cgYi9saWJhc20vQ2hhbmdlTG9nCitpbmRleCA5YjI1YWY5Li4zMmI5ZmQwIDEwMDY0NAorLS0tIGEvbGliYXNtL0NoYW5nZUxvZworKysrIGIvbGliYXNtL0NoYW5nZUxvZworQEAgLTg3LDYgKzg3LDExIEBACisgCSogYXNtX2Vycm9yLmM6IEFkZCBuZXcgZXJyb3IgQVNNX0VfSU9FUlJPUi4KKyAJKiBsaWJhc21QLmg6IEFkZCBBU01fRV9JT0VSUk9SIGRlZmluaXRpb24uCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK2RpZmYgLS1naXQgYS9saWJjcHUvQ2hhbmdlTG9nIGIvbGliY3B1L0NoYW5nZUxvZworaW5kZXggYTIwZjQ0MC4uNWVhMjNiNyAxMDA2NDQKKy0tLSBhL2xpYmNwdS9DaGFuZ2VMb2cKKysrKyBiL2xpYmNwdS9DaGFuZ2VMb2cKK0BAIC01MSw2ICs1MSw5IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBpMzg2X2Rpc2FzbS5jIChpMzg2X2Rpc2FzbSk6IEFkZCBhYm9ydCBhZnRlciBhc3NlcnQtY29uc3RhbnQgZm9yIG9sZAorKwljb21waWxlcnMgdGhhdCBkb24ndCByZWFsaXplIGl0J3Mgbm9yZXR1cm4uCisrCisgCSogTWFrZWZpbGUuYW0gKGkzODZfcGFyc2VfQ0ZMQUdTKTogVXNlIHF1b3RlcyBhcm91bmQgY29tbWFuZAorIAlzdWJzdGl0dXRpb24gdGhhdCBjYW4gcHJvZHVjZSBsZWFkaW5nIHdoaXRlc3BhY2UuCisgCitAQCAtMzgwLDYgKzM4MywxMSBAQAorIAkqIGRlZnMvaTM4Ni5kb2M6IE5ldyBmaWxlLgorIAkqIGRlZnMveDg2XzY0OiBOZXcgZmlsZS4KKyAKKysyMDA1LTA0LTA0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbnN0ZWFkIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wMi0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUgKEFNX0NGTEFHUyk6IEFkZCAtV3VudXNlZCAtV2V4dHJhIC1XZm9ybWF0PTIuCitkaWZmIC0tZ2l0IGEvbGliY3B1L2kzODZfZGlzYXNtLmMgYi9saWJjcHUvaTM4Nl9kaXNhc20uYworaW5kZXggODMyMjQxZi4uYzdhMGRmMCAxMDA2NDQKKy0tLSBhL2xpYmNwdS9pMzg2X2Rpc2FzbS5jCisrKysgYi9saWJjcHUvaTM4Nl9kaXNhc20uYworQEAgLTgyMiw2ICs4MjIsNyBAQCBpMzg2X2Rpc2FzbSAoY29uc3QgdWludDhfdCAqKnN0YXJ0cCwgY29uc3QgdWludDhfdCAqZW5kLCBHRWxmX0FkZHIgYWRkciwKKyAKKyAJCQlkZWZhdWx0OgorIAkJCSAgYXNzZXJ0ICghICJJTlZBTElEIG5vdCBoYW5kbGVkIik7CisrCQkJICBhYm9ydCAoKTsKKyAJCQl9CisgCQkgICAgfQorIAkJICBlbHNlCitkaWZmIC0tZ2l0IGEvbGliZHcvQ2hhbmdlTG9nIGIvbGliZHcvQ2hhbmdlTG9nCitpbmRleCA0ODdlMzRhLi4wNmM3MzdiIDEwMDY0NAorLS0tIGEvbGliZHcvQ2hhbmdlTG9nCisrKysgYi9saWJkdy9DaGFuZ2VMb2cKK0BAIC04ODksNiArODg5LDEwIEBACisgCisgCSogTWFrZWZpbGUuYW0gKGtub3duLWR3YXJmLmgpOiBSdW4gZ2F3ayBvbiBjb25maWcva25vd24tZHdhcmYuYXdrLgorIAorKzIwMTEtMDctMjAgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKysKKysJKiBkd2FyZl9iZWdpbl9lbGYuYzogQWRkIGZhbGxiYWNrIGZvciBiZTY0dG9oIGlmIG5vdCBkZWZpbmVkLgorKworIDIwMTEtMDctMTQgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAKKyAJKiBsaWJkdy5oIChkd2FyZl9vZmZkaWUpOiBGaXggZG9jdW1lbnRhdGlvbiB0byBtZW50aW9uIC5kZWJ1Z19pbmZvLgorQEAgLTEyNDgsNiArMTI1MiwxMCBAQAorIAorIAkqIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlLmM6IEludGVncmF0ZSBEV19BVF9zcGVjaWZpY2F0aW9uIHRvby4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGxpYmR3Lmg6IERpc2FibGUgZXh0ZXJuIGlubGluZXMgZm9yIEdDQyA0LjIuCisrCisgMjAwOS0wOC0xMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBkd2FyZl9nZXRzY29wZXZhci5jOiBVc2UgZHdhcmZfZGllbmFtZS4KK0BAIC0yMDE2LDYgKzIwMjQsMTEgQEAKKyAKKyAyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisgCSogZHdhcmZfZm9ybXJlZl9kaWUuYyAoZHdhcmZfZm9ybXJlZl9kaWUpOiBBZGQgQ1UgaGVhZGVyIG9mZnNldCB0bworIAlmb3JtcmVmIG9mZnNldC4KKyAKK2RpZmYgLS1naXQgYS9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYyBiL2xpYmR3L2R3YXJmX2JlZ2luX2VsZi5jCitpbmRleCA0ZTBkNTkwLi5hNjYxNmExIDEwMDY0NAorLS0tIGEvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMKKysrKyBiL2xpYmR3L2R3YXJmX2JlZ2luX2VsZi5jCitAQCAtNDcsNiArNDcsMTQgQEAKKyAjaWYgVVNFX1pMSUIKKyAjIGluY2x1ZGUgPGVuZGlhbi5oPgorICMgZGVmaW5lIGNyYzMyCQlsb3Nlcl9jcmMzMgorKyMgaWZuZGVmIGJlNjR0b2gKKysjICBpbmNsdWRlIDxieXRlc3dhcC5oPgorKyMgIGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjICAgZGVmaW5lIGJlNjR0b2goeCkgYnN3YXBfNjQgKHgpCisrIyAgZWxzZQorKyMgICBkZWZpbmUgYmU2NHRvaCh4KSAoeCkKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjIGluY2x1ZGUgPHpsaWIuaD4KKyAjIHVuZGVmIGNyYzMyCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGliZHcvbGliZHcuaCBiL2xpYmR3L2xpYmR3LmgKK2luZGV4IDQ3M2UxYTIuLjVhNTExY2QgMTAwNjQ0CistLS0gYS9saWJkdy9saWJkdy5oCisrKysgYi9saWJkdy9saWJkdy5oCitAQCAtMTAwNCw3ICsxMDA0LDcgQEAgZXh0ZXJuIER3YXJmX09PTSBkd2FyZl9uZXdfb29tX2hhbmRsZXIgKER3YXJmICpkYmcsIER3YXJmX09PTSBoYW5kbGVyKTsKKyAKKyAKKyAvKiBJbmxpbmUgb3B0aW1pemF0aW9ucy4gICovCistI2lmZGVmIF9fT1BUSU1JWkVfXworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAvKiBSZXR1cm4gYXR0cmlidXRlIGNvZGUgb2YgZ2l2ZW4gYXR0cmlidXRlLiAgKi8KKyBfX2xpYmR3X2V4dGVybl9pbmxpbmUgdW5zaWduZWQgaW50CisgZHdhcmZfd2hhdGF0dHIgKER3YXJmX0F0dHJpYnV0ZSAqYXR0cikKK2RpZmYgLS1naXQgYS9saWJkd2ZsL0NoYW5nZUxvZyBiL2xpYmR3ZmwvQ2hhbmdlTG9nCitpbmRleCBhNTI1M2UyLi41OWFiZmFjIDEwMDY0NAorLS0tIGEvbGliZHdmbC9DaGFuZ2VMb2cKKysrKyBiL2xpYmR3ZmwvQ2hhbmdlTG9nCitAQCAtNzA0LDYgKzcwNCwyMSBAQAorIAkoZHdmbF9tb2R1bGVfYWRkcnN5bSkgKGlfdG9fc3ltZmlsZSk6IE5ldyBmdW5jdGlvbi4KKyAJKGR3ZmxfbW9kdWxlX2FkZHJzeW0pIChzZWFyY2hfdGFibGUpOiBVc2UgaXQuCisgCisrMjAxMy0xMS0wOSAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorKworKwlPbGRlciBPUyBjb21wYXRpYmlsaXR5IGJpdHMuCisrCSogbGludXgtY29yZS1hdHRhY2guYyAoYmU2NHRvaCwgbGU2NHRvaCwgYmUzMnRvaCwgbGUzMnRvaCk6IFByb3ZpZGUKKysJZmFsbGJhY2tzIGlmIG5vdCBkZWZpbmVkIGJ5IHN5c3RlbS4KKysKKysyMDEzLTExLTA5ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisrCisrCUhhbmRsZSBULXN0b3BwZWQgZGV0YWNoIGZvciBvbGQga2VybmVscy4KKysJKiBsaW51eC1waWQtYXR0YWNoLmMgKHN0cnVjdCBwaWRfYXJnKTogTmV3IGZpZWxkIHN0b3BwZWQuCisrCShwdHJhY2VfYXR0YWNoKTogTmV3IHBhcmFtZXRlciBzdG9wcGVkcC4gIFNldCBpdCBhcHByb3ByaWF0ZWx5LgorKwkocGlkX3NldF9pbml0aWFsX3JlZ2lzdGVycyk6IFBhc3MgdGhlIG5ldyBmaWVsZC4KKysJKHBpZF90aHJlYWRfZGV0YWNoKTogSGFuZGxlIHRoZSBjYXNlIG9mIFNUT1BQRUQgZm9yIG9sZCBrZXJuZWxzLgorKwkoX19saWJkd2ZsX2F0dGFjaF9zdGF0ZV9mb3JfcGlkKTogSW5pdGlhbGl6ZSBTVE9QUEVELgorKworIDIwMTMtMTEtMDcgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKyAJICAgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAKK0BAIC0yNDY5LDYgKzI0ODQsMTEgQEAKKyAKKyAyMDA1LTA3LTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworKzIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisgCSogTWFrZWZpbGUuYW0gKG5vaW5zdF9IRUFERVJTKTogQWRkIGxvYzJjLmMuCisgCisgCSogdGVzdDIuYyAobWFpbik6IENoZWNrIHNzY2FuZiByZXN1bHQgdG8gcXVpZXQgd2FybmluZy4KK2RpZmYgLS1naXQgYS9saWJkd2ZsL2xpbnV4LWNvcmUtYXR0YWNoLmMgYi9saWJkd2ZsL2xpbnV4LWNvcmUtYXR0YWNoLmMKK2luZGV4IDVhN2IzYjMuLmQwNWFjN2UgMTAwNjQ0CistLS0gYS9saWJkd2ZsL2xpbnV4LWNvcmUtYXR0YWNoLmMKKysrKyBiL2xpYmR3ZmwvbGludXgtY29yZS1hdHRhY2guYworQEAgLTI5LDYgKzI5LDM1IEBACisgI2luY2x1ZGUgImxpYmR3ZmxQLmgiCisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgInN5c3RlbS5oIgorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorKyMgaWZuZGVmIGJlNjR0b2gKKysjICBkZWZpbmUgYmU2NHRvaCh4KSBic3dhcF82NCAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGU2NHRvaAorKyMgIGRlZmluZSBsZTY0dG9oKHgpICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBiZTMydG9oCisrIyAgZGVmaW5lIGJlMzJ0b2goeCkgYnN3YXBfMzIgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGxlMzJ0b2gKKysjICBkZWZpbmUgbGUzMnRvaCh4KSAoeCkKKysjIGVuZGlmCisrI2Vsc2UKKysjIGlmbmRlZiBiZTY0dG9oCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGxlNjR0b2gKKysjICBkZWZpbmUgbGU2NHRvaCh4KSBic3dhcF82NCAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgYmUzMnRvaAorKyMgIGRlZmluZSBiZTMydG9oKHgpICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTMydG9oCisrIyAgZGVmaW5lIGxlMzJ0b2goeCkgYnN3YXBfMzIgKHgpCisrIyBlbmRpZgorKyNlbmRpZgorIAorICNpbmNsdWRlICIuLi9saWJkdy9tZW1vcnktYWNjZXNzLmgiCisgCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMgYi9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworaW5kZXggYWU3MTcwMi4uMDc2YjJjMyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCisrKysgYi9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworQEAgLTI1NSw2ICsyNTUsMTEgQEAgdm9pZAorIGludGVybmFsX2Z1bmN0aW9uCisgX19saWJkd2ZsX3B0cmFjZV9kZXRhY2ggKHBpZF90IHRpZCwgYm9vbCB0aWRfd2FzX3N0b3BwZWQpCisgeworKyAgLy8gT2xkZXIga2VybmVscyAodGVzdGVkIGtlcm5lbC0yLjYuMTgtMzQ4LjEyLjEuZWw1Lng4Nl82NCkgbmVlZCBzcGVjaWFsCisrICAvLyBoYW5kbGluZyBvZiB0aGUgZGV0YWNobWVudCB0byBrZWVwIHRoZSBwcm9jZXNzIFN0YXRlOiBUIChzdG9wcGVkKS4KKysgIGlmICh0aWRfd2FzX3N0b3BwZWQpCisrICAgIHN5c2NhbGwgKF9fTlJfdGtpbGwsIHRpZCwgU0lHU1RPUCk7CisrCisgICAvKiBUaGlzIGhhbmRsaW5nIGlzIG5lZWRlZCBvbmx5IG9uIG9sZGVyIExpbnV4IGtlcm5lbHMgc3VjaCBhcworICAgICAgMi42LjMyLTM1OC4yMy4yLmVsNi5wcGM2NC4gIExhdGVyIGtlcm5lbHMgc3VjaCBhcworICAgICAgMy4xMS43LTIwMC5mYzE5Lng4Nl82NCByZW1lbWJlciB0aGUgVCAoc3RvcHBlZCkgc3RhdGUKK0BAIC0yNjIsNiArMjY3LDE1IEBAIF9fbGliZHdmbF9wdHJhY2VfZGV0YWNoIChwaWRfdCB0aWQsIGJvb2wgdGlkX3dhc19zdG9wcGVkKQorICAgICAgUFRSQUNFX0RFVEFDSC4gICovCisgICBwdHJhY2UgKFBUUkFDRV9ERVRBQ0gsIHRpZCwgTlVMTCwKKyAJICAodm9pZCAqKSAoaW50cHRyX3QpICh0aWRfd2FzX3N0b3BwZWQgPyBTSUdTVE9QIDogMCkpOworKworKyAgaWYgKHRpZF93YXNfc3RvcHBlZCkKKysgICAgeworKyAgICAgIC8vIFdhaXQgdGlsbCB0aGUgU0lHU1RPUCBzZXR0bGVzIGRvd24uCisrICAgICAgaW50IGk7CisrICAgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKQorKwlpZiAobGludXhfcHJvY19waWRfaXNfc3RvcHBlZCAodGlkKSkKKysJICBicmVhazsKKysgICAgfQorIH0KKyAKKyBzdGF0aWMgdm9pZAorZGlmZiAtLWdpdCBhL2xpYmVibC9DaGFuZ2VMb2cgYi9saWJlYmwvQ2hhbmdlTG9nCitpbmRleCA1MWFlNjBmLi5hZWUwMjE3IDEwMDY0NAorLS0tIGEvbGliZWJsL0NoYW5nZUxvZworKysrIGIvbGliZWJsL0NoYW5nZUxvZworQEAgLTc4MCw2ICs3ODAsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZWJsXypfc29fU09VUkNFUyk6IFNldCB0byAkKCpfU1JDUykgc28gZGVwZW5kZW5jeQorIAl0cmFja2luZyB3b3JrcyByaWdodC4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxpYmVibF94ODZfNjQubWFwOiBBZGQgeDg2XzY0X2NvcmVfbm90ZS4KK2RpZmYgLS1naXQgYS9saWJlbGYvQ2hhbmdlTG9nIGIvbGliZWxmL0NoYW5nZUxvZworaW5kZXggMzAwMTdjZC4uOWNhOWM3MyAxMDA2NDQKKy0tLSBhL2xpYmVsZi9DaGFuZ2VMb2cKKysrKyBiL2xpYmVsZi9DaGFuZ2VMb2cKK0BAIC0zOTgsNiArMzk4LDExIEBACisgCisgCSogZWxmLWtub3dsZWRnZS5oIChTRUNUSU9OX1NUUklQX1ApOiBSZW1vdmUgPCBTSFRfTlVNIGNoZWNrLgorIAorKzIwMTEtMDMtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogZ251aGFzaF94bGF0ZS5oIChlbGZfY3Z0X2dudWhhc2gpOiBBdm9pZCBwb3N0LWluY3JlbWVudCBpbiBic3dhcF8zMgorKwlhcmd1bWVudCwgc2luY2Ugc29tZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGJ1Z2d5IG1hY3Jvcy4KKysKKyAyMDExLTAyLTI2ICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCisgCSogZWxmX2VuZC5jIChlbGZfZW5kKTogQ2FsbCByd2xvY2tfdW5sb2NrIGJlZm9yZSByd2xvY2tfZmluaS4KK0BAIC0xMDc1LDYgKzEwODAsMTEgQEAKKyAKKyAJKiBlbGYuaDogVXBkYXRlIGZyb20gZ2xpYmMuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGVsZl9iZWdpbi5jIChyZWFkX2ZpbGUpIFtfTVVERkxBUF06IERvbid0IHVzZSBtbWFwIGZvciBub3cuCitkaWZmIC0tZ2l0IGEvbGliZWxmL2NvbW1vbi5oIGIvbGliZWxmL2NvbW1vbi5oCitpbmRleCA3NDRmMWJiLi4xODVlYTU5IDEwMDY0NAorLS0tIGEvbGliZWxmL2NvbW1vbi5oCisrKysgYi9saWJlbGYvY29tbW9uLmgKK0BAIC0xMzksNyArMTM5LDcgQEAgbGliZWxmX3JlbGVhc2VfYWxsIChFbGYgKmVsZikKKyAgIChWYXIpID0gKHNpemVvZiAoVmFyKSA9PSAxCQkJCQkJICAgICAgXAorIAkgICA/ICh1bnNpZ25lZCBjaGFyKSAoVmFyKQkJCQkJICAgICAgXAorIAkgICA6IChzaXplb2YgKFZhcikgPT0gMgkJCQkJCSAgICAgIFwKKy0JICAgICAgPyBic3dhcF8xNiAoVmFyKQkJCQkJCSAgICAgIFwKKysJICAgICAgPyAodW5zaWduZWQgc2hvcnQgaW50KSBic3dhcF8xNiAoVmFyKQkJCSAgICAgIFwKKyAJICAgICAgOiAoc2l6ZW9mIChWYXIpID09IDQJCQkJCSAgICAgIFwKKyAJCSA/IGJzd2FwXzMyIChWYXIpCQkJCQkgICAgICBcCisgCQkgOiBic3dhcF82NCAoVmFyKSkpKQorQEAgLTE0OCw3ICsxNDgsNyBAQCBsaWJlbGZfcmVsZWFzZV9hbGwgKEVsZiAqZWxmKQorICAgKERzdCkgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitkaWZmIC0tZ2l0IGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaCBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK2luZGV4IDA0ZDljYTEuLjNlMjU5MzYgMTAwNjQ0CistLS0gYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oCisrKysgYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgdmVyc2lvbmluZyBpbmZvcm1hdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDExIFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDA2LgorIAorQEAgLTY5LDcgKzY5LDkgQEAgZWxmX2N2dF9nbnVoYXNoICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4sIGludCBlbmNvZGUpCisgICBkZXN0MzIgPSAoRWxmMzJfV29yZCAqKSAmZGVzdDY0W2JpdG1hc2tfd29yZHNdOworICAgd2hpbGUgKGxlbiA+PSA0KQorICAgICB7CistICAgICAgKmRlc3QzMisrID0gYnN3YXBfMzIgKCpzcmMzMisrKTsKKysgICAgICAqZGVzdDMyID0gYnN3YXBfMzIgKCpzcmMzMik7CisrICAgICAgKytkZXN0MzI7CisrICAgICAgKytzcmMzMjsKKyAgICAgICBsZW4gLT0gNDsKKyAgICAgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvQ2hhbmdlTG9nIGIvc3JjL0NoYW5nZUxvZworaW5kZXggMTVlNmZhZS4uNzg1MzVjOCAxMDA2NDQKKy0tLSBhL3NyYy9DaGFuZ2VMb2cKKysrKyBiL3NyYy9DaGFuZ2VMb2cKK0BAIC0xNTk4LDggKzE1OTgsMTYgQEAKKyAJKiByZWFkZWxmLmMgKGF0dHJfY2FsbGJhY2spOiBVc2UgcHJpbnRfYmxvY2sgb25seSB3aGVuIHdlIGRvbid0IHVzZQorIAlwcmludF9vcHMuCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsZC5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogc3RyaW5ncy5jIChyZWFkX2Jsb2NrKTogQ29uZGl0aW9uYWxpemUgcG9zaXhfZmFkdmlzZSB1c2UKKysJb24gW1BPU0lYX0ZBRFZfU0VRVUVOVElBTF0uCisrCUZyb20gUGV0ciBTYWxpbmdlciA8UGV0ci5TYWxpbmdlckBzZXpuYW0uY3o+LgorKworIAkqIGFyLmMgKGRvX29wZXJfZXh0cmFjdCk6IFVzZSBwYXRoY29uZiBpbnN0ZWFkIG9mIHN0YXRmcy4KKyAKKyAyMDA5LTA4LTAxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KK0BAIC0xNzYzLDYgKzE3NzEsOCBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfZnJhbWVfc2VjdGlvbik6IFVzZSB0IGluc3RlYWQgb2YgaiBmb3JtYXRzCisgCWZvciBwdHJkaWZmX3QgT0ZGU0VULgorIAorKwkqIGFkZHIybGluZS5jIChoYW5kbGVfYWRkcmVzcyk6IFVzZSAlYSBpbnN0ZWFkIG9mICVtIGZvciBjb21wYXRpYmlsaXR5LgorKworIDIwMDktMDEtMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfcHJvZ3JhbV9oZWFkZXIpOiBGaXggdHlwbyBpbiAuZWhfZnJhbWVfaGRyIHNlY3Rpb24KK0BAIC0xOTQ2LDYgKzE5NTYsMTEgQEAKKyAJdGhhdCBtYXRjaGVzIGl0cyBQVF9MT0FEJ3MgcF9mbGFncyAmfiBQRl9XLiAgT24gc3BhcmMsIFBGX1ggcmVhbGx5CisgCWlzIHZhbGlkIGluIFJFTFJPLgorIAorKzIwMDgtMDMtMDEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogcmVhZGVsZi5jIChkdW1wX2FyY2hpdmVfaW5kZXgpOiBUd2VhayBwb3J0YWJpbGl0eSBoYWNrCisrCXRvIG1hdGNoIFtfX0dOVUNfXyA8IDRdIHRvby4KKysKKyAyMDA4LTAyLTI5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHJlYWRlbGYuYyAocHJpbnRfYXR0cmlidXRlcyk6IEFkZCBhIGNhc3QuCitAQCAtMjE5Nyw2ICsyMjEyLDggQEAKKyAKKyAJKiByZWFkZWxmLmMgKGhleF9kdW1wKTogRml4IHJvdW5kaW5nIGVycm9yIGluIHdoaXRlc3BhY2UgY2FsY3VsYXRpb24uCisgCisrCSogTWFrZWZpbGUuYW0gKHJlYWRlbGZfbm9fV2Vycm9yKTogTmV3IHZhcmlhYmxlLgorKworIDIwMDctMTAtMTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogbWFrZS1kZWJ1Zy1hcmNoaXZlLmluOiBOZXcgZmlsZS4KK0BAIC0yNjM2LDYgKzI2NTMsMTAgQEAKKyAJKiBlbGZsaW50LmMgKHZhbGlkX2VfbWFjaGluZSk6IEFkZCBFTV9BTFBIQS4KKyAJUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIEFpY2hpbmdlciA8R3JlZWswQGdteC5uZXQ+LgorIAorKwkqIHN0cmluZ3MuYyAobWFwX2ZpbGUpOiBEZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIHRvCisrCU1BRFZfU0VRVUVOVElBTCBpZiB1bmRlZmluZWQuICAJRG9uJ3QgY2FsbCBwb3NpeF9tYWR2aXNlCisrCWlmIG5laXRoZXIgaXMgZGVmaW5lZC4KKysKKyAyMDA2LTA4LTA4ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX2R5bmFtaWMpOiBEb24ndCByZXF1aXJlIERUX0hBU0ggZm9yIERUX1NZTVRBQi4KK0BAIC0yNzEyLDYgKzI3MzMsMTAgQEAKKyAJKiBNYWtlZmlsZS5hbTogQWRkIGhhY2tzIHRvIGNyZWF0ZSBkZXBlbmRlbmN5IGZpbGVzIGZvciBub24tZ2VuZXJpYworIAlsaW5rZXIuCisgCisrMjAwNi0wNC0wNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBzdHJpbmdzLmMgKE1BUF9QT1BVTEFURSk6IERlZmluZSB0byAwIGlmIHVuZGVmaW5lZC4KKysKKyAyMDA2LTA2LTEyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBsZGdlbmVyaWMuYyAobGRfZ2VuZXJpY19nZW5lcmF0ZV9zZWN0aW9ucyk6IERvbid0IGNyZWF0ZSAuaW50ZXJwCitAQCAtMzA2MCw2ICszMDg1LDExIEBACisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19sb2Nfc2VjdGlvbik6IEZpeCBpbmRlbnRhdGlvbiBmb3IgbGFyZ2VyCisgCWFkZHJlc3Mgc2l6ZS4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMzAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogcmVhZGVsZi5jIChwcmludF9kZWJ1Z19saW5lX3NlY3Rpb24pOiBQcmludCBzZWN0aW9uIG9mZnNldCBvZiBlYWNoCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCBkYmFjM2ViLi45MDI4YWExIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC05MCw2ICs5MCwxMSBAQCBlbmRpZgorIGxkZ2VuZXJpY19ub19XdW51c2VkID0geWVzCisgbGRnZW5lcmljX25vX1dzdGFja191c2FnZSA9IHllcworIAorKyMgQnVnZ3kgb2xkIGNvbXBpbGVycyBvciBsaWJjIGhlYWRlcnMuCisrcmVhZGVsZl9ub19XZXJyb3IgPSB5ZXMKKytzdHJpbmdzX25vX1dlcnJvciA9IHllcworK2FkZHIybGluZV9ub19XZm9ybWF0ID0geWVzCisrCisgIyBCYWQsIGJhZCBzdGFjayB1c2FnZS4uLgorIHJlYWRlbGZfbm9fV3N0YWNrX3VzYWdlID0geWVzCisgbm1fbm9fV3N0YWNrX3VzYWdlID0geWVzCitkaWZmIC0tZ2l0IGEvc3JjL2FkZHIybGluZS5jIGIvc3JjL2FkZHIybGluZS5jCitpbmRleCAwY2U4NTRmLi5kMmQwYzhjIDEwMDY0NAorLS0tIGEvc3JjL2FkZHIybGluZS5jCisrKysgYi9zcmMvYWRkcjJsaW5lLmMKK0BAIC02MjIsMTAgKzYyMiwxMCBAQCBoYW5kbGVfYWRkcmVzcyAoY29uc3QgY2hhciAqc3RyaW5nLCBEd2ZsICpkd2ZsKQorICAgICAgIGJvb2wgcGFyc2VkID0gZmFsc2U7CisgICAgICAgaW50IGksIGo7CisgICAgICAgY2hhciAqbmFtZSA9IE5VTEw7CistICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKysgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorIAkgICYmIHN0cmluZ1tpXSA9PSAnXDAnKQorIAlwYXJzZWQgPSBhZGp1c3RfdG9fc2VjdGlvbiAobmFtZSwgJmFkZHIsIGR3ZmwpOworLSAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlbVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisgCXsKKyAJZGVmYXVsdDoKKyAJICBicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvZmluZHRleHRyZWwuYyBiL3NyYy9maW5kdGV4dHJlbC5jCitpbmRleCAyNjRhMDZiLi5kN2RlMjAyIDEwMDY0NAorLS0tIGEvc3JjL2ZpbmR0ZXh0cmVsLmMKKysrKyBiL3NyYy9maW5kdGV4dHJlbC5jCitAQCAtNTAyLDcgKzUwMiwxMSBAQCBwdHJjb21wYXJlIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisgCisgCisgc3RhdGljIHZvaWQKKy1jaGVja19yZWwgKHNpemVfdCBuc2VnbWVudHMsIHN0cnVjdCBzZWdtZW50cyBzZWdtZW50c1tuc2VnbWVudHNdLAorK2NoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzWworKyNpZiBfX0dOVUNfXyA+PSA0CisrCQkJCQkJICAgICAgbnNlZ21lbnRzCisrI2VuZGlmCisrCSAgIF0sCisgCSAgIEdFbGZfQWRkciBhZGRyLCBFbGYgKmVsZiwgRWxmX1NjbiAqc3ltc2NuLCBEd2FyZiAqZHcsCisgCSAgIGNvbnN0IGNoYXIgKmZuYW1lLCBib29sIG1vcmVfdGhhbl9vbmUsIHZvaWQgKiprbm93bnNyY3MpCisgeworZGlmZiAtLWdpdCBhL3NyYy9sZC5oIGIvc3JjL2xkLmgKK2luZGV4IDI5ZjQwMzEuLjg2OTVjMzEgMTAwNjQ0CistLS0gYS9zcmMvbGQuaAorKysrIGIvc3JjL2xkLmgKK0BAIC0xMTE0LDYgKzExMTQsNyBAQCBleHRlcm4gYm9vbCBkeW5hbWljYWxseV9saW5rZWRfcCAodm9pZCk7CisgCisgLyogQ2hlY2tlZCB3aGV0aGVyIHRoZSBzeW1ib2wgaXMgdW5kZWZpbmVkIGFuZCByZWZlcmVuY2VkIGZyb20gYSBEU08uICAqLworIGV4dGVybiBib29sIGxpbmtlZF9mcm9tX2Rzb19wIChzdHJ1Y3Qgc2NuaW5mbyAqc2NuaW5mbywgc2l6ZV90IHN5bWlkeCk7CisrI2lmIGRlZmluZWQgX19PUFRJTUlaRV9fICYmICEoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyKQorICNpZmRlZiBfX0dOVUNfU1REQ19JTkxJTkVfXworIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisgI2VuZGlmCitAQCAtMTEzMSw1ICsxMTMyLDYgQEAgbGlua2VkX2Zyb21fZHNvX3AgKHN0cnVjdCBzY25pbmZvICpzY25pbmZvLCBzaXplX3Qgc3ltaWR4KQorIAorICAgcmV0dXJuIHN5bS0+ZGVmaW5lZCAmJiBzeW0tPmluX2RzbzsKKyB9CisrI2VuZGlmCS8qIE9wdGltaXppbmcgYW5kIG5vdCBHQ0MgNC4yLiAgKi8KKyAKKyAjZW5kaWYJLyogbGQuaCAqLworZGlmZiAtLWdpdCBhL3NyYy9yZWFkZWxmLmMgYi9zcmMvcmVhZGVsZi5jCitpbmRleCBiNGNiM2E4Li42MDZkMjIwIDEwMDY0NAorLS0tIGEvc3JjL3JlYWRlbGYuYworKysrIGIvc3JjL3JlYWRlbGYuYworQEAgLTQzNjQsMTAgKzQzNjQsMTIgQEAgbGlzdHB0cl9iYXNlIChzdHJ1Y3QgbGlzdHB0ciAqcCkKKyAgIHJldHVybiBiYXNlOworIH0KKyAKKytzdGF0aWMgY29uc3QgY2hhciAqbGlzdHB0cl9uYW1lOworKworIHN0YXRpYyBpbnQKKy1jb21wYXJlX2xpc3RwdHIgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZykKKytjb21wYXJlX2xpc3RwdHIgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCisgeworLSAgY29uc3QgY2hhciAqbmFtZSA9IGFyZzsKKysgIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWUgPSBsaXN0cHRyX25hbWU7CisgICBzdHJ1Y3QgbGlzdHB0ciAqcDEgPSAodm9pZCAqKSBhOworICAgc3RydWN0IGxpc3RwdHIgKnAyID0gKHZvaWQgKikgYjsKKyAKK0BAIC00NDYzLDggKzQ0NjUsMTEgQEAgc3RhdGljIHZvaWQKKyBzb3J0X2xpc3RwdHIgKHN0cnVjdCBsaXN0cHRyX3RhYmxlICp0YWJsZSwgY29uc3QgY2hhciAqbmFtZSkKKyB7CisgICBpZiAodGFibGUtPm4gPiAwKQorLSAgICBxc29ydF9yICh0YWJsZS0+dGFibGUsIHRhYmxlLT5uLCBzaXplb2YgdGFibGUtPnRhYmxlWzBdLAorLQkgICAgICZjb21wYXJlX2xpc3RwdHIsICh2b2lkICopIG5hbWUpOworKyAgICB7CisrICAgICAgbGlzdHB0cl9uYW1lID0gbmFtZTsKKysgICAgICBxc29ydCAodGFibGUtPnRhYmxlLCB0YWJsZS0+biwgc2l6ZW9mIHRhYmxlLT50YWJsZVswXSwKKysJICAgICAmY29tcGFyZV9saXN0cHRyKTsKKysgICAgfQorIH0KKyAKKyBzdGF0aWMgYm9vbAorQEAgLTk1NjEsNyArOTU2Niw3IEBAIGR1bXBfYXJjaGl2ZV9pbmRleCAoRWxmICplbGYsIGNvbnN0IGNoYXIgKmZuYW1lKQorIAkgIGlmICh1bmxpa2VseSAoZWxmX3JhbmQgKGVsZiwgYXNfb2ZmKSA9PSAwKQorIAkgICAgICB8fCB1bmxpa2VseSAoKHN1YmVsZiA9IGVsZl9iZWdpbiAoLTEsIEVMRl9DX1JFQURfTU1BUCwgZWxmKSkKKyAJCQkgICA9PSBOVUxMKSkKKy0jaWYgX19HTElCQ19fIDwgMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fIDwgNykKKysjaWYgX19HTElCQ19fIDwgMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fIDwgNykgfHwgX19HTlVDX18gPCA0CisgCSAgICB3aGlsZSAoMSkKKyAjZW5kaWYKKyAJICAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKK2RpZmYgLS1naXQgYS9zcmMvc3RyaW5ncy5jIGIvc3JjL3N0cmluZ3MuYworaW5kZXggYjJiY2U3Yi4uZmUwYWI2YyAxMDA2NDQKKy0tLSBhL3NyYy9zdHJpbmdzLmMKKysrKyBiL3NyYy9zdHJpbmdzLmMKK0BAIC00Myw2ICs0MywxMCBAQAorIAorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKysjaWZuZGVmIE1BUF9QT1BVTEFURQorKyMgZGVmaW5lIE1BUF9QT1BVTEFURSAwCisrI2VuZGlmCisrCisgCisgLyogUHJvdG90eXBlcyBvZiBsb2NhbCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBpbnQgcmVhZF9mZCAoaW50IGZkLCBjb25zdCBjaGFyICpmbmFtZSwgb2ZmNjRfdCBmZGxlbik7CitAQCAtNDg5LDggKzQ5MywxMyBAQCBtYXBfZmlsZSAoaW50IGZkLCBvZmY2NF90IHN0YXJ0X29mZiwgb2ZmNjRfdCBmZGxlbiwgc2l6ZV90ICptYXBfc2l6ZXApCisgCQkgICAgZmQsIHN0YXJ0X29mZik7CisgICAgICAgaWYgKG1lbSAhPSBNQVBfRkFJTEVEKQorIAl7CisrI2lmICFkZWZpbmVkIFBPU0lYX01BRFZfU0VRVUVOVElBTCAmJiBkZWZpbmVkIE1BRFZfU0VRVUVOVElBTAorKyMgZGVmaW5lIFBPU0lYX01BRFZfU0VRVUVOVElBTCBNQURWX1NFUVVFTlRJQUwKKysjZW5kaWYKKysjaWZkZWYgUE9TSVhfTUFEVl9TRVFVRU5USUFMCisgCSAgLyogV2Ugd2lsbCBnbyB0aHJvdWdoIHRoZSBtYXBwaW5nIHNlcXVlbnRpYWxseS4gICovCisgCSAgKHZvaWQpIHBvc2l4X21hZHZpc2UgKG1lbSwgbWFwX3NpemUsIFBPU0lYX01BRFZfU0VRVUVOVElBTCk7CisrI2VuZGlmCisgCSAgYnJlYWs7CisgCX0KKyAgICAgICBpZiAoZXJybm8gIT0gRUlOVkFMICYmIGVycm5vICE9IEVOT01FTSkKK0BAIC01ODEsOSArNTkwLDExIEBAIHJlYWRfYmxvY2sgKGludCBmZCwgY29uc3QgY2hhciAqZm5hbWUsIG9mZjY0X3QgZmRsZW4sIG9mZjY0X3QgZnJvbSwgb2ZmNjRfdCB0bykKKyAgICAgICBlbGZtYXBfb2ZmID0gZnJvbSAmIH4ocHMgLSAxKTsKKyAgICAgICBlbGZtYXBfYmFzZSA9IGVsZm1hcCA9IG1hcF9maWxlIChmZCwgZWxmbWFwX29mZiwgZmRsZW4sICZlbGZtYXBfc2l6ZSk7CisgCisrI2lmZGVmIFBPU0lYX0ZBRFZfU0VRVUVOVElBTAorICAgICAgIGlmICh1bmxpa2VseSAoZWxmbWFwID09IE1BUF9GQUlMRUQpKQorIAkvKiBMZXQgdGhlIGtlcm5lbCBrbm93IHdlIGFyZSBnb2luZyB0byByZWFkIGV2ZXJ5dGhpbmcgaW4gc2VxdWVuY2UuICAqLworIAkodm9pZCkgcG9zaXhfZmFkdmlzZSAoZmQsIDAsIDAsIFBPU0lYX0ZBRFZfU0VRVUVOVElBTCk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIGlmICh1bmxpa2VseSAoZWxmbWFwID09IE1BUF9GQUlMRUQpKQorZGlmZiAtLWdpdCBhL3NyYy9zdHJpcC5jIGIvc3JjL3N0cmlwLmMKK2luZGV4IDVlNjkzMzQuLjhiZDE3OTAgMTAwNjQ0CistLS0gYS9zcmMvc3RyaXAuYworKysrIGIvc3JjL3N0cmlwLmMKK0BAIC00NCw2ICs0NCwxMiBAQAorICNpbmNsdWRlIDxsaWJlYmwuaD4KKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmZGVmIEhBVkVfRlVUSU1FUworKyMgZGVmaW5lIEZVVElNRVMoZmQsIGZuYW1lLCB0dnApIGZ1dGltZXMgKGZkLCB0dnApCisrI2Vsc2UKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSB1dGltZXMgKGZuYW1lLCB0dnApCisrI2VuZGlmCisrCisgdHlwZWRlZiB1aW50OF90IEdFbGZfQnl0ZTsKKyAKKyAvKiBOYW1lIGFuZCB2ZXJzaW9uIG9mIHByb2dyYW0uICAqLworZGlmZiAtLWdpdCBhL3Rlc3RzL0NoYW5nZUxvZyBiL3Rlc3RzL0NoYW5nZUxvZworaW5kZXggMTk4NzhhYy4uNjgxNTAyOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL0NoYW5nZUxvZworKysrIGIvdGVzdHMvQ2hhbmdlTG9nCitAQCAtNjA5LDYgKzYwOSwxMyBAQAorIAorIDIwMTMtMTItMDIgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKyAKKysJSGFuZGxlIFQtc3RvcHBlZCBkZXRhY2ggZm9yIG9sZCBrZXJuZWxzLgorKwkqIGJhY2t0cmFjZS5jOiBJbmNsdWRlIHN5cy9zeXNjYWxsLmguCisrCShsaW51eF9wcm9jX3BpZF9pc19zdG9wcGVkKTogTmV3IGZ1bmN0aW9uLgorKwkocHRyYWNlX2RldGFjaF9zdG9wcGVkKTogSGFuZGxlIG9sZCBrZXJuZWxzLgorKworKzIwMTMtMTItMDIgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKysKKyAJKiBNYWtlZmlsZS5hbSAoY2hlY2tfUFJPR1JBTVMpOiBBZGQgYmFja3RyYWNlLCBiYWNrdHJhY2UtY2hpbGQsCisgCWJhY2t0cmFjZS1kYXRhIGFuZCBiYWNrdHJhY2UtZHdhcmYuCisgCShCVUlMVF9TT1VSQ0VTLCBjbGVhbi1sb2NhbCwgYmFja3RyYWNlLWNoaWxkLWJpYXJjaCk6IE5ldy4KK0BAIC0xNDczLDYgKzE0ODAsOCBAQAorIAorIDIwMDgtMDEtMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogbGluZTJhZGRyLmMgKG1haW4pOiBSZXZlcnQgbGFzdCBjaGFuZ2UuCisrCisgCSogdGVzdGZpbGU0NS5TLmJ6MjogQWRkIHRlc3RzIGZvciBjbHRxLCBjcXRvLgorIAkqIHRlc3RmaWxlNDUuZXhwZWN0LmJ6MjogQWRqdXN0LgorIAorQEAgLTIxODEsNiArMjE5MCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBydW4tZWxmbGludC10ZXN0LnNoLgorIAkoRVhUUkFfRElTVCk6IEFkZCBydW4tZWxmbGludC10ZXN0LnNoIGFuZCB0ZXN0ZmlsZTE4LmJ6Mi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMjQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGdldC1maWxlcy5jIChtYWluKTogVXNlIGNvcnJlY3QgZm9ybWF0IHNwZWNpZmllci4KK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA0MjVmOGNkLi42OTc2MGE0IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMzgyLDYgKzM4Miw3IEBAIGdldF9saW5lc19MREFERCA9ICQobGliZHcpICQobGliZWxmKQorIGdldF9maWxlc19MREFERCA9ICQobGliZHcpICQobGliZWxmKQorIGdldF9hcmFuZ2VzX0xEQUREID0gJChsaWJkdykgJChsaWJlbGYpCisgYWxsZmN0c19MREFERCA9ICQobGliZHcpICQobGliZWxmKQorK2xpbmUyYWRkcl9ub19XZm9ybWF0ID0geWVzCisgbGluZTJhZGRyX0xEQUREID0gJChsaWJkdykgJChhcmdwX0xEQUREKQorIGFkZHJzY29wZXNfTERBREQgPSAkKGxpYmR3KSAkKGFyZ3BfTERBREQpCisgZnVuY3Njb3Blc19MREFERCA9ICQobGliZHcpICQoYXJncF9MREFERCkKK2RpZmYgLS1naXQgYS90ZXN0cy9iYWNrdHJhY2UuYyBiL3Rlc3RzL2JhY2t0cmFjZS5jCitpbmRleCBhYmQ1NmFiLi42YTdjNjYxIDEwMDY0NAorLS0tIGEvdGVzdHMvYmFja3RyYWNlLmMKKysrKyBiL3Rlc3RzL2JhY2t0cmFjZS5jCitAQCAtMzYsNiArMzYsNyBAQAorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8YXJncC5oPgorKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorICNpbmNsdWRlIEVMRlVUSUxTX0hFQURFUihkd2ZsKQorIAorICNpZm5kZWYgX19saW51eF9fCitkaWZmIC0tZ2l0IGEvdGVzdHMvbGluZTJhZGRyLmMgYi90ZXN0cy9saW5lMmFkZHIuYworaW5kZXggZTBkNjVkMy4uN2MxNzFiOSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2xpbmUyYWRkci5jCisrKysgYi90ZXN0cy9saW5lMmFkZHIuYworQEAgLTEyNCw3ICsxMjQsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICB7CisgICAgICAgc3RydWN0IGFyZ3MgYSA9IHsgLmFyZyA9IGFyZ3ZbY250XSB9OworIAorLSAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVtW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVhW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorIAl7CisgCWRlZmF1bHQ6CisgCWNhc2UgMDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg1MTljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb206IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KK1N1YmplY3Q6IFVzZSAlbVsgaW5zdGVhZCBvZiAlYVsgaW4gc2NhbmYoKQorCislYSB3YXMgYSBnbnUgZXh0ZW50aW9uLCBidXQgQzk5IG1hZGUgdGhpcyBhIGZsb2F0LiAgU28gaXQgZ290CitjaGFuZ2VkIHRvICVtIChzdXBwb3J0ZWQgYnkgZ2xpYmMgMi43KSwgYnV0ICVhWyBhbmQgJWFzIGFyZQorc3RpbGwgc3VwcG9ydGVkIGJ5IGdsaWJjLiAgVGhlIHBvcnRhYmlsaXR5IGJyYW5jaCBjaGFuZ2VkIHRoaXMKK2Zyb20gJW0gdG8gJWEgYWdhaW4gc2luY2UgdGhhdCdzIHN1cHBvcnRlZCBieSBtb3JlIHZlcnNpb25zIG9mCitnbGliYy4gIEhvd2V2ZXIgZ2NjIGdpdmVzIGEgd2FybmluZyBhYm91dCB0aGlzIHVzaW5nIC1XZm9ybWF0CithbmQgd2UgaGF2ZSBhIG5ldyBlbm91Z2ggbGliYyB0byB1c2UgJW0uCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1My9zcmMvYWRkcjJsaW5lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1My5vcmlnL3NyYy9hZGRyMmxpbmUuYwkyMDEyLTAyLTI0IDIyOjI5OjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTUzL3NyYy9hZGRyMmxpbmUuYwkyMDEyLTAyLTI0IDIyOjI5OjUyLjAwMDAwMDAwMCArMDAwMAorQEAgLTQ1NSwxMCArNDU1LDEwIEBACisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglbVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlbVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworSW5kZXg6IGVsZnV0aWxzLTAuMTUzL3Rlc3RzL2xpbmUyYWRkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTMub3JpZy90ZXN0cy9saW5lMmFkZHIuYwkyMDEyLTAyLTI0IDIyOjI5OjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTUzL3Rlc3RzL2xpbmUyYWRkci5jCTIwMTItMDItMjQgMjI6Mjk6NTIuMDAwMDAwMDAwICswMDAwCitAQCAtMTMyLDcgKzEzMiw3IEBACisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYKQEAgLTAsMCArMSwzOSBAQAorT24gbWFueSBhcmNoaXRlY3R1cmVzIHRoaXMgdGVzdCBmYWlscyBiZWNhdXNlIGJpbmFyaWVzL2xpYnMgcHJvZHVjZWQgYnkKK2JpbnV0aWxzIGRvbid0IHBhc3MgZWxmbGludC4gSG93ZXZlciBlbGZ1dGlscyBzaG91bGRuJ3QgRlRCRlMgYmVjYXVzZSBvZiB0aGlzLgorCitTbyB3ZSBydW4gdGhlIHRlc3RzIG9uIGFsbCBhcmNocyB0byBzZWUgd2hhdCBicmVha3MsIGJ1dCBpZiBpdCBicmVha3Mgd2UgaWdub3JlCit0aGUgcmVzdWx0IChleGl0Y29kZSA3NyBtZWFuczogdGhpcyB0ZXN0IHdhcyBza2lwcGVkKS4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1Ni5vcmlnL3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gJMjAxMy0wNy0yOCAxNDozNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBlbGZ1dGlscy0wLjE1Ni90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMTMtMDctMjggMTQ6MzY6MTAuMDAwMDAwMDAwICswMjAwCitAQCAtMTgsNCArMTgsNCBAQAorIAorIC4gJHNyY2Rpci90ZXN0LXN1YnIuc2gKKyAKKy10ZXN0cnVuX29uX3NlbGYgJHthYnNfdG9wX2J1aWxkZGlyfS9zcmMvZWxmbGludCAtLXF1aWV0IC0tZ251LWxkCisrdGVzdHJ1bl9vbl9zZWxmX3NraXAgJHthYnNfdG9wX2J1aWxkZGlyfS9zcmMvZWxmbGludCAtLXF1aWV0IC0tZ251LWxkCitJbmRleDogZWxmdXRpbHMtMC4xNTYvdGVzdHMvdGVzdC1zdWJyLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTYub3JpZy90ZXN0cy90ZXN0LXN1YnIuc2gJMjAxMy0wNy0yOCAxNDozNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBlbGZ1dGlscy0wLjE1Ni90ZXN0cy90ZXN0LXN1YnIuc2gJMjAxMy0wNy0yOCAxNDozNTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNDksMyArMTQ5LDE4IEBACisgICAjIE9ubHkgZXhpdCBpZiBzb21ldGhpbmcgZmFpbGVkCisgICBpZiB0ZXN0ICRleGl0X3N0YXR1cyAhPSAwOyB0aGVuIGV4aXQgJGV4aXRfc3RhdHVzOyBmaQorIH0KKysKKysjIFNhbWUgYXMgdGVzdHJ1bl9vbl9zZWxmKCksIGJ1dCBza2lwIG9uIGZhaWx1cmUuCisrdGVzdHJ1bl9vbl9zZWxmX3NraXAoKQorK3sKKysgIGV4aXRfc3RhdHVzPTAKKysKKysgIGZvciBmaWxlIGluICRzZWxmX3Rlc3RfZmlsZXM7IGRvCisrICAgICAgdGVzdHJ1biAkKiAkZmlsZSBcCisrCSAgfHwgeyBlY2hvICIqKiogZmFpbHVyZSBpbiAkKiAkZmlsZSI7IGV4aXRfc3RhdHVzPTc3OyB9CisrICBkb25lCisrCisrICAjIE9ubHkgZXhpdCBpZiBzb21ldGhpbmcgZmFpbGVkCisrICBpZiB0ZXN0ICRleGl0X3N0YXR1cyAhPSAwOyB0aGVuIGV4aXQgJGV4aXRfc3RhdHVzOyBmaQorK30KKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTUzM2JmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoCkBAIC0wLDAgKzEsMTA2IEBACitGcm9tIDNkYWVjMmRkMTFhMDQ5NTVmOTVlOGY2NWE0ODgyMDEwM2Q4NGRiZWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK0RhdGU6IFRodSwgOSBBcHIgMjAxNSAxMjoxMjo0OSArMDAwMAorU3ViamVjdDogW1BBVENIXSB1Y2xpYmMgc3VwcG9ydCBmb3IgZWxmdXRpbHMgMC4xNjEKKworb24gdWNsaWJjIHN5c3RlbXMgbGliaW50bCBhbmQgbGlidWFyZ3AgYXJlIHNlcGFyYXRlIGZyb20gbGliYy4KK3NvIHRoZXkgbmVlZCB0byBiZSBzcGVjaWZpZWQgb24gY29tbWFuZGxpbmUgd2hlbiB3ZSB1c2UgcHJveHktbGliaW50bAordGhlbiBsaWJpbnRsIGlzIGEgc3RhdGljIGFyY2hpdmUgc28gaXQgc2hvdWxkIGJlIGxpc3RlZCBsYXN0IHNpbmNlCitlbGZ1dGlscyBkb2VzIG5vdCByZXNwZWN0IGRpc2FibGUtbmxzIHdlIG5lZWQgdG8gbGluayBpbiBsaWJpbnRsCisKK1dlIGFkZCBhIG5ldyBvcHRpb24gLS1lbmFibGUtdWNsaWJjIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjb250cm9sCit0aGUgdWNsaWJjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGR1cmluZyBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbT4KK1NpZ25lZC1vZmYtYnk6IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorW0p1bmxpbmcgWmhlbmc6CisgLSBhZGp1c3QgY29udGV4dAorXQorLS0tCisgY29uZmlndXJlLmFjICAgICAgIHwgOCArKysrKysrKworIGxpYmNwdS9NYWtlZmlsZS5hbSB8IDQgKysrKworIGxpYmR3L01ha2VmaWxlLmFtICB8IDcgKysrKysrLQorIGxpYmVsZi9NYWtlZmlsZS5hbSB8IDUgKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTFhZDZkYi4uODFmYzMzZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzAsNiArNzAsMTQgQEAgQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwKKyAKKyBBSF9URU1QTEFURShbVVNFX0xPQ0tTXSwgW0RlZmluZWQgaWYgbGlicmFyaWVzIHNob3VsZCBiZSB0aHJlYWQtc2FmZS5dKQorIAorK0FDX0FSR19FTkFCTEUoW3VjbGliY10sCisrQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXVjbGliY10sIFtVc2UgdWNsaWJjIGZvciBzeXN0ZW0gbGlicmFyaWVzXSksCisrdXNlX3VjbGliYz15ZXMsIHVzZV91Y2xpYmM9bm8pCisrQU1fQ09ORElUSU9OQUwoVVNFX1VDTElCQywgdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzKQorK0FTX0lGKFt0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXNdLCBbQUNfREVGSU5FKFVTRV9VQ0xJQkMpXSkKKysKKytBSF9URU1QTEFURShbVVNFX1VDTElCQ10sIFtEZWZpbmVkIGlmIHVjbGliYyBsaWJyYXJpZXMgYXJlIHVzZWQuXSkKKysKKyBBQ19QUk9HX0NDCisgQUNfUFJPR19SQU5MSUIKKyBBQ19QUk9HX1lBQ0MKK2RpZmYgLS1naXQgYS9saWJjcHUvTWFrZWZpbGUuYW0gYi9saWJjcHUvTWFrZWZpbGUuYW0KK2luZGV4IDNiZWNjZjMuLjliYTZjMDQgMTAwNjQ0CistLS0gYS9saWJjcHUvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmNwdS9NYWtlZmlsZS5hbQorQEAgLTgwLDYgKzgwLDEwIEBAIGkzODZfcGFyc2VfQ0ZMQUdTID0gLUROTU5FUz0iYHdjIC1sIDwgaTM4Ni5tbmVtb25pY3NgIgorIGkzODZfbGV4Lm86IGkzODZfcGFyc2UuaAorIGkzODZfZ2VuZGlzX0xEQUREID0gJChsaWJldSkgLWxtCisgCisraWYgVVNFX1VDTElCQworK2kzODZfZ2VuZGlzX0xEQUREICs9IC1sdWFyZ3AgLWxpbnRsCisrZW5kaWYKKysKKyBpMzg2X3BhcnNlLmg6IGkzODZfcGFyc2UuYyA7CisgCisgRVhUUkFfRElTVCA9IGRlZnMvaTM4NgorZGlmZiAtLWdpdCBhL2xpYmR3L01ha2VmaWxlLmFtIGIvbGliZHcvTWFrZWZpbGUuYW0KK2luZGV4IDg4N2RhNmIuLmQzMWI0MjggMTAwNjQ0CistLS0gYS9saWJkdy9NYWtlZmlsZS5hbQorKysrIGIvbGliZHcvTWFrZWZpbGUuYW0KK0BAIC0xMDIsNiArMTAyLDExIEBAIGVuZGlmCisgbGliZHdfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZHdfcGljX2FfT0JKRUNUUyA9ICQobGliZHdfYV9TT1VSQ0VTOi5jPS5vcykKKyAKKytsaWJkd19zb19MRExJQlMgPQorK2lmIFVTRV9VQ0xJQkMKKytsaWJkd19zb19MRExJQlMgKz0gLWxpbnRsIC1sdWFyZ3AKKytlbmRpZgorKworIGxpYmR3X3NvX1NPVVJDRVMgPQorIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIC4uL2xpYmR3ZWxmL2xpYmR3ZWxmX3BpYy5hIFwKKyAJICAuLi9saWJkd2ZsL2xpYmR3ZmxfcGljLmEgLi4vbGliZWJsL2xpYmVibC5hIFwKK0BAIC0xMTIsNyArMTE3LDcgQEAgbGliZHcuc28kKEVYRUVYVCk6ICQoc3JjZGlyKS9saWJkdy5tYXAgbGliZHdfcGljLmEgLi4vbGliZHdlbGYvbGliZHdlbGZfcGljLmEgXAorIAkJLVdsLC0tZW5hYmxlLW5ldy1kdGFncywtcnBhdGgsJChwa2dsaWJkaXIpIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQ8LC0tbm8tdW5kZWZpbmVkIFwKKyAJCS1XbCwtLXdob2xlLWFyY2hpdmUgJChmaWx0ZXItb3V0ICQ8LCReKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlXAorLQkJLWxkbCAkKHppcF9MSUJTKQorKwkJLWxkbCAkKHppcF9MSUJTKSAkKGxpYmR3X3NvX0xETElCUykKKyAJQCQodGV4dHJlbF9jaGVjaykKKyAJbG4gLWZzICRAICRALiQoVkVSU0lPTikKKyAKK2RpZmYgLS1naXQgYS9saWJlbGYvTWFrZWZpbGUuYW0gYi9saWJlbGYvTWFrZWZpbGUuYW0KK2luZGV4IGFmY2IyYWEuLjAyODM2YTEgMTAwNjQ0CistLS0gYS9saWJlbGYvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmVsZi9NYWtlZmlsZS5hbQorQEAgLTkzLDcgKzkzLDEyIEBAIGxpYmVsZl9hX1NPVVJDRVMgPSBlbGZfdmVyc2lvbi5jIGVsZl9oYXNoLmMgZWxmX2Vycm9yLmMgZWxmX2ZpbGwuYyBcCisgbGliZWxmX3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmVsZl9waWNfYV9PQkpFQ1RTID0gJChsaWJlbGZfYV9TT1VSQ0VTOi5jPS5vcykKKyAKKysKKyBsaWJlbGZfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZWxmX3NvX0xETElCUyArPSAtbGludGwgLWx1YXJncAorK2VuZGlmCisrCisgaWYgVVNFX0xPQ0tTCisgbGliZWxmX3NvX0xETElCUyArPSAtbHB0aHJlYWQKKyBlbmRpZgorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjFlODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0ZpeCBlbGZfY3Z0X2d1bmhhc2ggaWYgZGVzdCBhbmQgc3JjIGFyZSBzYW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlICdkZXN0JyBhbmQgJ3NyYycgY2FuIGJlIHNhbWUsIHdlIG5lZWQgdG8gc2F2ZSB0aGUgdmFsdWUgb2Ygc3JjMzJbMl0KK2JlZm9yZSBzd2FwaW5nIGl0LgorCitTaWduZWQtb2ZmLWJ5OiBCYW9zaGFuIFBhbmcgPEJhb1NoYW4uUGFuZ0B3aW5kcml2ZXIuY29tPgorZGlmZiAtLWdpdCBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmggYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitpbmRleCA2ZmFmMTEzLi4wNGQ5Y2ExIDEwMDY0NAorLS0tIGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorKysrIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorQEAgLTQwLDYgKzQwLDcgQEAgZWxmX2N2dF9nbnVoYXNoICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4sIGludCBlbmNvZGUpCisgICAgICB3b3Jkcy4gIFdlIG11c3QgZGV0YW5nbGUgdGhlbSBoZXJlLiAgICovCisgICBFbGYzMl9Xb3JkICpkZXN0MzIgPSBkZXN0OworICAgY29uc3QgRWxmMzJfV29yZCAqc3JjMzIgPSBzcmM7CisrICBFbGYzMl9Xb3JkIHNhdmVfc3JjMzJfMiA9IHNyYzMyWzJdOyAvLyBkZXN0IGNvdWxkIGJlIGVxdWFsIHRvIHNyYworIAorICAgLyogRmlyc3QgZm91ciBjb250cm9sIHdvcmRzLCAzMiBiaXRzLiAgKi8KKyAgIGZvciAodW5zaWduZWQgaW50IGNudCA9IDA7IGNudCA8IDQ7ICsrY250KQorQEAgLTUwLDcgKzUxLDcgQEAgZWxmX2N2dF9nbnVoYXNoICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4sIGludCBlbmNvZGUpCisgICAgICAgbGVuIC09IDQ7CisgICAgIH0KKyAKKy0gIEVsZjMyX1dvcmQgYml0bWFza193b3JkcyA9IGVuY29kZSA/IHNyYzMyWzJdIDogZGVzdDMyWzJdOworKyAgRWxmMzJfV29yZCBiaXRtYXNrX3dvcmRzID0gZW5jb2RlID8gc2F2ZV9zcmMzMl8yIDogZGVzdDMyWzJdOworIAorICAgLyogTm93IHRoZSA2NCBiaXQgd29yZHMuICAqLworICAgRWxmNjRfWHdvcmQgKmRlc3Q2NCA9IChFbGY2NF9Yd29yZCAqKSAmZGVzdDMyWzRdOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2QzZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgVGhpcyBwYXRjaCBtYWtlcyB0aGUgbGluayB0byB0aGUgZGVwZW5kZW5jaWVzIG9mIGxpYmR3IGV4cGxpY2l0LCBhcyByZWNlbnQKKyMgbGQgbm8gbG9uZ2VyIGltcGxpY2l0bHkgbGlua3MgdGhlbS4gU2VlCisjIGh0dHA6Ly9saXN0cy5mZWRvcmFwcm9qZWN0Lm9yZy9waXBlcm1haWwvZGV2ZWwvMjAxMC1NYXJjaC8xMzM2MDEuaHRtbCBhcworIyBhIHNpbWlsYXIgZXhhbXBsZSBvZiB0aGUgZXJyb3IgbWVzc2FnZSB5b3UgY2FuIGVuY291bnRlciB3aXRob3V0IHRoaXMgcGF0Y2gsCisjIGFuZCBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvVW5kZXJzdGFuZGluZ0RTT0xpbmtDaGFuZ2UgYW5kCisjIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWF0dXJlcy9DaGFuZ2VJbkltcGxpY2l0RFNPTGlua2luZyBmb3IgbW9yZQorIyBkZXRhaWxzLgorCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvTWFrZWZpbGUuYW0KK0BAIC04Niw3ICs4Niw3IEBAIGxpYmR3ID0gLi4vbGliZHcvbGliZHcuYSAkKHppcF9MSUJTKSAkKGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLmEKKyBlbHNlCisgbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5zbworLWxpYmR3ID0gLi4vbGliZHcvbGliZHcuc28KKytsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KKyBlbmRpZgorIGxpYmVibCA9IC4uL2xpYmVibC9saWJlYmwuYQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTE3Miw3ICsxNzIsNyBAQCBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LmEgJCh6aXBfTElCUykgJChsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5hCisgbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5hCisgZWxzZQorLWxpYmR3ID0gLi4vbGliZHcvbGliZHcuc28KKytsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvICQoemlwX0xJQlMpICQobGliZWxmKSAkKGxpYmVibCkgLWxkbAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuc28KKyBsaWJhc20gPSAuLi9saWJhc20vbGliYXNtLnNvCisgZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzL21lbXBjcHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9tZW1wY3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9tZW1wY3B5LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKKwordWNsaWJjIGRvZXMgbm90IGV4cG9ydCBfX21lbXBjcHkgbGlrZSBnbGliYyBzbyB3ZSBhbGlhcyBpdCBoZXJlLgorVGhpcyBwYXRjaCBtYXkgbWFrZSBzZW5zZSBmb3IgdXBzdHJlYW0gYnV0IGVsZnV0aWxzIHVzZXMgbW9yZQorZ2xpYmMgc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBvYnN0YWNrX3ByaW50ZiB3aGljaCBhcmUgbWlzc2luZyBpbgordWNsaWJjIHRoZXkgbmVlZCB0byBiZSBmaXhlZCBhbG9uZyB0byBtYWtlIGl0IHdvcmsgYWxsIHRoZSB3YXkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW0VsZnV0aWxzIHVzZXMgbW9yZSBnbGliYyBzcGVjaWZpYyBmZWF0dXJlc10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfYmVnaW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9iZWdpbi5jCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCitAQCAtNjgsNiArNjgsOSBAQAorICNpbmNsdWRlICJsaWJlbGZQLmgiCisgI2luY2x1ZGUgImNvbW1vbi5oIgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2RlZmluZSBfX21lbXBjcHkgbWVtcGNweQorKyNlbmRpZgorIAorIC8qIENyZWF0ZSBkZXNjcmlwdG9yIGZvciBhcmNoaXZlIGluIG1lbW9yeS4gICovCisgc3RhdGljIGlubGluZSBFbGYgKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg0OTBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNDguYmIKQEAgLTAsMCArMSw5MSBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgaGFuZGxpbmcgY29tcGlsZWQgb2JqZWN0IGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2VsZnV0aWxzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICIoR1BMLTIrICYgRWxmdXRpbHMtRXhjZXB0aW9uKSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRVhDRVBUSU9OO21kNT01NzBhZGNiMGMxMjE4YWI1N2YyMjQ5YzY3ZDBjZTQxNyIKK0RFUEVORFMgPSAibGlidG9vbCBiemlwMiB6bGliIHZpcnR1YWwvbGliaW50bCIKKworUFIgPSAicjExIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9lL2wvJHtCUE59LyR7QlB9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMGJlZDExMzAxMzVmMTdhZDI3NTMzYjAwMzRkYmE4ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YWViZmE0YTc0NWRiMjFjZjU0MjljOTU0MWZlNDgyNzI5YjYyZWZjN2U1M2U5MTEwMTUxYjQxNjlmZTg4N2RhIgorCisjIHBpY2sgdGhlIHBhdGNoIGZyb20gZGViaWFuCisjIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2UvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNDgtMS5kZWJpYW4udGFyLmd6CisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmIFwKKyAgICAgICAgZmlsZTovL3JlZGhhdC1yb2J1c3RpZnkuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9ocHBhX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9hcm1fYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL21pcHNfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL202OGtfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmIFwKKyAgICAgICAgZmlsZTovL2VsZl9hZGRpdGlvbnMuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9lbGZ1dGlscy1mc2l6ZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9yZW1vdmUtdW51c2VkLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL21lbXBjcHkucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4X2Zvcl9nY2MtNC43LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2Rzby1saW5rLWNoYW5nZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2VsZnV0aWxzLWFyLWMtZml4LW51bS1wYXNzZWQtdG8tbWVtc2V0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4LWJ1aWxkLWdjYy00LjgucGF0Y2ggXAorIgorIyBPbmx5IGFwcGx5IHdoZW4gYnVpbGRpbmcgdWNsaWJjIGJhc2VkIHRhcmdldCByZWNpcGUKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTQ4LnBhdGNoIgorCisjIFRoZSBidWlsZHN5c3RlbSB3YW50cyB0byBnZW5lcmF0ZSAyIC5oIGZpbGVzIGZyb20gc291cmNlIHVzaW5nIGEgYmluYXJ5IGl0IGp1c3QgYnVpbHQsCisjIHdoaWNoIGNhbiBub3QgcGFzcyB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyBsZXQncyB3b3JrIGFyb3VuZCBpdCBieSBhZGRpbmcgMiAuaCBmaWxlcworIyBhbG9uZyB3aXRoIHRoZSBkb19jb25maWd1cmVfcHJlcGVuZCgpCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovL2kzODZfZGlzLmggXAorICAgICAgICBmaWxlOi8veDg2XzY0X2Rpcy5oIFwKKyIKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9ZXUtIC0td2l0aG91dC1sem1hIgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1iemxpYiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLXVjbGliYyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2VkIC1pICcvXmkzODZfZGlzLmg6LywrNCB7Ly4qL2R9JyAke1N9L2xpYmNwdS9NYWtlZmlsZS5hbQorCisgICAgY3AgJHtXT1JLRElSfS8qZGlzLmggJHtTfS9saWJjcHUKK30KKworIyB3ZSBjYW4gbm90IGJ1aWxkIGNvbXBsZXRlIGVsZnV0aWxzIHdoZW4gdXNpbmcgdWNsaWJjCisjIGJ1dCBzb21lIHJlY2lwZXMgZS5nLiBnY2MgNC41IGRlcGVuZHMgb24gbGliZWxmIHNvIHdlCisjIGJ1aWxkIG9ubHkgbGliZWxmIGZvciB1Y2xpYmMgY2FzZQorCitFWFRSQV9PRU1BS0VfbGliYy11Y2xpYmMgPSAiLUMgbGliZWxmIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFBhY2thZ2UgdXRpbGl0aWVzIHNlcGFyYXRlbHkKK1BBQ0tBR0VTID0rICIke1BOfS1iaW51dGlscyBsaWJlbGYgbGliYXNtIGxpYmR3IgorRklMRVNfJHtQTn0tYmludXRpbHMgPSAiXAorICAgICR7YmluZGlyfS9ldS1hZGRyMmxpbmUgXAorICAgICR7YmluZGlyfS9ldS1sZCBcCisgICAgJHtiaW5kaXJ9L2V1LW5tIFwKKyAgICAke2JpbmRpcn0vZXUtcmVhZGVsZiBcCisgICAgJHtiaW5kaXJ9L2V1LXNpemUgXAorICAgICR7YmluZGlyfS9ldS1zdHJpcCIKKworRklMRVNfbGliZWxmID0gIiR7bGliZGlyfS9saWJlbGYtJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmVsZi5zby4qIgorRklMRVNfbGliYXNtID0gIiR7bGliZGlyfS9saWJhc20tJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmFzbS5zby4qIgorRklMRVNfbGliZHcgID0gIiR7bGliZGlyfS9saWJkdy0ke1BWfS5zbyAke2xpYmRpcn0vbGliZHcuc28uKiAke2xpYmRpcn0vZWxmdXRpbHMvbGliKiIKKyMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CisjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KKyNGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyotJHtQVn0uc28gJHtiYXNlX2xpYmRpcn0vKi0ke1BWfS5zbyIKKyNGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmFzbS5zbyAke2xpYmRpcn0vbGliZHcuc28gJHtsaWJkaXJ9L2xpYmVsZi5zbyIKKworIyBUaGUgcGFja2FnZSBjb250YWlucyBzeW1saW5rcyB0aGF0IHRyaXAgdXAgaW5zYW5lCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmR3ID0gImRldi1zbyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTYzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MTgxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTYzLmJiCkBAIC0wLDAgKzEsODcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIGhhbmRsaW5nIGNvbXBpbGVkIG9iamVjdCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9lbGZ1dGlscyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiKEdQTHYzICYgRWxmdXRpbHMtRXhjZXB0aW9uKSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorREVQRU5EUyA9ICJsaWJ0b29sIGJ6aXAyIHpsaWIgdmlydHVhbC9saWJpbnRsIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9lL2wvZWxmdXRpbHMvJHtQVn0vJHtCUH0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjc3Y2U4N2YyNTk5ODdkMmU1NGU0ZDg3Yjg2Y2JlZTQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjNzc0ZjFlZWYzMjkzMDlmM2IwNWU3MzBiZGFjNTAwMTMxNTVkNDM3NTE4YTJlYzBlMjQ4NzFkMzEyZjJlMjMiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovL21lbXBjcHkucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZHNvLWxpbmstY2hhbmdlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL0ZpeF9lbGZfY3Z0X2d1bmhhc2gucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZml4aGVhZGVyY2hlY2sucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIFwKKyIKKworIyBwaWNrIHRoZSBwYXRjaCBmcm9tIGRlYmlhbgorIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9lL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTU5LTQuZGViaWFuLnRhci54egorU1JDX1VSSSArPSAiXAorICAgICAgICBmaWxlOi8vcmVkaGF0LXBvcnRhYmlsaXR5LmRpZmYgXAorICAgICAgICBmaWxlOi8vaHBwYV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vYXJtX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9taXBzX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9tNjhrX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9zY2FuZi1mb3JtYXQucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbWlwc19yZWFkZWxmX3cucGF0Y2ggXAorICAgICAgICBmaWxlOi8vYXJtX2Z1bmNfdmFsdWUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9ub25fbGludXgucGF0Y2ggXAorIgorCisjIE9ubHkgYXBwbHkgd2hlbiBidWlsZGluZyB1Y2xpYmMgYmFzZWQgdGFyZ2V0IHJlY2lwZQorU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNjEucGF0Y2giCisKKyMgVGhlIGJ1aWxkc3lzdGVtIHdhbnRzIHRvIGdlbmVyYXRlIDIgLmggZmlsZXMgZnJvbSBzb3VyY2UgdXNpbmcgYSBiaW5hcnkgaXQganVzdCBidWlsdCwKKyMgd2hpY2ggY2FuIG5vdCBwYXNzIHRoZSBjcm9zcyBjb21waWxpbmcsIHNvIGxldCdzIHdvcmsgYXJvdW5kIGl0IGJ5IGFkZGluZyAyIC5oIGZpbGVzCisjIGFsb25nIHdpdGggdGhlIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1wcm9ncmFtLXByZWZpeD1ldS0gLS13aXRob3V0LWx6bWEiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS13aXRob3V0LWJ6bGliIgorRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1lbmFibGUtdWNsaWJjIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgIT0gIng4Nl82NCIgXSAmJiBbIC16IGBlY2hvICIke1RBUkdFVF9BUkNIfSJ8Z3JlcCAnaS44NidgIF07dGhlbgorCQlybSAke0R9JHtiaW5kaXJ9L2V1LW9iamR1bXAKKwlmaQorfQorCisjIHdlIGNhbiBub3QgYnVpbGQgY29tcGxldGUgZWxmdXRpbHMgd2hlbiB1c2luZyB1Y2xpYmMKKyMgYnV0IHNvbWUgcmVjaXBlcyBlLmcuIGdjYyA0LjUgZGVwZW5kcyBvbiBsaWJlbGYgc28gd2UKKyMgYnVpbGQgb25seSBsaWJlbGYgZm9yIHVjbGliYyBjYXNlCisKK0VYVFJBX09FTUFLRV9saWJjLXVjbGliYyA9ICItQyBsaWJlbGYiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKyMgUGFja2FnZSB1dGlsaXRpZXMgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgIiR7UE59LWJpbnV0aWxzIGxpYmVsZiBsaWJhc20gbGliZHciCitGSUxFU18ke1BOfS1iaW51dGlscyA9ICJcCisgICAgJHtiaW5kaXJ9L2V1LWFkZHIybGluZSBcCisgICAgJHtiaW5kaXJ9L2V1LWxkIFwKKyAgICAke2JpbmRpcn0vZXUtbm0gXAorICAgICR7YmluZGlyfS9ldS1yZWFkZWxmIFwKKyAgICAke2JpbmRpcn0vZXUtc2l6ZSBcCisgICAgJHtiaW5kaXJ9L2V1LXN0cmlwIgorCitGSUxFU19saWJlbGYgPSAiJHtsaWJkaXJ9L2xpYmVsZi0ke1BWfS5zbyAke2xpYmRpcn0vbGliZWxmLnNvLioiCitGSUxFU19saWJhc20gPSAiJHtsaWJkaXJ9L2xpYmFzbS0ke1BWfS5zbyAke2xpYmRpcn0vbGliYXNtLnNvLioiCitGSUxFU19saWJkdyAgPSAiJHtsaWJkaXJ9L2xpYmR3LSR7UFZ9LnNvICR7bGliZGlyfS9saWJkdy5zby4qICR7bGliZGlyfS9lbGZ1dGlscy9saWIqIgorIyBTb21lIHBhY2thZ2VzIGhhdmUgdGhlIHZlcnNpb24gcHJlY2VlZGluZyB0aGUgLnNvIGluc3RlYWQgcHJvcGVybHkKKyMgdmVyc2lvbmVkIC5zby48dmVyc2lvbj4sIHNvIHdlIG5lZWQgdG8gcmVvcmRlciBhbmQgcmVwYWNrYWdlLgorI0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKi0ke1BWfS5zbyAke2Jhc2VfbGliZGlyfS8qLSR7UFZ9LnNvIgorI0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliYXNtLnNvICR7bGliZGlyfS9saWJkdy5zbyAke2xpYmRpcn0vbGliZWxmLnNvIgorCisjIFRoZSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmtzIHRoYXQgdHJpcCB1cCBpbnNhbmUKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliZHcgPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1jb25maWd1cmUuaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5NWEyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1jb25maWd1cmUuaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDggQEAKK0FsbG93IGNyb3NzIGNvbXBpbGluZy4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KKy0tLSBhL2NvbmZpZ3VyZS5pbgkyMDEyLTEyLTE0IDE1OjMxOjMyLjYyMzE4MDQ1MCArMDEwMAorKysrIGIvY29uZmlndXJlLmluCTIwMTItMTItMTQgMTU6NTM6MzQuNTE4MjMzNTE5ICswMTAwCitAQCAtNDgxLDcgKzQ4MSw3IEBACisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGFueSB2YWx1ZSBleGlzdHMgZm9yIFdOT0hBTkddKQorQEAgLTUwNiw3ICs1MDYsOSBAQAorIAlBQ19NU0dfUkVTVUxUKG5vKQorIAlBQ19ERUZJTkUoV05PSEFOR19CQUNLVVBfVkFMVUUsIDEpCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQoeWVzKQorKwlBQ19ERUZJTkVfVU5RVU9URUQoV05PSEFOR19CQUNLVVBfVkFMVUUsIGBjYXQgd25vaGFuZ2ApCisrCXJtIC1mIHdub2hhbmcKKyApCisgCisgIworQEAgLTU3NCw3ICs1NzYsOCBAQAorIAlBQ19ERUZJTkUoUkVBUk1fU0lHKQorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKy0sIEFDX01TR19XQVJOKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKywKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgIyBIUFVYNyBoYXMgdHJvdWJsZSB3aXRoIHRoZSBiaWcgY2F0IHNvIHNwbGl0IGl0CitAQCAtNzI1LDcgKzcyOCw5IEBACisgLAorICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfU0dUVFlCKQorKyAgICAgICAgUFRZX1RZUEU9c2d0dHliCisgKQorIAorICMgbWFjaCBzeXN0ZW1zIGhhdmUgaW5jbHVkZSBmaWxlcyBmb3IgdW5pbXBsZW1lbnRlZCBmZWF0dXJlcworQEAgLTc0OSw3ICs3NTQsOSBAQAorICwKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9URVJNSU8pCisrICAgICAgICBQVFlfVFlQRT10ZXJtaW9zCisrICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyApCisgCisgICAjIG5vdyBjaGVjayBmb3IgdGhlIG5ldyBzdHlsZSB0dHlzIChub3QgeWV0IHBvc2l4KQorQEAgLTc3MSw3ICs3NzgsOSBAQAorICAgLAorICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfVEVSTUlPUykKKysgICAgICAgIFBUWV9UWVBFPXRlcm1pb3MKKysgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgKQorIGZpCisgCitAQCAtNzk0LDcgKzgwMyw3IEBACisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW2lmIFRJT0NHV0lOU1ogaW4gdGVybWlvcy5oXSkKK0BAIC04MTYsNyArODI1LDcgQEAKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorICMgZmluYWxseSBjaGVjayBmb3IgQ3JheSBzdHlsZSB0dHlzCitAQCAtODM3LDcgKzg0Niw3IEBACisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyAjCitAQCAtODg5LDcgKzg5OCw4IEBACisgCUFDX01TR19SRVNVTFQoeWVzKSwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfREVGSU5FKEhBVkVfU1ZfVElNRVpPTkUpCisrCUFDX01TR19SRVNVTFQoeWVzKSwKKyApCisgCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtZXhwZWN0LWluc3RhbGwtc2NyaXB0cy13aXRob3V0LXVzaW5nLXRoZS1maXhsaW5lMS10Yy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGFkODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtZXhwZWN0LWluc3RhbGwtc2NyaXB0cy13aXRob3V0LXVzaW5nLXRoZS1maXhsaW5lMS10Yy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3dybGludXggc3BlY2lmaWNdCisKK1N1YmplY3Q6IGV4cGVjdDogaW5zdGFsbCBzY3JpcHRzIHdpdGhvdXQgdXNpbmcgdGhlIGZpeGxpbmUxIHRjbCBzY3JpcHQKKworT24gb2xkZXIgbWFjaGluZXMgbGlrZSBTTEVEMTEuMiwgd2UgYXJlIGVuY291bnRlcmluZyBkb19pbnN0YWxsIGZhaWx1cmVzCitjb21wbGFpbmluZyB0aGF0ICdHTElCQ18yLjE0JyBpcyBub3QgZm91bmQgaW4gL2xpYjY0L2xpYmMuc28uNiBidXQgaXMgcmVxdWlyZWQKK2J5IGxpYnRjbDguNi5zby4wLgorCitUaGlzIGlzIGJlY2F1c2UgdGhhdCB3ZSdyZSBleGVjdXRpbmcgdGhlIGZpeGxpbmUxIHRjbCBzY3JpcHQgd2hpY2ggcmVxdWlyZXMKK2xpYnRjbDguNi5zby4wIGluIHN5c3Jvb3QuIEhvd2V2ZXIsIGFsbCBjb21tYW5kcyBpbiBTQ1JJUFRTIGFscmVhZHkgaGF2ZSBnb3QKK3RoZSBjb3JyZWN0IGZpcnN0IGxpbmUsIHRoYXQgaXMgJyMhL2Jpbi9zaCcuIFdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGFueXRoaW5nLgorVGhhdCdzIHdoeSB3ZSBjb3VsZCBqdXN0IGNvcHkgdGhlbS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBjMDVjODgwLi5mMTM5NGZmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMzgwLDcgKzM4MCw3IEBAIGRpc3Q6IGRpc3QtY2xlYW4gZG9jCisgCWNwICQoRElTVF9ST09UKS8kKFBLR19ESVIpLnRhci5neiAkKHRvcF9idWlsZGRpcikKKyAKKyAkKFNDUklQVFMpOgorLQkkKFRDTFNIKSAkKHNyY2RpcikvZml4bGluZTEgJChTSE9SVF9CSU5ESVIpIDwgJChzcmNkaXIpL2V4YW1wbGUvJEAgPiAkQAorKwljcCAkKHNyY2RpcikvZXhhbXBsZS8kQCAkQAorIAorICMjIFdlIGNhbm5vdCB1c2UgVENMX0xJQlMgYmVsb3cgKGFmdGVyIFRDTF9MSUJfU1BFQykgYmVjYXVzZSBpdHMKKyAjIyBleHBhbnNpb24gcmVmZXJlbmNlcyB0aGUgY29udGVudHMgb2YgTElCUywgd2hpY2ggY29udGFpbnMgbGlua2VyCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMi10Y2wubTQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDItdGNsLm00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGM2YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDItdGNsLm00LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1VzZSBwcm9wZXIgLUwgcGF0aCB3aGVuIGNyb3NzIGNvbXBpbGluZy4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90Y2xjb25maWcvdGNsLm00IGIvdGNsY29uZmlnL3RjbC5tNAorLS0tIGEvdGNsY29uZmlnL3RjbC5tNAkyMDEyLTEyLTE0IDA5OjE2OjU4Ljc4OTg2MTI4MSArMDEwMAorKysrIGIvdGNsY29uZmlnL3RjbC5tNAkyMDEyLTEyLTE0IDEwOjU1OjQzLjU0MjI5NzAxMCArMDEwMAorQEAgLTM3MSw3ICszNzEsNyBAQAorICAgICAjIG9mIFRDTF9CVUlMRF9MSUJfU1BFQy4gQW4gZXh0ZW5zaW9uIHNob3VsZCBtYWtlIHVzZSBvZiBUQ0xfTElCX1NQRUMKKyAgICAgIyBpbnN0ZWFkIG9mIFRDTF9CVUlMRF9MSUJfU1BFQyBzaW5jZSBpdCB3aWxsIHdvcmsgd2l0aCBib3RoIGFuCisgICAgICMgaW5zdGFsbGVkIGFuZCB1bmluc3RhbGxlZCB2ZXJzaW9uIG9mIFRjbC4KKy0gICAgaWYgdGVzdCAtZiAiJHtUQ0xfQklOX0RJUn0vTWFrZWZpbGUiIDsgdGhlbgorKyAgICBpZiB0ZXN0IC1mICIke1RDTF9CSU5fRElSfS9NYWtlZmlsZSIgfHwgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIFRDTF9MSUJfU1BFQz0iJHtUQ0xfQlVJTERfTElCX1NQRUN9IgorICAgICAgICAgVENMX1NUVUJfTElCX1NQRUM9IiR7VENMX0JVSUxEX1NUVUJfTElCX1NQRUN9IgorICAgICAgICAgVENMX1NUVUJfTElCX1BBVEg9IiR7VENMX0JVSUxEX1NUVUJfTElCX1BBVEh9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMS1leGFtcGxlLXNoZWJhbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk3ZjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMS1leGFtcGxlLXNoZWJhbmcucGF0Y2gKQEAgLTAsMCArMSwxNDQgQEAKK0F1dGhvcjogTWlrZSBNYXJrbGV5IDxtaWtlQG1hcmtsZXkub3JnPgorQXV0aG9yOiBTZXJnZWkgR29sb3ZhbiA8c2dvbG92YW5AZGViaWFuLm9yZz4KK0Rlc2NyaXB0aW9uOiBGaXhlcyBzaGViYW5ncyBpbiBleGFtcGxlcyAoQ2xvc2VzOiAjMTUyMzY3KS4KKworQmFja3BvcnRlZCBmcm9tIERlYmlhbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvYmVlci5leHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9iZWVyLmV4cAkyMDA2LTAxLTI1IDEzOjUxOjM5LjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9iZWVyLmV4cAkyMDEzLTExLTAxIDE3OjM1OjE5LjgxNzMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLWYKKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgOTkgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsLCBFeHBlY3Qtc3R5bGUKKyAjIEF1dGhvcjogRG9uIExpYmVzIDxsaWJlc0BuaXN0Lmdvdj4KK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvZXhwZWN0ZC5wcm90bworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL2V4cGVjdGQucHJvdG8JMjAxMC0wNy0wMiAwOTowMzozMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvZXhwZWN0ZC5wcm90bwkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSwxMCBAQAorLSMhL2RlcG90L3RjbC9zcmMvZXhwZWN0L2UgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorKworICMgRGVzY3JpcHRpb246IFNpbXBsZSBmcmFnbWVudCB0byBiZWdpbiBhIHRlbG5ldCBkYWVtb24KKyAjIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQ2hhcHRlciAxNyBvZiAiRXhwbG9yaW5nIEV4cGVjdCIKKyAjIEF1dGhvcjogRG9uIExpYmVzLCBOSVNUCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL2lyc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9pcnNoCTIwMTAtMDctMDIgMDk6MDM6MzEuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL2lyc2gJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIERvIHJzaCBpbnRlcmFjdGl2ZWx5LiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAjICAgIHJzaCA8cmVtb3RlPiBscyAtbCAifCIgbW9yZQorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9wYXNzd2QuY2dpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvcGFzc3dkLmNnaQkyMDAwLTAxLTA2IDE1OjIyOjA3LjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9wYXNzd2QuY2dpCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBUaGlzIGlzIGEgQ0dJIHNjcmlwdCB0byBwcm9jZXNzIHJlcXVlc3RzIGNyZWF0ZWQgYnkgdGhlIGFjY29tcGFueWluZworICMgcGFzc3dkLmh0bWwgZm9ybS4gIFRoaXMgc2NyaXB0IGlzIHByZXR0eSBiYXNpYywgYWx0aG91Z2ggaXQgaXMKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkcHJvbXB0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvcGFzc3dkcHJvbXB0CTIwMDMtMDktMDUgMTI6MDE6NTkuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZHByb21wdAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QKKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgVGhpcyBzY3JpcHQgcHJvbXB0cyBmb3IgYSBwYXNzd2QgZnJvbSBzdGRpbiB3aGlsZSBlY2hvaW5nIConcworIAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9yZXByb21wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3JlcHJvbXB0CTIwMDAtMDEtMDYgMTU6MjI6MDcuMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3JlcHJvbXB0CTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBOYW1lOiByZXByb21wdAorICMgRGVzY3JpcHRpb246IHJlcHJvbXB0IGV2ZXJ5IHNvIG9mdGVuIHVudGlsIHVzZXIgZW50ZXJzIHNvbWV0aGluZworSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS90ZXJtX2V4cGVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3Rlcm1fZXhwZWN0CTIwMDUtMDItMTUgMTA6MTE6MzEuMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3Rlcm1fZXhwZWN0CTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdGsKKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHdpc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBOYW1lOiB0a3Rlcm0gLSB0ZXJtaW5hbCBlbXVsYXRvciB1c2luZyBFeHBlY3QgYW5kIFRrIHRleHQgd2lkZ2V0LCB2My4wCisgIyBBdXRob3I6IERvbiBMaWJlcywgSnVseSAnOTQKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvdnJmeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3ZyZnkJMjAxMC0wNy0wMiAwOTowMzozMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvdnJmeQkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLWYKKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorIAorICMgc2VwYXJhdGUgYWRkcmVzcyBpbnRvIHVzZXIgYW5kIGhvc3QKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUveHJsb2dpbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3hybG9naW4JMjAwMC0wMS0wNiAxNToyMjowOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUveHJsb2dpbgkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSwxMCBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKysKKyAjIHhybG9naW4gLSBybG9naW4gYnV0IHdpdGggY3VycmVudCBESVNQTEFZCisgIworICMgWW91IGNhbiBleHRlbmQgdGhpcyBpZGVhIHRvIHNhdmUgYW55IGFyYml0cmFyeSBpbmZvcm1hdGlvbiBhY3Jvc3MgcmxvZ2luCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyYWFiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYgpAQCAtMCwwICsxLDY0IEBACitTVU1NQVJZID0gInRvb2wgZm9yIGF1dG9tYXRpbmcgaW50ZXJhY3RpdmUgYXBwbGljYXRpb25zIGFjY29yZGluZyB0byBhIHNjcmlwdCIKK0RFU0NSSVBUSU9OID0gIkV4cGVjdCBpcyBhIHRvb2wgZm9yIGF1dG9tYXRpbmcgaW50ZXJhY3RpdmUgYXBwbGljYXRpb25zIGFjY29yZGluZyB0byBhIHNjcmlwdC4gXAorRm9sbG93aW5nIHRoZSBzY3JpcHQsIEV4cGVjdCBrbm93cyB3aGF0IGNhbiBiZSBleHBlY3RlZCBmcm9tIGEgcHJvZ3JhbSBhbmQgd2hhdCBcCit0aGUgY29ycmVjdCByZXNwb25zZSBzaG91bGQgYmUuIEV4cGVjdCBpcyBhbHNvIHVzZWZ1bCBmb3IgdGVzdGluZyB0aGVzZSBzYW1lIFwKK2FwcGxpY2F0aW9ucy4gQW5kIGJ5IGFkZGluZyBUaywgeW91IGNhbiBhbHNvIHdyYXAgaW50ZXJhY3RpdmUgYXBwbGljYXRpb25zIGluIFwKK1gxMSBHVUlzLiBBbiBpbnRlcnByZXRlZCBsYW5ndWFnZSBwcm92aWRlcyBicmFuY2hpbmcgYW5kIGhpZ2gtbGV2ZWwgY29udHJvbCBcCitzdHJ1Y3R1cmVzIHRvIGRpcmVjdCB0aGUgZGlhbG9ndWUuIEluIGFkZGl0aW9uLCB0aGUgdXNlciBjYW4gdGFrZSBjb250cm9sIGFuZCBcCitpbnRlcmFjdCBkaXJlY3RseSB3aGVuIGRlc2lyZWQsIGFmdGVyd2FyZCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgc2NyaXB0LiBcCisiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGVjdC8iCitMSUNFTlNFID0gIlBEIgorU0VDVElPTiA9ICJkZXZlbCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGljZW5zZS50ZXJtczttZDU9ZmJmMmRlN2U5MTAyNTA1YjE0MzlkYjA2ZmMzNmNlNWMiCisKK0RFUEVORFMgKz0gInRjbCIKK1JERVBFTkRTXyR7UE59ID0gInRjbCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2V4cGVjdC9FeHBlY3QvJHtQVn0vJHtCUE59JHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdGNsLm00LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWV4cGVjdC1pbnN0YWxsLXNjcmlwdHMtd2l0aG91dC11c2luZy10aGUtZml4bGluZTEtdGMucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NGUxYTRmNGM4NzdlOWRkYzVhNTQyZGZhN2VjYzkyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMjhkY2E5MDQyOGEzYjMwZTY1MDUyNWNkYzE2MjU1ZDc2YmI2Y2NkNjVkNDQ4YmU1M2U2MjBkOTVkNWNjMDQwIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59JHtQVn0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS9saWJleHBlY3QqLnNvICAgJHtEfSR7bGliZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vZml4bGluZTEgICAgICAgICAgICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L2V4YW1wbGUvKiAgICAgICAgICAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9LworICAgICAgICBybSAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9L2xpYmV4cGVjdCouc28KKyAgICAgICAgc2VkIC1lICdzfCRkaXJ8JHtsaWJkaXJ9fCcgLWkgJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS9wa2dJbmRleC50Y2wKK30KKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtdGNsPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXRjbGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0vdGNsOC42IFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtdGhyZWFkcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCBcCisgICAgICAgICAgICAgICAgIgorRVhUUkFfT0VNQUtFX2luc3RhbGwgPSAiICdTQ1JJUFRTPScgIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0ke1BWfS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJfbmF0aXZlfS9leHBlY3Qke1BWfS9saWJleHBlY3QqLnNvIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2V4cGVjdC5oIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2V4cGVjdF90Y2wuaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9leHBlY3RfY29tbS5oIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L3RjbGRiZy5oIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyouaCBcCisgICAgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbGliZXhwZWN0JHtQVn0uc28gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9leHBlY3Qke1BWfS8qIFwKKyAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZkaXNrL2dwdGZkaXNrXzEuMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiMGUzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZkaXNrL2dwdGZkaXNrXzEuMC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK0RFU0NSSVBUSU9OID0gIkdQVCBmZGlzayBpcyBhIGRpc2sgcGFydGl0aW9uaW5nIHRvb2wgbG9vc2VseSBtb2RlbGVkIG9uIExpbnV4IGZkaXNrLCBidXQgdXNlZCBmb3IgbW9kaWZ5aW5nIEdVSUQgUGFydGl0aW9uIFRhYmxlIChHUFQpIGRpc2tzLiBUaGUgcmVsYXRlZCBGaXhQYXJ0cyB1dGlsaXR5IGZpeGVzIHNvbWUgY29tbW9uIHByb2JsZW1zIG9uIE1hc3RlciBCb290IFJlY29yZCAoTUJSKSBkaXNrcy4iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworREVQRU5EUyA9ICJ1dGlsLWxpbnV4IHBvcHQgbmN1cnNlcyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7UFZ9LyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMDYxZjkxN2FmMDg0MjE1ODk4ZDRmZWEwNGQ4Mzg4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YjY2OTU2NzQzYTc5OWZjMDQ3MWNkYjAzMjY2NWMxMzkxZTgyZjljNWIzZjFkN2Q3MjZkMjlmZTJiYTAxZDZjIgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgY2dkaXNrICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGdkaXNrICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IHNnZGlzayAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBmaXhwYXJ0cyAke0R9JHtzYmluZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE2YjJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDA4YWJmOTQ0YjJiZmYyN2I2ZGQzMjVkZDE1YjQ4NjFjZWJlZjExM2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK0RhdGU6IFdlZCwgOCBBcHIgMjAxNSAwMzoyNjo1NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBBZGQgLVAgcHJvbXB0IGludG8gVXNhZ2UgaW5mbworCitDdXJyZW50bHksIFVzYWdlIGluZm8gZG9lc24ndCBpbmNsdWRlIC1QIHByb21wdCwgYWRkIGl0OgorCityb290QGFybWE5ZWw6fiMgZmlsZQorVXNhZ2U6IGZpbGUgWy1iY0VoaWtMbE5ucHJzdnowXSBbLS1hcHBsZV0gWy0tbWltZS1lbmNvZGluZ10gWy0tbWltZS10eXBlXQorICAgICAgICAgICAgWy1lIHRlc3RuYW1lXSBbLUYgc2VwYXJhdG9yXSBbLWYgbmFtZWZpbGVdIFstbSBtYWdpY2ZpbGVzXQorICAgICAgICAgICAgWy1QIHBhcmFtZXRlcj1saW1pdHNdIGZpbGUgLi4uCisgICAgICAgZmlsZSAtQyBbLW0gbWFnaWNmaWxlc10KKyAgICAgICBmaWxlIFstLWhlbHBdCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEp1bmxpbmcgWmhlbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorLS0tCisgc3JjL2ZpbGUuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZmlsZS5jIGIvc3JjL2ZpbGUuYworaW5kZXggMmIxNWUyMS4uZTVhOTU3YiAxMDA2NDQKKy0tLSBhL3NyYy9maWxlLmMKKysrKyBiL3NyYy9maWxlLmMKK0BAIC03Niw4ICs3Niw4IEBAIGludCBnZXRvcHRfbG9uZyhpbnQgYXJnYywgY2hhciAqIGNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRzdHJpbmcsIGNvbnN0IHN0cnVjCisgIyBkZWZpbmUgVVNBR0UgIFwKKyAgICAgIlVzYWdlOiAlcyBbIiBGSUxFX0ZMQUdTIFwKKyAJIl0gWy0tYXBwbGVdIFstLWV4dGVuc2lvbl0gWy0tbWltZS1lbmNvZGluZ10gWy0tbWltZS10eXBlXVxuIiBcCistICAgICIgICAgICAgICAgICBbLWUgdGVzdG5hbWVdIFstRiBzZXBhcmF0b3JdIFstZiBuYW1lZmlsZV0gWy1tIG1hZ2ljZmlsZXNdICIgXAorLSAgICAiZmlsZSAuLi5cbiIgXAorKyAgICAiICAgICAgICAgICAgWy1lIHRlc3RuYW1lXSBbLUYgc2VwYXJhdG9yXSBbLWYgbmFtZWZpbGVdIFstbSBtYWdpY2ZpbGVzXVxuICIgXAorKyAgICAiICAgICAgICAgICAgWy1QIHBhcmFtZXRlcj1saW1pdHNdIGZpbGUgLi4uXG4iIFwKKyAgICAgIiAgICAgICAlcyAtQyBbLW0gbWFnaWNmaWxlc11cbiIgXAorICAgICAiICAgICAgICVzIFstLWhlbHBdXG4iCisgCistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlL2RlYmlhbi03NDIyNjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY0ODVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlL2RlYmlhbi03NDIyNjIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVGhlIGF3ayBwYXR0ZXJuIHdhcyBjaGVja2VkICpiZWZvcmUqIHRoZSBQZXJsIHBhdHRlcm4sIHNvIHRoZSBwZXJsCitzY3JpcHQgd2l0aCBCRUdJTnsuLi59IHdvdWxkIGJlIHJlcG9ydGVkIGFzIGF3aywgdGhpcyBwYXRjaCBmaXhlcyBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGggQmllZGwgPGRlYmlhbi5heGhuQG1hbmNobWFsLmluLXVsbS5kZT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC0tZ2l0IGEvbWFnaWMvTWFnZGlyL2NvbW1hbmRzIGIvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCistLS0gYS9tYWdpYy9NYWdkaXIvY29tbWFuZHMKKysrKyBiL21hZ2ljL01hZ2Rpci9jb21tYW5kcworQEAgLTU3LDYgKzU3LDcgQEAKKyAwCXN0cmluZy93dAkjIVwgL3Vzci9iaW4vYXdrCWF3ayBzY3JpcHQgdGV4dCBleGVjdXRhYmxlCisgITptaW1lCXRleHQveC1hd2sKKyAwCXJlZ2V4LzQwOTYJPV5cXHN7MCwxMDB9QkVHSU5cXHN7MCwxMDB9W3tdCWF3ayBvciBwZXJsIHNjcmlwdCB0ZXh0CisrITpzdHJlbmd0aCAtIDEyCisgCisgIyBBVCZUIEJlbGwgTGFicycgUGxhbiA5IHNoZWxsCisgMAlzdHJpbmcvd3QJIyFcIC9iaW4vcmMJUGxhbiA5IHJjIHNoZWxsIHNjcmlwdCB0ZXh0IGV4ZWN1dGFibGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjI0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiOTVkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZV81LjI0LmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiRmlsZSBjbGFzc2lmaWNhdGlvbiB0b29sIgorREVTQ1JJUFRJT04gPSAiRmlsZSBhdHRlbXB0cyB0byBjbGFzc2lmeSBmaWxlcyBkZXBlbmRpbmcgXAorb24gdGhlaXIgY29udGVudHMgYW5kIHByaW50cyBhIGRlc2NyaXB0aW9uIGlmIGEgbWF0Y2ggaXMgZm91bmQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kYXJ3aW5zeXMuY29tL2ZpbGUvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCisjIHR3byBjbGF1c2UgQlNECitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTI7bWQ1PTZhNzM4Mjg3MmVkYjY4ZDMzZTFhOTM5OGI2ZTAzMTg4IgorCitERVBFTkRTID0gInpsaWIgZmlsZS1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2ZpbGUvZmlsZS5naXQgXAorICAgICAgICBmaWxlOi8vZGViaWFuLTc0MjI2Mi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ1JFViA9ICIzYzA4NzRiZTRkMzIzMmQ2NzJiMjBmNTEzNDUxYTM5Y2ZkN2M1ODVhIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbWlzYy8qLm1nYyIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmlsZSBcCisJCS0tbWFnaWMtZmlsZSAke2RhdGFkaXJ9L21pc2MvbWFnaWMubWdjCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAorCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL2RvX25vdF9jcmVhdGVfcGRmX2RvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjgzM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL2RvX25vdF9jcmVhdGVfcGRmX2RvYy5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKGVtYmVkZGVkIHNwZWNpZmljKQorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBmbGV4LTIuNS4zNy9kb2MvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmbGV4LTIuNS4zNy5vcmlnL2RvYy9NYWtlZmlsZS5hbQkyMDEyLTA3LTIxIDA0OjE4OjI3LjAwMDAwMDAwMCArMDMwMAorKysrIGZsZXgtMi41LjM3L2RvYy9NYWtlZmlsZS5hbQkyMDEzLTA3LTMwIDE3OjU3OjA5LjgzNDgzNDUzMSArMDMwMAorQEAgLTIsNyArMiw3IEBACisgCisgaW5mb19URVhJTkZPUyA9CWZsZXgudGV4aQorIGRpc3RfbWFuX01BTlMgPSBmbGV4LjEKKy1kaXN0X2RvY19EQVRBPSBmbGV4LnBkZgorK0VYVFJBX0RJU1Q9IGZsZXgucGRmCisgCisgQ0xFQU5GSUxFUyA9IFwKKyAJZmxleC5oa3MgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9maWxlcy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmZiYTE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKK3Rlc3QxPSJ0ZXN0LWFsbG9jLWV4dHJhIHRlc3QtYXJyYXktbnIgdGVzdC1hcnJheS1yIHRlc3QtYmFzaWMtbnIgdGVzdC1iYXNpYy1yIHRlc3QtZXh0ZW5kZWQgdGVzdC1xdW90ZXMgXAordGVzdC1iaXNvbi1uciB0ZXN0LWJpc29uLXl5bGxvYyB0ZXN0LWJpc29uLXl5bHZhbCB0ZXN0LWMrKy1iYXNpYyB0ZXN0LWMtY3BwLW5yIHRlc3QtcHJlZml4LW5yIHRlc3QtY2NsIFwKK3Rlc3QtYy1jcHAtciB0ZXN0LWMrKy1tdWx0aXBsZS1zY2FubmVycyB0ZXN0LW1lbS1yIHRlc3QtbWVtLW5yIHRlc3QtZGVidWctbnIgdGVzdC1saW5lZGlyLXIgdGVzdC1ub2Fuc2ktciBcCit0ZXN0LXl5ZXh0cmEgdGVzdC1oZWFkZXItciB0ZXN0LW5vYW5zaS1uciB0ZXN0LWRlYnVnLXIgVEVNUExBVEUgdGVzdC10b3AgdGVzdC1oZWFkZXItbnIgdGVzdC1wcmVmaXgtciIKK3Rlc3QyPSJ0ZXN0LW11bHRpcGxlLXNjYW5uZXJzLW5yIHRlc3QtcG9zaXhseS1jb3JyZWN0IHRlc3QtcG9zaXggdGVzdC1zdHJpbmctciB0ZXN0LXN0cmluZy1uciIKK3Rlc3QzPSJ0ZXN0LXB0aHJlYWQgdGVzdC1pbmNsdWRlLWJ5LXB1c2ggdGVzdC1pbmNsdWRlLWJ5LWJ1ZmZlciB0ZXN0LWluY2x1ZGUtYnktcmVlbnRyYW50IgordGVzdDQ9InRlc3QtbGluZW5vLW5yIHRlc3QtbGluZW5vLXIgdGVzdC1saW5lbm8tdHJhaWxpbmciCit0ZXN0NT0idGVzdC1jKysteXl3cmFwIHRlc3QtcmVzY2FuLXIgdGVzdC1yZXNjYW4tbnIiCit0ZXN0Nj0idGVzdC1yZWplY3QtbnIgdGVzdC1yZWplY3QtciIKK3Rlc3Q3PSJ0ZXN0LXJlamVjdC1zZXIgdGVzdC1yZWplY3QtdmVyIgordGVzdDg9InRlc3QtbXVsdGlwbGUtc2Nhbm5lcnMtciIKKworb3V0cHV0KCkgeworICBpZiBbICQ/IC1lcSAwIF07IFwKKyAgICB0aGVuIGVjaG8gIlBBU1M6ICRpIjsgXAorICAgIGVsc2UgZWNobyAiRkFJTDogJGkiOyBcCisgIGZpOworfQorCitmb3IgaSBpbiAkdGVzdDE7IGRvICRpLyRpIDwgJGkvdGVzdC5pbnB1dCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0MjsgZG8gJGkvJGkgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDM7IGRvIGNkICRpOyAuLyRpIHRlc3QtMS5pbnB1dCA+L2Rldi9udWxsOyBvdXRwdXQ7IGNkIC4uOyBkb25lCitmb3IgaSBpbiAkdGVzdDQ7IGRvIHRlc3QgYCRpLyRpIDwgJGkvdGVzdC5pbnB1dGAgLWVxIGAkaS8kaSAxIDwgJGkvdGVzdC5pbnB1dGAgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDU7IGRvICRpLyRpICRpL3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDY7IGRvIHRlc3QtcmVqZWN0LyRpIDwgdGVzdC1yZWplY3QvdGVzdC5pbnB1dCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2ZvciBpIGluICR0ZXN0NzsgZG8gdGVzdC1yZWplY3QvJGkgdGVzdC1yZWplY3QvJGkudGFibGVzIDwgdGVzdC1yZWplY3QvdGVzdC5pbnB1dCA+L2Rldi9udWxsOyBvdXRwdXQ7IGRvbmUKK2NkICR0ZXN0ODsgLi8kdGVzdDggPi9kZXYvbnVsbDsgaT0kdGVzdDggb3V0cHV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXguaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGEyNmUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4LmluYwpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIkZsZXggKFRoZSBGYXN0IExleGljYWwgQW5hbHl6ZXIpIgorREVTQ1JJUFRJT04gPSAiRmxleCBpcyBhIGZhc3QgbGV4aWNhbCBhbmFseXNlciBnZW5lcmF0b3IuICBGbGV4IGlzIGEgdG9vbCBmb3IgZ2VuZXJhdGluZyBwcm9ncmFtcyB0aGF0IHJlY29nbml6ZSBcCitsZXhpY2FsIHBhdHRlcm5zIGluIHRleHQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9mbGV4LyIKKworU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorREVQRU5EUyArPSAiJHtAJ2Jpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZScgaWYgJyR7UFRFU1RfRU5BQkxFRH0nID09ICcxJyBlbHNlICcnfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZmxleC9mbGV4LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHB0ZXN0CisKKworTTQgPSAiJHtiaW5kaXJ9L200IgorTTRfY2xhc3MtbmF0aXZlID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9tNCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX000PSR7TTR9IgorRVhUUkFfT0VNQUtFICs9ICJtND0ke1NUQUdJTkdfQklORElSX05BVElWRX0vbTQiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9mbGV4IE00PSR7TTR9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9mbGV4IE00PSR7TTR9Cit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJtNCIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlmb3IgaSBpbiBgZmluZCAke1N9L3Rlc3RzLyAtdHlwZSBkIHxncmVwIC1FdiAiY29uY2F0ZW5hdGVkLW9wdGlvbnN8cmVqZWN0fHRhYmxlLW9wdHMiIHwgYXdrIC1GLyAne3ByaW50ICRORn0nYDsgXAorCSAgZG8gb2VfcnVubWFrZSAtQyAke1N9L3Rlc3RzLyRpIC1mICR7Qn0vdGVzdHMvJGkvTWFrZWZpbGUgdG9wX2J1aWxkZGlyPSR7Qn0gRkxFWD1mbGV4ICRpOyBcCisJZG9uZQorCW9lX3J1bm1ha2UgLUMgJHtTfS90ZXN0cy90ZXN0LXJlamVjdCAtZiAke0J9L3Rlc3RzL3Rlc3QtcmVqZWN0L01ha2VmaWxlIHRvcF9idWlsZGRpcj0ke0J9IEZMRVg9ZmxleCB0ZXN0LXJlamVjdC1uciB0ZXN0LXJlamVjdC1yIHRlc3QtcmVqZWN0LXNlciB0ZXN0LXJlamVjdC12ZXIKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlmb3IgaSBpbiBgZmluZCAke1N9L3Rlc3RzLyAtdHlwZSBkIHwgYXdrIC1GLyAne3ByaW50ICRORn0nYDsgXAorCSAgZG8gY3AgLXIgJHtTfS90ZXN0cy8kaSAke0R9JHtQVEVTVF9QQVRIfTsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleF8yLjUuMzkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXhfMi41LjM5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODU3NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXhfMi41LjM5LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSBmbGV4LmluYworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNDc0MmNmOTJlODkwNDBiMzk0ODZhNjIxOWI2ODA2NyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSArPSAiZmlsZTovL2RvX25vdF9jcmVhdGVfcGRmX2RvYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjc3ZDQ0YzZiYjhjMDcwNWUwMDE3YWI5YTg0YTE1MDJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkZDJiNTVmM2JjMzhjYjUxMmI0OGZhZDdkNzJmNDNiMTFlZjI0NDQ4N2ZmMjVmYzAwYWFiZWMxZTMyYjYxN2YiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyNDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYwpAQCAtMCwwICsxLDExOCBAQAorcmVxdWlyZSBnY2MtY29tbW9uLmluYworCisjIFRoaXJkIGRpZ2l0IGluIFBWIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBhZnRlciBhIG1pbm9yIHJlbGVhc2UKKworUFYgPSAiNC44LjQiCisKKyMgQklOViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgdG8gYSByZXZpc2lvbiBhZnRlciBhIG1pbm9yIGdjYyByZWxlYXNlCisKK0JJTlYgPSAiNC44LjQiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2djYy00Ljg6IgorCitERVBFTkRTID0rICJtcGZyIGdtcCBsaWJtcGMgemxpYiIKK05BVElWRURFUFMgPSAibXBmci1uYXRpdmUgZ21wLW5hdGl2ZSBsaWJtcGMtbmF0aXZlIHpsaWItbmF0aXZlIgorCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgIGZpbGU6Ly9DT1BZSU5HLlJVTlRJTUU7bWQ1PWZlNjBkODcwNDg1NjdkNGZlOGM4YTBlZDI0NDhiY2M4IFwKKyIKKworU1JDX1VSSSA9ICJcCisgICAgJHtHTlVfTUlSUk9SfS9nY2MvZ2NjLSR7UFZ9L2djYy0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDExLWluZGV4X21hY3JvLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMi1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgZmlsZTovLzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtc2R0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMi1saWJ0b29sLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzNS13Y2FzdC1xdWFsLVBSLTU1MzgzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzOC1nY2MtNC44LWJ1aWxkLWFyZ3MucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQyLXByNTc3NDgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQzLWNwcC5wYXRjaCBcCisgICAgZmlsZTovLzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ3LXJlcG9tZW1idWcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAorICAgIGZpbGU6Ly90YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjVhODRhMzA4MzliMmFjYTIyYTJkNzIzZGUyYTYyNmVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRhODBhYTIzNzk4YjhlOWI1NzkzNDk0YjhjOTc2YjM5YjhkOWFhMmU1M2NkNWVkNTUzNGFmZjY2MmE3Zjg2OTUiCisKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKKyMgTGFuZ3VhZ2UgT3ZlcnJpZGVzCitGT1JUUkFOID0gIiIKK0pBVkEgPSAiIgorCitMVE8gPSAiLS1lbmFibGUtbHRvIgorCitFWFRSQV9PRUNPTkZfQkFTRSA9ICJcCisgICAgJHtMVE99IFwKKyAgICAtLWVuYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1ib290c3RyYXAgXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0td2l0aC1saW5rZXItaGFzaC1zdHlsZT0ke0xJTktFUl9IQVNIX1NUWUxFfSBcCisgICAgLS1lbmFibGUtbGlua2VyLWJ1aWxkLWlkIFwKKyAgICAtLXdpdGgtcHBsPW5vIFwKKyAgICAtLXdpdGgtY2xvb2c9bm8gXAorICAgIC0tZW5hYmxlLWNoZWNraW5nPXJlbGVhc2UgXAorICAgIC0tZW5hYmxlLWNoZWFkZXJzPWNfZ2xvYmFsIFwKKyIKKworRVhUUkFfT0VDT05GX0lOSVRJQUwgPSAiXAorICAgIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKyAgICAtLWRpc2FibGUtbGliZ29tcCBcCisgICAgLS1kaXNhYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKyAgICAtLXdpdGgtc3lzdGVtLXpsaWIgXAorICAgIC0tZGlzYWJsZS1sdG8gXAorICAgIC0tZGlzYWJsZS1wbHVnaW4gXAorICAgIC0tZW5hYmxlLWRlY2ltYWwtZmxvYXQ9bm8gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtZGVjaW1hbC1mbG9hdCAiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcIAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXCAKKyAgICAtLXdpdGgtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXCAKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg4MDExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYmYzZDk2YWU1OGZhMTgwYjhiNDY4ZDI1ZGMyZTAyMDlkYWNhMjc1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM3OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMzVdIGdjYy00LjMuMTogQVJDSF9GTEFHU19GT1JfVEFSR0VUCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBjb25maWd1cmUgICAgfCAgICAyICstCisgY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkODA5NTM1Li4xYjc2YzkwIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03NDM5LDcgKzc0MzksNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA0OGVjMWFhLi44OWQxZDNmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODczLDcgKzI4NzMsNyBAQCBmaQorICMgZm9yIHRhcmdldF9hbGlhcyBhbmQgZ2NjIGRvZXNuJ3QgbWFuYWdlIGl0IGNvbnNpc3RlbnRseS4KKyB0YXJnZXRfY29uZmlnYXJncz0iLS1jYWNoZS1maWxlPS4vY29uZmlnLmNhY2hlICR7dGFyZ2V0X2NvbmZpZ2FyZ3N9IgorIAorLUZMQUdTX0ZPUl9UQVJHRVQ9CisrRkxBR1NfRk9SX1RBUkdFVD0iJEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCIKKyBjYXNlICIgJHRhcmdldF9jb25maWdkaXJzICIgaW4KKyAgKiIgbmV3bGliICIqKQorICAgY2FzZSAiICR0YXJnZXRfY29uZmlnYXJncyAiIGluCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTNiMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAyLXVjbGliYy1jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gZDAzMDk3M2M4NzJjMDBkOTE2OTIxZDg0ZGVlZTBhZjJjMGQzODA4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjM4OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMzVdIHVjbGliYy1jb25mCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIHwgICAgNCArKysrCisgbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgICAgIHwgICAgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK2luZGV4IDYwYjA0OTcuLjZkYzdlYWQgMTAwNzU1CistLS0gYS9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKKysrKyBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorQEAgLTEwNiw2ICsxMDYsMTAgQEAgaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtZ251IF0KKyAgdGhlbgorICAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisrZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC11Y2xpYmMgXQorKyB0aGVuCisrICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorKyAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKyBlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgXSA7IHRoZW4KKyAgIG1ha2UgYm9vdHN0cmFwIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsIHx8IGV4aXQgMQorZGlmZiAtLWdpdCBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK2luZGV4IDc0M2Q5NTEuLmFlNGVhNjAgMTAwNzU1CistLS0gYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworKysrIGIvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKK0BAIC02MDMsNyArNjAzLDcgQEAgaG9zdF9vcz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgCisgIyBUcmFuc2Zvcm0gbGludXgqIHRvICotKi1saW51eC1nbnUqLCB0byBzdXBwb3J0IG9sZCBjb25maWd1cmUgc2NyaXB0cy4KKyBjYXNlICRob3N0X29zIGluCistbGludXgtZ251KikgOzsKKytsaW51eC1nbnUqfGxpbnV4LXVjbGliYyopIDs7CisgbGludXgqKSBob3N0PWBlY2hvICRob3N0IHwgc2VkICdzL15cKC4qLS4qLWxpbnV4XClcKC4qXCkkL1wxLWdudVwyLydgCisgZXNhYworIAorQEAgLTEyNDcsNyArMTI0Nyw3IEBAIGxpbnV4LWdudW9sZGxkKiB8IGxpbnV4LWdudWFvdXQqIHwgbGludXgtZ251Y29mZiopCisgICA7OworIAorICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KKy1saW51eC1nbnUqKQorK2xpbnV4KikKKyAgIHZlcnNpb25fdHlwZT1saW51eAorICAgbmVlZF9saWJfcHJlZml4PW5vCisgICBuZWVkX3ZlcnNpb249bm8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSBkMmQ5ZGQ3NTZjNDM1NmQxNGRkN2FlMDAzODU2MzQ0Y2I0ZjM3OTg1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDA6MTIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8zNV0gZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyB8ICAgIDUgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggIHwgICAgOSArKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggIHwgICAgOSArKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitpbmRleCAwZDMwOWE1Li5mMmYxZTFmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworQEAgLTI2Myw1ICsyNjMsMTAgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgI2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorICNkZWZpbmUgX0dMSUJDWFhfTERCTF9DT01QQVQoZGJsLCBsZGJsKSBcCisgICBleHRlcm4gIkMiIHZvaWQgbGRibCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgjZGJsKSkpCisrI2lmZGVmIF9fVUNMSUJDX18KKysvLyBUaGlzIGlzIGJlY2F1c2UgX19jX2xvY2FsZSBpcyBvZiB0eXBlIF9fY3R5cGVfdG91cGxvd190KiB3aGljaCBpcyBzaG9ydCBvbiB1Y2xpYmMuIGZvciBnbGliYyBpdHMgaW50KgorK19HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcywgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzKTsKKysjZWxzZQorIF9HTElCQ1hYX0xEQkxfQ09NUEFUKF9aU3QxNF9fY29udmVydF90b192SWRFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSwgX1pTdDE0X19jb252ZXJ0X3RvX3ZJZUV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpKTsKKysjZW5kaWYKKyAjZW5kaWYgLy8gX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitpbmRleCBiNWZkOTg5Li4zZGE5YTVkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK0BAIC00MCwxMyArNDAsMjIgQEAKKyAKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorIAorIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrICB0eXBlZGVmIF9fY3R5cGVfdG91cGxvd190KglfX2NfbG9jYWxlOworKyNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorIAorICAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIGFuZCBsb25nIGRvdWJsZSB0byBzdHJpbmcgYW5kCisgICAvLyByZXR1cm4gbGVuZ3RoIG9mIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmggYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK2luZGV4IDJkOGU5NzguLjE0ZWIwOGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorQEAgLTMzLDYgKzMzLDExIEBACisgCisgLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KK0BAIC00MSw3ICs0NiwxMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgc3RydWN0IGN0eXBlX2Jhc2UKKyAgIHsKKyAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVkZWZzLgorKyNpZmRlZiBfX1VDTElCQ19fCisrICAgIHR5cGVkZWYgY29uc3QgX19jdHlwZV90b3VwbG93X3QqCV9fdG9fdHlwZTsKKysjZWxzZQorICAgICB0eXBlZGVmIGNvbnN0IGludCogCQlfX3RvX3R5cGU7CisrI2VuZGlmCisgCisgICAgIC8vIE5COiBPZmZzZXRzIGludG8gY3R5cGU8Y2hhcj46Ol9NX3RhYmxlIGZvcmNlIGEgcGFydGljdWxhciBzaXplCisgICAgIC8vIG9uIHRoZSBtYXNrIHR5cGUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgZG9uJ3QgdXNlIGFuIGVudW0uCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1ZjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoCkBAIC0wLDAgKzEsMjg2MiBAQAorRnJvbSBhNTVjNzUxYTQ0OWMyY2JmMGIzZmNjMDdhYWIxYjg2YmY5NjYxNTEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDE6MzkgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8zNV0gdWNsaWJjLWxvY2FsZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNyArKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA2MyArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgIDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgIDExNyArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyAgICAgICAgfCAgMzA4ICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICA4MCArKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAzMDAgKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgMTAwICsrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgIDExOCArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgNjkyICsrKysrKysrKysrKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgNDA2ICsrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgICA2OCArKworIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3NSArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCAgICAgICB8ICAgIDIgKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgMTYgZmlsZXMgY2hhbmdlZCwgMjY4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK2luZGV4IDA4NzFhNmEuLjMyNmQ3ZWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CisrKysgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitAQCAtMTkwNSw2ICsxOTA1LDkgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0yMDY5LDYgKzIwNzIsNDAgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgQUNfTVNHX1JFU1VMVCh1Y2xpYmMpCisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgQUNfQ0hFQ0tfUFJPRyhjaGVja19tc2dmbXQsIG1zZ2ZtdCwgeWVzLCBubykKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysgICAgICBBQ19TVUJTVChnbGliY3h4X01PRklMRVMpCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9QT0ZJTEVTKQorKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmFlM2U0YQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMCwwICsxLDYzIEBACisrLy8gUHJvdG90eXBlcyBmb3IgR0xJQkMgdGhyZWFkIGxvY2FsZSBfXy1wcmVmaXhlZCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8gV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKworK2V4dGVybiAiQyIgX190eXBlb2YobmxfbGFuZ2luZm9fbCkgX19ubF9sYW5naW5mb19sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyY29sbF9sKSBfX3N0cmNvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmZ0aW1lX2wpIF9fc3RyZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZF9sKSBfX3N0cnRvZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9mX2wpIF9fc3RydG9mX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2xkX2wpIF9fc3RydG9sZF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyeGZybV9sKSBfX3N0cnhmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5ld2xvY2FsZSkgX19uZXdsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihmcmVlbG9jYWxlKSBfX2ZyZWVsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihkdXBsb2NhbGUpIF9fZHVwbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKytleHRlcm4gIkMiIF9fdHlwZW9mKGlzd2N0eXBlX2wpIF9faXN3Y3R5cGVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd2xvd2VyX2wpIF9fdG93bG93ZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHRvd3VwcGVyX2wpIF9fdG93dXBwZXJfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2NvbGxfbCkgX193Y3Njb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3NmdGltZV9sKSBfX3djc2Z0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisrI2VuZGlmCisrCisrI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDgxZGMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Y2Vycm5vPiAgLy8gRm9yIGVycm5vCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8c3RkZXhjZXB0PgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19mOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Q7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fbGQ7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgX19jX2xvY2FsZSBfX29sZCkKKysgIHsKKysgICAgX19jbG9jID0gX19uZXdsb2NhbGUoMSA8PCBMQ19BTEwsIF9fcywgX19vbGQpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIGlmICghX19jbG9jKQorKyAgICAgIHsKKysJLy8gVGhpcyBuYW1lZCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBPUy4KKysJX190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibG9jYWxlOjpmYWNldDo6X1NfY3JlYXRlX2NfbG9jYWxlICIKKysJCQkgICAgICAibmFtZSBub3QgdmFsaWQiKSk7CisrICAgICAgfQorKyNlbmRpZgorKyAgfQorKworKyAgdm9pZAorKyAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7CisrICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisrICB9CisrCisrICBfX2NfbG9jYWxlCisrICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CisrfSAvLyBuYW1lc3BhY2Ugc3RkCisrCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorKyAgICB7CisrICAgICAgIkxDX0NUWVBFIiwKKysgICAgICAiTENfTlVNRVJJQyIsCisrICAgICAgIkxDX1RJTUUiLAorKyAgICAgICJMQ19DT0xMQVRFIiwKKysgICAgICAiTENfTU9ORVRBUlkiLAorKyAgICAgICJMQ19NRVNTQUdFUyIsCisrI2lmIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTICE9IDAKKysgICAgICAiTENfUEFQRVIiLAorKyAgICAgICJMQ19OQU1FIiwKKysgICAgICAiTENfQUREUkVTUyIsCisrICAgICAgIkxDX1RFTEVQSE9ORSIsCisrICAgICAgIkxDX01FQVNVUkVNRU5UIiwKKysgICAgICAiTENfSURFTlRJRklDQVRJT04iCisrI2VuZGlmCisrICAgIH07CisrfQorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKyt9ICAvLyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRhMDdjMWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMCwwICsxLDExNyBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmbmRlZiBfQ19MT0NBTEVfSAorKyNkZWZpbmUgX0NfTE9DQUxFX0ggMQorKworKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKysKKysjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKyNlbmRpZgorKyNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggY2F0ZWdvcmllcworKyNlbmRpZgorKy8vICNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgNgorKyNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrbmFtZXNwYWNlIF9fZ251X2N4eAorK3sKKysgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyt9CisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgdHlwZWRlZiBfX2xvY2FsZV90CQlfX2NfbG9jYWxlOworKyNlbHNlCisrICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworKyNlbmRpZgorKworKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIGJlIGF2b2lkZWQuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CisrICAgIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIHsKKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3NhdiwgX19vbGQpOworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKyAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworKyNlbmRpZgorKyAgICAgIHJldHVybiBfX3JldDsKKysgICAgfQorK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY0YWE5NjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzA4IEBACisrLy8gc3RkOjpjb2RlY3Z0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjUgLSBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+ICAvLyBGb3IgTUJfQ1VSX01BWAorKyNpbmNsdWRlIDxjbGltaXRzPiAgLy8gRm9yIE1CX0xFTl9NQVgKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKKysJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKysJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIHdjc25ydG9tYnMgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHdjcnRvbWIgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kID0gd21lbWNocihfX2Zyb21fbmV4dCwgTCdcMCcsCisrCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjc25ydG9tYnMoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkJIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIHdjcnRvbWIuCisrCSAgICBmb3IgKDsgX19mcm9tIDwgX19mcm9tX25leHQ7ICsrX19mcm9tKQorKwkgICAgICBfX3RvX25leHQgKz0gd2NydG9tYihfX3RvX25leHQsICpfX2Zyb20sICZfX3RtcF9zdGF0ZSk7CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgZXh0ZXJuX3R5cGUgX19idWZbTUJfTEVOX01BWF07CisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICBjb25zdCBzaXplX3QgX19jb252ID0gd2NydG9tYihfX2J1ZiwgKl9fZnJvbV9uZXh0LCAmX190bXBfc3RhdGUpOworKwkgICAgaWYgKF9fY29udiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3RvX25leHQpKQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYpOworKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkJX190b19uZXh0ICs9IF9fY29udjsKKysJCSsrX19mcm9tX25leHQ7CisrCSAgICAgIH0KKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKysJaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorKwkJCQkJCQkJICBfX2Zyb21fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tX25leHQpKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2Zyb21fZW5kOworKworKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoOzsgKytfX3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoX190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICAvLyBJdCBpcyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuCisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGlmIChfX3RvX25leHQgPCBfX3RvX2VuZCkKKysJICAgICAgeworKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJCSsrX19mcm9tX25leHQ7CisrCQkqX190b19uZXh0KysgPSBMJ1wwJzsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQorKyAgeworKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisrICAgIC8vIHN0YXRlbGVzcyBhbmQgaXMgZWl0aGVyIHNpbmdsZS1ieXRlIG9yIHZhcmlhYmxlLXdpZHRoLgorKyAgICBpbnQgX19yZXQgPSAwOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKysgICAgICBfX3JldCA9IDE7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisrICAgIGludCBfX3JldCA9IE1CX0NVUl9NQVg7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAorKyAgeworKyAgICBpbnQgX19yZXQgPSAwOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrCisrICAgIC8vIEEgZHVtbXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBjb25zaWRlcgorKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBOVUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuCisrICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkKKysJCQkJCQkJICAgKiBfX21heCkpOworKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrICAgICAgeworKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsKKysJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1wwJywKKysJCQkJCQkJCSAgX19lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb20pKTsKKysJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsKKysKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisrCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20sCisrCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKE5VTEwsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sCisrCQkJCSAmX190bXBfc3RhdGUpOworKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQorKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCSAgICBicmVhazsKKysJICB9CisrCWlmICghX19mcm9tKQorKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisrCisrCV9fcmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207CisrCV9fbWF4IC09IF9fY29udjsKKysKKysJaWYgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKwkgIHsKKysJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCSAgICArK19fZnJvbTsKKysJICAgICsrX19yZXQ7CisrCSAgICAtLV9fbWF4OworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzI2NjRhNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTAsMCArMSw4MCBAQAorKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNC4xLjIgIGNvbGxhdGUgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorKyAgLy8gYmUgcHV0IHRoZXJlIGluc3RlYWQgb2YgaGVyZS4KKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciogX19vbmUsIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX19zdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciogX190bywgY29uc3QgY2hhciogX19mcm9tLAorKwkJCQlzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3N0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgaW50CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19vbmUsCisrCQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9fdG8sIGNvbnN0IHdjaGFyX3QqIF9fZnJvbSwKKysJCQkJICAgc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX193Y3N4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjk0ZTNhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDAgQEAKKysvLyBzdGQ6OmN0eXBlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4xLjEuMiAgY3R5cGUgdmlydHVhbCBmdW5jdGlvbnMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKysjZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKysgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorKyAgdGVtcGxhdGU8PgorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKysgICAgeworKyAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCXsKKysJICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlKTsKKysJICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUsIF9fcyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICB0aGlzLT5fTV90b3VwcGVyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG91cHBlcjsKKysJICB0aGlzLT5fTV90b2xvd2VyID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfdG9sb3dlcjsKKysJICB0aGlzLT5fTV90YWJsZSA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX2I7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0CisrICB7CisrICAgIF9fd21hc2tfdHlwZSBfX3JldDsKKysgICAgc3dpdGNoIChfX20pCisrICAgICAgeworKyAgICAgIGNhc2Ugc3BhY2U6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgic3BhY2UiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHJpbnQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHJpbnQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgY250cmw6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgdXBwZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgidXBwZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgbG93ZXI6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgibG93ZXIiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxwaGE6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgcHVuY3Q6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgicHVuY3QiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgeGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbG51bToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBncmFwaDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJX19yZXQgPSBfX3dtYXNrX3R5cGUoKTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3d1cHBlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX190b3dsb3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysgICAgICAgICpfX2xvID0gX190b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgICAgICArK19fbG87CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGJvb2wKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKysgIHsKKysgICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysgICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKysgICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysgICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKyAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCisrCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCXsKKysJICBfX3JldCA9IHRydWU7CisrCSAgYnJlYWs7CisrCX0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX2lzKGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdAorKyAgeworKyAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX192ZWMsICsrX19sbykKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwltYXNrIF9fbSA9IDA7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19pc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOworKwkqX192ZWMgPSBfX207CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgIXRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkgJiYgdGhpcy0+ZG9faXMoX19tLCAqX19sbykgIT0gMCkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsgfQorKworKyAgY29uc3QgY2hhcioKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIHdjaGFyX3QqIF9fZGVzdCkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKyAgICAgIHsKKysJKl9fZGVzdCA9IF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvKV07CisrCSsrX19sbzsKKysJKytfX2Rlc3Q7CisrICAgICAgfQorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIGNoYXIKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyh3Y2hhcl90IF9fd2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CisrICB7CisrICAgIGlmIChfX3djID49IDAgJiYgX193YyA8IDEyOCAmJiBfTV9uYXJyb3dfb2spCisrICAgICAgcmV0dXJuIF9NX25hcnJvd1tfX3djXTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoX193Yyk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX25hcnJvdyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBjaGFyIF9fZGZhdWx0LAorKwkgICAgY2hhciogX19kZXN0KSBjb25zdAorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGlmIChfTV9uYXJyb3dfb2spCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgaWYgKCpfX2xvID49IDAgJiYgKl9fbG8gPCAxMjgpCisrCSAgICAqX19kZXN0ID0gX01fbmFycm93WypfX2xvXTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgICAgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgICB9CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrICAgIGVsc2UKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICpfX2Rlc3QgPSAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrCSAgKytfX2xvOworKwkgICsrX19kZXN0OworKwl9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgICByZXR1cm4gX19oaTsKKysgIH0KKysKKysgIHZvaWQKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX2N0eXBlKCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICB3aW50X3QgX19pOworKyAgICBmb3IgKF9faSA9IDA7IF9faSA8IDEyODsgKytfX2kpCisrICAgICAgeworKwljb25zdCBpbnQgX19jID0gd2N0b2IoX19pKTsKKysJaWYgKF9fYyA9PSBFT0YpCisrCSAgYnJlYWs7CisrCWVsc2UKKysJICBfTV9uYXJyb3dbX19pXSA9IHN0YXRpY19jYXN0PGNoYXI+KF9fYyk7CisrICAgICAgfQorKyAgICBpZiAoX19pID09IDEyOCkKKysgICAgICBfTV9uYXJyb3dfb2sgPSB0cnVlOworKyAgICBlbHNlCisrICAgICAgX01fbmFycm93X29rID0gZmFsc2U7CisrICAgIGZvciAoc2l6ZV90IF9faiA9IDA7CisrCSBfX2ogPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRfdCk7ICsrX19qKQorKyAgICAgIF9NX3dpZGVuW19fal0gPSBidG93YyhfX2opOworKworKyAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gMTE7ICsrX19rKQorKyAgICAgIHsKKysJX01fYml0W19fa10gPSBzdGF0aWNfY2FzdDxtYXNrPihfSVNiaXQoX19rKSk7CisrCV9NX3dtYXNrW19fa10gPSBfTV9jb252ZXJ0X3RvX3dtYXNrKF9NX2JpdFtfX2tdKTsKKysgICAgICB9CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKyAgfQorKyNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjEzNTk0ZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDEwMCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjZWxzZQorKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysgIHRlbXBsYXRlPD4KKysgICAgc3RyaW5nCisrICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxzZQorKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZW5kaWYKKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB3c3RyaW5nCisrICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsc2UKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVuZGlmCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xNDI0MDc4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMCwwICsxLDExOCBAQAorKy8vIHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisrZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CisrI2Vsc2UKKysjdW5kZWYgX190ZXh0ZG9tYWluCisrI3VuZGVmIF9fYmluZHRleHRkb21haW4KKysjZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNlbmRpZgorKworKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2dldF9jX2xvY2FsZSgpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICAgeyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQlzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgeworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysgICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorKyAgICB7CisrICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworKyAgICB9CisrCisrICAvLyBWaXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNzYWdlcygpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV9tZXNzYWdlcyAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX21lc3NhZ2VzOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKysJCQkgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAorKyAgICB7CisrICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisrICAgICAgLy8gYmUgdXNlZC4KKysgICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHZvaWQKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKKysgICAgeyB9CisrCisrICAgLy8gbWVzc2FnZXNfYnluYW1lCisrICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisrICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQorKyAgICAgeworKyAgICAgICBpZiAodGhpcy0+X01fbmFtZV9tZXNzYWdlcyAhPSBsb2NhbGU6OmZhY2V0OjpfU19nZXRfY19uYW1lKCkpCisrCSBkZWxldGUgW10gdGhpcy0+X01fbmFtZV9tZXNzYWdlczsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIGlmIChzdGQ6OnN0cmNtcChfX3MsICJDIikgIT0gMCAmJiBzdGQ6OnN0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisrCSB7CisrCSAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOworKwkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisrCSB9CisrICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhNTI3MzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDY5MiBAQAorKy8vIHN0ZDo6bW9uZXlwdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgb3B0aW1pemUgdGhpcyBmb3IgdWNsaWJjCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorKyAgbW9uZXlfYmFzZTo6cGF0dGVybgorKyAgbW9uZXlfYmFzZTo6X1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKQorKyAgeworKyAgICBwYXR0ZXJuIF9fcmV0OworKworKyAgICAvLyBUaGlzIGluc2FuZWx5IGNvbXBsaWNhdGVkIHJvdXRpbmUgYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdmFsaWQKKysgICAgLy8gcGF0dGVybiBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKysKKysgICAgLy8gaWYgKF9fcHJlY2VkZXMpIHN5bWJvbCAtPiB2YWx1ZQorKyAgICAvLyBlbHNlIHZhbHVlIC0+IHN5bWJvbAorKworKyAgICAvLyBpZiAoX19zcGFjZSkgc3BhY2UKKysgICAgLy8gZWxzZSBub25lCisrCisrICAgIC8vIG5vbmUgPT0gbmV2ZXIgZmlyc3QKKysgICAgLy8gc3BhY2UgbmV2ZXIgZmlyc3Qgb3IgbGFzdAorKworKyAgICAvLyBBbnkgZWxlZ2FudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBhcmUgd2VsY29tZS4KKysgICAgc3dpdGNoIChfX3Bvc24pCisrICAgICAgeworKyAgICAgIGNhc2UgMDoKKysgICAgICBjYXNlIDE6CisrCS8vIDEgVGhlIHNpZ24gcHJlY2VkZXMgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCV9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBzaWduIGFuZCBlbmRzIHdpdGggbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDI6CisrCS8vIDIgVGhlIHNpZ24gZm9sbG93cyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJaWYgKF9fc3BhY2UpCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlaXRoZXIgZW5kcyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVuZHMgd2l0aCBzaWduIHRoZW4gbm9uZS4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDM6CisrCS8vIDMgVGhlIHNpZ24gaW1tZWRpYXRlbHkgcHJlY2VkZXMgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBjYXNlIDQ6CisrCS8vIDQgVGhlIHNpZ24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCTsKKysgICAgICB9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IHRydWUKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgaWYgKCFfX25wb3NuKQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sCisrCQkJCQkJCV9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgIC8vIF9JbnRsID09IGZhbHNlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkJY29uc3QgY2hhciopCisrI2Vsc2UKKysJCQkJCQkJY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysJICAgIHsKKysJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrCSAgICAgIHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrCSAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrCSAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgdm9pZAorKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCSAgICAgICBjb25zdCBjaGFyKikKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICB7CisrICAgIGlmICghX01fZGF0YSkKKysgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47CisrCisrICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKysJICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbW9uZXRhcnkKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsc2UKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisrICAgICAgICAgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7CisrICAgICAgICAgICAgICBzaXplX3QgX19sZW47CisrICAgICAgICAgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKysgICAgICAgICAgICAgIGlmIChfX2xlbikKKysgICAgICAgICAgICAgICAgeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfcHMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX3djc19wczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgICB9CisrICAgICAgICAgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgICAgICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCSAgICB9CisrCisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODgzZWMxYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi4zLjEuMiAgbnVtcHVuY3QgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPSBfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPSBfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCisrCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9ICJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8Y2hhcj46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisrCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldKTsKKysKKysJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX251bV9iYXNlOjpfU19pZW5kOyArK19faikKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19fal0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrCisrCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWVfc2l6ZSA9IDU7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysgI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTA3MDdkNworLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTAsMCArMSw0MDYgQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46OgorKyAgICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSAiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9ICIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9ICJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSAiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSAiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9ICJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9ICJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSAiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9ICJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSAiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9ICJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9ICJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9ICJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSAiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9ICJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSAiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9ICJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSAiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSAiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9ICJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSAiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9ICJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gIkRlYyI7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfVF9GTVQsCisrCQkJCQkJCSAgICAgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fbmxfbGFuZ2luZm9fbChBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX25sX2xhbmdpbmZvX2woUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX19ubF9sYW5naW5mb19sKERBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX25sX2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX19ubF9sYW5naW5mb19sKERBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX25sX2xhbmdpbmZvX2woREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX19ubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX19ubF9sYW5naW5mb19sKE1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX19ubF9sYW5naW5mb19sKE1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX19ubF9sYW5naW5mb19sKE1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX19ubF9sYW5naW5mb19sKE1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX19ubF9sYW5naW5mb19sKE1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX19ubF9sYW5naW5mb19sKE1PTl8xMiwgX19jbG9jKTsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMTIsIF9fY2xvYyk7CisrCX0KKysgICAgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjoKKysgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwgX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSBMJ1wwJzsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysjd2FybmluZyB3aWRlIHRpbWUgc3R1ZmYKKysvLyAgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19nZXRfY19sb2NhbGUoKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IEwiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gTCIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9hbSA9IEwiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gTCJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gTCIiOworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX01fZGF0YS0+X01fZGF5MSA9IEwiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gTCJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBMIlR1ZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBMIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IEwiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBMIkZyaWRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IEwiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBMIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBMIk1vbiI7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBMIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBMIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBMIlRodSI7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBMIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBMIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gTCJKYW51YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gTCJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IEwiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBMIkFwcmlsIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBMIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBMIkp1bHkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBMIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IEwiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gTCJPY3RvYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gTCJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IEwiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IEwiSmFuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IEwiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IEwiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IEwiQXByIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IEwiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IEwiSnVsIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IEwiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IEwiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IEwiT2N0IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IEwiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IEwiRGVjIjsKKysJfQorKyNpZiAwCisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG0gPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVF9BTVBNLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IF9fdS5fX3c7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fdS5fX3c7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fdS5fX3c7CisrCX0KKysjZW5kaWYgLy8gMAorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJhOGU4NTgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTAsMCArMSw2OCBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisrICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorKwkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisrICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIHsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworKyAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisrCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggZjQwZGRjZi4uYzU3YTc1MSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xNTgyMiw2ICsxNTgyMiw5IEBAIGZpCisgICAjIERlZmF1bHQgdG8gImdlbmVyaWMiLgorICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGF1dG87IHRoZW4KKyAgICAgY2FzZSAke3RhcmdldF9vc30gaW4KKysgICAgICAqLXVjbGliYyopCisrICAgICAgICBlbmFibGVfY2xvY2FsZV9mbGFnPXVjbGliYworKyAgICAgICAgOzsKKyAgICAgICBsaW51eCogfCBnbnUqIHwga2ZyZWVic2QqLWdudSB8IGtuZXRic2QqLWdudSkKKyAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1nbnUKKyAJOzsKK0BAIC0xNjA3OSw2ICsxNjA4Miw3OCBAQCAkYXNfZWNobyAibmV3bGliIiA+JjY7IH0KKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdWNsaWJjIiA+JjUKKyskYXNfZWNobyAidWNsaWJjIiA+JjY7IH0KKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG1zZ2ZtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2hlY2tfbXNnZm10K3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSIkY2hlY2tfbXNnZm10IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJ5ZXMiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQiICYmIGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10PSJubyIKKytmaQorK2ZpCisrY2hlY2tfbXNnZm10PSRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdAorK2lmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNoZWNrX21zZ2ZtdCIgPiY1CisrJGFzX2VjaG8gIiRjaGVja19tc2dmbXQiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKworKworKworKyAgICAgIENMT0NBTEVfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrICAgICAgQ0xPQ0FMRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworKyAgICAgIENDT0xMQVRFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKyAgICAgIENDVFlQRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysgICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKyAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysgICAgICA7OworICAgZXNhYworIAorICAgIyBUaGlzIGlzIHdoZXJlIHRoZSB0ZXN0c3VpdGUgbG9va3MgZm9yIGxvY2FsZSBjYXRhbG9ncywgdXNpbmcgdGhlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAoraW5kZXggNTgwZDcyNS4uM2ZlNjFiOCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorQEAgLTEwMSw3ICsxMDEsOSBAQCB1c2luZyBzdGQ6OndtZW1jbXA7CisgdXNpbmcgc3RkOjp3bWVtY3B5OworIHVzaW5nIHN0ZDo6d21lbW1vdmU7CisgdXNpbmcgc3RkOjp3bWVtc2V0OworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgdXNpbmcgc3RkOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAKKyAjaWYgX0dMSUJDWFhfVVNFX0M5OQorIHVzaW5nIHN0ZDo6d2NzdG9sZDsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK2luZGV4IDBlNmIxZmMuLjQwNWFlZTIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorQEAgLTE3NSw3ICsxNzUsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAgdXNpbmcgOjp3Y3Njb2xsOworICAgdXNpbmcgOjp3Y3NjcHk7CisgICB1c2luZyA6Ondjc2NzcG47CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyAgIHVzaW5nIDo6d2NzZnRpbWU7CisrI2VuZGlmCisgICB1c2luZyA6Ondjc2xlbjsKKyAgIHVzaW5nIDo6d2NzbmNhdDsKKyAgIHVzaW5nIDo6d2NzbmNtcDsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2gKQEAgLTAsMCArMSwyNTcgQEAKK0Zyb20gNmEzZTg1MDZhMTJjMTI3MjhkOGIyOTkwMWRlZmQ3MzhiZTQzNzU3ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQyOjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMzVdIHVjbGliYy1sb2NhbGUtbm9fX3gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNDUgKysrKysrKysrKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgMTQgLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgICAxICsKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgIDcgLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgICA3IC0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgICAgNyArLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTggKysrLS0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgIDQgLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDMgLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgIDMgLS0KKyAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmCisgCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKKysjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKKysjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAorKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKKysjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCisrIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCisrIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKKysjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKKysjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKysKKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAorKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAorKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKKysjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAorKyMgZW5kaWYKKysKKysjZWxzZQorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCisrIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KKysvLworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQorKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICB0ZW1wbGF0ZTw+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorIHsKKyAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyB9CisrI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKyAjZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK2luZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTM4LDEzICszOCw2IEBACisgI3VuZGVmIF9MSUJDCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK2luZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7CistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAgIH0KKyAKK0BAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICB7CisgICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAgLy8gYmUgdXNlZC4KKy0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTQwLDkgKzQwLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA2ODU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIDIyNTUxMWEzYWViMTkzYTkxNmIzOTk5ZjBiNjQwYTM5MmNhYTY3Y2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDA2LzM1XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgICAgNCArKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgfCAgIDEzICsrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAJeworIAkgIC8vIE5hbWVkIGxvY2FsZS4KKyAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKyAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKyAKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisgCisgCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisgCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUxMTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDU0MiBAQAorRnJvbSA2ZmZlN2M0NmY1MmQyNzg2NGMzZGYzNjYzZTE2ZWM5ZGRlZTcxZThmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDY6NTggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8zNV0gdWNsaWJjLWxvY2FsZS11cGRhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgIDMgKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICA3NCArKysrKysrKystLS0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgICA0MiArKysrKystLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgICA1MSArKysrKysrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxMiArKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgIDM0ICsrKysrLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgNSArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAxOCArKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgICAxNyArKystLQorIDkgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCBlNzRmZGRmLi45NzFhNmI0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0zMSw2ICszMSw5IEBACisgCisgI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisgI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGNzdGRkZWY+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggMjE0MzBkMC4uMWI5ZDhlMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjMgKzM5LDIwIEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgdGVtcGxhdGU8PgorICAgICB2b2lkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Q7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtODAsMTYgKzc0LDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCwxNyArMTAxLDE4IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHZvaWQKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeworLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKyAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKyAgIH0KKyAKKyAgIF9fY19sb2NhbGUKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKy19IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy1uYW1lc3BhY2UgX19nbnVfY3h4CisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorKworICAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisgICAgIHsKKyAgICAgICAiTENfQ1RZUEUiLAorQEAgLTEzOCw5ICsxMzAsMTEgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorICAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKyAjZW5kaWYKKyAgICAgfTsKKy19CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworLX0gIC8vIG5hbWVzcGFjZSBzdGQKKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggNGJjYTVmMS4uNjRhNmQ0NiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNzgsMjMgKzgwLDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKy0KKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisrI2VuZGlmCisrCQkgICAgICwKKysJCSAgICAgY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUsCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCisgICAgIHsKKysgICAgICB2YV9saXN0IF9fYXJnczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysKKyAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorLSAgICB7CisgIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKK0BAIC0xMDMsNyArMTA3LDkgQEAgbmFtZXNwYWNlIHN0ZAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggN2IxMjg2MS4uMTNlMDExZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTMzLDE2ICszMywyMCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKyAgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorLSAgdGVtcGxhdGU8PgorICAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKyAgICAgeworQEAgLTU3LDYgKzYxLDggQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorIAl9CisgICAgIH0KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+Ojp+Y3R5cGVfYnluYW1lKCkKKysgICAgeyB9CisgCisgI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCitAQCAtMTM4LDE3ICsxNDQsMzMgQEAgbmFtZXNwYWNlIHN0ZAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorICAgeworLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKysKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisrCisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KKyAKK0BAIC0yOTAsNCArMzEyLDUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorICAgfQorICNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKy19CisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCBkODlkYTMzLi4wNjc2NTdhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTUzLDEyICs1MywxNiBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJc2l6ZV90IF9fcmVmcykKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMzFlYmI5Zi4uNzY3OWI5YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTIwNiw3ICsyMTEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorQEAgLTM5MCw3ICszOTUsOSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAJICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKyAJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorQEAgLTQ3Nyw4ICs0ODQsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC00OTgsOCArNTA1LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorQEAgLTU0NSw4ICs1NTIsMTEgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrICAgICAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworKyAgICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTYzMyw4ICs2NDMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNjUzLDggKzY2Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggZDVjODk2MS4uOGFlODk2OSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZDg0OGVkNS4uZjI0ZDUzZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC01MywxMSArNTMsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK0BAIC0yMDcsMTEgKzIxMCwxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggYmE4ZTg1OC4uMTY2NWRkZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtNTAsMTIgKzUwLDIxIEBACisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeworLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrCisrICAgICAgdHJ5CisrCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorKyAgICAgIGNhdGNoKC4uLikKKysJeworKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJfQorKworICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyMzgwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gOWYyMTU4NDUxOTgxY2YwYTgwY2ZhYmRjNzlhZTMxYmI2OTc2YTgwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMzVdIG1pc3NpbmctZXhlY2luZm9faAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGJvZWhtLWdjL2luY2x1ZGUvZ2MuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAoraW5kZXggYzUxZTAxNy4uYTdiYThkYyAxMDA2NDQKKy0tLSBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorKysrIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitAQCAtNTAzLDcgKzUwMyw3IEBAIEdDX0FQSSBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVfb2ZmX3BhZ2UgR0NfUFJPVE8oKHNpemVfdCBsYikpOworICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY4Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOS1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBlMzkzZTA3NmYxYWI4MmQyNWUxYWEwNGQ2ZWRlYTI3YjQxZDNlYjA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8zNV0gYzk5LXNucHJpbnRmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitpbmRleCBlODViZDgzLi42YWY4MzlhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK0BAIC0xMzksNyArMTM5LDcgQEAgbmFtZXNwYWNlIHN0ZAorICAgdXNpbmcgOjp2c3ByaW50ZjsKKyB9IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg1NzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDczZjY5ZDgwNmUyYzk1NjFhNTQ5OTUyMjM0MzFhMTA3NmNmZDYxNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDEwLzM1XSBjOTktY29tcGxleC11Z2x5LWhhY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBjNTdhNzUxLi5hMTMzM2UyIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE4NzM0LDYgKzE4NzM0LDkgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElTTyBDOTkgc3VwcG9ydCB0byBUUjEgaW4gPGNvbXBsZXguaD4uLi4gIiA+JjY7IH0KKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaW5jbHVkZSA8Y29tcGxleC5oPgorKyNpZmRlZiBfX1VDTElCQ19fCisrI2Vycm9yIHVnbHkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIHRlc3QgZmFpbHMgaGVyZSBmb3IgY3Jvc3MgdW50aWwgdUNsaWJjIHN1cHBvcnRzIHRoZSBjb21wbGV4IGZ1bmNzCisrI2VuZGlmCisgaW50CisgbWFpbiAoKQorIHsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMS1pbmRleF9tYWNyby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNzliMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBiMDM3OTUzZTQwMzEyYjQ1YWI4NGVkMGEzYWQ4ODJiYjVlNDEzMTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTE6MDIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8zNV0gaW5kZXhfbWFjcm8KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSAgICAgICB8ICAgIDMgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggfCAgICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZSBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCitpbmRleCAzOGViMWU4Li4xNThkMjFhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCitAQCAtNTUsNiArNTUsOSBAQAorICNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyAjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworICMgaWZkZWYgX19HQworICMgICBkZWZpbmUgX19HQ19DT05TVCBjb25zdAorICMgZWxzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKK2luZGV4IGQ3YjVjYmQuLmI5YjNhY2IgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKK0BAIC00OCw2ICs0OCw5IEBACisgI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorICNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisgCisrLyogY29wZSB3LyBpbmRleCBkZWZpbmVkIGFzIG1hY3JvLCBTdVN2MyBwcm9wb3NhbCAqLworKyN1bmRlZiBpbmRleAorKworIG5hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEyLWxpYm11ZGZsYXAtc3VzdjMtbGVnYWN5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMi1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhkNDVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMi1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGEwY2IxM2JkZDk4YTk0MWI4MWZkYWZlNGNkOTZlNGM1NjlmZWI2NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDEyLzM1XSBsaWJtdWRmbGFwLXN1c3YzLWxlZ2FjeQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGlibXVkZmxhcC9tZi1ob29rczIuYyB8ICAgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJtdWRmbGFwL21mLWhvb2tzMi5jIGIvbGlibXVkZmxhcC9tZi1ob29rczIuYworaW5kZXggNGFmMTdkZi4uYTNjNmIyZiAxMDA2NDQKKy0tLSBhL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKKysrKyBiL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKK0BAIC00MjQsNyArNDI0LDcgQEAgV1JBUFBFUjIodm9pZCwgYnplcm8sIHZvaWQgKnMsIHNpemVfdCBuKQorIHsKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiemVybyByZWdpb24iKTsKKy0gIGJ6ZXJvIChzLCBuKTsKKysgIG1lbXNldCAocywgMCwgbik7CisgfQorIAorIAorQEAgLTQzNCw3ICs0MzQsNyBAQCBXUkFQUEVSMih2b2lkLCBiY29weSwgY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkZXN0LCBzaXplX3QgbikKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHNyYywgbiwgX19NRl9DSEVDS19SRUFELCAiYmNvcHkgc3JjIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoZGVzdCwgbiwgX19NRl9DSEVDS19XUklURSwgImJjb3B5IGRlc3QiKTsKKy0gIGJjb3B5IChzcmMsIGRlc3QsIG4pOworKyAgbWVtbW92ZSAoZGVzdCwgc3JjLCBuKTsKKyB9CisgCisgCitAQCAtNDQ0LDcgKzQ0NCw3IEBAIFdSQVBQRVIyKGludCwgYmNtcCwgY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBzaXplX3QgbikKKyAgIFRSQUNFICgiJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgTUZfVkFMSURBVEVfRVhURU5UKHMxLCBuLCBfX01GX0NIRUNLX1JFQUQsICJiY21wIDFzdCBhcmciKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMiwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAybmQgYXJnIik7CistICByZXR1cm4gYmNtcCAoczEsIHMyLCBuKTsKKysgIHJldHVybiBuID09IDAgPyAwIDogbWVtY21wIChzMSwgczIsIG4pOworIH0KKyAKKyAKK0BAIC00NTMsNyArNDUzLDcgQEAgV1JBUFBFUjIoY2hhciAqLCBpbmRleCwgY29uc3QgY2hhciAqcywgaW50IGMpCisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAiaW5kZXggcmVnaW9uIik7CistICByZXR1cm4gaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cmNociAocywgYyk7CisgfQorIAorIAorQEAgLTQ2Miw3ICs0NjIsNyBAQCBXUkFQUEVSMihjaGFyICosIHJpbmRleCwgY29uc3QgY2hhciAqcywgaW50IGMpCisgICBzaXplX3QgbiA9IHN0cmxlbiAocyk7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBDTEFNUEFERChuLCAxKSwgX19NRl9DSEVDS19SRUFELCAicmluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIHJpbmRleCAocywgYyk7CisrICByZXR1cm4gc3RycmNociAocywgYyk7CisgfQorIAorIC8qIFhYWDogIHN0cGNweSwgbWVtY2NweSAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlZmRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDEwNGU0ZDY2MjA4ZjI3MjZiMTRkMmY1ZWViY2U5MDcwMGNiYzgzYzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDEzLzM1XSBsaWJzdGRjKystbmFtZXNwYWNlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCB8ICAgIDQgKysrLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgICAgfCAgICA0ICsrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAwNjc2NTdhLi5kZDc2YTZjIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTMyLDcgKzMyLDggQEAKKyAvLworIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CistCisrbmFtZXNwYWNlIHN0ZAorK3sKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKK0BAIC0xMTYsMyArMTE3LDQgQEAKKyAJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworIAkgfQorICAgICAgfQorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IDE2NjVkZGUuLjkwNWM0MzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAvLworIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CistCisrbmFtZXNwYWNlIHN0ZAorK3sKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCitAQCAtNzUsMyArNzYsNCBAQAorICAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAgICAgfQorK30KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGZkNTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSBlZGM5YWNiMTgxODEwZjIzNGI2YjlmN2QyODIwYjBlNGY2YTFlZWFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6NDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8zNV0gc2gtcHIyNDgzNgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9tYWlsYXJjaGl2ZS9mb3J1bS5waHA/dGhyZWFkX2lkPTg5NTkzMDQmZm9ydW1faWQ9NTM0OAoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yNDgzNgorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGUxMmExODAuLjEzNWJiZjUgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjMzNzgsNyArMjMzNzgsNyBAQCBmb286CS5sb25nCTI1CisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZWJhMzU3Ny4uNjM2M2EyMSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0zMTQxLDcgKzMxNDEsNyBAQCBmb286CS5sb25nCTI1CisgCXRsc19maXJzdF9taW5vcj0xNAorIAl0bHNfYXNfb3B0PSItbTY0IC1BZXNhbWUgLS1mYXRhbC13YXJuaW5ncyIKKyAJOzsKKy0gIHNoLSotKiB8IHNoWzM0XS0qLSopCisrICBzaC0qLSogfCBzaFszNF0qLSotKikKKyAgICAgY29uZnRlc3Rfcz0nCisgCS5zZWN0aW9uICIudGRhdGEiLCJhd1QiLEBwcm9nYml0cworIGZvbzoJLmxvbmcJMjUKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA1MGU1MzY2MDA1YjBmNmFmMjczNzhlMmE1YzNjYjlmOTkzNmE3ZTYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTg6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8zNV0gYXJtOiBVc2UgVEFSR0VUX0VORElBTl9PUFRJT04gZm9yIGRldGVybWluaW5nCisgTVVMVElMSUJfREVGQVVMVFMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK2luZGV4IDQ4OGVmYTQuLjc1M2RjM2EgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK0BAIC00Niw3ICs0Niw3IEBACisgCisgI3VuZGVmICBNVUxUSUxJQl9ERUZBVUxUUworICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLQl7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1mbG9hdC1hYmk9aGFyZCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrCXsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1mbG9hdC1hYmk9aGFyZCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisgCisgLyogTm93IHdlIGRlZmluZSB0aGUgc3RyaW5ncyB1c2VkIHRvIGJ1aWxkIHRoZSBzcGVjIGZpbGUuICAqLworICN1bmRlZiAgTElCX1NQRUMKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NWU0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKQEAgLTAsMCArMSwyMjEgQEAKK0Zyb20gMTYwMzk3ZWYzYzMzMzEwOTlhZjAyOGYxYjhkM2UwODViMDdkODhhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU5OjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMzVdIGdjYzogcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjogY29kZXNvdXJjZXJ5XQorLS0tCisgZ2NjL01ha2VmaWxlLmluICAgICB8ICAgIDIgKy0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgICAgNCArKysrCisgZ2NjL2NvbmZpZy5pbiAgICAgICB8ICAgIDYgKysrKysrCisgZ2NjL2NvbmZpZ3VyZSAgICAgICB8ICAgMjAgKysrKysrKysrKysrKysrKysrLS0KKyBnY2MvY29uZmlndXJlLmFjICAgIHwgICAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKysKKyBnY2MvaW5jcGF0aC5jICAgICAgIHwgICAxOSArKysrKysrKysrKysrKysrKysrCisgOCBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOC40L2djYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9NYWtlZmlsZS5pbgorKysrIGdjYy00LjguNC9nY2MvTWFrZWZpbGUuaW4KK0BAIC0yMDE5LDcgKzIwMTksNyBAQCBhdHRyaWJzLm8gOiBhdHRyaWJzLmMgJChDT05GSUdfSCkgJChTWVNUCisgCisgaW5jcGF0aC5vOiBpbmNwYXRoLmMgaW5jcGF0aC5oICQoQ09ORklHX0gpICQoU1lTVEVNX0gpICQoQ1BQTElCX0gpIFwKKyAJCWludGwuaCBwcmVmaXguaCBjb3JldHlwZXMuaCAkKFRNX0gpIGNwcGRlZmF1bHQuaCAkKFRBUkdFVF9IKSBcCistCQkkKE1BQ0hNT0RFX0gpCisrCQkkKE1BQ0hNT0RFX0gpICQoRkxBR1NfSCkgdG9wbGV2LmgKKyAKKyBDRkxBR1MtcHJlZml4Lm8gKz0gLURQUkVGSVg9XCIkKHByZWZpeClcIiAtREJBU0VWRVI9JChCQVNFVkVSX3MpCisgcHJlZml4Lm86IHByZWZpeC5jICQoQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oIHByZWZpeC5oIFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbW1vbi5vcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29tbW9uLm9wdAorKysrIGdjYy00LjguNC9nY2MvY29tbW9uLm9wdAorQEAgLTU5NSw2ICs1OTUsMTAgQEAgV3BlZGFudGljCisgQ29tbW9uIFZhcihwZWRhbnRpYykgV2FybmluZworIElzc3VlIHdhcm5pbmdzIG5lZWRlZCBmb3Igc3RyaWN0IGNvbXBsaWFuY2UgdG8gdGhlIHN0YW5kYXJkCisgCisrV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytDb21tb24gVmFyKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykgSW5pdCgxKSBXYXJuaW5nCisrV2FybiBmb3IgLUkgYW5kIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIGlmIGNyb3NzIGNvbXBpbGluZworKworIFdzaGFkb3cKKyBDb21tb24gVmFyKHdhcm5fc2hhZG93KSBXYXJuaW5nCisgV2FybiB3aGVuIG9uZSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcuaW4KKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy5pbgorQEAgLTEzOCw2ICsxMzgsMTIgQEAKKyAjZW5kaWYKKyAKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzICovCisrI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysjZW5kaWYKKysKKysKKyAvKiBEZWZpbmUgaWYgeW91IHdhbnQgYWxsIG9wZXJhdGlvbnMgb24gUlRMICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCisgICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZ3VyZQorKysrIGdjYy00LjguNC9nY2MvY29uZmlndXJlCitAQCAtOTE4LDYgKzkxOCw3IEBAIHdpdGhfZ2MKKyB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicworK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX3BsdWdpbgorIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0Cisgd2l0aF9saW5rZXJfaGFzaF9zdHlsZQorQEAgLTE2MzksNiArMTY0MCw4IEBAIE9wdGlvbmFsIEZlYXR1cmVzOgorICAgLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeQorKyAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzCisgICAtLWVuYWJsZS1wbHVnaW4gICAgICAgICBlbmFibGUgcGx1Z2luIHN1cHBvcnQKKyAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIGxpYnF1YWRtYXRoIHN1cHBvcnQgZm9yIEZvcnRyYW4KK0BAIC0xNzg0Nyw3ICsxNzg1MCw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDE3ODUwICJjb25maWd1cmUiCisrI2xpbmUgMTc4NTMgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTc5NTMsNyArMTc5NTYsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzk1NiAiY29uZmlndXJlIgorKyNsaW5lIDE3OTU5ICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTI3MjE5LDYgKzI3MjIyLDE5IEBAIGlmIHRlc3QgIiR7ZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGkKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrZWxzZQorKyAgZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm8KKytmaQorKworK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysKKyskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyAxIiA+PmNvbmZkZWZzLmgKKysKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIAorIAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGdjYy00LjguNC9nY2MvY29uZmlndXJlLmFjCitAQCAtNTEyMCw2ICs1MTIwLDE2IEBAIEFDX0FSR19FTkFCTEUodmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWwKKyAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICAgICAgWzFdLAorKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgQUNfU1VCU1Qoc3ViZGlycykKKyBBQ19TVUJTVChzcmNkaXIpCitJbmRleDogZ2NjLTQuOC40L2djYy9kb2MvaW52b2tlLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgZ2NjLTQuOC40L2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0yNTgsNiArMjU4LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1Xb3Zlcmxlbmd0aC1zdHJpbmdzICAtV3BhY2tlZCAgLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0ICAtV3BhZGRlZCBAZ29sCisgLVdwYXJlbnRoZXNlcyAgLVdwZWRhbnRpYy1tcy1mb3JtYXQgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQgQGdvbAorIC1XcG9pbnRlci1hcml0aCAgLVduby1wb2ludGVyLXRvLWludC1jYXN0IEBnb2wKKystV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgQGdvbAorIC1XcmVkdW5kYW50LWRlY2xzICAtV25vLXJldHVybi1sb2NhbC1hZGRyIEBnb2wKKyAtV3JldHVybi10eXBlICAtV3NlcXVlbmNlLXBvaW50ICAtV3NoYWRvdyBAZ29sCisgLVdzaWduLWNvbXBhcmUgIC1Xc2lnbi1jb252ZXJzaW9uICAtV3NpemVvZi1wb2ludGVyLW1lbWFjY2VzcyBAZ29sCitAQCAtNDAyMiw2ICs0MDIzLDE0IEBAIGhlYWRlcnMtLS1mb3IgdGhhdCwgQG9wdGlvbnstV3Vua25vd24tcHIKKyAgZm9yIG1vc3QgdGFyZ2V0cywgaXQgaXMgbWFkZSB1cCBvZiBjb2RlIGFuZCB0aHVzIHJlcXVpcmVzIHRoZSBzdGFjaworICB0byBiZSBtYWRlIGV4ZWN1dGFibGUgaW4gb3JkZXIgZm9yIHRoZSBwcm9ncmFtIHRvIHdvcmsgcHJvcGVybHkuCisgCisrQGl0ZW0gLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQG9waW5kZXggV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstSX0gb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0KKytkaXJlY3RvcmllcyBzdWNoIGFzIEBmaWxley91c3IvaW5jbHVkZX0gd2hlbiBjcm9zcyBjb21waWxpbmcuICBUaGlzCisrb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2gKKytkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0IGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgdGhlIHRhcmdldAorK3N5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KKysKKyBAaXRlbSAtV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV25vLWZsb2F0LWVxdWFsCitJbmRleDogZ2NjLTQuOC40L2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9nY2MuYworKysrIGdjYy00LjguNC9nY2MvZ2NjLmMKK0BAIC03NDEsNiArNzQxLDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZgorICAgICIle2Z1c2UtbGQ9KjotZnVzZS1sZD0lKn1cCisgICAgICVYICV7byp9ICV7ZSp9ICV7Tn0gJXtufSAle3J9XAorICAgICAle3N9ICV7dH0gJXt1Kn0gJXt6fSAle1p9ICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolU319XAorKyAgICAle1duby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisrICAgICV7V2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKyAgICAgJXtzdGF0aWM6fSAle0wqfSAlKG1md3JhcCkgJShsaW5rX2xpYmdjYykgIiBTQU5JVElaRVJfRUFSTFlfU1BFQyAiICVvXAorICAgICAle2ZvcGVubXB8ZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9KjolOmluY2x1ZGUobGliZ29tcC5zcGVjKSUobGlua19nb21wKX1cCisgICAgICV7ZmdudS10bTolOmluY2x1ZGUobGliaXRtLnNwZWMpJShsaW5rX2l0bSl9XAorSW5kZXg6IGdjYy00LjguNC9nY2MvaW5jcGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2luY3BhdGguYworKysrIGdjYy00LjguNC9nY2MvaW5jcGF0aC5jCitAQCAtMjgsNiArMjgsNyBAQAorICNpbmNsdWRlICJpbnRsLmgiCisgI2luY2x1ZGUgImluY3BhdGguaCIKKyAjaW5jbHVkZSAiY3BwZGVmYXVsdC5oIgorKyNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKKyAKKyAvKiBNaWNyb3NvZnQgV2luZG93cyBkb2VzIG5vdCBuYXRpdmVseSBzdXBwb3J0IGlub2Rlcy4KKyAgICBWTVMgaGFzIG5vbi1udW1lcmljIGlub2Rlcy4gICovCitAQCAtMzgyLDYgKzM4MywyNCBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vCisgCX0KKyAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKKyAgICAgfQorKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgeworKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKKysKKysgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKKysgICAgICAgICB7CisrICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKysgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKysgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKKysgICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZTk5YzljOTcyNjZkNmQzZThjYWM3OThhYTkxNDA4MjUwYzRkNjBjZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjAwOjM0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMzVdIGdjYy1wb2lzb24tZGlyLWV4dGVuZAorCitBZGQgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKK3plY2tlLW5vLWhvc3QtaW5jbHVkZXMucGF0Y2ggcGF0Y2guICBUaGUgb3JpZ2luYWwgcGF0Y2ggY2hlY2tlZCBmb3IKKy91c3IvaW5jbHVkZSwgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBhbmQgdGhlbiB0cmlnZ2VyZWQgYSBmYWlsdXJlIGFuZAorYWJvcnRlZC4KKworSW5zdGVhZCwgd2UgYWRkIHRoZSB0d28gbWlzc2luZyBpdGVtcyB0byB0aGUgY3VycmVudCBzY2FuLiAgSWYgdGhlIHVzZXIKK3dhbnRzIHRoaXMgdG8gYmUgYSBmYWlsdXJlLCB0aGV5IGNhbiBhZGQgIi1XZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2luY3BhdGguYyB8ICAgIDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCitpbmRleCBjZDQxYzc4Li5lYWM0YTkyIDEwMDY0NAorLS0tIGEvZ2NjL2luY3BhdGguYworKysrIGIvZ2NjL2luY3BhdGguYworQEAgLTM5Myw3ICszOTMsOSBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKyAgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKy0gICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvc3cvaW5jbHVkZSIsIDExKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9vcHQvaW5jbHVkZSIsIDEyKSkpCisgICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIDU2MjA3ZmEyOTIzZThlZGY3NzRlOThmZmFjODI2NjYwOTEwNzZiZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowODozMSArMDQwMAorU3ViamVjdDogW1BBVENIIDE4LzM1XSBnY2MtNC4zLjM6IFNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQKKworQmVmb3JlIGNvbW1pdHRpbmcsIEkgbm90aWNlZCB0aGF0IFBSLzMyMTYxIHdhcyBtYXJrZWQgYXMgYSBkdXAgb2YgUFIvMzIwMDksIGJ1dCBteSBwcmV2aW91cyBwYXRjaCBkaWQgbm90IGZpeCBpdC4KKworVGhpcyBhbHRlcm5hdGl2ZSBwYXRjaCBpcyBiZXR0ZXIgYmVjYXVzZSBpdCBsZXRzIHlvdSBqdXN0IHVzZSBDRkxBR1NfRk9SX1RBUkdFVCB0byBzZXQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGZvciBsaWJnY2MuIFNpbmNlIGJvb3RzdHJhcHBlZCB0YXJnZXQgbGlicmFyaWVzIGFyZSBuZXZlciBjb21waWxlZCB3aXRoIHRoZSBuYXRpdmUgY29tcGlsZXIsIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgZGlmZmVyZW50IGZsYWdzIGZvciBzdGFnZTEgYW5kIGxhdGVyIHN0YWdlcy4gQW5kIGl0IGFsc28gbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZSB0aGFuIENGTEFHU19GT1JfVEFSR0VULgorCitPdGhlciBjaGFuZ2VzIEkgaGFkIHRvIGRvIGluY2x1ZGU6CisKKy0gbW92aW5nIHRoZSBjcmVhdGlvbiBvZiBkZWZhdWx0IENGTEFHU19GT1JfVEFSR0VUIGZyb20gTWFrZWZpbGUuYW0gdG8gY29uZmlndXJlLmFjLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgQk9PVF9DRkxBR1MgYXJlIHN1YnN0aXR1dGVkIGludG8gQ0ZMQUdTX0ZPUl9UQVJHRVQgKHdoaWNoIGlzICItTzIgLWcgJChDRkxBR1MpIikgdmlhICQoQ0ZMQUdTKS4gSXQgaXMgYWxzbyBjbGVhbmVyIHRoaXMgd2F5IHRob3VnaC4KKworLSBwYXNzaW5nIHRoZSByaWdodCBDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgYXMgZXhwb3J0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKK0kgYWxzbyBzdG9wcGVkIHBhc3NpbmcgTElCQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIHNpbmNlIHRoZXkgYXJlIHVudXNlZCBpbiB0aGUgd2hvbGUgc3JjIHRyZWUuIEFuZCBJIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gYXMgSC1QIHJlbWluZGVkIG1lIHRvIGRvLgorCitCb290c3RyYXBwZWQvcmVndGVzdGVkIGk2ODYtcGMtbGludXgtZ251LCB3aWxsIGNvbW1pdCB0byA0LjQgc2hvcnRseS4gT2sgZm9yIDQuMz8KKworU2lnbmVkLW9mZi1ieTogUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDFiNzZjOTAuLmU0ZGNlN2MgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY3NzIsNiArNjc3MiwzOCBAQCBmaQorIAorIAorIAorKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCisrIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKKysjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgorKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCisrIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCisrIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KKytpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisgIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCisgIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KKyBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRnJvbSAxOGZkZTU3NDBiMDkzMjRkZmI5Y2Y0MWU5ODQ5NjcyNTczZmY1ZmEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTA6MDYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8zNV0gNjQtYml0IG11bHRpbGliIGhhY2suCisKK0dDQyBoYXMgaW50ZXJuYWwgbXVsdGlsaWIgaGFuZGxpbmcgY29kZSBidXQgaXQgYXNzdW1lcyBhIHZlcnkgc3BlY2lmaWMgcmlnaWQgZGlyZWN0b3J5CitsYXlvdXQuIFRoZSBidWlsZCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlsaWIgbGF5b3V0IGlzIHZlcnkgZ2VuZXJpYyBhbmQgYWxsb3dzCitjb21wbGV0ZSBjdXN0b21pc2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorCitUaGlzIHBhdGNoIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byBhbGxvdyBhbnkgY3VzdG9tIGRpcmVjdG9yaWVzIHRvIGJlIHBhc3NlZCBpbnRvIGdjYworYW5kIGhhbmRsZWQgY29ycmVjdGx5LiBJdCBmb3JjZXMgZ2NjIHRvIHVzZSB0aGUgYmFzZV9saWJkaXIgKHdoaWNoIGlzIHRoZSBjdXJyZW50CitkaXJlY3RvcnksICIuIikuIFdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgZWFjaCBtdWx0aWxpYiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgd2UgZG9uJ3QKK2tub3cgd2hpY2ggY29tcGlsZXIgb3B0aW9ucyBtYXkgYmUgYmVpbmcgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLiBTaW5jZSB3ZSBoYXZlIGEgY29tcGlsZXIKK3BlciBtdWxpdGxpYiBhdCB0aGlzIHBvaW50IHRoYXQgaXNuJ3QgYW4gaXNzdWUuCisKK1RoZSBvbmUgcHJvYmxlbSBpcyB0aGUgdGFyZ2V0IGNvbXBpbGVyIGlzIG9ubHkgZ29pbmcgdG8gd29yayBmb3IgdGhlIGRlZmF1bHQgbXVsdGxpbGliIGF0Cit0aGlzIHBvaW50LiBJZGVhbGx5IHdlJ2QgZmlndXJlIG91dCB3aGljaCBtdWx0aWxpYnMgd2VyZSBiZWluZyBlbmFibGVkIHdpdGggd2hpY2ggcGF0aHMKK2FuZCBiZSBhYmxlIHRvIHBhdGNoIHRoZXNlIGVudHJpZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBjb3JyZWN0IHBhdGhzIGJ1dCB0aGlzIHdlCitkb24ndCBoYXZlIHN1Y2ggY29kZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGUgdGFyZ2V0IGdjYyByZWNpcGUgc2hvdWxkIGRvCithbmQgb3ZlcnJpZGUgdGhlc2UgcGxhdGZvcm0gZGVmYXVsdHMgaW4gaXRzIGJ1aWxkIGNvbmZpZy4KKworUlAgMTUvOC8xMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRWx2aXMgRG93c29uIDxlbHZpcy5kb3dzb25AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgICB8ICAgIDYgKystLS0tCisgZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCAgIHwgICAxMCArKystLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IHwgICAgNSArKy0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitAQCAtMzIsNyArMzIsNSBAQAorICMKKyBjb21tYT0sCisgTVVMVElMSUJfT1BUSU9OUyAgICA9ICQoc3Vic3QgJChjb21tYSksLywkKFRNX01VTFRJTElCX0NPTkZJRykpCistTVVMVElMSUJfRElSTkFNRVMgICA9ICQocGF0c3Vic3QgbSUsICUsICQoc3Vic3QgLywgLCQoTVVMVElMSUJfT1BUSU9OUykpKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6aTM4Ni1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG14MzI9Li4vbGlieDMyJChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudXgzMikKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CitAQCAtMTcsMTAgKzE3LDYgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyBNVUxUSUxJQl9PUFRJT05TID0gbWFiaT1uMzIvbWFiaT0zMi9tYWJpPTY0CistTVVMVElMSUJfRElSTkFNRVMgPSBuMzIgMzIgNjQKKy1NSVBTX0VMID0gJChpZiAkKGZpbHRlciAlZWwsICQoZmlyc3R3b3JkICQoc3Vic3QgLSwgLCQodGFyZ2V0KSkpKSxlbCkKKy1NSVBTX1NPRlQgPSAkKGlmICQoc3RyaXAgJChmaWx0ZXIgTUFTS19TT0ZUX0ZMT0FUX0FCSSwgJCh0YXJnZXRfY3B1X2RlZmF1bHQpKSAkKGZpbHRlciBzb2Z0LCAkKHdpdGhfZmxvYXQpKSksc29mdCkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gXAorLQkuLi9saWIzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpbjMyJChNSVBTX1NPRlQpKSBcCistCS4uL2xpYiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHMkKE1JUFNfRUwpLWxpbnV4LWdudSQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpNjQkKE1JUFNfU09GVCkpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorKworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitAQCAtMjYsNyArMjYsNiBAQAorICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgorIAorIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgorLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKKytNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgorIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCistTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQorK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmYwMjFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIDMwN2M4ZmYzZWY2NjZiN2JkNWFjNzMzODYzZjJmYmIyN2E5ZDUyMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAorU3ViamVjdDogW1BBVENIIDIwLzM1XSBvcHRpb25hbCBsaWJzdGRjCisKK2djYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKword2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKword2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKworb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKK2RyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgorCitBICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCitkbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgorCitSUCAyOS82LzEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgICAgNCArKysrCisgZ2NjL2NwL2crK3NwZWMuYyAgICB8ICAgIDEgKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKystLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK2luZGV4IDEwYWU4NGQuLmRjM2ZmZGYgMTAwNjQ0CistLS0gYS9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBiL2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTEyOTksNiArMTI5OSwxMCBAQCBub3N0ZGluYysrCisgQysrIE9iakMrKworIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKworIAorK25vc3RkbGliKysKKytEcml2ZXIKKytEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5CisrCisgbworIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQorIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0CitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2crK3NwZWMuYyBiL2djYy9jcC9nKytzcGVjLmMKK2luZGV4IGI4OTZlZWEuLmY1NTIxNmIgMTAwNjQ0CistLS0gYS9nY2MvY3AvZysrc3BlYy5jCisrKysgYi9nY2MvY3AvZysrc3BlYy5jCitAQCAtMTI2LDYgKzEyNiw3IEBAIGxhbmdfc3BlY2lmaWNfZHJpdmVyIChzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKippbl9kZWNvZGVkX29wdGlvbnMsCisgICAgICAgc3dpdGNoIChkZWNvZGVkX29wdGlvbnNbaV0ub3B0X2luZGV4KQorIAl7CisgCWNhc2UgT1BUX25vc3RkbGliOgorKwljYXNlIE9QVF9ub3N0ZGxpYl9fOgorIAljYXNlIE9QVF9ub2RlZmF1bHRsaWJzOgorIAkgIGxpYnJhcnkgPSAtMTsKKyAJICBicmVhazsKK2RpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQoraW5kZXggYTAyMjYyMi4uZjE1Yzk5MSAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0xOTAsNyArMTkwLDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZnJlcG8gIC1mbm8tcnR0aSAgLWZzdGF0cyAgLWZ0ZW1wbGF0ZS1iYWNrdHJhY2UtbGltaXQ9QHZhcntufSBAZ29sCisgLWZ0ZW1wbGF0ZS1kZXB0aD1AdmFye259IEBnb2wKKyAtZm5vLXRocmVhZHNhZmUtc3RhdGljcyAtZnVzZS1jeGEtYXRleGl0ICAtZm5vLXdlYWsgIC1ub3N0ZGluYysrIEBnb2wKKy0tZm5vLWRlZmF1bHQtaW5saW5lICAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorKy1ub3N0ZGxpYisrIC1mbm8tZGVmYXVsdC1pbmxpbmUgIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisgLWZ2aXNpYmlsaXR5LW1zLWNvbXBhdCBAZ29sCisgLWZleHQtbnVtZXJpYy1saXRlcmFscyBAZ29sCisgLVdhYmkgIC1XY29udmVyc2lvbi1udWxsICAtV2N0b3ItZHRvci1wcml2YWN5IEBnb2wKK0BAIC00NTMsNyArNDUzLDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1ub3N0YXJ0ZmlsZXMgIC1ub2RlZmF1bHRsaWJzICAtbm9zdGRsaWIgLXBpZSAtcmR5bmFtaWMgQGdvbAorIC1zICAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrIEBnb2wKKyAtc3RhdGljLWxpYmFzYW4gLXN0YXRpYy1saWJ0c2FuIEBnb2wKKy0tc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgQGdvbAorKy1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyAtbm9zdGRsaWIrKyBAZ29sCisgLVQgQHZhcntzY3JpcHR9ICAtV2wsQHZhcntvcHRpb259ICAtWGxpbmtlciBAdmFye29wdGlvbn0gQGdvbAorIC11IEB2YXJ7c3ltYm9sfX0KKyAKK0BAIC05ODg2LDYgKzk4ODYsMTEgQEAgVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCisgbGliYy4gIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgc3VwcGxpZWQgdGhyb3VnaCBzb21lIG90aGVyCisgbWVjaGFuaXNtIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorIAorK0BpdGVtIC1ub3N0ZGxpYisrCisrQG9waW5kZXggbm9zdGRsaWIrKworK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorK09ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgorKworIEBjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vc3RkbGlifQorIEBjaW5kZXggQG9wdGlvbnstbm9zdGRsaWJ9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKyBAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9zdGRsaWJ9CitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBlZmRiNjI1Li40Nzc3NTJmIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC03NDgsNiArNzQ4LDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9IH19fX19fSIKKyAjZW5kaWYKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNjNjFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAwMDQ2OTZlMDU0YWU5ZGM3MWQ1MTJjYzc1NWNjYzQwNzRmYzYyYjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggYjY1ZDIxZC4uYmRhYjQ1YSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNTgyOSwxMyArMjU4MjksNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlMjI2Yjg1Li41ZjVjOTA5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQwOTksMTMgKzQwOTksNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGM4YWJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gN2Y1YzlkY2M3MWM4YjgzYTBiNTU5NjI2NmNjNGJkZjA5MzZlOGUwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMzVdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA0Nzc3NTJmLi41MTA2MmFhIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00MDk4LDYgKzQwOTgsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NDM1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorRnJvbSA0NmQ1MjQzOTA1MmYwODc2YTkyZGNmOGEwYWI5YzYwZDc1YzgwMzBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZQorIGluICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL01ha2VmaWxlLmluICB8ICAgIDIgKy0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDQgKystLQorIGdjYy9ta2NvbmZpZy5zaCAgfCAgICA0ICsrLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggOTBhMmJiYS4uMjMyMDQ5NyAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDY5LDcgKzQ2OSw3IEBAIFRBUkdFVF9TWVNURU1fUk9PVCA9IEBUQVJHRVRfU1lTVEVNX1JPT1RACisgVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSA9IEBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FQAorIAorIHhtYWtlX2ZpbGU9QHhtYWtlX2ZpbGVACistdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAKKyt0bWFrZV9maWxlPUB0bWFrZV9maWxlQCAuL3Qtb2UKKyBUTV9FTkRJQU5fQ09ORklHPUBUTV9FTkRJQU5fQ09ORklHQAorIFRNX01VTFRJTElCX0NPTkZJRz1AVE1fTVVMVElMSUJfQ09ORklHQAorIFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHPUBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJR0AKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggYmRhYjQ1YS4uZDU4Nzk5MyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTUzOSw4ICsxMTUzOSw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDVmNWM5MDkuLjVlNWU4NGYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTcyMCw4ICsxNzIwLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvbWtjb25maWcuc2ggYi9nY2MvbWtjb25maWcuc2gKK2luZGV4IDI5ZmRmYzcuLmUwNDhkY2UgMTAwNjQ0CistLS0gYS9nY2MvbWtjb25maWcuc2gKKysrKyBiL2djYy9ta2NvbmZpZy5zaAorQEAgLTc3LDcgKzc3LDcgQEAgaWYgWyAtbiAiJEhFQURFUlMiIF07IHRoZW4KKyAgICAgaWYgWyAkIyAtZ2UgMSBdOyB0aGVuCisgCWVjaG8gJyNpZmRlZiBJTl9HQ0MnID4+ICR7b3V0cHV0fVQKKyAJZm9yIGZpbGUgaW4gIiRAIjsgZG8KKy0JICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisrCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCIuL2RlZmF1bHRzLmgiOyB0aGVuCisgCQlwb3N0cG9uZV9kZWZhdWx0c19oPSJ5ZXMiCisgCSAgICBlbHNlCisgCQllY2hvICIjIGluY2x1ZGUgXCIkZmlsZVwiIiA+PiAke291dHB1dH1UCitAQCAtMTAzLDcgKzEwMyw3IEBAIGVzYWMKKyAKKyAjIElmIHdlIHBvc3Rwb25lZCBpbmNsdWRpbmcgZGVmYXVsdHMuaCwgYWRkIHRoZSAjaW5jbHVkZSBub3cuCisgaWYgdGVzdCB4IiRwb3N0cG9uZV9kZWZhdWx0c19oIiA9IHgieWVzIjsgdGhlbgorLSAgICBlY2hvICIjIGluY2x1ZGUgXCJkZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKysgICAgZWNobyAiIyBpbmNsdWRlIFwiLi9kZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKyBmaQorIAorICMgQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIGd1YXJkLCBwYXJ0IHR3by4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdkODQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBlMGQxNWY0ZjhiZjI4YzM1MWI5MjE1Y2EzN2YxY2FhMjRkZjBlMWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTg6NTQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8zNV0gUFIgdGFyZ2V0LzMyMjE5CisKKyogdmFyYXNtLmMgKGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xKTogV2VhayBkYXRhIGlzIG5vdCBsb2NhbC4KKworU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgUmV1dG5lci1GaXNjaGVyIDxyZXAuZG90Lm5vcEBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBnY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMgfCAgIDE0ICsrKysrKysrKysrKysrCisgZ2NjL3ZhcmFzbS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArKysrLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworCitkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmU3ZGVkYQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jCitAQCAtMCwwICsxLDE0IEBACisrLyogUFIgdGFyZ2V0LzMyMjE5ICovCisrLyogeyBkZy1kbyBydW4gfSAqLworKy8qIHsgZGctcmVxdWlyZS12aXNpYmlsaXR5ICIiIH0gKi8KKysvKiB7IGRnLW9wdGlvbnMgIi1mUElDIiB7IHRhcmdldCBmcGljIH0gfSAqLworKworK2V4dGVybiB2b2lkIGYoKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLHZpc2liaWxpdHkoImhpZGRlbiIpKSk7CisrZXh0ZXJuIGludCBwdXRzKCBjaGFyIGNvbnN0KiApOworK2ludCBtYWluKCkKKyt7CisrCWlmIChmKQorKwkJZigpOworKwlyZXR1cm4gMDsKKyt9CisrCitkaWZmIC0tZ2l0IGEvZ2NjL3ZhcmFzbS5jIGIvZ2NjL3ZhcmFzbS5jCitpbmRleCA2NjQ4MTAzLi5mYWRiYTc4IDEwMDY0NAorLS0tIGEvZ2NjL3ZhcmFzbS5jCisrKysgYi9nY2MvdmFyYXNtLmMKK0BAIC02Njc1LDYgKzY2NzUsMTAgQEAgZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEgKGNvbnN0X3RyZWUgZXhwLCBpbnQgc2hsaWIpCisgICAvKiBTdGF0aWMgdmFyaWFibGVzIGFyZSBhbHdheXMgbG9jYWwuICAqLworICAgZWxzZSBpZiAoISBUUkVFX1BVQkxJQyAoZXhwKSkKKyAgICAgbG9jYWxfcCA9IHRydWU7CisrICAvKiBoaWRkZW4gd2VhayBjYW4ndCBiZSBvdmVycmlkZGVuIGJ5IHNvbWV0aGluZyBub24tbG9jYWwsIGFsbAorKyAgICAgdGhhdCBpcyBwb3NzaWJsZSBpcyB0aGF0IGl0IGlzIG5vdCBkZWZpbmVkIGF0IGFsbC4gKi8KKysgIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKSkKKysgICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogQSB2YXJpYWJsZSBpcyBsb2NhbCBpZiB0aGUgdXNlciBoYXMgc2FpZCBleHBsaWNpdGx5IHRoYXQgaXQgd2lsbAorICAgICAgYmUuICAqLworICAgZWxzZSBpZiAoKERFQ0xfVklTSUJJTElUWV9TUEVDSUZJRUQgKGV4cCkKK0BAIC02Njg4LDExICs2NjkyLDYgQEAgZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEgKGNvbnN0X3RyZWUgZXhwLCBpbnQgc2hsaWIpCisgICAgICBsb2NhbC4gICovCisgICBlbHNlIGlmIChERUNMX1ZJU0lCSUxJVFkgKGV4cCkgIT0gVklTSUJJTElUWV9ERUZBVUxUKQorICAgICBsb2NhbF9wID0gdHJ1ZTsKKy0gIC8qIERlZmF1bHQgdmlzaWJpbGl0eSB3ZWFrIGRhdGEgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBzdHJvbmcgc3ltYm9sCistICAgICBpbiBhbm90aGVyIG1vZHVsZSBhbmQgc28gYXJlIG5vdCBsb2NhbC4gICovCistICBlbHNlIGlmIChERUNMX1dFQUsgKGV4cCkKKy0JICAgJiYgIXJlc29sdmVkX2xvY2FsbHkpCistICAgIGxvY2FsX3AgPSBmYWxzZTsKKyAgIC8qIElmIFBJQywgdGhlbiBhc3N1bWUgdGhhdCBhbnkgZ2xvYmFsIG5hbWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKyAgICAgIHN5bWJvbHMgcmVzb2x2ZWQgZnJvbSBvdGhlciBtb2R1bGVzLiAgKi8KKyAgIGVsc2UgaWYgKHNobGliKQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGFmOGE1NmVhNGUxN2IyOTA5ZWZmMmM1NzcwNGFiNDNlZjI0ZjI4ZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAorU3ViamVjdDogW1BBVENIIDI1LzM1XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KKworKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKK3VzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKK2RpcmVjdG9yeS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK2luZGV4IDgzODVlOTYuLmI4ZjdhOTIgMTAwNzU1CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTEyNzA0LDcgKzEyNzA0LDcgQEAgZXNhYworIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBhY19leHQ9JHthY19mY19zcmNleHQtZn0KKyBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworaW5kZXggN2Q5N2ZlZC4uM2Y5ZjQ4NCAxMDA2NDQKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitAQCAtMjI3LDcgKzIyNyw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCisgCisgIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorRnJvbSAwOGMyMzk4NDQ1ZTZjYWMyODI0ODhmNjRhZTZiZjI5Y2JjZDhkYjIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNi8zNV0gbGliZ2NjLXNqbGotY2hlY2sKKworYWNfZm5fY190cnlfY29tcGlsZSBkb2VzbnQgc2VlbSB0byBrZWVwIHRoZSBpbnRlcm1lZGlhdGUgZmlsZXMKK3doaWNoIGFyZSBuZWVkZWQgZm9yIHNqbGogdGVzdCB0byBwYXNzIHNpbmNlIGl0IGdyZXBzIGludG8gdGhlCitnZW5lcmF0ZWQgZmlsZS4gU28gd2UgcnVuIHRoZSBjb21waWxlciBjb21tYW5kIHVzaW5nIEFDX1RSWV9DT01NQU5ECit3aGljaCB0aGVuIGdlbmVyYXRlcyB0aGUgbmVlZGVkIC5zIGZpbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJnY2MvY29uZmlndXJlICAgIHwgICAxMCArKysrKystLS0tCisgbGliZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgMTAgKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlIGIvbGliZ2NjL2NvbmZpZ3VyZQoraW5kZXggMTQyNWRmNi4uZDE4ZTNjYiAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUKKysrKyBiL2xpYmdjYy9jb25maWd1cmUKK0BAIC00MjA4LDE3ICs0MjA4LDE5IEBAIHZvaWQgZm9vICgpCisgfQorIAorIF9BQ0VPRgorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGU7IHRoZW4gOgorK2lmIHsgYWNfdHJ5PScke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCisrICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworICAgZmkKKyBmaQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKyBybSAtZiBjb25mdGVzdCoKKyAKKyBmaQorZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUuYWMgYi9saWJnY2MvY29uZmlndXJlLmFjCitpbmRleCA4YjdhYmE1Li5jN2M5NjQ0IDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTIxNiwxNiArMjE2LDE0IEBAIHZvaWQgZm9vICgpCisgICBiYXIoKTsKKyB9CisgXSldKQorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLUFTX0lGKFthY19mbl9jX3RyeV9jb21waWxlXSwKKy0gIFtpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBBQ19UUllfQ09NTUFORCgke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JkFTX01FU1NBR0VfTE9HX0ZEKTsgdGhlbgorKyAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCistICBmaV0pCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorKyAgZmkKKytmaQorIHJtIC1mIGNvbmZ0ZXN0KgorIF0pCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYTBmOWJkMDljODE2YWQyOWVjZjdjMjlkNmMyN2Y3ZGY5NzcxMDM2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIyOjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjcvMzVdIGNwcDogaG9ub3Igc3lzcm9vdC4KKworQ3VycmVudGx5LCBpZiB0aGUgZ2NjIHRvb2xjaGFpbiBpcyByZWxvY2F0ZWQgYW5kIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSwgdGhlbiB5b3UgdHJ5IGFuZCBjb21waWxlCitwcmVwcm9jZXNzZWQgc291cmNlICguaSBvciAuaWkgZmlsZXMpLCB0aGUgY29tcGlsZXIgd2lsbCB0cnkgYW5kIGFjY2VzcyB0aGUgYnVpbHRpbiBzeXNyb290IGxvY2F0aW9uCityYXRoZXIgdGhhbiB0aGUgLS1zeXNyb290IG9wdGlvbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLiBJZiBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnkgaXMKK3Blcm1pc3Npb24gZGVuaWVkICh1bnJlYWRhYmxlKSwgZ2NjIHdpbGwgZXJyb3IuCisKK1RoaXMgaGFwcGVucyB3aGVuIGNjYWNoZSBpcyBpbiB1c2UgZHVlIHRvIHRoZSBmYWN0IGl0IHVzZXMgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlcy4KKworVGhlIGZpeCBiZWxvdyBhZGRzICVJIHRvIHRoZSBjcHAtb3V0cHV0IHNwZWMgbWFjcm8gc28gdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9ucyBmb3IgLWlwcmVmaXgsCistaXN5c3RlbSwgLWlzeXNyb290IGhhcHBlbiBhbmQgdGhlIGNvcnJlY3Qgc3lzcm9vdCBpcyB1c2VkLgorCitbWU9DVE8gIzIwNzRdCisKK1JQIDIwMTIvMDQvMTMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY3AvbGFuZy1zcGVjcy5oIHwgICAgMiArLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY3AvbGFuZy1zcGVjcy5oIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAoraW5kZXggYTAwMWMzZS4uMWFhZTFlNCAxMDA2NDQKKy0tLSBhL2djYy9jcC9sYW5nLXNwZWNzLmgKKysrKyBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK0BAIC02Myw1ICs2Myw1IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICB7Ii5paSIsICJAYysrLWNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGMrKy1jcHAtb3V0cHV0IiwKKyAgICAiJXshTToleyFNTToleyFFOlwKKy0gICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAlMlwKKysgICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAlMlwKKyAgICAgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDUxMDYyYWEuLmNmNmI5OWUgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEwNDIsNyArMTA0Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGlsZXIgZGVmYXVsdF9jb21waWxlcnNbXSA9CisgICAgICAgICAgICAgICAgICAgICAlV3tvKjotLW91dHB1dC1wY2g9JSp9fSVWfX19fX19IiwgMCwgMCwgMH0sCisgICB7Ii5pIiwgIkBjcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjcHAtb3V0cHV0IiwKKy0gICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorKyAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisgICB7Ii5zIiwgIkBhc3NlbWJsZXIiLCAwLCAwLCAwfSwKKyAgIHsiQGFzc2VtYmxlciIsCisgICAgIiV7IU06JXshTU06JXshRToleyFTOmFzICUoYXNtX2RlYnVnKSAlKGFzbV9vcHRpb25zKSAlaSAlQSB9fX19IiwgMCwgMCwgMH0sCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMzAxZTE4ZDQ3MTFkYjU5MjVlNzY3ZmFkMDhkZmZhOWNmZTBhMmYxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIzOjA4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjgvMzVdIE1JUFM2NDogRGVmYXVsdCB0byBONjQgQUJJCisKK01JUFM2NCBkZWZhdWx0cyB0byBuMzIgQUJJLCB0aGlzIHBhdGNoIG1ha2VzIGl0CitzbyB0aGF0IGl0IGRlZmF1bHRzIHRvIE42NCBBQkkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCistLS0KKyBnY2MvY29uZmlnLmdjYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IDFhMGJlNTAuLjk4OWMyZmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0xNzk3LDcgKzE3OTcsNyBAQCBtaXBzKi1tdGktbGludXgqKQorIG1pcHM2NCotKi1saW51eCogfCBtaXBzaXNhNjQqLSotbGludXgqKQorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggbGludXguaCBnbGliYy1zdGRpbnQuaCAke3RtX2ZpbGV9IG1pcHMvZ251LXVzZXIuaCBtaXBzL2dudS11c2VyNjQuaCBtaXBzL2xpbnV4NjQuaCBtaXBzL2xpbnV4LWNvbW1vbi5oIgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IG1pcHMvdC1saW51eDY0IgorLQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQUJJX0RFRkFVTFQ9QUJJX04zMiIKKysJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV82NCIKKyAJY2FzZSAke3RhcmdldH0gaW4KKyAJCW1pcHM2NGVsLXN0LWxpbnV4LWdudSkKKyAJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG1pcHMvc3QuaCIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTZkOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKQEAgLTAsMCArMSwyMDkgQEAKK0Zyb20gMjlkMTIzNDRmYjY4MmEwNTNkZTUzZWIwOGI5NTcwNGNmM2I2N2FmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI0OjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjkvMzVdIERlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIKKworVGhpcyBwYXRjaCBkZWZpbmVzIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKK3JlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSIHdoaWNoIGNhbiBiZSBzZXQgaW4gZ2VuZXJhdGVkIGhlYWRlcnMKK1RoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIG9mIGhhcmRjb2RlZCBtdWx0aWxpYiBpbiBnY2MKK0NoYW5nZSBpcyBvbmx5IGZvciB0aGUgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgaW4gT0UgaW5jbHVkaW5nCitTSCwgc3BhcmMsIGFscGhhIGZvciBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydCAoaWYgYW55KQorCitSZW1vdmVzIHRoZSBkb19oZWFkZXJmaXggdGFzayBpbiBtZXRhZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oICB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXg2NC5oICAgIHwgICAgNiArKystLS0KKyBnY2MvY29uZmlnL21pcHMvbGludXguaCAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvbWlwcy9saW51eDY0LmggICAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oICB8ICAgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL3NoL2xpbnV4LmggICAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXguaCAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmggICB8ICAgIDQgKystLQorIDExIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK0BAIC0yMyw4ICsyMyw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgI2RlZmluZSBFWFRSQV9TUEVDUyBcCisgeyAiZWxmX2R5bmFtaWNfbGlua2VyIiwgRUxGX0RZTkFNSUNfTElOS0VSIH0sCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTY4LDggKzY4LDggQEAKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIGFuZCBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkuICAqLworIAorICN1bmRlZiAgR0xJQkNfRFlOQU1JQ19MSU5LRVIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIi9saWIvbGQtbGludXguc28uMyIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgIi9saWIvbGQtbGludXgtYXJtaGYuc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hcm1oZi5zby4zIgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK0BAIC01Nyw3ICs1Nyw3IEBACisgCisgI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNkZWZpbmUgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAgIiV7aCp9IFwKKyAgICAle3N0YXRpYzotQnN0YXRpY30gXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni9saW51eC5oCitAQCAtMjAsNCArMjAsNCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTiAiZWxmX2kzODYiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK0BAIC0yNyw2ICsyNyw2IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9ONjQgImVsZl94ODZfNjQiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTlgzMiAiZWxmMzJfeDg2XzY0IgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWJ4MzIvbGQtbGludXgteDMyLnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDg2LTY0LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgteDMyLnNvLjIiCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKK0BAIC0xNyw0ICsxNyw0IEBAIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEcKKyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy9saW51eDY0LmgKK0BAIC0yMiwxMCArMjIsMTAgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9ONjQgImVsZjY0JXtFQjpifSV7RUw6bH10c21pcCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OTjMyICJlbGYzMiV7RUI6Yn0le0VMOmx9dHNtaXBuMzIiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLnNvLjEiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQuc28uMSIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyICIvbGliMzIvbGQuc28uMSIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiAiL2xpYjMyL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIgIi9zeXN0ZW0vYmluL2xpbmtlcjMyIgorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAorICAgQ0hPT1NFX0RZTkFNSUNfTElOS0VSIChHTElCQ19EWU5BTUlDX0xJTktFUk4zMiwgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyLCBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKK0BAIC0zNjYsMTQgKzM2NiwxNCBAQCBleHRlcm4gaW50IGRvdF9zeW1ib2xzOworICN1bmRlZglMSU5LX09TX0RFRkFVTFRfU1BFQworICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorICNpZmRlZiBMSU5VWDY0X0RFRkFVTFRfQUJJX0VMRnYyCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6L2xpYjY0L2xkNjQuc28uMTs6L2xpYjY0L2xkNjQuc28uMn0iCisgI2Vsc2UKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjovbGliNjQvbGQ2NC5zby4yOzovbGliNjQvbGQ2NC5zby4xfSIKKyAjZW5kaWYKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitAQCAtNDMsNyArNDMsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorIAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitAQCAtODMsNyArODMsNyBAQCBleHRlcm4gY29uc3QgY2hhciAqaG9zdF9kZXRlY3RfbG9jYWxfY3B1CisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICItbSBlbGYzMl9zcGFyYyAle3NoYXJlZDotc2hhcmVkfSBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK0BAIC05Miw4ICs5Miw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvbGludXguaAorQEAgLTczLDEwICs3MywxMCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIgbXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIHRhcmdldCB1c2luZyB0aGVtLCBvcgorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgYW5kIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgZm9yIHRhcmdldHMKKyAgICBzdXBwb3J0aW5nIGJvdGggMzItYml0IGFuZCA2NC1iaXQgY29tcGlsYXRpb24uICAqLworLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGliL2xkeDMyLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZHgzMi11Q2xpYmMuc28uMCIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSMzIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0ICIvc3lzdGVtL2Jpbi9saW5rZXI2NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYzE4MTZjMTYwMTU2Zjk5YzM0ZTZhMGEwMzExYmIwMjE5MzI2ODA0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI2OjM3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzAvMzVdIGdjYzogRml4IGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IuCisKK1RoZXJlIHdvdWxkIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIHRoZQorYnVpbGQgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIDIwMCwgdGhpcyBpcyBjYXVzZWQgYnk6CisKK2hlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWAKKworVGhlIFBMVUdJTl9IRUFERVJTIGlzIHRvbyBsb25nIGJlZm9yZSBzb3J0LCBzbyB0aGUgImVjaG8iIGNhbid0IGhhbmRsZQoraXQsIHVzZSB0aGUgJChzb3J0IGxpc3QpIG9mIEdOVSBtYWtlIHdoaWNoIGNhbiBoYW5kbGUgdGhlIHRvbyBsb25nIGxpc3QKK3dvdWxkIGZpeCB0aGUgcHJvYmxlbSwgdGhlIGhlYWRlciB3b3VsZCBiZSBzaG9ydCBlbm91Z2ggYWZ0ZXIgc29ydGVkLgorVGhlICJ0ciAnICcgJ1wwMTInIiB3YXMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIHNwYWNlIHRvICJcbiIsIHRoZQorJChzb3J0IGxpc3QpIGRvZXNuJ3QgbmVlZCB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL01ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCAyMzIwNDk3Li44NTYyYTYyIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC00NjI3LDcgKzQ2MjcsNyBAQCBpbnN0YWxsLXBsdWdpbjogaW5zdGFsbGRpcnMgbGFuZy5pbnN0YWxsLXBsdWdpbiBzLWhlYWRlci12YXJzIGluc3RhbGwtZ2VuZ3R5cGUKKyAjIFdlIGtlZXAgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGZpbGVzIGluIGNvbmZpZyBvciBjLWZhbWlseSBhbmQgLmRlZgorICMgZmlsZXMuIEFsbCBvdGhlciBmaWxlcyBhcmUgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGRpcmVjdG9yeS4KKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChwbHVnaW5faW5jbHVkZWRpcikKKy0JaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YDsgXAorKwloZWFkZXJzPSIkKHNvcnQgJChQTFVHSU5fSEVBREVSUykpIjsgXAorIAlzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgOyBcCisgCWZvciBmaWxlIGluICQkaGVhZGVyczsgZG8gXAorIAkgIGlmIFsgLWYgJCRmaWxlIF0gOyB0aGVuIFwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gYjg1MjY1YmM5NGVjMWJlYWYxZDNiNjk3YzAzZGI2Mjk5MTU1MzQ2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzEvMzVdIERpc2FibGUgc2R0LgorCitXZSBkb24ndCBsaXN0IGR0cmFjZSBpbiBERVBFTkRTIHNvIHdlIHNob3VsZG4ndCBiZSBkZXBlbmRpbmcgb24gdGhpcyBoZWFkZXIuCitJdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBmcm9tIHByZWl2b3VzIGJ1aWxkcyB0aG91Z2guIFRvIGJlIGRldGVybWluc3RpYywgZGlzYWJsZQorc2R0LmggdXNhZ2UgYWx3YXlzLiBUaGlzIGF2b2lkcyBidWlsZCBmYWlsdXJlcyBpZiB0aGUgaGVhZGVyIGlzIHJlbW92ZWQgYWZ0ZXIgY29uZmlndXJlCitidXQgYmVmb3JlIGxpYmdjYyBpcyBjb21waWxlZCBmb3IgZXhhbXBsZS4KKworUlAgMjAxMi84LzcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworRGlzYWJsZSBzZHQgZm9yIGxpYnN0ZGMrKy12My4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaGFja10KKy0tLQorIGdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICB8ICA2ICsrKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggM2M1NTBhNi4uMDFjNzYyNiAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNjgxMiwxMiArMjY4MTIsMTIgQEAgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5Li4uICIgPiY2OyB9CisgaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLQorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorLQorLWZpCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIworKyNmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCAzNjAxYWI2Li4wNmU1MDFmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQ3NzksMTUgKzQ3NzksMTUgQEAgaWYgdGVzdCB4JGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcCA9IHh5ZXM7IHRoZW4KKyBmaQorIAorICMgVGVzdCBmb3IgPHN5cy9zZHQuaD4gb24gdGhlIHRhcmdldC4KKy1HQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCistQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKy1oYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCistICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKy1maQorLUFDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorKyNHQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCisrI0FDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCisrI2hhdmVfc3lzX3NkdF9oPW5vCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMgIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKysjICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKysjZmkKKysjQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisgCisgIyBDaGVjayBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHVzZWQgYnkgZGVmYXVsdCBvciBub3QuCisgIyBTb21lIGdsaWJjIHRhcmdldHMgdXNlZCBERm1vZGUgbG9uZyBkb3VibGUsIGJ1dCB3aXRoIGdsaWJjIDIuNAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCA0OTUzYzlmLi41M2ExMTQ1IDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTIwNTc4LDExICsyMDU3OCwxMSBAQCBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKyBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCistICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorKyMgIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisgCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorIAorLSAgZmkKKysjICBmaQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK2luZGV4IDczZDQzMGEuLmYyMTM1ZTIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitAQCAtMjExLDcgKzIxMSw3IEBAIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NFU1NPUlNfT05MTgorIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NfT05MTgorIEdMSUJDWFhfQ0hFQ0tfUFRIUkVBRFNfTlVNX1BST0NFU1NPUlNfTlAKKyBHTElCQ1hYX0NIRUNLX1NZU0NUTF9IV19OQ1BVCistR0xJQkNYWF9DSEVDS19TRFRfSAorKyNHTElCQ1hYX0NIRUNLX1NEVF9ICisgCisgIyBDaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRlcnMuCisgQUNfQ0hFQ0tfSEVBREVSUyhbZW5kaWFuLmggZXhlY2luZm8uaCBmbG9hdC5oIGZwLmggaWVlZWZwLmggaW50dHlwZXMuaCBcCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA2YzcxNWZjZmEyNjJhZGFkY2E4MWM2OGExZjNmNjlhYTMxODdhNTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjk6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMi8zNV0gbGlidG9vbAorCitsaWJzdGRjKysgZnJvbSBnY2MtcnVudGltZSBnZXRzIGNyZWF0ZWQgd2l0aCAtcnBhdGg9L3Vzci9saWIvLi4vbGliIGZvciBxZW11eDg2LTY0Cit3aGVuIHJ1bm5pbmcgb24gYW0geDg2XzY0IGJ1aWxkIGhvc3QuCisKK1RoaXMgcGF0Y2ggc3RvcHMgdGhpcyBzcGVhZGluZyB0byBsaWJkaXIgaW4gdGhlIGxpYnN0ZGMrKy5sYSBmaWxlIHdpdGhpbiBsaWJ0b29sLgorQXJndWFibHksIGl0IHNob3VsZG4ndCBiZSBwYXNzaW5nIHRoaXMgaW50byBsaWJ0b29sIGluIHRoZSBmaXJzdCBwbGFjZSBidXQKK2ZvciBub3cgdGhpcyByZXNvbHZlcyB0aGUgbmFzdGllc3QgcHJvYmxlbXMgdGhpcyBjYXVzZXMuCisKK2Z1bmNfbm9ybWFsX2Fic3BhdGggd291bGQgcmVzb2x2ZSBhbiBlbXB0eSBwYXRoIHRvIGBwd2RgIHNvIHdlIG5lZWQKK3RvIGZpbHRlciB0aGUgemVybyBjYXNlLgorCitSUCAyMDEyLzgvMjQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsdG1haW4uc2ggfCAgICA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjQ2ZjQ3YzIgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYzNTksNiArNjM1OSwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorIAorICAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKysgICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisrCWZ1bmNfbm9ybWFsX2Fic3BhdGggIiRpbnN0YWxsX2xpYmRpciIKKysJaW5zdGFsbF9saWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisrICAgICAgZmkKKyAKKyAgICAgICBvbGRsaWJzPQorICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTk4NGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA5N2U0NTkxYzIwMzEwNDI1ZTdhY2EwZTY3MTJhOGQ5NDgwZTc3NDRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzA6MzIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMy8zNV0gZ2NjOiBhcm12NDogcGFzcyBmaXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJLgorCitUaGUgTElOS19TUEVDIGZvciBsaW51eCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGxpbnV4LWVhYmkuaCB3aGljaAorbWVhbnMgdGhlIHZhbHVlIG9mIFRBUkdFVF9GSVhfVjRCWF9TUEVDIGdldHMgbG9zdCBhbmQgYXMgYSByZXN1bHQKK3RoZSBvcHRpb24gaXMgbm90IHBhc3NlZCB0byBsaW5rZXIgd2hlbiBjaG9zaW5nIG1hcmNoPWFybXY0CitUaGlzIHBhdGNoIHJlZGVmaW5lcyB0aGlzIGluIGxpbnV4LWVhYmkuaCBhbmQgcmVpbnNlcnRzIGl0Citmb3IgZWFiaSBkZWZhdWx0aW5nIHRvb2xjaGFpbnMuCisKK1dlIG1pZ2h0IHdhbnQgdG8gc2VuZCBpdCB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggfCAgICA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggODBmNDU0ZC4uNGRiM2ViOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNzcsMTAgKzc3LDE0IEBACisgICAgICV7bWZsb2F0LWFiaT1zb2Z0KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIn0gXAorICAgICAleyFtZmxvYXQtYWJpPSo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUICJ9IgorIAorKy8qIEZvciBhcm12NCB3ZSBwYXNzIC0tZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSSAqLworKyN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQworKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCisrCisgLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KKyAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCisgI3VuZGVmICBMSU5LX1NQRUMKKy0jZGVmaW5lIExJTktfU1BFQyBCRThfTElOS19TUEVDCQkJCQkJXAorKyNkZWZpbmUgTElOS19TUEVDIEJFOF9MSU5LX1NQRUMgVEFSR0VUX0ZJWF9WNEJYX1NQRUMJCQlcCisgICBMSU5VWF9PUl9BTkRST0lEX0xEIChMSU5VWF9UQVJHRVRfTElOS19TUEVDLAkJCQlcCisgCQkgICAgICAgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAiICIgQU5EUk9JRF9MSU5LX1NQRUMpCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGZjNWU0YmVhZWE4NTZhMmI0ODZjNzcwYWQzYWRkYzBmNWJiMzEwMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAorU3ViamVjdDogW1BBVENIIDM0LzM1XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgorIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorCitVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KK3NvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA4YmMwYzk4Li4zY2QwODE3IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNTE5LDEwICsxMTUxOSwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTExNTMzLDYgKzExNTQzLDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDVlNWU4NGYuLjQxNWE2ZGYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTcwMCwxMCArMTcwMCwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE3MTQsNiArMTcyNCwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0Y2Y0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIGRlZmZkYjBiMjQ5N2ExMDYwNjFkM2VhMmM2YTNmZWY0ZmJhMzQ0NWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozOTo1MSArMDQwMAorU3ViamVjdDogW1BBVENIIDM1LzM1XSB3Y2FzdC1xdWFsIFBSLzU1MzgzCisKK1RoaXMgaXMgYSBiYWNrcG9ydCBmcm9tIGdjYyBidWd6aWxsYQorCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU1MzgzCisKK1RoaXMgY29tbWl0IGZpeGVzIGEgd3Jvbmcgd2FybmluZyBiZWhhdmlvci4gVGhpcyBidWcgd2hpY2ggaGFzIG5vCit3b3JrYXJvdW5kIG90aGVyIHRoYW4gZGlzYWJsaW5nIHRoZSB3YXJuaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBnY2MvYy9jLXR5cGVjay5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYyB8ICAgIDYgKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvYy9jLXR5cGVjay5jIGIvZ2NjL2MvYy10eXBlY2suYworaW5kZXggZGRiNmQzOS4uYzYyNDEyMCAxMDA2NDQKKy0tLSBhL2djYy9jL2MtdHlwZWNrLmMKKysrKyBiL2djYy9jL2MtdHlwZWNrLmMKK0BAIC00NDY0LDcgKzQ0NjQsNyBAQCBoYW5kbGVfd2Fybl9jYXN0X3F1YWwgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHR5cGUsIHRyZWUgb3R5cGUpCisgICAgIC8qIFRoZXJlIGFyZSBxdWFsaWZpZXJzIHByZXNlbnQgaW4gSU5fT1RZUEUgdGhhdCBhcmUgbm90IHByZXNlbnQKKyAgICAgICAgaW4gSU5fVFlQRS4gICovCisgICAgIHdhcm5pbmdfYXQgKGxvYywgT1BUX1djYXN0X3F1YWwsCistCQkiY2FzdCBkaXNjYXJkcyAlcSN2IHF1YWxpZmllciBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUiLAorKwkJImNhc3QgZGlzY2FyZHMgJXF2IHF1YWxpZmllciBmcm9tIHBvaW50ZXIgdGFyZ2V0IHR5cGUiLAorIAkJZGlzY2FyZGVkKTsKKyAKKyAgIGlmIChhZGRlZCB8fCBkaXNjYXJkZWQpCitkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYworaW5kZXggNjQwZTRmMC4uNTYzODJjNyAxMDA2NDQKKy0tLSBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jCisrKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYworQEAgLTg1LDExICs4NSwxMSBAQCBmMyAodm9pZCAqKipiYXIpCisgdm9pZAorIGY0ICh2b2lkICogY29uc3QgKipiYXIpCisgeworLSAgY29uc3Qgdm9pZCAqKipwOSA9IChjb25zdCB2b2lkICoqKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKysgIGNvbnN0IHZvaWQgKioqcDkgPSAoY29uc3Qgdm9pZCAqKiopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IGRpc2NhcmRzIC5jb25zdC4gcXVhbGlmaWVyIiB9ICovCisgICB2b2lkICogY29uc3QgKipwMTEgPSAodm9pZCAqIGNvbnN0ICoqKSBiYXI7CistICB2b2lkICoqIGNvbnN0ICpwMTMgPSAodm9pZCAqKiBjb25zdCAqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCIgfSAqLworKyAgdm9pZCAqKiBjb25zdCAqcDEzID0gKHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QgZGlzY2FyZHMgLmNvbnN0LiBxdWFsaWZpZXIiIH0gKi8KKyAgIGNvbnN0IHZvaWQgKiBjb25zdCAqKnAxNSA9IChjb25zdCB2b2lkICogY29uc3QgKiopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCistICBjb25zdCB2b2lkICoqIGNvbnN0ICpwMTcgPSAoY29uc3Qgdm9pZCAqKiBjb25zdCAqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCIgfSAqLworKyAgY29uc3Qgdm9pZCAqKiBjb25zdCAqcDE3ID0gKGNvbnN0IHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QgZGlzY2FyZHMgLmNvbnN0LiBxdWFsaWZpZXIiIH0gKi8KKyAgIHZvaWQgKiBjb25zdCAqIGNvbnN0ICogcDE5ID0gKHZvaWQgKiBjb25zdCAqIGNvbnN0ICopIGJhcjsKKyAgIGNvbnN0IHZvaWQgKiBjb25zdCAqIGNvbnN0ICpwMjEgPSAoY29uc3Qgdm9pZCAqIGNvbnN0ICogY29uc3QgKikgYmFyOworIH0KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzOC1nY2MtNC44LWJ1aWxkLWFyZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzgyOTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzOC1nY2MtNC44LWJ1aWxkLWFyZ3MucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorV2hlbiBjcm9zcyBjb21waWxpbmcgYSB0YXJnZXQgZ2NjLCB0YXJnZXQgZmxhZ3MgbWF5IGJlIHVzZWQgb24gdGhlIGhvc3QKKworQ29uZmlndXJlIGlkZW50aWZpZXMgYSBudW1iZXIgb2Ygd2FybmluZyBmbGFncyAoV0FSTl9DRkxBR1MgYW5kCitXQVJOX0NYWEZMQUdTKSBmcm9tIHRoZSAkQ0MgdmFsdWUuICBUaGUgY3Jvc3MgY29tcGlsZXIgbWF5IGJlIGRpZmZlcmVudAorZnJvbSB0aGUgaG9zdCBjb21waWxlciBhbmQgbWF5IG5vdCBzdXBwb3J0IHRoZSBzYW1lIHNldCBvZiBmbGFncy4gIFRoaXMKK2xlYWRzIHRvIHByb2JsZW1zIHN1Y2ggYXM6CisKK2NjMXBsdXM6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAiLVduby1uYXJyb3dpbmciCitjYzFwbHVzOiBlcnJvcjogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gIi1Xbm8tb3Zlcmxlbmd0aC1zdHJpbmdzIgorCitXb3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnkgcmVtb3ZpbmcgdGhlIHdhcm5pbmcgZmxhZ3MgZnJvbSB0aGUKK0JVSUxEX0NYWEZMQUdTIHZhbHVlLCBpbiBhIHdheSBzaW1pbGFyIHRvIHRoZSBCVUlMRF9DRkxBR1MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWd1cmUKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorQEAgLTE3ODY0LDcgKzE3ODY0LDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc4NTMgImNvbmZpZ3VyZSIKKysjbGluZSAxNzg2NyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNzk3MCw3ICsxNzk3MCw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDE3OTU5ICJjb25maWd1cmUiCisrI2xpbmUgMTc5NzMgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMjY5MTgsMTggKzI2OTE4LDE1IEBAICRhc19lY2hvICIjZGVmaW5lIFRBUkdFVF9MSUJDX1BST1ZJREVTX1MKKyBmaQorIAorICMgVGVzdCBmb3IgPHN5cy9zZHQuaD4gb24gdGhlIHRhcmdldC4KKy0KKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5Li4uICIgPiY2OyB9CistaGF2ZV9zeXNfc2R0X2g9bm8KKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworICNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKyAjICBoYXZlX3N5c19zZHRfaD15ZXMKKy0jCistIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorLSMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisgI2ZpCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CistJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYWE1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1BvcnRpb25zIG9mCisKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9nY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZy9tc2cyNjAxMy5odG1sCisKK2FyZSBub3QgdXBzdHJlYW1lZCB5ZXQuIFNvIGxldHMga2VlcCBtaXNzaW5nIHBpZWNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNTo1NTo0OS40ODgzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE2OjAyOjMxLjc3MjQwNjY3OSAtMDcwMAorQEAgLTE0OCw3ICsxNDgsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTU6NTU6NDkuNDcyMzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNjowMjozMS43ODA0MDY2ODAgLTA3MDAKK0BAIC0zMzI1LDcgKzMzMjUsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5NjEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDE5IEBACitBdm9pZCB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggYTAzNDMzZi4uMTkwMmE5MCAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtNTYyOCw2ICs1NjI4LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCisrCSAgICAjIEluc3RlYWQgb2YgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoLAorKwkgICAgIyB1c2UgdGhlIHBhdGggdGhlIC5sYSBpcyBjb250YWluZWQgaW4uCisrCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBkaXI9IiRsaWJkaXIiCisgCSAgICBhYnNkaXI9IiRsaWJkaXIiCisgCSAgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2ZjcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoCkBAIC0wLDAgKzEsNzggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqCisKKzIwMTMtMDgtMDEgIE1hcnRpbiBKYW1ib3IgIDxtamFtYm9yQHN1c2UuY3o+CisKKwlQUiBtaWRkbGUtZW5kLzU3NzQ4CisJKiBzdG9yLWxheW91dC5jIChjb21wdXRlX3JlY29yZF9tb2RlKTogVHJlYXQgemVyby1zaXplZCBhcnJheSBmaWVsZHMKKwlsaWtlIGluY29tcGxldGUgdHlwZXMuCisKK3Rlc3RzdWl0ZS8KKwkqIGdjYy5kZy90b3J0dXJlL3ByNTc3NDguYzogTmV3IHRlc3QuCisKKworSW5kZXg6IGdjYy00LjguMS9nY2Mvc3Rvci1sYXlvdXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9zdG9yLWxheW91dC5jCTIwMTMtMDQtMjggMTA6Mjk6MTguMDAwMDAwMDAwIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9zdG9yLWxheW91dC5jCTIwMTMtMDgtMDEgMTU6MDI6MDguMDE4MDA2MTI1IC0wNzAwCitAQCAtMTYxOCw3ICsxNjE4LDkgQEAKKyAJCSAgICYmIGludGVnZXJfemVyb3AgKFRZUEVfU0laRSAoVFJFRV9UWVBFIChmaWVsZCkpKSkpCisgCSAgfHwgISBob3N0X2ludGVnZXJwIChiaXRfcG9zaXRpb24gKGZpZWxkKSwgMSkKKyAJICB8fCBERUNMX1NJWkUgKGZpZWxkKSA9PSAwCistCSAgfHwgISBob3N0X2ludGVnZXJwIChERUNMX1NJWkUgKGZpZWxkKSwgMSkpCisrCSAgfHwgISBob3N0X2ludGVnZXJwIChERUNMX1NJWkUgKGZpZWxkKSwgMSkKKysJICB8fCAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKGZpZWxkKSkgPT0gQVJSQVlfVFlQRQorKwkgICAgICAmJiB0cmVlX2xvd19jc3QgKERFQ0xfU0laRSAoZmllbGQpLCAxKSA9PSAwKSkKKyAJcmV0dXJuOworIAorICAgICAgIC8qIElmIHRoaXMgZmllbGQgaXMgdGhlIHdob2xlIHN0cnVjdCwgcmVtZW1iZXIgaXRzIG1vZGUgc28KK0luZGV4OiBnY2MtNC44LjEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdG9ydHVyZS9wcjU3NzQ4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdG9ydHVyZS9wcjU3NzQ4LmMJMjAxMy0wOC0wMSAxNTowMjowOC4wNjIwMDYxMjYgLTA3MDAKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBQUiBtaWRkbGUtZW5kLzU3NzQ4ICovCisrLyogeyBkZy1kbyBydW4gfSAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKytleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CisrCisrdHlwZWRlZiBsb25nIGxvbmcgVgorKyAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgyICogc2l6ZW9mIChsb25nIGxvbmcpKSwgbWF5X2FsaWFzKSk7CisrCisrdHlwZWRlZiBzdHJ1Y3QgUyB7IFYgYTsgViBiWzBdOyB9IFAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCAoMSkpKTsKKysKKytzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgVCB7IGNoYXIgYzsgUCBzOyB9OworKworK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKQorK2NoZWNrIChzdHJ1Y3QgVCAqdCkKKyt7CisrICBpZiAodC0+cy5iWzBdWzBdICE9IDMgfHwgdC0+cy5iWzBdWzFdICE9IDQpCisrICAgIGFib3J0ICgpOworK30KKysKKytpbnQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUpKQorK2dldF9pICh2b2lkKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKKytmb28gKFAgKnApCisreworKyAgViBhID0geyAzLCA0IH07CisrICBpbnQgaSA9IGdldF9pKCk7CisrICBwLT5iW2ldID0gYTsKKyt9CisrCisraW50CisrbWFpbiAoKQorK3sKKysgIHN0cnVjdCBUICp0ID0gKHN0cnVjdCBUICopIG1hbGxvYyAoMTI4KTsKKysKKysgIGZvbyAoJnQtPnMpOworKyAgY2hlY2sgKHQpOworKworKyAgcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0My1jcHAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWY4NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0My1jcHAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVGhlIE9FIGVudmlyb25tZW50IHNldHMgYW5kIGV4cG9ydHMgQ1BQIGFzIGJlaW5nIHRoZSB0YXJnZXQgZ2NjLiBXaGVuIGJ1aWxkaW5nIAorZ2NjLWNyb3NzLWNhbmFkaWFuIGZvciBhIG1pbmd3IHRhcmdldHRlZCBzZGssIHRoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kIGluCitidWlsZC54ODZfNjQtcG9reXNkay1taW5ndzMyLmk1ODYtcG9reS1saW51eC9idWlsZC14ODZfNjQtbGludXgvbGliaWJlcnR5L2NvbmZpZy5sb2c6CisKK2NvbmZpZ3VyZTozNjQxOiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcworY29uZmlndXJlOjM2NjY6IGdjYyAgLWMgLWlzeXN0ZW0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgIGNvbmZ0ZXN0LmMgPiY1Citjb25maWd1cmU6MzY2NjogJD8gPSAwCitjb25maWd1cmU6MzY5ODogcmVzdWx0OiBubworY29uZmlndXJlOjM3ODY6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCitjb25maWd1cmU6Mzg1NjogcmVzdWx0OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyCitjb25maWd1cmU6Mzg3NjogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMiAgY29uZnRlc3QuYworY29uZmlndXJlOjM4NzY6ICQ/ID0gMAorCitOb3RlIHRoaXMgaXMgYSAqYnVpbGQqIHRhcmdldCAoaW4gYnVpbGQteDg2XzY0LWxpbnV4KSBzbyBpdCBzaG91bGQgYmUgdXNpbmcgCit0aGUgaG9zdCAiZ2NjIiwgbm90IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjLiBTaW5jZSB0aGUgbWluZ3czMiBoZWFkZXJzIGFyZSAKK3ZlcnkgZGlmZmVyZW50LCB1c2luZyB0aGUgd3JvbmcgY3BwIGlzIGEgcmVhbCBwcm9ibGVtLiBJdCBpcyBsZWFraW5nIGludG8gCitjb25maWd1cmUgdGhyb3VnaCB0aGUgQ1BQIHZhcmlhYmxlLiBVbHRpbWF0ZWx5IHRoaXMgbGVhZHMgdG8gYnVpbGQgZmFpbHVyZXMgCityZWxhdGVkIHRvIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1ZGUgYSBwcm9jZXNzLmggZmlsZSBmb3IgcGVtLXVuaXguYy4KKworVGhlIGZpeCBpcyB0byBlbnN1cmUgd2UgZXhwb3J0IGEgc2FuZSBDUFAgdmFsdWUgaW50byB0aGUgYnVpbGQgZW52aXJvbm1lbnQgd2hlbgordXNpbmcgYnVpbGQgdGFyZ2V0cy4gV2UgY291bGQgZGVmaW5lIGEgQ1BQX0ZPUl9CVUlMRCB2YWx1ZSB3aGljaCBtYXkgYmUgdGhlIHZlcnNpb24KK3doaWNoIG5lZWRzIHRvIGJlIHVwc3RyZWFtZWQgYnV0IGZvciBub3csIHRoaXMgZml4IGlzIGdvb2QgZW5vdWdoIHRvIGF2b2lkIHRoZSAKK3Byb2JsZW0uCisKK1JQIDIyLzA4LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTAzLTMwIDExOjI1OjAzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9NYWtlZmlsZS5pbgkyMDEzLTA4LTEzIDEyOjAzOjE3LjE1MTk4ODg4MiArMDAwMAorQEAgLTE0OSw2ICsxNDksNyBAQAorIAlBUj0iJChBUl9GT1JfQlVJTEQpIjsgZXhwb3J0IEFSOyBcCisgCUFTPSIkKEFTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVM7IFwKKyAJQ0M9IiQoQ0NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSI7IGV4cG9ydCBDUFA7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODc2MWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ0LWdlbmd0eXBlcy5wYXRjaApAQCAtMCwwICsxLDk3IEBACitnZW5ndHlwZSBpcyBnZW5lcmF0ZWQgZm9yIGJvdGggdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHRhcmdldC4gLURHRU5FUkFUT1JfRklMRQord2FzIGFkZGVkIGluIHRoZSBwYXRjaCBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxMi0wNy9tc2cwMDI3My5odG1sCithbmQgd2FzIGFwcGxpZWQgdG8gYm90aCB2ZXJzaW9ucyBvZiBnZW5ndHlwZS4KKworVW5mb3J0dW5hdGVseSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmbGFnIHRyaWdnZXJzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIChiY29uZmlnLmgpIAordG8gYmUgaW5jbHVkZWQgZm9yIHRoZSB0YXJnZXQgYnVpbGQgb2YgZ2VuZ3R5cGUuIENvbXBpbGluZyBnZW5ndHlwZSB3aXRoIHRoZSB0YXJnZXQgCitjb21waWxlciBhbmQgYmNvbmZpZy5oIGNhbiByZXN1bHQgaW4gZXJyb3JzIGlmIHRoZSBidWlsZCBhbmQgdGFyZ2V0IHN5c3RlbXMgYXJlIAorZGlzc2ltaWxhci4gQW4gZXhhbXBsZSBjYXNlIHRoaXMgZmFpbHMgaXMgY3Jvc3MgY29tcGlsaW5nIGdjYyBvbiBsaW51eCBmb3IgYSBkYXJ3aW4gCit0YXJnZXQgc3lzdGVtOgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOjI1OjA6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzogSW4gZnVuY3Rpb24gJ3ZvaWQgcGFyc2VfZXJyb3IoY29uc3QgY2hhciosIC4uLiknOgorfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL3N5c3RlbS5oOjkzOjUzOiBlcnJvcjogJ2ZwdXRjX3VubG9ja2VkJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKK3wgICMgIGRlZmluZSBmcHV0YyhDLCBTdHJlYW0pIGZwdXRjX3VubG9ja2VkIChDLCBTdHJlYW0pCisKK3doaWNoIG9jY3VycyBzaW5jZSBhdXRvLWJ1aWxkLmggYW5kIGF1dG8taG9zdC5oIGhhdmUgZGlmZmVybmV0IHZhbHVlcyBvZgorSEFWRV9GUFVUQ19VTkxPQ0tFRDoKKworI2RlZmluZSBIQVZFX0ZQVVRDX1VOTE9DS0VEIDEKKy8qICN1bmRlZiBIQVZFX0ZQVVRTX1VOTE9DS0VEICovCisKK1RoZSBvYnZpb3VzIGZpeCBpcyB0byBvbmx5IGluY2x1ZGUgdGhlIGZsYWcgb24gYnVpbGQvIHRhcmdldHMgd2hpY2ggdGhpcyBwYXRjaCBkb2VzLCBob3dldmVyIAordGhpcyBhbHNvIGxlYWRzIHRvIGNvbXBpbGUgZXJyb3JzIGR1ZSB0byBjb25zdF90cmVlIGJlaW5nIHVuZGVmaW5lZCBidXQgdXNlZCBpbiBkb3VibGVfaW50LmgKKworSSBhZGRlZCBhIEdFTkVSQVRPUl9GSUxFMiBmbGFnIHRvIHdvcmthcm91bmQgdGhvc2UgaW4gdGhlIAordGFyZ2V0IGNhc2UgYW5kIGFsbG93IHRoZSBidWlsZCB0byBzdWNjZWVkLgorCitPbmx5IHRoZSBidWlsZC9nZW5ndHlwZXMgc2hvdWxkIGhhdmUgdGhlIC1ER0VORVJBVE9SX0ZJTEUgCisKK1JQIDIyLzgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNi44NDQwMTQ0MjQgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzcuNzg0MDE0NDAyICswMDAwCitAQCAtMzkwMywyNyArMzkwMywyOSBAQAorIAorIGdlbmd0eXBlLWxleC5vIGJ1aWxkL2dlbmd0eXBlLWxleC5vIDogZ2VuZ3R5cGUtbGV4LmMgZ2VuZ3R5cGUuaCAkKFNZU1RFTV9IKQorIGdlbmd0eXBlLWxleC5vOiAkKENPTkZJR19IKSAkKEJDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtbGV4Lm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXBhcnNlLm8gYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyA6IGdlbmd0eXBlLXBhcnNlLmMgZ2VuZ3R5cGUuaCBcCisgICAkKFNZU1RFTV9IKQorIGdlbmd0eXBlLXBhcnNlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS1zdGF0ZS5vIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86IGdlbmd0eXBlLXN0YXRlLmMgJChTWVNURU1fSCkgXAorICAgZ2VuZ3R5cGUuaCBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSAkKE9CU1RBQ0tfSCkgXAorICAgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS1zdGF0ZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS5vIGJ1aWxkL2dlbmd0eXBlLm8gOiBnZW5ndHlwZS5jICQoU1lTVEVNX0gpIGdlbmd0eXBlLmggCVwKKyAgIHJ0bC5kZWYgaW5zbi1ub3Rlcy5kZWYgZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgXAorICAgJChPQlNUQUNLX0gpICQoWFJFR0VYX0gpCisgZ2VuZ3R5cGUubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUubzogJChCQ09ORklHX0gpCisgCisgYnVpbGQvZ2VubWRkZXBzLm86IGdlbm1kZGVwcy5jICQoQkNPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaAlcCitAQCAtMzk4OCw3ICszOTkwLDcgQEAKKyAjIGFueSBzeXN0ZW0gaGVhZGVyIGlzIGluY2x1ZGVkLgorIGdlbmd0eXBlLWxleC5jIDogZ2VuZ3R5cGUtbGV4LmwKKyAJLSQoRkxFWCkgJChGTEVYRkxBR1MpIC1vJEAgJDwgJiYgeyBcCistCSAgZWNobyAnI2luY2x1ZGUgImJjb25maWcuaCInID4gJEAudG1wOyBcCisrCSAgZWNobyAnJyA+ICRALnRtcDsgXAorIAkgIGNhdCAkQCA+PiAkQC50bXA7IFwKKyAJICBtdiAkQC50bXAgJEA7IFwKKyAJfQorSW5kZXg6IGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTAxLTMwIDExOjA0OjMwLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCTIwMTMtMDgtMTkgMTE6NDE6NTEuNTY0MDEyNzE5ICswMDAwCitAQCAtNDQ4LDEwICs0NDgsMTIgQEAKKyAKKyAKKyAjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisrI2lmbmRlZiBHRU5FUkFUT1JfRklMRTIKKyAvKiBDb252ZXJzaW9uIHRvIGFuZCBmcm9tIEdNUCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9ucy4gICovCisgCisgdm9pZCBtcHpfc2V0X2RvdWJsZV9pbnQgKG1wel90LCBkb3VibGVfaW50LCBib29sKTsKKyBkb3VibGVfaW50IG1wel9nZXRfZG91YmxlX2ludCAoY29uc3RfdHJlZSwgbXB6X3QsIGJvb2wpOworICNlbmRpZgorKyNlbmRpZgorIAorICNlbmRpZiAvKiBET1VCTEVfSU5UX0ggKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNGY0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2djYyA0Ljggd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBzaW5jZSB0aGUgKi5QcG8gZmlsZXMKK2Rvbid0IGdldCBjcmVhdGVkIHVubGVzcyAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIGlzIHRydWUuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB3ZSBvbmx5IHVzZSB0aG9zZSBjb21waWxlciBvcHRpb25zIHdoZW4gaXRzIGVuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyhQcm9ibGVtIHdhcyBhbHJlYWR5IHJlcG9ydGVkIHVwc3RyZWFtLCBhdHRhY2hlZCB0aGlzIHBhdGNoIHRoZXJlCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU1OTMwKQorCitSUCAKKzIwMTIvMDkvMjIKKworSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wMS0xNCAxODoxNjoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDktMjIgMTA6Mzg6MTguOTA0MDY0NzUwICswMDAwCitAQCAtMTAwLDcgKzEwMCw4IEBACisgSUZVTkNfREVGCT0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQJPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKyAKKy1NX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTCQk9IAorIE1fU0laRQkJPSAtRE49JChQQVRfTikKKyBNX0lGVU5DCQk9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUJCT0gJChQQVRfQkFTRSlfbi5jCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA1LTMxIDA5OjA5OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wOS0yMiAxMDo0MDo0Mi41MjAwNTk5MTcgKzAwMDAKK0BAIC0yOTgsNyArMjk4LDggQEAKKyBQQVRfUyA9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYgPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVCA9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorLU1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTID0gCisgTV9TSVpFID0gLUROPSQoUEFUX04pCisgTV9JRlVOQyA9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUgPSAkKFBBVF9CQVNFKV9uLmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWZkNTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1doZW4gY29tcGlsaW5nIGEgcHJvamVjdCB1c2luZyAtZnJlcG8sIC5ycG8gZmlsZXMgYXJlIHdyaXR0ZW4gYWxvbmdzaWRlCit0aGUgLm8gZmlsZSwgdGhlIHN5bWJvbHMgZWl0aGVyIGhhdmUgTyBvciBDIGFnYWluc3QgdGhlbS4gRHVyaW5nIGZpbmFsIGxpbmtpbmcsCit0aGUgb2JqZWN0cyBjYW4gYmUgcmVjb21waWxlZCB3aXRoIHNvbWUgb2YgdGhlIGVudHJpZXMgdHdlYWtlZC9jaG9zZW4gYnkgdGhlIAordGxpbmsuYyBjb2RlICh2aXNpYmxlIHdpdGggVExJTktfVkVSQk9TRT0zKSwgaXQgZG9lcyB0aGlzIGJ5IGNoYW5naW5nIE8gLT4gQworaW4gdGhlIC5ycG8gZmlsZXMuCisKK015IHRlc3RzIHNob3dlZCB0aGF0IGluaXRfcmVwbyAoY3AvcmVwby5jKSB3YXMgY29ycmVjdGx5IGNhbGxpbmcgCitJREVOVElGSUVSX1JFUE9fQ0hPU0VOIGFnYWluc3QgdGhlIHJpZ2h0IGlkZW50aWZlcnMgYW5kIHNldHRpbmcgdGhlCitjaG9zZW4gYml0LgorCitCeSB0aGUgdGltZSBmaW5pc2hfcmVwbygpIG9yIGVtaXRfcmVwb19wKCkgd2VyZSBjYWxsZWQsIHRoZSBwb2ludGVyIHJldHVybmVkCitieSBnZXRfaWRlbnRpZmllcigpIGZvciB0aGUgc3ltYm9sIG1hcmtlZCBkdXJpbmcgaW5pdF9yZXBvIGhhZCBjaGFuZ2VkIGFuZAordGhlIGNob3NlbiBiaXQgd2FzIG5vIGxvbmdlciBzZXQuIFRoaXMgbGVhZCB0byBsaW5raW5nIGJ1Z3MgbGlrZToKKworY29sbGVjdDogcmVsaW5raW5nCitjb2xsZWN0MjogZXJyb3I6ICdfWk5LNnN1ZG9rdTVDbGVhcklOU184U2VxdWVuY2VFRWNsRVJTMV8nIHdhcyBhc3NpZ25lZCB0byAnYm9hcmQucnBvJywgYnV0IHdhcyBub3QgZGVmaW5lZCBkdXJpbmcgcmVjb21waWxhdGlvbiwgb3IgdmljZSB2ZXJzYQorCitUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQgYmVmb3JlCitmaW5pc2hfcmVwbygpIGlzIGNhbGxlZCBhbmQgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgaXMgc2V0IHRvIGZhbHNlIAorc28gdGhlIGlkZW50aWZpZXJzIGFyZSBub3QgcHJlc2VydmVkLiBUaGV5IGFyZSByZWNyZWF0ZWQgYnV0IHRoZSAKK2Nob3NlbiBiaXRzIGdldCB3aXBlZCBvdXQgd2hpY2ggaXMgd2h5IHRoZSBwb2ludGVyIGNoYW5nZXMgYW5kIHRoZSAKK2Nob3NlbiBiaXQgaXMgbm90IHNldC4KKworVGhlIGZpeCBpcyB0byBjaGFuZ2UgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgKmFmdGVyKiB0aGUgZmluaXNoX3JlcG8gCitjYWxscyBhcmUgbWFkZS4KKworUmVwcm9kdWN0aW9uIGlzIHRyaWNreSBzaW5jZSB5b3UgbmVlZCB0byB0cmlnZ2VyIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBhdAoranVzdCB0aGUgcmlnaHQgbW9tZW50LgorCitSUCAyMDEzLzEwLzkKKworW1lPQ1RPICM1MTMzXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9nY2MvdG9wbGV2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvdG9wbGV2LmMJMjAxMy0wMy0yOCAwODoyOTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCTIwMTMtMTAtMDkgMjA6Mjc6MTcuMDg5MjI4MDIzICswMDAwCitAQCAtNTUxLDExICs1NTEsMTEgQEAKKyAgIGlmIChmbGFnX3N5bnRheF9vbmx5IHx8IGZsYWdfd3BhKQorICAgICByZXR1cm47CisgCistICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOworLQorICAgLyogVGhpcyBtdXN0IGFsc28gY2FsbCBmaW5hbGl6ZV9jb21waWxhdGlvbl91bml0LiAgKi8KKyAgIGxhbmdfaG9va3MuZGVjbHMuZmluYWxfd3JpdGVfZ2xvYmFscyAoKTsKKyAKKysgIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CisrCisgICBpZiAoc2Vlbl9lcnJvciAoKSkKKyAgICAgcmV0dXJuOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA5ZTBlMTllYWMyNTYyZjczODU4NjAyZmUyNmUyMDQ0ZWI4YjIwYzQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAorCitXaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsIAorbm90IGJlIGFibGUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgU1BFIHRhcmdldHMgKGU1MDB2MS92MikuCitHQ0MgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXhzcGUgd2lsbCBub3QgYmUgYWJsZSB0bworZ2VuZXJhdGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgKGZvciBlNjUwMCkuCitUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmVkIGZpbGUgc3VjaCB0aGF0IFNQRSBvciBBbHRpVmVjIGNvZGUKK2NhbiBiZSBnZW5lcmF0ZWQgd2hlbiBnY2MgaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXguCitUaGUgQUJJIGFuZCBzcGVjaWZmaWMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWxlY3RlZCB0aHJvdWdoIHRoZQorIi1tYWJpPXNwZSBvciAtbWFiaT1hbHRpdmVjIiBhbmQgdGhlICItbXNwZSBvciAtbWFsdGl2ZWMiIHBhcmFtZXRlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBjYjdhOTRlLi5kMzkyYzJiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMjA2OCw3ICsyMDY4LDEyIEBAIHBvd2VycGMtKi1ydGVtcyopCisgCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgdC1ydGVtcyByczYwMDAvdC1wcGNjb21tIgorIAk7OworIHBvd2VycGMqLSotbGludXgqKQorLQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCWNhc2UgJHt0YXJnZXR9IGluCisrCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIiA7OworKwkgICAgKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIgOzsKKysJZXNhYworIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCisgCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjb3MgJHt0bWFrZV9maWxlfSByczYwMDAvdC1wcGNjb21tIgorIAljYXNlICR7dGFyZ2V0fSBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDhjNjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK0Vuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvZ2NjL01ha2VmaWxlLmluCTIwMTQtMTItMjMgMTE6NTc6MzMuMzI3ODczMzMxICswMDAwCisrKysgYi9nY2MvTWFrZWZpbGUuaW4JMjAxNS0wMS0yMSAxMTozMjozNS40NDczMDUzOTQgKzAwMDAKK0BAIC01ODcsNiArNTg3LDcgQEAKKyAKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzIGV0Yy4KKyBsaWJzdWJkaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorK2xpYnN1YmRpcl90YXJnZXQgPSBnY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGV4ZWN1dGFibGVzCisgbGliZXhlY3N1YmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIGFsbCBwbHVnaW4gcmVzb3VyY2VzIGFyZSBpbnN0YWxsZWQKK0BAIC0yNTM0LDYgKzI1MzUsNyBAQAorIAorIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAorICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKKysgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKKyAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTEzIDE3OjQwOjI2LjEzMTAxMjcyNSArMDAwMAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTIxIDExOjMwOjA4LjkyODQyNjQ5MiArMDAwMAorQEAgLTU5LDYgKzU5LDEwIEBACisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKyAgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisrI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKysgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKyAgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorZGlmZiAtLWdpdCBhL2djYy9kZWZhdWx0cy5oIGIvZ2NjL2RlZmF1bHRzLmgKK2luZGV4IGY5NGFlMTcuLmQ5OGI0MGIgMTAwNjQ0CistLS0gYS9nY2MvZGVmYXVsdHMuaAorKysrIGIvZ2NjL2RlZmF1bHRzLmgKK0BAIC0xMzkwLDQgKzEzOTAsMTMgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgCisgI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggICovCisgCisrLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisrCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCisrI2VuZGlmCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorKyNlbmRpZgorKworICNlbmRpZiAgLyogISBHQ0NfREVGQVVMVFNfSCAqLworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggOWYwYjc4MS4uMTc0ZmNhOCAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTE4OSwxMyArMTE4OSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgCisgLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisgCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCistI2VuZGlmCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorLSNlbmRpZgorLQorICNpZmRlZiBDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFICAvKiBEb24ndCB1c2UgdGhlc2UgcHJlZml4ZXMgZm9yIGEgY3Jvc3MgY29tcGlsZXIuICAqLworICN1bmRlZiBNRF9FWEVDX1BSRUZJWAorICN1bmRlZiBNRF9TVEFSVEZJTEVfUFJFRklYCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYwpAQCAtMCwwICsxLDEyNyBAQAorcmVxdWlyZSBnY2MtY29tbW9uLmluYworCisjIFRoaXJkIGRpZ2l0IGluIFBWIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBhZnRlciBhIG1pbm9yIHJlbGVhc2UKKworUFYgPSAiNC45LjMiCisKKyMgQklOViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgdG8gYSByZXZpc2lvbiBhZnRlciBhIG1pbm9yIGdjYyByZWxlYXNlCisKK0JJTlYgPSAiNC45LjMiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2djYy00Ljk6IgorCitERVBFTkRTID0rICJtcGZyIGdtcCBsaWJtcGMgemxpYiIKK05BVElWRURFUFMgPSAibXBmci1uYXRpdmUgZ21wLW5hdGl2ZSBsaWJtcGMtbmF0aXZlIHpsaWItbmF0aXZlIgorCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgZmlsZTovL0NPUFlJTkczO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgIGZpbGU6Ly9DT1BZSU5HLlJVTlRJTUU7bWQ1PWZlNjBkODcwNDg1NjdkNGZlOGM4YTBlZDI0NDhiY2M4IFwKKyIKKworU1JDX1VSSSA9ICJcCisgICAgJHtHTlVfTUlSUk9SfS9nY2MvZ2NjLSR7UFZ9L2djYy0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBcCisgICAgZmlsZTovLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDExLWluZGV4X21hY3JvLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTQtc2gtcHIyNDgzNi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI4LU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBcCisgICAgZmlsZTovLzAwMzEtRGlzYWJsZS1zZHQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMyLWxpYnRvb2wucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQzLWNwcC5wYXRjaCBcCisgICAgZmlsZTovLzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ3LXJlcG9tZW1idWcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaCBcCisgICAgZmlsZTovLzAwNTEtZWFiaXNwZS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZjgzMWI0ZDI1MTg3MjczNmU4ZTljYzA5NzQ2ZjMyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMzMyYjJhNWEzMjFiNTc1MDhiOTAzMTM1NGE4NTAzYWY2ZmRmYjg2OGI4YzE3NDhkMzMwMjhkMTAwYThiNjdlIgorCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCisjIExhbmd1YWdlIE92ZXJyaWRlcworRk9SVFJBTiA9ICIiCitKQVZBID0gIiIKKworTFRPID0gIi0tZW5hYmxlLWx0byIKKworRVhUUkFfT0VDT05GX0JBU0UgPSAiXAorICAgICR7TFRPfSBcCisgICAgLS1lbmFibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ODAxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGJmM2Q5NmFlNThmYTE4MGI4YjQ2OGQyNWRjMmUwMjA5ZGFjYTI3NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgICAgMiArLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZDgwOTUzNS4uMWI3NmM5MCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzQzOSw3ICs3NDM5LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDhlYzFhYS4uODlkMWQzZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjg3Myw3ICsyODczLDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAyLXVjbGliYy1jb25mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEzYjEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGQwMzA5NzNjODcyYzAwZDkxNjkyMWQ4NGRlZWUwYWYyYzBkMzgwODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzM1XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8ICAgIDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCA3NDNkOTUxLi5hZTRlYTYwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5OGU5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gZDJkOWRkNzU2YzQzNTZkMTRkZDdhZTAwMzg1NjM0NGNiNGYzNzk4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCAgICA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8ICAgIDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8ICAgIDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggMGQzMDlhNS4uZjJmMWUxZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggYjVmZDk4OS4uM2RhOWE1ZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCAyZDhlOTc4Li4xNGViMDhmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmNWYzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gYTU1Yzc1MWE0NDljMmNiZjBiM2ZjYzA3YWFiMWI4NmJmOTY2MTUxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNjMgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxMTcgKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgIDMwOCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgMzAwICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDEwMCArKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDY5MiArKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDQwNiArKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzUgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgICAyICsKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCAwODcxYTZhLi4zMjZkN2VmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTE5MDUsNiArMTkwNSw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjA2OSw2ICsyMDcyLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGY0MGRkY2YuLmM1N2E3NTEgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU4MjIsNiArMTU4MjIsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYwNzksNiArMTYwODIsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDU4MGQ3MjUuLjNmZTYxYjggMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCAwZTZiMWZjLi40MDVhZWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK0BAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JiZmU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjU3IEBACitGcm9tIDZhM2U4NTA2YTEyYzEyNzI4ZDhiMjk5MDFkZWZkNzM4YmU0Mzc1N2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDA1LzM1XSB1Y2xpYmMtbG9jYWxlLW5vX194CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDQ1ICsrKysrKysrKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDE0IC0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgICAgMSArCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgICA3IC0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgICAgNyAtLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAgIDcgKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDE4ICsrKy0tLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgICA0IC0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICAzIC0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgICAzIC0tCisgMTAgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IDJhZTNlNGEuLmU3NGZkZGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTYwLDQgKzYwLDQ5IEBAIGV4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZgorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDUwODFkYzEuLjIxNDMwZDAgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IGRhMDdjMWYuLjRiY2E1ZjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC02OCw2ICs2OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitpbmRleCBjMjY2NGE3Li5lYzVjMzI5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDcyOTRlM2EuLjdiMTI4NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitpbmRleCAxMzU5NGQ5Li5kNzY5M2I0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDE0MjQwNzguLmQ4OWRhMzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzYsMTUgKzM2LDExIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CistZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CistI2Vsc2UKKy0jdW5kZWYgX190ZXh0ZG9tYWluCistI3VuZGVmIF9fYmluZHRleHRkb21haW4KKy0jZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjdW5kZWYgdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBiaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKyAgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCitAQCAtNzAsNyArNjYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKyAgICAgeworLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgeworICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IGFhNTI3MzEuLjJlNmY4MGEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggODgzZWMxYS4uMmM3MDY0MiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC00MSw5ICs0MSw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZTA3MDdkNy4uZDg0OGVkNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwNjg1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSAyMjU1MTFhM2FlYjE5M2E5MTZiMzk5OWYwYjY0MGEzOTJjYWE2N2NkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8zNV0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICAgIDQgKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgICAxMyArKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMmU2ZjgwYS4uMzFlYmI5ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQwMSw3ICs0MDEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggMmM3MDY0Mi4uZDVjODk2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0xMjcsMTIgKzEyNywyNSBAQCBuYW1lc3BhY2Ugc3RkCisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1MTEyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw1NDIgQEAKK0Zyb20gNmZmZTdjNDZmNTJkMjc4NjRjM2RmMzY2M2UxNmVjOWRkZWU3MWU4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMzVdIHVjbGliYy1sb2NhbGUtdXBkYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgICAzICsKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgNzQgKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgNDIgKysrKysrLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgNTEgKysrKysrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTIgKystLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAzNCArKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDUgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgMTggKysrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgMTcgKysrLS0KKyA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMzEsNiArMzEsOSBAQAorIAorICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorICNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxjc3RkZGVmPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIzICszOSwyMCBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIHRlbXBsYXRlPD4KKyAgICAgdm9pZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19mOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fbGQ7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2xkOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHZvaWQKK0BAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisgICB9CisgCisgICBfX2NfbG9jYWxlCisgICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CistfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistbmFtZXNwYWNlIF9fZ251X2N4eAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorICAgICB7CisgICAgICAgIkxDX0NUWVBFIiwKK0BAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyAgICAgICAiTENfSURFTlRJRklDQVRJT04iCisgI2VuZGlmCisgICAgIH07CistfQorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKy19ICAvLyBuYW1lc3BhY2Ugc3RkCisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisgI2VuZGlmCistCistICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCistICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCistICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorICAgLy8gYmUgYXZvaWRlZC4KKy0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKy0gICAgaW50CistICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGVuZGlmCisgI2VuZGlmCisgCistICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOworKyAgICAgIHZhX2VuZChfX2FyZ3MpOworIAorICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zMywxNiArMzMsMjAgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisgICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKy0gIHRlbXBsYXRlPD4KKyAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisgICAgIHsKK0BAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAJfQorICAgICB9CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCisrICAgIHsgfQorIAorICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsKKy0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKy0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisrCisgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKy0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorKworICAgICByZXR1cm4gX19yZXQ7CisgICB9CisgCitAQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAgIH0KKyAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCistfQorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC01MywxMiArNTMsMTYgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCXNpemVfdCBfX3JlZnMpCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorICAgICAgeworLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KKysgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworICAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIH0KKyAJYnJlYWs7CisgICAgICAgZGVmYXVsdDoKKy0JOworKwlfX3JldCA9IHBhdHRlcm4oKTsKKyAgICAgICB9CisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KK0BAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisgCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKK0BAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK0BAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKysgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitAQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTUwLDEyICs1MCwyMSBAQAorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCisgICAgIHsKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKysKKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MjM4MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDlmMjE1ODQ1MTk4MWNmMGE4MGNmYWJkYzc5YWUzMWJiNjk3NmE4MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0ODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDA4LzM1XSBtaXNzaW5nLWV4ZWNpbmZvX2gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBib2VobS1nYy9pbmNsdWRlL2djLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib2VobS1nYy9pbmNsdWRlL2djLmggYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK2luZGV4IGM1MWUwMTcuLmE3YmE4ZGMgMTAwNjQ0CistLS0gYS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKysrKyBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorQEAgLTUwMyw3ICs1MDMsNyBAQCBHQ19BUEkgR0NfUFRSIEdDX21hbGxvY19hdG9taWNfaWdub3JlX29mZl9wYWdlIEdDX1BST1RPKChzaXplX3QgbGIpKTsKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2ODc3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gZTM5M2UwNzZmMWFiODJkMjVlMWFhMDRkNmVkZWEyN2I0MWQzZWIwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjAzICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMzVdIGM5OS1zbnByaW50ZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworaW5kZXggZTg1YmQ4My4uNmFmODM5YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitAQCAtMTM5LDcgKzEzOSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHVzaW5nIDo6dnNwcmludGY7CisgfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI4NTcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA3M2Y2OWQ4MDZlMmM5NTYxYTU0OTk1MjIzNDMxYTEwNzZjZmQ2MTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8zNV0gYzk5LWNvbXBsZXgtdWdseS1oYWNrCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggYzU3YTc1MS4uYTEzMzNlMiAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xODczNCw2ICsxODczNCw5IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciBJU08gQzk5IHN1cHBvcnQgdG8gVFIxIGluIDxjb21wbGV4Lmg+Li4uICIgPiY2OyB9CisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGNvbXBsZXguaD4KKysjaWZkZWYgX19VQ0xJQkNfXworKyNlcnJvciB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSB0ZXN0IGZhaWxzIGhlcmUgZm9yIGNyb3NzIHVudGlsIHVDbGliYyBzdXBwb3J0cyB0aGUgY29tcGxleCBmdW5jcworKyNlbmRpZgorIGludAorIG1haW4gKCkKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDExLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTc5YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDExLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYjAzNzk1M2U0MDMxMmI0NWFiODRlZDBhM2FkODgyYmI1ZTQxMzEwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjUxOjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMzVdIGluZGV4X21hY3JvCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgICAgICAgfCAgICAzICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIHwgICAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQoraW5kZXggMzhlYjFlOC4uMTU4ZDIxYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorQEAgLTU1LDYgKzU1LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitpbmRleCBkN2I1Y2JkLi5iOWIzYWNiIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitAQCAtNDgsNiArNDgsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBuYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzZWZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAxMDRlNGQ2NjIwOGYyNzI2YjE0ZDJmNWVlYmNlOTA3MDBjYmM4M2M4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6MDIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8zNV0gbGlic3RkYysrLW5hbWVzcGFjZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggfCAgICA0ICsrKy0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICAgIHwgICAgNCArKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMDY3NjU3YS4uZGQ3NmE2YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zMiw3ICszMiw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCitAQCAtMTE2LDMgKzExNyw0IEBACisgCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKyAJIH0KKyAgICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCAxNjY1ZGRlLi45MDVjNDMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0zMyw3ICszMyw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorQEAgLTc1LDMgKzc2LDQgQEAKKyAgICAgICBkZWxldGUgX01fZGF0YTsKKyAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgICAgIH0KKyt9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhmZDUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gZWRjOWFjYjE4MTgxMGYyMzRiNmI5ZjdkMjgyMGIwZTRmNmExZWVhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjQ4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMzVdIHNoLXByMjQ4MzYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvZm9ydW0ucGhwP3RocmVhZF9pZD04OTU5MzA0JmZvcnVtX2lkPTUzNDgKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjQ4MzYKKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBlMTJhMTgwLi4xMzViYmY1IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTIzMzc4LDcgKzIzMzc4LDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGViYTM1NzcuLjYzNjNhMjEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMzE0MSw3ICszMTQxLDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M0NmZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gNTBlNTM2NjAwNWIwZjZhZjI3Mzc4ZTJhNWMzY2I5Zjk5MzZhN2U2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU4OjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMzVdIGFybTogVXNlIFRBUkdFVF9FTkRJQU5fT1BUSU9OIGZvciBkZXRlcm1pbmluZworIE1VTFRJTElCX0RFRkFVTFRTCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vY29mZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hcm0vY29mZi5oCisrKysgZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2NvZmYuaAorQEAgLTMyLDggKzMyLDExIEBACisgI2RlZmluZSBUQVJHRVRfREVGQVVMVCAoTUFTS19BUENTX0ZSQU1FKQorIAorICNpZm5kZWYgTVVMVElMSUJfREVGQVVMVFMKKysjaWZuZGVmIFRBUkdFVF9FTkRJQU5fT1BUSU9OCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX09QVElPTiAibWxpdHRsZS1lbmRpYW4iCisrI2VuZGlmCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistICB7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1mbG9hdC1hYmk9c29mdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiB9CisrICB7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorICNlbmRpZgorIAwKKyAvKiBUaGlzIGlzIENPRkYsIGJ1dCBwcmVmZXIgc3RhYnMuICAqLworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYXJtL2VsZi5oCisrKysgZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2VsZi5oCitAQCAtMTE2LDggKzExNiwxMSBAQAorICNlbmRpZgorIAorICNpZm5kZWYgTVVMVElMSUJfREVGQVVMVFMKKysjaWZuZGVmIFRBUkdFVF9FTkRJQU5fT1BUSU9OCisrI2RlZmluZSBUQVJHRVRfRU5ESUFOX09QVElPTiAibWxpdHRsZS1lbmRpYW4iCisrI2VuZGlmCisgI2RlZmluZSBNVUxUSUxJQl9ERUZBVUxUUyBcCistICB7ICJtYXJtIiwgIm1saXR0bGUtZW5kaWFuIiwgIm1mbG9hdC1hYmk9c29mdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiwgImZuby1sZWFkaW5nLXVuZGVyc2NvcmUiIH0KKysgIHsgIm1hcm0iLCBUQVJHRVRfRU5ESUFOX09QVElPTiwgIm1mbG9hdC1hYmk9c29mdCIsICJtbm8tdGh1bWItaW50ZXJ3b3JrIiwgImZuby1sZWFkaW5nLXVuZGVyc2NvcmUiIH0KKyAjZW5kaWYKKyAMCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfU1RBUlRfQVBQX09GRiB0cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzVlZjk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5MCBAQAorRnJvbSAxNjAzOTdlZjNjMzMzMTA5OWFmMDI4ZjFiOGQzZTA4NWIwN2Q4OGFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8zNV0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gICAgIHwgICAgMiArLQorIGdjYy9jb21tb24ub3B0ICAgICAgfCAgICA0ICsrKysKKyBnY2MvY29uZmlnLmluICAgICAgIHwgICAgNiArKysrKysKKyBnY2MvY29uZmlndXJlICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKystLQorIGdjYy9jb25maWd1cmUuYWMgICAgfCAgIDEwICsrKysrKysrKysKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArKworIGdjYy9pbmNwYXRoLmMgICAgICAgfCAgIDE5ICsrKysrKysrKysrKysrKysrKysKKyA4IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb21tb24ub3B0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb21tb24ub3B0CisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29tbW9uLm9wdAorQEAgLTYwMyw2ICs2MDMsMTAgQEAgV3BlZGFudGljCisgQ29tbW9uIFZhcihwZWRhbnRpYykgV2FybmluZworIElzc3VlIHdhcm5pbmdzIG5lZWRlZCBmb3Igc3RyaWN0IGNvbXBsaWFuY2UgdG8gdGhlIHN0YW5kYXJkCisgCisrV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytDb21tb24gVmFyKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykgSW5pdCgxKSBXYXJuaW5nCisrV2FybiBmb3IgLUkgYW5kIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIGlmIGNyb3NzIGNvbXBpbGluZworKworIFdzaGFkb3cKKyBDb21tb24gVmFyKHdhcm5fc2hhZG93KSBXYXJuaW5nCisgV2FybiB3aGVuIG9uZSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy5pbgorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy5pbgorQEAgLTEzOCw2ICsxMzgsMTIgQEAKKyAjZW5kaWYKKyAKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzICovCisrI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysjZW5kaWYKKysKKysKKyAvKiBEZWZpbmUgaWYgeW91IHdhbnQgYWxsIG9wZXJhdGlvbnMgb24gUlRMICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCisgICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlndXJlCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlCitAQCAtOTI4LDYgKzkyOCw3IEBAIHdpdGhfc3lzdGVtX3psaWIKKyBlbmFibGVfbWFpbnRhaW5lcl9tb2RlCisgZW5hYmxlX2xpbmtfbXV0ZXgKKyBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9wbHVnaW4KKyBlbmFibGVfaG9zdF9zaGFyZWQKKyBlbmFibGVfbGlicXVhZG1hdGhfc3VwcG9ydAorQEAgLTE2NDgsNiArMTY0OSw4IEBAIE9wdGlvbmFsIEZlYXR1cmVzOgorICAgLS1lbmFibGUtdmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeQorKyAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzCisgICAtLWVuYWJsZS1wbHVnaW4gICAgICAgICBlbmFibGUgcGx1Z2luIHN1cHBvcnQKKyAgIC0tZW5hYmxlLWhvc3Qtc2hhcmVkICAgIGJ1aWxkIGhvc3QgY29kZSBhcyBzaGFyZWQgbGlicmFyaWVzCisgICAtLWRpc2FibGUtbGlicXVhZG1hdGgtc3VwcG9ydAorQEAgLTI3NzAyLDYgKzI3NzA1LDE5IEBAIGlmIHRlc3QgIiR7ZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGkKKyBmaQorIAorIAorKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzK3NldH0iID0gc2V0OyB0aGVuIDoKKysgIGVuYWJsZXZhbD0kZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrZWxzZQorKyAgZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm8KKytmaQorKworK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysKKyskYXNfZWNobyAiI2RlZmluZSBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyAxIiA+PmNvbmZkZWZzLmgKKysKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIAorIAorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlndXJlLmFjCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlndXJlLmFjCitAQCAtNTM2Niw2ICs1MzY2LDE2IEBAIEFDX0FSR19FTkFCTEUodmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWwKKyAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICAgICAgWzFdLAorKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgQUNfU1VCU1Qoc3ViZGlycykKKyBBQ19TVUJTVChzcmNkaXIpCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0yNjAsNiArMjYwLDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1Xb3Zlcmxlbmd0aC1zdHJpbmdzICAtV3BhY2tlZCAgLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0ICAtV3BhZGRlZCBAZ29sCisgLVdwYXJlbnRoZXNlcyAgLVdwZWRhbnRpYy1tcy1mb3JtYXQgLVduby1wZWRhbnRpYy1tcy1mb3JtYXQgQGdvbAorIC1XcG9pbnRlci1hcml0aCAgLVduby1wb2ludGVyLXRvLWludC1jYXN0IEBnb2wKKystV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgQGdvbAorIC1XcmVkdW5kYW50LWRlY2xzICAtV25vLXJldHVybi1sb2NhbC1hZGRyIEBnb2wKKyAtV3JldHVybi10eXBlICAtV3NlcXVlbmNlLXBvaW50ICAtV3NoYWRvdyBAZ29sCisgLVdzaWduLWNvbXBhcmUgIC1Xc2lnbi1jb252ZXJzaW9uIC1XZmxvYXQtY29udmVyc2lvbiBAZ29sCitAQCAtNDIzMCw2ICs0MjMxLDE0IEBAIGhlYWRlcnMtLS1mb3IgdGhhdCwgQG9wdGlvbnstV3Vua25vd24tcHIKKyAgZm9yIG1vc3QgdGFyZ2V0cywgaXQgaXMgbWFkZSB1cCBvZiBjb2RlIGFuZCB0aHVzIHJlcXVpcmVzIHRoZSBzdGFjaworICB0byBiZSBtYWRlIGV4ZWN1dGFibGUgaW4gb3JkZXIgZm9yIHRoZSBwcm9ncmFtIHRvIHdvcmsgcHJvcGVybHkuCisgCisrQGl0ZW0gLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQG9waW5kZXggV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstSX0gb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0KKytkaXJlY3RvcmllcyBzdWNoIGFzIEBmaWxley91c3IvaW5jbHVkZX0gd2hlbiBjcm9zcyBjb21waWxpbmcuICBUaGlzCisrb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2gKKytkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0IGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgdGhlIHRhcmdldAorK3N5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KKysKKyBAaXRlbSAtV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV25vLWZsb2F0LWVxdWFsCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZ2NjLmMKK0BAIC03NjQsNiArNzY0LDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZgorICAgICIle2Z1c2UtbGQ9KjotZnVzZS1sZD0lKn1cCisgICAgICVYICV7byp9ICV7ZSp9ICV7Tn0gJXtufSAle3J9XAorICAgICAle3N9ICV7dH0gJXt1Kn0gJXt6fSAle1p9ICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolU319ICIgVlRBQkxFX1ZFUklGSUNBVElPTl9TUEVDICIgXAorKyAgICAle1duby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisrICAgICV7V2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKyAgICAgJXtzdGF0aWM6fSAle0wqfSAlKG1md3JhcCkgJShsaW5rX2xpYmdjYykgIiBTQU5JVElaRVJfRUFSTFlfU1BFQyAiICVvXAorICAgICAle2ZvcGVubXB8ZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9KjolOmluY2x1ZGUobGliZ29tcC5zcGVjKSUobGlua19nb21wKX1cCisgICAgICV7ZmdudS10bTolOmluY2x1ZGUobGliaXRtLnNwZWMpJShsaW5rX2l0bSl9XAorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2luY3BhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvaW5jcGF0aC5jCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvaW5jcGF0aC5jCitAQCAtMjgsNiArMjgsNyBAQAorICNpbmNsdWRlICJpbnRsLmgiCisgI2luY2x1ZGUgImluY3BhdGguaCIKKyAjaW5jbHVkZSAiY3BwZGVmYXVsdC5oIgorKyNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKKyAKKyAvKiBNaWNyb3NvZnQgV2luZG93cyBkb2VzIG5vdCBuYXRpdmVseSBzdXBwb3J0IGlub2Rlcy4KKyAgICBWTVMgaGFzIG5vbi1udW1lcmljIGlub2Rlcy4gICovCitAQCAtMzgyLDYgKzM4MywyNCBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vCisgCX0KKyAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKKyAgICAgfQorKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgeworKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKKysKKysgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKKysgICAgICAgICB7CisrICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKysgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKysgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKKysgICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZTk5YzljOTcyNjZkNmQzZThjYWM3OThhYTkxNDA4MjUwYzRkNjBjZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjAwOjM0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMzVdIGdjYy1wb2lzb24tZGlyLWV4dGVuZAorCitBZGQgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKK3plY2tlLW5vLWhvc3QtaW5jbHVkZXMucGF0Y2ggcGF0Y2guICBUaGUgb3JpZ2luYWwgcGF0Y2ggY2hlY2tlZCBmb3IKKy91c3IvaW5jbHVkZSwgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBhbmQgdGhlbiB0cmlnZ2VyZWQgYSBmYWlsdXJlIGFuZAorYWJvcnRlZC4KKworSW5zdGVhZCwgd2UgYWRkIHRoZSB0d28gbWlzc2luZyBpdGVtcyB0byB0aGUgY3VycmVudCBzY2FuLiAgSWYgdGhlIHVzZXIKK3dhbnRzIHRoaXMgdG8gYmUgYSBmYWlsdXJlLCB0aGV5IGNhbiBhZGQgIi1XZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2luY3BhdGguYyB8ICAgIDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCitpbmRleCBjZDQxYzc4Li5lYWM0YTkyIDEwMDY0NAorLS0tIGEvZ2NjL2luY3BhdGguYworKysrIGIvZ2NjL2luY3BhdGguYworQEAgLTM5Myw3ICszOTMsOSBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKyAgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKy0gICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvc3cvaW5jbHVkZSIsIDExKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9vcHQvaW5jbHVkZSIsIDEyKSkpCisgICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIDU2MjA3ZmEyOTIzZThlZGY3NzRlOThmZmFjODI2NjYwOTEwNzZiZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowODozMSArMDQwMAorU3ViamVjdDogW1BBVENIIDE4LzM1XSBnY2MtNC4zLjM6IFNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQKKworQmVmb3JlIGNvbW1pdHRpbmcsIEkgbm90aWNlZCB0aGF0IFBSLzMyMTYxIHdhcyBtYXJrZWQgYXMgYSBkdXAgb2YgUFIvMzIwMDksIGJ1dCBteSBwcmV2aW91cyBwYXRjaCBkaWQgbm90IGZpeCBpdC4KKworVGhpcyBhbHRlcm5hdGl2ZSBwYXRjaCBpcyBiZXR0ZXIgYmVjYXVzZSBpdCBsZXRzIHlvdSBqdXN0IHVzZSBDRkxBR1NfRk9SX1RBUkdFVCB0byBzZXQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGZvciBsaWJnY2MuIFNpbmNlIGJvb3RzdHJhcHBlZCB0YXJnZXQgbGlicmFyaWVzIGFyZSBuZXZlciBjb21waWxlZCB3aXRoIHRoZSBuYXRpdmUgY29tcGlsZXIsIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgZGlmZmVyZW50IGZsYWdzIGZvciBzdGFnZTEgYW5kIGxhdGVyIHN0YWdlcy4gQW5kIGl0IGFsc28gbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZSB0aGFuIENGTEFHU19GT1JfVEFSR0VULgorCitPdGhlciBjaGFuZ2VzIEkgaGFkIHRvIGRvIGluY2x1ZGU6CisKKy0gbW92aW5nIHRoZSBjcmVhdGlvbiBvZiBkZWZhdWx0IENGTEFHU19GT1JfVEFSR0VUIGZyb20gTWFrZWZpbGUuYW0gdG8gY29uZmlndXJlLmFjLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgQk9PVF9DRkxBR1MgYXJlIHN1YnN0aXR1dGVkIGludG8gQ0ZMQUdTX0ZPUl9UQVJHRVQgKHdoaWNoIGlzICItTzIgLWcgJChDRkxBR1MpIikgdmlhICQoQ0ZMQUdTKS4gSXQgaXMgYWxzbyBjbGVhbmVyIHRoaXMgd2F5IHRob3VnaC4KKworLSBwYXNzaW5nIHRoZSByaWdodCBDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgYXMgZXhwb3J0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKK0kgYWxzbyBzdG9wcGVkIHBhc3NpbmcgTElCQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIHNpbmNlIHRoZXkgYXJlIHVudXNlZCBpbiB0aGUgd2hvbGUgc3JjIHRyZWUuIEFuZCBJIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gYXMgSC1QIHJlbWluZGVkIG1lIHRvIGRvLgorCitCb290c3RyYXBwZWQvcmVndGVzdGVkIGk2ODYtcGMtbGludXgtZ251LCB3aWxsIGNvbW1pdCB0byA0LjQgc2hvcnRseS4gT2sgZm9yIDQuMz8KKworU2lnbmVkLW9mZi1ieTogUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDFiNzZjOTAuLmU0ZGNlN2MgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY3NzIsNiArNjc3MiwzOCBAQCBmaQorIAorIAorIAorKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCisrIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKKysjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgorKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCisrIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCisrIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KKytpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisgIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCisgIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KKyBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4YmUwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw4MiBAQAorRnJvbSAxOGZkZTU3NDBiMDkzMjRkZmI5Y2Y0MWU5ODQ5NjcyNTczZmY1ZmEwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTA6MDYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8zNV0gNjQtYml0IG11bHRpbGliIGhhY2suCisKK0dDQyBoYXMgaW50ZXJuYWwgbXVsdGlsaWIgaGFuZGxpbmcgY29kZSBidXQgaXQgYXNzdW1lcyBhIHZlcnkgc3BlY2lmaWMgcmlnaWQgZGlyZWN0b3J5CitsYXlvdXQuIFRoZSBidWlsZCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlsaWIgbGF5b3V0IGlzIHZlcnkgZ2VuZXJpYyBhbmQgYWxsb3dzCitjb21wbGV0ZSBjdXN0b21pc2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorCitUaGlzIHBhdGNoIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byBhbGxvdyBhbnkgY3VzdG9tIGRpcmVjdG9yaWVzIHRvIGJlIHBhc3NlZCBpbnRvIGdjYworYW5kIGhhbmRsZWQgY29ycmVjdGx5LiBJdCBmb3JjZXMgZ2NjIHRvIHVzZSB0aGUgYmFzZV9saWJkaXIgKHdoaWNoIGlzIHRoZSBjdXJyZW50CitkaXJlY3RvcnksICIuIikuIFdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgZWFjaCBtdWx0aWxpYiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgd2UgZG9uJ3QKK2tub3cgd2hpY2ggY29tcGlsZXIgb3B0aW9ucyBtYXkgYmUgYmVpbmcgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLiBTaW5jZSB3ZSBoYXZlIGEgY29tcGlsZXIKK3BlciBtdWxpdGxpYiBhdCB0aGlzIHBvaW50IHRoYXQgaXNuJ3QgYW4gaXNzdWUuCisKK1RoZSBvbmUgcHJvYmxlbSBpcyB0aGUgdGFyZ2V0IGNvbXBpbGVyIGlzIG9ubHkgZ29pbmcgdG8gd29yayBmb3IgdGhlIGRlZmF1bHQgbXVsdGxpbGliIGF0Cit0aGlzIHBvaW50LiBJZGVhbGx5IHdlJ2QgZmlndXJlIG91dCB3aGljaCBtdWx0aWxpYnMgd2VyZSBiZWluZyBlbmFibGVkIHdpdGggd2hpY2ggcGF0aHMKK2FuZCBiZSBhYmxlIHRvIHBhdGNoIHRoZXNlIGVudHJpZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBjb3JyZWN0IHBhdGhzIGJ1dCB0aGlzIHdlCitkb24ndCBoYXZlIHN1Y2ggY29kZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGUgdGFyZ2V0IGdjYyByZWNpcGUgc2hvdWxkIGRvCithbmQgb3ZlcnJpZGUgdGhlc2UgcGxhdGZvcm0gZGVmYXVsdHMgaW4gaXRzIGJ1aWxkIGNvbmZpZy4KKworUlAgMTUvOC8xMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRWx2aXMgRG93c29uIDxlbHZpcy5kb3dzb25AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgICB8ICAgIDYgKystLS0tCisgZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCAgIHwgICAxMCArKystLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IHwgICAgNSArKy0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitAQCAtMzIsNyArMzIsNSBAQAorICMKKyBjb21tYT0sCisgTVVMVElMSUJfT1BUSU9OUyAgICA9ICQoc3Vic3QgJChjb21tYSksLywkKFRNX01VTFRJTElCX0NPTkZJRykpCistTVVMVElMSUJfRElSTkFNRVMgICA9ICQocGF0c3Vic3QgbSUsICUsICQoc3Vic3QgLywgLCQoTVVMVElMSUJfT1BUSU9OUykpKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6aTM4Ni1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG14MzI9Li4vbGlieDMyJChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudXgzMikKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CitAQCAtMTcsMTAgKzE3LDYgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyBNVUxUSUxJQl9PUFRJT05TID0gbWFiaT1uMzIvbWFiaT0zMi9tYWJpPTY0CistTVVMVElMSUJfRElSTkFNRVMgPSBuMzIgMzIgNjQKKy1NSVBTX0VMID0gJChpZiAkKGZpbHRlciAlZWwsICQoZmlyc3R3b3JkICQoc3Vic3QgLSwgLCQodGFyZ2V0KSkpKSxlbCkKKy1NSVBTX1NPRlQgPSAkKGlmICQoc3RyaXAgJChmaWx0ZXIgTUFTS19TT0ZUX0ZMT0FUX0FCSSwgJCh0YXJnZXRfY3B1X2RlZmF1bHQpKSAkKGZpbHRlciBzb2Z0LCAkKHdpdGhfZmxvYXQpKSksc29mdCkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gXAorLQkuLi9saWIzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpbjMyJChNSVBTX1NPRlQpKSBcCistCS4uL2xpYiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHMkKE1JUFNfRUwpLWxpbnV4LWdudSQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpNjQkKE1JUFNfU09GVCkpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorKworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitAQCAtMjYsMTAgKzI2LDkgQEAKKyAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KKyAKKyBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKKy1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCisrTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KKyBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAorLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKKytNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisgCisgcnM2MDAwLWxpbnV4Lm86ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL3JzNjAwMC1saW51eC5jCisgCSQoQ09NUElMRSkgJDwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjQ2NjE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gMzA3YzhmZjNlZjY2NmI3YmQ1YWM3MzM4NjNmMmZiYjI3YTlkNTIxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEyOjU2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMzVdIG9wdGlvbmFsIGxpYnN0ZGMKKworZ2NjLXJ1bnRpbWUgYnVpbGRzIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5IGZyb20gZ2NjLWNyb3NzLSouIEl0cyBjb25maWd1cmUgdGVzdHMgdXNpbmcgZysrCit3aWxsIG5vdCBydW4gY29ycmVjdGx5IHNpbmNlIGJ5IGRlZmF1bHQgdGhlIGxpbmtlciB3aWxsIHRyeSB0byBsaW5rIGFnYWluc3QgbGlic3RkYysrCit3aGljaCBzaG91bGRuJ3QgZXhpc3QgeWV0LiBXZSBuZWVkIGFuIG9wdGlvbiB0byBkaXNhYmxlIC1sc3RkYysrCitvcHRpb24gd2hpbHN0IGxlYXZpbmcgLWxjLCAtbGdjYyBhbmQgb3RoZXIgYXV0b21hdGljIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGFkZGVkIGJ5IGdjYworZHJpdmVyLiBUaGlzIHBhdGNoIGFkZHMgc3VjaCBhbiBvcHRpb24gd2hpY2ggb25seSBkaXNhYmxlcyB0aGUgLWxzdGRjKysuCisKK0EgInN0YW5kYXJkIiBnY2MgYnVpbGQgdXNlcyB4Z2NjIGFuZCBoZW5jZSBhdm9pZHMgdGhpcy4gV2Ugc2hvdWxkIGFzayB1cHN0cmVhbSBob3cgdG8KK2RvIHRoaXMgb2ZmaWNpYWxseSwgdGhlIGxpa2VseSBhbnN3ZXIgaXMgZG9uJ3QgYnVpbGQgbGlic3RkYysrIHNlcGFyYXRlbHkuCisKK1JQIDI5LzYvMTAKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGdjYy9jLWZhbWlseS9jLm9wdCAgfCAgICA0ICsrKysKKyBnY2MvY3AvZysrc3BlYy5jICAgIHwgICAgMSArCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKy0tCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDEgKworIDQgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2MtZmFtaWx5L2Mub3B0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jLWZhbWlseS9jLm9wdAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2MtZmFtaWx5L2Mub3B0CitAQCAtMTMyMyw2ICsxMzIzLDEwIEBAIG5vc3RkaW5jKysKKyBDKysgT2JqQysrCisgRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrCisgCisrbm9zdGRsaWIrKworK0RyaXZlcgorK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKKysKKyBvCisgQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCisgOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jcC9nKytzcGVjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NwL2crK3NwZWMuYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NwL2crK3NwZWMuYworQEAgLTEzOCw2ICsxMzgsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfCisgICAgICAgc3dpdGNoIChkZWNvZGVkX29wdGlvbnNbaV0ub3B0X2luZGV4KQorIAl7CisgCWNhc2UgT1BUX25vc3RkbGliOgorKwljYXNlIE9QVF9ub3N0ZGxpYl9fOgorIAljYXNlIE9QVF9ub2RlZmF1bHRsaWJzOgorIAkgIGxpYnJhcnkgPSAtMTsKKyAJICBicmVhazsKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTE5Myw2ICsxOTMsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisgLWZ2dGFibGUtdmVyaWZ5PUB2YXJ7c3RkfHByZWluaXR8bm9uZX0gQGdvbAorIC1mdnR2LWNvdW50cyAtZnZ0di1kZWJ1ZyBAZ29sCisrLW5vc3RkbGliKysgQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAorIC1XYWJpICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCitAQCAtNDU3LDcgKzQ1OCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtbm9zdGFydGZpbGVzICAtbm9kZWZhdWx0bGlicyAgLW5vc3RkbGliIC1waWUgLXJkeW5hbWljIEBnb2wKKyAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCisgLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiAtc3RhdGljLWxpYmxzYW4gLXN0YXRpYy1saWJ1YnNhbiBAZ29sCistLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKKystc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAorIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKKyAtdSBAdmFye3N5bWJvbH19CisgCitAQCAtMTAyODUsNiArMTAyODYsMTEgQEAgVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbgorIGxpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgorIG1lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAKKytAaXRlbSAtbm9zdGRsaWIrKworK0BvcGluZGV4IG5vc3RkbGliKysKKytEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KKytPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KKysKKyBAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KKyBAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisgQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9nY2MuYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCitAQCAtNzcyLDYgKzc3Miw3IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKKyAgICAgJShtZmxpYikgIiBTVEFDS19TUExJVF9TUEVDICJcCisgICAgICV7ZnByb2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292fSAiIFNBTklUSVpFUl9TUEVDICIgXAorICAgICAleyFub3N0ZGxpYjoleyFub2RlZmF1bHRsaWJzOiUobGlua19zc3ApICUobGlua19nY2NfY19zZXF1ZW5jZSl9fVwKKysgICAgJXshbm9zdGRsaWIrKzp9XAorICAgICAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JUV9fSAle1QqfSB9fX19fX0iCisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2M2MWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDAwNDY5NmUwNTRhZTlkYzcxZDUxMmNjNzU1Y2NjNDA3NGZjNjJiMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNDoyMCArMDQwMAorU3ViamVjdDogW1BBVENIIDIxLzM1XSBnY2M6IGRpc2FibGUgTUFTS19SRUxBWF9QSUNfQ0FMTFMgYml0CisKK1RoZSBuZXcgZmVhdHVyZSBhZGRlZCBhZnRlciA0LjMuMworImh0dHA6Ly93d3cucHViYnMubmV0LzIwMDkwOS9nY2MvOTQwNDgtcGF0Y2gtYWRkLXN1cHBvcnQtZm9yLXJtaXBzamFsci5odG1sIgord2lsbCBjYXVzZSBjYzFwbHVzIGVhdCB1cCBhbGwgdGhlIHN5c3RlbSBtZW1vcnkgd2hlbiBidWlsZCB3ZWJraXQtZ3RrLgorVGhlIGZ1bmN0aW9uIG1pcHNfZ2V0X3BpY19jYWxsX3N5bWJvbCBrZWVwcyBvbiByZWN1cnNpdmVseSBjYWxsaW5nIGl0c2VsZi4KK0Rpc2FibGUgdGhpcyBmZWF0dXJlIHRvIHdhbGsgYXNpZGUgdGhlIGJ1Zy4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgICA3IC0tLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgICAgNyAtLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBiNjVkMjFkLi5iZGFiNDVhIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI1ODI5LDEzICsyNTgyOSw2IEBAICRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciBhbmQgbGlua2VyIGZvciBleHBsaWNpdCBKQUxSIHJlbG9jYXRpb24uLi4gIiA+JjY7CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY1CisgJGFzX2VjaG8gIiRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGUyMjZiODUuLjVmNWM5MDkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNDA5OSwxMyArNDA5OSw2IEBAIHg6CisgICAgICAgICBybSAtZiBjb25mdGVzdC4qCisgICAgICAgZmkKKyAgICAgZmkKKy0gICAgaWYgdGVzdCAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MgPSB5ZXM7IHRoZW4KKy0gICAgICBpZiB0ZXN0IHgkdGFyZ2V0X2NwdV9kZWZhdWx0ID0geDsgdGhlbgorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfUkVMQVhfUElDX0NBTExTCistICAgICAgZWxzZQorLSAgICAgICAgdGFyZ2V0X2NwdV9kZWZhdWx0PSIoJHRhcmdldF9jcHVfZGVmYXVsdCl8TUFTS19SRUxBWF9QSUNfQ0FMTFMiCistICAgICAgZmkKKy0gICAgZmkKKyAgICAgQUNfTVNHX1JFU1VMVCgkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MpCisgCisgICAgIEFDX0NBQ0hFX0NIRUNLKFtsaW5rZXIgZm9yIC5laF9mcmFtZSBwZXJzb25hbGl0eSByZWxheGF0aW9uXSwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhhYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA3ZjVjOWRjYzcxYzhiODNhMGI1NTk2MjY2Y2M0YmRmMDkzNmU4ZTAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTY6MjggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMi8zNV0gQ09MTEVDVF9HQ0NfT1BUSU9OUworCitUaGlzIHBhdGNoIGFkZHMgLS1zeXNyb290IGludG8gQ09MTEVDVF9HQ0NfT1BUSU9OUyB3aGljaCBpcyB1c2VkIHRvCitpbnZva2UgY29sbGVjdDIuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2djYy5jIHwgICAgOSArKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDQ3Nzc1MmYuLjUxMDYyYWEgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTQwOTgsNiArNDA5OCwxNSBAQCBzZXRfY29sbGVjdF9nY2Nfb3B0aW9ucyAodm9pZCkKKyAJCXNpemVvZiAoIkNPTExFQ1RfR0NDX09QVElPTlM9IikgLSAxKTsKKyAKKyAgIGZpcnN0X3RpbWUgPSBUUlVFOworKyNpZmRlZiBIQVZFX0xEX1NZU1JPT1QKKysgIGlmICh0YXJnZXRfc3lzdGVtX3Jvb3RfY2hhbmdlZCAmJiB0YXJnZXRfc3lzdGVtX3Jvb3QpCisrICAgIHsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInLS1zeXNyb290PSIsIHNpemVvZigiJy0tc3lzcm9vdD0iKS0xKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssIHRhcmdldF9zeXN0ZW1fcm9vdCxzdHJsZW4odGFyZ2V0X3N5c3RlbV9yb290KSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJyIsIDEpOworKyAgICAgIGZpcnN0X3RpbWUgPSBGQUxTRTsKKysgICAgfQorKyNlbmRpZgorICAgZm9yIChpID0gMDsgKGludCkgaSA8IG5fc3dpdGNoZXM7IGkrKykKKyAgICAgeworICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0ICphcmdzOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZTllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIGY3ZDQ5Y2E0NDVlNjBmYWExYjUyNTZjNmI0Zjk2YzFlZTVjMGUzNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNzoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDIzLzM1XSBVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lCisgaW4gJHtCfQorCitVc2UgdGhlIGRlZmF1bHRzLmggaW4gJHtCfSBpbnN0ZWFkIG9mICR7U30sIGFuZCB0LW9lIGluICR7Qn0sIHNvIHRoYXQKK3RoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1doaWxlIGNvbXBpbGluZyBnY2MtY3Jvc3NzZGstaW5pdGlhbC14ODZfNjQgb24gc29tZSBob3N0LCB0aGVyZSBpcworb2NjYXNpb25hbGx5IGZhaWx1cmUgdGhhdCB0ZXN0IHRoZSBleGlzdGFuY2Ugb2YgZGVmYXVsdC5oIGRvZXNuJ3QKK3dvcmssIHRoZSByZWFzb24gaXMgdG1faW5jbHVkZV9saXN0PScqKiBkZWZhdWx0cy5oJyByYXRoZXIgdGhhbgordG1faW5jbHVkZV9saXN0PScqKiAuL2RlZmF1bHRzLmgnCisKK1NvIHdlIGFkZCB0aGUgdGVzdCBjb25kaXRpb24gZm9yIHRoaXMgc2l0dWF0aW9uLgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2NjL01ha2VmaWxlLmluICB8ICAgIDIgKy0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDQgKystLQorIGdjYy9ta2NvbmZpZy5zaCAgfCAgICA0ICsrLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggZDFhYjIyZi4uMTVmZTRiNiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDgzLDcgKzQ4Myw3IEBAIFRBUkdFVF9TWVNURU1fUk9PVCA9IEBUQVJHRVRfU1lTVEVNX1JPT1RACisgVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORSA9IEBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FQAorIAorIHhtYWtlX2ZpbGU9QHhtYWtlX2ZpbGVACistdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAKKyt0bWFrZV9maWxlPUB0bWFrZV9maWxlQCAuL3Qtb2UKKyBUTV9FTkRJQU5fQ09ORklHPUBUTV9FTkRJQU5fQ09ORklHQAorIFRNX01VTFRJTElCX0NPTkZJRz1AVE1fTVVMVElMSUJfQ09ORklHQAorIFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHPUBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJR0AKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggNTM5OWIyYi4uNjBhMDRiZCAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTYzMSw4ICsxMTYzMSw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGY4N2MzYjYuLjQ2MGUwZDkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTc0MCw4ICsxNzQwLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvbWtjb25maWcuc2ggYi9nY2MvbWtjb25maWcuc2gKK2luZGV4IGM3MTQ2ZWQuLmIxNTNmNDUgMTAwNjQ0CistLS0gYS9nY2MvbWtjb25maWcuc2gKKysrKyBiL2djYy9ta2NvbmZpZy5zaAorQEAgLTc3LDcgKzc3LDcgQEAgaWYgWyAtbiAiJEhFQURFUlMiIF07IHRoZW4KKyAgICAgaWYgWyAkIyAtZ2UgMSBdOyB0aGVuCisgCWVjaG8gJyNpZmRlZiBJTl9HQ0MnID4+ICR7b3V0cHV0fVQKKyAJZm9yIGZpbGUgaW4gIiRAIjsgZG8KKy0JICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisrCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCIuL2RlZmF1bHRzLmgiIC1vIHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorIAkJcG9zdHBvbmVfZGVmYXVsdHNfaD0ieWVzIgorIAkgICAgZWxzZQorIAkJZWNobyAiIyBpbmNsdWRlIFwiJGZpbGVcIiIgPj4gJHtvdXRwdXR9VAorQEAgLTEwNiw3ICsxMDYsNyBAQCBlc2FjCisgCisgIyBJZiB3ZSBwb3N0cG9uZWQgaW5jbHVkaW5nIGRlZmF1bHRzLmgsIGFkZCB0aGUgI2luY2x1ZGUgbm93LgorIGlmIHRlc3QgeCIkcG9zdHBvbmVfZGVmYXVsdHNfaCIgPSB4InllcyI7IHRoZW4KKy0gICAgZWNobyAiIyBpbmNsdWRlIFwiZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisrICAgIGVjaG8gIiMgaW5jbHVkZSBcIi4vZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisgZmkKKyAKKyAjIEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbiBndWFyZCwgcGFydCB0d28uCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhY2Y3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZTBkMTVmNGY4YmYyOGMzNTFiOTIxNWNhMzdmMWNhYTI0ZGYwZTFmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE4OjU0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMzVdIFBSIHRhcmdldC8zMjIxOQorCisqIHZhcmFzbS5jIChkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSk6IFdlYWsgZGF0YSBpcyBub3QgbG9jYWwuCisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jIHwgICAxNCArKysrKysrKysrKysrKworIGdjYy92YXJhc20uYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKysrKy0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKKworSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL3ZhcmFzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy92YXJhc20uYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL3ZhcmFzbS5jCitAQCAtNjc3MSw2ICs2NzcxLDEwIEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwKKyAgIC8qIFN0YXRpYyB2YXJpYWJsZXMgYXJlIGFsd2F5cyBsb2NhbC4gICovCisgICBlbHNlIGlmICghIFRSRUVfUFVCTElDIChleHApKQorICAgICBsb2NhbF9wID0gdHJ1ZTsKKysgIC8qIGhpZGRlbiB3ZWFrIGNhbid0IGJlIG92ZXJyaWRkZW4gYnkgc29tZXRoaW5nIG5vbi1sb2NhbCwgYWxsCisrICAgICB0aGF0IGlzIHBvc3NpYmxlIGlzIHRoYXQgaXQgaXMgbm90IGRlZmluZWQgYXQgYWxsLiAqLworKyAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApKQorKyAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBBIHZhcmlhYmxlIGlzIGxvY2FsIGlmIHRoZSB1c2VyIGhhcyBzYWlkIGV4cGxpY2l0bHkgdGhhdCBpdCB3aWxsCisgICAgICBiZS4gICovCisgICBlbHNlIGlmICgoREVDTF9WSVNJQklMSVRZX1NQRUNJRklFRCAoZXhwKQorQEAgLTY3ODQsMTEgKzY3ODgsNiBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsCisgICAgICBsb2NhbC4gICovCisgICBlbHNlIGlmIChERUNMX1ZJU0lCSUxJVFkgKGV4cCkgIT0gVklTSUJJTElUWV9ERUZBVUxUKQorICAgICBsb2NhbF9wID0gdHJ1ZTsKKy0gIC8qIERlZmF1bHQgdmlzaWJpbGl0eSB3ZWFrIGRhdGEgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBzdHJvbmcgc3ltYm9sCistICAgICBpbiBhbm90aGVyIG1vZHVsZSBhbmQgc28gYXJlIG5vdCBsb2NhbC4gICovCistICBlbHNlIGlmIChERUNMX1dFQUsgKGV4cCkKKy0JICAgJiYgIXJlc29sdmVkX2xvY2FsbHkpCistICAgIGxvY2FsX3AgPSBmYWxzZTsKKyAgIC8qIElmIFBJQywgdGhlbiBhc3N1bWUgdGhhdCBhbnkgZ2xvYmFsIG5hbWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKyAgICAgIHN5bWJvbHMgcmVzb2x2ZWQgZnJvbSBvdGhlciBtb2R1bGVzLiAgKi8KKyAgIGVsc2UgaWYgKHNobGliKQorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIyLmMKK0BAIC0wLDAgKzEsMTMgQEAKKysvKiBQUiB0YXJnZXQvMzIyMTkgKi8KKysvKiB7IGRnLWRvIHJ1biB9ICovCisrLyogeyBkZy1yZXF1aXJlLXZpc2liaWxpdHkgIiIgfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLWZQSUMiIHsgdGFyZ2V0IGZwaWMgfSB9ICovCisrCisrZXh0ZXJuIHZvaWQgZigpIF9fYXR0cmlidXRlX18oKHdlYWssdmlzaWJpbGl0eSgiaGlkZGVuIikpKTsKKytleHRlcm4gaW50IHB1dHMoIGNoYXIgY29uc3QqICk7CisraW50IG1haW4oKQorK3sKKysgIGlmIChmKQorKyAgICBmKCk7CisrICByZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI1LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGFmOGE1NmVhNGUxN2IyOTA5ZWZmMmM1NzcwNGFiNDNlZjI0ZjI4ZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAorU3ViamVjdDogW1BBVENIIDI1LzM1XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KKworKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKK3VzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKK2RpcmVjdG9yeS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK2luZGV4IDgzODVlOTYuLmI4ZjdhOTIgMTAwNzU1CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTEyNzA0LDcgKzEyNzA0LDcgQEAgZXNhYworIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBhY19leHQ9JHthY19mY19zcmNleHQtZn0KKyBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworaW5kZXggN2Q5N2ZlZC4uM2Y5ZjQ4NCAxMDA2NDQKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitAQCAtMjI3LDcgKzIyNyw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCisgCisgIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNi1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorRnJvbSAwOGMyMzk4NDQ1ZTZjYWMyODI0ODhmNjRhZTZiZjI5Y2JjZDhkYjIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNi8zNV0gbGliZ2NjLXNqbGotY2hlY2sKKworYWNfZm5fY190cnlfY29tcGlsZSBkb2VzbnQgc2VlbSB0byBrZWVwIHRoZSBpbnRlcm1lZGlhdGUgZmlsZXMKK3doaWNoIGFyZSBuZWVkZWQgZm9yIHNqbGogdGVzdCB0byBwYXNzIHNpbmNlIGl0IGdyZXBzIGludG8gdGhlCitnZW5lcmF0ZWQgZmlsZS4gU28gd2UgcnVuIHRoZSBjb21waWxlciBjb21tYW5kIHVzaW5nIEFDX1RSWV9DT01NQU5ECit3aGljaCB0aGVuIGdlbmVyYXRlcyB0aGUgbmVlZGVkIC5zIGZpbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJnY2MvY29uZmlndXJlICAgIHwgICAxMCArKysrKystLS0tCisgbGliZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgMTAgKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlIGIvbGliZ2NjL2NvbmZpZ3VyZQoraW5kZXggMTQyNWRmNi4uZDE4ZTNjYiAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUKKysrKyBiL2xpYmdjYy9jb25maWd1cmUKK0BAIC00MjA4LDE3ICs0MjA4LDE5IEBAIHZvaWQgZm9vICgpCisgfQorIAorIF9BQ0VPRgorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGU7IHRoZW4gOgorK2lmIHsgYWNfdHJ5PScke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCisrICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworICAgZmkKKyBmaQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKyBybSAtZiBjb25mdGVzdCoKKyAKKyBmaQorZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUuYWMgYi9saWJnY2MvY29uZmlndXJlLmFjCitpbmRleCA4YjdhYmE1Li5jN2M5NjQ0IDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTIxNiwxNiArMjE2LDE0IEBAIHZvaWQgZm9vICgpCisgICBiYXIoKTsKKyB9CisgXSldKQorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLUFTX0lGKFthY19mbl9jX3RyeV9jb21waWxlXSwKKy0gIFtpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBBQ19UUllfQ09NTUFORCgke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JkFTX01FU1NBR0VfTE9HX0ZEKTsgdGhlbgorKyAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCistICBmaV0pCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorKyAgZmkKKytmaQorIHJtIC1mIGNvbmZ0ZXN0KgorIF0pCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjctY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYTBmOWJkMDljODE2YWQyOWVjZjdjMjlkNmMyN2Y3ZGY5NzcxMDM2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIyOjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjcvMzVdIGNwcDogaG9ub3Igc3lzcm9vdC4KKworQ3VycmVudGx5LCBpZiB0aGUgZ2NjIHRvb2xjaGFpbiBpcyByZWxvY2F0ZWQgYW5kIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSwgdGhlbiB5b3UgdHJ5IGFuZCBjb21waWxlCitwcmVwcm9jZXNzZWQgc291cmNlICguaSBvciAuaWkgZmlsZXMpLCB0aGUgY29tcGlsZXIgd2lsbCB0cnkgYW5kIGFjY2VzcyB0aGUgYnVpbHRpbiBzeXNyb290IGxvY2F0aW9uCityYXRoZXIgdGhhbiB0aGUgLS1zeXNyb290IG9wdGlvbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLiBJZiBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnkgaXMKK3Blcm1pc3Npb24gZGVuaWVkICh1bnJlYWRhYmxlKSwgZ2NjIHdpbGwgZXJyb3IuCisKK1RoaXMgaGFwcGVucyB3aGVuIGNjYWNoZSBpcyBpbiB1c2UgZHVlIHRvIHRoZSBmYWN0IGl0IHVzZXMgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlcy4KKworVGhlIGZpeCBiZWxvdyBhZGRzICVJIHRvIHRoZSBjcHAtb3V0cHV0IHNwZWMgbWFjcm8gc28gdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9ucyBmb3IgLWlwcmVmaXgsCistaXN5c3RlbSwgLWlzeXNyb290IGhhcHBlbiBhbmQgdGhlIGNvcnJlY3Qgc3lzcm9vdCBpcyB1c2VkLgorCitbWU9DVE8gIzIwNzRdCisKK1JQIDIwMTIvMDQvMTMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY3AvbGFuZy1zcGVjcy5oIHwgICAgMiArLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY3AvbGFuZy1zcGVjcy5oIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAoraW5kZXggYTAwMWMzZS4uMWFhZTFlNCAxMDA2NDQKKy0tLSBhL2djYy9jcC9sYW5nLXNwZWNzLmgKKysrKyBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK0BAIC02Myw1ICs2Myw1IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICB7Ii5paSIsICJAYysrLWNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGMrKy1jcHAtb3V0cHV0IiwKKyAgICAiJXshTToleyFNTToleyFFOlwKKy0gICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAlMlwKKysgICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAlMlwKKyAgICAgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDUxMDYyYWEuLmNmNmI5OWUgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEwNDIsNyArMTA0Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGlsZXIgZGVmYXVsdF9jb21waWxlcnNbXSA9CisgICAgICAgICAgICAgICAgICAgICAlV3tvKjotLW91dHB1dC1wY2g9JSp9fSVWfX19fX19IiwgMCwgMCwgMH0sCisgICB7Ii5pIiwgIkBjcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjcHAtb3V0cHV0IiwKKy0gICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorKyAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisgICB7Ii5zIiwgIkBhc3NlbWJsZXIiLCAwLCAwLCAwfSwKKyAgIHsiQGFzc2VtYmxlciIsCisgICAgIiV7IU06JXshTU06JXshRToleyFTOmFzICUoYXNtX2RlYnVnKSAlKGFzbV9vcHRpb25zKSAlaSAlQSB9fX19IiwgMCwgMCwgMH0sCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMzAxZTE4ZDQ3MTFkYjU5MjVlNzY3ZmFkMDhkZmZhOWNmZTBhMmYxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIzOjA4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjgvMzVdIE1JUFM2NDogRGVmYXVsdCB0byBONjQgQUJJCisKK01JUFM2NCBkZWZhdWx0cyB0byBuMzIgQUJJLCB0aGlzIHBhdGNoIG1ha2VzIGl0CitzbyB0aGF0IGl0IGRlZmF1bHRzIHRvIE42NCBBQkkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCistLS0KKyBnY2MvY29uZmlnLmdjYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IDFhMGJlNTAuLjk4OWMyZmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0xNzk3LDcgKzE3OTcsNyBAQCBtaXBzKi1tdGktbGludXgqKQorIG1pcHM2NCotKi1saW51eCogfCBtaXBzaXNhNjQqLSotbGludXgqKQorIAl0bV9maWxlPSJkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggbGludXguaCBnbGliYy1zdGRpbnQuaCAke3RtX2ZpbGV9IG1pcHMvZ251LXVzZXIuaCBtaXBzL2dudS11c2VyNjQuaCBtaXBzL2xpbnV4NjQuaCBtaXBzL2xpbnV4LWNvbW1vbi5oIgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IG1pcHMvdC1saW51eDY0IgorLQl0bV9kZWZpbmVzPSIke3RtX2RlZmluZXN9IE1JUFNfQUJJX0RFRkFVTFQ9QUJJX04zMiIKKysJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV82NCIKKyAJY2FzZSAke3RhcmdldH0gaW4KKyAJCW1pcHM2NGVsLXN0LWxpbnV4LWdudSkKKyAJCQl0bV9maWxlPSIke3RtX2ZpbGV9IG1pcHMvc3QuaCIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWQyOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKQEAgLTAsMCArMSwyMjggQEAKK0Zyb20gMjlkMTIzNDRmYjY4MmEwNTNkZTUzZWIwOGI5NTcwNGNmM2I2N2FmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI0OjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjkvMzVdIERlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIKKworVGhpcyBwYXRjaCBkZWZpbmVzIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKK3JlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSIHdoaWNoIGNhbiBiZSBzZXQgaW4gZ2VuZXJhdGVkIGhlYWRlcnMKK1RoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIG9mIGhhcmRjb2RlZCBtdWx0aWxpYiBpbiBnY2MKK0NoYW5nZSBpcyBvbmx5IGZvciB0aGUgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgaW4gT0UgaW5jbHVkaW5nCitTSCwgc3BhcmMsIGFscGhhIGZvciBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydCAoaWYgYW55KQorCitSZW1vdmVzIHRoZSBkb19oZWFkZXJmaXggdGFzayBpbiBtZXRhZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIHwgICAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oICB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL2kzODYvbGludXg2NC5oICAgIHwgICAgNiArKystLS0KKyBnY2MvY29uZmlnL21pcHMvbGludXguaCAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvbWlwcy9saW51eDY0LmggICAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oICB8ICAgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL3NoL2xpbnV4LmggICAgICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXguaCAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmggICB8ICAgIDQgKystLQorIDExIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0yMyw4ICsyMyw4IEBACisgI2RlZmluZSBFWFRSQV9TUEVDUyBcCisgeyAiZWxmX2R5bmFtaWNfbGlua2VyIiwgRUxGX0RZTkFNSUNfTElOS0VSIH0sCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTY4LDggKzY4LDggQEAKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIGFuZCBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkuICAqLworIAorICN1bmRlZiAgR0xJQkNfRFlOQU1JQ19MSU5LRVIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIi9saWIvbGQtbGludXguc28uMyIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgIi9saWIvbGQtbGludXgtYXJtaGYuc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hcm1oZi5zby4zIgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC01Nyw3ICs1Nyw3IEBACisgCisgI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNkZWZpbmUgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAgIiV7aCp9IFwKKyAgICAle3N0YXRpYzotQnN0YXRpY30gXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvaTM4Ni9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvaTM4Ni9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjAsNCArMjAsNCBAQAorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTiAiZWxmX2kzODYiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0yNyw2ICsyNyw2IEBACisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGZfeDg2XzY0IgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05YMzIgImVsZjMyX3g4Nl82NCIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGlieDMyL2xkLWxpbnV4LXgzMi5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbWlwcy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMTgsOCArMTgsOCBAQAorIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbWlwcy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0yMywyMCArMjMsMjAgQEAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OTjMyICJlbGYzMiV7RUI6Yn0le0VMOmx9dHNtaXBuMzIiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWI2NC9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjY0L2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKKy0gICIle21uYW49MjAwODovbGliMzIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIzMi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NAorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQ2NC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjB9IgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKKy0gICIle21uYW49MjAwODovbGliMzIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliMzIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorIAorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTM2NywxNCArMzY3LDE0IEBACisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisgI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisgI2lmZGVmIExJTlVYNjRfREVGQVVMVF9BQklfRUxGdjIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MTovbGliNjQvbGQ2NC5zby4xOzovbGliNjQvbGQ2NC5zby4yfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MToiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMn0iCisgI2Vsc2UKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjovbGliNjQvbGQ2NC5zby4yOzovbGliNjQvbGQ2NC5zby4xfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjI7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMX0iCisgI2VuZGlmCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zaC9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvc2gvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTQzLDcgKzQzLDcgQEAKKyAKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTgzLDcgKzgzLDcgQEAKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTkyLDggKzkyLDggQEAKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjaWZkZWYgU1BBUkNfQklfQVJDSAorIAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNzMsMTAgKzczLDEwIEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIgbXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIHRhcmdldCB1c2luZyB0aGVtLCBvcgorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgYW5kIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgZm9yIHRhcmdldHMKKyAgICBzdXBwb3J0aW5nIGJvdGggMzItYml0IGFuZCA2NC1iaXQgY29tcGlsYXRpb24uICAqLworLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGliL2xkeDMyLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZHgzMi11Q2xpYmMuc28uMCIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSMzIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjY0ICIvc3lzdGVtL2Jpbi9saW5rZXI2NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYzE4MTZjMTYwMTU2Zjk5YzM0ZTZhMGEwMzExYmIwMjE5MzI2ODA0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI2OjM3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzAvMzVdIGdjYzogRml4IGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IuCisKK1RoZXJlIHdvdWxkIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIHRoZQorYnVpbGQgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIDIwMCwgdGhpcyBpcyBjYXVzZWQgYnk6CisKK2hlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWAKKworVGhlIFBMVUdJTl9IRUFERVJTIGlzIHRvbyBsb25nIGJlZm9yZSBzb3J0LCBzbyB0aGUgImVjaG8iIGNhbid0IGhhbmRsZQoraXQsIHVzZSB0aGUgJChzb3J0IGxpc3QpIG9mIEdOVSBtYWtlIHdoaWNoIGNhbiBoYW5kbGUgdGhlIHRvbyBsb25nIGxpc3QKK3dvdWxkIGZpeCB0aGUgcHJvYmxlbSwgdGhlIGhlYWRlciB3b3VsZCBiZSBzaG9ydCBlbm91Z2ggYWZ0ZXIgc29ydGVkLgorVGhlICJ0ciAnICcgJ1wwMTInIiB3YXMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIHNwYWNlIHRvICJcbiIsIHRoZQorJChzb3J0IGxpc3QpIGRvZXNuJ3QgbmVlZCB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL01ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCAyMzIwNDk3Li44NTYyYTYyIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC00NjI3LDcgKzQ2MjcsNyBAQCBpbnN0YWxsLXBsdWdpbjogaW5zdGFsbGRpcnMgbGFuZy5pbnN0YWxsLXBsdWdpbiBzLWhlYWRlci12YXJzIGluc3RhbGwtZ2VuZ3R5cGUKKyAjIFdlIGtlZXAgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGZpbGVzIGluIGNvbmZpZyBvciBjLWZhbWlseSBhbmQgLmRlZgorICMgZmlsZXMuIEFsbCBvdGhlciBmaWxlcyBhcmUgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGRpcmVjdG9yeS4KKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChwbHVnaW5faW5jbHVkZWRpcikKKy0JaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YDsgXAorKwloZWFkZXJzPSIkKHNvcnQgJChQTFVHSU5fSEVBREVSUykpIjsgXAorIAlzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgOyBcCisgCWZvciBmaWxlIGluICQkaGVhZGVyczsgZG8gXAorIAkgIGlmIFsgLWYgJCRmaWxlIF0gOyB0aGVuIFwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gYjg1MjY1YmM5NGVjMWJlYWYxZDNiNjk3YzAzZGI2Mjk5MTU1MzQ2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzEvMzVdIERpc2FibGUgc2R0LgorCitXZSBkb24ndCBsaXN0IGR0cmFjZSBpbiBERVBFTkRTIHNvIHdlIHNob3VsZG4ndCBiZSBkZXBlbmRpbmcgb24gdGhpcyBoZWFkZXIuCitJdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBmcm9tIHByZWl2b3VzIGJ1aWxkcyB0aG91Z2guIFRvIGJlIGRldGVybWluc3RpYywgZGlzYWJsZQorc2R0LmggdXNhZ2UgYWx3YXlzLiBUaGlzIGF2b2lkcyBidWlsZCBmYWlsdXJlcyBpZiB0aGUgaGVhZGVyIGlzIHJlbW92ZWQgYWZ0ZXIgY29uZmlndXJlCitidXQgYmVmb3JlIGxpYmdjYyBpcyBjb21waWxlZCBmb3IgZXhhbXBsZS4KKworUlAgMjAxMi84LzcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworRGlzYWJsZSBzZHQgZm9yIGxpYnN0ZGMrKy12My4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaGFja10KKy0tLQorIGdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICB8ICA2ICsrKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggM2M1NTBhNi4uMDFjNzYyNiAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNjgxMiwxMiArMjY4MTIsMTIgQEAgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5Li4uICIgPiY2OyB9CisgaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLQorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorLQorLWZpCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIworKyNmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCAzNjAxYWI2Li4wNmU1MDFmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQ3NzksMTUgKzQ3NzksMTUgQEAgaWYgdGVzdCB4JGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcCA9IHh5ZXM7IHRoZW4KKyBmaQorIAorICMgVGVzdCBmb3IgPHN5cy9zZHQuaD4gb24gdGhlIHRhcmdldC4KKy1HQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCistQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKy1oYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCistICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKy1maQorLUFDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorKyNHQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCisrI0FDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCisrI2hhdmVfc3lzX3NkdF9oPW5vCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMgIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKysjICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKysjZmkKKysjQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisgCisgIyBDaGVjayBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHVzZWQgYnkgZGVmYXVsdCBvciBub3QuCisgIyBTb21lIGdsaWJjIHRhcmdldHMgdXNlZCBERm1vZGUgbG9uZyBkb3VibGUsIGJ1dCB3aXRoIGdsaWJjIDIuNAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCA0OTUzYzlmLi41M2ExMTQ1IDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTIwNTc4LDExICsyMDU3OCwxMSBAQCBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKyBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCistICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorKyMgIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisgCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorIAorLSAgZmkKKysjICBmaQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK2luZGV4IDczZDQzMGEuLmYyMTM1ZTIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitAQCAtMjExLDcgKzIxMSw3IEBAIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NFU1NPUlNfT05MTgorIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NfT05MTgorIEdMSUJDWFhfQ0hFQ0tfUFRIUkVBRFNfTlVNX1BST0NFU1NPUlNfTlAKKyBHTElCQ1hYX0NIRUNLX1NZU0NUTF9IV19OQ1BVCistR0xJQkNYWF9DSEVDS19TRFRfSAorKyNHTElCQ1hYX0NIRUNLX1NEVF9ICisgCisgIyBDaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRlcnMuCisgQUNfQ0hFQ0tfSEVBREVSUyhbZW5kaWFuLmggZXhlY2luZm8uaCBmbG9hdC5oIGZwLmggaWVlZWZwLmggaW50dHlwZXMuaCBcCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA2YzcxNWZjZmEyNjJhZGFkY2E4MWM2OGExZjNmNjlhYTMxODdhNTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjk6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzMi8zNV0gbGlidG9vbAorCitsaWJzdGRjKysgZnJvbSBnY2MtcnVudGltZSBnZXRzIGNyZWF0ZWQgd2l0aCAtcnBhdGg9L3Vzci9saWIvLi4vbGliIGZvciBxZW11eDg2LTY0Cit3aGVuIHJ1bm5pbmcgb24gYW0geDg2XzY0IGJ1aWxkIGhvc3QuCisKK1RoaXMgcGF0Y2ggc3RvcHMgdGhpcyBzcGVhZGluZyB0byBsaWJkaXIgaW4gdGhlIGxpYnN0ZGMrKy5sYSBmaWxlIHdpdGhpbiBsaWJ0b29sLgorQXJndWFibHksIGl0IHNob3VsZG4ndCBiZSBwYXNzaW5nIHRoaXMgaW50byBsaWJ0b29sIGluIHRoZSBmaXJzdCBwbGFjZSBidXQKK2ZvciBub3cgdGhpcyByZXNvbHZlcyB0aGUgbmFzdGllc3QgcHJvYmxlbXMgdGhpcyBjYXVzZXMuCisKK2Z1bmNfbm9ybWFsX2Fic3BhdGggd291bGQgcmVzb2x2ZSBhbiBlbXB0eSBwYXRoIHRvIGBwd2RgIHNvIHdlIG5lZWQKK3RvIGZpbHRlciB0aGUgemVybyBjYXNlLgorCitSUCAyMDEyLzgvMjQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsdG1haW4uc2ggfCAgICA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjQ2ZjQ3YzIgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYzNTksNiArNjM1OSwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorIAorICAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKysgICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisrCWZ1bmNfbm9ybWFsX2Fic3BhdGggIiRpbnN0YWxsX2xpYmRpciIKKysJaW5zdGFsbF9saWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisrICAgICAgZmkKKyAKKyAgICAgICBvbGRsaWJzPQorICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzZjMzdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOTdlNDU5MWMyMDMxMDQyNWU3YWNhMGU2NzEyYThkOTQ4MGU3NzQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQyBFQUJJX0xJTktfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGZjNWU0YmVhZWE4NTZhMmI0ODZjNzcwYWQzYWRkYzBmNWJiMzEwMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAorU3ViamVjdDogW1BBVENIIDM0LzM1XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgorIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorCitVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KK3NvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA4YmMwYzk4Li4zY2QwODE3IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNTE5LDEwICsxMTUxOSwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTExNTMzLDYgKzExNTQzLDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDVlNWU4NGYuLjQxNWE2ZGYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTcwMCwxMCArMTcwMCwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE3MTQsNiArMTcyNCwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MGFhNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkOTYxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjE5MDJhOTAgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQzLWNwcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDMtY3BwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjg2NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQzLWNwcC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4gYnVpbGRpbmcgCitnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQgaW4KK2J1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyICBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZSB1c2luZyAKK3RoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyIGhlYWRlcnMgYXJlIAordmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcgaW50byAKK2NvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZCBmYWlsdXJlcyAKK3JlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgorCitUaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aGVuCit1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZSB0aGUgdmVyc2lvbgord2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8gYXZvaWQgdGhlIAorcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDMtMzAgMTE6MjU6MDMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL01ha2VmaWxlLmluCTIwMTMtMDgtMTMgMTI6MDM6MTcuMTUxOTg4ODgyICswMDAwCitAQCAtMTQ5LDYgKzE0OSw3IEBACisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4NzYxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2dlbmd0eXBlIGlzIGdlbmVyYXRlZCBmb3IgYm90aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgdGFyZ2V0LiAtREdFTkVSQVRPUl9GSUxFCit3YXMgYWRkZWQgaW4gdGhlIHBhdGNoIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDEyLTA3L21zZzAwMjczLmh0bWwKK2FuZCB3YXMgYXBwbGllZCB0byBib3RoIHZlcnNpb25zIG9mIGdlbmd0eXBlLgorCitVbmZvcnR1bmF0ZWx5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZsYWcgdHJpZ2dlcnMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKGJjb25maWcuaCkgCit0byBiZSBpbmNsdWRlZCBmb3IgdGhlIHRhcmdldCBidWlsZCBvZiBnZW5ndHlwZS4gQ29tcGlsaW5nIGdlbmd0eXBlIHdpdGggdGhlIHRhcmdldCAKK2NvbXBpbGVyIGFuZCBiY29uZmlnLmggY2FuIHJlc3VsdCBpbiBlcnJvcnMgaWYgdGhlIGJ1aWxkIGFuZCB0YXJnZXQgc3lzdGVtcyBhcmUgCitkaXNzaW1pbGFyLiBBbiBleGFtcGxlIGNhc2UgdGhpcyBmYWlscyBpcyBjcm9zcyBjb21waWxpbmcgZ2NjIG9uIGxpbnV4IGZvciBhIGRhcndpbiAKK3RhcmdldCBzeXN0ZW06CisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6MjU6MDoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOiBJbiBmdW5jdGlvbiAndm9pZCBwYXJzZV9lcnJvcihjb25zdCBjaGFyKiwgLi4uKSc6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2Mvc3lzdGVtLmg6OTM6NTM6IGVycm9yOiAnZnB1dGNfdW5sb2NrZWQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorfCAgIyAgZGVmaW5lIGZwdXRjKEMsIFN0cmVhbSkgZnB1dGNfdW5sb2NrZWQgKEMsIFN0cmVhbSkKKword2hpY2ggb2NjdXJzIHNpbmNlIGF1dG8tYnVpbGQuaCBhbmQgYXV0by1ob3N0LmggaGF2ZSBkaWZmZXJuZXQgdmFsdWVzIG9mCitIQVZFX0ZQVVRDX1VOTE9DS0VEOgorCisjZGVmaW5lIEhBVkVfRlBVVENfVU5MT0NLRUQgMQorLyogI3VuZGVmIEhBVkVfRlBVVFNfVU5MT0NLRUQgKi8KKworVGhlIG9idmlvdXMgZml4IGlzIHRvIG9ubHkgaW5jbHVkZSB0aGUgZmxhZyBvbiBidWlsZC8gdGFyZ2V0cyB3aGljaCB0aGlzIHBhdGNoIGRvZXMsIGhvd2V2ZXIgCit0aGlzIGFsc28gbGVhZHMgdG8gY29tcGlsZSBlcnJvcnMgZHVlIHRvIGNvbnN0X3RyZWUgYmVpbmcgdW5kZWZpbmVkIGJ1dCB1c2VkIGluIGRvdWJsZV9pbnQuaAorCitJIGFkZGVkIGEgR0VORVJBVE9SX0ZJTEUyIGZsYWcgdG8gd29ya2Fyb3VuZCB0aG9zZSBpbiB0aGUgCit0YXJnZXQgY2FzZSBhbmQgYWxsb3cgdGhlIGJ1aWxkIHRvIHN1Y2NlZWQuCisKK09ubHkgdGhlIGJ1aWxkL2dlbmd0eXBlcyBzaG91bGQgaGF2ZSB0aGUgLURHRU5FUkFUT1JfRklMRSAKKworUlAgMjIvOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM2Ljg0NDAxNDQyNCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNy43ODQwMTQ0MDIgKzAwMDAKK0BAIC0zOTAzLDI3ICszOTAzLDI5IEBACisgCisgZ2VuZ3R5cGUtbGV4Lm8gYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gOiBnZW5ndHlwZS1sZXguYyBnZW5ndHlwZS5oICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtbGV4Lm86ICQoQ09ORklHX0gpICQoQkNPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1sZXgubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtcGFyc2UubyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vIDogZ2VuZ3R5cGUtcGFyc2UuYyBnZW5ndHlwZS5oIFwKKyAgICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLXN0YXRlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLm8gYnVpbGQvZ2VuZ3R5cGUubyA6IGdlbmd0eXBlLmMgJChTWVNURU1fSCkgZ2VuZ3R5cGUuaCAJXAorICAgcnRsLmRlZiBpbnNuLW5vdGVzLmRlZiBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSBcCisgICAkKE9CU1RBQ0tfSCkgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBidWlsZC9nZW5tZGRlcHMubzogZ2VubWRkZXBzLmMgJChCQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oCVwKK0BAIC0zOTg4LDcgKzM5OTAsNyBAQAorICMgYW55IHN5c3RlbSBoZWFkZXIgaXMgaW5jbHVkZWQuCisgZ2VuZ3R5cGUtbGV4LmMgOiBnZW5ndHlwZS1sZXgubAorIAktJChGTEVYKSAkKEZMRVhGTEFHUykgLW8kQCAkPCAmJiB7IFwKKy0JICBlY2hvICcjaW5jbHVkZSAiYmNvbmZpZy5oIicgPiAkQC50bXA7IFwKKysJICBlY2hvICcnID4gJEAudG1wOyBcCisgCSAgY2F0ICRAID4+ICRALnRtcDsgXAorIAkgIG12ICRALnRtcCAkQDsgXAorIAl9CitJbmRleDogZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvZG91YmxlLWludC5oCTIwMTMtMDEtMzAgMTE6MDQ6MzAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgJMjAxMy0wOC0xOSAxMTo0MTo1MS41NjQwMTI3MTkgKzAwMDAKK0BAIC00NDgsMTAgKzQ0OCwxMiBAQAorIAorIAorICNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKysjaWZuZGVmIEdFTkVSQVRPUl9GSUxFMgorIC8qIENvbnZlcnNpb24gdG8gYW5kIGZyb20gR01QIGludGVnZXIgcmVwcmVzZW50YXRpb25zLiAgKi8KKyAKKyB2b2lkIG1wel9zZXRfZG91YmxlX2ludCAobXB6X3QsIGRvdWJsZV9pbnQsIGJvb2wpOworIGRvdWJsZV9pbnQgbXB6X2dldF9kb3VibGVfaW50IChjb25zdF90cmVlLCBtcHpfdCwgYm9vbCk7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2VuZGlmIC8qIERPVUJMRV9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE0ZjQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorZ2NjIDQuOCB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHNpbmNlIHRoZSAqLlBwbyBmaWxlcworZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQIAorMjAxMi8wOS8yMgorCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTAxLTE0IDE4OjE2OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wOS0yMiAxMDozODoxOC45MDQwNjQ3NTAgKzAwMDAKK0BAIC0xMDAsNyArMTAwLDggQEAKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0gCisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDUtMzEgMDk6MDk6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA5LTIyIDEwOjQwOjQyLjUyMDA1OTkxNyArMDAwMAorQEAgLTI5OCw3ICsyOTgsOCBAQAorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPSAKKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZmQ1NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorV2hlbiBjb21waWxpbmcgYSBwcm9qZWN0IHVzaW5nIC1mcmVwbywgLnJwbyBmaWxlcyBhcmUgd3JpdHRlbiBhbG9uZ3NpZGUKK3RoZSAubyBmaWxlLCB0aGUgc3ltYm9scyBlaXRoZXIgaGF2ZSBPIG9yIEMgYWdhaW5zdCB0aGVtLiBEdXJpbmcgZmluYWwgbGlua2luZywKK3RoZSBvYmplY3RzIGNhbiBiZSByZWNvbXBpbGVkIHdpdGggc29tZSBvZiB0aGUgZW50cmllcyB0d2Vha2VkL2Nob3NlbiBieSB0aGUgCit0bGluay5jIGNvZGUgKHZpc2libGUgd2l0aCBUTElOS19WRVJCT1NFPTMpLCBpdCBkb2VzIHRoaXMgYnkgY2hhbmdpbmcgTyAtPiBDCitpbiB0aGUgLnJwbyBmaWxlcy4KKworTXkgdGVzdHMgc2hvd2VkIHRoYXQgaW5pdF9yZXBvIChjcC9yZXBvLmMpIHdhcyBjb3JyZWN0bHkgY2FsbGluZyAKK0lERU5USUZJRVJfUkVQT19DSE9TRU4gYWdhaW5zdCB0aGUgcmlnaHQgaWRlbnRpZmVycyBhbmQgc2V0dGluZyB0aGUKK2Nob3NlbiBiaXQuCisKK0J5IHRoZSB0aW1lIGZpbmlzaF9yZXBvKCkgb3IgZW1pdF9yZXBvX3AoKSB3ZXJlIGNhbGxlZCwgdGhlIHBvaW50ZXIgcmV0dXJuZWQKK2J5IGdldF9pZGVudGlmaWVyKCkgZm9yIHRoZSBzeW1ib2wgbWFya2VkIGR1cmluZyBpbml0X3JlcG8gaGFkIGNoYW5nZWQgYW5kCit0aGUgY2hvc2VuIGJpdCB3YXMgbm8gbG9uZ2VyIHNldC4gVGhpcyBsZWFkIHRvIGxpbmtpbmcgYnVncyBsaWtlOgorCitjb2xsZWN0OiByZWxpbmtpbmcKK2NvbGxlY3QyOiBlcnJvcjogJ19aTks2c3Vkb2t1NUNsZWFySU5TXzhTZXF1ZW5jZUVFY2xFUlMxXycgd2FzIGFzc2lnbmVkIHRvICdib2FyZC5ycG8nLCBidXQgd2FzIG5vdCBkZWZpbmVkIGR1cmluZyByZWNvbXBpbGF0aW9uLCBvciB2aWNlIHZlcnNhCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBnZXR0aW5nIGNhbGxlZCBiZWZvcmUKK2ZpbmlzaF9yZXBvKCkgaXMgY2FsbGVkIGFuZCBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyBpcyBzZXQgdG8gZmFsc2UgCitzbyB0aGUgaWRlbnRpZmllcnMgYXJlIG5vdCBwcmVzZXJ2ZWQuIFRoZXkgYXJlIHJlY3JlYXRlZCBidXQgdGhlIAorY2hvc2VuIGJpdHMgZ2V0IHdpcGVkIG91dCB3aGljaCBpcyB3aHkgdGhlIHBvaW50ZXIgY2hhbmdlcyBhbmQgdGhlIAorY2hvc2VuIGJpdCBpcyBub3Qgc2V0LgorCitUaGUgZml4IGlzIHRvIGNoYW5nZSBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyAqYWZ0ZXIqIHRoZSBmaW5pc2hfcmVwbyAKK2NhbGxzIGFyZSBtYWRlLgorCitSZXByb2R1Y3Rpb24gaXMgdHJpY2t5IHNpbmNlIHlvdSBuZWVkIHRvIHRyaWdnZXIgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGF0CitqdXN0IHRoZSByaWdodCBtb21lbnQuCisKK1JQIDIwMTMvMTAvOQorCitbWU9DVE8gIzUxMzNdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy90b3BsZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy90b3BsZXYuYwkyMDEzLTAzLTI4IDA4OjI5OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvdG9wbGV2LmMJMjAxMy0xMC0wOSAyMDoyNzoxNy4wODkyMjgwMjMgKzAwMDAKK0BAIC01NTEsMTEgKzU1MSwxMSBAQAorICAgaWYgKGZsYWdfc3ludGF4X29ubHkgfHwgZmxhZ193cGEpCisgICAgIHJldHVybjsKKyAKKy0gIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CistCisgICAvKiBUaGlzIG11c3QgYWxzbyBjYWxsIGZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQuICAqLworICAgbGFuZ19ob29rcy5kZWNscy5maW5hbF93cml0ZV9nbG9iYWxzICgpOworIAorKyAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKysKKyAgIGlmIChzZWVuX2Vycm9yICgpKQorICAgICByZXR1cm47CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4ZjhmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDllMGUxOWVhYzI1NjJmNzM4NTg2MDJmZTI2ZTIwNDRlYjhiMjBjNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0CisKK1doZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwgCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGNiN2E5NGUuLmQzOTJjMmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDY4LDcgKzIwNjgsMTIgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1ydGVtcyB0LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKKysJY2FzZSAke3RhcmdldH0gaW4KKysJICAgIHBvd2VycGMqLSotbGludXgqc3BlKiB8IHBvd2VycGMqLSotbGludXgqYWx0aXZlYyopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiIDs7CisrCSAgICAqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIiA7OworKwllc2FjCisgCWV4dHJhX29wdGlvbnM9IiR7ZXh0cmFfb3B0aW9uc30gcnM2MDAwL3N5c3Y0Lm9wdCIKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNvcyAke3RtYWtlX2ZpbGV9IHJzNjAwMC90LXBwY2NvbW0iCisgCWNhc2UgJHt0YXJnZXR9IGluCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWFkNmY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gY2I5YjFjMDQxYjYzNGE0YzEyODg5NmUzZDNlZWQ0MDgyNjA4Yzc5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMgTWF5IDIwMTQgMTk6MjU6MTcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICIyMDEzLTA1LTIxICBDaHJpc3RpYW4gQnJ1ZWwgCisgPGNocmlzdGlhbi5icnVlbEBzdC5jb20+IgorCitUaGlzIHJldmVydHMgY29tbWl0IDM5ODMwMzZhOGI2YjI3MTBjNTc3NzcxOTRmMjE1MDc4MTlhNzM1NTMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0NvbmZsaWN0czoKKwlnY2MvQ2hhbmdlTG9nCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgfCAyMTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyBnY2MvZHdhcmYyb3V0LmMgfCAgMzMgKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMzQgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZHdhcmYyb3V0LmMgYi9nY2MvZHdhcmYyb3V0LmMKK2luZGV4IDEyNzIzMjYuLjZhYzJiMjggMTAwNjQ0CistLS0gYS9nY2MvZHdhcmYyb3V0LmMKKysrKyBiL2djYy9kd2FyZjJvdXQuYworQEAgLTEwODcwLDI3ICsxMDg3MCwyNSBAQCBzdGF0aWMgZHdfbG9jX2Rlc2NyX3JlZgorIG11bHRpcGxlX3JlZ19sb2NfZGVzY3JpcHRvciAocnR4IHJ0bCwgcnR4IHJlZ3MsCisgCQkJICAgICBlbnVtIHZhcl9pbml0X3N0YXR1cyBpbml0aWFsaXplZCkKKyB7CistICBpbnQgc2l6ZSwgaTsKKysgIGludCBucmVncywgc2l6ZSwgaTsKKysgIHVuc2lnbmVkIHJlZzsKKyAgIGR3X2xvY19kZXNjcl9yZWYgbG9jX3Jlc3VsdCA9IE5VTEw7CisgCistICAvKiBTaW1wbGUsIGNvbnRpZ3VvdXMgcmVnaXN0ZXJzLiAgKi8KKy0gIGlmIChyZWdzID09IE5VTExfUlRYKQorLSAgICB7CistICAgICAgdW5zaWduZWQgcmVnID0gUkVHTk8gKHJ0bCk7CistICAgICAgaW50IG5yZWdzOworLQorKyAgcmVnID0gUkVHTk8gKHJ0bCk7CisgI2lmZGVmIExFQUZfUkVHX1JFTUFQCistICAgICAgaWYgKGNydGwtPnVzZXNfb25seV9sZWFmX3JlZ3MpCistCXsKKy0JICBpbnQgbGVhZl9yZWcgPSBMRUFGX1JFR19SRU1BUCAocmVnKTsKKy0JICBpZiAobGVhZl9yZWcgIT0gLTEpCistCSAgICByZWcgPSAodW5zaWduZWQpIGxlYWZfcmVnOworLQl9CisrICBpZiAoY3J0bC0+dXNlc19vbmx5X2xlYWZfcmVncykKKysgICAgeworKyAgICAgIGludCBsZWFmX3JlZyA9IExFQUZfUkVHX1JFTUFQIChyZWcpOworKyAgICAgIGlmIChsZWFmX3JlZyAhPSAtMSkKKysJcmVnID0gKHVuc2lnbmVkKSBsZWFmX3JlZzsKKysgICAgfQorICNlbmRpZgorKyAgZ2NjX2Fzc2VydCAoKHVuc2lnbmVkKSBEQlhfUkVHSVNURVJfTlVNQkVSIChyZWcpID09IGRieF9yZWdfbnVtYmVyIChydGwpKTsKKysgIG5yZWdzID0gaGFyZF9yZWdub19ucmVnc1tSRUdOTyAocnRsKV1bR0VUX01PREUgKHJ0bCldOworIAorLSAgICAgIGdjY19hc3NlcnQgKCh1bnNpZ25lZCkgREJYX1JFR0lTVEVSX05VTUJFUiAocmVnKSA9PSBkYnhfcmVnX251bWJlciAocnRsKSk7CistICAgICAgbnJlZ3MgPSBoYXJkX3JlZ25vX25yZWdzW1JFR05PIChydGwpXVtHRVRfTU9ERSAocnRsKV07CistCisrICAvKiBTaW1wbGUsIGNvbnRpZ3VvdXMgcmVnaXN0ZXJzLiAgKi8KKysgIGlmIChyZWdzID09IE5VTExfUlRYKQorKyAgICB7CisgICAgICAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChydGwpKSAvIG5yZWdzOworIAorICAgICAgIGxvY19yZXN1bHQgPSBOVUxMOworQEAgLTEwOTE4LDkgKzEwOTE2LDEwIEBAIG11bHRpcGxlX3JlZ19sb2NfZGVzY3JpcHRvciAocnR4IHJ0bCwgcnR4IHJlZ3MsCisgICAgIHsKKyAgICAgICBkd19sb2NfZGVzY3JfcmVmIHQ7CisgCistICAgICAgdCA9IG9uZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKGRieF9yZWdfbnVtYmVyIChYVkVDRVhQIChyZWdzLCAwLCBpKSksCisrICAgICAgdCA9IG9uZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKFJFR05PIChYVkVDRVhQIChyZWdzLCAwLCBpKSksCisgCQkJCSAgVkFSX0lOSVRfU1RBVFVTX0lOSVRJQUxJWkVEKTsKKyAgICAgICBhZGRfbG9jX2Rlc2NyICgmbG9jX3Jlc3VsdCwgdCk7CisrICAgICAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChYVkVDRVhQIChyZWdzLCAwLCAwKSkpOworICAgICAgIGFkZF9sb2NfZGVzY3Jfb3BfcGllY2UgKCZsb2NfcmVzdWx0LCBzaXplKTsKKyAgICAgfQorIAorLS0gCisxLjkuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlMzg5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGFrZW4gZnJvbSBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wNC9tc2cwMjA2NC5odG1sCisKKzIwMTQtMDQtMzAgIENlc2FyIFBoaWxpcHBpZGlzICA8Y2VzYXJAY29kZXNvdXJjZXJ5LmNvbT4KKworCWdjYy8KKwkqIGR3YXJmMmNmaS5jIChkd2ZfcmVnbm8pOiBEb24ndCBhc3NlcnQgcmVnIGlzIGEgcHNldWRvCisJcmVnaXN0ZXIuCisJCisKK2RpZmYgLS1naXQgYS9nY2MvZHdhcmYyY2ZpLmMgYi9nY2MvZHdhcmYyY2ZpLmMKK2luZGV4IDQxODA4OTAuLjQwZWYwZTIgMTAwNjQ0CistLS0gYS9nY2MvZHdhcmYyY2ZpLmMKKysrKyBiL2djYy9kd2FyZjJjZmkuYworQEAgLTkwNiw3ICs5MDYsNiBAQCBub3RpY2VfZWhfdGhyb3cgKHJ0eCBpbnNuKQorIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQKKyBkd2ZfcmVnbm8gKGNvbnN0X3J0eCByZWcpCisgeworLSAgZ2NjX2Fzc2VydCAoUkVHTk8gKHJlZykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpOworICAgcmV0dXJuIERXQVJGX0ZSQU1FX1JFR05VTSAoUkVHTk8gKHJlZykpOworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjk1OGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoCkBAIC0wLDAgKzEsMTM4IEBACitGcm9tIGQ2MjYyOTdlODdlMTkyNTFhMjg0ZWExZTkzNjBlODMxYjQ4OTk5Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBtcGYgPG1wZkAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBUaHUsIDQgU2VwIDIwMTQgMDg6MzI6MDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRhcmdldCBob29rIHRvIG92ZXJyaWRlIERXQVJGMiBmcmFtZSByZWdpc3RlciBzaXplCisKK2djYy8KKworCSogdGFyZ2V0LmRlZiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogTmV3IHRhcmdldCBob29rLgorCSogdGFyZ2hvb2tzLmMgKGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpOiBOZXcgZnVuY3Rpb24uCisJKiB0YXJnaG9va3MuaCAoZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSk6IE5ldyBwcm90b3R5cGUuCisJKiBkb2MvdG0udGV4aS5pbiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogRG9jdW1lbnQuCisJKiBkb2MvdG0udGV4aTogUmVnZW5lcmF0ZS4KKwkqIGR3YXJmMmNmaS5jIChleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyk6IEFic3RyYWN0IG1vZGUKKwlzZWxlY3Rpb24gbG9naWMgdG8gZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZS4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNDg5OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICB8IDEwICsrKysrKysrKysKKyBnY2MvZG9jL3RtLnRleGkgICAgfCAgNyArKysrKysrCisgZ2NjL2RvYy90bS50ZXhpLmluIHwgIDIgKysKKyBnY2MvZHdhcmYyY2ZpLmMgICAgfCAgNCArLS0tCisgZ2NjL3RhcmdldC5kZWYgICAgIHwgMTEgKysrKysrKysrKysKKyBnY2MvdGFyZ2hvb2tzLmMgICAgfCAxMyArKysrKysrKysrKysrCisgZ2NjL3Rhcmdob29rcy5oICAgIHwgIDEgKworIDcgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkKKysrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpCitAQCAtOTAxNyw2ICs5MDE3LDEzIEBAIHJlZ2lzdGVyIGluIER3YXJmLiAgT3RoZXJ3aXNlLCB0aGlzIGhvb2sKKyBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIEBjb2Rle05VTExfUlRYfS4KKyBAZW5kIGRlZnR5cGVmbgorIAorK0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7ZW51bSBtYWNoaW5lX21vZGV9IFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSAoaW50IEB2YXJ7cmVnbm99KQorK0dpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHdoaWNoIHRoZQorK2NvcnJlc3BvbmRpbmcgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgc2hvdWxkIGhhdmUuICBUaGlzIGlzIG5vcm1hbGx5CisrdXNlZCB0byByZXR1cm4gYSBzbWFsbGVyIG1vZGUgdGhhbiB0aGUgcmF3IG1vZGUgdG8gcHJldmVudCBjYWxsCisrY2xvYmJlcmVkIHBhcnRzIG9mIGEgcmVnaXN0ZXIgYWx0ZXJpbmcgdGhlIGZyYW1lIHJlZ2lzdGVyIHNpemUKKytAZW5kIGRlZnR5cGVmbgorKworIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB2b2lkIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQSAodHJlZSBAdmFye2FkZHJlc3N9KQorIElmIHNvbWUgcmVnaXN0ZXJzIGFyZSByZXByZXNlbnRlZCBpbiBEd2FyZi0yIHVud2luZCBpbmZvcm1hdGlvbiBpbgorIG11bHRpcGxlIHBpZWNlcywgZGVmaW5lIHRoaXMgaG9vayB0byBmaWxsIGluIGluZm9ybWF0aW9uIGFib3V0IHRoZQorSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkuaW4KKysrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpLmluCitAQCAtNjc0NSw2ICs2NzQ1LDggQEAgdGhlIHRhcmdldCBzdXBwb3J0cyBEV0FSRiAyIGZyYW1lIHVud2luZAorIAorIEBob29rIFRBUkdFVF9EV0FSRl9SRUdJU1RFUl9TUEFOCisgCisrQGhvb2sgVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFCisrCisgQGhvb2sgVEFSR0VUX0lOSVRfRFdBUkZfUkVHX1NJWkVTX0VYVFJBCisgCisgQGhvb2sgVEFSR0VUX0FTTV9UVFlQRQorSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKKysrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtMjcxLDExICsyNzEsOSBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCisgICAgICAgaWYgKHJudW0gPCBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCisgCXsKKyAJICBIT1NUX1dJREVfSU5UIG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChtb2RlKTsKKy0JICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSByZWdfcmF3X21vZGVbaV07CisgCSAgSE9TVF9XSURFX0lOVCBzaXplOworKwkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworIAorLQkgIGlmIChIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQgKGksIHNhdmVfbW9kZSkpCistCSAgICBzYXZlX21vZGUgPSBjaG9vc2VfaGFyZF9yZWdfbW9kZSAoaSwgMSwgdHJ1ZSk7CisgCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKKyAJICAgIHsKKyAJICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3RhcmdldC5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2V0LmRlZgorKysrIGdjYy00LjkuMi9nY2MvdGFyZ2V0LmRlZgorQEAgLTMyMTgsNiArMzIxOCwxNyBAQCBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuCisgIHJ0eCwgKHJ0eCByZWcpLAorICBob29rX3J0eF9ydHhfbnVsbCkKKyAKKysvKiBHaXZlbiBhIHJlZ2lzdGVyIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgY29ycmVzcG9uZGluZyBEV0FSRiBmcmFtZQorKyAgIHJlZ2lzdGVyLiAgKi8KKytERUZIT09LCisrKGR3YXJmX2ZyYW1lX3JlZ19tb2RlLAorKyAiR2l2ZW4gYSByZWdpc3RlciwgdGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIG1vZGUgd2hpY2ggdGhlXG5cCisrY29ycmVzcG9uZGluZyBEd2FyZiBmcmFtZSByZWdpc3RlciBzaG91bGQgaGF2ZS4gIFRoaXMgaXMgbm9ybWFsbHlcblwKKyt1c2VkIHRvIHJldHVybiBhIHNtYWxsZXIgbW9kZSB0aGFuIHRoZSByYXcgbW9kZSB0byBwcmV2ZW50IGNhbGxcblwKKytjbG9iYmVyZWQgcGFydHMgb2YgYSByZWdpc3RlciBhbHRlcmluZyB0aGUgZnJhbWUgcmVnaXN0ZXIgc2l6ZSIsCisrIGVudW0gbWFjaGluZV9tb2RlLCAoaW50IHJlZ25vKSwKKysgZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSkKKysKKyAvKiBJZiBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyBuZWVkcyB0byBmaWxsIGluIHRhYmxlCisgICAgZW50cmllcyBub3QgY29ycmVzcG9uZGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMgYmVsb3cKKyAgICBGSVJTVF9QU0VVRE9fUkVHSVNURVIsIHRoaXMgaG9vayBzaG91bGQgZ2VuZXJhdGUgdGhlIG5lY2Vzc2FyeQorSW5kZXg6IGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2hvb2tzLmMKKysrKyBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5jCitAQCAtMTQzOCw2ICsxNDM4LDE5IEBAIGRlZmF1bHRfZGVidWdfdW53aW5kX2luZm8gKHZvaWQpCisgICByZXR1cm4gVUlfTk9ORTsKKyB9CisgCisrLyogRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG1vZGUgZm9yIGEgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgdGhhdCByZXByZXNlbnRzCisrICAgcmVnaXN0ZXIgUkVHTk8uICAqLworKworK2VudW0gbWFjaGluZV9tb2RlCisrZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaW50IHJlZ25vKQorK3sKKysgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHJlZ19yYXdfbW9kZVtyZWdub107CisrCisrICBpZiAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEIChyZWdubywgc2F2ZV9tb2RlKSkKKysgICAgc2F2ZV9tb2RlID0gY2hvb3NlX2hhcmRfcmVnX21vZGUgKHJlZ25vLCAxLCB0cnVlKTsKKysgIHJldHVybiBzYXZlX21vZGU7CisrfQorKworIC8qIFRvIGJlIHVzZWQgYnkgdGFyZ2V0cyB3aGVyZSByZWdfcmF3X21vZGUgZG9lc24ndCByZXR1cm4gdGhlIHJpZ2h0CisgICAgbW9kZSBmb3IgcmVnaXN0ZXJzIHVzZWQgaW4gYXBwbHlfYnVpbHRpbl9yZXR1cm4gYW5kIGFwcGx5X2J1aWx0aW5fYXJnLiAgKi8KKyAKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3Rhcmdob29rcy5oCisrKysgZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuaAorQEAgLTE5NCw2ICsxOTQsNyBAQCBleHRlcm4gaW50IGRlZmF1bHRfbGFiZWxfYWxpZ25fbWF4X3NraXAKKyBleHRlcm4gaW50IGRlZmF1bHRfanVtcF9hbGlnbl9tYXhfc2tpcCAocnR4KTsKKyBleHRlcm4gc2VjdGlvbiAqIGRlZmF1bHRfZnVuY3Rpb25fc2VjdGlvbih0cmVlIGRlY2wsIGVudW0gbm9kZV9mcmVxdWVuY3kgZnJlcSwKKyAJCQkJCSAgYm9vbCBzdGFydHVwLCBib29sIGV4aXQpOworK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlIChpbnQpOworIGV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2dldF9yZWdfcmF3X21vZGUgKGludCk7CisgCisgZXh0ZXJuIHZvaWQgKmRlZmF1bHRfZ2V0X3BjaF92YWxpZGl0eSAoc2l6ZV90ICopOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbSBhMjJhMjIyYzhmOTI5OWY2YzA3YTAyNzQzODhhZGU3ZDRhYjhjMjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIwIEp1biAyMDE0IDE2OjQxOjA4IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdjYzogZml4IHNlZ2ZhdWx0IGZyb20gY2FsbGluZyBmcmVlIG9uIG5vbi1tYWxsb2MnZCBhcmVhCisKK1dlIHNlZSB0aGUgZm9sbG93aW5nIG9uIGEgMzJiaXQgZ2NjIGluc3RhbGxlZCBvbiA2NCBiaXQgaG9zdDoKKworICBSZWFkaW5nIHN5bWJvbHMgZnJvbSAuL2k1ODYtcG9reW1sbGliMzItbGludXgtZ2NjLi4uZG9uZS4KKyAgKGdkYikgcnVuCisgIFN0YXJ0aW5nIHByb2dyYW06IHg4Ni1wb2t5bWxsaWIzMi1saW51eC9saWIzMi1nY2MvNC45LjAtcjAvaW1hZ2UvdXNyL2Jpbi9pNTg2LXBva3ltbGxpYjMyLWxpbnV4LWdjYworCisgIFByb2dyYW0gcmVjZWl2ZWQgc2lnbmFsIFNJR1NFR1YsIFNlZ21lbnRhdGlvbiBmYXVsdC4KKyAgMHhmN2U5NTdlMCBpbiBmcmVlICgpIGZyb20gL2xpYi9pMzg2LWxpbnV4LWdudS9saWJjLnNvLjYKKyAgKGdkYikgYnQKKyAgIzAgIDB4ZjdlOTU3ZTAgaW4gZnJlZSAoKSBmcm9tIC9saWIvaTM4Ni1saW51eC1nbnUvbGliYy5zby42CisgICMxICAweDA4MDRiNzNjIGluIHNldF9tdWx0aWxpYl9kaXIgKCkgYXQgZ2NjLTQuOS4wL2djYy9nY2MuYzo3ODI3CisgICMyICBtYWluIChhcmdjPTEsIGFyZ3Y9MHhmZmZmZDUwNCkgYXQgZ2NjLTQuOS4wL2djYy9nY2MuYzo2Njg4CisgIChnZGIpCisKK1RoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIHdlIGNvbmRpdGlvbmFsbHkgYXNzaWduIHRoZSBwb2ludGVyIHdlCitldmVudHVhbGx5IGZyZWUsIGFuZCB0aGUgY29uZGl0aW9uYWwgbWF5IGFzc2lnbiB0aGUgcG9pbnRlciB0byB0aGUKK25vbi1tYWxsb2MnZCBpbnRlcm5hbCBzdHJpbmcgIi4iIHdoaWNoIGZhaWxzIHdoZW4gd2UgZnJlZSBpdCBoZXJlOgorCisgICBpZiAobXVsdGlsaWJfZGlyID09IE5VTEwgJiYgbXVsdGlsaWJfb3NfZGlyICE9IE5VTEwKKyAgICAgICAmJiBzdHJjbXAgKG11bHRpbGliX29zX2RpciwgIi4iKSA9PSAwKQorICAgICB7CisgICAgICAgZnJlZSAoQ09OU1RfQ0FTVCAoY2hhciAqLCBtdWx0aWxpYl9vc19kaXIpKTsKKyAgICAgICAuLi4KKworQXMgc3VnZ2VzdGVkIGJ5IEpha3ViLCBlbnN1cmUgdGhlICIuIiBjYXNlIGlzIGFsc28gbWFsbG9jJ2QgdmlhCit4c3RyZHVwKCkgYW5kIGhlbmNlIHRoZSBwb2ludGVyIGZvciB0aGUgIi4iIGNhc2UgY2FuIGJlIGZyZWVkLgorCitDYzogSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KK0NjOiBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CitDYzogTWF0dGhpYXMgS2xvc2UgPGRva29AdWJ1bnR1LmNvbT4KK0NDOiBUb2JpYXMgQnVybnVzIDxidXJudXNAbmV0LWIuZGU+CitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFsgaHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA2L21zZzAyMDY5Lmh0bWwgXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDlhYzE4ZTYwZDgwMS4uMTY4YWNmN2ViMGM5IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC03NzkwLDEwICs3NzkwLDE1IEBAIHNldF9tdWx0aWxpYl9kaXIgKHZvaWQpCisgCQlxMisrOworIAkgICAgICBpZiAoKnEyID09ICc6JykKKyAJCW1sX2VuZCA9IHEyOworLQkgICAgICBuZXdfbXVsdGlsaWJfb3NfZGlyID0gWE5FV1ZFQyAoY2hhciwgbWxfZW5kIC0gcSk7CistCSAgICAgIG1lbWNweSAobmV3X211bHRpbGliX29zX2RpciwgcSArIDEsIG1sX2VuZCAtIHEgLSAxKTsKKy0JICAgICAgbmV3X211bHRpbGliX29zX2RpclttbF9lbmQgLSBxIC0gMV0gPSAnXDAnOworLQkgICAgICBtdWx0aWxpYl9vc19kaXIgPSAqbmV3X211bHRpbGliX29zX2RpciA/IG5ld19tdWx0aWxpYl9vc19kaXIgOiAiLiI7CisrCSAgICAgIGlmIChtbF9lbmQgLSBxID09IDEpCisrCQltdWx0aWxpYl9vc19kaXIgPSB4c3RyZHVwICgiLiIpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG5ld19tdWx0aWxpYl9vc19kaXIgPSBYTkVXVkVDIChjaGFyLCBtbF9lbmQgLSBxKTsKKysJCSAgbWVtY3B5IChuZXdfbXVsdGlsaWJfb3NfZGlyLCBxICsgMSwgbWxfZW5kIC0gcSAtIDEpOworKwkJICBuZXdfbXVsdGlsaWJfb3NfZGlyW21sX2VuZCAtIHEgLSAxXSA9ICdcMCc7CisrCQkgIG11bHRpbGliX29zX2RpciA9IG5ld19tdWx0aWxpYl9vc19kaXI7CisrCQl9CisgCisgCSAgICAgIGlmIChxMiA8IGVuZCAmJiAqcTIgPT0gJzonKQorIAkJeworLS0gCisxLjkuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOGVmYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDYxIEBACitnY2MvTWFrZWZpbGUuaW46IGZpeCBwYXJhbGxlbCBidWlsZGluZyBmYWlsdXJlCisKK1RoZSBnY2MtYXIubywgZ2NjLW5tLm8sIGdjYy1yYW5saWIubyBhbmQgZXJyb3JzLm8gaW5jbHVkZWQKK2NvbmZpZy5oIHdoaWNoIHdhcyBhIGdlbmVyYXRlZCBmaWxlLiBCdXQgbm8gZXhwbGljaXR5IHJ1bGUKK3RvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3kuIFRoZXJlIHdhcyBwb3RlbnRpYWwgYnVpbGRpbmcKK2ZhaWx1cmUgd2hpbGUgcGFyYWxsZWwgbWFrZS4KKworRm9yIGdjYy1hci5vLCBnY2Mtbm0ubyBhbmQgZ2NjLXJhbmxpYi5vLCB0aGV5IHdlcmUgY29tcGlsZWQgZnJvbSBvbmUgQworc291cmNlIGZpbGUgZ2NjLWFyLmMsIHdlIGFkZCB0aGVtIHRvIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUywgc28gdGhlCisnJChBTExfSE9TVF9PQkpTKSA6IHwgJChnZW5lcmF0ZWRfZmlsZXMpJyBydWxlIGNvdWxkIHdvcmsgZm9yIHRoZXNlCitvYmplY3RzLgorCitGb3IgZXJyb3JzLm8sIGl0IGlzIHBhcnQgb2YgZ2VuZ3R5cGUsIGFuZCB0aGUgZ2VuZ3R5cGUgZ2VuZXJhdG9yIHByb2dyYW0KK2lzIHNwZWNpYWw6IFR3byB2ZXJzaW9ucyBhcmUgYnVpbHQuIE9uZSBpcyBmb3IgdGhlIGJ1aWxkIG1hY2hpbmUsIGFuZCBvbmUKK2lzIGZvciB0aGUgaG9zdC4gV2UgcmVmZXJlZCB3aGF0IGdlbmd0eXBlLXBhcnNlLm8gZGlkICh3aGljaCBhbHNvIGlzIHBhcnQKK29mIGdlbmd0eXBlKS4KKworW0dDQyAjNjE4OTldCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MTg5OQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggNjQ3NWNiYS4uNTZlNTBiYiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtMTQ4MSwxMyArMTQ4MSwxNiBAQCBPQkpTLWxpYmNvbW1vbi10YXJnZXQgPSAkKGNvbW1vbl9vdXRfb2JqZWN0X2ZpbGUpIHByZWZpeC5vIHBhcmFtcy5vIFwKKyAJb3B0cy5vIG9wdHMtY29tbW9uLm8gb3B0aW9ucy5vIHZlYy5vIGhvb2tzLm8gY29tbW9uL2NvbW1vbi10YXJnaG9va3MubyBcCisgCWhhc2gtdGFibGUubyBmaWxlLWZpbmQubworIAorKyMgT2JqZWN0cyBjb21waWxlZCBmcm9tIG9uZSBDIHNvdXJjZSBmaWxlIGdjYy1hci5jCisrT0JKUy1nY2MtYXIgPSBnY2MtYXIubyBnY2Mtbm0ubyBnY2MtcmFubGliLm8KKysKKyAjIFRoaXMgbGlzdHMgYWxsIGhvc3Qgb2JqZWN0cyBmb3IgdGhlIGZyb250IGVuZHMuCisgQUxMX0hPU1RfRlJPTlRFTkRfT0JKUyA9ICQoZm9yZWFjaCB2LCQoQ09ORklHX0xBTkdVQUdFUyksJCgkKHYpX09CSlMpKQorIAorIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUyA9ICQoR0NDX09CSlMpICQoT0JKUykgJChPQkpTLWxpYmNvbW1vbikgXAorICAgJChPQkpTLWxpYmNvbW1vbi10YXJnZXQpIEBUUkVFQlJPV1NFUkAgbWFpbi5vIGMtZmFtaWx5L2NwcHNwZWMubyBcCisgICAkKENPTExFQ1QyX09CSlMpICQoRVhUUkFfR0NDX09CSlMpICQoR0NPVl9PQkpTKSAkKEdDT1ZfRFVNUF9PQkpTKSBcCistICBsdG8td3JhcHBlci5vCisrICBsdG8td3JhcHBlci5vICQoT0JKUy1nY2MtYXIpCisgCisgIyBUaGlzIGxpc3RzIGFsbCBob3N0IG9iamVjdCBmaWxlcywgd2hldGhlciB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGlzCisgIyBjb21waWxhdGlvbiBvciBub3QuCitAQCAtMjQzNyw2ICsyNDQwLDggQEAgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKyBDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCisgCisrZXJyb3JzLm8gOiAkKENPTkZJR19IKQorKworIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3ZGFiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMTQ4IEBACitGcm9tIDRmZDM5ZjEzMjkzNzllMDBmOTU4Mzk0YWRkZTZiZTk2ZjBjYWYyMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBoYWlucXVlIDxoYWlucXVlQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IEZyaSwgNSBEZWMgMjAxNCAxNjo1MzoyMiArMDAwMAorU3ViamVjdDogW1BBVENIXSAyMDE0LTEyLTA1ICBPbGl2aWVyIEhhaW5xdWUgIDxoYWlucXVlQGFkYWNvcmUuY29tPgorCisgICAgICAgICogZHdhcmYyY2ZpLmMgKGluaXRfb25lX2R3YXJmX3JlZ19zaXplKTogTmV3IGhlbHBlciwgcHJvY2Vzc2luZworICAgICAgICBvbmUgcGFydGljdWxhciByZWcgZm9yIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzLgorICAgICAgICAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBSZXdvcmsgdG8gdXNlIGhlbHBlciBhbmQKKyAgICAgICAgYWNjb3VudCBmb3IgZHdhcmYgcmVnaXN0ZXIgc3BhbnMuCisKKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTg0MjggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgfCAgNyArKysrKworIGdjYy9kd2FyZjJjZmkuYyB8IDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCisrKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworQEAgLTI1Miw3ICsyNTIsNTkgQEAgaW5pdF9yZXR1cm5fY29sdW1uX3NpemUgKGVudW0gbWFjaGluZV9tbworIAkJICBnZW5faW50X21vZGUgKHNpemUsIG1vZGUpKTsKKyB9CisgCistLyogR2VuZXJhdGUgY29kZSB0byBpbml0aWFsaXplIHRoZSByZWdpc3RlciBzaXplIHRhYmxlLiAgKi8KKysvKiBEYXRhc3RydWN0dXJlIHVzZWQgYnkgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgYW5kCisrICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgdG8gY29tbXVuaWNhdGUgb24gd2hhdCBoYXMgYmVlbiBkb25lIGJ5IHRoZQorKyAgIGxhdHRlci4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICAvKiBXaGV0aGVyIHRoZSBkd2FyZiByZXR1cm4gY29sdW1uIHdhcyBpbml0aWFsaXplZC4gICovCisrICBib29sIHdyb3RlX3JldHVybl9jb2x1bW47CisrCisrICAvKiBGb3IgZWFjaCBoYXJkIHJlZ2lzdGVyIFJFR05PLCB3aGV0aGVyIGluaXRfb25lX2R3YXJmX3JlZ19zaXplCisrICAgICB3YXMgZ2l2ZW4gUkVHTk8gdG8gcHJvY2VzcyBhbHJlYWR5LiAgKi8KKysgIGJvb2wgcHJvY2Vzc2VkX3JlZ25vIFtGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworKworK30gaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlOworKworKy8qIEhlbHBlciBmb3IgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMuICBHZW5lcmF0ZSBjb2RlIHRvCisrICAgaW5pdGlhbGl6ZSB0aGUgZHdhcmYgcmVnaXN0ZXIgc2l6ZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHJlZ2lzdGVyCisrICAgUkVHTk8gaW4gUkVHTU9ERS4gIFRBQkxFIGlzIHRoZSB0YWJsZSBiYXNlIGFkZHJlc3MsIFNMT1RNT0RFIGlzIHRoZSBtb2RlIHRvCisrICAgdXNlIGZvciB0aGUgc2l6ZSBlbnRyeSB0byBpbml0aWFsaXplLCBhbmQgSU5JVF9TVEFURSBpcyB0aGUgY29tbXVuaWNhdGlvbgorKyAgIGRhdGFzdHJ1Y3R1cmUgY29udmV5aW5nIHdoYXQgd2UncmUgZG9pbmcgdG8gb3VyIGNhbGxlci4gICovCisrCisrc3RhdGljCisrdm9pZCBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaW50IHJlZ25vLCBtYWNoaW5lX21vZGUgcmVnbW9kZSwKKysJCQkgICAgICBydHggdGFibGUsIG1hY2hpbmVfbW9kZSBzbG90bW9kZSwKKysJCQkgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc3RhdGUgKmluaXRfc3RhdGUpCisreworKyAgY29uc3QgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKHJlZ25vKTsKKysgIGNvbnN0IHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworKworKyAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKKysgIGNvbnN0IEhPU1RfV0lERV9JTlQgcmVnc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHJlZ21vZGUpOworKworKyAgaW5pdF9zdGF0ZS0+cHJvY2Vzc2VkX3JlZ25vW3JlZ25vXSA9IHRydWU7CisrCisrICBpZiAocm51bSA+PSBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCisrICAgIHJldHVybjsKKysKKysgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCisrICAgIHsKKysgICAgICBpZiAocmVnbW9kZSA9PSBWT0lEbW9kZSkKKysJcmV0dXJuOworKyAgICAgIGluaXRfc3RhdGUtPndyb3RlX3JldHVybl9jb2x1bW4gPSB0cnVlOworKyAgICB9CisrCisrICBpZiAoc2xvdG9mZnNldCA8IDApCisrICAgIHJldHVybjsKKysKKysgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAodGFibGUsIHNsb3Rtb2RlLCBzbG90b2Zmc2V0KSwKKysJCSAgZ2VuX2ludF9tb2RlIChyZWdzaXplLCBzbG90bW9kZSkpOworK30KKysKKysvKiBHZW5lcmF0ZSBjb2RlIHRvIGluaXRpYWxpemUgdGhlIGR3YXJmIHJlZ2lzdGVyIHNpemUgdGFibGUgbG9jYXRlZAorKyAgIGF0IHRoZSBwcm92aWRlZCBBRERSRVNTLiAgKi8KKyAKKyB2b2lkCisgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZWUgYWRkcmVzcykKK0BAIC0yNjEsMzUgKzMxMyw0MCBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCisgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gVFlQRV9NT0RFIChjaGFyX3R5cGVfbm9kZSk7CisgICBydHggYWRkciA9IGV4cGFuZF9ub3JtYWwgKGFkZHJlc3MpOworICAgcnR4IG1lbSA9IGdlbl9ydHhfTUVNIChCTEttb2RlLCBhZGRyKTsKKy0gIGJvb2wgd3JvdGVfcmV0dXJuX2NvbHVtbiA9IGZhbHNlOworKworKyAgaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlIGluaXRfc3RhdGU7CisrCisrICBtZW1zZXQgKChjaGFyICopJmluaXRfc3RhdGUsIDAsIHNpemVvZiAoaW5pdF9zdGF0ZSkpOworIAorICAgZm9yIChpID0gMDsgaSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsgaSsrKQorICAgICB7CistICAgICAgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKGkpOworLSAgICAgIHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworLQorLSAgICAgIGlmIChybnVtIDwgRFdBUkZfRlJBTUVfUkVHSVNURVJTKQorLQl7CistCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAobW9kZSk7CistCSAgSE9TVF9XSURFX0lOVCBzaXplOworLQkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworKyAgICAgIG1hY2hpbmVfbW9kZSBzYXZlX21vZGU7CisrICAgICAgcnR4IHNwYW47CisgCistCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKKysgICAgICAvKiBObyBwb2ludCBpbiBwcm9jZXNzaW5nIGEgcmVnaXN0ZXIgbXVsdGlwbGUgdGltZXMuICBUaGlzIGNvdWxkIGhhcHBlbgorKyAgICAgICAgd2l0aCByZWdpc3RlciBzcGFucywgZS5nLiB3aGVuIGEgcmVnIGlzIGZpcnN0IHByb2Nlc3NlZCBhcyBhIHBpZWNlIG9mCisrICAgICAgICBhIHNwYW4sIHRoZW4gYXMgYSByZWdpc3RlciBvbiBpdHMgb3duIGxhdGVyIG9uLiAgKi8KKysKKysgICAgICBpZiAoaW5pdF9zdGF0ZS5wcm9jZXNzZWRfcmVnbm9baV0pCisrICAgICAgIGNvbnRpbnVlOworKworKyAgICAgIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworKyAgICAgIHNwYW4gPSB0YXJnZXRtLmR3YXJmX3JlZ2lzdGVyX3NwYW4gKGdlbl9ydHhfUkVHIChzYXZlX21vZGUsIGkpKTsKKysgICAgICBpZiAoIXNwYW4pCisrICAgICAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpLCBzYXZlX21vZGUsIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOworKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIGZvciAoaW50IHNpID0gMDsgc2kgPCBYVkVDTEVOIChzcGFuLCAwKTsgc2krKykKKyAJICAgIHsKKy0JICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKKy0JCWNvbnRpbnVlOworLQkgICAgICB3cm90ZV9yZXR1cm5fY29sdW1uID0gdHJ1ZTsKKy0JICAgIH0KKy0JICBzaXplID0gR0VUX01PREVfU0laRSAoc2F2ZV9tb2RlKTsKKy0JICBpZiAob2Zmc2V0IDwgMCkKKy0JICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICBydHggcmVnID0gWFZFQ0VYUCAoc3BhbiwgMCwgc2kpOworKyAgICAgICAgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZQorKyAgICAgICAgICAgICAgIChSRUdOTyAocmVnKSwgR0VUX01PREUgKHJlZyksIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOworKyAgICAgICAgICAgfQorIAorLQkgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAobWVtLCBtb2RlLCBvZmZzZXQpLAorLQkJCSAgZ2VuX2ludF9tb2RlIChzaXplLCBtb2RlKSk7CisgCX0KKyAgICAgfQorIAorLSAgaWYgKCF3cm90ZV9yZXR1cm5fY29sdW1uKQorKyAgaWYgKCFpbml0X3N0YXRlLndyb3RlX3JldHVybl9jb2x1bW4pCisgICAgIGluaXRfcmV0dXJuX2NvbHVtbl9zaXplIChtb2RlLCBtZW0sIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pOworIAorICNpZmRlZiBEV0FSRl9BTFRfRlJBTUVfUkVUVVJOX0NPTFVNTgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2Yzk0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBjMDIzNWEzM2RlOGM0Zjc4Y2NlMzViMmE4YzIwMzVjODNmZTFiZDE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogaGFpbnF1ZSA8aGFpbnF1ZUAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBGcmksIDUgRGVjIDIwMTQgMTc6MDE6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gMjAxNC0xMi0wNSAgT2xpdmllciBIYWlucXVlICA8aGFpbnF1ZUBhZGFjb3JlLmNvbT4KKworICAgICAgICBnY2MvCisgICAgICAgICogZGVmYXVsdHMuaDogKERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKTogRGVmaW5lIGRlZmF1bHQuCisgICAgICAgICogZHdhcmYyY2ZpLmMgKGluaXRfb25lX2R3YXJmX3JlZ19zaXplKTogSG9ub3IKKyAgICAgICAgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4uCisKKyAgICAgICAgbGliZ2NjLworICAgICAgICAqIHVud2luZC1kdzIuYyAoRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4pOiBSZW1vdmUgZGVmYXVsdCBkZWYsCisgICAgICAgIG5vdyBwcm92aWRlZCBieSBkZWZhdWx0cy5oLgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE4NDI5IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KKworLS0tCisgZ2NjL0NoYW5nZUxvZyAgICAgICB8IDYgKysrKysrCisgZ2NjL2RlZmF1bHRzLmggICAgICB8IDUgKysrKysKKyBnY2MvZHdhcmYyY2ZpLmMgICAgIHwgMyArKy0KKyBsaWJnY2MvQ2hhbmdlTG9nICAgIHwgNSArKysrKworIGxpYmdjYy91bndpbmQtZHcyLmMgfCA0IC0tLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2RlZmF1bHRzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZGVmYXVsdHMuaAorKysrIGdjYy00LjkuMi9nY2MvZGVmYXVsdHMuaAorQEAgLTQzOCw2ICs0MzgsMTEgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICNkZWZpbmUgRFdBUkZfRlJBTUVfUkVHTlVNKFJFRykgREJYX1JFR0lTVEVSX05VTUJFUiAoUkVHKQorICNlbmRpZgorIAorKy8qIFRoZSBtYXBwaW5nIGZyb20gZHdhcmYgQ0ZBIHJlZyBudW1iZXIgdG8gaW50ZXJuYWwgZHdhcmYgcmVnIG51bWJlcnMuICAqLworKyNpZm5kZWYgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4KKysjZGVmaW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSAoUkVHTk8pCisrI2VuZGlmCisrCisgLyogTWFwIHJlZ2lzdGVyIG51bWJlcnMgaGVsZCBpbiB0aGUgY2FsbCBmcmFtZSBpbmZvIHRoYXQgZ2NjIGhhcworICAgIGNvbGxlY3RlZCB1c2luZyBEV0FSRl9GUkFNRV9SRUdOVU0gdG8gdGhvc2UgdGhhdCBzaG91bGQgYmUgb3V0cHV0IGluCisgICAgLmRlYnVnX2ZyYW1lIGFuZCAuZWhfZnJhbWUuICAqLworSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKKysrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtMjgwLDggKzI4MCw5IEBAIHZvaWQgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgKGludCByZWdubywKKyB7CisgICBjb25zdCB1bnNpZ25lZCBpbnQgZG51bSA9IERXQVJGX0ZSQU1FX1JFR05VTSAocmVnbm8pOworICAgY29uc3QgdW5zaWduZWQgaW50IHJudW0gPSBEV0FSRjJfRlJBTUVfUkVHX09VVCAoZG51bSwgMSk7CisrICBjb25zdCB1bnNpZ25lZCBpbnQgZGNvbCA9IERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChybnVtKTsKKyAKKy0gIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7CisrICBjb25zdCBIT1NUX1dJREVfSU5UIHNsb3RvZmZzZXQgPSBkY29sICogR0VUX01PREVfU0laRSAoc2xvdG1vZGUpOworICAgY29uc3QgSE9TVF9XSURFX0lOVCByZWdzaXplID0gR0VUX01PREVfU0laRSAocmVnbW9kZSk7CisgCisgICBpbml0X3N0YXRlLT5wcm9jZXNzZWRfcmVnbm9bcmVnbm9dID0gdHJ1ZTsKK0luZGV4OiBnY2MtNC45LjIvbGliZ2NjL3Vud2luZC1kdzIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2xpYmdjYy91bndpbmQtZHcyLmMKKysrKyBnY2MtNC45LjIvbGliZ2NjL3Vud2luZC1kdzIuYworQEAgLTU1LDEwICs1NSw2IEBACisgI2RlZmluZSBQUkVfR0NDM19EV0FSRl9GUkFNRV9SRUdJU1RFUlMgRFdBUkZfRlJBTUVfUkVHSVNURVJTCisgI2VuZGlmCisgCistI2lmbmRlZiBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTgorLSNkZWZpbmUgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4oUkVHTk8pIChSRUdOTykKKy0jZW5kaWYKKy0KKyAvKiA/Pz8gRm9yIHRoZSBwdWJsaWMgZnVuY3Rpb24gaW50ZXJmYWNlcywgd2UgdGVuZCB0byBnY2NfYXNzZXJ0IHRoYXQgdGhlCisgICAgY29sdW1uIG51bWJlcnMgYXJlIGluIHJhbmdlLiAgRm9yIHRoZSBkd2FyZjIgdW53aW5kIGluZm8gdGhpcyBkb2VzIGhhcHBlbiwKKyAgICBhbHRob3VnaCBzbyBmYXIgaW4gYSBjYXNlIHRoYXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjk1NTk2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitEaXNhYmxlIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIGFuZCBvdGhlciBtdWx0aWxpYiBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUgQUJJLCBhcworbG9uZyBhcyB0aGUgZHluYW1pYyBsb2FkZXIgaXMgcHJlc2VudCBpbiAvbGliLgorCitXZSBzaW1wbHkgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgcnVsZXMgaW4gZ2NjIHRvIGZpbmQgYW5kIGNvbmZpZ3VyZSB0aGUgCitub3JtYWwgbGliZGlyLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMS5vcmlnL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKysrKyBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorQEAgLTIxLDExICsyMSwxMSBAQAorIExJQjFBU01TUkMgICA9IGFhcmNoNjQvbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF9hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UKKyAKKy1BQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSAuPS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKy1NVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKysjTVVMVElMSUJfT1NESVJOQU1FUyA9IC49Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKyAKKyAjIERpc2FibGUgdGhlIG11bHRpbGliIGZvciBsaW51eC1nbnUgdGFyZ2V0cyBmb3IgdGhlIHRpbWUgYmVpbmc7IGZvY3VzCisgIyBvbiB0aGUgYmFyZW1ldGFsIHRhcmdldHMuCistTVVMVElMSUJfT1BUSU9OUyAgICA9CistTVVMVElMSUJfRElSTkFNRVMgICA9CisrI01VTFRJTElCX09QVElPTlMgICAgPQorKyNNVUxUSUxJQl9ESVJOQU1FUyAgID0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDJiYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGNhMDNjZjFiMTMzZDY2ZWI5NzhjNjhmNmRiYzM0NWU5YWFiY2JhODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB1cm9zIDx1cm9zQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IE1vbiwgMzAgSnVuIDIwMTQgMTk6MzA6NTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcjIxMjE3MQorCisqIGV4Y2VwdC5jIChlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCk6IE5ldyBoZWxwZXIKKyBmdW5jdGlvbi4gCShjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMpOiBVc2UKKyBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCB0byAJZW1pdCBFSF9SRUdJT05fRU5EIG5vdGUuIAorICoganVtcC5jIChjbGVhbnVwX2JhcnJpZXJzKTogRG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIAorIGNvcnJlc3BvbmRpbmcgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4KKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjEyMTcxIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2djYy5nbnUub3JnL3ZpZXdjdnMvZ2NjP3ZpZXc9cmV2aXNpb24mcmV2aXNpb249MjEyMTcxXQorU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxiYW9zaGFuLnBhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9leGNlcHQuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrLS0tLS0KKyBnY2MvanVtcC5jICAgfCAgIDE5ICsrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZXhjZXB0LmMgYi9nY2MvZXhjZXB0LmMKK2luZGV4IGRjNWMxZDIuLjdhYzExNGYgMTAwNjQ0CistLS0gYS9nY2MvZXhjZXB0LmMKKysrKyBiL2djYy9leGNlcHQuYworQEAgLTI0NjYsNiArMjQ2NiwyMCBAQCBhZGRfY2FsbF9zaXRlIChydHggbGFuZGluZ19wYWQsIGludCBhY3Rpb24sIGludCBzZWN0aW9uKQorICAgcmV0dXJuIGNhbGxfc2l0ZV9iYXNlICsgY3J0bC0+ZWguY2FsbF9zaXRlX3JlY29yZF92W3NlY3Rpb25dLT5sZW5ndGggKCkgLSAxOworIH0KKyAKKytzdGF0aWMgcnR4CisrZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKHJ0eCBpbnNuKQorK3sKKysgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChpbnNuKTsKKysKKysgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgY29ycmVzcG9uZGluZworKyAgICAgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCisrICBpZiAobmV4dCAmJiBOT1RFX1AgKG5leHQpCisrICAgICAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCisrICAgIGluc24gPSBuZXh0OworKworKyAgcmV0dXJuIGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsIGluc24pOworK30KKysKKyAvKiBUdXJuIFJFR19FSF9SRUdJT04gbm90ZXMgYmFjayBpbnRvIE5PVEVfSU5TTl9FSF9SRUdJT04gbm90ZXMuCisgICAgVGhlIG5ldyBub3RlIG51bWJlcnMgd2lsbCBub3QgcmVmZXIgdG8gcmVnaW9uIG51bWJlcnMsIGJ1dAorICAgIGluc3RlYWQgdG8gY2FsbCBzaXRlIGVudHJpZXMuICAqLworQEAgLTI1NDQsOCArMjU1OCw4IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKKyAJCW5vdGUgPSBlbWl0X25vdGVfYmVmb3JlIChOT1RFX0lOU05fRUhfUkVHSU9OX0JFRywKKyAJCQkJCSBmaXJzdF9ub19hY3Rpb25faW5zbl9iZWZvcmVfc3dpdGNoKTsKKyAJCU5PVEVfRUhfSEFORExFUiAobm90ZSkgPSBjYWxsX3NpdGU7CistCQlub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwKKy0JCQkJCWxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisrCQlub3RlCisrCQkgID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworIAkJZ2NjX2Fzc2VydCAobGFzdF9hY3Rpb24gIT0gLTMKKyAJCQkgICAgfHwgKGxhc3RfYWN0aW9uX2luc24KK0BAIC0yNTY5LDggKzI1ODMsNyBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCisgCQkgICAgZmlyc3Rfbm9fYWN0aW9uX2luc24gPSBOVUxMX1JUWDsKKyAJCSAgfQorIAorLQkJbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCistCQkJCQlsYXN0X2FjdGlvbl9pbnNuKTsKKysJCW5vdGUgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9hY3Rpb25faW5zbik7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworIAkgICAgICB9CisgCitAQCAtMjYxNyw3ICsyNjMwLDcgQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQorIAorICAgaWYgKGxhc3RfYWN0aW9uID49IC0xICYmICEgZmlyc3Rfbm9fYWN0aW9uX2luc24pCisgICAgIHsKKy0gICAgICBub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwgbGFzdF9hY3Rpb25faW5zbik7CisrICAgICAgbm90ZSA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X2FjdGlvbl9pbnNuKTsKKyAgICAgICBOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2p1bXAuYyBiL2djYy9qdW1wLmMKK2luZGV4IDk0MThmNjUuLmE1ZTVmNTIgMTAwNjQ0CistLS0gYS9nY2MvanVtcC5jCisrKysgYi9nY2MvanVtcC5jCitAQCAtMTIxLDE1ICsxMjEsMjYgQEAgcmVidWlsZF9qdW1wX2xhYmVsc19jaGFpbiAocnR4IGNoYWluKQorIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyBjbGVhbnVwX2JhcnJpZXJzICh2b2lkKQorIHsKKy0gIHJ0eCBpbnNuLCBuZXh0LCBwcmV2OworLSAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gbmV4dCkKKysgIHJ0eCBpbnNuOworKyAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKKyAgICAgeworLSAgICAgIG5leHQgPSBORVhUX0lOU04gKGluc24pOworICAgICAgIGlmIChCQVJSSUVSX1AgKGluc24pKQorIAl7CistCSAgcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKKysJICBydHggcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKKyAJICBpZiAoIXByZXYpCisgCSAgICBjb250aW51ZTsKKysKKysJICBpZiAoQ0FMTF9QIChwcmV2KSkKKysJICAgIHsKKysJICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyBjb3JyZXNwb25kaW5nCisrCQkgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCisrCSAgICAgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChwcmV2KTsKKysKKysJICAgICAgaWYgKE5PVEVfUCAobmV4dCkKKysJCSAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCisrCQlwcmV2ID0gbmV4dDsKKysJICAgIH0KKysKKyAJICBpZiAoQkFSUklFUl9QIChwcmV2KSkKKyAJICAgIGRlbGV0ZV9pbnNuIChpbnNuKTsKKyAJICBlbHNlIGlmIChwcmV2ICE9IFBSRVZfSU5TTiAoaW5zbikpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4MjdjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSA2ZWFlM2U2MzdmY2MyMmQyMWI1MWQ0NGQ2MWUzYTljYjQ4MjVlNzc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMzAgT2N0IDIwMTQgMjA6Mzc6MTQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF1QUiBydGwtb3B0aW1pemF0aW9uLzYzMzQ4CisgCitQUiBydGwtb3B0aW1pemF0aW9uLzYzMzQ4CisqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IERvIG5vdCBlbWl0IGV4dHJhIGJhcnJpZXIuCisKK05vdGU6IHRoaXMgcGF0Y2ggaXMgdG8gZml4IHRoZSBzaWRlIGVmZmVjdCBpbnRyb2R1Y2VkIGJ5IHIyMTIxNzEgd2hpY2ggd2FzIHJlcG9ydGVkIGF0OgoraHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMzNDgKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE1NjEzIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2djYy5nbnUub3JnL3ZpZXdjdnMvZ2NjP3ZpZXc9cmV2aXNpb24mcmV2aXNpb249MjE1NjEzXQorU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxiYW9zaGFuLnBhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvZW1pdC1ydGwuYyB8ICAgMTEgLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZW1pdC1ydGwuYyBiL2djYy9lbWl0LXJ0bC5jCitpbmRleCA0NzM2ZjhkLi5hZTY5ZGJkIDEwMDY0NAorLS0tIGEvZ2NjL2VtaXQtcnRsLmMKKysrKyBiL2djYy9lbWl0LXJ0bC5jCitAQCAtMzQyMiw3ICszNDIyLDYgQEAgdHJ5X3NwbGl0IChydHggcGF0LCBydHggdHJpYWwsIGludCBsYXN0KQorIHsKKyAgIHJ0eCBiZWZvcmUgPSBQUkVWX0lOU04gKHRyaWFsKTsKKyAgIHJ0eCBhZnRlciA9IE5FWFRfSU5TTiAodHJpYWwpOworLSAgaW50IGhhc19iYXJyaWVyID0gMDsKKyAgIHJ0eCBub3RlLCBzZXEsIHRlbTsKKyAgIGludCBwcm9iYWJpbGl0eTsKKyAgIHJ0eCBpbnNuX2xhc3QsIGluc247CitAQCAtMzQ0MSwxNCArMzQ0MCw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyAKKyAgIHNwbGl0X2JyYW5jaF9wcm9iYWJpbGl0eSA9IC0xOworIAorLSAgLyogSWYgd2UgYXJlIHNwbGl0dGluZyBhIEpVTVBfSU5TTiwgaXQgbWlnaHQgYmUgZm9sbG93ZWQgYnkgYSBCQVJSSUVSLgorLSAgICAgV2UgbWF5IG5lZWQgdG8gaGFuZGxlIHRoaXMgc3BlY2lhbGx5LiAgKi8KKy0gIGlmIChhZnRlciAmJiBCQVJSSUVSX1AgKGFmdGVyKSkKKy0gICAgeworLSAgICAgIGhhc19iYXJyaWVyID0gMTsKKy0gICAgICBhZnRlciA9IE5FWFRfSU5TTiAoYWZ0ZXIpOworLSAgICB9CistCisgICBpZiAoIXNlcSkKKyAgICAgcmV0dXJuIHRyaWFsOworIAorQEAgLTM1OTQsOCArMzU4NSw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyAgIHRlbSA9IGVtaXRfaW5zbl9hZnRlcl9zZXRsb2MgKHNlcSwgdHJpYWwsIElOU05fTE9DQVRJT04gKHRyaWFsKSk7CisgCisgICBkZWxldGVfaW5zbiAodHJpYWwpOworLSAgaWYgKGhhc19iYXJyaWVyKQorLSAgICBlbWl0X2JhcnJpZXJfYWZ0ZXIgKHRlbSk7CisgCisgICAvKiBSZWN1cnNpdmVseSBjYWxsIHRyeV9zcGxpdCBmb3IgZWFjaCBuZXcgaW5zbiBjcmVhdGVkOyBieSB0aGUKKyAgICAgIHRpbWUgY29udHJvbCByZXR1cm5zIGhlcmUgdGhhdCBpbnNuIHdpbGwgYmUgZnVsbHkgc3BsaXQsIHNvCistLSAKKzEuNy4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE5ZmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gNWMwMDkyMDcwMjUzMTEzY2YwZDljNDVlYWNjODg0YjNlY2MzNGQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGpzbTI4IDxqc20yOEAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBTYXQsIDI1IE9jdCAyMDE0IDAwOjIzOjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIE9ubHkgYWxsb3cgZTUwMCBkb3VibGUgaW4gU1BFX1NJTURfUkVHTk9fUCByZWdpc3RlcnMuCisKK3JzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIGFsbG93cyBTUEUgdmVjdG9ycyBpbiBzaW5nbGUKK3JlZ2lzdGVycyBzYXRpc2Z5aW5nIFNQRV9TSU1EX1JFR05PX1AgKGkuZS4gcmVnaXN0ZXIgbnVtYmVycyAwIHRvCiszMSkuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZyB0ZXN0IGZvciBlNTAwIGRvdWJsZSB0cmVhdHMgYWxsCityZWdpc3RlcnMgYXMgYmVpbmcgYWJsZSB0byBzdG9yZSBhIDY0LWJpdCB2YWx1ZSwgcmF0aGVyIHRoYW4ganVzdAordGhvc2UgR1BScy4KKworTG9naWNhbGx5IHRoaXMgaW5jb25zaXN0ZW5jeSBpcyB3cm9uZzsgaW4gYWRkaXRpb24sIGl0IGNhdXNlcyBwcm9ibGVtcwordW53aW5kaW5nIGZyb20gc2lnbmFsIGhhbmRsZXJzLiAgbGludXgtdW53aW5kLmggdXNlcworQVJHX1BPSU5URVJfUkVHTlVNIGFzIGEgcGxhY2UgdG8gc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gYQorc2lnbmFsIGhhbmRsZXIsIGJ1dCB0aGlzIGxvZ2ljIGluIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsCityZXN1bHRzIGluIHRoYXQgYmVpbmcgY29uc2lkZXJlZCBhbiA4LWJ5dGUgcmVnaXN0ZXIsIHJlc3VsdGluZyBpbgorYXNzZXJ0aW9uIGZhaWx1cmVzLgorKDxodHRwczovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDkvbXNnMDI2MjUuaHRtbD4gZmlyc3QKK25lZWRzIHRvIGJlIGFwcGxpZWQgZm9yIHVud2luZGluZyB0byB3b3JrIGluIGdlbmVyYWwgb24gZTUwMC4pICBUaGlzCitwYXRjaCBtYWtlcyByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCBoYW5kbGUgdGhlIGU1MDAgZG91YmxlCitjYXNlIGNvbnNpc3RlbnRseSB3aXRoIFNQRSB2ZWN0b3JzLgorCitUZXN0ZWQgd2l0aCBubyByZWdyZXNzaW9ucyB3aXRoIGNyb3NzIHRvIHBvd2VycGMtbGludXgtZ251c3BlIChnaXZlbgordGhlIGFmb3JlbWVudGlvbmVkIHBhdGNoIGFwcGxpZWQpLiAgRmFpbHVyZXMgb2Ygc2lnbmFsIGhhbmRsaW5nCit1bndpbmRpbmcgdGVzdHMgc3VjaCBhcyBnY2MuZGcvY2xlYW51cC17OCw5LDEwLDExfS5jIGFyZSBmaXhlZCBieSB0aGlzCitwYXRjaC4KKworCSogY29uZmlnL3JzNjAwMC9yczYwMDAuYyAocnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwpOiBEbworCW5vdCBhbGxvdyBlNTAwIGRvdWJsZSBpbiByZWdpc3RlcnMgbm90IHNhdGlzeWZpbmcKKwlTUEVfU0lNRF9SRUdOT19QLgorCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNjY4OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICAgICAgICAgIHwgNiArKysrKysKKyBnY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKK0BAIC0xNzAzLDcgKzE3MDMsNyBAQCByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCAoaW50IHJlCisgICAgICBTQ21vZGUgc28gYXMgdG8gcGFzcyB0aGUgdmFsdWUgY29ycmVjdGx5IGluIGEgcGFpciBvZgorICAgICAgcmVnaXN0ZXJzLiAgKi8KKyAgIGVsc2UgaWYgKFRBUkdFVF9FNTAwX0RPVUJMRSAmJiBGTE9BVF9NT0RFX1AgKG1vZGUpICYmIG1vZGUgIT0gU0Ntb2RlCistCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkpCisrCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkgJiYgU1BFX1NJTURfUkVHTk9fUCAocmVnbm8pKQorICAgICByZWdfc2l6ZSA9IFVOSVRTX1BFUl9GUF9XT1JEOworIAorICAgZWxzZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDhjNjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKKworVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAorZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCitidWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAorc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQorZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCitwaWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYworY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9nY2MvTWFrZWZpbGUuaW4JMjAxNC0xMi0yMyAxMTo1NzozMy4zMjc4NzMzMzEgKzAwMDAKKysrKyBiL2djYy9NYWtlZmlsZS5pbgkyMDE1LTAxLTIxIDExOjMyOjM1LjQ0NzMwNTM5NCArMDAwMAorQEAgLTU4Nyw2ICs1ODcsNyBAQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI1MzQsNiArMjUzNSw3IEBACisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMTMgMTc6NDA6MjYuMTMxMDEyNzI1ICswMDAwCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMjEgMTE6MzA6MDguOTI4NDI2NDkyICswMDAwCitAQCAtNTksNiArNTksMTAgQEAKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggZjk0YWUxNy4uZDk4YjQwYiAxMDA2NDQKKy0tLSBhL2djYy9kZWZhdWx0cy5oCisrKysgYi9nY2MvZGVmYXVsdHMuaAorQEAgLTEzOTAsNCArMTM5MCwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAKKyAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5ZjBiNzgxLi4xNzRmY2E4IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMTg5LDEzICsxMTg5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDhiZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gODYxYmNmZDRhZTgxNGYzNTFlMGM2NjhlZTI2ZDAxZDEzMzFlMDQyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE1OjI3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzYvMzddIFVzZSBTWVNURU1MSUJTX0RJUiByZXBsYWNlbWVudCBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcKKyBiYXNlX2xpYmRpcgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAorICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfS5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0uc28uMSIKKyAKKyAjZGVmaW5lIENQUF9TUEVDICIle3B0aHJlYWQ6LURfUkVFTlRSQU5UfSIKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZmE0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTk4IEBACitCZWluZyBhYmxlIHRvIGJ1aWxkIGEgbmF0aXZlc2RrIGdjYyBpcyB1c2VmdWwsIHBhcnRpY3VsYXJseSBpbiBjYXNlcword2hlcmUgdGhlIGhvc3QgY29tcGlsZXIgbWF5IGJlIG9mIGFuIGluY29tcGF0aWJsZSB2ZXJzaW9uIChvciBhIDMyCitiaXQgY29tcGlsZXIgaXMgbmVlZGVkKS4KKworU2FkbHksIGJ1aWxkaW5nIG5hdGl2ZXNkay1nY2MgaXMgbm90IHN0cmFpZ2h0IGZvcndhcmQuIFdlIGluc3RhbGwKK25hdGl2ZXNkay1nY2MgaW50byBhIHJlbG9jYXRhYmxlIGxvY2F0aW9uIGFuZCB0aGlzIG1lYW5zIHRoYXQgaXRzCitsaWJyYXJ5IGxvY2F0aW9ucyBjYW4gY2hhbmdlLiAiTm9ybWFsIiBzeXNyb290IHN1cHBvcnQgZG9lc24ndCBoZWxwCitpbiB0aGlzIGNhc2Ugc2luY2UgdGhlIHZhbHVlcyBvZiBwYXRocyBsaWtlICJsaWJkaXIiIGNoYW5nZSwgbm90IGp1c3QKK2Jhc2Ugcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHN5c3RlbS4KKworSW4gb3JkZXIgdG8gaGFuZGxlIHRoaXMgd2UgZG8gdHdvIHRoaW5nczoKKworYSkgQWRkICVyIGludG8gc3BlYyBmaWxlIG1hcmt1cCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgaW5qZWN0ZWQgcGF0aHMKKyAgIHN1Y2ggYXMgU1lTVEVNTElCU19ESVIgKHNlZSBnY2NfbXVsdGlsaWJfc2V0dXAoKSkuCitiKSBBZGQgb3RoZXIgcGF0aHMgd2hpY2ggbmVlZCByZWxvY2F0aW9uIGludG8gYSAuZ2NjcmVsb2NwcmVmaXggc2VjdGlvbgorICAgd2hpY2ggdGhlIHJlbG9jYXRpb24gY29kZSB3aWxsIG5vdGljZSBhbmQgYWRqdXN0IGF1dG9tYXRpY2FsbHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxNS83LzI4CitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1ZmQzZDBhLi4yZGUyOWFhIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMjAsNiArMTIwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IFRBUkdFVF9TWVNURU1fUk9PVDsKKyAjZWxzZQorIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSAwOworICNlbmRpZgorKyAKKytzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOworIAorIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KKyAKK0BAIC0zODQsNiArMzg2LDcgQEAgb3Igd2l0aCBjb25zdGFudCB0ZXh0IGluIGEgc2luZ2xlIGFyZ3VtZW50LgorICAlRyAgICAgcHJvY2VzcyBMSUJHQ0NfU1BFQyBhcyBhIHNwZWMuCisgICVSICAgICBPdXRwdXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0X3N5c3RlbV9yb290IGFuZAorICAgICAgICAgdGFyZ2V0X3N5c3Jvb3Rfc3VmZml4LgorKyAlciAgICAgT3V0cHV0IHRoZSBiYXNlIHBhdGggdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeAorICAlUyAgICAgcHJvY2VzcyBTVEFSVEZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgUyBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVFICAgICBwcm9jZXNzIEVOREZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgRSBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVDICAgICBwcm9jZXNzIENQUF9TUEVDIGFzIGEgc3BlYy4KK0BAIC0xMjE4LDEwICsxMjIxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgICAgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBiZWNhdXNlLCBpbiB0aGF0IGNhc2UsIHdlIGtub3cgd2hlcmUgdGhlCisgICAgY29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgdXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoYXQKKyAgICBsb2NhdGlvbiBpbnN0ZWFkLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfZXhlY19wcmVmaXggPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfbGliZXhlY19wcmVmaXggPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfYmluZGlyX3ByZWZpeCA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2V4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2JpbmRpcl9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKytzdGF0aWMgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7CisgCisgLyogRm9yIG5hdGl2ZSBjb21waWxlcnMsIHRoZXNlIGFyZSB3ZWxsLWtub3duIHBhdGhzIGNvbnRhaW5pbmcKKyAgICBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IgY3Jvc3MKK0BAIC0xMjI5LDkgKzEyMzIsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX2V4ZWNfcHJlZml4ID0gTURfRVhFQ19QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXggPSBNRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4XzEgPSBNRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMQorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMjsKKyAKKyAvKiBBIHJlbGF0aXZlIHBhdGggdG8gYmUgdXNlZCBpbiBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiB0b29scworQEAgLTUzMDUsNiArNTMwOCwxMSBAQCBkb19zcGVjXzEgKGNvbnN0IGNoYXIgKnNwZWMsIGludCBpbnN3aXRjaCwgY29uc3QgY2hhciAqc29mdF9tYXRjaGVkX3BhcnQpCisgCSAgICAgIH0KKyAJICAgIGJyZWFrOworIAorKyAgICAgICAgICBjYXNlICdyJzoKKysgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2ssIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgsCisrCQkgICAgICBzdHJsZW4gKHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgpKTsKKysgICAgICAgICAgICBicmVhazsKKysKKyAJICBjYXNlICdTJzoKKyAJICAgIHZhbHVlID0gZG9fc3BlY18xIChzdGFydGZpbGVfc3BlYywgMCwgTlVMTCk7CisgCSAgICBpZiAodmFsdWUgIT0gMCkKKworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCitpbmRleCBkYWQ2OWU2Li5jZjQzZjI4IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTM1LDYgKzM1LDMwIEBACisgIyB1bmRlZiBDUk9TU19JTkNMVURFX0RJUgorICNlbmRpZgorIAorK3N0YXRpYyBjaGFyIEdQTFVTUExVU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR0NDX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdDQ19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVDsKKysjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBMT0NBTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBMT0NBTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgUFJFRklYX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFBSRUZJWF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBGSVhFRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBGSVhFRF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBDUk9TU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBDUk9TU19JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFRPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gVE9PTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisrc3RhdGljIGNoYXIgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUjsKKysjZW5kaWYKKysKKyBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjaWZkZWYgSU5DTFVERV9ERUZBVUxUUworID0gSU5DTFVERV9ERUZBVUxUUzsKK0BAIC00MiwzOCArNjYsMzggQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgPSB7CisgI2lmZGVmIEdQTFVTUExVU19JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgZ2VuZXJpYyBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyB0YXJnZXQtZGVwZW5kZW50IGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgYmFja3dhcmQgYW5kIGRlcHJlY2F0ZWQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworLSAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBHQ0NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKy0gICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVIsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAyIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCistICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgUFJFRklYX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZml4aW5jbHVkZXMuICAqLworLSAgICB7IEZJWEVEX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwKKysgICAgeyBGSVhFRF9JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsCisgICAgICAgLyogQSBtdWx0aWxpYiBzdWZmaXggbmVlZHMgYWRkaW5nIGlmIGRpZmZlcmVudCBtdWx0aWxpYnMgdXNlCisgCSBkaWZmZXJlbnQgaGVhZGVycy4gICovCisgI2lmZGVmIFNZU1JPT1RfSEVBREVSU19TVUZGSVhfU1BFQworQEAgLTg1LDE2ICsxMDksMTYgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2VuZGlmCisgI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisgICAgIC8qIE9uZSBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IENST1NTX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisgICAgIC8qIEFub3RoZXIgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgVE9PTF9JTkNMVURFX0RJUlZBUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKyAgICAgLyogL3Vzci9pbmNsdWRlIGNvbWVzIGRlYWQgbGFzdC4gICovCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgIH07CitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuaCBiL2djYy9jcHBkZWZhdWx0LmgKK2luZGV4IDMwYjZmZWQuLjJlZjk2YjcgMTAwNjQ0CistLS0gYS9nY2MvY3BwZGVmYXVsdC5oCisrKysgYi9nY2MvY3BwZGVmYXVsdC5oCitAQCAtMzMsNyArMzMsOCBAQAorIAorIHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUKKyB7CistICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrICBjb25zdCBjaGFyICpmbmFtZTsgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKworICAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIAkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLworICAgY29uc3QgY2hhciBjcGx1c3BsdXM7CQkvKiBPbmx5IGxvb2sgaGVyZSBpZiB3ZSdyZSBjb21waWxpbmcgQysrLiAgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1Njk4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK1NlYXJjaCB0YXJnZXQgc3lzcm9vdCBnY2MgdmVyc2lvbiBzcGVjaWZpYyBkaXJzIHdpdGggbXVsdGlsaWIuCisKK1dlIGluc3RhbGwgdGhlIGdjYyBsaWJyYXJpZXMgKHN1Y2ggYXMgY3J0YmVnaW4ucCkgaW50bworPHN5c3Jvb3Q+PGxpYmRpcj4vPHRhcmdldC1zeXM+LzUuMi4wLword2hpY2ggaXMgYSBkZWZhdWx0IHNlYXJjaCBwYXRoIGZvciBHQ0MgKGFrYSBtdWx0aV9zdWZmaXggaW4gdGhlIAorY29kZSBiZWxvdykuIDx0YXJnZXQtc3lzPiBpcyAnbWFjaGluZScgaW4gZ2NjJ3MgdGVybWlub2xvZ3kuIFdlIHVzZQordGhlc2UgZGlyZWN0b3JpZXMgc28gdGhhdCBtdWx0aXBsZSBnY2MgdmVyc2lvbnMgY291bGQgaW4gdGhlb3J5IAorY28tZXhpc3Qgb24gdGFyZ2V0LgorCitXZSBvbmx5IHdhbnQgdG8gYnVpbGQgb25lIGdjYy1jcm9zcy1jYW5hZGlhbiBwZXIgYXJjaCBhbmQgaGF2ZSB0aGlzIHdvcmsgCitmb3IgYWxsIG11bHRpbGlicy4gPHRhcmdldC1zeXM+IGNhbiBiZSBoYW5kbGVkIGJ5IG1hcHBpbmcgdGhlIG11bHRpbGliCis8dGFyZ2V0LXN5cz4gdG8gdGhlIG9uZSB1c2VkIGJ5IGdjYy1jcm9zcy1jYW5hZGlhbiwgZS5nLiBtaXBzNjQtcG9sa21sbGliMzItbGludXggCitpcyBzeW1saW5rZWQgdG8gYnkgbWlwczY0LXBva3ktbGludXguCisKK1RoZSBkZWZhdWx0IGdjYyBzZWFyY2ggcGF0aCBpbiB0aGUgdGFyZ2V0IHN5c3Jvb3QgZm9yIGEgImxpYjY0IiBtdXRsaWxpYiBpczoKKworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCit3aGljaCBtZWFucyB0aGF0IHRoZSBsaWIzMiBjcnRiZWdpbi5vIHdpbGwgYmUgZm91bmQgYW5kIHRoZSBsaWI2NCBvbmVzCit3aWxsIG5vdCB3aGljaCBsZWFkcyB0byBjb21waWxlciBmYWlsdXJlcy4KKworVGhpcyBwYXRjaCBpbmplY3RzIGEgbXVsdGlsaWIgdmVyc2lvbiBvZiB0aGF0IHBhdGggZmlyc3Qgc28gdGhlIGxpYjY0CitiaW5hcmllcyBjYW4gYmUgZm91bmQgZmlyc3QuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIHNlYXJjaCBwYXRoIGJlY29tZXM6CisKKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworUlAgMjAxNS83LzMxCisKK0luZGV4OiBnY2MtNS4yLjAvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTUuMi4wLm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTUuMi4wL2djYy9nY2MuYworQEAgLTIzMDUsNyArMjMwNSw3IEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAorICAgICAgIGlmIChwYXRoID09IE5VTEwpCisgCXsKKyAJICBsZW4gPSBwYXRocy0+bWF4X2xlbiArIGV4dHJhX3NwYWNlICsgMTsKKy0JICBsZW4gKz0gTUFYIChNQVggKHN1ZmZpeF9sZW4sIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKysJICBsZW4gKz0gTUFYICgoc3VmZml4X2xlbiArIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKyAJICBwYXRoID0gWE5FV1ZFQyAoY2hhciwgbGVuKTsKKyAJfQorIAorQEAgLTIzMTcsNiArMjMxNywzMyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAJICAvKiBMb29rIGZpcnN0IGluIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkuICAqLworIAkgIGlmICghc2tpcF9tdWx0aV9kaXIpCisgCSAgICB7CisrCSAgICAgIGlmICghKHBsLT5vc19tdWx0aWxpYiA/IHNraXBfbXVsdGlfb3NfZGlyIDogc2tpcF9tdWx0aV9kaXIpKQorKwkgICAgICAgIHsKKysJICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNfbXVsdGk7CisrCSAgICAgICAgICBzaXplX3QgdGhpc19tdWx0aV9sZW47CisrCisrCSAgICAgICAgICBpZiAocGwtPm9zX211bHRpbGliKQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9vc19kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX29zX2Rpcl9sZW47CisrCQkgICAgfQorKwkgICAgICAgICAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX2Rpcl9sZW47CisrCQkgICAgfQorKworKwkgICAgICAgICAgLyogTG9vayBpbiBtdWx0aWxpYiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5IGZpcnN0ICovCisrCSAgICAgICAgICBpZiAodGhpc19tdWx0aV9sZW4pCisrCSAgICAgICAgICAgIHsKKysJCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgdGhpc19tdWx0aSwgdGhpc19tdWx0aV9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICBtZW1jcHkgKHBhdGggKyBsZW4gKyB0aGlzX211bHRpX2xlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworKwkgICAgICAgICAgICAgICAgaWYgKHJldCkKKysJCSAgICAgICAgICBicmVhazsKKysJICAgICAgICAgICAgfQorKwkgICAgICAgIH0KKysKKyAJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKyAJICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworIAkgICAgICBpZiAocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTFmNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMKQEAgLTAsMCArMSwxMjAgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjUuMi4wIgorCisjU05BUCA9ICI1LTIwMTUwNDA1IgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjUuMi4wIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNS4yOiR7RklMRV9ESVJOQU1FfS9nY2MtNS4yL2JhY2twb3J0OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisjQkFTRVVSSSA9ICJodHRwOi8vd3d3Lm5ldGd1bGwuY29tL2djYy9zbmFwc2hvdHMvJHtTTkFQfS9nY2MtJHtTTkFQfS50YXIuYnoyIgorQkFTRVVSSSA9ICIke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiYTUxYmNmZWIzZGE3ZGQ0YzYyM2UyNzIwN2VkNDM0NjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWY4MzViMDRiNWY3ZGQ0ZjRkMmRjOTYxOTBlYzE2MjFiOGQ4OWYyZGM2ZjYzOGY5ZjhiYzFiMTAxNGJhOGNhZCIKKworU1JDX1VSSSA9ICJcCisgICAgICAgICAgICR7QkFTRVVSSX0gXAorICAgICAgICAgICAke0JBQ0tQT1JUU30gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWxpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOS1leHBvcnQtQ1BQLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM3LXByNjU3NzkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICIKKworQkFDS1BPUlRTID0gIiIKKyNTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7U05BUH0iCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCisjIExhbmd1YWdlIE92ZXJyaWRlcworRk9SVFJBTiA9ICIiCitKQVZBID0gIiIKKworTFRPID0gIi0tZW5hYmxlLWx0byIKKworRVhUUkFfT0VDT05GX0JBU0UgPSAiXAorICAgICR7TFRPfSBcCisgICAgLS1lbmFibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3NjZmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGEwZmVlMGNlZTNkNGJkNGFhYjFlM2E4ZTA0NDQ2Zjk5ZDkxOGM0ZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgMiArLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNzYxNmY4OC4uNTBlN2NiYyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzQ2NCw3ICs3NDY0LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGM4NWEwOC4uZjM0YWY3ZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzEwNCw3ICszMTA0LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAyLXVjbGliYy1jb25mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQzM2EwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDc2MzUyNDhhNGM5YjUxZDcyM2Q3MjFhY2FlZWI1ZjJmMTE5NTc5ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzM1XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8IDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCA3NDNkOTUxLi5hZTRlYTYwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhMjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gM2FlZTU4YWQwNDNhZjMzYWIwMGM5Y2Q3YmM4OGYwY2FkZTgzZjIzNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8IDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8IDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggNmRhNWYyMi4uMmY4NWMyZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggZWUzZWY4Ni4uN2ZkNTQ4NSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCBmZDUyYjczLi4yNjI3Y2YzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5NDdhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gOWY3M2UwNjMxNWM5NDYyOWZiOTAyYmQ5NDIxOTY2N2NmODMwN2I4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNyArKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDExNyArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyAgICAgICAgfCAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAzMDAgKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgNjkyICsrKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3NSArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCAgICAgICB8ICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCBhMWUzMDFmLi4wZmU5MzI2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTE5ODMsNiArMTk4Myw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjE2Nyw2ICsyMTcwLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGY1YjI4ZjQuLmZiYWQ2NjcgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU5MTMsNiArMTU5MTMsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYxOTEsNiArMTYxOTQsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDA2YjVkNDcuLjdkM2Y4MzUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCBhYTFiMmZhLi40NWM0NjE3IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK0BAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzA1M2VhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjU3IEBACitGcm9tIGE4ZTY4MzkxN2EzZThhNjY0MjYzOWU2NWMwNmQ0ZDRmYzQ2Y2M4YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDA1LzM1XSB1Y2xpYmMtbG9jYWxlLW5vX194CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCA0NSArKysrKysrKysrKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNCAtLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMSArCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgNyAtLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgNyAtLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgNyArLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxOCArKysrLS0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA0IC0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDMgLS0KKyAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmCisgCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKKysjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKKysjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAorKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKKysjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCisrIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCisrIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKKysjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKKysjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKysKKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAorKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAorKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKKysjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAorKyMgZW5kaWYKKysKKysjZWxzZQorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCisrIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KKysvLworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQorKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICB0ZW1wbGF0ZTw+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorIHsKKyAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyB9CisrI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKyAjZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK2luZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTM4LDEzICszOCw2IEBACisgI3VuZGVmIF9MSUJDCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK2luZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7CistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAgIH0KKyAKK0BAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICB7CisgICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAgLy8gYmUgdXNlZC4KKy0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTQwLDkgKzQwLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTEyYTJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIGNkYjllOWM5NDQwYmViNTliYzIwNDc2ZWVhNWE5Y2YyNTM4Y2QxOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDA2LzM1XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgIDQgKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOGI3OTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDI0NGI5ZDFiNWNjNmQ1MzgyOTM1MTkyOTk4NTMxZWU3MGFmYjI2MmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgIDMgKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgNzQgKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgNDIgKysrKysrLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCA1MSArKysrKysrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8IDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDM0ICsrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAxOCArKysrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8IDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmY2YjE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwYTgwZjYwZGUwOGJkNTgyOWNhMWIzNzU4ZjcwYTkyYjYxZGRhMTQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCA2YjM4ZjJkLi5mY2E5OGZmIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWIyYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDdiN2NhZjQzMDVhNTRmYTRkZmRkMGVmZDViZDQxY2I5NGNiY2Y0M2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IDM3ZjAxY2EuLmYwMGMwNmQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTE0NCw3ICsxNDQsNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDJlZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTkyIEBACitGcm9tIGQxZTg1YTM2M2ZmY2QyNTllOWIwODQxYjg1Y2ExMGFmMmYzMWJkNzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDEwLzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9jb21tb24ub3B0ICAgICAgfCAgNCArKysrCisgZ2NjL2NvbmZpZy5pbiAgICAgICB8ICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAxNiArKysrKysrKysrKysrKysrCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8IDEwICsrKysrKysrKysKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgIDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8IDE5ICsrKysrKysrKysrKysrKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9jb21tb24ub3B0IGIvZ2NjL2NvbW1vbi5vcHQKK2luZGV4IGI0OWFjNDYuLjc4M2QyMzEgMTAwNjQ0CistLS0gYS9nY2MvY29tbW9uLm9wdAorKysrIGIvZ2NjL2NvbW1vbi5vcHQKK0BAIC02MjMsNiArNjIzLDEwIEBAIFdyZXR1cm4tbG9jYWwtYWRkcgorIENvbW1vbiBWYXIod2Fybl9yZXR1cm5fbG9jYWxfYWRkcikgSW5pdCgxKSBXYXJuaW5nCisgV2FybiBhYm91dCByZXR1cm5pbmcgYSBwb2ludGVyL3JlZmVyZW5jZSB0byBhIGxvY2FsIG9yIHRlbXBvcmFyeSB2YXJpYWJsZS4KKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcuaW4gYi9nY2MvY29uZmlnLmluCitpbmRleCBmMmVkMzAxLi5mMjkwYzZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5pbgorKysrIGIvZ2NjL2NvbmZpZy5pbgorQEAgLTE2OCw2ICsxNjgsMTIgQEAKKyAjZW5kaWYKKyAKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzICovCisrI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysjZW5kaWYKKysKKysKKyAvKiBEZWZpbmUgaWYgeW91IHdhbnQgYWxsIG9wZXJhdGlvbnMgb24gUlRMICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCisgICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5NTIzNzczLi4xODE3NDhlIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTkzMiw2ICs5MzIsNyBAQCB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV9saW5rX211dGV4CisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2hvc3Rfc2hhcmVkCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKK0BAIC0xNjYxLDYgKzE2NjIsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWVuYWJsZS1ob3N0LXNoYXJlZCAgICBidWlsZCBob3N0IGNvZGUgYXMgc2hhcmVkIGxpYnJhcmllcworICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKK0BAIC0yODA4Nyw2ICsyODA5MCwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNjhiMGVlOC4uOGIwNzA3OCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC01NTcxLDYgKzU1NzEsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicywKKyAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICAgICAgWzFdLAorKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgQUNfU1VCU1Qoc3ViZGlycykKKyBBQ19TVUJTVChzcmNkaXIpCitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDUyMGMyYzUuLjBkZjhhNDcgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjY5LDYgKzI2OSw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgIC1Xbm8tc2hhZG93LWl2YXIgQGdvbAorIC1Xc2hpZnQtY291bnQtbmVnYXRpdmUgLVdzaGlmdC1jb3VudC1vdmVyZmxvdyBAZ29sCitAQCAtNDQzMiw2ICs0NDMzLDE0IEBAIG1hZGUgdXAgb2YgZGF0YSBvbmx5IGFuZCB0aHVzIHJlcXVpcmVzIG5vIHNwZWNpYWwgdHJlYXRtZW50LiAgQnV0LCBmb3IKKyBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sgdG8gYmUKKyBtYWRlIGV4ZWN1dGFibGUgaW4gb3JkZXIgZm9yIHRoZSBwcm9ncmFtIHRvIHdvcmsgcHJvcGVybHkuCisgCisrQGl0ZW0gLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQG9waW5kZXggV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstSX0gb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0KKytkaXJlY3RvcmllcyBzdWNoIGFzIEBmaWxley91c3IvaW5jbHVkZX0gd2hlbiBjcm9zcyBjb21waWxpbmcuICBUaGlzCisrb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2gKKytkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0IGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgdGhlIHRhcmdldAorK3N5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KKysKKyBAaXRlbSAtV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV25vLWZsb2F0LWVxdWFsCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBkOTU2YzM2Li42NzViY2MxIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC04MzUsNiArODM1LDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICIle2Z1c2UtbGQ9KjotZnVzZS1sZD0lKn0gIiBMSU5LX0NPTVBSRVNTX0RFQlVHX1NQRUMgXAorICAgICIlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fSAiIFZUQUJMRV9WRVJJRklDQVRJT05fU1BFQyAiIFwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgIiBDSEtQX1NQRUMgIiBcCisgICAgICV7Zm9wZW5hY2N8Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggNmM1NGNhNi4uY2MwYzkyMSAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODMsNiArMzg0LDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgCX0KKyAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKKyAgICAgfQorKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgeworKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKKysKKysgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKKysgICAgICAgICB7CisrICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKysgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKysgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKKysgICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjdkOTg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBmMTU4ZmNjMDg0ZTg4YjFkOGQxZWNmNWIwMDVkMzc3NzY1YWVmMTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8zNV0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IGNjMGM5MjEuLjBiYzFmNjcgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzk0LDcgKzM5NCw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZmNhNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gYTU0MjM5Y2JkYzZmOTNjNmQ3NGVhNmIwNzhmMTQ3MDc3MGM0ZjVhYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDUwZTdjYmMuLjZiOTc2OTMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY3MzMsNiArNjczMywzOCBAQCBmaQorIAorIAorIAorKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCisrIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKKysjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgorKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCisrIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCisrIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KKytpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisgIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCisgIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KKyBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdjMDY2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbSBkNTE1MWJlYmQwNzllOTgxZGM3MTBmMmEwMzE4MzBkODljYjFlNzJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTA6MDYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8zNV0gNjQtYml0IG11bHRpbGliIGhhY2suCisKK0dDQyBoYXMgaW50ZXJuYWwgbXVsdGlsaWIgaGFuZGxpbmcgY29kZSBidXQgaXQgYXNzdW1lcyBhIHZlcnkgc3BlY2lmaWMgcmlnaWQgZGlyZWN0b3J5CitsYXlvdXQuIFRoZSBidWlsZCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlsaWIgbGF5b3V0IGlzIHZlcnkgZ2VuZXJpYyBhbmQgYWxsb3dzCitjb21wbGV0ZSBjdXN0b21pc2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorCitUaGlzIHBhdGNoIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byBhbGxvdyBhbnkgY3VzdG9tIGRpcmVjdG9yaWVzIHRvIGJlIHBhc3NlZCBpbnRvIGdjYworYW5kIGhhbmRsZWQgY29ycmVjdGx5LiBJdCBmb3JjZXMgZ2NjIHRvIHVzZSB0aGUgYmFzZV9saWJkaXIgKHdoaWNoIGlzIHRoZSBjdXJyZW50CitkaXJlY3RvcnksICIuIikuIFdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgZWFjaCBtdWx0aWxpYiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgd2UgZG9uJ3QKK2tub3cgd2hpY2ggY29tcGlsZXIgb3B0aW9ucyBtYXkgYmUgYmVpbmcgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLiBTaW5jZSB3ZSBoYXZlIGEgY29tcGlsZXIKK3BlciBtdWxpdGxpYiBhdCB0aGlzIHBvaW50IHRoYXQgaXNuJ3QgYW4gaXNzdWUuCisKK1RoZSBvbmUgcHJvYmxlbSBpcyB0aGUgdGFyZ2V0IGNvbXBpbGVyIGlzIG9ubHkgZ29pbmcgdG8gd29yayBmb3IgdGhlIGRlZmF1bHQgbXVsdGxpbGliIGF0Cit0aGlzIHBvaW50LiBJZGVhbGx5IHdlJ2QgZmlndXJlIG91dCB3aGljaCBtdWx0aWxpYnMgd2VyZSBiZWluZyBlbmFibGVkIHdpdGggd2hpY2ggcGF0aHMKK2FuZCBiZSBhYmxlIHRvIHBhdGNoIHRoZXNlIGVudHJpZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBjb3JyZWN0IHBhdGhzIGJ1dCB0aGlzIHdlCitkb24ndCBoYXZlIHN1Y2ggY29kZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGUgdGFyZ2V0IGdjYyByZWNpcGUgc2hvdWxkIGRvCithbmQgb3ZlcnJpZGUgdGhlc2UgcGxhdGZvcm0gZGVmYXVsdHMgaW4gaXRzIGJ1aWxkIGNvbmZpZy4KKworUlAgMTUvOC8xMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRWx2aXMgRG93c29uIDxlbHZpcy5kb3dzb25AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgICB8ICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8IDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgNSArKy0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgYi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitpbmRleCBmNmRiYjc4Li5kNzcwZGE1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAoraW5kZXggN2U5NjQwNi4uYjcyZGNiMCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitpbmRleCBiNmIzNTFkLi4xZDViMzdhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiwxMCArMjYsOSBAQAorICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgorIAorIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgorLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKKytNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgorIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCistTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQorK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKyAKKyByczYwMDAtbGludXgubzogJChzcmNkaXIpL2NvbmZpZy9yczYwMDAvcnM2MDAwLWxpbnV4LmMKKyAJJChDT01QSUxFKSAkPAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0ZmU0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorRnJvbSBkN2I0MmQ5M2QwNzdiMjUyM2MyNmYwZGZmMGI2YzQ0ZmRmZmY5ZDNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8IDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgOCArKysrKysrLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggOTgzZjRhOC4uOTY5MjRmNiAxMDA2NDQKKy0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAorKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitAQCAtMTU0Myw2ICsxNTQzLDEwIEBAIG5vc3RkaW5jKysKKyBDKysgT2JqQysrCisgRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrCisgCisrbm9zdGRsaWIrKworK0RyaXZlcgorK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKKysKKyBvCisgQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCisgOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKK2RpZmYgLS1naXQgYS9nY2MvY3AvZysrc3BlYy5jIGIvZ2NjL2NwL2crK3NwZWMuYworaW5kZXggNjUzNmQ3ZS4uZjU3YTVkNCAxMDA2NDQKKy0tLSBhL2djYy9jcC9nKytzcGVjLmMKKysrKyBiL2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqKmluX2RlY29kZWRfb3B0aW9ucywKKyAgICAgICBzd2l0Y2ggKGRlY29kZWRfb3B0aW9uc1tpXS5vcHRfaW5kZXgpCisgCXsKKyAJY2FzZSBPUFRfbm9zdGRsaWI6CisrCWNhc2UgT1BUX25vc3RkbGliX186CisgCWNhc2UgT1BUX25vZGVmYXVsdGxpYnM6CisgCSAgbGlicmFyeSA9IC0xOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitpbmRleCAwZGY4YTQ3Li43Mzg1NmQwIDEwMDY0NAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTE5NSw2ICsxOTUsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisgLWZ2dGFibGUtdmVyaWZ5PUBye1t9c3RkQHJ7fH1wcmVpbml0QHJ7fH1ub25lQHJ7XX0gQGdvbAorIC1mdnR2LWNvdW50cyAtZnZ0di1kZWJ1ZyBAZ29sCisrLW5vc3RkbGliKysgQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAorIC1XYWJpPUB2YXJ7bn0gIC1XYWJpLXRhZyAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ4OCw3ICs0ODksNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorIC1zdGF0aWMtbGlibXB4IC1zdGF0aWMtbGlibXB4d3JhcHBlcnMgQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9IC16IEB2YXJ7a2V5d29yZH19CisgCitAQCAtMTExODUsNiArMTExODYsMTEgQEAgVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCisgbGliYy4gIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgc3VwcGxpZWQgdGhyb3VnaCBzb21lIG90aGVyCisgbWVjaGFuaXNtIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorIAorK0BpdGVtIC1ub3N0ZGxpYisrCisrQG9waW5kZXggbm9zdGRsaWIrKworK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorK09ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgorKworIEBjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vc3RkbGlifQorIEBjaW5kZXggQG9wdGlvbnstbm9zdGRsaWJ9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKyBAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9zdGRsaWJ9CitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA2NzViY2MxLi5hMzdlYzhiIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC04NDUsNiArODQ1LDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9IH19fX19fSIKKyAjZW5kaWYKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2YxZTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSBhZDE1OTI3OTE2OTgyODZiODA2MjZkZGQ1Njc5ZmYyZWY0NTdhYjc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggMTgxNzQ4ZS4uOTAwOTA2NCAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNjQ1MSwxMyArMjY0NTEsNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA4YjA3MDc4Li5jN2EyOGI0IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQzNjEsMTMgKzQzNjEsNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTlkZTM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMmIyMmVlMmU0NDY4OGY4YTcyYjlhZjc2YTA0MzFkODZiYWMwMGQ0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMzVdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8IDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBhMzdlYzhiLi44N2I0N2M1IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00MzUyLDYgKzQzNTIsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwNjEzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSAxMmY0NjdiYzZkODk1M2JhMzQyZmU1MTY2YjlhMmYzOTdiMzM0Nzk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbgorICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKK29jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Cit3b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KK3RtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJworCitTbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDRhYjc0MDUuLjY2MWFlMTcgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTUwMiw3ICs1MDIsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDkwMDkwNjQuLmYwNTljMmYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE4NDEsOCArMTE4NDEsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBjN2EyOGI0Li4yZTY2OGE1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE4MzIsOCArMTgzMiw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCBjMzJmMDg3Li42ODAzYWI5IDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDksNyArMTA5LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTczMzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDk1NTA2YjQ0YzllZjQ3MjVmZWY1MmZhODY0ZDNkM2ZjZjkzMWU0NDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAorU3ViamVjdDogW1BBVENIIDE4LzM1XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KKworKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKK3VzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKK2RpcmVjdG9yeS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8IDIgKy0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK2luZGV4IGUxNTkyZjcuLjc2ZDE5YjMgMTAwNzU1CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTEyNzQ3LDcgKzEyNzQ3LDcgQEAgZXNhYworIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBhY19leHQ9JHthY19mY19zcmNleHQtZn0KKyBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworaW5kZXggMzVhOGIzOS4uNmEwZDhhOSAxMDA2NDQKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitAQCAtMjQwLDcgKzI0MCw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCisgCisgIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1Mzk0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorRnJvbSA5NGY2MTljZDMyNTdlMzVlMjBhODc3NjQwZDBjYjkwYzJiM2VmYzE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8zNV0gbGliZ2NjLXNqbGotY2hlY2sKKworYWNfZm5fY190cnlfY29tcGlsZSBkb2VzbnQgc2VlbSB0byBrZWVwIHRoZSBpbnRlcm1lZGlhdGUgZmlsZXMKK3doaWNoIGFyZSBuZWVkZWQgZm9yIHNqbGogdGVzdCB0byBwYXNzIHNpbmNlIGl0IGdyZXBzIGludG8gdGhlCitnZW5lcmF0ZWQgZmlsZS4gU28gd2UgcnVuIHRoZSBjb21waWxlciBjb21tYW5kIHVzaW5nIEFDX1RSWV9DT01NQU5ECit3aGljaCB0aGVuIGdlbmVyYXRlcyB0aGUgbmVlZGVkIC5zIGZpbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJnY2MvY29uZmlndXJlICAgIHwgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAxMCArKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitpbmRleCAwOGM5MzE5Li41ZmZhZWIzIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTQ1NzAsMTcgKzQ1NzAsMTkgQEAgdm9pZCBmb28gKCkKKyB9CisgCisgX0FDRU9GCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistaWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6CisraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCisgICBmaQorIGZpCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorIHJtIC1mIGNvbmZ0ZXN0KgorIAorIGZpCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDFjNDA1ZTguLmY1Mjk3NWQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtMjU1LDE2ICsyNTUsMTQgQEAgdm9pZCBmb28gKCkKKyAgIGJhcigpOworIH0KKyBdKV0pCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAorLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCisrICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKy0gIGZpXSkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisrICBmaQorK2ZpCisgcm0gLWYgY29uZnRlc3QqCisgXSkKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiYzY4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA2ZTYyODNkNjQ1YzgzY2E1MzQyMTlhMDJhZTg4MmEzZDdiZTk1ZmYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCBiMDcyOGYwLi5lNjllZTdkIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggODdiNDdjNS4uZTZlZmFlNyAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTE0Miw3ICsxMTQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGNwcC1vdXRwdXQiLAorLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisrICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAorICAgeyJAYXNzZW1ibGVyIiwKKyAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWQ0ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3Zjc2NmZjNDdmOTM4OGRkMDA5NDg1MmE0M2YxYWYyNTY4YjRiOWIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8zNV0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBjYjA4YTVjLi5iMTU1NzQ0IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMjAxMSwyOSArMjAxMSwyOSBAQCBtaXBzKi0qLWxpbnV4KikJCQkJIyBMaW51eCBNSVBTLCBlaXRoZXIgZW5kaWFuLgorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHMzMgorIAkJCTs7CisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCisgCQkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3Qtc3QiCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHM2NG9jdGVvbiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0NQVV9TVFJJTkdfREVGQVVMVD1cXFwib2N0ZW9uXFxcIiIKKyAJCQl0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19TT0ZUX0ZMT0FUX0FCSQorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzaXNhNjRyNiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczY0cjYKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwc2lzYTY0cjIqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHM2NHIyCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHM2NCotKi1saW51eCogfCBtaXBzaXNhNjQqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCWVzYWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTIwZDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKQEAgLTAsMCArMSwyMTYgQEAKK0Zyb20gNGY5NGFkZGVkOGI3MDQzNjQyMzg2YjMxZWQ0YzNhMWJkMDE2ZjMxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI0OjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMzVdIERlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIKKworVGhpcyBwYXRjaCBkZWZpbmVzIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKK3JlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSIHdoaWNoIGNhbiBiZSBzZXQgaW4gZ2VuZXJhdGVkIGhlYWRlcnMKK1RoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIG9mIGhhcmRjb2RlZCBtdWx0aWxpYiBpbiBnY2MKK0NoYW5nZSBpcyBvbmx5IGZvciB0aGUgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgaW4gT0UgaW5jbHVkaW5nCitTSCwgc3BhcmMsIGFscGhhIGZvciBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydCAoaWYgYW55KQorCitSZW1vdmVzIHRoZSBkb19oZWFkZXJmaXggdGFzayBpbiBtZXRhZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIHwgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICA2ICsrKy0tLQorIGdjYy9jb25maWcvbGludXguaCAgICAgICAgICAgfCAgOCArKysrLS0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgMTAgKysrKystLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXguaCAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAoraW5kZXggMmM3MGEyZi4uZGQwNDhkYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK0BAIC0yMyw4ICsyMyw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2RlZmluZSBFWFRSQV9TUEVDUyBcCisgeyAiZWxmX2R5bmFtaWNfbGlua2VyIiwgRUxGX0RZTkFNSUNfTElOS0VSIH0sCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IGU5ZDY1ZGMuLmNmZGYzZjAgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTY4LDggKzY4LDggQEAKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIGFuZCBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkuICAqLworIAorICN1bmRlZiAgR0xJQkNfRFlOQU1JQ19MSU5LRVIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIi9saWIvbGQtbGludXguc28uMyIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgIi9saWIvbGQtbGludXgtYXJtaGYuc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hcm1oZi5zby4zIgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAoraW5kZXggMTI3OWNiYS4uMWRkZTc0NyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTYyLDcgKzYyLDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggYi9nY2MvY29uZmlnL2kzODYvbGludXguaAoraW5kZXggYTEwMDk2My4uMjFiYTJiMiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2kzODYvbGludXguaAorQEAgLTIwLDQgKzIwLDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmggYi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitpbmRleCBhMjdkM2JlLi42MTg1Y2NlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorQEAgLTI3LDYgKzI3LDYgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGZfeDg2XzY0IgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05YMzIgImVsZjMyX3g4Nl82NCIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGlieDMyL2xkLWxpbnV4LXgzMi5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbGludXguaCBiL2djYy9jb25maWcvbGludXguaAoraW5kZXggODU3Mzg5YS4uMjJiOWJlNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9saW51eC5oCitAQCAtNzMsMTAgKzczLDEwIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggYi9nY2MvY29uZmlnL21pcHMvbGludXguaAoraW5kZXggOTFkZjI2MS4uYzMwNmFmYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL21pcHMvbGludXguaAorQEAgLTIyLDIwICsyMiwyMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0CisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIgIi9zeXN0ZW0vYmluL2xpbmtlcjMyIgorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAoraW5kZXggMDg3OWU3ZS4uMzFjNDMzOCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitAQCAtMzU3LDE0ICszNTcsMTQgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yfSIKKyAjZWxzZQorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMjs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xfSIKKyAjZW5kaWYKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc2gvbGludXguaCBiL2djYy9jb25maWcvc2gvbGludXguaAoraW5kZXggMGY1ZDYxNC4uMTY4NDE2YyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc2gvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitAQCAtNDMsNyArNDMsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc3BhcmMvbGludXguaCBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAoraW5kZXggNTZkZWY0Yi4uMDBiNTY0YyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc3BhcmMvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitAQCAtODMsNyArODMsNyBAQCBleHRlcm4gY29uc3QgY2hhciAqaG9zdF9kZXRlY3RfbG9jYWxfY3B1IChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK2luZGV4IGZhODA1ZmQuLjBlYjRhY2QgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK0BAIC04NCw4ICs4NCw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM3ZGY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA4ZGI2MDYyMDU0ODdlYmIwM2VhZTc4ODgyNmZhZjY0YmQ2OTE4NDUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KKworVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCitidWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKKworaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAorCitUaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCitpdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAord291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCitUaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCiskKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDY2MWFlMTcuLjk0NzBhOTIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTMyNTUsNyArMzI1NSw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpICQkKGNkICQoc3JjZGlyKTsgZWNobyAqLmggKi5kZWYpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSAkJChjZCAkKHNyY2Rpcik7IGVjaG8gKi5oICouZGVmKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI0LURpc2FibGUtc2R0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjIxOWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBlMTM2MzQyZDJmN2MwYmRiMWNmNGI1N2FkMzQ0MGQzYzllNzEwMzIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8zNV0gRGlzYWJsZSBzZHQuCisKK1dlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KK0l0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCitzZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKK2J1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgorCitSUCAyMDEyLzgvNworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitEaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBmMDU5YzJmLi45ODg1M2IzIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI3NzMzLDEyICsyNzczMywxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDJlNjY4YTUuLjUyY2RjYjggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNTIzMiwxNSArNTIzMiwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgorIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGZiYWQ2NjcuLjdkNWE2YzYgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjA4OTcsMTEgKzIwODk3LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggN2E3YzFkOC4uYjEzZWFiYyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMjksNyArMjI5LDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNS1saWJ0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNS1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTc3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAxY2E1NDk2N2Q4ZjY3YWIwZWNhNzcyMzM0ZTVjOTI1YTVlOGM4MGNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjk6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gbGlidG9vbAorCitsaWJzdGRjKysgZnJvbSBnY2MtcnVudGltZSBnZXRzIGNyZWF0ZWQgd2l0aCAtcnBhdGg9L3Vzci9saWIvLi4vbGliIGZvciBxZW11eDg2LTY0Cit3aGVuIHJ1bm5pbmcgb24gYW0geDg2XzY0IGJ1aWxkIGhvc3QuCisKK1RoaXMgcGF0Y2ggc3RvcHMgdGhpcyBzcGVhZGluZyB0byBsaWJkaXIgaW4gdGhlIGxpYnN0ZGMrKy5sYSBmaWxlIHdpdGhpbiBsaWJ0b29sLgorQXJndWFibHksIGl0IHNob3VsZG4ndCBiZSBwYXNzaW5nIHRoaXMgaW50byBsaWJ0b29sIGluIHRoZSBmaXJzdCBwbGFjZSBidXQKK2ZvciBub3cgdGhpcyByZXNvbHZlcyB0aGUgbmFzdGllc3QgcHJvYmxlbXMgdGhpcyBjYXVzZXMuCisKK2Z1bmNfbm9ybWFsX2Fic3BhdGggd291bGQgcmVzb2x2ZSBhbiBlbXB0eSBwYXRoIHRvIGBwd2RgIHNvIHdlIG5lZWQKK3RvIGZpbHRlciB0aGUgemVybyBjYXNlLgorCitSUCAyMDEyLzgvMjQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsdG1haW4uc2ggfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDk1MDNlYzguLjAxMjFmYmEgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYzNTksNiArNjM1OSwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorIAorICAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKysgICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisrCWZ1bmNfbm9ybWFsX2Fic3BhdGggIiRpbnN0YWxsX2xpYmRpciIKKysJaW5zdGFsbF9saWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisrICAgICAgZmkKKyAKKyAgICAgICBvbGRsaWJzPQorICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTY1MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA1ZjVjYTU3ZmNlYzRiYWZlMzc4MDM3MWQxMzQyYWNkNDBjNjA4Njk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzA6MzIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNi8zNV0gZ2NjOiBhcm12NDogcGFzcyBmaXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJLgorCitUaGUgTElOS19TUEVDIGZvciBsaW51eCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGxpbnV4LWVhYmkuaCB3aGljaAorbWVhbnMgdGhlIHZhbHVlIG9mIFRBUkdFVF9GSVhfVjRCWF9TUEVDIGdldHMgbG9zdCBhbmQgYXMgYSByZXN1bHQKK3RoZSBvcHRpb24gaXMgbm90IHBhc3NlZCB0byBsaW5rZXIgd2hlbiBjaG9zaW5nIG1hcmNoPWFybXY0CitUaGlzIHBhdGNoIHJlZGVmaW5lcyB0aGlzIGluIGxpbnV4LWVhYmkuaCBhbmQgcmVpbnNlcnRzIGl0Citmb3IgZWFiaSBkZWZhdWx0aW5nIHRvb2xjaGFpbnMuCisKK1dlIG1pZ2h0IHdhbnQgdG8gc2VuZCBpdCB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggfCA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggY2ZkZjNmMC4uMDQ4YTA2MiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNzcsMTAgKzc3LDE0IEBACisgICAgICV7bWZsb2F0LWFiaT1zb2Z0KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIn0gXAorICAgICAleyFtZmxvYXQtYWJpPSo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUICJ9IgorIAorKy8qIEZvciBhcm12NCB3ZSBwYXNzIC0tZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSSAqLworKyN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQworKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCisrCisgLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KKyAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCisgI3VuZGVmICBMSU5LX1NQRUMKKy0jZGVmaW5lIExJTktfU1BFQyBFQUJJX0xJTktfU1BFQwkJCQkJXAorKyNkZWZpbmUgTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDIEVBQklfTElOS19TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1ZGEzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSA0ODRlOGMxZThkNDNlNjI2ZWUyZGRiZGU5ZWI4ZTBhZjdhMTc2YWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5ODg1M2IzLi5kMGVjNTBmIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExODIxLDEwICsxMTgyMSwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTExODM1LDYgKzExODQ1LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDUyY2RjYjguLjNjZjYwNmEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTgxMiwxMCArMTgxMiwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE4MjYsNiArMTgzNiwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwMmU5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDExMmNhOWY4NjAxMTRiYzc5MjczYTc5ZWQ0MjcyMmZkYzlkZWQ2ZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwOTozOTozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBBdm9pZCB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYQorIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDAxMjFmYmEuLjUyYmRiZGIgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjktZXhwb3J0LUNQUC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjktZXhwb3J0LUNQUC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTA1YWU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gYTk4MzAzM2YxMzI3YTY5MmFmNTViZThkMWFhNjFhZWRlMThjNGFmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA5OjQwOjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjkvMzVdIGV4cG9ydCBDUFAKKworVGhlIE9FIGVudmlyb25tZW50IHNldHMgYW5kIGV4cG9ydHMgQ1BQIGFzIGJlaW5nIHRoZSB0YXJnZXQgZ2NjLiBXaGVuCitidWlsZGluZyBnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQKK2luIGJ1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlCit1c2luZyB0aGUgaG9zdCAiZ2NjIiwgbm90IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjLiBTaW5jZSB0aGUgbWluZ3czMgoraGVhZGVycyBhcmUgdmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcKK2ludG8gY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkCitmYWlsdXJlcyByZWxhdGVkIHRvIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1ZGUgYSBwcm9jZXNzLmggZmlsZSBmb3IgcGVtLXVuaXguYy4KKworVGhlIGZpeCBpcyB0byBlbnN1cmUgd2UgZXhwb3J0IGEgc2FuZSBDUFAgdmFsdWUgaW50byB0aGUgYnVpbGQKK2Vudmlyb25tZW50IHdoZW4gdXNpbmcgYnVpbGQgdGFyZ2V0cy4gV2UgY291bGQgZGVmaW5lIGEgQ1BQX0ZPUl9CVUlMRCB2YWx1ZSB3aGljaCBtYXkgYmUKK3RoZSB2ZXJzaW9uIHdoaWNoIG5lZWRzIHRvIGJlIHVwc3RyZWFtZWQgYnV0IGZvciBub3csIHRoaXMgZml4IGlzIGdvb2QgZW5vdWdoIHRvCithdm9pZCB0aGUgcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzNmI0MDA4Li5hNzgzZTFlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTQ5LDYgKzE0OSw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2RjYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSAzZDg3MGExODRjMDVkZjEzMzhkYjE4NzAzMDFjNDE0NGJhOTlmYzNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMzAvMzVdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAorCitXaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggYjE1NTc0NC4uMDU0MWI4YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIzMzcsNyArMjMzNywxNCBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCWNhc2UgJHt0YXJnZXR9IGluCisrCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCQk7OworKwkgICAgKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIgorKwkJOzsKKysJZXNhYworIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNjb21tIgorIAlleHRyYV9vYmpzPSIkZXh0cmFfb2JqcyByczYwMDAtbGludXgubyIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmNiYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBhODI0Y2QzZjQ1ODc1ZjZjMWM0N2NjZGJmMzM1MzQ5NDdiZDJiNTg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjE6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMS8zNV0gRGlzYWJsZSB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyBhbmQgb3RoZXIgbXVsdGlsaWIKKyBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUKK0FCSSwgYXMKK2xvbmcgYXMgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIHByZXNlbnQgaW4gL2xpYi4KKworV2Ugc2ltcGx5IHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHJ1bGVzIGluIGdjYyB0byBmaW5kIGFuZCBjb25maWd1cmUgdGhlCitub3JtYWwgbGliZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbT0UtU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAoraW5kZXggYzI5NjM3Ni4uM2JiNTliZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKysrKyBiL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK0BAIC0yMSw4ICsyMSw4IEBACisgTElCMUFTTVNSQyAgID0gYWFyY2g2NC9saWIxZnVuY3MuYXNtCisgTElCMUFTTUZVTkNTID0gX2FhcmNoNjRfc3luY19jYWNoZV9yYW5nZQorIAorLUFBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG1hYmkubHA2ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCistTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI0FBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCisrI01VTFRJTElCX09TRElSTkFNRVMgPSBtYWJpLmxwNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKyAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG1hYmkuaWxwMzI9Li4vbGliaWxwMzIKKysjTVVMVElMSUJfT1NESVJOQU1FUyArPSBtYWJpLmlscDMyPS4uL2xpYmlscDMyCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MTMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gZTYwMDkwZjdjNTM3Yzg0ZmQxYjIyMzA3ZWRkOWYzODYyMjhjNzMzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjI1OjExICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIEVuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArKworIGdjYy9jcHBkZWZhdWx0LmMgfCA0ICsrKysKKyBnY2MvZGVmYXVsdHMuaCAgIHwgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgIHwgNyAtLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA5NDcwYTkyLi4xNDk3ZWRlIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC01ODIsNiArNTgyLDcgQEAgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI2MDMsNiArMjYwNCw3IEBAIENGTEFHUy1pbnRsLm8gKz0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIgorIAorIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAorICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKKysgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKKyAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAorZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCitpbmRleCA1ODBjMWJhLi4wM2EwMjg3IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTU5LDYgKzU5LDEwIEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCAxZDU0Nzk4Li45ODNkNDVlIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTM2MSw0ICsxMzYxLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIAorICNlbmRpZiAvKiBHQ0NfSU5TTl9GTEFHU19IICAqLworIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGU2ZWZhZTcuLjNjYTI3YjkgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEyNjMsMTMgKzEyNjMsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5ZTQxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDk5N2Y5ZTkzOWY4NWY2NTFiMjJhNDgyNTFjZmIxNDQ0ODMxZDU0Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMToxNzoxOSArMDAwMAorU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2MgNC44KyB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisKK3NpbmNlIHRoZSAqLlBwbyBmaWxlcyBkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAKKzIwMTIvMDkvMjIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmF0b21pYy9NYWtlZmlsZS5hbSB8IDMgKystCisgbGliYXRvbWljL01ha2VmaWxlLmluIHwgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbSBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQoraW5kZXggM2Q4YWI2Mi4uMjNkZmY3ZSAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmFtCitAQCAtMTAxLDcgKzEwMSw4IEBAIFBBVF9TCQk9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0KKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbiBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgoraW5kZXggOTI4ODY1Mi4uMzcyMDI1NiAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmluCitAQCAtMzMwLDcgKzMzMCw4IEBAIFBBVF9OID0gJCh3b3JkIDIsJChQQVRfU1BMSVQpKQorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPQorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDdjZDdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYzk0ZGEyNTdhMjE5ODczYjk0NmUwODMwNjE0MWFmNzc0OTY3OWY2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDMgTWFyIDIwMTUgMDg6MjE6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gRG9uJ3Qgc2VhcmNoIGhvc3QgZGlyZWN0b3J5IGR1cmluZyAicmVsaW5rIiBpZgorICRpbnN0X3ByZWZpeCBpcyBwcm92aWRlZAorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC1wYXRjaGVzLzIwMTEtMDEvbXNnMDAwMjYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDUyYmRiZGIuLjgyYmNlYzMgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYwMDQsMTIgKzYwMDQsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZmkKKyAJICAgIGVsc2UKKyAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKysJICAgICAgIyBEZWZhdWx0IGlmICRsaWJkaXIgaXMgbm90IHJlbGF0aXZlIHRvIHRoZSBwcmVmaXg6CisgCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKy0JICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorKworIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJY2FzZSAkbGliZGlyIGluCisgCQkgIFtcXC9dKikKKy0JCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgIGFkZF9kaXI9Ii1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzVmMzg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbSAzYTA5NTQ1ZjNkMThjZTQ5MmVmNTU2MzkyMTVhMDcyMjgyZGUwM2QwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgOCBNYXIgMjAxNSAwMzo0MTozOSArMDAwMAorU3ViamVjdDogW1BBVENIIDM1LzM1XSBEb250IGxpbmsgdGhlIHBsdWdpbnMgd2l0aCBsaWJnb21wIGV4cGxpY2l0bHkKKworVGhleSBhcmUgZGxvcGVuZWQgYnkgbGliZ29tcCBhbnl3YXkuIFRoaXMgZml4ZXMKK3RoZSBsaWJ0b29sIHJlbGluayBpc3N1ZSB3aGljaCBjYXVzZXMgaXNzdWVzIGR1cmluZworY3Jvc3MgY29tcGlsYXRpb24KKworbGlidG9vbDogaW5zdGFsbDogL3Vzci9iaW4vaW5zdGFsbCAtYyAubGlicy9saWJnb21wLmxhaQorL2hvbWUvdWJ1bnR1L3dvcmsvYmxlZWRpbmcvYnVpbGQtcWVtdXg4Ni02NG1jL3RtcC93b3JrL2NvcmUyLTY0LXJkay1saW51eC9nY2MtcnVudGltZS81LjAtcjAvaW1hZ2UvdXNyL2xpYi8uLi9saWIvbGliZ29tcC5sYQorbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IGNhbm5vdCBpbnN0YWxsIGBsaWJnb21wLXBsdWdpbi1ob3N0X25vbnNobS5sYScKK3RvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gL3Vzci9saWIKK01ha2VmaWxlOjUxNzogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUycgZmFpbGVkCittYWtlWzJdOiAqKiogW2luc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFU10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliZ29tcC9NYWtlZmlsZS5pbiAgICAgICAgfCA3ICsrKy0tLS0KKyBsaWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbSB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnb21wL01ha2VmaWxlLmluIGIvbGliZ29tcC9NYWtlZmlsZS5pbgoraW5kZXggYjYxYjEwOC4uNzFiMjYyNyAxMDA2NDQKKy0tLSBhL2xpYmdvbXAvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmdvbXAvTWFrZWZpbGUuaW4KK0BAIC0xMjMsNyArMTIzLDcgQEAgYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSIgIiQoREVTVERJUikkKGluZm9kaXIpIiBcCisgCSIkKERFU1RESVIpJChmaW5jbHVkZWRpcikiICIkKERFU1RESVIpJChsaWJzdWJpbmNsdWRlZGlyKSIgXAorIAkiJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIgorIExUTElCUkFSSUVTID0gJCh0b29sZXhlY2xpYl9MVExJQlJBUklFUykKKy1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9ERVBFTkRFTkNJRVMgPSBsaWJnb21wLmxhCisrbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0KKyBhbV9saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9PQkpFQ1RTID0gIFwKKyAJbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGEtcGx1Z2luLWhvc3QubG8KKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9PQkpFQ1RTID0gIFwKK0BAIC0xMzMsNyArMTMzLDcgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgXAorIAktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorIAkkKGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKyBhbV9fREVQRU5ERU5DSUVTXzEgPQorLUBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9ERVBFTkRFTkNJRVMgPSBsaWJnb21wLmxhIFwKKytAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfREVQRU5ERU5DSUVTID0gIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorIEBQTFVHSU5fTlZQVFhfVFJVRUBhbV9saWJnb21wX3BsdWdpbl9udnB0eF9sYV9PQkpFQ1RTID0gIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACWxpYmdvbXBfcGx1Z2luX252cHR4X2xhLXBsdWdpbi1udnB0eC5sbworQEAgLTQwNyw3ICs0MDcsNyBAQCBsaWJnb21wX2xhX1NPVVJDRVMgPSBhbGxvYy5jIGJhcnJpZXIuYyBjcml0aWNhbC5jIGVudi5jIGVycm9yLmMgaXRlci5jIFwKKyBAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTERGTEFHUyA9ICBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAkkKGxpYmdvbXBfcGx1Z2luX252cHR4X3ZlcnNpb25faW5mbykgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUAJJChsdF9ob3N0X2ZsYWdzKSAkKFBMVUdJTl9OVlBUWF9MREZMQUdTKQorLUBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSBsaWJnb21wLmxhICQoUExVR0lOX05WUFRYX0xJQlMpCisrQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9ICQoUExVR0lOX05WUFRYX0xJQlMpCisgQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvID0gLXZlcnNpb24taW5mbyAkKGxpYnRvb2xfVkVSU0lPTikKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9TT1VSQ0VTID0gcGx1Z2luL3BsdWdpbi1ob3N0LmMKK0BAIC00MTUsNyArNDE1LDYgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtREhPU1RfTk9OU0hNX1BMVUdJTgorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MgPSBcCisgCSQobGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvKSAkKGx0X2hvc3RfZmxhZ3MpCisgCistbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0gbGliZ29tcC5sYQorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisgbm9kaXN0X25vaW5zdF9IRUFERVJTID0gbGliZ29tcF9mLmgKKyBub2Rpc3RfbGlic3ViaW5jbHVkZV9IRUFERVJTID0gb21wLmggb3BlbmFjYy5oCitkaWZmIC0tZ2l0IGEvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0gYi9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQoraW5kZXggMTY3NDg1Zi4uZDJjNTQyOCAxMDA2NDQKKy0tLSBhL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtCisrKysgYi9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQorQEAgLTM1LDcgKzM1LDcgQEAgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAkKFBMVUdJTl9OVlBUWF9DUFBGTEFHUykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MREZMQUdTID0gJChsaWJnb21wX3BsdWdpbl9udnB0eF92ZXJzaW9uX2luZm8pIFwKKyAJJChsdF9ob3N0X2ZsYWdzKQorIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xERkxBR1MgKz0gJChQTFVHSU5fTlZQVFhfTERGTEFHUykKKy1saWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSBsaWJnb21wLmxhICQoUExVR0lOX05WUFRYX0xJQlMpCisrbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gJChQTFVHSU5fTlZQVFhfTElCUykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworIGVuZGlmCisgCitAQCAtNDUsNSArNDUsNCBAQCBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9TT1VSQ0VTID0gcGx1Z2luL3BsdWdpbi1ob3N0LmMKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ESE9TVF9OT05TSE1fUExVR0lOCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTERGTEFHUyA9IFwKKyAJJChsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV92ZXJzaW9uX2luZm8pICQobHRfaG9zdF9mbGFncykKKy1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJBREQgPSBsaWJnb21wLmxhCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTE5NDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSA4NjFiY2ZkNGFlODE0ZjM1MWUwYzY2OGVlMjZkMDFkMTMzMWUwNDIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzNi8zN10gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZworIGJhc2VfbGliZGlyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK2luZGV4IDlhYmIyNTIuLjc5NTI1ZWUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAorICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorIAorICN1bmRlZiAgQVNBTl9DQzFfU1BFQworICNkZWZpbmUgQVNBTl9DQzFfU1BFQyAiJXslOnNhbml0aXplKGFkZHJlc3MpOi1mdW53aW5kLXRhYmxlc30iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzctcHI2NTc3OS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzctcHI2NTc3OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDI0NjczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoCkBAIC0wLDAgKzEsMTczIEBACitMaXN0LUlkOiA8Z2NjLXBhdGNoZXMuZ2NjLmdudS5vcmc+CitMaXN0LUFyY2hpdmU6IDxodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvPgorTGlzdC1Qb3N0OiA8bWFpbHRvOmdjYy1wYXRjaGVzIGF0IGdjYyBkb3QgZ251IGRvdCBvcmc+CitMaXN0LUhlbHA6IDxtYWlsdG86Z2NjLXBhdGNoZXMtaGVscCBhdCBnY2MgZG90IGdudSBkb3Qgb3JnPgorRGF0ZTogTW9uLCAyMCBBcHIgMjAxNSAxMjo0MDo0OSArMDkzMAorRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhIGF0IGdtYWlsIGRvdCBjb20+CitUbzogZ2NjLXBhdGNoZXMgYXQgZ2NjIGRvdCBnbnUgZG90IG9yZworU3ViamVjdDogW1BhdGNoXSBwcjY1Nzc5IC0gWzUvNiBSZWdyZXNzaW9uXSB1bmRlZmluZWQgbG9jYWwgc3ltYm9sIG9uIHBvd2VycGMKKworVGhpcyBwYXRjaCByZW1vdmVzIGJvZ3VzIGRlYnVnIGluZm8gbGVmdCBhcm91bmQgYnkgc2hyaW5rLXdyYXBwaW5nLAord2hpY2ggb24gc29tZSBwb3dlcnBjIHRhcmdldHMgd2l0aCBqdXN0IHRoZSByaWdodCByZWdpc3RlciBhbGxvY2F0aW9uCitsZWQgdG8gYXNzZW1ibHkgZXJyb3JzLgorCitCb290c3RyYXBwZWQgYW5kIHJlZ3Jlc3Npb24gdGVzdGVkIHBvd2VycGM2NC1saW51eCBhbmQgeDg2XzY0LWxpbnV4LgorCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02NTc3OQorCitnY2MvCisJUFIgZGVidWcvNjU3NzkKKwkqIHNocmluay13cmFwLmMgKGluc25fdXNlc19yZWcpOiBOZXcgZnVuY3Rpb24uCisJKG1vdmVfaW5zbl9mb3Jfc2hyaW5rX3dyYXApOiBSZW1vdmUgZGVidWcgaW5zbnMgdXNpbmcgcmVncyBzZXQKKwlieSB0aGUgbW92ZWQgaW5zbi4KK2djYy90ZXN0c3VpdGUvCisJKiBnY2MuZGcvcHI2NTc3OS5jOiBOZXcuCisJCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgKGZyb20gbWFpbGluZyBsaXN0LCBub3QgbWVyZ2VkIHlldCkKKworSW5kZXg6IGEvZ2NjL3Nocmluay13cmFwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2djYy9zaHJpbmstd3JhcC5jLm9yaWcKKysrKyBiL2djYy9zaHJpbmstd3JhcC5jCitAQCAtMTgyLDYgKzE4MiwyMSBAQCBsaXZlX2VkZ2VfZm9yX3JlZyAoYmFzaWNfYmxvY2sgYmIsIGludCByCisgICByZXR1cm4gbGl2ZV9lZGdlOworIH0KKyAKKytzdGF0aWMgYm9vbAorK2luc25fdXNlc19yZWcgKHJ0eF9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCBlbmRfcmVnbm8pCisreworKyAgZGZfcmVmIHVzZTsKKysKKysgIEZPUl9FQUNIX0lOU05fVVNFICh1c2UsIGluc24pCisrICAgIHsKKysgICAgICBydHggcmVnID0gREZfUkVGX1JFRyAodXNlKTsKKysKKysgICAgICBpZiAoUkVHX1AgKHJlZykgJiYgUkVHTk8gKHJlZykgPj0gcmVnbm8gJiYgUkVHTk8gKHJlZykgPCBlbmRfcmVnbm8pCisrCXJldHVybiB0cnVlOworKyAgICB9CisrICByZXR1cm4gZmFsc2U7CisrfQorKworIC8qIFRyeSB0byBtb3ZlIElOU04gZnJvbSBCQiB0byBhIHN1Y2Nlc3Nvci4gIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgVVNFUyBhbmQgREVGUyBhcmUgdGhlIHNldCBvZiByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBhbmQgZGVmaW5lZAorICAgIGFmdGVyIElOU04gaW4gQkIuICBTUExJVF9QIGluZGljYXRlcyB3aGV0aGVyIGEgbGl2ZSBlZGdlIGZyb20gQkIKK0BAIC0zNDAsMTAgKzM1NSwxNSBAQCBtb3ZlX2luc25fZm9yX3Nocmlua193cmFwIChiYXNpY19ibG9jayBiCisgICAgICAgKnNwbGl0X3AgPSB0cnVlOworICAgICB9CisgCisrICB2ZWM8YmFzaWNfYmxvY2s+IGxpdmVfYmJzOworKyAgaWYgKE1BWV9IQVZFX0RFQlVHX0lOU05TKQorKyAgICBsaXZlX2Jicy5jcmVhdGUgKDUpOworICAgLyogQXQgdGhpcyBwb2ludCB3ZSBhcmUgY29tbWl0dGVkIHRvIG1vdmluZyBJTlNOLCBidXQgbGV0J3MgdHJ5IHRvCisgICAgICBtb3ZlIGl0IGFzIGZhciBhcyB3ZSBjYW4uICAqLworICAgZG8KKyAgICAgeworKyAgICAgIGlmIChNQVlfSEFWRV9ERUJVR19JTlNOUykKKysJbGl2ZV9iYnMuc2FmZV9wdXNoIChiYik7CisgICAgICAgbGl2ZV9vdXQgPSBkZl9nZXRfbGl2ZV9vdXQgKGJiKTsKKyAgICAgICBsaXZlX2luID0gZGZfZ2V0X2xpdmVfaW4gKG5leHRfYmxvY2spOworICAgICAgIGJiID0gbmV4dF9ibG9jazsKK0BAIC00MjYsNiArNDQ2LDM0IEBAIG1vdmVfaW5zbl9mb3Jfc2hyaW5rX3dyYXAgKGJhc2ljX2Jsb2NrIGIKKyAJU0VUX1JFR05PX1JFR19TRVQgKGJiX3VzZXMsIGkpOworICAgICB9CisgCisrICAvKiBSZW1vdmUgZGVidWcgaW5zbnMgdXNpbmcgcmVncyBzZXQgYnkgdGhlIGluc24gd2UgYXJlIG1vdmluZy4gICovCisrICBpZiAoTUFZX0hBVkVfREVCVUdfSU5TTlMpCisrICAgIHsKKysgICAgICB3aGlsZSAoIWxpdmVfYmJzLmlzX2VtcHR5ICgpKQorKwl7CisrCSAgcnR4X2luc24gKmRpbnNuOworKwkgIGJhc2ljX2Jsb2NrIHRtcF9iYiA9IGxpdmVfYmJzLnBvcCAoKTsKKysKKysJICBGT1JfQkJfSU5TTlNfUkVWRVJTRSAodG1wX2JiLCBkaW5zbikKKysJICAgIHsKKysJICAgICAgaWYgKGRpbnNuID09IGluc24pCisrCQlicmVhazsKKysJICAgICAgaWYgKERFQlVHX0lOU05fUCAoZGluc24pCisrCQkgICYmIGluc25fdXNlc19yZWcgKGRpbnNuLCBkcmVnbm8sIGVuZF9kcmVnbm8pKQorKwkJeworKwkJICBpZiAoKnNwbGl0X3ApCisrCQkgICAgLyogSWYgc3BsaXQsIHRoZW4gd2Ugd2lsbCBiZSBtb3ZpbmcgaW5zbiBpbnRvIGEKKysJCSAgICAgICBuZXdseSBjcmVhdGVkIGJsb2NrIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbnRyeQorKwkJICAgICAgIGJsb2NrLiAgTW92ZSB0aGUgZGVidWcgaW5mbyB0aGVyZSB0b28uICAqLworKwkJICAgIGVtaXRfZGVidWdfaW5zbl9hZnRlciAoUEFUVEVSTiAoZGluc24pLCBiYl9ub3RlIChiYikpOworKwkJICBkZWxldGVfaW5zbiAoZGluc24pOworKwkJICBicmVhazsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICAgIGxpdmVfYmJzLnJlbGVhc2UgKCk7CisrICAgIH0KKysKKyAgIGVtaXRfaW5zbl9hZnRlciAoUEFUVEVSTiAoaW5zbiksIGJiX25vdGUgKGJiKSk7CisgICBkZWxldGVfaW5zbiAoaW5zbik7CisgICByZXR1cm4gdHJ1ZTsKK0luZGV4OiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNjU3NzkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI2NTc3OS5jCitAQCAtMCwwICsxLDY0IEBACisrLyogeyBkZy1kbyBydW4gfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1nIiB9ICovCisrLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tcmVsb2NhdGFibGUiIHsgdGFyZ2V0IHBvd2VycGMtKi1ydGVtcyogfSB9ICovCisrCisrdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorK2FkbGVyMzIgKHVuc2lnbmVkIGxvbmcgYWRsZXIsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKKyt7CisrICB1bnNpZ25lZCBsb25nIHMxID0gYWRsZXIgJiAweGZmZmY7CisrICB1bnNpZ25lZCBsb25nIHMyID0gKGFkbGVyID4+IDE2KSAmIDB4ZmZmZjsKKysgIGludCBrOworKworKyAgaWYgKGJ1ZiA9PSAwKQorKyAgICByZXR1cm4gMUw7CisrCisrICB3aGlsZSAobGVuID4gMCkKKysgICAgeworKyAgICAgIGsgPSBsZW4gPCA1NTUyID8gbGVuIDogNTU1MjsKKysgICAgICBsZW4gLT0gazsKKysgICAgICB3aGlsZSAoayA+PSAxNikKKysJeworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgayAtPSAxNjsKKysJfQorKyAgICAgIGlmIChrICE9IDApCisrCWRvCisrCSAgeworKwkgICAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICB9IHdoaWxlICgtLWspOworKyAgICAgIHMxICY9IDB4ZmZmZmZmZmZVTDsKKysgICAgICBzMiAmPSAweGZmZmZmZmZmVUw7CisrICAgICAgczEgJT0gNjU1MjFMOworKyAgICAgIHMyICU9IDY1NTIxTDsKKysgICAgfQorKyAgcmV0dXJuIChzMiA8PCAxNikgfCBzMTsKKyt9CisrCisrdW5zaWduZWQgY2hhciBidWZbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywKKysJCQk4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LAorKwkJCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCQkJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJCQkweDU1LCAweGFhIH07CisraW50CisrbWFpbiAoKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgeCA9IGFkbGVyMzIgKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisrICBpZiAoeCAhPSAweDY0MDQwOWVmVUwpCisrICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzgtZml4LWcrKy1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyNGRkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzgtZml4LWcrKy1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1BvcnRpb25zIG9mCisKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9nY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZy9tc2cyNjAxMy5odG1sCisKK2FyZSBub3QgdXBzdHJlYW1lZCB5ZXQuIFNvIGxldHMga2VlcCBtaXNzaW5nIHBpZWNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dpdGhvdXQgdGhpcywgY29tcGlsaW5nIHNvbWV0aGluZyBzaW1wbGUgbGlrZSAjaW5jbHVkZSA8bGltaXRzPiBvbiB0YXJnZXQKK3dpdGggYysrIHRlc3QuY3BwIGZhaWxzIHVuYWJsZSB0byBmaW5kIHRoZSBoZWFkZXIuIHN0cmFjZSBzaG93cyBpdCBsb29raW5nIGluCit1c3IvaW5jbHVkZS94eHh4IHJhdGhlciB0aGFuIC91c3IvaW5jbHVkZS94eHh4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNTo1NTo0OS40ODgzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE2OjAyOjMxLjc3MjQwNjY3OSAtMDcwMAorQEAgLTE0OCw3ICsxNDgsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTU6NTU6NDkuNDcyMzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNjowMjozMS43ODA0MDY2ODAgLTA3MDAKK0BAIC0zMzI1LDcgKzMzMjUsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMDI1YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIGFjZWEwZGY5OTk3YTQ3ZjhiODIyNGI2Y2ExNjE4YzhjOWRmYmU2ZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgNSBKdWwgMjAxNSAyMDoyNToxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBsaWJjYzE6IGZpeCBsaWJjYzEncyBpbnN0YWxsIHBhdGggYW5kIHJwYXRoCisKKyogSW5zdGFsbCBsaWJjYzEuc28gYW5kIGxpYmNjMXBsdWdpbi5zbyBpbnRvCisgICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbiksIGFzIHdoYXQgd2UKKyAgaGFkIGRvbmUgdG8gbHRvLXBsdWdpbi4KKyogRml4IGJhZCBSUEFUSCBpdXNzdWU6CisgIGdjYy01LjIuMDogcGFja2FnZSBnY2MtcGx1Z2lucyBjb250YWlucyBiYWQgUlBBVEggL3BhdGh0L3RvL3RtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9saWI2NC8uLi9saWI2NCBpbiBmaWxlCisgL3BhdGgvdG8vZ2NjLzUuMi4wLXIwL3BhY2thZ2VzLXNwbGl0L2djYy1wbHVnaW5zL3Vzci9saWI2NC9nY2MveDg2XzY0LXBva3ktbGludXgvNS4yLjAvcGx1Z2luL2xpYmNjMXBsdWdpbi5zby4wLjAuMAorIFtycGF0aHNdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJjYzEvTWFrZWZpbGUuYW0gIHwgICAgNCArKy0tCisgbGliY2MxL01ha2VmaWxlLmluICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmFtIGIvbGliY2MxL01ha2VmaWxlLmFtCitpbmRleCA3YTI3NGIzLi5kYjY5YmVhIDEwMDY0NAorLS0tIGEvbGliY2MxL01ha2VmaWxlLmFtCisrKysgYi9saWJjYzEvTWFrZWZpbGUuYW0KK0BAIC0zNSw4ICszNSw4IEBAIGxpYmliZXJ0eSA9ICQoaWYgJCh3aWxkY2FyZCAkKGxpYmliZXJ0eV9ub2FzYW4pKSwkKFdjKSQobGliaWJlcnR5X25vYXNhbiksIFwKKyAJICAgICQoV2MpJChsaWJpYmVydHlfbm9ybWFsKSkpCisgbGliaWJlcnR5X2RlcCA9ICQocGF0c3Vic3QgJChXYyklLCUsJChsaWJpYmVydHkpKQorIAorLXBsdWdpbmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKS9wbHVnaW4KKy1jYzFsaWJkaXIgPSAkKGxpYmRpcikvJChsaWJzdWZmaXgpCisrY2MxbGliZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKQorK3BsdWdpbmRpciA9ICQoY2MxbGliZGlyKQorIAorIGlmIEVOQUJMRV9QTFVHSU4KKyBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEKK2RpZmYgLS1naXQgYS9saWJjYzEvTWFrZWZpbGUuaW4gYi9saWJjYzEvTWFrZWZpbGUuaW4KK2luZGV4IDE5MTYxMzQuLmM4OTk1ZDIgMTAwNjQ0CistLS0gYS9saWJjYzEvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmNjMS9NYWtlZmlsZS5pbgorQEAgLTI2Miw4ICsyNjIsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCisgCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQorIAorIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKKy1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCistY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQorK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKKytwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKKyBARU5BQkxFX1BMVUdJTl9UUlVFQHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmNjMXBsdWdpbi5sYQorIEBFTkFCTEVfUExVR0lOX1RSVUVAY2MxbGliX0xUTElCUkFSSUVTID0gbGliY2MxLmxhCisgQlVJTFRfU09VUkNFUyA9IGNvbXBpbGVyLW5hbWUuaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQwLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDgxYWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxOTYgQEAKK0JlaW5nIGFibGUgdG8gYnVpbGQgYSBuYXRpdmVzZGsgZ2NjIGlzIHVzZWZ1bCwgcGFydGljdWxhcmx5IGluIGNhc2VzCit3aGVyZSB0aGUgaG9zdCBjb21waWxlciBtYXkgYmUgb2YgYW4gaW5jb21wYXRpYmxlIHZlcnNpb24gKG9yIGEgMzIKK2JpdCBjb21waWxlciBpcyBuZWVkZWQpLgorCitTYWRseSwgYnVpbGRpbmcgbmF0aXZlc2RrLWdjYyBpcyBub3Qgc3RyYWlnaHQgZm9yd2FyZC4gV2UgaW5zdGFsbAorbmF0aXZlc2RrLWdjYyBpbnRvIGEgcmVsb2NhdGFibGUgbG9jYXRpb24gYW5kIHRoaXMgbWVhbnMgdGhhdCBpdHMKK2xpYnJhcnkgbG9jYXRpb25zIGNhbiBjaGFuZ2UuICJOb3JtYWwiIHN5c3Jvb3Qgc3VwcG9ydCBkb2Vzbid0IGhlbHAKK2luIHRoaXMgY2FzZSBzaW5jZSB0aGUgdmFsdWVzIG9mIHBhdGhzIGxpa2UgImxpYmRpciIgY2hhbmdlLCBub3QganVzdAorYmFzZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc3lzdGVtLgorCitJbiBvcmRlciB0byBoYW5kbGUgdGhpcyB3ZSBkbyB0d28gdGhpbmdzOgorCithKSBBZGQgJXIgaW50byBzcGVjIGZpbGUgbWFya3VwIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmplY3RlZCBwYXRocworICAgc3VjaCBhcyBTWVNURU1MSUJTX0RJUiAoc2VlIGdjY19tdWx0aWxpYl9zZXR1cCgpKS4KK2IpIEFkZCBvdGhlciBwYXRocyB3aGljaCBuZWVkIHJlbG9jYXRpb24gaW50byBhIC5nY2NyZWxvY3ByZWZpeCBzZWN0aW9uCisgICB3aGljaCB0aGUgcmVsb2NhdGlvbiBjb2RlIHdpbGwgbm90aWNlIGFuZCBhZGp1c3QgYXV0b21hdGljYWxseS4KKworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvNy8yOAorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC0zNSw2ICszNSwzMCBAQAorICMgdW5kZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAjZW5kaWYKKyAKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdDQ19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHQ0NfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ7CisrI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgTE9DQUxfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTE9DQUxfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFBSRUZJWF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBQUkVGSVhfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgRklYRURfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gRklYRURfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgQ1JPU1NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gQ1JPU1NfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBUT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFRPT0xfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorK3N0YXRpYyBjaGFyIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVI7CisrI2VuZGlmCisrCisgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2lmZGVmIElOQ0xVREVfREVGQVVMVFMKKyA9IElOQ0xVREVfREVGQVVMVFM7CitAQCAtNDIsMzggKzY2LDM4IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorID0geworICNpZmRlZiBHUExVU1BMVVNfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGdlbmVyaWMgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgdGFyZ2V0LWRlcGVuZGVudCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGJhY2t3YXJkIGFuZCBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKy0gICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgR0NDX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCistICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSLCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMiB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorLSAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGZpeGluY2x1ZGVzLiAgKi8KKy0gICAgeyBGSVhFRF9JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsCisrICAgIHsgRklYRURfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLAorICAgICAgIC8qIEEgbXVsdGlsaWIgc3VmZml4IG5lZWRzIGFkZGluZyBpZiBkaWZmZXJlbnQgbXVsdGlsaWJzIHVzZQorIAkgZGlmZmVyZW50IGhlYWRlcnMuICAqLworICNpZmRlZiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKK0BAIC04NSwxNiArMTA5LDE2IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNlbmRpZgorICNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorICAgICAvKiBPbmUgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBDUk9TU19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBBbm90aGVyIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFRPT0xfSU5DTFVERV9ESVJWQVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisgICAgIC8qIC91c3IvaW5jbHVkZSBjb21lcyBkZWFkIGxhc3QuICAqLworLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CisgICB9OworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmggYi9nY2MvY3BwZGVmYXVsdC5oCistLS0gYS9nY2MvY3BwZGVmYXVsdC5oCisrKysgYi9nY2MvY3BwZGVmYXVsdC5oCitAQCAtMzMsNyArMzMsOCBAQAorIAorIHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUKKyB7CistICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrICBjb25zdCBjaGFyICpmbmFtZTsgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKworICAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIAkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLworICAgY29uc3QgY2hhciBjcGx1c3BsdXM7CQkvKiBPbmx5IGxvb2sgaGVyZSBpZiB3ZSdyZSBjb21waWxpbmcgQysrLiAgKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTIwLDYgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSBUQVJHRVRfU1lTVEVNX1JPT1Q7CisgI2Vsc2UKKyBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gMDsKKyAjZW5kaWYKKysgCisrc3RhdGljIGNoYXIgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTWVNURU1MSUJTX0RJUjsKKyAKKyAvKiBOb256ZXJvIG1lYW5zIHBhc3MgdGhlIHVwZGF0ZWQgdGFyZ2V0X3N5c3RlbV9yb290IHRvIHRoZSBjb21waWxlci4gICovCisgCitAQCAtMzkwLDYgKzM5Miw3IEBAIG9yIHdpdGggY29uc3RhbnQgdGV4dCBpbiBhIHNpbmdsZSBhcmd1bWVudC4KKyAgJUcgICAgIHByb2Nlc3MgTElCR0NDX1NQRUMgYXMgYSBzcGVjLgorICAlUiAgICAgT3V0cHV0IHRoZSBjb25jYXRlbmF0aW9uIG9mIHRhcmdldF9zeXN0ZW1fcm9vdCBhbmQKKyAgICAgICAgIHRhcmdldF9zeXNyb290X3N1ZmZpeC4KKysgJXIgICAgIE91dHB1dCB0aGUgYmFzZSBwYXRoIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgKKyAgJVMgICAgIHByb2Nlc3MgU1RBUlRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIFMgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlRSAgICAgcHJvY2VzcyBFTkRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIEUgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlQyAgICAgcHJvY2VzcyBDUFBfU1BFQyBhcyBhIHNwZWMuCitAQCAtMTI4NiwxMCArMTI4OSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworICAgIGdjY19leGVjX3ByZWZpeCBpcyBzZXQgYmVjYXVzZSwgaW4gdGhhdCBjYXNlLCB3ZSBrbm93IHdoZXJlIHRoZQorICAgIGNvbXBpbGVyIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHVzZSBwYXRocyByZWxhdGl2ZSB0byB0aGF0CisgICAgbG9jYXRpb24gaW5zdGVhZC4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2V4ZWNfcHJlZml4ID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4ID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2JpbmRpcl9wcmVmaXggPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9leGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9saWJleGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9iaW5kaXJfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cisrc3RhdGljIGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIAorIC8qIEZvciBuYXRpdmUgY29tcGlsZXJzLCB0aGVzZSBhcmUgd2VsbC1rbm93biBwYXRocyBjb250YWluaW5nCisgICAgY29tcG9uZW50cyB0aGF0IG1heSBiZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtLiAgRm9yIGNyb3NzCitAQCAtMTI5Nyw5ICsxMzAwLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9leGVjX3ByZWZpeCA9IE1EX0VYRUNfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4ID0gTURfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeF8xID0gTURfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzFbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzI7CisgCisgLyogQSByZWxhdGl2ZSBwYXRoIHRvIGJlIHVzZWQgaW4gZmluZGluZyB0aGUgbG9jYXRpb24gb2YgdG9vbHMKK0BAIC01NTUwLDYgKzU1NTMsMTEgQEAgZG9fc3BlY18xIChjb25zdCBjaGFyICpzcGVjLCBpbnQgaW5zd2l0Y2gsIGNvbnN0IGNoYXIgKnNvZnRfbWF0Y2hlZF9wYXJ0KQorIAkgICAgICB9CisgCSAgICBicmVhazsKKyAKKysgICAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrLCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4LAorKwkJICAgICAgc3RybGVuICh0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4KSk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisgCSAgY2FzZSAnUyc6CisgCSAgICB2YWx1ZSA9IGRvX3NwZWNfMSAoc3RhcnRmaWxlX3NwZWMsIDAsIE5VTEwpOworIAkgICAgaWYgKHZhbHVlICE9IDApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQxLWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDEtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTY5ODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQxLWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDg4IEBACitTZWFyY2ggdGFyZ2V0IHN5c3Jvb3QgZ2NjIHZlcnNpb24gc3BlY2lmaWMgZGlycyB3aXRoIG11bHRpbGliLgorCitXZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KKzxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KK3doaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZSAKK2NvZGUgYmVsb3cpLiA8dGFyZ2V0LXN5cz4gaXMgJ21hY2hpbmUnIGluIGdjYydzIHRlcm1pbm9sb2d5LiBXZSB1c2UKK3RoZXNlIGRpcmVjdG9yaWVzIHNvIHRoYXQgbXVsdGlwbGUgZ2NjIHZlcnNpb25zIGNvdWxkIGluIHRoZW9yeSAKK2NvLWV4aXN0IG9uIHRhcmdldC4KKworV2Ugb25seSB3YW50IHRvIGJ1aWxkIG9uZSBnY2MtY3Jvc3MtY2FuYWRpYW4gcGVyIGFyY2ggYW5kIGhhdmUgdGhpcyB3b3JrIAorZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgorPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4gbWlwczY0LXBvbGttbGxpYjMyLWxpbnV4IAoraXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgorCitUaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIgaXM6CisKKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKword2hpY2ggbWVhbnMgdGhhdCB0aGUgbGliMzIgY3J0YmVnaW4ubyB3aWxsIGJlIGZvdW5kIGFuZCB0aGUgbGliNjQgb25lcword2lsbCBub3Qgd2hpY2ggbGVhZHMgdG8gY29tcGlsZXIgZmFpbHVyZXMuCisKK1RoaXMgcGF0Y2ggaW5qZWN0cyBhIG11bHRpbGliIHZlcnNpb24gb2YgdGhhdCBwYXRoIGZpcnN0IHNvIHRoZSBsaWI2NAorYmluYXJpZXMgY2FuIGJlIGZvdW5kIGZpcnN0LiBXaXRoIHRoaXMgY2hhbmdlIHRoZSBzZWFyY2ggcGF0aCBiZWNvbWVzOgorCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQIDIwMTUvNy8zMQorCitJbmRleDogZ2NjLTUuMi4wL2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjIuMC5vcmlnL2djYy9nY2MuYworKysrIGdjYy01LjIuMC9nY2MvZ2NjLmMKK0BAIC0yMzA1LDcgKzIzMDUsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAgICAgICBpZiAocGF0aCA9PSBOVUxMKQorIAl7CisgCSAgbGVuID0gcGF0aHMtPm1heF9sZW4gKyBleHRyYV9zcGFjZSArIDE7CistCSAgbGVuICs9IE1BWCAoTUFYIChzdWZmaXhfbGVuLCBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisrCSAgbGVuICs9IE1BWCAoKHN1ZmZpeF9sZW4gKyBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisgCSAgcGF0aCA9IFhORVdWRUMgKGNoYXIsIGxlbik7CisgCX0KKyAKK0BAIC0yMzE3LDYgKzIzMTcsMzMgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgCSAgLyogTG9vayBmaXJzdCBpbiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5LiAgKi8KKyAJICBpZiAoIXNraXBfbXVsdGlfZGlyKQorIAkgICAgeworKwkgICAgICBpZiAoIShwbC0+b3NfbXVsdGlsaWIgPyBza2lwX211bHRpX29zX2RpciA6IHNraXBfbXVsdGlfZGlyKSkKKysJICAgICAgICB7CisrCSAgICAgICAgICBjb25zdCBjaGFyICp0aGlzX211bHRpOworKwkgICAgICAgICAgc2l6ZV90IHRoaXNfbXVsdGlfbGVuOworKworKwkgICAgICAgICAgaWYgKHBsLT5vc19tdWx0aWxpYikKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfb3NfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9vc19kaXJfbGVuOworKwkJICAgIH0KKysJICAgICAgICAgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9kaXJfbGVuOworKwkJICAgIH0KKysKKysJICAgICAgICAgIC8qIExvb2sgaW4gbXVsdGlsaWIgTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeSBmaXJzdCAqLworKwkgICAgICAgICAgaWYgKHRoaXNfbXVsdGlfbGVuKQorKwkgICAgICAgICAgICB7CisrCQkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIHRoaXNfbXVsdGksIHRoaXNfbXVsdGlfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgbWVtY3B5IChwYXRoICsgbGVuICsgdGhpc19tdWx0aV9sZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworKwkgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKysJICAgICAgICAgICAgICAgIGlmIChyZXQpCisrCQkgICAgICAgICAgYnJlYWs7CisrCSAgICAgICAgICAgIH0KKysJICAgICAgICB9CisrCisgCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisgCSAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKyAJICAgICAgaWYgKHJldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNjMDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTAwIEBACitTVU1NQVJZID0gIkdOVSBjYyBhbmQgZ2NjIEMgY29tcGlsZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2djYy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEwiCisKK05BVElWRURFUFMgPSAiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworQlBOID0gImdjYyIKKworZGVmIGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ0FSTVBLR1NGWF9FQUJJJywgVHJ1ZSkgPT0gImhmIiBhbmQgZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKSA9PSAiYXJtIjoKKyAgICAgICAgcmV0dXJuICItLXdpdGgtZmxvYXQ9aGFyZCIKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisgICAgICAgIHJldHVybiAiLS13aXRoLWZsb2F0PXNvZnQiCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdwcGMtZWZkJyBdOgorICAgICAgICByZXR1cm4gIi0tZW5hYmxlLWU1MDBfZG91YmxlIgorICAgIHJldHVybiAiIgorCitnZXRfZ2NjX2Zsb2F0X3NldHRpbmdbdmFyZGVwdmFsdWVdID0gIiR7QGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCl9IgorCitkZWYgZ2V0X2djY19taXBzX3BsdF9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ21pcHMnLCAnbWlwc2VsJyBdIGFuZCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ21wbHQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJldHVybiAiLS13aXRoLW1pcHMtcGx0IgorICAgIHJldHVybiAiIgorCitkZWYgZ2V0X2xvbmdfZG91YmxlX3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkgaW4gWyAncG93ZXJwYycsICdwb3dlcnBjNjQnIF0gYW5kIGQuZ2V0VmFyKCdUQ0xJQkMnLCBUcnVlKSBpbiBbICd1Y2xpYmMnLCAnZ2xpYmMnIF06CisgICAgICAgIHJldHVybiAiLS13aXRoLWxvbmctZG91YmxlLTEyOCIKKyAgICByZXR1cm4gIiIKKworZGVmIGdldF9nY2NfbXVsdGlhcmNoX3NldHRpbmcoYmIsIGQpOgorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIG11bHRpYXJjaF9vcHRpb25zID0geworICAgICAgICAiaTU4NiI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJpNjg2IjogICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICAgICAgInBvd2VycGMiOiAiLS1lbmFibGUtdGFyZ2V0cz1wb3dlcnBjNjQiLAorICAgICAgICAibWlwcyI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJzcGFyYyI6ICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICB9CisKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgaWYgdGFyZ2V0X2FyY2ggaW4gbXVsdGlhcmNoX29wdGlvbnMgOgorICAgICAgICAgICAgcmV0dXJuIG11bHRpYXJjaF9vcHRpb25zW3RhcmdldF9hcmNoXQorICAgIHJldHVybiAiIgorCisjIHRoaXMgaXMgdXNlZCBieSB0aGUgbXVsdGlsaWIgc2V0dXAgb2YgZ2NjCitkZWYgZ2V0X3R1bmVfcGFyYW1ldGVycyh0dW5lLCBkKToKKyAgICBhdmFpbHR1bmVzID0gZC5nZXRWYXIoJ0FWQUlMVFVORVMnLCBUcnVlKQorICAgIGlmIHR1bmUgbm90IGluIGF2YWlsdHVuZXMuc3BsaXQoKToKKyAgICAgICAgYmIuZXJyb3IoJ1RoZSB0dW5lOiAlcyBpcyBub3Qgb25lIG9mIHRoZSBhdmFpbGFibGUgdHVuZXM6ICVzJywgdHVuZSBvciBOb25lLCBhdmFpbHR1bmVzKQorCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgb3ZlcnJpZGUgPSAnOnR1bmUtJyArIHR1bmUKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIHJldGRpY3QgPSB7fQorICAgIHJldGRpY3RbJ3R1bmUnXSA9IHR1bmUKKyAgICByZXRkaWN0WydjY2FyZ3MnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfQ0NBUkdTJywgVHJ1ZSkKKyAgICByZXRkaWN0WydmZWF0dXJlcyddID0gbG9jYWxkYXRhLmdldFZhcignVFVORV9GRUFUVVJFUycsIFRydWUpCisgICAgIyBCQVNFTElCIGlzIHVzZWQgYnkgdGhlIG11bHRpbGliIGNvZGUgdG8gY2hhbmdlIGxpYnJhcnkgcGF0aHMKKyAgICByZXRkaWN0WydiYXNlbGliJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdCQVNFX0xJQicsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0JBU0VMSUInLCBUcnVlKQorICAgIHJldGRpY3RbJ2FyY2gnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfQVJDSCcsIFRydWUpCisgICAgcmV0ZGljdFsnYWJpZXh0ZW5zaW9uJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdBQklFWFRFTlNJT04nLCBUcnVlKQorICAgIHJldGRpY3RbJ3RhcmdldF9mcHUnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKQorICAgIHJldGRpY3RbJ3BrZ2FyY2gnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpCisgICAgcmV0ZGljdFsncGFja2FnZV9leHRyYV9hcmNocyddID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9FWFRSQV9BUkNIUycsIFRydWUpCisgICAgcmV0dXJuIHJldGRpY3QKKworZ2V0X3R1bmVfcGFyYW1ldGVyc1t2YXJkZXBzZXhjbHVkZV0gPSAiQVZBSUxUVU5FUyBUVU5FX0NDQVJHUyBPVkVSUklERVMgVFVORV9GRUFUVVJFUyBCQVNFX0xJQiBCQVNFTElCIFRVTkVfQVJDSCBBQklFWFRFTlNJT04gVEFSR0VUX0ZQVSBUVU5FX1BLR0FSQ0ggUEFDS0FHRV9FWFRSQV9BUkNIUyIKKworREVCSUFOTkFNRV8ke01MUFJFRklYfWxpYmdjYyA9ICJsaWJnY2MxIgorCitNSVJST1JTID0rICJcCiske0dOVV9NSVJST1J9L2djYyAgICBmdHA6Ly9nY2MuZ251Lm9yZy9wdWIvZ2NjL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYwlmdHA6Ly9nZC50dXdpZW4uYWMuYXQvZ251L2djYy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MJaHR0cDovL21pcnJvcnMucmNuLm5ldC9wdWIvc291cmNld2FyZS9nY2MvcmVsZWFzZXMvIFxuIFwKKyR7R05VX01JUlJPUn0vZ2NjICAgaHR0cDovL2djYy5nZXQtc29mdHdhcmUuY29tL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYwlodHRwOi8vZ2NjLmdldC1zb2Z0d2FyZS5jb20vcmVsZWFzZXMvIFxuIFwKKyIKKyMKKyMgU2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMKKyMKK2djY2xpYmRpciA9ICIke2xpYmRpcn0vZ2NjIgorQklOViA9ICIke1BWfSIKKyNTID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9IgorUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKwordGFyZ2V0X2luY2x1ZGVkaXIgPz0gIiR7aW5jbHVkZWRpcn0iCit0YXJnZXRfbGliZGlyID89ICIke2xpYmRpcn0iCit0YXJnZXRfYmFzZV9saWJkaXIgPz0gIiR7YmFzZV9saWJkaXJ9IgordGFyZ2V0X3ByZWZpeCA/PSAiJHtwcmVmaXh9IgorCisjIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgZm9yIHRoZSBzaGFyZWQgd29yayBkaXJlY3RvcnksIHRoZSBkb19wYXRjaCBzaWduYXR1cmVzIG1hdGNoCisjIFRoZSByZWFsIFdPUktESVIgbG9jYXRpb24gaXNuJ3QgYSBkZXBlbmRlbmN5IGZvciB0aGUgc2hhcmVkIHdvcmtkaXIuCitzcmNfcGF0Y2hlc1t2YXJkZXBzZXhjbHVkZV0gPSAiV09SS0RJUiIKK3Nob3VsZF9hcHBseVt2YXJkZXBzZXhjbHVkZV0gKz0gIlBOIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0YmU3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxMjggQEAKK3JlcXVpcmUgZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKK3JlcXVpcmUgZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCisjCisjIEJ1aWxkIHRoZSBsaXN0IG9mIGxhbmFndWFnZXMgdG8gYnVpbGQuCisjCisjIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB2ZXJzaW9uIHNwZWNpZmljIC5pbmMgZmlsZS4KKworIyBKYXZhIChnY2ogZG9lc24ndCB3b3JrIG9uIGFsbCBhcmNoaXRlY3R1cmVzKQorSkFWQSA/PSAiLGphdmEiCitKQVZBX2FybSA/PSAiIgorSkFWQV9hcm1lYiA/PSAiIgorSkFWQV9taXBzZWwgPz0gIiIKK0pBVkFfc2gzID89ICIiCisjIGdjYyAzLnggZXhwZWN0cyAnZjc3JywgNC4wIGV4cGVjdHMgJ2Y5NScsIDQuMSBhbmQgNC4yIGV4cGVjdCAnZm9ydHJhbicKK0ZPUlRSQU4gPz0gIixmNzciCitMQU5HVUFHRVMgPz0gImMsYysrJHtGT1JUUkFOfSR7SkFWQX0iCisjIGRpc2FibGUgLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIGZvciBwb3dlcnBjIFNQRQorIyBhdCAtT3MgbGliZ2NjLnNvLjEgY3JlYXRlcyByZWZlcmVuY2VzIGludG8KKyMgaGlkZGVuIHN5bWJvbHMgaW4gbGliZ2NjLmEgd2hpY2ggbGlua2VyIGNvbXBsYWlucworIyB3aGVuIGxpbmtpbmcgc2hhcmVkIGxpYnJhcmllcyBmdXJ0aGVyIGluIHRoZSBidWlsZCBsaWtlIChnbnV0bHMpCisKK1NQRUNJQUxfQVJDSF9MSVNUID0gInBvd2VycGMiCitPUFRTUEFDRSA9ICcke0BiYi51dGlscy5jb250YWlucygiU1BFQ0lBTF9BUkNIX0xJU1QiLCAiJHtUQVJHRVRfQVJDSH0iLCAiIiwgIi0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSIsZCl9JworCitFWFRSQV9PRUNPTkZfQkFTRSA/PSAiIgorRVhUUkFfT0VDT05GX1BBVEhTID89ICIiCitFWFRSQV9PRUNPTkZfSU5JVElBTCA/PSAiIgorCitHQ0NNVUxUSUxJQiA/PSAiLS1kaXNhYmxlLW11bHRpbGliIgorR0NDVEhSRUFEUyA/PSAicG9zaXgiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgJHtAWyctLWVuYWJsZS1jbG9jYWxlPWdlbmVyaWMnLCAnJ11bZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSAhPSAnbm8nXX0gXAorICAgIC0td2l0aC1nbnUtbGQgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPSR7TEFOR1VBR0VTfSBcCisgICAgLS1lbmFibGUtdGhyZWFkcz0ke0dDQ1RIUkVBRFN9IFwKKyAgICAke0dDQ01VTFRJTElCfSBcCisgICAgLS1lbmFibGUtYzk5IFwKKyAgICAtLWVuYWJsZS1sb25nLWxvbmcgXAorICAgIC0tZW5hYmxlLXN5bXZlcnM9Z251IFwKKyAgICAtLWVuYWJsZS1saWJzdGRjeHgtcGNoIFwKKyAgICAtLXByb2dyYW0tcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIC0td2l0aG91dC1sb2NhbC1wcmVmaXggXAorICAgICR7T1BUU1BBQ0V9IFwKKyAgICAke0VYVFJBX09FQ09ORl9CQVNFfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfUEFUSFN9IFwKKyAgICAke0BnZXRfZ2NjX21pcHNfcGx0X3NldHRpbmcoYmIsIGQpfSBcCisgICAgJHtAZ2V0X2xvbmdfZG91YmxlX3NldHRpbmcoYmIsIGQpfSBcCisgICAgJHtAZ2V0X2djY19tdWx0aWFyY2hfc2V0dGluZyhiYiwgZCl9IFwKKyIKKworZXhwb3J0IGdjY19jdl9jb2xsZWN0Ml9saWJzID0gJ25vbmUgcmVxdWlyZWQnCisjIFdlIG5lZWQgdG8gc2V0IGdjY19jdl9jb2xsZWN0Ml9saWJzIGVsc2UgdGhlcmUgaXMgY3Jvc3MtY29tcGlsYXRpb24gYmFkbmVzcworIyBpbiB0aGUgY29uZmlnLmxvZyBmaWxlcyAod2hpY2ggbWlnaHQgbm90IGdldCBnZW5lcmF0ZWQgdW50aWwgZG9fY29tcGlsZQorIyBoZW5jZSBiZWluZyBtaXNzZWQgYnkgdGhlIGluc2FuZSBkb19jb25maWd1cmUgY2hlY2spLgorCisjIEJ1aWxkIHVjbGliYyBjb21waWxlcnMgd2l0aG91dCBjeGFfYXRleGl0IHN1cHBvcnQKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGludXggPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ZWwgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0bjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NGVsbjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCisKKyMgQVJNdjYrIGFkZHMgYXRvbWljIGluc3RydWN0aW9ucyB0aGF0IGFmZmVjdCB0aGUgQUJJIGluIGxpYnJhcmllcyBidWlsdAorIyB3aXRoIFRVTkVfQ0NBUkdTIGluIGdjYy1ydW50aW1lLiAgTWFrZSB0aGUgY29tcGlsZXIgZGVmYXVsdCB0byBhCisjIGNvbXBhdGlibGUgYXJjaGl0ZWN0dXJlLiAgYXJtdjYgYW5kIGFybXY3YSBjb3ZlciB0aGUgbWluaW11bSB0dW5lCisjIGZlYXR1cmVzIHVzZWQgaW4gT0UuCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybXY2ID0gIiAtLXdpdGgtYXJjaD1hcm12NiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtdjdhID0gIiAtLXdpdGgtYXJjaD1hcm12Ny1hIgorCitFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUID8/PSAiIgorQ1BQRkxBR1MgPSAiIgorCitTWVNURU1IRUFERVJTID0gIiR7dGFyZ2V0X2luY2x1ZGVkaXJ9IgorU1lTVEVNTElCUyA9ICIke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorU1lTVEVNTElCUzEgPSAiJHt0YXJnZXRfbGliZGlyfS8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIHRlYWNoIGdjYyB0byBmaW5kIGNvcnJlY3QgdGFyZ2V0IGluY2x1ZGVkaXIgd2hlbiBjaGVja2luZyBsaWJjIHNzcCBzdXBwb3J0CisJbWtkaXIgLXAgJHtCfS9nY2MKKwllY2hvICJOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIgPSAke1NZU1RFTUhFQURFUlN9IiA+ICR7Qn0vZ2NjL3Qtb2UKKwljYXQgJHtTfS9nY2MvZGVmYXVsdHMuaCB8IGdyZXAgLXYgIlwjZW5kaWYuKkdDQ19ERUZBVUxUU19IIiA+ICR7Qn0vZ2NjL2RlZmF1bHRzLmgubmV3CisJY2F0ID4+JHtCfS9nY2MvZGVmYXVsdHMuaC5uZXcgPDxfRU9GCisjZGVmaW5lIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiAiJHtTWVNURU1IRUFERVJTfSIKKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIke1NZU1RFTUxJQlN9IgorI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIiR7U1lTVEVNTElCUzF9IgorI2RlZmluZSBTWVNURU1MSUJTX0RJUiAiJHtTWVNURU1MSUJTfSIKKyNlbmRpZiAvKiAhIEdDQ19ERUZBVUxUU19IICovCitfRU9GCisJbXYgJHtCfS9nY2MvZGVmYXVsdHMuaC5uZXcgJHtCfS9nY2MvZGVmYXVsdHMuaAorfQorCitkb19jb25maWd1cmUgKCkgeworCSMgU2V0dXAgdGhlc2UgdmFycyBmb3IgY3Jvc3MgYnVpbGRpbmcgb25seQorCSMgLi4uIGJlY2F1c2UgZm9vX0ZPUl9UQVJHRVQgYXBwYXJlbnRseSBnZXRzIG1pc2ludGVycHJldGVkIGluc2lkZSB0aGUKKwkjIGdjYyBidWlsZCBzdHVmZiB3aGVuIHRoZSBidWlsZCBpcyBwcm9kdWNpbmcgYSBjcm9zcyBjb21waWxlciAtIGkuZS4KKwkjIHdoZW4gdGhlICdjdXJyZW50JyB0YXJnZXQgaXMgdGhlICdob3N0JyBzeXN0ZW0sIGFuZCB0aGUgaG9zdCBpcyBub3QKKwkjIHRoZSB0YXJnZXQgKGJlY2F1c2UgdGhlIGJ1aWxkIGlzIGFjdHVhbGx5IG1ha2luZyBhIGNyb3NzIGNvbXBpbGVyISkKKwlpZiBbICIke0JVSUxEX1NZU30iICE9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQlleHBvcnQgQ0NfRk9SX1RBUkdFVD0iJHtDQ30iCisJCWV4cG9ydCBHQ0NfRk9SX1RBUkdFVD0iJHtDQ30iCisJCWV4cG9ydCBDWFhfRk9SX1RBUkdFVD0iJHtDWFh9IgorCQlleHBvcnQgQVNfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1hcyIKKwkJZXhwb3J0IExEX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9bGQiCisJCWV4cG9ydCBOTV9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfW5tIgorCQlleHBvcnQgQVJfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1hciIKKwkJZXhwb3J0IEdGT1JUUkFOX0ZPUl9UQVJHRVQ9Imdmb3J0cmFuIgorCQlleHBvcnQgUkFOTElCX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9cmFubGliIgorCWZpCisJZXhwb3J0IENDX0ZPUl9CVUlMRD0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IENYWF9GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9MREZMQUdTfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCisKKwlvZV9ydW5jb25mCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW4uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlNDg4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0wLDAgKzEsMTc3IEBACitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK1NVTU1BUlkgPSAiR05VIGNjIGFuZCBnY2MgQyBjb21waWxlcnMgKGNyb3NzLWNhbmFkaWFuIGZvciAke1RBUkdFVF9BUkNIfSB0YXJnZXQpIgorUE4gPSAiZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtIT1NUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay0ke0hPU1RfUFJFRklYfWxpYmMtZm9yLWdjYyBuYXRpdmVzZGstZ2V0dGV4dCIKKworR0NDTVVMVElMSUIgPSAiLS1lbmFibGUtbXVsdGlsaWIiCisKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0JHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1idWlsZC10aW1lLXRvb2xzPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtUQVJHRVRfU1lTfS9iaW4gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisjIFdlIGhhdmUgdG8gcG9pbnQgZ2NjIGF0IGEgc3lzcm9vdCBidXQgd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIGlmIHRoaXMgY2hhbmdlcworIyBlLmcuIHdlIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBtYWNoaW5lcyB3aXRoIGRpZmZlcmVudCB0dW5lcy4KK0VYVFJBX09FQ09ORl9QQVRIU1t2YXJkZXBzZXhjbHVkZV0gPSAiVFVORV9QS0dBUkNIIgorVEFSR0VUX0FSQ0hbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfQVJDSCIKK2dldF9nY2NfZmxvYXRfc2V0dGluZ1t2YXJkZXB2YWx1ZV0gPSAiIgorCisjCisjIGdjYy1jcm9zcyBsb29rcyBhbmQgZmluZHMgdGhlc2UgaW4gJHtleGVjX3ByZWZpeH0gYnV0IHdlJ3JlIG5vdCBzbyBsdWNreQorIyBmb3IgdGhlIHNkay4gSGFyZGNvZGluZyB0aGUgcGF0aHMgZW5zdXJlcyB0aGUgYnVpbGQgZG9lc24ndCBnbyBjYW5hZGlhbiBvciB3b3JzZS4KKyMKK2V4cG9ydCBBUl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hciIKK2V4cG9ydCBBU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hcyIKK2V4cG9ydCBETExUT09MX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWRsbHRvb2wiCitleHBvcnQgQ0NfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorZXhwb3J0IENYWF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1nKysiCitleHBvcnQgR0NDX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWdjYyIKK2V4cG9ydCBMRF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1sZCIKK2V4cG9ydCBMSVBPX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWxpcG8iCitleHBvcnQgTk1fRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bm0iCitleHBvcnQgT0JKRFVNUF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1vYmpkdW1wIgorZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgU1RSSVBfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9c3RyaXAiCitleHBvcnQgV0lORFJFU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH13aW5kcmVzIgorCisjCisjIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBhbmQgbWFrZSBzdXJlIHRoZSBjb21waWxlciBjYW4gZmluZCBzdGFnaW5nCisjCitleHBvcnQgQVJDSF9GTEFHU19GT1JfVEFSR0VUID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IENDX0ZPUl9CVUlMRD0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IENYWF9GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9MREZMQUdTfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBhbGwtaG9zdCBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworfQorCisjIEhhdmluZyBhbnl0aGluZyBhdXRvIGRlcGVuZGluZyBvbiBnY2MtY3Jvc3Mtc2RrIGlzIGEgcmVhbGx5IGJhZCBpZGVhLi4uCitFWENMVURFX0ZST01fU0hMSUJTID0gIjEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MiCisKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke2V4ZWNfcHJlZml4fS9iaW4vKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyogXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKi5vIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYiogXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9pbmNsdWRlLyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vZ3R5cGUuKiBcCisgICAgJHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyogXAorICAgICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2xpYi8qIFwKKyAgICAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS91c3IvaW5jbHVkZS8qIFwKKyIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vLmRlYnVnIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luLy5kZWJ1ZyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICJcCisgICAgJHtpbmZvZGlyfSBcCisgICAgJHttYW5kaXJ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvUkVBRE1FIFwKKyIKKworRVhFRVhUID0gIiIKKworIyBDb21wdXRlIGhvdyB0byBnZXQgZnJvbSBsaWJleGVjZGlyIHRvIGJpbmRpciBpbiBweXRob24gKGVhc2llciB0aGFuIHNoZWxsKQorQklOUkVMUEFUSCA9ICIke0Bvcy5wYXRoLnJlbHBhdGgoZC5leHBhbmQoIiR7YmluZGlyfSIpLCBkLmV4cGFuZCgiJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9IikpfSIKKworZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwkjIENsZWFudXAgc29tZSBvZiB0aGUgJHtsaWJkaXJ9eyxleGVjfS9nY2Mgc3R1ZmYgLi4uCisJcm0gLXIgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtciAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisKKwkjIFdlIGNhcmUgYWJvdXQgZysrIG5vdCBjKysKKwlybSAtZiAke0R9JHtiaW5kaXJ9LypjKysKKworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZ2NjLTx2ZXJzaW9uPiBjb3BpZXMKKwlybSAtZiAke0R9JHtiaW5kaXJ9LypnY2MtPy4/KgorCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlybSAtZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vbGliL2xpYmliZXJ0eS5hCisJIyBOb3Qgc3VyZSB3aGVyZSB0aGUgc3RyYW5nZSBwYXRocyBjb21lIGZyb20KKwlybSAtZiAke0R9JHtsaWJkaXJ9Ly4uL2xpYi9saWJpYmVydHkuYQorCXJtIC1mICR7RH0ke2xpYmRpcn0vbGliaWJlcnR5LmEKKworCSMgQ2xlYW51cCBlbXB0eSBkaXJlY3RvcmllcyB3aGljaCBhcmUgbm90IHNoaXBwZWQKKwkjIHdlIHVzZSBybWRpciBpbnN0ZWFkIG9mICdybSAtZicgdG8gZW5zdXJlIHRoZSBub24gZW1wdHkgZGlyZWN0b3JpZXMgYXJlIG5vdCBkZWxldGVkCisJIyAke0R9JHtsaWJkaXJ9Ly4uL2xpYiBvbmx5IHNlZW1zIHRvIGFwcGVhciB3aXRoIFNES01BQ0hJTkU9aTY4NgorCWxvY2FsIGVtcHR5X2RpcnM9IiR7RH0ke2xpYmRpcn0vLi4vbGliICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9saWIgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9IgorCWZvciBpIGluICRlbXB0eV9kaXJzOyBkbworCQlbIC1kICRpIF0gJiYgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJGkKKwlkb25lCisKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCXN1ZmZpeD0ke0VYRUVYVH0KKwlmb3IgdCBpbiBhciBhcyBsZCBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHN0cmlwIGc3NyBnY2MgY3BwIGdmb3J0cmFuOyBkbworCQlpZiBbICIkdCIgPSAiZzc3IiAtbyAiJHQiID0gImdmb3J0cmFuIiBdICYmIFsgISAtZSAke0R9JHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH0kdCRzdWZmaXggXTsgdGhlbgorCQkJY29udGludWUKKwkJZmkKKworCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQkc3VmZml4ICRkZXN0JHQkc3VmZml4CisJZG9uZQorCXQ9cmVhbC1sZAorCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH1sZCRzdWZmaXggJGRlc3QkdCRzdWZmaXgKKworCSMgbGlicXVhZG1hdGggaGVhZGVycyBuZWVkIHRvICBiZSBhdmFpbGFibGUgaW4gdGhlIGdjYyBsaWJleGVjIGRpcgorCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGhfd2Vhay5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KKwkKKwljcm9zc19jYW5hZGlhbl9iaW5kaXJsaW5rcworfQorCitFTEZVVElMUyA9ICJuYXRpdmVzZGstZWxmdXRpbHMiCitERVBFTkRTICs9ICJuYXRpdmVzZGstZ21wIG5hdGl2ZXNkay1tcGZyIG5hdGl2ZXNkay1saWJtcGMgJHtFTEZVVElMU30gbmF0aXZlc2RrLXpsaWIiCitSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLW1wZnIgbmF0aXZlc2RrLWxpYm1wYyAke0VMRlVUSUxTfSIKKworU1lTVEVNSEVBREVSUyA9ICIvdXNyL2luY2x1ZGUiCitTWVNURU1MSUJTID0gIiR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCitTWVNURU1MSUJTMSA9ICIke3RhcmdldF9saWJkaXJ9LyIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICAtLXdpdGgtbXBmcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsYXlvdXRfZXhlY19wcmVmaXh9IFwKKyAgICAtLXdpdGgtbXBjPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9leGVjX3ByZWZpeH0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtYmFyZW1ldGFsID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCisjIGdjYyA0LjcgbmVlZHMgLWlzeXN0ZW0KK2V4cG9ydCBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQgPSAiLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSAtaXN5c3RlbT0ke3RhcmdldF9pbmNsdWRlZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1M2M1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC44LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1M2M1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1M2M1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS4yLmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTc0NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsOTYgQEAKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIgorUEFDS0FHRVMgPSAiIgorCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitQTiA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKKworQ1JPU1NfVEFSR0VUX1NZU19ESVJfYXBwZW5kID0gIi4ke1BOfSIKKworIyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIGEgLXZlcnktIGJhc2ljIGNvbmZpZworIyBzeXNyb290IGlzIG5lZWRlZCBpbiBjYXNlIHdlIHVzZSBsaWJjLWluaXRpYWwKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS13aXRoLW5ld2xpYiBcCisgICAgLS13aXRob3V0LWhlYWRlcnMgXAorICAgIC0tZGlzYWJsZS1zaGFyZWQgXAorICAgIC0tZGlzYWJsZS10aHJlYWRzIFwKKyAgICAtLWRpc2FibGUtbXVsdGlsaWIgXAorICAgIC0tZGlzYWJsZS1fX2N4YV9hdGV4aXQgXAorICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jIFwKKyAgICAke09QVFNQQUNFfSBcCisgICAgLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke0dDQ0NST1NTX0JVSUxEU1lTUk9PVH0gXAorICAgICR7RVhUUkFfT0VDT05GX0lOSVRJQUx9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnLS13aXRoLWxkPSR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS8ke1RBUkdFVF9QUkVGSVh9bGQuYmZkJywgJycsIGQpfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUfSBcCisiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLW5hdGl2ZS1zeXN0ZW0taGVhZGVyLWRpcj0ke1NZU1RFTUhFQURFUlN9IgorCitHQ0NDUk9TU19CVUlMRFNZU1JPT1QgPSAiJHtCfS90bXBzeXNyb290IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc3lzcj0ke0dDQ0NST1NTX0JVSUxEU1lTUk9PVH0ke3RhcmdldF9pbmNsdWRlZGlyfQorCW1rZGlyIC1wICRzeXNyCisJZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworCQlybSAtZiAkc3lzci8kdAorCQlsbiAtcyAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfS8kdCAkc3lzci8KKwlkb25lCit9CisKK2RvX2NvbXBpbGUgKCkgeworICAgIG9lX3J1bm1ha2UgYWxsLWdjYyBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworfQorZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1nY2MKKworCSMgV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAoaGVyZSBzaGFyZXMvIGNvbnRhaW5zIG1hbi8sIGluZm8vLCBsb2NhbGUvKS4KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuYSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtleGVjX3ByZWZpeH0vbGliIC1uYW1lIGxpYmliZXJ0eS5oIHwgeGFyZ3Mgcm0gLWYKKworCSMgSW5zZXJ0IHN5bWxpbmtzIGludG8gbGliZXhlYyBzbyB3aGVuIHRvb2xzIHdpdGhvdXQgYSBwcmVmaXggYXJlIHNlYXJjaGVkIGZvciwgdGhlIGNvcnJlY3Qgb25lcyBhcmUKKwkjIGZvdW5kLiBUaGVzZSBuZWVkIHRvIGJlIHJlbGF0aXZlIHBhdGhzIHNvIHRoZXkgd29yayBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorCWRlc3Q9JHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8KKwlpbnN0YWxsIC1kICRkZXN0CisJdXNlbGQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJy5iZmQnLCAnJywgZCl9CisJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfWxkJHt1c2VsZH0gJHtkZXN0fWxkCisJZm9yIHQgaW4gYXIgYXMgbm0gb2JqY29weSBvYmpkdW1wIHJhbmxpYiBzdHJpcCBnNzcgZ2NjIGNwcCBnZm9ydHJhbjsgZG8KKwkJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfSR0ICRkZXN0JHQKKwlkb25lCisJIyBmaXhlZCBsaW1pdHMuaCBpbmZhY3QgaW5jbHVkZXMgdGhlIHNvIGNhbGxlZCByZWFsIGxpbWl0cy5oCisJIyB3aGljaCBzaG91bGQgY29tZSBmcm9tIGxpYmMgYnV0IHdoZW4gd2UgYnVpbGQgbGliYy1pbml0aWFsCisJIyB0aGVuIGJ1bmNoIG9mIGNvbmZpZ3VyZSB0ZXN0cyBpbmNsdWRlIGZpeGVkIGxpbWl0cy5oIHdoaWNoIGluIHR1cm4KKwkjIGluY2x1ZGVzIHJlYWwgbGltaXRzLmggYnV0IHRoaXMgcmVhbCBsaW1pdHMuaCBpcyBub3Qgc3RhZ2VkIHlldAorCSMgc28gd2Ugb3ZlcndpcnRlIHRoZSBnZW5lcmF0ZWQgaW5jbHVkZS1maXhlZC9saW1pdHMuaCBmb3IgZ2NjLWNyb3NzLWluaXRpYWwKKwkjIHRvIGdldCByaWQgcmVmZXJlbmNlcyB0byByZWFsIGxpbWl0cy5oCisJY3AgZ2NjL2luY2x1ZGUtZml4ZWQvbGltaXRzLmggJHtEfSR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9saW1pdHMuaAorCisJIyBnY2MtcnVudGltZSBpbnN0YWxscyBsaWJnY2MgaW50byBhIHNwZWNpYWwgbG9jYXRpb24gaW4gc3RhZ2luZyBzaW5jZSBpdCBicmVha3MgZG9pbmcgYSBzdGFuZGFsb25lIGJ1aWxkCisJY2FzZSAke1BOfSBpbgorCQkqZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9KQorCQkJZGVzdD0ke0R9LyR7aW5jbHVkZWRpcn0vZ2NjLWJ1aWxkLWludGVybmFsLWluaXRpYWwtJHtUQVJHRVRfU1lTfQorCQkJaGFyZGxpbmtkaXIgLiAkZGVzdAorCQk7OworCWVzYWMKK30KKyMKKyMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3lzcm9vdCBzdGFnaW5nIGNvcHkgc2luY2UgdGhpcyB3b24ndCBsb29rIGxpa2UgYSB0YXJnZXQgc3lzdGVtCisjCitzeXNyb290X3N0YWdlX2FsbCgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9ICR7U1lTUk9PVF9ERVNURElSfQorCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfYmFzZV9saWJkaXJ9LworCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfbGliZGlyfS8KKwltdiAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9iYXNlX2xpYmRpcn0vKiAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9iYXNlX2xpYmRpcn0vIHx8IHRydWUKKwltdiAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9saWJkaXJ9LyogJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfbGliZGlyfS8gfHwgdHJ1ZQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfS8ke1NUQUdJTkdfRElSX0hPU1R9LyAke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyAke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8ke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzczZTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zcy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3M2U1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTA2MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYwpAQCAtMCwwICsxLDE5OCBAQAoraW5oZXJpdCBjcm9zcworCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRVhUUkFERVBFTkRTID0gIiIKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjICR7RVhUUkFERVBFTkRTfSAke05BVElWRURFUFN9IgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyIKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgICAgIGQuc2V0VmFyKCJFWFRSQURFUEVORFMiLCAibGludXgtbGliYy1oZWFkZXJzIikKK30KKworUE4gPSAiZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorCityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiCitFWFRSQV9PRUNPTkZfYXBwZW5kX3NoNCA9ICIgXAorICAgIC0td2l0aC1tdWx0aWxpYi1saXN0PSBcCisgICAgLS1lbmFibGUtaW5jb21wbGV0ZS10YXJnZXRzIFwKKyIKKworRVhUUkFfT0VDT05GICs9ICJcCisgICAgLS13aXRoLW1wZnI9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyIKKworREVQRU5EU19yZW1vdmVfbGliYy1iYXJlbWV0YWwgOj0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1iYXJlbWV0YWwgPSAiIC0td2l0aG91dC1oZWFkZXJzIgorRVhUUkFfT0VDT05GX3JlbW92ZV9saWJjLWJhcmVtZXRhbCA9ICItLWVuYWJsZS10aHJlYWRzPXBvc2l4IgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdCR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQgKz0gIi1pc3lzdGVtJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0iCisKK2RvX2NvbXBpbGUgKCkgeworCWV4cG9ydCBDQz0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IEFSX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tYXIiCisJZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUPSIke1RBUkdFVF9TWVN9LXJhbmxpYiIKKwlleHBvcnQgTERfRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1sZCIKKwlleHBvcnQgTk1fRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1ubSIKKwlleHBvcnQgQ0NfRk9SX1RBUkdFVD0iJHtDQ0FDSEV9ICR7VEFSR0VUX1NZU30tZ2NjIgorCWV4cG9ydCBDRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DWFhGTEFHU30iCisJZXhwb3J0IExERkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfTERGTEFHU30iCisKKwlvZV9ydW5tYWtlIGFsbC1ob3N0IGNvbmZpZ3VyZS10YXJnZXQtbGliZ2NjCisJIyBub3cgZ2VuZXJhdGUgc2NyaXB0IHRvIGRyaXZlIHRlc3RpbmcKKwllY2hvICIjIS91c3IvYmluL2VudiBzaCIgPiR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZXQgPj4gJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCSMgcHJ1bmUgb3V0IHRoZSB1bm5lZWRlZCB2YXJzCisJc2VkIC1pIC1lICIvXkJBU0gvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15VU0VSL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eT1BUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRElSU1RBQ0svZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15FVUlEL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRlVOQ05BTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15HUk9VUFMvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15IT1NUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eSE9NRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXklGUy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkxDX0FMTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkxPR05BTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15NQUNIVFlQRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXk9TVFlQRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBJUEUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TSEVMTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXicvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15VSUQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15URVJNL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUEFUQ0hfR0VUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUEtHXy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBPU0lYTFlfL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUFBJRC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBTNC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlEvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TSExWTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlNUQUdJTkcvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15MRF9MSUJSQVJZX1BBVEgvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QU0VVRE8vZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCisJIyBhcHBlbmQgZXhlY3V0aW9uIHBhcnQgb2YgdGhlIHNjcmlwdAorY2F0ID4+ICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MgPDwgU1RPUAordGFyZ2V0PSJcJDEiCit1c2FnZSAoKSB7CisJZWNobyAiVXNhZ2U6IgorCWVjaG8gIlwkMCB1c2VyQHRhcmdldCAnZXh0cmEgb3B0aW9ucyB0byBkZWphZ251JyIKKwllY2hvICJcJDAgdGFyZ2V0ICdleHRyYSBvcHRpb25zIHRvIGRlamFnbnUnIgorCWVjaG8gIlwkMCB0YXJnZXQiCisJZWNobyAiZS5nLiBcJDAgMTkyLjE2OC43LjIgJyBkZy5leHA9dmlzaWJpbGl0eS1kLmMnIgorCWVjaG8gIndpbGwgb25seSBydW4gdmlzaWJpbGl0eS1kLmMgdGVzdCBjYXNlIgorCWVjaG8gImUuZy4gXCQwIDE5Mi4xNjguNy4yICcvLW10aHVtYiBkZy5leHA9dmlzaWJpbGl0eS1kLmMnIgorCWVjaG8gIndpbGwgb25seSBydW4gdmlzaWJpbGl0eS1kLmMgdGVzdCBjYXNlIGluIHRodW1iIG1vZGUiCisJZWNobyAiWW91IG5lZWQgdG8gaGF2ZSBkZWphZ251IGF1dG9nZW4gZXhwZWN0IGluc3RhbGxlZCIKKwllY2hvICJvbiB0aGUgYnVpbGQgaG9zdCIKKyAgICB9CitpZiBbICJ4XCR0YXJnZXQiID0gIngiIF0KK3RoZW4KKwllY2hvICJQbGVhc2Ugc3BlY2lmeSB0aGUgdGFyZ2V0IG1hY2hpbmUgYW5kIHJlbW90ZSB1c2VyIGluIGZvcm0gb2YgdXNlckB0YXJnZXRcbiIKKwl1c2FnZQorCWV4aXQgMTsKK2ZpCisKK3NoaWZ0CisKK2VjaG8gIlwkdGFyZ2V0IiB8IGdyZXAgIkAiIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iID0gIngwIiBdCit0aGVuCisgICB1c2VyPVwkKGVjaG8gXCR0YXJnZXQgfCBjdXQgLWQgJ0AnIC1mIDEpCisgICB0YXJnZXQ9XCQoZWNobyBcJHRhcmdldCB8IGN1dCAtZCAnQCcgLWYgMikKK2Vsc2UKKyAgIHVzZXI9XCRVU0VSCitmaQorc3NoIFwkdXNlckBcJHRhcmdldCBkYXRlIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iICE9ICJ4MCIgXQordGhlbgorCWVjaG8gIkZhaWxlZCBjb25uZWN0aW5nIHRvIFwkdXNlckBcJHRhcmdldCBpdCBjb3VsZCBiZSBiZWNhdXNlIgorCWVjaG8gInlvdSBkb24ndCBoYXZlIHBhc3N3b3JkbGVzcyBzc2ggc2V0dXAgdG8gYWNjZXNzIFwkdGFyZ2V0IgorCWVjaG8gIm9yIHNvbWV0aW1lcyBob3N0IGtleSBoYXMgYmVlbiBjaGFuZ2VkIgorCWVjaG8gImluIHN1Y2ggY2FzZSBkbyBzb21ldGhpbmcgbGlrZSBiZWxvdyBvbiBidWlsZCBob3N0IgorCWVjaG8gInNzaC1rZXlnZW4gLWYgIn4vLnNzaC9rbm93bl9ob3N0cyIgLVIgXCR0YXJnZXQiCisJZWNobyAiYW5kIHRoZW4gdHJ5IHNzaCBcJHVzZXJAXCR0YXJnZXQiCisKKwl1c2FnZQorCWV4aXQgMQorZmkKKwllY2hvICJsYXBwZW5kIGJvYXJkc19kaXIgW3B3ZF0vLi4vLi4vLi4iID4gJHtCfS9zaXRlLmV4cAorCWVjaG8gImxvYWRfZ2VuZXJpY19jb25maWcgXCJ1bml4XCIiID4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gdXNlcm5hbWUgXCR1c2VyIiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwllY2hvICJzZXRfYm9hcmRfaW5mbyByc2hfcHJvZyBzc2giID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIHJjcF9wcm9nIHNjcCIgPj4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gaG9zdG5hbWUgXCR0YXJnZXQiID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCURFSkFHTlU9JHtCfS9zaXRlLmV4cCBtYWtlIC1rIGNoZWNrIFJVTlRFU1RGTEFHUz0iLS10YXJnZXRfYm9hcmQ9JHtQQUNLQUdFX0FSQ0h9XCRAIgorCitTVE9QCisKKwljaG1vZCAreCAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisKK30KKworSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCisKKyMgQ29tcHV0ZSBob3cgdG8gZ2V0IGZyb20gbGliZXhlY2RpciB0byBiaW5kaXIgaW4gcHl0aG9uIChlYXNpZXIgdGhhbiBzaGVsbCkKK0JJTlJFTFBBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGQuZXhwYW5kKCIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9TWVN9IiksIGQuZXhwYW5kKCIke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0iKSl9IgorCitkb19pbnN0YWxsICgpIHsKKwkoIGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC11bndpbmRfaCApCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWhvc3QKKworCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2xpYmRpcn0KKyAgICAKKwkjIExpbmsgZ2ZvcnRyYW4gdG8gZzc3IHRvIHNhdGlzZnkgbm90LXNvLXNtYXJ0IGNvbmZpZ3VyZSBvciBoYXJkIGNvZGVkIGc3NworCSMgZ2ZvcnRyYW4gaXMgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUuIFRoaXMgaXMgYSBzYWZlIGFuZCBwcmFjdGljYWwgc29sdXRpb24uIAorCWxuIC1zZiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfUFJFRklYfWc3NyB8fCB0cnVlCisKKwkKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4gVGhlc2UgbmVlZCB0byBiZSByZWxhdGl2ZSBwYXRocyBzbyB0aGV5IHdvcmsgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCWZvciB0IGluIGFyIGFzIGxkIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgZzc3IGdjYyBjcHAgZ2ZvcnRyYW47IGRvCisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAkZGVzdCR0CisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAke2Rlc3R9JHtUQVJHRVRfUFJFRklYfSR0CisJZG9uZQorCisJIyBSZW1vdmUgdGhpbmdzIHdlIGRvbid0IG5lZWQgYnV0IGtlZXAgc2hhcmUvamF2YQorCWZvciBkIGluIGluZm8gbWFuIHNoYXJlL2RvYyBzaGFyZS9sb2NhbGUgc2hhcmUvbWFuIHNoYXJlL2luZm87IGRvCisJCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8kZAorCWRvbmUKKworCSMgbGlicXVhZG1hdGggaGVhZGVycyBuZWVkIHRvICBiZSBhdmFpbGFibGUgaW4gdGhlIGdjYyBsaWJleGVjIGRpcgorCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGhfd2Vhay5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmEgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuaCB8IHhhcmdzIHJtIC1mCisKKwkjIGdjYy1ydW50aW1lIGluc3RhbGxzIGxpYmdjYyBpbnRvIGEgc3BlY2lhbCBsb2NhdGlvbiBpbiBzdGFnaW5nIHNpbmNlIGl0IGJyZWFrcyBkb2luZyBhIHN0YW5kYWxvbmUgYnVpbGQKKwljYXNlICR7UE59IGluCisJCSpnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSkKKwkJCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2djYy1idWlsZC1pbnRlcm5hbC0ke1RBUkdFVF9TWVN9CisJCQloYXJkbGlua2RpciAuICRkZXN0CisJCTs7CisJZXNhYworfQorCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzY2NhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNjY2EwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2NjYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzUuMi5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjU5OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsMTAgQEAKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK1NZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK1NZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCitTWVNURU1MSUJTMSA9ICIke1NES1BBVEhOQVRJVkV9JHtsaWJkaXJfbmF0aXZlc2RrfS8iCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgZ2V0dGV4dC1uYXRpdmUgJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsLWNyb3Nzc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MGUxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay1pbml0aWFsLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkwZTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTBlMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF8ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y4ODBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMKQEAgLTAsMCArMSwxMiBAQAoraW5oZXJpdCBjcm9zc3NkaworCitQTiA9ICJnY2MtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0iCisKK1NZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK1NZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCitTWVNURU1MSUJTMSA9ICIke1NES1BBVEhOQVRJVkV9JHtsaWJkaXJfbmF0aXZlc2RrfS8iCisKK0dDQ01VTFRJTElCID0gIi0tZGlzYWJsZS1tdWx0aWxpYiIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay0ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjIGdldHRleHQtbmF0aXZlICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtY3Jvc3NzZGsgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrLWNyb3Nzc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE2YzRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGsuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTZjNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1tdWx0aWxpYi1jb25maWcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1tdWx0aWxpYi1jb25maWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjlmNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKQEAgLTAsMCArMSwyMjcgQEAKKyMgZm9sbG93aW5nIGNvZGUgbW9kaWZpZXMgdGhlc2UgZGVmaW5pdGlvbnMgaW4gdGhlIGdjYyBjb25maWcKKyMgICAgTVVMVElMSUJfT1BUSU9OUworIyAgICBNVUxUSUxJQl9ESVJOQU1FUworIyAgICBNVUxUSUxJQl9PU0RJUk5BTUVTCisjICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NAorIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUlgzMgorIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUk4zMgorIyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNlIG9mIHRoZXNlIHZhcmlhYmxlcyBsb29rIGF0IHRoZXNlIGZpbGVzIGluIHRoZSBnY2Mgc291cmNlIGNvZGUKKyMgICAgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisjICAgIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL2kzODYvbGludXg2NC5oCisjICAgIGdjYy9jb25maWcvbWlwcy9saW51eDY0LmgKKyMgICAgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCisKK01VTFRJTElCX09QVElPTl9XSElURUxJU1QgPz89ICItbTMyIC1tNjQgLW14MzIgLW1hYmk9bjMyIC1tYWJpPTMyIC1tYWJpPTY0IiAKKworcHl0aG9uIGdjY19tdWx0aWxpYl9zZXR1cCgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IGdsb2IKKworICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdCJywgVHJ1ZSkKKyAgICBzcmNfY29uZl9kaXIgPSAnJXMvZ2NjL2NvbmZpZycgJSBzcmNkaXIKKyAgICBidWlsZF9jb25mX2RpciA9ICclcy9nY2MvY29uZmlnJyAlIGJ1aWxkZGlyCisKKyAgICBiYi51dGlscy5yZW1vdmUoYnVpbGRfY29uZl9kaXIsIFRydWUpCisgICAgbWxfZ2xvYnMgPSAoJyVzLyovdC1saW51eDY0JyAlIHNyY19jb25mX2RpciwKKyAgICAgICAgICAgICAgICAnJXMvKi9saW51eDY0LmgnICUgc3JjX2NvbmZfZGlyLAorICAgICAgICAgICAgICAgICclcy8qL2xpbnV4LmgnICUgc3JjX2NvbmZfZGlyLAorICAgICAgICAgICAgICAgICclcy9saW51eC5oJyAlIHNyY19jb25mX2RpcikKKworICAgICMgY29weSB0aGUgdGFyZ2V0IG11bHRpbGliIGNvbmZpZyBmaWxlcyB0byAke0J9CisgICAgZm9yIG1sX2dsb2IgaW4gbWxfZ2xvYnM6CisgICAgICAgIGZvciBmbiBpbiBnbG9iLmdsb2IobWxfZ2xvYik6CisgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnBhdGgucmVscGF0aChmbiwgc3JjX2NvbmZfZGlyKQorICAgICAgICAgICAgcGFyZW50X2RpciA9IG9zLnBhdGguZGlybmFtZShyZWxfcGF0aCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcignJXMvJXMnICUgKGJ1aWxkX2NvbmZfZGlyLCBwYXJlbnRfZGlyKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZuLCAnJXMvJXMnICUgKGJ1aWxkX2NvbmZfZGlyLCByZWxfcGF0aCkpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbXVsdGlsaWJzID0gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgaWYgbm90IG11bHRpbGlicyBhbmQgcG4gIT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICByZXR1cm4KKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKworICAgIGlmICgnJXNnY2MnICUgbWxwcmVmaXgpICE9IHBuIGFuZCAobm90IHBuLnN0YXJ0c3dpdGgoJ2djYy1jcm9zcy1jYW5hZGlhbicpKSBhbmQgcG4gIT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICByZXR1cm4KKworCisgICAgZGVmIHdyaXRlX2NvbmZpZyhyb290LCBmaWxlcywgb3B0aW9ucywgZGlybmFtZXMsIG9zZGlybmFtZXMpOgorICAgICAgICBmb3IgbWxfY29uZl9maWxlIGluIGZpbGVzOgorICAgICAgICAgICAgd2l0aCBvcGVuKHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgIyByZWNyZWF0ZSBtdWx0aWxpYiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHN1YnN0cyA9IFsKKyAgICAgICAgICAgICAgICAgICAgKHInXihccyooTVVMVElMSUJfT1BUSU9OU1xzKj0pLiopJCcsIHInXDIgJXMnICUgJy8nLmpvaW4ob3B0aW9ucykpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKk1VTFRJTElCX09QVElPTlNccypcKz0uKikkJywgJycpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKihNVUxUSUxJQl9ESVJOQU1FU1xzKj0pLiopJCcsIHInXDIgJXMnICUgJyAnLmpvaW4oZGlybmFtZXMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9ESVJOQU1FU1xzKlwrPS4qKSQnLCAnJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqKE1VTFRJTElCX09TRElSTkFNRVNccyo9KS4qKSQnLCByJ1wyICVzJyAlICcgJy5qb2luKG9zZGlybmFtZXMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9PU0RJUk5BTUVTXHMqXCs9LiopJCcsICcnKSwKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgICAgICBmb3IgKGksIGxpbmUpIGluIGVudW1lcmF0ZShmaWxlbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Vic3QgaW4gc3Vic3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YihzdWJzdFswXSwgc3Vic3RbMV0sIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaW5lc1tpXSA9IGxpbmUKKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihyb290ICsgJy8nICsgbWxfY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJycuam9pbihmaWxlbGluZXMpKQorCisgICAgZGVmIHdyaXRlX2hlYWRlcnMocm9vdCwgZmlsZXMsIGxpYmRpcjMyLCBsaWJkaXI2NCwgbGliZGlyeDMyLCBsaWJkaXJuMzIpOgorICAgICAgICBkZWYgd3JhcF9saWJkaXIobGliZGlyKToKKyAgICAgICAgICAgIGlmIGxpYmRpci5maW5kKCdTWVNURU1MSUJTX0RJUicpICE9IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiAnIiVyIicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICciLyVzLyInICUgbGliZGlyCisKKyAgICAgICAgZm9yIG1sX2NvbmZfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGZuID0gcm9vdCArICcvJyArIG1sX2NvbmZfZmlsZQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZWxpbmVzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgIyByZXBsYWNlIGxpbmVzIGxpa2UKKyAgICAgICAgICAgICAgICAjICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAgICAgICAgICAgICAgICAjIGJ5CisgICAgICAgICAgICAgICAgIyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvIiAibGQtbGludXguc28uMiIKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgbmVlZGVkIHRvIHB1dCB0aGUgY29ycmVjdCBkeW5hbWljIGxvYWRlciBwYXRoIGluIHRoZSBnZW5lcmF0ZWQgYmluYXJpZXMKKyAgICAgICAgICAgICAgICBzdWJzdHMgPSBbCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXIzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSNjRccyopKFxTKykoXHMqXCJcUytcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUjY0XHMqXCJcUytcIlxzKikoXFMrKShccypcIlxTK1wiXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1w1JyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSWDMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyeDMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXJuMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqVUNMSUJDX0RZTkFNSUNfTElOS0VSNjRccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUk4zMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcm4zMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUlxiXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgIF0KKworICAgICAgICAgICAgICAgIGZvciAoaSwgbGluZSkgaW4gZW51bWVyYXRlKGZpbGVsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJzdCBpbiBzdWJzdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKHN1YnN0WzBdLCBzdWJzdFsxXSwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWxpbmVzW2ldID0gbGluZQorCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJy5qb2luKGZpbGVsaW5lcykpCisKKworICAgIGdjY190YXJnZXRfY29uZmlnX2ZpbGVzID0geworICAgICAgICAneDg2XzY0JyAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnaTU4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnaTY4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnbWlwcycgICAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCddLAorICAgICAgICAnbWlwczY0JyAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCddLAorICAgICAgICAncG93ZXJwYycgICA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0J10sCisgICAgICAgICdwb3dlcnBjNjQnIDogWydnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQnXSwKKyAgICB9CisKKyAgICBnY2NfaGVhZGVyX2NvbmZpZ19maWxlcyA9IHsKKyAgICAgICAgJ3g4Nl82NCcgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ2k1ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ2k2ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ21pcHMnICAgICAgOiBbJ2djYy9jb25maWcvbWlwcy9saW51eC5oJywgJ2djYy9jb25maWcvbWlwcy9saW51eDY0LmgnXSwKKyAgICAgICAgJ21pcHM2NCcgICAgOiBbJ2djYy9jb25maWcvbWlwcy9saW51eC5oJywgJ2djYy9jb25maWcvbWlwcy9saW51eDY0LmgnXSwKKyAgICAgICAgJ3Bvd2VycGMnICAgOiBbJ2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCddLAorICAgICAgICAncG93ZXJwYzY0JyA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oJ10sCisgICAgfQorCisgICAgbGliZGlyMzIgPSAnU1lTVEVNTElCU19ESVInCisgICAgbGliZGlyNjQgPSAnU1lTVEVNTElCU19ESVInCisgICAgbGliZGlyeDMyID0gJ1NZU1RFTUxJQlNfRElSJworICAgIGxpYmRpcm4zMiA9ICdTWVNURU1MSUJTX0RJUicKKworCisgICAgdGFyZ2V0X2FyY2ggPSAoZC5nZXRWYXIoJ1RBUkdFVF9BUkNIX01VTFRJTElCX09SSUdJTkFMJywgVHJ1ZSkgaWYgbWxwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSkKKyAgICBpZiBwbiA9PSAibmF0aXZlc2RrLWdjYyI6CisgICAgICAgIGhlYWRlcl9jb25maWdfZmlsZXMgPSBnY2NfaGVhZGVyX2NvbmZpZ19maWxlc1tkLmdldFZhcigiU0RLX0FSQ0giLCBUcnVlKV0KKyAgICAgICAgd3JpdGVfaGVhZGVycyhidWlsZGRpciwgaGVhZGVyX2NvbmZpZ19maWxlcywgbGliZGlyMzIsIGxpYmRpcjY0LCBsaWJkaXJ4MzIsIGxpYmRpcm4zMikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiB0YXJnZXRfYXJjaCBub3QgaW4gZ2NjX3RhcmdldF9jb25maWdfZmlsZXM6CisgICAgICAgIGJiLndhcm4oJ2djYyBtdWx0aWxpYiBzZXR1cCBpcyBub3Qgc3VwcG9ydGVkIGZvciBUQVJHRVRfQVJDSD0nICsgdGFyZ2V0X2FyY2gpCisgICAgICAgIHJldHVybgorCisgICAgdGFyZ2V0X2NvbmZpZ19maWxlcyA9IGdjY190YXJnZXRfY29uZmlnX2ZpbGVzW3RhcmdldF9hcmNoXQorICAgIGhlYWRlcl9jb25maWdfZmlsZXMgPSBnY2NfaGVhZGVyX2NvbmZpZ19maWxlc1t0YXJnZXRfYXJjaF0KKworICAgIG1sX2xpc3QgPSBbJ0RFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMJyBpZiBtbHByZWZpeCBlbHNlICdERUZBVUxUVFVORSddCisgICAgbWx0dW5lcyA9IFsoJ0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcycgJSBtbCkgZm9yIG1sIGluIG11bHRpbGlic10KKyAgICBpZiBtbHByZWZpeDoKKyAgICAgICAgbWxpbmRleCA9IDAKKyAgICAgICAgZm9yIG1sIGluIG11bHRpbGliczoKKyAgICAgICAgICAgIGlmIG1scHJlZml4ID09IG1sICsgJy0nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBtbGluZGV4ICs9IDEKKworICAgICAgICBtbF9saXN0LmV4dGVuZChtbHR1bmVzWzptbGluZGV4XSArIFsnREVGQVVMVFRVTkUnXSArIG1sdHVuZXNbKG1saW5kZXggKyAxKTpdKQorICAgIGVsc2U6CisgICAgICAgIG1sX2xpc3QuZXh0ZW5kKG1sdHVuZXMpCisKKyAgICBvcHRpb25zID0gW10KKyAgICBkaXJuYW1lcyA9IFtdCisgICAgb3NkaXJuYW1lcyA9IFtdCisgICAgb3B0c2V0cyA9IFtdCisKKyAgICBmb3IgbWwgaW4gbWxfbGlzdDoKKyAgICAgICAgdHVuZSA9IGQuZ2V0VmFyKG1sLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgdHVuZS4gU2tpcHBpbmcuLi4iICUgbWwpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0dW5lX3BhcmFtZXRlcnMgPSBnZXRfdHVuZV9wYXJhbWV0ZXJzKHR1bmUsIGQpCisKKyAgICAgICAgdHVuZV9iYXNlbGliID0gdHVuZV9wYXJhbWV0ZXJzWydiYXNlbGliJ10KKyAgICAgICAgaWYgbm90IHR1bmVfYmFzZWxpYjoKKyAgICAgICAgICAgIGJiLndhcm4oIlR1bmUgJXMgZG9lc24ndCBoYXZlIGEgYmFzZWxpYiBzZXQuIFNraXBwaW5nLi4uIiAlIHR1bmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliNjQnOgorICAgICAgICAgICAgbGliZGlyNjQgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYngzMic6CisgICAgICAgICAgICBsaWJkaXJ4MzIgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYjMyJzoKKyAgICAgICAgICAgIGxpYmRpcm4zMiA9IHR1bmVfYmFzZWxpYgorICAgICAgICBlbGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliJzoKKyAgICAgICAgICAgIGxpYmRpcjMyID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5lcnJvcignVW5rbm93biBsaWJkaXIgKCVzKSBvZiB0aGUgdHVuZSA6ICVzJyAlICh0dW5lX2Jhc2VsaWIsIHR1bmUpKQorCisgICAgICAgICMgdGFrZSBvdXQgJy0nIG1jcHU9J3MgYW5kIG1hcmNoPSdzIGZyb20gcGFyYW1ldGVycworICAgICAgICBvcHRzID0gW10KKyAgICAgICAgd2hpdGVsaXN0ID0gKGQuZ2V0VmFyKCJNVUxUSUxJQl9PUFRJT05fV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGkgaW4gdHVuZV9wYXJhbWV0ZXJzWydjY2FyZ3MnXS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgaSBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHN0cmlwICctJyBmcm9tIG9wdGlvbgorICAgICAgICAgICAgICAgIG9wdHMuYXBwZW5kKGlbMTpdKQorICAgICAgICBvcHRpb25zLmFwcGVuZCgiICIuam9pbihvcHRzKSkKKworICAgICAgICBpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYic6CisgICAgICAgICAgICBkaXJuYW1lcy5hcHBlbmQoJzMyJykgICMgL2xpYiA9PiAzMmJpdCBsaWIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcm5hbWVzLmFwcGVuZCh0dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpKQorICAgICAgICBvc2Rpcm5hbWVzLmFwcGVuZCgnLi4vJyArIHR1bmVfYmFzZWxpYikKKworICAgIHdyaXRlX2NvbmZpZyhidWlsZGRpciwgdGFyZ2V0X2NvbmZpZ19maWxlcywgb3B0aW9ucywgZGlybmFtZXMsIG9zZGlybmFtZXMpCisgICAgd3JpdGVfaGVhZGVycyhidWlsZGRpciwgaGVhZGVyX2NvbmZpZ19maWxlcywgbGliZGlyMzIsIGxpYmRpcjY0LCBsaWJkaXJ4MzIsIGxpYmRpcm4zMikKK30KKworZ2NjX211bHRpbGliX3NldHVwW2NsZWFuZGlyc10gPSAiJHtCfS9nY2MvY29uZmlnIgorCitFWFRSQUNPTkZGVU5DUyArPSAiZ2NjX211bHRpbGliX3NldHVwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3NTdlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKQEAgLTAsMCArMSwxOTUgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0NYWEZMQUdTIDo9ICIke0BvZV9maWx0ZXJfb3V0KCctZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4nLCAnJHtDWFhGTEFHU30nLCBkKX0iCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4c3RkYmFzZSA9ICIgLS1lbmFibGUtY2xvY2FsZT1nbnUiCisKK1JVTlRJTUVUQVJHRVQgPSAibGlic3NwIGxpYnN0ZGMrKy12MyBsaWJnb21wIGxpYmF0b21pYyIKKyMgID8KKyMgbGliaWJlcnR5CisjIGxpYm11ZGZsYXAKKyMgbGliZ2ZvcnRyYW4gbmVlZHMgc2VwYXJhdGUgcmVjaXBlIGR1ZSB0byBsaWJxdWFkbWF0aCBkZXBlbmRlbmN5CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IENYWD0iJHtDWFh9IC1ub3N0ZGluYysrIC1ub3N0ZGxpYisrIgorCW10YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwloYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0ICR7Qn0KKwlmb3IgZCBpbiBsaWJnY2MgJHtSVU5USU1FVEFSR0VUfTsgZG8KKwkJZWNobyAiQ29uZmlndXJpbmcgJGQiCisJCXJtIC1yZiAke0J9LyR0YXJnZXQvJGQvCisJCW1rZGlyIC1wICR7Qn0vJHRhcmdldC8kZC8KKwkJY2QgJHtCfS8kdGFyZ2V0LyRkLworCQljaG1vZCBhK3ggJHtTfS8kZC9jb25maWd1cmUKKwkJJHtTfS8kZC9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKwlkb25lCit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWZvciBkIGluIGxpYmdjYyAke1JVTlRJTUVUQVJHRVR9OyBkbworCQljZCAke0J9LyR0YXJnZXQvJGQvCisJCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJGQvCisJZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwlmb3IgZCBpbiAke1JVTlRJTUVUQVJHRVR9OyBkbworCQljZCAke0J9LyR0YXJnZXQvJGQvCisJCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJGQvIGluc3RhbGwKKwlkb25lCisJcm0gLXJmICR7RH0ke2luZm9kaXJ9L2xpYmdvbXAuaW5mbyAke0R9JHtpbmZvZGlyfS9kaXIKKwlybSAtcmYgJHtEfSR7aW5mb2Rpcn0vbGlicXVhZG1hdGguaW5mbyAke0R9JHtpbmZvZGlyfS9kaXIKKwlpZiBbIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZQorCWZpCisJaWYgWyAtZCAke0R9JHtpbmZvZGlyfSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2luZm9kaXJ9CisJZmkKKwlpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LWdudXNwZSIgXTsgdGhlbgorCQlsbiAtcyAke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS1saW51eAorCWZpCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyBsaWJnY2MiCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0tZGJnIFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1wcmVjb21waWxlLWRldiBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlic3RkYysrLXN0YXRpY2RldiBcCisgICAgbGliZzJjIFwKKyAgICBsaWJnMmMtZGV2IFwKKyAgICBsaWJzc3AgXAorICAgIGxpYnNzcC1kZXYgXAorICAgIGxpYnNzcC1zdGF0aWNkZXYgXAorICAgIGxpYm11ZGZsYXAgXAorICAgIGxpYm11ZGZsYXAtZGV2IFwKKyAgICBsaWJtdWRmbGFwLXN0YXRpY2RldiBcCisgICAgbGlicXVhZG1hdGggXAorICAgIGxpYnF1YWRtYXRoLWRldiBcCisgICAgbGlicXVhZG1hdGgtc3RhdGljZGV2IFwKKyAgICBsaWJnb21wIFwKKyAgICBsaWJnb21wLWRldiBcCisgICAgbGliZ29tcC1zdGF0aWNkZXYgXAorICAgIGxpYmF0b21pYyBcCisgICAgbGliYXRvbWljLWRldiBcCisgICAgbGliYXRvbWljLXN0YXRpY2RldiBcCisiCisKKyMgTW9zdCBsaWJyYXJpZXMgYXJlIGxpY2Vuc2VkIHdpdGggdGhlIGV4Y2VwdGlvbiwgYnV0CisjIG9uZSBsaWJyYXJ5IGlzIHJlYWxseSBHUEx2My4KKyMKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCitMSUNFTlNFX2xpYnN0ZGMrKyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3RkYysrLXByZWNvbXBpbGUtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzdGRjKystZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzdGRjKystc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnMmMgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmcyYy1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnNzcCA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3NwLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3NwLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZ2ZvcnRyYW4gPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmdmb3J0cmFuLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZ2ZvcnRyYW4tc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJtdWRmbGFwID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJtdWRmbGFwLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlibXVkZmxhcC1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnF1YWRtYXRoID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJxdWFkbWF0aC1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnF1YWRtYXRoLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliYXRvbWljID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJhdG9taWMtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJhdG9taWMtc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCitMSUNFTlNFX2xpYmdvbXAgPSAiR1BMdjMiCitMSUNFTlNFX2xpYmdvbXAtZGV2ID0gIkdQTHYzIgorTElDRU5TRV9saWJnb21wLXN0YXRpY2RldiA9ICJHUEx2MyIKKworIyBUaGUgYmFzZSBwYWNrYWdlIGRvZXNuJ3QgZXhpc3QsIHNvIHdlIGNsZWFyIHRoZSByZWNvbW1lbmRzLgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiIKKworIyBpbmNsdWRlIHB5dGhvbiBkZWJ1Z2dpbmcgc2NyaXB0cworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zby4qLWdkYi5weSBcCisgICAgJHtkYXRhZGlyfS9nY2MtJHtCSU5WfS9weXRob24vbGlic3RkY3h4IFwKKyIKKworRklMRVNfbGliZzJjID0gIiR7dGFyZ2V0X2xpYmRpcn0vbGliZzJjLnNvLioiCitGSUxFU19saWJnMmMtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZzJjLnNvIFwKKyAgICAke2xpYmRpcn0vbGliZzJjLmEgXAorICAgICR7bGliZGlyfS9saWJmcnRiZWdpbi5hIFwKKyIKKworRklMRVNfbGlic3RkYysrID0gIiR7bGliZGlyfS9saWJzdGRjKysuc28uKiIKK0ZJTEVTX2xpYnN0ZGMrKy1kZXYgPSAiXAorICAgICR7aW5jbHVkZWRpcn0vYysrLyBcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5sYSBcCisgICAgJHtsaWJkaXJ9L2xpYnN1cGMrKy5sYSBcCisiCitGSUxFU19saWJzdGRjKystc3RhdGljZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGlic3RkYysrLmEgXAorICAgICR7bGliZGlyfS9saWJzdXBjKysuYSBcCisiCisKK0ZJTEVTX2xpYnN0ZGMrKy1wcmVjb21waWxlLWRldiA9ICIke2luY2x1ZGVkaXJ9L2MrKy8ke1RBUkdFVF9TWVN9L2JpdHMvKi5nY2giCisKK0ZJTEVTX2xpYnNzcCA9ICIke2xpYmRpcn0vbGlic3NwLnNvLioiCitGSUxFU19saWJzc3AtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGlic3NwKi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnNzcCpfbm9uc2hhcmVkLmEgXAorICAgICR7bGliZGlyfS9saWJzc3AqLmxhIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3NzcCBcCisiCitGSUxFU19saWJzc3Atc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJzc3AqLmEiCisKK0ZJTEVTX2xpYnF1YWRtYXRoID0gIiR7bGliZGlyfS9saWJxdWFkbWF0aCouc28uKiIKK0ZJTEVTX2xpYnF1YWRtYXRoLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9xdWFkbWF0aCogXAorICAgICR7bGliZGlyfS9saWJxdWFkbWF0aCouc28gXAorICAgICR7bGliZGlyfS9saWJxdWFkbWF0aC5sYSBcCisiCitGSUxFU19saWJxdWFkbWF0aC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYnF1YWRtYXRoLmEiCisKK0ZJTEVTX2xpYm11ZGZsYXAgPSAiJHtsaWJkaXJ9L2xpYm11ZGZsYXAqLnNvLioiCitGSUxFU19saWJtdWRmbGFwLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYm11ZGZsYXAqLnNvIFwKKyAgICAke2xpYmRpcn0vbGlibXVkZmxhcC5sYSBcCisiCitGSUxFU19saWJtdWRmbGFwLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXVkZmxhcC5hIgorCitGSUxFU19saWJnb21wID0gIiR7bGliZGlyfS9saWJnb21wKiR7U09MSUJTfSIKK0ZJTEVTX2xpYmdvbXAtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZ29tcCoke1NPTElCU0RFVn0gXAorICAgICR7bGliZGlyfS9saWJnb21wKi5sYSBcCisgICAgJHtsaWJkaXJ9L2xpYmdvbXAuc3BlYyBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9vbXAuaCBcCisiCitGSUxFU19saWJnb21wLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliZ29tcCouYSIKKworRklMRVNfbGliYXRvbWljID0gIiR7bGliZGlyfS9saWJhdG9taWMuc28uKiIKK0ZJTEVTX2xpYmF0b21pYy1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJhdG9taWMuc28gXAorICAgICR7bGliZGlyfS9saWJhdG9taWMubGEgXAorIgorRklMRVNfbGliYXRvbWljLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliYXRvbWljLmEiCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2Q2OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1ydW50aW1lLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdkNjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtcnVudGltZS5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzMWU3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXJ1bnRpbWUuaW5jCisKK0ZJTEVTX2xpYmdvbXAtZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9vcGVuYWNjLmggXAorIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTg3Y2NiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYwpAQCAtMCwwICsxLDExOSBAQAorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJOQ1NBIHwgTUlUIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vbGlic2FuaXRpemVyL0xJQ0VOU0UuVFhUO21kNT0wMjQ5YzM3NzQ4OTM2ZmFmNWIxZWZkNTc4OTU4NzkwOSBcCisiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBtdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgaWYgWyAtZCAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0IF07IHRoZW4KKyAgICAgICAgaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisgICAgZmkKKworICAgIGVjaG8gIkNvbmZpZ3VyaW5nIGxpYnNhbml0aXplciIKKyAgICBybSAtcmYgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICBta2RpciAtcCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgICMgVGhpcyBpcyBraW5kIG9mIGdyb3NzLCBidXQgaXQncyBhbiBlYXN5IHdheSB0byBtYWtlIGNvbmZpZ3VyZSBoYXBweQorICAgICMgd2l0aG91dCBoYWNraW5nIGl0IHVwIHRvIHVzZSB0aGUgc3lzdGVtIHN0ZGMrKyBpbnN0ZWFkIG9mIHRoZSBvbmUgaXQKKyAgICAjIGV4cGVjdHMgdG8gYmUgbmV3bHkgYnVpbHQuCisgICAgcm0gLXJmICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvCisgICAgbWtkaXIgLXAgJHtCfS8kdGFyZ2V0L2xpYnN0ZGMrKy12My9zcmMvCisgICAgbG4gLXMgJHtTVEFHSU5HX0xJQkRJUn0vbGlic3RkYysrLmxhICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvc3JjLworICAgIGxuIC1zICR7U1RBR0lOR19MSUJESVJ9L2xpYnN0ZGMrKy5zbyAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzL3NyYy8KKyAgICBjZCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIGNobW9kIGEreCAke1N9L2xpYnNhbml0aXplci9jb25maWd1cmUKKyAgICAke1N9L2xpYnNhbml0aXplci9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKyAgICAjIEVhc2llc3Qgd2F5IHRvIHN0b3AgYmFkIFJQQVRIcyBnZXR0aW5nIGludG8gdGhlIGxpYnJhcnkgc2luY2Ugd2UgaGF2ZSBhCisgICAgIyBicm9rZW4gbGlidG9vbCBoZXJlCisgICAgc2VkIC1pIC1lICdzL2hhcmRjb2RlX2ludG9fbGlicz15ZXMvaGFyZGNvZGVfaW50b19saWJzPW5vLycgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci9saWJ0b29sCit9CisKK2RvX2NvbXBpbGUgKCkgeworICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGNkICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGNkICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvIGluc3RhbGwKKyAgICBpZiBbIC1kICR7RH0ke2luZm9kaXJ9IF07IHRoZW4KKyAgICAgICAgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7aW5mb2Rpcn0KKyAgICBmaQorICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorREVQRU5EUyA9ICJnY2MtcnVudGltZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKK1BBQ0tBR0VTID0gIiR7UE59IgorUEFDS0FHRVMgKz0gImxpYmFzYW4gbGlidWJzYW4gbGlibHNhbiBsaWJ0c2FuIgorUEFDS0FHRVMgKz0gImxpYmFzYW4tZGV2IGxpYnVic2FuLWRldiBsaWJsc2FuLWRldiBsaWJ0c2FuLWRldiIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuLWRiZyBsaWJ1YnNhbi1kYmcgbGlibHNhbi1kYmcgbGlidHNhbi1kYmciCitQQUNLQUdFUyArPSAibGliYXNhbi1zdGF0aWNkZXYgbGlidWJzYW4tc3RhdGljZGV2IGxpYmxzYW4tc3RhdGljZGV2IGxpYnRzYW4tc3RhdGljZGV2IgorCitSREVQRU5EU19saWJhc2FuICs9ICJsaWJzdGRjKysiCitSREVQRU5EU19saWJ1YnNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlibHNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlidHNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGliYXNhbi1kZXYgKz0gIiR7UE59IgorUkRFUEVORFNfbGlidWJzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYmxzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYnRzYW4tZGV2ICs9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJsaWJhc2FuIGxpYnVic2FuIgorUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX3g4Ni02NCA9ICIgbGlibHNhbiBsaWJ0c2FuIgorUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX3g4NiA9ICIgbGlibHNhbiIKKworZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorCisjIE1JUFMsIGFhcmNoNjQsIGFuZCBTUEFSQyBhcmUgYnJva2VuLgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFybSkuKi1saW51eCcKKworRklMRVNfbGliYXNhbiArPSAiJHtsaWJkaXJ9L2xpYmFzYW4uc28uKiIKK0ZJTEVTX2xpYmFzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmFzYW4uc28uKiIKK0ZJTEVTX2xpYmFzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW5fcHJlaW5pdC5vIFwKKyAgICAke2xpYmRpcn0vbGliYXNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW4ubGEgXAorIgorRklMRVNfbGliYXNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJhc2FuLmEiCisKK0ZJTEVTX2xpYnVic2FuICs9ICIke2xpYmRpcn0vbGlidWJzYW4uc28uKiIKK0ZJTEVTX2xpYnVic2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJ1YnNhbi5zby4qIgorRklMRVNfbGlidWJzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnVic2FuLnNvIFwKKyAgICAke2xpYmRpcn0vbGlidWJzYW4ubGEgXAorIgorRklMRVNfbGlidWJzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlidWJzYW4uYSIKKworRklMRVNfbGlibHNhbiArPSAiJHtsaWJkaXJ9L2xpYmxzYW4uc28uKiIKK0ZJTEVTX2xpYmxzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmxzYW4uc28uKiIKK0ZJTEVTX2xpYmxzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmxzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJsc2FuLmxhIFwKKyIKK0ZJTEVTX2xpYmxzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlibHNhbi5hIgorCitGSUxFU19saWJ0c2FuICs9ICIke2xpYmRpcn0vbGlidHNhbi5zby4qIgorRklMRVNfbGlidHNhbi1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGlidHNhbi5zby4qIgorRklMRVNfbGlidHNhbi1kZXYgKz0gIlwKKyAgICAke2xpYmRpcn0vbGlidHNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnRzYW4ubGEgXAorIgorRklMRVNfbGlidHNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJ0c2FuLmEiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNwZWMgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9zYW5pdGl6ZXIvKi5oIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZjY2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXNhbml0aXplcnMuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2Mtc2FuaXRpemVycy5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY2NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1zYW5pdGl6ZXJzLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zaGFyZWQtc291cmNlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjZmZiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMKQEAgLTAsMCArMSw5IEBACitkb19mZXRjaCgpIHsKKwk6Cit9Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkZWx0YXNrIGRvX3VucGFjaworZGVsdGFzayBkb19wYXRjaAorCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gImdjYy1zb3VyY2UtJHtQVn06ZG9fcHJlY29uZmlndXJlIgorZG9fcG9wdWxhdGVfbGljW2RlcGVuZHNdICs9ICJnY2Mtc291cmNlLSR7UFZ9OmRvX3VucGFjayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTRmZDRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK2RlbHRhc2sgZG9fY29uZmlndXJlIAorZGVsdGFzayBkb19jb21waWxlIAorZGVsdGFzayBkb19wYWNrYWdlIAorZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX3JwbSAKK2RlbHRhc2sgZG9fcGFja2FnZV93cml0ZV9pcGsgCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIGRvX2luc3RhbGwgCitkZWx0YXNrIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK2RlbHRhc2sgZG9fcG9wdWxhdGVfbGljIAorZGVsdGFzayBkb19wYWNrYWdlX3FhCitkZWx0YXNrIGRvX3BhY2thZ2VkYXRhCitkZWx0YXNrIGRvX3JtX3dvcmsKKworUE4gPSAiZ2NjLXNvdXJjZS0ke1BWfSIKK1dPUktESVIgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfSIKK1NTVEFURV9TV1NQRUMgPSAic3N0YXRlOmdjYzo6JHtQVn06JHtQUn06OiR7U1NUQVRFX1ZFUlNJT059OiIKKworU1RBTVAgPSAiJHtTVEFNUFNfRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0iCitTVEFNUENMRUFOID0gIiR7U1RBTVBTX0RJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSoiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTID0gIiIKK1BBQ0tBR0VTID0gIiIKKworcHl0aG9uIGRvX3ByZWNvbmZpZ3VyZSAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBjbWQgPSBkLmV4cGFuZCgnY2QgJHtTfSAmJiBQQVRIPSR7UEFUSH0gZ251LWNvbmZpZ2l6ZScpCisgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgIyBTZWUgMDA0NC1nZW5ndHlwZXMucGF0Y2gsIHdlIG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGlzIGZpbGUKKyAgICBiYi51dGlscy5yZW1vdmUoZC5leHBhbmQoIiR7U30vZ2NjL2dlbmd0eXBlLWxleC5jIikpCisgICAgY21kID0gZC5leHBhbmQoInNlZCAtaSAncy9CVUlMRF9JTkZPPWluZm8vQlVJTERfSU5GTz0vJyAke1N9L2djYy9jb25maWd1cmUiKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorfQorYWRkdGFzayBkb19wcmVjb25maWd1cmUgYWZ0ZXIgZG9fcGF0Y2gKK2RvX3ByZWNvbmZpZ3VyZVtkZXBlbmRzXSArPSAiZ251LWNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBhdXRvY29uZi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTBmYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MGZhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYworCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODkwZmEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMTYwYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKQEAgLTAsMCArMSwyMTQgQEAKK0dDQ01VTFRJTElCID0gIi0tZW5hYmxlLW11bHRpbGliIgorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtc3lzcm9vdD0vIFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorICAgIC0td2l0aC1uYXRpdmUtc3lzdGVtLWhlYWRlci1kaXI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0gXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGludXhzdGRiYXNlID0gIiAtLWVuYWJsZS1jbG9jYWxlPWdudSIKKworIyBsaWJjYzEgcmVxdXJlcyBnY2NfY3Zfb2JqZHVtcCB3aGVuIGNyb3NzIGJ1aWxkLCBidXQgZ2NjX2N2X29iamR1bXAgaXMKKyMgc2V0IGluIHN1YmRpciBnY2MsIHNvIHN1YmRpciBsaWJjYzEgY2FuJ3QgdXNlIGl0LCBleHBvcnQgaXQgaGVyZSB0bworIyBmaXggdGhlIHByb2JsZW0uCitleHBvcnQgZ2NjX2N2X29iamR1bXAgPSAiJHtUQVJHRVRfUFJFRklYfW9iamR1bXAiCisKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiJHtAZ2V0X2djY19mbG9hdF9zZXR0aW5nKGJiLCBkKX0iCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfSAke1BOfS1wbHVnaW5zICR7UE59LXN5bWxpbmtzIFwKKyAgICBnKysgZysrLXN5bWxpbmtzIFwKKyAgICBjcHAgY3BwLXN5bWxpbmtzIFwKKyAgICBnNzcgZzc3LXN5bWxpbmtzIFwKKyAgICBnZm9ydHJhbiBnZm9ydHJhbi1zeW1saW5rcyBcCisgICAgZ2NvdiBnY292LXN5bWxpbmtzIFwKKyAgICAke1BOfS1kb2MgXAorICAgICR7UE59LWRldiBcCisgICAgJHtQTn0tZGJnIFwKKyIKKworRklMRVNfJHtQTn0gPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2NjKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NvbGxlY3QyIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY2MqIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbHRvKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU30gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJsdG8qJHtTT0xJQlNERVZ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlN9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS1maXhlZCBcCisiCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vLmRlYnVnLyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi8uZGVidWcvIFwKKyIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlNERVZ9IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTREVWfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vaW5jbHVkZS8gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vZ2VuZ3R5cGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2d0eXBlLnN0YXRlIFwKKyIKK0ZJTEVTXyR7UE59LXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vY2MgXAorICAgICR7YmluZGlyfS9nY2MgXAorICAgICR7YmluZGlyfS9nY2NidWcgXAorIgorCitGSUxFU18ke1BOfS1wbHVnaW5zID0gIlwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbiBcCisiCitBTExPV19FTVBUWV8ke1BOfS1wbHVnaW5zID0gIjEiCisKK0ZJTEVTX2c3NyA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nNzcgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9mNzcxIFwKKyIKK0ZJTEVTX2c3Ny1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2c3NyBcCisgICAgJHtiaW5kaXJ9L2Y3NyBcCisiCitGSUxFU19nZm9ydHJhbiA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2Y5NTEgXAorIgorRklMRVNfZ2ZvcnRyYW4tc3ltbGlua3MgPSAiXAorICAgICR7YmluZGlyfS9nZm9ydHJhbiBcCisgICAgJHtiaW5kaXJ9L2Y5NSIKKworRklMRVNfY3BwID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWNwcCBcCisgICAgJHtiYXNlX2xpYmRpcn0vY3BwIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY2MxIgorRklMRVNfY3BwLXN5bWxpbmtzID0gIiR7YmluZGlyfS9jcHAiCisKK0ZJTEVTX2djb3YgPSAiJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nY292IFwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdjb3YtdG9vbCBcCisiCitGSUxFU19nY292LXN5bWxpbmtzID0gIiR7YmluZGlyfS9nY292IFwKKyAgICAke2JpbmRpcn0vZ2Nvdi10b29sIFwKKyIKKworRklMRVNfZysrID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWcrKyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NjMXBsdXMgXAorIgorRklMRVNfZysrLXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vYysrIFwKKyAgICAke2JpbmRpcn0vZysrIFwKKyIKKworRklMRVNfJHtQTn0tZG9jID0gIlwKKyAgICAke2luZm9kaXJ9IFwKKyAgICAke21hbmRpcn0gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9SRUFETUUgXAorIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsbC1ob3N0Cit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwkjIEFkZCB1bndpbmQuaCwgaXQgY29tZXMgZnJvbSBsaWJnY2Mgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBidWlsZCBhZ2FpbgorCWluc3RhbGwgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9LyR7VEFSR0VUX1NZU30vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3Vud2luZC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKKworCSMgQ2xlYW51cCBzb21lIG9mIHRoZSAke2xpYmRpcn17LGV4ZWN9L2djYyBzdHVmZiAuLi4KKwlybSAtciAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yICR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yZiAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubGEKKwlybWRpciAke0R9JHtpbmNsdWRlZGlyfQorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKworCSMgSGFjayBhcm91bmQgc3BlY3MgZmlsZSBhc3N1bXB0aW9ucworCXRlc3QgLWYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzICYmIHNlZCAtaSAtZSAnL14qY3Jvc3NfY29tcGlsZTokLyB7IG47IHMvMS8wLzsgfScgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzCisKKwkjIENsZWFudXAgbWFucGFnZXMuLgorCXJtIC1yZiAke0R9JHttYW5kaXJ9L21hbjcKKworCWNkICR7RH0ke2JpbmRpcn0KKworCSMgV2UgY2FyZSBhYm91dCBnKysgbm90IGMrKworCXJtIC1mICpjKysKKworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZ2NjLTx2ZXJzaW9uPiBvbmVzIGZvciB0aGlzCisJcm0gLWYgKmdjYy0/Lj8qCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSBsaWJpYmVydHkuYSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lIGxpYmliZXJ0eS5oIHwgeGFyZ3Mgcm0gLWYKKworCSMgTm90IHN1cmUgd2h5IHdlIGVuZCB1cCB3aXRoIHRoZXNlIGJ1dCB3ZSBkb24ndCB3YW50IHRoZW0uLi4KKwlybSAtZiAke1RBUkdFVF9QUkVGSVh9JHtUQVJHRVRfUFJFRklYfSoKKworCSMgU3ltbGlua3Mgc28gd2UgY2FuIHVzZSB0aGVzZSB0cml2aWFsbHkgb24gdGhlIHRhcmdldAorCWlmIFsgLWUgJHtUQVJHRVRfUFJFRklYfWc3NyBdOyB0aGVuCisJCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Zzc3IGc3NyB8fCB0cnVlCisJCWxuIC1zZiBnNzcgZjc3IHx8IHRydWUKKwlmaQorCWlmIFsgLWUgJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuIF07IHRoZW4KKwkJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBnZm9ydHJhbiB8fCB0cnVlCisJCWxuIC1zZiBnZm9ydHJhbiBmOTUgfHwgdHJ1ZQorCWZpCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nKysgZysrCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nY2MgZ2NjCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1jcHAgY3BwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0KKwlsbiAtc2YgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1jcHAgJHtEfSR7YmFzZV9saWJkaXJ9L2NwcAorCWxuIC1zZiBnKysgYysrCisJbG4gLXNmIGdjYyBjYworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICAjCisgICAgICAgICMgVGhlZml4aW5jLnNoIHNjcmlwdCwgcnVuIG9uIHRoZSBnY2MncyBjb21waWxlIHBoYXNlLCBsb29rcyBpbnRvIHN5c3Jvb3QgaGVhZGVyCisgICAgICAgICMgZmlsZXMgYW5kIHBsYWNlcyB0aGUgbW9kaWZpZWQgZmlsZXMgaW50bworICAgICAgICAjIHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQgZm9sZGVyLiBUaGlzIG1ha2VzIHRoZQorICAgICAgICAjIGJ1aWxkIG5vdCBkZXRlcm1pbmlzdGljLiBUaGUgZm9sbG93aW5nIGNvZGUgcHJ1bmVzIGFsbCB0aG9zZSBoZWFkZXJzCisgICAgICAgICMgZXhjZXB0IHRob3NlIHVuZGVyIGluY2x1ZGUtZml4ZWQvbGludXgsICpsaW1pdHMuaCBhbmQgUkVBRE1FLCB5aWVsZGluZworICAgICAgICAjIHRoZSBzYW1lIGluY2x1ZGUtZml4ZWQgZm9sZGVycyBubyBtYXR0ZXIgd2hhdCBzeXNyb290CisKKyAgICAgICAgaW5jbHVkZV9maXhlZD0iJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQiCisgICAgICAgIGZvciBmIGluICQoZmluZCAke2luY2x1ZGVfZml4ZWR9IC10eXBlIGYpOyBkbworICAgICAgICAgICAgICAgIGNhc2UgJGYgaW4KKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvbGludXgvKikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvKmxpbWl0cy5oKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICovaW5jbHVkZS1maXhlZC9SRUFETUUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgZmlsZSBhbmQgZGlyZWN0b3J5IGlmIGVtcHR5CisgICAgICAgICAgICAgICAgICAgIGJiZGVidWcgMiAiUHJ1bmluZyAkZiIKKyAgICAgICAgICAgICAgICAgICAgcm0gJGYKKyAgICAgICAgICAgICAgICAgICAgZmluZCAkKGRpcm5hbWUgJGYpIC1tYXhkZXB0aCAwIC1lbXB0eSAtZXhlYyBybWRpciB7fSBcOworICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZG9uZQorfQorCisjIEluc3RhbGxpbmcgL3Vzci9saWIvZ2NjLyogbWVhbnMgd2UnZCBoYXZlIHR3byBjb3BpZXMsIG9uZSBmcm9tIGdjYy1jcm9zcworIyBhbmQgb25lIGZyb20gaGVyZS4gVGhlc2UgY2FuIGNvbmZ1c2UgZ2NjIGNyb3NzIHdoZXJlIGluY2x1ZGVzIHVzZSAjaW5jbHVkZV9uZXh0CisjIGFuZCBidWlsZHMgdHJhY2sgZmlsZSBkZXBlbmRlbmNpZXMgKGUuZy4gcGVybCBhbmQgaXRzIG1ha2VkZXBlbmRzIGNvZGUpLgorIyBGb3IgZGV0ZXJtaW5pc20gd2UgZG9uJ3QgaW5zdGFsbCB0aGlzIGV2ZXIgYW5kIHJlbHkgb24gdGhlIGNvcHkgZnJvbSBnY2MtY3Jvc3MuCisjIFtZT0NUTyAjNzI4N10KK3N5c3Jvb3Rfc3RhZ2VfZGlyc19hcHBlbmQgKCkgeworCXJtIC1yZiAkdG8ke2xpYmRpcn0vZ2NjCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjE4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgZmFpbHMgd2l0aAorIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDM4OigudGV4dC51bmxpa2VseSsweDJmYSk6IHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9BUk1fVEhNX0NBTEwgYWdhaW5zdCBzeW1ib2wgYGZhbmN5X2Fib3J0KGNoYXIgY29uc3QqLCBpbnQsIGNoYXIgY29uc3QqKScgZGVmaW5lZCBpbiAuZ2x1ZV83IHNlY3Rpb24gaW4gbGlua2VyIHN0dWJzCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0NDI6KC50ZXh0LnVubGlrZWx5KzB4MzE4KTogYWRkaXRpb25hbCByZWxvY2F0aW9uIG92ZXJmbG93cyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dAorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODRiYWFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjkuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy10YXJnZXQuaW5jCisKKyMgQnVpbGRpbmcgd2l0aCB0aHVtYiBlbmFibGVkIG9uIGFybXY0dCBmYWlscyB3aXRoCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0Mzg6KC50ZXh0LnVubGlrZWx5KzB4MmZhKTogcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX0FSTV9USE1fQ0FMTCBhZ2FpbnN0IHN5bWJvbCBgZmFuY3lfYWJvcnQoY2hhciBjb25zdCosIGludCwgY2hhciBjb25zdCopJyBkZWZpbmVkIGluIC5nbHVlXzcgc2VjdGlvbiBpbiBsaW5rZXIgc3R1YnMKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQ0MjooLnRleHQudW5saWtlbHkrMHgzMTgpOiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0CitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKKyNTWVNURU1IRUFERVJTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfaW5jbHVkZWRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0iCisjU1lTVEVNTElCU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2Jhc2VfbGliZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfS8iCisjU1lTVEVNTElCUzFfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9saWJkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9LyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGE1MjNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjIuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy10YXJnZXQuaW5jCisKKyMgQnVpbGRpbmcgd2l0aCB0aHVtYiBlbmFibGVkIG9uIGFybXY0dCBmYWlscyB3aXRoCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0Mzg6KC50ZXh0LnVubGlrZWx5KzB4MmZhKTogcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX0FSTV9USE1fQ0FMTCBhZ2FpbnN0IHN5bWJvbCBgZmFuY3lfYWJvcnQoY2hhciBjb25zdCosIGludCwgY2hhciBjb25zdCopJyBkZWZpbmVkIGluIC5nbHVlXzcgc2VjdGlvbiBpbiBsaW5rZXIgc3R1YnMKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQ0MjooLnRleHQudW5saWtlbHkrMHgzMTgpOiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0CitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBFYXNpZXN0IHdheSB0byBzdG9wIGJhZCBSUEFUSHMgZ2V0dGluZyBpbnRvIHRoZSBsaWJyYXJ5IHNpbmNlIHdlIGhhdmUgYQorCSMgYnJva2VuIGxpYnRvb2wgaGVyZQorCXNlZCAtaSAtZSAncy9oYXJkY29kZV9pbnRvX2xpYnM9eWVzL2hhcmRjb2RlX2ludG9fbGlicz1uby8nICR7U30vbGliY2MxL2NvbmZpZ3VyZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDllYTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTQ0IEBACitCUE4gPSAibGliZ2NjIgorCityZXF1aXJlIGdjYy1zaGFyZWQtc291cmNlLmluYworCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19jb25maWd1cmUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9ICR7RH0ke2xpYmRpcn0KKwloYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vJHtMSUJHQ0NCVUlMRFRSRUVOQU1FfSR0YXJnZXQvICR7Qn0KKwlta2RpciAtcCAke0J9LyR7QlBOfQorCW1rZGlyIC1wICR7Qn0vJHRhcmdldC8ke0JQTn0vCisJY2QgJHtCfS8ke0JQTn0KKwljaG1vZCBhK3ggJHtTfS8ke0JQTn0vY29uZmlndXJlCisJJHtTfS8ke0JQTn0vY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHtCUE59CisJb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8ke0JQTn0vCit9CisKK2RvX2luc3RhbGwgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHtCUE59CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8ke0JQTn0vIGluc3RhbGwKKworCSMgTW92ZSBsaWJnY2NfcyBpbnRvIC9saWIKKwlta2RpciAtcCAke0R9JHtiYXNlX2xpYmRpcn0KKwlpZiBbIC1mICR7RH0ke2xpYmRpcn0vbm9mL2xpYmdjY19zLnNvIF07IHRoZW4KKwkJbXYgJHtEfSR7bGliZGlyfS9ub2YvbGliZ2NjKiAke0R9JHtiYXNlX2xpYmRpcn0KKwllbHNlCisJCW12ICR7RH0ke2xpYmRpcn0vbGliZ2NjKiAke0R9JHtiYXNlX2xpYmRpcn0gfHwgdHJ1ZQorCWZpCisKKwkjIGluc3RhbGwgdGhlIHJ1bnRpbWUgaW4gL3Vzci9saWIvIG5vdCBpbiAvdXNyL2xpYi9nY2Mgb24gdGFyZ2V0CisJIyBzbyB0aGF0IGNyb3NzLWdjYyBjYW4gZmluZCBpdCBpbiB0aGUgc3lzcm9vdAorCisJbXYgJHtEfSR7bGliZGlyfS9nY2MvKiAke0R9JHtsaWJkaXJ9CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ2NjLworCSMgdW53aW5kLmggaXMgaW5zdGFsbGVkIGhlcmUgd2hpY2ggaXMgc2hpcHBlZCBpbiBnY2MtY3Jvc3MKKwkjIGFzIHdlbGwgYXMgdGFyZ2V0IGdjYyBhbmQgdGhleSBhcmUgaWRlbnRpY2FsIHNvIHdlIGRvbnQKKwkjIHNoaXAgb25lIHdpdGggbGliZ2NjIGhlcmUKKwlybSAtcmYgJHtEfSR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saWJjLWJhcmVtZXRhbCAoKSB7CisJcm1kaXIgJHtEfSR7YmFzZV9saWJkaXJ9Cit9CisKK1JERVBFTkRTXyR7UE59LWRldl9saWJjLWJhcmVtZXRhbCA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCithZGR0YXNrIG11bHRpbGliX2luc3RhbGwgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CisjIHRoaXMgbWFrZXMgbXVsdGlsaWIgZ2NjIGZpbGVzIGZpbmRhYmxlIGZvciB0YXJnZXQgZ2NjCisjIGUuZy4KKyMgICAgL3Vzci9saWIvaTU4Ni1wb2t5bWxsaWIzMi1saW51eC80LjcvCisjIGJ5IGNyZWF0aW5nIHRoaXMgc3ltbGluayB0byBpdAorIyAgICAvdXNyL2xpYjY0L3g4Nl82NC1wb2t5LWxpbnV4LzQuNy8zMgorCitmYWtlcm9vdCBweXRob24gZG9fbXVsdGlsaWJfaW5zdGFsbCgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIG11bHRpbGlicyA9IGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpCisgICAgaWYgbm90IG11bHRpbGlicyBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBiaW52ID0gZC5nZXRWYXIoJ0JJTlYnLCBUcnVlKQorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgIGlmICgnJXNsaWJnY2MnICUgbWxwcmVmaXgpICE9IGQuZ2V0VmFyKCdQTicsIFRydWUpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG1scHJlZml4OgorICAgICAgICBvcmlnX3R1bmUgPSBkLmdldFZhcignREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwnLCBUcnVlKQorICAgICAgICBvcmlnX3R1bmVfcGFyYW1zID0gZ2V0X3R1bmVfcGFyYW1ldGVycyhvcmlnX3R1bmUsIGQpCisgICAgICAgIG9yaWdfdHVuZV9iYXNlbGliID0gb3JpZ190dW5lX3BhcmFtc1snYmFzZWxpYiddCisgICAgICAgIG9yaWdfdHVuZV9iaXRuZXNzID0gb3JpZ190dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpCisgICAgICAgIGlmIG5vdCBvcmlnX3R1bmVfYml0bmVzczoKKyAgICAgICAgICAgIG9yaWdfdHVuZV9iaXRuZXNzID0gJzMyJworCisgICAgICAgIHNyYyA9ICcuLi8uLi8uLi8nICsgb3JpZ190dW5lX2Jhc2VsaWIgKyAnLycgKyBcCisgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX1NZU19NVUxUSUxJQl9PUklHSU5BTCcsIFRydWUpICsgJy8nICsgYmludiArICcvJworCisgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgXAorICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycgKyBvcmlnX3R1bmVfYml0bmVzcworCisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKKyAgICAgICAgcmV0dXJuCisKKworICAgIGZvciBtbCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgdHVuZSA9IGQuZ2V0VmFyKCdERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJyArIG1sLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZToKKyAgICAgICAgICAgIGJiLndhcm4oJ0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcyBpcyBub3QgZGVmaW5lZC4gU2tpcHBpbmcuLi4nICUgbWwpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHR1bmVfcGFyYW1ldGVycyA9IGdldF90dW5lX3BhcmFtZXRlcnModHVuZSwgZCkKKyAgICAgICAgdHVuZV9iYXNlbGliID0gdHVuZV9wYXJhbWV0ZXJzWydiYXNlbGliJ10KKyAgICAgICAgaWYgbm90IHR1bmVfYmFzZWxpYjoKKyAgICAgICAgICAgIGJiLndhcm4oIlR1bmUgJXMgZG9lc24ndCBoYXZlIGEgYmFzZWxpYiBzZXQuIFNraXBwaW5nLi4uIiAlIHR1bmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHR1bmVfYXJjaCA9IHR1bmVfcGFyYW1ldGVyc1snYXJjaCddCisgICAgICAgIHR1bmVfYml0bmVzcyA9IHR1bmVfYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKyAgICAgICAgaWYgbm90IHR1bmVfYml0bmVzczoKKyAgICAgICAgICAgIHR1bmVfYml0bmVzcyA9ICczMicgIyAvbGliID0+IDMyYml0IGxpYgorCisgICAgICAgIHNyYyA9ICcuLi8uLi8uLi8nICsgdHVuZV9iYXNlbGliICsgJy8nICsgXAorICAgICAgICAgICAgdHVuZV9hcmNoICsgZC5nZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCBUcnVlKSArICdtbCcgKyBtbCArIFwKKyAgICAgICAgICAgICctJyArIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycKKworICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIFwKKyAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nICsgdHVuZV9iaXRuZXNzCisKKyAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorfQorCitkZWYgZ2V0X29yaWdpbmFsX3ZlbmRvcm9zKGQpOgorICAgIHZlbmRvcm9zID0gZC5leHBhbmQoJyR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9JykKKyAgICBmb3Igc3VmZml4IGluIFtkLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSksIGQuZ2V0VmFyKCdMSUJDRVhURU5TSU9OJywgVHJ1ZSldOgorICAgICAgICBpZiBzdWZmaXggYW5kIHZlbmRvcm9zLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICB2ZW5kb3JvcyA9IHZlbmRvcm9zWzotbGVuKHN1ZmZpeCldCisgICAgcmV0dXJuIHZlbmRvcm9zCisKK09SSUdfVEFSR0VUX1ZFTkRPUk9TIDo9ICIke0BnZXRfb3JpZ2luYWxfdmVuZG9yb3MoZCl9IgorQkFTRVRBUkdFVF9TWVMgPSAiJHtUQVJHRVRfQVJDSH0ke09SSUdfVEFSR0VUX1ZFTkRPUk9TfSIKKworYWRkdGFzayBleHRyYV9zeW1saW5rcyBhZnRlciBkb19tdWx0aWxpYl9pbnN0YWxsIGJlZm9yZSBkb19wYWNrYWdlIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK2Zha2Vyb290IHB5dGhvbiBkb19leHRyYV9zeW1saW5rcygpIHsKKyAgICB0YXJnZXRzeXMgPSBkLmdldFZhcignQkFTRVRBUkdFVF9TWVMnLCBUcnVlKQorCisgICAgaWYgdGFyZ2V0c3lzICE9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSk6CisgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgdGFyZ2V0c3lzCisgICAgICAgIHNyYyA9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cyhkZXN0KSBhbmQgb3MucGF0aC5sZXhpc3RzKGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkpOgorICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTkyZjAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYwpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGxpYmdjYy1jb21tb24uaW5jCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQQVRIX3ByZXBlbmQgPSAiJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LiR7U1RBR0lOR0NDfToiCisKK1BBQ0tBR0VTID0gIiIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2hhcmVkIgorCitMSUJHQ0NCVUlMRFRSRUVOQU1FID0gImdjYy1idWlsZC1pbnRlcm5hbC1pbml0aWFsLSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYyNTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMjUzZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWFkYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYwpAQCAtMCwwICsxLDQxIEBACityZXF1aXJlIGxpYmdjYy1jb21tb24uaW5jCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59IFwKKyAgICAke1BOfS1kZXYgXAorICAgICR7UE59LWRiZyBcCisiCisKKyMgQWxsIGxpYmdjYyBzb3VyY2UgaXMgbWFya2VkIHdpdGggdGhlIGV4Y2VwdGlvbi4KKyMKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCisKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmdjYyouc28uKiIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtiYXNlX2xpYmRpcn0vbGliZ2NjKi5zbyBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qY3J0KiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS82NCBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8zMiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS94MzIgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbjMyIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmdjYyogXAorICAgICR7QGJhc2VfY29uZGl0aW9uYWwoJ0JBU0VUQVJHRVRfU1lTJywgJyR7VEFSR0VUX1NZU30nLCAnJywgJyR7bGliZGlyfS8ke0JBU0VUQVJHRVRfU1lTfScsIGQpfSBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnY292LmEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9Ly5kZWJ1Zy8iCisKK0xJQkdDQ0JVSUxEVFJFRU5BTUUgPSAiZ2NjLWJ1aWxkLWludGVybmFsLSIKKworZG9fcGFja2FnZVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCisKK0lOU0FORV9TS0lQXyR7UE59LWRldiA9ICJzdGF0aWNkZXYiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Mjg0M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jCkBAIC0wLDAgKzEsNzQgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKwltdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisKKwllY2hvICJDb25maWd1cmluZyBsaWJnZm9ydHJhbiIKKwlybSAtcmYgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCW1rZGlyIC1wICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwljZCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJY2htb2QgYSt4ICR7U30vbGliZ2ZvcnRyYW4vY29uZmlndXJlCisJJHtTfS9saWJnZm9ydHJhbi9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKwkjIEVhc2llc3Qgd2F5IHRvIHN0b3AgYmFkIFJQQVRIcyBnZXR0aW5nIGludG8gdGhlIGxpYnJhcnkgc2luY2Ugd2UgaGF2ZSBhCisJIyBicm9rZW4gbGlidG9vbCBoZXJlCisJc2VkIC1pIC1lICdzL2hhcmRjb2RlX2ludG9fbGlicz15ZXMvaGFyZGNvZGVfaW50b19saWJzPW5vLycgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuL2xpYnRvb2wKK30KKworZG9fY29tcGlsZSAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJY2QgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCit9CisKK2RvX2luc3RhbGwgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLyBpbnN0YWxsCisJaWYgWyAtZCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUgXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKwlmaQorCWlmIFsgLWQgJHtEfSR7aW5mb2Rpcn0gXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtpbmZvZGlyfQorCWZpCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgPSAiZ2NjLXJ1bnRpbWUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0tZGJnIFwKKyAgICBsaWJnZm9ydHJhbiBcCisgICAgbGliZ2ZvcnRyYW4tZGV2IFwKKyAgICBsaWJnZm9ydHJhbi1zdGF0aWNkZXYgXAorIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLnNvLioiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJnZm9ydHJhbiouc28gXAorICAgICR7bGliZGlyfS9saWJnZm9ydHJhbi5zcGVjIFwKKyAgICAke2xpYmRpcn0vbGliZ2ZvcnRyYW4ubGEgXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmdmb3J0cmFuYmVnaW4uKiBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliY2FmX3NpbmdsZSogXAorIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJnZm9ydHJhbi5hIgorCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmdmb3J0cmFuLWRldiA9ICJzdGF0aWNkZXYiCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBmID0gZC5nZXRWYXIoIkZPUlRSQU4iLCBUcnVlKQorICAgIGlmICJmb3J0cmFuIiBub3QgaW4gZjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmdmb3J0cmFuIG5lZWRzIGZvcnRyYW4gc3VwcG9ydCB0byBiZSBlbmFibGVkIGluIHRoZSBjb21waWxlciIpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRkOGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnZm9ydHJhbi5pbmMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZDhiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2ZvcnRyYW4uaW5jCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGQ4YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdmb3J0cmFuLmluYworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuOS4xLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy45LjEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTk1YWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuOS4xLmluYwpAQCAtMCwwICsxLDkgQEAKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MyAmIExHUEx2MiAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQkgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSVttZDVzdW1dID0gImYzYjk3ZGU5MTlhOWRiYTg0NDkwYjJlMDc2ZWM0Y2IwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ5OTRhZDk4NjcyNmFjNDEyOGE2ZjFiZDgwMjBjZDY3MmU5YTkyYWE3NmI4MDczNjU2M2VmOTkyOTkyNzY0ZWYiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZiYThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiR05VIGRlYnVnZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYi8iCitMSUNFTlNFID0gIkdQTHYzKyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTID0gImV4cGF0IHpsaWIgbmN1cnNlcyByZWFkbGluZSAke0xUVE5HVVNUfSIKKworTFRUTkdVU1QgPSAibHR0bmctdXN0IgorTFRUTkdVU1RfYWFyY2g2NCA9ICIiCitMVFROR1VTVF9saWJjLXVjbGliYyA9ICIiCitMVFROR1VTVF9taXBzID0gIiIKK0xUVE5HVVNUX21pcHNlbCA9ICIiCitMVFROR1VTVF9taXBzNjQgPSAiIgorTFRUTkdVU1RfbWlwczY0ZWwgPSAiIgorTFRUTkdVU1RfbWlwczY0bjMyID0gIiIKK0xUVE5HVVNUX21pcHM2NGVsbjMyID0gIiIKK0xUVE5HVVNUX3NoNCA9ICIiCitMVFROR1VTVF9saWJjLW11c2wgPSAiIgorCitJTkNfUFIgPSAicjAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKwkJZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisJCWZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQlmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYi9nZGItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAiCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENYWF9GT1JfQlVJTEQgPSAiJHtCVUlMRF9DWFh9IgorZXhwb3J0IENQUF9GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFB9IgorZXhwb3J0IENGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IENYWEZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWEZMQUdTfSIKK2V4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFBGTEFHU30iCisKK0IgPSAiJHtXT1JLRElSfS9idWlsZC0ke1RBUkdFVF9TWVN9IgorCitFWFRSQV9PRU1BS0UgPSAiJ1NVQkRJUlM9aW50bCBtbWFsbG9jIGxpYmliZXJ0eSBvcGNvZGVzIGJmZCBzaW0gZ2RiIGV0YyB1dGlscyciCisKK0VYUEFUID0gIi0td2l0aC1leHBhdCAtLXdpdGgtbGliZXhwYXQtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0iCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ2RidGsgLS1kaXNhYmxlLXR1aSAtLWRpc2FibGUteCAtLWRpc2FibGUtd2Vycm9yIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vyc2VzIC0tZGlzYWJsZS1tdWx0aWxpYiAtLXdpdGgtc3lzdGVtLXJlYWRsaW5lIC0tZGlzYWJsZS1zaW0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1sem1hIC0td2l0aG91dC1ndWlsZSBcCisgICAgICAgICAgICAgICAgJHtHREJQUk9QUkVGSVh9ICR7RVhQQVR9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsICctLWVuYWJsZS02NC1iaXQtYmZkJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgICIKKworR0RCUFJPUFJFRklYID0gIi0tcHJvZ3JhbS1wcmVmaXg9JyciCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJIyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGF2b2lkIHRoZSBhdXRvY29uZi9hdXRvbWFrZS9hY2xvY2FsL2F1dG9oZWFkZXIKKwkjIGNhbGxzIGZvciBub3cKKwkoY2QgJHtTfSAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgaW4gcnVubmluZyBnbnUtY29uZmlnaXplIgorCW9lX3J1bmNvbmYKK30KKworIyB3ZSBkb24ndCB3YW50IGdkYiB0byBwcm92aWRlIGJmZC9pYmVydHkvb3Bjb2Rlcywgd2hpY2ggaW5zdGVhZCB3aWxsIG92ZXJyaWRlIHRoZQorIyByaWdodCBiaXRzIGluc3RhbGxlZCBieSBiaW51dGlscy4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9CisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2xvY2FsZQorfQorCitSUkVDT01NRU5EU19nZGJfYXBwZW5kX2xpbnV4ID0gIiBnbGliYy10aHJlYWQtZGIgIgorUlJFQ09NTUVORFNfZ2RiX2FwcGVuZF9saW51eC1nbnVlYWJpID0gIiBnbGliYy10aHJlYWQtZGIgIgorUlJFQ09NTUVORFNfZ2Ric2VydmVyX2FwcGVuZF9saW51eCA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKK1JSRUNPTU1FTkRTX2dkYnNlcnZlcl9hcHBlbmRfbGludXgtZ251ZWFiaSA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQ2MGE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSwzOCBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgoraW5oZXJpdCBweXRob24tZGlyCisKK1NVTU1BUlkgPSAiR05VIGRlYnVnZ2VyIChjcm9zcy1jYW5hZGlhbiBnZGIgZm9yICR7VEFSR0VUX0FSQ0h9IHRhcmdldCkiCitQTiA9ICJnZGItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJnZGIiCisKK0RFUEVORFMgPSAibmF0aXZlc2RrLW5jdXJzZXMgbmF0aXZlc2RrLWV4cGF0IG5hdGl2ZXNkay1nZXR0ZXh0IG5hdGl2ZXNkay1yZWFkbGluZSBuYXRpdmVzZGstcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gKz0gIm5hdGl2ZXNkay1weXRob24tY29yZSBuYXRpdmVzZGstcHl0aG9uLWxhbmcgbmF0aXZlc2RrLXB5dGhvbi1yZSBcCisgICAgICAgICAgICAgICAgICAgbmF0aXZlc2RrLXB5dGhvbi1jb2RlY3MgbmF0aXZlc2RrLXB5dGhvbi1uZXRjbGllbnQiCisKK0dEQlBST1BSRUZJWCA9ICItLXByb2dyYW0tcHJlZml4PScke1RBUkdFVF9QUkVGSVh9JyIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS13aXRoLXB5dGhvbj0ke1dPUktESVJ9L3B5dGhvbiIKKworU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtTVEFHSU5HX0RBVEFESVJ9L2dkYiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CitjYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKKyMhIC9iaW4vc2gKK2Nhc2UgIlwkMiIgaW4KKyAgICAgICAgLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKKyAgICAgICAgLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIgOzsKKyAgICAgICAgLS1leGVjLXByZWZpeCkgZWNobyAiJHtleGVjX3ByZWZpeH0iIDs7CisgICAgICAgICopIGV4aXQgMSA7OworZXNhYworZXhpdCAwCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KK30KKworIyB3ZSBkb24ndCB3YW50IGdkYiB0byBwcm92aWRlIGJmZC9pYmVydHkvb3Bjb2Rlcywgd2hpY2ggaW5zdGVhZCB3aWxsIG92ZXJyaWRlIHRoZQorIyByaWdodCBiaXRzIGluc3RhbGxlZCBieSBiaW51dGlscy4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtleGVjX3ByZWZpeH0vbGliCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjkuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxMDM1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGdkYi1jb21tb24uaW5jCityZXF1aXJlIGdkYi1jcm9zcy1jYW5hZGlhbi5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ0Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy5pbmMKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBnZGItY29tbW9uLmluYworCitERVBFTkRTID0gImV4cGF0LW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgcHl0aG9uLW5hdGl2ZSIKKworaW5oZXJpdCBweXRob25uYXRpdmUKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIGV4cG9ydCBCVUlMRF9TWVM9IiR7QlVJTERfU1lTfSIKKyAgICBleHBvcnQgSE9TVF9TWVM9IiR7SE9TVF9TWVN9IgorICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0iJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgorICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0iJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorfQorCisjRVhUUkFfT0VNQUtFICs9ICJMREZMQUdTPScke0JVSUxEX0xERkxBR1N9JyIKKworR0RCUFJPUFJFRklYID0gIiIKKworUE4gPSAiZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorQlBOID0gImdkYiIKKworaW5oZXJpdCBjcm9zcworaW5oZXJpdCBnZXR0ZXh0CisKK2RhdGFkaXIgLj0gIi9nZGItJHtUVU5FX1BLR0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk1Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZ2RiLWNyb3NzLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjMDIxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgZ2RiLWNvbW1vbi5pbmMKKworaW5oZXJpdCBnZXR0ZXh0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaCBcCisgICAgICAgICAgICIKKyNMREZMQUdTX2FwcGVuZCA9ICIgLXMiCisjZXhwb3J0IENGTEFHU19hcHBlbmQ9IiAtTCR7U1RBR0lOR19MSUJESVJ9IgorCisjIGNyb3NzLWNhbmFkaWFuIG11c3Qgbm90IHNlZSB0aGlzCitQQUNLQUdFUyA9KyAiZ2Ric2VydmVyIgorRklMRVNfZ2Ric2VydmVyID0gIiR7YmluZGlyfS9nZGJzZXJ2ZXIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTk2YzE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDEyYjA1MDY5NTE0NjBjM2NjMzdkNzc1NDc4ZDAyNGRiM2Y5NWU5ZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI3OjU1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBtYWtlIG1hbiBpbnN0YWxsIHJlbGF0aXZlIHRvIERFU1RESVIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzaW0vY29tbW9uL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KK2luZGV4IGQ0OWE5M2IuLjIxMjFjNDYgMTAwNjQ0CistLS0gYS9zaW0vY29tbW9uL01ha2VmaWxlLmluCisrKysgYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCitAQCAtMzUsNyArMzUsNyBAQCB0b29sZGlyID0gJChsaWJkaXIpLyQodGFyZ2V0X2FsaWFzKQorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBtYW5kaXIgPSBAbWFuZGlyQAorLW1hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorK21hbjFkaXIgPSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyBpbmZvZGlyID0gQGluZm9kaXJACisgaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjY2I0NWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDI2MmNjYzRmZGIyYTNkZjBmMTZjNjFhODA3MDQ2OTY0YWU3NzI5YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI5OjIzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBDaGFuZ2Ugb3JkZXIgb2YgQ0ZMQUdTCisKK0xldHMgdXMgb3ZlcnJpZGUgV2Vycm9yIGlmIG5lZWQgYmUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitpbmRleCAxZWQyZWM4Li4wY2VmOTViIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorKysrIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorQEAgLTEzMSwxMCArMTMxLDEwIEBAIENGTEFHUyA9IEBDRkxBR1NACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgCisgIyBJTlRFUk5BTF9DRkxBR1MgaXMgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb3RoZXIgKkNGTEFHUyBtYWNyb3MuCistSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAgJHtDRkxBR1N9ICR7R0xPQkFMX0NGTEFHU30gXAorK0lOVEVSTkFMX0NGTEFHU19CQVNFID0gJHtHTE9CQUxfQ0ZMQUdTfSBcCisgCSR7UFJPRklMRV9DRkxBR1N9ICR7SU5DTFVERV9DRkxBR1N9ICR7Q1BQRkxBR1N9CisgSU5URVJOQUxfV0FSTl9DRkxBR1MgPSAgJHtJTlRFUk5BTF9DRkxBR1NfQkFTRX0gJChXQVJOX0NGTEFHUykKKy1JTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAtREdEQlNFUlZFUgorK0lOVEVSTkFMX0NGTEFHUyA9ICAke0lOVEVSTkFMX1dBUk5fQ0ZMQUdTfSAkKFdFUlJPUl9DRkxBR1MpICR7Q0ZMQUdTfSAtREdEQlNFUlZFUgorIAorICMgTERGTEFHUyBpcyBzcGVjaWZpY2FsbHkgcmVzZXJ2ZWQgZm9yIHNldHRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgIyB3aGVuIHJ1bm5pbmcgbWFrZS4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlMjJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKQEAgLTAsMCArMSw5MjEgQEAKK0Zyb20gNDA3Y2IxM2NmYjcwNjk3ZjQ1ZGZiNzYxMzA0ZTAwNWUxZWNiZDBlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6MzE6MTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIEFkZCBzdXBwb3J0IGZvciBSZW5lc2FzIFNIIChzaDQpIGFyY2hpdGVjdHVyZS4KKworZ2RiICg3LjQtMX5jdnMyMDExMTExNy4yKSBleHBlcmltZW50YWw7IHVyZ2VuY3k9bG93CisgLgorICAgKiBBZGQgUmVuZXNhcyBTSCAoc2g0KSBzdXBwb3J0IChDbG9zZXM6ICM1NzYyNDIpCisgICAgIC0gVGhhbmtzIE5vYnVoaXJvIEl3YW1hdHN1LCBUYWthc2hpIFlvc2hpaS4KK0F1dGhvcjogSGVjdG9yIE9yb24gPHp1bWJpQGRlYmlhbi5vcmc+CitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzU3NjI0MgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGdkYi9jb25maWd1cmUuaG9zdCAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgZ2RiL3NoLWxpbnV4LXRkZXAuYyAgICAgICAgICAgICAgICAgIHwgNTE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ2RiL3NoLXRkZXAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU0ICsrLS0KKyBnZGIvc2gtdGRlcC5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDkgKysrKworIGdkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCB8ICAgNSArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYyAgICAgICAgIHwgICAzICstCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMgICAgIHwgICAzICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyAgICAgfCAgIDQgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgICAgICB8ICAgMyArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgICAgIHwgICA0ICsKKyAxMSBmaWxlcyBjaGFuZ2VkLCA2MTcgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvTWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KK2luZGV4IDc5Mzc4MDEuLjYzYmFmODEgMTAwNjQ0CistLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrKyBiL2dkYi9NYWtlZmlsZS5pbgorQEAgLTE3MDcsNiArMTcwNyw3IEBAIEFMTERFUEZJTEVTID0gXAorIAlzY29yZS10ZGVwLmMgXAorIAlzZXItZ28zMi5jIHNlci1waXBlLmMgc2VyLXRjcC5jIHNlci1taW5ndy5jIFwKKyAJc2gtdGRlcC5jIHNoNjQtdGRlcC5jIHNobmJzZC10ZGVwLmMgc2huYnNkLW5hdC5jIFwKKysJc2gtbGludXgtdGRlcC5jIHNoLWxpbnV4LW5hdC5jIFwKKyAJc29sMi10ZGVwLmMgXAorIAlzb2xpYi1zdnI0LmMgXAorIAlzcGFyYy1saW51eC1uYXQuYyBzcGFyYy1saW51eC10ZGVwLmMgXAorZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUuaG9zdCBiL2dkYi9jb25maWd1cmUuaG9zdAoraW5kZXggZDA3YmU0Yi4uYjYzOTFjNSAxMDA2NDQKKy0tLSBhL2dkYi9jb25maWd1cmUuaG9zdAorKysrIGIvZ2RiL2NvbmZpZ3VyZS5ob3N0CitAQCAtMTUwLDYgKzE1MCw3IEBAIHBvd2VycGMqLSotbGludXgqKQlnZGJfaG9zdD1saW51eCA7OworIAorIHMzOTAqLSotbGludXgqKQkJZ2RiX2hvc3Q9bGludXggOzsKKyAKKytzaCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OworIHNoKi0qLW5ldGJzZGVsZiogfCBzaCotKi1rbmV0YnNkKi1nbnUpCisgCQkJZ2RiX2hvc3Q9bmJzZCA7OworIHNoKi0qLW9wZW5ic2QqKQkJZ2RiX2hvc3Q9bmJzZCA7OworZGlmZiAtLWdpdCBhL2dkYi9zaC1saW51eC10ZGVwLmMgYi9nZGIvc2gtbGludXgtdGRlcC5jCitpbmRleCAyZmYyZWU4Li4xYTExMjYyIDEwMDY0NAorLS0tIGEvZ2RiL3NoLWxpbnV4LXRkZXAuYworKysrIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYworQEAgLTE4LDE0ICsxOCwzNyBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJnZGJjb3JlLmgiCisrI2luY2x1ZGUgImZyYW1lLmgiCisrI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKKysjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCisrI2luY2x1ZGUgImR3YXJmMi1mcmFtZS5oIgorKyNpbmNsdWRlICJ2YWx1ZS5oIgorKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorKyNpbmNsdWRlICJpbmZlcmlvci5oIgorICNpbmNsdWRlICJvc2FiaS5oIgorIAorKyNpbmNsdWRlICJyZWdncm91cHMuaCIKKysjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJmbG9hdGZvcm1hdC5oIgorICNpbmNsdWRlICJzb2xpYi1zdnI0LmgiCisgI2luY2x1ZGUgInN5bXRhYi5oIgorKyNpbmNsdWRlICJnZGJfc3RyaW5nLmgiCisrI2luY2x1ZGUgImNvbW1hbmQuaCIKKysjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgorIAorICNpbmNsdWRlICJ0cmFkLWZyYW1lLmgiCisgI2luY2x1ZGUgInRyYW1wLWZyYW1lLmgiCisgCisrI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxzeXMvdXNlci5oPgorKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorKworKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisrCisrI2luY2x1ZGUgInJlZ3NldC5oIgorICNpbmNsdWRlICJnbGliYy10ZGVwLmgiCisgI2luY2x1ZGUgInNoLXRkZXAuaCIKKyAjaW5jbHVkZSAibGludXgtdGRlcC5oIgorQEAgLTE4MCw5ICsyMDMsNTA1IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhbXBfZnJhbWUgc2hfbGludXhfcnRfc2lncmV0dXJuX3RyYW1wX2ZyYW1lID0geworICAgc2hfbGludXhfcnRfc2lncmV0dXJuX2luaXQKKyB9OworIAorKy8qIFJlY29nbml6aW5nIHNpZ25hbCBoYW5kbGVyIGZyYW1lcy4gICovCisrCisrLyogR05VL0xpbnV4IGhhcyB0d28gZmxhdm9ycyBvZiBzaWduYWxzLiAgTm9ybWFsIHNpZ25hbCBoYW5kbGVycywgYW5kCisrICAgInJlYWx0aW1lIiAoUlQpIHNpZ25hbHMuICBUaGUgUlQgc2lnbmFscyBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsCisrICAgaW5mb3JtYXRpb24gdG8gdGhlIHNpZ25hbCBoYW5kbGVyIGlmIHRoZSBTQV9TSUdJTkZPIGZsYWcgaXMgc2V0CisrICAgd2hlbiBlc3RhYmxpc2hpbmcgYSBzaWduYWwgaGFuZGxlciB1c2luZyBgc2lnYWN0aW9uJy4gIEl0IGlzIG5vdAorKyAgIHVubGlrZWx5IHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIEdOVS9MaW51eCB3aWxsIHN1cHBvcnQgU0FfU0lHSU5GTworKyAgIGZvciBub3JtYWwgc2lnbmFscyB0b28uICAqLworKworKy8qIFdoZW4gdGhlIFNIIExpbnV4IGtlcm5lbCBjYWxscyBhIHNpZ25hbCBoYW5kbGVyIGFuZCB0aGUKKysgICBTQV9SRVNUT1JFUiBmbGFnIGlzbid0IHNldCwgdGhlIHJldHVybiBhZGRyZXNzIHBvaW50cyB0byBhIGJpdCBvZgorKyAgIGNvZGUgb24gdGhlIHN0YWNrLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgdGhlIFBDIGFwcGVhcnMgdG8KKysgICBiZSB3aXRoaW4gdGhpcyBiaXQgb2YgY29kZS4KKysKKysgICBUaGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgZm9yIG5vcm1hbCBzaWduYWxzIGlzCisrICAgICAgIG1vdi53ICAxZixyMworKyAgICAgICB0cmFwYSAgIzE2CisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAxOiAud29yZCAgX19OUl9zaWdyZXR1cm4KKysgICBvciAweDkzMDUgMHhjMzEwIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgwMDc3LgorKworKyAgIENoZWNraW5nIGZvciB0aGUgY29kZSBzZXF1ZW5jZSBzaG91bGQgYmUgc29tZXdoYXQgcmVsaWFibGUsIGJlY2F1c2UKKysgICB0aGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHNpZ3JldHVybi4gIFRoaXMgaXMgdW5saWtlbHkKKysgICB0byBvY2N1ciBhbnl3aGVyZSBvdGhlciB0aGFuIGEgc2lnbmFsIHRyYW1wb2xpbmUuCisrCisrICAgSXQga2luZCBvZiBzdWNrcyB0aGF0IHdlIGhhdmUgdG8gcmVhZCBtZW1vcnkgZnJvbSB0aGUgcHJvY2VzcyBpbgorKyAgIG9yZGVyIHRvIGlkZW50aWZ5IGEgc2lnbmFsIHRyYW1wb2xpbmUsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKKysgICBhbnkgb3RoZXIgd2F5LiAgVGhlIFBDX0lOX1NJR1RSQU1QIG1hY3JvIGluIHRtLWxpbnV4LmggYXJyYW5nZXMgdG8KKysgICBvbmx5IGNhbGwgdXMgaWYgbm8gZnVuY3Rpb24gbmFtZSBjb3VsZCBiZSBpZGVudGlmaWVkLCB3aGljaCBzaG91bGQKKysgICBiZSB0aGUgY2FzZSBzaW5jZSB0aGUgY29kZSBpcyBvbiB0aGUgc3RhY2suCisrCisrICAgRGV0ZWN0aW9uIG9mIHNpZ25hbCB0cmFtcG9saW5lcyBmb3IgaGFuZGxlcnMgdGhhdCBzZXQgdGhlCisrICAgU0FfUkVTVE9SRVIgZmxhZyBpcyBpbiBnZW5lcmFsIG5vdCBwb3NzaWJsZS4gIFVuZm9ydHVuYXRlbHkgdGhpcyBpcworKyAgIHdoYXQgdGhlIEdOVSBDIExpYnJhcnkgaGFzIGJlZW4gZG9pbmcgZm9yIHF1aXRlIHNvbWUgdGltZSBub3cuCisrICAgSG93ZXZlciwgYXMgb2YgdmVyc2lvbiAyLjEuMiwgdGhlIEdOVSBDIExpYnJhcnkgdXNlcyBzaWduYWwKKysgICB0cmFtcG9saW5lcyAobmFtZWQgX19yZXN0b3JlIGFuZCBfX3Jlc3RvcmVfcnQpIHRoYXQgYXJlIGlkZW50aWNhbAorKyAgIHRvIHRoZSBvbmVzIHVzZWQgYnkgdGhlIGtlcm5lbC4gIFRoZXJlZm9yZSwgdGhlc2UgdHJhbXBvbGluZXMgYXJlCisrICAgc3VwcG9ydGVkIHRvby4gICovCisrCisrI2RlZmluZSBNT1ZXKG4pCSAoMHg5MzAwfCgobiktMikpCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrbiB0byBSMyAqLworKyNkZWZpbmUgVFJBUDE2CSAweGMzMTAJCQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBPUl9SMF9SMCAweDIwMGIJCQkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04wCU1PVlcoNykJCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrNyB0byBSMyAqLworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjEJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMglPUl9SMF9SMAkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGludXhfc2lndHJhbXBfY29kZVtdID0KKyt7CisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMCwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04xLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIF9fTlJfc2lncmV0dXJuCisrfTsKKysKKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0xFTiAoc2l6ZW9mIGxpbnV4X3NpZ3RyYW1wX2NvZGUpCisrCisrLyogSWYgUEMgaXMgaW4gYSBzaWd0cmFtcCByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mCisrICAgdGhlIHJvdXRpbmUuICBPdGhlcndpc2UsIHJldHVybiAwLiAgKi8KKysKKytzdGF0aWMgQ09SRV9BRERSCisrc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAobmV4dF9mcmFtZSk7CisrICBnZGJfYnl0ZSBidWZbTElOVVhfU0lHVFJBTVBfTEVOXTsKKysKKysgIC8qIFdlIG9ubHkgcmVjb2duaXplIGEgc2lnbmFsIHRyYW1wb2xpbmUgaWYgUEMgaXMgYXQgdGhlIHN0YXJ0IG9mCisrICAgICBvbmUgb2YgdGhlIHRocmVlIGluc3RydWN0aW9ucy4gIFdlIG9wdGltaXplIGZvciBmaW5kaW5nIHRoZSBQQyBhdAorKyAgICAgdGhlIHN0YXJ0LCBhcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXMgbm90IHRoZQorKyAgICAgZmlyc3QgZnJhbWUgb24gdGhlIHN0YWNrLiAgV2UgYXNzdW1lIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCisrICAgICBQQyBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgdGhlcmUgd2lsbCBiZQorKyAgICAgYSBmZXcgdHJhaWxpbmcgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHN0YWNrLiAgKi8KKysKKysgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9TSUdUUkFNUF9MRU4pKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChidWZbMF0gIT0gTElOVVhfU0lHVFJBTVBfSU5TTjApCisrICAgIHsKKysgICAgICBpZiAoYnVmWzBdICE9IExJTlVYX1NJR1RSQU1QX0lOU04xKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgICAgcGMgLT0gMjsKKysKKysgICAgICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfU0lHVFJBTVBfTEVOKSkKKysJcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfc2lndHJhbXBfY29kZSwgTElOVVhfU0lHVFJBTVBfTEVOKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiBwYzsKKyt9CisrCisrLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGZvciBSVCBzaWduYWxzLiAgSGVyZSB0aGUgaW5zdHJ1Y3Rpb24KKysgICBzZXF1ZW5jZSBpcworKyAgICAgICBtb3YudyAgMWYscjMKKysgICAgICAgdHJhcGEgICMxNgorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgMTogLndvcmQgIF9fTlJfcnRfc2lncmV0dXJuCisrICAgb3IgMHg5MzA1IDB4YzMxMCAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MDBhZC4KKysKKysgICBUaGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHJ0X3NpZ3JldHVybi4gICovCisrCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMAkJTU9WVyg3KQkJLyogTW92ZSBtZW0gd29yZCBhdCBQQys3IHRvIFIzICovCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMQkJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMgkJT1JfUjBfUjAJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGVbXSA9CisreworKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjAsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMSwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBfX05SX3J0X3NpZ3JldHVybgorK307CisrCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9MRU4gKHNpemVvZiBsaW51eF9ydF9zaWd0cmFtcF9jb2RlKQorKworKy8qIElmIFBDIGlzIGluIGEgUlQgc2lndHJhbXAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydAorKyAgIG9mIHRoZSByb3V0aW5lLiAgT3RoZXJ3aXNlLCByZXR1cm4gMC4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKG5leHRfZnJhbWUpOworKyAgZ2RiX2J5dGUgYnVmW0xJTlVYX1JUX1NJR1RSQU1QX0xFTl07CisrCisrICAvKiBXZSBvbmx5IHJlY29nbml6ZSBhIHNpZ25hbCB0cmFtcG9saW5lIGlmIFBDIGlzIGF0IHRoZSBzdGFydCBvZgorKyAgICAgb25lIG9mIHRoZSB0d28gaW5zdHJ1Y3Rpb25zLiAgV2Ugb3B0aW1pemUgZm9yIGZpbmRpbmcgdGhlIFBDIGF0CisrICAgICB0aGUgc3RhcnQsIGFzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbXBvbGluZSBpcyBub3QgdGhlCisrICAgICBmaXJzdCBmcmFtZSBvbiB0aGUgc3RhY2suICBXZSBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKKysgICAgIFBDIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aGVyZSB3aWxsIGJlCisrICAgICBhIGZldyB0cmFpbGluZyByZWFkYWJsZSBieXRlcyBvbiB0aGUgc3RhY2suICAqLworKworKyAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1JUX1NJR1RSQU1QX0xFTikpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMCkKKysgICAgeworKyAgICAgIGlmIChidWZbMF0gIT0gTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEpCisrCXJldHVybiAwOworKworKyAgICAgIHBjIC09IDI7CisrCisrICAgICAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsCisrCQkJCSAgICAgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSkKKysJcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfcnRfc2lndHJhbXBfY29kZSwgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiBwYzsKKyt9CisrCisrLyogUmV0dXJuIHdoZXRoZXIgUEMgaXMgaW4gYSBHTlUvTGludXggc2lndHJhbXAgcm91dGluZS4gICovCisrCisrc3RhdGljIGludAorK3NoX2xpbnV4X3NpZ3RyYW1wX3AgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAodGhpc19mcmFtZSk7CisrICBjaGFyICpuYW1lOworKworKyAgZmluZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgJm5hbWUsIE5VTEwsIE5VTEwpOworKworKyAgLyogSWYgd2UgaGF2ZSBOQU1FLCB3ZSBjYW4gb3B0aW1pemUgdGhlIHNlYXJjaC4gIFRoZSB0cmFtcG9saW5lcyBhcmUKKysgICAgIG5hbWVkIF9fcmVzdG9yZSBhbmQgX19yZXN0b3JlX3J0LiAgSG93ZXZlciwgdGhleSBhcmVuJ3QgZHluYW1pY2FsbHkKKysgICAgIGV4cG9ydGVkIGZyb20gdGhlIHNoYXJlZCBDIGxpYnJhcnksIHNvIHRoZSB0cmFtcG9saW5lIG1heSBhcHBlYXIgdG8KKysgICAgIGJlIHBhcnQgb2YgdGhlIHByZWNlZGluZyBmdW5jdGlvbi4gIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBzaWdhY3Rpb24sCisrICAgICBfX3NpZ2FjdGlvbiwgb3IgX19saWJjX3NpZ2FjdGlvbiAoYWxsIGFsaWFzZXMgdG8gdGhlIHNhbWUgZnVuY3Rpb24pLiAgKi8KKysgIGlmIChuYW1lID09IE5VTEwgfHwgc3Ryc3RyIChuYW1lLCAic2lnYWN0aW9uIikgIT0gTlVMTCkKKysgICAgcmV0dXJuIChzaF9saW51eF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSkgIT0gMAorKwkgICAgfHwgc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpICE9IDApOworKworKyAgcmV0dXJuIChzdHJjbXAgKCJfX3Jlc3RvcmUiLCBuYW1lKSA9PSAwCisrCSAgfHwgc3RyY21wICgiX19yZXN0b3JlX3J0IiwgbmFtZSkgPT0gMCk7CisrfQorKworKy8qIE9mZnNldCB0byBzdHJ1Y3Qgc2lnY29udGV4dCBpbiB1Y29udGV4dCwgZnJvbSA8YXNtL3Vjb250ZXh0Lmg+LiAgKi8KKysjZGVmaW5lIFNIX0xJTlVYX1VDT05URVhUX1NJR0NPTlRFWFRfT0ZGU0VUIDEyCisrCisrCisrLyogQXNzdW1pbmcgTkVYVF9GUkFNRSBpcyBhIGZyYW1lIGZvbGxvd2luZyBhIEdOVS9MaW51eCBzaWd0cmFtcAorKyAgIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBzaWdjb250ZXh0IHN0cnVjdHVyZS4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3NpZ2NvbnRleHRfYWRkciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjOworKyAgQ09SRV9BRERSIHNwOworKworKyAgc3AgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7CisrCisrICBwYyA9IHNoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKTsKKysgIGlmIChwYykKKysgICAgeworKyAgICAgIHJldHVybiBzcDsKKysgICAgfQorKworKyAgcGMgPSBzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSk7CisrICBpZiAocGMpCisrICAgIHsKKysgICAgICBDT1JFX0FERFIgdWNvbnRleHRfYWRkcjsKKysKKysgICAgICAvKiBUaGUgc2lnY29udGV4dCBzdHJ1Y3R1cmUgaXMgcGFydCBvZiB0aGUgdXNlciBjb250ZXh0LiAgQQorKwkgcG9pbnRlciB0byB0aGUgdXNlciBjb250ZXh0IGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQKKysJIHRvIHRoZSBzaWduYWwgaGFuZGxlci4gICovCisrICAgICAgdWNvbnRleHRfYWRkciA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgQVJHMF9SRUdOVU0rMik7CisrICAgICAgcmV0dXJuIHVjb250ZXh0X2FkZHIgKyBTSF9MSU5VWF9VQ09OVEVYVF9TSUdDT05URVhUX09GRlNFVDsKKysgICAgfQorKworKyAgZXJyb3IgKCJDb3VsZG4ndCByZWNvZ25pemUgc2lnbmFsIHRyYW1wb2xpbmUuIik7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogU2lnbmFsIHRyYW1wb2xpbmVzLiAgKi8KKytleHRlcm4gc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCk7CisrCisrc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyt7CisrICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlOworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2N1cnJlbnRfYXJjaCAoKSk7CisrICBDT1JFX0FERFIgc2lnY29udGV4dF9hZGRyOworKworKyAgaWYgKCp0aGlzX2NhY2hlKQorKyAgICByZXR1cm4gKnRoaXNfY2FjaGU7CisrCisrICBjYWNoZSA9IHNoX2FsbG9jX2ZyYW1lX2NhY2hlICgpOworKworKyAgY2FjaGUtPmJhc2UgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7CisrICBzaWdjb250ZXh0X2FkZHIgPSB0ZGVwLT5zaWdjb250ZXh0X2FkZHIgKHRoaXNfZnJhbWUpOworKyAgaWYgKHRkZXAtPnNjX3JlZ19vZmZzZXQpCisrICAgIHsKKysgICAgICBpbnQgaTsKKysKKysgICAgICBnZGJfYXNzZXJ0ICh0ZGVwLT5zY19udW1fcmVncyA8PSBTSF9OVU1fUkVHUyk7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8IHRkZXAtPnNjX251bV9yZWdzOyBpKyspCisrCWlmICh0ZGVwLT5zY19yZWdfb2Zmc2V0W2ldICE9IC0xKQorKwkgIGNhY2hlLT5zYXZlZF9yZWdzW2ldID0gc2lnY29udGV4dF9hZGRyICsgdGRlcC0+c2NfcmVnX29mZnNldFtpXTsKKysgICAgfQorKworKyAgKnRoaXNfY2FjaGUgPSBjYWNoZTsKKysgIHJldHVybiBjYWNoZTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCisrCQkJICAgICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQpCisreworKyAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9CisrICAgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKysKKysgICgqdGhpc19pZCkgPSBmcmFtZV9pZF9idWlsZCAoY2FjaGUtPmJhc2UgKyA2NCwgY2FjaGUtPnBjKTsKKyt9CisrCisrZXh0ZXJuIHN0cnVjdCB2YWx1ZSAqIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKCk7Cisrc3RhdGljIHN0cnVjdCB2YWx1ZSAqCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisrICAgICAgICAgICAgICAgICAgIHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQorK3sKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKysKKysgIHJldHVybiBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlLCByZWdudW0pOworK30KKysKKytzdGF0aWMgaW50Cisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfc25pZmZlciAoY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCAqc2VsZiwKKysgICAgICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorKyAgICAgICAgICAgICAgICAgdm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUpCisreworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpKTsKKysKKysgIC8qIFdlIHNob3VsZG4ndCBldmVuIGJvdGhlciBpZiB3ZSBkb24ndCBoYXZlIGEgc2lnY29udGV4dF9hZGRyCisrICAgICBoYW5kbGVyLiAgKi8KKysgIGlmICh0ZGVwLT5zaWdjb250ZXh0X2FkZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAodGRlcC0+c2lndHJhbXBfcCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPnNpZ3RyYW1wX3AgKHRoaXNfZnJhbWUpKQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3Vud2luZCA9CisreworKyAgU0lHVFJBTVBfRlJBTUUsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciwKKysgIE5VTEwsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9zbmlmZmVyCisrfTsKKysKKysvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTgorKyAgIGluIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQorKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrdm9pZAorK3NoX3N1cHBseV9ncmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmdyZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjb25zdCBjaGFyICpyZWdzID0gZ3JlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+Z3JlZ3NldF9udW1fcmVnczsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKChyZWdudW0gPT0gaSB8fCByZWdudW0gPT0gLTEpCisrICAgICAgJiYgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldICE9IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSwgcmVncyArIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSk7CisrICAgIH0KKyt9CisrCisrLyogQ29sbGVjdCByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgcmVnaXN0ZXIgY2FjaGUgUkVHQ0FDSEUgYW5kIHN0b3JlCisrICAgaXQgaW4gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTiBhcyBkZXNjcmliZWQgYnkgdGhlCisrICAgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHNldCBSRUdTRVQuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yCisrICAgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3ZvaWQKKytzaF9jb2xsZWN0X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKKysgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICBpbnQgcmVnbnVtLCB2b2lkICpncmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY2hhciAqcmVncyA9IGdyZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpOworKworKyAgZm9yIChpID0gMDsgaSA8IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3M7IGkrKykKKysgICAgeworKyAgICAgIGlmICgocmVnbnVtID09IGkgfHwgcmVnbnVtID09IC0xKQorKyAgICAgICYmIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSAhPSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBpLCByZWdzICsgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldKTsKKysgICAgfQorK30KKysKKysvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRlBSRUdTIGFuZCBMRU4KKysgICBpbiB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQorKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrc3RhdGljIHZvaWQKKytzaF9zdXBwbHlfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY29uc3QgY2hhciAqcmVncyA9IGZwcmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgeworKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpKzI1LCByZWdzICsgaSo0KTsKKysgICAgfQorKyAgaWYgKHJlZ251bSA9PSBGUFNDUl9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgRlBTQ1JfUkVHTlVNLCByZWdzICsgMzIqNCk7CisrICBpZiAocmVnbnVtID09IEZQVUxfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7CisrfQorKworKy8qIENvbGxlY3QgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIHJlZ2lzdGVyIGNhY2hlIFJFR0NBQ0hFIGFuZCBzdG9yZQorKyAgIGl0IGluIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEZQUkVHUyBhbmQgTEVOIGFzIGRlc2NyaWJlZCBieSB0aGUKKysgICBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQgUkVHU0VULiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvcgorKyAgIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3NoX2NvbGxlY3RfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKKysgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgIGludCByZWdudW0sIHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY2hhciAqcmVncyA9IGZwcmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgeworKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgaSsyNSwgcmVncyArIGkqNCk7CisrICAgIH0KKysgIGlmIChyZWdudW0gPT0gRlBTQ1JfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBGUFNDUl9SRUdOVU0sIHJlZ3MgKyAzMio0KTsKKysgIGlmIChyZWdudW0gPT0gRlBVTF9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7CisrfQorKworKy8qIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgY29yZSBzZWN0aW9uIGlkZW50aWZpZWQKKysgICBieSBTRUNUX05BTUUgYW5kIFNFQ1RfU0laRS4gICovCisrCisrY29uc3Qgc3RydWN0IHJlZ3NldCAqCisrc2hfbGludXhfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VjdF9uYW1lLCBzaXplX3Qgc2VjdF9zaXplKQorK3sKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworKworKyAgaWYgKHN0cmNtcCAoc2VjdF9uYW1lLCAiLnJlZyIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPmdyZWdzZXQgPT0gTlVMTCkKKysgICAgdGRlcC0+Z3JlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJjaCwgc2hfc3VwcGx5X2dyZWdzZXQsCisrICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZ3JlZ3NldCk7CisrICAgICAgcmV0dXJuIHRkZXAtPmdyZWdzZXQ7CisrICAgIH0KKysKKysgIGlmICgoc3RyY21wIChzZWN0X25hbWUsICIucmVnMiIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCkpCisrICAgIHsKKysgICAgICBpZiAodGRlcC0+ZnByZWdzZXQgPT0gTlVMTCkKKysgICAgdGRlcC0+ZnByZWdzZXQgPSByZWdzZXRfYWxsb2MgKGdkYmFyY2gsIHNoX3N1cHBseV9mcHJlZ3NldCwKKysgICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZnByZWdzZXQpOworKyAgICAgIHJldHVybiB0ZGVwLT5mcHJlZ3NldDsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFRoZSByZWdpc3RlciBzZXRzIHVzZWQgaW4gR05VL0xpbnV4IEVMRiBjb3JlLWR1bXBzIGFyZSBpZGVudGljYWwgdG8KKysgICB0aGUgcmVnaXN0ZXIgc2V0cyBpbiBgc3RydWN0IHVzZXInIHRoYXQgYXJlIHVzZWQgZm9yIGEub3V0CisrICAgY29yZS1kdW1wcy4gIFRoZXNlIGFyZSBhbHNvIHVzZWQgYnkgcHRyYWNlKDIpLiAgVGhlIGNvcnJlc3BvbmRpbmcKKysgICB0eXBlcyBhcmUgYGVsZl9ncmVnc2V0X3QnIGZvciB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyAod2l0aAorKyAgIGBlbGZfZ3JlZ190JyB0aGUgdHlwZSBvZiBhIHNpbmdsZSBHUCByZWdpc3RlcikgYW5kIGBlbGZfZnByZWdzZXRfdCcKKysgICBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKysKKysgICBUaG9zZSB0eXBlcyB1c2VkIHRvIGJlIGF2YWlsYWJsZSB1bmRlciB0aGUgbmFtZXMgYGdyZWdzZXRfdCcgYW5kCisrICAgYGZwcmVnc2V0X3QnIHRvbywgYW5kIEdEQiB1c2VkIHRob3NlIG5hbWVzIGluIHRoZSBwYXN0LiAgQnV0IHRob3NlCisrICAgbmFtZXMgYXJlIG5vdyB1c2VkIGZvciB0aGUgcmVnaXN0ZXIgc2V0cyB1c2VkIGluIHRoZSBgbWNvbnRleHRfdCcKKysgICB0eXBlLCB3aGljaCBoYXZlIGEgZGlmZmVyZW50IHNpemUgYW5kIGxheW91dC4gICovCisrCisrLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QgdXNlcicKKysgICBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCisrCisrLyogRnJvbSA8c3lzL3JlZy5oPi4gICovCisrc3RhdGljIGludCBzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXRbXSA9CisreworKyAwLAk0LAk4LAkxMiwJMTYsCTIwLAkyNCwJMjgsCisrIDMyLAkzNiwJNDAsCTQ0LAk0OCwJNTIsCTU2LAk2MCwKKysKKysgUkVHX1BDKjQsICAgUkVHX1BSKjQsICAgUkVHX0dCUio0LCAgLTEsCisrIFJFR19NQUNIKjQsIFJFR19NQUNMKjQsIFJFR19TUio0LAorK307CisrCisrLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QKKysgICBzaWdjb250ZXh0JyBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCisrCisrLyogRnJvbSA8YXNtL3NpZ2NvbnRleHQuaD4uICAqLworK3N0YXRpYyBpbnQgc2hfbGludXhfc2NfcmVnX29mZnNldFtdID0KKyt7CisrIDQsCTgsCTEyLAkxNiwJMjAsCTI0LAkyOCwJMzIsCisrIDM2LAk0MCwJNDQsCTQ4LAk1MiwJNTYsCTYwLAk2NCwKKysgNjgsCTcyLAk4MCwJLTEsCisrIDg0LAk4OCwJNzYKKyt9OworKworIHN0YXRpYyB2b2lkCisgc2hfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpCisgeworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisrICBiZmQgYWJmZDsKKysKKysgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9IHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldDsKKysgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXQpOworKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAyMyAqIDQ7CisrCisrICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAzMjsgICAgIC8qIEZyb20gPGJpdHMvc2V0am1wLmg+LiAgKi8KKysKKysgIHRkZXAtPnNpZ3RyYW1wX3AgPSBzaF9saW51eF9zaWd0cmFtcF9wOworKyAgdGRlcC0+c2lnY29udGV4dF9hZGRyID0gc2hfbGludXhfc2lnY29udGV4dF9hZGRyOworKyAgdGRlcC0+c2NfcmVnX29mZnNldCA9IHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQ7CisrICB0ZGVwLT5zY19udW1fcmVncyA9IEFSUkFZX1NJWkUgKHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQpOworKworKyAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlcihnZGJhcmNoLCAmc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdW53aW5kKTsKKysKKysgIC8qIElmIHdlIGhhdmUgYSByZWdpc3RlciBtYXBwaW5nLCBlbmFibGUgdGhlIGdlbmVyaWMgY29yZSBmaWxlCisrICAgICBzdXBwb3J0LCB1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLiAgKi8KKysgIGlmICh0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQKKysgICAgICAmJiAhZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb25fcCAoZ2RiYXJjaCkpCisrICAgIHNldF9nZGJhcmNoX3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbiAoZ2RiYXJjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoX2xpbnV4X3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbik7CisrCisgICBsaW51eF9pbml0X2FiaSAoaW5mbywgZ2RiYXJjaCk7CisgCisgICAvKiBHTlUvTGludXggdXNlcyBTVlI0LXN0eWxlIHNoYXJlZCBsaWJyYXJpZXMuICAqLworZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmMgYi9nZGIvc2gtdGRlcC5jCitpbmRleCA4MmNmMmY0Li5iNDQzZTQ2IDEwMDY0NAorLS0tIGEvZ2RiL3NoLXRkZXAuYworKysrIGIvZ2RiL3NoLXRkZXAuYworQEAgLTIxLDYgKzIxLDkgQEAKKyAgICBzYWNAY3lnbnVzLmNvbS4gICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJjb21tYW5kLmgiCisrI2luY2x1ZGUgImR1bW15LWZyYW1lLmgiCisgI2luY2x1ZGUgImZyYW1lLmgiCisgI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKKyAjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCitAQCAtMzUsNiArMzgsNyBAQAorICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisgI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCisgI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisrI2luY2x1ZGUgInJlZ3NldC5oIgorICNpbmNsdWRlICJkb3VibGVzdC5oIgorICNpbmNsdWRlICJvc2FiaS5oIgorICNpbmNsdWRlICJyZWdncm91cHMuaCIKK0BAIC02NywyMyArNzEsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2hfY2NfZW51bVtdID0geworIAorIHN0YXRpYyBjb25zdCBjaGFyICpzaF9hY3RpdmVfY2FsbGluZ19jb252ZW50aW9uID0gc2hfY2NfZ2NjOworIAorLSNkZWZpbmUgU0hfTlVNX1JFR1MgNjcKKy0KKy1zdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUKKy17CistICAvKiBCYXNlIGFkZHJlc3MuICAqLworLSAgQ09SRV9BRERSIGJhc2U7CistICBMT05HRVNUIHNwX29mZnNldDsKKy0gIENPUkVfQUREUiBwYzsKKy0KKy0gIC8qIEZsYWcgc2hvd2luZyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgcHJvbG9ndWUgY29kZS4gICovCistICBpbnQgdXNlc19mcDsKKy0KKy0gIC8qIFNhdmVkIHJlZ2lzdGVycy4gICovCistICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tTSF9OVU1fUkVHU107CistICBDT1JFX0FERFIgc2F2ZWRfc3A7CistfTsKKy0KKyBzdGF0aWMgaW50Cisgc2hfaXNfcmVuZXNhc19jYWxsaW5nX2NvbnZlbnRpb24gKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUpCisgeworQEAgLTEwNDMsNyArMTAzMCw3IEBAIHNoX3RyZWF0X2FzX2ZsdF9wIChzdHJ1Y3QgdHlwZSAqdHlwZSkKKyAgICAgcmV0dXJuIDA7CisgICAvKiBPdGhlcndpc2UgaWYgdGhlIHR5cGUgb2YgdGhhdCBtZW1iZXIgaXMgZmxvYXQsIHRoZSB3aG9sZSB0eXBlIGlzCisgICAgICB0cmVhdGVkIGFzIGZsb2F0LiAgKi8KKy0gIGlmIChUWVBFX0NPREUgKFRZUEVfRklFTERfVFlQRSAodHlwZSwgMCkpID09IFRZUEVfQ09ERV9GTFQpCisrICBpZiAoVFlQRV9DT0RFIChjaGVja190eXBlZGVmIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIDApKSkgPT0gVFlQRV9DT0RFX0ZMVCkKKyAgICAgcmV0dXJuIDE7CisgICAvKiBPdGhlcndpc2UgaXQncyBub3QgdHJlYXRlZCBhcyBmbG9hdC4gICovCisgICByZXR1cm4gMDsKK0BAIC0xMDkzLDcgKzEwODAsNyBAQCBzaF9wdXNoX2R1bW15X2NhbGxfZnB1IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyAgICAgIGluIGZvdXIgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gIExvb3AgdGhydSBhcmdzIGZyb20gZmlyc3QgdG8gbGFzdC4gICovCisgICBmb3IgKGFyZ251bSA9IDA7IGFyZ251bSA8IG5hcmdzOyBhcmdudW0rKykKKyAgICAgeworLSAgICAgIHR5cGUgPSB2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pOworKyAgICAgIHR5cGUgPSBjaGVja190eXBlZGVmICh2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pKTsKKyAgICAgICBsZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7CisgICAgICAgdmFsID0gc2hfanVzdGlmeV92YWx1ZV9pbl9yZWcgKGdkYmFyY2gsIGFyZ3NbYXJnbnVtXSwgbGVuKTsKKyAKK0BAIC0xODIxLDcgKzE4MDgsNyBAQCBzaF9kd2FyZjJfZnJhbWVfaW5pdF9yZWcgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtLAorICAgICByZWctPmhvdyA9IERXQVJGMl9GUkFNRV9SRUdfVU5ERUZJTkVEOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQorIHsKKyAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7CitAQCAtMTg0OCw3ICsxODM1LDcgQEAgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCisgICByZXR1cm4gY2FjaGU7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3N0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisgc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyB7CisgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKK0BAIC0xOTE1LDkgKzE5MDIsOSBAQCBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorICAgcmV0dXJuIGNhY2hlOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHZhbHVlICoKKy1zaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKy0JCQl2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkKKytzdHJ1Y3QgdmFsdWUgKgorK3NoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKKysJCQlpbnQgcmVnbnVtKQorIHsKKyAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworICAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9IHNoX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKK0BAIC0xOTMxLDcgKzE5MTgsNyBAQCBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKyAgICAgIHRoZSBjdXJyZW50IGZyYW1lLiAgRnJvYiByZWdudW0gc28gdGhhdCB3ZSBwdWxsIHRoZSB2YWx1ZSBmcm9tCisgICAgICB0aGUgY29ycmVjdCBwbGFjZS4gICovCisgICBpZiAocmVnbnVtID09IGdkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoKSkKKy0gICAgcmVnbnVtID0gUFJfUkVHTlVNOworKyAgICByZWdudW0gPSBQUl9SRUdOVU07IC8qIFhYWDogcmVhbGx5PyAqLworIAorICAgaWYgKHJlZ251bSA8IFNIX05VTV9SRUdTICYmIGNhY2hlLT5zYXZlZF9yZWdzW3JlZ251bV0gIT0gLTEpCisgICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X21lbW9yeSAodGhpc19mcmFtZSwgcmVnbnVtLAorQEAgLTIyMzcsOCArMjIyNCw4IEBAIHNoX3JldHVybl9pbl9maXJzdF9oaWRkZW5fcGFyYW1fcCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgc3RhdGljIHN0cnVjdCBnZGJhcmNoICoKKyBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorIHsKKy0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworICAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcDsKKysgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworIAorICAgLyogU0g1IGlzIGhhbmRsZWQgZW50aXJlbHkgaW4gc2g2NC10ZGVwLmMuICAqLworICAgaWYgKGluZm8uYmZkX2FyY2hfaW5mby0+bWFjaCA9PSBiZmRfbWFjaF9zaDUpCitAQCAtMjI1NCw2ICsyMjQxLDE4IEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgICB0ZGVwID0gWENORVcgKHN0cnVjdCBnZGJhcmNoX3RkZXApOworICAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVwKTsKKyAKKysgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLworKyAgdGRlcC0+Z3JlZ3NldCA9IE5VTEw7CisrICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBOVUxMOworKyAgdGRlcC0+Z3JlZ3NldF9udW1fcmVncyA9IDIzOworKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAwOworKworKyAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKysgIHRkZXAtPmZwcmVnc2V0ID0gTlVMTDsKKysgIHRkZXAtPnNpemVvZl9mcHJlZ3NldCA9IDM0KjQ7CisrCisrICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAtMTsKKysKKyAgIHNldF9nZGJhcmNoX3Nob3J0X2JpdCAoZ2RiYXJjaCwgMiAqIFRBUkdFVF9DSEFSX0JJVCk7CisgICBzZXRfZ2RiYXJjaF9pbnRfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKKyAgIHNldF9nZGJhcmNoX2xvbmdfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKK0BAIC0yNDA0LDEwICsyNDAzLDExIEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKysgIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJzIChnZGJhcmNoKTsKKysKKyAgIC8qIEhvb2sgaW4gQUJJLXNwZWNpZmljIG92ZXJyaWRlcywgaWYgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gICovCisgICBnZGJhcmNoX2luaXRfb3NhYmkgKGluZm8sIGdkYmFyY2gpOworIAorLSAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdkYmFyY2gpOworICAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJnNoX3N0dWJfdW53aW5kKTsKKyAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9mcmFtZV91bndpbmQpOworIAorZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmggYi9nZGIvc2gtdGRlcC5oCitpbmRleCBmYzY3MWE1Li42OTlmNTlmIDEwMDY0NAorLS0tIGEvZ2RiL3NoLXRkZXAuaAorKysrIGIvZ2RiL3NoLXRkZXAuaAorQEAgLTIxLDYgKzIxLDEyIEBACisgCisgLyogQ29udHJpYnV0ZWQgYnkgU3RldmUgQ2hhbWJlcmxhaW4gc2FjQGN5Z251cy5jb20uICAqLworIAorK3N0cnVjdCBmcmFtZV9pbmZvOworK3N0cnVjdCBnZGJhcmNoOworK3N0cnVjdCByZWdncm91cDsKKytzdHJ1Y3QgcmVnc2V0OworK3N0cnVjdCByZWdjYWNoZTsKKysKKyAvKiBSZWdpc3RlcnMgZm9yIGFsbCBTSCB2YXJpYW50cy4gIFVzZWQgYWxzbyBieSBzaDMtcm9tLmMuICAqLworIGVudW0KKyAgIHsKK0BAIC0yOSw2ICszNSw3IEBAIGVudW0KKyAgICAgQVJHMF9SRUdOVU0gPSA0LAorICAgICBBUkdMQVNUX1JFR05VTSA9IDcsCisgICAgIEZQX1JFR05VTSA9IDE0LAorKyAgICBTUF9SRUdOVU0gPSAxNSwKKyAgICAgUENfUkVHTlVNID0gMTYsCisgICAgIFBSX1JFR05VTSA9IDE3LAorICAgICBHQlJfUkVHTlVNID0gMTgsCitAQCAtODEsNiArODgsMjQgQEAgZW51bQorICAgICBGVjBfUkVHTlVNID0gNzYsCisgICAgIEZWX0xBU1RfUkVHTlVNID0gNzkKKyAgIH07CisrI2RlZmluZSBTSF9OVU1fUkVHUyA2NworKworK3N0cnVjdCBzaF9mcmFtZV9jYWNoZQorK3sKKysgIC8qIEJhc2UgYWRkcmVzcy4gICovCisrICBDT1JFX0FERFIgYmFzZTsKKysgIExPTkdFU1Qgc3Bfb2Zmc2V0OworKyAgQ09SRV9BRERSIHBjOworKworKyAgLyogRmxhZyBzaG93aW5nIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBwcm9sb2d1ZSBjb2RlLiAqLworKyAgaW50IHVzZXNfZnA7CisrCisrICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLworKyAgQ09SRV9BRERSIHNhdmVkX3JlZ3NbU0hfTlVNX1JFR1NdOworKyAgQ09SRV9BRERSIHNhdmVkX3NwOworK307CisrCisrZXh0ZXJuIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSk7CisgCisgLyogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcmVnaXN0ZXIgaW4gYSBjb3JlLWZpbGUuICAqLworIHN0cnVjdCBzaF9jb3JlZmlsZV9yZWdtYXAKK0BAIC04OSw4ICsxMTQsMzIgQEAgc3RydWN0IHNoX2NvcmVmaWxlX3JlZ21hcAorICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyB9OworIAorKy8qIHNoIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gICovCisgc3RydWN0IGdkYmFyY2hfdGRlcAorIHsKKysgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLworKyAgc3RydWN0IHJlZ3NldCAqZ3JlZ3NldDsKKysgIGludCAqZ3JlZ3NldF9yZWdfb2Zmc2V0OworKyAgaW50IGdyZWdzZXRfbnVtX3JlZ3M7CisrICBzaXplX3Qgc2l6ZW9mX2dyZWdzZXQ7CisrCisrICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLworKyAgc3RydWN0IHJlZ3NldCAqZnByZWdzZXQ7CisrICBzaXplX3Qgc2l6ZW9mX2ZwcmVnc2V0OworKworKyAgLyogT2Zmc2V0IG9mIHNhdmVkIFBDIGluIGptcF9idWYuICAqLworKyAgaW50IGpiX3BjX29mZnNldDsKKysKKysgIC8qIERldGVjdCBzaWd0cmFtcC4gICovCisrICBpbnQgKCpzaWd0cmFtcF9wKSAoc3RydWN0IGZyYW1lX2luZm8gKik7CisrCisrICAvKiBHZXQgYWRkcmVzcyBvZiBzaWdjb250ZXh0IGZvciBzaWd0cmFtcC4gICovCisrICBDT1JFX0FERFIgKCpzaWdjb250ZXh0X2FkZHIpIChzdHJ1Y3QgZnJhbWVfaW5mbyAqKTsKKysKKysgIC8qIE9mZnNldCBvZiByZWdpc3RlcnMgaW4gYHN0cnVjdCBzaWdjb250ZXh0Jy4gICovCisrICBpbnQgKnNjX3JlZ19vZmZzZXQ7CisrICBpbnQgc2NfbnVtX3JlZ3M7CisrCisgICAvKiBOb24tTlVMTCB3aGVuIGRlYnVnZ2luZyBmcm9tIGEgY29yZSBmaWxlLiAgUHJvdmlkZXMgdGhlIG9mZnNldAorICAgICAgd2hlcmUgZWFjaCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgaXMgc3RvcmVkIGluc2lkZSB0aGUgYXNzb2NpYXRlZAorICAgICAgY29yZSBmaWxlIHNlY3Rpb24uICAqLworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAoraW5kZXggODg1NGFmMC4uZWY0NDY4MiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCitAQCAtMTEzLDYgKzExMywxMSBAQCBzd2l0Y2ggLWdsb2IgLS0gW2lzdGFyZ2V0XSB7CisgICAgICAgICAgICAgYXBwZW5kIGxpbmstZmxhZ3MgIiAtbSBlbGYzMnBwYyIKKyAgICAgICAgIH0KKyAgICAgfQorKyAgICAic2gqLWxpbnV4KiIgeworKyAgICAgICAgc2V0IGFzbS1hcmNoIHNoLWxpbnV4CisrICAgICAgICBzZXQgYXNtLWZsYWdzICItSSR7c3JjZGlyfS8ke3N1YmRpcn0gLUkke29iamRpcn0vJHtzdWJkaXJ9IgorKwlzZXQgZGVidWctZmxhZ3MgIi1nZHdhcmYtMiIKKysgICAgfQorICAgICAic2gqLSotKiIgeworICAgICAgICAgc2V0IGFzbS1hcmNoIHNoCisgCXNldCBkZWJ1Zy1mbGFncyAiLWdkd2FyZi0yIgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCitpbmRleCBhNGE1ZmM1Li44OWVmZWQ3IDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworQEAgLTQwLDkgKzQwLDggQEAKKyAJbW92LmwgICAuTGNvbnN0XEAscjEKKyAJYnJhCS5MYWZ0ZXJjb25zdFxACisgCW5vcAorLQlub3AKKy0uTGNvbnN0XEA6CisgCS5hbGlnbgkyCisrLkxjb25zdFxAOgorIAkubG9uZwlcc3VicgorIAkuYWxpZ24JMQorIC5MYWZ0ZXJjb25zdFxAOgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKK2luZGV4IDQyNGUxYjguLjBkZTJlN2IgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKK0BAIC0xLDYgKzEsOSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorIAorIHZvaWQKKyBoYW5kbGVfVVNSMSAoaW50IHNpZykKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCitpbmRleCA0MjRlMWI4Li45NTJhYWYyIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCitAQCAtMSw2ICsxLDEwIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisrCisgCisgdm9pZAorIGhhbmRsZV9VU1IxIChpbnQgc2lnKQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCitpbmRleCA4MWYzYjA4Li4xNTc0YjJkIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworQEAgLTEsNiArMSw5IEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorIAorIC8qIFNpZ25hbCBoYW5kbGVycywgd2Ugc2V0IGJyZWFrcG9pbnRzIGluIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgc2lnbmFscyByZWFsbHkgZ2V0IGRlbGl2ZXJlZC4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworaW5kZXggNzU2NjA2OC4uMTIwNWE5YiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworQEAgLTMsNiArMywxMCBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZGVmaW5lIGFsYXJtKGEpICAgICAgIC8qIERpdHRvIGZvciBhbGFybSgpICovCisrI2VuZGlmCisgCisgc3RhdGljIGludCBjb3VudCA9IDA7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODU0MzUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNGZlNjdkYmFmYTFiZWU2NzlkYWVjYzEyZWQzMDYyMWQ1YzI2MDVkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFlhbyBRaSA8eWFvQGNvZGVzb3VyY2VyeS5jb20+CitEYXRlOiBNb24sIDExIE1heSAyMDE1IDEwOjU3OjMzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBkZXRlY3Rpb24gb2YgNjQtYml0IFBQQyBpbmZlcmlvciBpbiBnZGJzZXJ2ZXIKKworSXNzdWUgIzE2Nzc1CisKKyogZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYyAocHBjX2FyY2hfc2V0dXApOiBDaGFuZ2UgdmFyaWFibGUgbXNyIHRvIHR5cGUKKyd1bnNpZ25lZCBsb25nJy4gIENoZWNrIGJpdCA2MyBvciBiaXQgMzEgaXMgb25lLgorCitodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1wYXRjaGVzLzIwMTQtMTIvbXNnMDAyMzkuaHRtbAorV3JpdHRlbiBieTogWWFvIFFpIDx5YW9AY29kZXNvdXJjZXJ5LmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIHwgMTEgKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworaW5kZXggNjNkNDIxOC4uYTYyY2YyMiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworQEAgLTM3NCw3ICszNzQsNyBAQCBwcGNfYXJjaF9zZXR1cCAodm9pZCkKKyB7CisgICBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjOworICNpZmRlZiBfX3Bvd2VycGM2NF9fCistICBsb25nIG1zcjsKKysgIHVuc2lnbmVkIGxvbmcgbXNyOworICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZTsKKyAKKyAgIC8qIE9uIGEgNjQtYml0IGhvc3QsIGFzc3VtZSA2NC1iaXQgaW5mZXJpb3IgcHJvY2VzcyB3aXRoIG5vCitAQCAtMzg0LDEzICszODQsMTYgQEAgcHBjX2FyY2hfc2V0dXAgKHZvaWQpCisgICBjdXJyZW50X3Byb2Nlc3MgKCktPnRkZXNjID0gdGRlc2M7CisgICBwcGNfaHdjYXAgPSAwOworIAorLSAgLyogT25seSBpZiB0aGUgaGlnaCBiaXQgb2YgdGhlIE1TUiBpcyBzZXQsIHdlIGFjdHVhbGx5IGhhdmUKKy0gICAgIGEgNjQtYml0IGluZmVyaW9yLiAgKi8KKysgIC8qIFdlIGFjdHVhbGx5IGhhdmUgYSA2NC1iaXQgaW5mZXJpb3Igb25seSBpZiB0aGUgY2VydGFpbiBiaXQgb2YgdGhlCisrICAgICBNU1IgaXMgc2V0LiAgVGhlIFBvd2VySVNBIEJvb2sgSUlJLVMgTVNSIGlzIGRpZmZlcmVudCBmcm9tIHRoZQorKyAgICAgUG93ZXJJU0EgQm9vayBJSUktRSBNU1IuICBUaGUgQm9vayBJSUktUyBNU1IgaXMgNjQgYml0cyB3aWRlLCBhbmQKKysgICAgIGl0cyBNU1JbU0ZdIGlzIHRoZSBiaXQgMCBvZiBhIDY0LWJpdCB2YWx1ZS4gIEJvb2sgSUlJLUUgTVNSIGlzIDMyCisrICAgICBiaXRzIHdpZGUsIGFuZCBpdHMgTVNSW0NNXSBpcyB0aGUgYml0IDAgb2YgYSAzMi1iaXQgdmFsdWUuICAqLworICAgcmVnY2FjaGUgPSBuZXdfcmVnaXN0ZXJfY2FjaGUgKHRkZXNjKTsKKyAgIGZldGNoX2luZmVyaW9yX3JlZ2lzdGVycyAocmVnY2FjaGUsIGZpbmRfcmVnbm8gKHRkZXNjLCAibXNyIikpOworICAgY29sbGVjdF9yZWdpc3Rlcl9ieV9uYW1lIChyZWdjYWNoZSwgIm1zciIsICZtc3IpOworICAgZnJlZV9yZWdpc3Rlcl9jYWNoZSAocmVnY2FjaGUpOworLSAgaWYgKG1zciA8IDApCisrICBpZiAobXNyICYgMHg4MDAwMDAwMDgwMDAwMDAwKQorICAgICB7CisgICAgICAgcHBjX2dldF9od2NhcCAoJnBwY19od2NhcCk7CisgICAgICAgaWYgKHBwY19od2NhcCAmIFBQQ19GRUFUVVJFX0NFTEwpCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy45LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTJlMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgZ2RiLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCisKK2luaGVyaXQgcHl0aG9uLWRpcgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24sLS13aXRob3V0LXB5dGhvbixweXRob24scHl0aG9uIHB5dGhvbi1jb2RlY3MiCitQQUNLQUdFQ09ORklHW2JhYmVsdHJhY2VdID0gIi0td2l0aC1iYWJlbHRyYWNlLC0td2l0aG91dC1iYWJlbHRyYWNlLGJhYmVsdHJhY2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgLW4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24nLCAnJywgZCl9IiBdOyB0aGVuCisJCWNhdCA+ICR7V09SS0RJUn0vcHl0aG9uIDw8IEVPRgorIyEvYmluL3NoCitjYXNlICJcJDIiIGluCisJLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKKwktLWxkZmxhZ3MpIGVjaG8gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfS8uLiAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IiA7OworCS0tZXhlYy1wcmVmaXgpIGVjaG8gIiR7ZXhlY19wcmVmaXh9IiA7OworCSopIGV4aXQgMSA7OworZXNhYworZXhpdCAwCitFT0YKKwkJY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE0YTI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMKQEAgLTAsMCArMSwxMzAgQEAKK1NVTU1BUlkgPSAiRGlzdHJpYnV0ZWQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQtc2NtLmNvbSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gIm9wZW5zc2wgY3VybCB6bGliIGV4cGF0IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnaXQtcmVwbGFjZW1lbnQtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvc2NtL2dpdC9naXQtJHtQVn0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvc2NtL2dpdC9naXQtbWFucGFnZXMtJHtQVn0udGFyLmd6O25hbWU9bWFucGFnZXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQtJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdjMGQ3ZWYwM2E3ZWIwNGNlNzk1YjBmNjBlNjhlN2UxIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBlcmw9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwgXAorCQktLXdpdGhvdXQtdGNsdGsgXAorIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGVybG5hdGl2ZQorCitFWFRSQV9PRU1BS0UgPSAiTk9fUFlUSE9OPTEgQ0ZMQUdTPScke0NGTEFHU30nIExERkxBR1M9JyR7TERGTEFHU30nIgorRVhUUkFfT0VNQUtFICs9ICInUEVSTF9QQVRIPS91c3IvYmluL2VudiBwZXJsJyIKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTPTEiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgcGVybC9wZXJsLm1hayB0byBmaXggdGhlIG91dC1vZi1kYXRlIHBlcmwubWFrIGVycm9yCisJIyBkdXJpbmcgcmVidWlsZAorCXJtIC1mIHBlcmwvcGVybC5tYWsKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9IiR7RH0iIGJpbmRpcj0ke2JpbmRpcn0gXAorCQl0ZW1wbGF0ZV9kaXI9JHtkYXRhZGlyfS9naXQtY29yZS90ZW1wbGF0ZXMgXAorCQlHSVRfUFlUSE9OX0RJUj0ke0R9JHtkYXRhZGlyfS9naXQtY29yZS9weXRob24KKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjUKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjcKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjEgJHtXT1JLRElSfS9tYW4xLyoKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjUgJHtXT1JLRElSfS9tYW41LyoKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjcgJHtXT1JLRElSfS9tYW43LyoKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCAke0R9LyR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL2dpdAorfQorCitwZXJsX25hdGl2ZV9maXh1cCAoKSB7CisJc2VkIC1pIC1lICdzIyR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8jJHtiaW5kaXJ9LyMnIFwKKwkgICAgICAgLWUgJ3MjJHtsaWJkaXJ9L3BlcmwtbmF0aXZlLyMke2xpYmRpcn0vIycgXAorCSAgICAke0BkLmdldFZhcigiUEVSTFRPT0xTIiwgVHJ1ZSkucmVwbGFjZSgnIC8nLGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyAnLycpfQorCisJIyAke2xpYmRpcn0gaXMgbm90IGFwcGxpY2FibGUgaGVyZSwgcGVybC1uYXRpdmUgZmlsZXMgYXJlIGFsd2F5cworCSMgaW5zdGFsbGVkIHRvIC91c3IvbGliIG9uIGJvdGggMzIvNjQgYml0cyB0YXJnZXRzLgorCW12ICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvcGVybC1uYXRpdmUvcGVybCAke0R9JHtsaWJkaXJ9CisJcm1kaXIgLXAgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9wZXJsLW5hdGl2ZSB8fCB0cnVlCit9CisKK1JFTF9HSVRfRVhFQ19QQVRIID0gIiR7QG9zLnBhdGgucmVscGF0aChsaWJleGVjZGlyLCBiaW5kaXIpfS9naXQtY29yZSIKK1JFTF9HSVRfVEVNUExBVEVfRElSID0gIiR7QG9zLnBhdGgucmVscGF0aChkYXRhZGlyLCBiaW5kaXIpfS9naXQtY29yZS90ZW1wbGF0ZXMiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJcGVybF9uYXRpdmVfZml4dXAKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vZ2l0IFwKKwkJR0lUX0VYRUNfUEFUSD0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfRVhFQ19QQVRIfSBcCisJCUdJVF9URU1QTEFURV9ESVI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX1RFTVBMQVRFX0RJUn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vZ2l0IFwKKwkJR0lUX0VYRUNfUEFUSD0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfRVhFQ19QQVRIfSBcCisJCUdJVF9URU1QTEFURV9ESVI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX1RFTVBMQVRFX0RJUn0KKwlwZXJsX25hdGl2ZV9maXh1cAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9naXQtY29yZSAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9naXQtY29yZS8uZGVidWciCisKK1BFUkxUT09MUyA9ICIgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFkZC0taW50ZXJhY3RpdmUgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFyY2hpbXBvcnQgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWN2c2V4cG9ydGNvbW1pdCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtY3ZzaW1wb3J0IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jdnNzZXJ2ZXIgXAorICAgICR7YmluZGlyfS9naXQtY3Zzc2VydmVyIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1kaWZmdG9vbCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtcmVsaW5rIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zZW5kLWVtYWlsIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zdm4gXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWluc3Rhd2ViIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zdWJtb2R1bGUgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFtIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1yZXF1ZXN0LXB1bGwgXAorICAgICR7ZGF0YWRpcn0vZ2l0d2ViL2dpdHdlYi5jZ2kgXAorICAgICR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzL2hvb2tzL3ByZXBhcmUtY29tbWl0LW1zZy5zYW1wbGUgXAorICAgICR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzL2hvb2tzL3ByZS1yZWJhc2Uuc2FtcGxlIFwKKyIKKworIyBCYXNpYyB0YWIgY29tcGxldGlvbiBzdXBwb3J0CitQQUNLQUdFUyA9KyAiJHtQTn0tYmFzaC1jb21wbGV0aW9uIgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zLyoiCisKKyMgR2l0IHRvb2xzIHJlcXVpcmluZyBwZXJsCitQQUNLQUdFUyA9KyAiJHtQTn0tcGVybHRvb2xzIgorRklMRVNfJHtQTn0tcGVybHRvb2xzICs9ICIgXAorICAgICR7UEVSTFRPT0xTfSBcCisgICAgJHtsaWJkaXJ9L3BlcmwgXAorICAgICR7ZGF0YWRpcn0vcGVybCBcCisiCitSREVQRU5EU18ke1BOfS1wZXJsdG9vbHMgPSAiJHtQTn0gcGVybCBwZXJsLW1vZHVsZS1maWxlLXBhdGggZmluZHV0aWxzIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tcHl0aG9uIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qIgorCisKKyMgZ2l0LXRrIHBhY2thZ2Ugd2l0aCBnaXRrIGFuZCBnaXQtZ3VpCitQQUNLQUdFUyA9KyAiJHtQTn0tdGsiCisjUkRFUEVORFNfJHtQTn0tdGsgPSAiJHtQTn0gdGsgdGNsIgorI0VYVFJBX09FTUFLRSA9ICJUQ0xfUEFUSD0ke1NUQUdJTkdfQklORElSX0NST1NTfS90Y2xzaCIKK0ZJTEVTXyR7UE59LXRrID0gIiBcCisgICAgJHtiaW5kaXJ9L2dpdGsgXAorICAgICR7ZGF0YWRpcn0vZ2l0ayBcCisiCisKK1BBQ0tBR0VTID0rICJnaXR3ZWIiCitGSUxFU19naXR3ZWIgPSAiJHtkYXRhZGlyfS9naXR3ZWIvIgorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi41LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjg2YzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ2l0LmluYworCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9bm8gXAorICAgICAgICAgICAgICAgICBhY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz0ke2FjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzPXllc30gXAorICAgICAgICAgICAgICAgICAiCitFWFRSQV9PRU1BS0UgKz0gIk5PX0dFVFRFWFQ9MSIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiM2JjOWIwYTgwM2FlOGVjNmM1MzE2Y2M2NGYwYjdmNzgiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICI4ZmExM2JhODQzNGZmODNkMjRmNTdmODMxZDU1ZGJiOTA0NjQzNGMyNjY2NDExODBhMzc3NDRmYWNmY2U3MmFjIgorU1JDX1VSSVttYW5wYWdlcy5tZDVzdW1dID0gIjEzNGIwNDllNTE0MjBhMzM2MDQ5YWFjMjFjODhhNzVhIgorU1JDX1VSSVttYW5wYWdlcy5zaGEyNTZzdW1dID0gIjc0NWU0ZTc5N2ZlNTA2MWU3ODFjODgwZDM3MGIxYmViNDgwMTk5MTI3ZGE1YWNhZjRlMzc2ZTBiMDlkNGQ2ODUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTQxMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaApAQCAtMCwwICsxLDE3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1BhdGNoIGNvdXJ0ZXN5IGdlbnRvby1wb3J0YWdlL3N5cy1kZXZlbC9nbnVjb25maWcvZmlsZXMvYXV0b21ha2UtMS44LjUtY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaC4KKwordXBkYXRlZCB0byAyMDA1MDUxNiBieSBNYXJjaW4gJ0hydycgSnVzemtpZXdpY3ogKGJ5IGhhbmQpCit1cGRhdGVkIHRvIDIwMDgwMTIzIGJ5IE5pdGluIEEgS2FtYmxlIChieSBoYW5kKQordXBkYXRlZCB0byAyMDExMTAwMSBieSBTYXVsIFdvbGQgKGJ5IGhhbmQpCit1cGRhdGVkIHRvIDIwMTIwODE4IGJ5IE1hcmNpbiAnSHJ3JyBKdXN6a2lld2ljeiAoYnkgaGFuZCkKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW4uanVzemtpZXdpY3pAbGluYXJvLm9yZz4KKworLS0tCisgY29uZmlnLmd1ZXNzIHwgICA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKKworLS0tIGdpdC5vcmlnL2NvbmZpZy5ndWVzcworKysrIGdpdC9jb25maWcuZ3Vlc3MKK0BAIC0xMzgsNiArMTM4LDE5IEBAIFVOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHwKKyBVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorIFVOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorIAorKyMgRGV0ZWN0IHVjbGliYyBzeXN0ZW1zLgorKworK0xJQkM9ImdudSIKKytpZiBbIC1mIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaCBdCisrdGhlbgorKwlMSUJDPXVjbGliYworKwlpZiBbIC1uIGBncmVwICIjZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18iIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaGAgXQorKwl0aGVuCisrCQlVQ0xJQkNfU1VCVkVSPWBzZWQgLW4gIi8jZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18gL3MvLy9wIiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmhgCisrCQlMSUJDPSRMSUJDJFVDTElCQ19TVUJWRVIKKysJZmkKKytmaQorKworICMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKyAKKyBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCitAQCAtODg2LDE1ICs4OTksMTUgQEAgRU9GCisgCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgCWVzYWMKKyAJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCistCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKysJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGFybSo6TGludXg6KjoqKQorIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisgCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKyAJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKyAJdGhlbgorLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWVsc2UKKyAJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisgCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorQEAgLTkwNiwxOSArOTE5LDE5IEBAIEVPRgorIAlmaQorIAlleGl0IDs7CisgICAgIGF2cjMyKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgY3JpczpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgY3Jpc3YzMjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgZnJ2OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBoZXhhZ29uOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBpKjg2OkxpbnV4Oio6KikKKyAJTElCQz1nbnUKK0BAIC05MzIsMTMgKzk0NSwxMyBAQCBFT0YKKyAJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorIAlleGl0IDs7CisgICAgIGlhNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIG0zMnIqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtNjgqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisgCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKK0BAIC05NTcsNTQgKzk3MCw1NCBAQCBFT0YKKyAJI2VuZGlmCisgRU9GCisgCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKy0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKysJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9CisgCTs7CisgICAgIG9yMzI6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhZHJlOkxpbnV4Oio6KikKKy0JZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQorKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCistCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisrCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKyAJIyBMb29rIGZvciBDUFUgbGV2ZWwKKyAJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKy0JICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKKy0JICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKy0JICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKysJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisrCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OworKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKyAJZXNhYworIAlleGl0IDs7CisgICAgIHBwYzY0OkxpbnV4Oio6KikKKy0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgcHBjOkxpbnV4Oio6KikKKy0JZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisrCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKyAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAorIAlleGl0IDs7CisgICAgIHNoNjQqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzaCo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHRpbGUqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB2YXg6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB4ODZfNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHh0ZW5zYSo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisgCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvZ251LWNvbmZpZ2l6ZS5pbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9nbnUtY29uZmlnaXplLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0OTA4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvZ251LWNvbmZpZ2l6ZS5pbgpAQCAtMCwwICsxLDI2NyBAQAorIyEgL3Vzci9iaW4vZW52IHBlcmwKKyMgLSotIHBlcmwgLSotCisKK2V2YWwgJ2Nhc2UgJCMgaW4gMCkgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCI7OyAqKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIiAiJEAiOzsgZXNhYycKKyAgICBpZiAwOworCisjIGdudS1jb25maWdpemUgLSBpbnN0YWxsIHRoZSBHTlUgY29uZmlnLmd1ZXNzIC8gY29uZmlnLnN1YiBpbiBhIGRpcmVjdG9yeSB0cmVlCisjIEJhc2VkIG9uIGF1dG9yZWNvbmY6CisjICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3LCBVU0EuCisKK0JFR0lOCit7CisgIG15ICRkYXRhZGlyID0gJEVOVnsnYXV0b200dGVfcGVybGxpYmRpcid9IHx8ICdAYXV0b200dGVfcGVybGxpYmRpckAnOworIyAgJy9ob21lL2tlcmdvdGgvY29kZS9idWlsZC1hcm0vdG1wL3N0YWdpbmcvc2hhcmUvYXV0b2NvbmYnOworICB1bnNoaWZ0IEBJTkMsICRkYXRhZGlyOworCisgICMgT3ZlcnJpZGUgU0hFTEwuICBPbiBESkdQUCBTSEVMTCBtYXkgbm90IGJlIHNldCB0byBhIHNoZWxsCisgICMgdGhhdCBjYW4gaGFuZGxlIHJlZGlyZWN0aW9uIGFuZCBxdW90ZSBhcmd1bWVudHMgY29ycmVjdGx5LAorICAjIGUuZy46IENPTU1BTkQuQ09NLiAgRm9yIERKR1BQIGFsd2F5cyB1c2UgdGhlIHNoZWxsIHRoYXQgY29uZmlndXJlCisgICMgaGFzIGRldGVjdGVkLgorICAkRU5WeydTSEVMTCd9ID0gJy9iaW4vc2gnIGlmICgkXk8gZXEgJ2RvcycpOworfQorCit1c2UgQXV0b200dGU6OkNoYW5uZWxEZWZzOwordXNlIEF1dG9tNHRlOjpDaGFubmVsczsKK3VzZSBBdXRvbTR0ZTo6Q29uZmlndXJlX2FjOwordXNlIEF1dG9tNHRlOjpGaWxlVXRpbHM7Cit1c2UgQXV0b200dGU6OkdlbmVyYWw7Cit1c2UgQXV0b200dGU6OlhGaWxlOworIyBEbyBub3QgdXNlIEN3ZDo6Y2hkaXIsIHNpbmNlIGl0IG1pZ2h0IGhhbmcuCit1c2UgQ3dkICdjd2QnOwordXNlIHN0cmljdDsKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIFZhcmlhYmxlcy4gICMjCisjIyAtLS0tLS0tLS0tLSAjIworCisjICRIRUxQCisjIC0tLS0tCiskaGVscCA9ICJVc2FnZTogJDAgW09QVElPTl0gLi4uIFtDT05GSUdVUkUtQUMgb3IgRElSRUNUT1JZXSAuLi4KKworSW5zdGFsbCB0aGUgR05VIGNvbmZpZy5zdWIgYW5kIGNvbmZpZy5ndWVzcyBzY3JpcHRzIGluIHRoZQorRElSRUNUT1JJRVMgb3IgdGhlIGRpcmVjdG9yeSB0cmVlcyBkcml2ZW4gYnkgQ09ORklHVVJFLUFDCisoZGVmYXVsdGluZyB0byBgLicpLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgIC1mLCAtLWZvcmNlICAgICAgICAgICAgICBjb25zaWRlciBhbGwgZmlsZXMgb2Jzb2xldGUKKyAgLXMsIC0tc3ltbGluayAgICAgICAgICAgIGluc3RhbGwgc3ltYm9saWMgbGlua3MgaW5zdGVhZCBvZiBjb3BpZXMKKyAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbc3ludGF4XQorCisiIC4gQXV0b200dGU6OkNoYW5uZWxEZWZzOjp1c2FnZSAuICIKKworVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxgV0FSTklOR1NcJyBpcyBob25vcmVkLiAgU29tZSBzdWJ0b29scyBtaWdodAorc3VwcG9ydCBvdGhlciB3YXJuaW5nIHR5cGVzLCB1c2luZyBcYGFsbCcgaXMgZW5jb3VyYWdlZC4KKyI7CisKKyMgJFZFUlNJT04KKyMgLS0tLS0tLS0KKyR2ZXJzaW9uID0gImdudS1jb25maWdpemUgMS4wCisKK0NvcHlyaWdodCAoQykgMjAwNCBDaHJpcyBMYXJzb24KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyI7CisKK215ICRjb25maWdkaXIgID0gJ0BnbnUtY29uZmlnZGlyQCc7CisjJy9ob21lL2tlcmdvdGgvY29kZS9idWlsZC1hcm0vdG1wL3N0YWdpbmcvaTY4Ni1saW51eC9zaGFyZS9nbnUtY29uZmlnJzsKK215ICRhdXRvY29uZiAgID0gJEVOVnsnQVVUT0NPTkYnfSAgICAgfHwgJ2F1dG9jb25mJzsKKworIyB1c2Ugc3ltbGlua3MgaW5zdGVhZC4KK215ICRzeW1saW5rID0gMDsKKworbXkgJGNvbmZpZ3VyZV9hYzsKKworbXkgJHJtID0gInJtIC1mIjsKK215ICRsbl9zID0gImxuIC1zZiI7CitteSAkY3AgPSAiY3AgLWYiOworbXkgJG1rZGlyID0gIm1rZGlyIjsKK215ICRjaG1vZCA9ICJjaG1vZCI7CisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIFJvdXRpbmVzLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworCisjIHBhcnNlX2FyZ3MgKCkKKyMgLS0tLS0tLS0tLS0tLQorIyBQcm9jZXNzIGFueSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorc3ViIHBhcnNlX2FyZ3MgKCkKK3sKKyAgbXkgJHNyY2RpcjsKKworICBnZXRvcHQgKCdzfHN5bWxpbmsnICAgICAgICAgICAgPT4gXCRzeW1saW5rKTsKKworICAjIEV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY29uZmlndXJlLmFjLCB0cmltIHRvIGdldCB0aGUKKyAgIyBkaXJlY3RvcnksIGFuZCBsb29rIGZvciBjb25maWd1cmUuYWMgYWdhaW4uICBCZWNhdXNlIChpKSB0aGUgY29kZQorICAjIGlzIHNpbXBsZXIsIGFuZCAoaWkpIHdlIGFyZSBzdGlsbCBhYmxlIHRvIGRpYWdub3NlIHNpbXVsdGFuZW91cworICAjIHByZXNlbmNlIG9mIGNvbmZpZ3VyZS5hYyBhbmQgY29uZmlndXJlLmluLgorICBAQVJHViA9IG1hcCB7IC9jb25maWd1cmVcLihhY3xpbikkLyA/IGRpcm5hbWUgKCRfKSA6ICRfIH0gQEFSR1Y7CisgIHB1c2ggQEFSR1YsICcuJyB1bmxlc3MgQEFSR1Y7Cit9CisKKworIyAmZ251X2NvbmZpZ2l6ZV9jdXJyZW50X2RpcmVjdG9yeQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3RvcnkgKCkKK3sKKyAgbXkgJGNvbmZpZ3VyZV9hYyA9IHJlcXVpcmVfY29uZmlndXJlX2FjOworCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICMgSXMgaXQgdXNpbmcgQXV0b2NvbmY/ICAjCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgbXkgJHVzZXNfYXV0b2NvbmY7CisgIG15ICR1c2VzX2dldHRleHQ7CisgIG15ICRjb25maWd1cmVfYWNfZmlsZSA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgJGNvbmZpZ3VyZV9hYzsKKyAgd2hpbGUgKCRfID0gJGNvbmZpZ3VyZV9hY19maWxlLT5nZXRsaW5lKQorICAgICB7CisgICAgICAgcy8jLiovLzsKKyAgICAgICBzL2RubC4qLy87CisgICAgICAgJHVzZXNfYXV0b2NvbmYgPSAxIGlmIC9BQ19JTklULzsKKyAgICAgfQorCisgIGlmICghJHVzZXNfYXV0b2NvbmYpCisgICAgeworICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogbm90IHVzaW5nIEF1dG9jb25mIjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbXkgJGF1eF9kaXI7CisgIG15IEBzdWJkaXI7CisgIG15ICRjbWQ7CisgIG15ICRkZXN0OworCisgIHZlcmIgIiRjb25maWd1cmVfYWM6IHRyYWNpbmciOworICBteSAkdHJhY2VzID0gbmV3IEF1dG9tNHRlOjpYRmlsZQorICAgICgiJGF1dG9jb25mIgorICAgICAuIGpvaW4gKCcgLS10cmFjZT0nLCAnJywKKwkgICAgICMgSWYgeW91IGNoYW5nZSB0aGlzIGxpc3QsIHVwZGF0ZSB0aGUKKwkgICAgICMgYEF1dG9yZWNvbmYtcHJlc2VsZWN0aW9ucycgc2VjdGlvbiBvZiBhdXRvbTR0ZS5pbi4KKwkgICAgICdBQ19DT05GSUdfQVVYX0RJUjpBQ19DT05GSUdfQVVYX0RJUjpcJDEnLAorCSAgICAgJ0FDX0NPTkZJR19TVUJESVJTOkFDX0NPTkZJR19TVUJESVJTOlwkMScsCisJICAgICAnQUNfSU5JVCcsCisJICAgICkKKyAgICAgLiAnIHwnKTsKKyAgd2hpbGUgKCRfID0gJHRyYWNlcy0+Z2V0bGluZSkKKyAgICB7CisgICAgICAkYXV4X2RpciA9ICQxICAgICAgICAgICAgICAgICBpZiAvQUNfQ09ORklHX0FVWF9ESVI6KC4qKS87CisgICAgICAkdXNlc19hdXRvY29uZiA9IDEgICAgICAgICAgICBpZiAvQUNfSU5JVC87CisgICAgICBwdXNoIEBzdWJkaXIsIHNwbGl0ICgnICcsICQxKSBpZiAvQUNfQ09ORklHX1NVQkRJUlM6KC4qKS87CisgICAgfQorCisgICMgVGhlIHN1YmRpcnMgYXJlICpvcHRpb25hbCosIHRoZXkgbWF5IG5vdCBleGlzdC4KKyAgZm9yZWFjaCAoQHN1YmRpcikKKyAgICB7CisgICAgICBpZiAoLWQpCisJeworCSAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogc3ViZGlyZWN0b3J5ICRfIHRvIGdudS1jb25maWdpemUiOworCSAgZ251X2NvbmZpZ2l6ZSAoJF8pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB2ZXJiICIkY29uZmlndXJlX2FjOiBzdWJkaXJlY3RvcnkgJF8gbm90IHByZXNlbnQiOworCX0KKyAgICB9CisKKyAgJGRlc3QgPSAiLiI7CisKKyAgaWYgKGRlZmluZWQgJGF1eF9kaXIpCisgICAgeworICAgICAgJGRlc3QgPSAkYXV4X2RpcjsKKyAgICAgIGlmICghIC1kICRhdXhfZGlyKQorICAgICAgICB7CisgICAgICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogY3JlYXRpbmcgZGlyZWN0b3J5ICRhdXhfZGlyIjsKKyAgICAgICAgICBta2RpciAkYXV4X2RpcgorICAgICAgICAgICAgb3IgZXJyb3IgImNhbm5vdCBjcmVhdGUgJGF1eF9kaXI6ICQhIjsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoISRzeW1saW5rKQorICAgIHsKKyAgICAgICRjbWQgPSAkY3A7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJGNtZCA9ICRsbl9zOworICAgIH0KKworICB4c3lzdGVtICgiJGNtZCAkY29uZmlnZGlyL2NvbmZpZy5ndWVzcyAkZGVzdC8iKTsKKyAgeHN5c3RlbSAoIiRjaG1vZCB1K3ggJGRlc3QvY29uZmlnLmd1ZXNzIik7CisgIHhzeXN0ZW0gKCIkY21kICRjb25maWdkaXIvY29uZmlnLnN1YiAkZGVzdC8iKTsKKyAgeHN5c3RlbSAoIiRjaG1vZCB1K3ggJGRlc3QvY29uZmlnLnN1YiIpOworfQorCisKKyMgJmdudV9jb25maWdpemUgKCRESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWNvbmYgdGhlICRESVJFQ1RPUlkuCitzdWIgZ251X2NvbmZpZ2l6ZSAoJCkKK3sKKyAgbXkgKCRkaXJlY3RvcnkpID0gQF87CisgIG15ICRjd2QgPSBjd2Q7CisKKyAgIyBUaGUgZm9ybWF0IGZvciB0aGlzIG1lc3NhZ2UgaXMgbm90IGZyZWU6IHRha2VuIGZyb20gRW1hY3MsIGl0c2VsZgorICAjIHVzaW5nIEdOVSBNYWtlJ3MgZm9ybWF0LgorICB2ZXJiICJFbnRlcmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGRpcmVjdG9yeQorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGRpcmVjdG9yeTogJCEiOworCisgIGdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3Rvcnk7CisKKyAgIyBUaGUgZm9ybWF0IGlzIG5vdCBmcmVlOiB0YWtlbiBmcm9tIEVtYWNzLCBpdHNlbGYgdXNpbmcgR05VIE1ha2UncworICAjIGZvcm1hdC4KKyAgdmVyYiAiTGVhdmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGN3ZAorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGN3ZDogJCEiOworfQorCisKKyMjIC0tLS0tLSAjIworIyMgTWFpbi4gICMjCisjIyAtLS0tLS0gIyMKKworcGFyc2VfYXJnczsKKworIyBBdXRvcmVjb25mIGFsbCB0aGUgZ2l2ZW4gY29uZmlndXJlLmFjLiAgQSB3aGlsZSBsb29wLCBub3QgYSBmb3IsCisjIHNpbmNlIHRoZSBsaXN0IGNhbiBjaGFuZ2UgYXQgcnVudGltZSBiZWNhdXNlIG9mIEFDX0NPTkZJR19TVUJESVJTLgorZm9yIG15ICRkaXJlY3RvcnkgKEBBUkdWKQorICB7CisgICAgZ251X2NvbmZpZ2l6ZSAoJGRpcmVjdG9yeSk7CisgIH0KKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL211c2wtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0NzQzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorc3VwcG9ydCBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdudS1jb25maWctMjAxMjA4MTQvY29uZmlnLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1jb25maWctMjAxMjA4MTQub3JpZy9jb25maWcuc3ViCTIwMTItMDktMTggMDI6Mjc6NDUuMDAwMDAwMDAwIC0wNzAwCisrKysgZ251LWNvbmZpZy0yMDEyMDgxNC9jb25maWcuc3ViCTIwMTQtMDMtMjYgMDA6MzQ6MTkuOTU1OTk2NzA5IC0wNzAwCitAQCAtMTIzLDYgKzEyMyw3IEBACisgbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCisgY2FzZSAkbWF5YmVfb3MgaW4KKyAgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgXAorKyAgbGludXgtbXVzbCogfCBcCisgICBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorQEAgLTEzNjUsNiArMTM2Niw3IEBACisgCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKyAJICAgICAgfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisgCSAgICAgIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisrCSAgICAgIHwgLWxpbnV4LW11c2wqIFwKKyAJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorIAkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy91Y2xpYmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmUxMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uZmlnLnN1Yi5vcmlnCTIwMDQtMDUtMTQgMTk6Mzg6MzYuMDAwMDAwMDAwIC0wNTAwCisrKysgY29uZmlnLnN1YgkyMDA0LTA1LTE0IDE5OjM5OjE3LjAwMDAwMDAwMCAtMDUwMAorQEAgLTExOCw3ICsxMTgsNyBAQAorICMgSGVyZSB3ZSBtdXN0IHJlY29nbml6ZSBhbGwgdGhlIHZhbGlkIEtFUk5FTC1PUyBjb21iaW5hdGlvbnMuCisgbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCisgY2FzZSAkbWF5YmVfb3MgaW4KKy0gIG50by1xbngqIHwgbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtdWNsaWJjKiB8IGZyZWVic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgIG9zPS0kbWF5YmVfb3MKKyAgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICAgOzsKK0BAIC0xMTM1LDcgKzExMzUsOCBAQAorIAkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKyAJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorIAkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCistCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LXVjbGliYyogXAorKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisgCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisgCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorIAkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjdlNDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiZ251LWNvbmZpZ2l6ZSIKK0RFU0NSSVBUSU9OID0gIlRvb2wgdGhhdCBpbnN0YWxscyB0aGUgR05VIGNvbmZpZy5ndWVzcyAvIGNvbmZpZy5zdWIgaW50byBhIGRpcmVjdG9yeSB0cmVlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jb25maWcuZ3Vlc3M7ZW5kbGluZT0zOTttZDU9Yjc5YTQ2NjM0NzVmNGQ3MjQ4NDY0NjMyNzc4MTdlMGQiCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvZ251LWNvbmZpZy9nbnUtY29uZmlnLSR7UFZ9LnRhci5iejIgXAorCSAgIGZpbGU6Ly9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoIFwKKwkgICBmaWxlOi8vbXVzbC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudS1jb25maWdpemUuaW4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiY2ZjYTVhMmJiMzllZGFkNGFhZTVhNjVlZmM4NDA5NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NGY5OWE4ZTc2ZjNlOGU0ZmVjMGJiNWFkNDc2MmY4ZTQ0MzY2MTY4NTU0Y2U2NmNiODVhZmJlMmVkM2VmZDhiIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnIFwKKwkJICAgJHtEfSR7YmluZGlyfQorCWNhdCAke1dPUktESVJ9L2dudS1jb25maWdpemUuaW4gfCBcCisJCXNlZCAtZSAncyxAZ251LWNvbmZpZ2RpckAsJHtkYXRhZGlyfS9nbnUtY29uZmlnLGcnIFwKKwkJICAgIC1lICdzLEBhdXRvbTR0ZV9wZXJsbGliZGlyQCwke2RhdGFkaXJ9L2F1dG9jb25mLGcnID4gJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJIyBJbiB0aGUgbmF0aXZlIGNhc2Ugd2Ugd2FudCB0aGUgc3lzdGVtIHBlcmwgYXMgcGVybC1uYXRpdmUgY2FuJ3QgaGF2ZSBidWlsdCB5ZXQKKwlpZiBbICIke1BOfSIgIT0gImdudS1jb25maWctbmF0aXZlIiAtYSAiJHtQTn0iICE9ICJuYXRpdmVzZGstZ251LWNvbmZpZyIgXTsgdGhlbgorCQlzZWQgLWkgLWUgJ3MsL3Vzci9iaW4vZW52LCR7YmluZGlyfS9lbnYsZycgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJZmkKKwljaG1vZCA3NTUgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJaW5zdGFsbCAtbSAwNjQ0IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViICR7RH0ke2RhdGFkaXJ9L2dudS1jb25maWcvCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vZ251LWNvbmZpZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1ZjJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJnbnUtY29uZmlnaXplIgorREVTQ1JJUFRJT04gPSAiVG9vbCB0aGF0IGluc3RhbGxzIHRoZSBHTlUgY29uZmlnLmd1ZXNzIC8gY29uZmlnLnN1YiBpbnRvIGEgZGlyZWN0b3J5IHRyZWUiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29uZmlnLmd1ZXNzO2JlZ2lubGluZT03O2VuZGxpbmU9Mjc7bWQ1PTliYWM4YjE3NDNjMjI0MGFlMDdjY2U2ZTU0NmFjMmYyIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitTUkNSRVYgPSAiYjU3NmZhODdjMTQwYjgyNDQ2NmVmMTYzOGU5NDVlODdkYzVjMDM0MyIKK1BWID0gIjIwMTUwNzI4K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5zdi5nbnUub3JnL2NvbmZpZy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZ251LWNvbmZpZ2l6ZS5pbiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZyBcCisJCSAgICR7RH0ke2JpbmRpcn0KKwljYXQgJHtXT1JLRElSfS9nbnUtY29uZmlnaXplLmluIHwgXAorCQlzZWQgLWUgJ3MsQGdudS1jb25maWdkaXJALCR7ZGF0YWRpcn0vZ251LWNvbmZpZyxnJyBcCisJCSAgICAtZSAncyxAYXV0b200dGVfcGVybGxpYmRpckAsJHtkYXRhZGlyfS9hdXRvY29uZixnJyA+ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCSMgSW4gdGhlIG5hdGl2ZSBjYXNlIHdlIHdhbnQgdGhlIHN5c3RlbSBwZXJsIGFzIHBlcmwtbmF0aXZlIGNhbid0IGhhdmUgYnVpbHQgeWV0CisJaWYgWyAiJHtQTn0iICE9ICJnbnUtY29uZmlnLW5hdGl2ZSIgLWEgIiR7UE59IiAhPSAibmF0aXZlc2RrLWdudS1jb25maWciIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzLC91c3IvYmluL2Vudiwke2JpbmRpcn0vZW52LGcnICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWZpCisJY2htb2QgNzU1ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWluc3RhbGwgLW0gMDY0NCBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnLworfQorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L2dudS1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9hYXJjaDY0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2FhcmNoNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ODhiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9hYXJjaDY0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2d1aWxlOiBhZGQgYWFyY2g2NCByZWNvZ25pdGlvbgorCitBc3N1bWUgbGl0dGxlLWVuZGlhbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbQorCistLS0gYS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQorKysrIGIvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KK0BAIC03MCw2ICs3MCw4IEBACisgICAgICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAic3BhcmM2NCIgInBvd2VycGMiICJwb3dlcnBjNjQiICJzcHUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiICJtaXBzNjQiKSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFhcmNoNjQiIGNwdSkKKysgICAgICAgICAgICAgKGVuZGlhbm5lc3MgbGl0dGxlKSkKKyAgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWIiIGNwdSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKyAgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qIiBjcHUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fZW5kaWFubmVzcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9lbmRpYW5uZXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDMyOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fZW5kaWFubmVzcy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTdXBwb3J0IGZvcm0gQVJNIGVuZGlhbm5lc3MKKworRml4ZXMgWW9jdG8gYnVnIyAyNzI5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3VpbGUtMi4wLjUvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuNS5vcmlnL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCTIwMTItMDEtMjQgMDM6MDY6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgZ3VpbGUtMi4wLjUvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20JMjAxMi0wNy0xMiAxMzowNTo0NC4zNzIzNjQxMDMgLTA3MDAKK0BAIC03MCw3ICs3MCw5IEBACisgICAgICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAic3BhcmM2NCIgInBvd2VycGMiICJwb3dlcnBjNjQiICJzcHUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiICJtaXBzNjQiKSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKy0gICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWwiIGNwdSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWIiIGNwdSkKKysgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qIiBjcHUpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGxpdHRsZSkpCisgICAgICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgICAgKGVycm9yICJ1bmtub3duIENQVSBlbmRpYW5uZXNzIiBjcHUpKSkpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyMzhhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0Zyb20gZTUyYmZjZGJhY2E1ZGNlNDk4Njc4ZDhmNTEyMzgxZTNlMzlhNDA2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+CitEYXRlOiBTdW4sIDE4IE1hciAyMDEyIDExOjQwOjU1IC0wNTAwCitTdWJqZWN0OiBNYXJrICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIgZ2MgdGVzdCBhcyB1bnJlc29sdmVkLgorCitBcyBwZXIgZGlzY3Vzc2lvbiB3aXRoIHVwc3RyZWFtLCBtYXJrIHRoaXMgdGVzdCBhcyB1bnJlc29sdmVkIHNpbmNlIGl0CittYXkgcHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3IvdGltaW5nIG9mIHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCistLS0KKyB0ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgfCAgIDExICsrKysrKy0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKK2luZGV4IGE5Njk3NTIuLjhjOGUxM2UgMTAwNjQ0CistLS0gYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKKysrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAorQEAgLTg0LDExICs4NCwxMyBAQAorICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgorIAorICAgICAgIChtYXliZS1nYy1mbGFraW5lc3MKKy0gICAgICAgKD0gKGxldCBscCAoKGkgMCkpCistICAgICAgICAgICAgKGlmIChndWFyZCkKKy0gICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKy0gICAgICAgICAgICAgICAgaSkpCistICAgICAgICAgIHRvdGFsKSkpKQorKyAgICAgICAob3IgKD0gKGxldCBscCAoKGkgMCkpCisrICAgICAgICAgICAgICAgIChpZiAoZ3VhcmQpCisrICAgICAgICAgICAgICAgICAgICAobHAgKDErIGkpKQorKyAgICAgICAgICAgICAgICAgICAgaSkpCisrICAgICAgICAgICAgICB0b3RhbCkKKysgICAgICAgICAgICh0aHJvdyAndW5yZXNvbHZlZCkpKSkpCisrCisgCisgICAocGFzcy1pZiAiTGV4aWNhbCB2YXJzIGFyZSBjb2xsZWN0YWJsZSIKKyAgICAgKGxldCAoKGwgKGNvbXBpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YmUzYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitGcm9tIDg0ODU0MzA5MWQ1NWRkZGI1NGE4NTYxMjE1NTk2NDUwNmQ3MTI4NTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPgorRGF0ZTogU3VuLCAxOCBNYXIgMjAxMiAxMzoyODoyNCAtMDUwMAorU3ViamVjdDogTWFyayAibXV0ZXggd2l0aCBvd25lciBub3QgcmV0YWluZWQiIHRocmVhZHMgdGVzdCBhcyB1bnJlc29sdmVkLgorCitBcyBwZXIgZGlzY3Vzc2lvbiB3aXRoIHVwc3RyZWFtLCBtYXJrIHRoaXMgdGVzdCBhcyB1bnJlc29sdmVkIHNpbmNlIGl0CittYXkgcHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3IvdGltaW5nIG9mIHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCistLS0KKyB0ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdCB8ICAgIDYgKysrKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdCBiL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CitpbmRleCA4NWE3YzM4Li41MDg5OWNiIDEwMDY0NAorLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QKKysrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CitAQCAtNDE0LDggKzQxNCwxMCBAQAorIAorICAgICAgICAgICAgIChnYykgKGdjKQorICAgICAgICAgICAgIChsZXQgKChtIChnKSkpCistICAgICAgICAgICAgICAoYW5kIChtdXRleD8gbSkKKy0gICAgICAgICAgICAgICAgICAgKGVxPyAobXV0ZXgtb3duZXIgbSkgKGN1cnJlbnQtdGhyZWFkKSkpKSkpKQorKyAgICAgICAgICAgICAgKG9yCisrICAgICAgICAgICAgICAgKGFuZCAobXV0ZXg/IG0pCisrICAgICAgICAgICAgICAgICAgICAoZXE/IChtdXRleC1vd25lciBtKSAoY3VycmVudC10aHJlYWQpKSkKKysgICAgICAgICAgICAgICAodGhyb3cgJ3VucmVzb2x2ZWQpKSkpKSkKKyAKKyAgICAgICA7OworICAgICAgIDs7IG11dGV4IGxvY2sgbGV2ZWxzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWRjMjI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBmaXhlcyBzZWQgaXNzdWUgd2hlbiBwcmVmaXggaGFzIC8gaW4gaXQsIGxpa2UgL3Vzci9sb2NhbAorCithdXRvcmVjb25mIGVycm9yIGF2b2lkZWQ6Cit8IHNlZDogLWUgZXhwcmVzc2lvbiAjMSwgY2hhciA5OiB1bmtub3duIG9wdGlvbiB0byBgcycKK3wgY29uZmlndXJlLmFjOjM5OiBlcnJvcjogQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHMKKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDEKKworSW5kZXg6IGd1aWxlLTIuMC41L2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuNS5vcmlnL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKysrKyBndWlsZS0yLjAuNS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCitAQCAtMTg3LDcgKzE4Nyw3IEBAIGVsc2UKKyAgICAgdj1VTktOT1dOCisgZmkKKyAKKy12PWBlY2hvICIkdiIgfHNlZCAicy9eJHByZWZpeC8vImAKKyt2PWBlY2hvICIkdiIgfHNlZCAicyNeJHByZWZpeCMjImAKKyAKKyAjIFRlc3Qgd2hldGhlciB0byBhcHBlbmQgdGhlICItZGlydHkiIHN1ZmZpeCBvbmx5IGlmIHRoZSB2ZXJzaW9uCisgIyBzdHJpbmcgd2UncmUgdXNpbmcgY2FtZSBmcm9tIGdpdC4gIEkuZS4sIHNraXAgdGhlIHRlc3QgaWYgaXQncyAiVU5LTk9XTiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGI5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gOWM0ZTEyMGE3YTg3ZGIzNGQyMmE1MDg4M2E1YTUyNTE3MGI0ODBkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA2IEphbiAyMDE1IDIzOjEwOjUxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmd1aWxlL01ha2VmaWxlLmFtOiBpbnN0YWxsLWRhdGEtaG9vayAtPiBpbnN0YWxsLWV4ZWMtaG9vaworCitJdCBtYXkgaW5zdGFsbCBzdWNoIGEgZmlsZToKKy91c3IvbGliNjQvbGliZ3VpbGUtMi4wKi1nZGIuc2NtCisKK1RoaXMgaXMgYmVjYXVzZSB3aGVuIHRoZXJlIGlzIG5vIGZpbGUgaW4gdGhlIGRpcmVjdG9yeToKK2ZvciBmIGluIGxpYmd1aWxlLTIuMCo7IGRvCisgICAgW3NuaXBdCitkb25lCisKK1RoZSBmIHdvdWxkIGJlIGxpYmd1aWxlLTIuMCogaXRzZWxmLCB1c2UgaW5zdGFsbC1leGVjLWhvb2sgd2lsbCBmaXggdGhlCitwcm9ibGVtIHNpbmNlIGl0IGRlcGVuZHMgb24gaW5zdGFsbC1saWJMVExJQlJBUklFUy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvTWFrZWZpbGUuYW0gfCAgICA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS9NYWtlZmlsZS5hbSBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCitpbmRleCA1ZGVjZDk5Li41MjY0NWI3IDEwMDY0NAorLS0tIGEvbGliZ3VpbGUvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCitAQCAtNDQ2LDEwICs0NDYsOCBAQCBFWFRSQV9saWJndWlsZV9AR1VJTEVfRUZGRUNUSVZFX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBfc2NtLmgJCVwKKyAjIyBkZWxldGUgZ3VpbGUtc25hcmYuYXdrIGZyb20gdGhlIGluc3RhbGxhdGlvbiBiaW5kaXIsIGluIGNhc2UgaXQncworICMjIGxpbmdlcmluZyB0aGVyZSBkdWUgdG8gYW4gZWFybGllciBndWlsZSB2ZXJzaW9uIG5vdCBoYXZpbmcgYmVlbgorICMjIHdpcGVkIG91dC4KKy1pbnN0YWxsLWV4ZWMtaG9vazoKKytpbnN0YWxsLWV4ZWMtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KKyAJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS9ndWlsZS1zbmFyZi5hd2sKKy0KKy1pbnN0YWxsLWRhdGEtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KKyAJQCQoTUtESVJfUCkgJChERVNURElSKSQobGliZGlyKQorICMjIFdlIHdhbnQgdG8gaW5zdGFsbCBsaWJndWlsZS0yLjAtZ2RiLnNjbSBhcyBTT01FVEhJTkctZ2RiLnNjbS4KKyAjIyBTT01FVEhJTkcgaXMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZmluYWwgbGlicmFyeS4gIFdlIHdhbnQgdG8gaWdub3JlCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAwNTlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSBhODVjNzhlYTEzOTM5ODVmZGI2ZTY2NzhkZWExOTEzNWM1NTNkMzQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+CitEYXRlOiBGcmksIDE5IFNlcCAyMDE0IDIxOjE4OjA5IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIFZNOiBBU01fTVVMIGZvciBBUk06IEFkZCBlYXJseWNsb2JiZXIgY29uc3RyYWludCB0byB0aGUgU01VTEwKKyBvdXRwdXRzLgorCitSZXBvcnRlZCBieSBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPi4KKworKiBsaWJndWlsZS92bS1pLXNjaGVtZS5jIChBU01fTVVMKVtBUk1dOiBBZGQgZWFybHljbG9iYmVyICgmKSBjb25zdHJhaW50CisgIHRvIHRoZSBTTVVMTCBvdXRwdXQgcmVnaXN0ZXJzLgorCitBdXRob3I6IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJndWlsZS92bS1pLXNjaGVtZS5jIHwgNSArKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS92bS1pLXNjaGVtZS5jIGIvbGliZ3VpbGUvdm0taS1zY2hlbWUuYworaW5kZXggNTg3YWE5NS4uMTYyZWZhYiAxMDA2NDQKKy0tLSBhL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKKysrKyBiL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKK0BAIC0xLDUgKzEsNCBAQAorLS8qIENvcHlyaWdodCAoQykgMjAwMSwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywKKy0gKiAgIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICogCisgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorQEAgLTM2Myw3ICszNjIsNyBAQCBWTV9ERUZJTkVfRlVOQ1RJT04gKDE0OSwgZ2UsICJnZT8iLCAyKQorICAgICAgIHsJCQkJCQkJCQlcCisgCXNjbV90X3NpZ25lZF9iaXRzIHJsbywgcmhpOwkJCQkJXAorIAlhc20gKCJzbXVsbCAlMCwgJTEsICUyLCAlM1xuIgkJCQkJXAorLQkgICAgIDogIj1yIiAocmxvKSwgIj1yIiAocmhpKQkJCQkJXAorKwkgICAgIDogIj0mciIgKHJsbyksICI9JnIiIChyaGkpCQkJCQlcCisgCSAgICAgOiAiciIgKFNDTV9VTlBBQ0sgKHgpIC0gc2NtX3RjMl9pbnQpLAkJCVwKKyAJICAgICAgICJyIiAoU0NNX0lfSU5VTSAoeSkpKTsJCQkJCVwKKyAJaWYgKFNDTV9MSUtFTFkgKFNDTV9TUlMgKHJsbywgMzEpID09IHJoaSkpCQkJXAorLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTMxMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5zdXNlIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogZ3VpbGUtMi4wLjMvbGliZ3VpbGUvaGFzaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjMub3JpZy9saWJndWlsZS9oYXNoLmMJMjAxMS0wNy0wNiAxNTo0OTo1OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy9saWJndWlsZS9oYXNoLmMJMjAxMi0wMS0xMyAyMTo0OTo0My4zMzI4NDQ4ODQgLTA4MDAKK0BAIC0yNzAsNyArMjcwLDcgQEAgc2NtX2hhc2hlcihTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4sIHNpegorIHVuc2lnbmVkIGxvbmcKKyBzY21faWhhc2hxIChTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4pCisgeworLSAgcmV0dXJuIChTQ01fVU5QQUNLIChvYmopID4+IDEpICUgbjsKKysgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgPj4gMSkgJSBuOworIH0KKyAKKyAKK0BAIC0zMDYsNyArMzA2LDcgQEAgc2NtX2loYXNodiAoU0NNIG9iaiwgdW5zaWduZWQgbG9uZyBuKQorICAgaWYgKFNDTV9OVU1QKG9iaikpCisgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgc2NtX2hhc2hlcihvYmosIG4sIDEwKTsKKyAgIGVsc2UKKy0gICAgcmV0dXJuIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworIH0KKyAKKyAKK0luZGV4OiBndWlsZS0yLjAuMy9saWJndWlsZS9zdHJ1Y3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC4zLm9yaWcvbGliZ3VpbGUvc3RydWN0LmMJMjAxMS0wNy0wNiAxNTo1MDowMC4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy9saWJndWlsZS9zdHJ1Y3QuYwkyMDEyLTAxLTEzIDIxOjQ5OjQzLjMzMjg0NDg4NCAtMDgwMAorQEAgLTk0Miw3ICs5NDIsNyBAQCBzY21fc3RydWN0X2loYXNocSAoU0NNIG9iaiwgdW5zaWduZWQgbG9uCisgeworICAgLyogVGhlIGxlbmd0aCBvZiB0aGUgaGFzaCB0YWJsZSBzaG91bGQgYmUgYSByZWxhdGl2ZSBwcmltZSBpdCdzIG5vdAorICAgICAgbmVjZXNzYXJ5IHRvIHNoaWZ0IGRvd24gdGhlIGFkZHJlc3MuICAqLworLSAgcmV0dXJuIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSBTQ01fVU5QQUNLIChvYmopICUgbjsKKyB9CisgCisgU0NNX0RFRklORSAoc2NtX3N0cnVjdF92dGFibGVfbmFtZSwgInN0cnVjdC12dGFibGUtbmFtZSIsIDEsIDAsIDAsIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwMTQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuc3VzZSBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworU2VlIGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTEwMDk2Cit3aHkgdGhpcyB0ZXN0IGlzIHR1cm5lZCBvZmYuCitJbmRleDogZ3VpbGUtMi4wLjMvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjMub3JpZy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMS0xMC0xNSAwOTozNDo0MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMi0wMS0xMyAyMTo1MjoxMC4yODI1NDAzNTUgLTA4MDAKK0BAIC02NSwyMyArNjUsMjMgQEAKKyAgICAgICBmb28pKSkKKyAKKyAKKy0od2l0aC10ZXN0LXByZWZpeCAiZ2MiCistICAocGFzcy1pZiAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiCistICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQorLSAgICAgICAgICAgKHRvdGFsIDEwMDApKQorLQorLSAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKKys7Oyh3aXRoLXRlc3QtcHJlZml4ICJnYyIKKys7OyAgKHBhc3MtaWYgIlVudXNlZCBtb2R1bGVzIGFyZSByZW1vdmVkIgorKzs7ICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQorKzs7ICAgICAgICAgICAodG90YWwgMTAwMCkpCisrOzsKKys7OyAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKKyAKKyAgICAgICA7OyBBdm9pZCBmYWxzZSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGVzIG9uIHRoZSBzdGFjay4KKy0gICAgICAoc3RhY2stY2xlYW51cCAyMCkKKys7OyAgICAgIChzdGFjay1jbGVhbnVwIDIwKQorIAorLSAgICAgIChnYykKKy0gICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KKy0gICAgICAoZ2MpIDs7IHRocmljZTogYmVjYXVzZSB0aGUgdGVzdCBkb2Vzbid0IHN1Y2NlZWQgd2l0aCBvbmx5CisrOzsgICAgICAoZ2MpCisrOzsgICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KKys7OyAgICAgIChnYykgOzsgdGhyaWNlOiBiZWNhdXNlIHRoZSB0ZXN0IGRvZXNuJ3Qgc3VjY2VlZCB3aXRoIG9ubHkKKyAgICAgICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgorIAorLSAgICAgICg9IChsZXQgbHAgKChpIDApKQorLSAgICAgICAgICAgKGlmIChndWFyZCkKKy0gICAgICAgICAgICAgICAobHAgKDErIGkpKQorLSAgICAgICAgICAgICAgIGkpKQorLSAgICAgICAgIHRvdGFsKSkpKQorKzs7ICAgICAgKD0gKGxldCBscCAoKGkgMCkpCisrOzsgICAgICAgICAgIChpZiAoZ3VhcmQpCisrOzsgICAgICAgICAgICAgICAobHAgKDErIGkpKQorKzs7ICAgICAgICAgICAgICAgaSkpCisrOzsgICAgICAgICB0b3RhbCkpKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvd29ya2Fyb3VuZC1pY2Utc3NhLWNvcnJ1cHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNDgzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK2xpYmd1aWxlL3ZtLWktc3lzdGVtLmM6IHdvcmthcm91bmQgaWNlIHNzYSBjb3JydXB0aW9uIHdoaWxlIGNvbXBpbGluZyB3aXRoIG9wdGlvbiAtZyAtTworCitXaGlsZSBjb21waWxpbmcgd2l0aCBvcHRpb24gLWcgLU8sIHRoZXJlIHdhcyBhIHNzYSBjb3JydXB0aW9uOgorLi4KK1VuYWJsZSB0byBjb2FsZXNjZSBzc2FfbmFtZXMgNDggYW5kIDM0NzYgd2hpY2ggYXJlIG1hcmtlZCBhcyBNVVNUIENPQUxFU0NFLgorc3BfNDgoYWIpIGFuZCAgc3BfMzQ3NihhYikKK2d1aWxlLTIuMC4xMS9saWJndWlsZS92bS1lbmdpbmUuYzogSW4gZnVuY3Rpb24gJ3ZtX2RlYnVnX2VuZ2luZSc6CitndWlsZS0yLjAuMTEvbGliZ3VpbGUvdm0uYzo2NzM6MTk6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBTU0EgY29ycnVwdGlvbgorICNkZWZpbmUgVk1fTkFNRSAgIHZtX2RlYnVnX2VuZ2luZQorICAgICAgICAgICAgICAgICAgIF4KK2d1aWxlLTIuMC4xMS9saWJndWlsZS92bS1lbmdpbmUuYzozOToxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8gJ1ZNX05BTUUnCisgVk1fTkFNRSAoU0NNIHZtLCBTQ00gcHJvZ3JhbSwgU0NNICphcmd2LCBpbnQgbmFyZ3MpCisgXgorUGxlYXNlIHN1Ym1pdCBhIGZ1bGwgYnVnIHJlcG9ydCwKK3dpdGggcHJlcHJvY2Vzc2VkIHNvdXJjZSBpZiBhcHByb3ByaWF0ZS4KK1NlZSA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4gZm9yIGluc3RydWN0aW9ucy4KKy4uLgorCitUd2VhayBsaWJndWlsZS92bS1pLXN5c3RlbS5jIHRvIGFkZCBib3VuZGFyeSB2YWx1ZSBjaGVjayB0byB3b3JrYXJvdW5kIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvdm0taS1zeXN0ZW0uYyB8IDIwICsrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS92bS1pLXN5c3RlbS5jIGIvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworLS0tIGEvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworKysrIGIvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworQEAgLTYyNSwxMCArNjI1LDIyIEBAIFZNX0RFRklORV9JTlNUUlVDVElPTiAoNDcsIGJpbmRfb3B0aW9uYWxzX3NodWZmbGUsICJiaW5kLW9wdGlvbmFscy9zaHVmZmxlIiwgNiwKKyAgIC8qIG5vdyBzaHVmZmxlIHVwLCBmcm9tIHdhbGsgdG8gbnRvdGFsICovCisgICB7CisgICAgIHNjbV90X3B0cmRpZmYgbnNodWYgPSBzcCAtIHdhbGsgKyAxLCBpOworLSAgICBzcCA9IChmcCAtIDEpICsgbnRvdGFsICsgbnNodWY7CistICAgIENIRUNLX09WRVJGTE9XICgpOworLSAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKy0gICAgICBzcFstaV0gPSB3YWxrW25zaHVmLWktMV07CisrICAgIC8qIGNoZWNrIHRoZSB2YWx1ZSBvZiBuc2h1ZiB0byB3b3JrYXJvdW5kIGljZSBzc2EgY29ycnVwdGlvbiAqLworKyAgICAvKiB3aGlsZSBjb21waWxpbmcgd2l0aCAtTyAtZyAqLworKyAgICBpZiAobnNodWYgPiAwKQorKyAgICB7CisrICAgICAgc3AgPSAoZnAgLSAxKSArIG50b3RhbCArIG5zaHVmOworKyAgICAgIENIRUNLX09WRVJGTE9XICgpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2h1ZjsgaSsrKQorKyAgICAgICAgc3BbLWldID0gd2Fsa1tuc2h1Zi1pLTFdOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgIHNwID0gKGZwIC0gMSkgKyBudG90YWwgKyBuc2h1ZjsKKysgICAgICBDSEVDS19PVkVSRkxPVyAoKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKysgICAgICAgIHNwWy1pXSA9IHdhbGtbbnNodWYtaS0xXTsKKysgICAgfQorICAgfQorICAgLyogYW5kIGZpbGwgb3B0aW9uYWxzICYga2V5d29yZCBhcmdzIHdpdGggU0NNX1VOREVGSU5FRCAqLworICAgd2hpbGUgKHdhbGsgPD0gKGZwIC0gMSkgKyBudG90YWwpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY5Njk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCkBAIC0wLDAgKzEsMTExIEBACitTVU1NQVJZID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyIKK0RFU0NSSVBUSU9OID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyxcCisgdGhlIG9mZmljaWFsIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLlwKKyBHdWlsZSBpcyBhIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBwcm9ncmFtbWVycyBjcmVhdGUgZmxleGlibGUgYXBwbGljYXRpb25zLlwKKyBVc2luZyBHdWlsZSBpbiBhbiBhcHBsaWNhdGlvbiBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZnVuY3Rpb25hbGl0eSB0byBiZVwKKyBleHRlbmRlZCBieSB1c2VycyBvciBvdGhlciBwcm9ncmFtbWVycyB3aXRoIHBsdWctaW5zLCBtb2R1bGVzLCBvciBzY3JpcHRzLlwKKyBHdWlsZSBwcm92aWRlcyB3aGF0IG1pZ2h0IGJlIGRlc2NyaWJlZCBhcyAncHJhY3RpY2FsIHNvZnR3YXJlIGZyZWVkb20sJ1wKKyBtYWtpbmcgaXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIGN1c3RvbWl6ZSBhbiBhcHBsaWNhdGlvbiB0byBtZWV0IHRoZWlyXAorIG5lZWRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIHRoZSBhcHBsaWNhdGlvbidzIGludGVybmFscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWlsZS8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3VpbGUvZ3VpbGUtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9lbmRpYW5uZXNzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2ggXAorICAgICAgICAgICAiCisKKyMgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMS1DaGFuZ2UtZ3VpbGUtdG8tZ3VpbGUtWC5ZLWZvci1pbmZvLXBhZ2VzLnBhdGNoCisjICAgICAgICAgICBmaWxlOi8vb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaAorCitTUkNfVVJJW21kNXN1bV0gPSAiMDNmMWJjZTFhNDk4MzA3NmQ5NTUwMDM0NzIzMDZhMTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWVkMGE0YTZkYjRlMzEwY2JkZmViMzYxM2ZhNmY4NmZkZGM5MWVmNjI0YzFlM2Y4OTM3YTYzMDRjNjkxMDNlMiIKKworCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB0ZXhpbmZvCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworREVQRU5EUyA9ICJsaWJ1bmlzdHJpbmcgYmR3Z2MgZ21wIGxpYnRvb2wgbGliZmZpIG5jdXJzZXMgcmVhZGxpbmUiCisjIGFkZCBndWlsZS1uYXRpdmUgb25seSB0byB0aGUgdGFyZ2V0IHJlY2lwZSdzIERFUEVORFMKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZ3VpbGUtbmF0aXZlIGxpYmF0b21pYy1vcHMiCisKK1JERVBFTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjX2NsYXNzLXRhcmdldCA9ICJnbGliYy1nY29udi1pc284ODU5LTEiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLXdpdGhvdXQtbGlibHRkbC1wcmVmaXggLS13aXRob3V0LWxpYmdtcC1wcmVmaXggLS13aXRob3V0LWxpYnJlYWRsaW5lLXByZWZpeCcsICcnXVtiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLGQpXX0iCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAtLXdpdGgtbGlidW5pc3RyaW5nLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmdtcC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJsdGRsLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJbWtkaXIgLXAgcG8KK30KKworZXhwb3J0IEdVSUxFX0ZPUl9CVUlMRD0iJHtCVUlMRF9TWVN9LWd1aWxlIgorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwkjIGp1c3QgZm9yIHRhcmdldCByZWNpcGUKKwlpZiBbICIke1BOfSIgPSAiZ3VpbGUiIF0KKwl0aGVuCisJCXNlZCAtaSAtZSBzOiR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczovJHtUQVJHRVRfU1lTfTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczotTC91c3IvbGliOjpnIFwKKyAgICAgICAgCSAgICAgICAtZSBzOi1pc3lzdGVtL3Vzci9pbmNsdWRlOjpnIFwKKwkgICAgICAgICAgICAgICAtZSBzOiwvdXNyL2xpYjosXCRce2xpYmRpclx9OmcgXAorCSAgICAgICAgICAgICAgICAgIG1ldGEvZ3VpbGUtMi4wLnBjCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gMDc1NSAgJHtEfSR7YmluZGlyfS9ndWlsZSAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndWlsZSBcCisJCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCisJCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUgXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTID0gImd1aWxlX2Nyb3NzX2NvbmZpZyIKKworZ3VpbGVfY3Jvc3NfY29uZmlnKCkgeworCSMgdGhpcyBpcyBvbmx5IGZvciB0YXJnZXQgcmVjaXBlCisJaWYgWyAiJHtQTn0iID0gImd1aWxlIiBdCisJdGhlbgorCSAgICAgICAgIyBDcmVhdGUgZ3VpbGUtY29uZmlnIHJldHVybmluZyB0YXJnZXQgdmFsdWVzIGluc3RlYWQgb2YgbmF0aXZlIHZhbHVlcworCSAgICAgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSX0NST1NTfQorICAgICAgICAJZWNobyAnIyEnYHdoaWNoICR7QlVJTERfU1lTfS1ndWlsZWAkJyBcXFxuLS1uby1hdXRvLWNvbXBpbGUgLWUgbWFpbiAtc1xuISNcbihkZWZpbmUgJWd1aWxlLWJ1aWxkLWluZm8gJ1wnXCggXAorCQkJPiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgc2VkIC1uIC1lICdzOl5bIFx0XSp7WyBcdF0qIjogICg6JyBcCisJCQktZSAnczoiLFsgXHRdKiI6IC4gIjonIFwKKwkJCS1lICdzOiIgKn0sICpcXDoiKTonIFwKKwkJCS1lICdzOl4uKmNhY2hlZGlyLiokOjonIFwKKwkJCS1lICcvXiAgKC9wJyBcCisJCQk8ICR7Qn0vbGliZ3VpbGUvbGlicGF0aC5oID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBlY2hvICcpKScgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGNhdCAke0J9L21ldGEvZ3VpbGUtY29uZmlnID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBpbnN0YWxsICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L2d1aWxlLWNvbmZpZworCWZpCit9CisKKyMgR3VpbGUgbmVlZHMgdGhlIGNvbXBpbGVkIGZpbGVzIHRvIGJlIG5ld2VyIHRoYW4gdGhlIHNvdXJjZSwgYW5kIGl0IHdvbid0CisjIGF1dG8tY29tcGlsZSBpbnRvIHRoZSBwcmVmaXggZXZlbiBpZiBpdCBjYW4gd3JpdGUgdGhlcmUsIHNvIHRvdWNoIHRoZW0gaGVyZSBhcworIyBzeXNyb290IGlzIG1hbmFnZWQuCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJndWlsZV9zc3RhdGVfcG9zdGluc3QiCitndWlsZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKyAgICAgICAgICAgICAgICBmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2xpYmRpcn0vZ3VpbGUvMi4wL2NjYWNoZSAtdHlwZSBmIHwgeGFyZ3MgdG91Y2gKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZmlsZXMvZ3VpbHQtYmFzaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhNDM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2gKQEAgLTAsMCArMSwyODggQEAKK2d1aWx0OiBleHBsaWNpdGx5IGNhbGwgZm9yIGJhc2gKKworUnVubmluZyBjb21wbGV4IGd1aWx0IHN0YWNrcyBvZiBwYXRjaGVzL2NvbW1pdHMgY2FuIGNhdXNlIGludGVyZXN0aW5nCitmYWlsdXJlcyBhZnRlciB+MjBtIG9mIHByb2Nlc3NpbmcsIHdpdGggZXJyb3JzIGxpa2UgIkJhZCBzdWJzdGl0dXRpb24iLgorCitUaGVzZSBoYXZlIGJlZW4gdHJhY2VkIGJhY2sgdG8gaGF2aW5nIC9iaW4vc2ggLS0+ICAvYmluL2Rhc2ggb24gVWJ1bnR1CitzeXN0ZW1zLiAgUHV0dGluZyBhIHNoZWxsIHRoYXQgYWN0dWFsbHkgKndvcmtzKiAoc3VjaCBhcyAvYmluL2Jhc2gpCitpbiBhcyAvYmluL3NoIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkuICBTbyBoZXJlIHdlIGNoYW5nZSB0aGUgZ3VpbHQKK3NjcmlwdHMgdG8gZXhwbGljaXRseSBjYWxsIGZvciBiYXNoIHRvIGVuc3VyZSB3ZSBkb24ndCBoYXZlIGEgc2ltaWxhcgoraXNzdWUgYWZ0ZXIgZGVwbG95bWVudC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZS1zcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGd1aWx0ICAgICAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtYWRkICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1hcHBsaWVkICAgICAgIHwgICAgMiArLQorIGd1aWx0LWJyYW5jaCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZGVsZXRlICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1kaWZmICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWV4cG9ydCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZmlsZXMgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1mb2xkICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWZvcmsgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZ3JhcGggICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1oZWFkZXIgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWhlbHAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaW1wb3J0ICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1pbXBvcnQtY29tbWl0IHwgICAgMiArLQorIGd1aWx0LWluaXQgICAgICAgICAgfCAgICA0ICsrLS0KKyBndWlsdC1uZXcgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LW5leHQgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcGF0Y2hib21iICAgICB8ICAgIDIgKy0KKyBndWlsdC1wb3AgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXByZXYgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcHVzaCAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1yZWJhc2UgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXJlZnJlc2ggICAgICAgfCAgICAyICstCisgZ3VpbHQtcm0gICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1zZXJpZXMgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXN0YXR1cyAgICAgICAgfCAgICAyICstCisgZ3VpbHQtdG9wICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC11bmFwcGxpZWQgICAgIHwgICAgMiArLQorIDI5IGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQorCistLS0gYS9ndWlsdAorKysrIGIvZ3VpbHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYtMjAxMAorICMKKy0tLSBhL2d1aWx0LWFkZAorKysrIGIvZ3VpbHQtYWRkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtYXBwbGllZAorKysrIGIvZ3VpbHQtYXBwbGllZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWJyYW5jaAorKysrIGIvZ3VpbHQtYnJhbmNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3LTIwMDgKKyAjCistLS0gYS9ndWlsdC1kZWxldGUKKysrKyBiL2d1aWx0LWRlbGV0ZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWRpZmYKKysrKyBiL2d1aWx0LWRpZmYKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChDKSAyMDA3IEpvc2VmICdKZWZmJyBTaXBlayA8amVmZnBjQGpvc2Vmc2lwZWsubmV0PgorICMKKy0tLSBhL2d1aWx0LWV4cG9ydAorKysrIGIvZ3VpbHQtZXhwb3J0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgUGllcnJlIEhhYm91eml0LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZmlsZXMKKysrKyBiL2d1aWx0LWZpbGVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoQykgMjAwNyBZYXN1c2hpIFNIT0pJIDx5YXNoaUBhdG1hcmstdGVjaG5vLmNvbT4KKyAjCistLS0gYS9ndWlsdC1mb2xkCisrKysgYi9ndWlsdC1mb2xkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZm9yaworKysrIGIvZ3VpbHQtZm9yaworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWdyYXBoCisrKysgYi9ndWlsdC1ncmFwaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWhlYWRlcgorKysrIGIvZ3VpbHQtaGVhZGVyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LTIwMTAKKyAjCistLS0gYS9ndWlsdC1oZWxwCisrKysgYi9ndWlsdC1oZWxwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW1wb3J0CisrKysgYi9ndWlsdC1pbXBvcnQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1pbXBvcnQtY29tbWl0CisrKysgYi9ndWlsdC1pbXBvcnQtY29tbWl0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW5pdAorKysrIGIvZ3VpbHQtaW5pdAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKK0BAIC0zMSw3ICszMSw3IEBAIHRvdWNoICIkR1VJTFRfRElSLyRicmFuY2gvc3RhdHVzIgorIAorIG1rZGlyIC1wICIkR0lUX0RJUi9ob29rcy9ndWlsdCIKKyBjYXQgPiAiJEdJVF9ESVIvaG9va3MvZ3VpbHQvZGVsZXRlIiA8PEVPRgorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIyBVc2FnZTogPHNjcmlwdD4gPHBhdGNoIGJlaW5nIHJlbW92ZWQ+CisgCisgZWNobyAiUmVtb3ZpbmcgcGF0Y2ggJ1wkMScuLi4iCistLS0gYS9ndWlsdC1uZXcKKysrKyBiL2d1aWx0LW5ldworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LW5leHQKKysrKyBiL2d1aWx0LW5leHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wYXRjaGJvbWIKKysrKyBiL2d1aWx0LXBhdGNoYm9tYgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LXBvcAorKysrIGIvZ3VpbHQtcG9wCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcHJldgorKysrIGIvZ3VpbHQtcHJldgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXB1c2gKKysrKyBiL2d1aWx0LXB1c2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1yZWJhc2UKKysrKyBiL2d1aWx0LXJlYmFzZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LXJlZnJlc2gKKysrKyBiL2d1aWx0LXJlZnJlc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1ybQorKysrIGIvZ3VpbHQtcm0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1zZXJpZXMKKysrKyBiL2d1aWx0LXNlcmllcworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXN0YXR1cworKysrIGIvZ3VpbHQtc3RhdHVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtdG9wCisrKysgYi9ndWlsdC10b3AKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC11bmFwcGxpZWQKKysrKyBiL2d1aWx0LXVuYXBwbGllZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2d1aWx0LW5hdGl2ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2M2OGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAicXVpbHQtbGlrZSB0b29sIGZvciBHaXQiCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNmYzNDAwZGMxYTAxY2ViYWZlOGE1MmIzZjM0NDEzNSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJnaXQ6Ly9yZXBvLm9yLmN6L2d1aWx0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWlsdC1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgIgorUFYgPSAiMC4zNStnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICJjMmE1YmFlNTExYzZkNTM1NGFhNGUxY2I1OTA2OWMzMWRmMmI4ZWViIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIHdlIGRvbid0IGNvbXBpbGUsIHdlIGp1c3QgaW5zdGFsbAorZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtEfS8ke3ByZWZpeH0gaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2ZDUwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQcm9ncmFtIGZvciBjcmVhdGluZyBzaW1wbGUgbWFuIHBhZ2VzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAiYXV0b2NvbmYtbmF0aXZlIGF1dG9tYWtlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2Y3YWFhZWVhNDBiZmYxMTc2ZGY4MjU0MzA2OTQxNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzU5YjI2ZjYwY2IwNmU0NWIwMGU3MjlkZWE3MjFlN2ExNzIyMGUyYzE3ZDgwMGViNDI4MjcxYTc1MDM4MmIwNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbmxzIgorCisjIFdlIGRvbid0IHdhbnQgdG8gcmVjb25maWd1cmUgdGhpbmdzIGFzIGl0IHdvdWxkIHJlcXVpcmUgJ3BlcmxuYXRpdmUnIHRvIGJlCisjIHVzZWQuCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBwZXJsCisJc2VkIC1pIC1lICIxczojIS4qOiMhIC91c3IvYmluL2VudiBwZXJsOiIgJHtEfSR7YmluZGlyfS9oZWxwMm1hbgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2ZpbGVzL01vZHVsZS5tayBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhZjcyZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsKQEAgLTAsMCArMSw3MiBAQAorIyBFRVBST01FUgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0VFUFJPTUVSX0RJUgk6PSBlZXByb21lcgorCitFRVBST01FUl9DRkxBR1MJOj0gLVdzdHJpY3QtcHJvdG90eXBlcyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdjYXN0LXF1YWwgXAorCQkgICAtV2Nhc3QtYWxpZ24gLVd3cml0ZS1zdHJpbmdzIC1XbmVzdGVkLWV4dGVybnMgLVdpbmxpbmUgXAorCQkgICAtVyAtV3VuZGVmIC1XbWlzc2luZy1wcm90b3R5cGVzIC1JaW5jbHVkZQorCitFRVBST01FUl9UQVJHRVRTCTo9IGVlcHJvbWVyIGVlcHJvbSBlZXByb2cKKworIworIyBQcm9ncmFtcworIworCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tZXI6ICQoRUVQUk9NRVJfRElSKS9lZXByb21lci5vCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9tLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisKKyQoRUVQUk9NRVJfRElSKS9lZXByb2c6ICQoRUVQUk9NRVJfRElSKS9lZXByb2cubyAkKEVFUFJPTUVSX0RJUikvMjRjWFgubyAKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisKKyMKKyMgT2JqZWN0cworIworCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tZXIubzogJChFRVBST01FUl9ESVIpL2VlcHJvbWVyLmMKKwkkKENDKSAkKENGTEFHUykgJChFRVBST01FUl9DRkxBR1MpIC1jICQ8IC1vICRACisKKyQoRUVQUk9NRVJfRElSKS9lZXByb20ubzogJChFRVBST01FUl9ESVIpL2VlcHJvbS5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9nLm86ICQoRUVQUk9NRVJfRElSKS9lZXByb2cuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworJChFRVBST01FUl9ESVIpLzI0Y1hYLm86ICQoRUVQUk9NRVJfRElSKS8yNGNYWC5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCisjCisjIENvbW1hbmRzCisjCisKK2FsbC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCitzdHJpcC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCXN0cmlwICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKworY2xlYW4tZWVwcm9tZXI6CisJJChSTSkgJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywqLm8gJChFRVBST01FUl9UQVJHRVRTKSkKKworaW5zdGFsbC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCSQoSU5TVEFMTF9ESVIpICQoREVTVERJUikkKHNiaW5kaXIpICQoREVTVERJUikkKG1hbjhkaXIpCisJZm9yIHByb2dyYW0gaW4gJChFRVBST01FUl9UQVJHRVRTKSA7IGRvIFwKKwkkKElOU1RBTExfUFJPR1JBTSkgJChFRVBST01FUl9ESVIpLyQkcHJvZ3JhbSAkKERFU1RESVIpJChzYmluZGlyKSA7IGRvbmUKKwordW5pbnN0YWxsLWVlcHJvbWVyOgorCWZvciBwcm9ncmFtIGluICQoRUVQUk9NRVJfVEFSR0VUUykgOyBkbyBcCisJJChSTSkgJChERVNURElSKSQoc2JpbmRpcikvJCRwcm9ncmFtIDsgXAorCSQoUk0pICQoREVTVERJUikkKG1hbjhkaXIpLyQkcHJvZ3JhbS44IDsgZG9uZQorCithbGw6IGFsbC1lZXByb21lcgorCitzdHJpcDogc3RyaXAtZWVwcm9tZXIKKworY2xlYW46IGNsZWFuLWVlcHJvbWVyCisKK2luc3RhbGw6IGluc3RhbGwtZWVwcm9tZXIKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtZWVwcm9tZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9pMmMtdG9vbHNfMy4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjRkNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiU2V0IG9mIGkyYyB0b29scyBmb3IgbGludXgiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kbC5sbS1zZW5zb3JzLm9yZy9pMmMtdG9vbHMvcmVsZWFzZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9Nb2R1bGUubWsgXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjcxMDRhMTA0M2QxMWE1ZTJjN2IxMzE2MTRlYjFiOTYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiNWU2OWYyZTJhNmUzYWEyZWNkZmU2YTVmNDkwYjE0OWM1MDQ0Njg3NzBmNTg5MjFjOGM1YjhhNzg2MGE0NDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgY3AgJHtXT1JLRElSfS9Nb2R1bGUubWsgJHtTfS9lZXByb21lci8KKyAgICBzZWQgLWkgJ3MjL3Vzci9sb2NhbCMvdXNyIycgJHtTfS9NYWtlZmlsZQorICAgIGVjaG8gImluY2x1ZGUgZWVwcm9tZXIvTW9kdWxlLm1rIiA+PiAke1N9L01ha2VmaWxlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vbGludXgKKyAgICBpbnN0YWxsIC1tIDA2NDQgaW5jbHVkZS9saW51eC9pMmMtZGV2LmggJHtEfSR7aW5jbHVkZWRpcn0vbGludXgvaTJjLWRldi11c2VyLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saW51eC9pMmMtZGV2LmgKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7c2JpbmRpcn0vaTJjLXN0dWItZnJvbS1kdW1wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZGNtb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RlY29kZS1lZGlkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZWNvZGUtZGltbXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RlY29kZS12YWlvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LW1pc2MiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICJwZXJsIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGY0YWVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJpY2VjYyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCBoYXMgXAorYmVlbiBtb2RpZmllZCBpbiBvcmRlciB0byBtYWtlIGl0IHdvcmsgd2l0aCBPRS4iCitTRUNUSU9OID0gImJhc2UiCisjIHNvdXJjZSBmaWxlIGhhcyBqdXN0IGEgIkdQTCIgd29yZCwgYnV0IHVwc3RyZWFtIGlzIEdQTHYyKy4KKyMgbW9zdCBwcm9iYWJseSBqdXN0IEdQTCB3b3VsZCBiZSBhIG1pc3Rha2UKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaWNlY2MtY3JlYXRlLWVudjtiZWdpbmxpbmU9MjtlbmRsaW5lPTU7bWQ1PWFlMWRmM2Q2YTA1OGJmZGE0MGI2NjA5NGM1ZjYwNjVmIgorCitQUiA9ICJyMiIKKworREVQRU5EUyA9ICIiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitpbmhlcml0IG5hdGl2ZQorCisjIFRoaXMgaXMgbmVlZGVkLCBiZWNhdXNlIG90aGVyd2lzZSB0aGVyZSBpcyBkZXBlbmRlbmN5IGxvb3AgZnJvbSBxdWlsdC1uYXRpdmUKKyMgRGVwZW5kZW5jeSBsb29wICMxIGZvdW5kOgorIyAgVGFzayAxMDkwNyAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19pbnN0YWxsKSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19jb21waWxlJ10pCisjICBUYXNrIDEwOTA4IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX3BvcHVsYXRlX3N5c3Jvb3QpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX2luc3RhbGwnXSkKKyMgIFRhc2sgMTA5OTcgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fcGF0Y2gpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fdW5wYWNrJywgJ3F1aWx0LW5hdGl2ZSwgZG9fcG9wdWxhdGVfc3lzcm9vdCddKQorIyAgVGFzayAxMTAwMSAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19jb25maWd1cmUpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fcGF0Y2gnXSkKKyMgIFRhc2sgMTEwMDIgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fY29tcGlsZSkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19jb25maWd1cmUnXSkKKyMgIFRhc2sgMTA5OTggKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9faW5zdGFsbCkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19jb21waWxlJ10pCisjICBUYXNrIDEwOTk5IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX3BvcHVsYXRlX3N5c3Jvb3QpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9faW5zdGFsbCddKQorIyAgVGFzayAxMDkxMCAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19jb25maWd1cmUpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX3BhdGNoJywgJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19wb3B1bGF0ZV9zeXNyb290J10pCisjICBUYXNrIDEwOTExIChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX2NvbXBpbGUpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX2NvbmZpZ3VyZSddKQorUEFUQ0hUT09MID0gInBhdGNoIgorU1JDX1VSSSA9ICJmaWxlOi8vaWNlY2MtY3JlYXRlLWVudiIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pY2VjYy1jcmVhdGUtZW52ICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlNGRiYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudgpAQCAtMCwwICsxLDE5MiBAQAorIyEgL3Vzci9iaW4vZW52IGJhc2gKKyMgaWNlY2MgLS0gQSBzaW1wbGUgZGlzdHJpYnV0ZWQgY29tcGlsZXIgc3lzdGVtCisjCisjIENvcHlyaWdodCAoQykgMjAwNCBieSB0aGUgSWNlY3JlYW0gQXV0aG9ycworIyBHUEwKKwordGFyZ2V0X2ZpbGVzPQorCitpc19jb250YWluZWQgKCkKK3sKKyAgY2FzZSAiICR0YXJnZXRfZmlsZXMgIiBpbgorICAgICoiICQxICIqICkgcmV0dXJuIDAgOzsKKyAgICAqIj0kMSAiKiApIHJldHVybiAwOzsKKyAgICAqICkgcmV0dXJuIDEgOzsKKyAgZXNhYworfQorCithZGRfZmlsZSAoKQoreworICBsb2NhbCBuYW1lPSIkMSIKKyAgbG9jYWwgcGF0aD0iJDEiOworICBpZiB0ZXN0IC1uICIkMiI7IHRoZW4KKyAgICBuYW1lPSIkMiIKKyAgZmkKKyAgdGVzdCAteiAiJG5hbWUiICYmIHJldHVybgorICAjIGxzIC1IIGlzbid0IHJlYWxseSB0aGUgc2FtZSBhcyByZWFkbGluaywgYnV0CisgICMgcmVhZGxpbmsgaXMgbm90IHBvcnRhYmxlIGVub3VnaC4KKyAgcGF0aD1gbHMgLUggJHBhdGhgCisgIHRvYWRkPSIkbmFtZT0kcGF0aCIKKyAgaXNfY29udGFpbmVkICIkdG9hZGQiICYmIHJldHVybgorICBpZiB0ZXN0IC16ICIkc2lsZW50IjsgdGhlbgorICBlY2hvICJhZGRpbmcgZmlsZSAkdG9hZGQiCisgIGZpCisgIHRhcmdldF9maWxlcz0iJHRhcmdldF9maWxlcyAkdG9hZGQiCisgIGlmIHRlc3QgLXggIiRwYXRoIjsgdGhlbgorICAgICMgT25seSBjYWxsIGxkZCB3aGVuIGl0IG1ha2VzIHNlbnNlCisgICAgaWYgZmlsZSAtTCAiJHBhdGgiIHwgZ3JlcCAnRUxGJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJaWYgISBmaWxlIC1MICIkcGF0aCIgfCBncmVwICdzdGF0aWMnID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAjIGxkZCBub3cgb3V0cHV0cyBsZCBhcyAvbGliL2xkLWxpbnV4LnNvLnh4IG9uIGN1cnJlbnQgbnB0bCBiYXNlZCBnbGliYworCQkjIHRoaXMgcmVnZXhwIHBhcnNlIHRoZSBvdXRwdXRzIGxpa2U6CisJCSMgbGRkIC91c3IvYmluL2djYworCQkjICAgICAgICAgbGludXgtZ2F0ZS5zby4xID0+ICAoMHhmZmZmZTAwMCkKKwkJIyAgICAgICAgIGxpYmMuc28uNiA9PiAvbGliL3Rscy9saWJjLnNvLjYgKDB4YjdlODEwMDApCisJCSMgICAgICAgICAvbGliL2xkLWxpbnV4LnNvLjIgKDB4YjdmZTgwMDApCisJCSMgY292ZXJpbmcgYm90aCBzaXR1YXRpb25zICggd2l0aCA9PiBhbmQgd2l0aG91dCApCisgICAgICAgICAgZm9yIGxpYiBpbiBgbGRkICIkcGF0aCIgfCBzZWQgLW4gJ3MsXlteL10qXCgvW14gXSpcKS4qLFwxLHAnYDsgZG8KKwkgICAgdGVzdCAtZiAiJGxpYiIgfHwgY29udGludWUKKwkgICAgIyBDaGVjayB3ZXRoZXIgdGhlIHNhbWUgbGlicmFyeSBhbHNvIGV4aXN0cyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwKKwkgICAgIyBhbmQgcHJlZmVyIHRoYXQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBpcyBhIG1vcmUgZ2VuZXJpYyBvbmUuCisJICAgIGxvY2FsIGJhc2VsaWI9YGVjaG8gIiRsaWIiIHwgc2VkICdzLFwoL1teL10qXCkvLipcKC9bXi9dKlwpJCxcMVwyLCdgCisJICAgIHRlc3QgLWYgIiRiYXNlbGliIiAmJiBsaWI9JGJhc2VsaWIKKwkgIGFkZF9maWxlICIkbGliIgorICAgICAgICBkb25lCisgICAgICBmaQorICAgIGZpCisgIGZpCit9CisKKyMgYmFja3dhcmQgY29tcGF0CitpZiB0ZXN0ICIkMSIgPSAiLS1yZXNwZWN0LXBhdGgiOyB0aGVuCisgIHNoaWZ0CitmaQorCisjYWRkIGEgLS1zaWxlbnQgc3dpdGNoIHRvIGF2b2lkICJicm9rZW4gcGlwZSIgZXJyb3JzIHdoZW4gY2FsbGluZyB0aGlzIHNjaXB0IGZyb20gd2l0aGluIE9FCitpZiB0ZXN0ICIkMSIgPSAiLS1zaWxlbnQiOyB0aGVuCisgc2lsZW50PTEKKyBzaGlmdAorZmkKKworCithZGRlZF9nY2M9JDEKK3NoaWZ0CithZGRlZF9neHg9JDEKK3NoaWZ0CithZGRlZF9hcz0kMQorc2hpZnQKK2FyY2hpdmVfbmFtZT0kMQorCitpZiB0ZXN0IC16ICIkYWRkZWRfZ2NjIiB8fCB0ZXN0IC16ICIkYWRkZWRfZ3h4IiA7IHRoZW4KKwllY2hvICJ1c2FnZTogJDAgPGdjY19wYXRoPiA8ZysrX3BhdGg+IgorCWV4aXQgMQorZmkKKworaWYgISB0ZXN0IC14ICIkYWRkZWRfZ2NjIiA7IHRoZW4KKyAgZWNobyAiJyRhZGRlZF9nY2MnIGlzIG5vIGV4ZWN1dGFibGUuIgorICBleGl0IDEKK2ZpCisKK2lmICEgdGVzdCAteCAiJGFkZGVkX2d4eCIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfZ2NjJyBpcyBubyBleGVjdXRhYmxlLiIKKyAgZXhpdCAxCitmaQorCisKKworYWRkX2ZpbGUgJGFkZGVkX2djYyAvdXNyL2Jpbi9nY2MKK2FkZF9maWxlICRhZGRlZF9neHggL3Vzci9iaW4vZysrCisKK2lmIHRlc3QgLXogIiRhZGRlZF9hcyIgOyB0aGVuCisgYWRkX2ZpbGUgL3Vzci9iaW4vYXMgL3Vzci9iaW4vYXMKK2Vsc2UKKyBpZiAhIHRlc3QgLXggIiRhZGRlZF9hcyIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfYXMnIGlzIG5vIGV4ZWN1dGFibGUuIgorICBleGl0IDEKKyBmaQorCisgYWRkX2ZpbGUgJGFkZGVkX2FzICAvdXNyL2Jpbi9hcworZmkKKworYWRkX2ZpbGUgYCRhZGRlZF9nY2MgLXByaW50LXByb2ctbmFtZT1jYzFgIC91c3IvYmluL2NjMQorYWRkX2ZpbGUgYCRhZGRlZF9neHggLXByaW50LXByb2ctbmFtZT1jYzFwbHVzYCAvdXNyL2Jpbi9jYzFwbHVzCitzcGVjZmlsZT1gJGFkZGVkX2djYyAtcHJpbnQtZmlsZS1uYW1lPXNwZWNzYAoraWYgdGVzdCAtbiAiJHNwZWNmaWxlIiAmJiB0ZXN0IC1lICIkc3BlY2ZpbGUiOyB0aGVuCisgIGFkZF9maWxlICIkc3BlY2ZpbGUiCitmaQorCitsdG9maWxlPWAkYWRkZWRfZ2NjIC1wcmludC1wcm9nLW5hbWU9bHRvMWAKK3BsdWdpbmZpbGU9IiR7bHRvZmlsZSVsdG8xfWxpYmx0b19wbHVnaW4uc28iCitpZiB0ZXN0IC1yICIkcGx1Z2luZmlsZSIKK3RoZW4KKyAgYWRkX2ZpbGUgJHBsdWdpbmZpbGUgICR7cGx1Z2luZmlsZSMqdXNyfQorICBhZGRfZmlsZSAkcGx1Z2luZmlsZSAgL3VzciR7cGx1Z2luZmlsZSMqdXNyfQorZmkKKwordGVtcGRpcj1gbWt0ZW1wIC1kIC90bXAvaWNlY2NlbnZYWFhYWFhgCituZXdfdGFyZ2V0X2ZpbGVzPQorZm9yIGkgaW4gJHRhcmdldF9maWxlczsgZG8KKyBjYXNlICRpIGluCisgICAqPS8qKQorICAgIHRhcmdldD1gZWNobyAkaSB8IGN1dCAtZD0gLWYxYAorICAgIHBhdGg9YGVjaG8gJGkgfCBjdXQgLWQ9IC1mMmAKKyAgICA7OworICAgKikKKyAgICBwYXRoPSRpCisgICAgdGFyZ2V0PSRpCisgICAgOzsKKyAgZXNhYworICBta2RpciAtcCAkdGVtcGRpci9gZGlybmFtZSAkdGFyZ2V0YAorICBjcCAtcCAkcGF0aCAkdGVtcGRpci8kdGFyZ2V0CisgIGlmIHRlc3QgLWYgJHRlbXBkaXIvJHRhcmdldCAtYSAteCAkdGVtcGRpci8kdGFyZ2V0OyB0aGVuCisgICAgc3RyaXAgLXMgJHRlbXBkaXIvJHRhcmdldCAyPi9kZXYvbnVsbAorICBmaQorICB0YXJnZXQ9YGVjaG8gJHRhcmdldCB8IGN1dCAtYjItYAorICBuZXdfdGFyZ2V0X2ZpbGVzPSIkbmV3X3RhcmdldF9maWxlcyAkdGFyZ2V0IgorZG9uZQorCisjc29ydCB0aGUgZmlsZXMKK3RhcmdldF9maWxlcz1gZm9yIGkgaW4gJG5ld190YXJnZXRfZmlsZXM7IGRvIGVjaG8gJGk7IGRvbmUgfCBzb3J0YAorCisjdGVzdCBpZiBhbiBhcmNoaXZlIG5hbWUgd2FzIHN1cHBsaWVkCisjaWYgbm90IHVzZSB0aGUgbWQ1IG9mIGFsbCBmaWxlcyBhcyB0aGUgYXJjaGl2ZSBuYW1lCitpZiB0ZXN0IC16ICIkYXJjaGl2ZV9uYW1lIjsgdGhlbgorICBtZDVzdW09Tk9ORQorICBmb3IgZmlsZSBpbiAvdXNyL2Jpbi9tZDVzdW0gL2Jpbi9tZDUgL3Vzci9iaW4vbWQ1OyBkbworICAgIGlmIHRlc3QgLXggJGZpbGU7IHRoZW4KKyAgICAgIG1kNXN1bT0kZmlsZQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisKKyAgI2NhbGN1bGF0ZSBtZDUgYW5kIHVzZSBpdCBhcyB0aGUgYXJjaGl2ZSBuYW1lCisgIGFyY2hpdmVfbmFtZT1gZm9yIGkgaW4gJHRhcmdldF9maWxlczsgZG8gdGVzdCAtZiAkdGVtcGRpci8kaSAmJiAkbWQ1c3VtICR0ZW1wZGlyLyRpOyBkb25lIHwgc2VkIC1lICdzLyAuKiQvLycgfCAkbWQ1c3VtIHwgc2VkIC1lICdzLyAuKiQvLydgLnRhci5neiB8fCB7CisgICAgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgICAgZWNobyAiQ291bGRuJ3QgY29tcHV0ZSBNRDUgc3VtLiIKKyAgICBmaQorICAgIGV4aXQgMgorICB9CisgIG15ZGlyPWBwd2RgCitlbHNlCisgIG15ZGlyPSJgZGlybmFtZSAiJGFyY2hpdmVfbmFtZSJgIgorCisgICNjaGVjayBpZiB3ZSBoYXZlIGEgZnVsbCBwYXRoIG9yIG9ubHkgYSBmaWxlbmFtZQorICBpZiB0ZXN0ICIkbXlkaXIiID0gIi4iIDsgdGhlbgorICAgIG15ZGlyPWBwd2RgCisgIGVsc2UKKyAgICBteWRpcj0iIgorICBmaQorZmkKKworaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KK2VjaG8gImNyZWF0aW5nICRhcmNoaXZlX25hbWUiCitmaQorCitjZCAkdGVtcGRpcgordGFyIC1jemhmICIkbXlkaXIvJGFyY2hpdmVfbmFtZSIgJHRhcmdldF9maWxlcyB8fCB7CisgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgZWNobyAiQ291bGRuJ3QgY3JlYXRlIGFyY2hpdmUiCisgZmkKKyAgZXhpdCAzCit9CitjZCAuLgorcm0gLXJmICR0ZW1wZGlyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY29uLW5hbWluZy11dGlscy9pY29uLW5hbWluZy11dGlsc18wLjguOTAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY29uLW5hbWluZy11dGlscy9pY29uLW5hbWluZy11dGlsc18wLjguOTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzNTZiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkVuYWJsZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGRlc2t0b3AgaWNvbiB0aGVtZXMiCitERVNDUklQVElPTiA9ICJBIFBlcmwgc2NyaXB0IHVzZWQgZm9yIG1haW50YWluaW5nIGJhY2t3YXJkcyBcCitjb21wYXRpYmlsaXR5IHdpdGggY3VycmVudCBkZXNrdG9wIGljb24gdGhlbWVzLCB3aGlsZSBtaWdyYXRpbmcgdG8gdGhlIFwKK25hbWVzIHNwZWNpZmllZCBpbiB0aGUgSWNvbiBOYW1pbmcgU3BlY2lmaWNhdGlvbi4gVGhlIEljb24gTmFtaW5nIFwKK1V0aWxpdGllcyBtYXAgdGhlIGljb24gbmFtZXMgdXNlZCBieSB0aGUgR05PTUUgYW5kIEtERSBkZXNrdG9wcyB0byB0aGUgXAoraWNvbiBuYW1lcyBwcm9wb3NlZCBpbiB0aGUgSWNvbiBOYW1pbmcgU3BlY2lmaWNhdGlvbiwgYW5kIGdlbmVyYXRlIHRoZSBcCitpY29uIGZpbGVzIGFwcHJvcHJpYXRlIHRvIHRoZSBkZXNrdG9wIGVudmlyb25tZW50IHlvdSB1c2UuIFRoZSBJY29uIFwKK05hbWluZyBTcGVjaWZpY2F0aW9uIHByb3ZpZGVzIGEgc3RhbmRhcmQgbGlzdCBvZiBjb21tb24gaWNvbiBjb250ZXh0cyBcCithbmQgbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIGljb24gdGhlbWVzIHdvcmsgaW4gYSBkZXNrdG9wIFwKK2Vudmlyb25tZW50IG9yIGFwcGxpY2F0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgbmFtaW5nIHNwZWNpZmljYXRpb24uICIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gImxpYnhtbC1zaW1wbGUtcGVybC1uYXRpdmUiCitQUiA9ICJyNSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3RhbmdvLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9pY29uLW5hbWluZy11dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMmM1YzdhNDE4ZTVlYjMyNjhmNjVlMjE5OTMyNzdmYmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDQ0YWIyMTk5ZWQ4YzZhNTVjZTM2ZmQ0ZmNkOGI4MDIxYTVlMjFmNWJhYjAyOGMwYTdjZGNmNTJhNTkwMmUxYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYWxsYXJjaCBwZXJsbmF0aXZlCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJIyBNYWtlIHN1cmUgd2UgdXNlIG91ciBuYXRpdmVwZXJsIHdyYXBwZXIuCisJc2VkIC1pIC1lICIxczojIS4qOiMhL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmw6IiAke1N9L2ljb24tbmFtZS1tYXBwaW5nLnBsLmluCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2R0ZHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjhjZmIyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIKQEAgLTAsMCArMSw0MjAgQEAKKyMhL2Jpbi9iYXNoCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKKwordXNhZ2UgKCkKK3sKKworICBJTlNUX0FSQ0g9YHVuYW1lIC1tYAorICBJTlNUX09TPWB1bmFtZSAtb3wgdHIgJ1tBLVpdJyAnW2Etel0nYAorICBJTlNUX0tSPWB1bmFtZSAtcnwgdHIgJ1tBLVpdJyAnW2Etel0nYAorCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFdlbGNvbWUgdG8gWW9jdG8gQXBwbGljYXRpb24gRGV2ZWxvcGVtZW50IFRvb2xzIChBRFQpIEluc3RhbGxlciIKKyAgZWNob19pbmZvICIjICIKKyAgZWNob19pbmZvICIjIEhvc3QgTWFjaGluZTpcdFx0XHRcdCIkSU5TVF9BUkNICisgIGVjaG9faW5mbyAiIyBPUyBpbmZvOlx0XHRcdFx0JElOU1RfS1IiICAKKyAgZWNob19pbmZvICIjIFlvY3RvIEFEVCB2ZXJzaW9uIHRvIGJlIGluc3RhbGxlZDpcdCRZT0NUT0FEVF9WRVJTSU9OIgorICBlY2hvX2luZm8gIiMgc3VwcG9ydGVkIHRhcmdldCBhcmNoaXRlY3R1cmVzOlx0JFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTIgorICBlY2hvX2luZm8gIiMgc3VwcG9ydGVkIHRhcmdldCByb290X2ZzIGltYWdlczpcdCRZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKworICBlY2hvX2luZm8gIlN5c3RlbXdpZGUgaW5zdGFsbGF0aW9uLiBJbnN0YWxsYXRpb24gd2lsbCBvY2N1ciB1bmRlciAkSU5TVEFMTF9GT0xERVJcbiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIiMgWW91ciBzeXN0ZW0gaW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb25zIGZyb20gYWR0X2luc3RhbGxlci5jb25mIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisKKyAgZWNob19pbmZvICIjIENyb3NzIHRvb2xjaGFpbnM6XHRcdCRZT0NUT0FEVF9UQVJHRVRTIgorICBlY2hvX2luZm8gIiMgSW5zdGFsbCBRZW11Olx0XHRcdCRZT0NUT0FEVF9RRU1VIgorICBlY2hvX2luZm8gIiMgSW5zdGFsbCBORlMgdXRpbGl0aWVzOlx0JFlPQ1RPQURUX05GU19VVElMIgorICAjZWNob19pbmZvICIjIEluc3RhbGwgYml0YmFrZSArIFVJOlx0XHQkWU9DVE9BRFRfQklUQkFLRSIKKyAgI2VjaG9faW5mbyAiIyBJbnN0YWxsIG1ldGFkYXRhOlx0JFlPQ1RPQURUX01FVEFEQVRBIgorICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisKKyAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBZb3VyIHJvb3RmcyBpbWFnZShzKSBhbmQgdGFyZ2V0IHN5c3Jvb3Qgc2VsZWN0aW9ucyBmcm9tIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKK3Byb21wdD0xCitmb3IgYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICBkb3dubG9hZF9pbWFnZXMgJGFyY2hfdHlwZSAkcHJvbXB0Citkb25lCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIHNlbGVjdF9pbnN0YWxsX3R5cGUKK30KKwordmFsaWRhdGVfY29uZmlnKCkKK3sKKworICBmb3Igc2VsZWN0ZWRfYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICAgIGZvdW5kPTAKKyAgICBzZWxlY3RfbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJHNlbGVjdGVkX2FyY2hfdHlwZSIKKyAgICBzZWxlY3RfbWFjaGluZT1gZXZhbCBlY2hvICRzZWxlY3RfbWFjaGluZV92YXJgCisgICAgc2hvd19lcnJvcl9iYW5uZXI9MAorCisgICAgZm9yIHN1cHBvcnRlZF9hcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTOyBkbworICAgICAgaWYgWyAiJHNlbGVjdGVkX2FyY2hfdHlwZSIgPT0gIiRzdXBwb3J0ZWRfYXJjaF90eXBlIiBdOyB0aGVuCisgICAgICAgIGZvdW5kPTEKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIFsgJGZvdW5kID09IDAgXTsgdGhlbgorICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVEFEVF9UQVJHRVRTIGluIGFkdF9pbnN0YWxsZXIuY29uZiBjb250YWlucyBpbnZhbGlkIGVudHJpZXM6ICRZT0NUT0FEVF9UQVJHRVRTLiBWYWxpZCB2YWx1ZXMgYXJlOiAkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFMiCisgICAgICAgc2hvd19lcnJvcl9iYW5uZXI9MQorICAgIGVsaWYgWyAteiAiJHNlbGVjdF9tYWNoaW5lIiBdOyB0aGVuCisgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBObyBNQUNISU5FIHdhcyBkZWZpbmVkIGZvciAkc2VsZWN0ZWRfYXJjaF90eXBlIGFyY2hpdGVjdHVyZSEgVGhpcyBpcyBuZWVkZWQgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluIGFuZCB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCBzZXR0aW5ncy4iCisgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIFRvIGRvIHRoYXQsIGluIGFkdC1pbnN0YWxsZXIuY29uZiwgc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6IFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyRzZWxlY3RlZF9hcmNoX3R5cGUiCisgICAgICAgc2hvd19lcnJvcl9iYW5uZXI9MQorICAgIGZpCisKKyAgICBpZiBbICRzaG93X2Vycm9yX2Jhbm5lciA9PSAxIF07IHRoZW4KKyAgICAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgIGV4aXQgLTEKKyAgICBmaQorICBkb25lCisKKyAgZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFM7IGRvCisgICAgI3NlbGVjdF90YXJnZXRfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF8kYXJjaF90eXBlIgorICAgICNzZWxlY3RfdGFyZ2V0PWBldmFsIGVjaG8gJHNlbGVjdF90YXJnZXRfdmFyYAorCisgICAgI2lmIFsgIiRzZWxlY3RfdGFyZ2V0IiAhPSAiWSIgXSB8fCBbICIkc2VsZWN0ZWRfdGFyZ2V0IiAhPSAieSIgXTsgdGhlbgorICAgICMgIGNvbnRpbnVlOworICAgICNmaQorCisgICAgdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyRhcmNoX3R5cGUiCisgICAgdGFyZ2V0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyYAorCisKKyAgICBzZWxlY3Rfcm9vdGZzX3Zhcj0iXCRZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSIKKyAgICBzZWxlY3Rfcm9vdGZzPWBldmFsIGVjaG8gJHNlbGVjdF9yb290ZnNfdmFyYAorCisgICAgaWYgWyAiJHNlbGVjdF9yb290ZnMiID09ICIiIF0gJiYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiIiBdOyB0aGVuCisgICAgICAgY29udGludWU7CisgICAgZmkKKworICAgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworI3ZhbGlkYXRlIHJvb3RmcyB0eXBlIGRlZmluZWQgaW4gWU9DVE9BRFRfUk9PVEZTX3tBUkNIfSBpcyB2YWxpZCBhbmQgaW4gWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUworICAgICAgZm91bmQ9MAorICAgICAgZm9yIHN1cHBvcnRlZF9yb290ZnNfdHlwZSBpbiAkWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUzsgZG8KKyAgICAgICAgaWYgWyAiJGltYWdlX3R5cGUiID09ICIkc3VwcG9ydGVkX3Jvb3Rmc190eXBlIiBdOyB0aGVuCisgICAgICAgICAgZm91bmQ9MQorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiBbICRmb3VuZCA9PSAwIF07IHRoZW4KKyN0aGUgcm9vdGZzIHR5cGUgbGlzdGVkIGZvciBkb3dubG9hZGluZyBpcyBub3QgdmFsaWQKKyAgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBTZWxlY3RlZCBZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSB2YWx1ZTogJGltYWdlX3R5cGUsIGlzIG5vdCB2YWxpZCEgVmFsaWQgdmFsdWVzIGFyZTogJFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlMgIgorICAgICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICAgIGV4aXQgLTEKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZm91bmQ9MAorICAgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworI3ZhbGlkYXRlIHRoYXQgcm9vdGZzIHRvIGJlIGV4dHJhY3RlZCBtdXN0IGJlIGluIHRoZSBpdGVtOiBZT0NUT0FEVF9ST09URlNfJHtBUkNIfQorICAgICAgaWYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiJGltYWdlX3R5cGUiIF07IHRoZW4KKyAgICAgICAgZm91bmQ9MQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisjIHRoZSByb290ZnMgaW1hZ2UgdG8gYmUgZXh0cmFjdGVkIGlzIG5vdCBzZWxlY3RlZAorICAgIGlmIFsgJGZvdW5kID09IDAgXTsgdGhlbgorICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kYXJjaF90eXBlIHNlbGVjdGlvbjogJHRhcmdldF9zeXNyb290X2ltYWdlIGlzIG5vdCBpbmNsdWRlZCBpbiBZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSBzZWxlY3Rpb25zOiAkc2VsZWN0X3Jvb3RmcyIKKyAgICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgZXhpdCAtMQorICAgIGZpCisgIGRvbmUKK30KKworCisjZGV0ZWN0IG9wa2cgaW5zdGFsbGVkIG9yIG5vdCwgZm9yIGluc3RhbGxpbmcgc2RrLCB3ZSB3aWxsIHVzZQorI3RoaXMgaW5zdGFsbGVkIGxvY2FsIG9wa2cKK2luc3RhbGxfb3BrZygpCit7CitpZiBbICEgLXggIiRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIgXTsgdGhlbgorICBlY2hvX2luZm8gIk9QS0cgaXMgbm90IHNldHVwLCBzZXR0aW5nIHVwIG9wa2cgaW4gbG9jYWwsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBpbnN0YWxsaW5nIHlvY3RvIEFEVC4uLlxuIgorCisgIGlmIFsgLWQgJExPQ0FMX09QS0dfTE9DIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIkRlbGV0aW5nIG9sZCBPUEtHIGZvbGRlciwgd2hpY2ggZG9lc24ndCBjb250YWluIGV4ZWN1dGFibGVzLi4uICIKKyAgICBybSAtcmYgJExPQ0FMX09QS0dfTE9DCisgIGZpCisKKyAgcGFyZW50X2ZvbGRlcj1gcHdkYAorICBjZCAkTE9DQUxfT1BLR19GT0xERVIKKyAgY2hlY2tfcmVzdWx0CisKKyAgb3BrZ19zb3VyY2VfZGlyPWBscyAtZCBvcGtnLSpgCisKKyAgaWYgWyAkb3BrZ19zb3VyY2VfZGlyID09ICIiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IE9QS0cgc291cmNlIGRpcmVjdG9yeSBpcyBub3QgZm91bmQhIgorICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAtMQorICBmaQorCisgIGNkICRvcGtnX3NvdXJjZV9kaXIKKyAgY2hlY2tfcmVzdWx0CisKKyAgZWNob19pbmZvICJDb25maWd1cmUgb3BrZyAuLi5cbiIKKyAgYXV0b3JlY29uZiAtaQorICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0kcGFyZW50X2ZvbGRlci8kTE9DQUxfT1BLR19MT0MgLS1lbmFibGUtc2hhcmVkPW5vIC0tZGlzYWJsZS1jdXJsIC0tZGlzYWJsZS1zc2wtY3VybCAtLWRpc2FibGUtZ3BnID4+ICRwYXJlbnRfZm9sZGVyLyRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorCisgIGVjaG9faW5mbyAiTWFrZSBvcGtnIC4uLlxuIgorICBtYWtlICY+PiAkcGFyZW50X2ZvbGRlci8kWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKKworICBlY2hvX2luZm8gIk1ha2UgSW5zdGFsbCBvcGtnIC4uLlxuIgorICBtYWtlIGluc3RhbGwgJj4+ICRwYXJlbnRfZm9sZGVyLyRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgICNpZiBtZWV0IGVycm9yIHdoZW4gaW5zdGFsbGluZyBvcGtnLCBjYW5jZWwgdGhlIGluc3RhbGxhdGlvbgorICBjaGVja19yZXN1bHQKKworICBjZCAkcGFyZW50X2ZvbGRlcgorICBlY2hvX2luZm8gIlN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgT1BLRy5cbiIKK2ZpCit9CisKK2NvbmZpcm1fZG93bmxvYWQoKQoreworI2F2b2lkIHJlcGVhdGVkIHJlbWluZGluZworaWYgWyAiJG92ZXJyaWRlX29sZGZpbGUiID09IDEgXTsgdGhlbgorICByZXR1cm4gJHByZV9yZXN1bHQKK2Vsc2UKKyAgb3ZlcnJpZGVfb2xkZmlsZT0xCitmaQorCit3aGlsZSB0cnVlOyBkbworICAjZWNob19pbmZvICJbQURUX0lOU1RdIEZpbGVzIFskMV0gYWxyZWFkeSBleGlzdHMuIElmIHlvdSBjb250aW51ZSBkb3dubG9hZGluZywgb2xkIGZpbGVzIHdpbGwgYmUgb3ZlcnJpZGVkLiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBGdXJ0aGVyIHByb21wdHMgd2lsbCBub3QgYmUgZ2l2ZW4gaWYgdGhlcmUncmUgbW9yZSBleGlzdGluZyBmaWxlcyB0byBiZSBkb3dubG9hZGVkLiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBEbyB5b3Ugd2FudCB0byBjb250aW51ZSBkb3dubG9hZGluZz8gUGxlYXNlIGVudGVyIFkvTjoiCisgIGVjaG9faW5mbyAiXG5GaWxlIFskMV0gYWxyZWFkeSBleGlzdHMsIHdoaWNoIG1lYW5zIHlvdSd2ZSBkb3dubG9hZGVkIHRoZSBxZW11IGtlcm5lbCBhbmQgcm9vdGZzIGZpbGUocykgYmVmb3JlLiAgSWYgeW91IGNob29zZSBjb250aW51ZSBkb3dubG9hZGluZywgb2xkIGZpbGVzIHdpbGwgYmUgb3ZlcnJpZGRlbi4iCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBEbyB5b3Ugd2FudCB0byBjb250aW51ZSBkb3dubG9hZGluZz8gUGxlYXNlIGVudGVyIFkvTjoiCisgIHJlYWQgWU9DVE9BRFRfSU5TVEFMTAorICBZT0NUT0FEVF9JTlNUQUxMPWB0ciAnW2Etel0nICdbQS1aXSc8PDwiJFlPQ1RPQURUX0lOU1RBTEwiYAorICBpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIlkiIF07IHRoZW4KKyAgICBwcmVfcmVzdWx0PTAKKyAgICByZXR1cm4gMAorICBlbGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiTiIgXTsgdGhlbgorICAgIHByZV9yZXN1bHQ9MQorICAgIHJldHVybiAxCisgIGZpCitkb25lCit9CisKK2Rvd25sb2FkX2ZpbGUoKQoreworbG9jYWwgZmlsZW5hbWU9YGVjaG8gJHsxIyMqL31gCitpZiBbIC1mICIkTE9DQUxfRE9XTkxPQUQvJGZpbGVuYW1lIiBdOyB0aGVuCisgIGNvbmZpcm1fZG93bmxvYWQgJGZpbGVuYW1lCisgIHJlc3VsdD0iJD8iCisgIGlmIFsgISAiJHJlc3VsdCIgPT0gIjAiIF07IHRoZW4KKyAgICByZXR1cm4KKyAgZWxzZQorICAgIGVjaG8gIlJlbW92aW5nIG9sZCBmaWxlIFskMV0iCisgICAgcm0gLXJmICIkTE9DQUxfRE9XTkxPQUQvJGZpbGVuYW1lIiAKKyAgZmkKK2ZpCitlY2hvX2luZm8gIkRvd25sb2FkaW5nIGZpbGU6ICRmaWxlbmFtZS4uLiIKK3dnZXQgIiRZT0NUT0FEVF9SRVBPL3Jvb3Rmcy8kMSIgLVAgJExPQ0FMX0RPV05MT0FEIC0tcHJvZ3Jlc3M9YmFyOmZvcmNlIDI+JjEgfCB0ZWUgLWEgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIiAKK30KKworCisKKyNOZWVkIHRocmVlIGlucHV0IHBhcmFtczoKKyMgJDEgYXJjaF90eXBlKGFybSBwb3dlcnBjIHg4NiBtaXBzKQorIyAkMiBtYWNoaW5lKHFlbXVhcm0gYmVhZ2xlYm9hcmQpCisjICQzIHJvb3Rmc19pbWFnZV90eXBlIChhIGxpc3Qgb2Ygc2RrIHNhdG8gbWluaW1hbCBsc2IpCitnZXRfaW1hZ2UoKQoreworICBsb2NhbCBtYWNoaW5lPSQyCisgCisgIGlmIFsgIiQxIiA9PSAieDg2IiBdIHx8IFsgIiQxIiA9PSAieDg2XzY0IiBdOyB0aGVuCisgICAga2VybmVsPSJiekltYWdlLSRtYWNoaW5lLmJpbiIKKyAgZWxpZiBbICIkMSIgPT0gInBwYyIgXSB8fCBbICIkMSIgPT0gIm1pcHMiIF07IHRoZW4KKyAgICBrZXJuZWw9InZtbGludXgtJG1hY2hpbmUuYmluIgorICBlbHNlCisgICAga2VybmVsPSJ6SW1hZ2UtJG1hY2hpbmUuYmluIgorICBmaQorCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG93bmxvYWRpbmcgcWVtdSBrZXJuZWwgYmluYXJ5OiAkcWVtdV9rZXJuZWwiCisgIGRvd25sb2FkX2ZpbGUgJG1hY2hpbmUvJGtlcm5lbAorICBjaGVja19yZXN1bHQKKyAgCisgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworICAgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG93bmxvYWRpbmcgcm9vdGZzIGZpbGU6IGNvcmUtaW1hZ2UtJGltYWdlX3R5cGUtJG1hY2hpbmUudGFyLmJ6MiIKKyAgICBmaWxlbmFtZT0iY29yZS1pbWFnZS0kaW1hZ2VfdHlwZS0kbWFjaGluZS50YXIuYnoyIgorICAgIGRvd25sb2FkX2ZpbGUgJG1hY2hpbmUvJGZpbGVuYW1lCisgICAgY2hlY2tfcmVzdWx0CisgIGRvbmUKK30KKworZG93bmxvYWRfaW1hZ2VzKCkKK3sKKyAgc2VsZWN0X3Jvb3Rmc192YXI9IlwkWU9DVE9BRFRfUk9PVEZTXyQxIgorICBzZWxlY3Rfc3lzcm9vdF9pbWFnZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEiCisgIHNlbGVjdF9zeXNyb290X3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfJDEiCisgIHNlbGVjdF9tYWNoaW5lX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kMSIKKyAgc2VsZWN0X3Jvb3Rmcz1gZXZhbCBlY2hvICRzZWxlY3Rfcm9vdGZzX3ZhcmAKKyAgc2VsZWN0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkc2VsZWN0X3N5c3Jvb3RfaW1hZ2VfdmFyYAorICBzZWxlY3Rfc3lzcm9vdD1gZXZhbCBlY2hvICRzZWxlY3Rfc3lzcm9vdF92YXJgCisgIHNlbGVjdF9tYWNoaW5lPWBldmFsIGVjaG8gJHNlbGVjdF9tYWNoaW5lX3ZhcmAKKworICBpZiBbIC1uICIkc2VsZWN0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBzZWxlY3Rfc3lzcm9vdD1gcmVhZGxpbmsgLW0gJHNlbGVjdF9zeXNyb290YAorICBmaQorCisgIGlmIFsgIiRzZWxlY3Rfcm9vdGZzIiAhPSAiIiBdOyB0aGVuCisgICAgaWYgWyAkMiBdOyB0aGVuCisgICAgI2VjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICNlY2hvX2luZm8gIiMgVG8gYmUgZG93bmxvYWRlZCByb290ZnMgaW1hZ2UgZGV0YWlscyBkZWZpbmVkIGluIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgYXJjaGl0ZWN0dXJlOlx0XHQkMSIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IG1hY2hpbmU6XHRcdCRzZWxlY3RfbWFjaGluZSIKKyAgICBlY2hvX2luZm8gIiMgUm9vdF9mcyBpbWFnZXM6XHRcdCRzZWxlY3Rfcm9vdGZzIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgc3lzcm9vdCBpbWFnZTpcdFx0JHNlbGVjdF9zeXNyb290X2ltYWdlIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgc3lzcm9vdCBsb2M6XHRcdCRzZWxlY3Rfc3lzcm9vdCIKKyAgICBlY2hvX2luZm8gIlxuIgorICAgICNlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBlbHNlCisgICAgZ2V0X2ltYWdlICQxICRzZWxlY3RfbWFjaGluZSAkc2VsZWN0X3Jvb3RmcworICAgIGZpCisgIGZpCit9CisKKworCisKKyNNYWluIGJvZHkgb2YgaW5zdGFsbGVyCisKK2NsZWFyCisKK3J1bl9wYXRoPWBkaXJuYW1lICQwYAorY2QgJHJ1bl9wYXRoCisKK2lmIFsgISAtZiAic2NyaXB0cy91dGlsIiBdOyB0aGVuCisgIGVjaG8gLWUgIltBRFRfSU5TVF0gRXJyb3I6IFNjcmlwdCBmaWxlOiB1dGlsLCBjYW4ndCBiZSBmb3VuZCB1bmRlcjogJHJ1bl9wYXRoISIKKyAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCitpZiBbICEgLWYgInNjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCIgXTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBTY3JpcHQgZmlsZTogYWR0X2luc3RhbGxlcl9pbnRlcm5hbCwgY2FuJ3QgYmUgZm91bmQgdW5kZXI6ICRydW5fcGF0aCEiCisgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworY29uZmlnX2ZpbGU9ImFkdF9pbnN0YWxsZXIuY29uZiIKK2lmIFsgISAtZiAiJGNvbmZpZ19maWxlIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogSW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZTogYWR0X2luc3RhbGxlci5jb25mIGlzIG5vdCBmb3VuZCFcbiIKKyAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQuIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworLiBzY3JpcHRzL2RhdGFfZGVmaW5lCisuIHNjcmlwdHMvdXRpbAorCisKK2lmIFsgLWYgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIiBdOyB0aGVuCisgIHJtICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCitmaQorCitlY2hvIC1uICJQbGVhc2UgZW50ZXIgdGhlIGluc3RhbGwgbG9jYXRpb24gKGRlZmF1bHQ6ICRERUZBVUxUX0lOU1RBTExfRk9MREVSKTogIgorcmVhZCBJTlNUQUxMX0ZPTERFUgorCitpZiBbICIkSU5TVEFMTF9GT0xERVIiID0gIiIgXTsgdGhlbgorICAgIElOU1RBTExfRk9MREVSPSRERUZBVUxUX0lOU1RBTExfRk9MREVSCitmaQorCitldmFsIElOU1RBTExfRk9MREVSPSQocHJpbnRmICIlcSIgIiRJTlNUQUxMX0ZPTERFUiIpCitpZiBbIC1kICIkSU5TVEFMTF9GT0xERVIiIF07IHRoZW4KKwlleHBvcnQgSU5TVEFMTF9GT0xERVI9JChjZCAiJElOU1RBTExfRk9MREVSIjsgcHdkKQorZWxzZQorCWV4cG9ydCBJTlNUQUxMX0ZPTERFUj0kKHJlYWRsaW5rIC1tICIkSU5TVEFMTF9GT0xERVIiKQorZmkKKworaWYgWyAtbiAiJChlY2hvICRJTlNUQUxMX0ZPTERFUnxncmVwICcgJykiIF07IHRoZW4KKyAgICAgICBlY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkSU5TVEFMTF9GT0xERVIpIGNvbnRhaW5zIHNwYWNlcy4gQWJvcnQhIgorICAgICAgIGV4aXQgMQorZmkKKworY2xlYXIKKwordXNhZ2UKKwordXNlcl9pbnN0X3R5cGU9IiQ/IgorCit2YWxpZGF0ZV9jb25maWcKK2NoZWNrX3Jlc3VsdAorCisjY2hlY2sgYWR0X3JlcG8gZXhpc3QKK3dnZXQgLS1zcGlkZXIgJFlPQ1RPQURUX1JFUE8gMj4mMSB8IHRlZSAtYSAiJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUiCitpZiBncmVwIC1xICI0MDQgTm90IEZvdW5kIiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9SRVBPIGRvZXMgbm90IGV4aXN0OiAkWU9DVE9BRFRfUkVQTyIKKyAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCisjZmlyc3RseSB3ZSBuZWVkIHRvIGluc3RhbGwgb3BrZyBob3N0CitpbnN0YWxsX29wa2cKKworI0NyZWF0ZSBmb2xkZXJzIGZvciBob2xkaW5nIHJvb3Rmcy9xZW11IGltYWdlcworaWYgWyAhIC1kICIkTE9DQUxfRE9XTkxPQUQiIF07IHRoZW4KKyAgZWNob19pbmZvICJDcmVhdGluZyBuZXcgaW1hZ2VzIGRvd25sb2FkaW5nIGZvbGRlcjogJExPQ0FMX0RPV05MT0FEIC4uLiIKKyAgbWtkaXIgLXAgJExPQ0FMX0RPV05MT0FECitmaQorCisjZG93bmxvYWRpbmcgcmVxdWlyZWQgcWVtdSBpbWFnZXMvcm9vdGZzCitpZiBbICIkdXNlcl9pbnN0X3R5cGUiID09ICIwIiBdOyB0aGVuCisgIG92ZXJyaWRlX29sZGZpbGU9MQorZWxzZQorICBvdmVycmlkZV9vbGRmaWxlPTAKK2ZpCisKK2ZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIGRvd25sb2FkX2ltYWdlcyAkYXJjaF90eXBlCitkb25lCisKK3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCAkdXNlcl9pbnN0X3R5cGUKKworcmVzdWx0PSIkPyIKKyNlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgoraWYgWyAiJHJlc3VsdCIgPT0gIjAiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFlvY3RvIEFEVCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKK2ZpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjdmYmQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mCkBAIC0wLDAgKzEsNzUgQEAKKyMgWW9jdG8gQURUIEluc3RhbGxlciBDb25maWd1cmF0aW9uIEZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKKworIyBZb3VyIHlvY3RvIGRpc3RybyByZXBvc2l0b3J5LCB0aGlzIHNob3VsZCBpbmNsdWRlIElQS0cgYmFzZWQgcGFja2FnZXMgYW5kIHJvb3QgZmlsZXN5c3RlbSBmaWxlcyB3aGVyZSB0aGUgaW5zdGFsbGF0aW9uIGlzIGJhc2VkIG9uCisKK1lPQ1RPQURUX1JFUE89IkFEVFJFUE8iCisKKyMgVGhlIGZvbGxvd2luZyBhcmUgZm9yIHN5c3RlbSB3aWRlIHNldHVwCisjIFRhcmdldCBhcmNoaXRlY3R1cmVzIHRoYXQgeW91IHdhbnQgdG8gc2V0dXAgaG9zdCBjcm9zcyBkZXYgZW52aXJvbm1lbnQgZm9yCisjIHZhbGlkIHZhbHVlcyBhcmU6IGFybSwgeDg2LCB4ODZfNjQsIHBwYywgbWlwcyB3aXRoIHNwYWNlIHNlcGFyYXRpb24gYmV0d2VlbiBlbnRyaWVzCitZT0NUT0FEVF9UQVJHRVRTPSJhcm0geDg2IgorIyBXaGV0aGVyIGluc3RhbGwgcWVtdSBvciBub3QsIHZhbGlkIGVudHJpZXMgYXJlOiBZL04KK1lPQ1RPQURUX1FFTVU9IlkiCisjIFdoZXRoZXIgaW5zdGFsbCB1c2VyLW1vZGUgbmZzIG9yIG5vdCwgdmFsaWQgZW50cmllcyBhcmU6IFkvTi4gIElmIHlvdSB3YW50IHRvIHVzZSBZb2N0byBFY2xpcHNlIHBsdWctaW4gYXMgeW91ciBkZXYgSURFLCB5b3UgbmVlZCB0byBzZWxlY3QgYm90aCBxZW11IGFuZCBORlMKK1lPQ1RPQURUX05GU19VVElMPSJZIgorCisjIFRoZXNlIDIgdmFsdWVzIHdpbGwgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXJ0dXJlIGluc3RhbGxlcgorI1lPQ1RPQURUX0JJVEJBS0U9IlkiCisjWU9DVE9BRFRfTUVUQURBVEE9IlkiCisKKyNUaGUgZm9sbG93aW5ncyBhcmUgZm9yIHNldHRpbmcgdXAgc3BlY2lmaWMgdGFyZ2V0IGFyY2hpdGVjdHVyZQorI1lPQ1RPQURUX1JPT1RGU18kYXJjaCBpcyBmb3Igc3BlY2lmeWluZyB3aGF0IHJvb3QgZmlsZXN5c3RlbSBpbWFnZSBmaWxlcyB5b3Ugd2FudCB0byBkb3dubG9hZCBmcm9tIHRoZSByZXBvc2l0b3J5LiBUaGUgdmFsaWQgdmFsdWVzIHRvIHJlcGxhY2UgJGFyY2ggYXJlOiBhcm0sIHg4NiwgeDg2XzY0LCBwb3dlcnBjLCBtaXBzLiAgVGhlIHZhbGlkIGltYWdlIGZpbGVzIGFyZTogbWluaW1hbCwgbWluaW1hbC1kZXYsIHNhdG8sIHNhdG8tZGV2LCBzYXRvLXNkayxsc2IsIGxzYi1kZXYsIGxzYi1zZGsuICBJZiB5b3Ugd2FudCB0byBkb3dubG9hZCBtdWx0aXBsZSBpbWFnZXMsIHRoZSBlbnRyaWVzIGFyZSBzcGFjZSBzZXBhcmF0ZWQKK1lPQ1RPQURUX1JPT1RGU19hcm09Im1pbmltYWwgc2F0by1zZGsiCisjU3BlY2lmeSB3aGljaCByb290IGZpbGVzeXN0ZW0gZmlsZSB0byB1c2UgdG8gZXh0cmFjdCBhcyB0YXJnZXQgc3lzcm9vdC4gIFBsZWFzZSBlbnN1cmUgdGhlIGVudHJ5IGlzIGluIHRoZSBsaXN0IG9mIGRvd25sb2FkZWQgcm9vdCBmaWxlc3lzdGVtIGZpbGVzIHRoYXQgc3BlY2lmaWVkIGFib3ZlIGluIFlPQ1RPQURUX1JPT1RGU18kYXJjaAorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfYXJtPSJzYXRvLXNkayIKKyNUaGUgbWFjaGluZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZG93bmxvYWQgdGhlIGltYWdlLiBFYWNoIG1hY2hpbmUgbWlnaHQgaGF2ZQorI2RpZmZlcmVudCBjb21waWxhdGlvbiBvcHRpb25zIGluIG9yZGVyIHRvIHNlbGVjdCBjZXJ0YWluIGhhcmR3YXJlIG1vZGVscyBvcgorI2NvbmZpZ3VyYXRpb25zCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9hcm09InFlbXVhcm0iCisjVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSB0YXJnZXQgc3lzcm9vdCB3aWxsIGJlIHNldHVwCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfYXJtPSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9hcm0iCisKKworI0hlcmUncyBhIHRlbXBsYXRlIGZvciBzZXR0aW5nIHVwIHRhcmdldCBhcmNoIG9mIHg4NiAKK1lPQ1RPQURUX1JPT1RGU194ODY9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfeDg2PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4Nj0icWVtdXg4NiIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ194ODY9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4NiIKKworI0hlcmUncyBzb21lIHRlbXBsYXRlIG9mIG90aGVyIGFyY2hlcywgd2hpY2ggeW91IG5lZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBpbiAiIgorWU9DVE9BRFRfUk9PVEZTX3g4Nl82ND0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV94ODZfNjQ9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2XzY0PSJxZW11eDg2LTY0IgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX3g4Nl82ND0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2XzY0IgorCitZT0NUT0FEVF9ST09URlNfcHBjPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX3BwYz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9wcGM9InFlbXVwcGMiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfcHBjPSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9wcGMiCisKK1lPQ1RPQURUX1JPT1RGU19taXBzPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX21pcHM9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfbWlwcz0icWVtdW1pcHMiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfbWlwcz0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfbWlwcyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2MjdiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYKQEAgLTAsMCArMSw2IEBACithcmNoIGFsbCAxCithcmNoIGFueSA2CithcmNoIG5vYXJjaCAxMQorYXJjaCBpNjg2LW5hdGl2ZXNkayAxNgorc3JjIHlwLWk2ODYtbmF0aXZlc2RrIEFEVFJFUE9fVVJML2FkdC1pcGsvaTY4Ni1uYXRpdmVzZGsKK3NyYyB5cC1pNjg2LWFsbCBBRFRSRVBPX1VSTC9hZHQtaXBrL2FsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTA0YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYKQEAgLTAsMCArMSw2IEBACithcmNoIGFsbCAxCithcmNoIGFueSA2CithcmNoIG5vYXJjaCAxMQorYXJjaCB4ODZfNjQtbmF0aXZlc2RrIDE2CitzcmMgeXAteDg2XzY0LW5hdGl2ZXNkayBBRFRSRVBPX1VSTC9hZHQtaXBrL3g4Nl82NC1uYXRpdmVzZGsKK3NyYyB5cC14ODZfNjQtYWxsIEFEVFJFUE9fVVJML2FkdC1pcGsvYWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmY1ZmI0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbApAQCAtMCwwICsxLDMxMiBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitwYXJzZV9jb25maWcoKQoreworICBJTlNUX0FSQ0g9YHVuYW1lIC1tYAorCisgIGNhc2UgJElOU1RfQVJDSCBpbiAKKyAgaVszLTZdODYpCisgICAgT1BLR19DT05GSUdfRklMRT0kWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfMzIKKyAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiRJTlNUQUxMX0ZPTERFUi9zeXNyb290cy8kSU5TVF9BUkNIJFNES19WRU5ET1ItbGludXgvIgorICAgIDs7CisgIHg4Nl82NCkKKyAgICBPUEtHX0NPTkZJR19GSUxFPSRZT0NUT0FEVF9PUEtHX0NPTkZfRklMRV82NAorICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD0iJElOU1RBTExfRk9MREVSL3N5c3Jvb3RzL3g4Nl82NCRTREtfVkVORE9SLWxpbnV4LyIKKyAgICA7OworICAqKQorICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogSW5zdGFsbGF0aW9uIE1hY2hpbmUgaXMgbm90IHN1cHBvcnRlZCEiCisgICAgZXhpdCAtMQorICAgIDs7CisgIGVzYWMKK30KKworZ2V0X3N1ZG9fYXBwKCkKK3sKKyAgdXNlcm5hbWU9JChpZCAtbnUpCisKKyAgIyBmaW5kIHRoZSBvd25lciBvZiB0aGUgcGFyZW50CisgIGRpcj0kMQorICB3aGlsZSBbIDEgXTsgZG8KKyAgICAgIGlmIFsgLWQgJGRpciBdOyB0aGVuCisgICAgICAgICAgb3duZXI9JChzdGF0IC1jICVVICRkaXIpCisgICAgICAgICAgYnJlYWsKKyAgICAgZWxzZQorICAgICAgICAgIGRpcj0kKGRpcm5hbWUgJGRpcikKKyAgICAgZmkKKyAgZG9uZQorCisgIGlmIFsgIiRvd25lciIgPSAiJHVzZXJuYW1lIiBdOyB0aGVuCisgICAgICB0cnVlCisgIGVsc2UKKyAgICAgIGVjaG8gc3VkbworICBmaQorfQorCisjIHRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhcmNoX3R5cGUgKHg4NiwgeDg2XzY0LCBhcm0sIHBwYywgbWlwcykgYXMgdGhlIGZpcnN0CisjIGFyZ3VtZW50LCByZXR1cm5pbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSB0YXJnZXQgcm9vdGZzCitnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbigpIHsKKwlbIC16ICIkMSIgXSAmJiByZXR1cm4KKworCWFyY2hfdHlwZT0kMQorCSMgcm9vdGZzIGV4dHJhY3Rpb24gZGlyZWN0b3J5CisJdGFyZ2V0X3N5c3Jvb3RfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ18kYXJjaF90eXBlIgorCXRhcmdldF9zeXNyb290PWBldmFsIGVjaG8gJHRhcmdldF9zeXNyb290X3ZhcmAKKworCWlmIFsgIiR0YXJnZXRfc3lzcm9vdCIgPT0gIiIgXTsgdGhlbgorCQlyZXR1cm4KKwllbHNlCisJCWVjaG8gImByZWFkbGluayAtbSAkdGFyZ2V0X3N5c3Jvb3RgIgorCWZpCit9CisKKworI2xldCB1cyBpbnN0YWxsIGEgcWVtdS1uYXRpdmUgZmlyc3RseQorI2luc3RhbGxhdGlvbiBzdGVwIDIKK2luc3RhbGxfbmF0aXZlX3NkaygpCit7CisKK2VjaG9faW5mbyAiXG5TdGFydCBpbnN0YWxsaW5nIHNlbGVjdGVkIG5hdGl2ZSBBRFQgZm9yIGFyY2hzOiAkWU9DVE9BRFRfVEFSR0VUUy4uLiIKKworIyB3aGVyZSB0aGUgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KK05BVElWRV9JTlNUQUxMX0RJUj0kSU5TVEFMTF9GT0xERVIKKworaWYgWyAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5OYXRpdmUgQURUIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgXCIkSU5TVEFMTF9GT0xERVJcIiBhbHJlYWR5IGV4aXN0cyEgQ29udGludWUgaW5zdGFsbGF0aW9uIHdpbGwgb3ZlcnJpZGUgaXRzIGNvbnRlbnRzISIKKyAgY29uZmlybV9pbnN0YWxsICQxCitmaQorCisjTm93IGJlZ2luIHRvIGluc3RhbGwgbmF0aXZlIHNkayBhbmQgZXh0cmFjdCBxZW11IHJvb3RmcyB3aGljaCBuZWVkcyBwcml2aWxlZ2UgcmlnaHRzCisjZGVwZW5kaW5nIG9uIHRoZSBpbnN0YWxsIGxvY2F0aW9uCitTVURPPSQoZ2V0X3N1ZG9fYXBwICROQVRJVkVfSU5TVEFMTF9ESVIpCitpZiBbIC1uICIkU1VETyIgXTsgdGhlbgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIlBsZWFzZSBub3RlIGZyb20gdGhpcyBwb2ludCBvbiBpbnN0YWxsYXRpb24gcmVxdWlyZXMgc3VkbyBwYXNzd29yZCAuLi4iCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCitmaQorCisjd2UgbmVlZCB0byBtYWtlIHRoaXMgZGlyZWN0b3J5IGZpcnN0bHkgc2luY2Ugb3BrZyBuZWVkIHRvIHVzZSBpdC4KK09QS0dfTE9DS19ESVI9IiROQVRJVkVfSU5TVEFMTF9ESVIvJE9QS0dfTElCRElSL29wa2ciCitpZiBbICEgLWQgIiRPUEtHX0xPQ0tfRElSIiBdOyB0aGVuCisgICRTVURPIG1rZGlyIC1wICRPUEtHX0xPQ0tfRElSCisgIGVjaG9faW5mbyAiU3VjY2Vzc2Z1bGx5IGNyZWF0ZSBkaXJlY3RvcnkgJE9QS0dfTE9DS19ESVIuICIKKyNpZiB1c2VyIGRlbGV0ZSAvb3B0L3h4eCwgd2hpbGUgZGFuZ2xpbmcgZm9sZGVycyB0aGVyZSwgcmVwb3J0IGVycm9yCitlbGlmIFsgISAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5EYW5nbGluZyBvcGtnIGNhY2hlIGZvbGRlciAkT1BLR19MT0NLX0RJUiBkZXRlY3RlZC4gQ29udGludWUgaW5zdGFsbGF0aW9uIHdpbGwgcmVtb3ZlIHRoZSBmb2xkZXIhIgorICBjb25maXJtX2luc3RhbGwgJDEKKyAgJFNVRE8gcm0gLXJmICRPUEtHX0xPQ0tfRElSCisgICRTVURPIG1rZGlyIC1wICRPUEtHX0xPQ0tfRElSCisjaWYgdXNlciBhcmUgdXBkYXRpbmcgaW5zdGFsbGluZywganVzdCBsZXQgaGltL2hlciBnbywgZ2l2ZSBoZXIvaGltIHByb21wdAorZWxzZQorICBlY2hvX2luZm8gIkFEVCBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZC4gV2lsbCB1cGRhdGUgaXRzIGNvbnRlbnRzLi4uIgorZmkKKworI2ZpcnN0IHVwZGF0ZSByZXBvc2l0b3J5CitpZiBbICJ4JFNVRE8iID0gIngiIF07IHRoZW4KKyAgICBPUEtHX0NNRD0iJExPQ0FMX09QS0dfTE9DL2Jpbi9vcGtnIgorZWxzZQorICAgIE9QS0dfQ01EPSJzdWRvIC1FICRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIKK2ZpCisKK2VjaG9faW5mbyAiVXBkYXRpbmcgb3BrZy4uLiIKKyRPUEtHX0NNRCAtZiAkT1BLR19DT05GSUdfRklMRSAtbyAkTkFUSVZFX0lOU1RBTExfRElSIHVwZGF0ZSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKK2NoZWNrX3Jlc3VsdAorZWNob19pbmZvICJvcGtnIHVwZGF0ZSBwcm9jZXNzIGVuZGVkLi4uIgorCisjaW5zdGFsbCBiZWxvdyBtdXN0IHNkay1ob3N0IHBhY2thZ2VzCitPUEtHX0lOU1RBTExfQ01EPSIkT1BLR19DTUQgIgorT1BLR19JTlNUQUxMX05BVElWRV9DTUQ9IiRPUEtHX0lOU1RBTExfQ01EICAtLWZvcmNlLW92ZXJ3cml0ZSAtZiAkT1BLR19DT05GSUdfRklMRSAtbyAkTkFUSVZFX0lOU1RBTExfRElSIGluc3RhbGwiCisKK0JBU0VfSE9TVFNES19QS0dOQU1FUz0icHNldWRvIG9wa2cgcGtnY29uZmlnIGxpYnRvb2wgYXV0b2NvbmYgYXV0b21ha2UiCitmb3IgcGtnIGluICRCQVNFX0hPU1RTREtfUEtHTkFNRVM7IGRvCisgIGVjaG9faW5mbyAiSW5zdGFsbGluZyAke3BrZ30gbmF0aXZlc2RrIC4uLlxuIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLSR7cGtnfSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0Citkb25lCisKK2ZvciB0YXJnZXRfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJHRhcmdldF90eXBlIgorICBtYWNoaW5lPWBldmFsIGVjaG8gJG1hY2hpbmVfdmFyYAorICBlY2hvX2luZm8gIkluc3RhbGxpbmcgY3Jvc3MgY2FuYWRpYW4gcGFja2FnZXMgZm9yICRtYWNoaW5lIC4uLiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0kbWFjaGluZSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisKKyAgdGFyZ2V0X3N5c3Jvb3Q9YGdldF90YXJnZXRfcm9vdGZzX2xvY2F0aW9uICR0YXJnZXRfdHlwZWAKKyAgWyAteiAiJHRhcmdldF9zeXNyb290IiBdICYmIGNvbnRpbnVlCisKKyAgIyBnZXQgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBwYXRoczogb3JpZ2luYWwgKHRoZSBvbmUgYmVmb3JlIHJlbG9jYXRpb24pCisgICMgYW5kIHJlbG9jYXRlZAorICBlbnZfc2NyaXB0X29yaWdpbmFsPWAkT1BLR19DTUQgLWYgJE9QS0dfQ09ORklHX0ZJTEUgLW8gJE5BVElWRV9JTlNUQUxMX0RJUiBmaWxlcyBtZXRhLWVudmlyb25tZW50LSRtYWNoaW5lfFwKKwkJCQkJCQlncmVwIGVudmlyb25tZW50LXNldHVwYAorICBlbnZfc2NyaXB0X3JlbG9jYXRlZD0kSU5TVEFMTF9GT0xERVIvJHtlbnZfc2NyaXB0X29yaWdpbmFsIyMqL30KKworICAjIG9wa2cgd2lsbCBub3QgaW5zdGFsbCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4gcGFja2FnZSBpZiBpdCB3YXMgYWxyZWFkeQorICAjIGluc3RhbGxlZC4gU28sIHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgaXMgaW4gb25lIHBsYWNlIG9yIHRoZSBvdGhlci4KKyAgWyAtZSAiJElOU1RBTExfRk9MREVSLyRlbnZfc2NyaXB0X29yaWdpbmFsIiBdICYmIGVudl9zY3JpcHQ9JElOU1RBTExfRk9MREVSLyRlbnZfc2NyaXB0X29yaWdpbmFsCisgIFsgLWUgIiRlbnZfc2NyaXB0X29yaWdpbmFsIiBdICYmIGVudl9zY3JpcHQ9JGVudl9zY3JpcHRfb3JpZ2luYWwKKyAgWyAtZSAiJGVudl9zY3JpcHRfcmVsb2NhdGVkIiBdICYmIGVudl9zY3JpcHQ9JGVudl9zY3JpcHRfcmVsb2NhdGVkCisKKyAgJFNVRE8gc2VkIC1pIC1lICJzJVNES1RBUkdFVFNZU1JPT1Q9LiolU0RLVEFSR0VUU1lTUk9PVD0kdGFyZ2V0X3N5c3Jvb3QlZyIgJGVudl9zY3JpcHQKK2RvbmUKKworaWYgWyAiJFlPQ1RPQURUX1FFTVUiID09ICJZIiBdIHx8IFsgIiRZT0NUT0FEVF9RRU1VIiA9PSAieSIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuSW5zdGFsbGluZyBxZW11IG5hdGl2ZSAuLi4iCisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstcWVtdSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstcWVtdS1oZWxwZXIgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorZmkKKworaWYgWyAiJFlPQ1RPQURUX05GU19VVElMIiA9PSAiWSIgXSB8fCBbICIkWU9DVE9BRFRfTkZTX1VUSUwiID09ICJ5IiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5JbnN0YWxsaW5nIHVuZnMgLi4uIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLXVuZnMzICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKK2ZpCisKKyMgTG9zZSB0aGUgLi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IHBhcnQsIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGtlZXAKKyMgdGhlIGVudGlyZSBkaXJlY3Rvcnkgc3RydWN0dXJlLiBXZSBjb3VsZCBwYXRjaCBvcGtnIHRvIGRvIHRoYXQgYnV0IGl0J3MgZmFyCisjIHNpbXBsZXIgdG8gZG8gdGhhdCBoZXJlIGFuZCBhY2hpZXZlIHRoZSBzYW1lIHJlc3VsdC4KKyMgVGhpcyBpcyBkb25lIGluIHR3byBzdGVwczoKK2lmIFsgLWQgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUiBdOyB0aGVuCisgICAgIyBTdGVwIDE6IGNvcHkgLi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IGNvbnRlbnRzIHRvICROQVRJVkVfSU5TVEFMTF9ESVIuCisgICAgIyBXZSBjYW5ub3QgdXNlIG1vdmUgaWYgJE5BVElWRV9JTlNUQUxMX0RJUiBpcyBub3QgZW1wdHkgKGZvciBleGFtcGxlOiBjb250YWlucworICAgICMgYW5vdGhlciBTREspCisgICAgJFNVRE8gY3AgLXIgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUi8qICROQVRJVkVfSU5TVEFMTF9ESVIKKworICAgICMgZGVsZXRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG5vdworICAgICRTVURPIHJtIC1yZiAkTkFUSVZFX0lOU1RBTExfRElSLyRERUZBVUxUX0lOU1RBTExfRk9MREVSLyoKKworICAgICMgU3RlcCAyOiBEZWxldGUgdGhlIC4vb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSBkaXJlY3RvcmllcyB0b28sIHRoZXkgc2hvdWxkIGJlIGVtcHR5CisgICAgZGlyPSROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIKKyAgICB3aGlsZSBbICIkZGlyIiAhPSAiJE5BVElWRV9JTlNUQUxMX0RJUiIgXTsgZG8KKyAgICAgICAgIyBpZiB0aGUgdXNlciBjaG9zZSAvIGFzIHRoZSBpbnN0YWxsIGZvbGRlciwgdGhlbiB3ZSBzaG91bGQgbGVhdmUgL29wdCBpbiBwbGFjZQorICAgICAgICBpZiBbICIkZGlyIiA9ICIvb3B0IiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorCisgICAgICAgICMgdHJ5IHRvIGRlbGV0ZSB0aGUgZGlyZWN0b3J5LCBvbmx5IGlmIGl0J3MgZW1wdHkKKyAgICAgICAgJFNVRE8gcm1kaXIgJGRpcgorICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisKKyAgICAgICAgIyBnbyB0byB0aGUgbmV4dCBkaXJlY3RvcnkKKyAgICAgICAgZGlyPSQoZGlybmFtZSAkZGlyKQorICAgIGRvbmUKKyAgICAjIFN0ZXAgMzogUmV3cml0ZSB0aGUgKi5saXN0IGZpbGVzIHRvIGNvbnRhaW4gdGhlIGNvcnJlY3QgcGF0aHMKKyAgICAkU1VETyBmaW5kICROQVRJVkVfSU5TVEFMTF9ESVIvdmFyL2xpYi9vcGtnIC10eXBlIGYgLWV4ZWMgc2VkIC1pIC1lICcjXiRERUZBVUxUX0lOU1RBTExfRk9MREVSIyROQVRJVkVfSU5TVEFMTF9ESVIjJyB7fSBcOworZmkKKworIyBMaW5rIHRoZSBsZC5zby5jYWNoZSBmaWxlIGludG8gdGhlIGhvc3RzIGZpbGVzeXN0ZW0KK2lmIFsgISAtZiAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9ldGMvbGQuc28uY2FjaGUiIF07IHRoZW4KK2VjaG9faW5mbyAiTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0IGZpbGVzeXN0ZW0iCiskU1VETyBsbiAtcyAvZXRjL2xkLnNvLmNhY2hlICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZXRjL2xkLnNvLmNhY2hlCitjaGVja19yZXN1bHQKK2ZpCisKKyMgcmVsb2NhdGUgYmluYXJpZXMKK2VjaG9faW5mbyAiXG5SZWxvY2F0aW5nIGJpbmFyaWVzIC4uLiIKK2VzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJERFRkFVTFRfSU5TVEFMTF9GT0xERVIgfHNlZCAtZSAiczpbXCtcLl06XFxcXFxcXFxcMDpnIikKKworIyBXZSBkb24ndCBjaGFuZ2UgdGhlIHNjcmlwdCBpbi1wbGFjZSBzaW5jZSB3ZSBtYXkgd2FudCB0aGUgdXNlciB0byByZS1ydW4KKyMgYWR0LWluc3RhbGxlciBzY3JpcHQKK3NlZCAtZSAiczojI0RFRkFVTFRfSU5TVEFMTF9ESVIjIzokZXNjYXBlZF9zZGtwYXRoOiIgc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgPiBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkKK2NobW9kICt4IHNjcmlwdHMvcmVsb2NhdGVfc2RrX3RtcC5weQorCitkbF9wYXRoPSQoZmluZCAkT0VDT1JFX05BVElWRV9TWVNST09UL2xpYiAtbmFtZSAibGQtbGludXgqIikKK2V4ZWN1dGFibGVfZmlsZXM9JChmaW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgLXR5cGUgZiAtcGVybSAvMTExKQorCiskU1VETyBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkgJElOU1RBTExfRk9MREVSICRkbF9wYXRoICRleGVjdXRhYmxlX2ZpbGVzCitjaGVja19yZXN1bHQKKworIyByZXBsYWNlIC9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IHdpdGggdGhlIGluc3RhbGwgZm9sZGVyIGluIGFsbCBjb25maWdzCitlbnZfc2V0dXBfc2NyaXB0PSQoZmluZCAkTkFUSVZFX0lOU1RBTExfRElSLyAtbmFtZSAiZW52aXJvbm1lbnQtc2V0dXAtKiIpCiskU1VETyBzZWQgLWkgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9GT0xERVI6JE5BVElWRV9JTlNUQUxMX0RJUjpnIiAkZW52X3NldHVwX3NjcmlwdAorCitmaW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgLXR5cGUgZiAtZXhlYyBmaWxlICd7fScgXDsgfCBncmVwICI6LipcKEFTQ0lJXHxzY3JpcHRcfHNvdXJjZVwpLip0ZXh0IiB8IFwKKyAgICBjdXQgLWQnOicgLWYxIHwgeGFyZ3MgJFNVRE8gc2VkIC1pIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6ZyIKKworIyBjaGFuZ2UgYWxsIHN5bWxpbmtzIHBvaW50aW5nIHRvIC9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059Citmb3IgbCBpbiAkKGZpbmQgJE5BVElWRV9JTlNUQUxMX0RJUiAtdHlwZSBsKTsgZG8KKyAgICAkU1VETyBsbiAtc2ZuICQocmVhZGxpbmsgJGx8c2VkIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6IikgJGwKK2RvbmUKKworIyBmaW5kIG91dCBhbGwgcGVybCBzY3JpcHRzIGluICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgYW5kIG1vZGlmeSB0aGVtCisjIHJlcGxhY2luZyB0aGUgaG9zdCBwZXJsIHdpdGggU0RLIHBlcmwuCitmb3IgcGVybF9zY3JpcHQgaW4gJCgkU1VETyBncmVwIC1tIDEgIl4jIS4qcGVybCIgLXJsICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QpOyBkbworICAgICRTVURPIHNlZCAtaSAtZSAiczpeIyEgKi91c3IvYmluL3BlcmwuKjojISAvdXNyL2Jpbi9lbnYgcGVybDpnIiAtZSBcCisgICAgICAgICJzOiAvdXNyL2Jpbi9wZXJsOiAvdXNyL2Jpbi9lbnYgcGVybDpnIiAkcGVybF9zY3JpcHQKK2RvbmUKKworZWNob19pbmZvICJcblN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgc2VsZWN0ZWQgbmF0aXZlIEFEVCEiCit9CisKKyNOZWVkIHRocmVlIGlucHV0IHBhcmFtcywgJDEgLS0gYXJjaF90eXBlKGFybSBwb3dlcnBjIHg4NiBtaXBzKSAjMiAtLSB1c2VyIGluc3RhbGxhdGlvbiB0eXBlCisjY3VzdG9tZXIgb3Igc2NpbGVudAorCitpbnN0YWxsX3RhcmdldCgpCit7CisKK3RhcmdldF9zeXNyb290PWBnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbiAkMWAKK1sgLXogIiR0YXJnZXRfc3lzcm9vdCIgXSAmJiByZXR1cm4gMAorCit0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEiCit0YXJnZXRfc3lzcm9vdF9pbWFnZT1gZXZhbCBlY2hvICR0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXJgCitpZiBbICIkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UiID09ICIiIF07IHRoZW4KKyAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kMSBzZWxlY3Rpb24gaXMgZW1wdHksIGZhaWxlZCB0byBjcmVhdGUgdGFyZ2V0IHN5c3Jvb3QhIgorICByZXR1cm4gMQorZmkKKworZWNob19pbmZvICJJbnN0YWxsaW5nIHRhcmdldCBzeXNyb290IGZvciBhcmNoOiAkMSwgcm9vdGZzIHR5cGU6ICR0YXJnZXRfc3lzcm9vdF9pbWFnZSwgbG9jYXRpb246ICR0YXJnZXRfc3lzcm9vdCIKKwordGFyZ2V0X21hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyQxIgordGFyZ2V0X21hY2hpbmU9YGV2YWwgZWNobyAkdGFyZ2V0X21hY2hpbmVfdmFyYAorc3lzcm9vdF9pbWFnZV9uYW1lPSJjb3JlLWltYWdlLSR0YXJnZXRfc3lzcm9vdF9pbWFnZS0kdGFyZ2V0X21hY2hpbmUudGFyLmJ6MiIKKyAgICAjZWNob19pbmZvICJFeHRyYWN0aW5nIHJvb3RmczogJHN5c3Jvb3RfaW1hZ2VfbmFtZSwgdXNpbmcgcHNldWRvLi4uIgorCisjIHN1ZG8gcGFzc3dvcmQgbWlnaHQgYmUgbmVlZGVkIHRvIGluc3RhbGwgdGhlIHRhcmdldCBzeXNyb290CitTVURPPSQoZ2V0X3N1ZG9fYXBwICR0YXJnZXRfc3lzcm9vdCkKKworJFNVRE8gc2NyaXB0cy9leHRyYWN0X3Jvb3RmcyAkc3lzcm9vdF9pbWFnZV9uYW1lICR0YXJnZXRfc3lzcm9vdCAkT0VDT1JFX05BVElWRV9TWVNST09UICR1c2VyX2luc3RfdHlwZQorY2hlY2tfcmVzdWx0Cit9CisKKworI01haW4gcGFydAorLiBzY3JpcHRzL2RhdGFfZGVmaW5lCisuIHNjcmlwdHMvdXRpbAorCitwYXJzZV9jb25maWcKKworI3NlY29uZGx5IHdlIHdpbGwgc3RhcnQgdG8gaW5zdGFsbCBuYXRpdmUgdG9vbHMKK3VzZXJfaW5zdF90eXBlPSQxCitpbnN0YWxsX25hdGl2ZV9zZGsgJHVzZXJfaW5zdF90eXBlCitjaGVja19yZXN1bHQKKworZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgaW5zdGFsbF90YXJnZXQgJGFyY2hfdHlwZQorICBjaGVja19yZXN1bHQKK2RvbmUKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2RhdGFfZGVmaW5lIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQ2NzE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZQpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vYmFzaAorCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKK2NvbmZpZ19maWxlPSJhZHRfaW5zdGFsbGVyLmNvbmYiCitzb3VyY2UgYHB3ZGAvJGNvbmZpZ19maWxlCisKK0xPQ0FMX09QS0dfTE9DPSIuL29wa2cvYnVpbGQvb3BrZyIKK0xPQ0FMX09QS0dfRk9MREVSPSIuL29wa2cvYnVpbGQiCisKKyMgTGlzdCBhbGwgc3VwcG9ydGVkIHJvb3QgZnMgdHlwZXMgYW5kIHRhcmdldCB0eXBlcywKKyMgaXQgd2lsbCBiZSB1c2VkIGluIHVzZXIgY29uZmlndXJhdGlvbiB2YWxpZGl0eSBjaGVja2luZworWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUz0ibWluaW1hbCBtaW5pbWFsLWRldiBzYXRvIHNhdG8tZGV2IHNhdG8tc2RrIGxzYiBsc2ItZGV2IGxzYi1zZGsiCitZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUz0ieDg2IHg4Nl82NCBhcm0gcHBjIG1pcHMiCisjIERpZmZlcmVudCBob3N0ICgzMiBiaXQgb3IgNjQgYml0KSB3aWxsIGhhdmUgZGlmZmVyZW50IG9wa2cKKyMgY29uZmlndXJhdGlvbiBmaWxlcworWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfMzI9Ii4vb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZiIKK1lPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzY0PSIuL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZXh0cmFjdF9yb290ZnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxYTU5NWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworZXh0cmFjdF9yb290ZnMoKQoreworCisgIG5hdGl2ZV9zeXNyb290PSQzCisgIHRhcmdldF9zeXNyb290PSQyCisgIFBTRVVET19DT01NQU5EPSIkbmF0aXZlX3N5c3Jvb3QvdXNyL2Jpbi9wc2V1ZG8iCisgIFRBUl9PUFRTPSIteGpmIgorICBQU0VVRE9fT1BUUz0iLVAgJG5hdGl2ZV9zeXNyb290L3VzciIKKworCisgIHJtIC1yZiAkUFNFVURPX0xPQ0FMU1RBVEVESVIKKworICBpZiBbIC1kICIkdGFyZ2V0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIlxuVGFyZ2V0IHN5c3Jvb3QgbG9jYXRpb246ICR0YXJnZXRfc3lzcm9vdCwgYWxyZWFkeSBleGlzdHMhIElmIHlvdSBjb250aW51ZSBpbnN0YWxsYXRpb24sIHRoaXMgZm9sZGVyIHdpbGwgYmUgcmUtY3JlYXRlZC4iCisgICAgY29uZmlybV9pbnN0YWxsICQ0CisgICAgcm0gLXJmICIkdGFyZ2V0X3N5c3Jvb3QiCisgIGZpCisKKyAgaWYgWyAhIC1kICIkdGFyZ2V0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIkNyZWF0aW5nIGRpcmVjdG9yeSAkdGFyZ2V0X3N5c3Jvb3QuLi4iCisgICAgbWtkaXIgLXAgIiR0YXJnZXRfc3lzcm9vdCIKKyAgZmkKKworICBwc2V1ZG9fc3RhdGVfZGlyPSIkdGFyZ2V0X3N5c3Jvb3QvLi4vJChiYXNlbmFtZSAiJHRhcmdldF9zeXNyb290IikucHNldWRvX3N0YXRlIgorICBta2RpciAtcCAiJHBzZXVkb19zdGF0ZV9kaXIiCisgIHRvdWNoICIkcHNldWRvX3N0YXRlX2Rpci9wc2V1ZG8ucGlkIgorICBQU0VVRE9fTE9DQUxTVEFURURJUj0iJHBzZXVkb19zdGF0ZV9kaXIiCisgIGV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgorCisgIGVjaG9faW5mbyAiRXh0cmFjdGluZyByb290ZnM6ICQxLCB1c2luZyBwc2V1ZG8uLi4iCisgICRQU0VVRE9fQ09NTUFORCAkUFNFVURPX09QVFMgdGFyIC1DICQyICIkVEFSX09QVFMiICRMT0NBTF9ET1dOTE9BRC8kMSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0Cit9CisKKyNNYWluIHBhcnQKKy4gc2NyaXB0cy91dGlsCisKKyNQYXJhbWV0ZXIgZGV0YWlsIGlzIGxpc3RlZCBiZWxvdzoKKyNQYXJhbSA0OiBTaWxlbnQgaW5zdGFsbCBvciBjdXN0b21pemUgaW5zdGFsbAorI1BhcmFtIDM6IE9FQ09SRV9OQVRJVkVfU1lTUk9PVAorI1BhcmFtIDI6IHVzZXIgZGVmaW5lZCByb290ZnMgZXh0cmFjdGlvbiBkaXJlY3RvcnkKKyNwYXJhbSAxOiBzeXNyb290IGltYWdlIG5hbWUKK2V4dHJhY3Rfcm9vdGZzICQxICQyICQzICQ0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL3V0aWwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL3V0aWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNzUxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitlY2hvX2luZm8oKQoreworICBlY2hvIC1lICQxIHwgdGVlIC1hICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCit9CisKK3NlbGVjdF9pbnN0YWxsX3R5cGUoKQoreworIyBJZiBjaG9vc2luZyBzaWxlbnQgaW5zdGFsbCwgYWxsIG9sZGVyIGluc3RhbGxhdGlvbiBkYXRhIHdpbGwgYmUKKyMgb3ZlcnJpZGVuIHdpdGhvdXQgdXNlcidzIGludGVyYWN0aW9uCit3aGlsZSB0cnVlOyBkbworICAjZWNob19pbmZvICJbQURUX0lOU1RdIFNpbGVudCBpbnN0YWxsIG1lYW5zIG92ZXJyaWRlcyBhbGwgZXhpc3Rpbmcgb2xkZXIiCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gZGF0YSBhbmQgdGhlIGluc3RhbGxhdGlvbiBuZWVkcyBsZWFzdCB1c2VyIGludGVyYWN0aW9uIgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIElmIHlvdSB3YW50IHRvIHVzZSBzaWxlbnQgaW5zdGFsbGF0aW9uLCBwbGVhc2UgZW50ZXIgUzoiCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIGluc3RhbGxhdGlvbiwgcGxlYXNlIGVudGVyIEM6IgorICAjZWNob19pbmZvICJbQURUX0lOU1R9IElmIHlvdSB3YW50IHRvIGV4aXQgY3VycmVudCBpbnN0YWxsYXRpb24sIHBsZWFzZSBlbnRlciBYOiIKKyAgZWNob19pbmZvICJUaGVyZSdyZSB0d28gd2F5cyB5b3UgY2FuIGRvIGluc3RhbGxhdGlvbjogc2lsZW50IG1vZGUgb3IgaW50ZXJhY3RpdmUgbW9kZS4gVG8gY2hvb3NlIHNpbGVudCBtb2RlLCB3aGljaCBtZWFucyB5b3Ugb3B0IGZvciB0aGUgc3lzdGVtIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBkYXRhIHVuZGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzIHdpdGhvdXQgcHJvbXB0aW5nIGZvciB5b3VyIGNvbmZpcm1hdGlvbi4gIFBsZWFzZSBiZSBjYXV0aW91cyB3aXRoIHRoaXMgc2VsZWN0aW9uIHdoaWNoIG1heSB0cmlnZ2VyIHlvdXIgbG9zaW5nIGRhdGEuICBXaXRoIHRoZSBpbnRlcmFjdGl2ZSBtb2RlLCB5b3UgaGF2ZSB0byBjbG9zZWx5IG1vbml0b3IgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLCBzaW5jZSBpdCB3aWxsIHByb21wdCB5b3UgZWFjaCBzdGVwIGl0IG5lZWRzIHRvIG92ZXJyaWRlIHNvbWUgZXhpc3RpbmcgZGF0YS4gIFRvIGNob29zZSBzaWxlbnQgbW9kZSwgcGxlYXNlIGVudGVyIFtTXSwgZm9yIGludGVyYWN0aXZlIG1vZGUsIHBsZWFzZSBlbnRlciBbSV0gb3IgW1hdIHRvIGV4aXQgdGhlIGluc3RhbGxhdGlvbi4iCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBQbGVhc2UgZW50ZXIgeW91ciBzZWxlY3Rpb25zIGhlcmU6IgorICByZWFkIFlPQ1RPQURUX1NFTAorICBZT0NUT0FEVF9TRUw9YHRyICdbYS16XScgJ1tBLVpdJzw8PCIkWU9DVE9BRFRfU0VMImAKKyAgaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIlMiIF07IHRoZW4KKyAgICByZXR1cm4gIjAiCisgIGVsaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIkkiIF07IHRoZW4KKyAgICByZXR1cm4gIjEiCisgIGVsaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIlgiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBVc2VyIGNhbmNlbGxlZCBpbnN0YWxsYXRpb24hIgorICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAxCisgIGZpCitkb25lCisKKworfQorCitjb25maXJtX2luc3RhbGwoKQoreworIyBiZWxvdyBhcmUgcHJvbXB0LCBtYWtlIHN1cmUgdXNlciBzdGlsbCB3YW50IHRvIGluc3RhbGwgZXZlbiBtZWV0CisjIHNvbWUgcHJvbXB0cworCisjVXNlciBsaWtlcyB0byBlbmpveSBzaWxlbnQgaW5zdGFsbGF0aW9uLCB3ZSB3aWxsIG5vdCBicmVhayBoaXMKKyNpbnN0YWxsYXRpb24gcHJvY2VzcyBoZXJlCitpZiBbICIkMSIgPT0gIjAiIF07IHRoZW4KKyAgcmV0dXJuCitmaQorCit3aGlsZSB0cnVlOyBkbworICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRG8geW91IHdhbnQgdG8gY29udGludWUgaW5zdGFsbGF0aW9uPyBQbGVhc2UgZW50ZXIgWS9OOiIKKyAgcmVhZCBZT0NUT0FEVF9JTlNUQUxMCisgIFlPQ1RPQURUX0lOU1RBTEw9YHRyICdbYS16XScgJ1tBLVpdJzw8PCIkWU9DVE9BRFRfSU5TVEFMTCJgCisgIGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiWSIgXTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgWyAiJFlPQ1RPQURUX0lOU1RBTEwiID09ICJOIiBdOyB0aGVuCisgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgVXNlciBjYW5jZWxsZWQgaW5zdGFsbGF0aW9uISIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgMQorICBmaQorZG9uZQorfQorCitjaGVja19yZXN1bHQoKQoreworICByZXN1bHQ9JD8KKyAgaWYgWyAkcmVzdWx0IC1lcSAxIF07IHRoZW4KKyAgICBleGl0IC0xCisgIGVsaWYgWyAgJHJlc3VsdCAtbmUgMCBdOyB0aGVuCisgICAgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAgZWNob19pbmZvICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBleGl0IC0xCisgIGZpCit9CisKKyMgeW9jdG8gYWR0IGluc3RhbGxhdGlvbiBsb2cgZmlsZQorWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRT0iYWR0X2luc3RhbGxlci5sb2ciCisjIFRlbXAgZm9sZGVycyBob2xkaW5nIHFlbXUvcm9vdGZzIGRvd25sb2FkZWQgaW1hZ2VzCisjIEl0IHdpbGwgYmUgcHV0IGludG8gdGhlIGluc3RhbGxhdGlvbiBmb2xkZXIKK0xPQ0FMX0RPV05MT0FEPSIuL2Rvd25sb2FkX2ltYWdlIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmUzODUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiCkBAIC0wLDAgKzEsOTUgQEAKKyMgWW9jdG8gQURUIEluc3RhbGxlciBiYiBmaWxlCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTIgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCisKK1NVTU1BUlkgPSAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCIKK0RFU0NSSVBUSU9OID0gIkNyZWF0ZXMgdGhlIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgaW5zdGFsbGVyIHRhcmJhbGwiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2FwcGxpY2F0aW9uLWRldmVsb3BtZW50LXRvb2xraXQtYWR0IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitMSUNFTlNFID0gIk1JVCIKKworUEFDS0FHRVMgPSAiIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUFIgPSAicjExIgorCitBRFRfREVQTE9ZID0gIiR7REVQTE9ZX0RJUn0vc2RrLyIKK0FEVF9ESVIgPSAiJHtXT1JLRElSfS9hZHQtaW5zdGFsbGVyLyIKK1MgPSAiJHtXT1JLRElSfS9vcGtnLSR7UFZ9IgorCitQViA9ICIwLjMuMCIKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL29wa2cvb3BrZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vd2dldF9jYWNoZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZHRfaW5zdGFsbGVyIFwKKyAgICAgICAgICAgZmlsZTovL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL3V0aWwgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy9kYXRhX2RlZmluZSBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzIFwKKyAgICAgICAgICAgZmlsZTovL2FkdF9pbnN0YWxsZXIuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZiBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDEyY2RjNzFkNzhiOThmYWNjODRiMTkzMzFlYzY0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZjczNWQxY2RiOGVmMzcxOGZiMGY5ZmJhNDRjYTBkOWE1YzkwZDNhN2YwMTRmMzdhNmQyZjk0NzRmNTQ5ODhmIgorCitBRFRSRVBPID89ICJodHRwOi8vYWR0cmVwby55b2N0b3Byb2plY3Qub3JnLyR7U0RLX1ZFUlNJT059IgorCisjIFRoaXMgcmVjaXBlIG1ha2VzIG5vIHNlbnNlIGFzIGEgbXVsdGlsaWIKK01VTFRJTElCUyA9ICIiCisKK2RvX3BvcHVsYXRlX2FkdFt1bWFza10gPSAiMDIyIgorCitmYWtlcm9vdCBkb19wb3B1bGF0ZV9hZHQgKCkgeworCWNkICR7V09SS0RJUn0KKwlta2RpciAtcCAke0FEVF9ERVBMT1l9CisJcm0gLWYgJHtBRFRfREVQTE9ZfS9hZHRfaW5zdGFsbGVyLnRhci5iejIKKwlybSAtcmYgJHtBRFRfRElSfQorCW1rZGlyIC1wICR7QURUX0RJUn0vb3BrZy9idWlsZAorCWNwIC1yIG9wa2cgJHtBRFRfRElSfS8KKwlzZWQgLWkgLWUgJ3MjQURUUkVQT19VUkwjJHtBRFRSRVBPfSMnICR7QURUX0RJUn0vb3BrZy9jb25mLyouY29uZgorCWNwIC1yIG9wa2ctJHtQVn0gJHtBRFRfRElSfS9vcGtnL2J1aWxkLworCW12ICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLSR7UFZ9ICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLXN2bgorCXJtIC1yZiAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4vcGF0Y2hlcyAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4vLnBjCisJY3AgLXIgc2NyaXB0cyAke0FEVF9ESVJ9LworCWNwIGFkdF9pbnN0YWxsZXIgJHtBRFRfRElSfQorCWNwIGFkdF9pbnN0YWxsZXIuY29uZiAke0FEVF9ESVJ9CisJc2VkIC1pIC1lICdzI0FEVFJFUE8jJHtBRFRSRVBPfSMnICR7QURUX0RJUn0vYWR0X2luc3RhbGxlci5jb25mCisJZWNobyAnU0RLX1ZFTkRPUj0ke1NES19WRU5ET1J9JyA+PiAke0FEVF9ESVJ9L3NjcmlwdHMvZGF0YV9kZWZpbmUKKwllY2hvICdERUZBVUxUX0lOU1RBTExfRk9MREVSPSR7U0RLUEFUSH0nID4+ICR7QURUX0RJUn0vc2NyaXB0cy9kYXRhX2RlZmluZQorCWNwICR7Q09SRUJBU0V9L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ICR7QURUX0RJUn0vc2NyaXB0cy8KKwl0YXIgY2ZqIGFkdF9pbnN0YWxsZXIudGFyLmJ6MiBhZHQtaW5zdGFsbGVyCisJY3AgJHtXT1JLRElSfS9hZHRfaW5zdGFsbGVyLnRhci5iejIgJHtBRFRfREVQTE9ZfQorfQorCitkb19wb3B1bGF0ZV9hZHRbbm9zdGFtcF0gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcG9wbHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCithZGR0YXNrIHBvcHVsYXRlX2FkdCBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2ZpbGVzL3dnZXRfY2FjaGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvZmlsZXMvd2dldF9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE3NTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2ZpbGVzL3dnZXRfY2FjaGUucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBsaWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jIGIvbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYworaW5kZXggOTAwMTQ5My4uMThlZjkxZSAxMDA2NDQKKy0tLSBhL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKKysrKyBiL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKK0BAIC01MCw2ICs1MCw3IEBAIGludCBvcGtnX2Rvd25sb2FkX2JhY2tlbmQoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0LAorIAorICAgICBhcmd2W2krK10gPSAid2dldCI7CisgICAgIGFyZ3ZbaSsrXSA9ICItcSI7CisrICAgIGFyZ3ZbaSsrXSA9ICItLW5vLWNhY2hlIjsKKyAgICAgaWYgKG9wa2dfY29uZmlnLT5odHRwX3Byb3h5IHx8IG9wa2dfY29uZmlnLT5mdHBfcHJveHkpIHsKKyAgICAgICAgIGFyZ3ZbaSsrXSA9ICItWSI7CisgICAgICAgICBhcmd2W2krK10gPSAib24iOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3NzcwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYwpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlV0aWxpdHkgc2NyaXB0cyBmb3IgaW50ZXJuYXRpb25hbGl6aW5nIFhNTCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorCitVUkxWPSIke0AnLicuam9pbihkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMDoyXSl9IgorU1JDX1VSSSA9ICJodHRwOi8vbGF1bmNocGFkLm5ldC8ke0JQTn0vdHJ1bmsvJHtQVn0vK2Rvd25sb2FkLyR7QlB9LnRhci5neiIKK1MgPSAiJHtXT1JLRElSfS9pbnRsdG9vbC0ke1BWfSIKKworREVQRU5EUyA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZ2V0dGV4dC1kZXYgbGlieG1sLXBhcnNlci1wZXJsIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKKyMgZ2V0dGV4dCBpcyBhc3N1bWVkIHRvIGV4aXN0IG9uIHRoZSBob3N0CitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBlcmwtbW9kdWxlcyIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0ZJTEVTXyR7UE59LWRldiA9ICIiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LWRlcHMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwZXJsbmF0aXZlCisKK2V4cG9ydCBQRVJMID0gIiR7YmluZGlyfS9lbnYgcGVybCIKK1BFUkxfY2xhc3MtbmF0aXZlID0gIi91c3IvYmluL2VudiBuYXRpdmVwZXJsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL2ludGx0b29sLW5vd2Fybi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL2ludGx0b29sLW5vd2Fybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM5MzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBpbnRsdG9vbC0wLjQwLjAvaW50bHRvb2wtZXh0cmFjdC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLWV4dHJhY3QuaW4JMjAxMS0xMC0wOCAyMjoyNDo1Ny4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtZXh0cmFjdC5pbgkyMDExLTEyLTA3IDE2OjA0OjA3LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcgCisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLW1lcmdlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtbWVyZ2UuaW4JMjAxMS0xMC0wOCAxNzo1MjowMS4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtbWVyZ2UuaW4JMjAxMS0xMi0wNyAxNjowNTo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXByZXBhcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjUwLjAub3JpZy9pbnRsdG9vbC1wcmVwYXJlLmluCTIwMTEtMTAtMDggMDk6MTY6NTguMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXByZXBhcmUuaW4JMjAxMS0xMi0wNyAxNjowNjoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjICBJbnRsdG9vbCAuZGVza3RvcCwgLmRpcmVjdG9yeSBQcmVwYXJlIFRvb2wKK0luZGV4OiBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtdXBkYXRlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtdXBkYXRlLmluCTIwMTEtMTAtMDggMjI6MjQ6NTcuMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXVwZGF0ZS5pbgkyMDExLTEyLTA3IDE2OjA2OjM5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcKKysjIUBJTlRMVE9PTF9QRVJMQAorICMgLSotIE1vZGU6IHBlcmw7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgIC0qLQorIAorICMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL25vcGVybGNoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvbm9wZXJsY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzZWUxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL25vcGVybGNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0luIHRoZSB0YXJnZXQgY2FzZSwgd2UgY2FuJ3QgY2hlY2sgaWYgcGVybCBleGlzdHMgb3IgdHJ5IHJ1bm5pbmcgaXQuIElmIHdlCitkb24ndCBwYXRjaCB0aGUgY29kZSwgdGhlIG5hdGl2ZSBwZXJsIGxvY2F0aW9uIHdvdWxkIGJlIHVzZWQsIG5vdCB0aGUgdGFyZ2V0Cit3aGljaCBpcyBhbHNvIGluY29ycmVjdC4gV2UgdGhlcmVmb3JlIGRpc2FibGUgdGhpcyBjb2RlIGFuZCByZWx5IG9uIHRoZSAKK2NvcnJlY3QgdmFsdWUgb2YgUEVSTCBiZWluZyBwYXNzZWQgaW4uCisKK1JQIDMxLzgvMjAxMQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1MzM4YTc2Li5lNzA5YTJiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMSwyNCArMTEsMTAgQEAgQUNfU1VCU1QocGtnZGF0YWRpcikgZG5sIGF1dG9tYWtlIGRvZXMgbm90IG5lZWQgdGhpcywgYnV0IGxpYnRvb2xpemUgZG9lcworIGFjbG9jYWxkaXI9JyR7ZGF0YWRpcn0nL2FjbG9jYWwKKyBBQ19TVUJTVChhY2xvY2FsZGlyKQorIAorLUFDX1BBVEhfUFJPRyhQRVJMLCBwZXJsKQorIGlmIHRlc3QgLXogIiRQRVJMIjsgdGhlbgorLSAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorLWZpCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgcGVybCA+PSA1LjguMV0pCistJFBFUkwgLWUgInVzZSA1LjguMTsiID4gL2Rldi9udWxsIDI+JjEKKy1pZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCistICAgQUNfTVNHX0VSUk9SKFtwZXJsIDUuOC4xIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCistZWxzZQorLSAgIFBFUkxfVkVSU0lPTj0iYCRQRVJMIC1lIFwicHJpbnRmICcldmQnLCAkXlZcImAiCistICAgQUNfTVNHX1JFU1VMVChbJFBFUkxfVkVSU0lPTl0pCistZmkKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCistaWYgYCRQRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKy0gICBBQ19NU0dfUkVTVUxUKFtva10pCistZWxzZQorLSAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKysgICBBQ19NU0dfRVJST1IoW1BFUkwgdmFyaWFibGUgbm90IHNldF0pCisgZmkKKytBQ19TVUJTVChQRVJMKQorIEFDX1BBVEhfUFJPRyhCWlIsIGJ6cikKKyAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjUyMTcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1BlcmwgNS4yMiBoYXMgZGVwcmVjYXRlZCBzb21lIHJlZ2V4IGZlYXR1cmVzLCB3aGljaCBjYXVzZXMgd2FybmluZ3Mgd2hlbgoraW50bHRvb2wtdXBkYXRlIHJ1bnM6CisKK1VuZXNjYXBlZCBsZWZ0IGJyYWNlIGluIHJlZ2V4IGlzIGRlcHJlY2F0ZWQsIHBhc3NlZCB0aHJvdWdoIGluIHJlZ2V4OyBtYXJrZWQgYnkKKzwtLSBIRVJFIGluIG0vXiguKilcJHsgPC0tIEhFUkUgPyhbQS1aX10rKX0/KC4qKSQvIGF0CisvZGF0YS9wb2t5LW1hc3Rlci90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vaW50bHRvb2wtdXBkYXRlIGxpbmUgMTA2NS4KKworVGFrZSBhIHBhdGNoIGZyb20gRGViaWFuIHRvIHNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9pbnRsdG9vbC8rYnVnLzE0NjUwMTApCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0gaW50bHRvb2wtMC41MS4wLU9SSUcvaW50bHRvb2wtdXBkYXRlLmluCTIwMTUtMDUtMjcgMDA6MjA6NDMuMDM4Mzc5OTYzICswMjAwCisrKysgaW50bHRvb2wtMC41MS4wL2ludGx0b29sLXVwZGF0ZS5pbgkyMDE1LTA1LTI3IDAwOjIzOjUzLjMwOTA3ODA1MiArMDIwMAorQEAgLTEwNjIsNyArMTA2Miw3IEBACisgCX0KKyAgICAgfQorIAorLSAgICBpZiAoJHN0ciA9fiAvXiguKilcJHs/KFtBLVpfXSspfT8oLiopJC8pCisrICAgIGlmICgkc3RyID1+IC9eKC4qKVwkXHs/KFtBLVpfXSspXH0/KC4qKSQvKQorICAgICB7CisgCW15ICRyZXN0ID0gJDM7CisgCW15ICR1bnRvdWNoZWQgPSAkMTsKK0BAIC0xMTkwLDEwICsxMTkwLDEwIEBACisgCSRuYW1lICAgID1+IHMvXCgrJC8vZzsKKyAJJHZlcnNpb24gPX4gcy9cKCskLy9nOworIAorLQkkdmFyaGFzaHsiUEFDS0FHRV9OQU1FIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/QUNfUEFDS0FHRV9OQU1FfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkez9QQUNLQUdFfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfVkVSU0lPTn0/Lyk7CistCSR2YXJoYXNoeyJWRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJHs/VkVSU0lPTn0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9OQU1FXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P1BBQ0tBR0VcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX1ZFUlNJT05cfT8vKTsKKysJJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/VkVSU0lPTlx9Py8pOworICAgICB9CisgCisgICAgIGlmICgkY29uZl9zb3VyY2UgPX4gL15BQ19JTklUXCgoW14sXCldKyksKFteLFwpXSspWyxdPyhbXixcKV0rKT8vbSkKK0BAIC0xMjE5LDExICsxMjE5LDExIEBACisgCSR2ZXJzaW9uID1+IHMvXCgrJC8vZzsKKyAgICAgICAgICRidWd1cmwgID1+IHMvXCgrJC8vZyBpZiAoZGVmaW5lZCAkYnVndXJsKTsKKyAKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfTkFNRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/UEFDS0FHRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX1ZFUlNJT059Py8pOworLQkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1ZFUlNJT059Py8pOworLSAgICAgICAgJHZhcmhhc2h7IlBBQ0tBR0VfQlVHUkVQT1JUIn0gPSAkYnVndXJsIGlmIChkZWZpbmVkICRidWd1cmwgYW5kIG5vdCAkYnVndXJsID1+IC9cJHs/XHcrfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX05BTUVcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/UEFDS0FHRVx9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRV9WRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJFx7P0FDX1BBQ0tBR0VfVkVSU0lPTlx9Py8pOworKwkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9WRVJTSU9OXH0/Lyk7CisrICAgICAgICAkdmFyaGFzaHsiUEFDS0FHRV9CVUdSRVBPUlQifSA9ICRidWd1cmwgaWYgKGRlZmluZWQgJGJ1Z3VybCBhbmQgbm90ICRidWd1cmwgPX4gL1wkXHs/XHcrXH0/Lyk7CisgICAgIH0KKyAKKyAgICAgIyBccyBtYWtlcyB0aGlzIG5vdCB3b3JrLCB3aHk/ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2OWUzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorU2lnbmVkLW9mZi1ieTogRmxvcmluIFNhcmJ1IDxmbG9yaW4uc2FyYnVAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworSW5kZXg6IGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNDAuNi5vcmlnL2ludGx0b29sLm00CTIwMDktMDItMTQgMTQ6MTI6MjguMDAwMDAwMDAwIC0wODAwCisrKysgaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00CTIwMTEtMTEtMjMgMTU6Mzk6MzQuNjg5NTYxODcyIC0wODAwCitAQCAtMTIyLDE0ICsxMjIsMTYgQEAKKyAgICBJVF9QRVJMX1ZFUlNJT049ImAkSU5UTFRPT0xfUEVSTCAtZSBcInByaW50ZiAnJXZkJywgJF5WXCJgIgorICAgIEFDX01TR19SRVNVTFQoWyRJVF9QRVJMX1ZFUlNJT05dKQorIGZpCistaWYgdGVzdCAieCQyIiAhPSAieG5vLXhtbCI7IHRoZW4KKy0gICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCistICAgaWYgYCRJTlRMVE9PTF9QRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKy0gICAgICAgQUNfTVNHX1JFU1VMVChbb2tdKQorLSAgIGVsc2UKKy0gICAgICAgQUNfTVNHX0VSUk9SKFtYTUw6OlBhcnNlciBwZXJsIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorLSAgIGZpCistZmkKKysKKysjIERpc2FibGUgdGhpcyBjaGVjayBzaW5jZSB3ZSBrbm93IFhNTDo6UGFyc2VyIGlzIGluc3RhbGxlZAorKyNpZiB0ZXN0ICJ4JDIiICE9ICJ4bm8teG1sIjsgdGhlbgorKyMgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCisrIyAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCisrIyAgICAgICBBQ19NU0dfUkVTVUxUKFtva10pCisrIyAgIGVsc2UKKysjICAgICAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKysjICAgZmkKKysjZmkKKyAKKyAjIFN1YnN0aXR1dGUgQUxMX0xJTkdVQVMgc28gd2UgY2FuIHVzZSBpdCBpbiBwby9NYWtlZmlsZQorIEFDX1NVQlNUKEFMTF9MSU5HVUFTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvdXNlLW5hdGl2ZXBlcmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC91c2UtbmF0aXZlcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjVmZWQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvdXNlLW5hdGl2ZXBlcmwucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorT0UgaGFzIHBlcmwgYmluYXJ5IGFzICduYXRpdmVwZXJsJyBpbiBuYXRpdmUgc3lzcm9vdCBzbyB3ZSBsb29rIGZvciBpdAoraW4gb3JkZXIgdG8gYXZvaWQgaW50bHRvb2wgc2VhcmNoaW5nIGFuZCBmaW5kaW5nIHBlcmwgZnJvbSAvdXNyL2Jpbgorb24gYnVpbGQgc3lzdGVtIHdoaWNoIG1heSBub3QgaGF2ZSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBpdCBuZWVkcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KK0luZGV4OiBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjQwLjYub3JpZy9pbnRsdG9vbC5tNAkyMDA5LTAyLTE0IDE0OjEyOjI4LjAwMDAwMDAwMCAtMDgwMAorKysrIGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAkyMDExLTA4LTA5IDA4OjA3OjE2LjQyNzM0Nzg0NiAtMDcwMAorQEAgLTExMCw3ICsxMTAsNyBAQAorICAgICBBQ19NU0dfRVJST1IoW0dOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKyBmaQorIAorLUFDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBwZXJsKQorK0FDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBuYXRpdmVwZXJsKQorIGlmIHRlc3QgLXogIiRJTlRMVE9PTF9QRVJMIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyMGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGludGx0b29sLmluYworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJICs9ICJmaWxlOi8vaW50bHRvb2wtbm93YXJuLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2ggXAorICAgICAgICAgICAke05BVElWRVBBVENIRVN9IFwKKyAgICAgICAgICAgIgorCisjCisjIEFsbCBvZiB0aGUgaW50bHRvb2wgc2NyaXB0cyBoYXZlIHRoZSBjb3JyZWN0IHBhdGhzIHRvIHBlcmwgYWxyZWFkeQorIyBlbWJlZGRlZCBpbnRvIHRoZW0gYW5kIGNhbiBmaW5kIHBlcmwgZmluZSwgc28gd2UgYWRkIHRoZSByZW1vdmUgeG1sLWNoZWNrCisjIGluIHRoZSBpbnRsdG9vbC5tNCB2aWEgdGhlIHJlbW92ZS14bWwtY2hlY2sucGF0Y2gKK05BVElWRVBBVENIRVMgPSAiZmlsZTovL25vcGVybGNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgZmlsZTovL3JlbW92ZS14bWwtY2hlY2sucGF0Y2giCitOQVRJVkVQQVRDSEVTX2NsYXNzLW5hdGl2ZSA9ICJmaWxlOi8vdXNlLW5hdGl2ZXBlcmwucGF0Y2giIAorCitTUkNfVVJJW21kNXN1bV0gPSAiMTJlNTE3Y2FjMmI1N2EwMTIxY2RhMzUxNTcwZjFlNjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjdjNzRkOTQxOTZiMTUzYjc3NGFiOWY4OWIyZmE2YzZiYTc5MzUyNDA3MDM3YzhjMTRkNWFlYjMzNGU5NTljZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOWQ5MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gOWJlNzE3MDBlYjU4MGM4MTU2ODg1ODRhNjQ2MjFhMzg4NjdjM2ZkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphbWVzIE15YXR0IDxqYW1lcy5teWF0dEB0ZXNzZWxsYS5jb20+CitEYXRlOiBUaHUsIDUgRmViIDIwMTUgMTU6NTc6MTQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0ganNvbl90b2tlbmVyIHJlcXVpcmVzIElORiBhbmQgTkFOCisKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisganNvbl90b2tlbmVyLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGpzb24tYy0wLjEyL2pzb25fdG9rZW5lci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ganNvbi1jLTAuMTIub3JpZy9qc29uX3Rva2VuZXIuYworKysrIGpzb24tYy0wLjEyL2pzb25fdG9rZW5lci5jCitAQCAtMTYsNiArMTYsNyBAQAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKyAjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlICJtYXRoX2NvbXBhdC5oIgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtMzUyLDEyICszNTMsMTAgQEAgc3RydWN0IGpzb25fb2JqZWN0KiBqc29uX3Rva2VuZXJfcGFyc2VfZQorIAorICAgICBjYXNlIGpzb25fdG9rZW5lcl9zdGF0ZV9pbmY6IC8qIGFrYSBzdGFydHMgd2l0aCAnaScgKi8KKyAgICAgICB7CistCWludCBzaXplOworLQlpbnQgc2l6ZV9pbmY7CisrCXNpemVfdCBzaXplX2luZjsKKyAJaW50IGlzX25lZ2F0aXZlID0gMDsKKyAKKyAJcHJpbnRidWZfbWVtYXBwZW5kX2Zhc3QodG9rLT5wYiwgJmMsIDEpOworLQlzaXplID0ganNvbl9taW4odG9rLT5zdF9wb3MrMSwganNvbl9udWxsX3N0cl9sZW4pOworIAlzaXplX2luZiA9IGpzb25fbWluKHRvay0+c3RfcG9zKzEsIGpzb25faW5mX3N0cl9sZW4pOworIAljaGFyICppbmZidWYgPSB0b2stPnBiLT5idWY7CisgCWlmICgqaW5mYnVmID09ICctJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmVmMDNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQyBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbmlwdWxhdGUgSlNPTiBkYXRhIgorREVTQ1JJUFRJT04gPSAiSlNPTi1DIGltcGxlbWVudHMgYSByZWZlcmVuY2UgY291bnRpbmcgb2JqZWN0IG1vZGVsIHRoYXQgYWxsb3dzIHlvdSB0byBlYXNpbHkgY29uc3RydWN0IEpTT04gb2JqZWN0cyBpbiBDLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9qc29uLWMvanNvbi1jL3dpa2kiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRlNTRiNjBmYmJjMzUxMjNiYTE5M2ZlYThlZTIxNmYyIgorCitTUkNfVVJJID0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMvcmVsZWFzZXMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2E0YmJiODgxZGZjNDAxN2U4MDIxYjVlMGE4YzQ5MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDBjMDFiMmIzZjgyZGNiNDI2MTc1MWViNzFmMWIwODQ0MDRmYjdkNmEyODJmMDYwNzRkM2MxNzA3OGI5ZjNmIgorCitSUFJPVklERVNfJHtQTn0gPSAibGlianNvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBDbGVhbiB1cCBhdXRvY29uZiBjcnVmdCB0aGF0IHNob3VsZCBub3QgYmUgaW4gdGhlIHRhcmJhbGwKKyAgICBybSAtZiAke1N9L2NvbmZpZy5zdGF0dXMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMva2NvbmZpZy1mcm9udGVuZHMva2NvbmZpZy1mcm9udGVuZHNfMy4xMi4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhMmY5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiTGludXgga2VybmVsIHN0eWxlIGNvbmZpZ3VyYXRpb24gZnJhbWV3b3JrIGZvciBvdGhlciBwcm9qZWN0cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBrY29uZmlnLWZyb250ZW5kcyBwcm9qZWN0IGFpbXMgYXQgY2VudHJhbGlzaW5nIFwKK3RoZSBlZmZvcnQgb2Yga2VlcGluZyBhbiB1cC10by1kYXRlLCBvdXQtb2YtdHJlZSwgcGFja2FnaW5nIG9mIHRoZSBcCitrY29uZmlnIGluZnJhc3RydWN0dXJlLCByZWFkeSBmb3IgdXNlIGJ5IHRoaXJkLXBhcnR5IHByb2plY3RzLiBcCitUaGUga2NvbmZpZy1mcm9udGVuZHMgcGFja2FnZSBwcm92aWRlcyB0aGUga2NvbmZpZyBwYXJzZXIsIGFzIHdlbGwgYXMgYWxsIFwKK3RoZSBmcm9udGVuZHMiCitIT01FUEFHRSA9ICJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvcHJvamVjdHMva2NvbmZpZy1mcm9udGVuZHMiCitMSUNFTlNFID0gIkdQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05YjhjZjYwZmYzOTc2N2ZmMDRiNjcxZmNhODMwMjQwOCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTICs9ICJuY3Vyc2VzIGZsZXggYmlzb24gZ3BlcmYtbmF0aXZlIHBrZ2NvbmZpZy1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCitTUkNfVVJJID0gImh0dHA6Ly95bW9yaW4uaXMtYS1nZWVrLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjkzOTI4MGRjYzgzZjhmZWFiZDg3YTFkNWY5YjAwYzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWEyNjE1YTYyYzc0YmVhNmNlM2IzODQwMmYwMGM3NTEzODU4ZjMwN2Y2YmE3YWE5ZmRiZjBiYmMxMmJjZjQwNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCBzY3JpcHRzLy5hdXRvc3R1ZmYvbTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbG4gLXMga2NvbmZpZy1jb25mICR7RH0ke2JpbmRpcn0vY29uZgorCWxuIC1zIGtjb25maWctbWNvbmYgJHtEfSR7YmluZGlyfS9tY29uZgorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1nY29uZiAtLWRpc2FibGUtcWNvbmYiCisKKyMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CisjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KK1NPTElCUyA9ICItJHtAZC5nZXRWYXIoJ1BWJywxKVs6LTJdfS5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGlia2NvbmZpZy1wYXJzZXIuc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLTIuNC42LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3N2M3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGxpYnJhcnkgc3VwcG9ydCBzY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIEdOVSBsaWJ0b29sLCBhIGdlbmVyaWMgbGlicmFyeSBzdXBwb3J0IHNjcmlwdC4gXAorTGlidG9vbCBoaWRlcyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIHNwZWNpYWwgbGlicmFyeSB0eXBlcyBcCisoc3VjaCBhcyBzaGFyZWQgbGlicmFyaWVzKSBiZWhpbmQgYSBjb25zaXN0ZW50IGludGVyZmFjZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC9saWJ0b29sLmh0bWwiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgIGZpbGU6Ly9saWJsdGRsL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0b29sL2xpYnRvb2wtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RyYWlsaW5nc2xhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1maW5hbC1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9ybS1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vaGFyZGNvZGVwYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImFkZGY0NGI2NDZkZGI0ZTM5MTk4MDVhYTg4ZmE3YzVlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUzYmQ0ZDVkM2QwMjVhMzZjMjFkZDZhZjdlYTgxOGEyYWZjZDRkZmMxZWE1YTE3YjM5ZDc4NTRiY2QwYzA2ZTMiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJIyBTb21ldGltZXMgdGhpcyBmaWxlIGRvZXNuJ3QgZ2V0IHJlYnVpbHQsIGZvcmNlIHRoZSBpc3N1ZQorCXJtIC1mICR7U30vYnVpbGQtYXV4L2x0bWFpbi5zaAorCW1ha2UgYnVpbGQtYXV4L2x0bWFpbi5zaAorCS4vY29uZmlnLnN0YXR1cworfQorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1saWJ0b29saXplIgorCitERVBFTkRTID0gImxpYnRvb2wtbmF0aXZlIgorCitQQUNLQUdFUyA9KyAibGlibHRkbCIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCisKK0ZJTEVTXyR7UE59LWRldl9yZW1vdmUgPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfbGlibHRkbCA9ICIke2xpYmRpcn0vbGlibHRkbCR7U09MSUJTfSIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9iYXNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Nzg4MDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKQEAgLTAsMCArMSw0MSBAQAorcmVxdWlyZSBsaWJ0b29sLSR7UFZ9LmluYworCitQQUNLQUdFUyA9ICIiCitTUkNfVVJJICs9ICJmaWxlOi8vcHJlZml4LnBhdGNoIgorU1JDX1VSSSArPSAiZmlsZTovL2ZpeGluc3RhbGwucGF0Y2giCisKK2RhdGFkaXIgPSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfZGF0YWRpcn0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWluc3RhbGwgLW0gMDc1NSAke0hPU1RfU1lTfS1saWJ0b29sICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyR7SE9TVF9TWVN9LWxpYnRvb2wKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCUdSRVA9Jy9iaW4vZ3JlcCcgU0VEPSdzZWQnICR7U30vYnVpbGQtYXV4L2lubGluZS1zb3VyY2UgbGlidG9vbGl6ZSA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2xpYnRvb2xpemUKKwljaG1vZCAwNzU1ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2xpYnRvb2xpemUKKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9kYXRhZGlyfS9hY2xvY2FsLworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29tcGlsZSAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29uZmlnLnN1YiAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9kZXBjb21wICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2luc3RhbGwtc2ggJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvbWlzc2luZyAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7U30vYnVpbGQtYXV4L2x0bWFpbi5zaCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7U30vbTQvKi5tNCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vYWNsb2NhbC8KK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitsaWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9ICR7U1lTUk9PVF9ERVNURElSfSR7dGFyZ2V0X2RhdGFkaXJ9Cit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJsaWJ0b29saXplICotbGlidG9vbCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1uYXRpdmVfMi40LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTIxOGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworREVQRU5EUyA9ICIiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wcmVmaXgucGF0Y2giCisKK2luaGVyaXQgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX05BVElWRX0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQwODRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC00MDQsMjEgKzQwNCw2IEBAICQobm90ZXNfdHh0KTogJChub3Rlc190ZXhpKQorIAkkKEFNX1ZfR0VOKSQoTUFLRUlORk8pIC1QICckKHNyY2RpcikvZG9jJyAtLW5vLWhlYWRlcnMgXAorIAkgICAgJChNQUtFSU5GT0ZMQUdTKSAtbyAnJEAnICckKG5vdGVzX3RleGkpJworIAorLWRpc3RfbWFuMV9NQU5TCQk9ICQobGlidG9vbF8xKSAkKGxpYnRvb2xpemVfMSkKKy1NQUlOVEFJTkVSQ0xFQU5GSUxFUwkrPSAkKGRpc3RfbWFuMV9NQU5TKQorLXVwZGF0ZV9tYW5zID0gXAorLSAgUEFUSD0iLiQoUEFUSF9TRVBBUkFUT1IpJCRQQVRIIjsgZXhwb3J0IFBBVEg7IFwKKy0gICQoSEVMUDJNQU4pIC0tb3V0cHV0PSckQCcKKy0KKy0jIEl0J3Mgd3JvbmcgdG8gbWFrZSBkaXN0cmlidXRlZCBmaWxlcyAoZS5nLiAkKGxpYnRvb2xfMSkpIHJlbHkgb24KKy0jIGZpbGVzIGNyZWF0ZWQgaW4gdGhlIGJ1aWxkIHRyZWUsIHNvIGluc3RlYWQgd2UgcmVnZW5lcmF0ZSB0aGUKKy0jIG1hbnVhbCBwYWdlcyBpZiB0aGUgc291cmNlcyBmb3IgdGhlIGJ1aWxkLXRyZWUgZmlsZXMgd2Ugd2FudCB0bworLSMgcnVuIGhhdmUgY2hhbmdlZC4KKy0kKGxpYnRvb2xfMSk6ICQobHRtYWluX3NoKQorLQkkKEFNX1ZfR0VOKSQodXBkYXRlX21hbnMpIC0taGVscC1vcHRpb249LS1oZWxwLWFsbCBsaWJ0b29sCistJChsaWJ0b29saXplXzEpOiAkKGxpYnRvb2xpemVfaW4pCistCSQoQU1fVl9HRU4pJCh1cGRhdGVfbWFucykgbGlidG9vbGl6ZQorLQorIAorICMjIC0tLS0tLS0tLS0tLS0gIyMKKyAjIyBJbnN0YWxsYXRpb24uICMjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LWZpbmFsLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzlmOGNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitFbmFsYmluZyBzeXNyb290IHN1cHBvcnQgZXhwb3NlZCBhIGJ1ZyB3aGVyZSB0aGUgZmluYWwgbGlicmFyeQoraGFkIGFuIFJQQVRIIGVuY29kZWQgaW50byBpdCB3aGljaCBzdGlsbCBwb2ludGVkIHRvIHRoZSBzeXNyb290LgorVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlIHVudGlsIGl0IGdldHMgc29ydGVkIG91dCB1cHN0cmVhbS4KKworRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTc1NjksOSArNzU2OSwxMSBAQCBFT0YKKyAJICB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRjb21waWxlX3JwYXRoJHJwYXRoCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCQkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCistCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKy0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisgCQllbHNlCitAQCAtODMwMSw2ICs4MzAzLDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCitAQCAtODM1Miw2ICs4MzU4LDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJlc29sdmUtbHQtc3lzcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDk1OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJlc29sdmUtbHQtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCB1cGRhdGVzIGxpYnRvb2wubTQgKGFuZCBpdHMgb3V0cHV0KSB0byByZXNvbHZlIGEgcHJvYmxlbQord2l0aCB2YXJpYWJsZSAnbHRfc3lzcm9vdCcgbm90IGJlaW5nIHByb3Blcmx5IHVwZGF0ZWQgaWYgdGhlIG9wdGlvbgorJy0td2l0aFstbGlidG9vbF0tc3lzcm9vdCcgaXMgbm90IHByb3ZpZGVkIHdoZW4gcnVubmluZyB0aGUgJ2NvbmZpZ3VyZScKK3NjcmlwdCBmb3IgYSBwYWNrYWdlLgorCitJIGhhdmUgYWxzbyByZXBvcnRlZCB0aGUgcHJvYmxlbSB0byBsaWJ0b29sIGhlcmUKKworaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1saWJ0b29sLzIwMTMtMDkvbXNnMDAwMDUuaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBIYW5zIEJlY2tlcnVzIDxoYW5zLmJlY2tlcnVzIGF0IGdtYWlsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKKy0tLSBhL200L2xpYnRvb2wubTQKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC0xMjI1LDE2ICsxMjI1LDIxIEBAIGRubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKyBkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKyBsdF9zeXNyb290PQorIGNhc2UgJHdpdGhfbGlidG9vbF9zeXNyb290IGluICMoCistIHllcykKKysgbm8pCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgICAjIFRyZWF0ICIvIiB0aGUgc2FtZSBhIGFuIHVuc2V0IHN5c3Jvb3QuIEl0IHNlZW1zIHRvIGJlIG1vcmUKKysgICAgICMgY29tcGF0aWJsZSBhY3Jvc3MgaG9zdCBwbGF0Zm9ybXMgdGhhdCB3YXkhPworKyAgICAgaWYgdGVzdCAiJGx0X3N5c3Jvb3QiID0gLzsgdGhlbgorKyAgICAgICBsdF9zeXNyb290PQorKyAgICAgZmkKKyAgICBmaQorICAgIDs7ICMoCisrIHllc3wnJ3wvKQorKyAgIDs7ICMoCisgIC8qKQorICAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgIDs7ICMoCistIG5vfCcnKQorLSAgIDs7ICMoCisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfbGlidG9vbF9zeXNyb290XSkKKyAgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlYzk0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorV2UgZG9uJ3Qgd2FudCB0byBhZGQgUlBBVEhTIHdoaWNoIG1hdGNoIGRlZmF1bHQgbGlua2VyCitzZWFyY2ggcGF0aHMsIHRoZXkncmUgYSB3YXN0ZSBvZiBzcGFjZS4gVGhpcyBwYXRjaAorZmlsdGVycyBsaWJ0b29scyBsaXN0IGFuZCByZW1vdmVzIHRoZSBvbmVzIHdlIGRvbid0IG5lZWQuCisKK1JQIDIzLzkvMjAxMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJ0b29sLTIuNC4yL2J1aWxkLWF1eC9sdG1haW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0b29sLTIuNC4yLm9yaWcvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGxpYnRvb2wtMi40LjIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTcyODYsOCArNzI4NiwxNCBAQCBFT0YKKyAJCSAgZXNhYworIAkJZmkKKyAJICAgICAgZWxzZQorLQkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysJICAgICAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgICAgICA7OworKwkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCitAQCAtODAxOSw4ICs4MDI1LDE0IEBAIEVPRgorIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKy0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisrICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgIHJwYXRoKz0iICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorQEAgLTgwNzAsOCArODA4MiwxNCBAQCBFT0YKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjICAgIAorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXhpbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeGluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNDNiZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXhpbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitUaGVyZSBpcyBubyBwb2ludCBpbiBoYXZpbmcgImV4ZWN1dGFibGUiIGJpbmFyaWVzIGluIHRoZSAubGlicworZGlyZWN0b3J5IGxpbmtlZCB3aXRoIGRpZmZlcmVudCBycGF0aHMgdG8gdGhlIHRhcmdldCB3aGljaCAKK2NvdWxkIGNvbmNpdmFibHkgYmUgcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW0gd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgZXh0cmEgcnBhdGhzICgkY29tcGlsZV9ycGF0aCkgc28gdGhhdCB0aGUKK291dHB1dCBmcm9tIHRoZSAibGluayIgc3RhZ2UgY2FuIGJlIHVzZWQgb24gdGhlIHRhcmdldC4gV2UgY2FuIHRoZW4KK2F2b2lkIGhhdmluZyB0byAicmVsaW5rIiBkdXJpbmcgdGhlIGluc3RhbGwgc3RhZ2UuCisKK1RoaXMgc2F2ZXMgc29tZSBidWlsZCB0aW1lIChkb19pbnN0YWxsIGlzIG92ZXIgMiBtaW51dGVzIGZhc3RlciBmb3IKK3B1bHNlYXVkaW8pLgorCitUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyBhbiBhbm5veWluZyAic2VlbXMgdG8gYmUgbW92ZWQiIHdhcm5pbmcKK3doaWNoIGlzIHRvdGFsbHkgYm9ndXMgaW4gdGhlIHN5c3Jvb3QgY2FzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBhcmUgdW5saWtlbHkgdG8gdGFrZSBhIHBhdGNoIGxpa2UgdGhpc10KKworUlAgMjAxMS8xMS8xNgorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMjM1NSw3ICsyMzU1LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKy0JaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKyAgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCisgICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CitAQCAtMjM5NCw3ICsyMzk0LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJICBzaGlmdAorIAorIAkgIHNyY25hbWU9JHJlYWxuYW1lCistCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSR7cmVhbG5hbWV9VAorKwkgIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorIAorIAkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKyAJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKK0BAIC02MTYyLDE1ICs2MTYyLDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisgCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisgCSAgICAjIHNlYXJjaCBwYXRoLgorLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICopCistCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKy0JICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CistCSAgICAgIGVzYWMKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKysJICAgICNjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAjKiIgJGFic2RpciAiKikgOzsKKysJICAgICMqKQorKwkgICAgIyAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorKwkgICAgIyAgKiIgJGFic2RpciAiKikgOzsKKysJICAgICMgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworKwkgICAgIyAgZXNhYworKwkgICAgIyAgOzsKKysJICAgICNlc2FjCisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkbGliZGlyICIqKSA7OworIAkgICAgKikKK0BAIC02MjM2LDE1ICs2MjM2LDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisgCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisgCSAgICAjIHNlYXJjaCBwYXRoLgorLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICopCistCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKy0JICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CistCSAgICAgIGVzYWMKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKysJICAgICNjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAjKiIgJGFic2RpciAiKikgOzsKKysJICAgICMqKQorKwkgICAgIyAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorKwkgICAgIyAgKiIgJGFic2RpciAiKikgOzsKKysJICAgICMgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworKwkgICAgIyAgZXNhYworKwkgICAgIyAgOzsKKysJICAgICNlc2FjCisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkbGliZGlyICIqKSA7OworIAkgICAgKikKK0BAIC02NTkwLDggKzY1OTAsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICBldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKyAJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCistCQkgICAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisrCQkgICN0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorKwkJICAjICBmdW5jX3dhcm5pbmcgIickZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKyAKKyAJCSAgcGF0aD0tTCRhYnNkaXIKKyAJCWZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9oYXJkY29kZXBhdGhzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjIzOWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitJZiBmb3IgZXhhbXBsZSB5b3UgYnVpbGQgb24gYSBtYWNoaW5lIHdpdGggL2Jpbi9ncmVwLCB0aGVuIHJlc3RvcmUgdGhhdCBzc3RhdGUKK29udG8gYSBtYWNoaW5lIHdpdGggL3Vzci9iaW4vZ3JlcCwgdGhpbmdzIHdpbGwgZmFpbC4gU2ltcGx5IGRvbid0IGJvdGhlcgoraGFyZGNvZGluZyBwYXRocy4KKworUlAgMjAxNS8yLzMKKworSW5kZXg6IGxpYnRvb2wtMi40LjUvbGlidG9vbGl6ZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRvb2wtMi40LjUub3JpZy9saWJ0b29saXplLmluCisrKysgbGlidG9vbC0yLjQuNS9saWJ0b29saXplLmluCitAQCAtNDAsMTEgKzQwLDExIEBACisgCisgOiAke0FVVE9DT05GPSJhdXRvY29uZiJ9CisgOiAke0FVVE9NQUtFPSJhdXRvbWFrZSJ9CistOiAke0VHUkVQPSJARUdSRVBAIn0KKy06ICR7RkdSRVA9IkBGR1JFUEAifQorLTogJHtHUkVQPSJAR1JFUEAifQorLTogJHtMTl9TPSJATE5fU0AifQorLTogJHtTRUQ9IkBTRURAIn0KKys6ICR7RUdSRVA9ImVncmVwIn0KKys6ICR7RkdSRVA9ImZncmVwIn0KKys6ICR7R1JFUD0iZ3JlcCJ9CisrOiAke0xOX1M9ImxuIC1zIn0KKys6ICR7U0VEPSJzZWQifQorIAorIAorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9ybS1ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub3JtLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGM2NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9ybS1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitsaWJ0b29sOiBub3JtYWxpemUgbGluayBwYXRocyBiZWZvcmUgY29uc2lkZXJpbmcgZm9yIFJQQVRICisKK0xpYnRvb2wgbWF5IGJlIHBhc3NlZCBsaW5rIHBhdGhzIG9mIHRoZSBmb3JtICIvdXNyL2xpYi8uLi9saWIiLCB3aGljaAorZm9vbCBpdHMgZGV0ZWN0aW9uIGNvZGUgaW50byB0aGlua2luZyBpdCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYW4KK1JQQVRIIGluIHRoZSBnZW5lcmF0ZWQgYmluYXJ5LiAgTm9ybWFsaXplIGJlZm9yZSBjb21wYXJpc2lvbi4KKworU2lnbmVkLW9mZi1ieTogQW5keSBSb3NzIDxhbmR5LnJvc3NAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgkyMDEyLTA4LTE2IDEzOjU4OjU1LjA1ODkwMDM2MyAtMDcwMAorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgkyMDEyLTA4LTIyIDExOjAxOjM0LjE5MTM0NTk4OSAtMDcwMAorQEAgLTcyODgsOCArNzI4OCwxMCBAQAorIAkgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysgICAgICAgICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJGxpYmRpciIKKysgICAgICAgICAgICAgICAgbGliZGlyX25vcm09JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgCSAgICAgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAgICAgKiIgJGxpYmRpcl9ub3JtICIqKSA7OworIAkgICAgICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisgICAgICAgICAgICAgICAgICAgIDs7CitAQCAtODAyNyw4ICs4MDI5LDEwIEBACisgCSAgZWxzZQorICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorICAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKyAgICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiRsaWJkaXIiCisrICAgICAgICAgICAgbGliZGlyX25vcm09JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCistCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKiIgJGxpYmRpcl9ub3JtICIqKSA7OworIAkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICAgIHJwYXRoKz0iICRmbGFnIgorICAgICAgICAgICAgICAgIDs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcHJlZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzNkZjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitSZW5hbWVzICJsaWJ0b29sIiAtPiAiJHtUQVJHRVRfUFJFRklYfWxpYnRvb2wiIHdoaWNoIG1ha2VzIHN1cmUKK2l0IGNhbid0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIGhvc3QgbGlidG9vbC4KKworT3JpZ2luYWxseSBieTogUlAKKworVXBkYXRlZDogRGF0ZTogMjAxMC8wNi8yOAorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSXQgYWxzbyBhZGp1c3RzIGxpYnRvb2wgc28gdGhhdCB0aGUgaGVhZGVyIGF0IHRoZSBzY3JpcHQgaXMgdXNlZCBmb3IgCitzY3JpcHQgZXhlY3V0aW9uIGFuZCBub3QgdGhldmFsdWUgb2YgJFNIRUxMLiBUaGlzIGlzIGJlY2F1c2UgbWFueSAKK01ha2VmaWxlcyBjaGFuZ2UgJFNIRUxMIHNvIGRhc2ggY2FuIGdldCB1c2VkIHRvIGV4ZWN1dGUgd2hhdCBpcyAKK290aGVyd2lzZSBjb25maWd1cmVkIGFzIGEgYmFzaCBzaGVsbCBzY3JpcHQuIFNpbmNlIHdlIGRvbid0IG5lZWQgdG8gCitleGVjdXRlIHNjaXB0cyB0aGlzIHdheSBvbiBhbnkgc3lzdGVtIEknbSBhd2FyZSBvZiB1cyBidWlsZGluZyB1cG9uLCAKK3RoZSBzaW1wbGVzdCBmaXggaXMganVzdCB0byByZW1vdmUgJFNIRUxMLgorCitVcGRhdGVkOiBEYXRlOiAyMDExLzExLzA5CitSUAorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTMxLDcgKzMxLDcgQEAgU1VCRElSUwkJCT0gLgorIERJU1RfU1VCRElSUwkJPSAkKFNVQkRJUlMpCisgRVhUUkFfRElTVAkJPQorIAorLUJVSUxUX1NPVVJDRVMJCT0gbGlidG9vbCBsaWJ0b29saXplCisrQlVJTFRfU09VUkNFUwkJPSAkKGhvc3RfYWxpYXMpLWxpYnRvb2wgbGlidG9vbGl6ZQorIAorIENMRUFORklMRVMJCT0KKyBNT1NUTFlDTEVBTkZJTEVTCT0KK0BAIC02Nyw3ICs2Nyw3IEBAIGJ1aWxkX3NjcmlwdHMJPSAkKHNyY2RpcikvJChhdXhfZGlyKS9hbm5vdW5jZS1nZW4gXAorIAorIEVYVFJBX0RJU1QgICAgICs9IGJvb3RzdHJhcCBib290c3RyYXAuY29uZiAkKGJ1aWxkX3NjcmlwdHMpIGNmZy5tayBtYWludC5tayBcCisgCQkgIEdOVW1ha2VmaWxlCistQ0xFQU5GSUxFUyAgICAgKz0gbGlidG9vbCBsaWJ0b29saXplCisrQ0xFQU5GSUxFUyAgICAgKz0gJChob3N0X2FsaWFzKS1saWJ0b29sIGxpYnRvb2xpemUKKyAKKyAjIyBJZiBhIGZpbGUgaXMgbmFtZWQgc2V2ZXJhbCB0aW1lcyBiZWxvdywgYW5kIGVzcGVjaWFsbHkgaWYgaXQKKyAjIyBpcyBhIGRpc3RyaWJ1dGVkIGZpbGUgY3JlYXRlZCBkdXJpbmcgTGlidG9vbCBib290c3RyYXAsIHdlCitAQCAtMjc2LDcgKzI3Niw3IEBAIGNvbmZpZ3VyZV9lZGl0ID0gJChib290c3RyYXBfZWRpdCkgXAorIAktZSAnc3xAc3JjZGlyXEB8JChzcmNkaXIpfGcnCisgCisgIyBUaGUgbGlidG9vbCBkaXN0cmlidXRvciBhbmQgdGhlIHN0YW5kYWxvbmUgbGlidG9vbCBzY3JpcHQuCistYmluX1NDUklQVFMgPSBsaWJ0b29sCisrYmluX1NDUklQVFMgPSAkKGhvc3RfYWxpYXMpLWxpYnRvb2wKKyAKKyBsaWJ0b29saXplOiAkKGxpYnRvb2xpemVfaW4pICQoY29uZmlnX3N0YXR1cykKKyAJJChBTV9WX2F0KXJtIC1mICckQCcKK0BAIC0yODcsNyArMjg3LDcgQEAgbGlidG9vbGl6ZTogJChsaWJ0b29saXplX2luKSAkKGNvbmZpZ19zdGF0dXMpCisgIyBXZSB1c2VkIHRvIGRvIHRoaXMgd2l0aCBhICdzdGFtcC12Y2wnIGZpbGUsIGJ1dCBub24tZ21ha2UgYnVpbGRzCisgIyB3b3VsZCByZXJ1biBjb25maWd1cmUgb24gZXZlcnkgaW52b2NhdGlvbiwgc28gbm93IHdlIG1hbnVhbGx5CisgIyBjaGVjayB0aGUgdmVyc2lvbiBudW1iZXJzIGZyb20gdGhlIGJ1aWxkIHJ1bGUgd2hlbiBuZWNlc3NhcnkuCistbGlidG9vbDogJChsdG1haW5fc2gpICQoY29uZmlnX3N0YXR1cykgJChkb3R2ZXJzaW9uKQorKyQoaG9zdF9hbGlhcyktbGlidG9vbDogJChsdG1haW5fc2gpICQoY29uZmlnX3N0YXR1cykgJChkb3R2ZXJzaW9uKQorIAlAJChyZWJ1aWxkKTsgXAorIAlpZiB0ZXN0IC1mICckQCc7IHRoZW4gXAorIAkgIGV2YWwgYCckKFNFRCknIC1uICcvXnBhY2thZ2VfcmV2aXNpb249L3AnICckQCdgOyBcCitAQCAtNzMxLDEyICs3MzEsMTIgQEAgVEVTVFNfRU5WSVJPTk1FTlQgPSBNQUtFPSIkKE1BS0UpIiBDQz0iJChDQykiIENGTEFHUz0iJChDRkxBR1MpIiBcCisgCisgQlVJTERDSEVDS19FTlZJUk9OTUVOVCA9IF9sdF9wa2dkYXRhZGlyPSIkKGFic190b3Bfc3JjZGlyKSIgXAorIAlMSUJUT09MSVpFPSIkKGFic190b3BfYnVpbGRkaXIpL2xpYnRvb2xpemUiIFwKKy0JTElCVE9PTD0iJChhYnNfdG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCisrCUxJQlRPT0w9IiQoYWJzX3RvcF9idWlsZGRpcikvJChob3N0X2FsaWFzKS1saWJ0b29sIiBcCisgCXRzdF9hY2xvY2FsZGlyPSIkKGFic190b3Bfc3JjZGlyKS9tNCIKKyAKKyBJTlNUQUxMQ0hFQ0tfRU5WSVJPTk1FTlQgPSBcCisgCUxJQlRPT0xJWkU9IiQoYmluZGlyKS9gZWNobyBsaWJ0b29saXplIHwkKFNFRCkgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYCIgXAorLQlMSUJUT09MPSIkKGJpbmRpcikvYGVjaG8gbGlidG9vbCB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKysJTElCVE9PTD0iJChiaW5kaXIpL2BlY2hvICQoaG9zdF9hbGlhcyktbGlidG9vbCB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKyAJTFRETElOQ0w9Ii1JJChpbmNsdWRlZGlyKSIgXAorIAlMSUJMVERMPSIkKGxpYmRpcikvbGlibHRkbC5sYSIgXAorIAl0c3RfYWNsb2NhbGRpcj0iJChhY2xvY2FsZGlyKSIKK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorLS0tIGEvbTQvbGlidG9vbC5tNAorKysrIGIvbTQvbGlidG9vbC5tNAorQEAgLTg2LDcgKzg2LDggQEAgX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisgTElCVE9PTF9ERVBTPSRsdG1haW4KKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgQUNfU1VCU1QoTElCVE9PTClkbmwKKyAKKyBfTFRfU0VUVVAKK0BAIC0xOTksNyArMjAwLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9yZW5hbWUtd2l0aC1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3JlbmFtZS13aXRoLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyYjExMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9yZW5hbWUtd2l0aC1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsMTY2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCByZW5hbWVzIHRoZSAtLXdpdGgtc3lzcm9vdCBvcHRpb24gdG8gLS13aXRoLWxpYnRvb2wtc3lzcm9vdAordG8gYXZvaWQgbmFtZXNwYWNlIGNvbmZsaWN0IHdpdGggYmludXRpbHMsIGdjYyBhbmQgb3RoZXIgdG9vbGNoYWluCitjb21wb25lbnRzLgorCitJIGFsc28gcmVwb3J0ZWQgdGhlIHByb2JsZW0gdG8gbGlidG9vbCBoZXJlCisKK2h0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9saWJ0b29sLzIwMTAtMTAvbXNnMDAwNDguaHRtbAorCistS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorLS0tIGEvbTQvbGlidG9vbC5tNAorKysrIGIvbTQvbGlidG9vbC5tNAorQEAgLTEyMTUsMjggKzEyMTUsMjggQEAgX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorICMgLS0tLS0tLS0tLS0tLS0tLQorIEFDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKKyBbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCistQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAorLVtBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3Jvb3RAPDpAPURJUkA6PkBdLAorK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAorK1tBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnRvb2wtc3lzcm9vdEA8OkA9RElSQDo+QF0sCisgICBbU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QKKyAgICBpZiBub3Qgc3BlY2lmaWVkKS5dKV0sCistW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQorIAorIGRubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKyBkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKyBsdF9zeXNyb290PQorLWNhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAorK2Nhc2UgJHdpdGhfbGlidG9vbF9zeXNyb290IGluICMoCisgIHllcykKKyAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgICBmaQorICAgIDs7ICMoCisgIC8qKQorLSAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICA7OyAjKAorICBub3wnJykKKyAgICA7OyAjKAorICAqKQorLSAgIEFDX01TR19SRVNVTFQoWyR3aXRoX3N5c3Jvb3RdKQorKyAgIEFDX01TR19SRVNVTFQoWyR3aXRoX2xpYnRvb2xfc3lzcm9vdF0pCisgICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgICA7OworIGVzYWMKK2RpZmYgLS1naXQgYS90ZXN0cy9zeXNyb290LmF0IGIvdGVzdHMvc3lzcm9vdC5hdAorLS0tIGEvdGVzdHMvc3lzcm9vdC5hdAorKysrIGIvdGVzdHMvc3lzcm9vdC5hdAorQEAgLTY0LDcgKzY0LDcgQEAgd2hpbGUgcmVhZCBmaWxlOyBkbworIGRvbmVdKQorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTExNCw3ICsxMTQsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF1dKQorQEAgLTE1NSw3ICsxNTUsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbcHJvZy5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF1dKQorZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3RzdWl0ZSBiL3Rlc3RzL3Rlc3RzdWl0ZQorLS0tIGEvdGVzdHMvdGVzdHN1aXRlCisrKysgYi90ZXN0cy90ZXN0c3VpdGUKK0BAIC00ODk0NSw3ICs0ODk0NSw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNDkxNTQsNyArNDkxNTQsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTQ5MzQyLDcgKzQ5MzQyLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC00OTY5NCw3ICs0OTY5NCw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNDk5MDMsNyArNDk5MDMsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTUwMDkxLDcgKzUwMDkxLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC01MDQ0Myw3ICs1MDQ0Myw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNTA2NTIsNyArNTA2NTIsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTUwODQwLDcgKzUwODQwLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC90cmFpbGluZ3NsYXNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3RyYWlsaW5nc2xhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4MjRkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC90cmFpbGluZ3NsYXNoLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBIGNvbW1hbmQgbGlrZSAvYmluL3NoIC4uLy4uL2k1ODYtcG9reS1saW51eC1saWJ0b29sICAgLS1tb2RlPWluc3RhbGwgL3Vzci9iaW4vaW5zdGFsbCAtYyAgIGdjay1yb290cy1zdG9yZS1zdGFuZGFsb25lLmxhICcvbWVkaWEvZGF0YTEvYnVpbGRzL3Bva3kxL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvZ25vbWUta2V5cmluZy0yLjI2LjEtcjEvaW1hZ2UvdXNyL2xpYi9nbm9tZS1rZXlyaW5nL3N0YW5kYWxvbmUvJyBmYWlscyAoZS5nLiBnbm9tZS1rZXlyaW5nIG9yIHB1bHNlYXVkaW8pCisKK1RoaXMgaXMgYmVjYXVzZSBsaWJkaXIgaGFzIGEgdHJhaWxpbmcgc2xhc2ggd2hpY2ggYnJlYWtzIHRoZSBjb21wYXJpc2lvbi4KKworUlAgMi8xLzEwCisKK01lcmdlZCBhIHBhdGNoIHJlY2VpdmVkIGZyb20gR2FyeSBUaG9tYXMgPGdhcnlAbWxiYXNzb2MuY29tPgorCitEYXRlOiAyMDEwLzA3LzEyCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMjM1Niw4ICsyMzU2LDE1IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKyAJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKyAgICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGxpYmRpciIKKysgICAgICBkZXN0bGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0ZGlyIgorKyAgICAgIHNfZGVzdGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisgCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKy0JICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKysJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJHNfZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkZGVzdGxpYmRpclwkJSUiYAorIAorIAkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKyAJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdW53aW5kLW9wdC1wYXJzaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjMzYmM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaApAQCAtMCwwICsxLDE3OSBAQAorQ3V0IGFuZCBwYXN0ZSB0aGUgcGllY2VzIG9mIGJ1aWxkLWF1eC9vcHRpb25zLXBhcnNlciBpbmxpbmUgaW50byB0aGUgbWFpbgorbHRtYWluLnNoIGNvZGUuIFRoaXMgcmVtb3ZlcyBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGNhdXNlZCBieSB0aGUgCityZXBlYXRlZCBjYWxscyB0byBmdW5jX3F1b3RlX2Zvcl9ldmFsLCB0aGUgbWVjaGFuaXNtIGZ1bmNsaWIgdXNlcwordG8gY29uc3RydWN0IHRoZSBmdW5jdGlvbnMgdXNlZCBmb3Igb3B0aW9uIHBhcnNpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtCZWluZyBkaXNjdXNzZWQgb24gbWFpbGluZyBsaXN0IEZlYiAyMDE1XQorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK2luZGV4IGQ1Y2YwN2EuLjBmNTQzMDMgMTAwNjQ0CistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMzQyLDExICszNDIsMTUgQEAgX0xUX0VPRgorICMgbGlidG9vbF9vcHRpb25zX3ByZXAgW0FSR10uLi4KKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQcmVwYXJhdGlvbiBmb3Igb3B0aW9ucyBwYXJzZWQgYnkgbGlidG9vbC4KKy1saWJ0b29sX29wdGlvbnNfcHJlcCAoKQorLXsKKysjbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKysjeworICAgICAkZGVidWdfbW9kZQorIAorICAgICAjIE9wdGlvbiBkZWZhdWx0czoKKysgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKysgICAgb3B0X3dhcm5pbmdfdHlwZXM9CisrCisrICAgICMgT3B0aW9uIGRlZmF1bHRzOgorICAgICBvcHRfY29uZmlnPWZhbHNlCisgICAgIG9wdF9kbG9wZW49CisgICAgIG9wdF9kcnlfcnVuPWZhbHNlCitAQCAtMzgyLDE5ICszODYsMTQgQEAgbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKyAgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgIDs7CisgICAgIGVzYWMKKy0KKy0gICAgIyBQYXNzIGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KKy0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKy0gICAgbGlidG9vbF9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorLX0KKy1mdW5jX2FkZF9ob29rIGZ1bmNfb3B0aW9uc19wcmVwIGxpYnRvb2xfb3B0aW9uc19wcmVwCisrI30KKyAKKyAKKyAjIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQcm92aWRlIGhhbmRsaW5nIGZvciBsaWJ0b29sIHNwZWNpZmljIG9wdGlvbnMuCistbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCisteworKyNsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKKysjeworICAgICAkZGVidWdfY21kCisgCisgICAgICMgUGVyZm9ybSBvdXIgb3duIGxvb3AgdG8gY29uc3VtZSBhcyBtYW55IG9wdGlvbnMgYXMgcG9zc2libGUgaW4KK0BAIC00NzQsMjkgKzQ3Myw5MCBAQCBsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICA7OworIAorLQkjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0aGlzIGhvb2sgZnVuY3Rpb246CistICAgICAgICAqKQkJc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKy0gICAgICBlc2FjCistICAgIGRvbmUKKysgICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCisrICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKysgICAgICAgICAgICAgICAgICAgICAgJGRlYnVnX2NtZAorKyAgICAgICAgICAgICAgICAgICAgICA7OworIAorKyAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgLS13YXJuaW5ncyBub25lICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKwkJICAgICAgOzsKKyAKKy0gICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCistICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CistICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CistfQorLWZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucworKyAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCisrICAgICAgICAgICAgICAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAkMSIgaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhaWxpbmcgc3BhY2UgcHJldmVudHMgbWF0Y2hpbmcgbGFzdCAkMSBhYm92ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmRfdW5pcSBvcHRfd2FybmluZ190eXBlcyAiICQxIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqYWxsKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqbm9uZSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPW5vbmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz06CisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz1mdW5jX2ZhdGFsX2Vycm9yCisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICopCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB3YXJuaW5nIGNhdGVnb3J5OiAnJDEnIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAgLS12ZXJib3NlfC12KSBvcHRfdmVyYm9zZT06IDs7CisrICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OworKyAgICAgICAgLVw/fC1oKSAgICAgICBmdW5jX3VzYWdlIDs7CisrICAgICAgICAtLWhlbHApICAgICAgIGZ1bmNfaGVscCA7OworKworKwkjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zIChwbHVnaW5zIG1heSBuZWVkIHRoaXMpOgorKwktLSo9KikgICAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzICIkX0dfb3B0IgorKwkgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X2VxdWFsc19yaHMiICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gc2hvcnQgb3B0aW9uczoKKysgICAgICAgIC1XKikKKysgICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisrICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisrICAgICAgICAtXD8qfC1oKnwtdip8LXgqKQorKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKysgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgIC0tKSAgICAgICAgICAgYnJlYWsgOzsKKysgICAgICAgIC0qKSAgICAgICAgICAgZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJF9HX29wdCciIDs7CisrICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OyBzaGlmdDsgYnJlYWsgOzsKKysgICAgICBlc2FjCisrICAgIGRvbmUKKysjfQorIAorKyMgRGlzcGxheSBhbGwgd2FybmluZ3MgaWYgLVcgd2FzIG5vdCBnaXZlbi4KKyt0ZXN0IC1uICIkb3B0X3dhcm5pbmdfdHlwZXMiIHx8IG9wdF93YXJuaW5nX3R5cGVzPSIgJHdhcm5pbmdfY2F0ZWdvcmllcyIKKyAKKyAKKyAjIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorICMgYXJndW1lbnRzLgorLWxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQorLXsKKysjbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCisrI3sKKyAgICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgICAgaWYgdGVzdCAwIC1sdCAkIzsgdGhlbgorLSAgICAgIG5vbm9wdD0kMQorKyAgICAgIG5vbm9wdD0kX0dfb3B0CisgICAgICAgc2hpZnQKKyAgICAgZmkKKyAKK0BAIC01MzcsMjAgKzU5NywxMCBAQCBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKKyAgICAgICBnZW5lcmljX2hlbHA9JGhlbHAKKyAgICAgICBoZWxwPSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICB9CisrI30KKyAKKy0gICAgIyBQYXNzIGJhY2sgdGhlIHVucGFyc2VkIGFyZ3VtZW50IGxpc3QKKy0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKy0gICAgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKy19CistZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zCistCistCistIyBQcm9jZXNzIG9wdGlvbnMgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCAtLWhlbHAgYW5kIC0tdmVyc2lvbgorLSMgY2FuIHJldHVybiBxdWlja2x5LgorLWZ1bmNfb3B0aW9ucyAkezErIiRAIn0KKy1ldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAorLQorLQorKyMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQhCisrJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKyAKKyAjIyAtLS0tLS0tLS0tLSAjIworICMjICAgIE1haW4uICAgICMjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdXNlLXN5c3Jvb3QtaW4tbGlicGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjk5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdXNlLXN5c3Jvb3QtaW4tbGlicGF0aC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hlbiB1c2luZyBzeXNyb290IHdlIHNob3VsZCBhcHBlbmQgaXQgdG8gbGliZGlyLCB3aGljaCBpcyBoZWxwZnVsIGluCitjcm9zcyBidWlsZHMgYXMgdGhlIHN5c3RlbSBpcyBzdGFnZWQgaW4gdGhlIHN5c3Jvb3QuIEZvciBub3JtYWwgYnVpbGRzLAoraS5lLiB3aGVuIGx0X3N5c3Jvb3QgaXMgbm90IHNldCwgaXQgd2lsbCBzdGlsbCBiZWhhdmUgdGhlIHNhbWUgYW5kIGFkZAorLUwvdXNyL2xpYiB0byB0aGUgcmVsaW5rIGNvbW1hbmQuCisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTY0MjEsNyArNjQyMSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCistCSAgICAgIGFkZF9kaXI9LUwkbGliZGlyCisrCSAgICAgIGFkZF9kaXI9Ii1MJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisgCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQljYXNlICRsaWJkaXIgaW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbF8yLjQuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbF8yLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYxYjJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCisKKyMKKyMgV2Ugd2FudCB0aGUgcmVzdWx0cyBvZiBsaWJ0b29sLWNyb3NzIHByZXNlcnZlZCAtIGRvbid0IHN0YWdlIGFueXRoaW5nIG91cnNlbHZlcy4KKyMKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgc2VkIC1lICdzQC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9QEBnJyBcCisgICAgICAgICAgICAtZSAnc0Ake1NUQUdJTkdfRElSX0hPU1R9QEBnJyBcCisgICAgICAgICAgICAtZSAnc0BeXChzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IlwpLipAXDEke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSJcKS4qQFwxJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IkAnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iXCkuKkBcMSR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChwcmVkZXBfb2JqZWN0cz0iXCkuKkBcMSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChwb3N0ZGVwX29iamVjdHM9IlwpLipAXDEiQCcgXAorICAgICAgICAgICAgLWkgJHtEfSR7YmluZGlyfS9saWJ0b29sCit9CisKK2xpYnRvb2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9LyoKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8qCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbmF0aXZlc2RrLWxpYnRvb2xfMi40LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOGVhZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiCkBAIC0wLDAgKzEsMzEgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vbGlidG9vbDoiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wcmVmaXgucGF0Y2giCitTUkNfVVJJICs9ICJmaWxlOi8vZml4aW5zdGFsbC5wYXRjaCIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworUyA9ICIke1dPUktESVJ9L2xpYnRvb2wtJHtQVn0iCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9saWJ0b29sLyoiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJ9LworfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImxpYnRvb2xuYXRpdmVzZGtfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitsaWJ0b29sbmF0aXZlc2RrX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWluc3RhbGwgLW0gNzU1ICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tbGlidG9vbCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyR7SE9TVF9TWVN9LWxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzLW5hdGl2ZV8wLjkuNjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTkwZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiQ29udmVydCBMaW51eERvYyBTR01MIHNvdXJjZSBpbnRvIG90aGVyIGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9saW51eGRvYy10b29scyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDc3ZWY2NGVjM2FjMjU3ZmIwZDc4NjUzMWNmMjY5MzEiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIG9wZW5qYWRlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbC9saW51eGRvYy10b29scy9saW51eGRvYy10b29sc18ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3NnbWwycnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfdHh0X2RvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3RleF9kb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9kdmlwc19kb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDEzZDUwMDkxOGE3YTE0NWIwZWRjMmYxNmY2MWRkMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MTAzZmFjZWUxOGEyZWE5NzE4NmNhNDU5ZDc0M2QyMmY3Zjg5YWQ0YjVjZDFkZmQxYzM0ZjgzZDZiZmQ0MTAxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbmF0aXZlCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ1RNUERJUj0ke1R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX2R2aXBzX2RvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfZHZpcHNfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MGIzNjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX2R2aXBzX2RvYy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitEaXNhYmxlIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24gd2hpY2ggcmVxdWlyZXMgdGhlIGR2aXBzIHV0aWxpdHkuCitUaGlzIHBhdGNoIHNob3VsZCBiZSBkcm9wcGVkIG9uY2Ugd2UgaW5jbHVkZSBhIG5hdGl2ZSB2ZXJzaW9uIG9mCitkdmlwcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1RlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGRvY3VtZW50YXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2ggbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCistLS0gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMi0yNSAxNToyNjo0MS4xNDI5MTc3ODIgLTA4MDAKKysrKyBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMi0yNSAxNToyNzoyNS4xNDE5MTc0NzIgLTA4MDAKK0BAIC01MiwxMyArNTIsMTMgQEAKKyAjCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKyAjZmkKKyAKKy1pZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCistCWVjaG8gIiAgICsgZHZpcHMiID4mMgorLQlkdmlwcyAtdCBsZXR0ZXIgLW8gLi9ndWlkZS5wcyAuL2d1aWRlLmR2aQorLQlpZiBbIC1uICJgd2hpY2ggZ3ppcGAiIC1hIC1mIC4vZ3VpZGUucHMgXTsgdGhlbgorLQkJZ3ppcCAtZk4gLi9ndWlkZS5wcworLQlmaQorLWZpCisrI2lmIFsgLW4gImB3aGljaCBkdmlwc2AiIF07IHRoZW4KKysjCWVjaG8gIiAgICsgZHZpcHMiID4mMgorKyMJZHZpcHMgLXQgbGV0dGVyIC1vIC4vZ3VpZGUucHMgLi9ndWlkZS5kdmkKKysjCWlmIFsgLW4gImB3aGljaCBnemlwYCIgLWEgLWYgLi9ndWlkZS5wcyBdOyB0aGVuCisrIwkJZ3ppcCAtZk4gLi9ndWlkZS5wcworKyMJZmkKKysjZmkKKyAKKyAKKyBlY2hvICItIEJ1aWxkaW5nIGluZm8gZG9jcyIgPiYyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3NnbWwycnRmLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGM4YThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIDc1NmYyMGU3MGE5N2VlMmRlYTliMzJjMDk1NWVhYmZjMjdmMjliZTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDI5IE1heSAyMDEzIDE2OjUwOjE3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoZSBidWlsZCBvZiBzZ21sMnJ0ZiBpcyBwcm9ibGVtYXRpYyBkdWUgdG8gdGhlIHdheSBpdCB3YW50cworIHRvIGxpbmsgdG8gYSBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uIG9mIGZsZXguIEZsZXggb25seQorIHNoaXBzIHdpdGggYSBzdGF0aWMgbGliLiBSYXRoZXIgdGhhbiBkaXZlcmdpbmcgZnJvbQorIHVwc3RyZWFtIGZsZXgsIHNpbXBseSBza2lwIGJ1aWxkaW5nIHRoaXMgdW4tbmVlZGVkIHV0aWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGEgZmVhdHVyZS4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgMTIgKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDM1OWYxNGUuLmZjMDQwMjAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00MCw3ICs0MCw3IEBAIHBlcmw1bGliX2RkaXIgICAgICA9ICQoREVTVERJUikkKHBlcmw1bGliZGlyKQorIHBrZ2RhdGFfZGRpciAgICAgICA9ICQoREVTVERJUikkKHBrZ2RhdGFkaXIpCisgdGV4X2RkaXIgICAgICAgICAgID0gJChERVNURElSKSQodGV4ZGlyKQorIAorLXByb2dzICAgIDo9IHNnbWwyaHRtbCBzZ21sMmluZm8gc2dtbDJsYXRleCBzZ21sMmx5eCBzZ21sMnJ0ZiBzZ21sMnR4dCBzZ21sY2hlY2sKKytwcm9ncyAgICA6PSBzZ21sMmh0bWwgc2dtbDJpbmZvIHNnbWwybGF0ZXggc2dtbDJseXggc2dtbDJ0eHQgc2dtbGNoZWNrCisgCisgUFJPRklMRSAgPQorIElOQ0xVREUgID0KK0BAIC03MSw5ICs3MSw5IEBAIGVuZGlmCisgCSggY2Qgc2dtbHByZSA7IFwKKyAJICAkKE1BS0UpICBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgTEVYPWZsZXggc2dtbHByZSB8fCBleGl0IC0xICkKKyAKKy0JQGVjaG8gIkNvbXBpbGluZyBSVEYgY29udmVyc2lvbiB0b29scyAoaW4gcnRmLWZpeC8pLi4uIgorLQkoIGNkIHJ0Zi1maXggOyBcCistCSAgJChNQUtFKSBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgfHwgZXhpdCAtMSApCisrIwlAZWNobyAiQ29tcGlsaW5nIFJURiBjb252ZXJzaW9uIHRvb2xzIChpbiBydGYtZml4LykuLi4iCisrIwkoIGNkIHJ0Zi1maXggOyBcCisrIwkgICQoTUFLRSkgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIHx8IGV4aXQgLTEgKQorIAorIAlAZWNobyAibWFraW5nIG1hbiBwYWdlcyBpbiBnZW5tYW4gLi4uIgorIAlpZiBbICEgLWQgZ2VubWFuIF07IHRoZW4gbWtkaXIgZ2VubWFuIDsgZmkKK0BAIC0xMTcsNyArMTE3LDcgQEAgZW5kaWYKKyAKKyAjICAgIC0tIEluc3RhbGwgYXV4aWxpYXJ5IHByb2dyYW1zCisgCW1rZGlyIC1wICQoYXV4YmluX2RkaXIpCistCWZvciBpaSBpbiBzZ21scHJlL3NnbWxwcmUgcnRmLWZpeC9ydGYycnRmOyBkbyBcCisrCWZvciBpaSBpbiBzZ21scHJlL3NnbWxwcmU7IGRvIFwKKyAJICBibj1gYmFzZW5hbWUgJCRpaWA7IFwKKyAJICAkKElOU1RBTExfUFJPR1JBTSkgJCRpaSAkKGF1eGJpbl9kZGlyKS8kJGJuOyBcCisgCWRvbmUKK0BAIC0yMDYsNyArMjA2LDcgQEAgYmluL2xpbnV4ZG9jOjogTWFrZWZpbGUgYmluL2xpbnV4ZG9jLmluCisgCisgY2xlYW46OgorIAktcm0gLWYgKn4gYmluLyp+IGJpbi9saW51eGRvYworLQlmb3IgZCBpbiAkKERESVJTKSAkKE1ESVJTKSBydGYtZml4OyBkbyAkKE1BS0UpIC1DICQkZCBjbGVhbjsgZG9uZQorKwlmb3IgZCBpbiAkKERESVJTKSAkKE1ESVJTKTsgZG8gJChNQUtFKSAtQyAkJGQgY2xlYW47IGRvbmUKKyAJKGNkIHNnbWxwcmUgOyBybSAtZiBzZ21scHJlLm8gc2dtbHByZSkKKyAJLXJtIC1yZiBnZW5tYW4vCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90ZXhfZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90ZXhfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg5NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRGlzYWJsZSBidWlsZGluZyBkb2N1bWVudGF0aW9uIHdoaWNoIHJlcXVpcmVzIHRoZSBsYXRleCB1dGlsaXR5LgorVGhpcyBwYXRjaCBzaG91bGQgYmUgZHJvcHBlZCBvbmNlIHdlIGluY2x1ZGUgYSBuYXRpdmUgdmVyc2lvbiBvZgorbGF0ZXguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitUZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBkb2N1bWVudGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAorLS0tIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoCTIwMDktMTEtMDkgMTE6NTg6MjUuMDAwMDAwMDAwIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDItMjUgMTU6MjM6NTguNjEwMDE2MTE0IC0wODAwCitAQCAtNDYsMTEgKzQ2LDExIEBACisgCSRUTVBESVIvc2dtbDJ0eHQgLWIgMSAuL2d1aWRlCisgZmkKKyAKKy1pZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCistCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMmxhdGV4CistCWVjaG8gIi0gQnVpbGRpbmcgbGF0ZXggZG9jcyIgPiYyCistCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCisrIwlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJsYXRleAorKyMJZWNobyAiLSBCdWlsZGluZyBsYXRleCBkb2NzIiA+JjIKKysjCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKysjZmkKKyAKKyBpZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCisgCWVjaG8gIiAgICsgZHZpcHMiID4mMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90eHRfZG9jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90eHRfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNzg0MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRGlzYWJsZSBidWlsZGluZyB0eHQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLAorYXMgSSBoYXZlIGZvdW5kIGFuIFVidW50dSAxMC4xMCBzeXN0ZW0gd2hpY2ggdGhyb3dzIGVycm9ycyBkdXJpbmcKK2J1aWxkaW5nIHRoaXMgdGhhdCBJJ2QgbGlrZSB0byB1bHRpbWF0ZWx5IGZpeC4gVGhlIGVycm9yIG1hbmlmZXN0cworaXRzZWxmIGZyb20gdGhlIGVuZCBvZiBMaW51eERvY1Rvb2xzLnBtIHdpdGggdGhlIGZvbGxvd2luZyBtZXNzYWdlcworZHVyaW5nIGRvX2luc3RhbGw6CisKK3wgLSBCdWlsZGluZyB0eHQgZG9jcworfCBQcm9jZXNzaW5nIGZpbGUgLi9ndWlkZQorfCB0cm9mZjogZmF0YWwgZXJyb3I6IGNhbid0IGZpbmQgbWFjcm8gZmlsZSBzCit8ICBmbXRfdHh0Ojpwb3N0QVNQOiBFbXB0eSBvdXRwdXQgZmlsZSwgZXJyb3Igd2hlbiBjYWxsaW5nIGdyb2ZmLiBBYm9ydGluZy4uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorVGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpY2ggZGlzYWJsZXMgZG9jdW1lbnRhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy8vZG9jL01ha2Vkb2Muc2ggbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCistLS0gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvL2RvYy9NYWtlZG9jLnNoCTIwMDktMTEtMDkgMTE6NTg6MjUuMDAwMDAwMDAwIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDMtMDQgMTc6Mzc6MjQuNzg4OTIzOTk4IC0wODAwCitAQCAtNDAsMTEgKzQwLDExIEBACisgCisgY2htb2QgdSt4ICRUTVBESVIvbGludXhkb2MKKyAKKy1pZiBbIC1uICJgd2hpY2ggZ3JvZmZgIiBdOyB0aGVuCistCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMnR4dAorLQllY2hvICItIEJ1aWxkaW5nIHR4dCBkb2NzIiA+JjIKKy0JJFRNUERJUi9zZ21sMnR4dCAtYiAxIC4vZ3VpZGUKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggZ3JvZmZgIiBdOyB0aGVuCisrIwlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJ0eHQKKysjCWVjaG8gIi0gQnVpbGRpbmcgdHh0IGRvY3MiID4mMgorKyMJJFRNUERJUi9zZ21sMnR4dCAtYiAxIC4vZ3VpZGUKKysjZmkKKyAKKyBpZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCisgCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMmxhdGV4CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuMTcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE0ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYwpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIG00LmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworTElDRU5TRSA9ICJHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisJICAgICAgICAgICAgZmlsZTovL2V4YW1wbGVzL0NPUFlJTkc7bWQ1PTQwMzE1OTNiMjE2NmQ2YzQ3Y2FlMjgyZDk0NGE3ZWRlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vYWNfY29uZmlnX2xpbmtzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorCSAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNWU5OTU0YjFkYWUwMzY3NjJmN2IxMzY3M2EyY2Y3NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzY2U3MjUxMzNlZTU1MmI4YjRiYWNhNzgzN2ZiNzcyOTQwYjI1ZTgxYjJhOWRjOTI1MzdhZWFmNzMzNTM4YzllIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjkuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYjJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBtNC5pbmMKKworTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmVcCisJZmlsZTovL2V4YW1wbGVzL0NPUFlJTkc7bWQ1PTFkNDliZDYxZGM1OTBmMDE0Y2FlNzE3M2I0M2UzZTVjIgorCitQUiA9ICJyMiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYmE4ZTE0N2FmZjVlNzliZDJiZmI5ODNkODZiNTNkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MTVjZTUzODUzZmJmNjQ5MzYxN2Y0NjczODliNzk5MjA4YjFlYzk4Mjk2Yjk1YmU0NGE2ODNmOGJjZmQ3YzQ3IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC1uYXRpdmVfMS40LjE3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQ4YWEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitpbmhlcml0IG5hdGl2ZQorCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCitERVBFTkRTICs9ICJnbnUtY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L2dudS1jb25maWcvY29uZmlnLnN1YiAuCisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9nbnUtY29uZmlnL2NvbmZpZy5ndWVzcyAuCisJb2VfcnVuY29uZgorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4MzkyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYwpAQCAtMCwwICsxLDEwIEBACitTVU1NQVJZID0gIlRyYWRpdGlvbmFsIFVuaXggbWFjcm8gcHJvY2Vzc29yIgorREVTQ1JJUFRJT04gPSAiR05VIG00IGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFkaXRpb25hbCBVbml4IG1hY3JvIHByb2Nlc3Nvci4gIEl0IGlzIG1vc3RseSBTVlI0IFwKK2NvbXBhdGlibGUgYWx0aG91Z2ggaXQgaGFzIHNvbWUgZXh0ZW5zaW9ucyAoZm9yIGV4YW1wbGUsIGhhbmRsaW5nIG1vcmUgdGhhbiA5IHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0byBtYWNyb3MpLiBcCitHTlUgTTQgYWxzbyBoYXMgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciBpbmNsdWRpbmcgZmlsZXMsIHJ1bm5pbmcgc2hlbGwgY29tbWFuZHMsIGRvaW5nIGFyaXRobWV0aWMsIGV0Yy4iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VNQUtFICs9ICInaW5mb2Rpcj0ke2luZm9kaXJ9JyIKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAiCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbTQvbTQtJHtQVn0udGFyLmd6IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvYWNfY29uZmlnX2xpbmtzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvYWNfY29uZmlnX2xpbmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NWMwYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitUaGlzIHBhdGNoIGZpeGVzIGEgYnVpbGQgcHJvYmxlbSBmb3IgbTQtbmF0aXZlIGV4cGVyaWVuY2VkIG9uIFVidW50dSA5LjEwLAord2hlcmUgYXV0b2NvbmYvYXV0b21ha2UgKEFDX0NPTkZJR19MSU5LUykgZW5kcyB1cCBtYWtpbmcgR05VbWFrZWZpbGUgYQorc3ltbGluayB0byBpdHNlbGYuCisKK1RoZSBwYXRjaCBjb21tZW50cyBvdXQgYWNfY29uZmlnX2xpbmtzIGRpcmVjdGx5IGluIGNvbmZpZ3VyZSwKK2FzIGF1dG9yZWNvbmYgaXMgbm90IGFjdHVhbGx5IHJ1biBmb3IgbTQtbmF0aXZlLgorCitJIGJlbGlldmUgaXQgc2hvdWxkIGJlIHNhZmUsIGFzIEdOVW1ha2VmaWxlIGlzIGFjdHVhbGx5IHVucGFja2VkIGZyb20KK3NvdXJjZSwgYW5kIHdoYXQgd2Ugd2FudCBpcyB0byBpcyB0byBub3QgdG91Y2ggaXQuCisKK1Rlc3RlZCBvbiB4ODZfNjRfbGludXggKFVidW50dSA4LjA0IGFuZCA5LjEwKS4KKworMjAwOS0xMS0xMAlFc2JlbiBIYWFiZW5kYWwJICAgIDxlaGFAZG9yZWRldmVsb3BtZW50LmRrPgorCitkaWZmIC11ck4gbTQtMS40LjEzLm9yaWcvY29uZmlndXJlIG00LTEuNC4xMy9jb25maWd1cmUKKy0tLSBtNC0xLjQuMTMub3JpZy9jb25maWd1cmUJMjAwOS0xMS0xMCAxMDo1NDowMC4zMDE3MDcwOTcgKzAxMDAKKysrKyBtNC0xLjQuMTMvY29uZmlndXJlCTIwMDktMTEtMTAgMTA6NTQ6MTcuMzE0MjA2Mzc5ICswMTAwCitAQCAtMTQ4NjAsOCArMTQ4NjAsOCBAQAorICAgIyBvbmx5LCBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgd2Ugc2tpcCB0aGUgbGluayB3aXRoIG9sZGVyIGF1dG9jb25mLgorICAgIyBBdXRvbWFrZSAxLjEwLjEgYW5kIGVhcmxpZXIgdHJ5IHRvIHJlbW92ZSBHTlVtYWtlZmlsZSBpbiBub24tVlBBVEgKKyAgICMgYnVpbGRzLCBzbyB1c2UgYSBzaGVsbCB2YXJpYWJsZSB0byBieXBhc3MgdGhpcy4KKy0gIEdOVW1ha2VmaWxlPUdOVW1ha2VmaWxlCistICBhY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgJEdOVW1ha2VmaWxlOiRHTlVtYWtlZmlsZSIKKysgIyBHTlVtYWtlZmlsZT1HTlVtYWtlZmlsZQorKyAjIGFjX2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyAkR05VbWFrZWZpbGU6JEdOVW1ha2VmaWxlIgorIAorIAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvZml4X2Zvcl9jaXJjdWxhcl9kZXBlbmRlbmN5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvZml4X2Zvcl9jaXJjdWxhcl9kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Nzc0NTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1RoZSBvbGRlciBHUEx2MiBtNCBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBuZXdlciBhdXRvY29uZi4gSXQgY2F1c2VzIHRoZSAKK2NpcmN1bGFyIGRlcGVuZGVuY3kgYXMgc2VlbiBiZWxsb3cuCisgIFJlbW92aW5nIHRoaXMgbTQgZmlsZSB3aGljaCB3YXMgbmVlZGVkIG9ubHkgZm9ybCBvbGRlciBhdXRvY29uZgorCit8IGNvbmZpZ3VyZS5hYzozNDogZXJyb3I6IEFDX1JFUVVJUkU6IGNpcmN1bGFyIGRlcGVuZGVuY3kgb2YgQUNfR05VX1NPVVJDRQorfCAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbTQtMS40LjktcjAvbTQtMS40LjkvbTQvZXh0ZW5zaW9ucy5tNDoxOTogQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgLi4vLi4vbGliL2F1dG9jb25mL3NwZWNpZmljLm00OjMxMDogQUNfR05VX1NPVVJDRSBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9tNC0xLjQuOS1yMC9tNC0xLjQuOS9tNC9nbnVsaWItY29tcC5tNDoyMTogTTRfRUFSTFkgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6MzQ6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9tNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorfCBhY2xvY2FsOiAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vYXV0b200dGUgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKK3wgYXV0b3JlY29uZjogYWNsb2NhbCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wMy8xNgorCitJbmRleDogbTQtMS40LjkvbTQvZXh0ZW5zaW9ucy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG00LTEuNC45Lm9yaWcvbTQvZXh0ZW5zaW9ucy5tNAorKysrIG00LTEuNC45L200L2V4dGVuc2lvbnMubTQKK0BAIC02LDUzICs2LDEwIEBACisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgVGhpcyBkZWZpbml0aW9uIG9mIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBpcyBzdG9sZW4gZnJvbSBDVlMKKy0jIEF1dG9jb25mLiAgUGVyaGFwcyB3ZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSB3ZSBjYW4gYXNzdW1lIEF1dG9jb25mCistIyAyLjYxIG9yIGxhdGVyIGV2ZXJ5d2hlcmUsIGJ1dCBzaW5jZSBDVlMgQXV0b2NvbmYgbXV0YXRlcyByYXBpZGx5CistIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorLQorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisgCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKyBBQ19ERUZVTihbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy0gIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0pCisrICBbXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L21ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZmI0MTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3LmhvbGdlcnNjaHVyaWcuZGUvcGF0Y2hlci5odG1sCisjCisKKy0tLSBtNC0xLjQuMi9kb2MvTWFrZWZpbGUuaW5+bWFrZQorKysrIG00LTEuNC4yL2RvYy9NYWtlZmlsZS5pbgorQEAgLTU3LDkgKzU3LDkgQEAKKyAJZGF0ZSA+ICQoc3JjZGlyKS9zdGFtcC12dGkKKyAKKyBpbnN0YWxsOiBhbGwKKy0JJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChpbmZvZGlyKQorKwkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChpbmZvZGlyKQorIAljZCAkKHNyY2RpcikgJiYgZm9yIGZpbGUgaW4gbTQuaW5mbyo7IGRvIFwKKy0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoaW5mb2RpcikvJCRmaWxlOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChpbmZvZGlyKS8kJGZpbGU7IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbDoKKy0tLSBtNC0xLjQuMi9zcmMvTWFrZWZpbGUuaW5+bWFrZQorKysrIG00LTEuNC4yL3NyYy9NYWtlZmlsZS5pbgorQEAgLTM1LDcgKzM1LDcgQEAKKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorIHRyYW5zZm9ybSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorLWJpbmRpciA9ICQoZXhlY19wcmVmaXgpL2JpbgorK2JpbmRpciA9IEBiaW5kaXJACisgCisgQ09NUElMRSA9ICQoQ0MpIC1jICQoREVGUykgJChJTkNMVURFUykgJChDUFBGTEFHUykgJChDRkxBR1MpCisgTElOSyA9ICQoQ0MpICQoTERGTEFHUykgLW8gJEAKK0BAIC04NCw4ICs4NCw4IEBACisgCSQoTElOSykgYW5zaTJrbnIubyAkKExJQlMpCisgCisgaW5zdGFsbDogYWxsCistCSQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgbTQgJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYAorKwkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBtNCAkKERFU1RESVIpJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYAorIAorIHVuaW5zdGFsbDoKKyAJcm0gLWYgJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvcmVtb3ZlLWdldHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmZiMzUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorZWdsaWJjIGhhcyByZW1vdmUgZ2V0cyBzdGFydGluZyAyLjE2Cit0aGVyZWZvcmUgY2hlY2sgZm9yIGl0cyBiZWluZyB0aGVyZSBiZWZvcmUgCit1bmRlZmluaW5nIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogbTQtMS40LjE3L2xpYi9zdGRpby5pbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbTQtMS40LjE3Lm9yaWcvbGliL3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNDo0MTowMS42Nzg0OTYyMjcgKzAzMDAKKysrKyBtNC0xLjQuMTcvbGliL3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNDo0MTo0OC44NDk0Mjc4MzkgKzAzMDAKK0BAIC03MTcsMTAgKzcxNywxMiBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmc7IGJlc2lkZXMsIEMxMQorICAgIHJlbW92ZWQgaXQuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworICNpZiBIQVZFX1JBV19ERUNMX0dFVFMKKyBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisgI2VuZGlmCisrI2VuZGlmCisgCisgCisgI2lmIEBHTlVMSUJfT0JTVEFDS19QUklOVEZAIHx8IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuMTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyYzBhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgbTQtJHtQVn0uaW5jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJjMGFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyZTk2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjo0ODogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorLi4uCit8IE1ha2VmaWxlLmFtOjE5OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCisKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDQKKworSW5kZXg6IG1ha2UtMy44MS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9jb25maWd1cmUuaW4KKysrKyBtYWtlLTMuODEvY29uZmlndXJlLmluCitAQCAtNDQsOSArNDQsNiBAQCBBQ19BSVgKKyBBQ19JU0NfUE9TSVgKKyBBQ19NSU5JWAorIAorLSMgTmVlZGVkIGZvciBhbnNpMmtucgorLUFNX0NfUFJPVE9UWVBFUworLQorICMgRW5hYmxlIGdldHRleHQsIGluICJleHRlcm5hbCIgbW9kZS4KKyAKKyBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKDAuMTQuMSkKK0luZGV4OiBtYWtlLTMuODEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9NYWtlZmlsZS5hbQorKysrIG1ha2UtMy44MS9NYWtlZmlsZS5hbQorQEAgLTE2LDcgKzE2LDcgQEAKKyAjIEdOVSBNYWtlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gMS44IGRpc3QtYnppcDIgY2hlY2stbmV3cyBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAxLjggZGlzdC1iemlwMiBjaGVjay1uZXdzCisgQUNMT0NBTF9BTUZMQUdTCT0gIC1JIGNvbmZpZworIAorIE1BS0VfSE9TVCA9CUBNQUtFX0hPU1RACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlaW5mby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZDc2MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlaW5mby5wYXRjaApAQCAtMCwwICsxLDIyIEBACitBbGxvdyBkb2NzIHRvIGJ1aWxkIHdpdGggbWFrZWluZm8gNS5YLCBmaXhpbmcgdGhlIGVycm9yOgorCitkb2MvbWFrZS50ZXhpOjgxNjU6IEBpdGVteCBtdXN0IGZvbGxvdyBAaXRlbQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JQCisyMDE0LzAzLzI5CisKK0luZGV4OiBtYWtlLTMuODEvZG9jL21ha2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1ha2UtMy44MS5vcmlnL2RvYy9tYWtlLnRleGkJMjAwNi0wNC0wMSAwNjozNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtYWtlLTMuODEvZG9jL21ha2UudGV4aQkyMDE0LTAzLTI5IDA5OjM5OjUxLjAwNzcyNzAxMiArMDAwMAorQEAgLTgxNjIsNyArODE2Miw3IEBACisgcmFyZWx5IG5lZWQgdG8gc3BlY2lmeSB0aGlzIG9wdGlvbiBzaW5jZSBAc2FtcHttYWtlfSBkb2VzIGl0IGZvciB5b3U7Cisgc2VlIEByZWZ7LXcgT3B0aW9uLCAsVGhlIEBzYW1wey0tcHJpbnQtZGlyZWN0b3J5fSBPcHRpb259LikKKyAKKy1AaXRlbXggLS1uby1wcmludC1kaXJlY3RvcnkKKytAaXRlbSAtLW5vLXByaW50LWRpcmVjdG9yeQorIEBjaW5kZXggQGNvZGV7LS1uby1wcmludC1kaXJlY3Rvcnl9CisgRGlzYWJsZSBwcmludGluZyBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdW5kZXIgQGNvZGV7LXd9LgorIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIEBjb2Rley13fSBpcyB0dXJuZWQgb24gYXV0b21hdGljYWxseSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWE2MDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiR05VIHRvb2wgdGhhdCBjb250cm9scyB0aGUgYnVpbGQgcHJvY2VzcyIKK0RFU0NSSVBUSU9OID0gIk1ha2UgaXMgYSB0b29sIHdoaWNoIGNvbnRyb2xzIHRoZSBnZW5lcmF0aW9uIG9mIGV4ZWN1dGFibGVzIGFuZCBvdGhlciBub24tc291cmNlIGZpbGVzIG9mIGEgXAorcHJvZ3JhbSBmcm9tIHRoZSBwcm9ncmFtJ3Mgc291cmNlIGZpbGVzLiAgTWFrZSBnZXRzIGl0cyBrbm93bGVkZ2Ugb2YgaG93IHRvIGJ1aWxkIHlvdXIgcHJvZ3JhbSBmcm9tIGEgZmlsZSBcCitjYWxsZWQgdGhlIG1ha2VmaWxlLCB3aGljaCBsaXN0cyBlYWNoIG9mIHRoZSBub24tc291cmNlIGZpbGVzIGFuZCBob3cgdG8gY29tcHV0ZSBpdCBmcm9tIG90aGVyIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tYWtlLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tYWtlL21ha2UtJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdGV4aW5mbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzMuODEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfMy44MS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE3OWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzMuODEuYmIKQEAgLTAsMCArMSwxNSBAQAorUFIgPSAicjEiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zNjFiNmI4MzdjYWQyNmM2OTAwYTkyNmI2MmFhZGE1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbG9iL0NPUFlJTkcuTElCO21kNT00YTc3MGI2N2U2YmUwZjYwZGEyNDRiZWIyZGUwZmNlNCIKKworcmVxdWlyZSBtYWtlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCitTUkNfVVJJICs9ICJmaWxlOi8vbWFrZWluZm8ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNTQ4NTNlMGIyZGE5MGM1MjdlMzVhYWJiOGQ2ZjFlNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmM2U2OTAyMzc3MWUyMzkwOGY1ZDU1OTI5NTRkODI3MWQzZDZhZjA5NjkzY2VjZmQyOWNlZTZmZGU4NTUwZGM4IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWIwZDdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYgpAQCAtMCwwICsxLDEyIEBACitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCityZXF1aXJlIG1ha2UuaW5jCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWd1aWxlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTdhN2EyMjRhODIyZjk0Nzg5YTU4N2NjYmNlZGZmNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJjNzYxMzM4OTY1MGVlNmEyNDU1NGI1MjU3MmEyNzJmNzM1NjE2NGZkMmM0MTMyYjBiY2YxMzEyM2U0ZmNhNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvQ09QWUlORy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4OTAyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2gKQEAgLTAsMCArMSwzNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC1ydU4gbWFrZWRldnMtMS4wLjAtb3JpZy9DT1BZSU5HIG1ha2VkZXZzLTEuMC4wL0NPUFlJTkcKKy0tLSBtYWtlZGV2cy0xLjAuMC1vcmlnL0NPUFlJTkcJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBtYWtlZGV2cy0xLjAuMC9DT1BZSU5HCTIwMTAtMTItMDkgMTY6NDI6MjAuMjc0OTg0NjY1ICswODAwCitAQCAtMCwwICsxLDM0MCBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrDAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKwwKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKwwKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKwwKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKwwKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysKKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9tYWtlZGV2cy5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFmMzNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYwpAQCAtMCwwICsxLDU4OSBAQAorI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNkZWZpbmUgTUlOT1JCSVRTCTgKKyNkZWZpbmUgTUtERVYobWEsbWkpCSgoKG1hKSA8PCBNSU5PUkJJVFMpIHwgKG1pKSkKKyNkZWZpbmUgTUFYX0lEX0xFTiAgICAgIDQwCisjZGVmaW5lIE1BWF9OQU1FX0xFTiAgICA0MAorI2lmbmRlZiBQQVRIX01BWAorI2RlZmluZSBQQVRIX01BWCAgICAgICAgNDA5NgorI2VuZGlmCisjZGVmaW5lIFZFUlNJT04gICAgICAgICAiMS4wLjEiCisKKy8qIFRoZXNlIGFyZSBhbGwgc3RvbGVuIGZyb20gYnVzeWJveCdzIGxpYmJiIHRvIG1ha2UKKyAqIGVycm9yIGhhbmRsaW5nIHNpbXBsZXIgKGFuZCBzaW5jZSBJIG1haW50YWluIGJ1c3lib3gsCisgKiBJJ20gcmF0aGVyIHBhcnRpYWwgdG8gdGhlc2UgZm9yIGVycm9yIGhhbmRsaW5nKS4KKyAqICAtRXJpaworICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYXBwX25hbWUgPSAibWFrZWRldnMiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbW9yeV9leGhhdXN0ZWQgPSAibWVtb3J5IGV4aGF1c3RlZCI7CitzdGF0aWMgY2hhciBkZWZhdWx0X3Jvb3RkaXJbXT0iLiI7CitzdGF0aWMgY2hhciAqcm9vdGRpciA9IGRlZmF1bHRfcm9vdGRpcjsKK3N0YXRpYyBpbnQgdHJhY2UgPSAwOworCitzdHJ1Y3QgbmFtZV9pZCB7CisJY2hhciBuYW1lW01BWF9OQU1FX0xFTisxXTsKKwl1bnNpZ25lZCBsb25nIGlkOworCXN0cnVjdCBuYW1lX2lkICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBuYW1lX2lkICp1c3JfbGlzdCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IG5hbWVfaWQgKmdycF9saXN0ID0gTlVMTDsKKworc3RhdGljIHZvaWQgdmVycm9yX21zZyhjb25zdCBjaGFyICpzLCB2YV9saXN0IHApCit7CisJZmZsdXNoKHN0ZG91dCk7CisJZnByaW50ZihzdGRlcnIsICIlczogIiwgYXBwX25hbWUpOworCXZmcHJpbnRmKHN0ZGVyciwgcywgcCk7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yX21zZ19hbmRfZGllKGNvbnN0IGNoYXIgKnMsIC4uLikKK3sKKwl2YV9saXN0IHA7CisKKwl2YV9zdGFydChwLCBzKTsKKwl2ZXJyb3JfbXNnKHMsIHApOworCXZhX2VuZChwKTsKKwlwdXRjKCdcbicsIHN0ZGVycik7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZCB2cGVycm9yX21zZyhjb25zdCBjaGFyICpzLCB2YV9saXN0IHApCit7CisJaW50IGVyciA9IGVycm5vOworCisJaWYgKHMgPT0gMCkKKwkJcyA9ICIiOworCXZlcnJvcl9tc2cocywgcCk7CisJaWYgKCpzKQorCQlzID0gIjogIjsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHMsIHN0cmVycm9yKGVycikpOworfQorCitzdGF0aWMgdm9pZCBwZXJyb3JfbXNnX2FuZF9kaWUoY29uc3QgY2hhciAqcywgLi4uKQoreworCXZhX2xpc3QgcDsKKworCXZhX3N0YXJ0KHAsIHMpOworCXZwZXJyb3JfbXNnKHMsIHApOworCXZhX2VuZChwKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyBGSUxFICp4Zm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFICpmcDsKKworCWlmICgoZnAgPSBmb3BlbihwYXRoLCBtb2RlKSkgPT0gTlVMTCkKKwkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIHBhdGgpOworCXJldHVybiBmcDsKK30KKworc3RhdGljIGNoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwljaGFyICp0OworCisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0ID0gc3RyZHVwKHMpOworCisJaWYgKHQgPT0gTlVMTCkKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHN0cnVjdCBuYW1lX2lkKiBhbGxvY19ub2RlKHZvaWQpCit7CisJc3RydWN0IG5hbWVfaWQgKm5vZGU7CisJbm9kZSA9IChzdHJ1Y3QgbmFtZV9pZCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmFtZV9pZCkpOworCWlmIChub2RlID09IE5VTEwpIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisJfQorCW1lbXNldCgodm9pZCAqKW5vZGUtPm5hbWUsIDAsIE1BWF9OQU1FX0xFTisxKTsKKwlub2RlLT5pZCA9IDB4ZmZmZmZmZmY7CisJbm9kZS0+bmV4dCA9IE5VTEw7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCogcGFyc2VfbGluZShjaGFyICpsaW5lKQoreworCWNoYXIgKnA7CisJaW50IGk7CisJY2hhciBpZF9idWZbTUFYX0lEX0xFTisxXTsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZTsKKwlub2RlID0gYWxsb2Nfbm9kZSgpOworCXAgPSBsaW5lOworCWkgPSAwOworCS8vIEdldCBuYW1lIGZpZWxkCisJd2hpbGUgKCpwICE9ICc6JykgeworCQlpZiAoaSA+IE1BWF9OQU1FX0xFTikKKwkJCWVycm9yX21zZ19hbmRfZGllKCJOYW1lIGZpZWxkIHRvbyBsb25nIik7CisJCW5vZGUtPm5hbWVbaSsrXSA9ICpwKys7CisJfQorCW5vZGUtPm5hbWVbaV0gPSAnXDAnOworCXArKzsKKwkvLyBTa2lwIHRoZSBzZWNvbmQgZmllbGQKKwl3aGlsZSAoKnAgIT0gJzonKQorCQlwKys7CisJcCsrOworCS8vIEdldCBpZCBmaWVsZAorCWkgPSAwOworCXdoaWxlICgqcCAhPSAnOicpIHsKKwkJaWYgKGkgPiBNQVhfSURfTEVOKQorCQkJZXJyb3JfbXNnX2FuZF9kaWUoIklEIGZpbGVkIHRvbyBsb25nIik7CisJCWlkX2J1ZltpKytdID0gKnArKzsKKwl9CisJaWRfYnVmW2ldID0gJ1wwJzsKKwlub2RlLT5pZCA9IGF0b2woaWRfYnVmKTsKKwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2xpc3RfZnJvbV9maWxlKEZJTEUgKmZpbGUsIHN0cnVjdCBuYW1lX2lkICoqcGxpc3QpCit7CisJY2hhciAqbGluZTsKKwlpbnQgbGVuID0gMDsKKwlzaXplX3QgbGVuZ3RoID0gMjU2OworCXN0cnVjdCBuYW1lX2lkICpub2RlLCAqY3VyOworCisJaWYoKGxpbmUgPSAoY2hhciAqKW1hbGxvYyhsZW5ndGgpKSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKworCXdoaWxlICgobGVuID0gZ2V0bGluZSgmbGluZSwgJmxlbmd0aCwgZmlsZSkpICE9IC0xKSB7CisJCW5vZGUgPSBwYXJzZV9saW5lKGxpbmUpOworCQlpZiAoKnBsaXN0ID09IE5VTEwpIHsKKwkJCSpwbGlzdCA9IG5vZGU7CisJCQljdXIgPSAqcGxpc3Q7CisJCX0gZWxzZSB7CisJCQljdXItPm5leHQgPSBub2RlOworCQkJY3VyID0gY3VyLT5uZXh0OworCQl9CisJfQorCisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnZlcnQyZ3VpZChjaGFyICppZF9idWYsIHN0cnVjdCBuYW1lX2lkICpzZWFyY2hfbGlzdCkKK3sKKwljaGFyICpwOworCWludCBpc251bTsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZTsKKwlwID0gaWRfYnVmOworCWlzbnVtID0gMTsKKwl3aGlsZSAoKnAgIT0gJ1wwJykgeworCQlpZiAoIWlzZGlnaXQoKnApKSB7CisJCQlpc251bSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlwKys7CisJfQorCWlmIChpc251bSkgeworCQkvLyBDaGVjayBmb3IgYmFkIHVzZXIvZ3JvdXAgbmFtZQorCQlub2RlID0gc2VhcmNoX2xpc3Q7CisJCXdoaWxlIChub2RlICE9IE5VTEwpIHsKKwkJCWlmICghc3RybmNtcChub2RlLT5uYW1lLCBpZF9idWYsIHN0cmxlbihpZF9idWYpKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogQmFkIHVzZXIvZ3JvdXAgbmFtZSAlcyBkZXRlY3RlZFxuIiwgaWRfYnVmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW5vZGUgPSBub2RlLT5uZXh0OworCQl9CisJCXJldHVybiAodW5zaWduZWQgbG9uZylhdG9sKGlkX2J1Zik7CisJfSBlbHNlIHsKKwkJbm9kZSA9IHNlYXJjaF9saXN0OworCQl3aGlsZSAobm9kZSAhPSBOVUxMKSB7CisJCQlpZiAoIXN0cm5jbXAobm9kZS0+bmFtZSwgaWRfYnVmLCBzdHJsZW4oaWRfYnVmKSkpCisJCQkJcmV0dXJuIG5vZGUtPmlkOworCQkJbm9kZSA9IG5vZGUtPm5leHQ7CisJCX0KKwkJZXJyb3JfbXNnX2FuZF9kaWUoIk5vIGVudHJ5IGZvciAlcyBpbiBzZWFyY2ggbGlzdCIsIGlkX2J1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2xpc3Qoc3RydWN0IG5hbWVfaWQgKmxpc3QpCit7CisJc3RydWN0IG5hbWVfaWQgKmN1cjsKKwljdXIgPSBsaXN0OworCXdoaWxlIChjdXIgIT0gTlVMTCkgeworCQlsaXN0ID0gY3VyOworCQljdXIgPSBjdXItPm5leHQ7CisJCWZyZWUobGlzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfbmV3X2RpcmVjdG9yeShjaGFyICpuYW1lLCBjaGFyICpwYXRoLAorCQl1bnNpZ25lZCBsb25nIHVpZCwgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpCisJCWZwcmludGYoc3RkZXJyLCAiRGlyZWN0b3J5OiAlcyAlcyAgVUlEOiAlbGQgIEdJRCAlbGQgIE1PREU6ICUwNGxvIiwgcGF0aCwgbmFtZSwgdWlkLCBnaWQsIG1vZGUpOworCisJaWYgKG1rZGlyKHBhdGgsIG1vZGUpIDwgMCkgeworCQlpZiAoRUVYSVNUID09IGVycm5vKSB7CisJCQkvKiBVbmNvbmRpdGlvbmFsbHkgYXBwbHkgdGhlIG1vZGUgc2V0dGluZyB0byB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5LgorCQkJICogWFhYIHNob3VsZCBvdXRwdXQgc29tZXRoaW5nIHdoZW4gdHJhY2UgKi8KKwkJCWNobW9kKHBhdGgsIG1vZGUgJiB+U19JRk1UKTsKKwkJfQorCX0KKwlpZiAodHJhY2UpCisJCXB1dGMoJ1xuJywgc3RkZXJyKTsKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZGV2aWNlKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCXVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUsIGRldl90IHJkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCWlmICh0cmFjZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkRldmljZTogJXMgJXMgIFVJRDogJWxkICBHSUQ6ICVsZCAgTU9ERTogJTA0bG8gIE1BSk9SOiAlZCAgTUlOT1I6ICVkIiwKKwkJCQlwYXRoLCBuYW1lLCB1aWQsIGdpZCwgbW9kZSwgKHNob3J0KShyZGV2ID4+IDgpLCAoc2hvcnQpKHJkZXYgJiAweGZmKSk7CisJfQorCisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisJc3RhdHVzID0gbHN0YXQocGF0aCwgJnNiKTsKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJLyogSXQgaXMgb2sgZm9yIHNvbWUgdHlwZXMgb2YgZmlsZXMgdG8gbm90IGV4aXQgb24gZGlzayAoc3VjaCBhcworCQkgKiBkZXZpY2Ugbm9kZXMpLCBidXQgaWYgdGhleSBfZG9fIGV4aXN0LCB0aGUgZmlsZSB0eXBlIGJpdHMgaGFkCisJCSAqIGJldHRlciBtYXRjaCB0aG9zZSBvZiB0aGUgYWN0dWFsIGZpbGUgb3Igc3RyYW5nZSB0aGluZ3Mgd2lsbCBoYXBwZW4uLi4gKi8KKwkJaWYgKChtb2RlICYgU19JRk1UKSAhPSAoc2Iuc3RfbW9kZSAmIFNfSUZNVCkpIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlwdXRjKCdcbicsIHN0ZGVycik7CisJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGV4aXN0aW5nIGZpbGUgKDA0JW8pIHR5cGUgZG9lcyBub3QgbWF0Y2ggc3BlY2lmaWVkIGZpbGUgdHlwZSAoMDQlbG8pISIsCisJCQkJCQlwYXRoLCAoc2Iuc3RfbW9kZSAmIFNfSUZNVCksIChtb2RlICYgU19JRk1UKSk7CisJCX0KKwkJaWYgKG1vZGUgIT0gc2Iuc3RfbW9kZSkgeworCQkJaWYgKHRyYWNlKQorCQkJCWZwcmludGYoc3RkZXJyLCAiIC0tIGFwcGx5aW5nIG5ldyBtb2RlIDA0JWxvIChvbGQgd2FzIDA0JW8pXG4iLCBtb2RlICYgflNfSUZNVCwgc2Iuc3RfbW9kZSAmIH5TX0lGTVQpOworCQkJLyogQXBwbHkgdGhlIG1vZGUgc2V0dGluZyB0byB0aGUgZXhpc3RpbmcgZGV2aWNlIG5vZGUgKi8KKwkJCWNobW9kKHBhdGgsIG1vZGUgJiB+U19JRk1UKTsKKwkJfQorCQllbHNlIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAtLSBleHRyYW5lb3VzIGVudHJ5IGluIHRhYmxlXG4iLCBwYXRoKTsKKwkJfQorCX0KKwllbHNlIHsKKwkJbWtub2QocGF0aCwgbW9kZSwgcmRldik7CisJCWlmICh0cmFjZSkKKwkJCXB1dGMoJ1xuJywgc3RkZXJyKTsKKworCX0KKworCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworc3RhdGljIHZvaWQgYWRkX25ld19maWxlKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCQkJCSAgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGaWxlOiAlcyAlcyAgVUlEOiAlbGQgIEdJRDogJWxkICBNT0RFOiAlMDRsb1xuIiwKKwkJCXBhdGgsIG5hbWUsIGdpZCwgdWlkLCBtb2RlKTsKKwl9CisKKwlpbnQgZmQgPSBvcGVuKHBhdGgsT19DUkVBVCB8IE9fV1JPTkxZLCBtb2RlKTsKKwlpZiAoZmQgPCAwKSB7CisJCWVycm9yX21zZ19hbmRfZGllKCIlczogZmlsZSBjYW4gbm90IGJlIGNyZWF0ZWQhIiwgcGF0aCk7CisJfSBlbHNlIHsKKwkJY2xvc2UoZmQpOworCX0KKwljaG1vZChwYXRoLCBtb2RlKTsKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKKworc3RhdGljIHZvaWQgYWRkX25ld19maWZvKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCQkJCSAgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpIHsKKwkJcHJpbnRmKCJGaWZvOiAlcyAlcyAgVUlEOiAlbGQgIEdJRDogJWxkICBNT0RFOiAlMDRsb1xuIiwKKwkJCXBhdGgsIG5hbWUsIGdpZCwgdWlkLCBtb2RlKTsKKwl9CisKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzdGF0IHNiOworCisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisJc3RhdHVzID0gc3RhdChwYXRoLCAmc2IpOworCisKKwkvKiBVcGRhdGUgdGhlIG1vZGUgaWYgd2UgZXhpc3QgYW5kIGFyZSBhIGZpZm8gYWxyZWFkeSAqLworCWlmIChzdGF0dXMgPj0gMCAmJiBTX0lTRklGTyhzYi5zdF9tb2RlKSkgeworCQljaG1vZChwYXRoLCBtb2RlKTsKKwl9IGVsc2UgeworCQlpZiAobWtub2QocGF0aCwgbW9kZSwgMCkpCisJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGZpbGUgY2FuIG5vdCBiZSBjcmVhdGVkIHdpdGggbWtub2QhIiwgcGF0aCk7CisJfQorCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworCisvKiAgZGV2aWNlIHRhYmxlIGVudHJpZXMgdGFrZSB0aGUgZm9ybSBvZjoKKyAgICA8cGF0aD4JPHR5cGU+IDxtb2RlPgk8dXNyPgk8Z3JwPgk8bWFqb3I+CTxtaW5vcj4JPHN0YXJ0Pgk8aW5jPgk8Y291bnQ+CisgICAgL2Rldi9tZW0gICAgYyAgICAgIDY0MCAgICAgIDAgICAgICAgMCAgICAgICAxICAgICAgIDEgICAgICAgMCAgICAgICAgMCAgICAgICAgLQorICAgIC9kZXYvemVybyAgIGMgICAgICA2NDQgICAgICByb290ICAgIHJvb3QgICAgMSAgICAgICA1ICAgICAgIC0gICAgICAgIC0gICAgICAgIC0KKworICAgIHR5cGUgY2FuIGJlIG9uZSBvZjoKKwlmCUEgcmVndWxhciBmaWxlCisJZAlEaXJlY3RvcnkKKwljCUNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlCisJYglCbG9jayBzcGVjaWFsIGRldmljZSBmaWxlCisJcAlGaWZvIChuYW1lZCBwaXBlKQorCisgICAgSSBkb24ndCBib3RoZXIgd2l0aCBzeW1saW5rcyAocGVybWlzc2lvbnMgYXJlIGlycmVsZXZhbnQpLCBoYXJkCisgICAgbGlua3MgKHNwZWNpYWwgY2FzZXMgb2YgcmVndWxhciBmaWxlcyksIG9yIHNvY2tldHMgKHdoeSBib3RoZXIpLgorCisgICAgUmVndWxhciBmaWxlcyBtdXN0IGV4aXN0IGluIHRoZSB0YXJnZXQgcm9vdCBkaXJlY3RvcnkuICBJZiBhIGNoYXIsCisgICAgYmxvY2ssIGZpZm8sIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgorKi8KK3N0YXRpYyBpbnQgaW50ZXJwcmV0X3RhYmxlX2VudHJ5KGNoYXIgKmxpbmUpCit7CisJY2hhciAqbmFtZTsKKwljaGFyIHVzcl9idWZbTUFYX0lEX0xFTl07CisJY2hhciBncnBfYnVmW01BWF9JRF9MRU5dOworCWNoYXIgcGF0aFs0MDk2XSwgdHlwZTsKKwl1bnNpZ25lZCBsb25nIG1vZGUgPSAwNzU1LCB1aWQgPSAwLCBnaWQgPSAwLCBtYWpvciA9IDAsIG1pbm9yID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMCwgaW5jcmVtZW50ID0gMSwgY291bnQgPSAwOworCisJaWYgKDAgPiBzc2NhbmYobGluZSwgIiU0MHMgJWMgJWxvICU0MHMgJTQwcyAlbHUgJWx1ICVsdSAlbHUgJWx1IiwgcGF0aCwKKwkJICAgICZ0eXBlLCAmbW9kZSwgdXNyX2J1ZiwgZ3JwX2J1ZiwgJm1ham9yLCAmbWlub3IsICZzdGFydCwKKwkJICAgICZpbmNyZW1lbnQsICZjb3VudCkpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzc2NhbmYgcmV0dXJuZWQgPCAwIGZvciBsaW5lICclcydcbiIsIGFwcF9uYW1lLCBsaW5lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdWlkID0gY29udmVydDJndWlkKHVzcl9idWYsIHVzcl9saXN0KTsKKwlnaWQgPSBjb252ZXJ0Mmd1aWQoZ3JwX2J1ZiwgZ3JwX2xpc3QpOworCisJaWYgKHN0cm5jbXAocGF0aCwgIi8iLCAxKSkgeworCQllcnJvcl9tc2dfYW5kX2RpZSgiRGV2aWNlIHRhYmxlIGVudHJpZXMgcmVxdWlyZSBhYnNvbHV0ZSBwYXRocyIpOworCX0KKwluYW1lID0geHN0cmR1cChwYXRoICsgMSk7CisJLyogcHJlZml4IHBhdGggd2l0aCByb290ZGlyICovCisJc3ByaW50ZihwYXRoLCAiJXMvJXMiLCByb290ZGlyLCBuYW1lKTsKKworCS8qIFhYWCBXaHkgaXMgbmFtZSBwYXNzZWQgaW50byBhbGwgb2YgdGhlIGFkZF9uZXdfKigpIHJvdXRpbmVzPyAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgJ2QnOgorCQltb2RlIHw9IFNfSUZESVI7CisJCWFkZF9uZXdfZGlyZWN0b3J5KG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnZic6CisJCW1vZGUgfD0gU19JRlJFRzsKKwkJYWRkX25ld19maWxlKG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAncCc6CisJCW1vZGUgfD0gU19JRklGTzsKKwkJYWRkX25ld19maWZvKG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnYyc6CisJY2FzZSAnYic6CisJCW1vZGUgfD0gKHR5cGUgPT0gJ2MnKSA/IFNfSUZDSFIgOiBTX0lGQkxLOworCQlpZiAoY291bnQgPiAwKSB7CisJCQlpbnQgaTsKKwkJCWRldl90IHJkZXY7CisJCQljaGFyIGJ1Zls4MF07CisKKwkJCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgaSsrKSB7CisJCQkJc3ByaW50ZihidWYsICIlcyVkIiwgbmFtZSwgaSk7CisJCQkJc3ByaW50ZihwYXRoLCAiJXMvJXMlZCIsIHJvb3RkaXIsIG5hbWUsIGkpOworCQkJCS8qIEZJWE1FOiAgTUtERVYgdXNlcyBpbGxpY2l0IGluc2lkZXIga25vd2xlZGdlIG9mIGtlcm5lbAorCQkJCSAqIG1ham9yL21pbm9yIHJlcHJlc2VudGF0aW9uLi4uICAqLworCQkJCXJkZXYgPSBNS0RFVihtYWpvciwgbWlub3IgKyAoaSAtIHN0YXJ0KSAqIGluY3JlbWVudCk7CisJCQkJc3ByaW50ZihwYXRoLCAiJXMvJXNcMCIsIHJvb3RkaXIsIGJ1Zik7CisJCQkJYWRkX25ld19kZXZpY2UoYnVmLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSwgcmRldik7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBGSVhNRTogIE1LREVWIHVzZXMgaWxsaWNpdCBpbnNpZGVyIGtub3dsZWRnZSBvZiBrZXJuZWwKKwkJCSAqIG1ham9yL21pbm9yIHJlcHJlc2VudGF0aW9uLi4uICAqLworCQkJZGV2X3QgcmRldiA9IE1LREVWKG1ham9yLCBtaW5vcik7CisJCQlhZGRfbmV3X2RldmljZShuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSwgcmRldik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3JfbXNnX2FuZF9kaWUoIlVuc3VwcG9ydGVkIGZpbGUgdHlwZSIpOworCX0KKwlpZiAobmFtZSkgZnJlZShuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBwYXJzZV9kZXZpY2VfdGFibGUoRklMRSAqIGZpbGUpCit7CisJY2hhciAqbGluZTsKKwlzaXplX3QgbGVuZ3RoID0gMjU2OworCWludCBsZW4gPSAwOworCisJaWYoKGxpbmUgPSAoY2hhciAqKW1hbGxvYyhsZW5ndGgpKSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKwkvKiBMb29rcyBvayBzbyBmYXIuICBUaGUgZ2VuZXJhbCBwbGFuIG5vdyBpcyB0byByZWFkIGluIG9uZQorCSAqIGxpbmUgYXQgYSB0aW1lLCB0cmltIG9mZiBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLAorCSAqIGNoZWNrIGZvciBsZWFkaW5nIGNvbW1lbnQgZGVsaW1pdGVycyAoJyMnKSBvciBhIGJsYW5rIGxpbmUsCisJICogdGhlbiB0cnkgYW5kIHBhcnNlIHRoZSBsaW5lIGFzIGEgZGV2aWNlIHRhYmxlIGVudHJ5LiBJZiB3ZSBmYWlsCisJICogdG8gcGFyc2UgdGhpbmdzLCB0cnkgYW5kIGhlbHAgdGhlIHBvb3IgZm9vbCB0byBmaXggdGhlaXIKKwkgKiBkZXZpY2UgdGFibGUgd2l0aCBhIHVzZWZ1bCBlcnJvciBtc2cuLi4gKi8KKworCXdoaWxlICgobGVuID0gZ2V0bGluZSgmbGluZSwgJmxlbmd0aCwgZmlsZSkpICE9IC0xKSB7CisJCS8qIEZpcnN0IHRyaW0gb2ZmIGFueSB3aGl0ZXNwYWNlICovCisKKwkJLyogdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisJCXdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UobGluZVtsZW4gLSAxXSkpCisJCQlsaW5lWy0tbGVuXSA9ICdcMCc7CisKKwkJLyogdHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwkJbWVtbW92ZShsaW5lLCAmbGluZVtzdHJzcG4obGluZSwgIiBcblxyXHRcdiIpXSwgbGVuICsgMSk7CisKKwkJLyogSWYgdGhpcyBpcyBOT1QgYSBjb21tZW50IG9yIGFuIGVtcHR5IGxpbmUsIHRyeSB0byBpbnRlcnByZXQgaXQgKi8KKwkJaWYgKCpsaW5lICE9ICcjJyAmJiAqbGluZSAhPSAnXDAnKSBpbnRlcnByZXRfdGFibGVfZW50cnkobGluZSk7CisJfQorCisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGV2dGFibGUoRklMRSAqIGRldnRhYmxlKQoreworCXN0cnVjdCBzdGF0IHNiOworCisJaWYgKGxzdGF0KHJvb3RkaXIsICZzYikpIHsKKwkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIHJvb3RkaXIpOworCX0KKwlpZiAoY2hkaXIocm9vdGRpcikpCisJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCByb290ZGlyKTsKKworCWlmIChkZXZ0YWJsZSkKKwkJcGFyc2VfZGV2aWNlX3RhYmxlKGRldnRhYmxlKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCXsicm9vdCIsIDEsIE5VTEwsICdyJ30sCisJeyJoZWxwIiwgMCwgTlVMTCwgJ2gnfSwKKwl7InRyYWNlIiwgMCwgTlVMTCwgJ3QnfSwKKwl7InZlcnNpb24iLCAwLCBOVUxMLCAndid9LAorCXsiZGV2dGFibGUiLCAxLCBOVUxMLCAnRCd9LAorCXtOVUxMLCAwLCBOVUxMLCAwfQorfTsKKworc3RhdGljIGNoYXIgKmhlbHB0ZXh0ID0KKwkiVXNhZ2U6IG1ha2VkZXZzIFtPUFRJT05TXVxuIgorCSJCdWlsZCBlbnRyaWVzIGJhc2VkIHVwb24gZGV2aWNlX3RhYmxlLnR4dFxuXG4iCisJIk9wdGlvbnM6XG4iCisJIiAgLXIsIC1kLCAtLXJvb3Q9RElSICAgICBCdWlsZCBmaWxlc3lzdGVtIGZyb20gZGlyZWN0b3J5IERJUiAoZGVmYXVsdDogY3dkKVxuIgorCSIgIC1ELCAtLWRldnRhYmxlPUZJTEUgICAgVXNlIHRoZSBuYW1lZCBGSUxFIGFzIGEgZGV2aWNlIHRhYmxlIGZpbGVcbiIKKwkiICAtaCwgLS1oZWxwICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIHRleHRcbiIKKwkiICAtdCwgLS10cmFjZSAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKwkiICAtdiwgLS12ZXJzaW9uICAgICAgICAgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvblxuXG4iOworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgYywgb3B0OworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwljaGFyIHBhc3N3ZF9wYXRoW1BBVEhfTUFYXTsKKwljaGFyIGdyb3VwX3BhdGhbUEFUSF9NQVhdOworCUZJTEUgKnBhc3N3ZF9maWxlID0gTlVMTDsKKwlGSUxFICpncm91cF9maWxlID0gTlVMTDsKKwlGSUxFICpkZXZ0YWJsZSA9IE5VTEw7CisJRElSICpkaXIgPSBOVUxMOworCisJdW1hc2sgKDApOworCisJaWYgKGFyZ2M9PTEpIHsKKwkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJEOmQ6cjpodHYiLAorCQkJbG9uZ19vcHRpb25zLCAmYykpID49IDApIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnRCc6CisJCQlkZXZ0YWJsZSA9IHhmb3BlbihvcHRhcmcsICJyIik7CisJCQlpZiAoZnN0YXQoZmlsZW5vKGRldnRhYmxlKSwgJnN0YXRidWYpIDwgMCkKKwkJCQlwZXJyb3JfbXNnX2FuZF9kaWUob3B0YXJnKTsKKwkJCWlmIChzdGF0YnVmLnN0X3NpemUgPCAxMCkKKwkJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IG5vdCBhIHByb3BlciBkZXZpY2UgdGFibGUgZmlsZSIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQlwcmludGYoaGVscHRleHQpOworCQkJZXhpdCgwKTsKKwkJY2FzZSAncic6CisJCWNhc2UgJ2QnOgkJCQkvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG1rZnMuamZmcywgZ2VuZXh0MmZzLCBldGMuLi4gKi8KKwkJCWlmIChyb290ZGlyICE9IGRlZmF1bHRfcm9vdGRpcikgeworCQkJCWVycm9yX21zZ19hbmRfZGllKCJyb290IGRpcmVjdG9yeSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiKTsKKwkJCX0KKwkJCWlmICgoZGlyID0gb3BlbmRpcihvcHRhcmcpKSA9PSBOVUxMKSB7CisJCQkJcGVycm9yX21zZ19hbmRfZGllKG9wdGFyZyk7CisJCQl9IGVsc2UgeworCQkJCWNsb3NlZGlyKGRpcik7CisJCQl9CisJCQkvKiBJZiAiLyIgaXMgc3BlY2lmaWVkLCB1c2UgIiIgYmVjYXVzZSByb290ZGlyIGlzIGFsd2F5cyBwcmVwZW5kZWQgdG8gYQorCQkJICogc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggIi8iICovCisJCQlpZiAoMCA9PSBzdHJjbXAob3B0YXJnLCAiLyIpKQorCQkJCXJvb3RkaXIgPSB4c3RyZHVwKCIiKTsKKwkJCWVsc2UKKwkJCQlyb290ZGlyID0geHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSAndCc6CisJCQl0cmFjZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlICd2JzoKKwkJCXByaW50ZigiJXM6ICVzXG4iLCBhcHBfbmFtZSwgVkVSU0lPTik7CisJCQlleGl0KDApOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoYXJndltvcHRpbmRdICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvLyBHZXQgbmFtZS1pZCBtYXBwaW5nCisJc3ByaW50ZihwYXNzd2RfcGF0aCwgIiVzL2V0Yy9wYXNzd2QiLCByb290ZGlyKTsKKwlzcHJpbnRmKGdyb3VwX3BhdGgsICIlcy9ldGMvZ3JvdXAiLCByb290ZGlyKTsKKwlpZiAoKHBhc3N3ZF9maWxlID0gZm9wZW4ocGFzc3dkX3BhdGgsICJyIikpICE9IE5VTEwpIHsKKwkJZ2V0X2xpc3RfZnJvbV9maWxlKHBhc3N3ZF9maWxlLCAmdXNyX2xpc3QpOworCQlmY2xvc2UocGFzc3dkX2ZpbGUpOworCX0KKwlpZiAoKGdyb3VwX2ZpbGUgPSBmb3Blbihncm91cF9wYXRoLCAiciIpKSAhPSBOVUxMKSB7CisJCWdldF9saXN0X2Zyb21fZmlsZShncm91cF9maWxlLCAmZ3JwX2xpc3QpOworCQlmY2xvc2UoZ3JvdXBfZmlsZSk7CisJfQorCisJLy8gUGFyc2UgZGV2dGFibGUKKwlpZihkZXZ0YWJsZSkgeworCQlwYXJzZV9kZXZ0YWJsZShkZXZ0YWJsZSk7CisJCWZjbG9zZShkZXZ0YWJsZSk7CisJfQorCisJLy8gRnJlZSBsaXN0CisJZnJlZV9saXN0KHVzcl9saXN0KTsKKwlmcmVlX2xpc3QoZ3JwX2xpc3QpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2c18xLjAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzXzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDU4NzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2c18xLjAuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlRvb2wgZm9yIGNyZWF0aW5nIGRldmljZSBub2RlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKK1NFQ1RJT04gPSAiYmFzZSIKK1NSQ19VUkkgPSAiZmlsZTovL21ha2VkZXZzLmMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9IgorCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke2RhdGFkaXJ9IgorCitkb19jb21waWxlKCkgeworCSR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IC1vICR7U30vbWFrZWRldnMgJHtTfS9tYWtlZGV2cy5jCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbWFrZWRldnMgJHtEfSR7YmFzZV9zYmluZGlyfS9tYWtlZGV2cworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0ICR7RH0ke2RhdGFkaXJ9LworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTI3MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDcxIEBACittYWtlIHRoZSB0b29sIHRvIGJlIGNyb3NzIGNvbXBpbGFibGUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtlbGZJbWFnZS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCTIwMTItMDctMTQgMTQ6MTA6NDcuODAwOTE2MDgzIC0wNzAwCitAQCAtNzAsNiArNzAsOSBAQAorIAkJQUNfTVNHX0VSUk9SKFtjYyBub3QgZm91bmRdKQorIAlmaQorIAlldmFsICIke3dpdGhfZGVmYXVsdH1fQ0M9JyRDQyciCisrCWlmIHRlc3QgIngkSE9TVF9DQyIgPSAneCc7IHRoZW4KKysJCUFDX0NIRUNLX1BST0coW0hPU1RfQ0NdLCBbJENDXSwgWyRDQ10sIFtnY2NdLCBbJFBBVEhdKQorKwlmaQorIAlBQ19QUk9HX0NQUAorIAlpZiB0ZXN0ICIkQ1BQIiA9IG5vOyB0aGVuCisgCQlBQ19NU0dfRVJST1IoW2NwcCBub3QgZm91bmRdKQorQEAgLTE3Miw3ICsxNzUsNiBAQAorIAorIGRubCAtLS1PdXRwdXQgdmFyaWFibGVzLi4uCisgCistSE9TVF9DQz0kQ0MKKyBIT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTIC1PMiAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSIKKyAKKyBkbmwgVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZXNlIGFwcHJvcHJpYXRlbHkgZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYworSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaTM4Ni9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCw3ICs0LDcgQEAKKyAKKyAkKExJMzg2X09CSikvbWtlbGYtbGludXgtaTM4Ni5vOiAkKExJMzg2X0RJUikvbWtlbGYtbGludXgtaTM4Ni5jICQoTEkzODZfRElSKS9jb252ZXJ0LmJpbi5jICQoTEkzODZfREVQKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisgCisgCisgaWZkZWYgSTM4Nl9DQworSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaWE2NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCw3ICs0LDcgQEAKKyAKKyAkKExJQTY0X09CSikvbWtlbGYtbGludXgtaWE2NC5vOiAkKExJQTY0X0RJUikvbWtlbGYtbGludXgtaWE2NC5jICQoTElBNjRfRElSKS9jb252ZXJ0LmJpbi5jICQoTElBNjRfREVQKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisgCisgaWZkZWYgSUE2NF9DQworIAorSW5kZXg6IG1rZWxmSW1hZ2UvbWFpbi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9tYWluL01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9tYWluL01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCwxMSArNCwxMSBAQAorIAorICQoT0JKRElSKS9zYmluL21rZWxmSW1hZ2U6ICQoTUtFTEZfT0JKUykgJChERVBTKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpICQoTUtFTEZfT0JKUykgLW8gJEAgJChMSUJTKQorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAkKE1LRUxGX09CSlMpIC1vICRAICQoTElCUykKKyAKKyAkKE9CSkRJUikvbWFpbi9ta2VsZkltYWdlLm86IG1haW4vbWtlbGZJbWFnZS5jIGluY2x1ZGUvbWtlbGZJbWFnZS5oICQoREVQUykKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorIAorICQoT0JKRElSKS9tYW4vbWFuOC9ta2VsZkltYWdlLjg6IG1haW4vbWtlbGZJbWFnZS5tYW4KKyAJJChNS0RJUikgLXAgJChARCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2ZpeC1tYWtlZmlsZS10by1maW5kLWxpYnoucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2YTY1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0xldCBtYWtlZmlsZSBmaW5kIGxpYnogYW5kIHpsaWIuaCBieSBDRkxBR1MgYW5kIExERkxBR1MuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBkMWFjYzM2Li42Zjg2NWIwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02Miw3ICs2Miw3IEBAIEFDX0NIRUNLX1BST0coW1JQTV0sICAgcnBtLCAgIHJwbSwgICBbXSwgWyRQQVRIXSkKKyBBQ19DSEVDS19QUk9HKFtTRURdLCAgIHNlZCwgICBzZWQsICAgW10sIFskUEFUSF0pCisgQUNfQ0hFQ0tfUFJPRyhbRklORF0sICBmaW5kLCAgZmluZCwgIFtdLCBbJFBBVEhdKQorIAorLUFDX0NIRUNLX0hFQURFUih6bGliLmgsIEFDX0NIRUNLX0xJQih6LCBpbmZsYXRlSW5pdF8sIFtBQ19ERUZJTkUoSEFWRV9aTElCX0gsIDEpIExJQlM9IiRMSUJTIC1seiJdKSkKKytBQ19DSEVDS19IRUFERVIoemxpYi5oLCBBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUluaXRfLCBbQUNfREVGSU5FKEhBVkVfWkxJQl9ILCAxKSBMSUJTPSIkTElCUyAkTERGTEFHUyAtbHoiXSkpCisgCisgZG5sIEZpbmQgdGhlIGRlZmF1bHQgcHJvZ3JhbXMKKyBpZiB0ZXN0ICJ3aXRoX2RlZmF1bHQiICE9IG5vIDsgdGhlbgorQEAgLTE3NSw3ICsxNzUsNyBAQCBmaQorIAorIGRubCAtLS1PdXRwdXQgdmFyaWFibGVzLi4uCisgCistSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykiCisrSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykgJENGTEFHUyIKKyAKKyBkbmwgVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZXNlIGFwcHJvcHJpYXRlbHkgZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYworIEkzODZfQ0ZMQUdTPSIkSTM4Nl9DRkxBR1MgLU9zIC1mZnJlZXN0YW5kaW5nIC1XYWxsIC1XIC1Xbm8tZm9ybWF0IFwkKEkzODZfQ1BQRkxBR1MpIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWMzM2E2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIGNyZWF0aW5nIEVMRiBib290IGltYWdlcyBmb3IgRUxGLWJhc2VkIExpbnV4IGtlcm5lbCBpbWFnZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNvcmVib290Lm9yZy9Na2VsZmltYWdlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYTViZWQyZjYwZDM1NzYxOGNhMTYxYWQ1MzlmN2MwYSIKKworU1JDUkVWID0gIjY4NmE0OGEzMzliMzIwMDE4NGMyN2U3Zjk4ZDRjMDMxODBiMmJlNmMiCitQViA9ICI0LjArZ2l0JHtTUkNQVn0iCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJta2VsZmltYWdlIGhhcyBiZWVuIHJlbW92ZWQgaW4gY29yZWJvb3QgNC4xIHJlbGVhc2U6IFwKK2h0dHA6Ly9yZXZpZXcuY29yZWJvb3Qub3JnL2dpdHdlYj9wPWNvcmVib290LmdpdDthPWNvbW1pdDtoPTM0ZmM0YWI4MGI1MDc3MzllMjU4MGQ0OTBkZmY2N2ZjZmRkZTExZWEiCisKKworREVQRU5EUyArPSAiemxpYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9yZXZpZXcuY29yZWJvb3Qub3JnL3AvY29yZWJvb3Q7cHJvdG9jb2w9aHR0cCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9zcy1jb21waWxlLnBhdGNoICAgXAorICAgICAgICAgICBmaWxlOi8vZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaCAgIFwKKyAgICAgICAgICAiCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQvdXRpbC9ta2VsZkltYWdlIgorCitDRkxBR1MgKz0gIi1mbm8tc3RhY2stcHJvdGVjdG9yIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIkhPU1RfQ0M9JyR7QlVJTERfQ0N9JyIKK0VYVFJBX09FTUFLRSArPSAiSE9TVF9DUFBGTEFHUz0nJHtCVUlMRF9DUFBGTEFHU30nIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm1kaXIgJHtEfSR7ZGF0YWRpcn0vbWtlbGZJbWFnZS9lbGYzMi1pMzg2CisJcm1kaXIgJHtEfSR7ZGF0YWRpcn0vbWtlbGZJbWFnZQorCWNob3duIHJvb3Q6cm9vdCAke0R9LyR7c2JpbmRpcn0vbWtlbGZJbWFnZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hY19pbml0X2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hY19pbml0X2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJhZjEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0dldCB0aGUgdmVyc2lvbiBvZiBta2xpYnMgYnkgc2ltcGxlciBtZWFucy4gVGhlIE1LTElCU19WRVJTSU9OIHN0cmluZyBpbiB0aGUgCitjb25maWd1cmUuYWMgZmlsZSBpcyByZXBsYWNlZCB3aXRoIHJlYWwgdmVyc2lvbiBzdHJpbmcgYnkgdGhlIAorZG9fY29uZmlndXJlX3ByZXBlbmQoKSBmdW5jdGlvbiBmcm9tIHRoZSByZWNpcGUgLmJiIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTEvMDEvMjQKKworSW5kZXg6IG1rbGlicy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2xpYnMub3JpZy9jb25maWd1cmUuYWMJMjAxMC0wMi0yMSAxNzozNDo1Ni4wMDAwMDAwMDAgLTA4MDAKKysrKyBta2xpYnMvY29uZmlndXJlLmFjCTIwMTEtMDEtMjQgMTg6NTI6MTkuOTQzMjQyMDc5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy1BQ19JTklUKFtta2xpYnNdLG00X2VzeXNjbWQoZHBrZy1wYXJzZWNoYW5nZWxvZyB8IHBlcmwgLW5lICdwcmludCAkMSBpZiBtL15WZXJzaW9uOiAoLiopJC87JykpCisrQUNfSU5JVChbbWtsaWJzXSwgTUtMSUJTX1ZFUlNJT04pCisgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBuby1kZWZpbmVdKQorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2ZDYyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmMTcyMTAxMTMwNjA0ZTRhOWVmYTU3NDZmNGQ4ZDMwZGU5OWEwZmRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxNyBBcHIgMjAxNSAxNDo0ODoyMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBhdm9pZCBmYWlsdXJlIG9uIHN5bWJvbCBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVW5kZWZpbmVkIHN5bWJvbHMgaW4gYSBsaWJyYXJ5IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24KK3RoYXQgbGlua3MgdG8gdGhlIGxpYnJhcnksIHN1Y2ggYXMgYGxvZ3NpbmsnIGluIGxpYm11bHRpcGF0aC5zby4wLgorVGhpcyBmaXggY2hlY2tzIHRoZSB0eXBlIG9mIG9iamVjdCBpbiB3aGljaCB0aGUgc3ltYm9sIGlzIG5lZWRlZAorYW5kIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHN5bWJvbCBpbiBhcHBsaWNhdGlvbiwgd2hlbiBhIHN5bWJvbAorY2Fubm90IGJlIHByb3ZpZGVkIGJ5IGxpYnJhcmllcy4gSXQgcHJldmVudHMgZmFsc2UgYWxhcm0gb24gYWJzZW5jZQorb2Ygc3ltYm9scy4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL21rbGlicyB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMgYi9zcmMvbWtsaWJzCitpbmRleCBjNTYxNGVhLi5iMGQ5MDM0IDEwMDc1NQorLS0tIGEvc3JjL21rbGlicworKysrIGIvc3JjL21rbGlicworQEAgLTEzMyw5ICsxMzMsOSBAQCBjbGFzcyBTeW1ib2wob2JqZWN0KToKKyAgICAgICAgIHJldHVybiAnQCcuam9pbihyZXQpCisgCisgY2xhc3MgVW5kZWZpbmVkU3ltYm9sKFN5bWJvbCk6CistICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5KToKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnksIG9iamVjdCk6CisgICAgICAgICBzdXBlcihVbmRlZmluZWRTeW1ib2wsIHNlbGYpLl9faW5pdF9fKG5hbWUsIHZlcnNpb24sIGxpYnJhcnkpCistICAgICAgICBzZWxmLndlYWssIHNlbGYubGlicmFyeSA9IHdlYWssIGxpYnJhcnkKKysgICAgICAgIHNlbGYud2Vhaywgc2VsZi5saWJyYXJ5LCBzZWxmLm9iamVjdCA9IHdlYWssIGxpYnJhcnksIG9iamVjdAorIAorICMgUmV0dXJuIHVuZGVmaW5lZCBzeW1ib2xzIGluIGFuIG9iamVjdCBhcyBhIHNldCBvZiB0dXBsZXMgKG5hbWUsIHdlYWtuZXNzKQorIGRlZiB1bmRlZmluZWRfc3ltYm9scyhvYmopOgorQEAgLTE0NCw2ICsxNDQsMTEgQEAgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKG9iaik6CisgCisgICAgIG91dHB1dCA9IGNvbW1hbmQoIm1rbGlicy1yZWFkZWxmIiwgIi0tcHJpbnQtc3ltYm9scy11bmRlZmluZWQiLCBvYmopCisgCisrICAgIGlmIGxlbihvYmopID4gbGVuKGRlc3RfcGF0aCkgYW5kIG9ials6bGVuKGRlc3RfcGF0aCldID09IGRlc3RfcGF0aDoKKysgICAgICAgIG9iamVjdCA9IG9ialtsZW4oZGVzdF9wYXRoKSArIDE6LWxlbignLXNvLXN0cmlwcGVkJyldCisrICAgIGVsc2U6CisrICAgICAgICBvYmplY3QgPSBvYmoKKysKKyAgICAgcmVzdWx0ID0gW10KKyAgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgorICAgICAgICAgbmFtZSwgd2Vha19zdHJpbmcsIHZlcnNpb25fc3RyaW5nLCBsaWJyYXJ5X3N0cmluZyA9IGxpbmUuc3BsaXQoKVs6NF0KK0BAIC0xNjAsNyArMTY1LDcgQEAgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKG9iaik6CisgICAgICAgICBpZiBsaWJyYXJ5X3N0cmluZy5sb3dlcigpICE9ICdub25lJzoKKyAgICAgICAgICAgICBsaWJyYXJ5ID0gbGlicmFyeV9zdHJpbmcKKyAKKy0gICAgICAgIHJlc3VsdC5hcHBlbmQoVW5kZWZpbmVkU3ltYm9sKG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnkpKQorKyAgICAgICAgcmVzdWx0LmFwcGVuZChVbmRlZmluZWRTeW1ib2wobmFtZSwgd2VhaywgdmVyc2lvbiwgbGlicmFyeSwgb2JqZWN0KSkKKyAKKyAgICAgcmV0dXJuIHJlc3VsdAorIAorQEAgLTQ5NSwxMiArNTAwLDEzIEBAIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlLnNlYXJjaCgiXnBzXyIsIHN0cihzeW1ib2wpKSkKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCAocmUuc2VhcmNoKCJsZC1saW51eC5zby4zJCIsIHN0cihzeW1ib2wpKSkKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCAocmUuc2VhcmNoKCJeX19nbnVfbG9jYWxfZ3AiLCBzdHIoc3ltYm9sKSkpKToKKy0gICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgIm5lZWRlZF9zeW1ib2xzIGFkZGluZyAlcywgd2VhazogJXMiICUgKHN5bWJvbCwgc3ltYm9sLndlYWspKQorKyAgICAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAibmVlZGVkX3N5bWJvbHMgYWRkaW5nICVzLCB3ZWFrOiAlcywgZm9yICVzIiAlIChzeW1ib2wsIHN5bWJvbC53ZWFrLCBvYmopKQorICAgICAgICAgICAgICAgICBuZWVkZWRfc3ltYm9sc1tzdHIoc3ltYm9sKV0gPSBzeW1ib2wKKyAgICAgICAgIGxpYnJhcmllcy51cGRhdGUobGlicmFyeV9kZXBlbmRzKG9iaikpCisgCisgICAgICMgY2FsY3VsYXRlIHdoYXQgc3ltYm9scyBhcmUgcHJlc2VudCBpbiBzbWFsbF9saWJzIGFuZCBhdmFpbGFibGVfbGlicworICAgICBwcmVzZW50X3N5bWJvbHMgPSB7fQorKyAgICBwcmVzZW50X3N5bWJvbF9wcm9ncyA9IHt9CisgICAgIGNoZWNrZWRfbGlicyA9IHNtYWxsX2xpYnMKKyAgICAgY2hlY2tlZF9saWJzLmV4dGVuZChhdmFpbGFibGVfbGlicykKKyAgICAgY2hlY2tlZF9saWJzLmFwcGVuZChsZGxpYikKK0BAIC01MTAsNiArNTE2LDEyIEBAIHdoaWxlIDE6CisgICAgICAgICAgICAgbmFtZXMgPSBzeW1ib2wuYmFzZV9uYW1lcygpCisgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgIHByZXNlbnRfc3ltYm9sc1tuYW1lXSA9IHN5bWJvbAorKyAgICAgICAgICAgIGlmIG5vdCBzb19wYXR0ZXJuLm1hdGNoKGxpYik6CisrICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJwcmVzZW50X3N5bWJvbF9wcm9ncyBhZGRpbmcgJXMsIGZyb20gZXhlY3V0YWJsZSAlcyIgJSAoJyAnLmpvaW4obmFtZXMpLCBsaWIpKQorKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKysgICAgICAgICAgICAgICAgICAgIHByb2dzID0gcHJlc2VudF9zeW1ib2xfcHJvZ3MuZ2V0KG5hbWUsIHNldCgpKQorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3MuYWRkKGxpYikKKysgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfc3ltYm9sX3Byb2dzW25hbWVdID0gcHJvZ3MKKyAKKyAgICAgIyBhcmUgd2UgZmluaXNoZWQ/CisgICAgIG51bV91bnJlc29sdmVkID0gMAorQEAgLTU2NSw2ICs1NzcsMTQgQEAgd2hpbGUgMToKKyAgICAgZm9yIG5hbWUgaW4gbmVlZGVkX3N5bWJvbHM6CisgICAgICAgICBpZiBub3QgbmFtZSBpbiBzeW1ib2xfcHJvdmlkZXI6CisgICAgICAgICAgICAgaWYgbm90IG5lZWRlZF9zeW1ib2xzW25hbWVdLndlYWs6CisrICAgICAgICAgICAgICAgICMgV09SS0FST1VORDogVW5kZWZpbmVkIHN5bWJvbHMgaW4gYSBsaWJyYXJ5IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24KKysgICAgICAgICAgICAgICAgIyB0aGF0IGxpbmtzIHRvIHRoZSBsaWJyYXJ5LiBTbyBpZiB0aGUgb2JqZWN0IHdoaWNoIHJlcXVpcmVzIHRoZSBzeW1ib2wgaXMgYSBsaWJyYXJ5CisrICAgICAgICAgICAgICAgICMgYW5kIHNvbWUgYXBwbGljYXRpb24gY2FuIHByb3ZpZGUgdGhlIHN5bWJvbCwgdGhlIHVuZGVmaW5lZCBzeW1ib2wgaXMgc2tpcHBlZC4KKysgICAgICAgICAgICAgICAgc3ltYm9sID0gbmVlZGVkX3N5bWJvbHNbbmFtZV0KKysgICAgICAgICAgICAgICAgaWYgc29fcGF0dGVybi5tYXRjaChzeW1ib2wub2JqZWN0KSBhbmQgcHJlc2VudF9zeW1ib2xfcHJvZ3MuZ2V0KG5hbWUsIE5vbmUpOgorKyAgICAgICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgInN5bWJvbCAlcyBpbiBsaWJyYXJ5ICVzIGlzIHByb3ZpZGVkIGJ5IGV4ZWN1dGFibGUgJXMiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIHN5bWJvbC5vYmplY3QsICcgJy5qb2luKHByZXNlbnRfc3ltYm9sX3Byb2dzW25hbWVdKSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGxpYnJhcnkgcHJvdmlkZXMgbm9uLXdlYWsgJXMiICUgbmFtZSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbGliID0gc3ltYm9sX3Byb3ZpZGVyW25hbWVdCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdhNDg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1RoZSBsaWJjNi1kZXYgaW4gVWJ1bnR1IDkuMDQgaXMgc28gb2xkIHRoYXQgdGhlIGVsZi5oIGRvZXNuJ3QKK2RlZmluZSBTVFRfR05VX0lGVU5DLCBzbyB3ZSBoYXZlIHRvIGRlZmluZSBpdCBvdXJzZWx2ZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdIC0gb2xkIHJlbGVhc2Ugc3BlY2lmaWMsIG1heWJlIHJlbW92YWJsZQorCistLSBEZXh1YW4gQ3VpIChkZXh1YW4uY3VpQGludGVsLmNvbSkgRmViIDE2LCAyMDExLgorCitkaWZmIC0tZ2l0IGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitpbmRleCAyNDQ0YzM5Li41NmQ5M2Y4IDEwMDY0NAorLS0tIGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCisrKysgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK0BAIC02LDYgKzYsMTQgQEAKKyAjaW5jbHVkZSA8dmVjdG9yPgorIAorICNpbmNsdWRlIDxlbGYuaD4KKysvKgorKyAqIFRoZSAvdXNyL2luY2x1ZGUvZWxmLmggaW4gc29tZSBkaXN0cmlidXRpb25zKGxpa2UgVWJ1bnR1IDkuMDQpIGRvZXNuJ3QKKysgKiBkZWZpbmUgdGhlIG1hY3JvLiBXZSBuZWVkIHRvIGRlZmluZSBpdCBoZXJlLgorKyAqLworKyNpZm5kZWYgU1RUX0dOVV9JRlVOQworKyNkZWZpbmUgU1RUX0dOVV9JRlVOQyAgIDEwICAgICAgICAgICAgICAvKiBTeW1ib2wgaXMgaW5kaXJlY3QgY29kZSBvYmplY3QgKi8KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgCisgI2luY2x1ZGUgImVsZi5ocHAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNDYwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDgxIEBACitSZW1vdmUgZGVwZW5kZW5jeSBvbiBkcGtnCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0Fza2luZyB0aGUgaG9zdCBPUyB3aGV0aGVyIGl0IHN1cHBvcnRzIG11bHRpYXJjaCBpcyBub3QgdXNlZnVsCitpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBvciBpZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkCithIGxpYmRpciBleHBsaWNpdGx5LiBTbyB0aGlzIHBhdGNoLCBiYXNlZCBvbiB0aGUgd29yayBvZiBNZW50b3IKK0dyYXBoaWNzLCByZW1vdmVzIG1rbGlicydzIGRlcGVuZGVuY3kgb24gZHBrZyBwYWNrYWdlLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDxZdWFuamllLkh1YW5nQHdpbmRyaXZlci5jb20+Cisgc3JjL21rbGlicyB8IDMwICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMgYi9zcmMvbWtsaWJzCitpbmRleCBkOWI3ODRiLi5jNTYxNGVhIDEwMDc1NQorLS0tIGEvc3JjL21rbGlicworKysrIGIvc3JjL21rbGlicworQEAgLTI2MSw2ICsyNjEsMTEgQEAgZGVmIGV4dHJhY3Rfc29uYW1lKHNvX2ZpbGUpOgorICAgICByZXR1cm4gIiIKKyAKKyBkZWYgbXVsdGlhcmNoKHBhdGhzKToKKysgICAgIyBBc2tpbmcgdGhlIGhvc3QgT1Mgd2hldGhlciBpdCBzdXBwb3J0cyBtdWx0aWFyY2ggaXMgbm90IHVzZWZ1bAorKyAgICAjIGluIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIG9yIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQKKysgICAgIyBhIGxpYmRpciBleHBsaWNpdGx5LgorKyAgICBpZiBzeXNyb290ICE9ICIiIG9yIGxpYmRpciAhPSAiIjoKKysgICAgICAgIHJldHVybiBwYXRocworICAgICBkZXZudWxsID0gb3BlbignL2Rldi9udWxsJywgJ3cnKQorICAgICBkcGtnX2FyY2hpdGVjdHVyZSA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICBbJ2Rwa2ctYXJjaGl0ZWN0dXJlJywgJy1xREVCX0hPU1RfTVVMVElBUkNIJ10sCitAQCAtMzQwLDcgKzM0NSw3IEBAIGxpYl9wYXRoID0gW10KKyBkZXN0X3BhdGggPSAiREVTVCIKKyBsZGxpYiA9ICJMRExJQiIKKyBpbmNsdWRlX2RlZmF1bHRfbGliX3BhdGggPSAieWVzIgorLWRlZmF1bHRfbGliX3BhdGggPSBtdWx0aWFyY2goWyIvbGliLyIsICIvdXNyL2xpYi8iLCAiL3Vzci9YMTFSNi9saWIvIl0pCisrZGVmYXVsdF9saWJfcGF0aCA9IFsiL2xpYi8iLCAiL3Vzci9saWIvIiwgIi91c3IvWDExUjYvbGliLyJdCisgbGliY19leHRyYXNfZGlyID0gIi91c3IvbGliL2xpYmNfcGljIgorIGxpYmNfZXh0cmFzX2Rpcl9kZWZhdWx0ID0gVHJ1ZQorIGxpYmRpciA9ICJsaWIiCitAQCAtMzg2LDcgKzM5MSw3IEBAIGZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgorICAgICBlbGlmIG9wdCA9PSAiLS1saWJkaXIiOgorICAgICAgICAgbGliZGlyID0gYXJnCisgICAgIGVsaWYgb3B0IGluICgiLS1oZWxwIiwgIi1oIik6CistCXVzYWdlKDApCisrICAgICAgICB1c2FnZSgwKQorICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgZWxpZiBvcHQgaW4gKCItLXZlcnNpb24iLCAiLVYiKToKKyAgICAgICAgIHZlcnNpb24odmVycykKK0BAIC0zOTUsNiArNDAwLDcgQEAgZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6CisgICAgICAgICBwcmludCAiV0FSTklORzogdW5rbm93biBvcHRpb246ICIgKyBvcHQgKyAiXHRhcmc6ICIgKyBhcmcKKyAKKyBpZiBpbmNsdWRlX2RlZmF1bHRfbGliX3BhdGggPT0gInllcyI6CisrICAgIGRlZmF1bHRfbGliX3BhdGggPSBtdWx0aWFyY2goZGVmYXVsdF9saWJfcGF0aCkKKyAgICAgbGliX3BhdGguZXh0ZW5kKFthLnJlcGxhY2UoIi9saWIvIiwgIi8iICsgbGliZGlyICsgIi8iKSBmb3IgYSBpbiBkZWZhdWx0X2xpYl9wYXRoXSkKKyAKKyBpZiBsaWJjX2V4dHJhc19kaXJfZGVmYXVsdDoKK0BAIC02NjEsMTYgKzY2OSwxNiBAQCBsZF9wYXRoX25hbWUgPSBvcy5wYXRoLmRpcm5hbWUobGRsaWIpCisgbGRfZnVsbF9wYXRoID0gIi4uLyIgKyBsZGxpYgorIGxkX2ZpbGUgPSBmaW5kX2xpYihsZF9maWxlX25hbWUpCisgCistaWYgbGRfcGF0aF9uYW1lICE9ICIvbGliIjoKKy0gICAgaWYgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CistICAgICAgICBvcy5yZW1vdmUoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lKQorKyNpZiBsZF9wYXRoX25hbWUgIT0gIi9saWIiOgorKyMgICAgaWYgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CisrIyAgICAgICAgb3MucmVtb3ZlKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKyAKKy1pZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKToKKy0gICAgb3MubWtkaXIoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKQorKyNpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKToKKysjICAgIG9zLm1rZGlyKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSkKKyAKKy1pZiBub3Qgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2Z1bGxfcGF0aCwgb3MuRl9PSyk6CistICAgIGRlYnVnKERFQlVHX05PUk1BTCwgIkk6IHN0cmlwcGluZyBhbmQgY29weWluZyBkeW5hbWljIGxpbmtlciB0byAiICsgbGRfZnVsbF9wYXRoKQorK2lmIG5vdCBvcy5hY2Nlc3MoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCBvcy5GX09LKToKKysgICAgZGVidWcoREVCVUdfTk9STUFMLCAiSTogc3RyaXBwaW5nIGFuZCBjb3B5aW5nIGR5bmFtaWMgbGlua2VyIHRvICIgKyBsZF9maWxlX25hbWUpCisgICAgIGNvbW1hbmQodGFyZ2V0ICsgIm9iamNvcHkiLCAiLS1zdHJpcC11bm5lZWRlZCAtUiAubm90ZSAtUiAuY29tbWVudCIsCistICAgICAgICAgICAgbGRfZmlsZSwgZGVzdF9wYXRoICsgIi8iICsgbGRfZnVsbF9wYXRoKQorKyAgICAgICAgICAgIGxkX2ZpbGUsIGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKyAKKy1vcy5jaG1vZChkZXN0X3BhdGggKyAiLyIgKyBsZF9mdWxsX3BhdGgsIDA3NTUpCisrb3MuY2htb2QoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCAwNzU1KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc2hvdy1HTlUtdW5pcXVlLXN5bWJvbHMtYXMtcHJvdmlkZWQtc3ltYm9scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzU2NTkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBlZGRmMDRjN2Y4MzEyZTljMjljZGIyNGU0MzFiN2U0ZmIyY2M3MGVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAxNDowMDowNiArMDgwMAorU3ViamVjdDogW1BBVENIXSBTaG93IEdOVSB1bmlxdWUgc3ltYm9scyBhcyBwcm92aWRlZCBzeW1ib2xzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0dOVSBVbmlxdWUgc3ltYm9sIGlzIGEgR05VIGV4dGVuc2lvbiBlbXBsb3llZCBieSBuZXcgdmVyc2lvbiBvZiBHQ0MKK2J5IGRlZmF1bHQuIEV2ZW4gU3RhbmRhcmQgQysrIGxpYnJhcnkgaW4gR0NDIDQuOSBwcm92aWRlcyBzb21lIHN5bWJvbHMsCitzdWNoIGFzIF9aTlNzNF9SZXAyMF9TX2VtcHR5X3JlcF9zdG9yYWdlRSBpbiB0aGlzIGJpbmRpbmcgdHlwZSBpbnN0ZWFkCitvZiBFTEYgc3RhbmRhcmQgd2VhayBiaW5kaW5nLgorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgb2YgdGhpcyBuZXcgYmluZGluZyB0eXBlIHRvIG1rbGlicy1yZWFkZWxmLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK2luZGV4IDU2ZDkzZjguLjAxMzQ1MzAgMTAwNjQ0CistLS0gYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKKysrKyBiL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAorQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zeW1ib2xzX3Byb3ZpZGVkIChjb25zdCBFbGY6OnNlY3Rpb25fdHlwZTxFbGY6OnNlY3Rpb25fdHlwZV8KKyAgICAgdWludDhfdCB0eXBlID0gc3ltYm9sLT5nZXRfdHlwZSAoKTsKKyAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldF9uYW1lX3N0cmluZyAoKTsKKyAKKy0gICAgaWYgKGJpbmQgIT0gU1RCX0dMT0JBTCAmJiBiaW5kICE9IFNUQl9XRUFLKQorKyAgICBpZiAoYmluZCAhPSBTVEJfR0xPQkFMICYmIGJpbmQgIT0gU1RCX1dFQUsgJiYgYmluZCAhPSBTVEJfR05VX1VOSVFVRSkKKyAgICAgICBjb250aW51ZTsKKyAgICAgaWYgKHNobmR4ID09IFNITl9VTkRFRiB8fCBzaG5keCA9PSBTSE5fQUJTKQorICAgICAgIGNvbnRpbnVlOworLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc3lzcm9vdGVkLWxkc28ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc3lzcm9vdGVkLWxkc28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MDBhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaApAQCAtMCwwICsxLDE4IEBACitJbiBjcm9zcyBidWlsZHMgd2Ugd2lsbCBoYXZlIHRvIHJlc3BlY3Qgc3lzcm9vdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBta2xpYnMtMC4xLjM5L3NyYy9ta2xpYnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2xpYnMtMC4xLjM5Lm9yaWcvc3JjL21rbGlicwkyMDE0LTAzLTAxIDE4OjI1OjM2LjAwMDAwMDAwMCArMDAwMAorKysrIG1rbGlicy0wLjEuMzkvc3JjL21rbGlicwkyMDE0LTEwLTE5IDAwOjUxOjQ2LjgxMzUzNDU5NiArMDAwMAorQEAgLTQ5NSw3ICs0OTUsNyBAQAorICAgICBwcmVzZW50X3N5bWJvbHMgPSB7fQorICAgICBjaGVja2VkX2xpYnMgPSBzbWFsbF9saWJzCisgICAgIGNoZWNrZWRfbGlicy5leHRlbmQoYXZhaWxhYmxlX2xpYnMpCistICAgIGNoZWNrZWRfbGlicy5hcHBlbmQobGRsaWIpCisrICAgIGNoZWNrZWRfbGlicy5hcHBlbmQoc3lzcm9vdCArIGxkbGliKQorICAgICBmb3IgbGliIGluIGNoZWNrZWRfbGliczoKKyAgICAgICAgIGZvciBzeW1ib2wgaW4gcHJvdmlkZWRfc3ltYm9scyhsaWIpOgorICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJwcmVzZW50X3N5bWJvbHMgYWRkaW5nICVzIiAlIHN5bWJvbCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZlYzI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIGxpYnJhcnkgb3B0aW1pc2F0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJta2xpYnMgcHJvZHVjZXMgY3V0LWRvd24gc2hhcmVkIGxpYnJhcmllcyB0aGF0IGNvbnRhaW4gb25seSB0aGUgcm91dGluZXMgcmVxdWlyZWQgYnkgYSBwYXJ0aWN1bGFyIHNldCBvZiBleGVjdXRhYmxlcy4iCitIT01FUEFHRSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvbWtsaWJzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9OThkMzEwMzdiMTNkODk2ZTMzODkwNzM4ZWYwMWFmNjQiCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vbS9ta2xpYnMvJHtCUE59XyR7UFZ9LnRhci54eiBcCisJZmlsZTovL2FjX2luaXRfZml4LnBhdGNoXAorCWZpbGU6Ly9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaFwKKwlmaWxlOi8vc3lzcm9vdGVkLWxkc28ucGF0Y2ggXAorCWZpbGU6Ly9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaCBcCisJZmlsZTovL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2ggXAorCWZpbGU6Ly9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMWRhZmU1Zjk2MmNhYTlkYzVmMjY1MWMwNzIzODEyYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZGIyNGFlNzc5ZDIxY2NmZWQ0OWYyMmU0OWEyYjdlZTQzZWMwZTkxOTdiYzIwNmQ4MWNkMDJmOTZlOTFlMTI1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IG5hdGl2ZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHMvMDAwMS1tbWMuaC1kb24tdC1pbmNsdWRlLWFzbS1nZW5lcmljLWludC1sbDY0LmgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MjRkZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittbWMuaDogZG9uJ3QgaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKworSW5jbHVkaW5nIHRoaXMgZmlsZSBjYXVzZXMgYSBjb21waWxlIGZhaWx1cmUgZm9yIHFlbXVtaXBzNjQuCitUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB0byBiZSBleHBsaWNpdGx5IGluY2x1ZGVkLCBiZWNhdXNlIGl0IHdpbGwgYmUKK2luY2x1ZGVkIGJ5IHRoZSA8bGludXgvbW1jL2lvY3RsLmg+IGZpbGUgaWYgX01JUFNfU1pMT05HIGlzIG5vdCA2NC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbW1jLmggfCAgICAxIC0KKyAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbW1jLmggYi9tbWMuaAoraW5kZXggOTg3MWQ2Mi4uM2RmMmNkZiAxMDA2NDQKKy0tLSBhL21tYy5oCisrKysgYi9tbWMuaAorQEAgLTE0LDcgKzE0LDYgQEAKKyAgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgICovCisgCistI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisgI2luY2x1ZGUgPGxpbnV4L21tYy9pb2N0bC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1MDM2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK0RFU0NSSVBUSU9OID0gIlVzZXJzcGFjZSB0b29scyBmb3IgTU1DL1NEIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvY2dpdC9saW51eC9rZXJuZWwvZ2l0L2NqYi9tbWMtdXRpbHMuZ2l0LyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9tbWMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1kNzc0N2ZjODdmMWViMjJiOTQ2ZWY4MTk5Njk1MDNmMCIKKworQlJBTkNIID89ICJtYXN0ZXIiCitTUkNSRVYgPSAiZjRlYjI0MTUxOWY4ZDUwMGNlNjA2OGE3MGQyMzg5YmUzOWFjNTE4OSIKKworUFYgPSAiMC4xIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9jamIvbW1jLXV0aWxzLmdpdDticmFuY2g9JHtCUkFOQ0h9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgInM6LVdlcnJvcjo6ZyIgJHtTfS9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBtbWMgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy8wMDAxLWhhc2h0YWJsZS1SZW1vdmUtZHVwbGljYXRlLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzLzAwMDEtaGFzaHRhYmxlLVJlbW92ZS1kdXBsaWNhdGUtaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDM2MTU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy8wMDAxLWhhc2h0YWJsZS1SZW1vdmUtZHVwbGljYXRlLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS0ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBiODU2ZmYzNWMyMDEyNGNlYWU0MGJiYzRkMzI1ODRkZjQ3NjE4Yzk2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjUgRmViIDIwMTUgMDk6Mjg6MjYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gaGFzaHRhYmxlOiBSZW1vdmUgZHVwbGljYXRlIGhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS9oYXNodGFibGVfaXRlcmF0b3Jfa2V5CisKK2djYzUgaXMgZGVmYXVsdGluZyB0byBnbnUxMSBpbnN0ZWFkIG9mIGdudTg5IGxpa2UgcHJldmlvdXMgdmVyc2lvbnMKK2FzIGEgcmVzdWx0IHRoZSBzZW1hbnRpY3Mgb2YgJ2V4dGVybiBpbmxpbmUnIGNoYW5nZXMgd2hlcmUgaW4gZ251ODkgZm9yICdleHRlcm4gaW5saW5lJyBubyBleHRlcm5hbAordmlzaWJsZSBmdW5jdGlvbiBpcyBnZW5lcmF0ZWQsaW4gYzk5ICdleHRlcm5hbCBpbmxpbmUnIGdlbmVyYXRlcyBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24KK3RoZXJlIGlzIG5vIGVxdWl2YWxlbnQgaW4gYzk5KyBiZWNhdXNlIHJlZGVmaW5pdGlvbnMgYXJlbnQgYWxsb3dlZAorYnV0ICdzdGF0aWMgaW5saW5lJyByZW1haW5zIHNhbWUgZm9yIGZvciBjODkgYW5kIGM5OSssIHRoYXRzIHdoeSB3ZSBjaGFuZ2UgdGhlIHNlbWFudGljcworc28gd2UgbWFrZSB0aGUgZnVuY3Rpb25zIHN0YXRpYyBpbmxpbmUsIGFuZCBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKKy0tLQorIG1rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYyB8IDEyIC0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmgKKysrKyBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5oCitAQCAtMjgsNyArMjgsNyBAQCBoYXNodGFibGVfaXRlcmF0b3Ioc3RydWN0IGhhc2h0YWJsZSAqaCk7CisgLyogaGFzaHRhYmxlX2l0ZXJhdG9yX2tleQorICAqIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworIAorLWV4dGVybiBpbmxpbmUgdm9pZCAqCisrc3RhdGljIGlubGluZSB2b2lkICoKKyBoYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorIHsKKyAgICAgcmV0dXJuIGktPmUtPms7CitAQCAtMzcsNyArMzcsNyBAQCBoYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qIHZhbHVlIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworIAorLWV4dGVybiBpbmxpbmUgdm9pZCAqCisrc3RhdGljIGlubGluZSB2b2lkICoKKyBoYXNodGFibGVfaXRlcmF0b3JfdmFsdWUoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisgeworICAgICByZXR1cm4gaS0+ZS0+djsKK0luZGV4OiBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jCisrKysgZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYworQEAgLTM1LDE4ICszNSw2IEBAIGhhc2h0YWJsZV9pdGVyYXRvcihzdHJ1Y3QgaGFzaHRhYmxlICpoKQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistLyoga2V5ICAgICAgLSByZXR1cm4gdGhlIGtleSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworLS8qIHZhbHVlICAgIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworLQorLXZvaWQgKgorLWhhc2h0YWJsZV9pdGVyYXRvcl9rZXkoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisteyByZXR1cm4gaS0+ZS0+azsgfQorLQorLXZvaWQgKgorLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZShzdHJ1Y3QgaGFzaHRhYmxlX2l0ciAqaSkKKy17IHJldHVybiBpLT5lLT52OyB9CistCistLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qIGFkdmFuY2UgLSBhZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBlbGVtZW50CisgICogICAgICAgICAgIHJldHVybnMgemVybyBpZiBhZHZhbmNlZCB0byBlbmQgb2YgdGFibGUgKi8KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvYWRkLWV4Y2x1c2lvbi10by1ta2ZzLWpmZnMyLWdpdC0yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkNmEzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvYWRkLWV4Y2x1c2lvbi10by1ta2ZzLWpmZnMyLWdpdC0yLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIC90bXAvbWtmcy5qZmZzMi5jCTIwMDktMDEtMTEgMTU6Mjg6NDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2l0L21rZnMuamZmczIuYwkyMDA5LTAxLTExIDE1OjU5OjI5LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMCw2ICsxMDAsMTEgQEAKKyAJc3RydWN0IHJiX25vZGUgaGFyZGxpbmtfcmI7CisgfTsKKyAKKytzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSB7CisrCXN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBuZXh0OyAgLyogUG9pbnRzIHRvIHRoZSBuZXh0IGlnbm9yZXBhdGggZWxlbWVudCAqLworKwljaGFyIG5hbWVbUEFUSF9NQVhdOyAgICAgICAgLyogTmFtZSBvZiB0aGUgZW50cnkgKi8KKyt9OworK3N0YXRpYyBzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogaWdub3JlcGF0aCA9IDA7Cisgc3RydWN0IHJiX3Jvb3QgaGFyZGxpbmtzOworIHN0YXRpYyBpbnQgb3V0X2ZkID0gLTE7Cisgc3RhdGljIGludCBpbl9mZCA9IC0xOworQEAgLTQwOCw3ICs0MTMsNyBAQAorIAljaGFyICpocGF0aCwgKnRwYXRoOworIAlzdHJ1Y3QgZGlyZW50ICpkcCwgKipuYW1lbGlzdDsKKyAJc3RydWN0IGZpbGVzeXN0ZW1fZW50cnkgKmVudHJ5OworLQorKwlzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogZWxlbWVudCA9IGlnbm9yZXBhdGg7CisgCisgCWlmIChsc3RhdChob3N0cGF0aCwgJnNiKSkgeworIAkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIGhvc3RwYXRoKTsKK0BAIC00MTcsNiArNDIyLDE1IEBACisgCWVudHJ5ID0gYWRkX2hvc3RfZmlsZXN5c3RlbV9lbnRyeSh0YXJnZXRwYXRoLCBob3N0cGF0aCwKKyAJCQlzYi5zdF91aWQsIHNiLnN0X2dpZCwgc2Iuc3RfbW9kZSwgMCwgcGFyZW50KTsKKyAKKysJd2hpbGUgKCBlbGVtZW50ICkgeworKwkJaWYgKCBzdHJjbXAoIGVsZW1lbnQtPm5hbWUsIHRhcmdldHBhdGggKSA9PSAwICkgeworKwkJCXByaW50ZiggIk5vdGU6IGlnbm9yaW5nIGRpcmVjdG9yaWVzIGJlbG93ICclcydcbiIsIHRhcmdldHBhdGggKTsKKysJCQlyZXR1cm4gZW50cnk7CisrCQkJYnJlYWs7CisrCQl9CisrCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJfQorKworIAluID0gc2NhbmRpcihob3N0cGF0aCwgJm5hbWVsaXN0LCAwLCBhbHBoYXNvcnQpOworIAlpZiAobiA8IDApIHsKKyAJCXBlcnJvcl9tc2dfYW5kX2RpZSgib3BlbmluZyBkaXJlY3RvcnkgJXMiLCBob3N0cGF0aCk7CitAQCAtMTQ1Myw2ICsxNDY3LDcgQEAKKyAJeyJyb290IiwgMSwgTlVMTCwgJ3InfSwKKyAJeyJwYWdlc2l6ZSIsIDEsIE5VTEwsICdzJ30sCisgCXsiZXJhc2VibG9jayIsIDEsIE5VTEwsICdlJ30sCisrCXsiaWdub3JlIiwgMSwgTlVMTCwgJ0knfSwKKyAJeyJvdXRwdXQiLCAxLCBOVUxMLCAnbyd9LAorIAl7ImhlbHAiLCAwLCBOVUxMLCAnaCd9LAorIAl7InZlcmJvc2UiLCAwLCBOVUxMLCAndid9LAorQEAgLTE1MDAsNiArMTUxNSw3IEBACisgIiAgLUwsIC0tbGlzdC1jb21wcmVzc29ycyAgU2hvdyB0aGUgbGlzdCBvZiB0aGUgYXZhaWFibGUgY29tcHJlc3NvcnNcbiIKKyAiICAtdCwgLS10ZXN0LWNvbXByZXNzaW9uICBDYWxsIGRlY29tcHJlc3MgYW5kIGNvbXBhcmUgd2l0aCB0aGUgb3JpZ2luYWwgKGZvciB0ZXN0KVxuIgorICIgIC1uLCAtLW5vLWNsZWFubWFya2VycyAgIERvbid0IGFkZCBhIGNsZWFubWFya2VyIHRvIGV2ZXJ5IGVyYXNlYmxvY2tcbiIKKysiICAtSSwgLS1pZ25vcmU9UEFUSCAgICAgICBJZ25vcmUgc3ViIGRpcmVjdG9yeSBhbmQgZmlsZSB0cmVlIGJlbG93IFBBVEggd2hlbiByZWN1cnNpbmcgb3ZlciB0aGUgZmlsZSBzeXN0ZW1cbiIKKyAiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICBPdXRwdXQgdG8gRklMRSAoZGVmYXVsdDogc3Rkb3V0KVxuIgorICIgIC1sLCAtLWxpdHRsZS1lbmRpYW4gICAgIENyZWF0ZSBhIGxpdHRsZS1lbmRpYW4gZmlsZXN5c3RlbVxuIgorICIgIC1iLCAtLWJpZy1lbmRpYW4gICAgICAgIENyZWF0ZSBhIGJpZy1lbmRpYW4gZmlsZXN5c3RlbVxuIgorQEAgLTE2NjYsNiArMTY4Miw3IEBACisgCWNoYXIgKmNvbXByX25hbWUgPSBOVUxMOworIAlpbnQgY29tcHJfcHJpb3IgID0gLTE7CisgCWludCB3YXJuX3BhZ2Vfc2l6ZSA9IDA7CisrCXN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBlbGVtZW50ID0gaWdub3JlcGF0aDsKKyAKKyAJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworIAlpZiAocGFnZV9zaXplIDwgMCkgLyogU3lzdGVtIGRvZXNuJ3Qga25vdyBzbyAuLi4gKi8KK0BAIC0xNjc2LDcgKzE2OTMsNyBAQAorIAlqZmZzMl9jb21wcmVzc29yc19pbml0KCk7CisgCisgCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwKKy0JCQkJCSJEOmQ6cjpzOm86cVVQZmg/dlZlOmxicDo6bmM6bTp4Olg6THR5Omk6IiwgbG9uZ19vcHRpb25zLCAmYykpID49IDApCisrCQkJCQkiRDpkOnI6czpJOm86cVVQZmg/dlZlOmxicDo6bmM6bTp4Olg6THR5Omk6IiwgbG9uZ19vcHRpb25zLCAmYykpID49IDApCisgCXsKKyAJCXN3aXRjaCAob3B0KSB7CisgCQkJY2FzZSAnRCc6CitAQCAtMTcwMCw2ICsxNzE3LDI4IEBACisgCQkJCXdhcm5fcGFnZV9zaXplID0gMDsgLyogc2V0IGJ5IHVzZXIsIHNvIGRvbid0IG5lZWQgdG8gd2FybiAqLworIAkJCQlicmVhazsKKyAKKysJCQljYXNlICdJJzoKKysJCQkJcHJpbnRmKCAiTm90ZTogQWRkaW5nICclcycgdG8gaWdub3JlIFBhdGhcbiIsIG9wdGFyZyApOworKwkJCQllbGVtZW50ID0gaWdub3JlcGF0aDsKKysJCQkJaWYgKCAhaWdub3JlcGF0aCApIHsKKysJCQkJCWlnbm9yZXBhdGggPSB4bWFsbG9jKCBzaXplb2YoIHN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5ICkgKTsKKysJCQkJCWlnbm9yZXBhdGgtPm5leHQgPSAwOworKwkJCQkJc3RyY3B5KCAmaWdub3JlcGF0aC0+bmFtZVswXSwgb3B0YXJnICk7CisrCQkJCX0gZWxzZSB7CisrCQkJCQl3aGlsZSAoIGVsZW1lbnQtPm5leHQgKSBlbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJCQkJCWVsZW1lbnQtPm5leHQgPSB4bWFsbG9jKCBzaXplb2YoIHN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5ICkgKTsKKysgCQkJCQllbGVtZW50LT5uZXh0LT5uZXh0ID0gMDsKKysJCQkJCXN0cmNweSggJmVsZW1lbnQtPm5leHQtPm5hbWVbMF0sIG9wdGFyZyApOworKwkJCQl9CisrCQkJCXByaW50ZiggIi0tLS0tLS0tLSBEdW1waW5nIGlnbm9yZSBwYXRoIGxpc3QgLS0tLS0tLS0tLS0tLS0tLVxuIiApOworKwkJCQllbGVtZW50ID0gaWdub3JlcGF0aDsKKysJCQkJd2hpbGUgKCBlbGVtZW50ICkgeworKwkJCQkJcHJpbnRmKCAiICAqICclcydcbiIsICZlbGVtZW50LT5uYW1lWzBdICk7CisrCQkJCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJCQkJfQorKwkJCQlwcmludGYoICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKTsKKysJCQkJYnJlYWs7CisrCisgCQkJY2FzZSAnbyc6CisgCQkJCWlmIChvdXRfZmQgIT0gLTEpIHsKKyAJCQkJCWVycm9yX21zZ19hbmRfZGllKCJvdXRwdXQgZmlsZW5hbWUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2ZpeC1hcm12Ny1uZW9uLWFsaWdubWVudC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvZml4LWFybXY3LW5lb24tYWxpZ25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjE2MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2ZpeC1hcm12Ny1uZW9uLWFsaWdubWVudC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworTkVPTiBpbnN0cnVjdGlvbiBWTEQxLjY0IHdhcyB1c2VkIHRvIGNvcHkgNjQgYml0cyBkYXRhIGFmdGVyIHR5cGUKK2Nhc3RpbmcsIGFuZCB0aGV5IHdpbGwgdHJpZ2dlciBhbGlnbm1lbnQgdHJhcC4KK1RoaXMgcGF0Y2ggdXNlcyBtZW1jcHkgdG8gYXZvaWQgYWxpZ25tZW50IHByb2JsZW0uCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPFl1YW5qaWUuSHVhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL21rZnMudWJpZnMva2V5LmggYi9ta2ZzLnViaWZzL2tleS5oCitpbmRleCBkM2EwMmQ0Li5lN2U5MjE4IDEwMDY0NAorLS0tIGEvbWtmcy51Ymlmcy9rZXkuaAorKysrIGIvbWtmcy51Ymlmcy9rZXkuaAorQEAgLTE0MSwxMCArMTQxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkYXRhX2tleV9pbml0KHVuaW9uIHViaWZzX2tleSAqa2V5LCBpbm9fdCBpbnVtLAorICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGUoY29uc3QgdW5pb24gdWJpZnNfa2V5ICpmcm9tLCB2b2lkICp0bykKKyB7CistCXVuaW9uIHViaWZzX2tleSAqdCA9IHRvOworKwlfX2xlMzIgeFsyXTsKKyAKKy0JdC0+ajMyWzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKy0JdC0+ajMyWzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysJeFswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CisrCXhbMV0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMV0pOworKworKwltZW1jcHkodG8sICZ4LCA4KTsKKyAJbWVtc2V0KHRvICsgOCwgMCwgVUJJRlNfTUFYX0tFWV9MRU4gLSA4KTsKKyB9CisgCitAQCAtMTU2LDEwICsxNTgsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGtleV93cml0ZShjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmZyb20sIHZvaWQgKnRvKQorICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGVfaWR4KGNvbnN0IHVuaW9uIHViaWZzX2tleSAqZnJvbSwgdm9pZCAqdG8pCisgeworLQl1bmlvbiB1Ymlmc19rZXkgKnQgPSB0bzsKKysJX19sZTMyIHhbMl07CisrCisrCXhbMF0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMF0pOworKwl4WzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKyAKKy0JdC0+ajMyWzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKy0JdC0+ajMyWzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysJbWVtY3B5KHRvLCAmeCwgOCk7CisgfQorIAorIC8qKgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9tdGQtdXRpbHMtZml4LWNvcnJ1cHQtY2xlYW5tYXJrZXItd2l0aC1mbGFzaF9lcmFzZS0tai1jb21tYW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9tdGQtdXRpbHMtZml4LWNvcnJ1cHQtY2xlYW5tYXJrZXItd2l0aC1mbGFzaF9lcmFzZS0tai1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDdjZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworRnJvbSBwYXRjaHdvcmsgTW9uIEF1ZyAgOCAwODoxNjo0MyAyMDExCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK1N1YmplY3Q6IG10ZC11dGlsczogZml4IGNvcnJ1cHQgY2xlYW5tYXJrZXIgd2l0aCBmbGFzaF9lcmFzZSAtaiBjb21tYW5kCitEYXRlOiBTdW4sIDA3IEF1ZyAyMDExIDIyOjE2OjQzIC0wMDAwCitGcm9tOiBiMzUzNjJAZnJlZXNjYWxlLmNvbQorWC1QYXRjaHdvcmstSWQ6IDEwODg3MworTWVzc2FnZS1JZDogPDEzMTI3OTE0MDMtMTM0NzMtMS1naXQtc2VuZC1lbWFpbC1iMzUzNjJAZnJlZXNjYWxlLmNvbT4KK1RvOiA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KK0NjOiBMaXUgU2h1byA8YjM1MzYyQGZyZWVzY2FsZS5jb20+LCBBcnRlbS5CaXR5dXRza2l5QG5va2lhLmNvbSwKKyBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPiwgbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKKworRnJvbTogTGl1IFNodW8gPGIzNTM2MkBmcmVlc2NhbGUuY29tPgorCitGbGFzaF9lcmFzZSAtaiBzaG91bGQgZmlsbCBkaXNjcmV0ZSBmcmVlb29iIGFyZWFzIHdpdGggcmVxdWlyZWQgYnl0ZXMKK29mIEpGRlMyIGNsZWFubWFya2VyIGluIGpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKS4gTm90IGp1c3QgZmlsbAordGhlIGZpcnN0IGZyZWVvb2IgYXJlYS4KKworVGhlIGJlbG93IGlzIHRoZSByZXN1bHQgd2l0aG91dCB0aGlzIHdvcmthcm91bmQ6CisKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDAwMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwNDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMDgwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDBjMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxMDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMTQwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDE4MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxYzAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMjAwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDI0MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAyODAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorLi4uCisKK1NpZ25lZC1vZmYtYnk6IExpdSBTaHVvIDxiMzUzNjJAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisKK1VwZGF0ZWQgZm9yIHRoZSBuZXcgdmVyc2lvbgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCit2MiA6IGdldCBsZW5ndGggb2YgYXZhaWxibGUgZnJlZW9vYiBieXRlcyBmcm9tIG9vYmluZm8gaW5mb3JtYXRpb24sCisgICAgICBub3QgdXNlIHRoZSBpb2N0bCBFQ0NHRVRMQVlPVVQgd2hpY2ggaXMgYmVpbmcgZGVwcmVjYXRlZC4KKworIGZsYXNoX2VyYXNlLmMgfCAgIDQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mbGFzaF9lcmFzZS5jIGIvZmxhc2hfZXJhc2UuYworaW5kZXggOTMzMzczYS4uNGI5ZDg0YiAxMDA2NDQKKy0tLSBhL2ZsYXNoX2VyYXNlLmMKKysrKyBiL2ZsYXNoX2VyYXNlLmMKK0BAIC05OSw2ICs5OSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWJvb2wgaXNOQU5EOworIAlpbnQgZXJyb3IgPSAwOworIAlvZmZfdCBvZmZzZXQgPSAwOworKwl2b2lkICpvb2JfZGF0YSA9IE5VTEw7CisgCisgCS8qCisgCSAqIFByb2Nlc3MgdXNlciBhcmd1bWVudHMKK0BAIC0yMDEsMTUgKzIwMiw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJCWlmIChpb2N0bChmZCwgTUVNR0VUT09CU0VMLCAmb29iaW5mbykgIT0gMCkKKyAJCQkJcmV0dXJuIHN5c19lcnJtc2coIiVzOiB1bmFibGUgdG8gZ2V0IE5BTkQgb29iaW5mbyIsIG10ZF9kZXZpY2UpOworIAorKwkJCWNsZWFubWFya2VyLnRvdGxlbiA9IGNwdV90b19qZTMyKDgpOworIAkJCS8qIENoZWNrIGZvciBhdXRvcGxhY2VtZW50ICovCisgCQkJaWYgKG9vYmluZm8udXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgeworLQkJCQkvKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBmcmVlIGJ5dGVzICovCistCQkJCWlmICghb29iaW5mby5vb2JmcmVlWzBdWzFdKQorKwkJCQlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXRfdXNlciBlY2NsYXlvdXQ7CisrCQkJCWludCBpLCBvb2JhdmFpbDsKKysKKysJCQkJZm9yIChpID0gMCwgb29iYXZhaWwgPSAwOyBvb2JpbmZvLm9vYmZyZWVbaV1bMV07IGkrKykKKysJCQkJCW9vYmF2YWlsICs9IG9vYmluZm8ub29iZnJlZVtpXVsxXTsKKysKKysJCQkJaWYgKCFvb2JhdmFpbCkKKyAJCQkJCXJldHVybiBlcnJtc2coIiBFZWVwLiBBdXRvcGxhY2VtZW50IHNlbGVjdGVkIGFuZCBubyBlbXB0eSBzcGFjZSBpbiBvb2IiKTsKKysKKysJCQkJLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLworIAkJCQljbG1wb3MgPSBvb2JpbmZvLm9vYmZyZWVbMF1bMF07CistCQkJCWNsbWxlbiA9IG9vYmluZm8ub29iZnJlZVswXVsxXTsKKy0JCQkJaWYgKGNsbWxlbiA+IDgpCistCQkJCQljbG1sZW4gPSA4OworKwkJCQljbG1sZW4gPSBNSU4ob29iYXZhaWwsIDgpOworKworKwkJCQlpZiAob29iaW5mby5vb2JmcmVlWzBdWzFdIDwgOCAmJiBvb2JhdmFpbCA+PSA4KSB7CisrCQkJCQlpbnQgbGVmdCwgbiwgbGFzdCA9IDA7CisrCQkJCQl2b2lkICpjbTsKKysKKysJCQkJCW9vYl9kYXRhID0gbWFsbG9jKG10ZC5vb2Jfc2l6ZSk7CisrCQkJCQlpZiAoIW9vYl9kYXRhKQorKwkJCQkJCXJldHVybiAtRU5PTUVNOworKworKwkJCQkJbWVtc2V0KG9vYl9kYXRhLCAweGZmLCBtdGQub29iX3NpemUpOworKwkJCQkJY20gPSAmY2xlYW5tYXJrZXI7CisrCQkJCQlmb3IgKGkgPSAwLCBsZWZ0ID0gY2xtbGVuOyBsZWZ0IDsgaSsrKSB7CisrCQkJCQkJbiA9IE1JTihsZWZ0LCBvb2JpbmZvLm9vYmZyZWVbaV1bMV0pOworKwkJCQkJCW1lbWNweShvb2JfZGF0YSArIG9vYmluZm8ub29iZnJlZVtpXVswXSwKKysJCQkJCQkJCWNtLCBuKTsKKysJCQkJCQlsZWZ0IC09IG47CisrCQkJCQkJY20gICArPSBuOworKwkJCQkJCWxhc3QgPSBvb2JpbmZvLm9vYmZyZWVbaV1bMF0gKyBuOworKwkJCQkJfQorKworKwkJCQkJY2xtbGVuID0gbGFzdCAtIGNsbXBvczsKKysJCQkJfQorIAkJCX0gZWxzZSB7CisgCQkJCS8qIExlZ2FjeSBtb2RlICovCisgCQkJCXN3aXRjaCAobXRkLm9vYl9zaXplKSB7CitAQCAtMjI3LDcgKzI1Niw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQkJCQkJYnJlYWs7CisgCQkJCX0KKyAJCQl9CistCQkJY2xlYW5tYXJrZXIudG90bGVuID0gY3B1X3RvX2plMzIoOCk7CisgCQl9CisgCQljbGVhbm1hcmtlci5oZHJfY3JjID0gY3B1X3RvX2plMzIobXRkX2NyYzMyKDAsICZjbGVhbm1hcmtlciwgc2l6ZW9mKGNsZWFubWFya2VyKSAtIDQpKTsKKyAJfQorQEAgLTI3Niw3ICszMDQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAkJLyogd3JpdGUgY2xlYW5tYXJrZXIgKi8KKyAJCWlmIChpc05BTkQpIHsKKy0JCQlpZiAobXRkX3dyaXRlX29vYihtdGRfZGVzYywgJm10ZCwgZmQsICh1aW50NjRfdClvZmZzZXQgKyBjbG1wb3MsIGNsbWxlbiwgJmNsZWFubWFya2VyKSAhPSAwKSB7CisrCQkJdm9pZCAqZGF0YSA9IG9vYl9kYXRhID8gb29iX2RhdGEgKyBjbG1wb3MgOiAmY2xlYW5tYXJrZXI7CisrCQkJaWYgKG10ZF93cml0ZV9vb2IobXRkX2Rlc2MsICZtdGQsIGZkLCAodWludDY0X3Qpb2Zmc2V0ICsgY2xtcG9zLCBjbG1sZW4sIGRhdGEpICE9IDApIHsKKyAJCQkJc3lzX2Vycm1zZygiJXM6IE1URCB3cml0ZW9vYiBmYWlsdXJlIiwgbXRkX2RldmljZSk7CisgCQkJCWNvbnRpbnVlOworIAkJCX0KK0BAIC0yOTEsNSArMzIwLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJc2hvd19wcm9ncmVzcygmbXRkLCBvZmZzZXQsIGViLCBlYl9zdGFydCwgZWJfY250KTsKKyAJYmFyZXZlcmJvc2UoIXF1aWV0LCAiXG4iKTsKKyAKKysJaWYgKG9vYl9kYXRhKQorKwkJZnJlZShvb2JfZGF0YSk7CisrCisgCXJldHVybiAwOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkY2E3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIG1lbW9yeSB0ZWNobm9sb2d5IGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9jb21tb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1iYTA1YjA3OTEyYTQ0ZWEyYmY4MWNlNDA5MzgwMDQ5YyIKKworREVQRU5EUyA9ICJ6bGliIGx6byBlMmZzcHJvZ3MgdXRpbC1saW51eCIKKworUFYgPSAiMS41LjErZ2l0JHtTUkNQVn0iCisKK1NSQ1JFViA9ICI5ZjEwNzEzMmE2YTA3M2NjZTM3NDM0Y2E5Y2RhNjkxN2RkOGQ4NjZiIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0LyIKKworIyB4YXR0ciBzdXBwb3J0IGNyZWF0ZXMgYW4gYWRkaXRpb25hbCBjb21waWxlLXRpbWUgZGVwZW5kZW5jeSBvbiBhY2wgYmVjYXVzZQorIyB0aGUgc3lzL2FjbC5oIGhlYWRlciBpcyBuZWVkZWQuIGxpYmFjbCBpcyBub3QgbmVlZGVkIGFuZCB0aHVzIGVuYWJsaW5nIHhhdHRyCisjIHJlZ2FyZGxlc3Mgd2hldGhlciBhY2wgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgZGlzdHJvIHNob3VsZCBiZSBva2F5LgorUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICIsLGFjbCwiCisKK0VYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdSQU5MSUI9JHtSQU5MSUJ9JyAnQVI9JHtBUn0nICdDRkxBR1M9JHtDRkxBR1N9ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3hhdHRyJywgJycsICctRFdJVEhPVVRfWEFUVFInLCBkKX0gLUkke1N9L2luY2x1ZGUnICdCVUlMRERJUj0ke1N9JyIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK30KKworUEFDS0FHRVMgPSsgIm10ZC11dGlscy1qZmZzMiBtdGQtdXRpbHMtdWJpZnMgbXRkLXV0aWxzLW1pc2MiCisKK0ZJTEVTX210ZC11dGlscy1qZmZzMiA9ICIke3NiaW5kaXJ9L21rZnMuamZmczIgJHtzYmluZGlyfS9qZmZzMmR1bXAgJHtzYmluZGlyfS9qZmZzMnJlYWRlciAke3NiaW5kaXJ9L3N1bXRvb2wiCitGSUxFU19tdGQtdXRpbHMtdWJpZnMgPSAiJHtzYmluZGlyfS9ta2ZzLnViaWZzICR7c2JpbmRpcn0vdWJpKiIKK0ZJTEVTX210ZC11dGlscy1taXNjID0gIiR7c2JpbmRpcn0vbmZ0bCogJHtzYmluZGlyfS9mdGwqICR7c2JpbmRpcn0vcmZkKiAke3NiaW5kaXJ9L2RvYyogJHtzYmluZGlyfS9zZXJ2ZV9pbWFnZSAke3NiaW5kaXJ9L3JlY3ZfaW1hZ2UiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIGdpdC8uY29tcHIuYy5kZXA6NDY6IHdhcm5pbmc6IE5VTCBjaGFyYWN0ZXIgc2VlbjsgcmVzdCBvZiBsaW5lIGlnbm9yZWQKKyMgZ2l0Ly5jb21wci5jLmRlcDo0NzogKioqIG1pc3Npbmcgc2VwYXJhdG9yLiAgU3RvcC4KK1BBUkFMTEVMX01BS0UgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9maXgtYnJva2VuLWx6LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9maXgtYnJva2VuLWx6LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDU0OTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBXZW5saW4gS2FuZyA8d2VubGluLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggOGY5MzA1YS4uNjk0ZTgzNyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI1MSw2ICsyNTEsNyBAQCBpbnN0YWxsLXNjcmlwdHM6ICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorIAlAZm9yIGogaW4gJChTQ1JJUFRTKSA7IGRvIFwKKyAJCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9zY3JpcHRzLyQkaiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisgCQllY2hvICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAlkb25lCisgCXJtIC1mICR7REVTVERJUn0kKGJpbmRpcikvbHoKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMtbWFrZWluZm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy1tYWtlaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTI4NzNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMtbWFrZWluZm8ucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBtdG9vbHMtMy45LjkvY29uZmlndXJlLmluLm9yaWcJMjAwNi0wNC0xNCAxNjowNTo1NC4zMzc2NTUxOTIgLTA2MDAKKysrKyBtdG9vbHMtMy45LjkvY29uZmlndXJlLmluCTIwMDYtMDQtMTQgMTY6MTI6MjkuNzM2NTQ1NDI0IC0wNjAwCitAQCAtMjEsNiArMjEsMzMgQEAKKyBBQ19DX0NPTlNUCisgQUNfQ19JTkxJTkUKKyAKKytBQ19DSEVDS19QUk9HKE1BS0VJTkZPLCBtYWtlaW5mbywgbWFrZWluZm8sICkKKytpZiB0ZXN0ICJ4JE1BS0VJTkZPIiA9ICJ4IjsgdGhlbgorKwlNQUtFSU5GTz0iQGVjaG8gbWFrZWluZm8gbWlzc2luZzsgdHJ1ZSIKKytmaQorK0FDX0NIRUNLX1BST0coVEVYSTJEVkksIHRleGkyZHZpLCB0ZXhpMmR2aSwgKQorK2lmIHRlc3QgIngkVEVYSTJEVkkiID0gIngiOyB0aGVuCisrCVRFWEkyRFZJPSJAZWNobyB0ZXhpMmR2aSBtaXNzaW5nOyB0cnVlIgorK2ZpCisrQUNfQ0hFQ0tfUFJPRyhURVhJMlBERiwgdGV4aTJwZGYsIHRleGkycGRmLCApCisraWYgdGVzdCAieCRURVhJMlBERiIgPSAieCI7IHRoZW4KKysJVEVYSTJQREY9IkBlY2hvIHRleGkycGRmIG1pc3Npbmc7IHRydWUiCisrZmkKKytBQ19DSEVDS19QUk9HKFRFWEkySFRNTCwgdGV4aTJodG1sLCB0ZXhpMmh0bWwsICkKKytpZiB0ZXN0ICJ4JFRFWEkySFRNTCIgPSAieCI7IHRoZW4KKysJVEVYSTJIVE1MPSJAZWNobyB0ZXhpMmh0bWwgbWlzc2luZzsgdHJ1ZSIKKytmaSAgICAKKytBQ19DSEVDS19QUk9HKERWSTJQUywgZHZpMnBzLCBkdmkycHMsICkKKytpZiB0ZXN0ICJ4JERWSTJQUyIgPSAieCI7IHRoZW4KKysJRFZJMlBTPSJAZWNobyBkdmkycHMgbWlzc2luZzsgdHJ1ZSIKKytmaQorKworK0FDX1NVQlNUKE1BS0VJTkZPKQorK0FDX1NVQlNUKFRFWEkyRFZJKQorK0FDX1NVQlNUKFRFWEkyUERGKQorK0FDX1NVQlNUKFRFWEkySFRNTCkKKytBQ19TVUJTVChEVkkyUFMpCisrCisgCisgZG5sIENoZWNrIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyBkbmwgRW5hYmxlIE9TLzIgZXh0ZW5kZWQgZGVuc2l0eSBmb3JtYXQgZGlza3MKKy0tLSBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4uc2F2CTIwMDYtMDQtMTQgMTU6NTY6MTkuMDAwMDAwMDAwIC0wNjAwCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCTIwMDYtMDQtMTQgMTY6MTU6MjkuMzE1MjQ1MzEyIC0wNjAwCitAQCAtMTEsMTAgKzExLDExIEBACisgVVNFUkxERkxBR1MgPQorIFVTRVJMRExJQlMgPQorIAorLU1BS0VJTkZPID0gbWFrZWluZm8KKy1URVhJMkRWSSA9IHRleGkyZHZpCistVEVYSTJQREYgPSB0ZXhpMnBkZgorLVRFWEkySFRNTCA9IHRleGkyaHRtbAorK01BS0VJTkZPID0gQE1BS0VJTkZPQAorK1RFWEkyRFZJID0gQFRFWEkyRFZJQAorK1RFWEkyUERGID0gQFRFWEkyUERGQAorK1RFWEkySFRNTCA9IEBURVhJMkhUTUxACisrRFZJMlBTID0gQERWSTJQU0AKKyAKKyAKKyAjIGRvIG5vdCBlZGl0IGJlbG93IHRoaXMgbGluZQorQEAgLTE4MSw3ICsxODIsNyBAQAorIAorIHBzOiBtdG9vbHMucHMKKyAlLnBzOiAlLmR2aQorLQlkdmlwcyAtZiA8ICQ8ID4gJEAKKysJJChEVkkyUFMpIC1mIDwgJDwgPiAkQAorIAorIHBkZjogbXRvb2xzLnBkZgorICUucGRmOiAlLnRleGkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhMzIwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsMTI5IEBACiskTmV0QlNEOiBwYXRjaC1hYSx2IDEuMTAgMjAwNy8wOC8xNyAyMDo1NTozNCBqb2VyZyBFeHAgJAorCistLS0KKyBNYWtlZmlsZS5pbiB8ICAgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG10b29scy0zLjkuOS5vcmlnL01ha2VmaWxlLmluCTIwMDctMTAtMTIgMTE6MTg6NDYuMDAwMDAwMDAwICswMTAwCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCTIwMDctMTAtMTIgMTE6Mjg6MTQuMDAwMDAwMDAwICswMTAwCitAQCAtMTk1LDMwICsxOTUsMjIgQEAgaHRtbDogbXRvb2xzLmh0bWwgbXRvb2xzX3RvYy5odG1sCisgCisgIyBEb24ndCBjZCwgdG8gYXZvaWQgYnJlYWtpbmcgaW5zdGFsbC1zaCByZWZlcmVuY2VzLgorIGluc3RhbGwtaW5mbzogaW5mbworLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChpbmZvZGlyKQorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoaW5mb2RpcikKKyAJaWYgdGVzdCAtZiBtdG9vbHMuaW5mbzsgdGhlbiBcCisgCSAgZm9yIGkgaW4gbXRvb2xzLmluZm8qOyBkbyBcCistCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoaW5mb2RpcikvJCRpOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRpICR7REVTVERJUn0kKGluZm9kaXIpLyQkaTsgXAorIAkgIGRvbmU7IFwKKyAJZWxzZSBcCisgCSAgZm9yIGkgaW4gJChzcmNkaXIpL210b29scy5pbmZvKjsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKGluZm9kaXIpL2BlY2hvICQkaSB8IHNlZCAnc3xeJChzcmNkaXIpL3x8J2A7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJHtERVNURElSfSQoaW5mb2RpcikvYGVjaG8gJCRpIHwgc2VkICdzfF4kKHNyY2RpcikvfHwnYDsgXAorIAkgIGRvbmU7IFwKKyAJZmk7IFwKKy0JaWYgWyAtbiAiJChJTlNUQUxMX0lORk8pIiBdIDsgdGhlbiBcCistCQlpZiBbIC1mICQoaW5mb2RpcikvZGlyLmluZm8gXSA7IHRoZW4gXAorLQkJCSQoSU5TVEFMTF9JTkZPKSAkKGluZm9kaXIpL210b29scy5pbmZvICQoaW5mb2RpcikvZGlyLmluZm87IFwKKy0JCWZpOyBcCistCQlpZiBbIC1mICQoaW5mb2RpcikvZGlyIF0gOyB0aGVuIFwKKy0JCQkkKElOU1RBTExfSU5GTykgJChpbmZvZGlyKS9tdG9vbHMuaW5mbyAkKGluZm9kaXIpL2RpcjsgXAorLQkJZmk7IFwKKy0JZmkKKyAKKyB1bmluc3RhbGwtaW5mbzoKKyAJY2QgJChpbmZvZGlyKSAmJiBybSAtZiBtdG9vbHMuaW5mbyoKKyAKKy1pbnN0YWxsOgkkKGJpbmRpcikvbXRvb2xzIEBCSU5GTE9QUFlEQCBpbnN0YWxsLW1hbiBpbnN0YWxsLWxpbmtzIFwKKy0JCSQoYmluZGlyKS9ta21hbmlmZXN0IGluc3RhbGwtc2NyaXB0cyBpbnN0YWxsLWluZm8KKytpbnN0YWxsOgkke0RFU1RESVJ9JChiaW5kaXIpL210b29scyAke0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWQgaW5zdGFsbC1tYW4gaW5zdGFsbC1saW5rcyBcCisrCQkke0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3QgaW5zdGFsbC1zY3JpcHRzIGluc3RhbGwtaW5mbworIAorIHVuaW5zdGFsbDoJdW5pbnN0YWxsLWJpbiB1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1saW5rcyBcCisgCQl1bmluc3RhbGwtc2NyaXB0cworQEAgLTIyOCw1MiArMjIwLDUyIEBAIGRpc3RjbGVhbjogY2xlYW4gdGV4Y2xlYW4KKyBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKyAKKyAKKy0kKGJpbmRpcikvZmxvcHB5ZDogZmxvcHB5ZAorLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkICQoYmluZGlyKS9mbG9wcHlkCisrJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkOiBmbG9wcHlkCisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkICR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZAorIAorLSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0OiBmbG9wcHlkX2luc3RhbGx0ZXN0CistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWRfaW5zdGFsbHRlc3QgJChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3QKKyske0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3Q6IGZsb3BweWRfaW5zdGFsbHRlc3QKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWRfaW5zdGFsbHRlc3QgJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0CisgCistJChiaW5kaXIpL210b29sczogbXRvb2xzCistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIG10b29scyAkKGJpbmRpcikvbXRvb2xzCisrJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHM6IG10b29scworKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbXRvb2xzICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCistJChiaW5kaXIpL21rbWFuaWZlc3Q6IG1rbWFuaWZlc3QKKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgbWttYW5pZmVzdCAkKGJpbmRpcikvbWttYW5pZmVzdAorKyR7REVTVERJUn0kKGJpbmRpcikvbWttYW5pZmVzdDogbWttYW5pZmVzdAorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbWttYW5pZmVzdCAke0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3QKKyAKKyAjJChFVENESVIpL210b29sczogbXRvb2xzLmV0YworICMJY3AgbXRvb2xzLmV0YyAkKEVUQ0RJUikvbXRvb2xzCisgCistaW5zdGFsbC1saW5rczogJChiaW5kaXIpL210b29scworK2luc3RhbGwtbGlua3M6ICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCUBmb3IgaiBpbiAkKExJTktTKTsgZG8gXAorLQkJcm0gLWYgJChiaW5kaXIpLyQkaiA7IFwKKy0JCSQoTE5fUykgbXRvb2xzICQoYmluZGlyKS8kJGogOyBcCistCQllY2hvICQoYmluZGlyKS8kJGogOyBcCisrCQlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCSQoTE5fUykgbXRvb2xzICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJZG9uZQorIAorICMjICJ6IiBpcyB0aGUgb2xkZXIgdmVyc2lvbiBvZiAiZ3oiOyB0aGUgbmFtZSBpcyBqdXN0ICp0b28qIHNob3J0CistaW5zdGFsbC1zY3JpcHRzOiAkKGJpbmRpcikvbXRvb2xzCistCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCisraW5zdGFsbC1zY3JpcHRzOiAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworKwlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKyAJQGZvciBqIGluICQoU0NSSVBUUykgOyBkbyBcCistCQkkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICQoYmluZGlyKS8kJGogOyBcCistCQllY2hvICQoYmluZGlyKS8kJGogOyBcCisrCQkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQllY2hvICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAlkb25lCistCXJtIC1mICQoYmluZGlyKS9segorLQkkKExOX1MpIHV6ICQoYmluZGlyKS9segorKwlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpL2x6CisrCSQoTE5fUykgdXogJHtERVNURElSfSQoYmluZGlyKS9segorIAorIGluc3RhbGwtbWFuOgorLQlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoTUFOMURJUikKKysJQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChNQU4xRElSKQorIAlAZm9yIGogaW4gJChNQU4xKTsgZG8gXAorLQkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJChNQU4xRElSKS8kJGogOyBcCistCQllY2hvICQoTUFOMURJUikvJCRqIDsgXAorKwkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJHtERVNURElSfSQoTUFOMURJUikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChNQU4xRElSKS8kJGogOyBcCisgCWRvbmUKKy0JQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKE1BTjVESVIpCisrCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoTUFONURJUikKKyAJQGZvciBqIGluICQoTUFONSk7IGRvIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICQoTUFONURJUikvJCRqIDsgXAorLQkJZWNobyAkKE1BTjVESVIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICR7REVTVERJUn0kKE1BTjVESVIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoTUFONURJUikvJCRqIDsgXAorIAlkb25lCisgCisgdW5pbnN0YWxsLWJpbjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLmdwbHYzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEuZ3BsdjMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNiM2UzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLmdwbHYzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Rpc2FibGUgYnVpbGRpbmcgd2l0aCBYMTEgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbXRvb2xzLTQuMC4xNS5vcmlnLy9NYWtlZmlsZS5pbiBtdG9vbHMtNC4wLjE1Ly9NYWtlZmlsZS5pbgorLS0tIG10b29scy00LjAuMTUub3JpZy8vTWFrZWZpbGUuaW4JMjAxMC0xMC0xNyAwODo0MTowOS4wMDAwMDAwMDAgLTA3MDAKKysrKyBtdG9vbHMtNC4wLjE1Ly9NYWtlZmlsZS5pbgkyMDEwLTExLTIzIDEzOjU5OjQ5LjI1ODI1ODM3NCAtMDgwMAorQEAgLTE0Niw3ICsxNDYsNyBAQAorIENYWEZMQUdTICA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNYWEZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpCisgTElOSyAgICAgID0gJChDQykgJChMREZMQUdTKSAkKFVTRVJMREZMQUdTKSBAZXh0cmFsaWJkaXJACisgQUxMTElCUyAgID0gJChVU0VSTERMSUJTKSAkKE1BQ0hERVBMSUJTKSAkKFNITElCKSAkKExJQlMpCistWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAtbFhhdSAtbFgxMSAkKExJQlMpCisrWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAkKExJQlMpCisgWF9DQ0ZMQUdTID0gJChYX0NGTEFHUykgJChDRkxBR1MpCisgCisgYWxsOiAgICBtdG9vbHMgJChMSU5LUykgbWttYW5pZmVzdCBARkxPUFBZREAgbXRvb2xzLjEgbXRvb2xzLjUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1YjYyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworLS0tIG10b29scy0zLjkuOS5vcmlnL01ha2VmaWxlLmluCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCitAQCAtMTI4LDExICsxMjgsMTEgQEAgWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKKyBYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACisgQ0ZMQUdTID0gJChDUFBGTEFHUykgJChERUZTKSAkKE1ZQ0ZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpIAorIENYWEZMQUdTICA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNYWEZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpIAorIExJTksgICAgICA9ICQoQ0MpICQoTERGTEFHUykgJChVU0VSTERGTEFHUykgQGV4dHJhbGliZGlyQAorIEFMTExJQlMgICA9ICQoVVNFUkxETElCUykgJChNQUNIREVQTElCUykgJChTSExJQikgJChMSUJTKQorLVhfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChYX1BSRV9MSUJTKSAtbFhhdSAtbFgxMSAkKExJQlMpIAorK1hfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChYX1BSRV9MSUJTKSAkKExJQlMpCisgWF9DQ0ZMQUdTID0gJChYX0NGTEFHUykgJChDRkxBR1MpCisgCisgYWxsOiAgICBtdG9vbHMgJChMSU5LUykgbWttYW5pZmVzdCBARkxPUFBZREAKKyAKKyAlLm86ICUuYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NGE3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIKQEAgLTAsMCArMSw1NiBAQAorIyBtdG9vbHMgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIlV0aWxpdGllcyB0byBhY2Nlc3MgTVMtRE9TIGRpc2tzIHdpdGhvdXQgbW91bnRpbmcgdGhlbSIKK0RFU0NSSVBUSU9OID0gIk10b29scyBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBhY2Nlc3NpbmcgTVMtRE9TIGRpc2tzIGZyb20gVW5peCB3aXRob3V0IG1vdW50aW5nIHRoZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL210b29scy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTkyYjU4ZWM3NzY5Njc4OGNlMjc4YjA0NGQyYThlOWQzIgorUFIgPSAicjYiCisKK1JERVBFTkRTXyR7UE59ID0gImdsaWJjLWdjb252LWlibTg1MCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKwlnbGliYy1nY29udi1pYm00MzcgXAorCWdsaWJjLWdjb252LWlibTczNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzc1IFwKKwlnbGliYy1nY29udi1pYm04NTEgXAorCWdsaWJjLWdjb252LWlibTg1MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODU1IFwKKwlnbGliYy1nY29udi1pYm04NTcgXAorCWdsaWJjLWdjb252LWlibTg2MCBcCisJZ2xpYmMtZ2NvbnYtaWJtODYxIFwKKwlnbGliYy1nY29udi1pYm04NjIgXAorCWdsaWJjLWdjb252LWlibTg2MyBcCisJZ2xpYmMtZ2NvbnYtaWJtODY1IFwKKwlnbGliYy1nY29udi1pYm04NjYgXAorCWdsaWJjLWdjb252LWlibTg2OSBcCisJIgorCisjaHR0cDovL210b29scy5saW51eC5sdS9tdG9vbHMtJHtQVn0udGFyLmd6IAorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbXRvb2xzLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL210b29scy1tYWtlaW5mby5wYXRjaCBcCisJZmlsZTovL210b29scy5wYXRjaCBcCisJZmlsZTovL25vLXgxMS5wYXRjaCBcCisJZmlsZTovL2ZpeC1icm9rZW4tbHoucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2U2OGI4NTdiNGUxZjNhNjUyMWQxZGZlZmJkMzBhMzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWYwODNhNzM0MjVkNjY0ZDQ2MDdlZjZjNjU2NGZkOTMxOWEwZTQ3ZWU3YzEwNTI1OWE0NTM1NmNiODM0NjkwZSIKKworUyA9ICIke1dPUktESVJ9L210b29scy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGliYnNkXSA9ICJhY19jdl9saWJfYnNkX21haW49eWVzLGFjX2N2X2xpYl9ic2RfbWFpbj1ubyxsaWJic2QiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYmluZGlyIHRvIGZpeCBwYXJhbGxlbCBpbnN0YWxsYXRpb24gaXNzdWVzCisgICAgbWtkaXIgLXAgJHtEfS8ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9LyR7ZGF0YWRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkZWNmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIHRvIGFjY2VzcyBNUy1ET1MgZGlza3Mgd2l0aG91dCBtb3VudGluZyB0aGVtIgorREVTQ1JJUFRJT04gPSAiTXRvb2xzIGlzIGEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgdG8gYWNjZXNzIE1TLURPUyBkaXNrcyBmcm9tIEdOVSBhbmQgVW5peCB3aXRob3V0IG1vdW50aW5nIHRoZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL210b29scy8iCitTRUNUSU9OID0gIm9wdGlvbmFsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCisKK1JERVBFTkRTXyR7UE59ID0gImdsaWJjLWdjb252LWlibTg1MCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKwlnbGliYy1nY29udi1pYm00MzcgXAorCWdsaWJjLWdjb252LWlibTczNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzc1IFwKKwlnbGliYy1nY29udi1pYm04NTEgXAorCWdsaWJjLWdjb252LWlibTg1MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODU1IFwKKwlnbGliYy1nY29udi1pYm04NTcgXAorCWdsaWJjLWdjb252LWlibTg2MCBcCisJZ2xpYmMtZ2NvbnYtaWJtODYxIFwKKwlnbGliYy1nY29udi1pYm04NjIgXAorCWdsaWJjLWdjb252LWlibTg2MyBcCisJZ2xpYmMtZ2NvbnYtaWJtODY1IFwKKwlnbGliYy1nY29udi1pYm04NjYgXAorCWdsaWJjLWdjb252LWlibTg2OSBcCisJIgorU1JDX1VSSVttZDVzdW1dID0gImEyMzY0NjYxNzU0NmJmNmFkNTZmMDYxZDhiMjgzYzg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5ZTljZjgwODg1Mzk5YzRmMjI5ZTVkODdlNDljMGMyYmZlZWMwNDRlMTM4NmQ1OWZjZDBiMGFlYWQ2YjJmODUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tdG9vbHMvbXRvb2xzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbXRvb2xzLW1ha2VpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vLXgxMS5ncGx2My5wYXRjaCIKKworCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJic2RdID0gImFjX2N2X2xpYl9ic2RfbWFpbj15ZXMsYWNfY3ZfbGliX2JzZF9tYWluPW5vLGxpYmJzZCIKKworZG9faW5zdGFsbF9wcmVwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBiaW5kaXIgdG8gZml4IHBhcmFsbGVsIGluc3RhbGxhdGlvbiBpc3N1ZXMKKyAgICBta2RpciAtcCAke0R9LyR7YmluZGlyfQorICAgIG1rZGlyIC1wICR7RH0vJHtkYXRhZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMS4wOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDcyNGU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJHZW5lcmFsLXB1cnBvc2UgeDg2IGFzc2VtYmxlciIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTkwOTA0NDg2ZjhmYmYxODYxY2Y0Mjc1MmUxYTM5ZWZlIgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44NikuKi0obGludXh8ZnJlZWJzZC4qKScKKworCitTUkNfVVJJID0gImh0dHA6Ly93d3cubmFzbS51cy9wdWIvbmFzbS9yZWxlYXNlYnVpbGRzLyR7UFZ9L25hc20tJHtQVn0udGFyLmJ6MiAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YWFlNWNiOGUwM2ZhYzQ4MDI5YzgyYTc0NzBhYjA2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGEzYTAyOTFhMGJkYzA2MzA1YjdiYTE5NGYxZTJjMmI1NWFlNmYxMTIxMGI0YWY0MzcyOTg2ODE0OWQ1NDQ1IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgLWYgJHtTfS9hY2xvY2FsLm00IF0gJiYgWyAhIC1mICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuMQorCisJb2VfcnVubWFrZSAnSU5TVEFMTFJPT1Q9JHtEfScgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9maXgtcmVnZXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9maXgtcmVnZXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0MGFmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDU1ZjZmZDhmMTk1OGFhMzY1ODRlZWZlZWNjZTc4MmE1MDU5NjNjODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBiZW52bSA8YmVudm1AeW93LWdtb2ZmYXR0LWx4Mi53cnMuY29tPgorRGF0ZTogV2VkLCA5IEphbiAyMDEzIDEyOjE0OjA2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBNYWtlZmlsZSByZWd1bGFyIGV4cHJlc3Npb24KKworVGhpcyBwYXRjaCBtb2RpZmllcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSBNYWtlZmlsZSB0byBzdG9wIGJ1aWxkcworZnJvbSBmYWlsaW5nIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBwYXRoIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzICIuYSIuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBNYWtlZmlsZS5wcm9nLmluIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJvZy5pbiBiL01ha2VmaWxlLnByb2cuaW4KK2luZGV4IDc2MzEwYzkuLjQ0YzM1MzQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5wcm9nLmluCisrKysgYi9NYWtlZmlsZS5wcm9nLmluCitAQCAtMTIsNyArMTIsNyBAQCBMSU5LRkxBR1MgPSBATElOS0ZMQUdTQAorIAorIEFMTF9MSUJTID0gJChYTElCUykgJChMSUJTKQorIE1ha2VmaWxlLmx0OgorLQllY2hvICdMVF9MSUJTPSdgZWNobyAkKEFMTF9MSUJTKXxzZWQgJ3MvXC5hLy5sYS9nJ2AgPk1ha2VmaWxlLmx0CisrCWVjaG8gJ0xUX0xJQlM9J2BlY2hvICQoQUxMX0xJQlMpIHwgc2VkICdzL1wuYVxzL1wubGEgL2cnIHwgc2VkIHMvXC5hJCQvXC5sYS9gID4gTWFrZWZpbGUubHQKKyAKKyBQUk9HOj0kKHNoZWxsIGVjaG8gIiQoUFJPRykiIHwgc2VkICdAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAnKQorIAorLS0gCisxLjcuMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4YjliNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgbGlidG9vbCBRQSBpc3N1ZXMgd2l0aCBXT1JLRElSIGNyZWVwaW5nIGluIHRvCitsaWJvc3Bncm92ZS5sYSBhbmQgbGlib3N0eWxlLmxhLiBQYXRjaCBvYnRhaW5lZCBmcm9tIE9wZW5FbWJlZGRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1dvcmthcm91bmQgaXMgc3BlY2lmaWMgdG8gb3VyIGJ1aWxkIHN5c3RlbS4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9zcGdyb3ZlL01ha2VmaWxlLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvc3Bncm92ZS9NYWtlZmlsZS5zdWIKKysrKyBvcGVuamFkZS0xLjMuMi9zcGdyb3ZlL01ha2VmaWxlLnN1YgorQEAgLTEsOCArMSw4IEBACisgTFRWRVJTSU9OPTA6MTowCisgTElCPW9zcGdyb3ZlCisgSU5DTFVERT0tSSQoc3JjZGlyKS8uLi9ncm92ZQorLURFUExJQlM9LWxtIC1MJChUT1ApL2dyb3ZlIC1MJChUT1ApL2dyb3ZlLy5saWJzIFwKKy0JLUwkKFRPUCkvbGliIC1MJChUT1ApL2xpYi8ubGlicyBcCisrREVQTElCUz0tbG0gJChUT1ApL2dyb3ZlIFwKKysJJChUT1ApL2xpYiBcCisgCSQoTElCX1RIUkVBRFMpCisgT0JKUz1Hcm92ZUFwcC5vIEdyb3ZlQnVpbGRlci5vIFNkTm9kZS5vCisgR0VOU1JDUz1ncm92ZV9pbnN0LmN4eAorSW5kZXg6IG9wZW5qYWRlLTEuMy4yL3N0eWxlL01ha2VmaWxlLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvc3R5bGUvTWFrZWZpbGUuc3ViCisrKysgb3BlbmphZGUtMS4zLjIvc3R5bGUvTWFrZWZpbGUuc3ViCitAQCAtMSw4ICsxLDggQEAKKyBMVFZFUlNJT049MDoxOjAKKyBMSUI9b3N0eWxlCistREVQTElCUz0tbG0gLUwkKFRPUCkvZ3JvdmUgLUwkKFRPUCkvZ3JvdmUvLmxpYnMgXAorLSAgLUwkKFRPUCkvbGliIC1MJChUT1ApL2xpYi8ubGlicyBcCistICAtTCQoVE9QKS9zcGdyb3ZlIC1MJChUT1ApL3NwZ3JvdmUvLmxpYnMgCisrREVQTElCUz0tbG0gJChUT1ApL2dyb3ZlIFwKKysgICQoVE9QKS9saWIgIFwKKysgICQoVE9QKS9zcGdyb3ZlCisgT0JKUz1MYW5nT2JqLm8gXAorICAgQ29sbGVjdG9yLm8gXAorICAgRHNzc2xBcHAubyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tc2dnZW4ucGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tc2dnZW4ucGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitjb21taXQgZmNjNWI5NGYxMTg0OTViMWE0NjdlZGNkYTZjNmY2MzE2OTFjM2Y2OQorQXV0aG9yOiBEZW5uaXMgTGFuIDxkZW5uaXMueXh1bkBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMyAwOToyNTo0MiAyMDEyICswODAwCisKKyAgICBvcGVuamFkZTogZml4IHVuZGVmaW5lZCBHZXRvcHRzIGVycm9yLCB1c2Ugc3RkIG5hbWVzcGFjZQorICAgIAorICAgIFVzaW5nIEdlbnRvbyBMaW51eCBhcyB0aGUgYnVpbGQgaG9zdCwgaXQgZmFpbHMgd2l0aG91dCB0aGlzIHBhdGNoCisgICAgVXNlIEdldG9wdDo6U3RkIGluIHBsYWNlIG9mIGdldG9wdHMucGwuCisgICAgCisgICAgVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyB1cHN0cmVhbV0KKyAgICBPcmlnaW5hbC1BdXRob3ItQnk6IE1pa2UgR2lsYmVydCA8ZmxvcHB5bUBnZW50b28ub3JnPgorICAgIFNpZ25lZC1vZmYtYnk6IERlbm5pcyBMYW4gPGRlbm5pcy55eHVuQGdtYWlsLmNvbT4KKworZGlmZiAtLWdpdCBhL21zZ2dlbi5wbCBiL21zZ2dlbi5wbAoraW5kZXggMGMzMzk2OC4uMmVlM2Y2NiAxMDA2NDQKKy0tLSBhL21zZ2dlbi5wbAorKysrIGIvbXNnZ2VuLnBsCitAQCAtNCw2ICs0LDcgQEAKKyAjIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisgCisgdXNlIFBPU0lYOworK3VzZSBHZXRvcHQ6OlN0ZDsKKyAKKyAjIFBhY2thZ2UgYW5kIHZlcnNpb24uCisgJHBhY2thZ2UgPSAnb3BlbmphZGUnOworQEAgLTE4LDggKzE5LDcgQEAgJGdlbl9jID0gMDsKKyB1bmRlZiAkb3B0X2w7CisgdW5kZWYgJG9wdF9wOworIHVuZGVmICRvcHRfdDsKKy1kbyAnZ2V0b3B0cy5wbCc7CistJkdldG9wdHMoJ2w6cDp0OicpOworK2dldG9wdHMoJ2w6cDp0OicpOworICRtb2R1bGUgPSAkb3B0X2w7CisgJHBvdF9maWxlID0gJG9wdF9wOworIAorQEAgLTcyLDcgKzcyLDcgQEAgd2hpbGUgKDxERUY+KSB7CisgICAgIGVsc2UgeworIAkkZmllbGRbMF0gPX4gL15bSVdRWEVdWzAtOV0kLyB8fCAmZXJyb3IoImludmFsaWQgZmlyc3QgZmllbGQiKTs7CisgCSR0eXBlWyRudW1dID0gc3Vic3RyKCRmaWVsZFswXSwgMCwgMSk7CistCSRhcmdjID0gaW50KHN1YnN0cigkZmllbGRbMF0sIDEsIDEpKTsKKysJJGFyZ2MgPSBzdWJzdHIoJGZpZWxkWzBdLCAxLCAxKTsKKyAgICAgfQorICAgICAkbmFyZ3NbJG51bV0gPSAkYXJnYzsKKyAgICAgJGZpZWxkWzFdID1+IC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKyQvIHx8ICZlcnJvcigiaW52YWxpZCB0YWciKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3JlYXV0b2NvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjNhNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK0Vuc3VyZSB3ZSByZWF1dG9jb25mIHRoZSBwYWNrYWcKKworQ3VycmVudGx5IHNpbmNlIGNvbmZpZ3VyZS5pbiBpbiBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgd2UgZG9uJ3QgcmVhdXRvY29uZiB0aGUgCityZWNpcGUuIFdlIHJlYWxseSBuZWVkIHRvIGRvIHRoaXMsIHRvIHVwZGF0ZSB0aGluZ3MgbGlrZSB0aGUgbGlidG9vbCBzY3JpcHQgdXNlZAorYW5kIGZpeCB2YXJpb3VzIGlzc3VlcyBzdWNoIGFzIHRob3NlIHRoYXQgY291bGQgY3JlZXAgaW4gaWYgYSByZWF1dG9jb25mIGlzIAordHJpZ2dlcmVkIGZvciBzb21lIHJlYXNvbi4gU2luY2UgdGhpcyBzb3VyY2Ugb25seSBjYWxscyBBTV9JTklUX0FVVE9NQUtFIHRvIAorZ2FpbiB0aGUgUEFDS0FHRSBhbmQgVkVSU0lPTiBkZWZpbml0aW9ucyBhbmQgdGhhdCBtYWNybyBub3cgZXJyb3JzIGlmIE1ha2VmaWxlLmFtIAorZG9lc24ndCBleGlzdCwgd2UgbmVlZCB0byBhZGQgdGhlc2UgZGVmaW5pdGlvbnMgbWFudWFsbHkuIAorCitUaGVzZSBjaGFuZ2VzIGF2b2lkIGZhaWx1cmVzIGxpa2U6IAorLS0tLSAKK3wgLi4uIAorfCBEc3NzbEFwcC5jeHg6MTE3OjM2OiBlcnJvcjogJ1BBQ0tBR0UnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZSAKK3wgRHNzc2xBcHAuY3h4OjExODozNjogZXJyb3I6ICdWRVJTSU9OJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUgCit8IG1ha2VbMl06ICoqKiBbRHNzc2xBcHAubG9dIEVycm9yIDEgLS0tLQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMi82LzEyCisKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuamFkZS0xLjMuMi9hY2luY2x1ZGUubTQJMjAxMi0wNi0xMiAxMjo0ODo1NC44NzEzNjUzNDQgKzAwMDAKK0BAIC0wLDAgKzEsMzkgQEAKKytkbmwgQ29uZmlndXJlLXRpbWUgc3dpdGNoIHdpdGggZGVmYXVsdAorK2RubAorK2RubCBFYWNoIHN3aXRjaCBkZWZpbmVzIGFuIC0tZW5hYmxlLUZPTyBhbmQgLS1kaXNhYmxlLUZPTyBvcHRpb24gaW4KKytkbmwgdGhlIHJlc3VsdGluZyBjb25maWd1cmUgc2NyaXB0LgorK2RubAorK2RubCBVc2FnZToKKytkbmwgc21yX1NXSVRDSChuYW1lLCBkZXNjcmlwdGlvbiwgZGVmYXVsdCwgcG9zLWRlZiwgbmVnLWRlZikKKytkbmwKKytkbmwgd2hlcmU6CisrZG5sCisrZG5sIG5hbWUgICAgICAgIG5hbWUgb2Ygc3dpdGNoOyBnZW5lcmF0ZXMgLS1lbmFibGUtbmFtZSAmIC0tZGlzYWJsZS1uYW1lCisrZG5sICAgICAgICAgICAgIG9wdGlvbnMKKytkbmwgZGVzY3JpcHRpb24gaGVscCBzdHJpbmcgaXMgc2V0IHRvIHRoaXMgcHJlZml4ZWQgYnkgImVuYWJsZSIgb3IKKytkbmwgICAgICAgICAgICAgImRpc2FibGUiLCB3aGljaGV2ZXIgaXMgdGhlIG5vbi1kZWZhdWx0IHZhbHVlCisrZG5sIGRlZmF1bHQgICAgIGVpdGhlciAib24iIG9yICJvZmYiOyBzcGVjaWZpZXMgZGVmYXVsdCBpZiBuZWl0aGVyCisrZG5sICAgICAgICAgICAgIC0tZW5hYmxlLW5hbWUgbm9yIC0tZGlzYWJsZS1uYW1lIGlzIHNwZWNpZmllZAorK2RubCBwb3MtZGVmICAgICBhIHN5bWJvbCB0byBBQ19ERUZJTkUgaWYgc3dpdGNoIGlzIG9uIChvcHRpb25hbCkKKytkbmwgbmVnLWRlZiAgICAgYSBzeW1ib2wgdG8gQUNfREVGSU5FIGlmIHN3aXRjaCBpcyBvZmYgKG9wdGlvbmFsKQorK2RubAorK0FDX0RFRlVOKHNtcl9TV0lUQ0gsIFsKKysgICAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gZW5hYmxlICQyKQorKyAgICBBQ19BUkdfRU5BQkxFKAorKyAgICAgICAgJDEsCisrICAgICAgICBpZmVsc2UoJDMsIG9uLAorKyAgICAgICAgICAgIFsgIC0tZGlzYWJsZS1bJDFdICAgIGRpc2FibGUgWyQyXV0sCisrICAgICAgICAgICAgWyAgLS1lbmFibGUtWyQxXSAgICAgZW5hYmxlIFskMl1dKSwKKysgICAgICAgIFsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgICBpZmVsc2UoJDQsICwgLCBBQ19ERUZJTkUoJDQpKQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisrICAgICAgICAgICAgaWZlbHNlKCQ1LCAsICwgQUNfREVGSU5FKCQ1KSkKKysgICAgICAgIGZpIF0sCisrICAgICAgICBpZmVsc2UoJDMsIG9uLAorKyAgICAgICAgICAgWyBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgICAgaWZlbHNlKCQ0LCAsICwgQUNfREVGSU5FKCQ0KSkgXSwKKysgICAgICAgICAgIFsgQUNfTVNHX1JFU1VMVChubykKKysgICAgICAgICAgICBpZmVsc2UoJDUsICwgLCBBQ19ERUZJTkUoJDUpKV0pKV0pCisrCitJbmRleDogb3BlbmphZGUtMS4zLjIvY29uZmlnL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvY29uZmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTA2LTEyIDEyOjQ3OjIwLjczNTM2NTQ0NSArMDAwMAorKysrIG9wZW5qYWRlLTEuMy4yL2NvbmZpZy9jb25maWd1cmUuaW4JMjAxMi0wNi0xMiAxMjo0ODoxNy41MDczNjQwODAgKzAwMDAKK0BAIC0xMiw5ICsxMiwxMiBAQAorIGRubCAgQ3JlZGl0czogdGhpcyBhdXRvY29uZiBzY3JpcHQgd2FzIGxhcmdlbHkgImluc3BpcmVkIiA8Zz4gYnkgdGhlCisgZG5sICBhdXRvY29uZiBzY3JpcHQgYXJvdW5kIFNQIG1hZGUgYnkgSGVucnkgVGhvbXBzb24uCisgZG5sCistQUNfSU5JVChkc3NzbCkKKytBQ19JTklUKFtvcGVuamFkZV0sIFsxLjMuMl0pCisgQUNfQ09ORklHX0FVWF9ESVIoY29uZmlnKQorLUFNX0lOSVRfQVVUT01BS0UoIG9wZW5qYWRlLCAxLjMuMikKKytBQ19TVUJTVChbUEFDS0FHRV0sIFtvcGVuamFkZV0pCisrQUNfU1VCU1QoW1ZFUlNJT05dLCBbMS4zLjJdKQorK0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiKQorK0FDX0RFRklORV9VTlFVT1RFRChWRVJTSU9OLCAiJFZFUlNJT04iKQorIFRPUD1gcHdkYAorIEFDX1NVQlNUKFRPUCkKKyBkbmwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3VzZXItZGVjbGFyZWQtZGVmYXVsdC1jb25zdHJ1Y3Rvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3VzZXItZGVjbGFyZWQtZGVmYXVsdC1jb25zdHJ1Y3Rvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNhZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK0luIEdDQyA0LjYgdGhlIGNvbXBpbGVyIG5vIGxvbmdlciBhbGxvd3Mgb2JqZWN0cyBvZiBjb25zdC1xdWFsaWZpZWQgdHlwZSB0bworYmUgZGVmYXVsdCBpbml0aWFsaXplZCB1bmxlc3MgdGhlIHR5cGUgaGFzIGEgdXNlci1kZWNsYXJlZCBkZWZhdWx0Citjb25zdHJ1Y3Rvci4KKworUGF0Y2ggZnJvbSBHZW50b28gYnVnemlsbGE6IGh0dHA6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTM1ODAyMQorCitHZW50b28gQnVnemlsbGEgZGVzY3JpcHRpb24gZm9sbG93czoKKyJJZiBhIGNsYXNzIG9yIHN0cnVjdCBoYXMgbm8gdXNlci1kZWZpbmVkIGRlZmF1bHQgY29uc3RydWN0b3IsIEMrKyBkb2Vzbid0CithbGxvdyB5b3UgdG8gZGVmYXVsdCBjb25zdHJ1Y3QgYSBjb25zdCBpbnN0YW5jZSBvZiBpdC4KKworaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvMzU4MDIxCitodHRwOi8vY2xhbmcubGx2bS5vcmcvY29tcGF0aWJpbGl0eS5odG1sI2RlZmF1bHRfaW5pdF9jb25zdAoraHR0cDovL2djYy5nbnUub3JnL1BSNDQ0OTkiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGEvamFkZS9UZVhGT1RCdWlsZGVyLmN4eAorKysrIGIvamFkZS9UZVhGT1RCdWlsZGVyLmN4eAorQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgorICAgICAgIHZhbHVlLmNvbnZlcnRTdHJpbmcobmljXy5wbGFjZW1lbnQpOworICAgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBQYWdlRmxvYXRGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBQYWdlRmxvYXRGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIFBhZ2VGbG9hdE5JQyBuaWNfOworICAgICBTdHJpbmdDIG5hbWVfOworQEAgLTEwMSw2ICsxMDMsOCBAQCBwdWJsaWM6CisgICAgICAgZm90Yi5lbmRQYWdlRm9vdG5vdGUoKTsKKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IFBhZ2VGb290bm90ZUZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIFBhZ2VGb290bm90ZUZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgIH07CisgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistLS0gYS9qYWRlL1RyYW5zZm9ybUZPVEJ1aWxkZXIuY3h4CisrKysgYi9qYWRlL1RyYW5zZm9ybUZPVEJ1aWxkZXIuY3h4CitAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CisgICB9OworICAgY2xhc3MgRW50aXR5UmVmRmxvd09iaiA6IHB1YmxpYyBUcmFuc2Zvcm1FeHRlbnNpb25GbG93T2JqIHsKKyAgIHB1YmxpYzoKKysgICAgRW50aXR5UmVmRmxvd09iaigpIHt9CisgICAgIHZvaWQgYXRvbWljKFRyYW5zZm9ybUZPVEJ1aWxkZXIgJmZvdGIsIGNvbnN0IE5vZGVQdHIgJikgY29uc3QgeworICAgICAgIGZvdGIuZW50aXR5UmVmKG5hbWVfKTsKKyAgICAgfQorQEAgLTU2LDYgKzU3LDcgQEAgcHVibGljOgorICAgfTsKKyAgIGNsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkZsb3dPYmogOiBwdWJsaWMgVHJhbnNmb3JtRXh0ZW5zaW9uRmxvd09iaiB7CisgICBwdWJsaWM6CisrICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkZsb3dPYmooKSB7fQorICAgICB2b2lkIGF0b21pYyhUcmFuc2Zvcm1GT1RCdWlsZGVyICZmb3RiLCBjb25zdCBOb2RlUHRyICYpIGNvbnN0IHsKKyAgICAgICBmb3RiLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihkYXRhXyk7CisgICAgIH0KK0BAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CisgICAgICAgfQorICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRW1wdHlFbGVtZW50Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgRW1wdHlFbGVtZW50Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBFbGVtZW50TklDIG5pY187CisgICB9OworQEAgLTEzMyw2ICsxMzcsOCBAQCBwdWJsaWM6CisgICAgICAgfQorICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRWxlbWVudEZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIEVsZW1lbnRGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIEVsZW1lbnROSUMgbmljXzsKKyAgIH07CitAQCAtMTUwLDYgKzE1Niw4IEBAIHB1YmxpYzoKKyAgICAgICB2YWx1ZS5jb252ZXJ0U3RyaW5nKHN5c3RlbUlkXyk7CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBFbnRpdHlGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBFbnRpdHlGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIFN0cmluZ0Mgc3lzdGVtSWRfOworICAgfTsKK0BAIC0xNzQsNiArMTgyLDggQEAgcHVibGljOgorICAgICAgIH0KKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IERvY3VtZW50VHlwZUZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIERvY3VtZW50VHlwZUZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgRG9jdW1lbnRUeXBlTklDIG5pY187CisgICB9OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtbmF0aXZlXzEuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtbmF0aXZlXzEuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2FhNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKQEAgLTAsMCArMSwxMDggQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCBEU1NTTCBzdHlsZXNoZWV0cyBmb3IgU0dNTCBhbmQgWE1MIGRvY3VtZW50cyIKK0RFU0NSSVBUSU9OID0gIk9wZW5KYWRlIGlzIGEgc3VpdGUgb2YgdG9vbHMgZm9yIHZhbGlkYXRpbmcsIFwKK3Byb2Nlc3NpbmcsIGFuZCBhcHBseWluZyBEU1NTTCAoRG9jdW1lbnQgU3R5bGUgU2VtYW50aWNzIGFuZCBcCitTcGVjaWZpY2F0aW9uIExhbmd1YWdlKSBzdHlsZXNoZWV0cyB0byBTR01MIGFuZCBYTUwgZG9jdW1lbnRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY0MWZmMWU0NTExZjBhODcwNDRhZDQyZjg3Y2IxMDQ1IgorCitQUiA9ICJyNSIKKworREVQRU5EUyA9ICJvcGVuc3AtbmF0aXZlIHNnbWwtY29tbW9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInNnbWwtY29tbW9uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb3BlbmphZGUvb3BlbmphZGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21zZ2dlbi5wbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWF1dG9jb25mLnBhdGNoIFwKKwkgICBmaWxlOi8vdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1yZWdleC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkZjY5MmUzMTg2MTA5Y2MwMGRiNjgyNWI3NzcyMDFlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFkMmQ3OTk2Y2M5NGY5Yjg3ZDBjNTFjZjBlMDI4MDcwYWMxNzdjNDEyM2VjYmZkN2FjMWNiOGQwYjdkMzIyZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBuYXRpdmUKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNwaW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfS9PcGVuU1AgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNwbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9IgorCisjIFdlIG5lZWQgdG8gc2V0IGRhdGFkaXIgZXhwbGljaXRseSwgYnV0IGFkZGluZyBpdCB0byBFWFRSQV9PRUNPTkYKKyMgcmVzdWx0cyBpbiBpdCBiZWluZyBzcGVjaWZpZWQgdHdpY2Ugd2hlbiBjb25maWd1cmUgaXMgcnVuLgorQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRhdGFkaXI9JHtkYXRhZGlyfScsICctLWRhdGFkaXI9JHtTVEFHSU5HX0RBVEFESVJ9L3NnbWwvb3BlbmphZGUtJHtQVn0nKX0iCisKKyMgQ09ORklHVVJFT1BUUyBoYXMgaGFyZCBjb2RlZCBwYXRocyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdCdzIHZhcmRlcHMKKyMgdGhlcmUgYXJlIG90aGVyIGJpdHMgaW4gdGhlcmUgdG9vIGJ1dCB0aGV5IGFyZSBwaWNrZWQgdXAgYnkgb3RoZXIgdmFyaWFibGUKKyMgZGVwZW5kZW5jaWVzIHNvIGl0IGFsbCB3b3JrcyBvdXQKK29lX3J1bmNvbmZbdmFyZGVwc2V4Y2x1ZGVdICs9ICJDT05GSUdVUkVPUFRTIgorCitDRkxBR1MgPSsgIi1JJHtTfS9pbmNsdWRlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJvcGVuamFkZV9zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gIm9wZW5qYWRlX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK0NMRUFORlVOQ1MgKz0gIm9wZW5qYWRlX3NzdGF0ZV9jbGVhbiIKKworIyBjb25maWd1cmUuaW4gbmVlZHMgdG8gYmUgcmVsb2FjdGVkIHRvIHRyaWdnZXIgcmVhdXRvY29uZgorZG9fZXh0cmF1bnBhY2sgKCkgeworCWNwICR7U30vY29uZmlnL2NvbmZpZ3VyZS5pbiAke1N9LworfQorYWRkdGFzayBleHRyYXVucGFjayBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKKyMgV2UgbmVlZCB0byBkbyB0aGlzIGVsc2UgdGhlIHNvdXJjZSBpbnRlcmRlcGVuZGVuY2llcyBhcmVuJ3QgZ2VuZXJhdGVkIGFuZAorIyBidWlsZCBmYWlsdXJlcyBjYW4gcmVzdWx0IChlLmcuIHplcm8gc2l6ZSBzdHlsZS9NYWtlZmlsZS5kZXAgZmlsZSkKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJb2VfcnVubWFrZSBkZXBlbmQKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvb3BlbmphZGUuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CQorCWluc3RhbGwgLW0gMDc1NSAke1N9L2phZGUvLmxpYnMvb3BlbmphZGUgJHtEfSR7YmluZGlyfS9vcGVuamFkZQorCWxuIC1zZiBvcGVuamFkZSAke0R9JHtiaW5kaXJ9L2phZGUKKworCW9lX2xpYmluc3RhbGwgLWEgLXNvIC1DIHN0eWxlIGxpYm9zdHlsZSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtYSAtc28gLUMgc3Bncm92ZSBsaWJvc3Bncm92ZSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtYSAtc28gLUMgZ3JvdmUgbGlib2dyb3ZlICR7RH0ke2xpYmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsL2NhdGFsb2cgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsLyouZHRkICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC8qLmRzbCAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvKi5zZ20gJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCisJaW5zdGFsbCAtZCAke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC9jYXRhbG9nICR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS9jYXRhbG9nCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS9jYXRhbG9nIiA+IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS5jYXQKK30KKworb3BlbmphZGVfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUgXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9LmNhdAorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0uY2F0CisJZmkKK30KKworb3BlbmphZGVfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZQorfQorCitvcGVuamFkZV9zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCisJZm9yIGYgaW4gJGZpbGVzOyBkbworCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL29wZW5qYWRlLSR7UFZ9LmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3AtMS41LjIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcC0xLjUuMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyMThhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3AtMS41LjIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MzU5OTI5MSZncm91cF9pZD0yMTE1JmF0aWQ9MTAyMTE1XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluIE9wZW5TUC0xLjUuMi9jb25maWd1cmUuaW4KKy0tLSBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluCTIwMDUtMTItMjMgMTY6MTU6MjEuMDAwMDAwMDAwICswMjAwCisrKysgT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbgkyMDEzLTAxLTAzIDA5OjA0OjUxLjkyMjY0NTY4OSArMDIwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBBTV9JTklUX0FVVE9NQUtFKE9wZW5TUCwgMS41LjIsIG5vLWRlZmluZSkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyBBQ19QUkVSRVEoMi41MykKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorIEFNX1NBTklUWV9DSEVDSworCisgZG5sIEF1dG9oZWFkZXIgZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3BfMS41LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZjExNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiQW4gU0dNTCBwYXJzZXIiCitERVNDUklQVElPTiA9ICJBbiBTR01MIHBhcnNlciB1c2VkIGJ5IHRoZSBPcGVuSmFkZSBzdWl0ZSBvZiB1dGlsaXRpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5qYWRlLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjQxZmYxZTQ1MTFmMGE4NzA0NGFkNDJmODdjYjEwNDUiCisKK1BSID0gInIxIgorCisjIEF0IC1PcyBpdCBlbmNvdW50ZXJzIGNhbGxzIHRvIHNvbWUgaW5saW5lIGZ1bmN0aW9ucyB3aGljaCBhcmUgdGhlbgorIyBub3QgZm91bmQgaW4gYW55IG90aGVyIG9iamVjdHMgd2l0aCBnY2MgNC41CitGVUxMX09QVElNSVpBVElPTiArPSAiLU8yIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9vcGVuamFkZS9PcGVuU1AtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NzBiMjIzYzVkMTJjZWU0MGM5MTM3YmU4NmI2YzM5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1N2Y0ODk4NDk4YTM2ODkxOGIwZDQ5YzgyNmFhNDM0YmI1YjcwM2QyYzNiMTY5YmViMzQ4MDE2YWIyNTYxN2NlIgorCitTID0gIiR7V09SS0RJUn0vT3BlblNQLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jLWJ1aWxkIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIlwKKwktLWRpc2FibGUtZG9jLWJ1aWxkIFwKKwktLWVuYWJsZS1kZWZhdWx0LWNhdGFsb2c9JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cgXAorCS0tZW5hYmxlLWRlZmF1bHQtc2VhcmNoLXBhdGg9JHtkYXRhZGlyfS9zZ21sIFwKKwkiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgU2V0IHVwIHN5bWxpbmtzIHRvIG9mdGVuLXVzZWQgYWx0ZXJuYXRlIG5hbWVzLiBTZWUKKwkjIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvb3BlbnNwLmh0bWwKKwljZCAke0R9JHtsaWJkaXJ9CisJbG4gLXNmIGxpYm9zcC5zbyBsaWJzcC5zbworCisJY2QgJHtEfSR7YmluZGlyfQorCWZvciB1dGlsIGluIG5zZ21scyBzZ21sbm9ybSBzcGFtIHNwY2F0IHNwZW50IHN4OyBkbworCQlsbiAtc2YgbyR1dGlsICR1dGlsCQorCWRvbmUKKwlsbiAtc2Ygb3N4IHNnbWwyeG1sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlmb3IgdXRpbCBpbiBuc2dtbHMgc2dtbG5vcm0gc3BhbSBzcGNhdCBzcGVudCBzeDsgZG8KKwkJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS8kdXRpbCBcCisJCSAgICAtRCAke3N5c2NvbmZkaXJ9L3NnbWwKKwlkb25lCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L09wZW5TUC8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvdGFyX2lnbm9yZV9lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRkYjA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorSWYgYSB0aGUgbnVtYmVyIG9mIGhhcmQgbGlua3MgZGVjcmVhc2VzIG9yIGluY3JlYXNlcyB3aGlsZSBjcmVhdGluZwordGhlIHRhciBmaWxlcyB1c2VkIGZvciBhbiBpcGsgcGFja2FnZSwgdGFyIGZhaWxzIHdpdGggZXJyb3IgY29kZSAxOgorCit8IERFQlVHOiBFeGVjdXRpbmcgcHl0aG9uIGZ1bmN0aW9uIGRvX3BhY2thZ2VfaXBrCit8IHRhcjogLi91c3Ivc3JjL2RlYnVnL2dwZXJmLzMuMC40LXIwL2dwZXJmLTMuMC40L3NyYy9tYWluLmNjOiBmaWxlIGNoYW5nZWQgYXMgd2UgcmVhZCBpdAorTk9URTogcmVjaXBlIGdwZXJmLTMuMC40LXIwOiB0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrOiBGYWlsZWQKK0VSUk9SOiBUYXNrIDY1MzkgKHJlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjQuYmIsIGRvX3BhY2thZ2Vfd3JpdGVfaXBrKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJzEnCisKKworV2UgZGV0ZWN0IGlmIHRoZSBlcnJvciBjb2RlIHByb2R1Y2VkIGJ5IHRhciBpcyAxIGFuZCBpbiB0aGlzIGNhc2UgaWdub3JlIGl0LgorCitUaGlzIGEgc2ltaWxhciBiZWhhdmlvciB0byB0aGUgb25lIG9uIGRwa2c6CitodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2NvbW1pdC8/aWQ9NDA3MzE5NDI1MTVlYzhkODBjNzI3YWQ1NjExNzQ5ODZkNGYwNTgxOAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGdpdC9vcGtnLWJ1aWxkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvb3BrZy1idWlsZAorKysrIGdpdC9vcGtnLWJ1aWxkCitAQCAtMjUwLDggKzI1MCwyMSBAQCB0bXBfZGlyPSRkZXN0X2Rpci9JUEtHX0JVSUxELiQkCisgbWtkaXIgJHRtcF9kaXIKKyAKKyBlY2hvICRDT05UUk9MID4gJHRtcF9kaXIvdGFyWAorLSggY2QgJHBrZ19kaXIgJiYgdGFyICRvZ2FyZ3MgLVggJHRtcF9kaXIvdGFyWCAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9kYXRhLnRhci5neiAuICkKKy0oIGNkICRwa2dfZGlyLyRDT05UUk9MICYmIHRhciAkb2dhcmdzIC1jeiAkdGFyZm9ybWF0IC1mICR0bXBfZGlyL2NvbnRyb2wudGFyLmd6IC4gKQorKworKworKyMgSWdub3JlIGVycm9yIGNvZGUgMSwgY2F1c2VkIGJ5IG1vZGlmeWluZyB0aGUgbnVtYmVyIG9mIGhhcmQgbGlua3Mgd2hpbGUgY3JlYXRpbmcgdGhlIHRhciBmaWxlCisrcmM9MAorKyggY2QgJHBrZ19kaXIgJiYgdGFyICRvZ2FyZ3MgLVggJHRtcF9kaXIvdGFyWCAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9kYXRhLnRhci5neiAuICkgfHwgcmM9JD8KKytpZiBbICRyYyAtbmUgMSBdICYmIFsgJHJjIC1uZSAwIF07IHRoZW4KKysgICAgICAgIGV4aXQgJHJjIAorK2ZpCisrCisrcmM9MAorKyggY2QgJHBrZ19kaXIvJENPTlRST0wgJiYgdGFyICRvZ2FyZ3MgLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvY29udHJvbC50YXIuZ3ogLiApIHx8IHJjPSQ/CisraWYgWyAkcmMgLW5lIDEgXSAmJiBbICRyYyAtbmUgMCBdOyB0aGVuCisrICAgICAgICBleGl0ICRyYworK2ZpCisrCisgcm0gJHRtcF9kaXIvdGFyWAorIAorIGVjaG8gIjIuMCIgPiAkdG1wX2Rpci9kZWJpYW4tYmluYXJ5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjUxOGQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkFkZGl0aW9uYWwgdXRpbGl0aWVzIGZvciB0aGUgb3BrZyBwYWNrYWdlIG1hbmFnZXIiCitTVU1NQVJZX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJVdGlsaXR5IGZvciBtYW5hZ2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb3BrZy5weTtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT0xNTkxNzQ5MWFkNmJmN2FjYzY2NmNhNWY3Y2MxZTA4MyIKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1NSQ1JFViA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgorUFYgPSAiMC4xLjgrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vdGFyX2lnbm9yZV9lcnJvci5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK1BZVEhPTlJERVBTID0gInB5dGhvbiBweXRob24tc2hlbGwgcHl0aG9uLWlvIHB5dGhvbi1tYXRoIHB5dGhvbi1jcnlwdCBweXRob24tbG9nZ2luZyBweXRob24tZmNudGwgcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLXBpY2tsZSBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLXRleHR1dGlscyBweXRob24tc3RyaW5nb2xkIgorUFlUSE9OUkRFUFNfY2xhc3MtbmF0aXZlID0gIiIKKworUEFDS0FHRUNPTkZJRyA9ICJweXRob24iCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLCwsJHtQWVRIT05SREVQU30iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKwlzZWQgLWkgJHtEfSR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIC1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnOyBzLC91c3IvbGliLCR7bGliZGlyfSxnJworfQorCitQQUNLQUdFUyA9KyAidXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnIgorRklMRVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gIiR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIgorUlBST1ZJREVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorUlJFUExBQ0VTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKK1JDT05GTElDVFNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2ctYXJjaC1jb25maWdfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2UzZGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgY29uZmlndXJhdGlvbiBmb3Igb3BrZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorUFIgPSAicjEiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKKwlta2RpciAtcCAke1N9LyR7c3lzY29uZmRpcn0vb3BrZy8KKworCWFyY2hjb25mPSR7U30vJHtzeXNjb25mZGlyfS9vcGtnL2FyY2guY29uZgorCisJcm0gLWYgJGFyY2hjb25mCisJaXBrZ2FyY2hzPSIke0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTfSIKKwlwcmlvcml0eT0xCisJZm9yIGFyY2ggaW4gJGlwa2dhcmNoczsgZG8gCisJCWVjaG8gImFyY2ggJGFyY2ggJHByaW9yaXR5IiA+PiAkYXJjaGNvbmYKKwkJcHJpb3JpdHk9JChleHByICRwcmlvcml0eSArIDUpCisJZG9uZQorfQorCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vb3BrZworCWluc3RhbGwgLW0gMDY0NCAgJHtTfS8ke3N5c2NvbmZkaXJ9L29wa2cvKiAke0R9JHtzeXNjb25mZGlyfS9vcGtnLworfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvICIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L29wa2cvYXJjaC5jb25mIgorCitSUkVQTEFDRVNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKK1JDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKK1JQUk9WSURFU18ke1BOfSA9ICJvcGtnLWNvbmZpZy1iYXNlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWtleXJpbmdzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkNmFiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJLZXlyaW5ncyBmb3IgdmVyaWZ5aW5nIG9wa2cgcGFja2FnZXMgYW5kIGZlZWRzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworIyBEaXN0cm8tc3BlY2lmaWMga2V5cyBjYW4gYmUgYWRkZWQgdG8gdGhpcyBwYWNrYWdlIGluIHR3byB3YXlzOgorIworIyAgIDEpIEluIGEgLmJiYXBwZW5kLCBhZGQgLmdwZyBhbmQvb3IgLmFzYyBmaWxlcyB0byBTUkNfVVJJIGFuZCBpbnN0YWxsIHRoZW0gdG8KKyMgICAgICAke0R9JHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzLyBpbiBhIGRvX2luc3RhbGxfYXBwZW5kIGZ1bmN0aW9uLiBUaGVzZQorIyAgICAgIGZpbGVzIHNob3VsZCBub3QgYmUgbmFtZWQgJ2tleS0kbmFtZS5ncGcnIHRvIGVuc3VyZSB0aGV5IGRvbid0IGNvbmZsaWN0CisjICAgICAgd2l0aCBrZXlzIGV4cG9ydGVkIGFzIHBlciAoMikuCisjCisjICAgMikgSW4gYSAuYmJhcHBlbmQsIGRpc3RybyBjb25maWcgb3IgbG9jYWwuY29uZiwgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlCisjICAgICAgT1BLR19LRVlSSU5HX0tFWVMgdG8gY29udGFpbiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGtleSBuYW1lcy4gRm9yCisjICAgICAgZWFjaCBuYW1lLCAnZ3BnIC0tZXhwb3J0ICRuYW1lJyB3aWxsIGJlIHJhbiB0byBleHBvcnQgdGhlIHB1YmxpYyBrZXkgdG8gYQorIyAgICAgIGZpbGUgbmFtZWQgJ2tleS0kbmFtZS5ncGcnLiBUaGUgcHVibGljIGtleSBtdXN0IHRoZXJlZm9yZSBiZSBpbiB0aGUgZ3BnCisjICAgICAga2V5cmluZ3Mgb24gdGhlIGJ1aWxkIG1hY2hpbmUuCisKK09QS0dfS0VZUklOR19LRVlTID89ICIiCisKK2RvX2NvbXBpbGUoKSB7CisgICAgZm9yIG5hbWUgaW4gJHtPUEtHX0tFWVJJTkdfS0VZU307IGRvCisgICAgICAgIGdwZyAtLWV4cG9ydCAke25hbWV9ID4gJHtCfS9rZXktJHtuYW1lfS5ncGcKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vb3BrZy9rZXlyaW5ncy8KKyAgICBmb3IgbmFtZSBpbiAke09QS0dfS0VZUklOR19LRVlTfTsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7Qn0va2V5LSR7bmFtZX0uZ3BnICR7RH0ke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MvCisgICAgZG9uZQorfQorCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MiCisKKyMgV2UgbmVlZCAnb3BrZy1rZXknIHRvIHJ1biB0aGUgcG9zdGluc3Qgc2NyaXB0CitSREVQRU5EU18ke1BOfSA9ICJvcGtnIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworIyEgL2Jpbi9zaAorc2V0IC1lCisKK2lmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICMgT24gdGFyZ2V0CisgICAgb3BrZy1rZXkgcG9wdWxhdGUKK2Vsc2UKKyAgICBleGl0IDEKK2ZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvMDAwMS1vcGtnX2FyY2hpdmUtYWRkLXN1cHBvcnQtZm9yLWVtcHR5LWNvbXByZXNzZWQtZmlsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvMDAwMS1vcGtnX2FyY2hpdmUtYWRkLXN1cHBvcnQtZm9yLWVtcHR5LWNvbXByZXNzZWQtZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiZDE5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGJkMzJiYjg2NDY0NTk1MDhiYjBiMGNlNTRhMTRiZDZmZTBlMTliNzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPgorRGF0ZTogVGh1LCAyNyBBdWcgMjAxNSAxNTo1MjoxNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBvcGtnX2FyY2hpdmU6IGFkZCBzdXBwb3J0IGZvciBlbXB0eSBjb21wcmVzc2VkIGZpbGVzCisKK1JlZ3Jlc3Npb24gZnJvbSAwLjIueDogb3BrZyB1c2VkIHRvIHN1cHBvcnQgZW1wdHkgUGFja2FnZS5neiBmaWxlcy4KKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorLS0tCisgbGlib3BrZy9vcGtnX2FyY2hpdmUuYyB8IDE1ICsrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlib3BrZy9vcGtnX2FyY2hpdmUuYyBiL2xpYm9wa2cvb3BrZ19hcmNoaXZlLmMKK2luZGV4IGJlOTAzZTQuLjdlOTFlNDggMTAwNjQ0CistLS0gYS9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCisrKysgYi9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCitAQCAtMTIxLDYgKzEyMSw5IEBAIHN0YXRpYyBpbnQgY29weV90b19zdHJlYW0oc3RydWN0IGFyY2hpdmUgKmEsIEZJTEUgKiBzdHJlYW0pCisgICAgIGludCBlb2Y7CisgICAgIHNpemVfdCBsZW4gPSBFWFRSQUNUX0JVRkZFUl9MRU47CisgCisrICAgIGlmIChhcmNoaXZlX2Zvcm1hdChhKSA9PSBBUkNISVZFX0ZPUk1BVF9FTVBUWSkKKysgICAgICAgIHJldHVybiAwOworKworICAgICBidWZmZXIgPSB4bWFsbG9jKGxlbik7CisgCisgICAgIHdoaWxlICgxKSB7CitAQCAtNjU0LDYgKzY1NywxMyBAQCBzdGF0aWMgc3RydWN0IGFyY2hpdmUgKm9wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorICAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKyAgICAgfQorIAorKyAgICByID0gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2VtcHR5KGFyKTsKKysgICAgaWYgKHIgIT0gQVJDSElWRV9PSykgeworKyAgICAgICAgb3BrZ19tc2coRVJST1IsICJFbXB0eSBmb3JtYXQgbm90IHN1cHBvcnRlZDogJXNcbiIsCisrICAgICAgICAgICAgICAgICBhcmNoaXZlX2Vycm9yX3N0cmluZyhhcikpOworKyAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKysgICAgfQorKworICAgICAvKiBPcGVuIGlucHV0IGZpbGUgYW5kIHByZXBhcmUgZm9yIHJlYWRpbmcuICovCisgICAgIHIgPSBhcmNoaXZlX3JlYWRfb3Blbl9maWxlbmFtZShhciwgZmlsZW5hbWUsIEVYVFJBQ1RfQlVGRkVSX0xFTik7CisgICAgIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKK0BAIC03MjMsNiArNzMzLDcgQEAgc3RydWN0IG9wa2dfYXIgKmFyX29wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorIHsKKyAgICAgc3RydWN0IG9wa2dfYXIgKmFyOworICAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnk7CisrICAgIGludCBlb2Y7CisgCisgICAgIGFyID0gKHN0cnVjdCBvcGtnX2FyICopeG1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa2dfYXIpKTsKKyAKK0BAIC03MzcsOCArNzQ4LDggQEAgc3RydWN0IG9wa2dfYXIgKmFyX29wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorICAgICAgKiBoZWFkZXIuIFdlIHNraXAgb3ZlciB0aGlzIGhlYWRlciBoZXJlIHNvIHRoYXQgdGhlIGNhbGxlciBkb2Vzbid0IG5lZWQKKyAgICAgICogdG8ga25vdyBhYm91dCBpdC4KKyAgICAgICovCistICAgIGVudHJ5ID0gcmVhZF9oZWFkZXIoYXItPmFyLCBOVUxMKTsKKy0gICAgaWYgKCFlbnRyeSkKKysgICAgZW50cnkgPSByZWFkX2hlYWRlcihhci0+YXIsICZlb2YpOworKyAgICBpZiAoIWVudHJ5ICYmICFlb2YpCisgICAgICAgICBnb3RvIGVycl9jbGVhbnVwOworIAorICAgICByZXR1cm4gYXI7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2ctY29uZmlndXJlLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3NDAyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCkBAIC0wLDAgKzEsMTcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BrZyBmaXJzdCBib290IGNvbmZpZ3VyZQorRGVmYXVsdERlcGVuZGVuY2llcz1ubworQWZ0ZXI9c3lzdGVtZC1yZW1vdW50LWZzLnNlcnZpY2Ugc3lzdGVtZC10bXBmaWxlcy1zZXR1cC5zZXJ2aWNlIHRtcC5tb3VudAorQmVmb3JlPXN5c2luaXQudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L3Bvc3RpbnN0CitFeGVjU3RhcnQ9LUBCQVNFX0JJTkRJUkAvc2ggLWMgIiBpZiBbICRQT1NUSU5TVF9MT0dHSU5HID0gJzEnIF07IHRoZW4gQEJJTkRJUkAvb3BrZyBjb25maWd1cmUgPiAkTE9HRklMRSAyPiYxOyBlbHNlIEBCSU5ESVJAL29wa2cgY29uZmlndXJlOyBmaSIKK0V4ZWNTdGFydFBvc3Q9QEJBU0VfQklORElSQC9zeXN0ZW1jdGwgZGlzYWJsZSBvcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCitTdGFuZGFyZE91dHB1dD1zeXNsb2cKK1JlbWFpbkFmdGVyRXhpdD1ObworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWJhc2ljLnRhcmdldAorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTllOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mCkBAIC0wLDAgKzEsMjggQEAKKyMgTXVzdCBoYXZlIG9uZSBvciBtb3JlIHNvdXJjZSBlbnRyaWVzIG9mIHRoZSBmb3JtOgorIworIyAgIHNyYyA8c3JjLW5hbWU+IDxzb3VyY2UtdXJsPgorIworIyBhbmQgb25lIG9yIG1vcmUgZGVzdGluYXRpb24gZW50cmllcyBvZiB0aGUgZm9ybToKKyMKKyMgICBkZXN0IDxkZXN0LW5hbWU+IDx0YXJnZXQtcGF0aD4KKyMKKyMgd2hlcmUgPHNyYy1uYW1lPiBhbmQgPGRlc3QtbmFtZXM+IGFyZSBpZGVudGlmaWVycyB0aGF0CisjIHNob3VsZCBtYXRjaCBbYS16QS1aMC05Ll8tXSssIDxzb3VyY2UtdXJsPiBzaG91bGQgYmUgYQorIyBVUkwgdGhhdCBwb2ludHMgdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIEZhbWlsaWFyCisjIFBhY2thZ2VzIGZpbGUsIGFuZCA8dGFyZ2V0LXBhdGg+IHNob3VsZCBiZSBhIGRpcmVjdG9yeQorIyB0aGF0IGV4aXN0cyBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKworIyBQcm94eSBTdXBwb3J0Cisjb3B0aW9uIGh0dHBfcHJveHkgaHR0cDovL3Byb3h5LnRsZDozMTI4Cisjb3B0aW9uIGZ0cF9wcm94eSBodHRwOi8vcHJveHkudGxkOjMxMjgKKyNvcHRpb24gcHJveHlfdXNlcm5hbWUgPHVzZXJuYW1lPgorI29wdGlvbiBwcm94eV9wYXNzd29yZCA8cGFzc3dvcmQ+CisKKyMgRW5hYmxlIEdQR01FIHNpZ25hdHVyZQorIyBvcHRpb24gY2hlY2tfc2lnbmF0dXJlIDEKKworIyBPZmZsaW5lIG1vZGUgKGZvciB1c2UgaW4gY29uc3RydWN0aW5nIGZsYXNoIGltYWdlcyBvZmZsaW5lKQorI29wdGlvbiBvZmZsaW5lX3Jvb3QgdGFyZ2V0CisKKyMgRGVmYXVsdCBkZXN0aW5hdGlvbiBmb3IgaW5zdGFsbGVkIHBhY2thZ2VzCitkZXN0IHJvb3QgLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGJiMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIKQEAgLTAsMCArMSw3MiBAQAorU1VNTUFSWSA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciIKK1NVTU1BUllfbGlib3BrZyA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJ5IgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy9pc3N1ZXMvbGlzdCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29wa2cuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTIxO21kNT05MDQzNWE1MTljNmVhNjllZjIyZTRhODhiY2M1MmZhMCIKKworREVQRU5EUyA9ICJsaWJhcmNoaXZlIgorCitQRSA9ICIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDEyY2RjNzFkNzhiOThmYWNjODRiMTkzMzFlYzY0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZjczNWQxY2RiOGVmMzcxOGZiMGY5ZmJhNDRjYTBkOWE1YzkwZDNhN2YwMTRmMzdhNmQyZjk0NzRmNTQ5ODhmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAib3BrZy1jb25maWd1cmUuc2VydmljZSIKKwordGFyZ2V0X2xvY2Fsc3RhdGVkaXIgOj0gIiR7bG9jYWxzdGF0ZWRpcn0iCitPUEtHTElCRElSID0gIiR7dGFyZ2V0X2xvY2Fsc3RhdGVkaXJ9L2xpYiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKworUEFDS0FHRUNPTkZJR1tncGddID0gIi0tZW5hYmxlLWdwZywtLWRpc2FibGUtZ3BnLGdwZ21lIGxpYmdwZy1lcnJvcixnbnVwZyIKK1BBQ0tBR0VDT05GSUdbY3VybF0gPSAiLS1lbmFibGUtY3VybCwtLWRpc2FibGUtY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tzc2wtY3VybF0gPSAiLS1lbmFibGUtc3NsLWN1cmwsLS1kaXNhYmxlLXNzbC1jdXJsLGN1cmwgb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tzaGEyNTZdID0gIi0tZW5hYmxlLXNoYTI1NiwtLWRpc2FibGUtc2hhMjU2IgorUEFDS0FHRUNPTkZJR1twYXRoZmluZGVyXSA9ICItLWVuYWJsZS1wYXRoZmluZGVyLC0tZGlzYWJsZS1wYXRoZmluZGVyLHBhdGhmaW5kZXIiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKKwllY2hvICJvcHRpb24gbGlzdHNfZGlyICR7T1BLR0xJQkRJUn0vb3BrZy9saXN0cyIgPj4ke0R9JHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZgorCisJIyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkKKwlpbnN0YWxsIC1kICR7RH0ke09QS0dMSUJESVJ9L29wa2cKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07dGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wa2ctY29uZmlndXJlLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTVEVNRF9VTklURElSQCwke3N5c3RlbWRfdW5pdGRpcn0sZycgXAorCQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3BrZy1jb25maWd1cmUuc2VydmljZQorCWZpCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IG9wa2ctYXJjaC1jb25maWcgcnVuLXBvc3RpbnN0cyBsaWJhcmNoaXZlIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSUkVQTEFDRVNfJHtQTn0gPSAib3BrZy1ub2dwZyBvcGtnLWNvbGxhdGVyYWwiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKK1JQUk9WSURFU18ke1BOfSA9ICJvcGtnLWNvbGxhdGVyYWwiCisKK1BBQ0tBR0VTID0rICJsaWJvcGtnIgorCitGSUxFU19saWJvcGtnID0gIiR7bGliZGlyfS8qLnNvLiogJHtPUEtHTElCRElSfS9vcGtnLyIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjIzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNTdjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjIzLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiT3B0aW1pc2VkIElubmVyIExvb3AgUnVudGltZSBDb21waWxlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmVudHJvcHl3YXZlLmNvbS9wcm9qZWN0cy9vcmMvIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UgJiBCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xNDAwYmQ5ZDA5ZThhZjU2YjllYzk4MmIzZDg1Nzk3ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvb3JjL29yYy0ke1BWfS50YXIueHo7bmFtZT1vcmMiCitTUkNfVVJJW29yYy5tZDVzdW1dID0gIjcyZTA2MTJhY2U1NGQ3N2FhMmY3YTAwNjM0OGVlODFhIgorU1JDX1VSSVtvcmMuc2hhMjU2c3VtXSA9ICI3NjdlYWViY2UyOTQxNzM3YjQzMzY4MjI1ZWM1NDU5OGIzMDU1Y2E3OGI0ZGM1MGM0MDkyZjVmY2RjMGJkZmU3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyA9KyAib3JjLWV4YW1wbGVzIgorRklMRVNfb3JjLWV4YW1wbGVzID0gIiR7bGliZGlyfS9vcmMvKiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ09SQyAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgc2VkIC1pIC1lICdzIy90bXAjLiNnJyAke1N9L29yYy9vcmNjb2RlbWVtLmMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMS1DaGFuZ2UtbGlicmFyeS1uYW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2N2M1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMS1DaGFuZ2UtbGlicmFyeS1uYW1lLnBhdGNoCkBAIC0wLDAgKzEsMTE5IEBACitGcm9tOiBQaW90ciBSb3N6YXR5Y2tpIDxkZXh0ZXJAZGViaWFuLm9yZz4KK0RhdGU6IFdlZCwgMjcgSmFuIDIwMTAgMTY6NTM6MTEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hhbmdlIGxpYnJhcnkgbmFtZQorCitUaGUgc29uYW1lIHdhcyBjaGFuZ2VkIHRvIG9zc3AtdXVpZCB0byBwcmV2ZW5kIHRoZSBuYW1lIGNsYXNoIHdpdGggZTJmc3Byb2dzJ3MKK3V1aWQgbGlicmFyeS4KKy0tLQorIE1ha2VmaWxlLmluICAgICAgfCAgICA2ICsrKy0tLQorIHBlcmwvTWFrZWZpbGUuUEwgfCAgIDEyICsrKysrKy0tLS0tLQorIHBocC9jb25maWcubTQgICAgfCAgICAyICstCisgdXVpZC1jb25maWcuaW4gICB8ICAgIDIgKy0KKyB1dWlkLnBjLmluICAgICAgIHwgICAgNCArKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZDI4ZjRiZS4uYzJiYTk5ZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTYyLDEzICs2MiwxMyBAQCBQRVJMICAgICAgICA9IEBQRVJMQAorIFBIUCAgICAgICAgID0gQFBIUEAKKyBQR19DT05GSUcgICA9IEBQR19DT05GSUdACisgCistTElCX05BTUUgICAgPSBsaWJ1dWlkLmxhCisrTElCX05BTUUgICAgPSBsaWJvc3NwLXV1aWQubGEKKyBMSUJfT0JKUyAgICA9IHV1aWQubG8gdXVpZF9tZDUubG8gdXVpZF9zaGExLmxvIHV1aWRfcHJuZy5sbyB1dWlkX21hYy5sbyB1dWlkX3RpbWUubG8gdXVpZF91aTY0LmxvIHV1aWRfdWkxMjgubG8gdXVpZF9zdHIubG8KKyAKKy1EQ0VfTkFNRSAgICA9IGxpYnV1aWRfZGNlLmxhCisrRENFX05BTUUgICAgPSBsaWJvc3NwLXV1aWRfZGNlLmxhCisgRENFX09CSlMgICAgPSB1dWlkX2RjZS5sbyAkKExJQl9PQkpTKQorIAorLUNYWF9OQU1FICAgID0gbGlidXVpZCsrLmxhCisrQ1hYX05BTUUgICAgPSBsaWJvc3NwLXV1aWQrKy5sYQorIENYWF9PQkpTICAgID0gdXVpZCsrLmxvICQoTElCX09CSlMpCisgCisgUFJHX05BTUUgICAgPSB1dWlkCitkaWZmIC0tZ2l0IGEvcGVybC9NYWtlZmlsZS5QTCBiL3BlcmwvTWFrZWZpbGUuUEwKK2luZGV4IDkyZjQ0OTQuLjljNmZlZTYgMTAwNjQ0CistLS0gYS9wZXJsL01ha2VmaWxlLlBMCisrKysgYi9wZXJsL01ha2VmaWxlLlBMCitAQCAtMzMsOSArMzMsOSBAQCB1c2UgQ29uZmlnOworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworIAorICMgICBkZXRlcm1pbmUgc291cmNlIGRpcmVjdG9yeQorLW15ICgkc3JjZGlyKSA9IG1hcCB7IG15ICRkID0gJF87ICRkID1+IHMvXC9saWJ1dWlkXC5sYSQvLzsgJGQgfQorLSAgICAgICAgICAgICAgIGdyZXAgeyAtZiAkXyB9ICgiLi4vbGlidXVpZC5sYSIsIGdsb2IoIi4uLyovbGlidXVpZC5sYSIpKQorLSAgICBvciBkaWUgIm5vIHNvdXJjZSBkaXJlY3RvcnkgZm91bmQgKHdoZXJlIGxpYnV1aWQubGEgaXMgbG9jYXRlZCkiOworK215ICgkc3JjZGlyKSA9IG1hcCB7IG15ICRkID0gJF87ICRkID1+IHMvXC9saWJvc3NwLXV1aWRcLmxhJC8vOyAkZCB9CisrICAgICAgICAgICAgICAgZ3JlcCB7IC1mICRfIH0gKCIuLi9saWJvc3NwLXV1aWQubGEiLCBnbG9iKCIuLi8qL2xpYm9zc3AtdXVpZC5sYSIpKQorKyAgICBvciBkaWUgIm5vIHNvdXJjZSBkaXJlY3RvcnkgZm91bmQgKHdoZXJlIGxpYm9zc3AtdXVpZC5sYSBpcyBsb2NhdGVkKSI7CisgCisgIyAgIGRldGVybWluZSBleHRyYSBidWlsZCBvcHRpb25zCisgbXkgJGNvbXBhdCA9IDA7CitAQCAtNDcsMTUgKzQ3LDE1IEBAIFdyaXRlTWFrZWZpbGUoCisgICAgIFZFUlNJT05fRlJPTSAgICAgID0+ICd1dWlkLnBtJywKKyAgICAgQUJTVFJBQ1RfRlJPTSAgICAgPT4gJ3V1aWQucG9kJywKKyAgICAgUFJFUkVRX1BNICAgICAgICAgPT4ge30sCistICAgIExJQlMgICAgICAgICAgICAgID0+IFsgIi1MJHNyY2Rpci8ubGlicyAtTCRzcmNkaXIgLWx1dWlkIiBdLAorKyAgICBMSUJTICAgICAgICAgICAgICA9PiBbICItTCRzcmNkaXIvLmxpYnMgLUwkc3JjZGlyIC1sb3NzcC11dWlkIiBdLAorICAgICBERUZJTkUgICAgICAgICAgICA9PiAnJywKKyAgICAgSU5DICAgICAgICAgICAgICAgPT4gIi1JLiAtSSRzcmNkaXIiLAorICAgICBQTSAgICAgICAgICAgICAgICA9PiB7ICd1dWlkLnBtJyAgID0+ICckKElOU1RfTElCRElSKS91dWlkLnBtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXVpZC5wb2QnICA9PiAnJChJTlNUX0xJQkRJUikvdXVpZC5wb2QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wbScgID0+ICckKElOU1RfTElCRElSKS8uLi9EYXRhL1VVSUQucG0nKSAgOiAoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9MSUJESVIpLy4uL0RhdGEvVVVJRC5wb2QnKSA6ICgpKSwgfSwKKy0gICAgTUFOM1BPRFMgICAgICAgICAgPT4geyAndXVpZC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvT1NTUDo6dXVpZC4zJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJGNvbXBhdCA/ICgndXVpZF9jb21wYXQucG9kJyA9PiAnJChJTlNUX01BTjNESVIpL0RhdGE6OlVVSUQuMycpIDogKCkpLCB9LAorKyAgICBNQU4zUE9EUyAgICAgICAgICA9PiB7ICd1dWlkLnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9PU1NQOjp1dWlkLjNwbScsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9EYXRhOjpVVUlELjNwbScpIDogKCkpLCB9LAorICAgICBUWVBFTUFQUyAgICAgICAgICA9PiBbICd1dWlkLnRtJyBdLAorICAgICB0ZXN0ICAgICAgICAgICAgICA9PiB7IFRFU1RTID0+ICd1dWlkLnRzJyAuICgkY29tcGF0ID8gJyB1dWlkX2NvbXBhdC50cycgOiAnJykgfSwKKyAgICAgTk9fTUVUQSAgICAgICAgICAgPT4gMSwKK2RpZmYgLS1naXQgYS9waHAvY29uZmlnLm00IGIvcGhwL2NvbmZpZy5tNAoraW5kZXggNTA5MWI5Ni4uOTY5YjQ1NyAxMDA2NDQKKy0tLSBhL3BocC9jb25maWcubTQKKysrKyBiL3BocC9jb25maWcubTQKK0BAIC0zNCw3ICszNCw3IEBAIGlmIHRlc3QgIiRQSFBfVVVJRCIgIT0gIm5vIjsgdGhlbgorICAgICBQSFBfTkVXX0VYVEVOU0lPTih1dWlkLCB1dWlkLmMsICRleHRfc2hhcmVkKQorICAgICBBQ19ERUZJTkUoSEFWRV9VVUlELCAxLCBbSGF2ZSBPU1NQIHV1aWQgbGlicmFyeV0pCisgICAgIFBIUF9BRERfTElCUEFUSChbLi5dLCApCistICAgIFBIUF9BRERfTElCUkFSWShbdXVpZF0sLCBVVUlEX1NIQVJFRF9MSUJBREQpCisrICAgIFBIUF9BRERfTElCUkFSWShbb3NzcC11dWlkXSwsIFVVSURfU0hBUkVEX0xJQkFERCkKKyAgICAgUEhQX0FERF9JTkNMVURFKFsuLl0pCisgICAgIFBIUF9TVUJTVChVVUlEX1NIQVJFRF9MSUJBREQpCisgCitkaWZmIC0tZ2l0IGEvdXVpZC1jb25maWcuaW4gYi91dWlkLWNvbmZpZy5pbgoraW5kZXggOGQyYTA2My4uNWI1ODgxMiAxMDA2NDQKKy0tLSBhL3V1aWQtY29uZmlnLmluCisrKysgYi91dWlkLWNvbmZpZy5pbgorQEAgLTEyMSw3ICsxMjEsNyBAQCBkbworICAgICAgICAgICAgIG91dHB1dF9leHRyYT0iJG91dHB1dF9leHRyYSAkdXVpZF9sZGZsYWdzIgorICAgICAgICAgICAgIDs7CisgICAgICAgICAtLWxpYnMpCistICAgICAgICAgICAgb3V0cHV0PSIkb3V0cHV0IC1sdXVpZCIKKysgICAgICAgICAgICBvdXRwdXQ9IiRvdXRwdXQgLWxvc3NwLXV1aWQiCisgICAgICAgICAgICAgb3V0cHV0X2V4dHJhPSIkb3V0cHV0X2V4dHJhICR1dWlkX2xpYnMiCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICogKQorZGlmZiAtLWdpdCBhL3V1aWQucGMuaW4gYi91dWlkLnBjLmluCitpbmRleCBjNzZhZDFlLi5kZTAwYzJmIDEwMDY0NAorLS0tIGEvdXVpZC5wYy5pbgorKysrIGIvdXVpZC5wYy5pbgorQEAgLTM2LDcgKzM2LDcgQEAgTmFtZTogT1NTUCB1dWlkCisgRGVzY3JpcHRpb246IFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSBMaWJyYXJ5CisgVmVyc2lvbjogQFVVSURfVkVSU0lPTl9SQVdACisgVVJMOiBodHRwOi8vd3d3Lm9zc3Aub3JnL3BrZy9saWIvdXVpZC8KKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLUxpYnM6IC1MJHtsaWJkaXJ9IC1sdXVpZAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L29zc3AKKytMaWJzOiAtTCR7bGliZGlyfSAtbG9zc3AtdXVpZAorIExpYnMucHJpdmF0ZTogQExJQlNACisgCistLSAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMi11dWlkLXByZXNlcnZlLW0tb3B0aW9uLXN0YXR1cy1pbi12LW9wdGlvbi1oYW5kbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMi11dWlkLXByZXNlcnZlLW0tb3B0aW9uLXN0YXR1cy1pbi12LW9wdGlvbi1oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDRhNjI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb206IE1hcmNvIE5lbmNpYXJpbmkgPG1hcmNvLm5lbmNpYXJpbmlAZGV2aXNlLml0PgorRGF0ZTogV2VkLCAyNyBKYW4gMjAxMCAxOTo0NjoyMSArMDEwMAorU3ViamVjdDogW1BBVENIXSB1dWlkOiBwcmVzZXJ2ZSAtbSBvcHRpb24gc3RhdHVzIGluIC12IG9wdGlvbiBoYW5kbGluZworCitCdWc6IDUzMTM5NgorLS0tCisgdXVpZF9jbGkuYyB8ICAgMTkgKysrKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvdXVpZF9jbGkuYyBiL3V1aWRfY2xpLmMKK2luZGV4IGQxYjBiMTEuLjE0YTY3ZmUgMTAwNjQ0CistLS0gYS91dWlkX2NsaS5jCisrKysgYi91dWlkX2NsaS5jCitAQCAtMTQwLDExICsxNDAsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICAgICAgICAgICAgaSA9IHN0cnRvbChvcHRhcmcsICZwLCAxMCk7CisgICAgICAgICAgICAgICAgIGlmICgqcCAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoImludmFsaWQgYXJndW1lbnQgdG8gb3B0aW9uICd2JyIpOworKyAgICAgICAgICAgICAgICB2ZXJzaW9uICY9IH4oVVVJRF9NQUtFX1YxfFVVSURfTUFLRV9WM3xVVUlEX01BS0VfVjR8VVVJRF9NQUtFX1Y1KTsKKyAgICAgICAgICAgICAgICAgc3dpdGNoIChpKSB7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnNpb24gPSBVVUlEX01BS0VfVjE7IGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJzaW9uID0gVVVJRF9NQUtFX1YzOyBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogdmVyc2lvbiA9IFVVSURfTUFLRV9WNDsgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHZlcnNpb24gPSBVVUlEX01BS0VfVjU7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WMTsgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnNpb24gfD0gVVVJRF9NQUtFX1YzOyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjQ7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WNTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlKCJpbnZhbGlkIHZlcnNpb24gb24gb3B0aW9uICd2JyIpOworICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworQEAgLTIxMywxMCArMjE0LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgIH0KKyAgICAgZWxzZSB7CisgICAgICAgICAvKiBlbmNvZGluZyAqLworLSAgICAgICAgaWYgKCAgICh2ZXJzaW9uID09IFVVSURfTUFLRV9WMSAmJiBhcmdjICE9IDApCistICAgICAgICAgICAgfHwgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1YzICYmIGFyZ2MgIT0gMikKKy0gICAgICAgICAgICB8fCAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjQgJiYgYXJnYyAhPSAwKQorLSAgICAgICAgICAgIHx8ICh2ZXJzaW9uID09IFVVSURfTUFLRV9WNSAmJiBhcmdjICE9IDIpKQorKyAgICAgICAgaWYgKCAgICh2ZXJzaW9uICYgVVVJRF9NQUtFX1YxICYmIGFyZ2MgIT0gMCkKKysgICAgICAgICAgICB8fCAodmVyc2lvbiAmIFVVSURfTUFLRV9WMyAmJiBhcmdjICE9IDIpCisrICAgICAgICAgICAgfHwgKHZlcnNpb24gJiBVVUlEX01BS0VfVjQgJiYgYXJnYyAhPSAwKQorKyAgICAgICAgICAgIHx8ICh2ZXJzaW9uICYgVVVJRF9NQUtFX1Y1ICYmIGFyZ2MgIT0gMikpCisgICAgICAgICAgICAgdXNhZ2UoImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgICAgICAgaWYgKChyYyA9IHV1aWRfY3JlYXRlKCZ1dWlkKSkgIT0gVVVJRF9SQ19PSykKKyAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9jcmVhdGU6ICVzIiwgdXVpZF9lcnJvcihyYykpOworQEAgLTIzMiw3ICsyMzMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9sb2FkKHV1aWQsICJuaWwiKSkgIT0gVVVJRF9SQ19PSykKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yKDEsICJ1dWlkX2xvYWQ6ICVzIiwgdXVpZF9lcnJvcihyYykpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjMgfHwgdmVyc2lvbiA9PSBVVUlEX01BS0VfVjUpIHsKKysgICAgICAgICAgICBpZiAodmVyc2lvbiAmIFVVSURfTUFLRV9WMyB8fCB2ZXJzaW9uICYgVVVJRF9NQUtFX1Y1KSB7CisgICAgICAgICAgICAgICAgIGlmICgocmMgPSB1dWlkX2NyZWF0ZSgmdXVpZF9ucykpICE9IFVVSURfUkNfT0spCisgICAgICAgICAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9jcmVhdGU6ICVzIiwgdXVpZF9lcnJvcihyYykpOworICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9sb2FkKHV1aWRfbnMsIGFyZ3ZbMF0pKSAhPSBVVUlEX1JDX09LKSB7CistLSAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzY2JiNTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb206IE1hcmNvIE5lbmNpYXJpbmkgPG1hcmNvLm5lbmNpYXJpbmlAZGV2aXNlLml0PgorRGF0ZTogVHVlLCAyIEZlYiAyMDEwIDEyOjE2OjQ5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB3aGF0aXMgZW50cmllcworCitGaXggd2hhdGlzIGVudHJ5IG9mIHV1aWQuMSwgdXVpZC4zb3NzcCBhbmQgdXVpZCsrLjNvc3NwIG1hbnBhZ2VzCistLS0KKyB1dWlkKysucG9kICAgfCAgICAyICstCisgdXVpZC5wb2QgICAgIHwgICAgMiArLQorIHV1aWRfY2xpLnBvZCB8ICAgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvdXVpZCsrLnBvZCBiL3V1aWQrKy5wb2QKK2luZGV4IDhiNWE0YjEuLjg5YzVlZmIgMTAwNjQ0CistLS0gYS91dWlkKysucG9kCisrKysgYi91dWlkKysucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4gKEMrKyBBUEkpCisrQjx1dWlkKys+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4gKEMrKyBBUEkpCisgCisgPWhlYWQxIFZFUlNJT04KKyAKK2RpZmYgLS1naXQgYS91dWlkLnBvZCBiL3V1aWQucG9kCitpbmRleCA0YWQzNzQyLi4wMTc5YTQ2IDEwMDY0NAorLS0tIGEvdXVpZC5wb2QKKysrKyBiL3V1aWQucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4KKytCPHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4KKyAKKyA9aGVhZDEgVkVSU0lPTgorIAorZGlmZiAtLWdpdCBhL3V1aWRfY2xpLnBvZCBiL3V1aWRfY2xpLnBvZAoraW5kZXggZGRlYzZiYi4uZGY5ZGM4MyAxMDA2NDQKKy0tLSBhL3V1aWRfY2xpLnBvZAorKysrIGIvdXVpZF9jbGkucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciBDb21tYW5kLUxpbmUgVG9vbD4KKytCPHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciBDb21tYW5kLUxpbmUgVG9vbD4KKyAKKyA9aGVhZDEgVkVSU0lPTgorIAorLS0gCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDQtZml4LWRhdGEtdXVpZC1mcm9tLXN0cmluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwNC1maXgtZGF0YS11dWlkLWZyb20tc3RyaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNWUxMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDQtZml4LWRhdGEtdXVpZC1mcm9tLXN0cmluZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitEZXNjcmlwdGlvbjogU3VwcG9ydCBkYXNoLWxlc3MgYXJncyB0byBmcm9tX3N0cmluZy4KK0F1dGhvcjogVGltIFJldG91dCA8ZGlvY2xlc0BkZWJpYW4ub3JnPgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82MzU2MDcKKworVGhlIG1vZHVsZSBEYXRhOjpHVUlEIGRlcGVuZHMgb24gRGF0YTo6VVVJRCBzdXBwb3J0aW5nIHRoaXMgYmVoYXZpb3VyLgorCistLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSBkZWJpYW4gb3NzcC11dWlkIDEuNi4yIGludGVncmF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL3BlcmwvdXVpZF9jb21wYXQucG0KKysrKyBiL3BlcmwvdXVpZF9jb21wYXQucG0KK0BAIC05Myw3ICs5Myw5IEBACisgICAgICR1dWlkLT5pbXBvcnQoJ3N0cicsCisgICAgICAgICAgICRzdHIgPX4gL14weC8KKyAgICAgICAgID8gam9pbiAnLScsIHVucGFjaygneDIgYTggYTQgYTQgYTQgYTEyJywgJHN0cikKKy0gICAgICAgIDogJHN0cgorKyAgICAgICAgOiAkc3RyID1+IC8tLworKyAgICAgICAgPyAkc3RyCisrICAgICAgICA6IGpvaW4gJy0nLCB1bnBhY2soJ0E4IEE0IEE0IEE0IEExMicsICRzdHIpCisgICAgICk7CisgICAgIHJldHVybiAkdXVpZC0+ZXhwb3J0KCdiaW4nKTsKKyB9CistLS0gYS9wZXJsL3V1aWRfY29tcGF0LnRzCisrKysgYi9wZXJsL3V1aWRfY29tcGF0LnRzCitAQCAtMjgsNyArMjgsNyBAQAorICMjICB1dWlkX2NvbXBhdC50czogRGF0YTo6VVVJRCBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IFBlcmwgQVBJIChQZXJsIHRlc3Qgc3VpdGUgcGFydCkKKyAjIworIAorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE0OworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE2OworIAorIEJFR0lOIHsKKyAgICAgdXNlX29rKCdEYXRhOjpVVUlEJyk7CitAQCAtNTMsMyArNTMsNSBAQAorIG9rKCR1dWlkOCA9ICR1Zy0+ZnJvbV9zdHJpbmcoIjZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCIpKTsKKyBvaygkdWctPmNvbXBhcmUoJHV1aWQ3LCAkdXVpZDgpID09IDApOworIAorK29rKCR1dWlkOSA9ICR1Zy0+ZnJvbV9zdHJpbmcoIjZiYTdiODExOWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4IikpOworK29rKCR1Zy0+Y29tcGFyZSgkdXVpZDcsICR1dWlkOSkgPT0gMCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2luc3RhbGwtcGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2luc3RhbGwtcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyMjJjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaApAQCAtMCwwICsxLDE5IEBACit1dWlkLnBjIGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIHNvIHNob3VsZCBiZSBpbnN0YWxsZWQgZnJvbSB0aGUgY3VycmVudAorZGlyZWN0b3J5LCBhbmQgbm90ICRTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3Nob3VsZCBiZSBzdWJtaXR0ZWRdCitTaWduZWQtT2ZmLUJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitJbmRleDogdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTExLTEzIDE2OjU4OjI4LjYyNDE1NjAwMCArMDAwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0xMS0xMyAxNzowNToyNC4yMjQxNTg2NzAgKzAwMDAKK0BAIC0yMzIsNyArMjMyLDcgQEAKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNzU1IHV1aWQtY29uZmlnICQoREVTVERJUikkKGJpbmRpcikvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWQtY29uZmlnLjEgJChERVNURElSKSQobWFuZGlyKS9tYW4xLworLQkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnLworKwkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgdXVpZC5wYyAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy8KKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0IHV1aWQuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS8KKyAJLUBpZiBbICIuJChXSVRIX0RDRSkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgIGVjaG8gIiQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWRfZGNlLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvIjsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZmMxMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KK0BAIC0xMTMsMTUgKzExMywxNSBAQCBhbGw6ICQoVEFSR0VUUykKKwlAJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChDUFBGTEFHUykgJChDWFhGTEFHUykgLWMgJDwKKworICQoTElCX05BTUUpOiAkKExJQl9PQkpTKQorLQlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyAkKExJQl9OQU1FKSAkKExJQl9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKysJQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyAkKExJQl9OQU1FKSAkKExJQl9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKwkgICAgLXZlcnNpb24taW5mbyBgJChTSFRPT0wpIHZlcnNpb24gLWwgYyAtZCBsaWJ0b29sICQoUykvdXVpZF92ZXJzLmhgCisKKyAkKERDRV9OQU1FKTogJChEQ0VfT0JKUykKKy0JQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gJChEQ0VfTkFNRSkgJChEQ0VfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisrCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJChEQ0VfTkFNRSkgJChEQ0VfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChDWFhfTkFNRSk6ICQoQ1hYX09CSlMpCistCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ1hYKSAtbyAkKENYWF9OQU1FKSAkKENYWF9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKysJQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDWFgpICQoTERGTEFHUykgLW8gJChDWFhfTkFNRSkgJChDWFhfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChQUkdfTkFNRSk6ICQoUFJHX09CSlMpICQoTElCX05BTUUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbGlidG9vbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzkxYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitSZW1vdmUgaGFyZGNvZGVkIGxpYnRvb2wgbmFtZSwgZmFsbCBiYWNrIHRvIGdlbmVyYXRlZCBuYW1lCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCitUaGUgcHJvamVjdCBhcHBlYXJzIHRvIG5vIGxvbmdlciBiZSBhY2NlcHRpbmcgY2hhbmdlcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4gdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE0OjM3OjE5LjU3OTY3MjkzMCAtMDUwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNDozNzo0OS4xMTI3MzM3ODcgLTA1MDAKK0BAIC0zMiw2ICszMiw3IEBACisgVlBBVEggICAgICAgPSBAc3JjZGlyQAorIHNyY2RpciAgICAgID0gQHNyY2RpckAKKyB0b3Bfc3JjZGlyICA9IEB0b3Bfc3JjZGlyQAorK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgUyAgICAgICAgICAgPSAkKHNyY2RpcikKKyBDICAgICAgICAgICA9IC4KKyAKK0BAIC01NSw3ICs1Niw3IEBACisgQ1AgICAgICAgICAgPSBjcAorIFJNRElSICAgICAgID0gcm1kaXIKKyBTSFRPT0wgICAgICA9ICQoUykvc2h0b29sCistTElCVE9PTCAgICAgPSAkKEMpL2xpYnRvb2wKKytMSUJUT09MICAgICA9IEBMSUJUT09MQAorIFRSVUUgICAgICAgID0gdHJ1ZQorIFBPRDJNQU4gICAgID0gcG9kMm1hbgorIFBFUkwgICAgICAgID0gQFBFUkxACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbm9zdHJpcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1ub3N0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDZiNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbm9zdHJpcC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXZSBkb24ndCB3YW50IGFueXRoaW5nIHN0cmlwcGVkCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCitUaGUgcHJvamVjdCBhcHBlYXJzIHRvIG5vIGxvbmdlciBiZSBhY2NlcHRpbmcgY2hhbmdlcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4gdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE0OjQyOjQyLjIyNTc4OTQ1NiAtMDUwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNTowMzowMy4xMTk3MzM0MDAgLTA1MDAKK0BAIC0yNTQsNyArMjU0LDcgQEAKKyAJLUBpZiBbICIuJChXSVRIX0NYWCkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoQ1hYX05BTUUpICQoREVTVERJUikkKGxpYmRpcikvOyBcCisgCWZpCistCUAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1zIC1tIDc1NSB1dWlkICQoREVTVERJUikkKGJpbmRpcikvCisrCUAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDc1NSB1dWlkICQoREVTVERJUikkKGJpbmRpcikvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWQuMSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvCisgCS1AaWYgWyAiLiQoV0lUSF9QRVJMKSIgPSAueWVzIF07IHRoZW4gXAorIAkgICAgKGNkICQoUykvcGVybCAmJiAkKE1BS0UpICQoTUZMQUdTKSBpbnN0YWxsIERFU1RESVI9JChERVNURElSKSk7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTI2YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJPU1NQIHV1aWQgaXMgYSBJU08tQzoxOTk5IGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBcCisoQVBJKSBhbmQgY29ycmVzcG9uZGluZyBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIChDTEkpIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiBcCitEQ0UgMS4xLCBJU08vSUVDIDExNTc4OjE5OTYgYW5kIFJGQyA0MTIyIGNvbXBsaWFudCBVbml2ZXJzYWxseSBVbmlxdWUgXAorSWRlbnRpZmllciAoVVVJRCkuIEl0IHN1cHBvcnRzIERDRSAxLjEgdmFyaWFudCBVVUlEcyBvZiB2ZXJzaW9uIDEgKHRpbWUgXAorYW5kIG5vZGUgYmFzZWQpLCB2ZXJzaW9uIDMgKG5hbWUgYmFzZWQsIE1ENSksIHZlcnNpb24gNCAocmFuZG9tIG51bWJlciBcCitiYXNlZCkgYW5kIHZlcnNpb24gNSAobmFtZSBiYXNlZCwgU0hBLTEpLiIKK0RFU0NSSVBUSU9OX3V1aWQgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgdG9vbCB0byBjcmVhdGUgVW5pdmVyc2FsbHkgXAorVW5pcXVlIElkZW50aWZpZXJzIChVVUlEKSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9zc3Aub3JnL3BrZy9saWIvdXVpZC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0zMDtlbmRsaW5lPTU1O21kNT1iMzk0ZmFkYjAzOWJiZmNhNmFkOWQ5ZDc2OWVlOTYwZSBcCisJICAgZmlsZTovL3V1aWRfbWQ1LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yODttZDU9OWMxZjRiMjIxODU0NmRlYWUyNGM5MWJlMWRjZjAwZGQiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9vLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorCSAgIGZpbGU6Ly8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2ggXAorCSAgIGZpbGU6Ly91dWlkLWxpYnRvb2wucGF0Y2ggXAorCSAgIGZpbGU6Ly91dWlkLW5vc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5zdGFsbC1wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKKwkgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZGIwZDQzYTkwMjJhNmViYmJjMjUzMzdhZTI4OTQyZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMWE2MTUyMjViYWE1ZjhiYjY4NjgyNDQyM2Y1MGU0NDI3YWNkM2Y3MGQzOTQ3NjViZGZmMzI4MDFmMGZkNWIwIgorCitTID0gIiR7V09SS0RJUn0vdXVpZC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWRjZSAtLXdpdGhvdXQtY3h4IC0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLWNvbXBhdCAtLXdpdGhvdXQtcGhwIC0td2l0aG91dC1wZ3NxbCIKK0VYVFJBX09FQ09ORiA9ICItLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9vc3NwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgIyBUaGlzIHBhY2thZ2UgaGFzIGEgY29tcGxldGVseSBjdXN0b20gYWNsb2NhbC5tNCwgd2hpY2ggc2hvdWxkIGJlIGFjaW5jbHVkZS5tNC4KKyAgaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKyAgICBtdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKyAgZmkKKworICBybSAtZiAke1N9L2xpYnRvb2wubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgIG1rZGlyIC1wICAke0R9JHtpbmNsdWRlZGlyfS9vc3NwCisgIG12ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL3V1aWQucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvb3NzcC11dWlkLnBjCit9CisKK1BBQ0tBR0VTID0rICJ1dWlkIgorRklMRVNfdXVpZCA9ICIke2JpbmRpcn0vdXVpZCIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJvc3NwLXV1aWQuc28uMTYqIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vdXVpZC1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInV1aWQuMyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZXyR7UE59LWRvYyA9ICIyMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXVpZC4zXSA9ICIke21hbmRpcn0vbWFuMy91dWlkLjMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzE4NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIHRvb2xzIGZvciBkZXZlbG9wbWVudCBvbiB0aGUgZGV2aWNlIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSUFJPVklERVNfJHtQTn0gPSAicWVtdS1jb25maWciCitSUkVQTEFDRVNfJHtQTn0gPSAicWVtdS1jb25maWciCitSQ09ORkxJQ1RTXyR7UE59ID0gInFlbXUtY29uZmlnIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZGlzdGNjLWNvbmZpZyBcCisgICAgb3Byb2ZpbGV1aS1zZXJ2ZXIgXAorICAgIG5mcy1leHBvcnQtcm9vdCBcCisgICAgYmFzaCBcCisgICAgIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmYjhjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYwpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIlRvb2wgZm9yIGFwcGx5aW5nIGEgcGF0Y2ggZmlsZSIKK0RFU0NSSVBUSU9OID0gInBhdGNoIHRha2VzIGEgcGF0Y2ggZmlsZSBjb250YWluaW5nIGEgZGlmZmVyZW5jZSBsaXN0aW5nIFwKK3Byb2R1Y2VkIGJ5IHRoZSBkaWZmIHByb2dyYW0gYW5kIGFwcGxpZXMgdGhvc2UgZGlmZmVyZW5jZXMgdG8gb25lIG9yIG1vcmUgXAorb3JpZ2luYWwgZmlsZXMsIHByb2R1Y2luZyBwYXRjaGVkIHZlcnNpb25zLiIKK1NFQ1RJT04gPSAidXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9wYXRjaC8iCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9wYXRjaC9wYXRjaC0ke1BWfS50YXIuZ3oiCitTID0gIiR7V09SS0RJUn0vcGF0Y2gtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAicGF0Y2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9kZWJpYW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9kZWJpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNzY0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaApAQCAtMCwwICsxLDEwNDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworLS0tIHBhdGNoLTIuNS45Lm9yaWcvbTQvaGFzaC5tNAorKysrIHBhdGNoLTIuNS45L200L2hhc2gubTQKK0BAIC0wLDAgKzEsMTUgQEAKKysjIGhhc2gubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0hBU0hdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9oYXNoLmMuCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RkbGliLmgpCisrICBBQ19IRUFERVJfU1REQk9PTAorKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShmcmVlIG1hbGxvYykKKytdKQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvbTQvbmFub3NlY29uZF9zdGF0Lm00CisrKysgcGF0Y2gtMi41LjkvbTQvbmFub3NlY29uZF9zdGF0Lm00CitAQCAtMCwwICsxLDM1IEBACisrQUNfREVGVU4oW2FnX0NIRUNLX05BTk9TRUNPTkRfU1RBVF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfbnNlY10sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7IF0sCisrCVthY19jdl9zdGF0X25zZWM9eWVzXSwKKysJW2FjX2N2X3N0YXRfbnNlYz1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9OU0VDLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgaGFzIG5hbm9zZWNvbmQgdGltZXN0YW1wcy5dKQorKyAgIGZpCisrCisrICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfdGltZXZhbF0sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8dGltZS5oPgorKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW0udHZfbnNlYyArIHN0LnN0X210aW0udHZfbnNlYyArIHN0LnN0X2N0aW0udHZfbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD15ZXNdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX1RJTUVWQUwsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBjb210YWlucyBzdHJ1Y3QgdGltZXZhbCdzLl0pCisrICAgZmldKQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBwYXRjaC0yLjUuOS9NYWtlZmlsZS5pbgorQEAgLTYyLDcgKzYyLDcgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyAKKyBMSUJTUkNTID0gZXJyb3IuYyBtYWxsb2MuYyBtZW1jaHIuYyBta2Rpci5jIFwKKy0JcmVhbGxvYy5jIHJtZGlyLmMgc3RyY2FzZWNtcC5jIHN0cm5jYXNlY21wLmMKKysJcmVhbGxvYy5jIHJtZGlyLmMgc3RyY2FzZWNtcC5jIHN0cm5jYXNlY21wLmMgaGFzaC5jCisgU1JDUyA9ICQoTElCU1JDUykgXAorIAlhZGRleHQuYyBhcmdtYXRjaC5jIGJhY2t1cGZpbGUuYyBcCisgCWJhc2VuYW1lLmMgZGlybmFtZS5jIFwKK0BAIC03OCwxMiArNzgsMTIgQEAKKyAJbWFrZXRpbWUuJChPQkpFWFQpIHBhcnRpbWUuJChPQkpFWFQpIFwKKyAJcGF0Y2guJChPQkpFWFQpIHBjaC4kKE9CSkVYVCkgXAorIAlxdW90ZS4kKE9CSkVYVCkgcXVvdGVhcmcuJChPQkpFWFQpIHF1b3Rlc3lzLiQoT0JKRVhUKSBcCistCXV0aWwuJChPQkpFWFQpIHZlcnNpb24uJChPQkpFWFQpIHhtYWxsb2MuJChPQkpFWFQpCisrCXV0aWwuJChPQkpFWFQpIHZlcnNpb24uJChPQkpFWFQpIHhtYWxsb2MuJChPQkpFWFQpIGhhc2guJChPQkpFWFQpCisgSERSUyA9IGFyZ21hdGNoLmggYmFja3VwZmlsZS5oIGNvbW1vbi5oIGRpcm5hbWUuaCBcCisgCWVycm9yLmggZ2V0b3B0LmggZ2V0dGV4dC5oIFwKKyAJaW5wLmggbWFrZXRpbWUuaCBwYXJ0aW1lLmggcGNoLmggXAorIAlxdW90ZS5oIHF1b3RlYXJnLmggcXVvdGVzeXMuaCBcCistCXVubG9ja2VkLWlvLmggdXRpbC5oIHZlcnNpb24uaCB4YWxsb2MuaAorKwl1bmxvY2tlZC1pby5oIHV0aWwuaCB2ZXJzaW9uLmggeGFsbG9jLmggaGFzaC5oCisgTUlTQyA9IEFVVEhPUlMgQ09QWUlORyBDaGFuZ2VMb2cgSU5TVEFMTCBNYWtlZmlsZS5pbiBORVdTIFJFQURNRSBcCisgCWFjbG9jYWwubTQgXAorIAljb25maWcuaGluIGNvbmZpZ3VyZSBjb25maWd1cmUuYWMgXAorLS0tIHBhdGNoLTIuNS45Lm9yaWcvYWNsb2NhbC5tNAorKysrIHBhdGNoLTIuNS45L2FjbG9jYWwubTQKK0BAIC0xLDMgKzEsMTA1OCBAQAorK2RubCBhY2xvY2FsLm00IGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS40LXA2CisrCisrZG5sIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NS04LCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrCisrZG5sIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorK2RubCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorK2RubCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisrZG5sIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKysjIGxpYi1wcmVmaXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9BUkdfV0lUSCBpcyBzeW5vbnltb3VzIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mLTIuMTMsIGFuZAorK2RubCBzaW1pbGFyIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mIDIuNTIuLi4yLjU3IGV4Y2VwdCB0aGF0IGlzIGRvZXNuJ3QKKytkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KKytpZmRlZihbQUNfSEVMUF9TVFJJTkddLAorK1tBQ19ERUZVTihbQUNfTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sW1skMl1dLFskM10sWyQ0XSldKV0sCisrW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKysKKytkbmwgQUNfTElCX1BSRUZJWCBhZGRzIHRvIHRoZSBDUFBGTEFHUyBhbmQgTERGTEFHUyB0aGUgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkCisrZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKKytkbmwgYSB1c2VyIHdpbGwgd2FudCBwYWNrYWdlcyB0byB1c2Ugb3RoZXIgcGFja2FnZXMgaGUgcHJldmlvdXNseSBpbnN0YWxsZWQKKytkbmwgd2l0aCB0aGUgc2FtZSAtLXByZWZpeCBvcHRpb24uCisrZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKKytkbmwgbGlicmFyaWVzLCBidXQgaXMgb3RoZXJ3aXNlIHZlcnkgY29udmVuaWVudC4KKytBQ19ERUZVTihbQUNfTElCX1BSRUZJWF0sCisrWworKyAgQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJfTElOS0ZMQUdTXSkKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYi1wcmVmaXhbPURJUl0gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWItcHJlZml4ICAgIGRvbid0IHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisrICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgaGF2ZWl0PQorKyAgICAgIGZvciB4IGluICRMREZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvbGliIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSR7TERGTEFHUzorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX1BSRVBBUkVfUFJFRklYIGNyZWF0ZXMgdmFyaWFibGVzIGFjbF9maW5hbF9wcmVmaXgsCisrZG5sIGFjbF9maW5hbF9leGVjX3ByZWZpeCwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdoaWNoICRwcmVmaXggYW5kCisrZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdLAorK1sKKysgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorKyAgZG5sIGF0IHRoZSBlbmQgb2YgY29uZmlndXJlLgorKyAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisrICBmaQorKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworKyAgZWxzZQorKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGZpCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorKworK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCisrZG5sIHZhcmlhYmxlcyBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGJvdW5kIHRvIHRoZSB2YWx1ZXMgdGhleSB3aWxsIGhhdmUKKytkbmwgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKytBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKKytbCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorKyAgJDEKKysgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisrXSkKKysKKysjIGxpYi1saW5rLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisrZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCisrZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCisrICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorKyAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICBdKQorKyAgTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbGlicyIKKysgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorKyAgSU5DW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgZG5sIEFsc28gc2V0IEhBVkVfTElCW11OQU1FIHNvIHRoYXQgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiByZXVzZSB0aGUKKysgIGRubCByZXN1bHRzIG9mIHRoaXMgc2VhcmNoIHdoZW4gdGhpcyBsaWJyYXJ5IGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5LgorKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisrICB1bmRlZmluZShbTmFtZV0pCisrICB1bmRlZmluZShbTkFNRV0pCisrXSkKKysKKytkbmwgQUNfTElCX0hBVkVfTElOS0ZMQUdTKG5hbWUsIGRlcGVuZGVuY2llcywgaW5jbHVkZXMsIHRlc3Rjb2RlKQorK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorK2RubCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIHRvZ2V0aGVyIHdpdGggdGhlIHNwZWNpZmllZCBpbmNsdWRlIGZpbGVzIGFuZAorK2RubCB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBzcGVjaWZpZWQgdGVzdGNvZGUuIElmIGZvdW5kLCBpdAorK2RubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCisrZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisrZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworK2RubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytBQ19ERUZVTihbQUNfTElCX0hBVkVfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQorKyAgZG5sIGFjY29yZGluZ2x5LgorKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrCisrICBkbmwgQWRkICRJTkNbXU5BTUUgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisrICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYltdTmFtZS1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4KKysgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZV0sIFsKKysgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgTElCUz0iJExJQlMgJExJQltdTkFNRSIKKysgICAgQUNfVFJZX0xJTksoWyQzXSwgWyQ0XSwgW2FjX2N2X2xpYltdTmFtZT15ZXNdLCBbYWNfY3ZfbGliW11OYW1lPW5vXSkKKysgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgIF0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfbGliW11OYW1lIiA9IHllczsgdGhlbgorKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKysgICAgQUNfREVGSU5FKFtIQVZFX0xJQl1OQU1FLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAkMSBsaWJyYXJ5Ll0pCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSkKKysgICAgQUNfTVNHX1JFU1VMVChbJExJQltdTkFNRV0pCisrICBlbHNlCisrICAgIEhBVkVfTElCW11OQU1FPW5vCisrICAgIGRubCBJZiAkTElCW11OQU1FIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQKKysgICAgZG5sICRJTkNbXU5BTUUgZWl0aGVyLgorKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCisrICAgIExJQltdTkFNRT0KKysgICAgTFRMSUJbXU5BTUU9CisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUUpCisrICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CisrZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCisrZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytBQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkgICAgICAgICAgICAgICAgZG5sIHdlIHVzZSAkQ0MsICRHQ0MsICRMREZMQUdTCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSAgICAgICAgIGRubCB3ZSB1c2UgJGhvc3QKKysgIEFDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKSBkbmwgd2UgdXNlICRhY19hdXhfZGlyCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworKyAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCisrICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAorKyAgICAuIC4vY29uZnRlc3Quc2gKKysgICAgcm0gLWYgLi9jb25mdGVzdC5zaAorKyAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorKyAgXSkKKysgIHdsPSIkYWNsX2N2X3dsIgorKyAgbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIHNobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorKyAgaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKysgIGhhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKysgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisrICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorKyAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKKysgICAgOiwgZW5hYmxlX3JwYXRoPXllcykKKytdKQorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCisrWworKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKysgIHVzZV9hZGRpdGlvbmFsPXllcworKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgIF0pCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorK1sKKysgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisrICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKysgICAgZWxzZQorKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICAgICAgICBdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKysgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisrICAgICAgZmkKKysgICAgZmkKKytdKQorKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisrICBkbmwgJExERkxBR1MuIFVzaW5nIGJyZWFkdGgtZmlyc3Qtc2VhY2guCisrICBMSUJbXU5BTUU9CisrICBMVExJQltdTkFNRT0KKysgIElOQ1tdTkFNRT0KKysgIHJwYXRoZGlycz0KKysgIGx0cnBhdGhkaXJzPQorKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorKyAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCisrICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisrICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgorKyAgICBuYW1lc19uZXh0X3JvdW5kPQorKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKysgICAgICBhbHJlYWR5X2hhbmRsZWQ9CisrICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKysgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKysgICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKysgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKysgICAgICAgIGRubCBTZWUgaWYgaXQgd2FzIGFscmVhZHkgbG9jYXRlZCBieSBhbiBlYXJsaWVyIEFDX0xJQl9MSU5LRkxBR1MKKysgICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KKysgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisrICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kdmFsdWUiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgQW4gZWFybGllciBjYWxsIHRvIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBoYXMgZGV0ZXJtaW5lZAorKyAgICAgICAgICAgIGRubCB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGV4aXN0LiBTbyBqdXN0IGRyb3AgaXQuCisrICAgICAgICAgICAgOgorKyAgICAgICAgICBmaQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGxpYiRuYW1lIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQgJExERkxBR1MKKysgICAgICAgICAgZG5sIGFuZCB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRS8kTFRMSUJOQU1FLgorKyAgICAgICAgICBmb3VuZF9kaXI9CisrICAgICAgICAgIGZvdW5kX2xhPQorKyAgICAgICAgICBmb3VuZF9zbz0KKysgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorKyAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cworKyAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeSBpbnRvIHRoZSBleGVjdXRhYmxlJ3MgcnVucGF0aCwgdW5sZXNzIGl0J3MgdGhlCisrICAgICAgICAgICAgICBkbmwgc3RhbmRhcmQgL3Vzci9saWIuCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBObyBoYXJkY29kaW5nIGlzIG5lZWRlZC4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysgICAgICAgICAgICAgICAgICBkbmwgcmVzdWx0aW5nIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBkbmwgUmVseSBvbiAiLUwkZm91bmRfZGlyIi4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKKysgICAgICAgICAgICAgICAgICAgIGRubCBvciB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRQorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRoYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIHZlcnkgb2xkIHN5c3RlbXMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX2EiCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKysgICAgICAgICAgICAgICAgZG5sIGZhbGxiYWNrLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBBc3N1bWUgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5lYXJieS4KKysgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisrICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KKysgICAgICAgICAgICAgICovbGliIHwgKi9saWIvKQorKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgJ3MsL2xpYi8qJCwsJ2AKKysgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorKyAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisrICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorKyAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKKysgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRJTkNOQU1FLAorKyAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgSU5DW11OQU1FPSIke0lOQ1tdTkFNRX0ke0lOQ1tdTkFNRTorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIExvb2sgZm9yIGRlcGVuZGVuY2llcy4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUmVhZCB0aGUgLmxhIGZpbGUuIEl0IGRlZmluZXMgdGhlIHZhcmlhYmxlcworKyAgICAgICAgICAgICAgZG5sIGRsbmFtZSwgbGlicmFyeV9uYW1lcywgb2xkX2xpYnJhcnksIGRlcGVuZGVuY3lfbGlicywgY3VycmVudCwKKysgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisrICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKysgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorKyAgICAgICAgICAgICAgZG5sIFdlIHVzZSBvbmx5IGRlcGVuZGVuY3lfbGlicy4KKysgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKysgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKysgICAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJExJQk5BTUUsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMVExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtUiopCisrICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgLWwqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKi5sYSkKKysgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4gVGhyb3cgYXdheSB0aGUgLmxhJ3MKKysgICAgICAgICAgICAgICAgICAgIGRubCBkaXJlY3Rvcnk7IGl0IGlzIGFscmVhZHkgY29udGFpbmVkIGluIGEgcHJlY2VkaW5nIC1MCisrICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgICAgICAgIGRubCBNb3N0IGxpa2VseSBhbiBpbW1lZGlhdGUgbGlicmFyeSBuYW1lLgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCisrICAgICAgICAgICAgZG5sIGtub3duIHRvIHRoZSBsaW5rZXIgYW5kIHJ1bnRpbWUgbG9hZGVyLiAoQWxsIHRoZSBzeXN0ZW0KKysgICAgICAgICAgICBkbmwgZGlyZWN0b3JpZXMga25vd24gdG8gdGhlIGxpbmtlciBzaG91bGQgYWxzbyBiZSBrbm93biB0byB0aGUKKysgICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQorKyAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGRvbmUKKysgIGRvbmUKKysgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisrICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorKyAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorKyAgICAgIGFsbGRpcnM9CisrICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICBkb25lCisrICAgICAgZG5sIE5vdGU6IGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisrICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisrICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICBlbHNlCisrICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisrICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICAgIGRvbmUKKysgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgZG5sIFdoZW4gdXNpbmcgbGlidG9vbCwgdGhlIG9wdGlvbiB0aGF0IHdvcmtzIGZvciBib3RoIGxpYnJhcmllcyBhbmQKKysgICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tUiRmb3VuZF9kaXIiCisrICAgIGRvbmUKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX0FQUEVORFRPVkFSKFZBUiwgQ09OVEVOVFMpIGFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIENPTlRFTlRTIHRvIFZBUiwKKytkbmwgdW5sZXNzIGFscmVhZHkgcHJlc2VudCBpbiBWQVIuCisrZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKKytkbmwgY29udGFpbnMgdHdvIG9yIHRocmVlIGNvbnNlY3V0aXZlIGVsZW1lbnRzIHRoYXQgYmVsb25nIHRvZ2V0aGVyLgorK0FDX0RFRlVOKFtBQ19MSUJfQVBQRU5EVE9WQVJdLAorK1sKKysgIGZvciBlbGVtZW50IGluIFskMl07IGRvCisrICAgIGhhdmVpdD0KKysgICAgZm9yIHggaW4gJFskMV07IGRvCisrICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKysgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgIGJyZWFrCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgIFskMV09IiR7WyQxXX0ke1skMV06KyB9JGVsZW1lbnQiCisrICAgIGZpCisrICBkb25lCisrXSkKKysKKysjIGxpYi1sZC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorK2RubCB3aXRoIHJlcGxhY2VtZW50cyBzL0FDXy9BQ19MSUIvIGFuZCBzL2x0X2N2L2FjbF9jdi8gdG8gYXZvaWQgY29sbGlzaW9uCisrZG5sIHdpdGggbGlidG9vbC5tNC4KKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgd2l0aF9nbnVfbGQgdG8geWVzIG9yIG5vLgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF9HTlVdLAorK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCisrWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKysqR05VKiB8ICond2l0aCBCRkQnKikKKysgIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMgOzsKKysqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7CisrZXNhY10pCisrd2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorK10pCisrCisrZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIExELgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCisrW0FDX0FSR19XSVRIKGdudS1sZCwKKytbICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dXSwKKyt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorK2FjX3Byb2c9bGQKKytpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5IEdDQ10pCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqKQorKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKysgICopCisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX3Byb2cgaW4KKysgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisrICAgIFtbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopXQorKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCisrICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKKysgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKysJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorKyAgICAgIGRvbmUKKysgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKysgICAgICA7OworKyAgIiIpCisrICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorKyAgICBhY19wcm9nPWxkCisrICAgIDs7CisrICAqKQorKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisrICAgIHdpdGhfZ251X2xkPXVua25vd24KKysgICAgOzsKKysgIGVzYWMKKytlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCisrZWxzZQorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCisrZmkKKytBQ19DQUNIRV9WQUwoYWNsX2N2X3BhdGhfTEQsCisrW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKysgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisrICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKysgICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKysgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisrICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPCAvZGV2L251bGxgIGluCisrICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKKysgICAgICAqKQorKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysgIGRvbmUKKysgIElGUz0iJGFjX3NhdmVfaWZzIgorK2Vsc2UKKysgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorK2ZpXSkKKytMRD0iJGFjbF9jdl9wYXRoX0xEIgorK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoJExEKQorK2Vsc2UKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKyt0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorK0FDX0xJQl9QUk9HX0xEX0dOVQorK10pCisrCisrIyBpc2MtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS4yKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgd2l0aCBhdXRvY29uZi0yLjUzIGFuZCBuZXdlci4gIFJlbW92ZSBpdCBpbiAyMDA1LgorKworKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisrIyBDdXJyZW50bHkgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdXRvY29uZiBtYWNybworKyMgYmVjYXVzZSBnZXR0ZXh0J3MgZ2V0dGV4dC5tNCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGF1dG9tYWtlIHBhY2thZ2UpCisrIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorKyMgZ2l2ZSB0aGVzZSBkaWFnbm9zdGljczoKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX0NPTVBJTEUgd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrCisrdW5kZWZpbmUoW0FDX0lTQ19QT1NJWF0pCisrCisrQUNfREVGVU4oW0FDX0lTQ19QT1NJWF0sCisrICBbCisrICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisrICAgIEFDX0NIRUNLX0xJQihjcG9zaXgsIHN0cmVycm9yLCBbTElCUz0iJExJQlMgLWxjcG9zaXgiXSkKKysgIF0KKyspCisrCisrIyBDaGVjayBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5LgorKworKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrIyAwMjExMS0xMzA3LCBVU0EuCisrCisrIyBQcmVwYXJlIGZvciBzdWJzdGl0dXRpbmcgPHN0ZGJvb2wuaD4gaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4KKysKKytBQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQk9PTF0pCisrCisrICAjIERlZmluZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorKworKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuCisrICAgIFNUREJPT0xfSD0nJworKyAgZWxzZQorKyAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcKKysgIGZpCisrICBBQ19TVUJTVChbU1REQk9PTF9IXSkKKysKKysgIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgorKyAgICBIQVZFX19CT09MPTEKKysgIGVsc2UKKysgICAgSEFWRV9fQk9PTD0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfX0JPT0xdKQorK10pCisrCisrIyBUaGlzIG1hY3JvIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTQuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgorKyMgaGF2ZSB0aGlzIG1hY3JvIGJ1aWx0LWluLgorKworK0FDX0RFRlVOKFtBQ19IRUFERVJfU1REQk9PTF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTldLAorKyAgICAgW2FjX2N2X2hlYWRlcl9zdGRib29sX2hdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysJICAjaWZuZGVmIGJvb2wKKysJICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIHRydWUKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgdHJ1ZSAhPSAxCisrCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCisrCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCisrCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CisrCisrCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworKwkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisrCSAgYm9vbCBlID0gJnM7CisrCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisrCSAgY2hhciBnW3RydWVdOworKwkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisrCSAgY2hhciBpW3NpemVvZiBzLnRdOworKwldLAorKwlbIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7IF0sCisrCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllc10sCisrCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vXSldKQorKyAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCisrICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1REQk9PTF9ILCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RkYm9vbC5oIGNvbmZvcm1zIHRvIEM5OS5dKQorKyAgIGZpXSkKKysKKysjc2VyaWFsIDUKKysKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcKKysKKytkbmwgRGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgaWYgYHN0cnVjdCB1dGltYnVmJyBpcyBkZWNsYXJlZCAtLQorK2RubCB1c3VhbGx5IGluIDx1dGltZS5oPi4KKytkbmwgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLgorKworK0FDX0RFRlVOKFtqbV9DSEVDS19UWVBFX1NUUlVDVF9VVElNQlVGXSwKKytbCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3lzL3RpbWUuaCB1dGltZS5oKQorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1RJTUVdKQorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgdXRpbWJ1Zl0sIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiwKKysgICAgW0FDX1RSWV9DT01QSUxFKAorKyAgICAgIFsKKysjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisrIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbHNlCisrIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKysjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyMgZWxzZQorKyMgIGluY2x1ZGUgPHRpbWUuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2lmZGVmIEhBVkVfVVRJTUVfSAorKyMgaW5jbHVkZSA8dXRpbWUuaD4KKysjZW5kaWYKKysgICAgICBdLAorKyAgICAgIFtzdGF0aWMgc3RydWN0IHV0aW1idWYgeDsgeC5hY3RpbWUgPSB4Lm1vZHRpbWU7XSwKKysgICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzLAorKyAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubykKKysgICAgXSkKKysKKysgIGlmIHRlc3QgJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfVVRJTUJVRiwgMSwKKysgICAgICBbRGVmaW5lIGlmIHN0cnVjdCB1dGltYnVmIGlzIGRlY2xhcmVkIC0tIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorKyAgICAgICBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuIF0pCisrICBmaQorK10pCisrCisrIyBvbmNlb25seS5tNCBzZXJpYWwgMworK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgVGhpcyBmaWxlIGRlZmluZXMgc29tZSAib25jZSBvbmx5IiB2YXJpYW50cyBvZiBzdGFuZGFyZCBhdXRvY29uZiBtYWNyb3MuCisrZG5sICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfSEVBREVSUworK2RubCAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0ZVTkNTCisrZG5sICAgQUNfQ0hFQ0tfREVDTFNfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfREVDTFMKKytkbmwgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pICBsaWtlICBBQ19IRUFERVJfU1REQworK2RubCBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGNoZWNrIGZvciBlYWNoIG9mIHRoZSBoZWFkZXJzL2Z1bmN0aW9ucy9kZWNscworK2RubCB3aWxsIGJlIHB1dCBvbmx5IG9uY2UgaW50byB0aGUgJ2NvbmZpZ3VyZScgZmlsZS4gSXQga2VlcHMgdGhlIHNpemUgb2YKKytkbmwgdGhlICdjb25maWd1cmUnIGZpbGUgZG93biwgYW5kIGF2b2lkcyByZWR1bmRhbnQgb3V0cHV0IHdoZW4gJ2NvbmZpZ3VyZScKKytkbmwgaXMgcnVuLgorK2RubCBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY2hlY2tzIGNhbm5vdCBiZSBjb25kaXRpb25hbGl6ZWQuIElmIHlvdSB3cml0ZQorK2RubCAgIGlmIHNvbWVfY29uZGl0aW9uOyB0aGVuIGdsX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpOyBmaQorK2RubCBpbnNpZGUgYW4gQUNfREVGVU5lZCBmdW5jdGlvbiwgdGhlIGdsX0NIRUNLX0hFQURFUlMgbWFjcm8gY2FsbCBleHBhbmRzIHRvCisrZG5sIGVtcHR5LCBhbmQgdGhlIGNoZWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBib2R5IG9mIHRoZSBBQ19ERUZVTmVkCisrZG5sIGZ1bmN0aW9uLgorKworK2RubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCisrQUNfUFJFUkVRKDIuNTQpCisrCisrIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfSEVBREVSUyhIRUFERVIxIEhFQURFUjIgLi4uKS4KKytBQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfSEVBREVSX05BTUVdLCBbJDFdLCBbCisrICAgIEFDX0RFRlVOKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpLCBbCisrICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhnbF9IRUFERVJfTkFNRSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSkKKysgIF0pCisrXSkKKysKKysjIEFDX0NIRUNLX0ZVTkNTX09OQ0UoRlVOQzEgRlVOQzIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCisrIyBBQ19DSEVDS19GVU5DUyhGVU5DMSBGVU5DMiAuLi4pLgorK0FDX0RFRlVOKFtBQ19DSEVDS19GVU5DU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfRlVOQ19OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSksIFsKKysgICAgICBBQ19DSEVDS19GVU5DUyhtNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCisrICBdKQorK10pCisrCisrIyBBQ19DSEVDS19ERUNMU19PTkNFKERFQ0wxIERFQ0wyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfREVDTFMoREVDTDEsIERFQ0wyLCAuLi4pLgorK0FDX0RFRlVOKFtBQ19DSEVDS19ERUNMU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfREVDTF9OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSksIFsKKysgICAgICBBQ19DSEVDS19ERUNMUyhtNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCisrICBdKQorK10pCisrCisgIyBiYWNrdXBmaWxlLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMjEsNiArMTA3Niw3IEBACisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UobGltaXRzLmggc3RyaW5nLmggdW5pc3RkLmgpCisgICBBQ19DSEVDS19GVU5DUyhwYXRoY29uZikKKyBdKQorKworICNzZXJpYWwgNQorIAorIGRubCBGcm9tIEppbSBNZXllcmluZy4KK0BAIC02MywzMSArMTExOSw3IEBACisgICAgZmkKKyAgIF0KKyApCistIyBkaXJuYW1lLm00IHNlcmlhbCAxCistZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9ESVJOQU1FXSwKKy1bCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5oLgorLSAgQUNfUkVRVUlSRShbam1fQUNfRE9TXSkKKy0KKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvYmFzZW5hbWUuYy4KKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKy0KKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJpcHNsYXNoLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistXSkKKyAjc2VyaWFsIDUKKyAKKyAjIERlZmluZSBzb21lIG1hY3JvcyByZXF1aXJlZCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBjb2RlIGluIGxpYi8qLmMKK0BAIC0xNDEsNiArMTE3MywzMyBAQAorICAgICAgIFtEZWZpbmUgaWYgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgbWF5IGFsc28gc2VydmUgYXMgYSBmaWxlIG5hbWUKKyAgICAgICAgY29tcG9uZW50IHNlcGFyYXRvci5dKQorICAgXSkKKysKKysjIGRpcm5hbWUubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0RJUk5BTUVdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmguCisrICBBQ19SRVFVSVJFKFtqbV9BQ19ET1NdKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Rpcm5hbWUuYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9iYXNlbmFtZS5jLgorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cmlwc2xhc2guYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKytdKQorKworICNzZXJpYWwgNworIAorIEFDX0RFRlVOKFtnbF9FUlJPUl0sCitAQCAtMTU5LDcgKzEyMTgsNjcgQEAKKyAgIEFDX0NIRUNLX0RFQ0xTKFtzdHJlcnJvcl0pCisgICBBQ19GVU5DX1NUUkVSUk9SX1IKKyBdKQorLSMgZ2V0b3B0Lm00IHNlcmlhbCAxCisrCisrIyBtZW1jaHIubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ0hSXSwKKytbCisrICBBQ19SRVBMQUNFX0ZVTkNTKG1lbWNocikKKysgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0gbm87IHRoZW4KKysgICAgam1fUFJFUkVRX01FTUNIUgorKyAgZmkKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtY2hyLmMuCisrQUNfREVGVU4oW2ptX1BSRVJFUV9NRU1DSFJdLCBbCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0UobGltaXRzLmggc3RkbGliLmgpCisrICBBQ19DSEVDS19IRUFERVJTKGJwLXN5bS5oKQorK10pCisrCisrIyBybWRpci5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfRlVOQ19STURJUl0sCisrWworKyAgQUNfUkVQTEFDRV9GVU5DUyhybWRpcikKKysgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcm1kaXIgPSBubzsgdGhlbgorKyAgICBnbF9QUkVSRVFfUk1ESVIKKysgIGZpCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JtZGlyLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9STURJUl0sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVEFUXSkKKysgIDoKKytdKQorKworKworKyMgZ2V0b3B0Lm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9HRVRPUFRdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9nZXRvcHQuYy4KKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKytdKQorKworKyMgeGFsbG9jLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorQEAgLTE2NywxMSArMTI4NiwyNSBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9HRVRPUFRdLAorK0FDX0RFRlVOKFtnbF9YQUxMT0NdLAorIFsKKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9nZXRvcHQuYy4KKysgIGdsX1BSRVJFUV9YTUFMTE9DCisrICBnbF9QUkVSRVFfWFNUUkRVUAorK10pCisrCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94bWFsbG9jLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9YTUFMTE9DXSwgWworKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfUkVRVUlSRShbam1fRlVOQ19NQUxMT0NdKQorKyAgQUNfUkVRVUlSRShbam1fRlVOQ19SRUFMTE9DXSkKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHN0cmR1cC5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfWFNUUkRVUF0sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKyBdKQorKworICMgbWFsbG9jLm00IHNlcmlhbCA3CisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMTk3LDY2ICsxMzMwLDggQEAKKyBBQ19ERUZVTihbZ2xfUFJFUkVRX01BTExPQ10sIFsKKyAgIDoKKyBdKQorLSMgbWJydG93Yy5tNCBzZXJpYWwgNQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorLQorLWRubCBGcm9tIFBhdWwgRWdnZXJ0CistCistZG5sIFRoaXMgZmlsZSBjYW4gYmUgcmVtb3ZlZCwgYW5kIGptX0ZVTkNfTUJSVE9XQyByZXBsYWNlZCB3aXRoCistZG5sIEFDX0ZVTkNfTUJSVE9XQywgd2hlbiBhdXRvY29uZiAyLjU3IGNhbiBiZSBhc3N1bWVkIGV2ZXJ5d2hlcmUuCistCistQUNfREVGVU4oW2ptX0ZVTkNfTUJSVE9XQ10sCistWworLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZF0sCistICAgIGptX2N2X2Z1bmNfbWJydG93YywKKy0gICAgW0FDX1RSWV9MSU5LKAorLSAgICAgICBbI2luY2x1ZGUgPHdjaGFyLmg+XSwKKy0gICAgICAgW21ic3RhdGVfdCBzdGF0ZTsgcmV0dXJuICEgKHNpemVvZiBzdGF0ZSAmJiBtYnJ0b3djKTtdLAorLSAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9eWVzLAorLSAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9bm8pXSkKKy0gIGlmIHRlc3QgJGptX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9NQlJUT1dDLCAxLAorLSAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCistICBmaQorLV0pCistIyBtYnN0YXRlX3QubTQgc2VyaWFsIDkKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCistCistIyBGcm9tIFBhdWwgRWdnZXJ0LgorLQorLSMgQmVPUyA1IGhhcyA8d2NoYXIuaD4gYnV0IGRvZXMgbm90IGRlZmluZSBtYnN0YXRlX3QsCistIyBzbyB5b3UgY2FuJ3QgZGVjbGFyZSBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgorLSMgQ2hlY2sgZm9yIHRoaXMgaW5jb21wYXRpYmlsaXR5IHdpdGggU3RhbmRhcmQgQy4KKyAKKy0jIEFDX1RZUEVfTUJTVEFURV9UCistIyAtLS0tLS0tLS0tLS0tLS0tLQorLUFDX0RFRlVOKFtBQ19UWVBFX01CU1RBVEVfVF0sCistICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBhY19jdl90eXBlX21ic3RhdGVfdCwKKy0gICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0JW0FDX0xBTkdfUFJPR1JBTSgKKy0JICAgW0FDX0lOQ0xVREVTX0RFRkFVTFQKKy0jCSAgICBpbmNsdWRlIDx3Y2hhci5oPl0sCistCSAgIFttYnN0YXRlX3QgeDsgcmV0dXJuIHNpemVvZiB4O10pXSwKKy0JW2FjX2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCistCVthY19jdl90eXBlX21ic3RhdGVfdD1ub10pXSkKKy0gICBpZiB0ZXN0ICRhY19jdl90eXBlX21ic3RhdGVfdCA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKFtIQVZFX01CU1RBVEVfVF0sIDEsCistCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC5dKQorLSAgIGVsc2UKKy0gICAgIEFDX0RFRklORShbbWJzdGF0ZV90XSwgaW50LAorLQkgICAgICAgW0RlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS5dKQorLSAgIGZpXSkKKy0jIG1lbWNoci5tNCBzZXJpYWwgMQorKyMgcmVhbGxvYy5tNCBzZXJpYWwgNworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK0BAIC0yNjQsMTE2ICsxMzM5LDI0IEBACisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ0hSXSwKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCisrZG5sIERldGVybWluZSB3aGV0aGVyIHJlYWxsb2Mgd29ya3Mgd2hlbiBib3RoIGFyZ3VtZW50cyBhcmUgMC4KKytkbmwgSWYgaXQgZG9lc24ndCwgYXJyYW5nZSB0byB1c2UgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX1JFQUxMT0NdLAorIFsKKy0gIEFDX1JFUExBQ0VfRlVOQ1MobWVtY2hyKQorLSAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1jaHIgPSBubzsgdGhlbgorLSAgICBqbV9QUkVSRVFfTUVNQ0hSCisrICBBQ19SRVFVSVJFKFtBQ19GVU5DX1JFQUxMT0NdKQorKyAgZG5sIGF1dG9jb25mIDwgMi41NyB1c2VkIHRoZSBzeW1ib2wgYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzLgorKyAgaWYgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA9IFhubyB8fCB0ZXN0IFgiJGFjX2N2X2Z1bmNfcmVhbGxvY193b3JrcyIgPSBYbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX1JFQUxMT0MKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbWNoci5jLgorLUFDX0RFRlVOKFtqbV9QUkVSRVFfTUVNQ0hSXSwgWworLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKGxpbWl0cy5oIHN0ZGxpYi5oKQorLSAgQUNfQ0hFQ0tfSEVBREVSUyhicC1zeW0uaCkKKy1dKQorLSNzZXJpYWwgMQorLQorLWRubCBGcm9tIE11bWl0IEtoYW4gYW5kIFBhdWwgRWdnZXJ0CistZG5sIERldGVybWluZSB3aGV0aGVyIG1rZGlyIGFjY2VwdHMgb25seSBvbmUgYXJndW1lbnQgaW5zdGVhZCBvZiB0aGUgdXN1YWwgdHdvLgorLQorLUFDX0RFRlVOKFtQQVRDSF9GVU5DX01LRElSX1RBS0VTX09ORV9BUkddLAorLSAgW0FDX0NIRUNLX0ZVTkNTKG1rZGlyKQorLSAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50XSwKKy0gICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcsCistICAgICBbcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz1ubworLSAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistCSAgXSwKKy0JICBbbWtkaXIgKCIuIiwgMCk7XSwKKy0JICAsCistCSAgW0FDX1RSWV9DT01QSUxFKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistCSAgICAgXSwKKy0JICAgICBbbWtkaXIgKCIuIik7XSwKKy0JICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPXllcworLQkgICldCistCSkKKy0gICAgICBmaQorLSAgICAgXQorLSAgICkKKy0gICBpZiB0ZXN0ICRwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnID0geWVzOyB0aGVuCistICAgICBBQ19ERUZJTkUoW01LRElSX1RBS0VTX09ORV9BUkddLCAxLAorLSAgICAgICBbRGVmaW5lIGlmIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50Ll0pCistICAgZmkKKy0gIF0KKy0pCistIyBvbmNlb25seS5tNCBzZXJpYWwgMworLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0KKy1kbmwgVGhpcyBmaWxlIGRlZmluZXMgc29tZSAib25jZSBvbmx5IiB2YXJpYW50cyBvZiBzdGFuZGFyZCBhdXRvY29uZiBtYWNyb3MuCistZG5sICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfSEVBREVSUworLWRubCAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0ZVTkNTCistZG5sICAgQUNfQ0hFQ0tfREVDTFNfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfREVDTFMKKy1kbmwgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pICBsaWtlICBBQ19IRUFERVJfU1REQworLWRubCBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGNoZWNrIGZvciBlYWNoIG9mIHRoZSBoZWFkZXJzL2Z1bmN0aW9ucy9kZWNscworLWRubCB3aWxsIGJlIHB1dCBvbmx5IG9uY2UgaW50byB0aGUgJ2NvbmZpZ3VyZScgZmlsZS4gSXQga2VlcHMgdGhlIHNpemUgb2YKKy1kbmwgdGhlICdjb25maWd1cmUnIGZpbGUgZG93biwgYW5kIGF2b2lkcyByZWR1bmRhbnQgb3V0cHV0IHdoZW4gJ2NvbmZpZ3VyZScKKy1kbmwgaXMgcnVuLgorLWRubCBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY2hlY2tzIGNhbm5vdCBiZSBjb25kaXRpb25hbGl6ZWQuIElmIHlvdSB3cml0ZQorLWRubCAgIGlmIHNvbWVfY29uZGl0aW9uOyB0aGVuIGdsX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpOyBmaQorLWRubCBpbnNpZGUgYW4gQUNfREVGVU5lZCBmdW5jdGlvbiwgdGhlIGdsX0NIRUNLX0hFQURFUlMgbWFjcm8gY2FsbCBleHBhbmRzIHRvCistZG5sIGVtcHR5LCBhbmQgdGhlIGNoZWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBib2R5IG9mIHRoZSBBQ19ERUZVTmVkCistZG5sIGZ1bmN0aW9uLgorLQorLWRubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCistQUNfUFJFUkVRKDIuNTQpCistCistIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorLSMgQUNfQ0hFQ0tfSEVBREVSUyhIRUFERVIxIEhFQURFUjIgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSU19PTkNFXSwgWworLSAgOgorLSAgQUNfRk9SRUFDSChbZ2xfSEVBREVSX05BTUVdLCBbJDFdLCBbCistICAgIEFDX0RFRlVOKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpLCBbCistICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhnbF9IRUFERVJfTkFNRSkKKy0gICAgXSkKKy0gICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSkKKy0gIF0pCistXSkKKy0KKy0jIEFDX0NIRUNLX0ZVTkNTX09OQ0UoRlVOQzEgRlVOQzIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCistIyBBQ19DSEVDS19GVU5DUyhGVU5DMSBGVU5DMiAuLi4pLgorLUFDX0RFRlVOKFtBQ19DSEVDS19GVU5DU19PTkNFXSwgWworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcmVhbGxvYy5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfUkVBTExPQ10sIFsKKyAgIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0ZVTkNfTkFNRV0sIFskMV0sIFsKKy0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pLCBbCistICAgICAgQUNfQ0hFQ0tfRlVOQ1MobTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorLSAgXSkKKyBdKQorIAorLSMgQUNfQ0hFQ0tfREVDTFNfT05DRShERUNMMSBERUNMMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKy0jIEFDX0NIRUNLX0RFQ0xTKERFQ0wxLCBERUNMMiwgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfREVDTFNfT05DRV0sIFsKKy0gIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0RFQ0xfTkFNRV0sIFskMV0sIFsKKy0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pLCBbCistICAgICAgQUNfQ0hFQ0tfREVDTFMobTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorLSAgXSkKKy1dKQorICMgcXVvdGUubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC0zODcsNiArMTM3MCw3IEBACisgICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcXVvdGUuYy4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdGRkZWYuaCkKKyBdKQorKworICMgcXVvdGVhcmcubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC00MDMsMzIgKzEzODcsNjkgQEAKKyAgIEFDX1RZUEVfTUJTVEFURV9UCisgICBqbV9GVU5DX01CUlRPV0MKKyBdKQorLSMgcmVhbGxvYy5tNCBzZXJpYWwgNworLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBtYnN0YXRlX3QubTQgc2VyaWFsIDkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyBkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisgZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistZG5sIEZyb20gSmltIE1leWVyaW5nLgorLWRubCBEZXRlcm1pbmUgd2hldGhlciByZWFsbG9jIHdvcmtzIHdoZW4gYm90aCBhcmd1bWVudHMgYXJlIDAuCistZG5sIElmIGl0IGRvZXNuJ3QsIGFycmFuZ2UgdG8gdXNlIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KKysjIEZyb20gUGF1bCBFZ2dlcnQuCisgCistQUNfREVGVU4oW2ptX0ZVTkNfUkVBTExPQ10sCisrIyBCZU9TIDUgaGFzIDx3Y2hhci5oPiBidXQgZG9lcyBub3QgZGVmaW5lIG1ic3RhdGVfdCwKKysjIHNvIHlvdSBjYW4ndCBkZWNsYXJlIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCisrIyBDaGVjayBmb3IgdGhpcyBpbmNvbXBhdGliaWxpdHkgd2l0aCBTdGFuZGFyZCBDLgorKworKyMgQUNfVFlQRV9NQlNUQVRFX1QKKysjIC0tLS0tLS0tLS0tLS0tLS0tCisrQUNfREVGVU4oW0FDX1RZUEVfTUJTVEFURV9UXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG1ic3RhdGVfdF0sIGFjX2N2X3R5cGVfbWJzdGF0ZV90LAorKyAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKwlbQUNfTEFOR19QUk9HUkFNKAorKwkgICBbQUNfSU5DTFVERVNfREVGQVVMVAorKyMJICAgIGluY2x1ZGUgPHdjaGFyLmg+XSwKKysJICAgW21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7XSldLAorKwlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzXSwKKysJW2FjX2N2X3R5cGVfbWJzdGF0ZV90PW5vXSldKQorKyAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoW0hBVkVfTUJTVEFURV9UXSwgMSwKKysJICAgICAgIFtEZWZpbmUgdG8gMSBpZiA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzdGF0ZV90Ll0pCisrICAgZWxzZQorKyAgICAgQUNfREVGSU5FKFttYnN0YXRlX3RdLCBpbnQsCisrCSAgICAgICBbRGVmaW5lIHRvIGEgdHlwZSBpZiA8d2NoYXIuaD4gZG9lcyBub3QgZGVmaW5lLl0pCisrICAgZmldKQorKworKyMgbWJydG93Yy5tNCBzZXJpYWwgNQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0CisrCisrZG5sIFRoaXMgZmlsZSBjYW4gYmUgcmVtb3ZlZCwgYW5kIGptX0ZVTkNfTUJSVE9XQyByZXBsYWNlZCB3aXRoCisrZG5sIEFDX0ZVTkNfTUJSVE9XQywgd2hlbiBhdXRvY29uZiAyLjU3IGNhbiBiZSBhc3N1bWVkIGV2ZXJ5d2hlcmUuCisrCisrQUNfREVGVU4oW2ptX0ZVTkNfTUJSVE9XQ10sCisgWworLSAgQUNfUkVRVUlSRShbQUNfRlVOQ19SRUFMTE9DXSkKKy0gIGRubCBhdXRvY29uZiA8IDIuNTcgdXNlZCB0aGUgc3ltYm9sIGFjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcy4KKy0gIGlmIHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPSBYbm8gfHwgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MiID0gWG5vOyB0aGVuCistICAgIGdsX1BSRVJFUV9SRUFMTE9DCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkXSwKKysgICAgam1fY3ZfZnVuY19tYnJ0b3djLAorKyAgICBbQUNfVFJZX0xJTksoCisrICAgICAgIFsjaW5jbHVkZSA8d2NoYXIuaD5dLAorKyAgICAgICBbbWJzdGF0ZV90IHN0YXRlOyByZXR1cm4gISAoc2l6ZW9mIHN0YXRlICYmIG1icnRvd2MpO10sCisrICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz15ZXMsCisrICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz1ubyldKQorKyAgaWYgdGVzdCAkam1fY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX01CUlRPV0MsIDEsCisrICAgICAgW0RlZmluZSB0byAxIGlmIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWQuXSkKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JlYWxsb2MuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1JFQUxMT0NdLCBbCistICA6CistXSkKKy0jIHJtZGlyLm00IHNlcmlhbCAxCisrIyBoYXNoLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorQEAgLTQzNiwxOCArMTQ1Nyw3MSBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9GVU5DX1JNRElSXSwKKytBQ19ERUZVTihbZ2xfSEFTSF0sCisgWworLSAgQUNfUkVQTEFDRV9GVU5DUyhybWRpcikKKy0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcm1kaXIgPSBubzsgdGhlbgorLSAgICBnbF9QUkVSRVFfUk1ESVIKKy0gIGZpCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvaGFzaC5jLgorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0ZGxpYi5oKQorKyAgQUNfSEVBREVSX1NUREJPT0wKKysgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoZnJlZSBtYWxsb2MpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JtZGlyLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9STURJUl0sIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVEFUXSkKKy0gIDoKKytBQ19ERUZVTihbYWdfQ0hFQ0tfTkFOT1NFQ09ORF9TVEFUXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF9uc2VjXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW1lbnNlYyArIHN0LnN0X210aW1lbnNlYyArIHN0LnN0X2N0aW1lbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfbnNlYz15ZXNdLAorKwlbYWNfY3Zfc3RhdF9uc2VjPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF9uc2VjID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX05TRUMsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBoYXMgbmFub3NlY29uZCB0aW1lc3RhbXBzLl0pCisrICAgZmkKKysKKysgICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF90aW1ldmFsXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDx0aW1lLmg+CisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysJXSwKKysJWyByZXR1cm4gc3Quc3RfYXRpbS50dl9uc2VjICsgc3Quc3RfbXRpbS50dl9uc2VjICsgc3Quc3RfY3RpbS50dl9uc2VjOyBdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPXllc10sCisrCVthY19jdl9zdGF0X3RpbWV2YWw9bm9dKQorKyAgICAgXSkKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X3RpbWV2YWwgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUQVRfVElNRVZBTCwgMSwgW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGNvbXRhaW5zIHN0cnVjdCB0aW1ldmFsJ3MuXSkKKysgICBmaV0pCisrCisrI3NlcmlhbCA3IC0qLSBhdXRvY29uZiAtKi0KKysKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCisrZG5sCisrZG5sIFNlZSBpZiB0aGUgZ2xpYmMgKl91bmxvY2tlZCBJL08gbWFjcm9zIG9yIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLgorK2RubCBVc2Ugb25seSB0aG9zZSAqX3VubG9ja2VkIG1hY3JvcyBvciBmdW5jdGlvbnMgdGhhdCBhcmUgZGVjbGFyZWQKKytkbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVjbGFyZWQgaW4gU29sYXJpcyAyLjUuMSBidXQgd2VyZSByZW1vdmVkCisrZG5sIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQgb24gU29sYXJpcyAyLjUuMSB0byBydW4KKytkbmwgb24gU29sYXJpcyAyLjYpLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPXSwKKytbCisrICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZmdldHNfdW5sb2NrZWQoKSwgZnB1dHNfdW5sb2NrZWQoKQorKyAgZG5sIGV0Yy4KKysgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKworKyAgQUNfQ0hFQ0tfREVDTFNfT05DRSgKKysgICAgIFtjbGVhcmVycl91bmxvY2tlZCBmZW9mX3VubG9ja2VkIGZlcnJvcl91bmxvY2tlZAorKyAgICAgIGZmbHVzaF91bmxvY2tlZCBmZ2V0c191bmxvY2tlZCBmcHV0Y191bmxvY2tlZCBmcHV0c191bmxvY2tlZAorKyAgICAgIGZyZWFkX3VubG9ja2VkIGZ3cml0ZV91bmxvY2tlZCBnZXRjX3VubG9ja2VkCisrICAgICAgZ2V0Y2hhcl91bmxvY2tlZCBwdXRjX3VubG9ja2VkIHB1dGNoYXJfdW5sb2NrZWRdKQorIF0pCisgCisgIyBDaGVjayBmb3Igc2V0bW9kZSwgRE9TIHN0eWxlLgorQEAgLTQ4OCwxODAgKzE1NjIsMzkgQEAKKyAgICAgIEFDX0RFRklORShIQVZFX1NFVE1PREVfRE9TLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIERPUy1zdHlsZSBgc2V0bW9kZScgZnVuY3Rpb24uXSkKKyAgICBmaV0pCistIyBDaGVjayBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5LgorLQorLSMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCistIyAwMjExMS0xMzA3LCBVU0EuCistCistIyBQcmVwYXJlIGZvciBzdWJzdGl0dXRpbmcgPHN0ZGJvb2wuaD4gaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4KKy0KKy1BQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKKy1bCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQk9PTF0pCistCistICAjIERlZmluZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorLQorLSAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuCistICAgIFNUREJPT0xfSD0nJworLSAgZWxzZQorLSAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcKKy0gIGZpCistICBBQ19TVUJTVChbU1REQk9PTF9IXSkKKy0KKy0gIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgorLSAgICBIQVZFX19CT09MPTEKKy0gIGVsc2UKKy0gICAgSEFWRV9fQk9PTD0wCistICBmaQorLSAgQUNfU1VCU1QoW0hBVkVfX0JPT0xdKQorLV0pCistCistIyBUaGlzIG1hY3JvIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTQuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgorLSMgaGF2ZSB0aGlzIG1hY3JvIGJ1aWx0LWluLgorLQorLUFDX0RFRlVOKFtBQ19IRUFERVJfU1REQk9PTF0sCistICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTldLAorLSAgICAgW2FjX2N2X2hlYWRlcl9zdGRib29sX2hdLAorLSAgICAgW0FDX1RSWV9DT01QSUxFKAorLQlbCistCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKy0JICAjaWZuZGVmIGJvb2wKKy0JICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorLQkgICNlbmRpZgorLQkgICNpZm5kZWYgZmFsc2UKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWYgZmFsc2UKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIHRydWUKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWYgdHJ1ZSAhPSAxCistCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCistCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCistCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CistCistCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CistCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworLQkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKy0JICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CistCSAgYm9vbCBlID0gJnM7CistCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CistCSAgY2hhciBnW3RydWVdOworLQkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CistCSAgY2hhciBpW3NpemVvZiBzLnRdOworLQldLAorLQlbIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7IF0sCistCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllc10sCistCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vXSldKQorLSAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCistICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKEhBVkVfU1REQk9PTF9ILCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RkYm9vbC5oIGNvbmZvcm1zIHRvIEM5OS5dKQorLSAgIGZpXSkKKy0jc2VyaWFsIDcgLSotIGF1dG9jb25mIC0qLQorLQorLWRubCBGcm9tIEppbSBNZXllcmluZy4KKy1kbmwKKy1kbmwgU2VlIGlmIHRoZSBnbGliYyAqX3VubG9ja2VkIEkvTyBtYWNyb3Mgb3IgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCistZG5sIFVzZSBvbmx5IHRob3NlICpfdW5sb2NrZWQgbWFjcm9zIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZAorLWRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWNsYXJlZCBpbiBTb2xhcmlzIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQKKy1kbmwgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdCBvbiBTb2xhcmlzIDIuNS4xIHRvIHJ1bgorLWRubCBvbiBTb2xhcmlzIDIuNikuCistCistQUNfREVGVU4oW2ptX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU9dLAorLVsKKy0gIGRubCBQZXJzdWFkZSBnbGliYyA8c3RkaW8uaD4gdG8gZGVjbGFyZSBmZ2V0c191bmxvY2tlZCgpLCBmcHV0c191bmxvY2tlZCgpCistICBkbmwgZXRjLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistCistICBBQ19DSEVDS19ERUNMU19PTkNFKAorLSAgICAgW2NsZWFyZXJyX3VubG9ja2VkIGZlb2ZfdW5sb2NrZWQgZmVycm9yX3VubG9ja2VkCistICAgICAgZmZsdXNoX3VubG9ja2VkIGZnZXRzX3VubG9ja2VkIGZwdXRjX3VubG9ja2VkIGZwdXRzX3VubG9ja2VkCistICAgICAgZnJlYWRfdW5sb2NrZWQgZndyaXRlX3VubG9ja2VkIGdldGNfdW5sb2NrZWQKKy0gICAgICBnZXRjaGFyX3VubG9ja2VkIHB1dGNfdW5sb2NrZWQgcHV0Y2hhcl91bmxvY2tlZF0pCistXSkKKy0jc2VyaWFsIDUKKy0KKy1kbmwgRnJvbSBKaW0gTWV5ZXJpbmcKKy0KKy1kbmwgRGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgaWYgYHN0cnVjdCB1dGltYnVmJyBpcyBkZWNsYXJlZCAtLQorLWRubCB1c3VhbGx5IGluIDx1dGltZS5oPi4KKy1kbmwgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLgorLQorLUFDX0RFRlVOKFtqbV9DSEVDS19UWVBFX1NUUlVDVF9VVElNQlVGXSwKKy1bCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3lzL3RpbWUuaCB1dGltZS5oKQorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1RJTUVdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgdXRpbWJ1Zl0sIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiwKKy0gICAgW0FDX1RSWV9DT01QSUxFKAorLSAgICAgIFsKKy0jaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCistIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorLSMgaW5jbHVkZSA8dGltZS5oPgorLSNlbHNlCistIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKy0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgorLSMgZWxzZQorLSMgIGluY2x1ZGUgPHRpbWUuaD4KKy0jIGVuZGlmCistI2VuZGlmCistI2lmZGVmIEhBVkVfVVRJTUVfSAorLSMgaW5jbHVkZSA8dXRpbWUuaD4KKy0jZW5kaWYKKy0gICAgICBdLAorLSAgICAgIFtzdGF0aWMgc3RydWN0IHV0aW1idWYgeDsgeC5hY3RpbWUgPSB4Lm1vZHRpbWU7XSwKKy0gICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzLAorLSAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubykKKy0gICAgXSkKKyAKKy0gIGlmIHRlc3QgJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiA9IHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfVVRJTUJVRiwgMSwKKy0gICAgICBbRGVmaW5lIGlmIHN0cnVjdCB1dGltYnVmIGlzIGRlY2xhcmVkIC0tIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorLSAgICAgICBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuIF0pCistICBmaQorLV0pCistIyB4YWxsb2MubTQgc2VyaWFsIDEKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrI3NlcmlhbCAxCisgCistQUNfREVGVU4oW2dsX1hBTExPQ10sCistWworLSAgZ2xfUFJFUkVRX1hNQUxMT0MKKy0gIGdsX1BSRVJFUV9YU1RSRFVQCistXSkKKytkbmwgRnJvbSBNdW1pdCBLaGFuIGFuZCBQYXVsIEVnZ2VydAorK2RubCBEZXRlcm1pbmUgd2hldGhlciBta2RpciBhY2NlcHRzIG9ubHkgb25lIGFyZ3VtZW50IGluc3RlYWQgb2YgdGhlIHVzdWFsIHR3by4KKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3htYWxsb2MuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1hNQUxMT0NdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19SRVFVSVJFKFtqbV9GVU5DX01BTExPQ10pCistICBBQ19SRVFVSVJFKFtqbV9GVU5DX1JFQUxMT0NdKQorLV0pCisrQUNfREVGVU4oW1BBVENIX0ZVTkNfTUtESVJfVEFLRVNfT05FX0FSR10sCisrICBbQUNfQ0hFQ0tfRlVOQ1MobWtkaXIpCisrICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnRdLAorKyAgICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZywKKysgICAgIFtwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPW5vCisrICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpciA9IHllczsgdGhlbgorKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICBdLAorKwkgIFtta2RpciAoIi4iLCAwKTtdLAorKwkgICwKKysJICBbQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAgICBdLAorKwkgICAgIFtta2RpciAoIi4iKTtdLAorKwkgICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9eWVzCisrCSAgKV0KKysJKQorKyAgICAgIGZpCisrICAgICBdCisrICAgKQorKyAgIGlmIHRlc3QgJHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShbTUtESVJfVEFLRVNfT05FX0FSR10sIDEsCisrICAgICAgIFtEZWZpbmUgaWYgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnQuXSkKKysgICBmaQorKyAgXQorKykKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzdHJkdXAuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1hTVFJEVVBdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistXSkKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbmZpZ3VyZQorKysrIHBhdGNoLTIuNS45L2NvbmZpZ3VyZQorQEAgLTEsMTEgKzEsMTAgQEAKKyAjISAvYmluL3NoCisgIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3IGZvciBwYXRjaCAyLjUuOS4KKysjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSBmb3IgcGF0Y2ggMi41LjkuCisgIworICMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1wYXRjaEBnbnUub3JnPi4KKyAjCistIyBDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgorLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworQEAgLTIyLDkgKzIxLDEwIEBACisgZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIHNldCAtbyBwb3NpeAorIGZpCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorLWlmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgYXNfdW5zZXQ9dW5zZXQKKyBlbHNlCisgICBhc191bnNldD1mYWxzZQorQEAgLTQzLDcgKzQzLDcgQEAKKyAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgICBMQ19URUxFUEhPTkUgTENfVElNRQorIGRvCistICBpZiAoc2V0ICt4OyB0ZXN0IC1uICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgICBlbHNlCisgICAgICRhc191bnNldCAkYXNfdmFyCitAQCAtMjIwLDE2ICsyMjAsMTcgQEAKKyBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgICBhc19ta2Rpcl9wPToKKyBlbHNlCisrICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICAgYXNfbWtkaXJfcD1mYWxzZQorIGZpCisgCisgYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKy1hc190cl9jcHA9InNlZCB5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKy1hc190cl9zaD0ic2VkIHklKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAKKyAjIElGUworQEAgLTY2OSw3ICs2NzAsNyBAQAorIAorICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorIGZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorLSAgICAgICAgICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCisrCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorIGRvCisgICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKyAgIGNhc2UgJGFjX3ZhbCBpbgorQEAgLTcwOSwxMCArNzEwLDEwIEBACisgICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gaXRzIHBhcmVudC4KKyAgIGFjX2NvbmZkaXI9YChkaXJuYW1lICIkMCIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0gICAgICAgICBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCistICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgXAorKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiQwIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC04MDQsOSArODA1LDkgQEAKKyAgIGNhdCA8PF9BQ0VPRgorIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKysJCQkgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KKysJCQkgIFtQUkVGSVhdCisgCisgQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCisgXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK0BAIC04OTYsMTIgKzg5Nyw0NSBAQAorICAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7CisgZXNhYworLSMgRG9uJ3QgYmxpbmRseSBwZXJmb3JtIGEgYGNkICIkYWNfZGlyIi8kYWNfZm9vICYmIHB3ZGAgc2luY2UgJGFjX2ZvbyBjYW4gYmUKKy0jIGFic29sdXRlLgorLWFjX2Fic19idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19idWlsZGRpciAmJiBwd2RgCistYWNfYWJzX3RvcF9idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICR7YWNfdG9wX2J1aWxkZGlyfS4gJiYgcHdkYAorLWFjX2Fic19zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfc3JjZGlyICYmIHB3ZGAKKy1hY19hYnNfdG9wX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY190b3Bfc3JjZGlyICYmIHB3ZGAKKysKKysjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKysjIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorK2Nhc2UgYHB3ZGAgaW4KKysuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysqKQorKyAgY2FzZSAiJGFjX2RpciIgaW4KKysgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKyAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysqKQorKyAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCisrICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3NyY2RpciBpbgorKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKysgICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKysgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKyAKKyAgICAgY2QgJGFjX2RpcgorICAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgorQEAgLTkxMiwxMyArOTQ2LDEzIEBACisgICAgICAgZWNobworICAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQorICAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuYWMgfHwKKy0gICAgICAgICAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KKysJICAgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgorICAgICAgIGVjaG8KKyAgICAgICAkYWNfY29uZmlndXJlIC0taGVscAorICAgICBlbHNlCisgICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgICBmaQorLSAgICBjZCAkYWNfcG9wZGlyCisrICAgIGNkICIkYWNfcG9wZGlyIgorICAgZG9uZQorIGZpCisgCitAQCAtOTI2LDEwICs5NjAsOSBAQAorIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgIGNhdCA8PFxfQUNFT0YKKyBwYXRjaCBjb25maWd1cmUgMi41LjkKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKKyAKKy1Db3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgorLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyBfQUNFT0YKK0BAIC05NDEsNyArOTc0LDcgQEAKKyBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorIAorIEl0IHdhcyBjcmVhdGVkIGJ5IHBhdGNoICRhc19tZSAyLjUuOSwgd2hpY2ggd2FzCistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisgCisgICAkICQwICRACisgCitAQCAtMTAxOCwxOSArMTA1MSwxOSBAQAorICAgICAyKQorICAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisgICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCistICAgICAgICBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisrCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgICBlbHNlCistICAgICAgICBjYXNlICRhY19hcmcgaW4KKy0gICAgICAgICAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCistICAgICAgICAgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKy0gICAgICAgICAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorLSAgICAgICAgICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKy0gICAgICAgICAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKy0gICAgICAgICAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CistICAgICAgICAgICAgZXNhYworLSAgICAgICAgICAgIDs7CistICAgICAgICAgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworLSAgICAgICAgZXNhYworKwljYXNlICRhY19hcmcgaW4KKysJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKysJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisrCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisrCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworKwllc2FjCisgICAgICAgZmkKKyAgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKKyAgICAgICAjIEdldCByaWQgb2YgdGhlIGxlYWRpbmcgc3BhY2UuCitAQCAtMTA2NCwxMiArMTA5NywxMiBAQAorICAgICBjYXNlIGAoYWNfc3BhY2U9JyInIicgJyInIic7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgICphY19zcGFjZT1cICopCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKKy0gICAgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCisrCSJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKKysJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSciJyInXFwyJyInIicvcCIKKyAgICAgICA7OworICAgICAqKQorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKysJInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICAgOzsKKyAgICAgZXNhYzsKKyB9CitAQCAtMTA5OCw3ICsxMTMxLDcgQEAKKyAgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgIGRvCisgCWV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorLSAgICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKysJZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICAgICBkb25lIHwgc29ydAorICAgICAgIGVjaG8KKyAgICAgZmkKK0BAIC0xMTE3LDcgKzExNTAsNyBAQAorICAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgfSA+JjUKKy0gIHJtIC1mIGNvcmUgY29yZS4qICouY29yZSAmJgorKyAgcm0gLWYgY29yZSAqLmNvcmUgJiYKKyAgIHJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgICAgICAnIDAKK0BAIC0xMTk3LDcgKzEyMzAsNyBAQAorICMgdmFsdWUuCisgYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCisgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8CistICAgICAgICAgICAgICAgc2VkIC1uICdzL15hY19lbnZfXChbYS16QS1aXzAtOV0qXClfc2V0PS4qL1wxL3AnYDsgZG8KKysJICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisgICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKyAgIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorQEAgLTEyMTQsMTMgKzEyNDcsMTMgQEAKKyAgICAgLCk7OworICAgICAqKQorICAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKy0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CisgZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorIGVjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KKy0gICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisrCWFjX2NhY2hlX2NvcnJ1cHRlZD06CisgICAgICAgZmk7OworICAgZXNhYworICAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorQEAgLTE2MjksNyArMTY2Miw2IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorIAorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xNjQ5LDggKzE2ODEsOCBAQAorICMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyAjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisgIyBvZiBleGVleHQuCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0Li4uICRFQ0hPX0MiID4mNgorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNgorIGFjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rX2RlZmF1bHRcIiIpID4mNQorICAgKGV2YWwgJGFjX2xpbmtfZGVmYXVsdCkgMj4mNQorQEAgLTE2NzAsMjMgKzE3MDIsMjMgQEAKKyAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkKKy0gICAgICAgIDs7CisrCTs7CisgICAgIGNvbmZ0ZXN0LiRhY19leHQgKQorLSAgICAgICAgIyBUaGlzIGlzIHRoZSBzb3VyY2UgZmlsZS4KKy0gICAgICAgIDs7CisrCSMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCisrCTs7CisgICAgIFthYl0ub3V0ICkKKy0gICAgICAgICMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CistICAgICAgICAjIGNlcnRhaW5seSByaWdodC4KKy0gICAgICAgIGJyZWFrOzsKKysJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKysJIyBjZXJ0YWlubHkgcmlnaHQuCisrCWJyZWFrOzsKKyAgICAgKi4qICkKKy0gICAgICAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLSAgICAgICAgIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCistICAgICAgICAjIGJ1dCBpdCB3b3VsZCBiZSBjb29sIHRvIGZpbmQgb3V0IGlmIGl0J3MgdHJ1ZS4gIERvZXMgYW55Ym9keQorLSAgICAgICAgIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCistICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CistICAgICAgICBicmVhazs7CisrCWFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorKwkjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKKysJIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKKysJIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCisrCWV4cG9ydCBhY19jdl9leGVleHQKKysJYnJlYWs7OworICAgICAqICkKKy0gICAgICAgIGJyZWFrOzsKKysJYnJlYWs7OworICAgZXNhYworIGRvbmUKKyBlbHNlCitAQCAtMTc2MCw4ICsxNzkyLDggQEAKKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLSAgICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CistICAgICAgICAgIGJyZWFrOzsKKysJICBleHBvcnQgYWNfY3ZfZXhlZXh0CisrCSAgYnJlYWs7OworICAgICAqICkgYnJlYWs7OworICAgZXNhYworIGRvbmUKK0BAIC0xNzg2LDcgKzE4MTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTgzNyw3ICsxODY4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE4NTcsMTEgKzE4ODcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xODc0LDcgKzE5MTMsNyBAQAorIAorIGFjX2NvbXBpbGVyX2dudT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKyAKKyBmaQorQEAgLTE4OTAsNyArMTkyOSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xOTA3LDExICsxOTQ1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTkyNCw3ICsxOTcxLDcgQEAKKyAKKyBhY19jdl9wcm9nX2NjX2c9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgorQEAgLTE5NTEsNyArMTk5OCw2IEBACisgICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KKyBhY19zYXZlX0NDPSRDQworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xOTc5LDYgKzIwMjUsMTYgQEAKKyAgIHZhX2VuZCAodik7CisgICByZXR1cm4gczsKKyB9CisrCisrLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKysgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisrICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisrICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkMSBpcyBhZGRlZCB0byBnZXQKKysgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisrICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisrICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQxLiAgKi8KKytpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworKworIGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworIHN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9OworIHN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworQEAgLTIwMDUsMTEgKzIwNjEsMjAgQEAKKyAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjAyMiw3ICsyMDg3LDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBkb25lCisgcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisgQ0M9JGFjX3NhdmVfQ0MKK0BAIC0yMDUwLDE5ICsyMTE1LDI3IEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKKy0gICAnJ1wKKy0gICAnI2luY2x1ZGUgPHN0ZGxpYi5oPicgXAorKyAgICcnIFwKKyAgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAorQEAgLTIwNzAsMTQgKzIxNDMsMTMgQEAKKyAgICAndm9pZCBleGl0IChpbnQpOycKKyBkbworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorICRhY19kZWNsYXJhdGlvbgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyBpbnQKKyBtYWluICgpCisgeworQEAgLTIwODgsMTEgKzIxNjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yMTA1LDkgKzIxODYsOCBAQAorIAorIGNvbnRpbnVlCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjEyNCwxMSArMjIwNCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTIxNDAsNyArMjIyOSw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGRvbmUKKyBybSAtZiBjb25mdGVzdCoKKyBpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCitAQCAtMjE1NCw3ICsyMjQzLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgYWNfZXh0PWMKKyBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK0BAIC0yMTg5LDcgKzIyNzgsNiBAQAorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIyMDAsNyArMjI4OCw3IEBACisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorKwkJICAgICBTeW50YXggZXJyb3IKKyBfQUNFT0YKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCitAQCAtMjIxMiw2ICsyMzAwLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIyMzIsNyArMjMyMSw2IEBACisgICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjI1MCw2ICsyMzM4LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIyOTYsNyArMjM4NSw2IEBACisgICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjMwNyw3ICsyMzk1LDcgQEAKKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCisrCQkgICAgIFN5bnRheCBlcnJvcgorIF9BQ0VPRgorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKK0BAIC0yMzE5LDYgKzI0MDcsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjMzOSw3ICsyNDI4LDYgQEAKKyAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMzU3LDYgKzI0NDUsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjQzMSw2ICsyNTIwLDcgQEAKKyAjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworICMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworICMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKysjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyAjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgorQEAgLTI0NDcsNiArMjUzNyw3IEBACisgY2FzZSAkYXNfZGlyLyBpbgorICAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKyAgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorKyAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCisgICAvdXNyL3VjYi8qICkgOzsKKyAgICopCisgICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCitAQCAtMjQ1NCwyMCArMjU0NSwyMCBAQAorICAgICAjIGJ5IGRlZmF1bHQuCisgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gICAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCistICAgICAgICAgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCistICAgICAgICAgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICAgICAgICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKy0gICAgICAgICAgICA6CistICAgICAgICAgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKy0gICAgICAgICAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgICAgICAgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCistICAgICAgICAgICAgOgorLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorLSAgICAgICAgICAgIGJyZWFrIDMKKy0gICAgICAgICAgZmkKKy0gICAgICAgIGZpCisrCWlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisrCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKysJICAgIDoKKysJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKysJICAgIDoKKysJICBlbHNlCisrCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisrCSAgICBicmVhayAzCisrCSAgZmkKKysJZmkKKyAgICAgICBkb25lCisgICAgIGRvbmUKKyAgICAgOzsKK0BAIC0yNDk5LDcgKzI1OTAsNyBAQAorIAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2Cistc2V0IGR1bW15ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5LC4vKy0sX19wXywnYAorK3NldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSw6Li8rLSxfX19wXywnYAorIGlmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjU5Niw3ICsyNjg3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFJWCIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQUlYLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNjI4LDcgKzI3MTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjY0OSwxMSArMjczOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTI2NjYsMTIgKzI3NjQsMTEgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjY5Myw3ICsyNzkwLDYgQEAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI3MTgsNyArMjgxNCw2IEBACisgICA6CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI3MzAsOSArMjgyNSw5IEBACisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorICNlbHNlCisgIyBkZWZpbmUgSVNMT1dFUihjKSBcCistICAgICAgICAgICAgICAgICAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKysJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorICNlbmRpZgorIAorQEAgLTI3NDMsNyArMjgzOCw3IEBACisgICBpbnQgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorLSAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgIGV4aXQoMik7CisgICBleGl0ICgwKTsKKyB9CitAQCAtMjc2OCw3ICsyODYzLDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGZpCitAQCAtMjc5Myw3ICsyODg4LDcgQEAKKyAKKyAKKyBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKy0gICAgICAgICAgICAgICAgICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisrCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKKyBkbworIGFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitAQCAtMjgwMiw3ICsyODk3LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI4MTQsMTEgKzI5MDgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yODMxLDcgKzI5MzQsNyBAQAorIAorIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTI4NTgsNyArMjk2MSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBtaW5peC9jb25maWcuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI4NjksMTEgKzI5NzEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yODg2LDcgKzI5OTcsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTI4OTQsNyArMzAwNSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yOTEyLDYgKzMwMjIsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjkzMSwzMyArMzA0MiwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtMzAwMCwxNSArMzExMCwxNSBAQAorIGZpCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc3RyZXJyb3IiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzdHJlcnJvci4uLiAkRUNIT19DIiA+JjYKKy1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9zdHJlcnJvcitzZXR9IiA9IHNldDsgdGhlbgorKworKyAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJlcnJvciBpbiAtbGNwb3NpeCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RyZXJyb3IgaW4gLWxjcG9zaXguLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworLWFjX2N2X3NlYXJjaF9zdHJlcnJvcj1ubworKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworK0xJQlM9Ii1sY3Bvc2l4ICAkTElCUyIKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzAzMiw3OSArMzE0Miw0MyBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBhY19jdl9zZWFyY2hfc3RyZXJyb3I9Im5vbmUgcmVxdWlyZWQiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPSBubzsgdGhlbgorLSAgZm9yIGFjX2xpYiBpbiBjcG9zaXg7IGRvCistICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKy0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciBzdHJlcnJvciAoKTsKKy1pbnQKKy1tYWluICgpCisteworLXN0cmVycm9yICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgYWNfY3Zfc2VhcmNoX3N0cmVycm9yPSItbCRhY19saWIiCistYnJlYWsKKysgIGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3I9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisrYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgZG9uZQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKyBmaQorLUxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciIgPiY2CisraWYgdGVzdCAkYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciA9IHllczsgdGhlbgorKyAgTElCUz0iJExJQlMgLWxjcG9zaXgiCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA+JjYKKy1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiAhPSBubzsgdGhlbgorLSAgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX2N2X3NlYXJjaF9zdHJlcnJvciAkTElCUyIKKyAKKy1maQorKworIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sYXJnZWZpbGUgb3IgLS1kaXNhYmxlLWxhcmdlZmlsZSB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGFyZ2VmaWxlK3NldH0iID0gc2V0OyB0aGVuCitAQCAtMzEyNCw4ICszMTk4LDcgQEAKKyAgICAgICAgd2hpbGUgOjsgZG8KKyAgICAgIAkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKyAgICAgIAkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorLSAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKysJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMxNTAsMTEgKzMyMjMsMjAgQEAKKyBfQUNFT0YKKyAgICAgIAkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzE2NiwxNSArMzI0OCwyNCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICAgICAgCSBDQz0iJENDIC1uMzIiCisgICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMxODYsOCArMzI3Nyw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLSAgICAgICAgIGJyZWFrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKysJIGJyZWFrCisgICAgICAgIGRvbmUKKyAgICAgICAgQ0M9JGFjX3NhdmVfQ0MKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQEAgLTMyMDcsNyArMzI5OCw2IEBACisgICB3aGlsZSA6OyBkbworICAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9bm8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMjMyLDExICszMzIyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzI0OCw5ICszMzQ3LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzI3NiwxMSArMzM3NCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMyOTIsNyArMzM5OSw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYnJlYWsKKyBkb25lCisgZmkKK0BAIC0zMzE0LDcgKzM0MjEsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19sYXJnZV9maWxlcz1ubworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMzMzksMTEgKzM0NDUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMzU1LDkgKzM0NzAsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMzgzLDExICszNDk3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzM5OSw3ICszNTIyLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBicmVhaworIGRvbmUKKyBmaQorQEAgLTM0NDMsNyArMzU2Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNTA2LDExICszNjI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzUyMyw3ICszNjU0LDcgQEAKKyAKKyBhY19jdl9jX2NvbnN0PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNgorQEAgLTM1NTAsNyArMzY4MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNTcwLDExICszNzAwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzU4Nyw3ICszNzI2LDcgQEAKKyAKKyBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC0zNjEwLDcgKzM3NDksNiBAQAorICAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCisgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzYzNCwxMSArMzc3MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzY1MCwxMiArMzc5NywxMiBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gbm87IHRoZW4KKyAgIGZvciBhY19saWIgaW4gZGlyOyBkbworICAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNjc5LDExICszODI2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNjk2LDcgKzM4NTIsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGRvbmUKKyBmaQorIExJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworQEAgLTM3MTcsNyArMzg3NCw2IEBACisgICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKyBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNzQxLDExICszODk3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNzU3LDEyICszOTIyLDEyIEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSBubzsgdGhlbgorICAgZm9yIGFjX2xpYiBpbiB4OyBkbworICAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNzg2LDExICszOTUxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zODAzLDcgKzM5NzcsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGRvbmUKKyBmaQorIExJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworQEAgLTM4MjMsNyArMzk5OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zODQ0LDExICs0MDE4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzg2MSwxMiArNDA0NCwxMSBAQAorIAorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zODg4LDcgKzQwNzAsNiBAQAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzkxMyw3ICs0MDk0LDYgQEAKKyAgIDoKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzkyNSw5ICs0MTA1LDkgQEAKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisgI2Vsc2UKKyAjIGRlZmluZSBJU0xPV0VSKGMpIFwKKy0gICAgICAgICAgICAgICAgICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKy0gICAgICAgICAgICAgICAgICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisgI2VuZGlmCisgCitAQCAtMzkzOCw3ICs0MTE4LDcgQEAKKyAgIGludCBpOworICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCistICAgICAgICB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKysJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICAgZXhpdCgyKTsKKyAgIGV4aXQgKDApOworIH0KK0BAIC0zOTYzLDcgKzQxNDMsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZmkKK0BAIC0zOTk5LDcgKzQxNzksNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDAxMCwxMSArNDE4OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQwMjcsNyArNDIxNSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDAzNSw3ICs0MjIzLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MDUzLDYgKzQyNDAsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDA3MiwzMyArNDI2MCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworKyAgICA7OworKyAgbm86eWVzOiogKQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLSAgbm86eWVzICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQxMDksNyArNDI5Niw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDEzMSw3ICs0MzE4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQxNTEsMTEgKzQzMzcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MTY4LDcgKzQzNjMsNyBAQAorIAorIGFjX2N2X3R5cGVfbW9kZV90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tb2RlX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX21vZGVfdCIgPiY2CitAQCAtNDE4OCw3ICs0MzgzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQyMDgsMTEgKzQ0MDIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MjI1LDcgKzQ0MjgsNyBAQAorIAorIGFjX2N2X3R5cGVfb2ZmX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX29mZl90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmZfdCIgPiY2CitAQCAtNDI0NSw3ICs0NDQ4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQyNjUsMTEgKzQ0NjcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MjgyLDcgKzQ0OTMsNyBAQAorIAorIGFjX2N2X3R5cGVfcGlkX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3BpZF90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9waWRfdCIgPiY2CitAQCAtNDMwMiw3ICs0NTEzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQzMjksMTEgKzQ1MzksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MzQ2LDcgKzQ1NjUsNyBAQAorIAorIGFjX2N2X3R5cGVfc2lnbmFsPWludAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaWduYWwiID4mNgorQEAgLTQzNjIsNyArNDU4MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MzgyLDExICs0NjAwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDM5OSw3ICs0NjI2LDcgQEAKKyAKKyBhY19jdl90eXBlX3NpemVfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2l6ZV90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaXplX3QiID4mNgorQEAgLTQ0MTksNyArNDY0Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NDY4LDExICs0Njk0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDQ4NSw3ICs0NzIwLDcgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNgorQEAgLTQ0OTUsNyArNDczMCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NTE1LDExICs0NzQ5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDUzMiw3ICs0Nzc1LDcgQEAKKyAKKyBhY19jdl90eXBlX19Cb29sPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9fQm9vbCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX0Jvb2wiID4mNgorQEAgLTQ1ODksNyArNDgzMiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NjAwLDExICs0ODQyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDYxNyw3ICs0ODY4LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC00NjI1LDcgKzQ4NzYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ2NDMsNiArNDg5Myw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC00NjYyLDMzICs0OTEzLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNDY5OSw3ICs0OTQ5LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC00NzMzLDcgKzQ5ODMsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDc0NCwxMSArNDk5MywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ3NjEsNyArNTAxOSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDc2OSw3ICs1MDI3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00Nzg3LDYgKzUwNDQsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDgwNiwzMyArNTA2NCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQ4NDMsNyArNTEwMCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDg2NSw3ICs1MTIyLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ4ODYsMTEgKzUxNDIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00OTAzLDcgKzUxNjgsNyBAQAorIAorIGFjX2N2X2hlYWRlcl90aW1lPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGltZSIgPiY2CitAQCAtNDkzMyw3ICs1MTk4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ5NjQsMTEgKzUyMjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00OTgxLDcgKzUyNTQsNyBAQAorIAorIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiIgPiY1CitAQCAtNTAwNSw3ICs1Mjc4LDYgQEAKKyAgIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTA0NSw3ICs1MzE3LDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCIgPiY1CitAQCAtNTA3Niw3ICs1MzQ4LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUwODcsMTEgKzUzNTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MTA0LDcgKzUzODQsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTUxMTIsNyArNTM5Miw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTEzMCw2ICs1NDA5LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTUxNDksMzMgKzU0MjksMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC01MTg2LDcgKzU0NjUsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTUyMjAsNyArNTQ5OSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01MjMxLDExICs1NTA5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTI0OCw3ICs1NTM1LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01MjU2LDcgKzU1NDMsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUyNzQsNiArNTU2MCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01MjkzLDMzICs1NTgwLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTMzMCw3ICs1NjE2LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01MzY0LDcgKzU2NTAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTM3NSwxMSArNTY2MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUzOTIsNyArNTY4Niw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTQwMCw3ICs1Njk0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NDE4LDYgKzU3MTEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTQzNywzMyArNTczMSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTU0NzQsNyArNTc2Nyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTQ5Nyw3ICs1NzkwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU1MTcsMTEgKzU4MDksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NTM0LDcgKzU4MzUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRlbnY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY2CitAQCAtNTU2Miw3ICs1ODYzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU1ODIsMTEgKzU4ODIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NTk5LDcgKzU5MDgsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9tYWxsb2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY2CitAQCAtNTYyOCw3ICs1OTM3LDYgQEAKKyBlbHNlCisgCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTY0NywxMSArNTk1NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU2NjQsNyArNTk4MSw3IEBACisgCisgYWNfY3Zfd2luX29yX2Rvcz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dpbl9vcl9kb3MiID4mNQorQEAgLTU3MTQsNyArNjAzMSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NzI1LDExICs2MDQxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTc0Miw3ICs2MDY3LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01NzUwLDcgKzYwNzUsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU3NjgsNiArNjA5Miw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01Nzg3LDMzICs2MTEyLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTgyNCw3ICs2MTQ4LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01ODcyLDcgKzYxOTYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTkwNSwxMSArNjIyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTkyMiw3ICs2MjU0LDggQEAKKyAKKyBqbV9jdl9zdHJ1Y3RfZGlyZW50X2RfaW5vPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgCisgZmkKK0BAIC02MDExLDIxICs2MzQ0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTYwNTYsMTEgKzYzOTYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYwNzMsNyArNjQyMiw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjEyNiwyMSArNjQ3NiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02MTcxLDExICs2NTI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MTg4LDcgKzY1NTQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTYyMDMsMjEgKzY1NzAsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIF9kb3BybnQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBfZG9wcm50LgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgX2RvcHJudCBpbm5vY3VvdXNfX2RvcHJudAorKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBfZG9wcm50ICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiBfZG9wcm50CisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjI0OCwxMSArNjYyMiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjI2NSw3ICs2NjQ4LDggQEAKKyAKKyBhY19jdl9mdW5jX19kb3BybnQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX19kb3BybnQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX19kb3BybnQiID4mNgorQEAgLTYyODgsMTMgKzY2NzIsMTIgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyBpbnQKKyBtYWluICgpCisgeworQEAgLTYzMDUsMTEgKzY2ODgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYzMjIsMTIgKzY3MTQsMjAgQEAKKyAKKyBhY19jdl9saWJfZXJyb3JfYXRfbGluZT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4mNgorIGlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKy0gIExJQk9CSlM9IiRMSUJPQkpTIGVycm9yLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICJlcnJvci4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgZXJyb3IuJGFjX29iamV4dCIgICB8IFwKKysgICAgImVycm9yLiRhY19vYmpleHQgIiogfCBcCisrICAqIiBlcnJvci4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTIGVycm9yLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgCisgCitAQCAtNjM0MywyMSArNjc0MywyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02Mzg4LDExICs2Nzk1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NDA1LDcgKzY4MjEsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTY0MjMsNyArNjg0MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NDQzLDExICs2ODU5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjQ2MCw3ICs2ODg1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3I9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3IiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3IiID4mNgorQEAgLTY0ODYsNyArNjkxMSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NTA2LDExICs2OTMwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjUyMyw3ICs2OTU2LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3Jfcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IiID4mNgorQEAgLTY1NTMsMjEgKzY5ODYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjU5OCwxMSArNzAzOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjYxNSw3ICs3MDY0LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02NjM2LDcgKzcwODYsNiBAQAorICAgICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPW5vCisgICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yID0geWVzOyB0aGVuCisgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY2NTcsMTEgKzcxMDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NjczLDcgKzcxMzEsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZWxzZQorICAgICAgICMgc3RyZXJyb3JfciBpcyBub3QgZGVjbGFyZWQuICBDaG9vc2UgYmV0d2VlbgorICAgICAgICMgc3lzdGVtcyB0aGF0IGhhdmUgcmVsYXRpdmVseSBpbmFjY2Vzc2libGUgZGVjbGFyYXRpb25zIGZvciB0aGUKK0BAIC02Njg1LDcgKzcxNDMsNiBAQAorICAgOgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NzIxLDcgKzcxNzgsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyAgICAgZmkKKyAKK0BAIC02NzQ5LDIxICs3MjA2LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTY3OTQsMTEgKzcyNTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY4MTEsNyArNzI4NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjgyMSw3ICs3Mjk1LDE0IEBACisgX0FDRU9GCisgCisgZWxzZQorLSAgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyBkb25lCisgCitAQCAtNjg1NSw3ICs3MzM2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY4NjYsMTEgKzczNDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02ODgzLDcgKzczNzIsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTY4OTEsNyArNzM4MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjkwOSw2ICs3Mzk3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTY5MjgsMzMgKzc0MTcsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC02OTY1LDcgKzc0NTMsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTY5ODksNyArNzQ3Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03MDUzLDIxICs3NTQwLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTcwOTgsMTEgKzc1OTIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTcxMTUsNyArNzYxOCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNzEyNSw3ICs3NjI5LDE0IEBACisgX0FDRU9GCisgCisgZWxzZQorLSAgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyBkb25lCisgCitAQCAtNzE2Myw3ICs3Njc0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTcxNzQsMTEgKzc2ODQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03MTkxLDcgKzc3MTAsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTcxOTksNyArNzcxOCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzIxNyw2ICs3NzM1LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTcyMzYsMzMgKzc3NTUsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03MjczLDcgKzc3OTEsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTcyOTcsNyArNzgxNSw2IEBACisgICBhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm8KKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzMzNyw3ICs3ODU0LDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+JjUKK0BAIC03MzUzLDcgKzc4NzAsMTQgQEAKKyAjZGVmaW5lIEhBVkVfTUFMTE9DIDAKKyBfQUNFT0YKKyAKKy0gICBMSUJPQkpTPSIkTElCT0JKUyBtYWxsb2MuJGFjX29iamV4dCIKKysgICBjYXNlICRMSUJPQkpTIGluCisrICAgICJtYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICoiIG1hbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAibWFsbG9jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiBtYWxsb2MuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBtYWxsb2MuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgCisgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyAjZGVmaW5lIG1hbGxvYyBycGxfbWFsbG9jCitAQCAtNzM4OCw3ICs3OTEyLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTczOTksMTEgKzc5MjIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NDE2LDcgKzc5NDgsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc0MjQsNyArNzk1Niw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzQ0Miw2ICs3OTczLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc0NjEsMzMgKzc5OTMsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03NDk4LDcgKzgwMjksNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTc1MjIsNyArODA1Myw2IEBACisgICBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc1NjIsNyArODA5Miw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA+JjUKK0BAIC03NTc4LDcgKzgxMDgsMTQgQEAKKyAjZGVmaW5lIEhBVkVfUkVBTExPQyAwCisgX0FDRU9GCisgCistICAgTElCT0JKUz0iJExJQk9CSlMgcmVhbGxvYy4kYWNfb2JqZXh0IgorKyAgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgInJlYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICoiIHJlYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICAgInJlYWxsb2MuJGFjX29iamV4dCAiKiB8IFwKKysgICoiIHJlYWxsb2MuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyByZWFsbG9jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIAorIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisgI2RlZmluZSByZWFsbG9jIHJwbF9yZWFsbG9jCitAQCAtNzYxOSw3ICs4MTU2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc2MzAsMTEgKzgxNjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NjQ3LDcgKzgxOTIsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc2NTUsNyArODIwMCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzY3Myw2ICs4MjE3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc2OTIsMzMgKzgyMzcsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03NzI5LDcgKzgyNzMsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTc3NzIsNyArODMxNiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NzgzLDExICs4MzI2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzgwMCw3ICs4MzUyLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03ODA4LDcgKzgzNjAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc4MjYsNiArODM3Nyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03ODQ1LDMzICs4Mzk3LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzg4Miw3ICs4NDMzLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03OTE2LDcgKzg0NjcsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzkyNywxMSArODQ3NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc5NDQsNyArODUwMyw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzk1Miw3ICs4NTExLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03OTcwLDYgKzg1MjgsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzk4OSwzMyArODU0OCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTgwMjYsNyArODU4NCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtODA1MywyMSArODYxMSwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04MDk4LDExICs4NjYzLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04MTE1LDcgKzg2ODksOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTgxMzksMjEgKzg3MTQsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODE4NCwxMSArODc2NiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODIwMSw3ICs4NzkyLDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04MjQxLDcgKzg4MzMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODI1OSwxMSArODg1MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgyNzYsNyArODg3Niw3IEBACisgCisgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjYKK0BAIC04MzAwLDcgKzg5MDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODMxNywxMSArODkxNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODMzNCw3ICs4OTQyLDggQEAKKyAKKyBqbV9jdl9mdW5jX21icnRvd2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRqbV9jdl9mdW5jX21icnRvd2MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRqbV9jdl9mdW5jX21icnRvd2MiID4mNgorQEAgLTgzNDgsNjkgKzg5NTcsNDY1IEBACisgCisgCisgCistCistCistCistCistZm9yIGFjX2Z1bmMgaW4gcGF0aGNvbmYKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2CistaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGZyZWUgaXMgZGVjbGFyZWQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBmcmVlIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2ZyZWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLXsKKy0jZW5kaWYKKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCistY2hva2UgbWUKKy0jZWxzZQorLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworLSNlbmRpZgorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy0KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisrI2lmbmRlZiBmcmVlCisrICBjaGFyICpwID0gKGNoYXIgKikgZnJlZTsKKysjZW5kaWYKKysKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9oYXZlX2RlY2xfZnJlZT15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9oYXZlX2RlY2xfZnJlZT1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUiID4mNgorK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9mcmVlID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUUgMQorK19BQ0VPRgorKworKworK2Vsc2UKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfREVDTF9GUkVFIDAKKytfQUNFT0YKKysKKysKKytmaQorKworKworKworKworKworKyAgOgorKworKworKworKworKworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRib29sX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysJICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorKwkgICNpZm5kZWYgYm9vbAorKwkgICAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgdHJ1ZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiB0cnVlICE9IDEKKysJICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKysJICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysKKysJICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKysKKysJICBjaGFyIGFbdHJ1ZSA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07CisrCSAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworKwkgIGNoYXIgZFsoYm9vbCkgLTAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKysJICBib29sIGUgPSAmczsKKysJICBjaGFyIGZbKF9Cb29sKSAtMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKysJICBjaGFyIGdbdHJ1ZV07CisrCSAgY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKysJICBjaGFyIGlbc2l6ZW9mIHMudF07CisrCisraW50CisrbWFpbiAoKQorK3sKKysgcmV0dXJuICFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X2hlYWRlcl9zdGRib29sX2g9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2CisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfQm9vbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0Jvb2wuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl90eXBlX19Cb29sK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmICgoX0Jvb2wgKikgMCkKKysgIHJldHVybiAwOworK2lmIChzaXplb2YgKF9Cb29sKSkKKysgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3R5cGVfX0Jvb2w9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3ZfdHlwZV9fQm9vbD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX19Cb29sIiA+JjYKKytpZiB0ZXN0ICRhY19jdl90eXBlX19Cb29sID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9fQk9PTCAxCisrX0FDRU9GCisrCisrCisrZmkKKysKKysgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKKytfQUNFT0YKKysKKysgICBmaQorKworKyAgOgorKworKworKworKworKworKworKworKworKworKworK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9zdGF0X25zZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3N0YXRfbnNlYz15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9zdGF0X25zZWM9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zdGF0X25zZWMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zdGF0X25zZWMiID4mNgorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCisrX0FDRU9GCisrCisrICAgZmkKKysKKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3Zfc3RhdF90aW1ldmFsK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrCSAgI2luY2x1ZGUgPHRpbWUuaD4KKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiBzdC5zdF9hdGltLnR2X25zZWMgKyBzdC5zdF9tdGltLnR2X25zZWMgKyBzdC5zdF9jdGltLnR2X25zZWM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3Zfc3RhdF90aW1ldmFsPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3N0YXRfdGltZXZhbD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0YXRfdGltZXZhbCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N0YXRfdGltZXZhbCIgPiY2CisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1RBVF9USU1FVkFMIDEKKytfQUNFT0YKKysKKysgICBmaQorKworKworKworKworKworK2ZvciBhY19mdW5jIGluIHBhdGhjb25mCisrZG8KKythc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgorK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKysgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisrICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKysvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKyt7CisrI2VuZGlmCisrLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrY2hhciAkYWNfZnVuYyAoKTsKKysvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisrICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisrICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworKyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorK2Nob2tlIG1lCisrI2Vsc2UKKytjaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKKysjZW5kaWYKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gZiAhPSAkYWNfZnVuYzsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NDIzLDcgKzk0MjgsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTg0NTQsNyArOTQ2MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NDY1LDExICs5NDcwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODQ4Miw3ICs5NDk2LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC04NDkwLDcgKzk1MDQsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg1MDgsNiArOTUyMSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC04NTI3LDMzICs5NTQxLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtODU2NCw3ICs5NTc3LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC04NTg3LDcgKzk2MDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODYwNywxMSArOTYxOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg2MjQsNyArOTY0NSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZyZWU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjYKK0BAIC04NjQ4LDcgKzk2NjksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODY2OCwxMSArOTY4OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg2ODUsNyArOTcxNCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2dldGVudj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRlbnYiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjYKK0BAIC04NzA5LDcgKzk3MzgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODcyOSwxMSArOTc1NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg3NDYsNyArOTc4Myw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9tYWxsb2MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjYKK0BAIC04NzcwLDcgKzk4MDcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODc5MCwxMSArOTgyNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg4MDcsNyArOTg1Miw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX21rdGVtcD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9ta3RlbXAiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWt0ZW1wIiA+JjYKK0BAIC04ODQ5LDIxICs5ODk0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTg4OTQsMTEgKzk5NDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg5MTEsNyArOTk3Miw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtODkzNCwyMSArOTk5NiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04OTc5LDExICsxMDA0OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODk5Niw3ICsxMDA3NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtOTAwNiw3ICsxMDA4NSwxNCBAQAorIF9BQ0VPRgorIAorIGVsc2UKKy0gIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgZG9uZQorIAorQEAgLTkwMTksNyArMTAxMDUsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPW5vCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTAzNiwxMSArMTAxMjEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MDUyLDkgKzEwMTQ2LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTA3MiwxMSArMTAxNjUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MDg4LDcgKzEwMTkwLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBicmVhaworIGRvbmUKKyBmaQorQEAgLTkxMTIsNyArMTAyMTQsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTEyOSwxMSArMTAyMzAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkxNDYsNyArMTAyNTYsOCBAQAorIAorIGFjX2N2X2Z1bmNfZnNlZWtvPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19mc2Vla28iID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2ZzZWVrbyIgPiY2CitAQCAtOTE2NSw3ICsxMDI3Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MTg1LDExICsxMDI5NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkyMDIsNyArMTAzMjEsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCIgPiY2CitAQCAtOTIzMCw3ICsxMDM0OSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MjUwLDExICsxMDM2OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkyNjcsNyArMTAzOTQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPiY2CitAQCAtOTI5NSw3ICsxMDQyMiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MzE1LDExICsxMDQ0MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkzMzIsNyArMTA0NjcsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmVycm9yX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPiY2CitAQCAtOTM2MCw3ICsxMDQ5NSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MzgwLDExICsxMDUxNCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkzOTcsNyArMTA1NDAsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZCIgPiY2CitAQCAtOTQyNSw3ICsxMDU2OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NDQ1LDExICsxMDU4NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk0NjIsNyArMTA2MTMsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY2CitAQCAtOTQ5MCw3ICsxMDY0MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NTEwLDExICsxMDY2MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk1MjcsNyArMTA2ODYsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZCIgPiY2CitAQCAtOTU1NSw3ICsxMDcxNCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NTc1LDExICsxMDczMywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk1OTIsNyArMTA3NTksNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPiY2CitAQCAtOTYyMCw3ICsxMDc4Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NjQwLDExICsxMDgwNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk2NTcsNyArMTA4MzIsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZCIgPiY2CitAQCAtOTY4NSw3ICsxMDg2MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NzA1LDExICsxMDg3OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk3MjIsNyArMTA5MDUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9md3JpdGVfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgPiY2CitAQCAtOTc1MCw3ICsxMDkzMyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NzcwLDExICsxMDk1MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk3ODcsNyArMTA5NzgsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgPiY2CitAQCAtOTgxNSw3ICsxMTAwNiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05ODM1LDExICsxMTAyNSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk4NTIsNyArMTEwNTEsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZCIgPiY2CitAQCAtOTg4MCw3ICsxMTA3OSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05OTAwLDExICsxMTA5OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk5MTcsNyArMTExMjQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZCIgPiY2CitAQCAtOTk0NSw3ICsxMTE1Miw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05OTY1LDExICsxMTE3MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk5ODIsNyArMTExOTcsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZCIgPiY2CitAQCAtMTAwNzUsNyArMTEyOTAsNiBAQAorICAgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDExNSw3ICsxMTMyOSw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQiID4mNQorQEAgLTEwMTQ2LDcgKzExMzYwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMTU3LDExICsxMTM3MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwMTc0LDcgKzExMzk2LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC0xMDE4Miw3ICsxMTQwNCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTAyMDAsNiArMTE0MjEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMTAyMTksMzMgKzExNDQxLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtMTAyNTYsNyArMTE0NzcsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTEwMjc3LDcgKzExNDk4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMzAwLDExICsxMTUyMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTAzMTcsNyArMTE1NDYsOCBAQAorIAorIGFjX2N2X2Z1bmNfc2V0bW9kZV9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NldG1vZGVfZG9zIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zZXRtb2RlX2RvcyIgPiY2CitAQCAtMTAzMzgsMjEgKzExNTY4LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTEwMzgzLDExICsxMTYyMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA0MDAsNyArMTE2NDYsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTEwNDE1LDIxICsxMTY2MiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgX2RvcHJudCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIF9kb3BybnQuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSBfZG9wcm50IGlubm9jdW91c19fZG9wcm50CisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF9kb3BybnQgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmIF9kb3BybnQKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDQ2MCwxMSArMTE3MTQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNDc3LDcgKzExNzQwLDggQEAKKyAKKyBhY19jdl9mdW5jX19kb3BybnQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX19kb3BybnQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX19kb3BybnQiID4mNgorQEAgLTEwNTAzLDIxICsxMTc2NywyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDU0OCwxMSArMTE4MTksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNTY1LDcgKzExODQ1LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC0xMDU4NSw3ICsxMTg2Niw2IEBACisgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPW5vCisgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpciA9IHllczsgdGhlbgorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNjA1LDExICsxMTg4NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNjIxLDcgKzExOTEwLDYgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNjQxLDExICsxMTkyOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNjU4LDEwICsxMTk1NSwxMCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBmaQorIAorIAorQEAgLTEwNjg2LDcgKzExOTgzLDYgQEAKKyBlbHNlCisgCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTA3MDUsMTEgKzEyMDAxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA3MjIsNyArMTIwMjcsNyBAQAorIAorIGFjX2N2X3dpbl9vcl9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93aW5fb3JfZG9zIiA+JjUKK0BAIC0xMDgzNCwxMyArMTIxMzksMTMgQEAKKyAgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisgICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzLycvJ1xcXFwnJy9nOworLSAgICAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisrCSJzLycvJ1xcXFwnJy9nOworKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgICA7OworICAgICAqKQorICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorKwkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgICA7OworICAgICBlc2FjOworIH0gfAorQEAgLTEwODcwLDEzICsxMjE3NSwxMyBAQAorICMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisgIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorIGlmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCistICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9L3sKKysgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworIHMvOipcJChzcmNkaXIpOiovOi87Cisgcy86Klwke3NyY2Rpcn06Ki86LzsKKyBzLzoqQHNyY2RpckA6Ki86LzsKKy1zL15cKFtePV0qPVsgCV0qXCk6Ki9cMS87Cisrcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOworIHMvOiokLy87Cistcy9eW149XSo9WyAJXSokLy87Cisrcy9eW149XSo9WwkgXSokLy87CisgfScKKyBmaQorIAorQEAgLTEwODg3LDcgKzEyMTkyLDcgQEAKKyBmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgIGFjX2k9YGVjaG8gIiRhY19pIiB8CistICAgICAgICAgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAorKwkgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAorICAgIyAyLiBBZGQgdGhlbS4KKyAgIGFjX2xpYm9ianM9IiRhY19saWJvYmpzICRhY19pXCRVLiRhY19vYmpleHQiCisgICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgJGFjX2kiJyRVLmxvJworQEAgLTEwOTMxLDkgKzEyMjM2LDEwIEBACisgZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIHNldCAtbyBwb3NpeAorIGZpCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorLWlmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgYXNfdW5zZXQ9dW5zZXQKKyBlbHNlCisgICBhc191bnNldD1mYWxzZQorQEAgLTEwOTUyLDcgKzEyMjU4LDcgQEAKKyAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgICBMQ19URUxFUEhPTkUgTENfVElNRQorIGRvCistICBpZiAoc2V0ICt4OyB0ZXN0IC1uICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgICBlbHNlCisgICAgICRhc191bnNldCAkYXNfdmFyCitAQCAtMTExMzEsMTYgKzEyNDM3LDE3IEBACisgaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICAgYXNfbWtkaXJfcD06CisgZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgIGFzX21rZGlyX3A9ZmFsc2UKKyBmaQorIAorIGFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCistYXNfdHJfY3BwPSJzZWQgeSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCistYXNfdHJfc2g9InNlZCB5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCisgIyBJRlMKK0BAIC0xMTE2Nyw3ICsxMjQ3NCw3IEBACisgY2F0ID4mNSA8PF9DU0VPRgorIAorIFRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcGF0Y2ggJGFzX21lIDIuNS45LCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKyAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworQEAgLTExMjExLDkgKzEyNTE4LDkgQEAKKyAgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorLSAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKysJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCistICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisrCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorIAorIENvbmZpZ3VyYXRpb24gZmlsZXM6CisgJGNvbmZpZ19maWxlcworQEAgLTExMjI3LDExICsxMjUzNCwxMCBAQAorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgYWNfY3NfdmVyc2lvbj0iXFwKKyBwYXRjaCBjb25maWcuc3RhdHVzIDIuNS45CistY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LAorK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSwKKyAgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorIAorLUNvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCistRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisgc3JjZGlyPSRzcmNkaXIKK0BAIC0xMTQ2Myw5ICsxMjc2OSw5IEBACisgICAgICAgKGVjaG8gJzp0CisgICAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiJyAmJiBjYXQgJHRtcC9zdWJzLmZyYWcpID4kdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZAorICAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKy0gIAlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorKwlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgIGVsc2UKKy0gIAlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorKwlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgIGZpCisgICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKKyAgICAgICBhY19iZWc9JGFjX2VuZAorQEAgLTExNDgzLDIxICsxMjc4OSwyMSBAQAorICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCistICAgICAgICBjYXQgPiR0bXAvc3RkaW4KKy0gICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwljYXQgPiR0bXAvc3RkaW4KKysJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICAgZXNhYworIAorICAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgorICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYWNfZmlsZSIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE1MTMsMTAgKzEyODE5LDEwIEBACisgICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC0xMTU1NCwxMiArMTI4NjAsNDUgQEAKKyAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworIGVzYWMKKy0jIERvbid0IGJsaW5kbHkgcGVyZm9ybSBhIGBjZCAiJGFjX2RpciIvJGFjX2ZvbyAmJiBwd2RgIHNpbmNlICRhY19mb28gY2FuIGJlCistIyBhYnNvbHV0ZS4KKy1hY19hYnNfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfYnVpbGRkaXIgJiYgcHdkYAorLWFjX2Fic190b3BfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAke2FjX3RvcF9idWlsZGRpcn0uICYmIHB3ZGAKKy1hY19hYnNfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3NyY2RpciAmJiBwd2RgCistYWNfYWJzX3RvcF9zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfdG9wX3NyY2RpciAmJiBwd2RgCisrCisrIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCisrIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KKytjYXNlIGBwd2RgIGluCisrLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrKikKKysgIGNhc2UgIiRhY19kaXIiIGluCisrICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrKikKKysgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorKyAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyopCisrICBjYXNlICRhY19zcmNkaXIgaW4KKysgIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyopCisrICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisrICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisgCisgCisgICBjYXNlICRJTlNUQUxMIGluCitAQCAtMTE1NjcsMTEgKzEyOTA2LDYgQEAKKyAgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZGRpciRJTlNUQUxMIDs7CisgICBlc2FjCisgCistICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorLSAgICBybSAtZiAiJGFjX2ZpbGUiCistICBmaQorICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCitAQCAtMTE1ODEsNyArMTI5MTUsNyBAQAorICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgorICAgZmkKKyAgIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKysJCQkJICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgorIAorICAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgICMgc3JjIHRyZWUuCitAQCAtMTE1OTAsMjYgKzEyOTI0LDMyIEBACisgICAgICAgY2FzZSAkZiBpbgorICAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgIFtcXC8kXSopCistICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKy0gICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKysJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZWNobyAkZjs7CisrCSBlY2hvICIkZiI7OworICAgICAgICopICMgUmVsYXRpdmUKKy0gICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKy0gICAgICAgICAgICMgQnVpbGQgdHJlZQorLSAgICAgICAgICAgZWNobyAkZgorLSAgICAgICAgIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKy0gICAgICAgICAgICMgU291cmNlIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJHNyY2Rpci8kZgorLSAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICMgL2Rldi9udWxsIHRyZWUKKy0gICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKwkgICAjIEJ1aWxkIHRyZWUKKysJICAgZWNobyAiJGYiCisrCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisrCSAgICMgU291cmNlIHRyZWUKKysJICAgZWNobyAiJHNyY2Rpci8kZiIKKysJIGVsc2UKKysJICAgIyAvZGV2L251bGwgdHJlZQorKwkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZmk7OworKwkgZmk7OworICAgICAgIGVzYWMKKyAgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrCisrICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorKyAgICBybSAtZiAiJGFjX2ZpbGUiCisrICBmaQorIF9BQ0VPRgorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgICBzZWQgIiRhY192cHN1YgorQEAgLTExNjQ5LDEyICsxMjk4OSwxMiBAQAorICMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KKyAjCisgIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorLWFjX2RBPSdzLF5cKFsgCV0qXCkjXChbIAldKmRlZmluZVsgCV1bIAldKlwpJworLWFjX2RCPSdbIAldLiokLFwxI1wyJworK2FjX2RBPSdzLF5cKFsJIF0qXCkjXChbCSBdKmRlZmluZVsJIF1bCSBdKlwpJworK2FjX2RCPSdbCSBdLiokLFwxI1wyJworIGFjX2RDPScgJworIGFjX2REPScsO3QnCisgIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KKy1hY191QT0ncyxeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKKythY191QT0ncyxeXChbCSBdKlwpI1woWwkgXSpcKXVuZGVmXChbCSBdWwkgXSpcKScKKyBhY191Qj0nJCxcMSNcMmRlZmluZVwzJworIGFjX3VDPScgJworIGFjX3VEPScsO3QnCitAQCAtMTE2NjMsMTEgKzEzMDAzLDExIEBACisgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgICBjYXNlICRhY19maWxlIGluCisgICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKy0gICAgICAgIGNhdCA+JHRtcC9zdGRpbgorLSAgICAgICAgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWNhdCA+JHRtcC9zdGRpbgorKwlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgICBlc2FjCisgCitAQCAtMTE2ODEsMjggKzEzMDIxLDI5IEBACisgICAgICAgY2FzZSAkZiBpbgorICAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgIFtcXC8kXSopCistICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKy0gICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKysJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZWNobyAkZjs7CisrCSAjIERvIHF1b3RlICRmLCB0byBwcmV2ZW50IERPUyBwYXRocyBmcm9tIGJlaW5nIElGUydkLgorKwkgZWNobyAiJGYiOzsKKyAgICAgICAqKSAjIFJlbGF0aXZlCistICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCistICAgICAgICAgICAjIEJ1aWxkIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJGYKKy0gICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCistICAgICAgICAgICAjIFNvdXJjZSB0cmVlCistICAgICAgICAgICBlY2hvICRzcmNkaXIvJGYKKy0gICAgICAgICBlbHNlCistICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCistICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisrCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKysJICAgIyBCdWlsZCB0cmVlCisrCSAgIGVjaG8gIiRmIgorKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorKwkgICAjIFNvdXJjZSB0cmVlCisrCSAgIGVjaG8gIiRzcmNkaXIvJGYiCisrCSBlbHNlCisrCSAgICMgL2Rldi9udWxsIHRyZWUKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGZpOzsKKysJIGZpOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAgIyBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlcy4KKy0gIHNlZCAncy9bIAldKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCisrICBzZWQgJ3MvWwkgXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgorIAorIF9BQ0VPRgorIAorQEAgLTExNzI1LDkgKzEzMDY2LDkgQEAKKyBzLFtcXCRgXSxcXCYsZworIHQgY2xlYXIKKyA6IGNsZWFyCistcyxeWyAJXSojWyAJXSpkZWZpbmVbIAldWyAJXSpcKFteIAkoXVteIAkoXSpcKVwoKFteKV0qKVwpWyAJXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKKytzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIChdW14JIChdKlwpXCgoW14pXSopXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDFcMiR7YWNfZEN9XDMke2FjX2REfSxncAorIHQgZW5kCistcyxeWyAJXSojWyAJXSpkZWZpbmVbIAldWyAJXSpcKFteIAldW14gCV0qXClbIAldKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKKytzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAorIDogZW5kCisgX0FDRU9GCisgIyBJZiBzb21lIG1hY3JvcyB3ZXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgdGltZXMKK0BAIC0xMTc0MSwxMyArMTMwODIsMTMgQEAKKyAjIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCisgY2F0ID4+Y29uZnRlc3QudW5kZWZzIDw8XF9BQ0VPRgorLXMsXlsgCV0qI1sgCV0qdW5kZWZbIAldWyAJXSpbYS16QS1aX11bYS16QS1aXzAtOV0qLC8qICYgKi8sCisrcyxeWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKKyBfQUNFT0YKKyAKKyAjIEJyZWFrIHVwIGNvbmZ0ZXN0LmRlZmluZXMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKKyAjIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCisgZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICNkZWZpbmUgdGVtcGxhdGVzIG9ubHkgaWYgbmVjZXNzYXJ5LicgPj4kQ09ORklHX1NUQVRVUworLWVjaG8gJyAgaWYgZ3JlcCAiXlsgCV0qI1sgCV0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKKytlY2hvICcgIGlmIGdyZXAgIl5bCSBdKiNbCSBdKmRlZmluZSIgJHRtcC9pbiA+L2Rldi9udWxsOyB0aGVuJyA+PiRDT05GSUdfU1RBVFVTCisgZWNobyAnICAjIElmIHRoZXJlIGFyZSBubyBkZWZpbmVzLCB3ZSBtYXkgaGF2ZSBhbiBlbXB0eSBpZi9maScgPj4kQ09ORklHX1NUQVRVUworIGVjaG8gJyAgOicgPj4kQ09ORklHX1NUQVRVUworIHJtIC1mIGNvbmZ0ZXN0LnRhaWwKK0BAIC0xMTc1Niw3ICsxMzA5Nyw3IEBACisgICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC9kZWZpbmVzLnNlZC4KKyAgIGVjaG8gJyAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUworICAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI2RlZmluZScgbGluZXMuCistICBlY2hvICcvXlsgCV0qI1sgCV0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCisrICBlY2hvICcvXlsJIF0qI1sJIF0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgorICAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCitAQCAtMTE3ODMsNyArMTMxMjQsNyBAQAorICAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvdW5kZWZzLnNlZC4KKyAgIGVjaG8gJyAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjdW5kZWYnCistICBlY2hvICcvXlsgCV0qI1sgCV0qdW5kZWYvIWInID4+JENPTkZJR19TVEFUVVMKKysgIGVjaG8gJy9eWwkgXSojWwkgXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUworICAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUworQEAgLTExODE3LDEwICsxMzE1OCwxMCBAQAorICAgICBlbHNlCisgICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYWNfZmlsZSIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE4MzYsMTAgKzEzMTc3LDEwIEBACisgICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHBhdGNoLTIuNS45L2NvbmZpZ3VyZS5hYworQEAgLTY0LDYgKzY0LDkgQEAKKyBnbF9QUkVSRVFfWE1BTExPQworIGdsX1FVT1RFCisgZ2xfUVVPVEVBUkcKKytnbF9IQVNICisrCisrYWdfQ0hFQ0tfTkFOT1NFQ09ORF9TVEFUCisgCisgZG5sIFRoaXMgc2hvdWxkIGJlIGluIGdudWxpYiwgYnV0IGlzbid0IGZvciBzb21lIHJlYXNvbi4KKyBBQ19ERUZVTihbam1fUFJFUkVRX0FEREVYVF0sCistLS0gcGF0Y2gtMi41Ljkub3JpZy9wY2guYworKysrIHBhdGNoLTIuNS45L3BjaC5jCitAQCAtMSw2ICsxLDYgQEAKKyAvKiByZWFkaW5nIHBhdGNoZXMgKi8KKyAKKy0vKiAkSWQ6IHBjaC5jLHYgMS40NCAyMDAzLzA1LzIwIDE0OjAzOjE3IGVnZ2VydCBFeHAgJCAqLworKy8qICRJZDogcGNoLmMsdiAxLjQ1IDIwMDMvMDcvMDIgMjI6MTk6MjEgZWdnZXJ0IEV4cCAkICovCisgCisgLyogQ29weXJpZ2h0IChDKSAxOTg2LCAxOTg3LCAxOTg4IExhcnJ5IFdhbGwKKyAKK0BAIC0zNjYsMTAgKzM2NiwxNiBAQAorIAlpZiAoIXN0YXJzX2xhc3RfbGluZSAmJiBzdHJuRVEocywgIioqKiAiLCA0KSkKKyAJICAgIG5hbWVbT0xEXSA9IGZldGNobmFtZSAocys0LCBzdHJpcHBhdGgsICZwX3RpbWVzdGFtcFtPTERdKTsKKyAJZWxzZSBpZiAoc3RybkVRKHMsICIrKysgIiwgNCkpCisrCSAgeworIAkgICAgLyogU3dhcCB3aXRoIE5FVyBiZWxvdy4gICovCisgCSAgICBuYW1lW09MRF0gPSBmZXRjaG5hbWUgKHMrNCwgc3RyaXBwYXRoLCAmcF90aW1lc3RhbXBbT0xEXSk7CisrCSAgICBwX3N0cmlwX3RyYWlsaW5nX2NyID0gc3RyaXBfdHJhaWxpbmdfY3I7CisrCSAgfQorIAllbHNlIGlmIChzdHJuRVEocywgIkluZGV4OiIsIDYpKQorKwkgIHsKKyAJICAgIG5hbWVbSU5ERVhdID0gZmV0Y2huYW1lIChzKzYsIHN0cmlwcGF0aCwgKHRpbWVfdCAqKSAwKTsKKysJICAgIHBfc3RyaXBfdHJhaWxpbmdfY3IgPSBzdHJpcF90cmFpbGluZ19jcjsKKysJICB9CisgCWVsc2UgaWYgKHN0cm5FUShzLCAiUHJlcmVxOiIsIDcpKSB7CisgCSAgICBmb3IgKHQgPSBzICsgNzsgIElTU1BBQ0UgKCh1bnNpZ25lZCBjaGFyKSAqdCk7ICB0KyspCisgCSAgICAgIGNvbnRpbnVlOworQEAgLTQwOSw2ICs0MTUsNyBAQAorIAkJICAgIHBfdGltZXN0YW1wW05FV10gPSB0aW1lc3RhbXA7CisgCQkgICAgcF9yZmM5MzRfbmVzdGluZyA9ICh0IC0gcykgPj4gMTsKKyAJCSAgfQorKwkJcF9zdHJpcF90cmFpbGluZ19jciA9IHN0cmlwX3RyYWlsaW5nX2NyOworIAkgICAgICB9CisgCSAgfQorIAlpZiAoKGRpZmZfdHlwZSA9PSBOT19ESUZGIHx8IGRpZmZfdHlwZSA9PSBFRF9ESUZGKSAmJgorLS0tIHBhdGNoLTIuNS45Lm9yaWcvdXRpbC5jCisrKysgcGF0Y2gtMi41LjkvdXRpbC5jCitAQCAtNDUsOSArNDUsMTcgQEAKKyAjIGRlZmluZSByYWlzZShzaWcpIGtpbGwgKGdldHBpZCAoKSwgc2lnKQorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxoYXNoLmg+CisgCisgc3RhdGljIHZvaWQgbWFrZWRpcnMgKGNoYXIgKik7Cisrc3RhdGljIGJvb2wgZmlkX3NlYXJjaCAoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc3RhdCAqLCBib29sKTsKKysjIGRlZmluZSBmaWRfZXhpc3RzKG5hbWUsIHBzdCkgZmlkX3NlYXJjaCAobmFtZSwgcHN0LCBmYWxzZSkKKysjIGRlZmluZSBpbnNlcnRfZmlkKG5hbWUpIGZpZF9zZWFyY2ggKG5hbWUsIE5VTEwsIHRydWUpCisgCisgLyogTW92ZSBhIGZpbGUgRlJPTSAod2hlcmUgKkZST01fTkVFRFNfUkVNT1ZBTCBpcyBub256ZXJvIGlmIEZST00KKyAgICBuZWVkcyByZW1vdmFsIHdoZW4gY2xlYW5pbmcgdXAgYXQgdGhlIGVuZCBvZiBleGVjdXRpb24pCitAQCAtNjQsNyArNzIsNyBAQAorICAgc3RydWN0IHN0YXQgdG9fc3Q7CisgICBpbnQgdG9fZXJybm8gPSAhIGJhY2t1cCA/IC0xIDogc3RhdCAodG8sICZ0b19zdCkgPT0gMCA/IDAgOiBlcnJubzsKKyAKKy0gIGlmIChiYWNrdXApCisrICBpZiAoYmFja3VwICYmICh0b19lcnJubyB8fCAhIGZpZF9leGlzdHMgKHRvLCAmdG9fc3QpKSkKKyAgICAgeworICAgICAgIGludCB0cnlfbWFrZWRpcnNfZXJybm8gPSAwOworICAgICAgIGNoYXIgKmJha25hbWU7CitAQCAtMTY1LDYgKzE3Myw3IEBACisgCSAgICAgIGlmICghIHRvX2Rpcl9rbm93bl90b19leGlzdCkKKyAJCW1ha2VkaXJzICh0byk7CisgCSAgICAgIGNvcHlfZmlsZSAoZnJvbSwgdG8sIDAsIG1vZGUpOworKwkgICAgICBpbnNlcnRfZmlkICh0byk7CisgCSAgICAgIHJldHVybjsKKyAJICAgIH0KKyAKK0BAIC0xNzMsNiArMTgyLDcgQEAKKyAJfQorIAorICAgICByZW5hbWVfc3VjY2VlZGVkOgorKyAgICAgIGluc2VydF9maWQgKHRvKTsKKyAgICAgICAvKiBEbyBub3QgY2xlYXIgKkZST01fTkVFRFNfUkVNT1ZBTCBpZiBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCisgCSByZW5hbWUgcmV0dXJuZWQgemVybyBiZWNhdXNlIEZST00gYW5kIFRPIGFyZSBoYXJkIGxpbmtzIHRvCisgCSB0aGUgc2FtZSBmaWxlLiAgKi8KK0BAIC0xMDExLDMgKzEwMjEsMTA1IEBACisgICBpZiAoZmlsZV9zZWVrIChzdHJlYW0sIG9mZnNldCwgcHRybmFtZSkgIT0gMCkKKyAgICAgcGZhdGFsICgiZnNlZWsiKTsKKyB9CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBkZXZfdAkJZmlkX2RldjsKKysgIGlub190CQlmaWRfaW5vOworKyAgdGltZV90CWZpZF9tdGltZTsKKysgIHVuc2lnbmVkIGxvbmcJZmlkX210aW1lbnNlYzsKKyt9IGZpbGVfaWQ7CisrCisrdW5zaWduZWQKKytmaWxlX2lkX2hhc2hlciAoZmlsZV9pZCAqZW50cnksIHVuc2lnbmVkIHRhYmxlX3NpemUpCisreworKyAgcmV0dXJuICgodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9pbm8gKworKyAgCSAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfZGV2ICsKKysgIAkgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+ZmlkX210aW1lICsKKysJICAodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9tdGltZW5zZWMpICUgdGFibGVfc2l6ZTsKKyt9CisrCisrYm9vbAorK2ZpbGVfaWRfY29tcGFyYXRvciAoZmlsZV9pZCAqZW50cnkxLCBmaWxlX2lkICplbnRyeTIpCisreworKyAgcmV0dXJuIChlbnRyeTEtPmZpZF9kZXYJPT0gZW50cnkyLT5maWRfZGV2ICYmCisrCSAgZW50cnkxLT5maWRfaW5vCT09IGVudHJ5Mi0+ZmlkX2lubyAmJgorKwkgIGVudHJ5MS0+ZmlkX210aW1lCT09IGVudHJ5Mi0+ZmlkX210aW1lICYmCisrCSAgZW50cnkxLT5maWRfbXRpbWVuc2VjID09IGVudHJ5Mi0+ZmlkX210aW1lbnNlYyk7CisrfQorKworK3ZvaWQKKytmaWxlX2lkX2ZyZWVyIChmaWxlX2lkICplbnRyeSkKKyt7CisrICBmcmVlIChlbnRyeSk7CisrfQorKworK0hhc2hfdGFibGUgKmZpbGVfaWRfaGFzaDsKKysKKysvKiBDaGVjayBpZiB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IEZJTEVOQU1FIGFuZCBQU1Qgd2FzIGFscmVhZHkgc2Vlbi4gSWYgdGhlCisrICAgZmlsZSB3YXMgYWxyZWFkeSBzZWVuLCByZXR1cm5zIFRSVUUuICBJZiB0aGUgZmlsZSBoYXMgbm90IHlldCBiZWVuIHNlZW4KKysgICBhbmQgSU5TRVJUIGlzIFRSVUUsIGl0IGlzIGluc2VydGVkLiAgUFNUIG9yIEZJTEVOQU1FIG1heSBiZSBOVUxMIChidXQgbm90CisrICAgYm90aCBvZiB0aGVtKS4gICovCisrCisrc3RhdGljIGJvb2wKKytmaWRfc2VhcmNoIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgc3RydWN0IHN0YXQgKnBzdCwgYm9vbCBpbnNlcnQpCisreworKyAgc3RydWN0IHN0YXQgc3Q7CisrCisrICBpZiAoIWZpbGVfaWRfaGFzaCkKKysgICAgeworKyAgICAgIGZpbGVfaWRfaGFzaCA9IGhhc2hfaW5pdGlhbGl6ZSAoMCwgTlVMTCwgKEhhc2hfaGFzaGVyKSBmaWxlX2lkX2hhc2hlciwKKysJCQkJICAgICAgKEhhc2hfY29tcGFyYXRvcikgZmlsZV9pZF9jb21wYXJhdG9yLAorKwkJCQkgICAgICAoSGFzaF9kYXRhX2ZyZWVyKSBmaWxlX2lkX2ZyZWVyKTsKKysgICAgICBpZiAoIWZpbGVfaWRfaGFzaCkKKysJcGZhdGFsICgiaGFzaF9pbml0aWFsaXplIik7CisrICAgIH0KKysKKysgIGlmICghcHN0KQorKyAgICB7CisrICAgICAgaWYgKHN0YXQgKGZpbGVuYW1lLCAmc3QpICE9IDApCisrCXBmYXRhbCAoIiVzIiwgcXVvdGVhcmcgKGZpbGVuYW1lKSk7CisrICAgICAgcHN0ID0gJnN0OworKyAgICB9CisrCisrICBpZiAoaW5zZXJ0KQorKyAgICB7CisrICAgICAgZmlsZV9pZCAqcGZpZCA9IHhtYWxsb2MgKHNpemVvZiAoZmlsZV9pZCkpLCAqb2xkX3BmaWQ7CisrICAgICAgcGZpZC0+ZmlkX2RldgkgID0gcHN0LT5zdF9kZXY7CisrICAgICAgcGZpZC0+ZmlkX2lubwkgID0gcHN0LT5zdF9pbm87CisrICAgICAgcGZpZC0+ZmlkX210aW1lCSAgPSBwc3QtPnN0X210aW1lOworKyNpZiBkZWZpbmVkKEhBVkVfU1RBVF9OU0VDKQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW1lbnNlYzsKKysjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW0udHZfbnNlYzsKKysjZWxzZQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSAwOworKyNlbmRpZgorKyAgICAgIG9sZF9wZmlkID0gaGFzaF9pbnNlcnQgKGZpbGVfaWRfaGFzaCwgcGZpZCk7CisrICAgICAgaWYgKCFvbGRfcGZpZCkKKysJcGZhdGFsICgiaGFzaF9pbnNlcnQiKTsKKysgICAgICBlbHNlIGlmIChvbGRfcGZpZCAhPSBwZmlkKQorKyAgICAgICAgeworKwkgIGZyZWUgKHBmaWQpOworKwkgIHJldHVybiB0cnVlOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gZmFsc2U7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGZpbGVfaWQgZmlkOworKyAgICAgIGZpZC5maWRfZGV2CT0gcHN0LT5zdF9kZXY7CisrICAgICAgZmlkLmZpZF9pbm8JPSBwc3QtPnN0X2lubzsKKysgICAgICBmaWQuZmlkX210aW1lCT0gcHN0LT5zdF9tdGltZTsKKysjaWYgZGVmaW5lZChIQVZFX1NUQVRfTlNFQykKKysgICAgICBmaWQuZmlkX210aW1lbnNlYyA9IHBzdC0+c3RfbXRpbWVuc2VjOworKyNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX1RJTUVWQUwpCisrICAgICAgZmlkLmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW0udHZfbnNlYzsKKysjZWxzZQorKyAgICAgIGZpZC5maWRfbXRpbWVuc2VjID0gMDsKKysjZW5kaWYKKysgICAgICByZXR1cm4gaGFzaF9sb29rdXAgKGZpbGVfaWRfaGFzaCwgJmZpZCkgIT0gMDsKKysgICAgfQorK30KKysKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2hhc2guYworKysrIHBhdGNoLTIuNS45L2hhc2guYworQEAgLTAsMCArMSwxMDUxIEBACisrLyogaGFzaCAtIGhhc2hpbmcgdGFibGUgcHJvY2Vzc2luZy4KKysKKysgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZywgMTk5Mi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEEgZ2VuZXJpYyBoYXNoIHRhYmxlIHBhY2thZ2UuICAqLworKworKy8qIERlZmluZSBVU0VfT0JTVEFDSyB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlIG9ic3RhY2tzIGluc3RlYWQKKysgICBvZiBtYWxsb2MuICBJZiB5b3UgY2hhbmdlIFVTRV9PQlNUQUNLLCB5b3UgaGF2ZSB0byByZWNvbXBpbGUhICAqLworKworKyNpZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxzdGRib29sLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrI2lmbmRlZiBIQVZFX0RFQ0xfRlJFRQorKyJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisrI2VuZGlmCisrI2lmICFIQVZFX0RFQ0xfRlJFRQorK3ZvaWQgZnJlZSAoKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBVkVfREVDTF9NQUxMT0MKKysidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorKyNlbmRpZgorKyNpZiAhSEFWRV9ERUNMX01BTExPQworK2NoYXIgKm1hbGxvYyAoKTsKKysjZW5kaWYKKysKKysjaWYgVVNFX09CU1RBQ0sKKysjIGluY2x1ZGUgIm9ic3RhY2suaCIKKysjIGlmbmRlZiBvYnN0YWNrX2NodW5rX2FsbG9jCisrIyAgZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgbWFsbG9jCisrIyBlbmRpZgorKyMgaWZuZGVmIG9ic3RhY2tfY2h1bmtfZnJlZQorKyMgIGRlZmluZSBvYnN0YWNrX2NodW5rX2ZyZWUgZnJlZQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSAiaGFzaC5oIgorKworK3N0cnVjdCBoYXNoX3RhYmxlCisrICB7CisrICAgIC8qIFRoZSBhcnJheSBvZiBidWNrZXRzIHN0YXJ0cyBhdCBCVUNLRVQgYW5kIGV4dGVuZHMgdG8gQlVDS0VUX0xJTUlULTEsCisrICAgICAgIGZvciBhIHBvc3NpYmlsaXR5IG9mIE5fQlVDS0VUUy4gIEFtb25nIHRob3NlLCBOX0JVQ0tFVFNfVVNFRCBidWNrZXRzCisrICAgICAgIGFyZSBub3QgZW1wdHksIHRoZXJlIGFyZSBOX0VOVFJJRVMgYWN0aXZlIGVudHJpZXMgaW4gdGhlIHRhYmxlLiAgKi8KKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldF9saW1pdDsKKysgICAgdW5zaWduZWQgbl9idWNrZXRzOworKyAgICB1bnNpZ25lZCBuX2J1Y2tldHNfdXNlZDsKKysgICAgdW5zaWduZWQgbl9lbnRyaWVzOworKworKyAgICAvKiBUdW5pbmcgYXJndW1lbnRzLCBrZXB0IGluIGEgcGh5c2ljYWx5IHNlcGFyYXRlIHN0cnVjdHVyZS4gICovCisrICAgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmc7CisrCisrICAgIC8qIFRocmVlIGZ1bmN0aW9ucyBhcmUgZ2l2ZW4gdG8gYGhhc2hfaW5pdGlhbGl6ZScsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgorKyAgICAgICBibG9jayBmb3IgdGhpcyBmdW5jdGlvbi4gIEluIGEgd29yZCwgSEFTSEVSIHJhbmRvbWl6ZXMgYSB1c2VyIGVudHJ5CisrICAgICAgIGludG8gYSBudW1iZXIgdXAgZnJvbSAwIHVwIHRvIHNvbWUgbWF4aW11bSBtaW51cyAxOyBDT01QQVJBVE9SIHJldHVybnMKKysgICAgICAgdHJ1ZSBpZiB0d28gdXNlciBlbnRyaWVzIGNvbXBhcmUgZXF1YWxseTsgYW5kIERBVEFfRlJFRVIgaXMgdGhlIGNsZWFudXAKKysgICAgICAgZnVuY3Rpb24gZm9yIGEgdXNlciBlbnRyeS4gICovCisrICAgIEhhc2hfaGFzaGVyIGhhc2hlcjsKKysgICAgSGFzaF9jb21wYXJhdG9yIGNvbXBhcmF0b3I7CisrICAgIEhhc2hfZGF0YV9mcmVlciBkYXRhX2ZyZWVyOworKworKyAgICAvKiBBIGxpbmtlZCBsaXN0IG9mIGZyZWVkIHN0cnVjdCBoYXNoX2VudHJ5IHN0cnVjdHMuICAqLworKyAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqZnJlZV9lbnRyeV9saXN0OworKworKyNpZiBVU0VfT0JTVEFDSworKyAgICAvKiBXaGVuZXZlciBvYnN0YWNrcyBhcmUgdXNlZCwgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYWxsIG92ZXJmbG93ZWQKKysgICAgICAgZW50cmllcyBpbnRvIGEgc2luZ2xlIHN0YWNrLCBzbyB0aGV5IGFsbCBjYW4gYmUgZnJlZWQgaW4gYSBzaW5nbGUKKysgICAgICAgb3BlcmF0aW9uLiAgSXQgaXMgbm90IGNsZWFyIGlmIHRoZSBzcGVlZHVwIGlzIHdvcnRoIHRoZSB0cm91YmxlLiAgKi8KKysgICAgc3RydWN0IG9ic3RhY2sgZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICB9OworKworKy8qIEEgaGFzaCB0YWJsZSBjb250YWlucyBtYW55IGludGVybmFsIGVudHJpZXMsIGVhY2ggaG9sZGluZyBhIHBvaW50ZXIgdG8KKysgICBzb21lIHVzZXIgcHJvdmlkZWQgZGF0YSAoYWxzbyBjYWxsZWQgYSB1c2VyIGVudHJ5KS4gIEFuIGVudHJ5IGluZGlzdGluY3RseQorKyAgIHJlZmVycyB0byBib3RoIHRoZSBpbnRlcm5hbCBlbnRyeSBhbmQgaXRzIGFzc29jaWF0ZWQgdXNlciBlbnRyeS4gIEEgdXNlcgorKyAgIGVudHJ5IGNvbnRlbnRzIG1heSBiZSBoYXNoZWQgYnkgYSByYW5kb21pemF0aW9uIGZ1bmN0aW9uICh0aGUgaGFzaGluZworKyAgIGZ1bmN0aW9uLCBvciBqdXN0IGBoYXNoZXInIGZvciBzaG9ydCkgaW50byBhIG51bWJlciAob3IgYHNsb3QnKSBiZXR3ZWVuIDAKKysgICBhbmQgdGhlIGN1cnJlbnQgdGFibGUgc2l6ZS4gIEF0IGVhY2ggc2xvdCBwb3NpdGlvbiBpbiB0aGUgaGFzaCB0YWJsZSwKKysgICBzdGFydHMgYSBsaW5rZWQgY2hhaW4gb2YgZW50cmllcyBmb3Igd2hpY2ggdGhlIHVzZXIgZGF0YSBhbGwgaGFzaCB0byB0aGlzCisrICAgc2xvdC4gIEEgYnVja2V0IGlzIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCBlbnRyaWVzIGhhc2hpbmcgdG8gdGhlIHNhbWUgc2xvdC4KKysKKysgICBBIGdvb2QgYGhhc2hlcicgZnVuY3Rpb24gd2lsbCBkaXN0cmlidXRlIGVudHJpZXMgcmF0aGVyIGV2ZW5seSBpbiBidWNrZXRzLgorKyAgIEluIHRoZSBpZGVhbCBjYXNlLCB0aGUgbGVuZ3RoIG9mIGVhY2ggYnVja2V0IGlzIHJvdWdobHkgdGhlIG51bWJlciBvZgorKyAgIGVudHJpZXMgZGl2aWRlZCBieSB0aGUgdGFibGUgc2l6ZS4gIEZpbmRpbmcgdGhlIHNsb3QgZm9yIGEgZGF0YSBpcyB1c3VhbGx5CisrICAgZG9uZSBpbiBjb25zdGFudCB0aW1lIGJ5IHRoZSBgaGFzaGVyJywgYW5kIHRoZSBsYXRlciBmaW5kaW5nIG9mIGEgcHJlY2lzZQorKyAgIGVudHJ5IGlzIGxpbmVhciBpbiB0aW1lIHdpdGggdGhlIHNpemUgb2YgdGhlIGJ1Y2tldC4gIENvbnNlcXVlbnRseSwgYQorKyAgIGxhcmdlciBoYXNoIHRhYmxlIHNpemUgKHRoYXQgaXMsIGEgbGFyZ2VyIG51bWJlciBvZiBidWNrZXRzKSBpcyBwcm9uZSB0bworKyAgIHlpZWxkaW5nIHNob3J0ZXIgY2hhaW5zLCAqZ2l2ZW4qIHRoZSBgaGFzaGVyJyBmdW5jdGlvbiBiZWhhdmVzIHByb3Blcmx5LgorKworKyAgIExvbmcgYnVja2V0cyBzbG93IGRvd24gdGhlIGxvb2t1cCBhbGdvcml0aG0uICBPbmUgbWlnaHQgdXNlIGJpZyBoYXNoIHRhYmxlCisrICAgc2l6ZXMgaW4gaG9wZSB0byByZWR1Y2UgdGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIGJ1Y2tldHMsIGJ1dCB0aGlzIG1pZ2h0CisrICAgYmVjb21lIGlub3JkaW5hdGUsIGFzIHVudXNlZCBzbG90cyBpbiB0aGUgaGFzaCB0YWJsZSB0YWtlIHNvbWUgc3BhY2UuICBUaGUKKysgICBiZXN0IGJldCBpcyB0byBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBhIGdvb2QgYGhhc2hlcicgZnVuY3Rpb24gKGJld2FyZQorKyAgIHRoYXQgdGhvc2UgYXJlIG5vdCB0aGF0IGVhc3kgdG8gd3JpdGUhIDotKSwgYW5kIHRvIHVzZSBhIHRhYmxlIHNpemUKKysgICBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIG51bWJlciBvZiBlbnRyaWVzLiAgKi8KKysKKysvKiBJZiBhbiBpbnNlcnRpb24gbWFrZXMgdGhlIHJhdGlvIG9mIG5vbmVtcHR5IGJ1Y2tldHMgdG8gdGFibGUgc2l6ZSBsYXJnZXIKKysgICB0aGFuIHRoZSBncm93dGggdGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuIDAuMCBhbmQgMS4wKSwgdGhlbiBpbmNyZWFzZQorKyAgIHRoZSB0YWJsZSBzaXplIGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBncm93dGggZmFjdG9yIChhIG51bWJlciBncmVhdGVyIHRoYW4KKysgICAxLjApLiAgVGhlIGdyb3d0aCB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gMC44LCBhbmQgdGhlIGdyb3d0aCBmYWN0b3IKKysgICBkZWZhdWx0cyB0byAxLjQxNCwgbWVhbmluZyB0aGF0IHRoZSB0YWJsZSB3aWxsIGhhdmUgZG91YmxlZCBpdHMgc2l6ZQorKyAgIGV2ZXJ5IHNlY29uZCB0aW1lIDgwJSBvZiB0aGUgYnVja2V0cyBnZXQgdXNlZC4gICovCisrI2RlZmluZSBERUZBVUxUX0dST1dUSF9USFJFU0hPTEQgMC44CisrI2RlZmluZSBERUZBVUxUX0dST1dUSF9GQUNUT1IgMS40MTQKKysKKysvKiBJZiBhIGRlbGV0aW9uIGVtcHRpZXMgYSBidWNrZXQgYW5kIGNhdXNlcyB0aGUgcmF0aW8gb2YgdXNlZCBidWNrZXRzIHRvCisrICAgdGFibGUgc2l6ZSB0byBiZWNvbWUgc21hbGxlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuCisrICAgMC4wIGFuZCAxLjApLCB0aGVuIHNocmluayB0aGUgdGFibGUgYnkgbXVsdGlwbHlpbmcgYnkgdGhlIHNocmluayBmYWN0b3IgKGEKKysgICBudW1iZXIgZ3JlYXRlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIGJ1dCBzbWFsbGVyIHRoYW4gMS4wKS4gIFRoZSBzaHJpbmsKKysgICB0aHJlc2hvbGQgYW5kIGZhY3RvciBkZWZhdWx0IHRvIDAuMCBhbmQgMS4wLCBtZWFuaW5nIHRoYXQgdGhlIHRhYmxlIG5ldmVyCisrICAgc2hyaW5rcy4gICovCisrI2RlZmluZSBERUZBVUxUX1NIUklOS19USFJFU0hPTEQgMC4wCisrI2RlZmluZSBERUZBVUxUX1NIUklOS19GQUNUT1IgMS4wCisrCisrLyogVXNlIHRoaXMgdG8gaW5pdGlhbGl6ZSBvciByZXNldCBhIFRVTklORyBzdHJ1Y3R1cmUgdG8KKysgICBzb21lIHNlbnNpYmxlIHZhbHVlcy4gKi8KKytzdGF0aWMgY29uc3QgSGFzaF90dW5pbmcgZGVmYXVsdF90dW5pbmcgPQorKyAgeworKyAgICBERUZBVUxUX1NIUklOS19USFJFU0hPTEQsCisrICAgIERFRkFVTFRfU0hSSU5LX0ZBQ1RPUiwKKysgICAgREVGQVVMVF9HUk9XVEhfVEhSRVNIT0xELAorKyAgICBERUZBVUxUX0dST1dUSF9GQUNUT1IsCisrICAgIGZhbHNlCisrICB9OworKworKy8qIEluZm9ybWF0aW9uIGFuZCBsb29rdXAuICAqLworKworKy8qIFRoZSBmb2xsb3dpbmcgZmV3IGZ1bmN0aW9ucyBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvdmVyYWxsIGhhc2gKKysgICB0YWJsZSBvcmdhbml6YXRpb246IHRoZSBudW1iZXIgb2YgZW50cmllcywgbnVtYmVyIG9mIGJ1Y2tldHMgYW5kIG1heGltdW0KKysgICBsZW5ndGggb2YgYnVja2V0cy4gICovCisrCisrLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZS4gIFRoZSB0YWJsZSBzaXplLCB0aGUgdG90YWwKKysgICBudW1iZXIgb2YgYnVja2V0cyAodXNlZCBwbHVzIHVudXNlZCksIG9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cywgYXJlCisrICAgdGhlIHNhbWUgcXVhbnRpdHkuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbl9idWNrZXRzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICByZXR1cm4gdGFibGUtPm5fYnVja2V0czsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gdXNlIChub24tZW1wdHkgYnVja2V0cykuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbl9idWNrZXRzX3VzZWQgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHJldHVybiB0YWJsZS0+bl9idWNrZXRzX3VzZWQ7CisrfQorKworKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBlbnRyaWVzLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X25fZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgcmV0dXJuIHRhYmxlLT5uX2VudHJpZXM7CisrfQorKworKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGNoYWluIChidWNrZXQpLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgdW5zaWduZWQgbWF4X2J1Y2tldF9sZW5ndGggPSAwOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yID0gYnVja2V0OworKwkgIHVuc2lnbmVkIGJ1Y2tldF9sZW5ndGggPSAxOworKworKwkgIHdoaWxlIChjdXJzb3IgPSBjdXJzb3ItPm5leHQsIGN1cnNvcikKKysJICAgIGJ1Y2tldF9sZW5ndGgrKzsKKysKKysJICBpZiAoYnVja2V0X2xlbmd0aCA+IG1heF9idWNrZXRfbGVuZ3RoKQorKwkgICAgbWF4X2J1Y2tldF9sZW5ndGggPSBidWNrZXRfbGVuZ3RoOworKwl9CisrICAgIH0KKysKKysgIHJldHVybiBtYXhfYnVja2V0X2xlbmd0aDsKKyt9CisrCisrLyogRG8gYSBtaWxkIHZhbGlkYXRpb24gb2YgYSBoYXNoIHRhYmxlLCBieSB0cmF2ZXJzaW5nIGl0IGFuZCBjaGVja2luZyB0d28KKysgICBzdGF0aXN0aWNzLiAgKi8KKysKKytib29sCisraGFzaF90YWJsZV9vayAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHVuc2lnbmVkIG5fYnVja2V0c191c2VkID0gMDsKKysgIHVuc2lnbmVkIG5fZW50cmllcyA9IDA7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQ7CisrCisrCSAgLyogQ291bnQgYnVja2V0IGhlYWQuICAqLworKwkgIG5fYnVja2V0c191c2VkKys7CisrCSAgbl9lbnRyaWVzKys7CisrCisrCSAgLyogQ291bnQgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCisrCSAgICBuX2VudHJpZXMrKzsKKysJfQorKyAgICB9CisrCisrICBpZiAobl9idWNrZXRzX3VzZWQgPT0gdGFibGUtPm5fYnVja2V0c191c2VkICYmIG5fZW50cmllcyA9PSB0YWJsZS0+bl9lbnRyaWVzKQorKyAgICByZXR1cm4gdHJ1ZTsKKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrdm9pZAorK2hhc2hfcHJpbnRfc3RhdGlzdGljcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIEZJTEUgKnN0cmVhbSkKKyt7CisrICB1bnNpZ25lZCBuX2VudHJpZXMgPSBoYXNoX2dldF9uX2VudHJpZXMgKHRhYmxlKTsKKysgIHVuc2lnbmVkIG5fYnVja2V0cyA9IGhhc2hfZ2V0X25fYnVja2V0cyAodGFibGUpOworKyAgdW5zaWduZWQgbl9idWNrZXRzX3VzZWQgPSBoYXNoX2dldF9uX2J1Y2tldHNfdXNlZCAodGFibGUpOworKyAgdW5zaWduZWQgbWF4X2J1Y2tldF9sZW5ndGggPSBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCAodGFibGUpOworKworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBlbnRyaWVzOiAgICAgICAgICV1XG4iLCBuX2VudHJpZXMpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzOiAgICAgICAgICV1XG4iLCBuX2J1Y2tldHMpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzIHVzZWQ6ICAgICV1ICglLjJmJSUpXG4iLCBuX2J1Y2tldHNfdXNlZCwKKysJICAgKDEwMC4wICogbl9idWNrZXRzX3VzZWQpIC8gbl9idWNrZXRzKTsKKysgIGZwcmludGYgKHN0cmVhbSwgIm1heCBidWNrZXQgbGVuZ3RoOiAldVxuIiwgbWF4X2J1Y2tldF9sZW5ndGgpOworK30KKysKKysvKiBJZiBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUsIHJldHVybiB0aGUKKysgICBlbnRyeSBmcm9tIHRoZSB0YWJsZS4gIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuICAqLworKworK3ZvaWQgKgorK2hhc2hfbG9va3VwIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgIGlmIChidWNrZXQtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrICAgIGlmICh0YWJsZS0+Y29tcGFyYXRvciAoZW50cnksIGN1cnNvci0+ZGF0YSkpCisrICAgICAgcmV0dXJuIGN1cnNvci0+ZGF0YTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBXYWxraW5nLiAgKi8KKysKKysvKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgcGFnZSB0cmF2ZXJzZSB0aGUgaGFzaCB0YWJsZSBhbmQgcHJvY2VzcyB0aGUKKysgICBjb250YWluZWQgZW50cmllcy4gIEZvciB0aGUgdHJhdmVyc2FsIHRvIHdvcmsgcHJvcGVybHksIHRoZSBoYXNoIHRhYmxlCisrICAgc2hvdWxkIG5vdCBiZSByZXNpemVkIG5vciBtb2RpZmllZCB3aGlsZSBhbnkgcGFydGljdWxhciBlbnRyeSBpcyBiZWluZworKyAgIHByb2Nlc3NlZC4gIEluIHBhcnRpY3VsYXIsIGVudHJpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZCBvciByZW1vdmVkLiAgKi8KKysKKysvKiBSZXR1cm4gdGhlIGZpcnN0IGRhdGEgaW4gdGhlIHRhYmxlLCBvciBOVUxMIGlmIHRoZSB0YWJsZSBpcyBlbXB0eS4gICovCisrCisrdm9pZCAqCisraGFzaF9nZXRfZmlyc3QgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBpZiAodGFibGUtPm5fZW50cmllcyA9PSAwKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgOyBidWNrZXQrKykKKysgICAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICAgIGFib3J0ICgpOworKyAgICBlbHNlIGlmIChidWNrZXQtPmRhdGEpCisrICAgICAgcmV0dXJuIGJ1Y2tldC0+ZGF0YTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSB1c2VyIGRhdGEgZm9yIHRoZSBlbnRyeSBmb2xsb3dpbmcgRU5UUlksIHdoZXJlIEVOVFJZIGhhcyBiZWVuCisrICAgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIGVpdGhlciBgaGFzaF9nZXRfZmlyc3QnIG9yIGBoYXNoX2dldF9uZXh0Jy4KKysgICBSZXR1cm4gTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBlbnRyaWVzLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2dldF9uZXh0IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIEZpbmQgbmV4dCBlbnRyeSBpbiB0aGUgc2FtZSBidWNrZXQuICAqLworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICBpZiAoY3Vyc29yLT5kYXRhID09IGVudHJ5ICYmIGN1cnNvci0+bmV4dCkKKysgICAgICByZXR1cm4gY3Vyc29yLT5uZXh0LT5kYXRhOworKworKyAgLyogRmluZCBmaXJzdCBlbnRyeSBpbiBhbnkgc3Vic2VxdWVudCBidWNrZXQuICAqLworKyAgd2hpbGUgKCsrYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkKKysgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysgICAgICByZXR1cm4gYnVja2V0LT5kYXRhOworKworKyAgLyogTm9uZSBmb3VuZC4gICovCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogRmlsbCBCVUZGRVIgd2l0aCBwb2ludGVycyB0byBhY3RpdmUgdXNlciBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlLCB0aGVuCisrICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgY29waWVkLiAgRG8gbm90IGNvcHkgbW9yZSB0aGFuIEJVRkZFUl9TSVpFCisrICAgcG9pbnRlcnMuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIHZvaWQgKipidWZmZXIsCisrCQkgIHVuc2lnbmVkIGJ1ZmZlcl9zaXplKQorK3sKKysgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysJICAgIHsKKysJICAgICAgaWYgKGNvdW50ZXIgPj0gYnVmZmVyX3NpemUpCisrCQlyZXR1cm4gY291bnRlcjsKKysJICAgICAgYnVmZmVyW2NvdW50ZXIrK10gPSBjdXJzb3ItPmRhdGE7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIGNvdW50ZXI7CisrfQorKworKy8qIENhbGwgYSBQUk9DRVNTT1IgZnVuY3Rpb24gZm9yIGVhY2ggZW50cnkgb2YgYSBoYXNoIHRhYmxlLCBhbmQgcmV0dXJuIHRoZQorKyAgIG51bWJlciBvZiBlbnRyaWVzIGZvciB3aGljaCB0aGUgcHJvY2Vzc29yIGZ1bmN0aW9uIHJldHVybmVkIHN1Y2Nlc3MuICBBCisrICAgcG9pbnRlciB0byBzb21lIFBST0NFU1NPUl9EQVRBIHdoaWNoIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gZWFjaCBjYWxsIHRvCisrICAgdGhlIHByb2Nlc3NvciBmdW5jdGlvbi4gIFRoZSBQUk9DRVNTT1IgYWNjZXB0cyB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMKKysgICB0aGUgdXNlciBlbnRyeSBiZWluZyB3YWxrZWQgaW50bywgdGhlIHNlY29uZCBpcyB0aGUgdmFsdWUgb2YgUFJPQ0VTU09SX0RBVEEKKysgICBhcyByZWNlaXZlZC4gIFRoZSB3YWxraW5nIGNvbnRpbnVlIGZvciBhcyBsb25nIGFzIHRoZSBQUk9DRVNTT1IgZnVuY3Rpb24KKysgICByZXR1cm5zIG5vbnplcm8uICBXaGVuIGl0IHJldHVybnMgemVybywgdGhlIHdhbGtpbmcgaXMgaW50ZXJydXB0ZWQuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9kb19mb3JfZWFjaCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIEhhc2hfcHJvY2Vzc29yIHByb2Nlc3NvciwKKysJCSAgdm9pZCAqcHJvY2Vzc29yX2RhdGEpCisreworKyAgdW5zaWduZWQgY291bnRlciA9IDA7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwkgICAgeworKwkgICAgICBpZiAoISgqcHJvY2Vzc29yKSAoY3Vyc29yLT5kYXRhLCBwcm9jZXNzb3JfZGF0YSkpCisrCQlyZXR1cm4gY291bnRlcjsKKysJICAgICAgY291bnRlcisrOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBjb3VudGVyOworK30KKysKKysvKiBBbGxvY2F0aW9uIGFuZCBjbGVhbi11cC4gICovCisrCisrLyogUmV0dXJuIGEgaGFzaCBpbmRleCBmb3IgYSBOVUwtdGVybWluYXRlZCBTVFJJTkcgYmV0d2VlbiAwIGFuZCBOX0JVQ0tFVFMtMS4KKysgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugcm91dGluZSBmb3IgY29uc3RydWN0aW5nIG90aGVyIGhhc2hpbmcgZnVuY3Rpb25zLiAgKi8KKysKKysjaWYgVVNFX0RJRkZfSEFTSAorKworKy8qIEFib3V0IGhhc2hpbmdzLCBQYXVsIEVnZ2VydCB3cml0ZXMgdG8gbWUgKEZQKSwgb24gMTk5NC0wMS0wMTogIlBsZWFzZSBzZWUKKysgICBCLiBKLiBNY0tlbnppZSwgUi4gSGFycmllcyAmIFQuIEJlbGwsIFNlbGVjdGluZyBhIGhhc2hpbmcgYWxnb3JpdGhtLAorKyAgIFNvZnR3YXJlLS1wcmFjdGljZSAmIGV4cGVyaWVuY2UgMjAsIDIgKEZlYiAxOTkwKSwgMjA5LTIyNC4gIEdvb2QgaGFzaAorKyAgIGFsZ29yaXRobXMgdGVuZCB0byBiZSBkb21haW4tc3BlY2lmaWMsIHNvIHdoYXQncyBnb29kIGZvciBbZGlmZnV0aWxzJ10gaW8uYworKyAgIG1heSBub3QgYmUgZ29vZCBmb3IgeW91ciBhcHBsaWNhdGlvbi4iICAqLworKworK3Vuc2lnbmVkCisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgdW5zaWduZWQgbl9idWNrZXRzKQorK3sKKysjIGRlZmluZSBST1RBVEVfTEVGVChWYWx1ZSwgU2hpZnQpIFwKKysgICgoVmFsdWUpIDw8IChTaGlmdCkgfCAoVmFsdWUpID4+ICgoc2l6ZW9mICh1bnNpZ25lZCkgKiBDSEFSX0JJVCkgLSAoU2hpZnQpKSkKKysjIGRlZmluZSBIQVNIX09ORV9DSEFSKFZhbHVlLCBCeXRlKSBcCisrICAoKEJ5dGUpICsgUk9UQVRFX0xFRlQgKFZhbHVlLCA3KSkKKysKKysgIHVuc2lnbmVkIHZhbHVlID0gMDsKKysKKysgIGZvciAoOyAqc3RyaW5nOyBzdHJpbmcrKykKKysgICAgdmFsdWUgPSBIQVNIX09ORV9DSEFSICh2YWx1ZSwgKihjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cmluZyk7CisrICByZXR1cm4gdmFsdWUgJSBuX2J1Y2tldHM7CisrCisrIyB1bmRlZiBST1RBVEVfTEVGVAorKyMgdW5kZWYgSEFTSF9PTkVfQ0hBUgorK30KKysKKysjZWxzZSAvKiBub3QgVVNFX0RJRkZfSEFTSCAqLworKworKy8qIFRoaXMgb25lIGNvbWVzIGZyb20gYHJlY29kZScsIGFuZCBwZXJmb3JtcyBhIGJpdCBiZXR0ZXIgdGhhbiB0aGUgYWJvdmUgYXMKKysgICBwZXIgYSBmZXcgZXhwZXJpbWVudHMuICBJdCBpcyBpbnNwaXJlZCBmcm9tIGEgaGFzaGluZyByb3V0aW5lIGZvdW5kIGluIHRoZQorKyAgIHZlcnkgb2xkIEN5YmVyIGBzbm9vcCcsIGl0c2VsZiB3cml0dGVuIGluIHR5cGljYWwgR3JlZyBNYW5zZmllbGQgc3R5bGUuCisrICAgKEJ5IHRoZSB3YXksIHdoYXQgaGFwcGVuZWQgdG8gdGhpcyBleGNlbGxlbnQgbWFuPyAgSXMgaGUgc3RpbGwgYWxpdmU/KSAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfc3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIG5fYnVja2V0cykKKyt7CisrICB1bnNpZ25lZCB2YWx1ZSA9IDA7CisrCisrICB3aGlsZSAoKnN0cmluZykKKysgICAgdmFsdWUgPSAoKHZhbHVlICogMzEgKyAoaW50KSAqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyaW5nKyspCisrCSAgICAgJSBuX2J1Y2tldHMpOworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKysjZW5kaWYgLyogbm90IFVTRV9ESUZGX0hBU0ggKi8KKysKKysvKiBSZXR1cm4gdHJ1ZSBpZiBDQU5ESURBVEUgaXMgYSBwcmltZSBudW1iZXIuICBDQU5ESURBVEUgc2hvdWxkIGJlIGFuIG9kZAorKyAgIG51bWJlciBhdCBsZWFzdCBlcXVhbCB0byAxMS4gICovCisrCisrc3RhdGljIGJvb2wKKytpc19wcmltZSAodW5zaWduZWQgbG9uZyBjYW5kaWRhdGUpCisreworKyAgdW5zaWduZWQgbG9uZyBkaXZpc29yID0gMzsKKysgIHVuc2lnbmVkIGxvbmcgc3F1YXJlID0gZGl2aXNvciAqIGRpdmlzb3I7CisrCisrICB3aGlsZSAoc3F1YXJlIDwgY2FuZGlkYXRlICYmIChjYW5kaWRhdGUgJSBkaXZpc29yKSkKKysgICAgeworKyAgICAgIGRpdmlzb3IrKzsKKysgICAgICBzcXVhcmUgKz0gNCAqIGRpdmlzb3I7CisrICAgICAgZGl2aXNvcisrOworKyAgICB9CisrCisrICByZXR1cm4gKGNhbmRpZGF0ZSAlIGRpdmlzb3IgPyB0cnVlIDogZmFsc2UpOworK30KKysKKysvKiBSb3VuZCBhIGdpdmVuIENBTkRJREFURSBudW1iZXIgdXAgdG8gdGhlIG5lYXJlc3QgcHJpbWUsIGFuZCByZXR1cm4gdGhhdAorKyAgIHByaW1lLiAgUHJpbWVzIGxvd2VyIHRoYW4gMTAgYXJlIG1lcmVseSBza2lwcGVkLiAgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgbG9uZworK25leHRfcHJpbWUgKHVuc2lnbmVkIGxvbmcgY2FuZGlkYXRlKQorK3sKKysgIC8qIFNraXAgc21hbGwgcHJpbWVzLiAgKi8KKysgIGlmIChjYW5kaWRhdGUgPCAxMCkKKysgICAgY2FuZGlkYXRlID0gMTA7CisrCisrICAvKiBNYWtlIGl0IGRlZmluaXRlbHkgb2RkLiAgKi8KKysgIGNhbmRpZGF0ZSB8PSAxOworKworKyAgd2hpbGUgKCFpc19wcmltZSAoY2FuZGlkYXRlKSkKKysgICAgY2FuZGlkYXRlICs9IDI7CisrCisrICByZXR1cm4gY2FuZGlkYXRlOworK30KKysKKyt2b2lkCisraGFzaF9yZXNldF90dW5pbmcgKEhhc2hfdHVuaW5nICp0dW5pbmcpCisreworKyAgKnR1bmluZyA9IGRlZmF1bHRfdHVuaW5nOworK30KKysKKysvKiBGb3IgdGhlIGdpdmVuIGhhc2ggVEFCTEUsIGNoZWNrIHRoZSB1c2VyIHN1cHBsaWVkIHR1bmluZyBzdHJ1Y3R1cmUgZm9yCisrICAgcmVhc29uYWJsZSB2YWx1ZXMsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBubyBncm9zcyBlcnJvciB3aXRoIGl0LgorKyAgIE90aGVyd2lzZSwgZGVmaW5pdGl2ZWx5IHJlc2V0IHRoZSBUVU5JTkcgZmllbGQgdG8gc29tZSBhY2NlcHRhYmxlIGRlZmF1bHQKKysgICBpbiB0aGUgaGFzaCB0YWJsZSAodGhhdCBpcywgdGhlIHVzZXIgbG9zZXMgdGhlIHJpZ2h0IG9mIGZ1cnRoZXIgbW9kaWZ5aW5nCisrICAgdHVuaW5nIGFyZ3VtZW50cyksIGFuZCByZXR1cm4gZmFsc2UuICAqLworKworK3N0YXRpYyBib29sCisrY2hlY2tfdHVuaW5nIChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKKysKKysgIGlmICh0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPiAwLjAKKysgICAgICAmJiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPCAxLjAKKysgICAgICAmJiB0dW5pbmctPmdyb3d0aF9mYWN0b3IgPiAxLjAKKysgICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQgPj0gMC4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkIDwgMS4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfZmFjdG9yID4gdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfZmFjdG9yIDw9IDEuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCA8IHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkKKysgICAgcmV0dXJuIHRydWU7CisrCisrICB0YWJsZS0+dHVuaW5nID0gJmRlZmF1bHRfdHVuaW5nOworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKysvKiBBbGxvY2F0ZSBhbmQgcmV0dXJuIGEgbmV3IGhhc2ggdGFibGUsIG9yIE5VTEwgdXBvbiBmYWlsdXJlLiAgVGhlIGluaXRpYWwKKysgICBudW1iZXIgb2YgYnVja2V0cyBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHNvIGFzIHRvIF9ndWFyYW50ZWVfIHRoYXQgeW91CisrICAgbWF5IGluc2VydCBhdCBsZWFzdCBDQU5ESURBVEUgZGlmZmVyZW50IHVzZXIgZW50cmllcyBiZWZvcmUgYW55IGdyb3d0aCBvZgorKyAgIHRoZSBoYXNoIHRhYmxlIHNpemUgb2NjdXJzLiAgU28sIGlmIGhhdmUgYSByZWFzb25hYmx5IHRpZ2h0IGEtcHJpb3JpIHVwcGVyCisrICAgYm91bmQgb24gdGhlIG51bWJlciBvZiBlbnRyaWVzIHlvdSBpbnRlbmQgdG8gaW5zZXJ0IGluIHRoZSBoYXNoIHRhYmxlLCB5b3UKKysgICBtYXkgc2F2ZSBzb21lIHRhYmxlIG1lbW9yeSBhbmQgaW5zZXJ0aW9uIHRpbWUsIGJ5IHNwZWNpZnlpbmcgaXQgaGVyZS4gIElmCisrICAgdGhlIElTX05fQlVDS0VUUyBmaWVsZCBvZiB0aGUgVFVOSU5HIHN0cnVjdHVyZSBpcyB0cnVlLCB0aGUgQ0FORElEQVRFCisrICAgYXJndW1lbnQgaGFzIGl0cyBtZWFuaW5nIGNoYW5nZWQgdG8gdGhlIHdhbnRlZCBudW1iZXIgb2YgYnVja2V0cy4KKysKKysgICBUVU5JTkcgcG9pbnRzIHRvIGEgc3RydWN0dXJlIG9mIHVzZXItc3VwcGxpZWQgdmFsdWVzLCBpbiBjYXNlIHNvbWUgZmluZQorKyAgIHR1bmluZyBpcyB3YW50ZWQgb3ZlciB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgaGFzaGVyLiAgSWYgVFVOSU5HIGlzCisrICAgTlVMTCwgdGhlIGRlZmF1bHQgdHVuaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQgaW5zdGVhZC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBIQVNIRVIgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3ZpZGVkLiAgSXQgYWNjZXB0cyB0d28KKysgICBhcmd1bWVudHMgRU5UUlkgYW5kIFRBQkxFX1NJWkUuICBJdCBjb21wdXRlcywgYnkgaGFzaGluZyBFTlRSWSBjb250ZW50cywgYQorKyAgIHNsb3QgbnVtYmVyIGZvciB0aGF0IGVudHJ5IHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgMC4uVEFCTEVfU0laRS0xLgorKyAgIFRoaXMgc2xvdCBudW1iZXIgaXMgdGhlbiByZXR1cm5lZC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBDT01QQVJBVE9SIGZ1bmN0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gIEl0IGFjY2VwdHMgdHdvCisrICAgYXJndW1lbnRzIHBvaW50aW5nIHRvIHVzZXIgZGF0YSwgaXQgdGhlbiByZXR1cm5zIHRydWUgZm9yIGEgcGFpciBvZiBlbnRyaWVzCisrICAgdGhhdCBjb21wYXJlIGVxdWFsLCBvciBmYWxzZSBvdGhlcndpc2UuICBUaGlzIGZ1bmN0aW9uIGlzIGludGVybmFsbHkgY2FsbGVkCisrICAgb24gZW50cmllcyB3aGljaCBhcmUgYWxyZWFkeSBrbm93biB0byBoYXNoIHRvIHRoZSBzYW1lIGJ1Y2tldCBpbmRleC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBEQVRBX0ZSRUVSIGZ1bmN0aW9uLCB3aGVuIG5vdCBOVUxMLCBtYXkgYmUgbGF0ZXIgY2FsbGVkCisrICAgd2l0aCB0aGUgdXNlciBkYXRhIGFzIGFuIGFyZ3VtZW50LCBqdXN0IGJlZm9yZSB0aGUgZW50cnkgY29udGFpbmluZyB0aGUKKysgICBkYXRhIGdldHMgZnJlZWQuICBUaGlzIGhhcHBlbnMgZnJvbSB3aXRoaW4gYGhhc2hfZnJlZScgb3IgYGhhc2hfY2xlYXInLgorKyAgIFlvdSBzaG91bGQgc3BlY2lmeSB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZyZWUKKysgICBhbGwgb2YgeW91ciBgZGF0YScgZGF0YS4gIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBjYXNlIHdoZW4geW91ciBkYXRhIGlzCisrICAgc2ltcGx5IGFuIGF1eGlsaWFyeSBzdHJ1Y3QgdGhhdCB5b3UgaGF2ZSBtYWxsb2MnZCB0byBhZ2dyZWdhdGUgc2V2ZXJhbAorKyAgIHZhbHVlcy4gICovCisrCisrSGFzaF90YWJsZSAqCisraGFzaF9pbml0aWFsaXplICh1bnNpZ25lZCBjYW5kaWRhdGUsIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcsCisrCQkgSGFzaF9oYXNoZXIgaGFzaGVyLCBIYXNoX2NvbXBhcmF0b3IgY29tcGFyYXRvciwKKysJCSBIYXNoX2RhdGFfZnJlZXIgZGF0YV9mcmVlcikKKyt7CisrICBIYXNoX3RhYmxlICp0YWJsZTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBpZiAoaGFzaGVyID09IE5VTEwgfHwgY29tcGFyYXRvciA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIHRhYmxlID0gKEhhc2hfdGFibGUgKikgbWFsbG9jIChzaXplb2YgKEhhc2hfdGFibGUpKTsKKysgIGlmICh0YWJsZSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGlmICghdHVuaW5nKQorKyAgICB0dW5pbmcgPSAmZGVmYXVsdF90dW5pbmc7CisrICB0YWJsZS0+dHVuaW5nID0gdHVuaW5nOworKyAgaWYgKCFjaGVja190dW5pbmcgKHRhYmxlKSkKKysgICAgeworKyAgICAgIC8qIEZhaWwgaWYgdGhlIHR1bmluZyBvcHRpb25zIGFyZSBpbnZhbGlkLiAgVGhpcyBpcyB0aGUgb25seSBvY2Nhc2lvbgorKwkgd2hlbiB0aGUgdXNlciBnZXRzIHNvbWUgZmVlZGJhY2sgYWJvdXQgaXQuICBPbmNlIHRoZSB0YWJsZSBpcyBjcmVhdGVkLAorKwkgaWYgdGhlIHVzZXIgcHJvdmlkZXMgaW52YWxpZCB0dW5pbmcgb3B0aW9ucywgd2Ugc2lsZW50bHkgcmV2ZXJ0IHRvCisrCSB1c2luZyB0aGUgZGVmYXVsdHMsIGFuZCBpZ25vcmUgZnVydGhlciByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgdHVuaW5nCisrCSBvcHRpb25zLiAgKi8KKysgICAgICBmcmVlICh0YWJsZSk7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgIHRhYmxlLT5uX2J1Y2tldHMKKysgICAgPSBuZXh0X3ByaW1lICh0dW5pbmctPmlzX25fYnVja2V0cyA/IGNhbmRpZGF0ZQorKwkJICA6ICh1bnNpZ25lZCkgKGNhbmRpZGF0ZSAvIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkpOworKworKyAgdGFibGUtPmJ1Y2tldCA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKQorKyAgICBtYWxsb2MgKHRhYmxlLT5uX2J1Y2tldHMgKiBzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrICBpZiAodGFibGUtPmJ1Y2tldCA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZnJlZSAodGFibGUpOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrICB0YWJsZS0+YnVja2V0X2xpbWl0ID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5uX2J1Y2tldHM7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysgICAgICBidWNrZXQtPm5leHQgPSBOVUxMOworKyAgICB9CisrICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSAwOworKyAgdGFibGUtPm5fZW50cmllcyA9IDA7CisrCisrICB0YWJsZS0+aGFzaGVyID0gaGFzaGVyOworKyAgdGFibGUtPmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yOworKyAgdGFibGUtPmRhdGFfZnJlZXIgPSBkYXRhX2ZyZWVyOworKworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IE5VTEw7CisrI2lmIFVTRV9PQlNUQUNLCisrICBvYnN0YWNrX2luaXQgKCZ0YWJsZS0+ZW50cnlfc3RhY2spOworKyNlbmRpZgorKyAgcmV0dXJuIHRhYmxlOworK30KKysKKysvKiBNYWtlIGFsbCBidWNrZXRzIGVtcHR5LCBwbGFjaW5nIGFueSBjaGFpbmVkIGVudHJpZXMgb24gdGhlIGZyZWUgbGlzdC4KKysgICBBcHBseSB0aGUgdXNlci1zcGVjaWZpZWQgZnVuY3Rpb24gZGF0YV9mcmVlciAoaWYgYW55KSB0byB0aGUgZGF0YXMgb2YgYW55CisrICAgYWZmZWN0ZWQgZW50cmllcy4gICovCisrCisrdm9pZAorK2hhc2hfY2xlYXIgKEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisrCisrCSAgLyogRnJlZSB0aGUgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJICBmb3IgKGN1cnNvciA9IGJ1Y2tldC0+bmV4dDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKwkgICAgeworKwkgICAgICBpZiAodGFibGUtPmRhdGFfZnJlZXIpCisrCQkoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoY3Vyc29yLT5kYXRhKTsKKysJICAgICAgY3Vyc29yLT5kYXRhID0gTlVMTDsKKysKKysJICAgICAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKysJICAgICAgLyogUmVsaW5raW5nIGlzIGRvbmUgb25lIGVudHJ5IGF0IGEgdGltZSwgYXMgaXQgaXMgdG8gYmUgZXhwZWN0ZWQKKysJCSB0aGF0IG92ZXJmbG93cyBhcmUgZWl0aGVyIHJhcmUgb3Igc2hvcnQuICAqLworKwkgICAgICBjdXJzb3ItPm5leHQgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKwkgICAgICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gY3Vyc29yOworKwkgICAgfQorKworKwkgIC8qIEZyZWUgdGhlIGJ1Y2tldCBoZWFkLiAgKi8KKysJICBpZiAodGFibGUtPmRhdGFfZnJlZXIpCisrCSAgICAoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoYnVja2V0LT5kYXRhKTsKKysJICBidWNrZXQtPmRhdGEgPSBOVUxMOworKwkgIGJ1Y2tldC0+bmV4dCA9IE5VTEw7CisrCX0KKysgICAgfQorKworKyAgdGFibGUtPm5fYnVja2V0c191c2VkID0gMDsKKysgIHRhYmxlLT5uX2VudHJpZXMgPSAwOworK30KKysKKysvKiBSZWNsYWltIGFsbCBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBhIGhhc2ggdGFibGUuICBJZiBhIGRhdGFfZnJlZXIKKysgICBmdW5jdGlvbiBoYXMgYmVlbiBzdXBwbGllZCBieSB0aGUgdXNlciB3aGVuIHRoZSBoYXNoIHRhYmxlIHdhcyBjcmVhdGVkLAorKyAgIHRoaXMgZnVuY3Rpb24gYXBwbGllcyBpdCB0byB0aGUgZGF0YSBvZiBlYWNoIGVudHJ5IGJlZm9yZSBmcmVlaW5nIHRoYXQKKysgICBlbnRyeS4gICovCisrCisrdm9pZAorK2hhc2hfZnJlZSAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysKKysgIC8qIENhbGwgdGhlIHVzZXIgZGF0YV9mcmVlciBmdW5jdGlvbi4gICovCisrICBpZiAodGFibGUtPmRhdGFfZnJlZXIgJiYgdGFibGUtPm5fZW50cmllcykKKysgICAgeworKyAgICAgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrCXsKKysJICBpZiAoYnVja2V0LT5kYXRhKQorKwkgICAgeworKwkgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCQl7CisrCQkgICgqdGFibGUtPmRhdGFfZnJlZXIpIChjdXJzb3ItPmRhdGEpOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKysjaWYgVVNFX09CU1RBQ0sKKysKKysgIG9ic3RhY2tfZnJlZSAoJnRhYmxlLT5lbnRyeV9zdGFjaywgTlVMTCk7CisrCisrI2Vsc2UKKysKKysgIC8qIEZyZWUgYWxsIGJ1Y2tldCBvdmVyZmxvd2VkIGVudHJpZXMuICAqLworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0LT5uZXh0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrCXsKKysJICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKwkgIGZyZWUgKGN1cnNvcik7CisrCX0KKysgICAgfQorKworKyAgLyogQWxzbyByZWNsYWltIHRoZSBpbnRlcm5hbCBsaXN0IG9mIHByZXZpb3VzbHkgZnJlZWQgZW50cmllcy4gICovCisrICBmb3IgKGN1cnNvciA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKKysgICAgeworKyAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrICAgICAgZnJlZSAoY3Vyc29yKTsKKysgICAgfQorKworKyNlbmRpZgorKworKyAgLyogRnJlZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZS4gICovCisrICBmcmVlICh0YWJsZS0+YnVja2V0KTsKKysgIGZyZWUgKHRhYmxlKTsKKyt9CisrCisrLyogSW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4gICovCisrCisrLyogR2V0IGEgbmV3IGhhc2ggZW50cnkgZm9yIGEgYnVja2V0IG92ZXJmbG93LCBwb3NzaWJseSBieSByZWNseWluZyBhCisrICAgcHJldmlvdXNseSBmcmVlZCBvbmUuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYWxsb2NhdGUgYSBuZXcgb25lLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IGhhc2hfZW50cnkgKgorK2FsbG9jYXRlX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3OworKworKyAgaWYgKHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QpCisrICAgIHsKKysgICAgICBuZXcgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgICAgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBuZXctPm5leHQ7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyNpZiBVU0VfT0JTVEFDSworKyAgICAgIG5ldyA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKQorKwlvYnN0YWNrX2FsbG9jICgmdGFibGUtPmVudHJ5X3N0YWNrLCBzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrI2Vsc2UKKysgICAgICBuZXcgPSAoc3RydWN0IGhhc2hfZW50cnkgKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrI2VuZGlmCisrICAgIH0KKysKKysgIHJldHVybiBuZXc7CisrfQorKworKy8qIEZyZWUgYSBoYXNoIGVudHJ5IHdoaWNoIHdhcyBwYXJ0IG9mIHNvbWUgYnVja2V0IG92ZXJmbG93LAorKyAgIHNhdmluZyBpdCBmb3IgbGF0ZXIgcmVjeWNsaW5nLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK2ZyZWVfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgaGFzaF9lbnRyeSAqZW50cnkpCisreworKyAgZW50cnktPmRhdGEgPSBOVUxMOworKyAgZW50cnktPm5leHQgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IGVudHJ5OworK30KKysKKysvKiBUaGlzIHByaXZhdGUgZnVuY3Rpb24gaXMgdXNlZCB0byBoZWxwIHdpdGggaW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4gIFdoZW4KKysgICBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGluIHRoZSB0YWJsZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZworKyAgIHVzZXIgZGF0YSBhbmQgc2V0ICpCVUNLRVRfSEVBRCB0byB0aGUgaGVhZCBvZiB0aGUgc2VsZWN0ZWQgYnVja2V0LgorKyAgIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuICBXaGVuIERFTEVURSBpcyB0cnVlIGFuZCBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGluCisrICAgdGhlIHRhYmxlLCB1bmxpbmsgdGhlIG1hdGNoaW5nIGVudHJ5LiAgKi8KKysKKytzdGF0aWMgdm9pZCAqCisraGFzaF9maW5kX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnksCisrCQkgc3RydWN0IGhhc2hfZW50cnkgKipidWNrZXRfaGVhZCwgYm9vbCBkZWxldGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgICpidWNrZXRfaGVhZCA9IGJ1Y2tldDsKKysKKysgIC8qIFRlc3QgZm9yIGVtcHR5IGJ1Y2tldC4gICovCisrICBpZiAoYnVja2V0LT5kYXRhID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogU2VlIGlmIHRoZSBlbnRyeSBpcyB0aGUgZmlyc3QgaW4gdGhlIGJ1Y2tldC4gICovCisrICBpZiAoKCp0YWJsZS0+Y29tcGFyYXRvcikgKGVudHJ5LCBidWNrZXQtPmRhdGEpKQorKyAgICB7CisrICAgICAgdm9pZCAqZGF0YSA9IGJ1Y2tldC0+ZGF0YTsKKysKKysgICAgICBpZiAoZGVsZXRlKQorKwl7CisrCSAgaWYgKGJ1Y2tldC0+bmV4dCkKKysJICAgIHsKKysJICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBidWNrZXQtPm5leHQ7CisrCisrCSAgICAgIC8qIEJ1bXAgdGhlIGZpcnN0IG92ZXJmbG93IGVudHJ5IGludG8gdGhlIGJ1Y2tldCBoZWFkLCB0aGVuIHNhdmUKKysJCSB0aGUgcHJldmlvdXMgZmlyc3Qgb3ZlcmZsb3cgZW50cnkgZm9yIGxhdGVyIHJlY3ljbGluZy4gICovCisrCSAgICAgICpidWNrZXQgPSAqbmV4dDsKKysJICAgICAgZnJlZV9lbnRyeSAodGFibGUsIG5leHQpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysJICAgIH0KKysJfQorKworKyAgICAgIHJldHVybiBkYXRhOworKyAgICB9CisrCisrICAvKiBTY2FuIHRoZSBidWNrZXQgb3ZlcmZsb3cuICAqLworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvci0+bmV4dDsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICB7CisrICAgICAgaWYgKCgqdGFibGUtPmNvbXBhcmF0b3IpIChlbnRyeSwgY3Vyc29yLT5uZXh0LT5kYXRhKSkKKysJeworKwkgIHZvaWQgKmRhdGEgPSBjdXJzb3ItPm5leHQtPmRhdGE7CisrCisrCSAgaWYgKGRlbGV0ZSkKKysJICAgIHsKKysJICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBjdXJzb3ItPm5leHQ7CisrCisrCSAgICAgIC8qIFVubGluayB0aGUgZW50cnkgdG8gZGVsZXRlLCB0aGVuIHNhdmUgdGhlIGZyZWVkIGVudHJ5IGZvciBsYXRlcgorKwkJIHJlY3ljbGluZy4gICovCisrCSAgICAgIGN1cnNvci0+bmV4dCA9IG5leHQtPm5leHQ7CisrCSAgICAgIGZyZWVfZW50cnkgKHRhYmxlLCBuZXh0KTsKKysJICAgIH0KKysKKysJICByZXR1cm4gZGF0YTsKKysJfQorKyAgICB9CisrCisrICAvKiBObyBlbnRyeSBmb3VuZC4gICovCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogRm9yIGFuIGFscmVhZHkgZXhpc3RpbmcgaGFzaCB0YWJsZSwgY2hhbmdlIHRoZSBudW1iZXIgb2YgYnVja2V0cyB0aHJvdWdoCisrICAgc3BlY2lmeWluZyBDQU5ESURBVEUuICBUaGUgY29udGVudHMgb2YgdGhlIGhhc2ggdGFibGUgYXJlIHByZXNlcnZlZC4gIFRoZQorKyAgIG5ldyBudW1iZXIgb2YgYnVja2V0cyBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHNvIGFzIHRvIF9ndWFyYW50ZWVfIHRoYXQKKysgICB0aGUgdGFibGUgbWF5IHJlY2VpdmUgYXQgbGVhc3QgQ0FORElEQVRFIGRpZmZlcmVudCB1c2VyIGVudHJpZXMsIGluY2x1ZGluZworKyAgIHRob3NlIGFscmVhZHkgaW4gdGhlIHRhYmxlLCBiZWZvcmUgYW55IG90aGVyIGdyb3d0aCBvZiB0aGUgaGFzaCB0YWJsZSBzaXplCisrICAgb2NjdXJzLiAgSWYgVFVOSU5HLT5JU19OX0JVQ0tFVFMgaXMgdHJ1ZSwgdGhlbiBDQU5ESURBVEUgc3BlY2lmaWVzIHRoZQorKyAgIGV4YWN0IG51bWJlciBvZiBidWNrZXRzIGRlc2lyZWQuICAqLworKworK2Jvb2wKKytoYXNoX3JlaGFzaCAoSGFzaF90YWJsZSAqdGFibGUsIHVuc2lnbmVkIGNhbmRpZGF0ZSkKKyt7CisrICBIYXNoX3RhYmxlICpuZXdfdGFibGU7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKworKyAgbmV3X3RhYmxlID0gaGFzaF9pbml0aWFsaXplIChjYW5kaWRhdGUsIHRhYmxlLT50dW5pbmcsIHRhYmxlLT5oYXNoZXIsCisrCQkJICAgICAgIHRhYmxlLT5jb21wYXJhdG9yLCB0YWJsZS0+ZGF0YV9mcmVlcik7CisrICBpZiAobmV3X3RhYmxlID09IE5VTEwpCisrICAgIHJldHVybiBmYWxzZTsKKysKKysgIC8qIE1lcmVseSByZXVzZSB0aGUgZXh0cmEgb2xkIHNwYWNlIGludG8gdGhlIG5ldyB0YWJsZS4gICovCisrI2lmIFVTRV9PQlNUQUNLCisrICBvYnN0YWNrX2ZyZWUgKCZuZXdfdGFibGUtPmVudHJ5X3N0YWNrLCBOVUxMKTsKKysgIG5ld190YWJsZS0+ZW50cnlfc3RhY2sgPSB0YWJsZS0+ZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICBuZXdfdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICBpZiAoYnVja2V0LT5kYXRhKQorKyAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrCXsKKysJICB2b2lkICpkYXRhID0gY3Vyc29yLT5kYXRhOworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfYnVja2V0CisrCSAgICA9IChuZXdfdGFibGUtPmJ1Y2tldAorKwkgICAgICAgKyBuZXdfdGFibGUtPmhhc2hlciAoZGF0YSwgbmV3X3RhYmxlLT5uX2J1Y2tldHMpKTsKKysKKysJICBpZiAoISAobmV3X2J1Y2tldCA8IG5ld190YWJsZS0+YnVja2V0X2xpbWl0KSkKKysJICAgIGFib3J0ICgpOworKworKwkgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrCisrCSAgaWYgKG5ld19idWNrZXQtPmRhdGEpCisrCSAgICB7CisrCSAgICAgIGlmIChjdXJzb3IgPT0gYnVja2V0KQorKwkJeworKwkJICAvKiBBbGxvY2F0ZSBvciByZWN5Y2xlIGFuIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEgYnVja2V0CisrCQkgICAgIGhlYWRlciBpbnRvIGEgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJCSAgc3RydWN0IGhhc2hfZW50cnkgKm5ld19lbnRyeSA9IGFsbG9jYXRlX2VudHJ5IChuZXdfdGFibGUpOworKworKwkJICBpZiAobmV3X2VudHJ5ID09IE5VTEwpCisrCQkgICAgcmV0dXJuIGZhbHNlOworKworKwkJICBuZXdfZW50cnktPmRhdGEgPSBkYXRhOworKwkJICBuZXdfZW50cnktPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OworKwkJICBuZXdfYnVja2V0LT5uZXh0ID0gbmV3X2VudHJ5OworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIE1lcmVseSByZWxpbmsgYW4gZXhpc3RpbmcgZW50cnksIHdoZW4gbW92aW5nIGZyb20gYQorKwkJICAgICBidWNrZXQgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCQkgIGN1cnNvci0+bmV4dCA9IG5ld19idWNrZXQtPm5leHQ7CisrCQkgIG5ld19idWNrZXQtPm5leHQgPSBjdXJzb3I7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBGcmVlIGFuIGV4aXN0aW5nIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEgYnVja2V0CisrCQkgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBoZWFkZXIuICBBbHNvIHRha2UgY2FyZSBvZiB0aGUKKysJCSBzaW1wbGUgY2FzZSBvZiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldCBoZWFkZXIgaW50byBhIGJ1Y2tldAorKwkJIGhlYWRlci4gICovCisrCSAgICAgIG5ld19idWNrZXQtPmRhdGEgPSBkYXRhOworKwkgICAgICBuZXdfdGFibGUtPm5fYnVja2V0c191c2VkKys7CisrCSAgICAgIGlmIChjdXJzb3IgIT0gYnVja2V0KQorKwkJZnJlZV9lbnRyeSAobmV3X3RhYmxlLCBjdXJzb3IpOworKwkgICAgfQorKwl9CisrCisrICBmcmVlICh0YWJsZS0+YnVja2V0KTsKKysgIHRhYmxlLT5idWNrZXQgPSBuZXdfdGFibGUtPmJ1Y2tldDsKKysgIHRhYmxlLT5idWNrZXRfbGltaXQgPSBuZXdfdGFibGUtPmJ1Y2tldF9saW1pdDsKKysgIHRhYmxlLT5uX2J1Y2tldHMgPSBuZXdfdGFibGUtPm5fYnVja2V0czsKKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCA9IG5ld190YWJsZS0+bl9idWNrZXRzX3VzZWQ7CisrICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gbmV3X3RhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrICAvKiB0YWJsZS0+bl9lbnRyaWVzIGFscmVhZHkgaG9sZHMgaXRzIHZhbHVlLiAgKi8KKysjaWYgVVNFX09CU1RBQ0sKKysgIHRhYmxlLT5lbnRyeV9zdGFjayA9IG5ld190YWJsZS0+ZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICBmcmVlIChuZXdfdGFibGUpOworKworKyAgcmV0dXJuIHRydWU7CisrfQorKworKy8qIElmIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSwgcmV0dXJuIHRoZSBwb2ludGVyCisrICAgdG8gdGhlIGVudHJ5IGZyb20gdGhlIHRhYmxlLiAgT3RoZXJ3aXNlLCBpbnNlcnQgRU5UUlkgYW5kIHJldHVybiBFTlRSWS4KKysgICBSZXR1cm4gTlVMTCBpZiB0aGUgc3RvcmFnZSByZXF1aXJlZCBmb3IgaW5zZXJ0aW9uIGNhbm5vdCBiZSBhbGxvY2F0ZWQuICAqLworKworK3ZvaWQgKgorK2hhc2hfaW5zZXJ0IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgdm9pZCAqZGF0YTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICAvKiBUaGUgY2FsbGVyIGNhbm5vdCBpbnNlcnQgYSBOVUxMIGVudHJ5LiAgKi8KKysgIGlmICghIGVudHJ5KQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIElmIHRoZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBhbHJlYWR5IGluIHRoZSB0YWJsZSwgcmV0dXJuIHRoYXQuICAqLworKyAgaWYgKChkYXRhID0gaGFzaF9maW5kX2VudHJ5ICh0YWJsZSwgZW50cnksICZidWNrZXQsIGZhbHNlKSkgIT0gTlVMTCkKKysgICAgcmV0dXJuIGRhdGE7CisrCisrICAvKiBFTlRSWSBpcyBub3QgbWF0Y2hlZCwgaXQgc2hvdWxkIGJlIGluc2VydGVkLiAgKi8KKysKKysgIGlmIChidWNrZXQtPmRhdGEpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2VudHJ5ID0gYWxsb2NhdGVfZW50cnkgKHRhYmxlKTsKKysKKysgICAgICBpZiAobmV3X2VudHJ5ID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKworKyAgICAgIC8qIEFkZCBFTlRSWSBpbiB0aGUgb3ZlcmZsb3cgb2YgdGhlIGJ1Y2tldC4gICovCisrCisrICAgICAgbmV3X2VudHJ5LT5kYXRhID0gKHZvaWQgKikgZW50cnk7CisrICAgICAgbmV3X2VudHJ5LT5uZXh0ID0gYnVja2V0LT5uZXh0OworKyAgICAgIGJ1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKKysgICAgICB0YWJsZS0+bl9lbnRyaWVzKys7CisrICAgICAgcmV0dXJuICh2b2lkICopIGVudHJ5OworKyAgICB9CisrCisrICAvKiBBZGQgRU5UUlkgcmlnaHQgaW4gdGhlIGJ1Y2tldCBoZWFkLiAgKi8KKysKKysgIGJ1Y2tldC0+ZGF0YSA9ICh2b2lkICopIGVudHJ5OworKyAgdGFibGUtPm5fZW50cmllcysrOworKyAgdGFibGUtPm5fYnVja2V0c191c2VkKys7CisrCisrICAvKiBJZiB0aGUgZ3Jvd3RoIHRocmVzaG9sZCBvZiB0aGUgYnVja2V0cyBpbiB1c2UgaGFzIGJlZW4gcmVhY2hlZCwgaW5jcmVhc2UKKysgICAgIHRoZSB0YWJsZSBzaXplIGFuZCByZWhhc2guICBUaGVyZSdzIG5vIHBvaW50IGluIGNoZWNraW5nIHRoZSBudW1iZXIgb2YKKysgICAgIGVudHJpZXM6ICBpZiB0aGUgaGFzaGluZyBmdW5jdGlvbiBpcyBpbGwtY29uZGl0aW9uZWQsIHJlaGFzaGluZyBpcyBub3QKKysgICAgIGxpa2VseSB0byBpbXByb3ZlIGl0LiAgKi8KKysKKysgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysgICAgICA+IHRhYmxlLT50dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKyAgICB7CisrICAgICAgLyogQ2hlY2sgbW9yZSBmdWxseSwgYmVmb3JlIHN0YXJ0aW5nIHJlYWwgd29yay4gIElmIHR1bmluZyBhcmd1bWVudHMKKysJIGJlY2FtZSBpbnZhbGlkLCB0aGUgc2Vjb25kIGNoZWNrIHdpbGwgcmVseSBvbiBwcm9wZXIgZGVmYXVsdHMuICAqLworKyAgICAgIGNoZWNrX3R1bmluZyAodGFibGUpOworKyAgICAgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysJICA+IHRhYmxlLT50dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKwl7CisrCSAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisrCSAgdW5zaWduZWQgY2FuZGlkYXRlCisrCSAgICA9ICh1bnNpZ25lZCkgKHR1bmluZy0+aXNfbl9idWNrZXRzCisrCQkJICA/ICh0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5ncm93dGhfZmFjdG9yKQorKwkJCSAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvcgorKwkJCSAgICAgKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysJICAvKiBJZiB0aGUgcmVoYXNoIGZhaWxzLCBhcnJhbmdlIHRvIHJldHVybiBOVUxMLiAgKi8KKysJICBpZiAoIWhhc2hfcmVoYXNoICh0YWJsZSwgY2FuZGlkYXRlKSkKKysJICAgIGVudHJ5ID0gTlVMTDsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gKHZvaWQgKikgZW50cnk7CisrfQorKworKy8qIElmIEVOVFJZIGlzIGFscmVhZHkgaW4gdGhlIHRhYmxlLCByZW1vdmUgaXQgYW5kIHJldHVybiB0aGUganVzdC1kZWxldGVkCisrICAgZGF0YSAodGhlIHVzZXIgbWF5IHdhbnQgdG8gZGVhbGxvY2F0ZSBpdHMgc3RvcmFnZSkuICBJZiBFTlRSWSBpcyBub3QgaW4gdGhlCisrICAgdGFibGUsIGRvbid0IG1vZGlmeSB0aGUgdGFibGUgYW5kIHJldHVybiBOVUxMLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2RlbGV0ZSAoSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHZvaWQgKmRhdGE7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZGF0YSA9IGhhc2hfZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCB0cnVlKTsKKysgIGlmICghZGF0YSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICB0YWJsZS0+bl9lbnRyaWVzLS07CisrICBpZiAoIWJ1Y2tldC0+ZGF0YSkKKysgICAgeworKyAgICAgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZC0tOworKworKyAgICAgIC8qIElmIHRoZSBzaHJpbmsgdGhyZXNob2xkIG9mIHRoZSBidWNrZXRzIGluIHVzZSBoYXMgYmVlbiByZWFjaGVkLAorKwkgcmVoYXNoIGludG8gYSBzbWFsbGVyIHRhYmxlLiAgKi8KKysKKysgICAgICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrCSAgPCB0YWJsZS0+dHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysJeworKwkgIC8qIENoZWNrIG1vcmUgZnVsbHksIGJlZm9yZSBzdGFydGluZyByZWFsIHdvcmsuICBJZiB0dW5pbmcgYXJndW1lbnRzCisrCSAgICAgYmVjYW1lIGludmFsaWQsIHRoZSBzZWNvbmQgY2hlY2sgd2lsbCByZWx5IG9uIHByb3BlciBkZWZhdWx0cy4gICovCisrCSAgY2hlY2tfdHVuaW5nICh0YWJsZSk7CisrCSAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAorKwkgICAgICA8IHRhYmxlLT50dW5pbmctPnNocmlua190aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKwkgICAgeworKwkgICAgICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKKysJICAgICAgdW5zaWduZWQgY2FuZGlkYXRlCisrCQk9ICh1bnNpZ25lZCkgKHR1bmluZy0+aXNfbl9idWNrZXRzCisrCQkJICAgICAgPyB0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5zaHJpbmtfZmFjdG9yCisrCQkJICAgICAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+c2hyaW5rX2ZhY3RvcgorKwkJCQkgKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysJICAgICAgaGFzaF9yZWhhc2ggKHRhYmxlLCBjYW5kaWRhdGUpOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBkYXRhOworK30KKysKKysvKiBUZXN0aW5nLiAgKi8KKysKKysjaWYgVEVTVElORworKworK3ZvaWQKKytoYXNoX3ByaW50IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICAgICAgaWYgKGJ1Y2tldCkKKysJcHJpbnRmICgiJWQ6XG4iLCBidWNrZXQgLSB0YWJsZS0+YnVja2V0KTsKKysKKysgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCXsKKysJICBjaGFyICpzID0gKGNoYXIgKikgY3Vyc29yLT5kYXRhOworKwkgIC8qIEZJWE1FICovCisrCSAgaWYgKHMpCisrCSAgICBwcmludGYgKCIgICVzXG4iLCBzKTsKKysJfQorKyAgICB9CisrfQorKworKyNlbmRpZiAvKiBURVNUSU5HICovCistLS0gcGF0Y2gtMi41Ljkub3JpZy9oYXNoLmgKKysrKyBwYXRjaC0yLjUuOS9oYXNoLmgKK0BAIC0wLDAgKzEsOTMgQEAKKysvKiBoYXNoIC0gaGFzaGluZyB0YWJsZSBwcm9jZXNzaW5nLgorKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZyA8bWV5ZXJpbmdAYXNjZW5kLmNvbT4sIDE5OTguCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysvKiBBIGdlbmVyaWMgaGFzaCB0YWJsZSBwYWNrYWdlLiAgKi8KKysKKysvKiBNYWtlIHN1cmUgVVNFX09CU1RBQ0sgaXMgZGVmaW5lZCB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlCisrICAgb2JzdGFja3MgaW5zdGVhZCBvZiBtYWxsb2MsIGFuZCByZWNvbXBpbGUgYGhhc2guYycgd2l0aCBzYW1lIHNldHRpbmcuICAqLworKworKyNpZm5kZWYgSEFTSF9IXworKyMgZGVmaW5lIEhBU0hfSF8KKysKKysjIGlmbmRlZiBQQVJBTVMKKysjICBpZiBQUk9UT1RZUEVTIHx8IF9fU1REQ19fCisrIyAgIGRlZmluZSBQQVJBTVMoQXJncykgQXJncworKyMgIGVsc2UKKysjICAgZGVmaW5lIFBBUkFNUyhBcmdzKSAoKQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworK3R5cGVkZWYgdW5zaWduZWQgKCpIYXNoX2hhc2hlcikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCkpOworK3R5cGVkZWYgYm9vbCAoKkhhc2hfY29tcGFyYXRvcikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKyt0eXBlZGVmIHZvaWQgKCpIYXNoX2RhdGFfZnJlZXIpIFBBUkFNUyAoKHZvaWQgKikpOworK3R5cGVkZWYgYm9vbCAoKkhhc2hfcHJvY2Vzc29yKSBQQVJBTVMgKCh2b2lkICosIHZvaWQgKikpOworKworK3N0cnVjdCBoYXNoX2VudHJ5CisrICB7CisrICAgIHZvaWQgKmRhdGE7CisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKyAgfTsKKysKKytzdHJ1Y3QgaGFzaF90dW5pbmcKKysgIHsKKysgICAgLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbWFpbmx5IHVzZWQgZm9yIGBoYXNoX2luaXRpYWxpemUnLCBzZWUgdGhlIGJsb2NrCisrICAgICAgIGRvY3VtZW50YXRpb24gb2YgYGhhc2hfcmVzZXRfdHVuaW5nJyBmb3IgbW9yZSBjb21wbGV0ZSBjb21tZW50cy4gICovCisrCisrICAgIGZsb2F0IHNocmlua190aHJlc2hvbGQ7CS8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgc2hyaW5rICovCisrICAgIGZsb2F0IHNocmlua19mYWN0b3I7CS8qIHJhdGlvIG9mIG5ldyBzbWFsbGVyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworKyAgICBmbG9hdCBncm93dGhfdGhyZXNob2xkOwkvKiByYXRpbyBvZiB1c2VkIGJ1Y2tldHMgdG8gdHJpZ2dlciBhIGdyb3d0aCAqLworKyAgICBmbG9hdCBncm93dGhfZmFjdG9yOwkvKiByYXRpbyBvZiBuZXcgYmlnZ2VyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworKyAgICBib29sIGlzX25fYnVja2V0czsJCS8qIGlmIENBTkRJREFURSByZWFsbHkgbWVhbnMgdGFibGUgc2l6ZSAqLworKyAgfTsKKysKKyt0eXBlZGVmIHN0cnVjdCBoYXNoX3R1bmluZyBIYXNoX3R1bmluZzsKKysKKytzdHJ1Y3QgaGFzaF90YWJsZTsKKysKKyt0eXBlZGVmIHN0cnVjdCBoYXNoX3RhYmxlIEhhc2hfdGFibGU7CisrCisrLyogSW5mb3JtYXRpb24gYW5kIGxvb2t1cC4gICovCisrdW5zaWduZWQgaGFzaF9nZXRfbl9idWNrZXRzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fYnVja2V0c191c2VkIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fZW50cmllcyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKytib29sIGhhc2hfdGFibGVfb2sgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7Cisrdm9pZCBoYXNoX3ByaW50X3N0YXRpc3RpY3MgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBGSUxFICopKTsKKyt2b2lkICpoYXNoX2xvb2t1cCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikpOworKworKy8qIFdhbGtpbmcuICAqLworK3ZvaWQgKmhhc2hfZ2V0X2ZpcnN0IFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3ZvaWQgKmhhc2hfZ2V0X25leHQgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9lbnRyaWVzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgdm9pZCAqKiwgdW5zaWduZWQpKTsKKyt1bnNpZ25lZCBoYXNoX2RvX2Zvcl9lYWNoIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgSGFzaF9wcm9jZXNzb3IsIHZvaWQgKikpOworKworKy8qIEFsbG9jYXRpb24gYW5kIGNsZWFuLXVwLiAgKi8KKyt1bnNpZ25lZCBoYXNoX3N0cmluZyBQQVJBTVMgKChjb25zdCBjaGFyICosIHVuc2lnbmVkKSk7Cisrdm9pZCBoYXNoX3Jlc2V0X3R1bmluZyBQQVJBTVMgKChIYXNoX3R1bmluZyAqKSk7CisrSGFzaF90YWJsZSAqaGFzaF9pbml0aWFsaXplIFBBUkFNUyAoKHVuc2lnbmVkLCBjb25zdCBIYXNoX3R1bmluZyAqLAorKwkJCQkgICAgIEhhc2hfaGFzaGVyLCBIYXNoX2NvbXBhcmF0b3IsCisrCQkJCSAgICAgSGFzaF9kYXRhX2ZyZWVyKSk7Cisrdm9pZCBoYXNoX2NsZWFyIFBBUkFNUyAoKEhhc2hfdGFibGUgKikpOworK3ZvaWQgaGFzaF9mcmVlIFBBUkFNUyAoKEhhc2hfdGFibGUgKikpOworKworKy8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLworK2Jvb2wgaGFzaF9yZWhhc2ggUEFSQU1TICgoSGFzaF90YWJsZSAqLCB1bnNpZ25lZCkpOworK3ZvaWQgKmhhc2hfaW5zZXJ0IFBBUkFNUyAoKEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7Cisrdm9pZCAqaGFzaF9kZWxldGUgUEFSQU1TICgoSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKysKKysjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2dsb2JhbC1yZWplY3QtZmlsZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3Y2E3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2dsb2JhbC1yZWplY3QtZmlsZS5kaWZmCkBAIC0wLDAgKzEsMjAzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLm1hbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2gubWFuCisrKysgcGF0Y2gtMi41LjkvcGF0Y2gubWFuCitAQCAtNTIwLDYgKzUyMCwxNSBAQCBmaWxlLgorIFxmQlwqPXJlamVjdFwtdW5pZmllZFxmUAorIFByb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMuIFRoZSBkZWZhdWx0IGlzIHRvIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcy4KKyAuVFAKKysuQkkgXCo9Z2xvYmFsXC1yZWplY3RcLWZpbGU9IHJlamVjdGZpbGUKKytQdXQgYWxsIHJlamVjdHMgaW50bworKy5JIHJlamVjdGZpbGUKKytpbnN0ZWFkIG9mIGNyZWF0aW5nIHNlcGFyYXRlIHJlamVjdCBmaWxlcyBmb3IgYWxsIGZpbGVzIHRoYXQgaGF2ZSByZWplY3RzLiBUaGUKKysuSSByZWplY3RmaWxlCisrd2lsbCBjb250YWluIGhlYWRlcnMgdGhhdCBpZGVudGlmeSB3aGljaCBmaWxlIGVhY2ggcmVqZWN0IHJlZmVycyB0by4gTm90ZSB0aGF0CisrdGhlIGdsb2JhbCByZWplY3QgZmlsZSBpcyBjcmVhdGVkIGV2ZW4gaWYgXC1cLWRyeVwtcnVuIGlzIHNwZWNpZmllZCAod2hpbGUKKytub24tZ2xvYmFsIHJlamVjdCBmaWxlcyB3aWxsIG9ubHkgYmUgY3JlYXRlZCB3aXRob3V0IFwtXC1kcnlcLXJ1bikuCisrLlRQCisgXGZCXC1SXGZQICBvciAgXGZCXCo9cmV2ZXJzZVxmUAorIEFzc3VtZSB0aGF0IHRoaXMgcGF0Y2ggd2FzIGNyZWF0ZWQgd2l0aCB0aGUgb2xkIGFuZCBuZXcgZmlsZXMgc3dhcHBlZC4KKyAoWWVzLCBJJ20gYWZyYWlkIHRoYXQgZG9lcyBoYXBwZW4gb2NjYXNpb25hbGx5LCBodW1hbiBuYXR1cmUgYmVpbmcgd2hhdCBpdAorSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5jCitAQCAtNjcsNiArNjcsNyBAQCBzdGF0aWMgYm9vbCBzaW1pbGFyIChjaGFyIGNvbnN0ICosIHNpemVfCisgc3RhdGljIGJvb2wgc3Bld19vdXRwdXQgKHN0cnVjdCBvdXRzdGF0ZSAqKTsKKyBzdGF0aWMgY2hhciBjb25zdCAqbWFrZV90ZW1wIChjaGFyKTsKKyBzdGF0aWMgaW50IG51bWVyaWNfc3RyaW5nIChjaGFyIGNvbnN0ICosIGJvb2wsIGNoYXIgY29uc3QgKik7Cisrc3RhdGljIHZvaWQgcmVqZWN0X2hlYWRlciAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworIHN0YXRpYyB2b2lkIGFib3J0X2h1bmsgKHZvaWQpOworIHN0YXRpYyB2b2lkIGNsZWFudXAgKHZvaWQpOworIHN0YXRpYyB2b2lkIGdldF9zb21lX3N3aXRjaGVzICh2b2lkKTsKK0BAIC05OCw2ICs5OSw3IEBAIHN0YXRpYyBpbnQgQXJnYzsKKyBzdGF0aWMgY2hhciAqIGNvbnN0ICpBcmd2OworIAorIHN0YXRpYyBGSUxFICpyZWpmcDsgIC8qIHJlamVjdCBmaWxlIHBvaW50ZXIgKi8KKytzdGF0aWMgY2hhciAqZ2xvYmFsX3JlamVjdDsKKyAKKyBzdGF0aWMgY2hhciBjb25zdCAqcGF0Y2huYW1lOworIHN0YXRpYyBjaGFyICpyZWpuYW1lOworQEAgLTE3Miw2ICsxNzQsMTAgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAvKiBNYWtlIHN1cmUgd2UgY2xlYW4gdXAgaW4gY2FzZSBvZiBkaXNhc3Rlci4gICovCisgICAgIHNldF9zaWduYWxzIChmYWxzZSk7CisgCisrICAgIC8qIGluaXRpYWxpemUgZ2xvYmFsIHJlamVjdCBmaWxlICovCisrICAgIGlmIChnbG9iYWxfcmVqZWN0KQorKyAgICAgIGluaXRfcmVqZWN0ICgpOworKworICAgICBmb3IgKAorIAlvcGVuX3BhdGNoX2ZpbGUgKHBhdGNobmFtZSk7CisgCXRoZXJlX2lzX2Fub3RoZXJfcGF0Y2goKTsKK0BAIC0yMDgsOCArMjE0LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgaW5pdF9vdXRwdXQgKFRNUE9VVE5BTUUsIGV4Y2x1c2l2ZSwgJm91dHN0YXRlKTsKKyAJICB9CisgCistCS8qIGluaXRpYWxpemUgcmVqZWN0IGZpbGUgKi8KKy0JaW5pdF9yZWplY3QgKCk7CisrCS8qIGluaXRpYWxpemUgcGVyLXBhdGNoIHJlamVjdCBmaWxlICovCisrCWlmICghZ2xvYmFsX3JlamVjdCkKKysJICBpbml0X3JlamVjdCAoKTsKKyAKKyAJLyogZmluZCBvdXQgd2hlcmUgYWxsIHRoZSBsaW5lcyBhcmUgKi8KKyAJaWYgKCFza2lwX3Jlc3Rfb2ZfcGF0Y2gpCitAQCAtMjc4LDYgKzI4NSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJICAgIG5ld3doZXJlID0gcGNoX25ld2ZpcnN0KCkgKyBsYXN0X29mZnNldDsKKyAJICAgIGlmIChza2lwX3Jlc3Rfb2ZfcGF0Y2gpIHsKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuaygpOworIAkJZmFpbGVkKys7CisgCQlpZiAodmVyYm9zaXR5ID09IFZFUkJPU0UpCitAQCAtMjkyLDYgKzMwMSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgc2F5ICgiUGF0Y2ggYXR0ZW1wdGVkIHRvIGNyZWF0ZSBmaWxlICVzLCB3aGljaCBhbHJlYWR5IGV4aXN0cy5cbiIsCisgCQkgICAgICAgcXVvdGVhcmcgKGlubmFtZSkpOworIAorKwkJaWYgKCFmYWlsZWQpCisrCQkgIHJlamVjdF9oZWFkZXIob3V0bmFtZSk7CisgCQlhYm9ydF9odW5rKCk7CisgCQlmYWlsZWQrKzsKKyAJCWlmICh2ZXJib3NpdHkgIT0gU0lMRU5UKQorQEAgLTI5OSw2ICszMTAsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgICAgZm9ybWF0X2xpbmVudW0gKG51bWJ1ZiwgbmV3d2hlcmUpKTsKKyAJICAgIH0KKyAJICAgIGVsc2UgaWYgKCEgYXBwbHlfaHVuayAoJm91dHN0YXRlLCB3aGVyZSkpIHsKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuayAoKTsKKyAJCWZhaWxlZCsrOworIAkJaWYgKHZlcmJvc2l0eSAhPSBTSUxFTlQpCitAQCAtMzMyLDcgKzM0NSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICBmY2xvc2UgKG91dHN0YXRlLm9mcCk7CisgCQkgICAgb3V0c3RhdGUub2ZwID0gMDsKKyAJCSAgfQorLQkJZmNsb3NlIChyZWpmcCk7CisrCQlpZiAoIWdsb2JhbF9yZWplY3QpCisrCQkgIGZjbG9zZSAocmVqZnApOworIAkJY29udGludWU7CisgCSAgICAgIH0KKyAKK0BAIC00MTIsMTMgKzQyNiwxMyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICB9CisgICAgICAgfQorICAgICAgIGlmIChkaWZmX3R5cGUgIT0gRURfRElGRikgeworLQlpZiAoZmNsb3NlIChyZWpmcCkgIT0gMCkKKysJaWYgKCFnbG9iYWxfcmVqZWN0ICYmIGZjbG9zZSAocmVqZnApICE9IDApCisgCSAgICB3cml0ZV9mYXRhbCAoKTsKKyAJaWYgKGZhaWxlZCkgeworIAkgICAgc29tZWZhaWxlZCA9IHRydWU7CisgCSAgICBzYXkgKCIlZCBvdXQgb2YgJWQgaHVuayVzICVzIiwgZmFpbGVkLCBodW5rLCAicyIgKyAoaHVuayA9PSAxKSwKKyAJCSBza2lwX3Jlc3Rfb2ZfcGF0Y2ggPyAiaWdub3JlZCIgOiAiRkFJTEVEIik7CistCSAgICBpZiAob3V0bmFtZSkgeworKwkgICAgaWYgKCFnbG9iYWxfcmVqZWN0ICYmIG91dG5hbWUpIHsKKyAJCWNoYXIgKnJlaiA9IHJlam5hbWU7CisgCQlpZiAoIXJlam5hbWUpIHsKKyAJCSAgICByZWogPSB4bWFsbG9jIChzdHJsZW4gKG91dG5hbWUpICsgNSk7CitAQCAtNDQ1LDYgKzQ1OSwyMCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgfQorICAgICAgIHNldF9zaWduYWxzICh0cnVlKTsKKyAgICAgfQorKyAgICBpZiAoZ2xvYmFsX3JlamVjdCkKKysgICAgICB7CisrCWlmIChmY2xvc2UgKHJlamZwKSAhPSAwKQorKwkgIHdyaXRlX2ZhdGFsICgpOworKwlpZiAoc29tZWZhaWxlZCkKKysJICB7CisrCSAgc2F5ICgiIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgJXNcbiIsIHF1b3RlYXJnIChnbG9iYWxfcmVqZWN0KSk7CisrCSAgLyppZiAoISBkcnlfcnVuKQorKwkgICAgeyovCisrCSAgICAgIG1vdmVfZmlsZSAoVE1QUkVKTkFNRSwgJlRNUFJFSk5BTUVfbmVlZHNfcmVtb3ZhbCwKKysJCQkgZ2xvYmFsX3JlamVjdCwgMDY0NCwgZmFsc2UpOworKwkgICAgLyp9Ki8KKysJICB9CisrICAgICAgfQorICAgICBpZiAob3V0c3RhdGUub2ZwICYmIChmZXJyb3IgKG91dHN0YXRlLm9mcCkgfHwgZmNsb3NlIChvdXRzdGF0ZS5vZnApICE9IDApKQorICAgICAgIHdyaXRlX2ZhdGFsICgpOworICAgICBjbGVhbnVwICgpOworQEAgLTUyMyw2ICs1NTEsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyAgIHsicG9zaXgiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA3fSwKKyAgIHsicXVvdGluZy1zdHlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDh9LAorICAgeyJ1bmlmaWVkLXJlamVjdC1maWxlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDl9LAorKyAgeyJnbG9iYWwtcmVqZWN0LWZpbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyAxMH0sCisgICB7TlVMTCwgbm9fYXJndW1lbnQsIE5VTEwsIDB9CisgfTsKKyAKK0BAIC01ODIsNiArNjExLDcgQEAgc3RhdGljIGNoYXIgY29uc3QgKmNvbnN0IG9wdGlvbl9oZWxwW10gPQorICIgIC0tZHJ5LXJ1biAgRG8gbm90IGFjdHVhbGx5IGNoYW5nZSBhbnkgZmlsZXM7IGp1c3QgcHJpbnQgd2hhdCB3b3VsZCBoYXBwZW4uIiwKKyAiICAtLXBvc2l4ICBDb25mb3JtIHRvIHRoZSBQT1NJWCBzdGFuZGFyZC4iLAorICIgIC0tdW5pZmllZC1yZWplY3QtZmlsZXMgIENyZWF0ZSB1bmlmaWVkIHJlamVjdCBmaWxlcy4iLAorKyIgIC0tZ2xvYmFsLXJlamVjdC1maWxlPWZpbGUgIFB1dCBhbGwgcmVqZWN0cyBpbnRvIG9uZSBmaWxlLiIsCisgIiIsCisgIiAgLWQgRElSICAtLWRpcmVjdG9yeT1ESVIgIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gRElSIGZpcnN0LiIsCisgI2lmIEhBVkVfU0VUTU9ERV9ET1MKK0BAIC03ODQsNiArODE0LDkgQEAgZ2V0X3NvbWVfc3dpdGNoZXMgKHZvaWQpCisgCSAgICBjYXNlIENIQVJfTUFYICsgOToKKyAJCXVuaWZpZWRfcmVqZWN0X2ZpbGVzID0gdHJ1ZTsKKyAJCWJyZWFrOworKwkgICAgY2FzZSBDSEFSX01BWCArIDEwOgorKwkJZ2xvYmFsX3JlamVjdCA9IHNhdmVzdHIgKG9wdGFyZyk7CisrCQlicmVhazsKKyAJICAgIGRlZmF1bHQ6CisgCQl1c2FnZSAoc3RkZXJyLCAyKTsKKyAJfQorQEAgLTkzMyw2ICs5NjYsMzcgQEAgbG9jYXRlX2h1bmsgKExJTkVOVU0gZnV6eikKKyB9CisgCisgc3RhdGljIGNoYXIgKgorK2Zvcm1hdF90aW1lc3RhbXAgKGNoYXIgdGltZWJ1ZlszN10sIGJvb2wgd2hpY2gpCisreworKyAgdGltZV90IHRzID0gcGNoX3RpbWVzdGFtcCh3aGljaCk7CisrICBpZiAodHMgIT0gLTEpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgdG0gKnRtID0gbG9jYWx0aW1lKCZ0cyk7CisrICAgICAgc3RyZnRpbWUodGltZWJ1ZiwgMzcsICJcdCVZLSVtLSVkICVIOiVNOiVTLjAwMDAwMDAwMCAleiIsIHRtKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB0aW1lYnVmWzBdID0gMDsKKysgIHJldHVybiB0aW1lYnVmOworK30KKysKKysvKiBXcml0ZSBhIGhlYWRlciBpbiBhIHJlamVjdCBmaWxlIHRoYXQgY29tYmluZXMgbXVsdGlwbGUgaHVua3MuICovCisrc3RhdGljIHZvaWQKKytyZWplY3RfaGVhZGVyIChjb25zdCBjaGFyICpvdXRuYW1lKQorK3sKKysgICAgY2hhciB0aW1lYnVmMFszN10sIHRpbWVidWYxWzM3XTsKKysgICAgaWYgKCFnbG9iYWxfcmVqZWN0KQorKyAgICAgIHJldHVybjsKKysgICAgaWYgKGRpZmZfdHlwZSA9PSBVTklfRElGRikKKysJZnByaW50ZihyZWpmcCwgIi0tLSAlcy5vcmlnJXNcbisrKyAlcyVzXG4iLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMCwgcmV2ZXJzZSksCisrCQlvdXRuYW1lLCBmb3JtYXRfdGltZXN0YW1wKHRpbWVidWYxLCAhcmV2ZXJzZSkpOworKyAgICBlbHNlCisrCWZwcmludGYocmVqZnAsICIqKiogJXMub3JpZyVzXG4tLS0gJXMlc1xuIiwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjAsIHJldmVyc2UpLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMSwgIXJldmVyc2UpKTsKKyt9CisrCisrc3RhdGljIGNoYXIgKgorIGZvcm1hdF9saW5lcmFuZ2UgKGNoYXIgcmFuZ2VidWZbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdLAorIAkJICBMSU5FTlVNIGZpcnN0LCBMSU5FTlVNIGxpbmVzKQorIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2luc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNTRlYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwYXRjaC0yLjUuNC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS40Lm9yaWcvTWFrZWZpbGUuaW4JMjAwNS0wMy0wOSAwNzoyMzo1NC43NzkzMTE4MjQgLTA1MDAKKysrKyBwYXRjaC0yLjUuNC9NYWtlZmlsZS5pbgkyMDA1LTAzLTA5IDA3OjI2OjA5LjYxNjgxMzQwOCAtMDUwMAorQEAgLTQzLDEwICs0MywxMSBAQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKKyAKKytERVNURElSID0KKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorIAorLWJpbmRpciA9ICQoZXhlY19wcmVmaXgpL2JpbgorK2JpbmRpciA9IEBiaW5kaXJACisgCisgIyBXaGVyZSB0byBwdXQgdGhlIG1hbnVhbCBwYWdlcy4KKyBtYW5kaXIgPSBAbWFuZGlyQAorQEAgLTExMiwxOCArMTEzLDE4IEBACisgCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoT0JKUykgJChMSUJTKQorIAorIGluc3RhbGw6OiBhbGwgaW5zdGFsbGRpcnMKKy0JJChJTlNUQUxMX1BST0dSQU0pIHBhdGNoJChFWEVFWFQpICQoYmluZGlyKS8kKHBhdGNoX25hbWUpJChFWEVFWFQpCistCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BhdGNoLm1hbiAkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBwYXRjaCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKysJLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGF0Y2gubWFuICQoREVTVERJUikkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisgCisgaW5zdGFsbGRpcnM6OgorLQkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikgJChtYW4xZGlyKQorKwkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpICQoREVTVERJUikkKG1hbjFkaXIpCisgCisgaW5zdGFsbC1zdHJpcDo6CisgCSQoTUFLRSkgSU5TVEFMTF9QUk9HUkFNPSckKElOU1RBTExfUFJPR1JBTSkgLXMnIGluc3RhbGwKKyAKKyB1bmluc3RhbGw6OgorLQlybSAtZiAkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorLQlybSAtZiAkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisrCXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorKwlybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorIAorIE1ha2VmaWxlOiBNYWtlZmlsZS5pbiAkKENPTkZJR19TVEFUVVMpCisgCSQoU0hFTEwpICQoQ09ORklHX1NUQVRVUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTkyMTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmCkBAIC0wLDAgKzEsMzA3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworR2VuZXJhdGUgdW5pZmllZCBkaWZmIHN0eWxlIHJlamVjdCBmaWxlcy4gQWxzbyBpbmNsdWRlIHRoZSBDIGZ1bmN0aW9uIG5hbWVzCitpbiByZWplY3QgZmlsZXMgd2hlbmV2ZXIgcG9zc2libGUuCisKKwkkIGNhdCA+IGYub3JpZworCTwgYSgpIHsKKwk8IDIKKwk8IDMKKwk8CisJPCA1CisJPCA2CisJPCB9CisKKwkkIHNlZCAtZSAncy81LzVhLycgZi5vcmlnID4gZgorCSQgZGlmZiAtVTIgLXAgZi5vcmlnIGYgPiBmLmRpZmYKKwkkIHNlZCAtZSAncy81LzVhLycgLWUgJ3MvNi82eC8nIGYub3JpZyA+IGYKKwkkIC4vcGF0Y2ggLUYwIC1zIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIGYgLS1yZWplY3QtdW5pZmllZCA8IGYuZGlmZgorCT4gMSBvdXQgb2YgMSBodW5rIEZBSUxFRCAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlIGYucmVqCisKKwkkIGNhdCBmLnJlagorCT4gQEAgLTMsNSArMyw1IEBAIGEoKSB7CisJPiAgMworCT4gIAorCT4gLTUKKwk+ICs1YQorCT4gIDYKKwk+ICB9CisKKwkkIC4vcGF0Y2ggLUYwIC1zIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIGYgPCBmLmRpZmYKKwk+IDEgb3V0IG9mIDEgaHVuayBGQUlMRUQgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSBmLnJlagorCisJJCBjYXQgZi5yZWoKKwk+ICoqKioqKioqKioqKioqKiBhKCkgeworCT4gKioqIDMsNyAqKioqCisJPiAgIDMKKwk+ICAgCisJPiAtIDUKKwk+ICAgNgorCT4gICB9CisJPiAtLS0gMyw3IC0tLS0KKwk+ICAgMworCT4gICAKKwk+ICsgNWEKKwk+ICAgNgorCT4gICB9CisKKwkkIGRpZmYgLU51IC1wIC9kZXYvbnVsbCBmLm9yaWcgPiBmMi5kaWZmCisJJCAuL3BhdGNoIC1GMCAtcyAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCBmIC0tcmVqZWN0LXVuaWZpZWQgPCBmMi5kaWZmCisJPiBQYXRjaCBhdHRlbXB0ZWQgdG8gY3JlYXRlIGZpbGUgZiwgd2hpY2ggYWxyZWFkeSBleGlzdHMuCisJPiAxIG91dCBvZiAxIGh1bmsgRkFJTEVEIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgZi5yZWoKKworCSQgY2F0IGYucmVqCisJPiBAQCAtMCwwICsxLDcgQEAKKwk+ICthKCkgeworCT4gKzIKKwk+ICszCisJPiArCisJPiArNQorCT4gKzYKKwk+ICt9CisKKwkkIHJtIC1mIGYgZi5vcmlnIGYucmVqIGYuZGlmZiBmMi5kaWZmCisKK0luZGV4OiBwYXRjaC0yLjUuOS9wY2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wY2guYworQEAgLTY4LDYgKzY4LDcgQEAgc3RhdGljIExJTkVOVU0gcF9zbGluZTsJCQkvKiBhbmQgdGhlIGxpbgorIHN0YXRpYyBMSU5FTlVNIHBfaHVua19iZWc7CQkvKiBsaW5lIG51bWJlciBvZiBjdXJyZW50IGh1bmsgKi8KKyBzdGF0aWMgTElORU5VTSBwX2VmYWtlID0gLTE7CQkvKiBlbmQgb2YgZmFrZWQgdXAgbGluZXMtLWRvbid0IGZyZWUgKi8KKyBzdGF0aWMgTElORU5VTSBwX2JmYWtlID0gLTE7CQkvKiBiZWcgb2YgZmFrZWQgdXAgbGluZXMgKi8KKytzdGF0aWMgY2hhciAqcF9jX2Z1bmN0aW9uOwkJLyogdGhlIEMgZnVuY3Rpb24gYSBodW5rIGlzIGluICovCisgCisgZW51bSBuYW1ldHlwZSB7IE9MRCwgTkVXLCBJTkRFWCwgTk9ORSB9OworIAorQEAgLTg4OCw2ICs4ODksMTkgQEAgYW5vdGhlcl9odW5rIChlbnVtIGRpZmYgZGlmZnR5cGUsIGJvb2wgcgorIAkgICAgbmV4dF9pbnR1aXRfYXQobGluZV9iZWdpbm5pbmcscF9pbnB1dF9saW5lKTsKKyAJICAgIHJldHVybiBjaGFyc19yZWFkID09IChzaXplX3QpIC0xID8gLTEgOiAwOworIAl9CisrCXMgPSBidWY7CisrCXdoaWxlICgqcyA9PSAnKicpCisrCSAgICBzKys7CisrCWlmICgqcyA9PSAnICcpCisrCSAgeworKwkgICAgcF9jX2Z1bmN0aW9uID0gczsKKysJICAgIHdoaWxlICgqcyAhPSAnXG4nKQorKwkJcysrOworKwkgICAgKnMgPSAnXDAnOworKwkgICAgcF9jX2Z1bmN0aW9uID0gc2F2ZXN0ciAocF9jX2Z1bmN0aW9uKTsKKysJICB9CisrCWVsc2UKKysJICAgIHBfY19mdW5jdGlvbiA9IE5VTEw7CisgCXBfaHVua19iZWcgPSBwX2lucHV0X2xpbmUgKyAxOworIAl3aGlsZSAocF9lbmQgPCBwX21heCkgeworIAkgICAgY2hhcnNfcmVhZCA9IGdldF9saW5lICgpOworQEAgLTEyNzcsOCArMTI5MSwxOCBAQCBhbm90aGVyX2h1bmsgKGVudW0gZGlmZiBkaWZmdHlwZSwgYm9vbCByCisgCWVsc2UKKyAJICAgIHBfcmVwbF9saW5lcyA9IDE7CisgCWlmICgqcyA9PSAnICcpIHMrKzsKKy0JaWYgKCpzICE9ICdAJykKKysJaWYgKCpzKysgIT0gJ0AnKQorIAkgICAgbWFsZm9ybWVkICgpOworKwlpZiAoKnMrKyA9PSAnQCcgJiYgKnMgPT0gJyAnICYmICpzICE9ICdcMCcpCisrCSAgeworKwkgICAgcF9jX2Z1bmN0aW9uID0gczsKKysJICAgIHdoaWxlICgqcyAhPSAnXG4nKQorKwkJcysrOworKwkgICAgKnMgPSAnXDAnOworKwkgICAgcF9jX2Z1bmN0aW9uID0gc2F2ZXN0ciAocF9jX2Z1bmN0aW9uKTsKKysJICB9CisrCWVsc2UKKysJICAgIHBfY19mdW5jdGlvbiA9IE5VTEw7CisgCWlmICghcF9wdHJuX2xpbmVzKQorIAkgICAgcF9maXJzdCsrOwkJCS8qIGRvIGFwcGVuZCByYXRoZXIgdGhhbiBpbnNlcnQgKi8KKyAJaWYgKCFwX3JlcGxfbGluZXMpCitAQCAtMTg4NCw2ICsxOTA4LDEyIEBAIHBjaF9odW5rX2JlZyAodm9pZCkKKyAgICAgcmV0dXJuIHBfaHVua19iZWc7CisgfQorIAorK2NoYXIgY29uc3QgKgorK3BjaF9jX2Z1bmN0aW9uICh2b2lkKQorK3sKKysgICAgcmV0dXJuIHBfY19mdW5jdGlvbjsKKyt9CisrCisgLyogSXMgdGhlIG5ld2xpbmUtdGVybWluYXRlZCBsaW5lIGEgdmFsaWQgYGVkJyBjb21tYW5kIGZvciBwYXRjaAorICAgIGlucHV0PyAgSWYgc28sIHJldHVybiB0aGUgY29tbWFuZCBjaGFyYWN0ZXI7IGlmIG5vdCwgcmV0dXJuIDAuCisgICAgVGhpcyBhY2NlcHRzIGFjY2VwdHMganVzdCBhIHN1YnNldCBvZiB0aGUgdmFsaWQgY29tbWFuZHMsIGJ1dCBpdCdzCitJbmRleDogcGF0Y2gtMi41LjkvcGNoLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BjaC5oCisrKysgcGF0Y2gtMi41LjkvcGNoLmgKK0BAIC0yNSw2ICsyNSw3IEBACisgTElORU5VTSBwY2hfZW5kICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9maXJzdCAodm9pZCk7CisgTElORU5VTSBwY2hfaHVua19iZWcgKHZvaWQpOworK2NoYXIgY29uc3QgKnBjaF9jX2Z1bmN0aW9uICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9uZXdmaXJzdCAodm9pZCk7CisgTElORU5VTSBwY2hfcHJlZml4X2NvbnRleHQgKHZvaWQpOworIExJTkVOVU0gcGNoX3B0cm5fbGluZXMgKHZvaWQpOworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLm1hbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2gubWFuCisrKysgcGF0Y2gtMi41LjkvcGF0Y2gubWFuCitAQCAtNTE3LDYgKzUxNyw5IEBAIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKyAuQiBcJi5yZWoKKyBmaWxlLgorIC5UUAorK1xmQlwqPXJlamVjdFwtdW5pZmllZFxmUAorK1Byb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMuIFRoZSBkZWZhdWx0IGlzIHRvIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcy4KKysuVFAKKyBcZkJcLVJcZlAgIG9yICBcZkJcKj1yZXZlcnNlXGZQCisgQXNzdW1lIHRoYXQgdGhpcyBwYXRjaCB3YXMgY3JlYXRlZCB3aXRoIHRoZSBvbGQgYW5kIG5ldyBmaWxlcyBzd2FwcGVkLgorIChZZXMsIEknbSBhZnJhaWQgdGhhdCBkb2VzIGhhcHBlbiBvY2Nhc2lvbmFsbHksIGh1bWFuIG5hdHVyZSBiZWluZyB3aGF0IGl0CitJbmRleDogcGF0Y2gtMi41LjkvY29tbW9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbW1vbi5oCisrKysgcGF0Y2gtMi41LjkvY29tbW9uLmgKK0BAIC0xNDYsNiArMTQ2LDcgQEAgWFRFUk4gaW50IGludmM7CisgWFRFUk4gc3RydWN0IHN0YXQgaW5zdGF0OworIFhURVJOIGJvb2wgZHJ5X3J1bjsKKyBYVEVSTiBib29sIHBvc2l4bHlfY29ycmVjdDsKKytYVEVSTiBib29sIHVuaWZpZWRfcmVqZWN0X2ZpbGVzOworIAorIFhURVJOIGNoYXIgY29uc3QgKm9yaWdwcmFlOworIFhURVJOIGNoYXIgY29uc3QgKm9yaWdiYXNlOworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5jCitAQCAtNTIyLDYgKzUyMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorICAgeyJuby1iYWNrdXAtaWYtbWlzbWF0Y2giLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA2fSwKKyAgIHsicG9zaXgiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA3fSwKKyAgIHsicXVvdGluZy1zdHlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDh9LAorKyAgeyJ1bmlmaWVkLXJlamVjdC1maWxlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDl9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorIH07CisgCitAQCAtNTgwLDYgKzU4MSw3IEBAIHN0YXRpYyBjaGFyIGNvbnN0ICpjb25zdCBvcHRpb25faGVscFtdID0KKyAiICAtLXZlcmJvc2UgIE91dHB1dCBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29yayBiZWluZyBkb25lLiIsCisgIiAgLS1kcnktcnVuICBEbyBub3QgYWN0dWFsbHkgY2hhbmdlIGFueSBmaWxlczsganVzdCBwcmludCB3aGF0IHdvdWxkIGhhcHBlbi4iLAorICIgIC0tcG9zaXggIENvbmZvcm0gdG8gdGhlIFBPU0lYIHN0YW5kYXJkLiIsCisrIiAgLS11bmlmaWVkLXJlamVjdC1maWxlcyAgQ3JlYXRlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiIsCisgIiIsCisgIiAgLWQgRElSICAtLWRpcmVjdG9yeT1ESVIgIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gRElSIGZpcnN0LiIsCisgI2lmIEhBVkVfU0VUTU9ERV9ET1MKK0BAIC03NzksNiArNzgxLDkgQEAgZ2V0X3NvbWVfc3dpdGNoZXMgKHZvaWQpCisgCQkJCSAgICAgKGVudW0gcXVvdGluZ19zdHlsZSkgaSk7CisgCQl9CisgCQlicmVhazsKKysJICAgIGNhc2UgQ0hBUl9NQVggKyA5OgorKwkJdW5pZmllZF9yZWplY3RfZmlsZXMgPSB0cnVlOworKwkJYnJlYWs7CisgCSAgICBkZWZhdWx0OgorIAkJdXNhZ2UgKHN0ZGVyciwgMik7CisgCX0KK0BAIC05MjcsNiArOTMyLDI0IEBAIGxvY2F0ZV9odW5rIChMSU5FTlVNIGZ1enopCisgICAgIHJldHVybiAwOworIH0KKyAKKytzdGF0aWMgY2hhciAqCisrZm9ybWF0X2xpbmVyYW5nZSAoY2hhciByYW5nZWJ1ZltMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl0sCisrCQkgIExJTkVOVU0gZmlyc3QsIExJTkVOVU0gbGluZXMpCisreworKyAgICBpZiAobGluZXMgPT0gMSkKKysgICAgICByYW5nZWJ1ZiA9IGZvcm1hdF9saW5lbnVtIChyYW5nZWJ1ZiwgZmlyc3QpOworKyAgICBlbHNlCisrICAgICAgeworKwljaGFyICpyYjsKKysJcmFuZ2VidWYgPSBmb3JtYXRfbGluZW51bSAocmFuZ2VidWYgKyBMSU5FTlVNX0xFTkdUSF9CT1VORCArIDEsIGxpbmVzKTsKKysJcmIgPSByYW5nZWJ1Zi0xOworKwlyYW5nZWJ1ZiA9IGZvcm1hdF9saW5lbnVtIChyYW5nZWJ1ZiAtIExJTkVOVU1fTEVOR1RIX0JPVU5EIC0gMSwKKysJCQkJICAgKGxpbmVzID4gMCkgPyBmaXJzdCA6IDApOworKwkqcmIgPSAnLCc7CisrICAgICAgfQorKyAgICByZXR1cm4gcmFuZ2VidWY7CisrfQorKworIC8qIFdlIGRpZCBub3QgZmluZCB0aGUgcGF0dGVybiwgZHVtcCBvdXQgdGhlIGh1bmsgc28gdGhleSBjYW4gaGFuZGxlIGl0LiAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtOTQzLDggKzk2Niw4MyBAQCBhYm9ydF9odW5rICh2b2lkKQorICAgICAgIChpbnQpIE5FV19DT05URVhUX0RJRkYgPD0gKGludCkgZGlmZl90eXBlID8gIiAqKioqIiA6ICIiOworICAgICBjaGFyIGNvbnN0ICptaW51c2VzID0KKyAgICAgICAoaW50KSBORVdfQ09OVEVYVF9ESUZGIDw9IChpbnQpIGRpZmZfdHlwZSA/ICIgLS0tLSIgOiAiIC0tLS0tIjsKKysgICAgY2hhciBjb25zdCAqZnVuY3Rpb24gPSBwY2hfY19mdW5jdGlvbigpOworKyAgICBpZiAoZnVuY3Rpb24gPT0gTlVMTCkKKysJZnVuY3Rpb24gPSAiIjsKKysKKysgICAgaWYgKHVuaWZpZWRfcmVqZWN0X2ZpbGVzKQorKyAgICAgIHsKKysJLyogcHJvZHVjZSB1bmlmaWVkIHJlamVjdCBmaWxlcyAqLworKwljaGFyIHJhbmdlYnVmMFtMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl07CisrCWNoYXIgcmFuZ2VidWYxW0xJTkVOVU1fTEVOR1RIX0JPVU5EKjIgKyAyXTsKKysJTElORU5VTSBqOworKworKwkvKiBGaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbW92ZSBhbmQgaW5zZXJ0IHNlY3Rpb24uICovCisrCWZvciAoaiA9IDA7IGogPD0gcGF0X2VuZDsgaisrKQorKwkgIGlmIChwY2hfY2hhciAoaikgPT0gJz0nKQorKwkgICAgYnJlYWs7CisrCWZvciAoaSA9IGorMTsgaSA8PSBwYXRfZW5kOyBpKyspCisrCSAgaWYgKHBjaF9jaGFyIChpKSA9PSAnXicpCisrCSAgICBicmVhazsKKysJaWYgKHBjaF9jaGFyICgwKSAhPSAnKicgfHwgaiA+IHBhdF9lbmQgfHwgaSA+IHBhdF9lbmQrMSkKKysJICBmYXRhbCAoImludGVybmFsIGVycm9yIGluIGFib3J0X2h1bmsiKTsKKysJaSA9IDE7IGorKzsKKysKKysJLyogQEAgLWZyb20sbGluZXMgK3RvLGxpbmVzIEBAICovCisrCWZwcmludGYgKHJlamZwLCAiQEAgLSVzICslcyBAQCVzXG4iLAorKwkJIGZvcm1hdF9saW5lcmFuZ2UgKHJhbmdlYnVmMCwgb2xkZmlyc3QsIHBjaF9wdHJuX2xpbmVzKCkpLAorKwkJIGZvcm1hdF9saW5lcmFuZ2UgKHJhbmdlYnVmMSwgbmV3Zmlyc3QsIHBjaF9yZXBsX2xpbmVzKCkpLAorKwkJIGZ1bmN0aW9uKTsKKysKKysJd2hpbGUgKCAgIChpIDw9IHBhdF9lbmQgJiYgcGNoX2NoYXIgKGkpICE9ICc9JykKKysJICAgICAgIHx8IChqIDw9IHBhdF9lbmQgJiYgcGNoX2NoYXIgKGopICE9ICdeJykpCisrCSAgeworKwkgICAgaWYgKGkgPD0gcGF0X2VuZAorKwkJJiYgKHBjaF9jaGFyIChpKSA9PSAnLScgfHwgcGNoX2NoYXIgKGkpID09ICchJykpCisrCSAgICAgIHsKKysJCWZwdXRjKCctJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGkrKywgcmVqZnApOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmIChqIDw9IHBhdF9lbmQKKysJCSAgICAgJiYgKHBjaF9jaGFyIChqKSA9PSAnKycgfHwgcGNoX2NoYXIgKGopID09ICchJykpCisrCSAgICAgIHsKKysJCWZwdXRjKCcrJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGorKywgcmVqZnApOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmICgoaSA8PSBwYXRfZW5kCisrCQkgICAgICAmJiAocGNoX2NoYXIgKGkpID09ICcgJyB8fCBwY2hfY2hhciAoaSkgPT0gJ1xuJykpICYmCisrCQkgICAgIChqID4gcGF0X2VuZAorKwkJICAgICAgfHwgKHBjaF9jaGFyIChqKSA9PSAnICcgfHwgcGNoX2NoYXIgKGopID09ICdcbicpKSkKKysJICAgICAgeworKwkJLyogVW5sZXNzIGogaXMgYWxyZWFkeSBwYXN0IHRoZSBlbmQsIGxpbmVzIGkgYW5kIGoKKysJCSAgIG11c3QgYmUgZXF1YWwgaGVyZS4gICovCisrCisrCQlpZiAocGNoX2NoYXIgKGkpID09ICcgJykKKysJCSAgZnB1dGMoJyAnLCByZWpmcCk7CisrCQlwY2hfd3JpdGVfbGluZSAoaSsrLCByZWpmcCk7CisrCQlpZiAoaiA8PSBwYXRfZW5kKQorKwkJICBqKys7CisrCSAgICAgIH0KKysJICAgIGVsc2UgaWYgKChqIDw9IHBhdF9lbmQgJiYKKysJCSAgICAgKHBjaF9jaGFyIChqKSA9PSAnICcgfHwgcGNoX2NoYXIgKGopID09ICdcbicpKSAmJgorKwkJICAgICAocGNoX2NoYXIgKGkpID09ICc9JykpCisrCSAgICAgIHsKKysJCWlmIChwY2hfY2hhciAoaikgPT0gJyAnKQorKwkJICBmcHV0YygnICcsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChqKyssIHJlamZwKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBmYXRhbCAoImludGVybmFsIGVycm9yIGluIGFib3J0X2h1bmsiKTsKKysJICB9CisrCisrCWlmIChmZXJyb3IgKHJlamZwKSkKKysJICB3cml0ZV9mYXRhbCAoKTsKKysJcmV0dXJuOworKyAgICAgIH0KKyAKKy0gICAgZnByaW50ZihyZWpmcCwgIioqKioqKioqKioqKioqKlxuIik7CisrICAgIC8qIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcyAqLworKyAgIAorKyAgICBmcHJpbnRmKHJlamZwLCAiKioqKioqKioqKioqKioqJXNcbiIsIGZ1bmN0aW9uKTsKKyAgICAgZm9yIChpPTA7IGk8PXBhdF9lbmQ7IGkrKykgeworIAljaGFyIG51bWJ1ZjBbTElORU5VTV9MRU5HVEhfQk9VTkQgKyAxXTsKKyAJY2hhciBudW1idWYxW0xJTkVOVU1fTEVOR1RIX0JPVU5EICsgMV07CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjUuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOWIyNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjUuOS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHBhdGNoLmluYworTElDRU5TRSA9ICJHUEx2MiIKKworU1JDX1VSSSArPSAiIGZpbGU6Ly9kZWJpYW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYgIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorU1JDX1VSSVttZDVzdW1dID0gImRhY2ZiNjE4MDgyZjhkM2EyMTk0NjAxMTkzY2Y4NzE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVjYjVjNjQ2OWQ3MzJiY2YwMWQ2ZWMxYWZlOWU2NGYxNjY4Y2FiYTViZmRiMTAzYzI4ZDdmNTM3YmEzY2RiOGEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjcuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNy41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmNmNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjcuNS5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHBhdGNoLmluYworTElDRU5TRSA9ICJHUEx2MyIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZDRkNTY3NGVmNDU0M2I0ZWI0NjNkYjE2ODg4NmRjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NDM2ZjVhMTlmOTNjM2NhODMxNTNjZTljNWNiZTQ4NDdlOTdjNWQ5NTZlNTdhMjIwMTIxZTc0MWY2ZTc5NjhmIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworYWNwYXRocyA9ICItSSAke1N9L200ICIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI4N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NSQ19VUkkgPSAiaHR0cDovL25peG9zLm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIgorTElDRU5TRSA9ICJHUEx2MyIKK1NVTU1BUlkgPSAiVG9vbCB0byBhbGxvdyBlZGl0aW5nIG9mIFJQQVRIIGFuZCBpbnRlcnByZXRlciBmaWVsZHMgaW4gRUxGIGJpbmFyaWVzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWIxNTFlM2M4M2IzMWY1OTMxYjRhOWZjMDE2MzViZmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk5Zjg0ZDEyNDM0NzM0MGMzNjcwNzA4OWVjOGY3MDUzMGFiZDU2ZTc4MjdjNTRkNTA2ZWI0Y2MwOTdhMTdlNyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4wLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTZhMDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiU2VjdXJpdHktZm9jdXNlZCBFTEYgZmlsZXMgY2hlY2tpbmcgdG9vbCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgYSBzbWFsbCBzZXQgb2YgdmFyaW91cyBQYVggYXdhcmUgYW5kIHJlbGF0ZWQgXAordXRpbGl0aWVzIGZvciBFTEYgYmluYXJpZXMuIEl0IGNhbiBjaGVjayBFTEYgYmluYXJ5IGZpbGVzIGFuZCBydW5uaW5nIFwKK3Byb2Nlc3NlcyBmb3IgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgd2hlbiB1c2luZyBFTEYgYmluYXJpZXMgXAorYWxvbmcgd2l0aCBQYVgsIHN1Y2ggYXMgbm9uLVBJQyBjb2RlIG9yIGV4ZWN1dGFibGUgc3RhY2sgYW5kIGhlYXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nZW50b28ub3JnL3Byb2ovZW4vaGFyZGVuZWQvcGF4LXV0aWxzLnhtbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dlbnRvby5vc3Vvc2wub3JnL2Rpc3RmaWxlcy9wYXgtdXRpbHMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDczMWY1Mzg1NjgyYTdhNjJlZTJlN2I3ZGFjYzEzYTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjY5YTk5MzhlNGFmNzkxMmQyNmQ1ODUwOTRiYzAyMDNlNDM1NzFhOTkwZmRkMDQ4MzE5MDg4YThiOGFkOTA2ZiIKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2ggcHl0aG9uIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0ke3ByZWZpeH0gREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYmVycm9yLXBlcmxfMC4xNzAyNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGliZXJyb3ItcGVybF8wLjE3MDI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTBlN2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYmVycm9yLXBlcmxfMC4xNzAyNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkVycm9yIC0gRXJyb3IvZXhjZXB0aW9uIGhhbmRsaW5nIGluIGFuIE9PLWlzaCB3YXkiCitERVNDUklQVElPTiA9ICJUaGUgRXJyb3IgcGFja2FnZSBwcm92aWRlcyB0d28gaW50ZXJmYWNlcy4gRmlyc3RseSBcCitFcnJvciBwcm92aWRlcyBhIHByb2NlZHVyYWwgaW50ZXJmYWNlIHRvIGV4Y2VwdGlvbiBoYW5kbGluZy4gXAorU2Vjb25kbHkgRXJyb3IgaXMgYSBiYXNlIGNsYXNzIGZvciBlcnJvcnMvZXhjZXB0aW9ucyB0aGF0IGNhbiBcCitlaXRoZXIgYmUgdGhyb3duLCBmb3Igc3Vic2VxdWVudCBjYXRjaCwgb3IgY2FuIHNpbXBseSBiZSByZWNvcmRlZC4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThmMzQ5OWQwOWVlNzRhMDUwYzAzMTkzOTFmZjlkMTAwIgorCitERVBFTkRTICs9ICJwZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly9jcGFuLm1ldGFjcGFuLm9yZy9hdXRob3JzL2lkL1MvU0gvU0hMT01JRi9FcnJvci0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZTM2NzZhN2ZiMTRmNjVmNTY4ZjEyZDRiNDBhMmE3MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzRkYjdjNzgzYTY3YjA2NjdlY2E2NGE0ZjZhMGMzZGU5NDk5OGFmYzkyYzAxZDY0NTMxNjNlYjA0YjkxNTBkIgorCitTID0gIiR7V09SS0RJUn0vRXJyb3ItJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ1cmktcGVybF8xLjYwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ1cmktcGVybF8xLjYwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDlhNDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSB0byBtYW5pcHVsYXRlIGFuZCBhY2Nlc3MgVVJJIHN0cmluZ3MiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFVSSS5wbSBtb2R1bGUgd2l0aCBmcmllbmRzLiBcCitUaGUgbW9kdWxlIGltcGxlbWVudHMgdGhlIFVSSSBjbGFzcy4gVVJJIG9iamVjdHMgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIFwKK2FuZCBtYW5pcHVsYXRlIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgdGhhdCBtYWtlIHVwIHRoZXNlIHN0cmluZ3MuIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTI2O2VuZGxpbmU9MzA7bWQ1PTZjMzNhZTVjODdmZDFjNDg5NzcxNGUxMjJkZDljMjNkIgorCitERVBFTkRTICs9ICJwZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvYXV0aG9ycy9pZC9HL0dBL0dBQVMvVVJJLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwZjczOWJlOGNlMjhiOGJhYmE3YzU5MjBmZmVlNGRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmOTJkM2RjNjRhY2I4ODQ1ZTk5MTdjOTQ1ZTIyYjlhNTI3NWFlYjlmZjkyNGViNzg3M2MzYjdhNWMwZDIzNzciCisKK1MgPSAiJHtXT1JLRElSfS9VUkktJHtQVn0iCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljY2Q0MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiWE1MOjpQYXJzZXIgLSBBIHBlcmwgbW9kdWxlIGZvciBwYXJzaW5nIFhNTCBkb2N1bWVudHMiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yO2VuZGxpbmU9NjttZDU9Yzg3NjdkNzUxNjIyOWYwN2IyNmU0MmQxY2Y4YjUxZjEiCisKK0RFUEVORFMgKz0gImV4cGF0IGV4cGF0LW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC9YTUwtUGFyc2VyLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZjQ4MTNmZTM5NTIzNjI0NTEyMDFjZWQ2ZmJjZTM3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYWU5ZDA3ZWU5YzM1MzI2YjNkOWFhZDU2ZWFlNzFhNjczMGE3M2ExMTZiOWZlOWU4YTQ3NThiN2NjMDMzMjE2IgorCitTID0gIiR7V09SS0RJUn0vWE1MLVBhcnNlci0ke1BWfSIKKworRVhUUkFfQ1BBTkZMQUdTID0gIkVYUEFUTElCUEFUSD0ke1NUQUdJTkdfTElCRElSfSBFWFBBVElOQ1BBVEg9JHtTVEFHSU5HX0lOQ0RJUn0gQ0M9JyR7Q0N9JyBMRD0nJHtDQ0xEfScgRlVMTF9BUj0nJHtBUn0nIgorCitpbmhlcml0IGNwYW4KKworIyBmaXggdXAgc3ViIE1ha2VNYWtlciBwcm9qZWN0IGFzIGFyZ3VtZW50cyBkb24ndCBnZXQgcHJvcGFnYXRlZCB0aG91Z2gKKyMgc2VlIGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Mjg2MzIKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkICdzOi0tc3lzcm9vdD0uKlwoXHNcfCRcKTotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IDpnJyAtaSBNYWtlZmlsZSBFeHBhdC9NYWtlZmlsZQorCXNlZCAnczpeRlVMTF9BUiA9IC4qOkZVTExfQVIgPSAke0FSfTpnJyAtaSBFeHBhdC9NYWtlZmlsZQorfQorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKK2RvX2NvbXBpbGVfY2xhc3MtbmF0aXZlKCkgeworCWNwYW5fZG9fY29tcGlsZQorfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wZXJsL3ZlbmRvcl9wZXJsLyovYXV0by9YTUwvUGFyc2VyL0V4cGF0Ly5kZWJ1Zy8iCisKK0JCQ0xBU1NFWFRFTkQ9Im5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGVybF8wLjA4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGVybF8wLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMDE5NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKQEAgLTAsMCArMSwyNyBAQAorREVTQ1JJUFRJT04gPSAibGlieG1sLXBlcmwgaXMgYSBjb2xsZWN0aW9uIG9mIHNtYWxsZXIgUGVybCBtb2R1bGVzLCBzY3JpcHRzLCBhbmQgXAorZG9jdW1lbnRzIGZvciB3b3JraW5nIHdpdGggWE1MIGluIFBlcmwuICBsaWJ4bWwtcGVybCBzb2Z0d2FyZSBcCit3b3JrcyBpbiBjb21iaW5hdGlvbiB3aXRoIFhNTDo6UGFyc2VyLCBQZXJsU0FYLCBYTUw6OkRPTSwgXAorWE1MOjpHcm92ZSBhbmQgb3RoZXJzLiIKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBQZXJsIG1vZHVsZXMgZm9yIHdvcmtpbmcgd2l0aCBYTUwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MzM7ZW5kbGluZT0zNTttZDU9MTcwNTU0OWVlZjc1NzdhM2Q2YmE3MTEyM2ExZjBjZTgiCisKK0RFUEVORFMgKz0gImxpYnhtbC1wYXJzZXItcGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGVkNWZiZGRhNTNkMTMwMWRkYWVkODhkYjEwNTAzYmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDU3MTA1OWI3YjVkNDhiN2NlNTJiMDEzODllOTVkNzk4YmY1Y2YyMDIwNTIzYzE1M2ZmMjdiNDk4MTUzYzljYiIKKworRVhUUkFfQ1BBTkZMQUdTID0gIkVYUEFUTElCUEFUSD0ke1NUQUdJTkdfTElCRElSfSBFWFBBVElOQ1BBVEg9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2luaGVyaXQgY3BhbgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXNpbXBsZS1wZXJsXzIuMjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjFiNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgWE1MIgorREVTQ1JJUFRJT04gPSAiVGhlIFhNTDo6U2ltcGxlIFBlcmwgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIEFQSSBsYXllciBcCitvbiB0b3Agb2YgYW4gdW5kZXJseWluZyBYTUwgcGFyc2luZyBtb2R1bGUgdG8gbWFpbnRhaW4gWE1MIGZpbGVzIFwKKyhlc3BlY2lhbGx5IGNvbmZpZ3VyYXRpb24gZmlsZXMpLiBJdCBpcyBhIGJsdW50IHJld3JpdGUgb2YgWE1MOjpTaW1wbGUgXAorKGJ5IEdyYW50IE1jTGVhbikgdG8gdXNlIHRoZSBYTUw6OkxpYlhNTCBwYXJzZXIgZm9yIFhNTCBzdHJ1Y3R1cmVzLCBcCit3aGVyZSB0aGUgb3JpZ2luYWwgdXNlcyBwbGFpbiBQZXJsIG9yIFNBWCBwYXJzZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfm1hcmtvdi9YTUwtTGliWE1MLVNpbXBsZS0wLjkzL2xpYi9YTUwvTGliWE1ML1NpbXBsZS5wb2QiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTdkYmIzZTIyNDFmYWM4NDU3OTY3MDUzZmMxYTFkZGIiCitERVBFTkRTICs9ICJsaWJ4bWwtcGFyc2VyLXBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvWE1MLVNpbXBsZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZDEwOTY0ZTEyM2I3NmVjYTM2Njc4NDY0ZGFhNjNjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1Y2ZmMTNkMDgwMjc5MmRhMWViNDU4OTVjZTFiZTQ2MTkwM2Q5OGVjOTdjOWM5NTNiYzg0MDZhZjcyOTQ0MzRhIgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNpbXBsZS0ke1BWfSIKKworRVhUUkFfUEVSTEZMQUdTID0gIi1JICR7UEVSTEhPU1RMSUJ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTFjYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjIuMC5iYgpAQCAtMCwwICsxLDEyMyBAQAorcmVxdWlyZSBwZXJsLmluYworCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgIGZpbGU6Ly9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmF0aXZlLW5vcGFja2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmF0aXZlLXBlcmxpbmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTU1fVW5peC5wbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZXJybm9fdmVyLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vZHluYWxvYWRlcmhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZjBmMDliMTdkZTQyNmVmZjMyMzQyNmNiMTQwZWU3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZTgzZWFkMGM1YzI2Y2JiZTYyNmZhNGJhYzFhNGJlYWJlMjNhOWVlYmMxNWQzNWJhNDljY2RlMTE4NzhlMTk2IgorCitpbmhlcml0IG5hdGl2ZQorCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK2V4cG9ydCBMRD0iJHtDQ0xEfSIKKworZG9fY29uZmlndXJlICgpIHsKKwkuL0NvbmZpZ3VyZSBcCisJCS1EY2M9IiR7Q0N9IiBcCisJCS1EY2ZsYWdzPSIke0NGTEFHU30iIFwKKwkJLURsZGZsYWdzPSIke0xERkxBR1N9IiBcCisJCS1EY2ZfYnk9Ik9wZW4gRW1iZWRkZWQiIFwKKwkJLURwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLUR2ZW5kb3JwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLUR2ZW5kb3JwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLURzaXRlcHJlZml4PSR7cHJlZml4fSBcCisJCVwKKwkJLURiaW49JHtTVEFHSU5HX0JJTkRJUn0vJHtQTn0gXAorCQktRHByaXZsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EYXJjaGxpYj0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLUR2ZW5kb3JsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EdmVuZG9yYXJjaD0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLURzaXRlbGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRHNpdGVhcmNoPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQlcCisJCS1EdXNlc2hycGxpYiBcCisJCS1EdXNldGhyZWFkcyBcCisJCS1EdXNlaXRocmVhZHMgXAorCQktRHVzZWxhcmdlZmlsZXMgXAorCQktRG5vZXh0ZW5zaW9ucz1PREJNX0ZpbGUgXAorCQktVWRfZG9zdWlkIFwKKwkJLVVpX2RiIFwKKwkJLVVpX25kYm0gXAorCQktVWlfZ2RibSBcCisJCS1VaV9nZGJtX25kYm0gXAorCQktVWlfZ2RibW5kYm0gXAorCQktRGlfc2hhZG93IFwKKwkJLURpX3N5c2xvZyBcCisJCS1EdXNlcGVybGlvIFwKKwkJLURtYW4zZXh0PTNwbSBcCisJCS1Ec2VkPS9iaW4vc2VkIFwKKwkJLVVhZnMgXAorCQktVWRfY3NoIFwKKwkJLVV1c2VzZmlvIFwKKwkJLVV1c2VubSAtZGVzCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisJIyBXZSBuZWVkIGEgaG9zdHBlcmwgbGluayBmb3IgYnVpbGRpbmcgcGVybAorCWxuIC1zZiBwZXJsJHtQVn0gJHtEfSR7YmluZGlyfS9ob3N0cGVybAorCisgICAgICAgIGxuIC1zZiBwZXJsICR7RH0ke2xpYmRpcn0vcGVybDUKKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUgXAorCSAgICAgICAgICAgJHtEfSR7ZGF0YWRpcn0vcGVybC8ke1BWfS9FeHRVdGlscworCisJIyBTYXZlIG5hdGl2ZSBjb25maWcgCisJaW5zdGFsbCBjb25maWcuc2ggJHtEfSR7bGliZGlyfS9wZXJsCisJaW5zdGFsbCBsaWIvQ29uZmlnLnBtICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS8KKwlpbnN0YWxsIGxpYi9FeHRVdGlscy90eXBlbWFwICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy8KKworCSMgcGVybCBzaGFyZWQgbGlicmFyeSBoZWFkZXJzCisJIyByZWZlcmVuY2UgcGVybCA1LjIwLjAtMSBpbiBkZWJpYW46CisJIyBodHRwczovL3BhY2thZ2VzLmRlYmlhbi5vcmcvZXhwZXJpbWVudGFsL2kzODYvcGVybC9maWxlbGlzdAorCWZvciBpIGluIGF2LmggYml0Y291bnQuaCBjaGFyY2xhc3NfaW52bGlzdHMuaCBjb25maWcuaCBjb3AuaCBjdi5oIGRvc2lzaC5oIFwKKwkJZW1iZWQuaCBlbWJlZHZhci5oIEVYVEVSTi5oIGZha2VzZGlvLmggZmVhdHVyZS5oIGZvcm0uaCBnaXRfdmVyc2lvbi5oIFwKKwkJZ3YuaCBoYW5keS5oIGh2X2Z1bmMuaCBodi5oIGlubGluZS5oIElOVEVSTi5oIGludHJwdmFyLmggaXBlcmxzeXMuaCBcCisJCWtleXdvcmRzLmggbDFfY2hhcl9jbGFzc190YWIuaCBtYWxsb2NfY3RsLmggbWV0YWNvbmZpZy5oIG1nX2RhdGEuaCBcCisJCW1nLmggbWdfcmF3LmggbWdfdnRhYmxlLmggbXlkdHJhY2UuaCBub3N0ZGlvLmggb3Bjb2RlLmggb3AuaCBcCisJCW9wbmFtZXMuaCBvcF9yZWdfY29tbW9uLmggb3ZlcmxvYWQuaCBwYWQuaCBwYXJzZXIuaCBwYXRjaGxldmVsLmggXAorCQlwZXJsYXBpLmggcGVybC5oIHBlcmxpby5oIHBlcmxpb2wuaCBwZXJsc2Rpby5oIHBlcmx2YXJzLmggcGVybHkuaCBcCisJCXBwLmggcHBfcHJvdG8uaCBwcm90by5oIHJlZW50ci5oIHJlZ2NoYXJjbGFzcy5oIHJlZ2NvbXAuaCByZWdleHAuaCBcCisJCXJlZ25vZGVzLmggc2NvcGUuaCBzdi5oIHRocmVhZC5oIHRpbWU2NF9jb25maWcuaCB0aW1lNjQuaCB1Y29uZmlnLmggXAorCQl1bmljb2RlX2NvbnN0YW50cy5oIHVuaXhpc2guaCB1dGY4LmggdXRmZWJjZGljLmggdXRpbC5oIHV1ZG1hcC5oIFwKKwkJdnV0aWwuaCB3YXJuaW5ncy5oIFhTVUIuaAorCWRvCisJCWluc3RhbGwgJGkgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUKKwlkb25lCisKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3BlcmwgUEVSTDVMSUI9JyRQRVJMNUxJQjoke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3Blcmw6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC9zaXRlX3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybC92ZW5kb3JfcGVybC8ke1BWfScKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3Blcmwke1BWfSBQRVJMNUxJQj0nJFBFUkw1TElCOiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybCR7U1RBR0lOR19MSUJESVJ9L3Blcmw6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC9zaXRlX3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybC92ZW5kb3JfcGVybC8ke1BWfScKKworCSMgVXNlIC91c3IvYmluL2VudiBuYXRpdmVwZXJsIGZvciB0aGUgcGVybCBzY3JpcHQuCisJZm9yIGYgaW4gYGdyZXAgLUlsICcjISAqJHtiaW5kaXJ9L3BlcmwnICR7RH0vJHtiaW5kaXJ9LypgOyBkbworCQlzZWQgLWkgLWUgJ3N8JHtiaW5kaXJ9L3Blcmx8L3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAkZgorCWRvbmUKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJwZXJsX3N5c3Jvb3RfY3JlYXRlX3dyYXBwZXIiCisKK3Blcmxfc3lzcm9vdF9jcmVhdGVfd3JhcHBlciAoKSB7CisJbWtkaXIgLXAgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9CisJIyBDcmVhdGUgYSB3cmFwcGVyIHRoYXQgL3Vzci9iaW4vZW52IHBlcmwgd2lsbCB1c2UgdG8gZ2V0IHBlcmwtbmF0aXZlLgorCSMgVGhpcyBNVVNUIGxpdmUgaW4gdGhlIG5vcm1hbCBiaW5kaXIuCisJY2F0ID4gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ly4uL25hdGl2ZXBlcmwgPDwgRU9GCisjIS9iaW4vc2gKK3JlYWxwYXRoPVxgcmVhZGxpbmsgLWZuIFwkMFxgCitleGVjIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvcGVybC1uYXRpdmUvcGVybCAiXCRAIgorRU9GCisJY2htb2QgMDc1NSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vLi4vbmF0aXZlcGVybAorCWNhdCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vLi4vbmF0aXZlcGVybAorfQorCisjIEZpeCB0aGUgcGF0aCBpbiBzc3RhdGUKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqLnBtICoucG9kICouaCAqLnBsICouc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhlYTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYwpAQCAtMCwwICsxLDM3IEBACitpbmhlcml0IHB0ZXN0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lICJzOlwvb3B0OlwvdXNyOiIgLWkgUG9ydGluZy9hZGQtcGFja2FnZS5wbAorCXNlZCAtZSAiczpcL2xvY2FsXC9nbnVcLzpcLzoiIC1pIGhpbnRzL2N4dXguc2gKKwl0YXIgLWNmIC0gKiAtLWV4Y2x1ZGUgXCoubyAtLWV4Y2x1ZGUgbGlicGVybC5zbyAtLWV4Y2x1ZGUgTWFrZWZpbGUgLS1leGNsdWRlIG1ha2VmaWxlIC0tZXhjbHVkZSBob3N0cGVybCBcCisJCS0tZXhjbHVkZSBtaW5pcGVybCAtLWV4Y2x1ZGUgZ2VuZXJhdGVfdXVkbWFwIC0tZXhjbHVkZSBwYXRjaGVzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCisJc2VkIC1pIC1lICJzLCR7RH0sLGciIFwKKwkgICAgICAgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0sLGciIFwKKwkgICAgICAgLWUgInMsLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSAsLGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUn0sJHtiaW5kaXJ9LGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0lOQ0RJUn0sJHtpbmNsdWRlZGlyfSxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8sJHtiaW5kaXJ9LyxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8sLGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LyR7VEFSR0VUX1BSRUZJWH0sJHtiaW5kaXJ9LGciIFwKKwkgICAgJHtEfSR7UFRFU1RfUEFUSH0vbGliL0NvbmZpZy5wbQorCisJbG4gLXNmICR7YmluZGlyfS9wZXJsICR7RH0ke1BURVNUX1BBVEh9L3QvcGVybAorCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICMgUHV0IGFsbCAqLnQgZmlsZXMgZnJvbSB0aGUgbGliIGRpciBpbiB0aGUgcHRlc3QgcGFja2FnZQorICAgICMgZG9fc3BsaXRfcGFja2FnZXMgcmVxdWlyZXMgYSBwYWlyIG9mICgpIGluIHRoZSByZWdleCwgYnV0IHdlIGhhdmUgbm90aGluZworICAgICMgdG8gbWF0Y2gsIHNvIHVzZSBhbiBlbXB0eSBwYWlyLgorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGQuZXhwYW5kKCcke2xpYmRpcn0vcGVybC8ke1BWfScpLCAnLipcLnQoKScsCisgICAgICAgICAgICAnJHtQTn0tcHRlc3QlcycsICclcycsIHJlY3Vyc2l2ZT1UcnVlLCBtYXRjaF9wYXRoPVRydWUpCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1tb2R1bGVzICR7UE59LWRvYyAke1BOfS1taXNjIHNlZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1yZGVwZW5kc181LjIyLjAuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ODZmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1yZGVwZW5kc181LjIyLjAuaW5jCkBAIC0wLDAgKzEsMjU2NyBAQAorIyBUbyBjcmVhdGUvdXBkYXRlIHRoZSBwZXJsLXJkZXBlbmRzXyR7UFZ9LmluYyB1c2UgdGhpcyBwaWVjZSBvZiB1Z2x5IHNjcmlwdCAobW9kaWZpZWQgZm9yIHlvdXIgYXJjaC9wYXRocyBldGMpOgorCisjamlhaG9uZ3h1OjUuMjAuMC1yMSQgcHdkCisjL2hvbWUvamlhaG9uZ3h1L3lvY3RvL2J1aWxkLTIwMTQwNjE4LXBlcmwvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3BlcmwvNS4yMC4wLXIxCisKKyMxIGNwIC1yIHBhY2thZ2VzLXNwbGl0IHBhY2thZ2VzLXNwbGl0Lm5ldyAmJiBjZCBwYWNrYWdlcy1zcGxpdC5uZXcKKyMyIGZpbmQgLiAtbmFtZSBcKi5wbSB8IHhhcmdzIHNlZCAtaSAnL149aGVhZC8sL149Y3V0L2QnCisjMyBlZ3JlcCAtciAiXlxzKihcPHVzZSAuKnxcPHJlcXVpcmUgLiopOz8iIHBlcmwtbW9kdWxlLSogLS1pbmNsdWRlPSIqLnBtIiAKKyN8IHNlZCAicy9cLy4qXC5wbTogKi8gKz0gL2c7cy9bXCJcJ10vL2c7cy87LiovXCIvZztzLys9IC4qXChyZXF1aXJlXHx1c2VcKVw+ICovKz0gXCJwZXJsLW1vZHVsZS0vZztzL0NQQU5QTFVTOjouKi9jcGFucGx1cy9nO3MvQ1BBTjo6LiovY3Bhbi9nO3MvOjovLS9nO3MvIFteK1wiXS4qLy9nO3MvXy8tL2c7cy9cLnBsXCIkL1wiLztzL1wiXD9cJC9cIi87cy8oLy87IiB8IHRyIFs6dXBwZXI6XSBbOmxvd2VyOl0gCisjfCBncmVwIC12IC1lICJcLXZtc1wtIiAtZSBtb2R1bGUtNSAtZSAiXiQiIC1lICJcXCQiIC1lIHlvdXIgLWUgdGsgLWUgYXV0b3BlcmwgLWUgaHRtbCAtZSBodHRwIC1lIHBhcnNlLWNwYW4gLWUgcGVybC1vc3R5cGUgLWUgbmRibS1maWxlIC1lIG1vZHVsZS1tYWMgLWUgZmNnaSAtZSBsd3AgLWUgZGJkIC1lIGRiaXggCisjfCBzb3J0IC11IAorI3wgc2VkICdzL14vUkRFUEVORFNfLztzL3BlcmwtbW9kdWxlLS8ke1BOfS1tb2R1bGUtL2c7cy9tb2R1bGUtXChtb2R1bGUtXCkvXDEvZztzL1wobW9kdWxlLWxvYWRcKS1jb25kaXRpb25hbC9cMS9nO3MvZW5jb2RlLWNvbmZpZ2xvY2FsLyYtcG0vOycgCisjfCBlZ3JlcCAtd3YgJz0+fG1vZHVsZS1hfG1vZHVsZS1hcGFjaGUuP3xtb2R1bGUtYXByfG1vZHVsZS1hdXRoZW4tc2FzbHxtb2R1bGUtYi1hc21kYXRhfG1vZHVsZS1jb252ZXJ0LWViY2RpY3xtb2R1bGUtZGV2ZWwtc2l6ZXxtb2R1bGUtZGlnZXN0LXBlcmwtbWQ1fG1vZHVsZS1kdW1wdmFsdWV8bW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWFhYXJnaDU2aGFzaHxtb2R1bGUtZXh0dXRpbHMteHNzeW1zZXR8bW9kdWxlLWZpbGUtYnNkZ2xvYnxtb2R1bGUtZm9yfG1vZHVsZS1pdHxtb2R1bGUtaW8tc3RyaW5nfG1vZHVsZS1pcGMtc3lzdGVtLXNpbXBsZXxtb2R1bGUtbGV4aWNhbHxtb2R1bGUtbG9jYWwtbGlifG1ldGFkYXRhfG1vZHVsZS1tb2RwZXJsLXV0aWx8bW9kdWxlLXBsdWdnYWJsZS1vYmplY3R8bW9kdWxlLXRlc3QtYnVpbGRlci1pby1zY2FsYXJ8bW9kdWxlLXRleHQtdW5pZGVjb2RlfG1vZHVsZS13aW4zMnxvYmplY3RzXHNsb2FkfHN5c2NhbGwucGh8c3lzdGVtaW5mby5waHwlcycgPiAvdG1wL3BlcmwtcmRlcGVuZHMKKworUkRFUEVORFNfcGVybC1taXNjICs9ICJwZXJsIgorUkRFUEVORFNfJHtQTn0tcG9kICs9ICJwZXJsIgorCisjIFNvbWUgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCB0aGUgYWJvdmUgZG9lc24ndCBtYW5hZ2UgdG8gZmlndXJlIG91dAorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMiCisKKworIyBEZXBlbmRzIGxpc3QKKyMgY29weSBjb250ZW50cyBvZiAvdG1wL3BlcmwtcmRlcGVuZHMgaW4gdGhpcyBmaWxlCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNwYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWlmIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtbmV0LXBpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS11c2VyLXB3ZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWlvLXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyeWJhc2UgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1mYXRhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2sgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2siCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2tpcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNraXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG91c2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1iLW9wLXByaXZhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVidWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmVuY2htYXJrICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iZW5jaG1hcmsgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iZW5jaG1hcmsgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ibGliICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJsaWIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmxpYiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtYi1jb25jaXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWItdGVyc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1iLWNvbmNpc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIteHJlZiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYnl0ZXMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcy1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ieXRlcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycC1oZWF2eSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1jb3JlbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3BhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZGlyaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1uZXQtcGluZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zYWZlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRlcm0tcmVhZGxpbmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWItZGVwYXJzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItaW50MzIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1pbnQzMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItbnVsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLW51bGwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItdXRmOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRlcHJlY2F0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wZWVrICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcGVlayArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBwcG9ydCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1zZWxmc3R1YmJlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1zZWxmc3R1YmJlciArPSAiJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLXRleHQtdGFicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtZGlnZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlyaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaXJoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZHluYWxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZHluYWxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWJ5dGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY24taHoiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZWJjZGljICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnoiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1uYW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLW5hbWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWdsb2NhbC1wbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdHcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2Rpbmctd2FybmluZ3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nLXdhcm5pbmdzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuZ2xpc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmdsaXNoICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW52ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVudiArPSAiJHtQTn0tbW9kdWxlLXRpZS1hcnJheSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lcnJubyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXJybm8gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lcnJubyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlci1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pcGMtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kZWMtb3NmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtYXV0b3NwbGl0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbXkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXJlZ2V4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXVuaXZlcnNhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1pbmlwZXJsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1haXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1haXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtYXV0b3NwbGl0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtY3BhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZG9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZG9zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW1hY29zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tcW54ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1xbnggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZGlyaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11d2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11d2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12b3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW45NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luOTUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW45NSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1teSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW15ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvdW50bGluZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1ldmFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvdW50bGluZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1saWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtaW5wdXRtYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1vdXRwdXRtYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy10eXBlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtZmF0YWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZjbnRsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmNudGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmNudGwgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mZWF0dXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtaGFzaC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlY2FjaGUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWRvc2dsb2IgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWlwYy1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1nbG9iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2IgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9iICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtY3lnd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1lcG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWVwb2MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWVwb2MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1tYWMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtbWFjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1tYWMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1vczIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1vczIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS1jd2QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maW5kYmluICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXBvZC11c2FnZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1kZXRlY3QgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWxpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1saXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1wb2xsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcG9sbCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1wb2xsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtdW5peCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtdGllLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtbG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS10aW1lLWhpcmVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLWlwYy1zeXN2IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4yICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4yICs9ICIke1BOfS1tb2R1bGUtaXBjLW9wZW4zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWlvLXBpcGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1pcGMtc3lzdiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLWlwYy1zeXN2IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwLWJvb2xlYW4gKz0gIiR7UE59LW1vZHVsZS1qc29uLXBwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAtYm9vbGVhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGliICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsLXhzICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbC14cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWRlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb3JlbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtbG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LWd1dHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LWd1dHMgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsY2VtdSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjZW11ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtdHJpZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtdHJpZyArPSAiJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLXRyaWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1hbnlkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1leHBpcmVmaWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLWV4cGlyZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtc3RvcmFibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWV0YS1ub3RhdGlvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZXRhLW5vdGF0aW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbXJvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jb25maWcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1lICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1pIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1pICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtbCArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LW5ldHJjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0cmMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtdGltZS1oaXJlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wcm90b2VudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV4dCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5leHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9rICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9rICs9ICIke1BOfS1tb2R1bGUtdGVzdC1tb3JlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLXN1YnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGVuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW8gKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wcyArPSAiJHtQTn0tbW9kdWxlLW9wY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZGluZyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkLW51bWJlcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLW1ybyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxmYXEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGZhcSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1tbWFwICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXNjYWxhciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby12aWEgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXBhcnNlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtaW5wdXRvYmplY3RzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1pbnB1dG9iamVjdHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZWxpbmsgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VsaW5rICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZWxpbmsgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLWlucHV0b2JqZWN0cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNldXRpbHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWdldG9wdHNvbyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1tYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS1wb2QtbWFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZGVidWcgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzdGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN0ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3RleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzeG1sICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHJvZ3Jlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcmVuZHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zaW1wbGV0cmVlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHRjb250ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRpZWRvdXRmaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlZHVtYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZWR1bWIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVzbWFydCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUteG1sb3V0c3RyZWFtICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1vdmVyc3RyaWtlICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtb3ZlcnN0cmlrZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1vdmVyc3RyaWtlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtdGVybS1jYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXRlcm0tY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtY2FycC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtb3Bjb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlYXJjaC1kaWN0ICs9ICIke1BOfS1tb2R1bGUtZmVhdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxlY3RzYXZlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxmbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zaWd0cmFwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zaWd0cmFwICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvcnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLWJlbmNobWFyayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWNvbW1lbnQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcGxhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcHJhZ21hICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdW5rbm93biArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQteWFtbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItam9iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jYXAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNvbXBsZXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jb21wbGV0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLXJlYWRsaW5lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tcmVhZGxpbmUgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1wZXJsaW8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3Rlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1kZWxlZ2F0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1hYmJyZXYgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1zZWxmbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC10YWJzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC10YWJzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtdGFicyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXRleHQtdGFicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFzaC1uYW1lZGNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2gtbmFtZWRjYXB0dXJlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc2NhbGFyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc2NhbGFyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGllLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3Vic3RyaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN1YnN0cmhhc2ggKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS10aW1lLXRtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtdGltZS10bSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXRtICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtdG0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1iaWc1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstYmlnNSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstZ2IyMzEyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstZ2IyMzEyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1qaXN4MDIwOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWppc3gwMjA4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXBpbnlpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXBpbnlpbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstc3Ryb2tlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstc3Ryb2tlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay16aHV5aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay16aHV5aW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtY2hhcm5hbWVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtaWYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS11bmljb3JlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdXRmOC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvcmUgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaXZlcnNhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXV0ZjggKz0gIiR7UE59LW1vZHVsZS11dGY4LWhlYXZ5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXJlZ2V4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1pZiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS11bml2ZXJzYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS14c2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUteHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5NzE2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMKQEAgLTAsMCArMSw4IEBACitTVU1NQVJZID0gIlBlcmwgc2NyaXB0aW5nIGxhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wZXJsLm9yZy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlpbmc7bWQ1PTViMTIyYTM2ZDBmNmRjNTUyNzlhMGViYzY5ZjNjNjBiIFwKKwkJICAgIGZpbGU6Ly9BcnRpc3RpYzttZDU9MmU2ZmQyNDc1MzM1YWY4OTI0OTRmZTFmNzMyN2JhZjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9zcmMvNS4wLyR7QlB9LnRhci54eiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjViMGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK0luZGV4OiBwZXJsLTUuMTIuMy9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL0NvbmZpZ3VyZQorKysrIHBlcmwtNS4xMi4zL0NvbmZpZ3VyZQorQEAgLTEzMTYsOCArMTMxNiw5IEBAIGxvY2xpYnB0aD0iL3Vzci9sb2NhbC9saWIgL29wdC9sb2NhbC9saWIKKyBsb2NsaWJwdGg9IiRsb2NsaWJwdGggL29wdC9nbnUvbGliIC91c3IvR05VL2xpYiAvb3B0L0dOVS9saWIiCisgCisgOiBnZW5lcmFsIGxvb2tpbmcgcGF0aCBmb3IgbG9jYXRpbmcgbGlicmFyaWVzCistZ2xpYnB0aD0iL2xpYiAvdXNyL2xpYiAkeGxpYnB0aCIKKytnbGlicHRoPSIvbGliIC91c3IvbGliIC9saWI2NCAvdXNyL2xpYjY0ICR4bGlicHRoIgorIGdsaWJwdGg9IiRnbGlicHRoIC91c3IvY2NzL2xpYiAvdXNyL3VjYmxpYiAvdXNyL2xvY2FsL2xpYiIKKyt0ZXN0IC1mIC91c3IvbGliLyotbGludXgtZ251L2xpYmMuc28gJiYgZ2xpYnB0aD0iL3Vzci9saWIvKi1saW51eC1nbnUgJGdsaWJwdGgiCisgdGVzdCAtZiAvdXNyL3NobGliL2xpYmMuc28gJiYgZ2xpYnB0aD0iL3Vzci9zaGxpYiAkZ2xpYnB0aCIKKyB0ZXN0IC1mIC9zaGxpYi9saWJjLnNvICAgICAmJiBnbGlicHRoPSIvc2hsaWIgJGdsaWJwdGgiCisgdGVzdCAtZCAvdXNyL2xpYjY0ICAgICAgICAgJiYgZ2xpYnB0aD0iJGdsaWJwdGggL2xpYjY0IC91c3IvbGliNjQgL3Vzci9sb2NhbC9saWI2NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NTV9Vbml4LnBtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01NX1VuaXgucG0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5MmNjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NTV9Vbml4LnBtLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK1RoZSBwZXJsLW5hdGl2ZSBzaG91bGQgYmUgcmVsb2NhdGFibGUgd2hpbGUgcmUtdXNlIHNzdGF0ZS1jYWNoZSBmcm9tCithbm90aGVyIGJ1aWxkLCBlc3BlY2lhbGx5IHRoZSBvcmlnaW5hbCBidWlsZCB3YXMgcmVuYW1lZC9yZW1vdmVkLgorCitUbyBnZXQgdGhlIE1ha2VNYWtlci5wbSB3b3JrcyBpbiB0aGlzIGNhc2UsIHdlIG5lZWQgcGVybCB3cmFwcGVyIGhlcmUKK2luc3RlYWQgb2YgcmVhbCBwZXJsIGJpbmFyeS4KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0ub3JpZwkyMDExLTA4LTEyIDE2OjA3OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIHBlcmwtNS4xMi4zL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCTIwMTEtMDgtMTIgMTY6MDg6NTYuMDAwMDAwMDAwICswODAwCitAQCAtMTAxOSw2ICsxMDE5LDkgQEAKKyAgICAgfQorIAorICAgICBmb3JlYWNoIG15ICRuYW1lIChAJG5hbWVzKXsKKysgICAgICAgICMgR2V0dGluZyBNYWtlTWFrZXIucG0gdXNlIHBlcmwgd3JhcHBlciBpbnN0ZWFkIG9mICdwZXJsLnJlYWwnIGRpcmVjdGx5CisrICAgICAgICAkbmFtZSA9fiBzL3BlcmxcLnJlYWwvcGVybC8gaWYgKCRuYW1lID1+IC9wZXJsXC5yZWFsLyk7CisrCisgICAgICAgICBmb3JlYWNoIG15ICRkaXIgKEAkZGlycyl7CisgICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCAkZGlyOyAjICRzZWxmLT57UEVSTF9TUkN9IG1heSBiZSB1bmRlZmluZWQKKyAgICAgICAgICAgICBteSAoJGFicywgJHZhbCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUuU0gucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUuU0gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMjMzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaApAQCAtMCwwICsxLDM3NCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5TSCB8ICAxNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5TSCBiL01ha2VmaWxlLlNICitpbmRleCAwMzRkODEyLi42N2UwOGZkIDEwMDc1NQorLS0tIGEvTWFrZWZpbGUuU0gKKysrKyBiL01ha2VmaWxlLlNICitAQCAtMzksMTAgKzM5LDEwIEBAIGNhc2UgIiR1c2VzaHJwbGliIiBpbgorIHRydWUpCisgCSMgUHJlZml4IGFsbCBydW5zIG9mICdtaW5pcGVybCcgYW5kICdwZXJsJyB3aXRoCisgCSMgJGxkbGlicHRoIHNvIHRoYXQgLi9wZXJsIGZpbmRzICp0aGlzKiBzaGFyZWQgbGlicGVybC4KKy0JY2FzZSAiJExEX0xJQlJBUllfUEFUSCIgaW4KKy0JJycpICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiIDs7CistCSopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CistCWVzYWMKKysJI2Nhc2UgIiRMRF9MSUJSQVJZX1BBVEgiIGluCisrCSMnJykgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKysJIyopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CisrCSNlc2FjCisgCisgCXBsZGxmbGFncz0iJGNjY2RsZmxhZ3MiCisgCXN0YXRpY19sZGZsYWdzPScnCitAQCAtMTIyLDEwICsxMjIsMTEgQEAgdHJ1ZSkKKyAJICAgICopCisgCQlldmFsICJsZGxpYnB0aHZhbD1cIlwkJGxkbGlicHRobmFtZVwiIgorIAorLQkJY2FzZSAiJGxkbGlicHRodmFsIiBpbgorLQkJJycpICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgIiA7OworLQkJKikgICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRsZGxpYnB0aHZhbCIgYCIgOzsKKy0JCWVzYWMKKysjIFdlIGNvbXBpbGUgaW4gdGhlIGxpYnJhcnkgcGF0aCBpbiBPRSBmcm9tIGNyb3NzLWNvbXBpbGUsIHNvIGxldHMgbm90IGRvIHRoaXMKKysjCQljYXNlICIkbGRsaWJwdGh2YWwiIGluCisrIwkJJycpICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgIiA7OworKyMJCSopICAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkbGRsaWJwdGh2YWwiIGAiIDs7CisrIwkJZXNhYworIAorIAkJOzsKKyAJICAgIGVzYWMKK0BAIC0xNDEsMTggKzE0Miw3IEBAIHRydWUpCisgCSAgICAjIElOU1RBTEwgZmlsZSwgdW5kZXIgIkJ1aWxkaW5nIGEgc2hhcmVkIHBlcmwgbGlicmFyeSIuCisgCSAgICAjIElmIHRoZXJlIGlzIG5vIHByZS1leGlzdGluZyAkbGlicGVybCwgd2UgZG9uJ3QgbmVlZAorIAkgICAgIyB0byBkbyBhbnl0aGluZyBmdXJ0aGVyLgorLQkgICAgaWYgdGVzdCAtZiAkYXJjaGxpYi9DT1JFLyRsaWJwZXJsOyB0aGVuCistCQlybSAtZiBwcmVsb2FkCistCQljYXQgPDwnRU9UJyA+IHByZWxvYWQKKy0jISAvYmluL3NoCistbGliPSQxCistc2hpZnQKKy10ZXN0IC1yICRsaWIgJiYgZXhwb3J0IExEX1BSRUxPQUQ9IiRsaWIgJExEX1BSRUxPQUQiCistZXhlYyAiJEAiCistRU9UCistCQljaG1vZCA3NTUgcHJlbG9hZAorLQkJbGRsaWJwdGg9IiRsZGxpYnB0aCBgcHdkYC9wcmVsb2FkIGBwd2RgLyRsaWJwZXJsIgorLQkgICAgZmkKKysJICAgIGVjaG8gbGludXggbGlicmFyaWVzIG92ZXJ3cml0dGVuIGJ5IGNyb3NzLWNvbXBpbGUgcGF0Y2hlcworIAkgICAgOzsKKyAJb3MzOTApCXRlc3QgLWYgL2Jpbi9lbnYgJiYgbGRsaWJwdGg9Ii9iaW4vZW52ICRsZGxpYnB0aCIKKyAJCTs7CitAQCAtNTY2LDEzICs1NTYsMjMgQEAgc3BsaW50ZmlsZXMgPSAkKGMxKQorIAlAZWNobyBgJChDQ0NNRFNSQylgIC1TICQqLmMKKyAJQGAkKENDQ01EU1JDKWAgLVMgJCouYworIAorLWFsbDogJChGSVJTVE1BS0VGSUxFKSAkKE1JTklQRVJMX0VYRSkgJChnZW5lcmF0ZWRfcG9kcykgJChwcml2YXRlKSAkKHVuaWRhdGFmaWxlcykgJChwdWJsaWMpICQoZHluYW1pY19leHQpICQobm9ueHNfZXh0KSBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKy0JQGVjaG8gIiAiOworLQlAZWNobyAiCUV2ZXJ5dGhpbmcgaXMgdXAgdG8gZGF0ZS4gVHlwZSAnJChNQUtFKSB0ZXN0JyB0byBydW4gdGVzdCBzdWl0ZS4iCisrI2FsbDogJChGSVJTVE1BS0VGSUxFKSAkKE1JTklQRVJMX0VYRSkgJChnZW5lcmF0ZWRfcG9kcykgJChwcml2YXRlKSAkKHVuaWRhdGFmaWxlcykgJChwdWJsaWMpICQoZHluYW1pY19leHQpICQobm9ueHNfZXh0KSBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKysjCUBlY2hvICIgIjsKKysjCUBlY2hvICIJRXZlcnl0aGluZyBpcyB1cCB0byBkYXRlLiBUeXBlICckKE1BS0UpIHRlc3QnIHRvIHJ1biB0ZXN0IHN1aXRlLiIKKysKKythbGw6ICQoRklSU1RNQUtFRklMRSkgJChNSU5JUEVSTF9FWEUpIG1pbmlwZXJsICQodW5pZGF0YWZpbGVzKQorKworK21vcmU6ICQoZ2VuZXJhdGVkX3BvZHMpICQocHJpdmF0ZSkgJChwdWJsaWMpCisrCisrbW9yZTI6ICQoZHluYW1pY19leHQpCisgCistJChNQU5JRkVTVF9TUlQpOglNQU5JRkVTVCAkKFBFUkxfRVhFKQorLQlAJChSVU5fUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSB8fCAoZWNobyAiV0FSTklORzogcmUtc29ydGluZyBNQU5JRkVTVCI7IFwKKy0JICAgICQoUlVOX1BFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgLW8gTUFOSUZFU1Q7IHNoIC1jIHRydWUpCisrbW9yZTM6ICQobm9ueHNfZXh0KQorKworK21vcmU0OiBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKysKKyskKE1BTklGRVNUX1NSVCk6CU1BTklGRVNUCisrCUAkKE1JTklQRVJMKSBQb3J0aW5nL21hbmlzb3J0IC1xIHx8IChlY2hvICJXQVJOSU5HOiByZS1zb3J0aW5nIE1BTklGRVNUIjsgXAorKwkgICAgJChNSU5JUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSAtbyBNQU5JRkVTVDsgc2ggLWMgdHJ1ZSkKKyAJQHRvdWNoICQoTUFOSUZFU1RfU1JUKQorIAorIC5QSE9OWTogYWxsIHV0aWxpdGllcworQEAgLTU4MSw3ICs1ODEsNyBAQCAkKE1BTklGRVNUX1NSVCk6CU1BTklGRVNUICQoUEVSTF9FWEUpCisgIyBieSBtYWtlX3BhdGNobnVtLnBsLgorIGdpdF92ZXJzaW9uLmg6IGxpYi9Db25maWdfZ2l0LnBsCisgCistbGliL0NvbmZpZ19naXQucGw6ICQoTUlOSVBFUkxfRVhFKSBtYWtlX3BhdGNobnVtLnBsCisrbGliL0NvbmZpZ19naXQucGw6IG1ha2VfcGF0Y2hudW0ucGwKKyAJJChNSU5JUEVSTCkgbWFrZV9wYXRjaG51bS5wbAorIAorICMgbWFrZSBzdXJlIHRoYXQgd2UgcmVjb21waWxlIHBlcmwuYyBpZiB0aGUgZ2l0IHZlcnNpb24gY2hhbmdlcworQEAgLTU5NCw3ICs1OTQsNyBAQCBwZXJsJChPQkpfRVhUKTogZ2l0X3ZlcnNpb24uaAorICMgbG9hZGluZywgd2UgbmVlZCB0byBidWlsZCBwZXJsIGZpcnN0LgorIGNhc2UgIiR1c2VkbCRzdGF0aWNfY3dkIiBpbgorIGRlZmluZXVuZGVmKQorLSAgICB1dGlsX2RlcHM9JyQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSBsaWIvYXV0by9Dd2QvQ3dkJChETFNVRkZJWCkgRk9SQ0UnCisrICAgIHV0aWxfZGVwcz0nJChDT05GSUdQTSkgbGliL2F1dG8vQ3dkL0N3ZCQoRExTVUZGSVgpIEZPUkNFJworICAgICA7OworIGRlZmluZWRlZmluZSkKKyAgICAgdXRpbF9kZXBzPSckKFBFUkxfRVhFKSAkKENPTkZJR1BNKSBGT1JDRScKK0BAIC02MDQsNyArNjA0LDcgQEAgZGVmaW5lZGVmaW5lKQorIGVzYWMKKyAKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8IUdST0shVEhJUyEKKy11dGlscy9NYWtlZmlsZTogXCQoTUlOSVBFUkxfRVhFKSBcJChDT05GSUdQTSkgdXRpbHMvTWFrZWZpbGUuUEwKKyt1dGlscy9NYWtlZmlsZTogXCQoQ09ORklHUE0pIHV0aWxzL01ha2VmaWxlLlBMCisgCVwkKE1JTklQRVJMKSAtSWxpYiB1dGlscy9NYWtlZmlsZS5QTAorIAorIHV0aWxpdGllczoJdXRpbHMvTWFrZWZpbGUgJHV0aWxfZGVwcworQEAgLTY5OSw3ICs2OTksNyBAQCBlc2FjCisgCisgCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistcGVybG1haW4uYzogJChNSU5JUEVSTF9FWEUpIGV4dC9FeHRVdGlscy1NaW5pcGVybC9wbV90b19ibGliCisrcGVybG1haW4uYzogZXh0L0V4dFV0aWxzLU1pbmlwZXJsL2xpYi9FeHRVdGlscy9NaW5pcGVybC5wbQorIAkkKE1JTklQRVJMKSAtSWxpYiAtTUV4dFV0aWxzOjpNaW5pcGVybCAtZSAnd3JpdGVtYWluKFwicGVybG1haW4uYyIsIEBBUkdWKScgRHluYUxvYWRlciAkKHN0YXRpY19leHQpCisgCisgIyBUaGUgZmlsZSBleHQubGlicyBpcyBhIGxpc3Qgb2YgbGlicmFyaWVzIHRoYXQgbXVzdCBiZSBsaW5rZWQgaW4KK0BAIC03NjAsNyArNzYwLDcgQEAgUEVSTEVYUE9SVAkJPSBwZXJsLmV4cAorIAk7OworIAllc2FjCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworLXBlcmwuZXhwOiAkKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpCisrcGVybC5leHA6IG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkKKyAJLi8kKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsIC0tc29ydC1mb2xkIFBMQVRGT1JNPWFpeCBDQ19GTEFHUz0iJChPUFRJTUlaRSkiID4gcGVybC5leHAKKyAKKyAhTk8hU1VCUyEKK0BAIC03NjksNyArNzY5LDcgQEAgb3MyKQorIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBNSU5JUEVSTEVYUAkJPSBtaW5pcGVybAorIAorLXBlcmw1LmRlZjogJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCAkKENPTkZJR1BNKSAkKFNZTSkgJChTWU1IKSBtaW5pcGVybC5tYXAKKytwZXJsNS5kZWY6IG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkgbWluaXBlcmwubWFwCisgCS4vJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCBQTEFURk9STT1vczIgLURQRVJMX0RMTD0kKFBFUkxfRExMKSBDQ19GTEFHUz0iJChPUFRJTUlaRSkiID4gcGVybDUuZGVmCisgCisgIU5PIVNVQlMhCitAQCAtODI5LDcgKzgyOSw3IEBAICQoTElCUEVSTCk6ICQmICQob2JqKSAkKERZTkFMT0FERVIpICQoTElCUEVSTEVYUE9SVCkKKyAJdHJ1ZSkKKyAJCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIAlybSAtZiAkQAorLQkkKExEKSAtbyAkQCAkKFNIUlBMREZMQUdTKSAkKG9iaikgJChEWU5BTE9BREVSKSAkKGxpYnMpCisrCSQoTEQpIC1vICRAICQoU0hSUExERkxBR1MpICQob2JqKSAkKERZTkFMT0FERVIpICQobGlicykgLVdsLC1zb25hbWUsbGlicGVybC5zby41CisgIU5PIVNVQlMhCisgCQljYXNlICIkb3NuYW1lIiBpbgorIAkJYWl4KQorQEAgLTg3Nyw3ICs4NzcsOSBAQCAkKE1JTklQRVJMX0VYRSk6IGxpYi9idWlsZGN1c3RvbWl6ZS5wbAorIAkJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKQorIAkkKENDKSAtbyAkKE1JTklQRVJMX0VYRSkgJChDTERGTEFHUykgJChtaW5pX29iaikgJChsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorICFOTyFTVUJTIQorIAkJOzsKK0BAIC04ODUsNyArODg3LDkgQEAgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKQorIAkJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKSB3cml0ZSAgICBsZGN1c3RvbWl6ZS5wbAorIAkkKENDKSAtbyAkKE1JTklQRVJMX0VYRSkgJChtaW5pX29iaiAgICBsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUICAgIF9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVCAgICBfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbCAgICAKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtOTA3LDcgKzkxMSw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAJLUBybSAtZiBtaW5pcGVybC54b2sKKyAJJChDQykgJChDTERGTEFHUykgJChOQU1FU1BBQ0VGTEFHUykgLW8gJChNSU5JUEVSTF9FWEUpIFwKKyAJICAgICQobWluaV9vYmopICQobGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtOTE4LDcgKzkyNCw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogXCQmIFwkKG1pbmlfb2JqKSB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorIAktQHJtIC1mIG1pbmlwZXJsLnhvaworIAktQHJtIFwkKE1JTklQRVJMX0VYRSkKKyAJXCQoTE5TKSBcJChIT1NUX1BFUkwpIFwkKE1JTklQRVJMX0VYRSkKKy0JXCQoTERMSUJQVEgpIC4vbWluaXBlcmxcJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjXCQoTERMSUJQVEgpIC4vbWluaXBlcmxcJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCVwkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbCAnb3NuYW1lJyAiJG9zbmFtZSIKKyAhR1JPSyFUSElTIQorIAkJZWxzZQorQEAgLTkyNyw3ICs5MzUsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgCS1Acm0gLWYgbWluaXBlcmwueG9rCisgCSQoQ0MpICQoQ0xERkxBR1MpIC1vICQoTUlOSVBFUkxfRVhFKSBcCisgCSAgICAkKG1pbmlfb2JqKSAkKGxpYnMpCistCSQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSMkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCSQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgIU5PIVNVQlMhCisgCQlmaQorQEAgLTk3MSw3ICs5ODEsNyBAQCBjYXNlICIke29zbmFtZX0iIGluCisgY2F0YW1vdW50KQorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwhR1JPSyFUSElTIQorIC5QSE9OWTogbWFrZXBwcG9ydAorLW1ha2VwcHBvcnQ6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pCisrbWFrZXBwcG9ydDogXCQoQ09ORklHUE0pCisgCS1AZm9yIGYgaW4gTWFrZWZpbGUuUEwgUFBQb3J0X3BtLlBMIFBQUG9ydF94cy5QTCBwcHBvcnRfaC5QTDsgZG8gXAorIAkoY2QgZXh0L0RldmVsLVBQUG9ydCAmJiBgcHdkYC9ydW4uc2ggLi4vLi4vJChNSU5JUEVSTF9FWEUpIC1JLi4vLi4vbGliIFwkXCRmKTsgXAorIAlkb25lCitAQCAtOTgxLDcgKzk5MSw3IEBAIG1ha2VwcHBvcnQ6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pCisgKikKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAuUEhPTlk6IG1ha2VwcHBvcnQKKy1tYWtlcHBwb3J0OiAkKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgJChub254c19leHQpCisrbWFrZXBwcG9ydDogJChDT05GSUdQTSkgJChub254c19leHQpCisgCSQoTUlOSVBFUkwpIG1rcHBwb3J0CisgCisgIU5PIVNVQlMhCitAQCAtOTkxLDE2ICsxMDAxLDE2IEBAIGVzYWMKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAKKyAuUEhPTlk6IHByZXBsaWJyYXJ5CistcHJlcGxpYnJhcnk6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSAkKFBSRVBMSUJSQVJZX0xJQlBFUkwpCisrcHJlcGxpYnJhcnk6ICQoQ09ORklHUE0pICQoUFJFUExJQlJBUllfTElCUEVSTCkKKyAKKyAkKENPTkZJR1BNX0ZST01fQ09ORklHX1NIKTogJChDT05GSUdQT0QpCisgCistJChDT05GSUdQT0QpOiBjb25maWcuc2ggJChNSU5JUEVSTF9FWEUpIGNvbmZpZ3BtIFBvcnRpbmcvR2xvc3NhcnkgbGliL0NvbmZpZ19naXQucGwKKyskKENPTkZJR1BPRCk6IGNvbmZpZy5zaCBjb25maWdwbSBQb3J0aW5nL0dsb3NzYXJ5IGxpYi9Db25maWdfZ2l0LnBsCisgCSQoTUlOSVBFUkwpIGNvbmZpZ3BtCisgCisgdW5pZGF0YWZpbGVzICQodW5pZGF0YWZpbGVzKSBwb2QvcGVybHVuaXByb3BzLnBvZDogdW5pLmRhdGEKKyAKKy11bmkuZGF0YTogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pIGxpYi91bmljb3JlL21rdGFibGVzICQobm9ueHNfZXh0KQorK3VuaS5kYXRhOiAkKENPTkZJR1BNKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAkKG5vbnhzX2V4dCkKKyAJJChNSU5JUEVSTCkgbGliL3VuaWNvcmUvbWt0YWJsZXMgLUMgbGliL3VuaWNvcmUgLVAgcG9kIC1tYWtldGVzdCAtbWFrZWxpc3QgLXAKKyAjCUNvbW1lbnRlZCBvdXQgc28gYWx3YXlzIHJ1bnMsIG1rdGFibGVzIGxvb2tzIGF0IGZhciBtb3JlIGZpbGVzIHRoYW4gd2UKKyAjCWNhbiBpbiB0aGlzIG1ha2VmaWxlIHRvIGRlY2lkZSBpZiBuZWVkcyB0byBydW4gb3Igbm90CitAQCAtMTAwOSwxMiArMTAxOSwxMiBAQCB1bmkuZGF0YTogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pIGxpYi91bmljb3JlL21rdGFibGVzICQobm9ueHNfZXh0KQorICMgJChQRVJMX0VYRSkgYW5kIGV4dCBiZWNhdXNlIHBvZF9saWIucGwgbmVlZHMgRGlnZXN0OjpNRDUKKyAjIEJ1dCBhbHNvIHRoaXMgZW5zdXJlcyB0aGF0IGFsbCBleHRlbnNpb25zIGFyZSBidWlsdCBiZWZvcmUgd2UgdHJ5IHRvIHNjYW4KKyAjIHRoZW0sIHdoaWNoIHBpY2tzIHVwIERldmVsOjpQUFBvcnQncyBkb2N1bWVudGF0aW9uLgorLXBvZC9wZXJsdG9jLnBvZDogJChwZXJsdG9jX3BvZF9wcmVyZXFzKSAgJChQRVJMX0VYRSkgJChleHQpIHBvZC9idWlsZHRvYworLQkkKFJVTl9QRVJMKSAtZiBwb2QvYnVpbGR0b2MgLXEKKytwb2QvcGVybHRvYy5wb2Q6ICQocGVybHRvY19wb2RfcHJlcmVxcykgJChleHQpIHBvZC9idWlsZHRvYworKwkkKE1JTklQRVJMKSAtZiBwb2QvYnVpbGR0b2MgLXEKKyAKKyBwb2QvcGVybGFwaS5wb2Q6IHBvZC9wZXJsaW50ZXJuLnBvZAorIAorLXBvZC9wZXJsaW50ZXJuLnBvZDogJChNSU5JUEVSTF9FWEUpIGF1dG9kb2MucGwgZW1iZWQuZm5jCisrcG9kL3BlcmxpbnRlcm4ucG9kOiBhdXRvZG9jLnBsIGVtYmVkLmZuYworIAkkKE1JTklQRVJMKSBhdXRvZG9jLnBsCisgCisgcG9kL3Blcmxtb2RsaWIucG9kOiAkKE1JTklQRVJMX0VYRSkgcG9kL3Blcmxtb2RsaWIuUEwgTUFOSUZFU1QKK0BAIC0xMDI0LDcgKzEwMzQsNyBAQCBwb2QvcGVybDUyMjBkZWx0YS5wb2Q6IHBvZC9wZXJsZGVsdGEucG9kCisgCSQoUk1TKSBwb2QvcGVybDUyMjBkZWx0YS5wb2QKKyAJJChMTlMpIHBlcmxkZWx0YS5wb2QgcG9kL3Blcmw1MjIwZGVsdGEucG9kCisgCistZXh0cmEucG9kczogJChNSU5JUEVSTF9FWEUpCisrZXh0cmEucG9kczoKKyAJLUB0ZXN0ICEgLWYgZXh0cmEucG9kcyB8fCBybSAtZiBgY2F0IGV4dHJhLnBvZHNgCisgCS1Acm0gLWYgZXh0cmEucG9kcworIAktQGZvciB4IGluIGBncmVwIC1sICdePVthLXpdJyBSRUFETUUuKiB8IGdyZXAgLXYgUkVBRE1FLnZtc2AgOyBkbyBcCitAQCAtMTA2OCw4ICsxMDc4LDcgQEAgRU9UCisgICAgICAgICAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8RU9UCisgCisgaW5zdGFsbF8kbmFtZSBpbnN0YWxsLSRuYW1lOiBcJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsIGFsbCBpbnN0YWxsbWFuCistCVwkKFJVTl9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9XCQoREVTVERJUikgJGZsYWdzIFwkKElOU1RBTExGTEFHUykgXCQoU1RSSVBGTEFHUykKKy0JXCQoUlVOX1BFUkwpIGluc3RhbGxtYW4gLS1kZXN0ZGlyPVwkKERFU1RESVIpICRmbGFncworKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9XCQoREVTVERJUikgJGZsYWdzICBcJChJTlNUQUxMRkxBR1MpIFwkKFNUUklQRkxBR1MpCisgRU9UCisgICAgIGZpCisgCitAQCAtMTA3OSwxMSArMTA4OCw3IEBAIGRvbmUKKyBpZiB0ZXN0ICJYJGhvc3RwZXJsIiAhPSBYOyB0aGVuCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGluc3RhbGwucGVybDoJJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsCistCSQoSE9TVF9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorLQktQHRlc3QgISAtcyBleHRyYXMubHN0IHx8ICQoTUFLRSkgZXh0cmFzLmluc3RhbGwKKy0KKy1pbnN0YWxsLm1hbjoJYWxsIGluc3RhbGxtYW4KKy0JJChIT1NUX1BFUkwpIGluc3RhbGxtYW4gLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpCisrCS4vaG9zdHBlcmwgLUlmYWtlX2NvbmZpZ19saWJyYXJ5IC1JbGliIC1NQ29uZmlnIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCisgCisgIyBYWFggRXhwZXJpbWVudGFsLiBIYXJkd2lyZWQgdmFsdWVzLCBidXQgdXNlZnVsIGZvciB0ZXN0aW5nLgorICMgRXZlbnR1YWxseSBDb25maWd1cmUgY291bGQgYXNrIGZvciBzb21lIG9mIHRoZXNlIHZhbHVlcy4KK0BAIC0xMTAxLDI0ICsxMTA2LDggQEAgaW5zdGFsbC5odG1sOiBhbGwgaW5zdGFsbGh0bWwKKyBlbHNlCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGluc3RhbGwucGVybDoJJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsCistCSQoUlVOX1BFUkwpIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCistCS1AdGVzdCAhIC1zIGV4dHJhcy5sc3QgfHwgUEFUSD0iYHB3ZGA6XCR7UEFUSH0iIFBFUkw1TElCPSJgcHdkYC9saWIiIFwkKFJVTl9QRVJMKSAtSWxpYiAtTUNQQU4gLWUgJ0BBUkdWJiZpbnN0YWxsKEBBUkdWKScgYGNhdCBleHRyYXMubHN0YAorKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorIAorLWluc3RhbGwubWFuOglhbGwgaW5zdGFsbG1hbgorLQkkKFJVTl9QRVJMKSBpbnN0YWxsbWFuIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKQorLQorLSMgWFhYIEV4cGVyaW1lbnRhbC4gSGFyZHdpcmVkIHZhbHVlcywgYnV0IHVzZWZ1bCBmb3IgdGVzdGluZy4KKy0jIEV2ZW50dWFsbHkgQ29uZmlndXJlIGNvdWxkIGFzayBmb3Igc29tZSBvZiB0aGVzZSB2YWx1ZXMuCistaW5zdGFsbC5odG1sOiBhbGwgaW5zdGFsbGh0bWwKKy0JLUB0ZXN0IC1mIFJFQURNRS52bXMgJiYgY2Qgdm1zICYmICQoTE5TKSAuLi9SRUFETUUudm1zIFJFQURNRV92bXMucG9kICYmIGNkIC4uCistCSQoUlVOX1BFUkwpIGluc3RhbGxodG1sICAgXAorLSAgICAgIC0tcG9kcm9vdD0uIC0tcG9kcGF0aD0uIC0tcmVjdXJzZSAgXAorLSAgICAgIC0taHRtbGRpcj0kKHByaXZsaWIpL2h0bWwgICBcCistICAgICAgLS1odG1scm9vdD0kKHByaXZsaWIpL2h0bWwgIFwKKy0gICAgICAtLXNwbGl0aGVhZD1wb2QvcGVybGlwYyAgICAgXAorLSAgICAgIC0tc3BsaXRpdGVtPXBvZC9wZXJsZnVuYyAgICBcCistICAgICAgLS1pZ25vcmU9UG9ydGluZy9NYWludGFpbmVycy5wbSxQb3J0aW5nL3B1bXBraW4ucG9kLFBvcnRpbmcvcmVwb3NpdG9yeS5wb2QgXAorLSAgICAgIC0tdmVyYm9zZQorICFOTyFTVUJTIQorIGZpCisgCitAQCAtMTIxMCwxMyArMTE5OSwxMyBAQCBtYW5pY2hlY2s6CUZPUkNFCisgIworICMgRHluYUxvYWRlciBtYXkgYmUgbmVlZGVkIGZvciBleHRlbnNpb25zIHRoYXQgdXNlIE1ha2VmaWxlLlBMLgorIAorLSQoRFlOQUxPQURFUik6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgRk9SQ0UgJChub254c19leHQpCisrJChEWU5BTE9BREVSKTogbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IEZPUkNFICQobm9ueHNfZXh0KQorIAkkKE1JTklQRVJMKSBtYWtlX2V4dC5wbCAkQCAkKE1BS0VfRVhUX0FSR1MpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPXN0YXRpYyAkKFNUQVRJQ19MREZMQUdTKQorIAorLWRfZHVtbXkgJChkeW5hbWljX2V4dCk6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFICQoUEVSTEVYUE9SVCkgJChMSUJQRVJMKQorK2RfZHVtbXkgJChkeW5hbWljX2V4dCk6CWxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UgJChQRVJMRVhQT1JUKSAkKExJQlBFUkwpCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICRAICQoTUFLRV9FWFRfQVJHUykgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9ZHluYW1pYworIAorLXNfZHVtbXkgJChzdGF0aWNfZXh0KToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UKKytzX2R1bW15ICQoc3RhdGljX2V4dCk6CWxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJEAgJChNQUtFX0VYVF9BUkdTKSBNQUtFPSIkKE1BS0UpIiBMSUJQRVJMX0E9JChMSUJQRVJMKSBMSU5LVFlQRT1zdGF0aWMgJChTVEFUSUNfTERGTEFHUykKKyAKKyBuX2R1bW15ICQobm9ueHNfZXh0KToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBGT1JDRQorQEAgLTE0MDUsMTQgKzEzOTQsMTQgQEAgdGVzdF9wcmVwX3ByZTogcHJlcGxpYnJhcnkgdXRpbGl0aWVzICQobm9ueHNfZXh0KQorIAorIGNhc2UgIiR0YXJnZXRob3N0IiBpbgorICcnKSAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy10ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlICQoTUlOSVBFUkxfRVhFKSAkKHVuaWRhdGFmaWxlcykgJChQRVJMX0VYRSkgXAorK3Rlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgJCh1bmlkYXRhZmlsZXMpICQoUEVSTF9FWEUpIFwKKyAJJChkeW5hbWljX2V4dCkgJChURVNUX1BFUkxfRExMKSBydW50ZXN0cyAkKGdlbmVyYXRlZF9wb2RzKQorIAljZCB0ICYmIChybSAtZiAkKFBFUkxfRVhFKTsgJChMTlMpIC4uLyQoUEVSTF9FWEUpICQoUEVSTF9FWEUpKQorIAorICFOTyFTVUJTIQorIDs7CisgKikgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCFHUk9LIVRISVMhCistdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSBcJChNSU5JUEVSTF9FWEUpIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUpIFwKKyt0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUpIFwKKyAJXCQoZHluYW1pY19leHQpIFwkKFRFU1RfUEVSTF9ETEwpIHJ1bnRlc3RzIFwKKyAJXCQoZ2VuZXJhdGVkX3BvZHMpCisgCSR0byBsaWJwZXJsLioKK0BAIC0xNDY1LDcgKzE0NTQsNyBAQCB0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlIFwkKE1JTklQRVJMX0VYRSkgXCQodW5pZGF0YWZpbGVzKSBcJChQRVJMX0VYRQorIGVzYWMKKyAKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy10ZXN0X3ByZXBfcmVvbmx5OiAkKE1JTklQRVJMX0VYRSkgJChQRVJMX0VYRSkgJChkeW5hbWljX2V4dF9yZSkgJChURVNUX1BFUkxfRExMKQorK3Rlc3RfcHJlcF9yZW9ubHk6ICQoUEVSTF9FWEUpICQoZHluYW1pY19leHRfcmUpICQoVEVTVF9QRVJMX0RMTCkKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJChkeW5hbWljX2V4dF9yZSkgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9ZHluYW1pYworIAljZCB0ICYmIChybSAtZiAkKFBFUkxfRVhFKTsgJChMTlMpIC4uLyQoUEVSTF9FWEUpICQoUEVSTF9FWEUpKQorICFOTyFTVUJTIQorQEAgLTE1MTYsNyArMTUwNSw3IEBAICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIAorICMgQ2FuJ3QgZGVwZW5kIG9uIGxpYi9Db25maWcucG0gYmVjYXVzZSB0aGF0IG1pZ2h0IGJlIHdoZXJlIG1pbmlwZXJsCisgIyBpcyBjcmFzaGluZy4KKy1taW5pdGVzdDogJChNSU5JUEVSTF9FWEUpCisrbWluaXRlc3Q6CisgCS1AdGVzdCAtZiBsaWIvQ29uZmlnLnBtIHx8ICQoTUFLRSkgbGliL0NvbmZpZy5wbSAkKHVuaWRhdGFmaWxlcykKKyAJQGVjaG8gIiAiCisgCUBlY2hvICJZb3UgbWF5IHNlZSBzb21lIGlycmVsZXZhbnQgdGVzdCBmYWlsdXJlcyBpZiB5b3UgaGF2ZSBiZWVuIHVuYWJsZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThlMmUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xNC4yL0Nyb3NzL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9Dcm9zcy9NYWtlZmlsZQorKysrIHBlcmwtNS4xNC4yL0Nyb3NzL01ha2VmaWxlCitAQCAtMSw2ICsxLDcgQEAKKyAjIyBUb3BsZXZlbCBNYWtlZmlsZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24gb2YgcGVybAorIAorLWV4cG9ydCBUT1BESVI9JHtzaGVsbCBwd2R9Cisrb3ZlcnJpZGUgVE9QRElSPSR7c2hlbGwgcHdkfQorK2V4cG9ydCBUT1BESVIKKyBpbmNsdWRlICQoVE9QRElSKS9jb25maWcKKyBleHBvcnQgQ0ZMQUdTCisgZXhwb3J0IFNZUz0kKEFSQ0gpLSQoT1MpCitAQCAtMTAsNyArMTEsNyBAQCBleHBvcnQgT1BUSU1JWkFUSU9OID0gLU8yCisgCisgZXhwb3J0IENDID0gJChDUk9TUylnY2MKKyBleHBvcnQgQ1hYID0gJChDUk9TUylnKysKKy1leHBvcnQgTEQgPSAkKENST1NTKWxkCisrZXhwb3J0IExEID0gJChDQykKKyBleHBvcnQgU1RSSVAgPSAkKENST1NTKXN0cmlwCisgZXhwb3J0IEFSID0gJChDUk9TUylhcgorIGV4cG9ydCBSQU5MSUIgPSAkKENST1NTKXJhbmxpYgorQEAgLTMyLDE3ICszMyw2IEBAIENGTEFHUys9JChGVUxMX09QVElNSVpBVElPTikKKyBhbGw6CisgCUBlY2hvIFBsZWFzZSByZWFkIHRoZSBSRUFETUUgZmlsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyAKKy1nZW5fcGF0Y2g6CistCWRpZmYgLUJidXIgLi4vTWFrZWZpbGUuU0ggTWFrZWZpbGUuU0ggPiBNYWtlZmlsZS5TSC5wYXRjaAorLQlkaWZmIC1CYnVyIC4uL2luc3RhbGxwZXJsIGluc3RhbGxwZXJsID4gaW5zdGFsbHBlcmwucGF0Y2gKKy0KKy1wYXRjaDoKKy0JY2QgLi4gOyBpZiBbICEgLWUgLi9DUk9TU19QQVRDSEVEIF0gOyB0aGVuIFwKKy0JCXBhdGNoIC1wMSA8IENyb3NzL01ha2VmaWxlLlNILnBhdGNoOyBcCistCQlwYXRjaCAtcDEgPCBDcm9zcy9pbnN0YWxscGVybC5wYXRjaCA7IG12IGluc3RhbGxwZXJsIGluc3RhbGxwZXJsLXBhdGNoZWQ7IFwKKy0JCXNlZCAtZSAncy9YWFNUUklQWFgvJChTWVMpLycgaW5zdGFsbHBlcmwtcGF0Y2hlZCA+IGluc3RhbGxwZXJsOyBcCistCQl0b3VjaCBDUk9TU19QQVRDSEVEIDsgZmkKKy0KKyBwZXJsOgorIAlAZWNobyBQZXJsIGNyb3NzLWJ1aWxkIGRpcmVjdG9yeSBpcyAkKFRPUERJUikKKyAJQGVjaG8gVGFyZ2V0IGFyY2ggaXMgJChTWVMpCitAQCAtNTIsMTEgKzQyLDExIEBAIHBlcmw6CisgCSQoVE9QRElSKS9nZW5lcmF0ZV9jb25maWdfc2ggY29uZmlnLnNoLSQoU1lTKSA+ICQoVE9QRElSKS8uLi9jb25maWcuc2gKKyAJY2QgJChUT1BESVIpLy4uIDsgLi9Db25maWd1cmUgLVMgOyBtYWtlIGRlcGVuZCA7IG1ha2UgOyBtYWtlIG1vcmUKKyAJY2QgJChUT1BESVIpLy4uIDsgbWtkaXIgLXAgZmFrZV9jb25maWdfbGlicmFyeSA7IGNwIGxpYi9Db25maWcucG0gbGliL0NvbmZpZ19oZWF2eS5wbCBmYWtlX2NvbmZpZ19saWJyYXJ5CistCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTIgIlBFUkxSVU49L3Vzci9iaW4vcGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorLQljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUzICJQRVJMUlVOPS91c3IvYmluL3BlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKy0JY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlNCAiUEVSTFJVTj0vdXNyL2Jpbi9wZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisrCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTIgIlBFUkxSVU49aG9zdHBlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKysJY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlMyAiUEVSTFJVTj1ob3N0cGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorKwljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmU0ICJQRVJMUlVOPWhvc3RwZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisgCWNkICQoVE9QRElSKS8uLiA7IHJtIC1yZiBpbnN0YWxsX21lX2hlcmUKKy0JY2QgJChUT1BESVIpLy4uIDsgbWFrZSBpbnN0YWxsLXN0cmlwCisrIwljZCAkKFRPUERJUikvLi4gOyBtYWtlIGluc3RhbGwtc3RyaXAKKyAJY2QgJChUT1BESVIpLy4uIDsgc2ggLXggQ3Jvc3Mvd2FycAorIAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiNTA0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gKQEAgLTAsMCArMSwxMjIxIEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBydW5uaW5nIHRoZSBDb25maWd1cmUgc2NyaXB0LiBJdCBob2xkcyBhbGwgdGhlCisjIGRlZmluaXRpb25zIGZpZ3VyZWQgb3V0IGJ5IENvbmZpZ3VyZS4gU2hvdWxkIHlvdSBtb2RpZnkgb25lIG9mIHRoZXNlIHZhbHVlcywKKyMgZG8gbm90IGZvcmdldCB0byBwcm9wYWdhdGUgeW91ciBjaGFuZ2VzIGJ5IHJ1bm5pbmcgIkNvbmZpZ3VyZSAtZGVyIi4gWW91IG1heQorIyBpbnN0ZWFkIGNob29zZSB0byBydW4gZWFjaCBvZiB0aGUgLlNIIGZpbGVzIGJ5IHlvdXJzZWxmLCBvciAiQ29uZmlndXJlIC1TIi4KKyMKKworIyBQYWNrYWdlIG5hbWUgICAgICA6IHBlcmw1CisjIFNvdXJjZSBkaXJlY3RvcnkgIDogLgorIyBDb25maWd1cmF0aW9uIHRpbWU6IFRodSBKdW4gMTggMDU6Mzc6MjcgVVRDIDIwMTUKKyMgQ29uZmlndXJlZCBieSAgICAgOiBPcGVuIEVtYmVkZGVkCisjIFRhcmdldCBzeXN0ZW0gICAgIDogbGludXggcWVtdXg4Ni02NCAzLjE5LjUteW9jdG8tc3RhbmRhcmQgIzEgc21wIHByZWVtcHQgdHVlIGp1biAxNiAwMDoyODoxNyBwZHQgMjAxNSB4ODZfNjQgZ251bGludXgKKworOiBDb25maWd1cmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK2NvbmZpZ19hcmcwPSdDb25maWd1cmUnCitjb25maWdfYXJncz0nLWRlcyAtRG9wdGltaXplPS1PMiAtRG15aG9zdG5hbWU9bG9jYWxob3N0IC1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0IC1EY2M9Z2NjIC1EY2ZfYnk9T3BlbiBFbWJlZGRlZCAtRGluc3RhbGxwcmVmaXg9QEVYRUNQUkVGSVhAIC1EcHJlZml4PUBFWEVDUFJFRklYQCAtRHZlbmRvcnByZWZpeD1ARVhFQ1BSRUZJWEAgLURzaXRlcHJlZml4PUBFWEVDUFJFRklYQCAtRG90aGVybGliZGlycz1ATElCRElSQC9wZXJsLzUuMjIuMCAtRHVzZXNocnBsaWIgLUR1c2V0aHJlYWRzIC1EdXNlaXRocmVhZHMgLUR1c2VsYXJnZWZpbGVzIC1VZF9kb3N1aWQgLURkX3NlbWN0bF9zZW11biAtVWlfZGIgLVVpX25kYm0gLVVpX2dkYm0gLURpX3NoYWRvdyAtRGlfc3lzbG9nIC1EbWFuM2V4dD0zcG0gLUR1c2VwZXJsaW8gLURpbnN0YWxsdXNyYmlucGVybCAtVWJpbmNvbXBhdDUwMDUgLVV2ZXJzaW9ub25seSAtRHBhZ2VyPUBVU1JCSU5AL2xlc3MgLWlzcicKK2NvbmZpZ19hcmdjPTI4Citjb25maWdfYXJnMT0nLWRlcycKK2NvbmZpZ19hcmcyPSctRG9wdGltaXplPS1PMicKK2NvbmZpZ19hcmczPSctRG15aG9zdG5hbWU9bG9jYWxob3N0JworY29uZmlnX2FyZzQ9Jy1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0JworY29uZmlnX2FyZzU9Jy1EY2M9Z2NjJworY29uZmlnX2FyZzY9Jy1EY2ZfYnk9T3BlbiBFbWJlZGRlZCcKK2NvbmZpZ19hcmc3PSctRGluc3RhbGxwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzg9Jy1EcHJlZml4PUBFWEVDUFJFRklYQCcKK2NvbmZpZ19hcmc5PSctRHZlbmRvcnByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnMTA9Jy1Ec2l0ZXByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnMTE9Jy1Eb3RoZXJsaWJkaXJzPUBMSUJESVJAL3BlcmwvNS4yMi4wJworY29uZmlnX2FyZzEyPSctRHVzZXNocnBsaWInCitjb25maWdfYXJnMTM9Jy1EdXNldGhyZWFkcycKK2NvbmZpZ19hcmcxND0nLUR1c2VpdGhyZWFkcycKK2NvbmZpZ19hcmcxNT0nLUR1c2VsYXJnZWZpbGVzJworY29uZmlnX2FyZzE2PSctVWRfZG9zdWlkJworY29uZmlnX2FyZzE3PSctRGRfc2VtY3RsX3NlbXVuJworY29uZmlnX2FyZzE4PSctVWlfZGInCitjb25maWdfYXJnMTk9Jy1VaV9uZGJtJworY29uZmlnX2FyZzIwPSctVWlfZ2RibScKK2NvbmZpZ19hcmcyMT0nLURpX3NoYWRvdycKK2NvbmZpZ19hcmcyMj0nLURpX3N5c2xvZycKK2NvbmZpZ19hcmcyMz0nLURtYW4zZXh0PTNwbScKK2NvbmZpZ19hcmcyND0nLUR1c2VwZXJsaW8nCitjb25maWdfYXJnMjU9Jy1EaW5zdGFsbHVzcmJpbnBlcmwnCitjb25maWdfYXJnMjY9Jy1VYmluY29tcGF0NTAwNScKK2NvbmZpZ19hcmcyNz0nLVV2ZXJzaW9ub25seScKK2NvbmZpZ19hcmcyOD0nLURwYWdlcj1AVVNSQklOQC9sZXNzIC1pc3InCisKK0F1dGhvcj0nJworRGF0ZT0nJworSGVhZGVyPScnCitJZD0nJworTG9ja2VyPScnCitMb2c9JycKK1JDU2ZpbGU9JycKK1JldmlzaW9uPScnCitTb3VyY2U9JycKK1N0YXRlPScnCitfYT0nLmEnCitfZXhlPScnCitfbz0nLm8nCithZnM9J2ZhbHNlJworYWZzcm9vdD0nL2FmcycKK2FsaWduYnl0ZXM9JzgnCithbnNpMmtucj0nJworYXBob3N0bmFtZT0nJworYXBpX3JldmlzaW9uPSc1JworYXBpX3N1YnZlcnNpb249JzAnCithcGlfdmVyc2lvbj0nMjInCithcGlfdmVyc2lvbnN0cmluZz0nNS4yMi4wJworYXI9J2FyJworYXJjaGxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2hsaWJleHA9J0BTVEFHSU5HRElSQEBMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNobGliX2V4cD0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2huYW1lNjQ9JycKK2FyY2huYW1lPSdAQVJDSEAtdGhyZWFkLW11bHRpJworYXJjaG9ianM9JycKK2FzY3RpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfU0InCithd2s9J2F3aycKK2Jhc2VyZXY9JzUuMCcKK2Jhc2g9JycKK2Jpbj0nQFVTUkJJTkAnCitiaW5fRUxGPSdkZWZpbmUnCitiaW5leHA9J0BVU1JCSU5AJworYmlzb249J2Jpc29uJworYnlhY2M9J2J5YWNjJworYz0nJworY2FzdGZsYWdzPScwJworY2F0PSdjYXQnCitjYz0nZ2NjJworY2NjZGxmbGFncz0nLWZQSUMnCitjY2RsZmxhZ3M9Jy1XbCwtRSAtV2wsLXJwYXRoLEBMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGkvQ09SRScKK2NjZmxhZ3M9Jy1EX1JFRU5UUkFOVCAtRF9HTlVfU09VUkNFIC1md3JhcHYgLWZuby1zdHJpY3QtYWxpYXNpbmcgLXBpcGUgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EX0ZPUlRJRllfU09VUkNFPTInCitjY2ZsYWdzX3VzZWxhcmdlZmlsZXM9Jy1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCcKK2NjbmFtZT0nZ2NjJworY2NzeW1ib2xzPScnCitjY3ZlcnNpb249JycKK2NmX2J5PSdPcGVuIEVtYmVkZGVkJworY2ZfZW1haWw9J09wZW4gRW1iZWRkZWRAbG9jYWxob3N0LmxvY2FsZG9tYWluJworY2ZfdGltZT0nVGh1IEp1biAxOCAwNTozNzoyNyBVVEMgMjAxNScKK2NoYXJiaXRzPSc4JworY2hhcnNpemU9JzEnCitjaGdycD0nJworY2htb2Q9J2NobW9kJworY2hvd249JycKK2Nsb2NrdHlwZT0nY2xvY2tfdCcKK2NvbW09J2NvbW0nCitjb21wcmVzcz0nJworY29udGFpbnM9J2dyZXAnCitjcD0nY3AnCitjcGlvPScnCitjcHA9J2NwcCcKK2NwcF9zdHVmZj0nNDInCitjcHBjY3N5bWJvbHM9JycKK2NwcGZsYWdzPSctRF9SRUVOVFJBTlQgLURfR05VX1NPVVJDRSAtZndyYXB2IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlJworY3BwbGFzdD0nLScKK2NwcG1pbnVzPSctJworY3BwcnVuPSdnY2MgIC1FJworY3Bwc3RkaW49J2djYyAgLUUnCitjcnlwdF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9DQ1MnCitjcnlwdGxpYj0nJworY3NoPSdjc2gnCitjdGVybWlkX3JfcHJvdG89JzAnCitjdGltZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9TQicKK2RfR2NvbnZlcnQ9J2djdnQoKHgpLChuKSwoYikpJworZF9QUklFVWxkYmw9J2RlZmluZScKK2RfUFJJRlVsZGJsPSdkZWZpbmUnCitkX1BSSUdVbGRibD0nZGVmaW5lJworZF9QUklYVTY0PSdkZWZpbmUnCitkX1BSSWQ2ND0nZGVmaW5lJworZF9QUkllbGRibD0nZGVmaW5lJworZF9QUklmbGRibD0nZGVmaW5lJworZF9QUklnbGRibD0nZGVmaW5lJworZF9QUklpNjQ9J2RlZmluZScKK2RfUFJJbzY0PSdkZWZpbmUnCitkX1BSSXU2ND0nZGVmaW5lJworZF9QUkl4NjQ9J2RlZmluZScKK2RfU0NOZmxkYmw9J2RlZmluZScKK2RfX2Z3YWxrPSd1bmRlZicKK2RfYWNjZXNzPSdkZWZpbmUnCitkX2FjY2Vzc3g9J3VuZGVmJworZF9hY29zaD0nZGVmaW5lJworZF9haW50bD0ndW5kZWYnCitkX2FsYXJtPSdkZWZpbmUnCitkX2FyY2hsaWI9J2RlZmluZScKK2RfYXNjdGltZTY0PSd1bmRlZicKK2RfYXNjdGltZV9yPSdkZWZpbmUnCitkX2FzaW5oPSdkZWZpbmUnCitkX2F0YW5oPSdkZWZpbmUnCitkX2F0b2xmPSd1bmRlZicKK2RfYXRvbGw9J2RlZmluZScKK2RfYXR0cmlidXRlX2RlcHJlY2F0ZWQ9J2RlZmluZScKK2RfYXR0cmlidXRlX2Zvcm1hdD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfbWFsbG9jPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9ub25udWxsPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9ub3JldHVybj0nZGVmaW5lJworZF9hdHRyaWJ1dGVfcHVyZT0nZGVmaW5lJworZF9hdHRyaWJ1dGVfdW51c2VkPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHQ9J2RlZmluZScKK2RfYmFja3RyYWNlPSdkZWZpbmUnCitkX2JjbXA9J2RlZmluZScKK2RfYmNvcHk9J2RlZmluZScKK2RfYnNkPSd1bmRlZicKK2RfYnNkZ2V0cGdycD0ndW5kZWYnCitkX2JzZHNldHBncnA9J3VuZGVmJworZF9idWlsdGluX2Nob29zZV9leHByPSdkZWZpbmUnCitkX2J1aWx0aW5fZXhwZWN0PSdkZWZpbmUnCitkX2J6ZXJvPSdkZWZpbmUnCitkX2M5OV92YXJpYWRpY19tYWNyb3M9J2RlZmluZScKK2RfY2FzdGkzMj0nZGVmaW5lJworZF9jYXN0bmVnPSdkZWZpbmUnCitkX2NicnQ9J2RlZmluZScKK2RfY2hhcnZzcHI9J3VuZGVmJworZF9jaG93bj0nZGVmaW5lJworZF9jaHJvb3Q9J2RlZmluZScKK2RfY2hzaXplPSd1bmRlZicKK2RfY2xhc3M9J3VuZGVmJworZF9jbGVhcmVudj0nZGVmaW5lJworZF9jbG9zZWRpcj0nZGVmaW5lJworZF9jbXNnaGRyX3M9J2RlZmluZScKK2RfY29uc3Q9J2RlZmluZScKK2RfY29weXNpZ249J2RlZmluZScKK2RfY29weXNpZ25sPSdkZWZpbmUnCitkX2NwbHVzcGx1cz0ndW5kZWYnCitkX2NyeXB0PSdkZWZpbmUnCitkX2NyeXB0X3I9J2RlZmluZScKK2RfY3NoPSd1bmRlZicKK2RfY3Rlcm1pZD0nZGVmaW5lJworZF9jdGVybWlkX3I9J3VuZGVmJworZF9jdGltZTY0PSd1bmRlZicKK2RfY3RpbWVfcj0nZGVmaW5lJworZF9jdXNlcmlkPSdkZWZpbmUnCitkX2RibF9kaWc9J2RlZmluZScKK2RfZGJtaW5pdHByb3RvPSdkZWZpbmUnCitkX2RpZmZ0aW1lNjQ9J3VuZGVmJworZF9kaWZmdGltZT0nZGVmaW5lJworZF9kaXJfZGRfZmQ9J3VuZGVmJworZF9kaXJmZD0nZGVmaW5lJworZF9kaXJuYW1sZW49J3VuZGVmJworZF9kbGFkZHI9J2RlZmluZScKK2RfZGxlcnJvcj0nZGVmaW5lJworZF9kbG9wZW49J2RlZmluZScKK2RfZGxzeW11bj0ndW5kZWYnCitkX2Rvc3VpZD0ndW5kZWYnCitkX2RyYW5kNDhfcj0nZGVmaW5lJworZF9kcmFuZDQ4cHJvdG89J2RlZmluZScKK2RfZHVwMj0nZGVmaW5lJworZF9lYWNjZXNzPSdkZWZpbmUnCitkX2VuZGdyZW50PSdkZWZpbmUnCitkX2VuZGdyZW50X3I9J3VuZGVmJworZF9lbmRoZW50PSdkZWZpbmUnCitkX2VuZGhvc3RlbnRfcj0ndW5kZWYnCitkX2VuZG5lbnQ9J2RlZmluZScKK2RfZW5kbmV0ZW50X3I9J3VuZGVmJworZF9lbmRwZW50PSdkZWZpbmUnCitkX2VuZHByb3RvZW50X3I9J3VuZGVmJworZF9lbmRwd2VudD0nZGVmaW5lJworZF9lbmRwd2VudF9yPSd1bmRlZicKK2RfZW5kc2VudD0nZGVmaW5lJworZF9lbmRzZXJ2ZW50X3I9J3VuZGVmJworZF9lb2ZuYmxrPSdkZWZpbmUnCitkX2VyZj0nZGVmaW5lJworZF9lcmZjPSdkZWZpbmUnCitkX2V1bmljZT0ndW5kZWYnCitkX2V4cDI9J2RlZmluZScKK2RfZXhwbTE9J2RlZmluZScKK2RfZmFzdHN0ZGlvPSd1bmRlZicKK2RfZmNoZGlyPSdkZWZpbmUnCitkX2ZjaG1vZD0nZGVmaW5lJworZF9mY2hvd249J2RlZmluZScKK2RfZmNudGw9J2RlZmluZScKK2RfZmNudGxfY2FuX2xvY2s9J2RlZmluZScKK2RfZmRfbWFjcm9zPSdkZWZpbmUnCitkX2ZkX3NldD0nZGVmaW5lJworZF9mZGltPSdkZWZpbmUnCitkX2Zkc19iaXRzPSdkZWZpbmUnCitkX2ZlZ2V0cm91bmQ9J2RlZmluZScKK2RfZmdldHBvcz0nZGVmaW5lJworZF9maW5pdGU9J2RlZmluZScKK2RfZmluaXRlbD0nZGVmaW5lJworZF9mbGV4Zm5hbT0nZGVmaW5lJworZF9mbG9jaz0nZGVmaW5lJworZF9mbG9ja3Byb3RvPSdkZWZpbmUnCitkX2ZtYT0nZGVmaW5lJworZF9mbWF4PSdkZWZpbmUnCitkX2ZtaW49J2RlZmluZScKK2RfZm9yaz0nZGVmaW5lJworZF9mcF9jbGFzcz0ndW5kZWYnCitkX2ZwX2NsYXNzaWZ5PSd1bmRlZicKK2RfZnBfY2xhc3NsPSd1bmRlZicKK2RfZnBhdGhjb25mPSdkZWZpbmUnCitkX2ZwY2xhc3M9J3VuZGVmJworZF9mcGNsYXNzaWZ5PSdkZWZpbmUnCitkX2ZwY2xhc3NsPSd1bmRlZicKK2RfZnBnZXRyb3VuZD0ndW5kZWYnCitkX2Zwb3M2NF90PSd1bmRlZicKK2RfZnJleHBsPSdkZWZpbmUnCitkX2ZzX2RhdGFfcz0ndW5kZWYnCitkX2ZzZWVrbz0nZGVmaW5lJworZF9mc2V0cG9zPSdkZWZpbmUnCitkX2ZzdGF0ZnM9J2RlZmluZScKK2RfZnN0YXR2ZnM9J2RlZmluZScKK2RfZnN5bmM9J2RlZmluZScKK2RfZnRlbGxvPSdkZWZpbmUnCitkX2Z0aW1lPSd1bmRlZicKK2RfZnV0aW1lcz0nZGVmaW5lJworZF9nZGJtX25kYm1faF91c2VzX3Byb3RvdHlwZXM9J3VuZGVmJworZF9nZGJtbmRibV9oX3VzZXNfcHJvdG90eXBlcz0nZGVmaW5lJworZF9nZXRhZGRyaW5mbz0nZGVmaW5lJworZF9nZXRjd2Q9J2RlZmluZScKK2RfZ2V0ZXNwd25hbT0ndW5kZWYnCitkX2dldGZzc3RhdD0ndW5kZWYnCitkX2dldGdyZW50PSdkZWZpbmUnCitkX2dldGdyZW50X3I9J2RlZmluZScKK2RfZ2V0Z3JnaWRfcj0nZGVmaW5lJworZF9nZXRncm5hbV9yPSdkZWZpbmUnCitkX2dldGdycHM9J2RlZmluZScKK2RfZ2V0aGJ5YWRkcj0nZGVmaW5lJworZF9nZXRoYnluYW1lPSdkZWZpbmUnCitkX2dldGhlbnQ9J2RlZmluZScKK2RfZ2V0aG5hbWU9J2RlZmluZScKK2RfZ2V0aG9zdGJ5YWRkcl9yPSdkZWZpbmUnCitkX2dldGhvc3RieW5hbWVfcj0nZGVmaW5lJworZF9nZXRob3N0ZW50X3I9J2RlZmluZScKK2RfZ2V0aG9zdHByb3Rvcz0nZGVmaW5lJworZF9nZXRpdGltZXI9J2RlZmluZScKK2RfZ2V0bG9naW49J2RlZmluZScKK2RfZ2V0bG9naW5fcj0nZGVmaW5lJworZF9nZXRtbnQ9J3VuZGVmJworZF9nZXRtbnRlbnQ9J2RlZmluZScKK2RfZ2V0bmFtZWluZm89J2RlZmluZScKK2RfZ2V0bmJ5YWRkcj0nZGVmaW5lJworZF9nZXRuYnluYW1lPSdkZWZpbmUnCitkX2dldG5lbnQ9J2RlZmluZScKK2RfZ2V0bmV0YnlhZGRyX3I9J2RlZmluZScKK2RfZ2V0bmV0YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0bmV0ZW50X3I9J2RlZmluZScKK2RfZ2V0bmV0cHJvdG9zPSdkZWZpbmUnCitkX2dldHBhZ3N6PSdkZWZpbmUnCitkX2dldHBieW5hbWU9J2RlZmluZScKK2RfZ2V0cGJ5bnVtYmVyPSdkZWZpbmUnCitkX2dldHBlbnQ9J2RlZmluZScKK2RfZ2V0cGdpZD0nZGVmaW5lJworZF9nZXRwZ3JwMj0ndW5kZWYnCitkX2dldHBncnA9J2RlZmluZScKK2RfZ2V0cHBpZD0nZGVmaW5lJworZF9nZXRwcmlvcj0nZGVmaW5lJworZF9nZXRwcm90b2J5bmFtZV9yPSdkZWZpbmUnCitkX2dldHByb3RvYnludW1iZXJfcj0nZGVmaW5lJworZF9nZXRwcm90b2VudF9yPSdkZWZpbmUnCitkX2dldHByb3RvcHJvdG9zPSdkZWZpbmUnCitkX2dldHBycHduYW09J3VuZGVmJworZF9nZXRwd2VudD0nZGVmaW5lJworZF9nZXRwd2VudF9yPSdkZWZpbmUnCitkX2dldHB3bmFtX3I9J2RlZmluZScKK2RfZ2V0cHd1aWRfcj0nZGVmaW5lJworZF9nZXRzYnluYW1lPSdkZWZpbmUnCitkX2dldHNieXBvcnQ9J2RlZmluZScKK2RfZ2V0c2VudD0nZGVmaW5lJworZF9nZXRzZXJ2YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0c2VydmJ5cG9ydF9yPSdkZWZpbmUnCitkX2dldHNlcnZlbnRfcj0nZGVmaW5lJworZF9nZXRzZXJ2cHJvdG9zPSdkZWZpbmUnCitkX2dldHNwbmFtPSdkZWZpbmUnCitkX2dldHNwbmFtX3I9J2RlZmluZScKK2RfZ2V0dGltZW9kPSdkZWZpbmUnCitkX2dtdGltZTY0PSd1bmRlZicKK2RfZ210aW1lX3I9J2RlZmluZScKK2RfZ251bGliYz0nZGVmaW5lJworZF9ncnBhc3N3ZD0nZGVmaW5lJworZF9oYXNtbnRvcHQ9J2RlZmluZScKK2RfaHRvbmw9J2RlZmluZScKK2RfaHlwb3Q9J2RlZmluZScKK2RfaWxvZ2I9J2RlZmluZScKK2RfaWxvZ2JsPSdkZWZpbmUnCitkX2luY192ZXJzaW9uX2xpc3Q9J3VuZGVmJworZF9pbmRleD0ndW5kZWYnCitkX2luZXRhdG9uPSdkZWZpbmUnCitkX2luZXRudG9wPSdkZWZpbmUnCitkX2luZXRwdG9uPSdkZWZpbmUnCitkX2ludDY0X3Q9J2RlZmluZScKK2RfaXBfbXJlcT0nZGVmaW5lJworZF9pcF9tcmVxX3NvdXJjZT0nZGVmaW5lJworZF9pcHY2X21yZXE9J2RlZmluZScKK2RfaXB2Nl9tcmVxX3NvdXJjZT0ndW5kZWYnCitkX2lzYXNjaWk9J2RlZmluZScKK2RfaXNibGFuaz0nZGVmaW5lJworZF9pc2Zpbml0ZT0nZGVmaW5lJworZF9pc2Zpbml0ZWw9J3VuZGVmJworZF9pc2luZj0nZGVmaW5lJworZF9pc2luZmw9J2RlZmluZScKK2RfaXNsZXNzPSd1bmRlZicKK2RfaXNuYW49J2RlZmluZScKK2RfaXNuYW5sPSdkZWZpbmUnCitkX2lzbm9ybWFsPSdkZWZpbmUnCitkX2owPSdkZWZpbmUnCitkX2owbD0nZGVmaW5lJworZF9raWxscGc9J2RlZmluZScKK2RfbGNfbW9uZXRhcnlfMjAwOD0nZGVmaW5lJworZF9sY2hvd249J2RlZmluZScKK2RfbGRibF9kaWc9J2RlZmluZScKK2RfbGRleHBsPSdkZWZpbmUnCitkX2xnYW1tYT0nZGVmaW5lJworZF9sZ2FtbWFfcj0nZGVmaW5lJworZF9saWJtX2xpYl92ZXJzaW9uPSdkZWZpbmUnCitkX2xpYm5hbWVfdW5pcXVlPSd1bmRlZicKK2RfbGluaz0nZGVmaW5lJworZF9sbHJpbnQ9J2RlZmluZScKK2RfbGxyaW50bD0nZGVmaW5lJworZF9sbHJvdW5kPSdkZWZpbmUnCitkX2xscm91bmRsPSdkZWZpbmUnCitkX2xvY2FsdGltZTY0PSd1bmRlZicKK2RfbG9jYWx0aW1lX3I9J2RlZmluZScKK2RfbG9jYWx0aW1lX3JfbmVlZHNfdHpzZXQ9J2RlZmluZScKK2RfbG9jY29udj0nZGVmaW5lJworZF9sb2NrZj0nZGVmaW5lJworZF9sb2cxcD0nZGVmaW5lJworZF9sb2cyPSdkZWZpbmUnCitkX2xvZ2I9J2RlZmluZScKK2RfbG9uZ2RibD0nZGVmaW5lJworZF9sb25nbG9uZz0nZGVmaW5lJworZF9scmludD0nZGVmaW5lJworZF9scmludGw9J2RlZmluZScKK2RfbHJvdW5kPSdkZWZpbmUnCitkX2xyb3VuZGw9J2RlZmluZScKK2RfbHNlZWtwcm90bz0nZGVmaW5lJworZF9sc3RhdD0nZGVmaW5lJworZF9tYWR2aXNlPSdkZWZpbmUnCitkX21hbGxvY19nb29kX3NpemU9J3VuZGVmJworZF9tYWxsb2Nfc2l6ZT0ndW5kZWYnCitkX21ibGVuPSdkZWZpbmUnCitkX21ic3Rvd2NzPSdkZWZpbmUnCitkX21idG93Yz0nZGVmaW5lJworZF9tZW1jaHI9J2RlZmluZScKK2RfbWVtY21wPSdkZWZpbmUnCitkX21lbWNweT0nZGVmaW5lJworZF9tZW1tb3ZlPSdkZWZpbmUnCitkX21lbXNldD0nZGVmaW5lJworZF9ta2Rpcj0nZGVmaW5lJworZF9ta2R0ZW1wPSdkZWZpbmUnCitkX21rZmlmbz0nZGVmaW5lJworZF9ta3N0ZW1wPSdkZWZpbmUnCitkX21rc3RlbXBzPSdkZWZpbmUnCitkX21rdGltZTY0PSd1bmRlZicKK2RfbWt0aW1lPSdkZWZpbmUnCitkX21tYXA9J2RlZmluZScKK2RfbW9kZmw9J2RlZmluZScKK2RfbW9kZmxfcG93MzJfYnVnPSd1bmRlZicKK2RfbW9kZmxwcm90bz0nZGVmaW5lJworZF9tcHJvdGVjdD0nZGVmaW5lJworZF9tc2c9J2RlZmluZScKK2RfbXNnX2N0cnVuYz0nZGVmaW5lJworZF9tc2dfZG9udHJvdXRlPSdkZWZpbmUnCitkX21zZ19vb2I9J2RlZmluZScKK2RfbXNnX3BlZWs9J2RlZmluZScKK2RfbXNnX3Byb3h5PSdkZWZpbmUnCitkX21zZ2N0bD0nZGVmaW5lJworZF9tc2dnZXQ9J2RlZmluZScKK2RfbXNnaGRyX3M9J2RlZmluZScKK2RfbXNncmN2PSdkZWZpbmUnCitkX21zZ3NuZD0nZGVmaW5lJworZF9tc3luYz0nZGVmaW5lJworZF9tdW5tYXA9J2RlZmluZScKK2RfbXltYWxsb2M9J3VuZGVmJworZF9uYW49J2RlZmluZScKK2RfbmRibT0nZGVmaW5lJworZF9uZGJtX2hfdXNlc19wcm90b3R5cGVzPSd1bmRlZicKK2RfbmVhcmJ5aW50PSdkZWZpbmUnCitkX25leHRhZnRlcj0nZGVmaW5lJworZF9uZXh0dG93YXJkPSdkZWZpbmUnCitkX25pY2U9J2RlZmluZScKK2RfbmxfbGFuZ2luZm89J2RlZmluZScKK2RfbnZfcHJlc2VydmVzX3V2PSd1bmRlZicKK2RfbnZfemVyb19pc19hbGxiaXRzX3plcm89J2RlZmluZScKK2Rfb2ZmNjRfdD0nZGVmaW5lJworZF9vbGRfcHRocmVhZF9jcmVhdGVfam9pbmFibGU9J3VuZGVmJworZF9vbGRwdGhyZWFkcz0ndW5kZWYnCitkX29sZHNvY2s9J3VuZGVmJworZF9vcGVuMz0nZGVmaW5lJworZF9wYXRoY29uZj0nZGVmaW5lJworZF9wYXVzZT0nZGVmaW5lJworZF9wZXJsX290aGVybGliZGlycz0nZGVmaW5lJworZF9waG9zdG5hbWU9J3VuZGVmJworZF9waXBlPSdkZWZpbmUnCitkX3BvbGw9J2RlZmluZScKK2RfcG9ydGFibGU9J2RlZmluZScKK2RfcHJjdGw9J2RlZmluZScKK2RfcHJjdGxfc2V0X25hbWU9J2RlZmluZScKK2RfcHJpbnRmX2Zvcm1hdF9udWxsPSd1bmRlZicKK2RfcHJvY3NlbGZleGU9J2RlZmluZScKK2RfcHNldWRvZm9yaz0ndW5kZWYnCitkX3B0aHJlYWRfYXRmb3JrPSdkZWZpbmUnCitkX3B0aHJlYWRfYXR0cl9zZXRzY29wZT0nZGVmaW5lJworZF9wdGhyZWFkX3lpZWxkPSdkZWZpbmUnCitkX3B0cmRpZmZfdD0nZGVmaW5lJworZF9wd2FnZT0ndW5kZWYnCitkX3B3Y2hhbmdlPSd1bmRlZicKK2RfcHdjbGFzcz0ndW5kZWYnCitkX3B3Y29tbWVudD0ndW5kZWYnCitkX3B3ZXhwaXJlPSd1bmRlZicKK2RfcHdnZWNvcz0nZGVmaW5lJworZF9wd3Bhc3N3ZD0nZGVmaW5lJworZF9wd3F1b3RhPSd1bmRlZicKK2RfcWdjdnQ9J2RlZmluZScKK2RfcXVhZD0nZGVmaW5lJworZF9yYW5kb21fcj0nZGVmaW5lJworZF9yZV9jb21wPSd1bmRlZicKK2RfcmVhZGRpcjY0X3I9J2RlZmluZScKK2RfcmVhZGRpcj0nZGVmaW5lJworZF9yZWFkZGlyX3I9J2RlZmluZScKK2RfcmVhZGxpbms9J2RlZmluZScKK2RfcmVhZHY9J2RlZmluZScKK2RfcmVjdm1zZz0nZGVmaW5lJworZF9yZWdjbXA9J3VuZGVmJworZF9yZWdjb21wPSdkZWZpbmUnCitkX3JlbWFpbmRlcj0nZGVmaW5lJworZF9yZW1xdW89J2RlZmluZScKK2RfcmVuYW1lPSdkZWZpbmUnCitkX3Jld2luZGRpcj0nZGVmaW5lJworZF9yaW50PSdkZWZpbmUnCitkX3JtZGlyPSdkZWZpbmUnCitkX3JvdW5kPSdkZWZpbmUnCitkX3NhZmViY3B5PSd1bmRlZicKK2Rfc2FmZW1jcHk9J3VuZGVmJworZF9zYW5lbWNtcD0nZGVmaW5lJworZF9zYnJrcHJvdG89J2RlZmluZScKK2Rfc2NhbGJuPSdkZWZpbmUnCitkX3NjYWxibmw9J2RlZmluZScKK2Rfc2NoZWRfeWllbGQ9J2RlZmluZScKK2Rfc2NtX3JpZ2h0cz0nZGVmaW5lJworZF9zZWVrZGlyPSdkZWZpbmUnCitkX3NlbGVjdD0nZGVmaW5lJworZF9zZW09J2RlZmluZScKK2Rfc2VtY3RsPSdkZWZpbmUnCitkX3NlbWN0bF9zZW1pZF9kcz0nZGVmaW5lJworZF9zZW1jdGxfc2VtdW49J2RlZmluZScKK2Rfc2VtZ2V0PSdkZWZpbmUnCitkX3NlbW9wPSdkZWZpbmUnCitkX3NlbmRtc2c9J2RlZmluZScKK2Rfc2V0ZWdpZD0nZGVmaW5lJworZF9zZXRldWlkPSdkZWZpbmUnCitkX3NldGdyZW50PSdkZWZpbmUnCitkX3NldGdyZW50X3I9J3VuZGVmJworZF9zZXRncnBzPSdkZWZpbmUnCitkX3NldGhlbnQ9J2RlZmluZScKK2Rfc2V0aG9zdGVudF9yPSd1bmRlZicKK2Rfc2V0aXRpbWVyPSdkZWZpbmUnCitkX3NldGxpbmVidWY9J2RlZmluZScKK2Rfc2V0bG9jYWxlPSdkZWZpbmUnCitkX3NldGxvY2FsZV9yPSd1bmRlZicKK2Rfc2V0bmVudD0nZGVmaW5lJworZF9zZXRuZXRlbnRfcj0ndW5kZWYnCitkX3NldHBlbnQ9J2RlZmluZScKK2Rfc2V0cGdpZD0nZGVmaW5lJworZF9zZXRwZ3JwMj0ndW5kZWYnCitkX3NldHBncnA9J2RlZmluZScKK2Rfc2V0cHJpb3I9J2RlZmluZScKK2Rfc2V0cHJvY3RpdGxlPSd1bmRlZicKK2Rfc2V0cHJvdG9lbnRfcj0ndW5kZWYnCitkX3NldHB3ZW50PSdkZWZpbmUnCitkX3NldHB3ZW50X3I9J3VuZGVmJworZF9zZXRyZWdpZD0nZGVmaW5lJworZF9zZXRyZXNnaWQ9J2RlZmluZScKK2Rfc2V0cmVzdWlkPSdkZWZpbmUnCitkX3NldHJldWlkPSdkZWZpbmUnCitkX3NldHJnaWQ9J3VuZGVmJworZF9zZXRydWlkPSd1bmRlZicKK2Rfc2V0c2VudD0nZGVmaW5lJworZF9zZXRzZXJ2ZW50X3I9J3VuZGVmJworZF9zZXRzaWQ9J2RlZmluZScKK2Rfc2V0dmJ1Zj0nZGVmaW5lJworZF9zaG09J2RlZmluZScKK2Rfc2htYXQ9J2RlZmluZScKK2Rfc2htYXRwcm90b3R5cGU9J2RlZmluZScKK2Rfc2htY3RsPSdkZWZpbmUnCitkX3NobWR0PSdkZWZpbmUnCitkX3NobWdldD0nZGVmaW5lJworZF9zaWdhY3Rpb249J2RlZmluZScKK2Rfc2lnbmJpdD0nZGVmaW5lJworZF9zaWdwcm9jbWFzaz0nZGVmaW5lJworZF9zaWdzZXRqbXA9J2RlZmluZScKK2Rfc2luNl9zY29wZV9pZD0nZGVmaW5lJworZF9zaXRlYXJjaD0nZGVmaW5lJworZF9zbnByaW50Zj0nZGVmaW5lJworZF9zb2NrYWRkcl9pbjY9J2RlZmluZScKK2Rfc29ja2FkZHJfc2FfbGVuPSd1bmRlZicKK2Rfc29ja2F0bWFyaz0nZGVmaW5lJworZF9zb2NrYXRtYXJrcHJvdG89J2RlZmluZScKK2Rfc29ja2V0PSdkZWZpbmUnCitkX3NvY2tsZW5fdD0nZGVmaW5lJworZF9zb2NrcGFpcj0nZGVmaW5lJworZF9zb2NrczVfaW5pdD0ndW5kZWYnCitkX3NwcmludGZfcmV0dXJuc19zdHJsZW49J2RlZmluZScKK2Rfc3FydGw9J2RlZmluZScKK2Rfc3JhbmQ0OF9yPSdkZWZpbmUnCitkX3NyYW5kb21fcj0nZGVmaW5lJworZF9zcmVzZ3Byb3RvPSdkZWZpbmUnCitkX3NyZXN1cHJvdG89J2RlZmluZScKK2Rfc3RhdD0nZGVmaW5lJworZF9zdGF0Ymxrcz0nZGVmaW5lJworZF9zdGF0ZnNfZl9mbGFncz0nZGVmaW5lJworZF9zdGF0ZnNfcz0nZGVmaW5lJworZF9zdGF0aWNfaW5saW5lPSdkZWZpbmUnCitkX3N0YXR2ZnM9J2RlZmluZScKK2Rfc3RkaW9fY250X2x2YWw9J3VuZGVmJworZF9zdGRpb19wdHJfbHZhbD0ndW5kZWYnCitkX3N0ZGlvX3B0cl9sdmFsX25vY2hhbmdlX2NudD0ndW5kZWYnCitkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PSd1bmRlZicKK2Rfc3RkaW9fc3RyZWFtX2FycmF5PSd1bmRlZicKK2Rfc3RkaW9iYXNlPSd1bmRlZicKK2Rfc3Rkc3RkaW89J3VuZGVmJworZF9zdHJjaHI9J2RlZmluZScKK2Rfc3RyY29sbD0nZGVmaW5lJworZF9zdHJjdGNweT0nZGVmaW5lJworZF9zdHJlcnJtPSdzdHJlcnJvcihlKScKK2Rfc3RyZXJyb3I9J2RlZmluZScKK2Rfc3RyZXJyb3Jfcj0nZGVmaW5lJworZF9zdHJmdGltZT0nZGVmaW5lJworZF9zdHJsY2F0PSd1bmRlZicKK2Rfc3RybGNweT0ndW5kZWYnCitkX3N0cnRvZD0nZGVmaW5lJworZF9zdHJ0b2w9J2RlZmluZScKK2Rfc3RydG9sZD0nZGVmaW5lJworZF9zdHJ0b2xsPSdkZWZpbmUnCitkX3N0cnRvcT0nZGVmaW5lJworZF9zdHJ0b3VsPSdkZWZpbmUnCitkX3N0cnRvdWxsPSdkZWZpbmUnCitkX3N0cnRvdXE9J2RlZmluZScKK2Rfc3RyeGZybT0nZGVmaW5lJworZF9zdWlkc2FmZT0ndW5kZWYnCitkX3N5bWxpbms9J2RlZmluZScKK2Rfc3lzY2FsbD0nZGVmaW5lJworZF9zeXNjYWxscHJvdG89J2RlZmluZScKK2Rfc3lzY29uZj0nZGVmaW5lJworZF9zeXNlcm5sc3Q9JycKK2Rfc3lzZXJybHN0PSdkZWZpbmUnCitkX3N5c3RlbT0nZGVmaW5lJworZF90Y2dldHBncnA9J2RlZmluZScKK2RfdGNzZXRwZ3JwPSdkZWZpbmUnCitkX3RlbGxkaXI9J2RlZmluZScKK2RfdGVsbGRpcnByb3RvPSdkZWZpbmUnCitkX3RnYW1tYT0nZGVmaW5lJworZF90aW1lPSdkZWZpbmUnCitkX3RpbWVnbT0nZGVmaW5lJworZF90aW1lcz0nZGVmaW5lJworZF90bV90bV9nbXRvZmY9J2RlZmluZScKK2RfdG1fdG1fem9uZT0nZGVmaW5lJworZF90bXBuYW1fcj0nZGVmaW5lJworZF90cnVuYz0nZGVmaW5lJworZF90cnVuY2F0ZT0nZGVmaW5lJworZF90cnVuY2w9J2RlZmluZScKK2RfdHR5bmFtZV9yPSdkZWZpbmUnCitkX3R6bmFtZT0nZGVmaW5lJworZF91MzJhbGlnbj0nZGVmaW5lJworZF91YWxhcm09J2RlZmluZScKK2RfdW1hc2s9J2RlZmluZScKK2RfdW5hbWU9J2RlZmluZScKK2RfdW5pb25fc2VtdW49J3VuZGVmJworZF91bm9yZGVyZWQ9J3VuZGVmJworZF91bnNldGVudj0nZGVmaW5lJworZF91c2xlZXA9J2RlZmluZScKK2RfdXNsZWVwcHJvdG89J2RlZmluZScKK2RfdXN0YXQ9J2RlZmluZScKK2RfdmVuZG9yYXJjaD0nZGVmaW5lJworZF92ZW5kb3JiaW49J2RlZmluZScKK2RfdmVuZG9ybGliPSdkZWZpbmUnCitkX3ZlbmRvcnNjcmlwdD0nZGVmaW5lJworZF92Zm9yaz0ndW5kZWYnCitkX3ZvaWRfY2xvc2VkaXI9J3VuZGVmJworZF92b2lkc2lnPSdkZWZpbmUnCitkX3ZvaWR0dHk9JycKK2Rfdm9sYXRpbGU9J2RlZmluZScKK2RfdnByaW50Zj0nZGVmaW5lJworZF92c25wcmludGY9J2RlZmluZScKK2Rfd2FpdDQ9J2RlZmluZScKK2Rfd2FpdHBpZD0nZGVmaW5lJworZF93Y3NjbXA9J2RlZmluZScKK2Rfd2NzdG9tYnM9J2RlZmluZScKK2Rfd2NzeGZybT0nZGVmaW5lJworZF93Y3RvbWI9J2RlZmluZScKK2Rfd3JpdGV2PSdkZWZpbmUnCitkX3hlbml4PSd1bmRlZicKK2RhdGU9J2RhdGUnCitkYl9oYXNodHlwZT0ndV9pbnQzMl90JworZGJfcHJlZml4dHlwZT0nc2l6ZV90JworZGJfdmVyc2lvbl9tYWpvcj0nJworZGJfdmVyc2lvbl9taW5vcj0nJworZGJfdmVyc2lvbl9wYXRjaD0nJworZGlyZW50cnl0eXBlPSdzdHJ1Y3QgZGlyZW50JworZGxleHQ9J3NvJworZGxzcmM9J2RsX2Rsb3Blbi54cycKK2RvdWJsZWtpbmQ9JzMnCitkb3VibGVzaXplPSc4JworZHJhbmQwMT0nUGVybF9kcmFuZDQ4KCknCitkcmFuZDQ4X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NUJworZHRyYWNlPScnCitkeW5hbWljX2V4dD0nQiBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ3dkIERhdGEvRHVtcGVyIERldmVsL1BQUG9ydCBEZXZlbC9QZWVrIERpZ2VzdC9NRDUgRGlnZXN0L1NIQSBFbmNvZGUgRmNudGwgRmlsZS9Eb3NHbG9iIEZpbGUvR2xvYiBGaWx0ZXIvVXRpbC9DYWxsIEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vTGFuZ2luZm8gSU8gSVBDL1N5c1YgTGlzdC9VdGlsIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE5EQk1fRmlsZSBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBlcmxJTy9lbmNvZGluZyBQZXJsSU8vbW1hcCBQZXJsSU8vc2NhbGFyIFBlcmxJTy92aWEgU0RCTV9GaWxlIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUaWUvSGFzaC9OYW1lZENhcHR1cmUgVGltZS9IaVJlcyBUaW1lL1BpZWNlIFVuaWNvZGUvQ29sbGF0ZSBYUy9BUEl0ZXN0IFhTL1R5cGVtYXAgYXJ5YmFzZSBhdHRyaWJ1dGVzIG1ybyByZSB0aHJlYWRzIHRocmVhZHMvc2hhcmVkJworZWFnYWluPSdFQUdBSU4nCitlYmNkaWM9J3VuZGVmJworZWNobz0nZWNobycKK2VncmVwPSdlZ3JlcCcKK2VtYWNzPScnCitlbmRncmVudF9yX3Byb3RvPScwJworZW5kaG9zdGVudF9yX3Byb3RvPScwJworZW5kbmV0ZW50X3JfcHJvdG89JzAnCitlbmRwcm90b2VudF9yX3Byb3RvPScwJworZW5kcHdlbnRfcl9wcm90bz0nMCcKK2VuZHNlcnZlbnRfcl9wcm90bz0nMCcKK2V1bmljZWZpeD0nOicKK2V4ZV9leHQ9JycKK2V4cHI9J2V4cHInCitleHRlbnNpb25zPSdCIENvbXByZXNzL1Jhdy9CemlwMiBDb21wcmVzcy9SYXcvWmxpYiBDd2QgRGF0YS9EdW1wZXIgRGV2ZWwvUFBQb3J0IERldmVsL1BlZWsgRGlnZXN0L01ENSBEaWdlc3QvU0hBIEVuY29kZSBGY250bCBGaWxlL0Rvc0dsb2IgRmlsZS9HbG9iIEZpbHRlci9VdGlsL0NhbGwgSGFzaC9VdGlsIEhhc2gvVXRpbC9GaWVsZEhhc2ggSTE4Ti9MYW5naW5mbyBJTyBJUEMvU3lzViBMaXN0L1V0aWwgTUlNRS9CYXNlNjQgTWF0aC9CaWdJbnQvRmFzdENhbGMgTkRCTV9GaWxlIE9EQk1fRmlsZSBPcGNvZGUgUE9TSVggUGVybElPL2VuY29kaW5nIFBlcmxJTy9tbWFwIFBlcmxJTy9zY2FsYXIgUGVybElPL3ZpYSBTREJNX0ZpbGUgU29ja2V0IFN0b3JhYmxlIFN5cy9Ib3N0bmFtZSBTeXMvU3lzbG9nIFRpZS9IYXNoL05hbWVkQ2FwdHVyZSBUaW1lL0hpUmVzIFRpbWUvUGllY2UgVW5pY29kZS9Db2xsYXRlIFhTL0FQSXRlc3QgWFMvVHlwZW1hcCBhcnliYXNlIGF0dHJpYnV0ZXMgbXJvIHJlIHRocmVhZHMgdGhyZWFkcy9zaGFyZWQgQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29uZmlnL1BlcmwvViBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRHVtcHZhbHVlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9QYXRoIEZpbGUvVGVtcCBGaWxlQ2FjaGUgRmlsdGVyL1NpbXBsZSBHZXRvcHQvTG9uZyBIVFRQL1RpbnkgSTE4Ti9Db2xsYXRlIEkxOE4vTGFuZ1RhZ3MgSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSlNPTi9QUCBMb2NhbGUvQ29kZXMgTG9jYWxlL01ha2V0ZXh0IExvY2FsZS9NYWtldGV4dC9TaW1wbGUgTWF0aC9CaWdJbnQgTWF0aC9CaWdSYXQgTWF0aC9Db21wbGV4IE1lbW9pemUgTW9kdWxlL0NvcmVMaXN0IE1vZHVsZS9Mb2FkIE1vZHVsZS9Mb2FkL0NvbmRpdGlvbmFsIE1vZHVsZS9Mb2FkZWQgTW9kdWxlL01ldGFkYXRhIE5FWFQgTmV0L1BpbmcgUGFyYW1zL0NoZWNrIFBhcnNlL0NQQU4vTWV0YSBQZXJsL09TVHlwZSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTYWZlIFNlYXJjaC9EaWN0IFNlbGZMb2FkZXIgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0xvY2FsIFVuaWNvZGUvTm9ybWFsaXplIFhTTG9hZGVyIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgdmVyc2lvbicKK2V4dGVybl9DPSdleHRlcm4nCitleHRyYXM9JycKK2ZmbHVzaE5VTEw9J2RlZmluZScKK2ZmbHVzaGFsbD0ndW5kZWYnCitmaW5kPScnCitmaXJzdG1ha2VmaWxlPSdtYWtlZmlsZScKK2ZsZXg9JycKK2Zwb3NzaXplPScxNicKK2Zwb3N0eXBlPSdmcG9zX3QnCitmcmVldHlwZT0ndm9pZCcKK2Zyb209JzonCitmdWxsX2FyPSdhcicKK2Z1bGxfY3NoPSdjc2gnCitmdWxsX3NlZD0nc2VkJworZ2NjYW5zaXBlZGFudGljPScnCitnY2Nvc2FuZHZlcnM9JycKK2djY3ZlcnNpb249JzQuOS4yJworZ2V0Z3JlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldGdyZ2lkX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTQldSJworZ2V0Z3JuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnZXRob3N0YnlhZGRyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RzSVNCV1JFJworZ2V0aG9zdGJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUkUnCitnZXRob3N0ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1JFJworZ2V0bG9naW5fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQlcnCitnZXRuZXRieWFkZHJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfdUlTQldSRScKK2dldG5ldGJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUkUnCitnZXRuZXRlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUkUnCitnZXRwcm90b2J5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUicKK2dldHByb3RvYnludW1iZXJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfSVNCV1InCitnZXRwcm90b2VudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0cHdlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldHB3bmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2V0cHd1aWRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNCV1InCitnZXRzZXJ2YnluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NDU0JXUicKK2dldHNlcnZieXBvcnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfSUNTQldSJworZ2V0c2VydmVudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0c3BuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnaWRmb3JtYXQ9JyJ1IicKK2dpZHNpZ249JzEnCitnaWRzaXplPSc0JworZ2lkdHlwZT0nZ2lkX3QnCitnbGlicHRoPSdARVhFQ1BSRUZJWEAvc2hsaWIgIEBCQVNFTElCRElSQCBATElCRElSQCBATElCRElSQC8zODYgQEJBU0VMSUJESVJAMzg2IEBFWEVDUFJFRklYQC9jY3NAQkFTRUxJQkRJUkAgQEVYRUNQUkVGSVhAL3VjYmxpYiBARVhFQ1BSRUZJWEAvbG9jYWxAQkFTRUxJQkRJUkAgQEJBU0VMSUJESVJAIEBMSUJESVJAIEBFWEVDUFJFRklYQC9sb2NhbEBCQVNFTElCRElSQCAnCitnbWFrZT0nZ21ha2UnCitnbXRpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX1NfVFMnCitnbnVsaWJjX3ZlcnNpb249JzIuMjEnCitncmVwPSdncmVwJworZ3JvdXBjYXQ9J2NhdCAvZXRjL2dyb3VwJworZ3JvdXBzdHlwZT0nZ2lkX3QnCitnemlwPSdnemlwJworaF9mY250bD0nZmFsc2UnCitoX3N5c2ZpbGU9J3RydWUnCitoaW50PSdyZWNvbW1lbmRlZCcKK2hvc3RjYXQ9J2NhdCAvZXRjL2hvc3RzJworaG9zdGdlbmVyYXRlPScnCitob3N0b3NuYW1lPScnCitob3N0cGVybD0nJworaHRtbDFkaXI9JyAnCitodG1sMWRpcmV4cD0nJworaHRtbDNkaXI9JyAnCitodG1sM2RpcmV4cD0nJworaTE2c2l6ZT0nMicKK2kxNnR5cGU9J3Nob3J0JworaTMyc2l6ZT0nNCcKK2kzMnR5cGU9J2ludCcKK2k2NHNpemU9JzgnCitpNjR0eXBlPSdsb25nJworaThzaXplPScxJworaTh0eXBlPSdzaWduZWQgY2hhcicKK2lfYXJwYWluZXQ9J2RlZmluZScKK2lfYXNzZXJ0PSdkZWZpbmUnCitpX2JmZD0nZGVmaW5lJworaV9ic2Rpb2N0bD0nJworaV9jcnlwdD0nZGVmaW5lJworaV9kYj0ndW5kZWYnCitpX2RibT0nZGVmaW5lJworaV9kaXJlbnQ9J2RlZmluZScKK2lfZGxmY249J2RlZmluZScKK2lfZXhlY2luZm89J2RlZmluZScKK2lfZmNudGw9J3VuZGVmJworaV9mZW52PSdkZWZpbmUnCitpX2Zsb2F0PSdkZWZpbmUnCitpX2ZwPSd1bmRlZicKK2lfZnBfY2xhc3M9J3VuZGVmJworaV9nZGJtPSd1bmRlZicKK2lfZ2RibV9uZGJtPSd1bmRlZicKK2lfZ2RibW5kYm09J2RlZmluZScKK2lfZ3JwPSdkZWZpbmUnCitpX2llZWVmcD0ndW5kZWYnCitpX2ludHR5cGVzPSdkZWZpbmUnCitpX2xhbmdpbmZvPSdkZWZpbmUnCitpX2xpYnV0aWw9J3VuZGVmJworaV9saW1pdHM9J2RlZmluZScKK2lfbG9jYWxlPSdkZWZpbmUnCitpX21hY2hjdGhyPSd1bmRlZicKK2lfbWFsbG9jPSdkZWZpbmUnCitpX21hbGxvY21hbGxvYz0ndW5kZWYnCitpX21hdGg9J2RlZmluZScKK2lfbWVtb3J5PSd1bmRlZicKK2lfbW50ZW50PSdkZWZpbmUnCitpX25kYm09J3VuZGVmJworaV9uZXRkYj0nZGVmaW5lJworaV9uZXRlcnJubz0ndW5kZWYnCitpX25ldGluZXR0Y3A9J2RlZmluZScKK2lfbmlpbj0nZGVmaW5lJworaV9wb2xsPSdkZWZpbmUnCitpX3Byb3Q9J3VuZGVmJworaV9wdGhyZWFkPSdkZWZpbmUnCitpX3B3ZD0nZGVmaW5lJworaV9xdWFkbWF0aD0ndW5kZWYnCitpX3JwY3N2Y2RibT0ndW5kZWYnCitpX3NndHR5PSd1bmRlZicKK2lfc2hhZG93PSdkZWZpbmUnCitpX3NvY2tzPSd1bmRlZicKK2lfc3RkYXJnPSdkZWZpbmUnCitpX3N0ZGJvb2w9J2RlZmluZScKK2lfc3RkZGVmPSdkZWZpbmUnCitpX3N0ZGludD0nZGVmaW5lJworaV9zdGRsaWI9J2RlZmluZScKK2lfc3RyaW5nPSdkZWZpbmUnCitpX3N1bm1hdGg9J3VuZGVmJworaV9zeXNhY2Nlc3M9J3VuZGVmJworaV9zeXNkaXI9J2RlZmluZScKK2lfc3lzZmlsZT0nZGVmaW5lJworaV9zeXNmaWxpbz0ndW5kZWYnCitpX3N5c2luPSd1bmRlZicKK2lfc3lzaW9jdGw9J2RlZmluZScKK2lfc3lzbG9nPSdkZWZpbmUnCitpX3N5c21tYW49J2RlZmluZScKK2lfc3lzbW9kZT0ndW5kZWYnCitpX3N5c21vdW50PSdkZWZpbmUnCitpX3N5c25kaXI9J3VuZGVmJworaV9zeXNwYXJhbT0nZGVmaW5lJworaV9zeXNwb2xsPSdkZWZpbmUnCitpX3N5c3Jlc3JjPSdkZWZpbmUnCitpX3N5c3NlY3J0PSd1bmRlZicKK2lfc3lzc2VsY3Q9J2RlZmluZScKK2lfc3lzc29ja2lvPSd1bmRlZicKK2lfc3lzc3RhdD0nZGVmaW5lJworaV9zeXNzdGF0ZnM9J2RlZmluZScKK2lfc3lzc3RhdHZmcz0nZGVmaW5lJworaV9zeXN0aW1lPSdkZWZpbmUnCitpX3N5c3RpbWVrPSd1bmRlZicKK2lfc3lzdGltZXM9J2RlZmluZScKK2lfc3lzdHlwZXM9J2RlZmluZScKK2lfc3lzdWlvPSdkZWZpbmUnCitpX3N5c3VuPSdkZWZpbmUnCitpX3N5c3V0c25hbWU9J2RlZmluZScKK2lfc3lzdmZzPSdkZWZpbmUnCitpX3N5c3dhaXQ9J2RlZmluZScKK2lfdGVybWlvPSd1bmRlZicKK2lfdGVybWlvcz0nZGVmaW5lJworaV90aW1lPSdkZWZpbmUnCitpX3VuaXN0ZD0nZGVmaW5lJworaV91c3RhdD0nZGVmaW5lJworaV91dGltZT0nZGVmaW5lJworaV92YWx1ZXM9J2RlZmluZScKK2lfdmFyYXJncz0ndW5kZWYnCitpX3Zhcmhkcj0nc3RkYXJnLmgnCitpX3Zmb3JrPSd1bmRlZicKK2lnbm9yZV92ZXJzaW9uZWRfc29saWJzPSd5JworaW5jX3ZlcnNpb25fbGlzdD0nICcKK2luY192ZXJzaW9uX2xpc3RfaW5pdD0nMCcKK2luY3BhdGg9JycKK2luZXdzPScnCitpbml0aWFsaW5zdGFsbGxvY2F0aW9uPSdAVVNSQklOQCcKK2luc3RhbGxhcmNobGliPSdATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworaW5zdGFsbGJpbj0nQFVTUkJJTkAnCitpbnN0YWxsaHRtbDFkaXI9JycKK2luc3RhbGxodG1sM2Rpcj0nJworaW5zdGFsbG1hbjFkaXI9JycKK2luc3RhbGxtYW4zZGlyPScnCitpbnN0YWxscHJlZml4PSdARVhFQ1BSRUZJWEAnCitpbnN0YWxscHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitpbnN0YWxscHJpdmxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAnCitpbnN0YWxsc2NyaXB0PSdAVVNSQklOQCcKK2luc3RhbGxzaXRlYXJjaD0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitpbnN0YWxsc2l0ZWJpbj0nQFVTUkJJTkAnCitpbnN0YWxsc2l0ZWh0bWwxZGlyPScnCitpbnN0YWxsc2l0ZWh0bWwzZGlyPScnCitpbnN0YWxsc2l0ZWxpYj0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wJworaW5zdGFsbHNpdGVtYW4xZGlyPScnCitpbnN0YWxsc2l0ZW1hbjNkaXI9JycKK2luc3RhbGxzaXRlc2NyaXB0PSdAVVNSQklOQCcKK2luc3RhbGxzdHlsZT0nbGliL3BlcmwnCitpbnN0YWxsdXNyYmlucGVybD0nZGVmaW5lJworaW5zdGFsbHZlbmRvcmFyY2g9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitpbnN0YWxsdmVuZG9yYmluPSdAVVNSQklOQCcKK2luc3RhbGx2ZW5kb3JodG1sMWRpcj0nJworaW5zdGFsbHZlbmRvcmh0bWwzZGlyPScnCitpbnN0YWxsdmVuZG9ybGliPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMCcKK2luc3RhbGx2ZW5kb3JtYW4xZGlyPScnCitpbnN0YWxsdmVuZG9ybWFuM2Rpcj0nJworaW5zdGFsbHZlbmRvcnNjcmlwdD0nQFVTUkJJTkAnCitpbnRzaXplPSc0JworaXNzeW1saW5rPSd0ZXN0IC1oJworaXZkZm9ybWF0PScibGQiJworaXZzaXplPSc4JworaXZ0eXBlPSdsb25nJwora25vd25fZXh0ZW5zaW9ucz0nQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQiBCL0RlYnVnIENQQU4gQ1BBTi9NZXRhIENQQU4vTWV0YS9SZXF1aXJlbWVudHMgQ1BBTi9NZXRhL1lBTUwgQ2FycCBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ29uZmlnL1BlcmwvViBDd2QgREJfRmlsZSBEYXRhL0R1bXBlciBEZXZlbC9QUFBvcnQgRGV2ZWwvUGVlayBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRGlnZXN0L01ENSBEaWdlc3QvU0hBIER1bXB2YWx1ZSBFbmNvZGUgRW52IEVycm5vIEV4cG9ydGVyIEV4dFV0aWxzL0NCdWlsZGVyIEV4dFV0aWxzL0NvbW1hbmQgRXh0VXRpbHMvQ29uc3RhbnQgRXh0VXRpbHMvSW5zdGFsbCBFeHRVdGlscy9NYWtlTWFrZXIgRXh0VXRpbHMvTWFuaWZlc3QgRXh0VXRpbHMvTWluaXBlcmwgRXh0VXRpbHMvUGFyc2VYUyBGY250bCBGaWxlL0Rvc0dsb2IgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9HbG9iIEZpbGUvUGF0aCBGaWxlL1RlbXAgRmlsZUNhY2hlIEZpbHRlci9TaW1wbGUgRmlsdGVyL1V0aWwvQ2FsbCBHREJNX0ZpbGUgR2V0b3B0L0xvbmcgSFRUUC9UaW55IEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vQ29sbGF0ZSBJMThOL0xhbmdUYWdzIEkxOE4vTGFuZ2luZm8gSU8gSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSVBDL1N5c1YgSlNPTi9QUCBMaXN0L1V0aWwgTG9jYWxlL0NvZGVzIExvY2FsZS9NYWtldGV4dCBMb2NhbGUvTWFrZXRleHQvU2ltcGxlIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE1hdGgvQmlnUmF0IE1hdGgvQ29tcGxleCBNZW1vaXplIE1vZHVsZS9Db3JlTGlzdCBNb2R1bGUvTG9hZCBNb2R1bGUvTG9hZC9Db25kaXRpb25hbCBNb2R1bGUvTG9hZGVkIE1vZHVsZS9NZXRhZGF0YSBOREJNX0ZpbGUgTkVYVCBOZXQvUGluZyBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBhcmFtcy9DaGVjayBQYXJzZS9DUEFOL01ldGEgUGVybC9PU1R5cGUgUGVybElPL2VuY29kaW5nIFBlcmxJTy9tbWFwIFBlcmxJTy9zY2FsYXIgUGVybElPL3ZpYSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTREJNX0ZpbGUgU2FmZSBTZWFyY2gvRGljdCBTZWxmTG9hZGVyIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUZXJtL0FOU0lDb2xvciBUZXJtL0NhcCBUZXJtL0NvbXBsZXRlIFRlcm0vUmVhZExpbmUgVGVzdCBUZXN0L0hhcm5lc3MgVGVzdC9TaW1wbGUgVGV4dC9BYmJyZXYgVGV4dC9CYWxhbmNlZCBUZXh0L1BhcnNlV29yZHMgVGV4dC9UYWJzIFRocmVhZC9RdWV1ZSBUaHJlYWQvU2VtYXBob3JlIFRpZS9GaWxlIFRpZS9IYXNoL05hbWVkQ2FwdHVyZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0hpUmVzIFRpbWUvTG9jYWwgVGltZS9QaWVjZSBVbmljb2RlL0NvbGxhdGUgVW5pY29kZS9Ob3JtYWxpemUgVk1TL0RDTHN5bSBWTVMvRmlsZXNwZWMgVk1TL1N0ZGlvIFdpbjMyIFdpbjMyQVBJL0ZpbGUgV2luMzJDT1JFIFhTL0FQSXRlc3QgWFMvVHlwZW1hcCBYU0xvYWRlciBhcnliYXNlIGF0dHJpYnV0ZXMgYXV0b2RpZSBhdXRvdXNlIGJhc2UgYmlnbnVtIGNvbnN0YW50IGVuY29kaW5nL3dhcm5pbmdzIGV4cGVyaW1lbnRhbCBpZiBsaWIgbGlibmV0IG1ybyBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgcmUgdGhyZWFkcyB0aHJlYWRzL3NoYXJlZCB2ZXJzaW9uICcKK2tzaD0nJworbGQ9J2djYycKK2xkX2Nhbl9zY3JpcHQ9J2RlZmluZScKK2xkZGxmbGFncz0nLXNoYXJlZCAtTzInCitsZGZsYWdzPScnCitsZGZsYWdzX3VzZWxhcmdlZmlsZXM9JycKK2xkbGlicHRobmFtZT0nTERfTElCUkFSWV9QQVRIJworbGVzcz0nbGVzcycKK2xpYl9leHQ9Jy5hJworbGliYz0nbGliYy0yLjIxLnNvJworbGlicGVybD0nbGlicGVybC5zbycKK2xpYnB0aD0nQExJQkRJUkAgQEJBU0VMSUJESVJAJworbGlicz0nLWxwdGhyZWFkIC1sbnNsIC1sZ2RibSAtbGRiIC1sZGwgLWxtIC1sY3J5cHQgLWx1dGlsIC1sYyAtbGdkYm1fY29tcGF0JworbGlic2RpcnM9JyBATElCRElSQCcKK2xpYnNmaWxlcz0nIGxpYnB0aHJlYWQuc28gbGlibnNsLnNvIGxpYmdkYm0uc28gbGliZGIuc28gbGliZGwuc28gbGlibS5zbyBsaWJjcnlwdC5zbyBsaWJ1dGlsLnNvIGxpYmMuc28gbGliZ2RibV9jb21wYXQuc28nCitsaWJzZm91bmQ9JyBATElCRElSQC9saWJwdGhyZWFkLnNvIEBMSUJESVJAL2xpYm5zbC5zbyBATElCRElSQC9saWJnZGJtLnNvIEBMSUJESVJAL2xpYmRiLnNvIEBMSUJESVJAL2xpYmRsLnNvIEBMSUJESVJAL2xpYm0uc28gQExJQkRJUkAvbGliY3J5cHQuc28gQExJQkRJUkAvbGlidXRpbC5zbyBATElCRElSQC9saWJjLnNvIEBMSUJESVJAL2xpYmdkYm1fY29tcGF0LnNvJworbGlic3BhdGg9JyBATElCRElSQCBAQkFTRUxJQkRJUkAnCitsaWJzd2FudGVkPSdjbCBwdGhyZWFkIHNvY2tldCBpbmV0IG5zbCBubSBnZGJtIGRibSBkYiBtYWxsb2MgZGwgbGQgc3VuIG0gY3J5cHQgc2VjIHV0aWwgYyBjcG9zaXggcG9zaXggdWNiIEJTRCBnZGJtX2NvbXBhdCcKK2xpYnN3YW50ZWRfdXNlbGFyZ2VmaWxlcz0nJworbGluZT0nJworbGludD0nJworbGtmbGFncz0nJworbG49J2xuJworbG5zPScvYmluL2xuIC1zJworbG9jYWx0aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19TX1RTJworbG9jaW5jcHRoPSdARVhFQ1BSRUZJWEAvbG9jYWwvaW5jbHVkZSAvb3B0L2xvY2FsL2luY2x1ZGUgQEVYRUNQUkVGSVhAL2dudS9pbmNsdWRlIC9vcHQvZ251L2luY2x1ZGUgQEVYRUNQUkVGSVhAL0dOVS9pbmNsdWRlIC9vcHQvR05VL2luY2x1ZGUnCitsb2NsaWJwdGg9J0BFWEVDUFJFRklYQC9sb2NhbEBCQVNFTElCRElSQCAvb3B0L2xvY2FsQEJBU0VMSUJESVJAIEBFWEVDUFJFRklYQC9nbnVAQkFTRUxJQkRJUkAgL29wdC9nbnVAQkFTRUxJQkRJUkAgQEVYRUNQUkVGSVhAL0dOVUBCQVNFTElCRElSQCAvb3B0L0dOVUBCQVNFTElCRElSQCcKK2xvbmdkYmxraW5kPSczJworbG9uZ2RibHNpemU9JzE2JworbG9uZ2xvbmdzaXplPSc4JworbG9uZ3NpemU9JzgnCitscD0nJworbHByPScnCitscz0nbHMnCitsc2Vla3NpemU9JzgnCitsc2Vla3R5cGU9J29mZl90JworbWFpbD0nJworbWFpbHg9JycKK21ha2U9J21ha2UnCittYWtlX3NldF9tYWtlPScjJworbWFsbG9jb2JqPScnCittYWxsb2NzcmM9JycKK21hbGxvY3R5cGU9J3ZvaWQgKicKK21hbjFkaXI9JyAnCittYW4xZGlyZXhwPScnCittYW4xZXh0PScwJworbWFuM2Rpcj0nICcKK21hbjNkaXJleHA9JycKK21hbjNleHQ9JzAnCittaXBzX3R5cGU9JycKK21pc3RydXN0bm09JycKK21rZGlyPSdta2RpcicKK21tYXB0eXBlPSd2b2lkIConCittb2RldHlwZT0nbW9kZV90JworbW9yZT0nbW9yZScKK211bHRpYXJjaD0ndW5kZWYnCittdj0nJworbXlhcmNobmFtZT0nQEFSQ0hAJworbXlkb21haW49Jy5sb2NhbGRvbWFpbicKK215aG9zdG5hbWU9J2xvY2FsaG9zdCcKK215dW5hbWU9J2xpbnV4IHFlbXV4ODYtNjQgMy4xOS41LXlvY3RvLXN0YW5kYXJkICMxIHNtcCBwcmVlbXB0IHR1ZSBqdW4gMTYgMDA6Mjg6MTcgcGR0IDIwMTUgeDg2XzY0IGdudWxpbnV4ICcKK249Jy1uJworbmVlZF92YV9jb3B5PSdkZWZpbmUnCituZXRkYl9obGVuX3R5cGU9J3NpemVfdCcKK25ldGRiX2hvc3RfdHlwZT0nY2hhciAqJworbmV0ZGJfbmFtZV90eXBlPSdjb25zdCBjaGFyIConCituZXRkYl9uZXRfdHlwZT0naW5fYWRkcl90Jworbm09J25tJworbm1fb3B0PScnCitubV9zb19vcHQ9Jy0tZHluYW1pYycKK25vbnhzX2V4dD0nQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29uZmlnL1BlcmwvViBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRHVtcHZhbHVlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9QYXRoIEZpbGUvVGVtcCBGaWxlQ2FjaGUgRmlsdGVyL1NpbXBsZSBHZXRvcHQvTG9uZyBIVFRQL1RpbnkgSTE4Ti9Db2xsYXRlIEkxOE4vTGFuZ1RhZ3MgSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSlNPTi9QUCBMb2NhbGUvQ29kZXMgTG9jYWxlL01ha2V0ZXh0IExvY2FsZS9NYWtldGV4dC9TaW1wbGUgTWF0aC9CaWdJbnQgTWF0aC9CaWdSYXQgTWF0aC9Db21wbGV4IE1lbW9pemUgTW9kdWxlL0NvcmVMaXN0IE1vZHVsZS9Mb2FkIE1vZHVsZS9Mb2FkL0NvbmRpdGlvbmFsIE1vZHVsZS9Mb2FkZWQgTW9kdWxlL01ldGFkYXRhIE5FWFQgTmV0L1BpbmcgUGFyYW1zL0NoZWNrIFBhcnNlL0NQQU4vTWV0YSBQZXJsL09TVHlwZSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTYWZlIFNlYXJjaC9EaWN0IFNlbGZMb2FkZXIgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0xvY2FsIFVuaWNvZGUvTm9ybWFsaXplIFhTTG9hZGVyIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgdmVyc2lvbicKK25yb2ZmPSducm9mZicKK252RVVmb3JtYXQ9JyJFIicKK252RlVmb3JtYXQ9JyJGIicKK252R1Vmb3JtYXQ9JyJHIicKK252X292ZXJmbG93c19pbnRlZ2Vyc19hdD0nMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMi4wKjIuMCoyLjAqMi4wKjIuMCcKK252X3ByZXNlcnZlc191dl9iaXRzPSc1MycKK252ZWZvcm1hdD0nImUiJworbnZmZm9ybWF0PSciZiInCitudmdmb3JtYXQ9JyJnIicKK252c2l6ZT0nOCcKK252dHlwZT0nZG91YmxlJworb19ub25ibG9jaz0nT19OT05CTE9DSycKK29ial9leHQ9Jy5vJworb2xkX3B0aHJlYWRfY3JlYXRlX2pvaW5hYmxlPScnCitvcHRpbWl6ZT0nLU8yJworb3JkZXJsaWI9J2ZhbHNlJworb3NuYW1lPSdsaW51eCcKK29zdmVycz0nMy4xOS41LXlvY3RvLXN0YW5kYXJkJworb3RoZXJsaWJkaXJzPSdATElCRElSQC9wZXJsLzUuMjIuMCcKK3BhY2thZ2U9J3BlcmwnCitwYWdlcj0nL3Vzci9iaW4vbGVzcyAtaXNyJworcGFzc2NhdD0nY2F0IC9ldGMvcGFzc3dkJworcGF0Y2hsZXZlbD0nMjInCitwYXRoX3NlcD0nOicKK3Blcmw1PSdAVVNSQklOQC9wZXJsJworcGVybD0ncGVybCcKK3BlcmxfcGF0Y2hsZXZlbD0nJworcGVybF9zdGF0aWNfaW5saW5lPSdzdGF0aWMgX19pbmxpbmVfXycKK3BlcmxhZG1pbj0ncm9vdEBsb2NhbGhvc3QnCitwZXJsbGlicz0nLWxwdGhyZWFkIC1sbnNsIC1sZGwgLWxtIC1sY3J5cHQgLWx1dGlsIC1sYycKK3BlcmxwYXRoPSdAVVNSQklOQC9wZXJsJworcGc9J3BnJworcGhvc3RuYW1lPScnCitwaWR0eXBlPSdwaWRfdCcKK3BsaWJwdGg9J0BMSUJESVJAIEBCQVNFTElCRElSQCcKK3BtYWtlPScnCitwcj0nJworcHJlZml4PSdARVhFQ1BSRUZJWEAnCitwcmVmaXhleHA9J0BFWEVDUFJFRklYQCcKK3ByaXZsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworcHJpdmxpYmV4cD0nQExJQkRJUkAvcGVybC81LjIyLjAnCitwcm9jc2VsZmV4ZT0nIi9wcm9jL3NlbGYvZXhlIicKK3Byb3RvdHlwZT0nZGVmaW5lJworcHRyc2l6ZT0nOCcKK3F1YWRraW5kPScyJworcXVhZHR5cGU9J2xvbmcnCityYW5kYml0cz0nNDgnCityYW5kZnVuYz0nUGVybF9kcmFuZDQ4JworcmFuZG9tX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1N0JworcmFuZHNlZWR0eXBlPSdVMzInCityYW5saWI9JzonCityZF9ub2RhdGE9Jy0xJworcmVhZGRpcjY0X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTUicKK3JlYWRkaXJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNSJworcmV2aXNpb249JzUnCitybT0ncm0nCitybV90cnk9Jy9iaW4vcm0gLWYgdHJ5IHRyeSBhLm91dCAub3V0IHRyeS5bY2hvXSB0cnkuLm8gY29yZSBjb3JlLnRyeSogdHJ5LmNvcmUqJworcm1haWw9JycKK3J1bj0nJworcnVubm09J2ZhbHNlJworc0dNVElNRV9tYXg9JzY3NzY4MDM2MTkxNjc2Nzk5Jworc0dNVElNRV9taW49Jy02MjE2NzIxOTIwMCcKK3NMT0NBTFRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NMT0NBTFRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzUFJJRVVsZGJsPSciTEUiJworc1BSSUZVbGRibD0nIkxGIicKK3NQUklHVWxkYmw9JyJMRyInCitzUFJJWFU2ND0nImxYIicKK3NQUklkNjQ9JyJsZCInCitzUFJJZWxkYmw9JyJMZSInCitzUFJJZmxkYmw9JyJMZiInCitzUFJJZ2xkYmw9JyJMZyInCitzUFJJaTY0PScibGkiJworc1BSSW82ND0nImxvIicKK3NQUkl1NjQ9JyJsdSInCitzUFJJeDY0PScibHgiJworc1NDTmZsZGJsPSciTGYiJworc2NoZWRfeWllbGQ9J3NjaGVkX3lpZWxkKCknCitzY3JpcHRkaXI9J0BVU1JCSU5AJworc2NyaXB0ZGlyZXhwPSdAVVNSQklOQCcKK3NlZD0nc2VkJworc2VlZGZ1bmM9J1BlcmxfZHJhbmQ0OF9pbml0Jworc2VsZWN0bWluYml0cz0nNjQnCitzZWxlY3R0eXBlPSdmZF9zZXQgKicKK3NlbmRtYWlsPScnCitzZXRncmVudF9yX3Byb3RvPScwJworc2V0aG9zdGVudF9yX3Byb3RvPScwJworc2V0bG9jYWxlX3JfcHJvdG89JzAnCitzZXRuZXRlbnRfcl9wcm90bz0nMCcKK3NldHByb3RvZW50X3JfcHJvdG89JzAnCitzZXRwd2VudF9yX3Byb3RvPScwJworc2V0c2VydmVudF9yX3Byb3RvPScwJworc2g9Jy9iaW4vc2gnCitzaGFyPScnCitzaGFycGJhbmc9JyMhJworc2htYXR0eXBlPSd2b2lkIConCitzaG9ydHNpemU9JzInCitzaHJwZW52PScnCitzaHNoYXJwPSd0cnVlJworc2lnX2NvdW50PSc2NScKK3NpZ19uYW1lPSdaRVJPIEhVUCBJTlQgUVVJVCBJTEwgVFJBUCBBQlJUIEJVUyBGUEUgS0lMTCBVU1IxIFNFR1YgVVNSMiBQSVBFIEFMUk0gVEVSTSBTVEtGTFQgQ0hMRCBDT05UIFNUT1AgVFNUUCBUVElOIFRUT1UgVVJHIFhDUFUgWEZTWiBWVEFMUk0gUFJPRiBXSU5DSCBJTyBQV1IgU1lTIE5VTTMyIE5VTTMzIFJUTUlOIE5VTTM1IE5VTTM2IE5VTTM3IE5VTTM4IE5VTTM5IE5VTTQwIE5VTTQxIE5VTTQyIE5VTTQzIE5VTTQ0IE5VTTQ1IE5VTTQ2IE5VTTQ3IE5VTTQ4IE5VTTQ5IE5VTTUwIE5VTTUxIE5VTTUyIE5VTTUzIE5VTTU0IE5VTTU1IE5VTTU2IE5VTTU3IE5VTTU4IE5VTTU5IE5VTTYwIE5VTTYxIE5VTTYyIE5VTTYzIFJUTUFYIElPVCBDTEQgUE9MTCBVTlVTRUQgJworc2lnX25hbWVfaW5pdD0nIlpFUk8iLCAiSFVQIiwgIklOVCIsICJRVUlUIiwgIklMTCIsICJUUkFQIiwgIkFCUlQiLCAiQlVTIiwgIkZQRSIsICJLSUxMIiwgIlVTUjEiLCAiU0VHViIsICJVU1IyIiwgIlBJUEUiLCAiQUxSTSIsICJURVJNIiwgIlNUS0ZMVCIsICJDSExEIiwgIkNPTlQiLCAiU1RPUCIsICJUU1RQIiwgIlRUSU4iLCAiVFRPVSIsICJVUkciLCAiWENQVSIsICJYRlNaIiwgIlZUQUxSTSIsICJQUk9GIiwgIldJTkNIIiwgIklPIiwgIlBXUiIsICJTWVMiLCAiTlVNMzIiLCAiTlVNMzMiLCAiUlRNSU4iLCAiTlVNMzUiLCAiTlVNMzYiLCAiTlVNMzciLCAiTlVNMzgiLCAiTlVNMzkiLCAiTlVNNDAiLCAiTlVNNDEiLCAiTlVNNDIiLCAiTlVNNDMiLCAiTlVNNDQiLCAiTlVNNDUiLCAiTlVNNDYiLCAiTlVNNDciLCAiTlVNNDgiLCAiTlVNNDkiLCAiTlVNNTAiLCAiTlVNNTEiLCAiTlVNNTIiLCAiTlVNNTMiLCAiTlVNNTQiLCAiTlVNNTUiLCAiTlVNNTYiLCAiTlVNNTciLCAiTlVNNTgiLCAiTlVNNTkiLCAiTlVNNjAiLCAiTlVNNjEiLCAiTlVNNjIiLCAiTlVNNjMiLCAiUlRNQVgiLCAiSU9UIiwgIkNMRCIsICJQT0xMIiwgIlVOVVNFRCIsIDAnCitzaWdfbnVtPScwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDM4IDM5IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDQ4IDQ5IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzIDY0IDYgMTcgMjkgMzEgJworc2lnX251bV9pbml0PScwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNiwgMTcsIDI5LCAzMSwgMCcKK3NpZ19zaXplPSc2OScKK3NpZ25hbF90PSd2b2lkJworc2l0ZWFyY2g9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworc2l0ZWFyY2hleHA9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworc2l0ZWJpbj0nQFVTUkJJTkAnCitzaXRlYmluZXhwPSdAVVNSQklOQCcKK3NpdGVodG1sMWRpcj0nJworc2l0ZWh0bWwxZGlyZXhwPScnCitzaXRlaHRtbDNkaXI9JycKK3NpdGVodG1sM2RpcmV4cD0nJworc2l0ZWxpYj0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wJworc2l0ZWxpYl9zdGVtPSdATElCRElSQC9wZXJsL3NpdGVfcGVybCcKK3NpdGVsaWJleHA9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMCcKK3NpdGVtYW4xZGlyPScnCitzaXRlbWFuMWRpcmV4cD0nJworc2l0ZW1hbjNkaXI9JycKK3NpdGVtYW4zZGlyZXhwPScnCitzaXRlcHJlZml4PSdARVhFQ1BSRUZJWEAnCitzaXRlcHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitzaXRlc2NyaXB0PSdAVVNSQklOQCcKK3NpdGVzY3JpcHRleHA9J0BVU1JCSU5AJworc2l6ZXNpemU9JzgnCitzaXpldHlwZT0nc2l6ZV90Jworc2xlZXA9JycKK3NtYWlsPScnCitzbz0nc28nCitzb2NrZXRoZHI9JycKK3NvY2tldGxpYj0nJworc29ja3NpemV0eXBlPSdzb2NrbGVuX3QnCitzb3J0PSdzb3J0Jworc3BhY2thZ2U9J1Blcmw1Jworc3BpdHNoZWxsPSdjYXQnCitzcmFuZDQ4X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0xTJworc3JhbmRvbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UUycKK3NyYz0nLicKK3NzaXpldHlwZT0nc3NpemVfdCcKK3N0X2lub19zaWduPScxJworc3RfaW5vX3NpemU9JzgnCitzdGFydHBlcmw9JyMhQFVTUkJJTkAvcGVybCcKK3N0YXJ0c2g9JyMhL2Jpbi9zaCcKK3N0YXRpY19leHQ9JyAnCitzdGRjaGFyPSdjaGFyJworc3RkaW9fYmFzZT0nKChmcCktPl9JT19yZWFkX2Jhc2UpJworc3RkaW9fYnVmc2l6PScoKGZwKS0+X0lPX3JlYWRfZW5kIC0gKGZwKS0+X0lPX3JlYWRfYmFzZSknCitzdGRpb19jbnQ9JygoZnApLT5fSU9fcmVhZF9lbmQgLSAoZnApLT5fSU9fcmVhZF9wdHIpJworc3RkaW9fZmlsYnVmPScnCitzdGRpb19wdHI9JygoZnApLT5fSU9fcmVhZF9wdHIpJworc3RkaW9fc3RyZWFtX2FycmF5PScnCitzdHJlcnJvcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9JQlcnCitzdHJpbmdzPSdASU5DTFVERURJUkAvc3RyaW5nLmgnCitzdWJtaXQ9JycKK3N1YnZlcnNpb249JzAnCitzeXNtYW49J0BFWEVDUFJFRklYQC9zaGFyZS9tYW4vbWFuMScKK3N5c3Jvb3Q9JycKK3RhaWw9JycKK3Rhcj0nJwordGFyZ2V0YXJjaD0nJwordGFyZ2V0ZGlyPScnCit0YXJnZXRlbnY9JycKK3RhcmdldGhvc3Q9JycKK3RhcmdldG1rZGlyPScnCit0YXJnZXRwb3J0PScnCit0YXJnZXRzaD0nL2Jpbi9zaCcKK3RibD0nJwordGVlPScnCit0ZXN0PSd0ZXN0JwordGltZWluY2w9J0BJTkNMVURFRElSQC9zeXMvdGltZS5oIEBJTkNMVURFRElSQC90aW1lLmggJwordGltZXR5cGU9J3RpbWVfdCcKK3RtcG5hbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9CJwordG89JzonCit0b3VjaD0ndG91Y2gnCit0cj0ndHInCit0cm5sPSdcbicKK3Ryb2ZmPScnCit0dHluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0lCVycKK3UxNnNpemU9JzInCit1MTZ0eXBlPSd1bnNpZ25lZCBzaG9ydCcKK3UzMnNpemU9JzQnCit1MzJ0eXBlPSd1bnNpZ25lZCBpbnQnCit1NjRzaXplPSc4JwordTY0dHlwZT0ndW5zaWduZWQgbG9uZycKK3U4c2l6ZT0nMScKK3U4dHlwZT0ndW5zaWduZWQgY2hhcicKK3VpZGZvcm1hdD0nInUiJwordWlkc2lnbj0nMScKK3VpZHNpemU9JzQnCit1aWR0eXBlPSd1aWRfdCcKK3VuYW1lPSd1bmFtZScKK3VuaXE9J3VuaXEnCit1cXVhZHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1c2U1MDA1dGhyZWFkcz0ndW5kZWYnCit1c2U2NGJpdGFsbD0nZGVmaW5lJwordXNlNjRiaXRpbnQ9J2RlZmluZScKK3VzZWNiYWNrdHJhY2U9J3VuZGVmJwordXNlY3Jvc3Njb21waWxlPSdkZWZpbmUnCit1c2VkZXZlbD0ndW5kZWYnCit1c2VkbD0nZGVmaW5lJwordXNlZHRyYWNlPSd1bmRlZicKK3VzZWZhc3RzdGRpbz0ndW5kZWYnCit1c2VpdGhyZWFkcz0nZGVmaW5lJwordXNla2VybnByb2NwYXRobmFtZT0ndW5kZWYnCit1c2VsYXJnZWZpbGVzPSdkZWZpbmUnCit1c2Vsb25nZG91YmxlPSd1bmRlZicKK3VzZW1hbGxvY3dyYXA9J2RlZmluZScKK3VzZW1vcmViaXRzPSd1bmRlZicKK3VzZW11bHRpcGxpY2l0eT0nZGVmaW5lJwordXNlbXltYWxsb2M9J24nCit1c2VubT0nZmFsc2UnCit1c2Vuc2dldGV4ZWN1dGFibGVwYXRoPSd1bmRlZicKK3VzZW9wY29kZT0ndHJ1ZScKK3VzZXBlcmxpbz0nZGVmaW5lJwordXNlcG9zaXg9J3RydWUnCit1c2VxdWFkbWF0aD0ndW5kZWYnCit1c2VyZWVudHJhbnQ9J3VuZGVmJwordXNlcmVsb2NhdGFibGVpbmM9J3VuZGVmJwordXNlc2hycGxpYj0ndHJ1ZScKK3VzZXNpdGVjdXN0b21pemU9J3VuZGVmJwordXNlc29ja3M9J3VuZGVmJwordXNldGhyZWFkcz0nZGVmaW5lJwordXNldmVuZG9ycHJlZml4PSdkZWZpbmUnCit1c2V2ZXJzaW9uZWRhcmNobmFtZT0ndW5kZWYnCit1c2V2Zm9yaz0nZmFsc2UnCit1c3JpbmM9J0BJTkNMVURFRElSQCcKK3V1bmFtZT0nJwordXZYVWZvcm1hdD0nImxYIicKK3V2b2Zvcm1hdD0nImxvIicKK3V2c2l6ZT0nOCcKK3V2dHlwZT0ndW5zaWduZWQgbG9uZycKK3V2dWZvcm1hdD0nImx1IicKK3V2eGZvcm1hdD0nImx4IicKK3ZhcHJvdG89J2RlZmluZScKK3ZlbmRvcmFyY2g9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCit2ZW5kb3JhcmNoZXhwPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJwordmVuZG9yYmluPSdAVVNSQklOQCcKK3ZlbmRvcmJpbmV4cD0nQFVTUkJJTkAnCit2ZW5kb3JodG1sMWRpcj0nICcKK3ZlbmRvcmh0bWwxZGlyZXhwPScnCit2ZW5kb3JodG1sM2Rpcj0nICcKK3ZlbmRvcmh0bWwzZGlyZXhwPScnCit2ZW5kb3JsaWI9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wJwordmVuZG9ybGliX3N0ZW09J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwnCit2ZW5kb3JsaWJleHA9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wJwordmVuZG9ybWFuMWRpcj0nICcKK3ZlbmRvcm1hbjFkaXJleHA9JycKK3ZlbmRvcm1hbjNkaXI9JyAnCit2ZW5kb3JtYW4zZGlyZXhwPScnCit2ZW5kb3JwcmVmaXg9J0BFWEVDUFJFRklYQCcKK3ZlbmRvcnByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJwordmVuZG9yc2NyaXB0PSdAVVNSQklOQCcKK3ZlbmRvcnNjcmlwdGV4cD0nQFVTUkJJTkAnCit2ZXJzaW9uPSc1LjIyLjAnCit2ZXJzaW9uX3BhdGNobGV2ZWxfc3RyaW5nPSd2ZXJzaW9uIDIyIHN1YnZlcnNpb24gMCcKK3ZlcnNpb25vbmx5PSd1bmRlZicKK3ZpPScnCit4bGlicHRoPSdATElCRElSQC8zODYgQEJBU0VMSUJESVJAMzg2JworeWFjYz0neWFjYycKK3lhY2NmbGFncz0nJworemNhdD0nJworemlwPSd6aXAnCitQRVJMX1JFVklTSU9OPTUKK1BFUkxfVkVSU0lPTj0yMgorUEVSTF9TVUJWRVJTSU9OPTAKK1BFUkxfQVBJX1JFVklTSU9OPTUKK1BFUkxfQVBJX1ZFUlNJT049MjIKK1BFUkxfQVBJX1NVQlZFUlNJT049MAorUEVSTF9QQVRDSExFVkVMPScnCitQRVJMX0NPTkZJR19TSD10cnVlCis6IFZhcmlhYmxlcyBwcm9wYWdhdGVkIGZyb20gcHJldmlvdXMgY29uZmlnLnNoIGZpbGUuCitsaWJkYl9uZWVkc19wdGhyZWFkPSdOJworCisjIGZvciBUaW1lLUhpUmVzCitkX2Nsb2NrX25hbm9zbGVlcD0nZGVmaW5lJworZF9jbG9ja19nZXR0aW1lPSdkZWZpbmUnCitkX2Nsb2NrX2dldHJlcz0nZGVmaW5lJworZF9jbG9jaz0nZGVmaW5lJworZF9uYW5vc2xlZXA9J2RlZmluZScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTlhMGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyCkBAIC0wLDAgKzEsMzggQEAKK2FsaWduYnl0ZXM9JzQnCitjZl90aW1lPSdUaHUgRGVjIDIzIDAzOjU3OjUxIFVUQyAyMDEwJworY3Bwc3ltYm9scz0nX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgX0dOVV9TT1VSQ0U9MSBfTEFSR0VGSUxFNjRfU09VUkNFPTEgX0xBUkdFRklMRV9TT1VSQ0U9MSBfUE9TSVhfQ19TT1VSQ0U9MjAwODA5TCBfUE9TSVhfU09VUkNFPTEgX1JFRU5UUkFOVD0xIF9YT1BFTl9TT1VSQ0U9NzAwIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSBfX0JJR0dFU1RfQUxJR05NRU5UX189MTYgX19DSEFSMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fQ0hBUjMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fQ0hBUl9CSVRfXz04IF9fREJMX0RFTk9STV9NSU5fXz0oKGRvdWJsZSk0Ljk0MDY1NjQ1ODQxMjQ2NTQ0MTc3ZS0zMjRMKSBfX0RCTF9ESUdfXz0xNSBfX0RCTF9FUFNJTE9OX189KChkb3VibGUpMi4yMjA0NDYwNDkyNTAzMTMwODA4NWUtMTZMKSBfX0RCTF9IQVNfREVOT1JNX189MSBfX0RCTF9IQVNfSU5GSU5JVFlfXz0xIF9fREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fREJMX01BTlRfRElHX189NTMgX19EQkxfTUFYXzEwX0VYUF9fPTMwOCBfX0RCTF9NQVhfRVhQX189MTAyNCBfX0RCTF9NQVhfXz0oKGRvdWJsZSkxLjc5NzY5MzEzNDg2MjMxNTcwODE1ZSszMDhMKSBfX0RCTF9NSU5fMTBfRVhQX189KC0zMDcpIF9fREJMX01JTl9FWFBfXz0oLTEwMjEpIF9fREJMX01JTl9fPSgoZG91YmxlKTIuMjI1MDczODU4NTA3MjAxMzgzMDllLTMwOEwpIF9fREVDMTI4X0VQU0lMT05fXz0xRS0zM0RMIF9fREVDMTI4X01BTlRfRElHX189MzQgX19ERUMxMjhfTUFYX0VYUF9fPTYxNDUgX19ERUMxMjhfTUFYX189OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFNjE0NERMIF9fREVDMTI4X01JTl9FWFBfXz0oLTYxNDIpIF9fREVDMTI4X01JTl9fPTFFLTYxNDNETCBfX0RFQzEyOF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDNETCBfX0RFQzMyX0VQU0lMT05fXz0xRS02REYgX19ERUMzMl9NQU5UX0RJR19fPTcgX19ERUMzMl9NQVhfRVhQX189OTcgX19ERUMzMl9NQVhfXz05Ljk5OTk5OUU5NkRGIF9fREVDMzJfTUlOX0VYUF9fPSgtOTQpIF9fREVDMzJfTUlOX189MUUtOTVERiBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMUUtOTVERiBfX0RFQzY0X0VQU0lMT05fXz0xRS0xNUREIF9fREVDNjRfTUFOVF9ESUdfXz0xNiBfX0RFQzY0X01BWF9FWFBfXz0zODUgX19ERUM2NF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OUUzODRERCBfX0RFQzY0X01JTl9FWFBfXz0oLTM4MikgX19ERUM2NF9NSU5fXz0xRS0zODNERCBfX0RFQzY0X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzREQgX19ERUNJTUFMX0JJRF9GT1JNQVRfXz0xIF9fREVDSU1BTF9ESUdfXz0yMSBfX0RFQ19FVkFMX01FVEhPRF9fPTIgX19FTEZfXz0xIF9fRklOSVRFX01BVEhfT05MWV9fPTAgX19GTFRfREVOT1JNX01JTl9fPTEuNDAxMjk4NDY0MzI0ODE3MDcwOTJlLTQ1RiBfX0ZMVF9ESUdfXz02IF9fRkxUX0VQU0lMT05fXz0xLjE5MjA5Mjg5NTUwNzgxMjUwMDAwZS03RiBfX0ZMVF9FVkFMX01FVEhPRF9fPTIgX19GTFRfSEFTX0RFTk9STV9fPTEgX19GTFRfSEFTX0lORklOSVRZX189MSBfX0ZMVF9IQVNfUVVJRVRfTkFOX189MSBfX0ZMVF9NQU5UX0RJR19fPTI0IF9fRkxUX01BWF8xMF9FWFBfXz0zOCBfX0ZMVF9NQVhfRVhQX189MTI4IF9fRkxUX01BWF9fPTMuNDAyODIzNDY2Mzg1Mjg4NTk4MTJlKzM4RiBfX0ZMVF9NSU5fMTBfRVhQX189KC0zNykgX19GTFRfTUlOX0VYUF9fPSgtMTI1KSBfX0ZMVF9NSU5fXz0xLjE3NTQ5NDM1MDgyMjI4NzUwNzk3ZS0zOEYgX19GTFRfUkFESVhfXz0yIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzE9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8yPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfND0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzg9MSBfX0dMSUJDX01JTk9SX189MTIgX19HTElCQ19fPTIgX19HTlVDX0dOVV9JTkxJTkVfXz0xIF9fR05VQ19NSU5PUl9fPTUgX19HTlVDX1BBVENITEVWRUxfXz0xIF9fR05VQ19fPTQgX19HTlVfTElCUkFSWV9fPTYgX19HWFhfQUJJX1ZFUlNJT049MTAwMiBfX0lOVDE2X0MoYyk9YyBfX0lOVDE2X01BWF9fPTMyNzY3IF9fSU5UMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlQzMl9DKGMpPWMgX19JTlQzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UMzJfVFlQRV9fPWludCBfX0lOVDY0X0MoYyk9Y0xMIF9fSU5UNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UNjRfVFlQRV9fPWxvbmdcIGxvbmdcIGludCBfX0lOVDhfQyhjKT1jIF9fSU5UOF9NQVhfXz0xMjcgX19JTlQ4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRNQVhfQyhjKT1jTEwgX19JTlRNQVhfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UTUFYX1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlRQVFJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVFBUUl9UWVBFX189aW50IF9fSU5UX0ZBU1QxNl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0ZBU1QxNl9UWVBFX189aW50IF9fSU5UX0ZBU1QzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0ZBU1QzMl9UWVBFX189aW50IF9fSU5UX0ZBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlRfRkFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlRfRkFTVDhfTUFYX189MTI3IF9fSU5UX0ZBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTEVBU1QxNl9NQVhfXz0zMjc2NyBfX0lOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UX0xFQVNUMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9MRUFTVDMyX1RZUEVfXz1pbnQgX19JTlRfTEVBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlRfTEVBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UX0xFQVNUOF9NQVhfXz0xMjcgX19JTlRfTEVBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTUFYX189MjE0NzQ4MzY0NyBfX0xEQkxfREVOT1JNX01JTl9fPTMuNjQ1MTk5NTMxODgyNDc0NjAyNTNlLTQ5NTFMIF9fTERCTF9ESUdfXz0xOCBfX0xEQkxfRVBTSUxPTl9fPTEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TCBfX0xEQkxfSEFTX0RFTk9STV9fPTEgX19MREJMX0hBU19JTkZJTklUWV9fPTEgX19MREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fTERCTF9NQU5UX0RJR19fPTY0IF9fTERCTF9NQVhfMTBfRVhQX189NDkzMiBfX0xEQkxfTUFYX0VYUF9fPTE2Mzg0IF9fTERCTF9NQVhfXz0xLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTCBfX0xEQkxfTUlOXzEwX0VYUF9fPSgtNDkzMSkgX19MREJMX01JTl9FWFBfXz0oLTE2MzgxKSBfX0xEQkxfTUlOX189My4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkwgX19MT05HX0xPTkdfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fTE9OR19NQVhfXz0yMTQ3NDgzNjQ3TCBfX1BSQUdNQV9SRURFRklORV9FWFROQU1FPTEgX19QVFJESUZGX01BWF9fPTIxNDc0ODM2NDcgX19QVFJESUZGX1RZUEVfXz1pbnQgX19SRUdJU1RFUl9QUkVGSVhfXz0gX19TQ0hBUl9NQVhfXz0xMjcgX19TSFJUX01BWF9fPTMyNzY3IF9fU0lHX0FUT01JQ19NQVhfXz0yMTQ3NDgzNjQ3IF9fU0lHX0FUT01JQ19NSU5fXz0oLTIxNDc0ODM2NDdcIC1cIDEpIF9fU0lHX0FUT01JQ19UWVBFX189aW50IF9fU0laRU9GX0RPVUJMRV9fPTggX19TSVpFT0ZfRkxPQVRfXz00IF9fU0laRU9GX0lOVF9fPTQgX19TSVpFT0ZfTE9OR19ET1VCTEVfXz0xMiBfX1NJWkVPRl9MT05HX0xPTkdfXz04IF9fU0laRU9GX0xPTkdfXz00IF9fU0laRU9GX1BPSU5URVJfXz00IF9fU0laRU9GX1BUUkRJRkZfVF9fPTQgX19TSVpFT0ZfU0hPUlRfXz0yIF9fU0laRU9GX1NJWkVfVF9fPTQgX19TSVpFT0ZfV0NIQVJfVF9fPTQgX19TSVpFT0ZfV0lOVF9UX189NCBfX1NJWkVfTUFYX189NDI5NDk2NzI5NVUgX19TSVpFX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fU1REQ19IT1NURURfXz0xIF9fU1REQ19fPTEgX19VSU5UMTZfQyhjKT1jIF9fVUlOVDE2X01BWF9fPTY1NTM1IF9fVUlOVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlQzMl9DKGMpPWNVIF9fVUlOVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVDY0X0MoYyk9Y1VMTCBfX1VJTlQ2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlQ2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlQ4X0MoYyk9YyBfX1VJTlQ4X01BWF9fPTI1NSBfX1VJTlQ4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRNQVhfQyhjKT1jVUxMIF9fVUlOVE1BWF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlRNQVhfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UUFRSX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVFBUUl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDE2X01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9GQVNUMTZfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfRkFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDhfTUFYX189MjU1IF9fVUlOVF9GQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UX0xFQVNUMTZfTUFYX189NjU1MzUgX19VSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9MRUFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIF9fVUlOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDhfTUFYX189MjU1IF9fVUlOVF9MRUFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVVNFUl9MQUJFTF9QUkVGSVhfXz0gX19VU0VfQlNEPTEgX19VU0VfRklMRV9PRkZTRVQ2ND0xIF9fVVNFX0dOVT0xIF9fVVNFX0xBUkdFRklMRTY0PTEgX19VU0VfTEFSR0VGSUxFPTEgX19VU0VfTUlTQz0xIF9fVVNFX1BPU0lYMTk5MzA5PTEgX19VU0VfUE9TSVgxOTk1MDY9MSBfX1VTRV9QT1NJWDI9MSBfX1VTRV9QT1NJWD0xIF9fVVNFX1JFRU5UUkFOVD0xIF9fVVNFX1NWSUQ9MSBfX1VTRV9VTklYOTg9MSBfX1VTRV9YT1BFTj0xIF9fVVNFX1hPUEVOX0VYVEVOREVEPTEgX19WRVJTSU9OX189IjQuNS4xIiBfX1dDSEFSX01BWF9fPTIxNDc0ODM2NDdMIF9fV0NIQVJfTUlOX189KC0yMTQ3NDgzNjQ3TFwgLVwgMSkgX19XQ0hBUl9UWVBFX189bG9uZ1wgaW50IF9fV0lOVF9NQVhfXz00Mjk0OTY3Mjk1VSBfX1dJTlRfTUlOX189MFUgX19XSU5UX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fZ251X2xpbnV4X189MSBfX2kzODY9MSBfX2kzODZfXz0xIF9faTU4Nj0xIF9faTU4Nl9fPTEgX19saW51eD0xIF9fbGludXhfXz0xIF9fcGVudGl1bT0xIF9fcGVudGl1bV9fPTEgX190dW5lX2k1ODZfXz0xIF9fdHVuZV9wZW50aXVtX189MSBfX3VuaXg9MSBfX3VuaXhfXz0xIGkzODY9MSBsaW51eD0xIHVuaXg9MScKK2RfbnZfcHJlc2VydmVzX3V2PSdkZWZpbmUnCitkX3ByaW50Zl9mb3JtYXRfbnVsbD0nZGVmaW5lJworZF91MzJhbGlnbj0ndW5kZWYnCitnaWRmb3JtYXQ9JyJsdSInCitpMzJ0eXBlPSdsb25nJworaTY0dHlwZT0nbG9uZyBsb25nJworaXZzaXplPSc0JworbG9uZ2RibHNpemU9JzEyJworbG9uZ3NpemU9JzQnCitteXVuYW1lPSdsaW51eCBxZW11eDg2IDIuNi4zNy1yYzUteW9jdG8tc3RhbmRhcmQrICMxIHByZWVtcHQgbW9uIGRlYyAyMCAxNDoyMToyNyBwc3QgMjAxMCBpNjg2IGdudWxpbnV4ICcKK25lZWRfdmFfY29weT0ndW5kZWYnCituZXRkYl9ob3N0X3R5cGU9J2NvbnN0IHZvaWQgKicKK252X3ByZXNlcnZlc191dl9iaXRzPSczMicKK3B0cnNpemU9JzQnCitxdWFka2luZD0nMycKK3F1YWR0eXBlPSdsb25nIGxvbmcnCitzR01USU1FX21heD0nMjE0NzQ4MzY0NycKK3NHTVRJTUVfbWluPSctMjE0NzQ4MzY0OCcKK3NMT0NBTFRJTUVfbWF4PScyMTQ3NDgzNjQ3Jworc0xPQ0FMVElNRV9taW49Jy0yMTQ3NDgzNjQ4Jworc1BSSVhVNjQ9JyJMWCInCitzUFJJZDY0PSciTGQiJworc1BSSWk2ND0nIkxpIicKK3NQUklvNjQ9JyJMbyInCitzUFJJdTY0PSciTHUiJworc1BSSXg2ND0nIkx4IicKK3NlbGVjdG1pbmJpdHM9JzMyJworc2l6ZXNpemU9JzQnCit1MzJ0eXBlPSd1bnNpZ25lZCBsb25nJwordTY0dHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJwordWlkZm9ybWF0PScibHUiJwordXF1YWR0eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnCit1c2U2NGJpdGFsbD0ndW5kZWYnCit1c2U2NGJpdGludD0ndW5kZWYnCit1dnNpemU9JzQnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWJlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTlhOWFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzQzMjEnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU0MjI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzEyMzQnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI5ZDNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NApAQCAtMCwwICsxLDM4IEBACithbGlnbmJ5dGVzPSc4JworY2ZfdGltZT0nVGh1IERlYyAyMyAwMjowNjo0MiBVVEMgMjAxMCcKK2NwcHN5bWJvbHM9J19GSUxFX09GRlNFVF9CSVRTPTY0IF9HTlVfU09VUkNFPTEgX0xBUkdFRklMRTY0X1NPVVJDRT0xIF9MQVJHRUZJTEVfU09VUkNFPTEgX0xQNjQ9MSBfUE9TSVhfQ19TT1VSQ0U9MjAwODA5TCBfUE9TSVhfU09VUkNFPTEgX1JFRU5UUkFOVD0xIF9YT1BFTl9TT1VSQ0U9NzAwIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSBfX0JJR0dFU1RfQUxJR05NRU5UX189MTYgX19DSEFSMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fQ0hBUjMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fQ0hBUl9CSVRfXz04IF9fREJMX0RFTk9STV9NSU5fXz0oKGRvdWJsZSk0Ljk0MDY1NjQ1ODQxMjQ2NTQ0MTc3ZS0zMjRMKSBfX0RCTF9ESUdfXz0xNSBfX0RCTF9FUFNJTE9OX189KChkb3VibGUpMi4yMjA0NDYwNDkyNTAzMTMwODA4NWUtMTZMKSBfX0RCTF9IQVNfREVOT1JNX189MSBfX0RCTF9IQVNfSU5GSU5JVFlfXz0xIF9fREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fREJMX01BTlRfRElHX189NTMgX19EQkxfTUFYXzEwX0VYUF9fPTMwOCBfX0RCTF9NQVhfRVhQX189MTAyNCBfX0RCTF9NQVhfXz0oKGRvdWJsZSkxLjc5NzY5MzEzNDg2MjMxNTcwODE1ZSszMDhMKSBfX0RCTF9NSU5fMTBfRVhQX189KC0zMDcpIF9fREJMX01JTl9FWFBfXz0oLTEwMjEpIF9fREJMX01JTl9fPSgoZG91YmxlKTIuMjI1MDczODU4NTA3MjAxMzgzMDllLTMwOEwpIF9fREVDMTI4X0VQU0lMT05fXz0xRS0zM0RMIF9fREVDMTI4X01BTlRfRElHX189MzQgX19ERUMxMjhfTUFYX0VYUF9fPTYxNDUgX19ERUMxMjhfTUFYX189OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFNjE0NERMIF9fREVDMTI4X01JTl9FWFBfXz0oLTYxNDIpIF9fREVDMTI4X01JTl9fPTFFLTYxNDNETCBfX0RFQzEyOF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDNETCBfX0RFQzMyX0VQU0lMT05fXz0xRS02REYgX19ERUMzMl9NQU5UX0RJR19fPTcgX19ERUMzMl9NQVhfRVhQX189OTcgX19ERUMzMl9NQVhfXz05Ljk5OTk5OUU5NkRGIF9fREVDMzJfTUlOX0VYUF9fPSgtOTQpIF9fREVDMzJfTUlOX189MUUtOTVERiBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMUUtOTVERiBfX0RFQzY0X0VQU0lMT05fXz0xRS0xNUREIF9fREVDNjRfTUFOVF9ESUdfXz0xNiBfX0RFQzY0X01BWF9FWFBfXz0zODUgX19ERUM2NF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OUUzODRERCBfX0RFQzY0X01JTl9FWFBfXz0oLTM4MikgX19ERUM2NF9NSU5fXz0xRS0zODNERCBfX0RFQzY0X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzREQgX19ERUNJTUFMX0JJRF9GT1JNQVRfXz0xIF9fREVDSU1BTF9ESUdfXz0yMSBfX0RFQ19FVkFMX01FVEhPRF9fPTIgX19FTEZfXz0xIF9fRklOSVRFX01BVEhfT05MWV9fPTAgX19GTFRfREVOT1JNX01JTl9fPTEuNDAxMjk4NDY0MzI0ODE3MDcwOTJlLTQ1RiBfX0ZMVF9ESUdfXz02IF9fRkxUX0VQU0lMT05fXz0xLjE5MjA5Mjg5NTUwNzgxMjUwMDAwZS03RiBfX0ZMVF9FVkFMX01FVEhPRF9fPTAgX19GTFRfSEFTX0RFTk9STV9fPTEgX19GTFRfSEFTX0lORklOSVRZX189MSBfX0ZMVF9IQVNfUVVJRVRfTkFOX189MSBfX0ZMVF9NQU5UX0RJR19fPTI0IF9fRkxUX01BWF8xMF9FWFBfXz0zOCBfX0ZMVF9NQVhfRVhQX189MTI4IF9fRkxUX01BWF9fPTMuNDAyODIzNDY2Mzg1Mjg4NTk4MTJlKzM4RiBfX0ZMVF9NSU5fMTBfRVhQX189KC0zNykgX19GTFRfTUlOX0VYUF9fPSgtMTI1KSBfX0ZMVF9NSU5fXz0xLjE3NTQ5NDM1MDgyMjI4NzUwNzk3ZS0zOEYgX19GTFRfUkFESVhfXz0yIF9fR0NDX0hBVkVfRFdBUkYyX0NGSV9BU009MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8xPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMj0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzQ9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF84PTEgX19HTElCQ19NSU5PUl9fPTEyIF9fR0xJQkNfXz0yIF9fR05VQ19HTlVfSU5MSU5FX189MSBfX0dOVUNfTUlOT1JfXz01IF9fR05VQ19QQVRDSExFVkVMX189MSBfX0dOVUNfXz00IF9fR05VX0xJQlJBUllfXz02IF9fR1hYX0FCSV9WRVJTSU9OPTEwMDIgX19JTlQxNl9DKGMpPWMgX19JTlQxNl9NQVhfXz0zMjc2NyBfX0lOVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UMzJfQyhjKT1jIF9fSU5UMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVDMyX1RZUEVfXz1pbnQgX19JTlQ2NF9DKGMpPWNMIF9fSU5UNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlQ2NF9UWVBFX189bG9uZ1wgaW50IF9fSU5UOF9DKGMpPWMgX19JTlQ4X01BWF9fPTEyNyBfX0lOVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVE1BWF9DKGMpPWNMIF9fSU5UTUFYX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UTUFYX1RZUEVfXz1sb25nXCBpbnQgX19JTlRQVFJfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRQVFJfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUMTZfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRfRkFTVDE2X1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDMyX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0ZBU1QzMl9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0ZBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUOF9NQVhfXz0xMjcgX19JTlRfRkFTVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVF9MRUFTVDE2X01BWF9fPTMyNzY3IF9fSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlRfTEVBU1QzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0xFQVNUMzJfVFlQRV9fPWludCBfX0lOVF9MRUFTVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9MRUFTVDhfTUFYX189MTI3IF9fSU5UX0xFQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX01BWF9fPTIxNDc0ODM2NDcgX19MREJMX0RFTk9STV9NSU5fXz0zLjY0NTE5OTUzMTg4MjQ3NDYwMjUzZS00OTUxTCBfX0xEQkxfRElHX189MTggX19MREJMX0VQU0lMT05fXz0xLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUwgX19MREJMX0hBU19ERU5PUk1fXz0xIF9fTERCTF9IQVNfSU5GSU5JVFlfXz0xIF9fTERCTF9IQVNfUVVJRVRfTkFOX189MSBfX0xEQkxfTUFOVF9ESUdfXz02NCBfX0xEQkxfTUFYXzEwX0VYUF9fPTQ5MzIgX19MREJMX01BWF9FWFBfXz0xNjM4NCBfX0xEQkxfTUFYX189MS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkwgX19MREJMX01JTl8xMF9FWFBfXz0oLTQ5MzEpIF9fTERCTF9NSU5fRVhQX189KC0xNjM4MSkgX19MREJMX01JTl9fPTMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMIF9fTE9OR19MT05HX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0xPTkdfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19MUDY0X189MSBfX01NWF9fPTEgX19QUkFHTUFfUkVERUZJTkVfRVhUTkFNRT0xIF9fUFRSRElGRl9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX1BUUkRJRkZfVFlQRV9fPWxvbmdcIGludCBfX1JFR0lTVEVSX1BSRUZJWF9fPSBfX1NDSEFSX01BWF9fPTEyNyBfX1NIUlRfTUFYX189MzI3NjcgX19TSUdfQVRPTUlDX01BWF9fPTIxNDc0ODM2NDcgX19TSUdfQVRPTUlDX01JTl9fPSgtMjE0NzQ4MzY0N1wgLVwgMSkgX19TSUdfQVRPTUlDX1RZUEVfXz1pbnQgX19TSVpFT0ZfRE9VQkxFX189OCBfX1NJWkVPRl9GTE9BVF9fPTQgX19TSVpFT0ZfSU5UX189NCBfX1NJWkVPRl9MT05HX0RPVUJMRV9fPTE2IF9fU0laRU9GX0xPTkdfTE9OR19fPTggX19TSVpFT0ZfTE9OR19fPTggX19TSVpFT0ZfUE9JTlRFUl9fPTggX19TSVpFT0ZfUFRSRElGRl9UX189OCBfX1NJWkVPRl9TSE9SVF9fPTIgX19TSVpFT0ZfU0laRV9UX189OCBfX1NJWkVPRl9XQ0hBUl9UX189NCBfX1NJWkVPRl9XSU5UX1RfXz00IF9fU0laRV9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fU0laRV9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1NTRTJfTUFUSF9fPTEgX19TU0UyX189MSBfX1NTRV9NQVRIX189MSBfX1NTRV9fPTEgX19TVERDX0hPU1RFRF9fPTEgX19TVERDX189MSBfX1VJTlQxNl9DKGMpPWMgX19VSU5UMTZfTUFYX189NjU1MzUgX19VSU5UMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVDMyX0MoYyk9Y1UgX19VSU5UMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UNjRfQyhjKT1jVUwgX19VSU5UNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlQ2NF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlQ4X0MoYyk9YyBfX1VJTlQ4X01BWF9fPTI1NSBfX1VJTlQ4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRNQVhfQyhjKT1jVUwgX19VSU5UTUFYX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UTUFYX1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVFBUUl9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVFBUUl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDE2X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1QxNl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDMyX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1QzMl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDhfTUFYX189MjU1IF9fVUlOVF9GQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UX0xFQVNUMTZfTUFYX189NjU1MzUgX19VSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9MRUFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUOF9NQVhfXz0yNTUgX19VSU5UX0xFQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VU0VSX0xBQkVMX1BSRUZJWF9fPSBfX1VTRV9CU0Q9MSBfX1VTRV9GSUxFX09GRlNFVDY0PTEgX19VU0VfR05VPTEgX19VU0VfTEFSR0VGSUxFNjQ9MSBfX1VTRV9MQVJHRUZJTEU9MSBfX1VTRV9NSVNDPTEgX19VU0VfUE9TSVgxOTkzMDk9MSBfX1VTRV9QT1NJWDE5OTUwNj0xIF9fVVNFX1BPU0lYMj0xIF9fVVNFX1BPU0lYPTEgX19VU0VfUkVFTlRSQU5UPTEgX19VU0VfU1ZJRD0xIF9fVVNFX1VOSVg5OD0xIF9fVVNFX1hPUEVOPTEgX19VU0VfWE9QRU5fRVhURU5ERUQ9MSBfX1ZFUlNJT05fXz0iNC41LjEiIF9fV0NIQVJfTUFYX189MjE0NzQ4MzY0NyBfX1dDSEFSX01JTl9fPSgtMjE0NzQ4MzY0N1wgLVwgMSkgX19XQ0hBUl9UWVBFX189aW50IF9fV0lOVF9NQVhfXz00Mjk0OTY3Mjk1VSBfX1dJTlRfTUlOX189MFUgX19XSU5UX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fYW1kNjQ9MSBfX2FtZDY0X189MSBfX2dudV9saW51eF9fPTEgX19rOD0xIF9fazhfXz0xIF9fbGludXg9MSBfX2xpbnV4X189MSBfX3VuaXg9MSBfX3VuaXhfXz0xIF9feDg2XzY0PTEgX194ODZfNjRfXz0xIGxpbnV4PTEgdW5peD0xJworZF9udl9wcmVzZXJ2ZXNfdXY9J3VuZGVmJworZF9wcmludGZfZm9ybWF0X251bGw9J3VuZGVmJworZF91MzJhbGlnbj0nZGVmaW5lJworZ2lkZm9ybWF0PScidSInCitpMzJ0eXBlPSdpbnQnCitpNjR0eXBlPSdsb25nJworaXZzaXplPSc4JworbG9uZ2RibHNpemU9JzE2JworbG9uZ3NpemU9JzgnCitteXVuYW1lPSdsaW51eCBxZW11eDg2LTY0IDIuNi4zNy1yYzUteW9jdG8tc3RhbmRhcmQrICMxIHNtcCBwcmVlbXB0IG1vbiBkZWMgMjAgMTc6MTk6NTAgcHN0IDIwMTAgeDg2XzY0IGdudWxpbnV4ICcKK25lZWRfdmFfY29weT0nZGVmaW5lJworbmV0ZGJfaG9zdF90eXBlPSdjaGFyIConCitudl9wcmVzZXJ2ZXNfdXZfYml0cz0nNTMnCitwdHJzaXplPSc4JworcXVhZGtpbmQ9JzInCitxdWFkdHlwZT0nbG9uZycKK3NHTVRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NHTVRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzTE9DQUxUSU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzTE9DQUxUSU1FX21pbj0nLTYyMTY3MjE5MjAwJworc1BSSVhVNjQ9JyJsWCInCitzUFJJZDY0PScibGQiJworc1BSSWk2ND0nImxpIicKK3NQUklvNjQ9JyJsbyInCitzUFJJdTY0PScibHUiJworc1BSSXg2ND0nImx4IicKK3NlbGVjdG1pbmJpdHM9JzY0Jworc2l6ZXNpemU9JzgnCit1MzJ0eXBlPSd1bnNpZ25lZCBpbnQnCit1NjR0eXBlPSd1bnNpZ25lZCBsb25nJwordWlkZm9ybWF0PScidSInCit1cXVhZHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1c2U2NGJpdGFsbD0nZGVmaW5lJwordXNlNjRiaXRpbnQ9J2RlZmluZScKK3V2c2l6ZT0nOCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtYmUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOGNlM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlCkBAIC0wLDAgKzEgQEAKK2J5dGVvcmRlcj0nODc2NTQzMjEnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzdkMmE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzEyMzQ1Njc4JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2Nyb3NzLWdlbmVyYXRlX3V1ZG1hcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwYWQ2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjE0LjIvTWFrZWZpbGUuU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL01ha2VmaWxlLlNICisrKysgcGVybC01LjE0LjIvTWFrZWZpbGUuU0gKK0BAIC02MjIsNyArNjIyLDcgQEAgYml0Y291bnQuaDogZ2VuZXJhdGVfdXVkbWFwJChIT1NUX0VYRV9FWAorIAkkKFJVTikgLi9nZW5lcmF0ZV91dWRtYXAkKEhPU1RfRVhFX0VYVCkgdXVkbWFwLmggYml0Y291bnQuaAorIAorIGdlbmVyYXRlX3V1ZG1hcCQoSE9TVF9FWEVfRVhUKTogZ2VuZXJhdGVfdXVkbWFwJChPQkpfRVhUKQorLQkkKENDKSAtbyBnZW5lcmF0ZV91dWRtYXAkKEVYRV9FWFQpICQoTERGTEFHUykgZ2VuZXJhdGVfdXVkbWFwJChPQkpfRVhUKSAkKGxpYnMpCisrCSQoQlVJTERfQ0MpIC1vIGdlbmVyYXRlX3V1ZG1hcCQoRVhFX0VYVCkgZ2VuZXJhdGVfdXVkbWFwLmMKKyAKKyBtaW5pcGVybG1haW4kKE9CSl9FWFQpOiBtaW5pcGVybG1haW4uYyBwYXRjaGxldmVsLmgKKyAJJChDQ0NNRCkgJChQTERMRkxBR1MpICQqLmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzYjk2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZDMzZDQ2OTYzMDM1ZWY3MjYxNDRkYzY2YmUyYWU5YzAwYWVjMDMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgMTYgT2N0IDIwMTIgMjM6MDc6NTYgKzAzMDAKK1N1YmplY3Q6IEZpeCBDUEFOOjpGaXJzdFRpbWUgZGVmYXVsdHMgd2l0aCBub25leGlzdGluZyBzaXRlIGRpcnMgaWYgYSBwYXJlbnQKKyBpcyB3cml0YWJsZQorCitUaGUgc2l0ZSBkaXJlY3RvcmllcyBkbyBub3QgZXhpc3Qgb24gYSB0eXBpY2FsIERlYmlhbiBzeXN0ZW0uICBUaGUgYnVpbGQKK3N5c3RlbXMgd2lsbCBjcmVhdGUgdGhlbSB3aGVuIG5lY2Vzc2FyeSwgc28gdGhlcmUncyBubyBuZWVkIGZvciBhIHByb21wdAorc3VnZ2VzdGluZyBsb2NhbDo6bGliIGlmIHRoZSBmaXJzdCBleGlzdGluZyBwYXJlbnQgZGlyZWN0b3J5IGlzIHdyaXRhYmxlLgorCitBbHNvLCB3cml0YWJpbGl0eSBvZiB0aGUgY29yZSBkaXJlY3RvcmllcyBpcyBub3QgaW50ZXJlc3RpbmcgYXMgd2UKK2V4cGxpY2l0bHkgdGVsbCBDUEFOIG5vdCB0byB0b3VjaCB0aG9zZSB3aXRoIElOU1RBTExESVJTPXNpdGUuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjg4ODQyCitQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KK2luZGV4IDMzMDU0Y2QuLjdiMGJlY2YgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCisrKysgYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitAQCAtMjA1NywxMSArMjA1NywzNCBAQCBzdWIgX3ByaW50X3VybGxpc3QgeworICAgICB9OworIH0KKyAKKysjIERlYmlhbiBtb2RpZmljYXRpb246IHJldHVybiB0cnVlIGlmIHRoaXMgZGlyZWN0b3J5CisrIyBvciB0aGUgZmlyc3QgZXhpc3Rpbmcgb25lIHVwd2FyZHMgaXMgd3JpdGFibGUKKytzdWIgX2Nhbl93cml0ZV90b190aGlzX29yX3BhcmVudCB7CisrICAgIG15ICgkZGlyKSA9IEBfOworKyAgICBteSBAcGFydHMgPSBGaWxlOjpTcGVjLT5zcGxpdGRpcigkZGlyKTsKKysgICAgd2hpbGUgKEBwYXJ0cykgeworKyAgICAgICAgbXkgJGN1ciA9IEZpbGU6OlNwZWMtPmNhdGRpcihAcGFydHMpOworKyAgICAgICAgcmV0dXJuIDEgaWYgLXcgJGN1cjsKKysgICAgICAgIHJldHVybiAwIGlmIC1lIF87CisrICAgICAgICBwb3AgQHBhcnRzOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKysjIERlYmlhbiBzcGVjaWZpYyBtb2RpZmljYXRpb246IHRoZSBzaXRlIGRpcmVjdG9yaWVzIGRvbid0IG5lY2Vzc2FyaWx5CisrIyBleGlzdCBvbiB0aGUgc3lzdGVtLCBidXQgdGhlIGJ1aWxkIHN5c3RlbXMgY3JlYXRlIHRoZW0gd2hlbiBuZWNlc3NhcnksCisrIyBzbyByZXR1cm4gdHJ1ZSBpZiB0aGUgZmlyc3QgZXhpc3RpbmcgZGlyZWN0b3J5IHVwd2FyZHMgaXMgd3JpdGFibGUKKysjCisrIyBGdXJ0aGVybW9yZSwgb24gRGViaWFuLCBvbmx5IHRlc3QgdGhlIHNpdGUgZGlyZWN0b3JpZXMKKysjIChpbnN0YWxsc2l0ZSosIGV4cGFuZGVkIHRvIC91c3IvbG9jYWwve3NoYXJlLGxpYn0vcGVybCksCisrIyBub3QgdGhlIGNvcmUgb25lcyAKKysjIChpbnN0YWxsKmxpYiwgZXhwYW5kZWQgdG8gL3Vzci97c2hhcmUsbGlifS9wZXJsKS4KKysjIFdlIHBhc3MgSU5TVEFMTERJUlM9c2l0ZSBieSBkZWZhdWx0IHRvIGtlZXAgQ1BBTiBmcm9tIHRvdWNoaW5nCisrIyB0aGUgY29yZSBkaXJlY3Rvcmllcy4KKysKKyBzdWIgX2Nhbl93cml0ZV90b19saWJkaXJzIHsKKy0gICAgcmV0dXJuIC13ICRDb25maWd7aW5zdGFsbHByaXZsaWJ9CistICAgICAgICAmJiAtdyAkQ29uZmlne2luc3RhbGxhcmNobGlifQorLSAgICAgICAgJiYgLXcgJENvbmZpZ3tpbnN0YWxsc2l0ZWxpYn0KKy0gICAgICAgICYmIC13ICRDb25maWd7aW5zdGFsbHNpdGVhcmNofQorKyAgICByZXR1cm4gX2Nhbl93cml0ZV90b190aGlzX29yX3BhcmVudCgkQ29uZmlne2luc3RhbGxzaXRlbGlifSkKKysgICAgICAgICYmIF9jYW5fd3JpdGVfdG9fdGhpc19vcl9wYXJlbnQoJENvbmZpZ3tpbnN0YWxsc2l0ZWFyY2h9KQorIH0KKyAKKyBzdWIgX3VzaW5nX2luc3RhbGxiYXNlIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1Mjk1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNWZmMWYyMTQ4NGFhYjY4ZWZlMzIxZmY0YmE1ZDM1OTI4ZjcyYWY5NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBQcm92aWRlIGEgc2Vuc2libGUgSU5TVEFMTERJUlMgZGVmYXVsdCBmb3IgbW9kdWxlcyBpbnN0YWxsZWQgZnJvbQorIENQQU4uCisKK1NvbWUgbW9kdWxlcyB3aGljaCBhcmUgaW5jbHVkZWQgaW4gY29yZSBzZXQgSU5TVEFMTERJUlMgPT4gJ3BlcmwnCitleHBsaWNpdGx5IGluIE1ha2VmaWxlLlBMIG9yIEJ1aWxkLlBMLiAgVGhpcyBtYWtlcyBzZW5zZSBmb3IgdGhlIG5vcm1hbCBASU5DCitvcmRlcmluZywgYnV0IG5vdCBvdXJzLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitpbmRleCA5MThlMDA5Li4zMzA1NGNkIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorKysrIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorQEAgLTEwMjQsNyArMTAyNCw3IEBAIHN1YiBpbml0IHsKKyAgICAgbXlfcHJvbXB0X2xvb3AocHJlZmVyX2luc3RhbGxlciA9PiAnTUInLCAkbWF0Y2hlciwgJ01CfEVVTU18UkFORCcpOworIAorICAgICBpZiAoISRtYXRjaGVyIG9yICdtYWtlcGxfYXJnIG1ha2VfYXJnJyA9fiAvJG1hdGNoZXIvKSB7CistICAgICAgICBteV9kZmx0X3Byb21wdChtYWtlcGxfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisrICAgICAgICBteV9kZmx0X3Byb21wdChtYWtlcGxfYXJnID0+ICJJTlNUQUxMRElSUz1zaXRlIiwgJG1hdGNoZXIpOworICAgICAgICAgbXlfZGZsdF9wcm9tcHQobWFrZV9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKyAgICAgICAgIGlmICggJENQQU46OkNvbmZpZy0+e21ha2VwbF9hcmd9ID1+IC9MSUJTPXxJTkM9LyApIHsKKyAgICAgICAgICAgICAkQ1BBTjo6RnJvbnRlbmQtPm15d2FybigKK0BAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdWIgaW5pdCB7CisgICAgIG15X2RmbHRfcHJvbXB0KG1ha2VfaW5zdGFsbF9hcmcgPT4gJENQQU46OkNvbmZpZy0+e21ha2VfYXJnfSB8fCAiIiwKKyAgICAgICAgICAgICAgICAgICAgJG1hdGNoZXIpOworIAorLSAgICBteV9kZmx0X3Byb21wdChtYnVpbGRwbF9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKysgICAgbXlfZGZsdF9wcm9tcHQobWJ1aWxkcGxfYXJnID0+ICItLWluc3RhbGxkaXJzIHNpdGUiLCAkbWF0Y2hlcik7CisgICAgIG15X2RmbHRfcHJvbXB0KG1idWlsZF9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKyAKKyAgICAgaWYgKGV4aXN0cyAkQ1BBTjo6SGFuZGxlQ29uZmlnOjprZXlze21idWlsZF9pbnN0YWxsX2J1aWxkX2NvbW1hbmR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwYmYxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgpAQCAtMCwwICsxLDM0IEBACitGcm9tIDAxNDIxZjhhODBkNWM2MjM5NTk2OTViYTJiODE2N2YzMDExMmQzMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTYgRGVjIDIwMDUgMDE6MzI6MTQgKzExMDAKK1N1YmplY3Q6IFJlbW92ZSBvdmVybHkgcmVzdHJpY3RpdmUgREJfRmlsZSB2ZXJzaW9uIGNoZWNrLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzM0MDA0NworCitQYWNrYWdlIGRlcGVuZGVuY2llcyBlbnN1cmUgdGhlIGNvcnJlY3QgbGlicmFyeSBpcyBsaW5rZWQgYXQgcnVuLXRpbWUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9kYl9maWxlX3Zlci5kaWZmCistLS0KKyBjcGFuL0RCX0ZpbGUvdmVyc2lvbi5jIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMgYi9jcGFuL0RCX0ZpbGUvdmVyc2lvbi5jCitpbmRleCBlMDFmNmY2Li41NDRlNmVlIDEwMDY0NAorLS0tIGEvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworKysrIGIvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworQEAgLTQ4LDYgKzQ4LDcgQEAgX19nZXRCZXJrZWxleURCSW5mbygpCisgCisgICAgICh2b2lkKWRiX3ZlcnNpb24oJk1ham9yLCAmTWlub3IsICZQYXRjaCkgOworIAorKyNpZm5kZWYgREVCSUFOCisgICAgIC8qIENoZWNrIHRoYXQgdGhlIHZlcnNpb25zIG9mIGRiLmggYW5kIGxpYmRiLmEgYXJlIHRoZSBzYW1lICovCisgICAgIGlmIChNYWpvciAhPSBEQl9WRVJTSU9OX01BSk9SIHx8IE1pbm9yICE9IERCX1ZFUlNJT05fTUlOT1IgKQorIAkJLyogfHwgUGF0Y2ggIT0gREJfVkVSU0lPTl9QQVRDSCkgKi8KK0BAIC01NSw2ICs1Niw3IEBAIF9fZ2V0QmVya2VsZXlEQkluZm8oKQorIAljcm9haygiXG5EQl9GaWxlIHdhcyBidWlsZCB3aXRoIGxpYmRiIHZlcnNpb24gJWQuJWQuJWQsXG5idXQgeW91IGFyZSBhdHRlbXB0aW5nIHRvIHJ1biBpdCB3aXRoIGxpYmRiIHZlcnNpb24gJWQuJWQuJWRcbiIsCisgCQlEQl9WRVJTSU9OX01BSk9SLCBEQl9WRVJTSU9OX01JTk9SLCBEQl9WRVJTSU9OX1BBVENILCAKKyAJCU1ham9yLCBNaW5vciwgUGF0Y2gpIDsKKysjZW5kaWYgLyogREVCSUFOICovCisgICAgIAorICAgICAvKiBjaGVjayB0aGF0IGxpYmRiIGlzIHJlY2VudCBlbm91Z2ggIC0tIHdlIG5lZWQgMi4zLjQgb3IgZ3JlYXRlciAqLworICAgICBpZiAoTWFqb3IgPT0gMiAmJiAoTWlub3IgPCAzIHx8IChNaW5vciA9PSAgMyAmJiBQYXRjaCA8IDQpKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWVlNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gZGVmNGFhMzgxN2Y5OGFhZTYyNWU2MDFiNzkxZWYwNjgyNzZmMDVkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaWMgSGFyZ3JlYXZlcyA8ZG9tQGVhcnRoLmxpPgorRGF0ZTogTW9uLCAxNyBNYXkgMjAxMCAxMzoyMzowNyArMDMwMAorU3ViamVjdDogUG9pbnQgdXNlcnMgdG8gRGViaWFuIHBhY2thZ2VzIG9mIGRlcHJlY2F0ZWQgY29yZSBtb2R1bGVzCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzQ3NjI4CisKK1NldmVyYWwgbW9kdWxlcyBhcmUgYmVpbmcgZGVwcmVjYXRlZCB3aXRoIHBlcmwgNS4yMC4KK1RvIGdldCBhIGNsZWFuIHRyYW5zaXRpb24sIHBlcmwvcGVybC1tb2R1bGVzIGlzIGdvaW5nIHRvIHJlY29tbWVuZCB0aGUKK3NlcGFyYXRlIERlYmlhbiBwYWNrYWdlcyBvZiB0aGVzZSBmb3Igb25lIHJlbGVhc2UgY3ljbGUgc28gdGhhdCB0aGV5IHdpbGwgYmUKK3B1bGxlZCBpbiBieSBkZWZhdWx0IG9uIHVwZ3JhZGVzLiBUaGlzIGlzIHRha2luZyBwbGFjZSBmb3IgcGVybCA1LjIwL2plc3NpZS4KKworSG93ZXZlciwgb24gc3lzdGVtcyBjb25maWd1cmVkIHRvIGlnbm9yZSByZWNvbW1lbmRhdGlvbnMgdGhlIGRlcHJlY2F0aW9uCit3YXJuaW5ncyB3aWxsIHN0aWxsIGJlIHVzZWZ1bCwgc28gbW9kaWZ5IHRoZW0gc2xpZ2h0bHkgdG8gcG9pbnQgdG8gdGhlCitzZXBhcmF0ZSBwYWNrYWdlcyBpbnN0ZWFkLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKKy0tLQorIGxpYi9kZXByZWNhdGUucG0gfCAxNSArKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2RlcHJlY2F0ZS5wbSBiL2xpYi9kZXByZWNhdGUucG0KK2luZGV4IDQ3YmMxMTIuLmIwYzYxZGYgMTAwNjQ0CistLS0gYS9saWIvZGVwcmVjYXRlLnBtCisrKysgYi9saWIvZGVwcmVjYXRlLnBtCitAQCAtNyw2ICs3LDEzIEBAIG91ciAkVkVSU0lPTiA9IDAuMDM7Cisgb3VyICVDb25maWc7CisgdW5sZXNzICglQ29uZmlnKSB7IHJlcXVpcmUgQ29uZmlnOyAqQ29uZmlnID0gXCVDb25maWc6OkNvbmZpZzsgfQorIAorKyMgRGViaWFuLXNwZWNpZmljIGNoYW5nZTogcmVjb21tZW5kIHRoZSBzZXBhcmF0ZSBEZWJpYW4gcGFja2FnZXMgb2YKKysjIGRlcHJlY2F0ZWQgbW9kdWxlcyB3aGVyZSBhdmFpbGFibGUKKysKKytvdXIgJURFQklBTl9QQUNLQUdFUyA9ICgKKysgICAgIyBOb25lIGZvciB0aGUgcGVybCA1LjIyIGN5Y2xlCisrKTsKKysKKyAjIFRoaXMgaXNuJ3QgYSBwdWJsaWMgQVBJLiBJdCdzIGludGVybmFsIHRvIGNvZGUgbWFpbnRhaW5lZCBieSB0aGUgcGVybC1wb3J0ZXJzCisgIyBJZiB5b3Ugd291bGQgbGlrZSBpdCB0byBiZSBhIHB1YmxpYyBBUEksIHBsZWFzZSBzZW5kIGEgcGF0Y2ggd2l0aAorICMgZG9jdW1lbnRhdGlvbiBhbmQgdGVzdHMuIFVudGlsIHRoZW4sIGl0IG1heSBjaGFuZ2Ugd2l0aG91dCB3YXJuaW5nLgorQEAgLTU4LDkgKzY1LDE1IEBAIEVPTQorIAlpZiAoZGVmaW5lZCAkY2FsbGVyc19iaXRtYXNrCisgCSAgICAmJiAodmVjKCRjYWxsZXJzX2JpdG1hc2ssICR3YXJuaW5nczo6T2Zmc2V0c3tkZXByZWNhdGVkfSwgMSkKKyAJCXx8IHZlYygkY2FsbGVyc19iaXRtYXNrLCAkd2FybmluZ3M6Ok9mZnNldHN7YWxsfSwgMSkpKSB7CistCSAgICB3YXJuIDw8IkVPTSI7CisrCQlpZiAobXkgJGRlYiA9ICRERUJJQU5fUEFDS0FHRVN7JHBhY2thZ2V9KSB7CisrCQkgICAgd2FybiA8PCJFT00iOworKyRwYWNrYWdlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBQZXJsIGNvcmUgZGlzdHJpYnV0aW9uIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSBpbnN0YWxsIHRoZSBzZXBhcmF0ZSAkZGViIHBhY2thZ2UuIEl0IGlzIGJlaW5nIHVzZWQgYXQgJGNhbGxfZmlsZSwgbGluZSAkY2FsbF9saW5lLgorK0VPTQorKwkJfSBlbHNlIHsKKysJCSAgICB3YXJuIDw8IkVPTSI7CisgJHBhY2thZ2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSBDUEFOLiBJdCBpcyBiZWluZyB1c2VkIGF0ICRjYWxsX2ZpbGUsIGxpbmUgJGNhbGxfbGluZS4KKyBFT00KKysJCX0KKyAJfQorICAgICB9CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kb2NfaW5mby5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kb2NfaW5mby5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZWEyZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBlMThmODFlNjljNTVkNjk4YWJkMjkzZTcxMDYzZDZiNmIyNzVjYzA3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBSZXBsYWNlIGdlbmVyaWMgbWFuKDEpIGluc3RydWN0aW9ucyB3aXRoIERlYmlhbi1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworSW5kaWNhdGUgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBpbnN0YWxsIHRoZSBwZXJsLWRvYyBwYWNrYWdlLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZG9jX2luZm8uZGlmZgorLS0tCisgcG9kL3BlcmwucG9kIHwgMTIgKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wb2QvcGVybC5wb2QgYi9wb2QvcGVybC5wb2QKK2luZGV4IDM2NGU5NTcuLmY5N2UxMDMgMTAwNjQ0CistLS0gYS9wb2QvcGVybC5wb2QKKysrKyBiL3BvZC9wZXJsLnBvZAorQEAgLTI5MSw4ICsyOTEsMTYgQEAgYXV4IGMycGggaDJwaCBoMnhzIHBlcmxidWcgcGwycG0gcG9kMmh0bWwgcG9kMm1hbiBzcGxhaW4geHN1YnBwCisgCisgPWZvciBidWlsZHRvYyBfX0VORF9fCisgCistT24gYSBVbml4LWxpa2Ugc3lzdGVtLCB0aGVzZSBkb2N1bWVudGF0aW9uIGZpbGVzIHdpbGwgdXN1YWxseSBhbHNvIGJlCistYXZhaWxhYmxlIGFzIG1hbnBhZ2VzIGZvciB1c2Ugd2l0aCB0aGUgRjxtYW4+IHByb2dyYW0uCisrT24gRGViaWFuIHN5c3RlbXMsIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIEI8cGVybC1kb2M+IHBhY2thZ2Ugd2hpY2gKKytjb250YWlucyB0aGUgbWFqb3JpdHkgb2YgdGhlIHN0YW5kYXJkIFBlcmwgZG9jdW1lbnRhdGlvbiBhbmQgdGhlCisrRjxwZXJsZG9jPiBwcm9ncmFtLgorKworK0V4dGVuc2l2ZSBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gZm9yIFBlcmwgbW9kdWxlcyBpcyBhdmFpbGFibGUsIGJvdGgKKyt0aG9zZSBkaXN0cmlidXRlZCB3aXRoIFBlcmwgYW5kIHRoaXJkLXBhcnR5IG1vZHVsZXMgd2hpY2ggYXJlIHBhY2thZ2VkCisrb3IgbG9jYWxseSBpbnN0YWxsZWQuCisrCisrWW91IHNob3VsZCBiZSBhYmxlIHRvIHZpZXcgUGVybCdzIGRvY3VtZW50YXRpb24gd2l0aCB5b3VyIG1hbigxKQorK3Byb2dyYW0gb3IgcGVybGRvYygxKS4KKyAKKyBTb21lIGRvY3VtZW50YXRpb24gaXMgbm90IGF2YWlsYWJsZSBhcyBtYW4gcGFnZXMsIHNvIGlmIGEKKyBjcm9zcy1yZWZlcmVuY2UgaXMgbm90IGZvdW5kIGJ5IG1hbiwgdHJ5IGl0IHdpdGggTDxwZXJsZG9jPi4gIFBlcmxkb2MgY2FuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2VuYzJ4c19pbmMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZW5jMnhzX2luYy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzRiMjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2VuYzJ4c19pbmMuZGlmZgpAQCAtMCwwICsxLDcwIEBACitGcm9tIDdmZTU5YTNkMDYwMWM2ZDg2MzRlYWU0Zjk5ZGFlMzAyNGNkMDJhOTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogVHdlYWsgZW5jMnhzIHRvIGZvbGxvdyBzeW1saW5rcyBhbmQgaWdub3JlIG1pc3NpbmcgQElOQyBkaXJlY3Rvcmllcy4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8yOTAzMzYKKworLSBpZ25vcmUgbWlzc2luZyBkaXJlY3RvcmllcywKKy0gZm9sbG93IHN5bWxpbmtzICgvdXNyL3NoYXJlL3BlcmwvNS44IC0+IDUuOC40KS4KKy0gZmlsdGVyICIuIiBvdXQgd2hlbiBydW5uaW5nICJlbmMyeHMgLUMiLCBpdCdzIHVubmVjZXNzYXJ5IGFuZCBjYXVzZXMKKyAgaXNzdWVzIHdpdGggZm9sbG93ID0+IDEgKHNlZSAjNjAzNjg2IGFuZCBbcnQuY3Bhbi5vcmcgIzY0NTg1XSkKKworUGF0Y2gtTmFtZTogZGViaWFuL2VuYzJ4c19pbmMuZGlmZgorLS0tCisgY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cyB8IDggKysrKy0tLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC50IHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMgYi9jcGFuL0VuY29kZS9iaW4vZW5jMnhzCitpbmRleCAxOWYyYjJiLi40ZDY0ZTM4IDEwMDY0NAorLS0tIGEvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworKysrIGIvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworQEAgLTk0NCwxMSArOTQ0LDExIEBAIHVzZSB2YXJzIHF3KAorIHN1YiBmaW5kX2UyeHsKKyAgICAgZXZhbCB7IHJlcXVpcmUgRmlsZTo6RmluZDsgfTsKKyAgICAgbXkgKEBpbmMsICVlMnhfZGlyKTsKKy0gICAgZm9yIG15ICRpbmMgKEBJTkMpeworKyAgICBmb3IgbXkgJGluYyAoZ3JlcCAtZCwgQElOQyl7CisgICAgIHB1c2ggQGluYywgJGluYyB1bmxlc3MgJGluYyBlcSAnLic7ICNza2lwIGN1cnJlbnQgZGlyCisgICAgIH0KKyAgICAgRmlsZTo6RmluZDo6ZmluZCgKKy0gICAgICAgICBzdWIgeworKyAgICAgICAgIHsgd2FudGVkID0+IHN1YiB7CisgICAgICAgICAgbXkgKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkLCRyZGV2LCRzaXplLAorICAgICAgICAgICAgICAkYXRpbWUsJG10aW1lLCRjdGltZSwkYmxrc2l6ZSwkYmxvY2tzKQorICAgICAgICAgICAgICA9IGxzdGF0KCRfKSBvciByZXR1cm47CitAQCAtOTU4LDcgKzk1OCw3IEBAIHN1YiBmaW5kX2UyeHsKKyAgICAgICAgICAgICAgJGUyeF9kaXJ7JEZpbGU6OkZpbmQ6OmRpcn0gfHw9ICRtdGltZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuOworLSAgICAgICAgIH0sIEBpbmMpOworKyAgICAgICAgIH0sIGZvbGxvdyA9PiAxfSwgQGluYyk7CisgICAgIHdhcm4gam9pbigiXG4iLCBrZXlzICVlMnhfZGlyKSwgIlxuIjsKKyAgICAgZm9yIG15ICRkIChzb3J0IHskZTJ4X2RpcnskYX0gPD0+ICRlMnhfZGlyeyRifX0ga2V5cyAlZTJ4X2Rpcil7CisgICAgICRfRTJYID0gJGQ7CitAQCAtMTAyNSw3ICsxMDI1LDcgQEAgc3ViIG1ha2VfY29uZmlnbG9jYWxfcG0geworIAkgICAgJExvY2FsTW9keyRlbmN9IHx8PSAkbW9kOworIAl9CisgICAgIH07CistICAgIEZpbGU6OkZpbmQ6OmZpbmQoe3dhbnRlZCA9PiAkd2FudGVkfSwgQElOQyk7CisrICAgIEZpbGU6OkZpbmQ6OmZpbmQoe3dhbnRlZCA9PiAkd2FudGVkLCBmb2xsb3cgPT4gMX0sIGdyZXAgLWQgJiYgIS9eXC4vLCBASU5DKTsKKyAgICAgJF9Nb2RMaW5lcyA9ICIiOworICAgICBmb3IgbXkgJGVuYyAoIHNvcnQga2V5cyAlTG9jYWxNb2QgKSB7CisgICAgICAgICAkX01vZExpbmVzIC49CitkaWZmIC0tZ2l0IGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudCBiL3QvcG9ydGluZy9jdXN0b21pemVkLnQKK2luZGV4IDQ1ZmNhZmIuLjNiZDZhZGIgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC50CisrKysgYi90L3BvcnRpbmcvY3VzdG9taXplZC50CitAQCAtMTAxLDggKzEwMSwxMSBAQCBmb3JlYWNoIG15ICRtb2R1bGUgKCBzb3J0IGtleXMgJU1vZHVsZXMgKSB7CisgICAgICAgcHJpbnQgJGRhdGFfZmggam9pbignICcsICRtb2R1bGUsICRmaWxlLCAkaWQpLCAiXG4iOworICAgICAgIG5leHQ7CisgICAgIH0KKytTS0lQOiB7CisrICAgIHNraXAoIiRmaWxlIG1vZGlmaWVkIGZvciBEZWJpYW4iLCAxKSBpZiAkZmlsZSBlcSAnY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cyc7CisgICAgIG15ICRzaG91bGRfYmUgPSAkY3VzdG9taXNlZHsgJG1vZHVsZSB9LT57ICRmaWxlIH07CisgICAgIGlzKCAkaWQsICRzaG91bGRfYmUsICJTSEEgZm9yICRmaWxlIG1hdGNoZXMgc3Rhc2hlZCBTSEEiICk7CisrfQorICAgfQorIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXJybm9fdmVyLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjU5YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gODI3ZWVlMjI1ODk3YzM1ZWM5NzE5NGE1OTcxYmY0YmZjZjI1MDc0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxNiBEZWMgMjAwNSAwMTozMjoxNCArMTEwMAorU3ViamVjdDogUmVtb3ZlIEVycm5vIHZlcnNpb24gY2hlY2sgZHVlIHRvIHVwZ3JhZGUgcHJvYmxlbXMgd2l0aCBsb25nLXJ1bm5pbmcKKyBwcm9jZXNzZXMuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMzQzMzUxCisKK1JlbW92ZSB2ZXJzaW9uIGNoZWNrIHdoaWNoIGNhbiBjYXVzZSBwcm9ibGVtcyBmb3IgbG9uZyBydW5uaW5nCitwcm9jZXNzZXMgZW1iZWRkaW5nIHBlcmwgd2hlbiB1cGdyYWRpbmcgdG8gYSBuZXdlciB2ZXJzaW9uLAorY29tcGF0aWJsZSwgYnV0IGJ1aWx0IG9uIGEgZGlmZmVyZW50IG1hY2hpbmUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9lcnJub192ZXIuZGlmZgorLS0tCisgZXh0L0Vycm5vL0Vycm5vX3BtLlBMIHwgNSAtLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0L0Vycm5vL0Vycm5vX3BtLlBMIGIvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCitpbmRleCBjNmJmYTA2Li41MTllNWM3IDEwMDY0NAorLS0tIGEvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCisrKysgYi9leHQvRXJybm8vRXJybm9fcG0uUEwKK0BAIC0yNzgsMTMgKzI3OCw4IEBAIHN1YiB3cml0ZV9lcnJub19wbSB7CisgCisgcGFja2FnZSBFcnJubzsKKyByZXF1aXJlIEV4cG9ydGVyOworLXVzZSBDb25maWc7CisgdXNlIHN0cmljdDsKKyAKKy0iXCRDb25maWd7J2FyY2huYW1lJ30tXCRDb25maWd7J29zdmVycyd9IiBlcQorLSIkYXJjaG5hbWUtJENvbmZpZ3snb3N2ZXJzJ30iIG9yCistCWRpZSAiRXJybm8gYXJjaGl0ZWN0dXJlICgkYXJjaG5hbWUtJENvbmZpZ3snb3N2ZXJzJ30pIGRvZXMgbm90IG1hdGNoIGV4ZWN1dGFibGUgYXJjaGl0ZWN0dXJlIChcJENvbmZpZ3snYXJjaG5hbWUnfS1cJENvbmZpZ3snb3N2ZXJzJ30pIjsKKy0KKyBvdXIgXCRWRVJTSU9OID0gIiRWRVJTSU9OIjsKKyBcJFZFUlNJT04gPSBldmFsIFwkVkVSU0lPTjsKKyBvdXIgXEBJU0EgPSAnRXhwb3J0ZXInOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI0YmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA0MzEyNzUwNzhiMDQ5MGQyZTA5MjQ0MmQ5NTgyYmUwNmJiOTViMzU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAxMCBNYXkgMjAxNCAyMzozNDoxNCArMDMwMAorU3ViamVjdDogRVU6TU06IHNldCBsb2NhdGlvbiBvZiBsaWJwZXJsLmEgdW5kZXIgL3Vzci9saWIKKworVGhlIERlYmlhbiBwYWNrYWdpbmcgbW92ZXMgbGlicGVybC5hIGEgY291cGxlIG9mIGxldmVscyB1cCBmcm9tIHRoZQorQ09SRSBkaXJlY3RvcnkgdG8gbWF0Y2ggb3RoZXIgc3RhdGljIGxpYnJhcmllcy4KKworUGF0Y2gtTmFtZTogZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAyICstCisgcHAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCA1ZjFiODdmLi41NzBhNjMxIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjUwNSw3ICsyNTA1LDcgQEAgTUFQX1BSRUxJQlMgICA9ICRDb25maWd7cGVybGxpYnN9ICRDb25maWd7Y3J5cHRsaWJ9CisgCSgkbHBlcmwgPSAkbGlicGVybCkgPX4gcy9cJFwoQVwpLyRzZWxmLT57TElCX0VYVH0vOworICAgICB9CisgICAgIHVubGVzcyAoJGxpYnBlcmwgJiYgLWYgJGxwZXJsKSB7ICMgSWx5YSdzIGNvZGUuLi4KKy0JbXkgJGRpciA9ICRzZWxmLT57UEVSTF9TUkN9IHx8ICIkc2VsZi0+e1BFUkxfQVJDSExJQn0vQ09SRSI7CisrCW15ICRkaXIgPSAkc2VsZi0+e1BFUkxfU1JDfSB8fCAiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9Ly4uLy4uIjsKKyAJJGRpciA9ICIkc2VsZi0+e1BFUkxfQVJDSExJQn0vLi4iIGlmICRzZWxmLT57VU5JTlNUQUxMRURfUEVSTH07CisgCSRsaWJwZXJsIHx8PSAibGlicGVybCRzZWxmLT57TElCX0VYVH0iOworIAkkbGlicGVybCAgID0gIiRkaXIvJGxpYnBlcmwiOworZGlmZiAtLWdpdCBhL3BwLmMgYi9wcC5jCitpbmRleCA0MmYxNTZhLi43N2MxMjc5IDEwMDY0NAorLS0tIGEvcHAuYworKysrIGIvcHAuYworQEAgLTEsNCArMSw0IEBACistLyogICAgcHAuYworKyAvKiAgICBwcC5jCisgICoKKyAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisgICogICAgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBieSBMYXJyeSBXYWxsIGFuZCBvdGhlcnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ2MWNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMjdhZTdiMTgwNzhkODAxYTJjOTQzYWE2ZGUyZjdlOTgwODE3NzI1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUG9zdHBvbmUgTERfTElCUkFSWV9QQVRIIGV2YWx1YXRpb24gdG8gdGhlIGJpbmFyeSB0YXJnZXRzLgorCitNb2RpZnkgdGhlIHNldHRpbmcgb2YgTERfTElCUkFSWV9QQVRIIHRvIGFwcGVuZCBwcmUtZXhpc3RpbmcgdmFsdWVzIGF0IHRoZQordGltZSB0aGUgcnVsZSBpcyBldmFsdWF0ZWQgcmF0aGVyIHRoYW4gd2hlbiB0aGUgTWFrZWZpbGUgaXMgY3JlYXRlZC4KKworVGhpcyBpcyByZXF1aXJlZCB3aGVuIGJ1aWxkaW5nIHBhY2thZ2VzIHdpdGggZHBrZy1idWlsZHBhY2thZ2UgYW5kIGZha2Vyb290LAorc2luY2UgZmFrZXJvb3QgKHdoaWNoIG5vdyBzZXRzIExEX0xJQlJBUllfUEFUSCkgaXMgbm90IHVzZWQgZm9yIHRoZSAiYnVpbGQiCitydWxlIHdoZXJlIHRoZSBNYWtlZmlsZSBpcyBjcmVhdGVkLCBidXQgaXMgZm9yIHRoZSBjbGVhbi9iaW5hcnkqIHRhcmdldHMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9mYWtlcm9vdC5kaWZmCistLS0KKyBNYWtlZmlsZS5TSCB8IDcgKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5TSCBiL01ha2VmaWxlLlNICitpbmRleCAwMzRkODEyLi4wNGRkN2Q1IDEwMDc1NQorLS0tIGEvTWFrZWZpbGUuU0gKKysrKyBiL01ha2VmaWxlLlNICitAQCAtMzksMTAgKzM5LDcgQEAgY2FzZSAiJHVzZXNocnBsaWIiIGluCisgdHJ1ZSkKKyAJIyBQcmVmaXggYWxsIHJ1bnMgb2YgJ21pbmlwZXJsJyBhbmQgJ3BlcmwnIHdpdGgKKyAJIyAkbGRsaWJwdGggc28gdGhhdCAuL3BlcmwgZmluZHMgKnRoaXMqIHNoYXJlZCBsaWJwZXJsLgorLQljYXNlICIkTERfTElCUkFSWV9QQVRIIiBpbgorLQknJykgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKy0JKikgICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJExEX0xJQlJBUllfUEFUSCIgYCIgOzsKKy0JZXNhYworKwlsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiJyQke0xEX0xJQlJBUllfUEFUSDorOn0kJExEX0xJQlJBUllfUEFUSCcKKyAKKyAJcGxkbGZsYWdzPSIkY2NjZGxmbGFncyIKKyAJc3RhdGljX2xkZmxhZ3M9JycKK0BAIC0xMTMsNyArMTEwLDcgQEAgdHJ1ZSkKKyAJICAgIDs7CisgCWVzYWMKKyAJY2FzZSAiJGxkbGlicHRobmFtZSIgaW4KKy0JJycpIDs7CisrCScnfExEX0xJQlJBUllfUEFUSCkgOzsKKyAJKikKKyAJICAgIGNhc2UgIiRvc25hbWUiIGluCisgCSAgICBvczIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpbmRfaHRtbDJ0ZXh0LmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpbmRfaHRtbDJ0ZXh0LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxOWU3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgpAQCAtMCwwICsxLDM1IEBACitGcm9tIGM4MWRiZGVkZmY5ZTliNGZiNzVhYzAyOGFhNzE4ODM4YzAyOTJkMmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWFzIE1hcnNjaGtlIDxhbmRyZWFzLm1hcnNjaGtlQGdvb2dsZW1haWwuY29tPgorRGF0ZTogU2F0LCAxNyBTZXAgMjAxMSAxMTozODo0MiArMDEwMAorU3ViamVjdDogQ29uZmlndXJlIENQQU46OkRpc3RyaWJ1dGlvbiB3aXRoIGNvcnJlY3QgbmFtZSBvZiBodG1sMnRleHQKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82NDA0NzkKK1BhdGNoLU5hbWU6IGRlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCisKK0lmIHlvdSB1c2UgY3BhbiBmcm9tIERlYmlhbiB5b3UgdXN1YWxseSB3aW5kIHVwIHRyeWluZyB0byByZWFkIG9ubGluZQorZG9jdW1lbnRhdGlvbiB0aHJvdWdoIGl0LiBVbmZvcnR1bmF0ZWx5IGNwYW4gY2FuJ3QgZmluZCB0aGUKK2h0bWwydGV4dC5wbCBzY3JpcHQgZXZlbiB0aG91Z2ggaXQgaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBEZWJpYW4KK3BhY2thZ2UgJ2h0bWwydGV4dCcuCisKK1BsZWFzZSBzZWUgdGhlIGF0dGFjaGVkIHBhdGNoIGZvciBhIHF1aWNrIGZpeCBvZiB0aGlzIGlzc3VlLgorCitbTWFpbnRhaW5lcidzIG5vdGU6IGh0bWwydGV4dCBpbiBEZWJpYW4gaXMgbm90IHRoZSBzYW1lIGltcGxlbWVudGF0aW9uCithcyB0aGUgaHRtbDJ0ZXh0LnBsIHdoaWNoIGlzIGV4cGVjdGVkLCBidXQgc2hvdWxkIHByb3ZpZGUgc2ltaWxhcgorZnVuY3Rpb25hbGl0eV0uCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbSBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0KK2luZGV4IDA5MmI3ODEuLjVjMmJhZTEgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCisrKysgYi9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCitAQCAtNDA5OSw3ICs0MDk5LDcgQEAgc3ViIF9kaXNwbGF5X3VybCB7CisgICAgICAgaWYgJENQQU46OkRFQlVHOworIAorICAgICAjIHNob3VsZCB3ZSBkZWZpbmUgaXQgaW4gdGhlIGNvbmZpZyBpbnN0ZWFkPworLSAgICBteSAkaHRtbF9jb252ZXJ0ZXIgPSAiaHRtbDJ0ZXh0LnBsIjsKKysgICAgbXkgJGh0bWxfY29udmVydGVyID0gImh0bWwydGV4dCI7CisgCisgICAgIG15ICR3ZWJfYnJvd3NlciA9ICRDUEFOOjpDb25maWctPnsnbHlueCd9IHx8IHVuZGVmOworICAgICBteSAkd2ViX2Jyb3dzZXJfb3V0ID0gJHdlYl9icm93c2VyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhOTI3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgpAQCAtMCwwICsxLDMxIEBACitGcm9tIDlmYWY2ZGNjM2E1YzQxNTQ0ODRkODEyZWIzY2MzZGQ3OGIzNTU2M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBNb24sIDMwIE1heSAyMDExIDIyOjU0OjI0ICswMzAwCitTdWJqZWN0OiBEb2N1bWVudCB0aGF0IENDRkxBR1Mgc2hvdWxkIGluY2x1ZGUgJENvbmZpZ3tjY2ZsYWdzfQorCitCdWc6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Njg2MTMKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjI4NTIyCisKK0NvbXBpbGluZyBYUyBleHRlbnNpb25zIHdpdGhvdXQgJENvbmZpZ3tjY2ZsYWdzfSBjYW4gYnJlYWsgdGhlCitiaW5hcnkgaW50ZXJmYWNlIG9uIHNvbWUgcGxhdGZvcm1zLgorCitQYXRjaC1OYW1lOiBmaXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0KK2luZGV4IGZlOTViMjcuLjkwNDAzZTggMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCitAQCAtMTc3NCw2ICsxNzc0LDEwIEBAIGN1cnJlbnRseSB1c2VkIGJ5IE1ha2VNYWtlciBidXQgbWF5IGJlIGhhbmR5IGluIE1ha2VmaWxlLlBMcy4KKyBTdHJpbmcgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBjb21waWxlciBjYWxsIGNvbW1hbmQgbGluZSBiZXR3ZWVuCisgdGhlIGFyZ3VtZW50cyBJTkMgYW5kIE9QVElNSVpFLgorIAorK1RoZSBkZWZhdWx0IHZhbHVlIGlzIHRha2VuIGZyb20gJENvbmZpZ3tjY2ZsYWdzfS4gV2hlbiBvdmVycmlkaW5nCisrQ0NGTEFHUywgbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlICRDb25maWd7Y2NmbGFnc30gc2V0dGluZ3MgdG8gYXZvaWQKKytiaW5hcnkgaW5jb21wYXRpYmlsaXRpZXMuCisrCisgPWl0ZW0gQ09ORklHCisgCisgQXJyYXlyZWYuIEUuZy4gW3F3KGFyY2huYW1lIG1hbmV4dCldIGRlZmluZXMgQVJDSE5BTUUgJiBNQU5FWFQgZnJvbQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWY5NjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKQEAgLTAsMCArMSwxMTAgQEAKK0Zyb20gNTVkNDMwZWIwMmZjMTE2NTgxODQ3MzA0Y2EyMDMyMTY4Nzk3ODI2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIE5pZWRlciA8anJuaWVkZXJAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNyBKdWwgMjAxMiAxMDozNTowNyAtMDUwMAorU3ViamVjdDogTWVtb2l6ZTo6U3RvcmFibGU6IHJlc3BlY3QgJ25zdG9yZScgb3B0aW9uIG5vdCByZXNwZWN0ZWQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworTWVtb2l6ZSgzcGVybCkgc2F5czoKKworICAgICAgICAgICAgICAgIHRpZSBteSAlY2FjaGUgPT4gJ01lbW9pemU6OlN0b3JhYmxlJywgJGZpbGVuYW1lLCAnbnN0b3JlJzsKKyAgICAgICAgICAgICAgICBtZW1vaXplICdmdW5jdGlvbicsIFNDQUxBUl9DQUNIRSA9PiBbSEFTSCA9PiBcJWNhY2hlXTsKKworICAgICAgICBJbmNsdWRlIHRoZSDigJhuc3RvcmXigJkgb3B0aW9uIHRvIGhhdmUgdGhlICJTdG9yYWJsZSIgZGF0YWJhc2UKKyAgICAgICAgd3JpdHRlbiBpbiDigJhuZXR3b3JrIG9yZGVy4oCZLiAgKFNlZSBTdG9yYWJsZSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIGFib3V0IHRoaXMuKQorCitJbiBmYWN0IHRoZSAibnN0b3JlIiBvcHRpb24gZG9lcyBubyBzdWNoIHRoaW5nLiAgT3B0aW9uIHBhcnNpbmcgbG9va3MKK2xpa2UgdGhpczoKKworICAgICAgICBAb3B0aW9uc3tAX30gPSAoKTsKKworJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30gaXMgYWNjb3JkaW5nbHkgc2V0IHRvIHVuZGVmLiAgTGF0ZXIKK01lbW9pemU6OlN0b3JhYmxlIGNoZWNrcyBpZiB0aGUgb3B0aW9uIGlzIHRydWUsIGFuZCBzaW5jZSB1bmRlZiBpcworbm90IHRydWUsIHRoZSAiZWxzZSIgYnJhbmNoIGlzIGFsd2F5cyB0YWtlbi4KKworICAgICAgICBpZiAoJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKyAgICAgICAgICAgICAgICBTdG9yYWJsZTo6bnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdG9yYWJsZTo6c3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworICAgICAgICB9CisKK0NvcnJlY3RpbmcgdGhlIGNvbmRpdGlvbiB0byAoZXhpc3RzICRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSBmaXhlcworaXQuCisKK05vdGljZWQgYmVjYXVzZSBnaXQtc3ZuLCB3aGljaCB1c2VzIHRoZSAnbnN0b3JlJyBvcHRpb24gZm9yIGl0cworb24tZGlzayBjYWNoZXMsIHdhcyBwcm9kdWNpbmcKKworICAgICAgICBCeXRlIG9yZGVyIGlzIG5vdCBjb21wYXRpYmxlIGF0IC4uLy4uL2xpYi9TdG9yYWJsZS5wbQorCit3aGVuIHJ1biB1c2luZyBhIHBlcmwgd2l0aCBhIGRpZmZlcmVudCBpbnRlZ2VyIHNpemUgKGFuZCBoZW5jZQorYnl0ZW9yZGVyKS4KKworUmVwb3J0ZWQgYnkgVGltIFJldG91dCAoUlQjNzc3OTApCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTg3NjUwCitCdWc6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Nzc3OTAKK0ZvcndhcmRlZDogaHR0cHM6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD03Nzc5MAorUGF0Y2gtTmFtZTogZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZgorLS0tCisgY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0gfCAgMiArLQorIGNwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50ICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0gYi9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQoraW5kZXggMTMxNDc5Ny4uODc4NzZmMiAxMDA2NDQKKy0tLSBhL2NwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtCisrKysgYi9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQorQEAgLTU1LDcgKzU1LDcgQEAgc3ViIERFU1RST1kgeworICAgcmVxdWlyZSBDYXJwIGlmICRWZXJib3NlOworICAgbXkgJHNlbGY9IHNoaWZ0OworICAgcHJpbnQgU1RERVJSICJNZW1vaXplOjpTdG9yYWJsZTo6REVTVFJPWShAXylcbiIgaWYgJFZlcmJvc2U7CistICBpZiAoJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKysgIGlmIChleGlzdHMgJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKyAgICAgU3RvcmFibGU6Om5zdG9yZSgkc2VsZi0+e0h9LCAkc2VsZi0+e0ZJTEVOQU1FfSk7CisgICB9IGVsc2UgeworICAgICBTdG9yYWJsZTo6c3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworZGlmZiAtLWdpdCBhL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50IGIvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKK2luZGV4IGRlM2I4ZGMuLmE2MjQyMzggMTAwNjQ0CistLS0gYS9jcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudAorKysrIGIvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKK0BAIC0zMSwxOCArMzEsMzQgQEAgaWYgKCRAKSB7CisgICBleGl0IDA7CisgfQorIAorLXByaW50ICIxLi40XG4iOworK3ByaW50ICIxLi45XG4iOworIAorICRmaWxlID0gInN0b3JhYmxlJCQiOworIDEgd2hpbGUgdW5saW5rICRmaWxlOworIHRyeW91dCgnTWVtb2l6ZTo6U3RvcmFibGUnLCAkZmlsZSwgMSk7ICAjIFRlc3QgMS4uNAorIDEgd2hpbGUgdW5saW5rICRmaWxlOworK3RyeW91dCgnTWVtb2l6ZTo6U3RvcmFibGUnLCAkZmlsZSwgNSwgJ25zdG9yZScpOyAgIyBUZXN0IDUuLjgKKythc3NlcnRfbmV0b3JkZXIoJGZpbGUsIDkpOyAgIyBUZXN0IDkKKysxIHdoaWxlIHVubGluayAkZmlsZTsKKysKKysKKytzdWIgYXNzZXJ0X25ldG9yZGVyIHsKKysgIG15ICgkZmlsZSwgJHRlc3RubykgPSBAXzsKKysKKysgIG15ICRuZXRvcmRlciA9IFN0b3JhYmxlOjpmaWxlX21hZ2ljKCRmaWxlKS0+eyduZXRvcmRlcid9OworKyAgcHJpbnQgKCRuZXRvcmRlciA/ICJvayAkdGVzdG5vXG4iIDogIm5vdCBvayAkdGVzdG5vXG4iKTsKKyt9CisgCisgc3ViIHRyeW91dCB7CistICBteSAoJHRpZXBhY2ssICRmaWxlLCAkdGVzdG5vKSA9IEBfOworKyAgbXkgKCR0aWVwYWNrLCAkZmlsZSwgJHRlc3RubywgJG9wdGlvbikgPSBAXzsKKyAKKy0gIHRpZSBteSAlY2FjaGUgPT4gJHRpZXBhY2ssICRmaWxlCistICAgIG9yIGRpZSAkITsKKysgIGlmIChkZWZpbmVkICRvcHRpb24pIHsKKysgICAgdGllIG15ICVjYWNoZSA9PiAkdGllcGFjaywgJGZpbGUsICRvcHRpb24KKysgICAgICBvciBkaWUgJCE7CisrICB9IGVsc2UgeworKyAgICB0aWUgbXkgJWNhY2hlID0+ICR0aWVwYWNrLCAkZmlsZQorKyAgICAgIG9yIGRpZSAkITsKKysgIH0KKyAKKyAgIG1lbW9pemUgJ2M1JywgCisgICBTQ0FMQVJfQ0FDSEUgPT4gW0hBU0ggPT4gXCVjYWNoZV0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzE5NzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgpAQCAtMCwwICsxLDI1IEBACitGcm9tIGZhMDg1ZmVkZDljNDA2ZWRjZDRhMWEyNTZjMDI1ZDVmZjdmNmM2ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFRodSwgMjAgU2VwIDIwMDcgMTk6NDc6MTQgKzEwMDAKK1N1YmplY3Q6IERvY3VtZW50IHRoZSBOZXQ6OlNNVFAgJ1BvcnQnIG9wdGlvbgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzEwMDE5NQorQnVnOiBodHRwOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9MzYwMzgKKworUGF0Y2gtTmFtZTogZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmCistLS0KKyBjcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbSBiL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQoraW5kZXggYWZkMDE3YS4uNmFlN2Q5ZSAxMDA2NDQKKy0tLSBhL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQorKysrIGIvY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtCitAQCAtNzM4LDYgKzczOCw3IEBAIE5ldDo6U01UUCB3aWxsIGF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgYWRkcmVzcyBmcm9tIHRoZSB2YWx1ZSBwYXNzZWQuCisgCisgQjxEZWJ1Zz4gLSBFbmFibGUgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgCisrQjxQb3J0PiAtIFNlbGVjdCBhIHBvcnQgb24gdGhlIHJlbW90ZSBob3N0IHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQgaXMgMjUpCisgCisgRXhhbXBsZToKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcGVybC1Dbm4uZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcGVybC1Dbm4uZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTU2NGZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gMGVjZjgzZjI1OWRiMDljYjM4Y2IzN2M5YjIyZTcyYmUxODVhZmE4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEh1Z28gdmFuIGRlciBTYW5kZW4gPGh2QGNyeXB0Lm9yZz4KK0RhdGU6IFRodSwgMTEgSnVuIDIwMTUgMTI6MjU6NDAgKzAxMDAKK1N1YmplY3Q6IGZpeCAtQ25uIHBhcnNpbmcKKworQ29tbWl0IDIyZmYzMTMwNjggZm9yIFtwZXJsICMxMjM4MTRdIGluYWR2ZXJ0ZW50bHkgY2hhbmdlZCB0aGUgbG9naWMgd2hlbgorcGFyc2luZyBhIG51bWVyaWMgcGFyYW1ldGVyIHRvIHRoZSAtQyBvcHRpb24sIHN1Y2ggdGhhdCB0aGUgc3VjY2Vzc2Z1bGx5CitwYXJzZWQgbnVtYmVyIHdhcyBub3Qgc2F2ZWQgYXMgdGhlIG9wdGlvbiB2YWx1ZSBpZiBpdCBwYXJzZWQgdG8gdGhlIGVuZAorb2YgdGhlIGFyZ3VtZW50LgorCitCdWc6IGh0dHBzOi8vcnQucGVybC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0xMjUzODEKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4ODYzNgorT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3Blcmw1LmdpdC5wZXJsLm9yZy9wZXJsLmdpdC9jb21taXQvODlkODRmZjk2NQorUGF0Y2gtTmFtZTogZml4ZXMvcGVybC1Dbm4uZGlmZgorLS0tCisgdC9ydW4vc3dpdGNoQy50IHwgIDcgKysrKysrLQorIHV0aWwuYyAgICAgICAgICB8IDE3ICsrKysrKysrLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcnVuL3N3aXRjaEMudCBiL3QvcnVuL3N3aXRjaEMudAoraW5kZXggZjZhYTg2OC4uNGY2M2MzYiAxMDA2NDQKKy0tLSBhL3QvcnVuL3N3aXRjaEMudAorKysrIGIvdC9ydW4vc3dpdGNoQy50CitAQCAtMTEsNyArMTEsNyBAQCBCRUdJTiB7CisgICAgIHNraXBfYWxsX2lmX21pbmlwZXJsKCctQyBhbmQgJEVOVntQRVJMX1VOSUNPREV9IGFyZSBkaXNhYmxlZCBvbiBtaW5pcGVybCcpOworIH0KKyAKKy1wbGFuKHRlc3RzID0+IDEzKTsKKytwbGFuKHRlc3RzID0+IDE0KTsKKyAKKyBteSAkcjsKKyAKK0BAIC0yNSw2ICsyNSwxMSBAQCAkciA9IHJ1bnBlcmwoIHN3aXRjaGVzID0+IFsgJy1DTycsICctdycgXSwKKyAgICAgICAgICAgICAgIHN0ZGVyciAgID0+IDEgKTsKKyBsaWtlKCAkciwgcXIvXiRiKD86XHI/XG4pPyQvcywgJy1DTzogbm8gd2FybmluZyBvbiBVVEYtOCBvdXRwdXQnICk7CisgCisrJHIgPSBydW5wZXJsKCBzd2l0Y2hlcyA9PiBbICctQzInLCAnLXcnIF0sCisrCSAgICAgIHByb2cgICAgID0+ICdwcmludCBjaHIoMjU2KScsCisrICAgICAgICAgICAgICBzdGRlcnIgICA9PiAxICk7CisrbGlrZSggJHIsIHFyL14kYig/OlxyP1xuKT8kL3MsICctQzI6IG5vIHdhcm5pbmcgb24gVVRGLTggb3V0cHV0JyApOworKworIFNLSVA6IHsKKyAgICAgaWYgKGV4aXN0cyAkRU5We1BFUkxfVU5JQ09ERX0gJiYKKyAJKCRFTlZ7UEVSTF9VTklDT0RFfSBlcSAiIiB8fCAkRU5We1BFUkxfVU5JQ09ERX0gPX4gL1tTT10vKSkgeworZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwuYworaW5kZXggOGNmNjJmNS4uZWUyMzMxNCAxMDA2NDQKKy0tLSBhL3V0aWwuYworKysrIGIvdXRpbC5jCitAQCAtNDQyMCwxNiArNDQyMCwxNSBAQCBQZXJsX3BhcnNlX3VuaWNvZGVfb3B0cyhwVEhYXyBjb25zdCBjaGFyICoqcG9wdCkKKyAgICAgICAgaWYgKGlzRElHSVQoKnApKSB7CisgICAgICAgICAgICAgY29uc3QgY2hhciogZW5kcHRyOworICAgICAgICAgICAgIFVWIHV2OworLSAgICAgICAgICAgIGlmIChncm9rX2F0b1VWKHAsICZ1diwgJmVuZHB0cikKKy0gICAgICAgICAgICAgICAgJiYgdXYgPD0gVTMyX01BWAorLSAgICAgICAgICAgICAgICAmJiAocCA9IGVuZHB0cikKKy0gICAgICAgICAgICAgICAgJiYgKnAgJiYgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInCistICAgICAgICAgICAgKSB7CisrICAgICAgICAgICAgaWYgKGdyb2tfYXRvVVYocCwgJnV2LCAmZW5kcHRyKSAmJiB1diA8PSBVMzJfTUFYKSB7CisgICAgICAgICAgICAgICAgIG9wdCA9IChVMzIpdXY7CistICAgICAgICAgICAgICAgIGlmIChpc1NQQUNFKCpwKSkKKy0gICAgICAgICAgICAgICAgICAgIGdvdG8gdGhlX2VuZF9vZl90aGVfb3B0c19wYXJzZXI7CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIFBlcmxfY3JvYWsoYVRIWF8gIlVua25vd24gVW5pY29kZSBvcHRpb24gbGV0dGVyICclYyciLCAqcCk7CisrICAgICAgICAgICAgICAgIHAgPSBlbmRwdHI7CisrICAgICAgICAgICAgICAgIGlmIChwICYmICpwICYmICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJykgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU1BBQ0UoKnApKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdGhlX2VuZF9vZl90aGVfb3B0c19wYXJzZXI7CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgUGVybF9jcm9hayhhVEhYXyAiVW5rbm93biBVbmljb2RlIG9wdGlvbiBsZXR0ZXIgJyVjJyIsICpwKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzljYTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYKQEAgLTAsMCArMSwxNzAgQEAKK0Zyb20gOTA1N2FkYzEwNmQ2YmJlZjUzYzllNzA2NTIzY2Q5NGYxYTdhMDhkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDMwIEF1ZyAyMDE0IDE1OjEwOjQxIC0wNzAwCitTdWJqZWN0OiBTdXBwb3J0IFBPRF9NQU5fREFURSBpbiBQb2Q6Ok1hbiBmb3IgdGhlIGxlZnQtaGFuZCBmb290ZXIKKworSG9ub3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBPRF9NQU5fREFURSBhbmQgdXNlIGl0cyBjb250ZW50cywgaWYKK3NldCwgYXMgdGhlIHZhbHVlIG9mIHRoZSBsZWZ0LWhhbmQgZm9vdGVyIGlmIHRoZSBkYXRlIG9wdGlvbiBpcyBub3QKK3NldCwgb3ZlcnJpZGluZyB0aGUgdGltZXN0YW1wIG9mIHRoZSBpbnB1dCBmaWxlLiAgVGhpcyBpcyBwcmltYXJpbHkKK3VzZWZ1bCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlIGJ1aWxkcyBvZiB0aGUgc2FtZSBvdXRwdXQgZmlsZSBnaXZlbiB0aGUKK3NhbWUgc291Y2UgYW5kIFBvZDo6TWFuIHZlcnNpb24sIGV2ZW4gd2hlbiBmaWxlIHRpbWVzdGFtcHMgbWF5IG5vdCBiZQorY29uc2lzdGVudC4gIFRoYW5rcywgTmlrbyBUeW5pLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc1OTQwNQorT3JpZ2luOiB1cHN0cmVhbQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgfCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgfCAyOSArKysrKysrKysrKysrLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggNzJjYTlmZi4uMDUzNjY2MiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTg3NiwyNSArODc2LDQyIEBAIHN1YiBkZXZpc2VfdGl0bGUgeworIH0KKyAKKyAjIERldGVybWluZSB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgYW5kIHJldHVybiB0aGF0LCBwcm9wZXJseSBmb3JtYXR0ZWQgaW4gSVNPCistIyBmb3JtYXQuICBJZiB3ZSBjYW4ndCBnZXQgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCwgaW5zdGVhZCB1c2UgdGhlCistIyBjdXJyZW50IHRpbWUuICBQb2Q6OlNpbXBsZSByZXR1cm5zIGEgY29tcGxldGVseSB1bnVzZWZ1bCBzdHJpbmdpZmllZCBmaWxlCistIyBoYW5kbGUgYXMgdGhlIHNvdXJjZV9maWxlbmFtZSBmb3IgaW5wdXQgZnJvbSBhIGZpbGUgaGFuZGxlLCBzbyB3ZSBoYXZlIHRvCistIyBkZWFsIHdpdGggdGhhdCBhcyB3ZWxsLgorKyMgZm9ybWF0LgorKyMKKysjIElmIFBPRF9NQU5fREFURSBpcyBzZXQsIHRoYXQgb3ZlcnJpZGVzIGFueXRoaW5nIGVsc2UuICBUaGlzIGNhbiBiZSB1c2VkIGZvcgorKyMgcmVwcm9kdWNpYmxlIGdlbmVyYXRpb24gb2YgdGhlIHNhbWUgZmlsZSBldmVuIGlmIHRoZSBpbnB1dCBmaWxlIHRpbWVzdGFtcHMKKysjIGFyZSB1bnByZWRpY3RhYmxlIG9yIHRoZSBQT0QgY29tcyBmcm9tIHN0YW5kYXJkIGlucHV0LgorKyMKKysjIE90aGVyd2lzZSwgdXNlIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgaWYgd2UgY2FuIHN0YXQgaXQuICBCZQorKyMgYXdhcmUgdGhhdCBQb2Q6OlNpbXBsZSByZXR1cm5zIHRoZSBzdHJpbmdpZmljYXRpb24gb2YgdGhlIGZpbGUgaGFuZGxlIGFzCisrIyBzb3VyY2VfZmlsZW5hbWUgZm9yIGlucHV0IGZyb20gYSBmaWxlIGhhbmRsZSwgc28gd2UnbGwgc3RhdCBzb21lIHJhbmRvbSByZWYKKysjIHN0cmluZyBpbiB0aGF0IGNhc2UuICBJZiB0aGF0IGZhaWxzLCBpbnN0ZWFkIHVzZSB0aGUgY3VycmVudCB0aW1lLgorKyMKKysjICRzZWxmIC0gUG9kOjpNYW4gb2JqZWN0LCB1c2VkIHRvIGdldCB0aGUgc291cmNlIGZpbGUKKysjCisrIyBSZXR1cm5zOiBZWVlZLU1NLUREIGRhdGUgc3VpdGFibGUgZm9yIHRoZSBsZWZ0LWhhbmQgZm9vdGVyCisgc3ViIGRldmlzZV9kYXRlIHsKKyAgICAgbXkgKCRzZWxmKSA9IEBfOworKworKyAgICAjIElmIFBPRF9NQU5fREFURSBpcyBzZXQsIGFsd2F5cyB1c2UgaXQuCisrICAgIGlmICgkRU5We1BPRF9NQU5fREFURX0pIHsKKysgICAgICAgIHJldHVybiAkRU5We1BPRF9NQU5fREFURX07CisrICAgIH0KKysKKysgICAgIyBPdGhlcndpc2UsIGdldCB0aGUgaW5wdXQgZmlsZW5hbWUgYW5kIHRyeSB0byBzdGF0IGl0LiAgSWYgdGhhdCBmYWlscywKKysgICAgIyB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKyAgICAgbXkgJGlucHV0ID0gJHNlbGYtPnNvdXJjZV9maWxlbmFtZTsKKyAgICAgbXkgJHRpbWU7CisgICAgIGlmICgkaW5wdXQpIHsKKy0gICAgICAgICR0aW1lID0gKHN0YXQgJGlucHV0KVs5XSB8fCB0aW1lOworKyAgICAgICAgJHRpbWUgPSAoc3RhdCgkaW5wdXQpKVs5XSB8fCB0aW1lKCk7CisgICAgIH0gZWxzZSB7CistICAgICAgICAkdGltZSA9IHRpbWU7CisrICAgICAgICAkdGltZSA9IHRpbWUoKTsKKyAgICAgfQorIAorLSAgICAjIENhbid0IHVzZSBQT1NJWDo6c3RyZnRpbWUoKSwgd2hpY2ggdXNlcyBGY250bCwgYmVjYXVzZSBNYWtlTWFrZXIKKy0gICAgIyB1c2VzIHRoaXMgYW5kIGl0IGhhcyB0byB3b3JrIGluIHRoZSBjb3JlIHdoaWNoIGNhbid0IGxvYWQgZHluYW1pYworLSAgICAjIGxpYnJhcmllcy4KKy0gICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGxvY2FsdGltZSAkdGltZSlbNSw0LDNdOworLSAgICByZXR1cm4gc3ByaW50ZiAoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKysgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKysgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorKyAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAobG9jYWx0aW1lKCR0aW1lKSlbNSw0LDNdOworKyAgICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworIH0KKyAKKyAjIFByaW50IG91dCB0aGUgcHJlYW1ibGUgYW5kIHRoZSB0aXRsZS4gIFRoZSBtZWFuaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gLlRICitAQCAtMTYzMiw2ICsxNjQ5LDE1IEBAIGFyZ3VtZW50LgorIFNldHMgdGhlIGNlbnRlcmVkIHBhZ2UgaGVhZGVyIHRvIHVzZSBpbnN0ZWFkIG9mICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwKKyBEb2N1bWVudGF0aW9uIi4KKyAKKys9aXRlbSBkYXRlCisrCisrU2V0cyB0aGUgbGVmdC1oYW5kIGZvb3Rlci4gIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIHRoZSBjb250ZW50cyBvZiB0aGUKKytlbnZpcm9ubWVudCB2YXJpYWJsZSBQT0RfTUFOX0RBVEUsIGlmIHNldCwgd2lsbCBiZSB1c2VkLiAgRmFpbGluZyB0aGF0LAorK3RoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IHRpbWUKKytpZiBzdGF0KCkgY2FuJ3QgZmluZCB0aGF0IGZpbGUgKHdoaWNoIHdpbGwgYmUgdGhlIGNhc2UgaWYgdGhlIGlucHV0IGlzCisrZnJvbSBDPFNURElOPikuICBJZiBvYnRhaW5lZCBmcm9tIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiBkYXRlIG9yIHRoZQorK2N1cnJlbnQgdGltZSwgaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcyBDPFlZWVktTU0tREQ+LgorKworID1pdGVtIGVycm9ycworIAorIEhvdyB0byByZXBvcnQgZXJyb3JzLiAgQzxkaWU+IHNheXMgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIG9uIGFueSBQT0QKK0BAIC0xNjQyLDEzICsxNjY4LDYgQEAgUE9EIGVycm9ycyBlbnRpcmVseSwgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAKKyBUaGUgZGVmYXVsdCBpcyBDPHBvZD4uCisgCistPWl0ZW0gZGF0ZQorLQorLVNldHMgdGhlIGxlZnQtaGFuZCBmb290ZXIuICBCeSBkZWZhdWx0LCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0CistZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh0aGUKKy1jYXNlIGlmIHRoZSBpbnB1dCBpcyBmcm9tIEM8U1RESU4+KSwgYW5kIHRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzCistQzxZWVlZLU1NLUREPi4KKy0KKyA9aXRlbSBmaXhlZAorIAorIFRoZSBmaXhlZC13aWR0aCBmb250IHRvIHVzZSBmb3IgdmVyYmF0aW0gdGV4dCBhbmQgY29kZS4gIERlZmF1bHRzIHRvCitAQCAtMTgxMCw2ICsxODI5LDIwIEBAIG9wdGlvbiB3YXMgc2V0IHRvIEM8ZGllPi4KKyAKKyA9YmFjaworIAorKz1oZWFkMSBFTlZJUk9OTUVOVAorKworKz1vdmVyIDQKKysKKys9aXRlbSBQT0RfTUFOX0RBVEUKKysKKytJZiBzZXQsIHRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC1oYW5kIGZvb3RlciB1bmxlc3MgdGhlCisrQzxkYXRlPiBvcHRpb24gaXMgZXhwbGljaXRseSBzZXQsIG92ZXJyaWRpbmcgdGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5wdXQKKytmaWxlIG9yIHRoZSBjdXJyZW50IHRpbWUuICBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgdG8gZW5zdXJlIHJlcHJvZHVjaWJsZQorK2J1aWxkcyBvZiB0aGUgc2FtZSBvdXRwdXQgZmlsZSBnaXZlbiB0aGUgc2FtZSBzb3VjZSBhbmQgUG9kOjpNYW4gdmVyc2lvbiwKKytldmVuIHdoZW4gZmlsZSB0aW1lc3RhbXBzIG1heSBub3QgYmUgY29uc2lzdGVudC4KKysKKys9YmFjaworKworID1oZWFkMSBCVUdTCisgCisgRW5jb2RpbmcgaGFuZGxpbmcgYXNzdW1lcyB0aGF0IFBlcmxJTyBpcyBhdmFpbGFibGUgYW5kIGRvZXMgbm90IHdvcmsKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK2luZGV4IDNjY2U5ZjUuLmM2MTBkZDkgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorQEAgLTEsMTUgKzEsMjggQEAKKy0jIS91c3IvYmluL3BlcmwgLXcKKy0KKy0jIEluIG9yZGVyIGZvciBNYWtlTWFrZXIgdG8gYnVpbGQgaW4gdGhlIGNvcmUsIG5vdGhpbmcgY2FuIHVzZQorLSMgRmNudGwgd2hpY2ggaW5jbHVkZXMgUE9TSVguICBkZXZpc2VfZGF0ZSgpJ3MgdXNlIG9mIHN0cmZ0aW1lKCkKKy0jIHdhcyByZXBsYWNlZC4gIFRoaXMgdGVzdHMgdGhhdCBpdCdzIGlkZW50aWNhbC4KKysjIS91c3IvYmluL3BlcmwKKysjCisrIyBJbiBvcmRlciBmb3IgTWFrZU1ha2VyIHRvIGJ1aWxkIGluIHRoZSBjb3JlLCBub3RoaW5nIGNhbiB1c2UgRmNudGwgd2hpY2gKKysjIGluY2x1ZGVzIFBPU0lYLiAgZGV2aXNlX2RhdGUoKSdzIHVzZSBvZiBzdHJmdGltZSgpIHdhcyByZXBsYWNlZC4gIFRoaXMgdGVzdHMKKysjIHRoYXQgaXQncyBpZGVudGljYWwuICBJdCBhbHNvIHRlc3RzIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGhlIFBPRF9NQU5fREFURQorKyMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgCisrdXNlIDUuMDA2OworIHVzZSBzdHJpY3Q7CistCistdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTsKKyt1c2Ugd2FybmluZ3M7CisgCisgdXNlIFBvZDo6TWFuOworIHVzZSBQT1NJWCBxdyhzdHJmdGltZSk7CisgCisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjsKKysKKysjIENoZWNrIHRoYXQgdGhlIHJlc3VsdHMgb2YgZGV2aWNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZS4gIFRoZXJlIGlzIG5vIGlucHV0CisrIyBmaWxlIG5hbWUsIHNvIHRoaXMgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKyBteSAkcGFyc2VyID0gUG9kOjpNYW4tPm5ldzsKKy1pcyAkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgc3RyZnRpbWUoIiVZLSVtLSVkIiwgbG9jYWx0aW1lKTsKKytpcygKKysgICAgJHBhcnNlci0+ZGV2aXNlX2RhdGUsCisrICAgIHN0cmZ0aW1lKCclWS0lbS0lZCcsIGxvY2FsdGltZSgpKSwKKysgICAgJ2RldmlzZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUnCisrKTsKKysKKysjIFNldCB0aGUgb3ZlcnJpZGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGVuc3VyZSB0aGF0IGl0J3MgaG9ub3JlZC4KKytsb2NhbCAkRU5We1BPRF9NQU5fREFURX0gPSAnMjAxNC0wMS0wMSc7CisraXMoJHBhcnNlci0+ZGV2aXNlX2RhdGUsICcyMDE0LTAxLTAxJywgJ2RldmlzZV9kYXRlIGhvbm9ycyBQT0RfTUFOX0RBVEUnKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWJiZjljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gMTgzYmI0YWY3YWQ4NjJhMmNmMzFkMGRjYjNkZDQ1YzEwMGY3Njc3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAyMjoyMToyNSAtMDcwMAorU3ViamVjdDogU3VwcG9ydCBhbiBlbXB0eSBQT0RfTUFOX0RBVEUgZW52aXJvbm1lbnQgdmFyaWFibGUKKworT25lIG1heSB3YW50IHRvIHNldCB0aGlzIHRvIGFuIGVtcHR5IHN0cmluZy4gIEhhbmRsZSB0aGF0IGNvcnJlY3RseS4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPWUwZTlmY2I1M2U4ZmM5NTRiMmIxOTU1Mzg1ZWVhMThjMjdmODY5YWYKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gIHwgMiArLQorIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCB8IDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCAzNjU4OTJlLi44OTk3YTE1IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtODk0LDcgKzg5NCw3IEBAIHN1YiBkZXZpc2VfZGF0ZSB7CisgICAgIG15ICgkc2VsZikgPSBAXzsKKyAKKyAgICAgIyBJZiBQT0RfTUFOX0RBVEUgaXMgc2V0LCBhbHdheXMgdXNlIGl0LgorLSAgICBpZiAoJEVOVntQT0RfTUFOX0RBVEV9KSB7CisrICAgIGlmIChkZWZpbmVkKCRFTlZ7UE9EX01BTl9EQVRFfSkpIHsKKyAgICAgICAgIHJldHVybiAkRU5We1BPRF9NQU5fREFURX07CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK2luZGV4IDlkYTlkMWIuLjI3MjcxZDkgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorQEAgLTEyLDcgKzEyLDcgQEAgdXNlIHdhcm5pbmdzOworIHVzZSBQb2Q6Ok1hbjsKKyB1c2UgUE9TSVggcXcoc3RyZnRpbWUpOworIAorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMzsKKyAKKyAjIENoZWNrIHRoYXQgdGhlIHJlc3VsdHMgb2YgZGV2aWNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZS4gIFRoZXJlIGlzIG5vIGlucHV0CisgIyBmaWxlIG5hbWUsIHNvIHRoaXMgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KK0BAIC0yNiwzICsyNiw3IEBAIGlzKAorICMgU2V0IHRoZSBvdmVycmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBob25vcmVkLgorIGxvY2FsICRFTlZ7UE9EX01BTl9EQVRFfSA9ICcyMDE0LTAxLTAxJzsKKyBpcygkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgJzIwMTQtMDEtMDEnLCAnZGV2aXNlX2RhdGUgaG9ub3JzIFBPRF9NQU5fREFURScpOworKworKyMgQ2hlY2sgdGhhdCBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBob25vcmVkLgorK2xvY2FsICRFTlZ7UE9EX01BTl9EQVRFfSA9IHF7fTsKKytpcygkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgcXt9LCAnZGV2aXNlX2RhdGUgaG9ub3JzIGVtcHR5IFBPRF9NQU5fREFURScpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjAzNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYKQEAgLTAsMCArMSwxMDkgQEAKK0Zyb20gNzY3MWQxMDFiYWE3NWQ3YTc5YmZiZDhjNzVjMTU5NWZiYjNmNTNiYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPgorRGF0ZTogU2F0LCA3IEZlYiAyMDE1IDE5OjAzOjM0IC0wODAwCitTdWJqZWN0OiBCZXR0ZXIgZXJyb3JzIGZvciBtYW4gcGFnZXMgZnJvbSBzdGFuZGFyZCBpbnB1dAorCitbUG9kOjpNYW5dIEF0dGVtcHQgdG8gZGV0ZWN0IGlmIHRoZSBpbnB1dCBjYW1lIGZyb20gYSBwaXBlIGFuZAordGhlcmVmb3JlIGhhcyBhIGNvbXBsZXRlbHkgdW5oZWxwZnVsIChhbmQgbm9ucmVwcm9kdWNpYmxlKSBzb3VyY2UgZmlsZQorbmFtZSwgYW5kIGRpYWdub3NlIHRoaXMgYXMgYW4gZXJyb3IuICBEb2N1bWVudCB0aGF0IHRoZSBuYW1lIG9wdGlvbgorKC0tbmFtZSB0byBwb2QybWFuKSBpcyByZXF1aXJlZCB3aGVuIHByb2Nlc3NpbmcgUE9EIHNvdXJjZSBmcm9tCitzdGFuZGFyZCBpbnB1dC4gIChEZWJpYW4gQnVnIzc3NzQwNSkKKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPWQ5ODg3MmU0NmM5Mzg2MWI3YWJhMTQ5NDllMTI1ODcxMjA4N2RjNTUKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc3NzQwNQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXBpcGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gICAgIHwgMTUgKysrKysrKysrKysrKysrCisgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIHwgIDQgKysrKworIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQgICB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNzU1IGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDg5OTdhMTUuLjk2OWVhZmYgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC04MjgsNiArODI4LDE3IEBAIHN1YiBkZXZpc2VfdGl0bGUgeworICAgICAkc2VjdGlvbiA9IDMgaWYgKCEkJHNlbGZ7c2VjdGlvbn0gJiYgJG5hbWUgPX4gL1wucG1cei9pKTsKKyAgICAgJG5hbWUgPX4gcy9cLnAob2R8W2xtXSlcei8vaTsKKyAKKysgICAgIyBJZiBQb2Q6OlBhcnNlciBnYXZlIHVzIGFuIElPOjpGaWxlIHJlZmVyZW5jZSBhcyB0aGUgc291cmNlIGZpbGUgbmFtZSwKKysgICAgIyBjb252ZXJ0IHRoYXQgdG8gdGhlIGVtcHR5IHN0cmluZyBhcyB3ZWxsLiAgVGhlbiwgaWYgd2UgZG9uJ3QgaGF2ZSBhCisrICAgICMgdmFsaWQgbmFtZSwgZW1pdCBhIHdhcm5pbmcgYW5kIGNvbnZlcnQgaXQgdG8gU1RESU4uCisrICAgIGlmICgkbmFtZSA9fiAvXklPOjpGaWxlKD86PVx3KylcKDB4W1xkYS1mXStcKSQvaSkgeworKyAgICAgICAgJG5hbWUgPSAnJzsKKysgICAgfQorKyAgICBpZiAoJG5hbWUgZXEgJycpIHsKKysgICAgICAgICRzZWxmLT53aGluZSAoMSwgJ05vIG5hbWUgZ2l2ZW4gZm9yIGRvY3VtZW50Jyk7CisrICAgICAgICAkbmFtZSA9ICdTVERJTic7CisrICAgIH0KKysKKyAgICAgIyBJZiB0aGUgc2VjdGlvbiBpc24ndCAzLCB0aGVuIHRoZSBuYW1lIGRlZmF1bHRzIHRvIGp1c3QgdGhlIGJhc2VuYW1lIG9mCisgICAgICMgdGhlIGZpbGUuICBPdGhlcndpc2UsIGFzc3VtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtb2R1bGUuICBXZSB3YW50IHRvCisgICAgICMgZmlndXJlIG91dCB0aGUgZnVsbCBtb2R1bGUgbmFtZSBmcm9tIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBidXQgd2UgZG9uJ3QKK0BAIC0xNzA1LDYgKzE3MTYsMTAgQEAgbW9kdWxlIHBhdGguICBJZiBpdCBpcywgYSBwYXRoIGxpa2UgQzwuLi4vbGliL1BvZC9NYW4ucG0+IGlzIGNvbnZlcnRlZCBpbnRvCisgYSBuYW1lIGxpa2UgQzxQb2Q6Ok1hbj4uICBUaGlzIG9wdGlvbiwgaWYgZ2l2ZW4sIG92ZXJyaWRlcyBhbnkgYXV0b21hdGljCisgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbmFtZS4KKyAKKytJZiBnZW5lcmF0aW5nIGEgbWFudWFsIHBhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dCwgdGhpcyBvcHRpb24gaXMgcmVxdWlyZWQsCisrc2luY2UgdGhlcmUncyBvdGhlcndpc2Ugbm8gd2F5IGZvciBQb2Q6Ok1hbiB0byBrbm93IHdoYXQgdG8gdXNlIGZvciB0aGUKKyttYW51YWwgcGFnZSBuYW1lLgorKworID1pdGVtIG5vdXJscworIAorIE5vcm1hbGx5LCBMWjw+PD4gZm9ybWF0dGluZyBjb2RlcyB3aXRoIGEgVVJMIGJ1dCBhbmNob3IgdGV4dCBhcmUgZm9ybWF0dGVkCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitpbmRleCAzODY5NWY4Li40M2UzNWRmIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCisrKysgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK0BAIC0yMzYsNiArMjM2LDEwIEBAIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBwcm9iYWJseSBub3QgdXNlZnVsIHdoZW4gY29udmVydGluZyBtdWx0aXBsZSBQT0QKKyBmaWxlcyBhdCBvbmNlLiAgVGhlIGNvbnZlbnRpb24gZm9yIFVuaXggbWFuIHBhZ2VzIGZvciBjb21tYW5kcyBpcyBmb3IgdGhlCisgbWFuIHBhZ2UgdGl0bGUgdG8gYmUgaW4gYWxsLXVwcGVyY2FzZSBldmVuIGlmIHRoZSBjb21tYW5kIGlzbid0LgorIAorK1doZW4gY29udmVydGluZyBQT0Qgc291cmNlIGZyb20gc3RhbmRhcmQgaW5wdXQsIHRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLAorK3NpbmNlIHRoZXJlJ3Mgb3RoZXJ3aXNlIG5vIHdheSB0byBrbm93IHdoYXQgdG8gdXNlIGFzIHRoZSBuYW1lIG9mIHRoZQorK21hbnVhbCBwYWdlLgorKworID1pdGVtIEI8LS1ub3VybHM+CisgCisgTm9ybWFsbHksIExaPD48PiBmb3JtYXR0aW5nIGNvZGVzIHdpdGggYSBVUkwgYnV0IGFuY2hvciB0ZXh0IGFyZSBmb3JtYXR0ZWQKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjg2Mzk0NDEKKy0tLSAvZGV2L251bGwKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIS91c3IvYmluL3BlcmwKKysjCisrIyBUZXN0cyBmb3IgdGhlIGF1dG9tYXRpYyBkZXRlcm1pbmF0aW9uIG9mIHRoZSBtYW51YWwgcGFnZSB0aXRsZSBpZiBub3QKKysjIHNwZWNpZmllZCB2aWEgb3B0aW9ucyB0byBwb2QybWFuIG9yIHRoZSBQb2Q6Ok1hbiBjb25zdHJ1Y3Rvci4KKysKKyt1c2UgNS4wMDY7CisrdXNlIHN0cmljdDsKKyt1c2Ugd2FybmluZ3M7CisrCisrdXNlIEZpbGU6OlNwZWM7CisrdXNlIElPOjpGaWxlOworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDM7CisrCisrQkVHSU4geworKyAgICB1c2Vfb2soJ1BvZDo6TWFuJyk7CisrfQorKworKyMgQ3JlYXRlIGEgcGFyc2VyIGFuZCBzZXQgaXQgdXAgd2l0aCBhbiBpbnB1dCBzb3VyY2UuICBUaGVyZSBpc24ndCBhIHdheSB0byBkbworKyMgdGhpcyBpbiBQb2Q6OlNpbXBsZSB3aXRob3V0IGFjdHVhbGx5IHBhcnNpbmcgdGhlIGRvY3VtZW50LCBzbyBzZW5kIHRoZQorKyMgb3V0cHV0IHRvIGEgc3RyaW5nIHRoYXQgd2UnbGwgaWdub3JlLgorK215ICRwYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCd0JywgJ2RhdGEnLCAnYmFzaWMucG9kJyk7CisrbXkgJGhhbmRsZSA9IElPOjpGaWxlLT5uZXcoJHBhdGgsICdyJyk7CisrbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXcoZXJyb3JzID0+ICdwb2QnKTsKKytteSAkb3V0cHV0OworKyRwYXJzZXItPm91dHB1dF9zdHJpbmcoXCRvdXRwdXQpOworKyRwYXJzZXItPnBhcnNlX2ZpbGUoJGhhbmRsZSk7CisrCisrIyBDaGVjayB0aGUgcmVzdWx0cyBvZiBkZXZpc2VfdGl0bGUgZm9yIHRoaXMuICBXZSBzaG91bGQgZ2V0IGJhY2sgU1RESU4sIGFuZAorKyMgd2Ugc2hvdWxkIGhhdmUgcmVwb3J0ZWQgYW4gZXJyb3IuCisrbXkgKCRuYW1lLCAkc2VjdGlvbikgPSAkcGFyc2VyLT5kZXZpc2VfdGl0bGU7CisraXMoJG5hbWUsICdTVERJTicsICdkZXZpc2VfdGl0bGUgdXNlcyBTVERJTiBmb3IgZmlsZSBoYW5kbGUgaW5wdXQnKTsKKytvaygkcGFyc2VyLT5lcnJvcnNfc2VlbiwgJy4uLmFuZCBlcnJvcnMgd2VyZSBzZWVuJyk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMtZG9jcy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2RmZWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgpAQCAtMCwwICsxLDg2IEBACitGcm9tIDYxOTg4NTZiNTMyM2Q2MjA0MDk0MjkzZjAxYjg5MDQ3MjYxOGYxODIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMjA6NDk6MDcgLTA3MDAKK1N1YmplY3Q6IERvY3VtZW50YXRpb24gYW5kIHRlc3Qgc3VpdGUgdXBkYXRlcyBmb3IgVVRDIGZpeAorCitVcGRhdGUgdGhlIFBvZDo6TWFuIGFuZCBwb2QybWFuIGRvY3VtZW50YXRpb24gYW5kIHRoZSB0ZXN0IHN1aXRlCitmb3IgdGhlIG5ldyBVVEMtYmFzZWQgZGVmYXVsdCBwYWdlIGZvb3RlciwgYW5kIGFkZCBhIENoYW5nZXMKK2VudHJ5LgorCisoYmFja3BvcnRlZCB0byBQZXJsIDUuMjAuMiBieSBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+KQorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9NTJkYjkzYmY4MGU0YTA2Zjg0OTdlNGViYWRlMDUwNmI2ZWUwZTcwZAorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgwMjU5CitQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gICAgIHwgIDYgKysrKystCisgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIHwgMTEgKysrKysrLS0tLS0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgICAgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IGMzYmEyMDEuLjM2NTg5MmUgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC05MTAsNiArOTEwLDggQEAgc3ViIGRldmlzZV9kYXRlIHsKKyAKKyAgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKyAgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorKyAgICAjIFVzZSBnbXRpbWUgaW5zdGVhZCBvZiBsb2NhbHRpbWUgc28gdGhhdCB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlIGRvZXMgbm90CisrICAgICMgZGVwZW5kIG9uIHRoZSBsb2NhbCB0aW1lIHpvbmUgc2V0dGluZyBhbmQgaXMgbW9yZSByZXByb2R1Y2libGUKKyAgICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGdtdGltZSgkdGltZSkpWzUsNCwzXTsKKyAgICAgcmV0dXJuIHNwcmludGYoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKyB9CitAQCAtMTY1Niw3ICsxNjU4LDkgQEAgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9EX01BTl9EQVRFLCBpZiBzZXQsIHdpbGwgYmUgdXNlZC4gIEZhaWxpbmcgdGhhdCwKKyB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCB0aW1lCisgaWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh3aGljaCB3aWxsIGJlIHRoZSBjYXNlIGlmIHRoZSBpbnB1dCBpcworIGZyb20gQzxTVERJTj4pLiAgSWYgb2J0YWluZWQgZnJvbSB0aGUgZmlsZSBtb2RpZmljYXRpb24gZGF0ZSBvciB0aGUKKy1jdXJyZW50IHRpbWUsIGhlIGRhdGUgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgQzxZWVlZLU1NLUREPi4KKytjdXJyZW50IHRpbWUsIHRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEM8WVlZWS1NTS1ERD4gYW5kIHdpbGwgYmUgYmFzZWQKKytvbiBVVEMgKHNvIHRoYXQgdGhlIG91dHB1dCB3aWxsIGJlIHJlcHJvZHVjaWJsZSByZWdhcmRsZXNzIG9mIGxvY2FsIHRpbWUKKyt6b25lKS4KKyAKKyA9aXRlbSBlcnJvcnMKKyAKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK2luZGV4IDZhZjM0NzQuLjM4Njk1ZjggMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAorQEAgLTE3NCw5ICsxNzQsMTAgQEAgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIiwgYnV0IGFsc28gc2VlIEI8LS1vZmZpY2lhbD4gYmVsb3cuCisgCisgPWl0ZW0gQjwtZD4gSTxzdHJpbmc+LCBCPC0tZGF0ZT49STxzdHJpbmc+CisgCistU2V0IHRoZSBsZWZ0LWhhbmQgZm9vdGVyIHN0cmluZyB0byB0aGlzIHZhbHVlLiAgQnkgZGVmYXVsdCwgdGhlIG1vZGlmaWNhdGlvbgorLWRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCBkYXRlIGlmIGlucHV0IGNvbWVzIGZyb20KKy1DPFNURElOPi4KKytTZXQgdGhlIGxlZnQtaGFuZCBmb290ZXIgc3RyaW5nIHRvIHRoaXMgdmFsdWUuICBCeSBkZWZhdWx0LCB0aGUKKyttb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYKKytpbnB1dCBjb21lcyBmcm9tIEM8U1RESU4+LCBhbmQgd2lsbCBiZSBiYXNlZCBvbiBVVEMgKHNvIHRoYXQgdGhlIG91dHB1dAorK3dpbGwgYmUgcmVwcm9kdWNpYmxlIHJlZ2FyZGxlc3Mgb2YgbG9jYWwgdGltZSB6b25lKS4KKyAKKyA9aXRlbSBCPC1lcnJvcnM+PUk8c3R5bGU+CisgCitAQCAtMzgzLDggKzM4NCw4IEBAIEI8cG9kMm1hbj4gYnkgTGFycnkgV2FsbCBhbmQgVG9tIENocmlzdGlhbnNlbi4KKyAKKyA9aGVhZDEgQ09QWVJJR0hUIEFORCBMSUNFTlNFCisgCistQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTMgUnVzcworLUFsbGJlcnkgPHJyYUBzdGFuZm9yZC5lZHU+LgorK0NvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0LAorKzIwMTUgUnVzcyBBbGxiZXJ5IDxycmFAY3Bhbi5vcmc+LgorIAorIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitpbmRleCBjNjEwZGQ5Li45ZGE5ZDFiIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK0BAIC0xOSw3ICsxOSw3IEBAIHVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisgbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXc7CisgaXMoCisgICAgICRwYXJzZXItPmRldmlzZV9kYXRlLAorLSAgICBzdHJmdGltZSgnJVktJW0tJWQnLCBsb2NhbHRpbWUoKSksCisrICAgIHN0cmZ0aW1lKCclWS0lbS0lZCcsIGdtdGltZSgpKSwKKyAgICAgJ2RldmlzZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUnCisgKTsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkN2I5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYzc5Njc3NWNkYmQyY2NlMDZhY2JiN2FjMzU1MTg3ZDQwNjMwMTdhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzIExhbWIgPGxhbWJ5QGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDIwOjQyOjUzIC0wNzAwCitTdWJqZWN0OiBNYWtlIHRoZSBlbWJlZGRlZCBkYXRlIGZyb20gUG9kOjpNYW4gcmVwcm9kdWNpYmxlCisKK1doaWxlIHdvcmtpbmcgb24gdGhlICJyZXByb2R1Y2libGUgYnVpbGRzIiBlZmZvcnQsIHdlIGhhdmUgbm90aWNlZAordGhhdCBQb2Q6Ok1hbiBnZW5lcmF0ZXMgb3V0cHV0IHRoYXQgdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAordGltZXpvbmUuCisKK1RoZSBhdHRhY2hlZCBwYXRjaCBmaXhlcyB0aGlzIGJ5IHVzaW5nIEdNVCAoflVUQykgZGF0ZXMgaW5zdGVhZC4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPTkxM2ZiYjJiZDJjZTA3MWUyMDEyODYyOTMwMmFlMjg1MjU1NGNhZDQKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDA1MzY2NjIuLmMzYmEyMDEgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC05MTAsNyArOTEwLDcgQEAgc3ViIGRldmlzZV9kYXRlIHsKKyAKKyAgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKyAgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorLSAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAobG9jYWx0aW1lKCR0aW1lKSlbNSw0LDNdOworKyAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAoZ210aW1lKCR0aW1lKSlbNSw0LDNdOworICAgICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNDk4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmCkBAIC0wLDAgKzEsMTUzIEBACitGcm9tIGQ5ZDUzNWVmOTdmNTdhZjZlOTcyODA3NTk0NGMzM2YzYjBiNTM3MmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogUmVzcGVjdCB1bWFzayBkdXJpbmcgaW5zdGFsbGF0aW9uCisKK1RoaXMgaXMgbmVlZGVkIHRvIHNhdGlzZnkgRGViaWFuIHBvbGljeSByZWdhcmRpbmcgZ3JvdXAtd3JpdGFibGUKK3NpdGUgZGlyZWN0b3JpZXMuCisKK1BhdGNoLU5hbWU6IGZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0gYi9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KK2luZGV4IDFlOGFjNGMuLjNlNzkxMjEgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbQorQEAgLTQ1MSw3ICs0NTEsNyBAQCBzdWIgX2Nhbl93cml0ZV9kaXIgeworIAorID1wb2QKKyAKKy09aXRlbSBfbWtwYXRoKCRkaXIsJHNob3csJG1vZGUsJHZlcmJvc2UsJGRyeV9ydW4pCisrPWl0ZW0gX21rcGF0aCgkZGlyLCRzaG93LCR2ZXJib3NlLCRkcnlfcnVuKQorIAorIFdyYXBwZXIgYXJvdW5kIEZpbGU6OlBhdGg6Om1rcGF0aCgpIHRvIGhhbmRsZSBlcnJvcnMuCisgCitAQCAtNDY4LDEzICs0NjgsMTMgQEAgd3JpdGFibGUuCisgPWN1dAorIAorIHN1YiBfbWtwYXRoIHsKKy0gICAgbXkgKCRkaXIsJHNob3csJG1vZGUsJHZlcmJvc2UsJGRyeV9ydW4pPUBfOworKyAgICBteSAoJGRpciwkc2hvdywkdmVyYm9zZSwkZHJ5X3J1bik9QF87CisgICAgIGlmICggJHZlcmJvc2UgJiYgJHZlcmJvc2UgPiAxICYmICEgLWQgJGRpcikgeworICAgICAgICAgJHNob3c9IDE7CistICAgICAgICBwcmludGYgIm1rcGF0aCglcywlZCwlI28pXG4iLCAkZGlyLCAkc2hvdywgJG1vZGU7CisrICAgICAgICBwcmludGYgIm1rcGF0aCglcywlZClcbiIsICRkaXIsICRzaG93OworICAgICB9CisgICAgIGlmICghJGRyeV9ydW4pIHsKKy0gICAgICAgIGlmICggISBldmFsIHsgRmlsZTo6UGF0aDo6bWtwYXRoKCRkaXIsJHNob3csJG1vZGUpOyAxIH0gKSB7CisrICAgICAgICBpZiAoICEgZXZhbCB7IEZpbGU6OlBhdGg6Om1rcGF0aCgkZGlyLCRzaG93KTsgMSB9ICkgeworICAgICAgICAgICAgIF9jaG9rZSgiQ2FuJ3QgY3JlYXRlICckZGlyJyIsIiRAIik7CisgICAgICAgICB9CisgCitAQCAtNzgzLDcgKzc4Myw3IEBAIHN1YiBpbnN0YWxsIHsgI1hYWCBPUy1TUEVDSUZJQworICAgICAgICAgX2NoZGlyKCRjd2QpOworICAgICB9CisgICAgIGZvcmVhY2ggbXkgJHRhcmdldGRpciAoc29ydCBrZXlzICVjaGVja19kaXJzKSB7CistICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICB9CisgICAgIGZvcmVhY2ggbXkgJGZvdW5kIChAZm91bmRfZmlsZXMpIHsKKyAgICAgICAgIG15ICgkZGlmZiwgJGZmZCwgJG9yaWdmaWxlLCAkbW9kZSwgJHNpemUsICRhdGltZSwgJG10aW1lLAorQEAgLTc5Nyw3ICs3OTcsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRmaWxlPSBfdW5saW5rX29yX3JlbmFtZSggJHRhcmdldGZpbGUsICd0cnloYXJkJywgJ2luc3RhbGwnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgJGRyeV9ydW47CisgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCAhIC1kICR0YXJnZXRkaXIgKSB7CistICAgICAgICAgICAgICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgICAgICAgICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHByaW50ICJJbnN0YWxsaW5nICR0YXJnZXRmaWxlXG4iOworIAorQEAgLTgzNyw3ICs4MzcsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAKKyAgICAgaWYgKCRwYWNreyd3cml0ZSd9KSB7CisgICAgICAgICAkZGlyID0gaW5zdGFsbF9yb290ZWRfZGlyKGRpcm5hbWUoJHBhY2t7J3dyaXRlJ30pKTsKKy0gICAgICAgIF9ta3BhdGgoICRkaXIsIDAsIDA3NTUsICR2ZXJib3NlLCAkZHJ5X3J1biApOworKyAgICAgICAgX21rcGF0aCggJGRpciwgMCwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisgICAgICAgICBwcmludCAiV3JpdGluZyAkcGFja3snd3JpdGUnfVxuIiBpZiAkdmVyYm9zZTsKKyAgICAgICAgICRwYWNrbGlzdC0+d3JpdGUoaW5zdGFsbF9yb290ZWRfZmlsZSgkcGFja3snd3JpdGUnfSkpIHVubGVzcyAkZHJ5X3J1bjsKKyAgICAgfQorQEAgLTExODAsNyArMTE4MCw3IEBAIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgc2lsZW5jZSB0aGlzIG91dHB1dC4KKyBzdWIgcG1fdG9fYmxpYiB7CisgICAgIG15KCRmcm9tdG8sJGF1dG9kaXIsJHBtX2ZpbHRlcikgPSBAXzsKKyAKKy0gICAgX21rcGF0aCgkYXV0b2RpciwwLDA3NTUpOworKyAgICBfbWtwYXRoKCRhdXRvZGlyLDApOworICAgICB3aGlsZShteSgkZnJvbSwgJHRvKSA9IGVhY2ggJSRmcm9tdG8pIHsKKyAgICAgICAgIGlmKCAtZiAkdG8gJiYgLXMgJGZyb20gPT0gLXMgJHRvICYmIC1NICR0byA8IC1NICRmcm9tICkgeworICAgICAgICAgICAgIHByaW50ICJTa2lwICR0byAodW5jaGFuZ2VkKVxuIiB1bmxlc3MgJElOU1RBTExfUVVJRVQ7CitAQCAtMTIwMyw3ICsxMjAzLDcgQEAgc3ViIHBtX3RvX2JsaWIgeworICAgICAgICAgICAgICMgd2Ugd29udCB0cnkgaGFyZCBoZXJlLiBpdHMgdG9vIGxpa2VseSB0byBtZXNzIHRoaW5ncyB1cC4KKyAgICAgICAgICAgICBmb3JjZXVubGluaygkdG8pOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBfbWtwYXRoKGRpcm5hbWUoJHRvKSwwLDA3NTUpOworKyAgICAgICAgICAgIF9ta3BhdGgoZGlybmFtZSgkdG8pLDApOworICAgICAgICAgfQorICAgICAgICAgaWYgKCRuZWVkX2ZpbHRlcmluZykgeworICAgICAgICAgICAgIHJ1bl9maWx0ZXIoJHBtX2ZpbHRlciwgJGZyb20sICR0byk7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggZjYzMTQ1Yy4uMTk3ZjEwMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMTgsNyArMjExOCw3IEBAIGRvY19faW5zdGFsbCA6IGRvY19zaXRlX2luc3RhbGwKKyAJJChOT0VDSE8pICQoRUNITykgSU5TVEFMTERJUlMgbm90IGRlZmluZWQsIGRlZmF1bHRpbmcgdG8gSU5TVEFMTERJUlM9c2l0ZQorIAorIHB1cmVfcGVybF9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKK0BAIC0yMTM4LDcgKzIxMzgsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCisgCisgcHVyZV9zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTU2LDcgKzIxNTYsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgCQkifS4kc2VsZi0+Y2F0ZGlyKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScpLnF7IgorIAorIHB1cmVfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorQEAgLTIxODgsOCArMjE4OCw4IEBAIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAgICAgcHVzaCBAbSwgcXsKKyBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMUFJJVkxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCitAQCAtMjE5OSw4ICsyMTk5LDggQEAgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCitAQCAtMjIxMCw4ICsyMjEwLDggQEAgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExWRU5ET1JMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJjNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKQEAgLTAsMCArMSwyNyBAQAorRnJvbSAyNjIwOWI1NTIwMWExYjJkMjUyNTJhYzNiNDI1YmM0OTA4MTI5OWRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IERlYmlhbiBwb2xpY3kgZG9lc24ndCBpbnN0YWxsIC5wYWNrbGlzdCBmaWxlcyBmb3IgY29yZSBvciB2ZW5kb3IuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2ggfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaAoraW5kZXggOGI5YWE5NS4uZTU1MTQzNCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKK0BAIC0xOCw5ICsxOCwxMSBAQCBpbnN0bW9kc2ggLSBBIHNoZWxsIHRvIGV4YW1pbmUgaW5zdGFsbGVkIG1vZHVsZXMKKyAKKyA9aGVhZDEgREVTQ1JJUFRJT04KKyAKKy1BIGxpdHRsZSBpbnRlcmZhY2UgdG8gRXh0VXRpbHM6Okluc3RhbGxlZCB0byBleGFtaW5lIGluc3RhbGxlZCBtb2R1bGVzLAorK0EgbGl0dGxlIGludGVyZmFjZSB0byBFeHRVdGlsczo6SW5zdGFsbGVkIHRvIGV4YW1pbmUgbG9jYWxseSogaW5zdGFsbGVkIG1vZHVsZXMsCisgdmFsaWRhdGUgeW91ciBwYWNrbGlzdHMgYW5kIGV2ZW4gY3JlYXRlIGEgdGFyYmFsbCBmcm9tIGFuIGluc3RhbGxlZCBtb2R1bGUuCisgCisrKk9uIERlYmlhbiBzeXN0ZW0sIEI8Y29yZT4gYW5kIEI8dmVuZG9yPiBtb2R1bGVzIGFyZSBtYW5hZ2VkIGJ5IEM8ZHBrZz4uCisrCisgPWhlYWQxIFNFRSBBTFNPCisgCisgRXh0VXRpbHM6Okluc3RhbGxlZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGY4NmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKQEAgLTAsMCArMSwyNCBAQAorRnJvbSA1M2NlNjkwODU5MTgyMzJhMWI3ZTI2ZTc3NjJjMWIyZjcwYjFlYjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBSZW1vdmUgc3RhbmRhcmQgbGlicyBmcm9tIExEX1JVTl9QQVRIIGFzIHBlciBEZWJpYW4gcG9saWN5LgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbGRfcnVuX3BhdGguZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KK2luZGV4IDM3YmNmZDQuLmJkNjZlNjUgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorQEAgLTU2LDYgKzU2LDkgQEAgc3ViIF91bml4X29zMl9leHQgeworICAgICBteSAoICRwd2QgKSAgID0gY3dkKCk7ICAgICMgZnJvbSBDd2QucG0KKyAgICAgbXkgKCAkZm91bmQgKSA9IDA7CisgCisrICAgICMgRGViaWFuLXNwZWNpZmljOiBkb24ndCB1c2UgTERfUlVOX1BBVEggZm9yIHN0YW5kYXJkIGRpcnMKKysgICAgJGxkX3J1bl9wYXRoX3NlZW57JF99KysgZm9yIEBsaWJwYXRoOworKworICAgICBmb3JlYWNoIG15ICR0aGlzbGliICggc3BsaXQgJyAnLCAkcG90ZW50aWFsX2xpYnMgKSB7CisgICAgICAgICBteSAoICRjdXN0b21fbmFtZSApID0gJyc7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGVmOTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgpAQCAtMCwwICsxLDM3IEBACitGcm9tIGE3ZjZkNDUzZTYwMjU2ZDMyOTQ2OWE3NWI2NDJjY2E4NTRjZWJlYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogU2V0IGxvY2F0aW9uIG9mIGxpYm5ldC5jZmcgdG8gL2V0Yy9wZXJsL05ldCBhcyAvdXNyIG1heSBub3QgYmUKKyB3cml0YWJsZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCistLS0KKyBjcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbSB8IDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbSBiL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCitpbmRleCA5NTNhODI2Li42MWJhMTJhIDEwMDY0NAorLS0tIGEvY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0KKysrKyBiL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCitAQCAtNjgsOSArNjgsOCBAQCBteSAlbmMgPSAoCisgVFJZX0lOVEVSTkVUX0NPTkZJRworIH0KKyAKKy1teSAkZmlsZSA9IF9fRklMRV9fOworK215ICRmaWxlID0gJy9ldGMvcGVybC9OZXQvbGlibmV0LmNmZyc7CisgbXkgJHJlZjsKKy0kZmlsZSA9fiBzL0NvbmZpZy5wbS9saWJuZXQuY2ZnLzsKKyBpZiAoLWYgJGZpbGUpIHsKKyAgICRyZWYgPSBldmFsIHsgbG9jYWwgJFNJR3tfX0RJRV9ffTsgZG8gJGZpbGUgfTsKKyAgIGlmIChyZWYoJHJlZikgZXEgJ0hBU0gnKSB7CitAQCAtMTQyLDggKzE0MSw4IEBAIE5ldDo6Q29uZmlnIC0gTG9jYWwgY29uZmlndXJhdGlvbiBkYXRhIGZvciBsaWJuZXQKKyBDPE5ldDo6Q29uZmlnPiBob2xkcyBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBtb2R1bGVzIGluIHRoZSBsaWJuZXQKKyBkaXN0cmlidXRpb24uIER1cmluZyBpbnN0YWxsYXRpb24geW91IHdpbGwgYmUgYXNrZWQgZm9yIHRoZXNlIHZhbHVlcy4KKyAKKy1UaGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGhlbGQgZ2xvYmFsbHkgaW4gYSBmaWxlIGluIHRoZSBwZXJsIGluc3RhbGxhdGlvbgorLXRyZWUsIGJ1dCBhIHVzZXIgbWF5IG92ZXJyaWRlIGFueSBvZiB0aGVzZSB2YWx1ZXMgYnkgcHJvdmlkaW5nIHRoZWlyIG93bi4gVGhpcworK1RoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgaGVsZCBnbG9iYWxseSBpbiBDPC9ldGMvcGVybC9OZXQvbGlibmV0LmNmZz4sCisrYnV0IGEgdXNlciBtYXkgb3ZlcnJpZGUgYW55IG9mIHRoZXNlIHZhbHVlcyBieSBwcm92aWRpbmcgdGhlaXIgb3duLiBUaGlzCisgY2FuIGJlIGRvbmUgYnkgaGF2aW5nIGEgQzwubGlibmV0cmM+IGZpbGUgaW4gdGhlaXIgaG9tZSBkaXJlY3RvcnkuIFRoaXMgZmlsZQorIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gYSBIQVNIIGNvbnRhaW5pbmcgdGhlIGtleXMgZGVzY3JpYmVkIGJlbG93LgorIEZvciBleGFtcGxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiODA1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZgpAQCAtMCwwICsxLDI2IEBACitGcm9tIGZiOGJkYmI0YmY1NjM4MmRlMDk5ZTYyYzI1NjQyODZiOWRmZGE0NmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogTm90ZSB0aGF0IGxpYnBlcmwtZGV2IHBhY2thZ2UgaXMgcmVxdWlyZWQgZm9yIGVtYmVkZGVkIGxpbmtpbmcKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xODY3NzgKKworUGF0Y2gtTmFtZTogZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKKy0tLQorIGxpYi9FeHRVdGlscy9FbWJlZC5wbSB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL0V4dFV0aWxzL0VtYmVkLnBtIGIvbGliL0V4dFV0aWxzL0VtYmVkLnBtCitpbmRleCAzZjk4M2MxLi4wZWM4YTY3IDEwMDY0NAorLS0tIGEvbGliL0V4dFV0aWxzL0VtYmVkLnBtCisrKysgYi9saWIvRXh0VXRpbHMvRW1iZWQucG0KK0BAIC0yOTYsNiArMjk2LDkgQEAgYW5kIGV4dGVuc2lvbnMgaW4geW91ciBDL0MrKyBhcHBsaWNhdGlvbnMuCisgVHlwaWNhbGx5LCBhbiBhcHBsaWNhdGlvbiBGPE1ha2VmaWxlPiB3aWxsIGludm9rZSBDPEV4dFV0aWxzOjpFbWJlZD4KKyBmdW5jdGlvbnMgd2hpbGUgYnVpbGRpbmcgeW91ciBhcHBsaWNhdGlvbi4gIAorIAorK05vdGUgdGhhdCBvbiBEZWJpYW4gc3lzdGVtcyB0aGUgQjxsaWJwZXJsLWRldj4gcGFja2FnZSBpcyByZXF1aXJlZCBmb3IKKytjb21waWxpbmcgYXBwbGljYXRpb25zIHdoaWNoIGVtYmVkIGFuIGludGVycHJldGVyLgorKworID1oZWFkMSBARVhQT1JUCisgCisgQzxFeHRVdGlsczo6RW1iZWQ+IGV4cG9ydHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NzFlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgpAQCAtMCwwICsxLDUyIEBACitGcm9tIDI4OWVhZjg3ZjhkZTRkOWViZmQ2NjFkNGU0Mjk5YzI5NTI0MzUyNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDEwIEFwciAyMDE1IDEwOjE5OjUxICswMzAwCitTdWJqZWN0OiBNYWtlIHQvcnVuL2xvY2FsZS50IHN1cnZpdmUgbWlzc2luZyBsb2NhbGVzIG1hc2tlZCBieSBMQ19BTEwKKworSWYgTENfQUxMIGlzIHNldCB0byBhIHZhbGlkIGxvY2FsZSBidXQgYW5vdGhlciBMQ18qIHNldHRpbmcgbGlrZSBMQ19DVFlQRQoraXNuJ3QsIHQvcnVuL2xvY2FsZS50IHdvdWxkIGZhaWwgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHVuc2V0cyBMQ19BTEwsCit1bm1hc2tpbmcgdGhlIHByb2JsZW0gdW5kZXJuZWF0aC4gQWxsIHRoZSBvdGhlciB0ZXN0cyBzdXJ2aXZlIHN1Y2gKK2Egc2NlbmFyaW8uCisKK1doaWxlIHRoaXMgaXMgY2xlYXJseSBhbiBlcnJvciBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIGl0J3MgZWFzeSB0byBtYWtlCit0aGUgdGVzdCBtb3JlIHJvYnVzdCBieSBmaXJzdCBjbGVhcmluZyBhbGwgdGhlIGxvY2FsZSByZWxldmFudCB2YXJpYWJsZXMuCisKK0J1ZzogaHR0cHM6Ly9ydC5wZXJsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTEyNDMxMAorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgyMDY4CitQYXRjaC1OYW1lOiBkZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgorLS0tCisgdC9ydW4vbG9jYWxlLnQgfCA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdC9ydW4vbG9jYWxlLnQgYi90L3J1bi9sb2NhbGUudAoraW5kZXggYmQxYTAzNC4uMjEwNTMzOSAxMDA2NDQKKy0tLSBhL3QvcnVuL2xvY2FsZS50CisrKysgYi90L3J1bi9sb2NhbGUudAorQEAgLTI3LDYgKzI3LDkgQEAgbXkgQGxvY2FsZXMgPSBldmFsIHsgZmluZF9sb2NhbGVzKCBbICZMQ19BTEwsICZMQ19DVFlQRSwgJkxDX05VTUVSSUMgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIH07Cisgc2tpcF9hbGwoIm5vIGxvY2FsZXMgYXZhaWxhYmxlIikgdW5sZXNzIEBsb2NhbGVzOworIAorKyMgcmVzZXQgdGhlIGxvY2FsZSBlbnZpcm9ubWVudAorK2xvY2FsIEBFTlZ7J0xBTkcnLCAoZ3JlcCAvXkxDXy8sIGtleXMgJUVOVil9OworKworIHBsYW4gdGVzdHMgPT4gJmxhc3Q7CisgCisgbXkgJG5vbl9DX2xvY2FsZTsKK0BAIC01OCw5ICs2MSw2IEBAIEVPRgorIFNLSVA6IHsKKyAgICAgc2tpcCgiV2luZG93cyBzdG9yZXMgbG9jYWxlIGRlZmF1bHRzIGluIHRoZSByZWdpc3RyeSIsIDEgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICReTyBlcSAnTVNXaW4zMic7CistICAgIGxvY2FsICRFTlZ7TENfTlVNRVJJQ307ICMgU28gbm90IHRha2VuIGFzIGEgZGVmYXVsdAorLSAgICBsb2NhbCAkRU5We0xDX0FMTH07ICMgc28gaXQgbmV2ZXIgb3ZlcnJpZGVzIExDX05VTUVSSUMKKy0gICAgbG9jYWwgJEVOVntMQU5HfTsgICAjIFNvIG5vdCB0YWtlbiBhcyBhIGRlZmF1bHQKKyAgICAgZnJlc2hfcGVybF9pcygiZm9yIChxdyhAbG9jYWxlcykpIHtcbiIgLiA8PCdFT0YnLAorICAgICAgICAgdXNlIFBPU0lYIHF3KGxvY2FsZV9oKTsKKyAgICAgICAgIHVzZSBsb2NhbGU7CitAQCAtMzQ4LDcgKzM0OCw2IEBAIEVPRgorIAorICAgICB7CisgCWxvY2FsICRFTlZ7TENfTlVNRVJJQ30gPSAkZGlmZmVyZW50OworLQlsb2NhbCAkRU5We0xDX0FMTH07ICMgc28gaXQgbmV2ZXIgb3ZlcnJpZGVzIExDX05VTUVSSUMKKyAJZnJlc2hfcGVybF9pcyg8PCJFT0YiLAorIAkgICAgdXNlIFBPU0lYIHF3KGxvY2FsZV9oKTsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTBmOWRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNTkzZGQ1MmY1MzViMWY0MzlkZmQwYWZlNTIyMTFhZTg5NjBlOTgwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMjQgQXVnIDIwMTQgMTI6NTY6MTEgLTA3MDAKK1N1YmplY3Q6IFBhc3MgTEQgc2V0dGluZ3MgdGhyb3VnaCB0byBzdWJkaXJlY3RvcmllcworCitbcnQuY3Bhbi5vcmcgIzI4NjMyXSBmaXhlZCBtb3N0IGlzc3VlcyB3aXRoIHBhc3NpbmcgTEQgZG93biB0bworc3ViZGlyZWN0b3J5IE1ha2VmaWxlLlBMIGZpbGVzLiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBkaXN0cmlidXRpb25zCisoaW5jbHVkaW5nIFd4LCBQYXI6OlBhY2tlciwgYW5kIFZlcmlsb2ctUGVybCkgdGhhdCBleHBsaWNpdGx5IHNldAorTEQuIFRob3NlIHN0aWxsIGNhbid0IGJlIG92ZXJyaWRkZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBBZGRpbmcgTEQgdG8KK3RoZSBQQVNUSFJVIGxpc3QgZml4ZXMgdGhpcy4KKworQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzU4NDcxCitQYXRjaC1OYW1lOiBkZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCA0YThlMTRjLi41NDhkOThlIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjc5Myw3ICsyNzkzLDcgQEAgc3ViIHBhc3RocnUgeworICAgICBteSgkc2VwKSA9ICRJc3tWTVN9ID8gJywnIDogJyc7CisgICAgICRzZXAgLj0gIlxcXG5cdCI7CisgCistICAgIGZvcmVhY2ggbXkgJGtleSAocXcoTElCIExJQlBFUkxfQSBMSU5LVFlQRSBPUFRJTUlaRQorKyAgICBmb3JlYWNoIG15ICRrZXkgKHF3KExJQiBMSUJQRVJMX0EgTElOS1RZUEUgT1BUSU1JWkUgTEQKKyAgICAgICAgICAgICAgICAgICAgICBQUkVGSVggSU5TVEFMTF9CQVNFKQorICAgICAgICAgICAgICAgICAgKQorICAgICB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlcl9jdXN0b21pemVkLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlcl9jdXN0b21pemVkLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiNGNiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgpAQCAtMCwwICsxLDQyIEBACitGcm9tIDYzNDQ0OTA2NmE5YzgxMGU4MTUwNjQyNWQyY2E5MjViMmZkNzJhYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEb21pbmljIEhhcmdyZWF2ZXMgPGRvbUBlYXJ0aC5saT4KK0RhdGU6IFNhdCwgMjMgTWF5IDIwMTUgMjE6MTU6MDYgKzAyMDAKK1N1YmplY3Q6IFVwZGF0ZSB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgZm9yIGZpbGVzIHBhdGNoZWQgaW4gRGViaWFuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmCistLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdCBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAoraW5kZXggN2RmMzk4ZC4uZjg1N2JkMiAxMDA2NDQKKy0tLSBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorKysrIGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CitAQCAtMSw3ICsxLDcgQEAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Db21tYW5kL01NLnBtIDdmNGRmZDBmZTg4NGJkNDI0MTJiY2YwNGNhODBlZjk3YjM5YzFkNTQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0LnBtIGJlZjA5OTk4OGIxNWZiMGIyYTFmNWFjNDhjMDFhZjFmN2YzNmQzMjkKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSA4MTY4ZTE4ZjBlM2NlM2VjZTRiYjdlN2M3MmQ1N2VjMDdjNjdjNDAyCistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDcxMTVlOTdhNTM1NTljYjNlYzA2MWRkNmY3ZjM0NGU1MjI3MjRjNGEKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSAzNDkzYWU2ZjkzMjY0ZTk2N2Y1OGRlZGFhM2RiZjNkYmNiMjQ5ODUzCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDNkN2FiZDY3NGIxNWVkMzIzZjc0MzU5NGVmMGJkMDlkYjc2YjFhZWUKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvQ29uZmlnLnBtIGY4ZGI4ZDQyNDViZjA2ODRiODIxMGM4MTFmNTBkN2NmYjFhMjdkNzgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvRkFRLnBvZCA3NTdiZmZiNDc4NTc1MjEzMTFmOGYzYmRlNDNlYmUxNjVmOGQ1MTkxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0xvY2FsZS5wbSA4MmJlMDY4NTFkZWI4NGM2NDE5YWQwMDNjZTliNmQxOTU3ZjM5NWYzCitAQCAtMTMsNyArMTMsNyBAQCBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Na2Jvb3RzdHJhcC5wbSA1ODg3MmQ2NgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01rc3ltbGlzdHMucG0gYWI4MDAyOWFiMTZkMzhkNGYyZTQxZGM4OGQyY2ViOWYzNzkwZTQ3NworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NLnBtIDQ1M2UwYWJiYzRiYjM4ZGI0YzA4MjBhZDVjNDg0NmYzMTNiNjYyOTEKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BSVgucG0gYzFiMWJhYmRhOGY0M2FlN2EyY2FiYTFjYjRmNzBmOTJhZjVhMGUzNAorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSA2ZjkwZDk0YWQzZTdhYTAwNDVhM2IxYTEwYTFiYjE4MzkxZjg5ZjU3CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtIDIxYmRlNTMyOTBiZjFhNGRhNDQ1NzI5MGI2NWJkMWIwY2E2ZjFkMTYKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9CZU9TLnBtIGNhYjJiM2NlMDhiNzFhNGNlODlhYTYzMGYyMzZlYjA4Yjg1MjQzOWQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9DeWd3aW4ucG0gNjFmY2VkMGZhZjUxOGJmODdjMjY1ZmNiNTFlZDMzMGJhMzU0NjIzZgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0Rhcndpbi5wbSBhZTBlZjUxYTdiNmRkMGIwNWFhNjFjNzc5ZGY3MTY3ZGRhNWY1MTE5CitAQCAtMjIsNyArMjIsNyBAQCBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9NYWNPUy5wbSAwNTQ0MzAxZjcxMgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX05XNS5wbSA0MzMxMzVlZWNiODViNGIxZDkwZDMwMjc0MzJmMzI5NDM2Yzc4NDQ3CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fT1MyLnBtIDFmYmI1NjA1YmZiNDdmZWVlNDA4M2ZlYmE4YWE4NWU2NTk2MjhmNzAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9RTlgucG0gNWI2NmQxZjQ4NWE2MDM0ZDk2ZmMyNGJhMTY2NWIxYmFkOWU0NDdmMQorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gOGNlZjk5YTliZDM3MGVjZmQwN2RkYjBlZmJkY2JiNDEwMTI1NWU0NQorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYzQ1NWM5MTVmYjdkYzNlZWIxMjAwZWQxY2QxOTA0OGU2ZjIxZTZiMQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VXSU4ucG0gOTM5NTcyZmRlM2Q1OWJhNzdjMmU2NzdmZTJkZjJiZWQ0YmVkNTg5OAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1ZNUy5wbSAwOWMyMDQ5YmZkMjViNzM1ZTJhNWJjZjU2YTZjZmY3YjQ4MjdmOWM4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVk9TLnBtIGQ2NWQ2M2Y4MjE3YTU1YzM2ZjYyZTI0OTgxNDk4ODk3NGY1OTNjNzkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbW9kX3BhdGhzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTU5MDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmCkBAIC0wLDAgKzEsOTkgQEAKK0Zyb20gNmM2Y2YxNGUyMDRmM2MwMzEzNzJiZmQ5NjA0YWQ1MjRkNTY5MTE4NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogVHdlYWsgQElOQyBvcmRlcmluZyBmb3IgRGViaWFuCisKK091ciBvcmRlciBpczoKKworICAgIGV0YyAoZm9yIGNvbmZpZyBmaWxlcykKKyAgICBzaXRlICg1LjguMSkKKyAgICB2ZW5kb3IgKGFsbCkKKyAgICBjb3JlICg1LjguMSkKKyAgICBzaXRlICh2ZXJzaW9uLWluZGVwKQorICAgIHNpdGUgKHByZS01LjguMSkKKworVGhlIHJhdGlvbmFsZSBiZWluZyB0aGF0IGFuIGFkbWluICh2aWEgc2l0ZSksIG9yIG1vZHVsZSBwYWNrYWdlcgorKHZlbmRvcikgY2FuIGNob3NlIHRvIHNoYWRvdyBjb3JlIG1vZHVsZXMgd2hlbiB0aGVyZSBpcyBhIG5ld2VyCit2ZXJzaW9uIHRoYW4gaXMgaW5jbHVkZWQgaW4gY29yZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL21vZF9wYXRocy5kaWZmCistLS0KKyBwZXJsLmMgfCA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3BlcmwuYyBiL3BlcmwuYworaW5kZXggMDg2NjQ1Yi4uZTY0ZjFmNCAxMDA2NDQKKy0tLSBhL3BlcmwuYworKysrIGIvcGVybC5jCitAQCAtNDM3Myw2ICs0MzczLDExIEBAIFNfaW5pdF9wZXJsbGliKHBUSFgpCisgCQkgICAgICBJTkNQVVNIX0FERF9TVUJfRElSU3xJTkNQVVNIX0NBTl9SRUxPQ0FURSk7CisgI2VuZGlmCisgCisrI2lmZGVmIERFQklBTgorKyAgICAvKiBmb3IgY29uZmlndXJhdGlvbiB3aGVyZSAvdXNyIGlzIG1vdW50ZWQgcm8gKENQQU46OkNvbmZpZywgTmV0OjpDb25maWcpICovCisrICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIFNUUl9XSVRIX0xFTigiL2V0Yy9wZXJsIiksIDB4MCk7CisrI2VuZGlmCisrCisgI2lmZGVmIFNJVEVBUkNIX0VYUAorICAgICAvKiBzaXRlYXJjaCBpcyBhbHdheXMgcmVsYXRpdmUgdG8gc2l0ZWxpYiBvbiBXaW5kb3dzIGZvcgorICAgICAgKiBETEwtYmFzZWQgcGF0aCBpbnR1aXRpb24gdG8gd29yayBjb3JyZWN0bHkgKi8KK0BAIC00NDkwLDYgKzQ0OTUsNTkgQEAgU19pbml0X3BlcmxsaWIocFRIWCkKKyAJCSAgICAgIElOQ1BVU0hfQUREX09MRF9WRVJTfElOQ1BVU0hfQ0FOX1JFTE9DQVRFKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgREVCSUFOCisrICAgIC8qIE5vbi12ZXJzaW9uZWQgc2l0ZSBkaXJlY3RvcnkgZm9yIGxvY2FsIG1vZHVsZXMgYW5kIGZvcgorKyAgICAgICBjb21wYXRhYmlsaXR5IHdpdGggdGhlIHByZXZpb3VzIHBhY2thZ2VzJyBzaXRlIGRpcnMgKi8KKysgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gU1RSX1dJVEhfTEVOKCIvdXNyL2xvY2FsL2xpYi9zaXRlX3BlcmwiKSwKKysJCSAgICAgIElOQ1BVU0hfQUREX1NVQl9ESVJTKTsKKysKKysjaWZkZWYgUEVSTF9JTkNfVkVSU0lPTl9MSVNUCisrICAgIHsKKysJc3RydWN0IHN0YXQgczsKKysKKysJLyogYWRkIHNtYWxsIGJ1ZmZlciBpbiBjYXNlIG9sZCB2ZXJzaW9ucyBhcmUgbG9uZ2VyIHRoYW4gdGhlCisrCSAgIGN1cnJlbnQgdmVyc2lvbiAqLworKwljaGFyIHNpdGVhcmNoW3NpemVvZihTSVRFQVJDSF9FWFApKzE2XSA9IFNJVEVBUkNIX0VYUDsKKysJY2hhciBzaXRlbGliW3NpemVvZihTSVRFTElCX0VYUCkrMTZdID0gU0lURUxJQl9FWFA7CisrCWNoYXIgY29uc3QgKnZlcnNbXSA9IHsgUEVSTF9JTkNfVkVSU0lPTl9MSVNUIH07CisrCWNoYXIgY29uc3QgKipwOworKworKwljaGFyICphcmNoX3ZlcnMgPSBzdHJyY2hyKHNpdGVhcmNoLCAnLycpOworKwljaGFyICpsaWJfdmVycyA9IHN0cnJjaHIoc2l0ZWxpYiwgJy8nKTsKKysKKysJaWYgKGFyY2hfdmVycyAmJiBpc2RpZ2l0KCorK2FyY2hfdmVycykpCisrCSAgICAqYXJjaF92ZXJzID0gMDsKKysJZWxzZQorKwkgICAgYXJjaF92ZXJzID0gMDsKKysKKysJaWYgKGxpYl92ZXJzICYmIGlzZGlnaXQoKisrbGliX3ZlcnMpKQorKwkgICAgKmxpYl92ZXJzID0gMDsKKysJZWxzZQorKwkgICAgbGliX3ZlcnMgPSAwOworKworKwkvKiB0aGVyZSBpcyBzb21lIGR1cGxpY2F0aW9uIGhlcmUgYXMgaW5jcHVzaCBkb2VzIHNvbWV0aGluZworKwkgICBzaW1pbGFyIGludGVybmFsbHksIGJ1dCByZXF1aXJlZCBhcyBzaXRlYXJjaCBpcyBub3QgYQorKwkgICBzdWJkaXJlY3Rvcnkgb2Ygc2l0ZWxpYiAqLworKwlmb3IgKHAgPSB2ZXJzOyAqcDsgcCsrKQorKwl7CisrCSAgICBpZiAoYXJjaF92ZXJzKQorKwkgICAgeworKwkJc3RyY3B5KGFyY2hfdmVycywgKnApOworKwkJaWYgKFBlcmxMSU9fc3RhdChzaXRlYXJjaCwgJnMpID49IDAgJiYgU19JU0RJUihzLnN0X21vZGUpKQorKwkJICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIHNpdGVhcmNoLCBzdHJsZW4oc2l0ZWFyY2gpLCAweDApOworKwkgICAgfQorKworKwkgICAgaWYgKGxpYl92ZXJzKQorKwkgICAgeworKwkJc3RyY3B5KGxpYl92ZXJzLCAqcCk7CisrCQlpZiAoUGVybExJT19zdGF0KHNpdGVsaWIsICZzKSA+PSAwICYmIFNfSVNESVIocy5zdF9tb2RlKSkKKysJCSAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBzaXRlbGliLCBzdHJsZW4oc2l0ZWxpYiksIDB4MCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyNlbmRpZgorKyNlbmRpZgorKworICNpZmRlZiBQRVJMX09USEVSTElCRElSUworICAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBTVFJfV0lUSF9MRU4oUEVSTF9PVEhFUkxJQkRJUlMpLAorIAkJICAgICAgSU5DUFVTSF9BRERfT0xEX1ZFUlN8SU5DUFVTSF9BRERfQVJDSE9OTFlfU1VCX0RJUlMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTFmZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCkBAIC0wLDAgKzEsOTIgQEAKK0Zyb20gMjQwZjJmNGFlYjM4NTBiYzBjNTM3MGI5ZmJjMzkwOTU3M2JlZDliMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBEb24ndCBpbnN0YWxsIC5wYWNrbGlzdCBvciBwZXJsbG9jYWwucG9kIGZvciBwZXJsIG9yIHZlbmRvcgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMzUgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggNTcwYTYzMS4uMzkxZGMyMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMjIsMTEgKzIxMjIsNiBAQCBwdXJlX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyB9OworIAorICAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistCQl3cml0ZSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLX0gdW5sZXNzICRzZWxmLT57Tk9fUEFDS0xJU1R9OworLQorLSAgICBwdXNoIEBtLAorIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAJCSIkKElOU1RfQVJDSExJQikiICIkKERFU1RJTlNUQUxMQVJDSExJQikiIFwKKyAJCSIkKElOU1RfQklOKSIgIiQoREVTVElOU1RBTExCSU4pIiBcCitAQCAtMjE1OCwxMCArMjE1Myw2IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMU0lURUxJQikiIFwKKyBwdXJlX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKy0gICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMVkVORE9SQVJDSCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CisgCisgICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExWRU5ET1JMSUIpIiBcCitAQCAtMjE4NywzNyArMjE3OCwxOSBAQCBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCisgICAgIHB1c2ggQG0sIHF7CisgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMUFJJVkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpL3Blcmxsb2NhbC5wb2QiCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTFNJVEVBUkNIKSIKKyAJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCisgCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCisgCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKysJCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMU0lURUFSQ0gpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIH0gdW5sZXNzICRzZWxmLT57Tk9fUEVSTExPQ0FMfTsKKyAKK0BAIC0yMjI2LDEzICsyMTk5LDExIEBAIHVuaW5zdGFsbCA6OiB1bmluc3RhbGxfZnJvbV8kKElOU1RBTExESVJTKWRpcnMKKyAJJChOT0VDSE8pICQoTk9PUCkKKyAKKyB1bmluc3RhbGxfZnJvbV9wZXJsZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3NpdGVkaXJzIDo6CisgCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV92ZW5kb3JkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIH07CisgCisgICAgIGpvaW4oIiIsQG0pOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wYXRjaGxldmVsLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BhdGNobGV2ZWwuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU2YjAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wYXRjaGxldmVsLmRpZmYKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiNTE3YzVlMTVkMDg3MWUzNmQwZjExODc2NjFmZTFkZDI4ZGRmODIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAxNSBNYXkgMjAxMSAxOTozNTo1OCArMDMwMAorU3ViamVjdDogTGlzdCBwYWNrYWdlZCBwYXRjaGVzIGluIHBhdGNobGV2ZWwuaAorCitPcmlnaW46IHZlbmRvcgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81Njc0ODkKKworVGhlIGxpc3Qgb2YgcGFja2FnZWQgcGF0Y2hlcyBpcyBpbiBwYXRjaGxldmVsLWRlYmlhbi5oLCB3aGljaCBpcyBnZW5lcmF0ZWQKK2Zyb20gdGhlIGRlYmlhbi9wYXRjaGVzLyBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyB0aGUgcGFja2FnZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3BhdGNobGV2ZWwuZGlmZgorLS0tCisgcGF0Y2hsZXZlbC5oIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9wYXRjaGxldmVsLmggYi9wYXRjaGxldmVsLmgKK2luZGV4IGEwYWQ3OGIuLjAxMzY3YjcgMTAwNjQ0CistLS0gYS9wYXRjaGxldmVsLmgKKysrKyBiL3BhdGNobGV2ZWwuaAorQEAgLTEzNyw2ICsxMzcsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxvY2FsX3BhdGNoZXNbXSA9IHsKKyAJLCJ1bmNvbW1pdHRlZC1jaGFuZ2VzIgorICNlbmRpZgorIAlQRVJMX0dJVF9VTlBVU0hFRF9DT01NSVRTICAgIAkvKiBkbyBub3QgcmVtb3ZlIHRoaXMgbGluZSAqLworKyNpZmRlZiBERUJJQU4KKysjaW5jbHVkZSAicGF0Y2hsZXZlbC1kZWJpYW4uaCIKKysjZW5kaWYKKyAJLE5VTEwKKyB9OworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzM5NTJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBjOTljNjFlOGY4NjNhNTA4YTA3OTMxNjgwMTFjOThkYzc0YWJiZDA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pYyBIYXJncmVhdmVzIDxkb21AZWFydGgubGk+CitEYXRlOiBTYXQsIDE0IEFwciAyMDEyIDExOjM0OjA1ICswMTAwCitTdWJqZWN0OiBJbnZva2UgeC10ZXJtaW5hbC1lbXVsYXRvciByYXRoZXIgdGhhbiB4dGVybSBpbiBwZXJsNWRiLnBsCisKK0luIERlYmlhbiBzeXN0ZW1zLCB4dGVybSBtaWdodCBub3QgZXhpc3Qgb3IgbWlnaHQgbm90IGJlIHRoZSBwcmVmZXJyZWQKK3Rlcm1pbmFsIGVtdWxhdG9yLiBVc2UgeC10ZXJtaW5hbC1lbXVsYXRvciBpbnN0ZWFkCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjY4NDkwCitGb3J3YXJkZWQ6IG5vdC1uZWVkZWQKKworUGF0Y2gtTmFtZTogZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaAorLS0tCisgbGliL3Blcmw1ZGIucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcGVybDVkYi5wbCBiL2xpYi9wZXJsNWRiLnBsCitpbmRleCA3ZTcxOTRlLi5jNDY2YmYzIDEwMDY0NAorLS0tIGEvbGliL3Blcmw1ZGIucGwKKysrKyBiL2xpYi9wZXJsNWRiLnBsCitAQCAtNjk2MCw3ICs2OTYwLDcgQEAgcHJvcGVybHkgc2V0IHVwLgorIHN1YiB4dGVybV9nZXRfZm9ya19UVFkgeworICAgICAoIG15ICRuYW1lID0gJDAgKSA9fiBzLF4uKlsvXFxdLCxzOworICAgICBvcGVuIFhULAorLXFxWzM+JjEgeHRlcm0gLXRpdGxlICJEYXVnaHRlciBQZXJsIGRlYnVnZ2VyICRwaWRzICRuYW1lIiAtZSBzaCAtYyAndHR5IDE+JjM7XAorK3FxWzM+JjEgeC10ZXJtaW5hbC1lbXVsYXRvciAtVCAiRGF1Z2h0ZXIgUGVybCBkZWJ1Z2dlciAkcGlkcyAkbmFtZSIgLWUgc2ggLWMgJ3R0eSAxPiYzO1wKKyAgc2xlZXAgMTAwMDAwMDAnIHxdOworIAorICAgICAjIEdldCB0aGUgb3V0cHV0IGZyb20gJ3R0eScgYW5kIGNsZWFuIGl0IHVwIGEgbGl0dGxlLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsaXZwLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BlcmxpdnAuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzFlYWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsaXZwLmRpZmYKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBmYmZiZWI3YTY5MGQ3MDNhM2NkYzU2ZjkyM2U4OWViN2I3OTk3ZDMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCA5IEphbiAyMDA5IDE4OjU0OjQ3ICswMjAwCitTdWJqZWN0OiBNYWtlIHBlcmxpdnAgc2tpcCBpbmNsdWRlIGRpcmVjdG9yaWVzIGluIC91c3IvbG9jYWwKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81MTA4OTUKKworT24gU2F0LCBKYW4gMTAsIDIwMDkgYXQgMTI6Mzc6MThBTSArMTEwMCwgQnJlbmRhbiBPJ0RlYSB3cm90ZToKKz4gT24gV2VkLCBKYW4gNywgMjAwOSBhdCAxMjoyMSBBTSwgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPiB3cm90ZToKKworPiA+IFdlIGNvdWxkIGNyZWF0ZSB0aGUgZGlyZWN0b3JpZXMgaW4gYSBwb3N0aW5zdCBzY3JpcHQsIGJ1dCBJJ20gbm90IHN1cmUKKz4gPiBJIHNlZSB0aGUgcG9pbnQuIFRoZXkgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpbnN0YWxsaW5nCis+ID4gQ1BBTiBtb2R1bGVzLgorPgorPiBUaGUgZGlyZWN0b3JpZXMgYXJlIGludGVudGlvbmFsbHkgbm90IGNyZWF0ZWQsIGFzIHRoaXMgd2F5IHRoZXkgYXJlCis+IGV4Y2x1ZGVkIGZyb20gdGhlIHNlYXJjaCBwYXRoIGF0IHN0YXJ0LXVwLCBzYXZpbmcgYSBidW5jaCBvZiB3YXN0ZWQKKz4gc3RhdHMgYXQgdXNlL3JlcXVpcmUgdGltZSBpbiB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGUgdXNlciBoYXMgbm90Cis+IGluc3RhbGxlZCBhbnkgbG9jYWwgcGFja2FnZXMuICBBcyBOaWtvIHBvaW50cyBvdXQsIHRoZXkgd2lsbCBiZQorPiBjcmVhdGVkIGFzIHJlcXVpcmVkLgorCitTaWduZWQtb2ZmLWJ5OiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wZXJsaXZwLmRpZmYKKy0tLQorIHV0aWxzL3BlcmxpdnAuUEwgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3V0aWxzL3BlcmxpdnAuUEwgYi91dGlscy9wZXJsaXZwLlBMCitpbmRleCBjMmYwYTExLi5jYzQ5Zjk2IDEwMDY0NAorLS0tIGEvdXRpbHMvcGVybGl2cC5QTAorKysrIGIvdXRpbHMvcGVybGl2cC5QTAorQEAgLTE1Myw2ICsxNTMsNyBAQCBteSAkSU5DX3RvdGFsID0gMDsKKyBteSAkSU5DX3RoZXJlID0gMDsKKyBmb3JlYWNoIChASU5DKSB7CisgICAgIG5leHQgaWYgJF8gZXEgJy4nOyAjIHNraXAgLWQgdGVzdCBoZXJlCisrICAgIG5leHQgaWYgbXwvdXNyL2xvY2FsfDsgIyBub3Qgc2hpcHBlZCBvbiBEZWJpYW4KKyAgICAgaWYgKC1kICRfKSB7CisgICAgICAgICBwcmludCAiIyMgUGVybCBcQElOQyBkaXJlY3RvcnkgJyRfJyBleGlzdHMuXG4iIGlmICRvcHR7J3YnfTsKKyAgICAgICAgICRJTkNfdGhlcmUrKzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzBiODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCkBAIC0wLDAgKzEsMjMgQEAKK0Zyb20gMjdhNDk1MmMyZTUzMTk0N2RjOWYyZjAyZTIwNjNkMTE3ZTJlNjk5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTggQXByIDIwMTUgMTc6Mzk6MzIgKzAzMDAKK1N1YmplY3Q6IFVwZGF0ZSBwb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGZvciBwb2QybWFuIG1vZGlmaWNhdGlvbnMKKworUGF0Y2gtTmFtZTogZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCistLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK2luZGV4IDBlZWQ5ZjcuLjdkZjM5OGQgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKKysrKyBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorQEAgLTQyLDcgKzQyLDcgQEAgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL01ha2VmaWxlLlBMIDYwNWQwYWVlMzFhZWJlODRhOTk0MDhmOWFiNWY2NDRkYjUKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdC9maWxlLnQgMTI0ZTY0YWE3N2U3NTUyMzVlYjI5NzY0NGE4N2ZhYzUzODhkM2Q3OAorIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS90L3RpZS50IDcxMmVhN2VkZDBjYzgwNWNlMWMwYjgxNzJjMDFiMDNkZDE5YjU4M2QKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdHlwZW1hcCAyNGJmZjA4OGJhYmVhZGFjMDg3M2U4ZGYzOTBkMTY2NmQ5ZDlkYjRhCistcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCBmODFhY2Y1M2YzZmY0NmNkY2M1ZWJkZDY2MWM1ZDEzZWIzNWQyMGQ2CisrcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCA3NjFmMzVkM2ZjZjkxYzFiYzJmOWUwMjRhOWZhNWM2MmZkM2ZjMzM4CisgcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMnRleHQuUEwgYjQ2OTNmY2ZlNGEwYTFiMzhhMjE1Y2ZiODk4NWE2NWQ1ZDAyNWQ2OQorIHZlcnNpb24gY3Bhbi92ZXJzaW9uL2xpYi92ZXJzaW9uLnBtIGQwOTIzYjg5NWQ1N2YxZDY2OWFlMzZmY2Y4NWM4N2IxNmRiMzQxZDEKKyB2ZXJzaW9uIHZ1dGlsLmMgNjY4ZjE3Y2E0M2UyNTI3NjQ1Njc0ZDI5YmE3NzJiODYzMzBkNTY2MwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MWVmYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKQEAgLTAsMCArMSwxMTggQEAKK0Zyb20gOTE0OTQ4ZjAyNmVmY2UwMmNmMGFiZmY4YjAzMTJhYWFkOTY1OTJlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBGaWRkbGUgd2l0aCAqUFJFRklYIGFuZCB2YXJpYWJsZXMgd3JpdHRlbiB0byB0aGUgbWFrZWZpbGUKKworRmlkZGxlIHdpdGggKlBSRUZJWCBhbmQgdmFyaWFibGVzIHdyaXR0ZW4gdG8gdGhlIG1ha2VmaWxlIHNvIHRoYXQKK2luc3RhbGwgZGlyZWN0b3JpZXMgbWF5IGJlIGNoYW5nZWQgd2hlbiBtYWtlIGlzIHJ1biBieSBwYXNzaW5nCitQUkVGSVg9IHRvIHRoZSAibWFrZSBpbnN0YWxsIiBjb21tYW5kICh1c2VkIHdoZW4gcGFja2FnaW5nCittb2R1bGVzKS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gIHwgMTIgKysrKysrLS0tLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAgMyArLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudCAgICAgICAgICAgICAgICB8ICA0ICstLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQgICAgICAgICB8IDEwICsrKysrLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0KK2luZGV4IDRjMDAxMjkuLjFlYTIwMzUgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCitAQCAtOTAyLDggKzkwMiw2IEBAIGFsbCBQT0QgZmlsZXMgaW4gTUFOMVBPRFMgYW5kIE1BTjNQT0RTLgorIHN1YiBtYW5pZnlwb2RzX3RhcmdldCB7CisgICAgIG15KCRzZWxmKSA9IHNoaWZ0OworIAorLSAgICBteSAkbWFuMXBvZHMgICAgICA9ICcnOworLSAgICBteSAkbWFuM3BvZHMgICAgICA9ICcnOworICAgICBteSAkZGVwZW5kZW5jaWVzICA9ICcnOworIAorICAgICAjIHBvcHVsYXRlIG1hblhwb2RzICYgZGVwZW5kZW5jaWVzOgorQEAgLTkxOSw3ICs5MTcsNyBAQCBFTkQKKyAgICAgZm9yZWFjaCBteSAkc2VjdGlvbiAocXcoMSAzKSkgeworICAgICAgICAgbXkgJHBvZHMgPSAkc2VsZi0+eyJNQU4ke3NlY3Rpb259UE9EUyJ9OworICAgICAgICAgbXkgJHAybSA9IHNwcmludGYgPDxDTUQsICRdID4gNS4wMDggPyAiIC11IiA6ICIiOworLQlcJChOT0VDSE8pIFwkKFBPRDJNQU4pIC0tc2VjdGlvbj0kc2VjdGlvbiAtLXBlcm1fcnc9XCQoUEVSTV9SVyklcworKwlcJChOT0VDSE8pIFwkKFBPRDJNQU4pIC0tc2VjdGlvbj1cJChNQU4ke3NlY3Rpb259RVhUKSAtLXBlcm1fcnc9XCQoUEVSTV9SVyklcworIENNRAorICAgICAgICAgcHVzaCBAbWFuX2NtZHMsICRzZWxmLT5zcGxpdF9jb21tYW5kKCRwMm0sIG1hcCB7KCRfLCRwb2RzLT57JF99KX0gc29ydCBrZXlzICUkcG9kcyk7CisgICAgIH0KK0BAIC0xODc1LDkgKzE4NzMsMTEgQEAgc3ViIGluaXRfSU5TVEFMTF9mcm9tX1BSRUZJWCB7CisgICAgICAgICAkc2VsZi0+e1NJVEVQUkVGSVh9ICAgfHw9ICRzcHJlZml4OworICAgICAgICAgJHNlbGYtPntWRU5ET1JQUkVGSVh9IHx8PSAkdnByZWZpeDsKKyAKKy0gICAgICAgICMgTG90cyBvZiBNTSBleHRlbnNpb24gYXV0aG9ycyBsaWtlIHRvIHVzZSAkKFBSRUZJWCkgc28gd2UKKy0gICAgICAgICMgcHV0IHNvbWV0aGluZyBzZW5zaWJsZSBpbiB0aGVyZSBubyBtYXR0ZXIgd2hhdC4KKy0gICAgICAgICRzZWxmLT57UFJFRklYfSA9ICckKCcudWMgJHNlbGYtPntJTlNUQUxMRElSU30uJ1BSRUZJWCknOworKwlteSAkcCA9ICRzZWxmLT57UFJFRklYfSA9ICRzZWxmLT57UEVSTFBSRUZJWH07CisrCWZvciBteSAkdCAocXcvUEVSTCBTSVRFIFZFTkRPUi8pCisrCXsKKysJICAgICRzZWxmLT57IiR7dH1QUkVGSVgifSA9fiBzIV5cUSRwXEUoPz0vfCQpIVwkKFBSRUZJWCkhOworKwl9CisgICAgIH0KKyAKKyAgICAgbXkgJGFyY2ggICAgPSAkQ29uZmlne2FyY2huYW1lfTsKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCAzOTFkYzIyLi40YThlMTRjIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMzA3Nyw4ICszMDc3LDcgQEAgc3ViIHByZWZpeGlmeSB7CisgICAgIHdhcm4gIiAgcHJlZml4aWZ5ICR2YXIgPT4gJHBhdGhcbiIgaWYgJFZlcmJvc2UgPj0gMjsKKyAgICAgd2FybiAiICAgIGZyb20gJHNwcmVmaXggdG8gJHJwcmVmaXhcbiIgaWYgJFZlcmJvc2UgPj0gMjsKKyAKKy0gICAgaWYoICRzZWxmLT57QVJHU317UFJFRklYfSAmJgorLSAgICAgICAgJHBhdGggIX4gc3teXFEkc3ByZWZpeFxFXGJ9eyRycHJlZml4fXMgKQorKyAgICBpZiggJHBhdGggIX4gc3teXFEkc3ByZWZpeFxFXGJ9eyRycHJlZml4fXMgJiYgJHNlbGYtPntBUkdTfXtQUkVGSVh9ICkKKyAgICAgeworIAorICAgICAgICAgd2FybiAiICAgIGNhbm5vdCBwcmVmaXgsIHVzaW5nIGRlZmF1bHQuXG4iIGlmICRWZXJib3NlID49IDI7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAoraW5kZXggOTEwNThiYi4uZTM5OWNlZCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAorQEAgLTY1LDkgKzY1LDcgQEAgaXNhX29rKCAkbW0sICdFeHRVdGlsczo6TWFrZU1ha2VyJyApOworIGlzKCAkbW0tPntOQU1FfSwgJ0JpZzo6RHVtbXknLCAgJ05BTUUnICk7CisgaXMoICRtbS0+e1ZFUlNJT059LCAwLjAxLCAgICAgICAgICAgICdWRVJTSU9OJyApOworIAorLW15ICRjb25maWdfcHJlZml4ID0gJENvbmZpZ3tpbnN0YWxscHJlZml4ZXhwfSB8fCAkQ29uZmlne2luc3RhbGxwcmVmaXh9IHx8CistICAgICAgICAgICAgICAgICAgICAkQ29uZmlne3ByZWZpeGV4cH0gICAgICAgIHx8ICRDb25maWd7cHJlZml4fTsKKy1pcyggJG1tLT57UEVSTFBSRUZJWH0sICRjb25maWdfcHJlZml4LCAgICdQRVJMUFJFRklYJyApOworK2lzKCAkbW0tPntQRVJMUFJFRklYfSwgJyQoUFJFRklYKScsICAgJ1BFUkxQUkVGSVgnICk7CisgCisgaXMoICEhJG1tLT57UEVSTF9DT1JFfSwgISEkRU5We1BFUkxfQ09SRX0sICdQRVJMX0NPUkUnICk7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CitpbmRleCBlOGRlN2M2Li4zZmIzZjEyIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQKK0BAIC0xMCw3ICsxMCw3IEBAIEJFR0lOIHsKKyB9CisgCisgdXNlIHN0cmljdDsKKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA1MjsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA0NzsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6QkZEOworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworQEAgLTYyLDE2ICs2MiwxNiBAQCBsaWtlKCAkc3Rkb3V0LT5yZWFkLCBxcnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAoPzpXcml0aW5nXCBNWU1FVEEueW1sXCBhbmRcIE1ZTUVUQS5qc29uXG4pPworIH14ICk7CisgCistaXMoICRtbS0+e1BSRUZJWH0sICckKFNJVEVQUkVGSVgpJywgJ1BSRUZJWCBzZXQgYmFzZWQgb24gSU5TVEFMTERJUlMnICk7CisrI2lzKCAkbW0tPntQUkVGSVh9LCAnJChTSVRFUFJFRklYKScsICdQUkVGSVggc2V0IGJhc2VkIG9uIElOU1RBTExESVJTJyApOworIAorIGlzYV9vayggJG1tLCAnRXh0VXRpbHM6Ok1ha2VNYWtlcicgKTsKKyAKKyBpcyggJG1tLT57TkFNRX0sICdCaWc6OkR1bW15JywgICdOQU1FJyApOworIGlzKCAkbW0tPntWRVJTSU9OfSwgMC4wMSwgICAgICAgICAgICAnVkVSU0lPTicgKTsKKyAKKy1mb3JlYWNoIG15ICRwcmVmaXggKHF3KFBSRUZJWCBQRVJMUFJFRklYIFNJVEVQUkVGSVggVkVORE9SUFJFRklYKSkgeworLSAgICB1bmxpa2UoICRtbS0+eyRwcmVmaXh9LCBxci9cJFwoUFJFRklYXCkvICk7CistfQorKyNmb3JlYWNoIG15ICRwcmVmaXggKHF3KFBSRUZJWCBQRVJMUFJFRklYIFNJVEVQUkVGSVggVkVORE9SUFJFRklYKSkgeworKyMgICAgdW5saWtlKCAkbW0tPnskcHJlZml4fSwgcXIvXCRcKFBSRUZJWFwpLyApOworKyN9CisgCisgCisgbXkgJFBSRUZJWCA9IEZpbGU6OlNwZWMtPmNhdGRpcignZm9vJywgJ2JhcicpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BydW5lX2xpYnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ0M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAyMWJjMDMzNzU1ZjBiNjA5ZjliYjJhYTllOThiMTBkNTg0MjQ0MDZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBQcnVuZSB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgd2FudGVkIHRvIHdoYXQgd2UgYWN0dWFsbHkgbmVlZC4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xMjgzNTUKKworV2Ugd2FudCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgb24gcGVybC1iYXNlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLAorYW5kIHNvbWUgb2YgdGhlIG9yaWdpbmFsIGxpc3QgbWF5IGJlIHByZXNlbnQgb24gYnVpbGRkcyAoc2VlIEJ1ZyMxMjgzNTUpLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcHJ1bmVfbGlicy5kaWZmCistLS0KKyBDb25maWd1cmUgfCA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NvbmZpZ3VyZSBiL0NvbmZpZ3VyZQoraW5kZXggMGE0MDVkMy4uNmZjYzNiYyAxMDA3NTUKKy0tLSBhL0NvbmZpZ3VyZQorKysrIGIvQ29uZmlndXJlCitAQCAtMTQ1NCw4ICsxNDU0LDcgQEAgbGlic3dhbnRlZF91c2VsYXJnZWZpbGVzPScnCisgOiBzZXQgdXNlc29ja3Mgb24gdGhlIENvbmZpZ3VyZSBjb21tYW5kIGxpbmUgdG8gZW5hYmxlIHNvY2tzLgorIDogTGlzdCBvZiBsaWJyYXJpZXMgd2Ugd2FudC4KKyA6IElmIGFueW9uZSBuZWVkcyBleHRyYSAtbHh4eCwgcHV0IHRob3NlIGluIGEgaGludCBmaWxlLgorLWxpYnN3YW50ZWQ9ImNsIHB0aHJlYWQgc29ja2V0IGJpbmQgaW5ldCBuc2wgbm0gbmRibSBnZGJtIGRibSBkYiBtYWxsb2MgZGwgbGQiCistbGlic3dhbnRlZD0iJGxpYnN3YW50ZWQgc3VuIG0gY3J5cHQgc2VjIHV0aWwgYyBjcG9zaXggcG9zaXggdWNiIGJzZCBCU0QiCisrbGlic3dhbnRlZD0nZ2RibSBnZGJtX2NvbXBhdCBkYiBkbCBtIGMgY3J5cHQnCisgOiBXZSBwcm9iYWJseSB3YW50IHRvIHNlYXJjaCAvdXNyL3NobGliIGJlZm9yZSBtb3N0IG90aGVyIGxpYnJhcmllcy4KKyA6IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBsaWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIHJvdXRpbmUgZXh0bGlibGlzdC4KKyBnbGlicHRoPWBlY2hvICIgJGdsaWJwdGggIiB8IHNlZCAtZSAncyEgL3Vzci9zaGxpYiAhICEnYAorQEAgLTIzNTkzLDcgKzIzNTkyLDcgQEAgc3Vub3MqWDQqKQorICAgICA7OworICopIGNhc2UgIiR1c2VkbCIgaW4KKyAgICAgJGRlZmluZXx0cnVlfFt5WV0qKQorLQkgICAgc2V0IFggYGVjaG8gIiAkbGlicyAiIHwgc2VkIC1lICdzQCAtbG5kYm0gQCBAJyAtZSAnc0AgLWxnZGJtIEAgQCcgLWUgJ3NAIC1sZ2RibV9jb21wYXQgQCBAJyAtZSAnc0AgLWxkYm0gQCBAJyAtZSAnc0AgLWxkYiBAIEAnYAorKwkgICAgc2V0IFggYGVjaG8gIiAkbGlicyAiIHwgc2VkIC1lICdzQCAtbGdkYm0gQCBAJyAtZSAnc0AgLWxnZGJtX2NvbXBhdCBAIEAnIC1lICdzQCAtbGRiIEAgQCdgCisgCSAgICBzaGlmdAorIAkgICAgcGVybGxpYnM9IiQqIgorIAkgICAgOzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEzZmM5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gY2IzZTk4ZTE3YTY2Njg5NjE1MGIxMDk2OTRlOWViOTI3ODYyMDg0NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTcgTWF5IDIwMTQgMTQ6NTc6MDEgKzAzMDAKK1N1YmplY3Q6IFNraXAgYSByZWdlbmVyYXRpb24gY2hlY2sgaW4gdW5yZWxhdGVkIGdpdCByZXBvc2l0b3JpZXMKKworSWYgdGhlIHRlc3QgaXMgcnVuIGluIGEgZ2l0IHJlcG9zaXRvcnkgd2l0aG91dCBsaWIvLmdpdGlnbm9yZSwKK2ZvciBpbnN0YW5jZSBiZWNhdXNlIHRoZSByZXBvc2l0b3J5IG9ubHkgaW1wb3J0ZWQgdGhlIFBlcmwgdGFyYmFsbCwKK3RoZSByZWdlbmVyYXRpb24gY2hlY2sgaXMgYnJva2VuIGJlY2F1c2UgbGliLy5naXRpZ25vcmUgaXMgbWlzc2luZy4KKworUGF0Y2gtTmFtZTogZGViaWFuL3JlZ2VuLXNraXAuZGlmZgorLS0tCisgcmVnZW4vbGliX2NsZWFudXAucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9yZWdlbi9saWJfY2xlYW51cC5wbCBiL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCitpbmRleCBjOWQ2ZTQzLi5mZWNlMWVkIDEwMDY0NAorLS0tIGEvcmVnZW4vbGliX2NsZWFudXAucGwKKysrKyBiL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCitAQCAtMTU5LDcgKzE1OSw3IEBAIGZvcmVhY2ggKCd3aW4zMi9NYWtlZmlsZScsICd3aW4zMi9tYWtlZmlsZS5taycpIHsKKyB9CisgCisgIyBUaGlzIG11c3QgY29tZSBsYXN0IGFzIGl0IGNhbiBleGl0IGVhcmx5OgorLWlmICgkVEFQICYmICEtZCAnLmdpdCcgJiYgIS1mICdsaWIvLmdpdGlnbm9yZScpIHsKKytpZiAoJFRBUCAmJiAhLWQgJy5naXQnIHx8ICEtZiAnbGliLy5naXRpZ25vcmUnKSB7CisgICAgIHByaW50ICJvayAjIHNraXAgbm90IGJlaW5nIHJ1biBmcm9tIGEgZ2l0IGNoZWNrb3V0LCBoZW5jZSBubyBsaWIvLmdpdGlnbm9yZVxuIjsKKyAgICAgZXhpdCAwOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmYzBiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gNDI4NTNhZjY1YTI4MDY2YjExOWQyM2Q5NmU5NjRlOTRiNTVhODU0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgNSBBdWcgMjAxMSAxMDo1MDoxOCArMDMwMAorU3ViamVjdDogU2tpcCBhIGNyYXNoaW5nIHRlc3QgY2FzZSBpbiB0L29wL3RocmVhZHMudCBvbiBHTlUva0ZyZWVCU0QKKworQnVnOiBodHRwOi8vcnQucGVybC5vcmcvcnQzL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9OTYyNzIKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjI4NDkzCisKK1RoZSBjcmFzaCBpcyBub3QgYSByZWdyZXNzaW9uIGluIDUuMTQsIGl0IGp1c3QgZ2V0cyB0cmlnZ2VyZWQgdGhlcmUgYnkKK2EgbmV3IHVucmVsYXRlZCB0ZXN0IGNhc2UuCisKK1NraXAgdGhlIHRlc3QgdW50aWwgdGhlIGN1bHByaXQgaXMgZm91bmQuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYKKy0tLQorIHQvb3AvdGhyZWFkcy50IHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdC9vcC90aHJlYWRzLnQgYi90L29wL3RocmVhZHMudAoraW5kZXggZTc2Yzk1Ni4uYmVjMjEwYiAxMDA2NDQKKy0tLSBhL3Qvb3AvdGhyZWFkcy50CisrKysgYi90L29wL3RocmVhZHMudAorQEAgLTM3Niw2ICszNzYsOSBAQCBFT0YKKyB9CisgCisgCisrU0tJUDogeworKyAgICBza2lwICJbcGVybCAjOTYyNzJdIGF2b2lkIGNyYXNoIG9uIEdOVS9rRnJlZUJTRCIsIDEKKysgICAgICAgIGlmICReTyBlcSAnZ251a2ZyZWVic2QnOworICMgW3BlcmwgIzc4NDk0XSBQaXBlcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIGJsb2NrIHdoZW4gY2xvc2VkCisgeworICAgbXkgJHBlcmwgPSB3aGljaF9wZXJsOworQEAgLTM4NCw2ICszODcsNyBAQCBFT0YKKyAgIHRocmVhZHMtPmNyZWF0ZShzdWIgeyB9KS0+am9pbjsKKyAgIG9rKDEsICJQaXBlcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIGRvIG5vdCBibG9jayB3aGVuIGNsb3NlZCIpOworIH0KKyt9CisgCisgIyBbcGVybCAjMTA1MjA4XSBUeXBlZ2xvYiBjbG9uZXMgc2hvdWxkIG5vdCBiZSBjbG9uZWQgYWdhaW4gZHVyaW5nIGEgam9pbgorIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzg3MTA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYWU5YjY0NWQ2ZGEyOTkwZmQwNTUzNjhlY2EyYzY3YzQ0OTQ3NGUzOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMjIgQXByIDIwMTEgMTE6MTU6MzIgKzAzMDAKK1N1YmplY3Q6IFNraXAgdGVzdHMgc3BlY2lmaWMgdG8gdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5CisKK1RoZXNlIHRlc3RzIGZhaWwgaWYgcnVuIGZyb20gYSBkaWZmZXJlbnQgZ2l0IHJlcG9zaXRvcnkgdGhhbgordXBzdHJlYW0uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIG5lZWRsZXNzbHkgZm9yIGRvd25zdHJlYW0gcGFja2FnZXJzLgorCitTa2lwIHRoZSB0ZXN0cyBhbHRvZ2V0aGVyIGV2ZW4gaWYgdGhlIC5naXQgZGlyZWN0b3J5IGV4aXN0cy4KKworUGF0Y2gtTmFtZTogZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYKKy0tLQorIHQvdGVzdC5wbCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3QvdGVzdC5wbCBiL3QvdGVzdC5wbAoraW5kZXggY2RhMzg0MC4uYWY1NzlhMiAxMDA2NDQKKy0tLSBhL3QvdGVzdC5wbAorKysrIGIvdC90ZXN0LnBsCitAQCAtMTc0LDcgKzE3NCw3IEBAIHN1YiBza2lwX2FsbF93aXRob3V0X3VuaWNvZGVfdGFibGVzIHsgIyAoYnV0IG9ubHkgdW5kZXIgbWluaXBlcmwpCisgCisgc3ViIGZpbmRfZ2l0X29yX3NraXAgeworICAgICBteSAoJHNvdXJjZV9kaXIsICRyZWFzb24pOworLSAgICBpZiAoLWQgJy5naXQnKSB7CisrICAgIGlmICgtZCAnLmdpdCcgJiYgISAtZCAnZGViaWFuJykgeworIAkkc291cmNlX2RpciA9ICcuJzsKKyAgICAgfSBlbHNpZiAoLWwgJ01BTklGRVNUJyAmJiAtbCAnQVVUSE9SUycpIHsKKyAJbXkgJHdoZXJlID0gcmVhZGxpbmsgJ01BTklGRVNUJzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjMxNDU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNDg3YTZkNmFkYTBiMDhlNmE3Mjc2NTIwZWJjNjFjZDg1MTAwNWU3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMyBPY3QgMjAxMCAyMTozNjoxNyArMDMwMAorU3ViamVjdDogU3F1ZWxjaCBsb2NhbGUgd2FybmluZ3MgaW4gRGViaWFuIHBhY2thZ2UgbWFpbnRhaW5lciBzY3JpcHRzCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTA4NzY0CisKK1RoZSBzeXN0ZW0gbG9jYWxlcyBhcmUgcmF0aGVyIGZyZXF1ZW50bHkgb3V0IG9mIHN5bmMgd2l0aCB0aGUgQyBsaWJyYXJ5CitkdXJpbmcgcGFja2FnZSB1cGdyYWRlcywgY2F1c2luZyBhIGh1Z2UgYW1vdW50IG9mIHVzZWxlc3MgUGVybCBsb2NhbGUKK3dhcm5pbmdzLiBTcXVlbGNoIHRoZW0gd2hlbiBydW5uaW5nIHBhY2thZ2UgbWFpbnRhaW5lciBzY3JpcHRzLCBkZXRlY3RlZAorYnkgdGhlIERQS0dfUlVOTklOR19WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitBbnkgcmVhbCBsb2NhbGUgcHJvYmxlbSB3aWxsIHNob3cgdXAgYWZ0ZXIgdGhlIHN5c3RlbSB1cGdyYWRlIHRvbywgYW5kCit0aGUgd2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBub3JtYWxseSBhZ2FpbiBhdCB0aGF0IHBvaW50LgorCitQYXRjaC1OYW1lOiBkZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgorLS0tCisgbG9jYWxlLmMgICAgICAgICAgIHwgNSArKysrLQorIHBvZC9wZXJsbG9jYWxlLnBvZCB8IDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xvY2FsZS5jIGIvbG9jYWxlLmMKK2luZGV4IDdhNGE0MTguLmZkZjkxMWQgMTAwNjQ0CistLS0gYS9sb2NhbGUuYworKysrIGIvbG9jYWxlLmMKK0BAIC02NzQsNyArNjc0LDEwIEBAIFBlcmxfaW5pdF9pMThubDEwbihwVEhYXyBpbnQgcHJpbnR3YXJuKQorIAorICAgICBjb25zdCBib29sIGxvY3dhcm4gPSAocHJpbnR3YXJuID4gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByaW50d2FybgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICghIGJhZF9sYW5nX3VzZV9vbmNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWJpYW4gc3BlY2lmaWMgY2hhbmdlIC0gc2VlIGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTA4NzY0ICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFQZXJsRW52X2dldGVudigiRFBLR19SVU5OSU5HX1ZFUlNJT04iKSkgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoISBiYWRfbGFuZ191c2Vfb25jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzYWxsb3cgd2l0aCAiIiBvciAiMCIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmFkX2xhbmdfdXNlX29uY2UKK2RpZmYgLS1naXQgYS9wb2QvcGVybGxvY2FsZS5wb2QgYi9wb2QvcGVybGxvY2FsZS5wb2QKK2luZGV4IDcwMWI0MjIuLjU4Y2FiYWYgMTAwNjQ0CistLS0gYS9wb2QvcGVybGxvY2FsZS5wb2QKKysrKyBiL3BvZC9wZXJsbG9jYWxlLnBvZAorQEAgLTEyMTcsNiArMTIxNywxNCBAQCBCPE5PVEU+OiBDPFBFUkxfQkFETEFORz4gb25seSBnaXZlcyB5b3UgYSB3YXkgdG8gaGlkZSB0aGUgd2FybmluZyBtZXNzYWdlLgorIFRoZSBtZXNzYWdlIHRlbGxzIGFib3V0IHNvbWUgcHJvYmxlbSBpbiB5b3VyIHN5c3RlbSdzIGxvY2FsZSBzdXBwb3J0LAorIGFuZCB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHdoYXQgdGhlIHByb2JsZW0gaXMuCisgCisrPWl0ZW0gRFBLR19SVU5OSU5HX1ZFUlNJT04KKysKKytPbiBEZWJpYW4gc3lzdGVtcywgaWYgdGhlIERQS0dfUlVOTklOR19WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIGlzCisrc2V0ICh0byBhbnkgdmFsdWUpLCB0aGUgbG9jYWxlIGZhaWx1cmUgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIGp1c3QKKytsaWtlIHdpdGggYSB6ZXJvIFBFUkxfQkFETEFORyBzZXR0aW5nLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgZmxvb2RzCisrb2Ygc3B1cmlvdXMgd2FybmluZ3MgZHVyaW5nIHN5c3RlbSB1cGdyYWRlcy4KKytTZWUgTDxodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUwODc2ND4uCisrCisgPWJhY2sKKyAKKyBUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNwZWNpZmljIHRvIFBlcmw6IFRoZXkgYXJlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FkYzJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZgpAQCAtMCwwICsxLDM2IEBACitGcm9tIDU5MWMxZjliN2Q0NzU1YmZjNTlkOTY2NWJhYjFmMmNhNDEwZGU3NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogU2V0IHVtYXNrIGFwcHJvcHJvYXRlbHkgZm9yIHNpdGUgaW5zdGFsbCBkaXJlY3RvcmllcworCitQb2xpY3kgcmVxdWlyZXMgZ3JvdXAgd3JpdGFibGUgc2l0ZSBkaXJlY3RvcmllcworCitQYXRjaC1OYW1lOiBkZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggMTk3ZjEwMi4uNWYxYjg3ZiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMzgsNyArMjEzOCw3IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAKKyAKKyBwdXJlX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTk5LDggKzIxOTksOCBAQCBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorIAorIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2R5bmFsb2FkZXJoYWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2R5bmFsb2FkZXJoYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjU5MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorSGFjayB0aGUgZHluYW1pYyBtb2R1bGUgbG9hZGVyIHNvIHRoYXQgd2UgdXNlIG5hdGl2ZSBtb2R1bGVzIHNpbmNlIHdlIGNhbid0IGxvYWQKK3RoZSB0YXJnZXQgb25lcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQCisyMDEzLzAxLzEzCisKK0luZGV4OiBwZXJsLTUuMTQuMi9leHQvRHluYUxvYWRlci9EeW5hTG9hZGVyX3BtLlBMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9leHQvRHluYUxvYWRlci9EeW5hTG9hZGVyX3BtLlBMCTIwMTEtMDktMTkgMTM6MTg6MjIuMDAwMDAwMDAwICswMDAwCisrKysgcGVybC01LjE0LjIvZXh0L0R5bmFMb2FkZXIvRHluYUxvYWRlcl9wbS5QTAkyMDEzLTAxLTE5IDE2OjA5OjUxLjAyMDU4NDk0NSArMDAwMAorQEAgLTMxMCw2ICszMTAsMTAgQEAKKyAgICAgZm9yZWFjaCAoQElOQykgeworIAk8PCReTy1lcS1WTVM+PmNob3AoJF8gPSBWTVM6OkZpbGVzcGVjOjp1bml4cGF0aCgkXykpOzw8LyReTy1lcS1WTVM+PgorIAkgICAgbXkgJGRpciA9ICIkXy9hdXRvLyRtb2RwbmFtZSI7CisrCisrCWlmIChkZWZpbmVkICRFTlZ7UEVSTF9MSUJ9IGFuZCBkZWZpbmVkICRFTlZ7UEVSTEhPU1RMSUJ9KSB7CisrCSAgICAkZGlyID1+IHMvJEVOVntQRVJMX0xJQn0vJEVOVntQRVJMSE9TVExJQn0vZzsKKysJfQorIAkKKyAJbmV4dCB1bmxlc3MgLWQgJGRpcjsgIyBza2lwIG92ZXIgdW5pbnRlcmVzdGluZyBkaXJlY3RvcmllcworIAkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLWhpbnRzLWxpbnV4LnBsLWxpbmstbGliZ2RibV9jb21wYXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NGVmNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYmE0ZWQwYjViN2JhYWQ1MzUzYzFlNjViNjU1ZjQxZDQ1ZTAxYzk5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMiBKdW4gMjAxNSAyMDowMDoxMSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBleHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsOiBsaW5rIGxpYmdkYm1fY29tcGF0CisKK0ZpeGVkIGZvciB0ZXN0IGNhc2UgLi4vZXh0L09EQk1fRmlsZS90L29kYm0udDoKK29rIDEgLSB1c2UgT0RCTV9GaWxlOworb2sgMiAtIHVzZSBGY250bDsKKy4vcGVybDogc3ltYm9sIGxvb2t1cCBlcnJvcjogL3Vzci9saWIvcGVybC81LjIyLjAvYXV0by9PREJNX0ZpbGUvT0RCTV9GaWxlLnNvOiB1bmRlZmluZWQgc3ltYm9sOiBkYm1pbml0CisKK1RoZSBjaGVja2luZyAiaWYgLWUgJF8uJy9saWJnZGJtX2NvbXBhdC5zbyciIGRvZXNuJ3Qgd29yayB3aGVuIGNyb3NzCitidWlsZCwgc28gYWx3YXlzIGxpbmsgbGliZ2RibV9jb21wYXQsIHNpbmNlIHBlcmwgZGVwZW5kcyBvbiBnZGJtIGFuZCB3ZQorYWx3YXlzIGhhdmUgbGliZ2RibV9jb21wYXQuCisKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsIHwgICAgNiAtLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwgYi9leHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsCitpbmRleCAyMDRiYmEwLi45MjcxYjQ1IDEwMDY0NAorLS0tIGEvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAorKysrIGIvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAorQEAgLTEsOCArMSwyIEBACisgIyB1c2VzIEdEQk0gZGJtIGNvbXBhdGliaWxpdHkgZmVhdHVyZSAtIGF0IGxlYXN0IG9uIFN1U0UgOC4wCistJHNlbGYtPntMSUJTfSA9IFsnLWxnZGJtJ107CistCistIyBEZWJpYW4vVWJ1bnR1IGhhdmUgbGliZ2RibV9jb21wYXQuc28gYnV0IG5vdCB0aGlzIGZpbGUsCistIyBzbyBsaW5raW5nIG1heSBmYWlsCistZm9yZWFjaCAoc3BsaXQgLyAvLCAkQ29uZmlne2xpYnB0aH0pIHsKKy0gICAgJHNlbGYtPntMSUJTfS0+WzBdIC49ICcgLWxnZGJtX2NvbXBhdCcgaWYgLWUgJF8uJy9saWJnZGJtX2NvbXBhdC5zbyc7CistfQorKyRzZWxmLT57TElCU30gPSBbJy1sZ2RibSAtbGdkYm1fY29tcGF0J107CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMDViODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGI4NDJlMWRlNzc5OGExZjdkZjc3MGJiM2YxODVhZDMzNTZlNDkwZTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjIgSnVuIDIwMTUgMjA6MDY6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZXh0L09EQk1fRmlsZS90L29kYm0udDogZml4IHRoZSAgcGF0aCBvZiBkYm10X2NvbW1vbi5wbAorCitJdCBzaG91bGQgYmUgbGliL2RibXRfY29tbW9uLnBsIHdoZW4gcnVuIGJ5IHJ1bi1wdGVzdC4KKworRml4ZWQ6CitDYW4ndCBsb2NhdGUgLi4vLi4vdC9saWIvZGJtdF9jb21tb24ucGwgaW4gQElOQworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGV4dC9PREJNX0ZpbGUvdC9vZGJtLnQgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leHQvT0RCTV9GaWxlL3Qvb2RibS50IGIvZXh0L09EQk1fRmlsZS90L29kYm0udAoraW5kZXggMDc5YjlmMS4uMjUwYjk5MSAxMDA2NDQKKy0tLSBhL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKKysrKyBiL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKK0BAIC0yLDcgKzIsNyBAQAorIAorIG91ciAkREJNX0NsYXNzID0gJ09EQk1fRmlsZSc7CisgCistcmVxdWlyZSAnLi4vLi4vdC9saWIvZGJtdF9jb21tb24ucGwnOworK3JlcXVpcmUgJ2xpYi9kYm10X2NvbW1vbi5wbCc7CisgCisgaWYgKCReTyBlcSAnaHB1eCcpIHsKKyAgICAgcHJpbnQgPDxFT007CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWFjNDM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDcvMDEKKworRml4IHRoZXNlIFBhY2thZ2UgUUEgd2FybmluZ3MgYmVmb3JlIHRoZXkgYXJlIGNvbnZlcnRlZCBpbnRvIGZldGFsIGVycm9yczoKKworV0FSTklORzogUUEgSXNzdWU6IHBhY2thZ2UgcGVybC1tb2R1bGUtY29tcHJlc3MgY29udGFpbnMgYmFkIFJQQVRIIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9saWIgaW4gZmlsZSAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMC90bXAvd29yay9pNTg2LXBva3ktbGludXgvcGVybC01LjEyLjMtcjEvcGFja2FnZXMtc3BsaXQvcGVybC1tb2R1bGUtY29tcHJlc3MvdXNyL2xpYi9wZXJsLzUuMTIuMy9hdXRvL0NvbXByZXNzL1Jhdy9abGliL1psaWIuc28KKworVGhpcyBmaXhlcyB0aGlzIHdhcm5pbmcgZm9yIHBlcmwgcmVjaXBlIGFzIHdlbGwgYXMgbGlieG1sLXBhcnNlci1wZXJsIHJlY2lwZS4gCitJdCBpcyBhIGZpeCB0byBNYWtlTWFrZXIgd2l0aGluIHBlcmwsIHNvIGFsbCBzdWNoIHBlcmwgcmVjaXBlcyB3aWxsIGdldCAKK2ZpeGVkIHdpdGggdGhpcyBwZXJsIGZpeC4KKworSW5kZXg6IHBlcmwtNS4xNC4yL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCisrKysgcGVybC01LjE0LjIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCitAQCAtNTUsNiArNTUsNyBAQCBzdWIgX3VuaXhfb3MyX2V4dCB7CisgICAgIG15KCRmb3VuZCkgPSAwOworIAorICAgICAjIERlYmlhbi1zcGVjaWZpYzogZG9uJ3QgdXNlIExEX1JVTl9QQVRIIGZvciBzdGFuZGFyZCBkaXJzCisrICAgIHB1c2goQGxpYnBhdGgsICJTWVNST09UTElCIik7CisgICAgICRsZF9ydW5fcGF0aF9zZWVueyRffSsrIGZvciBAbGlicGF0aDsKKyAKKyAgICAgZm9yZWFjaCBteSAkdGhpc2xpYiAoc3BsaXQgJyAnLCAkcG90ZW50aWFsX2xpYnMpIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9nZW5lcmF0ZS1zaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9nZW5lcmF0ZS1zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Y2ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVXNlIHRoZSBsZCBmbGFncyBmcm9tIHRoZSBzdXBwbGllZCBjb25maWd1cmF0aW9uIGZpbGUuIEZvciBzaCB3ZSBuZWVkIHRoZQorZmxhZ3MgdGhhdCBzcGVjaWZ5IHRvIGJ1aWxkIFBJQyBjb2RlIHNvIHRoYXQgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd29yay4KKworSW5kZXg6IHBlcmwtNS4xNC4yL0Nyb3NzL2dlbmVyYXRlX2NvbmZpZ19zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvQ3Jvc3MvZ2VuZXJhdGVfY29uZmlnX3NoCTIwMTAtMTItMzAgMDQ6MDc6MTQuMDAwMDAwMDAwICswMjAwCisrKysgcGVybC01LjE0LjIvQ3Jvc3MvZ2VuZXJhdGVfY29uZmlnX3NoCTIwMTItMTEtMjIgMTU6NTg6NDkuODUyODUyODA1ICswMjAwCitAQCAtMTksMTAgKzE5LDEwIEBACisgJGNhbGxiYWNrcy0+eydhcid9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQVIiLCAiYXJtLWxpbnV4LWFyIl1dOworICRjYWxsYmFja3MtPnsnYXJjaG5hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIlNZUyIsICJhcm12NGwtbGludXgiXV07CisgJGNhbGxiYWNrcy0+eydjYyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0MiLCAiYXJtLWxpbnV4LWdjYyJdXTsKKy0kY2FsbGJhY2tzLT57J2NjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CistJGNhbGxiYWNrcy0+eydjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CistJGNhbGxiYWNrcy0+eydjY2ZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworLSRjYWxsYmFja3MtPnsnY2NmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworKyMkY2FsbGJhY2tzLT57J2NjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CisrIyRjYWxsYmFja3MtPnsnY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworKyRjYWxsYmFja3MtPnsnY2NmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3NfaW5zZXJ0LCBbIkNGTEFHUyIsICItZm5vLXN0cmljdC1hbGlhc2luZyAtRF9HTlVfU09VUkNFIC1EVEhSRUFEU19IQVZFX1BJRFMgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworKyRjYWxsYmFja3MtPnsnY2NmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2Vzc19pbnNlcnQsIFsiQ0ZMQUdTIiwgIi1EX0dOVV9TT1VSQ0UgLURUSFJFQURTX0hBVkVfUElEUyAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiXV07CisgJGNhbGxiYWNrcy0+eydjY25hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDIiwgImFybS1saW51eC1nY2MiXV07CisgJGNhbGxiYWNrcy0+eydjcHAnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDUCIsICJhcm0tbGludXgtY3BwIl1dOworICRjYWxsYmFja3MtPnsnY3BwZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDUEZMQUdTIiwgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIl1dOworQEAgLTMwLDYgKzMwLDcgQEAKKyAkY2FsbGJhY2tzLT57J2NwcHN0ZGluJ30gPSBbXCZzaW1wbGVfcHJvY2Vzc19hcHBlbmQsIFsiQ0MiLCAiYXJtLWxpbnV4LWdjYyAtRSIsICItRSJdXTsKKyAkY2FsbGJhY2tzLT57J2Z1bGxfYXInfSA9IFtcJmJhY2t0aWNrLCBbIkFSIiwgIndoaWNoICRFTlZ7QVJ9IiwgIi91c3IvbG9jYWwvYXJtLzIuOTUuMy9iaW4vYXJtLWxpbnV4LWFyIl1dOworICRjYWxsYmFja3MtPnsnbGQnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxEIiwgImFybS1saW51eC1sZCJdXTsKKyskY2FsbGJhY2tzLT57J2xkZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiTERETEZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J2xkZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxERkxBR1MiLCAiIl1dOworICRjYWxsYmFja3MtPnsnbGRmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMREZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J215YXJjaG5hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIlNZUyIsICJhcm12NGwtbGludXgiXV07CitAQCAtMTA1LDYgKzEwNiwyMyBAQAorIAorIH0KKyAKKysjIEluc2VydCBlbnYgdmFyIGludG8gdGhlIHZhcmlhYmxlcyB2YWx1ZQorK3N1YiBzaW1wbGVfcHJvY2Vzc19pbnNlcnQgeworKwlteSAka2V5ID0gc2hpZnQ7CisrCW15ICR2YWx1ZSA9IHNoaWZ0OworKwlteSAkZW52dmFyID0gJGNhbGxiYWNrcy0+eyRrZXl9LT5bMV1bMF07CisrCisrCWlmICgkRU5WeyRlbnZ2YXJ9KSB7CisrCQkjIFN0cmlwIHF1b3RlcyBmcm9tIHZhbHVlCisrCQkkdmFsdWUgPX4gcy9eXCcvLzsKKysJCSR2YWx1ZSA9fiBzL1wnJC8vOworKwkJIyBSZW1vdmUgLUkvdXNyL2xvY2FsLy4uLiBmcm9tIHRoZSB2YWx1ZQorKwkJJHZhbHVlID1+IHMjXFctSS91c3IvbG9jYWwvXHcrXFcjICNnOworKwkJIyBQcmVwZW5kIGVudiB2YXIgKE9FIHNldHRpbmcpIHRvIHZhbHVlCisrCQlwcmludCgiJGtleT1cJyRFTlZ7JGVudnZhcn0gJHZhbHVlXCdcbiIpOworKwl9CisrfQorKworIHN1YiBsaWJyYXJ5X211bmdlIHsKKyAJbXkgJGtleSA9IHNoaWZ0OworIAlteSAkdmFsdWUgPSBzaGlmdDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9pbnN0YWxscGVybC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9pbnN0YWxscGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTYwMTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xMi4zL2luc3RhbGxwZXJsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9pbnN0YWxscGVybAorKysrIHBlcmwtNS4xMi4zL2luc3RhbGxwZXJsCitAQCAtMyw4ICszLDggQEAKKyBCRUdJTiB7CisgICAgIHJlcXVpcmUgNS4wMDQ7CisgICAgIGNoZGlyICcuLicgaWYgIS1kICdsaWInIGFuZCAtZCAnLi4vbGliJzsKKy0gICAgQElOQyA9ICdsaWInOworLSAgICAkRU5We1BFUkw1TElCfSA9ICdsaWInOworKyMgICAgQElOQyA9ICdsaWInOworKyMgICAgJEVOVntQRVJMNUxJQn0gPSAnbGliJzsKKyAKKyAgICAgIyBUaGlzIG5lZWRzIHRvIGJlIGF0IEJFR0lOIHRpbWUsIGJlZm9yZSBhbnkgdXNlIG9mIENvbmZpZworICAgICByZXF1aXJlICcuL2luc3RhbGxfbGliLnBsJzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9sZXRnY2MtZmluZC1lcnJuby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9sZXRnY2MtZmluZC1lcnJuby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYxZTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyByZW1vdmVzIGFsbCB0aGUgbG9naWMgdGhhdCBwZXJsIHVzZXMgdG8gbG9jYXRlIGFuIGFwcHJvcHJpYXRlCitlcnJuby5oIGZvciB0aGUgdGFyZ2V0LiBJbnN0ZWFkIHdlIHNpbXBsZSBjcmVhdGUgYSBmaWxlIHRoYXQgZG9lcworCisgICNpbmNsdWRlICJlcnJuby5oIgorCithbmQgdXNlIHRoYXQgYXMgdGhlIGZpbGUgdG8gcGFyc2UuIFRoaXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcgYW4KK2V4dGVybmFsIHRvb2xjaGFpbiBzaW5jZSBwZXJsIHdpbGwgc2VhcmNoIGluICR7U1RBR0lOR19JTkNESVJ9IGZvcgorZXJybm8uaCAod2hlbiB1c2luZyBnY2MpIGFuZCB0aGF0IGlzbid0IHdoZXJlIGl0J3MgbG9jYXRlZCAtIGl0cword2hlcmV2ZXIgdGhlIGV4dGVybmFsIHRvb2xjaGFpbiBrZWVwcyBpdCdzIGhlYWRlcnMuCisKK0luZGV4OiBwZXJsLTUuMTIuMy9leHQvRXJybm8vRXJybm9fcG0uUEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL2V4dC9FcnJuby9FcnJub19wbS5QTAorKysrIHBlcmwtNS4xMi4zL2V4dC9FcnJuby9FcnJub19wbS5QTAorQEAgLTE3LDggKzE3LDE4IEBAIHVubGluayAiRXJybm8udG1wIiBpZiAtZiAiRXJybm8udG1wIjsKKyBvcGVuIE9VVCwgIj5FcnJuby50bXAiIG9yIGRpZSAiQ2Fubm90IG9wZW4gRXJybm8udG1wOiAkISI7Cisgc2VsZWN0IE9VVDsKKyBteSAkZmlsZTsKKy1teSBAZmlsZXMgPSBnZXRfZmlsZXMoKTsKKy1pZiAoJENvbmZpZ3tnY2N2ZXJzaW9ufSBuZSAnJyAmJiAkXk8gZXEgJ01TV2luMzInKSB7CisrI215IEBmaWxlcyA9IGdldF9maWxlcygpOworK215IEBmaWxlcyA9ICgiZXJybm8uaCIpOworKworK2lmICgxKSB7CisrICAgIG9wZW4gSU5DUywgJz5pbmNsdWRlcy5jJyBvcgorKwlkaWUgIkNhbm5vdCBvcGVuIGluY2x1ZGVzLmMiOworKyAgICBwcmludCBJTkNTIHFxWyNpbmNsdWRlICJlcnJuby5oIlxuXTsKKysgICAgY2xvc2UgSU5DUzsKKysgICAgcHJvY2Vzc19maWxlKCdpbmNsdWRlcy5jJyk7CisrICAgIHVubGluayAnaW5jbHVkZXMuYyc7CisrfQorK2Vsc2lmICgkQ29uZmlne2djY3ZlcnNpb259IG5lICcnICYmICReTyBlcSAnTVNXaW4zMicpIHsKKyAgICAgIyBNaW5HVyBjb21wbGFpbnMgIndhcm5pbmc6ICNwcmFnbWEgc3lzdGVtX2hlYWRlciBpZ25vcmVkIG91dHNpZGUgaW5jbHVkZQorICAgICAjIGZpbGUiIGlmIHRoZSBoZWFkZXIgZmlsZXMgYXJlIHByb2Nlc3NlZCBpbmRpdmlkdWFsbHksIHNvIGluY2x1ZGUgdGhlbQorICAgICAjIGFsbCBpbiAuYyBmaWxlIGFuZCBwcm9jZXNzIHRoYXQgaW5zdGVhZC4KK0BAIC01Myw3ICs2Myw3IEBAIHN1YiBwcm9jZXNzX2ZpbGUgeworICAgICAgICAgY2hvbXAoJGZpbGUgPSBgY3lncGF0aCAtdyAiJGZpbGUiYCk7CisgICAgIH0KKyAKKy0gICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRmaWxlIGFuZCAtZiAkZmlsZTsKKysjICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkZmlsZSBhbmQgLWYgJGZpbGU7CisgIyAgICB3YXJuICJQcm9jZXNzaW5nICRmaWxlXG4iOworIAorICAgICBsb2NhbCAqRkg7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9tYWtlX2V4dC5wbC1maXgtcmVnZW5lcmF0ZS1tYWtlZmlsZS1mYWlsZWQtd2hpbGUtY2MtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNmY2NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaApAQCAtMCwwICsxLDMwIEBACittYWtlX2V4dC5wbDogZml4IHJlZ2VuZXJhdGUgbWFrZWZpbGUgZmFpbGVkIHdoaWxlICRjYyBjaGFuZ2VkCisKK1doaWxlICRjYyBjaGFuZ2VkLCB0aGUgZXhpc3RhbmNlIG9mICd4ZGVmaW5lJyBjYXVzZWQgbWFrZWZpbGUKK3JlZ2VuZXJhdGlvbiBmYWlsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBtYWtlX2V4dC5wbCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21ha2VfZXh0LnBsIGIvbWFrZV9leHQucGwKK2luZGV4IGI0MzM3NjIuLjlmYzFhMzYgMTAwNjQ0CistLS0gYS9tYWtlX2V4dC5wbAorKysrIGIvbWFrZV9leHQucGwKK0BAIC0zMzUsNiArMzM1LDEwIEBAIHN1YiBidWlsZF9leHRlbnNpb24geworICAgICAgICAgICAgICAgICBwcmludCAiRGVsZXRpbmcgbm9uLUNyb3NzIG1ha2VmaWxlXG4iOworICAgICAgICAgICAgICAgICBjbG9zZSAkbWZoIG9yIGRpZSAiY2xvc2UgJG1ha2VmaWxlOiAkISI7CisgICAgICAgICAgICAgICAgIF91bmxpbmsoJG1ha2VmaWxlKTsKKysgICAgICAgICAgICAgICAgaWYoLWUgJ3hkZWZpbmUnKSB7CisrICAgICAgICAgICAgICAgICAgICBwcmludCAiRGVsZXRpbmcgeGRlZmluZSBmb3IgcmVnZW5lcmF0ZSBtYWtlZmlsZVxuIjsKKysgICAgICAgICAgICAgICAgICAgIF91bmxpbmsoJ3hkZWZpbmUnKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtbm9wYWNrbGlzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtbm9wYWNrbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDgyZGNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1BhcnQgb2YgNTJfZGViaWFuX2V4dHV0aWxzX2hhY2tzLnBhdGNoIGp1c3QgdG8gZXhjbHVkZSB0aGUgaW5zdGFsbGF0aW9uIG9mIC5wYWNrbGlzdCBmaWxlcworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8ICAgMzUgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IGY2MzE0NWMuLmE1ODk3MTAgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTIyLDExICsyMTIyLDYgQEAgcHVyZV9wZXJsX2luc3RhbGwgOjogYWxsCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKy0KKy0gICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCQkiJChJTlNUX0FSQ0hMSUIpIiAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIiBcCisgCQkiJChJTlNUX0JJTikiICIkKERFU1RJTlNUQUxMQklOKSIgXAorQEAgLTIxNTgsMTAgKzIxNTMsNiBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgcHVyZV92ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoTU9EX0lOU1RBTEwpIFwKKyB9OworLSAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExWRU5ET1JBUkNIKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKyAKKyAgICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFZFTkRPUkxJQikiIFwKK0BAIC0yMTg3LDM3ICsyMTc4LDE5IEBAIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAKKyAgICAgcHVzaCBAbSwgcXsKKyBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFBSSVZMSUIpIFwKKy0JCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorLQkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorLQkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpL3Blcmxsb2NhbC5wb2QiCisrCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpIgorIAktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorIAkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorIAkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisrCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFNJVEVBUkNIKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIH0gdW5sZXNzICRzZWxmLT57Tk9fUEVSTExPQ0FMfTsKKyAKK0BAIC0yMjI2LDEzICsyMTk5LDExIEBAIHVuaW5zdGFsbCA6OiB1bmluc3RhbGxfZnJvbV8kKElOU1RBTExESVJTKWRpcnMKKyAJJChOT0VDSE8pICQoTk9PUCkKKyAKKyB1bmluc3RhbGxfZnJvbV9wZXJsZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3NpdGVkaXJzIDo6CisgCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV92ZW5kb3JkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIH07CisgCisgICAgIGpvaW4oIiIsQG0pOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1wZXJsaW5jLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1wZXJsaW5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYmIxZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjguOC9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zLm9yaWcvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0JMjAwOC0xMC0zMSAyMjowMTozNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBwZXJsLTUuMTIuMy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQkyMDA4LTEwLTMxIDIyOjAxOjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1OTcsNiArMTU5NywxOSBAQAorIAkkc2VsZi0+e1BFUkxfTElCfSAgICAgfHw9ICRDb25maWd7cHJpdmxpYmV4cH07CisgCSRzZWxmLT57UEVSTF9BUkNITElCfSB8fD0gJENvbmZpZ3thcmNobGliZXhwfTsKKyAJJHNlbGYtPntQRVJMX0lOQ30gICAgID0gJHNlbGYtPmNhdGRpcigiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9IiwiQ09SRSIpOyAjIHdpbGQgZ3Vlc3MgZm9yIG5vdworKwkjIENoZWNrIGZvciBlbnZpcm9ubWVudCBvdmVycmlkZSBzbyB3ZSdsbCBmaW5kIHRoZSBoZWFkZXJzIGluIHRoZSBjb3JyZWN0IHBsYWNlCisrICAgICAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfTElCfSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAkc2VsZi0+e1BFUkxfTElCfSA9ICRFTlZ7UEVSTF9MSUJ9OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0FSQ0hMSUJ9KQorKyAgICAgICAgeworKyAgICAgICAgICAgICRzZWxmLT57UEVSTF9BUkNITElCfSA9ICRFTlZ7UEVSTF9BUkNITElCfTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTF9JTkN9KQorKyAgICAgICAgeworKyAgICAgICAgICAgICRzZWxmLT57UEVSTF9JTkN9ID0gJEVOVntQRVJMX0lOQ307CisrICAgICAgICB9CisgCW15ICRwZXJsX2g7CisgCisgCWlmIChub3QgLWYgKCRwZXJsX2ggPSAkc2VsZi0+Y2F0ZmlsZSgkc2VsZi0+e1BFUkxfSU5DfSwicGVybC5oIikpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQ5MDQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDkwYzI1MmNlY2MzOGFlZDVkNWZhZWRiMzA0ODVkZDZlZWUyZTU0ZWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTEgRmViIDIwMTUgMTU6MTQ6NDAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGVybCAvIFBhdGhUb29sczogZG9uJ3QgZmlsdGVyIG91dCBibGliIGZyb20gQElOQworCitJZiAkVE9QRElSIGluY2x1ZGVzIHRoZSBzdHJpbmcgImJsaWIiLCBmaWx0ZXIgaXQgb3V0IGZyb20gQElOQyBtYXkgZW1wdHkKK3RoZSBASU5DIGFuZCBjYXVzZSBidWlsZCBlcnJvcnMgbGlrZToKKworICBDYW4ndCBsb2NhdGUgRXh0VXRpbHMvTWFrZU1ha2VyLnBtIGluIEBJTkMgXAorICAoeW91IG1heSBuZWVkIHRvIGluc3RhbGwgdGhlIEV4dFV0aWxzOjpNYWtlTWFrZXIgbW9kdWxlKSBcCisgIChASU5DIGNvbnRhaW5zOiAuKSBhdCBNYWtlZmlsZS5QTAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBkaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTCB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTCBiL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCitpbmRleCAxYjIxZGU0Li5mNTYyY2IyIDEwMDY0NAorLS0tIGEvZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwKKysrKyBiL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCitAQCAtMSw2ICsxLDMgQEAKKy0KKy1CRUdJTiB7IEBJTkMgPSBncmVwIHshL2JsaWIvfSBASU5DIH0KKy0KKyByZXF1aXJlIDUuMDA1OworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworIFdyaXRlTWFrZWZpbGUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtYXJjaGxpYi1leHAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1hcmNobGliLWV4cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTEyZDAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtYXJjaGxpYi1leHAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorcGVybDogYWRkIGFyY2hsaWJfZXhwIHZhcmlhYmxlIHVzZWQgdG8gZ2VuZXJhdGUgQVJDSExJQl9FWFAgaW4gY29uZmlnLmgKKyAgICAKK3BlcmwuYyB1c2VzIGFuIEFSQ0hMSUJfRVhQIGRlZmluZSB0byBnZW5lcmF0ZSBjb21waWxlLXRpbWUgY29kZSB0aGF0CithZGRzIHRoZSBhcmNobGliZXhwIHBhdGggdG8gQElOQyBkdXJpbmcgcnVuLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgYQorbmV3IHBlcmwgaW50ZXJwcmV0ZXIuCisgICAgCitCZWNhdXNlIHdlJ3ZlIGNoYW5nZWQgdGhpcyB2YWx1ZSBpbiBhIHRlbXBvcmFyeSB3YXkgdG8gbWFrZSBpdAorcG9zc2libGUgdG8gdXNlIEV4dFV0aWxzOjpFbWJlZCBpbiB0aGUgdGFyZ2V0IGJ1aWxkICh0aGUgdGVtcG9yYXJ5Cit2YWx1ZSBpbiBjb25maWcuc2ggZ2V0cyByZS1zdHJpcHBlZCBvdXQgZHVyaW5nIHBhY2thZ2luZyksIHRoZQorQVJDSExJQl9FWFAgdmFsdWUgdGhhdCBnZXRzIGdlbmVyYXRlZCBzdGlsbCB1c2VzIHRoZSB0ZW1wb3JhcnkgdmVyc2lvbgoraW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgZXhwZWN0ZWQgdmVyc2lvbiAoaS5lLiBiZWNhdXNlcyBpdCdzIGluIHRoZQorZ2VuZXJhdGVkIGNvbmZpZy5oLCBpdCBkb2Vzbid0IGdldCBzdHJpcHBlZCBvdXQgZHVyaW5nIHBhY2thZ2luZyBsaWtlCit0aGUgb3RoZXJzIGluIGNvbmZpZy5zaCkuCisKK1RoaXMgY3JlYXRlcyBhbiB1bm1vZGlmaWVkIHZlcnNpb24gY2FsbGVkIGFyY2hsaWJfZXhwIHRoYXQgZ2V0cyB1c2VkCitieSBhIG1vZGlmaWVkIGNvbmZpZ19oLlNIIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBpbnRvIGNvbmZpZy5oCisgICAgCitUaGlzIHBhdGNoIHVzZXMgYW4gdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGFyY2hsaWJleHAgY2FsbGVkCithcmNobGliX2V4cCwgaW50cm9kdWNlZCB0byBjb25maWcuc2gsIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCitjb3JyZWN0IHZhbHVlIG9mIEFSQ0hMSUJfRVhQIGludG8gY29uZmlnLmgKKyAgCitTZWUgWU9DVE8gIzMwOTkgZm9yIG1vcmUgaW5mby4KKworVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogcGVybC01LjE0LjIvY29uZmlnX2guU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NvbmZpZ19oLlNICisrKysgcGVybC01LjE0LjIvY29uZmlnX2guU0gKK0BAIC05OTYsNyArOTk2LDcgQEAgc2VkIDw8IUdST0shVEhJUyEgPiRDT05GSUdfSCAtZSAncyFeI3VuZAorICAqCWluIHByb2dyYW1zIHRoYXQgYXJlIG5vdCBwcmVwYXJlZCB0byBkZWFsIHdpdGggfiBleHBhbnNpb24gYXQgcnVuLXRpbWUuCisgICovCisgIyRkX2FyY2hsaWIgQVJDSExJQiAiJGFyY2hsaWIiCQkvKiovCistIyRkX2FyY2hsaWIgQVJDSExJQl9FWFAgIiRhcmNobGliZXhwIgkJLyoqLworKyMkZF9hcmNobGliIEFSQ0hMSUJfRVhQICIkYXJjaGxpYl9leHAiCQkvKiovCisgCisgLyogQVJDSE5BTUU6CisgICoJVGhpcyBzeW1ib2wgaG9sZHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhcmNoaXRlY3R1cmUgbmFtZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3BtLXN3aXRjaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3BtLXN3aXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNjMTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtuYXRpdmVdCisKK1RoaXMgcGF0Y2ggaXMgdXNlZCBmb3IgcGVybC1uYXRpdmUgb25seS4gSXQgZW5hYmxlcyB0aGUgc3dpdGNoaW5nIG9mCitjb25maWd1cmF0aW9uIGZpbGVzIGJldHdlZW4gQ29uZmlnX2hlYXZ5LnBsIGFuZAorQ29uZmlnX2hlYXZ5LXRhcmdldC5wbCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK1BFUkxDT05GSUdUQVJHRVQgLSB0aGUgbGF0ZXIgY29udGFpbmluZyBzZXR0aW5ncyBmb3IgdGhlIHRhcmdldCB3aGlsZQordGhlIGZvcm1lciBjb250YWlucyB0aG9zZSBmb3IgdGhlIGhvc3QuIFRoaXMgd2lsbCBhbGxvdyBjcGFuLmJiY2xhc3MKK3RvIHVzZSB0aGUgc2V0dGluZ3MgYXBwcm9wcmlhdGUgZm9yIHRoZSBuYXRpdmUgYW5kL29yIHRhcmdldCBidWlsZHMKK2FzIHJlcXVpcmVkLiBUaGlzIGFsc28gZGlzYWJsZXMgdGhlIHVzZSBvZiB0aGUgY2FjaGUgc2luY2UgdGhlIGNhY2hlZAordmFsdWVzIHdvdWxkIGJlIHZhbGlkIGZvciB0aGUgaG9zdCBvbmx5LgorCitJbmRleDogcGVybC01LjE0LjIvY29uZmlncG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NvbmZpZ3BtCisrKysgcGVybC01LjE0LjIvY29uZmlncG0KK0BAIC02NTgsNyArNjU4LDcgQEAgc3ViIEZFVENIIHsKKyAgICAgbXkoJHNlbGYsICRrZXkpID0gQF87CisgCisgICAgICMgY2hlY2sgZm9yIGNhY2hlZCB2YWx1ZSAod2hpY2ggbWF5IGJlIHVuZGVmIHNvIHdlIHVzZSBleGlzdHMgbm90IGRlZmluZWQpCistICAgIHJldHVybiBleGlzdHMgJHNlbGYtPnska2V5fSA/ICRzZWxmLT57JGtleX0gOiAkc2VsZi0+ZmV0Y2hfc3RyaW5nKCRrZXkpOworKyAgICByZXR1cm4gJHNlbGYtPmZldGNoX3N0cmluZygka2V5KTsKKyB9CisgCisgRU5ET0ZFTkQKK0BAIC04MTYsNyArODE2LDIxIEBAICRjb25maWdfdHh0IC49IHNwcmludGYgPDwnRU5ET0ZUSUUnLCAkZmEKKyBzdWIgREVTVFJPWSB7IH0KKyAKKyBzdWIgQVVUT0xPQUQgeworLSAgICByZXF1aXJlICdDb25maWdfaGVhdnkucGwnOworKyAgICBteSAkY2ZnZmlsZSA9ICdDb25maWdfaGVhdnkucGwnOworKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxDT05GSUdUQVJHRVR9IGFuZCAkRU5We1BFUkxDT05GSUdUQVJHRVR9IGVxICJ5ZXMiKQorKyAgICB7CisrICAgICAgICAkY2ZnZmlsZSA9ICdDb25maWdfaGVhdnktdGFyZ2V0LnBsJzsKKysgICAgfQorKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfQVJDSExJQn0pCisrICAgIHsKKysgICAgICAgIHB1c2ggQElOQywgJEVOVntQRVJMX0FSQ0hMSUJ9OworKyAgICAgICAgcmVxdWlyZSAkY2ZnZmlsZTsKKysgICAgICAgIHBvcCBASU5DOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmVxdWlyZSAkY2ZnZmlsZTsKKysgICAgfQorICAgICBnb3RvIFwmbGF1bmNoZXIgdW5sZXNzICRDb25maWc6OkFVVE9MT0FEID1+IC9sYXVuY2hlciQvOworICAgICBkaWUgIiZDb25maWc6OkFVVE9MT0FEIGZhaWxlZCBvbiAkQ29uZmlnOjpBVVRPTE9BRCI7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3MmNlNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEgL2Jpbi9zaAorCisjCisjIEdlbmVyYXRlIHRoZSBjb21tb24gcGVybCBjb25maWd1cmF0aW9uCisjIE5lZWRzIHRvIGJlIHJ1biBvbiBhIGhvc3QgdGhhdCBtYXRjaGVzIHRoZSBiaXRzaXplIG9mIHRoZSB0YXJnZXQgcGxhdGZvcm0KKyMKKworZWNobyBzaCBDb25maWd1cmUgLWRlcyBcCisgICAgICAgIC1Eb3B0aW1pemU9LU8yIFwKKyAgICAgICAgLURteWhvc3RuYW1lPWxvY2FsaG9zdCBcCisgICAgICAgIC1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0IFwKKyAgICAgICAgLURjYz1nY2MgXAorICAgICAgICAtRGNmX2J5PSdPcGVuIEVtYmVkZGVkJyBcCisgICAgICAgIC1EaW5zdGFsbHByZWZpeD1AREVTVERJUkAgXAorICAgICAgICAtRHByZWZpeD0vdXNyIFwKKyAgICAgICAgLUR2ZW5kb3JwcmVmaXg9L3VzciBcCisgICAgICAgIC1Ec2l0ZXByZWZpeD0vdXNyIFwKKyAgICAgICAgLURvdGhlcmxpYmRpcnM9L3Vzci9saWIvcGVybDUvNS4xMi4zIFwKKyAgICAgICAgLUR1c2VzaHJwbGliIFwKKyAgICAgICAgLUR1c2V0aHJlYWRzIFwKKyAgICAgICAgLUR1c2VpdGhyZWFkcyBcCisgICAgICAgIC1EdXNlbGFyZ2VmaWxlcyBcCisgICAgICAgIC1VZF9kb3N1aWQgXAorICAgICAgICAtRGRfc2VtY3RsX3NlbXVuIFwKKyAgICAgICAgLVVpX2RiIFwKKyAgICAgICAgLVVpX25kYm0gXAorICAgICAgICAtVWlfZ2RibSBcCisgICAgICAgIC1EaV9zaGFkb3cgXAorICAgICAgICAtRGlfc3lzbG9nIFwKKyAgICAgICAgLURtYW4zZXh0PTNwbSBcCisgICAgICAgIC1EdXNlcGVybGlvIFwKKyAgICAgICAgLURpbnN0YWxsdXNyYmlucGVybCBcCisgICAgICAgIC1VYmluY29tcGF0NTAwNSBcCisgICAgICAgIC1VdmVyc2lvbm9ubHkgXAorICAgICAgICAtRHBhZ2VyPScvdXNyL2Jpbi9sZXNzIC1pc3InCisKK2NwIC1mIGNvbmZpZy5zaCBjb25maWcuc2guQ09NTU9OCisKK1RBUkdFVE9TPSQoZ3JlcCBteWFyY2huYW1lIGNvbmZpZy5zaC5DT01NT04gfCBzZWQgInMjLionXCguKlwpJy4qI1wxIyIpCisKK3NlZCAtciAtaSBjb25maWcuc2guQ09NTU9OIFwKKwktZSAicyMoaW5zdGFsbC4qPScpKC91c3IpL2xvY2FsKC4qJykjXDFAREVTVERJUkBcMlwzI2ciIFwKKwktZSAncyMnJFRBUkdFVE9TJyNAQVJDSEAjZycKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWR5bmxvYWRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWR5bmxvYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzViZWJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQWxsb3cgdGhlIGxvY2F0aW9uIHRoYXQgLnNvIGZpbGVzIGFyZSBzZWFyY2hlZCBmb3IgZm9yIGR5bmFtaWMKK2xvYWRpbmcgdG8gYmUgY2hhbmdlZCB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIFRoaXMgaXMgdG8gYWxsb3cKK3VzIHRvIGxvYWQgLnNvJ3MgZnJvbSB0aGUgaG9zdCBzeXN0ZW0gd2hpbGUgYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKK3N5c3RlbS4KKworVXBkYXRlIGJ5IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjEKKworSW5kZXg6IHBlcmwtNS4xNC4yL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKKysrKyBwZXJsLTUuMTQuMi9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCitAQCAtMjgsNiArMjgsMjAgQEAgc3ViIGxvYWQgeworIAorICAgICBteSAoJG1vZHVsZSwgJG1vZGxpYm5hbWUpID0gY2FsbGVyKCk7CisgCisrICAgICMgT0U6IEFsbG93IGVudiB0byBmb3JtIGR5bmFtaWMgbG9hZGVyIHRvIGxvb2sgaW4gYSBkaWZmZXJlbnQgcGxhY2UKKysgICAgIyBUaGlzIGlzIHNvIGl0IGZpbmRzIHRoZSBob3N0IC5zbyBmaWxlcywgbm90IHRoZSB0YXJnZXRzCisrICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTEhPU1RMSUJ9KQorKyAgICB7CisrICAgICAgICBteSAkaG9zdGxpYiA9ICRFTlZ7UEVSTEhPU1RMSUJ9OworKyAgICAgICAgcHJpbnQgU1RERVJSICIqKiogTW9kdWxlIG5hbWUgSU46ICRtb2RsaWJuYW1lXG4iOworKyAgICAgICAgKCRwMSwgJHAyLCAkcDMsICRwNCwgJHA1KSA9ICRtb2RsaWJuYW1lID1+IG0vKF4oLipsaWJcdypcLyk/KSgocGVybFwvWzAtOVwuXSpcLyk/KSguKikkLzsKKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIHAxOiAkcDEgIHAzOiAkcDMgIHA1OiAkcDVcbiI7CisrICAgICAgICBpZiAoICRwMSBuZSAiIiApIHsKKysgICAgICAgICAgICAkbW9kbGlibmFtZSA9ICRob3N0bGliLiRwNTsKKysgICAgICAgIH0KKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIE1vZHVsZSBuYW1lIE9VVDogJG1vZGxpYm5hbWVcbiI7CisrICAgIH0KKysKKyAgICAgaWYgKEBfKSB7CisgCSRtb2R1bGUgPSAkX1swXTsKKyAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWVuYWJsZS1nZGJtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4M2ZjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWVuYWJsZS1nZGJtLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS44LjgvY29uZmlnX2guU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuOC44Lm9yaWcvY29uZmlnX2guU0gJMjAwNS0xMS0wMSAwMjoxMzowNS4wMDAwMDAwMDAgKzA4MDAKKysrKyBwZXJsLTUuOC44L2NvbmZpZ19oLlNICTIwMTAtMTEtMDEgMTc6MDY6MDcuMjE1MjE5NzM4ICswODAwCitAQCAtNzA5LDYgKzcwOSwxMiBAQAorICAqLworICMkaV9mbG9hdCBJX0ZMT0FUCQkvKiovCisgCisrLyogSV9HREJNOgorKyAqICAgICAgVGhpcyBzeW1ib2wsIGlmIGRlZmluZWQsIGluZGljYXRlcyB0aGF0IDxnZGJtLmg+IGV4aXN0cyBhbmQgc2hvdWxkCisrICogICAgICBiZSBpbmNsdWRlZC4KKysgKi8KKysjJGlfZ2RibSBJX0dEQk0gLyoqLworKworIC8qIElfTElNSVRTOgorICAqCVRoaXMgc3ltYm9sLCBpZiBkZWZpbmVkLCBpbmRpY2F0ZXMgdG8gdGhlIEMgcHJvZ3JhbSB0aGF0IGl0IHNob3VsZAorICAqCWluY2x1ZGUgPGxpbWl0cy5oPiB0byBnZXQgZGVmaW5pdGlvbiBvZiBzeW1ib2xzIGxpa2UgV09SRF9CSVQgb3IKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLW1vcmVjb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2U4NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgbmVlZCBsZCBpbiB0aGUgZmFrZSBjb25maWcgbGlicmFyeSwgYnV0IGl0J3Mgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQuIFNvCitleHBhbmQgdGhlIG51bWJlciBvZiBpdGVtcyBpbmNsdWRlZC4gV2hpbGUgdGhpcyB3b3JrcyBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUKK3Jlc3Qgb2YgdGhlIGNvbmZpZyBpdGVtcyBhcmUgbm90IGJlaW5nIHBpY2tlZCB1cCBhbmQvb3IgYXJlIGJlaW5nIHBpY2tlZCB1cAorZnJvbSB0aGUgaG9zdC4gTW9yZSBpbnZlc3RpZ2F0aW9uIG5lZWRlZC4KKworLS0tIHBlcmwtNS44LjgvY29uZmlncG0JMjAwNy8wNC8yMCAwOTo0ODowNQkxLjEKKysrKyBwZXJsLTUuOC44L2NvbmZpZ3BtCTIwMDcvMDQvMjAgMDk6NTc6MTIKK0BAIC0yLDcgKzIsNyBAQAorIHVzZSBzdHJpY3Q7CisgdXNlIHZhcnMgcXcoJUNvbmZpZyAkQ29uZmlnX1NIX2V4cGFuZGVkKTsKKyAKKy1teSAkaG93X21hbnlfY29tbW9uID0gMjI7CisrbXkgJGhvd19tYW55X2NvbW1vbiA9IDUwOworIAorICMgY29tbW9ubHkgdXNlZCBuYW1lcyB0byBwcmVjYWNoZSAoYW5kIGhlbmNlIGxvb2t1cCBmYXN0ZXN0KQorIG15ICVDb21tb247CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTJkZDFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorY2QgdCAmJiAuL1RFU1QgfCBzZWQgLXUgLWUgJ3N8XCguKlwpIC4qIG9rJHxQQVNTOiBcMXwnIC1lICdzfFwoLipcKSAuKiBza2lwcGVkfFNLSVA6IFwxfCcgLWUgJ3N8XCguKlwpIFwuXCguKlwpfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZmRmNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMTU2MTU0OWVhMzZlMzdjYzI1NzA2ZjA5NGExOTVkZTQ5MjhmNDIxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxOSBKdW4gMjAxNSAwMToyMzo0NiAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0L3J1bi9zd2l0Y2hlcy50OiBwZXJsNSAtPiBwZXJsCisKK1dlIGNhbGwgaXQgcGVybCByYXRoZXIgdGhhbiBwZXJsNSBpbiBvZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB0L3J1bi9zd2l0Y2hlcy50IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdC9ydW4vc3dpdGNoZXMudCBiL3QvcnVuL3N3aXRjaGVzLnQKK2luZGV4IDc4OTE1ZTAuLmU5ZTRiNDUgMTAwNjQ0CistLS0gYS90L3J1bi9zd2l0Y2hlcy50CisrKysgYi90L3J1bi9zd2l0Y2hlcy50CitAQCAtMjY5LDcgKzI2OSw3IEBAIGlzIHJ1bnBlcmwoc3RkZXJyID0+IDEsIHByb2cgPT4gJyMhcGVybCAtTScpLAorICAgICAgICAgICAnLVYgZ2VuZXJhdGVzIDIwKyBsaW5lcycgKTsKKyAKKyAgICAgbGlrZSggcnVucGVybCggc3dpdGNoZXMgPT4gWyctViddICksCistCSAgcXIvXEFTdW1tYXJ5IG9mIG15IHBlcmw1IC4qY29uZmlndXJhdGlvbjovLAorKwkgIHFyL1xBU3VtbWFyeSBvZiBteSBwZXJsIC4qY29uZmlndXJhdGlvbjovLAorICAgICAgICAgICAnLVYgbG9va3Mgb2theScgKTsKKyAKKyAgICAgIyBsb29rdXAgYSBrbm93biBjb25maWcgdmFyCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZGlzdC10aHJlYWRzLXQtam9pbi50LWFkanVzdC1wcy1vcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODI5M2MzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZGlzdC10aHJlYWRzLXQtam9pbi50LWFkanVzdC1wcy1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorZGlzdC90aHJlYWRzL3Qvam9pbi50OiBhZGp1c3QgcHMgb3B0aW9uCisKK1RoZSBwcydzIG9wdGlvbiAnLWYnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYnVzeWJveCBpbiBvZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBkaXN0L3RocmVhZHMvdC9qb2luLnQgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L3RocmVhZHMvdC9qb2luLnQgYi9kaXN0L3RocmVhZHMvdC9qb2luLnQKKy0tLSBhL2Rpc3QvdGhyZWFkcy90L2pvaW4udAorKysrIGIvZGlzdC90aHJlYWRzL3Qvam9pbi50CitAQCAtMTE4LDcgKzExOCw3IEBAIGlmICgkXk8gZXEgJ2xpbnV4JykgeworICAgICAgICAgICAgICAgICAgfSktPmpvaW47CisgICAgICNwcmludCAiIyBtYWludGhyZWFkOiBcJDAgPSAkMFxuIjsKKyAgICAgI3ByaW50ICIjIHBpZCA9ICQkXG4iOworLSAgICBpZiAob3BlbiBQUywgInBzIC1mIHwiKSB7ICMgTm90ZTogbXVzdCB3b3JrIGluIChhbGwpIHN5c3RlbXMuCisrICAgIGlmIChvcGVuIFBTLCAicHMgfCIpIHsgIyBOb3RlOiBtdXN0IHdvcmsgaW4gKGFsbCkgc3lzdGVtcy4KKyAgICAgICAgIG15ICgkc2F3cGlkLCAkc2F3ZXhlKTsKKyAgICAgICAgIHdoaWxlICg8UFM+KSB7CisgICAgICAgICAgICAgY2hvbXA7CitAQCAtMTM1LDEwICsxMzUsMTAgQEAgaWYgKCReTyBlcSAnbGludXgnKSB7CisgICAgICAgICBpZiAoJHNhd3BpZCkgeworICAgICAgICAgICAgIG9rKCRzYXdwaWQgJiYgJHNhd2V4ZSwgJ2FsdGVyaW5nICQwIGlzIGVmZmVjdGl2ZScpOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBza2lwKCJcJDAgY2hlY2s6IGRpZCBub3Qgc2VlIHBpZCAkJCBpbiAncHMgLWYgfCciKTsKKysgICAgICAgICAgICBza2lwKCJcJDAgY2hlY2s6IGRpZCBub3Qgc2VlIHBpZCAkJCBpbiAncHMgfCciKTsKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIHNraXAoIlwkMCBjaGVjazogb3BlbmluZyAncHMgLWYgfCcgZmFpbGVkOiAkISIpOworKyAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBvcGVuaW5nICdwcyB8JyBmYWlsZWQ6ICQhIik7CisgICAgIH0KKyB9IGVsc2UgeworICAgICBza2lwKCJcJDAgY2hlY2s6IG9ubHkgb24gTGludXgiKTsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTU3N2ZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitleHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudDogZml4IGNhbGxpbmcgZGxfZmluZGZpbGUoKSBmYWlsZWQKKworVXNlICckQ29uZmlne2xpYmN9JyBhcyB0aGUgbGliYyBmaWxlIG5hbWUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50IGIvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKK2luZGV4IGFkZTFmOGUuLjM1NjdhZmUgMTAwNjQ0CistLS0gYS9leHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudAorKysrIGIvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKK0BAIC0xMDYsNyArMTA2LDcgQEAgb2soIGRlZmluZWQgJGRsZXJyLCAiZGxfZXJyb3IoKSByZXR1cm5pbmcgYW4gZXJyb3IgbWVzc2FnZTogJyRkbGVyciciICk7CisgIyAuLi4gZGxfZmluZGZpbGUoKQorIFNLSVA6IHsKKyAgICAgbXkgQGZpbGVzID0gKCk7CistICAgIGV2YWwgeyBAZmlsZXMgPSBEeW5hTG9hZGVyOjpkbF9maW5kZmlsZSgiYyIpIH07CisrICAgIGV2YWwgeyBAZmlsZXMgPSBEeW5hTG9hZGVyOjpkbF9maW5kZmlsZSgkQ29uZmlne2xpYmN9KSB9OworICAgICBpcyggJEAsICcnLCAiY2FsbGluZyBkbF9maW5kZmlsZSgpIiApOworICAgICAjIFNvbWUgcGxhdGZvcm1zIGFyZSBrbm93biB0byBub3QgaGF2ZSBhICJsaWJjIgorICAgICAjIChub3QgYXQgbGVhc3QgYnkgdGhhdCBuYW1lKSB0aGF0IHRoZSBkbF9maW5kZmlsZSgpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlNzg0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIKQEAgLTAsMCArMSwzNzEgQEAKK3JlcXVpcmUgcGVybC5pbmMKKworIyBXZSBuZWVkIGdudWdyZXAgKGZvciAtSSkKK0RFUEVORFMgPSAidmlydHVhbC9kYiBncmVwLW5hdGl2ZSIKK0RFUEVORFMgKz0gImdkYm0gemxpYiIKKworIyBQaWNrIHVwIHBhdGNoZXMgZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vcC9wZXJsL3BlcmxfNS4yMi4wLTEuZGViaWFuLnRhci54egorU1JDX1VSSSArPSAiIFwKKwlmaWxlOi8vZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2RvY19pbmZvLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZW5jMnhzX2luYy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2Vycm5vX3Zlci5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZiBcCisJZmlsZTovL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL21vZF9wYXRocy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3BydW5lX2xpYnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcGVybGl2cC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaCBcCisJZmlsZTovL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYgXAorIgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUuU0gucGF0Y2ggXAorICAgICAgICBmaWxlOi8vaW5zdGFsbHBlcmwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1keW5sb2FkZXIucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1tb3JlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2xldGdjYy1maW5kLWVycm5vLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2dlbmVyYXRlLXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL25hdGl2ZS1wZXJsaW5jLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeF9iYWRfcnBhdGgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1hcmNobGliLWV4cC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9keW5hbG9hZGVyaGFjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2ggXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTMyIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC0zMi1sZSBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtMzItYmUgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTY0IFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC02NC1sZSBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtNjQtYmUgXAorICAgICAgICBmaWxlOi8vbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIFwKKyIKKworIyBGaXggdGVzdCBjYXNlIGlzc3VlcworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgICBmaWxlOi8vdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmYwZjA5YjE3ZGU0MjZlZmYzMjM0MjZjYjE0MGVlNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmU4M2VhZDBjNWMyNmNiYmU2MjZmYTRiYWMxYTRiZWFiZTIzYTllZWJjMTVkMzViYTQ5Y2NkZTExODc4ZTE5NiIKKworaW5oZXJpdCBwZXJsbmF0aXZlIHNpdGVpbmZvCisKKyMgV2hlcmUgdG8gZmluZCB0aGUgbmF0aXZlIHBlcmwKK0hPU1RQRVJMID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsJHtQVn0iCisKKyMgV2hlcmUgdG8gZmluZCAuc28gZmlsZXMgLSB1c2UgdGhlIC1uYXRpdmUgdmVyc2lvbnMgbm90IHRob3NlIGZyb20gdGhlIHRhcmdldCBidWlsZAorZXhwb3J0IFBFUkxIT1NUTElCID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsLyR7UFZ9LyIKKworIyBXaGVyZSB0byBmaW5kIHBlcmwgQElOQy8jaW5jbHVkZSBmaWxlcworIyAtIHVzZSB0aGUgLW5hdGl2ZSB2ZXJzaW9ucyBub3QgdGhvc2UgZnJvbSB0aGUgdGFyZ2V0IGJ1aWxkCitleHBvcnQgUEVSTF9MSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtQVn0vIgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke1BWfS8iCisKKyMgTERGTEFHUyBmb3Igc2hhcmVkIGxpYnJhcmllcworZXhwb3J0IExERExGTEFHUyA9ICIke0xERkxBR1N9IC1zaGFyZWQiCisKK0xERkxBR1NfYXBwZW5kID0gIiAtZnN0YWNrLXByb3RlY3RvciIKKworIyBXZSdyZSBhbG1vc3QgRGViaWFuLCBhcmVuJ3Qgd2U/CitDRkxBR1MgKz0gIi1EREVCSUFOIgorCitkb19ub2xhcmdlZmlsZSgpIHsKKwlzZWQgLWkgLWUgInMsXCh1c2VsYXJnZWZpbGVzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKwkJLWUgInMsXChkX3JlYWRkaXI2NF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKwkJLWUgInMsXChyZWFkZGlyNjRfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKwkJLWUgIi9jY2ZsYWdzX3VzZWxhcmdlZmlsZXMvZCIgXAorCQktZSAicy8tRHVzZWxhcmdlZmlsZXMvLyIgXAorCQktZSAicy8tRF9GSUxFX09GRlNFVF9CSVRTPTY0Ly8iIFwKKwkJLWUgInMvLURfTEFSR0VGSUxFX1NPVVJDRS8vIiBcCisJCSR7U30vQ3Jvc3MvY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorfQorCitkb19jb25maWd1cmUoKSB7CisgICAgICAgICMgTWFrZSBob3N0cGVybCBpbiBidWlsZCBkaXJlY3RvcnkgYmUgdGhlIG5hdGl2ZSBwZXJsCisgICAgICAgIGxuIC1zZiAke0hPU1RQRVJMfSBob3N0cGVybAorCisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiAtYSAtZSAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWlmIFsgImBjYXQgJHtDT05GSUdVUkVTVEFNUEZJTEV9YCIgIT0gIiR7QkJfVEFTS0hBU0h9IiAtYSAtZSBNYWtlZmlsZSBdOyB0aGVuCisJCQkke01BS0V9IGNsZWFuCisJCWZpCisJCWZpbmQgJHtTfSAtbmFtZSAqLnNvIC1kZWxldGUKKwlmaQorCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKKworICAgICAgICAjIERvIG91ciB3b3JrIGluIHRoZSBjcm9zcyBzdWJkaXIKKyAgICAgICAgY2QgQ3Jvc3MKKworICAgICAgICAjIEdlbmVyYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgcm0gLWYgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBmb3IgaSBpbiAke1dPUktESVJ9L2NvbmZpZy5zaCBcCisgICAgICAgICAgICAgICAgICR7V09SS0RJUn0vY29uZmlnLnNoLSR7U0lURUlORk9fQklUU30gXAorICAgICAgICAgICAgICAgICAke1dPUktESVJ9L2NvbmZpZy5zaC0ke1NJVEVJTkZPX0JJVFN9LSR7U0lURUlORk9fRU5ESUFOTkVTU307IGRvCisgICAgICAgICAgICBjYXQgJGkgPj4gY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBkb25lCisKKyAgICAgICAgIyBGaXh1cHMgZm9yIHVjbGliYworICAgICAgICBpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LXVjbGliYyIgLW8gIiR7VEFSR0VUX09TfSIgPSAibGludXgtdWNsaWJjZWFiaSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAicyxcKGRfY3J5cHRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9mdXRpbWVzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Zpbml0ZWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGNyeXB0X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieW5hbWVfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnluYW1lX3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieWFkZHJfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnlhZGRyX3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0ZW50X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zb2NrYXRtYXJrPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3NvY2thdG1hcmtwcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2VhY2Nlc3M9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWxfc2V0c19jbnQ9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9iYXNlPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZHN0ZGlvPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsLWZzdGFjay1wcm90ZWN0b3IsLWZuby1zdGFjay1wcm90ZWN0b3IsZyIgXAorICAgICAgICAgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisgICAgICAgIGZpCisgICAgICAgICMgRml4dXBzIGZvciBtdXNsCisgICAgICAgIGlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtbXVzbCIgLW8gIiR7VEFSR0VUX09TfSIgPSAibGludXgtbXVzbGVhYmkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInMsXChkX2xpYm1fbGliX3ZlcnNpb249XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWxfc2V0c19jbnQ9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9iYXNlPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZHN0ZGlvPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGJ5bmFtZV9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Zpbml0ZWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvYnluYW1lX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHB3ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHNlcnZlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0aG9zdGVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnlhZGRyX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvYnludW1iZXJfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0Z3JlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoaV9mY250bD1cKSd1bmRlZicsXDEnZGVmaW5lJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoaF9mY250bD1cKSdmYWxzZScsXDEndHJ1ZScsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicywtZnN0YWNrLXByb3RlY3RvciwtZm5vLXN0YWNrLXByb3RlY3RvcixnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLC1sbnNsLCxnIiBcCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZmkKKworCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJycsICdkb19ub2xhcmdlZmlsZScsIGQpfQorCisgICAgICAgICMgVXBkYXRlIHNvbWUgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VkIC1pIC1lICdzLEBBUkNIQC10aHJlYWQtbXVsdGksLGcnIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBBUkNIQCwke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30sZycgXAorICAgICAgICAgICAgICAgLWUgJ3MsQFNUQUdJTkdESVJALCR7U1RBR0lOR19ESVJfSE9TVH0sZycgXAorICAgICAgICAgICAgICAgLWUgInMsQElOQ0xVREVESVJALCR7U1RBR0lOR19JTkNESVJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBMSUJESVJALCR7bGliZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicyxAQkFTRUxJQkRJUkAsJHtiYXNlX2xpYmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsQEVYRUNQUkVGSVhALCR7ZXhlY19wcmVmaXh9LGciIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBVU1JCSU5ALCR7YmluZGlyfSxnJyBcCisgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisKKwljYXNlICIke1RBUkdFVF9BUkNIfSIgaW4KKwkJeDg2XzY0IHwgcG93ZXJwYyB8IHMzOTApCisJCQlzZWQgLWkgLWUgInMsXChuZWVkX3ZhX2NvcHk9XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorCQkJCWNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKwkJCTs7CisJCWFybSkKKwkJCXNlZCAtaSAtZSAicyxcKGRfdTMyYWxpZ249XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorCQkJCWNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKwkJCTs7CisJZXNhYworICAgICAgICAjIFRoZXNlIGFyZSBzdHJld24gYWxsIG92ZXIgdGhlIHNvdXJjZSB0cmVlCisgICAgICAgIGZvciBmb28gaW4gYGdyZXAgLUkgLS1leGNsdWRlPSIqLnBhdGNoIiAtLWV4Y2x1ZGU9IiouZGlmZiIgLS1leGNsdWRlPSIqLnBvZCIgLS1leGNsdWRlPSJSRUFETUUqIiAtbTEgIi91c3IvaW5jbHVkZS8uKlwuaCIgJHtTfS8qIC1yIC1sYCAke1N9L3V0aWxzL2gyeHMuUEwgOyBkbworICAgICAgICAgICAgZWNobyBGaXhpbmc6ICRmb28KKyAgICAgICAgICAgIHNlZCAtZSAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAkZm9vCisgICAgICAgIGRvbmUKKworICAgICAgICBybSAtZiBjb25maWcKKyAgICAgICAgZWNobyAiQVJDSCA9ICR7VEFSR0VUX0FSQ0h9IiA+IGNvbmZpZworICAgICAgICBlY2hvICJPUyA9ICR7VEFSR0VUX09TfSIgPj4gY29uZmlnCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgRml4IHRvIGF2b2lkIHJlY3Vyc2l2ZSBzdWJzdGl0dXRpb24gb2YgcGF0aAorICAgICAgICBzZWQgLWkgLWUgJ3N8KEBsaWJwYXRoLCAiLioifChAbGlicGF0aCwgIiR7U1RBR0lOR19MSUJESVJ9InxnJyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKworICAgICAgICBjZCBDcm9zcworICAgICAgICBvZV9ydW5tYWtlIHBlcmwgTEQ9IiR7Q0NMRH0iCit9CisKK2RvX2luc3RhbGwoKSB7CisJI2V4cG9ydCBob3N0cGVybD0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3Blcmwke1BWfSIKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9CisgICAgICAgICMgQWRkIHBlcmwgcG9pbnRpbmcgYXQgY3VycmVudCB2ZXJzaW9uCisgICAgICAgIGxuIC1zZiBwZXJsJHtQVn0gJHtEfSR7YmluZGlyfS9wZXJsCisKKyAgICAgICAgbG4gLXNmIHBlcmwgJHtEfS8ke2xpYmRpcn0vcGVybDUKKworICAgICAgICAjIFJlbW92ZSB1bndhbnRlZCBmaWxlIGFuZCBlbXB0eSBkaXJlY3RvcmllcworICAgICAgICBybSAtZiAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9Ly5wYWNrbGlzdAorCXJtZGlyICR7RH0vJHtsaWJkaXJ9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0vcGVybC9zaXRlX3BlcmwKKworICAgICAgICAjIEZpeCB1cCBzaGFyZWQgbGlicmFyeQorICAgICAgICBtdiAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvbGlicGVybC5zbyAke0R9LyR7bGliZGlyfS9saWJwZXJsLnNvLiR7UFZ9CisgICAgICAgIGxuIC1zZiBsaWJwZXJsLnNvLiR7UFZ9ICR7RH0vJHtsaWJkaXJ9L2xpYnBlcmwuc28uNQorICAgICAgICBsbiAtc2YgLi4vLi4vLi4vbGlicGVybC5zby4ke1BWfSAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvbGlicGVybC5zbworCisgICAgICAgICMgdGFyZ2V0IGNvbmZpZywgdXNlZCBieSBjcGFuLmJiY2xhc3MgdG8gZXh0cmFjdCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAgICAgIGluc3RhbGwgY29uZmlnLnNoICR7RH0ke2xpYmRpcn0vcGVybAorCisgICAgICAgIGxuIC1zIENvbmZpZ19oZWF2eS5wbCAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LXRhcmdldC5wbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3BlcmwgXAorICAgICAgICAgICAgUEVSTDVMSUI9JyRQRVJMNUxJQjokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybDokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybC8ke1BWfTokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybC9zaXRlX3BlcmwvJHtQVn06JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3BlcmwvdmVuZG9yX3BlcmwvJHtQVn0nCit9CisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicGVybF9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3BlcmxfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKyAgICAgICAgIyBGaXggdXAgaW5zdGFsbGVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VkIC1pIC1lICJzLCR7RH0sLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9LCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywtaXN5c3RlbSR7U1RBR0lOR19JTkNESVJ9ICwsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJ9LCR7YmluZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfSU5DRElSfSwke2luY2x1ZGVkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8sJHtiaW5kaXJ9LyxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vLCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtUQVJHRVRfUFJFRklYfSwke2JpbmRpcn0sZyIgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9oMnhzIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vaDJwaCBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZDJtYW4gXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2QydGV4dCBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZDJ1c2FnZSBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZGNoZWNrZXIgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2RzZWxlY3QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvY29uZmlnLmggXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvcGVybC5oIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL3BwLmggXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnLnBvZCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LnBsIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vRmlsZUNhY2hlLnBtIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9wb2QvKi5wb2QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsL2NvbmZpZy5zaAorfQorCitQQUNLQUdFUyA9ICJwZXJsLWRiZyBwZXJsIHBlcmwtbWlzYyBwZXJsLWRldiBwZXJsLXBvZCBwZXJsLWRvYyBwZXJsLWxpYiBcCisgICAgICAgICAgICBwZXJsLW1vZHVsZS1jcGFuIHBlcmwtbW9kdWxlLWNwYW5wbHVzIHBlcmwtbW9kdWxlLXVuaWNvcmUiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vcGVybCAke2JpbmRpcn0vcGVybCR7UFZ9IFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wbSBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9zdHJpY3QucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vd2FybmluZ3MucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vd2FybmluZ3MgXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdmFycy5wbSBcCisgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7YmluZGlyfS9wZXJsLnJlYWwiCitSUFJPVklERVNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLXN0cmljdCBwZXJsLW1vZHVsZS12YXJzIHBlcmwtbW9kdWxlLWNvbmZpZyBwZXJsLW1vZHVsZS13YXJuaW5ncyBcCisgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUiCitGSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYnBlcmwuc28qIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybDUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsL2NvbmZpZy5zaCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LnBsIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWdfaGVhdnktdGFyZ2V0LnBsIgorRklMRVNfJHtQTn0tcG9kID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L3BvZCBcCisJCSAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyoucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyoucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyovKi5wb2QgIgorRklMRVNfcGVybC1taXNjID0gIiR7YmluZGlyfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8qLy5kZWJ1ZyAiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLnR4dCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLyoudHh0IFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvL1hTL1R5cGVtYXAgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvYXNzZW1ibGUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvY2NfaGFybmVzcyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9kaXNhc3NlbWJsZSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9tYWtlbGlibGlua3MgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NHSS9lZyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTi9QQVVTRTIwMDMucHViIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOL1NJR05BVFVSRSBcCisJCSAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU5QTFVTL1NoZWxsL0RlZmF1bHQvUGx1Z2lucy9IT1dUTy5wb2QgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0VuY29kZS9lbmNvZGUuaCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTUFOSUZFU1QuU0tJUCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTk9URVMgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL1BBVENISU5HIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy90eXBlbWFwIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy94c3VicHAgXAorCQkgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9DaGFuZ2VzX0VVLUluc3RhbGwgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L05ldC8qLmVnIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlL21rdGFibGVzIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlL21rdGFibGVzLmxzdCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZS92ZXJzaW9uICIKKworRklMRVNfcGVybC1tb2R1bGUtY3BhbiArPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOLnBtIgorRklMRVNfcGVybC1tb2R1bGUtY3BhbnBsdXMgKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU5QTFVTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOUExVUy5wbSIKK0ZJTEVTX3BlcmwtbW9kdWxlLXVuaWNvcmUgKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L3VuaWNvcmUiCisKKyMgQ3JlYXRlIGEgcGVybC1tb2R1bGVzIHBhY2thZ2UgcmVjb21tZW5kaW5nIGFsbCB0aGUgb3RoZXIgcGVybAorIyBwYWNrYWdlcyAoYWN0dWFsbHkgdGhlIG5vbiBtb2R1bGVzIHBhY2thZ2VzIGFuZCBub3QgY3JlYXRlZCB0b28pCitBTExPV19FTVBUWV9wZXJsLW1vZHVsZXMgPSAiMSIKK1BBQ0tBR0VTX2FwcGVuZCA9ICIgcGVybC1tb2R1bGVzICIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGVybC8ke1BWfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnYXV0by8oW14uXSopL1teL10qXC4oc298bGR8aXh8YWwpJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdNb2R1bGUvKFteXC9dKilcLnBtJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIGFsbG93X2RpcnM9RmFsc2UsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdNb2R1bGUvKFteXC9dKikvLionLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgYWxsb3dfZGlycz1GYWxzZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJyheKD8hKENQQU5cL3xDUEFOUExVU1wvfE1vZHVsZVwvfHVuaWNvcmVcL3xhdXRvXC8pW15cL10pLiopXC4ocG18cGx8ZTJ4KScsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBhbGxvd19kaXJzPUZhbHNlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisKKyAgICAjIHBlcmwtbW9kdWxlcyBzaG91bGQgcmVjb21tZW5kIGV2ZXJ5IHBlcmwgbW9kdWxlLCBhbmQgb25seSB0aGUKKyAgICAjIG1vZHVsZXMuIERvbid0IGF0dGVtcHQgdG8gdXNlIHRoZSByZXN1bHQgb2YgZG9fc3BsaXRfcGFja2FnZXMoKSBhcyBzb21lCisgICAgIyBtb2R1bGVzIGFyZSBtYW51YWxseSBzcGxpdCAoZWcuIHBlcmwtbW9kdWxlLXVuaWNvcmUpLgorICAgIHBhY2thZ2VzID0gZmlsdGVyKGxhbWJkYSBwOiAncGVybC1tb2R1bGUtJyBpbiBwLCBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpKQorICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU18ke1BOfS1tb2R1bGVzIiwgJyAnLmpvaW4ocGFja2FnZXMpKQorfQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecGVybC1tb2R1bGUtLioiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZXNkayArPSAiXm5hdGl2ZXNkay1wZXJsLW1vZHVsZS0uKiIKKworUlBST1ZJREVTX3BlcmwtbGliID0gInBlcmwtbGliIgorCityZXF1aXJlIHBlcmwtcmRlcGVuZHNfJHtQVn0uaW5jCityZXF1aXJlIHBlcmwtcHRlc3QuaW5jCisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqLnBtICoucG9kICouaCAqLnBsICouc2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFiNWM0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy5pbmMKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJIZWxwZXIgdG9vbCB1c2VkIHdoZW4gY29tcGlsaW5nIgorREVTQ1JJUFRJT04gPSAicGtnLWNvbmZpZyBpcyBhIGhlbHBlciB0b29sIHVzZWQgd2hlbiBjb21waWxpbmcgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMuIEl0IGhlbHBzIGRldGVybWluZWQgXAordGhlIGNvcnJlY3QgY29tcGlsZXIvbGluayBvcHRpb25zLiAgSXQgaXMgYWxzbyBsYW5ndWFnZS1hZ25vc3RpYy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PXBrZy1jb25maWciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1NSQ1JFViA9ICI0MDM0MmRkMGVhZDA1ZDQ1N2EyYTRlNjkyY2Y4NjVmNTAwMzNhNzA5IgorUFYgPSAiMC4yOCtnaXQke1NSQ1BWfSIKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvcGtnLWNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1pbnRlcm5hbC1nbGliIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGgtaW50ZXJuYWwtZ2xpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRoLWludGVybmFsLWdsaWIiCisKK2FjcGF0aHMgPSAiLUkgLiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFNldCBhbiBlbXB0eSBkZXYgcGFja2FnZSB0byBlbnN1cmUgdGhlIGJhc2UgUE4gcGFja2FnZSBnZXRzCisjIHRoZSBwa2cubTQgbWFjcm9zLCBwa2djb25maWcgZG9lcyBub3QgZGVsaXZlciBhbnkgb3RoZXIgLWRldgorIyBmaWxlcy4KK0ZJTEVTXyR7UE59LWRldiA9ICIiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsL3BrZy5tNCIKKworIyBXaGVuIHVzaW5nIHRoZSBSUE0gZ2VuZXJhdGVkIGF1dG9tYXRpYyBwYWNrYWdlIGRlcGVuZGVuY2llcywgc29tZSBwYWNrYWdlcworIyB3aWxsIGVuZCB1cCByZXF1aXJpbmcgJ3BrZ2NvbmZpZyhwa2ctY29uZmlnKScuICBBbGxvdyB0aGlzIGJlaGF2aW9yIGJ5CisjIHNwZWNpZnlpbmcgYW4gYXBwcm9wcmlhdGUgcHJvdmlkZS4KK1JQUk9WSURFU18ke1BOfSArPSAicGtnY29uZmlnKHBrZy1jb25maWcpIgorCisjIEluc3RhbGwgYSBwa2ctY29uZmlnLW5hdGl2ZSB3cmFwcGVyIHRoYXQgd2lsbCB1c2UgdGhlIG5hdGl2ZSBzeXNyb290IGluc3RlYWQKKyMgb2YgdGhlIE1BQ0hJTkUgc3lzcm9vdCwgZm9yIHVzaW5nIHBrZy1jb25maWcgd2hlbiBidWlsZGluZyBuYXRpdmUgdG9vbHMuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIHNlZCAtZSAic3xAUEFUSF9OQVRJVkVAfCR7UEtHX0NPTkZJR19QQVRIfXwiIFwKKyAgICAgICAgLWUgInN8QExJQkRJUl9OQVRJVkVAfCR7UEtHX0NPTkZJR19MSUJESVJ9fCIgXAorICAgICAgICA8ICR7V09SS0RJUn0vcGtnLWNvbmZpZy1uYXRpdmUuaW4gPiAke0J9L3BrZy1jb25maWctbmF0aXZlCisgICAgaW5zdGFsbCAtbTc1NSAke0J9L3BrZy1jb25maWctbmF0aXZlICR7RH0ke2JpbmRpcn0vcGtnLWNvbmZpZy1uYXRpdmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzYyNDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBwa2ctY29uZmlnLTAuMjgvZ2xpYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwa2ctY29uZmlnLTAuMjgub3JpZy9nbGliL2NvbmZpZ3VyZS5hYworKysrIHBrZy1jb25maWctMC4yOC9nbGliL2NvbmZpZ3VyZS5hYworQEAgLTE0MzgsNyArMTQzOCw3IEBAIGlmIHRlc3QgeCIkZ2xpYl9uYXRpdmVfd2luMzIiID0geHllczsgdGgKKyAgIEdfTU9EVUxFX0xERkxBR1M9CisgZWxzZQorICAgZXhwb3J0IFNFRAorLSAgR19NT0RVTEVfTERGTEFHUz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorKyAgR19NT0RVTEVfTERGTEFHUz1gKC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgZmkKKyBkbmwgR19NT0RVTEVfSU1QTD0gZG9uJ3QgcmVzZXQsIHNvIGNtZC1saW5lIGNhbiBvdmVycmlkZQorIEdfTU9EVUxFX05FRURfVVNDT1JFPTAKK0BAIC0xNTAzLDEzICsxNTAzLDEzIEBAIGlmIHRlc3QgIiRHX01PRFVMRV9JTVBMIiA9ICJHX01PRFVMRV9JTVAKKyAJTERGTEFHUz0iJExERkxBR1MgJEdfTU9EVUxFX0xERkxBR1MiCisgZG5sICoqKiBjaGVjayBmb3IgT1NGMS81LjAgUlRMRF9HTE9CQUwgYnJva2VubmVzcworIAllY2hvICJ2b2lkIGdsaWJfcGx1Z2luX3Rlc3Qodm9pZCkgeyB9IiA+IHBsdWdpbi5jCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtDUFBGTEFHU30gLWMgLW8gcGx1Z2luLmxvIHBsdWdpbi5jID4vZGV2L251bGwgMj4mMQorLQkke1NIRUxMfSAuL2xpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKysJJHtTSEVMTH0gLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7TERGTEFHU30gLW1vZHVsZSAtbyBwbHVnaW4ubGEgLWV4cG9ydC1keW5hbWljIFwKKyAJCS1zaHJleHQgIi5vIiAtYXZvaWQtdmVyc2lvbiBwbHVnaW4ubG8gXAorIAkJLXJwYXRoIC9kb250L2NhcmUgPi9kZXYvbnVsbCAyPiYxCistCWV2YWwgYC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgXm9iamRpcmAKKysJZXZhbCBgLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1jb25maWcgfCBncmVwIF5vYmpkaXJgCisgCUFDX0NBQ0hFX0NIRUNLKFtmb3IgUlRMRF9HTE9CQUwgYnJva2VubmVzc10sCisgCQlnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuLFsKKyAJCUFDX1RSWV9SVU4oWworQEAgLTE1ODIsNyArMTU4Miw3IEBAIGZpCisgCisgQUNfTVNHX0NIRUNLSU5HKGZvciB0aGUgc3VmZml4IG9mIG1vZHVsZSBzaGFyZWQgbGlicmFyaWVzKQorIGV4cG9ydCBTRUQKKy1zaHJleHRfY21kcz1gLi9saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisrc2hyZXh0X2NtZHM9YC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisgZXZhbCAkc2hyZXh0X2NtZHMKKyBtb2R1bGU9eWVzIGV2YWwgc3RkX3NocmV4dD0kc2hyZXh0X2NtZHMKKyAjIGNob3AgdGhlIGluaXRpYWwgZG90CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL3BrZy1jb25maWctbmF0aXZlLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ0YmI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbgpAQCAtMCwwICsxLDcgQEAKKyMhIC9iaW4vc2gKKworUEtHX0NPTkZJR19QQVRIPSJAUEFUSF9OQVRJVkVAIgorUEtHX0NPTkZJR19MSUJESVI9IkBMSUJESVJfTkFUSVZFQCIKK3Vuc2V0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIKKworcGtnLWNvbmZpZyAiJEAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTUxMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgcGtnY29uZmlnLmluYworCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICAgZmlsZTovL3BrZy1jb25maWctbmF0aXZlLmluIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaCBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3Bvc3RpbnN0LWludGVyY2VwdC9uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0XzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3Bvc3RpbnN0LWludGVyY2VwdC9uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0XzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM0NWM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiUG9zdGluc3RhbGwgc2NyaXB0bGV0cyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0ZJTEVTXyR7UE59X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLyoiCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMKKwlpbnN0YWxsIC1tIDc1NSAke0NPUkVCQVNFfS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvcG9zdGluc3RfaW50ZXJjZXB0ICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9pY29uX2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUgJHtEfSR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8KK30KKworaW5oZXJpdCBuYXRpdmVzZGsKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvbWFjcm9zLnByZWxpbmsgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvbWFjcm9zLnByZWxpbmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxNjY5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluawpAQCAtMCwwICsxLDUgQEAKKyMgcnBtLTQuMSB2ZXJpZmllcyBwcmVsaW5rZWQgbGlicmFyaWVzIHVzaW5nIGEgcHJlbGluayB1bmRvIGhlbHBlci4KKyMgICAgICAgTm90ZTogVGhlIDJuZCB0b2tlbiBpcyB1c2VkIGFzIGFyZ3ZbMF0gYW5kICJsaWJyYXJ5IiBpcyBhCisjICAgICAgIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBiZSBkZWxldGVkIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorIyAgICAgICBsaWJyYXJ5IGZpbGUgcGF0aC4KKyVfX3ByZWxpbmtfdW5kb19jbWQgICAgIC91c3Ivc2Jpbi9wcmVsaW5rIHByZWxpbmsgLXkgbGlicmFyeQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyZjIzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYKQEAgLTAsMCArMSwxOCBAQAorIyBUaGlzIGNvbmZpZyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBib3RoIHdpdGggYmluYXJpZXMKKyMgYW5kIGxpYnJhcmllcyBwcmVsaW5rIHNob3VsZCBjb25zaWRlciBieSBkZWZhdWx0LgorIyBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIHByZWZpeGVkIHdpdGggYC1sICcsIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIHdpbGwgYmUgd2Fsa2VkIGFzIGxvbmcgYXMgZmlsZXN5c3RlbSBib3VuZGFyaWVzIGFyZSBub3QgY3Jvc3NlZC4KKyMgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBwcmVmaXhlZCB3aXRoIGAtaCAnLCBzeW1ib2xpYyBsaW5rcyBpbiBhCisjIGRpcmVjdG9yeSBoaWVyYXJjaHkgYXJlIGZvbGxvd2VkLgorLWwgL3Vzci9sb2NhbC9zYmluCistbCAvc2JpbgorLWwgL3Vzci9zYmluCistbCAvdXNyL2xvY2FsL2JpbgorLWwgL2JpbgorLWwgL3Vzci9iaW4KKy1sIC91c3IvWDExUjYvYmluCistbCAvdXNyL2dhbWVzCistbCAvdXNyL2xvY2FsL2xpYnssMzIsNjQseDMyfQorLWwgL2xpYnssMzIsNjQseDMyfQorLWwgL3Vzci9saWJ7LDMyLDY0LHgzMn0KKy1sIC91c3IvWDExUjYvbGlieywzMiw2NCx4MzJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jcm9uLmRhaWx5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNjMDczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseQpAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2RlZmF1bHQvcHJlbGluaworCityZW5pY2UgKzE5IC1wICQkID4vZGV2L251bGwgMj4mMQorCitpZiBbICIkUFJFTElOS0lORyIgIT0geWVzIF07IHRoZW4KKyAgaWYgWyAtZiAvZXRjL3ByZWxpbmsuY2FjaGUgXTsgdGhlbgorICAgIGVjaG8gL3Vzci9zYmluL3ByZWxpbmsgLXVhdiA+IC92YXIvbG9nL3ByZWxpbmsubG9nCisgICAgL3Vzci9zYmluL3ByZWxpbmsgLXVhdiA+PiAvdmFyL2xvZy9wcmVsaW5rLmxvZyAyPiYxCisgICAgcm0gLWYgL2V0Yy9wcmVsaW5rLmNhY2hlCisgICAgIyBSZXN0YXJ0IGluaXQgaWYgbmVlZGVkCisgICAgWyAtbiAiJChmaW5kIGBsZGQgL3NiaW4vaW5pdCB8IGF3ayAneyBwcmludCAkMyB9J2AgL3NiaW4vaW5pdCAtY3RpbWUgLTEgMj4vZGV2L251bGwgKSIgXSAmJiAvc2Jpbi90ZWxpbml0IHUKKyAgZmkKKyAgZXhpdCAwCitmaQorCitpZiBbICEgLWYgL2V0Yy9wcmVsaW5rLmNhY2hlIC1vIC1mIC92YXIvbGliL21pc2MvcHJlbGluay5mb3JjZSBdIFwKKyAgIHx8IGdyZXAgLXEgJ15wcmVsaW5rLUVMRjAuWzAtMl0nIC9ldGMvcHJlbGluay5jYWNoZTsgdGhlbgorICAjIElmIGNhY2hlIGRvZXMgbm90IGV4aXN0IG9yIGlzIGZyb20gb2xkZXIgcHJlbGluayB2ZXJzaW9ucyBvcgorICAjIGlmIHdlIHdlcmUgYXNrZWQgdG8gZXhwbGljaXRlbHksIGZvcmNlIGZ1bGwgcHJlbGlua2luZworICBybSAtZiAvZXRjL3ByZWxpbmsuY2FjaGUgL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZvcmNlCisgIFBSRUxJTktfT1BUUz0iJFBSRUxJTktfT1BUUyAtZiIKKyAgZGF0ZSA+IC92YXIvbGliL21pc2MvcHJlbGluay5mdWxsCitlbGlmIFsgLW4gIiRQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCIgXAorICAgICAgIC1hICJgZmluZCAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbCAtbXRpbWUgLSR7UFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUx9IDI+L2Rldi9udWxsYCIgXAorCSAgPSAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbCBdOyB0aGVuCisgICMgSWYgcHJlbGluayB3aXRob3V0IC1xIGhhcyBiZWVuIHJ1biBpbiB0aGUgbGFzdAorICAjIFBSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMIGRheXMsIGp1c3QgdXNlIHF1aWNrIG1vZGUKKyAgUFJFTElOS19PUFRTPSIkUFJFTElOS19PUFRTIC1xIgorZWxzZQorICBkYXRlID4gL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwKK2ZpCisKK2VjaG8gL3Vzci9zYmluL3ByZWxpbmsgLWF2ICRQUkVMSU5LX09QVFMgPiAvdmFyL2xvZy9wcmVsaW5rLmxvZworL3Vzci9zYmluL3ByZWxpbmsgLWF2ICRQUkVMSU5LX09QVFMgPj4gL3Zhci9sb2cvcHJlbGluay5sb2cgMj4mMQorIyBSZXN0YXJ0IGluaXQgaWYgbmVlZGVkCitbIC1uICIkKGZpbmQgYGxkZCAvc2Jpbi9pbml0IHwgYXdrICd7IHByaW50ICQzIH0nYCAvc2Jpbi9pbml0IC1jdGltZSAtMSAyPi9kZXYvbnVsbCApIiBdICYmIC9zYmluL3RlbGluaXQgdQorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmRlZmF1bHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODAyZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0CkBAIC0wLDAgKzEsMjIgQEAKKyMgU2V0IHRoaXMgdG8gbm8gdG8gZGlzYWJsZSBwcmVsaW5raW5nIGFsdG9nZXRoZXIKKyMgb3IgdG8geWVzIHRvIGVuYWJsZSBpdC4KKyMgKGlmIHlvdSBjaGFuZ2UgdGhpcyBmcm9tIHllcyB0byBubyBwcmVsaW5rIC11YQorIyB3aWxsIGJlIHJ1biBuZXh0IG5pZ2h0IHRvIHVuZG8gcHJlbGlua2luZykKK1BSRUxJTktJTkc9eWVzCisKKyMgT3B0aW9ucyB0byBwYXNzIHRvIHByZWxpbmsKKyMgLW0JVHJ5IHRvIGNvbnNlcnZlIHZpcnR1YWwgbWVtb3J5IGJ5IGFsbG93aW5nIG92ZXJsYXBwaW5nCisjCWFzc2lnbmVkIHZpcnR1YWwgbWVtb3J5IHNsb3RzIGZvciBsaWJyYXJpZXMgd2hpY2gKKyMJbmV2ZXIgYXBwZWFyIHRvZ2V0aGVyIGluIG9uZSBiaW5hcnkKKyMgLVIJUmFuZG9taXplIHZpcnR1YWwgbWVtb3J5IHNsb3QgYXNzaWdubWVudHMgZm9yIGxpYnJhcmllcy4KKyMJVGhpcyBtYWtlcyBpdCBzbGlnaHRseSBoYXJkZXIgZm9yIHZhcmlvdXMgYnVmZmVyIG92ZXJmbG93CisjCWF0dGFja3MsIHNpbmNlIGxpYnJhcnkgYWRkcmVzc2VzIHdpbGwgYmUgZGlmZmVyZW50IG9uIGVhY2gKKyMJaG9zdCB1c2luZyAtUi4KK1BSRUxJTktfT1BUUz0tbVIKKworIyBIb3cgb2Z0ZW4gc2hvdWxkIGZ1bGwgcHJlbGluayBiZSBydW4gKGluIGRheXMpCisjIE5vcm1hbGx5LCBwcmVsaW5rIHdpbGwgYmUgcnVuIGluIHF1aWNrIG1vZGUsIGV2ZXJ5CisjICRQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCBkYXlzIGl0IHdpbGwgYmUgcnVuCisjIGluIG5vcm1hbCBtb2RlLiAgQ29tbWVudCB0aGlzIGxpbmUgb3V0IGlmIHByZWxpbmsgCisjIHNob3VsZCBiZSBydW4gaW4gbm9ybWFsIG1vZGUgYWx3YXlzLgorUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUw9MTQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTVmNTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCkBAIC0wLDAgKzEsODEgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCisjIE5lZWQgYmludXRpbHMgZm9yIGxpYmliZXJ0eS5hCisjIFdvdWxkIG5lZWQgdHJhbnNmaWctbmF0aXZlIGZvciBkb2N1bWVudGF0aW9uIGlmIGl0IHdhc24ndCBkaXNhYmxlZAorREVQRU5EUyA9ICJlbGZ1dGlscyBiaW51dGlscyIKK1NVTU1BUlkgPSAiQW4gRUxGIHByZWxpbmtpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBwcmVsaW5rIHBhY2thZ2UgY29udGFpbnMgYSB1dGlsaXR5IHdoaWNoIG1vZGlmaWVzIEVMRiBzaGFyZWQgbGlicmFyaWVzIFwKK2FuZCBleGVjdXRhYmxlcywgc28gdGhhdCBmYXIgZmV3ZXIgcmVsb2NhdGlvbnMgbmVlZCB0byBiZSByZXNvbHZlZCBhdCBcCitydW50aW1lIGFuZCB0aHVzIHByb2dyYW1zIGNvbWUgdXAgZmFzdGVyLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiIKK1NSQ1JFViA9ICJjZGVlNWE0ZGQyMjZjYzVlOWYzMGYzNzAwNjdhOTAzMWYzOThlZjNjIgorUFYgPSAiMS4wK2dpdCR7U1JDUFZ9IgorCisjCisjIFRoZSBjcm9uIHNjcmlwdCBhdHRlbXB0cyB0byByZS1wcmVsaW5rIHRoZSBzeXN0ZW0gZGFpbHkgLS0gb24KKyMgc3lzdGVtcyB3aGVyZSB1c2VycyBhcmUgYWRkaW5nIGFwcGxpY2F0aW9ucywgdGhpcyBtaWdodCBiZSByZWFzb25hYmxlCisjIGJ1dCBmb3IgZW1iZWRkZWQsIHdlIHNob3VsZCBiZSByZS1ydW5uaW5nIHByZWxpbmsgLWEgYWZ0ZXIgYW4gdXBkYXRlLgorIworIyBEZWZhdWx0IGlzIHByZWxpbmtpbmcgaXMgZW5hYmxlZC4KKyMKK1NVTU1BUllfJHtQTn0tY3JvbiA9ICJDcm9uIHNjcmlwdHMgdG8gY29udHJvbCBhdXRvbWF0aWMgcHJlbGlua2luZyIKK0RFU0NSSVBUSU9OXyR7UE59LWNyb24gPSAiQ3JvbiBzY3JpcHRzIHRvIGNvbnRyb2wgYXV0b21hdGljIHByZWxpbmtpbmcuICBcCitTZWU6ICR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseS9wcmVsaW5rIGZvciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIKKworRklMRVNfJHtQTn0tY3JvbiA9ICIke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3JvbiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wcmVsaW5rLWNyb3NzLmdpdDticmFuY2g9Y3Jvc3NfcHJlbGluayBcCisgICAgICAgICAgIGZpbGU6Ly9wcmVsaW5rLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcHJlbGluay5jcm9uLmRhaWx5IFwKKyAgICAgICAgICAgZmlsZTovL3ByZWxpbmsuZGVmYXVsdCBcCisJICAgZmlsZTovL21hY3Jvcy5wcmVsaW5rIgorCitUQVJHRVRfT1NfT1JJRyA6PSAiJHtUQVJHRVRfT1N9IgorT1ZFUlJJREVTX2FwcGVuZCA9ICI6JHtUQVJHRVRfT1NfT1JJR30iCisKK1MgPSAiJHtXT1JLRElSfS9naXQvdHJ1bmsiCisKK2luaGVyaXQgYXV0b3Rvb2xzIAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zZWxpbnV4IC0td2l0aC1wa2d2ZXJzaW9uPSR7UFZ9LSR7UFJ9IFwKKwktLXdpdGgtYnVndXJsPWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICAjIERpc2FibGUgZG9jdW1lbnRhdGlvbiEKKyAgICAgICAgZWNobyAiYWxsOiIgPiAke1N9L2RvYy9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vcnBtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJlbGluay5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ByZWxpbmsuY3Jvbi5kYWlseSAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L3ByZWxpbmsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcmVsaW5rLmRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9wcmVsaW5rCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbWFjcm9zLnByZWxpbmsgJHtEfSR7c3lzY29uZmRpcn0vcnBtL21hY3Jvcy5wcmVsaW5rCit9CisKKyMgSWYgd2UncmUgdXNpbmcgaW1hZ2UtcHJlbGluaywgd2Ugd2FudCB0byBza2lwIHRoaXMgb24gdGhlIGhvc3Qgc2lkZQorIyBidXQgc3RpbGwgZG8gaXQgaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQuLi4KK3BrZ19wb3N0aW5zdF9wcmVsaW5rKCkgeworIyEvYmluL3NoCisKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRVJfQ0xBU1NFUycsICdpbWFnZS1wcmVsaW5rJywgJ2V4aXQgMCcsICdleGl0IDEnLCBkKX0KK2ZpCisKK3ByZWxpbmsgLWEKK30KKworcGtnX3ByZXJtX3ByZWxpbmsoKSB7CisjIS9iaW4vc2gKKworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICBleGl0IDEKK2ZpCisKK3ByZWxpbmsgLWF1Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJmNzMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwCkBAIC0wLDAgKzEsMiBAQAorcm9vdDoqOjA6CittYWlsOio6ODoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNDU4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkCkBAIC0wLDAgKzEgQEAKK3Jvb3Q6OjA6MDpyb290Oi9ob21lL3Jvb3Q6L2Jpbi9zaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTEyMjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMKQEAgLTAsMCArMSwxMzUgQEAKKyMgTm90ZTogRHVlIHRvIHRoZSBiaXRiYWtlIHdyYXBwZXIgc2NyaXB0LCBtYWtpbmcgY2hhbmdlcyB0byBwc2V1ZG8gY2FuIGJlCisjIGRpZmZpY3VsdC4gIFRvIHdvcmsgYXJvdW5kIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHdyYXBwZXIgdXNlOgorIyBCQkZFVENIMj1UcnVlIFBTRVVET19CVUlMRD0xIC4uL2JpdGJha2UvYmluL2JpdGJha2UgcHNldWRvLW5hdGl2ZSBbLWMgQ01EXQorCitTVU1NQVJZID0gIlBzZXVkbyBnaXZlcyBmYWtlIHJvb3QgY2FwYWJpbGl0aWVzIHRvIGEgbm9ybWFsIHVzZXIiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wc2V1ZG8iCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiTEdQTDIuMSIKK0RFUEVORFMgPSAic3FsaXRlMyBhdHRyIgorCitGSUxFU18ke1BOfSA9ICIke3ByZWZpeH0vbGliL3BzZXVkby9saWIqL2xpYnBzZXVkby5zbyAke2JpbmRpcn0vKiAke2xvY2Fsc3RhdGVkaXJ9L3BzZXVkbyAke3ByZWZpeH0vdmFyL3BzZXVkbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliKi8uZGVidWciCitJTlNBTkVfU0tJUF8ke1BOfSArPSAibGliZGlyIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnICs9ICJsaWJkaXIiCisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2Zha2Vyb290IgorCitNQUtFT1BUUyA9ICIiCisKK2luaGVyaXQgc2l0ZWluZm8KKworZG9fY29uZmlndXJlICgpIHsKKwk6Cit9CisKK05PMzJMSUJTID8/PSAiMSIKK05PMzJMSUJTX2NsYXNzLW5hdGl2ZXNkayA9ICIxIgorCisjIENvbXBpbGUgZm9yIHRoZSBsb2NhbCBtYWNoaW5lIGFyY2guLi4KK2RvX2NvbXBpbGUgKCkgeworCWlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisJICAke1N9L2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliJHtTSVRFSU5GT19CSVRTfSAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1jZmxhZ3M9IiR7Q0ZMQUdTfSIgLS1iaXRzPSR7U0lURUlORk9fQklUU30gLS1lbmFibGUtc3RhdGljLXNxbGl0ZSAtLXdpdGhvdXQtcnBhdGgKKwllbHNlCisJICAke1N9L2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliIC0td2l0aC1zcWxpdGUtbGliPSR7YmFzZWxpYn0gLS13aXRoLXNxbGl0ZT0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2V4ZWNfcHJlZml4fSAtLWNmbGFncz0iJHtDRkxBR1N9IiAtLWJpdHM9JHtTSVRFSU5GT19CSVRTfSAtLWVuYWJsZS1zdGF0aWMtc3FsaXRlIC0td2l0aG91dC1ycGF0aAorCWZpCisJb2VfcnVubWFrZSAke01BS0VPUFRTfQorfQorZG9fY29tcGlsZVt2YXJkZXBzZXhjbHVkZV0gPSAiU0lURUlORk9fQklUUyIKKworbWF5YmVfbWFrZTMyKCkgeworCSMgV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBidWlsZCAzMi1iaXQgYmluYXJpZXMuCisJbWFrZTMyPWZhbHNlCisJaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKwkJY2FzZSAiJHtOTzMyTElCU30iIGluCisJCTApCW1ha2UzMj10cnVlCisJCQk7OworCQkxKQltYWtlMzI9ZmFsc2UKKwkJCTs7CisJCSopCSMgSWYgdW5zZXQsIGJ1aWxkIDMyLWJpdCBpZiB3ZSB0aGluayB3ZSBjYW4uCisJCQlpZiBbIC1lICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgiIF07IHRoZW4KKwkJCQltYWtlMzI9dHJ1ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwlmaQorCWlmICRtYWtlMzI7IHRoZW4KKwkJaWYgISBbIC1lICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgiIF07IHRoZW4KKwkJCXdhcm5fMzJiaXRfbWlzc2luZworCQllbHNlCisJCQliYm5vdGUgIkF0dGVtcHRpbmcgdG8gYnVpbGQgMzItYml0IGxpYnBzZXVkby5zbyBmb3IgJHtQTn0uIgorCQlmaQorCWVsc2UKKwkJYmJub3RlICJCdWlsZGluZy9pbnN0YWxsaW5nIG9ubHkgNjQtYml0IGxpYnBzZXVkby5zbyBmb3IgJHtQTn0uIgorCQliYm5vdGUgIklmIHlvdSBuZWVkIHRvIHJ1biAzMi1iaXQgZXhlY3V0YWJsZXMsIGVuc3VyZSB0aGF0IE5PMzJMSUJTIGlzIHNldCB0byAwLiIKKwlmaQorfQorbWF5YmVfbWFrZTMyW3ZhcmRlcHNleGNsdWRlXSA9ICJTSVRFSU5GT19CSVRTIgorCit3YXJuXzMyYml0X21pc3NpbmcoKSB7CisJYmJ3YXJuICJDYW4ndCBmaW5kIHN0dWJzLTMyLmgsIGJ1dCB1c3VhbGx5IG5lZWQgaXQgdG8gYnVpbGQgMzItYml0IGxpYnBzZXVkby4iCisJYmJ3YXJuICJJZiB0aGUgYnVpbGQgZmFpbHMsIGluc3RhbGwgMzItYml0IGRldmVsb3BlciBwYWNrYWdlcy4iCisJYmJ3YXJuICJJZiB5b3UgYXJlIHVzaW5nIDMyLWJpdCBiaW5hcmllcywgdGhlIDMyLWJpdCBsaWJwc2V1ZG8gaXMgTk9UIG9wdGlvbmFsLiIKK30KKworIyBUd28gYmVsb3cgYXJlIHRoZSBzYW1lCisjIElmIG5lY2Vzc2FyeSBjb21waWxlIGZvciB0aGUgYWx0ZXJuYXRpdmUgbWFjaGluZSBhcmNoLiAgVGhpcyBpcyBvbmx5IAorIyBuZWNlc3NhcnkgaW4gYSBuYXRpdmUgYnVpbGQuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCSMgV2UgbmVlZCB0aGUgMzItYml0IGxpYnBzZXVkbyBvbiBhIDY0LWJpdCBtYWNoaW5lLi4uCisJCSMgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHdlbGwtdGVzdGVkIG91dHNpZGUgb2YgeDg2L3g4Nl82NC4KKworCQkjIGlmIHdlJ3JlIGJlaW5nIHJlYnVpbHQgZHVlIHRvIGEgZGVwZW5kZW5jeSBjaGFuZ2UsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCisJCSMgZXZlcnl0aGluZyBpcyBjbGVhbiBiZWZvcmUgd2UgY29uZmlndXJlIGFuZCBidWlsZCAtLSBpZiB3ZSBoYXZlbid0IHByZXZpb3VzbHkKKwkJIyBidWlsdCB0aGlzIHdpbGwgZmFpbCBhbmQgYmUgaWdub3JlZC4KKwkJbWFrZSAke01BS0VPUFRTfSBkaXN0Y2xlYW4gfHwgOgorCisJCS4vY29uZmlndXJlICR7UFNFVURPX0VYVFJBX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSAtLWxpYmRpcj0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIgLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tYml0cz0zMiAtLXdpdGhvdXQtcnBhdGgKKwkJc2F2ZV90cmFwcz0kKHRyYXApCisJCXRyYXAgJ3dhcm5fMzJiaXRfbWlzc2luZycgMAorCQlvZV9ydW5tYWtlICR7TUFLRU9QVFN9IGxpYnBzZXVkbworCQlldmFsICIkc2F2ZV90cmFwcyIKKwkJIyBwcmV2ZW50IGl0IGZyb20gcmVtb3ZpbmcgdGhlIGxpYiwgYnV0IHJlbW92ZSBldmVyeXRoaW5nIGVsc2UKKwkJbWFrZSAnTElCPWZvbycgJHtNQUtFT1BUU30gZGlzdGNsZWFuIAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCW1heWJlX21ha2UzMgorCWlmICRtYWtlMzI7IHRoZW4KKwkJIyBXZSBuZWVkIHRoZSAzMi1iaXQgbGlicHNldWRvIG9uIGEgNjQtYml0IG1hY2hpbmUuCisJCSMgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHdlbGwtdGVzdGVkIG91dHNpZGUgb2YgeDg2L3g4Nl82NC4KKwkJLi9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1iaXRzPTMyIC0td2l0aG91dC1ycGF0aAorCQlvZV9ydW5tYWtlICR7TUFLRU9QVFN9IGxpYnBzZXVkbworCQkjIHByZXZlbnQgaXQgZnJvbSByZW1vdmluZyB0aGUgbGliLCBidXQgcmVtb3ZlIGV2ZXJ5dGhpbmcgZWxzZQorCQltYWtlICdMSUI9Zm9vJyAke01BS0VPUFRTfSBkaXN0Y2xlYW4gCisJZmkKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAke01BS0VPUFRTfSAnTElCPWxpYi9wc2V1ZG8vbGliJChNQVJLNjQpJyBpbnN0YWxsCit9CisKKyMgVHdvIGJlbG93IGFyZSB0aGUgc2FtZQorIyBJZiBuZWNlc3NhcnkgaW5zdGFsbCBmb3IgdGhlIGFsdGVybmF0aXZlIG1hY2hpbmUgYXJjaC4gIFRoaXMgaXMgb25seSAKKyMgbmVjZXNzYXJ5IGluIGEgbmF0aXZlIGJ1aWxkLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCW1rZGlyIC1wICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIKKwkJY3AgbGliL3BzZXVkby9saWIvbGlicHNldWRvLnNvICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIvLgorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQlta2RpciAtcCAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliCisJCWNwIGxpYi9wc2V1ZG8vbGliL2xpYnBzZXVkby5zbyAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliLy4KKwlmaQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGMyMGFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHBzZXVkby5pbmMKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9wc2V1ZG8vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1wYXNzd2QgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1ncm91cCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0Y2QzOTUwMmY5YmQwZTczNGRlZTgwZTA4YjI4YTVmMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZjJjYWNhNWYxNTc5YTM3NmE1MDljZDgxYTgxMTU2ZmMyMDg2NTBhZGQ5ZjBhZjI3NWRhOWU5MTFmMThmMjkxIgorCitQU0VVRE9fRVhUUkFfT1BUUyA/PSAiLS1lbmFibGUtZm9yY2UtYXN5bmMgLS13aXRob3V0LXBhc3N3ZC1mYWxsYmFjayIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJIyBUaGUgZmFsbGJhY2sgZmlsZXMgc2hvdWxkIG5ldmVyIGJlIG1vZGlmaWVkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1wYXNzd2QgJHtEfSR7c3lzY29uZmRpcn0vcGFzc3dkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1ncm91cCAke0R9JHtzeXNjb25mZGlyfS9ncm91cAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjcuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ZWYzYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBwc2V1ZG8uaW5jCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvcHNldWRvLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stZ3JvdXAgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmJkMGE0NGVhZGQ0NzEzZTkwYWQ4YzE1MmVlYTc3YWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTlmYzM5MjJmOGZlYjk3ODM5YjUwZDE0ZWIxOTg3YWZkYzhmMjJjZGNhYzkzMTE5MzIzY2NjZDVmODQ0NDY1MiIKKworUFNFVURPX0VYVFJBX09QVFMgPz0gIi0tZW5hYmxlLWZvcmNlLWFzeW5jIC0td2l0aG91dC1wYXNzd2QtZmFsbGJhY2siCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlMTIyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgcHNldWRvLmluYworCitTUkNSRVYgPSAiZTc5NWRmNDRhOTBhNDI2YTc2Yjc5MGYxYjI3NzRmMzA0NmE4ZmMzMSIKK1BWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcHNldWRvIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTIuNy1tYW5pZmVzdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTIuNy1tYW5pZmVzdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4ZDgyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwpAQCAtMCwwICsxLDI4OCBAQAorCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weScgVmVyc2lvbiAyMDExMDIyMi4yIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIFZpc2l0IHRoZSBQeXRob24gZm9yIEVtYmVkZGVkIFN5c3RlbXMgU2l0ZSA9PiBodHRwOi8vd3d3LlZhbmlsbGUuZGUvcHJvamVjdHMvcHl0aG9uLnNweQorCisgCisKK1BST1ZJREVTKz0iJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICIKKworUEFDS0FHRVM9IiR7UE59LWRiZyAke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWF1ZGlvICR7UE59LWJzZGRiICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXBpbGVyICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvbnRleHRsaWIgJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1ob3RzaG90ICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlc291cmNlICR7UE59LXJvYm90cGFyc2VyICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LXpsaWIgJHtQTn0tbW9kdWxlcyIKKworU1VNTUFSWV8ke1BOfS0ydG8zPSJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIgorUkRFUEVORFNfJHtQTn0tMnRvMz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LTJ0bzM9IiR7YmluZGlyfS8ydG8zICR7bGliZGlyfS9weXRob24yLjcvbGliMnRvMyAiCisKK1NVTU1BUllfJHtQTn0tYXJncGFyc2U9IlB5dGhvbiBjb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2VyIgorUkRFUEVORFNfJHtQTn0tYXJncGFyc2U9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LWFyZ3BhcnNlPSIke2xpYmRpcn0vcHl0aG9uMi43L2FyZ3BhcnNlLiogIgorCitTVU1NQVJZXyR7UE59LWF1ZGlvPSJQeXRob24gQXVkaW8gSGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1hdWRpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWF1ZGlvPSIke2xpYmRpcn0vcHl0aG9uMi43L3dhdmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NodW5rLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zbmRoZHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL29zc2F1ZGlvZGV2LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYXVkaW9vcC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2F1ZGlvZGV2LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdW5hdWRpby4qICR7bGliZGlyfS9weXRob24yLjcvc3VuYXUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RvYWlmZi4qICIKKworU1VNTUFSWV8ke1BOfS1ic2RkYj0iUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQmVya2VsZXkgRGF0YWJhc2UiCitSREVQRU5EU18ke1BOfS1ic2RkYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWJzZGRiPSIke2xpYmRpcn0vcHl0aG9uMi43L2JzZGRiICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2JzZGRiLnNvICIKKworU1VNTUFSWV8ke1BOfS1jb2RlY3M9IlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvZGVjcz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tY29kZWNzPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvZGVjcy4qICR7bGliZGlyfS9weXRob24yLjcvZW5jb2RpbmdzICR7bGliZGlyfS9weXRob24yLjcvZ2V0dGV4dC4qICR7bGliZGlyfS9weXRob24yLjcvbG9jYWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbG9jYWxlLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2NvZGVjcyogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbXVsdGlieXRlY29kZWMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC91bmljb2RlZGF0YS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3N0cmluZ3ByZXAuKiAke2xpYmRpcn0vcHl0aG9uMi43L3hkcmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb21waWxlPSJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlPSIke2xpYmRpcn0vcHl0aG9uMi43L3B5X2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbXBpbGVhbGwuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcGlsZXI9IlB5dGhvbiBjb21waWxlciBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcGlsZXI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb21waWxlciAiCisKK1NVTU1BUllfJHtQTn0tY29tcHJlc3Npb249IlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21wcmVzc2lvbj0iJHtQTn0tY29yZSAke1BOfS16bGliIgorRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24yLjcvZ3ppcC4qICR7bGliZGlyfS9weXRob24yLjcvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYnoyLnNvICIKKworU1VNTUFSWV8ke1BOfS1jb250ZXh0bGliPSJQeXRob24gdXRpbGl0aWVzIGZvciB3aXRoLXN0YXRlbWVudGNvbnRleHRzLiIKK1JERVBFTkRTXyR7UE59LWNvbnRleHRsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb250ZXh0bGliPSIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb250ZXh0bGliLiogIgorCitTVU1NQVJZXyR7UE59LWNvcmU9IlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tY29yZT0iJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWNvcmU9IiR7bGliZGlyfS9weXRob24yLjcvX19mdXR1cmVfXy4qICR7bGliZGlyfS9weXRob24yLjcvX2FiY29sbC4qICR7bGliZGlyfS9weXRob24yLjcvYWJjLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb3B5LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb3B5X3JlZy4qICR7bGliZGlyfS9weXRob24yLjcvQ29uZmlnUGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24yLjcvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L25ldy4qICR7bGliZGlyfS9weXRob24yLjcvb3MuKiAke2xpYmRpcn0vcHl0aG9uMi43L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24yLjcvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24yLjcvc2l0ZS4qICR7bGliZGlyfS9weXRob24yLjcvc3RhdC4qICR7bGliZGlyfS9weXRob24yLjcvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9iaW5hc2NpaS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zdHJ1Y3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC90aW1lLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQveHJlYWRsaW5lcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3R5cGVzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wbGF0Zm9ybS4qICR7YmluZGlyfS9weXRob24qICR7bGliZGlyfS9weXRob24yLjcvX3dlYWtyZWZzZXQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N5c2NvbmZpZy4qICR7bGliZGlyfS9weXRob24yLjcvX3N5c2NvbmZpZ2RhdGEuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbmZpZy9NYWtlZmlsZSAke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vcHljb25maWcqLmggJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiCisKK1NVTU1BUllfJHtQTn0tY3J5cHQ9IlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jcnlwdD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNyeXB0PSIke2xpYmRpcn0vcHl0aG9uMi43L2hhc2hsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21kNS4qICR7bGliZGlyfS9weXRob24yLjcvc2hhLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jcnlwdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19oYXNobGliLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NoYTI1Ni5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zaGE1MTIuc28gIgorCitTVU1NQVJZXyR7UE59LWN0eXBlcz0iUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN0eXBlcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jdHlwZXMgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3R5cGVzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0LnNvICIKKworU1VNTUFSWV8ke1BOfS1jdXJzZXM9IlB5dGhvbiBjdXJzZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN1cnNlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN1cnNlcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jdXJzZXMgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3Vyc2VzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGF0ZXRpbWU9IlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGF0ZXRpbWU9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tZGF0ZXRpbWU9IiR7bGliZGlyfS9weXRob24yLjcvX3N0cnB0aW1lLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jYWxlbmRhci4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZGF0ZXRpbWUuc28gIgorCitTVU1NQVJZXyR7UE59LWRiPSJQeXRob24gZmlsZS1iYXNlZCBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9hbnlkYm0uKiAke2xpYmRpcn0vcHl0aG9uMi43L2R1bWJkYm0uKiAke2xpYmRpcn0vcHl0aG9uMi43L3doaWNoZGIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGVidWdnZXI9IlB5dGhvbiBkZWJ1Z2dlciIKK1JERVBFTkRTXyR7UE59LWRlYnVnZ2VyPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LXNoZWxsICR7UE59LXBwcmludCIKK0ZJTEVTXyR7UE59LWRlYnVnZ2VyPSIke2xpYmRpcn0vcHl0aG9uMi43L2JkYi4qICR7bGliZGlyfS9weXRob24yLjcvcGRiLiogIgorCitTVU1NQVJZXyR7UE59LWRldj0iUHl0aG9uIGRldmVsb3BtZW50IHBhY2thZ2UiCitSREVQRU5EU18ke1BOfS1kZXY9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kZXY9IiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyoubGEgJHtsaWJkaXJ9LyouYSAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtiYXNlX2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyoubyAke2RhdGFkaXJ9L2FjbG9jYWwgJHtkYXRhZGlyfS9wa2djb25maWcgIgorCitTVU1NQVJZXyR7UE59LWRpZmZsaWI9IlB5dGhvbiBoZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzIGJldHdlZW4gb2JqZWN0cyIKK1JERVBFTkRTXyR7UE59LWRpZmZsaWI9IiR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1kaWZmbGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2RpZmZsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGlzdHV0aWxzPSJQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb25maWcgJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXN0dXRpbHMgIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IlB5dGhvbiBkaXN0cmlidXRpb24gdXRpbGl0aWVzIChzdGF0aWMgbGlicmFyaWVzKSIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7UE59LWRpc3R1dGlscyIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7bGliZGlyfS9weXRob24yLjcvY29uZmlnL2xpYiouYSAiCisKK1NVTU1BUllfJHtQTn0tZG9jdGVzdD0iUHl0aG9uIGZyYW1ld29yayBmb3IgcnVubmluZyBleGFtcGxlcyBpbiBkb2NzdHJpbmdzIgorUkRFUEVORFNfJHtQTn0tZG9jdGVzdD0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LXJlICR7UE59LXVuaXR0ZXN0ICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIiCitGSUxFU18ke1BOfS1kb2N0ZXN0PSIke2xpYmRpcn0vcHl0aG9uMi43L2RvY3Rlc3QuKiAiCisKK1NVTU1BUllfJHtQTn0tZWxlbWVudHRyZWU9IlB5dGhvbiBlbGVtZW50cmVlIgorUkRFUEVORFNfJHtQTn0tZWxlbWVudHRyZWU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1lbGVtZW50dHJlZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fZWxlbWVudHRyZWUuc28gIgorCitTVU1NQVJZXyR7UE59LWVtYWlsPSJQeXRob24gZW1haWwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWVtYWlsPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IgorRklMRVNfJHtQTn0tZW1haWw9IiR7bGliZGlyfS9weXRob24yLjcvaW1hcGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZW1haWwgIgorCitTVU1NQVJZXyR7UE59LWZjbnRsPSJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1mY250bD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWZjbnRsPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2ZjbnRsLnNvICIKKworU1VNTUFSWV8ke1BOfS1nZGJtPSJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1nZGJtPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZ2RibT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9nZGJtLnNvICIKKworU1VNTUFSWV8ke1BOfS1ob3RzaG90PSJQeXRob24gaG90c2hvdCBwZXJmb3JtYW5jZSBwcm9maWxlciIKK1JERVBFTkRTXyR7UE59LWhvdHNob3Q9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1ob3RzaG90PSIke2xpYmRpcn0vcHl0aG9uMi43L2hvdHNob3QgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faG90c2hvdC5zbyAiCisKK1NVTU1BUllfJHtQTn0taHRtbD0iUHl0aG9uIEhUTUwgcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0taHRtbD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWh0bWw9IiR7bGliZGlyfS9weXRob24yLjcvZm9ybWF0dGVyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9odG1sZW50aXR5ZGVmcy4qICR7bGliZGlyfS9weXRob24yLjcvaHRtbGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvbWFya3VwYmFzZS4qICR7bGliZGlyfS9weXRob24yLjcvc2dtbGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvSFRNTFBhcnNlci4qICIKKworU1VNTUFSWV8ke1BOfS1pZGxlPSJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIKK1JERVBFTkRTXyR7UE59LWlkbGU9IiR7UE59LWNvcmUgJHtQTn0tdGtpbnRlciIKK0ZJTEVTXyR7UE59LWlkbGU9IiR7YmluZGlyfS9pZGxlICR7bGliZGlyfS9weXRob24yLjcvaWRsZWxpYiAiCisKK1NVTU1BUllfJHtQTn0taW1hZ2U9IlB5dGhvbiBncmFwaGljYWwgaW1hZ2UgaGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1pbWFnZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWltYWdlPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvbG9yc3lzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9pbWdoZHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2ltYWdlb3Auc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9yZ2JpbWcuc28gIgorCitTVU1NQVJZXyR7UE59LWltcG9ydGxpYj0iUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IgorUkRFUEVORFNfJHtQTn0taW1wb3J0bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1wb3J0bGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2ltcG9ydGxpYiAiCisKK1NVTU1BUllfJHtQTn0taW89IlB5dGhvbiBsb3ctbGV2ZWwgSS9PIgorUkRFUEVORFNfJHtQTn0taW89IiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS10ZXh0dXRpbHMgJHtQTn0tbmV0Y2xpZW50ICR7UE59LWNvbnRleHRsaWIiCitGSUxFU18ke1BOfS1pbz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc29ja2V0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2lvLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NzbC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3NlbGVjdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3Rlcm1pb3Muc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jU3RyaW5nSU8uc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9waXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvc29ja2V0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zc2wuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RlbXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9TdHJpbmdJTy4qICR7bGliZGlyfS9weXRob24yLjcvaW8uKiAke2xpYmRpcn0vcHl0aG9uMi43L19weWlvLiogIgorCitTVU1NQVJZXyR7UE59LWpzb249IlB5dGhvbiBKU09OIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1qc29uPSIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tanNvbj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9qc29uICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2pzb24uc28gIgorCitTVU1NQVJZXyR7UE59LWxhbmc9IlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxhbmc9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1sYW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19iaXNlY3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY29sbGVjdGlvbnMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faGVhcHEuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fd2Vha3JlZi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19mdW5jdG9vbHMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9hcnJheS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2l0ZXJ0b29scy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL29wZXJhdG9yLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcGFyc2VyLnNvICR7bGliZGlyfS9weXRob24yLjcvYXRleGl0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9iaXNlY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvZGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvZGVvcC4qICR7bGliZGlyfS9weXRob24yLjcvY29sbGVjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Rpcy4qICR7bGliZGlyfS9weXRob24yLjcvZnVuY3Rvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9oZWFwcS4qICR7bGliZGlyfS9weXRob24yLjcvaW5zcGVjdC4qICR7bGliZGlyfS9weXRob24yLjcva2V5d29yZC4qICR7bGliZGlyfS9weXRob24yLjcvb3Bjb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zeW1ib2wuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JlcHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3Rva2VuLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90b2tlbml6ZS4qICR7bGliZGlyfS9weXRob24yLjcvdHJhY2ViYWNrLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93ZWFrcmVmLiogIgorCitTVU1NQVJZXyR7UE59LWxvZ2dpbmc9IlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sb2dnaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LWxvZ2dpbmc9IiR7bGliZGlyfS9weXRob24yLjcvbG9nZ2luZyAiCisKK1NVTU1BUllfJHtQTn0tbWFpbGJveD0iUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYWlsYm94PSIke1BOfS1jb3JlICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1tYWlsYm94PSIke2xpYmRpcn0vcHl0aG9uMi43L21haWxib3guKiAiCisKK1NVTU1BUllfJHtQTn0tbWF0aD0iUHl0aG9uIG1hdGggc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1hdGg9IiR7UE59LWNvcmUgJHtQTn0tY3J5cHQiCitGSUxFU18ke1BOfS1tYXRoPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2NtYXRoLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvbWF0aC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19yYW5kb20uc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9yYW5kb20uKiAke2xpYmRpcn0vcHl0aG9uMi43L3NldHMuKiAiCisKK1NVTU1BUllfJHtQTn0tbWltZT0iUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIKK1JERVBFTkRTXyR7UE59LW1pbWU9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1taW1lPSIke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0b29scy4qICR7bGliZGlyfS9weXRob24yLjcvdXUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3F1b3ByaS4qICR7bGliZGlyfS9weXRob24yLjcvcmZjODIyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9NaW1lV3JpdGVyLiogIgorCitTVU1NQVJZXyR7UE59LW1tYXA9IlB5dGhvbiBtZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1tYXA9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1tbWFwPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL21tYXAuc28gIgorCitTVU1NQVJZXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iUHl0aG9uIG11bHRpcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1jdHlwZXMgJHtQTn0tbW1hcCIKK0ZJTEVTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbXVsdGlwcm9jZXNzaW5nLnNvICR7bGliZGlyfS9weXRob24yLjcvbXVsdGlwcm9jZXNzaW5nICIKKworU1VNTUFSWV8ke1BOfS1uZXRjbGllbnQ9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIgorUkRFUEVORFNfJHtQTn0tbmV0Y2xpZW50PSIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbmV0Y2xpZW50PSIke2xpYmRpcn0vcHl0aG9uMi43LypDb29raWUqLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9iYXNlNjQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Nvb2tpZWxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nb3BoZXJsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2htYWMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2h0dHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0eXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvbm50cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvcG9wbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zbXRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZWxuZXRsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3VybGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvdXJsbGliMi4qICR7bGliZGlyfS9weXRob24yLjcvdXJscGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3V1aWQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24yLjcvbWltZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LW5ldHNlcnZlcj0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiCitSREVQRU5EU18ke1BOfS1uZXRzZXJ2ZXI9IiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIKK0ZJTEVTXyR7UE59LW5ldHNlcnZlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jZ2kuKiAke2xpYmRpcn0vcHl0aG9uMi43LypIVFRQU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Tb2NrZXRTZXJ2ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbnVtYmVycz0iUHl0aG9uIG51bWJlciBBUElzIgorUkRFUEVORFNfJHtQTn0tbnVtYmVycz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tbnVtYmVycz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9kZWNpbWFsLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9mcmFjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L251bWJlcnMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGlja2xlPSJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGlja2xlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXBpY2tsZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9waWNrbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NoZWx2ZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY1BpY2tsZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3BpY2tsZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LXBrZ3V0aWw9IlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wa2d1dGlsPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcGtndXRpbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wa2d1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXBwcmludD0iUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHByaW50PSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tcHByaW50PSIke2xpYmRpcn0vcHl0aG9uMi43L3BwcmludC4qICIKKworU1VNTUFSWV8ke1BOfS1wcm9maWxlPSJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcm9maWxlPSIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LXByb2ZpbGU9IiR7bGliZGlyfS9weXRob24yLjcvcHJvZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvcHN0YXRzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jUHJvZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2xzcHJvZi5zbyAiCisKK1NVTU1BUllfJHtQTn0tcHlkb2M9IlB5dGhvbiBpbnRlcmFjdGl2ZSBoZWxwIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1weWRvYz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXN0cmluZ29sZCAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXB5ZG9jPSIke2JpbmRpcn0vcHlkb2MgJHtsaWJkaXJ9L3B5dGhvbjIuNy9weWRvYy4qICR7bGliZGlyfS9weXRob24yLjcvcHlkb2NfZGF0YSAiCisKK1NVTU1BUllfJHtQTn0tcmU9IlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIKK1JERVBFTkRTXyR7UE59LXJlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmU9IiR7bGliZGlyfS9weXRob24yLjcvcmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZS4qICR7bGliZGlyfS9weXRob24yLjcvc3JlX2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZV9jb25zdGFudHMqICR7bGliZGlyfS9weXRob24yLjcvc3JlX3BhcnNlLiogIgorCitTVU1NQVJZXyR7UE59LXJlYWRsaW5lPSJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXJlYWRsaW5lPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVhZGxpbmU9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcmVhZGxpbmUuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9ybGNvbXBsZXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1yZXNvdXJjZT0iUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tcmVzb3VyY2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXNvdXJjZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9yZXNvdXJjZS5zbyAiCisKK1NVTU1BUllfJHtQTn0tcm9ib3RwYXJzZXI9IlB5dGhvbiByb2JvdHMudHh0IHBhcnNlciIKK1JERVBFTkRTXyR7UE59LXJvYm90cGFyc2VyPSIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCIKK0ZJTEVTXyR7UE59LXJvYm90cGFyc2VyPSIke2xpYmRpcn0vcHl0aG9uMi43L3JvYm90cGFyc2VyLiogIgorCitTVU1NQVJZXyR7UE59LXNoZWxsPSJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IgorUkRFUEVORFNfJHtQTn0tc2hlbGw9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zaGVsbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jbWQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbW1hbmRzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXJjYWNoZS4qICR7bGliZGlyfS9weXRob24yLjcvZm5tYXRjaC4qICR7bGliZGlyfS9weXRob24yLjcvZ2xvYi4qICR7bGliZGlyfS9weXRob24yLjcvcG9wZW4yLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaGxleC4qICR7bGliZGlyfS9weXRob24yLjcvc2h1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXNtdHBkPSJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIKK1JERVBFTkRTXyR7UE59LXNtdHBkPSIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tc210cGQ9IiR7YmluZGlyfS9zbXRwZC4qICR7bGliZGlyfS9weXRob24yLjcvc210cGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTM9IiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmcgJHtQTn0temxpYiIKK0ZJTEVTXyR7UE59LXNxbGl0ZTM9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NxbGl0ZTMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcWxpdGUzL2RiYXBpMi4qICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9fX2luaXRfXy4qICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9kdW1wLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTMtdGVzdHM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiCitGSUxFU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tc3RyaW5nb2xkPSJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIgorUkRFUEVORFNfJHtQTn0tc3RyaW5nb2xkPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc3RyaW5nb2xkPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3N0cm9wLnNvICR7bGliZGlyfS9weXRob24yLjcvc3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdHJpbmdvbGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3VicHJvY2Vzcz0iUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXN1YnByb2Nlc3M9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIgorRklMRVNfJHtQTn0tc3VicHJvY2Vzcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdWJwcm9jZXNzLiogIgorCitTVU1NQVJZXyR7UE59LXN5c2xvZz0iUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1zeXNsb2c9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1zeXNsb2c9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvc3lzbG9nLnNvICIKKworU1VNTUFSWV8ke1BOfS10ZXJtaW5hbD0iUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXJtaW5hbD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LXRlcm1pbmFsPSIke2xpYmRpcn0vcHl0aG9uMi43L3B0eS4qICR7bGliZGlyfS9weXRob24yLjcvdHR5LiogIgorCitTVU1NQVJZXyR7UE59LXRlc3RzPSJQeXRob24gdGVzdHMiCitSREVQRU5EU18ke1BOfS10ZXN0cz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMi43L3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXRleHR1dGlscz0iUHl0aG9uIG9wdGlvbiBwYXJzaW5nLCB0ZXh0IHdyYXBwaW5nIGFuZCBDU1Ygc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRleHR1dGlscz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQiCitGSUxFU18ke1BOfS10ZXh0dXRpbHM9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2Nzdi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2Nzdi4qICR7bGliZGlyfS9weXRob24yLjcvb3B0cGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RleHR3cmFwLiogIgorCitTVU1NQVJZXyR7UE59LXRocmVhZGluZz0iUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGhyZWFkaW5nPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS10aHJlYWRpbmc9IiR7bGliZGlyfS9weXRob24yLjcvX3RocmVhZGluZ19sb2NhbC4qICR7bGliZGlyfS9weXRob24yLjcvZHVtbXlfdGhyZWFkLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kdW1teV90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L211dGV4LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L1F1ZXVlLiogIgorCitTVU1NQVJZXyR7UE59LXRraW50ZXI9IlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiCitSREVQRU5EU18ke1BOfS10a2ludGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGtpbnRlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fdGtpbnRlci5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi10ayAiCisKK1NVTU1BUllfJHtQTn0tdW5pdHRlc3Q9IlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIgorUkRFUEVORFNfJHtQTn0tdW5pdHRlc3Q9IiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiCitGSUxFU18ke1BOfS11bml0dGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy91bml0dGVzdC8gIgorCitTVU1NQVJZXyR7UE59LXVuaXhhZG1pbj0iUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXVuaXhhZG1pbj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXVuaXhhZG1pbj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9uaXMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9ncnAuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9wd2Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZXRwYXNzLiogIgorCitTVU1NQVJZXyR7UE59LXhtbD0iUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1sPSIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIgorRklMRVNfJHtQTn0teG1sPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3B5ZXhwYXQuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWwgJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWxsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0teG1scnBjPSJQeXRob24gWE1MLVJQQyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1scnBjPSIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LXhtbHJwYz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWxycGNsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L1NpbXBsZVhNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24yLjcvRG9jWE1MUlBDU2VydmVyLiogIgorCitTVU1NQVJZXyR7UE59LXpsaWI9IlB5dGhvbiB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS16bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0temxpYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC96bGliLnNvICIKKworU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGVzPSIke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWF1ZGlvICR7UE59LWJzZGRiICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXBpbGVyICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvbnRleHRsaWIgJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1ob3RzaG90ICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlc291cmNlICR7UE59LXJvYm90cGFyc2VyICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LXpsaWIgICIKK0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSIKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNC1tYW5pZmVzdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNC1tYW5pZmVzdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMTQ5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYwpAQCAtMCwwICsxLDI2OCBAQAorCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNC5weScgVmVyc2lvbiAyMDE0MDEzMSAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKworIAorCitQUk9WSURFUys9IiR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgIgorCitQQUNLQUdFUz0iJHtQTn0tZGJnICR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0tbW9kdWxlcyIKKworU1VNTUFSWV8ke1BOfS0ydG8zPSJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIgorUkRFUEVORFNfJHtQTn0tMnRvMz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LTJ0bzM9IiR7bGliZGlyfS9weXRob24zLjQvbGliMnRvMyAiCisKK1NVTU1BUllfJHtQTn0tYXN5bmNpbz0iUHl0aG9uIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzIgorUkRFUEVORFNfJHtQTn0tYXN5bmNpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWFzeW5jaW89IiR7bGliZGlyfS9weXRob24zLjQvYXN5bmNpbyAiCisKK1NVTU1BUllfJHtQTn0tYXVkaW89IlB5dGhvbiBBdWRpbyBIYW5kbGluZyIKK1JERVBFTkRTXyR7UE59LWF1ZGlvPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tYXVkaW89IiR7bGliZGlyfS9weXRob24zLjQvd2F2ZS4qICR7bGliZGlyfS9weXRob24zLjQvY2h1bmsuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NuZGhkci4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2F1ZGlvb3AuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2F1ZGlvZGV2LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdW5hdWRpby4qICR7bGliZGlyfS9weXRob24zLjQvc3VuYXUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RvYWlmZi4qICIKKworU1VNTUFSWV8ke1BOfS1jb2RlY3M9IlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvZGVjcz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tY29kZWNzPSIke2xpYmRpcn0vcHl0aG9uMy40L2NvZGVjcy4qICR7bGliZGlyfS9weXRob24zLjQvZW5jb2RpbmdzICR7bGliZGlyfS9weXRob24zLjQvZ2V0dGV4dC4qICR7bGliZGlyfS9weXRob24zLjQvbG9jYWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbG9jYWxlLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY29kZWNzKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvdW5pY29kZWRhdGEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3N0cmluZ3ByZXAuKiAke2xpYmRpcn0vcHl0aG9uMy40L3hkcmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb21waWxlPSJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlPSIke2xpYmRpcn0vcHl0aG9uMy40L3B5X2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbXBpbGVhbGwuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcHJlc3Npb249IlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21wcmVzc2lvbj0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1jb21wcmVzc2lvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9nemlwLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC96aXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90YXJmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9iejIuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY29yZT0iUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1jb3JlPSIke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXJlcHJsaWIgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LW1hdGgiCitGSUxFU18ke1BOfS1jb3JlPSIke2xpYmRpcn0vcHl0aG9uMy40L19fZnV0dXJlX18uKiAke2xpYmRpcn0vcHl0aG9uMy40L19hYmNvbGwuKiAke2xpYmRpcn0vcHl0aG9uMy40L2FiYy4qICR7bGliZGlyfS9weXRob24zLjQvY29weS4qICR7bGliZGlyfS9weXRob24zLjQvY29weXJlZy4qICR7bGliZGlyfS9weXRob24zLjQvQ29uZmlnUGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24zLjQvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L25ldy4qICR7bGliZGlyfS9weXRob24zLjQvb3MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24zLjQvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24zLjQvc2l0ZS4qICR7bGliZGlyfS9weXRob24zLjQvc3RhdC4qICR7bGliZGlyfS9weXRob24zLjQvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9iaW5hc2NpaS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3N0cnVjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvdGltZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQveHJlYWRsaW5lcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvdHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fd2Vha3JlZnNldC4qICR7bGliZGlyfS9weXRob24zLjQvc3lzY29uZmlnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fc3lzY29uZmlnZGF0YS4qICR7bGliZGlyfS9weXRob24zLjQvY29uZmlnL01ha2VmaWxlICR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZyouaCAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb2xsZWN0aW9ucyAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fY29sbGVjdGlvbnNfYWJjLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3NpdGVidWlsdGlucy4qICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIgorCitTVU1NQVJZXyR7UE59LWNyeXB0PSJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3J5cHQ9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jcnlwdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9oYXNobGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9tZDUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NoYS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY3J5cHQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19oYXNobGliLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc2hhMjU2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc2hhNTEyLiouc28gIgorCitTVU1NQVJZXyR7UE59LWN0eXBlcz0iUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN0eXBlcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jdHlwZXMgJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3R5cGVzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3R5cGVzX3Rlc3QuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY3Vyc2VzPSJQeXRob24gY3Vyc2VzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdXJzZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdXJzZXM9IiR7bGliZGlyfS9weXRob24zLjQvY3Vyc2VzICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N1cnNlcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYXRldGltZT0iUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1kYXRldGltZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1kYXRldGltZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9fc3RycHRpbWUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NhbGVuZGFyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9kYXRldGltZS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYj0iUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRiPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGI9IiR7bGliZGlyfS9weXRob24zLjQvYW55ZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kdW1iZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93aGljaGRiLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kYm0gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZGJtLiouc28gIgorCitTVU1NQVJZXyR7UE59LWRlYnVnZ2VyPSJQeXRob24gZGVidWdnZXIiCitSREVQRU5EU18ke1BOfS1kZWJ1Z2dlcj0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXN0cmluZ29sZCAke1BOfS1zaGVsbCAke1BOfS1wcHJpbnQiCitGSUxFU18ke1BOfS1kZWJ1Z2dlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9iZGIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BkYi4qICIKKworU1VNTUFSWV8ke1BOfS1kZXY9IlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIgorUkRFUEVORFNfJHtQTn0tZGV2PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGV2PSIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLmEgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7YmFzZV9saWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsICR7ZGF0YWRpcn0vcGtnY29uZmlnICIKKworU1VNTUFSWV8ke1BOfS1kaWZmbGliPSJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiCitSREVQRU5EU18ke1BOfS1kaWZmbGliPSIke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tZGlmZmxpYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaWZmbGliLiogIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscz0iUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kaXN0dXRpbHM9IiR7bGliZGlyfS9weXRob24zLjQvY29uZmlnICR7bGliZGlyfS9weXRob24zLjQvZGlzdHV0aWxzICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSJQeXRob24gZGlzdHJpYnV0aW9uIHV0aWxpdGllcyAoc3RhdGljIGxpYnJhcmllcykiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke1BOfS1kaXN0dXRpbHMiCitGSUxFU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke2xpYmRpcn0vcHl0aG9uMy40L2NvbmZpZy9saWIqLmEgIgorCitTVU1NQVJZXyR7UE59LWRvY3Rlc3Q9IlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIKK1JERVBFTkRTXyR7UE59LWRvY3Rlc3Q9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1yZSAke1BOfS11bml0dGVzdCAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliIgorRklMRVNfJHtQTn0tZG9jdGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kb2N0ZXN0LiogIgorCitTVU1NQVJZXyR7UE59LWVsZW1lbnR0cmVlPSJQeXRob24gZWxlbWVudHJlZSIKK1JERVBFTkRTXyR7UE59LWVsZW1lbnR0cmVlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZWxlbWVudHRyZWU9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLiouc28gIgorCitTVU1NQVJZXyR7UE59LWVtYWlsPSJQeXRob24gZW1haWwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWVtYWlsPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IgorRklMRVNfJHtQTn0tZW1haWw9IiR7bGliZGlyfS9weXRob24zLjQvaW1hcGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZW1haWwgIgorCitTVU1NQVJZXyR7UE59LWZjbnRsPSJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1mY250bD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWZjbnRsPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2ZjbnRsLiouc28gIgorCitTVU1NQVJZXyR7UE59LWdkYm09IlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWdkYm09IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1nZGJtPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19nZGJtLiouc28gIgorCitTVU1NQVJZXyR7UE59LWh0bWw9IlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWh0bWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1odG1sPSIke2xpYmRpcn0vcHl0aG9uMy40L2Zvcm1hdHRlci4qICR7bGliZGlyfS9weXRob24zLjQvaHRtbGVudGl0eWRlZnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0bWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21hcmt1cGJhc2UuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NnbWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L0hUTUxQYXJzZXIuKiAiCisKK1NVTU1BUllfJHtQTn0taWRsZT0iUHl0aG9uIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiCitSREVQRU5EU18ke1BOfS1pZGxlPSIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiCitGSUxFU18ke1BOfS1pZGxlPSIke2JpbmRpcn0vaWRsZSAke2xpYmRpcn0vcHl0aG9uMy40L2lkbGVsaWIgIgorCitTVU1NQVJZXyR7UE59LWltYWdlPSJQeXRob24gZ3JhcGhpY2FsIGltYWdlIGhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0taW1hZ2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbWFnZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2xvcnN5cy4qICR7bGliZGlyfS9weXRob24zLjQvaW1naGRyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9pbWFnZW9wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9yZ2JpbWcuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0taW1wb3J0bGliPSJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1pbXBvcnRsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbXBvcnRsaWI9IiR7bGliZGlyfS9weXRob24zLjQvaW1wb3J0bGliICIKKworU1VNTUFSWV8ke1BOfS1pbz0iUHl0aG9uIGxvdy1sZXZlbCBJL08iCitSREVQRU5EU18ke1BOfS1pbz0iJHtQTn0tY29yZSAke1BOfS1tYXRoIgorRklMRVNfJHtQTn0taW89IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NvY2tldC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2lvLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc3NsLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zZWxlY3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3Rlcm1pb3MuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NTdHJpbmdJTy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcGlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NvY2tldC4qICR7bGliZGlyfS9weXRob24zLjQvc3NsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZW1wZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvU3RyaW5nSU8uKiAke2xpYmRpcn0vcHl0aG9uMy40L2lvLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fcHlpby4qICIKKworU1VNTUFSWV8ke1BOfS1qc29uPSJQeXRob24gSlNPTiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tanNvbj0iJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXJlIgorRklMRVNfJHtQTn0tanNvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9qc29uICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2pzb24uKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbGFuZz0iUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbGFuZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWxhbmc9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9faGVhcHEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL193ZWFrcmVmLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZnVuY3Rvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9hcnJheS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvaXRlcnRvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9vcGVyYXRvci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcGFyc2VyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9hdGV4aXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Jpc2VjdC4qICR7bGliZGlyfS9weXRob24zLjQvY29kZS4qICR7bGliZGlyfS9weXRob24zLjQvY29kZW9wLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2xsZWN0aW9ucy4qICR7bGliZGlyfS9weXRob24zLjQvX2NvbGxlY3Rpb25zX2FiYy4qICR7bGliZGlyfS9weXRob24zLjQvZGlzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mdW5jdG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2hlYXBxLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9pbnNwZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9rZXl3b3JkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9vcGNvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N5bWJvbC4qICR7bGliZGlyfS9weXRob24zLjQvcmVwci4qICR7bGliZGlyfS9weXRob24zLjQvdG9rZW4uKiAke2xpYmRpcn0vcHl0aG9uMy40L3Rva2VuaXplLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90cmFjZWJhY2suKiAke2xpYmRpcn0vcHl0aG9uMy40L3dlYWtyZWYuKiAiCisKK1NVTU1BUllfJHtQTn0tbG9nZ2luZz0iUHl0aG9uIGxvZ2dpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxvZ2dpbmc9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tbG9nZ2luZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9sb2dnaW5nICIKKworU1VNTUFSWV8ke1BOfS1tYWlsYm94PSJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1haWxib3g9IiR7UE59LWNvcmUgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW1haWxib3g9IiR7bGliZGlyfS9weXRob24zLjQvbWFpbGJveC4qICIKKworU1VNTUFSWV8ke1BOfS1tYXRoPSJQeXRob24gbWF0aCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbWF0aD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LW1hdGg9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19yYW5kb20uKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3JhbmRvbS4qICR7bGliZGlyfS9weXRob24zLjQvc2V0cy4qICIKKworU1VNTUFSWV8ke1BOfS1taW1lPSJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIgorUkRFUEVORFNfJHtQTn0tbWltZT0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1pbWU9IiR7bGliZGlyfS9weXRob24zLjQvbWltZXRvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC91dS4qICR7bGliZGlyfS9weXRob24zLjQvcXVvcHJpLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMy40L01pbWVXcml0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbW1hcD0iUHl0aG9uIG1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbW1hcD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1tYXA9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvbW1hcC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiCitGSUxFU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX211bHRpcHJvY2Vzc2luZy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbXVsdGlwcm9jZXNzaW5nICIKKworU1VNTUFSWV8ke1BOfS1uZXRjbGllbnQ9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIgorUkRFUEVORFNfJHtQTn0tbmV0Y2xpZW50PSIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbmV0Y2xpZW50PSIke2xpYmRpcn0vcHl0aG9uMy40LypDb29raWUqLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9iYXNlNjQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Nvb2tpZWxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nb3BoZXJsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2htYWMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0dHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21pbWV0eXBlcy4qICR7bGliZGlyfS9weXRob24zLjQvbm50cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvcG9wbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zbXRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZWxuZXRsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3VybGxpYiAke2xpYmRpcn0vcHl0aG9uMy40L3V1aWQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24zLjQvbWltZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LW5ldHNlcnZlcj0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiCitSREVQRU5EU18ke1BOfS1uZXRzZXJ2ZXI9IiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIKK0ZJTEVTXyR7UE59LW5ldHNlcnZlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jZ2kuKiAke2xpYmRpcn0vcHl0aG9uMy40LypIVFRQU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Tb2NrZXRTZXJ2ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbnVtYmVycz0iUHl0aG9uIG51bWJlciBBUElzIgorUkRFUEVORFNfJHtQTn0tbnVtYmVycz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tbnVtYmVycz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kZWNpbWFsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mcmFjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L251bWJlcnMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGlja2xlPSJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGlja2xlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXBpY2tsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9waWNrbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NoZWx2ZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY1BpY2tsZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcGlja2xldG9vbHMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGtndXRpbD0iUHl0aG9uIHBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHkgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBrZ3V0aWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1wa2d1dGlsPSIke2xpYmRpcn0vcHl0aG9uMy40L3BrZ3V0aWwuKiAiCisKK1NVTU1BUllfJHtQTn0tcHByaW50PSJQeXRob24gcHJldHR5LXByaW50IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcHJpbnQ9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1wcHJpbnQ9IiR7bGliZGlyfS9weXRob24zLjQvcHByaW50LiogIgorCitTVU1NQVJZXyR7UE59LXByb2ZpbGU9IlB5dGhvbiBiYXNpYyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXByb2ZpbGU9IiR7UE59LWNvcmUgJHtQTn0tdGV4dHV0aWxzIgorRklMRVNfJHtQTn0tcHJvZmlsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wc3RhdHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NQcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbHNwcm9mLiouc28gIgorCitTVU1NQVJZXyR7UE59LXB5ZG9jPSJQeXRob24gaW50ZXJhY3RpdmUgaGVscCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHlkb2M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1weWRvYz0iJHtiaW5kaXJ9L3B5ZG9jICR7bGliZGlyfS9weXRob24zLjQvcHlkb2MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3B5ZG9jX2RhdGEgIgorCitTVU1NQVJZXyR7UE59LXJlPSJQeXRob24gUmVndWxhciBFeHByZXNzaW9uIEFQSXMiCitSREVQRU5EU18ke1BOfS1yZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlPSIke2xpYmRpcn0vcHl0aG9uMy40L3JlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmVfY29uc3RhbnRzKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZV9wYXJzZS4qICIKKworU1VNTUFSWV8ke1BOfS1yZWFkbGluZT0iUHl0aG9uIHJlYWRsaW5lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1yZWFkbGluZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlYWRsaW5lPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3JlYWRsaW5lLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9ybGNvbXBsZXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1yZXBybGliPSJQeXRob24gYWx0ZXJuYXRlIHJlcHIoKSBpbXBsZW1lbnRhdGlvbiIKK1JERVBFTkRTXyR7UE59LXJlcHJsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXBybGliPSIke2xpYmRpcn0vcHl0aG9uMy40L3JlcHJsaWIucHkgIgorCitTVU1NQVJZXyR7UE59LXJlc291cmNlPSJQeXRob24gcmVzb3VyY2UgY29udHJvbCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1yZXNvdXJjZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlc291cmNlPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3Jlc291cmNlLiouc28gIgorCitTVU1NQVJZXyR7UE59LXNoZWxsPSJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IgorUkRFUEVORFNfJHtQTn0tc2hlbGw9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zaGVsbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jbWQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbW1hbmRzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaXJjYWNoZS4qICR7bGliZGlyfS9weXRob24zLjQvZm5tYXRjaC4qICR7bGliZGlyfS9weXRob24zLjQvZ2xvYi4qICR7bGliZGlyfS9weXRob24zLjQvcG9wZW4yLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaGxleC4qICR7bGliZGlyfS9weXRob24zLjQvc2h1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXNtdHBkPSJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIKK1JERVBFTkRTXyR7UE59LXNtdHBkPSIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tc210cGQ9IiR7YmluZGlyfS9zbXRwZC4qICR7bGliZGlyfS9weXRob24zLjQvc210cGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTM9IiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmciCitGSUxFU18ke1BOfS1zcWxpdGUzPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zcWxpdGUzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcWxpdGUzL2RiYXBpMi4qICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9fX2luaXRfXy4qICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9kdW1wLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTMtdGVzdHM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiCitGSUxFU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tc3RyaW5nb2xkPSJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIgorUkRFUEVORFNfJHtQTn0tc3RyaW5nb2xkPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc3RyaW5nb2xkPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3N0cm9wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N0cmluZ29sZC4qICIKKworU1VNTUFSWV8ke1BOfS1zdWJwcm9jZXNzPSJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tc3VicHJvY2Vzcz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUiCitGSUxFU18ke1BOfS1zdWJwcm9jZXNzPSIke2xpYmRpcn0vcHl0aG9uMy40L3N1YnByb2Nlc3MuKiAiCisKK1NVTU1BUllfJHtQTn0tc3lzbG9nPSJQeXRob24gc3lzbG9nIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LXN5c2xvZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXN5c2xvZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zeXNsb2cuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tdGVybWluYWw9IlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGVybWluYWw9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS10ZXJtaW5hbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wdHkuKiAke2xpYmRpcn0vcHl0aG9uMy40L3R0eS4qICIKKworU1VNTUFSWV8ke1BOfS10ZXN0cz0iUHl0aG9uIHRlc3RzIgorUkRFUEVORFNfJHtQTn0tdGVzdHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZXN0ICIKKworU1VNTUFSWV8ke1BOfS10ZXh0dXRpbHM9IlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXh0dXRpbHM9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tdGV4dHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jc3YuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2Nzdi4qICR7bGliZGlyfS9weXRob24zLjQvb3B0cGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RleHR3cmFwLiogIgorCitTVU1NQVJZXyR7UE59LXRocmVhZGluZz0iUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGhyZWFkaW5nPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS10aHJlYWRpbmc9IiR7bGliZGlyfS9weXRob24zLjQvX3RocmVhZGluZ19sb2NhbC4qICR7bGliZGlyfS9weXRob24zLjQvZHVtbXlfdGhyZWFkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kdW1teV90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L211dGV4LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L1F1ZXVlLiogIgorCitTVU1NQVJZXyR7UE59LXRraW50ZXI9IlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiCitSREVQRU5EU18ke1BOfS10a2ludGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGtpbnRlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fdGtpbnRlci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLXRrICR7bGliZGlyfS9weXRob24zLjQvdGtpbnRlciAiCisKK1NVTU1BUllfJHtQTn0tdW5pdHRlc3Q9IlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIgorUkRFUEVORFNfJHtQTn0tdW5pdHRlc3Q9IiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiCitGSUxFU18ke1BOfS11bml0dGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC91bml0dGVzdC8gIgorCitTVU1NQVJZXyR7UE59LXVuaXhhZG1pbj0iUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXVuaXhhZG1pbj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXVuaXhhZG1pbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9uaXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2dycC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcHdkLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZXRwYXNzLiogIgorCitTVU1NQVJZXyR7UE59LXhtbD0iUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1sPSIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIgorRklMRVNfJHtQTn0teG1sPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3B5ZXhwYXQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3htbCAke2xpYmRpcn0vcHl0aG9uMy40L3htbGxpYi4qICIKKworU1VNTUFSWV8ke1BOfS14bWxycGM9IlB5dGhvbiBYTUwtUlBDIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS14bWxycGM9IiR7UE59LWNvcmUgJHtQTn0teG1sICR7UE59LW5ldHNlcnZlciAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0teG1scnBjPSIke2xpYmRpcn0vcHl0aG9uMy40L3htbHJwY2xpYi4qICR7bGliZGlyfS9weXRob24zLjQvU2ltcGxlWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Eb2NYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3htbHJwYyAiCisKK1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAgIgorQUxMT1dfRU1QVFlfJHtQTn0tbW9kdWxlcyA9ICIxIgorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDBiMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGZyYW1ld29yayB0byBwcm9jZXNzIGludGVyZGVwZW5kZW50IHRhc2tzIGluIGEgcG9vbCBvZiB3b3JrZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvYXN5bmMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUEtHLUlORk87YmVnaW5saW5lPTg7ZW5kbGluZT04O21kNT04OGRmOGU3OGI5ZWRmZDc0NDk1Mzg2MjE3OWYyZDE0ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9hL2FzeW5jL2FzeW5jLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YjA2YjU5OTdkZTIxNTRmM2JjMDI3M2Y4MGJjZWY2YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzY4OTRkODc2ZTQ1ODc4ZmFhZTQ5M2IwY2Y2MWQwZTI4ZWM0MTczMzQ0NDhhYzBhNmVhMjIyOWQ4MzQzMDUxIgorCitTID0gIiR7V09SS0RJUn0vYXN5bmMtJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tdGhyZWFkaW5nIHB5dGhvbi1sYW5nIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzE0ZGNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgREJ1cyBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gc3lzdGVtIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9Tb2Z0d2FyZS9kYnVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wYjgzMDQ3Y2U5ZTk0OGI2N2MwZmFjYzVmMjMzNDc2YSIKK0RFUEVORFMgPSAiZXhwYXQgZGJ1cyBkYnVzLWdsaWIgdmlydHVhbC9saWJpbnRsIHB5dGhvbi1weXJleC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMtcHl0aG9uL2RidXMtcHl0aG9uLSR7UFZ9LnRhci5neiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDljZDJkMWEwNTdjYzQzMmNlOTQ0ZGUzZmMwNmJmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMTJjNmM4YjJiZjNhOTMwMmY3NTE2Njk1MmNiZTQxZDZiMzhjMzQ0MWJiYzY3NjdkYmQ0OTg5NDIzMTZjNmRmIgorUyA9ICIke1dPUktESVJ9L2RidXMtcHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscy1iYXNlIGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/PSAiIgorUEFDS0FHRUNPTkZJR1tkb2NzXSA9ICItLWVuYWJsZS1odG1sLWRvY3MsLS1kaXNhYmxlLWh0bWwtZG9jcyxweXRob24tZG9jdXRpbHMtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1thcGktZG9jc10gPSAiLS1lbmFibGUtYXBpLWRvY3MsLS1kaXNhYmxlLWFwaS1kb2NzLHB5dGhvbi1kb2N1dGlscy1uYXRpdmUgcHl0aG9uLWVweWRvYy1uYXRpdmUiCisKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorCitSREVQRU5EU18ke1BOfSA9ICJweXRob24taW8gcHl0aG9uLWxvZ2dpbmcgcHl0aG9uLXN0cmluZ29sZCBweXRob24tdGhyZWFkaW5nIHB5dGhvbi14bWwiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2RhODhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiVGV4dCBwcm9jZXNzaW5nIHN5c3RlbSBmb3IgZG9jdW1lbnRhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGICYgQlNELTItQ2xhdXNlICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9YTcyMmZiZGMyMDM0N2RiN2I2OTIyMzU5NGRkNTQ1NzQiCisKK0RFUEVORFMgPSAicHl0aG9uIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2N1dGlscy9kb2N1dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNDYyMjI2M2I2MmM1Yzc3MWMwMzUwMmFmYTMxNTc3NjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzdkYjcxNzgxMGFiNjk2NWY2NmM4Y2YwMzk4YTk4YzlkOGRmOTgyZGEzOWI0Y2Q3ZjE2MjkxMWViODk1OTZmYSIKKworUyA9ICIke1dPUktESVJ9L2RvY3V0aWxzLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMS4wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzhkN2M4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMS4wLjEuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJQeXRob24gbGlicmFyeSB1c2VkIHRvIGludGVyYWN0IHdpdGggR2l0IHJlcG9zaXRvcmllcyIKK0RFU0NSSVBUSU9OID0gIkdpdFB5dGhvbiBwcm92aWRlcyBvYmplY3QgbW9kZWwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIFwKK2EgZ2l0IHJlcG9zaXRvcnkuIEFjY2VzcyByZXBvc2l0b3J5IGluZm9ybWF0aW9uIGNvbnZlbmllbnRseSwgYWx0ZXIgdGhlIFwKK2luZGV4IGRpcmVjdGx5LCBoYW5kbGUgcmVtb3Rlcywgb3IgZ28gZG93biB0byBsb3ctbGV2ZWwgb2JqZWN0IGRhdGFiYXNlIFwKK2FjY2VzcyB3aXRoIGJpZy1maWxlcyBzdXBwb3J0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04YjhkMjZjMzdjMWQ1YTA0ZjliMDE4NmVkYmViYzE4MyIKK0RFUEVORFMgPSAicHl0aG9uLWdpdGRiIgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL0cvR2l0UHl0aG9uL0dpdFB5dGhvbi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjU5NjQ0YjQyYzQxZTVlNTE3MGMwY2Q4M2VkNjQyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Yzg4YzE3YmJjYWUyYTQ0NWZmNjQwMjRlZjEzNTI2MjI0ZjcwZTM1ZTM4YzMzNDE2YmU1Y2ViNTZjYTdmNzYwIgorCitTID0gIiR7V09SS0RJUn0vR2l0UHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1naXRkYiBweXRob24tbGFuZyBweXRob24taW8gcHl0aG9uLXNoZWxsIHB5dGhvbi1tYXRoIHB5dGhvbi1yZSBweXRob24tc3VicHJvY2VzcyBweXRob24tc3RyaW5nb2xkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDgzYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQSBwdXJlLVB5dGhvbiBnaXQgb2JqZWN0IGRhdGFiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvZ2l0ZGIiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTllNWVjYjEzMzM5YTkzNmVlZGY4MzI4MmVhZjQ1MjgiCitERVBFTkRTID0gInB5dGhvbi1hc3luYyBweXRob24tc21tYXAiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL2cvZ2l0ZGIvZ2l0ZGItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDRlNDM2NmI4YmRmZDMwNmIwNzVjM2E1MmM5NmFlMWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTNlYmJjMjdiZTAzNWEyZTg3NGVkOTA0ZGY1MTZlMzVmNGEyOWE3NzhhNzY0Mzg1ZGUwOWRlOWUwZjEzOTY1OCIKKworUyA9ICIke1dPUktESVJ9L2dpdGRiLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNtbWFwIHB5dGhvbi1hc3luYyBweXRob24tbW1hcCBweXRob24tbGFuZyBweXRob24temxpYiBweXRob24taW8gcHl0aG9uLXNoZWxsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NzUzMDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gMDdkNGYwOTVhOWUyMmFlNjc2YThkNjgwNzMxMDExMzFlNjUwMTJkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUdWUsIDE1IE5vdiAyMDExIDEzOjE2OjU0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHB5dGhvbiBpbWFnaW5nIHNldHVwLnB5OiBmb3JjZSBwYXRocyBmb3IgemxpYiwgZnJlZXR5cGUgYW5kIGpwZWcgYW5kIGRvbid0IGFkZCBob3N0IHBhdGhzCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBzZXR1cC5weSB8ICAgMTQgKysrLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA1ZDRkNTNhLi5iMWEyMmVjIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMzQsMTAgKzM0LDEwIEBAIGRlZiBsaWJpbmNsdWRlKHJvb3QpOgorICMgVElGRl9ST09UID0gbGliaW5jbHVkZSgiL29wdC90aWZmIikKKyAKKyBUQ0xfUk9PVCA9IE5vbmUKKy1KUEVHX1JPT1QgPSBOb25lCistWkxJQl9ST09UID0gTm9uZQorK0pQRUdfUk9PVCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10KKytaTElCX1JPT1QgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddCisgVElGRl9ST09UID0gTm9uZQorLUZSRUVUWVBFX1JPT1QgPSBOb25lCisrRlJFRVRZUEVfUk9PVCA9ICBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddCisgTENNU19ST09UID0gTm9uZQorIAorICMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKK0BAIC0xNDcsNyArMTQ3LDYgQEAgY2xhc3MgcGlsX2J1aWxkX2V4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL29wdC9sb2NhbC9saWIiKQorICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL29wdC9sb2NhbC9pbmNsdWRlIikKKyAKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9sb2NhbC9saWIiKQorICAgICAgICAgIyBGSVhNRTogY2hlY2sgL29wdC9zdHVmZiBkaXJlY3RvcmllcyBoZXJlPworIAorICAgICAgICAgcHJlZml4ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJwcmVmaXgiKQorQEAgLTIwNywxMyArMjA2LDYgQEAgY2xhc3MgcGlsX2J1aWxkX2V4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih0Y2xfZGlyLCAidGsuaCIpKToKKyAgICAgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsIHRjbF9kaXIpCisgCistICAgICAgICAjIHN0YW5kYXJkIGxvY2F0aW9ucworLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xvY2FsL2xpYiIpCistICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi91c3IvbG9jYWwvaW5jbHVkZSIpCistCistICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbGliIikKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL3Vzci9pbmNsdWRlIikKKy0KKyAgICAgICAgICMKKyAgICAgICAgICMgaW5zZXJ0IG5ldyBkaXJzICpiZWZvcmUqIGRlZmF1bHQgbGlicywgdG8gYXZvaWQgY29uZmxpY3RzCisgICAgICAgICAjIGJldHdlZW4gUHl0aG9uIFBZRCBzdHViIGxpYnMgYW5kIHJlYWwgbGlicmFyaWVzCistLSAKKzEuNy4yLjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MGVkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorQXQgbGVhc3QgbGNtcyB3YXNuJ3QgZGV0ZXJtaW5pc3RpY2x5IGRldGVjdGVkIGZyb20gc3lzcm9vdC4KKworVGhpcyB3aWxsIGFsbG93IHRvIGV4cG9ydCBMQ01TX0VOQUJMRUQ9RmFsc2Ugd2hlbiBsY21zIGlzbid0IGluIFBBQ0tBR0VDT05GSUcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitkaWZmIC11TnIgSW1hZ2luZy0xLjEuNy5vcmlnL3NldHVwLnB5IEltYWdpbmctMS4xLjcvc2V0dXAucHkKKy0tLSBJbWFnaW5nLTEuMS43Lm9yaWcvc2V0dXAucHkJMjAxMy0wNy0yMiAxMDoxNzowMi4wODE0NTcwNzUgKzAyMDAKKysrKyBJbWFnaW5nLTEuMS43L3NldHVwLnB5CTIwMTMtMDctMjIgMTM6MTA6MDkuMDI5NzA3NDkyICswMjAwCitAQCAtMzksNiArMzksMTIgQEAKKyBUSUZGX1JPT1QgPSBOb25lCisgRlJFRVRZUEVfUk9PVCA9ICBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddCisgTENNU19ST09UID0gTm9uZQorK1RDTF9FTkFCTEVEID0gb3MuZ2V0ZW52KCdUQ0xfRU5BQkxFRCcsICJUcnVlIikKKytKUEVHX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0pQRUdfRU5BQkxFRCcsICJUcnVlIikKKytaTElCX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1pMSUJfRU5BQkxFRCcsICJUcnVlIikKKytUSUZGX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1RJRkZfRU5BQkxFRCcsICJUcnVlIikKKytGUkVFVFlQRV9FTkFCTEVEID0gb3MuZ2V0ZW52KCdGUkVFVFlQRV9FTkFCTEVEJywgIlRydWUiKQorK0xDTVNfRU5BQkxFRCA9IG9zLmdldGVudignTENNU19FTkFCTEVEJywgIlRydWUiKQorIAorICMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKKyAKK0BAIC0yMjAsMjIgKzIyNiwyMiBAQAorICAgICAgICAgICAgIHpsaWIgPSBqcGVnID0gdGlmZiA9IGZyZWV0eXBlID0gdGNsID0gdGsgPSBsY21zID0gTm9uZQorICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmUoKQorIAorLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgorKyAgICAgICAgaWYgWkxJQl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6Iik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6IgorICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6bGliIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6bGliIiAjIGFsdGVybmF0aXZlIG5hbWUKKyAKKy0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKKysgICAgICAgIGlmIEpQRUdfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAianBlZyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAianBlZyIKKyAgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAibGlianBlZyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAibGlianBlZyIgIyBhbHRlcm5hdGl2ZSBuYW1lCisgCistICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGlmZiIpOgorKyAgICAgICAgaWYgVElGRl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRpZmYiKToKKyAgICAgICAgICAgICBmZWF0dXJlLnRpZmYgPSAidGlmZiIKKyAKKy0gICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgorKyAgICAgICAgaWYgRlJFRVRZUEVfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgorICAgICAgICAgICAgICMgbG9vayBmb3IgZnJlZXR5cGUyIGluY2x1ZGUgZmlsZXMKKyAgICAgICAgICAgICBmcmVldHlwZV92ZXJzaW9uID0gMAorICAgICAgICAgICAgIGZvciBkaXIgaW4gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnM6CitAQCAtMjU2LDExICsyNjIsMTEgQEAKKyAgICAgICAgICAgICAgICAgaWYgZGlyOgorICAgICAgICAgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgZGlyLCAwKQorIAorLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgorKyAgICAgICAgaWYgTENNU19FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJsY21zIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUubGNtcyA9ICJsY21zIgorIAorLSAgICAgICAgaWYgX3RraW50ZXIgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ0ay5oIik6CisrICAgICAgICBpZiBUQ0xfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIF90a2ludGVyIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAidGsuaCIpOgorICAgICAgICAgICAgICMgdGhlIGxpYnJhcnkgbmFtZXMgbWF5IHZhcnkgc29tZXdoYXQgKGUuZy4gdGNsODQgb3IgdGNsOC40KQorICAgICAgICAgICAgIHZlcnNpb24gPSBUQ0xfVkVSU0lPTlswXSArIFRDTF9WRVJTSU9OWzJdCisgICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRjbCIgKyB2ZXJzaW9uKToKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2M2M2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gYzYwNDBmNjE4ZDhmMjcwNmE3YjQ2ZDFjZGYzN2QxYTU4N2Y5NzAxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJldyBTdHJvbW5vdiA8c3Ryb21ub3ZAZ21haWwuY29tPgorRGF0ZTogVGh1LCAyOCBOb3YgMjAxMyAxNjo1ODo0MyArMDQwMAorU3ViamVjdDogW1BBVENIXSBmaXggY29tcGlsaW5nIHdpdGggRnJlZVR5cGUgMi41LjEKKworLS0tCisgX2ltYWdpbmdmdC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvX2ltYWdpbmdmdC5jIGIvX2ltYWdpbmdmdC5jCitpbmRleCA0N2Q1MGJkLi5mMTk1NTViIDEwMDY0NAorLS0tIGEvX2ltYWdpbmdmdC5jCisrKysgYi9faW1hZ2luZ2Z0LmMKK0BAIC01OSw3ICs1OSwxMSBAQCBzdHJ1Y3QgeworICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOworIH0gZnRfZXJyb3JzW10gPQorIAorKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRV8yXzEpCisrI2luY2x1ZGUgRlRfRVJST1JTX0gKKysjZWxzZQorICNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgorKyNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogZm9udCBvYmplY3RzICovCistLSAKKzEuOC41LjEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZ18xLjEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZ18xLjEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjc4MzI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIEltYWdpbmcgTGlicmFyeSAoUElMKSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTkyO2VuZGxpbmU9MTIwO21kNT1jNDM3MWFmNDU3OWYxZTQ4OWNmODgxYzE0NDNkZDRlYyIKK0RFUEVORFMgPSAiZnJlZXR5cGUganBlZyB0aWZmIgorU1JDTkFNRSA9ICJJbWFnaW5nIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2VmZmJvdC5vcmcvZG93bmxvYWRzL0ltYWdpbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmMxNGE1NGUxY2UwMmEwMjI1YmU4ODU0YmZiYTQ3OGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk1YmM3YzI0OThjOGUxZjliOTk5MzhmMWE0MGRjODZiM2YxNDk3NDFmMTA1Y2Y3YzdiZDJlMDcyNTQwNTIxMSIKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCisjIFRoZXJlIGlzbid0IGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwgYW5kIGxjbXMgaXMgaW4gbWV0YS1vZSwgYXQgbGVhc3QgbWFrZSBpdCBleHBsaWNpdCB3aGVuIGVuYWJsZWQKKyMgc2V0dXAucHkgYWxyZWFkeSBoYXMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xjbXNdID0gIiwsbGNtcyIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworZG9fY29tcGlsZSgpIHsKKyAgICBleHBvcnQgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0KKyAgICBleHBvcnQgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0KKyAgICBleHBvcnQgTENNU19FTkFCTEVEPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2xjbXMnLCAnVHJ1ZScsICdGYWxzZScsIGQpfQorICAgIGRpc3R1dGlsc19kb19jb21waWxlCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9CisgICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9CisgICAgZXhwb3J0IExDTVNfRU5BQkxFRD0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdsY21zJywgJ1RydWUnLCAnRmFsc2UnLCBkKX0KKyAgICBkaXN0dXRpbHNfZG9faW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS9odG1sLworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L1JFQURNRSAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59LworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L0RvY3MvKiAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59L2h0bWwvCisKKyAgICAjIGdldCByaWQgb2YgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24KKyAgICBzZWQgLWkgLWUgJ3M6L3Vzci9sb2NhbC9iaW4vOiR7YmluZGlyfS9lbnYgOmcnICR7RH0ke2JpbmRpcn0vKgorfQorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWxhbmcgcHl0aG9uLXN0cmluZ29sZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQyYjBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiVGVtcGxhdGluZyBsaWJyYXJ5IGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGViM2ZmOGU0YzE3YWFmN2I4MDg4OWI2YjJiZjRjODMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL00vTWFrby9NYWtvLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjlmMGFhZmQxNzdiMDM5ZWY2N2I5MGVhMzUwNDk3YTU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1ZjA4NjlmZWJlYTU5ZGFiN2VmZDI1NmZiNDUxYzM3N2NiYjc5NDdiZWYzODZmZjBiYjQ0NjI3YzMxYThkMWMiCisKK1MgPSAiJHtXT1JLRElSfS9NYWtvLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXRocmVhZGluZyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1odG1sIFwKKyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOTI0N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIFNvbWUgdmVyc2lvbnMgb2YgU1dJRyBkbyBub3QgdXNlIHRoZSBleHRlbnNpb24gcGFyYW1ldGVyLgorIyBNYWtlIGl0IG9wdGlvbmFsLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KK0luZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorQEAgLTU2Niw3ICs1NjYsNyBAQCBjbGFzcyBidWlsZF9leHQgKENvbW1hbmQpOgorICAgICAgICAgICAgIHRhcmdldF9sYW5nPWxhbmd1YWdlKQorIAorIAorLSAgICBkZWYgc3dpZ19zb3VyY2VzIChzZWxmLCBzb3VyY2VzLCBleHRlbnNpb24pOgorKyAgICBkZWYgc3dpZ19zb3VyY2VzIChzZWxmLCBzb3VyY2VzLCBleHRlbnNpb249Tm9uZSk6CisgCisgICAgICAgICAiIiJXYWxrIHRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyBpbiAnc291cmNlcycsIGxvb2tpbmcgZm9yIFNXSUcKKyAgICAgICAgIGludGVyZmFjZSAoLmkpIGZpbGVzLiAgUnVuIFNXSUcgb24gYWxsIHRoYXQgYXJlIGZvdW5kLCBhbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyNDY5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIERvbid0IG1vZGlmeSB0aGUgc2hlLWJhbmcgbGluZSBmb3IgYSBjcm9zcy1idWlsZC4KKyMgT3RoZXJ3aXNlIGl0IHBvaW50cyB0byBvdXIgaG9zdHB5dGhvbiAod2hpY2ggd2UgZG8gbm90IHdhbnQpCisjCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorCitJbmRleDogUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNi4xLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKK0BAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIGJ1aWxkX3NjcmlwdHMgKENvbW1hbmQpOgorICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlLm1hdGNoKGZpcnN0X2xpbmUpCistICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorKyAgICAgICAgICAgICAgICBpZiBGYWxzZTogI21hdGNoOgorICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ID0gMQorICAgICAgICAgICAgICAgICAgICAgcG9zdF9pbnRlcnAgPSBtYXRjaC5ncm91cCgxKSBvciAnJworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OWFhZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyBUaGUgcHJvcGVyIHByZWZpeCBpcyBpbnNpZGUgb3VyIHN0YWdpbmcgYXJlYS4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisjIFNpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisKKy0tLSBQeXRob24tMi42LjYvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkub3JpZwkyMDEyLTAxLTAzIDE0OjAyOjAzLjAyNzAwNTI5NiArMDAwMAorKysrIFB5dGhvbi0yLjYuNi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQkyMDEyLTAxLTAzIDE0OjAyOjMxLjUxNzYwMTA4MSArMDAwMAorQEAgLTE5LDggKzE5LDggQEAKKyBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKKyAKKyAjIFRoZXNlIGFyZSBuZWVkZWQgaW4gYSBjb3VwbGUgb2Ygc3BvdHMsIHNvIGp1c3QgY29tcHV0ZSB0aGVtIG9uY2UuCistUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorLUVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCisrUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQorICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAorQEAgLTcwLDcgKzcwLDcgQEAKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorICAgICBpZiBwcmVmaXggaXMgTm9uZToKKy0gICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXS5yc3RyaXAoJ2luY2x1ZGUnKQorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBpZiBweXRob25fYnVpbGQ6CitAQCAtMTE1LDEyICsxMTUsMTYgQEAKKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5wcmVmaXggb3IKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorKyAgICBsaWJfYmFzZW5hbWUgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnNwbGl0KCcvJylbLTFdCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisrICAgICAgICBpZiBwbGF0X3NwZWNpZmljOgorKyAgICAgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10ucnN0cmlwKGxpYl9iYXNlbmFtZSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgcHJlZml4ID0gUFJFRklYCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Jhc2VuYW1lLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CitAQCAtMjE2LDcgKzIyMCw3IEBACisgICAgIGVsc2U6CisgICAgICAgICAjIFRoZSBuYW1lIG9mIHRoZSBjb25maWcuaCBmaWxlIGNoYW5nZWQgaW4gMi4yCisgICAgICAgICBjb25maWdfaCA9ICdweWNvbmZpZy5oJworLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorIAorIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKK0BAIC0yMjUsNyArMjI5LDcgQEAKKyAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2VmaWxlIikKKyAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgCisgZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCBnPU5vbmUpOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNzllN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F2b2lkcyBwYXJhbGxlbCBtYWtlIHJhY2VzIGxpbmtpbmcgZXJyb3JzIHdoZW4gbWFraW5nIFBhcnNlci9QR0VOCisKKy0gSW1wbGVtZW50cyBSaWNoYXJkIFB1cmRpZSdzIGlkZWEKKworU2lnbmVkLU9mZi1CeTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtNjEwLDEyICs2MTAsMTAgQEAgTW9kdWxlcy9ncnBtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvZworIAorIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B3ZG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKKyAKKy0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykgJChQR0VOKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorLQkJJChNQUtFKSAkKFBHRU4pCisgCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKy0JCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKKyAKKyAkKFBHRU4pOgkkKFBHRU5PQkpTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWMxMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNi4xLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMDktMTEtMTMgMTY6MDQ6NTQuMDAwMDAwMDAwICswMDAwCisrKysgUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDA5LTExLTEzIDE2OjA2OjI3LjAwMDAwMDAwMCArMDAwMAorQEAgLTMwMCw2ICszMDAsOCBAQAorICAgICAgICAgZHlsaWJfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSdkeWxpYicpCisgICAgICAgICBzdGF0aWNfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSdzdGF0aWMnKQorIAorKyAgICAgICAgcHJpbnQgIkxvb2tpbmcgaW4gJXMgZm9yICVzIiAlIChsaWIsIGRpcnMpCisrCisgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgc2hhcmVkID0gb3MucGF0aC5qb2luKGRpciwgc2hhcmVkX2YpCisgICAgICAgICAgICAgZHlsaWIgPSBvcy5wYXRoLmpvaW4oZGlyLCBkeWxpYl9mKQorQEAgLTMwOSwxMCArMzExLDEzIEBACisgICAgICAgICAgICAgIyBhc3N1bWluZyB0aGF0ICphbGwqIFVuaXggQyBjb21waWxlcnMgZG8uICBBbmQgb2YgY291cnNlIEknbQorICAgICAgICAgICAgICMgaWdub3JpbmcgZXZlbiBHQ0MncyAiLXN0YXRpYyIgb3B0aW9uLiAgU28gc3VlIG1lLgorICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGR5bGliKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChkeWxpYikKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGR5bGliCisgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzaGFyZWQpOgorKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKHNoYXJlZCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlZAorICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc3RhdGljKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChzdGF0aWMpCisgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWMKKyAKKyAgICAgICAgICMgT29wcywgZGlkbid0IGZpbmQgaXQgaW4gKmFueSogb2YgJ2RpcnMnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTg5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDIzNSBAQAorUmViYXNlZCBmb3IgUHl0aG9uIDIuNy45CisKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCisyMDExLzA5LzI5CitUaGUgcHl0aG9uIHJlY2lwZSBidWlsZGluZyB3YXMgZmFpbGluZyBiZWNhdXNlIHB5dGhvbi1uYXRpdmUgCitjb3VsZCBub3QgaGFuZGxlIHN5cy5saWIgdmFyLiBzeXMubGliIHZhciBpcyBkZWZpbmVkIGluIHRoZSAKK211bHRpbGliIHBhdGNoIGhlbmNlIGFkZGVkIHRoaXMgbXVsdGlsaWIucGF0Y2ggZm9yIHB5dGhvbi1uYXRpdmUgCityZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorQEAgLTEwOCw2ICsxMDgsNyBAQCBQeUFQSV9GVU5DKGNoYXIgKikgUHlfR2V0UGF0aCh2b2lkKTsKKyAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0UGxhdGZvcm0odm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldExpYih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitAQCAtMjIsNiArMjIsOCBAQCBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCisgCisgCisrbGlibmFtZSA9IHN5cy5saWIKKysKKyBpZiBzeXMudmVyc2lvbiA8ICIyLjIiOgorICAgICBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlJywKK0BAIC00Miw3ICs0NCw3IEBAIGVsc2U6CisgSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAndW5peF9wcmVmaXgnOiB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlLycrbGlibmFtZSsnL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKKyAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKK0BAIC0zODMsNyArMzgzLDcgQEAgY2xhc3MgRG9jOgorIAorICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeSIpCistICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIrc3lzLnZlcnNpb25bMDozXSkKKyAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAorICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMi43LjkvTGliL3NpdGUucHkKK0BAIC0yODgsMTMgKzI4OCwxOSBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQorICAgICAgICAgICAgICMgbG9jYXRpb25zLgorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9kbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5CitAQCAtNCwxMCArNCwxMSBAQAorIGltcG9ydCB1bml0dGVzdAorIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKyBkbCA9IGltcG9ydF9tb2R1bGUoJ2RsJywgZGVwcmVjYXRlZD1UcnVlKQorK2ltcG9ydCBzeXMKKyAKKyBzaGFyZWRsaWJzID0gWworLSAgICAoJy91c3IvbGliL2xpYmMuc28nLCAnZ2V0cGlkJyksCistICAgICgnL2xpYi9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisrICAgICgnL3Vzci8nK3N5cy5saWIrJy9saWJjLnNvJywgJ2dldHBpZCcpLAorKyAgICAoJy8nK3N5cy5saWIrJy9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9saWIvbGliYy5keWxpYicsICdnZXRwaWQnKSwKKyAgICAgXQorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5CitAQCAtNzU0LDEwICs3NTQsMTAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAgICAgICAgICAgICAgIyBzaG91bGQgSSBhbHNvIGNhbGwgZXhwYW5kdXNlcj8gKGFmdGVyIGFsbCwgY291bGQgdXNlICRIT01FKQorIAorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJGV4ZWNfcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCisgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtODcsNiArODcsNyBAQCBQWV9DRkxBR1M9CSQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKENGTEFHCisgCisgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcworIE1BQ0hERVA9CUBNQUNIREVQQAorK0xJQj0JCUBMSUJACisgCisgIyBNdWx0aWFyY2ggZGlyZWN0b3J5IChtYXkgYmUgZW1wdHkpCisgTVVMVElBUkNIPQlATVVMVElBUkNIQAorQEAgLTEwNiw3ICsxMDcsNyBAQCBMSUJESVI9CQlAbGliZGlyQAorIE1BTkRJUj0JCUBtYW5kaXJACisgSU5DTFVERURJUj0JQGluY2x1ZGVkaXJACisgQ09ORklOQ0xVREVESVI9CSQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKy1TQ1JJUFRESVI9CSQocHJlZml4KS9saWIKKytTQ1JJUFRESVI9CSQocHJlZml4KS9ATElCQAorIAorICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKKyBCSU5MSUJERVNUPQkkKExJQkRJUikvcHl0aG9uJChWRVJTSU9OKQorQEAgLTU5Nyw2ICs1OTgsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CisgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCisgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAorIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAorKwkJLURMSUI9JyIkKExJQikiJyBcCisgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKKyAKKyBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworQEAgLTYzOSw3ICs2NDEsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQorIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKKyAKKyBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1ETElCPSciJChMSUIpIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisgCisgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworIAkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1JJChETElOQ0xESVIpIC1vICRAICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworSW5kZXg6IFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTE2LDkgKzExNiwxMSBAQAorICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCisgI2VuZGlmCisgCisrI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgorKworICNpZm5kZWYgUFlUSE9OUEFUSAorLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCistICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCisrICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorICNlbmRpZgorIAorICNpZm5kZWYgTEFORE1BUksKK0BAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworLXN0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9ICJsaWIvcHl0aG9uIiBWRVJTSU9OOworK3N0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9IExJQl9QWVRIT047CisgCisgc3RhdGljIHZvaWQKKyByZWR1Y2UoY2hhciAqZGlyKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitAQCAtMTAsMyArMTAsMTMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKKyB7CisgCXJldHVybiBQTEFURk9STTsKKyB9CisrCisrI2lmbmRlZiBMSUIKKysjZGVmaW5lIExJQiAibGliIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldExpYih2b2lkKQorK3sKKysJcmV0dXJuIExJQjsKKyt9CitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNDM3LDYgKzE0MzcsOCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsaWIiLAorKyAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldExpYigpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicHJlZml4IiwKK0luZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworQEAgLTczNiw2ICs3MzYsMTEgQEAgU3VuT1MqKQorICAgICA7OworIGVzYWMKKyAKKytBQ19TVUJTVChMSUIpCisrQUNfTVNHX0NIRUNLSU5HKExJQikKKytMSUI9YGJhc2VuYW1lICR7bGliZGlyfWAKKytBQ19NU0dfUkVTVUxUKCRMSUIpCisrCisgCisgQUNfU1VCU1QoTElCUkFSWSkKKyBBQ19NU0dfQ0hFQ0tJTkcoTElCUkFSWSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDUyZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKzIwMTQvMTIvMTUKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKK0BAIC00MzksOSArNDM5LDkgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICBkZWYgZGV0ZWN0X21vZHVsZXMoc2VsZik6CisgICAgICAgICAjIEVuc3VyZSB0aGF0IC91c3IvbG9jYWwgaXMgYWx3YXlzIHVzZWQKKy0gICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCisrICAgICAgICAjIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgIyBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsICcvdXNyL2xvY2FsL2xpYicpCisrICAgICAgICAgICAgIyBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX2djY19wYXRocygpCisgICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorQEAgLTQ4MCwxNSArNDgwLDE1IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKy0gICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorKyAgICAgICAgI2lmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKysgICAgICAgICAgICAgICAgI2FuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKysgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisrICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorIAorICAgICAgICAgdHJ5OgorQEAgLTc2MSw4ICs3NjEsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgIHBhc3MgIyBJc3N1ZSA3Mzg0OiBBbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcyBvciB0aW5mby4KKyAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKKy0gICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyYWFmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitPbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHN5c2NvbmZpZyByZWFkIHRoZSBkYXRhIGZyb20gYm90aCB0aGUgTWFrZWZpbGUgYW5kCit0aGUgUHl0aG9uLmggZmlsZSBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSwgY3JlYXRlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGVpciB2YXJpYWJsZXMKK2FuZCB1c2VkIHRob3NlIHdoZW4gdXNpbmcgZ2V0X2NvbmZpZ192YXIoKSwgbm93IGl0IHVzZXMgX3N5c2NvbmZpZ2RhdGEuYnVpbGRfdGltZV92YXJzW10KK3doaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIEhPU1QsIGVycm9uZW91cyBpbiBvdXIgY2FzZSwgdGhpcyBwYXRjaCByZXZlcnRzIHRoaXMKK2JlaGF2aW9yIGFuZCB1c2VzIFB5dGhvbi5oIGFuZCBNYWtlZmlsZSB0byBnZXQgaW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC00MDEsMTIgKzQwMSw2NiBAQCBfY29uZmlnX3ZhcnMgPSBOb25lCisgCisgZGVmIF9pbml0X3Bvc2l4KCk6CisgICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgUE9TSVggc3lzdGVtcy4iIiIKKy0gICAgIyBfc3lzY29uZmlnZGF0YSBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSwgc2VlIHRoZSBzeXNjb25maWcgbW9kdWxlCistICAgIGZyb20gX3N5c2NvbmZpZ2RhdGEgaW1wb3J0IGJ1aWxkX3RpbWVfdmFycworLSAgICBnbG9iYWwgX2NvbmZpZ192YXJzCistICAgIF9jb25maWdfdmFycyA9IHt9CistICAgIF9jb25maWdfdmFycy51cGRhdGUoYnVpbGRfdGltZV92YXJzKQorKyAgICBnID0ge30KKysgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgTWFrZWZpbGU6CisrICAgIHRyeToKKysgICAgICAgIGZpbGVuYW1lID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKKysgICAgICAgIHBhcnNlX21ha2VmaWxlKGZpbGVuYW1lLCBnKQorKyAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorKyAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKKysgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKKysgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCisrCisrICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKG15X21zZykKKysKKysgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgcHljb25maWcuaDoKKysgICAgdHJ5OgorKyAgICAgICAgZmlsZW5hbWUgPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorKyAgICAgICAgcGFyc2VfY29uZmlnX2goZmlsZShmaWxlbmFtZSksIGcpCisrICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisrICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQorKyAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgorKyAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKKysKKysgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IobXlfbXNnKQorKworKyAgICAjIE9uIEFJWCwgdGhlcmUgYXJlIHdyb25nIHBhdGhzIHRvIHRoZSBsaW5rZXIgc2NyaXB0cyBpbiB0aGUgTWFrZWZpbGUKKysgICAgIyAtLSB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIFB5dGhvbiBzb3VyY2UsIGJ1dCB3aGVuIGluc3RhbGxlZAorKyAgICAjIHRoZSBzY3JpcHRzIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeS4KKysgICAgaWYgcHl0aG9uX2J1aWxkOgorKyAgICAgICAgZ1snTERTSEFSRUQnXSA9IGdbJ0JMRFNIQVJFRCddCisgCisrICAgIGVsaWYgZ2V0X3B5dGhvbl92ZXJzaW9uKCkgPCAnMi4xJzoKKysgICAgICAgICMgVGhlIGZvbGxvd2luZyB0d28gYnJhbmNoZXMgYXJlIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5LgorKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdhaXg0JzogICAgICAgICAgIyB3aGF0IGFib3V0IEFJWCAzLnggPworKyAgICAgICAgICAgICMgTGlua2VyIHNjcmlwdCBpcyBpbiB0aGUgY29uZmlnIGRpcmVjdG9yeSwgbm90IGluIE1vZHVsZXMgYXMgdGhlCisrICAgICAgICAgICAgIyBNYWtlZmlsZSBzYXlzLgorKyAgICAgICAgICAgIHB5dGhvbl9saWIgPSBnZXRfcHl0aG9uX2xpYihzdGFuZGFyZF9saWI9MSkKKysgICAgICAgICAgICBsZF9zb19haXggPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsICdsZF9zb19haXgnKQorKyAgICAgICAgICAgIHB5dGhvbl9leHAgPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsICdweXRob24uZXhwJykKKysKKysgICAgICAgICAgICBnWydMRFNIQVJFRCddID0gIiVzICVzIC1iSTolcyIgJSAobGRfc29fYWl4LCBnWydDQyddLCBweXRob25fZXhwKQorKworKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Jlb3MnOgorKyAgICAgICAgICAgICMgTGlua2VyIHNjcmlwdCBpcyBpbiB0aGUgY29uZmlnIGRpcmVjdG9yeS4gIEluIHRoZSBNYWtlZmlsZSBpdCBpcworKyAgICAgICAgICAgICMgcmVsYXRpdmUgdG8gdGhlIHNyY2Rpciwgd2hpY2ggYWZ0ZXIgaW5zdGFsbGF0aW9uIG5vIGxvbmdlciBtYWtlcworKyAgICAgICAgICAgICMgc2Vuc2UuCisrICAgICAgICAgICAgcHl0aG9uX2xpYiA9IGdldF9weXRob25fbGliKHN0YW5kYXJkX2xpYj0xKQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdF9wYXRoID0gc3RyaW5nLnNwbGl0KGdbJ0xEU0hBUkVEJ10pWzBdCisrICAgICAgICAgICAgbGlua2Vyc2NyaXB0X25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxpbmtlcnNjcmlwdF9wYXRoKQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdCA9IG9zLnBhdGguam9pbihweXRob25fbGliLCAnY29uZmlnJywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2Vyc2NyaXB0X25hbWUpCisrCisrICAgICAgICAgICAgIyBYWFggdGhpcyBpc24ndCB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpczogYWRkaW5nIHRoZSBQeXRob24KKysgICAgICAgICAgICAjIGxpYnJhcnkgdG8gdGhlIGxpbmssIGlmIG5lZWRlZCwgc2hvdWxkIGJlIGluIHRoZSAiYnVpbGRfZXh0IgorKyAgICAgICAgICAgICMgY29tbWFuZC4gIChJdCdzIGFsc28gbmVlZGVkIGZvciBub24tTVMgY29tcGlsZXJzIG9uIFdpbmRvd3MsIGFuZAorKyAgICAgICAgICAgICMgaXQncyB0YWtlbiBjYXJlIG9mIGZvciB0aGVtIGJ5IHRoZSAnYnVpbGRfZXh0LmdldF9saWJyYXJpZXMoKScKKysgICAgICAgICAgICAjIG1ldGhvZC4pCisrICAgICAgICAgICAgZ1snTERTSEFSRUQnXSA9ICgiJXMgLUwlcy9saWIgLWxweXRob24lcyIgJQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmtlcnNjcmlwdCwgUFJFRklYLCBnZXRfcHl0aG9uX3ZlcnNpb24oKSkpCisrCisrICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKKysgICAgX2NvbmZpZ192YXJzID0gZworIAorIGRlZiBfaW5pdF9udCgpOgorICAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIE5UIiIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS91bml4Y2NvbXBpbGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTAyODI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIENDIHZhcmlhYmxlLHNvbWV0aW1lcyBsaWtlOiJ4ODZfNjQtcG9reS1saW51eC1nY2MgICAtbTY0IC0tc3lzcm9vdD0vJHtUTVBESVJ9L3N5c3Jvb3RzL3FlbXV4ODYtNjQiLCBjb250YWlucyBvcHRpb24gaW5mb3JtYXRpb24uIAorVGhpcyB3aWxsIGxlYWQgdG8gd3JvbmcgY29tcGlsZXIgbmFtZSAicWVtdXg4Ni02NCIgcmF0aGVyIHRoYW4gIng4Nl82NC1wb2t5LWxpbnV4LWdjYyIgd2hlbiBweXRob24gZmluZGluZyB0aGUgY29tcGlsZXIgbmFtZS4KKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IFB5dGhvbi0yLjcuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMS0xMS0yNCAxMzo1MToxMC41Mzk5OTg3MjIgLTA4MDAKKysrKyBQeXRob24tMi43LjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTEtMTEtMjQgMTU6NTQ6MzYuODcyMTM3NzY2IC0wODAwCitAQCAtMjgyLDcgKzI4Miw3IEBACisgICAgICAgICAjIHRoaXMgdGltZSwgdGhlcmUncyBubyB3YXkgdG8gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgIyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiwgc28KKyAgICAgICAgICMgd2UgdXNlIHRoaXMgaGFjay4KKy0gICAgICAgIGNvbXBpbGVyID0gb3MucGF0aC5iYXNlbmFtZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikpCisrICAgICAgICBjb21waWxlciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIE1hY09TWCdzIGxpbmtlciBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC1SIGZsYWcgYXQgYWxsCisgICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmNWMyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy45LmJiCkBAIC0wLDAgKzEsNjMgQEAKK3JlcXVpcmUgcHl0aG9uLmluYworCitFWFRSQU5BVElWRVBBVEggKz0gImJ6aXAyLW5hdGl2ZSIKK0RFUEVORFMgPSAib3BlbnNzbC1uYXRpdmUgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSIKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGVidWcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL25vaG9zdGxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL211bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2J1aWxkZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBcCisgICAgICAgICAgICIKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiIKKworaW5oZXJpdCBuYXRpdmUKKworUlBST1ZJREVTICs9ICJweXRob24tZGlzdHV0aWxzLW5hdGl2ZSBweXRob24tY29tcHJlc3Npb24tbmF0aXZlIHB5dGhvbi10ZXh0dXRpbHMtbmF0aXZlIHB5dGhvbi1jb2RlY3MtbmF0aXZlIHB5dGhvbi1jb3JlLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IgorCitFWFRSQV9PRU1BS0UgPSAnXAorICBCVUlMRF9TWVM9IiIgXAorICBIT1NUX1NZUz0iIiBcCisgIExJQkM9IiIgXAorICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorJworCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJFBZVEhTQ1JJUFQKKwlkb25lCisKKwkjIEFkZCBhIHN5bWxpbmsgdG8gdGhlIG5hdGl2ZSBQeXRob24gc28gdGhhdCBzY3JpcHRzIGNhbiBqdXN0IGludm9rZQorCSMgIm5hdGl2ZXB5dGhvbiIgYW5kIGdldCB0aGUgcmlnaHQgb25lIHdpdGhvdXQgbmVlZGluZyBhYnNvbHV0ZSBwYXRocworCSMgKHRoZXNlIG9mdGVuIGVuZCB1cCB0b28gbG9uZyBmb3IgdGhlICMhIHBhcnNlciBpbiB0aGUga2VybmVsIGFzIHRoZQorCSMgYnVmZmVyIGlzIDEyOCBieXRlcyBsb25nKS4KKwlsbiAtcyBweXRob24tbmF0aXZlL3B5dGhvbiAke0R9JHtiaW5kaXJ9L25hdGl2ZXB5dGhvbgorCisJIyBXZSBkb24ndCB3YW50IG1vZHVsZXMgaW4gfi8ubG9jYWwgYmVpbmcgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlCisJIyBpbnN0YWxsZWQgaW4gdGhlIG5hdGl2ZSBzeXNyb290LCBzbyBkaXNhYmxlIHVzZXIgc2l0ZSBzdXBwb3J0LgorCXNlZCAtaSAtZSAncyxeXChFTkFCTEVfVVNFUl9TSVRFID0gXCkuKixcMUZhbHNlLCcgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGUucHkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmU4ZmMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiCkBAIC0wLDAgKzEsMTYgQEAKK0RFU0NSSVBUSU9OID0gIm5vc2UgZXh0ZW5kcyB0aGUgdGVzdCBsb2FkaW5nIGFuZCBydW5uaW5nIGZlYXR1cmVzIG9mIHVuaXR0ZXN0LCBcCittYWtpbmcgaXQgZWFzaWVyIHRvIHdyaXRlLCBmaW5kIGFuZCBydW4gdGVzdHMuIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGdwbC50eHQ7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL24vbm9zZS9ub3NlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBjYTU0NmQ4MWNhODMwOTA4MGZjODBjYjM4OWU3YTE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2MWUwOTA5YTc0M2VlZDM3YjEyMDdlMzhhOGU3YjRhMmZlMGE4MjE4NWUzNmYyYmUyNTJlZjFiM2Y5MDE3NTgiCisKK1MgPSAiJHtXT1JLRElSfS9ub3NlLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L19udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9jb25maWcuaCAqLworLyogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMiAqLworLyogI2RlZmluZSBTSVpFT0ZfSU5UIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkcgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRkxPQVQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRE9VQkxFIDggKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDEyCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9GTE9BVF9GVU5DUworI2RlZmluZSBIQVZFX0xPRzFQCisjZGVmaW5lIEhBVkVfRVhQTTEKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUMKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUNfRkxPQVQKKyNkZWZpbmUgSEFWRV9JU05BTgorI2RlZmluZSBIQVZFX0lTSU5GCisjZGVmaW5lIEhBVkVfUklOVAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWYxODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9jb25maWcuaCAqLworLyogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMiAqLworLyogI2RlZmluZSBTSVpFT0ZfSU5UIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkcgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRkxPQVQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRE9VQkxFIDggKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDEyCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9GTE9BVF9GVU5DUworI2RlZmluZSBIQVZFX0xPRzFQCisjZGVmaW5lIEhBVkVfRVhQTTEKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUMKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUNfRkxPQVQKKyNkZWZpbmUgSEFWRV9JU05BTgorI2RlZmluZSBIQVZFX0lTSU5GCisjZGVmaW5lIEhBVkVfUklOVAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiZjY1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9fbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGM0Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2MTM1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX0RPVUJMRV9CRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvX251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL19udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWYxODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisvKiAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvY29uZmlnLmggKi8KKy8qICNkZWZpbmUgU0laRU9GX1NIT1JUIDIgKi8KKy8qICNkZWZpbmUgU0laRU9GX0lOVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0ZMT0FUIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0RPVUJMRSA4ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxMgorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfRkxPQVRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9MT0cxUAorI2RlZmluZSBIQVZFX0VYUE0xCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDX0ZMT0FUCisjZGVmaW5lIEhBVkVfSVNOQU4KKyNkZWZpbmUgSEFWRV9JU0lORgorI2RlZmluZSBIQVZFX1JJTlQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiZjY1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L25vLWhvc3QtcGF0aHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L25vLWhvc3QtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0NTAzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitEb24ndCBzZWFyY2ggL3VzciBhbmQgc28gb24gZm9yIGxpYnJhcmllcyBieSBkZWZhdWx0IHRvIGF2b2lkIGhvc3QgY29udGFtaW5hdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChBcyB0aGUgY29kZSBzdGFuZHMsIHRoaXMgaXMgYSBoYWNrKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weSBiL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQoraW5kZXggYmFjOTBmYi4uYTYzZDc5NiAxMDA2NDQKKy0tLSBhL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQorKysrIGIvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5CitAQCAtMTkxLDQxICsxOTEsMTIgQEAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gW10KKyAgICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gW10KKyBlbHNlOgorLSAgICBkZWZhdWx0X2xpYl9kaXJzID0gbGlicGF0aHMoWycvdXNyL2xvY2FsL2xpYicsICcvb3B0L2xpYicsICcvdXNyL2xpYicsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvbG9jYWwvbGliJywgJy9zdy9saWInXSwgcGxhdGZvcm1fYml0cykKKy0gICAgZGVmYXVsdF9pbmNsdWRlX2RpcnMgPSBbJy91c3IvbG9jYWwvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2luY2x1ZGUnLCAnL3Vzci9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXRoIG9mIHVtZnBhY2sgdW5kZXIgbWFjcG9ydHMKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvbG9jYWwvaW5jbHVkZS91ZnNwYXJzZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2luY2x1ZGUnLCAnL3N3L2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9pbmNsdWRlL3N1aXRlc3BhcnNlJ10KKy0gICAgZGVmYXVsdF9zcmNfZGlycyA9IFsnLicsICcvdXNyL2xvY2FsL3NyYycsICcvb3B0L3NyYycsICcvc3cvc3JjJ10KKy0KKy0gICAgZGVmYXVsdF94MTFfbGliX2RpcnMgPSBsaWJwYXRocyhbJy91c3IvWDExUjYvbGliJywgJy91c3IvWDExL2xpYicsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorLSAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMgPSBbJy91c3IvWDExUjYvaW5jbHVkZScsICcvdXNyL1gxMS9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2luY2x1ZGUnXQorLQorLSAgICBpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9saWIvWDExJyk6CistICAgICAgICBnbG9iYmVkX3gxMV9kaXIgPSBnbG9iKCcvdXNyL2xpYi8qL2xpYlgxMS5zbycpCistICAgICAgICBpZiBnbG9iYmVkX3gxMV9kaXI6CistICAgICAgICAgICAgeDExX3NvX2RpciA9IG9zLnBhdGguc3BsaXQoZ2xvYmJlZF94MTFfZGlyWzBdKVswXQorLSAgICAgICAgICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzLmV4dGVuZChbeDExX3NvX2RpciwgJy91c3IvbGliL1gxMSddKQorLSAgICAgICAgICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycy5leHRlbmQoWycvdXNyL2xpYi9YMTEvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvaW5jbHVkZS9YMTEnXSkKKy0KKy0gICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3AKKy0gICAgdHJ5OgorLSAgICAgICAgcCA9IHNwLlBvcGVuKFsiZ2NjIiwgIi1wcmludC1tdWx0aWFyY2giXSwgc3Rkb3V0PXNwLlBJUEUsCistICAgICAgICAgICAgICAgIHN0ZGVycj1vcGVuKG9zLmRldm51bGwsICd3JykpCistICAgIGV4Y2VwdCBPU0Vycm9yOgorLSAgICAgICAgcGFzcyAjIGdjYyBpcyBub3QgaW5zdGFsbGVkCistICAgIGVsc2U6CistICAgICAgICB0cmlwbGV0ID0gc3RyKHAuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoKS5zdHJpcCgpKQorLSAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6CistICAgICAgICAgICAgIyBnY2Mgc3VwcG9ydHMgdGhlICItcHJpbnQtbXVsdGlhcmNoIiBvcHRpb24KKy0gICAgICAgICAgICBkZWZhdWx0X3gxMV9saWJfZGlycyArPSBbb3MucGF0aC5qb2luKCIvdXNyL2xpYi8iLCB0cmlwbGV0KV0KKy0gICAgICAgICAgICBkZWZhdWx0X2xpYl9kaXJzICs9IFtvcy5wYXRoLmpvaW4oIi91c3IvbGliLyIsIHRyaXBsZXQpXQorKyAgICBkZWZhdWx0X2xpYl9kaXJzID0gbGlicGF0aHMoWycvZGVhZGlyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorKyAgICBkZWZhdWx0X2luY2x1ZGVfZGlycyA9IFsnL2RlYWRkaXIvaW5jbHVkZSddCisrICAgIGRlZmF1bHRfc3JjX2RpcnMgPSBbJy4nLCAnL2RlYWRkaXIvc3JjJ10KKysKKysgICAgZGVmYXVsdF94MTFfbGliX2RpcnMgPSBsaWJwYXRocyhbJy9kZWFkZGlyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorKyAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMgPSBbJy9kZWFkZGlyL2luY2x1ZGUnXQorIAorIGlmIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnbGliJykgbm90IGluIGRlZmF1bHRfbGliX2RpcnM6CisgICAgIGRlZmF1bHRfbGliX2RpcnMuaW5zZXJ0KDAsIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnbGliJykpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvX251bXB5Y29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjYmZiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVkMzlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0RPVUJMRV9ET1VCTEVfQkUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvY29uZmlnLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9fbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L2NvbmZpZy5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlNjNiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lOVEVMX0VYVEVOREVEXzE2X0JZVEVTX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTQxZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9jb25maWcuaApAQCAtMCwwICsxLDEwOCBAQAorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOCisjZGVmaW5lIEhBVkVfQ09TCisjZGVmaW5lIEhBVkVfVEFOCisjZGVmaW5lIEhBVkVfU0lOSAorI2RlZmluZSBIQVZFX0NPU0gKKyNkZWZpbmUgSEFWRV9UQU5ICisjZGVmaW5lIEhBVkVfRkFCUworI2RlZmluZSBIQVZFX0ZMT09SCisjZGVmaW5lIEhBVkVfQ0VJTAorI2RlZmluZSBIQVZFX1NRUlQKKyNkZWZpbmUgSEFWRV9MT0cxMAorI2RlZmluZSBIQVZFX0xPRworI2RlZmluZSBIQVZFX0VYUAorI2RlZmluZSBIQVZFX0FTSU4KKyNkZWZpbmUgSEFWRV9BQ09TCisjZGVmaW5lIEhBVkVfQVRBTgorI2RlZmluZSBIQVZFX0ZNT0QKKyNkZWZpbmUgSEFWRV9NT0RGCisjZGVmaW5lIEhBVkVfRlJFWFAKKyNkZWZpbmUgSEFWRV9MREVYUAorI2RlZmluZSBIQVZFX1JJTlQKKyNkZWZpbmUgSEFWRV9UUlVOQworI2RlZmluZSBIQVZFX0VYUDIKKyNkZWZpbmUgSEFWRV9MT0cyCisjZGVmaW5lIEhBVkVfQVRBTjIKKyNkZWZpbmUgSEFWRV9QT1cKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIKKyNkZWZpbmUgSEFWRV9TSU5GCisjZGVmaW5lIEhBVkVfQ09TRgorI2RlZmluZSBIQVZFX1RBTkYKKyNkZWZpbmUgSEFWRV9TSU5IRgorI2RlZmluZSBIQVZFX0NPU0hGCisjZGVmaW5lIEhBVkVfVEFOSEYKKyNkZWZpbmUgSEFWRV9GQUJTRgorI2RlZmluZSBIQVZFX0ZMT09SRgorI2RlZmluZSBIQVZFX0NFSUxGCisjZGVmaW5lIEhBVkVfUklOVEYKKyNkZWZpbmUgSEFWRV9UUlVOQ0YKKyNkZWZpbmUgSEFWRV9TUVJURgorI2RlZmluZSBIQVZFX0xPRzEwRgorI2RlZmluZSBIQVZFX0xPR0YKKyNkZWZpbmUgSEFWRV9MT0cxUEYKKyNkZWZpbmUgSEFWRV9FWFBGCisjZGVmaW5lIEhBVkVfRVhQTTFGCisjZGVmaW5lIEhBVkVfQVNJTkYKKyNkZWZpbmUgSEFWRV9BQ09TRgorI2RlZmluZSBIQVZFX0FUQU5GCisjZGVmaW5lIEhBVkVfQVNJTkhGCisjZGVmaW5lIEhBVkVfQUNPU0hGCisjZGVmaW5lIEhBVkVfQVRBTkhGCisjZGVmaW5lIEhBVkVfSFlQT1RGCisjZGVmaW5lIEhBVkVfQVRBTjJGCisjZGVmaW5lIEhBVkVfUE9XRgorI2RlZmluZSBIQVZFX0ZNT0RGCisjZGVmaW5lIEhBVkVfTU9ERkYKKyNkZWZpbmUgSEFWRV9GUkVYUEYKKyNkZWZpbmUgSEFWRV9MREVYUEYKKyNkZWZpbmUgSEFWRV9FWFAyRgorI2RlZmluZSBIQVZFX0xPRzJGCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRgorI2RlZmluZSBIQVZFX1NJTkwKKyNkZWZpbmUgSEFWRV9DT1NMCisjZGVmaW5lIEhBVkVfVEFOTAorI2RlZmluZSBIQVZFX1NJTkhMCisjZGVmaW5lIEhBVkVfQ09TSEwKKyNkZWZpbmUgSEFWRV9UQU5ITAorI2RlZmluZSBIQVZFX0ZBQlNMCisjZGVmaW5lIEhBVkVfRkxPT1JMCisjZGVmaW5lIEhBVkVfQ0VJTEwKKyNkZWZpbmUgSEFWRV9SSU5UTAorI2RlZmluZSBIQVZFX1RSVU5DTAorI2RlZmluZSBIQVZFX1NRUlRMCisjZGVmaW5lIEhBVkVfTE9HMTBMCisjZGVmaW5lIEhBVkVfTE9HTAorI2RlZmluZSBIQVZFX0xPRzFQTAorI2RlZmluZSBIQVZFX0VYUEwKKyNkZWZpbmUgSEFWRV9FWFBNMUwKKyNkZWZpbmUgSEFWRV9BU0lOTAorI2RlZmluZSBIQVZFX0FDT1NMCisjZGVmaW5lIEhBVkVfQVRBTkwKKyNkZWZpbmUgSEFWRV9BU0lOSEwKKyNkZWZpbmUgSEFWRV9BQ09TSEwKKyNkZWZpbmUgSEFWRV9BVEFOSEwKKyNkZWZpbmUgSEFWRV9IWVBPVEwKKyNkZWZpbmUgSEFWRV9BVEFOMkwKKyNkZWZpbmUgSEFWRV9QT1dMCisjZGVmaW5lIEhBVkVfRk1PREwKKyNkZWZpbmUgSEFWRV9NT0RGTAorI2RlZmluZSBIQVZFX0ZSRVhQTAorI2RlZmluZSBIQVZFX0xERVhQTAorI2RlZmluZSBIQVZFX0VYUDJMCisjZGVmaW5lIEhBVkVfTE9HMkwKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9ICisjZGVmaW5lIEhBVkVfTERPVUJMRV9JTlRFTF9FWFRFTkRFRF8xMl9CWVRFU19MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvbnVtcHljb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3OTM4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfTlBZX05VTVBZQ09ORklHX0hfCisjZGVmaW5lIF9OUFlfTlVNUFlDT05GSUdfSF8KKworI2luY2x1ZGUgIl9udW1weWNvbmZpZy5oIgorCisvKiAKKyAqIE9uIE1hYyBPUyBYLCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgb25lIGNvbmZpZ3VyYXRpb24gc3RhZ2UgZm9yIGFsbCB0aGUgYXJjaHMKKyAqIGluIHVuaXZlcnNhbCBidWlsZHMsIGFueSBtYWNybyB3aGljaCBkZXBlbmRzIG9uIHRoZSBhcmNoIG5lZWRzIHRvIGJlCisgKiBoYXJjb2RlZAorICovCisjaWZkZWYgX19BUFBMRV9fCisJI3VuZGVmIE5QWV9TSVpFT0ZfTE9ORworCSN1bmRlZiBOUFlfU0laRU9GX1BZX0lOVFBUUl9UCisKKwkjaWZkZWYgX19MUDY0X18KKwkJI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgCQk4CisJCSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCAJOAorCSNlbHNlCisJCSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIAkJNAorCQkjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgCTQKKwkjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS43LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxY2RmZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiCkBAIC0wLDAgKzEsOTkgQEAKK1NVTU1BUlkgPSAiQSBzb3BoaXN0aWNhdGVkIE51bWVyaWMgUHJvY2Vzc2luZyBQYWNrYWdlIGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PWY4NzgzMmQ4NTRhY2JhZGU2ZTlmNWM2MDFjOGIzMGIxIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L251bXB5L251bXB5LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ob3N0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgJHtDT05GSUdGSUxFU1VSSX0gIgorCitDT05GSUdGSUxFU1VSSSA/PSAiIgorCitDT05GSUdGSUxFU1VSSV9hYXJjaDY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm1lYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2VsID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3g4Ni02NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHMgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9wb3dlcnBjID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYzY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0bjMyID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorCitTID0gIiR7V09SS0RJUn0vbnVtcHktJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKKyMgTWFrZSB0aGUgYnVpbGQgZmFpbCBhbmQgcmVwbGFjZSAqY29uZmlnLmggd2l0aCBwcm9wZXIgb25lCisjIFRoaXMgaXMgYSB1Z2x5LCB1Z2x5IGhhY2sgLSBLb2VuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgdHJ1ZQorICAgIGNwICR7V09SS0RJUn0vKmNvbmZpZy5oICR7U30vYnVpbGQvJChscyAke1N9L2J1aWxkIHwgZ3JlcCBzcmMpL251bXB5L2NvcmUvaW5jbHVkZS9udW1weS8KK30KKworRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9udW1weS9jb3JlL2xpYi8qLmEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZmE1NGU0MGI2YTI0MzQxNmYwMjQ4MTIzYjZlYzMzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNGZhNzBiN2VkYmFiNjVlZTY0MzJlYjYzNzQzZjU0ODlmMTkxOWM2MTQ2MzJiMjBiMmZiNDVhYTdlNjgyYWM2IgorCisjIGluc3RhbGwgd2hhdCBpcyBuZWVkZWQgZm9yIG51bXB5LnRlc3QoKQorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXVuaXR0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaWZmbGliIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1wcHJpbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBpY2tsZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tc2hlbGwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5vc2UgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRvY3Rlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRhdGV0aW1lIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaXN0dXRpbHMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW1pc2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW1tYXAgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbnVtYmVycyBcCisgICAgICAgICAgICAgICAgICBweXRob24tcHlkb2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBrZ3V0aWwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWVtYWlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1zdWJwcm9jZXNzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF8zLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODBhZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQSBQdXJlIFB5dGhvbiBFeHBlY3QgbGlrZSBNb2R1bGUgZm9yIFB5dGhvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZXhwZWN0LnJlYWR0aGVkb2NzLm9yZy8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiSVNDIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzI1ZDlhMDc3MGJhNjlhOTk2NWFjYzg5NGU5ZjM2NDQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGV4cGVjdC9wZXhwZWN0LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZGU3MjU0MWQzZjEzNzRiNzk1NDcyZmVkODQxZGNlOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkZmVhNjE4ZDQzZTgzY2ZmZjIxNTA0ZjE4Zjk4MDE5YmE1MjBmMzMwZTQxNDJlNTE4NWVmN2M3MzUyN2RlNWJhIgorCitTID0gIiR7V09SS0RJUn0vcGV4cGVjdC0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIHB5dGhvbi1jb3JlIFwKKyAgICBweXRob24taW8gXAorICAgIHB5dGhvbi10ZXJtaW5hbCBcCisgICAgcHl0aG9uLXJlc291cmNlIFwKKyAgICBweXRob24tZmNudGwgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZmUyNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQ2Fpcm8gY2FudmFzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcHljYWlybyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJweXRob24tZGV2ZWwiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgTVBMLTEuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyZTA3MWFiNzI5Nzg0MzFiMjk0YTBkNjk2MzI3NDIxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTEdQTC0yLjE7bWQ1PWZhZDliMzMzMmJlODk0YmFiOWJjNTAxNTcyODY0YjI5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTVBMLTEuMTttZDU9YmZlMWY3NWQ2MDY5MTJhNDExMWM5MDc0M2Q2YzczMjUiCisKKyMgY2Fpcm8gPj0gMS44LjgKK0RFUEVORFMgPSAiY2Fpcm8iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcmVsZWFzZXMvcHkyY2Fpcm8tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjIwMzM3MTMyYzRhYjA2YzExNDZhZDM4NGQ1NTM3MmM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQzMDQzOWYwNmMyZWMxYTM5ZTI3NDY0YzZjODI4YjZlZmFjZTNiMjJlZTE3YjJkZTA1ZGM0MDllNDI5YTc0MzEiCisKK1MgPSAiJHtXT1JLRElSfS9weTJjYWlyby0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb25maWd1cmUoKSB7CisJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSAuL3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtEfSR7cHJlZml4fSAtLWxpYmRpcj0ke0R9JHtsaWJkaXJ9Cit9CisKK2RvX2NvbXBpbGUoKSB7CisJLi93YWYgYnVpbGQgJHtQQVJBTExFTF9NQUtFfQorfQorCitkb19pbnN0YWxsKCkgeworCS4vd2FmIGluc3RhbGwKKwlzZWQgXAorCQktZSAnczpAcHJlZml4QDoke3ByZWZpeH06JyBcCisJCS1lICdzOkBWRVJTSU9OQDoke1BWfTonIFwKKwkJLWUgJ3M6QGluY2x1ZGVkaXJAOiR7aW5jbHVkZWRpcn06JyBcCisJCXB5Y2Fpcm8ucGMuaW4gPiBweWNhaXJvLnBjCisJaW5zdGFsbCAtbSAwNjQ0IHB5Y2Fpcm8ucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybC9uby1zdGF0aWMtbGluay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsL25vLXN0YXRpYy1saW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MzQ5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybC9uby1zdGF0aWMtbGluay5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogcHljdXJsLTcuMTkuMy4xL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHljdXJsLTcuMTkuMy4xLm9yaWcvc2V0dXAucHkJMjAxNC0wNy0xNiAxMjo1NzoyNC4wNjUzNDY4ODcgKzAwMDAKKysrKyBweWN1cmwtNy4xOS4zLjEvc2V0dXAucHkJMjAxNC0wNy0xNiAxMjo1Nzo1My4wNTczNDc2NzggKzAwMDAKK0BAIC0xNDcsNyArMTQ3LDcgQEAKKyAgICAgICAgIG9wdGJ1ZiA9ICcnCisgICAgICAgICBzc2xoaW50YnVmID0gJycKKyAgICAgICAgIGVycnRleHQgPSAnJworLSAgICAgICAgZm9yIG9wdGlvbiBpbiBbIi0tbGlicyIsICItLXN0YXRpYy1saWJzIl06CisrICAgICAgICBmb3Igb3B0aW9uIGluIFsiLS1saWJzIl06CisgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oKENVUkxfQ09ORklHLCBvcHRpb24pLAorICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybF83LjE5LjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsXzcuMTkuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGVmZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybF83LjE5LjUuMS5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgbGliY3VybCIKK0hPTUVQQUdFID0gImh0dHA6Ly9weWN1cmwuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSsgfCBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUucnN0O2JlZ2lubGluZT0xNjY7ZW5kbGluZT0xODE7bWQ1PTU3ZTVhYjBjMGY5NjQ1MzNmYzU5ZDkzZGVjNTY5NWJiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTEdQTDttZDU9MzU3OWE5ZmQwMjIxZDQ5YTIzN2FhYTMzNDkyZjk4OGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1NSVQ7bWQ1PWU4MjAwOTU1Yzc3M2IyYTBmZDZjZWEzNmVhNWU4N2JlIgorCitERVBFTkRTID0gImN1cmwgcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWNvcmUgY3VybCIKK1NSQ05BTUUgPSAicHljdXJsIgorCitTUkNfVVJJID0gIlwKKyAgaHR0cDovLyR7U1JDTkFNRX0uc291cmNlZm9yZ2UubmV0L2Rvd25sb2FkLyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6O25hbWU9YXJjaGl2ZSBcCisgIGZpbGU6Ly9uby1zdGF0aWMtbGluay5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY0NGNkNTQyNTZkN2E2NDNhYjdiMTZlM2Y0MDliMjZiIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNmU5NzcwZjgwNDU5NzU3ZjczYmQ3MWFmODJmYmIyOWNkMzk4YjM4Mzg4Y2RmMWJlYWIzMWVhOTFhMzMxYmM2YyIKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCisjIG5lZWQgdG8gZXhwb3J0IHRoZXNlIHZhcmlhYmxlcyBmb3IgcHl0aG9uLWNvbmZpZyB0byB3b3JrCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIEVuc3VyZSB0aGUgZG9jc3RyaW5ncyBhcmUgZ2VuZXJhdGVkIGFzIG1ha2UgY2xlYW4gd2lsbCByZW1vdmUgdGhlbQorZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBkb2NzdHJpbmdzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9zaGFyZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3Qvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3Qvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTkxMTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTEwMV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcHlnb2JqZWN0LTIuMjcuOTEvY29uZmlndXJlLmFjIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYworLS0tIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYwkyMDExLTAyLTIzIDIyOjE0OjM3LjAwMDAwMDAwMCArMDIwMAorKysrIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTAzIDA1OjEzOjQ0LjAzNDk0OTk1NCArMDIwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyBBQ19ERUZJTkUoUFlHT0JKRUNUX01JQ1JPX1ZFUlNJT04sIHB5Z29iamVjdF9taWNyb192ZXJzaW9uLCBbcHlnb2JqZWN0IG1pY3JvIHZlcnNpb25dKQorIEFDX1NVQlNUKFBZR09CSkVDVF9NSUNST19WRVJTSU9OLCBweWdvYmplY3RfbWljcm9fdmVyc2lvbikKKworLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisgbTRfaWZkZWYoW0FNX1NJTEVOVF9SVUxFU10sIFtBTV9TSUxFTlRfUlVMRVMoeWVzKV0pCisgQU1fSU5JVF9BVVRPTUFLRShmb3JlaWduKQorIEFNX01BSU5UQUlORVJfTU9ERQorQEAgLTgyLDcgKzgyLDYgQEAKKyBtNF9pZmRlZihbTFRfT1VUUFVUXSwgW0xUX09VVFBVVF0pCisgQUNfSVNDX1BPU0lYCisgQUNfUFJPR19DQworLUFNX1BST0dfQ0NfU1REQworIEFNX1BST0dfQ0NfQ19PCisKKyAjIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIHB5dGhvbiBuZWNpc2FyeSB0byBidWlsZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3RfMi4yOC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3RfMi4yOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDM3YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJQeXRob24gR09iamVjdCBiaW5kaW5ncyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiTmV3ZXIgdmVyc2lvbnMgb2YgcHl0aG9uLXB5Z29iamVjdCBkZXBlbmQgb24gZ29iamVjdC1pbnRyb3NwZWN0aW9uIHdoaWNoIGRvZXNuJ3QgY3Jvc3MtY29tcGlsZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzciCitERVBFTkRTID0gInB5dGhvbiBweXRob24tcHlnb2JqZWN0LW5hdGl2ZSBsaWJmZmkgZ2xpYi0yLjAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJweXRob24tbmF0aXZlIGxpYmZmaS1uYXRpdmUgZ2xpYi0yLjAtbmF0aXZlIgorUkRFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworTUFKX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L3B5Z29iamVjdC8ke01BSl9WRVJ9L3B5Z29iamVjdC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKKyMgbGlidG9vbC1uYXRpdmUgZG9lc24ndCBoYXZlIGZpeGluc3RhbGwucGF0Y2ggYXBwbGllZCB3aGljaCBtZWFucworIyB0aGF0IGxpYnMgZ2V0IHJlbGlua2VkIGF0IGluc3RhbGxhdGlvbiB0aW1lLiBUaGlzIHRyaWdnZXJzIGEgCisjIHJlbGlua2luZyBhbG9uZyB0aGUgbGluZXMgb2Y6CisjIGdjYyAtTC90bXAvZm9vL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYiAtbHB5Z2xpYi0yLjAtcHl0aG9uIC1vIC5saWJzL19nbGliLnNvCisjIHdoZXJlIC90bXAvZm9vIGlzIERFU1RESVIgYW5kIHB5Z2xpYi0yLjAtcHl0aG9uIG1heSBiZSBpbnN0YWxsZWQvcmVpbnN0YWxsZWQKKyMgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgZ2NjIGNvbW1hbmQgcnVucy4KKyMgSWYgdGhpcyBoYXBwZW5zIGJldHdlZW4gdGhlIGhhbmRvZmYgYmV0d2VlbiBnY2MgYW5kIGxkLCB5b3UgY2FuIHNlZToKKyMgL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxweWdsaWItMi4wLXB5dGhvbgorIyBBZGRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgbGlrZSAgaW5zdGFsbC1weWdsaWJMVExJQlJBUklFUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworIyB3b3VsZCBiZSBpZGVhbCBidXQgYXV0b21ha2UgY2FuJ3QgY29wZSB3aXRoIHRoYXQgd2l0aG91dCBtYW51YWxseSAKKyMgZGVmaW5pbmcgdGhlIHdob2xlIGZ1bmN0aW9uLiBHaXZlIHVwIGFuZCBkaXNhYmxlIHBhcmFsbGVsIG1ha2UgaW4gbmF0aXZlIGJ1aWxkcy4KK1BBUkFMTEVMX01BS0VJTlNUX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYTY0OTAwYjI3NGM0NjYxYTVjMzJlNTI5MjI5NzdmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZGE4OGMxNjlhNTZlZmNjYzUxNmNlYmQ5MjM3ZGEzZmU1MThhMzQzMDk1YTY2NDYwN2IzNjhmZTIxZGY5NWI2IgorUyA9ICIke1dPUktESVJ9L3B5Z29iamVjdC0ke1BWfSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHV0aWxzLWJhc2UgcGtnY29uZmlnCisKKyMgbmVjZXNzYXJ5IHRvIGxldCB0aGUgY2FsbCBmb3IgcHl0aG9uLWNvbmZpZyBzdWNjZWVkCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK1BBQ0tBR0VTICs9ICIke1BOfS1saWIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tdGV4dHV0aWxzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vcHl0aG9uKiIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0gJHtkYXRhZGlyfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDkwIEBACisjIyB0aGlzIG9uZSBpcyBjb21tb25seSB1c2VkIHdpdGggQU1fUEFUSF9QWVRIT05ESVIgLi4uCitkbmwgQU1fQ0hFQ0tfUFlNT0QoTU9ETkFNRSBbLFNZTUJPTCBbLEFDVElPTi1JRi1GT1VORCBbLEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCitkbmwgQ2hlY2sgaWYgYSBtb2R1bGUgY29udGFpbmluZyBhIGdpdmVuIHN5bWJvbCBpcyB2aXNpYmxlIHRvIHB5dGhvbi4KK0FDX0RFRlVOKEFNX0NIRUNLX1BZTU9ELAorW0FDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSkKK3B5X21vZF92YXI9YGVjaG8gJDFbJ18nXSQyIHwgc2VkICd5JS4vKy0lX19wXyUnYAorQUNfTVNHX0NIRUNLSU5HKGZvciBpZmVsc2UoWyQyXSxbXSwsWyQyIGluIF0pcHl0aG9uIG1vZHVsZSAkMSkKK0FDX0NBQ0hFX1ZBTChweV9jdl9tb2RfJHB5X21vZF92YXIsIFsKK2lmZWxzZShbJDJdLFtdLCBbcHJvZz0iCitpbXBvcnQgc3lzCit0cnk6CisgICAgICAgIGltcG9ydCAkMQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiXSwgW3Byb2c9IgoraW1wb3J0ICQxCiskMS4kMiJdKQoraWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JkFDX0ZEX0NDIDI+JkFDX0ZEX0NDCisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorXSkKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKyAgaWZlbHNlKFskM10sIFtdLCwgWyQzCitdKWRubAorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorICBpZmVsc2UoWyQ0XSwgW10sLCBbJDQKK10pZG5sCitmaQorXSkKKworZG5sIGEgbWFjcm8gdG8gY2hlY2sgZm9yIGFiaWxpdHkgdG8gY3JlYXRlIHB5dGhvbiBleHRlbnNpb25zCitkbmwgIEFNX0NIRUNLX1BZVEhPTl9IRUFERVJTKFtBQ1RJT04tSUYtUE9TU0lCTEVdLCBbQUNUSU9OLUlGLU5PVC1QT1NTSUJMRV0pCitkbmwgZnVuY3Rpb24gYWxzbyBkZWZpbmVzIFBZVEhPTl9JTkNMVURFUworQUNfREVGVU4oW0FNX0NIRUNLX1BZVEhPTl9IRUFERVJTXSwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGhlYWRlcnMgcmVxdWlyZWQgdG8gY29tcGlsZSBweXRob24gZXh0ZW5zaW9ucykKK2RubCBkZWR1Y2UgUFlUSE9OX0lOQ0xVREVTCitBQ19BUkdfV0lUSChweXRob24taW5jbHVkZXMsCisJWyAgLS13aXRoLXB5dGhvbi1pbmNsdWRlcz1ESVIgIHBhdGggdG8gUHl0aG9uIGluY2x1ZGVzXSwgcHlfZXhlY19wcmVmaXg9JHdpdGh2YWwpCitpZiB0ZXN0IHgkcHlfZXhlY19wcmVmaXggIT0geDsgdGhlbgorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitlbHNlCitweV9wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5wcmVmaXgiYAorcHlfZXhlY19wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5leGVjX3ByZWZpeCJgCitQWVRIT05fSU5DTFVERVM9Ii1JJHtweV9wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitpZiB0ZXN0ICIkcHlfcHJlZml4IiAhPSAiJHB5X2V4ZWNfcHJlZml4IjsgdGhlbgorICBQWVRIT05fSU5DTFVERVM9IiRQWVRIT05fSU5DTFVERVMgLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZmkKK2ZpCitBQ19TVUJTVChQWVRIT05fSU5DTFVERVMpCitkbmwgY2hlY2sgaWYgdGhlIGhlYWRlcnMgZXhpc3Q6CitzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCitDUFBGTEFHUz0iJENQUEZMQUdTICRQWVRIT05fSU5DTFVERVMiCitBQ19UUllfQ1BQKFsjaW5jbHVkZSA8UHl0aG9uLmg+XSxkbmwKK1tBQ19NU0dfUkVTVUxUKGZvdW5kKQorJDFdLGRubAorW0FDX01TR19SRVNVTFQobm90IGZvdW5kKQorJDJdKQorQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorXSkKKworZG5sCitkbmwgSkhfQUREX0NGTEFHKEZMQUcpCitkbmwgY2hlY2tzIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgdGhlIGdpdmVuIGZsYWcsIGFuZCBpZiBzbywgYWRkcworZG5sIGl0IHRvICRDRkxBR1MuICBJZiB0aGUgZmxhZyBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGxpc3QsIHRoZW4gdGhlCitkbmwgY2hlY2sgaXMgbm90IHBlcmZvcm1lZC4KK0FDX0RFRlVOKFtKSF9BRERfQ0ZMQUddLAorWworY2FzZSAiICRDRkxBR1MgIiBpbgorKkA8OkBcCVwgQDo+QCQxQDw6QFwJXCBAOj5AKikKKyAgOzsKKyopCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgJDEiCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBbJF1DQyB1bmRlcnN0YW5kcyAkMV0pCisgIEFDX1RSWV9DT01QSUxFKFtdLCBbXSwgW2poX2hhc19vcHRpb249eWVzXSwgW2poX2hhc19vcHRpb249bm9dKQorICBBQ19NU0dfUkVTVUxUKCRqaF9oYXNfb3B0aW9uKQorICBpZiB0ZXN0ICRqaF9oYXNfb3B0aW9uID0gbm87IHRoZW4KKyAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgZmkKKyAgOzsKK2VzYWNdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hZGQtZ3RrLXR5cGVzLmRlZnMtaW50by1nZGsuYy1kZXBlbmRlbmNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hZGQtZ3RrLXR5cGVzLmRlZnMtaW50by1nZGsuYy1kZXBlbmRlbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMGY5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworYWRkIGd0ay10eXBlcy5kZWZzIGludG8gZ2RrLmMgZGVwZW5kZW5jZQorCitnZGsuYyBkZXBlbmRzIG9uIGd0ay10eXBlcy5kZWZzIGJ1dAorZ2RrL01ha2VmaWxlLmFtIG1pc3MgdGhpcy4gVGhpcyB3aWxsIGNhdXNlCitidWlsZCBlcnJvciBzb21ldGltZXMgd2hlbiBidWlsdAord2l0aCBtdWx0aS1qb2JiaW5nLCBzbyBhZGQgZ3RrLXR5cGVzLmRlZnMgaW50bworZ2RrLmMgZGVwZW5kZW5jZS4KKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGd0ay9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9NYWtlZmlsZS5hbSBiL2d0ay9NYWtlZmlsZS5hbQoraW5kZXggN2JiNWQwYy4uNGE4ODM1MSAxMDA2NDQKKy0tLSBhL2d0ay9NYWtlZmlsZS5hbQorKysrIGIvZ3RrL01ha2VmaWxlLmFtCitAQCAtMjE0LDcgKzIxNCw3IEBAIGd0a3VuaXhwcmludC5kZWZzOiAkKEdUS1VOSVhQUklOVF9ERUZTKSBNYWtlZmlsZQorIGd0a3VuaXhwcmludC10eXBlcy5kZWZzOiAkKEdUS1VOSVhQUklOVF9UWVBFU19ERUZTKSBNYWtlZmlsZQorIAkkKENSRUFURURFRlMpICRAICQoR1RLVU5JWFBSSU5UX1RZUEVTX0RFRlMpCisgCistZ2RrLmM6IGdkay10eXBlcy5kZWZzIGdkay5kZWZzICQoR0RLX09WRVJSSURFUykKKytnZGsuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMgZ2RrLmRlZnMgJChHREtfT1ZFUlJJREVTKQorIGd0ay5jOiBnZGstdHlwZXMuZGVmcyBndGstdHlwZXMuZGVmcyBndGsuZGVmcyBnZGstdHlwZXMuZGVmcyAkKEdUS19PVkVSUklERVMpCisgX2d0a19sYV9DRkxBR1MgPSAkKFBZQ0FJUk9fQ0ZMQUdTKSAkKEdUS19DRkxBR1MpCisgX2d0a19sYV9MREZMQUdTID0gJChjb21tb25fbGRmbGFncykgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IGluaXRfZ3RrCistLSAKKzEuNy40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LWd0a3VuaXhwcmludC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LWd0a3VuaXhwcmludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMwZThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcHlndGstMi4yNC4wL2d0ay9ndGt1bml4cHJpbnQub3ZlcnJpZGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjI0LjAub3JpZy9ndGsvZ3RrdW5peHByaW50Lm92ZXJyaWRlCisrKysgcHlndGstMi4yNC4wL2d0ay9ndGt1bml4cHJpbnQub3ZlcnJpZGUKK0BAIC0xMDIsMTEgKzEwMiw2IEBAIF93cmFwX2d0a19wcmludF9qb2JfZ2V0X3N1cmZhY2UoUHlHT2JqZWMKKyAgICAgaWYgKHB5Z19lcnJvcl9jaGVjaygmZXJyb3IpKQorICAgICAgICAgcmV0dXJuIE5VTEw7CisgCistI2lmIFBZQ0FJUk9fVkVSU0lPTl9IRVggPj0gMHgxMDEwNjAwCistICAgIHJldHVybiBQeWNhaXJvU3VyZmFjZV9Gcm9tU3VyZmFjZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKSwgTlVMTCk7CistI2Vsc2UKKy0gICAgcmV0dXJuIFB5Y2Fpcm9TdXJmYWNlX0Zyb21TdXJmYWNlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpLCBOVUxMLCBOVUxMKTsKKy0jZW5kaWYKKyB9CisgJSUKKyBvdmVycmlkZSBndGtfcHJpbnRfam9iX3NlbmQga3dhcmdzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1weWd0ay0yLjAucGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1weWd0ay0yLjAucGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxNTY1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBweWd0ay0yLjI0LjAvcHlndGstMi4wLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4yNC4wLm9yaWcvcHlndGstMi4wLnBjLmluCisrKysgcHlndGstMi4yNC4wL3B5Z3RrLTIuMC5wYy5pbgorQEAgLTEsNSArMSw2IEBACisgcHJlZml4PUBwcmVmaXhACisgZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorIGluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisgZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorIGRhdGFkaXI9QGRhdGFkaXJACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL25vZG9jcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvbm9kb2NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNzMwOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL25vZG9jcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBweWd0ay0yLjE3LjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjE3LjAub3JpZy9NYWtlZmlsZS5hbQorKysrIHB5Z3RrLTIuMTcuMC9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBAIGlmIEJVSUxEX0dUSworICAgR1RLX1NVQkRJUiA9IGd0aworIGVuZGlmCisgCistU1VCRElSUyA9IC4gJChHVEtfU1VCRElSKSBleGFtcGxlcyB0ZXN0cyBkb2NzCisrU1VCRElSUyA9IC4gJChHVEtfU1VCRElSKSBleGFtcGxlcyB0ZXN0cworIAorIFBMQVRGT1JNX1ZFUlNJT04gPSAyLjAKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHJldmVudF90b19nZXRfZGlzcGxheV9kdXJpbmdfaW1wb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMDM4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHJldmVudF90b19nZXRfZGlzcGxheV9kdXJpbmdfaW1wb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcHlndGstMi4xMC40L2d0ay9fX2luaXRfXy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Z3RrLTIuMTAuNC5vcmlnL2d0ay9fX2luaXRfXy5weQkyMDA3LTExLTI3IDE5OjI3OjA1LjAwMDAwMDAwMCAtMDMwMAorKysrIHB5Z3RrLTIuMTAuNC9ndGsvX19pbml0X18ucHkJMjAwNy0xMS0yNyAxOToyODoyMi4wMDAwMDAwMDAgLTAzMDAKK0BAIC03OCw3ICs3OCw4IEBACisgCisga2V5c3ltcyA9IExhenlNb2R1bGUoJ2tleXN5bXMnLCBsb2NhbHMoKSkKKyAKKy1faW5pdCgpCisraWYgbm90IGhhc2F0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdweXRob25fbGF1bmNoZXJfZW5hYmxlZCcpOgorKyAgICBfaW5pdCgpCisgCisgIyBDQVBJCisgX1B5R3RrX0FQSSA9IF9ndGsuX1B5R3RrX0FQSQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9weXRob24tcHlndGsyL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MThmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw5MCBAQAorIyMgdGhpcyBvbmUgaXMgY29tbW9ubHkgdXNlZCB3aXRoIEFNX1BBVEhfUFlUSE9ORElSIC4uLgorZG5sIEFNX0NIRUNLX1BZTU9EKE1PRE5BTUUgWyxTWU1CT0wgWyxBQ1RJT04tSUYtRk9VTkQgWyxBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQorZG5sIENoZWNrIGlmIGEgbW9kdWxlIGNvbnRhaW5pbmcgYSBnaXZlbiBzeW1ib2wgaXMgdmlzaWJsZSB0byBweXRob24uCitBQ19ERUZVTihBTV9DSEVDS19QWU1PRCwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitweV9tb2RfdmFyPWBlY2hvICQxWydfJ10kMiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK0FDX01TR19DSEVDS0lORyhmb3IgaWZlbHNlKFskMl0sW10sLFskMiBpbiBdKXB5dGhvbiBtb2R1bGUgJDEpCitBQ19DQUNIRV9WQUwocHlfY3ZfbW9kXyRweV9tb2RfdmFyLCBbCitpZmVsc2UoWyQyXSxbXSwgW3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgJDEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIl0sIFtwcm9nPSIKK2ltcG9ydCAkMQorJDEuJDIiXSkKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiZBQ19GRF9DQyAyPiZBQ19GRF9DQworICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKK10pCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGlmZWxzZShbJDNdLCBbXSwsIFskMworXSlkbmwKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaWZlbHNlKFskNF0sIFtdLCwgWyQ0CitdKWRubAorZmkKK10pCisKK2RubCBhIG1hY3JvIHRvIGNoZWNrIGZvciBhYmlsaXR5IHRvIGNyZWF0ZSBweXRob24gZXh0ZW5zaW9ucworZG5sICBBTV9DSEVDS19QWVRIT05fSEVBREVSUyhbQUNUSU9OLUlGLVBPU1NJQkxFXSwgW0FDVElPTi1JRi1OT1QtUE9TU0lCTEVdKQorZG5sIGZ1bmN0aW9uIGFsc28gZGVmaW5lcyBQWVRIT05fSU5DTFVERVMKK0FDX0RFRlVOKFtBTV9DSEVDS19QWVRIT05fSEVBREVSU10sCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorQUNfTVNHX0NIRUNLSU5HKGZvciBoZWFkZXJzIHJlcXVpcmVkIHRvIGNvbXBpbGUgcHl0aG9uIGV4dGVuc2lvbnMpCitkbmwgZGVkdWNlIFBZVEhPTl9JTkNMVURFUworQUNfQVJHX1dJVEgocHl0aG9uLWluY2x1ZGVzLAorCVsgIC0td2l0aC1weXRob24taW5jbHVkZXM9RElSICBwYXRoIHRvIFB5dGhvbiBpbmNsdWRlc10sIHB5X2V4ZWNfcHJlZml4PSR3aXRodmFsKQoraWYgdGVzdCB4JHB5X2V4ZWNfcHJlZml4ICE9IHg7IHRoZW4KK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZWxzZQorcHlfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucHJlZml4ImAKK3B5X2V4ZWNfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMuZXhlY19wcmVmaXgiYAorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgoraWYgdGVzdCAiJHB5X3ByZWZpeCIgIT0gIiRweV9leGVjX3ByZWZpeCI7IHRoZW4KKyAgUFlUSE9OX0lOQ0xVREVTPSIkUFlUSE9OX0lOQ0xVREVTIC1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2ZpCitmaQorQUNfU1VCU1QoUFlUSE9OX0lOQ0xVREVTKQorZG5sIGNoZWNrIGlmIHRoZSBoZWFkZXJzIGV4aXN0Ogorc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUFlUSE9OX0lOQ0xVREVTIgorQUNfVFJZX0NQUChbI2luY2x1ZGUgPFB5dGhvbi5oPl0sZG5sCitbQUNfTVNHX1JFU1VMVChmb3VuZCkKKyQxXSxkbmwKK1tBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKyQyXSkKK0NQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKK10pCisKK2RubAorZG5sIEpIX0FERF9DRkxBRyhGTEFHKQorZG5sIGNoZWNrcyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBnaXZlbiBmbGFnLCBhbmQgaWYgc28sIGFkZHMKK2RubCBpdCB0byAkQ0ZMQUdTLiAgSWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBsaXN0LCB0aGVuIHRoZQorZG5sIGNoZWNrIGlzIG5vdCBwZXJmb3JtZWQuCitBQ19ERUZVTihbSkhfQUREX0NGTEFHXSwKK1sKK2Nhc2UgIiAkQ0ZMQUdTICIgaW4KKypAPDpAXAlcIEA6PkAkMUA8OkBcCVwgQDo+QCopCisgIDs7CisqKQorICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICQxIgorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgWyRdQ0MgdW5kZXJzdGFuZHMgJDFdKQorICBBQ19UUllfQ09NUElMRShbXSwgW10sIFtqaF9oYXNfb3B0aW9uPXllc10sIFtqaF9oYXNfb3B0aW9uPW5vXSkKKyAgQUNfTVNHX1JFU1VMVCgkamhfaGFzX29wdGlvbikKKyAgaWYgdGVzdCAkamhfaGFzX29wdGlvbiA9IG5vOyB0aGVuCisgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIGZpCisgIDs7Citlc2FjXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQ5NTRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gZGMwMjRlOTA3OWJiZmZiYjQ0NDM2YmEzZTcwYTc1OGViYWQ1NTIwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJTb25nLkxpIiA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCA1IEphbiAyMDEzIDE0OjU1OjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZSBkZXBlbmRlbmNlcyBvZiBkZWZzLmMgaW4gTWFrZWZpbGUuYW0KKworSW4gZ3RrL01ha2VmaWxlLmFtLCBkZWZzLmMgc2hvdWxkIGRlcGVuZGVzIG9uIGdkay10eXBlcy5kZWZzIGFuZAorZ3RrLXR5cGVzLmRlZnMsIG90aGVyd2lzZSBpdCBmYWlscyBvY2Nhc2lvbmFsbHkgd2hlbiBwYXJhbGxlbCBjb21waWxlLgorVGhlIGVycm9yIG1lc3NhZ2U6CisiSU9FcnJvcjogW0Vycm5vIDJdIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICdndGstdHlwZXMuZGVmcyciCisKK0FkZCB0aGVtIHRvIGRlcGVuZGVuY2VzIG9mIGRlZnMuYyB0byBmaXggdGhpcyBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI3MDYKKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGd0ay9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2d0ay9NYWtlZmlsZS5hbSBiL2d0ay9NYWtlZmlsZS5hbQoraW5kZXggN2JiNWQwYy4uOTE4MjZjYiAxMDA2NDQKKy0tLSBhL2d0ay9NYWtlZmlsZS5hbQorKysrIGIvZ3RrL01ha2VmaWxlLmFtCitAQCAtMjg5LDcgKzI4OSw3IEBAIGlmIEhBVkVfR0lPX1RZUEVTX0RFRlMKKyBleHRyYV9jb2RlZ2VuX2FyZ3MgKz0gLS1yZWdpc3RlciAkKFBZR09CSkVDVF9ERUZTRElSKS9naW8tdHlwZXMuZGVmcworIGVuZGlmCisgCistLmRlZnMuYzogCisrLmRlZnMuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMKKyAJKCQoUFlUSE9OKSAkKENPREVHRU5ESVIpL2NvZGVnZW4ucHkgXAorIAkgICAkKFBZR1RLX0NPREVHRU5fREVGSU5FUykgXAorIAkgICAgLUkgJChzcmNkaXIpIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrXzIuMjQuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGtfMi4yNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzMzYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrXzIuMjQuMC5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIEdUSysgVUkgdG9vbGtpdCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorIyBuZWVkcyBndGsrIDIuMTcueAorREVQRU5EUyA9ICJndGsrIGxpYmdsYWRlIHB5dGhvbi1weWNhaXJvIHB5dGhvbi1weWdvYmplY3QiCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tc2hlbGwgcHl0aG9uLXB5Y2Fpcm8gcHl0aG9uLXB5Z29iamVjdCIKK1BST1ZJREVTID0gInB5dGhvbi1weWd0azIiCitTUkNOQU1FID0gInB5Z3RrIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL3B5Z3RrLzIuMjQvJHtTUkNOQU1FfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWd0a3VuaXhwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2NzLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LXB5Z3RrLTIuMC5wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8vdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImExMDUxZDU3OTRmZDc2OTZkM2MxYWY2NDIyZDE3YTQ5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNkMWMxZWEyNjViZDYzZmY2NjllOTJhMmQzYzJhODhlYjI2YmNkOWU1MzYzZTBmODJjODk2ZTY0OWYyMDY5MTIiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3MgLS13aXRoLXB5dGhvbi1pbmNsdWRlcz0ke1NUQUdJTkdfSU5DRElSfS8uLi8iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0dXRpbHMtYmFzZQorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KKwlzZWQgLWkgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZSBkZWZzZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfS9weWdvYmplY3QvMi4wL2RlZnNcIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHlndGtpbmNsdWRlZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19JTkNESVJ9L3B5Z3RrLTIuMFwiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZT1kYXRhZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfVwiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZSBjb2RlZ2VuZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfS9weWdvYmplY3QvMi4wL2NvZGVnZW5cIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Zml4eHJlZiBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn0vcHlnb2JqZWN0L3hzbC9maXh4cmVmLnB5XCI6ZyBcCisJCSR7U30vY29uZmlndXJlLmFjCit9CisKKyMgZGlydHkgZml4ICMyOiBmaXggYnVpbGQgc3lzdGVtIHBhdGhzIGxlYWtpbmcgaW4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAnMXN8XiMhLipweXRob258IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJHtEfSR7YmluZGlyfS9weWd0ay1kZW1vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1kZW1vIgorRklMRVNfJHtQTn0tZGVtbyA9ICIgJHtiaW5kaXJ9L3B5Z3RrLWRlbW8gJHtsaWJkaXJ9L3B5Z3RrICIKK1JERVBFTkRTXyR7UE59LWRlbW8gPSAicHl0aG9uLXB5Z3RrIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLWxhbmciCisKKyMgdG9kbzogcmV2YW1wIHBhY2thZ2luZywgcGFja2FnZSBkZW1vIHNlcGVyYXRseQorRklMRVNfJHtQTn0tZGV2ICs9ICIgJHtsaWJkaXJ9L3B5Z3RrLzIuMCAke2JpbmRpcn0vcHlndGstKiAke2RhdGFkaXJ9L3B5Z3RrLzIuMCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4LW5hdGl2ZV8wLjkuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVmMWFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIHB5dGhvbi1weXJleF8ke1BWfS5iYgoraW5oZXJpdCBuYXRpdmUgcHl0aG9ubmF0aXZlCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCitQUiA9ICJyMyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgvcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC9weXJleC1maXgtb3B0aW1pemVkLW1vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4YzMyOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgvcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHlyZXgtMC45LjguNC9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHlyZXgtMC45LjguNC5vcmlnL1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKKysrKyBQeXJleC0wLjkuOC40L1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKK0BAIC0xNSw3ICsxNSw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgd2FybmluZ3MgPSBOb25lCisgCisgY2xhc3MgRXh0ZW5zaW9uKF9FeHRlbnNpb24uRXh0ZW5zaW9uKToKKy0gICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyArIFwKKysgICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyBvciAiIiArIFwKKyAgICAgIiIicHlyZXhfaW5jbHVkZV9kaXJzIDogW3N0cmluZ10KKyAgICAgICAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBQeXJleCBoZWFkZXIgZmlsZXMgKC5weGQpIChpbgorICAgICAgICAgVW5peCBmb3JtIGZvciBwb3J0YWJpbGl0eSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXhfMC45LjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGQyZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTGFuZ3VhZ2UgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzIgorREVTQ1JJUFRJT04gPSAiUHlyZXggaXMgYSBsYW5ndWFnZSBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzLiBcCitJdCdzIGRlc2lnbmVkIHRvIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIG5pY2UsIGhpZ2gtbGV2ZWwsIGVhc3ktdG8tdXNlIHdvcmxkIG9mIFB5dGhvbiBcCithbmQgdGhlIG1lc3N5LCBsb3ctbGV2ZWwgd29ybGQgb2YgQy4iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT03NzFkNDcyZjUzZjkzMzAzM2Y1N2VlZWU3ODA4ZTViZCIKK1NSQ05BTUUgPSAiUHlyZXgiCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorICBmaWxlOi8vcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxNWRlZTY3ZDE1ZDQzOTM4NDFlMmQ2MGU4MzQxOTQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmODdkZjA2ODMxZDBiMzQxMmViNGJjOWQzZmMyZWU3YmZhZTFiOTEzZDdkYThjMjNhYjJiZjU2OTlmYjZiNTAiCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0ke2Jhc2VfbGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvUHlyZXgvQ29tcGlsZXIvTGV4aWNvbi5waWNrbGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjMuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnMtbmF0aXZlXzIuMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTg5YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjMuNi5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcHl0aG9uLXNjb25zXyR7UFZ9LmJiCitpbmhlcml0IG5hdGl2ZSBweXRob25uYXRpdmUKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9zY29ucyBTQ09OU19MSUJfRElSPScke1NUQUdJTkdfRElSX0hPU1R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9JworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjMuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhZDdkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSBDb25zdHJ1Y3Rpb24gdG9vbCAobWFrZS9hdXRvdG9vbHMgcmVwbGFjZW1lbnQpIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0yM2JjMTUzMGM1NWU5ZjBkMWI3MDkwNTZiY2VhMjM3ZCIKK1NSQ05BTUUgPSAic2NvbnMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Njb25zL3Njb25zLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjljNmExYzNjNzE2Y2JlNWYxNjUxNWYxNjNjOTFkOTI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4YWRhYTM1MWQ4ZjRlNDA2OGE1YmYxODk0YmRkN2Y4NWIzOTBjOGMzZjgwZDQzN2NmOGJiMjY2MDEyNDA0ZGYiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzE4LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGUyYjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzE4LjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJEb3dubG9hZHMsIGJ1aWxkcywgaW5zdGFsbHMsIHVwZ3JhZGVzLCBhbmQgdW5pbnN0YWxscyBQeXRob24gcGFja2FnZXMiCitIT01FUEFHRSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NldHVwdG9vbHMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUHl0aG9uLTIuMCB8IFpQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXR1cC5weTtiZWdpbmxpbmU9Nzg7ZW5kbGluZT03ODttZDU9OGEzMTQyNzBkZDdhOGRiY2E3NDE3NzU0MTVmMTcxNmUiCisKK1NSQ05BTUUgPSAic2V0dXB0b29scyIKKworUFJPVklERVMgPSAicHl0aG9uLWRpc3RyaWJ1dGUiCisKK0RFUEVORFMgKz0gInB5dGhvbiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24tbmF0aXZlIgorCitpbmhlcml0IGRpc3R1dGlscworCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NldHVwdG9vbHMvc2V0dXB0b29scy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNTJiNGU0ODkzOWVmMzExZDcyMDRmOGZlOTQwNzY0ZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDk5NGE1OGRmMjdlYTVkYzUyMzc4MmE2MDEzNTdhMjE5OGI3NDkzZGNjOTlhMzBkNTE4MjdhMjM1ODViNWIxZCIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzCit9CisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uLXN0cmluZ29sZCBcCisgIHB5dGhvbi1lbWFpbCBcCisgIHB5dGhvbi1zaGVsbCBcCisgIHB5dGhvbi1kaXN0dXRpbHMgXAorICBweXRob24tY29tcHJlc3Npb24gXAorIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyIKKworUlJFUExBQ0VTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUlBST1ZJREVTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1mb3ItcnBtLWlnbm9yZXNpemUtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI3ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1mb3ItcnBtLWlnbm9yZXNpemUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorcHl0aG9uLXNtYXJ0cG06IEFkZCBjaGVja2luZyBmb3IgInJwbS1pZ25vcmVzaXplIiBvcHRpb24KKworVGhlIGRvX3Jvb3RmcyB0YWtlcyBhIHZlcnkgbG9uZyB0aW1lIHdoZW4gYnVpbGQgaG9zdCBoYXMgbW91bnRlZCBtYW55IE5GUworZGV2aWNlcy4gc3lzY2FsbCBsc3RhdCgpIHdhcyBiZWluZyBjYWxsZWQgb24gZXZlcnkgZmlsZXN5c3RlbSBtb3VudGVkIG9uIHRoZQorYnVpbGQgaG9zdCBkdXJpbmcgYnVpbGRpbmcuCitUaGUgcmVhc29uIGZvciB0aGUgbHN0YXQoKSBpcyB0aGF0IHJwbSBpcyB2ZXJpZnlpbmcgdGhhdCBlbm91Z2ggZnJlZSBkaXNrIHNwYWNlCitpcyBhdmFpbGFibGUgdG8gZG8gdGhlIGluc3RhbGwuIEhvd2V2ZXIsIHNpbmNlIHRoZSBpbnN0YWxsIGlzIGludG8gdGhlIHRhcmdldAorcm9vdGZzIGl0IHNob3VsZCBub3QgbWF0dGVyIGhvdyBtdWNoIGZyZWUgc3BhY2UgdGhlcmUgaXMgaW4gdGhlIGhvc3QgbW91bnRzLgorQWRkIGNoZWNraW5nIGZvciAicnBtLWlnbm9yZXNpemUiLCBieSBpdCwgc21hcnQgY2FuIG1ha2Ugd2hldGhlciBSUE0gc2tpcAorY2hlY2tpbmcgZm9yIGRpc2tzcGFjZSB3aGVuIGluc3RhbGwgYSBycG0gcGFja2FnZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IHdlbmxpbi5rYW5nIDx3ZW5saW4ua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBzbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK2luZGV4IDVkYTllZTYuLmYwNDg4ZWMgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTI0MSw2ICsyNDEsMTAgQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX0lHTk9SRUFSQ0gKKyAKKysgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0taWdub3Jlc2l6ZSIsIEZhbHNlKToKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9ESVNLTk9ERVMKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9ESVNLU1BBQ0UKKysKKyAgICAgICAgIGlmIGZvcmNlIG9yIHJlaW5zdGFsbDoKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9SRVBMQUNFUEtHCisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRU9MREZJTEVTCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hbHJlYWR5LWluc3RhbGxlZC1tZXNzYWdlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1NTU1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hbHJlYWR5LWluc3RhbGxlZC1tZXNzYWdlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYTc0YTlhOWViOWQ3NTk2NGEwZTk3ODk1MGU4YjE5MWQ3YTE4ZDc2MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogRnJpLCA1IEp1biAyMDE1IDE3OjA3OjE2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNtYXJ0OiBjaGFuZ2UgImlzIGFscmVhZHkgaW5zdGFsbGVkIiBtZXNzYWdlIGZyb20gd2FybmluZyB0bworIGluZm8KKworVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgYSB3YXJuaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBzbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5ICAgICAgICAgICAgfCA0ICsrLS0KKyBzbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5IGIvc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weQoraW5kZXggNmVmOTY4Mi4uODBkNDU2YiAxMDA2NDQKKy0tLSBhL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKKysrKyBiL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKK0BAIC0xNTIsNyArMTUyLDcgQEAgZGVmIG1haW4oY3RybCwgb3B0cyk6CisgICAgICAgICAgICAgZm9yIG9iaiBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG9iai5wYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgIGlmIHBrZy5pbnN0YWxsZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyAoZm9yICVzKSBpcyBhbHJlYWR5IGluc3RhbGxlZCIpCisrICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuaW5mbyhfKCIlcyAoZm9yICVzKSBpcyBhbHJlYWR5IGluc3RhbGxlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGFyZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCitAQCAtMTg0LDcgKzE4NCw3IEBAIGRlZiBtYWluKGN0cmwsIG9wdHMpOgorICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgcGtnID0gbmFtZXNbbmFtZV1bMF0KKyAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIiVzIGlzIGFscmVhZHkgaW5zdGFsbGVkIikgJSBwa2cpCisrICAgICAgICAgICAgICAgIGlmYWNlLmluZm8oXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICB0cmFucy5lbnF1ZXVlKHBrZywgSU5TVEFMTCkKKyAKK2RpZmYgLS1naXQgYS9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkgYi9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKK2luZGV4IDk4NjU1ODQuLjE5MDg2N2IgMTAwNjQ0CistLS0gYS9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKKysrKyBiL3NtYXJ0L2ludGVyZmFjZXMvdGV4dC9pbnRlcmFjdGl2ZS5weQorQEAgLTI3OCw3ICsyNzgsNyBAQCBjbGFzcyBJbnRlcnByZXRlcihDbWQpOgorICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICBwa2cgPSBuYW1lc1tuYW1lXVswXQorICAgICAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorKyAgICAgICAgICAgICAgICAgICAgaWZhY2UuaW5mbyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5lbnF1ZXVlKHBrZywgSU5TVEFMTCkKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjcyYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK1NhZGx5LCBzbWFydCBpcyBub3QgZGV0ZXJtaW5pc3RpYyBzbyB0aGUgc2FtZSBidWlsZCBjYW4gZ28gZG93biBtdWx0aXBsZSBkaWZmZXJlbnQKK3BhdGh3YXlzLiBXZSdkIGV4cGVjdCB0byBzZWUgdGhlIHNhbWUgd2FybmluZ3MgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlIHBhdGh3YXkKK3Rha2VuLCBpdCBtYXkgb3IgbWF5IG5vdCB3YXJuLCBwYXJ0aWN1bGFybHkgd2l0aCBSZWNvbW1lbmRzIHNpbmNlIHRoZXkncmUgb3B0aW9uYWwuCisKK0ZvciBleGFtcGxlLCB3aGVyZSBhIFJlY29tbWVuZGVkIHBhY2thZ2UgaXMgYXZhaWxhYmxlIGJ1dCBoYXMgQ29uZmxpY3RzLCB3ZSdkIGV4cGVjdAordG8gc2VlIGFuIHdhcm5pbmcgdGhhdCB3ZSBjb3VsZG4ndCBpbnN0YWxsIGl0LiBTb21lIGNvZGUgcGF0aHMgc2lsZW50bHkgaGlkZSB0aGlzCisoaXRzIGEgTE9DS0VEX0NPTkZMSUNUKS4gV2UgYWRkIHByaW50aW5nIG9mIHdhcm5pbmdzIGZvciB0aGlzIGNhc2UuCisKK0Fsc28sIGlmIHRoZXJlIGFyZSB0d28gY29tcGF0aWJsZSBmZWVkcyBhdmFpbGFibGUgKGUuZy4gaTU4NiBhbmQgY29yZTJfMzIpLCB0aGlzIAorY2hhbmdlcyB0aGUgY29kZSBwYXRoIGZyb20gZGlyZWN0IF9pbnN0YWxsKCkgdG8gX3BlbmRpbmcoKSBzaW5jZSB0aGVyZSBhcmUgbXVsdGlwbGUKK3Byb3ZpZGVycy4gVGhpcyBwYXRjaCBhZGRzIHdhcm5pbmcgaGFuZGxpbmcgdG8gX3BlbmRpbmcoKSBzbyB3ZSBkb24ndCBoaXQgaGFyZCAKK2ZhaWx1cmVzIHRoZXJlLiBUaGlzIGlzIGFzIHNlZW4gd2l0aCB0aGUgbXlzdGVyaW91cyBsaWJzcGVleGRzcCBmYWlsdXJlcyBmb3IgeDg2LWxzYgorb24gdGhlIGF1dG9idWlsZGVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQCisyMDE1LzcvMTYKKworSW5kZXg6IGdpdC9zbWFydC90cmFuc2FjdGlvbi5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CisrKysgZ2l0L3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitAQCAtNjUxLDEzICs2NTEsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgICAgICBpZiBub3QgcHJ2cGtnczoKKyAgICAgICAgICAgICAgICAgIyBObyBwYWNrYWdlcyBwcm92aWRlIGl0IGF0IGFsbC4gR2l2ZSB1cC4KKysKKysgICAgICAgICAgICAgICAgcmVhc29ucyA9IFtdCisrICAgICAgICAgICAgICAgIGZvciBwcnYgaW4gcmVxLnByb3ZpZGVkYnk6CisrICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2cGtnIGluIHBydi5wYWNrYWdlczoKKysgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRyZXMgPSBsb2NrZWRwa2dzLmdldChwcnZwa2csIE5vbmUpCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9ja2VkcmVzOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLmFwcGVuZChsb2NrX3JlYXNvbihwcnZwa2csIGxvY2tlZHJlcykpCisgICAgICAgICAgICAgICAgIGlmIHJlcXJlcXVpcmVkOgorLSAgICAgICAgICAgICAgICAgICAgcmVhc29ucyA9IFtdCistICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2IGluIHJlcS5wcm92aWRlZGJ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcnZwa2cgaW4gcHJ2LnBhY2thZ2VzOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRyZXMgPSBsb2NrZWRwa2dzLmdldChwcnZwa2csIE5vbmUpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2tlZHJlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKGxvY2tfcmVhc29uKHBydnBrZywgbG9ja2VkcmVzKSkKKyAgICAgICAgICAgICAgICAgICAgIGlmIHJlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiB1bmFibGUgdG8gaW5zdGFsbCBwcm92aWRlciBmb3IgJXM6XG4gICAgJXMiKSAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcSwgJ1xuICAgICcuam9pbihyZWFzb25zKSkKK0BAIC02NjUsNyArNjY2LDExIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBubyBwYWNrYWdlIHByb3ZpZGVzICVzIikgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEpCisgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBpZiByZWFzb25zOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiQ2FuJ3QgaW5zdGFsbCAlczogdW5hYmxlIHRvIGluc3RhbGwgcHJvdmlkZXIgZm9yICVzOlxuICAgICVzIikgJSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEsICdcbiAgICAnLmpvaW4ocmVhc29ucykpKQorKworICAgICAgICAgICAgICAgICAgICAgIyBJdCdzIG9ubHkgYSByZWNvbW1lbmQsIHNraXAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgCisgICAgICAgICAgICAgaWYgbGVuKHBydnBrZ3MpID09IDE6CitAQCAtODQ2LDYgKzg1MiwxNCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgaXNpbnN0ID0gY2hhbmdlc2V0Lmluc3RhbGxlZAorICAgICAgICAgZ2V0d2VpZ2h0ID0gc2VsZi5fcG9saWN5LmdldFdlaWdodAorIAorKyAgICAgICAgYXR0ZW1wdCA9IHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpCisrCisrICAgICAgICBkZWYgaGFuZGxlX2ZhaWx1cmUobXNnKToKKysgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKG1zZykKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIG1zZworKworICAgICAgICAgdXBkb3duID0gW10KKyAgICAgICAgIHdoaWxlIHBlbmRpbmc6CisgICAgICAgICAgICAgaXRlbSA9IHBlbmRpbmcucG9wKDApCitAQCAtODcwLDggKzg4NCw5IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgCisgICAgICAgICAgICAgICAgIGlmIG5vdCBwcnZwa2dzOgorICAgICAgICAgICAgICAgICAgICAgIyBObyBwYWNrYWdlcyBwcm92aWRlIGl0IGF0IGFsbC4gR2l2ZSB1cC4KKy0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogbm8gcGFja2FnZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVzICVzIikgJSAocGtnLCByZXEpCisrICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCBpbnN0YWxsICVzOiBubyBwYWNrYWdlICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXMgJXMiKSAlIChwa2csIHJlcSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgICAgICBpZiBsZW4ocHJ2cGtncykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgIyBNb3JlIHRoYW4gb25lIHBhY2thZ2UgcHJvdmlkZSBpdC4gV2UgdXNlIF9wZW5kaW5nIGhlcmUsCitAQCAtODk0LDkgKzkwOSwxMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwb3JkZXIsIGNzLCBsaykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBvcmRlciArPSAwLjAwMDAwMQorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFsdGVybmF0aXZlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgaW5zdGFsbCAlczogYWxsIHBhY2thZ2VzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGluZyAlcyBmYWlsZWQgdG8gaW5zdGFsbDpcbiVzIilcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHJlcSwgICJcbiIuam9pbihmYWlsdXJlcykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHJlcSwgICJcbiIuam9pbihmYWlsdXJlcykpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuc29ydCgpCisgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0U3RhdGUoYWx0ZXJuYXRpdmVzWzBdWzFdKQorICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGFsdGVybmF0aXZlcykgPT0gMToKK0BAIC05NTQsMTggKzk3MCwyMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQgYW5kIGlzaW5zdChyZXFwa2cpOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgcmVtb3ZlICVzOiByZXF1aXJpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgJXMgaXMgbG9ja2VkIikgJSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBmb3IgcmVxcGtnIGluIHJlcXBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBjaGVjayBhZ2Fpbiwgc2luY2Ugb3RoZXIgYWN0aW9ucyBtYXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlZCB0aGVpciBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KHJlcXBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxcGtnIGluIGxvY2tlZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICVzIGlzIGxvY2tlZCIpICUgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShyZXFwa2csIGNoYW5nZXNldCwgbG9ja2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLCBkZXB0aCkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCitAQCAtOTc4LDEyICs5OTYsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQgYW5kIGlzaW5zdChyZXFwa2cpOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjcy5pbnN0YWxsZWQocmVxcGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbGs6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHJlcXBrZywgY3MsIGxrLCBOb25lLCBkZXB0aCkKKyAgICAgICAgICAgICAgICAgZXhjZXB0IEZhaWxlZCwgZToKKyAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh1bmljb2RlKGUpKQorQEAgLTk5MSw5ICsxMDExLDEwIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKChnZXR3ZWlnaHQoY3MpLCBjcywgbGspKQorIAorICAgICAgICAgICAgICAgICBpZiBub3QgYWx0ZXJuYXRpdmVzOgorLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgcHJvdmlkaW5nICIKKysgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyBwcm92aWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBmYWlsZWQgdG8gaW5zdGFsbDpcbiVzIikgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHBydiwgICJcbiIuam9pbihmYWlsdXJlcykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgcHJ2LCAgIlxuIi5qb2luKGZhaWx1cmVzKSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuc29ydCgpCisgICAgICAgICAgICAgICAgIGNoYW5nZXNldC5zZXRTdGF0ZShhbHRlcm5hdGl2ZXNbMF1bMV0pCitAQCAtMTI0Niw2ICsxMjY3LDcgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldFJlcXVlc3RlZChwa2csIFRydWUpCisgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRmFpbGVkLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIkNhbid0IGluc3RhbGwgJXM6ICVzIikgJSAocGtnLCBzdHIoZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2cgaW4gY2hhbmdlc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOThlMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaApAQCAtMCwwICsxLDE3NyBAQAorRnJvbSBiMTA1ZTdmZTgxMmRhM2NjYWY3MTU1YzBmZTE0Yzg3MjhiMGQzOWE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMCBKYW4gMjAxNCAxNDozMDo1MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBBZGQgbWVjaGFuaXNtIHRvIGF0dGVtcHQgaW5zdGFsbCB3aXRob3V0IGZhaWxpbmcKKworSW4gT3BlbkVtYmVkZGVkLCBmb3IgY29tcGxlbWVudGFyeSBhbmQgJ2F0dGVtcHRvbmx5JyBwYWNrYWdlIHByb2Nlc3NpbmcsCit3ZSBuZWVkIGEgd2F5IHRvIGluc3RydWN0IHNtYXJ0IHRvIHRyeSB0byBpbnN0YWxsLCBidXQgaWdub3JlIGFueQorZmFpbHVyZXMgKHVzdWFsbHkgY29uZmxpY3RzKS4KKworVGhpcyBvcHRpb24gb25seSB3b3JrcyBmb3IgdGhlIGluc3RhbGwgb3BlcmF0aW9uLgorCitJZiBhIGNvbXBsZW1lbnRhcnkgaW5zdGFsbCBmYWlscywgYW4gYWN0dWFsIGVycm9yIG9jY3VycmVkLCBvbmUgdGhhdAord2UgY2FuJ3QgaWdub3JlIHdpdGhvdXQgbG9zaW5nIHRoZSBlbnRpcmUgYXR0ZW1wdGVkIHRyYW5zYWN0aW9uLiAgS2VlcAordGhpcyBhcyBhbiBlcnJvciBzbyB0aGF0IHdlIGNhbiBjYXRjaCB0aGVzZSBjYXNlcyBpbiB0aGUgZnV0cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGJhY2tlbmRzL3JwbS9wbS5weSB8ICAgMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyB0cmFuc2FjdGlvbi5weSAgICAgfCAgIDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3MSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQoraW5kZXggOWJiZDk1Mi4uYmE2NDA1YSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitAQCAtMjQxLDE1ICsyNDEsNDggQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgY2IgPSBSUE1DYWxsYmFjayhwcm9nLCB1cGdyYWRlZG5hbWVzKQorICAgICAgICAgY2IuZ3JhYk91dHB1dChUcnVlKQorICAgICAgICAgcHJvYnMgPSBOb25lCisrICAgICAgICByZXRyeSA9IDAKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBwcm9icyA9IHRzLnJ1bihjYiwgTm9uZSkKKyAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgZGVsIGdldFRTLnRzCisgICAgICAgICAgICAgY2IuZ3JhYk91dHB1dChGYWxzZSkKKysgICAgICAgICAgICBpZiBwcm9icyBhbmQgc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSk6CisrICAgICAgICAgICAgICAgIGRlZiByZW1vdmVfY29uZmxpY3QocGtnTkVWUik6CisrICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGNoYW5nZXNldC5rZXlzKCk6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnTkVWUiA9PSBzdHIoa2V5KToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtrZXldCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBwa2dwYXRoc1trZXldCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoIlJlbW92aW5nICVzIGR1ZSB0byBmaWxlICVzIGNvbmZsaWN0aW5nIHdpdGggJXMiICUgKHBrZ05FVlIsIGZuYW1lLCBhbHRORVZSKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysKKysgICAgICAgICAgICAgICAgcmV0cnkgPSAxCisrICAgICAgICAgICAgICAgIGZvciBwcm9iIGluIHByb2JzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvYlsxXVswXSA9PSBycG0uUlBNUFJPQl9ORVdfRklMRV9DT05GTElDVDoKKysgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBwcm9iWzBdLnNwbGl0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IG1zZ1sxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBtc2dbN10KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gbXNnWzldCisrICAgICAgICAgICAgICAgICAgICAgICAgcGtnTkVWUiA9IHBrZ05FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IGFsdE5FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX2NvbmZsaWN0KHBrZ05FVlIpCisrICAgICAgICAgICAgICAgICAgICBlbGlmIHByb2JbMV1bMF0gPT0gcnBtLlJQTVBST0JfRklMRV9DT05GTElDVDoKKysgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBwcm9iWzBdLnNwbGl0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IG1zZ1sxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBtc2dbNV0KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gbXNnWzExXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5FVlIgPSBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jb25mbGljdChwa2dORVZSKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICByZXRyeSA9IDAKKysKKyAgICAgICAgICAgICBwcm9nLnNldERvbmUoKQorLSAgICAgICAgICAgIGlmIHByb2JzOgorKyAgICAgICAgICAgIGlmIHByb2JzIGFuZCAobm90IHJldHJ5KToKKyAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsICJcbiIuam9pbihbeFswXSBmb3IgeCBpbiBwcm9ic10pCisgICAgICAgICAgICAgcHJvZy5zdG9wKCkKKysgICAgICAgICAgICBpZiByZXRyeSBhbmQgbGVuKGNoYW5nZXNldCk6CisrICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGNoYW5nZXNldCwgcGtncGF0aHMpCisgCisgY2xhc3MgUlBNQ2FsbGJhY2s6CisgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9nLCB1cGdyYWRlZG5hbWVzKToKK2RpZmYgLS1naXQgYS9zbWFydC90cmFuc2FjdGlvbi5weSBiL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitpbmRleCA0YjkwY2I3Li4zZTA0M2U5IDEwMDY0NAorLS0tIGEvc21hcnQvdHJhbnNhY3Rpb24ucHkKKysrKyBiL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitAQCAtNTU1LDYgKzU1NSw4IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICBjaGFuZ2VzZXQuc2V0KHBrZywgSU5TVEFMTCkKKyAgICAgICAgIGlzaW5zdCA9IGNoYW5nZXNldC5pbnN0YWxsZWQKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworICAgICAgICAgIyBSZW1vdmUgcGFja2FnZXMgY29uZmxpY3RlZCBieSB0aGlzIG9uZS4KKyAgICAgICAgIGZvciBjbmYgaW4gcGtnLmNvbmZsaWN0czoKKyAgICAgICAgICAgICBmb3IgcHJ2IGluIGNuZi5wcm92aWRlZGJ5OgorQEAgLTU2NCwxMSArNTY2LDE2IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KHBydnBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW3BydnBrZ10gPSAoTE9DS0VEX0NPTkZMSUNUX0JZLCBwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKy0gICAgICAgICAgICAgICAgICAgIGlmIHBydnBrZyBpbiBsb2NrZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBjb25mbGljdGVkIHBhY2thZ2UgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbG9ja2VkIikgJSAocGtnLCBwcnZwa2cpCistICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUocHJ2cGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCistICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIHBydnBrZykpCisrICAgICAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQgY29uZmxpY3RzIHdpdGggcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIpICUgKHBrZywgcHJ2cGtnKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcnZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGNvbmZsaWN0ZWQgcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbG9ja2VkIikgJSAocGtnLCBwcnZwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHBydnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgcHJ2cGtnKSkKKyAKKyAgICAgICAgICMgUmVtb3ZlIHBhY2thZ2VzIGNvbmZsaWN0aW5nIHdpdGggdGhpcyBvbmUuCisgICAgICAgICBmb3IgcHJ2IGluIHBrZy5wcm92aWRlczoKK0BAIC01NzksMTIgKzU4NiwxOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChjbmZwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtjbmZwa2ddID0gKExPQ0tFRF9DT05GTElDVCwgcGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgICAgICBpZiBjbmZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgY29uZmxpY3RlZCBieSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbG9ja2VkIHBhY2thZ2UgJXMiKSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKy0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShjbmZwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKy0gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgY25mcGtnKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBwYWNrYWdlICVzIikgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgY25mcGtnKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbmZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgY29uZmxpY3RlZCBieSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxvY2tlZCBwYWNrYWdlICVzIikgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUoY25mcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCisrICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQoKFBFTkRJTkdfVVBET1dOLCBjbmZwa2cpKQorIAorICAgICAgICAgIyBSZW1vdmUgcGFja2FnZXMgd2l0aCB0aGUgc2FtZSBuYW1lIHRoYXQgY2FuJ3QKKyAgICAgICAgICMgY29leGlzdCB3aXRoIHRoaXMgb25lLgorQEAgLTU5NCwxMCArNjA3LDE1IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QobmFtZXBrZyk6CisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbbmFtZXBrZ10gPSAoTE9DS0VEX05PX0NPRVhJU1QsIHBrZykKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgIGlmIG5hbWVwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0IGNhbid0IGNvZXhpc3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICVzIikgJSAocGtnLCBuYW1lcGtnKQorLSAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUobmFtZXBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZXBrZyBpbiBsb2NrZWQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCBjYW4ndCBjb2V4aXN0ICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggJXMiKSAlIChwa2csIG5hbWVwa2cpCisrICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUobmFtZXBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorIAorICAgICAgICAgIyBJbnN0YWxsIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMgb25lLgorICAgICAgICAgZm9yIHJlcSBpbiBwa2cucmVxdWlyZXMgKyBwa2cucmVjb21tZW5kczoKK0BAIC0xMTc2LDYgKzExOTQsOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgc2VsZi5fcG9saWN5LnJ1blN0YXJ0aW5nKCkKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGNoYW5nZXNldCA9IHNlbGYuX2NoYW5nZXNldC5jb3B5KCkKKyAgICAgICAgICAgICBpc2luc3QgPSBjaGFuZ2VzZXQuaW5zdGFsbGVkCitAQCAtMTE5MCw3ICsxMjEwLDExIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbcGtnXSA9IChMT0NLRURfS0VFUCwgTm9uZSkKKyAgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBJTlNUQUxMOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChwa2cpIGFuZCBwa2cgaW4gbG9ja2VkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGxvY2tlZCIpICUgcGtnCisgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0KHBrZywgSU5TVEFMTCkKKyAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtwa2ddID0gKExPQ0tFRF9JTlNUQUxMLCBOb25lKQorICAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJFTU9WRToKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1jaGFubmVsc2Rpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1jaGFubmVsc2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjIxYjMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK01ha2UgQ0hBTk5FTFNESVIgaW4gc21hcnQgZW1wdHksIHNpbmNlIHRoaXMgY2F1c2VzIGhvc3QgY29udGFtaW5hdGlvbiBpc3N1ZXMKK29uIHNvbWUgUlBNLWJhc2VkIGhvc3RzIG9uIHdoaWNoIHNtYXJ0IGlzIGFscmVhZHkgaW5zdGFsbGVkLgorCitbWU9DVE8gIzM4ODFdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2RpZmYgLS1naXQgYS9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5IGIvc21hcnQvcGx1Z2lucy9jaGFubmVsc3luYy5weQoraW5kZXggM2JhOTVmZi4uNjQ2ZDY5NiAxMDA2NDQKKy0tLSBhL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKKysrKyBiL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKK0BAIC0yMyw3ICsyMywxMSBAQCBmcm9tIHNtYXJ0LmNoYW5uZWwgaW1wb3J0ICoKKyBmcm9tIHNtYXJ0IGltcG9ydCAqCisgaW1wb3J0IG9zCisgCistQ0hBTk5FTFNESVIgPSAiL2V0Yy9zbWFydC9jaGFubmVscy8iCisrIyBGb3Igbm93LCB3ZSBsZWF2ZSB0aGUgZGVmaW5pdGlvbiBvZiBDSEFOTkVMU0RJUiBlbXB0eS4gVGhpcyBwcmV2ZW50cyBzbWFydAorKyMgZnJvbSBlcnJvbmVvdXNseSBjb25zaWRlciB0aGUgIGJ1aWxkIGhvc3QncyBjaGFubmVscyB3aGlsZSBzZXR0aW5nIHVwIGl0cworKyMgY2hhbm5lbHMgW1lPQ1RPICMzODgxXS4gSWYgdGhpcyBmZWF0dXJlIHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlLCBDSEFOTkVMU0RJUgorKyMgc2hvdWxkIGJlIHNldCB0byBhIHByb3BlciB2YWx1ZS4KKytDSEFOTkVMU0RJUiA9ICIiCisgCisgZGVmIHN5bmNDaGFubmVscyhjaGFubmVsc2RpciwgZm9yY2U9Tm9uZSk6CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyMjY1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaApAQCAtMCwwICsxLDkxIEBACitJbXByb3ZlIGVycm9yIHJlcG9ydGluZyBpbiBzbWFydAorCitBZGQgY29kZSB0byBjaGVjayBwcm9wZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgdmFyaW91cworc21hcnQgY29tbWFuZHMuIEV4aXQgd2l0aCBlcnJvciBpZiBlcnJvbmVvdXMvYWRkaXRpb25hbCBhcmd1bWVudHMKK2FyZSBnaXZlbiBpbiB0aGUgY29tbWFuZCBsaW5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQm9nZGFuIE1hcmluZXNjdSA8Ym9nZGFuLmEubWFyaW5lc2N1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkgYi9zbWFydC91dGlsL29wdHBhcnNlLnB5CitpbmRleCA2ZmZmMWJjLi5mNDQ1YTNiIDEwMDY0NAorLS0tIGEvc21hcnQvdXRpbC9vcHRwYXJzZS5weQorKysrIGIvc21hcnQvdXRpbC9vcHRwYXJzZS5weQorQEAgLTcwLDYgKzcwLDggQEAgaW1wb3J0IHN5cywgb3MKKyBpbXBvcnQgdHlwZXMKKyBpbXBvcnQgdGV4dHdyYXAKKyBmcm9tIGdldHRleHQgaW1wb3J0IGdldHRleHQgYXMgXworK2Zyb20gc21hcnQgaW1wb3J0IEVycm9yCisraW1wb3J0IHJlCisgCisgZGVmIF9yZXByKHNlbGYpOgorICAgICByZXR1cm4gIjwlcyBhdCAweCV4OiAlcz4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBpZChzZWxmKSwgc2VsZikKK0BAIC03MTAsNiArNzEyLDEyIEBAIGNsYXNzIE9wdGlvbjoKKyAgICAgICAgICAgICBzZWxmLmFjdGlvbiwgc2VsZi5kZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcikKKyAKKyAgICAgZGVmIHRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpOgorKyAgICAgICAgIyBLZWVwIGFsbCB0aGUgb3B0aW9ucyBpbiB0aGUgY29tbWFuZCBsaW5lIGluIHRoZSAnX2dpdmVuX29wdHMnIGFycmF5CisrICAgICAgICAjIFRoaXMgd2lsbCBiZSB1c2VkIGxhdGVyIHRvIHZhbGlkYXRlIHRoZSBjb21tYW5kIGxpbmUKKysgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHBhcnNlci52YWx1ZXMsICJfZ2l2ZW5fb3B0cyIsIFtdKQorKyAgICAgICAgdXNlcl9vcHQgPSByZS5zdWIociJeXC0qIiwgIiIsIG9wdCkucmVwbGFjZSgiLSIsICJfIikKKysgICAgICAgIGdpdmVuX29wdHMuYXBwZW5kKHVzZXJfb3B0KQorKyAgICAgICAgc2V0YXR0cihwYXJzZXIudmFsdWVzLCAiX2dpdmVuX29wdHMiLCBnaXZlbl9vcHRzKQorICAgICAgICAgaWYgYWN0aW9uID09ICJzdG9yZSI6CisgICAgICAgICAgICAgc2V0YXR0cih2YWx1ZXMsIGRlc3QsIHZhbHVlKQorICAgICAgICAgZWxpZiBhY3Rpb24gPT0gInN0b3JlX2NvbnN0IjoKK0BAIC04MjEsNiArODI5LDU0IEBAIGNsYXNzIFZhbHVlczoKKyAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGF0dHIsIHZhbHVlKQorICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cikKKyAKKysgICAgIyBDaGVjayBpZiB0aGUgZ2l2ZW4gb3B0aW9uIGhhcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBhcmd1bWVudHMKKysgICAgIyBSYWlzZSBhbiBlcnJvciBpZiB0aGUgb3B0aW9uIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMKKysgICAgIyBBIG5lZ2F0aXZlIG51bWJlciBmb3IgJ25hcmdzJyBtZWFucyAiYXQgbGVhc3QgfG5hcmdzfCBhcmd1bWVudHMgYXJlIG5lZWRlZCIKKysgICAgZGVmIGNoZWNrX2FyZ3Nfb2Zfb3B0aW9uKHNlbGYsIG9wdCwgbmFyZ3MsIGVycj1Ob25lKToKKysgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHNlbGYsICJfZ2l2ZW5fb3B0cyIsIFtdKQorKyAgICAgICAgaWYgbm90IG9wdCBpbiBnaXZlbl9vcHRzOgorKyAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgdmFsdWVzID0gZ2V0YXR0cihzZWxmLCBvcHQsIFtdKQorKyAgICAgICAgaWYgdHlwZSh2YWx1ZXMpICE9IHR5cGUoW10pOgorKyAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgaWYgbmFyZ3MgPCAwOgorKyAgICAgICAgICAgIG5hcmdzID0gLW5hcmdzCisrICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPj0gbmFyZ3M6CisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIGlmIG5vdCBlcnI6CisrICAgICAgICAgICAgICAgIGlmIG5hcmdzID09IDE6CisrICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKSAlIG9wdAorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgYXQgbGVhc3QgJWQgYXJndW1lbnRzIikgJSAob3B0LCBuYXJncykKKysgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCisrICAgICAgICBlbGlmIG5hcmdzID09IDA6CisrICAgICAgICAgICAgaWYgbGVuKCB2YWx1ZXMgKSA9PSAwOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID09IG5hcmdzOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICBpZiBub3QgZXJyOgorKyAgICAgICAgICAgICAgICBpZiBuYXJncyA9PSAxOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgb25lIGFyZ3VtZW50IikgJSBvcHQKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzICVkIGFyZ3VtZW50cyIpICUgKG9wdCwgbmFyZ3MpCisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgorKworKyAgICAjIENoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcHRpb25zIGluICdhY3RsaXN0JyB3YXMgZ2l2ZW4gYXMgYW4gYXJndW1lbnQKKysgICAgIyB0byB0aGUgY29tbWFuZCAnY21kbmFtZScKKysgICAgZGVmIGVuc3VyZV9hY3Rpb24oc2VsZiwgY21kbmFtZSwgYWN0bGlzdCk6CisrICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihzZWxmLCAiX2dpdmVuX29wdHMiLCBbXSkKKysgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0bGlzdDoKKysgICAgICAgICAgICBpZiBhY3Rpb24gaW4gZ2l2ZW5fb3B0czoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICByYWlzZSBFcnJvciwgXygiTm8gYWN0aW9uIHNwZWNpZmllZCBmb3IgY29tbWFuZCAnJXMnIikgJSBjbWRuYW1lCisrCisrICAgICMgQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBhcmd1bWVudHMgbGVmdCBhZnRlciBwYXJzaW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kCisrICAgICMgcmFpc2UgYW4gZXJyb3IgaWYgc3VjaCBhcmd1bWVudHMgYXJlIGZvdW5kCisrICAgIGRlZiBjaGVja19yZW1haW5pbmdfYXJncyhzZWxmKToKKysgICAgICAgIGlmIHNlbGYuYXJnczoKKysgICAgICAgICAgICByYWlzZSBFcnJvciwgXygiSW52YWxpZCBhcmd1bWVudChzKSAnJXMnIiAlIHN0cihzZWxmLmFyZ3MpKQorIAorIGNsYXNzIE9wdGlvbkNvbnRhaW5lcjoKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1yZWNvbW1lbmRzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJlY29tbWVuZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwN2ZjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1yZWNvbW1lbmRzLnBhdGNoCkBAIC0wLDAgKzEsMzgxIEBACitIYW5kbGUgcmVjb21tZW5kZWQgcGFja2FnZXMgaW4gY29yZSBhbmQgcnBtIGJhY2tlbmRzCisKK0lkZW50aWZ5IGFuZCBzdG9yZSByZWNvbW1lbmRlZCBwYWNrYWdlcyBpbiB0aGUgY2FjaGUsIGFkZCBhIHF1ZXJ5IG9wdGlvbgordG8gcmVhZCB0aGVtIGFuZCBpZ25vcmUgdGhlbSBpZiB0aGV5IGFyZSBub3QgcHJlc2VudCB3aGVuIGluc3RhbGxpbmcuCisKK0luaXRpYWwgaWRlbnRpZmljYXRpb24gY29kZSBmcm9tIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK2luZGV4IDkzMzJlYTAuLjRmY2ZiZWUgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC0yMjUsNiArMjI1LDUyIEBAIGNsYXNzIFJQTVBhY2thZ2UoUGFja2FnZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgc3JlY3MgPSBmayhzZWxmLnJlY29tbWVuZHMpCisrICAgICAgICBvcmVjcyA9IGZrKG90aGVyLnJlY29tbWVuZHMpCisrICAgICAgICBpZiBzcmVjcyAhPSBvcmVjczoKKysgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgaWYgc3JlYy5uYW1lWzBdID09ICIvIiBvciBzcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIG9yZWMubmFtZVswXSA9PSAiLyIgb3Igb3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgc3JlY3MgPSBmayhzZWxmLnJlY29tbWVuZHMpCisrICAgICAgICBvcmVjcyA9IGZrKG90aGVyLnJlY29tbWVuZHMpCisrICAgICAgICBpZiBzcmVjcyAhPSBvcmVjczoKKysgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgaWYgc3JlYy5uYW1lWzBdID09ICIvIiBvciBzcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIG9yZWMubmFtZVswXSA9PSAiLyIgb3Igb3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgcmV0dXJuIFRydWUKKyAKKyAgICAgZGVmIGNvZXhpc3RzKHNlbGYsIG90aGVyKToKK2RpZmYgLS1naXQgYS9zbWFydC9jY2FjaGUuYyBiL3NtYXJ0L2NjYWNoZS5jCitpbmRleCA3MTkzMTg1Li44YjY2NTE1IDEwMDY0NAorLS0tIGEvc21hcnQvY2NhY2hlLmMKKysrKyBiL3NtYXJ0L2NjYWNoZS5jCitAQCAtNTAwLDYgKzUwMCw0NiBAQCBQYWNrYWdlX2VxdWFscyhQYWNrYWdlT2JqZWN0ICpzZWxmLCBQYWNrYWdlT2JqZWN0ICpvdGhlcikKKyAgICAgICAgIH0KKyAgICAgfQorIAorKyAgICBpbGVuID0gMDsKKysgICAgamxlbiA9IDA7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPnJlY29tbWVuZHMpOyBpKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKHNlbGYtPnJlY29tbWVuZHMsIGkpOworKyAgICAgICAgaWYgKCFQeU9iamVjdF9Jc0luc3RhbmNlKGl0ZW0sIChQeU9iamVjdCAqKSZEZXBlbmRzX1R5cGUpKSB7CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIkRlcGVuZHMgaW5zdGFuY2UgZXhwZWN0ZWQiKTsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChTVFIoKChEZXBlbmRzT2JqZWN0ICopaXRlbSktPm5hbWUpWzBdICE9ICcvJykKKysgICAgICAgICAgICBpbGVuICs9IDE7CisrICAgIH0KKysgICAgZm9yIChqID0gMDsgaiAhPSBQeUxpc3RfR0VUX1NJWkUob3RoZXItPnJlY29tbWVuZHMpOyBqKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKG90aGVyLT5yZWNvbW1lbmRzLCBqKTsKKysgICAgICAgIGlmICghUHlPYmplY3RfSXNJbnN0YW5jZShpdGVtLCAoUHlPYmplY3QgKikmRGVwZW5kc19UeXBlKSkgeworKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJEZXBlbmRzIGluc3RhbmNlIGV4cGVjdGVkIik7CisrICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpCisrICAgICAgICAgICAgamxlbiArPSAxOworKyAgICB9CisrICAgIGlmIChpbGVuICE9IGpsZW4pIHsKKysgICAgICAgIHJldCA9IFB5X0ZhbHNlOworKyAgICAgICAgZ290byBleGl0OworKyAgICB9CisrCisrICAgIGlsZW4gPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+cmVjb21tZW5kcyk7CisrICAgIGpsZW4gPSBQeUxpc3RfR0VUX1NJWkUob3RoZXItPnJlY29tbWVuZHMpOworKyAgICBmb3IgKGkgPSAwOyBpICE9IGlsZW47IGkrKykgeworKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+cmVjb21tZW5kcywgaSk7CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpIHsKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqICE9IGpsZW47IGorKykKKysgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gUHlMaXN0X0dFVF9JVEVNKG90aGVyLT5yZWNvbW1lbmRzLCBqKSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGlmIChqID09IGpsZW4pIHsKKysgICAgICAgICAgICAgICAgcmV0ID0gUHlfRmFsc2U7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKyBleGl0OgorICAgICBQeV9JTkNSRUYocmV0KTsKKyAgICAgcmV0dXJuIHJldDsKK0BAIC0xODEzLDYgKzE4NTMsNTkgQEAgTG9hZGVyX2J1aWxkUGFja2FnZShMb2FkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgfQorICAgICB9CisgCisrICAgIC8qIGlmIHJlY2FyZ3M6ICovCisrICAgIGlmIChyZWNhcmdzKSB7CisrICAgICAgICBpbnQgaSA9IDA7CisrICAgICAgICBpbnQgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHJlY2FyZ3MpOworKyAgICAgICAgLyogcGtnLnJlY29tbWVuZHMgPSBbXSAqLworKyAgICAgICAgUHlfREVDUkVGKHBrZ29iai0+cmVjb21tZW5kcyk7CisrICAgICAgICBwa2dvYmotPnJlY29tbWVuZHMgPSBQeUxpc3RfTmV3KGxlbik7CisrICAgICAgICAvKiBmb3IgYXJncyBpbiByZWNhcmdzOiAqLworKyAgICAgICAgZm9yICg7IGkgIT0gbGVuOyBpKyspIHsKKysgICAgICAgICAgICBQeU9iamVjdCAqYXJncyA9IFB5TGlzdF9HRVRfSVRFTShyZWNhcmdzLCBpKTsKKysgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWNvYmo7CisrICAgICAgICAgICAgUHlPYmplY3QgKnJlYzsKKysgICAgICAgICAgICAKKysgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKKysgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJdGVtIGluIHJlY2FyZ3MgaXMgbm90IGEgdHVwbGUiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIHJlYyA9IGNhY2hlLl9vYmptYXAuZ2V0KGFyZ3MpICovCisrICAgICAgICAgICAgcmVjID0gUHlEaWN0X0dldEl0ZW0oY2FjaGUtPl9vYmptYXAsIGFyZ3MpOworKyAgICAgICAgICAgIHJlY29iaiA9IChEZXBlbmRzT2JqZWN0ICopcmVjOworKworKyAgICAgICAgICAgIC8qIGlmIG5vdCByZWM6ICovCisrICAgICAgICAgICAgaWYgKCFyZWMpIHsKKysgICAgICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpIHx8IFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPCAyKSB7CisrICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgcmVjYXJncyB0dXBsZSIpOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgLyogcmVjID0gYXJnc1swXSgqYXJnc1sxOl0pICovCisrICAgICAgICAgICAgICAgIGNhbGxhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKTsKKysgICAgICAgICAgICAgICAgcmVjID0gUHlPYmplY3RfQ2FsbE9iamVjdChQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApLCBjYWxsYXJncyk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjYWxsYXJncyk7CisrICAgICAgICAgICAgICAgIGlmICghcmVjKSByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgcmVjb2JqID0gKERlcGVuZHNPYmplY3QgKilyZWM7CisrCisrICAgICAgICAgICAgICAgIC8qIGNhY2hlLl9vYmptYXBbYXJnc10gPSByZWMgKi8KKysgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0oY2FjaGUtPl9vYmptYXAsIGFyZ3MsIHJlYyk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWMpOworKworKyAgICAgICAgICAgICAgICAvKiBjYWNoZS5fcmVjb21tZW5kcy5hcHBlbmQocmVjKSAqLworKyAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGNhY2hlLT5fcmVjb21tZW5kcywgcmVjKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogcmVscGtncy5hcHBlbmQocmVjLnBhY2thZ2VzKSAqLworKyAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocmVscGtncywgcmVjb2JqLT5wYWNrYWdlcyk7CisrCisrICAgICAgICAgICAgLyogcGtnLnJlY29tbWVuZHMuYXBwZW5kKHJlYykgKi8KKysgICAgICAgICAgICBQeV9JTkNSRUYocmVjKTsKKysgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocGtnb2JqLT5yZWNvbW1lbmRzLCBpLCByZWMpOworKyAgICAgICAgfQorKyAgICB9CisrCisgICAgIC8qIGlmIHVwZ2FyZ3M6ICovCisgICAgIGlmICh1cGdhcmdzKSB7CisgICAgICAgICBpbnQgaSA9IDA7CitAQCAtMjU5Miw2ICsyNjg1LDE2IEBAIENhY2hlX3Jlc2V0KENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socmVxb2JqLT5wcm92aWRlZGJ5KSkKKyAgICAgICAgICAgICBMSVNUX0NMRUFSKHJlcW9iai0+cHJvdmlkZWRieSk7CisgICAgIH0KKysgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPl9yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworKyAgICAgICAgRGVwZW5kc09iamVjdCAqcmVxb2JqOworKyAgICAgICAgUHlPYmplY3QgKnJlcTsKKysgICAgICAgIHJlcSA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5fcmVjb21tZW5kcywgaSk7CisrICAgICAgICByZXFvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlcTsKKysgICAgICAgIExJU1RfQ0xFQVIocmVxb2JqLT5wYWNrYWdlcyk7CisrICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlcW9iai0+cHJvdmlkZWRieSkpCisrICAgICAgICAgICAgTElTVF9DTEVBUihyZXFvYmotPnByb3ZpZGVkYnkpOworKyAgICB9CisgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5fdXBncmFkZXMpOworICAgICBmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisgICAgICAgICBEZXBlbmRzT2JqZWN0ICp1cGdvYmo7CitAQCAtMjgzNCw2ICsyOTM3LDMwIEBAIENhY2hlX19yZWxvYWQoQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgIGZvciByZWMgaW4gcGtnLnJlY29tbWVuZHM6CisrICAgICAgICAgICAgICAgICAgICAgICByZWMucGFja2FnZXMuYXBwZW5kKHBrZykKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYyBub3QgaW4gcmVjb21tZW5kczoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRzW3JlY10gPSBUcnVlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqbWFwW3JlYy5nZXRJbml0QXJncygpXSA9IHJlYworKyAgICAgICAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBrZy0+cmVjb21tZW5kcykpIHsKKysgICAgICAgICAgICAgICAgICAgIGtsZW4gPSBQeUxpc3RfR0VUX1NJWkUocGtnLT5yZWNvbW1lbmRzKTsKKysgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgIT0ga2xlbjsgaysrKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShwa2ctPnJlY29tbWVuZHMsIGspOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQoKChEZXBlbmRzT2JqZWN0ICopcmVjKS0+cGFja2FnZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilwa2cpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUHlEaWN0X0dldEl0ZW0ocmVjb21tZW5kcywgcmVjKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNvbW1lbmRzLCByZWMsIFB5X1RydWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZWMsICJnZXRJbml0QXJncyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3MpIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShvYmptYXAsIGFyZ3MsIHJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHVwZyBpbiBwa2cudXBncmFkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB1cGcucGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHVwZyBub3QgaW4gdXBncmFkZXM6CitAQCAtMzA5Nyw2ICszMjI0LDQ3IEBAIENhY2hlX2xpbmtEZXBzKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICB9CisgCisrICAgIC8qIHJlY25hbWVzID0ge30gKi8KKysgICAgcmVjbmFtZXMgPSBQeURpY3RfTmV3KCk7CisrICAgIC8qIGZvciByZWMgaW4gc2VsZi5fcmVjb21tZW5kczogKi8KKysgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPl9yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworKyAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5fcmVjb21tZW5kcywgaSk7CisrCisrICAgICAgICAvKiBmb3IgbmFtZSBpbiByZWMuZ2V0TWF0Y2hOYW1lcygpOiAqLworKyAgICAgICAgUHlPYmplY3QgKm5hbWVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZWMsICJnZXRNYXRjaE5hbWVzIiwgTlVMTCk7CisrICAgICAgICBQeU9iamVjdCAqc2VxID0gUHlTZXF1ZW5jZV9GYXN0KG5hbWVzLCAiZ2V0TWF0Y2hOYW1lcygpIHJldHVybmVkICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24tc2VxdWVuY2Ugb2JqZWN0Iik7CisrICAgICAgICBpbnQgbmFtZXNsZW47CisrICAgICAgICBpZiAoIXNlcSkgcmV0dXJuIE5VTEw7CisrICAgICAgICBuYW1lc2xlbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOworKyAgICAgICAgZm9yIChqID0gMDsgaiAhPSBuYW1lc2xlbjsgaisrKSB7CisrICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBqKTsKKysgICAgICAgICAgICAKKysgICAgICAgICAgICAvKiBsc3QgPSByZWNuYW1lcy5nZXQobmFtZSkgKi8KKysgICAgICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbShyZWNuYW1lcywgbmFtZSk7CisrCisrICAgICAgICAgICAgLyogCisrICAgICAgICAgICAgICAgaWYgbHN0OgorKyAgICAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKHJlYykKKysgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICByZWNuYW1lc1tuYW1lXSA9IFtyZWNdCisrICAgICAgICAgICAgKi8KKysgICAgICAgICAgICBpZiAobHN0KSB7CisrICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQobHN0LCByZWMpOworKyAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgIGxzdCA9IFB5TGlzdF9OZXcoMSk7CisrICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihyZWMpOworKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obHN0LCAwLCByZWMpOworKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNuYW1lcywgbmFtZSwgbHN0KTsKKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxzdCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKKysgICAgICAgIFB5X0RFQ1JFRihzZXEpOworKyAgICB9CisrCisgICAgIC8qIHVwZ25hbWVzID0ge30gKi8KKyAgICAgdXBnbmFtZXMgPSBQeURpY3RfTmV3KCk7CisgICAgIC8qIGZvciB1cGcgaW4gc2VsZi5fdXBncmFkZXM6ICovCitAQCAtMzI4Niw2ICszNDU0LDU2IEBAIENhY2hlX2xpbmtEZXBzKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgCisrICAgICAgICAvKiBsc3QgPSByZWNuYW1lcy5nZXQocHJ2Lm5hbWUpICovCisrICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbShyZWNuYW1lcywgcHJ2LT5uYW1lKTsKKysKKysgICAgICAgIC8qIGlmIGxzdDogKi8KKysgICAgICAgIGlmIChsc3QpIHsKKysgICAgICAgICAgICAvKiBmb3IgcmVjIGluIGxzdDogKi8KKysgICAgICAgICAgICBpbnQgcmVjbGVuID0gUHlMaXN0X0dFVF9TSVpFKGxzdCk7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSByZWNsZW47IGorKykgeworKyAgICAgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWMgPSAoRGVwZW5kc09iamVjdCAqKVB5TGlzdF9HRVRfSVRFTShsc3QsIGopOworKyAgICAgICAgICAgICAgICAvKiBpZiByZWMubWF0Y2hlcyhwcnYpOiAqLworKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKilyZWMsICJtYXRjaGVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk8iLCAoUHlPYmplY3QgKilwcnYpOworKyAgICAgICAgICAgICAgICBpZiAoIXJldCkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9Jc1RydWUocmV0KSkgeworKyAgICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYy5wcm92aWRlZGJ5OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5wcm92aWRlZGJ5LmFwcGVuZChwcnYpCisrICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5wcm92aWRlZGJ5ID0gW3Bydl0KKysgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlYy0+cHJvdmlkZWRieSkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJlYy0+cHJvdmlkZWRieSwgKFB5T2JqZWN0ICopcHJ2KTsKKysgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKl9sc3QgPSBQeUxpc3RfTmV3KDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihwcnYpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShfbHN0LCAwLCAoUHlPYmplY3QgKilwcnYpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWMtPnByb3ZpZGVkYnkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYy0+cHJvdmlkZWRieSA9IF9sc3Q7CisrICAgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJ2LnJlY29tbWVuZGVkYnk6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LnJlY29tbWVuZGVkYnkuYXBwZW5kKHBydikKKysgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LnJlY29tbWVuZGVkYnkgPSBbcHJ2XQorKyAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socHJ2LT5yZWNvbW1lbmRlZGJ5KSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocHJ2LT5yZWNvbW1lbmRlZGJ5LCAoUHlPYmplY3QgKilyZWMpOworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqX2xzdCA9IFB5TGlzdF9OZXcoMSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKF9sc3QsIDAsIChQeU9iamVjdCAqKXJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHBydi0+cmVjb21tZW5kZWRieSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LT5yZWNvbW1lbmRlZGJ5ID0gX2xzdDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmV0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisgICAgICAgICAvKiBsc3QgPSB1cGduYW1lcy5nZXQocHJ2Lm5hbWUpICovCisgICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbSh1cGduYW1lcywgcHJ2LT5uYW1lKTsKKyAKK0BAIC0zODIxLDYgKzQwOTQsMjEgQEAgQ2FjaGVfX3NldHN0YXRlX18oQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIC8qCisrICAgICAgICAgICBmb3IgcmVjIGluIHBrZy5yZWNvbW1lbmRzOgorKyAgICAgICAgICAgICAgIHJlYy5wYWNrYWdlcy5hcHBlbmQocGtnKQorKyAgICAgICAgICAgICAgIHJlY29tbWVuZHNbcmVjXSA9IFRydWUKKysgICAgICAgICovCisrICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBrZ29iai0+cmVjb21tZW5kcykpIHsKKysgICAgICAgICAgICBqbGVuID0gUHlMaXN0X0dFVF9TSVpFKHBrZ29iai0+cmVjb21tZW5kcyk7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSBqbGVuOyBqKyspIHsKKysgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShwa2dvYmotPnJlY29tbWVuZHMsIGopOworKyAgICAgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWNvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlYzsKKysgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChyZWNvYmotPnBhY2thZ2VzLCBwa2cpOworKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNvbW1lbmRzLCByZWMsIFB5X1RydWUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIC8qCisgICAgICAgICAgICBmb3IgdXBnIGluIHBrZy51cGdyYWRlczoKKyAgICAgICAgICAgICAgICB1cGcucGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICB1cGdyYWRlc1t1cGddID0gVHJ1ZQorZGlmZiAtLWdpdCBhL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5IGIvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKK2luZGV4IDkyNjVjZDkuLmI2ZjU2OTcgMTAwNjQ0CistLS0gYS9zbWFydC9jb21tYW5kcy9xdWVyeS5weQorKysrIGIvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKK0BAIC03NTAsNiArNzUwLDIyIEBAIGNsYXNzIFRleHRPdXRwdXQoTnVsbE91dHB1dCk6CisgICAgICAgICAgICAgbmFtZSA9IHN0cihwcnZwa2cpCisgICAgICAgICBwcmludCAiICAgICAgICIsICIlcyAoJXMpIiAlIChuYW1lLCBwcnYpCisgCisrICAgIGRlZiBzaG93UmVjb21tZW5kcyhzZWxmLCBwa2csIHJlYyk6CisrICAgICAgICBpZiBzZWxmLl9maXJzdHJlY29tbWVuZHM6CisrICAgICAgICAgICAgc2VsZi5fZmlyc3RyZWNvbW1lbmRzID0gRmFsc2UKKysgICAgICAgICAgICBwcmludCAiICIsIF8oIlJlY29tbWVuZHM6IikKKysgICAgICAgIHByaW50ICIgICAiLCByZWMKKysKKysgICAgZGVmIHNob3dSZWNvbW1lbmRzUHJvdmlkZWRCeShzZWxmLCBwa2csIHJlcSwgcHJ2LCBwcnZwa2cpOgorKyAgICAgICAgaWYgc2VsZi5fZmlyc3RyZWNvbW1lbmRzcHJvdmlkZWRieToKKysgICAgICAgICAgICBzZWxmLl9maXJzdHJlY29tbWVuZHNwcm92aWRlZGJ5ID0gRmFsc2UKKysgICAgICAgICAgICBwcmludCAiICAgICAiLCBfKCJQcm92aWRlZCBCeToiKQorKyAgICAgICAgaWYgc2VsZi5vcHRzLmhpZGVfdmVyc2lvbjoKKysgICAgICAgICAgICBuYW1lID0gcHJ2cGtnLm5hbWUKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgbmFtZSA9IHN0cihwcnZwa2cpCisrICAgICAgICBwcmludCAiICAgICAgICIsICIlcyAoJXMpIiAlIChuYW1lLCBwcnYpCisrCisgICAgIGRlZiBzaG93VXBncmFkZXMoc2VsZiwgcGtnLCB1cGcpOgorICAgICAgICAgaWYgc2VsZi5fZmlyc3R1cGdyYWRlczoKKyAgICAgICAgICAgICBzZWxmLl9maXJzdHVwZ3JhZGVzID0gRmFsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1ycG00LWZpeGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZmZlNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1ycG00LWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKKworVGhpcyBwYXRjaCBjaGVja3MgZm9yIHJwbTUgcmVsYXRlZCBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gYWxsb3cgcnBtNCAKK3RvIHdvcmsgY29ycmVjdGx5LiBDdXJyZW50bHkgdGhlIHJwbTQgYXJjaHNjb3JlIGFuZCBmaWx0ZXIgd29yaworZGlmZmVyZW50bHkgZW5vdWdoIHRoYXQgdGhleSBuZWVkIHRvIGJlIGNoYW5nZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzbWFydC0xLjQuMS5vcmlnL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CisrKysgc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC0zMzgsMTAgKzMzOCwxNCBAQCBjbGFzcyBSUE1PYnNvbGV0ZXMoRGVwZW5kcyk6CisgCisgX1NDT1JFTUFQID0ge30KKyBkZWYgZ2V0QXJjaFNjb3JlKGFyY2gsIF9zbT1fU0NPUkVNQVApOgorLSAgICBpZiBhcmNoIG5vdCBpbiBfc206CistICAgICAgICBzY29yZSA9IHJwbS5hcmNoc2NvcmUoYXJjaCkKKy0gICAgICAgIF9zbVthcmNoXSA9IHNjb3JlCistICAgIHJldHVybiBfc20uZ2V0KGFyY2gsIDApCisrICAgIHRyeToKKysgICAgICAgIHJwbS5wbGF0Zm9ybXNjb3JlKGFyY2gpCisrICAgICAgICBpZiBhcmNoIG5vdCBpbiBfc206CisrICAgICAgICAgICAgc2NvcmUgPSBycG0uYXJjaHNjb3JlKGFyY2gpCisrICAgICAgICAgICAgX3NtW2FyY2hdID0gc2NvcmUKKysgICAgICAgIHJldHVybiBfc20uZ2V0KGFyY2gsIDApCisrICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysgICAgICAgIHJldHVybiAxCisgCisgIyBUT0RPOiBFbWJlZCBjb2xvciBpbnRvIG5hbWVwcm92aWRlcyBhbmQgb2Jzb2xldGVzIHJlbGF0aW9ucy4KKyBfQ09MT1JNQVAgPSB7Im5vYXJjaCI6IDAsICJ4ODZfNjQiOiAyLCAicHBjNjQiOiAyLCAiczM5MHgiOiAyLCAic3BhcmM2NCI6IDJ9CitJbmRleDogc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc21hcnQtMS40LjEub3JpZy9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBzbWFydC0xLjQuMS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0yMzUsNiArMjM1LDEyIEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tb3JkZXIiKToKKyAgICAgICAgICAgICB0cy5vcmRlcigpCisgICAgICAgICBwcm9iZmlsdGVyID0gcnBtLlJQTVBST0JfRklMVEVSX09MRFBBQ0tBR0UKKysgICAgICAgIHRyeToKKysgICAgICAgICAgICAjIFRlc3QgZm9yIFJQTTUgZnVuY3Rpb24KKysgICAgICAgICAgICBycG0ucGxhdGZvcm1zY29yZSgiIikKKysgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9JR05PUkVBUkNICisrCisgICAgICAgICBpZiBmb3JjZSBvciByZWluc3RhbGw6CisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRVBLRworICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VPTERGSUxFUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtc2V0LW5vcHJvZ3Jlc3MtZm9yLXB5Y3VybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODg1OTk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorU2V0IE5PUFJPR1JFU1MgZm9yIHB5Y3VybCBqdXN0IGFzIHNhbWUgYXMgZGVmYXVsdCBvcGVyYXRpb24gaW4gcHljdXJsIG1vZHVsZSBpdHNlbGYuCitJZiBzZXQgTk9QUk9HUkVTUyB3aXRoIDAgZm9yIHB5Y3VybCwgaXQgY2F1c2VzIGRlYWQgbG9jayBpc3N1ZSBvZiBQeXRob24gR0lMIHdoZW4KK2NhbGwgc21hcnQgbGlicmFyeSBieSBweXRob24gZ3VpIGp1c3QgbGlrZSBweWd0ay4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC11IHNtYXJ0LTEuNC4xL3NtYXJ0Lm9yaWcvZmV0Y2hlci5weSBzbWFydC0xLjQuMS9zbWFydC9mZXRjaGVyLnB5CistLS0gc21hcnQtMS40LjEvc21hcnQub3JpZy9mZXRjaGVyLnB5CTIwMTQtMDctMTUgMTY6NDI6MTkuMjQwNDM3MDgwICswODAwCisrKysgc21hcnQtMS40LjEvc21hcnQvZmV0Y2hlci5weQkyMDE0LTA3LTE1IDE3OjAyOjM3LjgxMjQ3MDI4OSArMDgwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuT1BUX0ZJTEVUSU1FLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLkxPV19TUEVFRF9MSU1JVCwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5MT1dfU1BFRURfVElNRSwgU09DS0VUVElNRU9VVCkKKy0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5OT1BST0dSRVNTLCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLk5PUFJPR1JFU1MsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuUFJPR1JFU1NGVU5DVElPTiwgcHJvZ3Jlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuV1JJVEVEQVRBLCBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5GT0xMT1dMT0NBVElPTiwgMSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZmIyOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1JQTTUgaGFzIHJlbW92ZWQgc3VwcG9ydCBmb3IgUlBNVlNGX05PU0lHTkFUVVJFUworCitQYXRjaCBzbWFydCB0byBubyBsb25nZXIgdXNlIHRoaXMgZmxhZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitAQCAtNjMsMTEgKzYzLDExIEBAIGRlZiBnZXRUUyhuZXc9RmFsc2UpOgorICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKToKKyAgICAgICAgICAgICBycG0uYWRkTWFjcm8oJ19kYnBhdGgnLCAiLyIgKyBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpKQorICAgICAgICAgZ2V0VFMudHMgPSBycG0udHMoZ2V0VFMucm9vdCkKKy0gICAgICAgIGlmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CistICAgICAgICAgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgorLSAgICAgICAgICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQorKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CisrICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKysgICAgICAgICMgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorKyAgICAgICAgIyAgICBlbHNlOgorKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKyAgICAgICAgIHJwbV9kYnBhdGggPSBzeXNjb25mLmdldCgicnBtLWRicGF0aCIsICJ2YXIvbGliL3JwbSIpCisgICAgICAgICBkYmRpciA9IHJwbV9qb2luX2RicGF0aChnZXRUUy5yb290LCBycG1fZGJwYXRoKQorICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGJkaXIpOgorQEAgLTg5LDExICs4OSwxMSBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6CisgICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKKyAgICAgICAgIHRzID0gcnBtLnRzKGdldFRTLnJvb3QpCistICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKy0gICAgICAgICAgICAgICAgdHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CisrICAgICAgICAjICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKysgICAgICAgICMgICAgZWxzZToKKysgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisgICAgICAgICByZXR1cm4gdHMKKyAgICAgZWxzZToKKyAgICAgICAgIHJldHVybiBnZXRUUy50cworZGlmZiAtLWdpdCBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CistLS0gYS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CisrKysgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CitAQCAtNTYsOCArNTYsOCBAQCBkZWYgX2dldHJlbGVhc2V2ZXIoKToKKyAKKyAgICAgcnBtcm9vdCA9IHN5c2NvbmYuZ2V0KCJycG0tcm9vdCIsICIvIikKKyAgICAgdHMgPSBycG1VdGlscy50cmFuc2FjdGlvbi5pbml0UmVhZE9ubHlUcmFuc2FjdGlvbihyb290PXJwbXJvb3QpCistICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgorLSAgICAgICAgdHMucHVzaFZTRmxhZ3MofihycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLl9SUE1WU0ZfTk9ESUdFU1RTKSkKKysgICAgI2lmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgorKyAgICAjICAgIHRzLnB1c2hWU0ZsYWdzKH4ocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5fUlBNVlNGX05PRElHRVNUUykpCisgICAgIHJlbGVhc2V2ZXIgPSBOb25lCisgICAgICMgSEFDSzogd2UncmUgaGFyZC1jb2RpbmcgdGhlIG1vc3QgdXNlZCBkaXN0cm9zLCB3aWxsIGFkZCBtb3JlIGlmIG5lZWRlZAorICAgICBpZHggPSB0cy5kYk1hdGNoKCdwcm92aWRlcycsICdmZWRvcmEtcmVsZWFzZScpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjk3NGIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYgpAQCAtMCwwICsxLDEzOSBAQAorU1VNTUFSWSA9ICJUaGUgU21hcnQgUGFja2FnZSBNYW5hZ2VyIgorREVTQ1JJUFRJT04gPSAiVGhlIFNtYXJ0IFBhY2thZ2UgTWFuYWdlciBwcm9qZWN0IGhhcyB0aGUgYW1iaXRpb3VzIG9iamVjdGl2ZSBvZiBjcmVhdGluZyBcCitzbWFydCBhbmQgcG9ydGFibGUgYWxnb3JpdGhtcyBmb3Igc29sdmluZyBhZGVxdWF0ZWx5IHRoZSBwcm9ibGVtIG9mIG1hbmFnaW5nIHNvZnR3YXJlIFwKK3VwZ3JhZGVzIGFuZCBpbnN0YWxsYXRpb24uIgorCitIT01FUEFHRSA9ICJodHRwOi8vbGFiaXgub3JnL3NtYXJ0LyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitERVBFTkRTID0gInB5dGhvbiBycG0gZ2V0dGV4dC1uYXRpdmUgcHl0aG9uLXJwbSIKK1NSQ05BTUUgPSAic21hcnQiCisKK1NSQ19VUkkgPSAiXAorICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20vc21hcnRwbS9zbWFydC5naXQgXAorICAgICAgICAgIGZpbGU6Ly9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1yZWNvbW1lbmRzLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1jaGFubmVsc2Rpci5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWF0dGVtcHQucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2ggXAorICAgICAgICAgIgorCitTUkNSRVYgPSAiNDA3YTdlY2E3NjY0MzEyNTdkY2QxZGExNTE3NWNjMzZhMWJiMjJkMCIKK1BWID0gIjEuNStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBPcHRpb25zIC0gcnBtLCBxdDQsIGd0aworUEFDS0FHRUNPTkZJRyA/Pz0gInJwbSIKKworUlBNX1JERVAgPSAiJHtQTn0tYmFja2VuZC1ycG0iCitRVF9SREVQID0gIiR7UE59LWludGVyZmFjZS1xdDQiCitHVEtfUkRFUCA9ICIke1BOfS1pbnRlcmZhY2UtZ3RrIgorCitSUE1fUkRFUF9jbGFzcy1uYXRpdmUgPSAiIgorUVRfUkRFUF9jbGFzcy1uYXRpdmUgPSAiIgorR1RLX1JERVBfY2xhc3MtbmF0aXZlID0gIiIKKworUlBNX1JERVBfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1FUX1JERVBfY2xhc3MtbmF0aXZlc2RrID0gIiIKK0dUS19SREVQX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1BBQ0tBR0VDT05GSUdbcnBtXSA9ICIsLHJwbSwke1JQTV9SREVQfSIKK1BBQ0tBR0VDT05GSUdbcXQ0XSA9ICIsLHF0NC14MTEsJHtRVF9SREVQfSIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICIsLGd0ayssJHtHVEtfUkRFUH0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIyBXZSBkb24ndCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgaXRlbXMKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9zbGFjaworICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL2FyY2gKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL3F0CisKKyAgICMgVGVtcG9yYXJ5LCBkZWJpYW4gc3VwcG9ydCBpbiBPRSBpcyBtaXNzaW5nIHRoZSBweXRob24gbW9kdWxlCisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2FwdGNoYW5uZWxzeW5jLnB5KgorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9kZWJkaXIucHkqCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvZGViCisKKyAgICMgRGlzYWJsZSBhdXRvbWF0aWMgY2hhbm5lbCBkZXRlY3Rpb24KKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvZGV0ZWN0c3lzLnB5KgorCisgICAjIERpc2FibGUgbGFuZHNjYXBlIHN1cHBvcnQKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvbGFuZHNjYXBlLnB5KgorCisgICAjIERpc2FibGUgdXJwbWkgY2hhbm5lbCBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3VycG1pY2hhbm5lbHN5bmMucHkqCisKKyAgICMgRGlzYWJsZSB5dW0gY2hhbm5lbCBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5KgorCisgICAjIERpc2FibGUgenlwcGVyIGNoYW5uZWwgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy96eXBwY2hhbm5lbHN5bmMucHkqCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JwbScsICdycG0nLCAnJywgZCl9IiBdOyB0aGVuCisgICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3JwbWRpci5weSoKKyAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0KKyAgIGZpCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3F0NCcsICdxdDQnLCAnJywgZCl9IiBdOyB0aGVuCisgICAgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQKKyAgIGZpCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2d0aysnLCAnZ3RrJywgJycsIGQpfSIgXTsgdGhlbgorICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvZ3RrCisgICBmaQorfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3NtYXJ0IFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICAgICAgc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vZW52IHB5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJHtEfSR7YmluZGlyfS9zbWFydAorICAgICAgICBhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgICAgICBhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tZGV2ICR7UE59LWRiZyAke1BOfS1kb2Mgc21hcnRwbSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdycG0nLCAnJHtQTn0tYmFja2VuZC1ycG0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3F0NCcsICcke1BOfS1pbnRlcmZhY2UtcXQ0JywgJycsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdndGsnLCAnJHtQTn0taW50ZXJmYWNlLWd0aycsICcnLCBkKX0gXAorICAgICAgICAgICAgJHtQTn0taW50ZXJmYWNlLWltYWdlcyAke1BOfSIKKworUkRFUEVORFNfc21hcnRwbSA9ICIke1BOfSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWJhY2tlbmQtcnBtIHB5dGhvbi1jb2RlY3MgcHl0aG9uLXRleHR1dGlscyBweXRob24teG1sIHB5dGhvbi1mY250bCBcCisgICAgICAgICAgICAgICAgICAgcHl0aG9uLXBpY2tsZSBweXRob24tY3J5cHQgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1zaGVsbCBcCisgICAgICAgICAgICAgICAgICAgcHl0aG9uLXJlc291cmNlIHB5dGhvbi1uZXRjbGllbnQgcHl0aG9uLXRocmVhZGluZyBweXRob24tdW5peGFkbWluIHB5dGhvbi1wcHJpbnQiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitSREVQRU5EU18ke1BOfS1iYWNrZW5kLXJwbSA9ICJweXRob24tcnBtIgorCitSREVQRU5EU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gInF0NC14MTEgJHtQTn0taW50ZXJmYWNlLWltYWdlcyIKK1JERVBFTkRTXyR7UE59LWludGVyZmFjZS1ndGsgPSAiZ3RrKyAke1BOfS1pbnRlcmZhY2UtaW1hZ2VzIgorCitGSUxFU19zbWFydHBtID0gIiR7YmluZGlyfS9zbWFydCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3JwbS8uZGVidWciCisKK0ZJTEVTXyR7UE59LWJhY2tlbmQtcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvcnBtIgorCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtZ3RrID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9ndGsiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtaW1hZ2VzID0gIiR7ZGF0YWRpcn0vJHtiYXNlbGlifS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9pbWFnZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1OGJlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJQeXRob24gaW1wbGVtZW50YXRpb24gb2YgYSBzbGlkaW5nIHdpbmRvdyBtZW1vcnkgbWFwIG1hbmFnZXIiCitERVNDUklQVElPTiA9ICJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyBtZW1vcnkgbWFwIHRvIFwKK2hlbHAgdW5pZnlpbmcgbWVtb3J5IG1hcHBlZCBhY2Nlc3Mgb24gMzIgYW5kIDY0IGJpdCBzeXN0ZW1zIGFuZCB0byBoZWxwIFwKK21hbmFnaW5nIHJlc291cmNlcyBtb3JlIGVmZmljaWVudGx5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PWU5MTBiMzViMGVmNGUxZjY2NWI5YTc1ZDZhZmI3NzA5IgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3Mvc21tYXAvc21tYXAtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImQ3OTMyZDVhY2UyMDZiZjRhZTE1MTk4Y2YzNmZiNmFiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMmI2MmI0OTdiZDVmMGFmZWJjMDAyZWRhNGQ5MGRmOWQyMDljMzBlZjI1N2U4NjczYzkwYTZiNWMxMTlkNjIiCisKK1MgPSAiJHtXT1JLRElSfS9zbW1hcC0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tY29kZWNzIHB5dGhvbi1tbWFwIHB5dGhvbi1sYW5nIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0MjhmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiVGhlIFB5dGhvbiBQcm9ncmFtbWluZyBMYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKK0xJQ0VOU0UgPSAiUFNGdjIiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKKyMgYnVtcCB0aGlzIG9uIGV2ZXJ5IGNoYW5nZSBpbiBjb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKK0lOQ19QUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGZmM2QwMGYwNDk1NDU4NjI5OTJkMmQwOTc4MzFhMTMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4ZDUzMGY3ZWZjMzczZDY0YThmYjE2MzdlM2JhYWE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwZDI3ZTE0ZWE3ZTAzNTcwMDI2ODUwZTJlNTBiYTcxYWQyMGI3ZWIzMTAzNWFhZGExY2YzZGVmOGY4ZDQ5MTYiCisKK1BZVEhPTl9NQUpNSU4gPSAiMi43IgorCitpbmhlcml0IGF1dG90b29scworCitQWVRIT05MU0JPUFRTX2xpbnV4c3RkYmFzZSA9ICJhY19jdl9zaXplb2Zfb2ZmX3Q9OCIKKworRVhUUkFfT0VDT05GID0gIlwKKyAgLS13aXRoLXRocmVhZHMgXAorICAtLXdpdGgtcHltYWxsb2MgXAorICAtLXdpdGhvdXQtY3h4LW1haW4gXAorICAtLXdpdGgtc2lnbmFsLW1vZHVsZSBcCisgIC0tZW5hYmxlLXNoYXJlZCBcCisgIC0tZW5hYmxlLWlwdjY9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ3llcycsICdubycsIGQpfSBcCisgIGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9bm8gYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9oPW5vIFwKKyAgJHtQWVRIT05MU0JPUFRTfSBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjU3Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaApAQCAtMCwwICsxLDk3IEBACitXZSBuZWVkIHRvIGVuc3VyZSBvdXIgaG9zdCB0b29scyBnZXQgcnVuIGR1cmluZyBidWlsZCwgbm90IHRoZSBmcmVzaGx5CitidWlsdCBjcm9zcy10b29scyAodGhpcyB3aWxsIG5vdCB3b3JrKSwgc28gd2UgaW50cm9kdWNlIEhPU1RQWVRIT04gYW5kIEhPU1RQR0VOLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC0yMzQsNiArMjM0LDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgUGFyc2VyCisgUEdFTj0JCVBhcnNlci9wZ2VuJChFWEUpCisrSE9TVFBHRU49CSQoUEdFTikkKEVYRSkKKyAKKyBQU1JDUz0JCVwKKyAJCVBhcnNlci9hY2NlbGVyLmMgXAorQEAgLTQ0NSw3ICs0NDYsNyBAQCAkKEJVSUxEUFlUSE9OKToJTW9kdWxlcy9weXRob24ubyAkKExJQlJBCisgCQkJJChCTERMSUJSQVJZKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKKyAKKyBwbGF0Zm9ybTogJChCVUlMRFBZVEhPTikgcHlidWlsZGRpci50eHQKKy0JJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLWMgJ2ltcG9ydCBzeXMgOyBmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BsYXRmb3JtIDsgcHJpbnQgZ2V0X3BsYXRmb3JtKCkrIi0iK3N5cy52ZXJzaW9uWzA6M10nID5wbGF0Zm9ybQorKwkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtYyAnaW1wb3J0IHN5cyA7IGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybSA7IHByaW50IGdldF9wbGF0Zm9ybSgpKyItIitzeXMudmVyc2lvblswOjNdJyA+cGxhdGZvcm0KKyAKKyAjIENyZWF0ZSBidWlsZCBkaXJlY3RvcnkgYW5kIGdlbmVyYXRlIHRoZSBzeXNjb25maWcgYnVpbGQtdGltZSBkYXRhIHRoZXJlLgorICMgcHlidWlsZGRpci50eHQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGJ1aWxkIGRpciBhbmQgaXMgdXNlZCBmb3IKK0BAIC02MTEsNyArNjEyLDcgQEAgTW9kdWxlcy9wd2Rtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcAorICQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkJJChNQUtFKSAkKFBHRU4pCistCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorKwkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisgJChHUkFNTUFSX0MpOiAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJJChNQUtFKSAkKEdSQU1NQVJfSCkKKyAJCXRvdWNoICQoR1JBTU1BUl9DKQorQEAgLTEwNDMsMjcgKzEwNDQsMjcgQEAgbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKyAJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorIAlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdHQgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXQgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorKwkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisrCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisgCisgIyBDcmVhdGUgdGhlIFBMQVRESVIgc291cmNlIGRpcmVjdG9yeSwgaWYgb25lIHdhc24ndCBkaXN0cmlidXRlZC4uCisgJChzcmNkaXIpL0xpYi8kKFBMQVRESVIpOgorSW5kZXg6IFB5dGhvbi0yLjcuOS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTIuNy45L3NldHVwLnB5CitAQCAtMzM0LDYgKzMzNCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCisgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKioqIFdBUk5JTkc6IHJlbmFtaW5nICIlcyIgc2luY2UgaW1wb3J0aW5nIGl0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICVzJyAlIChleHQubmFtZSwgd2h5KSwgbGV2ZWw9MykKKysgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuaW5wbGFjZQorICAgICAgICAgICAgIGJhc2VuYW1lLCB0YWlsID0gb3MucGF0aC5zcGxpdGV4dChleHRfZmlsZW5hbWUpCisgICAgICAgICAgICAgbmV3bmFtZSA9IGJhc2VuYW1lICsgIl9mYWlsZWQiICsgdGFpbAorQEAgLTU1OCw2ICs1NTksOSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgCisgICAgICAgICAjIFhYWCBPbWl0dGVkIG1vZHVsZXM6IGdsLCBwdXJlLCBkbCwgU0dJLXNwZWNpZmljIG1vZHVsZXMKKyAKKysgICAgICAgIGxpYl9kaXJzID0gWyBvcy5nZXRlbnYoIlNUQUdJTkdfTElCRElSIiksICBvcy5nZXRlbnYoIlNUQUdJTkdfQkFTRUxJQkRJUiIpIF0KKysgICAgICAgIGluY19kaXJzID0gWyBvcy5nZXRlbnYoIlNUQUdJTkdfSU5DRElSIikgXQorKworICAgICAgICAgIworICAgICAgICAgIyBUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGFsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgY29tcGlsZQorICAgICAgICAgIyBvbiBwcmV0dHkgbXVjaCBhbnkgUE9TSVhpc2ggcGxhdGZvcm0uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGNlYjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitXZSBuZWVkIHRvIHN1cHBseSBTVEFHSU5HX0lOQ0RJUiBoZXJlLCBvdGhlcndpc2UgdGhlIFRrIGhlYWRlcnMKK3dpbGwgbm90IGJlIGZvdW5kLgorCitTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS5kZT4KK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitSZWJhc2VkIGZvciBweXRob24tMi43LjkKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IDhmZTFmYjguLjY3ZWRhNzQgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0xODkyLDcgKzE4OTIsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgIGRvdHZlcnNpb24gPSBkb3R2ZXJzaW9uWzotMV0gKyAnLicgKyBkb3R2ZXJzaW9uWy0xXQorICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiA9IFtdCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgPSBbXQorLSAgICAgICAgICAgIGZvciBkaXIgaW4gaW5jX2RpcnM6CisrICAgICAgICAgICAgZm9yIGRpciBpbiBbb3MuZ2V0ZW52KCJTVEFHSU5HX0lOQ0RJUiIpXToKKyAgICAgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGNsIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGsiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSB0Y2xfaW5jbHVkZV9zdWIKK0BAIC0xOTExLDIyICsxOTExLDYgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGlmIGRpciBub3QgaW4gaW5jbHVkZV9kaXJzOgorICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKGRpcikKKyAKKy0gICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3JpZXMKKy0gICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ3N1bm9zNSc6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI2L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWI2NCcpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI1L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9saWInKQorLSAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAjIEFzc3VtZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBYMTEKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExL2xpYicpCistCisgICAgICAgICAjIElmIEN5Z3dpbiwgdGhlbiB2ZXJpZnkgdGhhdCBYIGlzIGluc3RhbGxlZCBiZWZvcmUgcHJvY2VlZGluZworICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgICAgICB4MTFfaW5jID0gZmluZF9maWxlKCdYMTEvWGxpYi5oJywgW10sIGluY2x1ZGVfZGlycykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M4NzQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1JlYmFzZWQgZm9yIHB5dGhvbiAyLjcuOQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjIENUeXBlcyBuZWVkIHRvIGtub3cgdGhlIGFjdHVhbCBob3N0IHdlIGFyZSBidWlsZGluZyBvbi4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCBEaWV0cmljaCA8bWR0QGVtZGV0ZS5kZT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTIuNy45L3NldHVwLnB5CitAQCAtMjAyOCwxMiArMjAyOCwxMiBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgCisgICAgICAgICAgICAgICAgICMgUGFzcyBlbXB0eSBDRkxBR1MgYmVjYXVzZSB3ZSdsbCBqdXN0IGFwcGVuZCB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICMgQ0ZMQUdTIHRvIFB5dGhvbidzOyAtZyBvciAtTzIgaXMgdG8gYmUgYXZvaWRlZC4KKy0gICAgICAgICAgICAgICAgY21kID0gImNkICVzICYmIGVudiBDRkxBR1M9JycgJyVzL2NvbmZpZ3VyZScgJXMiIFwKKy0gICAgICAgICAgICAgICAgICAgICAgJSAoZmZpX2J1aWxkZGlyLCBmZmlfc3JjZGlyLCAiICIuam9pbihjb25maWdfYXJncykpCisrICAgICAgICAgICAgICAgIGNtZCA9ICIoY2QgJXMgJiYgYXV0b2NvbmYgLVcgY3Jvc3MpICYmIChjZCAlcyAmJiBlbnYgQ0ZMQUdTPScnICclcy9jb25maWd1cmUnICVzKSIgXAorKyAgICAgICAgICAgICAgICAgICAgJSAoZmZpX3NyY2RpciwgZmZpX2J1aWxkZGlyLCBmZmlfc3JjZGlyLCAiICIuam9pbihjb25maWdfYXJncykpCisgCisgICAgICAgICAgICAgICAgIHJlcyA9IG9zLnN5c3RlbShjbWQpCisgICAgICAgICAgICAgICAgIGlmIHJlcyBvciBub3Qgb3MucGF0aC5leGlzdHMoZmZpX2NvbmZpZ2ZpbGUpOgorLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBjb25maWd1cmUgX2N0eXBlcyBtb2R1bGUiCisrICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBfY3R5cGVzIG1vZHVsZSAocmVzPSVkKSBvciBtaXNzaW5nIGNvbmZmaWxlPSVzIiAlICggcmVzLCBmZmlfY29uZmlnZmlsZSApCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAKKyAgICAgICAgICAgICBmZmljb25maWcgPSB7fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTJjYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBwb2lzb24gZGlyZWN0b3JpZXMgcGF0Y2ggaGFzIGRldGVjdGVkIGxpYnJhcnkgcGF0aCBpc3N1ZSB3aGlsZSAKK2NvbXBpbGluZyB0aGUgcHl0aG9uIGluIGNyb3NzIGVudmlyb25tZW50LCBhcyBzZWVuIGJlbGxvdy4KKword2FybmluZzogbGlicmFyeSBzZWFyY2ggcGF0aCAiL3Vzci9saWIvdGVybWNhcCIgaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbgorCitUaGlzIFBhdGNoIGZpeGVzIHRoaXMgaXNzdWUgaW4gdGhlIHB5dGhvbiBidWlsZCBlbnZpcm9ubWVudC4KKzExIE9jdCAyMDEwCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCisyMDExLzA5LzI5CitSZWJhc2VkIGZvciBweXRob24gMi43LjIKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggNjdlZGE3NC4uNTljNTM3ZSAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTc2MSwxMiArNzYxLDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgcGFzcyAjIElzc3VlIDczODQ6IEFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzIG9yIHRpbmZvLgorICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKGN1cnNlc19saWJyYXJ5KQorLSAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliL3Rlcm1jYXAnXSwKKysgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVybWNhcCcpOgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZCgndGVybWNhcCcpCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncmVhZGxpbmUnLCBbJ3JlYWRsaW5lLmMnXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvbGliL3Rlcm1jYXAnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1yZWFkbGluZV9leHRyYV9saW5rX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9cmVhZGxpbmVfbGlicykgKQorICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZWE3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjIvTW9kdWxlcy9TZXR1cC5kaXN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvTW9kdWxlcy9TZXR1cC5kaXN0CTIwMTEtMDYtMTEgMDg6NDY6MjYuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTIuNy4yL01vZHVsZXMvU2V0dXAuZGlzdAkyMDExLTEyLTI3IDE1OjUxOjQxLjI0NDYyMzIxOSAtMDgwMAorQEAgLTI0OCw3ICsyNDgsNyBAQAorICMgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtLCBkZXNjcmliZWQgaW4gUkZDIDEzMjEuICBUaGUgbmVjZXNzYXJ5IGZpbGVzCisgIyBtZDUuYyBhbmQgbWQ1LmggYXJlIGluY2x1ZGVkIGhlcmUuCisgCistI19tZDUgbWQ1bW9kdWxlLmMgbWQ1LmMKKytfbWQ1IG1kNW1vZHVsZS5jIG1kNS5jCisgCisgCisgIyBUaGUgX3NoYSBtb2R1bGUgaW1wbGVtZW50cyB0aGUgU0hBIGNoZWNrc3VtIGFsZ29yaXRobXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmFlMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQXZvaWRzIHBhcmFsbGVsIG1ha2UgcmFjZXMgbGlua2luZyBlcnJvcnMgd2hlbiBtYWtpbmcgUGFyc2VyL1BHRU4KKworLSBJbXBsZW1lbnRzIFJpY2hhcmQgUHVyZGllJ3MgaWRlYQorCitTaWduZWQtT2ZmLUJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC02MTEsMTIgKzYxMSwxMCBAQCBNb2R1bGVzL2dycG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9nCisgCisgTW9kdWxlcy9wd2Rtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcHdkbW9kdWxlLmMgJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuaAorIAorLSQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorKyQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKSAkKFBHRU4pCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCistCQkkKE1BS0UpICQoUEdFTikKKyAJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKy0JCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKKyAKKyAkKFBHRU4pOgkkKFBHRU5PQkpTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorX3RraW50ZXIgbW9kdWxlIG5lZWRzIHRrIG1vZHVsZSBhbG9uZyB3aXRoIHRjbC4gdGsgaXMgbm90IHlldCBpbnRlZ3JhdGVkCitpbiB5b2N0byBzbyB3ZSBza2lwIHRoZSBjaGVjayBmb3IgdGhpcyBtb2R1bGUuCitBdm9pZCBhIHdhcm5pbmcgYnkgbm90IGFkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxODozOC41MDAxMzY2NDcgKzAzMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxOTozNS44ODgxMzQ5NjkgKzAzMDAKK0BAIC0xNjM0LDggKzE2MzQsMTAgQEAKKyAgICAgICAgICMgQ2FsbCB0aGUgbWV0aG9kIGZvciBkZXRlY3Rpbmcgd2hldGhlciBfdGtpbnRlciBjYW4gYmUgY29tcGlsZWQKKyAgICAgICAgIHNlbGYuZGV0ZWN0X3RraW50ZXIoaW5jX2RpcnMsIGxpYl9kaXJzKQorIAorLSAgICAgICAgaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisrICAgICAgICAjIHRraW50ZXIgbW9kdWxlIHdpbGwgbm90IGJlIGF2YWxhaWJsZSBhcyB5b2N0bworKyAgICAgICAgIyBkb2Vzbid0IGhhdmUgdGsgaW50ZWdyYXRlZCAoeWV0KQorKyAgICAgICAgI2lmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKysgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKyAKKyAgICAgICAgIHJldHVybiBtaXNzaW5nCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzN2UwZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitzdW5hdWRpb2RldiBtb2R1bGUgaXMgc3Vub3Mgc3BlY2lmaWMgc28gd2UgYXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCAKK2FkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0wNSAyMjoyOToxOC4wNDkxOTY2MDggKzAzMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0wNSAyMjoyOTo1Ny41MDUxOTU0NTMgKzAzMDAKK0BAIC0xNTIyLDggKzE1MjIsOSBAQAorICAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ3N1bm9zNSc6CisgICAgICAgICAgICAgIyBTdW5PUyBzcGVjaWZpYyBtb2R1bGVzCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignc3VuYXVkaW9kZXYnLCBbJ3N1bmF1ZGlvZGV2LmMnXSkgKQorLSAgICAgICAgZWxzZToKKy0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnc3VuYXVkaW9kZXYnKQorKyAgICAgICAgIyBJZiBwbGF0Zm9ybSBpcyBub3Qgc3Vub3Mgd2FybmluZyBpcyB1c2VsZXNzCisrICAgICAgICAjZWxzZToKKysgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ3N1bmF1ZGlvZGV2JykKKyAKKyAgICAgICAgIGlmIHBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICMgX3NjcHJveHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYnVpbGRkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2J1aWxkZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjI5YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2J1aWxkZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1doZW4gY3Jvc3MgY29tcGlsaW5nIHB5dGhvbiwgd2UgdXNlZCB0byBuZWVkIHRvIGluc3RhbGwgdGhlIE1ha2VmaWxlLCBweWNvbmZpZy5oIAorYW5kIHRoZSBweXRob24gbGlicmFyeSB0byB0aGVpciBmaW5hbCBsb2NhdGlvbiBiZWZvcmUgYmVpbmcgYWJsZSB0byBjb21waWxlIHRoZSAKK3Jlc3Qgb2YgcHl0aG9uLiBUaGlzIGNoYW5nZSBhbGxvd3MgdXMgdG8gcG9pbnQgcHl0aG9uIGF0IGl0cyBvd24gc291cmNlIHdoZW4KK2J1aWxkaW5nLCBhdm9pZGluZyBhIHZhcmlldHkgb2Ygc3lzcm9vdCBzdGFnaW5nIGlzc3VlcyBhbmQgc2ltcGxpZnlpbmcgdGhlIG1haW4KK3B5dGhvbiByZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxMi8xMS8xMworCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKK0BAIC05Myw2ICs5Myw3IEBAIF9QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCisgX0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCisgX0NPTkZJR19WQVJTID0gTm9uZQorIF9VU0VSX0JBU0UgPSBOb25lCisrX1BZVEhPTkJVSUxERElSID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkJVSUxERElSIiwgTm9uZSkKKyAKKyBkZWYgX3NhZmVfcmVhbHBhdGgocGF0aCk6CisgICAgIHRyeToKK0BAIC0xMDAsNyArMTAxLDkgQEAgZGVmIF9zYWZlX3JlYWxwYXRoKHBhdGgpOgorICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIHJldHVybiBwYXRoCisgCistaWYgc3lzLmV4ZWN1dGFibGU6CisraWYgX1BZVEhPTkJVSUxERElSOgorKyAgICBfUFJPSkVDVF9CQVNFID0gX1BZVEhPTkJVSUxERElSCisrZWxpZiBzeXMuZXhlY3V0YWJsZToKKyAgICAgX1BST0pFQ1RfQkFTRSA9IG9zLnBhdGguZGlybmFtZShfc2FmZV9yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCisgZWxzZToKKyAgICAgIyBzeXMuZXhlY3V0YWJsZSBjYW4gYmUgZW1wdHkgaWYgYXJndlswXSBoYXMgYmVlbiBjaGFuZ2VkIGFuZCBQeXRob24gaXMKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTI2LDYgKzI2LDkgQEAgRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjXworICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAorICMgaXQnbGwgbGl2ZSBpbiBwcm9qZWN0L1BDYnVpbGQvYW1kNjQuCisgcHJvamVjdF9iYXNlID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuZXhlY3V0YWJsZSkpCisrX1BZVEhPTkJVSUxERElSID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkJVSUxERElSIiwgTm9uZSkKKytpZiBfUFlUSE9OQlVJTERESVI6CisrICAgIHByb2plY3RfYmFzZSA9IF9QWVRIT05CVUlMRERJUgorIGlmIG9zLm5hbWUgPT0gIm50IiBhbmQgInBjYnVpbGQiIGluIHByb2plY3RfYmFzZVstODpdLmxvd2VyKCk6CisgICAgIHByb2plY3RfYmFzZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocHJvamVjdF9iYXNlLCBvcy5wYXRoLnBhcmRpcikpCisgIyBQQy9WUzcuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jZ2lfcHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUwNGY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jZ2lfcHkucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorTGliL2NnaS5weTogVXBkYXRlIHRoZSBzY3JpcHQgYXMgbWVudGlvbmVkIGluIHRoZSBjb21tZW50CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBQeXRob24tMi42LjYvTGliL2NnaS5weS5vcmlnCTIwMTAtMDgtMDEgMjI6MTQ6MjcuMDAwMDAwMDAwIC0wNTAwCisrKysgUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkJMjAxMS0wOS0yMSAxNToyODo0MC40NzgyMDg2MzEgLTA1MDAKK0BAIC0xLDEzICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9weXRob24KKy0KKy0jIE5PVEU6IHRoZSBhYm92ZSAiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiBpcyBOT1QgYSBtaXN0YWtlLiAgSXQgaXMKKy0jIGludGVudGlvbmFsbHkgTk9UICIvdXNyL2Jpbi9lbnYgcHl0aG9uIi4gIE9uIG1hbnkgc3lzdGVtcworLSMgKGUuZy4gU29sYXJpcyksIC91c3IvbG9jYWwvYmluIGlzIG5vdCBpbiAkUEFUSCBhcyBwYXNzZWQgdG8gQ0dJCistIyBzY3JpcHRzLCBhbmQgL3Vzci9sb2NhbC9iaW4gaXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiBpcworLSMgaW5zdGFsbGVkLCBzbyAvdXNyL2Jpbi9lbnYgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgcHl0aG9uLiAgR3JhbnRlZCwKKy0jIGJpbmFyeSBpbnN0YWxsYXRpb25zIGJ5IExpbnV4IHZlbmRvcnMgb2Z0ZW4gaW5zdGFsbCBQeXRob24gaW4KKy0jIC91c3IvYmluLiAgU28gbGV0IHRob3NlIHZlbmRvcnMgcGF0Y2ggY2dpLnB5IHRvIG1hdGNoIHRoZWlyIGNob2ljZQorLSMgb2YgaW5zdGFsbGF0aW9uLgorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAKKyAiIiJTdXBwb3J0IG1vZHVsZSBmb3IgQ0dJIChDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UpIHNjcmlwdHMuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2MmRiMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitBdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK0RhdGU6ICAgU3VuIE1hciAyNSAwMjowMjoyNyAyMDEyICswMjAwCisKK1RoaXMgcGF0Y2ggd2FzIGFkZGVkIGZvciA2NGJpdCBob3N0IG1hY2hpbmVzLiBJbiB0aGUgY29tcGlsZSBwcm9jZXNzIHB5dGhvbgoraXMgY2hlY2tpbmcgaWYgcGxhdGZvcm0gaXMgYSA2NGJpdCBwbGF0Zm9ybSB1c2luZyBzeXMubWF4aW50IHdoaWNoIGlzIHRoZSBob3N0J3MKK3ZhbHVlLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSBzbyB0aGF0IHB5dGhvbiB3b3VsZCBjaGVjayBpZiBUQVJHRVQgbWFjaGluZQoraXMgNjRiaXQgbm90IHRoZSBIT1NUIG1hY2hpbmUuIEluIHRoaXMgd2F5IHdpbGwgaGF2ZSAiZGwiIGFuZCAiaW1hZ2VvcCIgbW9kdWxlcworYnVpbHQgaWYgSE9TVCBtYWNoaW5lIGlzIDY0Yml0IGJ1dCB0aGUgdGFyZ2V0IG1hY2hpbmUgaXMgMzJiaXQuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTAzLTI1IDAxOjEwOjQxLjU0MDE2MzE4NyArMDIwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTAzLTI1IDAxOjI2OjA2LjA5MjUzOTk5MCArMDIwMAorQEAgLTIzLDYgKzIzLDIxIEBACisgIyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBkaXNhYmxlZC4KKyBkaXNhYmxlZF9tb2R1bGVfbGlzdCA9IFtdCisgCisrZGVmIHRhcmdldF9pc182NGJpdF9wbGF0Zm9ybSAoKToKKysgICAgIiIiCisrICAgIEluIGNhc2Ugb2YgY3Jvc3MtY29tcGlsZSwgc29tZSBtb2R1bGVzIGFyZSBub3QgYnVpbGQgYXMgc2V0dXAgY2hlY2tzIGlmIEhPU1QKKysgICAgaXMgNjRiaXQgYW5kIG5vdCBUQVJHRVQuCisrICAgIEFzIHB5dGhvbiB3YXMgYnVpbHQgZm9yIFRBUkdFVCB3ZSBjYW4gY2hlY2sgdGhpcyBpbiBweWNvbmZpZy5oIGluIHRoaXMgd2F5OgorKwlTaXplb2YgTE9ORyBvbiBhIDMyIGJpdCBwbGF0Zm9ybSBpcyA0IGJ5dGVzCisrCVNpemVvZiBMT05HIG9uIGEgNjQgYml0IHBsYXRmb3JtIGlzIDggYnl0ZXMKKysgICAgIiIiCisrICAgIHB5Y29uZiA9IG9wZW4oInB5Y29uZmlnLmgiKS5yZWFkKCkKKysgICAgYXV4ID0gcmUuc2VhcmNoKHIiI3MqZGVmaW5lXHMrU0laRU9GX0xPTkdccys4XHMqIiwgcHljb25mKQorKyAgICBpZiBhdXggaXMgbm90IE5vbmU6CisrCXJldHVybiBUcnVlCisrICAgIGVsc2U6CisrCXJldHVybiBGYWxzZQorKworIGRlZiBhZGRfZGlyX3RvX2xpc3QoZGlybGlzdCwgZGlyKToKKyAgICAgIiIiQWRkIHRoZSBkaXJlY3RvcnkgJ2RpcicgdG8gdGhlIGxpc3QgJ2Rpcmxpc3QnIChhdCB0aGUgZnJvbnQpIGlmCisgICAgIDEpICdkaXInIGlzIG5vdCBhbHJlYWR5IGluICdkaXJsaXN0JworQEAgLTYyOCw3ICs2NDMsNyBAQAorICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignYXVkaW9vcCcsIFsnYXVkaW9vcC5jJ10pICkKKyAKKyAgICAgICAgICMgRGlzYWJsZWQgb24gNjQtYml0IHBsYXRmb3JtcworLSAgICAgICAgaWYgc3lzLm1heGludCAhPSA5MjIzMzcyMDM2ODU0Nzc1ODA3TDoKKysgICAgICAgIGlmIG5vdCB0YXJnZXRfaXNfNjRiaXRfcGxhdGZvcm0oKToKKyAgICAgICAgICAgICAjIE9wZXJhdGlvbnMgb24gaW1hZ2VzCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignaW1hZ2VvcCcsIFsnaW1hZ2VvcC5jJ10pICkKKyAgICAgICAgIGVsc2U6CitAQCAtMTQxOCw3ICsxNDMzLDcgQEAKKyAgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ19jb2RlY3NfJXMnICUgbG9jKQorIAorICAgICAgICAgIyBEeW5hbWljIGxvYWRpbmcgbW9kdWxlCistICAgICAgICBpZiBzeXMubWF4aW50ID09IDB4N2ZmZmZmZmY6CisrICAgICAgICBpZiBub3QgdGFyZ2V0X2lzXzY0Yml0X3BsYXRmb3JtKCk6CisgICAgICAgICAgICAgIyBUaGlzIHJlcXVpcmVzIHNpemVvZihpbnQpID09IHNpemVvZihsb25nKSA9PSBzaXplb2YoY2hhciopCisgICAgICAgICAgICAgZGxfaW5jID0gZmluZF9maWxlKCdkbGZjbi5oJywgW10sIGluY19kaXJzKQorICAgICAgICAgICAgIGlmIChkbF9pbmMgaXMgbm90IE5vbmUpIGFuZCAocGxhdGZvcm0gbm90IGluIFsnYXRoZW9zJ10pOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTExMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkICdidWlsZC10ZXN0JyBhbmQgJ3J1bnRlc3QtVEVTVFMnIHRhcmdldHMgdG8gTWFrZWZpbGUsIHRvIGJ1aWxkIGFuZCBydW4gdGVzdHMKK2Nyb3NzLWNvbXBpbGVkLgorCitTaWduZWQtb2ZmLWJ5OiBUdWRvciBGbG9yZWEgPHR1ZG9yLmZsb3JlYUBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC1ydU4gYS9NYWtlZmlsZS5wcmUuaW4gYi9NYWtlZmlsZS5wcmUuaW4KKy0tLSBhL01ha2VmaWxlLnByZS5pbgkyMDEzLTA2LTI3IDEwOjQ0OjExLjAzMzg0MDUzMiArMDIwMAorKysrIGIvTWFrZWZpbGUucHJlLmluCTIwMTMtMDYtMjcgMTA6NDQ6MzkuNTcyNjM1MjczICswMjAwCitAQCAtNzA5LDE0ICs3MDksMTkgQEAKKyAjIGdlbmVyYXRlZCBieXRlY29kZS4gIFRoaXMgaXMgc29tZXRpbWVzIGEgdmVyeSBzaHkgYnVnIG5lZWRpbmcgYSBsb3Qgb2YKKyAjIHNhbXBsZSBkYXRhLgorIAorLVRFU1RPUFRTPQktbCAkKEVYVFJBVEVTVE9QVFMpCisrVEVTVE9QVFM9CS1sIC12ICQoRVhUUkFURVNUT1BUUykKKyBURVNUUFJPRz0JJChzcmNkaXIpL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CistVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLVdkIC0zIC1FIC10dCAkKFRFU1RQWVRIT05PUFRTKQorLXRlc3Q6CQlhbGwgcGxhdGZvcm0KKy0JCS1maW5kICQoc3JjZGlyKS9MaWIgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgorK1RFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAkKEJVSUxEUFlUSE9OKSAtV2QgLTMgLUUgLXR0ICQoVEVTVFBZVEhPTk9QVFMpCisrdGVzdDoJCWJ1aWxkLXRlc3QKKysJCSQoTUFLRSkgcnVudGVzdC1URVNUUworKworK3J1bnRlc3QtVEVTVFM6CisrCQktZmluZCAkKHNyY2RpcikgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgorIAkJLSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgJChURVNUT1BUUykKKyAJCSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgJChURVNUT1BUUykKKyAKKytidWlsZC10ZXN0OglhbGwgcGxhdGZvcm0KKysKKyB0ZXN0YWxsOglhbGwgcGxhdGZvcm0KKyAJCS1maW5kICQoc3JjZGlyKS9MaWIgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgorIAkJJChURVNUUFlUSE9OKSAkKHNyY2RpcikvTGliL2NvbXBpbGVhbGwucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyNjJkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcGF0Y2ggZml4ZXMgaXNzdWluZyB3aXRoIGRpZmZlcmVudCBsaWJkaXIgbGlrZSBsaWI2NC4KK1RoaXMgcGF0Y2ggbWFrZXMgdGhlIG5hdGl2ZSBweXRob24gYmluYXJ5IG1vZHVsZXMgZmluZGFibGUKK2luIHRoZSBpbnN0YWxsIHByb2Nlc3Mgb2YgdGhlIGhvc3QgcHl0aG9uLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wMy8xNAorCitVcGRhdGVkIGZvciBweXRob24gMi43LjMKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzA1LzAxCisKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CitAQCAtOSw3ICs5LDcgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKyAgICAgICAgICdzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdGluY2x1ZGUnOiAne3BsYXRiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCitAQCAtNjcsNyArNjcsNyBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfdXNlcic6IHsKKyAgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtMTA0NiwyNyArMTA0NiwyNyBAQCBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMCisgCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL01vZHVsZXMveHhtb2R1bGUuYyBcCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorLQlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorKwlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCistCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0kKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKyAKKyAjIENyZWF0ZSB0aGUgUExBVERJUiBzb3VyY2UgZGlyZWN0b3J5LCBpZiBvbmUgd2Fzbid0IGRpc3RyaWJ1dGVkLi4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWFmYjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK3doZW4gYnVpbGRpbmcgcHl0aG9uIGZvciBxZW11eDg2LTY0IG9uIHVidW50dSAxMS4xMC82NGJpdAoraXQgZ3JvcGVzIGludG8gaG9zdCBpbmNsdWRlcyBhbmQgdGhlbiBtaXhlcyB0aGVtIHdpdGggY3Jvc3MKK2luY2x1ZGVzIGFuZCBhcyBhIHJlc3VsdCBzb21lIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIGFuZCBsaW5rCitvbmUgb2YgdGhlIG1vZHVsZXMgaXMgcHl0aG9uLWVsZW1lbnR0cmVlIHdoaWNoIGlzIHRoZW4gbm90Citmb3VuZCBkdXJpbmcgaW1hZ2UgY3JlYXRpb24KKworUHJvYmxlIGlzIHRoYXQgc2V0dXAucHkgdHJpZXMgdG8gYWRkIG5hdGl2ZSBpbmNsdWRlcyB0aGF0IG5ld2VyCit1YnVudHUgaGFzIGludHJvZHVjZWQgZm9yIG11bHRpYXJjaCBzdXBwb3J0LiBCdXQgdGhhdCBzaG91bGQKK29ubHkgaGFwcGVuIGZvciBuYXRpdmUgYnVpbGRzIGFuZCBub3QgY3Jvc3MgYnVpbGRpbmcgcHl0aG9uCitzbyB3ZSBhZGQgYSBjaGVjayBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGJhMmQyNDIuLmJmODU5YmUgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0zOTMsNiArMzkzLDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICAgICAgaWYgbm90IGZpbmRfZXhlY3V0YWJsZSgnZHBrZy1hcmNoaXRlY3R1cmUnKToKKyAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdDUk9TU19DT01QSUxFJykgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICBvcHQgPSAnJworICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIG9wdCA9ICctdCcgKyBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hPU1RfR05VX1RZUEUnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmYTBkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwyOTYgQEAKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworQEAgLTczNiw2ICs3MzYsMTAgQEAgU3VuT1MqKQorICAgICA7OworIGVzYWMKKyAKKytBQ19TVUJTVChMSUIpCisrQUNfTVNHX0NIRUNLSU5HKExJQikKKytMSUI9YGJhc2VuYW1lICR7bGliZGlyfWAKKytBQ19NU0dfUkVTVUxUKCRMSUIpCisgCisgQUNfU1VCU1QoTElCUkFSWSkKKyBBQ19NU0dfQ0hFQ0tJTkcoTElCUkFSWSkKK0luZGV4OiBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorQEAgLTEwOCw2ICsxMDgsNyBAQCBQeUFQSV9GVU5DKGNoYXIgKikgUHlfR2V0UGF0aCh2b2lkKTsKKyAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0UGxhdGZvcm0odm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldExpYih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitAQCAtMjIsNiArMjIsOCBAQCBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCisgCisgCisrbGlibmFtZSA9IHN5cy5saWIKKysKKyBpZiBzeXMudmVyc2lvbiA8ICIyLjIiOgorICAgICBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlJywKK0BAIC00Miw3ICs0NCw3IEBAIGVsc2U6CisgSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAndW5peF9wcmVmaXgnOiB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlLycrbGlibmFtZSsnL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKKyAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC0xMTksOCArMTE5LDExIEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW4KKyAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CistICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorKyAgICAgICAgaWYgcGxhdF9zcGVjaWZpYyBvciBzdGFuZGFyZF9saWI6CisrICAgICAgICAgICAgbGliID0gc3lzLmxpYgorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBsaWIgPSAibGliIgorKyAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwgbGliLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKK0BAIC0zODMsNyArMzgzLDcgQEAgY2xhc3MgRG9jOgorIAorICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeSIpCistICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIrc3lzLnZlcnNpb25bMDozXSkKKyAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAorICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMi43LjkvTGliL3NpdGUucHkKK0BAIC0yODgsMTMgKzI4OCwxOCBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQorICAgICAgICAgICAgICMgbG9jYXRpb25zLgorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CitAQCAtNywxMCArNywxMCBAQCBmcm9tIG9zLnBhdGggaW1wb3J0IHBhcmRpciwgcmVhbHBhdGgKKyAKKyBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3twbGF0YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCitAQCAtNjUsMTAgKzY1LDEwIEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKKyAgICAgICAgIH0sCisgICAgICdwb3NpeF91c2VyJzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKKyAgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9kbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5CitAQCAtNCwxMCArNCwxMSBAQAorIGltcG9ydCB1bml0dGVzdAorIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKyBkbCA9IGltcG9ydF9tb2R1bGUoJ2RsJywgZGVwcmVjYXRlZD1UcnVlKQorK2ltcG9ydCBzeXMKKyAKKyBzaGFyZWRsaWJzID0gWworLSAgICAoJy91c3IvbGliL2xpYmMuc28nLCAnZ2V0cGlkJyksCistICAgICgnL2xpYi9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisrICAgICgnL3Vzci8nK3N5cy5saWIrJy9saWJjLnNvJywgJ2dldHBpZCcpLAorKyAgICAoJy8nK3N5cy5saWIrJy9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9saWIvbGliYy5keWxpYicsICdnZXRwaWQnKSwKKyAgICAgXQorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CitAQCAtMjQxLDEyICsyNDEsMTYgQEAgY2xhc3MgSGVscGVyRnVuY3Rpb25zVGVzdHModW5pdHRlc3QuVGVzdAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1syXSwgd2FudGVkKQorICAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICAgICAgICMgT1MgWCBub24tZnJhbXdld29yayBidWlsZHMsIExpbnV4LCBGcmVlQlNELCBldGMKKy0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMikKKyAgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKKy0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sIHdhbnRlZCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisgICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ2xpYicsICdzaXRlLXB5dGhvbicpCistICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzFdLCB3YW50ZWQpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsIHN5cy5saWIsICdweXRob24nICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsIHN5cy5saWIsICdzaXRlLXB5dGhvbicpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAjIG90aGVyIHBsYXRmb3JtcworICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5CitAQCAtNzU0LDEwICs3NTQsMTAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAgICAgICAgICAgICAgIyBzaG91bGQgSSBhbHNvIGNhbGwgZXhwYW5kdXNlcj8gKGFmdGVyIGFsbCwgY291bGQgdXNlICRIT01FKQorIAorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJGV4ZWNfcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCisgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtODcsNiArODcsNyBAQCBQWV9DRkxBR1M9CSQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKENGTEFHCisgCisgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcworIE1BQ0hERVA9CUBNQUNIREVQQAorK0xJQj0JCUBMSUJACisgCisgIyBNdWx0aWFyY2ggZGlyZWN0b3J5IChtYXkgYmUgZW1wdHkpCisgTVVMVElBUkNIPQlATVVMVElBUkNIQAorQEAgLTEwNiw3ICsxMDcsNyBAQCBMSUJESVI9CQlAbGliZGlyQAorIE1BTkRJUj0JCUBtYW5kaXJACisgSU5DTFVERURJUj0JQGluY2x1ZGVkaXJACisgQ09ORklOQ0xVREVESVI9CSQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKy1TQ1JJUFRESVI9CSQocHJlZml4KS9saWIKKytTQ1JJUFRESVI9CSQocHJlZml4KS9ATElCQAorIAorICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKKyBCSU5MSUJERVNUPQkkKExJQkRJUikvcHl0aG9uJChWRVJTSU9OKQorQEAgLTU5OCw2ICs1OTksNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CisgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCisgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAorIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAorKwkJLURMSUI9JyIkKExJQikiJyBcCisgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKKyAKKyBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworQEAgLTY0MCw3ICs2NDIsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQorIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKKyAKKyBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1ETElCPSciJChMSUIpIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisgCisgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworIAkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1JJChETElOQ0xESVIpIC1vICRAICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworSW5kZXg6IFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTE2LDkgKzExNiwxMSBAQAorICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCisgI2VuZGlmCisgCisrI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgorKworICNpZm5kZWYgUFlUSE9OUEFUSAorLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCistICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCisrICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorICNlbmRpZgorIAorICNpZm5kZWYgTEFORE1BUksKK0BAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworLXN0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9ICJsaWIvcHl0aG9uIiBWRVJTSU9OOworK3N0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9IExJQl9QWVRIT047CisgCisgc3RhdGljIHZvaWQKKyByZWR1Y2UoY2hhciAqZGlyKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitAQCAtMTAsMyArMTAsMTMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKKyB7CisgCXJldHVybiBQTEFURk9STTsKKyB9CisrCisrI2lmbmRlZiBMSUIKKysjZGVmaW5lIExJQiAibGliIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldExpYih2b2lkKQorK3sKKysJcmV0dXJuIExJQjsKKyt9CitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNDM3LDYgKzE0MzcsOCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0TGliKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRQcm9ncmFtRnVsbFBhdGgoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwcmVmaXgiLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWNiNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2hlbiB1c2luZyBtYWtlIC1qIHdpdGggdGhlICdpbnN0YWxsJyB0YXJnZXQsIGl0J3MgcG9zc2libGUgZm9yIGFsdGJpbmluc3RhbGwKKyh3aGljaCBub3JtYWxseSBjcmVhdGVzIEJJTkRJUikgYW5kIGxpYmFpbnN0YWxsICh3aGljaCBkb2Vzbid0LCB0aG91Z2ggaXQKK2luc3RhbGxzIHB5dGhvbi1jb25maWcgdGhlcmUpIHRvIHJhY2UsIHJlc3VsdGluZyBpbiBhIGZhaWx1cmUgZHVlIHRvCithdHRlbXB0aW5nIHRvIGluc3RhbGwgcHl0aG9uLWNvbmZpZyBpbnRvIGEgbm9uZXhpc3RlbnQgQklORElSLiBFbnN1cmUgaXQgYWxzbworZXhpc3RzIGluIHRoZSBsaWJhaW5zdGFsbCB0YXJnZXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gUHl0aG9uLTIuNy4zLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy4zL01ha2VmaWxlLnByZS5pbgorQEAgLTEwMDgsNyArMTAwOCw3IEBAIExJQlBMPQkJJChMSUJQKS9jb25maWcKKyBMSUJQQz0JCSQoTElCRElSKS9wa2djb25maWcKKworIGxpYmFpbnN0YWxsOglhbGwgcHl0aG9uLWNvbmZpZworLQlAZm9yIGkgaW4gJChMSUJESVIpICQoTElCUCkgJChMSUJQTCkgJChMSUJQQyk7IFwKKysJQGZvciBpIGluICQoTElCRElSKSAkKExJQlApICQoTElCUEwpICQoTElCUEMpICQoQklORElSKTsgXAorCWRvIFwKKwkJaWYgdGVzdCAhIC1kICQoREVTVERJUikkJGk7IHRoZW4gXAorCQkJZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5ICQkaSI7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YmUwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1JlbW92ZSB0aGUgUlBBVEggdG8gYXZvaWQgUUEgaXNzdWUgd2FybmluZy4KKworUlA6IEFkZGVkIHNlY29uZGFyeSB1bm5lY2Vzc2FyeSBycGF0aCB0byB0aGUgbGlzdCAyMDEyLzgvNworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworCitJbmRleDogUHl0aG9uLTIuNy4zL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4zLm9yaWcvc2V0dXAucHkJMjAxMi0wOC0wNyAxMDo0MTo1OC41NjAxMzI1MjkgKzAwMDAKKysrKyBQeXRob24tMi43LjMvc2V0dXAucHkJMjAxMi0wOC0wNyAxMTowOTo0Ny44NTIwOTQ1MTUgKzAwMDAKK0BAIC0xMDQyLDcgKzEwNDIsNiBAQAorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignX2JzZGRiJywgWydfYnNkZGIuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0gWydic2RkYi5oJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1kYmxpYl9kaXIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPWRibGliX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPWRiX2luY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1kYmxpYnMpKQorICAgICAgICAgZWxzZToKK0BAIC0xMjUyLDcgKzEyNTEsNiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJidWlsZGluZyBkYm0gdXNpbmcgYmRiIgorICAgICAgICAgICAgICAgICAgICAgICAgIGRibWV4dCA9IEV4dGVuc2lvbignZGJtJywgWydkYm1tb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1kYmxpYl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1kYl9pbmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9CRVJLREJfSCcsIE5vbmUpLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY5ZWVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKyMKKyNUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biBweXRob24gdGVzdCBzdWl0ZXMKKworbWFrZSAtZiBMSUJESVIvcHl0aG9uL3B0ZXN0L01ha2VmaWxlIC1rIHJ1bnRlc3QtVEVTVFMgc3JjZGlyPUxJQkRJUi9weXRob24yLjcgVEVTVFBST0c9TElCRElSL3B5dGhvbjIuNy90ZXN0L3JlZ3J0ZXN0LnB5IHwgc2VkIC1lICcvXC5cLlwuIG9rLyBzL14vUEFTUzogL2cnIC1lICcvXC5cLlwuIFtFUlJPUnxGQUlMXS8gcy9eL0ZBSUw6IC9nJyAtZSAnL1wuXC5cLiBza2lwcGVkLyBzL14vU0tJUDogL2cnIC1lICdzLyBcLlwuXC4gb2svL2cnIC1lICdzLyBcLlwuXC4gRVJST1IvL2cnIC1lICdzLyBcLlwuXC4gRkFJTC8vZycgLWUgJ3MvIFwuXC5cLiBza2lwcGVkLy9nJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjYjU1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorcHl0aG9uIHNob3VsZCBzZWFyY2ggZm9yIGRiLmggaW4gaW5jX2RpcnMgYW5kIG5vdCBpbiBhIGhhcmRjb2RlZCBwYXRoLgorSWYgZGIuaCBpcyBmb3VuZCBidXQgSEFTSFZFUlNJT04gaXMgbm90IDIgd2UgYXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCAKK2FkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBiODg3ODA4Li5hZTUxNjA3IDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMTIzNyw2ICsxMjM3LDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyB0aGUgbW9yZSByZWNlbnQgYmVya2VsZXlkYidzIGRiLmggZmlsZSBmaXJzdCBpbiB0aGUgaW5jbHVkZSBwYXRoCisgICAgICAgICAjIHdoZW4gYXR0ZW1wdGluZyB0byBjb21waWxlIGFuZCBpdCB3aWxsIGZhaWwuCisgICAgICAgICBmID0gIi91c3IvaW5jbHVkZS9kYi5oIgorKyAgICAgICAgaWYgbGVuKGluY19kaXJzKSAhPSAwOgorKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oaW5jX2RpcnNbMF0sICJkYi5oIikKKyAKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgaWYgaXNfbWFjb3N4X3Nka19wYXRoKGYpOgorQEAgLTEyNTcsOCArMTI1OSwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPWxpYnJhcmllcykpCisgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICBleHRzLmFwcGVuZChFeHRlbnNpb24oJ2JzZGRiMTg1JywgWydic2RkYm1vZHVsZS5jJ10pKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdic2RkYjE4NScpCisrICAgICAgICAgICAgIyBJZiBhIG5ld2VyIHZlcnNpb24gaXMgZGV0ZWN0ZWQgZG9uJ3QgcmVwb3J0IGFuIHVzZWxlc3MKKysgICAgICAgICAgICAjIHdhcm5pbmcKKysgICAgICAgICAgICAjZWxzZToKKysgICAgICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdic2RkYjE4NScpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdic2RkYjE4NScpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NkYjk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaApAQCAtMCwwICsxLDI3IEBACitUaGlzIHBhdGNoIHNraXBzIG92ZXIgdGhlICdpbXBvcnQgY2hlY2snIHNldHVwLnB5IGRvZXMgd2hlbiBidWlsZGluZworZXh0ZW5zaW9ucy4gIFRoaXMgZ2VuZXJhbGx5IHdvbid0IHdvcmsgd2hlbiBjcm9zcy1jb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQtc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDExLTExLTA0IDE2OjQ2OjM0LjU1Mzc5NjQxMCAtMDUwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDExLTExLTA0IDE2OjU5OjQ5LjY5MjgwMjMxMyAtMDUwMAorQEAgLTI4Nyw2ICsyODcsMTUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHQubmFtZSwgc3lzLmV4Y19pbmZvKClbMV0pKQorICAgICAgICAgICAgIHNlbGYuZmFpbGVkLmFwcGVuZChleHQubmFtZSkKKyAgICAgICAgICAgICByZXR1cm4KKysKKysgICAgICAgICMgSWYgd2UncmUgY3Jvc3MtY29tcGlsaW5nLCB3ZSB3YW50IHRvIHNraXAgdGhlIGltcG9ydCBjaGVjaworKyAgICAgICAgIyBpLmUuIHdlIHNob3VsZG4ndCBiZSBkeW5hbWljYWxseSBsb2FkaW5nIHRhcmdldCBzaGFyZWQgbGlicworKyAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ0NST1NTX0NPTVBJTEUnKSBpcyBub3QgTm9uZToKKysgICAgICAgICAgICBzZWxmLmFubm91bmNlKAorKyAgICAgICAgICAgICAgICAnV0FSTklORzogc2tpcHBpbmcgaW1wb3J0IGNoZWNrIGZvciBjcm9zcy1jb21waWxlZCAiJXMiJyAlCisrICAgICAgICAgICAgICAgIGV4dC5uYW1lKQorKyAgICAgICAgICAgIHJldHVybgorKworICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBNYWMgT1MgWDogVGhlIENhcmJvbi1iYXNlZCBtb2R1bGVzIGNhbm5vdCBiZQorICAgICAgICAgIyByZWxpYWJseSBpbXBvcnRlZCBpbnRvIGEgY29tbWFuZC1saW5lIFB5dGhvbgorICAgICAgICAgaWYgJ0NhcmJvbicgaW4gZXh0LmV4dHJhX2xpbmtfYXJnczoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXB0d2Vha3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwdHdlYWtzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB2YXJpb3VzIHdheXMgbmF0aXZlIHN5c3RlbSBvcHRpb25zIGNhbiBwYXNzIGludG8gdGhlIHB5dGhvbiAKK2NvbXBpbGF0aW9uIGFuZCBzb21laG93IGJyZWFrIEMgbW9kdWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMi8wNC8yMworCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzo0Ny4yOTU1ODI1NTMgKzAwMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzoxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMzEsNyArMjMxLDEzIEBACisgICAgICAgICAjIGNvbXBpbGVycworICAgICAgICAgaWYgY29tcGlsZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCistICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyBjZmxhZ3MKKysgICAgICAgICAgICAjIE5lZWQgdG8gZmlsdGVyIG91dCAtaXN5c3Jvb3QgZnJvbSB0aGUgZmxhZ3MuIElkZWFsbHkgc2hvdWxkIAorKyAgICAgICAgICAgICMgZmlndXJlIG91dCB0YXJnZXQgZmxhZ3MgaGVyZS4KKysgICAgICAgICAgICBmbGFncyA9IFtdCisrICAgICAgICAgICAgZm9yIGYgaW4gY2ZsYWdzLnNwbGl0KCk6CisrICAgICAgICAgICAgICAgIGlmIG5vdCBmLnN0YXJ0c3dpdGgoIi1pc3lzdGVtIik6CisrICAgICAgICAgICAgICAgICAgICBmbGFncy5hcHBlbmQoZikKKysgICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArICcgJy5qb2luKGZsYWdzKQorICAgICAgICAgc2VsZi5jb21waWxlci5zZXRfZXhlY3V0YWJsZXMoKiphcmdzKQorIAorICAgICAgICAgYnVpbGRfZXh0LmJ1aWxkX2V4dGVuc2lvbnMoc2VsZikKK0BAIC0zOTMsNyArMzk5LDYgQEAKKyAgICAgICAgICMgaW50byBjb25maWd1cmUgYW5kIHN0b3JlZCBpbiB0aGUgTWFrZWZpbGUgKGlzc3VlIGZvdW5kIG9uIE9TIFggMTAuMykuCisgICAgICAgICBmb3IgZW52X3ZhciwgYXJnX25hbWUsIGRpcl9saXN0IGluICgKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1SJywgc2VsZi5jb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlycyksCistICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctTCcsIHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdDUFBGTEFHUycsICctSScsIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzKSk6CisgICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorICAgICAgICAgICAgIGlmIGVudl92YWw6CitAQCAtNDE5LDE2ICs0MjQsMTYgQEAKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKy0gICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorKyMgICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKysjICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKyAKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBoYXZlX3VuaWNvZGUgPSB1bmljb2RlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczOTAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2l0ZWN1c3RvbWl6ZS5weQpAQCAtMCwwICsxLDQ1IEBACisjIE9wZW5FbWJlZGRlZCBzaXRlY3VzdG9taXplLnB5IChDKSAyMDAyLTIwMDggTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIEdQTHYyIG9yIGxhdGVyCisjIFZlcnNpb246IDIwMDgxMTIzCisjIEZlYXR1cmVzOgorIyAqIHNldCBwcm9wZXIgZGVmYXVsdCBlbmNvZGluZworIyAqIGVuYWJsZSByZWFkbGluZSBjb21wbGV0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcgorIyAqIGxvYWQgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gc3RhcnR1cAorIyAqIHNhdmUgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gZXhpdCAKKworaW1wb3J0IG9zCisKK2RlZiBfX2V4aXRoYW5kbGVyKCk6CisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgX19yZWdpc3RlckV4aXRIYW5kbGVyKCk6CisgICAgaW1wb3J0IGF0ZXhpdAorICAgIGF0ZXhpdC5yZWdpc3RlciggX19leGl0aGFuZGxlciApCisKK2RlZiBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpOgorICAgIHJlYWRsaW5lLnNldF9oaXN0b3J5X2xlbmd0aCggMTAwMCApCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoICJ0YWI6IGNvbXBsZXRlIiApCisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2RlZiBfX2VuYWJsZURlZmF1bHRFbmNvZGluZygpOgorICAgIGltcG9ydCBzeXMKKyAgICB0cnk6CisgICAgICAgIHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcoICJ1dGY4IiApCisgICAgZXhjZXB0IExvb2t1cEVycm9yOgorICAgICAgICBwYXNzCisKK2ltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgcmxjb21wbGV0ZXIsIHJlYWRsaW5lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfX2VuYWJsZURlZmF1bHRFbmNvZGluZygpCisgICAgX19yZWdpc3RlckV4aXRIYW5kbGVyKCkKKyAgICBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzY1Nzg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitQeXRob24gdHJpZXMgdG8gdXNlIG5jdXJzZXN3IGZyb20gdGhlIGhvc3QsCitpZiBpdCBpcyBub3QgZm91bmQgY2F1c2VzIGFuIGVycm9yIG9uIGNvbmZpZ3VyZSwKK3dlIHNob3VsZCB1c2UgbmN1cnNlc3cgZnJvbSBzeXNyb290IGluc3RlYWQKKworCitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCitAQCAtNDMxMSw3ICs0MzExLDcgQEAgZmkKKyAKKyAjIGZpcnN0IGN1cnNlcyBjb25maWd1cmUgY2hlY2sKKyBhY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCistQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKytDUFBGTEFHUz0iJENQUEZMQUdTIC1JPS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKyAKKyBBQ19DSEVDS19IRUFERVJTKGN1cnNlcy5oIG5jdXJzZXMuaCkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRmZjA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNC4zLmJiCkBAIC0wLDAgKzEsNzYgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy40IgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIFwKK2ZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKK2ZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCitmaWxlOi8vMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggXAorZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAorZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCitmaWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCitmaWxlOi8vMTEwLWVuYWJsZS16bGliLnBhdGNoIFwKK2ZpbGU6Ly8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggXAorZmlsZTovLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoIFwKK2ZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKK2ZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCitmaWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCitmaWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKK2ZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCitmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCitmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAorJHtESVNUUk9fU1JDX1VSSX0gXAorZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCitmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDA5MmQxYmJhNmUxN2YwZDliZDIxYjQ5ZTQ0MWRkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNWIzOTYzNTMzNzY4ZDVmYzMyNWE0ZDdhNmJkNmY2NjY3MjYwMDJkNjk2ZjFkMzk5ZWMwNmIwNDNlYTk5NmI4IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZDk4ZDAxZDQ3MWZhYzhkOGRiZGQ5NzUyMjlkYmEwMyIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCitERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUiCisKK2luaGVyaXQgbmF0aXZlCisKK1JQUk9WSURFUyArPSAicHl0aG9uMy1kaXN0dXRpbHMtbmF0aXZlIHB5dGhvbjMtY29tcHJlc3Npb24tbmF0aXZlIHB5dGhvbjMtdGV4dHV0aWxzLW5hdGl2ZSBweXRob24zLWNvcmUtbmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWJpbmRpcj0ke2JpbmRpcn0vJHtQTn0gLS13aXRob3V0LWVuc3VyZXBpcCIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgQlVJTERfU1lTPSIiIFwKKyAgSE9TVF9TWVM9IiIgXAorICBMSUJDPSIiIFwKKyAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKKyAgTElCPSR7YmFzZWxpYn0gXAorICBBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKycKKworIyBObyBjdHlwZXMgb3B0aW9uIGZvciBweXRob24gMworUFlUSE9OTFNCT1BUUyA9ICIiCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJYXV0b3JlY29uZiAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQorCWZpCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LyR7UE59CisJaW5zdGFsbCAtbSAwNzU1IFBhcnNlci9wZ2VuICR7RH0ke2JpbmRpcn0vJHtQTn0KKworCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcHl0aG9uCisJZm9yIFBZVEhTQ1JJUFQgaW4gYGdyZXAgLXJJbCAke2JpbmRpcn0vJHtQTn0vcHl0aG9uICR7RH0ke2JpbmRpcn0vJHtQTn1gOyBkbworCQlzZWQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbjN8JyAkUFlUSFNDUklQVAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZjMzBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzYuMS4xLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVGhlIFB5UEEgcmVjb21tZW5kZWQgdG9vbCBmb3IgaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMiCitzSE9NRVBBR0Vzc3MgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9waXAiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTQ1NjY1YjUzMDMyYzAyYjM1ZTI5ZGRhYjhlNjFmYTkxIgorCitTUkNOQU1FID0gInBpcCIKK0RFUEVORFMgKz0gInB5dGhvbjMgcHl0aG9uMy1zZXR1cHRvb2xzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIgXAorICBodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9wLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjZiMTllMGE5MzRkOTgyYTVhNGI3OThlOTU3Y2I2ZDQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5ZjNiNjI2ZDIyNWUwOGU3ZjIwZDg1MDQ0YWZhNDBmNjEyZWIzMjg0NDg0MTY5ODEzZGMyZDA2MzFmMmE1NTYiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzCit9CisKKyMgVXNlIHNldHVwdG9vbHMgc2l0ZS5weSBpbnN0ZWFkLCBhdm9pZCBzaGFyZWQgc3RhdGUgaXNzdWUKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcy9zaXRlLnB5CisgICAgcm0gJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL19fcHljYWNoZV9fL3NpdGUuY3B5dGhvbi0zNC5weWMKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24zLWNvbXBpbGUgXAorICBweXRob24zLWlvIFwKKyAgcHl0aG9uMy1qc29uIFwKKyAgcHl0aG9uMy1uZXRzZXJ2ZXIgXAorICBweXRob24zLXNldHVwdG9vbHMgXAorICBweXRob24zLXVuaXhhZG1pbiBcCisgIHB5dGhvbjMteG1scnBjIFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBhYzgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18xOC4yLmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiRG93bmxvYWQsIGJ1aWxkLCBpbnN0YWxsLCB1cGdyYWRlLCBhbmQgdW5pbnN0YWxsIFB5dGhvbiBwYWNrYWdlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5weXRob24ub3JnL3NldHVwdG9vbHMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2V0dXAucHk7YmVnaW5saW5lPTc4O2VuZGxpbmU9Nzg7bWQ1PThhMzE0MjcwZGQ3YThkYmNhNzQxNzc1NDE1ZjE3MTZlIgorCitTUkNOQU1FID0gInNldHVwdG9vbHMiCitERVBFTkRTICs9ICJweXRob24zIgorREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gInB5dGhvbjMtbmF0aXZlIgorCitTUkNfVVJJID0gIiBcCisgIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3MvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNTJiNGU0ODkzOWVmMzExZDcyMDRmOGZlOTQwNzY0ZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDk5NGE1OGRmMjdlYTVkYzUyMzc4MmE2MDEzNTdhMjE5OGI3NDkzZGNjOTlhMzBkNTE4MjdhMjM1ODViNWIxZCIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMKK30KKyMKKyMgIFRoZSBpbnN0YWxsZXIgcHV0cyB0aGUgd3JvbmcgcGF0aCBpbiB0aGUgc2V0dXB0b29scy5wdGggZmlsZS4gIENvcnJlY3QgaXQuCisjCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKKyAgICBtdiAke0R9JHtiaW5kaXJ9L2Vhc3lfaW5zdGFsbCAke0R9JHtiaW5kaXJ9L2Vhc3kzX2luc3RhbGwKKyAgICBlY2hvICIuLyR7U1JDTkFNRX0tJHtQVn0tcHkke1BZVEhPTl9CQVNFVkVSU0lPTn0uZWdnIiA+ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zZXR1cHRvb2xzLnB0aAorfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbjMtZGlzdHV0aWxzIFwKKyAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiXAorICBweXRob24zLWN0eXBlcyBcCisgIHB5dGhvbjMtZGlzdHV0aWxzIFwKKyAgcHl0aG9uMy1lbWFpbCBcCisgIHB5dGhvbjMtaW1wb3J0bGliIFwKKyAgcHl0aG9uMy1udW1iZXJzIFwKKyAgcHl0aG9uMy1jb21wcmVzc2lvbiBcCisgIHB5dGhvbjMtc2hlbGwgXAorICBweXRob24zLXN1YnByb2Nlc3MgXAorICBweXRob24zLXRleHR1dGlscyBcCisgIHB5dGhvbjMtcGtndXRpbCBcCisgIHB5dGhvbjMtdGhyZWFkaW5nIFwKKyAgcHl0aG9uMy1taXNjIFwKKyAgcHl0aG9uMy11bml0dGVzdCBcCisgIHB5dGhvbjMteG1sIFwKKyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTA2YTU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorV2UgY3Jvc3MgY29tcGlsZSBweXRob24uIFRoaXMgcGF0Y2ggdXNlcyB0b29scyBmcm9tIGhvc3QvbmF0aXZlCitweXRob24gaW5zdGVhZCBvZiBpbi10cmVlIHRvb2xzCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtDb25maWd1cmF0aW9uIFNwZWNpZmljXQorCistLS0KKyBNYWtlZmlsZS5wcmUuaW4gfCAgIDI1ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLnByZS5pbgorKysrIGIvTWFrZWZpbGUucHJlLmluCitAQCAtMTkzLDYgKzE5Myw3IEBAIExJQk9CSlM9CUBMSUJPQkpTQAorIAorIFBZVEhPTj0JCXB5dGhvbiQoRVhFKQorIEJVSUxEUFlUSE9OPQlweXRob24kKEJVSUxERVhFKQorK0hPU1RQWVRIT049CSQoQlVJTERQWVRIT04pCisgCisgUFlUSE9OX0ZPUl9CVUlMRD1AUFlUSE9OX0ZPUl9CVUlMREAKKyBfUFlUSE9OX0hPU1RfUExBVEZPUk09QF9QWVRIT05fSE9TVF9QTEFURk9STUAKK0BAIC0yMzksNiArMjQwLDcgQEAgTElCRkZJX0lOQ0xVREVESVI9CUBMSUJGRklfSU5DTFVERURJUkAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgUGFyc2VyCisgUEdFTj0JCVBhcnNlci9wZ2VuJChFWEUpCisrSE9TVFBHRU49CSQoUEdFTikkKEVYRSkKKyAKKyBQU1JDUz0JCVwKKyAJCVBhcnNlci9hY2NlbGVyLmMgXAorQEAgLTQ1MSw3ICs0NTMsNyBAQCBidWlsZF9hbGxfZ2VuZXJhdGVfcHJvZmlsZToKKyAKKyBydW5fcHJvZmlsZV90YXNrOgorIAk6ICMgRklYTUU6IGNhbid0IHJ1biBmb3IgYSBjcm9zcyBidWlsZAorLQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKFBST0ZJTEVfVEFTSykKKysJJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChQUk9GSUxFX1RBU0spCisgCisgYnVpbGRfYWxsX3VzZV9wcm9maWxlOgorIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS1jb3JyZWN0aW9uIgorQEAgLTY0MCw3ICs2NDIsNyBAQCAkKElPX09CSlMpOiAkKElPX0gpCisgJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCisgCQkkKE1BS0UpICQoUEdFTikKKy0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisrCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCitAQCAtODIwLDcgKzgyMiw3IEBAICQoTElCUkFSWV9PQkpTKSAkKE1PRE9CSlMpIE1vZHVsZXMvcHl0aG8KKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgCisgVEVTVE9QVFM9CSQoRVhUUkFURVNUT1BUUykKKy1URVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKFRFU1RQWVRIT05PUFRTKQorK1RFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pICQoVEVTVFBZVEhPTk9QVFMpCisgVEVTVFJVTk5FUj0JJChURVNUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9ydW5fdGVzdHMucHkKKyBURVNUVElNRU9VVD0JMzYwMAorIAorQEAgLTEyMjksNyArMTIzMSw3IEBAIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmU6CSQoTERMSUJSQVJZKQorIAkJZmk7IFwKKyAJZG9uZQorIAkkKExOKSAtZnNuIGluY2x1ZGUvcHl0aG9uJChMRFZFUlNJT04pICQoREVTVERJUikkKHByZWZpeCkvSGVhZGVycworLQlzZWQgJ3MvJVZFUlNJT04lLyciYCQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1jICdpbXBvcnQgcGxhdGZvcm07IHByaW50KHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkpJ2AiJy9nJyA8ICQoUkVTU1JDRElSKS9JbmZvLnBsaXN0ID4gJChERVNURElSKSQocHJlZml4KS9SZXNvdXJjZXMvSW5mby5wbGlzdAorKwlzZWQgJ3MvJVZFUlNJT04lLyciYCQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pIC1jICdpbXBvcnQgcGxhdGZvcm07IHByaW50KHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkpJ2AiJy9nJyA8ICQoUkVTU1JDRElSKS9JbmZvLnBsaXN0ID4gJChERVNURElSKSQocHJlZml4KS9SZXNvdXJjZXMvSW5mby5wbGlzdAorIAkkKExOKSAtZnNuICQoVkVSU0lPTikgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvQ3VycmVudAorIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvJChQWVRIT05GUkFNRVdPUkspICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpLyQoUFlUSE9ORlJBTUVXT1JLKQorIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvSGVhZGVycyAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9IZWFkZXJzCitAQCAtMTI4OCw3ICsxMjkwLDcgQEAgY29uZmlnLnN0YXR1czoJJChzcmNkaXIpL2NvbmZpZ3VyZQorIAorICMgUnVuIHJlaW5kZW50IG9uIHRoZSBsaWJyYXJ5CisgcmVpbmRlbnQ6CistCS4vJChCVUlMRFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgLXIgJChzcmNkaXIpL0xpYgorKwkkKEhPU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IC1yICQoc3JjZGlyKS9MaWIKKyAKKyAjIFJlcnVuIGNvbmZpZ3VyZSB3aXRoIHRoZSBzYW1lIG9wdGlvbnMgYXMgaXQgd2FzIHJ1biBsYXN0IHRpbWUsCisgIyBwcm92aWRlZCB0aGUgY29uZmlnLnN0YXR1cyBzY3JpcHQgZXhpc3RzCitAQCAtMTQxNCw3ICsxNDE2LDcgQEAgZnVubnk6CisgCisgIyBQZXJmb3JtIHNvbWUgdmVyaWZpY2F0aW9uIGNoZWNrcyBvbiBhbnkgbW9kaWZpZWQgZmlsZXMuCisgcGF0Y2hjaGVjazoKKy0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQorKwkkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CisgCisgIyBEZXBlbmRlbmNpZXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZiMjRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gMmY1YTRjNzA4ZDkwZmE4ZGIyMWY0NDZhZTg3OWNmZjc5Mzg3NDQ4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIwIE1heSAyMDEzIDIxOjAzOjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGgycHk6IEZpeCBpc3N1ZSAxMzAzMiB3aGVyZSBpdCBmYWlscyB3aXRoIFVuaWNvZGVEZWNvZGVFcnJvcgorCit1c2UgdXRmLTggdG8gb3BlbiB0aGUgZmlsZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBUb29scy9zY3JpcHRzL2gycHkucHkgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9oMnB5LnB5IGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CitpbmRleCA0Zjg3MWQ5Li5hNTNmYmUwIDEwMDc1NQorLS0tIGEvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CisrKysgYi9Ub29scy9zY3JpcHRzL2gycHkucHkKK0BAIC02OSwxMyArNjksMTMgQEAgZGVmIG1haW4oKToKKyAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcjIEdlbmVyYXRlZCBieSBoMnB5IGZyb20gc3RkaW5cbicpCisgICAgICAgICAgICAgcHJvY2VzcyhzeXMuc3RkaW4sIHN5cy5zdGRvdXQpCisgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQorKyAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgICAgICAgICAgIGkgPSBvdXRmaWxlLnJmaW5kKCcuJykKKyAgICAgICAgICAgICBpZiBpID4gMDogb3V0ZmlsZSA9IG91dGZpbGVbOmldCisgICAgICAgICAgICAgbW9kbmFtZSA9IG91dGZpbGUudXBwZXIoKQorICAgICAgICAgICAgIG91dGZpbGUgPSBtb2RuYW1lICsgJy5weScKKy0gICAgICAgICAgICBvdXRmcCA9IG9wZW4ob3V0ZmlsZSwgJ3cnKQorKyAgICAgICAgICAgIG91dGZwID0gb3BlbihvdXRmaWxlLCAndycsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgICAgICAgb3V0ZnAud3JpdGUoJyMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSAlc1xuJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgIGZpbGVkaWN0ID0ge30KKyAgICAgICAgICAgICBmb3IgZGlyIGluIHNlYXJjaGRpcnM6CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2VmMjg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRG9udCBjcm9zcyBjb21waWxlIHNpdGUgcGFja2FnZXMKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW0VtYmVkZGVkLVNwZWNpZmljXQorCistLS0KKyBNYWtlZmlsZS5wcmUuaW4gfCAgIDE2IC0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLnByZS5pbgorKysrIGIvTWFrZWZpbGUucHJlLmluCitAQCAtMTA3OCwyNCArMTA3OCw2IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKKyAJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTW9kdWxlcy94eG1vZHVsZS5jIFwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpIC1mIFwKKy0JCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorLQkJJChERVNURElSKSQoTElCREVTVCkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKSAtZiBcCistCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKy0JCSQoREVTVERJUikkKExJQkRFU1QpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorLQkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKy0JCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisgCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZDJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgV2UgbmVlZCB0byBzdXBwbHkgU1RBR0lOR19JTkNESVIgaGVyZSwgb3RoZXJ3aXNlIHRoZSBUayBoZWFkZXJzCisjIHdpbGwgbm90IGJlIGZvdW5kLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS5kZT4KKworSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL3NldHVwLnB5CTIwMTItMDktMjAgMTU6MjQ6MTQuMDA5MTI0MDAzIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5CTIwMTItMDktMjAgMTU6MjU6MDguNDQ5MTI0OTYzIC0wNzAwCitAQCAtMTYyMCw3ICsxNjIwLDcgQEAKKyAgICAgICAgICAgICAgICAgZG90dmVyc2lvbiA9IGRvdHZlcnNpb25bOi0xXSArICcuJyArIGRvdHZlcnNpb25bLTFdCisgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViID0gW10KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiA9IFtdCistICAgICAgICAgICAgZm9yIGRpciBpbiBpbmNfZGlyczoKKysgICAgICAgICAgICBmb3IgZGlyIGluIFtvcy5nZXRlbnYoIlNUQUdJTkdfSU5DRElSIildOgorICAgICAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0Y2wiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0ayIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IHRjbF9pbmNsdWRlX3N1YgorQEAgLTE2MzksMjIgKzE2MzksNiBAQAorICAgICAgICAgICAgIGlmIGRpciBub3QgaW4gaW5jbHVkZV9kaXJzOgorICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKGRpcikKKyAKKy0gICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3JpZXMKKy0gICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ3N1bm9zNSc6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9vcGVud2luL2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI2L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWI2NCcpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYicpCistICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL1gxMVI1L2luY2x1ZGUnKToKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9saWInKQorLSAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAjIEFzc3VtZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBYMTEKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExL2xpYicpCistCisgICAgICAgICAjIElmIEN5Z3dpbiwgdGhlbiB2ZXJpZnkgdGhhdCBYIGlzIGluc3RhbGxlZCBiZWZvcmUgcHJvY2VlZGluZworICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgICAgICB4MTFfaW5jID0gZmluZF9maWxlKCdYMTEvWGxpYi5oJywgW10sIGluY2x1ZGVfZGlycykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZWFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0RvIG5vdCBoYXJkY29kZSAvdXNyIGludG8gaW5jbHVkZSBwYXRocyB3aGVuIGNyb3NzIGNvbXBpbGluZworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKyAKKy0tLQorIHNldHVwLnB5IHwgICAxNSArKy0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IFB5dGhvbi0zLjMuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMi5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTMuMy4yL3NldHVwLnB5CitAQCAtNDQ0LDcgKzQ0NCw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgb25seSBjaGFuZ2UgdGhpcyBmb3IgY3Jvc3MgYnVpbGRzIGZvciAzLjMsIGlzc3VlcyBvbiBNYWdlaWEKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9nY2NfcGF0aHMoKQorLSAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKKysgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKKyAKKyAgICAgICAgICMgQWRkIHBhdGhzIHNwZWNpZmllZCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIExERkxBR1MgYW5kCisgICAgICAgICAjIENQUEZMQUdTIGZvciBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMuCitAQCAtNDgwLDcgKzQ4MSw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KSAhPSAnL3VzcicgXAorKyAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZyBhbmQgb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpICE9ICcvdXNyJyBcCisgICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZjI2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgd2hlbiBjb21waWxpbmcgZm9yIGFuIGVtYmVkZGVkIHN5c3RlbSwgd2UgbmVlZCBldmVyeSBiaXQgb2YKKyMgcGVyZm9ybWFuY2Ugd2UgY2FuIGdldC4gZGVmYXVsdCB0byBvcHRpbWl6ZWQgd2l0aCB0aGUgb3B0aW9uCisjIG9mIG9wdC1vdXQuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorCisKKzIwMTIvMDUvMDEKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1JlYmFzZWQgZm9yIDMuNC4yIDAyLzIwMTUKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL1B5dGhvbi9jb21waWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9QeXRob24vY29tcGlsZS5jCisrKysgUHl0aG9uLTMuNC4yL1B5dGhvbi9jb21waWxlLmMKK0BAIC0zMCw3ICszMCw3IEBACisgI2luY2x1ZGUgInN5bXRhYmxlLmgiCisgI2luY2x1ZGUgIm9wY29kZS5oIgorIAorLWludCBQeV9PcHRpbWl6ZUZsYWcgPSAwOworK2ludCBQeV9PcHRpbWl6ZUZsYWcgPSAxOworIAorICNkZWZpbmUgREVGQVVMVF9CTE9DS19TSVpFIDE2CisgI2RlZmluZSBERUZBVUxUX0JMT0NLUyA4CitJbmRleDogUHl0aG9uLTMuNC4yL01vZHVsZXMvbWFpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTW9kdWxlcy9tYWluLmMKKysrKyBQeXRob24tMy40LjIvTW9kdWxlcy9tYWluLmMKK0BAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyB3Y2hhcl90ICoqb3JpZ19hcmd2OworIHN0YXRpYyBpbnQgIG9yaWdfYXJnYzsKKyAKKyAvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLworLSNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlJSm06T3FSc1N0dXZWVzp4WDo/IgorKyNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlJSm06Tk9xUnNTdHV2Vlc6eFg6PyIKKyAKKyAjZGVmaW5lIFBST0dSQU1fT1BUUyBCQVNFX09QVFMKKyAKK0BAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBjaGFyICp1c2FnZV8yID0gIlwKKyAtbSBtb2QgOiBydW4gbGlicmFyeSBtb2R1bGUgYXMgYSBzY3JpcHQgKHRlcm1pbmF0ZXMgb3B0aW9uIGxpc3QpXG5cCisgLU8gICAgIDogb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlIHNsaWdodGx5OyBhbHNvIFBZVEhPTk9QVElNSVpFPXhcblwKKyAtT08gICAgOiByZW1vdmUgZG9jLXN0cmluZ3MgaW4gYWRkaXRpb24gdG8gdGhlIC1PIG9wdGltaXphdGlvbnNcblwKKystTiAgICAgOiBkbyBOT1Qgb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlXG5cCisgLXEgICAgIDogZG9uJ3QgcHJpbnQgdmVyc2lvbiBhbmQgY29weXJpZ2h0IG1lc3NhZ2VzIG9uIGludGVyYWN0aXZlIHN0YXJ0dXBcblwKKyAtcyAgICAgOiBkb24ndCBhZGQgdXNlciBzaXRlIGRpcmVjdG9yeSB0byBzeXMucGF0aDsgYWxzbyBQWVRIT05OT1VTRVJTSVRFXG5cCisgLVMgICAgIDogZG9uJ3QgaW1wbHkgJ2ltcG9ydCBzaXRlJyBvbiBpbml0aWFsaXphdGlvblxuXAorQEAgLTQxOCw4ICs0MTksOCBAQCBQeV9NYWluKGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKKyAKKyAgICAgICAgIC8qIGNhc2UgJ0onOiByZXNlcnZlZCBmb3IgSnl0aG9uICovCisgCistICAgICAgICBjYXNlICdPJzoKKy0gICAgICAgICAgICBQeV9PcHRpbWl6ZUZsYWcrKzsKKysgICAgICAgIGNhc2UgJ04nOgorKyAgICAgICAgICAgIFB5X09wdGltaXplRmxhZz0wOworICAgICAgICAgICAgIGJyZWFrOworIAorICAgICAgICAgY2FzZSAnQic6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5OTI5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitjb25zaWRlciBvcGtnIGRpcmVjdG9yaWVzIHdoZW4gY2xlYW5pbmcgdXAKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworLS0tCisgTWFrZWZpbGUucHJlLmluIHwgICAgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCistLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrKyBiL01ha2VmaWxlLnByZS5pbgorQEAgLTEzMDYsOCArMTMwNiw4IEBAIHRvdWNoOgorICMgU2FuaXRhdGlvbiB0YXJnZXRzIC0tIGNsZWFuIGxlYXZlcyBsaWJyYXJpZXMsIGV4ZWN1dGFibGVzIGFuZCB0YWdzCisgIyBmaWxlcywgd2hpY2ggY2xvYmJlciByZW1vdmVzIGFzIHdlbGwKKyBweWNyZW1vdmFsOgorLQktZmluZCAkKHNyY2RpcikgLWRlcHRoIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9ICc7JworLQktZmluZCAkKHNyY2RpcikgLW5hbWUgJyoucHlbY29dJyAtZXhlYyBybSAtZiB7fSAnOycKKysJLWZpbmQgJChzcmNkaXIpICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1kZXB0aCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fSAnOycKKysJLWZpbmQgJChzcmNkaXIpICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLnB5W2NvXScgLWV4ZWMgcm0gLWYge30gJzsnCisgCisgcm10ZXN0dHVyZHM6CisgCS1ybSAtZiAqQkFEICpHT09EICpTS0lQUEVECitAQCAtMTMyMSw5ICsxMzIxLDkgQEAgZG9jY2xlYW46CisgCS1ybSAtcmYgRG9jL3Rvb2xzL3NwaGlueCBEb2MvdG9vbHMvcHlnbWVudHMgRG9jL3Rvb2xzL2RvY3V0aWxzCisgCisgY2xlYW46IHB5Y3JlbW92YWwKKy0JZmluZCAuIC1uYW1lICcqLltvYV0nIC1leGVjIHJtIC1mIHt9ICc7JworLQlmaW5kIC4gLW5hbWUgJyouc1tvbF0nIC1leGVjIHJtIC1mIHt9ICc7JworLQlmaW5kIC4gLW5hbWUgJyouc28uWzAtOV0qLlswLTldKicgLWV4ZWMgcm0gLWYge30gJzsnCisrCWZpbmQgLiAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5bb2FdJyAtZXhlYyBybSAtZiB7fSAnOycKKysJZmluZCAuICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLnNbb2xdJyAtZXhlYyBybSAtZiB7fSAnOycKKysJZmluZCAuICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLnNvLlswLTldKi5bMC05XSonIC1leGVjIHJtIC1mIHt9ICc7JworIAlmaW5kIGJ1aWxkIC1uYW1lICdmZmljb25maWcuaCcgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKKyAJZmluZCBidWlsZCAtbmFtZSAnZmZpY29uZmlnLnB5JyAtZXhlYyBybSAtZiB7fSAnOycgfHwgdHJ1ZQorIAktcm0gLWYgTGliL2xpYjJ0bzMvKkdyYW1tYXIqLnBpY2tsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2NDE5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorZG8gbm90ICJhZGp1c3QiIHB5dGhvbiBmaWxlcyBiZWZvcmUgY29weWluZworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkLVNwZWNpZmljXQorCistLS0KKyBMaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weSB8ICAgNDMgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCisKKy0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorQEAgLTUxLDEwICs1MSw3IEBAIGNsYXNzIGJ1aWxkX3NjcmlwdHMoQ29tbWFuZCk6CisgCisgCisgICAgIGRlZiBjb3B5X3NjcmlwdHMoc2VsZik6CistICAgICAgICAiIiJDb3B5IGVhY2ggc2NyaXB0IGxpc3RlZCBpbiAnc2VsZi5zY3JpcHRzJzsgaWYgaXQncyBtYXJrZWQgYXMgYQorLSAgICAgICAgUHl0aG9uIHNjcmlwdCBpbiB0aGUgVW5peCB3YXkgKGZpcnN0IGxpbmUgbWF0Y2hlcyAnZmlyc3RfbGluZV9yZScsCistICAgICAgICBpZS4gc3RhcnRzIHdpdGggIlwjISIgYW5kIGNvbnRhaW5zICJweXRob24iKSwgdGhlbiBhZGp1c3QgdGhlIGZpcnN0CistICAgICAgICBsaW5lIHRvIHJlZmVyIHRvIHRoZSBjdXJyZW50IFB5dGhvbiBpbnRlcnByZXRlciBhcyB3ZSBjb3B5LgorKyAgICAgICAgIiIiQ29weSBlYWNoIHNjcmlwdCBsaXN0ZWQgaW4gJ3NlbGYuc2NyaXB0cycKKyAgICAgICAgICIiIgorICAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kaXIpCisgICAgICAgICBvdXRmaWxlcyA9IFtdCitAQCAtNzgsNjQgKzc1LDEwIEBAIGNsYXNzIGJ1aWxkX3NjcmlwdHMoQ29tbWFuZCk6CisgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CisgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICBmID0gTm9uZQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIGVuY29kaW5nLCBsaW5lcyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhmLnJlYWRsaW5lKQorLSAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKy0gICAgICAgICAgICAgICAgZmlyc3RfbGluZSA9IGYucmVhZGxpbmUoKQorLSAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3RfbGluZToKKy0gICAgICAgICAgICAgICAgICAgIHNlbGYud2FybigiJXMgaXMgYW4gZW1wdHkgZmlsZSAoc2tpcHBpbmcpIiAlIHNjcmlwdCkKKy0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistCistICAgICAgICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZS5tYXRjaChmaXJzdF9saW5lKQorLSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKy0gICAgICAgICAgICAgICAgICAgIGFkanVzdCA9IFRydWUKKy0gICAgICAgICAgICAgICAgICAgIHBvc3RfaW50ZXJwID0gbWF0Y2guZ3JvdXAoMSkgb3IgYicnCistCistICAgICAgICAgICAgaWYgYWRqdXN0OgorLSAgICAgICAgICAgICAgICBsb2cuaW5mbygiY29weWluZyBhbmQgYWRqdXN0aW5nICVzIC0+ICVzIiwgc2NyaXB0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkX2RpcikKKy0gICAgICAgICAgICAgICAgdXBkYXRlZF9maWxlcy5hcHBlbmQob3V0ZmlsZSkKKy0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKKy0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzeXNjb25maWcucHl0aG9uX2J1aWxkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzZWxmLmV4ZWN1dGFibGUKKy0gICAgICAgICAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG9zLnBhdGguam9pbigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJCSU5ESVIiKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJXMlcyIgJSAoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJWRVJTSU9OIiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiRVhFIikpKQorLSAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG9zLmZzZW5jb2RlKGV4ZWN1dGFibGUpCistICAgICAgICAgICAgICAgICAgICBzaGViYW5nID0gYiIjISIgKyBleGVjdXRhYmxlICsgcG9zdF9pbnRlcnAgKyBiIlxuIgorLSAgICAgICAgICAgICAgICAgICAgIyBQeXRob24gcGFyc2VyIHN0YXJ0cyB0byByZWFkIGEgc2NyaXB0IHVzaW5nIFVURi04IHVudGlsCistICAgICAgICAgICAgICAgICAgICAjIGl0IGdldHMgYSAjY29kaW5nOnh4eCBjb29raWUuIFRoZSBzaGViYW5nIGhhcyB0byBiZSB0aGUKKy0gICAgICAgICAgICAgICAgICAgICMgZmlyc3QgbGluZSBvZiBhIGZpbGUsIHRoZSAjY29kaW5nOnh4eCBjb29raWUgY2Fubm90IGJlCistICAgICAgICAgICAgICAgICAgICAjIHdyaXR0ZW4gYmVmb3JlLiBTbyB0aGUgc2hlYmFuZyBoYXMgdG8gYmUgZGVjb2RhYmxlIGZyb20KKy0gICAgICAgICAgICAgICAgICAgICMgVVRGLTguCistICAgICAgICAgICAgICAgICAgICB0cnk6CistICAgICAgICAgICAgICAgICAgICAgICAgc2hlYmFuZy5kZWNvZGUoJ3V0Zi04JykKKy0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzaGViYW5nICh7IXJ9KSBpcyBub3QgZGVjb2RhYmxlICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gdXRmLTgiLmZvcm1hdChzaGViYW5nKSkKKy0gICAgICAgICAgICAgICAgICAgICMgSWYgdGhlIHNjcmlwdCBpcyBlbmNvZGVkIHRvIGEgY3VzdG9tIGVuY29kaW5nICh1c2UgYQorLSAgICAgICAgICAgICAgICAgICAgIyAjY29kaW5nOnh4eCBjb29raWUpLCB0aGUgc2hlYmFuZyBoYXMgdG8gYmUgZGVjb2RhYmxlIGZyb20KKy0gICAgICAgICAgICAgICAgICAgICMgdGhlIHNjcmlwdCBlbmNvZGluZyB0b28uCistICAgICAgICAgICAgICAgICAgICB0cnk6CistICAgICAgICAgICAgICAgICAgICAgICAgc2hlYmFuZy5kZWNvZGUoZW5jb2RpbmcpCistICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc2hlYmFuZyAoeyFyfSkgaXMgbm90IGRlY29kYWJsZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHRoZSBzY3JpcHQgZW5jb2RpbmcgKHt9KSIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzaGViYW5nLCBlbmNvZGluZykpCistICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgIndiIikgYXMgb3V0ZjoKKy0gICAgICAgICAgICAgICAgICAgICAgICBvdXRmLndyaXRlKHNoZWJhbmcpCistICAgICAgICAgICAgICAgICAgICAgICAgb3V0Zi53cml0ZWxpbmVzKGYucmVhZGxpbmVzKCkpCistICAgICAgICAgICAgICAgIGlmIGY6CistICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICBpZiBmOgorKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKy0gICAgICAgICAgICAgICAgdXBkYXRlZF9maWxlcy5hcHBlbmQob3V0ZmlsZSkKKy0gICAgICAgICAgICAgICAgc2VsZi5jb3B5X2ZpbGUoc2NyaXB0LCBvdXRmaWxlKQorKyAgICAgICAgICAgIHVwZGF0ZWRfZmlsZXMuYXBwZW5kKG91dGZpbGUpCisrICAgICAgICAgICAgc2VsZi5jb3B5X2ZpbGUoc2NyaXB0LCBvdXRmaWxlKQorIAorICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgIGZvciBmaWxlIGluIG91dGZpbGVzOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTJhMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorRW5hYmxlIHpsaWIgaW4gcHl0aG9uCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCisKKy0tLQorIE1vZHVsZXMvU2V0dXAuZGlzdCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvTW9kdWxlcy9TZXR1cC5kaXN0CisrKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKK0BAIC0zNTQsNyArMzU0LDcgQEAgX3N5bXRhYmxlIHN5bXRhYmxlbW9kdWxlLmMKKyAjIEFuZHJldyBLdWNobGluZydzIHpsaWIgbW9kdWxlLgorICMgVGhpcyByZXF1aXJlIHpsaWIgMS4xLjMgKG9yIGxhdGVyKS4KKyAjIFNlZSBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvCistI3psaWIgemxpYm1vZHVsZS5jIC1JJChwcmVmaXgpL2luY2x1ZGUgLUwkKGV4ZWNfcHJlZml4KS9saWIgLWx6CisremxpYiB6bGlibW9kdWxlLmMgLWx6CisgCisgIyBJbnRlcmZhY2UgdG8gdGhlIEV4cGF0IFhNTCBwYXJzZXIKKyAjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMmRmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaApAQCAtMCwwICsxLDgxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCiswMi8yMDE1IFJlYmFzZWQgZm9yIFB5dGhvbiAzLjQuMgorCisjIFRoZSBwcm9wZXIgcHJlZml4IGlzIGluc2lkZSBvdXIgc3RhZ2luZyBhcmVhLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KKyMgU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KKyMgU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTE2LDEwICsxNiwxMSBAQCBpbXBvcnQgc3lzCisgZnJvbSAuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCisgCisgIyBUaGVzZSBhcmUgbmVlZGVkIGluIGEgY291cGxlIG9mIHNwb3RzLCBzbyBqdXN0IGNvbXB1dGUgdGhlbSBvbmNlLgorLVBSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkKKy1FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KQorLUJBU0VfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpCistQkFTRV9FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfZXhlY19wcmVmaXgpCisrUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrQkFTRV9QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytCQVNFX0VYRUNfUFJFRklYPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX2V4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorKworIAorICMgUGF0aCB0byB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuIE9uIFdpbmRvd3MgdGhlIGJpbmFyeSBtYXkKKyAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKK0BAIC05Myw3ICs5NCw5IEBAIGRlZiBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTAsIHByZWYKKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5iYXNlX3ByZWZpeCBvcgorICAgICBzeXMuYmFzZV9leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKy0gICAgaWYgcHJlZml4IGlzIE5vbmU6CisrICAgIGlmIHByZWZpeCBpcyBOb25lIGFuZCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddICE9ICIiOgorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXS5yc3RyaXAoJ2luY2x1ZGUnKQorKyAgICBlbGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgQkFTRV9FWEVDX1BSRUZJWCBvciBCQVNFX1BSRUZJWAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBpZiBweXRob25fYnVpbGQ6CitAQCAtMTM0LDYgKzEzNywxMiBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuCisgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMuYmFzZV9wcmVmaXggb3IKKyAgICAgc3lzLmJhc2VfZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCisrICAgIGlmIHByZWZpeCBpcyBOb25lIGFuZCBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddICE9ICIiOgorKyAgICAgICAgbGliX2Jhc2VuYW1lID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5zcGxpdCgnLycpWy0xXQorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5yc3RyaXAobGliX2Jhc2VuYW1lKQorKyAgICBlbHNlOgorKyAgICAgICAgbGliX2Jhc2VuYW1lID0gc3lzLmxpYgorKworICAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBCQVNFX0VYRUNfUFJFRklYIG9yIEJBU0VfUFJFRklYCitAQCAtMTQyLDcgKzE1MSw3IEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW4KKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfYmFzZW5hbWUsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgorICAgICAgICAgZWxzZToKK0BAIC0yNDIsNyArMjUxLDcgQEAgZGVmIGdldF9jb25maWdfaF9maWxlbmFtZSgpOgorICAgICBlbHNlOgorICAgICAgICAgaW5jX2RpciA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MSkKKyAKKy0gICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCAncHljb25maWcuaCcpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApKQorIAorIAorIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKK0BAIC0yNTEsNyArMjYwLDcgQEAgZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgorICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihfc3lzX2hvbWUgb3IgcHJvamVjdF9iYXNlLCAiTWFrZWZpbGUiKQorICAgICBsaWJfZGlyID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuZGFyZF9saWI9MSkKKyAgICAgY29uZmlnX2ZpbGUgPSAnY29uZmlnLXt9e30nLmZvcm1hdChnZXRfcHl0aG9uX3ZlcnNpb24oKSwgYnVpbGRfZmxhZ3MpCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgY29uZmlnX2ZpbGUsICdNYWtlZmlsZScpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgY29uZmlnX2ZpbGUsICdNYWtlZmlsZScpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgCisgZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCBnPU5vbmUpOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDU2NTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBweXRob24tcmVhZGxpbmUKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBTcGVjaWZpY10KKworLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtNjY2LDQ1ICs2NjYsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIHJlYWRsaW5lCisgICAgICAgICBkb19yZWFkbGluZSA9IHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdyZWFkbGluZScpCisgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSAiIgorLSAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAiIgorLSAgICAgICAgIyBDYW5ub3QgdXNlIG9zLnBvcGVuIGhlcmUgaW4gcHkzay4KKy0gICAgICAgIHRtcGZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF90ZW1wLCAncmVhZGxpbmVfdGVybWNhcF9saWInKQorLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfdGVtcCk6CistICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5idWlsZF90ZW1wKQorLSAgICAgICAgIyBEZXRlcm1pbmUgaWYgcmVhZGxpbmUgaXMgYWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMgb3IgdGluZm8uCistICAgICAgICBpZiBkb19yZWFkbGluZToKKy0gICAgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CistICAgICAgICAgICAgICAgIHJldCA9IG9zLnN5c3RlbSgiJXMgLWQgJXMgfCBncmVwICcoTkVFREVEKScgPiAlcyIgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdSRUFERUxGJyksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19yZWFkbGluZSwgdG1wZmlsZSkpCistICAgICAgICAgICAgZWxpZiBmaW5kX2V4ZWN1dGFibGUoJ2xkZCcpOgorLSAgICAgICAgICAgICAgICByZXQgPSBvcy5zeXN0ZW0oImxkZCAlcyA+ICVzIiAlIChkb19yZWFkbGluZSwgdG1wZmlsZSkpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmV0ID0gMjU2CistICAgICAgICAgICAgaWYgcmV0ID4+IDggPT0gMDoKKy0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRtcGZpbGUpIGFzIGZwOgorLSAgICAgICAgICAgICAgICAgICAgZm9yIGxuIGluIGZwOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICdjdXJzZXMnIGluIGxuOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSByZS5zdWIoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJy4qbGliKG4/Y3Vyc2Vzdz8pXC5zby4qJywgcidcMScsIGxuCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICkucnN0cmlwKCkKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgICAgICAgICAgICAgICAjIHRlcm1jYXAgaW50ZXJmYWNlIHNwbGl0IG91dCBmcm9tIG5jdXJzZXMKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAndGluZm8nIGluIGxuOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSAndGluZm8nCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wZmlsZSk6CistICAgICAgICAgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQorLSAgICAgICAgIyBJc3N1ZSA3Mzg0OiBJZiByZWFkbGluZSBpcyBhbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcywKKy0gICAgICAgICMgdXNlIHRoZSBzYW1lIGxpYnJhcnkgZm9yIHRoZSByZWFkbGluZSBhbmQgY3Vyc2VzIG1vZHVsZXMuCistICAgICAgICBpZiAnY3Vyc2VzJyBpbiByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkKKy0gICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ25jdXJzZXN3Jyk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnbmN1cnNlc3cnCistICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzJyk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnbmN1cnNlcycKKy0gICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2N1cnNlcycpOgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ2N1cnNlcycKKysgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gIm5jdXJzZXMiCisgCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIG9zX3JlbGVhc2UgPSBpbnQob3MudW5hbWUoKVsyXS5zcGxpdCgnLicpWzBdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQ3Yzc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorRml4IHdhcm5pbmcgd2l0aCBuZXdlciBjb21waWxlcgorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKKysrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCitAQCAtMTE2LDcgKzExNiw3IEBAIGNoYXIgKlB5Q3Vyc2VzVmVyc2lvbiA9ICIyLjIiOworICAgICAjZGVmaW5lcyBtYW55IGNvbW1vbiBzeW1ib2xzIChzdWNoIGFzICJsaW5lcyIpIHdoaWNoIGJyZWFrcyB0aGUKKyAgICAgY3Vyc2VzIG1vZHVsZSBpbiBvdGhlciB3YXlzLiAgU28gdGhlIGNvZGUgd2lsbCBqdXN0IHNwZWNpZnkKKyAgICAgZXhwbGljaXQgcHJvdG90eXBlcyBoZXJlLiAqLworLWV4dGVybiBpbnQgc2V0dXB0ZXJtKGNoYXIgKixpbnQsaW50ICopOworKy8vZXh0ZXJuIGludCBzZXR1cHRlcm0oY2hhciAqLGludCxpbnQgKik7CisgI2lmZGVmIF9fc2dpCisgI2luY2x1ZGUgPHRlcm0uaD4KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjlhZTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgc3lzcm9vdCBpcyB1c2VkIGJ5IGdjYyBpbnN0ZWFkIG9mIGFzc3VtaW5nCitoYXJkY29kZWQgbG9jYXRpb25zIGZvciBpbmNsdWRlIHBhdGhzCisKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCitAQCAtNDQzNCw3ICs0NDM0LDcgQEAgZmkKKyAKKyAjIGZpcnN0IGN1cnNlcyBoZWFkZXIgY2hlY2sKKyBhY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCistQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKytDUFBGTEFHUz0iJENQUEZMQUdTIC1JPS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKyAKKyBBQ19DSEVDS19IRUFERVJTKGN1cnNlcy5oIG5jdXJzZXMuaCkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK190a2ludGVyIG1vZHVsZSBuZWVkcyB0ayBtb2R1bGUgYWxvbmcgd2l0aCB0Y2wuIHRrIGlzIG5vdCB5ZXQgaW50ZWdyYXRlZAoraW4geW9jdG8gc28gd2Ugc2tpcCB0aGUgY2hlY2sgZm9yIHRoaXMgbW9kdWxlLgorQXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCBhZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTg6MzguNTAwMTM2NjQ3ICswMzAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTk6MzUuODg4MTM0OTY5ICswMzAwCitAQCAtMTYzNCw4ICsxNjM0LDEwIEBACisgICAgICAgICAjIENhbGwgdGhlIG1ldGhvZCBmb3IgZGV0ZWN0aW5nIHdoZXRoZXIgX3RraW50ZXIgY2FuIGJlIGNvbXBpbGVkCisgICAgICAgICBzZWxmLmRldGVjdF90a2ludGVyKGluY19kaXJzLCBsaWJfZGlycykKKyAKKy0gICAgICAgIGlmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKy0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorKyAgICAgICAgIyB0a2ludGVyIG1vZHVsZSB3aWxsIG5vdCBiZSBhdmFsYWlibGUgYXMgeW9jdG8KKysgICAgICAgICMgZG9lc24ndCBoYXZlIHRrIGludGVncmF0ZWQgKHlldCkKKysgICAgICAgICNpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CisrICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisgCisgICAgICAgICByZXR1cm4gbWlzc2luZworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTA0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9jZ2lfcHkucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorTGliL2NnaS5weTogVXBkYXRlIHRoZSBzY3JpcHQgYXMgbWVudGlvbmVkIGluIHRoZSBjb21tZW50CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBQeXRob24tMi42LjYvTGliL2NnaS5weS5vcmlnCTIwMTAtMDgtMDEgMjI6MTQ6MjcuMDAwMDAwMDAwIC0wNTAwCisrKysgUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkJMjAxMS0wOS0yMSAxNToyODo0MC40NzgyMDg2MzEgLTA1MDAKK0BAIC0xLDEzICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9weXRob24KKy0KKy0jIE5PVEU6IHRoZSBhYm92ZSAiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiBpcyBOT1QgYSBtaXN0YWtlLiAgSXQgaXMKKy0jIGludGVudGlvbmFsbHkgTk9UICIvdXNyL2Jpbi9lbnYgcHl0aG9uIi4gIE9uIG1hbnkgc3lzdGVtcworLSMgKGUuZy4gU29sYXJpcyksIC91c3IvbG9jYWwvYmluIGlzIG5vdCBpbiAkUEFUSCBhcyBwYXNzZWQgdG8gQ0dJCistIyBzY3JpcHRzLCBhbmQgL3Vzci9sb2NhbC9iaW4gaXMgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiBpcworLSMgaW5zdGFsbGVkLCBzbyAvdXNyL2Jpbi9lbnYgd291bGQgYmUgdW5hYmxlIHRvIGZpbmQgcHl0aG9uLiAgR3JhbnRlZCwKKy0jIGJpbmFyeSBpbnN0YWxsYXRpb25zIGJ5IExpbnV4IHZlbmRvcnMgb2Z0ZW4gaW5zdGFsbCBQeXRob24gaW4KKy0jIC91c3IvYmluLiAgU28gbGV0IHRob3NlIHZlbmRvcnMgcGF0Y2ggY2dpLnB5IHRvIG1hdGNoIHRoZWlyIGNob2ljZQorLSMgb2YgaW5zdGFsbGF0aW9uLgorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAKKyAiIiJTdXBwb3J0IG1vZHVsZSBmb3IgQ0dJIChDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UpIHNjcmlwdHMuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxYTk3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaApAQCAtMCwwICsxLDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIHNwZWNpZmljXQorCitUaGlzIHBhdGNoIGZpeGVzIGlzc3Vpbmcgd2l0aCBkaWZmZXJlbnQgbGliZGlyIGxpa2UgbGliNjQuCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBuYXRpdmUgcHl0aG9uIGJpbmFyeSBtb2R1bGVzIGZpbmRhYmxlCitpbiB0aGUgaW5zdGFsbCBwcm9jZXNzIG9mIHRoZSBob3N0IHB5dGhvbi4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDMvMTQKKworVXBkYXRlZCBmb3IgcHl0aG9uIDIuNy4zCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wNS8wMQorCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9MaWIvc3lzY29uZmlnLnB5CTIwMTItMDktMjAgMjI6NTA6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL0xpYi9zeXNjb25maWcucHkJMjAxMi0wOS0yMCAyMjo1MzowMS41NjExMjMzOTYgLTA3MDAKK0BAIC0yMSw5ICsyMSw5IEBACisgCisgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOgorICAgICAgICAgICAgICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9e2FiaWZsYWdzfScsCitAQCAtODMsNyArODMsNyBAQAorICAgICAncG9zaXhfdXNlcic6IHsKKyAgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9NYWtlZmlsZS5wcmUuaW4JMjAxMi0wOS0yMCAyMjo1MDoxMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvTWFrZWZpbGUucHJlLmluCTIwMTItMDktMjAgMjI6NTA6NTQuMjQ1MTIzOTk3IC0wNzAwCitAQCAtMTA4MCw5ICsxMDgwLDkgQEAKKyAJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTW9kdWxlcy94eG1vZHVsZS5jIFwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorIAorICMgQ3JlYXRlIHRoZSBQTEFURElSIHNvdXJjZSBkaXJlY3RvcnksIGlmIG9uZSB3YXNuJ3QgZGlzdHJpYnV0ZWQuLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwNTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAord2hlbiBidWlsZGluZyBweXRob24gZm9yIHFlbXV4ODYtNjQgb24gdWJ1bnR1IDExLjEwLzY0Yml0CitpdCBncm9wZXMgaW50byBob3N0IGluY2x1ZGVzIGFuZCB0aGVuIG1peGVzIHRoZW0gd2l0aCBjcm9zcworaW5jbHVkZXMgYW5kIGFzIGEgcmVzdWx0IHNvbWUgbW9kdWxlcyBmYWlsIHRvIGNvbXBpbGUgYW5kIGxpbmsKK29uZSBvZiB0aGUgbW9kdWxlcyBpcyBweXRob24tZWxlbWVudHRyZWUgd2hpY2ggaXMgdGhlbiBub3QKK2ZvdW5kIGR1cmluZyBpbWFnZSBjcmVhdGlvbgorCitQcm9ibGUgaXMgdGhhdCBzZXR1cC5weSB0cmllcyB0byBhZGQgbmF0aXZlIGluY2x1ZGVzIHRoYXQgbmV3ZXIKK3VidW50dSBoYXMgaW50cm9kdWNlZCBmb3IgbXVsdGlhcmNoIHN1cHBvcnQuIEJ1dCB0aGF0IHNob3VsZAorb25seSBoYXBwZW4gZm9yIG5hdGl2ZSBidWlsZHMgYW5kIG5vdCBjcm9zcyBidWlsZGluZyBweXRob24KK3NvIHdlIGFkZCBhIGNoZWNrIGhlcmUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL3NldHVwLnB5CTIwMTItMDktMjAgMjE6NTQ6NTAuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5CTIwMTItMDktMjAgMjE6NTc6MzUuMDI5MTIzODU4IC0wNzAwCitAQCAtNDAyLDYgKzQwMiw5IEBACisgCisgICAgICAgICBpZiBub3QgZmluZF9leGVjdXRhYmxlKCdkcGtnLWFyY2hpdGVjdHVyZScpOgorICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgIHJldHVybgorKworICAgICAgICAgb3B0ID0gJycKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBvcHQgPSAnLXQnICsgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdIT1NUX0dOVV9UWVBFJykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL21ha2VyYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNjg5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL21ha2VyYWNlLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1RoZXJlIGlzIGEgcmFjZSBkdWUgdG8gdGhlIGV4ZWN1dGlvbiBvZiBtYWtlIGluc2lkZSB0aGUgbWFrZWZpbGU6CisKK3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIE9iamVjdHMvb2JtYWxsb2MubyBPYmplY3RzL29ibWFsbG9jLmMKK3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIFBhcnNlci9wZ2VuLm8gUGFyc2VyL3BnZW4uY3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIE9iamVjdHMvb2JtYWxsb2MubyBPYmplY3RzL29ibWFsbG9jLmMKK3wgZ2NjICAtcHRocmVhZCAtYyAtV25vLXVudXNlZC1yZXN1bHQgLUROREVCVUcgLWcgIC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICAgLUkuIC1JSW5jbHVkZSAtSS4vSW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWZQSUMgLURQeV9CVUlMRF9DT1JFIC1vIE9iamVjdHMvb2JtYWxsb2MubyBPYmplY3RzL29ibWFsbG9jLmMKK3wgT2JqZWN0cy9vYm1hbGxvYy5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK3wgbWFrZVsxXTogKioqIFtQYXJzZXIvcGdlbl0gRXJyb3IgMQorCitUaGUgZWFzaWVzdCB3YXkgdG8gYXZvaWQgdGhpcyBpcyB0byBsaXN0IHRoZSBkZXBlbmRlbmNpZXMgZXhwbGljdGx5LgorCitSUCAyOC8yLzIwMTQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMy4zLjMvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4zLm9yaWcvTWFrZWZpbGUucHJlLmluCTIwMTQtMDItMjcgMTQ6MDQ6MzguMjY4MzM5NTMzICswMDAwCisrKysgUHl0aG9uLTMuMy4zL01ha2VmaWxlLnByZS5pbgkyMDE0LTAyLTI4IDEwOjQwOjU5LjE2NjM2MTEyNSArMDAwMAorQEAgLTY3Niw3ICs2NzYsNyBAQAorIAorICQoSU9fT0JKUyk6ICQoSU9fSCkKKyAKKy0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykgJChQR0VOKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkJJChNQUtFKSAkKFBHRU4pCisgCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTk4NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMzM4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZ2V0IHRoZSBzeXMubGliIGZyb20gcHl0aG9uIGl0c2VsZiBhbmQgZG8gbm90IHVzZSBoYXJkY29kZWQgdmFsdWUgb2YgJ2xpYicKKworMDIvMjAxNSBSZWJhc2VkIGZvciAzLjQuMgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvSW5jbHVkZS9weXRob25ydW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMy40LjIvSW5jbHVkZS9weXRob25ydW4uaAorQEAgLTIyMCw2ICsyMjAsOCBAQCBpbnQgX1B5X0NoZWNrUHl0aG9uMygpOworIC8qIEluIHRoZWlyIG93biBmaWxlcyAqLworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRWZXJzaW9uKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRQbGF0Zm9ybSh2b2lkKTsKKytQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QXJjaCh2b2lkKTsKKytQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0TGliKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvbXBpbGVyKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7CitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrKyBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKK0BAIC0xOSw2ICsxOSw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCisgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKKyBIQVNfVVNFUl9TSVRFID0gVHJ1ZQorIAorK2xpYm5hbWUgPSBzeXMubGliCisrCisgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorQEAgLTMwLDcgKzMyLDcgQEAgV0lORE9XU19TQ0hFTUUgPSB7CisgSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAndW5peF9wcmVmaXgnOiB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlLycrbGlibmFtZSsnL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydCRhYmlmbGFncy8kZGlzdF9uYW1lJywKKyAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9weWRvYy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvcHlkb2MucHkKK0BAIC0zOTQsNyArMzk0LDcgQEAgY2xhc3MgRG9jOgorIAorICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLCBzZWxmLlBZVEhPTkRPQ1MpCisgCistICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24lZC4lZCIgJSAgc3lzLnZlcnNpb25faW5mb1s6Ml0pCisgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKKyAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvdHJhY2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMy40LjIvTGliL3RyYWNlLnB5CitAQCAtNzUxLDEwICs3NTEsMTAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAgICAgICAgICAgICAgIyBzaG91bGQgSSBhbHNvIGNhbGwgZXhwYW5kdXNlcj8gKGFmdGVyIGFsbCwgY291bGQgdXNlICRIT01FKQorIAorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRleGVjX3ByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IG9zLnBhdGgubm9ybXBhdGgocykKKyAgICAgICAgICAgICAgICAgaWdub3JlX2RpcnMuYXBwZW5kKHMpCitJbmRleDogUHl0aG9uLTMuNC4yL01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0zLjQuMi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDEsNiArMTAxLDggQEAgUFlfQ09SRV9DRkxBR1M9CSQoUFlfQ0ZMQUdTKSAkKFBZX0NGTEFHUworIAorICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKKyBNQUNIREVQPQlATUFDSERFUEAKKytMSUI9CQlATElCQAorK0FSQ0g9CQlAQVJDSEAKKyAKKyAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKKyBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACitAQCAtMTIwLDcgKzEyMiw3IEBAIExJQkRJUj0JCUBsaWJkaXJACisgTUFORElSPQkJQG1hbmRpckAKKyBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKKyBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQorLVNDUklQVERJUj0JJChwcmVmaXgpL2xpYgorK1NDUklQVERJUj0JQGxpYmRpckAKKyBBQklGTEFHUz0JQEFCSUZMQUdTQAorIAorICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKK0BAIC03MTIsNiArNzE0LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAorIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKKyAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKKysJCS1EQVJDSD0nIiQoQVJDSCkiJyAtRExJQj0nIiQoTElCKSInIFwKKyAJCS1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL2dldHBhdGguYworIAorIE1vZHVsZXMvcHl0aG9uLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5jCitAQCAtNzgwLDcgKzc4Myw3IEBAICQoQVNUX0MpOiAkKEFTVF9IKSAkKEFTVF9BU0RMKSAkKEFTRExHRU4KKyBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCisgCisgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworLQkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysJCSQoQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLURBUkNIPSciJChBUkNIKSInIC1ETElCPSciJChMSUIpIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisgCisgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworIAkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCitJbmRleDogUHl0aG9uLTMuNC4yL01vZHVsZXMvZ2V0cGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKKysrKyBQeXRob24tMy40LjIvTW9kdWxlcy9nZXRwYXRoLmMKK0BAIC0xMTcsOSArMTE3LDExIEBACisgI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKyAjZW5kaWYKKyAKKysjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCisrCisgI2lmbmRlZiBQWVRIT05QQVRICistI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKKy0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKKysgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCisgI2VuZGlmCisgCisgI2lmbmRlZiBMQU5ETUFSSworQEAgLTEzMCw2ICsxMzIsNyBAQCBzdGF0aWMgd2NoYXJfdCBwcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgd2NoYXJfdCBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyB3Y2hhcl90IHByb2dwYXRoW01BWFBBVEhMRU4rMV07Cisgc3RhdGljIHdjaGFyX3QgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Cisrc3RhdGljIHdjaGFyX3QgKmxpYl9weXRob24gPSBMIiIgTElCX1BZVEhPTjsKKyAKKyBzdGF0aWMgdm9pZAorIHJlZHVjZSh3Y2hhcl90ICpkaXIpCitJbmRleDogUHl0aG9uLTMuNC4yL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysrKyBQeXRob24tMy40LjIvUHl0aG9uL2dldHBsYXRmb3JtLmMKK0BAIC0xMCwzICsxMCwyMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQorIHsKKyAJcmV0dXJuIFBMQVRGT1JNOworIH0KKysKKysjaWZuZGVmIEFSQ0gKKysjZGVmaW5lIEFSQ0ggInVua25vd24iCisrI2VuZGlmCisrCisrY29uc3QgY2hhciAqCisrUHlfR2V0QXJjaCh2b2lkKQorK3sKKysJcmV0dXJuIEFSQ0g7CisrfQorKworKyNpZm5kZWYgTElCCisrI2RlZmluZSBMSUIgImxpYiIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRMaWIodm9pZCkKKyt7CisrCXJldHVybiBMSUI7CisrfQorSW5kZXg6IFB5dGhvbi0zLjQuMi9QeXRob24vc3lzbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKKysrKyBQeXRob24tMy40LjIvUHl0aG9uL3N5c21vZHVsZS5jCitAQCAtMTY5Nyw2ICsxNjk3LDEwIEBAIF9QeVN5c19Jbml0KHZvaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldFBsYXRmb3JtKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygiYXJjaCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0QXJjaCgpKSk7CisrICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0TGliKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZXhlY3V0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCksIC0xKSk7CitJbmRleDogUHl0aG9uLTMuNC4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMy40LjIvc2V0dXAucHkKK0BAIC00NTQsNyArNDU0LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyBkaXJlY3RvcmllcyAoaS5lLiAnLicgYW5kICdJbmNsdWRlJykgbXVzdCBiZSBmaXJzdC4gIFNlZSBpc3N1ZQorICAgICAgICAgIyAxMDUyMC4KKyAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQorKyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgb3MucGF0aC5qb2luKCcvdXNyL2xvY2FsJywgc3lzLmxpYikpCisgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKKyAgICAgICAgICMgb25seSBjaGFuZ2UgdGhpcyBmb3IgY3Jvc3MgYnVpbGRzIGZvciAzLjMsIGlzc3VlcyBvbiBNYWdlaWEKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKK0BAIC01MTIsOCArNTEyLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyBiZSBhc3N1bWVkIHRoYXQgbm8gYWRkaXRpb25hbCAtSSwtTCBkaXJlY3RpdmVzIGFyZSBuZWVkZWQuCisgICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIGxpYl9kaXJzID0gc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMgKyBbCistICAgICAgICAgICAgICAgICcvbGliNjQnLCAnL3Vzci9saWI2NCcsCistICAgICAgICAgICAgICAgICcvbGliJywgJy91c3IvbGliJywKKysgICAgICAgICAgICAgICAgJy8nICsgc3lzLmxpYiwgJy91c3IvJyArIHN5cy5saWIsCisgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICBpbmNfZGlycyA9IHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzICsgWycvdXNyL2luY2x1ZGUnXQorICAgICAgICAgZWxzZToKK0BAIC02OTYsMTEgKzY5NSwxMSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgZWxpZiBjdXJzZXNfbGlicmFyeToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCisgICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyLycrc3lzLmxpYisnL3Rlcm1jYXAnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKCd0ZXJtY2FwJykKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdyZWFkbGluZScsIFsncmVhZGxpbmUuYyddLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci8nK3N5cy5saWIrJy90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9saW5rX2FyZ3M9cmVhZGxpbmVfZXh0cmFfbGlua19hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPXJlYWRsaW5lX2xpYnMpICkKKyAgICAgICAgIGVsc2U6CitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9zeXNjb25maWcucHkKK0BAIC0yMCwxMCArMjAsMTAgQEAgX19hbGxfXyA9IFsKKyAKKyBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzoKKyAgICAgICAgICAgICAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fXthYmlmbGFnc30nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzoKK0BAIC0zMiwxMCArMzIsMTAgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgICAgICdkYXRhJzogJ3tiYXNlfScsCisgICAgICAgICB9LAorICAgICAncG9zaXhfaG9tZSc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS9saWIvcHl0aG9uJywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKysgICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS8nK3N5cy5saWIrJy9weXRob24nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbicsCisgICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCistICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisrICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9uJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob24nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob24nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCitAQCAtNjEsMTAgKzYxLDEwIEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKKyAgICAgICAgIH0sCisgICAgICdwb3NpeF91c2VyJzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKKyAgICAgICAgICdkYXRhJzogJ3t1c2VyYmFzZX0nLAorSW5kZXg6IFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCitAQCAtNzkxLDYgKzc5MSw0MSBAQCBlc2FjCisgTVVMVElBUkNIPSQoJENDIC0tcHJpbnQtbXVsdGlhcmNoIDI+L2Rldi9udWxsKQorIEFDX1NVQlNUKE1VTFRJQVJDSCkKKyAKKytBQ19TVUJTVChBUkNIKQorK0FDX01TR19DSEVDS0lORyhBUkNIKQorK0FSQ0g9YHVuYW1lIC1tYAorK2Nhc2UgJEFSQ0ggaW4KKytpPzg2KSBBUkNIPWkzODY7OworK2VzYWMKKytBQ19NU0dfUkVTVUxUKCRBUkNIKQorKworK0FDX1NVQlNUKExJQikKKytBQ19NU0dfQ0hFQ0tJTkcoTElCKQorK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKytMaW51eCopCisrICAjIFRlc3QgaWYgdGhlIGNvbXBpbGVyIGlzIDY0Yml0CisrICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorKyAgcHl0aG9uX2N2X2NjXzY0Yml0X291dHB1dD1ubworKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKysgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorKyAgICAqIkVMRiA2NCIqKQorKyAgICAgIHB5dGhvbl9jdl9jY182NGJpdF9vdXRwdXQ9eWVzCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZmkKKysgIHJtIC1yZiBjb25mdGVzdCoKKysgIDs7CisrZXNhYworKworK2Nhc2UgJEFSQ0g6JHB5dGhvbl9jdl9jY182NGJpdF9vdXRwdXQgaW4KKytwcGM2NDp5ZXMgfCBwb3dlcnBjNjQ6eWVzIHwgczM5MHg6eWVzIHwgc3BhcmM2NDp5ZXMgfCB4ODZfNjQ6eWVzKQorKyAgTElCPSJsaWI2NCIKKysgIDs7CisrKjoqKQorKyAgTElCPSJsaWIiCisrICA7OworK2VzYWMKKytBQ19NU0dfUkVTVUxUKCRMSUIpCisgCisgQUNfU1VCU1QoTElCUkFSWSkKKyBBQ19NU0dfQ0hFQ0tJTkcoTElCUkFSWSkKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3NpdGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvc2l0ZS5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvc2l0ZS5weQorQEAgLTMwNCwxMyArMzA0LDE5IEBAIGRlZiBnZXRzaXRlcGFja2FnZXMocHJlZml4ZXM9Tm9uZSk6CisgICAgICAgICBzZWVuLmFkZChwcmVmaXgpCisgCisgICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQocHJlZml4KQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKKyAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi1jb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyM2I4YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK3B5dGhvbi1jb25maWc6IFJldmVydCB0byB1c2luZyBkaXN0dXRpbHMuc3lzY29uZmlnCisKK1RoZSBuZXdlciBzeXNjb25maWcgbW9kdWxlIHNoYXJlcyBzb21lIGNvZGUgd2l0aCBkaXN0dXRpbHMuc3lzY29uZmlnLCBidXQgdGhlIHNhbWUgbW9kaWZpY2F0aW9ucyBhcyBpbgorCisxMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggbWFrZXMgZGlzdHV0aWxzLnN5c2NvbmZpZworCithZmZlY3QgdGhlIG5hdGl2ZSBydW50aW1lIGFzIHdlbGwgYXMgY3Jvc3MgYnVpbGRpbmcuIFVzZSB0aGUgb2xkLCBwYXRjaGVkCitpbXBsZW1lbnRhdGlvbiB3aGljaCByZXR1cm5zIHBhdGhzIGluIHRoZSBzdGFnaW5nIGRpcmVjdG9yeSBhbmQgZm9yIHRoZSB0YXJnZXQsCithcyBhcHByb3ByaWF0ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVHlsZXIgSGFsbCA8dHlsZXJ3aGFsbEBnbWFpbC5jb20+Cis6CitJbmRleDogUHl0aG9uLTMuMy4zL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMy5vcmlnL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorKysrIFB5dGhvbi0zLjMuMy9NaXNjL3B5dGhvbi1jb25maWcuaW4KK0BAIC00LDcgKzQsNyBAQAorIGltcG9ydCBnZXRvcHQKKyBpbXBvcnQgb3MKKyBpbXBvcnQgc3lzCistaW1wb3J0IHN5c2NvbmZpZworK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyAKKyB2YWxpZF9vcHRzID0gWydwcmVmaXgnLCAnZXhlYy1wcmVmaXgnLCAnaW5jbHVkZXMnLCAnbGlicycsICdjZmxhZ3MnLAorICAgICAgICAgICAgICAgJ2xkZmxhZ3MnLCAnZXh0ZW5zaW9uLXN1ZmZpeCcsICdoZWxwJywgJ2FiaWZsYWdzJywgJ2NvbmZpZ2RpciddCitAQCAtMzIsMTQgKzMyLDE0IEBAIGlmICctLWhlbHAnIGluIG9wdF9mbGFnczoKKyAKKyBmb3Igb3B0IGluIG9wdF9mbGFnczoKKyAgICAgaWYgb3B0ID09ICctLXByZWZpeCc6CistICAgICAgICBwcmludChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3ByZWZpeCcpKQorKyAgICAgICAgcHJpbnQoc3lzY29uZmlnLlBSRUZJWCkKKyAKKyAgICAgZWxpZiBvcHQgPT0gJy0tZXhlYy1wcmVmaXgnOgorLSAgICAgICAgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdleGVjX3ByZWZpeCcpKQorKyAgICAgICAgcHJpbnQoc3lzY29uZmlnLkVYRUNfUFJFRklYKQorIAorICAgICBlbGlmIG9wdCBpbiAoJy0taW5jbHVkZXMnLCAnLS1jZmxhZ3MnKToKKy0gICAgICAgIGZsYWdzID0gWyctSScgKyBzeXNjb25maWcuZ2V0X3BhdGgoJ2luY2x1ZGUnKSwKKy0gICAgICAgICAgICAgICAgICctSScgKyBzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRpbmNsdWRlJyldCisrICAgICAgICBmbGFncyA9IFsnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKCksCisrICAgICAgICAgICAgICAgICAnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSldCisgICAgICAgICBpZiBvcHQgPT0gJy0tY2ZsYWdzJzoKKyAgICAgICAgICAgICBmbGFncy5leHRlbmQoZ2V0dmFyKCdDRkxBR1MnKS5zcGxpdCgpKQorICAgICAgICAgcHJpbnQoJyAnLmpvaW4oZmxhZ3MpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjOGI4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA0MzIzOGUxYWMxM2UzMjk4NGQwMTVjOTJhNTg0MWYzZGUxZmUxZDE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTggTm92IDIwMTQgMDA6MDc6MDcgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2V0dXAucHk6IG5vIGhvc3QgaGVhZGVycyBsaWJzCisKK1doZW4gd2UgYXJlIGNyb3NzLWNvbXBpbGluZywgc2V0dXAucHkgc2hvdWxkIG5ldmVyIGxvb2sgaW4gL3Vzcgorb3IgL3Vzci9sb2NhbCB0byBmaW5kIGhlYWRlcnMgb3IgbGlicmFyaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0Nyb3NzIGNvbXBpbGUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzZXR1cC5weSB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBmMDIwYjI4Li5lODMzOWNkIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtNDQ0LDEwICs0NDQsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgb3MucGF0aC5qb2luKCcvdXNyL2xvY2FsJywgc3lzLmxpYikpCisgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKKy0gICAgICAgICMgb25seSBjaGFuZ2UgdGhpcyBmb3IgY3Jvc3MgYnVpbGRzIGZvciAzLjMsIGlzc3VlcyBvbiBNYWdlaWEKKy0gICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9nY2NfcGF0aHMoKQorLSAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorIAorICAgICAgICAgIyBBZGQgcGF0aHMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTERGTEFHUyBhbmQKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDkwZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA1M2VkMjE2ZDdiZjcwZGQyYTkyNTQzMmI2ODA1YTcwMWU1ZmMzZTBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMDY6NDQ6NDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHl0aG9uMyB1c2UgQ1JPU1NQWVRIT05QQVRIIGZvciBQWVRIT05fRk9SX0JVSUxECisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ3Jvc3MgY29tcGlsZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTg5YmFmOS4uMjg5MGM5NiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjcsNyArNjcsNyBAQCBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorIAkgICAgQUNfTVNHX0VSUk9SKFtweXRob24kUEFDS0FHRV9WRVJTSU9OIGludGVycHJldGVyIG5vdCBmb3VuZF0pCisgCWZpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRpbnRlcnApCistCVBZVEhPTl9GT1JfQlVJTEQ9J19QWVRIT05fUFJPSkVDVF9CQVNFPSQoYWJzX2J1aWxkZGlyKSBfUFlUSE9OX0hPU1RfUExBVEZPUk09JChfUFlUSE9OX0hPU1RfUExBVEZPUk0pIFBZVEhPTlBBVEg9JChzaGVsbCB0ZXN0IC1mIHB5YnVpbGRkaXIudHh0ICYmIGVjaG8gJChhYnNfYnVpbGRkaXIpL2BjYXQgcHlidWlsZGRpci50eHRgOikkKHNyY2RpcikvTGliOiQoc3JjZGlyKS9MaWIvJChQTEFURElSKSAnJGludGVycAorKwlQWVRIT05fRk9SX0JVSUxEPSdfUFlUSE9OX1BST0pFQ1RfQkFTRT0kKGFic19idWlsZGRpcikgX1BZVEhPTl9IT1NUX1BMQVRGT1JNPSQoX1BZVEhPTl9IT1NUX1BMQVRGT1JNKSBQWVRIT05QQVRIPSQoQ1JPU1NQWVRIT05QQVRIKSAnJGludGVycAorICAgICBmaQorIGVsaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorICAgICBBQ19NU0dfRVJST1IoW0Nyb3NzIGNvbXBpbGluZyByZXF1aXJlZCAtLWhvc3Q9SE9TVC1UVVBMRSBhbmQgLS1idWlsZD1BUkNIXSkKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmUxMmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA4ZGFkODEwZjNhM2QwNzNmMDlhZDcyZTFhM2VlMGE4OTVlYWIyY2ExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDE4IEphbiAyMDE1IDE5OjA1OjM2IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIHNldHVwLnB5OmNoZWNrIGNyb3NzX2NvbXBpbGluZyB3aGVuIGdldCBGTEFHUworCitGaXhlZCB3aGVuIGNvbXBpbGUgdGFyZ2V0IHB5dGhub24zOgorZ2NjIC1pc3lzdGVtL3BhdGgvdG8vc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIFwKKyAgICAtTD0vcGF0aC90by9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYgorCitUaGlzIGlzIGluY29ycmVjdCwgdGhlIG5hdGl2ZSBzeXNyb290IHNob3VsZCBub3QgYmUgdXNlZCBieSB0YXJnZXQKK3B5dGhvbjMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNldHVwLnB5IHwgICAxMCArKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGU4MzM5Y2QuLjgzZmQzMWYgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0yMzgsNyArMjM4LDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgdW5mb3J0dW5hdGVseSwgZGlzdHV0aWxzIGRvZXNuJ3QgbGV0IHVzIHByb3ZpZGUgc2VwYXJhdGUgQyBhbmQgQysrCisgICAgICAgICAjIGNvbXBpbGVycworICAgICAgICAgaWYgY29tcGlsZXIgaXMgbm90IE5vbmU6CistICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCisrICAgICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IChvcy5lbnZpcm9uLmdldCgnQ0NTSEFSRUQnKSBvciAnJywgb3MuZW52aXJvbi5nZXQoJ0NGTEFHUycpIG9yICcnKQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorICAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgY2ZsYWdzCisgICAgICAgICBzZWxmLmNvbXBpbGVyLnNldF9leGVjdXRhYmxlcygqKmFyZ3MpCisgCitAQCAtNDU3LDcgKzQ2MCwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctUicsIHNlbGYuY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLUwnLCBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnQ1BQRkxBR1MnLCAnLUknLCBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycykpOgorLSAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKysgICAgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgICAgIGVudl92YWwgPSBvcy5lbnZpcm9uLmdldChlbnZfdmFyKQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKyAgICAgICAgICAgICBpZiBlbnZfdmFsOgorICAgICAgICAgICAgICAgICAjIFRvIHByZXZlbnQgb3B0cGFyc2UgZnJvbSByYWlzaW5nIGFuIGV4Y2VwdGlvbiBhYm91dCBhbnkKKyAgICAgICAgICAgICAgICAgIyBvcHRpb25zIGluIGVudl92YWwgdGhhdCBpdCBkb2Vzbid0IGtub3cgYWJvdXQgd2Ugc3RyaXAgb3V0CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmJkMzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorUGF0Y2ggc2V0dXAucHkgc28gdGhhdCB0aGUgZGV0ZWN0X21vZHVsZXMoKSBmdW5jdGlvbiBsb29rcyBmb3IgcmVxdWlyZWQKK2xpYnJhcmllcyBhbmQgaGVhZGVycyBpbiBTVEFHSU5HX0xJQkRJUiAvIFNUQUdJTkdfSU5DRElSLgorCitXaXRob3V0IHRoaXMgcGF0Y2gsIHNldmVyYWwgZXh0ZW5zaW9uIG1vZHVsZXMgYXJlIG5vdCBidWlsdCwgZXZlbiB0aG91Z2gKK3RoZWlyIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudCBpbiB0aGUgY29tcGlsZXIncyBzZWFyY2ggcGF0aHMuCitUaGUgcmVzdWx0IGlzIHRoZSBmb2xsb3dpbmcgd2FybmluZywgYW5kIHVsdGltYXRlbHkgaW5jb21wbGV0ZSBwYWNrYWdlczoKKworfCBUaGUgbmVjZXNzYXJ5IGJpdHMgdG8gYnVpbGQgdGhlc2Ugb3B0aW9uYWwgbW9kdWxlcyB3ZXJlIG5vdCBmb3VuZDoKK3wgX2J6MiAgICAgICAgICAgICAgICAgIF9jdXJzZXNfcGFuZWwgICAgICAgICBfZGJtCit8IF9nZGJtICAgICAgICAgICAgICAgICBfbHptYSAgICAgICAgICAgICAgICAgX3NxbGl0ZTMKK3wgbmlzICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lICAgICAgICAgICAgICB6bGliCit8IFRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBiaXRzLCBsb29rIGluIHNldHVwLnB5IGluIGRldGVjdF9tb2R1bGVzKCkgZm9yIHRoZSBtb2R1bGUncyBuYW1lLgorCitVcHN0cmVhbS1TdGF0dXM6ICBJbmFwcHJvcHJpYXRlIFtDcm9zcyBjb21waWxlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBEb21pbmljIFNhY3LDqSA8ZG9taW5pYy5zYWNyZUBnbXguZGU+CisKK0luZGV4OiBQeXRob24tMy40LjMvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjMub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0zLjQuMy9zZXR1cC5weQorQEAgLTUyMSw2ICs1MjEsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIGxpYl9kaXJzID0gc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnNbOl0KKyAgICAgICAgICAgICBpbmNfZGlycyA9IHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzWzpdCisrICAgICAgICAgICAgbGliX2RpcnMuYXBwZW5kKG9zLmVudmlyb24uZ2V0KCdTVEFHSU5HX0xJQkRJUicpKQorKyAgICAgICAgICAgIGluY19kaXJzLmFwcGVuZChvcy5lbnZpcm9uLmdldCgnU1RBR0lOR19JTkNESVInKSkKKyAgICAgICAgIGV4dHMgPSBbXQorICAgICAgICAgbWlzc2luZyA9IFtdCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cHR3ZWFrcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cHR3ZWFrcy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitUaGlzIHBhdGNoIHJlbW92ZXMgdmFyaW91cyB3YXlzIG5hdGl2ZSBzeXN0ZW0gb3B0aW9ucyBjYW4gcGFzcyBpbnRvIHRoZSBweXRob24gCitjb21waWxhdGlvbiBhbmQgc29tZWhvdyBicmVhayBDIG1vZHVsZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTIvMDQvMjMKKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6NDcuMjk1NTgyNTUzICswMDAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6MTUuMDAwMDAwMDAwICswMDAwCitAQCAtMjMxLDcgKzIzMSwxMyBAQAorICAgICAgICAgIyBjb21waWxlcnMKKyAgICAgICAgIGlmIGNvbXBpbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorLSAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgY2ZsYWdzCisrICAgICAgICAgICAgIyBOZWVkIHRvIGZpbHRlciBvdXQgLWlzeXNyb290IGZyb20gdGhlIGZsYWdzLiBJZGVhbGx5IHNob3VsZCAKKysgICAgICAgICAgICAjIGZpZ3VyZSBvdXQgdGFyZ2V0IGZsYWdzIGhlcmUuCisrICAgICAgICAgICAgZmxhZ3MgPSBbXQorKyAgICAgICAgICAgIGZvciBmIGluIGNmbGFncy5zcGxpdCgpOgorKyAgICAgICAgICAgICAgICBpZiBub3QgZi5zdGFydHN3aXRoKCItaXN5c3RlbSIpOgorKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKGYpCisrICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyAnICcuam9pbihmbGFncykKKyAgICAgICAgIHNlbGYuY29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzKCoqYXJncykKKyAKKyAgICAgICAgIGJ1aWxkX2V4dC5idWlsZF9leHRlbnNpb25zKHNlbGYpCitAQCAtMzkzLDcgKzM5OSw2IEBACisgICAgICAgICAjIGludG8gY29uZmlndXJlIGFuZCBzdG9yZWQgaW4gdGhlIE1ha2VmaWxlIChpc3N1ZSBmb3VuZCBvbiBPUyBYIDEwLjMpLgorICAgICAgICAgZm9yIGVudl92YXIsIGFyZ19uYW1lLCBkaXJfbGlzdCBpbiAoCisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctUicsIHNlbGYuY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2RpcnMpLAorLSAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLUwnLCBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnQ1BQRkxBR1MnLCAnLUknLCBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycykpOgorICAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKyAgICAgICAgICAgICBpZiBlbnZfdmFsOgorQEAgLTQxOSwxNiArNDI0LDE2IEBACisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCistICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKysjICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCisrIyAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCisgICAgICAgICAgICAgIyBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHRoYW4KKyAgICAgICAgICAgICAjIHRoZSBvbmUgdGhhdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkIChpc3N1ZSAjNzQ3MykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisgCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgaGF2ZV91bmljb2RlID0gdW5pY29kZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYjFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorc2h1dGlscyBzaG91bGQgY29uc2lkZXIgc3ltbGlua3MKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL0xpYi9zaHV0aWwucHkJMjAxMy0wMS0yOSAxMjozMTowNi45MjY1NTU3NzkgLTA4MDAKKysrKyBiL0xpYi9zaHV0aWwucHkJMjAxMy0wMS0yOSAxNjozMTozOS4wOTc1NTQxODIgLTA4MDAKK0BAIC0xMzIsNyArMTMyLDcgQEAgZGVmIGNvcHltb2RlKHNyYywgZHN0LCAqLCBmb2xsb3dfc3ltbGluaworICAgICBzdCA9IHN0YXRfZnVuYyhzcmMpCisgICAgIGNobW9kX2Z1bmMoZHN0LCBzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSkpCisgCistaWYgaGFzYXR0cihvcywgJ2xpc3R4YXR0cicpOgorK2lmIGhhc2F0dHIob3MsICdsaXN0eGF0dHInKSBhbmQgb3MubGlzdHhhdHRyIGluIG9zLnN1cHBvcnRzX2ZvbGxvd19zeW1saW5rczoKKyAgICAgZGVmIF9jb3B5eGF0dHIoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKToKKyAgICAgICAgICIiIkNvcHkgZXh0ZW5kZWQgZmlsZXN5c3RlbSBhdHRyaWJ1dGVzIGZyb20gYHNyY2AgdG8gYGRzdGAuCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaXRlY3VzdG9taXplLnB5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2l0ZWN1c3RvbWl6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhiNWUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2l0ZWN1c3RvbWl6ZS5weQpAQCAtMCwwICsxLDM3IEBACisjIE9wZW5FbWJlZGRlZCBzaXRlY3VzdG9taXplLnB5IChDKSAyMDAyLTIwMDggTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIEdQTHYyIG9yIGxhdGVyCisjIFZlcnNpb246IDIwMDgxMTIzCisjIEZlYXR1cmVzOgorIyAqIHNldCBwcm9wZXIgZGVmYXVsdCBlbmNvZGluZworIyAqIGVuYWJsZSByZWFkbGluZSBjb21wbGV0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcgorIyAqIGxvYWQgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gc3RhcnR1cAorIyAqIHNhdmUgY29tbWFuZCBsaW5lIGhpc3Rvcnkgb24gZXhpdCAKKworaW1wb3J0IG9zCisKK2RlZiBfX2V4aXRoYW5kbGVyKCk6CisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgX19yZWdpc3RlckV4aXRIYW5kbGVyKCk6CisgICAgaW1wb3J0IGF0ZXhpdAorICAgIGF0ZXhpdC5yZWdpc3RlciggX19leGl0aGFuZGxlciApCisKK2RlZiBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpOgorICAgIHJlYWRsaW5lLnNldF9oaXN0b3J5X2xlbmd0aCggMTAwMCApCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoICJ0YWI6IGNvbXBsZXRlIiApCisgICAgdHJ5OgorICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2ltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgcmxjb21wbGV0ZXIsIHJlYWRsaW5lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKQorICAgIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA3NjQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gZmM5M2IzY2MyM2I0Zjk2OThhZTkyYTQyOTg2ZGJiMDJiNmYxOTU4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCAxOCBKYW4gMjAxNSAwNjoyOTo1MCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBzeXNjb25maWcucHk6IGFkZCBfUFlUSE9OX1BST0pFQ1RfU1JDCisKK3B5dGhvbjMgaGFzIGludHJvZHVjZWQgX1BZVEhPTl9QUk9KRUNUX0JBU0Ugd2hpY2ggaXMgdXNlZCBmb3Igc2VwYXJhdGUgQgorYW5kIFMsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2hlbiBjb21waWxlIE1vZHVsZXMsIHRoZSB0YXJnZXQgcHl0aG9uMyBydW5zCitweXRob24zLW5hdGl2ZSdzIHN5c2NvbmZpZyB0byBnZXQgc3JjZGlyIHdoaWNoIGlzIHRoZSBuYXRpdmUncywgdGhlcmUKK3dvdWxkIGJlIGVycm9ycyB3aGVuIG5hdGl2ZSdzIHNyY2RpciBoYXMgYmVlbiByZW1vdmVkLCBhZGQKK19QWVRIT05fUFJPSkVDVF9TUkMgdG8gZml4IHRoZSBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBMaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSB8ICAgIDUgKysrKy0KKyBMaWIvc3lzY29uZmlnLnB5ICAgICAgICAgICB8ICAgIDUgKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK2luZGV4IGE1NDVhYjkuLjc0MzE3ZDEgMTAwNjQ0CistLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC01NTQsNyArNTU0LDEwIEBAIGRlZiBnZXRfY29uZmlnX3ZhcnMoKmFyZ3MpOgorICAgICAgICAgX2NvbmZpZ192YXJzWydleGVjX3ByZWZpeCddID0gRVhFQ19QUkVGSVgKKyAKKyAgICAgICAgICMgQWx3YXlzIGNvbnZlcnQgc3JjZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKKy0gICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKKysgICAgICAgIGlmICJfUFlUSE9OX1BST0pFQ1RfU1JDIiBpbiBvcy5lbnZpcm9uOgorKyAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5lbnZpcm9uWyJfUFlUSE9OX1BST0pFQ1RfU1JDIl0pCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKKyAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgICBpZiBweXRob25fYnVpbGQ6CisgICAgICAgICAgICAgICAgICMgSWYgc3JjZGlyIGlzIGEgcmVsYXRpdmUgcGF0aCAodHlwaWNhbGx5ICcuJyBvciAnLi4nKQorZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5CitpbmRleCA3Mjg3ZjExLi5jYzkyOTk4IDEwMDY0NAorLS0tIGEvTGliL3N5c2NvbmZpZy5weQorKysrIGIvTGliL3N5c2NvbmZpZy5weQorQEAgLTU2Miw3ICs1NjIsMTAgQEAgZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CisgICAgICAgICBfQ09ORklHX1ZBUlNbJ3VzZXJiYXNlJ10gPSBfZ2V0dXNlcmJhc2UoKQorIAorICAgICAgICAgIyBBbHdheXMgY29udmVydCBzcmNkaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorLSAgICAgICAgc3JjZGlyID0gX0NPTkZJR19WQVJTLmdldCgnc3JjZGlyJywgX1BST0pFQ1RfQkFTRSkKKysgICAgICAgIGlmICJfUFlUSE9OX1BST0pFQ1RfU1JDIiBpbiBvcy5lbnZpcm9uOgorKyAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5lbnZpcm9uWyJfUFlUSE9OX1BST0pFQ1RfU1JDIl0pCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHNyY2RpciA9IF9DT05GSUdfVkFSUy5nZXQoJ3NyY2RpcicsIF9QUk9KRUNUX0JBU0UpCisgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICAgaWYgX1BZVEhPTl9CVUlMRDoKKyAgICAgICAgICAgICAgICAgIyBJZiBzcmNkaXIgaXMgYSByZWxhdGl2ZSBwYXRoICh0eXBpY2FsbHkgJy4nIG9yICcuLicpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODViNTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRG9udCBzZWFyY2ggaGFyZGNvZGVkIHBhdGhzLCB3ZSBtaWdodCBiZSBkb2luZyBhIGNyb3NzLWJ1aWxkCitVc2UgJz0nIGluLWZyb250IHRvIGxldCBjb21waWxlciBhcHBlbmQgc3lzcm9vdCwgaWYgaXQgY2FuCisKK1Nob3VsZCBmaXggdGhpbmdzIGxpa2UKKworY29uZmlndXJlOjY5NzI6IGFybS1hbmdzdHJvbS1saW51eC1nbnVlYWJpLWdjYyAgLW1hcmNoPWFybXY3LWEgLW10aHVtYi1pbnRlcndvcmsgLW1mbG9hdC1hYmk9aGFyZCAtbWZwdT1uZW9uIC1tdHVuZT1jb3J0ZXgtYTggLUROREVCVUcgLWZuby1pbmxpbmUgLURfX1NPRlRGUF9fIC0tc3lzcm9vdD0vYnVpbGQvdjIwMTMuMDYvYnVpbGQvdG1wLWFuZ3N0cm9tX3YyMDEzXzA2LWVnbGliYy9zeXNyb290cy9iZWFnbGVib25lIC1jIC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IGNvbmZ0ZXN0LmMgPiY1CitjYzE6IHdhcm5pbmc6IGluY2x1ZGUgbG9jYXRpb24gIi91c3IvaW5jbHVkZS9uY3Vyc2VzdyIgaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbiBbLVdwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXQorCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworCitJbmRleDogUHl0aG9uLTMuMy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4yLm9yaWcvc2V0dXAucHkJMjAxMy0wNy0zMCAwMTozMDo0OC4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjIvc2V0dXAucHkJMjAxMy0wNy0zMCAwMTo0MToxMS42OTc4NjI3MjMgLTA3MDAKK0BAIC0xMjEwLDcgKzEyMTAsNyBAQAorICAgICAgICAgcGFuZWxfbGlicmFyeSA9ICdwYW5lbCcKKyAgICAgICAgIGlmIGN1cnNlc19saWJyYXJ5ID09ICduY3Vyc2Vzdyc6CisgICAgICAgICAgICAgY3Vyc2VzX2RlZmluZXMuYXBwZW5kKCgnSEFWRV9OQ1VSU0VTVycsICcxJykpCistICAgICAgICAgICAgY3Vyc2VzX2luY2x1ZGVzLmFwcGVuZCgnL3Vzci9pbmNsdWRlL25jdXJzZXN3JykKKysgICAgICAgICAgICBjdXJzZXNfaW5jbHVkZXMuYXBwZW5kKCc9L3Vzci9pbmNsdWRlL25jdXJzZXN3JykKKyAgICAgICAgICAgICAjIEJ1ZyAxNDY0MDU2OiBJZiBfY3Vyc2VzLnNvIGxpbmtzIHdpdGggbmN1cnNlc3csCisgICAgICAgICAgICAgIyBfY3Vyc2VzX3BhbmVsLnNvIG11c3QgbGluayB3aXRoIHBhbmVsdy4KKyAgICAgICAgICAgICBwYW5lbF9saWJyYXJ5ID0gJ3BhbmVsdycKK0BAIC0xODE5LDcgKzE4MTksNyBAQAorICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAjIE9TIFggMTAuNSBjb21lcyB3aXRoIGxpYmZmaS5keWxpYjsgdGhlIGluY2x1ZGUgZmlsZXMgYXJlCisgICAgICAgICAgICAgIyBpbiAvdXNyL2luY2x1ZGUvZmZpCistICAgICAgICAgICAgaW5jX2RpcnMuYXBwZW5kKCcvdXNyL2luY2x1ZGUvZmZpJykKKysgICAgICAgICAgICBpbmNfZGlycy5hcHBlbmQoJz0vdXNyL2luY2x1ZGUvZmZpJykKKyAKKyAgICAgICAgIGZmaV9pbmMgPSBbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJGRklfSU5DTFVERURJUiIpXQorICAgICAgICAgaWYgbm90IGZmaV9pbmMgb3IgZmZpX2luY1swXSA9PSAnJzoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTBmMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgQ0MgdmFyaWFibGUsc29tZXRpbWVzIGxpa2U6Ing4Nl82NC1wb2t5LWxpbnV4LWdjYyAgIC1tNjQgLS1zeXNyb290PS8ke1RNUERJUn0vc3lzcm9vdHMvcWVtdXg4Ni02NCIsIGNvbnRhaW5zIG9wdGlvbiBpbmZvcm1hdGlvbi4gCitUaGlzIHdpbGwgbGVhZCB0byB3cm9uZyBjb21waWxlciBuYW1lICJxZW11eDg2LTY0IiByYXRoZXIgdGhhbiAieDg2XzY0LXBva3ktbGludXgtZ2NjIiB3aGVuIHB5dGhvbiBmaW5kaW5nIHRoZSBjb21waWxlciBuYW1lLgorCitTZWNvbmRseSBhZGQgLUw9PHBhdGg+IHRoaXMgd2F5IGxpbmtlciB3aWxsIGJlIGFibGUgdG8gcmVzb2x2ZSAvdXNyL2xpYiB3LnIudCBzeXNyb290IGFuZCBub3QKK3VzZSBoYXJkY29kZWQgL3Vzci9saWIgdG8gbG9vayBmb3IgbGlicyB3aGljaCBpcyB3cm9uZyBpbiBjcm9zcyBjb21waWxlIGVudmlyb25tZW50IGFuZCB0aGlzIHdpbGwgd29yaworb2sgb24gbmF0aXZlIHN5c3RlbXMgdG9vIHNpbmNlIHN5c3Jvb3QgZm9yIG5hdGl2ZSBjb21waWxlcnMgaXMgLworCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogUHl0aG9uLTMuMy4yL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMi5vcmlnL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDEzLTA1LTE1IDA5OjMyOjU0LjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMy0wOC0wMSAwMDo1ODoxOC42MjkwNTYyODYgLTA3MDAKK0BAIC0yMDIsNyArMjAyLDkgQEAKKyAgICAgIyBjY29tcGlsZXIucHkuCisgCisgICAgIGRlZiBsaWJyYXJ5X2Rpcl9vcHRpb24oc2VsZiwgZGlyKToKKy0gICAgICAgIHJldHVybiAiLUwiICsgZGlyCisrICAgICAgICBpZiBkaXIuc3RhcnRzd2l0aCgiLiIpOgorKyAgICAgICAgICAgIHJldHVybiAiLUwiICsgZGlyCisrICAgICAgICByZXR1cm4gIi1MPSIgKyBkaXIKKyAKKyAgICAgZGVmIF9pc19nY2Moc2VsZiwgY29tcGlsZXJfbmFtZSk6CisgICAgICAgICByZXR1cm4gImdjYyIgaW4gY29tcGlsZXJfbmFtZSBvciAiZysrIiBpbiBjb21waWxlcl9uYW1lCitAQCAtMjIxLDcgKzIyMSw3IEBACisgICAgICAgICAjIHRoaXMgdGltZSwgdGhlcmUncyBubyB3YXkgdG8gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgIyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiwgc28KKyAgICAgICAgICMgd2UgdXNlIHRoaXMgaGFjay4KKy0gICAgICAgIGNvbXBpbGVyID0gb3MucGF0aC5iYXNlbmFtZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikpCisrICAgICAgICBjb21waWxlciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIE1hY09TWCdzIGxpbmtlciBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC1SIGZsYWcgYXQgYWxsCisgICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZDI3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNC4zLmJiCkBAIC0wLDAgKzEsMjI1IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKworREVQRU5EUyA9ICJweXRob24zLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiB2aXJ0dWFsL2xpYmludGwgeHoiCitQUiA9ICIke0lOQ19QUn0uMCIKK1BZVEhPTl9NQUpNSU4gPSAiMy40IgorUFlUSE9OX0JJTkFCST0gIiR7UFlUSE9OX01BSk1JTn1tIgorRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiBcCitmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCitmaWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAorZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKK2ZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAorZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAorZmlsZTovLzExMC1lbmFibGUtemxpYi5wYXRjaCBcCitmaWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKK2ZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCitmaWxlOi8vMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIFwKK2ZpbGU6Ly9tYWtlcmFjZS5wYXRjaCBcCiske0RJU1RST19TUkNfVVJJfSBcCisiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NnaV9weS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZC1uY3Vyc2Vzdy1pbmNsdWRlLXBhdGgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtdXNlLUNST1NTUFlUSE9OUEFUSC1mb3ItUFlUSE9OX0ZPUl9CVUlMRC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NldHVwLnB5LWZpbmQtbGlicmFyaWVzLWluLXN0YWdpbmctZGlycy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDA5MmQxYmJhNmUxN2YwZDliZDIxYjQ5ZTQ0MWRkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNWIzOTYzNTMzNzY4ZDVmYzMyNWE0ZDdhNmJkNmY2NjY3MjYwMDJkNjk2ZjFkMzk5ZWMwNmIwNDNlYTk5NmI4IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1kZDk4ZDAxZDQ3MWZhYzhkOGRiZGQ5NzUyMjlkYmEwMyIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbjNuYXRpdmUgcGtnY29uZmlnCisKK0NPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImFjX2N2X2hhdmVfY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sY2hmbGFncz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubyBcCisiCisjIFRoZSAzIGxpbmVzIGJlbG93IGFyZSBjb3BpZWQgZnJvbSB0aGUgbGliZmZpIHJlY2lwZSwgY3R5cGVzIHNoaXBzIGl0cyBvd24gY29weSBvZiB0aGUgbGliZmZpIHNvdXJjZXMKKyNTb21laG93IGdjYyBkb2Vzbid0IHNldCBfX1NPRlRGUF9fIHdoZW4gcGFzc2luZyAtbWZsb2F0YWJpPXNvZnRwIDooCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjYgPSAiIC1EX19TT0ZURlBfXyIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12N2EgPSAiIC1EX19TT0ZURlBfXyIKK1RBUkdFVF9DQ19BUkNIICs9ICItRE5ERUJVRyAtZm5vLWlubGluZSIKK0VYVFJBX09FTUFLRSArPSAiQ1JPU1NfQ09NUElMRT15ZXMiCitFWFRSQV9PRUNPTkYgKz0gIkNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gLS13aXRob3V0LWVuc3VyZXBpcCIKKworZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKK2V4cG9ydCBfUFlUSE9OX1BST0pFQ1RfQkFTRSA9ICIke0J9IgorZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9TUkMgPSAiJHtTfSIKK2V4cG9ydCBDQ1NIQVJFRCA9ICItZlBJQyIKKworIyBGaXggY3R5cGVzIGNyb3NzIGNvbXBpbGF0aW9uCitleHBvcnQgQ1JPU1NQWVRIT05QQVRIID0gIiR7Qn0vYnVpbGQvbGliLmxpbnV4LSR7VEFSR0VUX0FSQ0h9LSR7UFlUSE9OX01BSk1JTn06JHtTfS9MaWI6JHtTfS9MaWIvcGxhdC1saW51eCIKKworIyBObyBjdHlwZXMgb3B0aW9uIGZvciBweXRob24gMworUFlUSE9OTFNCT1BUUyA9ICIiCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCisJYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgcmVnZW5lcmF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBzeXN0ZW0gaGVhZGVycworICAgICAgICBjZCAke1N9L0xpYi9wbGF0LWxpbnV4KgorICAgICAgICBpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKyAgICAgICAgICAgICAgICAke1N9L1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9kbGZjbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9saW51eC9jZHJvbS5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9uZXRpbmV0L2luLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L3N5cy90eXBlcy5oCisgICAgICAgIHNlZCAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAtaSAqLnB5CisgICAgICAgIGNkIC0KKworCisJIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAorCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQorCisJaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZworCWZpCisJc2VkIC1pIC1lICdzLF5DT05GSUdVUkVfTERGTEFHUz0uKixDT05GSUdVUkVfTERGTEFHUz0tTC4gLUwke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAorCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCU1ha2VmaWxlCisJIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAorCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290CisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCU9QVD0iJHtDRkxBR1N9IiBsaWJweXRob24zLnNvCisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCU9QVD0iJHtDRkxBR1N9IgorfQorCitkb19pbnN0YWxsKCkgeworCSMgbWFrZSBpbnN0YWxsIG5lZWRzIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSwgb3Igb3RoZXJ3aXNlIHRoZSBpbmNsdWVzIHdvdWxkCisJIyBnbyB0byAke0R9JHtTVEFHSU5HLi4ufS8uLi4KKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUub3JpZyBNYWtlZmlsZQorCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZworCisJIyByZXJ1biB0aGUgYnVpbGQgb25jZSBhZ2FpbiB3aXRoIG9yaWdpbmFsIG1ha2VmaWxlIHRoaXMgdGltZQorCSMgcnVuIGluc3RhbGwgaW4gYSBzZXBhcmF0ZSBzdGVwIHRvIGF2b2lkIGNvbXBpbGUvaW5zdGFsbCByYWNlCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfQorCQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAorCisJIyBhdm9pZCBjb25mbGljdCB3aXRoIDJ0bzMgZnJvbSBQeXRob24gMgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9LzJ0bzMKKworCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5zeXNyb290ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IFRFUk1JTkZPX0RJUlM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvJworfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiTWFrZWZpbGUiCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInB5X3BhY2thZ2VfcHJlcHJvY2VzcyIKKworcHlfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwkjIGNvcHkgYmFjayB0aGUgb2xkIE1ha2VmaWxlIHRvIGZpeCB0YXJnZXQgcGFja2FnZQorCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKwkjIFJlbW92ZSByZWZlcmVuY2VzIHRvIGJ1aWxkbWFjaGluZSBwYXRocyBpbiB0YXJnZXQgTWFrZWZpbGUgYW5kIF9zeXNjb25maWdkYXRhCisJc2VkIC1pIC1lICdzOi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH06OmcnIC1lIHM6Jy0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9Jzo6ZyBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc3lzY29uZmlnZGF0YS5weQorfQorCityZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYworCisjIG1hbnVhbCBkZXBlbmRlbmN5IGFkZGl0aW9ucworUlBST1ZJREVTXyR7UE59LWNvcmUgPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfS1jb3JlID0gIiR7UE59LXJlYWRsaW5lIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHQgPSAib3BlbnNzbCIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0X2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstb3BlbnNzbCIKKworRklMRVNfJHtQTn0tMnRvMyArPSAiJHtiaW5kaXJ9LzJ0bzMtJHtQWVRIT05fTUFKTUlOfSIKK0ZJTEVTXyR7UE59LXB5ZG9jICs9ICIke2JpbmRpcn0vcHlkb2Mke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weWRvYzMiCitGSUxFU18ke1BOfS1pZGxlICs9ICIke2JpbmRpcn0vaWRsZTMgJHtiaW5kaXJ9L2lkbGUke1BZVEhPTl9NQUpNSU59IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tcHl2ZW52IgorRklMRVNfJHtQTn0tcHl2ZW52ICs9ICIke2JpbmRpcn0vcHl2ZW52LSR7UFlUSE9OX01BSk1JTn0gJHtiaW5kaXJ9L3B5dmVudiIKKworIyBwYWNrYWdlIGxpYnB5dGhvbjMKK1BBQ0tBR0VTID0rICJsaWJweXRob24zIGxpYnB5dGhvbjMtc3RhdGljZGV2IgorRklMRVNfbGlicHl0aG9uMyA9ICIke2xpYmRpcn0vbGlicHl0aG9uKi5zby4qIgorRklMRVNfbGlicHl0aG9uMy1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy0ke1BZVEhPTl9CSU5BQkl9L2xpYnB5dGhvbiR7UFlUSE9OX0JJTkFCSX0uYSIKKworIyBjYXRjaCBkZWJ1ZyBleHRlbnNpb25zIChpc24ndCB0aGF0IGFscmVhZHkgaW4gcHl0aG9uLWNvcmUtZGJnPykKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvLmRlYnVnIgorCisjIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCitQQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gIiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgorCisjIGNhdGNoIG1hbnBhZ2UKK1BBQ0tBR0VTICs9ICIke1BOfS1tYW4iCitGSUxFU18ke1BOfS1tYW4gPSAiJHtkYXRhZGlyfS9tYW4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlMmYyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjkuYmIKQEAgLTAsMCArMSwxODEgQEAKK3JlcXVpcmUgcHl0aG9uLmluYworREVQRU5EUyA9ICJweXRob24tbmF0aXZlIGxpYmZmaSBiemlwMiBkYiBnZGJtIG9wZW5zc2wgcmVhZGxpbmUgc3FsaXRlMyB6bGliIgorUFIgPSAiJHtJTkNfUFJ9IgorCitESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCitESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgorU1JDX1VSSSArPSAiXAorICBmaWxlOi8vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2ggXAorICBmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKKyAgZmlsZTovLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2ggXAorICAke0RJU1RST19TUkNfVVJJfSBcCisgIGZpbGU6Ly9tdWx0aWxpYi5wYXRjaCBcCisgIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAorICBmaWxlOi8vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2ggXAorICBmaWxlOi8vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIFwKKyAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKKyAgZmlsZTovL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaCBcCisgIGZpbGU6Ly9zZXR1cHR3ZWFrcy5wYXRjaCBcCisgIGZpbGU6Ly9jaGVjay1pZi10YXJnZXQtaXMtNjRiLW5vdC1ob3N0LnBhdGNoIFwKKyAgZmlsZTovL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoIFwKKyAgZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCisgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Zvcl9zdW5vc19zcGVjaWZpY19tb2R1bGUucGF0Y2ggXAorICBmaWxlOi8vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoIFwKKyAgZmlsZTovL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2ggXAorICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgZmlsZTovL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggXAorICBmaWxlOi8vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L1B5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB5dGhvbi1kaXIgcHl0aG9ubmF0aXZlCisKK0NPTkZJR1VSRU9QVFMgKz0gIiAtLXdpdGgtc3lzdGVtLWZmaSAiCisKKyMgVGhlIDMgbGluZXMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIHRoZSBsaWJmZmkgcmVjaXBlLCBjdHlwZXMgc2hpcHMgaXRzIG93biBjb3B5IG9mIHRoZSBsaWJmZmkgc291cmNlcworI1NvbWVob3cgZ2NjIGRvZXNuJ3Qgc2V0IF9fU09GVEZQX18gd2hlbiBwYXNzaW5nIC1tZmxvYXRhYmk9c29mdHAgOigKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12NiA9ICIgLURfX1NPRlRGUF9fIgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY3YSA9ICIgLURfX1NPRlRGUF9fIgorCisjIFRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrIHVudGlsIHdlIGRyb3AgYWNfY3Zfc2l6ZW9mX29mZl90IGZyb20gc2l0ZSBmaWxlcworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdhY19jdl9zaXplb2Zfb2ZmX3Q9OCcsICcnLCBkKX0gYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8iCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJcm0gLWYgJHtTfS9NYWtlZmlsZS5vcmlnCisgICAgICAgIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKKyAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eDIKKyAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKKyAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKKyAgICAgICAgY2QgLQorCisJIyByZW1vdmUgYW55IGJvZ3VzIExEX0xJQlJBUllfUEFUSAorCXNlZCAtaSAtZSBzLFJVTlNIQVJFRD0uKixSVU5TSEFSRUQ9LCBNYWtlZmlsZQorCisJaWYgWyAhIC1mIE1ha2VmaWxlLm9yaWcgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUub3JpZworCWZpCisJc2VkIC1pIC1lICdzI15MREZMQUdTPS4qI0xERkxBR1M9JHtMREZMQUdTfSAtTC4gLUwke1NUQUdJTkdfTElCRElSfSNnJyBcCisJCS1lICdzLGxpYmRpcj0ke2xpYmRpcn0sbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9LGxpYmV4ZWNkaXI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZXhlY2Rpcn0sZycgXAorCQktZSAncyxeTElCRElSPS4qLExJQkRJUj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSxpbmNsdWRlZGlyPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXklOQ0xVREVESVI9LiosSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5DT05GSU5DTFVERURJUj0uKixDT05GSU5DTFVERT0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCU1ha2VmaWxlCisJIyBzYXZlIGNvcHkgb2YgaXQgbm93LCBiZWNhdXNlIGlmIHdlIGRvIGl0IGluIGRvX2luc3RhbGwgYW5kIAorCSMgdGhlbiBjYWxsIGRvX2luc3RhbGwgdHdpY2Ugd2UgZ2V0IE1ha2VmaWxlLm9yaWcgPT0gTWFrZWZpbGUuc3lzcm9vdAorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5zeXNyb290CisKKwlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKKwlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCisKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCU9QVD0iJHtDRkxBR1N9IgorfQorCitkb19pbnN0YWxsKCkgeworCSMgbWFrZSBpbnN0YWxsIG5lZWRzIHRoZSBvcmlnaW5hbCBNYWtlZmlsZSwgb3Igb3RoZXJ3aXNlIHRoZSBpbmNsdWVzIHdvdWxkCisJIyBnbyB0byAke0R9JHtTVEFHSU5HLi4ufS8uLi4KKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUub3JpZyBNYWtlZmlsZQorCisJZXhwb3J0IENST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iCisJZXhwb3J0IFBZVEhPTkJVSUxERElSPSIke0J9IgorCisJIyBBZnRlciBzd2l6emxpbmcgdGhlIG1ha2VmaWxlLCB3ZSBuZWVkIHRvIHJ1biB0aGUgYnVpbGQgYWdhaW4uCisJIyBpbnN0YWxsIGNhbiByYWNlIHdpdGggdGhlIGJ1aWxkIHNvIHdlIGhhdmUgdG8gcnVuIHRoaXMgZmlyc3QsIHRoZW4gaW5zdGFsbAorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9CisJCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0gaW5zdGFsbAorCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9NQUpNSU59L3B5Y29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbjIuNyBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgorUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3B5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwkjIFJlbW92ZSByZWZlcmVuY2VzIHRvIGJ1aWxkbWFjaGluZSBwYXRocyBpbiB0YXJnZXQgTWFrZWZpbGUgYW5kIF9zeXNjb25maWdkYXRhCisJc2VkIC1pIC1lICdzOi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH06OmcnIC1lIHM6Jy0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9Jzo6ZyBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fc3lzY29uZmlnZGF0YS5weQorfQorCityZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYworCisjIG1hbnVhbCBkZXBlbmRlbmN5IGFkZGl0aW9ucworUlBST1ZJREVTXyR7UE59LWNvcmUgPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfS1jb3JlID0gIiR7UE59LXJlYWRsaW5lIgorUlJFQ09NTUVORFNfJHtQTn0tY29yZV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBuYXRpdmVzZGstcHl0aG9uLW1vZHVsZXMiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdCA9ICJvcGVuc3NsIgorCisjIHBhY2thZ2UgbGlicHl0aG9uMgorUEFDS0FHRVMgPSsgImxpYiR7QlBOfTIiCitGSUxFU19saWIke0JQTn0yID0gIiR7bGliZGlyfS9saWJweXRob24qLnNvLioiCisKKyMgY2F0Y2ggZGVidWcgZXh0ZW5zaW9ucyAoaXNuJ3QgdGhhdCBhbHJlYWR5IGluIHB5dGhvbi1jb3JlLWRiZz8pCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLy5kZWJ1ZyIKKworIyBjYXRjaCBhbGwgdGhlIHJlc3QgKHVuc29ydGVkKQorUEFDS0FHRVMgKz0gIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcyArPSAiJHtQTn0tbWlzYyIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gIiR7UE59LW1vZHVsZXMiCisjaW5oZXJpdCBwdGVzdCBhZnRlciAicmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMiIHNvIFBBQ0tBR0VTIGRvZXNuJ3QgZ2V0IG92ZXJ3cml0dGVuCitpbmhlcml0IHB0ZXN0CisKKyMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgaW5oZXJpdCBwdGVzdCBmb3IgdGhlIG92ZXJyaWRlIHRvIHRha2UgZWZmZWN0Citkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KKwlzZWQgLWUgczpMSUJESVIvcHl0aG9uL3B0ZXN0OiR7UFRFU1RfUEFUSH06ZyBcCisJIC1lIHM6TElCRElSOiR7bGliZGlyfTpnIFwKKwkgLWkgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0Cit9CisKKyMgY2F0Y2ggbWFucGFnZQorUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKK0ZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkMWM1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvbmF0aXZlc2RrLXFlbXUtaGVscGVyXzEuMC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIlFlbXUgaGVscGVyIHNjcmlwdHMiCitMSUNFTlNFID0gIkdQTHYyIgorUkRFUEVORFNfJHtQTn0gPSAibmF0aXZlc2RrLXFlbXUiCitQUiA9ICJyOSIKKworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L3R1bmN0bC5jO2VuZGxpbmU9NDttZDU9ZmYzYTA5OTk2YmM1ZmZmNmJjNWQ0ZTBiNGMyOGY5OTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11O2VuZGxpbmU9MTg7bWQ1PTc3ZmJlNDQyYTg4YjFiY2RjMjljM2JhNjc3MzNiMjFiIgorCisKK1NSQ19VUkkgPSAiZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdSBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZSBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWlmdXAgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWlmZG93biBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWV4dHJhY3Qtc2RrIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzIFwKKyAgICAgICAgICAgZmlsZTovL3R1bmN0bC5jIFwKKyAgICAgICAgICAgZmlsZTovL3JhdzJmbGFzaC5jIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworZG9fY29tcGlsZSgpIHsKKwkke0NDfSB0dW5jdGwuYyAtbyB0dW5jdGwKKwkke0NDfSByYXcyZmxhc2guYyAtbyByYXcyZmxhc2guc3BpdHoKKwkke0NDfSByYXcyZmxhc2guYyAtbyBmbGFzaDJyYXcuc3BpdHogLURmbGFzaDJyYXcKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfSR7Q09SRUJBU0V9L3NjcmlwdHMvb2UtKiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9JHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11KiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgdHVuY3RsICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9LworCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2guYWtpdGEKKwlsbiAtZnMgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vcmF3MmZsYXNoLmJvcnpvaQorCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2gudGVycmllcgorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcuYWtpdGEKKwlsbiAtZnMgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vZmxhc2gycmF3LmJvcnpvaQorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcudGVycmllcgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjdjNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyLW5hdGl2ZV8xLjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJIZWxwZXIgdXRpbGl0aWVzIG5lZWRlZCBieSB0aGUgcnVucWVtdSBzY3JpcHQiCitMSUNFTlNFID0gIkdQTHYyIgorUkRFUEVORFNfJHtQTn0gPSAicWVtdS1uYXRpdmUiCitQUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS90dW5jdGwuYztlbmRsaW5lPTQ7bWQ1PWZmM2EwOTk5NmJjNWZmZjZiYzVkNGUwYjRjMjhmOTk5IgorCitTUkNfVVJJID0gImZpbGU6Ly90dW5jdGwuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19jb21waWxlKCkgeworCSR7Q0N9IHR1bmN0bC5jIC1vIHR1bmN0bAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgdHVuY3RsICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWZhZjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuZWRIYW5kIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR05VIEdQTCB2Mi4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgVEZSKF8pCQlfCisjZGVmaW5lIFZFUkJPU0UKKyNkZWZpbmUgUEJBUl9MRU4JNDAKKworI2RlZmluZSBQQVJUSVRJT05fU1RBUlQJMHgwMDcwMDAwMAorCitzdGF0aWMgY29uc3QgaW50IGVjY19wb3M4W10gPSB7CisJMHgwLCAweDEsIDB4MiwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczE2W10gPSB7CisJMHgwLCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczY0W10gPSB7CisJMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKKwkweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorCTB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCit9OworCitzdGF0aWMgY29uc3QgaW50IGVjY19ha2l0YVtdID0geworCTB4MDUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MTUsIDB4MTEsCisJMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKKwkweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3LAorfTsKKworc3RydWN0IGpmZnNfbWFya2VyX3MgeworCWludCBwb3M7CisJdWludDhfdCB2YWx1ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczhbXSA9IHsKKwl7IDB4MDMsIDB4ZmYgfSwgeyAweDA0LCAweGZmIH0sIHsgMHgwNiwgMHg4NSB9LCB7IDB4MDcsIDB4MTkgfSwKKwl7IC0xIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3MxNltdID0geworCXsgMHgwOCwgMHg4NSB9LCB7IDB4MDksIDB4MTkgfSwgeyAweDBhLCAweDAzIH0sIHsgMHgwYiwgMHgyMCB9LAorCXsgMHgwYywgMHgwOCB9LCB7IDB4MGQsIDB4MDAgfSwgeyAweDBlLCAweDAwIH0sIHsgMHgwZiwgMHgwMCB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczY0W10gPSB7CisJeyAweDAyLCAweGZmIH0sIHsgMHgwMywgMHhmZiB9LCB7IDB4MDQsIDB4ZmYgfSwgeyAweDA1LCAweGZmIH0sCisJeyAweDA2LCAweGZmIH0sIHsgMHgwNywgMHhmZiB9LCB7IDB4MDgsIDB4ZmYgfSwgeyAweDA5LCAweGZmIH0sCisJeyAweDBhLCAweGZmIH0sIHsgMHgwYiwgMHhmZiB9LCB7IDB4MGMsIDB4ZmYgfSwgeyAweDBkLCAweGZmIH0sCisJeyAweDBlLCAweGZmIH0sIHsgMHgwZiwgMHhmZiB9LCB7IDB4MTAsIDB4ODUgfSwgeyAweDExLCAweDE5IH0sCisJeyAweDEyLCAweDAzIH0sIHsgMHgxMywgMHgyMCB9LCB7IDB4MTQsIDB4MDggfSwgeyAweDE1LCAweDAwIH0sCisJeyAweDE2LCAweDAwIH0sIHsgMHgxNywgMHgwMCB9LCB7IDB4MTgsIDB4ZmYgfSwgeyAweDE5LCAweGZmIH0sCisJeyAweDFhLCAweGZmIH0sIHsgMHgxYiwgMHhmZiB9LCB7IDB4MWMsIDB4ZmYgfSwgeyAweDFkLCAweGZmIH0sCisJeyAweDFlLCAweGZmIH0sIHsgMHgxZiwgMHhmZiB9LCB7IDB4MjAsIDB4ZmYgfSwgeyAweDIxLCAweGZmIH0sCisJeyAweDIyLCAweGZmIH0sIHsgMHgyMywgMHhmZiB9LCB7IDB4MjQsIDB4ZmYgfSwgeyAweDI1LCAweGZmIH0sCisJeyAweDI2LCAweGZmIH0sIHsgMHgyNywgMHhmZiB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX2FraXRhW10gPSB7CisJeyAweDA4LCAweDg1IH0sIHsgMHgwOSwgMHgxOSB9LCB7IDB4MGEsIDB4MDMgfSwgeyAweDBiLCAweDIwIH0sCisJeyAweDBjLCAweDA4IH0sIHsgMHgwZCwgMHgwMCB9LCB7IDB4MGUsIDB4MDAgfSwgeyAweDBmLCAweDAwIH0sCisJeyAweDEwLCAweGZmIH0sCisJeyAtMSB9LAorfTsKKworI2RlZmluZSBMRU4oYXJyYXkpCShzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKCphcnJheSkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWNjX3N0eWxlX3MgeworCWludCBwYWdlX3NpemU7CisJaW50IG9vYl9zaXplOworCWludCBlY2NieXRlczsKKwlpbnQgZWNjc2l6ZTsKKwljb25zdCBpbnQgKmVjY3BvczsKKwlpbnQgcm9tc2l6ZTsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqZnJlZXBvczsKK30gc3BpdHogPSB7CisJMHgyMDAsIDB4MTAsIDB4MTAwLCBMRU4oZWNjX3BvczE2KSwgZWNjX3BvczE2LCAweDAxMDAwMDAwLCBmcmVlX3BvczE2Cit9LCBha2l0YSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIGJvcnpvaSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIHRlcnJpZXIgPSB7CisJMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCit9OworCitzdHJ1Y3QgZWNjX3N0YXRlX3MgeworCWludCBjb3VudDsKKwl1aW50OF90IGNwOworCXVpbnQ4X3QgbHBbMl07CisJY29uc3Qgc3RydWN0IGVjY19zdHlsZV9zICpzdHlsZTsKK307CisKKyNpZm5kZWYgZmxhc2gycmF3CisvKgorICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29sdW1uIHBhcml0eS4gIFRhYmxlIGJvcnJvd2VkIGZyb20gTGludXguCisgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IGVjY19wcmVjYWxjX3RhYmxlW10gPSB7CisJMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsCisJMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKKwkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLAorCTB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCisJMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsCisJMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKKwkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LAorCTB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKKwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAorCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsCisJMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKKwkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLAorCTB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKKwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAorCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsCisJMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKKwkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLAorCTB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCisJMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsCisJMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKKwkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLAorCTB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCisJMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorfTsKKworLyogVXBkYXRlIEVDQyBwYXJpdHkgY291bnQgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBlY2NfZGlnZXN0KHN0cnVjdCBlY2Nfc3RhdGVfcyAqcywgdWludDhfdCBzYW1wbGUpIHsKKwl1aW50OF90IGlkeCA9IGVjY19wcmVjYWxjX3RhYmxlW3NhbXBsZV07CisKKwlzLT5jcCBePSBpZHggJiAweDNmOworCWlmIChpZHggJiAweDQwKSB7CisJCXMtPmxwWzBdIF49IH4ocy0+Y291bnQgJiAweGZmKTsKKwkJcy0+bHBbMV0gXj0gcy0+Y291bnQgJiAweGZmOworCX0KKwlzLT5jb3VudCArKzsKKworCXJldHVybiBzYW1wbGU7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9kaWdlc3Qoc3RydWN0IGVjY19zdGF0ZV9zICplY2MsCisJCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb3V0KSB7CisJaW50IGksIGxwX2FbMl07CisKKwllY2MtPmxwWzBdID0gMHgwMDsKKwllY2MtPmxwWzFdID0gMHgwMDsKKwllY2MtPmNwID0gMHgwMDsKKwllY2MtPmNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7IGkgKyspCisJCWVjY19kaWdlc3QoZWNjLCBidWZbaV0pOworCisjIGRlZmluZSBCU0hSKGJ5dGUsIGZyb20sIHRvKQkoKGVjYy0+bHBbYnl0ZV0gPj4gKGZyb20gLSB0bykpICYgKDEgPDwgdG8pKQorCWxwX2FbMF0gPQorCQlCU0hSKDAsIDQsIDApIHwgQlNIUigwLCA1LCAyKSB8CisJCUJTSFIoMCwgNiwgNCkgfCBCU0hSKDAsIDcsIDYpIHwKKwkJQlNIUigxLCA0LCAxKSB8IEJTSFIoMSwgNSwgMykgfAorCQlCU0hSKDEsIDYsIDUpIHwgQlNIUigxLCA3LCA3KTsKKworIyBkZWZpbmUgQlNITChieXRlLCBmcm9tLCB0bykJKChlY2MtPmxwW2J5dGVdIDw8ICh0byAtIGZyb20pKSAmICgxIDw8IHRvKSkKKwlscF9hWzFdID0KKwkJQlNITCgwLCAwLCAwKSB8IEJTSEwoMCwgMSwgMikgfAorCQlCU0hMKDAsIDIsIDQpIHwgQlNITCgwLCAzLCA2KSB8CisJCUJTSEwoMSwgMCwgMSkgfCBCU0hMKDEsIDEsIDMpIHwKKwkJQlNITCgxLCAyLCA1KSB8IEJTSEwoMSwgMywgNyk7CisKKwlvdXRbMF0gPSB+bHBfYVsxXTsKKwlvdXRbMV0gPSB+bHBfYVswXTsKKwlvdXRbMl0gPSAofmVjYy0+Y3AgPDwgMikgfCAweDAzOworfQorCitzdGF0aWMgdm9pZCBqZmZzMl9mb3JtYXQoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3Qgb29iW10pIHsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqYnl0ZTsKKwlmb3IgKGJ5dGUgPSBlY2MtPnN0eWxlLT5mcmVlcG9zOyBieXRlLT5wb3MgPj0gMDsgYnl0ZSArKykKKwkJb29iW2J5dGUtPnBvc10gPSBieXRlLT52YWx1ZTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2ZpbGwoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3QgYnVmZmVyW10sCisJCWludCAqbGVuLCBpbnQgKnBhcnRpdGlvbiwgaW50IGNvdW50LCB1aW50OF90IGpmZnNfYnVmZmVyW10pIHsKKwlpbnQgcmV0OworCisJc3dpdGNoICgqcGFydGl0aW9uKSB7CisJY2FzZSAwOgorCQlpZiAoY291bnQgPCBQQVJUSVRJT05fU1RBUlQpIHsKKwkJCW1lbWNweShidWZmZXIsIGpmZnNfYnVmZmVyICsgY291bnQsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJCWJyZWFrOworCQl9CisJCSpwYXJ0aXRpb24gPSAxOworCWNhc2UgMToKKwkJaWYgKGNvdW50IC0gUEFSVElUSU9OX1NUQVJUIDwgUEFSVElUSU9OX1NUQVJUKSB7CisJCQltZW1jcHkoYnVmZmVyLCBqZmZzX2J1ZmZlciArIGNvdW50IC0gUEFSVElUSU9OX1NUQVJULAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7CisJCQlicmVhazsKKwkJfQorCisJCXdoaWxlICgqbGVuIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpIHsKKwkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciArICpsZW4sIDB4ODAwIC0gKmxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJKmxlbiArPSByZXQ7CisJCX0KKworCQlpZiAoKmxlbiA9PSAwKQorCQkJKnBhcnRpdGlvbiA9IDI7CisJCWVsc2UgaWYgKCpsZW4gPCBlY2MtPnN0eWxlLT5lY2NieXRlcykgeworCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCAqbGVuKTsKKwkJCW1lbXNldChidWZmZXIgKyAqbGVuLCAweGZmLAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyAtICpsZW4pOworCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJY2FzZSAyOgorCQltZW1zZXQoYnVmZmVyLCAweGZmLCBlY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJYnJlYWs7CisJfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10pIHsKKwlzdHJ1Y3QgZWNjX3N0YXRlX3MgZWNjOworCXVpbnQ4X3QgYnVmZmVyWzB4MTAwMF0sIGVjY19wYXlsb2FkWzB4NDBdLCByZWdzWzNdLCAqamZmczsKKwlpbnQgcmV0LCBsZW4sIGVjY2J5dGUsIGNvdW50LCBwYXJ0aXRpb247CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgInJhdzJmbGFzaC5zcGl0eiIgb3Igc2ltaWxhciAqLworCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxlID0gJmJvcnpvaTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKKwkJZWNjLnN0eWxlID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAmc3BpdHo7CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRpZgorCisJLyogU2tpcCBmaXJzdCAxMCBieXRlcyAqLworCVRGUihyZWFkKDAsIGJ1ZmZlciwgMHgxMCkpOworCisJbGVuID0gMDsKKwlqZmZzID0gKHVpbnQ4X3QgKikgbWFsbG9jKFBBUlRJVElPTl9TVEFSVCk7CisJd2hpbGUgKGxlbiA8IFBBUlRJVElPTl9TVEFSVCkgeworCQlyZXQgPSBURlIocmVhZCgwLCBqZmZzICsgbGVuLCBQQVJUSVRJT05fU1RBUlQgLSBsZW4pKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCWxlbiArPSByZXQ7CisJfQorCisJLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KKwlwYXJ0aXRpb24gPSBsZW4gPSBlY2NieXRlID0gY291bnQgPSAwOworCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJamZmczJfZm9ybWF0KCZlY2MsIGVjY19wYXlsb2FkKTsKKwl3aGlsZSAoY291bnQgPCBlY2Muc3R5bGUtPnJvbXNpemUpIHsKKwkJYnVmZmVyX2ZpbGwoJmVjYywgYnVmZmVyLCAmbGVuLCAmcGFydGl0aW9uLCBjb3VudCwgamZmcyk7CisJCWJ1ZmZlcl9kaWdlc3QoJmVjYywgYnVmZmVyLCByZWdzKTsKKworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzBdOworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzFdOworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzJdOworCisJCVRGUih3cml0ZSgxLCBidWZmZXIsIGVjYy5zdHlsZS0+ZWNjYnl0ZXMpKTsKKwkJY291bnQgKz0gZWNjLnN0eWxlLT5lY2NieXRlczsKKwkJbGVuIC09IGVjYy5zdHlsZS0+ZWNjYnl0ZXM7CisJCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBlY2Muc3R5bGUtPmVjY2J5dGVzLCBsZW4pOworCisJCWlmIChlY2NieXRlID49IGVjYy5zdHlsZS0+ZWNjc2l6ZSkgeworCQkJVEZSKHdyaXRlKDEsIGVjY19wYXlsb2FkLCBlY2Muc3R5bGUtPm9vYl9zaXplKSk7CisJCQllY2NieXRlID0gMDsKKwkJCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJCQlpZiAocGFydGl0aW9uIDwgMikKKwkJCQlqZmZzMl9mb3JtYXQoJmVjYywgZWNjX3BheWxvYWQpOworCQl9CisKKyMgaWZkZWYgVkVSQk9TRQorCQlpZiAoY291bnQgKiBQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSA+CisJCQkJKGNvdW50IC0gZWNjLnN0eWxlLT5lY2NieXRlcykgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQorCQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCWZyZWUoamZmcyk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdKSB7CisJc3RydWN0IGVjY19zdGF0ZV9zIGVjYzsKKwl1aW50OF90IGJ1ZmZlclsweDEwMDBdOworCWludCByZXQsIGxlbiwgY291bnQ7CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgImZsYXNoMnJhdy5zcGl0eiIgb3Igc2ltaWxhciAqLworCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxlID0gJmJvcnpvaTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKKwkJZWNjLnN0eWxlID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAmc3BpdHo7CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRpZgorCisJLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNvdW50IDwgZWNjLnN0eWxlLT5yb21zaXplKSB7CisJCWxlbiA9IDA7CisJCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgeworCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyICsgbGVuLAorCQkJCQkJZWNjLnN0eWxlLT5wYWdlX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCWxlbiArPSByZXQ7CisJCX0KKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCBsZW4pOworCQl9CisKKwkJVEZSKHdyaXRlKDEsIGJ1ZmZlciwgZWNjLnN0eWxlLT5wYWdlX3NpemUpKTsKKworCQljb3VudCArPSBsZW47CisJCWxlbiA9IDA7CisJCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPm9vYl9zaXplKSB7CisJCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIsIGVjYy5zdHlsZS0+b29iX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCWxlbiArPSByZXQ7CisJCX0KKworIyBpZmRlZiBWRVJCT1NFCisJCWlmIChjb3VudCAqIFBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplID4KKwkJCQkoY291bnQgLSBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQorCQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3R1bmN0bC5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci90dW5jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmUyNGEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci90dW5jdGwuYwpAQCAtMCwwICsxLDE1NiBAQAorLyogQ29weXJpZ2h0IDIwMDIgSmVmZiBEaWtlCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorCisvKiBUVU5TRVRHUk9VUCBhcHBlYXJlZCBpbiAyLjYuMjMgKi8KKyNpZm5kZWYgVFVOU0VUR1JPVVAKKyNkZWZpbmUgVFVOU0VUR1JPVVAgICBfSU9XKCdUJywgMjA2LCBpbnQpCisjZW5kaWYKKworc3RhdGljIHZvaWQgVXNhZ2UoY2hhciAqbmFtZSkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDcmVhdGU6ICVzIFstYl0gWy11IG93bmVyXSBbLWcgZ3JvdXBdIFstdCBkZXZpY2UtbmFtZV0gIgorCSAgIlstZiB0dW4tY2xvbmUtZGV2aWNlXVxuIiwgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAiRGVsZXRlOiAlcyAtZCBkZXZpY2UtbmFtZSBbLWYgdHVuLWNsb25lLWRldmljZV1cblxuIiwKKwkgIG5hbWUpOworICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBkZWZhdWx0IHR1biBjbG9uZSBkZXZpY2UgaXMgL2Rldi9uZXQvdHVuIC0gc29tZSBzeXN0ZW1zIgorCSAgIiB1c2Vcbi9kZXYvbWlzYy9uZXQvdHVuIGluc3RlYWRcblxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiLWIgd2lsbCByZXN1bHQgaW4gYnJpZWYgb3V0cHV0IChqdXN0IHRoZSBkZXZpY2UgbmFtZSlcbiIpOworICBleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisgIHN0cnVjdCBwYXNzd2QgKnB3OworICBzdHJ1Y3QgZ3JvdXAgKmdyOworICB1aWRfdCBvd25lciA9IC0xOworICBnaWRfdCBncm91cCA9IC0xOworICBpbnQgdGFwX2ZkLCBvcHQsIGRlbGV0ZSA9IDAsIGJyaWVmID0gMDsKKyAgY2hhciAqdHVuID0gIiIsICpmaWxlID0gIi9kZXYvbmV0L3R1biIsICpuYW1lID0gYXJndlswXSwgKmVuZDsKKworICB3aGlsZSgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJiZDpmOnQ6dTpnOiIpKSA+IDApeworICAgIHN3aXRjaChvcHQpIHsKKyAgICAgIGNhc2UgJ2InOgorICAgICAgICBicmllZiA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZCc6CisgICAgICAgIGRlbGV0ZSA9IDE7CisJdHVuID0gb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2YnOgorCWZpbGUgPSBvcHRhcmc7CisJYnJlYWs7CisgICAgICBjYXNlICd1JzoKKwlwdyA9IGdldHB3bmFtKG9wdGFyZyk7CisJaWYocHcgIT0gTlVMTCl7CisJICBvd25lciA9IHB3LT5wd191aWQ7CisJICBicmVhazsKKwl9CisgICAgICAgIG93bmVyID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMCk7CisJaWYoKmVuZCAhPSAnXDAnKXsKKwkgIGZwcmludGYoc3RkZXJyLCAiJyVzJyBpcyBuZWl0aGVyIGEgdXNlcm5hbWUgbm9yIGEgbnVtZXJpYyB1aWQuXG4iLAorCQkgIG9wdGFyZyk7CisJICBVc2FnZShuYW1lKTsKKwl9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZyc6CisJZ3IgPSBnZXRncm5hbShvcHRhcmcpOworCWlmKGdyICE9IE5VTEwpeworCSAgZ3JvdXAgPSBnci0+Z3JfZ2lkOworCSAgYnJlYWs7CisJfQorICAgICAgICBncm91cCA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDApOworCWlmKCplbmQgIT0gJ1wwJyl7CisJICBmcHJpbnRmKHN0ZGVyciwgIiclcycgaXMgbmVpdGhlciBhIGdyb3VwbmFtZSBub3IgYSBudW1lcmljIGdyb3VwLlxuIiwKKwkJICBvcHRhcmcpOworCSAgVXNhZ2UobmFtZSk7CisJfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAndCc6CisgICAgICAgIHR1biA9IG9wdGFyZzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdoJzoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVzYWdlKG5hbWUpOworICAgIH0KKyAgfQorCisgIGFyZ3YgKz0gb3B0aW5kOworICBhcmdjIC09IG9wdGluZDsKKworICBpZihhcmdjID4gMCkKKyAgICBVc2FnZShuYW1lKTsKKworICBpZigodGFwX2ZkID0gb3BlbihmaWxlLCBPX1JEV1IpKSA8IDApeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gJyVzJyA6ICIsIGZpbGUpOworICAgIHBlcnJvcigiIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisKKyAgaWZyLmlmcl9mbGFncyA9IElGRl9UQVAgfCBJRkZfTk9fUEk7CisgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCB0dW4sIHNpemVvZihpZnIuaWZyX25hbWUpIC0gMSk7CisgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUSUZGLCAodm9pZCAqKSAmaWZyKSA8IDApeworICAgIHBlcnJvcigiVFVOU0VUSUZGIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmKGRlbGV0ZSl7CisgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRQRVJTSVNULCAwKSA8IDApeworICAgICAgcGVycm9yKCJkaXNhYmxpbmcgVFVOU0VUUEVSU0lTVCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgcHJpbnRmKCJTZXQgJyVzJyBub25wZXJzaXN0ZW50XG4iLCBpZnIuaWZyX25hbWUpOworICB9CisgIGVsc2UgeworICAgIC8qIGVtdWxhdGUgYmVoYXZpb3VyIHByaW9yIHRvIFRVTlNFVEdST1VQICovCisgICAgaWYob3duZXIgPT0gLTEgJiYgZ3JvdXAgPT0gLTEpIHsKKyAgICAgIG93bmVyID0gZ2V0ZXVpZCgpOworICAgIH0KKworICAgIGlmKG93bmVyICE9IC0xKSB7CisgICAgICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVE9XTkVSLCBvd25lcikgPCAwKXsKKyAgICAgIAlwZXJyb3IoIlRVTlNFVE9XTkVSIik7CisgICAgICAJZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYoZ3JvdXAgIT0gLTEpIHsKKyAgICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUR1JPVVAsIGdyb3VwKSA8IDApeworICAgICAgCXBlcnJvcigiVFVOU0VUR1JPVVAiKTsKKyAgICAgIAlleGl0KDEpOworICAgICAgfQorICAgIH0KKworICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUUEVSU0lTVCwgMSkgPCAwKXsKKyAgICAgIHBlcnJvcigiZW5hYmxpbmcgVFVOU0VUUEVSU0lTVCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZihicmllZikKKyAgICAgIHByaW50ZigiJXNcbiIsIGlmci5pZnJfbmFtZSk7CisgICAgZWxzZSB7CisgICAgICBwcmludGYoIlNldCAnJXMnIHBlcnNpc3RlbnQgYW5kIG93bmVkIGJ5IiwgaWZyLmlmcl9uYW1lKTsKKyAgICAgIGlmKG93bmVyICE9IC0xKQorICAgICAgICAgIHByaW50ZigiIHVpZCAlZCIsIG93bmVyKTsKKyAgICAgIGlmKGdyb3VwICE9IC0xKQorICAgICAgICAgIHByaW50ZigiIGdpZCAlZCIsIGdyb3VwKTsKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LXRhcmdldHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LXRhcmdldHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzU2NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtdGFyZ2V0cy5pbmMKQEAgLTAsMCArMSwyMiBAQAorIyBwb3NzaWJsZSBhcmNoIHZhbHVlcyBhcmUgYXJtIGFhcmNoNjQgbWlwcyBtaXBzZWwgbWlwczY0IG1pcHM2NGVsIHBwYyBwcGM2NCBwcGM2NGFiaTMyCisjIHBwY2VtYiBhcm1lYiBhbHBoYSBzcGFyYzMycGx1cyBpMzg2IHg4Nl82NCBjcmlzIG02OGsgbWljcm9ibGF6ZSBzcGFyYyBzcGFyYzMyCisjIHNwYXJjMzJwbHVzCisKK2RlZiBnZXRfcWVtdV90YXJnZXRfbGlzdChkKToKKyAgICBpbXBvcnQgYmIKKyAgICBhcmNocyA9IGQuZ2V0VmFyKCdRRU1VX1RBUkdFVFMnLCBUcnVlKS5zcGxpdCgpCisgICAgdG9zID0gZC5nZXRWYXIoJ0hPU1RfT1MnLCBUcnVlKQorICAgIHNvZnRtbXVvbmx5ID0gIiIKKyAgICBmb3IgYXJjaCBpbiBbJ21pcHM2NCcsICdtaXBzNjRlbCcsICdwcGNlbWInXToKKyAgICAgICAgaWYgYXJjaCBpbiBhcmNoczoKKyAgICAgICAgICAgIHNvZnRtbXVvbmx5ICs9IGFyY2ggKyAiLXNvZnRtbXUsIgorICAgICAgICAgICAgYXJjaHMucmVtb3ZlKGFyY2gpCisgICAgbGludXh1c2Vyb25seSA9ICIiCisgICAgZm9yIGFyY2ggaW4gWydhcm1lYicsICdhbHBoYScsICdwcGM2NGFiaTMyJywgJ3NwYXJjMzJwbHVzJ106CisgICAgICAgIGlmIGFyY2ggaW4gYXJjaHM6CisgICAgICAgICAgICBsaW51eHVzZXJvbmx5ICs9IGFyY2ggKyAiLWxpbnV4LXVzZXIsIgorICAgICAgICAgICAgYXJjaHMucmVtb3ZlKGFyY2gpCisgICAgaWYgJ2xpbnV4JyBub3QgaW4gdG9zOgorICAgICAgICByZXR1cm4gc29mdG1tdW9ubHkgKyAnJy5qb2luKFthcmNoICsgIi1zb2Z0bW11IiArICIsIiBmb3IgYXJjaCBpbiBhcmNoc10pLnJzdHJpcCgnLCcpCisgICAgcmV0dXJuIHNvZnRtbXVvbmx5ICsgbGludXh1c2Vyb25seSArICcnLmpvaW4oW2FyY2ggKyAiLWxpbnV4LXVzZXIiICsgIiwiICsgYXJjaCArICItc29mdG1tdSIgKyAiLCIgZm9yIGFyY2ggaW4gYXJjaHNdKS5yc3RyaXAoJywnKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzhiZjJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYwpAQCAtMCwwICsxLDEzNyBAQAorU1VNTUFSWSA9ICJGYXN0IG9wZW4gc291cmNlIHByb2Nlc3NvciBlbXVsYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly9xZW11Lm9yZyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgemxpYiBwaXhtYW4iCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImJhc2ggcHl0aG9uIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCBtYWtlIgorCityZXF1aXJlIHFlbXUtdGFyZ2V0cy5pbmMKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BSID0gInIxIgorCisjIFFFTVVfVEFSR0VUUyBpcyBvdmVycmlkYWJsZSB2YXJpYWJsZQorUUVNVV9UQVJHRVRTID89ICJhcm0gYWFyY2g2NCBpMzg2IG1pcHMgbWlwc2VsIG1pcHM2NCBtaXBzNjRlbCBwcGMgc2g0IHg4Nl82NCIKKworU1JDX1VSSSA9ICJcCisgICAgZmlsZTovL3Bvd2VycGNfcm9tLmJpbiBcCisgICAgZmlsZTovL2Rpc2FibGUtZ3JhYnMucGF0Y2ggXAorICAgIGZpbGU6Ly9leGNsdWRlLXNvbWUtYXJtLUVBQkktb2Jzb2xldGUtc3lzY2FsbHMucGF0Y2ggXAorICAgIGZpbGU6Ly93YWNvbS5wYXRjaCBcCisgICAgZmlsZTovL2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBcCisgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgZmlsZTovL2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2ggXAorICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIlwKKyAgICBmaWxlOi8vZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggXAorICAgIGZpbGU6Ly9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoIFwKKyAgICAiCisKK0VYVFJBX09FQ09ORiArPSAiLS10YXJnZXQtbGlzdD0ke0BnZXRfcWVtdV90YXJnZXRfbGlzdChkKX0gLS1kaXNhYmxlLXdlcnJvciAgLS1kaXNhYmxlLWJsdWV6IC0tZGlzYWJsZS1saWJpc2NzaSAtLXdpdGgtc3lzdGVtLXBpeG1hbiAtLWV4dHJhLWNmbGFncz0nJHtDRkxBR1N9JyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLWRlYnVnIC0tZW5hYmxlLWRlYnVnLWluZm8iCitJTkhJQklUX1NZU1JPT1RfU1RSSVAgPSAiMSIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXRhcmdldC1saXN0PSR7QGdldF9xZW11X3RhcmdldF9saXN0KGQpfSAtLWRpc2FibGUtd2Vycm9yIFwKKwkJCQkiCitleHBvcnQgTElCVE9PTD0iJHtIT1NUX1NZU30tbGlidG9vbCIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworCSMgQXBwZW5kIGJ1aWxkIGhvc3QgcGtnLWNvbmZpZyBwYXRocyBmb3IgbmF0aXZlIHRhcmdldCBzaW5jZSB0aGUgaG9zdCBtYXkgcHJvdmlkZSBzZGwKKwlCSE9TVF9QS0dDT05GSUdfUEFUSD0kKFBBVEg9L3Vzci9iaW46L2JpbiBwa2ctY29uZmlnIC0tdmFyaWFibGUgcGNfcGF0aCBwa2ctY29uZmlnIHx8IGVjaG8gIiIpCisJaWYgWyAhIC16ICIkQkhPU1RfUEtHQ09ORklHX1BBVEgiIF07IHRoZW4KKwkJZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kUEtHX0NPTkZJR19QQVRIOiRCSE9TVF9QS0dDT05GSUdfUEFUSAorCWZpCit9CisKK0tWTUVOQUJMRSA9ICItLWVuYWJsZS1rdm0iCitLVk1FTkFCTEVfZGFyd2luID0gIi0tZGlzYWJsZS1rdm0iCitLVk1FTkFCTEVfbWluZ3czMiA9ICItLWRpc2FibGUta3ZtIgorCitkb19jb25maWd1cmUoKSB7CisgICAgIyBIYW5kbGUgZGlzdHJvcyBzdWNoIGFzIENlbnRPUyA1IDMyLWJpdCB0aGF0IGRvIG5vdCBoYXZlIGt2bSBzdXBwb3J0CisgICAgS1ZNT1BUUz0iLS1kaXNhYmxlLWt2bSIKKyAgICBpZiBbICIke1BOfSIgIT0gInFlbXUtbmF0aXZlIiAtYSAiJHtQTn0iICE9ICJuYXRpdmVzZGstcWVtdSIgXSBcCisgICAgICAgfHwgWyAtZiAvdXNyL2luY2x1ZGUvbGludXgva3ZtLmggXSA7IHRoZW4KKyAgICAgICBLVk1PUFRTPSIke0tWTUVOQUJMRX0iCisgICAgZmkKKworICAgICR7U30vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSAtLWxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSAtLWxvY2Fsc3RhdGVkaXI9JHtsb2NhbHN0YXRlZGlyfSAtLWRpc2FibGUtc3RyaXAgJHtFWFRSQV9PRUNPTkZ9ICRLVk1PUFRTCisgICAgdGVzdCAhIC1lICR7U30vdGFyZ2V0LWkzODYvYmVnaW5lbmRfZnVuY3Muc2ggfHwgY2htb2QgYSt4ICR7U30vdGFyZ2V0LWkzODYvYmVnaW5lbmRfZnVuY3Muc2gKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwltYWtlIGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1yTCAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9CisJZmluZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyAtdHlwZSBmIC1uYW1lICIqLltTc2hjb2RdIiB8IHhhcmdzIC1pIHJtIC1yZiB7fQorCisJY3AgJHtTfS90ZXN0cy9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworfQorCitkb19pbnN0YWxsICgpIHsKKwlleHBvcnQgU1RSSVA9InRydWUiCisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3FlbXUKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wb3dlcnBjX3JvbS5iaW4gJHtEfSR7ZGF0YWRpcn0vcWVtdQorfQorCisjIFRoZSBmb2xsb3dpbmcgZnJhZ21lbnQgd2lsbCBjcmVhdGUgYSB3cmFwcGVyIGZvciBxZW11LW1pcHMgdXNlciBlbXVsYXRpb24KKyMgYmluYXJ5IGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIGEgc2VnbWVudGF0aW9uIGZhdWx0IGlzc3VlLiBCYXNpY2FsbHksIGJ5CisjIGRlZmF1bHQsIHRoZSByZXNlcnZlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgZm9yIDMyLW9uLTY0IGJpdCBpcyBzZXQgdG8gNEdCLgorIyBUaGlzIHdpbGwgdHJpZ2dlciBhIE1NVSBhY2Nlc3MgZmF1bHQgaW4gdGhlIHZpcnR1YWwgQ1BVLiBXaXRoIHRoaXMgY2hhbmdlLAorIyB0aGUgcWVtdS1taXBzIHdvcmtzIGZpbmUuCisjIElNUE9SVEFOVDogVGhpcyBwaWVjZSBuZWVkcyB0byBiZSByZW1vdmVkIG9uY2UgdGhlIHJvb3QgY2F1c2UgaXMgZml4ZWQhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiBbIC1lICIke0R9LyR7YmluZGlyfS9xZW11LW1pcHMiIF07IHRoZW4KKwkJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcWVtdS1taXBzIFwKKwkJCVFFTVVfUkVTRVJWRURfVkE9MHgwCisJZmkKK30KKyMgRU5EIG9mIHFlbXUtbWlwcyB3b3JrYXJvdW5kCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorCWZkdCBzZGwgXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4ZW4nLCAneGVuJywgJycsIGQpfSBcCisJIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICJmZHQgYWxzYSB1dWlkIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPz89ICJmZHQgc2RsIgorTkFUSVZFREVQUyA9ICIiCitOQVRJVkVERVBTX2NsYXNzLW5hdGl2ZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdsaWJ4ZXh0LW5hdGl2ZScsICcnLGQpfSIKK1BBQ0tBR0VDT05GSUdbc2RsXSA9ICItLWVuYWJsZS1zZGwsLS1kaXNhYmxlLXNkbCxsaWJzZGwgJHtOQVRJVkVERVBTfSwiCitQQUNLQUdFQ09ORklHW3ZpcnRmc10gPSAiLS1lbmFibGUtdmlydGZzIC0tZW5hYmxlLWF0dHIsLS1kaXNhYmxlLXZpcnRmcyxsaWJjYXAgYXR0ciwiCitQQUNLQUdFQ09ORklHW2Fpb10gPSAiLS1lbmFibGUtbGludXgtYWlvLC0tZGlzYWJsZS1saW51eC1haW8sbGliYWlvLCIKK1BBQ0tBR0VDT05GSUdbeGZzXSA9ICItLWVuYWJsZS14ZnNjdGwsLS1kaXNhYmxlLXhmc2N0bCx4ZnNwcm9ncywiCitQQUNLQUdFQ09ORklHW3hlbl0gPSAiLS1lbmFibGUteGVuLC0tZGlzYWJsZS14ZW4seGVuLHhlbi1saWJ4ZW5zdG9yZSB4ZW4tbGlieGVuY3RybCB4ZW4tbGlieGVuZ3Vlc3QiCitQQUNLQUdFQ09ORklHW3ZuYy10bHNdID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtdGxzLC0tZGlzYWJsZS12bmMtdGxzLCBnbnV0bHMsIgorUEFDS0FHRUNPTkZJR1t2bmMtc2FzbF0gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy1zYXNsLC0tZGlzYWJsZS12bmMtc2FzbCxjeXJ1cy1zYXNsLCIKK1BBQ0tBR0VDT05GSUdbdm5jLWpwZWddID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtanBlZywtLWRpc2FibGUtdm5jLWpwZWcsanBlZywiCitQQUNLQUdFQ09ORklHW3ZuYy1wbmddID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtcG5nLC0tZGlzYWJsZS12bmMtcG5nLGxpYnBuZywiCitQQUNLQUdFQ09ORklHW2xpYmN1cmxdID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsbGliY3VybCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS1lbmFibGUtc21hcnRjYXJkLW5zcywtLWRpc2FibGUtc21hcnRjYXJkLW5zcyxuc3MsIgorUEFDS0FHRUNPTkZJR1t1dWlkXSA9ICItLWVuYWJsZS11dWlkLC0tZGlzYWJsZS11dWlkLHV0aWwtbGludXgsIgorUEFDS0FHRUNPTkZJR1tjdXJzZXNdID0gIi0tZW5hYmxlLWN1cnNlcywtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgorUEFDS0FHRUNPTkZJR1tndGsrXSA9ICItLWVuYWJsZS1ndGsgLS1lbmFibGUtdnRlLC0tZGlzYWJsZS1ndGsgLS1kaXNhYmxlLXZ0ZSxndGsrIGxpYnZ0ZSwiCitQQUNLQUdFQ09ORklHW2xpYmNhcC1uZ10gPSAiLS1lbmFibGUtY2FwLW5nLC0tZGlzYWJsZS1jYXAtbmcsbGliY2FwLW5nLCIKK1BBQ0tBR0VDT05GSUdbc3NoMl0gPSAiLS1lbmFibGUtbGlic3NoMiwtLWRpc2FibGUtbGlic3NoMixsaWJzc2gyLCIKK1BBQ0tBR0VDT05GSUdbbGlidXNiXSA9ICItLWVuYWJsZS1saWJ1c2IsLS1kaXNhYmxlLWxpYnVzYixsaWJ1c2IxIgorUEFDS0FHRUNPTkZJR1tmZHRdID0gIi0tZW5hYmxlLWZkdCwtLWRpc2FibGUtZmR0LGR0YyIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLCxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1vcGVuZ2wsLS1kaXNhYmxlLW9wZW5nbCxtZXNhIgorUEFDS0FHRUNPTkZJR1tsem9dID0gIi0tZW5hYmxlLWx6bywtLWRpc2FibGUtbHpvLGx6byIKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS1lbmFibGUtbnVtYSwtLWRpc2FibGUtbnVtYSxudW1hY3RsIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0tZW5hYmxlLWdudXRscywtLWRpc2FibGUtZ251dGxzLGdudXRscyIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhbHNhJywgJy0tYXVkaW8tZHJ2LWxpc3Q9b3NzLGFsc2EnLCAnJywgZCl9IgorCisjIFFlbXUgdGFyZ2V0IHdpbGwgbm90IGJ1aWxkIGluIHdvcmxkIGJ1aWxkIGZvciBBUk0gb3IgTWlwcworQlJPS0VOX3FlbXVhcm0gPSAiMSIKK0JST0tFTl9xZW11bWlwczY0ID0gIjEiCitCUk9LRU5fcWVtdW1pcHMgPSAiMSIKKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiYXJjaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNmNmNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gODk2ZmEwMmMyNDM0N2U2ZTkyNTk4MTJjZmRhMTg3YjFkNmNhNjE5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW5nIEx1IDxsdS5qaWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMyBOb3YgMjAxMyAxMDozODowOCArMDgwMAorU3ViamVjdDogW1BBVENIXSBRZW11OkFybTp2ZXJzYXRpbGVwYjogQWRkIG1lbW9yeSBzaXplIGNoZWNraW5nCisKK1RoZSBtYWNoaW5lIGNhbiBub3Qgd29yayB3aXRoIG1lbW9yeSBvdmVyIDI1Nk0sIHNvIGFkZCBhIGNoZWNraW5nCithdCBzdGFydHVwLiBJZiB0aGUgbWVtb3J5IHNpemUgZXhjZWVkIDI1Nk0sIGp1c3Qgc3RvcCBlbXVsYXRpb24gdGhlbgordGhyb3cgb3V0IHdhcm5pbmcgYWJvdXQgbWVtb3J5IGxpbWl0YXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKaWFuZyBMdSA8bHUuamlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCBpdCBvbiAyMDE0LTAxLTE1IGZvciByZWJhc2luZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlIGl0IHdoZW4gdXBncmFkZSBxZW11IHRvIDIuMi4wCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGh3L2FybS92ZXJzYXRpbGVwYi5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaHcvYXJtL3ZlcnNhdGlsZXBiLmMgYi9ody9hcm0vdmVyc2F0aWxlcGIuYworaW5kZXggNmM2OWY0ZS4uOTI3OGQ5MCAxMDA2NDQKKy0tLSBhL2h3L2FybS92ZXJzYXRpbGVwYi5jCisrKysgYi9ody9hcm0vdmVyc2F0aWxlcGIuYworQEAgLTIwNCw2ICsyMDQsMTMgQEAgc3RhdGljIHZvaWQgdmVyc2F0aWxlX2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lLCBpbnQgYm9hcmRfaWQpCisgICAgICAgICBleGl0KDEpOworICAgICB9CisKKysgICAgaWYgKG1hY2hpbmUtPnJhbV9zaXplID4gKDI1NiA8PCAyMCkpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLAorKyAgICAgICAgICAgICAgICAicWVtdTogVG9vIG11Y2ggbWVtb3J5IGZvciB0aGlzIG1hY2hpbmU6ICVkIE1CLCBtYXhpbXVtIDI1NiBNQlxuIiwKKysgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpcmFtX3NpemUgLyAoMSA8PCAyMCkpKTsKKysgICAgICAgIGV4aXQoMSk7CisrICAgIH0KKysKKyAgICAgY3B1b2JqID0gb2JqZWN0X25ldyhvYmplY3RfY2xhc3NfZ2V0X25hbWUoY3B1X29jKSk7CisKKyAgICAgLyogQnkgZGVmYXVsdCBBUk0xMTc2IENQVXMgaGF2ZSBFTDMgZW5hYmxlZC4gIFRoaXMgYm9hcmQgZG9lcyBub3QKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5ZjcyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBzdWJwYWNrYWdlIC1wdGVzdCB3aGljaCBydW5zIGFsbCB1bml0IHRlc3QgY2FzZXMgZm9yIHFlbXUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvTWFrZWZpbGUgfCAgIDEwICsrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggODhmNzEwNS4uM2Y0MGI0YiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTQwNSwzICs0MDUsMTIgQEAgYWxsOiAkKFFFTVVfSU9URVNUU19IRUxQRVJTLXkpCisgCisgLWluY2x1ZGUgJCh3aWxkY2FyZCB0ZXN0cy8qLmQpCisgLWluY2x1ZGUgJCh3aWxkY2FyZCB0ZXN0cy9saWJxb3MvKi5kKQorKworK2J1aWxkdGVzdC1URVNUUzogJChjaGVjay11bml0LXkpCisrCisrcnVudGVzdC1URVNUUzoKKysJZm9yIGYgaW4gJChjaGVjay11bml0LXkpOyBkbyBcCisrCQluZj0kJChlY2hvICQkZiB8IHNlZCAncy90ZXN0c1wvL1wuXC8vZycpOyBcCisrCQkkJG5mOyBcCisrCWRvbmUKKysKKy0tCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZGMxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKworRnJvbSA5YWMwOTZkOGVjY2YyZDU2ZWNlNjQ2MzIwYzI4MmM4MzY5ZjgzMzdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjkgSnVsIDIwMTQgMTg6MzU6NTkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBmaXggRGFyd2luIHRhcmdldCBkZXRlY3Rpb24KKworZml4IERhcndpbiB0YXJnZXQgZGV0ZWN0aW9uIGZvciBxZW11Citjcm9zcy1jb21waWxhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDI4M2M3MWMuLjFjNjZhMTEgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ0NCw2ICs0NDQsOCBAQCBlbGlmIGNoZWNrX2RlZmluZSBfX3N1bl9fIDsgdGhlbgorICAgdGFyZ2V0b3M9J1N1bk9TJworIGVsaWYgY2hlY2tfZGVmaW5lIF9fSEFJS1VfXyA7IHRoZW4KKyAgIHRhcmdldG9zPSdIYWlrdScKKytlbGlmIGNoZWNrX2RlZmluZSBfX0FQUExFX18gOyB0aGVuCisrICB0YXJnZXRvcz0nRGFyd2luJworIGVsc2UKKyAgIHRhcmdldG9zPWB1bmFtZSAtc2AKKyBmaQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjIxMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaApAQCAtMCwwICsxLDc2IEBACitGcm9tIDY5N2E4MzRjMzVkMTk0NDdiN2RjZGI5ZTFkOTQzNGJjNmNlMTdjMjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDE1IDE1OjExOjMwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNwdXMuYzogQWRkIGVycm9yIG1lc3NhZ2VzIHdoZW4gcWVtaV9jcHVfa2lja190aHJlYWQgZmFpbHMuCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0FkZCBjdXN0b21fZGVidWcuaCB3aXRoIGZ1bmN0aW9uIGZvciBwcmludCBiYWNrdHJhY2UgaW5mb3JtYXRpb24uCitXaGVuIHB0aHJlYWRfa2lsbCBmYWlscyBpbiBxZW11X2NwdV9raWNrX3RocmVhZCBkaXNwbGF5IGJhY2t0cmFjZSBhbmQKK2N1cnJlbnQgY3B1IGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorLS0tCisgY3B1cy5jICAgICAgICAgfCAgNSArKysrKworIGN1c3RvbV9kZWJ1Zy5oIHwgMjQgKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGN1c3RvbV9kZWJ1Zy5oCisKK2RpZmYgLS1naXQgYS9jcHVzLmMgYi9jcHVzLmMKK2luZGV4IGE4MjJjZTMuLjdlNDc4NmUgMTAwNjQ0CistLS0gYS9jcHVzLmMKKysrKyBiL2NwdXMuYworQEAgLTEwODAsNiArMTA4MCw4IEBAIHN0YXRpYyB2b2lkICpxZW11X3RjZ19jcHVfdGhyZWFkX2ZuKHZvaWQgKmFyZykKKyAgICAgcmV0dXJuIE5VTEw7CisgfQorIAorKyNpbmNsdWRlICJjdXN0b21fZGVidWcuaCIKKysKKyBzdGF0aWMgdm9pZCBxZW11X2NwdV9raWNrX3RocmVhZChDUFVTdGF0ZSAqY3B1KQorIHsKKyAjaWZuZGVmIF9XSU4zMgorQEAgLTEwODgsNiArMTA5MCw5IEBAIHN0YXRpYyB2b2lkIHFlbXVfY3B1X2tpY2tfdGhyZWFkKENQVVN0YXRlICpjcHUpCisgICAgIGVyciA9IHB0aHJlYWRfa2lsbChjcHUtPnRocmVhZC0+dGhyZWFkLCBTSUdfSVBJKTsKKyAgICAgaWYgKGVycikgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiVzOiAlcyIsIF9fZnVuY19fLCBzdHJlcnJvcihlcnIpKTsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ1BVICMlZDpcbiIsIGNwdS0+Y3B1X2luZGV4KTsKKysgICAgICAgIGNwdV9kdW1wX3N0YXRlKGNwdSwgc3RkZXJyLCBmcHJpbnRmLCAwKTsKKysgICAgICAgIGJhY2t0cmFjZV9wcmludCgpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgfQorICNlbHNlIC8qIF9XSU4zMiAqLworZGlmZiAtLWdpdCBhL2N1c3RvbV9kZWJ1Zy5oIGIvY3VzdG9tX2RlYnVnLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMDI5ZTQ1CistLS0gL2Rldi9udWxsCisrKysgYi9jdXN0b21fZGVidWcuaAorQEAgLTAsMCArMSwyNCBAQAorKyNpbmNsdWRlIDxleGVjaW5mby5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNkZWZpbmUgQkFDS1RSQUNFX01BWCAxMjgKKytzdGF0aWMgdm9pZCBiYWNrdHJhY2VfcHJpbnQodm9pZCkKKyt7CisrCWludCBuZnVuY3MgPSAwOworKwl2b2lkICpidWZbQkFDS1RSQUNFX01BWF07CisrCWNoYXIgKipzeW1ib2xzOworKwlpbnQgaTsKKysKKysJbmZ1bmNzID0gYmFja3RyYWNlKGJ1ZiwgQkFDS1RSQUNFX01BWCk7CisrCisrCXN5bWJvbHMgPSBiYWNrdHJhY2Vfc3ltYm9scyhidWYsIG5mdW5jcyk7CisrCWlmIChzeW1ib2xzID09IE5VTEwpIHsKKysJCWZwcmludGYoc3RkZXJyLCAiYmFja3RyYWNlX3ByaW50IGZhaWxlZCB0byBnZXQgc3ltYm9scyIpOworKwkJcmV0dXJuOworKwl9CisrCisrCWZwcmludGYoc3RkZXJyLCAiQmFja3RyYWNlIC4uLlxuIik7CisrCWZvciAoaSA9IDA7IGkgPCBuZnVuY3M7IGkrKykKKysJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN5bWJvbHNbaV0pOworKworKwlmcmVlKHN5bWJvbHMpOworK30KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZC1maXgtcmFjZS1jb25kaXRpb24tYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRmZmFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworRnJvbSBmMzU0YjkzMzM0MDhkNDExODU0YWYwNThjYzQ0Y2NlZGE2MGI0NDczIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAzIFNlcCAyMDE1IDE0OjA3OjM0IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNwdXMuYzogcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkIGZpeCByYWNlIGNvbmRpdGlvbiBhdCBjcHUKKyB0aHJlYWQgaW5pdAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitXaGVuIFFFTVUgc3RhcnRzIHRoZSBSQ1UgdGhyZWFkIGV4ZWN1dGVzIHFlbXVfbXV0ZXhfbG9ja190aHJlYWQKK2NhdXNpbmcgZXJyb3IgInFlbXU6cWVtdV9jcHVfa2lja190aHJlYWQ6IE5vIHN1Y2ggcHJvY2VzcyIgYW5kIGV4aXRzLgorCitUaGlzIGlzbid0IG9jY3VyIGZyZXF1ZW50bHkgYnV0IGluIGdsaWJjIHRoZSB0aHJlYWQgaWQgY2FuIGV4aXN0IGFuZAordGhpcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIHRocmVhZCBpcyBvbiBhY3RpdmUvcnVubmluZyBzdGF0ZS4gSWYgaXMKK2luc2VydGVkIGEgc2xlZXAoMSkgYWZ0ZXIgbmV3dGhyZWFkIGFzc2lnbm1lbnQgWzFdIHRoZSBpc3N1ZSBhcHBlYXJzLgorCitTbyBub3QgbWFrZSBhc3N1bXB0aW9uIHRoYXQgdGhyZWFkIGV4aXN0IGlmIGZpcnN0X2NwdS0+dGhyZWFkIGlzIHNldAordGhlbiBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gb2YgY3B1IHRvIGNyZWF0ZWQgdGhhdCBpcyBzZXQgaW50byBjcHUKK3RocmVhZHMgKGt2bSwgdGNnLCBkdW1teSkuCisKK1sxXSBodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC8/cD1nbGliYy5naXQ7YT1ibG9iO2Y9bnB0bC9wdGhyZWFkX2NyZWF0ZS5jO2g9ZDEwZjRlYTgwMDRlMWQ4ZjNhMjY4Yjk1Y2MwZjhkOTNiOGQ4OTg2NztoYj1IRUFEI2w2MjEKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjcHVzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcHVzLmMgYi9jcHVzLmMKK2luZGV4IDdlNDc4NmUuLjA1ZTU0MDAgMTAwNjQ0CistLS0gYS9jcHVzLmMKKysrKyBiL2NwdXMuYworQEAgLTExNzEsNyArMTE3MSw3IEBAIHZvaWQgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKHZvaWQpCisgICAgICAqIFRDRyBjb2RlIGV4ZWN1dGlvbi4KKyAgICAgICovCisgICAgIGlmICghdGNnX2VuYWJsZWQoKSB8fCBxZW11X2luX3ZjcHVfdGhyZWFkKCkgfHwKKy0gICAgICAgICFmaXJzdF9jcHUgfHwgIWZpcnN0X2NwdS0+dGhyZWFkKSB7CisrICAgICAgICAhZmlyc3RfY3B1IHx8ICFmaXJzdF9jcHUtPmNyZWF0ZWQpIHsKKyAgICAgICAgIHFlbXVfbXV0ZXhfbG9jaygmcWVtdV9nbG9iYWxfbXV0ZXgpOworICAgICAgICAgYXRvbWljX2RlYygmaW90aHJlYWRfcmVxdWVzdGluZ19tdXRleCk7CisgICAgIH0gZWxzZSB7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2Rpc2FibGUtZ3JhYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3MjZiMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK1doZW4gdGhlIHBvaW50ZXIgZW50ZXJzIHRoZSBRZW11IHdpbmRvdyBpdCBjYWxscyBTRExfV01fR3JhYklucHV0LCB3aGljaCBjYWxscworWEdyYWJQb2ludGVyIGluIGEgYnVzeWxvb3AgdW50aWwgaXQgcmV0dXJucyBHcmFiU3VjY2Vzcy4gSG93ZXZlciBpZiB0aGVyZSdzIGFscmVhZHkKK2EgcG9pbnRlciBncmFiIChzY3JlZW4gaXMgbG9ja2VkLCBhIG1lbnUgaXMgb3BlbikgdGhlbiBxZW11IHdpbGwgaGFuZyB1bnRpbCB0aGUKK2dyYWIgY2FuIGJlIHRha2VuLiAgSW4gdGhlIHNwZWNpZmljIGNhc2Ugb2YgYSBoZWFkbGVzcyBYIHNlcnZlciBvbiBhbiBhdXRvYnVpbGRlciwgb25jZQordGhlIHNjcmVlbnNhdmVyIGhhcyBraWNrZWQgaW4gYW55IHFlbXUgaW5zdGFuY2UgdGhhdCBhcHBlYXJzIHVuZGVybmVhdGggdGhlCitwb2ludGVyIHdpbGwgaGFuZy4KKworSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoeSBwb2ludGVyIGdyYWJzIGFyZSByZXF1aXJlZCAodGhlIGRvY3VtZW50YXRpb24KK2V4cGxpY2l0bHkgc2F5cyBpdCBkb2Vzbid0IGRvIGdyYWJzIHdoZW4gdXNpbmcgYSB0YWJsZXQsIHdoaWNoIHdlIGFyZSkgc28gd3JhcAordGhlbSBpbiBhIGNvbmRpdGlvbmFsIHRoYXQgY2FuIGJlIHNldCBieSB0aGUgYXV0b2J1aWxkZXIgZW52aXJvbm1lbnQsIHByZXNlcnZpbmcKK3RoZSBjdXJyZW50IGdyYWJiaW5nIGJlaGF2aW91ciBmb3IgZXZlcnlvbmUgZWxzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDRiMTk4OGVjYjAxYTE3ODI2OWVjMDUxM2E3NWYyZWM2MjBjN2VmNmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxOCBTZXAgMjAxMyAxNDowNDo1NCArMDEwMAorU3ViamVjdDogW1BBVENIXSBzZGwuYzogYWxsb3cgdXNlciB0byBkaXNhYmxlIHBvaW50ZXIgZ3JhYnMKKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVyaWMgQsOpbmFyZCA8ZXJpY0BldWtyZWEuY29tPgorLS0tCisgdWkvc2RsLmMgfCAxMiArKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VpL3NkbC5jIGIvdWkvc2RsLmMKK2luZGV4IDM5YTQyZDYuLjliOGFiZTUgMTAwNjQ0CistLS0gYS91aS9zZGwuYworKysrIGIvdWkvc2RsLmMKK0BAIC01OSw2ICs1OSwxMCBAQCBzdGF0aWMgU0RMX0N1cnNvciAqZ3Vlc3Rfc3ByaXRlID0gTlVMTDsKKyBzdGF0aWMgU0RMX1BpeGVsRm9ybWF0IGhvc3RfZm9ybWF0OworIHN0YXRpYyBpbnQgc2NhbGluZ19hY3RpdmUgPSAwOworIHN0YXRpYyBOb3RpZmllciBtb3VzZV9tb2RlX25vdGlmaWVyOworKyNpZm5kZWYgVHJ1ZQorKyNkZWZpbmUgVHJ1ZSAxCisrI2VuZGlmCisrc3RhdGljIGRvaW5nX2dyYWJzID0gVHJ1ZTsKKyAKKyBzdGF0aWMgdm9pZCBzZGxfdXBkYXRlKERpc3BsYXlDaGFuZ2VMaXN0ZW5lciAqZGNsLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCitAQCAtMzg0LDE0ICszODgsMTYgQEAgc3RhdGljIHZvaWQgc2RsX2dyYWJfc3RhcnQodm9pZCkKKyAgICAgICAgICAgICBTRExfV2FycE1vdXNlKGd1ZXN0X3gsIGd1ZXN0X3kpOworICAgICB9IGVsc2UKKyAgICAgICAgIHNkbF9oaWRlX2N1cnNvcigpOworLSAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09OKTsKKysgICAgaWYgKGRvaW5nX2dyYWJzKQorKyAgICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT04pOworICAgICBndWlfZ3JhYiA9IDE7CisgICAgIHNkbF91cGRhdGVfY2FwdGlvbigpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzZGxfZ3JhYl9lbmQodm9pZCkKKyB7CistICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT0ZGKTsKKysgICAgaWYgKGRvaW5nX2dyYWJzKQorKyAgICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT0ZGKTsKKyAgICAgZ3VpX2dyYWIgPSAwOworICAgICBzZGxfc2hvd19jdXJzb3IoKTsKKyAgICAgc2RsX3VwZGF0ZV9jYXB0aW9uKCk7CitAQCAtOTA5LDYgKzkxNSw4IEBAIHZvaWQgc2RsX2Rpc3BsYXlfaW5pdChEaXNwbGF5U3RhdGUgKmRzLCBpbnQgZnVsbF9zY3JlZW4sIGludCBub19mcmFtZSkKKyAgICAgICogVGhpcyByZXF1aXJlcyBTREwgPj0gMS4yLjE0LiAqLworICAgICBzZXRlbnYoIlNETF9ESVNBQkxFX0xPQ0tfS0VZUyIsICIxIiwgMSk7CisgCisrICAgIGRvaW5nX2dyYWJzID0gKGdldGVudigiUUVNVV9ET05UX0dSQUIiKSA9PSBOVUxMKTsKKysKKyAgICAgZmxhZ3MgPSBTRExfSU5JVF9WSURFTyB8IFNETF9JTklUX05PUEFSQUNIVVRFOworICAgICBpZiAoU0RMX0luaXQgKGZsYWdzKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBTREwoJXMpIC0gZXhpdGluZ1xuIiwKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFiZGE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDkzIEBACitbUEFUQ0hdIGV4Y2x1ZGUgc29tZSBhcm0gRUFCSSBvYnNvbGV0ZSBzeXNjYWxscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworc29tZSBzeXNjYWxscyBhcmUgb2Jzb2xldGUgYW5kIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIEVBQkksIGV4Y2x1ZGUgdGhlbSB0bworZml4IHRoZSBiZWxvdyBlcnJvcjoKKwlJbiBmaWxlIGluY2x1ZGVkIGZyb20gcWVtdS1zZWNjb21wLmM6MTY6MDoKKwlxZW11LXNlY2NvbXAuYzoyODo3OiBlcnJvcjogJ19fTlJfc2VsZWN0JyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVMoc2VsZWN0KSwgMjUyIH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6MzY6NzogZXJyb3I6ICdfX05SX21tYXAnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhtbWFwKSwgMjQ3IH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6NTc6NzogZXJyb3I6ICdfX05SX2dldHJsaW1pdCcgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKGdldHJsaW1pdCksIDI0NSB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjk2Ojc6IGVycm9yOiAnX19OUl90aW1lJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVModGltZSksIDI0NSB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjE4NTo3OiBlcnJvcjogJ19fTlJfYWxhcm0nIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorCitwbGVhc2UgcmVmZXIgc291cmNlIGZpbGVzOgorCWFyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKK29yIGtlcm5lbCBoZWFkZXI6CisJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBxZW11LXNlY2NvbXAuYyB8IDE0ICsrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3FlbXUtc2VjY29tcC5jIGIvcWVtdS1zZWNjb21wLmMKK2luZGV4IGNhYTkyNmUuLjVhNzg1MDIgMTAwNjQ0CistLS0gYS9xZW11LXNlY2NvbXAuYworKysrIGIvcWVtdS1zZWNjb21wLmMKK0BAIC0yNSwxNSArMjUsMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyh0aW1lcl9zZXR0aW1lKSwgMjU1IH0sCisgICAgIHsgU0NNUF9TWVModGltZXJfZ2V0dGltZSksIDI1NCB9LAorICAgICB7IFNDTVBfU1lTKGZ1dGV4KSwgMjUzIH0sCisrI2lmICFkZWZpbmVkKF9fQVJNX0VBQklfXykKKyAgICAgeyBTQ01QX1NZUyhzZWxlY3QpLCAyNTIgfSwKKysgICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisrICAgIHsgU0NNUF9TWVMoYWxhcm0pLCAyNDEgfSwKKysgICAgeyBTQ01QX1NZUyhnZXRybGltaXQpLCAyNDUgfSwKKysgICAgeyBTQ01QX1NZUyhtbWFwKSwgMjQ3IH0sCisrICAgIHsgU0NNUF9TWVMoc29ja2V0Y2FsbCksIDI1MCB9LAorKyAgICB7IFNDTVBfU1lTKGlwYyksIDI0NSB9LAorKyNlbmRpZgorICAgICB7IFNDTVBfU1lTKHJlY3Zmcm9tKSwgMjUxIH0sCisgICAgIHsgU0NNUF9TWVMoc2VuZHRvKSwgMjUwIH0sCistICAgIHsgU0NNUF9TWVMoc29ja2V0Y2FsbCksIDI1MCB9LAorICAgICB7IFNDTVBfU1lTKHJlYWQpLCAyNDkgfSwKKyAgICAgeyBTQ01QX1NZUyhpb19zdWJtaXQpLCAyNDkgfSwKKyAgICAgeyBTQ01QX1NZUyhicmspLCAyNDggfSwKKyAgICAgeyBTQ01QX1NZUyhjbG9uZSksIDI0NyB9LAorLSAgICB7IFNDTVBfU1lTKG1tYXApLCAyNDcgfSwKKyAgICAgeyBTQ01QX1NZUyhtcHJvdGVjdCksIDI0NiB9LAorICAgICB7IFNDTVBfU1lTKGV4ZWN2ZSksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKG9wZW4pLCAyNDUgfSwKK0BAIC00OCwxMyArNTQsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyhiaW5kKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMobGlzdGVuKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2VtZ2V0KSwgMjQ1IH0sCistICAgIHsgU0NNUF9TWVMoaXBjKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoZ2V0dGltZW9mZGF5KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocmVhZGxpbmspLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhhY2Nlc3MpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhwcmN0bCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHNpZ25hbGZkKSwgMjQ1IH0sCistICAgIHsgU0NNUF9TWVMoZ2V0cmxpbWl0KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2V0X3RpZF9hZGRyZXNzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc3RhdGZzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVModW5saW5rKSwgMjQ1IH0sCitAQCAtOTMsNyArOTcsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKHRpbWVzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoZXhpdCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGNsb2NrX2dldHRpbWUpLCAyNDUgfSwKKy0gICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocmVzdGFydF9zeXNjYWxsKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocHdyaXRlNjQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhuYW5vc2xlZXApLCAyNDUgfSwKK0BAIC0xODIsNyArMTg1LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyhsc3RhdDY0KSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVMoc2VuZGZpbGU2NCksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHVnZXRybGltaXQpLCAyNDEgfSwKKy0gICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHJ0X3NpZ3N1c3BlbmQpLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhydF9zaWdxdWV1ZWluZm8pLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhydF90Z3NpZ3F1ZXVlaW5mbyksIDI0MSB9LAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhNmVhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaApAQCAtMCwwICsxLDg0IEBACitmaXggbGliY2FwIGhlYWRlciBpc3N1ZSBvbiBzb21lIGRpc3RybworCisxLCBXaGVuIGJ1aWxkIHFlbXUtbmF0aXZlIG9uIFNMRUQgMTEuMiwgdGhlcmUgaXMgYW4gZXJyb3I6CisuLi4KK3wgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaDoyOCwKK3wgIGZyb20gL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjMzOSwKK3wgIGZyb20gL2J1aWxkYXJlYTIvdG1wL3dvcmsvaTY4Ni1saW51eC9xZW11LW5hdGl2ZS8xLjQuMC1yMC8KK3FlbXUtMS40LjAvaW5jbHVkZS9xZW11LWNvbW1vbi5oOjQyLAorfCAgZnJvbSBmc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmM6MjM6Cit8ICAvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaDoyODogZXJyb3I6IGV4cGVjdGVkIHNwZWNpZmllci0KK3F1YWxpZmllci1saXN0IGJlZm9yZSAnX191NjQnCit8ICAvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaDoxOTE6IGVycm9yOiBleHBlY3RlZCBzcGVjaWZpZXItCitxdWFsaWZpZXItbGlzdCBiZWZvcmUgJ19fdTY0JworLi4uCisKKzIsIFRoZSB2aXJ0ZnMtcHJveHktaGVscGVyLmMgaW5jbHVkZXMgPHN5cy9jYXBhYmlsaXR5Lmg+IGFuZAorcWVtdS1jb21tb24uaCBpbiBzZXF1ZW5jZS4gVGhlIGhlYWRlciBpbmNsdWRlIG1hcCBpczoKKyhgLS0+JyBwcmVzZW50cyBgaW5jbHVkZScpCisuLi4KKyJ2aXJ0ZnMtcHJveHktaGVscGVyLmMiIC0tPiA8c3lzL2NhcGFiaWxpdHkuaD4KKy4uLgorInZpcnRmcy1wcm94eS1oZWxwZXIuYyIgLS0+ICJxZW11LWNvbW1vbi5oIiAtLT4gPHNpZ25hbC5oPiAtLT4KKzxiaXRzL3NpZ2NvbnRleHQuaD4gLS0+IDxhc20vc2lnY29udGV4dC5oPiAtLT4gPGxpbnV4L3R5cGVzLmg+IC0tPgorPGFzbS90eXBlcy5oPiAtLT4gPGFzbS1nZW5lcmljL3R5cGVzLmg+IC0tPiA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKy4uLgorCiszLCBUaGUgYnVnIGlzIGZvdW5kIG9uIFNMRUQgMTEuMiB4ODYuIEluIGxpYmNhcCBoZWFkZXIgZmlsZQorL3Vzci9pbmNsdWRlL3N5cy9jYXBhYmlsaXR5LmgsIGl0IGRvZXMgZXZpbCBzdHVmZiBsaWtlIHRoaXM6CisuLi4KKyAgMjUgLyoKKyAgMjYgICogTWFrZSBzdXJlIHdlIGNhbiBiZSBpbmNsdWRlZCBmcm9tIHVzZXJsYW5kIGJ5IHByZXZlbnRpbmcKKyAgMjcgICogY2FwYWJpbGl0eS5oIGZyb20gaW5jbHVkaW5nIG90aGVyIGtlcm5lbCBoZWFkZXJzCisgIDI4ICAqLworICAyOSAjZGVmaW5lIF9MSU5VWF9UWVBFU19ICisgIDMwICNkZWZpbmUgX0xJTlVYX0ZTX0gKKyAgMzEgI2RlZmluZSBfX0xJTlVYX0NPTVBJTEVSX0gKKyAgMzIgI2RlZmluZSBfX3VzZXIKKyAgMzMKKyAgMzQgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisgIDM1IHR5cGVkZWYgX191MzIgX19sZTMyOworLi4uCitUaGlzIGNvbXBsZXRlbHkgcHJldmVudHMgaW5jbHVkaW5nIC91c3IvaW5jbHVkZS9saW51eC90eXBlcy5oLgorVGhlIGFib3ZlIGA8YXNtL3NpZ2NvbnRleHQuaD4gLS0+IDxsaW51eC90eXBlcy5oPicgaXMgcHJldmVudGVkLAorYW5kICdfX3U2NCcgaXMgZGVmaW5lZCBpbiA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4uCisKKzQsIE1vZGlmeSB2aXJ0ZnMtcHJveHktaGVscGVyLmMgdG8gaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KK2xhc3QgdG8gd29ya2Fyb3VuZCB0aGUgaXNzdWUuCisKK2h0dHA6Ly93d3cubGludXh0di5vcmcvcGlwZXJtYWlsL3Zkci8yMDA5LUF1Z3VzdC8wMjExOTQuaHRtbAoraHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wYXRjaC8xMjc0OC8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBmc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMgfCAgICA3ICsrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jIGIvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jCistLS0gYS9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMKKysrKyBiL2ZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYworQEAgLTEyLDcgKzEyLDYgQEAKKyAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKy0jaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyAjaW5jbHVkZSA8c3lzL2ZzdWlkLmg+CisgI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CitAQCAtMjYsNyArMjUsMTEgQEAKKyAjaW5jbHVkZSAidmlydGlvLTlwLW1hcnNoYWwuaCIKKyAjaW5jbHVkZSAiaHcvOXBmcy92aXJ0aW8tOXAtcHJveHkuaCIKKyAjaW5jbHVkZSAiZnNkZXYvdmlydGlvLTlwLW1hcnNoYWwuaCIKKy0KKysvKgorKyAqIEluY2x1ZGUgdGhpcyBvbmUgbGFzdCBkdWUgdG8gc29tZSB2ZXJzaW9ucyBvZiBpdCBiZWluZyBidWdneToKKysgKiBodHRwOi8vd3d3LmxpbnV4dHYub3JnL3BpcGVybWFpbC92ZHIvMjAwOS1BdWd1c3QvMDIxMTk0Lmh0bWwKKysgKi8KKysjaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyAjZGVmaW5lIFBST0dOQU1FICJ2aXJ0ZnMtcHJveHktaGVscGVyIgorIAorICNpZm5kZWYgWEZTX1NVUEVSX01BR0lDCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wb3dlcnBjX3JvbS5iaW4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcG93ZXJwY19yb20uYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDQ0MjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcG93ZXJwY19yb20uYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDI1YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK3FlbXU6IEFkZCBhZGRpdGlvbiBlbnZpcm9ubWVudCBzcGFjZSB0byBib290IGxvYWRlciBxZW11LXN5c3RlbS1taXBzIAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgLSBPRSB1c2VzIGRlZXAgcGF0aHMKKworSWYgeW91IGNyZWF0ZSBhIHByb2plY3Qgd2l0aCB2ZXJ5IGxvbmcgZGlyZWN0b3J5IG5hbWVzIGxpa2UgMTI4IGNoYXJhY3RlcnMKK2RlZXAgYW5kIHVzZSBORlMsIHRoZSBrZXJuZWwgYXJndW1lbnRzIHdpbGwgYmUgdHJ1bmNhdGVkLiBUaGUga2VybmVsIHdpbGwKK2FjY2VwdCBsb25nZXIgc3RyaW5ncyBzdWNoIGFzIDEwMjQgYnl0ZXMsIGJ1dCB0aGUgcWVtdSBib290IGxvYWRlciBkZWZhdWx0ZWQKK3RvIG9ubHkgMjU2IGJ5dGVzLiBUaGlzIHBhdGNoIGV4cGFuZHMgdGhlIGxpbWl0LgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgaHcvbWlwcy9taXBzX21hbHRhLmMgICAgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ody9taXBzL21pcHNfbWFsdGEuYyBiL2h3L21pcHMvbWlwc19tYWx0YS5jCitpbmRleCA5ZDUyMWNjLi4xN2MwMzkxIDEwMDY0NAorLS0tIGEvaHcvbWlwcy9taXBzX21hbHRhLmMKKysrKyBiL2h3L21pcHMvbWlwc19tYWx0YS5jCitAQCAtNTMsNyArNTMsNyBAQAorIAorICNkZWZpbmUgRU5WUF9BRERSCQkweDgwMDAyMDAwbAorICNkZWZpbmUgRU5WUF9OQl9FTlRSSUVTCSAJMTYKKy0jZGVmaW5lIEVOVlBfRU5UUllfU0laRQkgCTI1NgorKyNkZWZpbmUgRU5WUF9FTlRSWV9TSVpFCSAJMTAyNAorIAorIC8qIEhhcmR3YXJlIGFkZHJlc3NlcyAqLworICNkZWZpbmUgRkxBU0hfQUREUkVTUyAweDFlMDAwMDAwVUxMCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjhlOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisjCisjVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gcWVtdSB0ZXN0IHN1aXRlcworcHRlc3RkaXI9JChwd2QpCitjZCB0ZXN0cworCitleHBvcnQgU1JDX1BBVEg9JHB0ZXN0ZGlyCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMgfCBzZWQgJy86IE9LLyBzL14vUEFTUzogL2cnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzN2U3NzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaApAQCAtMCwwICsxLDc0IEBACitUaGUgc21jOTFjMTExLmMgZHJpdmVyIGFwcGVhcnMgdG8gaGF2ZSBzZXZlcmFsIGlzc3Vlcy4gVGhlIGNhbl9yZWNlaXZlKCkKK2Z1bmN0aW9uIGNhbiByZXR1cm4gdGhhdCB0aGUgZHJpdmVyIGlzIHJlYWR5IHdoZW4gcnhfZmlmbyBoYXMgbm90IGJlZW4gCitmcmVlZCB5ZXQuIFRoZXJlIGlzIGFsc28gbm8gc2FuaXR5IGNoZWNrIG9mIHJ4X2ZpZm8oKSBpbiBfcmVjZWl2ZSgpIHdoaWNoCitjYW4gbGVhZCB0byBjb3JydXB0aW9uIG9mIHRoZSByeF9maWZvIGFycmF5LgorCityZWxlYXNlX3BhY2tldCgpIGNhbiBhbHNvIGNhbGwgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cygpIGJlZm9yZSByeF9maWZvIAoraGFzIGJlZW4gY2xlYW5lZCB1cCwgcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHBhY2tldHMgYXJlIHN1Ym1pdHRlZAorZm9yIHdoaWNoIHRoZXJlIGlzIG5vdCB5ZXQgYW55IHNwYWNlLgorCitUaGlzIHBhdGNoIHRoZXJlZm9yZToKKworKiBmaXhlcyB0aGUgbG9naWMgaW4gY2FuX3JlY2VpdmUoKQorKiBhZGRzIGxvZ2ljIHRvIHJlY2VpdmUoKSBhcyBhIHNhbml0eSBjaGVjaworKiBtb3ZlcyB0aGUgZmx1c2goKSBjYWxscyB0byB0aGUgY29ycmVjdCBwbGFjZXMgd2hlcmUgZGF0YSBpcyByZWFkeQorICB0byBiZSByZWNlaXZlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Rpc2N1c3Npb24gaW4gcHJvZ3Jlc3Mgb24gbWFpbGluZyBsaXN0XQorUlAgMjAxNS85LzcKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMTg1LDcgKzE4NSw2IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzbWMKKyAgICAgcy0+YWxsb2NhdGVkICY9IH4oMSA8PCBwYWNrZXQpOworICAgICBpZiAocy0+dHhfYWxsb2MgPT0gMHg4MCkKKyAgICAgICAgIHNtYzkxYzExMV90eF9hbGxvYyhzKTsKKy0gICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKyB9CisgCisgLyogRmx1c2ggdGhlIFRYIEZJRk8uICAqLworQEAgLTIzNyw5ICsyMzYsMTEgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX2RvX3R4KHNtYzkxYzExMV9zdAorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAjZW5kaWYKKy0gICAgICAgIGlmIChzLT5jdHIgJiBDVFJfQVVUT19SRUxFQVNFKQorKyAgICAgICAgaWYgKHMtPmN0ciAmIENUUl9BVVRPX1JFTEVBU0UpIHsKKyAgICAgICAgICAgICAvKiBSYWNlPyAgKi8KKyAgICAgICAgICAgICBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQocywgcGFja2V0bnVtKTsKKysgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworKyAgICAgICAgfQorICAgICAgICAgZWxzZSBpZiAocy0+dHhfZmlmb19kb25lX2xlbiA8IE5VTV9QQUNLRVRTKQorICAgICAgICAgICAgIHMtPnR4X2ZpZm9fZG9uZVtzLT50eF9maWZvX2RvbmVfbGVuKytdID0gcGFja2V0bnVtOworICAgICAgICAgcWVtdV9zZW5kX3BhY2tldChxZW11X2dldF9xdWV1ZShzLT5uaWMpLCBwLCBsZW4pOworQEAgLTM3OSw5ICszODAsMTEgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3dyaXRlYih2b2lkICpvcGFxdQorICAgICAgICAgICAgICAgICAgICAgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHMsIHMtPnJ4X2ZpZm9bMF0pOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9wb3BfcnhfZmlmbyhzKTsKKysgICAgICAgICAgICAgICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSA1OiAvKiBSZWxlYXNlLiAgKi8KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHMsIHMtPnBhY2tldF9udW0pOworKyAgICAgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIDY6IC8qIEFkZCB0byBUWCBGSUZPLiAgKi8KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3F1ZXVlX3R4KHMsIHMtPnBhY2tldF9udW0pOworQEAgLTY0Miw3ICs2NDIsNyBAQCBzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShOZXRDbGllCisgCisgICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpCisgICAgICAgICByZXR1cm4gMTsKKy0gICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKQorKyAgICBpZiAoKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKSB8fCAocy0+cnhfZmlmb19sZW4gPT0gTlVNX1BBQ0tFVFMpKQorICAgICAgICAgcmV0dXJuIDA7CisgICAgIHJldHVybiAxOworIH0KK0BAIC02NzEsNiArNjcxLDggQEAgc3RhdGljIHNzaXplX3Qgc21jOTFjMTExX3JlY2VpdmUoTmV0Q2xpZQorICAgICAvKiBUT0RPOiBGbGFnIG92ZXJydW4gYW5kIHJlY2VpdmUgZXJyb3JzLiAgKi8KKyAgICAgaWYgKHBhY2tldHNpemUgPiAyMDQ4KQorICAgICAgICAgcmV0dXJuIC0xOworKyAgICBpZiAgKHMtPnJ4X2ZpZm9fbGVuID09IE5VTV9QQUNLRVRTKQorKyAgICAgICAgcmV0dXJuIC0xOyAgICAKKyAgICAgcGFja2V0bnVtID0gc21jOTFjMTExX2FsbG9jYXRlX3BhY2tldChzKTsKKyAgICAgaWYgKHBhY2tldG51bSA9PSAweDgwKQorICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTIyM2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDEucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlcGV0ZXJAZ21haWwuY29tPgorU3ViamVjdDogW1JGVCBQQVRDSCB2MSAxLzNdIG5ldDogc21jOTFjMTExOiBndWFyZCBmbHVzaF9xdWV1ZWRfcGFja2V0cygpIG9uCisgY2FuX3J4KCkKK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMjE6MjM6NDMgLTA3MDAKKworQ2hlY2sgdGhhdCB0aGUgY29yZSBjYW4gb25jZSBhZ2FpbiByZWNlaXZlIHBhY2tldHMgYmVmb3JlIGFza2luZyB0aGUKK25ldCBsYXllciB0byBkbyBhIGZsdXNoLiBUaGlzIHdpbGwgbWFrZSBpdCBtb3JlIGNvbnZlbmllbnQgdG8gZmx1c2gKK3BhY2tldHMgd2hlbiBhZGRpbmcgbmV3IGNvbmRpdGlvbnMgdG8gY2FuX3JlY2VpdmUuCisKK0FkZCBtaXNzaW5nIGlmIGJyYWNlcyB3aGlsZSBtb3ZpbmcgdGhlIGNhbl9yZWNlaXZlKCkgY29yZSBjb2RlLgorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCistLS0KKworIGh3L25ldC9zbWM5MWMxMTEuYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0xMjQsNiArMTI0LDI0IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV91cGRhdGUoc21jOTFjMTExX3MKKyAgICAgcWVtdV9zZXRfaXJxKHMtPmlycSwgbGV2ZWwpOworIH0KKyAKKytzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzbWM5MWMxMTFfc3RhdGUgKnMpCisreworKyAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKSB7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKyAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHNtYzkxYzExMV9zdGF0ZSAqcykKKyt7CisrICAgIGlmIChzbWM5MWMxMTFfY2FuX3JlY2VpdmUocykpIHsKKysgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgIH0KKyt9CisrCisgLyogVHJ5IHRvIGFsbG9jYXRlIGEgcGFja2V0LiAgUmV0dXJucyAweDgwIG9uIGZhaWx1cmUuICAqLworIHN0YXRpYyBpbnQgc21jOTFjMTExX2FsbG9jYXRlX3BhY2tldChzbWM5MWMxMTFfc3RhdGUgKnMpCisgeworQEAgLTE4NSw3ICsyMDMsNyBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQoc21jCisgICAgIHMtPmFsbG9jYXRlZCAmPSB+KDEgPDwgcGFja2V0KTsKKyAgICAgaWYgKHMtPnR4X2FsbG9jID09IDB4ODApCisgICAgICAgICBzbWM5MWMxMTFfdHhfYWxsb2Mocyk7CistICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyB9CisgCisgLyogRmx1c2ggdGhlIFRYIEZJRk8uICAqLworQEAgLTYzNiwxNSArNjU0LDExIEBAIHN0YXRpYyB1aW50MzJfdCBzbWM5MWMxMTFfcmVhZGwodm9pZCAqb3AKKyAgICAgcmV0dXJuIHZhbDsKKyB9CisgCistc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmUoTmV0Q2xpZW50U3RhdGUgKm5jKQorK3N0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlX25jKE5ldENsaWVudFN0YXRlICpuYykKKyB7CisgICAgIHNtYzkxYzExMV9zdGF0ZSAqcyA9IHFlbXVfZ2V0X25pY19vcGFxdWUobmMpOworIAorLSAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKQorLSAgICAgICAgcmV0dXJuIDE7CistICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkKKy0gICAgICAgIHJldHVybiAwOworLSAgICByZXR1cm4gMTsKKysgICAgcmV0dXJuIHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzKTsKKyB9CisgCisgc3RhdGljIHNzaXplX3Qgc21jOTFjMTExX3JlY2VpdmUoTmV0Q2xpZW50U3RhdGUgKm5jLCBjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBzaXplKQorQEAgLTczOSw3ICs3NTMsNyBAQCBzdGF0aWMgY29uc3QgTWVtb3J5UmVnaW9uT3BzIHNtYzkxYzExMV9tCisgc3RhdGljIE5ldENsaWVudEluZm8gbmV0X3NtYzkxYzExMV9pbmZvID0geworICAgICAudHlwZSA9IE5FVF9DTElFTlRfT1BUSU9OU19LSU5EX05JQywKKyAgICAgLnNpemUgPSBzaXplb2YoTklDU3RhdGUpLAorLSAgICAuY2FuX3JlY2VpdmUgPSBzbWM5MWMxMTFfY2FuX3JlY2VpdmUsCisrICAgIC5jYW5fcmVjZWl2ZSA9IHNtYzkxYzExMV9jYW5fcmVjZWl2ZV9uYywKKyAgICAgLnJlY2VpdmUgPSBzbWM5MWMxMTFfcmVjZWl2ZSwKKyB9OworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGFlZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlcGV0ZXJAZ21haWwuY29tPgorWC1Hb29nbGUtT3JpZ2luYWwtRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlLnBldGVyQGdtYWlsLmNvbT4KK1RvOiBxZW11LWRldmVsQG5vbmdudS5vcmcKK0NjOiBwZXRlci5tYXlkZWxsQGxpbmFyby5vcmcsIHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmcKK1N1YmplY3Q6IFtSRlQgUEFUQ0ggdjEgMi8zXSBuZXQ6IHNtYzkxYzExMTogZ2F0ZSBjYW5fcmVjZWl2ZSgpIG9uIHJ4IEZJRk8KKyBoYXZpbmcgYSBzbG90CitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDIxOjIzOjU3IC0wNzAwCisKK1JldHVybiBmYWxzZSBmcm9tIGNhbl9yZWNlaXZlKCkgd2hlbiB0aGUgRklGTyBkb2Vzbid0IGhhdmUgYSBmcmVlIFJYCitzbG90LiBUaGlzIGZpeGVzIGEgYnVnIGluIHRoZSBjdXJyZW50IGNvZGUgd2hlcmUgdGhlIGFsbG9jYXRlZCBidWZmZXIKK2lzIGZyZWVkIGJlZm9yZSB0aGUgZmlmbyBwb3AsIHRyaWdnZXJpbmcgYSBwcmVtYXR1cmUgZmx1c2ggb2YgcXVldWVkIFJYCitwYWNrZXRzLiBJdCBhbHNvIHdpbGwgaGFuZGxlIGEgY29ybmVyIGNhc2UsIHdoZXJlIHRoZSBndWVzdCBtYW51YWxseQorZnJlZXMgdGhlIGFsbG9jYXRlZCBidWZmZXIgYmVmb3JlIHBvcHBpbmcgdGhlIHJ4IEZJRk8gKGhlbmNlIGl0IGlzIG5vdAorZW5vdWdoIHRvIGp1c3QgZGVsYXkgdGhlIGZsdXNoX3F1ZXVlZF9wYWNrZXRzKCkpLgorCitSZXBvcnRlZC1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisKKyBody9uZXQvc21jOTFjMTExLmMgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi40LjAub3JpZy9ody9uZXQvc21jOTFjMTExLmMKKysrKyBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworQEAgLTEyOSw3ICsxMjksOCBAQCBzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzbWM5MWMxCisgICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpIHsKKyAgICAgICAgIHJldHVybiAxOworICAgICB9CistICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkgeworKyAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEgfHwKKysgICAgICAgIHMtPnJ4X2ZpZm9fbGVuID09IE5VTV9QQUNLRVRTKSB7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgfQorICAgICByZXR1cm4gMTsKK0BAIC0xODIsNiArMTgzLDcgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3BvcF9yeF9maWZvKHNtYzkxYworICAgICB9IGVsc2UgeworICAgICAgICAgcy0+aW50X2xldmVsICY9IH5JTlRfUkNWOworICAgICB9CisrICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyAgICAgc21jOTFjMTExX3VwZGF0ZShzKTsKKyB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4NjVmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4My5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGVwZXRlckBnbWFpbC5jb20+CitUbzogcWVtdS1kZXZlbEBub25nbnUub3JnCitDYzogcGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3JnLCByaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnCitTdWJqZWN0OiBbUkZUIFBBVENIIHYxIDMvM10gbmV0OiBzbWM5MWMxMTE6IGZsdXNoIHBhY2tldHMgb24gUkNSIHJlZ2lzdGVyCisgY2hhbmdlcworRGF0ZTogVGh1LCAxMCBTZXAgMjAxNSAyMToyNDoxMiAtMDcwMAorCitUaGUgU09GVF9SU1Qgb3IgUlhFTiBpbiB0aGUgY29udHJvbCByZWdpc3RlciBjYW4gYmUgdXNlZCBhcyBhIGNvbmRpdGlvbgordG8gdW5ibG9jayB0aGUgbmV0IGxheWVyIHZpYSBjYW5fcmVjZWl2ZSgpLiBTbyBjaGVjayBmb3IgcG9zc2libGUKK2ZsdXNoZXMgb24gUkNSIGNoYW5nZXMuIFRoaXMgd2lsbCBkcm9wIGFsbCBwZW5kaW5nIHBhY2tldHMgb24gc29mdAorcmVzZXQgb3IgZGlzYWJsZSB3aGljaCBpcyB0aGUgZnVuY3Rpb25hbCBpbnRlbnQgb2YgdGhlIGNhbl9yZWNlaXZlKCkKK2xvZ2ljLgorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisKKyBody9uZXQvc21jOTFjMTExLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMzMxLDYgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV93cml0ZWIodm9pZCAqb3BhcXUKKyAgICAgICAgICAgICBpZiAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSB7CisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9yZXNldChERVZJQ0UocykpOworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBzbWM5MWMxMTFfZmx1c2hfcXVldWVkX3BhY2tldHMocyk7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgY2FzZSAxMDogY2FzZSAxMTogLyogUlBDUiAqLworICAgICAgICAgICAgIC8qIElnbm9yZWQgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS93YWNvbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS93YWNvbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2YWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3dhY29tLnBhdGNoCkBAIC0wLDAgKzEsMTMwIEBACitUaGUgVVNCIHdhY29tIGRldmljZSBpcyBtaXNzaW5nIGEgSElEIGRlc2NyaXB0b3Igd2hpY2ggY2F1c2VzIGl0Cit0byBmYWlsIHRvIG9wZXJhdGUgd2l0aCByZWNlbnQga2VybmVscyAoZS5nLiAzLjE3KS4KKworVGhpcyBwYXRjaCBhZGRzIGEgSElEIGRlc3JpcHRvciB0byB0aGUgZGV2aWNlLCBiYXNlZCB1cG9uIG9uZSBmcm9tIAorcmVhbCB3Y29tIGRldmljZS4KKworU2lnbmVkLW9mZi1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisyMDE0LzExLzI3CisKK0luZGV4OiBxZW11LTIuMS4wL2h3L3VzYi9kZXYtd2Fjb20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi4xLjAub3JpZy9ody91c2IvZGV2LXdhY29tLmMJMjAxNC0wOC0wMSAxNToxMjoxNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBxZW11LTIuMS4wL2h3L3VzYi9kZXYtd2Fjb20uYwkyMDE0LTEwLTEyIDEyOjEzOjMwLjU0MDMwNjA0MiArMDEwMAorQEAgLTY4LDYgKzY4LDg5IEBACisgICAgIFtTVFJfU0VSSUFMTlVNQkVSXSAgICAgPSAiMSIsCisgfTsKKyAKKytzdGF0aWMgY29uc3QgdWludDhfdCBxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKysgICAgMHgwNSwgMHgwMSwJCS8qIFVzYWdlIFBhZ2UgKEdlbmVyaWMgRGVza3RvcCkgKi8KKysgICAgMHgwOSwgMHgwMiwJCS8qIFVzYWdlIChNb3VzZSkgKi8KKysgICAgMHhhMSwgMHgwMSwJCS8qIENvbGxlY3Rpb24gKEFwcGxpY2F0aW9uKSAqLworKyAgICAweDg1LCAweDAxLAkJLyogICBSZXBvcnQgSUQgKDEpICovIAorKyAgICAweDA5LCAweDAxLAkJLyogICBVc2FnZSAoUG9pbnRlcikgKi8KKysgICAgMHhhMSwgMHgwMCwJCS8qICAgQ29sbGVjdGlvbiAoUGh5c2ljYWwpICovCisrICAgIDB4MDUsIDB4MDksCQkvKiAgICAgVXNhZ2UgUGFnZSAoQnV0dG9uKSAqLworKyAgICAweDE5LCAweDAxLAkJLyogICAgIFVzYWdlIE1pbmltdW0gKDEpICovCisrICAgIDB4MjksIDB4MDUsCQkvKiAgICAgVXNhZ2UgTWF4aW11bSAoNSkgKi8KKysgICAgMHgxNSwgMHgwMCwJCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjUsIDB4MDEsCQkvKiAgICAgTG9naWNhbCBNYXhpbXVtICgxKSAqLworKyAgICAweDk1LCAweDA1LAkJLyogICAgIFJlcG9ydCBDb3VudCAoNSkgKi8KKysgICAgMHg3NSwgMHgwMSwJCS8qICAgICBSZXBvcnQgU2l6ZSAoMSkgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDk1LCAweDAxLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHg3NSwgMHgwMywJCS8qICAgICBSZXBvcnQgU2l6ZSAoMykgKi8KKysgICAgMHg4MSwgMHgwMSwJCS8qICAgICBJbnB1dCAoQ29uc3RhbnQpICovCisrICAgIDB4MDUsIDB4MDEsCQkvKiAgICAgVXNhZ2UgUGFnZSAoR2VuZXJpYyBEZXNrdG9wKSAqLworKyAgICAweDA5LCAweDMwLAkJLyogICAgIFVzYWdlIChYKSAqLworKyAgICAweDA5LCAweDMxLAkJLyogICAgIFVzYWdlIChZKSAqLworKyAgICAweDE1LCAweDgxLAkJLyogICAgIExvZ2ljYWwgTWluaW11bSAoLTEyNykgKi8KKysgICAgMHgyNSwgMHg3ZiwJCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDEyNykgKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwMiwJCS8qICAgICBSZXBvcnQgQ291bnQgKDIpICovCisrICAgIDB4ODEsIDB4MDYsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBSZWxhdGl2ZSkgKi8KKysgICAgMHhjMCwJCS8qICAgRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDUsIDB4MGQsCQkvKiBVc2FnZSBQYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4MDksIDB4MDEsCQkvKiBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDIsCQkvKiAgIFJlcG9ydCBJRCAoMikgKi8gCisrICAgIDB4YTEsIDB4MDAsCQkvKiAgIENvbGxlY3Rpb24gKFBoeXNpY2FsKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLCAgIC8qICAgVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwgCS8qICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgxNSwgMHgwMCwgCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjYsIDB4ZmYsIDB4MDAsCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDI1NSkgKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgQ291bnQgKDgpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHhjMCwgCQkvKiAgIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDksIDB4MDEsCQkvKiAgIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4ODUsIDB4MDIsIAkvKiAgIFJlcG9ydCBJRCAoMikgKi8gCisrICAgIDB4OTUsIDB4MDEsCQkvKiAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHhiMSwgMHgwMiwJCS8qICAgRkVBVFVSRSAoMikgKi8KKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsCS8qIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsCQkvKiBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDIsICAgCS8qICAgUmVwb3J0IElEICgyKSAqLyAKKysgICAgMHgwNSwgMHgwZCwJCS8qICAgVXNhZ2UgUGFnZSAoRGlnaXRpemVyKSAgKi8KKysgICAgMHgwOSwgMHgyMiwgCS8qICAgVXNhZ2UgKEZpbmdlcikgKi8KKysgICAgMHhhMSwgMHgwMCwgIAkvKiAgIENvbGxlY3Rpb24gKFBoeXNpY2FsKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLAkvKiAgIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsCQkvKiAgICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgxNSwgMHgwMCwgCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjYsIDB4ZmYsIDB4MDAsICAJLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDAyLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMikgKi8KKysgICAgMHg4MSwgMHgwMiwgCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDA1LCAweDAxLAkJLyogICAgIFVzYWdlIFBhZ2UgKEdlbmVyaWMgRGVza3RvcCkgKi8KKysgICAgMHgwOSwgMHgzMCwJCS8qICAgICBVc2FnZSAoWCkgKi8KKysgICAgMHgzNSwgMHgwMCwgCS8qICAgICBQaHlzaWNhbCBNaW5pbXVtICovCisrICAgIDB4NDYsIDB4ZTAsIDB4MmUsCS8qICAgICBQaHlzaWNhbCBNYXhpbXVtICovCisrICAgIDB4MjYsIDB4ZTAsIDB4MDEsICAgLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDc1LCAweDEwLAkJLyogICAgIFJlcG9ydCBTaXplICgxNikgKi8KKysgICAgMHg5NSwgMHgwMSwJCS8qICAgICBSZXBvcnQgQ291bnQgKDEpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHgwOSwgMHgzMSwJCS8qICAgICBVc2FnZSAoWSkgKi8KKysgICAgMHg0NiwgMHg0MCwgMHgxZiwgCS8qICAgICBQaHlzaWNhbCBNYXhpbXVtICovCisrICAgIDB4MjYsIDB4NDAsIDB4MDEsIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4ODEsIDB4MDIsIAkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHgwNiwgMHgwMCwgMHhmZiwJLyogICAgIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsIAkvKiAgICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgyNiwgMHhmZiwgMHgwMCwgIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4NzUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IFNpemUgKDgpICovCisrICAgIDB4OTUsIDB4MGQsCQkvKiAgICAgUmVwb3J0IENvdW50ICgxMykgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweGMwLAkJLyogICBFbmQgQ29sbGVjdGlvbiAqLyAKKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrfTsKKysKKysKKyBzdGF0aWMgY29uc3QgVVNCRGVzY0lmYWNlIGRlc2NfaWZhY2Vfd2Fjb20gPSB7CisgICAgIC5iSW50ZXJmYWNlTnVtYmVyICAgICAgICAgICAgICA9IDAsCisgICAgIC5iTnVtRW5kcG9pbnRzICAgICAgICAgICAgICAgICA9IDEsCitAQCAtODUsNyArMTY4LDcgQEAKKyAgICAgICAgICAgICAgICAgMHgwMCwgICAgICAgICAgLyogIHU4ICBjb3VudHJ5X2NvZGUgKi8KKyAgICAgICAgICAgICAgICAgMHgwMSwgICAgICAgICAgLyogIHU4ICBudW1fZGVzY3JpcHRvcnMgKi8KKyAgICAgICAgICAgICAgICAgMHgyMiwgICAgICAgICAgLyogIHU4ICB0eXBlOiBSZXBvcnQgKi8KKy0gICAgICAgICAgICAgICAgMHg2ZSwgMCwgICAgICAgLyogIHUxNiBsZW4gKi8KKysgICAgICAgICAgICAgICAgc2l6ZW9mKHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvciksIDAsIC8qICB1MTYgbGVuICovCisgICAgICAgICAgICAgfSwKKyAgICAgICAgIH0sCisgICAgIH0sCitAQCAtMjY1LDYgKzM1MCwxNSBAQAorICAgICB9CisgCisgICAgIHN3aXRjaCAocmVxdWVzdCkgeworKyAgICBjYXNlIEludGVyZmFjZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorKyAgICAgICAgc3dpdGNoICh2YWx1ZSA+PiA4KSB7CisrICAgICAgICBjYXNlIDB4MjI6CisrICAgICAgICAgICAgICAgIG1lbWNweShkYXRhLCBxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IsCisrICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKSk7CisrICAgICAgICAgICAgICAgIHAtPmFjdHVhbF9sZW5ndGggPSBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIFdBQ09NX1NFVF9SRVBPUlQ6CisgICAgICAgICBpZiAocy0+bW91c2VfZ3JhYmJlZCkgeworICAgICAgICAgICAgIHFlbXVfcmVtb3ZlX21vdXNlX2V2ZW50X2hhbmRsZXIocy0+ZWhfZW50cnkpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjE3ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi40LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBxZW11LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NDFjMjhkMmNmODZlMTVhMzdmYTQ3ZTE1YTcyZmJhYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjtlbmRsaW5lPTI0O21kNT1jMDRkZWY3YWUzODg1MGU3ZDNlZjU0ODU4ODE1OTkxMyIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbWM5MWMxMTFfZml4MS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc21jOTFjMTExX2ZpeDIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NtYzkxYzExMV9maXgzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9wcmVwZW5kID0gImh0dHA6Ly93aWtpLnFlbXUtcHJvamVjdC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxODZlZTgxOTQxNDBhNDg0YTQ1NWY4ZTNjNzQ1ODlmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MmIwYjk5MWJiY2M1NDA2NjNhMDE5ZTFlOGM0ZjcxNDA1M2I2OTFkZGEzMmM5YjllZTgwYjI1ZjM2N2U2NjIwIgorCitDT01QQVRJQkxFX0hPU1RfY2xhc3MtdGFyZ2V0X21pcHM2NCA9ICJudWxsIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjIFByZXZlbnQgUUEgd2FybmluZ3MgYWJvdXQgaW5zdGFsbGVkICR7bG9jYWxzdGF0ZWRpcn0vcnVuCisgICAgaWYgWyAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gXTsgdGhlbiBybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW47IGZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNGM2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIlFFTVUgd3JhcHBlciBzY3JpcHQiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgcWVtdQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCisJZWNobyAiIyEvYmluL3NoIiA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyCisJcWVtdV9iaW5hcnk9JHtAcWVtdV90YXJnZXRfYmluYXJ5KGQpfQorCXFlbXVfb3B0aW9ucz0nJHtRRU1VX09QVElPTlN9JworCWVjaG8gIiRxZW11X2JpbmFyeSAkcWVtdV9vcHRpb25zIFwiXCRAXCIiID4+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyCisJZmFsbGJhY2tfcWVtdV9iaW49CisJY2FzZSAkcWVtdV9iaW5hcnkgaW4KKwkJInFlbXUtaTM4NiIpCisJCQlmYWxsYmFja19xZW11X2Jpbj1xZW11LXg4Nl82NAorCQkJOzsKKwkJInFlbXUteDg2XzY0IikKKwkJCWZhbGxiYWNrX3FlbXVfYmluPXFlbXUtaTM4NgorCQkJOzsKKwkJKikKKwkJCTs7CisJZXNhYworCisJaWYgWyAtbiAiJGZhbGxiYWNrX3FlbXVfYmluIiBdOyB0aGVuCisKKwkJY2F0ID4+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyIDw8IEVPRgorcmM9XCQ/CitpZiBbIFwkcmMgPSAyNTUgXTsgdGhlbgorCSRmYWxsYmFja19xZW11X2JpbiAiXCRAIgorCXJjPVwkPworZmkKK2V4aXQgXCRyYworRU9GCisKKwlmaQorCisJY2htb2QgK3ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJxZW11d3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK3FlbXV3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0YjBhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSwxOCBAQAorUkRFUEVORFNfJHtQTn0gPSAiZGlmZnN0YXQtbmF0aXZlIHBhdGNoLW5hdGl2ZSBiemlwMi1uYXRpdmUgdXRpbC1saW51eC1uYXRpdmUiCisKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworaW5oZXJpdCBuYXRpdmUKKworUEFUQ0hUT09MID0gInBhdGNoIgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ubHMiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBEdW1teSBxdWlsdHJjIGZpbGUgZm9yIHBhdGNoLmJiY2xhc3MKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L3F1aWx0cmMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjN2RjZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSBxdWlsdC5pbmMKK3JlcXVpcmUgcXVpbHQtbmF0aXZlLmluYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzN2IzNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC5pbmMKQEAgLTAsMCArMSw2MiBAQAorU1VNTUFSWSA9ICJUb29sIGZvciB3b3JraW5nIHdpdGggc2VyaWVzIG9mIHBhdGNoZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9xdWlsdC8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vcXVpbHQvcXVpbHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgZmlsZTovL2luc3RhbGwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImZjMDMxMGRiNTg2OGEwODczZDYwMmQ0MzMyYTc2ZDQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM0YmZkMzI4MjIxNGEyODhlOGQzZTkyMWFlNGQ1MmU3M2UyNGM0ZmVhZDcyYjU0NDY3NTJhZGVlOTlhN2FmZmQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAorCitFWFRSQV9PRUNPTkZfZGFyd2luICs9ICItLXdpdGhvdXQtZGF0ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZ2V0b3B0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworUEFDS0FHRVMgKz0gImd1YXJkcyBndWFyZHMtZG9jIgorRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke2RhdGFkaXJ9L3F1aWx0IFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9xdWlsdCAke2xpYmRpcn0vcXVpbHQiCitGSUxFU19ndWFyZHMgPSAiJHtiaW5kaXJ9L2d1YXJkcyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0vbWFuMS9xdWlsdC4xICR7ZG9jZGlyfS8ke0JQTn0iCitGSUxFU19ndWFyZHMtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2d1YXJkcy4xIgorCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitFWFRSQV9PRV9NQUtFX0FSR1NfZGFyd2luID89ICIiCitFWFRSQV9PRV9NQUtFX0FSR1MgPz0gIkJVSUxEX1JPT1Q9JHtEfSIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfQkFTSD0vYmluL2Jhc2giCisKKyMgcXVpbHQgaWdub3JlcyBERVNURElSCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICR7RVhUUkFfT0VfTUFLRV9BUkdTfSBpbnN0YWxsCisJIyBjbGVhbnVwIHVucGFja2FnZWQgZmlsZXMKKwlybSAtcmYgJHtEfS8ke2RhdGFkaXJ9L2VtYWNzCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSBiaW4vcGF0Y2gtd3JhcHBlciB0ZXN0Ly5kZXBlbmQKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0YXIgLWNmIC0gYmluLyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jZiAtIGNvbXBhdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtY2YgLSBxdWlsdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbWFpbC50ZXN0IC0tZXhjbHVkZSBkZWxldGUudGVzdCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gIm1ha2UgZmlsZSBzZWQgZ2F3ayBkaWZmdXRpbHMgZmluZHV0aWxzIGVkIHBlcmwgXAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybC1tb2R1bGUtZmlsZWhhbmRsZSBwZXJsLW1vZHVsZS1nZXRvcHQtc3RkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXBvc2l4IHBlcmwtbW9kdWxlLWZpbGUtdGVtcCBcCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS10ZXh0LXBhcnNld29yZHMgcGVybC1tb2R1bGUtb3ZlcmxvYWRpbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzaCB1dGlsLWxpbnV4LWdldG9wdCBcCisgICAgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzYWM4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKK1BBVEggOj0gICAgICAgICAkKENVUkRJUikvYmluOiQoQ1VSRElSKS9jb21wYXQ6JChQQVRIKQorUVVJTFRfRElSIDo9ICAgICQoQ1VSRElSKS9xdWlsdAorUVVJTFRSQyA6PSAgICAgICQoQ1VSRElSKS90ZXN0L3Rlc3QucXVpbHRyYworZXhwb3J0IFFVSUxUX0RJUiBRVUlMVFJDCitDSEVDS19FTlYgOj0gUD1wYXRjaGVzLzsgX1A9Li4vcGF0Y2hlcy87IGV4cG9ydCBQIF9QCistaW5jbHVkZSB0ZXN0Ly5kZXBlbmQKKworY2hlY2stJSA6IHRlc3QvJS50ZXN0CisJQExBTkc9QzsgTENfQUxMPUM7IFwKKwlleHBvcnQgTEFORyBMQ19BTEw7IFwKKwkkKENIRUNLX0VOVik7IFwKKwljZCAkKDxEKTsgXAorCS4vcnVuIC1xICQoPEYpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9hY2xvY2FsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvYWNsb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWY0NDI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvYWNsb2NhbC5wYXRjaApAQCAtMCwwICsxLDEyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCB0aGUgYWNsb2NhbC5tNCBhcyBhY2luY2x1ZGUubTQKKworSW5kZXg6IHF1aWx0LTAuNDcvYWNpbmNsdWRlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgcXVpbHQtMC40Ny9hY2luY2x1ZGUubTQJMjAwNi0xMC0xMCAxNzowNTo1Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTE5IEBACisrZG5sIEFsbG93IGNvbmZpZ3VyZSB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgYmluYXJ5CisrZG5sIDE6IEVudmlyb25tZW50IHZhcmlhYmxlCisrZG5sIDI6IGJpbmFyeSBuYW1lCisrZG5sIDM6IG9wdGlvbmFsIGxpc3Qgb2YgYWx0ZXJuYXRpdmUgYmluYXJ5IG5hbWVzCisrZG5sIDQ6IG9wdGlvbmFsIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggZGlyZWN0b3JpZXMKKytBQ19ERUZVTihbUVVJTFRfQ09NUEFUX1BST0dfUEFUSF0sWworKyAgbTRfZGVmaW5lKFtpbnRlcm5hbF8kMl9jbWRdLFtlc3lzY21kKGxzIGNvbXBhdC8kMi5pbiAyPi9kZXYvbnVsbCldKQorKworKyAgQUNfQVJHX1dJVEgoJDIsIEFDX0hFTFBfU1RSSU5HKAorKyAgICBbLS13aXRoLSQyXSwgW25hbWUgb2YgdGhlICQyIGV4ZWN1dGFibGUgdG8gdXNlXQorKyAgICAgICAgICAgICAgICAgbTRfaWYoaW50ZXJuYWxfJDJfY21kLFtdLFtdLFsgKHVzZSAtLXdpdGhvdXQtJDIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhbiBpbnRlcm5hbCBtZWNoYW5pc20pXSkpLAorKyAgWworKyAgICBpZiB0ZXN0IHgiJHdpdGh2YWwiID0geG5vbmU7IHRoZW4KKysgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgY29uZmlndXJlIGFyZ3VtZW50LiAgdXNlIC0td2l0aG91dC0kMl0pCisrICAgIGZpCisrICAgIGlmIHRlc3QgeCIkd2l0aHZhbCIgIT0geG5vOyB0aGVuCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciAkMikKKysgICAgICAkMT0iJHdpdGh2YWwiCisrICAgICAgaWYgdGVzdCAtZSAiJCQxIjsgdGhlbgorKwlpZiB0ZXN0ICEgLWYgIiQkMSIgLWEgISAtaCAiJCQxIiB8fCB0ZXN0ICEgLXggIiQkMSI7IHRoZW4KKysJICBBQ19NU0dfRVJST1IoWyQkMSBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlXSkKKysJZmkKKysgICAgICBmaQorKyAgICAgIEFDX01TR19SRVNVTFQoWyQkMV0pCisrICAgICAgaWYgdGVzdCAhIC1lICIkJDEiOyB0aGVuCisrICAgICAgICBBQ19NU0dfV0FSTihbJCQxIGRvZXMgbm90IGV4aXN0XSkKKysgICAgICBmaQorKyAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgZmkKKysgIF0sWworKyAgICBtNF9pZihbJDNdLFtdLFsKKysgICAgICBBQ19QQVRIX1BST0coJDEsJDIsLCRQQVRIOiQ0KQorKyAgICBdLFsKKysgICAgICBBQ19QQVRIX1BST0dTKCQxLCQzLCwkUEFUSDokNCkKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiIC1hICJgZXhwciAiJCQxIiA6ICcuKi9cKFtbXi9dXSpcKSQnYCIgIT0gIiQyIjsgdGhlbgorKwlDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgbTRfaWYoWyQ0XSxbXSxbXSxbCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorKwlhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICAgICAgICBmb3IgZGlyIGluICIkNCI7IGRvCisrICAgICAgICAgIGlmIHRlc3QgImBkaXJuYW1lICQkMWAiID0gIiRkaXIiOyB0aGVuCisrICAgICAgICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKwkgICAgYnJlYWsKKysJICBmaQorKyAgICAgICAgZG9uZQorKwlJRlM9IiRhc19zYXZlX0lGUyIKKysgICAgICBmaQorKyAgICBdKQorKyAgXSkKKysgIGlmIHRlc3QgLXogIiQkMSI7IHRoZW4KKysgICAgbTRfaWYoaW50ZXJuYWxfJDJfY21kLFtdLFsKKysgICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiAkMiB3aXRoIHRoZSBvcHRpb24gJy0td2l0aC0kMiddKQorKyAgICBdLFsKKysgICAgICBBQ19NU0dfV0FSTihbVXNpbmcgaW50ZXJuYWwgJDIgbWVjaGFuaXNtLiAgVXNlIG9wdGlvbiAnLS13aXRoLSQyJyB0byBvdmVycmlkZV0pCisrICAgICAgQ09NUEFUX1BST0dSQU1TPSIkQ09NUEFUX1BST0dSQU1TICQyIgorKyAgICAgICQxPSQyCisrICAgICAgSU5URVJOQUxfJDE9MQorKyAgICBdKQorKyAgZmkKKysgIEFDX1NVQlNUKCQxKQorK10pCisrCisrZG5sIEFsbG93IGNvbmZpZ3VyZSB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgYmluYXJ5CisrZG5sIFRoaXMgdmFyaWFudCBpcyBmb3Igb3B0aW9uYWwgYmluYXJpZXMuCisrZG5sIDE6IEVudmlyb25tZW50IHZhcmlhYmxlCisrZG5sIDI6IGJpbmFyeSBuYW1lCisrZG5sIDM6IG9wdGlvbmFsIGxpc3Qgb2YgYWx0ZXJuYXRpdmUgYmluYXJ5IG5hbWVzCisrZG5sIDQ6IG9wdGlvbmFsIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggZGlyZWN0b3JpZXMKKytBQ19ERUZVTihbUVVJTFRfQ09NUEFUX1BST0dfUEFUSF9PUFRdLFsKKysgIEFDX0FSR19XSVRIKCQyLCBBQ19IRUxQX1NUUklORygKKysgICAgWy0td2l0aC0kMl0sIFtuYW1lIG9mIHRoZSAkMiBleGVjdXRhYmxlIHRvIHVzZV0pLAorKyAgWworKyAgICBpZiB0ZXN0IHgiJHdpdGh2YWwiICE9IHhubzsgdGhlbgorKyAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgJDIpCisrICAgICAgJDE9IiR3aXRodmFsIgorKyAgICAgIGlmIHRlc3QgLWUgIiQkMSI7IHRoZW4KKysJaWYgdGVzdCAhIC1mICIkJDEiIC1hICEgLWggIiQkMSIgfHwgdGVzdCAhIC14ICIkJDEiOyB0aGVuCisrCSAgQUNfTVNHX0VSUk9SKFskJDEgaXMgbm90IGFuIGV4ZWN1dGFibGUgZmlsZV0pCisrCWZpCisrICAgICAgZmkKKysgICAgICBBQ19NU0dfUkVTVUxUKFskJDFdKQorKyAgICAgIGlmIHRlc3QgISAtZSAiJCQxIjsgdGhlbgorKyAgICAgICAgQUNfTVNHX1dBUk4oWyQkMSBkb2VzIG5vdCBleGlzdF0pCisrICAgICAgZmkKKysgICAgICBDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgIGZpCisrICBdLFsKKysgICAgbTRfaWYoWyQzXSxbXSxbCisrICAgICAgQUNfUEFUSF9QUk9HKCQxLCQyLCwkUEFUSDokNCkKKysgICAgXSxbCisrICAgICAgQUNfUEFUSF9QUk9HUygkMSwkMywsJFBBVEg6JDQpCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIiAtYSAiYGV4cHIgIiQkMSIgOiAnLiovXChbW14vXV0qXCkkJ2AiICE9ICIkMiI7IHRoZW4KKysJQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKyAgICAgIGZpCisrICAgIF0pCisrICAgIG00X2lmKFskNF0sW10sW10sWworKyAgICAgIGlmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKysJYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICAgICAgZm9yIGRpciBpbiAiJDQiOyBkbworKyAgICAgICAgICBpZiB0ZXN0ICJgZGlybmFtZSAkJDFgIiA9ICIkZGlyIjsgdGhlbgorKyAgICAgICAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysJICAgIGJyZWFrCisrCSAgZmkKKysgICAgICAgIGRvbmUKKysJSUZTPSIkYXNfc2F2ZV9JRlMiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICAgIEFDX01TR19XQVJOKFskMiBub3QgZm91bmQsIHNvbWUgb3B0aW9uYWwgZnVuY3Rpb25hbGl0aWVzIHdpbGwgYmUgbWlzc2luZ10pCisrICAgIGZpCisrICBdKQorKyAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICAkMT0kMgorKyAgZmkKKysgIEFDX1NVQlNUKCQxKQorK10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzIxNTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGhlIHRlc3Qgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGNyb3NzIGNvbXBpbGluZy4KKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDAyNmEzNmMuLjhhZjU5MWIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI0NSw2ICsyNDUsNyBAQCBmaQorIFFVSUxUX0NPTVBBVF9QUk9HX1BBVEgoRElGRiwgZGlmZikKKyBRVUlMVF9DT01QQVRfUFJPR19QQVRIKFBBVENILCBwYXRjaCkKKyAKKytpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiOyB0aGVuCisgIyBTdW4gZGlmZiBhbmQgb3RoZXJzIHdpbGwgbm90IHdvcmsgYmVjYXVzZSBHTlUgcGF0Y2ggb3B0aW9ucyBhcmUgdXNlZC4KKyBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSB2ZXJzaW9uIG9mICRESUZGXSkKKyBpZiAkRElGRiAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsOyB0aGVuCitAQCAtMjkzLDYgKzI5NCw3IEBAIGN1cnJlbnQgdmVyc2lvbiBvZiBwYXRjaCBmcm9tIGZ0cC5nbnUub3JnLCBvciBpZiB5b3UgYWxyZWFkeSBoYXZlIEdOVSBwYXRjaAorIHRoZW4geW91IGNhbiBzdXBwbHkgaXRzIHBhdGggd2l0aCB0aGUgJy0td2l0aC1wYXRjaD0nIG9wdGlvbi4KKyBdKQorIGZpCisrZmkKKyAKKyBRVUlMVF9DT01QQVRfUFJPR19QQVRIKEZJTkQsIGZpbmQpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE3YWY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHF1aWx0LTAuNDcvTWFrZWZpbGUuaW4JMjAwOC0xMi0zMSAxOTowOToxMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBxdWlsdC0wLjQ3L01ha2VmaWxlLmluLm9yaWcJMjAwOC0wOC0yMSAxMzoyMTozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMyw3ICsxMyw3IEBACisgbWFuZGlyIDo9CUBtYW5kaXJACisgbG9jYWxlZGlyIDo9CSQoZGF0YWRpcikvbG9jYWxlCisgZW1hY3NkaXIgOj0JJChkYXRhZGlyKS9lbWFjcy9zaXRlLWxpc3AKKy1ldGNkaXIgOj0JJChzdWJzdCAvdXNyL2V0YywvZXRjLCQocHJlZml4KS9ldGMpCisrZXRjZGlyIDo9CUBzeXNjb25mZGlyQAorIAorIElOU1RBTEwgOj0JQElOU1RBTExACisgUE9EMk1BTiA6PQlAUE9EMk1BTkAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NThhOWRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2xuIC1zZiAvYmluL2VkIC91c3IvYmluL2VkCitmb3IgaSBpbiBgbHMgdGVzdC8qLnRlc3QgfGF3ayAtRi4gJ3twcmludCAkMX0nIHxhd2sgLUYvICd7cHJpbnQgJDJ9J2A7IGRvIG1ha2UgY2hlY2stJGk7IGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvIFBBU1M6ICRpLnRlc3Q7IGVsc2UgZWNobyBGQUlMOiAkaS50ZXN0OyBmaTsgZG9uZQorcm0gLWYgL3Vzci9iaW4vZWQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0XzAuNjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdF8wLjY0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjkwMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdF8wLjY0LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgcXVpbHQuaW5jCitpbmhlcml0IGdldHRleHQKK1JERVBFTkRTXyR7UE59ICs9ICJwYXRjaCBkaWZmc3RhdCBiemlwMiB1dGlsLWxpbnV4IgorU1JDX1VSSSArPSAiZmlsZTovL2FjbG9jYWwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dudV9wYXRjaF90ZXN0X2ZpeF90YXJnZXQucGF0Y2ggXAorICAgICAgICAgICAiCisKKyMgZml4IGJ1aWxkLWRpc3RybyBzcGVjaWZpYyBwZXJsIHBhdGggaW4gdGhlIHRhcmdldCBwZXJsIHNjcmlwdHMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZvciBwZXJsc2NyaXB0IGluICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvcmVtb3ZlLXRyYWlsaW5nLXdzICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvZGVwZW5kZW5jeS1ncmFwaCAke0R9JHtkYXRhZGlyfS9xdWlsdC9zY3JpcHRzL2VkbWFpbCAke0R9JHtiaW5kaXJ9L2d1YXJkcworCWRvCisJCWlmIFsgLWYgJHBlcmxzY3JpcHQgXTsgdGhlbgorCQkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHBlcmxzY3JpcHQKKwkJZmkKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODg5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIk1ha2VmaWxlIGRlYnVnZ2VyIHdoaWNoIGlzIGdudW1ha2UgY29tcGF0aWJsZSIKK0RFU0NSSVBUSU9OID0gInJlbWFrZSBpcyBhIHBhdGNoZWQgYW5kIG1vZGVybml6ZWQgdmVyc2lvbiBvZiBHTlUgbWFrZSBcCit1dGlsaXR5IHRoYXQgYWRkcyBpbXByb3ZlZCBlcnJvciByZXBvcnRpbmcsIHRoZSBhYmlsaXR5IHRvIHRyYWNlIFwKK2V4ZWN1dGlvbiBpbiBhIGNvbXByZWhlbnNpYmxlIHdheSwgYW5kIGEgZGVidWdnZXIuIgorCitIT01FUEFHRSA9ICJodHRwOi8vYmFzaGRiLnNvdXJjZWZvcmdlLm5ldC9yZW1ha2UvIgorU0VDVElPTiA9ICJkZXZlbCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3JvY2t5L3JlbWFrZS5naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworQUxURVJOQVRJVkVfJHtQTn0gPSAibWFrZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttYWtlXSA9ICIke2JpbmRpcn0vbWFrZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFttYWtlXSA9ICIke2JpbmRpcn0vcmVtYWtlIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjMyOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlL3ZlcnNpb24tcmVtYWtlLnRleGkucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3ZlcnNpb24tcmVtYWtlLnRleGkgaXMgbm90IHRoZXJlIGJ1dCBpdCBpcyByZXF1aXJlZCBieSByZW1ha2UudGV4aSwKK2p1c3QgYWRkIGl0IGZvciBnZXR0aW5nIHRoZSAnbWFrZSByZW1ha2UuaW5mbycgd29ya3MuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvZG9jL3ZlcnNpb24tcmVtYWtlLnRleGkgYi9kb2MvdmVyc2lvbi1yZW1ha2UudGV4aQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhM2I3MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvYy92ZXJzaW9uLXJlbWFrZS50ZXhpCitAQCAtMCwwICsxLDQgQEAKKytAc2V0IFVQREFURUQgMTAgSnVuZSAyMDEyCisrQHNldCBVUERBVEVELU1PTlRIIEp1bmUgMjAxMgorK0BzZXQgRURJVElPTiAzLjgyK2RiZy0wLjlnaXQKKytAc2V0IFZFUlNJT04gMy44MitkYmctMC45Z2l0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZV80LjErZGJnLTEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE5MTNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZV80LjErZGJnLTEuMS5iYgpAQCAtMCwwICsxLDI3IEBACitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCityZXF1aXJlIHJlbWFrZS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL3ZlcnNpb24tcmVtYWtlLnRleGkucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNSRVYgPSAiY2Y1NDY0MWQ1MGEwMTY1YmIxNzYyMmIzZTk3NzBmNDI2Y2NiYzU2MSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gInJlYWRsaW5lIGd1aWxlIgorIyBOZWVkIHRvIGFkZCAiZ2V0dGV4dC1uYXRpdmUiIGRlcGVuZGVuY3kgdG8gcmVtYWtlLW5hdGl2ZS4KKyMgQnkgZGVmYXVsdCBvbmx5ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIiBpcyBhZGRlZAorIyB3aGVuIGluaGVyaXQgZ2V0dGV4dC4KK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJnZXR0ZXh0LW5hdGl2ZSIKK1BST1ZJREVTICs9ICJtYWtlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIHJlbW92ZSB0aGUgZGVmYXVsdCBMSU5HVUFTIHNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gZ2VuZXJhdGUgbGFuZ3VhZ2VzCisgICAgcm0gJHtTfS9wby9MSU5HVUFTCisgICAgdG91Y2ggJHtTfS9wby9MSU5HVUFTCisgICAgIyBjcmVhdGUgY29uZmlnLnJwYXRoIHdoaWNoIHJlcXVpcmVkIGJ5IGNvbmZpZ3VyZS5hYworICAgICggY2QgJHtTfTsgYXV0b3BvaW50IHx8IHRvdWNoIGNvbmZpZy5ycGF0aCApCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9hZGRfUlBNU0VOU0VfTUlTU0lOR09LX3RvX3JwbW1vZHVsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc3ODcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+IAorCitkaWZmIC0tZ2l0IGEvcHl0aG9uL3JwbW1vZHVsZS5jIGIvcHl0aG9uL3JwbW1vZHVsZS5jCitpbmRleCBhNGZlMjE3Li43MjhjNjZjIDEwMDY0NAorLS0tIGEvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgYi9weXRob24vcnBtbW9kdWxlLmMKK0BAIC0zOTYsNiArMzk2LDEwIEBAIHN0YXRpYyBpbnQgaW5pdE1vZHVsZShQeU9iamVjdCAqbSkKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TVFJPTkcpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0NPTkZJRyk7CisgCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9NSVNTSU5HT0spOworKyNlbmRpZgorKworICAgICBSRUdJU1RFUl9FTlVNKFJQTVRSQU5TX0ZMQUdfVEVTVCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19CVUlMRF9QUk9CUyk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19OT1NDUklQVFMpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E2NDZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2J1aWxkL3BhY2suYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9idWlsZC9wYWNrLmMKKysrKyBycG0tNC4xMS4yL2J1aWxkL3BhY2suYworQEAgLTU3MSw5ICs1NzEsOSBAQCBycG1SQyBwYWNrYWdlQmluYXJpZXMocnBtU3BlYyBzcGVjLCBjb25zCisgCSAgICBoZWFkZXJQdXRCaW4ocGtnLT5oZWFkZXIsIFJQTVRBR19TT1VSQ0VQS0dJRCwgc3BlYy0+c291cmNlUGtnSWQsMTYpOworIAl9CisgCistCWlmIChjaGVhdGluZykgeworLQkgICAgKHZvaWQpIHJwbWxpYk5lZWRzRmVhdHVyZShwa2csICJTaG9ydENpcmN1aXRlZCIsICI0LjkuMC0xIik7CistCX0KKysvLwlpZiAoY2hlYXRpbmcpIHsKKysvLwkgICAgKHZvaWQpIHJwbWxpYk5lZWRzRmVhdHVyZShwa2csICJTaG9ydENpcmN1aXRlZCIsICI0LjkuMC0xIik7CisrLy8JfQorIAkKKyAJeyAgIGNoYXIgKmJpbkZvcm1hdCA9IHJwbUdldFBhdGgoIiV7X3JwbWZpbGVuYW1lfSIsIE5VTEwpOworIAkgICAgY2hhciAqYmluUnBtLCAqYmluRGlyOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZml4X2xpYmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2ZpeF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNjI2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2ZpeF9saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworCitkaWZmIC0tZ2l0IGEvaW5zdGFsbHBsYXRmb3JtIGIvaW5zdGFsbHBsYXRmb3JtCitpbmRleCA4YzNlYmEwLi5mYTE1ZTkxIDEwMDc1NQorLS0tIGEvaW5zdGFsbHBsYXRmb3JtCisrKysgYi9pbnN0YWxscGxhdGZvcm0KK0BAIC0xMTIsNyArMTEyLDcgQEAgZm9yIEFSQ0ggaW4gbm9hcmNoIGBncmVwIF5hcmNoX2Nhbm9uICRSUE1SQyB8IGN1dCAtZDogLWYyYDsgZG8KKyAgIFsgLXogIiRDQU5PTkFSQ0giIF0gJiYgY29udGludWUKKyAKKyAgIGlmIFsgIiRPUyIgPSAibGludXgiIF0gJiYgWyAiJENBTk9OQ09MT1IiID0gMyBdOyB0aGVuCistICAgICAgTElCPSR7TElCfTY0CisrICAgICAgTElCPSR7TElCfQorICAgZmkKKyAKKyAgIFBQRD0iJHtERVNURElSfS8ke3BsYXRmb3JtZGlyfS8ke0FSQ0h9LSR7T1N9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcHl0aG9uZGVwcy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3B5dGhvbmRlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgzYjE3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3B5dGhvbmRlcHMuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK1sgJCMgLWdlIDEgXSB8fCB7CisgICAgY2F0ID4gL2Rldi9udWxsCisgICAgZXhpdCAwCit9CisKK2Nhc2UgJDEgaW4KKy1SfC0tcmVxdWlyZXMpCisgICAgc2hpZnQKKyAgICBncmVwICIvdXNyL1wobGliW14vXSpcfHNoYXJlXCkvcHl0aG9uW14vXSovIiA+L2Rldi9udWxsICYmIGVjaG8gInB5dGhvbiIKKyAgICBleGl0IDAKKyAgICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDBlNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKworRGlzYWJsZSBjb25maWd1cmluZyB0aGUgZGIzIGRpcmVjdG9yeSBzaW5jZSB3ZSB3aWxsIGJlIHVzaW5nIHRoZQorZXh0ZXJuYWwgREIgcHJvdmlkZWQgYXMgcGFydCBvZiBPRS1Db3JlIGFscmVhZHksIG5vIG5lZWQgdG8gaGF2ZQorZHVwbGljYXRlIGRhdGFiYXNlIGNvZGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcnBtLTQuMTEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTQuMTEuMi9jb25maWd1cmUuYWMKK0BAIC04MjUsOSArODI1LDkgQEAgQUNfU1VCU1QoUlBNQ09ORklHRElSKQorIAorIEFDX1NVQlNUKE9CSkRVTVApCisgCistaWYgdGVzdCAiJHdpdGhfZXh0ZXJuYWxfZGIiID0gbm87IHRoZW4KKy0gICAgQUNfQ09ORklHX1NVQkRJUlMoZGIzKQorLWZpCisrI2lmIHRlc3QgIiR3aXRoX2V4dGVybmFsX2RiIiA9IG5vOyB0aGVuCisrIyAgICBBQ19DT05GSUdfU1VCRElSUyhkYjMpCisrI2ZpCisgCisgQU1fQ09ORElUSU9OQUwoW1dJVEhfSU5URVJOQUxfREJdLFt0ZXN0ICIkd2l0aF9leHRlcm5hbF9kYiIgPSBub10pCisgQU1fQ09ORElUSU9OQUwoW0RPWFlHRU5dLFt0ZXN0ICIkRE9YWUdFTiIgIT0gbm9dKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRpci1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kaXItY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlY2FiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kaXItY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2J1aWxkL2ZpbGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvYnVpbGQvZmlsZXMuYworKysrIHJwbS00LjExLjIvYnVpbGQvZmlsZXMuYworQEAgLTEzMjEsMTIgKzEzMjEsNiBAQCBzdGF0aWMgcnBtUkMgYWRkRmlsZShGaWxlTGlzdCBmbCwgY29uc3QKKyAJfQorICAgICB9CisgCistICAgIC8qIEVycm9yIG91dCB3aGVuIGEgbm9uLWRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgYXMgb25lIGluIHNwZWMgKi8KKy0gICAgaWYgKGZsLT5jdXIuaXNEaXIgJiYgKHN0YXRwID09ICZzdGF0YnVmKSAmJiAhU19JU0RJUihzdGF0cC0+c3RfbW9kZSkpIHsKKy0JcnBtbG9nKFJQTUxPR19FUlIsIF8oIk5vdCBhIGRpcmVjdG9yeTogJXNcbiIpLCBkaXNrUGF0aCk7CistCWdvdG8gZXhpdDsKKy0gICAgfQorLQorICAgICAvKiBEb24ndCByZWN1cnNlIGludG8gZXhwbGljaXQgJWRpciwgZG9uJ3QgZG91YmxlLXJlY3Vyc2UgZnJvbSBmdHMgKi8KKyAgICAgaWYgKChmbC0+Y3VyLmlzRGlyICE9IDEpICYmIChzdGF0cCA9PSAmc3RhdGJ1ZikgJiYgU19JU0RJUihzdGF0cC0+c3RfbW9kZSkpIHsKKyAJcmV0dXJuIHJlY3Vyc2VEaXIoZmwsIGRpc2tQYXRoKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcnBtLXNjcmlwdGV0ZXhlY2hlbHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzM2RlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmVdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9wc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcHNtLmMKKysrKyBycG0tNC4xMS4yL2xpYi9wc20uYworQEAgLTQyMSw3ICs0MjEsOCBAQCBzdGF0aWMgcnBtUkMgcnVuU2NyaXB0KHJwbXBzbSBwc20sIEFSR1ZfCisgCisgICAgIHJwbXN3RW50ZXIocnBtdHNPcChwc20tPnRzLCBSUE1UU19PUF9TQ1JJUFRMRVRTKSwgMCk7CisgICAgIHJjID0gcnBtU2NyaXB0UnVuKHNjcmlwdCwgYXJnMSwgYXJnMiwgc2ZkLAorLQkJICAgICAgcHJlZml4ZXMsIHdhcm5fb25seSwgc2VsaW51eCk7CisrCQkgICAgICBwcmVmaXhlcywgd2Fybl9vbmx5LCBzZWxpbnV4LCBycG10c1Jvb3REaXIocHNtLT50cykgKTsKKysKKyAgICAgcnBtc3dFeGl0KHJwbXRzT3AocHNtLT50cywgUlBNVFNfT1BfU0NSSVBUTEVUUyksIDApOworIAorICAgICAvKiBNYXAgd2Fybi1vbmx5IGVycm9ycyB0byAibm90Zm91bmQiIGZvciBzY3JpcHQgc3RvcCBjYWxsYmFjayAqLworQEAgLTk1OCwxNSArOTU5LDQ5IEBAIHN0YXRpYyBycG1SQyBycG1wc21TdGFnZShycG1wc20gcHNtLCBwa2cKKyAgICAgY2FzZSBQU01fREVTVFJPWToKKyAJYnJlYWs7CisgICAgIGNhc2UgUFNNX1NDUklQVDoJLyogUnVuIGN1cnJlbnQgcGFja2FnZSBzY3JpcHRsZXRzLiAqLworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICB7CisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisrCisgCXJjID0gcnVuSW5zdFNjcmlwdChwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RJbigpOworKyAgICAgICAgfQorKyNlbmRpZgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiBvdGhlciBwYWNrYWdlKHMpIHRoaXMgcGFja2FnZSBzZXRzIG9mZi4gKi8KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICAgICAgeworKyAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdE91dCgpOworKyNlbmRpZgorIAlyYyA9IHJ1blRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdEluKCk7CisrICAgICAgICB9CisrI2VuZGlmCisgCWJyZWFrOworICAgICBjYXNlIFBTTV9JTU1FRF9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIHRoaXMgcGFja2FnZSBvdGhlciBwYWNrYWdlKHMpIHNldCBvZmYuICovCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJeworKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisgCXJjID0gcnVuSW1tZWRUcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290SW4oKTsKKysJfQorKyNlbmRpZgorIAlicmVhazsKKyAKKyAgICAgY2FzZSBQU01fUlBNREJfQUREOiB7CitJbmRleDogcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvbGliL3JwbXNjcmlwdC5jCisrKysgcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmMKK0BAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBycG1SQyBydW5MdWFTY3JpcHQoaW50IHNlbGludXgsIEEKKyBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IFNDUklQVF9QQVRIID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3Vzci9YMTFSNi9iaW4iOworIAorIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVJHVl9jb25zdF90IGFyZ3YsIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywKKy0JCQlGRF90IHNjcmlwdEZkLCBGRF90IG91dCkKKysJCQlGRF90IHNjcmlwdEZkLCBGRF90IG91dCwgY2hhciAqIHJvb3REaXIgKQorIHsKKyAgICAgaW50IHBpcGVzWzJdOworICAgICBpbnQgZmxhZzsKK0BAIC0xNTgsMTMgKzE1OCwxMiBAQCBzdGF0aWMgdm9pZCBkb1NjcmlwdEV4ZWMoaW50IHNlbGludXgsIEFSCisgCSAgICBzZXRlbnYoIlJQTV9JTlNUQUxMX1BSRUZJWCIsICpwZiwgMSk7CisgCX0KKyAgICAgfQorLQkKKy0gICAgaWYgKGNoZGlyKCIvIikgPT0gMCkgeworKyAgICBpZiAoY2hkaXIocm9vdERpcikgPT0gMCkgeworIAkvKiBYWFggRG9uJ3QgbXRyYWNlIGludG8gY2hpbGRyZW4uICovCisgCXVuc2V0ZW52KCJNQUxMT0NfQ0hFQ0tfIik7CisgCisgCS8qIFBlcm1pdCBsaWJzZWxpbnV4IHRvIGRvIHRoZSBzY3JpcHRsZXQgZXhlYy4gKi8KKy0JaWYgKHNlbGludXggPT0gMSkgewkKKysJaWYgKHNlbGludXggPT0gMSkgeworIAkgICAgeHggPSBycG1fZXhlY2NvbigwLCBhcmd2WzBdLCBhcmd2LCBlbnZpcm9uKTsKKyAJfQorIAorQEAgLTE3NSwxMiArMTc0LDEyIEBAIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVIKKyAgICAgX2V4aXQoMTI3KTsgLyogZXhpdCAxMjcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBiYXNoKDEpICovCisgfQorIAorLXN0YXRpYyBjaGFyICogd3JpdGVTY3JpcHQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzY3JpcHQpCisrc3RhdGljIGNoYXIgKiB3cml0ZVNjcmlwdChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnNjcmlwdCwgY2hhciAqIHJvb3REaXIpCisgeworICAgICBjaGFyICpmbiA9IE5VTEw7CisgICAgIHNpemVfdCBzbGVuID0gc3RybGVuKHNjcmlwdCk7CisgICAgIGludCBvayA9IDA7CistICAgIEZEX3QgZmQgPSBycG1Na1RlbXBGaWxlKCIvIiwgJmZuKTsKKysgICAgRkRfdCBmZCA9IHJwbU1rVGVtcEZpbGUocm9vdERpciwgJmZuKTsKKyAKKyAgICAgaWYgKEZlcnJvcihmZCkpCisgCWdvdG8gZXhpdDsKK0BAIC0yMDQsNyArMjAzLDcgQEAgZXhpdDoKKyAgKi8KKyBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsCisgCQkgICBjb25zdCBjaGFyICpzbmFtZSwgcnBtbG9nTHZsIGx2bCwgRkRfdCBzY3JpcHRGZCwKKy0JCSAgIEFSR1ZfdCAqIGFyZ3ZwLCBjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMikKKysJCSAgIEFSR1ZfdCAqIGFyZ3ZwLCBjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMixjaGFyICogcm9vdERpcikKKyB7CisgICAgIEZEX3Qgb3V0ID0gTlVMTDsKKyAgICAgY2hhciAqIGZuID0gTlVMTDsKK0BAIC0yMTUsNyArMjE0LDcgQEAgc3RhdGljIHJwbVJDIHJ1bkV4dFNjcmlwdChpbnQgc2VsaW51eCwgQQorICAgICBycG1sb2coUlBNTE9HX0RFQlVHLCAiJXM6IHNjcmlwdGxldCBzdGFydFxuIiwgc25hbWUpOworIAorICAgICBpZiAoc2NyaXB0KSB7CistCWZuID0gd3JpdGVTY3JpcHQoKmFyZ3ZwWzBdLCBzY3JpcHQpOworKwlmbiA9IHdyaXRlU2NyaXB0KCphcmd2cFswXSwgc2NyaXB0LCByb290RGlyKTsKKyAJaWYgKGZuID09IE5VTEwpIHsKKyAJICAgIHJwbWxvZyhSUE1MT0dfRVJSLAorIAkJICAgXygiQ291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIGZvciAlczogJXNcbiIpLAorQEAgLTI1OCw3ICsyNTcsNyBAQCBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBCisgICAgIH0gZWxzZSBpZiAocGlkID09IDApIHsvKiBDaGlsZCAqLworIAlycG1sb2coUlBNTE9HX0RFQlVHLCAiJXM6IGV4ZWN2KCVzKSBwaWQgJWRcbiIsCisgCSAgICAgICBzbmFtZSwgKmFyZ3ZwWzBdLCAodW5zaWduZWQpZ2V0cGlkKCkpOworLQlkb1NjcmlwdEV4ZWMoc2VsaW51eCwgKmFyZ3ZwLCBwcmVmaXhlcywgc2NyaXB0RmQsIG91dCk7CisrCWRvU2NyaXB0RXhlYyhzZWxpbnV4LCAqYXJndnAsIHByZWZpeGVzLCBzY3JpcHRGZCwgb3V0LCByb290RGlyKTsKKyAgICAgfQorIAorICAgICBkbyB7CitAQCAtMjk3LDEzICsyOTYsMjcgQEAgZXhpdDoKKyB9CisgCisgcnBtUkMgcnBtU2NyaXB0UnVuKHJwbVNjcmlwdCBzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMiwgRkRfdCBzY3JpcHRGZCwKKy0JCSAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgpCisrCQkgICBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsIGludCB3YXJuX29ubHksIGludCBzZWxpbnV4LCBjaGFyICogcm9vdERpcikKKyB7CisgICAgIEFSR1ZfdCBhcmdzID0gTlVMTDsKKyAgICAgcnBtbG9nTHZsIGx2bCA9IHdhcm5fb25seSA/IFJQTUxPR19XQVJOSU5HIDogUlBNTE9HX0VSUjsKKyAgICAgcnBtUkMgcmM7CistCistICAgIGlmIChzY3JpcHQgPT0gTlVMTCkgcmV0dXJuIFJQTVJDX09LOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrI2VuZGlmCisrIAorKyAgICAgaWYgKHNjcmlwdCA9PSBOVUxMKSByZXR1cm4gUlBNUkNfT0s7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpIHsKKysgICAgICAgYXJndkFkZCgmYXJncywgc2NyaXB0bGV0V3JhcHBlcik7CisrCisrICAgICAgIGlmICggcm9vdERpciApIHsKKysgICAgICAgICBhcmd2QWRkKCZhcmdzLCByb290RGlyKTsKKysgICAgICAgfSBlbHNlIHsKKysgICAgICAgICBhcmd2QWRkKCZhcmdzLCAiLyIpOworKyAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAgLyogY29uc3RydWN0IGEgbmV3IGFyZ3YgYXMgd2UgY2FuJ3QgbW9kaWZ5IHRoZSBvbmUgZnJvbSBoZWFkZXIgKi8KKyAgICAgaWYgKHNjcmlwdC0+YXJncykgeworQEAgLTMxNSw3ICszMjgsNyBAQCBycG1SQyBycG1TY3JpcHRSdW4ocnBtU2NyaXB0IHNjcmlwdCwgaW50CisgICAgIGlmIChyc3RyZXEoYXJnc1swXSwgIjxsdWE+IikpIHsKKyAJcmMgPSBydW5MdWFTY3JpcHQoc2VsaW51eCwgcHJlZml4ZXMsIHNjcmlwdC0+ZGVzY3IsIGx2bCwgc2NyaXB0RmQsICZhcmdzLCBzY3JpcHQtPmJvZHksIGFyZzEsIGFyZzIpOworICAgICB9IGVsc2UgeworLQlyYyA9IHJ1bkV4dFNjcmlwdChzZWxpbnV4LCBwcmVmaXhlcywgc2NyaXB0LT5kZXNjciwgbHZsLCBzY3JpcHRGZCwgJmFyZ3MsIHNjcmlwdC0+Ym9keSwgYXJnMSwgYXJnMik7CisrCXJjID0gcnVuRXh0U2NyaXB0KHNlbGludXgsIHByZWZpeGVzLCBzY3JpcHQtPmRlc2NyLCBsdmwsIHNjcmlwdEZkLCAmYXJncywgc2NyaXB0LT5ib2R5LCBhcmcxLCBhcmcyLCByb290RGlyKTsKKyAgICAgfQorICAgICBhcmd2RnJlZShhcmdzKTsKKyAKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcnBtc2NyaXB0LmgKKysrKyBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuaAorQEAgLTI5LDcgKzI5LDcgQEAgcnBtU2NyaXB0IHJwbVNjcmlwdEZyZWUocnBtU2NyaXB0IHNjcmlwdAorIAorIFJQTV9HTlVDX0lOVEVSTkFMCisgcnBtUkMgcnBtU2NyaXB0UnVuKHJwbVNjcmlwdCBzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMiwgRkRfdCBzY3JpcHRGZCwKKy0gICAgICAgICAgICAgICAgICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCk7CisrICAgICAgICAgICAgICAgICAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgsIGNoYXIgKiByb290RGlyKTsKKyAKKyBSUE1fR05VQ19JTlRFUk5BTAorIHJwbVRhZ1ZhbCBycG1TY3JpcHRUYWcocnBtU2NyaXB0IHNjcmlwdCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3N1cHBvcnQtc3VnZ2VzdHMtdGFnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTYwODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaApAQCAtMCwwICsxLDM4NCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKK2RpZmYgLS1naXQgYS9idWlsZC9wYWNrLmMgYi9idWlsZC9wYWNrLmMKK2luZGV4IGI2YjJiZWEuLjVjM2Q4ZGYgMTAwNjQ0CistLS0gYS9idWlsZC9wYWNrLmMKKysrKyBiL2J1aWxkL3BhY2suYworQEAgLTI3Myw4ICsyNzMsMTAgQEAgc3RhdGljIHJwbVRhZ1ZhbCBkZXBldnJ0YWdzW10gPSB7CisgICAgIFJQTVRBR19DT05GTElDVFZFUlNJT04sCisgICAgIFJQTVRBR19PUkRFUlZFUlNJT04sCisgICAgIFJQTVRBR19UUklHR0VSVkVSU0lPTiwKKy0gICAgUlBNVEFHX1NVR0dFU1RTVkVSU0lPTiwKKy0gICAgUlBNVEFHX0VOSEFOQ0VTVkVSU0lPTiwKKysgICAgUlBNVEFHX1NVR0dFU1RWRVJTSU9OLAorKyAgICBSUE1UQUdfRU5IQU5DRVZFUlNJT04sCisrICAgIFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OLAorKyAgICBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT04sCisgICAgIDAKKyB9OworIAorZGlmZiAtLWdpdCBhL2J1aWxkL3BhcnNlUHJlYW1ibGUuYyBiL2J1aWxkL3BhcnNlUHJlYW1ibGUuYworaW5kZXggNTc3MmJlZi4uY2JiYmVlMyAxMDA2NDQKKy0tLSBhL2J1aWxkL3BhcnNlUHJlYW1ibGUuYworKysrIGIvYnVpbGQvcGFyc2VQcmVhbWJsZS5jCitAQCAtODIxLDYgKzgyMSwxMCBAQCBzdGF0aWMgcnBtUkMgaGFuZGxlUHJlYW1ibGVUYWcocnBtU3BlYyBzcGVjLCBQYWNrYWdlIHBrZywgcnBtVGFnVmFsIHRhZywKKyAJfQorIAkvKiBmYWxsdGhyb3VnaCAqLworICAgICBjYXNlIFJQTVRBR19QUkVSRVE6CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVOREZMQUdTOgorKyAgICBjYXNlIFJQTVRBR19TVUdHRVNURkxBR1M6CisrICAgIGNhc2UgUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzoKKysgICAgY2FzZSBSUE1UQUdfRU5IQU5DRUZMQUdTOgorICAgICBjYXNlIFJQTVRBR19DT05GTElDVEZMQUdTOgorICAgICBjYXNlIFJQTVRBR19PQlNPTEVURUZMQUdTOgorICAgICBjYXNlIFJQTVRBR19QUk9WSURFRkxBR1M6CitAQCAtOTIyLDYgKzkyNiwxMCBAQCBzdGF0aWMgc3RydWN0IFByZWFtYmxlUmVjX3MgY29uc3QgcHJlYW1ibGVMaXN0W10gPSB7CisgICAgIHtSUE1UQUdfSUNPTiwJCTAsIDAsIExFTl9BTkRfU1RSKCJpY29uIil9LAorICAgICB7UlBNVEFHX1BST1ZJREVGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInByb3ZpZGVzIil9LAorICAgICB7UlBNVEFHX1JFUVVJUkVGTEFHUywJMiwgMCwgTEVOX0FORF9TVFIoInJlcXVpcmVzIil9LAorKyAgICB7UlBNVEFHX1JFQ09NTUVOREZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigicmVjb21tZW5kcyIpfSwKKysgICAge1JQTVRBR19TVUdHRVNURkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJzdWdnZXN0cyIpfSwKKysgICAge1JQTVRBR19TVVBQTEVNRU5URkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJzdXBwbGVtZW50cyIpfSwKKysgICAge1JQTVRBR19FTkhBTkNFRkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJlbmhhbmNlcyIpfSwKKyAgICAge1JQTVRBR19QUkVSRVEsCQkyLCAxLCBMRU5fQU5EX1NUUigicHJlcmVxIil9LAorICAgICB7UlBNVEFHX0NPTkZMSUNURkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJjb25mbGljdHMiKX0sCisgICAgIHtSUE1UQUdfT0JTT0xFVEVGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoIm9ic29sZXRlcyIpfSwKK2RpZmYgLS1naXQgYS9idWlsZC9wYXJzZVJlcXMuYyBiL2J1aWxkL3BhcnNlUmVxcy5jCitpbmRleCBiYTA4MGExLi4xNDI3MTExIDEwMDY0NAorLS0tIGEvYnVpbGQvcGFyc2VSZXFzLmMKKysrKyBiL2J1aWxkL3BhcnNlUmVxcy5jCitAQCAtNjEsNiArNjEsMTggQEAgcnBtUkMgcGFyc2VSQ1BPVChycG1TcGVjIHNwZWMsIFBhY2thZ2UgcGtnLCBjb25zdCBjaGFyICpmaWVsZCwgcnBtVGFnVmFsIHRhZ04sCisgCW5hbWV0YWcgPSBSUE1UQUdfUkVRVUlSRU5BTUU7CisgCXRhZ2ZsYWdzIHw9IFJQTVNFTlNFX0FOWTsKKyAJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVOREZMQUdTOgorKwluYW1ldGFnID0gUlBNVEFHX1JFQ09NTUVORE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVUdHRVNURkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfU1VHR0VTVE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVVBQTEVNRU5URkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfU1VQUExFTUVOVE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19FTkhBTkNFRkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfRU5IQU5DRU5BTUU7CisrCWJyZWFrOworICAgICBjYXNlIFJQTVRBR19QUk9WSURFRkxBR1M6CisgCW5hbWV0YWcgPSBSUE1UQUdfUFJPVklERU5BTUU7CisgCWJyZWFrOworZGlmZiAtLWdpdCBhL2J1aWxkL3JlcXByb3YuYyBiL2J1aWxkL3JlcXByb3YuYworaW5kZXggYTM2OGY0Mi4uYzI3MGFmNiAxMDA2NDQKKy0tLSBhL2J1aWxkL3JlcXByb3YuYworKysrIGIvYnVpbGQvcmVxcHJvdi5jCitAQCAtODEsNiArODEsMzAgQEAgaW50IGFkZFJlcVByb3YoUGFja2FnZSBwa2csIHJwbVRhZ1ZhbCB0YWdOLAorIAlleHRyYSA9IEZsYWdzICYgUlBNU0VOU0VfVFJJR0dFUjsKKyAJZHNwID0gJnBrZy0+dHJpZ2dlcnM7CisgCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19SRUNPTU1FTkROQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX1JFQ09NTUVORFZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfUkVDT01NRU5ERkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnJlY29tbWVuZHM7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVUdHRVNUTkFNRToKKysJdmVyc2lvbnRhZyA9IFJQTVRBR19TVUdHRVNUVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19TVUdHRVNURkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnN1Z2dlc3RzOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfU1VQUExFTUVOVE5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOworKwlleHRyYSA9IEZsYWdzICYgX0FMTF9SRVFVSVJFU19NQVNLOworKwlkc3AgPSAmcGtnLT5zdXBwbGVtZW50czsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX0VOSEFOQ0VOQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX0VOSEFOQ0VWRVJTSU9OOworKwlmbGFndGFnID0gUlBNVEFHX0VOSEFOQ0VGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+ZW5oYW5jZXM7CisrCWJyZWFrOworICAgICBjYXNlIFJQTVRBR19SRVFVSVJFTkFNRToKKyAgICAgZGVmYXVsdDoKKyAJdGFnTiA9IFJQTVRBR19SRVFVSVJFTkFNRTsKK2RpZmYgLS1naXQgYS9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oIGIvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAoraW5kZXggYTllNGM3Yy4uMGExOTc3ZiAxMDA2NDQKKy0tLSBhL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmgKKysrKyBiL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmgKK0BAIC05Myw2ICs5MywxMCBAQCBzdHJ1Y3QgUGFja2FnZV9zIHsKKyAgICAgcnBtZHMgZHM7CQkJLyohPCBSZXF1aXJlczogTiA9IEVWUiAqLworICAgICBycG1kcyByZXF1aXJlczsKKyAgICAgcnBtZHMgcHJvdmlkZXM7CisrICAgIHJwbWRzIHJlY29tbWVuZHM7CisrICAgIHJwbWRzIHN1Z2dlc3RzOworKyAgICBycG1kcyBzdXBwbGVtZW50czsKKysgICAgcnBtZHMgZW5oYW5jZXM7CisgICAgIHJwbWRzIGNvbmZsaWN0czsKKyAgICAgcnBtZHMgb2Jzb2xldGVzOworICAgICBycG1kcyB0cmlnZ2VyczsKK2RpZmYgLS1naXQgYS9idWlsZC9zcGVjLmMgYi9idWlsZC9zcGVjLmMKK2luZGV4IDcwM2VjNzguLjdhZTIxMjAgMTAwNjQ0CistLS0gYS9idWlsZC9zcGVjLmMKKysrKyBiL2J1aWxkL3NwZWMuYworQEAgLTEzOSw2ICsxMzksMTEgQEAgc3RhdGljIFBhY2thZ2UgZnJlZVBhY2thZ2UoUGFja2FnZSBwa2cpCisgICAgIHBrZy0+ZHMgPSBycG1kc0ZyZWUocGtnLT5kcyk7CisgICAgIHBrZy0+cmVxdWlyZXMgPSBycG1kc0ZyZWUocGtnLT5yZXF1aXJlcyk7CisgICAgIHBrZy0+cHJvdmlkZXMgPSBycG1kc0ZyZWUocGtnLT5wcm92aWRlcyk7CisrICAgIHBrZy0+cmVjb21tZW5kcyA9IHJwbWRzRnJlZShwa2ctPnJlY29tbWVuZHMpOworKyAgICBwa2ctPnN1Z2dlc3RzID0gcnBtZHNGcmVlKHBrZy0+c3VnZ2VzdHMpOworKyAgICBwa2ctPnN1cHBsZW1lbnRzID0gcnBtZHNGcmVlKHBrZy0+c3VwcGxlbWVudHMpOworKyAgICBwa2ctPmVuaGFuY2VzID0gcnBtZHNGcmVlKHBrZy0+ZW5oYW5jZXMpOworKworICAgICBwa2ctPmNvbmZsaWN0cyA9IHJwbWRzRnJlZShwa2ctPmNvbmZsaWN0cyk7CisgICAgIHBrZy0+b2Jzb2xldGVzID0gcnBtZHNGcmVlKHBrZy0+b2Jzb2xldGVzKTsKKyAgICAgcGtnLT50cmlnZ2VycyA9IHJwbWRzRnJlZShwa2ctPnRyaWdnZXJzKTsKK2RpZmYgLS1naXQgYS9saWIvcnBtZHMuYyBiL2xpYi9ycG1kcy5jCitpbmRleCA3YTUxMTY3Li4xZTVkZGEwIDEwMDY0NAorLS0tIGEvbGliL3JwbWRzLmMKKysrKyBiL2xpYi9ycG1kcy5jCitAQCAtNTIsNiArNTIsMjIgQEAgc3RhdGljIGludCBkc1R5cGUocnBtVGFnVmFsIHRhZywKKyAJdCA9ICJSZXF1aXJlcyI7CisgCWV2ciA9IFJQTVRBR19SRVFVSVJFVkVSU0lPTjsKKyAJZiA9IFJQTVRBR19SRVFVSVJFRkxBR1M7CisrICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19TVVBQTEVNRU5UTkFNRSkgeworKwl0ID0gIlN1cHBsZW1lbnRzIjsKKysJZXZyID0gUlBNVEFHX1NVUFBMRU1FTlRWRVJTSU9OOworKwlmID0gUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX0VOSEFOQ0VOQU1FKSB7CisrCXQgPSAiRW5oYW5jZXMiOworKwlldnIgPSBSUE1UQUdfRU5IQU5DRVZFUlNJT047CisrCWYgPSBSUE1UQUdfRU5IQU5DRUZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfUkVDT01NRU5ETkFNRSkgeworKwl0ID0gIlJlY29tbWVuZHMiOworKwlldnIgPSBSUE1UQUdfUkVDT01NRU5EVkVSU0lPTjsKKysJZiA9IFJQTVRBR19SRUNPTU1FTkRGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX1NVR0dFU1ROQU1FKSB7CisrCXQgPSAiU3VnZ2VzdHMiOworKwlldnIgPSBSUE1UQUdfU1VHR0VTVFZFUlNJT047CisrCWYgPSBSUE1UQUdfU1VHR0VTVEZMQUdTOworICAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfQ09ORkxJQ1ROQU1FKSB7CisgCXQgPSAiQ29uZmxpY3RzIjsKKyAJZXZyID0gUlBNVEFHX0NPTkZMSUNUVkVSU0lPTjsKK2RpZmYgLS1naXQgYS9saWIvcnBtdGFnLmggYi9saWIvcnBtdGFnLmgKK2luZGV4IDY0YjAzZjEuLmI5NDMyMjkgMTAwNjQ0CistLS0gYS9saWIvcnBtdGFnLmgKKysrKyBiL2xpYi9ycG10YWcuaAorQEAgLTIxNywxNCArMjE3LDE0IEBAIHR5cGVkZWYgZW51bSBycG1UYWdfZSB7CisgICAgIFJQTVRBR19QUkVUUkFOU1BST0cJCT0gMTE1MywJLyogc1tdICovCisgICAgIFJQTVRBR19QT1NUVFJBTlNQUk9HCT0gMTE1NCwJLyogc1tdICovCisgICAgIFJQTVRBR19ESVNUVEFHCQk9IDExNTUsCS8qIHMgKi8KKy0gICAgUlBNVEFHX1NVR0dFU1RTTkFNRQkJPSAxMTU2LAkvKiBzW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSNkZWZpbmUJUlBNVEFHX1NVR0dFU1RTIFJQTVRBR19TVUdHRVNUU05BTUUJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfU1VHR0VTVFNWRVJTSU9OCT0gMTE1NywJLyogc1tdIGV4dGVuc2lvbiAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX1NVR0dFU1RTRkxBR1MJPSAxMTU4LAkvKiBpW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfRU5IQU5DRVNOQU1FCQk9IDExNTksCS8qIHNbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCistI2RlZmluZQlSUE1UQUdfRU5IQU5DRVMgUlBNVEFHX0VOSEFOQ0VTTkFNRQkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19FTkhBTkNFU1ZFUlNJT04JPSAxMTYwLAkvKiBzW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfRU5IQU5DRVNGTEFHUwk9IDExNjEsCS8qIGlbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU05BTUUJPSAxMTU2LAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrI2RlZmluZQlSUE1UQUdfT0xEU1VHR0VTVFMgUlBNVEFHX09MRFNVR0dFU1RTTkFNRSAvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU1ZFUlNJT04JPSAxMTU3LAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU0ZMQUdTCT0gMTE1OCwJLyogaVtdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xERU5IQU5DRVNOQU1FCQk9IDExNTksCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysjZGVmaW5lCVJQTVRBR19PTERFTkhBTkNFUyBSUE1UQUdfT0xERU5IQU5DRVNOQU1FIC8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MREVOSEFOQ0VTVkVSU0lPTgk9IDExNjAsCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MREVOSEFOQ0VTRkxBR1MJPSAxMTYxLAkvKiBpW10gKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19QUklPUklUWQkJPSAxMTYyLCAvKiBpW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworICAgICBSUE1UQUdfQ1ZTSUQJCT0gMTE2MywgLyogcyAodW5pbXBsZW1lbnRlZCkgKi8KKyAjZGVmaW5lCVJQTVRBR19TVk5JRAlSUE1UQUdfQ1ZTSUQJLyogcyAodW5pbXBsZW1lbnRlZCkgKi8KK0BAIC0yNjEsNiArMjYxLDcgQEAgdHlwZWRlZiBlbnVtIHJwbVRhZ19lIHsKKyAgICAgUlBNVEFHX0JVSUxET0JTT0xFVEVTCT0gMTE5NCwgLyogaW50ZXJuYWwgKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19EQklOU1RBTkNFCQk9IDExOTUsIC8qIGkgZXh0ZW5zaW9uICovCisgICAgIFJQTVRBR19OVlJBCQkJPSAxMTk2LCAvKiBzIGV4dGVuc2lvbiAqLworKworICAgICAvKiB0YWdzIDE5OTctNDk5OSByZXNlcnZlZCAqLworICAgICBSUE1UQUdfRklMRU5BTUVTCQk9IDUwMDAsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX0ZJTEVQUk9WSURFCQk9IDUwMDEsIC8qIHNbXSBleHRlbnNpb24gKi8KK0BAIC0zMDcsNiArMzA4LDI2IEBAIHR5cGVkZWYgZW51bSBycG1UYWdfZSB7CisgICAgIFJQTVRBR19PQlNPTEVURU5FVlJTCT0gNTA0MywgLyogc1tdIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfQ09ORkxJQ1RORVZSUwk9IDUwNDQsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX0ZJTEVOTElOS1MJCT0gNTA0NSwJLyogaVtdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfUkVDT01NRU5ETkFNRQk9IDUwNDYsCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX1JFQ09NTUVORFMgUlBNVEFHX1JFQ09NTUVORE5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OCT0gNTA0NywJLyogc1tdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRGTEFHUwk9IDUwNDgsCS8qIGlbXSAqLworKyAgICBSUE1UQUdfU1VHR0VTVE5BTUUJCT0gNTA0OSwJLyogc1tdICovCisrI2RlZmluZQlSUE1UQUdfU1VHR0VTVFMgUlBNVEFHX1NVR0dFU1ROQU1FCS8qIHNbXSAqLworKyAgICBSUE1UQUdfU1VHR0VTVFZFUlNJT04JPSA1MDUwLAkvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVUdHRVNURkxBR1MJCT0gNTA1MSwJLyogaVtdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVE5BTUUJPSA1MDUyLAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19TVVBQTEVNRU5UUyBSUE1UQUdfU1VQUExFTUVOVE5BTUUgLyogc1tdICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTgk9IDUwNTMsCS8qIHNbXSAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVEZMQUdTCT0gNTA1NCwJLyogaVtdICovCisrICAgIFJQTVRBR19FTkhBTkNFTkFNRQkJPSA1MDU1LAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19FTkhBTkNFUyBSUE1UQUdfRU5IQU5DRU5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19FTkhBTkNFVkVSU0lPTgk9IDUwNTYsCS8qIHNbXSAqLworKyAgICBSUE1UQUdfRU5IQU5DRUZMQUdTCQk9IDUwNTcsCS8qIGlbXSAqLworKyAgICBSUE1UQUdfUkVDT01NRU5ETkVWUlMJPSA1MDU4LCAvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVUdHRVNUTkVWUlMJCT0gNTA1OSwgLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVE5FVlJTCT0gNTA2MCwgLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfRU5IQU5DRU5FVlJTCQk9IDUwNjEsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAKKyAgICAgUlBNVEFHX0ZJUlNURlJFRV9UQUcJLyohPCBpbnRlcm5hbCAqLworIH0gcnBtVGFnOworZGlmZiAtLWdpdCBhL2xpYi90YWdleHRzLmMgYi9saWIvdGFnZXh0cy5jCitpbmRleCAyOWIyYmFlLi5lOTQwMzEwIDEwMDY0NAorLS0tIGEvbGliL3RhZ2V4dHMuYworKysrIGIvbGliL3RhZ2V4dHMuYworQEAgLTc2MSw2ICs3NjEsMjYgQEAgc3RhdGljIGludCByZXF1aXJlbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorICAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19SRVFVSVJFTkFNRSk7CisgfQorIAorK3N0YXRpYyBpbnQgcmVjb21tZW5kbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfUkVDT01NRU5ETkFNRSk7CisrfQorKworK3N0YXRpYyBpbnQgc3VnZ2VzdG5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyt7CisrICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1NVR0dFU1ROQU1FKTsKKyt9CisrCisrc3RhdGljIGludCBzdXBwbGVtZW50bmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfU1VQUExFTUVOVE5BTUUpOworK30KKysKKytzdGF0aWMgaW50IGVuaGFuY2VuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19FTkhBTkNFTkFNRSk7CisrfQorKworIHN0YXRpYyBpbnQgcHJvdmlkZW5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyB7CisgICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1BST1ZJREVOQU1FKTsKK0BAIC04MjMsNiArODQzLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyVGFnRnVuY19zIHJwbUhlYWRlclRhZ0V4dGVuc2lvbnNbXSA9IHsKKyAgICAgeyBSUE1UQUdfRVBPQ0hOVU0sCQllcG9jaG51bVRhZyB9LAorICAgICB7IFJQTVRBR19JTlNURklMRU5BTUVTLAlpbnN0ZmlsZW5hbWVzVGFnIH0sCisgICAgIHsgUlBNVEFHX1JFUVVJUkVORVZSUywJcmVxdWlyZW5ldnJzVGFnIH0sCisrICAgIHsgUlBNVEFHX1JFQ09NTUVORE5FVlJTLAlyZWNvbW1lbmRuZXZyc1RhZ30sCisrICAgIHsgUlBNVEFHX1NVR0dFU1RORVZSUywJc3VnZ2VzdG5ldnJzVGFnfSwKKysgICAgeyBSUE1UQUdfU1VQUExFTUVOVE5FVlJTLAlzdXBwbGVtZW50bmV2cnNUYWd9LAorKyAgICB7IFJQTVRBR19FTkhBTkNFTkVWUlMsCWVuaGFuY2VuZXZyc1RhZ30sCisgICAgIHsgUlBNVEFHX1BST1ZJREVORVZSUywJcHJvdmlkZW5ldnJzVGFnIH0sCisgICAgIHsgUlBNVEFHX09CU09MRVRFTkVWUlMsCW9ic29sZXRlbmV2cnNUYWcgfSwKKyAgICAgeyBSUE1UQUdfQ09ORkxJQ1RORVZSUywJY29uZmxpY3RuZXZyc1RhZyB9LAorZGlmZiAtLWdpdCBhL3JwbXBvcHQuaW4gYi9ycG1wb3B0LmluCitpbmRleCA4MDU1OTllLi4wMzZhYjRlIDEwMDY0NAorLS0tIGEvcnBtcG9wdC5pbgorKysrIGIvcnBtcG9wdC5pbgorQEAgLTY3LDYgKzY3LDE5IEBAIHJwbQlhbGlhcyAtLXJlcXVpcmVzCS0tcWYgXAorIAktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgcmVxdWlyZWQgYnkgcGFja2FnZShzKSIKKyBycG0JYWxpYXMgLVIgLS1yZXF1aXJlcworIAorK3JwbQlhbGlhcyAtLXJlY29tbWVuZHMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtSRUNPTU1FTkRGTEFHUzpkZXB0eXBlfTogfTp7fXwle1JFQ09NTUVORE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgcmVjb21tZW5kZWQgYnkgcGFja2FnZShzKSIKKytycG0JYWxpYXMgLS1zdWdnZXN0cwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle1NVR0dFU1RGTEFHUzpkZXB0eXBlfTogfTp7fXwle1NVR0dFU1RORVZSU31cbl0iIFwKKysJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIHN1Z2dlc3RlZCBieSBwYWNrYWdlKHMpIgorK3JwbQlhbGlhcyAtLXN1cHBsZW1lbnRzCS0tcWYgXAorKyAgIlslfFZFUkJPU0U/eyV7U1VQUExFTUVOVEZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7U1VQUExFTUVOVE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgc3VwcGxlbWVudGVkIGJ5IHBhY2thZ2UocykiCisrcnBtCWFsaWFzIC0tZW5oYW5jZXMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtFTkhBTkNFRkxBR1M6ZGVwdHlwZX06IH06e318JXtFTkhBTkNFTkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyBlbmhhbmNlZCBieSBwYWNrYWdlKHMpIgorKworIHJwbQlhbGlhcyAtLWluZm8gLS1xZiAnXAorIE5hbWUgICAgICAgIDogJXtOQU1FfVxuXAorICV8RVBPQ0g/e0Vwb2NoICAgICAgIDogJXtFUE9DSH1cbn18XAorZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjIGIvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKK2luZGV4IGNiNGNiYmQuLjdjNDdmNmQgMTAwNjQ0CistLS0gYS90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworKysrIGIvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKK0BAIC0xMCw2ICsxMCwxMCBAQCBCdWlsZEFyY2g6CW5vYXJjaAorICV7P3Byb3ZzOlByb3ZpZGVzOiAle3Byb3ZzfX0KKyAlez9jZmxzOkNvbmZsaWN0czogJXtjZmxzfX0KKyAlez9vYnM6T2Jzb2xldGVzOiAle29ic319CisrJXs/cmVjczpSZWNvbW1lbmRzOiAle3JlY3N9fQorKyV7P3N1Z3M6U3VnZ2VzdHM6ICV7c3Vnc319CisrJXs/c3VwczpTdXBwbGVtZW50czogJXtzdXBzfX0KKyslez9lbnM6RW5oYW5jZXM6ICV7ZW5zfX0KKyAKKyAlZGVzY3JpcHRpb24KKyAle3N1bW1hcnl9CitkaWZmIC0tZ2l0IGEvdGVzdHMvcnBtYnVpbGQuYXQgYi90ZXN0cy9ycG1idWlsZC5hdAoraW5kZXggNjIzMDkwMy4uYzRjOTU0YyAxMDA2NDQKKy0tLSBhL3Rlc3RzL3JwbWJ1aWxkLmF0CisrKysgYi90ZXN0cy9ycG1idWlsZC5hdAorQEAgLTE4NSwzICsxODUsMjUgQEAgbHJ3eHJ3eHJ3eCAvb3B0L2dsb2J0ZXN0L2xpbmtnb29kCisgXSwKKyBbXSkKKyBBVF9DTEVBTlVQCisrCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrIGlmIHdlYWsgYW5kIHJldmVyc2UgcmVxdWlyZXMgY2FuIGJlIGJ1aWx0CisrQVRfU0VUVVAoW1dlYWsgYW5kIHJldmVyc2UgcmVxdWlyZXNdKQorK0FUX0tFWVdPUkRTKFtidWlsZF0pCisrQVRfQ0hFQ0soWworKworK3J1bnJvb3QgcnBtYnVpbGQgLWJiIC0tcXVpZXQgXAorKwktLWRlZmluZSAicGtnIHdlYWtkZXBzIiBcCisrCS0tZGVmaW5lICJyZWNzIGZvbyA+IDEuMi4zIiBcCisrCS0tZGVmaW5lICJzdWdzIGJhciA+PSAwLjEuMiIgXAorKwktLWRlZmluZSAic3VwcyBiYXoiIFwKKysJLS1kZWZpbmUgImVucyB6YXAgPSAzIiBcCisrCSAgL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjCisrCisrcnVucm9vdCBycG0gLXFwIC0tcWYgIlsle3N1cHBsZW1lbnRuYW1lfVxuXSIgL2J1aWxkL1JQTVMvbm9hcmNoL2RlcHRlc3Qtd2Vha2RlcHMtMS4wLTEubm9hcmNoLnJwbQorK10sCisrWzBdLAorK1tiYXoKKytdLAorK1tpZ25vcmVdKQorK0FUX0NMRUFOVVAKK2RpZmYgLS1naXQgYS90ZXN0cy9ycG1nZW5lcmFsLmF0IGIvdGVzdHMvcnBtZ2VuZXJhbC5hdAoraW5kZXggMTMxMzFlMi4uODBjY2E2MyAxMDA2NDQKKy0tLSBhL3Rlc3RzL3JwbWdlbmVyYWwuYXQKKysrKyBiL3Rlc3RzL3JwbWdlbmVyYWwuYXQKK0BAIC03OSw2ICs3OSwxMSBAQCBESVNUVEFHCisgRElTVFVSTAorIERTQUhFQURFUgorIEUKKytFTkhBTkNFRkxBR1MKKytFTkhBTkNFTkFNRQorK0VOSEFOQ0VORVZSUworK0VOSEFOQ0VTCisrRU5IQU5DRVZFUlNJT04KKyBFUE9DSAorIEVQT0NITlVNCisgRVZSCitAQCAtMTk5LDYgKzIwNCwxMSBAQCBQUk9WSURFUworIFBST1ZJREVWRVJTSU9OCisgUFVCS0VZUworIFIKKytSRUNPTU1FTkRGTEFHUworK1JFQ09NTUVORE5BTUUKKytSRUNPTU1FTkRORVZSUworK1JFQ09NTUVORFMKKytSRUNPTU1FTkRWRVJTSU9OCisgUkVDT05URVhUUworIFJFTEVBU0UKKyBSRU1PVkVUSUQKK0BAIC0yMTksNyArMjI5LDE3IEBAIFNPVVJDRQorIFNPVVJDRVBBQ0tBR0UKKyBTT1VSQ0VQS0dJRAorIFNPVVJDRVJQTQorK1NVR0dFU1RGTEFHUworK1NVR0dFU1ROQU1FCisrU1VHR0VTVE5FVlJTCisrU1VHR0VTVFMKKytTVUdHRVNUVkVSU0lPTgorIFNVTU1BUlkKKytTVVBQTEVNRU5URkxBR1MKKytTVVBQTEVNRU5UTkFNRQorK1NVUFBMRU1FTlRORVZSUworK1NVUFBMRU1FTlRTCisrU1VQUExFTUVOVFZFUlNJT04KKyBUUklHR0VSQ09ORFMKKyBUUklHR0VSRkxBR1MKKyBUUklHR0VSSU5ERVgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDg0Y2Y4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvdXNlLXBrZ2NvbmZpZy1mb3ItcHl0aG9uLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKKworVXNlIHBrZ2NvbmZpZyB0byBnZXQgdGhlIGNvcnJlY3QgaW5jbHVkZSBwYXRocworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU5N2Y3MjcuLjgxNzlmNDQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU0MCwxMCArNTQwLDEwIEBAIGVzYWNdLAorIAorIEFTX0lGKFt0ZXN0ICIkZW5hYmxlX3B5dGhvbiIgPSB5ZXNdLFsKKyAgIEFNX1BBVEhfUFlUSE9OKFsyLjZdLFsKKy0gICAgV0lUSF9QWVRIT05fSU5DTFVERT1gJHtQWVRIT059IC1jICdmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0ICo7IGltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoZ2V0X3B5dGhvbl9pbmMoKSknYAorKyAgICBXSVRIX1BZVEhPTl9JTkNMVURFPSQoJHtQS0dfQ09ORklHfSAtLWNmbGFncy1vbmx5LUkgIHB5dGhvbikKKyAgICAgV0lUSF9QWVRIT05fU1VCUEFDS0FHRT0xCisgICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKy0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRXSVRIX1BZVEhPTl9JTkNMVURFIgorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRXSVRIX1BZVEhPTl9JTkNMVURFIgorICAgICBBQ19DSEVDS19IRUFERVIoW1B5dGhvbi5oXSxbXSwKKyAgICAgICBbQUNfTVNHX0VSUk9SKFttaXNzaW5nIFB5dGhvbi5oXSkKKyAgICAgICBdKQorZGlmZiAtLWdpdCBhL3B5dGhvbi9NYWtlZmlsZS5hbSBiL3B5dGhvbi9NYWtlZmlsZS5hbQoraW5kZXggZmZmNTFhZS4uZjM3Y2I5ZCAxMDA2NDQKKy0tLSBhL3B5dGhvbi9NYWtlZmlsZS5hbQorKysrIGIvcHl0aG9uL01ha2VmaWxlLmFtCitAQCAtNCw3ICs0LDcgQEAgRVhUUkFfRElTVCA9IHJwbS9fX2luaXRfXy5weSBycG0vdHJhbnNhY3Rpb24ucHkKKyAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvCisgQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9zcmNkaXIpL3B5dGhvbgorLUFNX0NQUEZMQUdTICs9IC1JQFdJVEhfUFlUSE9OX0lOQ0xVREVACisrQU1fQ1BQRkxBR1MgKz0gQFdJVEhfUFlUSE9OX0lOQ0xVREVACisgCisgcGtncHlleGVjX0xUTElCUkFSSUVTID0gX3JwbW1vZHVsZS5sYSBfcnBtYm1vZHVsZS5sYSBfcnBtc21vZHVsZS5sYQorIHBrZ3B5ZXhlY19EQVRBID0gcnBtL19faW5pdF9fLnB5IHJwbS90cmFuc2FjdGlvbi5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLzAwMDEtdXNpbmctcG9wdFBhcnNlQXJndlN0cmluZy10by1wYXJzZS10aGUtX2dwZ19jaGVja19wYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2JjMzM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA2NDg1MWM2NjIyYWZmNjQ3ODdhOWZjZWEyNmNjY2RlMTgzYjdjNzQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIlJveS5MaSIgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDExIE5vdiAyMDE0IDE2OjI4OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzaW5nIHBvcHRQYXJzZUFyZ3ZTdHJpbmcgdG8gcGFyc2UgdGhlCisgX2dwZ19jaGVja19wYXNzd29yZF9jbWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0JvdGggX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kIGFuZCBfX2dwZ19zaWduX2NtZCBpbmNsdWRlICIle19ncGdfbmFtZX0iLCBidXQKK3N0cmFjZSBzaG93cyB0aGF0IGdwZ19uYW1lIGhhcyBhIHF1b3RlIHdoZW4gcnVuIF9ncGdfY2hlY2tfcGFzc3dvcmQsCitidXQgbm90IHdoZW4gcnVuIF9fZ3BnX3NpZ25fY21kOyBmb3IgZXhhbXBsZSwgaWYgZ3BnX25hbWUgaXMgInRlc3RlciIKKworICAgIGV4ZWN2ZSgiL3Vzci9iaW4vZ3BnIiwgWyJncGciLCAiLS1iYXRjaCIsICItLW5vLXZlcmJvc2UiLAorICAgICItLXBhc3NwaHJhc2UtZmQiLCAiMyIsICItdSIsICJcInRlc3RlclwiIiwgIi1zbyIsICItIl0sIFsvKiAyMCB2YXJzICovXSkgPSAwCisKKyAgICBleGVjdmUoIi91c3IvYmluL2dwZyIsIFsiZ3BnIiwgIi0tYmF0Y2giLCAiLS1uby12ZXJib3NlIiwgIi0tbm8tYXJtb3IiLAorICAgICItLXBhc3NwaHJhc2UtZmQiLCAiMyIsICItLW5vLXNlY21lbS13YXJuaW5nIiwgIi11IiwgInRlc3RlciIsICItc2JvIi4uLCkgPSAwCisKK2l0IGNhbiBiZSBmaXhlZCBieSByZW1vdmluZyB0aGUgcXVvdGUgYXJvdW5kICV7Z3BnX25hbWV9IHdoZW4gZGVmaW5lCitfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgaW4gbWFjcm9zL21hY3JvcywgbGlrZSBiZWxvdywgYnV0IGlmIGdwZ19uYW1lIGluY2x1ZGVzCitzcGFjZSwgaXQgd2lsbCBub3Qgd29yay4KKworICAgICAlX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kICAgICAgICV7X19ncGd9IFwKKyAgICAgICAgZ3BnIC0tYmF0Y2ggLS1uby12ZXJib3NlIC0tcGFzc3BocmFzZS1mZCAzIC11ICV7X2dwZ19uYW1lfSAtc28gLQorCitUaGUgcG9wdFBhcnNlQXJndlN0cmluZyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIF9ncGdfc2lnbl9jbWQsIHNvIHVzaW5nCitwb3B0UGFyc2VBcmd2U3RyaW5nIHRvIHBhcnNlIF9fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZCB0byBmaXggdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgcnBtZGIvc2lnbmF0dXJlLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ycG1kYi9zaWduYXR1cmUuYyBiL3JwbWRiL3NpZ25hdHVyZS5jCitpbmRleCBjMzVlMGFiLi4wMTZlOGQxIDEwMDY0NAorLS0tIGEvcnBtZGIvc2lnbmF0dXJlLmMKKysrKyBiL3JwbWRiL3NpZ25hdHVyZS5jCitAQCAtNTI5LDcgKzUyOSw3IEBAIGludCBycG1DaGVja1Bhc3NQaHJhc2UoY29uc3QgY2hhciAqIHBhc3NQaHJhc2UpCisgICAJCSh2b2lkKSBzZXRlbnYoIkdOVVBHSE9NRSIsIGdwZ19wYXRoLCAxKTsKKyAKKyAJICAgIGNtZCA9IHJwbUV4cGFuZCgiJXs/X19ncGdfY2hlY2tfcGFzc3dvcmRfY21kfSIsIE5VTEwpOworLQkgICAgcmMgPSBhcmd2U3BsaXQoJmF2LCBjbWQsIE5VTEwpOworKwkgICAgcmMgPSBwb3B0UGFyc2VBcmd2U3RyaW5nKGNtZCwgTlVMTCwgKGNvbnN0IGNoYXIgKioqKSZhdik7CisgCSAgICBpZiAoIXJjKQorIAkJcmMgPSBleGVjdmUoYXZbMF0sIChjaGFyICpjb25zdCAqKWF2KzEsIGVudmlyb24pOworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGJjb252ZXJ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZGJmMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworSGFjayB0byBwcmV2ZW50IHVubmVlZGVkIGRlbW8gYXBwIGZyb20gYnVpbGRpbmcgb24gb2xkZXIgbGliYword2hlcmUgaXQgd2lsbCBicmVhayB0aGUgYnVpbGQKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCitAQCAtMjksNyArMjksNyBAQCBFWFRSQV9QUk9HUkFNUyA9IG5peC1jb3B5LWNsb3N1cmUgbml4LWVuCisgCXhpdS1pbnN0YW50aWF0ZSB4aXUtc3RvcmUKKyBub2luc3RfUFJPR1JBTVMgPQorIAorLUVYVFJBX1BST0dSQU1TICs9IGF1Z3Rvb2wgY3VkZnRvb2wgZGJjb252ZXJ0IGRlYnVnZWRpdCBcCisrRVhUUkFfUFJPR1JBTVMgKz0gYXVndG9vbCBjdWRmdG9vbCBkZWJ1Z2VkaXQgXAorIAluaXgtYnVpbGQgbml4LWNoYW5uZWwgbml4LWNvbGxlY3QtZ2FyYmFnZSBcCisgCW5peC1sb2cyeG1sIG5peC1wcmVmZXRjaC11cmwgbml4LXB1bGwgbml4LXB1c2ggXAorIAl4aXUtZWNobyB4aXUtaGFzaCBcCitAQCAtNjQsNyArNjQsNyBAQCBwa2diaW5fUFJPR1JBTVMgPQlcCisgCXJwbWNhY2hlIHJwbWRpZ2VzdCBycG1yZXBvIHJwbXNwZWNkdW1wIFwKKyAJcnBtY21wIHJwbWRlcHMgcnBtZGVwcy1vZWNvcmUgc3FsaXRlMyBAV0lUSF9LRVlVVElMU19SUE1LRVlAIEBXSVRIX0xJQkVMRl9ERUJVR0VESVRACisgaWYgV0lUSF9EQgorLXBrZ2Jpbl9QUk9HUkFNUyArPQlkYmNvbnZlcnQKKytwa2diaW5fUFJPR1JBTVMgKz0JCisgZW5kaWYKKyBkaXN0X21hbl9NQU5TID0JCXJwbWdyZXAuMQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtc2Vndi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXNlZ3YucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlZjVlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXNlZ3YucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRHVyaW5nIHRoZSByZWNhbGN1bGF0aW9uIG9mIHRoZSBidWlsZGlkLCBpdCdzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIHdvcmQKK2JhY2sgdG8gdGhlIG9yaWdpbmFsIGVuZGlhbi4gIEhvd2V2ZXIsIGlmIHdlIGRvIHRoaXMgaW4tcGxhY2UsIHdlJ3ZlIGFsc28KK2FmZmVjdGVkIHRoZSBoZWFkZXJzIHRoYXQgd2UncmUgYWxzbyB3b3JraW5nIG9uLiAgVGhlIHNpZGUgZWZmZWN0IG9mIHRoaXMgaXMKK3dlIGNhbiBubyBsb25nZXIgcmVseSBvbiAnc2hfdHlwZScgYXMgaXQgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBhbnkgdGltZSB3ZSB0cmFuc2xhdGUgdGhlIGxvYWRlZCBkYXRhIHRvIHRoZSBtYWNoaW5lCitmb3JtYXQsIHdlIG9ubHkgZG8gaXQgaW4gYSBiYWNrdXAgY29weSBhbmQgbmV2ZXIgdGhlIG9yaWdpbmFsIGNvcHkuCisKK05vdGU6IGluIGFsbCBvdGhlciBwbGFjZXMgYSBiYWNrdXAgY29weSB3YXMgdXNlZCwganVzdCBub3QgYnVpbGRpZCBwcm9jZXNzaW5nLgorCitBbHNvIHRoZSBwcm9jZXNzICguLi4pIGZ1bmN0aW9uIHdhcyBtb2RpZmllZCB0byB2ZXJpZnkgdGhlIGRhdGEgaXMgbm90CitOVUxMIGFzIHdlbGwuICBUaGlzIGlzIGFuIGV4dHJhIGNoZWNrIGFuZCBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9kZWJ1Z2VkaXQuYworKysrIHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKK0BAIC0xNDQ1LDIxICsxNDQ1LDI0IEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAgICAgYXV0byBpbmxpbmUgdm9pZCBwcm9jZXNzIChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICAgeworICAgICAgIG1lbWNodW5rIGNodW5rID0geyAuZGF0YSA9ICh2b2lkICopIGRhdGEsIC5zaXplID0gc2l6ZSB9OworLSAgICAgIGhhc2hGdW5jdGlvbkNvbnRleHRVcGRhdGVNQyAoJmN0eCwgJmNodW5rKTsKKysgICAgICBpZiAoZGF0YSAhPSBOVUxMICYmIHNpemUgIT0gMCkKKysgICAgICAgIGhhc2hGdW5jdGlvbkNvbnRleHRVcGRhdGVNQyAoJmN0eCwgJmNodW5rKTsKKyAgICAgfQorICAgICB1bmlvbgorICAgICB7CisgICAgICAgR0VsZl9FaGRyIGVoZHI7CisgICAgICAgR0VsZl9QaGRyIHBoZHI7CisgICAgICAgR0VsZl9TaGRyIHNoZHI7CistICAgIH0gdTsKKy0gICAgRWxmX0RhdGEgeCA9IHsgLmRfdmVyc2lvbiA9IEVWX0NVUlJFTlQsIC5kX2J1ZiA9ICZ1IH07CisrICAgIH0gdTEsIHUyOworKyAgICBFbGZfRGF0YSBzcmMgID0geyAuZF92ZXJzaW9uID0gRVZfQ1VSUkVOVCwgLmRfYnVmID0gJnUxIH07CisrICAgIEVsZl9EYXRhIGRlc3QgPSB7IC5kX3ZlcnNpb24gPSBFVl9DVVJSRU5ULCAuZF9idWYgPSAmdTIgfTsKKyAKKy0gICAgeC5kX3R5cGUgPSBFTEZfVF9FSERSOworLSAgICB4LmRfc2l6ZSA9IHNpemVvZiB1LmVoZHI7CistICAgIHUuZWhkciA9IGRzby0+ZWhkcjsKKy0gICAgdS5laGRyLmVfcGhvZmYgPSB1LmVoZHIuZV9zaG9mZiA9IDA7CistICAgIGlmIChlbGY2NF94bGF0ZXRvbSAoJngsICZ4LCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKysgICAgc3JjLmRfdHlwZSA9IEVMRl9UX0VIRFI7CisrICAgIHNyYy5kX3NpemUgPSBzaXplb2YgdTEuZWhkcjsKKysgICAgZGVzdC5kX3NpemUgPSBzaXplb2YgdTIuZWhkcjsKKysgICAgdTEuZWhkciA9IGRzby0+ZWhkcjsKKysgICAgdTEuZWhkci5lX3Bob2ZmID0gdTEuZWhkci5lX3Nob2ZmID0gMDsKKysgICAgaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgICAgICAgeworICAgICAgIGJhZDoKKyAJZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIGNvbXB1dGUgaGVhZGVyIGNoZWNrc3VtOiAlc1xuIiwKK0BAIC0xNDY3LDI5ICsxNDcwLDMxIEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAJZXhpdCAoMSk7CisgICAgICAgfQorIAorLSAgICB4LmRfdHlwZSA9IEVMRl9UX1BIRFI7CistICAgIHguZF9zaXplID0gc2l6ZW9mIHUucGhkcjsKKysgICAgc3JjLmRfdHlwZSA9IEVMRl9UX1BIRFI7CisrICAgIHNyYy5kX3NpemUgPSBzaXplb2YgdTEucGhkcjsKKysgICAgZGVzdC5kX3NpemUgPSBzaXplb2YgdTIucGhkcjsKKyAgICAgZm9yIChpID0gMDsgaSA8IGRzby0+ZWhkci5lX3BobnVtOyArK2kpCisgICAgICAgeworLQlpZiAoZ2VsZl9nZXRwaGRyIChkc28tPmVsZiwgaSwgJnUucGhkcikgPT0gTlVMTCkKKysJaWYgKGdlbGZfZ2V0cGhkciAoZHNvLT5lbGYsIGksICZ1MS5waGRyKSA9PSBOVUxMKQorIAkgIGdvdG8gYmFkOworLQlpZiAoZWxmNjRfeGxhdGV0b20gKCZ4LCAmeCwgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisrCWlmIChlbGY2NF94bGF0ZXRvbSAoJmRlc3QsICZzcmMsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorIAkgIGdvdG8gYmFkOworLQlwcm9jZXNzICh4LmRfYnVmLCB4LmRfc2l6ZSk7CisrCXByb2Nlc3MgKGRlc3QuZF9idWYsIGRlc3QuZF9zaXplKTsKKyAgICAgICB9CisgCistICAgIHguZF90eXBlID0gRUxGX1RfU0hEUjsKKy0gICAgeC5kX3NpemUgPSBzaXplb2YgdS5zaGRyOworKyAgICBzcmMuZF90eXBlID0gRUxGX1RfU0hEUjsKKysgICAgc3JjLmRfc2l6ZSA9IHNpemVvZiB1MS5zaGRyOworKyAgICBkZXN0LmRfc2l6ZSA9IHNpemVvZiB1Mi5zaGRyOworICAgICBmb3IgKGkgPSAwOyBpIDwgZHNvLT5laGRyLmVfc2hudW07ICsraSkKKyAgICAgICBpZiAoZHNvLT5zY25baV0gIT0gTlVMTCkKKyAJeworLQkgIHUuc2hkciA9IGRzby0+c2hkcltpXTsKKy0JICB1LnNoZHIuc2hfb2Zmc2V0ID0gMDsKKy0JICBpZiAoZWxmNjRfeGxhdGV0b20gKCZ4LCAmeCwgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisrCSAgdTEuc2hkciA9IGRzby0+c2hkcltpXTsKKysJICB1MS5zaGRyLnNoX29mZnNldCA9IDA7CisrCSAgaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgCSAgICBnb3RvIGJhZDsKKy0JICBwcm9jZXNzICh4LmRfYnVmLCB4LmRfc2l6ZSk7CisrCSAgcHJvY2VzcyAoZGVzdC5kX2J1ZiwgZGVzdC5kX3NpemUpOworIAorLQkgIGlmICh1LnNoZHIuc2hfdHlwZSAhPSBTSFRfTk9CSVRTKQorKwkgIGlmICh1MS5zaGRyLnNoX3R5cGUgIT0gU0hUX05PQklUUykKKyAJICAgIHsKKyAJICAgICAgRWxmX0RhdGEgKmQgPSBlbGZfcmF3ZGF0YSAoZHNvLT5zY25baV0sIE5VTEwpOworIAkgICAgICBpZiAoZCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjMzEwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorZGVidWdlZGl0OiBmaXggc2VnbWVudCBmYXVsdCB3aGlsZSBmaWxlJ3MgYnNzIG9mZnNldCBoYXZlIGEgbGFyZ2UgbnVtYmVyCisKK1doaWxlIEVMRl9DX1JEV1JfTU1BUCB3YXMgdXNlZCwgZWxmX2JlZ2luIGludm9rZWQgbW1hcCgpIHRvIG1hcCBmaWxlCitpbnRvIG1lbW9yeS4gV2hpbGUgdGhlIGZpbGUncyBic3MgT2Zmc2V0IGhhcyBhIGxhcmdlIG51bWJlciwgZWxmX3VwZGF0ZQorY2FjdWxhdGVkIGZpbGUgc2l6ZSBieSBfX2VsZjY0X3VwZGF0ZW51bGxfd3Jsb2NrIGFuZCB0aGUgc2l6ZSB3YXMKK2VubGFyZ2VkLgorCitJbiB0aGlzIHNpdHVhdGlvbiwgZWxmX3VwZGF0ZSBpbnZva2VkIGZ0cnVuY2F0ZSB0byBlbmxhcmdlIHRoZSBmaWxlLAorYW5kIG1lbW9yeSBzaXplIChlbGYtPm1heGltdW1fc2l6ZSkgYWxzbyB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZC4KK1RoZXJlIHdhcyBzZWdtZW50IGZhdWx0IGluIGVsZl9lbmQgd2hpY2ggaW52b2tlZCBtdW5tYXAgd2l0aCB0aGUKK2xlbmd0aCBpcyB0aGUgZW5sYXJnZWQgZmlsZSBzaXplLCBub3QgdGhlIG1tYXAncyBsZW5ndGguCisKK0JlZm9yZSB0aGUgYWJvdmUgb3BlcmF0aW9ucywgaW52b2tlIGVsZl9iZWdpbi9lbGZfdXBkYXRlL2VsZl9lbmQKK3dpdGggRUxGX0NfUkRXUiBhbmQgRUxGX0ZfTEFZT1VUIHNldCB0byBlbmxhcmdlIHRoZSBhYm92ZSBmaWxlLCBpdAorY291bGQgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHNhZmUgZm9yIHRoZSBmb2xsb3dpbmcgZWxmIG9wZXJhdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvZGVidWdlZGl0LmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvZGVidWdlZGl0LmMKKysrKyBycG0tNS40LjE0L3Rvb2xzL2RlYnVnZWRpdC5jCitAQCAtMTUyNSw2ICsxNTI1LDI4IEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAgIH0KKyB9CisgCisrLyogSXQgYXZvaWRlZCB0aGUgc2VnbWVudCBmYXVsdCB3aGlsZSBmaWxlJ3MgYnNzIG9mZnNldCBoYXZlIGEgbGFyZ2UgbnVtYmVyLgorKyAgIFNlZSBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTEwMTk3MDcKKysgICAgICAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDIwODQyIGZvciBkZXRhaWwuICovCisrdm9pZCB2YWxpZF9maWxlKGludCBmZCkKKyt7CisrICBFbGYgKmVsZiA9IGVsZl9iZWdpbiAoZmQsIEVMRl9DX1JEV1IsIE5VTEwpOworKyAgaWYgKGVsZiA9PSBOVUxMKQorKyAgeworKyAgICBlcnJvciAoMSwgMCwgImVsZl9iZWdpbjogJXMiLCBlbGZfZXJybXNnICgtMSkpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBlbGZfZmxhZ2VsZiAoZWxmLCBFTEZfQ19TRVQsIEVMRl9GX0xBWU9VVCk7CisrCisrICBpZiAoZWxmX3VwZGF0ZSAoZWxmLCBFTEZfQ19XUklURSkgPCAwKQorKyAgICBlcnJvciAoMSwgMCwgImVsZl91cGRhdGU6ICVzIiwgZWxmX2Vycm1zZyAoLTEpKTsKKysKKysgIGVsZl9lbmQgKGVsZik7CisrCisrICByZXR1cm47CisrfQorKworIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworQEAgLTE2MjEsNiArMTY0Myw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgZXhpdCAoMSk7CisgICAgIH0KKyAKKysgIC8qIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB2YWxpZC4gKi8KKysgIHZhbGlkX2ZpbGUoZmQpOworKworICAgZHNvID0gZmRvcGVuX2RzbyAoZmQsIGZpbGUpOworICAgaWYgKGRzbyA9PSBOVUxMKQorICAgICBleGl0ICgxKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmFmNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1NvbWUgb3B0aW9ucyBjaGVja2VkIGluIHRoaXMgbG9vcCBhcmUgbmVlZGluZyBsaW5raW5nIHRvIGZpbmQgb3V0CitpZiB0aGUgb3B0aW9uIGNhbiBiZSB1c2VkIG9yIG5vdCBlLmcuIC1mc3RhY2stcHJvdGVjdG9yIHdoaWNoIG5lZWRzCitsaWJzc3AgdG8gYmUgc3RhZ2VkIGFuZCBhdmFpbGFibGUgZm9yIGNvbXBpbGVyIHRvIGxpbmsgYWdhaW5zdAorVGhlcmVmb3JlIHdlIGNoYW5nZSB0aGUgY29tcGlsZSBvbmx5IGNoZWNrIHRvIGNvbXBpbGUgYW5kIGxpbmsgY2hlY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0yMDEsNyArMjAxLDcgQEAgZG5sICMgR05VIEdDQyAodXN1YWxseSAiZ2NjIikKKyAgbXlfc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgIENGTEFHUz0kYworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgR0NDIHN1cHBvcnRzICRjXSkKKy0gQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSldLAorKyBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdKV0sCisgICAgIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKV0KKyAgICAgW215X2NmbGFncz0kY10sCisgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmZiMTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtZGIuaAorKysrIHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuaAorQEAgLTksNiArOSw3IEBACisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxtaXJlLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisgCisgI2luY2x1ZGUgPHJwbXR5cGVzLmg+CisgI2luY2x1ZGUgPHJwbXRhZy5oPgkvKiBYWFggSGVhZGVyIHR5cGVkZWYgKi8KK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbXRhZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL3JwbXRhZy5oCisrKysgcnBtLTUuNC4xNC9ycG1kYi9ycG10YWcuaAorQEAgLTcsNiArNyw3IEBACisgCisgI2luY2x1ZGUgPHJwbWlvdHlwZXMuaD4KKyAjaW5jbHVkZSA8cnBtc3cuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWI5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaApAQCAtMCwwICsxLDMzIEBACitycG06IFJlc29sdmUgcGFyYWxsZWwgaW5zdGFsbCBpc3N1ZSB3aGVuIGluc3RhbGxpbmcgbHVhCisKK1doZW4gbHVhIGlzIGJlaW5nIGluc3RhbGxlZCBvbiBzb21lIHN5c3RlbXMgdGhhdCBhcmUgYmVpbmcgcnVuIHdpdGggaGlnaCBsZXZlbHMKK29mIHBhcmFsbGVsaXphdGlvbiB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgaW5zdGFsbC1kYXRhLWFtIGFuZCBpbnN0YWxsLWV4ZWMtaG9vaworYXJlIHByb2Nlc3NlZCBhdCB0aGUgc2FtZSBvciBhIHZlcnkgc2hvcnQgdGltZSBhcGFydC4gVGhpcyBjYXVzZXMKK2luc3RhbGwtcGtnYmluUFJPR1JBTVMsIHdoaWNoIGlzIGEgZGVwZW5kZW5jeSBvZiBib3RoLCB0byBiZSBydW4gYXQgYXJvdW5kIHRoZQorc2FtZSB0aW1lIFRoaXMgc29tZXRpbWVzIGNhdXNlcyBmaWxlIGNvbnRlbnRpb24gYW5kIHdpbGwgc29tZXRpbWVzIGJlIGluIGEgc3RhdGUKK3doZXJlIGluc3RhbGwtZXhlYy1ob29rIGlzIGxvb2tpbmcgZm9yIGEgZmlsZSB0aGF0IGlzIGJlaW5nIGluc3RhbGxlZCBvciBib3RoCitpbnN0YWxsLXBrZ2JpblBST0dSQU1TIGJlaW5nIHJ1biBhcmUgaW5zdGFsbGluZyB0aGUgc2FtZSBmaWxlIGFuZCBmYWlsIGJlY2F1c2UKK2l0IGNhbm5vbiBjcmVhdGUgYSBuZXcgZmlsZS4KKworVGhpcyBwYXRjaCBhbGxvd3MgaW5zdGFsbC1leGVjLWhvb2sgdG8gYmUgY2FsbGVkIGJ5IGluc3RhbGwtZGF0YS1hbSBpbnN0ZWFkIG9mCitpbnN0YWxsLWV4ZWMtYW0uIEl0IGFsc28gcmVtb3ZlZCB0aGUgZGVwZW5kZW5jeSBpbiBpbnN0YWxsLWRhdGEtaG9vayBvbgoraW5zdGFsbC1wa2diaW5QUk9HUkFNUy4gVGhpcyBtZWFucyBpbnN0YWxsLXBrZ2JpblBST0dSQU1TIHdpbGwgb25seSBiZSBydW4gb25jZQorc28gdGhlcmUgd2hvdWxkIGJlIGFueSBmaWxlIGNvbnRlbnRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNb3JnYW4gTGl0dGxlIDxtb3JnYW4ubGl0dGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9sdWEvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorQEAgLTMyNiw3ICszMjYsNyBAQCBjbGVhbi1sb2NhbDoKKyAjIFhYWCBCdWlsZCAmIGluc3RhbGwgYXMgcnBtbHVhL3JwbWx1YWMgd2l0aCBoYXJkbGlua3MgdG8gbHVhL2x1YWMgcG9zdCBpbnN0YWxsLgorICMgWFhYIENWUyBoYXMgbHVhL2x1YWMgc3ViLWRpcmVjdG9yaWVzIGluIHRoZSBBdHRpYyB0aGF0IGNvbGxpZGUgd2l0aCB0aGUKKyAjIFhYWCBsdWEvbHVhYyBleGVjdXRhYmxlIG5hbWVzIHdoZW4gdXNpbmcgY3ZzIHVwZGF0ZS4KKy1pbnN0YWxsLWV4ZWMtaG9vazoJaW5zdGFsbC1wa2diaW5QUk9HUkFNUworK2luc3RhbGwtZGF0YS1ob29rOgkKKyAJbWtkaXIgLXAgJChERVNURElSKSQocGtnYmluZGlyKQorIAkkKF9fUk0pIC1mICQoREVTVERJUikkKHBrZ2JpbmRpcikvbHVhCisgCSQoX19MTikgJChERVNURElSKSQocGtnYmluZGlyKS9ycG1sdWEgJChERVNURElSKSQocGtnYmluZGlyKS9sdWEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDYyM2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK0Rvbid0IHB1dCBMREZMQUdTIGludG8gdGhlIExpYnMucHJpdmF0ZSwgYWxsIGl0IGdlbmVyYWxseSBjb250YWlucyBpcyBhIGxpbmtlcgoraGFzaCBzZWxlY3Rpb24gKGhhcm1sZXNzKSBhbmQgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxpYmRpciBpbiB0aGUgc3lzcm9vdAorKGFjdGl2ZWx5IGhhcm1mdWwpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zY3JpcHRzL3JwbS5wYy5pbiBiL3NjcmlwdHMvcnBtLnBjLmluCitpbmRleCA4MjkzNDcxLi4yZWE0NjljIDEwMDY0NAorLS0tIGEvc2NyaXB0cy9ycG0ucGMuaW4KKysrKyBiL3NjcmlwdHMvcnBtLnBjLmluCitAQCAtMTcgKzE3IEBAIExpYnM6IC1MJHtsaWJkaXJ9IC1scnBtYnVpbGQke3N1ZmZpeH0gLWxycG0ke3N1ZmZpeH0gLWxycG1kYiR7c3VmZml4fSAtbHJwbWlvJHtzCistTGlicy5wcml2YXRlOiBATERGTEFHU0AgQExJQlNACisrTGlicy5wcml2YXRlOiBATElCU0AKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjcyYzlmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9iYXNoCisKKzogJHtSUE1ERVBTOj1ycG1kZXBzfQorCitwcm9jZXNzKCkgeworCXdoaWxlIHJlYWQgZmlsZV9uYW1lIDsgZG8KKwkJcHJpbnRmICIlc1x0IiAke2ZpbGVfbmFtZX0KKwkJaWYgWyAhIC1kICRmaWxlX25hbWUgXTsgdGhlbgorCQkJcHJpbnRmICIlcyAiICQoJFJQTURFUFMgJDEgJGZpbGVfbmFtZSB8IHNlZCAtZSAncyxycG1saWIoLiosLCcgLWUgJ3MsXChbPD5cPV1cKyBcK1teIF0qXCksKFwxKSxnJykKKwkJZmkKKwkJcHJpbnRmICJcbiIKKwlkb25lCit9CisKK3VzYWdlKCkgeworCWVjaG8gIiQwIHstUHwtLXByb3ZpZGVzfSB7LVJ8LS1yZXF1aXJlc30gRklMRSAuLi4iCit9CisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgIGNhc2UgIiQxIiBpbgorCS0tcnBtZGVwcykKKwkJUlBNREVQUz0kMgorCQlzaGlmdAorCQlzaGlmdAorCQk7OworCS1SfC0tcmVxdWlyZXMpCisJCXByb2Nlc3NfdHlwZT0tLXJlcXVpcmVzCisJCXNoaWZ0CisJCTs7CisJLVB8LS1wcm92aWRlcykKKwkJcHJvY2Vzc190eXBlPS0tcHJvdmlkZXMKKwkJc2hpZnQKKwkJOzsKKwkqKQorCQlicmVhazsKKwkJOzsKKyAgIGVzYWMKK2RvbmUKKworaWYgWyAteiAiJHByb2Nlc3NfdHlwZSIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1ndCAwIF07IHRoZW4KKwlmaW5kICIkQCIgfCBwcm9jZXNzICRwcm9jZXNzX3R5cGUKKwlleGl0ICQ/CitmaQorCitwcm9jZXNzICRwcm9jZXNzX3R5cGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM4YTYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK3JwbW1vZHVsZS5jOiBFeHBvcnQgYSBmZXcgYWRkaXRpb25hbCBSUE1TRU5TRSB2YWx1ZXMKKworV2Ugd2FudCB0byBzZWUgdGhlIFJQTVNFTlNFX1NDUklQVCB2YWx1ZXMgZm9yIHVzZSB3aXRoIFNNQVJULiAgV2UgYWxzbword2FudCB0byBzZWUgdGhlIE1JU1NJTkdPSyB2YWx1ZSBzbyB3ZSBjYW4gYXZvaWQgcmVjb21tZW5kZWQgcGFja2FnZXMgY2F1c2luZworZmFpbHVyZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9weXRob24vcnBtbW9kdWxlLmMKKysrKyBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTQ5NCwxMiArNDk0LDE2IEBAIHZvaWQgaW5pdF9ycG0odm9pZCkKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9FUVVBTCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfTk9URVFVQUwpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0ZJTkRfUkVRVUlSRVMpOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1BSRVJFUSk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BSRSk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BPU1QpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QUkVVTik7CistICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BPU1RVTikKKysgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUE9TVFVOKTsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX01JU1NJTkdPSyk7CisgI2VuZGlmCisgCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNREVQU19GTEFHX05PVVBHUkFERSk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbmRlcHMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbmRlcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgzYjE3NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uZGVwcy5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworWyAkIyAtZ2UgMSBdIHx8IHsKKyAgICBjYXQgPiAvZGV2L251bGwKKyAgICBleGl0IDAKK30KKworY2FzZSAkMSBpbgorLVJ8LS1yZXF1aXJlcykKKyAgICBzaGlmdAorICAgIGdyZXAgIi91c3IvXChsaWJbXi9dKlx8c2hhcmVcKS9weXRob25bXi9dKi8iID4vZGV2L251bGwgJiYgZWNobyAicHl0aG9uIgorICAgIGV4aXQgMAorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwN2U4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2gKQEAgLTAsMCArMSwxMDkgQEAKK0Zyb20gMDgxMDVhY2RhMWRhNjNkMzJmYmIxODU5NmEzZDZjM2UwYWExMDZkMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDEwIEp1biAyMDE1IDE0OjM2OjU2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBycG06IENWRS0yMDEzLTY0MzUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZWZlcmVuY2U6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPUNWRS0yMDEzLTY0MzUKKworRGVzY3JpcHRpb246CitJdCB3YXMgZm91bmQgdGhhdCBSUE0gd3JvdGUgZmlsZSBjb250ZW50cyB0byB0aGUgdGFyZ2V0IGluc3RhbGxhdGlvbgorZGlyZWN0b3J5IHVuZGVyIGEgdGVtcG9yYXJ5IG5hbWUsIGFuZCB2ZXJpZmllZCBpdHMgY3J5cHRvZ3JhcGhpYyBzaWduYXR1cmUKK29ubHkgYWZ0ZXIgdGhlIHRlbXBvcmFyeSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gY29tcGxldGVseS4gVW5kZXIgY2VydGFpbgorY29uZGl0aW9ucywgdGhlIHN5c3RlbSBpbnRlcnByZXRzIHRoZSB1bnZlcmlmaWVkIHRlbXBvcmFyeSBmaWxlIGNvbnRlbnRzCithbmQgZXh0cmFjdHMgY29tbWFuZHMgZnJvbSBpdC4gVGhpcyBjb3VsZCBhbGxvdyBhbiBhdHRhY2tlciB0byBtb2RpZnkKK3NpZ25lZCBSUE0gZmlsZXMgaW4gc3VjaCBhIHdheSB0aGF0IHRoZXkgd291bGQgZXhlY3V0ZSBjb2RlIGNob3NlbgorYnkgdGhlIGF0dGFja2VyIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4KKworT3JpZ2luYWwgUGF0Y2g6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9OTU2MjA3CisKK1NpZ25lZC1vZmYtYnk6IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CistLS0KKyBsaWIvZnNtLmMgICAgIHwgIDIgKy0KKyBycG1pby9ycG1pby5jIHwgMTggKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2ZzbS5jIGIvbGliL2ZzbS5jCitpbmRleCAxZWU3ZTY3Li4wOTRlYjFkIDEwMDY0NAorLS0tIGEvbGliL2ZzbS5jCisrKysgYi9saWIvZnNtLmMKK0BAIC03MjYsNyArNzI2LDcgQEAgc3RhdGljIGludCBleHBhbmRSZWd1bGFyKEZTTV90IGZzbSwgcnBtcHNtIHBzbSwgcnBtY3Bpb190IGFyY2hpdmUsIGludCBub2RpZ2VzdCkKKyB7CisgICAgIEZEX3Qgd2ZkID0gTlVMTDsKKyAgICAgY29uc3Qgc3RydWN0IHN0YXQgKiBzdCA9ICZmc20tPnNiOworLSAgICBycG1fbG9mZl90IGxlZnQgPSBzdC0+c3Rfc2l6ZTsKKysgICAgcnBtX2xvZmZfdCBsZWZ0ID0gcnBtZmlGU2l6ZUluZGV4KGZzbUdldEZpKGZzbSksIGZzbS0+aXgpOworICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZmlkaWdlc3QgPSBOVUxMOworICAgICBwZ3BIYXNoQWxnbyBkaWdlc3RhbGdvID0gMDsKKyAgICAgaW50IHJjID0gMDsKK2RpZmYgLS1naXQgYS9ycG1pby9ycG1pby5jIGIvcnBtaW8vcnBtaW8uYworaW5kZXggY2QyMjNlOC4uMGIxMmUzMSAxMDA2NDQKKy0tLSBhL3JwbWlvL3JwbWlvLmMKKysrKyBiL3JwbWlvL3JwbWlvLmMKK0BAIC0xMzA5LDE1ICsxMzA5LDE5IEBAIGludCBGY2xvc2UoRkRfdCBmZCkKKyAgKiAtIGJ6b3BlbjoJWzEtOV0gaXMgYmxvY2sgc2l6ZSAobW9kdWxvIDEwMEspCisgICogLSBiem9wZW46CSdzJyBpcyBzbWFsbG1vZGUKKyAgKiAtIEhBQ0s6CScuJyB0ZXJtaW5hdGVzLCByZXN0IGlzIHR5cGUgb2YgSS9PCisrICogLSAgICAgICAgICAgICdVJyBzZXRzICptb2RlIHRvIHplcm8gKG5vIHBlcm1pc3Npb25zKSBpbnN0ZWFkIG9mIDA2NjYKKyAgKi8KKyBzdGF0aWMgdm9pZCBjdnRmbW9kZSAoY29uc3QgY2hhciAqbSwKKyAJCQkJY2hhciAqc3RkaW8sIHNpemVfdCBuc3RkaW8sCisgCQkJCWNoYXIgKm90aGVyLCBzaXplX3Qgbm90aGVyLAorLQkJCQljb25zdCBjaGFyICoqZW5kLCBpbnQgKiBmKQorKwkJCQljb25zdCBjaGFyICoqZW5kLCBpbnQgKmYsIG1vZGVfdCAqbW9kZSkKKyB7CisgICAgIGludCBmbGFncyA9IDA7CisgICAgIGNoYXIgYzsKKyAKKysgICAgaWYgKG1vZGUpCisrICAgICptb2RlID0gMDY2NjsKKysKKyAgICAgc3dpdGNoICgqbSkgeworICAgICBjYXNlICdhJzoKKyAJZmxhZ3MgfD0gT19XUk9OTFkgfCBPX0NSRUFUIHwgT19BUFBFTkQ7CitAQCAtMTM1Nyw2ICsxMzYxLDEwIEBAIHN0YXRpYyB2b2lkIGN2dGZtb2RlIChjb25zdCBjaGFyICptLAorIAkgICAgaWYgKC0tbnN0ZGlvID4gMCkgKnN0ZGlvKysgPSBjOworIAkgICAgY29udGludWU7CisgCSAgICBicmVhazsKKysJY2FzZSAnVSc6CisrCSAgICBpZiAobW9kZSkKKysJCSptb2RlID0gMDsKKysJICAgIGJyZWFrOworIAlkZWZhdWx0OgorIAkgICAgaWYgKC0tbm90aGVyID4gMCkgKm90aGVyKysgPSBjOworIAkgICAgY29udGludWU7CitAQCAtMTM4NSw3ICsxMzkzLDggQEAgZnByaW50ZihzdGRlcnIsICIqKiogRmRvcGVuKCVwLCVzKSAlc1xuIiwgZmQsIGZtb2RlLCBmZGJnKGZkKSk7CisgICAgIGlmIChmZCA9PSBOVUxMIHx8IGZtb2RlID09IE5VTEwpCisgCXJldHVybiBOVUxMOworIAorLSAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCBOVUxMKTsKKysgICAgY3Z0Zm1vZGUoZm1vZGUsIHN0ZGlvLCBzaXplb2Yoc3RkaW8pLCBvdGhlciwgc2l6ZW9mKG90aGVyKSwgJmVuZCwgTlVMTCwKKysgICAgICAgIE5VTEwpOworICAgICBpZiAoc3RkaW9bMF0gPT0gJ1wwJykKKyAJcmV0dXJuIE5VTEw7CisgICAgIHpzdGRpb1swXSA9ICdcMCc7CitAQCAtMTQzNiw3ICsxNDQ1LDcgQEAgRkRfdCBGb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbW9kZSkKKyB7CisgICAgIGNoYXIgc3RkaW9bMjBdLCBvdGhlclsyMF07CisgICAgIGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7CistICAgIG1vZGVfdCBwZXJtcyA9IDA2NjY7CisrICAgIG1vZGVfdCBwZXJtczsKKyAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgRkRfdCBmZDsKKyAKK0BAIC0xNDQ0LDcgKzE0NTMsOCBAQCBGRF90IEZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtb2RlKQorIAlyZXR1cm4gTlVMTDsKKyAKKyAgICAgc3RkaW9bMF0gPSAnXDAnOworLSAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCAmZmxhZ3MpOworKyAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCAmZmxhZ3MsCisrICAgICAgICAmcGVybXMpOworICAgICBpZiAoc3RkaW9bMF0gPT0gJ1wwJykKKyAJcmV0dXJuIE5VTEw7CisgCistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxNzk1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA3MWM4MTJlZGYxNDMxYTk5NjdiZDk5YmE2ZmZhNmFiODllYjdlYzdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTAgSnVuIDIwMTUgMTI6NTY6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHJwbTogQ1ZFLTIwMTQtODExOAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JlZmVyZW5jZToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTE2ODcxNQorCitEZXNjcmlwdGlvbjoKK0l0IHdhcyBmb3VuZCB0aGF0IFJQTSBjb3VsZCBlbmNvdW50ZXIgYW4gaW50ZWdlciBvdmVyZmxvdywKK2xlYWRpbmcgdG8gYSBzdGFjay1iYXNlZCBvdmVyZmxvdywgd2hpbGUgcGFyc2luZyBhIGNyYWZ0ZWQKK0NQSU8gaGVhZGVyIGluIHRoZSBwYXlsb2FkIHNlY3Rpb24gb2YgYW4gUlBNIGZpbGUuICBUaGlzIGNvdWxkCithbGxvdyBhbiBhdHRhY2tlciB0byBtb2RpZnkgc2lnbmVkIFJQTSBmaWxlcyBpbiBzdWNoIGEgd2F5IHRoYXQKK3RoZXkgd291bGQgZXhlY3V0ZSBjb2RlIGNob3NlbiBieSB0aGUgYXR0YWNrZXIgZHVyaW5nIHBhY2thZ2UKK2luc3RhbGxhdGlvbi4KKworT3JpZ2luYWwgUGF0Y2g6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9OTYyMTU5CisKK1NpZ25lZC1vZmYtYnk6IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CistLS0KKyBsaWIvY3Bpby5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWIvY3Bpby5jIGIvbGliL2NwaW8uYworaW5kZXggMzgyZWViNi4uNzRkZGQ5YyAxMDA2NDQKKy0tLSBhL2xpYi9jcGlvLmMKKysrKyBiL2xpYi9jcGlvLmMKK0BAIC0yOTYsNiArMjk2LDkgQEAgaW50IHJwbWNwaW9IZWFkZXJSZWFkKHJwbWNwaW9fdCBjcGlvLCBjaGFyICoqIHBhdGgsIHN0cnVjdCBzdGF0ICogc3QpCisgICAgIHN0LT5zdF9yZGV2ID0gbWFrZWRldihtYWpvciwgbWlub3IpOworIAorICAgICBHRVRfTlVNX0ZJRUxEKGhkci5uYW1lc2l6ZSwgbmFtZVNpemUpOworKyAgICBpZiAobmFtZVNpemUgPD0gMCB8fCBuYW1lU2l6ZSA+IDQwOTYpIHsKKysgICAgICAgIHJldHVybiBDUElPRVJSX0JBRF9IRUFERVI7CisrICAgIH0KKyAKKyAgICAgKnBhdGggPSB4bWFsbG9jKG5hbWVTaXplICsgMSk7CisgICAgIHJlYWQgPSBGcmVhZCgqcGF0aCwgbmFtZVNpemUsIDEsIGNwaW8tPmZkKTsKKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1hdXRvZ2VuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tYXV0b2dlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzcxMjM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tYXV0b2dlbi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitSZW1vdmUgdGhlIHNhbml0eSBjaGVja2luZyBmcm9tIHRoZSBycG0gYXV0b2dlbi5zaC4gIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZQord2UgbWF5IGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50LCBidXQgeWV0IGNvbXBhdGlibGUgdmVyc2lvbnMuICBJZiB3ZSBkbyBlbmQKK3VwIGJyZWFraW5nIHRoaW5ncywgd2UnbGwgZGVhbCB3aXRoIGl0IGF0IHRoYXQgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3N5Y2svYXV0b2dlbi5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zeWNrL2F1dG9nZW4uc2gKKysrKyBycG0tNS40LjE0L3N5Y2svYXV0b2dlbi5zaAorQEAgLTM0LDEyICszNCw2IEBAIGxpYnRvb2xpemUgKCkgeworICAgICBldmFsICRfbGlidG9vbGl6ZSAkX2xpYnRvb2xpemVfYXJncworIH0KKyAKKy0jICAgcmVxdWlyZW1lbnRzIHNhbml0eSBjaGVjaworLVsgImBhdXRvbWFrZSAgIC0tdmVyc2lvbiB8IGhlYWQgLTFgIiAhPSAiJEFNViIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistWyAiYGF1dG9jb25mICAgLS12ZXJzaW9uIHwgaGVhZCAtMWAiICE9ICIkQUNWIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy1bICJgbGlidG9vbGl6ZSAtLXZlcnNpb24gfCBoZWFkIC0xYCIgIT0gIiRMVFYiIF0gJiYgZWNobyAiJFVTQUdFIiAjICYmIGV4aXQgMQorLVsgImBnZXR0ZXh0aXplIC0tdmVyc2lvbiB8IGhlYWQgLTEgfCBzZWQgLWUgJ3M7Xi4qL1xcKGdldHRleHRpemVcXCk7XFwxOydgIiAhPSAiJEdUVCIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistCisgZWNobyAiLS0tPiBnZW5lcmF0ZSBmaWxlcyB2aWEgR05VIGxpYnRvb2wgKGxpYnRvb2xpemUpIgorIGxpYnRvb2xpemUgLS1xdWlldCAtLWNvcHkgLS1mb3JjZSAtLWluc3RhbGwKKyBlY2hvICItLS0+IGdlbmVyYXRlIGZpbGVzIHZpYSBHTlUgYXV0b2NvbmYgKGFjbG9jYWwsIGF1dG9oZWFkZXIpIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2Fub25hcmNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2Fub25hcmNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWI0OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jYW5vbmFyY2gucGF0Y2gKQEAgLTAsMCArMSwxMzYgQEAKK2xpYi9ycG1yYy5jOiBVcGRhdGUgLS10YXJnZXQgcHJvY2Vzc2luZyB0byBzdXBwb3J0IGZ1bGwgR05VIGNhbm9uaWNhbCBhcmNoCisKK1ByaW9yIHRvIHRoaXMgcGF0Y2gsIHdoZW4gdXNpbmcgLS10YXJnZXQsIFJQTSBzdXBwb3J0ZWQgdGhlIGZvcm1hdDoKKyAgPGFyY2g+CisgIDxhcmNoPi08b3M+CisgIDxhcmNoPi08b3M+LWdudQorICA8YXJjaD4tPGFyYml0cmFyeSBpdGVtcz4tPG9zPgorICA8YXJjaD4tPGFyYml0cmFyeSBpdGVtcz4tPG9zPi1nbnUKKworVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBpdGVtcyB0bzoKKyAgPGFyY2g+CisgIDxhcmNoPi08b3M+CisgIDxhcmNoPi08b3M+LWdudQorICA8YXJjaD4tPHZlbmRvcj4tPG9zPgorICA8YXJjaD4tPHZlbmRvcj4tPG9zPi08ZXh0ZW5zaW9uPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC05MjUsOCArOTI1LDggQEAgc3RhdGljIHZvaWQgZ2V0TWFjaGluZUluZm8oaW50IHR5cGUsIC8qQAorIAorIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGNoYXIgKiogdGFyZ2V0LCBjb25zdCBjaGFyICoqIGNhbm9udGFyZ2V0KQorIHsKKy0KKy0gICAgY2hhciAqY2EgPSBOVUxMLCAqY28gPSBOVUxMLCAqY3QgPSBOVUxMOworKyAgICAvKiBjYSA9IGFyY2gsIGN2ID0gdmVuZG9yLCBjbyA9IG9zLCBjZSA9IGV4dGVuc2lvbiwgY3QgPSBjYW5vbiB0YXJnZXQgKi8KKysgICAgY2hhciAqY2EgPSBOVUxMLCAqY3YgPSBOVUxMLCAqY28gPSBOVUxMLCAqY2UgPSBOVUxMLCAqY3QgPSBOVUxMOworICAgICBpbnQgeDsKKyAKKyAgICAgLyogUmVidWlsZCB0aGUgY29tcGF0IHRhYmxlIHRvIHJlY2FsY3VsYXRlIHRoZSBjdXJyZW50IHRhcmdldCBhcmNoLiAgKi8KK0BAIC05MzYsMjMgKzkzNiw2MCBAQCBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjCisgICAgIHJwbVNldFRhYmxlcyhSUE1fTUFDSFRBQkxFX0JVSUxEQVJDSCwgUlBNX01BQ0hUQUJMRV9CVUlMRE9TKTsKKyAKKyAgICAgaWYgKHRhcmdldCAmJiAqdGFyZ2V0KSB7CisrCS8qIEdOVSBjYW5vbmljYWwgZm9ybWF0IGlzOgorKwkgKiAgPGFyY2g+LTx2ZW5kb3I+LTxvcz5bLWV4dGVuc2lvbl0KKysJICoKKysJICogV2Ugc3VwcG9ydCB0aGUgYm90aCB0aGUgR05VIGNhbm9uaWNhbCBmb3JtYXQKKysJICogYXMgd2VsbCBhcyB0aGUgdHJhZGl0aW9uYWwgUlBNIGZvcm1hdHM6IAorKwkgKiAgPGFyY2g+CisrCSAqICA8YXJjaD4tPG9zPlstZ251XQorKwkgKi8KKyAJY2hhciAqYzsKKyAJLyogU2V0IGFyY2ggYW5kIG9zIGZyb20gc3BlY2lmaWVkIGJ1aWxkIHRhcmdldCAqLworIAljYSA9IHhzdHJkdXAoKnRhcmdldCk7CistCWlmICgoYyA9IHN0cmNocihjYSwgJy0nKSkgIT0gTlVMTCkgeworKwlpZiAoKGMgPSBzdHJjaHIoY2EsICctJykpID09IE5VTEwpIHsKKysJICAgIC8qIEZvcm1hdCBpcyA8YXJjaD4gKi8KKysJICAgIDsKKysJfSBlbHNlIHsKKyAJICAgICpjKysgPSAnXDAnOworLQkgICAgCistCSAgICBpZiAoKGNvID0gc3RycmNocihjLCAnLScpKSA9PSBOVUxMKSB7CistCQljbyA9IGM7CisrCSAgICBjdiA9IGM7CisrCisrCSAgICBpZiAoKGMgPSBzdHJjaHIoYywgJy0nKSkgPT0gTlVMTCkgeworKwkJLyogRm9ybWF0IGlzIDxhcmNoPi08b3M+ICovCisrCQljbyA9IGN2OworKwkJY3YgPSBOVUxMOworIAkgICAgfSBlbHNlIHsKKy0JCWlmICgheHN0cmNhc2VjbXAoY28sICItZ251IikpCistCQkgICAgKmNvID0gJ1wwJzsKKy0JCWlmICgoY28gPSBzdHJyY2hyKGMsICctJykpID09IE5VTEwpCistCQkgICAgY28gPSBjOworLQkJZWxzZQorLQkJICAgIGNvKys7CisrCQkqYysrID0gJ1wwJzsKKysJCWNvID0gYzsKKysKKysJCWlmICgoYyA9IHN0cmNocihjLCAnLScpKSA9PSBOVUxMKSB7CisrCQkgICAgLyogTWlnaHQgYmU6CisrCQkgICAgICogIDxhcmNoPi08dmVuZG9yPi08b3M+CisrCQkgICAgICogIDxhcmNoPi08b3M+LWdudQorKwkJICAgICAqLworKwkJICAgIGlmICgheHN0cmNhc2VjbXAoY28sICJnbnUiKSkgeworKwkJCS8qIEZvcm1hdCB3YXMgPGFyY2g+LTxvcz4tZ251ICovCisrCQkJY2UgPSBjbzsKKysJCQljbyA9IGN2OworKwkJCWN2ID0gTlVMTDsKKysJCSAgICB9CisrCQl9IGVsc2UgeworKwkJICAgIC8qIEZvcm1hdCB3YXMgPGFyY2g+LTx2ZW5kb3I+LTxvcz4tPGV4dGVuc2lvbj4gKi8KKysJCSAgICAqYysrID0gJ1wwJzsKKysJCSAgICBjZSA9IGM7CisrCQl9CisgCSAgICB9CisrCSAgICBpZiAoY3YgIT0gTlVMTCkgY3YgPSB4c3RyZHVwKGN2KTsKKyAJICAgIGlmIChjbyAhPSBOVUxMKSBjbyA9IHhzdHJkdXAoY28pOworKwkgICAgaWYgKGNlICE9IE5VTEwpIHsKKysJCS8qIFdlIG5lZWQgdG8gcHJlZml4IGl0IHdpdGggYSAiLSIgKi8KKysJCWNoYXIgKiBsY2UgPSBOVUxMOworKworKwkJbGNlID0geG1hbGxvYyhzdHJsZW4oY2UpICsgc2l6ZW9mKCItIikpOworKwkJc3ByaW50ZihsY2UsICItJXMiLCBjZSk7CisrCisrCQljZSA9IGxjZTsKKysJICAgIH0KKyAJfQorICAgICB9IGVsc2UgeworIAljb25zdCBjaGFyICphID0gTlVMTDsKK0BAIC05OTUsOCArMTAzMiwxNiBAQCBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0IiwgTlVMTCwgY3QsIFJNSUxfUlBNUkMpOworICAgICBkZWxNYWNybyhOVUxMLCAiX3RhcmdldF9jcHUiKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl90YXJnZXRfY3B1IiwgTlVMTCwgY2EsIFJNSUxfUlBNUkMpOworKyAgICBpZiAoY3YpIHsKKysJZGVsTWFjcm8oTlVMTCwgIl90YXJnZXRfdmVuZG9yIik7CisrCWFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0X3ZlbmRvciIsIE5VTEwsIGN2LCBSTUlMX1JQTVJDKTsKKysgICAgfQorICAgICBkZWxNYWNybyhOVUxMLCAiX3RhcmdldF9vcyIpOworICAgICBhZGRNYWNybyhOVUxMLCAiX3RhcmdldF9vcyIsIE5VTEwsIGNvLCBSTUlMX1JQTVJDKTsKKysgICAgaWYgKGNlKSB7CisrCWRlbE1hY3JvKE5VTEwsICJfZ251Iik7CisrCWFkZE1hY3JvKE5VTEwsICJfZ251IiwgTlVMTCwgY2UsIFJNSUxfUlBNUkMpOworKyAgICB9CisgCisgICAgIGlmIChjYW5vbnRhcmdldCkKKyAJKmNhbm9udGFyZ2V0ID0gY3Q7CitAQCAtMTAwNCw4ICsxMDQ5LDEyIEBAIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGMKKyAJY3QgPSBfZnJlZShjdCk7CisgICAgIGNhID0gX2ZyZWUoY2EpOworICAgICAvKkAtdXNlcmVsZWFzZWRAKi8KKysgICAgY3YgPSBfZnJlZShjdik7CisrICAgIC8qQC11c2VyZWxlYXNlZEAqLworICAgICBjbyA9IF9mcmVlKGNvKTsKKyAgICAgLypAPXVzZXJlbGVhc2VkQCovCisrICAgIGNlID0gX2ZyZWUoY2UpOworKyAgICAvKkAtdXNlcmVsZWFzZWRAKi8KKyB9CisgCisgdm9pZCBycG1GcmVlUnBtcmModm9pZCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2hlY2stcm9vdHBhdGgtcmVhc29uYWJsZW5lc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4NjAzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK3JwbTogY2hlY2sgaWYgdGhlIGFyZ3VtZW50KHJvb3RwYXRoKSBleGlzdHMgb3IgYmUgd3JpdGFibGUKKworV2hlbiB1c2VyIGV4ZWN1dGUgdGhlIGNvbW1hbmQgInJwbSAtcWFpIC0tcm9vdD0kZGlyIixpZiAkZGlyIGRvZXNuJ3QKK2V4aXN0IG9yIGlzIHVud3JpdGFibGUgYXMgcmVzdWx0IG9mIG1ha2luZyBhIHR5cG8gaW4gcm9vdHBhdGgsdGhlbgoraXQgd2lsbCBjcmVhdGUgZGlyZW50ICRkaXIgYW5kIHN1YmRpcmVjdG9yeS4KK1NvIHdlIHNob3VsZCBhZGQgdGhlIGNoZWNrIGZ1bmN0aW9uIHRvIGZpeCBpdCBiZWZvcmUgY3JlYXRpbmcgcmVsYXRpb25hbAorc3ViZGlyZWN0b3J5LGFuZCB3YXJuIHRoZSBpbmNvcnJlY3Qgcm9vdHBhdGggdG8gdXNlci4gSXQganVzdCBjaGVja3MgdGhlCityb290cGF0aCByZWFzb25hYmxlbmVzcyB3aGVuIHRoZSB1c2VyIGlucHV0IHRoZSBhcmd1bWVudCgtLXJvb3Q9Ly1yPSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBaaGl4aW9uZyBDaGkgPHpjaGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHJwbXF2LmMgfCA0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcnBtcXYuYyBiL3JwbXF2LmMKK2luZGV4IDQwYzQyYmQuLjg4ZDg1YWIgMTAwNjQ0CistLS0gYS9ycG1xdi5jCisrKysgYi9ycG1xdi5jCitAQCAtMjA2LDYgKzIwNiw4IEBAIHN0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb25zVGFibGVbXSA9IHsKKyAgICBQT1BUX1RBQkxFRU5ECisgfTsKKyAKKytzdGF0aWMgaW50IF9ycG1xdl9yb290cGF0aF9zdGF0ZSA9IDA7CisrCisgI2lmZGVmIF9fTUlOVF9fCisgLyogTWlOVCBjYW5ub3QgZHluYW1pY2FsbHkgaW5jcmVhc2UgdGhlIHN0YWNrLiAgKi8KKyBsb25nIF9zdGtzaXplID0gNjQgKiAxMDI0TDsKK0BAIC00MjcsNiArNDI5LDQxIEBAIHN0YXRpYyB2b2lkIGludGVncml0eV9jaGVjayhjb25zdCBjaGFyICpwcm9nbmFtZSwgZW51bSBtb2RlcyBwcm9nbW9kZV9udW0pCisgfQorICNlbmRpZgorIAorKy8qY2hlY2sgaWYgdGhlIHJvb3RkaXIgaXMgd3JpdGFibGUgb3IgZXhpc3RzICovCisraW50IGFjY2Vzc19maWxlKGNvbnN0IGNoYXIgKnJvb3RkaXIpCisreworKyAgICBpbnQgcmV0LHJvb3RkaXJfbGVuOworKworKyAgICBpZihyb290ZGlyID09IE5VTEwpIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICByb290ZGlyX2xlbiA9IHN0cmxlbihyb290ZGlyKTsKKysgICAgLyptYWtlIHN1cmUgdGhhdCBkaXJlbnQgYXJndW1lbnQgdHJhaWxpbmcgaXMgIi8iICovCisrICAgIGlmKCEocm9vdGRpcl9sZW4gJiYgcm9vdGRpcltyb290ZGlyX2xlbiAtIDFdID09ICcvJykpeworKyAgICAgICAgY2hhciAqdCA9IChjaGFyICopbWFsbG9jKHJvb3RkaXJfbGVuICsgMik7CisrICAgICAgICAqdCA9ICdcMCc7CisrICAgICAgICAodm9pZClzdHBjcHkoc3RwY3B5KHQscm9vdGRpciksIi8iKTsKKysgICAgICAgIHJldCA9IGFjY2Vzcyh0LEZfT0t8V19PSyk7CisrICAgICAgICBmcmVlKHQpOworKyAgICB9ZWxzZXsKKysgICAgICAgIHJldCA9IGFjY2Vzcyhyb290ZGlyLEZfT0t8V19PSyk7CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrLypjaGVjayBpZiBpbnB1dCB0aGUgYXJndW1lbnQgIi0tcm9vdC8tciIgICovCisrdm9pZCBjaGVja19hcmd1bWVudF9yb290KGludCBhcmdjLGNoYXIgKiBjb25zdCBhcmd2W10pCisreworKyAgICBpbnQgaTsKKysgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworKyAgICAgICAgaWYoc3RybmNtcChhcmd2W2ldLCItLXJvb3Q9Iiw3KSA9PSAwIHx8IHN0cm5jbXAoYXJndltpXSwiLXI9IiwzKSA9PSAwKSB7CisrICAgICAgICAgICAgX3JwbXF2X3Jvb3RwYXRoX3N0YXRlID0gMTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgfQorK30KKysKKyAvKkAtYm91bmRzQCovIC8qIExDTDogc2VnZmF1bHQgKi8KKyAvKkAtbW9kc0AqLyAvKiBGSVg6IHNocnVnICovCisgI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKK0BAIC00NzYsNiArNTEzLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndikKKyAgICAgaW50IHh4OworICNlbmRpZgorIAkKKysgICAgY2hlY2tfYXJndW1lbnRfcm9vdChhcmdjLChjaGFyICpjb25zdCAqKWFyZ3YpOworKworICNpZiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fTENMSU5UX18pCisgICAgIGVudmlyb24gPSBlbnZwOworICNlbHNlCitAQCAtNzE1LDYgKzc1NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQorIAkJYXJnZXJyb3IoXygiYXJndW1lbnRzIHRvIC0tcm9vdCAoLXIpIG11c3QgYmVnaW4gd2l0aCBhIC8iKSk7CisgCSAgICBicmVhazsKKyAJfQorKyAgICAgICAgaWYgKF9ycG1xdl9yb290cGF0aF9zdGF0ZSkgeworKyAgICAgICAgICAgIGlmIChhY2Nlc3NfZmlsZShycG1pb1Jvb3REaXIpKSB7CisrICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJJbnZhbGlkIGRpcmVjdG9yeTolcywgZW5zdXJlIGl0IGV4aXN0cyBvciBiZSB3cml0YWJsZVxuIikscnBtaW9Sb290RGlyKTsKKysgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKyAgICAgfQorIAorICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogaW50ZWdyaXR5LWNoZWNraW5nICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiLXJlZHVjZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiLXJlZHVjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY5Mzc2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGItcmVkdWNlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworQ2hhbmdlIGNhY2hlIHNpemUgdG8gcmVkdWNlIHRoZSB1c2FnZSBvZiBkaXNrIHNwYWNlIGZyb20gNjJNQiB0byAyNk1CLiAKKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9EQl9DT05GSUcuaW4KKysrKyBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorQEAgLTI5LDcgKzI5LDcgQEAgc2V0X3RocmVhZF9jb3VudCA2NAorIAorICMgPT09PT09PT09PT09PT09PSBNZW1vcnkgUG9vbAorICNYWFggaW5pdGlhbGl6aW5nIGRiZW52IHdpdGggc2V0X2NhY2hlc2l6ZSBoYXMgdW5pbXBsZW1lbnRlZCBwcmVyZXF1c2l0ZXMKKy0jc2V0X2NhY2hlc2l6ZSAwIDEwNDg1NzYgMCAKKytzZXRfY2FjaGVzaXplIDAgMTA0ODU3NiAwIAorIHNldF9tcF9tbWFwc2l6ZSAyNjg0MzU0NTYKKyAKKyAjID09PT09PT09PT09PT09PT0gTG9ja2luZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGI1LW9yLWRiNi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiNS1vci1kYjYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwMjBhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiNS1vci1kYjYucGF0Y2gKQEAgLTAsMCArMSwxNjIgQEAKK1N1cHBvcnQgYm90aCBkYjUgYW5kIGRiNi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0vY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtL2NvbmZpZ3VyZS5hYworQEAgLTU0Nyw4ICs1NDcsNiBAQCBlbHNlCisgICAgIE1ZUEFUSD0kUEFUSAorIGZpCisgCistREJYWT1kYjYwCistCisgQUNfUEFUSF9QUk9HKF9fQkFTSCwgYmFzaCwgJXtfYmluZGlyfS9iYXNoLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0JaSVAyLCBiemlwMiwgJXtfYmluZGlyfS9iemlwMiwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19DQVQsIGNhdCwgL2Jpbi9jYXQsICRNWVBBVEgpCitAQCAtNTYwLDIyICs1NTgsNiBAQCBBQ19QQVRIX1BST0coX19DTUFLRSwgY21ha2UsICV7X2JpbmRpcn0vCisgQUNfUEFUSF9QUk9HKF9fQ1BJTywgY3BpbywgL2Jpbi9jcGlvLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0NVUkwsIGN1cmwsICV7X2JpbmRpcn0vY3VybCwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19DVlMsIGN2cywgJXtfYmluZGlyfS9jdnMsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfQVJDSElWRSwgJHtEQlhZfV9hcmNoaXZlLCAle19iaW5kaXJ9LyR7REJYWX1fYXJjaGl2ZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9DSEVDS1BPSU5ULCAke0RCWFl9X2NoZWNrcG9pbnQsICV7X2JpbmRpcn0vJHtEQlhZfV9jaGVja3BvaW50LCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0RFQURMT0NLLCAke0RCWFl9X2RlYWRsb2NrLCAle19iaW5kaXJ9LyR7REJYWX1fZGVhZGxvY2ssICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfRFVNUCwgJHtEQlhZfV9kdW1wLCAle19iaW5kaXJ9LyR7REJYWX1fZHVtcCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9IT1RCQUNLVVAsICR7REJYWX1faG90YmFja3VwLCAle19iaW5kaXJ9LyR7REJYWX1faG90YmFja3VwLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0xPQUQsICR7REJYWX1fbG9hZCwgJXtfYmluZGlyfS8ke0RCWFl9X2xvYWQsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfTE9HX1ZFUklGWSwgJHtEQlhZfV9sb2dfdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fbG9nX3ZlcmlmeSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9QUklOVExPRywgJHtEQlhZfV9wcmludGxvZywgJXtfYmluZGlyfS8ke0RCWFl9X3ByaW50bG9nLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1JFQ09WRVIsICR7REJYWX1fcmVjb3ZlciwgJXtfYmluZGlyfS8ke0RCWFl9X3JlY292ZXIsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfUkVQTElDQVRFLCAke0RCWFl9X3JlcGxpY2F0ZSwgJXtfYmluZGlyfS8ke0RCWFl9X3JlcGxpY2F0ZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQlNRTCwgJHtEQlhZfXNxbCwgJXtfYmluZGlyfS8ke0RCWFl9c3FsLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1NRTF9DT0RFR0VOLCAke0RCWFl9X3NxbF9jb2RlZ2VuLCAle19iaW5kaXJ9LyR7REJYWX1fc3FsX2NvZGVnZW4sICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfU1RBVCwgJHtEQlhZfV9zdGF0LCAle19iaW5kaXJ9LyR7REJYWX1fc3RhdCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9UVU5FUiwgJHtEQlhZfV90dW5lciwgJXtfYmluZGlyfS8ke0RCWFl9X3R1bmVyLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1VQR1JBREUsICR7REJYWX1fdXBncmFkZSwgJXtfYmluZGlyfS8ke0RCWFl9X3VwZ3JhZGUsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfVkVSSUZZLCAke0RCWFl9X3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X3ZlcmlmeSwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19ESUZGLCBkaWZmLCAvYmluL2RpZmYsICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fRElUVE8sIGRpdHRvLCAle19iaW5kaXJ9L2RpdHRvLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0ZJTEUsIGZpbGUsICV7X2JpbmRpcn0vZmlsZSwgJE1ZUEFUSCkKK0BAIC0xNjA0LDEzICsxNTg2LDE4IEBAIFJQTV9DSEVDS19MSUIoCisgCisgZG5sICMgQmVya2VsZXktREIgJiBTUUxpdGUKKyBEQkxJQlNSQ1M9IiIKKytEQlhZPWRiCisrCisgIyBYWFggd29uJ3QgaGFuZGxlIC0taW5jbHVkZWRpciBvdmVycmlkZQorLUNQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR7cHJlZml4fS9pbmNsdWRlLyR7REJYWX0iCisrQ1BQRkxBR1Nfc2F2ZT0iJHtDUFBGTEFHU30iCisrQ1BQRkxBR1M9IiR7Q1BQRkxBR1Nfc2F2ZX0gLUkke3ByZWZpeH0vaW5jbHVkZS9kYi02LjAiCisrd2l0aF9kYl9zYXZlPSIke3dpdGhfZGJ9IgorIFJQTV9DSEVDS19MSUIoCisgICAgIFtCZXJrZWxleS1EQl0sIFtkYl0sCisgICAgIFtkYi02LjBdLCBbZGJfY3JlYXRlXSwgW2RiLmhdLAorLSAgICBbeWVzLGV4dGVybmFsXSwgW2RiM10sCisrICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI2XSwKKyAgICAgWyBEQkxJQlNSQ1M9IiREQkxJQlNSQ1MgZGIzLmMiCisrICAgICAgREJYWT1kYjYwCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyB0cnVlIF0pCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQl9JTlRFUk5BTCwgWyB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsIF0pCisgICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorQEAgLTE2MTksMTAgKzE2MDYsMzIgQEAgUlBNX0NIRUNLX0xJQigKKyAgICAgICAgICAgV0lUSF9EQl9TVUJESVI9IiIKKyAgICAgICBmaQorICAgICBdLAorLSAgICBbIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgZmFsc2UgXSkKKy0gICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIGZhbHNlIF0pCisrICAgIFsgIyBSZXNldCBhIGZldyB2YXJpYWJsZXMgdG8gZnJlc2gKKysgICAgICB3aXRoX2RiPSIke3dpdGhfZGJfc2F2ZX0iCisrICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1Nfc2F2ZX0gLUkke3ByZWZpeH0vaW5jbHVkZS9kYi01LjMiCisrICAgICAgUlBNX0NIRUNLX0xJQigKKysgICAgICAgIFtCZXJrZWxleS1EQl0sIFtkYl0sCisrICAgICAgICBbZGItNS4zXSwgW2RiX2NyZWF0ZV0sIFtkYi5oXSwKKysgICAgICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI1M10sCisrICAgICAgICBbIERCTElCU1JDUz0iJERCTElCU1JDUyBkYjMuYyIKKysgICAgICAgICAgREJYWT1kYjUzCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgdHJ1ZSBdKQorKyAgICAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWwgXSkKKysgICAgICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorKyAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfREJfSCwgMSwgW0hhdmUgPGRiLmg+IGhlYWRlcl0pCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIFdJVEhfREJfU1VCRElSPSIiCisrICAgICAgICAgIGZpCisrICAgICAgICBdLAorKyAgICAgICAgWyBBTV9DT05ESVRJT05BTChXSVRIX0RCLCBbIGZhbHNlIF0pCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgZmFsc2UgXSkKKysgICAgICAgIF0pCisgICAgIF0pCisgCisraWYgdGVzdCAiLiRhY19jdl9saWJfZGJfNl8wX2RiX2NyZWF0ZSIgIT0gLnllcyAtYSAiLiRhY19jdl9saWJfZGJfNV8zX2RiX2NyZWF0ZSIgIT0gLnllczsgdGhlbgorKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU19zYXZlfSIKKytmaQorKworIGRubCAjIFNxbGl0ZSBleHRlcm5hbAorIFJQTV9DSEVDS19MSUIoCisgICAgIFtTUUxpdGVdLCBbc3FsaXRlXSwKK0BAIC0xNjMzLDEwICsxNjQyLDExIEBAIFJQTV9DSEVDS19MSUIoCisgCisgZG5sICMgU3FsaXRlIDMuNy4wLjEgZnJvbSBkYi01LjEuMTkKKyBkbmwgWFhYIGVycm9yOiBgZGIzJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBBQ19DT05GSUdfU1VCRElSUy4KKytpZiB0ZXN0ICIuJGFjX2N2X2xpYl9kYl82XzBfZGJfY3JlYXRlIiA9IC55ZXM7IHRoZW4KKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbQmVya2VsZXktREIgKCtTUUxpdGUzKV0sIFtkYnNxbF0sCisgICAgIFtkYl9zcWwtNi4wXSwgW3NxbGl0ZTNfb3Blbl0sIFtkYnNxbC5oXSwKKy0gICAgW3llcyxleHRlcm5hbF0sIFtkYjMvc3FsXSwKKysgICAgW3llcyxleHRlcm5hbF0sIFtkYjYvc3FsXSwKKyAgICAgWworICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgdHJ1ZSBdKQorICAgICAgIEFDX0RFRklORShXSVRIX1NRTElURSwgMSwgW0RlZmluZSBhcyAxIGlmIGJ1aWxkaW5nIHdpdGggU1FMaXRlIGxpYnJhcnldKQorQEAgLTE2NTAsMTIgKzE2NjAsNTAgQEAgUlBNX0NIRUNLX0xJQigKKyAgICAgXSwgWworICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgZmFsc2UgXSkKKyAgICAgXSkKKytlbGlmIHRlc3QgIi4kYWNfY3ZfbGliX2RiXzVfM19kYl9jcmVhdGUiID0gLnllczsgdGhlbgorK1JQTV9DSEVDS19MSUIoCisrICAgIFtCZXJrZWxleS1EQiAoK1NRTGl0ZTMpXSwgW2Ric3FsXSwKKysgICAgW2RiX3NxbC01LjNdLCBbc3FsaXRlM19vcGVuXSwgW2Ric3FsLmhdLAorKyAgICBbeWVzLGV4dGVybmFsXSwgW2RiNTMvc3FsXSwKKysgICAgWworKyAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgdHJ1ZSBdKQorKyAgICAgIEFDX0RFRklORShXSVRIX1NRTElURSwgMSwgW0RlZmluZSBhcyAxIGlmIGJ1aWxkaW5nIHdpdGggU1FMaXRlIGxpYnJhcnldKQorKyAgICAgIGlmIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWw7IHRoZW4KKysgICAgICAgIFdJVEhfREJfQ1BQRkxBR1M9IiR7V0lUSF9EQl9DUFBGTEFHU30gLUlcJCh0b3Bfc3JjZGlyKS9kYi9zcWwvZ2VuZXJhdGVkIgorKyAgICAgICAgV0lUSF9EQl9MSUJTPSIke1dJVEhfREJTUUxfTElCU30iCisrICAgICAgICBEQkxJQlNSQ1M9IiREQkxJQlNSQ1Mgc3FsaXRlLmMiCisrICAgICAgZWxzZQorKyAgICAgICAgV0lUSF9EQlNRTF9TVUJESVI9IiIKKysgICAgICBmaQorKyAgICBdLCBbCisrICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyBmYWxzZSBdKQorKyAgICBdKQorK2Vsc2UKKytBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIGZhbHNlIF0pCisrZmkKKyAKKyBEQkxJQk9CSlM9YGVjaG8gJERCTElCU1JDUyB8IHNlZCAtZSAicy9cLmMvXC5sby9nImAKKyAKKyBBQ19TVUJTVChEQkxJQlNSQ1MpCisgQUNfU1VCU1QoREJMSUJPQkpTKQorIAorK0FDX1BBVEhfUFJPRyhfX0RCX0FSQ0hJVkUsICR7REJYWX1fYXJjaGl2ZSwgJXtfYmluZGlyfS8ke0RCWFl9X2FyY2hpdmUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfQ0hFQ0tQT0lOVCwgJHtEQlhZfV9jaGVja3BvaW50LCAle19iaW5kaXJ9LyR7REJYWX1fY2hlY2twb2ludCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9ERUFETE9DSywgJHtEQlhZfV9kZWFkbG9jaywgJXtfYmluZGlyfS8ke0RCWFl9X2RlYWRsb2NrLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0RVTVAsICR7REJYWX1fZHVtcCwgJXtfYmluZGlyfS8ke0RCWFl9X2R1bXAsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfSE9UQkFDS1VQLCAke0RCWFl9X2hvdGJhY2t1cCwgJXtfYmluZGlyfS8ke0RCWFl9X2hvdGJhY2t1cCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9MT0FELCAke0RCWFl9X2xvYWQsICV7X2JpbmRpcn0vJHtEQlhZfV9sb2FkLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0xPR19WRVJJRlksICR7REJYWX1fbG9nX3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X2xvZ192ZXJpZnksICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfUFJJTlRMT0csICR7REJYWX1fcHJpbnRsb2csICV7X2JpbmRpcn0vJHtEQlhZfV9wcmludGxvZywgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9SRUNPVkVSLCAke0RCWFl9X3JlY292ZXIsICV7X2JpbmRpcn0vJHtEQlhZfV9yZWNvdmVyLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1JFUExJQ0FURSwgJHtEQlhZfV9yZXBsaWNhdGUsICV7X2JpbmRpcn0vJHtEQlhZfV9yZXBsaWNhdGUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJTUUwsICR7REJYWX1zcWwsICV7X2JpbmRpcn0vJHtEQlhZfXNxbCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9TUUxfQ09ERUdFTiwgJHtEQlhZfV9zcWxfY29kZWdlbiwgJXtfYmluZGlyfS8ke0RCWFl9X3NxbF9jb2RlZ2VuLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1NUQVQsICR7REJYWX1fc3RhdCwgJXtfYmluZGlyfS8ke0RCWFl9X3N0YXQsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfVFVORVIsICR7REJYWX1fdHVuZXIsICV7X2JpbmRpcn0vJHtEQlhZfV90dW5lciwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9VUEdSQURFLCAke0RCWFl9X3VwZ3JhZGUsICV7X2JpbmRpcn0vJHtEQlhZfV91cGdyYWRlLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1ZFUklGWSwgJHtEQlhZfV92ZXJpZnksICV7X2JpbmRpcn0vJHtEQlhZfV92ZXJpZnksICRNWVBBVEgpCisrCisgQUNfQVJHX1dJVEgoZGItbGFyZ2VmaWxlLCBBU19IRUxQX1NUUklORyhbLS13aXRoLWRiLWxhcmdlZmlsZV0sIFtidWlsZCBCZXJrZWxleS1EQiB3aXRoIExBUkdFRklMRSBzdXBwb3J0XSkpCisgQUNfQVJHX1dJVEgoZGItbXV0ZXgsICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWRiLW11dGV4PUFSR10sIFtidWlsZCBCZXJrZWxleS1EQiB3aXRoIE1VVEVYIHR5cGUgQVJHXSkpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZiOGUzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitJbiBjZXJ0YWluIGNhc2VzIHdpdGggQmVya2xleURCIDUuMy54IHdlIGFyZSBnZXR0aW5nIHRoZSBlcnJvcjoKKworZGIzLmM6MTQ0MzogZGJjdXJzb3ItPnBnZXQoLTMwOTk5KTogQkRCMDA2MyBEQl9CVUZGRVJfU01BTEw6IFVzZXIgbWVtb3J5IHRvbyBzbWFsbCBmb3IgcmV0dXJuIHZhbHVlCisKK1NlZSBodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9ycG0vK2J1Zy85MzQ0MjAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0l0IGFwcGVhcnMgdG8gYmUgc29tZSB0eXBlIG9mIGEgYnVnIGluIHRoZSBCZXJrbGV5REIgNS4zLnguICBJbiBhbiBhdHRlbXB0Cit0byB3b3JrYXJvdW5kIHRoZSBwcm9ibGVtLCB3aGVuIHdlIGVuY291bnRlciB0aGlzIHNpdHVhdGlvbiB3ZSBhdHRlbXB0Cit0byBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIG1tYXAgYnVmZmVyIHVudGlsIHRoZSBjYWxsIHdvcmtzLCBvciB3ZQorZW5kIHVwIHRyeWluZyAxMCB0aW1lcy4gIFRoZSBuZXcgc2l6ZSBpcyBlaXRoZXIgdGhlIHVwZGF0ZWQgdnAtPnNpemUKK2Zyb20gdGhlIGZhaWxlZCBwZ2V0IGNhbGwsIG9yIHRoZSBwcmV2aW91cyBzaXplICsgMTAyNC4KKworSWYgREJJIGRlYnVnZ2luZyBpcyBlbmFibGVkLCBhZGRpdGlvbmFsIGRpYWdub3N0aWNzIGFyZSBwcmludGVkLCBvdGhlcndpc2UKK2EgYmFzaWMgcmV0cnkgYW5kIHN1Y2Nlc3MgbWVzc2FnZSBpcyBhZGRlZCB0byBzaG93IHRoYXQgdGhlIGZhaWx1cmUgd2FzCityZXNvbHZlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlICh3b3JrYXJvdW5kKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtZGIuYworKysrIHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuYworQEAgLTIyMTIsOCArMjIxMiwxMiBAQCBzdGF0aWMgaW50IHJwbW1pR2V0KGRiaUluZGV4IGRiaSwgREJDICoKKyAJdnAtPmZsYWdzIHw9IERCX0RCVF9VU0VSTUVNOworIAlyYyA9IGRiaUdldChkYmksIGRiY3Vyc29yLCBrcCwgdnAsIGZsYWdzKTsKKyAJaWYgKHJjID09IERCX0JVRkZFUl9TTUFMTCkgeworKwkgICAgaW50IHJldHJ5ID0gMDsKKysJICAgIHNpemVfdCBvcmlnbGVuID0gdnAtPnNpemU7CisgCSAgICBzaXplX3QgdWhsZW4gPSB2cC0+c2l6ZTsKKy0JICAgIHZvaWQgKiB1aCA9IG1tYXAoTlVMTCwgdWhsZW4sIF9wcm90LCBfZmxhZ3MsIF9mZG5vLCBfb2ZmKTsKKysJICAgIHZvaWQgKiB1aDsKKytyZXRyeV9nZXQ6CisrCSAgICB1aCA9IG1tYXAoTlVMTCwgdWhsZW4sIF9wcm90LCBfZmxhZ3MsIF9mZG5vLCBfb2ZmKTsKKyAJICAgIGlmICh1aCA9PSBOVUxMIHx8IHVoID09ICh2b2lkICopLTEpCisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiPT0+IG1tYXAoJXBbJXVdLCAweCV4LCAweCV4LCAlZCwgMHgleCkgZXJyb3IoJWQpOiAlc1xuIiwKK0BAIC0yMjM1LDYgKzIyMzksMjUgQEAgc3RhdGljIGludCBycG1taUdldChkYmlJbmRleCBkYmksIERCQyAqCisgCQlpZiAobXVubWFwKHVoLCB1aGxlbikgIT0gMCkKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBtdW5tYXAoJXBbJXVdKSBlcnJvciglZCk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAJdWgsICh1bnNpZ25lZCl1aGxlbiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisrCSAgICAgICAgLyogV2Ugd2FudCB0byBiZSBzdXJlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgdG8gYXZvaWQgYSBsb29wISAqLworKwkgICAgICAgIGlmIChyYyA9PSBEQl9CVUZGRVJfU01BTEwgJiYgcmV0cnkgPCAxMCkgeworKwkJICAgLyogSWYgd2UgZ290IGEgbGFyZ3IgdnAtc2l6ZSBiYWNrLCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGluY3JlbWVudCB0aGUgc2l6ZSBieSAxayAqLworKwkgICAgICAgICAgIHVobGVuID0gdnAtPnNpemUgPiB1aGxlbiA/IHZwLT5zaXplIDogdWhsZW4gKyAxMDI0OworKwkJICAgcmV0cnkrKzsKKysJICAgICAgICAgICBpZiAoKGRiaSktPmRiaV9kZWJ1ZykKKysJICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gREJfQlVGRkVSX1NNQUxMIG9yaWcgcmVxdWVzdGVkICglZCksIGNvbmZpZ3VyZWQgKCVkKSwgZm9yY2luZyBsYXJnZXIgYnVmZmVyICglZCksIG5ldyBzaXplICglZClcbiIsCisrCSAgICAgICAgICAgICAgICAgICAgb3JpZ2xlbiwgdnAtPnVsZW4sIHVobGVuLCB2cC0+c2l6ZSk7CisrCSAgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiByZXRyeSAoJWQpIGRiM2NwZ2V0ICglZClcbiIsIHJldHJ5LCB1aGxlbik7CisrCSAgICAgICAgICAgZ290byByZXRyeV9nZXQ7CisrCSAgICAgICAgfQorKwkgICAgfQorKwkgICAgaWYgKHJldHJ5KSB7CisrCSAgICAgICAgaWYgKChkYmkpLT5kYmlfZGVidWcpCisrCSAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gc3VjY2VzcyBvcmlnIHJlcXVlc3RlZCAoJWQpLCBjb25maWd1cmVkIGJ1ZmZlciAoJWQpLCBidWZmZXIgKCVkKSwgc2l6ZSBhZnRlciBkYmlHZXQgKCVkKVxuIiwKKysJCQlvcmlnbGVuLCB2cC0+dWxlbiwgdWhsZW4sIHZwLT5zaXplKTsKKysJICAgICAgICBlbHNlCisrCSAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gc3VjY2Vzc1xuIik7CisgCSAgICB9CisgCX0KKyAgICAgfSBlbHNlCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9kYjMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9kYjMuYworKysrIHJwbS01LjQuMTQvcnBtZGIvZGIzLmMKK0BAIC0xNTA5LDcgKzE1MDksNyBAQCBhc3NlcnQoZGIgIT0gTlVMTCk7CisgI2VuZGlmCisgICAgIH0KKyAKKy1EQklERUJVRyhkYmksIChzdGRlcnIsICI8LS0gJXMoJXAsJXAsJXAsJXAsJXAsMHgleCkgcmMgJWQgJXMlc1xuIiwgX19GVU5DVElPTl9fLCBkYmksIGRiY3Vyc29yLCBrZXksIHBrZXksIGRhdGEsIGZsYWdzLCByYywgX0RCQ0ZMQUdTKGZsYWdzKSwgX0tFWURBVEEoa2V5LCBwa2V5LCBkYXRhLCBOVUxMKSkpOworK0RCSURFQlVHKGRiaSwgKHN0ZGVyciwgIjwtLSAlcyglcCwlcCwlcCwlcCwlcCwweCV4KSByYyAlZCAlcyVzXG4iLCBfX0ZVTkNUSU9OX18sIGRiaSwgZGJjdXJzb3IsIGtleSwgcGtleSwgZGF0YSwgZmxhZ3MsIHJjLCBfREJDRkxBR1MoZmxhZ3MpLCBfS0VZREFUQShrZXksIHBrZXksIHJjID09IERCX0JVRkZFUl9TTUFMTCA/IE5VTEwgOiBkYXRhLCBOVUxMKSkpOworICAgICByZXR1cm4gcmM7CisgfQorIC8qQD1tdXN0bW9kQCovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjZlMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaApAQCAtMCwwICsxLDY1IEBACitEZWJ1ZyB0aGUgcGxhdGZvcm0gc2NvcmUgZ2VuZXJhdGlvbi4uLgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC00NjUsNiArNDY1LDggQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAorICAgICByYyA9IChycG1SQykgcnBtaW9iU2x1cnAocGxhdGZvcm0sICZpb2IpOworIAorKyAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtIGZpbGUgJXNcbiIsIHBsYXRmb3JtKTsKKysKKyAgICAgaWYgKHJjIHx8IGlvYiA9PSBOVUxMKSB7CisgCXJjID0gUlBNUkNfRkFJTDsKKyAJZ290byBleGl0OworQEAgLTQ4Niw2ICs0ODgsNyBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCSAgICB3aGlsZSAoLS10ID4gcCAmJiB4aXNzcGFjZSgqdCkpCisgCQkqdCA9ICdcMCc7CisgCSAgICBpZiAodCA+IHApIHsKKysJCWZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gbWlyZUFwcGVuZCBSRUdFWCAlc1xuIiwgcCk7CisgCQl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9SRUdFWCwgMCwgcCwgTlVMTCwgJm1pX3JlLCAmbWlfbnJlKTsKKyAJICAgIH0KKyAJICAgIGNvbnRpbnVlOworQEAgLTUwMyw2ICs1MDYsMTEgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAkJX2dudSA9IHJwbUV4cGFuZCgiLSIsIGN2b2ctPmdudSwgTlVMTCk7CisgCisgCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX2dudSIsIE5VTEwsIChfZ251ID8gX2dudSA6ICIiKSwgLTEpOworKwkgICAgZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBhZGRNYWNybyAlcy0lcy0lcyglcylcbiIsCisrCSAgICAJcnBtRXhwYW5kKCIle19wbGF0Zm9ybV9jcHV9IiwgTlVMTCksCisrCQlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX3ZlbmRvcn0iLCBOVUxMKSwKKysJCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fb3N9IiwgTlVMTCksCisrCQlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX2dudX0iLCBOVUxMKSk7CisgI2Vsc2UKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9jcHUiLCBOVUxMLCBjdm9nLT5jcHUsIC0xKTsKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCBjdm9nLT52ZW5kb3IsIC0xKTsKK0BAIC01MTAsNiArNTE4LDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl9CisgCisrCWZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gbWlyZUFwcGVuZCBTVFJDTVAgJXMgLS0gIiwgcCk7CisgI2lmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpIC8qIFNraXAgdGhlIGV4cGxpY2l0LXBsYXRmb3JtICovCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworIAkvKiBkbyBub3QgdXNlIHZlbmRvciBhbmQgR05VIGF0dHJpYnV0aW9uICovCitAQCAtNTE5LDYgKzUyOCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJCShjdm9nICYmICpjdm9nLT5nbnUgPyAiLSIgOiBOVUxMKSwKKyAJCShjdm9nID8gY3ZvZy0+Z251IDogTlVMTCksIE5VTEwpOworICNlbmRpZgorKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBwKTsKKyAJeHggPSBtaXJlQXBwZW5kKFJQTU1JUkVfU1RSQ01QLCAwLCBwLCBOVUxMLCAmbWlfcmUsICZtaV9ucmUpOworIAlwID0gX2ZyZWUocCk7CisgI2VuZGlmCitAQCAtNjg4LDkgKzY5OCwxMiBAQCBpbnQgcnBtUGxhdGZvcm1TY29yZShjb25zdCBjaGFyICogcGxhdGZvCisgCisgICAgIGlmICgobWlyZSA9IChtaVJFKSBtaV9yZSkgIT0gTlVMTCkKKyAgICAgZm9yIChpID0gMDsgaSA8IG1pX25yZTsgaSsrKSB7CistCWlmIChtaXJlUmVnZXhlYyhtaXJlICsgaSwgcGxhdGZvcm0sIDApID49IDApCisrCWlmIChtaXJlUmVnZXhlYyhtaXJlICsgaSwgcGxhdGZvcm0sIDApID49IDApIHsKKysJICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm1TY29yZSAlcyAoJWQpXG4iLCBwbGF0Zm9ybSwgaSArIDEpOworIAkgICAgcmV0dXJuIChpICsgMSk7CisrCX0KKyAgICAgfQorKyAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtU2NvcmUgJXMgKCVkKVxuIiwgcGxhdGZvcm0sIDApOworICAgICByZXR1cm4gMDsKKyB9CisgLypAPW9ubHl0cmFuc0AqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1ZjhkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA3MGQ4ODE4NzNiNDQzYzliYWQ1MDJkYjk2NjU1OTU0NTVkNGYwYWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDggSnVsIDIwMTQgMDc6NDE6MTAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBkaXNhYmxlIC1Xbm8tb3ZlcnJpZGUtaW5pdAorCitGaXhlZCBycG0tbmF0aXZlLmRvX2NvbmZpZ3VyZSBlcnJvciBvbiBDZW50T1MgNS54OgorCitjYzE6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAiLVduby1vdmVycmlkZS1pbml0IgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGFkZWZmZTAuLjY3NDZiNGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE2Myw3ICsxNjMsNyBAQCBBQ19BUkdfRU5BQkxFKGJ1aWxkLXdhcm5pbmdzLAorICMgWFhYIGdjYy00LjIgb24gTWFjIE9TIFggaGFzbid0CisgIyAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLXVudXNlZC1idXQtc2V0LXZhcmlhYmxlIgorICMgWFhYIHJwbWlvL3NldC5jIG5lZWRzIHRoaXMKKy0gICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1vdmVycmlkZS1pbml0IgorKyMgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1vdmVycmlkZS1pbml0IgorICAgICAgICAgZWxpZiB0ZXN0ICIuYCRDQyAtViAyPiYxIHwgZ3JlcCAnU3VuIEMnYCIgIT0gLjsgdGhlbgorICAgICAgICAgICAgIGRubCAjIFN1biBTdHVkaW8gKHVzdWFsbHkgImNjIikKKyAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXYiCistLQorMS44LjIuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maWxlY2xhc3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maWxlY2xhc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkYjZmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpbGVjbGFzcy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitycG1mYy5jOiAgQWx3YXlzIGdlbmVyYXRlIHBlci1maWxlIGluZm9ybWF0aW9uCisKK0V2ZW4gd2hlbiB0aGUgcGVyLWZpbGUgZGVwZW5kZW5jeSBnZW5lcmF0ZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBnZW5lcmF0ZQorcGVyIGZpbGUgY2xhc3NpZmljYXRpb24gYW5kIG90aGVyIGFzc29jaWF0ZWQgZGF0YS4KKworTm90ZTogdGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLiAgRXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQgdG8gaGF2ZSBhIHdheQordG8gc2VlZCBwZXItZmlsZSBkZXBlbmRlbmN5IGFuZCBvdGhlciBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZW5lcmF0ZSBhCitwYWNrYWdlIGZyb20gcHJldmlvdXNseSBkZXRlcm1pbmVkIGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtZmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtZmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbWZjLmMKK0BAIC0xNzM0LDcgKzE3MzQsNiBAQCBycG1SQyBycG1mY0dlbmVyYXRlRGVwZW5kcyh2b2lkICogX3NwZWMsCisgCS8qIC4uLiB0aGVuIGdlbmVyYXRlIGRlcGVuZGVuY2llcyB1c2luZyAle19fZmluZF9yZXF1aXJlc30gZXQgYWwuICovCisgCXJjID0gcnBtZmNHZW5lcmF0ZURlcGVuZHNIZWxwZXIoc3BlYywgcGtnLCBmaSk7CisgCXByaW50RGVwcyhwa2ctPmhlYWRlcik7CistCXJldHVybiByYzsKKyAgICAgfQorIAorICAgICAvKiBHZW5lcmF0ZSBzY3JpcHRsZXQgRGVwZW5kZW5jaWVzLiAqLworQEAgLTE3NjIsOCArMTc2MSw4IEBAIHJwbVJDIHJwbWZjR2VuZXJhdGVEZXBlbmRzKHZvaWQgKiBfc3BlYywKKyAgICAgYXZbYWNdID0gTlVMTDsKKyAKKyAgICAgZmMgPSBycG1mY05ldygpOworLSAgICBmYy0+c2tpcFByb3YgPSAhcGtnLT5hdXRvUHJvdjsKKy0gICAgZmMtPnNraXBSZXEgPSAhcGtnLT5hdXRvUmVxOworKyAgICBmYy0+c2tpcFByb3YgPSAhcGtnLT5hdXRvUHJvdiB8fCAhaW50ZXJuYWxkZXBzOworKyAgICBmYy0+c2tpcFJlcSA9ICFwa2ctPmF1dG9SZXEgfHwgIWludGVybmFsZGVwczsKKyAgICAgZmMtPnRyYWNrZWQgPSAwOworIAorICAgICB7CWNvbnN0IGNoYXIgKiBidWlsZFJvb3RVUkw7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maXgtbG9naW8tY3AucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhMGE4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpeC1sb2dpby1jcC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitPY2Nhc2lvbmFsbHkgdGhlIGNwIC1wIGZhaWxzIHdpdGggYSBub24temVybyByZXR1cm4gY29kZS4gIFRoaXMgd2lsbCBjYXVzZQordGhlIHN5c3RlbSBhYm9ydCB0aGUgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0vcnBtZGIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0ub3JpZy9ycG1kYi9NYWtlZmlsZS5hbQorKysrIHJwbS9ycG1kYi9NYWtlZmlsZS5hbQorQEAgLTIzNCwxMSArMjM0LDE0IEBAIGxjb3YtcmVwb3J0OgorICNsY292LXVwbG9hZDogbGNvdgorICMJcnN5bmMgLXJ2eiAtZSBzc2ggLS1kZWxldGUgbGNvdi8qID8/PworIAorKyQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGU6ICQoc3JjZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlCisrCUBpZiB0ZXN0ICIuJChidWlsZGRpcikiICE9ICIuJChzcmNkaXIpIjsgdGhlbiBcCisrCQljcCAtZnAgJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgXAorKwkJICAgICAgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSA7IFwKKysJIGZpCisrCisgbG9naW9fQlVJTFQgPSBsb2dpb19hdXRvLmMgbG9naW9fYXV0b3AuYyBsb2dpb19hdXRvLmggbG9naW9fdGVtcGxhdGUKKy0kKGxvZ2lvX0JVSUxUKToJbG9naW8uYXdrIGxvZ2lvLnNyYyBsb2dpb19yZWNvdmVyX3RlbXBsYXRlCistCUB0ZXN0IC1lICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgfHwgXAorLQkJY3AgLXAgJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgXAorLQkJICAgICAgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZQorKyQobG9naW9fQlVJTFQpOglsb2dpby5hd2sgbG9naW8uc3JjICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKyAJQHJtIC1mICQobG9naW9fQlVJTFQpCisgCUAkKEFXSykgLWYgJChzcmNkaXIpL2xvZ2lvLmF3ayBcCisgCQktdiBoZWFkZXJfZmlsZT1sb2dpb19hdXRvLmggXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWIyMzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgbmVlZCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmxpbmsgc2l6ZSBhbmQgb3VyIGxpbmtzTGVmdCBjb3VudGVyCitkbyBtYXRjaC4gSWYgYW4gcnBtIGlzIGJhZGx5IGNvbnN0cnVjdGVkIHdpdGggaWRlbnRpY2FsIGlub2RlIHZhbHVlcworZm9yIG11bHRpcGxlIGhhcmRsaW5rZWQgZmlsZXMsIHN1Y2ggYW4gcnBtIHdpbGwgb3RoZXJ3aXNlIGFjY2VzcyBtZW1vcnkKK291dCBvZiBhcnJheSBib3VuZHMgYW5kIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBjcmFzaGVzLgorCitUaGUgZml4IGlzIHRvIGFkZCBpbiB0aGUgc2FuaXR5IGNoZWNrIGFuZCBleGl0IGlmIGJhZCBjaXJjdW1zdGFuY2VzCithcmUgZm91bmQuIFdlIG5lZWQgdG8gZml4IHRoZSBjYWxsZXIgdG8gY2hlY2sgdGhlIHJldHVybiBjb2RlIHRvby4KKworUlAgMjAxNC82LzEwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9saWIvZnNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2ZzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvZnNtLmMKK0BAIC00OTUsNiArNDk1LDExIEBAIHN0YXRpYyBpbnQgc2F2ZUhhcmRMaW5rKC8qQHNwZWNpYWxAKi8gLyoKKyAgICAgfQorIAorICAgICBpZiAoZnNtLT5nb2FsID09IElPU01fUEtHQlVJTEQpIC0tZnNtLT5saS0+bGlua3NMZWZ0OworKyAgICBpZiAoZnNtLT5saS0+bGlua3NMZWZ0ID4gc3QtPnN0X25saW5rKSB7CisrCXJwbWxvZyhSUE1MT0dfRVJSLCBfKCJDb3JydXB0ZWQgaGFyZGxpbmtzIGZvdW5kIChjb3VudCAlZCBkb2VzIG5vdCBtYXRjaCAlZCksIGV4aXRpbmcuXG4iKSwgZnNtLT5saS0+bGlua3NMZWZ0LCBzdC0+c3RfbmxpbmspOworKwlyZXR1cm4gLTE7CisrICAgIH0KKysKKyAgICAgZnNtLT5saS0+ZmlsZXhbZnNtLT5saS0+bGlua3NMZWZ0XSA9IGZzbS0+aXg7CisgICAgIC8qQC1vYnNlcnZlcnRyYW5zIC1kZXBlbmRlbnR0cmFuc0AqLworICAgICBmc20tPmxpLT5uc3VmZml4W2ZzbS0+bGktPmxpbmtzTGVmdF0gPSBmc20tPm5zdWZmaXg7CitAQCAtMTg3OCw4ICsxODgzLDEzIEBAIGlmICghKGZzbUdldEZpKGZzbSktPm1hcGZsYWdzICYgSU9TTV9QQVkKKyAJZnNtLT5wb3N0cG9uZSA9IGlvc21GaWxlQWN0aW9uU2tpcHBlZChmc20tPmFjdGlvbik7CisgCWlmIChmc20tPmdvYWwgPT0gSU9TTV9QS0dJTlNUQUxMIHx8IGZzbS0+Z29hbCA9PSBJT1NNX1BLR0JVSUxEKSB7CisgCSAgICAvKkAtZXZhbG9yZGVyQCovIC8qIEZJWDogc2F2ZUhhcmRMaW5rIGNhbiBtb2RpZnkgZnNtICovCistCSAgICBpZiAoU19JU1JFRyhzdC0+c3RfbW9kZSkgJiYgc3QtPnN0X25saW5rID4gMSkKKysJICAgIGlmIChTX0lTUkVHKHN0LT5zdF9tb2RlKSAmJiBzdC0+c3RfbmxpbmsgPiAxKSB7CisgCQlmc20tPnBvc3Rwb25lID0gc2F2ZUhhcmRMaW5rKGZzbSk7CisrCQlpZiAoZnNtLT5wb3N0cG9uZSA8IDApIHsKKysJCSAgICByYyA9IFJQTVJDX0ZBSUw7CisrCQkgICAgYnJlYWs7CisrCQl9CisrCSAgICB9CisgCSAgICAvKkA9ZXZhbG9yZGVyQCovCisgCX0KKyBpZiAoZnNtR2V0RmkoZnNtKS0+bWFwZmxhZ3MgJiBJT1NNX1BBWUxPQURfTElTVCkgZnNtLT5wb3N0cG9uZSA9IDE7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1saWJzcWwtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbGlic3FsLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDJlNDEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbGlic3FsLWZpeC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitEdXJpbmcgaW5zdGFsbGF0aW9uLCB0aGUgbGlidG9vbCByZWxpbmsgYXR0ZW1wdHMgdG8gbGluayB0byAtbHJwbS4uLgorVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBoYXNuJ3QgYmVlbiBpbnN0YWxsZWQgeWV0ISAgU28gc21hbGwgY2hhbmdlIGNhdXNlcwordGhlIGxpYnRvb2wgdG8gaW5zdGVhZCB1c2UgdGhlIGJ1aWxkIHZlcnNpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2xpYi9NYWtlZmlsZS5hbQorQEAgLTEyMCw2ICsxMjAsOSBAQCBsaWJycG0ubGE6ICQobGlicnBtX2xhX09CSkVDVFMpICQobGlicnBtCisgI2xpYnNxbF9sYV9TT1VSQ0VTCT0gbGlic3FsLmMKKyAjbGlic3FsX2xhX0xJQkFERAk9IGxpYnJwbS5sYSAkKFJQTURCX0xEQUREX0NPTU1PTikKKyAKKysjIHBrZ2xpYiBsaWJyYXJpZXMgbmVlZHMgdG8gaGF2ZSB1c3JsaWIgbGlicmFyaWVzIGFscmVhZHkgaW5zdGFsbGVkIQorK2luc3RhbGwtcGtnbGliTFRMSUJSQVJJRVM6IGluc3RhbGwtdXNybGliTFRMSUJSQVJJRVMKKysKKyBpbnN0YWxsLWRhdGEtaG9vazoKKyBpZiAhRU5BQkxFX0JVSUxEX0xBRklMRVMKKyAJLWZvciBsIGluICQodXNybGliX0xUTElCUkFSSUVTKTsgZG8gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sb2ctYXV0by1ybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTUzZjdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9EQl9DT05GSUcuaW4KKysrKyBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorQEAgLTQsNiArNCw3IEBAIHNldF9kYXRhX2RpciAuCisgc2V0X2NyZWF0ZV9kaXIgLgorIHNldF9sZ19kaXIgLi9sb2cKKyBzZXRfdG1wX2RpciAuL3RtcAorK3NldF9mbGFncyBkYl9sb2dfYXV0b3JlbW92ZSBvbgorIAorICMgLS0gdGhyZWFkX2NvdW50IG11c3QgYmUgPj0gOAorIHNldF90aHJlYWRfY291bnQgNjQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwYTY2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0VuYWJsZSBwbGF0Zm9ybSB0YWcgbWF0Y2hpbmcgd29ya2Fyb3VuZCBpbiBPRS4KKworV2hlbiBpbnN0YWxsaW5nIHNvbWUgTFNCIHBhY2thZ2VzIHRoZSAncGxhdGZvcm0nIGZpZWxkIGluIHRoZSBwYWNrYWdlCithcHBlYXJzIHRvIGJlIGludmFsaWQuICBJbnN0ZWFkIG9mIHJlbHlpbmcgc29sZWx5IG9uIHRoZSBwbGF0Zm9ybSBjb21wYXJpc29uCit3ZSBhbHNvIHdhbnQgdG8gZ2VuZXJhdGUgYSBwZXJjZWl2ZWQgcGxhdGZvcm0gYmFzZWQgb24gdGhlIHZhbGlkIHJwbSBjb250ZW50cworb2YgYXJjaCBhbmQgb3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2RlcGVuZHMuYworKysrIHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworQEAgLTU5NSw3ICs1OTUsNyBAQCBpbnQgcnBtdHNBZGRJbnN0YWxsRWxlbWVudChycG10cyB0cywgSGVhCisgCSAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLXVua25vd24tIiwgb3MsIE5VTEwpOworIAorIAlyYyA9IHJwbVBsYXRmb3JtU2NvcmUocGxhdGZvcm0sIHBsYXRwYXQsIG5wbGF0cGF0KTsKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAJLyoKKyAJICogSWYgbm8gbWF0Y2ggb24gcGxhdGZvcm0gdGFnLCB3ZSdsbCB0cnkgYWdhaW4gd2l0aCBhcmNoIHRhZworIAkgKiBpbiBjYXNlIHBsYXRmb3JtIHRhZyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBpdCwgd2hpY2ggaXMgdGhlIGNhc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEtZml4LXByaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjQ5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEtZml4LXByaW50LnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitMdWEgJ3ByaW50JyBzdGF0ZW1lbnQgaXMgbm90IHdvcmtpbmcgcHJvcGVybHkgaW5zaWRlIG9mIFJQTSA1CisKK1RoZSBwcmludCBzdGF0ZW1lbnQgc2hvdWxkIGNhcHR1cmUgdGhlIG91dHB1dCBhbmQgc2VuZCBpdCB0byB0aGUgc2NyaXB0Citwcm9jZXNzaW5nIGVuZ2luZSwgYW5kIG5vdCBkaXNwbGF5IGl0IGRpcmVjdGx5IHRvIHRoZSBzY3JlZW4uCisKK1RoaXMgcGF0Y2ggaXMgZnJvbTogaHR0cDovL3JwbTUub3JnL2N2cy9wYXRjaHNldD9jbj0xNzY3MQorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0IChwYXRjaHNldCAxNzY3MSBmcm9tIHJwbTUub3JnKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L0NIQU5HRVMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvQ0hBTkdFUworKysrIHJwbS01LjQuMTQvQ0hBTkdFUworQEAgLTEsMyArMSw0IEBACisrICAgIC0gamJqOiBsdWE6IGZpeDogcmVzdXJyZWN0IG91dHB1dCBjYXB0dXJlIHdpdGggbHVhLTUuMi4KKyAgICAgLSBqYmo6IHZlcmlmeTogZml4OiBicm9rZW4gbG9naWMgZm9yICVnaG9zdCBhdm9pZGFuY2UgKE1hcmsgSGF0bGUpLgorIAorIDUuNC4xMyAtPiA1LjQuMTQ6CitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9ycG1sdWEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9ycG1sdWEuYworKysrIHJwbS01LjQuMTQvcnBtaW8vcnBtbHVhLmMKK0BAIC0xNzUsNyArMTc1LDcgQEAgcnBtbHVhIHJwbWx1YU5ldyh2b2lkKQorICAgICB9OworICAgICAvKkA9cmVhZG9ubHl0cmFucyA9bnVsbGFzc2lnbiBAKi8KKyAgICAgLypAb2JzZXJ2ZXJAKi8gLypAdW5jaGVja2VkQCovCistICAgIGNvbnN0IGx1YUxfUmVnICpsaWIgPSBsdWFsaWJzOworKyAgICBjb25zdCBsdWFMX1JlZyAqbGliOworICAgICBjaGFyICpwYXRoX2J1ZjsKKyAgICAgY2hhciAqcGF0aF9uZXh0OworICAgICBjaGFyICpwYXRoOworQEAgLTE5MCwzMSArMTkwLDM0IEBAIHJwbWx1YSBycG1sdWFOZXcodm9pZCkKKyAKKyAgICAgbHVhTF9vcGVubGlicyhMKTsKKyAKKy0gICAgZm9yICg7IGxpYi0+bmFtZTsgbGliKyspIHsKKysgICAgZm9yIChsaWIgPSBsdWFsaWJzOyBsaWItPm5hbWU7IGxpYisrKSB7CisgCWx1YUxfcmVxdWlyZWYoTCwgbGliLT5uYW1lLCBsaWItPmZ1bmMsIDEpOworKwlsdWFfcG9wKEwsIDEpOworICAgICB9CisgCisgICAgIHsJY29uc3QgY2hhciAqIF9sdWFfcGF0aCA9IHJwbUdldFBhdGgocnBtbHVhUGF0aCwgTlVMTCk7CisgIAlpZiAoX2x1YV9wYXRoICE9IE5VTEwpIHsKKysjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorIAkgICAgbHVhX3B1c2hsaXRlcmFsKEwsICJMVUFfUEFUSCIpOworIAkgICAgbHVhX3B1c2hzdHJpbmcoTCwgX2x1YV9wYXRoKTsKKysJICAgIGx1YV9yYXdzZXQoTCwgTFVBX0dMT0JBTFNJTkRFWCk7CisrI2Vsc2UKKysJICAgIGx1YV9wdXNoc3RyaW5nKEwsIF9sdWFfcGF0aCk7CisrCSAgICBsdWFfc2V0Z2xvYmFsKEwsICJMVUFfUEFUSCIpOworKyNlbmRpZgorIAkgICAgX2x1YV9wYXRoID0gX2ZyZWUoX2x1YV9wYXRoKTsKKyAJfQorICAgICB9CisgCisgI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKy0gICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKy0jZWxzZQorLSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworLSNlbmRpZgorICAgICBsdWFfcHVzaGxpdGVyYWwoTCwgInByaW50Iik7CisgICAgIGx1YV9wdXNoY2Z1bmN0aW9uKEwsIHJwbV9wcmludCk7CistCistI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKyAgICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKyAjZWxzZQorLSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworKyAgICBsdWFfcHVzaGNmdW5jdGlvbihMLCBycG1fcHJpbnQpOworKyAgICBsdWFfc2V0Z2xvYmFsKEwsICJwcmludCIpOworICNlbmRpZgorKworICAgICBycG1sdWFTZXREYXRhKGx1YSwgImx1YSIsIGx1YSk7CisgCisgICAgIC8qIGxvYWQgYWxsIHN0YW5kYXJkIFJQTSBMdWEgc2NyaXB0IGZpbGVzICovCitAQCAtMzUxLDYgKzM1NCw5IEBAIHZvaWQgcnBtbHVhU2V0VmFyKHJwbWx1YSBfbHVhLCBycG1sdWF2IHYKKyAjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorIAlpZiAobHVhLT5wdXNoc2l6ZSA9PSAwKQorIAkgICAgbHVhX3B1c2h2YWx1ZShMLCBMVUFfR0xPQkFMU0lOREVYKTsKKysjZWxzZQorKwlpZiAobHVhLT5wdXNoc2l6ZSA9PSAwKQorKwkgICAgbHVhX3B1c2hnbG9iYWx0YWJsZShMKTsKKyAjZW5kaWYKKyAJaWYgKHB1c2h2YXIoTCwgdmFyLT5rZXlUeXBlLCAmdmFyLT5rZXkpICE9IC0xKSB7CisgCSAgICBpZiAocHVzaHZhcihMLCB2YXItPnZhbHVlVHlwZSwgJnZhci0+dmFsdWUpICE9IC0xKQorQEAgLTEwMzksMTQgKzEwNDUsMTUgQEAgc3RhdGljIGludCBycG1fcHJpbnQgKGx1YV9TdGF0ZSAqTCkKKyAgICAgbHVhX2dldGdsb2JhbChMLCAidG9zdHJpbmciKTsKKyAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAJY29uc3QgY2hhciAqczsKKysJc2l6ZV90IGw7CisgCWx1YV9wdXNodmFsdWUoTCwgLTEpOyAgLyogZnVuY3Rpb24gdG8gYmUgY2FsbGVkICovCisgCWx1YV9wdXNodmFsdWUoTCwgaSk7ICAgLyogdmFsdWUgdG8gcHJpbnQgKi8KKyAJbHVhX2NhbGwoTCwgMSwgMSk7CistCXMgPSBsdWFfdG9zdHJpbmcoTCwgLTEpOyAgLyogZ2V0IHJlc3VsdCAqLworKwlzID0gbHVhX3RvbHN0cmluZyhMLCAtMSwgJmwpOyAgLyogZ2V0IHJlc3VsdCAqLworIAlpZiAocyA9PSBOVUxMKQorIAkgICAgcmV0dXJuIGx1YUxfZXJyb3IoTCwgImB0b3N0cmluZycgbXVzdCByZXR1cm4gYSBzdHJpbmcgdG8gYHByaW50JyIpOworIAlpZiAobHVhLT5zdG9yZXByaW50KSB7CistCSAgICBzaXplX3Qgc2wgPSBsdWFfcmF3bGVuKEwsIC0xKTsKKysJICAgIHNpemVfdCBzbCA9IGw7CisgCSAgICBpZiAoKHNpemVfdCkobHVhLT5wcmludGJ1ZnVzZWQrc2wrMSkgPiBsdWEtPnByaW50YnVmc2l6ZSkgeworIAkJbHVhLT5wcmludGJ1ZnNpemUgKz0gc2wrNTEyOworIAkJbHVhLT5wcmludGJ1ZiA9IChjaGFyICopIHhyZWFsbG9jKGx1YS0+cHJpbnRidWYsIGx1YS0+cHJpbnRidWZzaXplKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkzMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCBzdXBwb3J0IGZvciBjcm9zcyBjb21waWxpbmcgbHVhCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTEyMSw2ICsxMjEsOSBAQCBBQ19QUk9HX1lBQ0MKKyAKKyBBQ19QQVRIX1BST0coQVMsIGFzLCBhcykKKyAKKytDQ19GT1JfQlVJTEQ9JHtDQ19GT1JfQlVJTEQtXCQoQ0MpfQorK0FDX1NVQlNUKENDX0ZPUl9CVUlMRCkKKysKKyBkbmwgIyBHQ0Mgc3BlY2lmaWNzCisgQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKKyBBQ19BUkdfRU5BQkxFKGJ1aWxkLXBpYywKK0luZGV4OiBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9sdWEvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorQEAgLTQxLDcgKzQxLDcgQEAgcnBtbHVhY19MREFERCA9IGxpYmx1YS5sYQorIAorICMgLS0tIGJpbjJjIGRvZXNuJ3QgbmVlZCBhbnl0aGluZyBidXQgYSBjb21waWxlcgorIGJpbjJjJChFWEVFWFQpOiAgYmluMmMuYworLQkkKENDKSAtbyAkQCAkPAorKwkkKENDX0ZPUl9CVUlMRCkgLW8gJEAgJDwKKyAKKyBsaWJsdWFfbGFfU09VUkNFUyA9CisgbGlibHVhX2xhX0NGTEFHUyA9IEBXSVRIX0xVQV9TVUJESVJfREVGQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhMGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlzYWJsZSBleHRlcm5hbCBrZXkgc2VydmVyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGVuIFJQTSBleHBlcmllbmNlcyBhIHNpZ25lZCBwYWNrYWdlLCB3aXRoIGEgc2lnbmF0dXJlIHRoYXQgaXQgZG9lcyBOT1Qga25vdy4KK0J5IGRlZmF1bHQgaXQgd2lsbCBzZW5kIHRoZSAtZmluZ2VycHJpbnQtIChhbmQgb25seSB0aGUgMTYgZGlnaXQgZmluZ2VycHJpbnQpIHRvCithbiBleHRlcm5hbCBIS1Agc2VydmVyLCB0cnlpbmcgdG8gZ2V0IHRoZSBrZXkgZG93bi4KKworVGhpcyBpcyBwcm9iYWJseSBub3QgYSByZWFzb25hYmxlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBzeXN0ZW0gdG8gZG8sIGluc3RlYWQKK2l0IHNob3VsZCBzaW1wbHkgZmFpbCB0aGUga2V5IGxvb2t1cC4gIElmIHNvbWVvbmUgd2FudHMgdG8gZW5hYmxlIHRoZSBIS1Agc2VydmVyCitpdCdzIGVhc3kgZW5vdWdoIHRvIGRvIGJ5IGVuYWJsaW5nIHRoZSBuZWNlc3NhcnkgbWFjcm9zLgorCitTaWduZWQtb2ZmLWJ5OiB5emh1MSA8eWFuanVuLnpodUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorLS0tIGEvbWFjcm9zL21hY3Jvcy5pbgorKysrIGIvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTU0Niw4ICs1NDYsOCBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAjIEhvcm93aXR6IEtleSBQcm90b2NvbCBzZXJ2ZXIgY29uZmlndXJhdGlvbgorICMKKyAjJV9oa3Bfa2V5c2VydmVyICAgICAgICAgaGtwOi8va2V5cy5uM25wcS5uZXQKKy0lX2hrcF9rZXlzZXJ2ZXIgICAgICAgICBoa3A6Ly9wb29sLnNrcy1rZXlzZXJ2ZXJzLm5ldAorLSVfaGtwX2tleXNlcnZlcl9xdWVyeSAgICV7X2hrcF9rZXlzZXJ2ZXJ9L3Brcy9sb29rdXA/b3A9Z2V0JnNlYXJjaD0KKysjJV9oa3Bfa2V5c2VydmVyICAgICAgICAgaGtwOi8vcG9vbC5za3Mta2V5c2VydmVycy5uZXQKKysjJV9oa3Bfa2V5c2VydmVyX3F1ZXJ5ICAgJXtfaGtwX2tleXNlcnZlcn0vcGtzL2xvb2t1cD9vcD1nZXQmc2VhcmNoPQorIAorIAorICVfbnNzZGJfcGF0aAkvZXRjL3BraS9uc3NkYgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWIyZDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorbWFjcm9zL21hY3Jvcy5pbjogUmV2ZXJ0IHNldHRpbmdzIHRvIHRoZSBzYW1lIGFzIFJQTSA1LjQuMAorCitFbmFibGUgYSByZWFzb25hYmxlIHNldCBvZiBycG1kZXBzIGRlcGVuZGVuY3kgaGVscGVyIG1hY3Jvcy4gIFRoZXNlIHNldHMKK3dlcmUgdXNlZCBieSBSUE0gNS40LjAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC0xMDIyLDcgKzEwMjIsNyBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIyAtLS0tIHJwbWJ1aWxkIG1hY3Jvcy4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5ycG1idWlsZH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MucnBtYnVpbGR9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgY21ha2UoLi4uKSBjb25maWd1cmF0aW9uCitAQCAtMTAzOCwxNSArMTAzOCwxNSBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBwZXJsKC4uLikgY29uZmlndXJhdGlvbgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGVybH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wZXJsfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHB5dGhvbiguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9weXRob259CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcHl0aG9ufQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHBocCguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9waHB9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGhwfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGphdmEoLi4uKSBjb25maWd1cmF0aW9uLgorQEAgLTEwNTQsMTEgKzEwNTQsMTEgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgbGlidG9vbCguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9saWJ0b29sfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL2xpYnRvb2x9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcGtnY29uZmlnKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BrZ2NvbmZpZ30KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wa2djb25maWd9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgbW9ubyguLi4pIGNvbmZpZ3VyYXRpb24uCitAQCAtMTA3MCw3ICsxMDcwLDcgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdGNsKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3RjbH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC90Y2x9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdHlwZWxpYiguLi4pIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1sb29wbXNnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tbG9vcG1zZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjZlZDJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tbG9vcG1zZy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWIvb3JkZXIuYzogTWFrZSB0aGUgZGVwZW5kZW5jeSBsb29wIG1lc3NhZ2VzIGludG8gZGVidWcgbXNncworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvb3JkZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvb3JkZXIuYworKysrIHJwbS01LjQuMTQvbGliL29yZGVyLmMKK0BAIC0yMTc1LDcgKzIxNzUsNyBAQCByZXNjYW46CisgCQljb25zdCBjaGFyICogZHA7CisgCQlycG1sb2dMdmwgbXNnbHZsID0gKGFuYWNvbmRhIHx8IChycG10c0RGbGFncyh0cykgJiBSUE1ERVBTX0ZMQUdfREVQTE9PUFMpKQorIAkJCT8gUlBNTE9HX1dBUk5JTkcgOiBSUE1MT0dfRVJSOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIC8qIGxvb3AtZGV0ZWN0aW9uLW9wdGlvbmFsLWxvZ2xldmVsICovCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKSAvKiBsb29wLWRldGVjdGlvbi1vcHRpb25hbC1sb2dsZXZlbCAqLworIAkJLy8gUmVwb3J0IGxvb3BzIGFzIGRlYnVnLWxldmVsIG1lc3NhZ2UgYnkgZGVmYXVsdCAoNyA9IFJQTUxPR19ERUJVRyksIG92ZXJyaWRhYmxlCisgCQltc2dsdmwgPSBycG1FeHBhbmROdW1lcmljKCIlez9fbG9vcF9kZXRlY3Rpb25fbG9nbGV2ZWx9JXs/IV9sb29wX2RldGVjdGlvbl9sb2dsZXZlbDo3fSIpOworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tcGVybC11cnBtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tcGVybC11cnBtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTgyMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1wZXJsLXVycG0ucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRGlzYWJsZSBwZXJsLVVSUE0gc3VwcG9ydAorCitUaGlzIGNhdXNlcyBhIGNvbmZpZ3VyZSBmYWlsdXJlIHdoZW4gcGVybC1VUlBNIGlzIG5vdCB1c2VkLgorCit8IGNvbmZpZ3VyZS5hYzoxMTU5OiByZXF1aXJlZCBmaWxlIGBwZXJsLVVSUE0vTWFrZWZpbGUuUEwuaW4nIG5vdCBmb3VuZAorfCBjb25maWd1cmUuYWM6MTE1OTogcmVxdWlyZWQgZmlsZSBgcGVybC1VUlBNL01ha2VmaWxlLmluJyBub3QgZm91bmQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTE4NiwzMCArMTE4NiwxMCBAQCBBQ19TVUJTVChXSVRIX1BFUkxfU1VCRElSKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9TVUJQQUNLQUdFKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9MSUJTKQorIAorLWRubCAjIG9wdGlvbmFsIFBlcmwtVVJQTSBsYW5ndWFnZSBiaW5kaW5ncworK2RubCAjIGRpc2FibGUgUGVybC1VUlBNIGxhbmd1YWdlIGJpbmRpbmdzCisgV0lUSF9QRVJMX1VSUE1fU1VCRElSPSIiCisgV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRT0wCisgV0lUSF9QRVJMX1VSUE1fTElCUz0iIgorLWlmIHRlc3QgIi4kV0lUSF9QVEhSRUFEUyIgPSAueWVzOyB0aGVuCistICAgIFdJVEhfUEVSTF9VUlBNX0xJQlM9IiRMSUJTIgorLWZpCistQUNfQVJHX1dJVEgocGVybC11cnBtLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXBlcmwtdXJwbV0sIFtidWlsZCB3aXRoIFBlcmwgVVJQTSBsYW5ndWFnZSBiaW5kaW5nc10pLCBbCistICAgIGlmIHRlc3QgIi4kd2l0aHZhbCIgIT0gLm5vOyB0aGVuCistCVBFUkxfVVJQTV9JTlNUQUxMRElSUz0iIgorLQkgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPT0gInZlbmRvciI7IHRoZW4KKy0JCSAgICBQRVJMX1VSUE1fSU5TVEFMTERJUlM9IidJTlNUQUxMRElSUycJPT4gJ3ZlbmRvcicsIgorLQkgICAgZmkKKy0JICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9PSAic2l0ZSI7IHRoZW4KKy0JCSAgICBQRVJMX1VSUE1fSU5TVEFMTERJUlM9IidJTlNUQUxMRElSUycgICAgID0+ICdzaXRlJywiCistCSAgICBmaQorLQkgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtQRVJMX1VSUE1fSU5TVEFMTERJUlNdLCBbJFBFUkxfVVJQTV9JTlNUQUxMRElSU10sIFtQZXJsIGluc3RhbGwgZGlyZWN0b3J5ICh2ZW5kb3Ivc2l0ZSldKQorLQkgICAgQUNfU1VCU1QoUEVSTF9VUlBNX0lOU1RBTExESVJTKQorLSAgICAgICAgV0lUSF9QRVJMX1VSUE1fU1VCRElSPXBlcmwtVVJQTQorLSAgICAgICAgV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRT0xCistICAgICAgICBBQ19DT05GSUdfRklMRVMoW3BlcmwtVVJQTS9NYWtlZmlsZS5QTF0pCistICAgICAgICBBQ19DT05GSUdfRklMRVMoW3BlcmwtVVJQTS9NYWtlZmlsZV0pCistICAgIGZpCistXSkKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9TVUJESVIpCisgQUNfU1VCU1QoV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRSkKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9MSUJTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkNTg2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorcnBtOiBvcGVuZGIgYmVmb3JlIHJwbXZlcmlmeXNjcmlwdCB0byBhdm9pZCBudWxsIHBvaW50IGlucHV0CisKK0lmIHRoZSBjb21tYW5kIGlzICJycG0gLVYiIGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIChoZWFkZXJJc0VudHJ5KGgsIFJQTVRBR19WRVJJRllTQ1JJUFQpIAorfHwgaGVhZGVySXNFbnRyeShoLCBSUE1UQUdfU0FOSVRZQ0hFQ0spKSBsb2NhdGVkIGluIC9saWIvdmVyaWZ5LmMgaXMgdHJ1ZSwgaXQgd2lsbCBjYWxsCitycG1wc21TdGFnZSBmdW5jdGlvbihycG1WZXJpZnlTY3JpcHQtPnJwbXBzbVNjcmlwdFN0YWdlLT5ycG1wc21TdGFnZSkgYW5kIG9jY3VyIHNlZ21lbnQKK2ZhdWx0IGJlY2F1c2Ugb2YgbnVsbCBwb2ludChycG10c0dldFJkYih0cykgPT0gTlVMTCBhbmQgcnBtdHNHZXRSZGIodHMpLT5kYl90eG4pLgorU28gd2Ugb3BlbiBycG1kYiB0byBhdm9pZCBiYWQgaW5wdXQgd2hlbiBmaW5kIGhlYWRlcklzRW50cnkgdHJ1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8emhpeGlvbmcuY2hpQHdpbmRyaXZlci5jb20+CitJbmRleDogcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3ZlcmlmeS5jCTIwMTUtMDctMjIgMjI6MDk6NTkuOTkyODk1MzU1ICswODAwCisrKysgcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMJMjAxNS0wOC0xMyAxMDoyMDozMy43NTIxNzc5MDYgKzA4MDAKK0BAIC02MTMsNiArNjEzLDggQEAKKyAJeworIAkgICAgRkRfdCBmZG8gPSBmZER1cChTVERPVVRfRklMRU5PKTsKKyAKKysJICAgIHJwbXRzT3BlbkRCKHRzLCBPX1JET05MWSk7ICAgICAgICAgICAgLypPcGVuIHRoZSBEQiB0byBhdm9pZCBudWxsIHBvaW50IGlucHV0IGluIGZ1bmN0aW9uIHJwbXBzbVN0YWdlKCkqLworKworIAkgICAgcmMgPSBycG1maVNldEhlYWRlcihmaSwgaCk7CisgCSAgICBpZiAoKHJjID0gcnBtVmVyaWZ5U2NyaXB0KHF2YSwgdHMsIGZpLCBmZG8pKSAhPSAwKQorIAkJZWMgKz0gcmM7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vc3NwLXV1aWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vc3NwLXV1aWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYWJhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9zc3AtdXVpZC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitGaXggaW50ZWdyYXRpb24gb2Ygb3NzcC11dWlkCisKK1dlIG5lZWQgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZSB1dGlsLWxpbnV4IHV1aWQgbGlicmFyeSwgaW5zdGVhZAord2UgbmVlZCBvc3NwLXV1aWQuICBUaGVyZSBpcyBhIHJlbGF0ZWQgaGFjayBpbiBkb19jb25maWd1cmUgdG8KK21ha2Ugc3VyZSB0aGF0IHdlIHVzZSB0aGUgcmlnaHQgLnBjIGZpbGUgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTk1MSw3ICsxOTUxLDcgQEAgZ3JlcCAtdiAnZGVmaW5lIEhBVkVfVU5JU1REX0gnIGNvbmZkZWZzLgorIGVzYWMKKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbT1NTUCB1dWlkXSwgW3V1aWRdLAorLSAgICBbb3NzcC11dWlkIHV1aWRdLCBbdXVpZF9pbXBvcnRdLCBbdXVpZC5oXSwKKysgICAgW29zc3AtdXVpZF0sIFt1dWlkX2ltcG9ydF0sIFt1dWlkLmhdLAorICAgICBbbm8sZXh0ZXJuYWw6bm9uZV0sIFtdLAorICAgICBbIGRubCAjIGVuYWJsZSBPU1NQIHV1aWQgbmF0aXZlIEFQSSBzdXBwb3J0IGZvciBlbWJlZGRlZCBMdWEKKyAgICAgICBpZiB0ZXN0ICIuJFdJVEhfTFVBIiA9IC55ZXM7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNWUxMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCB0aGUgYWJpbGl0eSB0byBxdWVyeSB0aGUgcGFja2FnZW9yaWdpbgorCitXcml0dGVuIGJ5IGpiaiBhdCBycG01Lm9yZworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvaGRyZm10LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvaGRyZm10LmMKKysrKyBycG0tNS40LjE0L3JwbWRiL2hkcmZtdC5jCitAQCAtMjQwOSw4ICsyNDA5LDEwIEBAIHN0YXRpYyBpbnQgcGtnb3JpZ2luVGFnKEhlYWRlciBoLCBIRV90IGgKKyAgICAgaW50IHJjID0gMTsKKyAKKyAgICAgaGUtPnRhZyA9IFJQTVRBR19QQUNLQUdFT1JJR0lOOworLSAgICBpZiAoIWhlYWRlckdldChoLCBoZSwgSEVBREVSR0VUX05PRVhURU5TSU9OKQorLSAgICAgJiYgKG9yaWdpbiA9IGhlYWRlckdldE9yaWdpbihoKSkgIT0gTlVMTCkKKysgICAgLyogWFhYIHR3byBzb3VyY2VzIGZvciB0YWcgZGF0YTogd2hhdCBzZWFyY2ggcHJlY2VkZW5jZT8gKi8KKysgICAgaWYgKGhlYWRlckdldChoLCBoZSwgSEVBREVSR0VUX05PRVhURU5TSU9OKSkKKysJcmMgPSAwOworKyAgICBlbHNlIGlmICgob3JpZ2luID0gaGVhZGVyR2V0T3JpZ2luKGgpKSAhPSBOVUxMKQorICAgICB7CisgCWhlLT50ID0gUlBNX1NUUklOR19UWVBFOworIAloZS0+cC5zdHIgPSB4c3RyZHVwKG9yaWdpbik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkMDJhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaApAQCAtMCwwICsxLDE0NiBAQAorSWYgd2UgcnVuIGJ1aWxkcyBvbiBhIGZpbGVzeXN0ZW0gd2l0aCA2NCBiaXQgaW5vZGVzIGxpa2UgWEZTLCB3ZSBuZWVkIHRvCittYXAgdGhlIGlub2RlIG51bWJlcnMgdG8gc29tZXRoaW5nIDMyIGJpdCBzaW5jZSB0aGUgY3BpbyBoZWFkZXIgb25seSBhbGxvd3MKK2ZvciAzMiBiaXQgaW5vZGUgdmFsdWVzLiBJZiB3ZSBkb24ndCBkbyB0aGlzOgorCisjZGVmaW5lIFNFVF9OVU1fRklFTEQocGh5cywgdmFsLCBzcGFjZSkgXAorICAgICAgICBzcHJpbnRmKHNwYWNlLCAiJTguOGx4IiwgKHVuc2lnbmVkIGxvbmcpICh2YWwpKTsgXAorICAgICAgICBtZW1jcHkocGh5cywgc3BhY2UsIDgpCisKK2Zyb20gY3Bpby5jIHdpbGwgcHJpbnQgbGFyZ2VyIHRoYXQgOCBjaGFyYWN0ZXIgdmFsdWVzIGFuZCB0aGVuIHRydW5jYXRlIHRoZSAKK0xTQnMuIFRoaXMgZ2VuZXJhdGVzIGNwaW8gZmlsZXMgd2hlcmUgaGFyZGxpbmtlZCBmaWxlcyBtYXkgaGF2ZSB0aGUgc2FtZQoraW5vZGUgbnVtYmVyLiBUaGUgcmVzdWx0aW5nIHJwbXMgYXJlIHRoZW4gY29ycnVwdGVkLgorCitUaGVyZSBpcyBhIHNlcGFyYXRlIHBhdGNoIGZvciB0aGUgY3Jhc2ggdGhlIGlkZW50aWNhbCBpbm9kZSBudW1iZXJzIGNhdXNlcword2hlbiBleHRyYWN0aW5nIHRoZSBycG0uCisKK1BhdGNoIHRha2VuIGZyb20gaHR0cDovL2dpdC5wbGQtbGludXgub3JnLz9wPXBhY2thZ2VzL3JwbS5naXQ7YT1jb21taXRkaWZmO2g9MTA1MjZjMjNhYWM2MGI3YjYzNmU0YzkzODYyODg3ZGJlZjhlOGYxNQorCitSUCAyMDE0LzYvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L2J1aWxkL2ZpbGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvYnVpbGQvZmlsZXMuYworKysrIHJwbS01LjQuMTQvYnVpbGQvZmlsZXMuYworQEAgLTEzMjgsNiArMTMyOCwyNiBAQCBzdGF0aWMgcnBtdWludDMyX3QgZ2V0RGlnZXN0QWxnbyhIZWFkZXIKKyAgICAgcmV0dXJuIGRhbGdvOworIH0KKyAKKytzdGF0aWMgaW50IGlzSGFyZExpbmsoRmlsZUxpc3RSZWMgZmxwLCBGaWxlTGlzdFJlYyB0bHApCisreworKyAgICByZXR1cm4gKChTX0lTUkVHKGZscC0+ZmxfbW9kZSkgJiYgU19JU1JFRyh0bHAtPmZsX21vZGUpKSAmJgorKyAgICAgICAgICAgICgoZmxwLT5mbF9ubGluayA+IDEpICYmIChmbHAtPmZsX25saW5rID09IHRscC0+ZmxfbmxpbmspKSAmJgorKyAgICAgICAgICAgIChmbHAtPmZsX2lubyA9PSB0bHAtPmZsX2lubykgJiYKKysgICAgICAgICAgICAoZmxwLT5mbF9kZXYgPT0gdGxwLT5mbF9kZXYpKTsKKyt9CisrCisrc3RhdGljIGludCBzZWVuSGFyZExpbmsoRmlsZUxpc3QgZmwsIEZpbGVMaXN0UmVjIGZscCwgaW5vX3QgKmZpbGVpZCkKKyt7CisrICAgIEZpbGVMaXN0UmVjIGlscDsKKysgICAgZm9yIChpbHAgPSBmbC0+ZmlsZUxpc3Q7IGlscCA8IGZscDsgaWxwKyspIHsKKysgICAgICAgIGlmIChpc0hhcmRMaW5rKGZscCwgaWxwKSkgeworKyAgICAgICAgICAgICpmaWxlaWQgPSBpbHAgLSBmbC0+ZmlsZUxpc3Q7CisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDA7CisrfQorKworIC8qKgorICAqIEFkZCBmaWxlIGVudHJpZXMgdG8gaGVhZGVyLgorICAqIEB0b2RvIFNob3VsZCBkaXJlY3RvcmllcyBoYXZlICVkb2MvJWNvbmZpZyBhdHRyaWJ1dGVzPyAoIzE0NTMxKQorQEAgLTEzNzQsNiArMTM5NCw3IEBAIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsJLyogWFhYIHZhbGcKKyAKKyAgICAgZm9yIChpID0gMCwgZmxwID0gZmwtPmZpbGVMaXN0OyBpIDwgZmwtPmZpbGVMaXN0UmVjc1VzZWQ7IGkrKywgZmxwKyspIHsKKyAJY29uc3QgY2hhciAqczsKKysJaW5vX3QgZmlsZWlkID0gZmxwIC0gZmwtPmZpbGVMaXN0OworIAorICAJLyogTWVyZ2UgZHVwbGljYXRlIGVudHJpZXMuICovCisgCXdoaWxlIChpIDwgKGZsLT5maWxlTGlzdFJlY3NVc2VkIC0gMSkgJiYKK0BAIC0xNDM2LDYgKzE0NTcsMTMgQEAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwkvKiBYWFggdmFsZworIAkvKiBMZWF2ZSByb29tIGZvciBib3RoIGRpcm5hbWUgYW5kIGJhc2VuYW1lIE5VTCdzICovCisgCWRwYXRobGVuICs9IChzdHJsZW4oZmxwLT5kaXNrVVJMKSArIDIpOworIAorKwkvKiBFeGNsdWRlcyBhbmQgZHVwZXMgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dCBieSBub3cuICovCisrCWlmIChTX0lTUkVHKGZscC0+ZmxfbW9kZSkpIHsKKysJICAgIGlmIChmbHAtPmZsX25saW5rID09IDEgfHwgIXNlZW5IYXJkTGluayhmbCwgZmxwLCAmZmlsZWlkKSkgeworKwkJZmwtPnRvdGFsRmlsZVNpemUgKz0gZmxwLT5mbF9zaXplOworKwkgICAgfQorKwl9CisrCisgCS8qCisgCSAqIE1ha2UgdGhlIGhlYWRlciwgdGhlIE9MREZJTEVOQU1FUyB3aWxsIGdldCBjb252ZXJ0ZWQgdG8gYSAKKyAJICogY29tcHJlc3NlZCBmaWxlIGxpc3Qgd3JpdGUgYmVmb3JlIHdlIHdyaXRlIHRoZSBhY3R1YWwgcGFja2FnZSB0bworQEAgLTE1MTgsNyArMTU0NiwxMSBAQCBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CS8qIFhYWCB2YWxnCisgCisgCS8qIFhYWCBIYXNoIGluc3RlYWQgb2YgNjRiLT4zMmIgdHJ1bmNhdGUgdG8gcHJldmVudCBhbGlhc2luZy4gKi8KKyAJeyAgIGlub190IF9pbm8gPSBmbHAtPmZsX2lubzsKKysJLyogZG9uJ3QgdXNlIGhhc2ggaGVyZSwgYXMgaGFzaCBjb2xsaXNpb25zIHdoaWNoIGhhcHBlbiBvbiBsYXJnZSBwYWNrYWdlcworKwkgICBjYXVzZSBidXMgZXJyb3JzIGluIHJwbWJ1aWxkCisgCSAgICB1aTMyID0gaGFzaEZ1bmN0aW9uU3RyaW5nKDAsICZfaW5vLCBzaXplb2YoX2lubykpOworKwkqLworKwkgICAgdWkzMiA9IGZpbGVpZCArIDE7CisgCX0KKyAJaGUtPnRhZyA9IFJQTVRBR19GSUxFSU5PREVTOworIAloZS0+dCA9IFJQTV9VSU5UMzJfVFlQRTsKK0BAIC0xNzUxLDM5ICsxNzgzLDYgQEAgaWYgKF9ycG1idWlsZEZsYWdzICYgNCkgeworIAkJSU9TTV9NQVBfVFlQRSB8IElPU01fTUFQX01PREUgfCBJT1NNX01BUF9VSUQgfCBJT1NNX01BUF9HSUQ7CisgCWlmIChpc1NyYykKKyAJICAgIGZpLT5mbWFwZmxhZ3NbaV0gfD0gSU9TTV9GT0xMT1dfU1lNTElOS1M7CistCistCWlmIChTX0lTUkVHKGZscC0+ZmxfbW9kZSkpIHsKKy0JICAgIGludCBiaW5nbyA9IDE7CistCSAgICAvKiBIYXJkIGxpbmtzIG5lZWQgYmUgdGFsbGllZCBvbmx5IG9uY2UuICovCistCSAgICBpZiAoZmxwLT5mbF9ubGluayA+IDEpIHsKKy0JCUZpbGVMaXN0UmVjIGpscCA9IGZscCArIDE7CistCQlpbnQgaiA9IGkgKyAxOworLQkJZm9yICg7ICh1bnNpZ25lZClqIDwgZmktPmZjOyBqKyssIGpscCsrKSB7CistCQkgICAgLyogZm9sbG93IG91dGVyIGxvb3AgbG9naWMgKi8KKy0JCSAgICB3aGlsZSAoKChqbHAgLSBmbC0+ZmlsZUxpc3QpIDwgKGZsLT5maWxlTGlzdFJlY3NVc2VkIC0gMSkpICYmCistCQkJICAgICFzdHJjbXAoamxwLT5maWxlVVJMLCBqbHBbMV0uZmlsZVVSTCkpCistCQkJamxwKys7CistCQkgICAgaWYgKGpscC0+ZmxhZ3MgJiBSUE1GSUxFX0VYQ0xVREUpIHsKKy0JCQlqLS07CistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICB9CistCQkgICAgaWYgKGpscC0+ZmxhZ3MgJiBSUE1GSUxFX0dIT1NUKQorLQkJICAgICAgICAvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmICghU19JU1JFRyhqbHAtPmZsX21vZGUpKQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKGZscC0+ZmxfbmxpbmsgIT0gamxwLT5mbF9ubGluaykKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmIChmbHAtPmZsX2lubyAhPSBqbHAtPmZsX2lubykKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmIChmbHAtPmZsX2RldiAhPSBqbHAtPmZsX2RldikKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGJpbmdvID0gMDsJLyogZG9uJ3QgdGFsbHkgaGFyZGxpbmsgeWV0LiAqLworLQkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CistCQl9CistCSAgICB9CistCSAgICBpZiAoYmluZ28pCistCQlmbC0+dG90YWxGaWxlU2l6ZSArPSBmbHAtPmZsX3NpemU7CistCX0KKyAgICAgfQorIAorICAgICB1aTMyID0gZmwtPnRvdGFsRmlsZVNpemU7CitJbmRleDogcnBtLTUuNC4xNC9saWIvZnNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2ZzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvZnNtLmMKK0BAIC05MDQsNiArOTA0LDcgQEAgaW50IGZzbU1hcEF0dHJzKElPU01fdCBmc20pCisgCisgICAgIGlmIChmaSAmJiBpID49IDAgJiYgaSA8IChpbnQpIGZpLT5mYykgeworIAltb2RlX3QgcGVybXMgPSAoU19JU0RJUihzdC0+c3RfbW9kZSkgPyBmaS0+ZHBlcm1zIDogZmktPmZwZXJtcyk7CisrCWlub190IGZpbmFsSW5vZGUgPSAoZmktPmZpbm9kZXMgPyAoaW5vX3QpZmktPmZpbm9kZXNbaV0gOiAwKTsKKyAJbW9kZV90IGZpbmFsTW9kZSA9IChmaS0+Zm1vZGVzID8gKG1vZGVfdClmaS0+Zm1vZGVzW2ldIDogcGVybXMpOworIAlkZXZfdCBmaW5hbFJkZXYgPSAoZGV2X3QpKGZpLT5mcmRldnMgPyBmaS0+ZnJkZXZzW2ldIDogMCk7CisgCXJwbXVpbnQzMl90IGZpbmFsTXRpbWUgPSAoZmktPmZtdGltZXMgPyBmaS0+Zm10aW1lc1tpXSA6IDApOworQEAgLTk0Myw2ICs5NDQsNyBAQCBpbnQgZnNtTWFwQXR0cnMoSU9TTV90IGZzbSkKKyAJICAgIGlmICgoU19JU0NIUihzdC0+c3RfbW9kZSkgfHwgU19JU0JMSyhzdC0+c3RfbW9kZSkpCisgCSAgICAmJiBzdC0+c3RfbmxpbmsgPT0gMCkKKyAJCXN0LT5zdF9ubGluayA9IDE7CisrCSAgICBzdC0+c3RfaW5vID0gZmluYWxJbm9kZTsKKyAJICAgIHN0LT5zdF9yZGV2ID0gZmluYWxSZGV2OworIAkgICAgc3QtPnN0X210aW1lID0gZmluYWxNdGltZTsKKyAJfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxODJhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorcGtnY29uZmlnZGVwcy5zaDogQ2hhbmdlIHRvIHJlc3RyaWN0aW5nIHBrZ2NvbmZpZyB0byB0aGUgbG9jYWwgZGlyZWN0b3J5CisKK1VzaW5nIFBLR19DT05GSUdfUEFUSCB3aWxsIGFsbG93IHBrZy1jb25maWcgdG8gZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0gcGF0aHMsCit3ZSBkb24ndCB3YW50IHRoaXMgYXMgaXQgbWF5IGxlYWQgdG8gaW5hY2N1cmF0ZSByZXN1bHRzIGluIHNvbWUgY29ybmVyIGNhc2VzLgorCitQS0dfQ09ORklHX0xJQkRJUiB3aWxsIGVuc3VyZSBwa2ctY29uZmlnIHN0YXlzIHdpdGhpbiB0aGUgaW5zdGFsbCBkaXJlY3RvcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc2NyaXB0cy9wa2djb25maWdkZXBzLnNoCisrKysgcnBtLTUuNC4xNC9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKK0BAIC0xOCw4ICsxOCw4IEBAIGNhc2UgJDEgaW4KKyAgICAgKi5wYykKKyAJIyBRdWVyeSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlLgorIAlESVI9YGRpcm5hbWUgJHtmaWxlbmFtZX1gCistCVBLR19DT05GSUdfUEFUSD0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKy0JZXhwb3J0IFBLR19DT05GSUdfUEFUSAorKwlQS0dfQ09ORklHX0xJQkRJUj0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKysJZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgCSRwa2djb25maWcgLS1wcmludC1wcm92aWRlcyAiJGZpbGVuYW1lIiAyPiAvZGV2L251bGwgfCB3aGlsZSByZWFkIG4gciB2IDsgZG8KKyAJICAgIFsgLW4gIiRuIiBdIHx8IGNvbnRpbnVlCisgCSAgICAjIFdlIGhhdmUgYSBkZXBlbmRlbmN5LiAgTWFrZSBhIG5vdGUgdGhhdCB3ZSBuZWVkIHRoZSBwa2djb25maWcKK0BAIC00Miw4ICs0Miw4IEBAIGNhc2UgJDEgaW4KKyAJWyAtbiAiJG9uZXNob3QiIF0gJiYgZWNobyAiJG9uZXNob3QiOyBvbmVzaG90PSIiCisgCSMgUXVlcnkgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFja2FnZS4KKyAJRElSPWBkaXJuYW1lICR7ZmlsZW5hbWV9YAorLQlQS0dfQ09ORklHX1BBVEg9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCistCWV4cG9ydCBQS0dfQ09ORklHX1BBVEgKKysJUEtHX0NPTkZJR19MSUJESVI9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCisrCWV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUgorIAkkcGtnY29uZmlnIC0tcHJpbnQtcmVxdWlyZXMgIiRmaWxlbmFtZSIgMj4gL2Rldi9udWxsIHwgd2hpbGUgcmVhZCBuIHIgdiA7IGRvCisgCSAgICBbIC1uICIkbiIgXSB8fCBjb250aW51ZQorIAkgICAgaWYgIFsgLW4gIiRyIiBdICYmIFsgLW4gIiR2IiBdOyB0aGVuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLWZpbGUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmE2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitEb24ndCBhZGQgdGhlIGZpcnN0IGxpbmUgb2YgL2V0Yy9ycG0vcGxhdGZvcm0gdG8gdGhlIGxpc3Qgb2YgcGF0dGVybnMKK3RvIG1hdGNoIHdoZW4gY29tcHV0aW5nIGFuIGFyY2ggc2NvcmUsIHVzZSBpdCBqdXN0IGZvciBnZXR0aW5nCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGxhdGZvcm0gKGNwdS92ZW5kb3Ivb3MpLiBGaXhlcyAjMzg2NC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtNTEwLDYgKzUxMCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAjZW5kaWYKKyAJfQorIAorKyNpZiAhZGVmaW5lZChSUE1fVkVORE9SX09FKSAvKiBTa2lwIHRoZSBleHBsaWNpdC1wbGF0Zm9ybSAqLworICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogZXhwbGljaXQtcGxhdGZvcm0gKi8KKyAJLyogZG8gbm90IHVzZSB2ZW5kb3IgYW5kIEdOVSBhdHRyaWJ1dGlvbiAqLworIAlwID0gcnBtRXhwYW5kKCIle19ob3N0X2NwdX0tJXtfaG9zdF9vc30iLCBOVUxMKTsKK0BAIC01MjAsNyArNTIxLDggQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9TVFJDTVAsIDAsIHAsIE5VTEwsICZtaV9yZSwgJm1pX25yZSk7CisgCXAgPSBfZnJlZShwKTsKKy0JCisrI2VuZGlmCisrCisgCWluaXRfcGxhdGZvcm0rKzsKKyAgICAgfQorICAgICByYyA9IChpbml0X3BsYXRmb3JtID8gUlBNUkNfT0sgOiBSUE1SQ19GQUlMKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmZDAzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitGaXggdXAgcGxhdGZvcm0gYW5kIHJlbGF0ZWQgc3lzaW5mbyBmaWxlIGxvYWRpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIGVuc3VyZXMgdGhhdCBSUE0ga25vd3MgdGhlIGNvbXBhdGlibGUgc2V0IG9mIHBhY2thZ2UgdHlwZXMgYXQgYWxsIHRpbWVzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2RlcGVuZHMuYworKysrIHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworQEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IHJwbXRzQWRkVXBncmFkZXMocnBtdHMgdHMsIHJwCisgCSAgICBoZS0+cC5wdHIgPSBfZnJlZShoZS0+cC5wdHIpOworIAl9CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgCS8qCisgCSAqIElmIHdlJ3JlIGNhcGFibGUgb2YgaW5zdGFsbGluZyBtdWx0aXBsZSBjb2xvcnMKKyAJICogYnV0IGF0IGxlYXN0IG9uZSBvZiB0aGUgcGFja2FnZXMgYXJlIHdoaXRlICgwKSwgd2UKK0BAIC01MDcsNyArNTA3LDcgQEAgYXNzZXJ0KGxhc3R4ID49IDAgJiYgbGFzdHggPCB0cy0+b3JkZXJDbworICAgICByZXR1cm4gMDsKKyB9CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgLyogSXMgImNvbXBhdCIgY29tcGF0aWJsZSB3LyBhcmNoPyAqLworIGludCBfaXNDb21wYXRpYmxlQXJjaChjb25zdCBjaGFyICogYXJjaCwgY29uc3QgY2hhciAqIGNvbXBhdCkKKyB7CitAQCAtNjYzLDcgKzY2Myw3IEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCisgCSAgICBpZiAoYXJjaCA9PSBOVUxMIHx8IChwYXJjaCA9IHJwbXRlQShwKSkgPT0gTlVMTCkKKyAJCWNvbnRpbnVlOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSAmJiAhZGVmaW5lZChSUE1fVkVORE9SX09FKQorIAkgICAgLyogWFhYIGhhY2tlcnkgZm9yIGFsaWFzIG1hdGNoaW5nLiAqLworIAkgICAgaWYgKCFfaXNDb21wYXRpYmxlQXJjaChhcmNoLCBwYXJjaCkpCisgCQljb250aW51ZTsKK0BAIC04MjksNiArODI5LDEyIEBAIGludCBycG10c0FkZEVyYXNlRWxlbWVudChycG10cyB0cywgSGVhZGUKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyNkZWZpbmUgX0VUQ19SUE1fU1lTSU5GTyAgICAgICAgIiV7X2V0Y3JwbX0vc3lzaW5mbyIKKysjZWxzZQorKyNkZWZpbmUgX0VUQ19SUE1fU1lTSU5GTyAgICAgICAgU1lTQ09ORklHRElSICIvc3lzaW5mbyIKKysjZW5kaWYKKysKKyAvKkBvbmx5QCovIC8qQG51bGxAKi8gLypAdW5jaGVja2VkQCovCisgc3RhdGljIGNoYXIgKnN5c2luZm9fcGF0aCA9IE5VTEw7CisgCitAQCAtMTMxMSw3ICsxMzE3LDcgQEAgcmV0cnk6CisgCXN5c2luZm9fcGF0aCA9IHJwbUV4cGFuZCgiJXs/X3JwbWRzX3N5c2luZm9fcGF0aH0iLCBOVUxMKTsKKyAJaWYgKCEoc3lzaW5mb19wYXRoICE9IE5VTEwgJiYgKnN5c2luZm9fcGF0aCA9PSAnLycpKSB7CisgCSAgICBzeXNpbmZvX3BhdGggPSBfZnJlZShzeXNpbmZvX3BhdGgpOworLQkgICAgc3lzaW5mb19wYXRoID0geHN0cmR1cChTWVNDT05GSUdESVIgIi9zeXNpbmZvIik7CisrCSAgICBzeXNpbmZvX3BhdGggPSBycG1FeHBhbmQoX0VUQ19SUE1fU1lTSU5GTywgTlVMTCk7CisgCX0KKyAgICAgfQorIAorSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbWRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbWRzLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1kcy5jCitAQCAtMTc1OSw3ICsxNzU5LDcgQEAgaW50IHJwbWRzU3lzaW5mbyhycG1QUkNPIFBSQ08sIGNvbnN0IGNoYQorIC8qQC1vYnNlcnZlcnRyYW5zIEAqLworIAkgICAgX3N5c2luZm9fcGF0aCA9IF9mcmVlKF9zeXNpbmZvX3BhdGgpOworIC8qQD1vYnNlcnZlcnRyYW5zIEAqLworLQkgICAgX3N5c2luZm9fcGF0aCA9IHhzdHJkdXAoX0VUQ19SUE1fU1lTSU5GTyk7CisrCSAgICBfc3lzaW5mb19wYXRoID0gcnBtRXhwYW5kKF9FVENfUlBNX1NZU0lORk8sIE5VTEwpOworIAl9CisgICAgIH0KKyAvKkA9bW9kb2JzZXJ2ZXJAKi8KK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTM4LDcgKzM4LDEzIEBACisgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25maWdUYXJnZXQgPSBOVUxMOworIAorIC8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworLXN0YXRpYyBjb25zdCBjaGFyICogcGxhdGZvcm0gPSBTWVNDT05GSUdESVIgIi9wbGF0Zm9ybSI7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2RlZmluZSBfRVRDX1JQTV9QTEFURk9STSAgICAgICAgIiV7X2V0Y3JwbX0vcGxhdGZvcm0iCisrI2Vsc2UKKysjZGVmaW5lIF9FVENfUlBNX1BMQVRGT1JNICAgICAgICBTWVNDT05GSUdESVIgIi9wbGF0Zm9ybSIKKysjZW5kaWYKKysKKytzdGF0aWMgY29uc3QgY2hhciAqIF9wbGF0Zm9ybSA9IE5VTEw7CisgCisgLypAb25seUAqLyAvKkByZWxudWxsQCovIC8qQHVuY2hlY2tlZEAqLworIHZvaWQgKiBwbGF0cGF0ID0gTlVMTDsKK0BAIC02OTQsMTYgKzcwMCwxNyBAQCBzdGF0aWMgdm9pZCBkZWZhdWx0TWFjaGluZSgvKkBvdXRAKi8gY29uCisgICAgIGludCByYzsKKyAKKyAgICAgd2hpbGUgKCFnb3REZWZhdWx0cykgeworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorLQljb25zdCBjaGFyICogX3BsYXRmb3JtID0gcnBtR2V0UGF0aChfX2V0Y3JwbSwgIi9wbGF0Zm9ybSIsIE5VTEwpOworLSNlbHNlCistCWNvbnN0IGNoYXIgKiBfcGxhdGZvcm0gPSBwbGF0Zm9ybTsKKy0jZW5kaWYKKysJaWYgKF9wbGF0Zm9ybSA9PSBOVUxMKSB7CisrCSAgICBfcGxhdGZvcm0gPSBycG1FeHBhbmQoIiV7P19ycG1yY19wbGF0Zm9ybV9wYXRofSIsIE5VTEwpOworKwkgICAgLyogWFhYIG1heSBuZWVkIHRvIHZhbGlkYXRlIHBhdGggZXhpc3RlbmNlIHNvbWV3aGVuLiAqLworKwkgICAgaWYgKCEoX3BsYXRmb3JtICE9IE5VTEwgJiYgKl9wbGF0Zm9ybSA9PSAnLycpKSB7CisrCQlfcGxhdGZvcm0gPSBfZnJlZShfcGxhdGZvcm0pOworKwkJX3BsYXRmb3JtID0gcnBtRXhwYW5kKF9FVENfUlBNX1BMQVRGT1JNLCBOVUxMKTsKKysJICAgIH0KKysJfQorIAlDVk9HX3QgY3ZvZyA9IE5VTEw7CisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBsYXJnZXItdXRzbmFtZSAqLworIAljb25zdCBjaGFyICpjcDsKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGxhcmdlci11dHNuYW1lICovCisgCS8qIHV0c25hbWUgZmllbGRzIG9uIHNvbWUgcGxhdGZvcm1zIChsaWtlIEhQLVVYKSBhcmUgdmVyeSBzbWFsbAorIAkgICAoanVzdCBhYm91dCA4IGNoYXJhY3RlcnMpLiBUaGlzIGlzIHRvbyBzbWFsbCBmb3IgT3BlblBLRywgc28gY2hlYXQhICovCisgCXJjID0gdW5hbWUoJnVuX3JlYWwpOworQEAgLTc4MCw5ICs3ODcsNyBAQCBzdGF0aWMgdm9pZCBkZWZhdWx0TWFjaGluZSgvKkBvdXRAKi8gY29uCisgCWlmIChjcCAhPSBOVUxMICYmIGNwICE9IF9wbGF0Zm9ybSkKKyAJICAgIGNwID0gX2ZyZWUoY3ApOworICNlbmRpZgorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorIAlfcGxhdGZvcm0gPSBfZnJlZShfcGxhdGZvcm0pOworLSNlbmRpZgorIAorIAlpZiAoY29uZmlnVGFyZ2V0ICYmICFwYXJzZUNWT0coY29uZmlnVGFyZ2V0LCAmY3ZvZykgJiYgY3ZvZyAhPSBOVUxMKSB7CisgCSAgICBnb3REZWZhdWx0cyA9IDE7CitAQCAtMTEwMSw2ICsxMTA2LDggQEAgaW50IHJwbVJlYWRDb25maWdGaWxlcygvKkB1bnVzZWRAKi8gY29ucworIAorICNpZmRlZiBQUkVNQUNST0ZJTEVTCisgICAgIGlmIChycG1SZWFkUkMoUFJFTUFDUk9GSUxFUykpIHJldHVybiAtMTsKKysjZWxzZQorKyAgICBpZiAocnBtUmVhZFJDKE5VTEwpKSByZXR1cm4gLTE7CisgI2VuZGlmCisgCisgICAgIC8qIFJlc2V0IHVtYXNrIHRvIGl0cyBkZWZhdWx0IHVtYXNrKDIpIHZhbHVlLiAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDU0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybTIucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK0ZpeCB1cCBwbGF0Zm9ybSBhbmQgcmVsYXRlZCBzeXNpbmZvIGZpbGUgbG9hZGluZyAocGFydCAyKS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc2V0IHRoZSBfZ251IGZsYWcgc29tZWhvdy4gIFdlIGRvIHRoaXMgYnkgcmVhZGluZworZnJvbSB0aGUgcGxhdGZvcm0gZmlsZSwgYW5kIHNldHRpbmcgYSBuZXcgX3BsYXRmb3JtX2dudSBhbmQgcmVsYXRlZCB2YXJzLgorCitUaGUgZGVmYXVsdCB2YWx1ZXMgb2YgX2hvc3RfY3B1LCBfaG9zdF92ZW5kb3IgYW5kIF9ob3N0X29zIGFyZSBjaGFuZ2VkIHRvCityZWZlcmVuY2UgZWl0aGVyIHRoZSBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQgX3RhcmdldF8uLi4gb3IgX3BsYXRmb3JtXy4uLgordmFsdWVzLiAgVGhlIG1hY3JvcyBmaWxlIHVzZXMgdGhlIGNvbmZpZ3VyZSB0aW1lIGRlZmF1bHRzIGluIF9wbGF0Zm9ybV8uLi4KK3ZlcnNpb25zIGhhdmUgbm90IGJlZW4gZGVmaW5lZC4gIFRoaXMgcHJlc2VydmVzIGV4aXN0aW5nIGJlaGF2aW9yLCBidXQKK2Vuc3VyZXMgcmVhc29uYWJsZSBkZWZhdWx0cyBhcmUgYWx3YXlzIGF2YWlsYWJsZS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC0zMjgsMTAgKzMyOCwxNSBAQCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0cyh2b2lkKQorIAkvKkBtb2RpZmllcyBycG1HbG9iYWxNYWNyb0NvbnRleHQsIGludGVybmFsU3RhdGUgQCovCisgeworIAorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdXNybGlicnBtIiwgTlVMTCwgX191c3JsaWJycG0sIFJNSUxfREVGQVVMVCk7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfZXRjcnBtIiwgTlVMTCwgX19ldGNycG0sIFJNSUxfREVGQVVMVCk7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfdmVuZG9yIiwgTlVMTCwgIiV7P19ob3N0X3ZlbmRvcn0leyE/X2hvc3RfdmVuZG9yOndyc30iLCBSTUlMX0RFRkFVTFQpOworKworKyAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfY3B1IiwgTlVMTCwgIiV7P19wbGF0Zm9ybV9jcHV9JXshP19wbGF0Zm9ybV9jcHU6JXs/X3RhcmdldF9jcHV9fSIsIFJNSUxfREVGQVVMVCk7CisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX3ZlbmRvcn0leyE/X3BsYXRmb3JtX2NwdTolez9fdGFyZ2V0X3ZlbmRvcn19IiwgUk1JTF9ERUZBVUxUKTsKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X29zIiwgTlVMTCwgIiV7P19wbGF0Zm9ybV9vc30leyE/X3BsYXRmb3JtX29zOiV7P190YXJnZXRfb3N9fSIsIFJNSUxfREVGQVVMVCk7CisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9nbnUiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX2dudX0leyE/X3BsYXRmb3JtX2dudTolez9fZ251fX0iLCBSTUlMX0RFRkFVTFQpOworICNlbmRpZgorIAorICAgICBhZGRNYWNybyhOVUxMLCAiX3VzciIsIE5VTEwsIFVTUlBSRUZJWCwgUk1JTF9ERUZBVUxUKTsKK0BAIC00ODcsOSArNDkyLDIyIEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJfQorIAorIAlpZiAoIXBhcnNlQ1ZPRyhwLCAmY3ZvZykgJiYgY3ZvZyAhPSBOVUxMKSB7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysJICAgIGNoYXIgKiBfZ251ID0gTlVMTDsKKysKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fY3B1IiwgTlVMTCwgY3ZvZy0+Y3B1LCAtMSk7CisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX3ZlbmRvciIsIE5VTEwsIGN2b2ctPnZlbmRvciwgLTEpOworKwkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV9vcyIsIE5VTEwsIGN2b2ctPm9zLCAtMSk7CisrCisrCSAgICBpZiAoY3ZvZy0+Z251ICYmIGN2b2ctPmdudVswXSAhPSAnXDAnKQorKwkJX2dudSA9IHJwbUV4cGFuZCgiLSIsIGN2b2ctPmdudSwgTlVMTCk7CisrCisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX2dudSIsIE5VTEwsIChfZ251ID8gX2dudSA6ICIiKSwgLTEpOworKyNlbHNlCisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfY3B1IiwgTlVMTCwgY3ZvZy0+Y3B1LCAtMSk7CisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfdmVuZG9yIiwgTlVMTCwgY3ZvZy0+dmVuZG9yLCAtMSk7CisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3Rfb3MiLCBOVUxMLCBjdm9nLT5vcywgLTEpOworKyNlbmRpZgorIAl9CisgCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworSW5kZXg6IHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9tYWNyb3MvbWFjcm9zLmluCisrKysgcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCitAQCAtOTAwLDkgKzkwMCw5IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICVfb3MJCQlAUlBNQ0FOT05PU0AKKyAlX2dudQkJCUBSUE1DQU5PTkdOVUAKKyAKKy0lX2hvc3RfcGxhdGZvcm0JCSV7X2hvc3RfY3B1fS0le19ob3N0X3ZlbmRvcn0tJXtfaG9zdF9vc30lez9fZ251fQorLSVfYnVpbGRfcGxhdGZvcm0JJXtfYnVpbGRfY3B1fS0le19idWlsZF92ZW5kb3J9LSV7X2J1aWxkX29zfSV7P19nbnV9CistJV90YXJnZXRfcGxhdGZvcm0JJXtfdGFyZ2V0X2NwdX0tJXtfdGFyZ2V0X3ZlbmRvcn0tJXtfdGFyZ2V0X29zfSV7P19nbnV9CisrJV9ob3N0X3BsYXRmb3JtCQkle19ob3N0X2NwdX0tJXtfaG9zdF92ZW5kb3J9LSV7X2hvc3Rfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisrJV9idWlsZF9wbGF0Zm9ybQkle19idWlsZF9jcHV9LSV7X2J1aWxkX3ZlbmRvcn0tJXtfYnVpbGRfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisrJV90YXJnZXRfcGxhdGZvcm0JJXtfdGFyZ2V0X2NwdX0tJXtfdGFyZ2V0X3ZlbmRvcn0tJXtfdGFyZ2V0X29zfSV7P19ob3N0X2dudX0leyE/X2hvc3RfZ251OiV7P19nbnV9fQorIAorICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIC0tLS0gY29uZmlndXJlIG1hY3Jvcy4KK0BAIC05NDUsOSArOTQ1LDEwIEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICVfYnVpbGRfb3MJCSV7X2hvc3Rfb3N9CisgJV9ob3N0CQkJQGhvc3RACisgJV9ob3N0X2FsaWFzCQlAaG9zdF9hbGlhc0Ale25pbH0KKy0lX2hvc3RfY3B1CQlAaG9zdF9jcHVACistJV9ob3N0X3ZlbmRvcgkJQGhvc3RfdmVuZG9yQAorLSVfaG9zdF9vcwkJQGhvc3Rfb3NACisrJV9ob3N0X2NwdQkJJXs/X3BsYXRmb3JtX2NwdX0leyE/X3BsYXRmb3JtX2NwdTole19hcmNofX0KKyslX2hvc3RfdmVuZG9yCQklez9fcGxhdGZvcm1fdmVuZG9yfSV7IT9fcGxhdGZvcm1fdmVuZG9yOiV7X3ZlbmRvcn19CisrJV9ob3N0X29zCQklez9fcGxhdGZvcm1fb3N9JXshP19wbGF0Zm9ybV9vczole19vc319CisrJV9ob3N0X2dudQkJJXs/X3BsYXRmb3JtX2dudX0leyE/X3BsYXRmb3JtX2dudTole19nbnV9fQorICVfdGFyZ2V0CQkle19ob3N0fQorICVfdGFyZ2V0X2FsaWFzCQkle19ob3N0X2FsaWFzfQorICVfdGFyZ2V0X2NwdQkJJXtfaG9zdF9jcHV9CitJbmRleDogcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKK0BAIC02NSw4ICs2NSw4IEBAIHN0YXRpYyBQeU9iamVjdCAqIGFyY2hTY29yZShQeU9iamVjdCAqIHMKKyAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInMiLCBrd2xpc3QsICZhcmNoKSkKKyAJcmV0dXJuIE5VTEw7CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCistICAgIHBsYXRmb3JtID0gcnBtRXhwYW5kKGFyY2gsICItJXtfaG9zdF92ZW5kb3J9IiwgIi0le19ob3N0X29zfSV7P19nbnV9IiwgTlVMTCk7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysgICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0le19ob3N0X3ZlbmRvcn0iLCAiLSV7X2hvc3Rfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19IiwgTlVMTCk7CisgI2Vsc2UKKyAgICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0iLCAiJXtfdmVuZG9yfSIsICItIiwgIiV7X29zfSIsIE5VTEwpOworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcHktaW5pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXB5LWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkNDA3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXB5LWluaXQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorcHl0aG9uL3JwbW1vZHVsZXMuYzogQ2hhbmdlIHRoZSB3YXkgdGhlIHB5dGhvbiBtb2R1bGUgbG9hZHMgdGhlIFJQTSBjb25maWcKKworSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgUlBNX1ZFTkRPUl9XSU5EUklWRVIgZW5oYW5jZW1lbnQgb2YgZHluYW1pYworcnVudGltZSByZWxvY2F0aW9uIHBhdGhzLCB3ZSBuZWVkIHRvIGNhbGwgcnBtY2xpSW5pdCBpbnN0ZWFkIG9mIAorcnBtUmVhZENvbmZpZ0ZpbGVzLiAgVGhlIHJwbWNsaUluaXQgd2lsbCBlbmQgdXAgY2FsbGluZyBycG1SZWFkQ29uZmlnRmlsZXMKK2FmdGVyIHRoZSBuZWNlc3NhcnkgcmVsb2NhdGlvbiBwcm9jZXNzaW5nIChpZiBlbmFibGVkKS4KKworQ29kZSBkZXJpdmVkIGZyb20gY2hhbmdlcyBzdWdnZXN0ZWQgYnkgUGF1bCBFZ2dsZXRvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3B5dGhvbi9ycG1tb2R1bGUuYworKysrIHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCitAQCAtMzkyLDcgKzM5Miw4IEBAIHZvaWQgaW5pdF9ycG0odm9pZCkKKyAgICAgaWYgKFB5X0F0RXhpdChycG1fZXhpdGhvb2spID09IC0xKQorIAlyZXR1cm47CisgCistICAgIHJwbVJlYWRDb25maWdGaWxlcyhOVUxMLCBOVUxMKTsKKysgICAgY29uc3QgY2hhciAqYXJndlsxXSA9IHsicnBtbW9kdWxlIiwgMH07CisrICAgIHJwbWNsaUluaXQoMSwgYXJndiwgTlVMTCk7CisgCisgICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWFscGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODEwMTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorY2hyb290OiByZWFscGF0aCBpcyByZXF1aXJlZCBiZWZvcmUgZXhwYW5kaW5nIF9kYnBhdGgKKworX3VzciB0dXJuZWQgb3V0IHRvIGJlIGEgcmVsYXRpdmUgcGF0aCB0byBzdXBwb3J0IGR5YW5taWMgY29uZmlnLCBidXQgaXQncworYmVpbmcgdXNlZCBzb21ld2hlcmUgYXMgYSBpbmRpY2F0b3IgdG8gbG9jYXRlIHN1YnN0cmluZ3MsIHNvIHdlIG11c3QgZ2V0Cit0aGUgcmVhbCBwYXRoIG9mIGl0IGluIGFkdmFuY2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoT3BlbkVtYmVkZGVkIHNwZWNpZmljKQorCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXJwTiBhL3JwbWlvL3JwbXJwYy5jIGIvcnBtaW8vcnBtcnBjLmMKKy0tLSBhL3JwbWlvL3JwbXJwYy5jCisrKysgYi9ycG1pby9ycG1ycGMuYworQEAgLTI1Nyw3ICsyNTcsOSBAQCBpbnQgT3Blbihjb25zdCBjaGFyICogcGF0aCwgaW50IGZsYWdzLCBtCisgICAgIC8qIFhYWCBpZiB0aGUgb3BlbigyKSBmYWlscywgdHJ5IHRvIHN0cmlwIGEgcG9zc2libGUgY2hyb290KDIpIHByZWZpeC4gKi8KKyAgICAgaWYgKGZkbm8gPCAwICYmIGVycm5vID09IEVOT0VOVCkgeworIAljb25zdCBjaGFyICpkYnBhdGggPSBycG1FeHBhbmQoIiV7P19kYnBhdGh9LyIsIE5VTEwpOworLQljb25zdCBjaGFyICogZm4gPSBzdHJzdHIocGF0aCArIDEsIGRicGF0aCk7CisrCWNoYXIgcmVzb2x2ZWRfZGJwYXRoW1BBVEhfTUFYXTsKKysJcmVhbHBhdGgoZGJwYXRoLCByZXNvbHZlZF9kYnBhdGgpOworKwljb25zdCBjaGFyICogZm4gPSBzdHJzdHIocGF0aCArIDEsIHJlc29sdmVkX2RicGF0aCk7CisgCWlmIChmbikKKyAJICAgIGZkbm8gPSBvcGVuKGZuLCBmbGFncywgbW9kZSk7CisgCWRicGF0aCA9IF9mcmVlKGRicGF0aCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmZTUyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACittYWNyb3M6IFVzZSBkeWFubWljIGNvbmZpZyB2cyBoYXJkIGNvZGVkIHNldHRpbmdzCisKK1doZW4gdGhlIGR5bmFtaWMsIHJ1bnRpbWUgcmVsb2NhdGlvbiBpcyBlbmFibGVzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIAorUlBNIG1hY3JvIGZpbGUgZG9lcyBub3Qgb3ZlcnJpZGUgdGhlIGR5bmFtaWMgc2V0dGluZ3MuICBGaXggdGhpcyBieSBmb3JjaW5nIHRoZQorZHluYW1pYyB2ZXJzaW9uIHRvIGJlIHVzZWQgaW4gYWxsIGNhc2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKE9wZW5FbWJlZGRlZCBzcGVjaWZpYykKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC0yNywxMSArMjcsMTIgQEAKKyAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIyAtLS0tIGZpbGVzeXN0ZW0gbWFjcm9zLgorICMKKy0lX3VzcgkJCUB1c3JwcmVmaXhACisrJV91c3IJCQkle191c3JsaWJycG19Ly4uLy4uCisgJV91c3JzcmMJCSV7X3Vzcn0vc3JjCistJV92YXIJCQlAdmFycHJlZml4QAorLSVfdXNybGlicnBtCQlAVVNSTElCUlBNQAorLSVfZXRjcnBtCQlAU1lTQ09ORklHRElSQAorKyVfdmFyCQkJJXtfdXNyfS8uLi92YXIKKysjIFRoZSBkeW5hbWljIHJlbG9jYXRpb24gY29kZSBzZXRzIHRoZSBmb2xsb3dpbmcgdHdvIGl0ZW1zCisrIyVfdXNybGlicnBtCQlAVVNSTElCUlBNQAorKyMlX2V0Y3JwbQkJQFNZU0NPTkZJR0RJUkAKKyAKKyAlX19vYmpleHQJCUBvYmpleHRACisgJV9fbGliZXh0CQlAbGliZXh0QApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTAxNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZW1vdmUtc3lrY3BhcnNlLWRlY2wucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorSW5kZXg6IHJwbS01LjQuMTQvc3ljay9saWIvc3ljay5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5Y2svbGliL3N5Y2suaAorKysrIHJwbS01LjQuMTQvc3ljay9saWIvc3ljay5oCitAQCAtNjIxLDkgKzYyMSw2IEBAIGxvbmcgc3lja19zZXFfY291bnQoIFN5Y2tOb2RlICpzZXEgKQorICAqLworIHZvaWQgc3lja2Vycm9yKCBjaGFyICptc2cgKQorIAkvKkAqLzsKKy1pbnQgc3lja3BhcnNlKCB2b2lkICogKQorLQkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCistCS8qQG1vZGlmaWVzIGZpbGVTeXN0ZW0gQCovOworIC8qIFhYWCB1bmlvbiBZWVNUWVBFICpzeWNrbHZhbCBoYXMgaXNzdWVzIG9uIE1hYyBPUyBYLiAqLworIGludCBzeWNrbGV4KCB2b2lkICpfc3lja2x2YWwsIFN5Y2tQYXJzZXIgKnBhcnNlciApCisgCS8qQG1vZGlmaWVzIF9zeWNrbHZhbCwgcGFyc2VyIEAqLzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlc29sdmVkZXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZXNvbHZlZGVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTI0M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZXNvbHZlZGVwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2xpYi9ycG10cy5jOiBFbnN1cmUgdGhhdCB3ZSBjaGVjayBib3RoIHByb3ZpZGVuYW1lIGFuZCBmaWxlcGF0aHMKKworV2hlbiBsb29raW5nIHVwIGEgbWlzc2luZyBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgL2Jpbi9zaCwgd2UgbmVlZCB0byBsb29rdXAKK2luIGJvdGggdGhlIHByb3ZpZGVuYW1lIGFuZCBmaWxlcGF0aHMgREIsIG5vdCBqdXN0IHRoZSBmaWxlcGF0aHMgREIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG10cy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG10cy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtdHMuYworQEAgLTQxMCw4ICs0MTAsOCBAQCBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlcyglcCwlcCwlcClcbiIsIF9fCisgCWlmIChzZGIgPT0gTlVMTCkKKyAJICAgIGNvbnRpbnVlOworIAorLQkvKiBMb29rIGZvciBhIG1hdGNoaW5nIFByb3ZpZGVzOiBpbiBzdWdnZXN0ZWQgdW5pdmVyc2UuICovCistCXJwbXRhZyA9ICgqa2V5cCA9PSAnLycgPyBSUE1UQUdfRklMRVBBVEhTIDogUlBNVEFHX1BST1ZJREVOQU1FKTsKKysJcnBtdGFnID0gUlBNVEFHX1BST1ZJREVOQU1FOworKyAgICAgICBkbyB7CisgCW1pID0gcnBtbWlJbml0KHNkYiwgcnBtdGFnLCBrZXlwLCBrZXlsZW4pOworIAl3aGlsZSAoKGggPSBycG1taU5leHQobWkpKSAhPSBOVUxMKSB7CisgCSAgICBzaXplX3QgaG5hbWVsZW47CitAQCAtNDQ2LDYgKzQ0NiwxNSBAQCBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlcyglcCwlcCwlcClcbiIsIF9fCisgCSAgICBiaG5hbWVsZW4gPSBobmFtZWxlbjsKKyAJfQorIAltaSA9IHJwbW1pRnJlZShtaSk7CisrCisrCWlmIChiaCA9PSBOVUxMICYmICprZXlwID09ICcvJyAmJiBycG10YWcgPT0gUlBNVEFHX1BST1ZJREVOQU1FKSB7CisrCSAgIHJwbXRhZyA9IFJQTVRBR19GSUxFUEFUSFM7CisrCSAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgYnJlYWs7CisrICAgICAgfSB3aGlsZSAoMSk7CisrCisgICAgIH0KKyAKKyAgICAgLyogSXMgdGhlcmUgYSBzdWdnZXN0ZWQgcmVzb2x1dGlvbj8gKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJwbXBncC1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1ycG1wZ3AtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZmVlZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1ycG1wZ3AtZml4LnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK3JwbXBncC5jOiBBZGQgbWlzc2luZyBpZiBkZWZzIGFyb3VuZCBjcnlwdG8gaW1wbGVtZW50YXRpb25zCisKK1dpdGhvdXQgdGhlc2UsIHRoZSBzeXN0ZW0gd2lsbCBlcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgY29ycmVjdCBjcnlwdG8gCitsaWJyYXJ5IHRvIHVzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS9ycG1pby9ycG1wZ3AuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS5vcmlnL3JwbWlvL3JwbXBncC5jCisrKysgcnBtL3JwbWlvL3JwbXBncC5jCitAQCAtMTMzOSwxNiArMTMzOSwyNiBAQCBpbnQgcGdwRXhwb3J0UHVia2V5KHBncERpZyBkaWcpCisgeworICAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIGZhaWx1cmUgKi8KKyAKKysjaWYgZGVmaW5lZChXSVRIX0JFRUNSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWJjSW1wbFZlY3MpCisgCXJjID0gcnBtYmNFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1NTTCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1zc2xJbXBsVmVjcykKKyAJcmMgPSBycG1zc2xFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX05TUykKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1uc3NJbXBsVmVjcykKKyAJcmMgPSBycG1uc3NFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX0dDUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1nY0ltcGxWZWNzKQorIAlyYyA9IHJwbWdjRXhwb3J0UHVia2V5KGRpZyk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9UT01DUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1sdGNJbXBsVmVjcykKKyAJcmMgPSBycG1sdGNFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKK0BAIC0xMzU2LDE2ICsxMzY2LDI2IEBAIGludCBwZ3BFeHBvcnRTaWduYXR1cmUocGdwRGlnIGRpZywgRElHRVMKKyB7CisgICAgIGludCByYyA9IDA7CQkvKiBhc3N1bWUgZmFpbHVyZSAqLworIAorKyNpZiBkZWZpbmVkKFdJVEhfQkVFQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtYmNJbXBsVmVjcykKKyAJcmMgPSBycG1iY0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9TU0wpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtc3NsSW1wbFZlY3MpCisgCXJjID0gcnBtc3NsRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX05TUykKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1uc3NJbXBsVmVjcykKKyAJcmMgPSBycG1uc3NFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfR0NSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWdjSW1wbFZlY3MpCisgCXJjID0gcnBtZ2NFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfVE9NQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtbHRjSW1wbFZlY3MpCisgCXJjID0gcnBtbHRjRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MjUzNzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMTYwIEBACitFbmFibGUgYSBjcm9zcy1pbnN0YWxsIHNjcmlwdGxldCBoZWxwZXIuCisKK1RoZSBoZWxwZXIgaXMgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGUgY2hyb290IHdpdGggdGhlIGFyZ3VtZW50czoKKworPHJvb3Q+IDxwcm9nPiA8c2NyaXB0PiA8YXJnMT4gWzxhcmcyPiAuLi4gPGFyZ04+XQorCitUaGUgaGVscGVyIHNjcmlwdCBpcyB1c2VkIGJ5IG9lLWNvcmUgdG8gZmFjaWxpdGF0ZSBzaGVsbCBzY3JpcHQgYWN0aW9ucyB0aGF0CitjYW4gbm90IGJlIHJ1biBmcm9tIHdpdGhpbiBhIGNocm9vdCBvbiBhIGZvcmVpZ24gdGFyZ2V0IHN5c3RlbSBkdXJpbmcgYQorY3Jvc3MgaW5zdGFsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3BzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9wc20uYworKysrIHJwbS01LjQuMTQvbGliL3BzbS5jCitAQCAtODA2LDYgKzgwNiwxMCBAQCBzdGF0aWMgcnBtUkMgcnVuU2NyaXB0KHJwbXBzbSBwc20sIEhlYWRlCisgICAgIGludCB4eDsKKyAgICAgaW50IGk7CisgCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysjZW5kaWYKKysgICAgCisgICAgIGlmIChwc20tPnNzdGF0ZXMgIT0gTlVMTCAmJiBpeCA+PSAwICYmIGl4IDwgUlBNU0NSSVBUX01BWCkKKyAJc3NwID0gcHNtLT5zc3RhdGVzICsgaXg7CisgICAgIGlmIChzc3AgIT0gTlVMTCkKK0BAIC04NzIsMTQgKzg3NiwyOSBAQCBhc3NlcnQoaGUtPnAuc3RyICE9IE5VTEwpOworIAkJKEZfSVNTRVQocHNtLCBVTk9SREVSRUQpID8gImEiIDogIiIpKTsKKyAKKyAgICAgaWYgKFBoZS0+cC5hcmd2ID09IE5VTEwpIHsKKy0JYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoNSAqIHNpemVvZigqYXJndikpOworLQlhcmd2WzBdID0gIi9iaW4vc2giOworLQlhcmdjID0gMTsKKysJYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoNyAqIHNpemVvZigqYXJndikpOworKwlhcmdjID0gMDsKKysgICAgfSBlbHNlIHsKKysJYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoKFBoZS0+YyArIDYpICogc2l6ZW9mKCphcmd2KSk7CisrCWFyZ2MgPSAwOworKyAgICB9CisrCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpIHsKKysJYXJndlthcmdjKytdID0gc2NyaXB0bGV0V3JhcHBlcjsKKysJYXJndlthcmdjXSA9IHJwbXRzUm9vdERpcih0cyk7CisrCWlmICghYXJndlthcmdjXSB8fCAhKmFyZ3ZbYXJnY10pCisrCSAgIGFyZ3ZbYXJnY10gPSAiLyI7CisrCWFyZ2MrKzsKKysgICAgfQorKyNlbmRpZgorKworKyAgICBpZiAoUGhlLT5wLmFyZ3YgPT0gTlVMTCkgeworKwlhcmd2W2FyZ2MrK10gPSAiL2Jpbi9zaCI7CisgCWxkY29uZmlnX2RvbmUgPSAwOworICAgICB9IGVsc2UgeworLQlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSgoUGhlLT5jICsgNCkgKiBzaXplb2YoKmFyZ3YpKTsKKy0JbWVtY3B5KGFyZ3YsIFBoZS0+cC5hcmd2LCBQaGUtPmMgKiBzaXplb2YoKmFyZ3YpKTsKKy0JYXJnYyA9IFBoZS0+YzsKKysJbWVtY3B5KChhcmd2ICsgYXJnYyksIFBoZS0+cC5hcmd2LCBQaGUtPmMgKiBzaXplb2YoKmFyZ3YpKTsKKysJYXJnYyArPSBQaGUtPmM7CisgCWxkY29uZmlnX2RvbmUgPSAobGRjb25maWdfcGF0aCAmJiAhc3RyY21wKGFyZ3ZbMF0sIGxkY29uZmlnX3BhdGgpCisgCQk/IDEgOiAwKTsKKyAgICAgfQorQEAgLTkzMCw3ICs5NDksMTIgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAJICAgIGdvdG8gZXhpdDsKKyAKKyAJaWYgKHJwbUlzRGVidWcoKSAmJgorLQkgICAgKCFzdHJjbXAoYXJndlswXSwgIi9iaW4vc2giKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICIvYmluL2Jhc2giKSkpCisrCSAgICAoIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9zaCIpIHx8ICFzdHJjbXAoYXJndlswXSwgIi9iaW4vYmFzaCIpKQorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICB8fCAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlciAmJiAhc3RyY21wKGFyZ3ZbMV0sICIvYmluL3NoIikpCisrCSAgICB8fCAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlciAmJiAhc3RyY21wKGFyZ3ZbMV0sICIvYmluL2Jhc2giKSkKKysjZW5kaWYKKysJICAgKQorIAl7CisgCSAgICBzdGF0aWMgY29uc3QgY2hhciBzZXRfeFtdID0gInNldCAteFxuIjsKKyAJICAgIG53ID0gRndyaXRlKHNldF94LCBzaXplb2Yoc2V0X3hbMF0pLCBzaXplb2Yoc2V0X3gpLTEsIGZkKTsKK0BAIC0xMDY1LDEyICsxMDg5LDIyIEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCisgCXsgICBjb25zdCBjaGFyICogcm9vdERpciA9IHJwbXRzUm9vdERpcih0cyk7CisgCSAgICBpZiAoIXJwbXRzQ2hyb290RG9uZSh0cykgJiYgcm9vdERpciAhPSBOVUxMICYmCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJCSEoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgJiYKKysjZW5kaWYKKyAJCSEocm9vdERpclswXSA9PSAnLycgJiYgcm9vdERpclsxXSA9PSAnXDAnKSkKKyAJICAgIHsKKyAJCS8qQC1tb2RvYnNlcnZlckAqLworIAkJeHggPSBDaHJvb3Qocm9vdERpcik7CisgCQkvKkA9bW9kb2JzZXJ2ZXJAKi8KKyAJICAgIH0KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkgICAgaWYgKCFycG10c0Nocm9vdERvbmUodHMpICYmIHJvb3REaXIgIT0gTlVMTCAmJgorKwkJKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpICYmCisrCQkhKHJvb3REaXJbMF0gPT0gJy8nICYmIHJvb3REaXJbMV0gPT0gJ1wwJykpCisrCQl4eCA9IENoZGlyKHJvb3REaXIpOworKwkgICAgZWxzZSAKKysjZW5kaWYKKyAJICAgIHh4ID0gQ2hkaXIoIi8iKTsKKyAJICAgIHJwbWxvZyhSUE1MT0dfREVCVUcsIERfKCIlczogJXMoJXMpXHRleGVjdiglcykgcGlkICVkXG4iKSwKKyAJCQlwc20tPnN0ZXBOYW1lLCBzbG4sIE5WUkEsCitAQCAtMjk4NSw2ICszMDE5LDEzIEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworICAgICBjYXNlIFBTTV9TQ1JJUFQ6CS8qIFJ1biBjdXJyZW50IHBhY2thZ2Ugc2NyaXB0bGV0cy4gKi8KKyAJLyogWFhYIHJ1bm5pbmcgJXZlcmlmeXNjcmlwdC8lc2FuaXR5Y2hlY2sgZG9lc24ndCBoYXZlIHBzbS0+dGUgKi8KKyAgICAgewlycG10eG4gX3BhcmVudCA9IChwc20gJiYgcHNtLT50ZSA/IHBzbS0+dGUtPnR4biA6IE5VTEwpOworKworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX09VVCk7CisrI2VuZGlmCisrCisgCXh4ID0gcnBtdHhuQmVnaW4ocnBtdHNHZXRSZGIodHMpLCBfcGFyZW50LCBOVUxMKTsKKyAJcmMgPSBydW5JbnN0U2NyaXB0KHBzbSk7CisgCWlmIChyYykKK0BAIC0yOTkyLDExICszMDMzLDI0IEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworIAllbHNlCisgCSAgICAgeHggPSBycG10eG5Db21taXQocnBtdHNHZXRSZGIodHMpLT5kYl90eG4pOworIAlycG10c0dldFJkYih0cyktPmRiX3R4biA9IE5VTEw7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9JTik7CisrI2VuZGlmCisgICAgIH0JYnJlYWs7CisgICAgIGNhc2UgUFNNX1RSSUdHRVJTOgorIAkvKiBSdW4gdHJpZ2dlcnMgaW4gb3RoZXIgcGFja2FnZShzKSB0aGlzIHBhY2thZ2Ugc2V0cyBvZmYuICovCisgCWlmIChycG10c0ZsYWdzKHRzKSAmIFJQTVRSQU5TX0ZMQUdfVEVTVCkJYnJlYWs7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfT1VUKTsKKysjZW5kaWYKKyAJcmMgPSBydW5UcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfSU4pOworKyNlbmRpZgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fSU1NRURfVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiB0aGlzIHBhY2thZ2Ugb3RoZXIgcGFja2FnZShzKSBzZXQgb2ZmLiAqLworQEAgLTMwMDYsNyArMzA2MCwxOCBAQCBhc3NlcnQocHNtLT50ZSAhPSBOVUxMKTsKKyAJICAgIEZfU0VUKHBzbSwgR09UVFJJR0dFUlMpOworIAl9CisgCWlmIChwc20tPnRyaWdnZXJzICE9IE5VTEwpCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJeworKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9PVVQpOworKyNlbmRpZgorIAkgICAgcmMgPSBydW5JbW1lZFRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX0lOKTsKKysJfQorKyNlbmRpZgorIAlicmVhazsKKyAKKyAgICAgY2FzZSBQU01fUlBNSU9fRkxBR1M6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zaG93cmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zaG93cmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzOGI5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNob3dyYy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitXb3JrYXJvdW5kIGZvciBhIG1lbW9yeSBsZWFrIGluIC0tc2hvd3JjLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC0xMjI4LDExICsxMjI4LDE1IEBAIGludCBycG1TaG93UkMoRklMRSAqIGZwKQorIAkJaWYgKERORVZSICE9IE5VTEwpCisgCQkgICAgZnByaW50ZihmcCwgIiAgICAlc1xuIiwgRE5FVlIrMik7CisgCSAgICB9CisrI2lmIDAKKyAJICAgICh2b2lkKXJwbWRzRnJlZShkcyk7CisgCSAgICBkcyA9IE5VTEw7CisrI2VuZGlmCisgCSAgICBmcHJpbnRmKGZwLCAiXG4iKTsKKyAJfQorKyNpZiAwCisgCVBSQ08gPSBycG1kc0ZyZWVQUkNPKFBSQ08pOworKyNlbmRpZgorICAgICB9CisgCisgICAgIGlmIChycG1Jc1ZlcmJvc2UoKSkgewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMjc1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorZml4IGEgZW5kaWFuIGluY29tcGF0aWJsZSBlcnJvciBpbiBnZW5lcmF0aW5nIHJwbSB0YWcKKworQSBmbGF3IHdhcyBmb3VuZCBpbiB0aGUgd2F5IHJwbSBnZW5lcmF0aW5nIGFyYml0cmFyeSB0YWdzLCB3aGljaCBsZWFkcyB0byBhCitpbmNvcnJlY3QgcXVlcnkgcmVzdWx0LCB0aGlzIGlzc3VlIGlzIGludHJvZHVjZWQgYnkgYSBpbmNvbXBhdGlibGUgZW5kaWFuZXNzCit3aGVuIHRoZSBnZW5lcmF0aW5nIHByb2Nlc3MgaXMgZXhlY3V0ZWQgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisKK1RoaXMgcGF0Y2ggcmVzb2x2ZXMgaXQgYnkgdGFraW5nIHRoZSBieXRlIG9yZGVyIHRoYXQgaG9zdCB1c2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyB0YWduYW1lLmMgfCAgIDE2ICsrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi90YWduYW1lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvdGFnbmFtZS5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi90YWduYW1lLmMKK0BAIC0zLDYgKzMsMTkgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisrI2luY2x1ZGUgPGVuZGlhbi5oPgorKworKy8qIERvbid0IHJlZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KKysjaWZuZGVmIGxlMzJ0b2gKKysjaWZkZWYgX19VU0VfQlNECisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrI2Vsc2UKKysjZGVmaW5lIGxlMzJ0b2goeCkgX19ic3dhcF8zMih4KQorKyNlbmRpZgorKyNlbmRpZiAvKiBfX1VTRV9CU0QgKi8KKysjZW5kaWYgLyogbGUzMnRvaCAqLworIAorICNpbmNsdWRlIDxycG1pb19pbnRlcm5hbC5oPgkvKiBYWFggRElHRVNUX0NUWCwgeHRvbG93ZXIsIHhzdHJjYXNlY21wICovCisgI2luY2x1ZGUgPHJwbW1hY3JvLmg+CitAQCAtMTUyLDcgKzE2NSwxMCBAQCBzdGF0aWMgcnBtVGFnIF90YWdHZW5lcmF0ZShjb25zdCBjaGFyICpzCisgICAgIHh4ID0gcnBtRGlnZXN0VXBkYXRlKGN0eCwgcywgbmIpOworICAgICB4eCA9IHJwbURpZ2VzdEZpbmFsKGN0eCwgJmRpZ2VzdCwgJmRpZ2VzdGxlbiwgMCk7CisgICAgIGlmIChkaWdlc3QgJiYgZGlnZXN0bGVuID4gNCkgeworKwkvKiBUaGUgdGFnIGlzIHN0b3JlZCBpbiBhIHVuaWZvcm0gYnl0ZSBvcmRlciBmb3IgY3Jvc3MtZW5kaWFuIGNvbXBhdGliaWxpdHkuCisrCSAgIFN3YXAgdG8gdGhlIGhvc3QgdXNlcy4gKi8KKyAJbWVtY3B5KCZ0YWcsIGRpZ2VzdCArIChkaWdlc3RsZW4gLSA0KSwgNCk7CisrCXRhZyA9IGxlMzJ0b2godGFnKTsKKyAJdGFnID0gKHJwbVRhZykgKHRhZyAmIDB4M2ZmZmZmZmYpOworIAl0YWcgPSAocnBtVGFnKSAodGFnIHwgMHg0MDAwMDAwMCk7CisgICAgIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODViZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1NvdXJjZTogTm9uZQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitBdXRob3I6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiAyMDExLTAzLTAzCitEZXNjcmlwdGlvbjoKK1RoaXMgcGF0Y2ggZml4ZXMgYnVpbGQgaXNzdWUgZm91bmQgd2hlbiBjb21waWxpbmcgcnBtLW5hdGl2ZSBvbiB1YnVudHUKKzExLjA0LWFscGhhLiBQcm9ibGVtIGlzIHRoYXQgbGlua2VyIGRvZXMgbm90IGdldCBjb3JyZWN0IHNldCBvZiBkZXBlbmRlbnQKK2xpYnJhcmllcyB3aGVuIGxpbmtpbmcgbXRyZWUgYmluYXJ5IHdoaWNoIHJlc3VsdHMgaW4gdW5kZWZpbmVkIHN5bWJvbHMKK2luIGxpYnJwbWlvLnNvLiBUaGlzIHBhdGNoIGFkZHMgY29ycmVjdCBmbGFncyB0byBtdHJlZV9MREFERCB0byBhY2NvdW50Citmb3IgcnBtaW8gZGVwcworCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xODYsNyArMTg2LDcgQEAgZ3JlcF9MREFERCA9CQkkKFJQTUlPX0xEQUREX0NPTU1PTikKKyAKKyBtdHJlZV9TT1VSQ0VTID0JCXJwbW10cmVlLmMKKyBtdHJlZV9MREZMQUdTID0JCUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorLW10cmVlX0xEQUREID0JCSQoUlBNX0xEQUREX0NPTU1PTikKKyttdHJlZV9MREFERCA9CQkkKFJQTUlPX0xEQUREX0NPTU1PTikKKyAKKyBycG1yZXBvX1NPVVJDRVMgPQlycG1yZXBvLmMKKyBycG1yZXBvX0NQUEZMQUdTID0JJChBTV9DUFBGTEFHUykgLUkkKHRvcF9zcmNkaXIpL3NjcmlwdHMgLUkkKHRvcF9idWlsZGRpcikvc2NyaXB0cyAkKENQUEZMQUdTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2Y4NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS11dWlkLWluY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorQSBwYXRjaCB0byBmaXggYSBwcm9ibGVtIHdoZW4gY29tcGlsaW5nIHdpdGggdXVpZC4KKworV2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHdpdGggdXVpZCBhbmQgYWxsIHRlc3RzIGNvbXBpbGluZyB3aWxsIGVycm9yIGJlY2F1c2UKK3V1aWQuaCBkb2Vzbid0IGV4aXN0IGluIHRoZSBycG0gdGFyYmFsbC4gRml4IHRoaXMgYnkgY2hhbmdpbmcgdGhlIGluY2x1ZGUgdG8KK3VzZSB0aGUgb25lIGluIG9zc3Agd2hpY2ggc29sdmVzIHRoZSBpc3N1ZS4gCisKK1RoZSByZWNpcGUgYWxyZWFkeSBkZXBlbmRzIG9uIG9zc3Agc28gb3NzcC91dWlkLmggd2lsbCBiZSB0aGVyZSB3aGVuIHJwbS1uYXRpdmUKK2lzIGJ1aWx0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTW9yZ2FuIExpdHRsZSA8bW9yZ2FuLmxpdHRsZUB3aW5kcml2ZXIuY29tPgorCisKK0luZGV4OiBycG0tNS40LjE0L2x1YS9sb2NhbC9sdXVpZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2x1YS9sb2NhbC9sdXVpZC5jCisrKysgcnBtLTUuNC4xNC9sdWEvbG9jYWwvbHV1aWQuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAKKyAjaWZkZWYgTFVBX1VTRV9VVUlECisgCistI2luY2x1ZGUgInV1aWQuaCIKKysjaW5jbHVkZSA8b3NzcC91dWlkLmg+CisgCisgLyogIEx1YSBtZXRob2Q6IDx1dWlkPiA9IHV1aWQuZ2VuZXJhdGUoPHZlcnNpb24+WywgPHV1aWQtbmFtZXNwYWNlPiwgPGRhdGE+XSkgICovCisgc3RhdGljIGludCBsdXVpZF9nZW5lcmF0ZShsdWFfU3RhdGUgKkwpCitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9ycG11dWlkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vcnBtdXVpZC5jCisrKysgcnBtLTUuNC4xNC9ycG1pby9ycG11dWlkLmMKK0BAIC0xNiw3ICsxNiw3IEBACisgI2luY2x1ZGUgInJwbWxvZy5oIgorICNpbmNsdWRlICJycG11dWlkLmgiCisgI2lmZGVmIFdJVEhfVVVJRAorLSNpbmNsdWRlICJ1dWlkLmgiCisrI2luY2x1ZGUgPG9zc3AvdXVpZC5oPgorICNlbmRpZgorICNpbmNsdWRlICJkZWJ1Zy5oIgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0yY3BpbyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtMmNwaW8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmJjZWY2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtMmNwaW8KQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKKyMgUHJldmVudCBnYXdrID49IDQuMC54IGZyb20gZ2V0dGluZyBmdW5ueSBpZGVhcyB3cnQgVVRGIGluIHByaW50ZigpCitMQU5HPUMKKworcGtnPSQxCitpZiBbICIkcGtnIiA9ICIiIC1vICEgLWUgIiRwa2ciIF07IHRoZW4KKyAgICBlY2hvICJubyBwYWNrYWdlIHN1cHBsaWVkIiAxPiYyCisgICBleGl0IDEKK2ZpCisKK2xlYWRzaXplPTk2CitvPWBleHByICRsZWFkc2l6ZSArIDhgCitzZXQgYG9kIC1qICRvIC1OIDggLXQgdTEgJHBrZ2AKK2lsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQyICsgJDMgXCkgKyAkNCBcKSArICQ1YAorZGw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDYgKyAkNyBcKSArICQ4IFwpICsgJDlgCisjIGVjaG8gInNpZyBpbDogJGlsIGRsOiAkZGwiCisKK3NpZ3NpemU9YGV4cHIgOCArIDE2IFwqICRpbCArICRkbGAKK289YGV4cHIgJG8gKyAkc2lnc2l6ZSArIFwoIDggLSBcKCAkc2lnc2l6ZSBcJSA4IFwpIFwpIFwlIDggKyA4YAorc2V0IGBvZCAtaiAkbyAtTiA4IC10IHUxICRwa2dgCitpbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkMiArICQzIFwpICsgJDQgXCkgKyAkNWAKK2RsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQ2ICsgJDcgXCkgKyAkOCBcKSArICQ5YAorIyBlY2hvICJoZHIgaWw6ICRpbCBkbDogJGRsIgorCitoZHJzaXplPWBleHByIDggKyAxNiBcKiAkaWwgKyAkZGxgCitvPWBleHByICRvICsgJGhkcnNpemVgCitjb21wPWBkZCBpZj0kcGtnIGlicz0kbyBza2lwPTEgY291bnQ9MSAyPi9kZXYvbnVsbCB8IGRkIGJzPTMgY291bnQ9MSAyPiAvZGV2L251bGxgCisKK2d6PSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWMlYyIsIDB4MWYsIDB4OGIpOyB9J2AiCitsem1hPSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWNMWiIsIDB4ZmYpOyB9J2AiCit4ej0iYGVjaG8gLiB8IGF3ayAneyBwcmludGYoIiVjN3oiLCAweGZkKTsgfSdgIgorY2FzZSAiJGNvbXAiIGluCisgICAgQlpoKSAgICAgIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgYnVuemlwMiA7OworICAgICIkZ3oiKikgICBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IGd1bnppcCA7OworICAgICIkeHoiKikgICBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IHh6Y2F0IDs7CisgICAgIiRsem1hIiopIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgdW5sem1hIDs7CisgICAgKikgICAgICAgIGVjaG8gIlVucmVjb2duaXplZCBycG0gZmlsZTogJHBrZyI7IGV4aXQgMSA7OworZXNhYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1hdGNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1hdGNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZDEzYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWF0Y2gucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorQWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgcnBtYXRjaCgpIGFuZCAKK2NyZWF0ZXMgYSBjb21wYXRhYmxlIG1hY3JvIGlmIGl0IGlzIG5vdCBwcm92aWRlZCBieSB0aGUgQyBsaWJyYXJ5LgorCitUaGlzIGlzIG5lZWRlZCBmb3IgdWNsaWJjIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgdGhlIGFib3ZlIGZ1bmN0aW9uCitpbXBsZW1lbnRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTk0Myw3ICs5NDMsNyBAQCBBQ19DSEVDS19GVU5DUyhbZG5sCisgICAgIGZ0b2sgZ2V0YWRkcmluZm8gZ2V0YXR0cmxpc3QgZ2V0Y3dkIGdldGRlbGltIGdldGxpbmUgZ2V0bW9kZSBnZXRuYW1laW5mbyBkbmwKKyAgICAgZ2V0cGFzc3BocmFzZSBnZXR4YXR0ciBnZXR3ZCBpY29udiBpbmV0X2F0b24gbGNoZmxhZ3MgbGNobW9kIGxjaG93biBkbmwKKyAgICAgbGdldHhhdHRyIGxzZXR4YXR0ciBsdXRpbWVzIG1hZHZpc2UgbWVtcGNweSBta2R0ZW1wIG1rc3RlbXAgbXRyYWNlIGRubAorLSAgICBwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhbGxvY2F0ZSBwdXRlbnYgcmVhbHBhdGggcmVnY29tcCBzZWN1cmVfZ2V0ZW52IF9fc2VjdXJlX2dldGVudiBkbmwKKysgICAgcG9zaXhfZmFkdmlzZSBwb3NpeF9mYWxsb2NhdGUgcHV0ZW52IHJlYWxwYXRoIHJlZ2NvbXAgcnBtYXRjaCBzZWN1cmVfZ2V0ZW52IF9fc2VjdXJlX2dldGVudiBkbmwKKyAgICAgc2V0YXR0cmxpc3Qgc2V0ZW52IHNldGxvY2FsZSBzZXRtb2RlIHNldHhhdHRyIGRubAorICAgICBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2hvbGQgc2lncmVsc2Ugc2lncGF1c2UgZG5sCisgICAgIHNpZ3Byb2NtYXNrIHNpZ3N1c3BlbmQgc2lnYWN0aW9uIGRubAorSW5kZXg6IHJwbS01LjQuMTQvc3lzdGVtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3lzdGVtLmgKKysrKyBycG0tNS40LjE0L3N5c3RlbS5oCitAQCAtMzUzLDYgKzM1MywxNCBAQCBleHRlcm4gaW50IF90b2xvd2VyKGludCkgX19USFJPVwkvKkAqLzsKKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBIQVZFX1JQTUFUQ0gKKysjZGVmaW5lIHJwbWF0Y2gobGluZSkgXAorKwkoIChsaW5lID09IE5VTEwpPyAtMSA6IFwKKysJICAoKmxpbmUgPT0gJ3knIHx8ICpsaW5lID09ICdZJyk/IDEgOiBcCisrCSAgKCpsaW5lID09ICduJyB8fCAqbGluZSA9PSAnTicpPyAwIDogXAorKwkgIC0xICkKKysjZW5kaWYKKysKKyAvKiAtLSBSZXRyb2ZpdCBnbGliYyBfX3Byb2duYW1lICovCisgI2lmIGRlZmluZWQgX19HTElCQ19fICYmIF9fR0xJQkNfXyA+PSAyCisgI2lmIF9fR0xJQkNfTUlOT1JfXyA+PSAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRlcHMtb2Vjb3JlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kZXBzLW9lY29yZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmRkMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kZXBzLW9lY29yZS5wYXRjaApAQCAtMCwwICsxLDE5NCBAQAorQWRkIGFuICJycG1kZXBzLW9lY29yZSIgYmluYXJ5IHdoaWNoIGFsbG93cyBiYXRjaCBwcm9jZXNzaW5nIG9mIGluZGl2aWR1YWwgZmlsZQorZGVwZW5kZW5jaWVzIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gcnBtZGVwcyAtLXByb3ZpZGVzIC0tcmVxdWlyZXMgLXYsIHByZWZpeGluZworZWFjaCBsaW5lIG9mIG91dHB1dCB3aXRoIHRoZSBmaWxlbmFtZSB0aGF0IGhhcyB0aGUgZGVwZW5kZW5jeS4KKworVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGluZGl2aWR1YWxseSBjYWxsaW5nIHJwbWRlcHMgb24gZWFjaCBmaWxlLgorCitUaGlzIGJpbmFyeSBpcyB1c2VkIGJ5IHBhY2thZ2UuYmJjbGFzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMi8yLzcKKworLS0tCisgdG9vbHMvTWFrZWZpbGUuYW0gICAgICB8ICAgIDYgKystCisgdG9vbHMvcnBtZGVwcy1vZWNvcmUuYyB8ICAxNDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC02Miw3ICs2Miw3IEBAIHBrZ2Jpbl9QUk9HUkFNUyA9CVwKKyAJQFdJVEhfQVVHRUFTX0FVR1RPT0xAIGNocm9vdCBjcCBAV0lUSF9DVURGX0NVREZUT09MQCBmaW5kIG10cmVlIFwKKyAJQFdJVEhfU0VNQU5BR0VfU0VNT0RVTEVAIHdnZXQgXAorIAlycG1jYWNoZSBycG1kaWdlc3QgcnBtcmVwbyBycG1zcGVjZHVtcCBcCistCXJwbWNtcCBycG1kZXBzIHNxbGl0ZTMgQFdJVEhfS0VZVVRJTFNfUlBNS0VZQCBAV0lUSF9MSUJFTEZfREVCVUdFRElUQAorKwlycG1jbXAgcnBtZGVwcyBycG1kZXBzLW9lY29yZSBzcWxpdGUzIEBXSVRIX0tFWVVUSUxTX1JQTUtFWUAgQFdJVEhfTElCRUxGX0RFQlVHRURJVEAKKyBpZiBXSVRIX0RCCisgcGtnYmluX1BST0dSQU1TICs9CWRiY29udmVydAorIGVuZGlmCitAQCAtMTcyLDYgKzE3MiwxMCBAQCBycG1kZXBzX1NPVVJDRVMgPQlycG1kZXBzLmMKKyBycG1kZXBzX0xERkxBR1MgPQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKyBycG1kZXBzX0xEQUREID0JCSQoUlBNX0xEQUREX0NPTU1PTikKKyAKKytycG1kZXBzX29lY29yZV9TT1VSQ0VTID0gIHJwbWRlcHMtb2Vjb3JlLmMKKytycG1kZXBzX29lY29yZV9MREZMQUdTID0gIEBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorK3JwbWRlcHNfb2Vjb3JlX0xEQUREID0gICAgJChSUE1fTERBRERfQ09NTU9OKQorKworIHJwbWRpZ2VzdF9TT1VSQ0VTID0JcnBtZGlnZXN0LmMKKyBycG1kaWdlc3RfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWRpZ2VzdF9MREFERCA9CSQoUlBNSU9fTERBRERfQ09NTU9OKQorSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIHJwbS01LjQuMTQvdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworQEAgLTAsMCArMSwxNDcgQEAKKysjaW5jbHVkZSAic3lzdGVtLmgiCisrY29uc3QgY2hhciAqX19wcm9nbmFtZTsKKysKKysjaW5jbHVkZSA8cnBtaW8uaD4KKysjaW5jbHVkZSA8cnBtaW90eXBlcy5oPgorKyNpbmNsdWRlIDxycG1jYi5oPgorKyNpbmNsdWRlIDxhcmd2Lmg+CisrI2luY2x1ZGUgPHJwbXR5cGVzLmg+CisrI2luY2x1ZGUgPHJwbXRhZy5oPgorKworKyNpbmNsdWRlIDxycG1kcy5oPgorKyNkZWZpbmUgICBfUlBNRkNfSU5URVJOQUwgICAgIC8qIFhYWCBmb3IgZGVidWdnaW5nICovCisrI2luY2x1ZGUgPHJwbWZjLmg+CisrCisrI2luY2x1ZGUgPHJwbWNsaS5oPgorKworKyNpbmNsdWRlICJkZWJ1Zy5oIgorKworKy8qQHVuY2hlY2tlZEAqLworK2NoYXIgKnByb2duYW1lOworKworKyNkZWZpbmUgICBSUE1ERVBfUlBNRkMgICAgICAgIDEKKysKKytzdGF0aWMgaW50IHJwbWRlcFByaW50KGNoYXIgKmZpbGVuYW1lLCBycG1kcyBkcywgRklMRSAqIGZwKQorK3sKKysgICAgaWYgKGZwID09IE5VTEwpIGZwID0gc3RkZXJyOworKworKyAgICBkcyA9IHJwbWRzSW5pdChkcyk7CisrICAgIHdoaWxlIChycG1kc05leHQoZHMpID49IDApIHsKKysgIGZwcmludGYoZnAsICIlcyAlczogJXNcbiIsIGZpbGVuYW1lLCBycG1kc1R5cGUoZHMpLCBycG1kc0RORVZSKGRzKSsyKTsKKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNUYWJsZVtdID0geworKworKyB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsIHJwbWNsaUFsbFBvcHRUYWJsZSwgMCwKKysgIE5fKCJDb21tb24gb3B0aW9uczoiKSwKKysgIE5VTEwgfSwgCisrCisrICAgUE9QVF9BVVRPQUxJQVMKKysgICBQT1BUX0FVVE9IRUxQCisrICAgUE9QVF9UQUJMRUVORAorK307CisrCisrCisraW50CisrbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcG9wdENvbnRleHQgb3B0Q29uOworKyAgICBBUkdWX3QgYXYgPSBOVUxMOworKyAgICBycG1mYyBmYyA9IE5VTEw7CisrICAgIEZJTEUgKiBmcCA9IE5VTEw7CisrICAgIGludCBmbGFncyA9IDA7CisrICAgIGludCBhYyA9IDA7CisrICAgIGludCBlYyA9IDE7CisrICAgIGludCB4eDsKKysgICAgaW50IGk7CisrICAgIGNoYXIgYnVmW0JVRlNJWl07CisrICAgIGludCBuZGRpY3Q7CisrICAgIGNvbnN0IGNoYXIgKiBzOworKyAgICBjaGFyICogc2U7CisrICAgIGNvbnN0IGNoYXIgKiBmbjsKKysgICAgY29uc3QgY2hhciAqIE47CisrICAgIGNvbnN0IGNoYXIgKiBFVlI7CisrICAgIGV2ckZsYWdzIEZsYWdzOworKyAgICB1bnNpZ25lZCBjaGFyIGRlcHR5cGU7CisrICAgIGludCBpeDsKKysgICAgcnBtZHMgZHM7CisrCisrLypALW1vZG9ic2VydmVyQCovCisrICAgIGlmICgocHJvZ25hbWUgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpICE9IE5VTEwpCisrICBwcm9nbmFtZSsrOworKyAgICBlbHNlCisrICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisrLypAPW1vZG9ic2VydmVyQCovCisrCisrICAgIG9wdENvbiA9IHJwbWNsaUluaXQoYXJnYywgYXJndiwgb3B0aW9uc1RhYmxlKTsKKysgICAgaWYgKG9wdENvbiA9PSBOVUxMKQorKyAgZ290byBleGl0OworKworKyAgICBhdiA9IHBvcHRHZXRBcmdzKG9wdENvbik7CisrICAgIGFjID0gYXJndkNvdW50KGF2KTsKKysKKysgICAgaWYgKGFjID09IDApIHsKKysgIGF2ID0gTlVMTDsKKysgIHh4ID0gYXJndkZnZXRzKCZhdiwgTlVMTCk7CisrICBhYyA9IGFyZ3ZDb3VudChhdik7CisrICAgIH0KKysKKysgICAgLyogTWFrZSBzdXJlIGZpbGUgbmFtZXMgYXJlIHNvcnRlZC4gKi8KKysgICAgeHggPSBhcmd2U29ydChhdiwgTlVMTCk7CisrCisrICAgIC8qIEJ1aWxkIGZpbGUgY2xhc3MgZGljdGlvbmFyeS4gKi8KKysgICAgZmMgPSBycG1mY05ldygpOworKyAgICB4eCA9IHJwbWZjQ2xhc3NpZnkoZmMsIGF2LCBOVUxMKTsKKysKKysgICAgLyogQnVpbGQgZmlsZS9wYWNrYWdlIGRlcGVuZGVuY3kgZGljdGlvbmFyeS4gKi8KKysgICAgeHggPSBycG1mY0FwcGx5KGZjKTsKKysKKysgICAgLyogR2VuZXJhdGUgcGVyLWZpbGUgaW5kaWNlcyBpbnRvIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiAqLworKyAgICBuZGRpY3QgPSBhcmd2Q291bnQoZmMtPmRkaWN0KTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IG5kZGljdDsgaSsrKSB7CisrICBzID0gZmMtPmRkaWN0W2ldOworKworKyAgLyogUGFyc2Ugb3V0IChmaWxlIyxkZXB0eXBlLE4sRVZSLEZsYWdzKSAqLworKyAgaXggPSBzdHJ0b2wocywgJnNlLCAxMCk7CisrICBhc3NlcnQoc2UgIT0gTlVMTCk7CisrICBkZXB0eXBlID0gKnNlKys7CisrICBzZSsrOworKyAgTiA9IHNlOworKyAgd2hpbGUgKCpzZSAmJiAqc2UgIT0gJyAnKQorKyAgICAgIHNlKys7CisrICAqc2UrKyA9ICdcMCc7CisrICBFVlIgPSBzZTsKKysgIHdoaWxlICgqc2UgJiYgKnNlICE9ICcgJykKKysgICAgICBzZSsrOworKyAgKnNlKysgPSAnXDAnOworKyAgRmxhZ3MgPSBzdHJ0b2woc2UsIE5VTEwsIDE2KTsKKysKKysgIHN3aXRjaCAoZGVwdHlwZSkgeworKyAgZGVmYXVsdDoKKysgICAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKysgIGNhc2UgJ1AnOiAgIAorKyAgICAgIGRzID0gcnBtZHNTaW5nbGUoUlBNVEFHX1BST1ZJREVOQU1FLCBOLCBFVlIsIEZsYWdzKTsKKysgICAgICBycG1kZXBQcmludCgoY2hhciAqKWZjLT5mbltpeF0sIGRzLCBzdGRvdXQpOworKyAgICAgICh2b2lkKXJwbWRzRnJlZShkcyk7CisrICAgICAgZHMgPSBOVUxMOworKyAgICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworKyAgY2FzZSAnUic6CisrICAgICAgZHMgPSBycG1kc1NpbmdsZShSUE1UQUdfUkVRVUlSRU5BTUUsIE4sIEVWUiwgRmxhZ3MpOworKyAgICAgIHJwbWRlcFByaW50KChjaGFyICopZmMtPmZuW2l4XSwgZHMsIHN0ZG91dCk7CisrICAgICAgKHZvaWQpcnBtZHNGcmVlKGRzKTsKKysgICAgICBkcyA9IE5VTEw7CisrICAgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisrICB9CisrICAgIH0KKysKKysgICAgZmMgPSBycG1mY0ZyZWUoZmMpOworKworKyAgICBlYyA9IDA7CisrCisrZXhpdDoKKysgICAgb3B0Q29uID0gcnBtY2xpRmluaShvcHRDb24pOworKyAgICByZXR1cm4gZWM7CisrfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbXF2X2NjX2JfZ29uZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDhiZDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorcnBtOiBjb21waWxlIHJwbXF2LmMgaW5zdGVhZCBvZiBycG1xdi5jYworCitTb21lIHZlcnNpb25zIG9mIGdjYywgNC40LjUgZm9yIGV4YW1wbGUsIHdpbGwgcHV0IGEgcmVmZXJlbmNlIHRvIF9fZ3h4X3BlcnNvbmFsaXR5X3YwCitpbnRvIHJwbS5vIGFuZCBycG1idWlsZC5vLiAgVGhpcyBtZWFucyB3ZSBtdXN0IGxpbmsgd2l0aCBnKyssIGFuZCB0aGUgTWFrZWZpbGUgd2UKK2dlbmVyYXRlIGRvZXMgbm90LgorCitTbywgZ28gYmFjayB0byB1c2luZyBycG1xdi5jICh3aGljaCBpcyBjdXJyZW50bHkgaWRlbnRpY2FsIHRvIHJwbXF2LmNjKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworICAgV2hlbiBsaW5raW5nIHdpdGggZysrIGlzIHJlYWxseSBuZWNlc3NhcnksIHRoZSB1cHN0cmVhbSBwYWNrYWdlIHdpbGwgZG8gdGhhdC4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8am9lLnNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMjcsMTMgKzEyNywxMyBAQCBycG1fU09VUkNFUyA9CQlidWlsZC5jCisgcnBtX0xERkxBR1MgPQkJQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtX0xEQUREID0JCXJwbS5vICQobXlMREFERCkKKyBycG0ubzoJJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCistCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLURJQU1fUlBNREIgLURJQU1fUlBNRUlVIC1ESUFNX1JQTUsgLURJQU1fUlBNUVYgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jYworKwkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1ESUFNX1JQTURCIC1ESUFNX1JQTUVJVSAtRElBTV9SUE1LIC1ESUFNX1JQTVFWIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuYworIAorIHJwbWJ1aWxkX1NPVVJDRVMgPQlidWlsZC5jCisgcnBtYnVpbGRfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWJ1aWxkX0xEQUREID0JcnBtYnVpbGQubyAkKG15TERBREQpCisgcnBtYnVpbGQubzogJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCistCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jYworKwkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuYworIAorIC5QSE9OWToJc3BsaW50Cisgc3BsaW50OgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS91Y2xpYmMtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdWNsaWJjLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3MGFkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdWNsaWJjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRGVmaW5lIHRoZSB4KiB3cmFwcGVycyBmb3IgdWNsaWJjIGFzIHdlbGwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL3JwbWlvLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vcnBtaW8uaAorKysrIHJwbS01LjQuMTQvcnBtaW8vcnBtaW8uaAorQEAgLTIzLDcgKzIzLDggQEAKKyAgKi8KKyAvKkB7Ki8KKyAjaWYgIWRlZmluZWQoX19MQ0xJTlRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIFwKKy0JKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSkKKysJKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSkgJiYgXAorKwkhZGVmaW5lZChfX1VDTElCQ19fKQorICNkZWZpbmUgVVNFX0NPT0tJRV9TRUVLX1BPSU5URVIgMQorIHR5cGVkZWYgX0lPX29mZjY0X3QgCV9saWJpb19vZmZfdDsKKyB0eXBlZGVmIF9saWJpb19vZmZfdCAqCV9saWJpb19wb3NfdDsKK0luZGV4OiBycG0tNS40LjE0L3N5c3RlbS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5c3RlbS5oCisrKysgcnBtLTUuNC4xNC9zeXN0ZW0uaAorQEAgLTQ4MSw3ICs0ODEsNyBAQCBleHRlcm4gdm9pZCBtdW50cmFjZSAodm9pZCkKKyAjZW5kaWYgLyogZGVmaW5lZChfX0xDTElOVF9fKSAqLworIAorIC8qIE1lbW9yeSBhbGxvY2F0aW9uIHZpYSBtYWNybyBkZWZzIHRvIGdldCBtZWFuaW5nZnVsIGxvY2F0aW9ucyBmcm9tIG10cmFjZSgpICovCistI2lmIGRlZmluZWQoX19HTlVDX18pCisrI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAjZGVmaW5lCXhtYWxsb2MoX3NpemUpIAkJKG1hbGxvYyhfc2l6ZSkgPyA6IHZtZWZhaWwoX3NpemUpKQorICNkZWZpbmUJeGNhbGxvYyhfbm1lbWIsIF9zaXplKQkoY2FsbG9jKChfbm1lbWIpLCAoX3NpemUpKSA/IDogdm1lZmFpbChfc2l6ZSkpCisgI2RlZmluZQl4cmVhbGxvYyhfcHRyLCBfc2l6ZSkJKHJlYWxsb2MoKF9wdHIpLCAoX3NpemUpKSA/IDogdm1lZmFpbChfc2l6ZSkpCitJbmRleDogcnBtLTUuNC4xNC9saWIvbGlicnBtLnZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2xpYnJwbS52ZXJzCisrKysgcnBtLTUuNC4xNC9saWIvbGlicnBtLnZlcnMKK0BAIC00MDUsNiArNDA1LDEwIEBAIExJQlJQTV8wCisgICAgIHNwZWNlZGl0OworICAgICBzdHJpY3RfZXJhc3VyZXM7CisgICAgIFhycG10c2lJbml0OworKyAgICB4bWFsbG9jOworKyAgICB4cmVhbGxvYzsKKysgICAgeGNhbGxvYzsKKysgICAgeHN0cmR1cDsKKyAgIGxvY2FsOgorICAgICAqOworIH07CitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9saWJycG1pby52ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWlvL2xpYnJwbWlvLnZlcnMKKysrKyBycG0tNS40LjE0L3JwbWlvL2xpYnJwbWlvLnZlcnMKK0BAIC0xMDU2LDYgKzEwNTYsMTAgQEAgTElCUlBNSU9fMAorICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF9tb2RlOworICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF93OworICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF93dGltZW91dDsKKysgICAgeG1hbGxvYzsKKysgICAgeHJlYWxsb2M7CisrICAgIHhjYWxsb2M7CisrICAgIHhzdHJkdXA7CisgICBsb2NhbDoKKyAgICAgKjsKKyB9OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDQ1YWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3ZlcmlmeS1maXgtYnJva2VuLWxvZ2ljLWZvci1naG9zdC1hdm9pZGFuY2UtTWFyay1IYXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA5ZTdiNzJlZTBjOTk0NjA5OTc1OTgxZTEzNWZjMThkMDM4N2FlZmI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogamJqIDxqYmo+CitEYXRlOiBXZWQsIDE0IE1heSAyMDE0IDIxOjE5OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIC0gdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyaworIEhhdGxlKS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CistLS0KKyBDSEFOR0VTICAgICAgfCAxICsKKyBsaWIvdmVyaWZ5LmMgfCAzICstLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogcnBtLTUuNC4xNC9DSEFOR0VTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL0NIQU5HRVMKKysrKyBycG0tNS40LjE0L0NIQU5HRVMKK0BAIC0xLDMgKzEsNSBAQAorKyAgICAtIGpiajogdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyayBIYXRsZSkuCisrCisgNS40LjEzIC0+IDUuNC4xNDoKKyAgICAgLSBtb29uZXk6IHVzZSBfX3N1biBpbnN0ZWFkIG9mIF9fc3VuX18gaW4gI2RlZmluZSAobHAjMTI0MzQ3MikuCisgICAgIC0gbW9vbmV5OiBycG1jb25zdGFudDogZW5zdXJlIGxpbmthZ2UgdyBPcmFjbGUgU3R1ZGlvIDEyLjMgKGxwIzEyNDM0NjkpLgorSW5kZXg6IHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi92ZXJpZnkuYworKysrIHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCitAQCAtNTg4LDggKzU4OCw3IEBAIHVpbnQzMl90IGZjID0gcnBtZmlGQyhmaSk7CisgCSAgICBjb250aW51ZTsKKyAKKyAJLyogSWYgbm90IHZlcmlmeWluZyAlZ2hvc3QsIHNraXAgZ2hvc3QgZmlsZXMuICovCistCS8qIFhYWCB0aGUgYnJva2VuISEhIGxvZ2ljIGRpc2FibGVzICVnaG9zdCBxdWVyaWVzIGFsd2F5cy4gKi8KKy0JaWYgKCEoRkZfSVNTRVQocXZhLT5xdmFfZmZsYWdzLCBHSE9TVCkgJiYgRkZfSVNTRVQoZmZsYWdzLCBHSE9TVCkpKQorKwlpZiAoIUZGX0lTU0VUKHF2YS0+cXZhX2ZmbGFncywgR0hPU1QpICYmIEZGX0lTU0VUKGZmbGFncywgR0hPU1QpKQorIAkgICAgY29udGludWU7CisgCisgCS8qIEdhdGhlciBwZXItZmlsZSBkYXRhIGludG8gYSBjYXJyaWVyLiAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzQuMTEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBjOTQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIKQEAgLTAsMCArMSwxMzcgQEAKK1NVTU1BUlkgPSAiVGhlIFJQTSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgKFJQTSkgaXMgYSBwb3dlcmZ1bCBjb21tYW5kIGxpbmUgZHJpdmVuIFwKK3BhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0gY2FwYWJsZSBvZiBpbnN0YWxsaW5nLCB1bmluc3RhbGxpbmcsIFwKK3ZlcmlmeWluZywgcXVlcnlpbmcsIGFuZCB1cGRhdGluZyBzb2Z0d2FyZSBwYWNrYWdlcy4gRWFjaCBzb2Z0d2FyZSBcCitwYWNrYWdlIGNvbnNpc3RzIG9mIGFuIGFyY2hpdmUgb2YgZmlsZXMgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBcCit0aGUgcGFja2FnZSBsaWtlIGl0cyB2ZXJzaW9uLCBhIGRlc2NyaXB0aW9uLCBldGMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnJwbS5vcmciCitMSUNFTlNFID0gIkdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA/Pz0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK0RFUEVORFMgPSAiZGIgbGlieG1sMiB4eiBmaW5kdXRpbHMgZmlsZSBwb3B0IG5zcyBiemlwMiBlbGZ1dGlscyBwYXRjaCBhdHRyIHpsaWIgYWNsIGd6aXAgbWFrZSBiaW51dGlscyBweXRob24iCisKK1NSQ19VUkkgKz0gImh0dHA6Ly9ycG0ub3JnL3JlbGVhc2VzL3JwbS00LjExLngvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZ2NvbmZpZy1mb3ItcHl0aG9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGRfUlBNU0VOU0VfTUlTU0lOR09LX3RvX3JwbW1vZHVsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3VwcG9ydC1zdWdnZXN0cy10YWcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS1kaXItY2hlY2sucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeF9saWJkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzZhYzk5NDhhODgzNjcwNTRmOGRkYjVjMGU4NzE3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDNmOGRlNjMyYjMzODQ2Y2U1NzQ2ZjQyOWMyMWE2MGY0MGRmZjlkY2I1NmYxYjQxMThmMzdhMDY1MmE0OGQ0IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2luaGVyaXQgcHl0aG9ubmF0aXZlCitpbmhlcml0IHBrZ2NvbmZpZworaW5oZXJpdCBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiArPSAiLS1ob3N0PSR7SE9TVF9TWVN9IFwKKyAgICAgICAgICAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gXAorICAgICAgICAgICAgICAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLWV4ZWMtcHJlZml4PSR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgIC0tYmluZGlyPSR7cHJlZml4fS9iaW4gXAorICAgICAgICAgICAgICAgICAtLXNiaW5kaXI9JHtwcmVmaXh9L3NiaW4gXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tZGF0YWRpcj0ke3ByZWZpeH0vc2hhcmUgXAorICAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAtLWxpYmRpcj0ke3ByZWZpeH0vbGliIFwKKyAgICAgICAgICAgICAgICAgLS1saWJleGVjZGlyPSR7cHJlZml4fS9saWJleGVjIFwKKyAgICAgICAgICAgICAgICAgLS1sb2NhbHN0YXRlZGlyPSR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgICAtLXNoYXJlZHN0YXRlZGlyPSR7cHJlZml4fS9jb20gXAorICAgICAgICAgICAgICAgICAtLW1hbmRpcj0ke21hbmRpcn0gXAorICAgICAgICAgICAgICAgICAtLWluZm9kaXI9JHtpbmZvZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWFjbCBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1sdWEgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY2FwIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWV4dGVybmFsLWRiIFwKKyAgICAgICAgICAgICAgICAiCisKK0NQUEZMQUdTX2FwcGVuZCA9ICIgYHBrZy1jb25maWcgLS1jZmxhZ3MgbnNzYCIKK0xERkxBR1NfYXBwZW5kID0gIiAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyIKK0NDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAiCitDWFhGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgcm0gLXJmIHNxbGl0ZQorICAgIHJtIC1mIG00L2xpYnRvb2wubTQKKyAgICBybSAtZiBtNC9sdCoubTQKKyAgICBybSAtcmYgZGIzL2NvbmZpZ3VyZSoKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgbXYgJHtEfS8ke2Jhc2VfYmluZGlyfS9ycG0gJHtEfS8ke2JpbmRpcn0vCisgICAgcm1kaXIgJHtEfS8ke2Jhc2VfYmluZGlyfQorICAgIHJtIC1mICR7RH0ke3ByZWZpeH0vbGliLyoubGEKKyAgICBybSAtZiAke0R9JHtwcmVmaXh9L2xpYi9ycG0tcGx1Z2lucy8qLmxhCisgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyoue2EsbGF9CisgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLnthLGxhfQorICAgIHJtIC1mciAke0R9L3ZhcgorICAgIGluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9saWIvcnBtL2JpbgorICAgIGxuIC1zIC4uL2RlYnVnZWRpdCAke0R9JHtwcmVmaXh9L2xpYi9ycG0vYmluL2RlYnVnZWRpdAorICAgIGxuIC1zIC4uL3JwbWRlcHMgJHtEfSR7cHJlZml4fS9saWIvcnBtL2Jpbi9ycG1kZXBzLW9lY29yZQorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59KCkgeworCisgICAgWyAieFwkRCIgPT0gIngiIF0gJiYgbGRjb25maWcKKyAgICB0ZXN0IC1mICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9QYWNrYWdlcyB8fCBycG0gLS1pbml0ZGIKKyAgICBybSAtZiAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vRmlsZW1kNXMgXAorICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9GaWxlZGlnZXN0cyBcCisgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL1JlcXVpcmV2ZXJzaW9uIFwKKyAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vUHJvdmlkZXZlcnNpb24KKworfQorCitwa2dfcG9zdHJtXyR7UE59KCkgeworICAgIFsgInhcJEQiID09ICJ4IiBdICYmIGxkY29uZmlnCisKK30KKworUEFDS0FHRVMgKz0gInB5dGhvbi0ke1BOfSIKK1BST1ZJREVTICs9ICJweXRob24tcnBtIgorCitGSUxFU18ke1BOfSArPSAgIiR7bGliZGlyfS9ycG0gXAorICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnBtLXBsdWdpbnMvZXhlYy5zbyBcCisgICAgICAgICAgICAgICAgIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnBtLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3JwbS1wbHVnaW5zLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vKi5sYSIKKworRklMRVNfcHl0aG9uLSR7UE59ID0gIiR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vKiIKK1JERVBFTkRTX3B5dGhvbi0ke1BOfSA9ICIke1BOfSBweXRob24iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDNmM2JjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiCkBAIC0wLDAgKzEsNTI4IEBACitTVU1NQVJZID0gIlRoZSBSUE0gcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIGlzIGEgcG93ZXJmdWwgY29tbWFuZCBsaW5lIGRyaXZlbiBcCitwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIGNhcGFibGUgb2YgaW5zdGFsbGluZywgdW5pbnN0YWxsaW5nLCBcCit2ZXJpZnlpbmcsIHF1ZXJ5aW5nLCBhbmQgdXBkYXRpbmcgc29mdHdhcmUgcGFja2FnZXMuIEVhY2ggc29mdHdhcmUgXAorcGFja2FnZSBjb25zaXN0cyBvZiBhbiBhcmNoaXZlIG9mIGZpbGVzIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgXAordGhlIHBhY2thZ2UgbGlrZSBpdHMgdmVyc2lvbiwgYSBkZXNjcmlwdGlvbiwgZXRjLiIKKworU1VNTUFSWV8ke1BOfS1saWJzID0gIkxpYnJhcmllcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWxpYnMgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gc2hhcmVkIGxpYnJhcmllcy4iCisKK1NVTU1BUllfJHtQTn0tZGV2ID0gIkRldmVsb3BtZW50IGZpbGVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLiBUaGVzZSBcCitkZXZlbG9wbWVudCBmaWxlcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgcHJvZ3JhbXMgdGhhdCBcCittYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyBhbmQgZGF0YWJhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW50ZW5kZWQgdG8gXAorc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgZ3JhcGhpY2FsIHBhY2thZ2UgbWFuYWdlcnMgb3IgYW55IFwKK290aGVyIHRvb2xzIHRoYXQgbmVlZCBhbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgUlBNIHBhY2thZ2VzIGluIG9yZGVyIFwKK3RvIGZ1bmN0aW9uLiIKKworU1VNTUFSWV8ke1BOfS1jb21tb24gPSAiQ29tbW9uIFJQTSBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBhbmQgY29uZmlndXJhdGlvbiIKK0RFU0NSSVBUSU9OXyR7UE59LWNvbW1vbiA9ICJUaGUgcnBtLWNvbW1vbiBwYWNrYWdlIGNvbnRhaW5zIHBhdGhzLCBzY3JpcHRzLCBkb2N1bWVudGF0aW9uIFwKK2FuZCBjb25maWd1cmF0aW9uIGNvbW1vbiBiZXR3ZWVuIFJQTSBQYWNrYWdlIE1hbmFnZXIuIgorCitTVU1NQVJZXyR7UE59LWJ1aWxkID0gIlNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgdXNlZCB0byBidWlsZCBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWJ1aWxkID0gIlRoZSBycG0tYnVpbGQgcGFja2FnZWMgb250YWlucyB0aGUgc2NyaXB0cyBhbmQgZXhlY3V0YWJsZSBwcm9ncmFtcyBcCit0aGF0IGFyZSB1c2VkIHRvIGJ1aWxkIHBhY2thZ2VzIHVzaW5nIHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV9weXRob24tcnBtID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbnVwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcHl0aG9uLXJwbSA9ICJUaGUgcnBtLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK1NVTU1BUllfcGVybC1tb2R1bGUtcnBtID0gIlBlcmwgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3BlcmwtbW9kdWxlcy1ycG0gPSAiVGhlIHBlcmwtbW9kdWxlcy1ycG0gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFBlcmwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAorc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKKworU1VNTUFSWV9wZXJsLW1vZHVsZS1ycG0tZGV2ID0gIkRldmVsb3BtZW50IGNvbXBvbmVudHMgZm9yIHBlcmwgYmluZGluZ3MiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtLWRldiA9ICJEZXZlbG9wbWVudCBpdGVtcyBzdWNoIGFzIG1hbiBwYWdlcyBmb3IgdXNlIHdpdGggdGhlIFBlcmwgXAorbGFuZ3VhZ2UgYmluZGluZ3MuIgorCitIT01FUEFHRSA9ICJodHRwOi8vcnBtNS5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworREVQRU5EUyA9ICJsaWJwY3JlIGF0dHIgYWNsIHBvcHQgb3NzcC11dWlkIGZpbGUgYnlhY2MtbmF0aXZlIgorCitTID0gIiR7V09SS0RJUn0vcnBtIgorCisjIEFwcGx5IHZhcmlvdXMgZml4dXBzIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgQ1ZTIGVudmlyb25tZW50Citkb19maXh1cF91bnBhY2sgKCkgeworCWxuIC1zZiAuLi9zeWNrICR7U30vc3ljayB8fCA6CisJbG4gLXNmIC4uL2x1YSAke1N9L2x1YSB8fCA6CisJbG4gJHtTfS9ycG1xdi5jICR7U30vcnBtcXYuY2MgfHwgOgorfQorCithZGR0YXNrIGZpeHVwX3VucGFjayBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCisKKyMgVGhpcyByZWNpcGUgaXMgcmVhbGx5IGRlc2lnbmVkIGZvciBkZXZlbG9wbWVudC4uLiB0byBUcnkgb3V0IHRoZSBsYXRlc3QKKyMgY29tbXVuaXR5IHdvcmsgaW4gcHJvZ3Jlc3MuCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKKyMgcnBtMmNwaW8gaXMgYSBzaGVsbCBzY3JpcHQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJwbSBzcmMucnBtLiAgSXQgaXMgbmVlZGVkCisjIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIGRpc3RyaWJ1dGlvbiBTUlBNIGludG8gYSBmb3JtYXQgd2UgY2FuIGV4dHJhY3QuLi4KK1NSQ19VUkkgPSAiY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9cnBtIFwKKwkgICBjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1zeWNrIFwKKwkgICBjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1sdWEgXAorCSAgIGZpbGU6Ly9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGItcmVkdWNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtLWF1dG9nZW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbGlic3FsLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1zaG93cmMucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maWxlY2xhc3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tY2Fub25hcmNoLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLWxvb3Btc2cucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaCBcCisJICAgZmlsZTovL3B5dGhvbmRlcHMuc2ggXAorCSAgIGZpbGU6Ly9ycG1kZXBzLW9lY29yZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZXNvbHZlZGVwLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHVhLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW9zc3AtdXVpZC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2ggXAorCSAgIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbWF0Y2gucGF0Y2ggXAorCSAgIGZpbGU6Ly9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaCBcCisJICAgZmlsZTovL2RiY29udmVydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS11dWlkLWluY2x1ZGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXB5LWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybTIucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXNlZ3YucGF0Y2ggXAorCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiNS1vci1kYjYucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcnBtcGdwLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlYWxwYXRoLnBhdGNoIFwKKwkgICIKKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZSBwbGF0Zm9ybSBzY29yZSBkZWJ1Z2dpbmcKKyMgVGhpcyBpcyB1c2VmdWwgd2hlbiBpZGVudGlmeWluZyBpc3N1ZXMgd2l0aCBTbWFydCBiZWluZyB1bmFibGUKKyMgdG8gcHJvY2VzcyBjZXJ0YWluIHBhY2thZ2UgZmVlZHMuCisjU1JDX1VSSSArPSAiZmlsZTovL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vZGIvZGlzdC9hY2xvY2FsIC1JICR7U30vZGIvZGlzdC9hY2xvY2FsX2phdmEiCisKKyMgU3BlY2lmeSB0aGUgZGVmYXVsdCBycG0gbWFjcm9zIGluIHRlcm1zIG9mIGFkanVzdGFibGUgdmFyaWFibGVzCitycG1fbWFjcm9zID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5LyV7X3RhcmdldH0vbWFjcm9zOiV7X2V0Y3JwbX0vbWFjcm9zLio6JXtfZXRjcnBtfS9tYWNyb3M6JXtfZXRjcnBtfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorcnBtX21hY3Jvc19jbGFzcy1uYXRpdmVzZGsgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5L21hY3Jvczole191c3JsaWJycG19L3Bva3kvJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCisKKyMgc3FsaXRlIGx1YSB0Y2wgYXVnZWFzIG5zcyBnY3J5cHQgbmVvbiB4eiB4YXIga2V5dXRpbHMgcGVybCBzZWxpbnV4CisKKyMgTm90ZTogcGVybCBhbmQgc3FsaXRlIHcvbyBkYiBzcGVjaWZpZWQgZG9lcyBub3QgY3VycmVudGx5IHdvcmsuCisjICAgICAgIHRjbCwgYXVnZWFzLCBuc3MsIGdjcnlwdCwgeGFyIGFuZCBrZXl1dGlscyBzdXBwb3J0IGlzIHVudGVzdGVkLgorUEFDS0FHRUNPTkZJRyA/Pz0gImRiIGJ6aXAyIHpsaWIgYmVlY3J5cHQgb3BlbnNzbCBsaWJlbGYgcHl0aG9uIgorCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC14eiwtLXdpdGhvdXQteHoseHosIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbeGFyXSA9ICItLXdpdGgteGFyLC0td2l0aG91dC14YXIseGFyLCIKKworV0lUSF9QWVRIT04gPSAiIC0td2l0aC1weXRob249JHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1pbmMtZGlyPSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24tbGliLWRpcj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMgXAorCQktLXdpdGhvdXQtcHl0aG9uZW1iZWQiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiJHtXSVRIX1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24sIgorCisjIFBlcmwgbW9kdWxlcyBhcmUgbm90IGJ1aWx0LCBidXQgdGhleSBjb3VsZCBiZSBlbmFibGVkIGZhaXJseSBlYXNpbHkKKyMgdGhlIHBlcmwgbW9kdWxlIGNyZWF0aW9uIGFuZCBpbnN0YWxsYXRpb24gd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLgorIyAoY3VycmVudGx5IGhhcyBob3N0IHBlcmwgY29udGFtaW5hdGlvbiBpc3N1ZXMpCitXSVRIX1BFUkwgPSAiLS13aXRoLXBlcmwgLS13aXRob3V0LXBlcmxlbWJlZCAtLXdpdGhvdXQtcGVybC11cnBtIgorV0lUSE9VVF9QRVJMID0gIi0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLXVycG0iCitQQUNLQUdFQ09ORklHW3BlcmxdID0gIiR7V0lUSF9QRVJMfSwke1dJVEhPVVRfUEVSTH0scGVybCwiCisKKyMgVGhlIC0td2l0aC1kYnNxbCB3aWxsIG9ubHkgdGVsbCBSUE0gdG8gY2hlY2sgZm9yIHN1cHBvcnQsIGRiCisjIG1heSBvciBtYXkgbm90IGJlIGJ1aWx0IHcvIHRoZSBkYnNxbCBzdXBwb3J0LgorV0lUSF9EQiA9ICItLXdpdGgtZGIgLS13aXRoLWRic3FsIC0td2l0aG91dC1kYi10b29scy1pbnRlZ3JhdGVkIgorUEFDS0FHRUNPTkZJR1tkYl0gPSAiJHtXSVRIX0RCfSwtLXdpdGhvdXQtZGIsZGIsIgorCitQQUNLQUdFQ09ORklHW3NxbGl0ZV0gPSAiLS13aXRoLXNxbGl0ZSwtLXdpdGhvdXQtc3FsaXRlLHNxbGl0ZTMsIgorCitQQUNLQUdFQ09ORklHW2JlZWNyeXB0XSA9ICItLXdpdGgtYmVlY3J5cHQ9ZXh0ZXJuYWwsLS13aXRob3V0LWJlZWNyeXB0LGJlZWNyeXB0LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS13aXRoLW5zcywtLXdpdGhvdXQtbnNzLG5zcywiCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS13aXRoLWdjcnlwdCwtLXdpdGhvdXQtZ2NyeXB0LGdjcnlwdCwiCitQQUNLQUdFQ09ORklHW2tleXV0aWxzXSA9ICItLXdpdGgta2V5dXRpbHMsLS13aXRob3V0LWtleXV0aWxzLGtleXV0aWxzLCIKK1BBQ0tBR0VDT05GSUdbbGliZWxmXSA9ICItLXdpdGgtbGliZWxmLC0td2l0aG91dC1saWJlbGYsZWxmdXRpbHMsIgorCitXSVRIX1NFTElOVVggPSAiLS13aXRoLXNlbGludXggLS13aXRoLXNlcG9sIC0td2l0aC1zZW1hbmFnZSIKK1dJVEhPVVRfU0VMSU5VWCA9ICItLXdpdGhvdXQtc2VsaW51eCAtLXdpdGhvdXQtc2Vwb2wgLS13aXRob3V0LXNlbWFuYWdlIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIke1dJVEhfU0VMSU5VWH0sJHtXSVRIT1VUX1NFTElOVVh9LGxpYnNlbGludXgsIgorCitXSVRIX05FT04gPSAiLS13aXRoLW5lb24gLS13aXRoLWxpYnByb3h5IC0td2l0aC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorV0lUSE9VVF9ORU9OID0gIi0td2l0aG91dC1uZW9uIC0td2l0aG91dC1saWJwcm94eSAtLXdpdGhvdXQtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1BBQ0tBR0VDT05GSUdbbmVvbl0gPSAiJHtXSVRIX05FT059LCR7V0lUSE9VVF9ORU9OfSxuZW9uIGV4cGF0LCIKKworUEFDS0FHRUNPTkZJR1tsdWFdID0gIi0td2l0aC1sdWEsLS13aXRob3V0LWx1YSxleHBhdCwiCitQQUNLQUdFQ09ORklHW3RjbF0gPSAiLS13aXRoLXRjbCwtLXdpdGhvdXQtdGNsLHRjbCwiCisKK1BBQ0tBR0VDT05GSUdbYXVnZWFzXSA9ICItLXdpdGgtYXVnZWFzLC0td2l0aG91dC1hdWdlYXMsYXVnZWFzLCIKKworRVhUUkFfT0VDT05GICs9ICItLXZlcmJvc2UgXAorCQktLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisJCS0td2l0aC1maWxlIFwKKwkJLS13aXRoLXBhdGgtbWFnaWM9JXtfdXNybGlicnBtfS8uLi8uLi9zaGFyZS9taXNjL21hZ2ljLm1nYyBcCisJCS0td2l0aC1zeWNrPWludGVybmFsIFwKKwkJLS13aXRob3V0LXJlYWRsaW5lIFwKKwkJLS13aXRob3V0LWxpYnRhc24xIFwKKwkJLS13aXRob3V0LXBha2Nob2lzIFwKKwkJLS13aXRob3V0LWdudXRscyBcCisJCS0td2l0aC1wY3JlIFwKKwkJLS1lbmFibGUtdXRmOCBcCisJCS0td2l0aC11dWlkIFwKKwkJLS13aXRoLWF0dHIgXAorCQktLXdpdGgtYWNsIFwKKwkJLS13aXRoLXBvcHQ9ZXh0ZXJuYWwgXAorCQktLXdpdGgtcHRocmVhZHMgXAorCQktLXdpdGhvdXQtY3VkZiBcCisJCS0td2l0aG91dC1maWNsIFwKKwkJLS13aXRob3V0LWF0ZXJtIFwKKwkJLS13aXRob3V0LW5peCBcCisJCS0td2l0aG91dC1iYXNoIFwKKwkJLS13aXRob3V0LXJjIFwKKwkJLS13aXRob3V0LWpzIFwKKwkJLS13aXRob3V0LWdwc2VlIFwKKwkJLS13aXRob3V0LXJ1YnkgXAorCQktLXdpdGhvdXQtc3F1aXJyZWwgXAorCQktLXdpdGgtYnVpbGQtZXh0bGliZGVwIFwKKwkJLS13aXRoLWJ1aWxkLW1heGV4dGxpYmRlcCBcCisJCS0td2l0aG91dC12YWxncmluZCBcCisJCS0tZGlzYWJsZS1vcGVubXAgXAorCQktLWVuYWJsZS1idWlsZC1waWMgXAorCQktLWVuYWJsZS1idWlsZC12ZXJzaW9uc2NyaXB0IFwKKwkJLS1lbmFibGUtYnVpbGQtd2FybmluZ3MgXAorCQktLWVuYWJsZS1idWlsZC1kZWJ1ZyBcCisJCS0tZW5hYmxlLW1haW50YWluZXItbW9kZSBcCisJCS0td2l0aC1wYXRoLW1hY3Jvcz0ke3JwbV9tYWNyb3N9IFwKKwkJLS13aXRoLXBhdGgtbGliPSR7bGliZGlyfS9ycG0gXAorCQktLXdpdGgtYnVncmVwb3J0PWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIFwKKwkJLS1wcm9ncmFtLXByZWZpeD0gXAorCQlZQUNDPWJ5YWNjIgorCitDRkxBR1NfYXBwZW5kID0gIiAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiLWxydCAtbHB0aHJlYWQiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MgJHtQTn0tbGlicyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWNvbW1vbiAke1BOfS1idWlsZCBweXRob24tcnBtLWRiZyBweXRob24tcnBtLXN0YXRpY2RldiBweXRob24tcnBtLWRldiBweXRob24tcnBtIHBlcmwtbW9kdWxlLXJwbSBwZXJsLW1vZHVsZS1ycG0tZGV2ICR7UE59LWxvY2FsZSIKKworU09MSUJTID0gIjUuNC5zbyIKKworIyBCYXNlZCBvbiAlZmlsZXMgc2VjdGlvbiBpbiB0aGUgcnBtLnNwZWMKKworRklMRVNfJHtQTn0gPSAgIiR7YmluZGlyfS9ycG0gXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQkke2xpYmRpcn0vcnBtL3JwbS4qIFwKKwkJJHtsaWJkaXJ9L3JwbS90Z3BnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MgXAorCQkke2xpYmRpcn0vcnBtL3JwbXBvcHQgXAorCQkke2xpYmRpcn0vcnBtL3JwbTJjcGlvIFwKKwkJJHtsaWJkaXJ9L3JwbS92Y2hlY2sgXAorCQkke2xpYmRpcn0vcnBtL2hlbHBlcnMgXAorCQkke2xpYmRpcn0vcnBtL3FmIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcHVpbmZvLnlhbWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9tdHJlZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWtleSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXJlcG8gXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXNwZWNkdW1wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi93Z2V0IFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS93ZGogXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYiBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3dkaiBcCisJCSR7YmluZGlyfS9ycG0ucmVhbCBcCisJCSR7YmluZGlyfS9ycG1jb25zdGFudC5yZWFsIFwKKwkJJHtiaW5kaXJ9L3JwbTJjcGlvLnJlYWwgXAorCQkiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3JwbS8uZGVidWcgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi8uZGVidWcgXAorCQkiCisKK0ZJTEVTXyR7UE59LWNvbW1vbiA9ICIke2JpbmRpcn0vcnBtMmNwaW8gXAorCQkke2JpbmRpcn0vZ2VuZGlmZiBcCisJCSR7c3lzY29uZmRpcn0vcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9yZXBhY2thZ2UgXAorCQkiCisKK0ZJTEVTXyR7UE59LWxpYnMgPSAiJHtsaWJkaXJ9L2xpYnJwbS0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtZGItKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MtKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC0qLnNvIFwKKwkJIgorCitGSUxFU18ke1BOfS1idWlsZCA9ICIke3ByZWZpeH0vc3JjL3JwbSBcCisJCSR7YmluZGlyfS9ycG1idWlsZCBcCisJCSR7YmluZGlyfS9ycG1idWlsZC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9icnAtKiBcCisJCSR7bGliZGlyfS9ycG0vY2hlY2stZmlsZXMgXAorCQkke2xpYmRpcn0vcnBtL2Nyb3NzLWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLWRlYnVnaW5mby5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1sYW5nLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3YucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcHJvdmlkZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1yZXEucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxdWlyZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZ2V0cG8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2h0dHAucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9qYXZhZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXByb3ZpZGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tb25vLWZpbmQtcmVxdWlyZXMgXAorCQkke2xpYmRpcn0vcnBtL2V4ZWN1dGFibGVkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWJ0b29sZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vb3NnaWRlcHMucGwgXAorCQkke2xpYmRpcn0vcnBtL3BlcmxkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BlcmwucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9waHAucHJvdiBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGtnY29uZmlnZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jYWNoZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0LnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9hYmktY29tcGxpYW5jZS1jaGVja2VyLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1hdXRvdGVzdC5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Nocm9vdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2NwIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGJzcWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9maW5kIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vaW5zdGFsbC1zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ta2luc3RhbGxkaXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhYyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3NxbGl0ZTMgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2NtYWtlIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9qYXZhIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9saWJ0b29sIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9tYW5kcml2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbW9ubyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGVybCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGhwIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9wa2djb25maWcgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3B5dGhvbiBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcnVieSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvc2VsaW51eCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvdGNsIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MucnBtYnVpbGQgXAorCQkke2xpYmRpcn0vcnBtL3VfcGtnLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzMi5zaCBcCisJCSR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkJIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1idWlsZCA9ICJmaWxlIGJhc2ggcGVybCIKKworUkRFUEVORFNfcHl0aG9uLXJwbSA9ICIke1BOfSIKKworRklMRVNfcHl0aG9uLXJwbS1kYmcgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vLmRlYnVnL18qIgorRklMRVNfcHl0aG9uLXJwbS1kZXYgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5sYSIKK0ZJTEVTX3B5dGhvbi1ycG0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLyouYSIKK0ZJTEVTX3B5dGhvbi1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0iCisKK0ZJTEVTX3BlcmwtbW9kdWxlLXJwbSA9ICIke2xpYmRpcn0vcGVybC8qLyogXAorCQkiCisKK0ZJTEVTX3BlcmwtbW9kdWxlLXJwbS1kZXYgPSAiJHtwcmVmaXh9L3NoYXJlL21hbi9tYW4zL1JQTSogXAorCQkiCisKK1JERVBFTkRTXyR7UE59LWRldiArPSAiYmFzaCIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vcnBtIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5sYSBcCisJCSR7bGliZGlyfS9saWJycG0uc28gXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQubGEgXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuc28gXAorCQkke2xpYmRpcn0vbGlicnBtZGIubGEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtaW8uc28gXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5sYSBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLnNvIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmxhIFwKKwkJJHtsaWJkaXJ9L3BrZ2NvbmZpZy9ycG0ucGMgXAorCQkke2xpYmRpcn0vcnBtL3JwbWRiX2xvYWRjdnQgXAorCQkiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIgXAorCQkke2xpYmRpcn0vbGlicnBtLmEgXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuYSBcCisJCSR7bGliZGlyfS9saWJycG1kYi5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmEgXAorCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEuYSBcCisJCSIKKworZG9fY29uZmlndXJlKCkgeworCSMgRGlzYWJsZSB0ZXN0cyEKKwllY2hvICJhbGw6IiA+ICR7U30vdGVzdHMvTWFrZWZpbGUuYW0KKwlzZWQgLWUgJ3MvQF9fTUtESVJfUEAvJXtfX21rZGlyfSAtcC8nIC1pICR7U30vbWFjcm9zL21hY3Jvcy5pbgorCisJKCBjZCAke1N9OyAke1N9L2F1dG9nZW4uc2ggKQorCisJIyBOQVNUWSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgZmlsZXMgdGhlIHJpZ2h0IHBrZy1jb25maWcgZmlsZS4uLgorCXNlZCAtZSAncy9wa2ctY29uZmlnIC0tZXhpc3RzIHV1aWQvcGtnLWNvbmZpZyAtLWV4aXN0cyBvc3NwLXV1aWQvZycgXAorCSAgICAtZSAncy9wa2ctY29uZmlnIHV1aWQvcGtnLWNvbmZpZyBvc3NwLXV1aWQvZycgLWkgJHtTfS9jb25maWd1cmUKKworCSggY2QgJHtTfS9zeWNrIDsgc2V0ICtlIDsgcm0gLS0gLWwqIDsgbWFrZSBkaXN0Y2xlYW4gKSB8fCA6CisKKwlleHBvcnQgdmFycHJlZml4PSR7bG9jYWxzdGF0ZWRpcn0KKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAncywlX19zY3JpcHRsZXRfcmVxdWlyZXMsIyUlX19zY3JpcHRsZXRfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisJc2VkIC1pIC1lICdzLCVfX3BlcmxfcHJvdmlkZXMsIyUlX19wZXJsX3Byb3ZpZGVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgorCXNlZCAtaSAtZSAncywlX19wZXJsX3JlcXVpcmVzLCMlJV9fcGVybF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzW15fXS4qLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlcyAwLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncyxeIyVfb3BlbmFsbF9iZWZvcmVfY2hyb290LiosJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3RcdDEsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisKKwkjIEVuYWJsZSBEZWJpYW4gc3R5bGUgYXJiaXRyYXJ5IHRhZ3MuLi4KKwlzZWQgLWkgLWUgJ3MsJV9hcmJpdHJhcnlfdGFnc1teX10uKiwlX2FyYml0cmFyeV90YWdzICV7X2FyYml0cmFyeV90YWdzX2RlYmlhbn0sJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9weXRob25kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcGVyZmlsZV9ycG1kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKKworCSMgUmVtb3ZlIHVucGFja2FnZWQgZmlsZXMgKGJhc2VkIG9uIGxpc3QgaW4gcnBtLnNwZWMpCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3tTcGVjZmlsZS5wbSxjcGFuZmx1dGUsY3BhbmZsdXRlMixycG1kaWZmLHJwbWRpZmYuY2dpLHNxbC5wcm92LHNxbC5yZXEsdGNsLnJlcSx0cnBtfQorCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1jYWNoZS44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtZ3JhcGguOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtZ3JhcGguOCoKKwlybSAtcmYgJHtEfS8ke21hbmRpcn0ve2ZyLGtvfQorCisJcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L3BvcHQuaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnBvcHQuKgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9wb3B0LnBjCisJcm0gLWYgJHtEfS8ke2RhdGFkaXJ9L2xvY2FsZS8qL0xDX01FU1NBR0VTL3BvcHQubW8KKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4zL3BvcHQuMworCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS94YXIuMSoKKwlybSAtZiAke0R9LyR7YmluZGlyfS94YXIKKwlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L3hhcgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnhhcioKKworCXJtIC1mICR7RH0vJHtiaW5kaXJ9L2x6KgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VubHptYQorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VueHoKKwlybSAtZiAke0R9LyR7YmluZGlyfS94eioKKwlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L2x6bWEqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS9seiouMQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJsem1hKgorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyoue2EsbGF9CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLnthLGxhfQorCisJI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZiAtYSBcKCAtbmFtZSBwZXJsbG9jYWwucG9kIC1vIC1uYW1lIC5wYWNrbGlzdCBcCisJIwktbyBcKCAtbmFtZSAnKi5icycgLWEgLWVtcHR5IFwpIFwpIC1leGVjIHJtIC1mIHt9ICc7JworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGQgLWRlcHRoIC1leGVjIHJtZGlyIHt9IDI+L2Rldi9udWxsICc7JworCisJIyBXZSBkb24ndCB3YW50IHRoZSBkZWZhdWx0IG1hY3JvIHNldAorCXJtIC1yZiAke0R9LyR7bGliZGlyfS9ycG0ve2lbMzQ1Nl04NiosYXRobG9uKixwZW50aXVtKix4ODZfNjQqLGFscGhhKixzcGFyYyosaWE2NCoscHBjKixzMzkwKixhcm12WzM0XVtsYl0qLGFybXZbMzQ1XSosbWlwcyosbm9hcmNoKn0KKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9kYmNvbnZlcnQuc2gKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9saWJzcWxkYi4qCisKKwkjIFdlIGRvbid0IHdhbnQsIG5vciBuZWVkIHRoZSBNYW5kcml2YSBtdWx0aWFyY2ggaXRlbXMKKwlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2gKKwlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtcGxhdGZvcm0KKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vY2hlY2stbXVsdGlhcmNoLWZpbGVzCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21rbXVsdGlhcmNoCisJcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L211bHRpYXJjaC1kaXNwYXRjaC5oCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ3N0cmVhbWVyLnNoCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dlbV9oZWxwZXIucmIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcnVieWdlbXMucmIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0va21vZC1kZXBzLnNoCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmVnZ3MucHkKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQva2VybmVsCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2dzdHJlYW1lcgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vbWdvCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kYmNvbnZlcnQKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3BvbTJzcGVjCisKKwlybSAtcmYgJHtEfS92YXIvbGliL3dkaiAke0R9L3Zhci9jYWNoZS93ZGoKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktY2hlY2tlci5wbAorCit9CisKK2FkZF9uYXRpdmVfd3JhcHBlcigpIHsKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtMmNwaW8gXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1idWlsZCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKwlmb3IgcnBtX2JpbmFyeSBpbiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3JwbSogJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQ7IGRvCisgICAgICAgIAljcmVhdGVfd3JhcHBlciAkcnBtX2JpbmFyeSBcCisJCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCWRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40LjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5YTRiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40LjE0LmJiCkBAIC0wLDAgKzEsNTE2IEBACitTVU1NQVJZID0gIlRoZSBSUE0gcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIGlzIGEgcG93ZXJmdWwgY29tbWFuZCBsaW5lIGRyaXZlbiBcCitwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIGNhcGFibGUgb2YgaW5zdGFsbGluZywgdW5pbnN0YWxsaW5nLCBcCit2ZXJpZnlpbmcsIHF1ZXJ5aW5nLCBhbmQgdXBkYXRpbmcgc29mdHdhcmUgcGFja2FnZXMuIEVhY2ggc29mdHdhcmUgXAorcGFja2FnZSBjb25zaXN0cyBvZiBhbiBhcmNoaXZlIG9mIGZpbGVzIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgXAordGhlIHBhY2thZ2UgbGlrZSBpdHMgdmVyc2lvbiwgYSBkZXNjcmlwdGlvbiwgZXRjLiIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiNS40LjE1IGhhcyBhIHBhY2thZ2UgZGF0YWJhc2UgaXNzdWU6IGh0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDE1LUF1Z3VzdC8xMDkxODcuaHRtbCIKKworU1VNTUFSWV8ke1BOfS1saWJzID0gIkxpYnJhcmllcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWxpYnMgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gc2hhcmVkIGxpYnJhcmllcy4iCisKK1NVTU1BUllfJHtQTn0tZGV2ID0gIkRldmVsb3BtZW50IGZpbGVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLiBUaGVzZSBcCitkZXZlbG9wbWVudCBmaWxlcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgcHJvZ3JhbXMgdGhhdCBcCittYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyBhbmQgZGF0YWJhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW50ZW5kZWQgdG8gXAorc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgZ3JhcGhpY2FsIHBhY2thZ2UgbWFuYWdlcnMgb3IgYW55IFwKK290aGVyIHRvb2xzIHRoYXQgbmVlZCBhbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgUlBNIHBhY2thZ2VzIGluIG9yZGVyIFwKK3RvIGZ1bmN0aW9uLiIKKworU1VNTUFSWV8ke1BOfS1jb21tb24gPSAiQ29tbW9uIFJQTSBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBhbmQgY29uZmlndXJhdGlvbiIKK0RFU0NSSVBUSU9OXyR7UE59LWNvbW1vbiA9ICJUaGUgcnBtLWNvbW1vbiBwYWNrYWdlIGNvbnRhaW5zIHBhdGhzLCBzY3JpcHRzLCBkb2N1bWVudGF0aW9uIFwKK2FuZCBjb25maWd1cmF0aW9uIGNvbW1vbiBiZXR3ZWVuIFJQTSBQYWNrYWdlIE1hbmFnZXIuIgorCitTVU1NQVJZXyR7UE59LWJ1aWxkID0gIlNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgdXNlZCB0byBidWlsZCBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWJ1aWxkID0gIlRoZSBycG0tYnVpbGQgcGFja2FnZWMgb250YWlucyB0aGUgc2NyaXB0cyBhbmQgZXhlY3V0YWJsZSBwcm9ncmFtcyBcCit0aGF0IGFyZSB1c2VkIHRvIGJ1aWxkIHBhY2thZ2VzIHVzaW5nIHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV9weXRob24tcnBtID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbnVwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcHl0aG9uLXJwbSA9ICJUaGUgcnBtLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK1NVTU1BUllfcGVybC1tb2R1bGUtcnBtID0gIlBlcmwgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3BlcmwtbW9kdWxlcy1ycG0gPSAiVGhlIHBlcmwtbW9kdWxlcy1ycG0gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFBlcmwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAorc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3JwbTUub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK0RFUEVORFMgPSAibGlicGNyZSBhdHRyIGFjbCBwb3B0IG9zc3AtdXVpZCBmaWxlIGJ5YWNjLW5hdGl2ZSIKKworIyBycG0yY3BpbyBpcyBhIHNoZWxsIHNjcmlwdCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgcnBtIHNyYy5ycG0uICBJdCBpcyBuZWVkZWQKKyMgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgZGlzdHJpYnV0aW9uIFNSUE0gaW50byBhIGZvcm1hdCB3ZSBjYW4gZXh0cmFjdC4uLgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnJwbTUub3JnL2ZpbGVzL3JwbS9ycG0tNS40L3JwbS01LjQuMTQtMC4yMDEzMTAyNC5zcmMucnBtO2V4dHJhY3Q9cnBtLTUuNC4xNC50YXIuZ3ogXAorCSAgIGZpbGU6Ly9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGItcmVkdWNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtLWF1dG9nZW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbGlic3FsLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1zaG93cmMucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maWxlY2xhc3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tY2Fub25hcmNoLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLWxvb3Btc2cucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaCBcCisJICAgZmlsZTovL3B5dGhvbmRlcHMuc2ggXAorCSAgIGZpbGU6Ly9ycG1kZXBzLW9lY29yZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZXNvbHZlZGVwLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHVhLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW9zc3AtdXVpZC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2ggXAorCSAgIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbWF0Y2gucGF0Y2ggXAorCSAgIGZpbGU6Ly9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaCBcCisJICAgZmlsZTovL2RiY29udmVydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS11dWlkLWluY2x1ZGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXB5LWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybTIucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXNlZ3YucGF0Y2ggXAorCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWZpeC1sb2dpby1jcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYjUtb3ItZGI2LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1xdl9jY19iX2dvbmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVhbHBhdGgucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2ggXAorCSAgIGZpbGU6Ly9uby1sZGZsYWdzLWluLXBrZ2NvbmZpZy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sdWEtZml4LXByaW50LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaCBcCisJICAiCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUgcGxhdGZvcm0gc2NvcmUgZGVidWdnaW5nCisjIFRoaXMgaXMgdXNlZnVsIHdoZW4gaWRlbnRpZnlpbmcgaXNzdWVzIHdpdGggU21hcnQgYmVpbmcgdW5hYmxlCisjIHRvIHByb2Nlc3MgY2VydGFpbiBwYWNrYWdlIGZlZWRzLgorI1NSQ19VUkkgKz0gImZpbGU6Ly9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNTA5M2QzOTlhMGI1ZDEzNDJkMjQ5MDBhOTFiMzQ3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NzZlM2FiNDFmNzJlM2I1MDRlMDQxMDljZmI1NjVhMzAwNzQyZjU2YTdkYTA4NGYyMDIwMTNiMzBlZWFlNDY3IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK2FjcGF0aHMgPSAiLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWwgLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWxfamF2YSIKKworIyBTcGVjaWZ5IHRoZSBkZWZhdWx0IHJwbSBtYWNyb3MgaW4gdGVybXMgb2YgYWRqdXN0YWJsZSB2YXJpYWJsZXMKK3JwbV9tYWNyb3MgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99LyV7X3RhcmdldH0vbWFjcm9zOiV7X2V0Y3JwbX0vbWFjcm9zLio6JXtfZXRjcnBtfS9tYWNyb3M6JXtfZXRjcnBtfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlc2RrID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKKworIyBzcWxpdGUgbHVhIHRjbCBhdWdlYXMgbnNzIGdjcnlwdCBuZW9uIHh6IHhhciBrZXl1dGlscyBwZXJsIHNlbGludXgKKworIyBOb3RlOiBwZXJsIGFuZCBzcWxpdGUgdy9vIGRiIHNwZWNpZmllZCBkb2VzIG5vdCBjdXJyZW50bHkgd29yay4KKyMgICAgICAgdGNsLCBhdWdlYXMsIG5zcywgZ2NyeXB0LCB4YXIgYW5kIGtleXV0aWxzIHN1cHBvcnQgaXMgdW50ZXN0ZWQuCitQQUNLQUdFQ09ORklHID8/PSAiZGIgYnppcDIgemxpYiBiZWVjcnlwdCBvcGVuc3NsIGxpYmVsZiBweXRob24iCisKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0td2l0aC1iemlwMiwtLXdpdGhvdXQtYnppcDIsYnppcDIsIgorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLXh6LC0td2l0aG91dC14eix4eiwiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIsIgorUEFDS0FHRUNPTkZJR1t4YXJdID0gIi0td2l0aC14YXIsLS13aXRob3V0LXhhcix4YXIsIgorCitXSVRIX1BZVEhPTiA9ICIgLS13aXRoLXB5dGhvbj0ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorCQktLXdpdGgtcHl0aG9uLWluYy1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1saWItZGlyPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcyBcCisJCS0td2l0aG91dC1weXRob25lbWJlZCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIke1dJVEhfUFlUSE9OfSwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbiwiCisKKyMgUGVybCBtb2R1bGVzIGFyZSBub3QgYnVpbHQsIGJ1dCB0aGV5IGNvdWxkIGJlIGVuYWJsZWQgZmFpcmx5IGVhc2lseQorIyB0aGUgcGVybCBtb2R1bGUgY3JlYXRpb24gYW5kIGluc3RhbGxhdGlvbiB3b3VsZCBuZWVkIHRvIGJlIHBhdGNoZWQuCisjIChjdXJyZW50bHkgaGFzIGhvc3QgcGVybCBjb250YW1pbmF0aW9uIGlzc3VlcykKK1dJVEhfUEVSTCA9ICItLXdpdGgtcGVybCAtLXdpdGhvdXQtcGVybGVtYmVkIC0td2l0aG91dC1wZXJsLXVycG0iCitXSVRIT1VUX1BFUkwgPSAiLS13aXRob3V0LXBlcmwgLS13aXRob3V0LXBlcmwtdXJwbSIKK1BBQ0tBR0VDT05GSUdbcGVybF0gPSAiJHtXSVRIX1BFUkx9LCR7V0lUSE9VVF9QRVJMfSxwZXJsLCIKKworIyBUaGUgLS13aXRoLWRic3FsIHdpbGwgb25seSB0ZWxsIFJQTSB0byBjaGVjayBmb3Igc3VwcG9ydCwgZGIKKyMgbWF5IG9yIG1heSBub3QgYmUgYnVpbHQgdy8gdGhlIGRic3FsIHN1cHBvcnQuCitXSVRIX0RCID0gIi0td2l0aC1kYiAtLXdpdGgtZGJzcWwgLS13aXRob3V0LWRiLXRvb2xzLWludGVncmF0ZWQiCitQQUNLQUdFQ09ORklHW2RiXSA9ICIke1dJVEhfREJ9LC0td2l0aG91dC1kYixkYiwiCisKK1BBQ0tBR0VDT05GSUdbc3FsaXRlXSA9ICItLXdpdGgtc3FsaXRlLC0td2l0aG91dC1zcWxpdGUsc3FsaXRlMywiCisKK1BBQ0tBR0VDT05GSUdbYmVlY3J5cHRdID0gIi0td2l0aC1iZWVjcnlwdD1leHRlcm5hbCwtLXdpdGhvdXQtYmVlY3J5cHQsYmVlY3J5cHQsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKK1BBQ0tBR0VDT05GSUdbbnNzXSA9ICItLXdpdGgtbnNzLC0td2l0aG91dC1uc3MsbnNzLCIKK1BBQ0tBR0VDT05GSUdbZ2NyeXB0XSA9ICItLXdpdGgtZ2NyeXB0LC0td2l0aG91dC1nY3J5cHQsZ2NyeXB0LCIKK1BBQ0tBR0VDT05GSUdba2V5dXRpbHNdID0gIi0td2l0aC1rZXl1dGlscywtLXdpdGhvdXQta2V5dXRpbHMsa2V5dXRpbHMsIgorUEFDS0FHRUNPTkZJR1tsaWJlbGZdID0gIi0td2l0aC1saWJlbGYsLS13aXRob3V0LWxpYmVsZixlbGZ1dGlscywiCisKK1dJVEhfU0VMSU5VWCA9ICItLXdpdGgtc2VsaW51eCAtLXdpdGgtc2Vwb2wgLS13aXRoLXNlbWFuYWdlIgorV0lUSE9VVF9TRUxJTlVYID0gIi0td2l0aG91dC1zZWxpbnV4IC0td2l0aG91dC1zZXBvbCAtLXdpdGhvdXQtc2VtYW5hZ2UiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiR7V0lUSF9TRUxJTlVYfSwke1dJVEhPVVRfU0VMSU5VWH0sbGlic2VsaW51eCwiCisKK1dJVEhfTkVPTiA9ICItLXdpdGgtbmVvbiAtLXdpdGgtbGlicHJveHkgLS13aXRoLWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCitXSVRIT1VUX05FT04gPSAiLS13aXRob3V0LW5lb24gLS13aXRob3V0LWxpYnByb3h5IC0td2l0aG91dC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorUEFDS0FHRUNPTkZJR1tuZW9uXSA9ICIke1dJVEhfTkVPTn0sJHtXSVRIT1VUX05FT059LG5lb24gZXhwYXQsIgorCitQQUNLQUdFQ09ORklHW2x1YV0gPSAiLS13aXRoLWx1YSwtLXdpdGhvdXQtbHVhLGV4cGF0LCIKK1BBQ0tBR0VDT05GSUdbdGNsXSA9ICItLXdpdGgtdGNsLC0td2l0aG91dC10Y2wsdGNsLCIKKworUEFDS0FHRUNPTkZJR1thdWdlYXNdID0gIi0td2l0aC1hdWdlYXMsLS13aXRob3V0LWF1Z2VhcyxhdWdlYXMsIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tdmVyYm9zZSBcCisJCS0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IFwKKwkJLS13aXRoLWZpbGUgXAorCQktLXdpdGgtcGF0aC1tYWdpYz0le191c3JsaWJycG19Ly4uLy4uL3NoYXJlL21pc2MvbWFnaWMubWdjIFwKKwkJLS13aXRoLXN5Y2s9aW50ZXJuYWwgXAorCQktLXdpdGhvdXQtcmVhZGxpbmUgXAorCQktLXdpdGhvdXQtbGlidGFzbjEgXAorCQktLXdpdGhvdXQtcGFrY2hvaXMgXAorCQktLXdpdGhvdXQtZ251dGxzIFwKKwkJLS13aXRoLXBjcmUgXAorCQktLWVuYWJsZS11dGY4IFwKKwkJLS13aXRoLXV1aWQgXAorCQktLXdpdGgtYXR0ciBcCisJCS0td2l0aC1hY2wgXAorCQktLXdpdGgtcG9wdD1leHRlcm5hbCBcCisJCS0td2l0aC1wdGhyZWFkcyBcCisJCS0td2l0aG91dC1jdWRmIFwKKwkJLS13aXRob3V0LWZpY2wgXAorCQktLXdpdGhvdXQtYXRlcm0gXAorCQktLXdpdGhvdXQtbml4IFwKKwkJLS13aXRob3V0LWJhc2ggXAorCQktLXdpdGhvdXQtcmMgXAorCQktLXdpdGhvdXQtanMgXAorCQktLXdpdGhvdXQtZ3BzZWUgXAorCQktLXdpdGhvdXQtcnVieSBcCisJCS0td2l0aG91dC1zcXVpcnJlbCBcCisJCS0td2l0aC1idWlsZC1leHRsaWJkZXAgXAorCQktLXdpdGgtYnVpbGQtbWF4ZXh0bGliZGVwIFwKKwkJLS13aXRob3V0LXZhbGdyaW5kIFwKKwkJLS1kaXNhYmxlLW9wZW5tcCBcCisJCS0tZW5hYmxlLWJ1aWxkLXBpYyBcCisJCS0tZW5hYmxlLWJ1aWxkLXZlcnNpb25zY3JpcHQgXAorCQktLWVuYWJsZS1idWlsZC13YXJuaW5ncyBcCisJCS0tZW5hYmxlLWJ1aWxkLWRlYnVnIFwKKwkJLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIFwKKwkJLS13aXRoLXBhdGgtbWFjcm9zPSR7cnBtX21hY3Jvc30gXAorCQktLXdpdGgtcGF0aC1saWI9JHtsaWJkaXJ9L3JwbSBcCisJCS0td2l0aC1idWdyZXBvcnQ9aHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcgXAorCQktLXByb2dyYW0tcHJlZml4PSBcCisJCVlBQ0M9YnlhY2MiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FIgorCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICItbHJ0IC1scHRocmVhZCIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59ICR7UE59LWRvYyAke1BOfS1saWJzICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tY29tbW9uICR7UE59LWJ1aWxkIHB5dGhvbi1ycG0gcGVybC1tb2R1bGUtcnBtICR7UE59LWxvY2FsZSIKKworU09MSUJTID0gIjUuNC5zbyIKKworIyBCYXNlZCBvbiAlZmlsZXMgc2VjdGlvbiBpbiB0aGUgcnBtLnNwZWMKKworRklMRVNfJHtQTn0gPSAgIiR7YmluZGlyfS9ycG0gXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQkke2xpYmRpcn0vcnBtL3JwbS4qIFwKKwkJJHtsaWJkaXJ9L3JwbS90Z3BnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MgXAorCQkke2xpYmRpcn0vcnBtL3JwbXBvcHQgXAorCQkke2xpYmRpcn0vcnBtL3JwbTJjcGlvIFwKKwkJJHtsaWJkaXJ9L3JwbS92Y2hlY2sgXAorCQkke2xpYmRpcn0vcnBtL2hlbHBlcnMgXAorCQkke2xpYmRpcn0vcnBtL3FmIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcHVpbmZvLnlhbWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9tdHJlZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWtleSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXJlcG8gXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXNwZWNkdW1wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi93Z2V0IFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS93ZGogXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYiBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3dkaiBcCisJCSR7YmluZGlyfS9ycG0ucmVhbCBcCisJCSR7YmluZGlyfS9ycG1jb25zdGFudC5yZWFsIFwKKwkJJHtiaW5kaXJ9L3JwbTJjcGlvLnJlYWwgXAorCQkiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3JwbS8uZGVidWcgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi8uZGVidWcgXAorCQkke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8uZGVidWcvXyogXAorCQkiCisKK0ZJTEVTXyR7UE59LWNvbW1vbiA9ICIke2JpbmRpcn0vcnBtMmNwaW8gXAorCQkke2JpbmRpcn0vZ2VuZGlmZiBcCisJCSR7c3lzY29uZmRpcn0vcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9yZXBhY2thZ2UgXAorCQkiCisKK0ZJTEVTXyR7UE59LWxpYnMgPSAiJHtsaWJkaXJ9L2xpYnJwbS0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtZGItKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MtKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC0qLnNvIFwKKwkJIgorCitGSUxFU18ke1BOfS1idWlsZCA9ICIke3ByZWZpeH0vc3JjL3JwbSBcCisJCSR7YmluZGlyfS9ycG1idWlsZCBcCisJCSR7YmluZGlyfS9ycG1idWlsZC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9icnAtKiBcCisJCSR7bGliZGlyfS9ycG0vY2hlY2stZmlsZXMgXAorCQkke2xpYmRpcn0vcnBtL2Nyb3NzLWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLWRlYnVnaW5mby5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1sYW5nLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3YucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcHJvdmlkZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1yZXEucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxdWlyZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZ2V0cG8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2h0dHAucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9qYXZhZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXByb3ZpZGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tb25vLWZpbmQtcmVxdWlyZXMgXAorCQkke2xpYmRpcn0vcnBtL2V4ZWN1dGFibGVkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWJ0b29sZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vb3NnaWRlcHMucGwgXAorCQkke2xpYmRpcn0vcnBtL3BlcmxkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BlcmwucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9waHAucHJvdiBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGtnY29uZmlnZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jYWNoZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0LnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9hYmktY29tcGxpYW5jZS1jaGVja2VyLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1hdXRvdGVzdC5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Nocm9vdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2NwIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGJzcWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9maW5kIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vaW5zdGFsbC1zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ta2luc3RhbGxkaXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhYyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3NxbGl0ZTMgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2NtYWtlIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9qYXZhIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9saWJ0b29sIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9tYW5kcml2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbW9ubyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGVybCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGhwIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9wa2djb25maWcgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3B5dGhvbiBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcnVieSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvc2VsaW51eCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvdGNsIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MucnBtYnVpbGQgXAorCQkke2xpYmRpcn0vcnBtL3VfcGtnLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzMi5zaCBcCisJCSR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkJIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1idWlsZCA9ICJmaWxlIGJhc2ggcGVybCIKKworUkRFUEVORFNfcHl0aG9uLXJwbSA9ICIke1BOfSIKKworRklMRVNfcHl0aG9uLXJwbSA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbSIKK1BST1ZJREVTICs9ICJweXRob24tcnBtIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0gPSAiJHtsaWJkaXJ9L3BlcmwvKi8qIFwKKwkJIgorCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9L3JwbSBcCisJCSR7bGliZGlyfS9saWJycG0ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MubGEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5zbyBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5sYSBcCisJCSR7bGliZGlyfS9wa2djb25maWcvcnBtLnBjIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1kYl9sb2FkY3Z0IFwKKwkJIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MuYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5hIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmEgXAorCQkke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8qLmEgXAorCQkiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIERpc2FibGUgdGVzdHMhCisJZWNobyAiYWxsOiIgPiAke1N9L3Rlc3RzL01ha2VmaWxlLmFtCisJc2VkIC1lICdzL0BfX01LRElSX1BALyV7X19ta2Rpcn0gLXAvJyAtaSAke1N9L21hY3Jvcy9tYWNyb3MuaW4KKworCSggY2QgJHtTfTsgJHtTfS9hdXRvZ2VuLnNoICkKKworCSMgTkFTVFkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIGZpbGVzIHRoZSByaWdodCBwa2ctY29uZmlnIGZpbGUuLi4KKwlzZWQgLWUgJ3MvcGtnLWNvbmZpZyAtLWV4aXN0cyB1dWlkL3BrZy1jb25maWcgLS1leGlzdHMgb3NzcC11dWlkL2cnIFwKKwkgICAgLWUgJ3MvcGtnLWNvbmZpZyB1dWlkL3BrZy1jb25maWcgb3NzcC11dWlkL2cnIC1pICR7U30vY29uZmlndXJlCisKKwkoIGNkICR7U30vc3ljayA7IHNldCArZSA7IHJtIC0tIC1sKiA7IG1ha2UgZGlzdGNsZWFuICkgfHwgOgorCisJZXhwb3J0IHZhcnByZWZpeD0ke2xvY2Fsc3RhdGVkaXJ9CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MsJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCMlJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncywlX19wZXJsX3Byb3ZpZGVzLCMlJV9fcGVybF9wcm92aWRlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9yZXF1aXJlcywjJSVfX3BlcmxfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlc1teX10uKiwlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXMgMCwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsXiMlX29wZW5hbGxfYmVmb3JlX2Nocm9vdC4qLCVfb3BlbmFsbF9iZWZvcmVfY2hyb290XHQxLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJIyBFbmFibGUgRGViaWFuIHN0eWxlIGFyYml0cmFyeSB0YWdzLi4uCisJc2VkIC1pIC1lICdzLCVfYXJiaXRyYXJ5X3RhZ3NbXl9dLiosJV9hcmJpdHJhcnlfdGFncyAle19hcmJpdHJhcnlfdGFnc19kZWJpYW59LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BlcmZpbGVfcnBtZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCisKKwkjIFJlbW92ZSB1bnBhY2thZ2VkIGZpbGVzIChiYXNlZCBvbiBsaXN0IGluIHJwbS5zcGVjKQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS97U3BlY2ZpbGUucG0sY3BhbmZsdXRlLGNwYW5mbHV0ZTIscnBtZGlmZixycG1kaWZmLmNnaSxzcWwucHJvdixzcWwucmVxLHRjbC5yZXEsdHJwbX0KKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWdyYXBoLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWdyYXBoLjgqCisJcm0gLXJmICR7RH0vJHttYW5kaXJ9L3tmcixrb30KKworCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9wb3B0LmgKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJwb3B0LioKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvcG9wdC5wYworCXJtIC1mICR7RH0vJHtkYXRhZGlyfS9sb2NhbGUvKi9MQ19NRVNTQUdFUy9wb3B0Lm1vCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMy9wb3B0LjMKKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEveGFyLjEqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veGFyCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS94YXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJ4YXIqCisKKwlybSAtZiAke0R9LyR7YmluZGlyfS9seioKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bmx6bWEKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bnh6CisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veHoqCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS9sem1hKgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEvbHoqLjEKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlibHptYSoKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLnthLGxhfQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi57YSxsYX0KKworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGYgLWEgXCggLW5hbWUgcGVybGxvY2FsLnBvZCAtbyAtbmFtZSAucGFja2xpc3QgXAorCSMJLW8gXCggLW5hbWUgJyouYnMnIC1hIC1lbXB0eSBcKSBcKSAtZXhlYyBybSAtZiB7fSAnOycKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBkIC1kZXB0aCAtZXhlYyBybWRpciB7fSAyPi9kZXYvbnVsbCAnOycKKworCSMgV2UgZG9uJ3Qgd2FudCB0aGUgZGVmYXVsdCBtYWNybyBzZXQKKwlybSAtcmYgJHtEfS8ke2xpYmRpcn0vcnBtL3tpWzM0NTZdODYqLGF0aGxvbioscGVudGl1bSoseDg2XzY0KixhbHBoYSosc3BhcmMqLGlhNjQqLHBwYyosczM5MCosYXJtdlszNF1bbGJdKixhcm12WzM0NV0qLG1pcHMqLG5vYXJjaCp9CisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZGJjb252ZXJ0LnNoCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbGlic3FsZGIuKgorCisJIyBXZSBkb24ndCB3YW50LCBub3IgbmVlZCB0aGUgTWFuZHJpdmEgbXVsdGlhcmNoIGl0ZW1zCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLXBsYXRmb3JtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2NoZWNrLW11bHRpYXJjaC1maWxlcworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ta211bHRpYXJjaAorCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2guaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dzdHJlYW1lci5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nZW1faGVscGVyLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3J1YnlnZW1zLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2ttb2QtZGVwcy5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25lZ2dzLnB5CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2tlcm5lbAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9nc3RyZWFtZXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL21nbworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGJjb252ZXJ0CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9wb20yc3BlYworCisJcm0gLXJmICR7RH0vdmFyL2xpYi93ZGogJHtEfS92YXIvY2FjaGUvd2RqCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWNoZWNrZXIucGwKKworfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbSBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtYnVpbGQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1jb25zdGFudCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisJZm9yIHJwbV9iaW5hcnkgaW4gJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9ycG0qICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0OyBkbworICAgICAgICAJY3JlYXRlX3dyYXBwZXIgJHJwbV9iaW5hcnkgXAorCQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKwlkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZS9ycG1yZXNvbHZlLmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZS9ycG1yZXNvbHZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0Y2FmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlL3JwbXJlc29sdmUuYwpAQCAtMCwwICsxLDQyNCBAQAorLyogT3BlbkVtYmVkZGVkIFJQTSByZXNvbHZlciB1dGlsaXR5CisKKyAgV3JpdHRlbiBieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKyAgQ29weXJpZ2h0IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8cnBtZGIuaD4KKyNpbmNsdWRlIDxycG10eXBlcy5oPgorI2luY2x1ZGUgPHJwbXRhZy5oPgorI2luY2x1ZGUgPHJwbXRzLmg+CisjaW5jbHVkZSA8cnBtbWFjcm8uaD4KKyNpbmNsdWRlIDxycG1jYi5oPgorI2luY2x1ZGUgPHJwbWxvZy5oPgorI2luY2x1ZGUgPGFyZ3YuaD4KKyNpbmNsdWRlIDxtaXJlLmg+CisKK2ludCBkZWJ1Z21vZGU7CitGSUxFICpvdXRmOworCitpbnQgZ2V0UGFja2FnZVN0cihycG10cyB0cywgY29uc3QgY2hhciAqTlZSQSwgcnBtVGFnIHRhZywgY2hhciAqKnZhbHVlKQoreworICAgIGludCByYyA9IC0xOworICAgIHJwbW1pIG1pID0gcnBtdHNJbml0SXRlcmF0b3IodHMsIFJQTVRBR19OVlJBLCBOVlJBLCAwKTsKKyAgICBIZWFkZXIgaDsKKyAgICBpZiAoKGggPSBycG1taU5leHQobWkpKSAhPSBOVUxMKSB7CisgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgaGUtPnRhZyA9IHRhZzsKKyAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgaWYocmM9PTApCisgICAgICAgICAgICAqdmFsdWUgPSBzdHJkdXAoKGNoYXIgKiloZS0+cC5wdHIpOworICAgIH0KKyAgICAodm9pZClycG1taUZyZWUobWkpOworICAgIHJldHVybiByYzsKK30KKworaW50IGxvYWRUcyhycG10cyAqKnRzLCBpbnQgKnRzY3QsIGNvbnN0IGNoYXIgKmRibGlzdGZuKQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgaW50IHN6ID0gNTsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBsaXN0ZmlsZSA9IDE7CisgICAgc3RydWN0IHN0YXQgc3RfYnVmOworCisgICAgcmMgPSBzdGF0KGRibGlzdGZuLCAmc3RfYnVmKTsKKyAgICBpZihyYyAhPSAwKSB7CisgICAgICAgIHBlcnJvcigic3RhdCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYoU19JU0RJUihzdF9idWYuc3RfbW9kZSkpCisgICAgICAgIGxpc3RmaWxlID0gMDsKKworICAgIGlmKGxpc3RmaWxlKSB7CisgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiREVCVUc6IHJlYWRpbmcgZGF0YWJhc2UgbGlzdCBmaWxlICclcydcbiIsIGRibGlzdGZuKTsKKyAgICAgICAgKnRzID0gbWFsbG9jKHN6ICogc2l6ZW9mKHJwbXRzKSk7CisgICAgICAgIEZJTEUgKmYgPSBmb3BlbihkYmxpc3RmbiwgInIiICk7CisgICAgICAgIGlmKGYpIHsKKyAgICAgICAgICAgIGNoYXIgbGluZVsyMDQ4XTsKKyAgICAgICAgICAgIHdoaWxlKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGxpbmUpIC0gMTsKKyAgICAgICAgICAgICAgICBpZihsZW4gPiAwKQorICAgICAgICAgICAgICAgICAgICAvLyBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUobGVuID4gMCAmJiBpc3NwYWNlKGxpbmVbbGVuXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lW2xlbi0tXSA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBpZihsZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBhcnJheSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYoY291bnQgPT0gc3opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ICs9IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHMgPSAocnBtdHMgKilyZWFsbG9jKCp0cywgc3opOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoZGVidWdtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJERUJVRzogb3BlbmluZyBkYXRhYmFzZSAnJXMnXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqZGJwYXRobSA9IG1hbGxvYyhzdHJsZW4obGluZSkgKyAxMCk7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZGJwYXRobSwgIl9kYnBhdGggJXMiLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgcnBtRGVmaW5lTWFjcm8oTlVMTCwgZGJwYXRobSwgUk1JTF9DTURMSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShkYnBhdGhtKTsKKworICAgICAgICAgICAgICAgICAgICBycG10cyB0c2kgPSBycG10c0NyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICAoKnRzKVtjb3VudF0gPSB0c2k7CisgICAgICAgICAgICAgICAgICAgIHJjID0gcnBtdHNPcGVuREIodHNpLCBPX1JET05MWSk7CisgICAgICAgICAgICAgICAgICAgIGlmKCByYyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgJXNcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmY2xvc2UoZik7CisgICAgICAgICAgICAqdHNjdCA9IGNvdW50OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGVycm9yKGRibGlzdGZuKTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiREVCVUc6IG9wZW5pbmcgZGF0YWJhc2UgJyVzJ1xuIiwgZGJsaXN0Zm4pOworICAgICAgICAvLyBMb2FkIGZyb20gc2luZ2xlIGRhdGFiYXNlCisgICAgICAgICp0cyA9IG1hbGxvYyhzaXplb2YocnBtdHMpKTsKKyAgICAgICAgY2hhciAqZGJwYXRobSA9IG1hbGxvYyhzdHJsZW4oZGJsaXN0Zm4pICsgMTApOworICAgICAgICBzcHJpbnRmKGRicGF0aG0sICJfZGJwYXRoICVzIiwgZGJsaXN0Zm4pOworICAgICAgICBycG1EZWZpbmVNYWNybyhOVUxMLCBkYnBhdGhtLCBSTUlMX0NNRExJTkUpOworICAgICAgICBmcmVlKGRicGF0aG0pOworCisgICAgICAgIHJwbXRzIHRzaSA9IHJwbXRzQ3JlYXRlKCk7CisgICAgICAgICgqdHMpWzBdID0gdHNpOworICAgICAgICByYyA9IHJwbXRzT3BlbkRCKHRzaSwgT19SRE9OTFkpOworICAgICAgICBpZiggcmMgKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlICVzXG4iLCBkYmxpc3Rmbik7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICB9CisgICAgICAgICp0c2N0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBwcm9jZXNzUGFja2FnZXMocnBtdHMgKnRzLCBpbnQgdHNjb3VudCwgY29uc3QgY2hhciAqcGFja2FnZWxpc3RmbiwgaW50IGlnbm9yZW1pc3NpbmcpCit7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCBzeiA9IDEwMDsKKyAgICBpbnQgaSA9IDA7CisgICAgaW50IG1pc3NpbmcgPSAwOworCisgICAgRklMRSAqZiA9IGZvcGVuKHBhY2thZ2VsaXN0Zm4sICJyIiApOworICAgIGlmKGYpIHsKKyAgICAgICAgY2hhciBsaW5lWzI1NV07CisgICAgICAgIHdoaWxlKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKyAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4obGluZSkgLSAxOworICAgICAgICAgICAgaWYobGVuID4gMCkKKyAgICAgICAgICAgICAgICAvLyBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICB3aGlsZShsZW4gPiAwICYmIGlzc3BhY2UobGluZVtsZW5dKSkKKyAgICAgICAgICAgICAgICAgICAgbGluZVtsZW4tLV0gPSAnXDAnOworCisgICAgICAgICAgICBpZihsZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgaW50IGZvdW5kID0gMDsKKyAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPHRzY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBBUkdWX3Qga2V5cyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHJwbWRiIGRiID0gcnBtdHNHZXRSZGIodHNbaV0pOworICAgICAgICAgICAgICAgICAgICByYyA9IHJwbWRiTWlyZUFwcGx5KGRiLCBSUE1UQUdfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlBNTUlSRV9TVFJDTVAsIGxpbmUsICZrZXlzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBua2V5cyA9IGFyZ3ZDb3VudChrZXlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBua2V5cyA9PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbHVlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IGdldFBhY2thZ2VTdHIodHNbaV0sIGtleXNbMF0sIFJQTVRBR19QQUNLQUdFT1JJR0lOLCAmdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJjID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzXG4iLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBnZXQgcGFja2FnZSBvcmlnaW4gZm9yICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCBua2V5cyA+IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleWluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk11bHRpcGxlIG1hdGNoZXMgZm9yICVzOlxuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBrZXlpbmRleD0wOyBrZXlpbmRleDxua2V5czsga2V5aW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gZ2V0UGFja2FnZVN0cih0c1tpXSwga2V5c1trZXlpbmRleF0sIFJQTVRBR19QQUNLQUdFT1JJR0lOLCAmdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyYyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICVzXG4iLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAoJXMpXG4iLCBrZXlzW2tleWluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKGZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoICFmb3VuZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIGlnbm9yZW1pc3NpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byByZXNvbHZlIHBhY2thZ2UgJXMgLSBpZ25vcmluZ1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byByZXNvbHZlIHBhY2thZ2UgJXNcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIGZjbG9zZShmKTsKKworICAgICAgICBpZiggbWlzc2luZyApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHNvbWUgcGFja2FnZXMgd2VyZSBtaXNzaW5nXG4iKTsKKyAgICAgICAgICAgIHJjID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcGVycm9yKHBhY2thZ2VsaXN0Zm4pOworICAgICAgICByYyA9IC0xOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworaW50IGxvb2t1cFByb3ZpZGVyKHJwbXRzIHRzLCBjb25zdCBjaGFyICpyZXEsIGNoYXIgKipwcm92aWRlcikKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIHJwbW1pIHByb3ZtaSA9IHJwbXRzSW5pdEl0ZXJhdG9yKHRzLCBSUE1UQUdfUFJPVklERU5BTUUsIHJlcSwgMCk7CisgICAgaWYocHJvdm1pKSB7CisgICAgICAgIEhlYWRlciBoOworICAgICAgICBpZiAoKGggPSBycG1taU5leHQocHJvdm1pKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgSEVfdCBoZSA9IChIRV90KSBtZW1zZXQoYWxsb2NhKHNpemVvZigqaGUpKSwgMCwgc2l6ZW9mKCpoZSkpOworICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19OQU1FOworICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgIGlmKHJjPT0wKQorICAgICAgICAgICAgICAgICpwcm92aWRlciA9IHN0cmR1cCgoY2hhciAqKWhlLT5wLnB0cik7CisgICAgICAgIH0KKyAgICAgICAgKHZvaWQpcnBtbWlGcmVlKHByb3ZtaSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByYyA9IC0xOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBwcmludERlcExpc3QocnBtdHMgKnRzLCBpbnQgdHNjb3VudCkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgaWYoIHRzY291bnQgPiAxICkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICI+MSBkYXRhYmFzZSBzcGVjaWZpZWQgd2l0aCBkZXBlbmRlbmN5IGxpc3QsIHVzaW5nIGZpcnN0IG9ubHlcbiIpOworCisgICAgLyogR2V0IGxpc3Qgb2YgbmFtZXMgKi8KKyAgICBycG1kYiBkYiA9IHJwbXRzR2V0UmRiKHRzWzBdKTsKKyAgICBBUkdWX3QgbmFtZXMgPSBOVUxMOworICAgIHJjID0gcnBtZGJNaXJlQXBwbHkoZGIsIFJQTVRBR19OQU1FLAorICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBOVUxMLCAmbmFtZXMpOworICAgIGludCBubmFtZXMgPSBhcmd2Q291bnQobmFtZXMpOworCisgICAgLyogR2V0IGxpc3Qgb2YgTlZSQXMgKi8KKyAgICBBUkdWX3Qga2V5cyA9IE5VTEw7CisgICAgcmMgPSBycG1kYk1pcmVBcHBseShkYiwgUlBNVEFHX05WUkEsCisgICAgICAgICAgICAgICAgUlBNTUlSRV9TVFJDTVAsIE5VTEwsICZrZXlzKTsKKyAgICBpZiAoa2V5cykgeworICAgICAgICBpbnQgaSwgajsKKyAgICAgICAgSEVfdCBoZSA9IChIRV90KSBtZW1zZXQoYWxsb2NhKHNpemVvZigqaGUpKSwgMCwgc2l6ZW9mKCpoZSkpOworICAgICAgICBpbnQgbmtleXMgPSBhcmd2Q291bnQoa2V5cyk7CisgICAgICAgIGZvcihpPTA7IGk8bmtleXM7IGkrKykgeworICAgICAgICAgICAgcnBtbWkgbWkgPSBycG10c0luaXRJdGVyYXRvcih0c1swXSwgUlBNVEFHX05WUkEsIGtleXNbaV0sIDApOworICAgICAgICAgICAgSGVhZGVyIGg7CisgICAgICAgICAgICBpZiAoKGggPSBycG1taU5leHQobWkpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyogR2V0IG5hbWUgb2YgcGFja2FnZSAqLworICAgICAgICAgICAgICAgIGhlLT50YWcgPSBSUE1UQUdfTkFNRTsKKyAgICAgICAgICAgICAgICByYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpOworICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUgPSBzdHJkdXAoKGNoYXIgKiloZS0+cC5wdHIpOworICAgICAgICAgICAgICAgIC8qIEdldCBpdHMgcmVxdWlyZXMgKi8KKyAgICAgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX1JFUVVJUkVOQU1FOworICAgICAgICAgICAgICAgIGlmIChyYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Z21vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiREVCVUc6ICVzIHJlcXVpcmVzIG51bGxcbiIsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFSR1ZfdCByZXFzID0gKEFSR1ZfdCloZS0+cC5wdHI7CisgICAgICAgICAgICAgICAgLyogR2V0IGl0cyByZXF1aXJlZmxhZ3MgKi8KKyAgICAgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX1JFUVVJUkVGTEFHUzsKKyAgICAgICAgICAgICAgICByYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpOworICAgICAgICAgICAgICAgIHJwbXVpbnQzMl90ICpyZXFmbGFncyA9IChycG11aW50MzJfdCAqKWhlLT5wLnVpMzJwOworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8aGUtPmM7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgazsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqcHJvdiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGZvcihrPTA7IGs8bm5hbWVzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0cmNtcChuYW1lc1trXSwgcmVxc1tqXSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3YgPSBuYW1lc1trXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihwcm92KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigoaW50KXJlcWZsYWdzW2pdICYgMHg4MDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc3wlcyBbUkVDXVxuIiwgbmFtZSwgcHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXNcbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBsb29rdXBQcm92aWRlcih0c1swXSwgcmVxc1tqXSwgJnByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYocmM9PTAgJiYgcHJvdikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKChpbnQpcmVxZmxhZ3Nbal0gJiAweDgwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc3wlcyBbUkVDXVxuIiwgbmFtZSwgcHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc3wlc1xuIiwgbmFtZSwgcHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHZvaWQpcnBtbWlGcmVlKG1pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByYzsKK30KKwordm9pZCB1c2FnZSgpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJPcGVuRW1iZWRkZWQgcnBtIHJlc29sdmVyIHV0aWxpdHlcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAic3ludGF4OiBycG1yZXNvbHZlIFstaV0gWy1kXSBbLXRdIDxkYmxpc3RmaWxlPiA8cGFja2FnZWxpc3RmaWxlPlxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBycG10cyAqdHMgPSBOVUxMOworICAgIGludCB0c2NvdW50ID0gMDsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBpOworICAgIGludCBjOworICAgIGludCBpZ25vcmVtaXNzaW5nID0gMDsKKyAgICBpbnQgZGVwbGlzdG1vZGUgPSAwOworICAgIGNoYXIgKm91dGZpbGUgPSBOVUxMOworCisgICAgZGVidWdtb2RlID0gMDsKKyAgICBvdXRmID0gc3Rkb3V0OworCisgICAgb3B0ZXJyID0gMDsKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJpdGRvOiIpKSAhPSAtMSkgeworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIGlnbm9yZW1pc3NpbmcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAgZGVwbGlzdG1vZGUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgZGVidWdtb2RlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgIG91dGZpbGUgPSBzdHJkdXAob3B0YXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgICAgIGlmKGlzcHJpbnQob3B0b3B0KSkKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiBgLSVjJy5cbiIsIG9wdG9wdCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uIGNoYXJhY3RlciBgXFx4JXgnLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdG9wdCk7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBhcmdjIC0gb3B0aW5kIDwgMSApIHsKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYoIG91dGZpbGUgKSB7CisgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiREVCVUc6IFVzaW5nIG91dHB1dCBmaWxlICVzXG4iLCBvdXRmaWxlKTsKKyAgICAgICAgb3V0ZiA9IGZvcGVuKG91dGZpbGUsICJ3Iik7CisgICAgfQorCisgICAgY29uc3QgY2hhciAqZGJsaXN0Zm4gPSBhcmd2W29wdGluZF07CisKKyAgICBycG1jbGlJbml0KGFyZ2MsIGFyZ3YsIE5VTEwpOworCisgICAgaWYoZGVidWdtb2RlKQorICAgICAgICBycG1TZXRWZXJib3NpdHkoUlBNTE9HX0RFQlVHKTsKKworICAgIHJwbURlZmluZU1hY3JvKE5VTEwsICJfX2RiaV90eG4gY3JlYXRlIG5vZnN5bmMiLCBSTUlMX0NNRExJTkUpOworCisgICAgcmMgPSBsb2FkVHMoJnRzLCAmdHNjb3VudCwgZGJsaXN0Zm4pOworICAgIGlmKCByYyApCisgICAgICAgIHJldHVybiAxOworICAgIGlmKCB0c2NvdW50ID09IDAgKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgZGF0YWJhc2UgbGlzdCBmaWxlIG9yIGRhdGFiYXNlIGxvY2F0aW9uXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYoZGVwbGlzdG1vZGUpIHsKKyAgICAgICAgcmMgPSBwcmludERlcExpc3QodHMsIHRzY291bnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYoIGFyZ2MgLSBvcHRpbmQgPCAyICkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJQbGVhc2Ugc3BlY2lmeSBwYWNrYWdlIGxpc3QgZmlsZVxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwa2dsaXN0Zm4gPSBhcmd2W29wdGluZCsxXTsKKyAgICAgICAgICAgIHJjID0gcHJvY2Vzc1BhY2thZ2VzKHRzLCB0c2NvdW50LCBwa2dsaXN0Zm4sIGlnbm9yZW1pc3NpbmcpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yKGk9MDsgaTx0c2NvdW50OyBpKyspCisgICAgICAgICh2b2lkKSBycG10c0Nsb3NlREIodHNbaV0pOworICAgIGZyZWUodHMpOworCisgICAgaWYoIG91dGZpbGUgKSB7CisgICAgICAgIGZjbG9zZShvdXRmKTsKKyAgICAgICAgZnJlZShvdXRmaWxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNTVmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlXzEuMC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIk9wZW5FbWJlZGRlZCBSUE0gcmVzb2x2ZXIgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIk9wZW5FbWJlZGRlZCBSUE0gcmVzb2x2ZXIgLSBwZXJmb3JtcyBSUE0gZGF0YWJhc2UgbG9va3VwcyBpbiBiYXRjaGVzIHRvIGF2b2lkIFwKKyByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZiBycG0gb24gdGhlIGNvbW1hbmQgbGluZS4iCitERVBFTkRTID0gInJwbSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJmaWxlOi8vcnBtcmVzb2x2ZS5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gJHtDRkxBR1N9IC1nZ2RiIC1JJHtTVEFHSU5HX0lOQ0RJUn0vcnBtICR7TERGTEFHU30gcnBtcmVzb2x2ZS5jIC1vIHJwbXJlc29sdmUgLWxycG1idWlsZCAtbHJwbSAtbHJwbWlvIC1scnBtZGIgLWxwb3B0Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IHJwbXJlc29sdmUgJHtEfSR7YmluZGlyfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtcmVzb2x2ZSBcCisJCQlSUE1fVVNSTElCUlBNPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0ke1NUQUdJTkdfRVRDRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9MT0NBTEVESVJSUE09JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9sb2NhbGUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvYWNpbmNsdWRlLm00IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNWI0MWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw5NSBAQAorZG5sIHZlcmJhdGltIHJlbmFtZWQgZnJvbSBhY2xvY2FsLm00IGluIHJzeW5jXzMuMC43CitkbmwgMDcvMDYvMjAxMCAtIHFoZQorCitkbmwgQUNfVkFMSURBVEVfQ0FDSEVfU1lTVEVNX1RZUEVbKGNtZCldCitkbmwgaWYgdGhlIGNhY2hlIGZpbGUgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgaG9zdCwKK2RubCB0YXJnZXQgYW5kIGJ1aWxkIHN5c3RlbSB0eXBlcywgZXhlY3V0ZSBDTUQgb3IgcHJpbnQgYSBkZWZhdWx0CitkbmwgZXJyb3IgbWVzc2FnZS4KK0FDX0RFRlVOKEFDX1ZBTElEQVRFX0NBQ0hFX1NZU1RFTV9UWVBFLCBbCisgICAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX1NZU1RFTV0pCisgICAgQUNfTVNHX0NIRUNLSU5HKFtjb25maWcuY2FjaGUgc3lzdGVtIHR5cGVdKQorICAgIGlmIHsgdGVzdCB4IiR7YWNfY3ZfaG9zdF9zeXN0ZW1fdHlwZStzZXR9IiA9IHgic2V0IiAmJgorICAgICAgICAgdGVzdCB4IiRhY19jdl9ob3N0X3N5c3RlbV90eXBlIiAhPSB4IiRob3N0IjsgfSB8fAorICAgICAgIHsgdGVzdCB4IiR7YWNfY3ZfYnVpbGRfc3lzdGVtX3R5cGUrc2V0fSIgPSB4InNldCIgJiYKKyAgICAgICAgIHRlc3QgeCIkYWNfY3ZfYnVpbGRfc3lzdGVtX3R5cGUiICE9IHgiJGJ1aWxkIjsgfSB8fAorICAgICAgIHsgdGVzdCB4IiR7YWNfY3ZfdGFyZ2V0X3N5c3RlbV90eXBlK3NldH0iID0geCJzZXQiICYmCisgICAgICAgICB0ZXN0IHgiJGFjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZSIgIT0geCIkdGFyZ2V0IjsgfTsgdGhlbgorCUFDX01TR19SRVNVTFQoW2RpZmZlcmVudF0pCisJaWZlbHNlKCQjLCAxLCBbJDFdLAorCQlbQUNfTVNHX0VSUk9SKFsieW91IG11c3QgcmVtb3ZlIGNvbmZpZy5jYWNoZSBhbmQgcmVzdGFydCBjb25maWd1cmUiXSldKQorICAgIGVsc2UKKwlBQ19NU0dfUkVTVUxUKFtzYW1lXSkKKyAgICBmaQorICAgIGFjX2N2X2hvc3Rfc3lzdGVtX3R5cGU9IiRob3N0IgorICAgIGFjX2N2X2J1aWxkX3N5c3RlbV90eXBlPSIkYnVpbGQiCisgICAgYWNfY3ZfdGFyZ2V0X3N5c3RlbV90eXBlPSIkdGFyZ2V0IgorXSkKKworZG5sIENoZWNrIGZvciBzb2NrbGVuX3Q6IGhpc3RvcmljYWxseSBvbiBCU0QgaXQgaXMgYW4gaW50LCBhbmQgaW4KK2RubCBQT1NJWCAxZyBpdCBpcyBhIHR5cGUgb2YgaXRzIG93biwgYnV0IHNvbWUgcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQKK2RubCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHRvIGdldHNvY2tvcHQsIGdldHBlZXJuYW1lLCBldGMuICBTbyB3ZQorZG5sIGhhdmUgdG8gdGVzdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IHdpbGwgd29yay4KKworZG5sIFRoaXMgaXMgbm8gZ29vZCwgYmVjYXVzZSBwYXNzaW5nIHRoZSB3cm9uZyBwb2ludGVyIG9uIEMgY29tcGlsZXJzIGlzCitkbmwgbGlrZWx5IHRvIG9ubHkgZ2VuZXJhdGUgYSB3YXJuaW5nLCBub3QgYW4gZXJyb3IuICBXZSBkb24ndCBjYWxsIHRoaXMgYXQKK2RubCB0aGUgbW9tZW50LgorCitBQ19ERUZVTihbVFlQRV9TT0NLTEVOX1RdLAorWworICAgQUNfQ0hFQ0tfVFlQRShbc29ja2xlbl90XSwgLFsKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHNvY2tsZW5fdCBlcXVpdmFsZW50XSkKKyAgICAgIEFDX0NBQ0hFX1ZBTChbcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2XSwKKyAgICAgIFsKKyAgICAgICAgICMgU3lzdGVtcyBoYXZlIGVpdGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yCisgICAgICAgICAjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKyAgICAgICAgIHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdj0KKyAgICAgICAgIGZvciBhcmcyIGluICJzdHJ1Y3Qgc29ja2FkZHIiIHZvaWQ7IGRvCisgICAgICAgICAgICBmb3IgdCBpbiBpbnQgc2l6ZV90IHVuc2lnbmVkIGxvbmcgInVuc2lnbmVkIGxvbmciOyBkbworICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworICAgICAgICAgICAgICAgICAgaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0ICopOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICAkdCBsZW47CisgICAgICAgICAgICAgICAgICBnZXRwZWVybmFtZSgwLDAsJmxlbik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgIHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCisgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgIGRvbmUKKworICAgICAgICAgaWYgdGVzdCAieCRyc3luY19jdl9zb2NrbGVuX3RfZXF1aXYiID0geDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCBhIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdF0pCisgICAgICAgICBmaQorICAgICAgXSkKKyAgICAgIEFDX01TR19SRVNVTFQoJHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdikKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChzb2NrbGVuX3QsICRyc3luY19jdl9zb2NrbGVuX3RfZXF1aXYsCisJCQlbdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90IGlmIG5vdCBkZWZpbmVkXSldLAorICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSkKK10pCisKK2RubCBBQ19IQVZFX1RZUEUoVFlQRSxJTkNMVURFUykKK0FDX0RFRlVOKFtBQ19IQVZFX1RZUEVdLCBbCitBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCitjdj1gZWNobyAiJDEiIHwgc2VkICd5JS4vKy0gJV9fcF9fJSdgCitBQ19NU0dfQ0hFQ0tJTkcoZm9yICQxKQorQUNfQ0FDSEVfVkFMKFthY19jdl90eXBlXyRjdl0sCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCitBQ19JTkNMVURFU19ERUZBVUxUCiskMl1dLAorW1skMSBmb287XV0pXSwKK1tldmFsICJhY19jdl90eXBlXyRjdj15ZXMiXSwKK1tldmFsICJhY19jdl90eXBlXyRjdj1ubyJdKSlkbmwKK2FjX2Zvbz1gZXZhbCBlY2hvIFxcJGFjX2N2X3R5cGVfJGN2YAorQUNfTVNHX1JFU1VMVCgkYWNfZm9vKQoraWYgdGVzdCAiJGFjX2ZvbyIgPSB5ZXM7IHRoZW4KKyAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJDEgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0gJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXyUnYAoraWYgZmFsc2U7IHRoZW4KKwlBQ19DSEVDS19UWVBFUygkMSkKK2ZpCisgIEFDX0RFRklORV9VTlFVT1RFRCgkYWNfdHJfaGRyLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgYCQxJ10pCitmaQorXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL3JzeW5jZC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvcnN5bmNkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ZjViMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL3JzeW5jZC5jb25mCkBAIC0wLDAgKzEsMTUgQEAKKyMgL2V0Yy9yc3luY2QuY29uZgorCisjIE1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciByc3luYyBkYWVtb24KKyMgU2VlIHJzeW5jKDEpIGFuZCByc3luY2QuY29uZig1KSBtYW4gcGFnZXMgZm9yIGhlbHAKKworIyBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgYnkgcnN5bmMgLS1kYWVtb24KK3BpZCBmaWxlID0gL3Zhci9ydW4vcnN5bmNkLnBpZAordXNlIGNocm9vdCA9IHllcworcmVhZCBvbmx5ID0geWVzCisKKyMgU2ltcGxlIGV4YW1wbGUgZm9yIGVuYWJsaW5nIHlvdXIgb3duIGxvY2FsIHJzeW5jIHNlcnZlcgorI1tldmVyeXRoaW5nXQorIwlwYXRoID0gLworIwljb21tZW50ID0gRXZlcnl0aGluZyBleGNlcHQgL2V0YyBleHBvc2VkCisjCWV4Y2x1ZGUgPSAvZXRjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1NDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaApAQCAtMCwwICsxLDcwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsgVGhlIHBhdGNoIGlzIHJzeW5jLTIuNi45IHNwZWNpZmljIF0KKworVGhlIHBhdGNoIGlzIGZyb20gaHR0cHM6Ly9pc3N1ZXMucnBhdGguY29tL2Jyb3dzZS9SUEwtMTY0NyBhbmQgaXMgdXNlZCB0bworYWRkcmVzcyBodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAwNy00MDkxCisKK0RhdGU6ICAgVHVlIE1heSAxMCAxMDowNzozNiAyMDExICswODAwCitEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NlbmRlci5jIGIvc2VuZGVyLmMKK2luZGV4IDZmY2FhNjUuLjA1M2E4ZjEgMTAwNjQ0CistLS0gYS9zZW5kZXIuYworKysrIGIvc2VuZGVyLmMKK0BAIC0xMjMsNiArMTIzLDcgQEAgdm9pZCBzdWNjZXNzZnVsX3NlbmQoaW50IG5keCkKKyAJY2hhciBmbmFtZVtNQVhQQVRITEVOXTsKKyAJc3RydWN0IGZpbGVfc3RydWN0ICpmaWxlOworIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OworKwlzaXplX3QgbCA9IDA7CisgCisgCWlmIChuZHggPCAwIHx8IG5keCA+PSB0aGVfZmlsZV9saXN0LT5jb3VudCkKKyAJCXJldHVybjsKK0BAIC0xMzMsNiArMTM0LDIwIEBAIHZvaWQgc3VjY2Vzc2Z1bF9zZW5kKGludCBuZHgpCisgCQkJCSAgICBmaWxlLT5kaXIucm9vdCwgIi8iLCBOVUxMKTsKKyAJfSBlbHNlCisgCQlvZmZzZXQgPSAwOworKworKwlsID0gb2Zmc2V0ICsgMTsKKysJaWYgKGZpbGUpIHsKKysJCWlmIChmaWxlLT5kaXJuYW1lKQorKwkJCWwgKz0gc3RybGVuKGZpbGUtPmRpcm5hbWUpOworKwkJaWYgKGZpbGUtPmJhc2VuYW1lKQorKwkJCWwgKz0gc3RybGVuKGZpbGUtPmJhc2VuYW1lKTsKKysJfQorKworKwlpZiAobCA+PSBzaXplb2YoZm5hbWUpKSB7CisrCQlycHJpbnRmKEZFUlJPUiwgIk92ZXJsb25nIHBhdGhuYW1lXG4iKTsKKysJCWV4aXRfY2xlYW51cChSRVJSX0ZJTEVTRUxFQ1QpOworKwl9CisrCisgCWZfbmFtZShmaWxlLCBmbmFtZSArIG9mZnNldCk7CisgCWlmIChyZW1vdmVfc291cmNlX2ZpbGVzKSB7CisgCQlpZiAoZG9fdW5saW5rKGZuYW1lKSA9PSAwKSB7CitAQCAtMjI0LDYgKzIzOSw3IEBAIHZvaWQgc2VuZF9maWxlcyhzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgaW50IGZfb3V0LCBpbnQgZl9pbikKKyAJZW51bSBsb2djb2RlIGxvZ19jb2RlID0gbG9nX2JlZm9yZV90cmFuc2ZlciA/IEZMT0cgOiBGSU5GTzsKKyAJaW50IGZfeGZlciA9IHdyaXRlX2JhdGNoIDwgMCA/IGJhdGNoX2ZkIDogZl9vdXQ7CisgCWludCBpLCBqOworKwlzaXplX3QgbCA9IDA7CisgCisgCWlmICh2ZXJib3NlID4gMikKKyAJCXJwcmludGYoRklORk8sICJzZW5kX2ZpbGVzIHN0YXJ0aW5nXG4iKTsKK0BAIC0yNTksNiArMjc1LDIwIEBAIHZvaWQgc2VuZF9maWxlcyhzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgaW50IGZfb3V0LCBpbnQgZl9pbikKKyAJCQkJZm5hbWVbb2Zmc2V0KytdID0gJy8nOworIAkJfSBlbHNlCisgCQkJb2Zmc2V0ID0gMDsKKysKKysJCWwgPSBvZmZzZXQgKyAxOworKwkJaWYgKGZpbGUpIHsKKysJCQlpZiAoZmlsZS0+ZGlybmFtZSkKKysJCQkJbCArPSBzdHJsZW4oZmlsZS0+ZGlybmFtZSk7CisrCQkJaWYgKGZpbGUtPmJhc2VuYW1lKQorKwkJCQlsICs9IHN0cmxlbihmaWxlLT5iYXNlbmFtZSk7CisrCQl9CisrCisrCQlpZiAobCA+PSBzaXplb2YoZm5hbWUpKSB7CisrCQkJcnByaW50ZihGRVJST1IsICJPdmVybG9uZyBwYXRobmFtZVxuIik7CisrCQkJZXhpdF9jbGVhbnVwKFJFUlJfRklMRVNFTEVDVCk7CisrCQl9CisrCisgCQlmbmFtZTIgPSBmX25hbWUoZmlsZSwgZm5hbWUgKyBvZmZzZXQpOworIAorIAkJaWYgKHZlcmJvc2UgPiAyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmNkLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luY2QuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVmNWIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmNkLmNvbmYKQEAgLTAsMCArMSwxNSBAQAorIyAvZXRjL3JzeW5jZC5jb25mCisKKyMgTWluaW1hbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHJzeW5jIGRhZW1vbgorIyBTZWUgcnN5bmMoMSkgYW5kIHJzeW5jZC5jb25mKDUpIG1hbiBwYWdlcyBmb3IgaGVscAorCisjIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBieSByc3luYyAtLWRhZW1vbgorcGlkIGZpbGUgPSAvdmFyL3J1bi9yc3luY2QucGlkCit1c2UgY2hyb290ID0geWVzCityZWFkIG9ubHkgPSB5ZXMKKworIyBTaW1wbGUgZXhhbXBsZSBmb3IgZW5hYmxpbmcgeW91ciBvd24gbG9jYWwgcnN5bmMgc2VydmVyCisjW2V2ZXJ5dGhpbmddCisjCXBhdGggPSAvCisjCWNvbW1lbnQgPSBFdmVyeXRoaW5nIGV4Y2VwdCAvZXRjIGV4cG9zZWQKKyMJZXhjbHVkZSA9IC9ldGMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWNlNTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitGcm9tIDk2MmY4YjkwMDQ1YWIzMzFmYzA0YzllNjVmODBmMWE1M2U2ODI0M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXYXluZSBEYXZpc29uIDx3YXluZWRAc2FtYmEub3JnPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxMjo0MTowMyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBDb21wbGFpbiBpZiBhbiBpbmMtcmVjdXJzaXZlIHBhdGggaXMgbm90IHJpZ2h0IGZvciBpdHMgZGlyLgorIFRoaXMgZW5zdXJlcyB0aGF0IGEgbWFsaWNpb3VzIHNlbmRlciBjYW4ndCB1c2UgYSBqdXN0LXNlbnQgc3ltbGluayBhcyBhCisgdHJhc25mZXIgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrUG9ydAorCitGaXggdGhlIENWRS0yMDE0LTk1MTIsIHJzeW5jIDMuMS4xIGFsbG93cyByZW1vdGUgYXR0YWNrZXJzIHRvIHdyaXRlIHRvIGFyYml0cmFyeQorZmlsZXMgdmlhIGEgc3ltbGluayBhdHRhY2sgb24gYSBmaWxlIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcGF0aC4KKworQmFja1BvcnQgYW5kIGZpeCB0aGlzIHBhdGNoIHRvIG1ha2UgaXQgYWJsZSB0byBhcHBseSB0byBzb3VyY2UgY29kZQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBmbGlzdC5jIHwgMjIgKysrKysrKysrKysrKysrKysrKystLQorIGlvLmMgICAgfCAgMiArLQorIG1haW4uYyAgfCAgNCArKy0tCisgcnN5bmMuYyB8ICAyICstCisgcHJvdG8uaCB8IDIgKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mbGlzdC5jIGIvZmxpc3QuYworaW5kZXggYzI0NjcyZS4uOTJlNGI2NSAxMDA2NDQKKy0tLSBhL2ZsaXN0LmMKKysrKyBiL2ZsaXN0LmMKK0BAIC0yNDM1LDggKzI0MzUsOSBAQCBzdHJ1Y3QgZmlsZV9saXN0ICpzZW5kX2ZpbGVfbGlzdChpbnQgZiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJcmV0dXJuIGZsaXN0OworIH0KKyAKKy1zdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZikKKytzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZiwgaW50IGRpcl9uZHgpCisgeworKwljb25zdCBjaGFyICpnb29kX2Rpcm5hbWUgPSBOVUxMOworIAlzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdDsKKyAJaW50IGRzdGFydCwgZmxhZ3M7CisgCWludDY0IHN0YXJ0X3JlYWQ7CitAQCAtMjQ5Miw2ICsyNDkzLDIzIEBAIHN0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmKQorIAkJZmxpc3RfZXhwYW5kKGZsaXN0LCAxKTsKKyAJCWZpbGUgPSByZWN2X2ZpbGVfZW50cnkoZiwgZmxpc3QsIGZsYWdzKTsKKyAKKysJCWlmIChpbmNfcmVjdXJzZSkgeworKwkJCXN0YXRpYyBjb25zdCBjaGFyIGVtcHR5X2RpcltdID0gIlwwIjsKKysJCQljb25zdCBjaGFyICpjdXJfZGlyID0gZmlsZS0+ZGlybmFtZSA/IGZpbGUtPmRpcm5hbWUgOiBlbXB0eV9kaXI7CisrCQkJaWYgKHJlbGF0aXZlX3BhdGhzICYmICpjdXJfZGlyID09ICcvJykKKysJCQkJY3VyX2RpcisrOworKwkJCWlmIChjdXJfZGlyICE9IGdvb2RfZGlybmFtZSkgeworKwkJCQljb25zdCBjaGFyICpkID0gZGlyX25keCA+PSAwID8gZl9uYW1lKGRpcl9mbGlzdC0+ZmlsZXNbZGlyX25keF0sIE5VTEwpIDogZW1wdHlfZGlyOworKwkJCQlpZiAoc3RyY21wKGN1cl9kaXIsIGQpICE9IDApIHsKKysJCQkJCXJwcmludGYoRkVSUk9SLAorKwkJCQkJCSJBQk9SVElORyBkdWUgdG8gaW52YWxpZCBkaXIgcHJlZml4IGZyb20gc2VuZGVyOiAlcyAoc2hvdWxkIGJlOiAlcylcbiIsCisrCQkJCQkJY3VyX2RpciwgZCk7CisrCQkJCQlleGl0X2NsZWFudXAoUkVSUl9QUk9UT0NPTCk7CisrCQkJCX0KKysJCQkJZ29vZF9kaXJuYW1lID0gY3VyX2RpcjsKKysJCQl9CisrCQl9CisrCisgCQlpZiAoU19JU1JFRyhmaWxlLT5tb2RlKSkgeworIAkJCS8qIEFscmVhZHkgY291bnRlZCAqLworIAkJfSBlbHNlIGlmIChTX0lTRElSKGZpbGUtPm1vZGUpKSB7CitAQCAtMjYxNSw3ICsyNjMzLDcgQEAgdm9pZCByZWN2X2FkZGl0aW9uYWxfZmlsZV9saXN0KGludCBmKQorIAkJCXJwcmludGYoRklORk8sICJbJXNdIHJlY2VpdmluZyBmbGlzdCBmb3IgZGlyICVkXG4iLAorIAkJCQl3aG9fYW1faSgpLCBuZHgpOworIAkJfQorLQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmKTsKKysJCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZiwgbmR4KTsKKyAJCWZsaXN0LT5wYXJlbnRfbmR4ID0gbmR4OworIAl9CisgfQorZGlmZiAtLWdpdCBhL2lvLmMgYi9pby5jCitpbmRleCBiOWE5YmQwLi5hODY4ZmE5IDEwMDY0NAorLS0tIGEvaW8uYworKysrIGIvaW8uYworQEAgLTE2ODUsNyArMTY4NSw3IEBAIHZvaWQgd2FpdF9mb3JfcmVjZWl2ZXIodm9pZCkKKyAJCQkJcnByaW50ZihGSU5GTywgIlslc10gcmVjZWl2aW5nIGZsaXN0IGZvciBkaXIgJWRcbiIsCisgCQkJCQl3aG9fYW1faSgpLCBuZHgpOworIAkJCX0KKy0JCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGlvYnVmLmluX2ZkKTsKKysJCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGlvYnVmLmluX2ZkLCBuZHgpOworIAkJCWZsaXN0LT5wYXJlbnRfbmR4ID0gbmR4OworICNpZmRlZiBTVVBQT1JUX0hBUkRfTElOS1MKKyAJCQlpZiAocHJlc2VydmVfaGFyZF9saW5rcykKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKK2luZGV4IGU3YTEzZjcuLjcxM2I4MTggMTAwNjQ0CistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwMDksNyArMTAwOSw3IEBAIHN0YXRpYyB2b2lkIGRvX3NlcnZlcl9yZWN2KGludCBmX2luLCBpbnQgZl9vdXQsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQlmaWxlc2Zyb21fZmQgPSAtMTsKKyAJfQorIAorLQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4pOworKwlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIC0xKTsKKyAJaWYgKCFmbGlzdCkgeworIAkJcnByaW50ZihGRVJST1IsInNlcnZlcl9yZWN2OiByZWN2X2ZpbGVfbGlzdCBlcnJvclxuIik7CisgCQlleGl0X2NsZWFudXAoUkVSUl9GSUxFU0VMRUNUKTsKK0BAIC0xMTgzLDcgKzExODMsNyBAQCBpbnQgY2xpZW50X3J1bihpbnQgZl9pbiwgaW50IGZfb3V0LCBwaWRfdCBwaWQsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgCWlmICh3cml0ZV9iYXRjaCAmJiAhYW1fc2VydmVyKQorIAkJc3RhcnRfd3JpdGVfYmF0Y2goZl9pbik7CistCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbik7CisrCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbiwgLTEpOworIAlpZiAoaW5jX3JlY3Vyc2UgJiYgZmlsZV90b3RhbCA9PSAxKQorIAkJcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChmX2luKTsKKyAKK2RpZmYgLS1naXQgYS9yc3luYy5jIGIvcnN5bmMuYworaW5kZXggNjhmZjZiMS4uYzNlY2M1MSAxMDA2NDQKKy0tLSBhL3JzeW5jLmMKKysrKyBiL3JzeW5jLmMKK0BAIC0zNjQsNyArMzY0LDcgQEAgaW50IHJlYWRfbmR4X2FuZF9hdHRycyhpbnQgZl9pbiwgaW50IGZfb3V0LCBpbnQgKmlmbGFnX3B0ciwgdWNoYXIgKnR5cGVfcHRyLAorIAkJfQorIAkJLyogU2VuZCBhbGwgdGhlIGRhdGEgd2UgcmVhZCBmb3IgdGhpcyBmbGlzdCB0byB0aGUgZ2VuZXJhdG9yLiAqLworIAkJc3RhcnRfZmxpc3RfZm9yd2FyZChuZHgpOworLQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luKTsKKysJCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbiwgbmR4KTsKKyAJCWZsaXN0LT5wYXJlbnRfbmR4ID0gbmR4OworIAkJc3RvcF9mbGlzdF9mb3J3YXJkKCk7CisgCX0KK2RpZmYgLS1naXQgYS9wcm90by5oIGIvcHJvdG8uaAoraW5kZXggMjJmYzUzOS4uMjQ3YzU1OCAxMDA2NDQKKy0tLSBhL3Byb3RvLmgKKysrKyBiL3Byb3RvLmgKK0BAIC04OSw3ICs4OSw3IEBAIHN0cnVjdCBmaWxlX3N0cnVjdCAqbWFrZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCBzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwKKyB2b2lkIHVubWFrZV9maWxlKHN0cnVjdCBmaWxlX3N0cnVjdCAqZmlsZSk7Cisgdm9pZCBzZW5kX2V4dHJhX2ZpbGVfbGlzdChpbnQgZiwgaW50IGF0X2xlYXN0KTsKKyBzdHJ1Y3QgZmlsZV9saXN0ICpzZW5kX2ZpbGVfbGlzdChpbnQgZiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Cistc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYpOworK3N0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmLCBpbnQgZGlyX25keCk7Cisgdm9pZCByZWN2X2FkZGl0aW9uYWxfZmlsZV9saXN0KGludCBmKTsKKyBpbnQgZmxpc3RfZmluZChzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgc3RydWN0IGZpbGVfc3RydWN0ICpmKTsKKyBpbnQgZmxpc3RfZmluZF9pZ25vcmVfZGlybmVzcyhzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgc3RydWN0IGZpbGVfc3RydWN0ICpmKTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvcnN5bmMuZ2l0LWVhYzg1ODA4NS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjYWM0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK0Zyb20gZWFjODU4MDg1ZTNhYzk0ZWMwYWI1MDYxZDExZjUyNjUyYzkwYTg2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdheW5lIERhdmlzb24gPHdheW5lZEBzYW1iYS5vcmc+CitEYXRlOiBNb24sIDExIE1heSAyMDE1IDEyOjM2OjIwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBBZGQgY29tcGF0IGZsYWcgdG8gYWxsb3cgcHJvcGVyIHNlZWQgY2hlY2tzdW0gb3JkZXIuCisgRml4ZXMgdGhlIGVxdWl2YWxlbnQgb2YgbGlicnN5bmMncyBDVkUtMjAxNC04MjQyIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNoZWNrc3VtLmMgfCAxNyArKysrKysrKysrKysrLS0tLQorIGNvbXBhdC5jICAgfCAgNSArKysrKworIG9wdGlvbnMuYyAgfCAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2hlY2tzdW0uYyBiL2NoZWNrc3VtLmMKK2luZGV4IGExYzJhYTIuLjkzM2I1MTQgMTAwNjQ0CistLS0gYS9jaGVja3N1bS5jCisrKysgYi9jaGVja3N1bS5jCitAQCAtMjMsNiArMjMsNyBAQAorIAorIGV4dGVybiBpbnQgY2hlY2tzdW1fc2VlZDsKKyBleHRlcm4gaW50IHByb3RvY29sX3ZlcnNpb247CisrZXh0ZXJuIGludCBwcm9wZXJfc2VlZF9vcmRlcjsKKyAKKyAvKgorICAgYSBzaW1wbGUgMzIgYml0IGNoZWNrc3VtIHRoYXQgY2FuIGJlIHVwYWR0ZWQgZnJvbSBlaXRoZXIgZW5kCitAQCAtNTQsMTAgKzU1LDE4IEBAIHZvaWQgZ2V0X2NoZWNrc3VtMihjaGFyICpidWYsIGludDMyIGxlbiwgY2hhciAqc3VtKQorIAlpZiAocHJvdG9jb2xfdmVyc2lvbiA+PSAzMCkgeworIAkJdWNoYXIgc2VlZGJ1Zls0XTsKKyAJCW1kNV9iZWdpbigmbSk7CistCQltZDVfdXBkYXRlKCZtLCAodWNoYXIgKilidWYsIGxlbik7CistCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworLQkJCVNJVkFMdShzZWVkYnVmLCAwLCBjaGVja3N1bV9zZWVkKTsKKy0JCQltZDVfdXBkYXRlKCZtLCBzZWVkYnVmLCA0KTsKKysJCWlmIChwcm9wZXJfc2VlZF9vcmRlcikgeworKwkJCWlmIChjaGVja3N1bV9zZWVkKSB7CisrCQkJCVNJVkFMdShzZWVkYnVmLCAwLCBjaGVja3N1bV9zZWVkKTsKKysJCQkJbWQ1X3VwZGF0ZSgmbSwgc2VlZGJ1ZiwgNCk7CisrCQkJfQorKwkJCW1kNV91cGRhdGUoJm0sICh1Y2hhciAqKWJ1ZiwgbGVuKTsKKysJCX0gZWxzZSB7CisrCQkJbWQ1X3VwZGF0ZSgmbSwgKHVjaGFyICopYnVmLCBsZW4pOworKwkJCWlmIChjaGVja3N1bV9zZWVkKSB7CisrCQkJCVNJVkFMdShzZWVkYnVmLCAwLCBjaGVja3N1bV9zZWVkKTsKKysJCQkJbWQ1X3VwZGF0ZSgmbSwgc2VlZGJ1ZiwgNCk7CisrCQkJfQorIAkJfQorIAkJbWQ1X3Jlc3VsdCgmbSwgKHVjaGFyICopc3VtKTsKKyAJfSBlbHNlIHsKK2RpZmYgLS1naXQgYS9jb21wYXQuYyBiL2NvbXBhdC5jCitpbmRleCAyNDU0OTM3Li5mODlkNDY2IDEwMDY0NAorLS0tIGEvY29tcGF0LmMKKysrKyBiL2NvbXBhdC5jCitAQCAtMjcsNiArMjcsNyBAQCBpbnQgaW5jX3JlY3Vyc2UgPSAwOworIGludCBjb21wYXRfZmxhZ3MgPSAwOworIGludCB1c2Vfc2FmZV9pbmNfZmxpc3QgPSAwOworIGludCB3YW50X3hhdHRyX29wdGltID0gMDsKKytpbnQgcHJvcGVyX3NlZWRfb3JkZXIgPSAwOworIAorIGV4dGVybiBpbnQgYW1fc2VydmVyOworIGV4dGVybiBpbnQgYW1fc2VuZGVyOworQEAgLTc4LDYgKzc5LDcgQEAgaW50IGZpbGVzZnJvbV9jb252ZXJ0ID0gMDsKKyAjZGVmaW5lIENGX1NZTUxJTktfSUNPTlYgKDE8PDIpCisgI2RlZmluZSBDRl9TQUZFX0ZMSVNUCSAoMTw8MykKKyAjZGVmaW5lIENGX0FWT0lEX1hBVFRSX09QVElNICgxPDw0KQorKyNkZWZpbmUgQ0ZfQ0hLU1VNX1NFRURfRklYICgxPDw1KQorIAorIHN0YXRpYyBjb25zdCBjaGFyICpjbGllbnRfaW5mbzsKKyAKK0BAIC0yNzEsMTIgKzI3MywxNSBAQCB2b2lkIHNldHVwX3Byb3RvY29sKGludCBmX291dCxpbnQgZl9pbikKKyAJCQkJY29tcGF0X2ZsYWdzIHw9IENGX1NBRkVfRkxJU1Q7CisgCQkJaWYgKGxvY2FsX3NlcnZlciB8fCBzdHJjaHIoY2xpZW50X2luZm8sICd4JykgIT0gTlVMTCkKKyAJCQkJY29tcGF0X2ZsYWdzIHw9IENGX0FWT0lEX1hBVFRSX09QVElNOworKwkJCWlmIChsb2NhbF9zZXJ2ZXIgfHwgc3RyY2hyKGNsaWVudF9pbmZvLCAnQycpICE9IE5VTEwpCisrCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9DSEtTVU1fU0VFRF9GSVg7CisgCQkJd3JpdGVfYnl0ZShmX291dCwgY29tcGF0X2ZsYWdzKTsKKyAJCX0gZWxzZQorIAkJCWNvbXBhdF9mbGFncyA9IHJlYWRfYnl0ZShmX2luKTsKKyAJCS8qIFRoZSBpbmNfcmVjdXJzZSB2YXIgTVVTVCBiZSBzZXQgdG8gMCBvciAxLiAqLworIAkJaW5jX3JlY3Vyc2UgPSBjb21wYXRfZmxhZ3MgJiBDRl9JTkNfUkVDVVJTRSA/IDEgOiAwOworIAkJd2FudF94YXR0cl9vcHRpbSA9IHByb3RvY29sX3ZlcnNpb24gPj0gMzEgJiYgIShjb21wYXRfZmxhZ3MgJiBDRl9BVk9JRF9YQVRUUl9PUFRJTSk7CisrCQlwcm9wZXJfc2VlZF9vcmRlciA9IGNvbXBhdF9mbGFncyAmIENGX0NIS1NVTV9TRUVEX0ZJWCA/IDEgOiAwOworIAkJaWYgKGFtX3NlbmRlcikgeworIAkJCXJlY2VpdmVyX3N5bWxpbmtfdGltZXMgPSBhbV9zZXJ2ZXIKKyAJCQkgICAgPyBzdHJjaHIoY2xpZW50X2luZm8sICdMJykgIT0gTlVMTAorZGlmZiAtLWdpdCBhL29wdGlvbnMuYyBiL29wdGlvbnMuYworaW5kZXggMTljMmI3ZC4uNDEyOGI1OSAxMDA2NDQKKy0tLSBhL29wdGlvbnMuYworKysrIGIvb3B0aW9ucy5jCitAQCAtMjUwMyw2ICsyNTAzLDcgQEAgdm9pZCBzZXJ2ZXJfb3B0aW9ucyhjaGFyICoqYXJncywgaW50ICphcmdjX3ApCisgI2VuZGlmCisgCQlhcmdzdHJbeCsrXSA9ICdmJzsgLyogZmxpc3QgSS9PLWVycm9yIHNhZmV0eSBzdXBwb3J0ICovCisgCQlhcmdzdHJbeCsrXSA9ICd4JzsgLyogeGF0dHIgaGFyZGxpbmsgb3B0aW1pemF0aW9uIG5vdCBkZXNpcmVkICovCisrCQlhcmdzdHJbeCsrXSA9ICdDJzsgLyogc3VwcG9ydCBjaGVja3N1bSBzZWVkIG9yZGVyIGZpeCAqLworIAl9CisgCisgCWlmICh4ID49IChpbnQpc2l6ZW9mIGFyZ3N0cikgeyAvKiBOb3QgcG9zc2libGUuLi4gKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWYyNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJGaWxlIHN5bmNocm9uaXphdGlvbiB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvYnVnemlsbGEuaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCisjIEdQTHYyKyAoPDwgMy4wLjApLCBHUEx2MysgKD49IDMuMC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworIyBuZWVkcyB0byBhZGQgYWNsIGFuZCBhdHRyCitERVBFTkRTID0gInBvcHQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9mdHAvcnN5bmMvc3JjL3JzeW5jLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yc3luY2QuY29uZiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JzeW5jZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9Cit9CisKK0VYVFJBX09FTUFLRT0nU1RSSVA9IiInCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18yLjYuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTRjNzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18yLjYuOS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkZpbGUgc3luY2hyb25pemF0aW9uIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9idWd6aWxsYS5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKKyMgbmVlZHMgdG8gYWRkIGFjbCBhbmQgYXR0cgorREVQRU5EUyA9ICJwb3B0IgorCitTUkNfVVJJID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvZnRwL3JzeW5jL3NyYy9yc3luYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JzeW5jZC5jb25mIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTk2ZDhkODgzMWRiY2ExNzkxMDA5NGU1NmRjYjU5NDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2E0MzczMDFiZWNkODkwZTczMzAwYmM2OWEzOTE4OWZmMTU2NGJhYTc2MTk0OGZmMTQ5YjNkZDdiZGU2MzNmOSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JzeW5jZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9Cit9CisKK0VYVFJBX09FTUFLRT0nU1RSSVA9IiInCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmQ1YTlkNGM0ZDNhZjI1Y2Q2OGZkODNlOGE4Y2IwOWMiCisKK1BSID0gInI0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMy4xLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzRjZGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMy4xLjEuYmIKQEAgLTAsMCArMSwzMCBAQAorcmVxdWlyZSByc3luYy5pbmMKKworCitTUkNfVVJJICs9ICJmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNvbXBsYWluLWlmLWFuLWluYy1yZWN1cnNpdmUtcGF0aC1pcy1ub3QtcmlnaHQtZm9yLWkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDNiZDY2NzZmMGI0MDQzMjZlZWUyZDYzYmUzY2RjZmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RlNDM2NGZjZjVmZTQyZjNiZGI1MTQ0MTdmMWM0MGQxMGJiY2E4OTZhYmU3ZTdmMmM1ODFjNmVhMDhhMjYyMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImFjbCBhdHRyIgorUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbC1zdXBwb3J0LC0tZGlzYWJsZS1hY2wtc3VwcG9ydCxhY2wsIgorUEFDS0FHRUNPTkZJR1thdHRyXSA9ICItLWVuYWJsZS14YXR0ci1zdXBwb3J0LC0tZGlzYWJsZS14YXR0ci1zdXBwb3J0LGF0dHIsIgorCisjIHJzeW5jIDMuMCB1c2VzIGNvbmZpZ3VyZS5zaCBpbnN0ZWFkIG9mIGNvbmZpZ3VyZSwgYW5kCisjIG1ha2VmaWxlIGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIGNvbmZpZ3VyZS5zaAorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vY29uZmlndXJlICR7U30vY29uZmlndXJlLnNoCisJY3AgLWYgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KKworCSMgQnkgZGVmYXVsdCwgaWYgY3Jvc3Njb21waWxpbmcsIHJzeW5jIGRpc2FibGVzIGEgbnVtYmVyIG9mCisJIyBjYXBhYmlsaXRpZXMsIGhhcmRsaW5raW5nIHN5bWxpbmtzIGFuZCBzcGVjaWFsIGZpbGVzIChpLmUuIGRldmljZXMpCisJZXhwb3J0IHJzeW5jX2N2X2Nhbl9oYXJkbGlua19zcGVjaWFsPXllcworCWV4cG9ydCByc3luY19jdl9jYW5faGFyZGxpbmtfc3ltbGluaz15ZXMKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisJY3AgLWYgJHtTfS9jb25maWd1cmUgJHtTfS9jb25maWd1cmUuc2gKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWE3ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiQW4gaW50ZXJwcmV0ZXIgb2Ygb2JqZWN0LW9yaWVudGVkIHNjcmlwdGluZyBsYW5ndWFnZSIKK0RFU0NSSVBUSU9OID0gIlJ1YnkgaXMgYW4gaW50ZXJwcmV0ZWQgc2NyaXB0aW5nIGxhbmd1YWdlIGZvciBxdWljayBcCithbmQgZWFzeSBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcuIEl0IGhhcyBtYW55IGZlYXR1cmVzIHRvIHByb2Nlc3MgXAordGV4dCBmaWxlcyBhbmQgdG8gZG8gc3lzdGVtIG1hbmFnZW1lbnQgdGFza3MgKGFzIGluIFBlcmwpLiBcCitJdCBpcyBzaW1wbGUsIHN0cmFpZ2h0LWZvcndhcmQsIGFuZCBleHRlbnNpYmxlLiBcCisiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnJ1YnktbGFuZy5vcmcvIgorU0VDVElPTiA9ICJkZXZlbC9ydWJ5IgorTElDRU5TRSA9ICJSdWJ5IHwgQlNEIHwgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9ODM3YjMyNTkzNTE3YWU0OGI5YzNiNWM4N2E1ZDI4OGMgXAorICAgIGZpbGU6Ly9CU0RMO21kNT0xOWFhZjY1Yzg4YTQwYjUwOGQxN2FlNGJlNTM5YzRiNVwKKyAgICBmaWxlOi8vR1BMO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2M1wKKyAgICBmaWxlOi8vTEVHQUw7bWQ1PWM0NDBhZGI1NzViYTRlNmUyMzQ0YzI2MzBiNmE1NTg0XAorIgorCitERVBFTkRTID0gInJ1YnktbmF0aXZlIHpsaWIgb3BlbnNzbCB0Y2wgbGlieWFtbCBkYiBnZGJtIHJlYWRsaW5lIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieWFtbC1uYXRpdmUiCisKK1NIUlRfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCitTUkNfVVJJID0gImh0dHA6Ly9jYWNoZS5ydWJ5LWxhbmcub3JnL3B1Yi9ydWJ5LyR7U0hSVF9WRVJ9L3J1YnktJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2V4dG1rLnBhdGNoIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworCisjIFRoaXMgc25pcHBldCBsZXRzIGNvbXBpbGVkIGV4dGVuc2lvbnMgd2hpY2ggcmVseSBvbiBleHRlcm5hbCBsaWJyYXJpZXMsCisjIHN1Y2ggYXMgemxpYiwgY29tcGlsZSBwcm9wZXJseS4gIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gd2hlbiBleHRtay5yYgorIyBydW5zLCBpdCB1c2VzIHRoZSBuYXRpdmUgbGlicmFyaWVzIGluc3RlYWQgb2YgdGhlIHRhcmdldCBsaWJyYXJpZXMsIGFuZCBzbworIyBub25lIG9mIHRoZSBsaW5raW5nIG9wZXJhdGlvbnMgc3VjY2VlZCAtLSB3aGljaCBtYWtlcyBleHRjb25mLnJiIHRoaW5rCisjIHRoYXQgdGhlIGxpYnJhcmllcyBhcmVuJ3QgYXZhaWxhYmxlIGFuZCBoZW5jZSB0aGF0IHRoZSBleHRlbnNpb24gY2FuJ3QgYmUKKyMgYnVpbHQuCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAicyMlJVRBUkdFVF9DRkxBR1MlJSMkVEFSR0VUX0NGTEFHUyM7IHMjJSVUQVJHRVRfTERGTEFHUyUlIyRUQVJHRVRfTERGTEFHUyMiICR7U30vY29tbW9uLm1rCisgICAgcm0gLXJmICR7U30vcnVieS8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjY4NDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLXJ1IHJ1YnktMS44LjctcDI0OC5vcmlnL2V4dC9leHRtay5yYiBydWJ5LTEuOC43LXAyNDgvZXh0L2V4dG1rLnJiCistLS0gcnVieS0xLjguNy1wMjQ4Lm9yaWcvZXh0L2V4dG1rLnJiCTIwMDktMTItMjQgMDM6MDE6NTguMDAwMDAwMDAwIC0wNjAwCisrKysgcnVieS0xLjguNy1wMjQ4L2V4dC9leHRtay5yYgkyMDEwLTAyLTEyIDE1OjU1OjI3LjM3MDA2MTU1OCAtMDYwMAorQEAgLTM1NCw4ICszNTQsOCBAQAorICAgJHJ1YnkgPSAnJCh0b3BkaXIpL21pbmlydWJ5JyArIEVYRUVYVAorIGVuZAorICRydWJ5IDw8ICIgLUknJCh0b3BkaXIpJyIKKyskcnVieSA8PCAiIC1JJyQodG9wX3NyY2RpcikvbGliJyIKKyB1bmxlc3MgQ1JPU1NfQ09NUElMSU5HCistICAkcnVieSA8PCAiIC1JJyQodG9wX3NyY2RpcikvbGliJyIKKyAgICRydWJ5IDw8ICIgLUknJChleHRvdXQpLyQoYXJjaCknIC1JJyQoZXh0b3V0KS9jb21tb24nIiBpZiAkZXh0b3V0CisgICAkcnVieSA8PCAiIC1JLi8tIC1JJyQodG9wX3NyY2RpcikvZXh0JyAtcnB1cmVsaWIucmIiCisgICBFTlZbIlJVQllMSUIiXSA9ICItIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Yzk0M2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIKQEAgLTAsMCArMSw0MiBAQAorcmVxdWlyZSBydWJ5LmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiMzI2ZTk5ZGRjNzUzODFjN2I1MGM4NWY3MDg5ZjMyNjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZmYzBmMzE3ZTQyOWU2YjI5ZDRhOThhYzUyMWMzY2U2NTQ4MWJmZDIyYThjZjg0NWZhMDJhN2IxMTNkOWI0NCIKKworIyBpdCdzIHVua25vd24gdG8gY29uZmlndXJlIHNjcmlwdCwgYnV0IHRoZW4gcGFzc2VkIHRvIGV4dGNvbmYucmIKKyMgbWF5YmUgaXQncyBub3QgcmVhbGx5IG5lZWRlZCBhcyB3ZSdyZSBoYXJkY29kaW5nIHRoZSByZXN1bHQgd2l0aAorIyAwMDAxLXNvY2tldC1leHRjb25mLWhhcmRjb2RlLXdpZGUtZ2V0YWRkci1pbmZvLXRlc3Qtb3V0Y28ucGF0Y2gKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUcgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS13aXRoLXZhbGdyaW5kPXllcywgLS13aXRoLXZhbGdyaW5kPW5vLCB2YWxncmluZCIKK1BBQ0tBR0VDT05GSUdbZ3BtXSA9ICItLXdpdGgtZ21wPXllcywgLS13aXRoLWdtcD1ubywgZ21wIgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICIsLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbywiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1kaXNhYmxlLXZlcnNpb25lZC1wYXRocyBcCisgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAtLWRpc2FibGUtZHRyYWNlIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLWxvYWQtcmVsYXRpdmUgXAorIgorCitFWFRSQV9PRU1BS0UgPSAiIFwKKyAgICBMSUJSVUJZQVJHPSctbHJ1Ynktc3RhdGljJyBcCisiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3J1YnlnZW1zIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3JpIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ydWJ5LyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3J1YnkvKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ydWJ5LyovKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ydWJ5LyovKi8qLyovLmRlYnVnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNhOGUxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgMjAwNyBPcGVuZWRoYW5kIEx0ZC4KKyMKKyMgQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KKyMKKworIyBUaGUgZm9sbG93aW5nIHNjcmlwdCB3aWxsIHJ1biBhbGwgdGhlIHNjcmlwdGxldHMgZm91bmQgaW4gI1NZU0NPTkZESVIjL2RlYi1wb3N0aW5zdHMsCisjICNTWVNDT05GRElSIy9pcGstcG9zdGluc3RzIG9yICNTWVNDT05GRElSIy9ycG0tcG9zaW5zdHMuCisKKyMgdGhlIG9yZGVyIG9mIHRoaXMgbGlzdCBpcyBpbXBvcnRhbnQsIGRvIG5vdCBjaGFuZ2UhCitiYWNrZW5kX2xpc3Q9InJwbSBkZWIgaXBrIgorCitwbV9pbnN0YWxsZWQ9ZmFsc2UKKworZm9yIHBtIGluICRiYWNrZW5kX2xpc3Q7IGRvCisJcGlfZGlyPSIjU1lTQ09ORkRJUiMvJHBtLXBvc3RpbnN0cyIKKworCVsgLWQgJHBpX2RpciBdICYmIGJyZWFrCisKKwljYXNlICRwbSBpbgorCQkiZGViIikKKwkJCWlmIFsgLXMgIiNMT0NBTFNUQVRFRElSIy9saWIvZHBrZy9zdGF0dXMiIF07IHRoZW4KKwkJCQlwbV9pbnN0YWxsZWQ9dHJ1ZQorCQkJCWJyZWFrCisJCQlmaQorCQkJOzsKKworCQkiaXBrIikKKwkJCWlmIFsgLXMgIi92YXIvbGliL29wa2cvc3RhdHVzIiBdOyB0aGVuCisJCQkJcG1faW5zdGFsbGVkPXRydWUKKwkJCQlicmVhaworCQkJZmkKKwkJCTs7CisJZXNhYworZG9uZQorCityZW1vdmVfcmNzZF9saW5rICgpIHsKKwlpZiBbIC1uICJgd2hpY2ggdXBkYXRlLXJjLmRgIiBdOyB0aGVuCisJCXVwZGF0ZS1yYy5kIC1mIHJ1bi1wb3N0aW5zdHMgcmVtb3ZlCisJZmkKK30KKworaWYgWyAteiAiJHBpX2RpciIgXTsgdGhlbgorCXJlbW92ZV9yY3NkX2xpbmsKKwlleGl0IDAKK2ZpCisKK1sgLWUgI1NZU0NPTkZESVIjL2RlZmF1bHQvcG9zdGluc3QgXSAmJiAuICNTWVNDT05GRElSIy9kZWZhdWx0L3Bvc3RpbnN0CisKK2lmIFsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdOyB0aGVuCisJcm0gLWYgJExPR0ZJTEUKKwlhcHBlbmRfbG9nPSI+PiRMT0dGSUxFIDI+JjEiCitmaQorCitleGVjX3Bvc3RpbnN0X3NjcmlwdGxldHMoKSB7CisJZm9yIGkgaW4gYGxzICRwaV9kaXJgOyBkbworCQlpPSRwaV9kaXIvJGkKKwkJZWNobyAiUnVubmluZyBwb3N0aW5zdCAkaS4uLiIKKwkJWyAiJFBPU1RJTlNUX0xPR0dJTkciID0gIjEiIF0gJiYgZXZhbCBlY2hvICJSdW5uaW5nIHBvc3RpbnN0ICRpLi4uIiAkYXBwZW5kX2xvZworCQlpZiBbIC14ICRpIF07IHRoZW4KKwkJCWV2YWwgc2ggLWMgJGkgJGFwcGVuZF9sb2cKKwkJCXJtICRpCisJCWVsc2UKKwkJCWVjaG8gIkVSUk9SOiBwb3N0aW5zdCAkaSBmYWlsZWQuIgorCQkJWyAiJFBPU1RJTlNUX0xPR0dJTkciID0gIjEiIF0gJiYgZXZhbCBlY2hvICJFUlJPUjogcG9zdGluc3QgJGkgZmFpbGVkLiIgJGFwcGVuZF9sb2cKKwkJCXJlbW92ZV9waV9kaXI9MAorCQlmaQorCWRvbmUKK30KKworcmVtb3ZlX3BpX2Rpcj0xCitpZiAkcG1faW5zdGFsbGVkOyB0aGVuCisJY2FzZSAkcG0gaW4KKwkJImlwayIpCisJCQlldmFsIG9wa2cgY29uZmlndXJlICRhcHBlbmRfbG9nCisJCQk7OworCisJCSJkZWIiKQorCQkJZXZhbCBkcGtnIC0tY29uZmlndXJlIC1hICRhcHBlbmRfbG9nCisJCQk7OworCWVzYWMKK2Vsc2UKKwlleGVjX3Bvc3RpbnN0X3NjcmlwdGxldHMKK2ZpCisKKyMgc2luY2UgYWxsIHBvc3RpbnN0YWxscyBleGVjdXRlZCBzdWNjZXNzZnVsbHksIHJlbW92ZSB0aGUgcG9zdGluc3RhbGxzIGRpcmVjdG9yeQorIyBhbmQgdGhlIHJjUy5kIGxpbmsKK2lmIFsgJHJlbW92ZV9waV9kaXIgPSAxIF07IHRoZW4KKwlybSAtcmYgJHBpX2RpcgorCXJlbW92ZV9yY3NkX2xpbmsKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNhMWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuaW5pdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCitydW4tcG9zdGluc3RzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWEwNDM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZQpAQCAtMCwwICsxLDE2IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJ1biBwZW5kaW5nIHBvc3RpbnN0cworRGVmYXVsdERlcGVuZGVuY2llcz1ubworQWZ0ZXI9c3lzdGVtZC1yZW1vdW50LWZzLnNlcnZpY2Ugc3lzdGVtZC10bXBmaWxlcy1zZXR1cC5zZXJ2aWNlIHRtcC5tb3VudAorQmVmb3JlPXN5c2luaXQudGFyZ2V0CitDb25kaXRpb25QYXRoRXhpc3RzR2xvYj0jU1lTQ09ORkRJUiMvKi1wb3N0aW5zdHMKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0V4ZWNTdGFydD0jU0JJTkRJUiMvcnVuLXBvc3RpbnN0cworRXhlY1N0YXJ0UG9zdD0jQkFTRV9CSU5ESVIjL3N5c3RlbWN0bCBkaXNhYmxlIHJ1bi1wb3N0aW5zdHMuc2VydmljZQorUmVtYWluQWZ0ZXJFeGl0PU5vCitUaW1lb3V0U2VjPTAKKworW0luc3RhbGxdCitXYW50ZWRCeT1zeXNpbml0LnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0c18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjOTRlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0c18xLjAuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJSdW5zIHBvc3RpbnN0YWxsIHNjcmlwdHMgb24gZmlyc3QgYm9vdCBvZiB0aGUgdGFyZ2V0IGRldmljZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitQUiA9ICJyOSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3J1bi1wb3N0aW5zdHMgXAorICAgICAgICAgICBmaWxlOi8vcnVuLXBvc3RpbnN0cy5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wb3N0aW5zdHMuc2VydmljZSIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2ggc3lzdGVtZCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAicnVuLXBvc3RpbnN0cyIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IFMgLiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInJ1bi1wb3N0aW5zdHMuc2VydmljZSIKKworZG9fY29uZmlndXJlKCkgeworCToKK30KKworZG9fY29tcGlsZSAoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ydW4tcG9zdGluc3RzICR7RH0ke3NiaW5kaXJ9LworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnVuLXBvc3RpbnN0cy5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9ydW4tcG9zdGluc3RzCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3J1bi1wb3N0aW5zdHMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKworCXNlZCAtaSAtZSAnczojU1lTQ09ORkRJUiM6JHtzeXNjb25mZGlyfTpnJyBcCisgICAgICAgICAgICAgICAtZSAnczojU0JJTkRJUiM6JHtzYmluZGlyfTpnJyBcCisgICAgICAgICAgICAgICAtZSAnczojQkFTRV9CSU5ESVIjOiR7YmFzZV9iaW5kaXJ9OmcnIFwKKyAgICAgICAgICAgICAgIC1lICdzOiNMT0NBTFNUQVRFRElSIzoke2xvY2Fsc3RhdGVkaXJ9OmcnIFwKKyAgICAgICAgICAgICAgICR7RH0ke3NiaW5kaXJ9L3J1bi1wb3N0aW5zdHMgXAorICAgICAgICAgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcnVuLXBvc3RpbnN0cy5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9hdXRvaGVsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2F1dG9oZWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzliMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9hdXRvaGVsbC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitQYXRjaCBvYnRhaW5lZCBmcm9tIE9wZW5FbWJlZGRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gc2dtbC1jb21tb24tMC42LjMvYmluL01ha2VmaWxlLmFtfmF1dG9oZWxsLnBhdGNoCTIwMDEtMDEtMzAgMTU6NDI6MjEuMDAwMDAwMDAwICswMTAwCisrKysgc2dtbC1jb21tb24tMC42LjMvYmluL01ha2VmaWxlLmFtCTIwMDQtMDYtMTcgMTE6NTE6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMSw2ICsxLDUgQEAKKyBwcmltaXRpdmVfc2NyaXB0cyA9IHNnbWx3aGljaAorIAorLWJpbmRpciA9ICQocHJlZml4KS9iaW4KKyBiaW5fU0NSSVBUUyA9IGluc3RhbGwtY2F0YWxvZyAkKHByaW1pdGl2ZV9zY3JpcHRzKQorIAorIEVYVFJBX0RJU1QgPSAgaW5zdGFsbC1jYXRhbG9nLmluICQocHJpbWl0aXZlX3NjcmlwdHMpCistLS0gL2Rldi9udWxsCTIwMDMtMDktMjMgMTk6NTk6MjIuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvYmluL3NnbWx3aGljaC5pbgkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3IEBACisrIyEvYmluL3NoCisrIyBMb2NhdGlvbiBvZiB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGNvbnNpc3RlbmN5IHdpdGggbm9uLUxTQiBwbGF0Zm9ybXMKKysjIFNlbmQgYW55IGNvbW1lbnRzIHRvIEVyaWMgQmlzY2hvZmYgPGVyaWNAY2FsZGVyYS5kZT4KKysjIFRoaXMgcHJvZ3JhbSBpcyB1bmRlciBHUEwgbGljZW5zZS4gU2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscy4KKysKKytlY2hvICJAc3lzY29uZmRpckAvc2dtbC9zZ21sLmNvbmYiCisrIyBTaW1wbGUsIGlzbid0IGl0PyA7LSkKKy0tLSAvZGV2L251bGwJMjAwMy0wOS0yMyAxOTo1OToyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9jb25maWcvc2dtbC5jb25mLmluCTIwMDQtMDYtMTcgMTE6NTE6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIgQEAKKytTR01MX0JBU0VfRElSPUBkYXRhZGlyQC9zZ21sCisrU0dNTF9DQVRBTE9HU19ESVI9QHN5c2NvbmZkaXJAL3NnbWwKKy0tLSBzZ21sLWNvbW1vbi0wLjYuMy9jb25maWd1cmUuaW5+YXV0b2hlbGwucGF0Y2gJMjAwMS0wNS0yNSAxODo0MDo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9jb25maWd1cmUuaW4JMjAwNC0wNi0xNyAxMTo1MzoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zLDExICszLDYgQEAKKyAKKyBBTV9JTklUX0FVVE9NQUtFKHNnbWwtY29tbW9uLCAwLjYuMykKKyAKKy1kb2NkaXI9JyQocHJlZml4KS9kb2MnCistQUNfU1VCU1QoZG9jZGlyKQorLQorLWRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorLQorIGRubCBDaGVja3MgZm9yIGxpYnJhcmllcy4KKyAKKyBkbmwgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitAQCAtMTgsNiArMTMsNSBAQAorIAorIEFDX09VVFBVVChNYWtlZmlsZSBcCisgICAgICAgICAgIGJpbi9NYWtlZmlsZSBiaW4vaW5zdGFsbC1jYXRhbG9nIFwKKy0gICAgICAgICAgY29uZmlnL01ha2VmaWxlIFwKKy0gICAgICAgICAgZG9jL01ha2VmaWxlIGRvYy9IVE1ML01ha2VmaWxlIGRvYy9tYW4vTWFrZWZpbGUgZG9jL3JlZmVudHJ5L01ha2VmaWxlIFwKKysgICAgICAgICAgY29uZmlnL01ha2VmaWxlIGNvbmZpZy9zZ21sLmNvbmYgYmluL3NnbWx3aGljaCBcCisgICAgICAgICAgIHNnbWwtaXNvLWVudGl0aWVzL01ha2VmaWxlIHhtbC1pc28tZW50aXRpZXMvTWFrZWZpbGUpCisKKy0tLSBzZ21sLWNvbW1vbi0wLjYuMy9NYWtlZmlsZS5hbX5uby1kb2NzCTIwMDEtMDUtMjUgMTg6MjI6MDEuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvTWFrZWZpbGUuYW0JMjAwNC0wNi0xNyAxMTo0OTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLVNVQkRJUlMgPSBiaW4gY29uZmlnIGRvYyBzZ21sLWlzby1lbnRpdGllcyB4bWwtaXNvLWVudGl0aWVzCisrU1VCRElSUyA9IGJpbiBjb25maWcgc2dtbC1pc28tZW50aXRpZXMgeG1sLWlzby1lbnRpdGllcworIAorIHNnbWxjb2RpciA9ICQocHJlZml4KS9zaGFyZS9zZ21sCisgc2dtbGNvX0RBVEEgPSB4bWwuZGNsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9saWNlbnNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGIzZjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvbGljZW5zZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitUaGUgQ09QWUlORyBmaWxlIHNnbWwtY29tbW9uIHNoaXBzIHdpdGggaXMganVzdCBhIHN5bWxpbmsgdG8KKy91c3Ivc2hhcmUvYXV0b21ha2UvQ09QWUlORywgd2hpY2ggbWVhbnMgd2UgY2FuJ3QgdmVyaWZ5IGl0Cit1c2luZyBvdXIgbm9ybWFsIG1lYW5zLiBXZSB3b3JrYXJvdW5kIHRoaXMgYnkgdXNpbmcgdGhpcyBwYXRjaAordG8gY3JlYXRlIG91ciBvd24gbGljZW5zZSBmaWxlLiAKKworVXBzdHJlYW0gd2FzIG5vdGlmaWVkIGFib3V0IHRoaXMgb24gMjAxMS0wMS0yNC4gV2hlbiB1cGdyYWRpbmcKK3RoaXMgcmVjaXBlLCB0aGlzIHNob3VsZCBiZSBmaXhlZCBhbmQgeW91IHNob3VsZCByZW1vdmUgdGhpcworcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIHNnbWwtY29tbW9uLTAuNi4zLm9yaWcvTElDRU5TRS1HUEx2MiBzZ21sLWNvbW1vbi0wLjYuMy9MSUNFTlNFLUdQTHYyCistLS0gc2dtbC1jb21tb24tMC42LjMub3JpZy9MSUNFTlNFLUdQTHYyCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgc2dtbC1jb21tb24tMC42LjMvTElDRU5TRS1HUEx2MgkyMDExLTAxLTI4IDE3OjA1OjE3LjI5OTUyODAwMSAtMDgwMAorQEAgLTAsMCArMSwxMiBAQAorK0NvcHlyaWdodCAoQykgMTk5NyBDaHJpc3RpYW4gU2Nod2FyeiA8c2Nod2FyekBkZWJpYW4ub3JnPi4KKytDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBBcmRvIHZhbiBSYW5nZWxyb29paiA8YXJkb0BkZWJpYW4ub3JnPgorKworK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyt2ZXJzaW9uLgorKworK1RoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IHdpdGhvdXQKKythbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBtZXJjaGFudGFiaWxpdHkgb3IKKytmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKytmb3IgbW9yZSBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NzUzNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJCYXNlIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIFNHTUwgYW5kIFhNTCIKK0RFU0NSSVBUSU9OID0gIlRoZSBzZ21sLWNvbW1vbiBwYWNrYWdlIGdhdGhlcnMgdmVyeSBiYXNpYyBcCitzdHVmZiBuZWNlc3NhcnkgdG8gd29yayB3aXRoIFNHTUwgYW5kIFhNTCwgc3VjaCBhcyB4bWwuZGNsLCBcCithIFNHTUwgZGVjbGFyYXRpb24gb2YgWE1MOyBpc28tZW50aXRpZXMsIGEgbGlzdCBvZiB0aGUgYmFzaWMgXAorU0dNTCBJU08gZW50aXRpZXM7IGFuZCBpbnN0YWxsLWNhdGFsb2csIGEgc2NyaXB0IHVzZWQgdG8gXAorYWRkIGVudHJpZXMgdG8gKG9yIHJlbW92ZSBlbnRyaWVzIGZyb20pIGNlbnRyYWxpemVkIGNhdGFsb2dzIFwKK3dob3NlIGVudHJpZXMgYXJlIHBvaW50ZXJzIHRvIFNHTUwgb3BlbiBjYXRhbG9ncywgXAorYXMgZGVmaW5lZCBieSBPQVNJUy4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2RvY2Jvb2stdG9vbHMvIgorTElDRU5TRSA9ICJHUEx2MisiCisjIFNlZSB0aGUgY29tbWVudHMgaW4gbGljZW5zZS5wYXRjaCB3aGVuIHVwZ3JhZGluZyB0aGlzIHJlY2lwZS4KKyMgVGhpcyBpcyBpbnRlZGVkIHRvIGJlIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLUdQTHYyO21kNT1hYjhhNTBhYmU4NmRmYzg1OWUxNDhiYWFlMDQzYzg5YiIKK1NFQ1RJT04gPSAiYmFzZSIKKworUFIgPSAicjEiCisKK3JlcXVpcmUgc2dtbC1jb21tb25fJHtQVn0uYmIKK2luaGVyaXQgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS9zZ21sLWNvbW1vbi0ke1BWfSIKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJzZ21sX2NvbW1vbl9uYXRpdmVfbWFuZ2xlIgorU1NUQVRFUE9TVElOU1RGVU5DUyArPSAic2dtbF9jb21tb25fc3N0YXRlX3Bvc3RpbnN0IgorQ0xFQU5GVU5DUyArPSAic2dtbF9jb21tb25fc3N0YXRlX2NsZWFuIgorCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgaW5zdGFsbC1jYXRhbG9nIHNjcmlwdCBjb250YWlucyBoYXJkLWNvZGVkIHJlZmVyZW5jZXMgdG8KKwkjIHtzeXNjb25mZGlyfS4gQ2hhbmdlIGl0IHRvICR7RH0ke3N5c2NvbmZkaXJ9LgorCXNlZCAtaSAtZSAic3wke3N5c2NvbmZkaXJ9L3NnbWx8JHtEfSR7c3lzY29uZmRpcn0vc2dtbHxnIiAke0R9JHtiaW5kaXJ9L2luc3RhbGwtY2F0YWxvZworCisJJHtEfSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cgXAorCQktLWFkZCAke0R9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCBcCisJCSR7RH0ke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cKKworCSMgVGhlIHNnbWwtZG9jYm9vay5jYXQgd2lsbCBiZSByZWdlbmVyYXRlZCBieSBzc3RhdGVfcG9zdGluc3QKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQKK30KKworc2dtbF9jb21tb25fbmF0aXZlX21hbmdsZSAoKSB7CisJIyBSZXZlcnQgYmFjayB0byAke3N5c2NvbmZkaXJ9IHBhdGggaW4gaW5zdGFsbC1jYXRhbG9nCisJc2VkIC1pIC1lICJzfCR7RH0ke3N5c2NvbmZkaXJ9L3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19CSU5ESVJ9L2luc3RhbGwtY2F0YWxvZworCSMgQ2hhbmdlIHBhdGggZnJvbSAke0R9JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nIHRvICR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyBpbiBzZ21sLWVudC5jYXQKKwlzZWQgLWkgLWUgInN8JHtEfSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZ3wke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2d8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorCSMgUmVtb3ZlICR7RH0gcGF0aCBmcm9tIGNhdGFsb2cgZmlsZSBjcmVhdGVkIGJ5IGluc3RhbGwtY2F0YWxvZyBzY3JpcHQKKwlzZWQgLWkgLWUgInN8JHtEfXx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cKK30KKworc2dtbF9jb21tb25fc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cgLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorCQlpZiBbIC1lICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIF07IHRoZW4KKwkJCWZvciBjYXRhbG9nIGluIGBhd2sgJ3twcmludCAkMn0nICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrYDsgZG8KKwkJCQlpZiBbICEgYGdyZXAgJGNhdGFsb2cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgMT4gL2Rldi9udWxsIDI+JjFgIF07IHRoZW4KKwkJCQkJJHtiaW5kaXJ9L2luc3RhbGwtY2F0YWxvZyBcCisJCQkJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCAkY2F0YWxvZworCQkJCWZpCisJCQlkb25lCisJCWZpCisJZmkKK30KKworc2dtbF9jb21tb25fc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJaWYgWyAtZiAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBdOyB0aGVuCisJCXNlZCAtaSAnL1wvc2dtbFwvc2dtbC1lbnQuY2F0L2QnICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0CisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uXzAuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb25fMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5ODY3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uXzAuNi4zLmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiQmFzZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBTR01MIGFuZCBYTUwiCitERVNDUklQVElPTiA9ICJUaGUgc2dtbC1jb21tb24gcGFja2FnZSBnYXRoZXJzIHZlcnkgYmFzaWMgXAorc3R1ZmYgbmVjZXNzYXJ5IHRvIHdvcmsgd2l0aCBTR01MIGFuZCBYTUwsIHN1Y2ggYXMgeG1sLmRjbCwgXAorYSBTR01MIGRlY2xhcmF0aW9uIG9mIFhNTDsgaXNvLWVudGl0aWVzLCBhIGxpc3Qgb2YgdGhlIGJhc2ljIFwKK1NHTUwgSVNPIGVudGl0aWVzOyBhbmQgaW5zdGFsbC1jYXRhbG9nLCBhIHNjcmlwdCB1c2VkIHRvIFwKK2FkZCBlbnRyaWVzIHRvIChvciByZW1vdmUgZW50cmllcyBmcm9tKSBjZW50cmFsaXplZCBjYXRhbG9ncyBcCit3aG9zZSBlbnRyaWVzIGFyZSBwb2ludGVycyB0byBTR01MIG9wZW4gY2F0YWxvZ3MsIFwKK2FzIGRlZmluZWQgYnkgT0FTSVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9kb2Nib29rLXRvb2xzLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorIyBTZWUgdGhlIGNvbW1lbnRzIGluIGxpY2Vuc2UucGF0Y2ggd2hlbiB1cGdyYWRpbmcgdGhpcyByZWNpcGUuCisjIFRoaXMgaXMgaW50ZWRlZCB0byBiZSBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1HUEx2MjttZDU9YWI4YTUwYWJlODZkZmM4NTllMTQ4YmFhZTA0M2M4OWIiCitTRUNUSU9OID0gImJhc2UiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZ0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9wdWIvZG9jYm9vay10b29scy9uZXctdHJpYWxzL1NPVVJDRVMvc2dtbC1jb21tb24tJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9oZWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpY2Vuc2UucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMDNjOTgyOGYyNDgyMGRmODZlNTVlNzg2MmUyODk3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZGM0MThjMWQzNjExMjNmZmM1ZTQ1ZDYxZjFiOTcyNTc5NDBhOGViMzVkMGJmYmJjNDkzMzgxY2M1YjFmOTU5IgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwkjIGluc3RhbGwtY2F0YWxvZyBzY3JpcHQgY29udGFpbnMgaGFyZGNvZGVkIHJlZmVyZW5jZXMgdG8gL2V0Yy9zZ21sCisJc2VkIC1pIC1lICdzfFwoWyAiXVwrXCkvZXRjL3NnbWx8XDEke3N5c2NvbmZkaXJ9L3NnbWx8ZycgYmluL2luc3RhbGwtY2F0YWxvZworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9zZ21sIgorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisgICAgaWYgWyAieCREIiA9ICJ4IiBdOyB0aGVuCisJaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCBcCisJCSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZworCisJaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0CisgICAgZWxzZQorCWlmICEgZ3JlcCAtcSAke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cgJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0OyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nIiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwlmaQorCWlmICEgZ3JlcCAtcSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0ICREJHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2c7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nCisJZmkKKworCWlmICEgZ3JlcCAtcSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0ICREJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQ7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0CisJZmkKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZzsgdGhlbgorCSAgICBlY2hvICJDQVRBTE9HICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nCisJZmkKKyAgICBmaQorfQorCitwa2dfcG9zdHJtXyR7UE59KCkgeworCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tcmVtb3ZlICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cKKworCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tcmVtb3ZlICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbHNwbC9zZ21sc3BsLW5hdGl2ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sc3BsL3NnbWxzcGwtbmF0aXZlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM0NjBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbHNwbC9zZ21sc3BsLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJBIHNpbXBsZSBwb3N0LXByb2Nlc3NvciBmb3IgU0dNTFMgYW5kIE5TR01MUyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9naXRwYW4vU0dNTFNwbSIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTg4MTA2NjlmMTNiODczNDg0NTllNjExZDMxYWI3NjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9naXRwYW4vU0dNTFNwbSBcCisgICAgICAgICAgIgorCitTUkNSRVYgPSAiNzE1OTViOWI1ZTM2YmZjMDAwNDY5OTVlMDU4OTI2YmQyNzc5M2ZlZiIKKworUFYgPSAiMS4xK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IG5hdGl2ZSBjcGFuCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGxuIC1zIHNnbWxzcGwucGwgJHtEfSR7YmluZGlyfS9zZ21sc3BsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29scy8wMDAxLW1rc3F1YXNoZnMuYy1nZXQtaW5saW5lLWZ1bmN0aW9ucy13b3JrLXdpdGgtQzk5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3F1YXNoZnMtdG9vbHMvc3F1YXNoZnMtdG9vbHMvMDAwMS1ta3NxdWFzaGZzLmMtZ2V0LWlubGluZS1mdW5jdGlvbnMtd29yay13aXRoLUM5OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWJhYjA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3F1YXNoZnMtdG9vbHMvc3F1YXNoZnMtdG9vbHMvMDAwMS1ta3NxdWFzaGZzLmMtZ2V0LWlubGluZS1mdW5jdGlvbnMtd29yay13aXRoLUM5OS5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorRnJvbSBhYzYyNjhlODQzYzQzMjg2ZWViZmYyYTEwNTIxODJjMjM5M2NkYjJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxNCBTZXAgMjAxNSAxMjozMTo0MiArMDgwMAorU3ViamVjdDogW1BBVENIXSBta3NxdWFzaGZzLmM6ICBnZXQgaW5saW5lIGZ1bmN0aW9ucyB3b3JrIHdpdGggYm90aCBnbnUxMSBhbmQgZ251ODkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FmdGVyIGdjYyB1cGdyYWRlZCB0byBnY2M1LCBhbmQgaWYgdGhlIGNvZGVzIGlzIGNvbXBpbGVkIHdpdGhvdXQgb3B0aW1pemF0aW9uKC1PMCksCithbmQgdGhlIGJlbG93IGVycm9yIHdpbGwgaGFwcGVuOgorCit8IG1rc3F1YXNoZnMubzogSW4gZnVuY3Rpb24gYGNyZWF0ZV9pbm9kZSc6Cit8IGdpdC9zcXVhc2hmcy10b29scy9ta3NxdWFzaGZzLmM6ODk3OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRfaW5vZGVfbm8nCit8IGdpdC9zcXVhc2hmcy10b29scy9ta3NxdWFzaGZzLmM6OTYwOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRfcGFyZW50X25vJworfCBnaXQvc3F1YXNoZnMtdG9vbHMvbWtzcXVhc2hmcy5jOjk4MzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZ2V0X3BhcmVudF9ubycKK3wgbWtzcXVhc2hmcy5vOiBJbiBmdW5jdGlvbiBgcmVhZGVyX3JlYWRfcHJvY2Vzcyc6Cit8IGdpdC9zcXVhc2hmcy10b29scy9ta3NxdWFzaGZzLmM6MjEzMjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgaXNfZnJhZ21lbnQnCit8IG1rc3F1YXNoZnMubzogSW4gZnVuY3Rpb24gYHJlYWRlcl9yZWFkX2ZpbGUnOgorfCBnaXQvc3F1YXNoZnMtdG9vbHMvbWtzcXVhc2hmcy5jOjIyMjg6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGlzX2ZyYWdtZW50JworfCBta3NxdWFzaGZzLm86IEluIGZ1bmN0aW9uIGBkaXJfc2Nhbic6Cit8IGdpdC9zcXVhc2hmcy10b29scy9ta3NxdWFzaGZzLmM6MzEwMTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY3JlYXRlX2Rpcl9lbnRyeScKKworZ2NjNSBkZWZhdWx0cyB0byAtc3RkPWdudTExIGluc3RlYWQgb2YgLXN0ZD1nbnU4OSwgYW5kIGl0IHJlcXVpcmVzIHRoYXQgZXhhY3RseSBvbmUgQworc291cmNlIGZpbGUgaGFzIHRoZSBjYWxsYWJsZSBjb3B5IG9mIHRoZSBpbmxpbmUgZnVuY3Rpb24uIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcKK3Byb2dyYW06CisKKyAgaW5saW5lIGludAorICBmb28gKHZvaWQpCisgIHsKKyAgICByZXR1cm4gNDI7CisgIH0KKworICBpbnQKKyAgbWFpbiAodm9pZCkKKyAgeworICAgIHJldHVybiBmb28gKCk7CisgIH0KKworVGhlIHByb2dyYW0gYWJvdmUgd2lsbCBub3QgbGluayB3aXRoIHRoZSBDOTkgaW5saW5lIHNlbWFudGljcywgYmVjYXVzZSBubyBvdXQtb2YtbGluZQorZnVuY3Rpb24gZm9vIGlzIGdlbmVyYXRlZC4gVG8gZml4IHRoaXMsIGVpdGhlciBtYXJrIHRoZSBmdW5jdGlvbiBmb28gYXMgc3RhdGljLCBvcgorYWRkIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb246CisgIHN0YXRpYyBpbmxpbmUgaW50IGZvbyAodm9pZCk7CisKK21vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG86IGh0dHBzOi8vZ2NjLmdudS5vcmcvZ2NjLTUvcG9ydGluZ190by5odG1sOworCitidXQgdGhlIHVzZSBvZiAiZXh0ZXJuIGlubGluZSIgd2lsbCBsZWFkIHRvIHRoZSBjb21waWxhdGlvbiBpc3N1ZSBpZiBnY2MgaXMgbm90CitnY2M1LCBhcyB0aGUgY29tbWl0IGluIG9lLWNvcmUgZDBhZjMwYzkyZmRlIFthbHNhLWxpYjogQ2hhbmdlIGZ1bmN0aW9uIHR5cGUgdG8KKyJzdGF0aWMgX19pbmxpbmVfXyJdCisgICAgImV4dGVybiBfX2lubGluZV9fIGZ1bmN0aW9uKCkiIGlzIHRoZSBpbmxpbmVkIHZlcnNpb24gdGhhdAorICAgIGNhbiBiZSB1c2VkIGluIHRoaXMgY29tcGlsYXRpb24gdW5pdCwgYnV0IHRoZXJlIHdpbGwgYmUgYW5vdGhlcgorICAgIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiBzb21ld2hlcmUsIHNvIGNvbXBpbGVyIHdpbGwgbm90IGVtaXQKKyAgICBhbnkgY29kZSBmb3IgdGhlIGZ1bmN0aW9uIGJvZHkuIFRoaXMgY2F1c2VzIHByb2JsZW0gaW4gLU8wLAorICAgIHdoZXJlIGZ1bmN0aW9ucyBhcmUgbmV2ZXIgaW5saW5lZCwgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgcHJlc2VydmVkLAorICAgIGJ1dCBsaW5rZXIgY2FuJ3QgZmluZCB0aGUgc3ltYm9sLCB0aHVzIHRoZSBlcnJvciBoYXBwZW5zLgorCitzbyByZXBsYWNlICJpbmxpbmUiIHdpdGggInN0YXRpYyBpbmxpbmUiIHRvIG1ha2UgaXQgd29yayB3aXRoIGJvdGggZ251MTEgYW5kIGdudTg5CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNxdWFzaGZzLXRvb2xzL21rc3F1YXNoZnMuYyB8IDIwICsrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3F1YXNoZnMtdG9vbHMvbWtzcXVhc2hmcy5jIGIvc3F1YXNoZnMtdG9vbHMvbWtzcXVhc2hmcy5jCitpbmRleCBkMjIxYzM1Li42YmJhMWQyIDEwMDY0NAorLS0tIGEvc3F1YXNoZnMtdG9vbHMvbWtzcXVhc2hmcy5jCisrKysgYi9zcXVhc2hmcy10b29scy9ta3NxdWFzaGZzLmMKK0BAIC04MjgsMTMgKzgyOCwxMyBAQCBjaGFyICpzdWJwYXRobmFtZShzdHJ1Y3QgZGlyX2VudCAqZGlyX2VudCkKKyB9CisgCisgCistaW5saW5lIHVuc2lnbmVkIGludCBnZXRfaW5vZGVfbm8oc3RydWN0IGlub2RlX2luZm8gKmlub2RlKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9pbm9kZV9ubyhzdHJ1Y3QgaW5vZGVfaW5mbyAqaW5vZGUpCisgeworIAlyZXR1cm4gaW5vZGUtPmlub2RlX251bWJlcjsKKyB9CisgCisgCistaW5saW5lIHVuc2lnbmVkIGludCBnZXRfcGFyZW50X25vKHN0cnVjdCBkaXJfaW5mbyAqZGlyKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9wYXJlbnRfbm8oc3RydWN0IGRpcl9pbmZvICpkaXIpCisgeworIAlyZXR1cm4gZGlyLT5kZXB0aCA/IGdldF9pbm9kZV9ubyhkaXItPmRpcl9lbnQtPmlub2RlKSA6IGlub2RlX25vOworIH0KK0BAIC0yMDI3LDcgKzIwMjcsNyBAQCBzdHJ1Y3QgZmlsZV9pbmZvICpkdXBsaWNhdGUobG9uZyBsb25nIGZpbGVfc2l6ZSwgbG9uZyBsb25nIGJ5dGVzLAorIH0KKyAKKyAKKy1pbmxpbmUgaW50IGlzX2ZyYWdtZW50KHN0cnVjdCBpbm9kZV9pbmZvICppbm9kZSkKKytzdGF0aWMgaW5saW5lIGludCBpc19mcmFnbWVudChzdHJ1Y3QgaW5vZGVfaW5mbyAqaW5vZGUpCisgeworIAlvZmZfdCBmaWxlX3NpemUgPSBpbm9kZS0+YnVmLnN0X3NpemU7CisgCitAQCAtMjk5NiwxMyArMjk5NiwxMyBAQCBzdHJ1Y3QgaW5vZGVfaW5mbyAqbG9va3VwX2lub2RlMihzdHJ1Y3Qgc3RhdCAqYnVmLCBpbnQgcHNldWRvLCBpbnQgaWQpCisgfQorIAorIAorLWlubGluZSBzdHJ1Y3QgaW5vZGVfaW5mbyAqbG9va3VwX2lub2RlKHN0cnVjdCBzdGF0ICpidWYpCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGVfaW5mbyAqbG9va3VwX2lub2RlKHN0cnVjdCBzdGF0ICpidWYpCisgeworIAlyZXR1cm4gbG9va3VwX2lub2RlMihidWYsIDAsIDApOworIH0KKyAKKyAKKy1pbmxpbmUgdm9pZCBhbGxvY19pbm9kZV9ubyhzdHJ1Y3QgaW5vZGVfaW5mbyAqaW5vZGUsIHVuc2lnbmVkIGludCB1c2VfdGhpcykKKytzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2NfaW5vZGVfbm8oc3RydWN0IGlub2RlX2luZm8gKmlub2RlLCB1bnNpZ25lZCBpbnQgdXNlX3RoaXMpCisgeworIAlpZiAoaW5vZGUtPmlub2RlX251bWJlciA9PSAwKSB7CisgCQlpbm9kZS0+aW5vZGVfbnVtYmVyID0gdXNlX3RoaXMgPyA6IGlub2RlX25vICsrOworQEAgLTMwMTMsNyArMzAxMyw3IEBAIGlubGluZSB2b2lkIGFsbG9jX2lub2RlX25vKHN0cnVjdCBpbm9kZV9pbmZvICppbm9kZSwgdW5zaWduZWQgaW50IHVzZV90aGlzKQorIH0KKyAKKyAKKy1pbmxpbmUgc3RydWN0IGRpcl9lbnQgKmNyZWF0ZV9kaXJfZW50cnkoY2hhciAqbmFtZSwgY2hhciAqc291cmNlX25hbWUsCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZGlyX2VudCAqY3JlYXRlX2Rpcl9lbnRyeShjaGFyICpuYW1lLCBjaGFyICpzb3VyY2VfbmFtZSwKKyAJY2hhciAqbm9uc3RhbmRhcmRfcGF0aG5hbWUsIHN0cnVjdCBkaXJfaW5mbyAqZGlyKQorIHsKKyAJc3RydWN0IGRpcl9lbnQgKmRpcl9lbnQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJfZW50KSk7CitAQCAtMzAzMSw3ICszMDMxLDcgQEAgaW5saW5lIHN0cnVjdCBkaXJfZW50ICpjcmVhdGVfZGlyX2VudHJ5KGNoYXIgKm5hbWUsIGNoYXIgKnNvdXJjZV9uYW1lLAorIH0KKyAKKyAKKy1pbmxpbmUgdm9pZCBhZGRfZGlyX2VudHJ5KHN0cnVjdCBkaXJfZW50ICpkaXJfZW50LCBzdHJ1Y3QgZGlyX2luZm8gKnN1Yl9kaXIsCisrc3RhdGljIGlubGluZSB2b2lkIGFkZF9kaXJfZW50cnkoc3RydWN0IGRpcl9lbnQgKmRpcl9lbnQsIHN0cnVjdCBkaXJfaW5mbyAqc3ViX2RpciwKKyAJc3RydWN0IGlub2RlX2luZm8gKmlub2RlX2luZm8pCisgeworIAlzdHJ1Y3QgZGlyX2luZm8gKmRpciA9IGRpcl9lbnQtPm91cl9kaXI7CitAQCAtMzA0Nyw3ICszMDQ3LDcgQEAgaW5saW5lIHZvaWQgYWRkX2Rpcl9lbnRyeShzdHJ1Y3QgZGlyX2VudCAqZGlyX2VudCwgc3RydWN0IGRpcl9pbmZvICpzdWJfZGlyLAorIH0KKyAKKyAKKy1pbmxpbmUgdm9pZCBhZGRfZGlyX2VudHJ5MihjaGFyICpuYW1lLCBjaGFyICpzb3VyY2VfbmFtZSwKKytzdGF0aWMgaW5saW5lIHZvaWQgYWRkX2Rpcl9lbnRyeTIoY2hhciAqbmFtZSwgY2hhciAqc291cmNlX25hbWUsCisgCWNoYXIgKm5vbnN0YW5kYXJkX3BhdGhuYW1lLCBzdHJ1Y3QgZGlyX2luZm8gKnN1Yl9kaXIsCisgCXN0cnVjdCBpbm9kZV9pbmZvICppbm9kZV9pbmZvLCBzdHJ1Y3QgZGlyX2luZm8gKmRpcikKKyB7CitAQCAtMzA1OSw3ICszMDU5LDcgQEAgaW5saW5lIHZvaWQgYWRkX2Rpcl9lbnRyeTIoY2hhciAqbmFtZSwgY2hhciAqc291cmNlX25hbWUsCisgfQorIAorIAorLWlubGluZSB2b2lkIGZyZWVfZGlyX2VudHJ5KHN0cnVjdCBkaXJfZW50ICpkaXJfZW50KQorK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2Rpcl9lbnRyeShzdHJ1Y3QgZGlyX2VudCAqZGlyX2VudCkKKyB7CisgCWlmKGRpcl9lbnQtPm5hbWUpCisgCQlmcmVlKGRpcl9lbnQtPm5hbWUpOworQEAgLTMwODAsNyArMzA4MCw3IEBAIGlubGluZSB2b2lkIGZyZWVfZGlyX2VudHJ5KHN0cnVjdCBkaXJfZW50ICpkaXJfZW50KQorIH0KKyAKKyAKKy1pbmxpbmUgdm9pZCBhZGRfZXhjbHVkZWQoc3RydWN0IGRpcl9pbmZvICpkaXIpCisrc3RhdGljIGlubGluZSB2b2lkIGFkZF9leGNsdWRlZChzdHJ1Y3QgZGlyX2luZm8gKmRpcikKKyB7CisgCWRpci0+ZXhjbHVkZWQgKys7CisgfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlYmQwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYgpAQCAtMCwwICsxLDM4IEBACisjIE5vdGUsIHdlIGNhbiBwcm9iYWJseSByZW1vdmUgdGhlIGx6bWEgb3B0aW9uIGFzIGl0IGhhcyBiZSByZXBsYWNlZCB3aXRoIHh6LAorIyBhbmQgSSBkb24ndCB0aGluayB0aGUga2VybmVsIHN1cHBvcnRzIGl0IGFueSBtb3JlLgorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuaXB1bGF0aW5nIFNxdWFzaEZTIGZpbGVzeXN0ZW1zIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEwtMiAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vLi4vLi4vN3pDLnR4dDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0xNjttZDU9MjA1NmNkNmQ5MTllYmMzODA3NjAyMTQzYzc0NDlhN2MgXAorIgorREVQRU5EUyA9ICJhdHRyIHpsaWIgeHogbHpvIGx6NCIKKworUFYgPSAiNC4zK2dpdHIke1NSQ1BWfSIKK1NSQ1JFViA9ICI5YzFkYjZkMTNhNTFhMmUwMDlmMDAyN2VmMzM2Y2UwMzYyNGVhYzBkIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3Bsb3VnaGVyL3NxdWFzaGZzLXRvb2xzLmdpdDtwcm90b2NvbD1odHRwcyBcCisgICAgICAgICAgIGh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3NldmVuemlwL2x6bWE0NjUudGFyLmJ6MjtuYW1lPWx6bWEgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ta3NxdWFzaGZzLmMtZ2V0LWlubGluZS1mdW5jdGlvbnMtd29yay13aXRoLUM5OS5wYXRjaDtzdHJpcGxldmVsPTIgXAorIgorU1JDX1VSSVtsem1hLm1kNXN1bV0gPSAiMjlkNWZmZDAzYTVhM2U1MWFlZjZhNzRlOWVhZmI3NTkiCitTUkNfVVJJW2x6bWEuc2hhMjU2c3VtXSA9ICJjOTM1ZmQwNGRkOGUwZThjNjg4YTMwNzhmMzY3NWQ2OTk2NzlhOTBiZTgxYzEyNjg2ODM3ZTA4ODBhYTBmYTFlIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3NxdWFzaGZzLXRvb2xzIgorCisjIEVYVFJBX09FTUFLRSBpcyB0eXBpY2FsbHk6IC1lIE1BS0VGTEFHUz0KKyMgdGhlIC1lIGNhdXNlcyBwcm9ibGVtcyBhcyBDRkxBR1MgaXMgbW9kaWZpZWQgaW4gdGhlIE1ha2VmaWxlLCBzbworIyB3ZSByZWRlZmluZSBFWFRSQV9PRU1BS0UgaGVyZQorRVhUUkFfT0VNQUtFID0gIk1BS0VGTEFHUz0gTFpNQV9TVVBQT1JUPTEgTFpNQV9ESVI9Li4vLi4gWFpfU1VQUE9SVD0xIExaT19TVVBQT1JUPTEgTFo0X1NVUFBPUlQ9MSIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIG1rc3F1YXNoZnMgdW5zcXVhc2hmcworfQorZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBta3NxdWFzaGZzICR7RH0ke3NiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSB1bnNxdWFzaGZzICR7RH0ke3NiaW5kaXJ9LworfQorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTM5NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorRnJvbSBmODU4NTQxMzFjODI2NWYyZWI1OWM3MTRkY2VhNWM0YjNkYzA5YmVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuLmtvb2lAbGluYXJvLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMTQ6Mjk6MzcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIGxpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKKworSXQgaXMgbWlzc2luZyBmcm9tIHRoZSB0YXJiYWxsLCBidXQgaXQgaXMgcHJlc2VudCBpbiBnaXQgZm9yIHY0LjEwCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCisKK2RpZmYgLS1naXQgYS9saW51eC9hYXJjaDY0L2FyY2hfcmVncy5oIGIvbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlhNWUzM2UKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKK0BAIC0wLDAgKzEsMiBAQAorK2V4dGVybiB1aW50NjRfdCAqY29uc3QgYWFyY2g2NF9zcF9wdHI7CisrZXh0ZXJuIHVpbnQzMl90ICpjb25zdCBhcm1fc3BfcHRyOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtbGludXgtaW9jdGwuaC1mb3ItX0lPQ18tbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTM0NmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0cmFjZS9jb2RlL2NpLzM0NjBkYzQ4NmQzMzMyMzE5OThkZTBmMTk5MTgyMDRhYWNlZTlhZTMKKworRXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQgb2ZmaWNpYWxseSBhcyBwYXJ0IG9mIHN0cmFjZSA0LjExCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CisKK0Zyb20gMzQ2MGRjNDg2ZDMzMzIzMTk5OGRlMGYxOTkxODIwNGFhY2VlOWFlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitEYXRlOiBTYXQsIDI4IE1hciAyMDE1IDE4OjQwOjEzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgPGxpbnV4L2lvY3RsLmg+IGZvciBfSU9DXyogbWFjcm9zCisKK0ZpeCBhIGNvbXBpbGF0aW9uIGZhaWx1cmUgd2l0aCBtdXNsIGxpYmMuCisKKyogZXZkZXYuYzogSW5jbHVkZSA8bGludXgvaW9jdGwuaD4uCisqIGlvY3RsLmM6IEluY2x1ZGUgPGxpbnV4L2lvY3RsLmg+IGluc3RlYWQgb2YgPGFzbS9pb2N0bC5oPi4KKyogaW9jdGxzb3J0LmM6IExpa2V3aXNlLgorCitSZXBvcnRlZC1ieTogRGltYSBLcmFzbmVyIDxkaW1hQGRpbWFrcmFzbmVyLmNvbT4KK0Fja2VkLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CistLS0KKyBldmRldi5jICAgICB8IDIgKysKKyBpb2N0bC5jICAgICB8IDIgKy0KKyBpb2N0bHNvcnQuYyB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V2ZGV2LmMgYi9ldmRldi5jCitpbmRleCA5YTc0MzBkLi5lMDZmOWMxIDEwMDY0NAorLS0tIGEvZXZkZXYuYworKysrIGIvZXZkZXYuYworQEAgLTI4LDYgKzI4LDggQEAKKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorKworICNpZmRlZiBIQVZFX0xJTlVYX0lOUFVUX0gKKyAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyAjaW5jbHVkZSAieGxhdC9ldmRldl9hYnMuaCIKK2RpZmYgLS1naXQgYS9pb2N0bC5jIGIvaW9jdGwuYworaW5kZXggNDZmODMzNC4uYzY3ZDA0OCAxMDA2NDQKKy0tLSBhL2lvY3RsLmMKKysrKyBiL2lvY3RsLmMKK0BAIC0yOSw3ICsyOSw3IEBACisgICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKy0jaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisgI2luY2x1ZGUgInhsYXQvaW9jdGxfZGlycy5oIgorIAorICNpZmRlZiBIQVZFX0xJTlVYX0lOUFVUX0gKK2RpZmYgLS1naXQgYS9pb2N0bHNvcnQuYyBiL2lvY3Rsc29ydC5jCitpbmRleCAzMzM1NTZjLi45YzMxNjkxIDEwMDY0NAorLS0tIGEvaW9jdGxzb3J0LmMKKysrKyBiL2lvY3Rsc29ydC5jCitAQCAtMzMsNyArMzMsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorIAorIHN0cnVjdCBpb2N0bGVudCB7CisgCWNvbnN0IGNoYXIgKmluZm87CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1zeXMtc3RhdC5oLWZvci1TX0ktbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwNzJmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1zeXMtc3RhdC5oLWZvci1TX0ktbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Avc3RyYWNlL2NvZGUvY2kvZDM0ZTAwYjI5Mzk0MmIxMDEyZGRjNDllZDNhYjM3OWEzMjMzNzYxMQorCitFeHBlY3RlZCB0byBiZSByZWxlYXNlZCBvZmZpY2lhbGx5IGFzIHBhcnQgb2Ygc3RyYWNlIDQuMTEKKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKworRnJvbSBkMzRlMDBiMjkzOTQyYjEwMTJkZGM0OWVkM2FiMzc5YTMyMzM3NjExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggSmFuZGEgPGZlbGl4LmphbmRhQHBvc3Rlby5kZT4KK0RhdGU6IFNhdCwgMjggTWFyIDIwMTUgMTg6MjE6MDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSA8c3lzL3N0YXQuaD4gZm9yIFNfSSogbWFjcm9zCisKK0ZpeCBhIGNvbXBpbGF0aW9uIGZhaWx1cmUgd2l0aCBtdXNsIGxpYmMuCisKKyogbWtub2QuYzogSW5jbHVkZSA8c3lzL3N0YXQuaD4uCisqIHByaW50bW9kZS5jOiBMaWtld2lzZS4KKworUmVwb3J0ZWQtYnk6IERpbWEgS3Jhc25lciA8ZGltYUBkaW1ha3Jhc25lci5jb20+CitBY2tlZC1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorLS0tCisgbWtub2QuYyAgICAgfCAxICsKKyBwcmludG1vZGUuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ta25vZC5jIGIvbWtub2QuYworaW5kZXggMDdlOWE0NS4uMTQ2MzIzMiAxMDA2NDQKKy0tLSBhL21rbm9kLmMKKysrKyBiL21rbm9kLmMKK0BAIC0xLDYgKzEsNyBAQAorICNpbmNsdWRlICJkZWZzLmgiCisgCisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgI2lmZGVmIE1BSk9SX0lOX1NZU01BQ1JPUworICMgaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorZGlmZiAtLWdpdCBhL3ByaW50bW9kZS5jIGIvcHJpbnRtb2RlLmMKK2luZGV4IDRkZjFiOWYuLmE3MjE5MzYgMTAwNjQ0CistLS0gYS9wcmludG1vZGUuYworKysrIGIvcHJpbnRtb2RlLmMKK0BAIC0xLDYgKzEsNyBAQAorICNpbmNsdWRlICJkZWZzLmgiCisgCisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgI2luY2x1ZGUgInhsYXQvbW9kZXR5cGVzLmgiCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjAzMDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK3N0cmFjZTogQWRkIHB0ZXN0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBHYWJyaWVsIEJhcmJ1IDxnYWJyaWVsLmJhcmJ1QGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICB8ICAyICstCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAxOCArKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTczOTU4Yy4uNWYwZGZlZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNiw3ICs2LDcgQEAgQUNfSU5JVChbc3RyYWNlXSwKKyBBQ19DT05GSUdfU1JDRElSKFtzdHJhY2UuY10pCisgQUNfQ09ORklHX0FVWF9ESVIoWy5dKQorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCistQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LXh6IG5vLWRpc3QtZ3ppcCBzaWxlbnQtcnVsZXMgcGFyYWxsZWwtdGVzdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC14eiBuby1kaXN0LWd6aXAgc2lsZW50LXJ1bGVzIHNlcmlhbC10ZXN0c10pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgQUNfQ0FOT05JQ0FMX0hPU1QKKyAKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBmZjVlMTM2Li45ODRiZGI2IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTAxLDMgKzEwMSwyMSBAQCBFWFRSQV9ESVNUID0gaW5pdC5zaCBydW4uc2ggXAorIAkgICAgICQoVEVTVFMpCisgCisgQ0xFQU5GSUxFUyA9ICQoVEVTVFM6PS50bXApCisrCisrYnVpbGR0ZXN0LVRFU1RTOiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTKQorKworK2luc3RhbGwtcHRlc3Q6CisrCWluc3RhbGwgJChCVUlMRERJUikvc3RyYWNlICQoREVTVERJUikKKysJaW5zdGFsbCAiJChzcmNkaXIpLy4uIi9zdHJhY2UtbG9nLW1lcmdlICQoREVTVERJUikKKysJaW5zdGFsbCAtZCAkKERFU1RESVIpLyQoVEVTVERJUikKKysJY3AgJChCVUlMRERJUikvJChURVNURElSKS9NYWtlZmlsZSAkKERFU1RESVIpLyQoVEVTVERJUikKKysJc2VkIC1pIC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQorKwlzZWQgLWkgLWUgJ3MvYmFzaC9zaC8nICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQorKwlmb3IgZmlsZSBpbiAkKGNoZWNrX1BST0dSQU1TKTsgZG8gXAorKwkJaW5zdGFsbCAkKEJVSUxERElSKS8kKFRFU1RESVIpLyQkZmlsZSAkKERFU1RESVIpLyQoVEVTVERJUik7IFwKKysJZG9uZQorKwlmb3IgZmlsZSBpbiAkKEVYVFJBX0RJU1QpOyBkbyBcCisrCQlpbnN0YWxsICQoc3JjZGlyKS8kJGZpbGUgJChERVNURElSKS8kKFRFU1RESVIpOyBcCisrCQlzZWQgLWkgLWUgJ3MvJCR7c3JjZGlyPS59Ly4vZycgJChERVNURElSKS8kKFRFU1RESVIpLyQkZmlsZTsgXAorKwlkb25lCisrCWZvciBpIGluIG5ldCBuZXQtZmQgc2NtX3JpZ2h0cy1mZCBzaWdhY3Rpb247IGRvIHNlZCAtaSAtZSAncy8kJHNyY2Rpci8uL2cnICQoREVTVERJUikvJChURVNURElSKS8kJGkudGVzdDsgZG9uZQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL2dpdC12ZXJzaW9uLWdlbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvZ2l0LXZlcnNpb24tZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmZWU3NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL2dpdC12ZXJzaW9uLWdlbgpAQCAtMCwwICsxLDIyNSBAQAorIyEvYmluL3NoCisjIFByaW50IGEgdmVyc2lvbiBzdHJpbmcuCitzY3JpcHR2ZXJzaW9uPTIwMTItMTItMzEuMjM7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgc2NyaXB0IGlzIGRlcml2ZWQgZnJvbSBHSVQtVkVSU0lPTi1HRU4gZnJvbSBHSVQ6IGh0dHA6Ly9naXQub3IuY3ovLgorIyBJdCBtYXkgYmUgcnVuIHR3byB3YXlzOgorIyAtIGZyb20gYSBnaXQgcmVwb3NpdG9yeSBpbiB3aGljaCB0aGUgImdpdCBkZXNjcmliZSIgY29tbWFuZCBiZWxvdworIyAgIHByb2R1Y2VzIHVzZWZ1bCBvdXRwdXQgKHRodXMgcmVxdWlyaW5nIGF0IGxlYXN0IG9uZSBzaWduZWQgdGFnKQorIyAtIGZyb20gYSBub24tZ2l0LXJlcG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSAudGFyYmFsbC12ZXJzaW9uIGZpbGUsIHdoaWNoCisjICAgcHJlc3VtZXMgdGhpcyBzY3JpcHQgaXMgaW52b2tlZCBsaWtlICIuL2dpdC12ZXJzaW9uLWdlbiAudGFyYmFsbC12ZXJzaW9uIi4KKworIyBJbiBvcmRlciB0byB1c2UgaW50cmEtdmVyc2lvbiBzdHJpbmdzIGluIHlvdXIgcHJvamVjdCwgeW91IHdpbGwgbmVlZCB0d28KKyMgc2VwYXJhdGUgZ2VuZXJhdGVkIHZlcnNpb24gc3RyaW5nIGZpbGVzOgorIworIyAudGFyYmFsbC12ZXJzaW9uIC0gcHJlc2VudCBvbmx5IGluIGEgZGlzdHJpYnV0aW9uIHRhcmJhbGwsIGFuZCBub3QgaW4KKyMgICBhIGNoZWNrZWQtb3V0IHJlcG9zaXRvcnkuICBDcmVhdGVkIHdpdGggY29udGVudHMgdGhhdCB3ZXJlIGxlYXJuZWQgYXQKKyMgICB0aGUgbGFzdCB0aW1lIGF1dG9jb25mIHdhcyBydW4sIGFuZCB1c2VkIGJ5IGdpdC12ZXJzaW9uLWdlbi4gIE11c3Qgbm90CisjICAgYmUgcHJlc2VudCBpbiBlaXRoZXIgJChzcmNkaXIpIG9yICQoYnVpbGRkaXIpIGZvciBnaXQtdmVyc2lvbi1nZW4gdG8KKyMgICBnaXZlIGFjY3VyYXRlIGFuc3dlcnMgZHVyaW5nIG5vcm1hbCBkZXZlbG9wbWVudCB3aXRoIGEgY2hlY2tlZCBvdXQgdHJlZSwKKyMgICBidXQgbXVzdCBiZSBwcmVzZW50IGluIGEgdGFyYmFsbCB3aGVuIHRoZXJlIGlzIG5vIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uCisjICAgVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdXNlZCBpbiBhbnkgZGVwZW5kZW5jaWVzLiAgR05VbWFrZWZpbGUgaGFzCisjICAgaG9va3MgdG8gZm9yY2UgYSByZWNvbmZpZ3VyZSBhdCBkaXN0cmlidXRpb24gdGltZSB0byBnZXQgdGhlIHZhbHVlCisjICAgY29ycmVjdCwgd2l0aG91dCBwZW5hbGl6aW5nIG5vcm1hbCBkZXZlbG9wbWVudCB3aXRoIGV4dHJhIHJlY29uZmlndXJlcy4KKyMKKyMgLnZlcnNpb24gLSBwcmVzZW50IGluIGEgY2hlY2tlZC1vdXQgcmVwb3NpdG9yeSBhbmQgaW4gYSBkaXN0cmlidXRpb24KKyMgICB0YXJiYWxsLiAgVXNhYmxlIGluIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IGZvciBmaWxlcyB0aGF0IGRvbid0CisjICAgd2FudCB0byBkZXBlbmQgb24gY29uZmlnLmggYnV0IGRvIHdhbnQgdG8gdHJhY2sgdmVyc2lvbiBjaGFuZ2VzLgorIyAgIERlbGV0ZSB0aGlzIGZpbGUgcHJpb3IgdG8gYW55IGF1dG9jb25mIHJ1biB3aGVyZSB5b3Ugd2FudCB0byByZWJ1aWxkCisjICAgZmlsZXMgdG8gcGljayB1cCBhIHZlcnNpb24gc3RyaW5nIGNoYW5nZTsgYW5kIGxlYXZlIGl0IHN0YWxlIHRvCisjICAgbWluaW1pemUgcmVidWlsZCB0aW1lIGFmdGVyIHVucmVsYXRlZCBjaGFuZ2VzIHRvIGNvbmZpZ3VyZSBzb3VyY2VzLgorIworIyBBcyB3aXRoIGFueSBnZW5lcmF0ZWQgZmlsZSBpbiBhIFZDJ2QgZGlyZWN0b3J5LCB5b3Ugc2hvdWxkIGFkZAorIyAvLnZlcnNpb24gdG8gLmdpdGlnbm9yZSwgc28gdGhhdCB5b3UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNvbW1pdCBpdC4KKyMgLnRhcmJhbGwtdmVyc2lvbiBpcyBuZXZlciBnZW5lcmF0ZWQgaW4gYSBWQydkIGRpcmVjdG9yeSwgc28gbmVlZG4ndAorIyBiZSBsaXN0ZWQgdGhlcmUuCisjCisjIFVzZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4geW91ciBjb25maWd1cmUuYWMsIHNvIHRoYXQgJChWRVJTSU9OKSB3aWxsCisjIGF1dG9tYXRpY2FsbHkgYmUgdXAtdG8tZGF0ZSBlYWNoIHRpbWUgY29uZmlndXJlIGlzIHJ1biAoYW5kIG5vdGUgdGhhdAorIyBzaW5jZSBjb25maWd1cmUuYWMgbm8gbG9uZ2VyIGluY2x1ZGVzIGEgdmVyc2lvbiBzdHJpbmcsIE1ha2VmaWxlIHJ1bGVzCisjIHNob3VsZCBub3QgZGVwZW5kIG9uIGNvbmZpZ3VyZS5hYyBmb3IgdmVyc2lvbiB1cGRhdGVzKS4KKyMKKyMgQUNfSU5JVChbR05VIHByb2plY3RdLAorIyAgICAgICAgIG00X2VzeXNjbWQoW2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4gLnRhcmJhbGwtdmVyc2lvbl0pLAorIyAgICAgICAgIFtidWctcHJvamVjdEBleGFtcGxlXSkKKyMKKyMgVGhlbiB1c2UgdGhlIGZvbGxvd2luZyBsaW5lcyBpbiB5b3VyIE1ha2VmaWxlLmFtLCBzbyB0aGF0IC52ZXJzaW9uCisjIHdpbGwgYmUgcHJlc2VudCBmb3IgZGVwZW5kZW5jaWVzLCBhbmQgc28gdGhhdCAudmVyc2lvbiBhbmQKKyMgLnRhcmJhbGwtdmVyc2lvbiB3aWxsIGV4aXN0IGluIGRpc3RyaWJ1dGlvbiB0YXJiYWxscy4KKyMKKyMgRVhUUkFfRElTVCA9ICQodG9wX3NyY2RpcikvLnZlcnNpb24KKyMgQlVJTFRfU09VUkNFUyA9ICQodG9wX3NyY2RpcikvLnZlcnNpb24KKyMgJCh0b3Bfc3JjZGlyKS8udmVyc2lvbjoKKyMJZWNobyAkKFZFUlNJT04pID4gJEAtdCAmJiBtdiAkQC10ICRACisjIGRpc3QtaG9vazoKKyMJZWNobyAkKFZFUlNJT04pID4gJChkaXN0ZGlyKS8udGFyYmFsbC12ZXJzaW9uCisKKworbWU9JDAKKwordmVyc2lvbj0iZ2l0LXZlcnNpb24tZ2VuICRzY3JpcHR2ZXJzaW9uCisKK0NvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhlcmUgaXMgTk8gd2FycmFudHkuICBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgbWF0dGVycywgc2VlIHRoZSBmaWxlcyBuYW1lZCBDT1BZSU5HLiIKKwordXNhZ2U9IlwKK1VzYWdlOiAkbWUgW09QVElPTl0uLi4gXCRzcmNkaXIvLnRhcmJhbGwtdmVyc2lvbiBbVEFHLU5PUk1BTElaQVRJT04tU0VELVNDUklQVF0KK1ByaW50IGEgdmVyc2lvbiBzdHJpbmcuCisKK09wdGlvbnM6CisKKyAgIC0tcHJlZml4ICAgICAgICAgICBwcmVmaXggb2YgZ2l0IHRhZ3MgKGRlZmF1bHQgJ3YnKQorICAgLS1mYWxsYmFjayAgICAgICAgIGZhbGxiYWNrIHZlcnNpb24gdG8gdXNlIGlmIFwiZ2l0IC0tdmVyc2lvblwiIGZhaWxzCisKKyAgIC0taGVscCAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgLS12ZXJzaW9uICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisKK1J1bm5pbmcgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBzdWZmaWNlIGluIG1vc3QgY2FzZXMuIgorCitwcmVmaXg9dgorZmFsbGJhY2s9CisKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgMDs7CisgICAgLS12ZXJzaW9uKSBlY2hvICIkdmVyc2lvbiI7IGV4aXQgMDs7CisgICAgLS1wcmVmaXgpIHNoaWZ0OyBwcmVmaXg9IiQxIjs7CisgICAgLS1mYWxsYmFjaykgc2hpZnQ7IGZhbGxiYWNrPSIkMSI7OworICAgIC0qKQorICAgICAgZWNobyAiJDA6IFVua25vd24gb3B0aW9uICckMScuIiA+JjIKKyAgICAgIGVjaG8gIiQwOiBUcnkgJy0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKyAgICAgIGV4aXQgMTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkdGFyYmFsbF92ZXJzaW9uX2ZpbGUiID0geDsgdGhlbgorICAgICAgICB0YXJiYWxsX3ZlcnNpb25fZmlsZT0iJDEiCisgICAgICBlbGlmIHRlc3QgIngkdGFnX3NlZF9zY3JpcHQiID0geDsgdGhlbgorICAgICAgICB0YWdfc2VkX3NjcmlwdD0iJDEiCisgICAgICBlbHNlCisgICAgICAgIGVjaG8gIiQwOiBleHRyYSBub24tb3B0aW9uIGFyZ3VtZW50ICckMScuIiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaTs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAieCR0YXJiYWxsX3ZlcnNpb25fZmlsZSIgPSB4OyB0aGVuCisgICAgZWNobyAiJHVzYWdlIgorICAgIGV4aXQgMQorZmkKKwordGFnX3NlZF9zY3JpcHQ9IiR7dGFnX3NlZF9zY3JpcHQ6LXMveC94L30iCisKK25sPScKKycKKworIyBBdm9pZCBtZWRkbGluZyBieSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvZiB0aGUgc2FtZSBuYW1lLgordj0KK3ZfZnJvbV9naXQ9CisKKyMgRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGEgdGFyYmFsbC1vbmx5IHZlcnNpb24gZmlsZS4KKyMgdGhlbiB0cnkgImdpdCBkZXNjcmliZSIsIHRoZW4gZGVmYXVsdC4KK2lmIHRlc3QgLWYgJHRhcmJhbGxfdmVyc2lvbl9maWxlCit0aGVuCisgICAgdj1gY2F0ICR0YXJiYWxsX3ZlcnNpb25fZmlsZWAgfHwgdj0KKyAgICBjYXNlICR2IGluCisgICAgICAgICokbmwqKSB2PSA7OyAjIHJlamVjdCBtdWx0aS1saW5lIG91dHB1dAorICAgICAgICBbMC05XSopIDs7CisgICAgICAgICopIHY9IDs7CisgICAgZXNhYworICAgIHRlc3QgIngkdiIgPSB4IFwKKyAgICAgICAgJiYgZWNobyAiJDA6IFdBUk5JTkc6ICR0YXJiYWxsX3ZlcnNpb25fZmlsZSBpcyBtaXNzaW5nIG9yIGRhbWFnZWQiIDE+JjIKK2ZpCisKK2lmIHRlc3QgIngkdiIgIT0geAordGhlbgorICAgIDogIyB1c2UgJHYKKyMgT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2l0IGNvbW1pdCBpbnZvbHZpbmcgdGhlIHdvcmtpbmcKKyMgZGlyZWN0b3J5LCBhbmQgImdpdCBkZXNjcmliZSIgb3V0cHV0IGxvb2tzIHNlbnNpYmxlLCB1c2UgdGhhdCB0bworIyBkZXJpdmUgYSB2ZXJzaW9uIHN0cmluZy4KK2VsaWYgdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OnggLiAyPiYxYCIgPSB4IFwKKyAgICAmJiB2PWBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9NCAtLW1hdGNoPSIkcHJlZml4KiIgSEVBRCAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfHwgZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbGAgXAorICAgICYmIHY9YHByaW50ZiAnJXNcbicgIiR2IiB8IHNlZCAiJHRhZ19zZWRfc2NyaXB0ImAgXAorICAgICYmIGNhc2UgJHYgaW4KKyAgICAgICAgICRwcmVmaXhbMC05XSopIDs7CisgICAgICAgICAqKSAoZXhpdCAxKSA7OworICAgICAgIGVzYWMKK3RoZW4KKyAgICAjIElzIHRoaXMgYSBuZXcgZ2l0IHRoYXQgbGlzdHMgbnVtYmVyIG9mIGNvbW1pdHMgc2luY2UgdGhlIGxhc3QKKyAgICAjIHRhZyBvciB0aGUgcHJldmlvdXMgb2xkZXIgdmVyc2lvbiB0aGF0IGRpZCBub3Q/CisgICAgIyAgIE5ld2VyOiB2Ni4xMC03Ny1nMGY4ZmFlYgorICAgICMgICBPbGRlcjogdjYuMTAtZzBmOGZhZWIKKyAgICBjYXNlICR2IGluCisgICAgICAgICotKi0qKSA6IGdpdCBkZXNjcmliZSBpcyBva2F5IHRocmVlIHBhcnQgZmxhdm9yIDs7CisgICAgICAgICotKikKKyAgICAgICAgICAgIDogZ2l0IGRlc2NyaWJlIGlzIG9sZGVyIHR3byBwYXJ0IGZsYXZvcgorICAgICAgICAgICAgIyBSZWNyZWF0ZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgYW5kIHJld3JpdGUgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgIyByZXN1bHQgaXMgdGhlIHNhbWUgYXMgaWYgd2Ugd2VyZSB1c2luZyB0aGUgbmV3ZXIgdmVyc2lvbgorICAgICAgICAgICAgIyBvZiBnaXQgZGVzY3JpYmUuCisgICAgICAgICAgICB2dGFnPWBlY2hvICIkdiIgfCBzZWQgJ3MvLS4qLy8nYAorICAgICAgICAgICAgY29tbWl0X2xpc3Q9YGdpdCByZXYtbGlzdCAiJHZ0YWciLi5IRUFEIDI+L2Rldi9udWxsYCBcCisgICAgICAgICAgICAgICAgfHwgeyBjb21taXRfbGlzdD1mYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICBlY2hvICIkMDogV0FSTklORzogZ2l0IHJldi1saXN0IGZhaWxlZCIgMT4mMjsgfQorICAgICAgICAgICAgbnVtY29tbWl0cz1gZWNobyAiJGNvbW1pdF9saXN0IiB8IHdjIC1sYAorICAgICAgICAgICAgdj1gZWNobyAiJHYiIHwgc2VkICJzL1woLipcKS1cKC4qXCkvXDEtJG51bWNvbW1pdHMtXDIvImA7CisgICAgICAgICAgICB0ZXN0ICIkY29tbWl0X2xpc3QiID0gZmFpbGVkICYmIHY9VU5LTk9XTgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIENoYW5nZSB0aGUgZmlyc3QgJy0nIHRvIGEgJy4nLCBzbyB2ZXJzaW9uLWNvbXBhcmluZyB0b29scyB3b3JrIHByb3Blcmx5LgorICAgICMgUmVtb3ZlIHRoZSAiZyIgaW4gZ2l0IGRlc2NyaWJlJ3Mgb3V0cHV0IHN0cmluZywgdG8gc2F2ZSBhIGJ5dGUuCisgICAgdj1gZWNobyAiJHYiIHwgc2VkICdzLy0vLjAuLztzL1woLipcKS1nL1wxLS8nYDsKKyAgICB2X2Zyb21fZ2l0PTEKK2VsaWYgdGVzdCAieCRmYWxsYmFjayIgPSB4IHx8IGdpdCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgdj1VTktOT1dOCitlbHNlCisgICAgdj0kZmFsbGJhY2sKK2ZpCisKK3Y9YGVjaG8gIiR2IiB8c2VkICJzL14kcHJlZml4Ly8iYAorCisjIFRlc3Qgd2hldGhlciB0byBhcHBlbmQgdGhlICItZGlydHkiIHN1ZmZpeCBvbmx5IGlmIHRoZSB2ZXJzaW9uCisjIHN0cmluZyB3ZSdyZSB1c2luZyBjYW1lIGZyb20gZ2l0LiAgSS5lLiwgc2tpcCB0aGUgdGVzdCBpZiBpdCdzICJVTktOT1dOIgorIyBvciBpZiBpdCBjYW1lIGZyb20gLnRhcmJhbGwtdmVyc2lvbi4KK2lmIHRlc3QgIngkdl9mcm9tX2dpdCIgIT0geDsgdGhlbgorICAjIERvbid0IGRlY2xhcmUgYSB2ZXJzaW9uICJkaXJ0eSIgbWVyZWx5IGJlY2F1c2UgYSB0aW1lIHN0YW1wIGhhcyBjaGFuZ2VkLgorICBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCA+IC9kZXYvbnVsbCAyPiYxCisKKyAgZGlydHk9YGV4ZWMgMj4vZGV2L251bGw7Z2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRGAgfHwgZGlydHk9CisgIGNhc2UgIiRkaXJ0eSIgaW4KKyAgICAgICcnKSA7OworICAgICAgKikgIyBBcHBlbmQgdGhlIHN1ZmZpeCBvbmx5IGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5LgorICAgICAgICAgIGNhc2UgJHYgaW4KKyAgICAgICAgICAgICotZGlydHkpIDs7CisgICAgICAgICAgICAqKSB2PSIkdi1kaXJ0eSIgOzsKKyAgICAgICAgICBlc2FjIDs7CisgIGVzYWMKK2ZpCisKKyMgT21pdCB0aGUgdHJhaWxpbmcgbmV3bGluZSwgc28gdGhhdCBtNF9lc3lzY21kIGNhbiB1c2UgdGhlIHJlc3VsdCBkaXJlY3RseS4KK2VjaG8gIiR2IiB8IHRyIC1kICIkbmwiCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTMzY2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1DIHRlc3RzIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2Uvc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2Uvc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhlNGIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0FkZCBvcHRpb25zICJhaW8iIGFuZCAiYWNsIiB0byBlbmFibGUvZGlzYWJsZSBsaWJhaW8gYW5kIGFjbCBzdXBwb3J0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNzM5NThjLi45MDk5MzcwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNzAsNiArMjcwLDE4IEBAIEFDX0NIRUNLX0hFQURFUlMobTRfbm9ybWFsaXplKFsKKyAJc3lzL3Zmcy5oCisgCXN5cy94YXR0ci5oCisgXSkpCisrCisrQUNfQVJHX0VOQUJMRShbYWNsXSwKKysJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hY2xdLCBbdHVybiBvbiBhY2wgc3VwcG9ydF0pXSwKKysJW2Nhc2UgJGVuYWJsZXZhbCBpbgorKwl5ZXMpCisrCQlBQ19DSEVDS19IRUFERVJTKFtzeXMvYWNsLmhdKQorKwkJOzsKKysJbm8pICA7OworKwkqKSAgIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICRlbmFibGV2YWwgZm9yIGFpbyBvcHRpb25dKSA7OworKwllc2FjXQorKykKKysKKyBBQ19DSEVDS19IRUFERVJTKFtsaW51eC9pY21wLmggbGludXgvaW42LmggbGludXgvbmV0bGluay5oIGxpbnV4L2lmX3BhY2tldC5oXSwKKyAgICAgICAgICAgICAgICAgIFtdLCBbXSwgWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorQEAgLTc0NSw2ICs3NTcsMjAgQEAgaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxhZGRyIiA9IHh5ZXM7IHRoZW4KKyBmaQorIEFDX1NVQlNUKGRsX0xJQlMpCisgCisrQUNfQVJHX0VOQUJMRShbYWlvXSwKKysJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1haW9dLCBbdHVybiBvbiBsaWJhaW8gc3VwcG9ydF0pXSwKKysJW2Nhc2UgJGVuYWJsZXZhbCBpbgorKwl5ZXMpCisrCUFDX0NIRUNLX0hFQURFUlMoW2xpYmFpby5oXSwgWworKwkJQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGlvY2IudS5jLmZsYWdzXSwsLCBbI2luY2x1ZGUgPGxpYmFpby5oPl0pCisrCQlBQ19DSEVDS19ERUNMUyhbSU9fQ01EX1BXUklURSwgSU9fQ01EX1BXUklURVZdLCwsIFsjaW5jbHVkZSA8bGliYWlvLmg+XSkKKysJXSkKKysJOzsKKysJbm8pICA7OworKwkqKSAgIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICRlbmFibGV2YWwgZm9yIGFpbyBvcHRpb25dKSA7OworKwllc2FjXQorKykKKysKKyBBQ19QQVRIX1BST0coW1BFUkxdLCBbcGVybF0pCisgCisgZG5sIHN0YWNrIHRyYWNlIHdpdGggbGlidW53aW5kCistLQorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjdlM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTAuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gY2FsbCB0cmFjaW5nIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vc3RyYWNlLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTI0NTAwYzIxZTg1NmYwOTEyZGYyOTI5NWJhMTA0YzciCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3N0cmFjZS9zdHJhY2UtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2l0LXZlcnNpb24tZ2VuIFwKKyAgICAgICAgICAgZmlsZTovL3N0cmFjZS1hZGQtY29uZmlndXJlLW9wdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTA3YTViZTQ1NTQ5Mzg2MTE4OWU5YjU3YTNhNTE5MTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTYxODBkODY2ZWY5ZTc2NTg2Yjk2ZTJlY2UyYmZlZWIzYWEyM2Y1Y2M4ODE1M2Y3NmU5Y2FlZGQ2NWU0MGVlMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmx1ZXRvb3RoCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBjb3JldXRpbHMgZ3JlcCBnYXdrIgorCitQQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/Pz0gIlwKKyAgICBsaWJhaW8gJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1tsaWJhaW9dID0gIi0tZW5hYmxlLWFpbywtLWRpc2FibGUtYWlvLGxpYmFpbyIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wiCitQQUNLQUdFQ09ORklHW2xpYnVud2luZF0gPSAiLS13aXRoLWxpYnVud2luZCwgLS13aXRob3V0LWxpYnVud2luZCwgbGlidW53aW5kIgorUEFDS0FHRUNPTkZJR1tibHVlel0gPSAiYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD15ZXMsYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD1ubywke0JMVUVafSIKKworVEVTVERJUiA9ICJ0ZXN0cyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY3AgJHtXT1JLRElSfS9naXQtdmVyc2lvbi1nZW4gJHtTfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFdlIGRvbid0IHNoaXAgc3RyYWNlLWdyYXBoIGhlcmUgYmVjYXVzZSBpdCBuZWVkcyBwZXJsCisJcm0gJHtEfSR7YmluZGlyfS9zdHJhY2UtZ3JhcGgKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gYnVpbGR0ZXN0LVRFU1RTIE9TPWxpbnV4IEFSQ0g9IiR7VEFSR0VUX0FSQ0h9IgorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBpbnN0YWxsLXB0ZXN0IEJVSUxERElSPSR7Qn0gREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBURVNURElSPSR7VEVTVERJUn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2Rpc2FibGVfbWFjb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2Rpc2FibGVfbWFjb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzYmU0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvZGlzYWJsZV9tYWNvcy5wYXRjaApAQCAtMCwwICsxLDY4IEBACitUaGVzZSB0ZXN0cyBkb24ndCB3b3JrIGluIGNyb3NzIGNvbXBpbGluZywganVzdCBkaXNhYmxlIHRoZW0gZm9yIG5vdywgd2UgZG9uJ3QKK2J1aWxkIHN1YnZlcnNpb24gb24gT1MtWCBhdCB0aGlzIHRpbWUuCisKK1JQIDEwMTQvNy8xNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW25lZWRzIGEgcmV3cml0ZSB0byBzdXBwb3J0IGEgY2FjaGUgdmFsdWVdCisKK0luZGV4OiBzdWJ2ZXJzaW9uLTEuOC45L2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzdWJ2ZXJzaW9uLTEuOC45Lm9yaWcvYnVpbGQvYWMtbWFjcm9zL21hY29zeC5tNAkyMDEyLTExLTI2IDAzOjA0OjI3LjAwMDAwMDAwMCArMDAwMAorKysrIHN1YnZlcnNpb24tMS44LjkvYnVpbGQvYWMtbWFjcm9zL21hY29zeC5tNAkyMDE0LTA3LTE2IDEyOjI4OjU4LjM1NzMwMDQwMyArMDAwMAorQEAgLTI0LDIxICsyNCw3IEBACisgQUNfREVGVU4oU1ZOX0xJQl9NQUNIT19JVEVSQVRFLAorIFsKKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIE1hY2gtTyBkeW5hbWljIG1vZHVsZSBpdGVyYXRpb24gZnVuY3Rpb25zXSkKKy0gIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLSAgICAjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKy0gICAgI2luY2x1ZGUgPG1hY2gtby9sb2FkZXIuaD4KKy0gIF1dLFtbCistICAgIGNvbnN0IHN0cnVjdCBtYWNoX2hlYWRlciAqaGVhZGVyID0gX2R5bGRfZ2V0X2ltYWdlX2hlYWRlcigwKTsKKy0gICAgY29uc3QgY2hhciAqbmFtZSA9IF9keWxkX2dldF9pbWFnZV9uYW1lKDApOworLSAgICBpZiAobmFtZSAmJiBoZWFkZXIpIHJldHVybiAwOworLSAgICByZXR1cm4gMTsKKy0gIF1dKV0sWworLSAgICBBQ19ERUZJTkUoW1NWTl9IQVZFX01BQ0hPX0lURVJBVEVdLCBbMV0sCistICAgICAgICAgICAgICBbSXMgTWFjaC1PIGxvdy1sZXZlbCBfZHlsZCBBUEkgYXZhaWxhYmxlP10pCistICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICBdLFsKKyAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgXSkKKyBdKQorIAorIGRubCBTVk5fTElCX01BQ09TX1BMSVNUCitAQCAtNDYsMzQgKzMyLDcgQEAKKyBBQ19ERUZVTihTVk5fTElCX01BQ09TX1BMSVNULAorIFsKKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIE1hYyBPUyBwcm9wZXJ0eSBsaXN0IHV0aWxpdGllc10pCistCistICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistICAgICNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KKy0gICAgI2lmICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQpIFwKKy0gICAgIHx8ICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfMCkgXAorLSAgICAgfHwgKE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPD0gTUFDX09TX1hfVkVSU0lPTl8xMF8wKQorLSAgICAjZXJyb3IgUHJvcGVyeUxpc3QgQVBJIHVuYXZhaWxhYmxlLgorLSAgICAjZW5kaWYKKy0gIF1dLFtbXV0pXSxbCistICAgIGRubCAjIyMgSGFjay4gIFdlIHNob3VsZCBvbmx5IG5lZWQgdG8gcGFzcyB0aGUgLWZyYW1ld29yayBvcHRpb25zIHdoZW4KKy0gICAgZG5sIGxpbmtpbmcgbGlic3ZuX3N1YnIsIHNpbmNlIGl0IGlzIHRoZSBvbmx5IGxpYnJhcnkgdGhhdCB1c2VzIEtleWNoYWluLgorLSAgICBkbmwKKy0gICAgZG5sIFVuZm9ydHVuYXRlbHksIGxpYnRvb2wgMS41LnggZG9lc24ndCB0cmFjayB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBmb3IKKy0gICAgZG5sIE9TIFggZnJhbWV3b3JrcyBsaWtlIGl0IGRvZXMgZm9yIG5vcm1hbCBsaWJyYXJpZXMsIHNvIHdlIG5lZWQgdG8KKy0gICAgZG5sIGV4cGxpY2l0bHkgcGFzcyB0aGUgb3B0aW9uIHRvIGFsbCB0aGUgdXNlcnMgb2YgbGlic3ZuX3N1YnIgdG8gYWxsb3cKKy0gICAgZG5sIHN0YXRpYyBidWlsZHMgdG8gbGluayBzdWNjZXNzZnVsbHkuCistICAgIGRubAorLSAgICBkbmwgVGhpcyBkb2VzIG1lYW4gdGhhdCBhbGwgZXhlY3V0YWJsZXMgd2UgbGluayB3aWxsIGJlIGxpbmtlZCBkaXJlY3RseQorLSAgICBkbmwgdG8gdGhlc2UgZnJhbWV3b3JrcyAtIGV2ZW4gd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIC0gYnV0IHRoYXQKKy0gICAgZG5sIHNob3VsZG4ndCBjYXVzZSBhbnkgcHJvYmxlbXMuCistCistICAgIExJQlM9IiRMSUJTIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCistICAgIEFDX0RFRklORShbU1ZOX0hBVkVfTUFDT1NfUExJU1RdLCBbMV0sCistICAgICAgICAgICAgICBbSXMgTWFjIE9TIHByb3BlcnR5IGxpc3QgQVBJIGF2YWlsYWJsZT9dKQorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgXSxbCisgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKy0gIF0pCisgXSkKKyAKKyBkbmwgU1ZOX0xJQl9NQUNPU19LRVlDSEFJTgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9saWJ0b29sMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvbGlidG9vbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkNTcyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvbGlidG9vbDIucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworLS0tIGEvY29uZmlndXJlLmFjCTIwMTEtMTAtMjAgMjE6NTY6MDIuMjMwNjYzOTg3ICswMjAwCisrKysgYi9jb25maWd1cmUuYWMJMjAxMS0wOC0xNyAxNTowMTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsOCArMjI3LDggQEAKKyAgIExJQlRPT0w9IiRzaF9saWJ0b29sIgorICAgU1ZOX0xJQlRPT0w9IiRzaF9saWJ0b29sIgorIGVsc2UKKy0gIHNoX2xpYnRvb2w9IiRhYnNfYnVpbGRkaXIvbGlidG9vbCIKKy0gIFNWTl9MSUJUT09MPSJcJChTSEVMTCkgJHNoX2xpYnRvb2wiCisrICBzaF9saWJ0b29sPSIkYWJzX2J1aWxkZGlyLyRob3N0X2FsaWFzLWxpYnRvb2wiCisrICBTVk5fTElCVE9PTD0iXCQoU0hFTEwpIFwkKGFic19idWlsZGRpcikvJGhvc3RfYWxpYXMtbGlidG9vbCIKKyBmaQorIEFDX1NVQlNUKFNWTl9MSUJUT09MKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDBlNTIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBmMWI2ZTQ5ZjEyYTE4ZWFiZTg4ZWI3MzJiNTc4YTE2MjgxZDA5NDk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyIEp1bCAyMDE1IDExOjM3OjQzICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNlcmYubTQ6IFJlZ2V4IG1vZGlmaWVkIHRvIGFsbG93ICctRCcgaW4gcGF0aHMKKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorCitUaGUgcGF0Y2ggaXMgbWVyZ2VkIGJ5IHN1YnZlcnNpb24gdXBzdHJlYW0gd2l0aCByZXBsYWNpbmcgJ1tbOnNwYWNlOl1dJyB3aXRoICcgJy4KKworaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9zdWJ2ZXJzaW9uL3RydW5rL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00P3IxPTE1OTQxNTYmcjI9MTY4OTgyNCAgCisKK1NpZ25lZC1vZmYtYnk6IEpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGJ1aWxkL2FjLW1hY3Jvcy9zZXJmLm00IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQgYi9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNAoraW5kZXggYWUxMWU3NS4uZmY4Y2JhZSAxMDA2NDQKKy0tLSBhL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00CisrKysgYi9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNAorQEAgLTE0Myw3ICsxNDMsNyBAQCBBQ19ERUZVTihTVk5fU0VSRl9QS0dfQ09ORklHLAorICAgICAgICAgaWYgJFBLR19DT05GSUcgJHNlcmZfbWFqb3IgLS1hdGxlYXN0LXZlcnNpb249JHNlcmZfY2hlY2tfdmVyc2lvbjsgdGhlbgorICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICAgICBzZXJmX2ZvdW5kPXllcworLSAgICAgICAgICBTVk5fU0VSRl9JTkNMVURFUz1bYCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tY2ZsYWdzIHwgJFNFRCAtZSAncy8tRFteIF0qLy9nJ2BdCisrICAgICAgICAgIFNWTl9TRVJGX0lOQ0xVREVTPVtgJFBLR19DT05GSUcgJHNlcmZfbWFqb3IgLS1jZmxhZ3MgfCAkU0VEIC1lICdzL1tbOnNwYWNlOl1dLURbXiBdKi8vZycgLWUgJ3MvXi1EW14gXSovL2cnYF0KKyAgICAgICAgICAgU1ZOX1NFUkZfTElCUz1gJFBLR19DT05GSUcgJHNlcmZfbWFqb3IgLS1saWJzYCAKKyAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIGVsc2UKKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS44LjEzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOC4xMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQzYjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOC4xMy5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlN1YnZlcnNpb24gKHN2bikgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBjbGllbnQiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiYXByLXV0aWwgc2VyZiBzcWxpdGUzIGZpbGUiCitSREVQRU5EU18ke1BOfSA9ICJzZXJmIgorTElDRU5TRSA9ICJBcGFjaGUtMiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitpbmhlcml0IGdldHRleHQgcHl0aG9ubmF0aXZlCisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9tYWNvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjQ0MTM0MTdiNTI5ZDdiZGY4MmY3NGU1MGRmMDJlODhiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEwOTljYzY4ODQwNzUzYjQ4YWVkYjNhMjdlYmQxZTJhZmJjYzg0ZGRiODcxNDEyZTVkNTAwZTg0M2Q2MDc1NzkiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTFjMmYwMTE5ZTQ3ODcwMGI1NDI4ZTI2Mzg2Y2ZmOTIzIgorCitQQUNLQUdFQ09ORklHW3Nhc2xdID0gIi0td2l0aC1zYXNsLC0td2l0aG91dC1zYXNsLGN5cnVzLXNhc2wiCitQQUNLQUdFQ09ORklHW2dub21lLWtleXJpbmddID0gIi0td2l0aC1nbm9tZS1rZXlyaW5nLC0td2l0aG91dC1nbm9tZS1rZXlyaW5nLGdsaWItMi4wIGdub21lLWtleXJpbmciCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1iZXJrZWxleS1kYiAtLXdpdGhvdXQtYXB4cyBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN3aWcgLS13aXRoLWFwcj0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLWFwci11dGlsPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUta2V5Y2hhaW4gXAorICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUlVCWT1ub25lIgorCitpbmhlcml0IGF1dG90b29scworCitleHBvcnQgTERGTEFHUyArPSAiIC1MJHtTVEFHSU5HX0xJQkRJUn0gIgorQ1BQRkxBR1MgKz0gIi1QIgorQlVJTERfQ1BQRkxBR1MgKz0gIi1QIgorCithY3BhdGhzID0gIi1JIGJ1aWxkLyAtSSBidWlsZC9hYy1tYWNyb3MvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9saWJ0b29sCisJcm0gLWYgJHtTfS9idWlsZC9saWJ0b29sLm00ICR7U30vYnVpbGQvbHRtYWluLnNoICR7U30vYnVpbGQvbHRvcHRpb25zLm00ICR7U30vYnVpbGQvbHRzdWdhci5tNCAke1N9L2J1aWxkL2x0dmVyc2lvbi5tNCAke1N9L2J1aWxkL2x0fm9ic29sZXRlLm00CisJcm0gLWYgJHtTfS9hY2xvY2FsLm00CisJc2VkIC1pIC1lICdzOndpdGhfc2FzbD0iL3Vzci9sb2NhbCI6d2l0aF9zYXNsPSIke1NUQUdJTkdfRElSfSI6JyAke1N9L2J1aWxkL2FjLW1hY3Jvcy9zYXNsLm00Cit9CisKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfbG9jYWwvbGlic3ZuX3JhX2xvY2FsLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCAvdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxzdm5fZGVsdGEtMXwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2xpYnN2bl9yYV9zdm4tMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3NlcmYvbGlic3ZuX3JhX3NlcmYtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IHJlbGluayBgbGlic3ZuX3JhX3NlcmYtMS5sYScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdAorI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAuLi8uLi9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCisjfCAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9zdWJ2ZXJzaW9uLTEuOC45L2J1aWxkLW91dHB1dHMubWs6MTA5MDogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtc2VyZi1saWInIGZhaWxlZAorI3wgbWFrZTogKioqIFtpbnN0YWxsLXNlcmYtbGliXSBFcnJvciAxCitQQVJBTExFTF9NQUtFSU5TVCA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2FiYmVyL3N3YWJiZXItbmF0aXZlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzEzYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2FiYmVyL3N3YWJiZXItbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlRvb2wgdG8gbW9uaXRvciBhbmQgcmVwb3J0IG9uIGhvc3Qgc3lzdGVtIGZpbGUgdXNhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9zd2FiYmVyIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitTUkNSRVYgPSAiMmQxZmUzNmZiMGE0ZmRhYWU4ODIzYTk4MThhNjc4NTE4MmQ3NWU2NiIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9zd2FiYmVyIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19jb25maWd1cmUgKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKyAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODIxZmE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYwpAQCAtMCwwICsxLDYzIEBACitERVNDUklQVElPTiA9ICJTV0lHIC0gU2ltcGxpZmllZCBXcmFwcGVyIGFuZCBJbnRlcmZhY2UgR2VuZXJhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3N3aWcuc291cmNlZm9yZ2UubmV0LyIKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lNzgwN2E2MjgyNzg0YTdkZGU0Yzg0NjYyNmIwOGZjNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLUdQTDttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1VTklWRVJTSVRJRVM7bWQ1PThjZTlkY2M4ZjdjOTk0ZGU0YTQwOGIyMDVjNzJiYTA4IgorCitTRUNUSU9OID0gImRldmVsIgorCitERVBFTkRTID0gImxpYnBjcmUgcHl0aG9uIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHl0aG9ubmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0td2l0aC1weXRob249JHtQWVRIT059IFwKKyAgICAtLXdpdGhvdXQtYWxsZWdyb2NsIFwKKyAgICAtLXdpdGhvdXQtYW5kcm9pZCBcCisgICAgLS13aXRob3V0LWJvb3N0IFwKKyAgICAtLXdpdGhvdXQtY2hpY2tlbiBcCisgICAgLS13aXRob3V0LWNsaXNwIFwKKyAgICAtLXdpdGhvdXQtY3NoYXJwIFwKKyAgICAtLXdpdGhvdXQtZCBcCisgICAgLS13aXRob3V0LWdjaiBcCisgICAgLS13aXRob3V0LWdvIFwKKyAgICAtLXdpdGhvdXQtZ3VpbGUgXAorICAgIC0td2l0aG91dC1qYXZhIFwKKyAgICAtLXdpdGhvdXQtbHVhIFwKKyAgICAtLXdpdGhvdXQtbXpzY2hlbWUgXAorICAgIC0td2l0aG91dC1vY2FtbCBcCisgICAgLS13aXRob3V0LW9jdGF2ZSBcCisgICAgLS13aXRob3V0LXBlcmw1IFwKKyAgICAtLXdpdGhvdXQtcGlrZSBcCisgICAgLS13aXRob3V0LXBocCBcCisgICAgLS13aXRob3V0LXB5dGhvbjMgXAorICAgIC0td2l0aG91dC1yIFwKKyAgICAtLXdpdGhvdXQtcnVieSBcCisgICAgLS13aXRob3V0LXRjbCBcCisiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9fY29uZmlndXJlKCkgeworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzICR7U30vVG9vbHMvY29uZmlnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuc3ViICR7U30vVG9vbHMvY29uZmlnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfQorICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9CisgICAgb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgY2QgJHtEfSR7YmluZGlyfQorICAgIGxuIC1zIHN3aWcgc3dpZzIuMAorfQorCitkZWYgc3dpZ2xpYl9yZWxwYXRoKGQpOgorICAgIHN3aWdsaWIgPSBkLmdldFZhcignZGF0YWRpcicsIFRydWUpICsgIi8iICsgZC5nZXRWYXIoJ0JQTicsIFRydWUpICsgIi8iICsgZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKHN3aWdsaWIsIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSkKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgIGNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vc3dpZyBTV0lHX0xJQj0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bzd2lnbGliX3JlbHBhdGgoZCl9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1Vc2UtcHJvYy1zZWxmLWV4ZS1mb3Itc3dpZy1zd2lnbGliLW9uLW5vbi1XaW4zMi1wbGF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRmM2UyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIGE0YTA0NDBhNjQ0YzZjNWU1ZGEwOTZlZmUzY2YwNWJhMzA5YTI4NGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiTk9EQSwgS2FpIiA8bm9kYWthaUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDIyIEFwciAyMDEyIDE3OjAxOjAyICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSAvcHJvYy9zZWxmL2V4ZSBmb3IgInN3aWcgLXN3aWdsaWIiIG9uIG5vbi1XaW4zMgorIHBsYXRmb3Jtcy4KKworSWYgaXQgd2Fzbid0IGZvdW5kLCB0aGVuIGZhbGwgYmFjayB0byBhIGZpeGVkIHN0cmluZyBqdXN0IGFzIGJlZm9yZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvbWVzc2FnZS5waHA/bXNnX2lkPTI5MTc5NzMzCisKKy0tLQorIFNvdXJjZS9Nb2R1bGVzL21haW4uY3h4IHwgICAyNCArKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4IGIvU291cmNlL01vZHVsZXMvbWFpbi5jeHgKK2luZGV4IGQyZjVkM2IuLmNiYjBhMTIgMTAwNjQ0CistLS0gYS9Tb3VyY2UvTW9kdWxlcy9tYWluLmN4eAorKysrIGIvU291cmNlL01vZHVsZXMvbWFpbi5jeHgKK0BAIC0yNiw2ICsyNiwxMSBAQCBjaGFyIGN2c3Jvb3RfbWFpbl9jeHhbXSA9ICIkSWQkIjsKKyAjaW5jbHVkZSAiY3BhcnNlLmgiCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgkJLy8gZm9yIElOVF9NQVgKKysjaWZuZGVmIF9XSU4zMgorKyNpbmNsdWRlIDxjc3RkZGVmPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4JCS8vIGZvciByZWFkbGluaworKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgkJLy8gZm9yIHN0YXQKKysjZW5kaWYKKyAKKyAvLyBHbG9iYWwgdmFyaWFibGVzCisgCitAQCAtOTAyLDkgKzkwNyw5IEBAIGludCBTV0lHX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgTGFuZ3VhZ2UgKmwpIHsKKyAKKyAgIC8vIENoZWNrIGZvciBTV0lHX0xJQiBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgaWYgKChjID0gZ2V0ZW52KCJTV0lHX0xJQiIpKSA9PSAoY2hhciAqKSAwKSB7CisrICAgIGNoYXIgKnA7CisgI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICBjaGFyIGJ1ZltNQVhfUEFUSF07CistICAgIGNoYXIgKnA7CisgICAgIGlmICghKEdldE1vZHVsZUZpbGVOYW1lKDAsIGJ1ZiwgTUFYX1BBVEgpID09IDAgfHwgKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xcJykpID09IDApKSB7CisgICAgICAgKihwICsgMSkgPSAnXDAnOworICAgICAgIFN3aWdMaWIgPSBOZXdTdHJpbmdmKCIlc0xpYiIsIGJ1Zik7IC8vIE5hdGl2ZSB3aW5kb3dzIGluc3RhbGxhdGlvbiBwYXRoCitAQCAtOTE0LDcgKzkxOSwyMiBAQCBpbnQgU1dJR19tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIExhbmd1YWdlICpsKSB7CisgICAgIGlmIChMZW4oU1dJR19MSUJfV0lOX1VOSVgpID4gMCkKKyAgICAgICBTd2lnTGliV2luVW5peCA9IE5ld1N0cmluZyhTV0lHX0xJQl9XSU5fVU5JWCk7IC8vIFVuaXggaW5zdGFsbGF0aW9uIHBhdGggdXNpbmcgYSBkcml2ZSBsZXR0ZXIgKGZvciBtc3lzL21pbmd3KQorICNlbHNlCistICAgIFN3aWdMaWIgPSBOZXdTdHJpbmcoU1dJR19MSUIpOworKyAgICBjaGFyIGJ1ZltQQVRIX01BWF07CisrICAgIGlmICgwIDwgOjpyZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBidWYsIHNpemVvZihidWYpKSAmJgorKyAgICAgICAgKHAgPSA6OnN0cnN0cihidWYsICIvYmluL3N3aWciKSkpIHsKKysgICAgICAgIGludCBtYWpvciwgbWlub3IsIHBhdGNoOworKyAgICAgICAgY29uc3QgaW50IHJldCA9IDo6c3NjYW5mKFZFUlNJT04sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmcGF0Y2gpOworKyAgICAgICAgaWYgKDMgPT0gcmV0KSB7CisrICAgICAgICAgICAgY29uc3QgOjpwdHJkaWZmX3QgZGlyX3BhcnRfbGVuID0gcCAtIGJ1ZjsKKysgICAgICAgICAgICA6OnNucHJpbnRmKHAsIFBBVEhfTUFYIC0gZGlyX3BhcnRfbGVuLCAiL3NoYXJlL3N3aWcvJWQuJWQuJWQiLCBtYWpvciwgbWlub3IsIHBhdGNoKTsKKysgICAgICAgICAgICBzdHJ1Y3QgOjpzdGF0IHN0YXRfcmVzOworKyAgICAgICAgICAgIGlmICgwID09IDo6c3RhdChidWYsICZzdGF0X3JlcykgJiYgU19JU0RJUihzdGF0X3Jlcy5zdF9tb2RlKSkgeworKyAgICAgICAgICAgICAgICBTd2lnTGliID0gTmV3U3RyaW5nKGJ1Zik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrICAgIGlmIChOVUxMID09IFN3aWdMaWIpCisrICAgICAgICBTd2lnTGliID0gTmV3U3RyaW5nKFNXSUdfTElCKTsKKyAjZW5kaWYKKyAgIH0gZWxzZSB7CisgICAgIFN3aWdMaWIgPSBOZXdTdHJpbmcoYyk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtY29uZmlndXJlLXVzZS1wa2ctY29uZmlnLWZvci1wY3JlLWRldGVjdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxMTI4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA1YzRkNmQ4NTM4OTk0ZDVmZTliM2I0NmJmYWZhZjBhNjA1ZTNiZGE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuLmtvb2lAbGluYXJvLm9yZz4KK0RhdGU6IFR1ZSwgMTcgSnVuIDIwMTQgMDg6MTg6MTcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiB1c2UgcGtnLWNvbmZpZyBmb3IgcGNyZSBkZXRlY3Rpb24KKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuLmtvb2lAbGluYXJvLm9yZz4KK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworLS0tCisgY29uZmlndXJlLmFjIHwgMzggKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGM5ODRiNy4uNmVkY2VjMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzAsMzggKzcwLDE0IEBAIEFDX01TR19SRVNVTFQoWyR3aXRoX3BjcmVdKQorIAorIGRubCBUbyBtYWtlIGNvbmZpZ3VyaW5nIGVhc2llciwgY2hlY2sgZm9yIGEgbG9jYWxseSBidWlsdCBQQ1JFIHVzaW5nIHRoZSBUb29scy9wY3JlLWJ1aWxkLnNoIHNjcmlwdAorIGlmIHRlc3QgeCIke3dpdGhfcGNyZX0iID0geHllcyA7IHRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgbG9jYWwgUENSRV0pCistICBsb2NhbF9wY3JlX2NvbmZpZz1ubworLSAgaWYgdGVzdCAteiAkUENSRV9DT05GSUc7IHRoZW4KKy0gICAgaWYgdGVzdCAtZiBgcHdkYC9wY3JlL3BjcmUtc3dpZy1pbnN0YWxsL2Jpbi9wY3JlLWNvbmZpZzsgdGhlbgorLSAgICAgIFBDUkVfQ09ORklHPWBwd2RgL3BjcmUvcGNyZS1zd2lnLWluc3RhbGwvYmluL3BjcmUtY29uZmlnCistICAgICAgbG9jYWxfcGNyZV9jb25maWc9JFBDUkVfQ09ORklHCistICAgIGZpCistICBmaQorLSAgQUNfTVNHX1JFU1VMVChbJGxvY2FsX3BjcmVfY29uZmlnXSkKKy1maQorLUFTX0lGKFt0ZXN0ICJ4JHdpdGhfcGNyZSIgIT0geG5vXSwKKy0gIFtBWF9QQVRIX0dFTkVSSUMoW3BjcmVdLAorLSAgICBbXSwgZG5sIE1pbmltYWwgdmVyc2lvbiBvZiBQQ1JFIHdlIG5lZWQgLS0gYWNjZXB0IGFueQorLSAgICBbXSwgZG5sIGN1c3RvbSBzZWQgc2NyaXB0IGZvciB2ZXJzaW9uIHBhcnNpbmcgaXMgbm90IG5lZWRlZAorLSAgICBbQUNfREVGSU5FKFtIQVZFX1BDUkVdLCBbMV0sIFtEZWZpbmUgaWYgeW91IGhhdmUgUENSRSBsaWJyYXJ5XSkKKy0gICAgIExJQlM9IiRMSUJTICRQQ1JFX0xJQlMiCistICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRQQ1JFX0NGTEFHUyIKKy0gICAgXSwKKy0gICAgW0FDX01TR19GQUlMVVJFKFsKKy0gICAgICAgIENhbm5vdCBmaW5kIHBjcmUtY29uZmlnIHNjcmlwdCBmcm9tIFBDUkUgKFBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zKQorLSAgICAgICAgbGlicmFyeSBwYWNrYWdlLiBUaGlzIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciBjb25maWd1cmUgdG8gY29tcGxldGUsCistICAgICAgICBFaXRoZXI6CistICAgICAgICAtIEluc3RhbGwgdGhlIFBDUkUgZGV2ZWxvcGVyIHBhY2thZ2Ugb24geW91ciBzeXN0ZW0gKHByZWZlcnJlZCBhcHByb2FjaCkuCistICAgICAgICAtIERvd25sb2FkIHRoZSBQQ1JFIHNvdXJjZSB0YXJiYWxsLCBidWlsZCBhbmQgaW5zdGFsbCBvbiB5b3VyIHN5c3RlbQorLSAgICAgICAgICBhcyB5b3Ugd291bGQgZm9yIGFueSBwYWNrYWdlIGJ1aWx0IGZyb20gc291cmNlIGRpc3RyaWJ1dGlvbi4KKy0gICAgICAgIC0gVXNlIHRoZSBUb29scy9wY3JlLWJ1aWxkLnNoIHNjcmlwdCB0byBidWlsZCBQQ1JFIGp1c3QgZm9yIFNXSUcgdG8gc3RhdGljYWxseQorLSAgICAgICAgICBsaW5rIGFnYWluc3QuIFJ1biAnVG9vbHMvcGNyZS1idWlsZC5zaCAtLWhlbHAnIGZvciBpbnN0cnVjdGlvbnMuCistICAgICAgICAgIChxdWl0ZSBlYXN5IGFuZCBkb2VzIG5vdCByZXF1aXJlIHByaXZpbGVnZXMgdG8gaW5zdGFsbCBQQ1JFIG9uIHlvdXIgc3lzdGVtKQorLSAgICAgICAgLSBVc2UgY29uZmlndXJlIC0td2l0aG91dC1wY3JlIHRvIGRpc2FibGUgcmVndWxhciBleHByZXNzaW9ucyBzdXBwb3J0IGluIFNXSUcKKy0gICAgICAgICAgKG5vdCByZWNvbW1lbmRlZCkuXSkKKy0gICAgXSkKKysgIFBLR19DSEVDS19NT0RVTEVTKFtQQ1JFXSwgW2xpYnBjcmVdLCBbCisrICAgIEFDX0RFRklORShbSEFWRV9QQ1JFXSwgWzFdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIFBDUkUgbGlicmFyeV0pCisrICAgIExJQlM9IiRMSUJTICRQQ1JFX0xJQlMiCisrICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFBDUkVfQ0ZMQUdTIgorKyAgXSwgWworKyAgICBBQ19NU0dfV0FSTihbJFBDUkVfUEtHX0VSUk9SU10pCisgICBdKQorK2ZpCisgCisgCisgZG5sIENDYWNoZQorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWdfMy4wLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWdfMy4wLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwOTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZ18zLjAuNi5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1Vc2UtcHJvYy1zZWxmLWV4ZS1mb3Itc3dpZy1zd2lnbGliLW9uLW5vbi1XaW4zMi1wbGF0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZGY0M2FlMjcxNjQyYmNmYTYxYzFlNTlmOTcwZjk5NjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY3ZjYzZWExMTk1NjEwNmU0Y2RhNjY0MTZkNTAyMDMzMGRjNGNlMmVlNDUwNTdkMzlhOTQ5NGNlMzNlY2EwNSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMS1saW51eC1zeXNsaW51eC1zdXBwb3J0LWV4dDItMy00LWRldmljZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiNzg3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorRnJvbSA2MGYzODMzYWIyYjU4OTk3NzFiNGVhYjY1NGU4OGY5ODg4Yjk5NTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjAxOjU1ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMS85XSBsaW51eC9zeXNsaW51eDogc3VwcG9ydCBleHQyLzMvNCBkZXZpY2UKKworKiBTdXBwb3J0IGV4dDIvMy80IGRlaXZjZS4KKyogVGhlIG9wZW5fZXh0Ml9mcygpIGNoZWNrcyB3aGV0aGVyIGl0IGlzIGFuIGV4dDIvMy80IGRldmljZSwKKyAgZG8gdGhlIGV4dDIvMy80IGluc3RhbGxhdGlvbiAoaW5zdGFsbF90b19leHQyKCkpIGlmIHllcywgb3RoZXJ3aXNlIGdvCisgIG9uIHRvIHRoZSBmYXQvbnRmcy4KKyogVGhlIGV4dDIvMy80IHN1cHBvcnQgZG9lc24ndCByZXF1aXJlIHJvb3QgcHJpdmlsZWdlcyBzaW5jZSBpdCBkb2Vzbid0IG5lZWQKKyAgbW91bnQgKGJ1dCB3cml0ZSBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkKS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggOTEyZGU3MS4uMzZmYzIwMiAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC0yNTYsNiArMjU2LDIzIEBAIGludCBkb19vcGVuX2ZpbGUoY2hhciAqbmFtZSkKKyAgICAgcmV0dXJuIGZkOworIH0KKyAKKysvKgorKyAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBjb250YWlucyBhbiBleHQyLCBleHQzIG9yIGV4dDQgZnMgYW5kIG9wZW4gaXQgaWYKKysgKiB0cnVlLgorKyAqIHJldHVybiB2YWx1ZToKKysgKiAwOiBFdmVyeXRoaW5nIGlzIE9LCisrICogMTogTm90IGFuIGV4dDIsIGV4dDMgb3IgZXh0NAorKyAqIC0xOiB1bmV4cGVjdGVkIGVycm9yCisrICovCisrc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisreworK30KKysKKysvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCisrc3RhdGljIGludCBpbnN0YWxsX3RvX2V4dDIoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisreworK30KKysKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VjdGJ1ZltTRUNUT1JfU0laRV07CitAQCAtMzEzLDYgKzMzMCwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlkaWUoImNhbid0IGNvbWJpbmUgYW4gb2Zmc2V0IHdpdGggYSBibG9jayBkZXZpY2UiKTsKKyAgICAgfQorIAorKyAgICAvKgorKyAgICAgKiBDaGVjayBpZiBpdCBpcyBhbiBleHQyLCBleHQzIG9yIGV4dDQKKysgICAgICovCisrICAgIHJ2ID0gb3Blbl9leHQyX2ZzKG9wdC5kZXZpY2UsIHN1YmRpcik7CisrICAgIGlmIChydiA9PSAwKSB7CisrICAgICAgICBpZiAoaW5zdGFsbF90b19leHQyKG9wdC5kZXZpY2UsIGRldl9mZCwgc3ViZGlyKSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGluc3RhbGxhdGlvbiBmYWlsZWRcbiIsIG9wdC5kZXZpY2UpOworKyAgICAgICAgICAgIGV4aXQoMSk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gMDsKKysgICAgLyogVW5leHBlY3RlZCBlcnJvcnMgKi8KKysgICAgfSBlbHNlIGlmIChydiA9PSAtMSkgeworKyAgICAgICAgZXhpdCgxKTsKKysgICAgfQorKworKyAgICAvKiBSZXNldCBydiAqLworKyAgICBydiA9IDA7CisrCisgICAgIHhwcmVhZChkZXZfZmQsIHNlY3RidWYsIFNFQ1RPUl9TSVpFLCBvcHQub2Zmc2V0KTsKKyAgICAgZnN5bmMoZGV2X2ZkKTsKKyAKK0BAIC0zMjIsNiArMzU3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICovCisgICAgIGlmICgoZXJybXNnID0gc3lzbGludXhfY2hlY2tfYm9vdHNlY3Qoc2VjdGJ1ZiwgJmZzX3R5cGUpKSkgeworIAlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgb3B0LmRldmljZSwgZXJybXNnKTsKKysJZnByaW50ZihzdGRlcnIsICIlczogc3VwcG9ydGVkIGZzOiBmYXQvbnRmcy9leHQyL2V4My9leHQ0XG4iLCBwcm9ncmFtKTsKKyAJZXhpdCgxKTsKKyAgICAgfQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjZjA2MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaApAQCAtMCwwICsxLDE0MSBAQAorRnJvbSAwN2ZiNzM3ZmI2MGMwOGVhYWE0MTk4OWQ1MzFmYzIzMDA5NTIzNTQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjA5OjE4ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IG9wZW5fZXh0Ml9mcygpCisKK1RoZSBvcGVuX2V4dDJfZnMoKSBjaGVja3Mgd2hldGhlciBpdCBpcyBhbiBleHQyL2V4dDMvZXh0NCBkZXZpY2UsIGFuZAorcmV0dXJuOgorMDogSXQgaXMgYW4gZXh0MiwgZXh0MyBvciBleHQ0LgorMTogTm90IGFuIGV4dDIsIGV4dDMgb3IgZXh0NC4KKy0xOiB1bmV4cGVjdGVkIGVycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9NYWtlZmlsZSAgIHwgIDIgKy0KKyBsaW51eC9zeXNsaW51eC5jIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDgxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpbnV4L01ha2VmaWxlIGIvbGludXgvTWFrZWZpbGUKK2luZGV4IDExNjY3ZTEuLmFjMWFjNTggMTAwNjQ0CistLS0gYS9saW51eC9NYWtlZmlsZQorKysrIGIvbGludXgvTWFrZWZpbGUKK0BAIC01MSw3ICs1MSw3IEBAIHNwb3RsZXNzOiBjbGVhbgorIGluc3RhbGxlcjogc3lzbGludXggc3lzbGludXgtbm9tdG9vbHMKKyAKKyBzeXNsaW51eDogJChPQkpTKQorLQkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisrCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJF4gLWxleHQyZnMKKyAKKyBzeXNsaW51eC1ub210b29sczogc3lzbGludXgKKyAJbG4gLWYgJDwgJEAKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggMzZmYzIwMi4uY2M0ZTdkYSAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC03Miw2ICs3Miw3IEBACisgI2luY2x1ZGUgInN5c2x4ZnMuaCIKKyAjaW5jbHVkZSAic2V0YWR2LmgiCisgI2luY2x1ZGUgInN5c2x4b3B0LmgiIC8qIHVuaWZpZWQgb3B0aW9ucyAqLworKyNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+CisgCisgZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2dyYW07CS8qIE5hbWUgb2YgcHJvZ3JhbSAqLworIAorQEAgLTgyLDYgKzgzLDkgQEAgY2hhciAqbW50cGF0aCA9IE5VTEw7CQkvKiBQYXRoIG9uIHdoaWNoIHRvIG1vdW50ICovCisgaW50IGxvb3BfZmQgPSAtMTsJCS8qIExvb3AgZGV2aWNlICovCisgI2VuZGlmCisgCisrZXh0Ml9maWxzeXMgICAgIGUyZnMgPSBOVUxMOyAgICAvKiBFeHQyLzMvNCBmaWxlc3lzdGVtICovCisrZXh0Ml9pbm9fdCAgICAgIHJvb3QsIGN3ZDsgICAgICAvKiBUaGUgcm9vdCBhbmQgY3dkIG9mIGUyZnMgKi8KKysKKyB2b2lkIF9fYXR0cmlidXRlX18gKChub3JldHVybikpIGRpZShjb25zdCBjaGFyICptc2cpCisgeworICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgcHJvZ3JhbSwgbXNnKTsKK0BAIC0yNjYsNiArMjcwLDgyIEBAIGludCBkb19vcGVuX2ZpbGUoY2hhciAqbmFtZSkKKyAgKi8KKyBzdGF0aWMgaW50IG9wZW5fZXh0Ml9mcyhjb25zdCBjaGFyICpkZXZpY2UsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyB7CisrICAgIGludCAgICAgICAgIHJldHZhbDsKKysgICAgaW50ICAgICAgICAgb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXLCBtb3VudF9mbGFnczsKKysgICAgZXh0Ml9pbm9fdCAgZGlyaW5vOworKyAgICBjaGFyICAgICAgICBvcHRfc3RyaW5nWzQwXTsKKysKKysgICAgaWYgKG9wdC5vZmZzZXQpIHsKKysgICAgICAgIHNwcmludGYob3B0X3N0cmluZywgIm9mZnNldD0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcHQub2Zmc2V0KTsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19vcGVuMihkZXZpY2UsIG9wdF9zdHJpbmcsIG9wZW5fZmxhZywgMCwgMCwgdW5peF9pb19tYW5hZ2VyLCAmZTJmcyk7CisrICAgIH0gZWxzZQorKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlLCBvcGVuX2ZsYWcsIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmUyZnMpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAvKiBJdCBtaWdodCBub3QgYmUgYW4gZXh0TiBmcywgc28gd2UgbmVlZCBjaGVjayBtYWdpYyBmaXJzdGx5ICovCisrICAgICAgICBpZiAocmV0dmFsID09IEVYVDJfRVRfQkFEX01BR0lDKSB7CisrICAgICAgICAgICAgLyogRG8gbm90aGluZywgcmV0dXJuIHNpbGVudGx5ICovCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIHRyeWluZyB0byBvcGVuOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLyogU3RvcCBpZiBpdCBpcyBtb3VudGVkICovCisrICAgIHJldHZhbCA9IGV4dDJmc19jaGVja19pZl9tb3VudGVkKGRldmljZSwgJm1vdW50X2ZsYWdzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXh0MmZzX2NoZWNrX2lmX21vdW50KCkgZXJyb3Igb24gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlcyBpcyBtb3VudGVkXG4iLCBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIGUyZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBFWFQyRlNfQk1BUDY0X1JCVFJFRTsKKysKKysgICAgLyogUmVhZCB0aGUgaW5vZGUgbWFwICovCisrICAgIHJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcChlMmZzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogd2hpbGUgcmVhZGluZyBpbm9kZSBiaXRtYXA6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIFJlYWQgdGhlIGJsb2NrIG1hcCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAoZTJmcyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdoaWxlIHJlYWRpbmcgYmxvY2sgYml0bWFwOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICByb290ID0gY3dkID0gRVhUMl9ST09UX0lOTzsKKysgICAgLyogQ2hlY2sgdGhlIHN1YmRpciAqLworKyAgICBpZiAoc3RyY21wKHN1YmRpciwgIi8iKSkgeworKwlyZXR2YWwgPSBleHQyZnNfbmFtZWkoZTJmcywgcm9vdCwgY3dkLCBzdWJkaXIsICZkaXJpbm8pOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byBmaW5kIGRpciAlcyBvbiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgc3ViZGlyLCBkZXZpY2UpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19jaGVja19kaXJlY3RvcnkoZTJmcywgZGlyaW5vKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gY2QgdG86ICVzXG4iLCBwcm9ncmFtLCBzdWJkaXIpOworKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrICAgICAgICBjd2QgPSBkaXJpbm87CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisrCisrZmFpbDoKKysgICAgKHZvaWQpIGV4dDJmc19jbG9zZShlMmZzKTsKKysgICAgcmV0dXJuIC0xOworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGJhMTA1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoCkBAIC0wLDAgKzEsMTE2IEBACitGcm9tIDY0ZDg1NmIyNDM4MTI5MDcwNjg3NzZiMjA0YTAwM2EzYThmYTEyMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTY6MTc6NDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgaW5zdGFsbF90b19leHQyKCkKKworKiBUaGUgaGFuZGxlX2Fkdl9vbl9leHQoKSBjaGVja3Mgd2hldGhlciB3ZSBvbmx5IG5lZWQgdXBkYXRlIGFkdi4KKyogVGhlIHdyaXRlX3RvX2V4dCgpIGluc3RhbGxzIGZpbGVzIChsZGxpbnV4LnN5cyBvciBsZGxpbnV4LmMzMikgdG8gdGhlCisgIGRldmljZS4KKyogVGhlIGluc3RhbGxfYm9vdGJsb2NrKCkgaW5zdGFsbHMgdGhlIGJvb3QgYmxvY2suCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3OSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggY2M0ZTdkYS4uNDVmMDgwZCAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC0zNDYsMTEgKzM0Niw5MCBAQCBzdGF0aWMgaW50IG9wZW5fZXh0Ml9mcyhjb25zdCBjaGFyICpkZXZpY2UsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyBmYWlsOgorICAgICAodm9pZCkgZXh0MmZzX2Nsb3NlKGUyZnMpOworICAgICByZXR1cm4gLTE7CisrCisrfQorKworKy8qCisrICogSW5zdGFsbCB0aGUgYm9vdCBibG9jayBvbiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKysgKiBNdXN0IGJlIHJ1biBBRlRFUiBmaWxlIGluc3RhbGxlZC4KKysgKi8KKytpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisreworK30KKysKKytzdGF0aWMgaW50IGhhbmRsZV9hZHZfb25fZXh0KHZvaWQpCisreworK30KKysKKysvKiBXcml0ZSBmaWxlcywgYWR2LCBib290IHNlY3RvciAqLworK3N0YXRpYyBpbnQgd3JpdGVfdG9fZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlfZmxhZ3MsIGludCBkZXZfZmQsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyt7CisgfQorIAorIC8qIFRoZSBpbnN0YWxsIGZ1bmMgZm9yIGV4dDIsIGV4dDMgYW5kIGV4dDQgKi8KKyBzdGF0aWMgaW50IGluc3RhbGxfdG9fZXh0Mihjb25zdCBjaGFyICpkZXZpY2UsIGludCBkZXZfZmQsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyB7CisrICAgIGludCAgICAgICAgIHJldHZhbDsKKysgICAgZXh0Ml9pbm9fdCAgb2xkaW5vOworKworKyAgICBjb25zdCBjaGFyICpmaWxlID0gImxkbGludXguc3lzIjsKKysgICAgY29uc3QgY2hhciAqb2xkZmlsZSA9ICJleHRsaW51eC5zeXMiOworKyAgICBjb25zdCBjaGFyICpjMzJmaWxlID0gImxkbGludXguYzMyIjsKKysKKysgICAgLyogSGFuZGxlIHRoZSBhZHYgKi8KKysgICAgaWYgKGhhbmRsZV9hZHZfb25fZXh0KCkgPCAwKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSBoYW5kbGluZyBBRFYgb24gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICByZXR2YWwgPSAxOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIFJldHVybiBpZiBvbmx5IG5lZWQgdXBkYXRlIHRoZSBhZHYgKi8KKysgICAgaWYgKG9wdC51cGRhdGVfb25seSA9PSAtMSkgeworKyAgICAgICAgcmV0dXJuIGV4dDJmc19jbG9zZShlMmZzKTsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSBsZGxpbnV4LnN5cywgYWR2LCBib290IHNlY3RvciAqLworKyAgICByZXR2YWwgPSB3cml0ZV90b19leHQoZmlsZSwgKGNvbnN0IGNoYXIgX2ZvcmNlICopYm9vdF9pbWFnZSwKKysgICAgICAgICAgICAgICAgYm9vdF9pbWFnZV9sZW4sIEVYVDJfSU1NVVRBQkxFX0ZMLCBkZXZfZmQsIHN1YmRpcik7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiB3aGlsZSB3cml0aW5nOiAlcy5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGUpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIFdyaXRlIGxkbGludXguYzMyICovCisrICAgIHJldHZhbCA9IHdyaXRlX3RvX2V4dChjMzJmaWxlLAorKyAgICAgICAgICAgICAgICAoY29uc3QgY2hhciBfZm9yY2UgKilzeXNsaW51eF9sZGxpbnV4YzMyLAorKyAgICAgICAgICAgICAgICBzeXNsaW51eF9sZGxpbnV4YzMyX2xlbiwgMCwgZGV2X2ZkLCBzdWJkaXIpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogd2hpbGUgd3JpdGluZzogJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBjMzJmaWxlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBMb29rIGlmIHdlIGhhdmUgdGhlIGV4dGxpbnV4LnN5cyBhbmQgcmVtb3ZlIGl0Ki8KKysgICAgcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgb2xkZmlsZSwgJm9sZGlubyk7CisrICAgIGlmIChyZXR2YWwgPT0gMCkgeworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX3VubGluayhlMmZzLCBjd2QsIG9sZGZpbGUsIG9sZGlubywgMCk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byB1bmxpbms6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBvbGRmaWxlKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICByZXR2YWwgPSAwOworKyAgICB9CisrCisrICAgIHN5bmMoKTsKKysgICAgcmV0dmFsID0gaW5zdGFsbF9ib290YmxvY2soZGV2X2ZkLCBkZXZpY2UpOworKyAgICBjbG9zZShkZXZfZmQpOworKyAgICBzeW5jKCk7CisrCisrZmFpbDoKKysgICAgKHZvaWQpIGV4dDJmc19jbG9zZShlMmZzKTsKKysgICAgcmV0dXJuIHJldHZhbDsKKyB9CisgCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNC1saW51eC1zeXNsaW51eC1hZGQtZXh0X2ZpbGVfcmVhZC1hbmQtZXh0X2ZpbGVfd3JpdGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI1NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNC1saW51eC1zeXNsaW51eC1hZGQtZXh0X2ZpbGVfcmVhZC1hbmQtZXh0X2ZpbGVfd3JpdGUucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorRnJvbSAzNWQzODQyY2M0YjkzMGM1MTAyZWVkMjkyMWUwMTg5YjdmNGZkMDY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjQzOjM3ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNC85XSBsaW51eC9zeXNsaW51eDogYWRkIGV4dF9maWxlX3JlYWQoKSBhbmQgZXh0X2ZpbGVfd3JpdGUoKQorCitXaWxsIHVzZSB0aGVtIHRvIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBleHRYIGRldmljZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCA0NWYwODBkLi4yNDdjODZhIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTM0OSw2ICszNDksNjggQEAgZmFpbDoKKyAKKyB9CisgCisrLyogUmVhZCBmcm9tIGFuIGV4dDJfZmlsZSAqLworK3N0YXRpYyBpbnQgZXh0X2ZpbGVfcmVhZChleHQyX2ZpbGVfdCBlMl9maWxlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZykKKyt7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsOworKyAgICBjaGFyICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKSBidWY7CisrICAgIHVuc2lnbmVkIGludCAgICAgICAgZ290ID0gMDsKKysgICAgc2l6ZV90ICAgICAgICAgICAgICBkb25lID0gMDsKKysKKysgICAgLyogQWx3YXlzIGxzZWVrIHNpbmNlIGUyX2ZpbGUgaXMgdW5jb250cm9sbGVkIGJ5IHRoaXMgZnVuYyAqLworKyAgICBpZiAoZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgb2Zmc2V0LCBFWFQyX1NFRUtfU0VULCBOVUxMKSkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXh0MmZzX2ZpbGVfbHNlZWsoKSBmYWlsZWQuXG4iLAorKyAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIHdoaWxlICgxKSB7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9yZWFkKGUyX2ZpbGUsIHB0ciwgY291bnQsICZnb3QpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIHJlYWRpbmcgJXNcbiIsCisrICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCBtc2cpOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgICAgIGNvdW50IC09IGdvdDsKKysgICAgICAgIHB0ciArPSBnb3Q7CisrICAgICAgICBkb25lICs9IGdvdDsKKysgICAgICAgIGlmIChnb3QgPT0gMCB8fCBjb3VudCA9PSAwKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIHJldHVybiBkb25lOworK30KKysKKysvKiBXcml0ZSB0byBhbiBleHQyX2ZpbGUgKi8KKytzdGF0aWMgaW50IGV4dF9maWxlX3dyaXRlKGV4dDJfZmlsZV90IGUyX2ZpbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCkKKyt7CisrICAgIGNvbnN0IGNoYXIgICAgICAgICAgKnB0ciA9IChjb25zdCBjaGFyICopIGJ1ZjsKKysgICAgdW5zaWduZWQgaW50ICAgICAgICB3cml0dGVuID0gMDsKKysgICAgc2l6ZV90ICAgICAgICAgICAgICBkb25lID0gMDsKKysKKysgICAgLyogQWx3YXlzIGxzZWVrIHNpbmNlIGUyX2ZpbGUgaXMgdW5jb250cm9sbGVkIGJ5IHRoaXMgZnVuYyAqLworKyAgICBpZiAoZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgb2Zmc2V0LCBFWFQyX1NFRUtfU0VULCBOVUxMKSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19maWxlX2xzZWVrKCkgZmFpbGVkLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIHdoaWxlIChjb3VudCA+IDApIHsKKysgICAgICAgIGlmIChleHQyZnNfZmlsZV93cml0ZShlMl9maWxlLCBwdHIsIGNvdW50LCAmd3JpdHRlbikpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gd3JpdGUgc3lzbGludXggYWR2LlxuIiwKKysgICAgICAgICAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgICAgIGNvdW50IC09IHdyaXR0ZW47CisrICAgICAgICBwdHIgKz0gd3JpdHRlbjsKKysgICAgICAgIGRvbmUgKz0gd3JpdHRlbjsKKysgICAgfQorKworKyAgICByZXR1cm4gZG9uZTsKKyt9CisrCisgLyoKKyAgKiBJbnN0YWxsIHRoZSBib290IGJsb2NrIG9uIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICAqIE11c3QgYmUgcnVuIEFGVEVSIGZpbGUgaW5zdGFsbGVkLgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA1LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1oYW5kbGVfYWR2X29uX2V4dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOWU3YzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA1LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1oYW5kbGVfYWR2X29uX2V4dC5wYXRjaApAQCAtMCwwICsxLDEyNyBAQAorRnJvbSBjZGI5ODBiMzdmNDBkYzJjNDE4OTE0MzRjNzczNmU0OWRhNTM3NTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjQ3OjUyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNS85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGhhbmRsZV9hZHZfb25fZXh0KCkKKworSXQgcmVhZHMgYWR2IGlmIGZvdW5kIG9uIHRoZSBkZXZpY2UsIG9yIHJlc2V0cyBzeXNsaW51eF9hZHYsIG9yIHVwZGF0ZQordGhlIGFkdiBpZiB1cGRhdGUgYWR2IG9ubHkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggMjQ3Yzg2YS4uZGU1ZDI3MiAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00MjEsNiArNDIxLDEwMyBAQCBpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisgCisgc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorIHsKKysgICAgaW50ICAgICAgICAgICAgICAgICBpLCByZXR2YWwsIGZvdW5kX2ZpbGU7CisrICAgIGludCAgICAgICAgICAgICAgICAgbmVlZF9jbG9zZSA9IDI7IC8qIDIgbWVhbnMgbm8gbmVlZCBleHRyYSBjbG9zZSAqLworKyAgICBjaGFyICAgICAgICAgICAgICAgICpmaWxlbmFtZXNbMl0gPSB7ImxkbGludXguc3lzIiwgImV4dGxpbnV4LnN5cyJ9OworKyAgICBjaGFyICAgICAgICAgICAgICAgICpmaWxlbmFtZTsKKysgICAgZXh0Ml9pbm9fdCAgICAgICAgICBuZXdpbm87CisrICAgIGV4dDJfZmlsZV90ICAgICAgICAgZTJfZmlsZTsKKysgICAgc3RydWN0IGV4dDJfaW5vZGUgICBpbm9kZTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZXNbaV07CisrICAgICAgICBmb3VuZF9maWxlID0gMDsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIGZpbGVuYW1lLCAmbmV3aW5vKTsKKysgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworKyAgICAgICAgICAgIGZvdW5kX2ZpbGUgPSAxOworKyAgICAgICAgfSBlbHNlCisrICAgICAgICAgICAgY29udGludWU7CisrCisrICAgICAgICBuZWVkX2Nsb3NlID0gaTsKKysKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oZTJmcywgbmV3aW5vLCBFWFQyX0ZMQUdfUlcsICZlMl9maWxlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gb3BlbiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGUyZnMsIG5ld2lubywgJmlub2RlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSByZWFkaW5nIGlub2RlOiAldSwgZmlsZTogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIG5ld2lubywgZmlsZW5hbWUpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIENoZWNrIHRoZSBzaXplIHRvIHNlZSBpZiB0b28gc21hbGwgdG8gcmVhZCAqLworKyAgICAgICAgaWYgKGlub2RlLmlfc2l6ZSA8IDIgKiBBRFZfU0laRSkgeworKyAgICAgICAgICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHdyaXRlIGF1eGlsbGlhcnkgZGF0YVxuXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaXplIG9mICVzIGlzIHRvbyBzbWFsbCAobmVlZCAtLXVwZGF0ZSk/XG4iLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICAgICAgcmV0dmFsID0gLTE7CisrICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgc3lzbGludXhfcmVzZXRfYWR2KHN5c2xpbnV4X2Fkdik7CisrICAgICAgICAgICAgZm91bmRfZmlsZSA9IDA7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBSZWFkIHRoZSBhZHYgKi8KKysgICAgICAgIHJldHZhbCA9IGV4dF9maWxlX3JlYWQoZTJfZmlsZSwgc3lzbGludXhfYWR2LCAyICogQURWX1NJWkUsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGUuaV9zaXplIC0gMiAqIEFEVl9TSVpFLCAiQURWIik7CisrICAgICAgICBpZiAocmV0dmFsID09IC0xKQorKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICBpZiAocmV0dmFsID09IDIgKiBBRFZfU0laRSkgeworKyAgICAgICAgICAgIHJldHZhbCA9IHN5c2xpbnV4X3ZhbGlkYXRlX2FkdihzeXNsaW51eF9hZHYpOworKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGFkdiBzdWNjZXNzZnVsbHkgKi8KKysgICAgICAgICAgICBpZiAocmV0dmFsID09IDApCisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogQ2xvc2UgdGhlIGZpbGUgaWYgcmVhY2hlcyBoZXJlLCBvdGhlcndpc2Ugd2UgbGVhdmUgdGhlIGZpbGUKKysgICAgICAgICAqIG9wZW4gaW4gY2FzZSB3ZSBuZWVkIHdyaXRlIGl0ICovCisrICAgICAgICBuZWVkX2Nsb3NlID0gMjsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIGNsb3NpbmcgJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICghZm91bmRfZmlsZSkgeworKyAgICAgICAgaWYgKG9wdC51cGRhdGVfb25seSA9PSAtMSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG5vIGxkbGludXguc3lzIG9yIGV4dGxpbnV4LnN5cyBmb3VuZCBvbiB0aGUgZGV2aWNlXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBzeXNsaW51eF9yZXNldF9hZHYoc3lzbGludXhfYWR2KTsKKysgICAgfQorKworKyAgICAvKiBUaGUgbW9kaWZ5X2FkdiB3aWxsIHJlc2V0IHRoZSBhZHYgaWYgb3B0LnJlc2V0X2FkdiAqLworKyAgICBpZiAobW9kaWZ5X2FkdigpIDwgMCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgbW9kaWZ5aW5nIGFkdlxuIiwgcHJvZ3JhbSk7CisrICAgICAgICByZXR2YWwgPSAtMTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSBhZHYgaWYgdXBkYXRlX29ubHkgPT0gLTEgYW5kIGZvdW5kIGZpbGUgKi8KKysgICAgaWYgKG9wdC51cGRhdGVfb25seSA9PSAtMSAmJiBmb3VuZF9maWxlKSB7CisrICAgICAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3lzbGludXhfYWR2LCAyICogQURWX1NJWkUgLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RlLmlfc2l6ZSAtIDIgKiBBRFZfU0laRSkgPT0gLTEpCisrICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworK2ZhaWw6CisrICAgIGlmIChuZWVkX2Nsb3NlICE9IDIpCisrICAgICAgICAodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrICAgIHJldHVybiByZXR2YWw7CisgfQorIAorIC8qIFdyaXRlIGZpbGVzLCBhZHYsIGJvb3Qgc2VjdG9yICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE4NzI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoCkBAIC0wLDAgKzEsMjE1IEBACitGcm9tIDkyMmU1NmMxMGUzNmQ4NzY3Nzc1ODBjODRkYWVmOWE2NmJlYTY1MjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTc6MjA6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA2LzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgd3JpdGVfdG9fZXh0KCkgYW5kIGFkZAorIHN5c2xpbnV4ZXh0LmMKKworKiBUaGUgd3JpdGVfdG9fZXh0KCkgd3JpdGUgZmlsZSB0byB0aGUgZXh0WCBkZXZpY2UsIGFuZCBoYW5kbGUgdGhlIGJvb3QKKyAgc2VjdG9yLgorKiBUaGUgc3lzbGludXhleHQuYyBpcyB1c2VkIGZvciBwbGFjaW5nIHRoZSBjb2RlIHdoaWNoIGFyZSB1c2VkIGJ5CisgIGV4dGxpbnV4IGFuZCBzeXNsaW51eCAod2hpY2ggaXMgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoKSkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIHwgICA3ICsrKworIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oIHwgICA1ICsrCisgbGludXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KKyBsaW51eC9zeXNsaW51eC5jICAgICAgICAgICB8IDExOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oCisKK2RpZmYgLS1naXQgYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmI1NGNlZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK0BAIC0wLDAgKzEsNyBAQAorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysvKiBQYXRjaCBzeXNsaW51eF9ib290c2VjdCAqLworK3ZvaWQgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoaW50IGRldl9mZCkKKyt7CisrfQorKworZGlmZiAtLWdpdCBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44YWJkOGI5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuaAorQEAgLTAsMCArMSw1IEBACisrI2lmbmRlZiBFWFQyX1NVUEVSX09GRlNFVAorKyNkZWZpbmUgRVhUMl9TVVBFUl9PRkZTRVQgMTAyNAorKyNlbmRpZgorKworK3ZvaWQgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoaW50IGRldl9mZCk7CitkaWZmIC0tZ2l0IGEvbGludXgvTWFrZWZpbGUgYi9saW51eC9NYWtlZmlsZQoraW5kZXggYWMxYWM1OC4uM2IyMzg2NyAxMDA2NDQKKy0tLSBhL2xpbnV4L01ha2VmaWxlCisrKysgYi9saW51eC9NYWtlZmlsZQorQEAgLTMwLDcgKzMwLDggQEAgU1JDUyAgICAgPSBzeXNsaW51eC5jIFwKKyAgICAgICAgICAgIC4uL2xpYmluc3RhbGxlci9zeXNseG1vZC5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2Jvb3RzZWN0X2Jpbi5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhjMzJfYmluLmMgXAorLQkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYworKwkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYyBcCisrCSAgIC4uL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisgT0JKUwkgPSAkKHBhdHN1YnN0ICUuYywlLm8sJChub3RkaXIgJChTUkNTKSkpCisgCisgLlNVRkZJWEVTOiAuYyAubyAuaSAucyAuUworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCBkZTVkMjcyLi5mMGM5N2E4IDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTQ2LDYgKzQ2LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisgCisgI2luY2x1ZGUgImxpbnV4aW9jdGwuaCIKKyAKK0BAIC03Miw2ICs3Myw3IEBACisgI2luY2x1ZGUgInN5c2x4ZnMuaCIKKyAjaW5jbHVkZSAic2V0YWR2LmgiCisgI2luY2x1ZGUgInN5c2x4b3B0LmgiIC8qIHVuaWZpZWQgb3B0aW9ucyAqLworKyNpbmNsdWRlICJzeXNsaW51eGV4dC5oIgorICNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+CisgCisgZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2dyYW07CS8qIE5hbWUgb2YgcHJvZ3JhbSAqLworQEAgLTQxOSw2ICs0MjEsMTIgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIHsKKyB9CisgCisrLyogQ29uc3RydWN0IHRoZSBib290IGZpbGUgbWFwICovCisraW50IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBuZXdpbm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3JfdCAqc2VjdG9ycywgaW50IG5zZWN0KQorK3sKKyt9CisrCisgc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorIHsKKyAgICAgaW50ICAgICAgICAgICAgICAgICBpLCByZXR2YWwsIGZvdW5kX2ZpbGU7CitAQCAtNTI0LDYgKzUzMiwxMTYgQEAgZmFpbDoKKyBzdGF0aWMgaW50IHdyaXRlX3RvX2V4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpX2ZsYWdzLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBleHQyX2lub190ICAgICAgICAgIG5ld2lubzsKKysgICAgc3RydWN0IGV4dDJfaW5vZGUgICBpbm9kZTsKKysgICAgaW50ICAgICAgICAgICAgICAgICByZXR2YWwsIGksIG1vZGJ5dGVzLCBuc2VjdDsKKysgICAgZXh0Ml9maWxlX3QgICAgICAgICBlMl9maWxlOworKyAgICBzZWN0b3JfdCAgICAgICAgICAgICpzZWN0b3JzOworKworKyAgICAvKiBSZW1vdmUgaXQgaWYgaXQgaXMgYWxyZWFkeSBleGlzdHMgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgZmlsZW5hbWUsICZuZXdpbm8pOworKyAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc191bmxpbmsoZTJmcywgY3dkLCBmaWxlbmFtZSwgbmV3aW5vLCAwKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gdW5saW5rOiAlc1xuIiwgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLyogQ3JlYXRlIG5ldyBpbm9kZSAqLworKyAgICByZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGUyZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3aW5vKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBjcmVhdGUgaW5vZGUgZm9yOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKworKyAgICAvKiBMaW5rIHRoZSBpbm9kZSBhbmQgdGhlIGZpbGVuYW1lICovCisrICAgIHJldHZhbCA9IGV4dDJmc19saW5rKGUyZnMsIGN3ZCwgZmlsZW5hbWUsIG5ld2lubywgRVhUMl9GVF9SRUdfRklMRSk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gbGluayBpbm9kZSBmb3I6ICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKworKyAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihlMmZzLT5pbm9kZV9tYXAsIG5ld2lubykpCisrICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0ICVzLlxuIiwKKysgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrCisrICAgICAgICBleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGUyZnMsIG5ld2lubywgKzEsIDApOworKyAgICAgICAgbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisrCWlub2RlLmlfbW9kZSA9IExJTlVYX1NfSUZSRUcgfCBMSU5VWF9TX0lSVVNSIHwgTElOVVhfU19JUkdSUAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgTElOVVhfU19JUk9USDsKKysJaW5vZGUuaV9mbGFncyB8PSBpX2ZsYWdzOworKyAgICAgICAgaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKysgICAgICAgICAgICBlMmZzLT5ub3cgPyBlMmZzLT5ub3cgOiB0aW1lKDApOworKyAgICAgICAgaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrICAgICAgICBpZiAoZTJmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisrICAgICAgICAgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKysgICAgICAgICAgICBzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKysKKysgICAgICAgICAgICBlaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworKyAgICAgICAgICAgIGVoLT5laF9kZXB0aCA9IDA7CisrICAgICAgICAgICAgZWgtPmVoX2VudHJpZXMgPSAwOworKyAgICAgICAgICAgIGVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisrICAgICAgICAgICAgaSA9IChzaXplb2YoaW5vZGUuaV9ibG9jaykgLSBzaXplb2YoKmVoKSkgLworKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKysgICAgICAgICAgICBlaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworKyAgICAgICAgICAgIGlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworKyAgICB9CisrCisrICAgIHJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZTJmcywgbmV3aW5vLCAmaW5vZGUpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogd2hpbGUgd3JpdHRpbmcgaW5vZGUgJWQuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBuZXdpbm8pOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihlMmZzLCBuZXdpbm8sIEVYVDJfRklMRV9XUklURSwgJmUyX2ZpbGUpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIG9wZW4gJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSB0byBmaWxlICovCisrICAgIGlmIChleHRfZmlsZV93cml0ZShlMl9maWxlLCBzdHIsIGxlbmd0aCwgMCkgPT0gLTEpCisrICAgICAgICBnb3RvIGZhaWw7CisrCisrICAgIGlmIChzdHJjbXAoZmlsZW5hbWUsICJsZGxpbnV4LnN5cyIpID09IDApIHsKKysgICAgICAgIC8qIFdyaXRlIEFEViAqLworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFLAorKyAgICAgICAgICAgICAgICBib290X2ltYWdlX2xlbikgPT0gLTEpCisrICAgICAgICAgICAgZ290byBmYWlsOworKworKyAgICAgICAgLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKysgICAgICAgIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGRldl9mZCk7CisrCisrICAgICAgICAvKiBQYXRjaCBsZGxpbnV4LnN5cyAqLworKyAgICAgICAgbnNlY3QgPSAoYm9vdF9pbWFnZV9sZW4gKyBTRUNUT1JfU0laRSAtIDEpID4+IFNFQ1RPUl9TSElGVDsKKysgICAgICAgIG5zZWN0ICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVHdvIHNlY3RvcnMgZm9yIHRoZSBBRFYgKi8KKysgICAgICAgIHNlY3RvcnMgPSBhbGxvY2Eoc2l6ZW9mKHNlY3Rvcl90KSAqIG5zZWN0KTsKKysgICAgICAgIG1lbXNldChzZWN0b3JzLCAwLCBuc2VjdCAqIHNpemVvZiAqc2VjdG9ycyk7CisrICAgICAgICAvKiBUaGUgc2VjdG9ycyB3aWxsIGJlIG1vZGlmaWVkIGFuZCB1c2VkIGJ5IHN5c2xpbnV4X3BhdGNoKCkgKi8KKysgICAgICAgIHJldHZhbCA9IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcyhlMmZzLCBuZXdpbm8sIHNlY3RvcnMsIG5zZWN0KTsKKysgICAgICAgIGlmIChyZXR2YWwpCisrICAgICAgICAgICAgZ290byBmYWlsOworKworKyAgICAgICAgLyogQ3JlYXRlIHRoZSBtb2RpZmllZCBpbWFnZSBpbiBtZW1vcnkgKi8KKysgICAgICAgIG1vZGJ5dGVzID0gc3lzbGludXhfcGF0Y2goc2VjdG9ycywgbnNlY3QsIG9wdC5zdHVwaWRfbW9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnJhaWRfbW9kZSwgc3ViZGlyLCBOVUxMKTsKKysKKysgICAgICAgIC8qIFJld3JpdGUgdGhlIGZpcnN0IG1vZGJ5dGVzIG9mIGxkbGludXguc3lzICovCisrICAgICAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3RyLCBtb2RieXRlcywgMCkgPT0gLTEpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIHBhdGNoICVzLlxuIiwgcHJvZ3JhbSwKKysgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrICAgIH0KKysKKytmYWlsOgorKyAgICAodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrICAgIHJldHVybiByZXR2YWw7CisgfQorIAorIC8qIFRoZSBpbnN0YWxsIGZ1bmMgZm9yIGV4dDIsIGV4dDMgYW5kIGV4dDQgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTM4MTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorRnJvbSBhOTViODMxZTE4ZGQxMjNmODU5YmM1ZTZjNGNlY2RjYzAxODRlZTM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIgSmFuIDIwMTUgMTI6MTg6MDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA3LzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKCkKKworVGhlIGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcygpIGNvbnN0dWN0cyB0aGUgc2VjdG9yIGFjY29yZGluZyB0byB0aGUKK2JtYXAuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggZjBjOTdhOC4uYzc0MTc1MCAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00MjEsMTAgKzQyMSw2MCBAQCBpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisgeworIH0KKyAKKysvKiBUaGUgZmlsZSdzIGJsb2NrIGNvdW50ICovCisraW50IGJsb2NrX2NvdW50ID0gMDsKKytzdGF0aWMgaW50IGdldF9ibG9ja19jb3VudChleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBibGs2NF90ICpibG9ja25yIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIHZvaWQgKnByaXZhdGUgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQorK3sKKysgICAgYmxvY2tfY291bnQrKzsKKysgICAgcmV0dXJuIDA7CisrfQorKworIC8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworIGludCBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgbmV3aW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgKnNlY3RvcnMsIGludCBuc2VjdCkKKyB7CisrICAgIGJsazY0X3QgICAgICAgICAgICAgcGJsaywgYmxrc2l6ZSwgYmxrID0gMDsKKysgICAgc2VjdG9yX3QgICAgICAgICAgICBzZWM7CisrICAgIHVuc2lnbmVkIGludCAgICAgICAgaTsKKysgICAgaW50ICAgICAgICAgICAgICAgICByZXR2YWw7CisrCisrICAgIGJsa3NpemUgPSBmcy0+YmxvY2tzaXplOworKyAgICBibGtzaXplID4+PSBTRUNUT1JfU0hJRlQ7CisrCisrICAgIC8qIEdldCB0aGUgdG90YWwgYmxvY2tzIG5vLiAqLworKyAgICByZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIG5ld2lubywgQkxPQ0tfRkxBR19SRUFEX09OTFksCisrICAgICAgICAgICAgTlVMTCwgZ2V0X2Jsb2NrX2NvdW50LCBOVUxMKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGV4dDJmc19ibG9ja19pdGVyYXRlMygpIGZhaWxlZC5cbiIsIHByb2dyYW0pOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIHdoaWxlIChuc2VjdCkgeworKyAgICAgICAgaWYgKGJsb2NrX2NvdW50LS0gPT0gMCkKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8qIEdldCB0aGUgcGh5c2ljYWwgYmxvY2sgbm8uIChibWFwKSAqLworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2JtYXAyKGZzLCBuZXdpbm8sIDAsIDAsIDAsIGJsaywgMCwgJnBibGspOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBleHQyZnNfYm1hcDIoKSBmYWlsZWQuXG4iLCBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrCisrICAgICAgICBibGsrKzsKKysgICAgICAgIHNlYyA9IChzZWN0b3JfdClwYmxrICogYmxrc2l6ZTsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBibGtzaXplOyBpKyspIHsKKysgICAgICAgICAgICAqc2VjdG9ycysrID0gc2VjKys7CisrICAgICAgICAgICAgaWYgKCEgLS1uc2VjdCkKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisgfQorIAorIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDBjOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2gKQEAgLTAsMCArMSw0MjcgQEAKK0Zyb20gNzhkNzZiODdhNGI4NTVlNmI2NjFhZTQ1NzI4M2E2M2YzODVjMDRjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyIEphbiAyMDE1IDEyOjI2OjQ2ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggOC85XSBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQ6IGltcGxlbWVudAorIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KCkKKworTW92ZSB0aGUgcmVsYXRlZCBmcm9tIGV4dGxpbnV4L21haW4uYyB0byBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYywgdGhlCitzeXNsaW51eF9wYXRjaF9ib290c2VjdCgpIGFyZSB1c2VkIGJ5IGJvdGggZXh0bGludXgvbWFpbi5jIGFuZAorbGludXgvc3lzbGludXguYy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgZXh0bGludXgvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKy0KKyBleHRsaW51eC9tYWluLmMgICAgICAgICAgICB8IDE2NyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyksIDE2NSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dGxpbnV4L01ha2VmaWxlIGIvZXh0bGludXgvTWFrZWZpbGUKK2luZGV4IDAyZDFkYjUuLjkwZGQ5MmYgMTAwNjQ0CistLS0gYS9leHRsaW51eC9NYWtlZmlsZQorKysrIGIvZXh0bGludXgvTWFrZWZpbGUKK0BAIC0zMSw3ICszMSw4IEBAIFNSQ1MgICAgID0gbWFpbi5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2FkdmlvLmMgXAorIAkgICAuLi9saWJpbnN0YWxsZXIvYm9vdHNlY3RfYmluLmMgXAorIAkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eGMzMl9iaW4uYyBcCistCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4X2Jpbi5jCisrCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4X2Jpbi5jIFwKKysJICAgLi4vbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKKyBPQkpTCSA9ICQocGF0c3Vic3QgJS5jLCUubywkKG5vdGRpciAkKFNSQ1MpKSkKKyAKKyAuU1VGRklYRVM6IC5jIC5vIC5pIC5zIC5TCitkaWZmIC0tZ2l0IGEvZXh0bGludXgvbWFpbi5jIGIvZXh0bGludXgvbWFpbi5jCitpbmRleCAwOTc0MGJkLi42ZmUwMjZlIDEwMDY0NAorLS0tIGEvZXh0bGludXgvbWFpbi5jCisrKysgYi9leHRsaW51eC9tYWluLmMKK0BAIC02MCw2ICs2MCw3IEBACisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKyAjaW5jbHVkZSAibW91bnRpbmZvLmgiCisrI2luY2x1ZGUgInN5c2xpbnV4ZXh0LmgiCisgCisgI2lmZGVmIERFQlVHCisgIyBkZWZpbmUgZHByaW50ZiBwcmludGYKK0BAIC02NywxMCArNjgsNiBAQAorICMgZGVmaW5lIGRwcmludGYoLi4uKSAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIEVYVDJfU1VQRVJfT0ZGU0VUCistI2RlZmluZSBFWFQyX1NVUEVSX09GRlNFVCAxMDI0CistI2VuZGlmCistCisgLyogU2luY2Ugd2UgaGF2ZSB1bnVzZWQgMjA0OCBieXRlcyBpbiB0aGUgcHJpbWFyeSBBRyBvZiBhbiBYRlMgcGFydGl0aW9uLAorICAqIHdlIHdpbGwgdXNlIHRoZSBmaXJzdCAwfjUxMiBieXRlcyBzdGFydGluZyBmcm9tIDIwNDggZm9yIHRoZSBTeXNsaW51eAorICAqIGJvb3Qgc2VjdG9yLgorQEAgLTkyLDEzNiArODksNiBAQCBzdGF0aWMgY2hhciBzdWJ2b2xbQlRSRlNfU1VCVk9MX01BWF07CisgCQkJICAtIDIqQURWX1NJWkUpCisgCisgLyoKKy0gKiBHZXQgdGhlIHNpemUgb2YgYSBibG9jayBkZXZpY2UKKy0gKi8KKy1zdGF0aWMgdWludDY0X3QgZ2V0X3NpemUoaW50IGRldmZkKQorLXsKKy0gICAgdWludDY0X3QgYnl0ZXM7CistICAgIHVpbnQzMl90IHNlY3RzOworLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKy0KKy0jaWZkZWYgQkxLR0VUU0laRTY0CistICAgIGlmICghaW9jdGwoZGV2ZmQsIEJMS0dFVFNJWkU2NCwgJmJ5dGVzKSkKKy0JcmV0dXJuIGJ5dGVzOworLSNlbmRpZgorLSAgICBpZiAoIWlvY3RsKGRldmZkLCBCTEtHRVRTSVpFLCAmc2VjdHMpKQorLQlyZXR1cm4gKHVpbnQ2NF90KSBzZWN0cyA8PCA5OworLSAgICBlbHNlIGlmICghZnN0YXQoZGV2ZmQsICZzdCkgJiYgc3Quc3Rfc2l6ZSkKKy0JcmV0dXJuIHN0LnN0X3NpemU7CistICAgIGVsc2UKKy0JcmV0dXJuIDA7CistfQorLQorLS8qCistICogR2V0IGRldmljZSBnZW9tZXRyeSBhbmQgcGFydGl0aW9uIG9mZnNldAorLSAqLworLXN0cnVjdCBnZW9tZXRyeV90YWJsZSB7CistICAgIHVpbnQ2NF90IGJ5dGVzOworLSAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZzsKKy19OworLQorLXN0YXRpYyBpbnQgc3lzZnNfZ2V0X29mZnNldChpbnQgZGV2ZmQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0KQorLXsKKy0gICAgc3RydWN0IHN0YXQgc3Q7CistICAgIGNoYXIgc3lzZnNfbmFtZVsxMjhdOworLSAgICBGSUxFICpmOworLSAgICBpbnQgcnY7CistCistICAgIGlmIChmc3RhdChkZXZmZCwgJnN0KSkKKy0JcmV0dXJuIC0xOworLQorLSAgICBpZiAoKHNpemVfdClzbnByaW50ZihzeXNmc19uYW1lLCBzaXplb2Ygc3lzZnNfbmFtZSwKKy0JCQkgIi9zeXMvZGV2L2Jsb2NrLyV1OiV1L3N0YXJ0IiwKKy0JCQkgbWFqb3Ioc3Quc3RfcmRldiksIG1pbm9yKHN0LnN0X3JkZXYpKQorLQk+PSBzaXplb2Ygc3lzZnNfbmFtZSkKKy0JcmV0dXJuIC0xOworLQorLSAgICBmID0gZm9wZW4oc3lzZnNfbmFtZSwgInIiKTsKKy0gICAgaWYgKCFmKQorLQlyZXR1cm4gLTE7CistCistICAgIHJ2ID0gZnNjYW5mKGYsICIlbHUiLCBzdGFydCk7CistICAgIGZjbG9zZShmKTsKKy0KKy0gICAgcmV0dXJuIChydiA9PSAxKSA/IDAgOiAtMTsKKy19CistCistLyogU3RhbmRhcmQgZmxvcHB5IGRpc2sgZ2VvbWV0cmllcywgcGx1cyBMUy0xMjAuICBaaXBkaXNrIGdlb21ldHJ5CistICAgKHgvNjQvMzIpIGlzIHRoZSBmaW5hbCBmYWxsYmFjay4gIEkgZG9uJ3Qga25vdyB3aGF0IExTLTI0MCBoYXMKKy0gICBhcyBpdHMgZ2VvbWV0cnksIHNpbmNlIEkgZG9uJ3QgaGF2ZSBvbmUgYW5kIGRvbid0IGtub3cgYW55b25lIHRoYXQgZG9lcywKKy0gICBhbmQgR29vZ2xlIHdhc24ndCBoZWxwZnVsLi4uICovCistc3RhdGljIGNvbnN0IHN0cnVjdCBnZW9tZXRyeV90YWJsZSBzdGFuZGFyZF9nZW9tZXRyaWVzW10gPSB7CistICAgIHszNjAgKiAxMDI0LCB7MiwgOSwgNDAsIDB9fSwKKy0gICAgezcyMCAqIDEwMjQsIHsyLCA5LCA4MCwgMH19LAorLSAgICB7MTIwMCAqIDEwMjQsIHsyLCAxNSwgODAsIDB9fSwKKy0gICAgezE0NDAgKiAxMDI0LCB7MiwgMTgsIDgwLCAwfX0sCistICAgIHsxNjgwICogMTAyNCwgezIsIDIxLCA4MCwgMH19LAorLSAgICB7MTcyMiAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKy0gICAgezI4ODAgKiAxMDI0LCB7MiwgMzYsIDgwLCAwfX0sCistICAgIHszODQwICogMTAyNCwgezIsIDQ4LCA4MCwgMH19LAorLSAgICB7MTIzMjY0ICogMTAyNCwgezgsIDMyLCA5NjMsIDB9fSwJLyogTFMxMjAgKi8KKy0gICAgezAsIHswLCAwLCAwLCAwfX0KKy19OworLQorLWludCBnZXRfZ2VvbWV0cnkoaW50IGRldmZkLCB1aW50NjRfdCB0b3RhbGJ5dGVzLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKKy17CistICAgIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZkX3N0cjsKKy0gICAgc3RydWN0IGxvb3BfaW5mbyBsaTsKKy0gICAgc3RydWN0IGxvb3BfaW5mbzY0IGxpNjQ7CistICAgIGNvbnN0IHN0cnVjdCBnZW9tZXRyeV90YWJsZSAqZ3A7CistICAgIGludCBydiA9IDA7CistCistICAgIG1lbXNldChnZW8sIDAsIHNpemVvZiAqZ2VvKTsKKy0KKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgSERJT19HRVRHRU8sIGdlbykpIHsKKy0JZ290byBvazsKKy0gICAgfSBlbHNlIGlmICghaW9jdGwoZGV2ZmQsIEZER0VUUFJNLCAmZmRfc3RyKSkgeworLQlnZW8tPmhlYWRzID0gZmRfc3RyLmhlYWQ7CistCWdlby0+c2VjdG9ycyA9IGZkX3N0ci5zZWN0OworLQlnZW8tPmN5bGluZGVycyA9IGZkX3N0ci50cmFjazsKKy0JZ2VvLT5zdGFydCA9IDA7CistCWdvdG8gb2s7CistICAgIH0KKy0KKy0gICAgLyogRGlkbid0IHdvcmsuICBMZXQncyBzZWUgaWYgdGhpcyBpcyBvbmUgb2YgdGhlIHN0YW5kYXJkIGdlb21ldHJpZXMgKi8KKy0gICAgZm9yIChncCA9IHN0YW5kYXJkX2dlb21ldHJpZXM7IGdwLT5ieXRlczsgZ3ArKykgeworLQlpZiAoZ3AtPmJ5dGVzID09IHRvdGFsYnl0ZXMpIHsKKy0JICAgIG1lbWNweShnZW8sICZncC0+Zywgc2l6ZW9mICpnZW8pOworLQkgICAgZ290byBvazsKKy0JfQorLSAgICB9CistCistICAgIC8qIERpZG4ndCB3b3JrIGVpdGhlci4uLiBhc3NpZ24gYSBnZW9tZXRyeSBvZiA2NCBoZWFkcywgMzIgc2VjdG9yczsgdGhpcyBpcworLSAgICAgICB3aGF0IHppcGRpc2tzIHVzZSwgc28gdGhpcyB3b3VsZCBoZWxwIGlmIHNvbWVvbmUgaGFzIGEgVVNCIGtleSB0aGF0CistICAgICAgIHRoZXkncmUgYm9vdGluZyBpbiBVU0ItWklQIG1vZGUuICovCistCistICAgIGdlby0+aGVhZHMgPSBvcHQuaGVhZHMgPyA6IDY0OworLSAgICBnZW8tPnNlY3RvcnMgPSBvcHQuc2VjdG9ycyA/IDogMzI7CistICAgIGdlby0+Y3lsaW5kZXJzID0gdG90YWxieXRlcyAvIChnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCk7CistICAgIGdlby0+c3RhcnQgPSAwOworLQorLSAgICBpZiAoIW9wdC5zZWN0b3JzICYmICFvcHQuaGVhZHMpIHsKKy0JZnByaW50ZihzdGRlcnIsCistCQkiV2FybmluZzogdW5hYmxlIHRvIG9idGFpbiBkZXZpY2UgZ2VvbWV0cnkgKGRlZmF1bHRpbmcgdG8gJWQgaGVhZHMsICVkIHNlY3RvcnMpXG4iCistCQkiICAgICAgICAgKG9uIGhhcmQgZGlza3MsIHRoaXMgaXMgdXN1YWxseSBoYXJtbGVzcy4pXG4iLAorLQkJZ2VvLT5oZWFkcywgZ2VvLT5zZWN0b3JzKTsKKy0JcnYgPSAxOwkJCS8qIFN1Ym9wdGltYWwgcmVzdWx0ICovCistICAgIH0KKy0KKy1vazoKKy0gICAgLyogSWYgdGhpcyBpcyBhIGxvb3BiYWNrIGRldmljZSwgdHJ5IHRvIHNldCB0aGUgc3RhcnQgKi8KKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgTE9PUF9HRVRfU1RBVFVTNjQsICZsaTY0KSkKKy0JZ2VvLT5zdGFydCA9IGxpNjQubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKy0gICAgZWxzZSBpZiAoIWlvY3RsKGRldmZkLCBMT09QX0dFVF9TVEFUVVMsICZsaSkpCistCWdlby0+c3RhcnQgPSAodW5zaWduZWQgaW50KWxpLmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGVsc2UgaWYgKCFzeXNmc19nZXRfb2Zmc2V0KGRldmZkLCAmZ2VvLT5zdGFydCkpIHsKKy0JLyogT0sgKi8KKy0gICAgfQorLQorLSAgICByZXR1cm4gcnY7CistfQorLQorLS8qCisgICogUXVlcnkgdGhlIGRldmljZSBnZW9tZXRyeSBhbmQgcHV0IGl0IGludG8gdGhlIGJvb3Qgc2VjdG9yLgorICAqIE1hcCB0aGUgZmlsZSBhbmQgcHV0IHRoZSBtYXAgaW4gdGhlIGJvb3Qgc2VjdG9yIGFuZCBmaWxlLgorICAqIFN0aWNrIHRoZSAiY3VycmVudCBkaXJlY3RvcnkiIGlub2RlIG51bWJlciBpbnRvIHRoZSBmaWxlLgorQEAgLTIzMSwxMSArOTgsOCBAQCBvazoKKyBzdGF0aWMgaW50IHBhdGNoX2ZpbGVfYW5kX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRpciwgaW50IGRldmZkKQorIHsKKyAgICAgc3RydWN0IHN0YXQgZGlyc3QsIHhkc3Q7CistICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnZW87CisgICAgIHNlY3Rvcl90ICpzZWN0cDsKKy0gICAgdWludDY0X3QgdG90YWxieXRlcywgdG90YWxzZWN0b3JzOworICAgICBpbnQgbnNlY3Q7CistICAgIHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKnNiczsKKyAgICAgY2hhciAqZGlycGF0aCwgKnN1YnBhdGgsICp4ZGlycGF0aDsKKyAgICAgaW50IHJ2OworIAorQEAgLTI3OSwzMyArMTQzLDggQEAgc3RhdGljIGludCBwYXRjaF9maWxlX2FuZF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkaXIsIGludCBkZXZmZCkKKyAgICAgLyogTm93IHN1YnBhdGggc2hvdWxkIGNvbnRhaW4gdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGZzIGJhc2UgKi8KKyAgICAgZHByaW50Zigic3VicGF0aCA9ICVzXG4iLCBzdWJwYXRoKTsKKyAKKy0gICAgdG90YWxieXRlcyA9IGdldF9zaXplKGRldmZkKTsKKy0gICAgZ2V0X2dlb21ldHJ5KGRldmZkLCB0b3RhbGJ5dGVzLCAmZ2VvKTsKKy0KKy0gICAgaWYgKG9wdC5oZWFkcykKKy0JZ2VvLmhlYWRzID0gb3B0LmhlYWRzOworLSAgICBpZiAob3B0LnNlY3RvcnMpCistCWdlby5zZWN0b3JzID0gb3B0LnNlY3RvcnM7CistCistICAgIC8qIFBhdGNoIHRoaXMgaW50byBhIGZha2UgRkFUIHN1cGVyYmxvY2suICBUaGlzIGlzbid0IGJlY2F1c2UKKy0gICAgICAgRkFUIGlzIGEgZ29vZCBmb3JtYXQgaW4gYW55IHdheSwgaXQncyBiZWNhdXNlIGl0IGxldHMgdGhlCistICAgICAgIGVhcmx5IGJvb3RzdHJhcCBzaGFyZSBjb2RlIHdpdGggdGhlIEZBVCB2ZXJzaW9uLiAqLworLSAgICBkcHJpbnRmKCJoZWFkcyA9ICV1LCBzZWN0ID0gJXVcbiIsIGdlby5oZWFkcywgZ2VvLnNlY3RvcnMpOworLQorLSAgICBzYnMgPSAoc3RydWN0IGZhdF9ib290X3NlY3RvciAqKXN5c2xpbnV4X2Jvb3RzZWN0OworLQorLSAgICB0b3RhbHNlY3RvcnMgPSB0b3RhbGJ5dGVzID4+IFNFQ1RPUl9TSElGVDsKKy0gICAgaWYgKHRvdGFsc2VjdG9ycyA+PSA2NTUzNikgeworLQlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCAwKTsKKy0gICAgfSBlbHNlIHsKKy0Jc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKy0gICAgfQorLSAgICBzZXRfMzIoJnNicy0+YnNIdWdlU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKy0KKy0gICAgc2V0XzE2KCZzYnMtPmJzQnl0ZXNQZXJTZWMsIFNFQ1RPUl9TSVpFKTsKKy0gICAgc2V0XzE2KCZzYnMtPmJzU2VjUGVyVHJhY2ssIGdlby5zZWN0b3JzKTsKKy0gICAgc2V0XzE2KCZzYnMtPmJzSGVhZHMsIGdlby5oZWFkcyk7CistICAgIHNldF8zMigmc2JzLT5ic0hpZGRlblNlY3MsIGdlby5zdGFydCk7CisrICAgIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisrICAgIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGRldmZkKTsKKyAKKyAgICAgLyogQ29uc3RydWN0IHRoZSBib290IGZpbGUgbWFwICovCisgCitkaWZmIC0tZ2l0IGEvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworaW5kZXggYmI1NGNlZi4uNWE0NDIzYiAxMDA2NDQKKy0tLSBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisrKysgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworQEAgLTEsNyArMSwxNzcgQEAKKyAjZGVmaW5lIF9HTlVfU09VUkNFCisgCisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxnZXRvcHQuaD4KKysjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorKworKyNpbmNsdWRlICJsaW51eGlvY3RsLmgiCisrI2luY2x1ZGUgInN5c2xpbnV4LmgiCisrI2luY2x1ZGUgInN5c2x4aW50LmgiCisrI2luY2x1ZGUgInN5c2x4b3B0LmgiCisrCisrLyoKKysgKiBHZXQgdGhlIHNpemUgb2YgYSBibG9jayBkZXZpY2UKKysgKi8KKytzdGF0aWMgdWludDY0X3QgZ2V0X3NpemUoaW50IGRldl9mZCkKKyt7CisrICAgIHVpbnQ2NF90IGJ5dGVzOworKyAgICB1aW50MzJfdCBzZWN0czsKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrCisrI2lmZGVmIEJMS0dFVFNJWkU2NAorKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgQkxLR0VUU0laRTY0LCAmYnl0ZXMpKQorKwlyZXR1cm4gYnl0ZXM7CisrI2VuZGlmCisrICAgIGlmICghaW9jdGwoZGV2X2ZkLCBCTEtHRVRTSVpFLCAmc2VjdHMpKQorKwlyZXR1cm4gKHVpbnQ2NF90KSBzZWN0cyA8PCA5OworKyAgICBlbHNlIGlmICghZnN0YXQoZGV2X2ZkLCAmc3QpICYmIHN0LnN0X3NpemUpCisrCXJldHVybiBzdC5zdF9zaXplOworKyAgICBlbHNlCisrCXJldHVybiAwOworK30KKysKKysvKgorKyAqIEdldCBkZXZpY2UgZ2VvbWV0cnkgYW5kIHBhcnRpdGlvbiBvZmZzZXQKKysgKi8KKytzdGF0aWMgc3RydWN0IGdlb21ldHJ5X3RhYmxlIHsKKysgICAgdWludDY0X3QgYnl0ZXM7CisrICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnOworK307CisrCisrc3RhdGljIGludCBzeXNmc19nZXRfb2Zmc2V0KGludCBkZXZfZmQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0KQorK3sKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrICAgIGNoYXIgc3lzZnNfbmFtZVsxMjhdOworKyAgICBGSUxFICpmOworKyAgICBpbnQgcnY7CisrCisrICAgIGlmIChmc3RhdChkZXZfZmQsICZzdCkpCisrCXJldHVybiAtMTsKKysKKysgICAgaWYgKChzaXplX3Qpc25wcmludGYoc3lzZnNfbmFtZSwgc2l6ZW9mIHN5c2ZzX25hbWUsCisrCQkJICIvc3lzL2Rldi9ibG9jay8ldToldS9zdGFydCIsCisrCQkJIG1ham9yKHN0LnN0X3JkZXYpLCBtaW5vcihzdC5zdF9yZGV2KSkKKysJPj0gc2l6ZW9mIHN5c2ZzX25hbWUpCisrCXJldHVybiAtMTsKKysKKysgICAgZiA9IGZvcGVuKHN5c2ZzX25hbWUsICJyIik7CisrICAgIGlmICghZikKKysJcmV0dXJuIC0xOworKworKyAgICBydiA9IGZzY2FuZihmLCAiJWx1Iiwgc3RhcnQpOworKyAgICBmY2xvc2UoZik7CisrCisrICAgIHJldHVybiAocnYgPT0gMSkgPyAwIDogLTE7CisrfQorKworKy8qIFN0YW5kYXJkIGZsb3BweSBkaXNrIGdlb21ldHJpZXMsIHBsdXMgTFMtMTIwLiAgWmlwZGlzayBnZW9tZXRyeQorKyAgICh4LzY0LzMyKSBpcyB0aGUgZmluYWwgZmFsbGJhY2suICBJIGRvbid0IGtub3cgd2hhdCBMUy0yNDAgaGFzCisrICAgYXMgaXRzIGdlb21ldHJ5LCBzaW5jZSBJIGRvbid0IGhhdmUgb25lIGFuZCBkb24ndCBrbm93IGFueW9uZSB0aGF0IGRvZXMsCisrICAgYW5kIEdvb2dsZSB3YXNuJ3QgaGVscGZ1bC4uLiAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgc3RhbmRhcmRfZ2VvbWV0cmllc1tdID0geworKyAgICB7MzYwICogMTAyNCwgezIsIDksIDQwLCAwfX0sCisrICAgIHs3MjAgKiAxMDI0LCB7MiwgOSwgODAsIDB9fSwKKysgICAgezEyMDAgKiAxMDI0LCB7MiwgMTUsIDgwLCAwfX0sCisrICAgIHsxNDQwICogMTAyNCwgezIsIDE4LCA4MCwgMH19LAorKyAgICB7MTY4MCAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKysgICAgezE3MjIgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCisrICAgIHsyODgwICogMTAyNCwgezIsIDM2LCA4MCwgMH19LAorKyAgICB7Mzg0MCAqIDEwMjQsIHsyLCA0OCwgODAsIDB9fSwKKysgICAgezEyMzI2NCAqIDEwMjQsIHs4LCAzMiwgOTYzLCAwfX0sCS8qIExTMTIwICovCisrICAgIHswLCB7MCwgMCwgMCwgMH19CisrfTsKKysKKytzdGF0aWMgaW50IGdldF9nZW9tZXRyeShpbnQgZGV2X2ZkLCB1aW50NjRfdCB0b3RhbGJ5dGVzLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKKyt7CisrICAgIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZkX3N0cjsKKysgICAgc3RydWN0IGxvb3BfaW5mbyBsaTsKKysgICAgc3RydWN0IGxvb3BfaW5mbzY0IGxpNjQ7CisrICAgIGNvbnN0IHN0cnVjdCBnZW9tZXRyeV90YWJsZSAqZ3A7CisrICAgIGludCBydiA9IDA7CisrCisrICAgIG1lbXNldChnZW8sIDAsIHNpemVvZiAqZ2VvKTsKKysKKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIEhESU9fR0VUR0VPLCBnZW8pKSB7CisrCWdvdG8gb2s7CisrICAgIH0gZWxzZSBpZiAoIWlvY3RsKGRldl9mZCwgRkRHRVRQUk0sICZmZF9zdHIpKSB7CisrCWdlby0+aGVhZHMgPSBmZF9zdHIuaGVhZDsKKysJZ2VvLT5zZWN0b3JzID0gZmRfc3RyLnNlY3Q7CisrCWdlby0+Y3lsaW5kZXJzID0gZmRfc3RyLnRyYWNrOworKwlnZW8tPnN0YXJ0ID0gMDsKKysJZ290byBvazsKKysgICAgfQorKworKyAgICAvKiBEaWRuJ3Qgd29yay4gIExldCdzIHNlZSBpZiB0aGlzIGlzIG9uZSBvZiB0aGUgc3RhbmRhcmQgZ2VvbWV0cmllcyAqLworKyAgICBmb3IgKGdwID0gc3RhbmRhcmRfZ2VvbWV0cmllczsgZ3AtPmJ5dGVzOyBncCsrKSB7CisrCWlmIChncC0+Ynl0ZXMgPT0gdG90YWxieXRlcykgeworKwkgICAgbWVtY3B5KGdlbywgJmdwLT5nLCBzaXplb2YgKmdlbyk7CisrCSAgICBnb3RvIG9rOworKwl9CisrICAgIH0KKysKKysgICAgLyogRGlkbid0IHdvcmsgZWl0aGVyLi4uIGFzc2lnbiBhIGdlb21ldHJ5IG9mIDY0IGhlYWRzLCAzMiBzZWN0b3JzOyB0aGlzIGlzCisrICAgICAgIHdoYXQgemlwZGlza3MgdXNlLCBzbyB0aGlzIHdvdWxkIGhlbHAgaWYgc29tZW9uZSBoYXMgYSBVU0Iga2V5IHRoYXQKKysgICAgICAgdGhleSdyZSBib290aW5nIGluIFVTQi1aSVAgbW9kZS4gKi8KKysKKysgICAgZ2VvLT5oZWFkcyA9IG9wdC5oZWFkcyA/IDogNjQ7CisrICAgIGdlby0+c2VjdG9ycyA9IG9wdC5zZWN0b3JzID8gOiAzMjsKKysgICAgZ2VvLT5jeWxpbmRlcnMgPSB0b3RhbGJ5dGVzIC8gKGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgPDwgU0VDVE9SX1NISUZUKTsKKysgICAgZ2VvLT5zdGFydCA9IDA7CisrCisrICAgIGlmICghb3B0LnNlY3RvcnMgJiYgIW9wdC5oZWFkcykgeworKwlmcHJpbnRmKHN0ZGVyciwKKysJCSJXYXJuaW5nOiB1bmFibGUgdG8gb2J0YWluIGRldmljZSBnZW9tZXRyeSAoZGVmYXVsdGluZyB0byAlZCBoZWFkcywgJWQgc2VjdG9ycylcbiIKKysJCSIgICAgICAgICAob24gaGFyZCBkaXNrcywgdGhpcyBpcyB1c3VhbGx5IGhhcm1sZXNzLilcbiIsCisrCQlnZW8tPmhlYWRzLCBnZW8tPnNlY3RvcnMpOworKwlydiA9IDE7CQkJLyogU3Vib3B0aW1hbCByZXN1bHQgKi8KKysgICAgfQorKworK29rOgorKyAgICAvKiBJZiB0aGlzIGlzIGEgbG9vcGJhY2sgZGV2aWNlLCB0cnkgdG8gc2V0IHRoZSBzdGFydCAqLworKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgTE9PUF9HRVRfU1RBVFVTNjQsICZsaTY0KSkKKysJZ2VvLT5zdGFydCA9IGxpNjQubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKysgICAgZWxzZSBpZiAoIWlvY3RsKGRldl9mZCwgTE9PUF9HRVRfU1RBVFVTLCAmbGkpKQorKwlnZW8tPnN0YXJ0ID0gKHVuc2lnbmVkIGludClsaS5sb19vZmZzZXQgPj4gU0VDVE9SX1NISUZUOworKyAgICBlbHNlIGlmICghc3lzZnNfZ2V0X29mZnNldChkZXZfZmQsICZnZW8tPnN0YXJ0KSkgeworKwkvKiBPSyAqLworKyAgICB9CisrCisrICAgIHJldHVybiBydjsKKyt9CisrCisrCisgLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKyB2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpCisgeworKyAgICB1aW50NjRfdCB0b3RhbGJ5dGVzLCB0b3RhbHNlY3RvcnM7CisrICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnZW87CisrICAgIHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKnNiczsKKysKKysgICAgdG90YWxieXRlcyA9IGdldF9zaXplKGRldl9mZCk7CisrICAgIGdldF9nZW9tZXRyeShkZXZfZmQsIHRvdGFsYnl0ZXMsICZnZW8pOworKworKyAgICBpZiAob3B0LmhlYWRzKQorKwlnZW8uaGVhZHMgPSBvcHQuaGVhZHM7CisrICAgIGlmIChvcHQuc2VjdG9ycykKKysJZ2VvLnNlY3RvcnMgPSBvcHQuc2VjdG9yczsKKysKKysgICAgLyogUGF0Y2ggdGhpcyBpbnRvIGEgZmFrZSBGQVQgc3VwZXJibG9jay4gIFRoaXMgaXNuJ3QgYmVjYXVzZQorKyAgICAgICBGQVQgaXMgYSBnb29kIGZvcm1hdCBpbiBhbnkgd2F5LCBpdCdzIGJlY2F1c2UgaXQgbGV0cyB0aGUKKysgICAgICAgZWFybHkgYm9vdHN0cmFwIHNoYXJlIGNvZGUgd2l0aCB0aGUgRkFUIHZlcnNpb24uICovCisrICAgIHNicyA9IChzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICopc3lzbGludXhfYm9vdHNlY3Q7CisrCisrICAgIHRvdGFsc2VjdG9ycyA9IHRvdGFsYnl0ZXMgPj4gU0VDVE9SX1NISUZUOworKyAgICBpZiAodG90YWxzZWN0b3JzID49IDY1NTM2KSB7CisrCXNldF8xNigmc2JzLT5ic1NlY3RvcnMsIDApOworKyAgICB9IGVsc2UgeworKwlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCB0b3RhbHNlY3RvcnMpOworKyAgICB9CisrICAgIHNldF8zMigmc2JzLT5ic0h1Z2VTZWN0b3JzLCB0b3RhbHNlY3RvcnMpOworKworKyAgICBzZXRfMTYoJnNicy0+YnNCeXRlc1BlclNlYywgU0VDVE9SX1NJWkUpOworKyAgICBzZXRfMTYoJnNicy0+YnNTZWNQZXJUcmFjaywgZ2VvLnNlY3RvcnMpOworKyAgICBzZXRfMTYoJnNicy0+YnNIZWFkcywgZ2VvLmhlYWRzKTsKKysgICAgc2V0XzMyKCZzYnMtPmJzSGlkZGVuU2VjcywgZ2VvLnN0YXJ0KTsKKyB9CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDktbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfYm9vdGJsb2NrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4OWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDktbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfYm9vdGJsb2NrLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gNzZjNDY1ZTg3MzEyZGJjNmNmZmQwNTQyN2YxZjRkMmViZGVlNGYxMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyIEphbiAyMDE1IDEyOjI4OjM1ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggOS85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGluc3RhbGxfYm9vdGJsb2NrKCkKKworUmVmZXIgdG8gdGhlIGluc3RhbGxfYm9vdGJsb2NrKCkgaW4gZXh0bGludXgvbWFpbi5jIHRvIG1ha2UKK2xpbnV4L3N5c2xpbnV4LmMncyBpbnN0YWxsX2Jvb3RibG9jaygpIHdoaWNoIG9ubHkgc3VwcG9ydHMgZXh0Mi8zLzQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCAyMCArKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggYzc0MTc1MC4uOTE3ZjgzYSAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00MTksNiArNDE5LDI2IEBAIHN0YXRpYyBpbnQgZXh0X2ZpbGVfd3JpdGUoZXh0Ml9maWxlX3QgZTJfZmlsZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCisgICovCisgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIHsKKysgICAgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc2I7CisrCisrICAgIGlmICh4cHJlYWQoZmQsICZzYiwgc2l6ZW9mIHNiLCBFWFQyX1NVUEVSX09GRlNFVCArIG9wdC5vZmZzZXQpICE9IHNpemVvZiBzYikgeworKyAgICAgICAgcGVycm9yKCJyZWFkaW5nIHN1cGVyYmxvY2siKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIGlmIChzYi5zX21hZ2ljICE9IEVYVDJfU1VQRVJfTUFHSUMpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLAorKyAgICAgICAgICAgICAgICAibm8gZXh0Mi8zLzQgc3VwZXJibG9jayBmb3VuZCBvbiAlc1xuIiwgZGV2aWNlKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIGlmICh4cHdyaXRlKGZkLCBzeXNsaW51eF9ib290c2VjdCwgc3lzbGludXhfYm9vdHNlY3RfbGVuLCAwKQorKyAgICAgICAgIT0gKHNpZ25lZClzeXNsaW51eF9ib290c2VjdF9sZW4pIHsKKysgICAgICAgIHBlcnJvcigid3JpdGluZyBib290YmxvY2siKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworIH0KKyAKKyAvKiBUaGUgZmlsZSdzIGJsb2NrIGNvdW50ICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJiMWU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK3N5c2xpbnV4LW5hdGl2ZTogZml4IHBhcmFsbGVsIGJ1aWxkaW5nIGlzc3VlCisKK1RoZXJlIG1pZ2h0IGJlIGFuIGVycm9yIHdoZW4gcGFyYWxsZWwgYnVpbGQ6CisKK1tzbmlwXQorY3A6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGB0bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS8KK3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUvZ3BsaW5jbHVkZSc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK21ha2VbNF06ICoqKiBbaW5zdGFsbF0gRXJyb3IgMQorbWFrZVszXTogKioqIFtncGxsaWJdIEVycm9yIDIKK1tzbmlwXQorCitUaGlzIGlzIGEgcG90ZW50aWFsIGlzc3VlLiBJbiAke1N9L2NvbTMyL2dwbGxpYi9NYWtlZmlsZSBmaWxlLAoraW5zdGFsbCB0YXJnZXQgd2FudHMgdG8gY29weSAkKFNSQykvLi4vZ3BsaW5jbHVkZSB0bworJChJTlNUQUxMUk9PVCkkKENPTTMyRElSKS9pbmNsdWRlLyBkaXJlY3RvcnksIGJ1dCBpbiAke1N9L2NvbTMyL2xpYi9NYWtlZmlsZQorZmlsZSwgdGhlIGluc3RhbGwgdGFyZ2V0IHdpbGwgcmVtb3ZlICQoSU5TVEFMTFJPT1QpJChDT00zMkRJUikvaW5jbHVkZQorZGlyZWN0b3J5LiBXZSBuZWVkIHRvIGRvIGNvbTMyL2xpYiBmaXJzdC4KKworVGhlIHBhdGNoIG1ha2UgY29tMzIvZ3BsbGliIGRlcGVuZHMgb24gY29tMzIvbGliIHRvIGZpeCB0aGlzIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb20zMi9NYWtlZmlsZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogc3lzbGludXgtNi4wMy9jb20zMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2xpbnV4LTYuMDMub3JpZy9jb20zMi9NYWtlZmlsZQorKysrIHN5c2xpbnV4LTYuMDMvY29tMzIvTWFrZWZpbGUKK0BAIC0yMSwzICsyMSw0IEBAIHJvc2g6IGxpYiBsaWJ1dGlsCisgc2FtcGxlczogbGlidXRpbCBlbGZsaW5rL2xkbGludXgKKyBzeXNkdW1wOiBsaWIgbGlidXRpbCBsaWJ1cGxvYWQgZ3BsbGliCisgbHVhL3NyYzogY21lbnUgbW9kdWxlcworK2dwbGxpYjogbGliCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1saWJ1cGxvYWQtZGVwZW5kLWxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzE0YjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1saWJ1cGxvYWQtZGVwZW5kLWxpYi5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDQ5MGZjM2JiZDY1YzJjMjUyYzFmZGYzZGEwZmFjOTg5OGFhOWVlYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTUgQXVnIDIwMTQgMjE6MDk6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29tMzIvTWFrZWZpbGU6IGZpeCBwYXJhbGxlbCBpc3N1ZQorCitGaXhlZDoKK2NwIC1yIHN5c2xpbnV4LTYuMDEvY29tMzIvbGlidXBsb2FkLyouaCBpbWFnZS91c3Ivc2hhcmUvc3lzbGludXgvY29tMzIvaW5jbHVkZS8KK1tzbmlwXQorcm0gLXJmIGltYWdlL3Vzci9zaGFyZS9zeXNsaW51eC9jb20zMi9pbmNsdWRlCitbc25pcF0KK2NwOiBjYW5ub3QgY3JlYXRlIHJlZ3VsYXIgZmlsZSBgaW1hZ2UvdXNyL3NoYXJlL3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUvc2VyaWFsLmgnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1RoZSBjcCBpcyBoYXBwZW5lZCBpbiB0aGUgImxpYnVwbG9hZCIgZGlyLCB3aGlsZSAicm0gLWZyIiBpcyBoYXBwZW5kIGluCisibGliIiBkaXIsIGxldCAibGlidXBsb2FkIiBkZXBlbmQgImxpYiIgd2lsbCBmaXggdGhlIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbTMyL01ha2VmaWxlIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9jb20zMi9NYWtlZmlsZSBiL2NvbTMyL01ha2VmaWxlCitpbmRleCA5YTE3MjFiLi5mMTcyZGIyIDEwMDY0NAorLS0tIGEvY29tMzIvTWFrZWZpbGUKKysrKyBiL2NvbTMyL01ha2VmaWxlCitAQCAtMjEsMyArMjEsNCBAQCByb3NoOiBsaWIgbGlidXRpbAorIHNhbXBsZXM6IGxpYnV0aWwgZWxmbGluay9sZGxpbnV4Cisgc3lzZHVtcDogbGlidXBsb2FkIGdwbGxpYgorIGdwbGxpYjogbGliCisrbGlidXBsb2FkOiBsaWIKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1yZW1vdmUtY2xlYW4tc2NyaXB0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzAwM2UxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitUaGlzIHNjcmlwdCB0cnkgdG8gY2FsbCBnaXQgc3VibW9kdWxlLCBzaW5jZSB3ZSBhcmUgZG93bmxvYWRpbmcKK3RoZSB0YXJiYWxsIGl0IHNlZW1zIGluLWNvcnJlY3QgdG8gZG8gdGhpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK0luZGV4OiBzeXNsaW51eC02LjAzL2VmaS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2xpbnV4LTYuMDMub3JpZy9lZmkvTWFrZWZpbGUKKysrKyBzeXNsaW51eC02LjAzL2VmaS9NYWtlZmlsZQorQEAgLTEwMSw3ICsxMDEsNiBAQCB0aWR5IGRpc3Q6CisgCXJtIC1mICouc28gKi5vIHdyYXBwZXIKKyAJZmluZCAuIFwoIC1uYW1lIFwqLm8gLW8gLW5hbWUgXCouYSAtbyAtbmFtZSAuXCouZCAtbyAtbmFtZSBcKi50bXAgXCkgLXByaW50MCB8IFwKKyAJCXhhcmdzIC0wciBybSAtZgorLQkkKHRvcGRpcikvZWZpL2NsZWFuLWdudS1lZmkuc2ggJChFRklfU1VCQVJDSCkgJChvYmpkaXIpCisgCisgY2xlYW46IHRpZHkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4XzYuMDMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOWFlMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiCkBAIC0wLDAgKzEsODkgQEAKK1NVTU1BUlkgPSAiTXVsdGktcHVycG9zZSBsaW51eCBib290bG9hZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3N5c2xpbnV4Lnp5dG9yLmNvbS8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MzU7ZW5kbGluZT00MTttZDU9NTU4ZjJjNzFjYjFmYjliYTUxMWNjZDQ4NThlNDhlOGEiCisKKyMgSWYgeW91IHJlYWxseSB3YW50IHRvIHJ1biBzeXNsaW51eCwgeW91IG5lZWQgbXRvb2xzLiAgV2UganVzdCB3YW50IHRoZQorIyBsZGxpbnV4Liogc3R1ZmYgZm9yIG5vdywgc28gc2tpcCBtdG9vbHMtbmF0aXZlCitERVBFTkRTID0gIm5hc20tbmF0aXZlIHV0aWwtbGludXggZTJmc3Byb2dzIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvYm9vdC9zeXNsaW51eC9zeXNsaW51eC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1saW51eC1zeXNsaW51eC1zdXBwb3J0LWV4dDItMy00LWRldmljZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfYm9vdGJsb2NrLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTJhMjUzZGY5MjExZTljMjAxNzI3OTZlY2YzODhmMTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjZkMzk4NmQyYmVhMTA5ZDVkYzBlNGY4YzQ4MjJhNDU5Mjc2Y2YwMjExMjVlOGM5ZjIzYzNjY2E1ZDhjODUwZSIKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44NikuKi0obGludXh8ZnJlZWJzZC4qKScKKyMgRG9uJ3QgbGV0IHRoZSBzYW5pdHkgY2hlY2tlciB0cmlwIG9uIHRoZSAzMiBiaXQgcmVhbCBtb2RlIEJJT1MgYmluYXJpZXMKK0lOU0FORV9TS0lQXyR7UE59LW1pc2MgPSAiYXJjaCIKK0lOU0FORV9TS0lQXyR7UE59LWNoYWluID0gImFyY2giCisKK0VYVFJBX09FTUFLRSA9ICIgXAorCUJJTkRJUj0ke2JpbmRpcn0gU0JJTkRJUj0ke3NiaW5kaXJ9IExJQkRJUj0ke2xpYmRpcn0gXAorCURBVEFESVI9JHtkYXRhZGlyfSBNQU5ESVI9JHttYW5kaXJ9IElOQ0RJUj0ke2luY2x1ZGVkaXJ9IFwKKyIKKyMgc3lzbGludXggdXNlcyAkTEQgZm9yIGxpbmtpbmcsIHN0cmlwIGAtV2wsJyBzbyBpdCBjYW4gd29yaworZXhwb3J0IExERkxBR1MgPSAiYGVjaG8gJExERkxBR1MgfCBzZWQgJ3MvLVdsLC8vZydgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBkcm9wIHdpbjMyIHRhcmdldHMgb3IgYnVpbGQgZmFpbHMKKwlzZWQgLWUgJ3Msd2luMzIvXFMqLCxnJyAtaSBNYWtlZmlsZQorCisJIyBjbGVhbiBpbnN0YWxsZXIgZXhlY3V0YWJsZXMgaW5jbHVkZWQgaW4gc291cmNlIHRhcmJhbGwKKwlvZV9ydW5tYWtlIGNsZWFuIGZpcm13YXJlPSJlZmkzMiIgRUZJSU5DPSIke2luY2x1ZGVkaXJ9IgorCSMgTk9URTogVGhlcmUgaXMgYSB0ZW1wb3Jhcnkgd29yayBhcm91bmQgYWJvdmUgdG8gc3BlY2lmeQorCSMJdGhlIGVmaTMyIGFzIHRoZSBmaXJtd2FyZSBlbHNlIHRoZSBwcmUtYnVpbHQgYmlvcworCSMJZmlsZXMgZ2V0IGVyYXNlZCBjb250cmFyeSB0byB0aGUgZG9jL2Rpc3RpYi50eHQKKwkjCUluIHRoZSBmdXR1cmUgdGhpcyBzaG91bGQgYmUgImJpb3MiIGFuZCBub3QgImVmaTMyIi4KK30KKworZG9fY29tcGlsZSgpIHsKKwkjIE1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LLgorCSMgVGhvdWdoIHRoZSAke0J9IHNob3VsZCBhbHdheXMgZXhpc3QsIHN0aWxsIGNoZWNrIGl0IGJlZm9yZSBmaW5kIGFuZCBybS4KKwlbIC1kICIke0J9IiBdICYmIGZpbmQgJHtCfSAtbmFtZSAnLiouZCcgLXR5cGUgZiAtZXhlYyBybSAtZiB7fSBcOworCisJIyBSZWJ1aWxkIG9ubHkgdGhlIGluc3RhbGxlcjsga2VlcCBwcmVjb21waWxlZCBib290bG9hZGVycworCSMgYXMgcGVyIGF1dGhvcidzIHJlcXVlc3QgKGRvYy9kaXN0cmliLnR4dCkKKwlvZV9ydW5tYWtlIENDPSIke0NDfSAke0NGTEFHU30iIExERkxBR1M9IiR7TERGTEFHU30iIGZpcm13YXJlPSJiaW9zIiBpbnN0YWxsZXIKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIENDPSIke0NDfSAke0NGTEFHU30iIGluc3RhbGwgSU5TVEFMTFJPT1Q9IiR7RH0iIGZpcm13YXJlPSJiaW9zIgorCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zeXNsaW51eC8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2Jpb3MvY29yZS9sZGxpbnV4LnN5cyAke0R9JHtkYXRhZGlyfS9zeXNsaW51eC8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2Jpb3MvY29yZS9sZGxpbnV4LmJzcyAke0R9JHtkYXRhZGlyfS9zeXNsaW51eC8KKwlpbnN0YWxsIC1tIDc1NSAke1N9L2Jpb3MvbGludXgvc3lzbGludXgtbm9tdG9vbHMgJHtEfSR7YmluZGlyfS8KK30KKworUEFDS0FHRVMgKz0gIiR7UE59LW5vbXRvb2xzICR7UE59LWV4dGxpbnV4ICR7UE59LW1iciAke1BOfS1jaGFpbiAke1BOfS1weGVsaW51eCAke1BOfS1pc29saW51eCAke1BOfS1taXNjIgorCitSREVQRU5EU18ke1BOfSArPSAibXRvb2xzIgorUkRFUEVORFNfJHtQTn0tbm9tdG9vbHMgKz0gImxpYmV4dDJmcyIKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gInBlcmwiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9zeXNsaW51eCIKK0ZJTEVTXyR7UE59LW5vbXRvb2xzID0gIiR7YmluZGlyfS9zeXNsaW51eC1ub210b29scyIKK0ZJTEVTXyR7UE59LWV4dGxpbnV4ID0gIiR7c2JpbmRpcn0vZXh0bGludXgiCitGSUxFU18ke1BOfS1tYnIgPSAiJHtkYXRhZGlyfS8ke0JQTn0vbWJyLmJpbiIKK0ZJTEVTXyR7UE59LWNoYWluID0gIiR7ZGF0YWRpcn0vJHtCUE59L2NoYWluLmMzMiIKK0ZJTEVTXyR7UE59LWlzb2xpbnV4ID0gIiR7ZGF0YWRpcn0vJHtCUE59L2lzb2xpbnV4LmJpbiIKK0ZJTEVTXyR7UE59LXB4ZWxpbnV4ID0gIiR7ZGF0YWRpcn0vJHtCUE59L3B4ZWxpbnV4LjAiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2xpYioke1NPTElCU30gJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvaW5jbHVkZSAke2RhdGFkaXJ9LyR7QlBOfS9jb20zMi9jb20zMi5sZCIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvbGliKi5hICR7bGliZGlyfS8ke0JQTn0vY29tMzIvbGliKi5hIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2RhdGFkaXJ9LyR7QlBOfS8qICR7bGliZGlyfS8ke0JQTn0vKiAke2JpbmRpcn0vKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC9maXhfcmFubGliLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC9maXhfcmFubGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzA0NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L2ZpeF9yYW5saWIucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtwb2t5LXNwZWNpZmljIGZpeF0KKworLS0tIGEvTWFrZWZpbGUuaW5jCisrKysgYi9NYWtlZmlsZS5pbmMKK0BAIC01Nyw2ICs1Nyw5IEBACisgICBpZmVxICgkKE5PX1VVSUQpLCkKKyAgICAgTElCUyArPSAtbHV1aWQKKyAgIGVuZGlmCisrICBpZm5lcSAoJChSQU5MSUIpLCkKKysgICAgUkFOTElCICs9ICRACisrICBlbmRpZgorIGVuZGlmCisgCisgaWZuZXEgKCQoT1BTWVMpLFdpbmRvd3MpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzAzMjgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuaW5pdApAQCAtMCwwICsxLDc1IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHRjZi1hZ2VudAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMyA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgMiA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgYWdlbnQKKyMjIyBFTkQgSU5JVCBJTkZPCisKK0RBRU1PTl9QQVRIPS91c3Ivc2Jpbi90Y2YtYWdlbnQKK0RBRU1PTl9OQU1FPWBiYXNlbmFtZSAkREFFTU9OX1BBVEhgCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLXggJERBRU1PTl9QQVRIIHx8IGV4aXQgMAorCitQQVRIPS9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluCitleHBvcnQgUEFUSAorCitSRVRWQUw9MAorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgZWNobyAtbiAiU3RhcnRpbmcgJERBRU1PTl9OQU1FOiAiCisgICAgICAgICREQUVNT05fUEFUSCAtZCAtTC0gLWwwCisgICAgICAgIFJFVFZBTD0kPworICAgICAgICBpZiBbICRSRVRWQUwgLWVxIDAgXSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIk9LIgorICAgICAgICAgICAgdG91Y2ggL3Zhci9sb2NrL3N1YnN5cy8kREFFTU9OX05BTUUKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiRkFJTCIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gIlN0b3BwaW5nICREQUVNT05fTkFNRTogIgorICAgICAgICBjb3VudD0wCisgICAgICAgIHdoaWxlIFsgLW4gImAvYmluL3BpZG9mICREQUVNT05fUEFUSGAiIC1hICRjb3VudCAtbHQgMTAgXSA7IGRvCisgICAgICAgICAgICBraWxscHJvYyAkREFFTU9OX1BBVEggPiYgL2Rldi9udWxsCisgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgICAgIGlmIFsgJFJFVFZBTCAhPSAwIC1vIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIHNsZWVwIDMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBjb3VudD1gZXhwciAkY291bnQgKyAxYAorICAgICAgICBkb25lCisgICAgICAgIHJtIC1mIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FCisgICAgICAgIGlmIFsgLW4gImAvYmluL3BpZG9mICREQUVNT05fUEFUSGAiIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJGQUlMIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJPSyIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgIHJlc3RhcnQpCisgICAgICAgICQwIHN0b3AKKyAgICAgICAgc2xlZXAgMQorICAgICAgICAkMCBzdGFydAorICAgICAgICA7OworCisgICAgc3RhdHVzKQorICAgICAgICBzdGF0dXMgJERBRU1PTl9OQU1FCisgICAgICAgIFJFVFZBTD0kPworICAgICAgICA7OworCisgICAgY29uZHJlc3RhcnQpCisgICAgICAgIFsgLWYgL3Zhci9sb2NrL3N1YnN5cy8kREFFTU9OX05BTUUgXSAmJiAkMCByZXN0YXJ0CisgICAgICAgIDs7CisKKyAgICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCBzdGF0dXMgfCByZXN0YXJ0IHwgY29uZHJlc3RhcnQgfCBzdGF0dXMgfSIKKyAgICAgICAgOzsKK2VzYWMKKworZXhpdCAkUkVUVkFMCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWE2YzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249VGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIGFnZW50CitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRXhlY1N0YXJ0PUBTQklORElSQC90Y2YtYWdlbnQgLWQgLUwtIC1sMAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZmQzOTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIlRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBmb3IgdGhlIEVjbGlwc2UgSURFIgorSE9NRVBBR0UgPSAiaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvVENGIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy8iCisKK0xJQ0VOU0UgPSAiRVBMLTEuMCB8IEVETC0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9lZGwtdjEwLmh0bWw7bWQ1PTUyMmEzOTBhODNkYzE4NjUxM2YwNTAwNTQzYWQzNjc5IgorCitTUkNSRVYgPSAiYjlhNzM1ZTljN2NmODJmODBkNDEyYjdhYjE1ZDA4Yjg5ZDVhNGNjYyIKK1BWID0gIjEuMy4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5lY2xpcHNlLm9yZy9naXRyb290L3RjZi9vcmcuZWNsaXBzZS50Y2YuYWdlbnQuZ2l0O2JyYW5jaD0xLjNfbWFyc19idWdmaXggXAorICAgICAgICAgICBmaWxlOi8vZml4X3JhbmxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y2YtYWdlbnQuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly90Y2YtYWdlbnQuc2VydmljZSBcCisgICAgICAgICAgIgorCitERVBFTkRTID0gInV0aWwtbGludXggb3BlbnNzbCIKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQvYWdlbnQiCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAidGNmLWFnZW50LnNlcnZpY2UiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ0Y2YtYWdlbnQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSAzIDUgLiBzdG9wIDIwIDAgMSAyIDYgLiIKKworIyBtYW5nbGluZyBuZWVkZWQgZm9yIG1ha2UKK01BS0VfQVJDSCA9ICJgZWNobyAke1RBUkdFVF9BUkNIfSB8IHNlZCBzLGkuODYsaTY4NixgIgorTUFLRV9PUyA9ICJgZWNobyAke1RBUkdFVF9PU30gfCBzZWQgcyxebGludXguKixHTlUvTGludXgsYCIKKworRVhUUkFfT0VNQUtFID0gIk1BQ0hJTkU9JHtNQUtFX0FSQ0h9IE9QU1lTPSR7TUFLRV9PU30gJ0NDPSR7Q0N9JyAnQVI9JHtBUn0nIgorCisjIFRoZXkgZG9uJ3QgYnVpbGQgb24gQVJNIGFuZCB3ZSBkb24ndCBuZWVkIHRoZW0gYWN0dWFsbHkuCitDRkxBR1MgKz0gIi1EU0VSVklDRV9SdW5Db250cm9sPTAgLURTRVJWSUNFX0JyZWFrcG9pbnRzPTAgXAorICAgIC1EU0VSVklDRV9NZW1vcnk9MCAtRFNFUlZJQ0VfUmVnaXN0ZXJzPTAgLURTRVJWSUNFX01lbW9yeU1hcD0wIFwKKyAgICAtRFNFUlZJQ0VfU3RhY2tUcmFjZT0wIC1EU0VSVklDRV9TeW1ib2xzPTAgLURTRVJWSUNFX0xpbmVOdW1iZXJzPTAgXAorICAgIC1EU0VSVklDRV9FeHByZXNzaW9ucz0wIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0ke0R9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdGNmLWFnZW50LmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3RjZi1hZ2VudAorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90Y2YtYWdlbnQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS90Y2YtYWdlbnQuc2VydmljZQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvYWx0ZXItaW5jbHVkZWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9hbHRlci1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTMwZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvYWx0ZXItaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDc2IEBACitMZXRzIGluc3RhbGwgdGhlIGluY2x1ZGUgaGVhZGVyIGFuZCBwcml2YXRlIGhlYWRlciBmaWxlcyBpbnRvIAordXNyL2luY2x1ZGUvdGNsOC42IHdoZW4gdmVyc2lvbiBvZiB0Y2wgaXMgOC42LngKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDb25maWd1cmF0aW9uIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haS5jb20+CisKK0ZpeGVkIHRoZSBUQ0xfSU5DTFVERV9TUEVDCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gIHwgICAgMiArLQorIGNvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDQgKystLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggOTdiOTgzYi4uZGMyYTRkZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTUzLDcgKzUzLDcgQEAgRExMX0lOU1RBTExfRElSCQk9IEBETExfSU5TVEFMTF9ESVJACisgU0NSSVBUX0lOU1RBTExfRElSCT0gJChJTlNUQUxMX1JPT1QpJChUQ0xfTElCUkFSWSkKKyAKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0byBpbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGUgdGNsLmg6CistSU5DTFVERV9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikKKytJTkNMVURFX0lOU1RBTExfRElSCT0gJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS90Y2wkKFZFUlNJT04pCisgCisgIyBQYXRoIHRvIHRoZSBwcml2YXRlIHRjbCBoZWFkZXIgZGlyOgorIFBSSVZBVEVfSU5DTFVERV9ESVIJPSBAUFJJVkFURV9JTkNMVURFX0RJUkAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDNlNzhiNDkuLjI0YjNmOTIgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTE5MTM0LDcgKzE5MTM0LDcgQEAgZXZhbCAiVENMX0xJQl9GSUxFPWxpYnRjbCR7TElCX1NVRkZJWH0iCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKyBUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCistUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKytQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpL3RjbCQoVkVSU0lPTiknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKKyAjIE5vdGU6ICBpbiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlLCBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGFic29sdXRlCitAQCAtMTkyOTMsNyArMTkyOTMsNyBAQCBUQ0xfQlVJTERfU1RVQl9MSUJfUEFUSD0iYHB3ZGAvJHtUQ0xfU1RVQl9MSUJfRklMRX0iCisgVENMX1NUVUJfTElCX1BBVEg9IiR7VENMX1NUVUJfTElCX0RJUn0vJHtUQ0xfU1RVQl9MSUJfRklMRX0iCisgCisgIyBJbnN0YWxsIHRpbWUgaGVhZGVyIGRpciBjYW4gYmUgc2V0IHZpYSAtLWluY2x1ZGVkaXIKKy1ldmFsICJUQ0xfSU5DTFVERV9TUEVDPVwiLUkke2luY2x1ZGVkaXJ9XCIiCisrZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfS90Y2wke1ZFUlNJT059XCIiCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdGNsQ29uZmlnLnNoIHJlZmVycyB0byB0aGlzIGJ5IGEgZGlmZmVyZW50IG5hbWUKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDBlMjhiMTQuLjYyZDliNDEgMTAwNzU1CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTc5MSw3ICs3OTEsNyBAQCBldmFsICJUQ0xfTElCX0ZJTEU9bGlidGNsJHtMSUJfU1VGRklYfSIKKyBldmFsICJUQ0xfTElCX0ZJTEU9JHtUQ0xfTElCX0ZJTEV9IgorIAorIFRDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKy1QUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworK1BSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpcikvdGNsJChWRVJTSU9OKScKKyBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJworIAorICMgTm90ZTogIGluIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUsIGl0J3MgaW1wb3J0YW50IHRvIHVzZSB0aGUgYWJzb2x1dGUKK0BAIC05MTIsNyArOTEyLDcgQEAgVENMX0JVSUxEX1NUVUJfTElCX1BBVEg9ImBwd2RgLyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9TVFVCX0xJQl9ESVJ9LyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIAorICMgSW5zdGFsbCB0aW1lIGhlYWRlciBkaXIgY2FuIGJlIHNldCB2aWEgLS1pbmNsdWRlZGlyCistZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfVwiIgorK2V2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn0vdGNsJHtWRVJTSU9OfVwiIgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHRjbENvbmZpZy5zaCByZWZlcnMgdG8gdGhpcyBieSBhIGRpZmZlcmVudCBuYW1lCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXgtY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeC1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5MmEwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXgtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC90Y2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0Y2w4LjQuMTEvdW5peC5vcmlnL3RjbC5tNAorKysrIHRjbDguNC4xMS91bml4L3RjbC5tNAorQEAgLTg0NSw3ICs4NDUsNyBAQCBBQ19ERUZVTihTQ19DT05GSUdfQ0ZMQUdTLCBbCisgCSAgICAjIHJlc3VsdHMsIGFuZCB0aGUgdmVyc2lvbiBpcyBrZXB0IGluIHNwZWNpYWwgZmlsZSkuCisgCQorIAkgICAgaWYgdGVzdCAtciAvZXRjLy5yZWxpZCAtYSAiWGB1bmFtZSAtbmAiID0gIlhgdW5hbWUgLXNgIiA7IHRoZW4KKy0JCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgJDN9JyAvZXRjLy5yZWxpZGAKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJBSVgiIDsgdGhlbgorIAkJc3lzdGVtPUFJWC1gdW5hbWUgLXZgLmB1bmFtZSAtcmAKK0BAIC0yMjUwLDcgKzIyNTAsNyBAQCBBQ19ERUZVTihTQ19CTE9DS0lOR19TVFlMRSwgWworIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCitJbmRleDogdW5peC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0Y2w4LjQuMTEvdW5peC5vcmlnL2NvbmZpZ3VyZQorKysrIHRjbDguNC4xMS91bml4L2NvbmZpZ3VyZQorQEAgLTIxMzAsNyArMjEzMCw3IEBAIGVjaG8gImNvbmZpZ3VyZToyMTIxOiBjaGVja2luZyBzeXN0ZW0gdmUKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCitAQCAtNzYwOCw3ICs3NjA4LDcgQEAgZWNobyAiY29uZmlndXJlOjc2MDA6IGNoZWNraW5nIEZJT05CSU8gdgorIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCB9JyAvZXRjLy5yZWxpZCdgCisrCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCB9JyAvZXRjLy5yZWxpZGAKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJBSVgiIDsgdGhlbgorIAkJc3lzdGVtPUFJWC1gdW5hbWUgLXZgLmB1bmFtZSAtcmAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNzM0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0ZpeGVzIHRjbCB0YXJnZXQgcmVjaXBlIGJ1aWxkIG9uIG9sZCBkaXN0cm9zIHdoaWNoIGhhdmUgZ2xpYmMgb2xkZXIgdGhhbiAyLjE0CisKK3wgKyBlY2hvICdOT1RFOiBtYWtlICBERVNURElSPS9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZSBpbnN0YWxsJworfCBOT1RFOiBtYWtlICBERVNURElSPS9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZSBpbnN0YWxsCit8ICsgbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbAorfCBNYWtpbmcgZGlyZWN0b3J5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZS91c3IvbGliCit8IEluc3RhbGxpbmcgbWVzc2FnZSBjYXRhbG9ncworfCBNYWtpbmcgZGlyZWN0b3J5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZS91c3Ivc2hhcmUvbWFuCit8IHRjbHNoOiAvbGliNjQvbGliYy5zby42OiB2ZXJzaW9uIGBHTElCQ18yLjE0JyBub3QgZm91bmQgKHJlcXVpcmVkIGJ5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS90Y2w4LjUuMTEvdW5peC9saWJ0Y2w4LjUuc28pCit8IE1ha2luZyBkaXJlY3RvcnkgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlL3Vzci9iaW4KK3wgbWFrZTogKioqIFtpbnN0YWxsLW1zZ3NdIEVycm9yIDEKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDQvMjYKKworSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozODowMS43ODc0MjU2MjggLTA4MDAKKysrKyB1bml4L01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzc6NTkuODA3NDI1NTc4IC0wODAwCitAQCAtNjg2LDcgKzY4Niw3IEBACisgIyB0Y2x0ZXN0IGV4ZWN1dGFibGUgZ2V0cyB0aGUgYnVpbGQgZGlyZWN0b3J5IGJ1cm5lZCBpbnRvIGl0cyBsZCBzZWFyY2ggcGF0aC4KKyAjIFRoaXMga2VlcHMgdGNsdGVzdCBmcm9tIHBpY2tpbmcgdXAgYW4gYWxyZWFkeSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgVGNsCisgIyBsaWJyYXJ5LgorLVNIRUxMX0VOViA9CUBMRF9MSUJSQVJZX1BBVEhfVkFSQD1gcHdkYDoke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0gXAorK1NIRUxMX0VOViA9CUBMRF9MSUJSQVJZX1BBVEhfVkFSQD0ke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0gXAorIAkJVENMTElCUEFUSD0iQGFic19idWlsZGRpckAvcGtncyIgXAorIAkJVENMX0xJQlJBUlk9IiR7VENMX0JVSUxEVElNRV9MSUJSQVJZfSIKKyAKK0BAIC03MTIsNyArNzEyLDcgQEAKKyAJJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykKKyAKKyBnZGItdGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JQGVjaG8gInNldCBlbnYgQExEX0xJQlJBUllfUEFUSF9WQVJAPWBwd2RgOiQke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0iID4gZ2RiLnJ1bgorKwlAZWNobyAic2V0IGVudiBATERfTElCUkFSWV9QQVRIX1ZBUkA9JCR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSIgPiBnZGIucnVuCisgCUBlY2hvICJzZXQgZW52IFRDTF9MSUJSQVJZPSR7VENMX0JVSUxEVElNRV9MSUJSQVJZfSIgPj4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGFyZ3MgJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKSAtc2luZ2xlcHJvYyAxIiA+PiBnZGIucnVuCisgCSQoR0RCKSAke1RDTFRFU1RfRVhFfSAtLWNvbW1hbmQ9Z2RiLnJ1bgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGViNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzc6MzQuMjQzNDI0OTM0IC0wODAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjM0LjI0MzQyNDkzNCAtMDgwMAorQEAgLTcwOSwyMyArNzA5LDIzIEBACisgdGVzdDogdGVzdC10Y2wgdGVzdC1wYWNrYWdlcworIAorIHRlc3QtdGNsOiAke1RDTFRFU1RfRVhFfQorLQkkKFNIRUxMX0VOVikgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCisrCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCisgCisgZ2RiLXRlc3Q6ICR7VENMVEVTVF9FWEV9CisgCUBlY2hvICJzZXQgZW52IEBMRF9MSUJSQVJZX1BBVEhfVkFSQD1gcHdkYDokJHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IiA+IGdkYi5ydW4KKyAJQGVjaG8gInNldCBlbnYgVENMX0xJQlJBUlk9JHtUQ0xfQlVJTERUSU1FX0xJQlJBUll9IiA+PiBnZGIucnVuCisgCUBlY2hvICJzZXQgYXJncyAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpIC1zaW5nbGVwcm9jIDEiID4+IGdkYi5ydW4KKy0JJChHREIpIC4vJHtUQ0xURVNUX0VYRX0gLS1jb21tYW5kPWdkYi5ydW4KKysJJChHREIpICR7VENMVEVTVF9FWEV9IC0tY29tbWFuZD1nZGIucnVuCisgCXJtIGdkYi5ydW4KKyAKKyAjIFVzZWZ1bCB0YXJnZXQgdG8gbGF1bmNoIGEgYnVpbHQgdGNsdGVzdCB3aXRoIHRoZSBwcm9wZXIgcGF0aCwuLi4KKyBydW50ZXN0OiAke1RDTFRFU1RfRVhFfQorLQkkKFNIRUxMX0VOVikgLi8ke1RDTFRFU1RfRVhFfQorKwkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0KKyAKKyAjIFVzZWZ1bCB0YXJnZXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUgd2l0aCBhbiB1bndyaXRhYmxlIGN1cnJlbnQKKyAjIGRpcmVjdG9yeS4uLgorIHJvLXRlc3Q6ICR7VENMVEVTVF9FWEV9CistCWVjaG8gJ2V4ZWMgY2htb2QgLXcgLjtwYWNrYWdlIHJlcXVpcmUgdGNsdGVzdDt0Y2x0ZXN0Ojp0ZW1wb3JhcnlEaXJlY3RvcnkgL3RtcDtzb3VyY2UgLi4vdGVzdHMvYWxsLnRjbDtleGVjIGNobW9kICt3IC4nIHwgJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0KKysJZWNobyAnZXhlYyBjaG1vZCAtdyAuO3BhY2thZ2UgcmVxdWlyZSB0Y2x0ZXN0O3RjbHRlc3Q6OnRlbXBvcmFyeURpcmVjdG9yeSAvdG1wO3NvdXJjZSAuLi90ZXN0cy9hbGwudGNsO2V4ZWMgY2htb2QgK3cgLicgfCAkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0KKyAKKyAjIFRoZSBmb2xsb3dpbmcgdGFyZ2V0IGdlbmVyYXRlcyB0aGUgc2hhcmVkIGxpYnJhcmllcyBpbiBkbHRlc3QvIHRoYXQgYXJlIHVzZWQKKyAjIGZvciB0ZXN0aW5nOyB0aGV5IGFyZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSAidGNsdGVzdCIgdGFyZ2V0ICh2aWEgdGhlCitAQCAtNzQzLDIzICs3NDMsMjMgQEAKKyAjIFRoaXMgdGFyZ2V0IGNhbiBiZSB1c2VkIHRvIHJ1biB0Y2xzaCBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyAjIHZpYSBgbWFrZSBzaGVsbCBTQ1JJUFQ9L3RtcC9mb28udGNsYAorIHNoZWxsOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAke1RDTF9FWEV9ICQoU0NSSVBUKQorIAorICMgVGhpcyB0YXJnZXQgY2FuIGJlIHVzZWQgdG8gcnVuIHRjbHNoIGluc2lkZSBlaXRoZXIgZ2RiIG9yIGluc2lnaHQKKyBnZGI6ICR7VENMX0VYRX0KKy0JJChTSEVMTF9FTlYpICQoR0RCKSAuLyR7VENMX0VYRX0KKysJJChTSEVMTF9FTlYpICQoR0RCKSAke1RDTF9FWEV9CisgCisgdmFsZ3JpbmQ6ICR7VENMX0VYRX0gJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAuLyR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAtc2luZ2xlcHJvYyAxIC1jb25zdHJhaW50cyB2YWxncmluZCAkKFRFU1RGTEFHUykKKysJJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAtY29uc3RyYWludHMgdmFsZ3JpbmQgJChURVNURkxBR1MpCisgCisgdmFsZ3JpbmRzaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgJChWQUxHUklORCkgJChWQUxHUklOREFSR1MpIC4vJHtUQ0xfRVhFfSAkKFNDUklQVCkKKysJJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAke1RDTF9FWEV9ICQoU0NSSVBUKQorIAorIHRyYWNlLXNoZWxsOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAke1RSQUNFfSAkKFRSQUNFX09QVFMpIC4vJHtUQ0xfRVhFfSAkKFNDUklQVCkKKysJJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyB0cmFjZS10ZXN0OiAke1RDTFRFU1RfRVhFfQorLQkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAuLyR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAtc2luZ2xlcHJvYyAxICQoVEVTVEZMQUdTKQorKwkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAkKFRFU1RGTEFHUykKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEluc3RhbGxhdGlvbiBydWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmNjNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAordGNsIDguNi4wIGJ1aWxkcyBieSBkZWZhdWx0IGEgbnVtYmVyIG9mIHBhY2thZ2VzIHRoYXQgYXJlIG5vdCBuZWVkZWQgaW4gWW9jdG8uCitUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIG1ha2VmaWxlIHNvIHRoYXQgdGhlc2UgcGFja2FnZXMgYXJlIG5vdCBidWlsdCBieSBkZWZhdWx0LgorCitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+CisKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MTIuMjM1NDI1ODkxIC0wODAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM4OjEyLjIzMTQyNTg5MSAtMDgwMAorQEAgLTYxMSw3ICs2MTEsNyBAQAorICMgU3RhcnQgb2YgcnVsZXMKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKy1hbGw6IGJpbmFyaWVzIGxpYnJhcmllcyBkb2MgcGFja2FnZXMKKythbGw6IGJpbmFyaWVzIGxpYnJhcmllcyBkb2MKKyAKKyBiaW5hcmllczogJHtMSUJfRklMRX0gJChTVFVCX0xJQl9GSUxFKSAke1RDTF9FWEV9CisgCitAQCAtNjUzLDEyICs2NTMsMTIgQEAKKyAjdGNsQ29uZmlnLmg6ICQoVU5JWF9ESVIpL3RjbENvbmZpZy5oLmluCisgIwkkKFNIRUxMKSBjb25maWcuc3RhdHVzCisgCistY2xlYW46IGNsZWFuLXBhY2thZ2VzCisrY2xlYW46CisgCXJtIC1mICouYSAqLm8gbGlidGNsKiBjb3JlIGVycnMgKn4gXCMqIFRBR1MgKi5FIGEub3V0IFwKKyAJCWVycm9ycyAke1RDTF9FWEV9ICR7VENMVEVTVF9FWEV9IGxpYi5leHAgVGNsIEBEVFJBQ0VfSERSQAorIAljZCBkbHRlc3QgOyAkKE1BS0UpIGNsZWFuCisgCistZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcGFja2FnZXMgY2xlYW4KKytkaXN0Y2xlYW46IGNsZWFuCisgCXJtIC1yZiBNYWtlZmlsZSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIHRjbENvbmZpZy5zaCBcCisgCQl0Y2xDb25maWcuaCAqLnBsaXN0IFRjbC5mcmFtZXdvcmsgdGNsLnBjCisgCWNkIGRsdGVzdCA7ICQoTUFLRSkgZGlzdGNsZWFuCitAQCAtNzA2LDcgKzcwNiw3IEBACisgIyB0Y2x0ZXN0LCBpZToKKyAjCSUgbWFrZSB0ZXN0IFRFU1RGTEFHUz0iLXZlcmJvc2UgYnBzIC1maWxlIGZpbGVOYW1lLnRlc3QiCisgCistdGVzdDogdGVzdC10Y2wgdGVzdC1wYWNrYWdlcworK3Rlc3Q6IHRlc3QtdGNsCisgCisgdGVzdC10Y2w6ICR7VENMVEVTVF9FWEV9CisgCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCitAQCAtNzcxLDcgKzc3MSw3IEBACisgSU5TVEFMTF9ERVZfVEFSR0VUUyA9IGluc3RhbGwtaGVhZGVycworIElOU1RBTExfRVhUUkFfVEFSR0VUUyA9IEBFWFRSQV9JTlNUQUxMQAorIElOU1RBTExfVEFSR0VUUyA9ICQoSU5TVEFMTF9CQVNFX1RBUkdFVFMpICQoSU5TVEFMTF9ET0NfVEFSR0VUUykgJChJTlNUQUxMX0RFVl9UQVJHRVRTKSBcCistCQkgICQoSU5TVEFMTF9QQUNLQUdFX1RBUkdFVFMpICQoSU5TVEFMTF9FWFRSQV9UQVJHRVRTKQorKwkJICAkKElOU1RBTExfRVhUUkFfVEFSR0VUUykKKyAKKyBpbnN0YWxsOiAkKElOU1RBTExfVEFSR0VUUykKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZGJhNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK2ZvciBpIGluIGBscyB0ZXN0cy8qLnRlc3QgfGF3ayAtRi8gJ3twcmludCAkMn0nYDsgXAorICAgIGRvIFRDTF9MSUJSQVJZPWxpYnJhcnkgLi90Y2x0ZXN0IHRlc3RzL2FsbC50Y2wgLWZpbGUgJGkgPiRpLnRtcCAyPiYxOyBcCisgICAgZ3JlcCAtcSAiXkZpbGVzIHdpdGggZmFpbGluZyB0ZXN0czoiICRpLnRtcDsgXAorICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvICJGQUlMOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIlBBU1M6ICRpIjsgcm0gLWYgJGkudG1wOyBmaTsgXAorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1hZGQtc29uYW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1hZGQtc29uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Mjc2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLWFkZC1zb25hbWUucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB1bml4L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9jb25maWd1cmUJMjAxMy0wOS0xOSAxMzoxNzoxMy4wMDAwMDAwMDAgLTA3MDAKKysrKyB1bml4L2NvbmZpZ3VyZQkyMDEzLTExLTExIDAwOjIwOjUxLjUxOTQ5MDM0MiAtMDgwMAorQEAgLTc1OTksNiArNzU5OSw5IEBACisgCSAgICAjIGdldCByaWQgb2YgdGhlIHdhcm5pbmdzLgorIAkgICAgI0NGTEFHU19PUFRJTUlaRT0iJHtDRkxBR1NfT1BUSU1JWkV9IC1EX19OT19TVFJJTkdfSU5MSU5FUyAtRF9fTk9fTUFUSF9JTkxJTkVTIgorIAorKwkgICAgIyBmb2xsb3dpbmcgbGluZSBhZGRlZCBieSBDVyBmb3IgRGViaWFuIEdOVS9MaW51eAorKwkgICAgVENMX1NITElCX0xEX0VYVFJBUz0iLVdsLC1zb25hbWUsXCR7VENMX0xJQl9GSUxFfS4wIgorKworIAkgICAgU0hMSUJfTEQ9JyR7Q0N9IC1zaGFyZWQgJHtDRkxBR1N9ICR7TERGTEFHU30nCisgCSAgICBETF9PQkpTPSJ0Y2xMb2FkRGwubyIKKyAJICAgIERMX0xJQlM9Ii1sZGwiCitJbmRleDogdW5peC90Y2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvdGNsLm00CTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC90Y2wubTQJMjAxMy0xMS0xMSAwMDoxNzoyNC4yNjM0ODUxMjMgLTA4MDAKK0BAIC0xNDE1LDYgKzE0MTUsOSBAQAorIAkgICAgIyBnZXQgcmlkIG9mIHRoZSB3YXJuaW5ncy4KKyAJICAgICNDRkxBR1NfT1BUSU1JWkU9IiR7Q0ZMQUdTX09QVElNSVpFfSAtRF9fTk9fU1RSSU5HX0lOTElORVMgLURfX05PX01BVEhfSU5MSU5FUyIKKyAKKysJICAgICMgZm9sbG93aW5nIGxpbmUgYWRkZWQgYnkgQ1cgZm9yIERlYmlhbiBHTlUvTGludXgKKysJICAgIFRDTF9TSExJQl9MRF9FWFRSQVM9Ii1XbCwtc29uYW1lLFwke1RDTF9MSUJfRklMRX0uMCIKKysKKyAJICAgIFNITElCX0xEPScke0NDfSAtc2hhcmVkICR7Q0ZMQUdTfSAke0xERkxBR1N9JworIAkgICAgRExfT0JKUz0idGNsTG9hZERsLm8iCisgCSAgICBETF9MSUJTPSItbGRsIgorSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0wOS0xOSAxMzoxNzoxMy4wMDAwMDAwMDAgLTA3MDAKKysrKyB1bml4L01ha2VmaWxlLmluCTIwMTMtMTEtMTEgMDA6MjA6MzIuNDIzNDg5ODYxIC0wODAwCitAQCAtNzk2LDcgKzc5NiwxMCBAQAorIAkgICAgZG9uZTsKKyAJQGVjaG8gIkluc3RhbGxpbmcgJChMSUJfRklMRSkgdG8gJChETExfSU5TVEFMTF9ESVIpLyIKKyAJQEBJTlNUQUxMX0xJQkAKKy0JQGNobW9kIDU1NSAiJChETExfSU5TVEFMTF9ESVIpLyQoTElCX0ZJTEUpIgorKwltdiAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKSAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKS4wCisrCWxuIC1zZiAkKExJQl9GSUxFKS4wICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpCisrCWxuIC1zZiAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKS4wIC4vCisrCUBjaG1vZCA1NTUgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMAorIAlAZWNobyAiSW5zdGFsbGluZyAke1RDTF9FWEV9IGFzICQoQklOX0lOU1RBTExfRElSKS90Y2xzaCQoVkVSU0lPTikke0VYRV9TVUZGSVh9IgorIAlAJChJTlNUQUxMX1BST0dSQU0pICR7VENMX0VYRX0gIiQoQklOX0lOU1RBTExfRElSKS90Y2xzaCQoVkVSU0lPTikke0VYRV9TVUZGSVh9IgorIAlAZWNobyAiSW5zdGFsbGluZyB0Y2xDb25maWcuc2ggdG8gJChDT05GSUdfSU5TVEFMTF9ESVIpLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjdjODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gNmVmYzk4Nzc0NjgxNzk1NzEyMDczYzJiOTFlNWU5ZDE3NjMyMzliOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJTb25nLkxpIiA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxIEF1ZyAyMDEyIDE5OjA1OjUxICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHRjbDppbnN0YWxsIHRjbCB0byBsaWI2NCBpbnN0ZWFkIG9mIGxpYiBvbiA2NGJpdCB0YXJnZXQKKworUmVtb3ZlIGhhcmRjb2RlZCBsaWJyYXJ5IGluc3RhbGwgcGF0aC4gQ2hhbmdlICQocHJlZml4KS9saWIvIHRvICR7bGliZGlyfS4KKworW1lPQ1RPICMyODc2XQorCitUaGlzIGlzIG5vdCBhIGJ1ZywgYnV0IGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkIGludG8gZGlyZWN0b3J5IC4uLi9saWIvLgorT24gNjRiaXQgdGFyZ2V0IHRoYXQgc2hvdWxkIGJlIGxpYjY0Ly4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nLkxpIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgY29uZmlndXJlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogdW5peC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvY29uZmlndXJlCTIwMTMtMTEtMTAgMjM6Mzg6MzMuNjQzNDI2NDMwIC0wODAwCisrKysgdW5peC9jb25maWd1cmUJMjAxMy0xMS0xMCAyMzozOTo1MS4zNDc0MjgzODcgLTA4MDAKK0BAIC0xOTEzNCw3ICsxOTEzNCw3IEBACisgCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKy1UQ0xfTElCUkFSWT0nJChwcmVmaXgpL2xpYi90Y2wkKFZFUlNJT04pJworK1RDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKyBQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCitJbmRleDogdW5peC9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvY29uZmlndXJlLmluCTIwMTMtMTEtMTAgMjM6MjA6NTAuMDAwMDAwMDAwIC0wODAwCisrKysgdW5peC9jb25maWd1cmUuaW4JMjAxMy0xMS0xMCAyMzozOTo0MS4xOTk0MjgxMzEgLTA4MDAKK0BAIC03OTAsNyArNzkwLDcgQEAKKyAKKyBldmFsICJUQ0xfTElCX0ZJTEU9JHtUQ0xfTElCX0ZJTEV9IgorIAorLVRDTF9MSUJSQVJZPSckKHByZWZpeCkvbGliL3RjbCQoVkVSU0lPTiknCisrVENMX0xJQlJBUlk9JyQobGliZGlyKS90Y2wkKFZFUlNJT04pJworIFBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTkyYjNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiCkBAIC0wLDAgKzEsMTAyIEBACitTVU1NQVJZID0gIlRvb2wgQ29tbWFuZCBMYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly90Y2wuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJkZXZlbC90Y2x0ayIKKworIyBodHRwOi8vd3d3LnRjbC50ay9zb2Z0d2FyZS90Y2x0ay9saWNlbnNlLmh0bWwKK0xJQ0VOU0UgPSAidGNsICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9jb21wYXQvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9saWJyYXJ5L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vbWFjb3N4L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vdGVzdHMvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi93aW4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorIgorCitERVBFTkRTID0gInRjbC1uYXRpdmUgemxpYiIKKworQkFTRV9TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS90Y2wvJHtCUE59JHtQVn0tc3JjLnRhci5neiBcCisgICAgICAgICAgICAgICAgZmlsZTovL3RjbC1hZGQtc29uYW1lLnBhdGNoIgorU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAorICAgICAgICAgICBmaWxlOi8vZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub19wYWNrYWdlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWx0ZXItaW5jbHVkZWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorU1JDX1VSSVttZDVzdW1dID0gImQ3Y2JiOTFmMWRlZDE5MTkzNzBhMzBlZGQxNTM0MzA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjllNmVkOTRjOTgxYzFkMGM1ZjVmZWZiODExMmQwNmM2YmY0ZDA1MGE3MzI3ZTk1ZTcxZDQxN2M0MTY1MTljOGQiCisKK1NSQ19VUklfY2xhc3MtbmF0aXZlID0gIiR7QkFTRV9TUkNfVVJJfSIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9L3VuaXgiCisKK1ZFUiA9ICIke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmluY29uZmlnCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGhyZWFkcyAtLWRpc2FibGUtcnBhdGggLS1saWJkaXI9JHtsaWJkaXJ9IgorCitkb19jb25maWd1cmUoKSB7CisJY2QgJHtTfQorCWdudS1jb25maWdpemUKKwljZCAke0J9CisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJZWNobyA+ICR7U30vLi4vY29tcGF0L2ZpeHN0cnRvZC5jCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwgaW5zdGFsbC1wcml2YXRlLWhlYWRlcnMKKwlsbiAtc2YgLi90Y2xzaCR7VkVSfSAke0R9JHtiaW5kaXJ9L3RjbHNoCisJbG4gLXNmIHRjbHNoOC42ICR7RH0ke2JpbmRpcn0vdGNsc2gke1ZFUn0KKwlzZWQgLWkgInMrLUwke0J9Ky1MJHtTVEFHSU5HX0xJQkRJUn0rZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzKyR7V09SS0RJUn0rJHtTVEFHSU5HX0lOQ0RJUn0rZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzLC1MJHtsaWJkaXJ9LC1MPSR7bGliZGlyfSxnIiB0Y2xDb25maWcuc2gKKwlzZWQgLWkgInMsLUkke2luY2x1ZGVkaXJ9LC1JPSR7aW5jbHVkZWRpcn0sZyIgdGNsQ29uZmlnLnNoCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCWluc3RhbGwgLW0gMDc1NSB0Y2xDb25maWcuc2ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2xpYmRpcn0KKwljZCAuLgorCWZvciBkaXIgaW4gY29tcGF0IGdlbmVyaWMgdW5peDsgZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpcgorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS8uLi8kZGlyLyouaCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpci8KKwlkb25lCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAidGNsX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK3RjbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KK30KKworUEFDS0FHRVMgPSsgInRjbC1saWIiCitGSUxFU190Y2wtbGliID0gIiR7bGliZGlyfS9saWJ0Y2w4LjYuc28uKiIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdGNsJHtWRVJ9ICR7bGliZGlyfS90Y2w4LjYgJHtsaWJkaXJ9L3RjbDgiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90Y2xDb25maWcuc2ggJHtsaWJkaXJ9L3RjbG9vQ29uZmlnLnNoIgorCisjIGlzbid0IGdldHRpbmcgcGlja2VkIHVwIGJ5IHNobGlicyBjb2RlCitSREVQRU5EU18ke1BOfSArPSAidGNsLWxpYiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZ2NjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIHRjbHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAke0J9L3RjbHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0KKwljcCAtciAke1N9Ly4uL2xpYnJhcnkgJHtEfSR7UFRFU1RfUEFUSH0KKwljcCAtciAke1N9Ly4uL3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9Cit9CisKKyMgRml4IHNvbWUgcGF0aHMgdGhhdCBtaWdodCBiZSB1c2VkIGJ5IFRjbCBleHRlbnNpb25zCitCSU5DT05GSUdfR0xPQiA9ICIqQ29uZmlnLnNoIgorCisjIEZpeCB0aGUgcGF0aCBpbiBzc3RhdGUKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqQ29uZmlnLnNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvYWx0ZXJuYXRlX3JwY19wb3J0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3NDVkNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0FkZCBhYmlsaXR5IHRvIHNwZWNpZnkgcmNwIHBvcnQgbnVtYmVycworCitJbiBvcmRlciB0byBydW4gbW9yZSB0aGFuIG9uZSB1bmZzIHNlcnZlciBvbiBhIGhvc3Qgc3lzdGVtLCB5b3UgbXVzdAorYmUgYWJsZSB0byBzcGVjaWZ5IGFsdGVybmF0ZSBycGMgcG9ydCBudW1iZXJzLgorCitKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgNDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyBtb3VudC5jICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTc4LDYgKzc4LDggQEAgaW50IG9wdF90ZXN0Y29uZmlnID0gRkFMU0U7Cisgc3RydWN0IGluX2FkZHIgb3B0X2JpbmRfYWRkcjsKKyBpbnQgb3B0X3JlYWRhYmxlX2V4ZWN1dGFibGVzID0gRkFMU0U7CisgY2hhciAqb3B0X3BpZF9maWxlID0gTlVMTDsKKytpbnQgbmZzX3Byb2cgPSBORlMzX1BST0dSQU07CisraW50IG1vdW50X3Byb2cgPSBNT1VOVFBST0c7CisgCisgLyogUmVnaXN0ZXIgd2l0aCBwb3J0bWFwcGVyPyAqLworIGludCBvcHRfcG9ydG1hcHBlciA9IFRSVUU7CitAQCAtMjA2LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIKKyB7CisgCisgICAgIGludCBvcHQgPSAwOworLSAgICBjaGFyICpvcHRzdHJpbmcgPSAiYmNDOmRlOmhsOm06bjpwcnN0VHV3aToiOworKyAgICBjaGFyICpvcHRzdHJpbmcgPSAiYmNDOmRlOmhsOm06bjpwcnN0VHV3aTp4Onk6IjsKKyAKKyAgICAgd2hpbGUgKG9wdCAhPSAtMSkgeworIAlvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgb3B0c3RyaW5nKTsKK0BAIC0yNjEsOCArMjYzLDI0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIKKyAJCXByaW50ZgorIAkJICAgICgiXHQtciAgICAgICAgICByZXBvcnQgdW5yZWFkYWJsZSBleGVjdXRhYmxlcyBhcyByZWFkYWJsZVxuIik7CisgCQlwcmludGYoIlx0LVQgICAgICAgICAgdGVzdCBleHBvcnRzIGZpbGUgYW5kIGV4aXRcbiIpOworKwkJcHJpbnRmKCJcdC14IDxwb3J0PiAgIGFsdGVybmF0ZSBORlMgUlBDIHBvcnRcbiIpOworKwkJcHJpbnRmKCJcdC15IDxwb3J0PiAgIGFsdGVybmF0ZSBNT1VOVEQgUlBDIHBvcnRcbiIpOworIAkJZXhpdCgwKTsKKyAJCWJyZWFrOworKwkgICAgY2FzZSAneCc6CisrCQluZnNfcHJvZyA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKysJCWlmIChuZnNfcHJvZyA9PSAwKSB7CisrCQkgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE5GUyBSUEMgcG9ydFxuIik7CisrCQkgICAgZXhpdCgxKTsKKysJCX0KKysJCWJyZWFrOworKwkgICAgY2FzZSAneSc6CisrCQltb3VudF9wcm9nID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTApOworKwkJaWYgKG1vdW50X3Byb2cgPT0gMCkgeworKwkJICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBNT1VOVEQgUlBDIHBvcnRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrCQlicmVhazsKKyAJICAgIGNhc2UgJ2wnOgorIAkJb3B0X2JpbmRfYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIob3B0YXJnKTsKKyAJCWlmIChvcHRfYmluZF9hZGRyLnNfYWRkciA9PSAodW5zaWduZWQpIC0xKSB7CitAQCAtMzQ3LDEyICszNjUsMTIgQEAgdm9pZCBkYWVtb25fZXhpdChpbnQgZXJyb3IpCisgI2VuZGlmCQkJCSAgICAgICAvKiBXSU4zMiAqLworIAorICAgICBpZiAob3B0X3BvcnRtYXBwZXIpIHsKKy0Jc3ZjX3VucmVnaXN0ZXIoTU9VTlRQUk9HLCBNT1VOVFZFUlMxKTsKKy0Jc3ZjX3VucmVnaXN0ZXIoTU9VTlRQUk9HLCBNT1VOVFZFUlMzKTsKKysJc3ZjX3VucmVnaXN0ZXIobW91bnRfcHJvZywgTU9VTlRWRVJTMSk7CisrCXN2Y191bnJlZ2lzdGVyKG1vdW50X3Byb2csIE1PVU5UVkVSUzMpOworICAgICB9CisgCisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlzdmNfdW5yZWdpc3RlcihORlMzX1BST0dSQU0sIE5GU19WMyk7CisrCXN2Y191bnJlZ2lzdGVyKG5mc19wcm9nLCBORlNfVjMpOworICAgICB9CisgCisgICAgIGlmIChlcnJvciA9PSBTSUdTRUdWKQorQEAgLTY1NywxMyArNjc1LDEzIEBAIHN0YXRpYyB2b2lkIG1vdW50cHJvZ18zKHN0cnVjdCBzdmNfcmVxICoKKyBzdGF0aWMgdm9pZCByZWdpc3Rlcl9uZnNfc2VydmljZShTVkNYUFJUICogdWRwdHJhbnNwLCBTVkNYUFJUICogdGNwdHJhbnNwKQorIHsKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXBtYXBfdW5zZXQoTkZTM19QUk9HUkFNLCBORlNfVjMpOworKwlwbWFwX3Vuc2V0KG5mc19wcm9nLCBORlNfVjMpOworICAgICB9CisgCisgICAgIGlmICh1ZHB0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBORlMgc2VydmljZSBmb3IgVURQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodWRwdHJhbnNwLCBORlMzX1BST0dSQU0sIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisrCSAgICAodWRwdHJhbnNwLCBuZnNfcHJvZywgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVURQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTkZTM19QUk9HUkFNLCBORlNfVjMsIHVkcCkuIik7CitAQCAtNjc0LDcgKzY5Miw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX25mc19zZXJ2aWNlKFNWQ1hQUlQKKyAgICAgaWYgKHRjcHRyYW5zcCAhPSBOVUxMKSB7CisgCS8qIFJlZ2lzdGVyIE5GUyBzZXJ2aWNlIGZvciBUQ1AgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh0Y3B0cmFuc3AsIE5GUzNfUFJPR1JBTSwgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKysJICAgICh0Y3B0cmFuc3AsIG5mc19wcm9nLCBORlNfVjMsIG5mczNfcHJvZ3JhbV8zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19UQ1AgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChORlMzX1BST0dSQU0sIE5GU19WMywgdGNwKS4iKTsKK0BAIC02ODYsMTQgKzcwNCwxNCBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9uZnNfc2VydmljZShTVkNYUFJUCisgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbW91bnRfc2VydmljZShTVkNYUFJUICogdWRwdHJhbnNwLCBTVkNYUFJUICogdGNwdHJhbnNwKQorIHsKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXBtYXBfdW5zZXQoTU9VTlRQUk9HLCBNT1VOVFZFUlMxKTsKKy0JcG1hcF91bnNldChNT1VOVFBST0csIE1PVU5UVkVSUzMpOworKwlwbWFwX3Vuc2V0KG1vdW50X3Byb2csIE1PVU5UVkVSUzEpOworKwlwbWFwX3Vuc2V0KG1vdW50X3Byb2csIE1PVU5UVkVSUzMpOworICAgICB9CisgCisgICAgIGlmICh1ZHB0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBNT1VOVCBzZXJ2aWNlICh2MSkgZm9yIFVEUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHVkcHRyYW5zcCwgTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKysJICAgICh1ZHB0cmFuc3AsIG1vdW50X3Byb2csIE1PVU5UVkVSUzEsIG1vdW50cHJvZ18zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19VRFAgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChNT1VOVFBST0csIE1PVU5UVkVSUzEsIHVkcCkuIik7CitAQCAtNzAyLDcgKzcyMCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFAKKyAKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjMpIGZvciBVRFAgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh1ZHB0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisrCSAgICAodWRwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMzLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVURQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMzLCB1ZHApLiIpOworQEAgLTcxMyw3ICs3MzEsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgICAgIGlmICh0Y3B0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBNT1VOVCBzZXJ2aWNlICh2MSkgZm9yIFRDUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHRjcHRyYW5zcCwgTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKysJICAgICh0Y3B0cmFuc3AsIG1vdW50X3Byb2csIE1PVU5UVkVSUzEsIG1vdW50cHJvZ18zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19UQ1AgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChNT1VOVFBST0csIE1PVU5UVkVSUzEsIHRjcCkuIik7CitAQCAtNzIyLDcgKzc0MCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFAKKyAKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjMpIGZvciBUQ1AgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh0Y3B0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisrCSAgICAodGNwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMzLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMzLCB0Y3ApLiIpOworLS0tIGEvbW91bnQuYworKysrIGIvbW91bnQuYworQEAgLTE1NSw4ICsxNTUsOCBAQCBtb3VudHJlczMgKm1vdW50cHJvY19tbnRfM19zdmMoZGlycGF0aCAqCisgICAgIC8qIGVycm9yIG91dCBpZiBub3QgdmVyc2lvbiAzICovCisgICAgIGlmIChycXN0cC0+cnFfdmVycyAhPSAzKSB7CisgCWxvZ21zZyhMT0dfSU5GTywKKy0JICAgICAgICIlcyBhdHRlbXB0ZWQgbW91bnQgd2l0aCB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIiwKKy0JICAgICAgIGluZXRfbnRvYShnZXRfcmVtb3RlKHJxc3RwKSkpOworKwkgICAgICAgIiVzIGF0dGVtcHRlZCBtb3VudCB3aXRoIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb246ICVpIiwKKysJICAgICAgIGluZXRfbnRvYShnZXRfcmVtb3RlKHJxc3RwKSksIHJxc3RwLT5ycV92ZXJzKTsKKyAJcmVzdWx0LmZoc19zdGF0dXMgPSBNTlQzRVJSX0lOVkFMOworIAlyZXR1cm4gJnJlc3VsdDsKKyAgICAgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X2NvbXBpbGVfd2FybmluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkYTAxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGFlbW9uLmM6IENoZWNrIGV4aXQgY29kZSBvZiBjaGRpcigpCisKK1N0b3AgdGhlIGNvbXBpbGUgd2FybmluZyBhbmQgZml4IHRoZSBjb2RlIHRvIGFjdCBvbiBhIGNoZGlyKCkgZmFpbHVyZS4KK0lmIHRoaXMgb25lIGRvZXMgZmFpbCBzb21ldGhpbmcgaXMgdmVyeSwgdmVyeSB3cm9uZy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgICAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZGFlbW9uLmMKKysrKyBiL2RhZW1vbi5jCitAQCAtOTY0LDcgKzk2NCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJc2lnYWN0aW9uKFNJR0FMUk0sICZhY3QsIE5VTEwpOworIAorIAkvKiBkb24ndCBtYWtlIGRpcmVjdG9yeSB3ZSBzdGFydGVkIGluIGJ1c3kgKi8KKy0JY2hkaXIoIi8iKTsKKysJaWYoY2hkaXIoIi8iKSA8IDApCisrCSAgICBkYWVtb25fZXhpdCgwKTsKKyAKKyAJLyogZGV0YWNoIGZyb20gdGVybWluYWwgKi8KKyAJaWYgKG9wdF9kZXRhY2gpIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmIxODdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2RhZW1vbi5jOiBGaXggcmFjZSB3aW5kb3cgZm9yIHdyaXRpbmcgb2YgdGhlIHBpZCBmaWxlCisKK1RoZSBwYXJlbnQgcHJvY2VzcyBzaG91bGQgd3JpdGUgdGhlIHBpZCBmaWxlIHN1Y2ggdGhhdCB0aGUgcGlkIGZpbGUKK3dpbGwgY2FuIGJlIGNoZWNrZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGV4aXQgb2YgdGhlIGZvcmsgZnJvbSB0aGUKK3BhcmVudC4KKworVGhpcyBhbGxvd3MgZXh0ZXJuYWwgbW9uaXRvcmluZyBhcHBsaWNhdGlvbnMgdG8gd2F0Y2ggdGhlIGRhZW1vbgord2l0aG91dCBoYXZpbmcgdG8gYWRkIHNsZWVwIGNhbGxzIHRvIHdhaXQgZm9yIHRoZSBwaWQgZmlsZSBiZSB3cml0dGVuCitvbiBhIGJ1c3kgc3lzdGVtLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgMTIgKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvZGFlbW9uLmMKKysrKyBiL2RhZW1vbi5jCitAQCAtMTUzLDcgKzE1Myw3IEBAIGludCBnZXRfc29ja2V0X3R5cGUoc3RydWN0IHN2Y19yZXEgKnJxc3QKKyAvKgorICAqIHdyaXRlIGN1cnJlbnQgcGlkIHRvIGEgZmlsZQorICAqLworLXN0YXRpYyB2b2lkIGNyZWF0ZV9waWRfZmlsZSh2b2lkKQorK3N0YXRpYyB2b2lkIGNyZWF0ZV9waWRfZmlsZShpbnQgcGlkKQorIHsKKyAgICAgY2hhciBidWZbMTZdOworICAgICBpbnQgZmQsIHJlcywgbGVuOworQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUodm9pZCkKKyAgICAgfQorICNlbmRpZgorIAorLSAgICBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBiYWNrZW5kX2dldHBpZCgpKTsKKysgICAgc3ByaW50ZihidWYsICIlaVxuIiwgcGlkKTsKKyAgICAgbGVuID0gc3RybGVuKGJ1Zik7CisgCisgICAgIHJlcyA9IGJhY2tlbmRfcHdyaXRlKGZkLCBidWYsIGxlbiwgMCk7CitAQCAtOTcwLDYgKzk3MCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBmb3JrIGludG8gYmFja2dyb3VuZFxuIik7CisgCSAgICBkYWVtb25fZXhpdCgwKTsKKyAJfQorKwlpZiAocGlkKQorKwkgICAgY3JlYXRlX3BpZF9maWxlKHBpZCk7CisrICAgIH0gZWxzZSB7CisrCWNyZWF0ZV9waWRfZmlsZShiYWNrZW5kX2dldHBpZCgpKTsKKyAgICAgfQorICNlbmRpZgkJCQkgICAgICAgLyogV0lOMzIgKi8KKyAKK0BAIC0xMDA2LDggKzEwMTAsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkvKiBubyB1bWFzayB0byBub3Qgc2NyZXcgdXAgY3JlYXRlIG1vZGVzICovCisgCXVtYXNrKDApOworIAorKyNpZmRlZiBXSU4zMgorIAkvKiBjcmVhdGUgcGlkIGZpbGUgaWYgd2FudGVkICovCistCWNyZWF0ZV9waWRfZmlsZSgpOworKwljcmVhdGVfcGlkX2ZpbGUoYmFja2VuZF9nZXRwaWQoKSk7CisrI2VuZGlmCisgCisgCS8qIGluaXRpYWxpemUgaW50ZXJuYWwgc3R1ZmYgKi8KKyAJZmhfY2FjaGVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3dhcm5pbmdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3dhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTg2NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfd2FybmluZ3MucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorZXhwb3J0cy4qOiBmaXggd2FybmluZ3MuCisKK0ZpeCB0aGVzZSB3YXJuaW5nczoKK2xleC55eS5jOjEyMDc6IHdhcm5pbmc6ICd5eXVucHV0JyBkZWZpbmVkIGJ1dCBub3QgdXNlZAorbGV4Lnl5LmM6MTI0ODogd2FybmluZzogJ2lucHV0JyBkZWZpbmVkIGJ1dCBub3QgdXNlZAorZXhwb3J0cy55OiBJbiBmdW5jdGlvbiAnc2V0X2hvc3RuYW1lJzoKK2V4cG9ydHMueTozMzQ6IHdhcm5pbmc6IGxhcmdlIGludGVnZXIgaW1wbGljaXRseSB0cnVuY2F0ZWQgdG8gdW5zaWduZWQgdHlwZQorZXhwb3J0cy55OiBJbiBmdW5jdGlvbiAnc2V0X2lwYWRkcic6CitleHBvcnRzLnk6MzUwOiB3YXJuaW5nOiBsYXJnZSBpbnRlZ2VyIGltcGxpY2l0bHkgdHJ1bmNhdGVkIHRvIHVuc2lnbmVkIHR5cGUKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgQ29uZmlnL2V4cG9ydHMubCB8ICAgIDMgKysrCisgQ29uZmlnL2V4cG9ydHMueSB8ICAgIDYgKysrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL0NvbmZpZy9leHBvcnRzLmwKKysrKyBiL0NvbmZpZy9leHBvcnRzLmwKK0BAIC00OCw2ICs0OCw5IEBAIE5FVENPTVAgWzAtOV17MSwyfQorIE5FVCB7SVB9Ii8ie05FVENPTVB9CisgT0xETkVUIHtJUH0iLyJ7SVB9CisgCisrJW9wdGlvbiBub3VucHV0CisrJW9wdGlvbiBub2lucHV0CisrCisgJSUKKyAKKyBee1dISVRFfSpcbgkJeyAvKiBlYXQgZW1wdHkgbGluZSAqLyB9CistLS0gYS9Db25maWcvZXhwb3J0cy55CisrKysgYi9Db25maWcvZXhwb3J0cy55CitAQCAtMzMxLDcgKzMzMSw4IEBAIHN0YXRpYyB2b2lkIHNldF9ob3N0bmFtZShjb25zdCBjaGFyICpuYW0KKyAJaWYgKGVudCkgeworIAkJbWVtY3B5KCZjdXJfaG9zdC5hZGRyLCBlbnQtPmhfYWRkcl9saXN0WzBdLAorIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworLQkJY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+MFVMOworKwkJY3VyX2hvc3QubWFzay5zX2FkZHIgPSAwOworKwkJY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+Y3VyX2hvc3QubWFzay5zX2FkZHI7CisgCX0gZWxzZSB7CisgCQlsb2dtc2coTE9HX0NSSVQsICJjb3VsZCBub3QgcmVzb2x2ZSBob3N0bmFtZSAnJXMnIiwgbmFtZSk7CisgCQllX2Vycm9yID0gVFJVRTsKK0BAIC0zNDcsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgc2V0X2lwYWRkcihjb25zdCBjaGFyICphZGRyKQorIAkKKyAJaWYgKCFpbmV0X2F0b24oYWRkciwgJmN1cl9ob3N0LmFkZHIpKQorIAkJZV9lcnJvciA9IFRSVUU7CistCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfjBVTDsKKysJY3VyX2hvc3QubWFzay5zX2FkZHIgPSAwOworKwljdXJfaG9zdC5tYXNrLnNfYWRkciA9IH5jdXJfaG9zdC5tYXNrLnNfYWRkcjsKKyB9CisgCisgLyoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbGF0aXZlX21heF9zb2NrZXRfcGF0aF9sZW4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK25mcy5jOiBBbGxvdyBtYXggc2Euc3VuX3BhdGggZm9yIGEgbG9jYWxkb21haW4gc29ja2V0IHdpdGggdGhlIHVzZXIgbmZzLXNlcnZlcgorCitUaGVyZSBpcyBhIGhhcmQgbGltaXQgZm9yIHRoZSBrZXJuZWwgb2YgMTA4IGNoYXJhY3RlcnMgZm9yIGEKK2xvY2FsZG9tYWluIHNvY2tldCBuYW1lLiAgVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgdXNlciBuZnMKK3NlcnZlciBpdCBzaG91bGQgbWF4aW1pemUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ5IHVzaW5nCithIHJlbGF0aXZlIHBhdGggb24gdGhlIHNlcnZlciBzaWRlLgorCitQcmV2aW91c2x5IHRoZSBuZnMtc2VydmVyIHVzZWQgdGhlIGFic29sdXRlIHBhdGggbmFtZSBwYXNzZWQgdG8KK3RoZSBzYS5zdW5wYXRoIGFyZyBmb3IgYmluZGluZyB0aGUgc29ja2V0IGFuZCB0aGlzIGhhcyBjYXVzZWQKK3Byb2JsZW1zIGZvciBib3RoIHRoZSBYIHNlcnZlciBhbmQgVVNUIGJpbmFyaWVzIHdoaWNoIG1ha2UKK2hlYXZ5IHVzZSBvZiBuYW1lZCBzb2NrZXRzIHdpdGggbG9uZyBuYW1lcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgbmZzLmMgfCAgIDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL25mcy5jCisrKysgYi9uZnMuYworQEAgLTY3Miw2ICs2NzIsNyBAQCBTWU1MSU5LM3JlcyAqbmZzcHJvYzNfc3ltbGlua18zX3N2YyhTWU1MCisgfQorIAorICNpZm5kZWYgV0lOMzIKKytzdGF0aWMgY2hhciBwYXRoYnVmX3RtcFtORlNfTUFYUEFUSExFTiArIE5GU19NQVhOQU1MRU4gKyAxXTsKKyAKKyAvKgorICAqIGNyZWF0ZSBVbml4IHNvY2tldAorQEAgLTY4MCwxNyArNjgxLDQxIEBAIHN0YXRpYyBpbnQgbWtzb2NrZXQoY29uc3QgY2hhciAqcGF0aCwgbW8KKyB7CisgICAgIGludCByZXMsIHNvY2s7CisgICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworKyAgICB1bnNpZ25lZCBpbnQgbGVuID0gc3RybGVuKHBhdGgpOworIAorICAgICBzb2NrID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKy0gICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKy0gICAgc3RyY3B5KGFkZHIuc3VuX3BhdGgsIHBhdGgpOworICAgICByZXMgPSBzb2NrOworICAgICBpZiAocmVzICE9IC0xKSB7CisrCWFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisrCWlmIChsZW4gPCBzaXplb2YoYWRkci5zdW5fcGF0aCkgLTEpIHsKKysJICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBwYXRoKTsKKysJfSBlbHNlIHsKKysJICAgIGNoYXIgKnB0cjsKKysJICAgIHJlcyA9IC0xOworKwkgICAgaWYgKGxlbiA+PSBzaXplb2YocGF0aCkpCisrCQlnb3RvIG91dDsKKysJICAgIHN0cmNweShwYXRoYnVmX3RtcCwgcGF0aCk7CisrCSAgICBwdHIgPSBzdHJyY2hyKHBhdGhidWZfdG1wLCcvJyk7CisrCSAgICBpZiAocHRyKSB7CisrCQkqcHRyID0gJ1wwJzsKKysJCXB0cisrOworKwkJaWYgKGNoZGlyKHBhdGhidWZfdG1wKSkKKysJCSAgICBnb3RvIG91dDsKKysJICAgIH0gZWxzZSB7CisrCQlwdHIgPSBwYXRoYnVmX3RtcDsKKysJICAgIH0KKysJICAgIGlmIChzdHJsZW4ocHRyKSA+PSBzaXplb2YoYWRkci5zdW5fcGF0aCkpCisrCQlnb3RvIG91dDsKKysJICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBwdHIpOworKwl9CisgCXVtYXNrKH5tb2RlKTsKKyAJcmVzID0KKyAJICAgIGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwKKyAJCSBzaXplb2YoYWRkci5zdW5fZmFtaWx5KSArIHN0cmxlbihhZGRyLnN1bl9wYXRoKSk7CisgCXVtYXNrKDApOworK291dDoKKysJaWYgKGNoZGlyKCIvIikpCisrCSAgICBmcHJpbnRmKHN0ZGVyciwgIkludGVybmFsIGZhaWx1cmUgdG8gY2hkaXIgL1xuIik7CisgCWNsb3NlKHNvY2spOworICAgICB9CisgICAgIHJldHVybiByZXM7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZW5hbWVfZmhfY2FjaGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZW5hbWVfZmhfY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkODk1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbmFtZV9maF9jYWNoZS5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tOiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyMyBGZWIgMjAxMyAwODo0OTowOCAtMDYwMAorU3ViamVjdDogW1BBVENIXSBmaF9jYWNoZTogZml4IHN0YXRsZSBuZnMgaGFuZGxlIG9uIHJlbmFtZSBwcm9ibGVtCisKK1RoZSBmb2xsb3dpbmcgdGVzdCBjYXNlIGZhaWxzIHdpdGggbW9kZXJuIGxpbnVueCBrZXJuZWxzIHdoaWNoIGNhY2hlCit0aGUgcmVuYW1lZCBpbm9kZS4KKworICAlIG1rZGlyIGE7bWtkaXIgYjttdiBiIGEvO2xzIC1sIGEKKyAgbHM6IGEvYjogU3RhbGUgTkZTIGZpbGUgaGFuZGxlCisKK1RoZSBpc3N1ZSBpcyB0aGF0IG5mc2VydmVyIHdhcyBub3QgdXBkYXRpbmcgdGhlIGZoX2NhY2hlIHdpdGggdGhlIG5ldworbG9jYXRpb24gb2YgdGhlIGlub2RlLCB3aGVuIGl0IG1vdmVzIGRpcmVjdG9yaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBmaF9jYWNoZS5jIHwgICAxMiArKysrKysrKysrKysKKyBmaF9jYWNoZS5oIHwgICAgMSArCisgbmZzLmMgICAgICB8ICAgIDIgKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKKworLS0tIGEvZmhfY2FjaGUuYworKysrIGIvZmhfY2FjaGUuYworQEAgLTE5OSw2ICsxOTksMTggQEAgc3RhdGljIGNoYXIgKmZoX2NhY2hlX2xvb2t1cCh1aW50MzIgZGV2LAorIH0KKyAKKyAvKgorKyAqIHVwZGF0ZSBhIGZoIGlub2RlIGNhY2hlIGZvciBhbiBvcGVyYXRpb24gbGlrZSByZW5hbWUKKysgKi8KKyt2b2lkIGZoX2NhY2hlX3VwZGF0ZShuZnNfZmgzIGZoLCBjaGFyICpwYXRoKQorK3sKKysgICAgdW5mczNfZmhfdCAqb2JqID0gKHZvaWQgKikgZmguZGF0YS5kYXRhX3ZhbDsKKysgICAgYmFja2VuZF9zdGF0c3RydWN0IGJ1ZjsKKysKKysgICAgaWYgKGJhY2tlbmRfbHN0YXQocGF0aCwgJmJ1ZikgIT0gLTEpIHsKKysJZmhfY2FjaGVfYWRkKG9iai0+ZGV2LCBidWYuc3RfaW5vLCBwYXRoKTsKKysgICAgfQorK30KKysvKgorICAqIHJlc29sdmUgYSBmaWxlbmFtZSBpbnRvIGEgcGF0aAorICAqIGNhY2hlLXVzaW5nIHdyYXBwZXIgZm9yIGZoX2RlY29tcF9yYXcKKyAgKi8KKy0tLSBhL2ZoX2NhY2hlLmgKKysrKyBiL2ZoX2NhY2hlLmgKK0BAIC0xOSw1ICsxOSw2IEBAIHVuZnMzX2ZoX3QgZmhfY29tcChjb25zdCBjaGFyICpwYXRoLCBzdHIKKyB1bmZzM19maF90ICpmaF9jb21wX3B0cihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdHAsIGludCBuZWVkX2Rpcik7CisgCisgY2hhciAqZmhfY2FjaGVfYWRkKHVpbnQzMiBkZXYsIHVpbnQ2NCBpbm8sIGNvbnN0IGNoYXIgKnBhdGgpOworK3ZvaWQgZmhfY2FjaGVfdXBkYXRlKG5mc19maDMgZmgsIGNoYXIgKnBhdGgpOworIAorICNlbmRpZgorLS0tIGEvbmZzLmMKKysrKyBiL25mcy5jCitAQCAtODc2LDYgKzg3Niw4IEBAIFJFTkFNRTNyZXMgKm5mc3Byb2MzX3JlbmFtZV8zX3N2YyhSRU5BTUUKKyAJICAgIHJlcyA9IGJhY2tlbmRfcmVuYW1lKGZyb21fb2JqLCB0b19vYmopOworIAkgICAgaWYgKHJlcyA9PSAtMSkKKyAJCXJlc3VsdC5zdGF0dXMgPSByZW5hbWVfZXJyKCk7CisrCSAgICAvKiBVcGRhdGUgdGhlIGZoX2NhY2hlIHdpdGggbW92ZWQgaW5vZGUgdmFsdWUgKi8KKysJICAgIGZoX2NhY2hlX3VwZGF0ZShhcmdwLT50by5kaXIsIHRvX29iaik7CisgCX0KKyAgICAgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdGNwX25vX2RlbGF5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdGNwX25vX2RlbGF5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTIxYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy90Y3Bfbm9fZGVsYXkucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorZGFlbW9uLmM6IEFkZCBvcHRpb24gZm9yIHRjcCBubyBkZWxheQorCitBbGxvdyB0aGUgTkZTIHRjcCBzb2NrZXRzIHRvIGNvbmRpdGlvbmFsbHkgdXNlIFRDUF9OT0RFTEFZCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGRhZW1vbi5jIHwgICAgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTE3LDYgKzE3LDcgQEAKKyAjaWZuZGVmIFdJTjMyCisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisgI2Vsc2UJCQkJICAgICAgIC8qIFdJTjMyICovCitAQCAtNzUsNiArNzYsNyBAQCB1bnNpZ25lZCBpbnQgb3B0X21vdW50X3BvcnQgPSBORlNfUE9SVDsKKyBpbnQgb3B0X3NpbmdsZXVzZXIgPSBGQUxTRTsKKyBpbnQgb3B0X2JydXRlX2ZvcmNlID0gRkFMU0U7CisgaW50IG9wdF90ZXN0Y29uZmlnID0gRkFMU0U7CisraW50IG9wdF90Y3Bfbm9kZWxheSA9IEZBTFNFOworIHN0cnVjdCBpbl9hZGRyIG9wdF9iaW5kX2FkZHI7CisgaW50IG9wdF9yZWFkYWJsZV9leGVjdXRhYmxlcyA9IEZBTFNFOworIGNoYXIgKm9wdF9waWRfZmlsZSA9IE5VTEw7CitAQCAtMjA4LDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIKKyB7CisgCisgICAgIGludCBvcHQgPSAwOworLSAgICBjaGFyICpvcHRzdHJpbmcgPSAiYmNDOmRlOmhsOm06bjpwcnN0VHV3aTp4Onk6IjsKKysgICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOk5uOnByc3RUdXdpOng6eToiOworIAorICAgICB3aGlsZSAob3B0ICE9IC0xKSB7CisgCW9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBvcHRzdHJpbmcpOworQEAgLTI5NSw2ICsyOTcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgCQkgICAgZXhpdCgxKTsKKyAJCX0KKyAJCWJyZWFrOworKwkgICAgY2FzZSAnTic6CisrCQlvcHRfdGNwX25vZGVsYXkgPSBUUlVFOworKwkJYnJlYWs7CisgCSAgICBjYXNlICduJzoKKyAJCW9wdF9uZnNfcG9ydCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKyAJCWlmIChvcHRfbmZzX3BvcnQgPT0gMCkgeworQEAgLTgwMiw2ICs4MDcsOCBAQCBzdGF0aWMgU1ZDWFBSVCAqY3JlYXRlX3RjcF90cmFuc3BvcnQodW5zCisgCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBvcHRfYmluZF9hZGRyLnNfYWRkcjsKKyAJc29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAoY29uc3QgY2hhciAqKSAmb24sIHNpemVvZihvbikpOworKwlpZiAob3B0X3RjcF9ub2RlbGF5KQorKwkgICAgc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksICZvbiwgc2l6ZW9mKG9uKSk7CisgCWlmIChiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKSB7CisgCSAgICBwZXJyb3IoImJpbmQiKTsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgYmluZCB0byB0Y3AgcG9ydCAlZFxuIiwgcG9ydCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy91bmZzM19wYXJhbGxlbF9idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjRkZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy91bmZzM19wYXJhbGxlbF9idWlsZC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGaXggcGFyYWxsZWwgYnVpbGQgZGVwZW5kZW5jeSBpc3N1ZQorCitJZiBidWlsZGluZyB3aXRoIG1ha2UgLWoyIHRoZSBsaWIuYSB3aWxsIG5vdCBnZXQgYnVpbHQgaW4gdGltZS4KKworSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgQ29uZmlnL01ha2VmaWxlLmluIHwgICAgMyArKysKKyBNYWtlZmlsZS5pbiAgICAgICAgfCAgICAzICsrLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI5LDcgKzI5LDggQEAgREVTVERJUiA9CisgCisgVlBBVEggPSAkKHNyY2RpcikKKyAKKy1hbGw6IHN1YmRpcnMgdW5mc2QkKEVYRUVYVCkKKythbGw6IHN1YmRpcnMKKysJJChNQUtFKSB1bmZzZCQoRVhFRVhUKQorIAorIHVuZnNkJChFWEVFWFQpOiAkKE9CSlMpICQoQ09ORk9CSikgJChFWFRSQU9CSikKKyAJJChDQykgLW8gJEAgJChPQkpTKSAkKENPTkZPQkopICQoRVhUUkFPQkopICQoTERGTEFHUykKKy0tLSBhL0NvbmZpZy9NYWtlZmlsZS5pbgorKysrIGIvQ29uZmlnL01ha2VmaWxlLmluCitAQCAtMTYsNiArMTYsOSBAQCBsaWIuYTogJChPQkpTKQorIAkkKEFSKSBjcnMgbGliLmEgJChPQkpTKQorIAorIHkudGFiLmggeS50YWIuYzogJChzcmNkaXIpL2V4cG9ydHMueQorK3kudGFiLmg6IHkudGFiLmMKKysKKyt5LnRhYi5jOiAkKHNyY2RpcikvZXhwb3J0cy55CisgCSQoWUFDQykgLWQgJChzcmNkaXIpL2V4cG9ydHMueQorIAorIHkudGFiLm86IHkudGFiLmMgJChzcmNkaXIpL2V4cG9ydHMuaCAkKHRvcF9zcmNkaXIpL25mcy5oICQodG9wX3NyY2RpcikvbW91bnQuaCAkKHRvcF9zcmNkaXIpL2RhZW1vbi5oCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5MC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDkwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2Y1NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5MC5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBORlMgc2VydmVyIHYzIHByb3RvY29sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gInVuZnMzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OTQ3NTg4NTI5NGUxN2MwY2MwMDY3ODIwZDA0Mjc5MmUiCisKKyMgU1ZOIHN1cHBvcnQgZm9yIHVwc3RyZWFtIHZlcnNpb24gY2hlY2sgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0CitSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTiA9ICIwLjkuMjIucjQ5NSIKK1JFQ0lQRV9VUFNUUkVBTV9EQVRFID0gIkZlYiAwNSwgMjAxNSIKK0NIRUNLX0RBVEUgPSAiSnVuIDEwLCAyMDE1IgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSBmbGV4IgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICs9ICJmbGV4LW5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjM2ODdhY2M0ZWU5OTJlNTM2NDcyMzY1ZGQ5OTcxMmE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3NGI0M2FkYTljNmVlYTFkYTI2ZWI3MDEwZDcyODg5YzUyNzg5ODRiYTBiNTBkZmY0ZTA5MzA1N2Q0ZDY0ZjgiCisKK01PRF9QViA9ICI0OTAiCitTID0gIiR7V09SS0RJUn0vdHJ1bmsiCitTUkNfVVJJID0gInN2bjovL3N2bi5jb2RlLnNmLm5ldC9wL3VuZnMzL2NvZGU7bW9kdWxlPXRydW5rO3Jldj0ke01PRF9QVn0gXAorICAgICAgICAgICBmaWxlOi8vdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWx0ZXJuYXRlX3JwY19wb3J0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcGlkX3JhY2VfcGFyZW50X3dyaXRlc19jaGlsZF9waWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2NvbXBpbGVfd2FybmluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW5hbWVfZmhfY2FjaGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfd2FybmluZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwX25vX2RlbGF5LnBhdGNoIFwKKyAgICAgICAgICAiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgVHVybiBvZmYgdGhlc2UgaGVhZGVyIGRldGVjdHMgZWxzZSB0aGUgaW5vZGUgc2VhcmNoCisjIHdpbGwgd2FsayBlbnRpcmUgZmlsZSBzeXN0ZW1zIGFuZCB0aGlzIGlzIGEgcmVhbCBwcm9ibGVtCisjIGlmIHlvdSBoYXZlIDIgVEIgb2YgZmlsZXMgdG8gd2FsayBpbiB5b3VyIGZpbGUgc3lzdGVtCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJhY19jdl9oZWFkZXJfbW50ZW50X2g9bm8gYWNfY3ZfaGVhZGVyX3N5c19tbnR0YWJfaD1ubyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuaWZkZWYvdW5pZmRlZl8yLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5pZmRlZi91bmlmZGVmXzIuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhMDA3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuaWZkZWYvdW5pZmRlZl8yLjEwLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiU2VsZWN0aXZlbHkgcmVtb3ZlICNpZmRlZiBzdGF0ZW1lbnRzIGZyb20gc291cmNlcyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdW5pZmRlZi5jO2VuZGxpbmU9MzI7bWQ1PTJjYzIzZjAzODJhNmY1NjBmNmE5ZWNmNGUwNDBjMGRhIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3RhdC5hdC9wcm9nLyR7QlBOfS8ke0JQfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiYmI1ZDg5NWU1ZWJiYmE1YzVjYzBjMjc3MWNmOTdlYmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2I5YjJiNmIxOTUyZTliOWMxYjlmNzM0ZWRlYzI3MDY4OWEzNWJkYmYzM2FlNjZiNTBlMTliMmVkMGQyZGYwNiIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IHByZWZpeD0ke3ByZWZpeH0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA1NmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkMjLWxpa2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZm9yIGVhc2luZyBHT2JqZWN0IHByb2dyYW1taW5nIgorREVTQ1JJUFRJT04gPSAiVmFsYSBpcyBhIEMjLWxpa2UgbGFuZ3VhZ2UgZGVkaWNhdGVkIHRvIGVhc2UgR09iamVjdCBwcm9ncmFtbWluZy4gXAorVmFsYSBjb21waWxlcyB0byBwbGFpbiBDIGFuZCBoYXMgbm8gcnVudGltZSBlbnZpcm9ubWVudCBub3IgcGVuYWxpdGllcyB3aGF0c29ldmVyLiIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSBsaWJ4c2x0LW5hdGl2ZSBnbGliLTIuMCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorSE9NRVBBR0UgPSAiaHR0cDovL3ZhbGEtcHJvamVjdC5vcmciCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQiCisKK1NIUlRfVkVSID0gIiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzFdfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy8ke0JQTn0vJHtTSFJUX1ZFUn0vJHtCUH0udGFyLnh6IgoraW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9LyR7QlBOfS0ke1NIUlRfVkVSfS92YXBpICR7bGliZGlyfS8ke0JQTn0tJHtTSFJUX1ZFUn0vIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2RldmhlbHAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0tJHtTSFJUX1ZFUn0vLmRlYnVnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLzAwMDEtZ2l0LXZlcnNpb24tZ2VuLWRvbi10LWFwcGVuZC1kaXJ0eS1pZi13ZS1yZS1ub3QtaW4tZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5ZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSAyNDYwZDdiNzlmN2U5MGRjZmVlYmRlNWU5YzUzZDliNjc5OGExZjNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVHVlLCAyMSBGZWIgMjAxMiAxNzoxMjo1MCArMDEwMAorU3ViamVjdDogW1BBVENIXSBnaXQtdmVyc2lvbi1nZW46IGRvbid0IGFwcGVuZCAtZGlydHkgaWYgd2UncmUgbm90IGluIGdpdAorIHJlcG8KKworKiBmb3IgZXhhbXBsZSBpZiB3ZSBoYXZlIHNvbWUgZGlydHkgZGlyZWN0b3J5IGFuZCB3ZSB1bnBhY2sgY2xlYW4gdmFsYSB0YXJiYWxsIGluIGl0LCB0aGVuIGl0IHdpbGwgYXBwZW5kIC1kaXJ0eQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCistLS0KKyBidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIHwgICAyNSArKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4gYi9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCitpbmRleCAwZmE2ZmFhLi4xZDFmOWQyIDEwMDc1NQorLS0tIGEvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorKysrIGIvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorQEAgLTEyNiwxOCArMTI2LDIxIEBAIGZpCisgCisgdj1gZWNobyAiJHYiIHxzZWQgJ3MvXnYvLydgCisgCistIyBEb24ndCBkZWNsYXJlIGEgdmVyc2lvbiAiZGlydHkiIG1lcmVseSBiZWNhdXNlIGEgdGltZSBzdGFtcCBoYXMgY2hhbmdlZC4KKy1naXQgc3RhdHVzID4gL2Rldi9udWxsIDI+JjEKKytpZiB0ZXN0IC1kIC5naXQKKyt0aGVuCisrCSMgRG9uJ3QgZGVjbGFyZSBhIHZlcnNpb24gImRpcnR5IiBtZXJlbHkgYmVjYXVzZSBhIHRpbWUgc3RhbXAgaGFzIGNoYW5nZWQuCisrCWdpdCBzdGF0dXMgPiAvZGV2L251bGwgMj4mMQorIAorLWRpcnR5PWBzaCAtYyAnZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCcgMj4vZGV2L251bGxgIHx8IGRpcnR5PQorLWNhc2UgIiRkaXJ0eSIgaW4KKy0gICAgJycpIDs7CistICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKy0JY2FzZSAkdiBpbgorLQkgICotZGlydHkpIDs7CistCSAgKikgdj0iJHYtZGlydHkiIDs7CistCWVzYWMgOzsKKy1lc2FjCisrCWRpcnR5PWBzaCAtYyAnZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCcgMj4vZGV2L251bGxgIHx8IGRpcnR5PQorKwljYXNlICIkZGlydHkiIGluCisrCSAgICAnJykgOzsKKysJICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKysJCWNhc2UgJHYgaW4KKysJCSAgKi1kaXJ0eSkgOzsKKysJCSAgKikgdj0iJHYtZGlydHkiIDs7CisrCQllc2FjIDs7CisrCWVzYWMKKytmaQorIAorICMgT21pdCB0aGUgdHJhaWxpbmcgbmV3bGluZSwgc28gdGhhdCBtNF9lc3lzY21kIGNhbiB1c2UgdGhlIHJlc3VsdCBkaXJlY3RseS4KKyBlY2hvICIkdiIgfCB0ciAtZCAnXDAxMicKKy0tIAorMS43LjguNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4yOC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMjguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA5MDZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMjguMC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitTUkNfVVJJICs9ICIgZmlsZTovLzAwMDEtZ2l0LXZlcnNpb24tZ2VuLWRvbi10LWFwcGVuZC1kaXJ0eS1pZi13ZS1yZS1ub3QtaW4tZy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkNGNlYWMzNDUxYTBkNTQ5N2U3YmUzOGU1ZTRjMmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkOWUzYmQzZjgyMTQ1NjY0ODc1ZjdjMjliMmY1NDRiYTkyZDI4MTRmNzU0MTI5NDhmNzc0YzA3MjdmYzk3N2YiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiYjVmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDFhODAwNmY1NjM0MmRhZTlmNzEwMGEzYzMzZDgwODczNjc2ZTA0MDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDI0IEF1ZyAyMDE1IDAzOjU1OjE4IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHZhbGdyaW5kOiBFbmFibGUgcnRfc2lncGVuZGluZyBzeXNjYWxsIG9uIHBwYzY0IGxpbnV4CisKK05ldyBSZXZpc2lvbjogMTUxMzMKK0VuYWJsZSBydF9zaWdwZW5kaW5nIHN5c2NhbGwgb24gcHBjNjQgbGludXguCitQYXRjaCBmcm9tIFRob21hcyBIdXRoIDx0aHV0aEByZWRoYXQuY29tPgorCitHZXQgdGhlIHBhdGNoIGZyb20gdmFsZ3JpbmQgdXBzdHJlYW06CitodHRwOi8vdmFsZ3JpbmQuMTA5MDgubjcubmFiYmxlLmNvbS9WYWxncmluZC1yMTUxMzMtaW4tdHJ1bmstTkVXUy1jb3JlZ3JpbmQtbS1zeXN3cmFwLXN5c3dyYXAtcHBjNjQtbGludXgtYy10ZDU0NTg5Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CistLS0KKyBjb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jIGIvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMKK2luZGV4IDU5NDZlZTEuLjhhYWExZDcgMTAwNjQ0CistLS0gYS9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYworKysrIGIvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMKK0BAIC04ODcsNyArODg3LDcgQEAgc3RhdGljIFN5c2NhbGxUYWJsZUVudHJ5IHN5c2NhbGxfdGFibGVbXSA9IHsKKyAgICBMSU5YWShfX05SX3J0X3NpZ2FjdGlvbiwgICAgICBzeXNfcnRfc2lnYWN0aW9uKSwgICAgICAgLy8gMTczCisgICAgTElOWFkoX19OUl9ydF9zaWdwcm9jbWFzaywgICAgc3lzX3J0X3NpZ3Byb2NtYXNrKSwgICAgIC8vIDE3NAorIAorLS8vIF9fX19fKF9fTlJfcnRfc2lncGVuZGluZywgICAgIHN5c19ydF9zaWdwZW5kaW5nKSwgICAgICAvLyAxNzUKKysgICBMSU5YWShfX05SX3J0X3NpZ3BlbmRpbmcsICAgICBzeXNfcnRfc2lncGVuZGluZyksICAgICAgLy8gMTc1CisgICAgTElOWFkoX19OUl9ydF9zaWd0aW1lZHdhaXQsICAgc3lzX3J0X3NpZ3RpbWVkd2FpdCksICAgIC8vIDE3NgorICAgIExJTlhZKF9fTlJfcnRfc2lncXVldWVpbmZvLCAgIHN5c19ydF9zaWdxdWV1ZWluZm8pLCAgICAvLyAxNzcKKyAgICBMSU5YXyhfX05SX3J0X3NpZ3N1c3BlbmQsICAgICBzeXNfcnRfc2lnc3VzcGVuZCksICAgICAgLy8gMTc4CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc3NGYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMGJmNGIwYWMxOGQxZWE0MWIzMmFkNzgxZDIxNGIyOTVjYTE5OThmMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IE1vbiwgMjEgTm92IDIwMTEgMTc6MzE6MzkgKzA1MzAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkZWQgc3VwcG9ydCBmb3IgUFBDIGluc3RydWN0aW9ucyBtZmF0YnUsIG1mYXRibC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KKy0tLQorQ3VycmVudGx5IFZhbGdyaW5kIDMuNy4wIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgUFBDIGluc3RydWN0aW9ucyBtZmF0YnUgYW5kIG1mYXRibC4gV2hlbiB3ZSBydW4gYSBVU0RQQUEgYXBwbGljYXRpb24gd2l0aCBWQUxHUklORCwgdGhlIGZvbGxvd2luZyBlcnJvciBpcyBnaXZlbiBieSB2YWxncmluZCA6CitkaXNfcHJvY19jdGwocHBjKShtZnNwcixTUFIpKDB4MjBGKQorZGlzSW5zdHIocHBjKTogdW5oYW5kbGVkIGluc3RydWN0aW9uOiAweDdDMEY4MkE2CisKKworIFZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmggICAgfCAgICAyICsrCisgVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYyB8ICAgMTggKysrKysrKysrKysrKysrKysrCisgVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYyAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmggYi9WRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oCitpbmRleCBkZDNjNjJlLi4xMWEzNGFhIDEwMDY0NAorLS0tIGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaAorKysrIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaAorQEAgLTE0Niw2ICsxNDYsOCBAQCBleHRlcm4gVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfMjY4XzI2OSAoIFVJbnQgKTsKKyAKKyBleHRlcm4gVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfMjg3ICggdm9pZCApOworIAorK2V4dGVybiBVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3ICggVUludCApOworKworIGV4dGVybiB2b2lkIHBwYzMyZ19kaXJ0eWhlbHBlcl9MVlMgKCBWZXhHdWVzdFBQQzMyU3RhdGUqIGdzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludCB2RF9pZHgsIFVJbnQgc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQgc2hpZnRfcmlnaHQgKTsKK2RpZmYgLS1naXQgYS9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYworaW5kZXggMTFhYTQyOC4uYjQ5ZWEzZiAxMDA2NDQKKy0tLSBhL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMKKysrKyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMKK0BAIC0xMTksNiArMTE5LDI0IEBAIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI4NyAoIHZvaWQgKQorICMgIGVuZGlmCisgfQorIAorKy8qIENBTExFRCBGUk9NIEdFTkVSQVRFRCBDT0RFICovCisrLyogRElSVFkgSEVMUEVSIChub24tcmVmZXJlbnRpYWxseSB0cmFuc3BhcmVudCkgKi8KKytVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3ICggVUludCByNTI3ICkKKyt7CisrIyAgaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfQUlYKQorKyAgIFVJbnQgc3ByOworKyAgIGlmIChyNTI3KSB7CisrICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1mc3ByICUwLDUyNyIgOiAiPWIiKHNwcikpOworKyAgIH0gZWxzZSB7CisrICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1mc3ByICUwLDUyNiIgOiAiPWIiKHNwcikpOworKyAgIH0KKysgICByZXR1cm4gc3ByOworKyMgIGVsc2UKKysgICByZXR1cm4gMDsKKysjICBlbmRpZgorK30KKysKKysKKyAKKyAvKiBDQUxMRUQgRlJPTSBHRU5FUkFURUQgQ09ERSAqLworIC8qIERJUlRZIEhFTFBFUiAocmVhZHMgZ3Vlc3Qgc3RhdGUsIHdyaXRlcyBndWVzdCBtZW0pICovCitkaWZmIC0tZ2l0IGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYyBiL1ZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMKK2luZGV4IGY4ZDIyMGQuLjM3Yzg5NzQgMTAwNjQ0CistLS0gYS9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jCisrKysgYi9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jCitAQCAtNTY1Nyw2ICs1NjU3LDI4IEBAIHN0YXRpYyBCb29sIGRpc19wcm9jX2N0bCAoIFZleEFiaUluZm8qIHZiaSwgVUludCB0aGVJbnN0ciApCisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorIAorKworKyAgICAgIGNhc2UgNTI2IC8qIDB4MjBFICovOgorKyAgICAgIGNhc2UgNTI3IC8qIDB4MjBGICovOiB7CisrICAgICAgICAgVUludCAgICAgYXJnICA9IFNQUj09NTI2ID8gMCA6IDE7CisrICAgICAgICAgSVJUZW1wICAgdmFsICA9IG5ld1RlbXAoSXR5X0kzMik7CisrICAgICAgICAgSVJFeHByKiogYXJncyA9IG1rSVJFeHByVmVjXzEoIG1rVTMyKGFyZykgKTsKKysgICAgICAgICBJUkRpcnR5KiBkICAgID0gdW5zYWZlSVJEaXJ0eV8xX04oCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC8qcmVncGFybXMqLywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3IiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5wdHJfdG9fZm5lbnRyeQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmJpLCAmcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzUyNl81MjcpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzCisrICAgICAgICAgICAgICAgICAgICAgICAgICk7CisrICAgICAgICAgLyogZXhlY3V0ZSB0aGUgZGlydHkgY2FsbCwgZHVtcGluZyB0aGUgcmVzdWx0IGluIHZhbC4gKi8KKysgICAgICAgICBzdG10KCBJUlN0bXRfRGlydHkoZCkgKTsKKysgICAgICAgICBwdXRJUmVnKCByRF9hZGRyLAorKyAgICAgICAgICAgICAgICAgIG1rV2lkZW5Gcm9tMzIodHksIG1rZXhwcih2YWwpLCBGYWxzZS8qdW5zaWduZWQqLykgKTsKKysgICAgICAgICBESVAoIm1mc3ByIHIldSwldSIsIHJEX2FkZHIsIChVSW50KVNQUik7CisrICAgICAgICAgYnJlYWs7CisrICAgICAgfQorKworICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgdmV4X3ByaW50ZigiZGlzX3Byb2NfY3RsKHBwYykobWZzcHIsU1BSKSgweCV4KVxuIiwgU1BSKTsKKyAgICAgICAgICByZXR1cm4gRmFsc2U7CistLSAKKzEuNy4wLjQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2FkZC1wdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2FkZC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVmODQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvYWRkLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMjQzIEBACitNb2RpZnkgdmdfdGVzdCB3cmFwcGVyIHRvIHN1cHBvcnQgUFRFU1QgZm9ybWF0cworCitDaGFuZ2UgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gdGVzdCBzY3JpcHQgdmdfcmVndGVzdCB0bworc3VwcG9ydCB0aGUgeW9jdG8gcHRlc3Qgc3Rkb3V0IHJlcG9ydGluZyBmb3JtYXQuICBUaGUgY29tbWl0IGFkZHMKKyctLXlvY3RvLXB0ZXN0JyBhcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0byB2Z19yZWd0ZXN0LCB3aGljaCBhbHRlcnMKK3RoZSBvdXRwdXQgdG8gdXNlIHRoZSBwdGVzdCBpbmZyYXN0cnVjdHVyZSByZXBvcnRpbmcgZm9ybWF0OgorICAgICJbUEFTU3xTS0lQfEZBSUxdOiB0ZXN0bmFtZSIKK2luc3RlYWQgb2YgdmFsZ3JpbmQncyBpbnRlcm5hbCB0ZXN0IHJlcG9ydGluZyBmb3JtYXQuICBXaXRob3V0IHRoZSBhZGRlZAorb3B0aW9uLCAtLXlvY3RvLXB0ZXN0LCB0aGUgdmFsZ3JpbmQgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpcyB1bmNoYW5nZWQuCisKK0VuZm9yY2UgMzAgc2Vjb25kcyBsaW1pdCBmb3IgdGhlIHRlc3QuCitUaGlzIHJlc3VtZSBleGVjdXRpb24gb2YgdGhlIHJlbWFpbmluZyB0ZXN0cyB3aGVuIHZhbGdyaW5kIGhhbmdzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBUdWRvciBGbG9yZWEgPHR1ZG9yLmZsb3JlYUBlbmVhLmNvbT4KKworZGlmZiAtLWdpdCBhL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4gYi90ZXN0cy92Z19yZWd0ZXN0LmluCitpbmRleCAyMjQzODVmLi4zZTAzODNiIDEwMDc1NQorLS0tIGEvdGVzdHMvdmdfcmVndGVzdC5pbgorKysrIGIvdGVzdHMvdmdfcmVndGVzdC5pbgorQEAgLTM5LDExICszOSwxMSBAQAorICMgICAgICAgICAgICAgICAtLXZhbGdyaW5kLikKKyAjICAgLS1rZWVwLXVuZmlsdGVyZWQ6IGtlZXAgYSBjb3B5IG9mIHRoZSB1bmZpbHRlcmVkIG91dHB1dC9lcnJvciBvdXRwdXQKKyAjICAgICBvZiBlYWNoIHRlc3QgYnkgYWRkaW5nIGFuIGV4dGVuc2lvbiAudW5maWx0ZXJlZC5vdXQKKy0jCisgIyAgIC0tb3V0ZXItdmFsZ3JpbmQ6IHJ1biB0aGlzIHZhbGdyaW5kIHVuZGVyIHRoZSBnaXZlbiBvdXRlciB2YWxncmluZC4KKyAjICAgICBUaGlzIHZhbGdyaW5kIG11c3QgYmUgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLWlubmVyLgorICMgICAtLW91dGVyLXRvb2w6IHRvb2wgdG8gdXNlIGJ5IHRoZSBvdXRlciB2YWxncmluZCAoZGVmYXVsdCBtZW1jaGVjaykuCisgIyAgIC0tb3V0ZXItYXJnczogdXNlIHRoaXMgYXMgb3V0ZXIgdG9vbCBhcmdzLgorKyMgICAtLXlvY3RvLXB0ZXN0OiBvdXRwdXQgaW4geW9jdG8gcHRlc3QgZm9ybWF0CisgIworICMgVGhlIGVhc2llc3Qgd2F5IGlzIHRvIHJ1biBhbGwgdGVzdHMgaW4gdmFsZ3JpbmQvIHdpdGggKGFzc3VtaW5nIHlvdSBpbnN0YWxsZWQKKyAjIGluICRQUkVGSVgpOgorQEAgLTEyNiw3ICsxMjYsNyBAQCB1c2Ugc3RyaWN0OworIG15ICR1c2FnZT0iXG4iCisgICAgICAuICJVc2FnZTpcbiIKKyAgICAgIC4gIiAgIHZnX3JlZ3Rlc3QgWy0tYWxsLCAtLXZhbGdyaW5kLCAtLXZhbGdyaW5kLWxpYiwgLS1rZWVwLXVuZmlsdGVyZWRcbiIKKy0gICAgIC4gIiAgICAgICAgICAgICAgICAgLS1vdXRlci12YWxncmluZCwgLS1vdXRlci10b29sLCAtLW91dGVyLWFyZ3NdXG4iCisrICAgICAuICIgICAgICAgICAgICAgICAgIC0tb3V0ZXItdmFsZ3JpbmQsIC0tb3V0ZXItdG9vbCwgLS1vdXRlci1hcmdzLCAtLXlvY3RvLXB0ZXN0XVxuIgorICAgICAgLiAiICAgVXNlIEVYVFJBX1JFR1RFU1RfT1BUUyB0byBzdXBwbHkgZXh0cmEgYXJncyBmb3IgYWxsIHRlc3RzXG4iCisgICAgICAuICJcbiI7CisgCitAQCAtMTcwLDYgKzE3MCw3IEBAIG15ICRvdXRlcl9hcmdzOworIAorIG15ICR2YWxncmluZF9saWIgPSAiJHRlc3RzX2Rpci8uaW5fcGxhY2UiOworIG15ICRrZWVwdW5maWx0ZXJlZCA9IDA7CisrbXkgJHlvY3RvcHRlc3QgPSAwOworIAorICMgZGVmYXVsdCBmaWx0ZXIgaXMgdGhlIG9uZSBuYW1lZCAiZmlsdGVyX3N0ZGVyciIgaW4gdGhlIHRlc3QncyBkaXJlY3RvcnkKKyBteSAkZGVmYXVsdF9zdGRlcnJfZmlsdGVyID0gImZpbHRlcl9zdGRlcnIiOworQEAgLTIyNiw2ICsyMjcsOCBAQCBzdWIgcHJvY2Vzc19jb21tYW5kX2xpbmUoKQorICAgICAgICAgICAgICAgICAkdmFsZ3JpbmRfbGliID0gJDE7CisgICAgICAgICAgICAgfSBlbHNpZiAoJGFyZyA9fiAvXi0ta2VlcC11bmZpbHRlcmVkJC8pIHsKKyAgICAgICAgICAgICAgICAgJGtlZXB1bmZpbHRlcmVkID0gMTsKKysgICAgICAgICAgICB9IGVsc2lmICgkYXJnID1+IC9eLS15b2N0by1wdGVzdCQvKSB7CisrICAgICAgICAgICAgICAgICR5b2N0b3B0ZXN0ID0gMTsKKyAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICBkaWUgJHVzYWdlOworICAgICAgICAgICAgIH0KK0BAIC0zNDAsMTMgKzM0MywyOCBAQCBzdWIgcmVhZF92Z3Rlc3RfZmlsZSgkKQorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBTaW5jZSBtb3N0IG9mIHRoZSBwcm9ncmFtIHRpbWUgaXMgc3BlbnQgaW4gc3lzdGVtKCkgY2FsbHMsIG5lZWQgdGhpcyB0bworICMgcHJvcGFnYXRlIGEgQ3RybC1DIGVuYWJsaW5nIHVzIHRvIHF1aXQuCistc3ViIG15c3lzdGVtKCQpIAorKyMgRW5mb3JjZSAzMCBzZWNvbmRzIGxpbWl0IGZvciB0aGUgdGVzdC4KKysjIFRoaXMgcmVzdW1lIGV4ZWN1dGlvbiBvZiB0aGUgcmVtYWluaW5nIHRlc3RzIGlmIHZhbGdyaW5kIGhhbmdzLgorK3N1YiBteXN5c3RlbSgkKQorIHsKKy0gICAgbXkgJGV4aXRfY29kZSA9IHN5c3RlbSgkX1swXSk7CistICAgICgkZXhpdF9jb2RlID09IDIpIGFuZCBleGl0IDE7ICAgICAgIyAyIGlzIFNJR0lOVAorLSAgICByZXR1cm4gJGV4aXRfY29kZTsKKysgICAgbXkgJGV4aXRfY29kZT0wOworKyAgICBldmFsIHsKKysgICAgICAgIGxvY2FsICRTSUd7J0FMUk0nfSA9IHN1YiB7IGRpZSAidGltZWQgb3V0XG4iIH07CisrICAgICAgICBhbGFybSgzMCk7CisrICAgICAgICAkZXhpdF9jb2RlID0gc3lzdGVtKCRfWzBdKTsKKysgICAgICAgIGFsYXJtICgwKTsKKysgICAgICAgICgkZXhpdF9jb2RlID09IDIpIGFuZCBkaWUgIlNJR0lOVFxuIjsgICAjIDIgaXMgU0lHSU5UCisrICAgIH07CisrICAgIGlmICgkQCkgeworKyAgICAgICAgaWYgKCRAIGVxICJ0aW1lZCBvdXRcbiIpIHsKKysgICAgICAgICAgICBwcmludCAidGltZWQgb3V0XG4iOworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKCRAIGVxICJTSUdJTlRcbiIpIHsKKysgICAgICAgICAgICBleGl0IDE7CisrICAgICAgICB9CisrICAgIH0KKyB9CistCisgIyBpZiAka2VlcHVuZmlsdGVyZWQsIGNvcGllcyAkMSB0byAkMS51bmZpbHRlcmVkLm91dAorICMgcmVuYW1lcyAkMCB0cCAkMQorIHN1YiBmaWx0ZXJlZF9yZW5hbWUoJCQpIAorQEAgLTM5NCwxOSArNDEyLDIxIEBAIHN1YiBkb19kaWZmcygkJCQkKQorICAgICAgICAgICAgICAgICAjIEEgbWF0Y2g7ICByZW1vdmUgLm91dCBhbmQgYW55IHByZXZpb3VzbHkgY3JlYXRlZCAuZGlmZiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgdW5saW5rKCIkbmFtZS4kbWlkLm91dCIpOworICAgICAgICAgICAgICAgICB1bmxpbmsoPCRuYW1lLiRtaWQuZGlmZio+KTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyAgICAgIyBJZiB3ZSByZWFjaCBoZXJlLCBub25lIG9mIHRoZSAuZXhwIGZpbGVzIG1hdGNoZWQuCistICAgIHByaW50ICIqKiogJG5hbWUgZmFpbGVkICgkbWlkKSAqKipcbiI7CisrICAgIHByaW50ICIqKiogJG5hbWUgZmFpbGVkICgkbWlkKSAqKipcbiIgaWYgKCR5b2N0b3B0ZXN0ID09IDApIDsKKyAgICAgcHVzaChAZmFpbHVyZXMsIHNwcmludGYoIiUtNDBzICgkbWlkKSIsICIkZnVsbG5hbWUiKSk7CisgICAgICRudW1fZmFpbHVyZXN7JG1pZH0rKzsKKysgICAgcmV0dXJuIDE7CisgfQorIAorIHN1YiBkb19vbmVfdGVzdCgkJCkgCisgeworICAgICBteSAoJGRpciwgJHZndGVzdCkgPSBAXzsKKysgICAgbXkgJGRpZmZTdGF0dXMgPSAwOworICAgICAkdmd0ZXN0ID1+IC9eKC4qKVwudmd0ZXN0LzsKKyAgICAgbXkgJG5hbWUgPSAkMTsKKyAgICAgbXkgJGZ1bGxuYW1lID0gIiRkaXIvJG5hbWUiOyAKK0BAIC00MjUsNyArNDQ1LDExIEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgIH0gZWxzaWYgKDI1NiA9PSAkcHJlcmVxX3JlcykgeworICAgICAgICAgICAgICMgTmI6IHdlaXJkIFBlcmwtaXNtIC0tIGV4aXQgY29kZSBvZiAnMScgaXMgc2VlbiBieSBQZXJsIGFzIDI1Ni4uLgorICAgICAgICAgICAgICMgUHJlcmVxIGZhaWxlZCwgc2tpcC4KKy0gICAgICAgICAgICBwcmludGYoIiUtMTZzIChza2lwcGluZywgcHJlcmVxIGZhaWxlZDogJHByZXJlcSlcbiIsICIkbmFtZToiKTsKKysgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCkgeworKyAgICAgICAgICAgICAgICBwcmludGYoIiUtMTZzIChza2lwcGluZywgcHJlcmVxIGZhaWxlZDogJHByZXJlcSlcbiIsICIkbmFtZToiKTsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICBwcmludGYoIlNLSVA6ICRmdWxsbmFtZVxuIik7CisrICAgICAgICAgICAgfQorICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIyBCYWQgcHJlcmVxOyBhYm9ydC4KK0BAIC00MzgsNyArNDYyLDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICBpZiAoZGVmaW5lZCAkcHJvZ0IpIHsKKyAgICAgICAgICMgSWYgdGhlcmUgaXMgYSBwcm9nQiwgbGV0J3Mgc3RhcnQgaXQgaW4gYmFja2dyb3VuZDoKKyAgICAgICAgIHByaW50ZigiJS0xNnMgdmFsZ3JpbmQgJGV4dHJhb3B0cyAkdmdvcHRzICRwcm9nICRhcmdzIChwcm9nQjogJHByb2dCICRhcmdzQilcbiIsCistICAgICAgICAgICAgICAgIiRuYW1lOiIpOworKyAgICAgICAgICAgICAgICIkbmFtZToiKSBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgICAgICAjIHByb2dCLmRvbmUgdXNlZCB0byBkZXRlY3QgY2hpbGQgaGFzIGZpbmlzaGVkLiBTZWUgYmVsb3cuCisgICAgICAgICAjIE5vdGU6IHJlZGlyZWN0aW9uIG9mIHN0ZG91dCBhbmQgc3RkZXJyIGlzIGJlZm9yZSAkcHJvZ0IgdG8gYWxsb3cgYXJnc0IKKyAgICAgICAgICMgdG8gZS5nLiByZWRpcmVjdCBzdGRvdXRCIHRvIHN0ZGVyckIKK0BAIC00NTIsNyArNDc2LDggQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgICAgICAgICAgICAgIC4gInRvdWNoIHByb2dCLmRvbmUpICAmIik7CisgICAgICAgICB9CisgICAgIH0gZWxzZSB7CistICAgICAgICBwcmludGYoIiUtMTZzIHZhbGdyaW5kICRleHRyYW9wdHMgJHZnb3B0cyAkcHJvZyAkYXJnc1xuIiwgIiRuYW1lOiIpOworKyAgICAgICAgcHJpbnRmKCIlLTE2cyB2YWxncmluZCAkZXh0cmFvcHRzICR2Z29wdHMgJHByb2cgJGFyZ3NcbiIsICIkbmFtZToiKQorKyAgICAgICAgICAgIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgfQorICAKKyAgICAgIyBQYXNzIHRoZSBhcHByb3ByaWF0ZSAtLXRvb2wgb3B0aW9uIGZvciB0aGUgZGlyZWN0b3J5IChjYW4gYmUgb3ZlcnJpZGRlbgorQEAgLTQ4Nyw3ICs1MTIsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICMgRmluZCBhbGwgdGhlIC5zdGRvdXQuZXhwIGZpbGVzLiAgSWYgbm9uZSwgdXNlIC9kZXYvbnVsbC4KKyAgICAgbXkgQHN0ZG91dF9leHBzID0gPCRuYW1lLnN0ZG91dC5leHAqPjsKKyAgICAgQHN0ZG91dF9leHBzID0gKCAiL2Rldi9udWxsIiApIGlmICgwID09IHNjYWxhciBAc3Rkb3V0X2V4cHMpOworLSAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0IiwgXEBzdGRvdXRfZXhwcyk7IAorKyAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0IiwgXEBzdGRvdXRfZXhwcyk7CisgCisgICAgICMgRmlsdGVyIHN0ZGVycgorICAgICAkc3RkZXJyX2ZpbHRlcl9hcmdzID0gJG5hbWUgaWYgKCEgZGVmaW5lZCAkc3RkZXJyX2ZpbHRlcl9hcmdzKTsKK0BAIC00OTYsNyArNTIxLDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAjIEZpbmQgYWxsIHRoZSAuc3RkZXJyLmV4cCBmaWxlcy4gIEF0IGxlYXN0IG9uZSBtdXN0IGV4aXN0LgorICAgICBteSBAc3RkZXJyX2V4cHMgPSA8JG5hbWUuc3RkZXJyLmV4cCo+OworICAgICAoMCAhPSBzY2FsYXIgQHN0ZGVycl9leHBzKSBvciBkaWUgIkNvdWxkIG5vdCBmaW5kIGAkbmFtZS5zdGRlcnIuZXhwKidcbiI7CistICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnIiLCBcQHN0ZGVycl9leHBzKTsgCisrICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnIiLCBcQHN0ZGVycl9leHBzKTsKKyAKKyAgICAgaWYgKGRlZmluZWQgJHByb2dCKSB7CisgICAgICAgICAjIHdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSBmaW5pc2hlZAorQEAgLTUyMCw3ICs1NDUsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICAjIEZpbmQgYWxsIHRoZSAuc3Rkb3V0Qi5leHAgZmlsZXMuICBJZiBub25lLCB1c2UgL2Rldi9udWxsLgorICAgICAgICAgbXkgQHN0ZG91dEJfZXhwcyA9IDwkbmFtZS5zdGRvdXRCLmV4cCo+OworICAgICAgICAgQHN0ZG91dEJfZXhwcyA9ICggIi9kZXYvbnVsbCIgKSBpZiAoMCA9PSBzY2FsYXIgQHN0ZG91dEJfZXhwcyk7CistICAgICAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0QiIsIFxAc3Rkb3V0Ql9leHBzKTsgCisrICAgICAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0QiIsIFxAc3Rkb3V0Ql9leHBzKTsKKyAgICAgICAgIAorICAgICAgICAgIyBGaWx0ZXIgc3RkZXJyCisgICAgICAgICAkc3RkZXJyQl9maWx0ZXJfYXJncyA9ICRuYW1lIGlmICghIGRlZmluZWQgJHN0ZGVyckJfZmlsdGVyX2FyZ3MpOworQEAgLTUyOSw3ICs1NTQsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICAjIEZpbmQgYWxsIHRoZSAuc3RkZXJyQi5leHAgZmlsZXMuICBBdCBsZWFzdCBvbmUgbXVzdCBleGlzdC4KKyAgICAgICAgIG15IEBzdGRlcnJCX2V4cHMgPSA8JG5hbWUuc3RkZXJyQi5leHAqPjsKKyAgICAgICAgICgwICE9IHNjYWxhciBAc3RkZXJyQl9leHBzKSBvciBkaWUgIkNvdWxkIG5vdCBmaW5kIGAkbmFtZS5zdGRlcnJCLmV4cConXG4iOworLSAgICAgICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZGVyckIiLCBcQHN0ZGVyckJfZXhwcyk7IAorKyAgICAgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZGVyckIiLCBcQHN0ZGVyckJfZXhwcyk7CisgICAgIH0KKyAKKyAgICAgIyBNYXliZSBkbyBwb3N0LXRlc3QgY2hlY2sKK0BAIC01NDEsNyArNTY2LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorIAkgICAgIyBGaW5kIGFsbCB0aGUgLnBvc3QuZXhwIGZpbGVzLiAgSWYgbm9uZSwgdXNlIC9kZXYvbnVsbC4KKyAJICAgIG15IEBwb3N0X2V4cHMgPSA8JG5hbWUucG9zdC5leHAqPjsKKyAJICAgIEBwb3N0X2V4cHMgPSAoICIvZGV2L251bGwiICkgaWYgKDAgPT0gc2NhbGFyIEBwb3N0X2V4cHMpOworLQkgICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInBvc3QiLCBcQHBvc3RfZXhwcyk7CisrCSAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAicG9zdCIsIFxAcG9zdF9leHBzKTsKKyAJfQorICAgICB9CisgIAorQEAgLTU1MCw2ICs1NzUsMTMgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgICAgIHByaW50KCIoY2xlYW51cCBvcGVyYXRpb24gZmFpbGVkOiAkY2xlYW51cClcbiIpOworICAgICB9CisgCisrICAgIGlmICgkeW9jdG9wdGVzdCA9PSAxKSB7CisrICAgICAgICBpZiAoJGRpZmZTdGF0dXMgPT0gMCkgeworKyAgICAgICAgICAgIHByaW50KCJQQVNTOiAkZnVsbG5hbWVcbiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmludCgiRkFJTDogJGZ1bGxuYW1lXG4iKTsKKysgICAgICAgIH0KKysgICAgfQorICAgICAkbnVtX3Rlc3RzX2RvbmUrKzsKKyB9CisgCitAQCAtNTg5LDcgKzYyMSw3IEBAIHN1YiB0ZXN0X29uZV9kaXIoJCQpCisgICAgIG15ICRmb3VuZF90ZXN0cyA9ICgwICE9IChncmVwIHsgJF8gPX4gL1wudmd0ZXN0JC8gfSBAZnMpKTsKKyAKKyAgICAgaWYgKCRmb3VuZF90ZXN0cykgeworLSAgICAgICAgcHJpbnQgIi0tIFJ1bm5pbmcgIHRlc3RzIGluICRmdWxsX2RpciAkZGFzaGVzXG4iOworKyAgICAgICAgcHJpbnQgIi0tIFJ1bm5pbmcgIHRlc3RzIGluICRmdWxsX2RpciAkZGFzaGVzXG4iIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgfQorICAgICBmb3JlYWNoIG15ICRmIChAZnMpIHsKKyAgICAgICAgIGlmICgtZCAkZikgeworQEAgLTU5OSw3ICs2MzEsNyBAQCBzdWIgdGVzdF9vbmVfZGlyKCQkKQorICAgICAgICAgfQorICAgICB9CisgICAgIGlmICgkZm91bmRfdGVzdHMpIHsKKy0gICAgICAgIHByaW50ICItLSBGaW5pc2hlZCB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIjsKKysgICAgICAgIHByaW50ICItLSBGaW5pc2hlZCB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIiBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAKKyAgICAgY2hkaXIoIi4uIik7CitAQCAtNjI1LDEwICs2NTcsMTIgQEAgc3ViIHN1bW1hcmlzZV9yZXN1bHRzCisgICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJzdGRvdXQifSwgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sic3Rkb3V0In0pLAorICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3RkZXJyQiJ9LCAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZGVyckIifSksCisgICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJzdGRvdXRCIn0sICBwbHVyYWwoJG51bV9mYWlsdXJlc3sic3Rkb3V0QiJ9KSwKKy0gICAgICAgICAgICRudW1fZmFpbHVyZXN7InBvc3QifSwgICAgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJwb3N0In0pKTsKKysgICAgICAgICAgICRudW1fZmFpbHVyZXN7InBvc3QifSwgICAgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJwb3N0In0pKQorKyAgICAgICAgICAgICAgIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAKKyAgICAgZm9yZWFjaCBteSAkZmFpbHVyZSAoQGZhaWx1cmVzKSB7CistICAgICAgICBwcmludCAiJGZhaWx1cmVcbiI7CisrICAgICAgICBwcmludCAiJGZhaWx1cmVcbiIKKysgICAgICAgICAgIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgfQorICAgICBwcmludCAiXG4iOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2VuYWJsZS5idWlsZGluZy5vbi40Lngua2VybmVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwZjJmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2VuYWJsZS5idWlsZGluZy5vbi40Lngua2VybmVsLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0VuYWJsZSBidWlsZGluZyB2YWxncmluZCBvbiBob3N0IHdpdGggNC54IGtlcm5lbC4KKworRm9yIE9wZW5FbWJlZGRlZCBidWlsZHMgd2Ugc2hvdWxkIGJlIGNoZWNraW5nIHNvbWV0aGluZyBsaWtlCitPTERFU1RfS0VSTkVMIGluc3RlYWQgb2YgYHVuYW1lIC1yYCwgYnV0IHRoaXMgaXMgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKworQnVpbGRpbmcgb24gNC54KiBjdXJyZW50bHkgZmFpbHMgd2l0aDoKKyAgY29uZmlndXJlOjU1NTY6IGNoZWNraW5nIGZvciB0aGUga2VybmVsIHZlcnNpb24KKyAgY29uZmlndXJlOjU1Nzk6IHJlc3VsdDogdW5zdXBwb3J0ZWQgKDQuMC4wLXJjMy0wMDExMS1nYWZmYjgxNykKKyAgY29uZmlndXJlOjU1ODE6IGVycm9yOiBWYWxncmluZCB3b3JrcyBvbiBrZXJuZWxzIDIuNCwgMi42CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjLm9yaWcJMjAxNS0wMy0xMyAxOToxNzowMS4yNDczMTA4NjggKzAxMDAKKysrKyB2YWxncmluZC0zLjkuMC9jb25maWd1cmUuYWMJMjAxNS0wMy0xMyAxOToxOToyNy4zODgzMTYxMDggKzAxMDAKK0BAIC0yNzYsOSArMjc2LDkgQEAKKyAgICAgICAgIGtlcm5lbD1gdW5hbWUgLXJgCisgCisgICAgICAgICBjYXNlICIke2tlcm5lbH0iIGluCistICAgICAgICAgICAgIDIuNi4qfDMuKikgCistICAgICAgICAJICAgIEFDX01TR19SRVNVTFQoWzIuNi54LzMueCBmYW1pbHkgKCR7a2VybmVsfSldKQorLSAgICAgICAgCSAgICBBQ19ERUZJTkUoW0tFUk5FTF8yXzZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIExpbnV4IDIuNi54IG9yIExpbnV4IDMueF0pCisrICAgICAgICAgICAgIDIuNi4qfDMuKnw0LiopIAorKyAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFsyLjYueC8zLngvNC54IGZhbWlseSAoJHtrZXJuZWx9KV0pCisrICAgICAgICAJICAgIEFDX0RFRklORShbS0VSTkVMXzJfNl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgTGludXggMi42Lnggb3IgTGludXggMy54IG9yIExpbnV4IDQueF0pCisgICAgICAgICAJICAgIDs7CisgCisgICAgICAgICAgICAgIDIuNC4qKSAKK0BAIC0yODgsNyArMjg4LDcgQEAKKyAKKyAgICAgICAgICAgICAgKikgCisgICAgICAgICAJICAgIEFDX01TR19SRVNVTFQoW3Vuc3VwcG9ydGVkICgke2tlcm5lbH0pXSkKKy0gICAgICAgIAkgICAgQUNfTVNHX0VSUk9SKFtWYWxncmluZCB3b3JrcyBvbiBrZXJuZWxzIDIuNCwgMi42XSkKKysgICAgICAgIAkgICAgQUNfTVNHX0VSUk9SKFtWYWxncmluZCB3b3JrcyBvbiBrZXJuZWxzIDIuNCwgMi42LCAzLngsIDQueF0pCisgICAgICAgICAJICAgIDs7CisgICAgICAgICBlc2FjCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9maXhlZC1wZXJsLXBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9maXhlZC1wZXJsLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1NGQwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaApAQCAtMCwwICsxLDUzIEBACit0aGlzIGlzIGEgdGVtcG9yYXJ5IHBhdGNoIHRvIHdvcmthcm91bmQgY3Jvc3MgY29tcGlsYXRpb24uCitvdGhlcndpc2UgQFBFUkxAIHdpbGwgYmUgcmVwbGFjZWQgdG8gcGVybC1uYXRpdmUgYmluYXJ5LAordGhpcyBjcmVhdGVzIHVudXNhYmxlIHNjcmlwdHMgYW5kIGZhaWxzIEZJTEVSREVQRU5EUyBtZWNoYW5pc20KKyhlc3AuIHJwbSkKKworYSBiZXR0ZXIgZml4IHdvdWxkIG5lZWQ6CisgMS4gY29uZmlndXJlLmFjIHNob3VsZCBkaWZmZXJlbnRpYXRlIFBFUkwgYW5kIEhPU1RQRVJMCisgMi4gb3B0aW9uYWxseSByZW1vdmUgJHtTVEFHSU5HX0RJUn0gaW4gIyEgbGluZSBiZWZvcmUgZG9faW5zdGFsbAorCis4LzMxLzIwMTAgLSBjcmVhdGVkIGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLS1naXQgYS9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluIGIvY2FjaGVncmluZC9jZ19hbm5vdGF0ZS5pbgoraW5kZXggOWRjOTU2NS4uY2M0ZWYwNSAxMDA2NDQKKy0tLSBhL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4KKysrKyBiL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBDYWNoZWdyaW5kJ3MgYW5ub3RhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgY2dfYW5ub3RhdGUuaW4gLS0tIyMKK2RpZmYgLS1naXQgYS9jYWNoZWdyaW5kL2NnX2RpZmYuaW4gYi9jYWNoZWdyaW5kL2NnX2RpZmYuaW4KK2luZGV4IDk1MTA2NmUuLjg0YzJkZGUgMTAwNjQ0CistLS0gYS9jYWNoZWdyaW5kL2NnX2RpZmYuaW4KKysrKyBiL2NhY2hlZ3JpbmQvY2dfZGlmZi5pbgorQEAgLTEsNCArMSw0IEBACistIyEgQFBFUkxACisrIyEgL3Vzci9iaW4vcGVybAorIAorICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworICMjLS0tIENhY2hlZ3JpbmQncyBkaWZmZXJlbmNlci4gICAgICAgICAgICAgICAgICAgICAgICAgY2dfZGlmZi5pbiAtLS0jIworZGlmZiAtLWdpdCBhL21hc3NpZi9tc19wcmludC5pbiBiL21hc3NpZi9tc19wcmludC5pbgoraW5kZXggZTZmZmRiZi4uZmI0NTkwNiAxMDA3NTUKKy0tLSBhL21hc3NpZi9tc19wcmludC5pbgorKysrIGIvbWFzc2lmL21zX3ByaW50LmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gTWFzc2lmJ3MgcmVzdWx0cyBwcmludGVyICAgICAgICAgICAgICAgICAgICAgICAgIG1zX3ByaW50LmluIC0tLSMjCitkaWZmIC0tZ2l0IGEvcGVyZi92Z19wZXJmLmluIGIvcGVyZi92Z19wZXJmLmluCitpbmRleCAyMTg4YTMxLi44M2FkMDI0IDEwMDY0NAorLS0tIGEvcGVyZi92Z19wZXJmLmluCisrKysgYi9wZXJmL3ZnX3BlcmYuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBWYWxncmluZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHNjcmlwdCAgICAgICAgICAgICAgICAgIHZnX3BlcmYgLS0tIyMKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZvcmNlLW5vc3RhYnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9mb3JjZS1ub3N0YWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OWRmYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9mb3JjZS1ub3N0YWJzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1N1cHByZXNzIGJ1aWxkaW5nIHB0ZXN0IGFwcHMgd2l0aCB0aGUgLWdzdGFicyBvcHRpb24KKworRm9yY2UgdGhlIGNvbmZpZ3VyZSB0ZXN0cyBmb3IgLWdzdGFicyBjb21waWxlciBzdXBwb3J0IHRvIGZhaWwgc28gdGhhdAordGhlIHJlZ3Jlc3Npb24gdGVzdHMgZG9uJ3QgdHJ5IHRvIGJ1aWxkIHdpdGggdGhlIC1nc3RhYnMgb3B0aW9uLgorT3RoZXJ3aXNlLCB0aGUgdmFsZ3JpbmQgYnVpbGQgd2hlbiBwdGVzdCBpcyBlbmFibGVkIGZhaWxzIHdpdGggdGhlCitlcnJvcjoKKyAgICBTdGFicyBkZWJ1Z2luZm8gbm90IHN1cHBvcnRlZDoKKyAgICAuLi9wYWNrYWdlL3Vzci9saWIvdmFsZ3JpbmQvcHRlc3QvbWVtY2hlY2svdGVzdHMvZGVlcF90ZW1wbGF0ZXMKKyAgICBFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBzcGxpdF9hbmRfc3RyaXBfZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtnc3RhYnMgc3VwcG9ydCBpcyBhcHByb3ByaWF0ZSB1cHN0cmVhbSwKKyAgICAgICAgYnV0IG5vdCBmb3IgdGhpcyBkaXN0cm9dCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA3NTVkZmI5Li5jYzhiNWUxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNzQzLDIyICsxNzQzLDcgQEAgQU1fQ09ORElUSU9OQUwoRFdBUkY0LCB0ZXN0IHgkYWNfaGF2ZV9kd2FyZjQgPSB4eWVzKQorIENGTEFHUz0kc2FmZV9DRkxBR1MKKyAKKyAKKy0jIGRvZXMgdGhpcyBjb21waWxlciBzdXBwb3J0IC1nc3RhYnMgPworLQorLUFDX01TR19DSEVDS0lORyhbaWYgZ2NjIGFjY2VwdHMgLWdzdGFic10pCistCistc2FmZV9DRkxBR1M9JENGTEFHUworLUNGTEFHUz0iLWdzdGFicyIKKy1BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbCistICByZXR1cm4gMDsKKy1dXSldLCBbCistYWNfaGF2ZV9nc3RhYnM9eWVzCistQUNfTVNHX1JFU1VMVChbeWVzXSkKKy1dLCBbCisgYWNfaGF2ZV9nc3RhYnM9bm8KKy1BQ19NU0dfUkVTVUxUKFtub10pCistXSkKKy1DRkxBR1M9JHNhZmVfQ0ZMQUdTCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfR1NUQUJTXSwgW3Rlc3QgeCRhY19oYXZlX2dzdGFicyA9IHh5ZXNdKQorIAorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZ2xpYmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM0OTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZ2xpYmMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorQmFja3BvcnQgb2YgZ2xpYmMgMi4xOSBhbmQgMi4yMCBhbmQgMi4yMSBzdXBwb3J0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHZhbGdyaW5kLTMuMTAuMS9jb25maWd1cmUuYWMKK0BAIC0xMDE4LDYgKzEwMTgsMzQgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKysgICAgIDIuMTkpCisrCUFDX01TR19SRVNVTFQoMi4xOSBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8xOV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xOS54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworKyAgICAgMi4yMCkKKysJQUNfTVNHX1JFU1VMVCgyLjIwIGZhbWlseSkKKysJQUNfREVGSU5FKFtHTElCQ18yXzIwXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIwLnhdKQorKwlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCTs7CisrICAgICAyLjIxKQorKwlBQ19NU0dfUkVTVUxUKDIuMjEgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMjFdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMjEueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKysgICAgIDIuMjIpCisrCUFDX01TR19SRVNVTFQoMi4yMiBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8yMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yMi54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworICAgICAgZGFyd2luKQorIAlBQ19NU0dfUkVTVUxUKERhcndpbikKKyAJQUNfREVGSU5FKFtEQVJXSU5fTElCQ10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgRGFyd2luXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3Bhc3MtbWFsdGl2ZWMtb25seS1pZi1pdC1zdXBwb3J0ZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTY3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworcjE0NTY2IHwgZmxvcmlhbiB8IDIwMTQtMDktMjQgMTc6MDI6NTQgLTA1MDAgKFdlZCwgMjQgU2VwIDIwMTQpIHwgNCBsaW5lcworCitUaGUgdGVzdGJ1Y2tldHMgbm9uZS90ZXN0cy9wcGN7MzIsNjR9IGRpZCBub3QgYnVpbGQgaW4gY2FzZSB0aGUKK3Rvb2xjaGFpbiBkaWQgbm90IHN1cHBvcnQgLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMuCitUaGlzIHNob3VsZCB3b3JrIG5vdy4gRml4ZXMgQlogIzMzODczMQorCitJbmRleDogbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjUpCisrKysgYi9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCShyZXZpc2lvbiAxNDU2NikKK0BAIC03Miw4ICs3MiwxMiBAQAorIGFsbGV4ZWNfQ0ZMQUdTCQk9ICQoQU1fQ0ZMQUdTKSBARkxBR19XX05PX05PTk5VTExACisgCisgaWYgSEFTX0FMVElWRUMKKytCVUlMRF9GTEFHX0FMVElWRUMgPSAtbWFsdGl2ZWMKKytCVUlMRF9GTEFHX0FCSV9BTFRJVkVDID0gLW1hYmk9YWx0aXZlYworIEFMVElWRUNfRkxBRyA9IC1ESEFTX0FMVElWRUMKKyBlbHNlCisrQlVJTERfRkxBR19BTFRJVkVDID0KKytCVUlMRF9GTEFHX0FCSV9BTFRJVkVDID0KKyBBTFRJVkVDX0ZMQUcgPQorIGVuZGlmCisgCitAQCAtMTAxLDExICsxMDUsMTIgQEAKKyBJU0FfMl8wN19GTEFHID0KKyBlbmRpZgorIAorLWptX2luc25zX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzIC1tYWx0aXZlYyBcCistCQkJQEZMQUdfTTMyQCAkKEFMVElWRUNfRkxBRykKKytqbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyBcCisrCQkJQEZMQUdfTTMyQCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX0FMVElWRUMpCisgCistdGVzdFZNWF9DRkxBR1MgID0gJChBTV9DRkxBR1MpIC1PIC1nIC1XYWxsIC1tYWx0aXZlYyAtbWFiaT1hbHRpdmVjIC1EQUxUSVZFQyBcCistCQkJLURHQ0NfQ09NUElMRVIgQEZMQUdfTTMyQAorK3Rlc3RWTVhfQ0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtTyAtZyAtV2FsbCAtREFMVElWRUMgXAorKwkJCS1ER0NDX0NPTVBJTEVSIEBGTEFHX00zMkAgICQoQlVJTERfRkxBR19BTFRJVkVDKSBcCisrCQkJJChCVUlMRF9GTEFHX0FCSV9BTFRJVkVDKQorIAorIHRlc3RfaXNhXzJfMDZfcGFydDFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgJChWU1hfRkxBRykgXAorIAkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19WU1gpCitJbmRleDogbm9uZS90ZXN0cy9wcGM2NC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbm9uZS90ZXN0cy9wcGM2NC9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjUpCisrKysgYi9ub25lL3Rlc3RzL3BwYzY0L01ha2VmaWxlLmFtCShyZXZpc2lvbiAxNDU2NikKK0BAIC01MCw4ICs1MCwxMCBAQAorIGFsbGV4ZWNfQ0ZMQUdTCQk9ICQoQU1fQ0ZMQUdTKSBARkxBR19XX05PX05PTk5VTExACisgCisgaWYgSEFTX0FMVElWRUMKKytCVUlMRF9GTEFHX0FMVElWRUMgPSAtbWFsdGl2ZWMKKyBBTFRJVkVDX0ZMQUcgPSAtREhBU19BTFRJVkVDCisgZWxzZQorK0JVSUxEX0ZMQUdfQUxUSVZFQyA9CisgQUxUSVZFQ19GTEFHID0KKyBlbmRpZgorIAorQEAgLTg4LDggKzkwLDggQEAKKyB0ZXN0X2lzYV8yXzA2X3BhcnQzX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzICQoVlNYX0ZMQUcpIFwKKyAJCQlARkxBR19NNjRAICQoQUxUSVZFQ19GTEFHKSAkKEJVSUxEX0ZMQUdfVlNYKQorIAorLWptX2luc25zX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzIC1tYWx0aXZlYyBcCistCQkJQEZMQUdfTTY0QCAkKEFMVElWRUNfRkxBRykKKytqbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyBcCisrCQkJQEZMQUdfTTY0QCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX0FMVElWRUMpCisgCisgdGVzdF9kZnAxX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzICQoREZQX0ZMQUcpIFwKKyAJCQlARkxBR19NNjRAICQoQlVJTERfRkxBR1NfREZQKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTlhYjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorUmVtb3ZlIGFybSB0ZXN0cyB0aGF0IGRvbid0IGNvbXBpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NvcnJlY3RzIHRoZSBvcmlnaW5hbCBjb21taXQgZm9yIHRoZSBwYXRjaCB0aGF0IHJlbW92ZWQgQVJNIHB0ZXN0IENGTEFHUworc2V0dGluZ3MuIFNpbmNlIHRoZSBmbGFncyBjb3VsZCBiZSBzZXQgYnkgYSB1c2VyLCB0aGUgZmxhZ3Mgc2hvdWxkCitiZSBrZXB0IGluIHBsYWNlIGR1cmluZyBjb21waWxhdGlvbi4gIEJ5IGtlZXBpbmcgdGhlIG9yaWdpbmFsIHVwLXN0cmVhbQorQ0ZMQUdTIGZvciB0aGUgdGVzdHMsIHRoZW4gYWRkaXRpb25hbCB0ZXN0cyBzdWNjZXNzZnVsbHkgY29tcGlsZQorZm9yIGFsbCB0ZXN0ZWQgQVJNIHR1bmluZ3MuCisKK0hvd2V2ZXIsIHRoZXJlIHdlcmUgc3RpbGwgdHdvIHRlc3RzIGxpc3RlZCBiZWxvdyB0aGF0IGRpZCBub3QgY29tcGlsZQorZm9yIGFueSBiZWFnbGVib25lIHR1bmluZyB0aGF0IGlzIHZhbGlkIGZvciB2YWxncmluZC4gV2l0aCB0aGUgdXBkYXRlZAorcGF0Y2gsIHRoZSBzZXQgb2YgZXhjbHVkZWQgQVJNIHB0ZXN0cyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBidWlsZAorZmFpbHVyZXMgYXJlOgorICBpbnRkaXYgLSBmYWlscyBmb3IgYWxsIGJlYWdsZWJvbmUgdHVuaW5ncyB3aXRoIDIgZXJyb3JzOgorICB7c3RhbmRhcmQgaW5wdXR9Oig0MCBvciA0MSk6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3QKKyAgICAgICBzdXBwb3J0IFRodW1iIG1vZGUgYHVkaXYgcjMscjkscjEwJworICB7c3RhbmRhcmQgaW5wdXR9Oig3MiBvciA3Myk6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3QKKyAgICAgICBzdXBwb3J0IFRodW1iIG1vZGUgYHNkaXYgcjMscjkscjEwJworCisgIHZjdnRfZml4ZWRfZmxvYXRfVkZQIC0gZmFpbHMgZm9yIGFsbCBiZWFnbGVib25lIHR1bmluZ3MgaW4gb25lIG9mCisgIHR3byB3YXlzOgorICAgIHdpdGggbmVvbiB0dW5pbmcgKC1tZnB1PW5lb24pIGZhaWxzIHdpdGggSW50ZXJuYWwgQ29tcGlsZXIgRXJyb3IKKyAgICB3aXRob3V0IG5lb24gdHVuaW5nIGZhaWxzIHdpdGggMyBlcnJvcnM6CisgICAge3N0YW5kYXJkIGlucHV0fTozMzogRXJyb3I6IHNlbGVjdGVkIEZQVSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBpbnN0cnVjdGlvbiAtLSBgdmN2dC5mMzIuczMyIHMxNSxzMTUsIzEnCisgICAge3N0YW5kYXJkIGlucHV0fTo1ODogRXJyb3I6IHNlbGVjdGVkIEZQVSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBpbnN0cnVjdGlvbiAtLSBgdmN2dC5mMzIuczMyIHMxNSxzMTUsIzMyJworICAgIHtzdGFuZGFyZCBpbnB1dH06MTM2OiBFcnJvcjogc2VsZWN0ZWQgRlBVIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgIGluc3RydWN0aW9uIC0tIGB2Y3Z0LmYzMi51MzIgczE1LHMxNSwjMScKKworQWZ0ZXIgYXBwbHlpbmcgdGhpcyBjb21taXQsIHRoZSB2YWxncmluZCBBUk0gcHRlc3RzIGNvbXBpbGUgd2l0aG91dAorZXJyb3JzIGZvciB0dW5pbmdzOgorICBhcm12N1t0XVtoZl1bYl1bLW5lb25dIGNvcnRleGE4W3RdW2hmXVstbmVvbl0KK3doZXJlIHRoZSB0dW5pbmcgW29wdGlvbl0gd2FzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgYm90aCB3aXRoCithbmQgd2l0aG91dCB0aGUgJ29wdGlvbicsIGFuZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFsbCBvdGhlciBvcHRpb25zLgorCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMS9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMS5vcmlnL25vbmUvdGVzdHMvYXJtL01ha2VmaWxlLmFtCTIwMTUtMDUtMTkgMTU6MTE6NTkuMjI0ODQyOTI3IC0wNTAwCisrKysgdmFsZ3JpbmQtMy4xMC4xL25vbmUvdGVzdHMvYXJtL01ha2VmaWxlLmFtCTIwMTUtMDUtMTkgMTU6MTQ6MjAuODA4ODQ3MDI4IC0wNTAwCitAQCAtMTcsOSArMTcsMTMgQEAKKyAJdmZwLnN0ZG91dC5leHAgdmZwLnN0ZGVyci5leHAgdmZwLnZndGVzdCBcCisgCXZmcHY0X2ZtYS5zdGRvdXQuZXhwIHZmcHY0X2ZtYS5zdGRlcnIuZXhwIHZmcHY0X2ZtYS52Z3Rlc3QKKyAKKysjIFJlbW92ZSB0aGUgZm9sbG93aW5nIHRlc3RzIHdoaWNoIGNhdXNlIGNvbXBpbGVyIGVycm9ycyBmb3IgYWxsIHR1bmluZ3MKKysjICBhdmFpbGFibGUgZm9yIGJlYWdsZSBib25lIChzZWUgcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoKToKKysjCWludGRpdgorKyMJdmN2dF9maXhlZF9mbG9hdF9WRlAKKysKKyBjaGVja19QUk9HUkFNUyA9IFwKKyAJYWxsZXhlYyBcCistCWludGRpdiBcCisgCWxkcnQgXAorIAlsZHJ0X2FybSBcCisgCW5lb24xMjggXAorQEAgLTI3LDcgKzMxLDYgQEAKKyAJdjZpbnRBUk0gXAorIAl2NmludFRodW1iIFwKKyAJdjZtZWRpYSBcCistCXZjdnRfZml4ZWRfZmxvYXRfVkZQIFwKKyAJdmZwIFwKKyAJdmZwdjRfZm1hCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2NDBmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaApAQCAtMCwwICsxLDc1IEBACitSZW1vdmUgdGVzdCBhcHBzIG5vdCBidWlsZGluZyB3aXRoIHBwYyBhbmQgUFRFU1QKKworRm9yIG1wYzgzMTYtcmRiIGluIG5vbmUvdGVzdHMvcHBjMzIsIHRoZSBvZSBjb21waWxlciBvcHRpb25zIGFyZQoraW5jb25zaXN0ZW50IHdpdGggdGhlIGltcG9zZWQgdGVzdCBjb21waWxlciBvcHRpb25zIGdlbmVyYXRpbmcgZXJyb3JzCithcyBmb2xsb3dzOgordGVzdF9pc2FfMl8wN19wYXJ0MQordGVzdF9pc2FfMl8wN19wYXJ0MgordGVzdF90bQordGVzdF90b3VjaF90bQorICAgIDogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gJy1taHRtJworCitqbS1pbnNucwordGVzdFZNWAorICAgIDogQWx0aVZlYyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgdGFyZ2V0CisKK0ZvciB0aGUgZm9sbG93aW5nIHRlc3RzLCB0aGVpciBpbmxpbmUgYXNzZW1ibGVyIGlzIGluY29uc2lzdGVudCB3aXRoCit0aGUgcHBjZTMwMGMzIHZhcmlhbnQ6Cityb3VuZC5jOjM5MworcG93ZXI1K19yb3VuZC5jOjk4CisgICAgOiBpbXBvc3NpYmxlIGNvbnN0cmFpbnQgaW4gJ2FzbScKKworRm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMsIHdpdGggYm90aCBtcGM4MzE2LXJkYiBhbmQgd2l0aCBxZW11cHBjIGJzcCwKK3RoZSBpbmxpbmUgYXNzZW1iZXIgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIG9lIGNvbXBpbGVyIG1hY2hpbmUKK3R1bmluZzoKK0luIG1lbWNoZWNrL3Rlc3RzL3BwYzMyCisgcG93ZXJfSVNBMl8wNS5jOjU2CitJbiBub25lL3Rlc3RzL3BwYzMyCisgdGVzdF9kZnAxLmM6ODUKKyB0ZXN0X2RmcDIuYzoxNjAKKyB0ZXN0X2RmcDMuYzoxNTcKKyB0ZXN0X2RmcDQuYzo3MworIHRlc3RfZGZwNS5jOjczCisgICAgOiBpbXBvc3NpYmxlIGNvbnN0cmFpbnQgaW4gJ2FzbScKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4wL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy4xMC4wLm9yaWcvbWVtY2hlY2svdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKysrKyB2YWxncmluZC0zLjEwLjAvbWVtY2hlY2svdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KK0BAIC03LDggKzcsNyBAQCBFWFRSQV9ESVNUID0gJChub2luc3RfU0NSSVBUUykgXAorIAlwb3dlcl9JU0EyXzA1LnN0ZGVyci5leHAgcG93ZXJfSVNBMl8wNS5zdGRvdXQuZXhwIHBvd2VyX0lTQTJfMDUudmd0ZXN0IFwKKyAJcG93ZXJfSVNBMl8wNS5zdGRvdXQuZXhwX1dpdGhvdXRfRlBQTworIAorLWNoZWNrX1BST0dSQU1TID0gXAorLQlwb3dlcl9JU0EyXzA1CisrY2hlY2tfUFJPR1JBTVMgPSAKKyAKKyBwb3dlcl9JU0EyXzA1X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFdFUlJPUikgLVdpbmxpbmUgLVdhbGwgLVdzaGFkb3cgLWcgXAorIAkJLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgQEZMQUdfTTMyQAorSW5kZXg6IHZhbGdyaW5kLTMuMTAuMC9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy4xMC4wLm9yaWcvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorKysrIHZhbGdyaW5kLTMuMTAuMC9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCitAQCAtNTIsMTYgKzUyLDggQEAgY2hlY2tfUFJPR1JBTVMgPSBcCisgCWFsbGV4ZWMgXAorIAlidWcxMjkzOTAtcHBjMzIgXAorIAlidWcxMzkwNTAtcHBjMzIgXAorLQlsZHN0cmV2IGxzdyBqbS1pbnNucyBtZnRvY3JmIG1jcmZzIHJvdW5kIHRlc3RfZnggdGVzdF9neCBcCistCXRlc3RWTVggdHdpIHR3IHhsY19kYmxfdTMyIHBvd2VyNStfcm91bmQgcG93ZXI2X2JjbXAgXAorLQl0ZXN0X2lzYV8yXzA2X3BhcnQxIFwKKy0JdGVzdF9pc2FfMl8wNl9wYXJ0MiBcCistCXRlc3RfaXNhXzJfMDZfcGFydDMgXAorLQl0ZXN0X2RmcDEgdGVzdF9kZnAyIHRlc3RfZGZwMyB0ZXN0X2RmcDQgdGVzdF9kZnA1IFwKKy0JdGVzdF9pc2FfMl8wN19wYXJ0MSBcCistCXRlc3RfaXNhXzJfMDdfcGFydDIgXAorLQl0ZXN0X3RtIFwKKy0JdGVzdF90b3VjaF90bSBcCisrCWxkc3RyZXYgbHN3IG1mdG9jcmYgbWNyZnMgdGVzdF9meCB0ZXN0X2d4IFwKKysJdHdpIHR3IHhsY19kYmxfdTMyIHBvd2VyNl9iY21wIFwKKyAJbGRzdF9tdWx0aXBsZSBcCisgCWRhdGEtY2FjaGUtaW5zdHJ1Y3Rpb25zCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlhNzJlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdApAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKworIyBydW4tcHRlc3QgLSAncHRlc3QnIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc2hlbGwgc2NyaXB0IHRoYXQKKyMgICB3cmFwcyB0aGUgdmFsZ3JpbmQgcmVncmVzc2lvbiBzY3JpcHQgdmdfcmVndGVzdC4gCisjICAgTXVzdCBiZSBydW4gaW4gdGhlIC91c3IvbGliL3ZhbGdyaW5kL3B0ZXN0IGRpcmVjdG9yeS4gCisjCisjIERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitWQUxHUklORExJQj1AbGliZGlyQC92YWxncmluZAordGVzdHMvdmdfcmVndGVzdCAtLWFsbCBcCisgICAgLS12YWxncmluZD0vdXNyL2Jpbi92YWxncmluZCAtLXZhbGdyaW5kLWxpYj0kVkFMR1JJTkRMSUIgXAorCS0teW9jdG8tcHRlc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3NlcGJ1aWxkZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiMGVmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMjM1IEBACitGaXggb3V0IG9mIHRyZWUgYnVpbGRzLiBUaGUgcGF0aHMgdG8gdGhlc2UgZmlsZXMgbmVlZCB0byBiZSBmdWxseSBzcGVjaWZpZWQgaW4KK3RoZSBvdXQgb2YgdHJlZSBidWlsZCBjYXNlLiBnbGliYy0yLlguc3VwcCBpcyBhIGdlbmVyYXRlZCBmaWxlIHNvIHRoZSBmdWxsIHBhdGgKK2lzIGRlbGliZXJhdGVseSBub3Qgc3BlY2lmaWVkIGluIHRoYXQgY2FzZS4KKworUlAgMjAxMy8wMy8yMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuOS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjCitAQCAtMzI1LDI2ICszMjUsMjYgQEAgY2FzZSAiJHtob3N0X29zfSIgaW4KKyAJICAgICA5LiopCisgCQkgIEFDX01TR19SRVNVTFQoW0RhcndpbiA5LnggKCR7a2VybmVsfSkgLyBNYWMgT1MgWCAxMC41IExlb3BhcmRdKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzUsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW45LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjktZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luOS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjktZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworIAkgICAgIDEwLiopCisgCQkgIEFDX01TR19SRVNVTFQoW0RhcndpbiAxMC54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuNiBTbm93IExlb3BhcmRdKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzYsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMS4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTEueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjcgTGlvbl0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfNywgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjExLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjExLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworIAkgICAgIDEyLiopCisgCQkgIEFDX01TR19SRVNVTFQoW0RhcndpbiAxMi54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuOCBNb3VudGFpbiBMaW9uXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF84LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCQkgIDs7CisgICAgICAgICAgICAgICopIAorIAkJICBBQ19NU0dfUkVTVUxUKFt1bnN1cHBvcnRlZCAoJHtrZXJuZWx9KV0pCitAQCAtNzk5LDEyNCArNzk5LDEyNCBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgorICAgICAgMi4yKQorIAlBQ19NU0dfUkVTVUxUKDIuMiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8yXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4yLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMi1MaW51eFRocmVhZHMtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMi1MaW51eFRocmVhZHMtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgMi4zKQorIAlBQ19NU0dfUkVTVUxUKDIuMyBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8zXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjMueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAKKyAgICAgIDIuNCkKKyAJQUNfTVNHX1JFU1VMVCgyLjQgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfNF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi40LnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuNC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuNC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAyLjUpCisgCUFDX01TR19SRVNVTFQoMi41IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzVdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNS54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjUuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjUuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi42KQorIAlBQ19NU0dfUkVTVUxUKDIuNiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl82XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjYueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi42LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi42LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuNykKKyAJQUNfTVNHX1JFU1VMVCgyLjcgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfN10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi43LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjgpCisgCUFDX01TR19SRVNVTFQoMi44IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzhdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuOC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi45KQorIAlBQ19NU0dfUkVTVUxUKDIuOSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl85XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjkueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTApCisgCUFDX01TR19SRVNVTFQoMi4xMCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xMSkKKyAJQUNfTVNHX1JFU1VMVCgyLjExIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzExXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjExLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgICAgICAgICA7OworICAgICAgMi4xMikKKyAJQUNfTVNHX1JFU1VMVCgyLjEyIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzEyXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjEyLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjEzKQorIAlBQ19NU0dfUkVTVUxUKDIuMTMgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTMueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTQpCisgCUFDX01TR19SRVNVTFQoMi4xNCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xNF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xNSkKKyAJQUNfTVNHX1JFU1VMVCgyLjE1IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE1XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE1LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE2KQorIAlBQ19NU0dfUkVTVUxUKDIuMTYgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTYueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTcpCisgCUFDX01TR19SRVNVTFQoMi4xNyBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xN10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNy54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xOCkKKyAJQUNfTVNHX1JFU1VMVCgyLjE4IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE4XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE4LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICBkYXJ3aW4pCisgCUFDX01TR19SRVNVTFQoRGFyd2luKQorQEAgLTkyNiw3ICs5MjYsNyBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgorICAgICAgYmlvbmljKQorIAlBQ19NU0dfUkVTVUxUKEJpb25pYykKKyAJQUNfREVGSU5FKFtCSU9OSUNfTElCQ10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgQmlvbmljXSkKKy0JREVGQVVMVF9TVVBQPSJiaW9uaWMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9iaW9uaWMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAqKQorQEAgLTk0MywxMSArOTQzLDExIEBAIEFDX1NVQlNUKEdMSUJDX1ZFUlNJT04pCisgIyBhdHRlbXB0IHRvIGRldGVjdCB3aGV0aGVyIHN1Y2ggbGlicmFyaWVzIGFyZSBpbnN0YWxsZWQgb24gdGhlCisgIyBidWlsZCBtYWNoaW5lIChvciBldmVuIGlmIGFueSBYIGZhY2lsaXRpZXMgYXJlIHByZXNlbnQpOyBqdXN0CisgIyBhZGQgdGhlIHN1cHByZXNzaW9ucyBhbnRpZGlzaXJyZWdhcmRsZXNzLgorLURFRkFVTFRfU1VQUD0ieGZyZWUtNC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy1ERUZBVUxUX1NVUFA9InhmcmVlLTMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrREVGQVVMVF9TVVBQPSIkc3JjZGlyL3hmcmVlLTQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrREVGQVVMVF9TVVBQPSIkc3JjZGlyL3hmcmVlLTMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCisgIyBBZGQgZ2xpYmMgYW5kIFgxMSBzdXBwcmVzc2lvbnMgZm9yIGV4cC1zZ2NoZWNrCistREVGQVVMVF9TVVBQPSJleHAtc2djaGVjay5zdXBwICR7REVGQVVMVF9TVVBQfSIKKytERUZBVUxUX1NVUFA9IiRzcmNkaXIvZXhwLXNnY2hlY2suc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJlOWNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBjb25maWddCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTI4MCw3ICsyODAsNiBAQCB0aHJlYWRlZF9mb3JrX0xEQURECT0gLWxwdGhyZWFkCisgdGhyZWFkZWRlcnJub19MREFERAk9IC1scHRocmVhZAorIHRsc19TT1VSQ0VTCQk9IHRscy5jIHRsczIuYworIHRsc19ERVBFTkRFTkNJRVMJPSB0bHMuc28gdGxzMi5zbworLXRsc19MREZMQUdTCQk9IC1XbCwtcnBhdGgsJChhYnNfdG9wX2J1aWxkZGlyKS9ub25lL3Rlc3RzCisgdGxzX0xEQURECQk9IHRscy5zbyB0bHMyLnNvIC1scHRocmVhZAorIHRsc19zb19TT1VSQ0VTCQk9IHRsc19zby5jCisgdGxzX3NvX0RFUEVOREVOQ0lFUwk9IHRsczIuc28KK0BAIC0yODgsNyArMjg3LDcgQEAgaWYgVkdDT05GX09TX0lTX0RBUldJTgorICB0bHNfc29fTERGTEFHUwkJPSAtZHluYW1pYyAtZHluYW1pY2xpYiAtYWxsX2xvYWQgLWZwaWMKKyAgdGxzX3NvX0xEQURECQk9IGBwd2RgL3RsczIuc28KKyBlbHNlCistIHRsc19zb19MREZMQUdTCQk9IC1XbCwtcnBhdGgsJChhYnNfdG9wX2J1aWxkZGlyKS9ub25lL3Rlc3RzIC1zaGFyZWQgLWZQSUMKKysgdGxzX3NvX0xERkxBR1MJCT0gLXNoYXJlZCAtZlBJQworICB0bHNfc29fTERBREQJCT0gdGxzMi5zbworIGVuZGlmCisgdGxzX3NvX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgLWZQSUMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmJhOTc5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMC4xLmJiCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIlZhbGdyaW5kIG1lbW9yeSBkZWJ1Z2dlciBhbmQgaW5zdHJ1bWVudGF0aW9uIGZyYW1ld29yayIKK0hPTUVQQUdFID0gImh0dHA6Ly92YWxncmluZC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vdmFsZ3JpbmQub3JnL3N1cHBvcnQvYnVnX3JlcG9ydHMuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNDYwODIxNjdhMzE0ZDc4NWQwMTJhMjQ0NzQ4ZDgwMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3B1Yl90b29sX2Jhc2ljcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PWU3MDcxOTI5YTUwZDRiMGZjMjdhMzAxNGIzMTViMGY3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvdmFsZ3JpbmQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTU2O21kNT05MmRmOGExYmRlNTZmZTJhZjcwOTMxZmY1NWY2NjIyZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkRPQ1M7bWQ1PThmZGViNWFiZGIyMzVhMDhlNzY4MzVmOGYzMjYwMjE1IgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIgorREVQRU5EUyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcke1gxMURFUEVORFN9JywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnYm9vc3QnLCAnJywgZCl9IFwKKyAgICAgICAgIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudmFsZ3JpbmQub3JnL2Rvd25sb2Fkcy92YWxncmluZC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9BZGRlZC1zdXBwb3J0LWZvci1QUEMtaW5zdHJ1Y3Rpb25zLW1mYXRidS1tZmF0YmwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VwYnVpbGRmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZm9yY2Utbm9zdGFicy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXBwYy10ZXN0cy1mYWlsaW5nLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS12YWxncmluZC1FbmFibGUtcnRfc2lncGVuZGluZy1zeXNjYWxsLW9uLXBwYzY0LWxpbnV4LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MGRkYWU5NjJiYzc5ZTdjOTVjZmM0NjY3MjQ1NzA3ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYTI1M2RjMjZkZGI2NjFiNjI2OWRmNTgxNDRlZmY2MDdlYTNmNzZhOWJjZmU1NzRiMGM3NzI2ZTFkZmNiOTk3IgorCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0fG1pcHN8cG93ZXJwY3xwb3dlcnBjNjQpLiotbGludXgnCitDT01QQVRJQkxFX0hPU1RfYXJtdjdhID0gJ2FybS4qLWxpbnV4JworCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRscyAtLXdpdGhvdXQtbXBpY2MiCitFWFRSQV9PRUNPTkZfYXJtdjdhID0gIi0tZW5hYmxlLXRscyAtaG9zdD1hcm12Ny1ub25lLWxpbnV4LWdudWVhYmkgLS13aXRob3V0LW1waWNjIgorRVhUUkFfT0VDT05GICs9ICIke0BbJy0tZW5hYmxlLW9ubHkzMmJpdCcsJy0tZW5hYmxlLW9ubHk2NGJpdCddW2QuZ2V0VmFyKCdTSVRFSU5GT19CSVRTJywgVHJ1ZSkgIT0gJzMyJ119IgorRVhUUkFfT0VNQUtFID0gIi13IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtbSA2NDQgJHtCfS9kZWZhdWx0LnN1cHAgJHtEfS8ke2xpYmRpcn0vdmFsZ3JpbmQvCit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke1BOfS8qLy5kZWJ1Zy8qIgorCisjIHZhbGdyaW5kIG5lZWRzIGRlYnVnIGluZm9ybWF0aW9uIGZvciBsZC5zbyBhdCBydW50aW1lIGluIG9yZGVyIHRvCisjIHJlZGlyZWN0IGZ1bmN0aW9ucyBsaWtlIHN0cmxlbi4KK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke1RDTElCQ30tZGJnIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHNlZCBwZXJsIGdsaWJjLXV0aWxzIHBlcmwtbW9kdWxlLWZpbGUtZ2xvYiIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIGNoZWNrIENGTEFHUz0iJHtDRkxBR1N9IC1PMCIgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1PMCIKK30KKworCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgIGNobW9kICt4ICR7Qn0vdGVzdHMvdmdfcmVndGVzdAorCisgICAgIyBUaGUgdGVzdCBhcHBsaWNhdGlvbiBiaW5hcmllcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLgorICAgICMgR3JhYiB0aGVtIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAjCisgICAgIyBUaGUgcmVncmVzc2lvbiB0ZXN0cyByZXF1aXJlIHNjcmlwdHMgYW5kIGRhdGEgZmlsZXMgdGhhdCBhcmUgbm90CisgICAgIyBjb3BpZWQgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gIFRoZXkgbXVzdCBiZSBjb3BpZWQgZnJvbSB0aGUKKyAgICAjIHNvdXJjZSBkaXJlY3RvcnkuIAorICAgIHNhdmVkX2Rpcj0kUFdECisgICAgZm9yIHBhcmVudF9kaXIgaW4gJHtTfSAke0J9IDsgZG8KKyAgICAgICAgY2QgJHBhcmVudF9kaXIKKworICAgICAgICAjIGV4Y2x1ZGUgc2hlbGwgb3IgdGhlIHBhY2thZ2Ugd29uJ3QgaW5zdGFsbAorICAgICAgICBybSAtcmYgbm9uZS90ZXN0cy9zaGVsbCogMj4vZGV2L251bGwKKworICAgICAgICBzdWJkaXJzPSJ0ZXN0cyBjYWNoZWdyaW5kL3Rlc3RzIGNhbGxncmluZC90ZXN0cyBkcmQvdGVzdHMgaGVsZ3JpbmQvdGVzdHMgbWFzc2lmL3Rlc3RzIG1lbWNoZWNrL3Rlc3RzIG5vbmUvdGVzdHMiCisKKyAgICAgICAgIyBHZXQgdGhlIHZnIHRlc3Qgc2NyaXB0cywgZmlsdGVycywgYW5kIGV4cGVjdGVkIGZpbGVzCisgICAgICAgIGZvciBkaXIgaW4gJHN1YmRpcnMgOyBkbworICAgICAgICAgICAgZmluZCAkZGlyIHwgY3BpbyAtcHZkdSAke0R9JHtQVEVTVF9QQVRIfQorICAgICAgICBkb25lCisgICAgICAgIGNkICRzYXZlZF9kaXIKKyAgICBkb25lCisKKyAgICAjIGNsZWFuIG91dCBidWlsZCBhcnRpZmFjdHMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBycG0KKyAgICBmaW5kICR7RH0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgIFwoIC1uYW1lICJNYWtlZmlsZSoiIFwKKyAgICAgICAgLW8gLW5hbWUgIioubyIgXAorICAgICAgICAtbyAtbmFtZSAiKi5jIiBcCisgICAgICAgIC1vIC1uYW1lICIqLlMiIFwKKyAgICAgICAgLW8gLW5hbWUgIiouaCIgXCkgXAorICAgICAgICAtZXhlYyBybSB7fSBcOworCisgICAgIyBuZWVkZWQgYnkgbWFzc2lmIHRlc3RzCisgICAgY3AgJHtCfS9tYXNzaWYvbXNfcHJpbnQgJHtEfSR7UFRFU1RfUEFUSH0vbWFzc2lmL21zX3ByaW50CisKKyAgICAjIGhhbmRsZSBtdWx0aWxpYgorICAgIHNlZCAtaSBzOkBsaWJkaXJAOiR7bGliZGlyfTpnICR7RH0ke1BURVNUX1BBVEh9L3J1bi1wdGVzdAorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by9maWxlcy9jYXRhbG9nLnhtbCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL2ZpbGVzL2NhdGFsb2cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODgzM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by9maWxlcy9jYXRhbG9nLnhtbApAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgQ0FMUyBUYWJsZSBNb2RlbCBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQm9vayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2siIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14c2wueG1sIi8+Cis8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iLi9kb2Nib29rLXhzbC54bWwiLz4KKzwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvLTAuMC4yNi9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvLTAuMC4yNi9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU0N2E2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG8tMC4wLjI2L2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2NvbmZpZ3VyZS5pbjogZHJvcCB0aGUgdGVzdCBvZiB4bWxsaW50IGFuZCB4c2x0cHJvYworCitUaGUgdGVzdCBpcyB1bm5lY2Vzc2FyeSwgdGhlIHhtbGxpbnQgYW5kIHhzbHRwcm9jIHdlcmUgZXhwbGljaXRseQorYWRkZWQgdG8gUkRFUEVORFMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC00MiwxMCArNDIsMTAgQEAgQUNfQVJHX1ZBUihbTE9DQUxFXSwgW05hbWUgYW5kIHBhdGggb2YgdGhlIGBsb2NhbGUnIHByb2dyYW0uXSkKKyBBQ19QQVRIX1BST0coW0xPQ0FMRV0sIFtsb2NhbGVdLCBbbG9jYWxlXSkKKyAKKyBBQ19BUkdfVkFSKFtYTUxMSU5UXSwgW05hbWUgYW5kIHBhdGggb2YgdGhlIGB4bWxsaW50JyBwcm9ncmFtLl0pCistQUNfUEFUSF9QUk9HKFtYTUxMSU5UXSwgW3htbGxpbnRdLCBbeG1sbGludF0pCisrZG5sIEFDX1BBVEhfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorIAorIEFDX0FSR19WQVIoW1hTTFRQUk9DXSwgW05hbWUgYW5kIHBhdGggb2YgdGhlIGB4c2x0cHJvYycgcHJvZ3JhbS5dKQorLUFDX1BBVEhfUFJPRyhbWFNMVFBST0NdLCBbeHNsdHByb2NdLCBbeHNsdHByb2NdKQorK2RubCBBQ19QQVRIX1BST0coW1hTTFRQUk9DXSwgW3hzbHRwcm9jXSwgW3hzbHRwcm9jXSkKKyAKKyBkbmwKKyBkbmwgdG9vbGNoYWlucworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2EwMTgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI2LmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiQSBzaGVsbC1zY3JpcHQgdG9vbCBmb3IgY29udmVydGluZyBYTUwgZmlsZXMgdG8gdmFyaW91cyBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3htbHRvLyIKK1NFQ1RJT04gPSAiZG9jcy94bWx0byIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy94L20veG1sdG8veG1sdG8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NhdGFsb2cueG1sIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2NhOGJlNzg3YmEwMWUwMGM2MThjYjM5MGM5ODhiOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZmQ4ZDJhMjYwNzdiZTFkNTU2NmRmZTIyZGQ2NjA5OWFlNGY0NjAwZGVhOTdkNmUxMTNhMmNjNWI4NzA4OTc3IgorCitpbmhlcml0IGF1dG90b29scworCisjIHhtbHRvIG5lZWRzIGdldG9wdC94bWxsaW50L3hzbHRwcm9jL2Jhc2ggYXQgcnVudGltZQorUkRFUEVORFNfJHtQTn0gPSAiZG9jYm9vay14bWwtZHRkNCBcCisgICAgICAgICAgICAgICAgICBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cyBcCisgICAgICAgICAgICAgICAgICB1dGlsLWxpbnV4IFwKKyAgICAgICAgICAgICAgICAgIGxpYnhtbDIgXAorICAgICAgICAgICAgICAgICAgYmFzaCBcCisiCitSREVQRU5EU18ke1BOfV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgICAgICAgICBsaWJ4c2x0LWJpbiBcCisiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiBYTUxMSU5UPXhtbGxpbnQgWFNMVFBST0M9eHNsdHByb2MiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veG1sLworICAgIGluc3RhbGwgLW0gNzU1ICAke1dPUktESVJ9L2NhdGFsb2cueG1sICR7RH0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3htbHRvIFhNTF9DQVRBTE9HX0ZJTEVTPSR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2cueG1sCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbcmRlcHRhc2tdID0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy95YXNtL3lhc21fMS4zLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy95YXNtL3lhc21fMS4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3MDJlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3lhc20veWFzbV8xLjMuMC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIng4NiAoU1NFKSBhc3NlbWJsZXIgc3VwcG9ydGluZyBOQVNNIGFuZCBHQVMtc3ludGF4ZXMiCitMSUNFTlNFID0gIkJTRCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudG9ydGFsbC5uZXQvcHJvamVjdHMveWFzbS8iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWExMmQ4OTAzNTA4ZmI2YmZkNDlkOGQ4MmM2MTcwZGQ5IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudG9ydGFsbC5uZXQvcHJvamVjdHMveWFzbS9yZWxlYXNlcy8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzllNTg2NzUxZmY3ODliMzRiMWYyMWQ1NzJkOTZhZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZGNlNjYwMWI0OTVmNWIzZDQ1YjU5ZjdkMjQ5MmEzNDBlZTdlODRiNWJlY2ExN2U0OGY4NjI1MDJiZDU2MDNmIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvemlzb2ZzLXRvb2xzL3ppc29mcy10b29scy1uYXRpdmVfMS4wLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLW5hdGl2ZV8xLjAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFjMDU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvemlzb2ZzLXRvb2xzL3ppc29mcy10b29scy1uYXRpdmVfMS4wLjguYmIKQEAgLTAsMCArMSwyMCBAQAorIyB6aXNvZnMtdG9vbHMtbmF0aXZlIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIGNyZWF0aW5nIGNvbXByZXNzZWQgQ0QtUk9NIGZpbGVzeXN0ZW1zIgorSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVjb2RlLmNvbS9wcm9qZWN0cy96aXNvZnMtdG9vbHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiemxpYi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtJHtQVn0udGFyLmJ6Mi8yZDBlZDhjOWExZjYwYjQ1Zjk0OWIxMzZmOWJlMWY2Yy96aXNvZnMtdG9vbHMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjJkMGVkOGM5YTFmNjBiNDVmOTQ5YjEzNmY5YmUxZjZjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFlNGU1M2U0OTE0OTM0ZDQxNjYwMjQ4ZmI1OWQzYzg3NjFmMWYxZmQxODBkNWVjOTkzYzE3ZGRiM2FmZDA0ZjMiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExST09UPSR7RH0gYmluZGlyPSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhZTI4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3ZjgxMWQ5YzRlYmM5NDQ0ZTYxM2UyNTFjMzFkNmJmNTM3YTI0ZGMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTY6MzU6MzAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIGdsaWJjIGFzc3VtcHRpb24KKworZ2xpYmMgdGltZS5oIGhlYWRlciBoYXMgYW4gdW5kb2N1bWVudGVkIF9faXNsZWFwIG1hY3JvCit0aGF0IHdlIGFyZSB1c2luZyBhbmYgbXVzbCBpcyBtaXNzaW5nIGl0LgorU2luY2UgaXQgaXMgdW5kb2N1bWVudGVkICYgZG9lcyBub3QgYXBwZWFyCitvbiBhbnkgb3RoZXIgbGliYywgc3RvcCB1c2luZyBpdCBhbmQganVzdCBkZWZpbmUgdGhlIG1hY3JvIGluCitsb2NhbGx5ICBpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHBhcnNldGltZS55IHwgMTEgKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcGFyc2V0aW1lLnkgYi9wYXJzZXRpbWUueQoraW5kZXggNzAwNWU4OC4uMzI0ZTZkMyAxMDA2NDQKKy0tLSBhL3BhcnNldGltZS55CisrKysgYi9wYXJzZXRpbWUueQorQEAgLTgsNiArOCw5IEBACisgCisgI2RlZmluZSBZWURFQlVHIDEKKyAKKysjZGVmaW5lIGlzX2xlYXBfeWVhcih5KSBcCisrICAgICgoeSkgJSA0ID09IDAgJiYgKCh5KSAlIDEwMCAhPSAwIHx8ICh5KSAlIDQwMCA9PSAwKSkKKysKKyBzdHJ1Y3QgdG0gZXhlY3RtOworIHN0YXRpYyBpbnQgaXNnbXQ7Cisgc3RhdGljIGludCB5ZWFyc3BlYzsKK0BAIC0yMTcsOCArMjIwLDggQEAgZGF0ZSAgICAgICAgICAgIDogbW9udGhfbmFtZSBkYXlfbnVtYmVyCisgCQkJCSBtbnVtID09IDEyKSAmJiBkbnVtID4gMzEpCisgCQkJICAgIHx8ICgobW51bSA9PSAgNCB8fCBtbnVtID09ICA2IHx8IG1udW0gPT0gIDkgfHwKKyAJCQkgICAgICAgICBtbnVtID09IDExKSAmJiBkbnVtID4gMzApCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgX19pc2xlYXAoeW51bSsxOTAwKSkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFfX2lzbGVhcCh5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIGlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIWlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorIAkJCSAgICkKKyAJCQl7CisgCQkJICAgIHl5ZXJyb3IoIkVycm9yIGluIGRheSBvZiBtb250aCIpOworQEAgLTI2MSw4ICsyNjQsOCBAQCBkYXRlICAgICAgICAgICAgOiBtb250aF9uYW1lIGRheV9udW1iZXIKKyAJCQkJIG1udW0gPT0gMTIpICYmIGRudW0gPiAzMSkKKyAJCQkgICAgfHwgKChtbnVtID09ICA0IHx8IG1udW0gPT0gIDYgfHwgbW51bSA9PSAgOSB8fAorIAkJCSAgICAgICAgIG1udW0gPT0gMTEpICYmIGRudW0gPiAzMCkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI5ICYmICBfX2lzbGVhcCh5bnVtKzE5MDApKQorLQkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIV9faXNsZWFwKHludW0rMTkwMCkpCisrCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgaXNfbGVhcF95ZWFyKHludW0rMTkwMCkpCisrCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOCAmJiAhaXNfbGVhcF95ZWFyKHludW0rMTkwMCkpCisgCQkJICAgKQorIAkJCXsKKyAJCQkgICAgeXllcnJvcigiRXJyb3IgaW4gZGF5IG9mIG1vbnRoIik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhMzc5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5pbml0CkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorIworIyBTdGFydHMgYXQgZGFlbW9uCisjCisKK3VtYXNrIDA3NworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworc3RhcnQoKSB7CisJZWNobyAtbiAiU3RhcnRpbmcgYXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi9hdGQucGlkIC0tYmFja2dyb3VuZCAtLWV4ZWMgL3Vzci9zYmluL2F0ZCAtLSAtZgorCWVjaG8gIk9LIgorfQorc3RvcCgpIHsKKwllY2hvIC1uICJTdG9wcGluZyBhdGQ6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vYXRkLnBpZAorCWVjaG8gIk9LIgorfQorcmVzdGFydCgpIHsKKwlzdG9wCisJc3RhcnQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCXN0YXJ0CisJOzsKKyAgc3RvcCkKKwlzdG9wCisJOzsKKyAgcmVzdGFydHxyZWxvYWQpCisJcmVzdGFydAorCTs7CisgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL2F0ZAorCTs7CisgICopCisJZWNobyAkIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fHN0YXR1c30iCisJZXhpdCAxCitlc2FjCisKK2V4aXQgJD8KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGM4NDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1Kb2Igc3Bvb2xpbmcgdG9vbHMKK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2F0ZCAtZgorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9jb25maWd1cmUtYWRkLWVuYWJsZS1wYW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9jb25maWd1cmUtYWRkLWVuYWJsZS1wYW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1ZWZlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGF0LTMuMS4xMi9jb25maWd1cmUuYWMJMjAxMS0wNi0yMyAxNDo1MTowMy42NTM1NzI5NDUgKzA4MDAKKysrKyBhdC0zLjEuMTIvY29uZmlndXJlLmFjLm5ldwkyMDExLTA2LTI3IDE2OjEyOjE0LjkwMzU3Mjk0NSArMDgwMAorQEAgLTgxLDEwICs4MSwxOCBAQAorIEFDX0ZVTkNfVlBSSU5URgorIEFDX0ZVTkNfR0VUTE9BREFWRworIEFDX0NIRUNLX0ZVTkNTKGdldGN3ZCBta3RpbWUgc3RyZnRpbWUgc2V0cmV1aWQgc2V0cmVzdWlkIHNpZ2FjdGlvbiB3YWl0cGlkKQorKworK0FDX0FSR19XSVRIKFtwYW1dLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtcGFtXSwgW3dpdGhvdXQgUEFNIHN1cHBvcnRdKV0pCisrCisraWYgdGVzdCAieCR3aXRoX3BhbSIgIT0geG5vOyB0aGVuCisgQUNfQ0hFQ0tfSEVBREVSUyhzZWN1cml0eS9wYW1fYXBwbC5oLCBbCisgICBQQU1MSUI9Ii1scGFtIgorLSAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSkKKy1dKQorKyAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSldLAorKyAgIFtpZiB0ZXN0ICJ4JHdpdGhfcGFtIiA9IHh5ZXM7IHRoZW4KKysgICBBQ19NU0dfRVJST1IoW1BBTSBzZWxlY3RlZCBidXQgc2VjdXJpdHkvcGFtX21pc2MuaCBub3QgZm91bmRdKQorKyAgIGZpXSkKKytmaQorCisgZG5sIENoZWNraW5nIGZvciBwcm9ncmFtcworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlZjAwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworcG9zaXh0bS5bY2hdIGZpbGVzIGFyZSByZXBsYWNlZCB3aXRoIGdwbHYyIHZlcnNpb24gZnJvbSB0aGVzZSBsb2NhdGlvbnM6CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5jO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5oO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEgCisKK3VwZGF0ZSB0aGUgQ29weXJpZ2h0IGZpbGUgaW5mb3JtYXRpb24gdG8gcmVmbGVjdCB0aGUgcmVwbGFjZWQgZmlsZXMuCisKK0RhdGU6IDIwMTAvMDgvMzEKK05pdGluIEEgS2FtYmxlIG5pdGluLmEua2FtYmxlQGludGVsLmNvbQorCitJbmRleDogYXQtMy4xLjEyL0NvcHlyaWdodAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL0NvcHlyaWdodAorKysrIGF0LTMuMS4xMi9Db3B5cmlnaHQKK0BAIC0zMSwxMCArMzEsMTAgQEAgVGhlIGZpbGVzIHBvc2l4dG0uYyBhbmQgcG9zaXh0bS5oIGhhdmUgdAorICAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyAgICAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZml4X3BhcmFsbGVsX2J1aWxkX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZmYzZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorbWFrZSAtaiB3YXMgZmFpbGluZyBzb21ldGltZXNhIGxpa2UgdGhpcworfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUvbml0aW4vYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggLUkuIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLW8gYXRkIGF0ZC5vIGRhZW1vbi5vICAtbGZsICAtbHBhbSAtV2wsLU8xIC1XbCwtLWFzLW5lZWRlZAorfCBwYXJzZXRpbWUubDo1OjE5OiBmYXRhbCBlcnJvcjogeS50YWIuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorfCBtYWtlOiAqKiogW2xleC55eS5vXSBFcnJvciAxCit8IG1ha2U6ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCisKK0ZpeGVkIHRoZSBpc3N1ZSBieSBhZGRpbmcgYSBkZXBlbmRlbmN5IGluIHRoZSBtYWtlZmlsZS4KK05pdGluIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEwLzA5LzAyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGF0LTMuMS4xMi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL01ha2VmaWxlLmluCisrKysgYXQtMy4xLjEyL01ha2VmaWxlLmluCitAQCAtODMsNiArODMsOCBAQCB5LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisgbGV4Lnl5LmM6IHBhcnNldGltZS5sCisgCSQoTEVYKSAtaSBwYXJzZXRpbWUubAorIAorK3BhcnNldGltZS5sOiB5LnRhYi5oCisrCisgYXRydW46IGF0cnVuLmluCisgCWNvbmZpZ3VyZQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMmE0YzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxNTBiNjNhOTM2YWY3MWI5OTJhM2E3YjBmYzJkMjQ5N2U1MWZjODAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI4IEphbiAyMDE1IDIzOjUyOjAwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgoreS50YWIuYzoxMDAxOjA6IGVycm9yOiB1bnRlcm1pbmF0ZWQgI2lmCisKK0xldCAiJChZQUNDKSAtZCBwYXJzZXRpbWUueSIgb25seSBydW4gb25jZSB3aWxsIGZpeCB0aGUgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAyYTliOTE4Li5hYTdjMDRhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzUsNyArNzUsOSBAQCBhdDogJChBVE9CSkVDVFMpCisgYXRkOiAkKFJVTk9CSkVDVFMpCisgCSQoQ0MpICQoTERGTEFHUykgLW8gYXRkICQoUlVOT0JKRUNUUykgJChMSUJTKSAkKFBBTUxJQikKKyAKKy15LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisreS50YWIuaDogeS50YWIuYworKworK3kudGFiLmM6IHBhcnNldGltZS55CisgCSQoWUFDQykgLWQgcGFyc2V0aW1lLnkKKyAKKyBsZXgueXkuYzogcGFyc2V0aW1lLmwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wYW0uY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3BhbS5jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Y2ViOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wYW0uY29uZi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitvZSBkb2Vzbid0IHN1cHBvcnQgIkBpbmNsdWRlIiwgdXNlIHRoZSBjb25jcmV0ZSBkaXJlY3RpdmUgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorSW5kZXg6IGF0LTMuMS4xNS9wYW0uY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xNS5vcmlnL3BhbS5jb25mCisrKysgYXQtMy4xLjE1L3BhbS5jb25mCitAQCAtMSwxMCArMSwxMSBAQAorICMKKyAjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgYXQgZGFlbW9uCisgIworKyAKKythdXRoICAgIHJlcXVpcmVkICAgIHBhbV9lbnYuc28KKythdXRoICAgIGluY2x1ZGUgICAgIGNvbW1vbi1hdXRoCisrYWNjb3VudCBpbmNsdWRlICAgICBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gaW5jbHVkZSAgICAgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9saW1pdHMuc28KKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9sb2dpbnVpZC5zbworIAorLWF1dGgJcmVxdWlyZWQJcGFtX2Vudi5zbworLUBpbmNsdWRlIGNvbW1vbi1hdXRoCistQGluY2x1ZGUgY29tbW9uLWFjY291bnQKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xvZ2ludWlkLnNvCistQGluY2x1ZGUgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MTRiYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qIFBhcnNlIGRhdGVzIGZvciB0b3VjaCBhbmQgZGF0ZS4KKworICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkwLCAxOTkxLCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorICAgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJwb3NpeHRtLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgVVNFX1VOTE9DS0VEX0lPCisjIGluY2x1ZGUgInVubG9ja2VkLWlvLmgiCisjZW5kaWYKKworLyogSVNESUdJVCBkaWZmZXJzIGZyb20gaXNkaWdpdCwgYXMgZm9sbG93czoKKyAgIC0gSXRzIGFyZyBtYXkgYmUgYW55IGludCBvciB1bnNpZ25lZCBpbnQ7IGl0IG5lZWQgbm90IGJlIGFuIHVuc2lnbmVkIGNoYXIKKyAgICAgb3IgRU9GLgorICAgLSBJdCdzIHR5cGljYWxseSBmYXN0ZXIuCisgICBQT1NJWCBzYXlzIHRoYXQgb25seSAnMCcgdGhyb3VnaCAnOScgYXJlIGRpZ2l0cy4gIFByZWZlciBJU0RJR0lUIHRvCisgICBpc2RpZ2l0IHVubGVzcyBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGxvY2FsZSdzIGRlZmluaXRpb24KKyAgIG9mIGBkaWdpdCcgZXZlbiB3aGVuIHRoZSBob3N0IGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVguICAqLworI2RlZmluZSBJU0RJR0lUKGMpICgodW5zaWduZWQgaW50KSAoYykgLSAnMCcgPD0gOSkKKwordGltZV90IG1rdGltZSAoKTsKKworLyoKKyAgUE9TSVggcmVxdWlyZXM6CisKKyAgdG91Y2ggLXQgW1tDQ11ZWV1tbWRkaGhtbVsuc3NdIEZJTEUuLi4KKyAgICA4LCAxMCwgb3IgMTIgZGlnaXRzLCBmb2xsb3dlZCBieSBvcHRpb25hbCAuc3MKKyAgICAoUERTX0xFQURJTkdfWUVBUiB8IFBEU19DRU5UVVJZIHwgUERTX1NFQ09ORFMpCisKKyAgdG91Y2ggbW1kZGhobW1bWVldIEZJTEUuLi4gKG9ic29sZXRlZCBieSBQT1NJWCAxMDAzLjEtMjAwMSkKKyAgICA4IG9yIDEwIGRpZ2l0cywgWVkgKGlmIHByZXNlbnQpIG11c3QgYmUgaW4gdGhlIHJhbmdlIDY5LTk5CisgICAgKFBEU19UUkFJTElOR19ZRUFSIHwgUERTX1BSRV8yMDAwKQorCisgIGRhdGUgbW1kZGhobW1bW0NDXVlZXQorICAgIDgsIDEwLCBvciAxMiBkaWdpdHMKKyAgICAoUERTX1RSQUlMSU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSkKKworKi8KKworc3RhdGljIGludAoreWVhciAoc3RydWN0IHRtICp0bSwgY29uc3QgaW50ICpkaWdpdF9wYWlyLCBzaXplX3QgbiwgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKQoreworICBzd2l0Y2ggKG4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIHRtLT50bV95ZWFyID0gKmRpZ2l0X3BhaXI7CisgICAgICAvKiBEZWR1Y2UgdGhlIGNlbnR1cnkgYmFzZWQgb24gdGhlIHllYXIuCisJIFBPU0lYIHJlcXVpcmVzIHRoYXQgMDAtNjggYmUgaW50ZXJwcmV0ZWQgYXMgMjAwMC0yMDY4LAorCSBhbmQgdGhhdCA2OS05OSBiZSBpbnRlcnByZXRlZCBhcyAxOTY5LTE5OTkuICAqLworICAgICAgaWYgKGRpZ2l0X3BhaXJbMF0gPD0gNjgpCisJeworCSAgaWYgKHN5bnRheF9iaXRzICYgUERTX1BSRV8yMDAwKQorCSAgICByZXR1cm4gMTsKKwkgIHRtLT50bV95ZWFyICs9IDEwMDsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIGlmICghIChzeW50YXhfYml0cyAmIFBEU19DRU5UVVJZKSkKKwlyZXR1cm4gMTsKKyAgICAgIHRtLT50bV95ZWFyID0gZGlnaXRfcGFpclswXSAqIDEwMCArIGRpZ2l0X3BhaXJbMV0gLSAxOTAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDA6CisgICAgICB7CisJdGltZV90IG5vdzsKKwlzdHJ1Y3QgdG0gKnRtcDsKKworCS8qIFVzZSBjdXJyZW50IHllYXIuICAqLworCXRpbWUgKCZub3cpOworCXRtcCA9IGxvY2FsdGltZSAoJm5vdyk7CisJaWYgKCEgdG1wKQorCSAgcmV0dXJuIDE7CisJdG0tPnRtX3llYXIgPSB0bXAtPnRtX3llYXI7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Bvc2l4X3RpbWVfcGFyc2UgKHN0cnVjdCB0bSAqdG0sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgY29uc3QgY2hhciAqZG90ID0gTlVMTDsKKyAgaW50IHBhaXJbNl07CisgIGludCAqcDsKKyAgc2l6ZV90IGk7CisKKyAgc2l6ZV90IHNfbGVuID0gc3RybGVuIChzKTsKKyAgc2l6ZV90IGxlbiA9ICgoKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpICYmIChkb3QgPSBzdHJjaHIgKHMsICcuJykpKQorCQk/IChzaXplX3QpIChkb3QgLSBzKQorCQk6IHNfbGVuKTsKKworICBpZiAobGVuICE9IDggJiYgbGVuICE9IDEwICYmIGxlbiAhPSAxMikKKyAgICByZXR1cm4gMTsKKworICBpZiAoZG90KQorICAgIHsKKyAgICAgIGlmICghKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpKQorCXJldHVybiAxOworCisgICAgICBpZiAoc19sZW4gLSBsZW4gIT0gMykKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIGlmICghSVNESUdJVCAoc1tpXSkpCisgICAgICByZXR1cm4gMTsKKworICBsZW4gLz0gMjsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIHBhaXJbaV0gPSAxMCAqIChzWzIqaV0gLSAnMCcpICsgc1syKmkgKyAxXSAtICcwJzsKKworICBwID0gcGFpcjsKKyAgaWYgKHN5bnRheF9iaXRzICYgUERTX0xFQURJTkdfWUVBUikKKyAgICB7CisgICAgICBpZiAoeWVhciAodG0sIHAsIGxlbiAtIDQsIHN5bnRheF9iaXRzKSkKKwlyZXR1cm4gMTsKKyAgICAgIHAgKz0gbGVuIC0gNDsKKyAgICAgIGxlbiA9IDQ7CisgICAgfQorCisgIC8qIEhhbmRsZSA4IGRpZ2l0cyB3b3J0aCBvZiBgTU1ERGhobW0nLiAgKi8KKyAgdG0tPnRtX21vbiA9ICpwKysgLSAxOworICB0bS0+dG1fbWRheSA9ICpwKys7CisgIHRtLT50bV9ob3VyID0gKnArKzsKKyAgdG0tPnRtX21pbiA9ICpwKys7CisgIGxlbiAtPSA0OworCisgIC8qIEhhbmRsZSBhbnkgdHJhaWxpbmcgeWVhci4gICovCisgIGlmIChzeW50YXhfYml0cyAmIFBEU19UUkFJTElOR19ZRUFSKQorICAgIHsKKyAgICAgIGlmICh5ZWFyICh0bSwgcCwgbGVuLCBzeW50YXhfYml0cykpCisJcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEhhbmRsZSBzZWNvbmRzLiAgKi8KKyAgaWYgKCFkb3QpCisgICAgeworICAgICAgdG0tPnRtX3NlYyA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IHNlY29uZHM7CisKKyAgICAgICsrZG90OworICAgICAgaWYgKCFJU0RJR0lUIChkb3RbMF0pIHx8ICFJU0RJR0lUIChkb3RbMV0pKQorCXJldHVybiAxOworICAgICAgc2Vjb25kcyA9IDEwICogKGRvdFswXSAtICcwJykgKyBkb3RbMV0gLSAnMCc7CisKKyAgICAgIHRtLT50bV9zZWMgPSBzZWNvbmRzOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogUGFyc2UgYSBQT1NJWC1zdHlsZSBkYXRlLCByZXR1cm5pbmcgdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKworYm9vbAorcG9zaXh0aW1lICh0aW1lX3QgKnAsIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgc3RydWN0IHRtIHRtMAorI2lmZGVmIGxpbnQKKyAgLyogUGxhY2F0ZSBnY2MtNCdzIC1XdW5pbml0aWFsaXplZC4KKyAgICAgcG9zaXhfdGltZV9wYXJzZSBmYWlscyB0byBzZXQgYWxsIG9mIHRtMCBvbmx5IHdoZW4gaXQgcmV0dXJucworICAgICBub256ZXJvIChkdWUgdG8geWVhcigpIHJldHVybmluZyBub256ZXJvKSwgYW5kIGluIHRoYXQgY2FzZSwKKyAgICAgdGhpcyBjb2RlIGRvZXNuJ3QgdXNlIHRoZSB0bTAgYXQgYWxsLiAgKi8KKyAgICA9IHsgMCwgfQorI2VuZGlmCisgICAgOworICBzdHJ1Y3QgdG0gdG0xOworICBzdHJ1Y3QgdG0gY29uc3QgKnRtOworICB0aW1lX3QgdDsKKworICBpZiAocG9zaXhfdGltZV9wYXJzZSAoJnRtMCwgcywgc3ludGF4X2JpdHMpKQorICAgIHJldHVybiBmYWxzZTsKKworICB0bTEgPSB0bTA7CisgIHRtMS50bV9pc2RzdCA9IC0xOworICB0ID0gbWt0aW1lICgmdG0xKTsKKworICBpZiAodCAhPSAodGltZV90KSAtMSkKKyAgICB0bSA9ICZ0bTE7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBta3RpbWUgcmV0dXJucyAtMSBmb3IgZXJyb3JzLCBidXQgLTEgaXMgYWxzbyBhIHZhbGlkIHRpbWVfdAorCSB2YWx1ZS4gIENoZWNrIHdoZXRoZXIgYW4gZXJyb3IgcmVhbGx5IG9jY3VycmVkLiAgKi8KKyAgICAgIHRtID0gbG9jYWx0aW1lICgmdCk7CisgICAgICBpZiAoISB0bSkKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgIC8qIFJlamVjdCBkYXRlcyBsaWtlICJTZXB0ZW1iZXIgMzEiIGFuZCB0aW1lcyBsaWtlICIyNTo2MSIuICAqLworICBpZiAoKHRtMC50bV95ZWFyIF4gdG0tPnRtX3llYXIpCisgICAgICB8ICh0bTAudG1fbW9uIF4gdG0tPnRtX21vbikKKyAgICAgIHwgKHRtMC50bV9tZGF5IF4gdG0tPnRtX21kYXkpCisgICAgICB8ICh0bTAudG1faG91ciBeIHRtLT50bV9ob3VyKQorICAgICAgfCAodG0wLnRtX21pbiBeIHRtLT50bV9taW4pCisgICAgICB8ICh0bTAudG1fc2VjIF4gdG0tPnRtX3NlYykpCisgICAgcmV0dXJuIGZhbHNlOworCisgICpwID0gdDsKKyAgcmV0dXJuIHRydWU7Cit9CisKKyNpZmRlZiBURVNUX1BPU0lYVElNRQorLyoKKyAgICBUZXN0IG1haW5seSB3aXRoIHN5bnRheF9iaXRzID09IDEzCisgICAgKGFrYTogKFBEU19MRUFESU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSB8IFBEU19TRUNPTkRTKSkKKworICAgIFRoaXMgdGVzdCBkYXRhIGFzc3VtZXMgVW5pdmVyc2FsIFRpbWUsIGUuZy4sIFRaPSJVVEMwIi4KKworICAgIFRoaXMgdGVzdCBkYXRhIGFsc28gYXNzdW1lcyB0aGF0IHRpbWVfdCBpcyBzaWduZWQgYW5kIGlzIGF0IGxlYXN0CisgICAgMzkgYml0cyB3aWRlLCBzbyB0aGF0IGl0IGNhbiByZXByZXNlbnQgYWxsIHllYXJzIGZyb20gMDAwMCB0aHJvdWdoCisgICAgOTk5OS4gIEEgaG9zdCB3aXRoIDMyLWJpdCBzaWduZWQgdGltZV90IGNhbiByZXByZXNlbnQgb25seSB0aW1lCisgICAgc3RhbXBzIGluIHRoZSByYW5nZSAxOTAxLTEyLTEzIDIwOjQ1OjUyIHRocm91Z2ggMjAzOC0wMS0xOAorICAgIDAzOjE0OjA3IFVUQywgYXNzdW1pbmcgUE9TSVggdGltZV90IHdpdGggbm8gbGVhcCBzZWNvbmRzLCBzbyB0ZXN0CisgICAgY2FzZXMgb3V0c2lkZSB0aGlzIHJhbmdlIHdpbGwgbm90IHdvcmsgb24gc3VjaCBhIGhvc3QuCisKKyAgICBBbHNvLCB0aGUgZmlyc3QgdHdvIGxpbmVzIG9mIHRlc3QgZGF0YSBhc3N1bWUgdGhhdCB0aGUgY3VycmVudAorICAgIHllYXIgaXMgMjAwMi4KKworQkVHSU4tREFUQQorMTIxMzE0MTUuMTYgICAgIDEzICAgMTAzOTc4ODkxNiBGcmkgRGVjIDEzIDE0OjE1OjE2IDIwMDIKKzEyMTMxNDE1LjE2ICAgICAxMyAgIDEwMzk3ODg5MTYgRnJpIERlYyAxMyAxNDoxNToxNiAyMDAyCiswMDAwMDEwMTAwMDAuMDAgMTMgLTYyMTY3MTMyODAwIFN1biBKYW4gIDEgMDA6MDA6MDAgMDAwMAorMTkwMTEyMTMyMDQ1LjUyIDEzICAtMjE0NzQ4MzY0OCBGcmkgRGVjIDEzIDIwOjQ1OjUyIDE5MDEKKzE5MDExMjEzMjA0NS41MyAxMyAgLTIxNDc0ODM2NDcgRnJpIERlYyAxMyAyMDo0NTo1MyAxOTAxCisxOTAxMTIxMzIwNDYuNTIgMTMgIC0yMTQ3NDgzNTg4IEZyaSBEZWMgMTMgMjA6NDY6NTIgMTkwMQorMTkwMTEyMTMyMTQ1LjUyIDEzICAtMjE0NzQ4MDA0OCBGcmkgRGVjIDEzIDIxOjQ1OjUyIDE5MDEKKzE5MDExMjE0MjA0NS41MiAxMyAgLTIxNDczOTcyNDggU2F0IERlYyAxNCAyMDo0NTo1MiAxOTAxCisxOTAyMDExMzIwNDUuNTIgMTMgIC0yMTQ0ODA1MjQ4IE1vbiBKYW4gMTMgMjA6NDU6NTIgMTkwMgorMTk2OTEyMzEyMzU5LjU5IDEzICAgICAgICAgICAtMSBXZWQgRGVjIDMxIDIzOjU5OjU5IDE5NjkKKzE5NzAwMTAxMDAwMC4wMCAxMyAgICAgICAgICAgIDAgVGh1IEphbiAgMSAwMDowMDowMCAxOTcwCisxOTcwMDEwMTAwMDAuMDEgMTMgICAgICAgICAgICAxIFRodSBKYW4gIDEgMDA6MDA6MDEgMTk3MAorMTk3MDAxMDEwMDAxLjAwIDEzICAgICAgICAgICA2MCBUaHUgSmFuICAxIDAwOjAxOjAwIDE5NzAKKzE5NzAwMTAxMDEwMC4wMCAxMyAgICAgICAgIDM2MDAgVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisxOTcwMDEwMjAwMDAuMDAgMTMgICAgICAgIDg2NDAwIEZyaSBKYW4gIDIgMDA6MDA6MDAgMTk3MAorMTk3MDAyMDEwMDAwLjAwIDEzICAgICAgMjY3ODQwMCBTdW4gRmViICAxIDAwOjAwOjAwIDE5NzAKKzE5NzEwMTAxMDAwMC4wMCAxMyAgICAgMzE1MzYwMDAgRnJpIEphbiAgMSAwMDowMDowMCAxOTcxCisxOTcwMDEwMDAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMDAxMDAwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMDEwMDAwLjYwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDEwMTAwNjAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTAxMjQwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMzIwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMTMwMTAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzIwMzgwMTE5MDMxNC4wNiAxMyAgIDIxNDc0ODM2NDYgVHVlIEphbiAxOSAwMzoxNDowNiAyMDM4CisyMDM4MDExOTAzMTQuMDcgMTMgICAyMTQ3NDgzNjQ3IFR1ZSBKYW4gMTkgMDM6MTQ6MDcgMjAzOAorMjAzODAxMTkwMzE0LjA4IDEzICAgMjE0NzQ4MzY0OCBUdWUgSmFuIDE5IDAzOjE0OjA4IDIwMzgKKzk5OTkxMjMxMjM1OS41OSAxMyAyNTM0MDIzMDA3OTkgRnJpIERlYyAzMSAyMzo1OTo1OSA5OTk5CisxMTEyMTMxNDE1ICAgICAgMTMgICAxMzIzNzg1NzAwIFR1ZSBEZWMgMTMgMTQ6MTU6MDAgMjAxMQorMTExMjEzMTQxNS4xNiAgIDEzICAgMTMyMzc4NTcxNiBUdWUgRGVjIDEzIDE0OjE1OjE2IDIwMTEKKzIwMTExMjEzMTQxNS4xNiAxMyAgIDEzMjM3ODU3MTYgVHVlIERlYyAxMyAxNDoxNToxNiAyMDExCisxOTExMTIxMzE0MTUuMTYgMTMgIC0xODMxOTc0Mjg0IFdlZCBEZWMgMTMgMTQ6MTU6MTYgMTkxMQorMjAzNzEyMTMxNDE1LjE2IDEzICAgMjE0NDMyNjUxNiBTdW4gRGVjIDEzIDE0OjE1OjE2IDIwMzcKKzM3MTIxMzE0MTUuMTYgICAxMyAgIDIxNDQzMjY1MTYgU3VuIERlYyAxMyAxNDoxNToxNiAyMDM3Cis2ODEyMTMxNDE1LjE2ICAgMTMgICAzMTIyNjMzNzE2IFRodSBEZWMgMTMgMTQ6MTU6MTYgMjA2OAorNjkxMjEzMTQxNS4xNiAgIDEzICAgICAtMTU5MDI4NCBTYXQgRGVjIDEzIDE0OjE1OjE2IDE5NjkKKzcwMTIxMzE0MTUuMTYgICAxMyAgICAgMjk5NDU3MTYgU3VuIERlYyAxMyAxNDoxNToxNiAxOTcwCisxMjEzMTQxNTk5ICAgICAgIDIgICAgOTQ1MDk0NTAwIE1vbiBEZWMgMTMgMTQ6MTU6MDAgMTk5OQorMTIxMzE0MTUwMCAgICAgICAyICAgIDk3NjcxNjkwMCBXZWQgRGVjIDEzIDE0OjE1OjAwIDIwMDAKK0VORC1EQVRBCisKKyovCisKKyMgZGVmaW5lIE1BWF9CVUZGX0xFTiAxMDI0CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgY2hhciBidWZmW01BWF9CVUZGX0xFTiArIDFdOworCisgIGJ1ZmZbTUFYX0JVRkZfTEVOXSA9IDA7CisgIHdoaWxlIChmZ2V0cyAoYnVmZiwgTUFYX0JVRkZfTEVOLCBzdGRpbikgJiYgYnVmZlswXSkKKyAgICB7CisgICAgICBjaGFyIHRpbWVfc3RyW01BWF9CVUZGX0xFTl07CisgICAgICB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHM7CisgICAgICB0aW1lX3QgdDsKKyAgICAgIGlmIChzc2NhbmYgKGJ1ZmYsICIlcyAldSIsIHRpbWVfc3RyLCAmc3ludGF4X2JpdHMpICE9IDIpCisJcHJpbnRmICgiKlxuIik7CisgICAgICBlbHNlCisJeworCSAgcHJpbnRmICgiJS0xNXMgJTJ1ICIsIHRpbWVfc3RyLCBzeW50YXhfYml0cyk7CisJICBpZiAocG9zaXh0aW1lICgmdCwgdGltZV9zdHIsIHN5bnRheF9iaXRzKSkKKwkgICAgcHJpbnRmICgiJTEybGQgJXMiLCAobG9uZyBpbnQpIHQsIGN0aW1lICgmdCkpOworCSAgZWxzZQorCSAgICBwcmludGYgKCIlMTJzICVzIiwgIioiLCAiKlxuIik7CisJfQorICAgIH0KKyAgZXhpdCAoMCk7CisKK30KKyNlbmRpZgorDAorLyoKK0xvY2FsIFZhcmlhYmxlczoKK2NvbXBpbGUtY29tbWFuZDogImdjYyAtRFRFU1RfUE9TSVhUSU1FIC1nIC1PIC1XYWxsIC1XIHBvc2l4dG0uYyIKK0VuZDoKKyovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxNzQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uaApAQCAtMCwwICsxLDM3IEBACisvKiBQYXJzZSBkYXRlcyBmb3IgdG91Y2ggYW5kIGRhdGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMywgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaWZuZGVmIFBPU0lYVE1fSF8KKyMgZGVmaW5lIFBPU0lYVE1fSF8KKworIyBpbmNsdWRlIDxzdGRib29sLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKworLyogUE9TSVggRGF0ZSBTeW50YXggZmxhZ3MuICAqLworIyBkZWZpbmUgUERTX0xFQURJTkdfWUVBUiAxCisjIGRlZmluZSBQRFNfVFJBSUxJTkdfWUVBUiAyCisjIGRlZmluZSBQRFNfQ0VOVFVSWSA0CisjIGRlZmluZSBQRFNfU0VDT05EUyA4CisjIGRlZmluZSBQRFNfUFJFXzIwMDAgMTYKKworYm9vbCBwb3NpeHRpbWUgKHRpbWVfdCAqcCwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdF8zLjEuMTYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdF8zLjEuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxMmJjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xNi5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gIkRlbGF5ZWQgam9iIGV4ZWN1dGlvbiBhbmQgYmF0Y2ggcHJvY2Vzc2luZyIKK0RFU0NSSVBUSU9OID0gIkF0IGFsbG93cyBmb3IgY29tbWFuZHMgdG8gYmUgcnVuIGF0IGEgcGFydGljdWxhciB0aW1lLiAgQmF0Y2ggd2lsbCBleGVjdXRlIGNvbW1hbmRzIHdoZW4gXAordGhlIHN5c3RlbSBsb2FkIGxldmVscyBkcm9wIHRvIGEgcGFydGljdWxhciBsZXZlbC4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IgorREVQRU5EUyA9ICJmbGV4IGZsZXgtbmF0aXZlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fREVQU30nLCAnJywgZCl9IFwKKyIKKworUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tZW52IHBhbS1wbHVnaW4tbGltaXRzIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImF0ZCIKK1JSRVBMQUNFU18ke1BOfSA9ICJhdGQiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXQvYXRfJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgIGZpbGU6Ly9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly9wb3NpeHRtLmMgXAorICAgIGZpbGU6Ly9wb3NpeHRtLmggXAorICAgIGZpbGU6Ly9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2ggXAorICAgIGZpbGU6Ly9hdGQuaW5pdCBcCisgICAgZmlsZTovL2F0ZC5zZXJ2aWNlIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgIGZpbGU6Ly9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIFwKKyAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uY29uZi5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDA1ZGE3NWQ5Yjc1ZDkzOTE3ZmZiMTZhYjQ4YjFlMTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2I5YWY1OWM2YTU0ZWRjZTk1MzZiYTYyOTg0MTA1NTQwOWQxZjg5ZDhhZTI2NDk0NzI3YTk3MTQxZmI0ZDVjMSIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NFTkRNQUlMPS9iaW4vdHJ1ZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fdXNlcm5hbWU9cm9vdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fZ3JvdXBuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtam9iZGlyPS92YXIvc3Bvb2wvYXQvam9icyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1hdHNwb29sPS92YXIvc3Bvb2wvYXQvc3Bvb2wgXAorICAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfc2VjdXJpdHlfcGFtX2FwcGxfaD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd5ZXMnLCAnbm8nLCBkKX0gIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgc3lzdGVtZCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXRkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhdGQuc2VydmljZSIKKworCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWNwIC1mICR7V09SS0RJUn0vcG9zaXh0bS5bY2hdICR7U30KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAtZSAiSVJPT1Q9JHtEfSIgaW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9hdGQuaW5pdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2F0ZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hdGQuc2VydmljZQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gMDY0NCAke1dPUktESVJ9LyR7QlB9L3BhbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2F0ZAorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDEyY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkF1Z2VhcyBjb25maWd1cmF0aW9uIEFQSSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hdWdlYXMubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2F1Z2Vhcy9yZXBvcnQvMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuYXVnZWFzLm5ldC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgPSAicmVhZGxpbmUgbGlieG1sMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VTID0rICIke1BOfS1sZW5zZXMgbGliJHtCUE59IgorCitGSUxFU18ke1BOfS1sZW5zZXMgPSAiJHtkYXRhZGlyfS9hdWdlYXMvbGVuc2VzIgorRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitSREVQRU5EU19saWIke0JQTn0gKz0gIiR7UE59LWxlbnNlcyIKK1JSRUNPTU1FTkRTX2xpYiR7QlBOfSArPSAiJHtQTn0iCisKK0xFQURfU09OQU1FID0gImxpYmF1Z2Vhcy5zbyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLWZyICR7RH0ke2RhdGFkaXJ9L3ZpbQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTk4NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4yLjAub3JpZy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC00NjMsNyArNDYzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJkYmFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0FkZCBtaXNzaW5nIEdMX0dFTkVSQVRFX0FSR1pfSCBjb25kaXRpb25hbAorCistIEdMX0dFTkVSQVRFX0FSR1pfSCBpcyB1c2VkIGluIGdudWxpYi9saWIvTWFrZWZpbGUuYW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMC4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYworQEAgLTU1LDYgKzU1LDggQEAgQUNfQVJHX1dJVEgoW2ZhaWxtYWxsb2NdLAorIAorIEFNX0NPTkRJVElPTkFMKFtXSVRIX0ZBSUxNQUxMT0NdLCBbdGVzdCB4JHdpdGhfZmFpbG1hbGxvYyAhPSB4bm9dKQorIAorK0FNX0NPTkRJVElPTkFMKFtHTF9HRU5FUkFURV9BUkdaX0hdLCBbdGVzdCAtbiAiJEFSR1pfSCJdKQorKworIGRubCAtLWVuYWJsZS1kZWJ1Zz0oeWVzfG5vKQorIEFDX0FSR19FTkFCTEUoW2RlYnVnXSwKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVidWc9bm8veWVzXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvc2VwYnVpbGRmaXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MmEzZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0Vuc3VyZSB0aGF0IGJ1aWxkcyBpbiBzZXBhcmF0ZSBidWlsZGRpcnMgKCR7Qn0gIT0gJHtTfSkgY29ycmVjdGx5IGluc3RhbGwgdGhlIAorbGVuc2VzIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy80LzE3CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4wLjAub3JpZy9NYWtlZmlsZS5hbQkyMDEyLTExLTAyIDE1OjIwOjExLjAwMDAwMDAwMCArMDAwMAorKysrIGF1Z2Vhcy0xLjAuMC9NYWtlZmlsZS5hbQkyMDEzLTA0LTE3IDEwOjM2OjI0LjAzMzQwMDEyNSArMDAwMAorQEAgLTUsOCArNSw4IEBACisgbGVuc2Rpcj0kKGRhdGFkaXIpL2F1Z2Vhcy9sZW5zZXMvZGlzdAorIGxlbnN0ZXN0ZGlyPSQoZGF0YWRpcikvYXVnZWFzL2xlbnNlcy9kaXN0L3Rlc3RzCisgCistZGlzdF9sZW5zX0RBVEE9JCh3aWxkY2FyZCBsZW5zZXMvKi5hdWcpCistZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgbGVuc2VzL3Rlc3RzLyouYXVnKQorK2Rpc3RfbGVuc19EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9sZW5zZXMvKi5hdWcpCisrZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKWxlbnNlcy90ZXN0cy8qLmF1ZykKKyAKKyBFWFRSQV9ESVNUPWF1Z2Vhcy5zcGVjIGJ1aWxkL2F1eC9tb3ZlLWlmLWNoYW5nZSBNYWtlZmlsZS5hbSBIQUNLSU5HCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzXzEuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDY0YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgYXVnZWFzLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYTI1MzZhOWMzZDc0NGRjMDlkMjM0MjI4ZmU0YjBjOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU5ZmFlN2FjMjI5MDI5ZTYwYTg2OWEzYjg4YzYxNmNmZDUxY2YyZmJhMjg2Y2RmZTNhZjNhMDUyY2IzNWIzMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvYnVpbGQtdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzQxZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLWROYXVyIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluLm9yaWcgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4KKy0tLSBiYXNoLTMuMi40OC9NYWtlZmlsZS5pbi5vcmlnCTIwMDYtMDgtMTcgMjM6MDM6MzUuMDAwMDAwMDAwICswNTAwCisrKysgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4JMjAxMy0wNy0wMiAyMDoyMDowNy41MTI3MDkzMjcgKzA1MDAKK0BAIC04MDMsMTcgKzgwMywzMSBAQAorIAlmaQorIAorIHJlY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQylyZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylyZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCisgemVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXplY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKFNVUFBPUlRfU1JDKXplY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCistdGVzdCB0ZXN0cyBjaGVjazoJZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrdGVzdCB0ZXN0cyBjaGVjazoKKysJQCQoTUFLRSkgaW5zdGFsbC10ZXN0CisrCUAkKE1BS0UpIHJ1bnRlc3QKKysKKytpbnN0YWxsLXRlc3Q6IGJ1aWxkdGVzdAorK2lmZXEgKCQob3JpZ2luIElOU1RBTExfVEVTVF9ESVIpLCB1bmRlZmluZWQpCisgCUAtdGVzdCAtZCB0ZXN0cyB8fCBta2RpciB0ZXN0cworIAlAY3AgJChURVNUU19TVVBQT1JUKSB0ZXN0cworK2Vsc2UKKysJQC10ZXN0IC1kICQoSU5TVEFMTF9URVNUX0RJUikgfHwgbWtkaXIgLXAgJChJTlNUQUxMX1RFU1RfRElSKQorKwlAY3AgLXIgJChzcmNkaXIpL3Rlc3RzLyogJChJTlNUQUxMX1RFU1RfRElSKS8KKysJQGNwICQoVEVTVFNfU1VQUE9SVCkgJChJTlNUQUxMX1RFU1RfRElSKQorK2VuZGlmCisrCisrYnVpbGR0ZXN0OiBmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKysKKytydW50ZXN0OgorIAlAKCBjZCAkKHNyY2RpcikvdGVzdHMgJiYgXAorIAkJUEFUSD0kKEJVSUxEX0RJUikvdGVzdHM6JCRQQVRIIFRISVNfU0g9JChUSElTX1NIKSAkKFNIRUxMKSAke1RFU1RTQ1JJUFR9ICkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9kb250LWluY2x1ZGUtdGFyZ2V0LUNGTEFHUy1pbi1ob3N0LUxERkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3NTZkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gOTMzYmQ4ODZhZjQ5NjY3ZTg4ZTIzODU0MDk0NDlhYjU5ODgxM2RhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE1IEp1bCAyMDE1IDAwOjU0OjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvbnQgaW5jbHVkZSB0YXJnZXQgQ0ZMQUdTIGluIGhvc3QgTERGTEFHUworCitCdWlsZGluZyB0aGUgaG9zdCB0b29sICdta2J1aWx0aW5zJyB3aWxsIGZhaWwgaWYgdGhlIHRhcmdldCBDRkxBR1MKK2NvbnRhaW5zIGFuIG9wdGlvbiB3aGljaCBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QncyBnY2MuIFRvIHByZXZlbnQKK3RoZSBpc3N1ZSwgZGVmaW5lIExERkxBR1NfRk9SX0JVSUxEIGJhc2VkIG9uIENGTEFHU19GT1JfQlVJTEQgaW5zdGVhZAorb2YgQ0ZMQUdTLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3JlcXVpcmVkIGZvciBiYXNoIDMuMi41NyAoR1BMdjIpIHJlY2lwZSBvbmx5XQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorLS0tCisgYnVpbHRpbnMvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGlucy9NYWtlZmlsZS5pbiBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitpbmRleCBlMDI3ZjdhLi5lYmZkZGYzIDEwMDY0NAorLS0tIGEvYnVpbHRpbnMvTWFrZWZpbGUuaW4KKysrKyBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitAQCAtNjMsNyArNjMsNyBAQCBMT0NBTF9ERUZTID0gQExPQ0FMX0RFRlNACisgCisgTElCUyA9IEBMSUJTQAorIExERkxBR1MgPSBATERGTEFHU0AgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHUykKKy1MREZMQUdTX0ZPUl9CVUlMRCA9ICQoTERGTEFHUykKKytMREZMQUdTX0ZPUl9CVUlMRCA9IEBMREZMQUdTX0ZPUl9CVUlMREAgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpCisgTE9DQUxfTERGTEFHUyA9IEBMT0NBTF9MREZMQUdTQAorICNMSUJTX0ZPUl9CVUlMRCA9IEBMSUJTX0ZPUl9CVUlMREAKKyBMSUJTX0ZPUl9CVUlMRCA9ICQoTElCUykKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ta2J1aWx0aW5zX2hhdmVfc3RyaW5naXplLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ta2J1aWx0aW5zX2hhdmVfc3RyaW5naXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjI5YTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorT24gaG9zdHMgd2l0aCBGT1JUSUZZX1NPVVJDRVMsIHN0cmluZ2l6ZSBzdXBwb3J0IGlzIHJlcXVpcmVkLCBhcyBpdCdzIHVzZWQgYnkKK3RoZSBtYWNyb3MgdG8gd3JhcCBmdW5jdGlvbnMgKGUuZy4gcmVhZCBhbmQgb3BlbiBpbiB1bmlzdGQuaCkuIFRob3NlIHdyYXBwZXJzCit1c2UgdGhlIFNUUklORygpIG1hY3JvIGZyb20gdW5pc3RkLmguIEEgaGVhZGVyIGluIHRoZSBiYXNoIHNvdXJjZXMgb3ZlcnJpZGVzCit0aGUgdW5pc3RkLmggbWFjcm8gdG8gJ3gnIHdoZW4gSEFWRV9TVFJJTkdJWkUgaXMgbm90IGRlZmluZWQsIGNhdXNpbmcgdGhlCit3cmFwcGVycyB0byBnZW5lcmF0ZSBjYWxscyB0byAneHJlYWQnIGFuZCAneG9wZW4nLCB3aGljaCBkbyBub3QgZXhpc3QsCityZXN1bHRpbmcgaW4gYSBmYWlsdXJlIHRvIGxpbmsuCisKK0Fzc3VtZSB3ZSBoYXZlIHN0cmluZ2l6ZSBzdXBwb3J0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLCB3aGljaCB3b3JrcyBhcm91bmQgdGhlCitpc3N1ZS4KKworSXQgbWF5IGJlIGJlc3QgZm9yIHVwc3RyZWFtIHRvIGVpdGhlciBnaXZlIHVwIG9uIHN1cHBvcnRpbmcgY29tcGlsZXJzIHdpdGhvdXQKK3N0cmluZ2l6ZSBzdXBwb3J0LCBvciB0byBub3QgZGVmaW5lIFNUUklORygpIGF0IGFsbCB3aGVuIEZPUlRJRllfU09VUkNFUyBpcworZGVmaW5lZCwgbGV0dGluZyB0aGUgdW5pc3RkLmggb25lIGJlIHVzZWQsIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCistLS0gYmFzaC00LjIub3JpZy9idWlsdGlucy9ta2J1aWx0aW5zLmMKKysrKyBiYXNoLTQuMi9idWlsdGlucy9ta2J1aWx0aW5zLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgIyAgZGVmaW5lIEhBVkVfU1RETElCX0gKKworICMgIGRlZmluZSBIQVZFX1JFTkFNRQorKyMgIGRlZmluZSBIQVZFX1NUUklOR0laRQorICNlbmRpZiAvKiBDUk9TU19DT01QSUxJTkcgKi8KKworICNpZiBkZWZpbmVkIChIQVZFX1VOSVNURF9IKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQzYjk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgVEhJU19TSD0vYmluL2Jhc2ggQlVJTERfRElSPS4gcnVudGVzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC90ZXN0LW91dHB1dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwOWI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNmYxNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiQW4gc2gtY29tcGF0aWJsZSBjb21tYW5kIGxhbmd1YWdlIGludGVycHJldGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9iYXNoL2Jhc2h0b3AuaHRtbCIKK1NFQ1RJT04gPSAiYmFzZS9zaGVsbCIKKworREVQRU5EUyA9ICJuY3Vyc2VzIGJpc29uLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtam9iLWNvbnRyb2wiCisKKyMgSWYgTk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyBpcyBkZWZpbmVkLCBhbGwgbG9naW4gc2hlbGxzIHJlYWQgdGhlCisjIHN0YXJ0dXAgZmlsZXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGludGVyYWN0aXZlLgorIyBUaGlzIGlzIHdoYXQgb3RoZXIgbWFqb3IgZGlzdHJvcyBkby4gQW5kIHRoaXMgaXMgd2hhdCB3ZSB3YW50ZWQuIFNlZSBidWcjNTM1OSBhbmQgYnVnIzcxMzcuCitDRkxBR1MgKz0gIi1ETk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2giCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2hdID0gIiR7YmFzZV9iaW5kaXJ9L3NoIgorQUxURVJOQVRJVkVfVEFSR0VUW3NoXSA9ICIke2Jhc2VfYmluZGlyfS9iYXNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitSREVQRU5EU18ke1BOfSArPSAiYmFzZS1maWxlcyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCWNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QgKCkgeworCW9lX3J1bm1ha2UgYnVpbGR0ZXN0Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1vdmUgL3Vzci9iaW4vYmFzaCB0byAvYmluL2Jhc2gsIGlmIG5lZWQKKwlpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorCQlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJbXYgJHtEfSR7YmluZGlyfS9iYXNoICR7RH0ke2Jhc2VfYmluZGlyfQorCWZpCit9Citkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGJhc2hidWcKKwlzZWQgLWkgLWUgInMsJHtTVEFHSU5HX0RJUl9UQVJHRVR9LCxnIiAke0R9JHtiaW5kaXJ9L2Jhc2hidWcKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWFrZSBJTlNUQUxMX1RFU1RfRElSPSR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzIGluc3RhbGwtdGVzdAorCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2Jhc2VfYmluZGlyfS9iYXNoJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmFzZV9iaW5kaXJ9L2Jhc2ggPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmFzZV9iaW5kaXJ9L2Jhc2gkIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9idWlsZC10ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9idWlsZC10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2E4MWI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDI0ICsrKysrKysrKysrKysrKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtODQ4LDIwICs4NDgsMzQgQEAgbWF5YmUtY2xlYW46CisgCWZpCisgCisgcmVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXJlY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAke0xERkxBR1NfRk9SX0JVSUxEfSAtbyAkQCAkKFNVUFBPUlRfU1JDKXJlY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgJHtMREZMQUdTfSAtbyAkQCAkPAorIAorIHplY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQyl6ZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl6ZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyB4Y2FzZSQoRVhFRVhUKToJJChTVVBQT1JUX1NSQyl4Y2FzZS5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl4Y2FzZS5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKy10ZXN0IHRlc3RzIGNoZWNrOglmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKyt0ZXN0IHRlc3RzIGNoZWNrOgorKwlAJChNQUtFKSBpbnN0YWxsLXRlc3QKKysJQCQoTUFLRSkgcnVudGVzdAorKworK2luc3RhbGwtdGVzdDogYnVpbGR0ZXN0CisraWZlcSAoJChvcmlnaW4gSU5TVEFMTF9URVNUX0RJUiksIHVuZGVmaW5lZCkKKyAJQC10ZXN0IC1kIHRlc3RzIHx8IG1rZGlyIHRlc3RzCisgCUBjcCAkKFRFU1RTX1NVUFBPUlQpIHRlc3RzCisrZWxzZQorKwlALXRlc3QgLWQgJChJTlNUQUxMX1RFU1RfRElSKSB8fCBta2RpciAtcCAkKElOU1RBTExfVEVTVF9ESVIpCisrCUBjcCAtciAkKHNyY2RpcikvdGVzdHMvKiAkKElOU1RBTExfVEVTVF9ESVIpLworKwlAY3AgJChURVNUU19TVVBQT1JUKSAkKElOU1RBTExfVEVTVF9ESVIpCisrZW5kaWYKKysKKytidWlsZHRlc3Q6IGZvcmNlICQoUHJvZ3JhbSkgJChURVNUU19TVVBQT1JUKQorKworK3J1bnRlc3Q6CisgCUAoIGNkICQoc3JjZGlyKS90ZXN0cyAmJiBcCisgCQlQQVRIPSQoQlVJTERfRElSKS90ZXN0czokJFBBVEggVEhJU19TSD0kKFRISVNfU0gpICQoU0hFTEwpICR7VEVTVFNDUklQVH0gKQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9leGVjdXRlX2NtZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9leGVjdXRlX2NtZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWY4ZjBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2V4ZWN1dGVfY21kLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKy0tLSBleGVjdXRlX2NtZC5jLm9yaWcJRnJpIEp1biAgMyAxMzozNDo0MiAyMDExCisrKysgZXhlY3V0ZV9jbWQuYwlGcmkgSnVuICAzIDEzOjM2OjQxIDIwMTEKK0BAIC0yMjAyLDcgKzIyMDIsMTEgQEAKKyAgIC8qIElmIHRoZSBgbGFzdHBpcGUnIG9wdGlvbiBpcyBzZXQgd2l0aCBzaG9wdCwgYW5kIGpvYiBjb250cm9sIGlzIG5vdAorICAgICAgZW5hYmxlZCwgZXhlY3V0ZSB0aGUgbGFzdCBlbGVtZW50IG9mIG5vbi1hc3luYyBwaXBlbGluZXMgaW4gdGhlCisgICAgICBjdXJyZW50IHNoZWxsIGVudmlyb25tZW50LiAqLworLSAgaWYgKGxhc3RwaXBlX29wdCAmJiBqb2JfY29udHJvbCA9PSAwICYmIGFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisrICBpZiAobGFzdHBpcGVfb3B0ICYmIAorKyNpZiBkZWZpbmVkKEpPQl9DT05UUk9MKQorKwkJam9iX2NvbnRyb2wgPT0gMCAmJiAKKysjZW5kaWYKKysJCWFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisgICAgIHsKKyAgICAgICBsc3RkaW4gPSBtb3ZlX3RvX2hpZ2hfZmQgKDAsIDAsIDI1NSk7CisgICAgICAgaWYgKGxzdGRpbiA+IDApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC9ta2J1aWx0aW5zX2hhdmVfc3RyaW5naXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzkxZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPbiBob3N0cyB3aXRoIEZPUlRJRllfU09VUkNFUywgc3RyaW5naXplIHN1cHBvcnQgaXMgcmVxdWlyZWQsIGFzIGl0J3MgdXNlZCBieQordGhlIG1hY3JvcyB0byB3cmFwIGZ1bmN0aW9ucyAoZS5nLiByZWFkIGFuZCBvcGVuIGluIHVuaXN0ZC5oKS4gVGhvc2Ugd3JhcHBlcnMKK3VzZSB0aGUgU1RSSU5HKCkgbWFjcm8gZnJvbSB1bmlzdGQuaC4gQSBoZWFkZXIgaW4gdGhlIGJhc2ggc291cmNlcyBvdmVycmlkZXMKK3RoZSB1bmlzdGQuaCBtYWNybyB0byAneCcgd2hlbiBIQVZFX1NUUklOR0laRSBpcyBub3QgZGVmaW5lZCwgY2F1c2luZyB0aGUKK3dyYXBwZXJzIHRvIGdlbmVyYXRlIGNhbGxzIHRvICd4cmVhZCcgYW5kICd4b3BlbicsIHdoaWNoIGRvIG5vdCBleGlzdCwKK3Jlc3VsdGluZyBpbiBhIGZhaWx1cmUgdG8gbGluay4KKworQXNzdW1lIHdlIGhhdmUgc3RyaW5naXplIHN1cHBvcnQgd2hlbiBjcm9zcy1jb21waWxpbmcsIHdoaWNoIHdvcmtzIGFyb3VuZCB0aGUKK2lzc3VlLgorCitJdCBtYXkgYmUgYmVzdCBmb3IgdXBzdHJlYW0gdG8gZWl0aGVyIGdpdmUgdXAgb24gc3VwcG9ydGluZyBjb21waWxlcnMgd2l0aG91dAorc3RyaW5naXplIHN1cHBvcnQsIG9yIHRvIG5vdCBkZWZpbmUgU1RSSU5HKCkgYXQgYWxsIHdoZW4gRk9SVElGWV9TT1VSQ0VTIGlzCitkZWZpbmVkLCBsZXR0aW5nIHRoZSB1bmlzdGQuaCBvbmUgYmUgdXNlZCwgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBiYXNoLTQuMi5vcmlnL2J1aWx0aW5zL21rYnVpbHRpbnMuYworKysrIGJhc2gtNC4yL2J1aWx0aW5zL21rYnVpbHRpbnMuYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjICBkZWZpbmUgSEFWRV9TVERMSUJfSAorCisgIyAgZGVmaW5lIEhBVkVfUkVOQU1FCisrIyAgZGVmaW5lIEhBVkVfU1RSSU5HSVpFCisgI2VuZGlmIC8qIENST1NTX0NPTVBJTElORyAqLworCisgI2lmIGRlZmluZWQgKEhBVkVfVU5JU1REX0gpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2Y4MTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBUSElTX1NIPS9iaW4vYmFzaCBCVUlMRF9ESVI9LiBzcmNkaXI9LiAgcnVudGVzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3Rlc3Qtb3V0cHV0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3Rlc3Qtb3V0cHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMDliN2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF8zLjIuNDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MmIyOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiCkBAIC0wLDAgKzEsNDYgQEAKK3JlcXVpcmUgYmFzaC5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDVkOWJjYWJkOGVkNWE1NGEwMWNlOGQxODNkNTkyYSIKKworUFIgPSAicjExIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmFzaC9iYXNoLSR7UFZ9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDQ5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0OSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTA7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUwIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1MTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTEgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUyO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTM7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUzIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NDthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTQgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDU1O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1NSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTY7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU2IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTcgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjMzOGRjZjk3NWE5MzY0MGJiM2VhYTg0M2NhNDJlM2Y4IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMTI4ZDI4MWJkNTY4MmJhNWY2OTUzMTIyOTE1ZGE3MTk3NjM1N2Q3YTc2NDkwZDI2NmM5MTczYjFkMDQyNjM0OCIKK1NSQ19VUklbcGF0Y2gwNDkubWQ1c3VtXSA9ICJhZjU3MWEyZDE2NGQ1YWJkY2FlNDQ5OWU5NGU4ODkyYyIKK1NSQ19VUklbcGF0Y2gwNDkuc2hhMjU2c3VtXSA9ICJiMTIxN2VkOTRiZGI5NWRjODc4ZmE1Y2FiYmY4YTE2NDQzNWViMGQ5ZGEyM2EzOTIxOThmNDg1NjZlZTM0YTJmIgorU1JDX1VSSVtwYXRjaDA1MC5tZDVzdW1dID0gIjg0NDNkNDM4NWQ3M2VjODM1YWJlNDAxZDkwNTkxMzc3IgorU1JDX1VSSVtwYXRjaDA1MC5zaGEyNTZzdW1dID0gIjA4MWJiMDNjNTgwZWNlZTYzYmEwM2I0MGJlYjNjYWY1MDllY2EyOTUxNWIyZThkZDNjMDc4NTAzNjA5YTE2NDIiCitTUkNfVVJJW3BhdGNoMDUxLm1kNXN1bV0gPSAiMTVjNjY1MzA0MmU5ODE0YWE4NzEyMDA5OGZjN2E4NDkiCitTUkNfVVJJW3BhdGNoMDUxLnNoYTI1NnN1bV0gPSAiMzU0ODg2MDk3Y2Q5NWI0ZGVmNzcwMjhmMzJlZTAxZTJlMDg4ZDU4YTk4MTg0ZmVkZTlkM2NlOTMyMGUyMThlZiIKK1NSQ19VUklbcGF0Y2gwNTIubWQ1c3VtXSA9ICI2OTEwMjNhOTQ0YmJiOTAwM2NjOTJhZDQ2MmQ5MWZhMSIKK1NSQ19VUklbcGF0Y2gwNTIuc2hhMjU2c3VtXSA9ICJhMGVjY2Y5Y2VkYTUwODcxZGIxMGQyMWVmZGQ3NGI5OWUzNWVmYmQ1NWM5NzBjNDAwZWVhZGUwMTI4MTZiYjYxIgorU1JDX1VSSVtwYXRjaDA1My5tZDVzdW1dID0gImViOTdkMWM5MjMwYTU1MjgzZDlkYWM2OWQzZGUyZTQ2IgorU1JDX1VSSVtwYXRjaDA1My5zaGEyNTZzdW1dID0gImZlNmYwZTk2ZTBiOTY2ZWFlZDlmYjVlOTMwY2ExMjg5MWY0MzgwZjMwZjllMGE3NzNkMjAwZmYyMDYzYTg2NGUiCitTUkNfVVJJW3BhdGNoMDU0Lm1kNXN1bV0gPSAiMTEwNzc0NDA1OGM0M2IyNDdmNTk3NTg0Yjg4YmEwYTYiCitTUkNfVVJJW3BhdGNoMDU0LnNoYTI1NnN1bV0gPSAiYzZkYWI5MTFlODU2ODhjNTQyY2U3NWFmYzE3NWRiYjRlNTAxMWRlNTEwMjc1OGUxOWE0YTgwZGFjMWU3OTM1OSIKK1NSQ19VUklbcGF0Y2gwNTUubWQ1c3VtXSA9ICIwNWQyMDExNzZkMzQ5OWUyZGZhNGE3M2QwOWQ0MmYwNSIKK1NSQ19VUklbcGF0Y2gwNTUuc2hhMjU2c3VtXSA9ICJjMGU4MTY3MDA4Mzc5NDJlZDU0OGRhNzRlNTkxN2Y3NGI3MGNiYmJiMTBjOWYyY2FmNzNlOGUwNmEwNzEzZDBhIgorU1JDX1VSSVtwYXRjaDA1Ni5tZDVzdW1dID0gIjIyMmVhYTNhMmMyNmY1NGExNWFhNWUwODgxN2E1MzRhIgorU1JDX1VSSVtwYXRjaDA1Ni5zaGEyNTZzdW1dID0gIjA2M2E4ZDhkNzRlNDQwN2JmMDdhMzJiOTY1YjhlZjZkMjEzYTY2YWJkYjZhZjI2Y2MzNTg0YTQzN2E1NmJiYjQiCitTUkNfVVJJW3BhdGNoMDU3Lm1kNXN1bV0gPSAiNDdkOThlM2UwNDI4OTI0OTVjNWVmZTU0ZWM2ZTU5MTMiCitTUkNfVVJJW3BhdGNoMDU3LnNoYTI1NnN1bV0gPSAiNWZjNjg5Mzk0ZDUxNTk5MGY1ZWE3NGUyZGY3NjVmYzZlNWU0MmNhNDRiNDU5MWIyYzZmOWJlNGIwY2FkZjBmMCIKKworUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfNC4zLjMwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFlNjFjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgpAQCAtMCwwICsxLDQ2IEBACityZXF1aXJlIGJhc2guaW5jCisKKyMgR1BMdjIrICg8IDQuMCksIEdQTHYzKyAoPj0gNC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvJHtCUH0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDMxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDMzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzMyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM3IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzODthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzggXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzOSBcCisgICAgICAgICAgIGZpbGU6Ly9leGVjdXRlX2NtZC5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImEyN2IzZWU5YmU4M2JkM2JhNDQ4YzBmZjUyYjI4NDQ3IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMzE3ODgxMDE5YmJmMjI2MmZiODE0YjdkZDhlNDA2MzJkMTNjMzYwOGQyZjIzNzgwMGE4ODI4ZmJiOGE2NDBkZCIKKworU1JDX1VSSVtwYXRjaDAzMS5tZDVzdW1dID0gIjIzNmRmMWFjMTEzMGEwMzNlZDBkYmUyZDIxMTVmMjhmIgorU1JDX1VSSVtwYXRjaDAzMS5zaGEyNTZzdW1dID0gImNkNTI5ZjU5ZGQwZjJmZGQ0OWQ2MTlmZTM0NjkxZGE2ZjBhZmZlZGY4N2NjMzdjZDQ2MGE5ZjNmZTgxMmE2MWQiCitTUkNfVVJJW3BhdGNoMDMyLm1kNXN1bV0gPSAiMjM2MGY3ZTc5Y2ZiMjg1MjZmODAwMjEwMjVlYTU5MDkiCitTUkNfVVJJW3BhdGNoMDMyLnNoYTI1NnN1bV0gPSAiODg5MzU3ZDI5YTYwMDViMmMzMzA4Y2E1YjYyODZjYjIyM2I1ZTljMDgzMjE5ZTVkYjMxNTYyODJkZDU1NGY0YSIKK1NSQ19VUklbcGF0Y2gwMzMubWQ1c3VtXSA9ICJiNTUxYzRlZTdiODcxMzc1OWU0MTQzNDk5ZDBiYmQ0OCIKK1NSQ19VUklbcGF0Y2gwMzMuc2hhMjU2c3VtXSA9ICJmYjJhNzc4N2ExM2ZiZTAyN2E3MzM1YWNhNmViM2MyMWNkYmQ4MTNlOWVkYzIyMTI3NGI2YTlkODY5MmVhYTE2IgorU1JDX1VSSVtwYXRjaDAzNC5tZDVzdW1dID0gImM5YTU2ZmJlMDM0OGUwNWE4ODZkZmY5N2YyODcyYjc0IgorU1JDX1VSSVtwYXRjaDAzNC5zaGEyNTZzdW1dID0gImYxNjk0ZjA0ZjExMGRlZmUxMzMwYTg1MWNjMjc2OGU3ZTU3ZGRkMmRmZGIwZTNlMzUwY2EwZTNjMjE0ZmY4ODkiCitTUkNfVVJJW3BhdGNoMDM1Lm1kNXN1bV0gPSAiZTU2NGU4YWI0NGVkMWNhM2E0ZTMxNWE5ZjZjYWJkYzkiCitTUkNfVVJJW3BhdGNoMDM1LnNoYTI1NnN1bV0gPSAiMzcwZDg1ZTUxNzgwMDM2ZjIzODZkYzE4YzVlZmU5OTZlYmE4ZTY1MmZjMTk3M2YwZjRmMmFiNTVhOTkzYzFlMyIKK1NSQ19VUklbcGF0Y2gwMzYubWQ1c3VtXSA9ICJiMDBmZjY2YzQxYTdjMGYwNmUxOTEyMDA5ODE5ODBiMCIKK1NSQ19VUklbcGF0Y2gwMzYuc2hhMjU2c3VtXSA9ICJhYzVmODI0NDViMzZlZmRiNTQzZGJmYWU2NGFmZWQ2M2Y1ODZkNzU3NGI4MzNlOWFhOWNkNTE3MGJjNWZkMjdjIgorU1JDX1VSSVtwYXRjaDAzNy5tZDVzdW1dID0gImJlMmE3YjA1ZjZhZTU2MDMxM2YzYzlkNWY3MTI3YmRhIgorU1JDX1VSSVtwYXRjaDAzNy5zaGEyNTZzdW1dID0gIjMzZjE3MGRkNzQwMGFiMzQxOGQ3NDljNTVjNjM5MWIxZDE2MWVmMmRlN2FjZWQxODczNDUxYjNhM2ZjYTU4MTMiCitTUkNfVVJJW3BhdGNoMDM4Lm1kNXN1bV0gPSAiNjFlMDUyMjgzMGIyNGZiZThjMGQxYjAxMGYxMzI0NzAiCitTUkNfVVJJW3BhdGNoMDM4LnNoYTI1NnN1bV0gPSAiYWRiZWFhNTAwY2E3YTgyNTM1ZjBlODhkNjczNjYxOTYzZjhhNWZjZGM3YWQ2MzQ0NWU2OGJmNWI0OTc4NjM2NyIKK1NSQ19VUklbcGF0Y2gwMzkubWQ1c3VtXSA9ICJhNDc3NTQ4N2FiZTk1ODUzNjc1MWM4Y2U1M2NkZjZmOSIKK1NSQ19VUklbcGF0Y2gwMzkuc2hhMjU2c3VtXSA9ICJhYjk0ZGNlZDIyMTU1NDEwOTc2OTFmNjBjM2ViMzIzY2MyOGVmMjU0OTQ2M2U2YTUzMzRiYmNjMWU2MWU3NGVjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2JjL2JjXzEuMDYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzhhODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQXJiaXRyYXJ5IHByZWNpc2lvbiBjYWxjdWxhdG9yIGxhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JjL2JjLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmMvYmNkZWZzLmg7ZW5kbGluZT0zMTttZDU9NDZkZmZkYWYxMGE5OTcyOGRkOGNlMzU4ZTQ1ZDQ2ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGMvZGMuaDtlbmRsaW5lPTI1O21kNT0yZjljNTU4Y2RkODBlMzFiNGQ5MDRlNDhjMjM3NDMyOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvbnVtYmVyLmM7ZW5kbGluZT0zMTttZDU9OTk0MzRhMDg5OGFiY2E3Nzg0YWNmZDM2YjgxOTExOTkiCisKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiZmxleCIKK1BSID0gInIzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmMvYmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWdtZW50LWZhdWx0LnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0NGI1ZGRkZWJkOGE3YTczMDlhZWE2YzM2ZmRhMTE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlZjZkOWYxN2MzYzBkOTJkODc5OGUzNTY2NjE3NWVjZDNkOGVmYWM0MDA5ZDY0NTdiNWM5OWNlYTcyYzBlMzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJkYyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9maWxlcy9maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2JjL2ZpbGVzL2ZpeC1zZWdtZW50LWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzBkYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9maWxlcy9maXgtc2VnbWVudC1mYXVsdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKword2hlbiBydW4gY29tbWFuZCBzdWNoIGFzICdlY2hvICJhID0gMTMiIHwgYmMgLWwnLCBpdCBzZWdtZW50YXRpb24gZmF1bHRzLgorVGhpcyBwYXRjaCBpcyBmcm9tIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9ibGZzLXN1cHBvcnRAbGludXhmcm9tc2NyYXRjaC5vcmcvbXNnMDQ2MDIuaHRtbC4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBiYy0xLjA2L2xpYi9udW1iZXIuYy5vcmlnCTIwMDMtMDktMjYgMjE6MTQ6MDIuMDAwMDAwMDAwICswMDAwCisrKysgYmMtMS4wNi9saWIvbnVtYmVyLmMJMjAwMy0wOS0yNiAyMToxNDoyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zNCw2ICszNCw3IEBACisgI2luY2x1ZGUgPG51bWJlci5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxjdHlwZS5oPi8qIFByb3RvdHlwZXMgbmVlZGVkIGZvciBleHRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLiAqLworIAorICNkZWZpbmUgYmNfcnRfd2FybiBydF93YXJuCistLS0gYmMtMS4wNi9iYy9sb2FkLmMub3JpZwkyMDAzLTA5LTI2IDIxOjE0OjE0LjAwMDAwMDAwMCArMDAwMAorKysrIGJjLTEuMDYvYmMvbG9hZC5jCTIwMDMtMDktMjYgMjE6MTQ6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtMTU2LDcgKzE1Niw3IEBACisgICBsb25nICBsYWJlbF9ubzsKKyAgIGxvbmcgIHZhZl9uYW1lOwkvKiB2YXJpYWJsZSwgYXJyYXkgb3IgZnVuY3Rpb24gbnVtYmVyLiAqLworICAgbG9uZyAgZnVuYzsKKy0gIHByb2dyYW1fY291bnRlciBzYXZlX2FkcjsKKysgIHN0YXRpYyBwcm9ncmFtX2NvdW50ZXIgc2F2ZV9hZHI7CisgCisgICAvKiBJbml0aWFsaXplLiAqLworICAgc3RyID0gY29kZTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sLzAwMDEtZml4LXR5cG9zLWluLW1hbnBhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlMzY4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOWNiMTY2N2Y5ZDNhOWJjZmMzYjgzNDY2Y2Q4ZDNiNzlmMDU1NGZmMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgOCBKdWwgMjAxNSAwMTozNzowOSArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gZml4IHR5cG9zIGluIG1hbnBhZ2UKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQtNy5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGJsa3Rvb2wuOCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLjggYi9ibGt0b29sLjgKK2luZGV4IGExZjVjOTYuLjQ1Yjc3MjQgMTAwNjQ0CistLS0gYS9ibGt0b29sLjgKKysrKyBiL2Jsa3Rvb2wuOAorQEAgLTE5MSw3ICsxOTEsNyBAQCBRdWVyeSBvciBzZXQgZGV2aWNlIGJ1cyBzdGF0ZSAoMCBvZmYsIDEgb24sIDIgdHJpc3RhdGUpCisgUXVlcnkgdGhlIGRldGVjdGVkIChvciBvdmVycmlkZGVuLCB2aWEgLXQpIGRldmljZSBjbGFzcy4KKyBUeXBpY2FsbHkgdGhpcyB3aWxsIHJlc3VsdCBpbiAnQVRBJyBvciAnU0NTSScgZm9yIG1vc3QgZGV2aWNlcy4KKyBEZXRlY3Rpb24gaXMgYmFzZWQgb24gZGV2aWNlIG1ham9yOyB0aHVzIHlvdXIgU0FUQSBkZXZpY2UgbWF5IGFwcGVhciBhcworLSdTQ1NJJy4KKytcJidTQ1NJJy4KKyAKKyAuVFAKKyAuQiBjZC1zcGVlZAorQEAgLTIzNyw3ICsyMzcsNyBAQCBPbWl0dGluZyB0aGUgb24vb2ZmIGFyZ3VtZW50IHdpbGwgcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUuCisgCisgLlRQCisgLkIgbWVkaWEKKy1Mb2NrIGluIChvciB1bmxvY2spIGEgcmVtb3ZlYWJsZSBkZXZpY2UuCisrTG9jayBpbiAob3IgdW5sb2NrKSBhIHJlbW92YWJsZSBkZXZpY2UuCisgCisgLlRQCisgLkIgbXVsdGlwbGUtY291bnQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sLzAwMDItZml4LXN0cmluZy1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4YWJhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBkZGIxMDcxZGEyYzc4ZDgxNTVhYWI2MmU5ZjBkNDZmNjk1MDAyMDBmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXphdCBLaHV6aGluIDxhM2F0Lm1haWxAZ21haWwuY29tPgorRGF0ZTogV2VkLCA4IEp1bCAyMDE1IDAxOjQyOjI0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBmaXggc3RyaW5nIGVycm9yCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyB1dGlsLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMKK2luZGV4IDFmM2E5Y2EuLjJjY2Y1NmEgMTAwNjQ0CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTI4LDcgKzI4LDcgQEAgdm9pZCBwZGllKGNvbnN0IGNoYXIgKm1zZywgaW50IHBlcnIpCisgCWlmIChwZXJyKQorIAkJcGVycm9yKG1zZyk7CisgCWVsc2UKKy0JCWZwcmludGYoc3RkZXJyLCBtc2cpOworKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIG1zZyk7CisgCWlmIChibGtkZXYgPj0gMCkKKyAJCWNsb3NlKGJsa2Rldik7CisgCWV4aXQoMSk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sLzAwMDMtRml4LTMtZC1hcmd1bWVudC1mb3ItQkxLUk9TRVQtaXQtbXVzdC1iZS1jb25zdC1pbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlZDBiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoCkBAIC0wLDAgKzEsNzggQEAKK0Zyb20gNjhmYWE2M2FhYWQ4MWY0YTI4OWU0YTAzMTczYWI0Y2Y3OThkZWI1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMSBOb3YgMjAxNCAyMjoyNDozMiArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gRml4IDMtZCBhcmd1bWVudCBmb3IgQkxLUk9TRVQgaXQgbXVzdCBiZSAnY29uc3QgaW50IConCisKK01vc3Qgb2YgKlNFVCBpb2N0bHMgaGF2ZSBpbnQgdHlwZSBmb3IgMy1kIGFyZ3VtZW50LCBleGNlcHQgQkxLUk9TRVQuCitTbyBhZGQgYmNfYXJnX3R5cGUgZW51bSwgYnVpbGQgaXQgaW50byBib29sX2NvbWFuZCBhbmQgaW5zdGFsbCBhcmdfdHlwZQordG8gYmNfYXJnX2ludF9wdHIgZm9yIEJMS1JPU0VUIG9ubHkuCisKK0RlYmlhbi1idWctaWQ6IDY0MTE2NAorTGluazogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNjQxMTY0CisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyBibGt0b29sLmMgfCAxMSArKysrKysrKystLQorIGJsa3Rvb2wuaCB8ICA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLmMgYi9ibGt0b29sLmMKK2luZGV4IGZiZWZlY2QuLjIyMWExOTUgMTAwNjQ0CistLS0gYS9ibGt0b29sLmMKKysrKyBiL2Jsa3Rvb2wuYworQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHN0cnVjdCBib29sX2NvbW1hbmQgYm9vbF9jbWRfdGJsW10gPSB7CisgCXsgeyBERUZfQk9PTCgicGlvLWRhdGEiKSwgZGNfYXRhLCBERUZfSERJTygzMkJJVCkgfSwKKyAJICAiMTYtYml0IiwgIjMyLWJpdCIgfSwKKyAJeyB7IERFRl9CT09MKCJyZWFkb25seSIpLCBkY19hbnksIElPQ05BTUUoQkxLUk9HRVQpLCBJT0NOQU1FKEJMS1JPU0VUKSB9LAorLQkgIERFRl9CT09MU1RSIH0sCisrCSAgREVGX0JPT0xTVFIsIGJjX2FyZ19pbnRfcHRyIH0sCisgCXsgeyBERUZfQk9PTCgidW5tYXNrLWlycSIpLCBkY19hdGEsIERFRl9IRElPKFVOTUFTS0lOVFIpIH0sCisgCSAgREVGX0JPT0xTVFIgfSwKKyAJeyB7ICJ3Y2FjaGUiLCBjdF9ib29sLCBoYW5kbGVfd2NhY2hlLCBkY19hbnksCitAQCAtMTcxLDcgKzE3MSwxNCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYm9vbChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBjb21tYW5kICpjbWQpCisgCisgCX0gZWxzZSBpZiAoKGFyZ2MgPT0gNCkgJiYgKGNtZC0+d3JpdGVfaW9jdGxfbmFtZSAhPSBOVUxMKSkgeworIAkJZG9fMzIgPSBwYXJzZV9ib29sKGFyZ2MsIGFyZ3YsIGJjbSk7CistCQlpZiAoaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMikpCisrCQkKKysJCWludCByZXQ7CisrCQlpZiAoYmNtLT5hcmdfdHlwZSA9PSBiY19hcmdfaW50X3B0cikgeworKwkJCXJldCA9IGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgJmRvXzMyKTsKKysJCX0gZWxzZSB7CisrCQkJcmV0ID0gaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMik7CisrCQl9CisrCQlpZiAocmV0KQorIAkJCXBkaWUoY21kLT53cml0ZV9pb2N0bF9uYW1lLCAxKTsKKyAJfQorIAllbHNlIHsKK2RpZmYgLS1naXQgYS9ibGt0b29sLmggYi9ibGt0b29sLmgKK2luZGV4IGZjZTQzODcuLjg1YWRkODMgMTAwNjQ0CistLS0gYS9ibGt0b29sLmgKKysrKyBiL2Jsa3Rvb2wuaAorQEAgLTg1LDExICs4NSwxOCBAQCBzdHJ1Y3QgY29tbWFuZCB7CisgCWNvbnN0IGNoYXIJCSp3cml0ZV9pb2N0bF9uYW1lOworIH07CisgCisrZW51bSBiY19hcmdfdHlwZSB7CisrCWJjX2FyZ19pbnQsCisrCWJjX2FyZ19pbnRfcHRyLAorK307CisrCisgc3RydWN0IGJvb2xfY29tbWFuZCB7CisgCXN0cnVjdCBjb21tYW5kCQljbWQ7CisgCisgCWNvbnN0IGNoYXIJCSpzdHJfZmFsc2U7CisgCWNvbnN0IGNoYXIJCSpzdHJfdHJ1ZTsKKysKKysJZW51bSBiY19hcmdfdHlwZSBhcmdfdHlwZTsKKyB9OworIAorIHN0cnVjdCBjbGFzc19vcGVyYXRpb25zIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sXzQtNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5MTk2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJUdW5lIGxvdy1sZXZlbCBibG9jayBkZXZpY2UgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImJsa3Rvb2wgaXMgdXNlZCBmb3IgcXVlcnlpbmcgYW5kL29yIGNoYW5naW5nIHNldHRpbmdzIFwKK29mIGEgYmxvY2sgZGV2aWNlLiBJdCBpcyBsaWtlIGhkcGFybSBidXQgYSBtb3JlIGdlbmVyYWwgdG9vbCwgYXMgaXQgXAord29ya3Mgb24gU0NTSSwgSURFIGFuZCBTQVRBIGRldmljZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvdW5zdGFibGUvYWRtaW4vYmxrdG9vbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmxrdG9vbC5jO2JlZ2lubGluZT03O2VuZGxpbmU9ODttZDU9YTVlNzk4ZWE5OGZkNTA5NzIwODg5NjhhMTVlNWYzNzMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LXR5cG9zLWluLW1hbnBhZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRml4LTMtZC1hcmd1bWVudC1mb3ItQkxLUk9TRVQtaXQtbXVzdC1iZS1jb25zdC1pbnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNjJlZGMwOWM5OTA4MTA3ZTY5MzkxYzg3ZjRmM2ZkNDAiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJiMWU2ZDU5MTI1NDZkMmE0YjcwNGVjNjVjMmI5NjY0YWEzYjQ2NjNlN2Q4MDBlMDY4MDMzMzAzMzVhMmNiNzY0IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LTQub3JpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmOGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkJlcmtlbGV5IExBTFIgWWFjYyBwYXJzZXIgZ2VuZXJhdG9yIgorREVTQ1JJUFRJT04gPSAiQSBwYXJzZXIgZ2VuZXJhdG9yIHV0aWxpdHkgdGhhdCByZWFkcyBhIGdyYW1tYXIgc3BlY2lmaWNhdGlvbiBmcm9tIGEgZmlsZSBhbmQgZ2VuZXJhdGVzIGFuIExSKDEpIFwKK3BhcnNlciBmb3IgaXQuICBUaGUgcGFyc2VycyBjb25zaXN0IG9mIGEgc2V0IG9mIExBTFIoMSkgcGFyc2luZyB0YWJsZXMgYW5kIGEgZHJpdmVyIHJvdXRpbmUgd3JpdHRlbiBpbiB0aGUgQyBcCitwcm9ncmFtbWluZyBsYW5ndWFnZS4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJQRCIKKworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9ieWFjYy9ieWFjYy0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYnlhY2Mtb3Blbi5wYXRjaCIKKworRVhUUkFfT0VDT05GICs9ICItLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9J3MsXixiLCciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmUoKSB7CisJaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfQorCWluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9CisJb2VfcnVuY29uZgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MvYnlhY2Mtb3Blbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE2MDU0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworaW5kZXggNjIwY2UzZi4uODIwNzFhNCAxMDA2NDQKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtNTI2LDcgKzUyNiw3IEBAIG15X21rc3RlbXAoY2hhciAqdGVtcCkKKyAgICAgfQorICAgICBpZiAoKG5hbWUgPSB0ZW1wbmFtKGRuYW1lLCBmbmFtZSkpICE9IDApCisgICAgIHsKKy0JZmQgPSBvcGVuKG5hbWUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IpOworKyAgICAgIGZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSLCAwNjY2KTsKKyAJc3RyY3B5KHRlbXAsIG5hbWUpOworICAgICB9CisgICAgIGVsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2NfMjAxNTA3MTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViNTQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiCkBAIC0wLDAgKzEsMTEgQEAKKyMgU2lnaC4gVGhpcyBpcyBvbmUgb2YgdGhvc2UgcGxhY2VzIHdoZXJlIGV2ZXJ5b25lIGxpY2Vuc2VzIGl0IGRpZmZlcmVudGx5LiBTb21lb25lCisjIGV2ZW4gYXBwbHkgVUNCIHRvIGl0IChGcmVlL05ldC9PcGVuQlNEKS4gVGhlIG1haW50YWluZXIgc3RhdGVzIHRoYXQ6CisjICJJJ3ZlIGZvdW5kIG5vIHJlbGlhYmxlIHNvdXJjZSB3aGljaCBzdGF0ZXMgdGhhdCBieWFjYyBtdXN0IGJlYXIgYSBVQ0IgY29weXJpZ2h0LiIKKyMgU2V0dGluZyB0byBQRCBhcyB0aGlzIGlzIHdoYXQgdGhlIHVwc3RyZWFtIGhhcyBpdCBhcy4KKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BhY2thZ2UvZGViaWFuL2NvcHlyaWdodDttZDU9YzUyZmIyZDFiM2Y3NWIzYjc1MzQ5Mjc4MDdhMWI3MTQiCityZXF1aXJlIGJ5YWNjLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiMjcwMDQwMTAzMDU4M2M0ZTkxNjlhYzdlYTdkMDhkZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzM1NGU0ZWUxNGM0YTFiZjExZTU1ZGRlOTI3NTAxMWQxNDg4N2VmMDY2NDA2YTA4OGI2ZmE1NmNhZjAzOTI0OCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxNjNiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNzEgQEAKKworbGliX0xUTElCUkFSSUVTID0gbGliYnoyLmxhCisKK2xpYmJ6Ml9sYV9TT1VSQ0VTID0gYmxvY2tzb3J0LmMgIFwKKyAgICAgICAgICAgICAgICAgICAgaHVmZm1hbi5jICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY3JjdGFibGUuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgcmFuZHRhYmxlLmMgIFwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3MuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzcy5jIFwKKyAgICAgICAgICAgICAgICAgICAgYnpsaWIuYworCitiaW5fUFJPR1JBTVMgPSBiemlwMiBiemlwMnJlY292ZXIKKworYnppcDJfU09VUkNFUyA9IGJ6aXAyLmMKK2J6aXAyX0xEQUREID0gbGliYnoyLmxhCitiemlwMl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworaW5jbHVkZV9IRUFERVJTID0gYnpsaWIuaAorCitiemlwMnJlY292ZXJfU09VUkNFUyA9IGJ6aXAycmVjb3Zlci5jCitiemlwMnJlY292ZXJfTERBREQgPSBsaWJiejIubGEKK2J6aXAycmVjb3Zlcl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworYmluX1NDUklQVFMgPSBiemdyZXAgYnptb3JlIGJ6ZGlmZgorCittYW5fTUFOUyA9IGJ6aXAyLjEgYnpncmVwLjEgYnptb3JlLjEgYnpkaWZmLjEKK0VYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorCitydW50ZXN0OgorCS4vYnppcDIgLTEgIDwgc2FtcGxlMS5yZWYgPiBzYW1wbGUxLnJiMgorCS4vYnppcDIgLTIgIDwgc2FtcGxlMi5yZWYgPiBzYW1wbGUyLnJiMgorCS4vYnppcDIgLTMgIDwgc2FtcGxlMy5yZWYgPiBzYW1wbGUzLnJiMgorCS4vYnppcDIgLWQgIDwgc2FtcGxlMS5iejIgPiBzYW1wbGUxLnRzdAorCS4vYnppcDIgLWQgIDwgc2FtcGxlMi5iejIgPiBzYW1wbGUyLnRzdAorCS4vYnppcDIgLWRzIDwgc2FtcGxlMy5iejIgPiBzYW1wbGUzLnRzdAorCUBpZiBjbXAgc2FtcGxlMS5iejIgc2FtcGxlMS5yYjI7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMSBjb21wcmVzcyI7IGZpCisJQGlmIGNtcCBzYW1wbGUyLmJ6MiBzYW1wbGUyLnJiMjsgdGhlbiBlY2hvICJQQVNTOiBzYW1wbGUyIGNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTMuYnoyIHNhbXBsZTMucmIyOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTMgY29tcHJlc3MiO1wKKwllbHNlIGVjaG8gIkZBSUw6IHNhbXBsZTMgY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMS50c3Qgc2FtcGxlMS5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUxIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMi50c3Qgc2FtcGxlMi5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMiBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMy50c3Qgc2FtcGxlMy5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMyBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUzIGRlY29tcHJlc3MiOyBmaQorCitpbnN0YWxsLXB0ZXN0OgorCWNwICQoc3JjZGlyKS9NYWtlZmlsZQkJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5iejIJJChERVNURElSKS8KKwlsbiAtcyAkKGJpbmRpcikvYnppcDIJCSQoREVTVERJUikvYnppcDIKKworaW5zdGFsbC1leGVjLWhvb2s6CisJbG4gLXMgJChiaW5kaXIpL2J6aXAyJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnVuemlwMiQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iemlwMiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6Y2F0JChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6Z3JlcCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6ZWdyZXAkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpncmVwJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpmZ3JlcCQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iem1vcmUkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemxlc3MkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpkaWZmJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpjbXAkKEVYRUVYVCkKKworaW5zdGFsbC1kYXRhLWhvb2s6CisJZWNobyAiLnNvIG1hbjEvYnpncmVwLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6ZWdyZXAuMQorCWVjaG8gIi5zbyBtYW4xL2J6Z3JlcC4xIiA+ICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9iemZncmVwLjEKKwllY2hvICIuc28gbWFuMS9iem1vcmUuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpsZXNzLjEKKwllY2hvICIuc28gbWFuMS9iemRpZmYuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpjbXAuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvY29uZmlndXJlLmFjIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWU1NzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxNCBAQAorQUNfUFJFUkVRKFsyLjU3XSkKKworQUNfSU5JVChiemlwMiwgMi4wLjUsICwgbGliWHJlbmRlcikKK0FNX0lOSVRfQVVUT01BS0UoZm9yZWlnbikKK0FNX01BSU5UQUlORVJfTU9ERQorCisjQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKworIyBDaGVjayBmb3IgcHJvZ3MKK0FDX1BST0dfQ0MKK0FDX1BST0dfTElCVE9PTAorCitBQ19PVVRQVVQoW01ha2VmaWxlXSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDItMS4wLjYvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjBmY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMl8xLjAuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNmZTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJWZXJ5IGhpZ2gtcXVhbGl0eSBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJiemlwMiBjb21wcmVzc2VzIGZpbGVzIHVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2stc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYW5kIFwKK0h1ZmZtYW4gY29kaW5nLiBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkgY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwgXAorTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5iemlwLm9yZy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gImJ6aXAyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTtiZWdpbmxpbmU9ODtlbmRsaW5lPTM3O21kNT00MGQ5ZDFlYjA1NzM2ZDFiZmM4NmNmZGQ5MTA2ZTZiMiIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYnppcC5vcmcvJHtQVn0vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYztzdWJkaXI9JHtCUH0gXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW07c3ViZGlyPSR7QlB9IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwYjUxNmY0NzA0ZDRhN2NiNTBhMWQ5N2U2ZThlMTViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyODQ4ZjM0ZmNkNWQ2Y2Y0N2RlZjAwNDYxZmNiNTI4YTA0ODRkOGVkZWY4MjA4ZDZkMmUyOTA5ZGM2MWQ5Y2QiCisKK1BBQ0tBR0VTID0rICJsaWJiejIiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDIC1mcGljIC1XaW5saW5lIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYnVuemlwMiBiemNhdCIKKworI2luc3RhbGwgYmluYXJpZXMgdG8gYnppcDItbmF0aXZlIHVuZGVyIHN5c3Jvb3QgZm9yIHJlcGxhY2VtZW50LW5hdGl2ZQorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tYmluZGlyPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BOfSIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLWYgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorCXNlZCAtaSAtZSAic3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8IiAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitGSUxFU19saWJiejIgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30iCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlXzEuMy41OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkMzRhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSByZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCisKK1NVTU1BUlkgPSAiJHtTVU1NQVJZX2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXN9IgorREVTQ1JJUFRJT04gPSAiJHtERVNDUklQVElPTl9jaGtjb25maWctYWx0ZXJuYXRpdmVzfSIKK0RFUEVORFMgPSAiIgorUFJPVklERVMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworIyBUaGUgc3lzcm9vdCBicmFuY2ggaXMgMS4zLjU5ICsgc29tZSBnaXQgY29tbWl0cyBmcm9tIG1hc3RlciArIC0tc3lzcm9vdAorIyBzdXBwb3J0IGZvciBhbHRlcm5hdGl2ZXMuCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20va2VyZ290aC9jaGtjb25maWc7YnJhbmNoPXN5c3Jvb3QiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiY2Q0MzdlY2JkODk4NmM4OTQ0NDJmOGZjZTFlMDA2MWUyMGYwNGRlZSIKK1BWID0gIjEuMy41OSske1NSQ1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworIyBXZSB3YW50IG91ciBuYXRpdmUgcmVjaXBlcyB0byBidWlsZCB1c2luZyB0aGUgdGFyZ2V0IHBhdGhzIHJhdGhlciB0aGFuIHBhdGhzCisjIGludG8gdGhlIHN5c3Jvb3QsIGFzIHdlIG1heSB1c2UgdGhlbSB0byBjb25zdHJ1Y3QgdGhlIHJvb3Rmcy4gQXMgc3VjaCwgd2UKKyMgb25seSBhZGp1c3QgdGhlIHBhdGhzIHRvIG1hdGNoIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHRhcmdldCwgbm90IG5hdGl2ZS4KK29iZXlfdmFyaWFibGVzICgpIHsKKwlzZWQgLWkgJ3MsQUxURVJOQVRJVkVTX1JPT1QsT1BLR19PRkZMSU5FX1JPT1QsJyBhbHRlcm5hdGl2ZXMuYworfQorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsdGVybmF0aXZlcworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcyBcCisJICAgICAgICAgICAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzCisKKwlpbnN0YWxsIC1EIC1tIDA3NTUgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vYWx0ZXJuYXRpdmVzCisJaW5zdGFsbCAtRCAtbSAwNjQ0IGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOAorCisJbG4gLXMgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcworCWxuIC1zIGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC91cGRhdGUtYWx0ZXJuYXRpdmVzLjgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2xzYgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZ18xLjMuNTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jaGtjb25maWcvY2hrY29uZmlnXzEuMy41OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODg4NDdhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZ18xLjMuNTguYmIKQEAgLTAsMCArMSw2NSBAQAorU1VNTUFSWSA9ICJBIHN5c3RlbSB0b29sIGZvciBtYWludGFpbmluZyB0aGUgL2V0Yy9yYyouZCBoaWVyYXJjaHkiCitERVNDUklQVElPTiA9ICJDaGtjb25maWcgaXMgYSBiYXNpYyBzeXN0ZW0gdXRpbGl0eS4gIEl0IHVwZGF0ZXMgYW5kIHF1ZXJpZXMgcnVubGV2ZWwgXAoraW5mb3JtYXRpb24gZm9yIHN5c3RlbSBzZXJ2aWNlcy4gIENoa2NvbmZpZyBtYW5pcHVsYXRlcyB0aGUgbnVtZXJvdXMgXAorc3ltYm9saWMgbGlua3MgaW4gL2V0Yy9yYy5kLCB0byByZWxpZXZlIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBvZiBzb21lIFwKK29mIHRoZSBkcnVkZ2VyeSBvZiBtYW51YWxseSBlZGl0aW5nIHRoZSBzeW1ib2xpYyBsaW5rcy4iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMS41IHJlcXVpcmVzIHNlbGludXgiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2MvaC9jaGtjb25maWciCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NTc0YzY5NjVhZTVmNTgzZTU1ODgwZTM5N2ZiYjAxOCIKKworREVQRU5EUyA9ICJsaWJuZXd0IHBvcHQiCitQUk9WSURFUyArPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJodHRwOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL2gvY2hrY29uZmlnLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzIwMzljYTY3ZjI3NDlmZTBjMDZlZjdjNmY4ZWUyNDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMThiNDk3ZDI1YjJjYWRhOTU1YzcyODEwZTQ1ZmNhZDgyODBkMTA1ZjE3Y2Y0NWUyOTcwZjE4MjcxMjExZGU2OCIKKworaW5oZXJpdCBnZXR0ZXh0CisKKyMgTWFrZWZpbGUgdXNlcyBSUE1fT1BUX0ZMQUdTIHRvIGNvbnN0cnVjdCBDRkxBR1MKKyMKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ1JQTV9PUFRfRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdCSU5ESVI9JHtiYXNlX3NiaW5kaXJ9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisgICAgJ0FMVERJUj0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMnIFwKKyAgICAnQUxUREFUQURJUj0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcycgXAorIgorCitkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAib2JleV92YXJpYWJsZXMiCitkb191bnBhY2tbdmFyZGVwc10gKz0gIm9iZXlfdmFyaWFibGVzIgorb2JleV92YXJpYWJsZXMgKCkgeworCXNlZCAtaSAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sOyBzLC9saWIvc3lzdGVtZCwke2Jhc2VfbGliZGlyfS9zeXN0ZW1kLCcgJHtTfS9sZXZlbGRiLmgKKwlzZWQgLWkgLWUgJ3MsL2V0Yy9hbHRlcm5hdGl2ZXMsJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC92YXIvbGliL2FsdGVybmF0aXZlcywke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC91c3Ivc2hhcmUvbG9jYWxlLCR7ZGF0YWRpcn0vbG9jYWxlLCcgJHtTfS9hbHRlcm5hdGl2ZXMuYworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ0lOU1RBTExOTFNESVI9JHtEfSR7ZGF0YWRpcn0vbG9jYWxlJyBcCisJCSdCSU5ESVI9JHtzYmluZGlyfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY2hrY29uZmlnLmQKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWFsdGVybmF0aXZlcyAke1BOfS1hbHRlcm5hdGl2ZXMtZG9jIgorU1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXMgPSAiTWFpbnRhaW4gc3ltYm9saWMgbGlua3MgZGV0ZXJtaW5pbmcgZGVmYXVsdCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlcyA9ICJhbHRlcm5hdGl2ZXMgY3JlYXRlcywgcmVtb3ZlcywgbWFpbnRhaW5zIGFuZCBkaXNwbGF5cyBcCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ltYm9saWMgbGlua3MgY29tcHJpc2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbS4iCitTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHtTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlc30gLSBEb2N1bWVudGF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlc30gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKK1JQUk9WSURFU18ke1BOfS1hbHRlcm5hdGl2ZXMgKz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMiCitSQ09ORkxJQ1RTXyR7UE59LWFsdGVybmF0aXZlcyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzID0gIiR7c2JpbmRpcn0vYWx0ZXJuYXRpdmVzICR7c2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyBcCisJCQkgICAgJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW44L3VwZGF0ZS1hbHRlcm5hdGl2ZXMuOCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTIxMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGNwaW8tMi4xMS9nbnUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcGlvLTIuMTEub3JpZy9nbnUvTWFrZWZpbGUuYW0KKysrKyBjcGlvLTIuMTEvZ251L01ha2VmaWxlLmFtCitAQCAtNzM0LDcgKzczNCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9jcGlvLUNWRS0yMDE1LTExOTcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9jcGlvLUNWRS0yMDE1LTExOTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0YWZiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorRGVzY3JpcHRpb246IENWRS0yMDE1LTExOTcKKyBBcHBseSBwYXRjaCBieSBWaXRlenNsYXYgQ2l6ZWsgb2YgU3VTRSB0byBmaXggQ1ZFLTIwMTUtMTE5Ny4KKyBVcHN0cmVhbSBpcyBkb3JtYW50IG9yIG5vIGxvbmdlciBleGlzdGluZy4gVG8gcmVzdG9yZSB0aGUgb2xkCisgYmVoYXZpb3VyIHVzZSAtLWV4dHJhY3Qtb3Zlci1zeW1saW5rcyAoQ2xvc2VzOiAjNzc0NjY5KQorIFRoaXMgaXNzdWUgaGFzIGJlZW4gZGlzY292ZXJlZCBieSBBbGV4YW5kZXIgQ2hlcmVwYW5vdi4KK0F1dGhvcjogVml0ZXpzbGF2IENpemVrIDx2Y2l6ZWtAc3VzZS5jej4KK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc3NDY2OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9kb2MvY3Bpby4xCisrKysgY3Bpby0yLjExK2Rmc2cvZG9jL2NwaW8uMQorQEAgLTIyLDYgKzIyLDcgQEAgY3BpbyBcLSBjb3B5IGZpbGVzIHRvIGFuZCBmcm9tIGFyY2hpdmVzCisgW1wtXC1vd25lcj1bdXNlcl1bOi5dW2dyb3VwXV0gW1wtXC1uby1wcmVzZXJ2ZS1vd25lcl0gW1wtXC1tZXNzYWdlPW1lc3NhZ2VdCisgW1wtXC1mb3JjZVwtbG9jYWxdIFtcLVwtbm9cLWFic29sdXRlXC1maWxlbmFtZXNdIFtcLVwtc3BhcnNlXQorIFtcLVwtb25seVwtdmVyaWZ5XC1jcmNdIFtcLVwtdG9cLXN0ZG91dF0gW1wtXC1xdWlldF0gW1wtXC1yc2gtY29tbWFuZD1jb21tYW5kXQorK1tcLVwtZXh0cmFjdFwtb3Zlclwtc3ltbGlua3NdCisgW1wtXC1oZWxwXSBbXC1cLXZlcnNpb25dIFtwYXR0ZXJuLi4uXSBbPCBhcmNoaXZlXQorIAorIC5CIGNwaW8KKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9jb3B5aW4uYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9jb3B5aW4uYworQEAgLTcwMCw2ICs3MDAsNTEgQEAgY29weWluX2xpbmsgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZQorICAgZnJlZSAobGlua19uYW1lKTsKKyB9CisgDAorKworK3N0YXRpYyBpbnQKKytwYXRoX2NvbnRhaW5zX3N5bWxpbmsoY2hhciAqcGF0aCkKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdDsKKysgIGNoYXIgKnNsYXNoOworKyAgY2hhciAqbmV4dHNsYXNoOworKworKyAgLyogd2UgZ290IE5VTEwgcG9pbnRlciBvciBlbXB0eSBzdHJpbmcgKi8KKysgIGlmICghcGF0aCB8fCAhKnBhdGgpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyAgc2xhc2ggPSBwYXRoOworKworKyAgd2hpbGUgKChuZXh0c2xhc2ggPSBzdHJjaHIoc2xhc2ggKyAxLCAnLycpKSAhPSBOVUxMKSB7CisrICAgIHNsYXNoID0gbmV4dHNsYXNoOworKyAgICAqc2xhc2ggPSAnXDAnOworKworKyAgICBpZiAobHN0YXQocGF0aCwgJnN0KSAhPSAwKSB7CisrICAgICAgaWYgKGVycm5vID09IEVMT09QKSB7CisrICAgICAgICAvKiBFTE9PUCAtIHRvbyBtYW55IHN5bWxpbmtzICovCisrICAgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICB9IGVsc2UgaWYgKGVycm5vID09IEVOT01FTSkgeworKyAgICAgICAgLyogTm8gbWVtb3J5IGZvciBsc3RhdCAtIHRlcm1pbmF0ZSAqLworKyAgICAgICAgeGFsbG9jX2RpZSgpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAvKiBjYW5ub3QgbHN0YXQgcGF0aCAtIGdpdmUgdXAgKi8KKysgICAgICAgICpzbGFzaCA9ICcvJzsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKysgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysKKysgICAgKnNsYXNoID0gJy8nOworKyAgfQorKworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNvcHlpbl9maWxlIChzdHJ1Y3QgY3Bpb19maWxlX3N0YXQgKmZpbGVfaGRyLCBpbnQgaW5fZmlsZV9kZXMpCisgeworQEAgLTE0NzEsNiArMTUxNiwyMyBAQCBwcm9jZXNzX2NvcHlfaW4gKCkKKyAJeworIAkgIC8qIENvcHkgdGhlIGlucHV0IGZpbGUgaW50byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS4gICovCisgCisrICAgICAgICAgIC8qIENhbiB3ZSB3cml0ZSBmaWxlcyBvdmVyIHN5bWxpbmtzPyAqLworKyAgICAgICAgICBpZiAoIWV4dHJhY3Rfb3Zlcl9zeW1saW5rcykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAocGF0aF9jb250YWluc19zeW1saW5rKGZpbGVfaGRyLmNfbmFtZSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSBmaWxlICovCisrICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHdyaXRlIG92ZXIgc3ltbGlua3MuIFNraXBwaW5nICVzXG4iLCBmaWxlX2hkci5jX25hbWUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfdG9zc19pbnB1dCAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLmNfZmlsZXNpemUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHIuY19maWxlc2l6ZSk7CisrICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KKysJICAgICAgICAgIGVycm9yICgxLCAwLCBfKCJDYW4ndCB3cml0ZSBvdmVyIHN5bWxpbmtzOiAlc1xuIiksIGZpbGVfaGRyLmNfbmFtZSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisgCSAgLyogRG8gd2UgbmVlZCB0byByZW5hbWUgdGhlIGZpbGU/ICovCisgCSAgaWYgKHJlbmFtZV9mbGFnIHx8IHJlbmFtZV9iYXRjaF9maWxlKQorIAkgICAgeworLS0tIGNwaW8tMi4xMStkZnNnLm9yaWcvc3JjL2V4dGVybi5oCisrKysgY3Bpby0yLjExK2Rmc2cvc3JjL2V4dGVybi5oCitAQCAtOTUsNiArOTUsNyBAQCBleHRlcm4gY2hhciBpbnB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIGlucHV0X2lzX3NlZWthYmxlOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zZWVrYWJsZTsKKytleHRlcm4gYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisgZXh0ZXJuIGludCAoKnhzdGF0KSAoKTsKKyBleHRlcm4gdm9pZCAoKmNvcHlfZnVuY3Rpb24pICgpOworIAwKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9nbG9iYWwuYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9nbG9iYWwuYworQEAgLTE4Nyw2ICsxODcsOSBAQCBib29sIHRvX3N0ZG91dF9vcHRpb24gPSBmYWxzZTsKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAgKi8KKyBjaGFyICpwcm9ncmFtX25hbWU7CisgCisrLyogRXh0cmFjdCBmaWxlcyBvdmVyIHN5bWJvbGljIGxpbmtzICovCisrYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisrCisgLyogQSBwb2ludGVyIHRvIGVpdGhlciBsc3RhdCBvciBzdGF0LCBkZXBlbmRpbmcgb24gd2hldGhlcgorICAgIGRlcmVmZXJlbmNpbmcgb2Ygc3ltbGlua3MgaXMgZG9uZSBmb3IgaW5wdXQgZmlsZXMuICAqLworIGludCAoKnhzdGF0KSAoKTsKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9tYWluLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvbWFpbi5jCitAQCAtNTcsNyArNTcsOCBAQCBlbnVtIGNwaW9fb3B0aW9ucyB7CisgICBGT1JDRV9MT0NBTF9PUFRJT04sICAgICAgICAgICAgCisgICBERUJVR19PUFRJT04sICAgICAgICAgICAgICAgICAgCisgICBCTE9DS19TSVpFX09QVElPTiwgICAgICAgICAgICAgCistICBUT19TVERPVVRfT1BUSU9OCisrICBUT19TVERPVVRfT1BUSU9OLAorKyAgRVhUUkFDVF9PVkVSX1NZTUxJTktTCisgfTsKKyAKKyBjb25zdCBjaGFyICpwcm9ncmFtX2F1dGhvcnNbXSA9CitAQCAtMjIyLDYgKzIyMyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworICAgIE5fKCJDcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyB3aGVyZSBuZWVkZWQiKSwgR1JJRCsxIH0sCisgICB7Im5vLXByZXNlcnZlLW93bmVyIiwgTk9fUFJFU0VSVkVfT1dORVJfT1BUSU9OLCAwLCAwLAorICAgIE5fKCJEbyBub3QgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGVzIiksIEdSSUQrMSB9LAorKyAgeyJleHRyYWN0LW92ZXItc3ltbGlua3MiLCBFWFRSQUNUX09WRVJfU1lNTElOS1MsIDAsIDAsCisrICAgTl8oIkZvcmNlIHdyaXRpbmcgb3ZlciBzeW1ib2xpYyBsaW5rcyIpLCBHUklEKzEgfSwKKyAgIHsidW5jb25kaXRpb25hbCIsICd1JywgTlVMTCwgMCwKKyAgICBOXygiUmVwbGFjZSBhbGwgZmlsZXMgdW5jb25kaXRpb25hbGx5IiksIEdSSUQrMSB9LAorICAgeyJzcGFyc2UiLCBTUEFSU0VfT1BUSU9OLCBOVUxMLCAwLAorQEAgLTQxMiw2ICs0MTUsMTAgQEAgY3JjIG5ld2Mgb2RjIGJpbiB1c3RhciB0YXIgKGFsbC1jYXBzIGFscworICAgICAgIG5vX2Nob3duX2ZsYWcgPSB0cnVlOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIEVYVFJBQ1RfT1ZFUl9TWU1MSU5LUzoJCSAgICAgICAgLyogLS1leHRyYWN0LW92ZXItc3ltbGlua3MgKi8KKysgICAgICBleHRyYWN0X292ZXJfc3ltbGlua3MgPSB0cnVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlICdvJzoJCS8qIENvcHktb3V0IG1vZGUuICAqLworICAgICAgIGlmIChjb3B5X2Z1bmN0aW9uICE9IDApCisgCWVycm9yIChQQVhFWElUX0ZBSUxVUkUsIDAsIF8oIk1vZGUgYWxyZWFkeSBkZWZpbmVkIikpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Y2QzY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKQEAgLTAsMCArMSwyMjAgQEAKK2NwaW86IEZpeCBtZW1vcnkgb3ZlcnJ1biBvbiByZWFkaW5nIGltcHJvcGVybHkgY3JlYXRlZCBsaW5rIHJlY29yZHMKKworU2lnbmVkLW9mZi1ieTogQmlhbiBOYWltZW5nIDxiaWFubm1AY24uZnVqaXRzdS5jb20+CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NwaW8uZ2l0L2NvbW1pdC8/aWQ9NzQ2ZjNmZjY3MGRjZmNkZDI4ZmNjOTkwZTc5Y2Q2ZmNjYzdhZTQ4ZAorCisgICogc3JjL2NvcHlpbi5jIChnZXRfbGlua19uYW1lKTogTmV3IGZ1bmN0aW9uLgorICAobGlzdF9maWxlLCBjb3B5aW5fbGluayk6IHVzZSBnZXRfbGlua19uYW1lCisKKyAgKiB0ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL3N5bWxpbmstbG9uZy5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCisgICogdGVzdHMvdGVzdHN1aXRlLmF0OiBMaWtld2lzZS4KKworICBTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNlcmdleSBQb3pueWFrb2ZmIDxncmF5QGdudS5vcmcudWE+CisKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvc3JjL2NvcHlpbi5jIGNwaW8tMi4xMS9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuMTEub3JpZy9zcmMvY29weWluLmMJMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvc3JjL2NvcHlpbi5jCTIwMTQtMTItMDggMTM6MTQ6MDQuMzU1NTQ3NTA4ICswODAwCitAQCAtMTI2LDYgKzEyNiwyOCBAQCB0YXBlX3NraXBfcGFkZGluZyAoaW50IGluX2ZpbGVfZGVzLCBvZmZfCisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTY1MCwxMCArNjY3LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0gY3Bpby0yLjExL3Rlc3RzL01ha2VmaWxlLmFtCistLS0gY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvTWFrZWZpbGUuYW0JMjAxNC0xMi0wOCAxMzoxNDo0OS45MzE1NDU3MjcgKzA4MDAKK0BAIC01Miw2ICs1Miw4IEBAIFRFU1RTVUlURV9BVCA9IFwKKyAgc2V0c3RhdDA0LmF0XAorICBzZXRzdGF0MDUuYXRcCisgIHN5bWxpbmsuYXRcCisrIHN5bWxpbmstYmFkLWxlbmd0aC5hdFwKKysgc3ltbGluay1sb25nLmF0XAorICB2ZXJzaW9uLmF0CisgCisgVEVTVFNVSVRFID0gJChzcmNkaXIpL3Rlc3RzdWl0ZQorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMzoxNzo0NS45Nzk1Mzg4NDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMjAxNC0xMi0wOCAxMzoxNzo1Ny4yMTk1Mzg0MDggKzA4MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEuOTAgY2hhbmdlZCB0aGUgd2F5IHN5bWxpbmsgbmFtZSBpcyByZWFkIGZyb20gYXJjaGl2ZS4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstbG9uZ10pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9DSEVDSyhbCisrCisrIyBsZW4oZGlybmFtZSkgPiBSRUFEQlVGU0laRQorK2Rpcm5hbWU9CisrZm9yIGkgaW4gezEuLjUyfTsgZG8KKysgICAgZGlybmFtZT0ieHh4eHh4eHh4LyRkaXJuYW1lIgorKyAgICBta2RpciAiJGRpcm5hbWUiCisrZG9uZQorK2xuIC1zICIkZGlybmFtZSIgeCB8fCBBVF9TS0lQX1RFU1QKKysKKytlY2hvIHggfCBjcGlvIC1vID4gYXIKKytsaXN0PWBjcGlvIC10diA8IGFyIHwgc2VkICdzfC4qLT4gfHwnYAorK3Rlc3QgIiRsaXN0IiA9ICIkZGlybmFtZSIgJiYgZWNobyBzdWNjZXNzIHx8IGVjaG8gZmFpbAorK10sCisrWzBdLAorK1tzdWNjZXNzCisrXSxbMiBibG9ja3MKKysyIGJsb2NrcworK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy90ZXN0c3VpdGUuYXQgY3Bpby0yLjExL3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDEwLTAyLTE1IDE4OjAyOjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy90ZXN0c3VpdGUuYXQJMjAxNC0xMi0wOCAxMzoxNToxMy41MTU1NDQ4MDUgKzA4MDAKK0BAIC0zMSw2ICszMSw4IEBAIG00X2luY2x1ZGUoW3ZlcnNpb24uYXRdKQorIAorIG00X2luY2x1ZGUoW2lub3V0LmF0XSkKKyBtNF9pbmNsdWRlKFtzeW1saW5rLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWJhZC1sZW5ndGguYXRdKQorK200X2luY2x1ZGUoW3N5bWxpbmstbG9uZy5hdF0pCisgbTRfaW5jbHVkZShbaW50ZXJkaXIuYXRdKQorIAorIG00X2luY2x1ZGUoW3NldHN0YXQwMS5hdF0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9yZW1vdmUtZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDExM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGNwaW8tMi4xMS9nbnUvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNwaW8tMi4xMS5vcmlnL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTM6NDMuMTMzMDY2MjQ3IC0wNzAwCisrKysgY3Bpby0yLjExL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTQ6MTAuMTg5MDY3NTY0IC0wNzAwCitAQCAtMTM4LDggKzEzOCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9zdGF0ZGVmLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmI4ZTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBdm9pZCBtdWx0aXBsZSBzdGF0IGRlZmluaXRpb25zCitQYXRjaCB0YWtlbiBmcm9tIGNwaW8gbWFpbGluZyBsaXN0IHBvc3RpbmcgMjAxMC0wMy0xOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmggY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAorLS0tIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaAkyMDEwLTAyLTEyIDAyOjE5OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wNy0yMyAxMzoxNzoyNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC04Miw0ICs4Miw2IEBACisgI2RlZmluZSBsc3RhdCBzdGF0CisgI2VuZGlmCisgaW50IGxzdGF0ICgpOworKyNpZm5kZWYgc3RhdAorIGludCBzdGF0ICgpOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTdjZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWdmaXg6IGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjRdCisKK1RoaXMgcGF0Y2ggYXZvaWRzIGhlYXAgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgOgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNAorCitUaGlzIGlzIGEgY2xlYW4gcGF0Y2ggZm9yIHRoZSBHUEx2MiB0YXIgcmVjaXBlLgorCit0aGUgR1BMdjIgdGFyIHJlY2lwZSBwYXRjaCBpcyBhbHNvIGFwcGxpY2FibGUgdG8gdGhpcyBHUEx2MiBjcGlvIAorcmVjaXBlLCBhcyB0aGV5IHNoYXJlIGNvZGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjUKKworSW5kZXg6IHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGFyLTEuMTcub3JpZy9saWIvcnRhcGVsaWIuYworKysrIHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCitAQCAtNTcwLDcgKzU3MCw3IEBAIHJtdF9yZWFkX18gKGludCBoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2kKKyAKKyAgIHNwcmludGYgKGNvbW1hbmRfYnVmZmVyLCAiUiVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCk7CisgICBpZiAoZG9fY29tbWFuZCAoaGFuZGxlLCBjb21tYW5kX2J1ZmZlcikgPT0gLTEKKy0gICAgICB8fCAoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKQorKyAgICAgIHx8ICgoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKSB8fCAoc3RhdHVzID4gbGVuZ3RoKSkKKyAgICAgcmV0dXJuIFNBRkVfUkVBRF9FUlJPUjsKKyAKKyAgIGZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBzdGF0dXM7IGNvdW50ZXIgKz0gcmxlbiwgYnVmZmVyICs9IHJsZW4pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNDhlNzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApAQCAtMCwwICsxLDIxNyBAQAorY3BpbzogRml4IG1lbW9yeSBvdmVycnVuIG9uIHJlYWRpbmcgaW1wcm9wZXJseSBjcmVhdGVkIGxpbmsgcmVjb3JkcworCitTaWduZWQtb2ZmLWJ5OiBCaWFuIE5haW1lbmcgPGJpYW5ubUBjbi5mdWppdHN1LmNvbT4KKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY3Bpby5naXQvY29tbWl0Lz9pZD03NDZmM2ZmNjcwZGNmY2RkMjhmY2M5OTBlNzljZDZmY2NjN2FlNDhkCisKKyAgKiBzcmMvY29weWluLmMgKGdldF9saW5rX25hbWUpOiBOZXcgZnVuY3Rpb24uCisgIChsaXN0X2ZpbGUsIGNvcHlpbl9saW5rKTogdXNlIGdldF9saW5rX25hbWUKKworICAqIHRlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvc3ltbGluay1sb25nLmF0OiBOZXcgZmlsZS4KKyAgKiB0ZXN0cy9NYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcy4KKyAgKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IExpa2V3aXNlLgorCisgIFNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2VyZ2V5IFBvem55YWtvZmYgPGdyYXlAZ251Lm9yZy51YT4KKworZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYyBjcGlvLTIuOC9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYwkyMDA3LTA2LTA3IDE5OjU4OjAzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3NyYy9jb3B5aW4uYwkyMDE0LTEyLTA4IDExOjMwOjAxLjE1OTc5MTQ4NCArMDgwMAorQEAgLTEyNiw2ICsxMjYsMjggQEAgdGFwZV9za2lwX3BhZGRpbmcgKGludCBpbl9maWxlX2RlcywgaW50CisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTczMiwxMCArNzQ5LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9NYWtlZmlsZS5hbSBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAwNi0xMC0yNCAxODozMjoxMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQkyMDE0LTEyLTA4IDExOjMwOjUyLjM4Nzc4OTQ4MiArMDgwMAorQEAgLTQ1LDYgKzQ1LDggQEAgVEVTVFNVSVRFX0FUID0gXAorICB0ZXN0c3VpdGUuYXRcCisgIGlub3V0LmF0XAorICBzeW1saW5rLmF0XAorKyBzeW1saW5rLWJhZC1sZW5ndGguYXRcCisrIHN5bWxpbmstbG9uZy5hdFwKKyAgdmVyc2lvbi5hdAorIAorIFRFU1RTVUlURSA9ICQoc3JjZGlyKS90ZXN0c3VpdGUKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CistLS0gY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMTozMzoyNS4yODM3ODM1MDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdCBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWxvbmcuYXQKKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkyMDE0LTEyLTA4IDExOjM0OjI4LjgwNzc4MTAyNCArMDgwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbTR0ZSB0byBjcmVhdGUgdGVzdHN1aXRlLiAgLSotIEF1dG90ZXN0IC0qLQorKyMgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEgVVNBLgorKworKyMgQ3BpbyB2Mi4xMS45MCBjaGFuZ2VkIHRoZSB3YXkgc3ltbGluayBuYW1lIGlzIHJlYWQgZnJvbSBhcmNoaXZlLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1sb25nXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0NIRUNLKFsKKysKKysjIGxlbihkaXJuYW1lKSA+IFJFQURCVUZTSVpFCisrZGlybmFtZT0KKytmb3IgaSBpbiB7MS4uNTJ9OyBkbworKyAgICBkaXJuYW1lPSJ4eHh4eHh4eHgvJGRpcm5hbWUiCisrICAgIG1rZGlyICIkZGlybmFtZSIKKytkb25lCisrbG4gLXMgIiRkaXJuYW1lIiB4IHx8IEFUX1NLSVBfVEVTVAorKworK2VjaG8geCB8IGNwaW8gLW8gPiBhcgorK2xpc3Q9YGNwaW8gLXR2IDwgYXIgfCBzZWQgJ3N8LiotPiB8fCdgCisrdGVzdCAiJGxpc3QiID0gIiRkaXJuYW1lIiAmJiBlY2hvIHN1Y2Nlc3MgfHwgZWNobyBmYWlsCisrXSwKKytbMF0sCisrW3N1Y2Nlc3MKKytdLFsyIGJsb2NrcworKzIgYmxvY2tzCisrXSkKKysKKytBVF9DTEVBTlVQCitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0IGNwaW8tMi44L3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMDYtMTAtMjQgMTg6MzI6MTMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMTQtMTItMDggMTE6MzQ6NTYuNTE1Nzc5OTQyICswODAwCitAQCAtMzEsMyArMzEsNSBAQCBtNF9pbmNsdWRlKFt2ZXJzaW9uLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtpbm91dC5hdF0pCisgbTRfaW5jbHVkZShbc3ltbGluay5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1iYWQtbGVuZ3RoLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWxvbmcuYXRdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9tNGV4dGVuc2lvbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L200ZXh0ZW5zaW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY1ODVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9tNGV4dGVuc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRGVmaW5lIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBvbmx5IGlmIGl0IHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZC4KKyMgVGhpcyBpcyBuZWVkZWQgdG8gY29uZmlndXJlIGNvcnJlY3RseSB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mLgorCitkaWZmIC11ck4gY3Bpby0yLjgub3JpZy9tNC9leHRlbnNpb25zLm00IGNwaW8tMi44L200L2V4dGVuc2lvbnMubTQKKy0tLSBjcGlvLTIuOC5vcmlnL200L2V4dGVuc2lvbnMubTQJMjAwNi0xMC0xMiAwNDozNDo0NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBjcGlvLTIuOC9tNC9leHRlbnNpb25zLm00CTIwMTAtMDctMjMgMTQ6Mzc6MzYuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA0ICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgNSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC0xNiw2ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisrbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFtdLCBbCisgQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCitAQCAtNDgsNyArNDksNyBAQAorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrXSldKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvc3RhdGRlZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvc3RhdGRlZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDA3OTlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9zdGF0ZGVmLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEF2b2lkIG11bHRpcGxlIHN0YXQgZGVmaW5pdGlvbnMKKyMgUGF0Y2ggdGFrZW4gZnJvbSBjcGlvIG1haWxpbmcgbGlzdCBwb3N0aW5nIDIwMTAtMDMtMTkKKworZGlmZiAtdXJOIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaCBjcGlvLTIuMTEvc3JjL2ZpbGV0eXBlcy5oCistLS0gY3Bpby0yLjExLm9yaWcvc3JjL2ZpbGV0eXBlcy5oCTIwMTAtMDItMTIgMDI6MTk6MjMuMDAwMDAwMDAwIC0wODAwCisrKysgY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAkyMDEwLTA3LTIzIDEzOjE3OjI1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTgyLDQgKzgyLDYgQEAKKyAjZGVmaW5lIGxzdGF0IHN0YXQKKyAjZW5kaWYKKyBpbnQgbHN0YXQgKCk7CisrI2lmbmRlZiBzdGF0CisgaW50IHN0YXQgKCk7CisrI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZDkyYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi4xMS5iYgpAQCAtMCwwICsxLDE1IEBACitpbmNsdWRlIGNwaW9fdjIuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSIKKworUFIgPSAicjUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMTEyYmI2YzQ1ODYzNDY4YjU0OTZiYTEyODc5MmY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDFiMWQ3NzRjZDZlNGNkMzk0MTYyMDNjOTFlYzU5ZGJkNjVkZDI3ZDc5ZDc1ZTFhOWI4OTQ5N2VhNjQzOTc4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5N2RiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBjcGlvX3YyLmluYworCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjdmNzcyZWEzYTI0ODkyMzFjYjQ4NzI2NTZjYWMzNGIiCisKK1BSID0gInI0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbTRleHRlbnNpb25zLnBhdGNoIFwKKwkgICAgZmlsZTovL2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggXAorCSAgICBmaWxlOi8vZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoIFwKKwkgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2FhMzU2ZTY5ZTE0OWZiNDliNzZiYWNjNjQ2MTVhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYjIwMzI0ODg3NGMzYjVhNzI4YjM1MWYwNjUxM2U1MjgyZjczZTAxNzBiN2YyMDdmYmY4YzM5ZjI4ZjZiNGFkIgorCisjIFJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggZ2NjIDQuMyBhbmQgbGF0ZXI6CitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvX3YyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNkZTRiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJHTlUgY3BpbyBpcyBhIHByb2dyYW0gdG8gbWFuYWdlIGFyY2hpdmVzIG9mIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiR05VIGNwaW8gaXMgYSB0b29sIGZvciBjcmVhdGluZyBhbmQgZXh0cmFjdGluZyBhcmNoaXZlcywgb3IgY29weWluZyBmaWxlcyBmcm9tIG9uZSBwbGFjZSB0byBcCithbm90aGVyLiBJdCBoYW5kbGVzIGEgbnVtYmVyIG9mIGNwaW8gZm9ybWF0cyBhcyB3ZWxsIGFzIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jcGlvLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJ0ZXhpbmZvLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NwaW8vY3Bpby0ke1BWfS50YXIuZ3ogXAorICAgIGZpbGU6Ly9zdGF0ZGVmLnBhdGNoIFwKKyAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitTID0gIiR7V09SS0RJUn0vY3Bpby0ke1BWfSIKKworRVhUUkFfT0VDT05GICs9ICJERUZBVUxUX1JNVF9ESVI9JHtiYXNlX3NiaW5kaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9LworICAgIG12ICIke0R9JHtiaW5kaXJ9L2NwaW8iICIke0R9JHtiYXNlX2JpbmRpcn0vY3BpbyIKKyAgICBybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcm10IgorCitGSUxFU18ke1BOfS1ybXQgPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCoiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNwaW8iCitBTFRFUk5BVElWRV8ke1BOfS1ybXQgPSAicm10IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY3Bpb10gPSAiJHtiYXNlX2JpbmRpcn0vY3BpbyIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbcm10XSA9ICI1MCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtybXRdID0gIiR7YmFzZV9zYmluZGlyfS9ybXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAxLXBhY2tsaWIuYy1zdXBwb3J0LWRpY3Rpb25hcnktYnl0ZS1vcmRlci1kZXBlbmRlbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAxLXBhY2tsaWIuYy1zdXBwb3J0LWRpY3Rpb25hcnktYnl0ZS1vcmRlci1kZXBlbmRlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZTdkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaApAQCAtMCwwICsxLDMzOSBAQAorRnJvbSA4YTZlNDM3MjZhZDBhZTQxYmQxY2MyYzI0OGQ5MWRlYjMxNDU5MzU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjExOjQ4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhY2tsaWIuYzogc3VwcG9ydCBkaWN0aW9uYXJ5IGJ5dGUgb3JkZXIgZGVwZW5kZW50CisKK1RoZSBwcmV2aW91cyBkaWN0IGZpbGVzIGFyZSBOT1QgYnl0ZS1vcmRlciBpbmRlcGVuZGVudCwgaW4gZmFjdCB0aGV5IGFyZQorcHJvYmFibHkgQVJDSElURUNUVVJFIFNQRUNJRklDLgorQ3JlYXRlIHRoZSBkaWN0IGZpbGVzIGluIGJpZyBlbmRpYW4sIGFuZCBjb252ZXJ0IHRvIGhvc3QgZW5kaWFuIHdoaWxlCitsb2FkIHRoZW0uIFRoaXMgY291bGQgZml4IHRoZSBlbmRpYW4gaXNzdWUgb24gbXVsdGlwbGUgcGxhdGZvcm0uCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBjYW4ndCB1c2UgdGhlIGVuZGlhbi5oLCBodG9iZSogYW5kIGJlKnRvaCBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IGFyZQorbm90IGF2YWlsYWJsZSBvbiBvbGRlciB2ZXJzaW9ucyBvZiBnbGliYywgc3VjaCBhcyB0aGF0IGZvdW5kIGluIFJIRUwKKzUuOS4KKworQ2hhbmdlIHRvIGNoZWNraW5nIGVuZGlhbiBhbmQgZGlyZWN0bHkgY2FsbGluZyBic3dhcF8qIGFzIGRlZmluZWQgaW4KK2J5dGVzd2FwLmguCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworU2lnbmVkLW9mZi1ieTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorLS0tCisgbGliL3BhY2tsaWIuYyB8IDIxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3BhY2tsaWIuYyBiL2xpYi9wYWNrbGliLmMKK2luZGV4IGY4NTE0MjQuLjNhYWM4MDUgMTAwNjQ0CistLS0gYS9saWIvcGFja2xpYi5jCisrKysgYi9saWIvcGFja2xpYi5jCitAQCAtMTYsNiArMTYsMTIgQEAKKyAjaWZkZWYgSEFWRV9TVERJTlRfSAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjZW5kaWYKKysKKysjaWZuZGVmIF9CU0RfU09VUkNFCisrI2RlZmluZSBfQlNEX1NPVVJDRSAgICAgICAgICAgICAvKiBTZWUgZmVhdHVyZV90ZXN0X21hY3Jvcyg3KSAqLworKyNlbmRpZgorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyAjaW5jbHVkZSAicGFja2VyLmgiCisgCisgc3RhdGljIGNvbnN0IGNoYXIgdmVyc19pZFtdID0gInBhY2tsaWIuYyA6IHYyLjNwMiBBbGVjIE11ZmZldHQgMTggTWF5IDE5OTMiOworQEAgLTQ1LDYgKzUxLDE4NSBAQCB0eXBlZGVmIHN0cnVjdAorICAgICBjaGFyIGRhdGFfZ2V0W05VTVdPUkRTXVtNQVhXT1JETEVOXTsKKyB9IFBXRElDVDY0OworIAorK2VudW17CisrICAgIGVuX2lzMzIsCisrICAgIGVuX2lzNjQKKyt9OworKworK3N0YXRpYyBpbnQKKytJaGVhZGVySG9zdFRvQmlnRW5kaWFuKGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljLCBwSGVhZGVyMzItPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4sIHBIZWFkZXIzMi0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgICAgcEhlYWRlcjMyLT5waWhfbWFnaWMsIHBIZWFkZXIzMi0+cGloX251bXdvcmRzLAorKyAgICAgICAgICAgIHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyMzItPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVpdGhlciAzMiBvciA2NDogJWRcbiIsIG5CaXRUeXBlKTsKKysgICAgICAgIHJldHVybiAoLTEpOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSHdtc0hvc3RUb0JpZ0VuZGlhbihjaGFyICpwSHdtcywgaW50IG5MZW4saW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCA9IGJzd2FwXzY0KCpwSHdtczY0KTsKKysgICAgICAgICAgICAqcEh3bXM2NCsrOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytId21zQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBId21zLCBpbnQgbkxlbiwgaW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCsrID0gYnN3YXBfNjQoKnBId21zNjQpOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorIAorIHN0YXRpYyBpbnQKKyBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKK0BAIC01Nyw2ICsyNDIsNyBAQCBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKKysgICAgSWhlYWRlckJpZ0VuZGlhblRvSG9zdCgoY2hhciAqKSAmcGRlc2M2NC5oZWFkZXIsIGVuX2lzNjQpOworICAgICByZXR1cm4gKHBkZXNjNjQuaGVhZGVyLnBpaF9tYWdpYyA9PSBQSUhfTUFHSUMpOworIH0KKyAKK0BAIC0xNDksNyArMzM1LDExIEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCXBkZXNjLmhlYWRlci5waWhfYmxvY2tsZW4gPSBOVU1XT1JEUzsKKyAJcGRlc2MuaGVhZGVyLnBpaF9udW13b3JkcyA9IDA7CisgCistCWZ3cml0ZSgoY2hhciAqKSAmcGRlc2MuaGVhZGVyLCBzaXplb2YocGRlc2MuaGVhZGVyKSwgMSwgaWZwKTsKKysJc3RydWN0IHBpX2hlYWRlciB0bXBoZWFkZXIzMjsKKysKKysJbWVtY3B5KCZ0bXBoZWFkZXIzMiwgICZwZGVzYy5oZWFkZXIsIHNpemVvZihwZGVzYy5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlmd3JpdGUoKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBzaXplb2YodG1waGVhZGVyMzIpLCAxLCBpZnApOworICAgICB9IGVsc2UKKyAgICAgeworIAlwZGVzYy5mbGFncyAmPSB+UEZPUl9XUklURTsKK0BAIC0xNzMsNiArMzYzLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJICAgIHJldHVybiBOVUxMOworIAl9CisgCisrICAgICAgICBJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KChjaGFyICopICZwZGVzYy5oZWFkZXIsIGVuX2lzMzIpOworICAgICAgICAgaWYgKChwZGVzYy5oZWFkZXIucGloX21hZ2ljID09IDApIHx8IChwZGVzYy5oZWFkZXIucGloX251bXdvcmRzID09IDApKQorICAgICAgICAgeworICAgICAgICAgICAgIC8qIHVoLW9oLiBlaXRoZXIgYSBicm9rZW4gIjY0LWJpdCIgZmlsZSBvciBhIGdhcmJhZ2UgZmlsZS4gKi8KK0BAIC0xOTUsNiArMzg2LDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJCX0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEloZWFkZXJCaWdFbmRpYW5Ub0hvc3QoKGNoYXIgKikgJnBkZXNjNjQuaGVhZGVyLCBlbl9pczY0KTsKKyAgICAgICAgICAgICBpZiAocGRlc2M2NC5oZWFkZXIucGloX21hZ2ljICE9IFBJSF9NQUdJQykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIC8qIG5vcGUsIG5vdCAiNjQtYml0IiBhZnRlciBhbGwgKi8KK0BAIC0yOTAsNiArNDgyLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBId21zQmlnRW5kaWFuVG9Ib3N0KChjaGFyKilwZGVzYzY0Lmh3bXMsIHNpemVvZihwZGVzYzY0Lmh3bXMpLCBlbl9pczY0KTsKKyAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihwZGVzYy5od21zKSAvIHNpemVvZihwZGVzYy5od21zWzBdKTsgaSsrKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBwZGVzYy5od21zW2ldID0gcGRlc2M2NC5od21zW2ldOworQEAgLTI5OSw2ICs0OTIsNyBAQCBQV09wZW4ocHJlZml4LCBtb2RlKQorIAkgICAgeworIAkJcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAJICAgIH0KKysJICAgIEh3bXNCaWdFbmRpYW5Ub0hvc3QoKGNoYXIqKXBkZXNjLmh3bXMsIHNpemVvZihwZGVzYy5od21zKSwgZW5faXMzMik7CisgI2lmIERFQlVHCisgICAgICAgICAgICAgZm9yIChpPTE7IGk8PTB4ZmY7IGkrKykKKyAgICAgICAgICAgICB7CitAQCAtMzMyLDcgKzUyNiwxMSBAQCBQV0Nsb3NlKHB3cCkKKyAJICAgIHJldHVybiAoLTEpOworIAl9CisgCistCWlmICghZndyaXRlKChjaGFyICopICZwd3AtPmhlYWRlciwgc2l6ZW9mKHB3cC0+aGVhZGVyKSwgMSwgcHdwLT5pZnApKQorKwlzdHJ1Y3QgcGlfaGVhZGVyIHRtcGhlYWRlcjMyOworKworKwltZW1jcHkoJnRtcGhlYWRlcjMyLCAgJnB3cC0+aGVhZGVyLCBzaXplb2YocHdwLT5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlpZiAoIWZ3cml0ZSgoY2hhciAqKSAmdG1waGVhZGVyMzIsIHNpemVvZih0bXBoZWFkZXIzMiksIDEsIHB3cC0+aWZwKSkKKyAJeworIAkgICAgZnByaW50ZihzdGRlcnIsICJpbmRleCBtYWdpYyBmd3JpdGUgZmFpbGVkXG4iKTsKKyAJICAgIHJldHVybiAoLTEpOworQEAgLTM1MSw3ICs1NDksMTIgQEAgUFdDbG9zZShwd3ApCisgCSAgICAJcHJpbnRmKCJod21bJTAyeF0gPSAlZFxuIiwgaSwgcHdwLT5od21zW2ldKTsKKyAjZW5kaWYKKyAJICAgIH0KKy0JICAgIGZ3cml0ZShwd3AtPmh3bXMsIDEsIHNpemVvZihwd3AtPmh3bXMpLCBwd3AtPndmcCk7CisrCisrCSAgICBQV0RJQ1QgdG1wX3B3cDsKKysKKysJICAgIG1lbWNweSgmdG1wX3B3cCwgcHdwLCBzaXplb2YoUFdESUNUKSk7CisrCSAgICBId21zSG9zdFRvQmlnRW5kaWFuKHRtcF9wd3AuaHdtcywgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIGVuX2lzMzIpOworKwkgICAgZndyaXRlKHRtcF9wd3AuaHdtcywgMSwgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIHB3cC0+d2ZwKTsKKyAJfQorICAgICB9CisgCitAQCAtNDA1LDcgKzYwOCw4IEBAIFB1dFBXKHB3cCwgc3RyaW5nKQorIAorIAlkYXR1bSA9ICh1aW50MzJfdCkgZnRlbGwocHdwLT5kZnApOworIAorLQlmd3JpdGUoKGNoYXIgKikgJmRhdHVtLCBzaXplb2YoZGF0dW0pLCAxLCBwd3AtPmlmcCk7CisrCXVpbnQzMl90IHRtcGRhdHVtID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfMzIoZGF0dW0pIDogZGF0dW07CisrCWZ3cml0ZSgoY2hhciAqKSAmdG1wZGF0dW0sIHNpemVvZih0bXBkYXR1bSksIDEsIHB3cC0+aWZwKTsKKyAKKyAJZnB1dHMocHdwLT5kYXRhX3B1dFswXSwgcHdwLT5kZnApOworIAlwdXRjKDAsIHB3cC0+ZGZwKTsKK0BAIC00NjQsNiArNjY4LDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bTY0ID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfNjQoZGF0dW02NCkgOiBkYXR1bTY0OworICAgICAgICBkYXR1bSA9IGRhdHVtNjQ7CisgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmc2Vlayhwd3AtPmlmcCwgc2l6ZW9mKHN0cnVjdCBwaV9oZWFkZXIpICsgKHRoaXNibG9jayAqIHNpemVvZih1aW50MzJfdCkpLCAwKSkKK0BAIC00NzcsNiArNjgyLDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bSA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzMyKGRhdHVtKSA6IGRhdHVtOworICAgICB9CisgCisgCWludCByID0gMTsKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjEwZTgyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDA2ZjlhODhiNWRkNTU5N2Y5MTk4ZWEwY2IzNGY1ZTk2ZjE4MGU2ZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDI3IEFwciAyMDEzIDE2OjAyOjMwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyYWtsaWI6Zml4IHRlc3RudW0gYW5kIHRlc3RzdHIgZmFpbGVkCisKK0Vycm9yIGxvZzoKKy4uLgorJCAuL3Rlc3RudW0KKyhudWxsKS5wd2QuZ3o6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK1BXT3BlbjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCiskIC4vdXRpbC90ZXN0c3RyCisobnVsbCkucHdkLmd6OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQV09wZW46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy4uLgorU2V0IERFRkFVTFRfQ1JBQ0tMSUJfRElDVCBhcyB0aGUgcGF0aCBvZiAgUFdPcGVuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdXRpbC90ZXN0bnVtLmMgfCAgICAyICstCisgdXRpbC90ZXN0c3RyLmMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RudW0uYyBiL3V0aWwvdGVzdG51bS5jCitpbmRleCBhZTIyNDZkLi5jYTIxMGZmIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0bnVtLmMKKysrKyBiL3V0aWwvdGVzdG51bS5jCitAQCAtMjAsNyArMjAsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RzdHIuYyBiL3V0aWwvdGVzdHN0ci5jCitpbmRleCAyYTMxZmE0Li45ZmI5Y2RhIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0c3RyLmMKKysrKyBiL3V0aWwvdGVzdHN0ci5jCitAQCAtMTUsNyArMTUsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYl8yLjkuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGZmZTMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJQYXNzd29yZCBzdHJlbmd0aCBjaGVja2VyIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NyYWNrbGliIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1lM2VkYTAxZDk4MTVmOGQyNGFhZTJkYmQ4OWI2OGIwNiIKKworREVQRU5EUyA9ICJjcmFja2xpYi1uYXRpdmUgemxpYiBweXRob24iCitSREVQRU5EXyR7UE59LXB5dGhvbiArPSAicHl0aG9uIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXB5dGhvbiAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vY3JhY2tsaWIvY3JhY2tsaWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzc2NzkwYTk1YzFmYjY0NWU1OWU2ZTk4MDNjNzg1ODIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTlhYjAxMzhiYzhjZjkwY2NjYjg1MDliNjk2OWEwMjRkNWU1OGQyZDAyYmNiZGNjYmI5YmE5Yjg4YmUzZmEzMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBweXRob25uYXRpdmUgcHl0aG9uLWRpcgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJY3JlYXRlLWNyYWNrbGliLWRpY3QgLW8gJHtEfSR7ZGF0YWRpcn0vY3JhY2tsaWIvcHdfZGljdCAke0R9JHtkYXRhZGlyfS9jcmFja2xpYi9jcmFja2xpYi1zbWFsbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzcmNfZGlyPSIke0R9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCXJtIC1mICRzcmNfZGlyLyoucHlvCisJcm0gLWYgJHNyY19kaXIvdGVzdF9jcmFja2xpYi5weQorCSMgTW92ZSBweXRob24gZmlsZXMgZnJvbSAke2Jhc2VfbGliZGlyfSB0byAke2xpYmRpcn0gc2luY2UgdXNlZCAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfQorCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJbXYgJHNyY19kaXIvKiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKwlybSAtZnIgJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vY3JhY2tsaWIucHkgXAorCSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcvX2NyYWNrbGliLnNvIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9fY3JhY2tsaWIuYSBcCisJJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLmxhIFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLmluaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNiODUxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuaW5pdApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGNyb25kIGNyb250YWIKKyMgRGVmYXVsdC1TdGFydDogIDIzNDUKKyMgRGVmYXVsdC1TdG9wOiAgIDAxNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogcnVuIGNyb24gZGFlbW9uCisjIERlc2NyaXB0aW9uOiBjcm9uIGlzIGEgc3RhbmRhcmQgVU5JWCBwcm9ncmFtIHRoYXQgcnVucyB1c2VyLXNwZWNpZmllZAorIyAgICAgICAgICAgICAgcHJvZ3JhbXMgYXQgcGVyaW9kaWMgc2NoZWR1bGVkIHRpbWVzLiB2aXhpZSBjcm9uIGFkZHMgYQorIyAgICAgICAgICAgICAgbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHRoZSBiYXNpYyBVTklYIGNyb24sIGluY2x1ZGluZyBiZXR0ZXIKKyMgICAgICAgICAgICAgIHNlY3VyaXR5IGFuZCBtb3JlIHBvd2VyZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0NST05EPS91c3Ivc2Jpbi9jcm9uZAorQ09ORklHPS9ldGMvc3lzY29uZmlnL2Nyb25kCisKK1sgLWYgJENPTkZJRyBdIHx8IGV4aXQgMQorWyAteCAkQ1JPTkQgXSB8fCBleGl0IDEKKworLiAkQ09ORklHCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZWNobyAtbiAiU3RhcnRpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjICRDUk9ORCAtLSAkQ1JPTkRBUkdTCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAtbiAiU3RvcHBpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vY3JvbmQucGlkCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgY3JvbmQKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICAkMCBzdG9wICYmIHNsZWVwIDEgJiYgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9jcm9uZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQzNWE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBlcmlvZGljIENvbW1hbmQgU2NoZWR1bGVyCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Nyb25kCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2Nyb25kIC1uICRDUk9OREFSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1Jlc3RhcnQ9YWx3YXlzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmRfcGFtX2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU4NzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3Bhc3N3b3JkLWF1dGggaXMgdGhlIEZlZG9yYSdzIGNvbW1vbiBwYW0gY29uZmlndXJlIGZpbGUsIHVzZSBvZSBjb21tb24gcGFtCitjb25maWd1cmUgZmlsZXMgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQub3JpZwkyMDEwLTEyLTE2IDE2OjU5OjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQJMjAxMS0wNy0yMCAwOTo0NzoxNi4wODA4MTkyMDMgKzA4MDAKK0BAIC00LDcgKzQsNyBAQAorICMKKyAjIE5vIFBBTSBhdXRoZW50aWNhdGlvbiBjYWxsZWQsIGF1dGggbW9kdWxlcyBub3QgbmVlZGVkCisgYWNjb3VudCAgICByZXF1aXJlZCAgIHBhbV9hY2Nlc3Muc28KKy1hY2NvdW50ICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorK2FjY291bnQgICAgaW5jbHVkZSAgICBjb21tb24tYWNjb3VudAorIHNlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbG9naW51aWQuc28KKy1zZXNzaW9uICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorLWF1dGggICAgICAgaW5jbHVkZSAgICBwYXNzd29yZC1hdXRoCisrc2Vzc2lvbiAgICBpbmNsdWRlICAgIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCisrYXV0aCAgICAgICBpbmNsdWRlICAgIGNvbW1vbi1hdXRoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb250YWIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb250YWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjNGZlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbnRhYgpAQCAtMCwwICsxLDE0IEBACisjIC9ldGMvY3JvbnRhYjogc3lzdGVtLXdpZGUgY3JvbnRhYgorIyBVbmxpa2UgYW55IG90aGVyIGNyb250YWIgeW91IGRvbid0IGhhdmUgdG8gcnVuIHRoZSBgY3JvbnRhYicKKyMgY29tbWFuZCB0byBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiB3aGVuIHlvdSBlZGl0IHRoaXMgZmlsZQorIyBhbmQgZmlsZXMgaW4gL2V0Yy9jcm9uLmQuIFRoZXNlIGZpbGVzIGFsc28gaGF2ZSB1c2VybmFtZSBmaWVsZHMsCisjIHRoYXQgbm9uZSBvZiB0aGUgb3RoZXIgY3JvbnRhYnMgZG8uCisKK1NIRUxMPS9iaW4vc2gKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgIG0gIGggIGRvbSBtb24gZG93IHVzZXIJY29tbWFuZAorIyAgMSAgKiAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmhvdXJseQorIyAzMCAgNyAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmRhaWx5CisjIDQyICA3ICAgICAqICogNyAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ud2Vla2x5CisjIDU1ICA3ICAgICAxICogKiAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ubW9udGhseQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiZDU5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIKQEAgLTAsMCArMSw4MSBAQAorU1VNTUFSWSA9ICJDcm9uIGRhZW1vbiBmb3IgZXhlY3V0aW5nIHByb2dyYW1zIGF0IHNldCB0aW1lcyIKK0RFU0NSSVBUSU9OID0gIkNyb25pZSBjb250YWlucyB0aGUgc3RhbmRhcmQgVU5JWCBkYWVtb24gY3JvbmQgdGhhdCBydW5zIFwKK3NwZWNpZmllZCBwcm9ncmFtcyBhdCBzY2hlZHVsZWQgdGltZXMgYW5kIHJlbGF0ZWQgdG9vbHMuIEl0IGlzIGJhc2VkIG9uIHRoZSBcCitvcmlnaW5hbCBjcm9uIGFuZCBoYXMgc2VjdXJpdHkgYW5kIGNvbmZpZ3VyYXRpb24gZW5oYW5jZW1lbnRzIGxpa2UgdGhlIFwKK2FiaWxpdHkgdG8gdXNlIHBhbSBhbmQgU0VMaW51eC4iCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvY3JvbmllLyIKK0JVR1RSQUNLRVIgPSAibW1hc2xhbm9AcmVkaGF0LmNvbSIKKworIyBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0gTGljZW5zZQorTElDRU5TRSA9ICJJU0MgJiBCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZDJhNTkyMTcwNzYwZTEzODZjNzY5ZTEwNDNiMzcyMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3Jvbi5jO2VuZGxpbmU9MjA7bWQ1PWI0MjVjMzM0MjY1MDI2MTc3MTI4MzUzYTE0MjYzM2I0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wb3Blbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MzE7bWQ1PWVkZDUwNzQyZDhkZWY3MTJlOTQ3MmRiYTM1MzY2OGE5IgorCitTRUNUSU9OID0gInV0aWxzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL3IvY3JvbmllL2Nyb25pZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY3JvbmQuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9udGFiIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLnNlcnZpY2UgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0iCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9jcm9uZF9wYW1fY29uZmlnLnBhdGNoIgorUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tYWNjZXNzIHBhbS1wbHVnaW4tbG9naW51aWQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZGI3NWUxODg0ZDgzYTQ1ZTAwMmQxNDVjNmM1NGQ0NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Y2YwZTNmNGY1MDQyYTljMDk0MTNkNjJjOGUwYzA1NWUxMjQwMWY3MGIxMTI0NjVmMGY4MWYyYzg0ZWJmYjNmIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS13aXRoLWF1ZGl0LC0td2l0aG91dC1hdWRpdCxhdWRpdCwiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLXBhbSwtLXdpdGhvdXQtcGFtLGxpYnBhbSwke1BBTV9ERVBTfSIKKworSU5JVFNDUklQVF9OQU1FID0gImNyb25kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTAgMiAzIDQgNSAuIHN0b3AgNjAgMCAxIDYgLiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGNyb250YWIiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjcm9uZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vY3JvbmQuc3lzY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9jcm9uZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Nyb25kLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nyb25kCisKKwkjIGluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Nyb25kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY3JvbmQuc2VydmljZQorCisJIyBiZWxvdyBhcmUgbmVjZXNzYXJ5IGZvciBhIGNvbXBsZXRlIGNyb24gZW52aXJvbm1lbnQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9udGFiICR7RH0ke3N5c2NvbmZkaXJ9LworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZAorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uaG91cmx5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ud2Vla2x5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5tb250aGx5CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kZW55CisKKwkjIGJlbG93IHNldHRpbmcgaXMgbmVjZXNzYXJ5IHRvIGFsbG93IG5vcm1hbCB1c2VyIHVzaW5nIGNyb250YWIKKworCSMgc2V0Z2lkIGZvciBjcm9udGFiIGJpbmFyeQorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKwljaG1vZCAyNzU1ICR7RH0ke2JpbmRpcn0vY3JvbnRhYgorCisJIyBhbGxvdyAnY3JvbnRhYicgZ3JvdXAgd3JpdGUgdG8gL3Zhci9zcG9vbC9jcm9uCisJY2hvd24gcm9vdDpjcm9udGFiICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwljaG1vZCA3NzAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvY3JvbgorCisJY2htb2QgNjAwICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb250YWIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbioiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbnRhYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Y2RmMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCkBAIC0wLDAgKzEsMTIzIEBACitTVU1NQVJZID0gIkFuIEludGVybmV0IHByaW50aW5nIHN5c3RlbSBmb3IgVW5peCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitERVBFTkRTID0gImdudXRscyBsaWJwbmcganBlZyBkYnVzIGRidXMtZ2xpYiB6bGliIGxpYnVzYiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLyR7UFZ9LyR7QlB9LXNvdXJjZS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRvbi10LXRyeS10by1ydW4tZ2VuZXJhdGVkLWJpbmFyaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHNfc2VydmVyYmluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMucGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnNlcnZpY2UgXAorCSAgIgorCitMRUFEX1NPTkFNRSA9ICJsaWJjdXBzZHJpdmVyLnNvIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgYmluY29uZmlnIHVzZXJhZGQgc3lzdGVtZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gbHBhZG1pbiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImN1cHMuc29ja2V0IGN1cHMucGF0aCBjdXBzLnNlcnZpY2UiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0tZW5hYmxlLWF2YWhpLC0tZGlzYWJsZS1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLCAtLWRpc2FibGUtcGFtLCBsaWJwYW0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtZ251dGxzIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWRidXMgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtYnJvd3NpbmcgXAorICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzc2FwaSBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1kZWJ1ZyBcCisgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVscm8gXAorICAgICAgICAgICAgICAgLS1lbmFibGUtbGlidXNiIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1waHAgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXBlcmwgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXB5dGhvbiBcCisgICAgICAgICAgICAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgICAgICAgICAgICAiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb21waWxlICgpIHsKKwllY2hvICJhbGw6IiAgICA+ICBtYW4vTWFrZWZpbGUKKwllY2hvICJsaWJzOiIgPj4gbWFuL01ha2VmaWxlCisJZWNobyAiaW5zdGFsbDoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZGF0YToiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZXhlYzoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtaGVhZGVyczoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtbGliczoiID4+IG1hbi9NYWtlZmlsZQorCisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJEU1RST09UPSR7RH0iIGluc3RhbGwKKworCSMgUmVtb3ZlIC92YXIvcnVuIGZyb20gcGFja2FnZSBhcyBjdXBzZCB3aWxsIHBvcHVsYXRlIGl0IG9uIHN0YXJ0dXAKKwlybSAtZnIgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9LyR7QlBOfS9kcml2ZXIKKworCSMgUmVtb3ZlIHN5c2luaXQgc2NyaXB0IGFuZCBzeW1saW5rcyBpZiBzeXN2aW5pdCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnZmFsc2UnLCd0cnVlJyxkKX07IHRoZW4KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L3JjKgorCWZpCisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5wYXRoICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2N1cHMuc2VydmljZQorfQorCitweXRob24gZG9fcGFja2FnZV9hcHBlbmQoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAjIENoYW5nZSBwZXJtaXNzaW9ucyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJlLCB0aGV5IHByb2JhYmx5IGhhZCBhIHJlYXNvbi4uLgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgc3VicHJvY2Vzcy5jYWxsKCdjaG1vZCAwNTExICVzL2luc3RhbGwvY3Vwcy92YXIvcnVuL2N1cHMvY2VydHMnICUgd29ya2Rpciwgc2hlbGw9VHJ1ZSkKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWxpYiAke1BOfS1saWJpbWFnZSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAncHJvY3BzJywgJycsIGQpfSIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kIFwKKwkJJHtsaWJkaXJ9L2N1cHMvY2dpLWJpbiBcCisJCSR7bGliZGlyfS9jdXBzL2ZpbHRlciBcCisJCSR7bGliZGlyfS9jdXBzL21vbml0b3IgXAorCQkke2xpYmRpcn0vY3Vwcy9ub3RpZmllciBcCisJCSR7bGliZGlyfS9jdXBzL2RhZW1vbiBcCisJICAgICAgICIKKworRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWJjdXBzLnNvLioiCisKK0ZJTEVTXyR7UE59LWxpYmltYWdlID0gIiR7bGliZGlyfS9saWJjdXBzaW1hZ2Uuc28uKiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2NnaS1iaW4vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZmlsdGVyLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL21vbml0b3IvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvbm90aWZpZXIvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZGFlbW9uLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorCisjcGFja2FnZSB0aGUgaHRtbCBmb3IgdGhlIHdlYmd1aSBpbnNpZGUgdGhlIG1haW4gcGFja2FnZXMgKH4xTUIgdW5jb21wcmVzc2VkKQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kb2MvY3Vwcy9pbWFnZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKmh0bWwgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKi5jc3MgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvIFwKKyAgICAgICAgICAgICAgICIKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9jdXBzL2N1cHNkLmNvbmYiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiY3Vwc19zeXNyb290X3ByZXByb2Nlc3MiCitjdXBzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc2VkIC1pICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vY3Vwcy1jb25maWcgLWUgJ3M6Y3Vwc19kYXRhZGlyPS4qOmN1cHNfZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHM6JyAtZSAnczpjdXBzX3NlcnZlcmJpbj0uKjpjdXBzX3NlcnZlcmJpbj0ke2xpYmRpcn0vY3VwczonCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy8wMDAxLWRvbi10LXRyeS10by1ydW4tZ2VuZXJhdGVkLWJpbmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzllYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGcm9tIDkwMDY5NTg2MTY3YjkzMGJlZmNlNzMwM2FlYTU3MDc4ZjA0YjRlZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogU3VuLCAzMCBKYW4gMjAxMSAxNjozNzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBkb24ndCB0cnkgdG8gcnVuIGdlbmVyYXRlZCBiaW5hcmllcworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorLS0tCisgcHBkYy9NYWtlZmlsZSB8ICAgMzAgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGN1cHMtMi4wLjAvcHBkYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMi4wLjAub3JpZy9wcGRjL01ha2VmaWxlCisrKysgY3Vwcy0yLjAuMC9wcGRjL01ha2VmaWxlCitAQCAtMjQyLDggKzI0Miw4IEBAIGdlbnN0cmluZ3M6CQlnZW5zdHJpbmdzLm8gbGliY3Vwc3BwZGMuYQorIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gZ2Vuc3RyaW5ncyBnZW5zdHJpbmdzLm8gXAorIAkJbGliY3Vwc3BwZGMuYSAuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgXAorIAkJJChETlNTRExJQlMpICQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIEdlbmVyYXRpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MuLi4KKy0JLi9nZW5zdHJpbmdzID5zYW1wbGUuYworKyMJZWNobyBHZW5lcmF0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzLi4uCisrIwkuL2dlbnN0cmluZ3MgPnNhbXBsZS5jCisgCisgCisgIworQEAgLTI2MCw5ICsyNjAsOSBAQCBwcGRjLXN0YXRpYzoJCXBwZGMubyBsaWJjdXBzcHBkYy5hIC4uL2N1CisgCSQoQ1hYKSAkKEFSQ0hGTEFHUykgJChMREZMQUdTKSAtbyBwcGRjLXN0YXRpYyBwcGRjLm8gbGliY3Vwc3BwZGMuYSBcCisgCQkuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgJChETlNTRExJQlMpIFwKKyAJCSQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLUkgLi4vZGF0YSBmb28uZHJ2CistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLXogLUkgLi4vZGF0YSBmb28uZHJ2CisrIwllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCisrIwkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC1JIC4uL2RhdGEgZm9vLmRydgorKyMJLi9wcGRjLXN0YXRpYyAtbCBlbixmciAteiAtSSAuLi9kYXRhIGZvby5kcnYKKyAKKyAKKyAjCitAQCAtMjg4LDE3ICsyODgsMTcgQEAgcHBkaS1zdGF0aWM6CQlwcGRjLXN0YXRpYyBwcGRpLm8gbGliY3VwcworIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gcHBkaS1zdGF0aWMgcHBkaS5vIGxpYmN1cHNwcGRjLmEgXAorIAkJLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpICQoRE5TU0RMSUJTKSBcCisgCQkkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorLQkkKFJNKSAtciBwcGQgcHBkMiBzYW1wbGUtaW1wb3J0LmRydgorLQkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgc2FtcGxlLmRydgorLQkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKy0JLi9wcGRjLXN0YXRpYyAtbCBlbiAtSSAuLi9kYXRhIC1kIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKy0JaWYgZGlmZiAtciBwcGQgcHBkMiA+L2Rldi9udWxsOyB0aGVuIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorLQllbHNlIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBGQUlMRUQ7IFwKKy0JCWV4aXQgMTsgXAorLQlmaQorKyMJZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorKyMJJChSTSkgLXIgcHBkIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSBzYW1wbGUuZHJ2CisrIwkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSAtZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CisrIwlpZiBkaWZmIC1yIHBwZCBwcGQyID4vZGV2L251bGw7IHRoZW4gXAorKyMJCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorKyMJZWxzZSBcCisrIwkJZWNobyBQUEQgaW1wb3J0IEZBSUxFRDsgXAorKyMJCWV4aXQgMTsgXAorKyMJZmkKKyAKKyAKKyAjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5wYXRoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZThjYzU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGVyIFNlcnZpY2UgU3Bvb2wKKworW1BhdGhdCitQYXRoRXhpc3RzR2xvYj0vdmFyL3Nwb29sL2N1cHMvZCoKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzZTgzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2N1cHNkIC1mCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitBbHNvPWN1cHMuc29ja2V0IGN1cHMucGF0aAorV2FudGVkQnk9cHJpbnRlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNvY2tldCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzE0ODcwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc29ja2V0CkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UgU29ja2V0cworCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPS92YXIvcnVuL2N1cHMvY3Vwcy5zb2NrCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzX3NlcnZlcmJpbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzX3NlcnZlcmJpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2I0NGE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHNfc2VydmVyYmluLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK01ha2UgQ1VQU19TRVJWRVJCSU4gcmVsYXRpdmUgdG8gbGliZGlyIG90aGVyd2lzZSBvbiA2NGJpdCBhcmNoZXMKK2UuZy4gcHBjNjQgd2hlcmUgYmFzZSBsaWJkaXIgaXMgbGliNjQgdGhpcyBkb2VzIG5vdCBnbyB3ZWxsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS40LjYvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMDktMDQtMTIgMTY6MDQ6NTEuMDAwMDAwMDAwIC0wNzAwCisrKysgY3Vwcy0xLjQuNi9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMTItMDctMjEgMTI6MTI6MDUuODk2NDA1OTIzIC0wNzAwCitAQCAtMzk3LDcgKzM5Nyw3IEBACisgCSopCisgCQkjIEFsbCBvdGhlcnMKKyAJCUlOU1RBTExfU1lTVj0iaW5zdGFsbC1zeXN2IgorLQkJQ1VQU19TRVJWRVJCSU49IiRleGVjX3ByZWZpeC9saWIvY3VwcyIKKysJCUNVUFNfU0VSVkVSQklOPSIkbGliZGlyL2N1cHMiCisgCQk7OworIGVzYWMKKyAKK0luZGV4OiBjdXBzLTEuNC42L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWd1cmUJMjAxMi0wNy0yMSAxMjoxMzozNC41MTI0MDU5NTAgLTA3MDAKKysrKyBjdXBzLTEuNC42L2NvbmZpZ3VyZQkyMDEyLTA3LTIxIDEyOjE0OjA1LjcyNDQwNjAxNyAtMDcwMAorQEAgLTExMTgxLDcgKzExMTgxLDcgQEAKKyAJKikKKyAJCSMgQWxsIG90aGVycworIAkJSU5TVEFMTF9TWVNWPSJpbnN0YWxsLXN5c3YiCistCQlDVVBTX1NFUlZFUkJJTj0iJGV4ZWNfcHJlZml4L2xpYi9jdXBzIgorKwkJQ1VQU19TRVJWRVJCSU49IiRsaWJkaXIvY3VwcyIKKyAJCTs7CisgZXNhYworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2ZjEzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS42LjEvc2NoZWR1bGVyL2N1cHMuc2guaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNi4xLm9yaWcvc2NoZWR1bGVyL2N1cHMuc2guaW4KKysrKyBjdXBzLTEuNi4xL3NjaGVkdWxlci9jdXBzLnNoLmluCitAQCAtNjcsNyArNjcsNyBAQCBjYXNlICJgdW5hbWVgIiBpbgorIAkJRUNIT19FUlJPUj06CisgCQk7OworIAorLQlMaW51eCopCisrCURpc2FibGVMaW51eCopCisgCQlJU19PTj0vYmluL3RydWUKKyAJCWlmIHRlc3QgLWYgL2V0Yy9pbml0LmQvZnVuY3Rpb25zOyB0aGVuCisgCQkJLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwc18yLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQ3M2IzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMC40LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBjdXBzLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NmM1YTM1MDU5NmZiYTAyNzU0YmQ5NmViNmRmM2FmZDAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNWM4NDdkOWE0ZmFjNmM0YzY2ZmIwNTI2YTdhZmFhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMWQ1ZTY4ZDlmMjRmYWNhMzE3YWVhZWJjMTY0YzM0MTAyODEzYmMwZjFkNjljMDBiM2E1OWI0OWM0OWY0YWJkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3dhdXRvbWFjcm9zL2N3YXV0b21hY3Jvc18yMDExMDIwMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlYTNjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIGF1dG9jb25mIG00IG1hY3JvcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3dhdXRvbWFjcm9zLmJlcmxpb3MvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0uYmVybGlvcy8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjA3NGFmY2I1MGQwYThiZmYxMDc4NmEyOTU0YjJiMDJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMxMTU2MDNiODkxZjNhMTYzYzBiYmI1ZmVhMmYzNzQyMTEzYTE4M2ZhNjc0NWVlNWU4OWU1ZjZkMGU5ZjYxMjEiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBDV0FVVE9NQUNST1NQUkVGSVg9JHtEfSR7cHJlZml4fSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0yLjguMS9kaWZmdXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDVkMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmFjOjkwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYWNsb2NhbC0xLjEyL3Byb3Rvcy5tNDoxMjogQU1fQ19QUk9UT1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay9pNTg2LXBva3ktbGludXgvZGlmZnV0aWxzLTIuOC4xLXI0L2RpZmZ1dGlscy0yLjguMS9tNC9wcmVyZXEubTQ6MTEwOiBqbV9QUkVSRVFfUVVPVEVBUkcgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6OTA6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBkaWZmdXRpbHMtMi44LjEvbTQvcHJlcmVxLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGlmZnV0aWxzLTIuOC4xLm9yaWcvbTQvcHJlcmVxLm00CisrKysgZGlmZnV0aWxzLTIuOC4xL200L3ByZXJlcS5tNAorQEAgLTExNSw3ICsxMTUsNiBAQCBBQ19ERUZVTihbam1fUFJFUkVRX1FVT1RFQVJHXSwKKyAgIEFDX0hFQURFUl9TVERDCisgICBBQ19DX0JBQ0tTTEFTSF9BCisgICBBQ19NQlNUQVRFX1QKKy0gIEFNX0NfUFJPVE9UWVBFUworIF0pCisgCisgQUNfREVGVU4oW2ptX1BSRVJFUV9SRUdFWF0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1YzVlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzIGNoZWNrLVRFU1RTCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzM0MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkRpZmZ1dGlscyBjb250YWlucyB0b29scyB1c2VkIGZvciBmaW5kaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gZmlsZXMiCitERVNDUklQVElPTiA9ICJEaWZmdXRpbHMgY29udGFpbnMgdGhlIEdOVSBkaWZmLCBkaWZmMywgXAorc2RpZmYsIGFuZCBjbXAgdXRpbGl0aWVzLiBUaGVzZSBwcm9ncmFtcyBhcmUgdXN1YWxseSBcCit1c2VkIGZvciBjcmVhdGluZyBwYXRjaCBmaWxlcy4iCitTRUNUSU9OID0gImJhc2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0CisKKyMgZGlmZnV0aWxzIGFzc3VtZXMgbm9uLWdsaWJjIGNvbXBpbGF0aW9uIHdpdGggdWNsaWJjIGFuZAorIyB0aGlzIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBpdHMgb3duIGltcGxlbWVudGF0aW9ucyBvZgorIyBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LiAgcmVnZXguYyBhY3R1YWxseSBicmVha3MgY29tcGlsYXRpb24KKyMgYmVjYXVzZSBpdCB1c2VzIF9fbWVtcGNweSwgdGhlcmUgYXJlIG90aGVyIHRoaW5ncyAoVEJEOgorIyBzZWUgZGlmZnV0aWxzLm1rIGluIGJ1aWxkcm9vdCkKK0VYVFJBX09FQ09ORl9saWJjLXVjbGliYyA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImRpZmYgY21wIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzIuOC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjQyNWJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYgpAQCAtMCwwICsxLDE2IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCityZXF1aXJlIGRpZmZ1dGlscy5pbmMKKworUFIgPSAicjcuMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MWY5YzVhZTE5YjYwNjA4ZjZjN2YxNjJkYTg2YTQyOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNTAwMTc0OGIwNjkyMjRkZDk4YmYxYmI5ZWU4NzczMjFjN2RlOGIzMzJjOGFhZDVhZjNlMmE3MzcyZDIzZjVhIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY2htb2QgdSt3ICR7U30vcG8vTWFrZWZpbGUuaW4uaW4KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwODY5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiCkBAIC0wLDAgKzEsMzcgQEAKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK3JlcXVpcmUgZGlmZnV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgTmVlZCB0byByZW1vdmUgZ2V0dGV4dCBtYWNyb3Mgd2l0aCB3ZWlyZCBtaXggb2YgdmVyc2lvbnMKKwlmb3IgaSBpbiBjb2Rlc2V0Lm00IGdldHRleHRfZ2wubTQgaW50bG1hY29zeC5tNCBpbnR0eXBlcy1wcmkubTQgbGliLWxkX2dsLm00IGxpYi1wcmVmaXhfZ2wubTQgcG9fZ2wubTQgc3NpemVfdC5tNCB3Y2hhcl90Lm00IHdpbnRfdC5tNDsgZG8KKwkJcm0gLWYgJHtTfS9tNC8kaQorCWRvbmUKK30KKworU1JDX1VSSVttZDVzdW1dID0gIjk5MTgwMjA4ZWMyYTgyY2U3MWY1NWIwZDczODlmMWIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyNWU4OWE4YWI2NWZkZWQxNzMxZTQxODZiZTFiYjI1Y2RhOTY3ODM0YjZkZjk3MzU5OWNkY2Q1YWJkZmMxOWMiCisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAtRCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAkdC9idWlsZC1hdXgvdGVzdC1kcml2ZXIKKwljcCAtciAke1N9L3Rlc3RzICR0LworCWluc3RhbGwgJHtCfS90ZXN0cy9NYWtlZmlsZSAkdC90ZXN0cy8KKwlzZWQgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgXAorCSAgICAtZSAnc3xiYXNofHNofCcgXAorCSAgICAtZSAnc3xedG9wX3NyY2RpciA9IFwoLipcKXx0b3Bfc3JjZGlyID0gLi5cL3wnIFwKKwkgICAgLWUgJ3N8XnNyY2RpciA9IFwoLipcKXxzcmNkaXIgPSAufCcgXAorCSAgICAtZSAnc3wiYCQoYnVpbHRfcHJvZ3JhbXMpYCJ8ZGlmZnwnIFwKKwkgICAgLWUgJ3N8Z2F3a3xhd2t8ZycgXAorCSAgICAtaSAkdC90ZXN0cy9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2U2MzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8wLjUuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmRkZDUzMzVlZjk2ZmI4NThhMTM4MjMwYWY3NzM3MTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTM2ZDRiODVlNWFlOTAyOGU5MThkMWNjNzc1YzI0NzVlIgorCitQUiA9ICJyMiIKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9lZC9lZC0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGVlMjFlOWRjYzliNWI2MDEyYzIzMDM4NzM0ZTE2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRlZjJiYmRlMGZiZjBkODgyMzI3ODJhMGVkZWQzMjNmNDgzYTA1MTlkNmZkZTlhM2IxODA5MDU2ZmQzNWYzZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiJ0NDPSR7Q0N9JyAnQ1hYPSR7Q1hYfScgJ0NGTEFHUz0ke0NGTEFHU30nICdDWFhGTEFHUz0ke0NYWEZMQUdTfScgJ0NQUEZMQUdTPSR7Q1BQRkxBR1N9JyAnTERGTEFHUz0ke0xERkxBR1N9JyIKKworQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZycsICcgJyl9IgorQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtc2lsZW50LXJ1bGVzJywgJyAnKX0iCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMS45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZWQvZWRfMS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTRlZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjkuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9lZC5oO2VuZGxpbmU9MjA7bWQ1PTM3NWEyMGNjMjU0NWFjMTExNWVlYjdiMzIzYzYwYWUzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTE3O21kNT0xNGRiYjMyNWMxZjJkNGRhZjUwZTBhYTVjNTAzOGU5NiIKKworU0VDVElPTiA9ICJiYXNlIgorCisjIExTQiBzdGF0ZXMgdGhhdCBlZCBzaG91bGQgYmUgaW4gL2Jpbi8KK2JpbmRpciA9ICIke2Jhc2VfYmluZGlyfSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2VkL2VkLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU2NWI2ZDFkNWE5YTg4MTZiOWIzMDRmYzRlZDk0MDVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ1YjM3MmNmYWRmMDczMDAxODIzNzcyMjcyZmNlYWMyY2ZhODc1NTJjNWNkNWE4ZWZjMWM4YWFlNjFmNDVhODgiCisKK2luaGVyaXQgdGV4aW5mbworCitkb19jb25maWd1cmUoKSB7CisJJHtTfS9jb25maWd1cmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZXRodG9vbC9ldGh0b29sL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNjYyNjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorcHRlc3QgbmVlZHMgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMuCitzZXJpYWwtdGVzdHMgaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhvc2UgdGFyZ2V0cy4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKyhkZWZhdWx0IGF1dG9tYWtlIGJlaGF2aW9yIGluY29tcGF0aWJsZSB3aXRoIHB0ZXN0KQorCitkaWZmIC1ydU4gYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTI4IDE4OjE5OjEzLjUxMzk4MDk3NyArMDIwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTQtMDUtMjggMTg6MTk6MjEuMTI5NjYwMjE1ICswMjAwCitAQCAtMiw3ICsyLDcgQEAKKyBBQ19JTklUKGV0aHRvb2wsIDMuMTQsIG5ldGRldkB2Z2VyLmtlcm5lbC5vcmcpCisgQUNfUFJFUkVRKDIuNTIpCisgQUNfQ09ORklHX1NSQ0RJUihbZXRodG9vbC5jXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtnbnVdKQorK0FNX0lOSVRfQVVUT01BS0UoW2dudSBzZXJpYWwtdGVzdHNdKQorIEFDX0NPTkZJR19IRUFERVJTKFtldGh0b29sLWNvbmZpZy5oXSkKKyAKKyBBTV9NQUlOVEFJTkVSX01PREUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjQ1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjJiMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiRGlzcGxheSBvciBjaGFuZ2UgZXRoZXJuZXQgY2FyZCBzZXR0aW5ncyIKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgdXRpbGl0eSBmb3IgZXhhbWluaW5nIGFuZCB0dW5pbmcgdGhlIHNldHRpbmdzIG9mIHlvdXIgZXRoZXJuZXQtYmFzZWQgbmV0d29yayBpbnRlcmZhY2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ldGh0b29sLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YzE5YjMwNTQ4YzU4MjU3N2ZjNmI0NDM2MjZmYzEyMTYiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvZXRodG9vbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGExYzc4Nzg3YzdkY2YwNzcwMTZlZDg2MzcyYTQ3MmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTIwMDUxNjcyN2NjOTU4M2U4YjYzZmQ2ZTcyZjY2N2Y5ZWQ0MWJiNGYwNTc3ZmY0ODAzYjYwYzY0Y2ZkMWRiYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICBjcCAke0J9L01ha2VmaWxlICAgICAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L3Rlc3QtY21kbGluZSAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS90ZXN0LWZlYXR1cmVzICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vZXRodG9vbCAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9ldGh0b29sCisgICBzZWQgLWkgJ3MvXk1ha2VmaWxlL19NYWtlZmlsZS8nICAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9maW5kdXRpbHMtZml4LWRvYy1idWlsZC1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDc2ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAzM2NiYTI0Y2JhN2IwOTczYTcwMmU5NjI3YmQ1YjkzOTYyOTQ4YWU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTY6MTE6MTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZmluZHV0aWxzOiBmaXggZG9jIGJ1aWxkIGVycm9yCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9maW5kLnRleGkgfCAgICA2ICsrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2ZpbmQudGV4aSBiL2RvYy9maW5kLnRleGkKK2luZGV4IDViNWYwY2YuLmIzZDljNmIgMTAwNjQ0CistLS0gYS9kb2MvZmluZC50ZXhpCisrKysgYi9kb2MvZmluZC50ZXhpCitAQCAtNjMsNyArNjMsNyBAQCB0cmFuc2xhdGlvbiBhcHByb3ZlZCBieSB0aGUgRm91bmRhdGlvbi4KKworIEBwYWdlCisgQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorLUBpbnNlcnRjb3B5aW5ne30KKytAaW5zZXJ0Y29weWluZworIEBlbmQgdGl0bGVwYWdlCisKKyBAY29udGVudHMKK0BAIC0xNDY2LDYgKzE0NjYsNyBAQCBubyBvdXRwdXQgaXMgZXZlciBzZW50IHRvIGl0LgorICogRXNjYXBlczo6CisgKiBGb3JtYXQgRGlyZWN0aXZlczo6CisgKiBUaW1lIEZvcm1hdHM6OgorKyogRm9ybWF0dGluZyBGbGFnczo6CisgQGVuZCBtZW51CisKKyBAbm9kZSBFc2NhcGVzCitAQCAtMTUzNCw3ICsxNTM1LDYgQEAgZnJvbSB0aGUgbm92ZWwgeW91IGFyZSByZWFkaW5nLgorICogU2l6ZSBEaXJlY3RpdmVzOjoKKyAqIExvY2F0aW9uIERpcmVjdGl2ZXM6OgorICogVGltZSBEaXJlY3RpdmVzOjoKKy0qIEZvcm1hdHRpbmcgRmxhZ3M6OgorIEBlbmQgbWVudQorCisgQG5vZGUgTmFtZSBEaXJlY3RpdmVzCitAQCAtMTc4MCw3ICsxNzgwLDcgQEAgc2V0dGluZyB0aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUpLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb24uCisgQGVuZCB0YWJsZQorCisgQG5vZGUgRm9ybWF0dGluZyBGbGFncworLUBzdWJzdWJzZWN0aW9uIEZvcm1hdHRpbmcgRmxhZ3MKKytAc3Vic2VjdGlvbiBGb3JtYXR0aW5nIEZsYWdzCisKKyBUaGUgQHNhbXB7JW19IGFuZCBAc2FtcHslZH0gZGlyZWN0aXZlcyBzdXBwb3J0IHRoZSBAc2FtcHsjfSwgQHNhbXB7MH0KKyBhbmQgQHNhbXB7K30gZmxhZ3MsIGJ1dCB0aGUgb3RoZXIgZGlyZWN0aXZlcyBkbyBub3QsIGV2ZW4gaWYgdGhleQorLS0KKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwZGRiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmluOjc1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjIuMzEub3JpZy9jb25maWd1cmUuaW4KKysrKyBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorQEAgLTcyLDcgKzcyLDYgQEAgZG5sIGdsX0VBUkxZIGNhbGxzIEFDX0dOVV9TT1VSQ0UgYW55d2F5LgorIAorIAorIEFDX0lTQ19QT1NJWAorLUFNX0NfUFJPVE9UWVBFUworIAorIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfUkFOTElCCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWJkNjQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaApAQCAtMCwwICsxLDU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCit0aGUgb2xkIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB3b24ndCB3b3JrIHdpdGggQUNfR05VX1NPVVJDRQorCithZ2FpbnN0IDQuMi4zMQorMDcvMDgvMjAxMCAtIHFoZQorCitkaWZmIC0tZ2l0IGEvZ251bGliL200L2V4dGVuc2lvbnMubTQgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAoraW5kZXggMTQzYTllNS4uMGYyN2NlYiAxMDA2NDQKKy0tLSBhL2dudWxpYi9tNC9leHRlbnNpb25zLm00CisrKysgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjODRjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiZmluZCwgbG9jYXRlLCBhbmQgeGFyZ3MgYmluYXJpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIEZpbmQgVXRpbGl0aWVzIGFyZSB0aGUgYmFzaWMgZGlyZWN0b3J5IHNlYXJjaGluZyB1dGlsaXRpZXMgb2YgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLiBcCitUaGVzZSBwcm9ncmFtcyBhcmUgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBwcm9ncmFtcyB0byBwcm92aWRlIG1vZHVsYXIgYW5kIHBvd2VyZnVsIGRpcmVjdG9yeSBcCitzZWFyY2ggYW5kIGZpbGUgbG9jYXRpbmcgY2FwYWJpbGl0aWVzIHRvIG90aGVyIGNvbW1hbmRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9maW5kdXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9ncm91cD1maW5kdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKworU1JDX1VSSSA9ICJmdHA6Ly9hbHBoYS5nbnUub3JnL2dudS8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmaW5kIHhhcmdzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCisjIGRpZmZ1dGlscyBhc3N1bWVzIG5vbi1nbGliYyBjb21waWxhdGlvbiB3aXRoIHVjbGliYyBhbmQKKyMgdGhpcyBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgaXRzIG93biBpbXBsZW1lbnRhdGlvbnMgb2YKKyMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eS4gIHJlZ2V4LmMgYWN0dWFsbHkgYnJlYWtzIGNvbXBpbGF0aW9uCisjIGJlY2F1c2UgaXQgdXNlcyBfX21lbXBjcHksIHRoZXJlIGFyZSBvdGhlciB0aGluZ3MgKFRCRDoKKyMgc2VlIGRpZmZ1dGlscy5tayBpbiBidWlsZHJvb3QpCitFWFRSQV9PRUNPTkZfbGliYy11Y2xpYmMgPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyOWUxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjUuMTQub3JpZy9nbC9saWIvTWFrZWZpbGUuYW0KKysrKyBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorQEAgLTEyMjAsNyArMTIyMCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuMi4zMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC4yLjMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWUwMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuMi4zMS5iYgpAQCAtMCwwICsxLDE0IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorUFIgPSAicjQiCisKK3JlcXVpcmUgZmluZHV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMGUzMWEwZjE4YTQ5NzA5YmY1YTQ0OTg2N2M4MDQ5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMGQzNGI4ZmFjYTBiM2NjYTA3MDNmNmM2YjQ5OGFmYmU3MmYwYmExNmMzNTk4MGMxMGVjOWVmNzcyNGQ2MjA0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjUuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuNS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNThhODJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjUuMTQuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBmaW5kdXRpbHMuaW5jCisKKyMgR1BMdjIrICg8PCA0LjIuMzIpLCBHUEx2MysgKD49IDQuMi4zMikKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkiCisgCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOGE4MTc2MjgyZmQyOGU4ZDEyMzRjODRkODQ3ZmE2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZGUzY2Y2MjVhNWM5ZjE1NGVlZTMxNzFlMDcyNTE1ZmZkZGU0MDUyNDRkZDAwNTAyYWY2MTdhYzU3YjczYWUyIgorCisjIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzI3Mjk5CitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgJ2dsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz15ZXMnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfU09SVD0ke2JpbmRpcn0vc29ydCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVyc180LjAuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkwYzk4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiT3BlblByaW50aW5nIHByaW50ZXIgc3VwcG9ydCAtIGZpbHRlcnMiCitERVNDUklQVElPTiA9ICJGb29tYXRpYyBpcyBhIHByaW50ZXIgZGF0YWJhc2UgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2V0IHVwIFwKK2NvbW1vbiBwcmludGVycyBmb3IgdXNlIHdpdGggVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLlwKK0l0IHByb3ZpZGVzIHRoZSAiZ2x1ZSIgYmV0d2VlbiBhIHByaW50IHNwb29sZXIgKGxpa2UgQ1VQUyBvciBscHIpIGFuZCBcCit0aGUgcHJpbnRlciwgYnkgcHJvY2Vzc2luZyBmaWxlcyBzZW50IHRvIHRoZSBwcmludGVyLiBcCisgXAorVGhpcyBwYWNrYWdlIGNvbnNpc3RzIG9mIGZpbHRlcnMgdXNlZCBieSB0aGUgcHJpbnRlciBzcG9vbGVycyBcCit0byBjb252ZXJ0IHRoZSBpbmNvbWluZyBQb3N0U2NyaXB0IGRhdGEgaW50byB0aGUgcHJpbnRlcidzIG5hdGl2ZSBcCitmb3JtYXQgdXNpbmcgYSBwcmludGVyLXNwZWNpZmljLCBidXQgc3Bvb2xlci1pbmRlcGVuZGVudCBQUEQgZmlsZS4gXAorIgorCitERVBFTkRTICs9ICJjdXBzIHBlcmwgbGlieG1sMiIKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vZm9vbWF0aWMtZmlsdGVycy0ke1BWfS9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5wcmludGluZy5vcmcvZG93bmxvYWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDVmNWRjYmZlMzU5ZjE5OGVlZjNkZjViMjgzZDg5NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMmUyZTUzZTUwMjU3MWU4OGVlYjkwMTBjNDVhMGQ1NDY3MWYxNTcwN2VlMTA0ZjVjOWMyMmI1OWVhN2EzM2UzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZmlsZS1jb252ZXJ0ZXItY2hlY2sgLS13aXRoLWZpbGUtY29udmVydGVyPXRleHR0b3BzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBleHBvcnQgUEVSTD0iJHtiaW5kaXJ9L2VudiBwZXJsIgorICAgIGV4cG9ydCBDVVBTX1NFUlZFUkJJTj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyAgICAgICAjIC91c3IvbGliIE5PVCBsaWJkaXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzL2ZpbHRlcgorICAgIGxuIC1zZiAke2JpbmRpcn0vZm9vbWF0aWMtcmlwICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy9maWx0ZXIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzLyAke2V4ZWNfcHJlZml4fS9saWIvcHByLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay0zLjEuNS9nYXdrLTMuMS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2U3OTg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5hYzoxMjc6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6MTI3OiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorLi4uCit8IE1ha2VmaWxlLmFtOjI3OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9jb25maWd1cmUuYWMKKysrKyBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworQEAgLTEyNCw3ICsxMjQsNiBAQCBmaQorIAorIGRubCBjaGVjayBmb3IgQyBjb21waWxlciBmb3IgYXV0b21ha2UKKyBBTV9QUk9HX0NDX1NUREMKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBkbmwgQ3lnd2luIGRvZXNuJ3QgbGlrZSB0byBnZXQgbGlicyB3aXRoIGZ1bGwgcGF0aHMKKyBkbmwgc2luY2UgdGhhdCBvdmVycmlkZXMgbGlua2luZyBhZ2FpbnN0IERMTHMuCitJbmRleDogZ2F3ay0zLjEuNS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9NYWtlZmlsZS5hbQorKysrIGdhd2stMy4xLjUvTWFrZWZpbGUuYW0KK0BAIC0yNCw3ICsyNCw3IEBACisgIyMgcHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBBdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBpZiBuZWVkZWQsIG1ha2UgLmJ6MiBmaWxlcyBhbHNvLgorLUFVVE9NQUtFX09QVElPTlMgPSBhbnNpMmtuciBkaXN0LWJ6aXAyCisrQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIKKyAKKyAjIFRoaXMgdW5kb2N1bWVudGVkIHZhcmlhYmxlIGluc3VyZXMgdGhhdCBhY2xvY2FsIHJ1bnMKKyAjIGNvcnJlY3RseSBhZnRlciBjaGFuZ2luZyBjb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay00LjEuMy9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2YwYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0Citmb3IgaSBpbiBgZ3JlcCAtdkUgIkB8XiR8I3xHdC1kdW1teSIgTWFrZXRlc3RzIHxhd2sgLUY6ICd7cHJpbnQgJDF9J2A7IFwKKyAgZG8gTENfQUxMPSR7R0FXS0xPQ0FMRTotQ30gTEFORz0ke0dBV0tMT0NBTEU6LUN9IHNyY2Rpcj1gcHdkYCBBV0s9Z2F3ayBDTVA9Y21wIFwKKyAgbWFrZSAtZiBNYWtldGVzdHMgJGkgPiRpLnRtcCAyPiYxOyBcCisgIGdyZXAgLXEgIkVycm9yIiAkaS50bXA7IFwKKyAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gIkZBSUw6ICRpIjsgXAorICBlbHNlIGVjaG8gIlBBU1M6ICRpIjsgcm0gLWYgJGkudG1wOyBmaTsgXAorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzMuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWY0YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgYXdrIHRleHQgcHJvY2Vzc2luZyB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSB2ZXJzaW9uIG9mIGF3aywgYSB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eS4gXAorQXdrIGludGVycHJldHMgYSBzcGVjaWFsLXB1cnBvc2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gZG8gXAorcXVpY2sgYW5kIGVhc3kgdGV4dCBwYXR0ZXJuIG1hdGNoaW5nIGFuZCByZWZvcm1hdHRpbmcgam9icy4iCitIT01FUEFHRSA9ICJ3d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrIgorQlVHVFJBQ0tFUiAgPSAiYnVnLWdhd2tAZ251Lm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyBnYXdrIDw9IDMuMS41OiBHUEx2MgorIyBnYXdrID49IDMuMS42OiBHUEx2MworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitSREVQRU5EU19nYXdrICs9ICJnYXdrLWNvbW1vbiIKK1JERVBFTkRTX3BnYXdrICs9ICJnYXdrLWNvbW1vbiIKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2F3ay9nYXdrLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDc2MDMyNTQ4OTQ3OWNhYzE3ZmUwMTE0YjhmNjJmMzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYzZGNiOWQwY2EzOThiMWQ0ZjVhMzMyZjZjZDljZWM1NjQ0MTI2NWZjYTYxNmYyZWExYjQ0ZDQ1OWU5ZjBmOCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUEFDS0FHRVMgKz0gImdhd2stY29tbW9uIHBnYXdrIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ2F3ayogJHtiaW5kaXJ9L2lnYXdrIgorRklMRVNfZ2F3ay1jb21tb24gKz0gIiR7ZGF0YWRpcn0vYXdrLyogJHtsaWJkaXJ9L2dhd2svYXdrLyoiCitGSUxFU19wZ2F3ayA9ICIke2JpbmRpcn0vcGdhd2sqIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2F3ay9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQ0ZMQUdTICs9ICItRCBQUk9UT1RZUEVTIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHJlbW92ZSB0aGUgbGluayBzaW5jZSB3ZSBkb24ndCBwYWNrYWdlIGl0CisJcm0gJHtEfSR7YmluZGlyfS9hd2sKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a180LjEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a180LjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWE4OGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS4zLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiR05VIGF3ayB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgdmVyc2lvbiBvZiBhd2ssIGEgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkuIFwKK0F3ayBpbnRlcnByZXRzIGEgc3BlY2lhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGRvIFwKK3F1aWNrIGFuZCBlYXN5IHRleHQgcGF0dGVybiBtYXRjaGluZyBhbmQgcmVmb3JtYXR0aW5nIGpvYnMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrLyIKK0JVR1RSQUNLRVIgID0gImJ1Zy1nYXdrQGdudS5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgZ2F3ayA8PSAzLjEuNTogR1BMdjIKKyMgZ2F3ayA+PSAzLjEuNjogR1BMdjMKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworREVQRU5EUyArPSAicmVhZGxpbmUiCisKK1BBQ0tBR0VDT05GSUdbbXBmcl0gPSAiLS13aXRoLW1wZnIsLS13aXRob3V0LW1wZnIsIG1wZnIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nYXdrL2dhd2stJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NWQzN2Y0MDY5NTAyNjc3ZjI1ZDEzNDBkZjhlZWM5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MjRlZmZhNWI5ZWNkNGVkOTQwZjI1ODFjNWQzYzFkZjRlNGJkN2U2Zjc2OGFhMDMzYzE5MTZmNDdkZmM2ZTI5IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hd2siCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyByZW1vdmUgdGhlIGxpbmsgc2luY2Ugd2UgZG9uJ3QgcGFja2FnZSBpdAorCXJtICR7RH0ke2JpbmRpcn0vYXdrCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZm9yIGkgaW4gYGdyZXAgLXZFICJAfF4kfCN8R3QtZHVtbXkiICR7U30vdGVzdC9NYWtldGVzdHMgfGF3ayAtRjogJ3twcmludCAkMX0nYCBNYWtldGVzdHM7IFwKKwkgIGRvIGNwICR7U30vdGVzdC8kaSogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FhcmNoNjQvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYWFyY2g2NC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FhcmNoNjQvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAzCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgOAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybS9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzcyY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybWViL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybWViL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTkwOTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtZWIvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAxCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5N2Q0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2Jhc2UvZ2VuaHQuYzogYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSB0byBhbGxvdyBmb3BlbiBjYWxsaW5nCisKK1RoZSBjb21taXQgaW4gdXBzdHJlYW06CitodHRwOi8vZ2l0Lmdob3N0c2NyaXB0LmNvbS8/cD1naG9zdHBkbC5naXQ7YT1jb21taXRkaWZmO2g9NzczYzY5ZTQ2ZTcwYmRkNTQ4MjY3NjQzN2RhZmQyY2E4MzM5NzY0MworCitSZXBsYWNlIGFsbCBmb3BlbiBjYWxscyB3aXRoIGdwX2ZvcGVuIGFuZCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHNvCit0aGF0IGFueSB1bmludGVudGlhbCBjYWxscyBkaXJlY3RseSB0byBmb3BlbiB3aWxsIGNhdXNlIGFuIGVycm9yLgorCitPbmx5IGV4Y2VwdGlvbnMgYXJlIHRob3NlIGluIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLCBhbmQgbWtyb21mcy5jLgorVGhpcyBwYXRjaCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHRvIGFsbG93IGZvcGVuIGNhbGxpbmcgaW4gYmFzZS9nZW5odC5jLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFzZS9nZW5odC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYmFzZS9nZW5odC5jIGIvYmFzZS9nZW5odC5jCitpbmRleCA0YjA0MDg1Li5jYzgyZmZmIDEwMDY0NAorLS0tIGEvYmFzZS9nZW5odC5jCisrKysgYi9iYXNlL2dlbmh0LmMKK0BAIC0xNiw2ICsxNiwxMCBAQAorIAorIC8qIEdlbmVyYXRlIEMgY29kZSBmb3IgY29tcGlsaW5nIGhhbGZ0b25lcyBpbnRvIFJPTS4gKi8KKyAjaW5jbHVkZSAibWFsbG9jXy5oIgorKworKy8qIHByZXZlbnQgZ3AuaCBmcm9tIGRlZmluaW5nIGZvcGVuICovCisrI2RlZmluZSBmb3BlbiBmb3BlbgorKworICNpbmNsdWRlICJzdGRpb18uaCIKKyAjaW5jbHVkZSAic3RyaW5nXy5oIgorICNpbmNsdWRlICJnc2NkZWZzLmgiCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvY3Vwcy1uby1nY3J5cHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9jdXBzLW5vLWdjcnlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWM5MzY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvY3Vwcy1uby1nY3J5cHQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorU3ViamVjdDogW1BBVENIXSBEb24ndCBidWlsZC1kZXBlbmQgb24gbGliZ2NyeXB0LCBhcyBub3RoaW5nIGlzIHVzZWQgZnJvbSBpdAorCitCYWNrcG9ydGVkIGZyb20gaHR0cDovL3d3dy5jdXBzLm9yZy9zdHJmaWxlcy5waHAvMzMwOC9jdXBzLW5vLWdjcnlwdC5wYXRjaAorCitUaGlzIGFkZHJlc3NlcyB0aGUgY3J5dG8gZGVwZW5kZW5jeSBzZWVuIGR1cmluZyBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorCitSZWJhc2UgdGhlIHBhdGNoIHRvIGdob3N0c2NyaXB0LTkuMTUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGN1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK2luZGV4IDk5YTg1YzMuLmE2NzQ4NTIgMTAwNjQ0CistLS0gYS9jdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaAorKysrIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK0BAIC04MCw3ICs4MCw2IEBAIHR5cGVkZWYgaW50IHNvY2tsZW5fdDsKKyAjICBlbGlmIGRlZmluZWQgSEFWRV9HTlVUTFMKKyAjICAgIGluY2x1ZGUgPGdudXRscy9nbnV0bHMuaD4KKyAjICAgIGluY2x1ZGUgPGdudXRscy94NTA5Lmg+CistIyAgICBpbmNsdWRlIDxnY3J5cHQuaD4KKyAjICBlbGlmIGRlZmluZWQoSEFWRV9DRFNBU1NMKQorICMgICAgaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyAjICAgIGluY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItZ2VuYXJjaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItZ2VuYXJjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjhhOTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ltcG9ydCBwYXRjaCBmcm9tIHdpbmRyaXZlciBsaW51eCBmb3IgY3Jvc3MgY29tcGlsYXRpb24sIGFuZCBzcGxpdCBwYXRjaGVzCitpbnRvIG9lIHdheSB1bmRlciBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgc3VjaCBhcyBpNTg2LCBwb3dlcnBjIGV0YyBhY2NvcmRpbmcgCit0byBSaWNoYXJkJ3Mgb3Bpbmlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CisKKyMgQXV0aG9yOiBDaGkgWHUgPGNoaS54dUB3aW5kcml2ZXIuY29tPgorIyBEYXRlOiBGZWIgMjYgMjAxMAorIyBTdW1tYXJ5OiBHZW5lcmF0ZSBhcmNoLmggZm9yIHBwYzMyCisjCisKK2RpZmYgLU5ydSBnaG9zdHNjcmlwdC04LjY0Lm9yaWcvYmFzZS9saWIubWFrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCistLS0gZ2hvc3RzY3JpcHQtOC42NC5vcmlnL2Jhc2UvbGliLm1hawkyMDEwLTAyLTEwIDEwOjMwOjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCTIwMTAtMDItMTAgMTA6NTY6MjEuMDAwMDAwMDAwICswODAwCitAQCAtNjcsOCArNjcsOCBAQAorIHN0ZHByZV9oPSQoR0xTUkMpc3RkcHJlLmggJChzdGRwbl9oKQorIHN0ZGludF9faD0kKEdMU1JDKXN0ZGludF8uaCAkKHN0ZF9oKQorIAorLSQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorLQkkKEVYUCkkKEdFTkFSQ0hfWEUpICQoR0xHRU4pYXJjaC5oICQoVEFSR0VUX0FSQ0hfRklMRSkKKysjIyQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorKyMjCSQoRVhQKSQoR0VOQVJDSF9YRSkgJChHTEdFTilhcmNoLmggJChUQVJHRVRfQVJDSF9GSUxFKQorIAorICMgUGxhdGZvcm0gaW50ZXJmYWNlcworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1wcmV2ZW50X3JlY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjliZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK3VzdCB1c2UgY29tbWFuZHMgcHJvdmlkZWQgYnkgZ2hvc3RzY3JpcHQtbmF0aXZlLCBwcmV2ZW50aW5nIHJlY29tcGlsZSB0aGVtIHdoZW4KK2NvbXBpbGUgZ2hvc3RzY3JpcHQuCitXYXkgdG8gZW5hYmxlIGNyb3NzIGNvbXBpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYmFzZS91bml4LWF1eC5tYWsgYi9iYXNlL3VuaXgtYXV4Lm1haworaW5kZXggYTkxZmIyNi4uYzk5MWQxMSAxMDA2NDQKKy0tLSBhL2Jhc2UvdW5peC1hdXgubWFrCisrKysgYi9iYXNlL3VuaXgtYXV4Lm1haworQEAgLTY5LDQ2ICs2OSw0NiBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuYyAkKHN0ZGlvX19oKSAkKHRpbWVfX2gpICQoQUspXAorICAkKE1BS0VESVJTKQorIAkkKEdMQ0MpICQoR0xPXylncF9zeXN2LiQoT0JKKSAkKENfKSAkKEdMU1JDKWdwX3N5c3YuYworIAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCistCistJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIE9uIHRoZSBSUy82MDAwIChhdCBsZWFzdCksIGNvbXBpbGluZyBnZW5hcmNoLmMgd2l0aCBnY2Mgd2l0aCAtTworLSMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgorLSQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkRFVl9YRSkgJChHTFNSQylnZW5kZXYuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CistIyB3aGljaCBtZWFucyB0aGF0IHRoZSBta3JvbWZzIGJ1aWxkIGNhbid0IGZpbmQgdGhlIHpsaWIgc291cmNlIGl0IG5lZWRzLgorLSMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKy1NS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQorLQorLSMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCistTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAorLSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQorLQorLSQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1BS0VESVJTKQorLQkkKENQXykgJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUtST01GU19YRSkKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgcHJvZ3JhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKysjCisrIyQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoRUNIT0dTX1hFKSAkKEdMU1JDKWVjaG9ncy5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KKysjIyBwcm9kdWNlcyBhIGJ1Z2d5IGV4ZWN1dGFibGUuCisrIyQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CisrIyMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KKysjIyBTbyBpdCdzIHNwbGl0IGludG8gdHdvIHRhcmdldHMsIG9uZSB1c2luZyB0aGUgemxpYiBzb3VyY2UgZGlyZWN0bHkuLi4uLgorKyNNS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopICQoQVVYKW1lbWVudG8uJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIC4uLi4gYW5kIG9uZSB1c2luZyB0aGUgemxpYiBsaWJyYXJ5IGxpbmtlZCB2aWEgdGhlIGNvbW1hbmQgbGluZQorKyNNS1JPTUZTX09CSlNfMT0kKEFVWClnc2NkZWZzLiQoT0JKKSBcCisrIyAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzEgJChNS1JPTUZTX09CSlNfMSkgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKysjCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQorIAorICMgUXVlcnkgdGhlIGVudmlyb25tZW50IHRvIGNvbnN0cnVjdCBnY29uZmlnXy5oLgorICMgVGhlc2UgYXJlIGFsbCBkZWZpbmVkIGNvbmRpdGlvbmFsbHkgKGV4Y2VwdCB0aGUgSmFzUEVSIG9uZSksIHNvIHRoYXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTUtcGFyYWxsZWwtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTUtcGFyYWxsZWwtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTdiODk0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYmUxZTFiMzMxOTFhZmRjZmUzYzJlY2M0ZmYzZTM2MWE1ODU5ZTljNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAzMCBKYW4gMjAxNSAwMDo0MDoyMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjb250cmliLm1hazogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3JtOiBjYW5ub3QgcmVtb3ZlIGAvdXNyL3NoYXJlL2dob3N0c2NyaXB0LzkuMTUvbGliJzogSXMgYSBkaXJlY3RvcnkKKworQ3JlYXRlIGxpYiBiZWZvcmUgaW5zdGFsbCB0byBmaXggdGhlIHJhY2UgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbnRyaWIvY29udHJpYi5tYWsgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250cmliLm1hayBiL2NvbnRyaWIvY29udHJpYi5tYWsKK2luZGV4IDA4YTgwZDEuLmRlMmUyMGQgMTAwNjQ0CistLS0gYS9jb250cmliL2NvbnRyaWIubWFrCisrKysgYi9jb250cmliL2NvbnRyaWIubWFrCitAQCAtOTQ3LDYgKzk0Nyw3IEBAICQoREVWT0JKKWR2aXBybGliLiQoT0JKKSA6ICQoSkFQU1JDKWR2aXBybGliLmMgJChKQVBTUkMpZHZpcHJsaWIuaAorIAkkKERFVkNDKSAkKE9fKSRAICQoQ18pICQoSkFQU1JDKWR2aXBybGliLmMKKyAKKyBleHRyYS1kbXBydC1pbnN0YWxsOgorKwlta2RpciAtcCAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYgorIAkkKElOU1RBTExfREFUQSkgJChKQVBTUkMpZG1wX2luaXQucHMgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxCisgCSQoSU5TVEFMTF9EQVRBKSAkKEpBUFNSQylkbXBfc2l0ZS5wcyAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDEKKyAJJChJTlNUQUxMX0RBVEEpICQoSkFQU1JDKWVzY3BfMjQuc3JjICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliIHx8IGV4aXQgMQorQEAgLTEwODgsNiArMTA4OSw3IEBAICQoREVWT0JKKWdkZXZhbHBzLiQoT0JKKSA6ICQoSkFQU1JDKWdkZXZhbHBzLmMgJChQREVWSCkKKyAjIyMgLS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpb25hbCAudXBwIGZpbGVzIC0tLS0tLS0tLS0tLS0tLS0gIyMjCisgCisgZXh0cmEtdXBwLWluc3RhbGw6CisrCW1rZGlyIC1wICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliCisgCWZvciBmIGluICQoQ09OVFJJQlNSQyl1bmlwcmludCQoRCkqLnVwcDsgZG8gXAorIAkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDE7IFwKKyAJZG9uZQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNi1XZXJyb3ItcmV0dXJuLXR5cGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4NjQ4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNWQ1YzgzYzg5YmUwY2ZmMjlkZGUyMjY3ZmExNjhlNmY3MTQ2YmU4YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCA0IE1heSAyMDE1IDIyOjMxOjQ4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJhc2UvZ2VuZGV2LmM6IGZpeCBmb3IgLVdlcnJvcj1yZXR1cm4tdHlwZQorCitGaXhlZDoKK2Jhc2UvZ2VuZGV2LmM6ODA6MTogZXJyb3I6IHJldHVybiB0eXBlIGRlZmF1bHRzIHRvICdpbnQnIFstV2Vycm9yPXJldHVybi10eXBlXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBiYXNlL2dlbmRldi5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9iYXNlL2dlbmRldi5jIGIvYmFzZS9nZW5kZXYuYworaW5kZXggNjhhNzQ1Zi4uODA1OGI1YSAxMDA2NDQKKy0tLSBhL2Jhc2UvZ2VuZGV2LmMKKysrKyBiL2Jhc2UvZ2VuZGV2LmMKK0BAIC03Nyw2ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICppbmRlbnRfaXRlbSA9ICIiOworIC8qIEZvcndhcmQgZGVmaW5pdGlvbnMgKi8KKyB2b2lkIGFkZF9lbnRyeShjb25maWcgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGJvb2wpOworIAorK2ludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIGNvbmZpZyBjb25mOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU4MTE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2dob3N0c2NyaXB0LW5hdGl2ZTpmaXggZGlzYWJsZS1zeXN0ZW0tbGlidGlmZgorCitNb2RpZnkgY29uZmlndXJlIHRvIGFkZCB0aGUgY2hlY2sgdG8gbWFrZSBzdXJlCitnaG9zdHNjcmlwIGNvdWxkIHdvcmsgd2hpbGUgc3lzdGVtLWxpYnRpZmYgaXMKK2Rpc2FibGVkLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA1NSw2ICsxMDU1LDcgQEAgRGlzYWJsaW5nIHRpZmYgb3V0cHV0IGRldmljZXMuXSkKKyBlc2FjCisgCisgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorKyAgICBpZiB0ZXN0IC1lICRMSUJUSUZGRElSL2NvbmZpZ3VyZTsgdGhlbgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJSdW5uaW5nIGxpYnRpZmYgY29uZmlndXJlIHNjcmlwdC4uLiIKKyAgICAgICBvbGRkaXI9YHB3ZGAKK0BAIC0xMDY5LDYgKzEwNzAsMTAgQEAgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorICAgICAgIGNkICIkb2xkZGlyIgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJDb250aW51aW5nIHdpdGggR2hvc3RzY3JpcHQgY29uZmlndXJhdGlvbi4uLiIKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19OT1RJQ0UoW0NvdWxkIG5vdCBmaW5kIGxvY2FsIGNvcHkgb2YgbGlidGlmZi4KKytEaXNhYmxpbmcgdGlmZiBvdXRwdXQgZGV2aWNlcy5dKQorKyAgICBmaQorIGZpCisgCisgQUNfU1VCU1QoU0hBUkVfTElCVElGRikKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNTg2L29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2k1ODYvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTdiN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNTg2L29iamFyY2guaApAQCAtMCwwICsxLDQxIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2k2ODYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2Cm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjg3YWFjYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2CkBAIC0wLDAgKzEgQEAKK2k1ODYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWIvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzIzMmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWwvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWM4MTAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHMvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YjYzN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjQvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDBhMTZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbC9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbC9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbG4zMi9vYmphcmNoLmggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRlbG4zMi9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsbjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRuMzIvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDBhMTZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzZWwvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWY5MGRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjL29iamFyY2guaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L3Bvd2VycGMvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTA5N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjNjQvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDBhMTZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC94ODYtNjQvb2JqYXJjaC5oIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzRhY2M2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYgpAQCAtMCwwICsxLDEwMyBAQAorU1VNTUFSWSA9ICJUaGUgR1BMIEdob3N0c2NyaXB0IFBvc3RTY3JpcHQvUERGIGludGVycHJldGVyIgorREVTQ1JJUFRJT04gPSAiR2hvc3RzY3JpcHQgaXMgdXNlZCBmb3IgUG9zdFNjcmlwdC9QREYgcHJldmlldyBhbmQgcHJpbnRpbmcuICBVc3VhbGx5IGFzIFwKK2EgYmFjay1lbmQgdG8gYSBwcm9ncmFtIHN1Y2ggYXMgZ2hvc3R2aWV3LCBpdCBjYW4gZGlzcGxheSBQb3N0U2NyaXB0IGFuZCBQREYgXAorZG9jdW1lbnRzIGluIGFuIFgxMSBlbnZpcm9ubWVudC4gXAorXAorRnVydGhlcm1vcmUsIGl0IGNhbiByZW5kZXIgUG9zdFNjcmlwdCBhbmQgUERGIGZpbGVzIGFzIGdyYXBoaWNzIHRvIGJlIHByaW50ZWQgXAorb24gbm9uLVBvc3RTY3JpcHQgcHJpbnRlcnMuIFN1cHBvcnRlZCBwcmludGVycyBpbmNsdWRlIGNvbW1vbiBcCitkb3QtbWF0cml4LCBpbmtqZXQgYW5kIGxhc2VyIG1vZGVscy4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMTdjZWE1NDc0MzQzNWFiMmE1ODFjMjM3YmVhMjk0YSIKKworREVQRU5EUyA9ICJnaG9zdHNjcmlwdC1uYXRpdmUgdGlmZiBqcGVnIGZvbnRjb25maWcgY3VwcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSV9CQVNFID0gImh0dHA6Ly9kb3dubG9hZHMuZ2hvc3RzY3JpcHQuY29tL3B1YmxpYy9naG9zdHNjcmlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBcCisiCisKK1NSQ19VUkkgPSAiJHtTUkNfVVJJX0JBU0V9IFwKKyAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqYXJjaC5oIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMtbm8tZ2NyeXB0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke1NSQ19VUklfQkFTRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MjkzMTkzMjViYmRiODNmNWM4MTM3OWE4Zjg2ZjM4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NDZkNzcyODBjY2E4YWZkZDNkNGMyYzEzODllMzMyZWQ5YjA2MDViZDEwN2JjYWFlMWQ3NjFiMDYxZDFhNjhkIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXggLS13aXRoLXN5c3RlbS1saWJ0aWZmIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRwYXRoPSR7ZGF0YWRpcn0vZm9udHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS13aXRoLWN1cHMtc2VydmVyYmluPSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vwcy1kYXRhZGlyPSR7ZGF0YWRpcn0vY3VwcyBcCisgICAgICAgICAgICAgICAgJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctLWVuYWJsZS1saXR0bGUtZW5kaWFuJywgJy0tZW5hYmxlLWJpZy1lbmRpYW4nLCBkKX0gXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwc2VsID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKKworIyBFeHBsaWNpdHkgZGlzYWJsZSBsaWJ0aWZmLCBmb250Y29uZmlnLAorIyBmcmVldHlwZSwgY3VwcyBmb3IgZ2hvc3RzY3JpcHQtbmF0aXZlCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZj1ubyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmlkbiAtLWRpc2FibGUtZm9udGNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mcmVldHlwZSAtLWRpc2FibGUtY3VwcyIKKworIyBUaGlzIGhhcyBiZWVuIGZpeGVkIHVwc3RyZWFtIGJ1dCBmb3Igbm93IHdlIG5lZWQgdG8gc3VidmVydCB0aGUgY2hlY2sgZm9yIHRpbWUuaAorIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQ0MworIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQyNgorQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorQlVJTERfQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgb2JqCisJbWtkaXIgLXAgc29vYmoKKwlpZiBbIC1lICR7V09SS0RJUn0vb2JqYXJjaC5oIF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9vYmphcmNoLmggb2JqL2FyY2guaAorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCSMgY29weSB0b29scyBmcm9tIHRoZSBuYXRpdmUgZ2hvc3RzY3JpcHQgYnVpbGQKKwlpZiBbICIke1BOfSIgIT0gImdob3N0c2NyaXB0LW5hdGl2ZSIgXTsgdGhlbgorCQlta2RpciAtcCBvYmovYXV4IHNvb2JqCisJCWZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisJCQljcCAke1NUQUdJTkdfQklORElSX05BVElWRX0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkgb2JqL2F1eC8kaQorCQlkb25lCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vUmVzb3VyY2UgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCisgICAgY3AgLXIgJHtTfS9pY2Nwcm9maWxlcyAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KK30KKworZG9fY29tcGlsZV9jbGFzcy1uYXRpdmUgKCkgeworICAgIG1rZGlyIC1wIG9iagorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIG9lX3J1bm1ha2Ugb2JqL2F1eC8kaQorICAgIGRvbmUKK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfQorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IG9iai9hdXgvJGkgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfS8kaQorICAgIGRvbmUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjZTIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmLmluYwpAQCAtMCwwICsxLDIyIEBACitERVNDUklQVElPTiA9ICJHTlUgZ3BlcmYgaXMgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZ2VuZXJhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dwZXJmIgorU1VNTUFSWSAgPSAiR2VuZXJhdGUgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZnJvbSBhIHNldCBvZiBrZXl3b3JkcyIKK0xJQ0VOU0UgID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmNjO2JlZ2lubGluZT04O2VuZGxpbmU9MTk7bWQ1PWRlYzhmNjExODQ1ZDA0NzM4N2VkNTZiNWI4NWZhOTliIgorCitTUkNfVVJJICA9ICIke0dOVV9NSVJST1J9L2dwZXJmL2dwZXJmLSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBhdXRvcmVjb25mIGNvdWxkbid0IGZpbmQgYWNpbmNsdWRlLm00IHdoZW4gc3RlcHBpbmcgaW50byBzdWJkaXJlY3RvcnkuIEluc3RlYWQgb2YKKyMgZHVwbGljYXRpbmcgYWNpbmNsdWRlLm00IGluIGV2ZXJ5IHN1YmRpcmVjdG9yeSwgdXNlIGFic29sdXRlIGluY2x1ZGUgcGF0aCB0byBhY2xvY2FsCitFWFRSQV9BVVRPUkVDT05GICs9ICIgLUkgJHtTfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisgICAgICAgICAgICAgICAgY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisgICAgICAgIGZpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI4ODYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjMuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworTElDRU5TRSAgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTVmODRhYmIwMDcwYWRmOGEwOTI1ZDdkNTM0YjZlMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uY2M7YmVnaW5saW5lPTg7ZW5kbGluZT0xOTttZDU9NzJhMzAzNGExOWU3MmYwOGVlNDhlZjgyNDRhMTIxZmQiCisKK1BSID0gInIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2MyMGU1ODk3NWEzODA3NTQ0MDQyM2M4ZmI4NWZkMDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMyODc1MjdjOGQ5ZTI3ZTgwMWNmMDgwNDQzNmYzNDk0YmQ1NjlkYjA1ZDQ5ZGNkZDJhOTQyYWU3MmZhOTA1NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMDNmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYzFmMWRiMzJmYjY1OThkNmE5M2U2ZTg4Nzk2YTg2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzY3MTEyYTIwNDQwN2U2MmRiYzMxMDY2NDdjZjgzOWVkNTQ0ZjNjZjVkMGYwNTIzYWFhMjUwODYyM2FhZDYzZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvTWFrZXZhcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDlmNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzCkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeC1mb3ItdGV4aW5mby01LjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0MTQ5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Bva3kgU3BlY2lmaWMgdGhpcyBpcyBncGx2MiB2ZXJzaW9uXQorCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdyZXAtMi41LjFhL2RvYy9ncmVwLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2RvYy9ncmVwLnRleGkKKysrKyBncmVwLTIuNS4xYS9kb2MvZ3JlcC50ZXhpCitAQCAtMjg4LDcgKzI4OCw3IEBAIFRoaXMgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGkKKyBQcmludCBhIHVzYWdlIG1lc3NhZ2UgYnJpZWZseSBzdW1tYXJpemluZyB0aGVzZSBjb21tYW5kLWxpbmUgb3B0aW9ucworIGFuZCB0aGUgYnVnLXJlcG9ydGluZyBhZGRyZXNzLCB0aGVuIGV4aXQuCisgCistQGl0ZW14IC0tYmluYXJ5LWZpbGVzPUB2YXJ7dHlwZX0KKytAaXRlbSAtLWJpbmFyeS1maWxlcz1AdmFye3R5cGV9CisgQG9waW5kZXggLS1iaW5hcnktZmlsZXMKKyBAY2luZGV4IGJpbmFyeSBmaWxlcworIElmIHRoZSBmaXJzdCBmZXcgYnl0ZXMgb2YgYSBmaWxlIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgYmluYXJ5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjkxNTIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBbHdheXMgdXNlIGxvY2FsZS5oIGFzIEhBVkVfTE9DQUxFX0ggaXMgbm8gbG9uZ2VyIGhhbmRsZWQgYnkgLi9jb25maWd1cmUKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIG9sZCB2ZXJzaW9uIHRoYXQgd2lsbCBub3QgYmUgbWFpbnRhaW5lZCBdCitTaWduZWQtb2ZmLWJ5OiBBbGV4IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CisKK2RpZmYgLS1yZWN1cnNpdmUgLS11bmlmaWVkIGdyZXAtMi41LjFhLW9yaWcvbGliL2hhcmQtbG9jYWxlLmMgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMKKy0tLSBncmVwLTIuNS4xYS1vcmlnL2xpYi9oYXJkLWxvY2FsZS5jCTIwMDEtMDMtMDQgMDc6MzM6MTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMJMjAxMy0wMy0xMSAxNzowNTo1Mi4wODY0NDQ4OTEgKzAyMDAKK0BAIC0zOCw5ICszOCw3IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBIQVZFX0xPQ0FMRV9ICisgIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKyAKKyAjaWYgSEFWRV9TVFJJTkdfSAorICMgaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dldHRleHQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dldHRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0NjMzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ2V0dGV4dC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitFbmFibGUgb3BlcmF0aW9uIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgZ2V0dGV4dC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDEyLzEwLzE5CisKK0luZGV4OiBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU3OjUxLjY0Njk3MDIwNCArMDAwMAorKysrIGdyZXAtMi41LjFhL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU5OjQ5Ljk0Njk2ODgwMyArMDAwMAorQEAgLTE0MCw0ICsxNDAsNCBAQAorIAlBQ19DSEVDS19MSUIocGNyZSwgcGNyZV9leGVjKQorIGZpCisgCistQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaF0pCisrQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTlkMDY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVGhlIHBhdGNoIHRvIGZpeCBDVkUtMjAxMi01NjY3CitSZWZlcmVuY2U6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD02ODY2MDUmYWN0aW9uPWRpZmYKKworTXVsdGlwbGUgaW50ZWdlciBvdmVyZmxvd3MgaW4gR05VIEdyZXAgYmVmb3JlIDIuMTEgbWlnaHQgYWxsb3cKK2NvbnRleHQtZGVwZW5kZW50IGF0dGFja2VycyB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHZpYSB2ZWN0b3JzCitpbnZvbHZpbmcgYSBsb25nIGlucHV0IGxpbmUgdGhhdCB0cmlnZ2VycyBhIGhlYXAtYmFzZWQgYnVmZmVyIG92ZXJmbG93LgorCitodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMi01NjY3CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCitUaGlzIHZlcnNpb24gb2YgR05VIEdyZXAgaGFzIGJlZW4gYWJhbmRvbmVkIHVwc3RyZWFtIGFuZCB0aGV5IGFyZSBubyBsb25nZXIKK2FjY2VwdGluZyBwYXRjaGVzLiAgVGhpcyBpcyBub3QgYSBiYWNrcG9ydC4KKworU2lnbmVkLW9mZi1ieSBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdyZXAuYyB8ICAgIDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzozOTozMy4zNTkxOTE3NjkgKzA4MDAKKysrKyBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzo1MDoyMi42MDkxOTE4ODIgKzA4MDAKK0BAIC0zMDYsNiArMzA2LDExIEBAIGZpbGxidWYgKHNpemVfdCBzYXZlLCBzdHJ1Y3Qgc3RhdHMgY29uc3QKKyAgIGludCBjYyA9IDE7CisgICBjaGFyICpyZWFkYnVmOworICAgc2l6ZV90IHJlYWRzaXplOworKyAgY29uc3Qgc2l6ZV90IG1heF9zYXZlID0gSU5UX01BWCAvIDI7CisrCisrICAvKiBMaW1pdCB0aGUgYW1vdW50IG9mIHNhdmVkIGRhdGEgdG8gSU5UX01BWCB0byBmaXggQ1ZFLTIwMTItNTY2NyAqLworKyAgaWYgKHNhdmUgPiBtYXhfc2F2ZSkKKysgICAgIGVycm9yICgyLCAwLCBfKCJsaW5lIHRvbyBsb25nIikpOworIAorICAgLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgYnVmZmVyIHRvIHN0YXJ0IG9mIG9sZCBzdHVmZgorICAgICAgdGhhdCB3ZSB3YW50IHRvIHNhdmUuICAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXAtZWdyZXAtZmdyZXAtRml4LUxTQi1ORy1jYXNlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjdlZTU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2gKQEAgLTAsMCArMSwxMzQyIEBACitGcm9tIGM4ODRkZDEyZWMwNjI1NjkzMzU3MDI4NDhmYzVmMjlmNDM2YzI4ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBNb24sIDI1IE1heSAyMDE1IDEwOjE1OjU3ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdyZXAgZWdyZXAgZmdyZXA6IEZpeCBMU0IgTkcgY2FzZXMuCisKK1RoZSBMU0IgY29yZSB0ZXN0IHJlcXVpcmVzIGdyZXAgZWdyZXAgYW5kIGZncmVwIGNhbgorcGVyZm9ybSBwYXR0ZXJuIG1hdGNoaW5nIGluIHNlYXJjaGVzIHdpdGhvdXQgcmVnYXJkCit0byBjYXNlIGlmIC1pIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQuCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGxpYi9wb3NpeC9yZWdleC5oIHwgICA0ICsKKyBzcmMvZGZhLmMgICAgICAgICB8ICAyMiArLQorIHNyYy9ncmVwLmMgICAgICAgIHwgIDk2ICsrKystLS0KKyBzcmMvc2VhcmNoLmMgICAgICB8IDgzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDc2OCBpbnNlcnRpb25zKCspLCAxODcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcG9zaXgvcmVnZXguaCBiL2xpYi9wb3NpeC9yZWdleC5oCitpbmRleCA2M2MyZmVmLi43YmIyYjBlIDEwMDY0NAorLS0tIGEvbGliL3Bvc2l4L3JlZ2V4LmgKKysrKyBiL2xpYi9wb3NpeC9yZWdleC5oCitAQCAtMTA5LDYgKzEwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAgICBJZiBub3Qgc2V0LCBceywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCisgI2RlZmluZSBSRV9JTlRFUlZBTFMgKFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSA8PCAxKQorIAorKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisrI2RlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKKysKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICssID8gYW5kIHwgYXJlbid0IHJlY29nbml6ZWQgYXMgb3BlcmF0b3JzLgorICAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KKyAjZGVmaW5lIFJFX0xJTUlURURfT1BTIChSRV9JTlRFUlZBTFMgPDwgMSkKK2RpZmYgLS1naXQgYS9zcmMvZGZhLmMgYi9zcmMvZGZhLmMKK2luZGV4IDU5MGJmYTcuLjI3Yzg3NmEgMTAwNjQ0CistLS0gYS9zcmMvZGZhLmMKKysrKyBiL3NyYy9kZmEuYworQEAgLTQxNCw3ICs0MTQsNyBAQCB1cGRhdGVfbWJfbGVuX2luZGV4ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBpbnQgbGVuKQorIAorIC8qIFRoaXMgZnVuY3Rpb24gZmV0Y2ggYSB3aWRlIGNoYXJhY3RlciwgYW5kIHVwZGF0ZSBjdXJfbWJfbGVuLAorICAgIHVzZWQgb25seSBpZiB0aGUgY3VycmVudCBsb2NhbGUgaXMgYSBtdWx0aWJ5dGUgZW52aXJvbm1lbnQuICAqLworLXN0YXRpYyB3Y2hhcl90Cisrc3RhdGljIHdpbnRfdAorIGZldGNoX3djIChjaGFyIGNvbnN0ICplb2ZlcnIpCisgeworICAgd2NoYXJfdCB3YzsKK0BAIC00MjMsNyArNDIzLDcgQEAgZmV0Y2hfd2MgKGNoYXIgY29uc3QgKmVvZmVycikKKyAgICAgICBpZiAoZW9mZXJyICE9IDApCisgCWRmYWVycm9yIChlb2ZlcnIpOworICAgICAgIGVsc2UKKy0JcmV0dXJuIC0xOworKwlyZXR1cm4gV0VPRjsKKyAgICAgfQorIAorICAgY3VyX21iX2xlbiA9IG1icnRvd2MoJndjLCBsZXhwdHIsIGxleGxlZnQsICZtYnMpOworQEAgLTQ1OSw3ICs0NTksNyBAQCBmZXRjaF93YyAoY2hhciBjb25zdCAqZW9mZXJyKQorIHN0YXRpYyB2b2lkCisgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyB7CistICB3Y2hhcl90IHdjLCB3YzEsIHdjMjsKKysgIHdpbnRfdCB3Yywgd2MxLCB3YzI7CisgCisgICAvKiBXb3JrIGFyZWEgdG8gYnVpbGQgYSBtYl9jaGFyX2NsYXNzZXMuICAqLworICAgc3RydWN0IG1iX2NoYXJfY2xhc3NlcyAqd29ya19tYmM7CitAQCAtNDk2LDcgKzQ5Niw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgICAgIHdvcmtfbWJjLT5pbnZlcnQgPSAwOworICAgZG8KKyAgICAgeworLSAgICAgIHdjMSA9IC0xOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKysgICAgICB3YzEgPSBXRU9GOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKyAKKyAgICAgICAvKiBOb3RlIHRoYXQgaWYgd2UncmUgbG9va2luZyBhdCBzb21lIG90aGVyIFs6Li4uOl0gY29uc3RydWN0LAorIAkgd2UganVzdCB0cmVhdCBpdCBhcyBhIGJ1bmNoIG9mIG9yZGluYXJ5IGNoYXJhY3RlcnMuICBXZSBjYW4gZG8KK0BAIC01ODYsNyArNTg2LDcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJCSAgICAgIHdvcmtfbWJjLT5jb2xsX2VsZW1zW3dvcmtfbWJjLT5uY29sbF9lbGVtcysrXSA9IGVsZW07CisgCQkgICAgfQorICAJCX0KKy0JICAgICAgd2MgPSAtMTsKKysJICAgICAgd2MxID0gd2MgPSBXRU9GOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIC8qIFdlIHRyZWF0ICdbJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIgaGVyZS4gICovCitAQCAtNjAwLDcgKzYwMCw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCSAgICB3YyA9IGZldGNoX3djKCgiVW5iYWxhbmNlZCBbIikpOworIAl9CisgCistICAgICAgaWYgKHdjMSA9PSAtMSkKKysgICAgICBpZiAod2MxID09IFdFT0YpCisgCXdjMSA9IGZldGNoX3djKF8oIlVuYmFsYW5jZWQgWyIpKTsKKyAKKyAgICAgICBpZiAod2MxID09IEwnLScpCitAQCAtNjMwLDE3ICs2MzAsMTcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJICAgIH0KKyAJICBSRUFMTE9DX0lGX05FQ0VTU0FSWSh3b3JrX21iYy0+cmFuZ2Vfc3RzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9zdHNfYWwsIHdvcmtfbWJjLT5ucmFuZ2VzICsgMSk7CistCSAgd29ya19tYmMtPnJhbmdlX3N0c1t3b3JrX21iYy0+bnJhbmdlc10gPSB3YzsKKysJICB3b3JrX21iYy0+cmFuZ2Vfc3RzW3dvcmtfbWJjLT5ucmFuZ2VzXSA9ICh3Y2hhcl90KXdjOworIAkgIFJFQUxMT0NfSUZfTkVDRVNTQVJZKHdvcmtfbWJjLT5yYW5nZV9lbmRzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9lbmRzX2FsLCB3b3JrX21iYy0+bnJhbmdlcyArIDEpOworLQkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gd2MyOworKwkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gKHdjaGFyX3Qpd2MyOworIAl9CistICAgICAgZWxzZSBpZiAod2MgIT0gLTEpCisrICAgICAgZWxzZSBpZiAod2MgIT0gV0VPRikKKyAJLyogYnVpbGQgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworIAl7CisgCSAgUkVBTExPQ19JRl9ORUNFU1NBUlkod29ya19tYmMtPmNoYXJzLCB3Y2hhcl90LCBjaGFyc19hbCwKKyAJCQkgICAgICAgd29ya19tYmMtPm5jaGFycyArIDEpOworLQkgIHdvcmtfbWJjLT5jaGFyc1t3b3JrX21iYy0+bmNoYXJzKytdID0gd2M7CisrCSAgd29ya19tYmMtPmNoYXJzW3dvcmtfbWJjLT5uY2hhcnMrK10gPSAod2NoYXJfdCl3YzsKKyAJfQorICAgICB9CisgICB3aGlsZSAoKHdjID0gd2MxKSAhPSBMJ10nKTsKK0BAIC0yNTUyLDYgKzI1NTIsOCBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBpbnQgcywgcG9zaXRpb24gcG9zLCBpbnQgaW5kZXgpCisgICAgIH0KKyAKKyAgIC8qIG1hdGNoIHdpdGggYSBjaGFyYWN0ZXI/ICAqLworKyAgaWYgKGNhc2VfZm9sZCkKKysgICAgd2MgPSB0b3dsb3dlciAod2MpOworICAgZm9yIChpID0gMDsgaTx3b3JrX21iYy0+bmNoYXJzOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAod2MgPT0gd29ya19tYmMtPmNoYXJzW2ldKQorZGlmZiAtLWdpdCBhL3NyYy9ncmVwLmMgYi9zcmMvZ3JlcC5jCitpbmRleCAyZmIyZmFjLi4zZmQ0YjQ3IDEwMDY0NAorLS0tIGEvc3JjL2dyZXAuYworKysrIGIvc3JjL2dyZXAuYworQEAgLTMwLDYgKzMwLDEyIEBACisgIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorICMgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgI2VuZGlmCisrI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworKy8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCisrIyBkZWZpbmUgTUJTX1NVUFBPUlQKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImdldG9wdC5oIgorQEAgLTI1NSwxOSArMjYxLDYgQEAgcmVzZXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHN0YXRzICpzdGF0cykKKyAgIGJ1ZmJlZ1stMV0gPSBlb2xieXRlOworICAgYnVmZGVzYyA9IGZkOworIAorLSAgaWYgKGZzdGF0IChmZCwgJnN0YXRzLT5zdGF0KSAhPSAwKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiZnN0YXQiKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLSAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCistICAgIHJldHVybiAwOworLSNpZm5kZWYgREpHUFAKKy0gIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKy0jZWxzZQorLSAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorLSNlbmRpZgorLSAgICByZXR1cm4gMDsKKyAgIGlmIChTX0lTUkVHIChzdGF0cy0+c3RhdC5zdF9tb2RlKSkKKyAgICAgeworICAgICAgIGlmIChmaWxlKQorQEAgLTU1OCwzMyArNTUxLDYgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAgICAgeworICAgICAgIHNpemVfdCBtYXRjaF9zaXplOworICAgICAgIHNpemVfdCBtYXRjaF9vZmZzZXQ7CistICAgICAgaWYobWF0Y2hfaWNhc2UpCistICAgICAgICB7CistCSAgLyogWXVjaywgdGhpcyBpcyB0cmlja3kgKi8KKy0gICAgICAgICAgY2hhciAqYnVmID0gKGNoYXIqKSB4bWFsbG9jIChsaW0gLSBiZWcpOworLQkgIGNoYXIgKmliZWcgPSBidWY7CistCSAgY2hhciAqaWxpbSA9IGliZWcgKyAobGltIC0gYmVnKTsKKy0JICBpbnQgaTsKKy0JICBmb3IgKGkgPSAwOyBpIDwgbGltIC0gYmVnOyBpKyspCistCSAgICBpYmVnW2ldID0gdG9sb3dlciAoYmVnW2ldKTsKKy0JICB3aGlsZSAoKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGliZWcsIGlsaW0taWJlZywgJm1hdGNoX3NpemUsIDEpKQorLQkJICE9IChzaXplX3QpIC0xKQorLQkgICAgeworLQkgICAgICBjaGFyIGNvbnN0ICpiID0gYmVnICsgbWF0Y2hfb2Zmc2V0OworLQkgICAgICBpZiAoYiA9PSBsaW0pCistCQlicmVhazsKKy0JICAgICAgZndyaXRlIChiZWcsIHNpemVvZiAoY2hhciksIG1hdGNoX29mZnNldCwgc3Rkb3V0KTsKKy0JICAgICAgcHJpbnRmICgiXDMzWyVzbSIsIGdyZXBfY29sb3IpOworLQkgICAgICBmd3JpdGUgKGIsIHNpemVvZiAoY2hhciksIG1hdGNoX3NpemUsIHN0ZG91dCk7CistCSAgICAgIGZwdXRzICgiXDMzWzAwbSIsIHN0ZG91dCk7CistCSAgICAgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworLQkgICAgICBpYmVnID0gaWJlZyArIG1hdGNoX29mZnNldCArIG1hdGNoX3NpemU7CistCSAgICB9CistCSAgZndyaXRlIChiZWcsIDEsIGxpbSAtIGJlZywgc3Rkb3V0KTsKKy0JICBmcmVlIChidWYpOworLQkgIGxhc3RvdXQgPSBsaW07CistCSAgcmV0dXJuOworLQl9CisgICAgICAgd2hpbGUgKGxpbS1iZWcgJiYgKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGJlZywgbGltIC0gYmVnLCAmbWF0Y2hfc2l6ZSwgMSkpCisgCSAgICAgIT0gKHNpemVfdCkgLTEpCisgCXsKK0BAIC02MDEsNiArNTY3LDcgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAJICBmcHV0cyAoIlwzM1swMG0iLCBzdGRvdXQpOworIAkgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworIAl9CisrICAgICAgZnB1dHMgKCJcMzNbSyIsIHN0ZG91dCk7CisgICAgIH0KKyAgIGZ3cml0ZSAoYmVnLCAxLCBsaW0gLSBiZWcsIHN0ZG91dCk7CisgICBpZiAoZmVycm9yIChzdGRvdXQpKQorQEAgLTYyMyw3ICs1OTAsNyBAQCBwcnBlbmRpbmcgKGNoYXIgY29uc3QgKmxpbSkKKyAgICAgICBzaXplX3QgbWF0Y2hfc2l6ZTsKKyAgICAgICAtLXBlbmRpbmc7CisgICAgICAgaWYgKG91dGxlZnQKKy0JICB8fCAoKCgqZXhlY3V0ZSkgKGxhc3RvdXQsIG5sIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorKwkgIHx8ICgoKCpleGVjdXRlKSAobGFzdG91dCwgbmwgKyAxIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorIAkgICAgICA9PSAhb3V0X2ludmVydCkpCisgCXBybGluZSAobGFzdG91dCwgbmwgKyAxLCAnLScpOworICAgICAgIGVsc2UKK0BAIC04OTUsNiArODYyLDE5IEBAIGdyZXBmaWxlIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3Qgc3RhdHMgKnN0YXRzKQorICAgICB9CisgICBlbHNlCisgICAgIHsKKysgICAgICBpZiAoc3RhdCAoZmlsZSwgJnN0YXRzLT5zdGF0KSAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAgICBzdXBwcmVzc2libGVfZXJyb3IgKGZpbGUsIGVycm5vKTsKKysgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgICAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCisrICAgICAgICByZXR1cm4gMTsKKysjaWZuZGVmIERKR1BQCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU1NPQ0soc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU0ZJRk8oc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbHNlCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbmRpZgorKyAgICAgICAgcmV0dXJuIDE7CisgICAgICAgd2hpbGUgKChkZXNjID0gb3BlbiAoZmlsZSwgT19SRE9OTFkpKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisgCWNvbnRpbnVlOworIAorQEAgLTE2ODEsOSArMTY2MSw2IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIikpCisgCSAgb3V0X2ludmVydCBePSAxOworIAkgIG1hdGNoX2xpbmVzID0gbWF0Y2hfd29yZHMgPSAwOworIAl9CistICAgICAgZWxzZQorLQkvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworLSAgICAgICAgLS1rZXljYzsKKyAgICAgfQorICAgZWxzZQorICAgICBpZiAob3B0aW5kIDwgYXJnYykKK0BAIC0xNjk3LDYgKzE2NzQsMzcgQEAgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iKSkKKyAgIGlmICghaW5zdGFsbF9tYXRjaGVyIChtYXRjaGVyKSAmJiAhaW5zdGFsbF9tYXRjaGVyICgiZGVmYXVsdCIpKQorICAgICBhYm9ydCAoKTsKKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEgJiYgbWF0Y2hfaWNhc2UpCisrICAgIHsKKysgICAgICB3Y2hhcl90IHdjOworKyAgICAgIG1ic3RhdGVfdCBjdXJfc3RhdGUsIHByZXZfc3RhdGU7CisrICAgICAgaW50IGksIGxlbiA9IHN0cmxlbihrZXlzKTsKKysKKysgICAgICBtZW1zZXQoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuIDspCisrCXsKKysJICBzaXplX3QgbWJjbGVuOworKwkgIG1iY2xlbiA9IG1icnRvd2MoJndjLCBrZXlzICsgaSwgbGVuIC0gaSwgJmN1cl9zdGF0ZSk7CisrCSAgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IDApCisrCSAgICB7CisrCSAgICAgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisrCQkgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisrCSAgICAgIG1iY2xlbiA9IDE7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoaXN3dXBwZXIoKHdpbnRfdCl3YykpCisrCQl7CisrCQkgIHdjID0gdG93bG93ZXIoKHdpbnRfdCl3Yyk7CisrCQkgIHdjcnRvbWIoa2V5cyArIGksIHdjLCAmY3VyX3N0YXRlKTsKKysJCX0KKysJICAgIH0KKysJICBpICs9IG1iY2xlbjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisgICAoKmNvbXBpbGUpKGtleXMsIGtleWNjKTsKKyAKKyAgIGlmICgoYXJnYyAtIG9wdGluZCA+IDEgJiYgIW5vX2ZpbGVuYW1lcykgfHwgd2l0aF9maWxlbmFtZXMpCitkaWZmIC0tZ2l0IGEvc3JjL3NlYXJjaC5jIGIvc3JjL3NlYXJjaC5jCitpbmRleCA3YmQyMzNmLi4zYzZhNDg1IDEwMDY0NAorLS0tIGEvc3JjL3NlYXJjaC5jCisrKysgYi9zcmMvc2VhcmNoLmMKK0BAIC0xOCw5ICsxOCwxMyBAQAorIAorIC8qIFdyaXR0ZW4gQXVndXN0IDE5OTIgYnkgTWlrZSBIYWVydGVsLiAqLworIAorKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAxCisrI2VuZGlmCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworIC8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCitAQCAtMzEsNyArMzUsNyBAQAorIAorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZ3JlcC5oIgorLSNpbmNsdWRlICJyZWdleC5oIgorKyNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlICJkZmEuaCIKKyAjaW5jbHVkZSAia3dzZXQuaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zOSw2ICs0Myw5IEBACisgI2lmZGVmIEhBVkVfTElCUENSRQorICMgaW5jbHVkZSA8cGNyZS5oPgorICNlbmRpZgorKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2VuZGlmCisgCisgI2RlZmluZSBOQ0hBUiAoVUNIQVJfTUFYICsgMSkKKyAKK0BAIC03MCw5ICs3NywxMCBAQCBzdGF0aWMga3dzZXRfdCBrd3NldDsKKyAgICBjYWxsIHRoZSByZWdleHAgbWF0Y2hlciBhdCBhbGwuICovCisgc3RhdGljIGludCBrd3NldF9leGFjdF9tYXRjaGVzOworIAorLSNpZiBkZWZpbmVkKE1CU19TVVBQT1JUKQorLXN0YXRpYyBjaGFyKiBjaGVja19tdWx0aWJ5dGVfc3RyaW5nIFBBUkFNUyAoKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKy0jZW5kaWYKKysvKiBVVEYtOCBlbmNvZGluZyBhbGxvd3Mgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgd2UgY2FuJ3Qgb3RoZXJ3aXNlCisrICAgYXNzdW1lIGluIGEgbXVsdGlieXRlIGVuY29kaW5nLiAqLworK3N0YXRpYyBpbnQgdXNpbmdfdXRmODsKKysKKyBzdGF0aWMgdm9pZCBrd3Npbml0IFBBUkFNUyAoKHZvaWQpKTsKKyBzdGF0aWMgdm9pZCBrd3NtdXN0cyBQQVJBTVMgKCh2b2lkKSk7Cisgc3RhdGljIHZvaWQgR2NvbXBpbGUgUEFSQU1TICgoY2hhciBjb25zdCAqLCBzaXplX3QpKTsKK0BAIC04NCw2ICs5MiwxNSBAQCBzdGF0aWMgdm9pZCBQY29tcGlsZSBQQVJBTVMgKChjaGFyIGNvbnN0ICosIHNpemVfdCApKTsKKyBzdGF0aWMgc2l6ZV90IFBleGVjdXRlIFBBUkFNUyAoKGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzaXplX3QgKiwgaW50KSk7CisgCisgdm9pZAorK2NoZWNrX3V0ZjggKHZvaWQpCisreworKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysgIGlmIChzdHJjbXAgKG5sX2xhbmdpbmZvIChDT0RFU0VUKSwgIlVURi04IikgPT0gMCkKKysgICAgdXNpbmdfdXRmOCA9IDE7CisrI2VuZGlmCisrfQorKworK3ZvaWQKKyBkZmFlcnJvciAoY2hhciBjb25zdCAqbWVzZykKKyB7CisgICBlcnJvciAoMiwgMCwgbWVzZyk7CitAQCAtMTQxLDM4ICsxNTgsNiBAQCBrd3NtdXN0cyAodm9pZCkKKyAgICAgfQorIH0KKyAKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0vKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlIHRoZSBhcnJheSB3aGljaCBjb3JyZXNwb25kIHRvICJidWYiLgorLSAgIFRoZW4gdGhpcyBjaGVjayBtdWx0aWJ5dGUgc3RyaW5nIGFuZCBtYXJrIG9uIHRoZSBwb3NpdGlvbnMgd2hpY2gKKy0gICBhcmUgbm90IHNpbmdsZWJ5dGUgY2hhcmFjdGVyIG5vciB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZQorLSAgIGNoYXJhY3Rlci4gIENhbGxlciBtdXN0IGZyZWUgdGhlIGFycmF5LiAgKi8KKy1zdGF0aWMgY2hhcioKKy1jaGVja19tdWx0aWJ5dGVfc3RyaW5nKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpCisteworLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IG1hbGxvYyhzaXplKTsKKy0gIG1ic3RhdGVfdCBjdXJfc3RhdGU7CistICBpbnQgaTsKKy0gIG1lbXNldCgmY3VyX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CistICBtZW1zZXQobWJfcHJvcGVydGllcywgMCwgc2l6ZW9mKGNoYXIpKnNpemUpOworLSAgZm9yIChpID0gMDsgaSA8IHNpemUgOykKKy0gICAgeworLSAgICAgIHNpemVfdCBtYmNsZW47CistICAgICAgbWJjbGVuID0gbWJybGVuKGJ1ZiArIGksIHNpemUgLSBpLCAmY3VyX3N0YXRlKTsKKy0KKy0gICAgICBpZiAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAoc2l6ZV90KSAtMiB8fCBtYmNsZW4gPT0gMCkKKy0JeworLQkgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCistCSAgICAgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCistCSAgbWJjbGVuID0gMTsKKy0JfQorLSAgICAgIG1iX3Byb3BlcnRpZXNbaV0gPSBtYmNsZW47CistICAgICAgaSArPSBtYmNsZW47CistICAgIH0KKy0KKy0gIHJldHVybiBtYl9wcm9wZXJ0aWVzOworLX0KKy0jZW5kaWYKKy0KKyBzdGF0aWMgdm9pZAorIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CitAQCAtMTgxLDcgKzE2Niw4IEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCistICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSk7CisrICBjaGVja191dGY4ICgpOworKyAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgfCAobWF0Y2hfaWNhc2UgPyBSRV9JQ0FTRSA6IDApKTsKKyAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAKKyAgIC8qIEZvciBHTlUgcmVnZXggY29tcGlsZXIgd2UgaGF2ZSB0byBwYXNzIHRoZSBwYXR0ZXJucyBzZXBhcmF0ZWx5IHRvIGRldGVjdAorQEAgLTIxOCw2ICsyMDQsMTAgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0yMzMsNyArMjIzLDcgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiXFwpJCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9iZWdbXSA9ICJcXCheXFx8W15bOmFsbnVtOl1fXVxcKVxcKCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9lbmRbXSA9ICJcXClcXChbXls6YWxudW06XV9dXFx8JFxcKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4gKG4pOworQEAgLTI1NywxNCArMjQ3LDE1IEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCisrICBjaGVja191dGY4ICgpOworICAgaWYgKHN0cmNtcCAobWF0Y2hlciwgImF3ayIpID09IDApCisgICAgIHsKKy0gICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLKTsKKysgICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfQVdLLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCk7CisrICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAgICAgfQorIAorQEAgLTMwMSw2ICsyOTIsMTAgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0zMTYsNyArMzExLDcgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiKSQiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfYmVnW10gPSAiKF58W15bOmFsbnVtOl1fXSkoIjsKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCB3b3JkX2VuZFtdID0gIikoW15bOmFsbnVtOl1fXXwkKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4obik7CitAQCAtMzM5LDE1ICszMzQsMzQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgIGludCBiYWNrcmVmLCBzdGFydCwgbGVuOworICAgc3RydWN0IGt3c21hdGNoIGt3c207CistICBzaXplX3QgaTsKKysgIHNpemVfdCBpLCByZXRfdmFsOworKyAgc3RhdGljIGludCB1c2VfZGZhOworKyAgc3RhdGljIGludCB1c2VfZGZhX2NoZWNrZWQgPSAwOworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IE5VTEw7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisrICBtYnN0YXRlX3QgbWJzOworKyAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorKyAgaWYgKCF1c2VfZGZhX2NoZWNrZWQpCisrICAgIHsKKysgICAgICBjaGFyICpncmVwX3VzZV9kZmEgPSBnZXRlbnYgKCJHUkVQX1VTRV9ERkEiKTsKKysgICAgICBpZiAoIWdyZXBfdXNlX2RmYSkKKysJeworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIGt3c2V0KQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyhidWYsIHNpemUpOworKwkgIC8qIFR1cm4gb2ZmIERGQSB3aGVuIHByb2Nlc3NpbmcgbXVsdGlieXRlIGlucHV0LiAqLworKwkgIHVzZV9kZmEgPSAoTUJfQ1VSX01BWCA9PSAxKTsKKysjZWxzZQorKwkgIHVzZV9kZmEgPSAxOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgdXNlX2RmYSA9IGF0b2kgKGdyZXBfdXNlX2RmYSk7CisrCX0KKysKKysgICAgICB1c2VfZGZhX2NoZWNrZWQgPSAxOworKyAgICB9CisgCisgICBidWZsaW0gPSBidWYgKyBzaXplOworIAorQEAgLTM1OCw0NyArMzcyLDEyMCBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkgIGlmIChrd3NldCkKKyAJICAgIHsKKyAJICAgICAgLyogRmluZCBhIHBvc3NpYmxlIG1hdGNoIHVzaW5nIHRoZSBLV3NldCBtYXRjaGVyLiAqLworLQkgICAgICBzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmbGltIC0gYmVnLCAma3dzbSk7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldDsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgLyoga3dzZXhlYyBkb2Vzbid0IHdvcmsgd2l0aCBtYXRjaF9pY2FzZSBhbmQgbXVsdGlieXRlIGlucHV0LiAqLworKwkgICAgICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrCQkvKiBBdm9pZCBrd3NldCAqLworKwkJb2Zmc2V0ID0gMDsKKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkgICAgICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWZsaW0gLSBiZWcsICZrd3NtKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKy0JCXsKKysJICAgICAgICBnb3RvIGZhaWx1cmU7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCQkgIGlmIChNQl9DVVJfTUFYID4gMSkKKy0JCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZgorLQkJICByZXR1cm4gKHNpemVfdCktMTsKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKyAJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSBjb250YWluaW5nIHRoZSBjYW5kaWRhdGUsIGFuZAorIAkJIHJ1biBpdCB0aHJvdWdoIERGQS4gKi8KKyAJICAgICAgZW5kID0gbWVtY2hyKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbYmVnIC0gYnVmXSA9PSAwKQorKwkgICAgICBpZiAobWJfY3VyX21heCA+IDEgJiYgYnl0ZXNfbGVmdCkKKyAJCWNvbnRpbnVlOworLSNlbmRpZgorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICB3aGlsZSAoYmVnID4gYnVmICYmIGJlZ1stMV0gIT0gZW9sKQorIAkJLS1iZWc7CistCSAgICAgIGlmIChrd3NtLmluZGV4IDwga3dzZXRfZXhhY3RfbWF0Y2hlcykKKy0JCWdvdG8gc3VjY2VzczsKKy0JICAgICAgaWYgKGRmYWV4ZWMgKCZkZmEsIGJlZywgZW5kIC0gYmVnLCAmYmFja3JlZikgPT0gKHNpemVfdCkgLTEpCisrCSAgICAgIGlmICgKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgIShtYXRjaF9pY2FzZSAmJiBtYl9jdXJfbWF4ID4gMSkgJiYKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCSAgKGt3c20uaW5kZXggPCBrd3NldF9leGFjdF9tYXRjaGVzKSkKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKysJICAgICAgaWYgKHVzZV9kZmEgJiYKKysJCSAgZGZhZXhlYyAoJmRmYSwgYmVnLCBlbmQgLSBiZWcsICZiYWNrcmVmKSA9PSAoc2l6ZV90KSAtMSkKKyAJCWNvbnRpbnVlOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIHsKKyAJICAgICAgLyogTm8gZ29vZCBmaXhlZCBzdHJpbmdzOyBzdGFydCB3aXRoIERGQS4gKi8KKy0JICAgICAgc2l6ZV90IG9mZnNldCA9IGRmYWV4ZWMgKCZkZmEsIGJlZywgYnVmbGltIC0gYmVnLCAmYmFja3JlZik7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisrCSAgICAgIGlmICh1c2VfZGZhKQorKwkJb2Zmc2V0ID0gZGZhZXhlYyAoJmRmYSwgYmVnLCBidWZsaW0gLSBiZWcsICZiYWNrcmVmKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKyAJCWJyZWFrOworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSB3ZSd2ZSBmb3VuZC4gKi8KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICBlbmQgPSBtZW1jaHIgKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmIGJ5dGVzX2xlZnQpCisrCQljb250aW51ZTsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgd2hpbGUgKGJlZyA+IGJ1ZiAmJiBiZWdbLTFdICE9IGVvbCkKKyAJCS0tYmVnOworIAkgICAgfQorIAkgIC8qIFN1Y2Nlc3NmdWwsIG5vIGJhY2tyZWZlcmVuY2VzIGVuY291bnRlcmVkISAqLworLQkgIGlmICghYmFja3JlZikKKy0JICAgIGdvdG8gc3VjY2VzczsKKysJICBpZiAodXNlX2RmYSAmJiAhYmFja3JlZikKKysJICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJfQorICAgICAgIGVsc2UKKyAJZW5kID0gYmVnICsgc2l6ZTsKK0BAIC00MTMsMTQgKzUwMCwxMSBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkJCQkgICAgICAgZW5kIC0gYmVnIC0gMSwgJihwYXR0ZXJuc1tpXS5yZWdzKSkpKQorIAkgICAgeworIAkgICAgICBsZW4gPSBwYXR0ZXJuc1tpXS5yZWdzLmVuZFswXSAtIHN0YXJ0OworLQkgICAgICBpZiAoZXhhY3QpCistCQl7CistCQkgICptYXRjaF9zaXplID0gbGVuOworLQkJICByZXR1cm4gc3RhcnQ7CistCQl9CisrCSAgICAgIGlmIChleGFjdCAmJiAhbWF0Y2hfd29yZHMpCisrCSAgICAgICAgZ290byBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW47CisgCSAgICAgIGlmICgoIW1hdGNoX2xpbmVzICYmICFtYXRjaF93b3JkcykKKyAJCSAgfHwgKG1hdGNoX2xpbmVzICYmIGxlbiA9PSBlbmQgLSBiZWcgLSAxKSkKKy0JCWdvdG8gc3VjY2VzczsKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJICAgICAgLyogSWYgLXcsIGNoZWNrIGlmIHRoZSBtYXRjaCBhbGlnbnMgd2l0aCB3b3JkIGJvdW5kYXJpZXMuCisgCQkgV2UgZG8gdGhpcyBpdGVyYXRpdmVseSBiZWNhdXNlOgorIAkJIChhKSB0aGUgbGluZSBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIG9jY3VyZW5jZSBvZiB0aGUKK0BAIC00MzEsMTAgKzUxNSwxMTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgICAgaWYgKG1hdGNoX3dvcmRzKQorIAkJd2hpbGUgKHN0YXJ0ID49IDApCisgCQkgIHsKKy0JCSAgICBpZiAoKHN0YXJ0ID09IDAgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0IC0gMV0pKQorLQkJCSYmIChsZW4gPT0gZW5kIC0gYmVnIC0gMQorLQkJCSAgICB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkpCistCQkgICAgICBnb3RvIHN1Y2Nlc3M7CisrCQkgICAgaW50IGx3b3JkX21hdGNoID0gMDsKKysJCSAgICBpZiAoc3RhcnQgPT0gMCkKKysJCSAgICAgIGx3b3JkX21hdGNoID0gMTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJYXNzZXJ0IChzdGFydCA+IDApOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCWlmIChtYl9jdXJfbWF4ID4gMSkKKysJCQkgIHsKKysJCQkgICAgY29uc3QgY2hhciAqczsKKysJCQkgICAgc2l6ZV90IG1yOworKwkJCSAgICB3Y2hhcl90IHB3YzsKKysKKysJCQkgICAgLyogTG9jYXRlIHRoZSBzdGFydCBvZiB0aGUgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCSAgICAgICBiZWZvcmUgdGhlIG1hdGNoIHBvc2l0aW9uICg9PSBiZWcgKyBzdGFydCkuICovCisrCQkJICAgIGlmICh1c2luZ191dGY4KQorKwkJCSAgICAgIHsKKysJCQkJLyogVVRGLTggaXMgYSBzcGVjaWFsIGNhc2U6IHNjYW4gYmFja3dhcmRzCisrCQkJCSAgIHVudGlsIHdlIGZpbmQgYSA3LWJpdCBjaGFyYWN0ZXIgb3IgYQorKwkJCQkgICBsZWFkIGJ5dGUuICovCisrCQkJCXMgPSBiZWcgKyBzdGFydCAtIDE7CisrCQkJCXdoaWxlIChzID4gYnVmCisrCQkJCSAgICAgICAmJiAodW5zaWduZWQgY2hhcikgKnMgPj0gMHg4MAorKwkJCQkgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIpICpzIDw9IDB4YmYpCisrCQkJCSAgLS1zOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZQorKwkJCSAgICAgIHsKKysJCQkJLyogU2NhbiBmb3J3YXJkcyB0byBmaW5kIHRoZSBzdGFydCBvZiB0aGUKKysJCQkJICAgbGFzdCBjb21wbGV0ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZQorKwkJCQkgICBtYXRjaCBwb3NpdGlvbi4gICovCisrCQkJCXNpemVfdCBieXRlc19sZWZ0ID0gc3RhcnQgLSAxOworKwkJCQlzID0gYmVnOworKwkJCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApCisrCQkJCSAgeworKwkJCQkgICAgbXIgPSBtYnJsZW4gKHMsIGJ5dGVzX2xlZnQsICZtYnMpOworKwkJCQkgICAgaWYgKG1yID09IChzaXplX3QpIC0xIHx8IG1yID09IDApCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCXMrKzsKKysJCQkJCWJ5dGVzX2xlZnQtLTsKKysJCQkJCWNvbnRpbnVlOworKwkJCQkgICAgICB9CisrCQkJCSAgICBpZiAobXIgPT0gKHNpemVfdCkgLTIpCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCWJyZWFrOworKwkJCQkgICAgICB9CisrCQkJCSAgICBzICs9IG1yOworKwkJCQkgICAgYnl0ZXNfbGVmdCAtPSBtcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKwkJCSAgICBtciA9IG1icnRvd2MgKCZwd2MsIHMsIGJlZyArIHN0YXJ0IC0gcywgJm1icyk7CisrCQkJICAgIGlmIChtciA9PSAoc2l6ZV90KSAtMiB8fCBtciA9PSAoc2l6ZV90KSAtMSB8fAorKwkJCQltciA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCQlsd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlIGlmICghKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCQkgICAgICYmIG1yID09IGJlZyArIHN0YXJ0IC0gcykKKysJCQkgICAgICBsd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCQkJZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJCWlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgLSAxXSkpCisrCQkJICBsd29yZF9tYXRjaCA9IDE7CisrCQkgICAgICB9CisrCisrCQkgICAgaWYgKGx3b3JkX21hdGNoKQorKwkJICAgICAgeworKwkJCWludCByd29yZF9tYXRjaCA9IDA7CisrCQkJaWYgKHN0YXJ0ICsgbGVuID09IGVuZCAtIGJlZyAtIDEpCisrCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJZWxzZQorKwkJCSAgeworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCSAgICBpZiAobWJfY3VyX21heCA+IDEpCisrCQkJICAgICAgeworKwkJCQl3Y2hhcl90IG53YzsKKysJCQkJaW50IG1yOworKworKwkJCQltciA9IG1idG93YyAoJm53YywgYmVnICsgc3RhcnQgKyBsZW4sCisrCQkJCQkgICAgIGVuZCAtIGJlZyAtIHN0YXJ0IC0gbGVuIC0gMSk7CisrCQkJCWlmIChtciA8PSAwKQorKwkJCQkgIHsKKysJCQkJICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkJICAgIHJ3b3JkX21hdGNoID0gMTsKKysJCQkJICB9CisrCQkJCWVsc2UgaWYgKCFpc3dhbG51bSAobndjKSAmJiBud2MgIT0gTCdfJykKKysJCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkJICAgIGlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkKKysJCQkgICAgICByd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCisrCQkJaWYgKHJ3b3JkX21hdGNoKQorKwkJCSAgeworKwkJCSAgICBpZiAoIWV4YWN0KQorKwkJCSAgICAgIC8qIFJldHVybnMgdGhlIHdob2xlIGxpbmUuICovCisrCQkJICAgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOworKwkJCSAgICBlbHNlCisrCQkJICAgICAgLyogUmV0dXJucyBqdXN0IHRoaXMgd29yZCBtYXRjaC4gKi8KKysJCQkgICAgICBnb3RvIHN1Y2Nlc3NfaW5fc3RhcnRfYW5kX2xlbjsKKysJCQkgIH0KKysJCSAgICAgIH0KKyAJCSAgICBpZiAobGVuID4gMCkKKyAJCSAgICAgIHsKKyAJCQkvKiBUcnkgYSBzaG9ydGVyIGxlbmd0aCBhbmNob3JlZCBhdCB0aGUgc2FtZSBwbGFjZS4gKi8KK0BAIC00NjEsMjYgKzY0OSwxNTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgIH0KKyAJfSAvKiBmb3IgUmVnZXggcGF0dGVybnMuICAqLworICAgICB9IC8qIGZvciAoYmVnID0gZW5kIC4uKSAqLworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKyBmYWlsdXJlOgorICAgcmV0dXJuIChzaXplX3QpIC0xOworIAorLSBzdWNjZXNzOgorLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLSAgKm1hdGNoX3NpemUgPSBlbmQgLSBiZWc7CistICByZXR1cm4gYmVnIC0gYnVmOworKyBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOgorKyAgbGVuID0gZW5kIC0gYmVnOworKyAgc3RhcnQgPSBiZWcgLSBidWY7CisrICAvKiBGQUxMVEhST1VHSCAqLworKworKyBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKysgIHJldHVybiBzdGFydDsKKyB9CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIGludCBmX2lfbXVsdGlieXRlOyAvKiB3aGV0aGVyIHdlJ3JlIHVzaW5nIHRoZSBuZXcgLUZpIE1CIG1ldGhvZCAqLworK3N0YXRpYyBzdHJ1Y3QKKyt7CisrICB3Y2hhcl90ICoqcGF0dGVybnM7CisrICBzaXplX3QgY291bnQsIG1heGxlbjsKKysgIHVuc2lnbmVkIGNoYXIgKm1hdGNoOworK30gRmltYjsKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIEZjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisgICBjaGFyIGNvbnN0ICpiZWcsICpsaW0sICplcnI7CisgCisrICBjaGVja191dGY4ICgpOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKyAgLyogU3VwcG9ydCAtRiAtaSBmb3IgVVRGLTggaW5wdXQuICovCisrICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrICAgIHsKKysgICAgICBtYnN0YXRlX3QgbWJzOworKyAgICAgIHdjaGFyX3QgKndjcGF0dGVybiA9IHhtYWxsb2MgKChzaXplICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuZW5kID0gcGF0dGVybjsKKysgICAgICBzaXplX3Qgd2NzaXplOworKyAgICAgIGt3c2V0X3QgZmltYl9rd3NldCA9IE5VTEw7CisrICAgICAgY2hhciAqc3RhcnRzID0gTlVMTDsKKysgICAgICB3Y2hhcl90ICp3Y2JlZywgKndjbGltOworKyAgICAgIHNpemVfdCBhbGxvY2F0ZWQgPSAwOworKworKyAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysjIGlmZGVmIF9fR05VX0xJQlJBUllfXworKyAgICAgIHdjc2l6ZSA9IG1ic25ydG93Y3MgKHdjcGF0dGVybiwgJnBhdHRlcm5lbmQsIHNpemUsIHNpemUsICZtYnMpOworKyAgICAgIGlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm4gKyBzaXplKQorKwl3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysjIGVsc2UKKysgICAgICB7CisrCWNoYXIgKnBhdHRlcm5jb3B5ID0geG1hbGxvYyAoc2l6ZSArIDEpOworKworKwltZW1jcHkgKHBhdHRlcm5jb3B5LCBwYXR0ZXJuLCBzaXplKTsKKysJcGF0dGVybmNvcHlbc2l6ZV0gPSAnXDAnOworKwlwYXR0ZXJuZW5kID0gcGF0dGVybmNvcHk7CisrCXdjc2l6ZSA9IG1ic3J0b3djcyAod2NwYXR0ZXJuLCAmcGF0dGVybmVuZCwgc2l6ZSwgJm1icyk7CisrCWlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm5jb3B5ICsgc2l6ZSkKKysJICB3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysJZnJlZSAocGF0dGVybmNvcHkpOworKyAgICAgIH0KKysjIGVuZGlmCisrICAgICAgaWYgKHdjc2l6ZSArIDIgPD0gMikKKysJeworK2ZpbWJfZmFpbDoKKysJICBmcmVlICh3Y3BhdHRlcm4pOworKwkgIGZyZWUgKHN0YXJ0cyk7CisrCSAgaWYgKGZpbWJfa3dzZXQpCisrCSAgICBrd3NmcmVlIChmaW1iX2t3c2V0KTsKKysJICBmcmVlIChGaW1iLnBhdHRlcm5zKTsKKysJICBGaW1iLnBhdHRlcm5zID0gTlVMTDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmICghKGZpbWJfa3dzZXQgPSBrd3NhbGxvYyAoTlVMTCkpKQorKwkgICAgZXJyb3IgKDIsIDAsIF8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisrCisrCSAgc3RhcnRzID0geG1hbGxvYyAobWJfY3VyX21heCAqIDMpOworKwkgIHdjYmVnID0gd2NwYXR0ZXJuOworKwkgIGRvCisrCSAgICB7CisrCSAgICAgIGludCBpOworKwkgICAgICBzaXplX3Qgd2NsZW47CisrCisrCSAgICAgIGlmIChGaW1iLmNvdW50ID49IGFsbG9jYXRlZCkKKysJCXsKKysJCSAgaWYgKGFsbG9jYXRlZCA9PSAwKQorKwkJICAgIGFsbG9jYXRlZCA9IDEyODsKKysJCSAgZWxzZQorKwkJICAgIGFsbG9jYXRlZCAqPSAyOworKwkJICBGaW1iLnBhdHRlcm5zID0geHJlYWxsb2MgKEZpbWIucGF0dGVybnMsCisrCQkJCQkgICAgc2l6ZW9mICh3Y2hhcl90ICopICogYWxsb2NhdGVkKTsKKysJCX0KKysJICAgICAgRmltYi5wYXR0ZXJuc1tGaW1iLmNvdW50KytdID0gd2NiZWc7CisrCSAgICAgIGZvciAod2NsaW0gPSB3Y2JlZzsKKysJCSAgIHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplICYmICp3Y2xpbSAhPSBMJ1xuJzsgKyt3Y2xpbSkKKysJCSp3Y2xpbSA9IHRvd2xvd2VyICgqd2NsaW0pOworKwkgICAgICAqd2NsaW0gPSBMJ1wwJzsKKysJICAgICAgd2NsZW4gPSB3Y2xpbSAtIHdjYmVnOworKwkgICAgICBpZiAod2NsZW4gPiBGaW1iLm1heGxlbikKKysJCUZpbWIubWF4bGVuID0gd2NsZW47CisrCSAgICAgIGlmICh3Y2xlbiA+IDMpCisrCQl3Y2xlbiA9IDM7CisrCSAgICAgIGlmICh3Y2xlbiA9PSAwKQorKwkJeworKwkJICBpZiAoKGVyciA9IGt3c2luY3IgKGZpbWJfa3dzZXQsICIiLCAwKSkgIT0gMCkKKysJCSAgICBlcnJvciAoMiwgMCwgZXJyKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJZm9yIChpID0gMDsgaSA8ICgxIDw8IHdjbGVuKTsgaSsrKQorKwkJICB7CisrCQkgICAgY2hhciAqcCA9IHN0YXJ0czsKKysJCSAgICBpbnQgaiwgazsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgd2NsZW47ICsraikKKysJCSAgICAgIHsKKysJCQl3Y2hhcl90IHdjID0gd2NiZWdbal07CisrCQkJaWYgKGkgJiAoMSA8PCBqKSkKKysJCQkgIHsKKysJCQkgICAgd2MgPSB0b3d1cHBlciAod2MpOworKwkJCSAgICBpZiAod2MgPT0gd2NiZWdbal0pCisrCQkJICAgICAgY29udGludWU7CisrCQkJICB9CisrCQkJayA9IHdjdG9tYiAocCwgd2MpOworKwkJCWlmIChrIDw9IDApCisrCQkJICBnb3RvIGZpbWJfZmFpbDsKKysJCQlwICs9IGs7CisrCQkgICAgICB9CisrCQkgICAgaWYgKChlcnIgPSBrd3NpbmNyIChmaW1iX2t3c2V0LCBzdGFydHMsIHAgLSBzdGFydHMpKSAhPSAwKQorKwkJICAgICAgZXJyb3IgKDIsIDAsIGVycik7CisrCQkgIH0KKysJICAgICAgaWYgKHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplKQorKwkJKyt3Y2xpbTsKKysJICAgICAgd2NiZWcgPSB3Y2xpbTsKKysJICAgIH0KKysJICB3aGlsZSAod2NiZWcgPCB3Y3BhdHRlcm4gKyB3Y3NpemUpOworKwkgIGZfaV9tdWx0aWJ5dGUgPSAxOworKwkgIGt3c2V0ID0gZmltYl9rd3NldDsKKysJICBmcmVlIChzdGFydHMpOworKwkgIEZpbWIubWF0Y2ggPSB4bWFsbG9jIChGaW1iLmNvdW50KTsKKysJICBpZiAoKGVyciA9IGt3c3ByZXAgKGt3c2V0KSkgIT0gMCkKKysJICAgIGVycm9yICgyLCAwLCBlcnIpOworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisrCisgICBrd3Npbml0ICgpOworICAgYmVnID0gcGF0dGVybjsKKyAgIGRvCitAQCAtNDk5LDYgKzgxNSw3NiBAQCBGY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICAgIGVycm9yICgyLCAwLCBlcnIpOworIH0KKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKytzdGF0aWMgaW50CisrRmltYmV4ZWMgKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqcGxlbiwgaW50IGV4YWN0KQorK3sKKysgIHNpemVfdCBsZW4sIGxldHRlciwgaTsKKysgIGludCByZXQgPSAtMTsKKysgIG1ic3RhdGVfdCBtYnM7CisrICB3Y2hhcl90IHdjOworKyAgaW50IHBhdHRlcm5zX2xlZnQ7CisrCisrICBhc3NlcnQgKG1hdGNoX2ljYXNlICYmIGZfaV9tdWx0aWJ5dGUgPT0gMSk7CisrICBhc3NlcnQgKE1CX0NVUl9NQVggPiAxKTsKKysKKysgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysgIG1lbXNldCAoRmltYi5tYXRjaCwgJ1wxJywgRmltYi5jb3VudCk7CisrICBsZXR0ZXIgPSBsZW4gPSAwOworKyAgcGF0dGVybnNfbGVmdCA9IDE7CisrICB3aGlsZSAocGF0dGVybnNfbGVmdCAmJiBsZW4gPD0gc2l6ZSkKKysgICAgeworKyAgICAgIHNpemVfdCBjOworKworKyAgICAgIHBhdHRlcm5zX2xlZnQgPSAwOworKyAgICAgIGlmIChsZW4gPCBzaXplKQorKwl7CisrCSAgYyA9IG1icnRvd2MgKCZ3YywgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmbWJzKTsKKysJICBpZiAoYyArIDIgPD0gMikKKysJICAgIHJldHVybiByZXQ7CisrCisrCSAgd2MgPSB0b3dsb3dlciAod2MpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgYyA9IDE7CisrCSAgd2MgPSBMJ1wwJzsKKysJfQorKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBGaW1iLmNvdW50OyBpKyspCisrCXsKKysJICBpZiAoRmltYi5tYXRjaFtpXSkKKysJICAgIHsKKysJICAgICAgaWYgKEZpbWIucGF0dGVybnNbaV1bbGV0dGVyXSA9PSBMJ1wwJykKKysJCXsKKysJCSAgLyogRm91bmQgYSBtYXRjaC4gKi8KKysJCSAgKnBsZW4gPSBsZW47CisrCQkgIGlmICghZXhhY3QgJiYgIW1hdGNoX3dvcmRzKQorKwkJICAgIHJldHVybiAwOworKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgLyogRm9yIC13IG9yIGV4YWN0IGxvb2sgZm9yIGxvbmdlc3QgbWF0Y2guICAqLworKwkJICAgICAgcmV0ID0gMDsKKysJCSAgICAgIEZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkJICAgICAgY29udGludWU7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAoRmltYi5wYXR0ZXJuc1tpXVtsZXR0ZXJdID09IHdjKQorKwkJcGF0dGVybnNfbGVmdCA9IDE7CisrCSAgICAgIGVsc2UKKysJCUZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkgICAgfQorKwl9CisrCisrICAgICAgbGVuICs9IGM7CisrICAgICAgbGV0dGVyKys7CisrICAgIH0KKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworIHN0YXRpYyBzaXplX3QKKyBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgeworQEAgLTUwNiw4OCArODkyLDI2OCBAQCBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgICByZWdpc3RlciBzaXplX3QgbGVuOworICAgY2hhciBlb2wgPSBlb2xieXRlOworICAgc3RydWN0IGt3c21hdGNoIGt3c21hdGNoOworKyAgc2l6ZV90IHJldF92YWw7CisgI2lmZGVmIE1CU19TVVBQT1JUCistICBjaGFyICptYl9wcm9wZXJ0aWVzOworLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyAoYnVmLCBzaXplKTsKKysgIGludCBtYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKysgIG1ic3RhdGVfdCBtYnM7CisrICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrICBjb25zdCBjaGFyICpsYXN0X2NoYXIgPSBOVUxMOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorLSAgZm9yIChiZWcgPSBidWY7IGJlZyA8PSBidWYgKyBzaXplOyArK2JlZykKKysgIGZvciAoYmVnID0gYnVmOyBiZWcgPCBidWYgKyBzaXplOyArK2JlZykKKyAgICAgeworLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWYgKyBzaXplIC0gYmVnLCAma3dzbWF0Y2gpOworKyAgICAgIHNpemVfdCBvZmZzZXQ7CisrICAgICAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoKTsKKysKKyAgICAgICBpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQorLQl7CisrCWdvdG8gZmFpbHVyZTsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkgIHJldHVybiBvZmZzZXQ7CisrICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwl7CisrCSAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBvZmZzZXQ7CisrCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkgICAgICBsYXN0X2NoYXIgPSBiZWc7CisrCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCXsKKysJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkgIGJlZysrOworKwkJICBieXRlc19sZWZ0LS07CisrCQkgIGNvbnRpbnVlOworKwkJfQorKworKwkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6IG5vIGdvb2QuICovCisrCQlicmVhazsKKysKKysJICAgICAgYmVnICs9IG1sZW47CisrCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJICAgIH0KKysKKysJICBpZiAoYnl0ZXNfbGVmdCkKKysJICAgIGNvbnRpbnVlOworIAl9CistI2lmZGVmIE1CU19TVVBQT1JUCistICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbb2Zmc2V0K2JlZy1idWZdID09IDApCistCWNvbnRpbnVlOyAvKiBJdCBpcyBhIHBhcnQgb2YgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisrICAgICAgZWxzZQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgICAgIGJlZyArPSBvZmZzZXQ7CistICAgICAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0gICAgICBpZiAoZXhhY3QpCistCXsKKy0JICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBGb3IgZl9pX211bHRpYnl0ZSwgdGhlIHN0cmluZyBhdCBiZWcgbm93IG1hdGNoZXMgZmlyc3QgMyBjaGFycyBvZgorKwkgb25lIG9mIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2ggc3RyaW5ncykuCisrCSBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKyAgICAgIGlmIChmX2lfbXVsdGlieXRlCisrCSAgJiYgRmltYmV4ZWMgKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoLnNpemVbMF0sIGV4YWN0KSkKKysJZ290byBuZXh0X2NoYXI7CisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCSAgcmV0dXJuIGJlZyAtIGJ1ZjsKKy0JfQorKyAgICAgIGxlbiA9IGt3c21hdGNoLnNpemVbMF07CisrICAgICAgaWYgKGV4YWN0ICYmICFtYXRjaF93b3JkcykKKysJZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworICAgICAgIGlmIChtYXRjaF9saW5lcykKKyAJeworIAkgIGlmIChiZWcgPiBidWYgJiYgYmVnWy0xXSAhPSBlb2wpCistCSAgICBjb250aW51ZTsKKysJICAgIGdvdG8gbmV4dF9jaGFyOworIAkgIGlmIChiZWcgKyBsZW4gPCBidWYgKyBzaXplICYmIGJlZ1tsZW5dICE9IGVvbCkKKy0JICAgIGNvbnRpbnVlOworKwkgICAgZ290byBuZXh0X2NoYXI7CisgCSAgZ290byBzdWNjZXNzOworIAl9CisgICAgICAgZWxzZSBpZiAobWF0Y2hfd29yZHMpCistCWZvciAodHJ5ID0gYmVnOyBsZW47ICkKKy0JICB7CistCSAgICBpZiAodHJ5ID4gYnVmICYmIFdDSEFSKCh1bnNpZ25lZCBjaGFyKSB0cnlbLTFdKSkKKy0JICAgICAgYnJlYWs7CistCSAgICBpZiAodHJ5ICsgbGVuIDwgYnVmICsgc2l6ZSAmJiBXQ0hBUigodW5zaWduZWQgY2hhcikgdHJ5W2xlbl0pKQorLQkgICAgICB7CistCQlvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoKTsKKy0JCWlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCistCQkgIHsKKysJeworKwkgIHdoaWxlIChsZW4pCisrCSAgICB7CisrCSAgICAgIGludCB3b3JkX21hdGNoID0gMDsKKysJICAgICAgaWYgKGJlZyA+IGJ1ZikKKysJCXsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JCSAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCQkgICAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysJCSAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJICAgIHsKKysJCSAgICAgIGNvbnN0IGNoYXIgKnM7CisrCQkgICAgICBpbnQgbXI7CisrCQkgICAgICB3Y2hhcl90IHB3YzsKKysKKysJCSAgICAgIGlmICh1c2luZ191dGY4KQorKwkJCXsKKysJCQkgIHMgPSBiZWcgLSAxOworKwkJCSAgd2hpbGUgKHMgPiBidWYKKysJCQkJICYmICh1bnNpZ25lZCBjaGFyKSAqcyA+PSAweDgwCisrCQkJCSAmJiAodW5zaWduZWQgY2hhcikgKnMgPD0gMHhiZikKKysJCQkgICAgLS1zOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQlzID0gbGFzdF9jaGFyOworKwkJICAgICAgbXIgPSBtYnRvd2MgKCZwd2MsIHMsIGJlZyAtIHMpOworKwkJICAgICAgaWYgKG1yIDw9IDApCisrCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgZWxzZSBpZiAoKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCSAgICAgICAmJiBtciA9PSAoaW50KSAoYmVnIC0gcykpCisrCQkJZ290byBuZXh0X2NoYXI7CisrCQkgICAgfQorKwkJICBlbHNlCisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCQkgICAgcmV0dXJuIG9mZnNldDsKKy0JCSAgfQorLQkJdHJ5ID0gYmVnICsgb2Zmc2V0OworLQkJbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0JICAgICAgfQorLQkgICAgZWxzZQorLQkgICAgICBnb3RvIHN1Y2Nlc3M7CistCSAgfQorKwkJICBpZiAoV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbLTFdKSkKKysJCSAgICBnb3RvIG5leHRfY2hhcjsKKysJCX0KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJeworKwkJICB3Y2hhcl90IG53YzsKKysJCSAgaW50IG1yOworKworKwkJICBtciA9IG1idG93YyAoJm53YywgYmVnICsgbGVuLCBidWYgKyBzaXplIC0gYmVnIC0gbGVuKTsKKysJCSAgaWYgKG1yIDw9IDApCisrCQkgICAgeworKwkJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgd29yZF9tYXRjaCA9IDE7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICghaXN3YWxudW0gKG53YykgJiYgbndjICE9IEwnXycpCisrCQkgICAgd29yZF9tYXRjaCA9IDE7CisrCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCWlmIChiZWcgKyBsZW4gPj0gYnVmICsgc2l6ZSB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbbGVuXSkpCisrCQkgIHdvcmRfbWF0Y2ggPSAxOworKwkgICAgICBpZiAod29yZF9tYXRjaCkKKysJCXsKKysJCSAgaWYgKCFleGFjdCkKKysJCSAgICAvKiBSZXR1cm5zIHRoZSB3aG9sZSBsaW5lIG5vdyB3ZSBrbm93IHRoZXJlJ3MgYSB3b3JkIG1hdGNoLiAqLworKwkJICAgIGdvdG8gc3VjY2VzczsKKysJCSAgZWxzZQorKwkJICAgIC8qIFJldHVybnMganVzdCB0aGlzIHdvcmQgbWF0Y2guICovCisrCQkgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworKwkJfQorKwkgICAgICBpZiAobGVuID4gMCkKKysJCXsKKysJCSAgLyogVHJ5IGEgc2hvcnRlciBsZW5ndGggYW5jaG9yZWQgYXQgdGhlIHNhbWUgcGxhY2UuICovCisrCQkgIC0tbGVuOworKwkJICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBsZW4sICZrd3NtYXRjaCk7CisrCisrCQkgIGlmIChvZmZzZXQgPT0gLTEpCisrCQkgICAgZ290byBuZXh0X2NoYXI7IC8qIFRyeSBhIGRpZmZlcmVudCBhbmNob3IuICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgICAgIHdoaWxlIChieXRlc19sZWZ0KQorKwkJCXsKKysJCQkgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkJCSAgbGFzdF9jaGFyID0gYmVnOworKwkJCSAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTEgfHwgbWxlbiA9PSAwKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkgICAgICBiZWcrKzsKKysJCQkgICAgICBieXRlc19sZWZ0LS07CisrCQkJICAgICAgY29udGludWU7CisrCQkJICAgIH0KKysKKysJCQkgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogT2Zmc2V0IHBvaW50cyBpbnNpZGUgbXVsdGlieXRlIGNoYXJhY3RlcjoKKysJCQkgICAgICAgKiBubyBnb29kLiAqLworKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICB9CisrCisrCQkJICBiZWcgKz0gbWxlbjsKKysJCQkgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCQl9CisrCisrCQkgICAgICBpZiAoYnl0ZXNfbGVmdCkKKysJCQl7CisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBnb3RvIG5leHRfY2hhcjsgLyogVHJ5IGEgZGlmZmVyZW50IGFuY2hvci4gKi8KKysJCQl9CisrCQkgICAgfQorKwkJICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkgIGJlZyArPSBvZmZzZXQ7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIC8qIFRoZSBzdHJpbmcgYXQgYmVnIG5vdyBtYXRjaGVzIGZpcnN0IDMgY2hhcnMgb2Ygb25lIG9mCisrCQkgICAgIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2gKKysJCSAgICAgc3RyaW5ncykuICBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKwkJICBpZiAoZl9pX211bHRpYnl0ZQorKwkJICAgICAgJiYgRmltYmV4ZWMgKGJlZywgbGVuIC0gb2Zmc2V0LCAma3dzbWF0Y2guc2l6ZVswXSwKKysJCQkJICAgZXhhY3QpKQorKwkJICAgIGdvdG8gbmV4dF9jaGFyOworKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJICBsZW4gPSBrd3NtYXRjaC5zaXplWzBdOworKwkJfQorKwkgICAgfQorKwl9CisgICAgICAgZWxzZQorIAlnb3RvIHN1Y2Nlc3M7CistICAgIH0KKy0KKytuZXh0X2NoYXI6OworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBBZHZhbmNlIHRvIG5leHQgY2hhcmFjdGVyLiAgRm9yIE1CX0NVUl9NQVggPT0gMSBjYXNlIHRoaXMgaXMgaGFuZGxlZAorKwkgYnkgKytiZWcgYWJvdmUuICAqLworKyAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJeworKwkgIGlmICh1c2luZ191dGY4KQorKwkgICAgeworKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnOworKwkgICAgICBpZiAoYyA+PSAweGMyKQorKwkJeworKwkJICBpZiAoYyA8IDB4ZTApCisrCQkgICAgKytiZWc7CisrCQkgIGVsc2UgaWYgKGMgPCAweGYwKQorKwkJICAgIGJlZyArPSAyOworKwkJICBlbHNlIGlmIChjIDwgMHhmOCkKKysJCSAgICBiZWcgKz0gMzsKKysJCSAgZWxzZSBpZiAoYyA8IDB4ZmMpCisrCQkgICAgYmVnICs9IDQ7CisrCQkgIGVsc2UgaWYgKGMgPCAweGZlKQorKwkJICAgIGJlZyArPSA1OworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgc2l6ZV90IGwgPSBtYnJsZW4gKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJm1icyk7CisrCisrCSAgICAgIGxhc3RfY2hhciA9IGJlZzsKKysJICAgICAgaWYgKGwgKyAyID49IDIpCisrCQliZWcgKz0gbCAtIDE7CisrCSAgICAgIGVsc2UKKysJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJICAgIH0KKysJfQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKyAgICB9CisrCisrIGZhaWx1cmU6CisgICByZXR1cm4gLTE7CisgCisgIHN1Y2Nlc3M6CisrI2lmZGVmIE1CU19TVVBQT1JUCisrICBpZiAobWJfY3VyX21heCA+IDEgJiYgIXVzaW5nX3V0ZjgpCisrICAgIHsKKysgICAgICBlbmQgPSBiZWcgKyBsZW47CisrICAgICAgd2hpbGUgKGVuZCA8IGJ1ZiArIHNpemUpCisrCXsKKysJICBzaXplX3QgbWxlbiA9IG1icmxlbiAoZW5kLCBidWYgKyBzaXplIC0gZW5kLCAmbWJzKTsKKysJICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IChzaXplX3QpIC0yIHx8IG1sZW4gPT0gMCkKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkgICAgICBtbGVuID0gMTsKKysJICAgIH0KKysJICBpZiAobWxlbiA9PSAxICYmICplbmQgPT0gZW9sKQorKwkgICAgYnJlYWs7CisrCisrCSAgZW5kICs9IG1sZW47CisrCX0KKysgICAgfQorKyAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgZW5kID0gbWVtY2hyIChiZWcgKyBsZW4sIGVvbCwgKGJ1ZiArIHNpemUpIC0gKGJlZyArIGxlbikpOworKworICAgZW5kKys7CisgICB3aGlsZSAoYnVmIDwgYmVnICYmIGJlZ1stMV0gIT0gZW9sKQorICAgICAtLWJlZzsKKy0gICptYXRjaF9zaXplID0gZW5kIC0gYmVnOworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysgIGxlbiA9IGVuZCAtIGJlZzsKKysgIC8qIEZBTExUSFJPVUdIICovCisrCisrIHN1Y2Nlc3NfaW5fYmVnX2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAgIHJldHVybiBiZWcgLSBidWY7CisgfQorIAorQEAgLTcwMSw4ICsxMjY3LDkgQEAgUGV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorICAgICAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgICAgICBpZiAoIWV4YWN0KQorIAl7CistCSAgZW5kID0gbWVtY2hyIChlbmQsIGVvbCwgYnVmbGltIC0gZW5kKTsKKy0JICBlbmQrKzsKKysJICB3aGlsZSAoZW5kIDwgYnVmbGltKQorKwkgICAgaWYgKCplbmQrKyA9PSBlb2wpCisrCSAgICAgIGJyZWFrOworIAkgIHdoaWxlIChidWYgPCBiZWcgJiYgYmVnWy0xXSAhPSBlb2wpCisgCSAgICAtLWJlZzsKKyAJfQorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2NlNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjozMzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2FjbG9jYWwtMS4xMi9wcm90b3MubTQ6MTI6IEFNX0NfUFJPVE9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IGNvbmZpZ3VyZS5pbjozMzogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKy4uLgorfCBsaWIvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBzcmMvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9jb25maWd1cmUuaW4KKysrKyBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KK0BAIC0zMCw3ICszMCw2IEBAIEFDX1BST0dfUkFOTElCCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfU1lTX0xBUkdFRklMRQorLUFNX0NfUFJPVE9UWVBFUworIEFDX1RZUEVfU0laRV9UCisgQUNfQ0hFQ0tfVFlQRShzc2l6ZV90LCBpbnQpCisgQUNfQ19DT05TVAorSW5kZXg6IGdyZXAtMi41LjFhL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjFhLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgZ3JlcC0yLjUuMWEvbGliL01ha2VmaWxlLmFtCitAQCAtMSw1ICsxLDUgQEAKKyAjCistQVVUT01BS0VfT1BUSU9OUyA9IC4uL3NyYy9hbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAKKyAKKyBTVUJESVJTID0gcG9zaXgKKyAKK0luZGV4OiBncmVwLTIuNS4xYS9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGdyZXAtMi41LjFhL3NyYy9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSw1IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKy1BVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIgbm8tZGVwZW5kZW5jaWVzCisrQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcworIAorIExOID0gbG4KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvdWNsaWJjLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvdWNsaWJjLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA1NGZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS91Y2xpYmMtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEZpeCB0byB1c2UgbWVtcGNweSBpbnN0ZWFkIG9mIF9fbWVtcGNweS4gVGhpcyBpcyBuZWVkZWQgZm9yIHVjbGliYyB3aGljaAorIyBkb2Vzbid0IGRlZmluZSBfX21lbXBjcHksIG9ubHkgbWVtcGNweS4gU2luY2UgYm90aCB1Y2xpYmMgYW5kIGdsaWJjIGhhdmUKKyMgbWVtcGNweSwgd2UnbGwganVzdCB1c2UgdGhhdCBpbnN0ZWFkLgorIyBQYXRjaCBzb3VyY2U6IE9wZW5FbWJlZGRlZAorCitJbmRleDogZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDItMDMtMTQgMDA6Mzk6MDYuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMJMjAwNy0wNS0xNyAxMzo1Mzo1OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC02NSw3ICs2NSw3IEBACisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKyAKKyAjIGlmbmRlZiBtZW1wY3B5CistIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyAgZXJyb3IgIm1lbXBjcHkgbm90IGRldGVjdGVkIgorICMgZW5kaWYKKyAjIGRlZmluZSBIQVZFX01FTVBDUFkJMQorICMgZGVmaW5lIEhBVkVfX19GU0VUTE9DS0lORwkxCitJbmRleDogZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvbGliL2dldG9wdC5jCTIwMDEtMDMtMDQgMTY6MzM6MTIuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMJMjAwNy0wNS0xNyAxMzo1MTo0NC4wMDAwMDAwMDAgKzEwMDAKK0BAIC0zMjYsNyArMzI2LDcgQEAKKyAJbm9ub3B0aW9uX2ZsYWdzX2xlbiA9IG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gMDsKKyAgICAgICBlbHNlCisgCXsKKy0JICBtZW1zZXQgKF9fbWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorKwkgIG1lbXNldCAobWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorIAkJCSAgICAgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pLAorIAkJICAnXDAnLCB0b3AgKyAxIC0gbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pOworIAkgIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gdG9wICsgMTsKK0BAIC00MzcsNyArNDM3LDcgQEAKKyAJICAgICAgaWYgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9PSBOVUxMKQorIAkJbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSAtMTsKKyAJICAgICAgZWxzZQorLQkJbWVtc2V0IChfX21lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisrCQltZW1zZXQgKG1lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisgCQkJJ1wwJywgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gLSBsZW4pOworIAkgICAgfQorIAl9CitJbmRleDogZ3JlcC0yLjUuMS9saWIvcmVnZXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjEub3JpZy9saWIvcmVnZXguYwkyMDAxLTA0LTAzIDA0OjA0OjQ1LjAwMDAwMDAwMCArMTAwMAorKysrIGdyZXAtMi41LjEvbGliL3JlZ2V4LmMJMjAwNy0wNS0xNyAxMzo1MTo0OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC03ODQyLDcgKzc4NDIsNyBAQAorICAgICAgIGlmIChtc2dfc2l6ZSA+IGVycmJ1Zl9zaXplKQorICAgICAgICAgeworICNpZiBkZWZpbmVkIEhBVkVfTUVNUENQWSB8fCBkZWZpbmVkIF9MSUJDCistCSAgKigoY2hhciAqKSBfX21lbXBjcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpKSA9ICdcMCc7CisrCSAgKigoY2hhciAqKSBtZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworICNlbHNlCisgICAgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisgICAgICAgICAgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC9ncmVwLWZpeC1DVkUtMjAxNS0xMzQ1LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwL2dyZXAtZml4LUNWRS0yMDE1LTEzNDUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4YTk4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC9ncmVwLWZpeC1DVkUtMjAxNS0xMzQ1LnBhdGNoCkBAIC0wLDAgKzEsMTU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBDVkUtMjAxNS0xMzQ1LgoraHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZ3JlcC5naXQvY29tbWl0Lz9pZD04M2E5NWJkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDgzYTk1YmQ4Yzg1NjE4NzViOTQ4Y2FkZDQxN2M2NTNkYmU3ZWYyZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdWxpeSBQaXNldHNreSA8eXBpc2V0c2t5QGZiLmNvbT4KK0RhdGU6IFRodSwgMSBKYW4gMjAxNSAxNTozNjo1NSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBncmVwIC1GOiBmaXggYSBoZWFwIGJ1ZmZlciAocmVhZCkgb3ZlcnJ1bgorCitncmVwJ3MgcmVhZCBidWZmZXIgaXMgb2Z0ZW4gZmlsbGVkIHRvIGl0cyBmdWxsIHNpemUsIGV4Y2VwdCB3aGVuCityZWFkaW5nIHRoZSBmaW5hbCBidWZmZXIgb2YgYSBmaWxlLiAgSW4gdGhhdCBjYXNlLCB0aGUgbnVtYmVyIG9mCitieXRlcyByZWFkIG1heSBiZSBmYXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBIb3dldmVyLCBmb3IKK2NlcnRhaW4gdW51c3VhbCBwYXR0ZXJuL3RleHQgY29tYmluYXRpb25zLCBncmVwIC1GIHdvdWxkIG1pc3Rha2VubHkKK2V4YW1pbmUgYnl0ZXMgaW4gdGhhdCB1bmluaXRpYWxpemVkIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiBzZWFyY2hpbmcKK2ZvciBhIG1hdGNoLiAgV2l0aCBjYXJlZnVsbHkgY2hvc2VuIGlucHV0cywgb25lIGNhbiBjYXVzZSBncmVwIC1GIHRvCityZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoYXQgYnVmZmVyIGFsdG9nZXRoZXIuICBUaGlzIHByb2JsZW0gYXJvc2UgdmlhCitjb21taXQgdjIuMTgtOTAtZzczODkzZmYgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbW9yZSBlZmZpY2llbnQKK2hldXJpc3RpYyB1c2luZyB3aGF0IGlzIG5vdyB0aGUgbWVtY2hyX2t3c2V0IGZ1bmN0aW9uLiBUaGUgdXNlIG9mCit0aGF0IGZ1bmN0aW9uIGluIGJtZXhlY190cmFucyBjb3VsZCBsZWF2ZSBUUCBtdWNoIGxhcmdlciB0aGFuIEVQLAorYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYm1fZGVsdGEyX3NlYXJjaCB3b3VsZCBtaXN0YWtlbmx5IGFjY2VzcworYmV5b25kIGVuZCBvZiB0aGUgbWFpbiBpbnB1dCByZWFkIGJ1ZmZlci4KKworKiBzcmMva3dzZXQuYyAoYm1leGVjX3RyYW5zKTogV2hlbiBUUCByZWFjaGVzIG9yIGV4Y2VlZHMgRVAsCitkbyBub3QgY2FsbCBibV9kZWx0YTJfc2VhcmNoLgorKiB0ZXN0cy9rd3NldC1hYnVzZTogTmV3IGZpbGUuCisqIHRlc3RzL01ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBpdC4KKyogVEhBTktTLmluOiBVcGRhdGUuCisqIE5FV1MgKEJ1ZyBmaXhlcyk6IE1lbnRpb24gaXQuCisKK1ByaW9yIHRvIHRoaXMgcGF0Y2gsIHRoaXMgY29tbWFuZCB3b3VsZCB0cmlnZ2VyIGEgVU1SOgorCisgIHByaW50ZiAlMDM2MGRiIDAgfCB2YWxncmluZCBzcmMvZ3JlcCAtRiAkKHByaW50ZiAlMDE5ZFhiIDApCisKKyAgVXNlIG9mIHVuaW5pdGlhbGlzZWQgdmFsdWUgb2Ygc2l6ZSA4CisgICAgIGF0IDB4NDE0MkJFOiBibWV4ZWNfdHJhbnMgKGt3c2V0LmM6NjU3KQorICAgICBieSAweDQxNDNDQTogYm1leGVjIChrd3NldC5jOjY3OCkKKyAgICAgYnkgMHg0MTQ5NzM6IGt3c2V4ZWMgKGt3c2V0LmM6ODQ4KQorICAgICBieSAweDQxNERDNDogRmV4ZWN1dGUgKGt3c2VhcmNoLmM6MTI4KQorICAgICBieSAweDQwNEUyRTogZ3JlcGJ1ZiAoZ3JlcC5jOjEyMzgpCisgICAgIGJ5IDB4NDA1NEJGOiBncmVwIChncmVwLmM6MTQxNykKKyAgICAgYnkgMHg0MDVDRUI6IGdyZXBkZXNjIChncmVwLmM6MTY0NSkKKyAgICAgYnkgMHg0MDVFQzE6IGdyZXBfY29tbWFuZF9saW5lX2FyZyAoZ3JlcC5jOjE2OTIpCisgICAgIGJ5IDB4NDA3N0Q0OiBtYWluIChncmVwLmM6MjU3MCkKKworU2VlIHRoZSBhY2NvbXBhbnlpbmcgdGVzdCBmb3IgaG93IHRvIHRyaWdnZXIgdGhlIGhlYXAgYnVmZmVyIG92ZXJydW4uCisKK1RoYW5rcyB0byBOaW1hIEFnaGRhaWkgZm9yIHRlc3RpbmcgYW5kIGZpbmRpbmcgbnVtZXJvdXMKK3dheXMgdG8gYnJlYWsgZWFybHkgaXRlcmF0aW9ucyBvZiB0aGlzIHBhdGNoLgorLS0tCisgTkVXUyAgICAgICAgICAgICAgfCAgNSArKysrKworIFRIQU5LUy5pbiAgICAgICAgIHwgIDEgKworIHNyYy9rd3NldC5jICAgICAgIHwgIDIgKysKKyB0ZXN0cy9NYWtlZmlsZS5hbSB8ICAxICsKKyB0ZXN0cy9rd3NldC1hYnVzZSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNSBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RzL2t3c2V0LWFidXNlCisKK2RpZmYgLS1naXQgYS9ORVdTIGIvTkVXUworaW5kZXggOTc1NDQwZC4uMzgzNWQ4ZCAxMDA2NDQKKy0tLSBhL05FV1MKKysrKyBiL05FV1MKK0BAIC0yLDYgKzIsMTEgQEAgR05VIGdyZXAgTkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvdXRsaW5lIC0qLQorIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgPy4/ICg/Pz8/LT8/LT8/KSBbP10KKyAKKysqKiBCdWcgZml4ZXMKKysKKysgIGdyZXAgbm8gbG9uZ2VyIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZnJvbSBiZXlvbmQgdGhlIGVuZAorKyAgb2YgdGhlIGhlYXAtYWxsb2NhdGVkIGlucHV0IGJ1ZmZlci4KKysKKyAKKyAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDIuMjEgKDIwMTQtMTEtMjMpIFtzdGFibGVdCisgCitkaWZmIC0tZ2l0IGEvVEhBTktTLmluIGIvVEhBTktTLmluCitpbmRleCBhZWFmNTE2Li42MjQ0NzhkIDEwMDY0NAorLS0tIGEvVEhBTktTLmluCisrKysgYi9USEFOS1MuaW4KK0BAIC02Miw2ICs2Miw3IEBAIE1pY2hhZWwgQWljaGxtYXlyICAgICAgICAgICAgICAgICAgIG1pa2xhQG54LmNvbQorIE1pbGVzIEJhZGVyICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzQGNjcy5tdC5uZWMuY28uanAKKyBNaXJyYXogTWlycmF6ICAgICAgICAgICAgICAgICAgICAgICBtaXJyYXoxQHJhbWJsZXIucnUKKyBOZWxzb24gSC4gRi4gQmVlYmUgICAgICAgICAgICAgICAgICBiZWViZUBtYXRoLnV0YWguZWR1CisrTmltYSBBZ2hkYWlpICAgICAgICAgICAgICAgICAgICAgICAgbmFnaGRhaWlAZmIuY29tCisgT2xhZiBLaXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgb2tpckBucy5sc3QuZGUKKyBQYXVsIEtpbW90byAgICAgICAgICAgICAgICAgICAgICAgICBraW1vdG9Ac3BhY2VuZXQudG4uY29ybmVsbC5lZHUKKyBQw6l0ZXIgUmFkaWNzICAgICAgICAgICAgICAgICAgICAgICAgbWl0Y2hudWxsQGdtYWlsLmNvbQorZGlmZiAtLWdpdCBhL3NyYy9rd3NldC5jIGIvc3JjL2t3c2V0LmMKK2luZGV4IDQwMDNjOGQuLjM3NmY3YzMgMTAwNjQ0CistLS0gYS9zcmMva3dzZXQuYworKysrIGIvc3JjL2t3c2V0LmMKK0BAIC02NDMsNiArNjQzLDggQEAgYm1leGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgIGlmICghIHRwKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICB0cCsrOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGVwIDw9IHRwKQorKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAyY2JhMmNkLi4wNTA4Y2QyIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtNzUsNiArNzUsNyBAQCBURVNUUyA9CQkJCQkJXAorICAgaW5jb25zaXN0ZW50LXJhbmdlCQkJCVwKKyAgIGludmFsaWQtbXVsdGlieXRlLWluZmxvb3AJCQlcCisgICBraGFkYWZ5CQkJCQlcCisrICBrd3NldC1hYnVzZQkJCQkJXAorICAgbG9uZy1saW5lLXZzLTJHaUItcmVhZAkJCVwKKyAgIG1hdGNoLWxpbmVzCQkJCQlcCisgICBtYXgtY291bnQtb3ZlcnJlYWQJCQkJXAorZGlmZiAtLWdpdCBhL3Rlc3RzL2t3c2V0LWFidXNlIGIvdGVzdHMva3dzZXQtYWJ1c2UKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi42ZDhlYzBjCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0cy9rd3NldC1hYnVzZQorQEAgLTAsMCArMSwzMiBAQAorKyMhIC9iaW4vc2gKKysjIEV2b2tlIGEgc2VnZmF1bHQgaW4gYSBoYXJkLXRvLXJlYWNoIGNvZGUgcGF0aCBvZiBrd3NldC5jLgorKyMgVGhpcyBidWcgYWZmZWN0ZWQgZ3JlcCB2ZXJzaW9ucyAyLjE5IHRocm91Z2ggMi4yMS4KKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrLiAiJHtzcmNkaXI9Ln0vaW5pdC5zaCI7IHBhdGhfcHJlcGVuZF8gLi4vc3JjCisrCisrZmFpbD0wCisrCisrIyBUaGlzIHRlc3QgY2FzZSBjaG9vc2VzIGEgaGF5c3RhY2sgb2Ygc2l6ZSAyNjAsMDAwLCBzaW5jZSBwcm9kZGluZworKyMgd2l0aCBnZGIgc2hvd2VkIGEgcmVhbGxvY2F0aW9uIHNsaWdodGx5IGxhcmdlciB0aGFuIHRoYXQgaW4gZmlsbGJ1Zi4KKysjIFRvIHJlYWNoIHRoZSBidWdneSBjb2RlLCB0aGUgbmVlZGxlIG11c3QgaGF2ZSBsZW5ndGggPCAxLzExIHRoYXQgb2YKKysjIHRoZSBoYXlzdGFjaywgYW5kIDEwLDAwMCBpcyBhIG5pY2Ugcm91bmQgbnVtYmVyIHRoYXQgZml0cyB0aGUgYmlsbC4KKytwcmludGYgJyUwMjYwMDAwZFh5XG4nIDAgfCBncmVwIC1GICQocHJpbnRmICUwMTAwMDBkeSAwKQorKworK3Rlc3QgJD8gPSAxIHx8IGZhaWw9MQorKworK0V4aXQgJGZhaWwKKy0tIAorMi40LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjYxMDk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjEuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDNjNDgwNjRkNjQwOTg2MmI4YTg1MGRiODNjODAzOGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTI0NGExMWMwMGRlZThlN2U1ZTcxNGI5YWFhMDUzYWM2Y2JmYTI3ZTEwNGFiZWUyMGQzYzc3OGU0YmIwZTVkZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcGVybC1yZWdleHAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2luaXQubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCisJbXYgJHtEfSR7YmluZGlyfS9mZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZmdyZXAKKwlybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJncmVwIGVncmVwIGZncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2dyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2VncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9mZ3JlcCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjUuMWEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMmRhMjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiUGF0dGVybiBtYXRjaGluZyB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIHZlcnNpb25zIG9mIGNvbW1vbmx5IHVzZWQgZ3JlcCB1dGlsaXRpZXMuICBUaGUgZ3JlcCBjb21tYW5kIHNlYXJjaGVzIG9uZSBvciBtb3JlIGlucHV0IFwKK2ZpbGVzIGZvciBsaW5lcyBjb250YWluaW5nIGEgbWF0Y2ggdG8gYSBzcGVjaWZpZWQgcGF0dGVybi4iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JlcC9ncmVwLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2V2YXJzIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtZWdyZXAtZmdyZXAtRml4LUxTQi1ORy1jYXNlcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTIyMDJmZTQ2Mjc3MGZhNmJlMWJiNjY3YmQ2Y2YzMGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzhjOGEyYmI5MjIzZDFmYjFiMTBiZGQ2MDdjZjQ0ODMwYWZjOTJmZDQ1MWFjNGNkMDc2MTliZjkyYmRkMzEzMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORl9JTkNMVURFRF9SRUdFWCA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCitFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVhfbGliYy1tdXNsID0gIi0td2l0aC1pbmNsdWRlZC1yZWdleCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1wZXJsLXJlZ2V4cCBcCisgICAgICAgICAgICAgICAgJHtFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVh9IgorCitDRkxBR1MgKz0gIi1EIFBST1RPVFlQRVMiCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9pbml0Lm00CisJY3AgLWYgJHtXT1JLRElSfS9NYWtldmFycyAke1N9L3BvLworfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9ncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9ncmVwCisJbXYgJHtEfSR7YmluZGlyfS9lZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZWdyZXAKKwltdiAke0R9JHtiaW5kaXJ9L2ZncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9mZ3JlcAorCXJtZGlyICR7RH0ke2JpbmRpcn0vCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImdyZXAgZWdyZXAgZmdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtlZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZWdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2ZncmVwIgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtZml4LWJpbmRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5YWU3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5zdWIgfCAgIDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCistLS0gYS9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCisrKysgYi9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCitAQCAtMzgsMTYgKzM4LDE2IEBAIGdyb2ZmZXI6IGdyb2ZmZXIuc2ggZ3JvZmZlcjIuc2ggdmVyc2lvbi4KKyAJJChSTSkgJEA7CisgCXNlZCBcCisgICAgICAgICAgICAgLWUgInN8QGdAfCQoZyl8ZyIgXAorLQkgICAgLWUgInN8QEJJTkRJUkB8JChERVNURElSKSQoYmluZGlyKXxnIiBcCisrCSAgICAtZSAic3xAQklORElSQHwkKGJpbmRpcil8ZyIgXAorIAkgICAgLWUgInN8QGxpYmRpckB8JChERVNURElSKSQobGliZGlyKXxnIiBcCisgCSAgICAtZSAic3xAVkVSU0lPTkB8JCh2ZXJzaW9uKSQocmV2aXNpb24pfGciIFwKKyAJICAgICQoc3JjZGlyKS9ncm9mZmVyLnNoID4kQDsKKyAJY2htb2QgK3ggJEAKKyAKKyBpbnN0YWxsX2RhdGE6IGdyb2ZmZXIKKy0JLXRlc3QgLWQgJChERVNURElSKSQoYmluZGlyKSB8fCAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGJpbmRpcikKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorLQkkKElOU1RBTExfU0NSSVBUKSBncm9mZmVyICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktdGVzdCAtZCAkKGJpbmRpcikgfHwgJChta2luc3RhbGxkaXJzKSAkKGJpbmRpcikKKysJLSQoUk0pICQoYmluZGlyKS9ncm9mZmVyCisrCSQoSU5TVEFMTF9TQ1JJUFQpIGdyb2ZmZXIgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLXRlc3QgLWQgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyIHx8IFwKKyAgICAgICAgICAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorQEAgLTU4LDcgKzU4LDcgQEAgaW5zdGFsbF9kYXRhOiBncm9mZmVyCisgCSQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci92ZXJzaW9uLnNoCisgCisgdW5pbnN0YWxsX3N1YjoKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktJChSTSkgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorIAktJChSTSkgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyL3ZlcnNpb24uc2gKKyAJLXJtZGlyICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtcmVtb3ZlLW1vbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0ZWZmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBncm9mZi0xLjE4LjEuNC9NYWtlZmlsZS5pbiB8ICAgIDcgKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDYwLDI3ICs0NjAsMjIgQEAgT1RIRVJESVJTPVwKKyAgIHNyYy9yb2ZmL2dyb2cgXAorICAgc3JjL3JvZmYvbnJvZmYgXAorICAgY29udHJpYi9tbSBcCisgICBjb250cmliL3BpYzJncmFwaCBcCisgICBjb250cmliL2VxbjJncmFwaCBcCistICBjb250cmliL2dyb2ZmZXIgXAorLSAgY29udHJpYi9tb20gXAorLSAgZG9jCisrICBjb250cmliL2dyb2ZmZXIKKyBBTExESVJTPSQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSBcCisgICAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSAkKFRUWURFVkRJUlMpICQoT1RIRVJESVJTKQorIEVYVFJBRElSUz1cCisgICBmb250L2RldnBzL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2ZHZpL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2bGo0L2dlbmVyYXRlIFwKKy0gIHNyYy94ZGl0dmlldyBcCisgICBkb2MKKyBOT01BS0VESVJTPVwKKyAgIGFyY2gvZGpncHAgXAorICAgY29udHJpYi9tbS9leGFtcGxlcyBcCisgICBjb250cmliL21tL21tIFwKKy0gIGNvbnRyaWIvbW9tL2V4YW1wbGVzIFwKKy0gIGNvbnRyaWIvbW9tL21vbWRvYyBcCisgICBzcmMvbGlicy9zbnByaW50ZgorIERJU1RESVJTPVwKKyAgICQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSBcCisgICAkKEFMTFRUWURFVkRJUlMpICQoT1RIRVJESVJTKSAkKEVYVFJBRElSUykgJChOT01BS0VESVJTKQorIFRBUkdFVFM9YWxsIGluc3RhbGwgaW5zdGFsbF9iaW4gaW5zdGFsbF9kYXRhIGNsZWFuIGRpc3RjbGVhbiBtb3N0bHljbGVhbiBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tYW4tbG9jYWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjE4LjEuNC9tYW4tbG9jYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmMWFhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21hbi1sb2NhbC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyb2ZmLTEuMTguMS40Lm9yaWcvdG1hYy9tYW4ubG9jYWwJMjAwMC0xMC0yNiAyMjoxNToxNy4wMDAwMDAwMDAgKzA4MDAKKysrKyBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAkyMDEwLTA4LTI0IDE0OjE3OjUyLjA3MDAwNjY2NCArMDgwMAorQEAgLTEsMiArMSwyNyBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGFuLW9sZC50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gYW4tb2xkLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQorKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWRvYy1sb2NhbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5YzFhNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21kb2MubG9jYWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjE4LjEuNC5vcmlnL3RtYWMvbWRvYy5sb2NhbAkyMDAxLTAzLTIzIDA4OjE3OjUxLjAwMDAwMDAwMCArMDgwMAorKysrIGdyb2ZmLTEuMTguMS40L3RtYWMvbWRvYy5sb2NhbAkyMDEwLTA4LTI0IDE0OjIwOjIyLjAxNDAwNjg0NiArMDgwMAorQEAgLTEsMiArMSwyNiBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGRvYy50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gZG9jLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjFiNDMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjIyLjMub3JpZy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC0xMTMsNyArMTEzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy9ncm9mZi0xLjIyLjItY29ycmVjdC1tYW4ubG9jYWwtaW5zdGFsbC1wYXRoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zL2dyb2ZmLTEuMjIuMi1jb3JyZWN0LW1hbi5sb2NhbC1pbnN0YWxsLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczMzI4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy9ncm9mZi0xLjIyLjItY29ycmVjdC1tYW4ubG9jYWwtaW5zdGFsbC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0NvcnJlY3QgdGhlIGluc3RhbGwgcGF0aCBvZiBtYW4ubG9jYWwgdG8gZml4IGZvbGxvd2luZyBlcnJvcjoKKyAgICAveW9jdG8vYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvZ3JvZmYvMS4yMi4yL3RtYWMvYW4tb2xkLnRtYWM6NjkwOiB3YXJuaW5nOiBjYW4ndCBmaW5kIG1hY3JvIGZpbGUgYG1hbi5sb2NhbCcKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL3RtYWMvTWFrZWZpbGUuc3ViIGIvdG1hYy9NYWtlZmlsZS5zdWIKK2luZGV4IDE1MDYyMzIuLmYxNDY4YzUgMTAwNjQ0CistLS0gYS90bWFjL01ha2VmaWxlLnN1YgorKysrIGIvdG1hYy9NYWtlZmlsZS5zdWIKK0BAIC0xMjEsOSArMTIxLDkgQEAgaW5zdGFsbF9kYXRhOiAkKE5PUk1BTEZJTEVTKSAkKFNQRUNJQUxGSUxFUykgbWFuLmxvY2FsIFwKKyAJICAkKFJNKSAkKERFU1RESVIpJChtZG9jZGlyKS8kJGY7IFwKKyAJICAkKElOU1RBTExfREFUQSkgJCRmLXMgJChERVNURElSKSQobWRvY2RpcikvJCRmOyBcCisgCWRvbmUKKy0JLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tYW4ubG9jYWwgXAorKwktdGVzdCAtZiAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgIHx8ICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbWFuLmxvY2FsIFwKKy0JICAgICAgICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsCisrCSAgICAgICAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwKKyAJLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICB8fCAkKElOU1RBTExfREFUQSkgbWRvYy5sb2NhbC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbAorIAorQEAgLTE2NCw5ICsxNjQsOSBAQCB1bmluc3RhbGxfc3ViOgorIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS8kKHRtYWNfc19wcmVmaXgpcy50bWFjCisgCSQoUk0pICQoREVTVERJUikkKHRtYWNkaXIpLyQodG1hY19hbl9wcmVmaXgpYW4udG1hYworIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS93d3cudG1hYworLQktaWYgY21wIC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsIFwKKysJLWlmIGNtcCAtcyAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgICAgICAgICAgICQoc3JjZGlyKS9tYW4ubG9jYWw7IHRoZW4gXAorLQkgICQoUk0pICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsOyBcCisrCSAgJChSTSkgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsOyBcCisgCWZpCisgCS1pZiBjbXAgLXMgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICAgICAgICAgICAkKHNyY2RpcikvbWRvYy5sb2NhbDsgdGhlbiBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMTguMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNzg2YTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitQUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTQzZmMxNmZjY2Q4NTE5ZmJhNDA1ZjBhMGZmNmU4YTMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vb2xkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICBmaWxlOi8vbWFuLWxvY2FsLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vbWRvYy1sb2NhbC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggXAorIiAKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkY9Ii0td2l0aG91dC14IC0tcHJlZml4PSR7RH0gLS1leGVjLXByZWZpeD0ke0R9IC0tYmluZGlyPSR7RH0ke2JpbmRpcn0gLS1kYXRhZGlyPSR7RH0ke2RhdGFkaXJ9IC0tbWFuZGlyPSR7RH0ke2RhdGFkaXJ9L21hbiAtLWluZm9kaXI9JHtEfSR7ZGF0YWRpcn1pbmZvIC0td2l0aC1hcHByZXNkaXI9JHtEfSR7ZGF0YWRpcn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZWVjYjgxNTMzOTM2ZDI1MWVkMDE1ZjQwZTVmNzI4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjNjN2MzYjZjYWU1ZThjYzUwNjJhMTQ0ZGU1ZWZmMDAyMmU4ZTk3MGUxNzc0NTI5Y2MyZDVkZGU0NmNlNTBkIgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKyAgICBvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgU29tZSBkaXN0cm9zIGhhdmUgYm90aCAvYmluL3BlcmwgYW5kIC91c3IvYmluL3BlcmwsIGJ1dCB3ZSBzZXQgcGVybCBsb2NhdGlvbgorCSMgZm9yIHRhcmdldCBhcyAvdXNyL2Jpbi9wZXJsLCBzbyBmaXggaXQgdG8gL3Vzci9iaW4vcGVybC4KKwlmb3IgaSBpbiBhZm10b2RpdCBtbXJvZmY7IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9LyRpCisJCWZpCisJZG9uZQorCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYKKwljcCAtcmYgJHtEfSR7ZGF0YWRpcn0vZ3JvZmYvc2l0ZS10bWFjLyogJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYvCisJY3AgLXJmICR7RH0ke2RhdGFkaXJ9L2dyb2ZmL3NpdGUtdG1hYy8qICR7RH0ke2RhdGFkaXJ9L2dyb2ZmLyR7UFZ9L3RtYWMvCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSgpIHsKKwlsbiAtcyB0YmwgJEQke2JpbmRpcn0vZ3RibAorCWVjaG8gImV4cG9ydCBHUk9GRl9GT05UX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS9mb250IiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWVjaG8gImV4cG9ydCBHUk9GRl9UTUFDX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS90bWFjIiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjIyLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjIyLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmZmE4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYgpAQCAtMCwwICsxLDcwIEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JvZmYvZ3JvZmYtJHtQVn0udGFyLmd6IFwKKwlmaWxlOi8vZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBcCisJZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2M4MjVmYTY0YmM3MzA2YTg4NWYyZmIyMjY4ZDNlYzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2E0OGE5ZDZjOTc3NTBiZmJkNTM1ZmVlYjViZTAxMTFkYjY0MDZkZGI3YmI3OWZjNjgwODA5Y2RhNmQ4MjhhNSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfSArPSAicGVybCBzZWQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgIiR7QlVJTERfU1lTfSIgIT0gIiR7SE9TVF9TWVN9IiBdOyB0aGVuCisJCXNlZCAtaSBcCisJCSAgICAtZSAnL15HUk9GRkJJTj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm9mZjonIFwKKwkJICAgIC1lICcvXlRST0ZGQklOPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Ryb2ZmOicgXAorCQkgICAgLWUgJy9eR1JPRkZfQklOX1BBVEg9L3M6PS4qOj0ke1NUQUdJTkdfQklORElSX05BVElWRX06JyBcCisJCSAgICAtZSAnL15HUk9GRl9CSU5fRElSPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OicgXAorCQkgICAgJHtTfS9jb250cmliLyovTWFrZWZpbGUuc3ViIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLmluIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLnN1YgorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisgICAgIyBnZW5lcmF0ZSBnbnVsaWIgY29uZmlndXJlIHNjcmlwdAorICAgIG9sZGRpcj1gcHdkYAorICAgIGNkICR7U30vc3JjL2xpYnMvZ251bGliLworICAgIEFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorICAgIGNkICR7b2xkZGlyfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJZm9yIGkgaW4gYWZtdG9kaXQgbW1yb2ZmIGdyb3BkZiBwZGZtb20gZ3JvZzsgZG8KKwkJaWYgWyAtZiAke0R9JHtiaW5kaXJ9LyRpIF07IHRoZW4KKwkJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vJGkKKwkJZmkKKwlkb25lCisJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMgXTsgdGhlbgorCQlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3JvZmYgXAorCQktRiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L2ZvbnQgXAorCQktTSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L3RtYWMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc2l0ZS10bWFjIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59L2dyb2ZmZXIvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvZHVwLWRlZi1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZThkMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2d6aXAgdXNlcyBnbnVsaWIsIHdob3NlIGhlYWRlciBjb25mbGljdCB3aXRoIGdsaWJjLiBUaGlzIHBhdGNoIHJlbmFtZSBzb21lIGZ1bmN0aW9uIHRvIGF2b2lkIGNvbmZsaWN0LgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9nemlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjM4LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjQ0LjAwMDAwMDAwMCArMDgwMAorQEAgLTE2MzcsNyArMTYzNyw3IEBACisgCX0KKyAgICAgICB9CisgCistICAgIGlmIChmdXRpbWVucyAob2ZkLCBvZm5hbWUsIHRpbWVzcGVjKSAhPSAwKQorKyAgICBpZiAoZnV0aW1lbnNfZ251bGliIChvZmQsIG9mbmFtZSwgdGltZXNwZWMpICE9IDApCisgICAgICAgeworIAlpbnQgZSA9IGVycm5vOworIAlXQVJOICgoc3RkZXJyLCAiJXM6ICIsIHByb2dyYW1fbmFtZSkpOworSW5kZXg6IGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2xpYi91dGltZW5zLmMJMjAxMC0wOC0xMyAxMDozMzo0Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5jCTIwMTAtMDgtMTMgMTA6MzQ6MDIuMDAwMDAwMDAwICswODAwCitAQCAtNzUsNyArNzUsNyBAQAorICAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIChzZXR0aW5nIGVycm5vKSBvbiBmYWlsdXJlLiAgKi8KKyAKKyBpbnQKKy1mdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisrZnV0aW1lbnNfZ251bGliIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKyAJICBjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworICAgLyogU29tZSBMaW51eC1iYXNlZCBORlMgY2xpZW50cyBhcmUgYnVnZ3ksIGFuZCBtaXNoYW5kbGUgdGltZSBzdGFtcHMKK0BAIC0xODUsNSArMTg1LDUgQEAKKyBpbnQKKyB1dGltZW5zIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworLSAgcmV0dXJuIGZ1dGltZW5zICgtMSwgZmlsZSwgdGltZXNwZWMpOworKyAgcmV0dXJuIGZ1dGltZW5zX2dudWxpYiAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKyB9CitJbmRleDogZ3ppcC0xLjMuMTIvbGliL3V0aW1lbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd6aXAtMS4zLjEyLm9yaWcvbGliL3V0aW1lbnMuaAkyMDEwLTA4LTEzIDEwOjE0OjU3LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmgJMjAxMC0wOC0xMyAxMDoyMTo0NS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDMgKzEsMyBAQAorICNpbmNsdWRlIDx0aW1lLmg+CistaW50IGZ1dGltZW5zIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisraW50IGZ1dGltZW5zX2dudWxpYiAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworIGludCB1dGltZW5zIChjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9tNC1leHRlbnNpb25zLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyZjY5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorcmVtb3ZlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB0byBmaXggdGhlIGF1dG9jb25mIGVycm9yICJBQ19SRVFVSVJFOiBjaXJjdWxhcgorZGVwZW5kZW5jeSBvZiBBQ19HTlVfU09VUkNFIgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9tNC9leHRlbnNpb25zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9tNC9leHRlbnNpb25zLm00CTIwMTAtMDgtMTYgMTQ6MTg6MTYuMDAwMDAwMDAwICswODAwCisrKysgZ3ppcC0xLjMuMTIvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA4LTE2IDE0OjIxOjU0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjYvd3JvbmctcGF0aC1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODYzZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2ZpeCBNYWtlTWFrZXIgaXNzdWVzIHdpdGggdXNpbmcgd3JvbmcgU0hFTEwvR1JFUAorCitBIHNldCBvZiBzdWJzdGl0dXRpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbCB0YXJnZXQgc2NyaXB0cyB3aXRoIHNlZCBieQorcmVwbGFjaW5nIHNvbWUga2V5IHdvcmRzIHdpdGggdGhlIGRldGVjdGVkIHZhbHVlcyBhdCBjb25maWd1cmUgdGltZSwgdGhpcworaXMgZXhhY3RseSBub3QgY29tcGxpYW50IHdpdGggY3Jvc3MgY29tcGxpbmcsIGFuZCB3aWxsIGNhdXNlIG1pc3NpbmcgcGF0aAorZXJyb3JzIGF0IHJ1biB0aW1lIGxpa2U6CisiL3Vzci9iaW4vemdyZXA6IGxpbmUgMjMwOiAvdXNyL2Jpbi9ncmVwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorCitGaXhlZCBieSByZW1vdmluZyB1bm5lZWRlZCBzdWJzdGl0dXRpb24gYW5kIHVzaW5nIHJlYWwgcnVudGltZSBwYXRocworaW5zdGVhZC4KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3ppcC0xLjMuMTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLXVycE4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDEzLTExLTMwIDEwOjA2OjA5LjQwMjIzNDg3MSArMDgwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0xMS0zMCAxMDoxMzo0Mi45NTIyMzYwMjUgKzA4MDAKK0BAIC04MSw5ICs4MSw4IEBAIGd6aXAuZG9jLmd6OiBnemlwLmRvYyAkKGJpbl9QUk9HUkFNUykKKyBTVUZGSVhFUyA9IC5pbgorIC5pbjoKKyAJJChBTV9WX0dFTilzZWQgXAorLQkJLWUgJ3N8L2Jpbi9zaHwkKFNIRUxMKXxnJyBcCisgCQktZSAnc3xbQF1iaW5kaXJAfCdcJyckKGJpbmRpciknXCcnfGcnIFwKKy0JCS1lICdzfFtAXUdSRVBAfCQoR1JFUCl8ZycgXAorKwkJLWUgJ3N8W0BdR1JFUEB8JChiYXNlX2JpbmRpcikvZ3JlcHxnJyBcCisgCQktZSAnc3xbQF1WRVJTSU9OQHwkKFZFUlNJT04pfGcnIFwKKyAJCSQoc3JjZGlyKS8kQC5pbiA+JEAtdCBcCisgCSAgJiYgY2htb2QgYSt4ICRALXQgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0ODBlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJTdGFuZGFyZCBHTlUgY29tcHJlc3NvciIKK0RFU0NSSVBUSU9OID0gIkdOVSBHemlwIGlzIGEgcG9wdWxhciBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0gb3JpZ2luYWxseSB3cml0dGVuIGJ5IEplYW4tbG91cCBHYWlsbHkgZm9yIHRoZSBHTlUgXAorcHJvamVjdC4gTWFyayBBZGxlciB3cm90ZSB0aGUgZGVjb21wcmVzc2lvbiBwYXJ0IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d6aXAvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorIyBjaGFuZ2UgdG8gR1BMdjMrIGluIDIwMDcvMDcuIFByZXZpb3VzIEdQTHYyIHZlcnNpb24gaXMgMS4zLjEyCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJHUkVQPSR7YmFzZV9iaW5kaXJ9L2dyZXAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIFJlbmFtZSBhbmQgbW92ZSBmaWxlcyBpbnRvIC9iaW4gKEZIUyksIHdoaWNoIGlzIHR5cGljYWwgcGxhY2UgZm9yIGd6aXAKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3VuemlwICR7RH0ke2Jhc2VfYmluZGlyfS9ndW56aXAKKwltdiAke0R9JHtiaW5kaXJ9L2d6aXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2d6aXAKKwltdiAke0R9JHtiaW5kaXJ9L3pjYXQgJHtEfSR7YmFzZV9iaW5kaXJ9L3pjYXQKKwltdiAke0R9JHtiaW5kaXJ9L3VuY29tcHJlc3MgJHtEfSR7YmFzZV9iaW5kaXJ9L3VuY29tcHJlc3MKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd1bnppcCBnemlwIHpjYXQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3VuemlwXSA9ICIke2Jhc2VfYmluZGlyfS9ndW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3ppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3ppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt6Y2F0XSA9ICIke2Jhc2VfYmluZGlyfS96Y2F0IgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuMy4xMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwNjI4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBnemlwLmluYworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtlbmRsaW5lPTIyO21kNT1jMDkzNGFkMTkwMGQ5MjdmODY1NTYxNTNkNGM3NmQyMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sencuaDtlbmRsaW5lPTE5O21kNT1jMjczZTA5YTAyZWRkOTgwMWNjNzRkMzk2ODMwNDllOSAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nemlwL2d6aXAtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL200LWV4dGVuc2lvbnMtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R1cC1kZWYtZml4LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjViYWMyZDIxODQwYWUwNzdlMDIxN2JjNWU0ODQ1YjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2Y1NjViZTA1ZjdmM2QxYWZmMTE3YzAzMGViN2M3MzgzMDA1MTBiN2QwOThjZWRlYTc5NmNhOGU0Y2Q1ODdhZiIKKworUFIgPSAicjIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQ3ZjBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIGd6aXAuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3ppcC8ke0JQfS50YXIuZ3oiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGZpbGU6Ly93cm9uZy1wYXRoLWZpeC5wYXRjaCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3ppcC5oO2JlZ2lubGluZT04O2VuZGxpbmU9MjA7bWQ1PTZlNDdjYWFhNjMwZTBjOGJmOWYxYmM4ZDk0YThlZDBlIgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnemlwLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzODYwM2NiMjg0M2JmNTY4MWZmNDFhYWIzYmNkNmEyMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5N2ViODNiNzYzZDllNWFkMzVmMzUxZmU1NTE3ZTZiNzE1MjFkN2FhYzdhY2YzZTNjYWNkYjZiMTQ5NmQ4ZjdlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjQ4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaGRwYXJtL2hkcGFybV85LjQ4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjdmZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciB2aWV3aW5nL21hbmlwdWxhdGluZyBJREUgZGlzayBkcml2ZS9kcml2ZXIgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImhkcGFybSBpcyBhIExpbnV4IHNoZWxsIHV0aWxpdHkgZm9yIHZpZXdpbmcgXAorYW5kIG1hbmlwdWxhdGluZyB2YXJpb3VzIElERSBkcml2ZSBhbmQgZHJpdmVyIHBhcmFtZXRlcnMuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNFTlNFX3dpcGVyID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5UWFQ7bWQ1PTkxMGE4YTQyYzk2MmQyMzg2MTljNzVmZGI3OGJkYjI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWE4MmQ3YmEzYWRlOWU4ZWM5MDI3NDlkYjk4YzU5MmYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL0dQTHYyLnR4dDttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lwZXIvd2lwZXIuc2g7YmVnaW5saW5lPTc7ZW5kbGluZT0zMTttZDU9YjdiYzY0MmFkZGMxNTJlYTMwNzUwNWJmMWEyOTZmMDkiCisKKworUEFDS0FHRVMgPSsgIndpcGVyIgorCitGSUxFU193aXBlciA9ICIke2JpbmRpcn0vd2lwZXIuc2giCisKK1JERVBFTkRTX3dpcGVyID0gImJhc2ggZ2F3ayBzdGF0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9oZHBhcm0vJHtCUH0udGFyLmd6ICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIxM2VmZGJlNzQ3MWZhZDM0MDgxOTg5MThlMTY0MzU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlOTdiNGE3MWNiMDQxNDZmNTRjZjZmNjk3ODdlN2Y5N2RkZmRhOTgzNmRjODAzYjQ1OWQzYjNkZjNhNGZiZWUiCisKK0VYVFJBX09FTUFLRSArPSAnU1RSSVA9ImVjaG8iJworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaGRwYXJtIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2hkcGFybV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hkcGFybSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfSAke0R9LyR7bWFuZGlyfS9tYW44ICR7RH0vJHtiaW5kaXJ9CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAnc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0nIGluc3RhbGwKKwljcCAke1N9L3dpcGVyL3dpcGVyLnNoICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2OTA3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWZ1bGwtY21kbGluZS5iYgpAQCAtMCwwICsxLDEyIEBACitERVNDUklQVElPTiA9ICJBIGNvbnNvbGUtb25seSBpbWFnZSB3aXRoIG1vcmUgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0gXAorZnVuY3Rpb25hbGl0eSBpbnN0YWxsZWQuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHNzaC1zZXJ2ZXItb3BlbnNzaCIKKworSU1BR0VfSU5TVEFMTCA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICAke0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTH0gXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1rZXJuZWwtZGV2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjYzNmVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYgpAQCAtMCwwICsxLDIwIEBACitERVNDUklQVElPTiA9ICJBIGRldmVsb3BtZW50IGltYWdlIHRoYXQgYnVpbGRzIHRoZSBrZXJuZWwgYW5kIHBhY2thZ2VzIHRoYXQgYXJlIFwKK3NlbnNpdGl2ZSB0byBrZXJuZWwgdXBkYXRlcyBhbmQgdmVyc2lvbiBjaGFuZ2VzIgorCisjIENvdWxkIGFsc28gYmUgY29yZS1pbWFnZS1iYXNpYywgYnV0IHdlJ2xsIGtlZXAgdGhpcyBzbWFsbCBmb3Igbm93CityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0tFUk5FTF9ERVZfVVRJTFMgPz0gImRyb3BiZWFyIGNvbm5tYW4iCitLRVJORUxfREVWX1RPT0xTID89ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIHBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsIGtlcm5lbC1kZXZzcmMiCitLRVJORUxfREVWX01PRFVMRSA/PSAia2VybmVsLW1vZHVsZXMiCisKK0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAiJHtLRVJORUxfREVWX01PRFVMRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0tFUk5FTF9ERVZfVVRJTFN9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtLRVJORUxfREVWX1RPT0xTfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisjIFdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIHRoaW5ncyBsaWtlIGtlcm5lbCBidWlsZHMsIGV0Yy4KK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRV9hcHBlbmQgKz0gIisgMzAwMDAwMCIKKworIyBMZXQncyBkZWZpbmUgb3VyIG93biBzdWJzZXQgdG8gdGVzdCwgd2UgY2FuIGxhdGVyIGFkZCBhIG9uLXRhcmdldCBrZXJuZWwgYnVpbGQgZXZlbiEKK0RFRkFVTFRfVEVTVF9TVUlURVMgPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgc2NwIGRhdGUgZG1lc2cgcGFyc2Vsb2dzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLWRldi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkYzllMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrLiBJdCBcCitjYW4gYmUgdXNlZCBmb3IgY3VzdG9taXphdGlvbiBhbmQgaW1wbGVtZW50YXRpb25zIHRoYXQgY29uZm9ybSB0byBMaW51eCBcCitTdGFuZGFyZCBCYXNlIChMU0IpLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLXNkay5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiNmU3YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBMaW51eCBTdGFuZGFyZCBCYXNlIFwKKyhMU0IpIGltcGxlbWVudGF0aW9ucy4gSXQgaW5jbHVkZXMgdGhlIGZ1bGwgbWV0YS10b29sY2hhaW4sIHBsdXMgZGV2ZWxvcG1lbnQgXAoraGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBzdGFuZGFsb25lIFNESy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJ0b29scy1zZGsgZGV2LXBrZ3MgdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyIKKworSU1BR0VfSU5TVEFMTCArPSAia2VybmVsLWRldnNyYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjYxYzZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLmJiCkBAIC0wLDAgKzEsMTQgQEAKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgcGFja2FnZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gY29uZm9ybSBcCit0byB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSBzcGVjaWZpY2F0aW9uLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBzc2gtc2VydmVyLW9wZW5zc2ggaHdjb2RlY3MgcGFja2FnZS1tYW5hZ2VtZW50IgorCitJTUFHRV9JTlNUQUxMID0gIlwKKyAgICAke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2IgXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAicGFtIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjMyNjBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKQEAgLTAsMCArMSwxOSBAQAorREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlIHdpdGggY3VzdG9tIGluc3RhbGwgc2NyaXB0cywgXAorYWRkaW5nIGEgc2Vjb25kIHJvb3RmcywgdXNlZCBmb3IgdGVzdGluZy4iCisKKyMgdXNlIC10ZXN0ZnMgbGl2ZS1pbnN0YWxsIHNjcmlwdHMKK1BBQ0tBR0VfSU5TVEFMTCA9ICJpbml0cmFtZnMtbGl2ZS1ib290IGluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzIGluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyBidXN5Ym94IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorCisjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKworZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMiCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKK0JBRF9SRUNPTU1FTkRBVElPTlMgKz0gImJ1c3lib3gtc3lzbG9nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyOTVjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIKQEAgLTAsMCArMSwxOCBAQAorREVTQ1JJUFRJT04gPSAiQSBtYXN0ZXIgaW1hZ2UgdG8gYmUgZGVwbG95ZWQgb24gYSB0YXJnZXQgdXNlZnVsIGZvciB0ZXN0aW5nIG90aGVyIGltYWdlcyIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCBwYWNrYWdlLW1hbmFnZW1lbnQiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCisjIHRoZSBkZXBsb3kgY29kZSByZXF1aXJlcyBiYXNoIGFuZAorIyBub3JtYWwgbGludXggdXRpbGl0aWVzIG5vdCBidXN5Ym94IG9uZXMKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKyAgICBiYXNoIGNvcmV1dGlscyB1dGlsLWxpbnV4IHRhciBnemlwIGJ6aXAyIGttb2QgXAorICAgIHB5dGhvbi1tb2R1bGVzIHB5dGhvbi1taXNjIFwKKyAgICBlMmZzcHJvZ3MgZTJmc3Byb2dzLW1rZTJmcyBwYXJ0ZWQgXAorICAgICIKKyMgd2UgbmVlZCBhIHBhcnRpY3VsYXIgaW5pdHJhbWZzIGZvciBsaXZlIGltYWdlcworIyB0aGF0IHB1bGxzIGN1c3RvbSBpbnN0YWxsIHNjcmlwdHMgd2hpY2ggdGFrZQorIyBjYXJlIG9mIHBhcnRpdGlvbmluZyBmb3IgdXMKK0lOSVRSRF9JTUFHRSA9ICJjb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczYzU2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkFuIGV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2UuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iCisKK0lNQUdFX0ZTVFlQRVMgPSAid2ljLmJ6MiIKK1JNX09MRF9JTUFHRSA9ICIxIgorCisjIGNvcmUtaW1hZ2UtbWluaW1hbCBpcyByZWZlcmVuY2VkIGluIC53a3MsIHNvIHdlIG5lZWQgaXRzIHJvb3RmcworIyB0byBiZSByZWFkeSBiZWZvcmUgb3VyIHJvb3RmcworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJjb3JlLWltYWdlLW1pbmltYWw6ZG9fcm9vdGZzIgorCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiMjAwMCIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljZDhmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogRXhhbXBsZSBvZiBwYXJ0aXRpb25lZCBpbWFnZSB3aXRoIGNvbXBsZXggbGF5b3V0CisjIGxvbmctZGVzY3JpcHRpb246IFRoaXMgaW1hZ2UgY29udGFpbnMgYm9vdCBwYXJ0aXRpb24gYW5kIDMgcm9vdGZzIHBhcnRpdGlvbnMKKyMgY3JlYXRlZCBmcm9tIGNvcmUtaW1hZ2UtbWluaW1hbCBhbmQgd2ljLWltYWdlLW1pbmltYWwgaW1hZ2UgcmVjaXBlcy4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorcGFydCAvY29yZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPWNvcmUtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGNvcmUgLS1hbGlnbiAxMDI0CitwYXJ0IC9iYWNrdXAgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj13aWMtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGJhY2t1cCAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtY29uZmlndXJlLUFkZC1vcHRpb24tdG8tZW5hYmxlLWRpc2FibGUtbGlibmZuZXRsaW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjA5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDVjNDdjZjUwNjFiODUyYzAyMTc4ZjAxZTIzNjkwYmZlMzhhOTlkOTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNyBNYXIgMjAxMyAxMToyMTozNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFkZCBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgbGlibmZuZXRsaW5rCisKK1RoaXMgY2hhbmdlcyB0aGUgY29uZmlndXJlIGJlaGF2aW91ciBmcm9tIGF1dG9kZXRlY3RpbmcKK2ZvciBsaWJuZm5ldGxpbmsgdG8gaGF2aW5nIGFuIG9wdGlvbiB0byBkaXNhYmxlIGl0IGV4cGxpY2l0bHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgfCAgIDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmE2MTZhYi4uY2UyZDMxNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTMsNiArNTMsOSBAQCBBQ19BUkdfRU5BQkxFKFtsaWJpcHFdLAorIEFDX0FSR19XSVRIKFtwa2djb25maWdkaXJdLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXBrZ2NvbmZpZ2Rpcj1QQVRIXSwKKyAJW1BhdGggdG8gdGhlIHBrZ2NvbmZpZyBkaXJlY3RvcnkgW1tMSUJESVIvcGtnY29uZmlnXV1dKSwKKyAJW3BrZ2NvbmZpZ2Rpcj0iJHdpdGh2YWwiXSwgW3BrZ2NvbmZpZ2Rpcj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKQorK0FDX0FSR19FTkFCTEUoW2xpYm5mbmV0bGlua10sCisrCUFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlibmZuZXRsaW5rXSwgW0RvIG5vdCB1c2UgbmV0ZmlsdGVyIG5ldGxpbmsgbGlicmFyeV0pLAorKwlbZW5hYmxlX2xpYm5mbmV0bGluaz0iJGVuYWJsZXZhbCJdLCBbZW5hYmxlX2xpYm5mbmV0bGluaz0ieWVzIl0pCisgCisgbGliaXB0Y19MREZMQUdTMj0iIjsKKyBBWF9DSEVDS19MSU5LRVJfRkxBR1MoWy1XbCwtLW5vLWFzLW5lZWRlZF0sCitAQCAtODksOSArOTIsMTEgQEAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MQVJHRUZJTEVdLCBbdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiID0gInllcyJdKQorIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREVWRUxdLCBbdGVzdCAiJGVuYWJsZV9kZXZlbCIgPSAieWVzIl0pCisgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MSUJJUFFdLCBbdGVzdCAiJGVuYWJsZV9saWJpcHEiID0gInllcyJdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKFtsaWJuZm5ldGxpbmtdLCBbbGlibmZuZXRsaW5rID49IDEuMF0sCistCVtuZm5ldGxpbms9MV0sIFtuZm5ldGxpbms9MF0pCistQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCTkZORVRMSU5LXSwgW3Rlc3QgIiRuZm5ldGxpbmsiID0gMV0pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2xpYm5mbmV0bGluayIgPSAieHllcyJdLCBbCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbbGlibmZuZXRsaW5rXSwgW2xpYm5mbmV0bGluayA+PSAxLjBdKQorKyAgXSkKKysKKytBTV9DT05ESVRJT05BTChbSEFWRV9MSUJORk5FVExJTktdLCBbdGVzdCAieCRlbmFibGVfbGlibmZuZXRsaW5rIiA9ICJ4eWVzIl0pCisgCisgcmVndWxhcl9DRkxBR1M9Ii1XYWxsIC1XYWdncmVnYXRlLXJldHVybiAtV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKyAJLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdyZWR1bmRhbnQtZGVjbHMgLVdzaGFkb3cgLVdzdHJpY3QtcHJvdG90eXBlcyBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMDAzZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSA3YzA3YjdmZDRmZGQ3ODQ0ZGQwMzJhZjgyMjMwNmYwOGU0NDIyYzM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMDo0NzoyOSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBmaXggYnVpbGQgd2l0aCBtdXNsCisKK0FkZCBuZWVkZWQgaGVhZGVycyB0aGV5IGFyZSBqdXN0IG5vdCBuZWVkZWQgZm9yIGdsaWJjNisgYnV0IGFsc28KK2ZvciBtdXNsCitEZWZpbmUgYWRkaXRpb25hbCBUQ09QVFMgaWYgbm90IHRoZXJlCisKK3VfaW5pdFggdHlwZXMgYXJlIGluIHN5cy90eXBlcy5oIGJlIGV4cGxpY2l0IGFib3V0IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jICAgICAgICAgICB8IDE1ICsrKysrKysrKysrKysrKworIGluY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCAgICAgfCAxMiAtLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMgYi9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKK2luZGV4IDY4OTc4NTcuLjhhMTcwYjIgMTAwNjQ0CistLS0gYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKKysrKyBiL2V4dGVuc2lvbnMvbGlieHRfVENQT1BUU1RSSVAuYworQEAgLTEyLDYgKzEyLDIxIEBACisgI2lmbmRlZiBUQ1BPUFRfTUQ1U0lHCisgIwlkZWZpbmUgVENQT1BUX01ENVNJRyAxOQorICNlbmRpZgorKyNpZm5kZWYgVENQT1BUX01BWFNFRworKyMJZGVmaW5lIFRDUE9QVF9NQVhTRUcgMgorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1dJTkRPVworKyMJZGVmaW5lIFRDUE9QVF9XSU5ET1cgMworKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1NBQ0tfUEVSTUlUVEVECisrIwlkZWZpbmUgVENQT1BUX1NBQ0tfUEVSTUlUVEVEIDQKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9TQUNLCisrIwlkZWZpbmUgVENQT1BUX1NBQ0sgNQorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1RJTUVTVEFNUAorKyMJZGVmaW5lIFRDUE9QVF9USU1FU1RBTVAgOAorKyNlbmRpZgorIAorIGVudW0geworIAlPX1NUUklQX09QVElPTiA9IDAsCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oIGIvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCitpbmRleCAxODg2MWZlLi5hNTk2M2U5IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCisrKysgYi9pbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmgKK0BAIC01LDcgKzUsNiBAQAorIAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKy0jaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA9PSAyCisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KK0BAIC0xMywxNSArMTIsNCBAQAorICNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2Vsc2UgLyogbGliYzUgKi8KKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSNpbmNsdWRlIDxsaW51eC9pcC5oPgorLSNpbmNsdWRlIDxsaW51eC9pbi5oPgorLSNpbmNsdWRlIDxsaW51eC9pZi5oPgorLSNpbmNsdWRlIDxsaW51eC9pY21wLmg+CistI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorLSNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKy0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy0jaW5jbHVkZSA8bGludXgvaW42Lmg+CistI2VuZGlmCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKK2luZGV4IDU3ZmQ4MmEuLjQ4MDcyNDYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCitAQCAtMTUsNiArMTUsNyBAQAorICNpZm5kZWYgX0lQVEFCTEVTX0gKKyAjZGVmaW5lIF9JUFRBQkxFU19ICisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorIAorICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy90eXBlcy5oLWFkZC1kZWZpbmVzLXRoYXQtYXJlLXJlcXVpcmVkLWZvci1pZl9wYWNrZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy90eXBlcy5oLWFkZC1kZWZpbmVzLXRoYXQtYXJlLXJlcXVpcmVkLWZvci1pZl9wYWNrZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlZTI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDE5NTkzNDkxZjQzYjcwYzFhNzFjM2I5YjhmNGZmNGZkMTQ1MDAwMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjMgTWFyIDIwMTIgMTQ6Mjc6MjAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gdHlwZXMuaDogYWRkIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIGlmX3BhY2tldC5oCisKK1RoZSBpcHRhYmxlcyBsb2NhbCBsaW51eC90eXBlcy5oIG92ZXJyaWRlcyB0aGUga2VybmVsL3N5c3Jvb3QKK3R5cGVzLmguIEFzIHN1Y2gsIHdlIG5lZWQgdG8gcHJvdmlkZSBzb21lIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQKK3RvIGJ1aWxkIGFnYWluc3QgMy4yKyBrZXJuZWwgaGVhZGVycy4KKworaWZuZGVmIHByb3RlY3Rpb24gaXMgcHJvdmlkZWQgZm9yIHRoZSBkZWZpbmVzIHRvIGVuc3VyZSB0aGF0Citjb25maWd1cmF0aW9uIHRoYXQgYWxyZWFkeSBoYXZlIHRoZXNlIGRlZmluZXMgYXJlIHN0aWxsIGJ1aWxkYWJsZS4KKworVGhpcyBjb21taXQgaXMgdGVtcG9yYXJ5IHVudGlsIGEgbmV3IHZlcnNpb24gb2YgaXB0YWJsZXMgY2FuIGJlCit1c2VkIHRoYXQgY29udGFpbnMgdGhlIGRlZmluZXMuCisKK1RoaXMgaXMgc2ltaWxhciB0byB0aGUgY29tbWl0IGluIHRoZSBpcHRhYmxlcyBnaXQgcmVwb3NpdG9yeToKKworICBodHRwczovL2dpdC5uZXRmaWx0ZXIub3JnL2NnaS1iaW4vZ2l0d2ViLmNnaT9wPWlwdGFibGVzLmdpdDthPWNvbW1pdDtoPWRiZTc3Y2M5NzRjZWU2NTZlYWUzN2U3NTAzOWRkMWE0MTBhNDUzNWIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGUvbGludXgvdHlwZXMuaCB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAoraW5kZXggOGI0ODNjOC4uZWJmNjQzMiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCitAQCAtMzQsNSArMzQsMTUgQEAgdHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19iZTY0OworIHR5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fc3VtMTY7CisgdHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX193c3VtOworIAorKyNpZm5kZWYgX19hbGlnbmVkX3U2NAorKyNkZWZpbmUgX19hbGlnbmVkX3U2NCBfX3U2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKysjZW5kaWYKKysjaWZuZGVmIF9fYWxpZ25lZF9iZTY0CisrI2RlZmluZSBfX2FsaWduZWRfYmU2NCBfX2JlNjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisrI2VuZGlmCisrI2lmbmRlZiBfX2FsaWduZWRfbGU2NAorKyNkZWZpbmUgX19hbGlnbmVkX2xlNjQgX19sZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorKyNlbmRpZgorKworICNlbmRpZiAvKiAgX19BU1NFTUJMWV9fICovCisgI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCistLSAKKzEuNy4wLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXNfMS40LjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXNfMS40LjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzAxN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlc18xLjQuMjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcga2VybmVsIHBhY2tldCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiaXB0YWJsZXMgaXMgdGhlIHVzZXJzcGFjZSBjb21tYW5kIGxpbmUgcHJvZ3JhbSB1c2VkIHRvIGNvbmZpZ3VyZSBhbmQgY29udHJvbCBuZXR3b3JrIHBhY2tldCBcCitmaWx0ZXJpbmcgY29kZSBpbiBMaW51eC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5ldGZpbHRlci5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubmV0ZmlsdGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaXB0YWJsZXMvaXB0YWJsZXMuYztiZWdpbmxpbmU9MTM7ZW5kbGluZT0yNTttZDU9YzVjZmZkMDk5NzQ1NThjZjI3ZDBmNzYzZGYyYTEyZGMiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUteC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtbmF0IFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtZGVmcmFnLWlwdjQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2sgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2staXB2NCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLW5mLW5hdCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdC1tYXNxdWVyYWRlIgorRklMRVNfJHtQTn0gPSsgIiR7bGliZGlyfS94dGFibGVzLyAke2RhdGFkaXJ9L3h0YWJsZXMiCitGSUxFU18ke1BOfS1kYmcgPSsgIiR7bGliZGlyfS94dGFibGVzLy5kZWJ1ZyIKKworU1JDX1VSSSA9ICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUzNmQwNDhjOGU4ZWVlYmNkOTc1N2QwODYzZWJiMGMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyMDA0YzY4MDIxZGE5YTU5OWZlZWQyN2Y2NWRlZmNmYjIyMTI4ZjdkYTJjMDUzMWMwZjc1ZGUwZjQ3OWQzZTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWtlcm5lbD0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAiCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKKyMgbGlibmZuZXRsaW5rIHJlY2lwZSBpcyBpbiBtZXRhLW5ldHdvcmtpbmcgbGF5ZXIKK1BBQ0tBR0VDT05GSUdbbGlibmZuZXRsaW5rXSA9ICItLWVuYWJsZS1saWJuZm5ldGxpbmssLS1kaXNhYmxlLWxpYm5mbmV0bGluayxsaWJuZm5ldGxpbmsiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgUmVtb3ZlIHNvbWUgbGlidG9vbCBtNCBmaWxlcworCSMgS2VlcCBheF9jaGVja19saW5rZXJfZmxhZ3MubTQgd2hpY2ggYmVsb25ncyB0byBhdXRvY29uZi1hcmNoaXZlLgorCXJtIC1mIGxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi90YXJnZXRzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi90YXJnZXRzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiNTU3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3RhcmdldHMuZGlmZgpAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9NYWtlZmlsZQorKysrIGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCitAQCAtMTA2LDcgKzEwNiw3IEBAIGVuZGlmCisgZW5kaWYKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1JUFY0X1RBUkdFVFM9dHJhY2VwYXRoIHBpbmcgY2xvY2tkaWZmIHJkaXNjIGFycGluZyB0ZnRwZCByYXJwZAorK0lQVjRfVEFSR0VUUz10cmFjZXBhdGggcGluZyBjbG9ja2RpZmYgYXJwaW5nCisgSVBWNl9UQVJHRVRTPXRyYWNlcGF0aDYgdHJhY2Vyb3V0ZTYgcGluZzYKKyBUQVJHRVRTPSQoSVBWNF9UQVJHRVRTKSAkKElQVjZfVEFSR0VUUykKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdXNlX2dldGhvc3RieW5hbWUyLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiMTg4NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEyMTIyMS5vcmlnL3RyYWNlcGF0aC5jCisrKysgaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKK0BAIC0zNzAsOSArMzcwLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCX0KKyAjZW5kaWYKKyAKKy0JaGUgPSBnZXRob3N0YnluYW1lKHApOworKwloZSA9IGdldGhvc3RieW5hbWUyKGFyZ3ZbMF0sIEFGX0lORVQpOworIAlpZiAoaGUgPT0gTlVMTCkgeworLQkJaGVycm9yKCJnZXRob3N0YnluYW1lIik7CisrCQloZXJyb3IoImdldGhvc3RieW5hbWUyIik7CisgCQlleGl0KDEpOworIAl9CisgCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvcGluZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9waW5nLmMKKysrKyBpcHV0aWxzLXMyMDEyMTIyMS9waW5nLmMKK0BAIC0yNzksNyArMjc5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2Vsc2UKKyAJCQlpZG4gPSB0YXJnZXQ7CisgI2VuZGlmCistCQkJaHAgPSBnZXRob3N0YnluYW1lKGlkbik7CisrCQkJaHAgPSBnZXRob3N0YnluYW1lMihpZG4sIEFGX0lORVQpOworIAkJCWlmICghaHApIHsKKyAJCQkJZnByaW50ZihzdGRlcnIsICJwaW5nOiB1bmtub3duIGhvc3QgJXNcbiIsIHRhcmdldCk7CisgCQkJCWV4aXQoMik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljZDgyZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZml4LWJ1aWxkLWNvbW1hbmQtbGluZS1hcmd1bWVudC13aXRoLWdudXRscy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb20gNTY4ZTk5MGQzMGZjN2U5NDE2ZTBhNmY4Yzc0ZWE1MDEzOTIxZWFlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudmFuZGV2ZW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxNiBKYW4gMjAxMyAwMzoxMjoxNSArMDkwMAorU3ViamVjdDogW1BBVENIXSBwaW5nNjogRml4IGJ1aWxkIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3aXRoIGdudXRscy4KKworVGhlIHBpbmc2IGNvbW1hbmQgY2FuIHVzZSBlaXRoZXIgb3BlbnNzbCBvciBnbnV0bHMuLi4KK2FuZCB0aGUgTWFrZWZpbGUgaGFzIGEgYnVuY2ggb2Ygc2V0dXAgZm9yIGRlZmluaW5nIHdoaWNoIG9mIHRoZSB0d28gdG8gdXNlLgorCitVbmZvcnR1bmF0ZWx5LCB0aGUgZmluYWwgLUQgZGVmaW5lIG9uIHRoZSBjb21tYW5kbGluZSB0byBlbmFibGUgZ251dGxzCitpbnNpZGUgdGhlIHBpbmc2LmMgZmlsZSBkaWRuJ3QgYWN0dWFsbHkgbWFrZSBpdCBvbnRvIHRoZSBnY2MKK2NvbW1hbmRsaW5lLgorVGhpcyBwYXRjaCBhZGRzIHRoZSAkKERFRl9DUllQVE8pIE1ha2VmaWxlIHZhcmlhYmxlIHRvIGZpeCB0aGlzIGdhcC4KKworU2lnbmVkLW9mZi1ieTogQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW52YW5kZXZlbkBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CistLS0KKyBNYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGM2MmQ5ZGYuLjg5MjQ5ZjUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xNDksNyArMTQ5LDcgQEAgTElCX2Nsb2NrZGlmZiA9ICQoTElCX0NBUCkKKyBERUZfcGluZ19jb21tb24gPSAkKERFRl9DQVApICQoREVGX0lETikKKyBERUZfcGluZyAgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKQorIExJQl9waW5nICA9ICQoTElCX0NBUCkgJChMSUJfSUROKQorLURFRl9waW5nNiA9ICQoREVGX0NBUCkgJChERUZfSUROKSAkKERFRl9XSVRIT1VUX0lGQUREUlMpICQoREVGX0VOQUJMRV9QSU5HNl9SVEhEUikKKytERUZfcGluZzYgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKSAkKERFRl9FTkFCTEVfUElORzZfUlRIRFIpICQoREVGX0NSWVBUTykKKyBMSUJfcGluZzYgPSAkKExJQl9DQVApICQoTElCX0lETikgJChMSUJfUkVTT0xWKSAkKExJQl9DUllQVE8pCisgCisgcGluZzogcGluZ19jb21tb24ubworLS0gCisxLjcuMi41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvbnNnbWxzLXBhdGgtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9uc2dtbHMtcGF0aC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiZjk0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvbnNnbWxzLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZpeCBuc2dtbHMgcGF0aCBpc3N1ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK0luZGV4OiBpcHV0aWxzLXMyMDEwMTAwNi9kb2MvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEwMTAwNi5vcmlnL2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIwOjQyOjI3LjAwMDAwMDAwMCArMDgwMAorKysrIGlwdXRpbHMtczIwMTAxMDA2L2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIxOjAxOjUyLjAwMDAwMDAwMCArMDgwMAorQEAgLTI3LDEwICsyNywxNSBAQAorICMgZG9jYm9vazJtYW4gcHJvZHVjZXMgdXR0ZXJseSB1Z2x5IG91dHB1dCBhbmQgSSBkaWQgbm90IGZpbmQKKyAjIGFueSB3YXkgdG8gY3VzdG9taXplIHRoaXMgYnV0IGhhY2tpbmcgYmFja2VuZCBwZXJsIHNjcmlwdCBhIGxpdHRsZS4KKyAjIFdlbGwsIGhlbmNlLi4uCisrIyBuc2dtbHMgc2VlbXMgYXBwZW5kIHBhdGggdG8gc2VhcmNoIGRpcmVjdG9yeSBhY2NvcmRpbmcgdG8gdGhlIHN5c2lkIHBhdGguCisrIyBlLmcuIGlmIGlucHV0IC4uL2luZGV4LmRiLCBpdCB3b3VsZCBzZWFyY2ggJHNlYXJjaF9kaXJlY3RvcnkvLi4vIHJhdGhlciB0aGFuCisrIyAkc2VhcmNoX2RpcmVjdG9yeSwgd2hpY2ggbGVhZHMgc2VhcmNoaW5nIGZhaWx1cmUuIEZpeGluZyBuc2dtbHMgcHJvYmFibHkKKysjIGludHJvZHVjZSBzb21lIHNpZGUgZWZmZWN0cywgc28gdXNlIHRoaXMgdWdseSBoYWNrOiBydW5uaW5nIG5zZ21scyBpbiBjdXJyZW50CisrIyBkaXJlY3RvcnksIGFuZCBydW5uaW5nIGRvY2Jvb2sybWFuIGluIHRtcCBkaXJlY3RvcnkuCisgCisgJChNQU5GSUxFUyk6IGluZGV4LmRiCisgCUAtbWtkaXIgdG1wLmRiMm1hbgorLQlAc2V0IC1lOyBjZCB0bXAuZGIybWFuOyBuc2dtbHMgLi4vJDwgfCBzZ21sc3BsIC4uL2RvY2Jvb2sybWFuLXNwZWMucGwgOwltdiAkQCAuLgorKwlAc2V0IC1lOyBuc2dtbHMgJDwgPnRtcC5kYjJtYW4vb3V0cHV0OyBjZCB0bXAuZGIybWFuOyBjYXQgb3V0cHV0IHwgc2dtbHNwbCAuLi9kb2Nib29rMm1hbi1zcGVjLnBsIDsJbXYgJEAgLi4KKyAJQC1ybSAtcmYgdG1wLmRiMm1hbgorIAorIGNsZWFuOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9pcHV0aWxzX3MyMDEyMTIyMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3YTMyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJOZXR3b3JrIG1vbml0b3JpbmcgdG9vbHMiCitERVNDUklQVElPTiA9ICJVdGlsaXRpZXMgZm9yIHRoZSBJUCBwcm90b2NvbCwgaW5jbHVkaW5nIHRyYWNlcm91dGU2LCBcCit0cmFjZXBhdGgsIHRyYWNlcGF0aDYsIHBpbmcsIHBpbmc2IGFuZCBhcnBpbmcuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJCU0QgJiBHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTM1O21kNT1mOWNlYjIwMTczM2U5YTZjZjhmMDA3NjZkZDI3OGQ4MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZXBhdGguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0wZWNlYTJiZjYwYmZmMmYzZDg0MDA5NmQ4NzY0N2YzZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcnBpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1mZTg0MzAxYjVjMjY1NWM5NTBmOGI5MmEwNTdmYWZhNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZnRwZC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzI7bWQ1PTI4ODM0YmY4YTkxYTViOGE5Mjc1NWRiZWU3MDllZjk2ICIKKworREVQRU5EUyA9ICJnbnV0bHMgZG9jYm9vay11dGlscy1uYXRpdmUgc2dtbHNwbC1uYXRpdmUgbGliY2FwIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi90YXJnZXRzLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vbnNnbWxzLXBhdGgtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYwNzJhZWY2NDIwNTcyMGRkMTg5M2IzNzVlMTg0MTcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1MGY1NDlmYzViNjIwYzIzYzU5MjlhYTZkNTRiN2RkZmM3ZWUxY2IxZThlZmRjNWU4YmIyMWQ4ZDBjNTMxOWYiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9IC1EX0dOVV9TT1VSQ0UnIFZQQVRIPSIke1NUQUdJTkdfTElCRElSfToke1NUQUdJTkdfRElSX0hPU1R9LyR7YmFzZV9saWJkaXJ9IiBhbGwgbWFuCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtiYXNlX2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJIyBTVUlEIHJvb3QgcHJvZ3JhbXMKKwlpbnN0YWxsIC1tIDQ1NTUgcGluZyAke0R9JHtiYXNlX2JpbmRpcn0vcGluZworCWluc3RhbGwgLW0gNDU1NSBwaW5nNiAke0R9JHtiYXNlX2JpbmRpcn0vcGluZzYKKwlpbnN0YWxsIC1tIDQ1NTUgdHJhY2Vyb3V0ZTYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCWluc3RhbGwgLW0gNDU1NSBjbG9ja2RpZmYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCSMgT3RoZXIgcHJvZ3JhbWdzCisJZm9yIGkgaW4gYXJwaW5nIHRyYWNlcGF0aCB0cmFjZXBhdGg2OyBkbworCSAgaW5zdGFsbCAtbSAwNzU1ICRpICR7RH0ke2Jhc2VfYmluZGlyfS8KKwlkb25lCisJIyBNYW51YWwgcGFnZXMgZm9yIHRoaW5ncyB3ZSBidWlsZCBwYWNrYWdlcyBmb3IKKwlmb3IgaSBpbiB0cmFjZXBhdGguOCB0cmFjZXJvdXRlNi44IHBpbmcuOCBhcnBpbmcuODsgZG8KKwkgIGluc3RhbGwgLW0gMDY0NCBkb2MvJGkgJHtEfSR7bWFuZGlyfS9tYW44LyB8fCB0cnVlCisJZG9uZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfS1waW5nID0gInBpbmciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZ10gPSAiJHtiYXNlX2JpbmRpcn0vcGluZyIKKworQUxURVJOQVRJVkVfJHtQTn0tcGluZzYgPSAicGluZzYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZzZdID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcGluZyAke1BOfS1waW5nNiAke1BOfS1hcnBpbmcgJHtQTn0tdHJhY2VwYXRoICR7UE59LXRyYWNlcGF0aDYgJHtQTn0tdHJhY2Vyb3V0ZTYgJHtQTn0tY2xvY2tkaWZmIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXBpbmcgJHtQTn0tcGluZzYgJHtQTn0tYXJwaW5nICR7UE59LXRyYWNlcGF0aCAke1BOfS10cmFjZXBhdGg2ICR7UE59LXRyYWNlcm91dGU2ICR7UE59LWNsb2NrZGlmZiIKKworRklMRVNfJHtQTn0JPSAiIgorRklMRVNfJHtQTn0tcGluZyA9ICIke2Jhc2VfYmluZGlyfS9waW5nLiR7QlBOfSIKK0ZJTEVTXyR7UE59LXBpbmc2ID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2LiR7QlBOfSIKK0ZJTEVTXyR7UE59LWFycGluZyA9ICIke2Jhc2VfYmluZGlyfS9hcnBpbmciCitGSUxFU18ke1BOfS10cmFjZXBhdGggPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2VwYXRoIgorRklMRVNfJHtQTn0tdHJhY2VwYXRoNiA9ICIke2Jhc2VfYmluZGlyfS90cmFjZXBhdGg2IgorRklMRVNfJHtQTn0tdHJhY2Vyb3V0ZTYJPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2Vyb3V0ZTYiCitGSUxFU18ke1BOfS1jbG9ja2RpZmYgPSAiJHtiYXNlX2JpbmRpcn0vY2xvY2tkaWZmIgorRklMRVNfJHtQTn0tZG9jCT0gIiR7bWFuZGlyfS9tYW44IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGVzcy9sZXNzXzQ3OS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4OTU0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJUZXh0IGZpbGUgdmlld2VyIHNpbWlsYXIgdG8gbW9yZSIKK0RFU0NSSVBUSU9OID0gIkxlc3MgaXMgYSBwcm9ncmFtIHNpbWlsYXIgdG8gbW9yZSwgaS5lLiBhIHRlcm1pbmFsIFwKK2Jhc2VkIHByb2dyYW0gZm9yIHZpZXdpbmcgdGV4dCBmaWxlcyBhbmQgdGhlIG91dHB1dCBmcm9tIG90aGVyIFwKK3Byb2dyYW1zLiBMZXNzIG9mZmVycyBtYW55IGZlYXR1cmVzIGJleW9uZCB0aG9zZSB0aGF0IG1vcmUgZG9lcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdyZWVud29vZHNvZnR3YXJlLmNvbS8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgKEdQTHYyKyAoPDwgNDE4KSwgR1BMdjMrICg+PSA0MTgpKSB8IGxlc3MKKyMgSW5jbHVkaW5nIGVtYWlsIGF1dGhvciBnaXZpbmcgcGVybWlzc2luZyB0byB1c2UgQlNECisjCisjIEZyb206IE1hcmsgTnVkZWxtYW4gPG1hcmtuQGdyZWVud29vZHNvZnR3YXJlLmNvbT4KKyMgVG86IEVsaXphYmV0aCBGbGFuYWdhbiA8ZWxpemFiZXRoLmZsYW5hZ2FuQGludGVsLmNvbQorIyBEYXRlOiAxMi8xOS8xMQorIworIyBIaSBFbGl6YWJldGgsCisjIFVzaW5nIGEgZ2VuZXJpYyBCU0QgbGljZW5zZSBmb3IgbGVzcyBpcyBmaW5lIHdpdGggbWUuCisjIFRoYW5rcywKKyMKKyMgLS1NYXJrCisjCisKK0xJQ0VOU0UgPSAiR1BMdjMrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRTttZDU9NDhjMjZhMzA3ZjkxYWY3MDBlMWYwMDU4NWYyMTVhYWYiCitERVBFTkRTID0gIm5jdXJzZXMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDQ5ZjUxY2NmZTI2ODYwMDljNmNlOTQzZWViNGJiYWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWJmMDZjYjMwZWUyYTJiZDFmNzlmMzlhYTkxZTQ2NDQ0ZTdjYjE5YjQ4Yzk1YzQ5OTJmYTYzY2ZlNDUyN2E4MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAnYmluZGlyPSR7RH0ke2JpbmRpcn0nICdtYW5kaXI9JHtEfSR7bWFuZGlyfScgaW5zdGFsbAorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsZXNzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby8wMF9hcmNoZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvLzAwX2FyY2hlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDY0NDdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby8wMF9hcmNoZXMucGF0Y2gKQEAgLTAsMCArMSw2MDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorQEAgLTAsMCArMSw3OCBAQAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjQxCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQzCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ0CisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisrCisrI2RlZmluZSBpb19zeXNjYWxsMSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLGJ0eXBlIGIpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYikgXAorKwkJICAgICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKKyt0eXBlIGZuYW1lIChhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytyZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgiJWQ0IikgPSAobG9uZykoZCk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpLCAiZCIgKF9fZCkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUgKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjLGR0eXBlIGQsZXR5cGUgZSkgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpKGQpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2UgX19hc21fXyAoIiVkNSIpID0gKGxvbmcpKGUpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSwgImQiIChfX2QpLCAiZCIgKF9fZSkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTEwLm9yaWcvc3JjL3N5c2NhbGwuaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLmgKK0BAIC0yOCw2ICsyOCwxMiBAQAorICNpbmNsdWRlICJzeXNjYWxsLXNwYXJjLmgiCisgI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyAjaW5jbHVkZSAic3lzY2FsbC1hcm02NC5oIgorKyNlbGlmIGRlZmluZWQoX19tNjhrX18pCisrI2luY2x1ZGUgInN5c2NhbGwtbTY4ay5oIgorKyNlbGlmIGRlZmluZWQoX19ocHBhX18pCisrI2luY2x1ZGUgInN5c2NhbGwtcGFyaXNjLmgiCisrI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKysjaW5jbHVkZSAic3lzY2FsbC1taXBzLmgiCisgI2Vsc2UKKyAjd2FybmluZyAidXNpbmcgZ2VuZXJpYyBzeXNjYWxsIG1ldGhvZCIKKyAjaW5jbHVkZSAic3lzY2FsbC1nZW5lcmljLmgiCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtMCwwICsxLDIyMyBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisrICogZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAgYnkgUmFsZiBCYWVjaGxlCisrICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKysgKgorKyAqIENoYW5nZWQgc3lzdGVtIGNhbGxzIG1hY3JvcyBfc3lzY2FsbDUgLSBfc3lzY2FsbDcgdG8gcHVzaCBhcmdzIDUgdG8gNyBvbnRvCisrICogdGhlIHN0YWNrLiBSb2JpbiBGYXJpbmUgZm9yIEFDTiBTLkEsIENvcHlyaWdodCAoQykgMTk5NiBieSBBQ04gUy5BCisrICovCisrCisrI2lmbmRlZiBfTUlQU19TSU1fQUJJMzIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkkzMgkJCTEKKysjZGVmaW5lIF9NSVBTX1NJTV9OQUJJMzIJCTIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkk2NAkJCTMKKysjZW5kaWYKKysKKysjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorKworKy8qCisrICogTGludXggbzMyIHN0eWxlIHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA0MDAwIHRvIDQ5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNDAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjQxKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyNDIpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyNDMpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjQ0KQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDI0NSkKKysKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLworKworKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CisrCisrLyoKKysgKiBMaW51eCA2NC1iaXQgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDUwMDAgdG8gNTk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk1MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCisrCisrI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCisrCisrLyoKKysgKiBMaW51eCBOMzIgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDYwMDAgdG8gNjk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk2MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLworKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICUzXHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICI9ciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTRcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKTsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikKKysKKysvKgorKyAqIFVzaW5nIHRob3NlIG1lYW5zIHlvdXIgYnJhaW4gbmVlZHMgbW9yZSB0aGFuIGFuIG9pbCBjaGFuZ2UgOy0pCisrICovCisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCwgZXR5cGUgZSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImx3XHQkMiwgJTZcblx0IiBcCisrCSJzdWJ1XHQkMjksIDMyXG5cdCIgXAorKwkic3dcdCQyLCAxNigkMjkpXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSJhZGRpdVx0JDI5LCAzMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiaSIgKF9fTlJfIyNzbmFtZSksIFwKKysJICAibSIgKCh1bnNpZ25lZCBsb25nKWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikgKi8KKysKKysjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkKKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCxldHlwZSxlKSBcCisrdHlwZSBmbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cGUgZCxldHlwZSBlKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTQgYXNtKCIkOCIpID0gKHVuc2lnbmVkIGxvbmcpIGU7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTZcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIityIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJyIiAoX19hNCksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZW5kaWYgLyogKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkgKi8KKysKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLXBhcmlzYy5oCitAQCAtMCwwICsxLDE0NiBAQAorKy8qCisrICogTGludXggc3lzdGVtIGNhbGwgbnVtYmVycy4KKysgKgorKyAqIENhcnkgQ291dGFudCBzYXlzIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIGFub3RoZXIgc3lzY2FsbCBnYXRld2F5CisrICogcGFnZSB0byBhdm9pZCBjbGFzaGluZyB3aXRoIHRoZSBIUFVYIHNwYWNlLCBhbmQgSSB0aGluayBoZSdzIHJpZ2h0OgorKyAqIGl0IHdpbGwgd291bGQga2VlcCBhIGJyYW5jaCBvdXQgb2Ygb3VyIHN5c2NhbGwgZW50cnkgcGF0aCwgYXQgdGhlCisrICogdmVyeSBsZWFzdC4gIElmIHdlIGRlY2lkZSB0byBjaGFuZ2UgaXQgbGF0ZXIsIHdlIGNhbiBgYGp1c3QnJyB0d2VhaworKyAqIHRoZSBMSU5VWF9HQVRFV0FZX0FERFIgZGVmaW5lIGF0IHRoZSBib3R0b20gYW5kIG1ha2UgX19OUl9MaW51eCBiZQorKyAqIDEwMjQgb3Igc29tZXRoaW5nLiAgT2gsIGFuZCByZWNvbXBpbGUgbGliYy4gPSkKKysgKgorKyAqIDY0LWJpdCBIUFVYIGJpbmFyaWVzIGdldCB0aGUgc3lzY2FsbCBnYXRld2F5IGFkZHJlc3MgcGFzc2VkIGluIGEgcmVnaXN0ZXIKKysgKiBmcm9tIHRoZSBrZXJuZWwgYXQgc3RhcnR1cCwgd2hpY2ggc2VlbXMgYSBzYW5lIHN0cmF0ZWd5LgorKyAqLworKworKyNkZWZpbmUgX19OUl9MaW51eCAgICAgICAgICAgICAgICAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwICAgICAgICAgICAoX19OUl9MaW51eCArIDIxNSkKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAgICAgICAgIChfX05SX0xpbnV4ICsgMjE2KQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgICAgICAgKF9fTlJfTGludXggKyAyMTcpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOCkKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE5KQorKworKyNkZWZpbmUgU1lTX2lmeShzeXNjYWxsX25hbWUpICAgX19OUl8jI3N5c2NhbGxfbmFtZQorKworKy8qIEFzc3VtZSBhbGwgc3lzY2FsbHMgYXJlIGRvbmUgZnJvbSBQSUMgY29kZSBqdXN0IHRvIGJlCisrICogc2FmZS4gVGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaXMgdGhhdCB5b3UgbG9zZSBhIHJlZ2lzdGVyCisrICogYW5kIHNhdmUvcmVzdG9yZSByMTkgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKyNkZWZpbmUgUElDCisrCisrLyogRGVmaW5pdGlvbiB0YWtlbiBmcm9tIGdsaWJjIDIuMy4zCisrICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9zeXNkZXAuaAorKyAqLworKworKyNpZmRlZiBQSUMKKysvKiBXQVJOSU5HOiBDQU5OT1QgQkUgVVNFRCBJTiBBIE5PUCEgKi8KKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgICAgICAgY29weSAlJXIxOSwgJSVyNFxuIgorKyMgZGVmaW5lIEtfTERXX0FTTV9QSUMJIiAgICAgICBjb3B5ICUlcjQsICUlcjE5XG4iCisrIyBkZWZpbmUgS19VU0lOR19HUjQJIiVyNCIsCisrI2Vsc2UKKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgXG4iCisrIyBkZWZpbmUgS19MRFdfQVNNX1BJQwkiIFxuIgorKyMgZGVmaW5lIEtfVVNJTkdfR1I0CisrI2VuZGlmCisrCisrLyogR0NDIGhhcyB0byBiZSB3YXJuZWQgdGhhdCBhIHN5c2NhbGwgbWF5IGNsb2JiZXIgYWxsIHRoZSBBQkkKKysgICByZWdpc3RlcnMgbGlzdGVkIGFzICJjYWxsZXItc2F2ZXMiLCBzZWUgcGFnZSA4LCBUYWJsZSAyCisrICAgaW4gc2VjdGlvbiAyLjIuNiBvZiB0aGUgUEEtUklTQyBSVU4tVElNRSBhcmNoaXRlY3R1cmUKKysgICBkb2N1bWVudC4gSG93ZXZlciEgcjI4IGlzIHRoZSByZXN1bHQgYW5kIHdpbGwgY29uZmxpY3Qgd2l0aAorKyAgIHRoZSBjbG9iYmVyIGxpc3Qgc28gaXQgaXMgbGVmdCBvdXQuIEFsc28gdGhlIGlucHV0IGFyZ3VtZW50cworKyAgIHJlZ2lzdGVycyByMjAgLT4gcjI2IHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgbGlzdCBzbyB0aGV5CisrICAgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5LiBBbHRob3VnaCByMTkgaXMgY2xvYmJlcmVkIGJ5IHRoZSBzeXNjYWxsCisrICAgd2UgY2Fubm90IHNheSB0aGlzIGJlY2F1c2UgaXQgd291bGQgdmlvbGF0ZSBBQkksIHRodXMgd2Ugc2F5CisrICAgcjQgaXMgY2xvYmJlcmVkIGFuZCB1c2UgdGhhdCByZWdpc3RlciB0byBzYXZlL3Jlc3RvcmUgcjE5CisrICAgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKworKyNkZWZpbmUgS19DQUxMX0NMT0JfUkVHUyAiJXIxIiwgIiVyMiIsIEtfVVNJTkdfR1I0IFwKKysJCQkgIiVyMjAiLCAiJXIyOSIsICIlcjMxIgorKworKyN1bmRlZiBLX0lOTElORV9TWVNDQUxMCisrI2RlZmluZSBLX0lOTElORV9TWVNDQUxMKG5hbWUsIG5yLCBhcmdzLi4uKQkoewkJCVwKKysJbG9uZyBfX3N5c19yZXM7CQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyBfX2FzbV9fKCJyMjgiKTsJCVwKKysJCUtfTE9BRF9BUkdTXyMjbnIoYXJncykJCQkJCVwKKysJCS8qIEZJWE1FOiBIQUNLIHN0dy9sZHcgcjE5IGFyb3VuZCBzeXNjYWxsICovCQlcCisrCQlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJXAorKwkJCUtfU1RXX0FTTV9QSUMJCQkJCVwKKysJCQkiCWJsZSAgMHgxMDAoJSVzcjIsICUlcjApXG4iCQlcCisrCQkJIglsZGkgJTEsICUlcjIwXG4iCQkJXAorKwkJCUtfTERXX0FTTV9QSUMJCQkJCVwKKysJCQk6ICI9ciIgKF9fcmVzKQkJCQkJXAorKwkJCTogImkiIChTWVNfaWZ5KG5hbWUpKSBLX0FTTV9BUkdTXyMjbnIJCVwKKysJCQk6ICJtZW1vcnkiLCBLX0NBTExfQ0xPQl9SRUdTIEtfQ0xPQl9BUkdTXyMjbnIJXAorKwkJKTsJCQkJCQkJXAorKwkJX19zeXNfcmVzID0gKGxvbmcpX19yZXM7CQkJCVwKKysJfQkJCQkJCQkJXAorKwlfX3N5c19yZXM7CQkJCQkJCVwKKyt9KQorKworKyNkZWZpbmUgS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18xKHIyNikJCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNiBfX2FzbV9fKCJyMjYiKSA9ICh1bnNpZ25lZCBsb25nKShyMjYpOyAgIFwKKysJS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18yKHIyNixyMjUpCQkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjUgX19hc21fXygicjI1IikgPSAodW5zaWduZWQgbG9uZykocjI1KTsgICBcCisrCUtfTE9BRF9BUkdTXzEocjI2KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI0IF9fYXNtX18oInIyNCIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNCk7ICAgXAorKwlLX0xPQURfQVJHU18yKHIyNixyMjUpCisrI2RlZmluZSBLX0xPQURfQVJHU180KHIyNixyMjUscjI0LHIyMykJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjIzIF9fYXNtX18oInIyMyIpID0gKHVuc2lnbmVkIGxvbmcpKHIyMyk7ICAgXAorKwlLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMiBfX2FzbV9fKCJyMjIiKSA9ICh1bnNpZ25lZCBsb25nKShyMjIpOyAgIFwKKysJS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCisrI2RlZmluZSBLX0xPQURfQVJHU182KHIyNixyMjUscjI0LHIyMyxyMjIscjIxKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMSBfX2FzbV9fKCJyMjEiKSA9ICh1bnNpZ25lZCBsb25nKShyMjEpOyAgIFwKKysJS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQorKworKy8qIEV2ZW4gd2l0aCB6ZXJvIGFyZ3Mgd2UgdXNlIHIyMCBmb3IgdGhlIHN5c2NhbGwgbnVtYmVyICovCisrI2RlZmluZSBLX0FTTV9BUkdTXzAKKysjZGVmaW5lIEtfQVNNX0FSR1NfMSBLX0FTTV9BUkdTXzAsICJyIiAoX19yMjYpCisrI2RlZmluZSBLX0FTTV9BUkdTXzIgS19BU01fQVJHU18xLCAiciIgKF9fcjI1KQorKyNkZWZpbmUgS19BU01fQVJHU18zIEtfQVNNX0FSR1NfMiwgInIiIChfX3IyNCkKKysjZGVmaW5lIEtfQVNNX0FSR1NfNCBLX0FTTV9BUkdTXzMsICJyIiAoX19yMjMpCisrI2RlZmluZSBLX0FTTV9BUkdTXzUgS19BU01fQVJHU180LCAiciIgKF9fcjIyKQorKyNkZWZpbmUgS19BU01fQVJHU182IEtfQVNNX0FSR1NfNSwgInIiIChfX3IyMSkKKysKKysvKiBUaGUgcmVnaXN0ZXJzIG5vdCBsaXN0ZWQgYXMgaW5wdXRzIGJ1dCBjbG9iYmVyZWQgKi8KKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzYKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzUgS19DTE9CX0FSR1NfNiwgIiVyMjEiCisrI2RlZmluZSBLX0NMT0JfQVJHU180IEtfQ0xPQl9BUkdTXzUsICIlcjIyIgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMyBLX0NMT0JfQVJHU180LCAiJXIyMyIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzIgS19DTE9CX0FSR1NfMywgIiVyMjQiCisrI2RlZmluZSBLX0NMT0JfQVJHU18xIEtfQ0xPQl9BUkdTXzIsICIlcjI1IgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMCBLX0NMT0JfQVJHU18xLCAiJXIyNiIKKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSkJCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxKQkJCQkJCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDEsIGFyZzEpOwkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyKQkJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAyLCBhcmcxLCBhcmcyKTsJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMykJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAzLCBhcmcxLCBhcmcyLCBhcmczKTsJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KSBcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwlcCisrfQorKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMTAub3JpZy9zcmMvc3lzY2FsbC1hcm0uaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCitAQCAtMTE0LDMgKzExNCwxMTkgQEAgdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMworICAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisgfQorIAorKy8qCisrICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKyAqCisrICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFJ1c3NlbGwgS2luZworKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKyAqCisrICogUGxlYXNlIGZvcndhcmQgX2FsbF8gY2hhbmdlcyB0byB0aGlzIGZpbGUgdG8gcm1rQGFybS5saW51eC5vcmcudWssCisrICogbm8gbWF0dGVyIHdoYXQgdGhlIGNoYW5nZSBpcy4gIFRoYW5rcyEKKysgKi8KKysKKysjZGVmaW5lIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UJMHg5MDAwMDAKKysKKysjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQorKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UJMAorKyNlbHNlCisrI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRQlfX05SX09BQklfU1lTQ0FMTF9CQVNFCisrI2VuZGlmCisrCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MykKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX1NZU0NBTExfQkFTRSsyNDQpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NSkKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NikKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NykKKysKKysjZGVmaW5lIF9fc3lzMih4KSAjeAorKyNkZWZpbmUgX19zeXMxKHgpIF9fc3lzMih4KQorKworKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCisrI2RlZmluZSBfX1NZU19SRUcobmFtZSkgcmVnaXN0ZXIgbG9uZyBfX3N5c3JlZyBfX2FzbV9fKCJyNyIpID0gX19OUl8jI25hbWU7CisrI2RlZmluZSBfX1NZU19SRUdfTElTVChyZWdzLi4uKSAiciIgKF9fc3lzcmVnKSAsICMjcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdDAiCisrI2Vsc2UKKysjZGVmaW5lIF9fU1lTX1JFRyhuYW1lKQorKyNkZWZpbmUgX19TWVNfUkVHX0xJU1QocmVncy4uLikgcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdCIgX19zeXMxKF9fTlJfIyNuYW1lKSAiIgorKyNlbmRpZgorKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxKQkJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEpIHsJCQkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApICkJCQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgewkJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSkgKQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczKQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMykgewkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMikgKQkJXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNClcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSB7CQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMyBfX2FzbV9fKCJyMyIpID0gKGxvbmcpYXJnNDsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLCAiciIgKF9fcjMpICkgXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KSB7XAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjMgX19hc21fXygicjMiKSA9IChsb25nKWFyZzQ7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3I0IF9fYXNtX18oInI0IikgPSAobG9uZylhcmc1OwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMiksCQlcCisrCQkJICAiciIgKF9fcjMpLCAiciIgKF9fcjQpICkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9kZXN0ZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9kZXN0ZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZDk2MDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2Rlc3RkaXIucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMDYub3JpZy9NYWtlZmlsZQkyMDA0LTAyLTI2IDA3OjI1OjEwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCTIwMDYtMTAtMTQgMDk6MTk6MDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNyArMTUsNyBAQAorIAlAJChNQUtFKSAtQyBzcmMKKyAKKyBpbnN0YWxsOgorLQlAJChNQUtFKSAtQyBzcmMgaW5zdGFsbCBwcmVmaXg9JChwcmVmaXgpIGluY2x1ZGVkaXI9JChpbmNsdWRlZGlyKSBsaWJkaXI9JChsaWJkaXIpCisrCUAkKE1BS0UpIC1DIHNyYyBpbnN0YWxsIHByZWZpeD0kKERFU1RESVIpJChwcmVmaXgpIGluY2x1ZGVkaXI9JChERVNURElSKSQoaW5jbHVkZWRpcikgbGliZGlyPSQoREVTVERJUikkKGxpYmRpcikKKyAKKyAKKyBjbGVhbjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZ2VuZXJpYy1hcmNoLWRlY3RlY3Rpb24tZm9yLXBhZGRpbmctZGVmaW5lcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZ2VuZXJpYy1hcmNoLWRlY3RlY3Rpb24tZm9yLXBhZGRpbmctZGVmaW5lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmE3ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb206IE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CitEYXRlOiBUdWUsIDI3IEphbiAyMDE1IDE0OjU5OjM1ICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEdlbmVyaWMgYXJjaCBkZWN0ZWN0aW9uIGZvciBwYWRkaW5nIGRlZmluZXMKKworV2hlbiBhdmFpbGFibGUgdXNlIHRoZSBHTlUgQyBkZWZpbmVzIGZvciBlbmRpYW4gYW5kIGJpdHdpZHRoIHRvCitkZXRlcm1pbmUgdGhlIHBhZGRpbmcgcmVxdWlyZWQuIFRoaXMgcmVkdWNlcyB0aGUgbmVlZCB0byBkZWZpbmUgdGhlCitwYWRkaW5nIHNlbGVjdGlvbiBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlLgorCitTaWduZWQtb2ZmLWJ5OiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorU2lnbmVkLW9mZi1ieTogSmVmZiBNb3llciA8am1veWVyQHJlZGhhdC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBzcmMvbGliYWlvLmggfCAxNiArKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGliYWlvLmggYi9zcmMvbGliYWlvLmgKK2luZGV4IDEyMjMxNDYuLjRhNGUwZjUgMTAwNjQ0CistLS0gYS9zcmMvbGliYWlvLmgKKysrKyBiL3NyYy9saWJhaW8uaAorQEAgLTUyLDE0ICs1MiwxOCBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworIC8qIGxpdHRsZSBlbmRpYW4sIDMyIGJpdHMgKi8KKyAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgKGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19BUk1FQl9fKSkgfHwgXAorICAgICBkZWZpbmVkKF9fc2hfXykgfHwgZGVmaW5lZChfX2JmaW5fXykgfHwgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBcCistICAgIGRlZmluZWQoX19jcmlzX18pCisrICAgIGRlZmluZWQoX19jcmlzX18pIHx8IFwKKysgICAgKGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIFwKKysgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl4OyB1bnNpZ25lZCB5CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJeDsgdW5zaWduZWQgeQorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4OyB1bnNpZ25lZCB5CisgCisgLyogbGl0dGxlIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fICYmIF9fU0laRU9GX0xPTkdfXyA9PSA4KQorICNkZWZpbmUgUEFEREVEKHgsIHkpCXgsIHkKKyAjZGVmaW5lIFBBRERFRHB0cih4LCB5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC02Nyw3ICs3MSw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgLyogYmlnIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKyAgICAgICAoZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCx5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC03Niw3ICs4Miw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgI2VsaWYgZGVmaW5lZChfX1BQQ19fKSB8fCBkZWZpbmVkKF9fczM5MF9fKSB8fCBcCisgICAgICAgKGRlZmluZWQoX19hcm1fXykgJiYgZGVmaW5lZChfX0FSTUVCX18pKSB8fCBcCisgICAgICAgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX202OGtfXykgfHwgXAorLSAgICAgIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19mcnZfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pCisrICAgICAgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX2Zydl9fKSB8fCBkZWZpbmVkKF9fYXZyMzJfXykgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgeTsgdW5zaWduZWQgbG9uZyB4CistLSAKKzIuMS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vbGliYWlvX2ZpeF9mb3JfbWlwc19zeXNjYWxscy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vbGliYWlvX2ZpeF9mb3JfbWlwc19zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzY4NTBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFBoaWwgU3RhdWIgPFBoaWwuU3RhdWJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLW1pcHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTA5Lm9yaWcvc3JjL3N5c2NhbGwtbWlwcy5oCisrKysgbGliYWlvLTAuMy4xMDkvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtNzYsNyArNzYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCitAQCAtMTAwLDcgKzEwMCw3IEBAIHR5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYykgXAorQEAgLTEyNSw3ICsxMjUsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCkgXAorQEAgLTE1MCw3ICsxNTAsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKQorQEAgLTE4Niw3ICsxODYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKSAqLworQEAgLTIxNiw3ICsyMTYsNyBAQCB0eXBlIGZuYW1lIChhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYyxkdHlwCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vbGliYWlvX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOGY1YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDYxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUHJvcGVybHkgbG9hZCBhcmd1bWVudHMgNSBhbiA2IGZvciB4ODYtNjQgc3lzY2FsbAorVXNlIGFzbSAoInIxMCIpIGFuZCBhc20gKCJyOCIpIHRvIGxvYWQgYXJndW1lbnRzIDUgYW4gNiBmb3IgeDg2LTY0CitzeXNjYWxsIHNvIHRoYXQgaXQgd29ya3Mgd2l0aCBib3RoIHgzMiBhbmQgeDg2LTY0LgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMTIvMDIKKworLS0tIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oLngzMgkyMDA5LTEwLTA5IDExOjE3OjAyLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oCTIwMTEtMTItMDIgMDk6MDk6MDcuNTM3NjAzMjI0IC0wODAwCitAQCAtMSw4ICsxLDE4IEBACisrI2lmbmRlZiBfX05SX2lvX3NldHVwCisgI2RlZmluZSBfX05SX2lvX3NldHVwCQkyMDYKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZGVzdHJveQorICNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyMDcKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZ2V0ZXZlbnRzCisgI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyMDgKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fc3VibWl0CisgI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjA5CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2NhbmNlbAorICNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTIxMAorKyNlbmRpZgorIAorICNkZWZpbmUgX19zeXNjYWxsX2Nsb2JiZXIgInIxMSIsInJjeCIsIm1lbW9yeSIgCisgI2RlZmluZSBfX3N5c2NhbGwgInN5c2NhbGwiCitAQCAtNDIsMTAgKzUyLDExIEBAIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB0eXBlIGZuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAorIHsJCQkJCQkJCQlcCisgbG9uZyBfX3JlczsJCQkJCQkJCVwKKy1fX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IiBfX3N5c2NhbGwJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNCBhc20gKCJyMTAiKSA9IChsb25nKSBhcmc0OwkJCQlcCisrX19hc21fXyB2b2xhdGlsZSAoX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpIDogX19zeXNjYWxsX2Nsb2JiZXIsInIxMCIgKTsgXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpKTsgXAorIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB9IAorIAorQEAgLTU0LDEwICs2NSwxMSBAQCByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgdHlwZSBmbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1KQlcCisgewkJCQkJCQkJCVwKKyBsb25nIF9fcmVzOwkJCQkJCQkJXAorLV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZxICU1LCUlcjEwIDsgbW92cSAlNiwlJXI4IDsgIiBfX3N5c2NhbGwJCVwKKytyZWdpc3RlciBsb25nIF9fYTQgYXNtICgicjEwIikgPSAobG9uZykgYXJnNDsJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNSBhc20gKCJyOCIpID0gKGxvbmcpIGFyZzU7CQkJCVwKKytfX2FzbV9fIHZvbGF0aWxlICggX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpLCJnIiAoKGxvbmcpKGFyZzUpKSA6CVwKKy0JX19zeXNjYWxsX2Nsb2JiZXIsInI4IiwicjEwIiApOwkJCQkJXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpLCJyIiAoX19hNSkpOwkJCVwKKyByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpb18wLjMuMTEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZTI5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBc3luY2hyb25vdXMgSS9PIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJBc3luY2hyb25vdXMgaW5wdXQvb3V0cHV0IGxpYnJhcnkgdGhhdCB1c2VzIHRoZSBrZXJuZWxzIG5hdGl2ZSBpbnRlcmZhY2UiCitIT01FUEFHRSA9ICJodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9pby9haW8uaHRtbCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kODA0NWYzYjhmOTI5YzFjYjI5YTFlM2ZkNzM3YjQ5OSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGliYS9saWJhaW8vbGliYWlvXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDBfYXJjaGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliYWlvX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmEzNTYwMmU0Mzc3ODM4M2UyZjQ5MDdhNGNhMzlhYjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTAxOTAyOGU2MzE3MjU3MjkzNzYyNTBlMzJiNDczMDEyZjdjYjY4ZTFmNzI3NWJmYzFiYmNkZDBmODc0NWY3ZSIKKworRVhUUkFfT0VNQUtFID0rICJwcmVmaXg9JHtwcmVmaXh9IGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSBsaWJkaXI9JHtsaWJkaXJ9IgorIyBOZWVkIGxpYmMgZm9yIHN0YWNrLXByb3RlY3RvcidzIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwoKSBib3VuY2UgZnVuY3Rpb24KK0xERkxBR1NfYXBwZW5kX3g4NiA9ICIgLWxjIgorCitkb19jb25maWd1cmUgKCkgeworICAgIHNlZCAtaSAncyNMSU5LX0ZMQUdTPS4qI0xJTktfRkxBR1M9JChMREZMQUdTKSMnIHNyYy9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvMDAwMS1BZGQtQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMtb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2E3NzljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDE1MSBAQAorRnJvbSA1OTM1NzE1NzcwNmQ0N2MzNjViMjIyNzczOWUxN2RhYmEzNjA3NTI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxlc3NhbmRybyBHaGVkaW5pIDxhbGVzc2FuZHJvQGdoZWRpbmkubWU+CitEYXRlOiBTdW4sIDEgTWFyIDIwMTUgMTI6MDc6NDUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTIG9wdGlvbgorCitUaGlzIGZpeGVzIGEgZGlyZWN0b3J5IHRyYXZlcnNhbCBpbiB0aGUgY3BpbyB0b29sLgorCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY3Bpby9ic2RjcGlvLjEgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKystCisgY3Bpby9jcGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBsaWJhcmNoaXZlL2FyY2hpdmUuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgICAgICAgICAgfCAgICAzICsrKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgICAgfCAgIDE0ICsrKysrKysrKysrLS0tCisgbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrKysrKysKKyA2IGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGlvL2JzZGNwaW8uMSBiL2NwaW8vYnNkY3Bpby4xCitpbmRleCBmOTY2YWEwLi5lNTI1NDZlIDEwMDY0NAorLS0tIGEvY3Bpby9ic2RjcGlvLjEKKysrKyBiL2NwaW8vYnNkY3Bpby4xCitAQCAtMTU2LDcgKzE1Niw4IEBAIFNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24uCisgLkl0IEZsIEZsIGluc2VjdXJlCisgKGkgYW5kIHAgbW9kZSBvbmx5KQorIERpc2FibGUgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBleHRyYWN0aW9uIG9yIGNvcHlpbmcuCistVGhpcyBhbGxvd3MgZXh0cmFjdGlvbiB2aWEgc3ltYm9saWMgbGlua3MgYW5kIHBhdGggbmFtZXMgY29udGFpbmluZworK1RoaXMgYWxsb3dzIGV4dHJhY3Rpb24gdmlhIHN5bWJvbGljIGxpbmtzLCBhYnNvbHV0ZSBwYXRocywKKythbmQgcGF0aCBuYW1lcyBjb250YWluaW5nCisgLlNxIC4uCisgaW4gdGhlIG5hbWUuCisgLkl0IEZsIEogLCBGbCBGbCB4egorZGlmZiAtLWdpdCBhL2NwaW8vY3Bpby5jIGIvY3Bpby9jcGlvLmMKK2luZGV4IDBhY2RlMTEuLmIyNjdlOWIgMTAwNjQ0CistLS0gYS9jcGlvL2NwaW8uYworKysrIGIvY3Bpby9jcGlvLmMKK0BAIC0xNzEsNiArMTcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9OT19PVkVSV1JJVEVfTkVXRVI7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9QRVJNOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9GRkxBR1M7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX0FDTDsKK0BAIC0yNTYsNiArMjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJY2FzZSBPUFRJT05fSU5TRUNVUkU6CisgCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAkJCWJyZWFrOworIAkJY2FzZSAnTCc6IC8qIEdOVSBjcGlvICovCisgCQkJY3Bpby0+b3B0aW9uX2ZvbGxvd19saW5rcyA9IDE7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlLmggYi9saWJhcmNoaXZlL2FyY2hpdmUuaAoraW5kZXggMWYwZmMzOC4uZWY2MzVhYyAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmUuaAorQEAgLTY0OSw2ICs2NDksOCBAQCBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zZXRfcGFzc3BocmFzZV9jYWxsYmFjayhzdHJ1Y3QgYXJjaGl2ZSAqLAorIC8qIERlZmF1bHQ6IERvIG5vdCB1c2UgSEZTKyBjb21wcmVzc2lvbiBpZiBpdCB3YXMgbm90IGNvbXByZXNzZWQuICovCisgLyogVGhpcyBoYXMgbm8gZWZmZWN0IGV4Y2VwdCBvbiBNYWMgT1MgdjEwLjYgb3IgbGF0ZXIuICovCisgI2RlZmluZQlBUkNISVZFX0VYVFJBQ1RfSEZTX0NPTVBSRVNTSU9OX0ZPUkNFRAkoMHg4MDAwKQorKy8qIERlZmF1bHQ6IERvIG5vdCByZWplY3QgZW50cmllcyB3aXRoIGFic29sdXRlIHBhdGhzICovCisrI2RlZmluZSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyAoMHgxMDAwMCkKKyAKKyBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9leHRyYWN0KHN0cnVjdCBhcmNoaXZlICosIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosCisgCQkgICAgIGludCBmbGFncyk7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKK2luZGV4IGZhOTI1Y2MuLmEyZTdhZmEgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCitAQCAtMTc3LDYgKzE3Nyw5IEBAIFRoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyBOb3RlIHRoYXQgcGF0aHMgZW5kaW5nIGluCisgLlBhIC4uCisgYWx3YXlzIGNhdXNlIGFuIGVycm9yLCByZWdhcmRsZXNzIG9mIHRoaXMgZmxhZy4KKysuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKKytSZWZ1c2UgdG8gZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorK1RoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyAuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NQQVJTRQorIFNjYW4gZGF0YSBmb3IgYmxvY2tzIG9mIE5VTCBieXRlcyBhbmQgdHJ5IHRvIHJlY3JlYXRlIHRoZW0gd2l0aCBob2xlcy4KKyBUaGlzIHJlc3VsdHMgaW4gc3BhcnNlIGZpbGVzLCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBhcmNoaXZlIGZvcm1hdAorZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCitpbmRleCBhYjNiZGFjLi5jMTI5MGViIDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworQEAgLTI1MDksOCArMjUwOSw5IEBAIGNsZWFudXBfcGF0aG5hbWVfd2luKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCisgLyoKKyAgKiBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lLiAgSW4gcGFydGljdWxhciwgdGhpcyBzdHJpcHMgZHVwbGljYXRlCisgICogJy8nIGNoYXJhY3RlcnMsICcuJyBlbGVtZW50cywgYW5kIHRyYWlsaW5nICcvJy4gIEl0IGFsc28gcmFpc2VzIGFuCistICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJyBvciAoaWYgX1NFQ1VSRV9OT0RPVERPVCBpcworLSAqIHNldCkgYW55ICcuLicgaW4gdGhlIHBhdGguCisrICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJywgKGlmIF9TRUNVUkVfTk9ET1RET1QgaXMKKysgKiBzZXQpIGFueSAnLi4nIGluIHRoZSBwYXRoIG9yIChpZiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUworKyAqIGlzIHNldCkgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuCisgICovCisgc3RhdGljIGludAorIGNsZWFudXBfcGF0aG5hbWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKK0BAIC0yNTI5LDggKzI1MzAsMTUgQEAgY2xlYW51cF9wYXRobmFtZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQorIAljbGVhbnVwX3BhdGhuYW1lX3dpbihhKTsKKyAjZW5kaWYKKyAJLyogU2tpcCBsZWFkaW5nICcvJy4gKi8KKy0JaWYgKCpzcmMgPT0gJy8nKQorKwlpZiAoKnNyYyA9PSAnLycpIHsKKysJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTKSB7CisrCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKysJCQkgICAgICAgICAgICAgICAgICAiUGF0aCBpcyBhYnNvbHV0ZSIpOworKwkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworKwkJfQorKworIAkJc2VwYXJhdG9yID0gKnNyYysrOworKwl9CisgCisgCS8qIFNjYW4gdGhlIHBhdGhuYW1lIG9uZSBlbGVtZW50IGF0IGEgdGltZS4gKi8KKyAJZm9yICg7OykgeworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMgYi9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jCitpbmRleCAzMWM1YmZkLi4yYzk0MjA2IDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworKysrIGIvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworQEAgLTE3OCw2ICsxNzgsMjkgQEAgREVGSU5FX1RFU1QodGVzdF93cml0ZV9kaXNrX3NlY3VyZSkKKyAJYXNzZXJ0KFNfSVNESVIoc3Quc3RfbW9kZSkpOworIAlhcmNoaXZlX2VudHJ5X2ZyZWUoYWUpOworIAorKwkvKgorKwkgKiBXaXRob3V0IHNlY3VyaXR5IGNoZWNrcywgd2Ugc2hvdWxkIGJlIGFibGUgdG8KKysJICogZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorKwkgKi8KKysJYXNzZXJ0KChhZSA9IGFyY2hpdmVfZW50cnlfbmV3KCkpICE9IE5VTEwpOworKwlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWUoYWUsICIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFyY2hpdmVfZW50cnlfc2V0X21vZGUoYWUsIFNfSUZSRUcgfCAwNzc3KTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlRXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFzc2VydCgwID09IHVubGluaygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpKTsKKysKKysJLyogQnV0IHdpdGggc2VjdXJpdHkgY2hlY2tzIGVuYWJsZWQsIHRoaXMgc2hvdWxkIGZhaWwuICovCisrCWFzc2VydChhcmNoaXZlX2VudHJ5X2NsZWFyKGFlKSAhPSBOVUxMKTsKKysJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGFlLCAiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGFlLCBTX0lGUkVHIHwgMDc3Nyk7CisrCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfb3B0aW9ucyhhLCBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyk7CisrCWZhaWx1cmUoIkV4dHJhY3RpbmcgYW4gYWJzb2x1dGUgcGF0aCBzaG91bGQgZmFpbCBoZXJlLiIpOworKwlhc3NlcnRFcXVhbEludChBUkNISVZFX0ZBSUxFRCwgYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXJjaGl2ZV9lbnRyeV9mcmVlKGFlKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlTm90RXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCisgCWFzc2VydEVxdWFsSW50KEFSQ0hJVkVfT0ssIGFyY2hpdmVfd3JpdGVfZnJlZShhKSk7CisgCisgCS8qIFRlc3QgdGhlIGVudHJpZXMgb24gZGlzay4gKi8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjZmODBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDJmNTVkNmJkMzA4ZWE2MTk3NTU1OGMyNDY5YWUzNDlkYmEyOTdlODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjIgRmViIDIwMTQgMTQ6MzU6NTkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IENWRS0yMDEzLTAyMTEKKworVGhpcyBwYXRjaCBjb21lcyBmcm9tOmh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29tbWl0LzIyNTMxNTQ1NTE0MDQzZTA0NjMzZTFjMDE1Yzc1NDBiOWRlOWRiZTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gc2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGUgdGhlIHBhdGNoIGJlY2F1c2Ugb2YgdXByZXYgb24gMjAxNDAyMjIKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK2luZGV4IGEzZDFhMzMuLmEzMjM1ODggMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK0BAIC02NzEsOCArNjcxLDEyIEBAIHN0YXRpYyBzc2l6ZV90CisgX2FyY2hpdmVfd3JpdGVfZGF0YShzdHJ1Y3QgYXJjaGl2ZSAqX2EsIGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBzKQorIHsKKyAJc3RydWN0IGFyY2hpdmVfd3JpdGUgKmEgPSAoc3RydWN0IGFyY2hpdmVfd3JpdGUgKilfYTsKKysJY29uc3Qgc2l6ZV90IG1heF93cml0ZSA9IElOVF9NQVg7CisgCWFyY2hpdmVfY2hlY2tfbWFnaWMoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfV1JJVEVfTUFHSUMsCisgCSAgICBBUkNISVZFX1NUQVRFX0RBVEEsICJhcmNoaXZlX3dyaXRlX2RhdGEiKTsKKysJLyogSW4gcGFydGljdWxhciwgdGhpcyBjYXRjaGVzIGF0dGVtcHRzIHRvIHBhc3MgbmVnYXRpdmUgdmFsdWVzLiAqLworKwlpZiAocyA+IG1heF93cml0ZSkKKysJCXMgPSBtYXhfd3JpdGU7CisgCWFyY2hpdmVfY2xlYXJfZXJyb3IoJmEtPmFyY2hpdmUpOworIAlyZXR1cm4gKChhLT5mb3JtYXRfd3JpdGVfZGF0YSkoYSwgYnVmZiwgcykpOworIH0KKy0tIAorMS44LjIuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbWtkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbWtkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5YTI5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitBZGQgbWlzc2luZyBta2RpciBjYWxscyBzbyB0aGF0IG91dC1vZi10cmVlIGJ1aWxkcyB3b3JrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wdWxsLzUzNCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzZmEyZDIyLi41ZWNjYTUyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNTA4LDYgKzUwOCw3IEBAIGxpYmFyY2hpdmVfdGVzdF9MREFERD0gJChMVExJQklDT05WKQorICMgQnVpbGRpbmcgaXQgYXV0b21hdGljYWxseSBwcm92aWRlcyBhIHNhbml0eS1jaGVjayBvbiBsaWJhcmNoaXZlX3Rlc3RfU09VUkNFUworICMgYWJvdmUuCisgbGliYXJjaGl2ZS90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBsaWJhcmNoaXZlL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvbGliYXJjaGl2ZS90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGxpYmFyY2hpdmUvdGVzdC9saXN0LmgKKyAKKyBsaWJhcmNoaXZlX1RFU1RTX0VOVklST05NRU5UPSBMSUJBUkNISVZFX1RFU1RfRklMRVM9YGNkICQodG9wX3NyY2Rpcik7L2Jpbi9wd2RgL2xpYmFyY2hpdmUvdGVzdCBMUlpJUD1OT0NPTkZJRworQEAgLTgzNSw2ICs4MzYsNyBAQCBic2R0YXJfdGVzdF9DUFBGTEFHUz1cCisgCSQoUExBVEZPUk1DUFBGTEFHUykKKyAKKyB0YXIvdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgdGFyL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvdGFyL3Rlc3QvdGVzdF8qLmMgfCBncmVwIERFRklORV9URVNUID4gdGFyL3Rlc3QvbGlzdC5oCisgCisgaWYgQlVJTERfQlNEVEFSCitAQCAtOTc1LDYgKzk3Nyw3IEBAIGJzZGNwaW9fdGVzdF9DUFBGTEFHUz0gXAorIGJzZGNwaW9fdGVzdF9MREFERD1saWJhcmNoaXZlX2ZlLmxhCisgCisgY3Bpby90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBjcGlvL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvY3Bpby90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGNwaW8vdGVzdC9saXN0LmgKKyAKKyBpZiBCVUlMRF9CU0RDUElPCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAzOGJkMjk5Li43YmRiMDBjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDIsNiArMTAyLDcgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyBBQ19DSEVDS19UT09MKFtTVFJJUF0sW3N0cmlwXSkKKytBQ19QUk9HX01LRElSX1AKKyAKKyAjCisgIyBPcHRpb25zIGZvciBidWlsZGluZyBic2R0YXIuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDZhZjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVc2UgcGtnLWNvbmZpZyBmb3IgdGhlIGxpYnhtbDIgZGVwZW5kZW5jeSwgbm90IHRoZSAtY29uZmlnIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhcmNoaXZlLTMuMS4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTMtMDItMDkgMTc6MjM6MDMuMDAwMDAwMDAwICswMDAwCisrKysgbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAxNToyNjo0NS40NDY0OTkxMDggKzAwMDAKK0BAIC0zMjksMTAgKzMyOSwxMCBAQAorICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1leHBhdF0sIFtEb24ndCBidWlsZCBzdXBwb3J0IGZvciB4YXIgdGhyb3VnaCBleHBhdF0pKQorIAorIGlmIHRlc3QgIngkd2l0aF94bWwyIiAhPSAieG5vIjsgdGhlbgorLSAgQUNfUEFUSF9QUk9HKFtYTUwyX0NPTkZJR10sIFt4bWwyLWNvbmZpZ10sLCBbJHtQQVRIfV0pCistICBpZiB0ZXN0ICJ4JFhNTDJfQ09ORklHIiAhPSAieCI7IHRoZW4KKy0gICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IGAke1hNTDJfQ09ORklHfSAtLWNmbGFnc2AiCistICAgIExJQlM9IiR7TElCU30gYCR7WE1MMl9DT05GSUd9IC0tbGlic2AiCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhQS0dfWE1MMiwgW2xpYnhtbC0yLjBdLCwpCisrICBpZiB0ZXN0ICJ4JFBLR19YTUwyX0NGTEFHUyIgIT0gIngiOyB0aGVuCisrICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke1BLR19YTUwyX0NGTEFHU30iCisrICAgIExJQlM9IiR7TElCU30gJHtQS0dfWE1MMl9MSUJTfSIKKyAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcixbdHJ1ZV0sQUNfTVNHX0ZBSUxVUkUoTWlzc2luZyB4bWwyIGxpYnJhcnkpKQorICAgZWxzZQorICAgICBBQ19DSEVDS19MSUIoeG1sMix4bWxJbml0UGFyc2VyKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlXzMuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYTMyNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJTdXBwb3J0IGZvciByZWFkaW5nIHZhcmlvdXMgYXJjaGl2ZSBmb3JtYXRzIgorREVTQ1JJUFRJT04gPSAiQyBsaWJyYXJ5IGFuZCBjb21tYW5kLWxpbmUgdG9vbHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyLCBjcGlvLCB6aXAsIElTTywgYW5kIG90aGVyIGFyY2hpdmUgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGliYXJjaGl2ZS5vcmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjRlM2ZmZDYwN2Q2Njg2YzZjYjJmNjMzOTQzNzA4NDEiCisKK0RFUEVORFMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKKworUEFDS0FHRUNPTkZJRyA/PSAibGlieG1sMiB6bGliIGJ6MiIKKworUEFDS0FHRUNPTkZJR19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbGFyZ2VmaWxlIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsLCIKK1BBQ0tBR0VDT05GSUdbeGF0dHJdID0gIi0tZW5hYmxlLXhhdHRyLC0tZGlzYWJsZS14YXR0cixhdHRyLCIKK1BBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbYnoyXSA9ICItLXdpdGgtYnoybGliLC0td2l0aG91dC1iejJsaWIsYnppcDIsIgorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLWx6bWFkZWMgLS13aXRoLWx6bWEsLS13aXRob3V0LWx6bWFkZWMgLS13aXRob3V0LWx6bWEseHosIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKK1BBQ0tBR0VDT05GSUdbbGlieG1sMl0gPSAiLS13aXRoLXhtbDIsLS13aXRob3V0LXhtbDIsbGlieG1sMiwiCitQQUNLQUdFQ09ORklHW2V4cGF0XSA9ICItLXdpdGgtZXhwYXQsLS13aXRob3V0LWV4cGF0LGV4cGF0LCIKK1BBQ0tBR0VDT05GSUdbbHpvXSA9ICItLXdpdGgtbHpvMiwtLXdpdGhvdXQtbHpvMixsem8sIgorUEFDS0FHRUNPTkZJR1tuZXR0bGVdID0gIi0td2l0aC1uZXR0bGUsLS13aXRob3V0LW5ldHRsZSxuZXR0bGUsIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJhcmNoaXZlLm9yZy9kb3dubG9hZHMvbGliYXJjaGl2ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZmFkNWE1MDNmNjYzMjliYjlkMmY0MzA4YjVkZTk4YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlYjg3ZWFjZDhmZTQ5ZThkOTBjOGZkYzE4OTgxMzAyM2NjYzMxOWM1ZTc1MmIwMWZiNmFkMGNjN2IyYzUzZDVlIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworQ1BQRkxBR1MgKz0gIi1JJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcyIKKworZG9fY29uZmlndXJlW2NsZWFuZGlyc10gKz0gIiR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIFdlIGp1c3QgbmVlZCB0aGUgaGVhZGVycyBmb3Igc29tZSB0eXBlIGNvbnN0YW50cywgc28gbm8gbmVlZCB0bworCSMgYnVpbGQgYWxsIG9mIGUyZnNwcm9ncyBmb3IgdGhlIHRhcmdldAorCWNwIC1SICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9leHQyZnMgJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcy8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2F2b2lkX0FNX1BST0dfTUtESVJfUF93YXJuaW5nX2Vycm9yX3dpdGhfYXV0b21ha2VfMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDc2YmI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIAorCithdXRvbWFrZSAxLjEyLnggaGFzIGRlcHJlY2F0ZWQgQU1fUFJPR19NS0RJUl9QICwgYW5kIHRocm93cyBhIHdhcm5pbmcgZm9yIHRoYXQsCithbmQgdGhlIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycyBiZWNhdXNlIG9mIHRoZSAtV2Vycm9yIHBhcmFtZXRlci4KKworVGhlc2UgQU1fUFJPR19NS0RJUl9QIGFyZSBjb21pbmcgZnJvbSBnZXR0ZXh0LCBhbmQgdGhlIGxhdGVzdCBnZXR0ZXh0IGNvZGUgaGFzIG5vdCAKK2VsaW1pbmF0ZWQgdGhlc2UgZGVwcmVjYXRlZCBtYWNyb3MgeWV0LiBTbyBkaXNhYmxlIHRoZSB0cmVhdG1lbnQgb2Ygd2FybmluZ3MKK2FzIGVycm9ycyB1bnRpbCBnZXR0ZXh0IGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1hY3Jvcy4KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDcvMTAKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMjMsNyArMjMsNyBAQCBBQ19DT1BZUklHSFQoW0NvcHlyaWdodCAoYykgMjAwMi0yMDExIFNpCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIEFDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorLUFNX0lOSVRfQVVUT01BS0UoWzEuMTAgLVdhbGwgLVdlcnJvciAtV25vLW92ZXJyaWRlXSkKKytBTV9JTklUX0FVVE9NQUtFKFsxLjEwIC1XYWxsIC1Xbm8tb3ZlcnJpZGVdKQorIEFNX1NJTEVOVF9SVUxFUyhbeWVzXSkKKyAKKyAjIExpYnJhcnkgY29kZSBtb2RpZmllZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZJU0lPTisrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODYzNTMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmRkIGxpYmlkbi0xLjI2L2RvYy9NYWtlZmlsZS5hbSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0KKy0tLSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wOS0xOCAxMToyNTo0NS4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wMi0wOCAwNzo0MToyNC41OTE0MzE0NjIgKzAyMDAKK0BAIC00OSwxNSArNDksOSBAQAorCisgIyBNYW4gcGFnZXMuCisKKy1kaXN0X21hbl9NQU5TID0gaWRuLjEgJChnZG9jX01BTlMpCisrZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKQorIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChkaXN0X21hbl9NQU5TKQorCistaWRuLjE6ICQodG9wX3NyY2Rpcikvc3JjL2lkbi5jICQodG9wX3NyY2Rpcikvc3JjL2lkbi5nZ28gXAorLQkJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKy0JJChIRUxQMk1BTikgXAorLQkJLS1uYW1lPSJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgY29tbWFuZCBsaW5lIHRvb2wiIFwKKy0JCS0tb3V0cHV0PSRAICQodG9wX2J1aWxkZGlyKS9zcmMvaWRuJChFWEVFWFQpCistCisgIyBHRE9DCisKKyBHRE9DX0JJTiA9ICQoc3JjZGlyKS9nZG9jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhZmQyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgYXV0b21ha2U6IHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycworfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiB3YXJuaW5nOiAnbGliaWRuLmxhJzogbGlua2luZyBsaWJ0b29sIGxpYnJhcmllcyB1c2luZyBhIG5vbi1QT1NJWAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiBhcmNoaXZlciByZXF1aXJlcyAnQU1fUFJPR19BUicgaW4gJ2NvbmZpZ3VyZS5hYycKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMzQsNiArMzQsMTAgQEAgQUNfU1VCU1QoTFRfQ1VSUkVOVCwgMTcpCisgQUNfU1VCU1QoTFRfUkVWSVNJT04sIDcpCisgQUNfU1VCU1QoTFRfQUdFLCA2KQorIAorKyMgYXV0b21ha2UgMS4xMiBzZWVtcyB0byByZXF1aXJlIHRoaXMsIGJ1dCBhdXRvbWFrZSAxLjExIGRvZXNuJ3QgcmVjb2duaXplIGl0CisrbTRfcGF0dGVybl9hbGxvdyhbQU1fUFJPR19BUl0pCisrQU1fUFJPR19BUgorKworIEFDX1BST0dfQ0MKKyBnbF9FQVJMWQorIGxnbF9FQVJMWQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8wLjYuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzAuNi4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGYxZDA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8wLjYuMTQuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9pZG5hLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0xODttZDU9MTMzNmU4NDhjYTdiOGUyNTc2N2MzYzdlOGZhMzhhODkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2lkbi5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTU2Yzg5ZTM1OTY1MmE3MWNkYTEyOGQ3NWYwZmZkYWM0IgorUFIgPSAicjEiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICJodHRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvbGliaWRuLyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNDBmMDEyYTQ1ZmViNTYxNjg4NTM5OThiYjg3YWQ0ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODkxMGMyYWQ2NjRiZGY0ZWVkMmMyZmZmODhlMjRmODg4MjYzNmVjOWQyNjY2OTM2NmZmMDNiNDY5YzA1YWUzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIHRoaXMgdmVyc2lvbiBvZiBsaWJpZG4gY29waWVzIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmcm9tIAorCSMgYXV0b2NvbmYgQ1ZTIGJlY2F1c2UgYXRtIHRoZSBhdXRvY29uZiBpdCB1c2VzIGlzIGEgYml0IG9sZAorCSMgbm93IHdpdGggY3Jvc3MgYXV0b3Rvb2wsIHRoYXQgbWFjcm8gaXMgYWxyZWFkeSB0aGVyZSBhbmQgdGhpcworCSMgbG9jYWwgZGVmaW5pdGlvbiBjYXVzZXMgY2lyY3VsYXIgZGVwZW5kZW5jeS4gQWN0dWFsbHkgQUNfR05VX1NPVVJDRQorCSMgaXMgaWRlbnRpY2FsIHRvIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4gU28gcmVtb3ZlIGFsbCBsb2NhbAorCSMgcmVmZXJlbmNlcyB0byB0aGUgbGF0dGVyIGhlcmUuCisJc2VkIC1pIC1lICIvQUNfUkVRVUlSRShcW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OUy9kIiAke1N9L2xpYi9nbC9tNC9nbnVsaWItY29tcC5tNAorCXJtIC1mICR7U30vbGliL2dsL200L2V4dGVuc2lvbnMubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vTGliaWRuLmRsbAorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8xLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzQ3NDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzAuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiKExHUEx2Mi4xKyB8IExHUEx2MykgJiBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZjRiZTQ3OTQwYTkxZWU2OTU1NmY1ZjcxZWVkNGFlYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYyO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2lkbmEuaDtlbmRsaW5lPTIxO21kNT03YzBiMzgyOGQxYjE1MzY2M2JlOWEwNGFkNGY3OTc1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaWRuLmM7ZW5kbGluZT0yMDttZDU9ZjQyMzVmMmEyY2IyYjY1Nzg2YjI5NzlmYjNjZjdmYmYiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYmlkbi8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImIxN2VkYzg1NTFjZDMxY2M1ZjE0YzgyYTlkYWJmNThlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM5YjlmYzk0ZDc0MDgxYzE4NTc1N2IxMmUwODkxY2U1YTIyZGI1NTI2OGU3ZDFiYjI0NTMzZmY0NDMyZWIwNTMiCisKKyMgY29tbWFuZCB0b29sIGlzIHVuZGVyIEdQTHYzKywgd2hpbGUgbGliaWRuIGl0c2VsZiBpcyB1bmRlciBMR1BMdjIuMSsgb3IgTEdQTHYzCisjIHNvIHBhY2thZ2UgY29tbWFuZCBpbnRvIGEgc2VwYXJhdGUgcGFja2FnZQorUEFDS0FHRVMgPSsgImlkbiIKK0ZJTEVTX2lkbiA9ICIke2JpbmRpcn0vKiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jc2hhcnAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvbGlidGlycGMtMC4yLjEtZm9ydGlmeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3ODVkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRml4IGEgcG9zc2libGUgb3ZlcmZsb3cgKHJlcG9ydGVkIGJ5IF9GT1JUSUZZX1NPVVJDRT0yKQorCitQb3J0ZWQgZnJvbSBHZW50b28KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJ0aXJwYy0wLjIuMS9zcmMvZ2V0cnBjcG9ydC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidGlycGMtMC4yLjEub3JpZy9zcmMvZ2V0cnBjcG9ydC5jCisrKysgbGlidGlycGMtMC4yLjEvc3JjL2dldHJwY3BvcnQuYworQEAgLTU0LDExICs1NCwxMSBAQCBnZXRycGNwb3J0KGhvc3QsIHByb2dudW0sIHZlcnNudW0sIHByb3RvCisgCisgCWlmICgoaHAgPSBnZXRob3N0YnluYW1lKGhvc3QpKSA9PSBOVUxMKQorIAkJcmV0dXJuICgwKTsKKysJaWYgKGhwLT5oX2xlbmd0aCAhPSBzaXplb2YoYWRkci5zaW5fYWRkci5zX2FkZHIpKQorKwkJcmV0dXJuICgwKTsKKyAJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworIAlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworIAlhZGRyLnNpbl9wb3J0ID0gIDA7CistCWlmIChocC0+aF9sZW5ndGggPiBzaXplb2YoYWRkcikpCistCSAgaHAtPmhfbGVuZ3RoID0gc2l6ZW9mKGFkZHIpOworIAltZW1jcHkoJmFkZHIuc2luX2FkZHIuc19hZGRyLCBocC0+aF9hZGRyLCAoc2l6ZV90KWhwLT5oX2xlbmd0aCk7CisgCS8qIEluY29uc2lzdGVudCBpbnRlcmZhY2VzIG5lZWQgY2FzdHMhIDotKCAqLworIAlyZXR1cm4gKHBtYXBfZ2V0cG9ydCgmYWRkciwgKHVfbG9uZylwcm9nbnVtLCAodV9sb25nKXZlcnNudW0sIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwYy9yZW1vdmUtZGVzLXVjbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDAzMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAordWNsaWJjIGRvZXMgbm90IHByb3ZpZGUgZGVzIGZ1bmN0aW9uYWxpdHkgdW5saWtlIGVnbGliYyBzbyBsZXRzIGRpc2FibGUgc3NsIHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGlidGlycGMtMC4yLjMvc3JjL3JwY19zb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL3JwY19zb2MuYwkyMDEzLTAzLTEwIDE2OjAwOjUxLjM1NTI4MjE1MyAtMDcwMAorKysrIGxpYnRpcnBjLTAuMi4zL3NyYy9ycGNfc29jLmMJMjAxMy0wMy0xMCAxNjowMDo1MS43MDMyODIxNDggLTA3MDAKK0BAIC01MjAsNiArNTIwLDcgQEAKKyAJICAgIChyZXN1bHRwcm9jX3QpIHJwY193cmFwX2JjYXN0LCAidWRwIik7CisgfQorIAorKyNpZiAwCisgLyoKKyAgKiBDcmVhdGUgdGhlIGNsaWVudCBkZXMgYXV0aGVudGljYXRpb24gb2JqZWN0LiBPYnNvbGV0ZWQgYnkKKyAgKiBhdXRoZGVzX3NlY2NyZWF0ZSgpLgorQEAgLTU1MSw2ICs1NTIsNyBAQAorIAlkdW1teSA9IGF1dGhkZXNfc2VjY3JlYXRlKHNlcnZlcm5hbWUsIHdpbmRvdywgTlVMTCwgY2tleSk7CisgCXJldHVybiAoZHVtbXkpOworIH0KKysjZW5kaWYKKyAKKyAvKgorICAqIENyZWF0ZSBhIGNsaWVudCBoYW5kbGUgZm9yIGEgdW5peCBjb25uZWN0aW9uLiBPYnNvbGV0ZWQgYnkgY2xudF92Y19jcmVhdGUoKQorSW5kZXg6IGxpYnRpcnBjLTAuMi4zL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuMzU1MjgyMTUzIC0wNzAwCisrKysgbGlidGlycGMtMC4yLjMvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuNzAzMjgyMTQ4IC0wNzAwCitAQCAtNTAsNyArNTAsNyBAQAorICAgICAgICAgcnBjX2NhbGxtc2cuYyBycGNfZ2VuZXJpYy5jIHJwY19zb2MuYyBycGNiX2NsbnQuYyBycGNiX3Byb3QuYyBcCisgICAgICAgICBycGNiX3N0X3hkci5jIHN2Yy5jIHN2Y19hdXRoLmMgc3ZjX2RnLmMgc3ZjX2F1dGhfdW5peC5jIHN2Y19hdXRoX25vbmUuYyBcCisgICAgICAgICBzdmNfZ2VuZXJpYy5jIHN2Y19yYXcuYyBzdmNfcnVuLmMgc3ZjX3NpbXBsZS5jIHN2Y192Yy5jIGdldHBlZXJlaWQuYyBcCistICAgICAgICBhdXRoX3RpbWUuYyBhdXRoX2Rlcy5jIGF1dGhkZXNfcHJvdC5jCisrICAgICAgICBhdXRoX3RpbWUuYworIAorICMjIFhEUgorIGxpYnRpcnBjX2xhX1NPVVJDRVMgKz0geGRyLmMgeGRyX3JlYy5jIHhkcl9hcnJheS5jIHhkcl9mbG9hdC5jIHhkcl9tZW0uYyB4ZHJfcmVmZXJlbmNlLmMgeGRyX3N0ZGlvLmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzAuMi41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGNfMC4yLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VkZjAwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzAuMi41LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiTGlidGlycGMgaXMgYSBwb3J0IG9mIFN1bnMgVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IHRvIExpbnV4IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnRpcnBjLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xODMwNzUmYXRpZD05MDM3ODQiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWY4MzVjY2U4ODUyNDgxZTRiMmJiYmRkMjNiNWU0N2YzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9uZXRuYW1lLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ZjhhOGNkMmNiMjVhYzVhYTE2NzY3MzY0ZmIwZTNjMjQiCisKK0RFUEVORFMgKz0gInh6LW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvbGlicnBjIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmJ6MjtuYW1lPWxpYnRpcnBjIFwKKyAgICAgICAgICAgJHtHRU5UT09fTUlSUk9SfS8ke0JQTn0tZ2xpYmMtbmZzLnRhci54ejtuYW1lPWdsaWJjLW5mcyBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2giCisKK1NSQ19VUklbbGlidGlycGMubWQ1c3VtXSA9ICI4Y2Q0MWE1ZWY1YTliNTBkMGZiNmFiYjk4YWYxNTM2OCIKK1NSQ19VUklbbGlidGlycGMuc2hhMjU2c3VtXSA9ICI2MmY5ZGU3YzJjODY4NmM1Njg3NTc3MzBlMWZlZjY2NTAyYTBlMDBkNmNhY2YzMzU0NmQwMjY3OTg0ZTAwMmRiIgorU1JDX1VSSVtnbGliYy1uZnMubWQ1c3VtXSA9ICI1YWU1MDBiOWQwYjZiNzJjYjg3NWJjMDQ5NDRiOTQ0NSIKK1NSQ19VUklbZ2xpYmMtbmZzLnNoYTI1NnN1bV0gPSAiMjY3N2NmZWRmNjI2ZjNmNWE4ZjZlNTA3YWVkNWJiOGY3OWE3NDUzYjU4OWQ2ODRkYmJjMDg2ZTc1NTE3MGQ4MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3NzYXBpIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIGNwIC1yICR7U30vLi4vdGlycGMgJHtTfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgY2hvd24gcm9vdDpyb290ICR7RH0ke3N5c2NvbmZkaXJ9L25ldGNvbmZpZworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ1c2VyL2xpYnVzZXJfMC42Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGVkNDU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJ1c2VyIGFuZCBncm91cCBhY2NvdW50IGFkbWluaXN0cmF0aW9uIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgbGlidXNlciBsaWJyYXJ5IGltcGxlbWVudHMgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBtYW5pcHVsYXRpbmcgYW5kIGFkbWluaXN0ZXJpbmcgdXNlciBcCithbmQgZ3JvdXAgYWNjb3VudHMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGlidXNlci8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saWJ1c2VyL25ld3RpY2tldCIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXNlci5oO2VuZGxpbmU9MTk7bWQ1PTc2YjMwMWY2M2MzOWZhOTkyMDYyMzk1ZWZiZGM5NTU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NhbXBsZXMvdGVzdHVzZXIuYztlbmRsaW5lPTE5O21kNT0zYjg3ZmE2NjBmYTNmNGE2YmIzMWQ2MjRhZmUzMGJhMSIKKworU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL2kvbGlidXNlci9saWJ1c2VyLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYzZTVlNWM1NTFlOTlkYzUzMDJiNDBiODBiZDZkNGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1OGZmNGZhYmIwMWEyNTA0M2IxNDIxODVhMzNlZWVhOTYxMTA5ZGQ2MGQ0YjQwYjZhOWRmNGZhM2NhY2UyMGIiCisKK0RFUEVORFMgPSAicG9wdCBsaWJwYW0gZ2xpYi0yLjAgeHotbmF0aXZlIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGxpbnV4ZG9jLXRvb2xzLW5hdGl2ZSBweXRob24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIgcGtnY29uZmlnCisKK0VYVFJBX09FTUFLRSA9ICJQWVRIT05fQ1BQRkxBR1M9LUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWciCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkLzAwMDEtbW9kX2NnaS1idWZmZXJzLWRhdGEtd2l0aG91dC1ib3VuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkLzAwMDEtbW9kX2NnaS1idWZmZXJzLWRhdGEtd2l0aG91dC1ib3VuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWRmMTc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoCkBAIC0wLDAgKzEsMzg3IEBACitGcm9tIGU2Y2NiYWI1ZDQyYjExMGFjNGY2Y2UxZjcyY2IxZTljY2JlNDQwMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBUdWUsIDE2IEp1biAyMDE1IDE5OjAyOjM4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1vZF9jZ2kgYnVmZmVycyBkYXRhIHdpdGhvdXQgYm91bmQgc28gZml4IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvaXNzdWVzLzEyNjRdCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKworVXBkYXRlIGNvbnRleHQgZm9yIDEuNC4zNi4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYgfCAgIDggKysKKyBzcmMvbW9kX2NnaS5jICAgICAgICAgICAgfCAxODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mIGIvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCitpbmRleCA2MGIwYWUxLi45YzEwMWE3IDEwMDY0NAorLS0tIGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCisrKysgYi9kb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYKK0BAIC0zNzUsNiArMzc1LDE0IEBAIHNlcnZlci51cGxvYWQtZGlycyA9ICggIi92YXIvdG1wIiApCisgIyMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyMKKysjIworKyMjIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmhpZ2gtd2F0ZXJsZXZlbCAgICAgICAgPSAxMDI0MAorKyMjIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmxvdy13YXRlcmxldmVsICAgICAgICAgPSA1MTIwCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMjCitkaWZmIC0tZ2l0IGEvc3JjL21vZF9jZ2kuYyBiL3NyYy9tb2RfY2dpLmMKK2luZGV4IDAxYjE4NzcuLjdjNjdlYjUgMTAwNjQ0CistLS0gYS9zcmMvbW9kX2NnaS5jCisrKysgYi9zcmMvbW9kX2NnaS5jCitAQCAtMzgsNiArMzgsMTAgQEAKKyAKKyAjaW5jbHVkZSAidmVyc2lvbi5oIgorIAorKy8qIGZvciBvdXRwdXQgbG9ncyAqLworK2NoYXIgbXNnYnVmWzIwNDhdOworKworKworIGVudW0ge0VPTF9VTlNFVCwgRU9MX04sIEVPTF9STn07CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworQEAgLTUzLDkgKzU3LDE5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJc2l6ZV90IHNpemU7CisgfSBidWZmZXJfcGlkX3Q7CisgCisrc3RydWN0IGhhbmRsZXJfY3R4OworKworK3R5cGVkZWYgc3RydWN0IHsKKysJc3RydWN0IGhhbmRsZXJfY3R4ICoqaGN0eDsKKysJc2l6ZV90IHVzZWQ7CisrCXNpemVfdCBzaXplOworK30gYnVmZmVyX2N0eF90OworKworIHR5cGVkZWYgc3RydWN0IHsKKyAJYXJyYXkgKmNnaTsKKyAJdW5zaWduZWQgc2hvcnQgZXhlY3V0ZV94X29ubHk7CisrCXVuc2lnbmVkIGludCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCXVuc2lnbmVkIGludCBsb3dfd2F0ZXJsZXZlbDsgIC8qIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmICovCisgfSBwbHVnaW5fY29uZmlnOworIAorIHR5cGVkZWYgc3RydWN0IHsKK0BAIC02OCw5ICs4MiwxMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCXBsdWdpbl9jb25maWcgKipjb25maWdfc3RvcmFnZTsKKyAKKyAJcGx1Z2luX2NvbmZpZyBjb25mOworKworKwlidWZmZXJfY3R4X3QgY2dpX2N0eDsKKyB9IHBsdWdpbl9kYXRhOworIAorLXR5cGVkZWYgc3RydWN0IHsKKyt0eXBlZGVmIHN0cnVjdCBoYW5kbGVyX2N0eCB7CisgCXBpZF90IHBpZDsKKyAJaW50IGZkOworIAlpbnQgZmRlX25keDsgLyogaW5kZXggaW50byB0aGUgZmQtZXZlbnQgYnVmZmVyICovCitAQCAtNzgsMTEgKzk0LDE2IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJY29ubmVjdGlvbiAqcmVtb3RlX2Nvbm47ICAvKiBkdW1iIHBvaW50ZXIgKi8KKyAJcGx1Z2luX2RhdGEgKnBsdWdpbl9kYXRhOyAvKiBkdW1iIHBvaW50ZXIgKi8KKyAKKysJaW50IHRocm90dGxpbmc7ICAgICAgICAvKiAxPXdhaXRpbmcgZm9yIHNlbmRfcmF3IGJ1ZmZlciB0byBkcmFpbiAqLworKwlvZmZfdCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCW9mZl90IGxvd193YXRlcmxldmVsOyAgLyogbWluaW11bSBieXRlcyBpbiBzZW5kX3JhdyB0byBkaXNhYmxlIGJhY2tvZmYgKi8KKysJb2ZmX3QgYnl0ZXNfaW5fYnVmZmVyOworKworIAlidWZmZXIgKnJlc3BvbnNlOworIAlidWZmZXIgKnJlc3BvbnNlX2hlYWRlcjsKKyB9IGhhbmRsZXJfY3R4OworIAorLXN0YXRpYyBoYW5kbGVyX2N0eCAqIGNnaV9oYW5kbGVyX2N0eF9pbml0KHZvaWQpIHsKKytzdGF0aWMgaGFuZGxlcl9jdHggKiBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwbHVnaW5fZGF0YSAqcCkgeworIAloYW5kbGVyX2N0eCAqaGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmhjdHgpKTsKKyAKKyAJZm9yY2VfYXNzZXJ0KGhjdHgpOworQEAgLTkwLDEzICsxMTEsMjYgQEAgc3RhdGljIGhhbmRsZXJfY3R4ICogY2dpX2hhbmRsZXJfY3R4X2luaXQodm9pZCkgeworIAloY3R4LT5yZXNwb25zZSA9IGJ1ZmZlcl9pbml0KCk7CisgCWhjdHgtPnJlc3BvbnNlX2hlYWRlciA9IGJ1ZmZlcl9pbml0KCk7CisgCisrCWhjdHgtPnRocm90dGxpbmcgPSAwOworKwloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPSAob2ZmX3QpcC0+Y29uZi5oaWdoX3dhdGVybGV2ZWwgKiAxMDI0OworKwloY3R4LT5sb3dfd2F0ZXJsZXZlbCAgPSAob2ZmX3QpcC0+Y29uZi5sb3dfd2F0ZXJsZXZlbCAgKiAxMDI0OworKwlpZiAoaGN0eC0+bG93X3dhdGVybGV2ZWwgPj0gaGN0eC0+aGlnaF93YXRlcmxldmVsKSB7CisrCSAgICBoY3R4LT5sb3dfd2F0ZXJsZXZlbCA9IGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCAqIDMgLyA0OyAvKiA3NSUgKi8KKysJfQorKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSAwOworKworIAlyZXR1cm4gaGN0eDsKKyB9CisgCistc3RhdGljIHZvaWQgY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGFuZGxlcl9jdHggKmhjdHgpIHsKKytzdGF0aWMgdm9pZCBjZ2lfaGFuZGxlcl9jdHhfZnJlZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJYnVmZmVyX2ZyZWUoaGN0eC0+cmVzcG9uc2UpOworIAlidWZmZXJfZnJlZShoY3R4LT5yZXNwb25zZV9oZWFkZXIpOworIAorKwkvKiB0byBhdm9pZCBjb25mdXNpb24gKi8KKysJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJICAgIGxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCAidW50aHJvdHRsZWQiKTsKKysJfQorKworIAlmcmVlKGhjdHgpOworIH0KKyAKK0BAIC0xNTQsNiArMTg4LDggQEAgU0VUREVGQVVMVFNfRlVOQyhtb2RfZmFzdGNnaV9zZXRfZGVmYXVsdHMpIHsKKyAJY29uZmlnX3ZhbHVlc190IGN2W10gPSB7CisgCQl7ICJjZ2kuYXNzaWduIiwgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19BUlJBWSwgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAwICovCisgCQl7ICJjZ2kuZXhlY3V0ZS14LW9ubHkiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19CT09MRUFOLCBUX0NPTkZJR19TQ09QRV9DT05ORUNUSU9OIH0sICAgICAvKiAxICovCisrCQl7ICJjZ2kuaGlnaC13YXRlcmxldmVsIiwgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAyICovCisrCQl7ICJjZ2kubG93LXdhdGVybGV2ZWwiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAzICovCisgCQl7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19VTlNFVCwgVF9DT05GSUdfU0NPUEVfVU5TRVR9CisgCX07CisgCitAQCAtMTY5LDkgKzIwNSwxMyBAQCBTRVRERUZBVUxUU19GVU5DKG1vZF9mYXN0Y2dpX3NldF9kZWZhdWx0cykgeworIAorIAkJcy0+Y2dpICAgID0gYXJyYXlfaW5pdCgpOworIAkJcy0+ZXhlY3V0ZV94X29ubHkgPSAwOworKwkJcy0+aGlnaF93YXRlcmxldmVsID0gMDsgLyogMCA9PSBkaXNhYmxlZCAqLworKwkJcy0+bG93X3dhdGVybGV2ZWwgID0gMDsKKyAKKyAJCWN2WzBdLmRlc3RpbmF0aW9uID0gcy0+Y2dpOworIAkJY3ZbMV0uZGVzdGluYXRpb24gPSAmKHMtPmV4ZWN1dGVfeF9vbmx5KTsKKysJCWN2WzJdLmRlc3RpbmF0aW9uID0gJihzLT5oaWdoX3dhdGVybGV2ZWwpOworKwkJY3ZbM10uZGVzdGluYXRpb24gPSAmKHMtPmxvd193YXRlcmxldmVsKTsKKyAKKyAJCXAtPmNvbmZpZ19zdG9yYWdlW2ldID0gczsKKyAKK0BAIC0xODQsNiArMjI0LDUxIEBAIFNFVERFRkFVTFRTX0ZVTkMobW9kX2Zhc3RjZ2lfc2V0X2RlZmF1bHRzKSB7CisgfQorIAorIAorK3N0YXRpYyB2b2lkIGNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNodW5rcXVldWUgKmNxID0gaGN0eC0+cmVtb3RlX2Nvbm4tPndyaXRlX3F1ZXVlOworKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSBjaHVua3F1ZXVlX2xlbmd0aChjcSkgLSBjaHVua3F1ZXVlX3dyaXR0ZW4oY3EpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBjZ2lfdGhyb3R0bGluZ19jb250cm9sKHNlcnZlciAqc3J2LCBoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoY3R4KTsKKysKKysjaWZkZWYgREVCVUcKKysJc3ByaW50Zihtc2didWYsICJ0aHJvdHRsaW5nPSVkLCBjaGFycz0lbGx1LCBoaWdoPSVsbHUsIGxvdz0lbGx1IiwKKysJCWhjdHgtPnRocm90dGxpbmcsIGhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCWhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCwgaGN0eC0+bG93X3dhdGVybGV2ZWwpOworKwlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJIihkZWJ1ZykgdGhyb3R0bGluZyBjb250cm9sLCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCisrCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCQlzcHJpbnRmKG1zZ2J1ZiwgInRocm90dGxpbmc7IGNoYXJzIGluIHF1ZXVlPSVsbHUsIgorKwkJCSIgbG93LXdhdGVybGV2ZWw9JWxsdSwgaGlnaC13YXRlcmxldmVsPSVsbHUiLAorKwkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQloY3R4LT5sb3dfd2F0ZXJsZXZlbCwgaGN0eC0+aGlnaF93YXRlcmxldmVsKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCBtc2didWYpOworKwkJaWYgKGhjdHgtPmJ5dGVzX2luX2J1ZmZlciA8PSBoY3R4LT5sb3dfd2F0ZXJsZXZlbCkgeworKwkJCWZkZXZlbnRfZXZlbnRfc2V0KHNydi0+ZXYsICYoaGN0eC0+ZmRlX25keCksIGhjdHgtPmZkLCBGREVWRU5UX0lOKTsKKysJCQloY3R4LT50aHJvdHRsaW5nID0gMDsKKysJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgInVudGhyb3R0bGVkIik7CisrCQl9CisrCX0gZWxzZSB7CisrCQlpZiAoaGN0eC0+aGlnaF93YXRlcmxldmVsICE9IDAgJiYKKysJCQloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPD0gaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKSB7CisrCQkJZmRldmVudF9ldmVudF9kZWwoc3J2LT5ldiwgJihoY3R4LT5mZGVfbmR4KSwgaGN0eC0+ZmQpOworKwkJCWhjdHgtPnRocm90dGxpbmcgPSAxOworKwkJCXNwcmludGYobXNnYnVmLCAidGhyb3R0bGVkOyBjaGFycyBpbiBxdWV1ZT0lbGx1LCIKKysJCQkJIiBsb3ctd2F0ZXJsZXZlbD0lbGx1LCBoaWdoLXdhdGVybGV2ZWw9JWxsdSIsCisrCQkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQkJaGN0eC0+bG93X3dhdGVybGV2ZWwsIGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCk7CisrCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAicyIsIG1zZ2J1Zik7CisrCQl9CisrCX0KKyt9CisrCisrCisgc3RhdGljIGludCBjZ2lfcGlkX2FkZChzZXJ2ZXIgKnNydiwgcGx1Z2luX2RhdGEgKnAsIHBpZF90IHBpZCkgeworIAlpbnQgbSA9IC0xOworIAlzaXplX3QgaTsKK0BAIC0yMzAsNiArMzE1LDM5IEBAIHN0YXRpYyBpbnQgY2dpX3BpZF9kZWwoc2VydmVyICpzcnYsIHBsdWdpbl9kYXRhICpwLCBwaWRfdCBwaWQpIHsKKyAJcmV0dXJuIDA7CisgfQorIAorKworK3N0YXRpYyB2b2lkIGNnaV9jdHhfYWRkKHBsdWdpbl9kYXRhICpwLCBoYW5kbGVyX2N0eCAqaGN0eCkgeworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlpZiAoci0+c2l6ZSA9PSAwKSB7CisrCQlyLT5zaXplID0gMTY7CisrCQlyLT5oY3R4ID0gbWFsbG9jKHNpemVvZigqci0+aGN0eCkgKiByLT5zaXplKTsKKysJfSBlbHNlIGlmIChyLT51c2VkID09IHItPnNpemUpIHsKKysJCXItPnNpemUgKz0gMTY7CisrCQlyLT5oY3R4ID0gcmVhbGxvYyhyLT5oY3R4LCBzaXplb2YoKnItPmhjdHgpICogci0+c2l6ZSk7CisrCX0KKysKKysJci0+aGN0eFtyLT51c2VkKytdID0gaGN0eDsKKyt9CisrCisrc3RhdGljIHZvaWQgY2dpX2N0eF9kZWwocGx1Z2luX2RhdGEgKnAsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisrCXNpemVfdCBpOworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgci0+dXNlZDsgaSsrKSB7CisrCQlpZiAoci0+aGN0eFtpXSA9PSBoY3R4KSBicmVhazsKKysJfQorKworKwlpZiAoaSAhPSByLT51c2VkKSB7CisrCQkvKiBmb3VuZCAqLworKworKwkJaWYgKGkgIT0gci0+dXNlZCAtIDEpIHsKKysJCQlyLT5oY3R4W2ldID0gci0+aGN0eFtyLT51c2VkIC0gMV07CisrCQl9CisrCQlyLT51c2VkLS07CisrCX0KKyt9CisrCisgc3RhdGljIGludCBjZ2lfcmVzcG9uc2VfcGFyc2Uoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqaW4pIHsKKyAJY2hhciAqbnM7CisgCWNvbnN0IGNoYXIgKnM7CitAQCAtMzgwLDYgKzQ5OCwxNCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAKKyAJCWJ1ZmZlcl9jb21taXQoaGN0eC0+cmVzcG9uc2UsIG4pOworIAorKyNpZmRlZiBERUJVRworKwkJc3ByaW50Zihtc2didWYsICJuPSVkLCBieXRlc19vdXQ9JWxsdSwgYnl0ZXNfaW49JWxsdSIsIG4sCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19vdXQsCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbik7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJCSIoZGVidWcpIHJlYWQsIiwgbXNnYnVmKTsKKysjZW5kaWYKKysKKyAJCS8qIHNwbGl0IGhlYWRlciBmcm9tIGJvZHkgKi8KKyAKKyAJCWlmIChjb24tPmZpbGVfc3RhcnRlZCA9PSAwKSB7CitAQCAtNTAzLDcgKzYyOSwyMCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJCQl9CisgCQl9IGVsc2UgeworIAkJCWh0dHBfY2h1bmtfYXBwZW5kX2J1ZmZlcihzcnYsIGNvbiwgaGN0eC0+cmVzcG9uc2UpOworKyNpZmRlZiBERUJVRworKwkJCXNwcmludGYobXNnYnVmLCAibj0lZCwgYnl0ZXNfb3V0PSVsbHUsIGJ5dGVzX2luPSVsbHUsIGxpbWl0PSVsbHUiLCBuLAorKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWNvbi0+d3JpdGVfcXVldWUtPmJ5dGVzX291dCwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbiwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyloY3R4LT5oaWdoX3dhdGVybGV2ZWwpOworKwkJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywKKysJCQkJCSJzcyIsICIoZGVidWcpIGFwcGVuZCwiLCBtc2didWYpOworKyNlbmRpZgorIAkJCWpvYmxpc3RfYXBwZW5kKHNydiwgY29uKTsKKysKKysJCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCQkJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJCQkJcmV0dXJuIEZERVZFTlRfSEFORExFRF9OT1RfRklOSVNIRUQ7CisrCQkJfQorIAkJfQorIAorICNpZiAwCitAQCAtNTUzLDggKzY5Miw5IEBAIHN0YXRpYyBoYW5kbGVyX3QgY2dpX2Nvbm5lY3Rpb25fY2xvc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAorIAkvKiBpcyB0aGlzIGEgZ29vZCBpZGVhID8gKi8KKy0JY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CistCisrCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworKwkKKyAJLyogaWYgd2FpdHBpZCBoYXNuJ3QgYmVlbiBjYWxsZWQgYnkgcmVzcG9uc2UuYyB5ZXQsIGRvIGl0IGhlcmUgKi8KKyAJaWYgKHBpZCkgeworIAkJLyogY2hlY2sgaWYgdGhlIENHSS1zY3JpcHQgaXMgYWxyZWFkeSBnb25lICovCitAQCAtMTEwNSw3ICsxMjQ1LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAJCWNvbi0+bW9kZSA9IHAtPmlkOworIAkJYnVmZmVyX3Jlc2V0KGNvbi0+cGh5c2ljYWwucGF0aCk7CisgCistCQloY3R4ID0gY2dpX2hhbmRsZXJfY3R4X2luaXQoKTsKKysJCWhjdHggPSBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwKTsKKysJCWNnaV9jdHhfYWRkKHAsIGhjdHgpOworIAorIAkJaGN0eC0+cmVtb3RlX2Nvbm4gPSBjb247CisgCQloY3R4LT5wbHVnaW5fZGF0YSA9IHA7CitAQCAtMTExNCw2ICsxMjU1LDExIEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCQloY3R4LT5mZGVfbmR4ID0gLTE7CisgCisgCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gaGN0eDsKKysjaWZkZWYgREVCVUcKKysJCXNwcmludGYobXNnYnVmLCAiaGN0eD0lcCwgY29uPSVwIiwgKHZvaWQqKWhjdHgsICh2b2lkKiljb24pOworKwkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCQkiKGRlYnVnKSBoY3R4IGdlbmVyYXRlZCwgIiwgbXNnYnVmKTsKKysjZW5kaWYKKyAKKyAJCWZkZXZlbnRfcmVnaXN0ZXIoc3J2LT5ldiwgaGN0eC0+ZmQsIGNnaV9oYW5kbGVfZmRldmVudCwgaGN0eCk7CisgCQlmZGV2ZW50X2V2ZW50X3NldChzcnYtPmV2LCAmKGhjdHgtPmZkZV9uZHgpLCBoY3R4LT5mZCwgRkRFVkVOVF9JTik7CitAQCAtMTEyOCw3ICsxMjc0LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAKKyAJCQljbG9zZShoY3R4LT5mZCk7CisgCistCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CisrCQkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gTlVMTDsKKyAKK0BAIC0xMTUzLDYgKzEzMDAsOCBAQCBzdGF0aWMgaW50IG1vZF9jZ2lfcGF0Y2hfY29ubmVjdGlvbihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcAorIAorIAlQQVRDSChjZ2kpOworIAlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCVBBVENIKGhpZ2hfd2F0ZXJsZXZlbCk7CisrCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAKKyAJLyogc2tpcCB0aGUgZmlyc3QsIHRoZSBnbG9iYWwgY29udGV4dCAqLworIAlmb3IgKGkgPSAxOyBpIDwgc3J2LT5jb25maWdfY29udGV4dC0+dXNlZDsgaSsrKSB7CitAQCAtMTE3MCw2ICsxMzE5LDEwIEBAIHN0YXRpYyBpbnQgbW9kX2NnaV9wYXRjaF9jb25uZWN0aW9uKHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwCisgCQkJCVBBVENIKGNnaSk7CisgCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5leGVjdXRlLXgtb25seSIpKSkgeworIAkJCQlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5oaWdoLXdhdGVybGV2ZWwiKSkpIHsKKysJCQkJUEFUQ0goaGlnaF93YXRlcmxldmVsKTsKKysJCQl9IGVsc2UgaWYgKGJ1ZmZlcl9pc19lcXVhbF9zdHJpbmcoZHUtPmtleSwgQ09OU1RfU1RSX0xFTigiY2dpLmxvdy13YXRlcmxldmVsIikpKSB7CisrCQkJCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAJCQl9CisgCQl9CisgCX0KK0BAIC0xMjIyLDYgKzEzNzUsMjEgQEAgVVJJSEFORExFUl9GVU5DKGNnaV9pc19oYW5kbGVkKSB7CisgVFJJR0dFUl9GVU5DKGNnaV90cmlnZ2VyKSB7CisgCXBsdWdpbl9kYXRhICpwID0gcF9kOworIAlzaXplX3QgbmR4OworKworKwlmb3IgKG5keCA9IDA7IG5keCA8IHAtPmNnaV9jdHgudXNlZDsgbmR4KyspIHsKKysJCWhhbmRsZXJfY3R4ICpoY3R4ID0gcC0+Y2dpX2N0eC5oY3R4W25keF07CisrI2lmZGVmIERFQlVHCisrCQljb25uZWN0aW9uICpjb24gPSBoY3R4LT5yZW1vdGVfY29ubjsKKysJCisrCQlzcHJpbnRmKG1zZ2J1ZiwgImhjdHg9JXAsIGNvbj0lcCwgYnl0ZXNfaW5fYnVmZmVyPSVsbHUiLAorKwkJCSh2b2lkKiloY3R4LCAodm9pZCopY29uLAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInNzIiwKKysJCQkJIihkZWJ1ZykgZm91bmQgdXNpbmcgY3R4LCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCX0KKysKKyAJLyogdGhlIHRyaWdnZXIgaGFuZGxlIG9ubHkgY2FyZXMgYWJvdXQgbG9uZWx5IFBJRCB3aGljaCB3ZSBoYXZlIHRvIHdhaXQgZm9yICovCisgI2lmbmRlZiBfX1dJTjMyCisgCitAQCAtMTMzMCw3ICsxNDk4LDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCitAQCAtMTM2Miw3ICsxNTMxLDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCQlyZXR1cm4gSEFORExFUl9GSU5JU0hFRDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2luZGV4Lmh0bWwubGlnaHR0cGQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjFjMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkCkBAIC0wLDAgKzEgQEAKKzxodG1sPjxib2R5PjxoMT5JdCB3b3JrcyE8L2gxPjwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODlhNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9saWdodHRwZAorTkFNRT1saWdodHRwZAorREVTQz0iTGlnaHR0cGQgV2ViIFNlcnZlciIKK09QVFM9Ii1mIC9ldGMvbGlnaHR0cGQuY29uZiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwlzbGVlcCAxCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTg0MDJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZgpAQCAtMCwwICsxLDMzMSBAQAorIyBsaWdodHRwZCBjb25maWd1cmF0aW9uIGZpbGUKKyMKKyMgdXNlIGl0IGFzIGEgYmFzZSBmb3IgbGlnaHR0cGQgMS4wLjAgYW5kIGFib3ZlCisjCisjICRJZDogbGlnaHR0cGQuY29uZix2IDEuNyAyMDA0LzExLzAzIDIyOjI2OjA1IHdlaWdvbiBFeHAgJAorCisjIyMjIyMjIyMjIyMgT3B0aW9ucyB5b3UgcmVhbGx5IGhhdmUgdG8gdGFrZSBjYXJlIG9mICMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIG1vZHVsZXMgdG8gbG9hZAorIyBhdCBsZWFzdCBtb2RfYWNjZXNzIGFuZCBtb2RfYWNjZXNzbG9nIHNob3VsZCBiZSBsb2FkZWQKKyMgYWxsIG90aGVyIG1vZHVsZSBzaG91bGQgb25seSBiZSBsb2FkZWQgaWYgcmVhbGx5IG5lY2Nlc2FyeQorIyAtIHNhdmVzIHNvbWUgdGltZQorIyAtIHNhdmVzIG1lbW9yeQorc2VydmVyLm1vZHVsZXMgICAgICAgICAgICAgID0gKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3Jld3JpdGUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3JlZGlyZWN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hbGlhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWNjZXNzIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9jbWwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3RyaWdnZXJfYjRfZGwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2F1dGgiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3N0YXR1cyIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2V0ZW52IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9mYXN0Y2dpIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9wcm94eSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2ltcGxlX3Zob3N0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ldmhvc3QiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3VzZXJkaXIiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NnaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY29tcHJlc3MiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NzaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfdXNlcnRyYWNrIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9leHBpcmUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NlY2Rvd25sb2FkIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ycmR0b29sIiwKKyMJCQkJIm1vZF93ZWJkYXYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2FjY2Vzc2xvZyIgKQorCisjIyBhIHN0YXRpYyBkb2N1bWVudC1yb290LCBmb3IgdmlydHVhbC1ob3N0aW5nIHRha2UgbG9vayBhdCB0aGUKKyMjIHNlcnZlci52aXJ0dWFsLSogb3B0aW9ucworc2VydmVyLmRvY3VtZW50LXJvb3QgICAgICAgID0gIi93d3cvcGFnZXMvIgorCisjIyB3aGVyZSB0byBzZW5kIGVycm9yLW1lc3NhZ2VzIHRvCitzZXJ2ZXIuZXJyb3Jsb2cgICAgICAgICAgICAgPSAiL3d3dy9sb2dzL2xpZ2h0dHBkLmVycm9yLmxvZyIKKworIyBmaWxlcyB0byBjaGVjayBmb3IgaWYgLi4uLyBpcyByZXF1ZXN0ZWQKK2luZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICggImluZGV4LnBocCIsICJpbmRleC5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4Lmh0bSIsICJkZWZhdWx0Lmh0bSIgKQorCisjIyBzZXQgdGhlIGV2ZW50LWhhbmRsZXIgKHJlYWQgdGhlIHBlcmZvcm1hbmNlIHNlY3Rpb24gaW4gdGhlIG1hbnVhbCkKKyMgc2VydmVyLmV2ZW50LWhhbmRsZXIgPSAiZnJlZWJzZC1rcXVldWUiICMgbmVlZGVkIG9uIE9TIFgKKworIyBtaW1ldHlwZSBtYXBwaW5nCittaW1ldHlwZS5hc3NpZ24gICAgICAgICAgICAgPSAoCisgICIucGRmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZGYiLAorICAiLnNpZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZSIsCisgICIuc3BsIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2giLAorICAiLmNsYXNzIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKKyAgIi5wcyIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLAorICAiLnRvcnJlbnQiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iaXR0b3JyZW50IiwKKyAgIi5kdmkiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZHZpIiwKKyAgIi5neiIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZ3ppcCIsCisgICIucGFjIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWciLAorICAiLnN3ZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLAorICAiLnRhci5neiIgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRneiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRhciIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10YXIiLAorICAiLnppcCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vemlwIiwKKyAgIi5tcDMiICAgICAgICAgID0+ICAgICAgImF1ZGlvL21wZWciLAorICAiLm0zdSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcGVndXJsIiwKKyAgIi53bWEiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd21hIiwKKyAgIi53YXgiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd2F4IiwKKyAgIi5vZ2ciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29nZyIsCisgICIud2F2IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LXdhdiIsCisgICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAorICAiLmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIuanBlZyIgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3BuZyIsCisgICIueGJtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhiaXRtYXAiLAorICAiLnhwbSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14cGl4bWFwIiwKKyAgIi54d2QiICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHdpbmRvd2R1bXAiLAorICAiLmNzcyIgICAgICAgICAgPT4gICAgICAidGV4dC9jc3MiLAorICAiLmh0bWwiICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5odG0iICAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuanMiICAgICAgICAgICA9PiAgICAgICJ0ZXh0L2phdmFzY3JpcHQiLAorICAiLmFzYyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuYyIgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jcHAiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY29uZiIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50ZXh0IiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIueG1sIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIubXBlZyIgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKyAgIi5tcGciICAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorICAiLm1vdiIgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgIi5xdCIgICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICIuYXZpIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zdmlkZW8iLAorICAiLmFzZiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLmFzeCIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLndtdiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy13bXYiLAorICAiLmJ6MiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwIiwKKyAgIi50YnoiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisgICIudGFyLmJ6MiIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiCisgKQorCisjIFVzZSB0aGUgIkNvbnRlbnQtVHlwZSIgZXh0ZW5kZWQgYXR0cmlidXRlIHRvIG9idGFpbiBtaW1lIHR5cGUgaWYgcG9zc2libGUKKyNtaW1ldHlwZS51c2UteGF0dHIgICAgICAgID0gImVuYWJsZSIKKworCisjIyBzZW5kIGEgZGlmZmVyZW50IFNlcnZlcjogaGVhZGVyCisjIyBiZSBuaWNlIGFuZCBrZWVwIGl0IGF0IGxpZ2h0dHBkCisjIHNlcnZlci50YWcgICAgICAgICAgICAgICAgID0gImxpZ2h0dHBkIgorCisjIyMjIGFjY2Vzc2xvZyBtb2R1bGUKK2FjY2Vzc2xvZy5maWxlbmFtZSAgICAgICAgICA9ICIvd3d3L2xvZ3MvYWNjZXNzLmxvZyIKK2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKworCisKKworIyMgZGVueSBhY2Nlc3MgdGhlIGZpbGUtZXh0ZW5zaW9ucworIworIyB+ICAgIGlzIGZvciBiYWNrdXBmaWxlcyBmcm9tIHZpLCBlbWFjcywgam9lLCAuLi4KKyMgLmluYyBpcyBvZnRlbiB1c2VkIGZvciBjb2RlIGluY2x1ZGVzIHdoaWNoIHNob3VsZCBpbiBnZW5lcmFsIG5vdCBiZSBwYXJ0CisjICAgICAgb2YgdGhlIGRvY3VtZW50LXJvb3QKK3VybC5hY2Nlc3MtZGVueSAgICAgICAgICAgICA9ICggIn4iLCAiLmluYyIgKQorCiskSFRUUFsidXJsIl0gPX4gIlwucGRmJCIgeworICBzZXJ2ZXIucmFuZ2UtcmVxdWVzdHMgPSAiZGlzYWJsZSIKK30KKworIyMKKyMgd2hpY2ggZXh0ZW5zaW9ucyBzaG91bGQgbm90IGJlIGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKKyMKKyMgLnBocCwgLnBsLCAuZmNnaSBhcmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9yIG1vZF9jZ2kKK3N0YXRpYy1maWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBsIiwgIi5mY2dpIiApCisKKyMjIyMjIyMjIyBPcHRpb25zIHRoYXQgYXJlIGdvb2QgdG8gYmUgYnV0IG5vdCBuZWNjZXNhcnkgdG8gYmUgY2hhbmdlZCAjIyMjIyMjCisKKyMjIGJpbmQgdG8gcG9ydCAoZGVmYXVsdDogODApCisjc2VydmVyLnBvcnQgICAgICAgICAgICAgICAgPSA4MQorCisjIyBiaW5kIHRvIGxvY2FsaG9zdCAoZGVmYXVsdDogYWxsIGludGVyZmFjZXMpCisjc2VydmVyLmJpbmQgICAgICAgICAgICAgICAgPSAiZ3Jpc3UuaG9tZS5rbmVzY2hrZS5kZSIKKworIyMgZXJyb3ItaGFuZGxlciBmb3Igc3RhdHVzIDQwNAorI3NlcnZlci5lcnJvci1oYW5kbGVyLTQwNCAgID0gIi9lcnJvci1oYW5kbGVyLmh0bWwiCisjc2VydmVyLmVycm9yLWhhbmRsZXItNDA0ICAgPSAiL2Vycm9yLWhhbmRsZXIucGhwIgorCisjIyB0byBoZWxwIHRoZSByYy5zY3JpcHRzCisjc2VydmVyLnBpZC1maWxlICAgICAgICAgICAgPSAiL3Zhci9ydW4vbGlnaHR0cGQucGlkIgorCisKKyMjIyMjIyB2aXJ0dWFsIGhvc3RzCisjIworIyMgIElmIHlvdSB3YW50IG5hbWUtYmFzZWQgdmlydHVhbCBob3N0aW5nIGFkZCB0aGUgbmV4dCB0aHJlZSBzZXR0aW5ncyBhbmQgbG9hZAorIyMgIG1vZF9zaW1wbGVfdmhvc3QKKyMjCisjIyBkb2N1bWVudC1yb290ID0KKyMjICAgdmlydHVhbC1zZXJ2ZXItcm9vdCArIHZpcnR1YWwtc2VydmVyLWRlZmF1bHQtaG9zdCArIHZpcnR1YWwtc2VydmVyLWRvY3Jvb3QKKyMjIG9yCisjIyAgIHZpcnR1YWwtc2VydmVyLXJvb3QgKyBodHRwLWhvc3QgKyB2aXJ0dWFsLXNlcnZlci1kb2Nyb290CisjIworI3NpbXBsZS12aG9zdC5zZXJ2ZXItcm9vdCAgID0gIi9ob21lL3dlaWdvbi93d3dyb290L3NlcnZlcnMvIgorI3NpbXBsZS12aG9zdC5kZWZhdWx0LWhvc3QgID0gImdyaXN1LmhvbWUua25lc2Noa2UuZGUiCisjc2ltcGxlLXZob3N0LmRvY3VtZW50LXJvb3QgPSAiL3BhZ2VzLyIKKworCisjIworIyMgRm9ybWF0OiA8ZXJyb3JmaWxlLXByZWZpeD48c3RhdHVzLWNvZGU+Lmh0bWwKKyMjIC0+IC4uLi4vc3RhdHVzLTQwNC5odG1sIGZvciAnRmlsZSBub3QgZm91bmQnCisjc2VydmVyLmVycm9yZmlsZS1wcmVmaXggICAgPSAiL2hvbWUvd2VpZ29uL3Byb2plY3RzL2xpZ2h0dHBkL2RvYy9zdGF0dXMtIgorCisjIyB2aXJ0dWFsIGRpcmVjdG9yeSBsaXN0aW5ncworI2Rpci1saXN0aW5nLmFjdGl2YXRlICAgICAgID0gImVuYWJsZSIKKworIyMgZW5hYmxlIGRlYnVnZ2luZworI2RlYnVnLmxvZy1yZXF1ZXN0LWhlYWRlciAgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVzcG9uc2UtaGVhZGVyICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlcXVlc3QtaGFuZGxpbmcgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1maWxlLW5vdC1mb3VuZCAgID0gImVuYWJsZSIKKworIyMjIG9ubHkgcm9vdCBjYW4gdXNlIHRoZXNlIG9wdGlvbnMKKyMKKyMgY2hyb290KCkgdG8gZGlyZWN0b3J5IChkZWZhdWx0OiBubyBjaHJvb3QoKSApCisjc2VydmVyLmNocm9vdCAgICAgICAgICAgICAgPSAiLyIKKworIyMgY2hhbmdlIHVpZCB0byA8dWlkPiAoZGVmYXVsdDogZG9uJ3QgY2FyZSkKKyNzZXJ2ZXIudXNlcm5hbWUgICAgICAgICAgICA9ICJ3d3dydW4iCisKKyMjIGNoYW5nZSB1aWQgdG8gPHVpZD4gKGRlZmF1bHQ6IGRvbid0IGNhcmUpCisjc2VydmVyLmdyb3VwbmFtZSAgICAgICAgICAgPSAid3d3cnVuIgorCisjIyMjIGNvbXByZXNzIG1vZHVsZQorI2NvbXByZXNzLmNhY2hlLWRpciAgICAgICAgID0gIi90bXAvbGlnaHR0cGQvY2FjaGUvY29tcHJlc3MvIgorI2NvbXByZXNzLmZpbGV0eXBlICAgICAgICAgID0gKCJ0ZXh0L3BsYWluIiwgInRleHQvaHRtbCIpCisKKyMjIyMgcHJveHkgbW9kdWxlCisjIyByZWFkIHByb3h5LnR4dCBmb3IgbW9yZSBpbmZvCisjcHJveHkuc2VydmVyICAgICAgICAgICAgICAgPSAoICIucGhwIiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICJsb2NhbGhvc3QiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3QiID0+ICIxOTIuMTY4LjAuMTAxIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3J0IiA9PiA4MAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisjIyMjIGZhc3RjZ2kgbW9kdWxlCisjIyByZWFkIGZhc3RjZ2kudHh0IGZvciBtb3JlIGluZm8KKyMjIGZvciBQSFAgZG9uJ3QgZm9yZ2V0IHRvIHNldCBjZ2kuZml4X3BhdGhpbmZvID0gMSBpbiB0aGUgcGhwLmluaQorI2Zhc3RjZ2kuc2VydmVyICAgICAgICAgICAgID0gKCAiLnBocCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAibG9jYWxob3N0IiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQiID0+ICIvdG1wL3BocC1mYXN0Y2dpLnNvY2tldCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmluLXBhdGgiID0+ICIvdXNyL2xvY2FsL2Jpbi9waHAiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyMjIyBDR0kgbW9kdWxlCisjY2dpLmFzc2lnbiAgICAgICAgICAgICAgICAgPSAoICIucGwiICA9PiAiL3Vzci9iaW4vcGVybCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuY2dpIiA9PiAiL3Vzci9iaW4vcGVybCIgKQorIworCisjIyMjIFNTTCBlbmdpbmUKKyNzc2wuZW5naW5lICAgICAgICAgICAgICAgICA9ICJlbmFibGUiCisjc3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBlbSIKKworIyMjIyBzdGF0dXMgbW9kdWxlCisjc3RhdHVzLnN0YXR1cy11cmwgICAgICAgICAgPSAiL3NlcnZlci1zdGF0dXMiCisjc3RhdHVzLmNvbmZpZy11cmwgICAgICAgICAgPSAiL3NlcnZlci1jb25maWciCisKKyMjIyMgYXV0aCBtb2R1bGUKKyMjIHJlYWQgYXV0aGVudGljYXRpb24udHh0IGZvciBtb3JlIGluZm8KKyNhdXRoLmJhY2tlbmQgICAgICAgICAgICAgICA9ICJwbGFpbiIKKyNhdXRoLmJhY2tlbmQucGxhaW4udXNlcmZpbGUgPSAibGlnaHR0cGQudXNlciIKKyNhdXRoLmJhY2tlbmQucGxhaW4uZ3JvdXBmaWxlID0gImxpZ2h0dHBkLmdyb3VwIgorCisjYXV0aC5iYWNrZW5kLmxkYXAuaG9zdG5hbWUgPSAibG9jYWxob3N0IgorI2F1dGguYmFja2VuZC5sZGFwLmJhc2UtZG4gID0gImRjPW15LWRvbWFpbixkYz1jb20iCisjYXV0aC5iYWNrZW5kLmxkYXAuZmlsdGVyICAgPSAiKHVpZD0kKSIKKworI2F1dGgucmVxdWlyZSAgICAgICAgICAgICAgID0gKCAiL3NlcnZlci1zdGF0dXMiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIiAgPT4gImRpZ2VzdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxtIiAgID0+ICJkb3dubG9hZCBhcmNoaXYiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlIiA9PiAidXNlcj1qYW4iCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvc2VydmVyLWNvbmZpZyIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRob2QiICA9PiAiZGlnZXN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhbG0iICAgPT4gImRvd25sb2FkIGFyY2hpdiIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmUiID0+ICJ2YWxpZC11c2VyIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyMjIyMgdXJsIGhhbmRsaW5nIG1vZHVsZXMgKHJld3JpdGUsIHJlZGlyZWN0LCBhY2Nlc3MpCisjdXJsLnJld3JpdGUgICAgICAgICAgICAgICAgPSAoICJeLyQiICAgICAgICAgICAgID0+ICIvc2VydmVyLXN0YXR1cyIgKQorI3VybC5yZWRpcmVjdCAgICAgICAgICAgICAgID0gKCAiXi93aXNobGlzdC8oLispIiA9PiAiaHR0cDovL3d3dy4xMjMub3JnLyQxIiApCisKKyMjIyMgYm90aCByZXdyaXRlL3JlZGlyZWN0IHN1cHBvcnQgYmFjayByZWZlcmVuY2UgdG8gcmVnZXggY29uZGl0aW9uYWwgdXNpbmcgJW4KKyMkSFRUUFsiaG9zdCJdID1+ICJed3d3XC4oLiopIiB7CisjICB1cmwucmVkaXJlY3QgICAgICAgICAgICA9ICggIl4vKC4qKSIgPT4gImh0dHA6Ly8lMS8kMSIgKQorI30KKworIworIyBkZWZpbmUgYSBwYXR0ZXJuIGZvciB0aGUgaG9zdCB1cmwgZmluZGluZworIyAlJSA9PiAlIHNpZ24KKyMgJTAgPT4gZG9tYWluIG5hbWUgKyB0bGQKKyMgJTEgPT4gdGxkCisjICUyID0+IGRvbWFpbiBuYW1lIHdpdGhvdXQgdGxkCisjICUzID0+IHN1YmRvbWFpbiAxIG5hbWUKKyMgJTQgPT4gc3ViZG9tYWluIDIgbmFtZQorIworI2V2aG9zdC5wYXRoLXBhdHRlcm4gICAgICAgID0gIi9ob21lL3N0b3JhZ2UvZGV2L3d3dy8lMy9odGRvY3MvIgorCisjIyMjIGV4cGlyZSBtb2R1bGUKKyNleHBpcmUudXJsICAgICAgICAgICAgICAgICA9ICggIi9idWdneS8iID0+ICJhY2Nlc3MgMiBob3VycyIsICIvYXNkaGFzLyIgPT4gImFjY2VzcyBwbHVzIDEgc2Vjb25kcyAyIG1pbnV0ZXMiKQorCisjIyMjIHNzaQorI3NzaS5leHRlbnNpb24gICAgICAgICAgICAgID0gKCAiLnNodG1sIiApCisKKyMjIyMgcnJkdG9vbAorI3JyZHRvb2wuYmluYXJ5ICAgICAgICAgICAgID0gIi91c3IvYmluL3JyZHRvb2wiCisjcnJkdG9vbC5kYi1uYW1lICAgICAgICAgICAgPSAiL3Zhci93d3cvbGlnaHR0cGQucnJkIgorCisjIyMjIHNldGVudgorI3NldGVudi5hZGQtcmVxdWVzdC1oZWFkZXIgID0gKCAiVFJBVl9FTlYiID0+ICJteXNxbDovL3VzZXJAaG9zdC9kYiIgKQorI3NldGVudi5hZGQtcmVzcG9uc2UtaGVhZGVyID0gKCAiWC1TZWNyZXQtTWVzc2FnZSIgPT4gIjQyIiApCisKKyMjIGZvciBtb2RfdHJpZ2dlcl9iNF9kbAorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5nZGJtLWZpbGVuYW1lID0gIi9ob21lL3dlaWdvbi90ZXN0YmFzZS90cmlnZ2VyLmRiIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5tZW1jYWNoZS1ob3N0cyA9ICggIjEyNy4wLjAuMToxMTIxMSIgKQorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC50cmlnZ2VyLXVybCA9ICJeL3RyaWdnZXIvIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5kb3dubG9hZC11cmwgPSAiXi9kb3dubG9hZC8iCisjIHRyaWdnZXItYmVmb3JlLWRvd25sb2FkLmRlbnktdXJsID0gImh0dHA6Ly8xMjcuMC4wLjEvaW5kZXguaHRtbCIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQudHJpZ2dlci10aW1lb3V0ID0gMTAKKworIyMgZm9yIG1vZF9jbWwKKyMjIGRvbid0IGZvcmdldCB0byBhZGQgaW5kZXguY21sIHRvIHNlcnZlci5pbmRleGZpbGVzCisjIGNtbC5leHRlbnNpb24gICAgICAgICAgICAgICA9ICIuY21sIgorIyBjbWwubWVtY2FjaGUtaG9zdHMgICAgICAgICAgPSAoICIxMjcuMC4wLjE6MTEyMTEiICkKKworIyMjIyB2YXJpYWJsZSB1c2FnZToKKyMjIHZhcmlhYmxlIG5hbWUgd2l0aG91dCAiLiIgaXMgYXV0byBwcmVmaXhlZCBieSAidmFyLiIgYW5kIGJlY29tZXMgInZhci5iYXIiCisjYmFyID0gMQorI3Zhci5teXN0cmluZyA9ICJmb28iCisKKyMjIGludGVnZXIgYWRkCisjYmFyICs9IDEKKyMjIHN0cmluZyBjb25jYXQsIHdpdGggaW50ZWdlciBjYXN0IGFzIHN0cmluZywgcmVzdWx0OiAid3d3LmZvbzEuY29tIgorI3NlcnZlci5uYW1lID0gInd3dy4iICsgbXlzdHJpbmcgKyB2YXIuYmFyICsgIi5jb20iCisjIyBhcnJheSBtZXJnZQorI2luZGV4LWZpbGUubmFtZXMgPSAoZm9vICsgIi5waHAiKSArIGluZGV4LWZpbGUubmFtZXMKKyNpbmRleC1maWxlLm5hbWVzICs9IChmb28gKyAiLnBocCIpCisKKyMjIyMgaW5jbHVkZQorI2luY2x1ZGUgL2V0Yy9saWdodHRwZC9saWdodHRwZC1pbmMuY29uZgorIyMgc2FtZSBhcyBhYm92ZSBpZiB5b3UgcnVuOiAibGlnaHR0cGQgLWYgL2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mIgorI2luY2x1ZGUgImxpZ2h0dHBkLWluYy5jb25mIgorCisjIyMjIGluY2x1ZGVfc2hlbGwKKyNpbmNsdWRlX3NoZWxsICJlY2hvIHZhci5hPTEiCisjIyB0aGUgYWJvdmUgaXMgc2FtZSBhczoKKyN2YXIuYT0xCisKKyMgaW5jbHVkZSBvdGhlciBjb25maWcgZmlsZSBmcmFnbWVudHMgZnJvbSBsaWdodHRwZC5kIHN1YmRpcgoraW5jbHVkZV9zaGVsbCAiZmluZCAvZXRjL2xpZ2h0dHBkLmQgLW1heGRlcHRoIDEgLW5hbWUgJyouY29uZicgLWV4ZWMgY2F0IHt9IFw7IiAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTkwN2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TGlnaHRuaW5nIEZhc3QgV2Vic2VydmVyIFdpdGggTGlnaHQgU3lzdGVtIFJlcXVpcmVtZW50cworQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnRQcmU9QFNCSU5ESVJAL2xpZ2h0dHBkIC10IC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2xpZ2h0dHBkIC1EIC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTVmOTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGVwZW5kZW5jeSBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxNC81LzIyCisKKworSW5kZXg6IGxpZ2h0dHBkLTEuNC4zNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWdodHRwZC0xLjQuMzUub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wMy0wNiAxNDowODowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWdodHRwZC0xLjQuMzUvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTY6NTg6MzAuNzU4NDcxMTY5ICswMDAwCitAQCAtMzA5LDE2ICszMDksMTQgQEAKKyBBQ19NU0dfUkVTVUxUKFskV0lUSF9QQ1JFXSkKKyAKKyBpZiB0ZXN0ICIkV0lUSF9QQ1JFIiAhPSAibm8iOyB0aGVuCistICBBQ19QQVRIX1BST0coUENSRUNPTkZJRywgcGNyZS1jb25maWcpCistCistICBpZiB0ZXN0IHgiJFBDUkVDT05GSUciICE9IHg7IHRoZW4KKy0gICAgUENSRV9MSUI9YCRQQ1JFQ09ORklHIC0tbGlic2AKKy0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJFBDUkVDT05GSUcgLS1jZmxhZ3NgIgorKyAgUEtHX0NIRUNLX01PRFVMRVMoUENSRVBLRywgW2xpYnBjcmVdLCBbCisrICAgIFBDUkVfTElCPSR7UENSRVBLR19MSUJTfQorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICR7UENSRVBLR19DRkxBR1N9IgorICAgICBBQ19ERUZJTkUoW0hBVkVfTElCUENSRV0sIFsxXSwgW2xpYnBjcmVdKQorICAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV9IXSwgWzFdLCBbcGNyZS5oXSkKKy0gIGVsc2UKKysgIF0sIFsKKyAgICAgIEFDX01TR19FUlJPUihbcGNyZS1jb25maWcgbm90IGZvdW5kLCBpbnN0YWxsIHRoZSBwY3JlLWRldmVsIHBhY2thZ2Ugb3IgYnVpbGQgd2l0aCAtLXdpdGhvdXQtcGNyZV0pCistICBmaQorKyAgXSkKKyBmaQorIAorIEFDX1NVQlNUKFBDUkVfTElCKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjM2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGRfMS40LjM2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjZlMzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzYuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBoaWdoLXBlcmZvcm1hbmNlIHdlYiBzZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpZ2h0dHBkLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTRkYWM1YzZhYjE2OWFhMjEyZmViNTAyODg1M2E1NzkiCisKK1NFQ1RJT04gPSAibmV0IgorREVQRU5EUyA9ICJ6bGliIGxpYnBjcmUiCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3MgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWFjY2Vzc2xvZyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtaW5kZXhmaWxlIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1kaXJsaXN0aW5nIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1zdGF0aWNmaWxlIFwKKyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQubGlnaHR0cGQubmV0L2xpZ2h0dHBkL3JlbGVhc2VzLTEuNC54L2xpZ2h0dHBkLSR7UFZ9LnRhci54eiBcCisgICAgICAgIGZpbGU6Ly9pbmRleC5odG1sLmxpZ2h0dHBkIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkLmNvbmYgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQuc2VydmljZSBcCisgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTg0M2RhZmZjYjAxOGFhNTI4ZjZkMTVkNDM1NDQ2NTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk3YWI2YjFjYzdiZDUxNjcxZjhhZjc1OWU3ODQ2MjQ1ZmJiY2EwNjg1YzMwMDE3ZTkzYTU4ODJhOWFjMWE1MyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLCAtLXdpdGhvdXQtb3BlbnNzbCwgb3BlbnNzbCIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgICAgICAgICAgLS13aXRob3V0LWJ6aXAyIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtbGRhcCBcCisgICAgICAgICAgICAgLS13aXRob3V0LWx1YSBcCisgICAgICAgICAgICAgLS13aXRob3V0LW1lbWNhY2hlIFwKKyAgICAgICAgICAgICAtLXdpdGgtcGNyZSBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1wcm9wcyBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1sb2NrcyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBnZXR0ZXh0IHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImxpZ2h0dHBkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNzAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJsaWdodHRwZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCAke0R9JHtzeXNjb25mZGlyfS9saWdodHRwZC5kICR7RH0vd3d3L3BhZ2VzL2RhdgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2xpZ2h0dHBkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmRleC5odG1sLmxpZ2h0dHBkICR7RH0vd3d3L3BhZ2VzL2luZGV4Lmh0bWwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbGlnaHR0cGQuc2VydmljZQorCSNGb3IgRkhTIGNvbXBsaWFuY2UsIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyB0byAvdmFyL2xvZyBhbmQgL3Zhci90bXAgZm9yIGxvZ3MgYW5kIHRlbXBvcmFyeSBkYXRhCisJbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vbG9nICR7RH0vd3d3L2xvZ3MKKwlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS90bXAgJHtEfS93d3cvdmFyCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9IC93d3ciCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmNvbmYiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWdodHRwZC1tb2R1bGUtLioiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvYWN0LWFzLW12LXdoZW4tcm90YXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTMxYTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaApAQCAtMCwwICsxLDE0NyBAQAorRnJvbSA2OGYyOWFiNDkwY2Y5ODdhYTM0YjVmNGNhZjE3ODRiNThhMDIxMzA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IEZlYiAyMDE1IDIxOjA4OjA3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEFjdCBhcyB0aGUgIm12IiBjb21tYW5kIHdoZW4gcm90YXRlIGxvZworCitBY3QgYXMgdGhlICJtdiIgY29tbWFuZCB3aGVuIHJvdGF0ZSBsb2csIGZpcnN0IHJlbmFtZSwgaWYgZmFpbGVkLCB0aGVuCityZWFkIGFuZCB3cml0ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLmMgfCAgIDcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLmMgYi9sb2dyb3RhdGUuYworaW5kZXggZDNkZWI2YS4uY2Y4YmYyYyAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS5jCisrKysgYi9sb2dyb3RhdGUuYworQEAgLTExNTcsNiArMTE1Nyw1MyBAQCBpbnQgZmluZE5lZWRSb3RhdGluZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBpbnQgZm9yY2UpCisgICAgIHJldHVybiAwOworIH0KKyAKKysvKiBBY3QgYXMgdGhlICJtdiIgY29tbWFuZCwgaWYgcmVuYW1lIGZhaWxlZCwgdGhlbiByZWFkIHRoZSBvbGQgZmlsZSBhbmQKKysgKiB3cml0ZSB0byBuZXcgZmlsZS4gVGhlIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIG12RmlsZSB3aWxsIHVzZQorKyAqIHRoZSBzdHJlcnJvcihlcnJvcm5vKSB0byBoYW5kbGUgdGhlIGVycm9yIG1lc3NhZ2UsIHNvIHdlIGRvbid0IGhhdmUKKysgKiB0byBwcmludCB0aGUgZXJyb3IgbWVzc2FnZSBoZXJlICovCisrCisraW50IG12RmlsZSAoY2hhciAqb2xkTmFtZSwgY2hhciAqbmV3TmFtZSwgc3RydWN0IGxvZ0luZm8gKmxvZywgYWNsX3R5cGUgYWNsKQorK3sKKysgICAgc3RydWN0IHN0YXQgc2JwcmV2OworKyAgICBpbnQgZmRfb2xkLCBmZF9uZXcsIG47CisrICAgIGNoYXIgYnVmW0JVRlNJWl07CisrCisrICAgIC8qIERvIHRoZSByZW5hbWUgZmlyc3QgKi8KKysgICAgaWYgKCFyZW5hbWUob2xkTmFtZSwgbmV3TmFtZSkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgLyogSWYgdGhlIGVycm5vIGlzIEVYREVWLCB0aGVuIHJlYWQgb2xkIGZpbGUsIHdyaXRlIG5ld2ZpbGUgYW5kCisrICAgICAqIHJlbW92ZSB0aGUgb2xkZmlsZSAqLworKyAgICBpZiAoZXJybm8gPT0gRVhERVYpIHsKKysgICAgICAgIC8qIE9wZW4gdGhlIG9sZCBmaWxlIHRvIHJlYWQgKi8KKysgICAgICAgIGlmICgoZmRfb2xkID0gb3BlbihvbGROYW1lLCBPX1JET05MWSkpIDwgMCkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIC8qIENyZWF0ZSB0aGUgZmlsZSB0byB3cml0ZSwga2VlcCB0aGUgc2FtZSBhdHRyaWJ1dGUgYXMgdGhlIG9sZCBmaWxlICovCisrICAgICAgICBpZiAoc3RhdChvbGROYW1lLCAmc2JwcmV2KSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGlmICgoZmRfbmV3ID0gY3JlYXRlT3V0cHV0RmlsZShuZXdOYW1lLAorKyAgICAgICAgICAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAmc2JwcmV2LCBhY2wsIDApKSA8IDAgKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIFJlYWQgYW5kIHdyaXRlICovCisrICAgICAgICB3aGlsZSAoKG4gPSByZWFkKGZkX29sZCwgYnVmLCBCVUZTSVopKSA+IDApCisrICAgICAgICAgICAgaWYgKHdyaXRlKGZkX25ldywgYnVmLCBuKSAhPSBuKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIGlmICgoY2xvc2UoZmRfb2xkKSA8IDApIHx8CisrICAgICAgICAgICAgcmVtb3ZlTG9nRmlsZShvbGROYW1lLCBsb2cpIHx8CisrICAgICAgICAgICAgKGNsb3NlKGZkX25ldykgPCAwKSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30KKysKKyBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQkgICAgICAgc3RydWN0IGxvZ05hbWVzICpyb3ROYW1lcykKKyB7CitAQCAtMTUyMywxNSArMTU3MCwxNSBAQCBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQl9CisgCisgCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsCistCQkgICAgInJlbmFtaW5nICVzIHRvICVzIChyb3RhdGVjb3VudCAlZCwgbG9nc3RhcnQgJWQsIGkgJWQpLCBcbiIsCisrCQkgICAgIm1vdmluZyAlcyB0byAlcyAocm90YXRlY291bnQgJWQsIGxvZ3N0YXJ0ICVkLCBpICVkKSwgXG4iLAorIAkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHJvdGF0ZUNvdW50LCBsb2dTdGFydCwgaSk7CisgCistCSAgICBpZiAoIWRlYnVnICYmIHJlbmFtZShvbGROYW1lLCBuZXdOYW1lKSkgeworKwkgICAgaWYgKCFkZWJ1ZyAmJiBtdkZpbGUob2xkTmFtZSwgbmV3TmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAJCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsICJvbGQgbG9nICVzIGRvZXMgbm90IGV4aXN0XG4iLAorIAkJCSAgICBvbGROYW1lKTsKKyAJCX0gZWxzZSB7CistCQkgICAgbWVzc2FnZShNRVNTX0VSUk9SLCAiZXJyb3IgcmVuYW1pbmcgJXMgdG8gJXM6ICVzXG4iLAorKwkJICAgIG1lc3NhZ2UoTUVTU19FUlJPUiwgImVycm9yIG1vdmluZyAlcyB0byAlczogJXNcbiIsCisgCQkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgCQkgICAgaGFzRXJyb3JzID0gMTsKKyAJCX0KK0BAIC0xNjY5LDIxICsxNzE2LDIxIEBAIGludCByb3RhdGVTaW5nbGVMb2coc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgc3RydWN0IGxvZ1N0YXRlICpzdGF0ZSwKKyAJCQkJcmV0dXJuIDE7CisgCQkJfQorIAorLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXRtcEZpbGVuYW1lKTsKKy0JCQlpZiAoIWRlYnVnICYmICFoYXNFcnJvcnMgJiYgcmVuYW1lKGxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUpKSB7CistCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIHJlbmFtZSAlcyB0byAlczogJXNcbiIsCisrCQkJaWYgKCFkZWJ1ZyAmJiAhaGFzRXJyb3JzICYmIG12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIG1vdmUgJXMgdG8gJXM6ICVzXG4iLAorIAkJCQlsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lLAorIAkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQloYXNFcnJvcnMgPSAxOworIAkJCX0KKyAJCX0KKyAJCWVsc2UgeworLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXJvdE5hbWVzLT5maW5hbE5hbWUpOworIAkJCWlmICghZGVidWcgJiYgIWhhc0Vycm9ycyAmJgorLQkJCXJlbmFtZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUpKSB7CistCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzXG4iLAorKwkJCW12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byBtb3ZlICVzIHRvICVzOiAlc1xuIiwKKyAJCQkJCWxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUsCisgCQkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQkJaGFzRXJyb3JzID0gMTsKK0BAIC0yMDYzLDcgKzIxMTAsNyBAQCBpbnQgcm90YXRlTG9nU2V0KHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBmb3JjZSkKKyAgICAgcmV0dXJuIGhhc0Vycm9yczsKKyB9CisgCistc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisrc3RhdGljIGludCB3cml0ZVN0YXRlKHN0cnVjdCBsb2dJbmZvICpsb2csIGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgeworIAlzdHJ1Y3QgbG9nU3RhdGUgKnA7CisgCUZJTEUgKmY7CitAQCAtMjIyNyw3ICsyMjc0LDcgQEAgc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgCQlmY2xvc2UoZik7CisgCisgCWlmIChlcnJvciA9PSAwKSB7CistCQlpZiAocmVuYW1lKHRtcEZpbGVuYW1lLCBzdGF0ZUZpbGVuYW1lKSkgeworKwkJaWYgKG12RmlsZSh0bXBGaWxlbmFtZSwgc3RhdGVGaWxlbmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCQl1bmxpbmsodG1wRmlsZW5hbWUpOworIAkJCWVycm9yID0gMTsKKyAJCQltZXNzYWdlKE1FU1NfRVJST1IsICJlcnJvciByZW5hbWluZyB0ZW1wIHN0YXRlIGZpbGUgJXNcbiIsCitAQCAtMjUyNSw3ICsyNTcyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorIAkJcmMgfD0gcm90YXRlTG9nU2V0KGxvZywgZm9yY2UpOworIAorIAlpZiAoIWRlYnVnKQorLQkJcmMgfD0gd3JpdGVTdGF0ZShzdGF0ZUZpbGUpOworKwkJcmMgfD0gd3JpdGVTdGF0ZShsb2csIHN0YXRlRmlsZSk7CisgCisgCXJldHVybiAocmMgIT0gMCk7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9kaXNhYmxlLWNoZWNrLWRpZmZlcmVudC1maWxlc3lzdGVtcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzZDcwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRGlzYWJsZSB0aGUgY2hlY2sgZm9yIGRpZmZlcmVudCBmaWxlc3lzdGVtcworCitUaGUgbG9ncm90YXRlIHN1cHBvcnRzIHJvdGF0ZSBsb2cgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBub3csIHNvCitkaXNhYmxlIHRoZSBjaGVjayBmb3IgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWcuYyB8ICAgIDkgLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCitpbmRleCBkYmJmNTYzLi42NGU2NmY2IDEwMDY0NAorLS0tIGEvY29uZmlnLmMKKysrKyBiL2NvbmZpZy5jCitAQCAtMTQ5MywxNSArMTQ5Myw2IEBAIHN0YXRpYyBpbnQgcmVhZENvbmZpZ0ZpbGUoY29uc3QgY2hhciAqY29uZmlnRmlsZSwgc3RydWN0IGxvZ0luZm8gKmRlZkNvbmZpZykKKyAJCQkJCQkJZ290byBlcnJvcjsKKyAJCQkJCQl9CisgCQkJCQl9CistCistCQkJCQlpZiAoc2Iuc3RfZGV2ICE9IHNiMi5zdF9kZXYKKy0JCQkJCQkmJiAhKG5ld2xvZy0+ZmxhZ3MgJiAoTE9HX0ZMQUdfQ09QWVRSVU5DQVRFIHwgTE9HX0ZMQUdfQ09QWSB8IExPR19GTEFHX1RNUEZJTEVOQU1FKSkpIHsKKy0JCQkJCQltZXNzYWdlKE1FU1NfRVJST1IsCistCQkJCQkJCSIlczolZCBvbGRkaXIgJXMgYW5kIGxvZyBmaWxlICVzICIKKy0JCQkJCQkJImFyZSBvbiBkaWZmZXJlbnQgZGV2aWNlc1xuIiwgY29uZmlnRmlsZSwKKy0JCQkJCQkJbGluZU51bSwgbmV3bG9nLT5vbGREaXIsIG5ld2xvZy0+ZmlsZXNbaV0pOworLQkJCQkJCWdvdG8gZXJyb3I7CistCQkJCQl9CisgCQkJCX0KKyAJCQl9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQwMzdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGUwYjBmZTMwZTljNDkyMzQ5OTRhMjBhODZhYWNmYWY4MGU2OTAwODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgRmViIDIwMTUgMjE6MTQ6MzcgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIHRoZSBtYW51YWwKKworVXBkYXRlIHRoZSBtYW51YWwgZm9yIHJvdGF0aW5nIG9uIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLjggfCAgIDEwICsrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLjggYi9sb2dyb3RhdGUuOAoraW5kZXggZTRlNWY0OC4uODQ0MDdkMCAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS44CisrKysgYi9sb2dyb3RhdGUuOAorQEAgLTQwNSwxMiArNDA1LDEwIEBAIERvIG5vdCByb3RhdGUgdGhlIGxvZyBpZiBpdCBpcyBlbXB0eSAodGhpcyBvdmVycmlkZXMgdGhlIFxmQmlmZW1wdHlcZlIgb3B0aW9uKS4KKyAKKyAuVFAKKyBcZkJvbGRkaXIgXGZJZGlyZWN0b3J5XGZSCistTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSIG11c3QgYmUKKy1vbiB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UgYXMgdGhlIGxvZyBmaWxlIGJlaW5nIHJvdGF0ZWQsIHVubGVzcyBcZkJjb3B5XGZSLAorLVxmQmNvcHl0cnVuY2F0ZVxmUiBvciBcZkJyZW5hbWVjb3B5XGZSIG9wdGlvbiBpcyB1c2VkLiBUaGUgXGZJZGlyZWN0b3J5XGZSCistaXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlCistdW5sZXNzIGFuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwKKy1vbGQgdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiAgVGhpcyBvcHRpb24gbWF5IGJlCisrTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSCisraXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlIHVubGVzcworK2FuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwgb2xkCisrdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiBUaGlzIG9wdGlvbiBtYXkgYmUKKyBvdmVycmlkZGVuIGJ5IHRoZSBcZkJub29sZGRpclxmUiBvcHRpb24uCisgCisgLlRQCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZV8zLjkuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwYTE1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJSb3RhdGVzLCBjb21wcmVzc2VzLCByZW1vdmVzIGFuZCBtYWlscyBzeXN0ZW0gbG9nIGZpbGVzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xvZ3JvdGF0ZS8iCitMSUNFTlNFID0gIkdQTHYyIgorCisjIFRPRE86IGxvZ3JvdGF0ZSAzLjguOCBhZGRzIGF1dG90b29scy9hdXRvbWFrZSBzdXBwb3J0LCB1cGRhdGUgcmVjaXBlIHRvIHVzZSBpdC4KKyMgVE9ETzogRG9jdW1lbnQgY29yZXV0aWxzIGRlcGVuZGVuY3kuIFdoeSBub3QgUkRFUEVORFM/IFdoeSBub3QgYnVzeWJveD8KKworREVQRU5EUz0iY29yZXV0aWxzIHBvcHQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWN0LWFzLW12LXdoZW4tcm90YXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0OTJiMTQ1YjZkNTQyZTRhMmY0MWU3N2ZhMTk5YWIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyMjc2OWUzMjg4YzgwOTgxNTU5YTg0MjE3MDNjODhlODQzOGI0NDcyMzVlMzZkZDNjOGU5N2NkOTRjNTI1NDUiCisKK1BBQ0tBR0VDT05GSUcgPz0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAnc2VsaW51eCcsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLCxhY2wiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiwsbGlic2VsaW51eCIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzIFwKKwkJICAgICR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYiCisKKyMgSWYgUlBNX09QVF9GTEFHUyBpcyB1bnNldCwgaXQgYWRkcyAtZyBpdHNlbGYgcmF0aGVyIHRoYW4gb2JleWluZyBvdXIKKyMgb3B0aW1pemF0aW9uIHZhcmlhYmxlcywgc28gdXNlIGl0IHJhdGhlciB0aGFuIEVYVFJBX0NGTEFHUy4KK0VYVFJBX09FTUFLRSA9ICJcCisgICAgTEZTPSBcCisgICAgT1NfTkFNRT0nJHtPU19OQU1FfScgXAorICAgICdDQz0ke0NDfScgXAorICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdFWFRSQV9MREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhY2wnLCAnV0lUSF9BQ0w9eWVzJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VsaW51eCcsICdXSVRIX1NFTElOVVg9eWVzJywgJycsIGQpfSBcCisiCisKKyMgT1NfTkFNRSBpbiB0aGUgbWFrZWZpbGUgZGVmYXVsdHMgdG8gYHVuYW1lIC1zYC4gVGhlIGJlaGF2aW9yIGZvcgorIyBmcmVlYnNkL25ldGJzZCBpcyBxdWVzdGlvbmFibGUsIHNvIGxlYXZlIGl0IGFzIExpbnV4LCB3aGljaCBvbmx5IHNldHMKKyMgSU5TVEFMTD1pbnN0YWxsIGFuZCBCQVNFRElSPS91c3IuCitPU19OQU1FID0gIkxpbnV4IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitkb19pbnN0YWxsKCl7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtEfSBNQU5ESVI9JHttYW5kaXJ9IEJJTkRJUj0ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuZAorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKKyAgICBta2RpciAtcCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIKKyAgICBpbnN0YWxsIC1wIC1tIDY0NCBleGFtcGxlcy9sb2dyb3RhdGUtZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuY29uZgorICAgIGluc3RhbGwgLXAgLW0gNzU1IGV4YW1wbGVzL2xvZ3JvdGF0ZS5jcm9uICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkvbG9ncm90YXRlCisgICAgdG91Y2ggJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2xvZ3JvdGF0ZS5zdGF0dXMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvaW5pdC1mdW5jdGlvbnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjMWRjZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCisjIExTQiBpbml0c2NyaXB0IGZ1bmN0aW9ucywgYXMgZGVmaW5lZCBpbiB0aGUgTFNCIFNwZWMgMS4xLjAKKyMKKyMgTGF3cmVuY2UgTGltIDxsbGltQGNvcmUuY29tPiAtIFR1ZSwgMjYgSnVuZSAyMDA3CisjIFVwZGF0ZWQgdG8gdGhlIGxhdGVzdCBMU0IgMy4xIHNwZWMKKyMgaHR0cDovL3JlZnNwZWNzLmZyZWVzdGFuZGFyZHMub3JnL0xTQl8zLjEuMC9MU0ItQ29yZS1nZW5lcmljL0xTQi1Db3JlLWdlbmVyaWNfbGluZXMudHh0CisKK3N0YXJ0X2RhZW1vbiAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2Jfc3RhcnRfZGFlbW9uICIkQCIKK30KKwora2lsbHByb2MgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2tpbGxwcm9jICIkQCIKK30KKworcGlkb2Zwcm9jICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9waWRvZnByb2MgIiRAIgorfQorCitsb2dfc3VjY2Vzc19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHN1Y2Nlc3MgIiRAIgorfQorCitsb2dfZmFpbHVyZV9tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIGZhaWx1cmUgIiRAIgorfQorCitsb2dfd2FybmluZ19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHdhcm5pbmcgIiRAIgorfQorCisjIGludCBsb2dfYmVnaW5fbWVzc2FnZSAoY2hhciAqbWVzc2FnZSkKK2xvZ19iZWdpbl9tc2cgKCkgeworCWlmIFsgLXogIiQxIiBdOyB0aGVuCisJCXJldHVybiAxCisJZmkKKwllY2hvICIgKiAkQCIKK30KKworCitsb2dfZW5kX21zZyAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2JfbG9nX21lc3NhZ2UgZW5kICIkQCIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2tpbGxwcm9jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfa2lsbHByb2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODY2YzFhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2tpbGxwcm9jCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK0xTQj1MU0ItMS4xIGtpbGxwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9sb2dfbWVzc2FnZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2xvZ19tZXNzYWdlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwMzQzYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9sb2dfbWVzc2FnZQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworQUNUSU9OPSQxCitzaGlmdAorCitjYXNlICIkQUNUSU9OIiBpbgorICBzdWNjZXNzKQorICAJZWNobyAtbiAkKgorCXN1Y2Nlc3MgIiQqIgorCWVjaG8KKwk7OworICBmYWlsdXJlKQorICAJZWNobyAtbiAkKgorCWZhaWx1cmUgIiQqIgorCWVjaG8KKwk7OworICB3YXJuaW5nKQorICAJZWNobyAtbiAkKgorCXdhcm5pbmcgIiQqIgorCWVjaG8KKwk7OworICAqKQorICAJOzsKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfcGlkb2Zwcm9jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfcGlkb2Zwcm9jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkMWZkMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9waWRvZnByb2MKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworcGlkb2Zwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9zdGFydF9kYWVtb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9zdGFydF9kYWVtb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGU2MmMyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3N0YXJ0X2RhZW1vbgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbmljZT0KK2ZvcmNlPQorcGlkZmlsZT0KK3VzZXI9CitjaGVjaz0KK1JFVFZBTD0KK3doaWxlIFsgIiQxIiAhPSAiJHsxIyNbLStdfSIgXTsgZG8KKwljYXNlICQxIGluCisJICAgICAtZikKKwkgICAgIAlmb3JjZT0iLS1mb3JjZSIKKwkJc2hpZnQKKwkJOzsKKwkgICAgIC1uKQorCSAgICAgCW5pY2U9JDIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXApCisJCXBpZGZpbGU9Ii0tcGlkZmlsZSAkMiIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXUpCisJICAgICAgICB1c2VyPSItLXVzZXIgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC1jKQorCSAgICAgICAgY2hlY2s9Ii0tY2hlY2sgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgICAqKSAgICAgCisgCQllY2hvICJVbmtub3duIE9wdGlvbiAkMSIKKyAJCWVjaG8gIk9wdGlvbnMgYXJlOiIKKyAJCWVjaG8gIi1mIiAKKwkJZWNobyAiLXAge3BpZGZpbGV9IgorCQllY2hvICItbiBbKy8tbmljZWxldmVsXSIKKwkJZWNobyAiLXUge3VzZXJ9IgorCQllY2hvICItYyB7YmFzZX0iCisJICAgICAgICBleGl0IDE7OwkKKwllc2FjCitkb25lCitMU0I9TFNCLTEuMSBkYWVtb24gJHtmb3JjZTotfSAke25pY2U6LX0gJHtwaWRmaWxlOi19ICR7dXNlcjotfSAke2NoZWNrOi19ICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2JfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTViNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYgpAQCAtMCwwICsxLDEyNyBAQAorU1VNTUFSWSA9ICJMU0Igc3VwcG9ydCBmb3IgT3BlbkVtYmVkZGVkIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9sc2IiCitMSUNFTlNFID0gIkdQTHYyKyIKK1BSID0gInIyIgorCitMU0JfQ09SRSA9ICJsc2ItY29yZS0ke1RBUkdFVF9BUkNIfSIKK0xTQl9DT1JFX3g4NiA9ICJsc2ItY29yZS1pYTMyIgorTFNCX0NPUkVfeDg2LTY0ID0gImxzYi1jb3JlLWFtZDY0IgorUlBST1ZJREVTXyR7UE59ICs9ICIke0xTQl9DT1JFfSIKKworIyBsc2JfcmVsZWFzZSBuZWVkcyBnZXRvcHQKK1JERVBFTkRTXyR7UE59ICs9ICIke1ZJUlRVQUwtUlVOVElNRV9nZXRvcHR9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTEyZGE1NDRiMWEzYTVhMTc5NWEyMTE2MGI0OTQ3MWNmIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xzYi9sc2JfcmVsZWFzZS8xLjQvbHNiLXJlbGVhc2UtMS40LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LWZ1bmN0aW9ucyBcCisgICAgICAgICAgIGZpbGU6Ly9sc2Jfa2lsbHByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX2xvZ19tZXNzYWdlIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9waWRvZnByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX3N0YXJ0X2RhZW1vbiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMwNTM3ZWY1YTAxZTBjYTk0YjdiOGViNmEzNmJiMWU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk5MzIxMjg4ZjhkNjJlN2ExZDQ4NWI3YzZiZGNjZjA2NzY2ZmI4Y2E2MDNjNjE5NTgwNmU0NDU3ZmRmMTcxNzIiCitTID0gIiR7V09SS0RJUn0vbHNiLXJlbGVhc2UtMS40IgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19pbnN0YWxsKCl7CisJb2VfcnVubWFrZSBpbnN0YWxsIHByZWZpeD0ke0R9ICBtYW5kaXI9JHtEfS8ke2RhdGFkaXJ9L21hbi8gREVTVERJUj0ke0R9CisKKwkjIHRoaXMgMiBkaXJzIGFyZSBuZWVkZWQgYnkgcGFja2FnZSBsc2ItZGlzdC1jaGVja2VyCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vb3B0CisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vb3B0CisKKwlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwlta2RpciAtcCAke0R9LyR7YmFzZWxpYn0KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJcHJpbnRmICJMU0JfVkVSU0lPTj1cImNvcmUtNC4xLW5vYXJjaDoiID4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNTg2IiBdIHx8IFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNjg2IiBdO3RoZW4KKwkJcHJpbnRmICJjb3JlLTQuMS1pYTMyIiA+PiAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwllbHNlCisJCXByaW50ZiAiY29yZS00LjEtJHtUQVJHRVRfQVJDSH0iID4+ICAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWZpCisJZWNobyAiXCIiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9JRD0ke0RJU1RST30iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9SRUxFQVNFPSR7RElTVFJPX1ZFUlNJT059IiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWlmIFsgLW4gIiR7RElTVFJPX0NPREVOQU1FfSIgXTsgdGhlbgorCQllY2hvICJESVNUUklCX0NPREVOQU1FPSR7RElTVFJPX0NPREVOQU1FfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlmaQorCWVjaG8gIkRJU1RSSUJfREVTQ1JJUFRJT049XCIke0RJU1RST19OQU1FfSAke0RJU1RST19WRVJTSU9OfVwiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCQlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1pYTMyCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1pYTMyCisJZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1hbWQ2NAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tYW1kNjQKKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1wcGMzMgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tcHBjMzIKKwllbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LW5vYXJjaAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LXBwYzY0CisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1wcGM2NAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGZvciBpIGluIGxzYl9raWxscHJvYyBsc2JfbG9nX21lc3NhZ2UgbHNiX3BpZG9mcHJvYyBsc2Jfc3RhcnRfZGFlbW9uCisgICAgICAgZG8KKyAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJHtpfSAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGRvbmUKKworICAgICAgIGluc3RhbGwgLWQgJHtEfS9saWIvbHNiCisgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1mdW5jdGlvbnMgJHtEfS9saWIvbHNiCisKKyAgICAgICAjIGNyZWF0IGxpbmtzIGZvciBMU0IgdGVzdAorICAgICAgIGluc3RhbGwgLWQgJHtEfS91c3IvbGliL2xzYgorICAgICAgIGxuIC1zZiAke3NiaW5kaXJ9L2Noa2NvbmZpZyAke0R9L3Vzci9saWIvbHNiL2luc3RhbGxfaW5pdGQKKyAgICAgICBsbiAtc2YgJHtzYmluZGlyfS9jaGtjb25maWcgJHtEfS91c3IvbGliL2xzYi9yZW1vdmVfaW5pdGQKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCSAgICAgICBjZCAke0R9CisgICAgICAgICAgICAgICBpZiBbICIke2Jhc2VsaWJ9IiAhPSAibGliNjQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtiYXNlbGlifSBsaWI2NAorICAgICAgICAgICAgICAgZmkKKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4zCisgICAgICAgZmkKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LnNvLjIgbGQtbHNiLnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC1saW51eC5zby4yIGxkLWxzYi5zby4zCisgICAgICAgZmkKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorICAgICAgICAgICAgICAgY2QgJHtEfQorICAgICAgICAgICAgICAgaWYgWyAiJHtiYXNlbGlifSIgIT0gImxpYjY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7YmFzZWxpYn0gbGliNjQKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBjZCAke0R9LyR7YmFzZWxpYn0KKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjMKKyAgICAgICBmaQorICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQuc28uMSBsZC1sc2ItcHBjMzIuc28uMgorICAgICAgICAgICAgICAgbG4gLXNmIGxkLnNvLjEgbGQtbHNiLXBwYzMyLnNvLjMKKyAgICAgICBmaQorfQorRklMRVNfJHtQTn0gKz0gIi9saWI2NCBcCisgICAgICAgICAgICAgICAgL3Vzci9saWIvbHNiIFwKKyAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9sc2IvKiBcCisgICAgICAgICAgICAgICAgL2xpYi9sc2IvKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODA5YzliCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZnVuY3Rpb25zOiBhdm9pZCBleGl0IDEgd2hpY2ggY2F1c2VzIGluaXQgc2NyaXB0cyB0byBmYWlsCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHJjLmQvaW5pdC5kL2Z1bmN0aW9ucyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyBiL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworaW5kZXggNjg1MDA0Ni4uMTEyMjNmNyAxMDA2NDQKKy0tLSBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGIvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtNTk3LDUgKzU5Nyw1IEBAIGlmIFsgIiRfdXNlX3N5c3RlbWN0bCIgPSAiMSIgXTsgdGhlbgorIAlmaQorIGZpCisgCistc3Ryc3RyICIkKGNhdCAvcHJvYy9jbWRsaW5lKSIgInJjLmRlYnVnIiAmJiBzZXQgLXgKKytzdHJzdHIgIiQoY2F0IC9wcm9jL2NtZGxpbmUpIiAicmMuZGVidWciICYmIHNldCAteCB8fCB0cnVlCisgCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy9mdW5jdGlvbnMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTZkMDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW5pdHNjcmlwdHMtOS40My5vcmlnL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtMTMsNiArMTMsNyBAQCB1bWFzayAwMjIKKyBQQVRIPSIvc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIKKyBleHBvcnQgUEFUSAorIAorKworIGlmIFsgJFBQSUQgLW5lIDEgLWEgLXogIiRTWVNURU1DVExfU0tJUF9SRURJUkVDVCIgXSAmJiBcCisgCQkoIC9iaW4vbW91bnRwb2ludCAtcSAvY2dyb3VwL3N5c3RlbWQgfHwgL2Jpbi9tb3VudHBvaW50IC1xIC9zeXMvZnMvY2dyb3VwL3N5c3RlbWQgKSA7IHRoZW4KKyAgICAgICAgIGNhc2UgIiQwIiBpbgorQEAgLTU0LDcgKzU1LDcgQEAgc3lzdGVtY3RsX3JlZGlyZWN0ICgpIHsKKyBbIC16ICIke0NPTFVNTlM6LX0iIF0gJiYgQ09MVU1OUz04MAorIAorIGlmIFsgLXogIiR7Q09OU09MRVRZUEU6LX0iIF07IHRoZW4KKy0gIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIF07IHRoZW4KKysgIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIC1hIC1lIC9zYmluL2NvbnNvbGV0eXBlIF07IHRoZW4KKyAgICAgQ09OU09MRVRZUEU9IiQoL3NiaW4vY29uc29sZXR5cGUgPCAvZGV2L3N0ZGVyciAyPi9kZXYvbnVsbCkiCisgICBlbHNlCisgICAgIENPTlNPTEVUWVBFPSJzZXJpYWwiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0c185LjY0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYjY2N2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIHdoaWNoIGFyZSBvbmx5IHVzZWQgaW4gYW4gTFNCIGltYWdlIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0RFUEVORFMgPSAicG9wdCBnbGliLTIuMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWJmNGU4YjQ5NzgwYWIxODdkNTFiZDI2YWFhMDIyYzYiCisKK1M9IiR7V09SS0RJUn0vaW5pdHNjcmlwdHMtJHtQVn0iCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyLzljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIiAKKworU1JDX1VSSVttZDVzdW1dID0gIjljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4YjU5Y2U4MTU3Y2ZjNThiYmQ0YjFkZmE1OGFkMTA4NzI0NTc2MWFlMTFjMjAzM2I2NmFlMzg2NGVhN2UxY2YiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmdW5jdGlvbnMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnVuY3Rpb25zXSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMiCisKKyMgU2luY2Ugd2UgYXJlIG9ubHkgdGFraW5nIHRoZSBwYXRjaGVkIHZlcnNpb24gb2YgZnVuY3Rpb25zLCBubyBuZWVkIHRvCisjIGNvbmZpZ3VyZSBvciBjb21waWxlIGFueXRoaW5nIHNvIGRvIG5vdCBleGVjdXRlIHRoZXNlCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIiAKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIiAKKworZG9faW5zdGFsbCgpeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zCisJc2VkIC1pICdzLCR7YmFzZV9iaW5kaXJ9L21vdW50cG9pbnQsJHtiaW5kaXJ9L21vdW50cG9pbnQsZycgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9MU0JfVGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTk3MWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKQEAgLTAsMCArMSw1MjYgQEAKKyMhL2Jpbi9zaAorCisjIENvcHlyaWdodCAoQykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworCitXT1JLX0RJUj0iL29wdC9sc2ItdGVzdCIKKworaWYgWyBgaWQgLXVgIC1uZSAwIF0KK3RoZW4KKwljYXQgPDwgRU9GCisJSW4gb3JkZXIgdG8gaW5zdGFsbCBhbmQgcnVuIExTQiB0ZXN0c3VpdGUsIHlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcy4KKwlZb3UgYXJlIGN1cnJlbnRseSBydW5uaW5nIHRoaXMgc2NyaXB0IGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLgorCitFT0YKKwlleGl0IDEKK2ZpCisKK0FSQ0g9YHVuYW1lIC1tYAoraWYgWyAke0FSQ0h9ICE9ICJpNjg2IiBdICYmIFsgJHtBUkNIfSAhPSAieDg2XzY0IiBdICYmIFsgJHtBUkNIfSAhPSAicHBjIiBdICYmIFsgJHtBUkNIfSAhPSAicHBjNjQiIF0KK3RoZW4KKwllY2hvICJFcnJvcjogVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIgorCWV4aXQgMQorZmkKKword2hpY2ggcnBtCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwllY2hvICJObyBycG0gY29tbWFuZCBmb3VuZCIKKwlleGl0IDEKK2ZpCisKK1JFVD0wCisKK2NkICR7V09SS19ESVJ9IHx8IGV4aXQgMQorIyBTdGVwIDE6IERvd25sb2FkIHRoZSBMU0IgUGFja2FnZXMKK2VjaG8gIiIKK2VjaG8gIkRvd25sb2FkIExTQiBwYWNrYWdlcy4uLiIKK2VjaG8gIiIKKworaWYgWyAhIC1lIC4vcGFja2FnZXNfbGlzdCBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHBhY2thZ2VzIGxpc3QiID4mMgorCWV4aXQgMQorZmkKKworLiAuL3BhY2thZ2VzX2xpc3QKKworUEFDS0FHRVNfRElSPSIvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3BhY2thZ2VzL2Z0cC5saW51eGZvdW5kYXRpb24ub3JnL3B1Yi9sc2IiCisKK0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYmFzZS8ke0xTQl9SRUxFQVNFfS9iaW5hcnkiCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vdGVzdF9zdWl0ZXMvcmVsZWFzZWQtYWxsL2JpbmFyeS9ydW50aW1lIgorUlVOVElNRV9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK0FQUF9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK0FQUF9URVNURklMRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYXBwLWJhdHRlcnkvdGVzdHMiCitTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L3NuYXBzaG90cy9hcHBiYXQvdGVzdHMiCisKK2lmIFsgISAtZCAke1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0JBU0VfUEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke1JVTlRJTUVfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke0FQUF9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0FQUF9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtBUFBfVEVTVEZJTEVTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7QVBQX1RFU1RGSUxFU19ESVJ9CitmaQorCisjIE9mZmljaWFsIGRvd25sb2FkIHNlcnZlciBsaXN0LiBZb3UgY2FuIHJlcGxhY2UgdGhlbSB3aXRoIHlvdXIgb3duIHNlcnZlci4KK1NFUlZFUl9JUEFERFI9IjE0MC4yMTEuMTY5LjIzIgorU0VSVkVSX05BTUU9ImZ0cC5saW51eGZvdW5kYXRpb24ub3JnIgorCitpZiAhIGBncmVwIC1GIC1xICIke1NFUlZFUl9OQU1FfSIgL2V0Yy9ob3N0c2A7IHRoZW4KKwllY2hvICIke1NFUlZFUl9JUEFERFJ9CSR7U0VSVkVSX05BTUV9CSR7U0VSVkVSX05BTUV9IiA+PiAvZXRjL2hvc3RzCitmaQorCisjcGluZyAtYyA1ICR7U0VSVkVSX05BTUV9CisjaWYgWyAkPyAtbmUgMCBdCisjdGhlbgorIwllY2hvICJUaGUgc2VydmVyOiAke1NFUlZFUl9OQU1FfSBpcyB1bnJlYWNoYWJsZSIKKyMJZXhpdCAxCisjZmkKKworU0VSVkVSMT0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL2Jhc2UvJHtMU0JfUkVMRUFTRX0vYmluYXJ5IgorU0VSVkVSMj0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL3Rlc3Rfc3VpdGVzL3JlbGVhc2VkLWFsbC9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjM9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjQ9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK1NFUlZFUjU9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS90ZXN0cyIKKworIyBXZSB1c2luZyAiY3VybCIgYXMgYSBkb3dubG9hZCB0b29sLCAid2dldCIgaXMgYW4gYWx0ZXJuYXRpdmUuCitDVVJMPWB3aGljaCBjdXJsYAorV0dFVD1gd2hpY2ggd2dldGAKK2lmIFsgISAteiAke0NVUkx9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7Q1VSTH0gLVIgLUwgLWYgLS1yZXRyeSAzIC0tcmV0cnktZGVsYXkgNCAtLWNvbm5lY3QtdGltZW91dCAxODAgLS1jb21wcmVzc2VkIC1DIC0gLW8iCitlbGlmIFsgISAteiAke1dHRVR9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7V0dFVH0gLWMgLXQgNSAtTyIKK2Vsc2UKKwllY2hvICJDYW4gbm90IGZpbmQgYSBkb3dubG9hZCB0b29sLCBwbGVhc2UgaW5zdGFsbCBjdXJsIG9yIHdnZXQuIgorCWV4aXQgMQorZmkKKworY2QgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7QVBQX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfVEVTVEZJTEVTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2lmIFsgJHtSRVR9IC1uZSAwIF0KK3RoZW4KKwllY2hvICJEb3dubG9hZCBzb21lIHBhY2thZ2VzIGZhaWxlZC4gUGxlYXNlIGRvd25sb2FkIHRoZW0gYWdhaW4uIgorCWV4aXQgMQorZmkKKworIyBTdGVwIDI6IEluc3RhbGwgdGhlIExTQiBQYWNrYWdlcworZWNobyAiIgorZWNobyAiSW5zdGFsbCBMU0IgcGFja2FnZXMuLi4iCitlY2hvICIiCisKKyMgS2lsbCBsaWdodHRwZAorcHMgYXV4IHwgZ3JlcCAibGlnaHR0cGQiIHwgZ3JlcCAtdiAtcSAiZ3JlcCIKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWtpbGxhbGwgbGlnaHR0cGQgPi9kZXYvbnVsbCAyPiYxCitmaQorCisjIFN0YXJ0IGF2YWhpLWRhZW1vbgorcHMgYXV4IHwgZ3JlcCAiYXZhaGktZGFlbW9uIiB8IGdyZXAgLXYgLXEgImdyZXAiCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwkvZXRjL2luaXQuZC9hdmFoaS1kYWVtb24gc3RhcnQgPi9kZXYvbnVsbCAyPiYxCitmaQorCitMU0JfU1RBUlRfQ01EPSIvb3B0L2xzYi90ZXN0L21hbmFnZXIvYmluL2Rpc3QtY2hlY2tlci1zdGFydC5wbCIKK0xTQl9TVE9QX0NNRD0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL2Jpbi9kaXN0LWNoZWNrZXItc3RvcC5wbCIKKworUExBVEZPUk1fRklMRT0iL2V0Yy9ycG0vcGxhdGZvcm0iCisKK1JQTV9JTlNUQUxMX0NNRD0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2lnbmF0dXJlIC1pIgorUlBNX0lOU1RBTExfQ01EX05PU0NSSVBUUz0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2NyaXB0cyAtLW5vc2lnbmF0dXJlIC1pIgorCisjIElmIHRoZSBsc2IgaGFzIGJlZW4gc3RhcnRlZCwgc3RvcCBpdCBmaXJzdC4KK2lmIFsgLXggJHtMU0JfU1RPUF9DTUR9IF0KK3RoZW4KKwkke0xTQl9TVE9QX0NNRH0KK2ZpCisKK2lmIFsgISAtZCAvZXRjL3JwbSBdCit0aGVuCisJbWtkaXIgLXAgL2V0Yy9ycG0KK2ZpCisKK2lmIFsgISAtZiAke1BMQVRGT1JNX0ZJTEV9IF0KK3RoZW4KKwl0b3VjaCAke1BMQVRGT1JNX0ZJTEV9CitmaQorCitpZiAhIGBncmVwIC1GIC1xICJub2FyY2gtc3VzZSIgJHtQTEFURk9STV9GSUxFfWA7IHRoZW4KKwlpZiBbICR7QVJDSH0gPSBpNjg2IF07dGhlbgorCQllY2hvICJpNDg2LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWVsaWYgWyAke0FSQ0h9ID0geDg2XzY0IF07IHRoZW4KKwkJZWNobyAiaTQ4Ni1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni0uKi1saW51eC4qIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIm5vYXJjaC1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LW5vYXJjaCIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LXBjIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJZWxzZQorCQllY2hvICIke0FSQ0h9LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWZpCitmaQorCitpZiBbIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke0JBU0VfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCWZpCisJZG9uZQorZmkKKworaWYgWyAtZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19MSVNUfQorCWRvCisJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkkUlBNX0lOU1RBTExfQ01EICR7cGtnfQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgLWQgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfUEFDS0FHRVNfTElTVH0KKwlkbworCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJZmkKKwlkb25lCitmaQorCitpZiBbIC1kICR7QVBQX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7QVBQX1BBQ0tBR0VTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJZWNobyAiJHtwa2d9IiB8IGdyZXAgLXEgImFwYWNoZVx8eHBkZiIKKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCSRSUE1fSU5TVEFMTF9DTURfTk9TQ1JJUFRTICR7cGtnfQorCQkJZmkKKwkJZWxzZQorCQkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJCWZpCisJCWZpCisJZG9uZQorZmkKKworaWYgWyAhIC1kICR7U05BUFNIT1RTX1RFU1RGSUxFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorZmkKKworaWYgWyAtZCAke0FQUF9URVNURklMRVNfRElSfSBdCit0aGVuCisJY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1RFU1RGSUxFU19MSVNUfQorCWRvCisJCWNwIC1mICR7cGtnfSAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorCWRvbmUKK2ZpCisKK2NkICR7V09SS19ESVJ9CisKKyMgU3RlcCAzOiBTZXQgZW52aXJvbm1lbnQKK2VjaG8gIiIKK2VjaG8gIlNldCBlbnZpcm9ubWVudC4uLiIKK2VjaG8gIiIKKworY2hlY2sgKCkKK3sKKwlpZiBbICQ/IC1lcSAwIF0KKwl0aGVuCisJCWVjaG8gIlBBU1MiCisJZWxzZSAKKwkJZWNobyAiRkFJTCIKKwkJZXhpdCAxCisJZmkKK30KKworZWNobyAiIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiQ3JlYXRlIHRoZSBEaXJuYW1lcyBvbiB0YXJnZXQiCisKK2lmIFsgISAtZCAvZXRjL3JwbS9zeXNpbmZvIF0KK3RoZW4KKwlta2RpciAtcCAvZXRjL3JwbS9zeXNpbmZvCitmaQorCitjYXQgPiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIDw8IEVPRgorL2V0Yy9vcHQvbHNiCisvaG9tZS90ZXQvTFNCLnRvb2xzCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL2tzaAorL29wdC9sc2ItdGV0My1saXRlL2xpYi9wZXJsCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3Bvc2l4X3NoCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3RldDMKKy9vcHQvbHNiLXRldDMtbGl0ZS9saWIveHBnM3NoCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsL0RvY3VtZW50VGVtcGxhdGUKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS90ZXN0L2NsYXNzZXMKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdC93ZWIKKy9vcHQvbHNiL3Rlc3QvZG9jCisvb3B0L2xzYi90ZXN0L2xpYgorL29wdC9sc2IvdGVzdC9xbS9kaWFnbm9zdGljcworL29wdC9sc2IvdGVzdC9xbS9kb2MKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jL3Rlc3QvaHRtbAorL29wdC9sc2IvdGVzdC9xbS9kb2MvdGVzdC9wcmludAorL29wdC9sc2IvdGVzdC9xbS9kdG1sCisvb3B0L2xzYi90ZXN0L3FtL2R0bWwvdGVzdAorL29wdC9sc2IvdGVzdC9xbS9tZXNzYWdlcy90ZXN0Cisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiCisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiL1FNVGVzdAorL29wdC9sc2IvdGVzdC9xbS93ZWIKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViL2ltYWdlcworL29wdC9sc2IvdGVzdC9xbS93ZWIvc3R5bGVzaGVldHMKKy9vcHQvbHNiL3Rlc3QvcW0veG1sCisvb3B0L2xzYi90ZXN0L3NoYXJlCisvdXNyL3NoYXJlL2RvYy9sc2ItcnVudGltZS10ZXN0CisvdmFyL29wdC9sc2IKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2ZvbnRjb25maWcKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9mcmVldHlwZQorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2d0a3Z0cworL29wdC9sc2IvdGVzdC9kZXNrdG9wL2xpYnBuZworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3F0MworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hmdAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3htbAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hyZW5kZXIKKworCitFT0YKKworaWYgWyAtZiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIF0KK3RoZW4KKwllY2hvICJTdWNjZXNzIHRvIGNyZWF0IERpcm5hbWVzIGZpbGUiCitlbHNlIAorCWVjaG8gIkZhaWwgdG8gY3JlYXQgRGlybmFtZXMgZmlsZSIKK2ZpCisKK1sgLXggL3NiaW4vbGRjb25maWcgXSAmJiB7CitlY2hvICIiCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitlY2hvICJVcGRhdGUgY2FjaGUiCisvc2Jpbi9sZGNvbmZpZworY2hlY2s7Cit9CisKKyMgQ2hlY2sgbG9vcCBkZXZpY2UKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0KK3RoZW4KKwlpbnNtb2QgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAva2VybmVsL2RyaXZlcnMvYmxvY2svbG9vcC5rbworCWlmIFsgJD8gIT0gMCBdO3RoZW4KKwkJZWNobyAiSW5zbW9kIGxvb3Aua28gZmFpbGVkLiIKKwlmaQorZmkKKworIyBSZXNvbHZlIGxvY2FsaG9zdAorTE9DQUxIT1NUPWBob3N0bmFtZWAKK2lmICEgYGdyZXAgLUYgLXEgIiRMT0NBTEhPU1QiIC9ldGMvaG9zdHNgOyB0aGVuCisJZWNobyAiMTI3LjAuMC4xCSRMT0NBTEhPU1QiID4+IC9ldGMvaG9zdHMKK2ZpCisKKyMgV29ya2Fyb3VuZCB0byBhZGQgcGFydCBvZiBsb2NhbGVzIGZvciBMU0IgdGVzdAorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIElTTy04ODU5LTEgZGVfREUKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBJU08tODg1OS0xNSBkZV9ERS5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIFVURi04IGRlX0RFLlVURi04Citsb2NhbGVkZWYgLWkgZGVfREVAZXVybyAtZiBJU08tODg1OS0xNSBkZV9ERUBldXJvCitsb2NhbGVkZWYgLWkgZW5fSEsgLWYgSVNPLTg4NTktMSBlbl9ISworbG9jYWxlZGVmIC1pIGVuX1BIIC1mIElTTy04ODU5LTEgZW5fUEgKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xNSBlbl9VUy5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPLTg4NTktMQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBVVEYtOCBlbl9VUy5VVEYtOAorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPODg1OS0xCitsb2NhbGVkZWYgLWkgZXNfTVggLWYgSVNPLTg4NTktMSBlc19NWAorbG9jYWxlZGVmIC1pIGZyX0ZSIC1mIElTTy04ODU5LTEgZnJfRlIKK2xvY2FsZWRlZiAtaSBpdF9JVCAtZiBJU08tODg1OS0xIGl0X0lUCitsb2NhbGVkZWYgLWkgamFfSlAgLWYgRVVDLUpQIGphX0pQLmV1Y2pwCitsb2NhbGVkZWYgLWkgc2VfTk8gLWYgVVRGLTggc2VfTk8uVVRGLTgKK2xvY2FsZWRlZiAtaSB0YV9JTiAtZiBVVEYtOCB0YV9JTgorbG9jYWxlZGVmIC1pIGVzX0VTIC1mIElTTy04ODU5LTEgZXNfRVMKK2xvY2FsZWRlZiAtaSBmcl9GUkBldXJvIC1mIElTTy04ODU5LTEgZnJfRlJAZXVybworbG9jYWxlZGVmIC1pIGlzX0lTIC1mIFVURi04IGlzX0lTLlVURi04Citsb2NhbGVkZWYgLWkgemhfVFcgLWYgQklHNSB6aF9UVy5CSUc1Citsb2NhbGVkZWYgLWkgZW5fVVMgLWYgSVNPLTg4NTktMTUgZW5fVVMuSVNPLTg4NTktMTUKKworZWNobyAiIgorZWNobyAiSW5zdGFsbGF0aW9uIGRvbmUhIgorZWNobyAiIgorCisjIFN0ZXAgNDogU3RhcnQgTFNCIHRlc3QKK2lmIFsgLXggJHtMU0JfU1RBUlRfQ01EfSBdCit0aGVuCisJJHtMU0JfU1RBUlRfQ01EfQorZmkKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiUnVuIGFsbCB0aGUgY2VydGlmaWNhdGlvbiB2ZXJzaW9uIG9mIExTQiBUZXN0cyIKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworTFNCX0RJU1RfQ0hFQ0tFUj0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3V0aWxzL2Rpc3QtY2hlY2tlci5wbCIKK1NFU1NJT049IiR7V09SS19ESVJ9L3Nlc3Npb24iCitpZiBbICEgLWUgJHtTRVNTSU9OfSBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHNlc3Npb24gZmlsZS4iCisJZWNobyAiWW91IG11c3QgcnVuIExTQiB0ZXN0IGZyb20gd2ViYnJvd2VyLiIKKwlleGl0IDEKK2ZpCisKK2lmIFsgLXggJHtMU0JfRElTVF9DSEVDS0VSfSBdCit0aGVuCisJJHtMU0JfRElTVF9DSEVDS0VSfSAtdjIgLWYgJHtTRVNTSU9OfQorCWNoZWNrCitmaQorCitlY2hvICIiCitlY2hvICJMU0IgdGVzdCBjb21wbGV0ZS4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgZmlsZSBpbiAvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3Jlc3VsdHMvIgorZWNobyAiIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9wYWNrYWdlc19saXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Q4MzUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdApAQCAtMCwwICsxLDUwIEBACitMU0JfUkVMRUFTRT0icmVsZWFzZWQtNC4xLjAiCitMU0JfQVJDSD0ibHNiYXJjaCIKKworQkFTRV9QQUNLQUdFU19MSVNUPSJsc2Itc2V0dXAtNC4xLjAtMS5ub2FyY2gucnBtIgorCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVD0ibHNiLWRpc3QtY2hlY2tlci01LjAuMC4xLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtZGV2ZWwtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14dmZiLTEuMi4wLTIyLnRhcmdldGFyY2gucnBtIFwKKwkiCisKK1JVTlRJTUVfUEFDS0FHRVNfTElTVD0ibHNiLWNtZGNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItbGliY2hrLTQuMS40LTUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1xbS0yLjItMTIubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRhc2stZGlzdC10ZXN0a2l0LTQuMS45LTEubm9hcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS00LjEuMTUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY3BwLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1kZXNrdG9wLTQuMS45LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWRlc2t0b3AtdDJjLTQuMS4zLTMudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWxpYnN0ZGNwcC00LjEuMC0xOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1vbHZlci1jb3JlLTQuMS40LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXBlcmwtNC4xLjgtMS5ub2FyY2gucnBtIFwKKwlsc2ItdGVzdC1wcmludGluZy00LjEuMi0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1weXRob24tNC4xLjUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQzLWF6b3YtNC4xLjEtMy50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQ0LWF6b3YtNC4xLjMtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteHRzNS01LjEuNS00NS5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1hbHNhLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1jb3JlLXQyYy00LjEuMi0zLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC14bWwyLWF6b3YtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfUEFDS0FHRVNfTElTVD0ibHNiLXB5dGhvbi0yLjQuNi03LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1hcGFjaGUtMi4yLjE0LTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRjbC04LjUuNy04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1leHBlY3QtNS40My4wLTEzLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1ncm9mZi0xLjIwLjEtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcmFwdG9yLTEuNC4xOS01LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14cGRmLTEuMDEtMTQubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXNhbWJhLTMuNC4zLTkubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXJzeW5jLTMuMC42LTYubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfVEVTVEZJTEVTX0xJU1Q9ImV4cGVjdC10ZXN0cy50YXIgXAorCXRjbC10ZXN0cy50YXIgXAorCXJhcHRvci10ZXN0cy50YXIgXAorCXRlc3QxLnBkZiBcCisJdGVzdDIucGRmIFwKKwkiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3Nlc3Npb24gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Y2EyZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uCkBAIC0wLDAgKzEsMTk0IEBACitbR0VORVJBTF0KK1ZFUkJPU0VfTEVWRUw6ICAgMQorQVJDSElURUNUVVJFOiAgICB0YXJnZXRhcmNoCitVU0VfSU5URVJORVQ6ICAgIDEKK1NURF9WRVJTSU9OOiAgICAgTFNCIDQuMQorU1REX1BST0ZJTEU6ICAgICBubworW2NtZGNoa10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbbGliY2hrXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1thbHNhLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbYWxzYS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Fsc2EtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvYWxzYS10MmMvcmVzdWx0cworCitbY29yZV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZXxsb2NhbHwqXQorQVVUT1JFUExZX1BST1ZJREVTX0JBU0g6IG4KK0FVVE9SRVBMWV9URVNUUlVOX1BBVEg6IC9ob21lL3RldC90ZXN0X3NldHMKK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX0tFUk5FTF9OQU1FOiB2bWxpbnV6CitBVVRPUkVQTFlfSU5TVEFMTF9MU0JQQU1fQ09ORjogeQorQVVUT1JFUExZX1BST1ZJREVTX0NfU0hFTEw6IG4KK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX1NFVF9QQVNTX01JTl9EQVlTOiB5CitBVVRPUkVQTFlfUFJPVklERVNfU1lTVl9JTklUOiAKK0FVVE9SRVBMWV9JU05UQUxMX0RFVlM6IHkKK0FVVE9SRVBMWV9TVVBQT1JUU19GSUxFX0NNRDogeQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS90ZXQvdGVzdF9zZXRzCitBVVRPUkVQTFlfU1VQUE9SVFNfTkxTOiBuCitBVVRPUkVQTFlfU1VQUE9SVFNfUFJPQ0VTU19BQ0NPVU5USU5HOiBuCitBVVRPUkVQTFlfUEFUSF9UT19SQy5EOiAKK0FVVE9SRVBMWV9BTExPV1NfTUFLRURFVjogbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUvdGV0L3Rlc3Rfc2V0cy9yZXN1bHRzCisKK1tjb3JlLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS10MmMvcmVzdWx0cworCitbY3BwLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY3BwLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY3BwLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NwcC10MmMvcmVzdWx0cworCitbZGVza3RvcF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZGVza3RvcHxsb2NhbHwqXQorQVVUT1JFUExZX0RFU0tUT1BfRU5WSVJPTk1FTlQ6IFtkZWZhdWx0XQorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcAorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1NIT1dfU1VNTUFSWV9SRVBPUlQ6IAorQVVUT1JFUExZX09SR0FOSVNBVElPTjogTi9BCitBVVRPUkVQTFlfWFZGQl9ESVNQTEFZOiBbZGVmYXVsdF0KKworW2Rlc2t0b3AtdDJjXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tkZXNrdG9wLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcC10MmMKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9kZXNrdG9wLXQyYy9yZXN1bHRzCisKK1tsaWJzdGRjcHBdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2xpYnN0ZGNwcHxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9saWJzdGRjcHBfNC4xLjAKK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX0dOVV9UUklQTEVUOiAKKworW29sdmVyXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tvbHZlcnxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3Qvb2x2ZXItY29yZQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvdmFyL29wdC9sc2IvdGVzdC9vbHZlci1jb3JlCisKK1twZXJsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1twZXJsfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9wZXJsCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcGVybC9yZXN1bHRzCisKK1twcmludGluZ10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcHJpbnRpbmd8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3ByaW50aW5nCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcHJpbnRpbmcvcmVzdWx0cworCitbcHl0aG9uXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tweXRob258bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbi9yZXN1bHRzCisKK1txdDMtYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcXQzLWF6b3Z8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3F0My1hem92CitBVVRPUkVQTFlfWDExX0ZPTlRfUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcXQzLWF6b3YvcmVzdWx0cworCitbcXQ0LWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3F0NC1hem92fGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9xdDQtYXpvdgorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3F0NC1hem92L3Jlc3VsdHMKKworW3htbDItYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNXxsb2NhbHwqXQorQVVUT1JFUExZX1hUX0ZPTlRQQVRIX0dPT0Q6IFtkZWZhdWx0XQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNQorQVVUT1JFUExZX1hWRkJfRElTUExBWTogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNS94dHM1L3Jlc3VsdHMKK0FVVE9SRVBMWV9YVF9GT05UUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorCitbYXBhY2hlXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tleHBlY3RdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2dyb2ZmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tyYXB0b3JdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3JzeW5jXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tzYW1iYV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbdGNsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1t4cGRmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0XzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0XzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTEyNTAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3RfMS4wLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiQXV0b21hdGVzIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgdGVzdHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xTQl9UZXN0LnNoO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PTcwNjNiYjU0YjA0NzE5ZGYwNzE2YjUxMzQ0N2Y0ZmMwIgorCitTUkNfVVJJID0gImZpbGU6Ly9MU0JfVGVzdC5zaCBcCisJCSAgIGZpbGU6Ly9wYWNrYWdlc19saXN0IFwKKwkJICAgZmlsZTovL3Nlc3Npb24gXAorCQkgICAiCitSREVQRU5EU18ke1BOfSA9ICJycG0iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9MU0JfVGVzdC5zaCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAgJHtEfS9vcHQvbHNiLXRlc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9wYWNrYWdlc19saXN0ICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXNzaW9uICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL2lhMzIvZycgLWUgJ3MvdGFyZ2V0YXJjaC9pNDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gveDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9hbWQ2NC9nJyAtZSAncy90YXJnZXRhcmNoL3g4Nl82NC9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL3g4Ni02NC9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL3BwYzMyL2cnIC1lICdzL3RhcmdldGFyY2gvcHBjL2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gvUFBDMzIvZycgJHtEfS9vcHQvbHNiLXRlc3Qvc2Vzc2lvbgorCWZpCisKKwkjIEZvciBhIHBwYzY0IHRhcmdldC4gdGhlIGRlZmF1bHQgdXNlcnNwYWNlIGlzIDMyYi4KKwkjIFRoZXJlZm9yZSwgb25seSBjaGFuZ2UgdGhlIGxzYmFyY2ggYW5kIHRhcmdldGFyY2gKKwkjIGluIHRoZSBwYWNrYWdlX2xpc3Qgd2hlbiBNTElCPWxpYjY0IGlzIGJlaW5nIHVzZWQuCisJIyBPdGhlcndpc2UsIGJ5IGRlZmF1bHQsIHRoZSBwcGMzMiBMU0IgcGFja2FnZXMKKwkjIHdpbGwgYmUgZG93bmxvYWRlZCBieSBMU0JfVGVzdC5zaAorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQlpZiBbICIke1BOfSIgIT0gIiR7QlBOfSIgXTt0aGVuCisJCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9wcGM2NC9nJyAtZSAncy90YXJnZXRhcmNoL3BwYzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL1BQQzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfSArPSAiL29wdC9sc2ItdGVzdC8qIFwKKyAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNvZi9sc29mXzQuODkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3ZGU5YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCkBAIC0wLDAgKzEsNTcgQEAKK1NVTU1BUlkgPSAiTGlTdCBPcGVuIEZpbGVzIHRvb2wiCitERVNDUklQVElPTiA9ICJMc29mIGlzIGEgVW5peC1zcGVjaWZpYyBkaWFnbm9zdGljIHRvb2wuIFwKK0l0cyBuYW1lIHN0YW5kcyBmb3IgTGlTdCBPcGVuIEZpbGVzLCBhbmQgaXQgZG9lcyBqdXN0IHRoYXQuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorCitTUkNfVVJJID0gImZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvbHNvZl8ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI5Y2QzNGYzZmI4Njg1NmExMjVhYmJmMmJlM2EzODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFhYzJmYzVmZGM5NDQ3OTNiYWY0MWExNDAwMmI2ZGViNWEyOTA5NmIzODc3NDRlMjhmOGMzMGEzNjBhMzcxOCIKKworTE9DQUxTUkMgPSAiZmlsZTovLyR7V09SS0RJUn0vbHNvZl8ke1BWfS9sc29mXyR7UFZ9X3NyYy50YXIiCitTID0gIiR7V09SS0RJUn0vbHNvZl8ke1BWfV9zcmMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vMDBSRUFETUU7YmVnaW5saW5lPTY0NTtlbmRsaW5lPTY3OTttZDU9OTY0ZGYyNzVkMjY0MjliYTNiMzlkYmI5ZjIwNTE3MmEiCisKK3B5dGhvbiBkb191bnBhY2sgKCkgeworICAgICMgdGVtcG9yYXJpbHkgY2hhbmdlIFMgZm9yIHVucGFjaworICAgICMgb2YgbHNvZl8ke1BWfQorICAgIHMgPSBkLmdldFZhcignUycsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vbHNvZl8ke1BWfScpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgIyB0ZW1wb3JhcmlseSBjaGFuZ2UgU1JDX1VSSSBmb3IgdW5wYWNrCisgICAgIyBvZiBsc29mXyR7UFZ9X3NyYworICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyR7TE9DQUxTUkN9JykKKyAgICBkLnNldFZhcignUycsIHMpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgZC5zZXRWYXIoJ1NSQ19VUkknLCBzcmNfdXJpKQorfQorCitleHBvcnQgTFNPRl9JTkNMVURFID0gIiR7U1RBR0lOR19JTkNESVJ9IgorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBMU09GX0FSPSIke0FSfSBjciIKKwlleHBvcnQgTFNPRl9SQU5MSUI9IiR7UkFOTElCfSIKKyAgICAgICAgaWYgWyAieCR7R0xJQkNWRVJTSU9OfSIgIT0gIngiIF07dGhlbgorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9YGVjaG8gJHtHTElCQ1ZFUlNJT059IHxzZWQgLWUgJ3MsXC4sLGcnYAorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9Ii1ER0xJQkNWPSR7TElOVVhfQ0xJQn0iCisgICAgICAgICAgICAgICAgZXhwb3J0IExJTlVYX0NMSUIKKyAgICAgICAgZmkKKwl5ZXMgfCAuL0NvbmZpZ3VyZSBsaW51eAorfQorCitleHBvcnQgSSA9ICIke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBMID0gIiR7U1RBR0lOR19JTkNESVJ9IgorZXhwb3J0IEVYVFJBX09FTUFLRSA9ICIiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9JyAnQ0ZHTD0ke0xERkxBR1N9IC1MLi9saWIgLWxsc29mJyAnREVCVUc9JyAnSU5DTD0ke0NGTEFHU30nCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJaW5zdGFsbCAtbSA0NzU1IGxzb2YgJHtEfSR7c2JpbmRpcn0vbHNvZgorCWluc3RhbGwgLW0gMDY0NCBsc29mLjggJHtEfSR7bWFuZGlyfS9tYW44L2xzb2YuOAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLVJlbmFtZS1ydW50ZXN0c19ub2x0cC5zaC1zY3JpcHQtc28taGF2ZS11bmlxdWUtbmFtZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0ZDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwyMDIgQEAKK0Zyb20gOTc1MWE2NTI2Y2ZmY2RmNGUzZGMyY2IzMzY0MTI1OWE3YmUwMGUxOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNyBEZWMgMjAxMyAxODoyNDozMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgcnVudGVzdHNfbm9sdHAuc2ggc2NyaXB0IHNvIGhhdmUgdW5pcXVlIG5hbWUKKworKiB0aGV5IGFyZSBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgdGFyZ2V0IHBhdGgKKyAgL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaAorICBhbmQgb3ZlcndyaXRlIGVhY2ggb3RoZXIgaW4gbm9uLWRldGVybWluaXN0aWMgd2F5CisgIHdoZW4gbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB1c2VkIGluICJtYWtlIGluc3RhbGwiCisKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoIHwgMzEgKysrKysrKysrKysrKysrKworIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgMzEgLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgNDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgNzIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODRmMzk4ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVuaXBjdGVzdHNfbm9sdHAuc2gKK0BAIC0wLDAgKzEsMzEgQEAKKysjIS9iaW4vc2gKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCisrIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKysjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworKyMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworKyMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCisrIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKysjIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKysjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworKyMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCisrZXhpdF9jb2RlPTAKKytlY2hvICJzeXN2aXBjIHRlc3RzIgorK2ZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKysgICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCisrICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKysgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysgICAgICAgICAgICAgIGV4aXRfY29kZT0kPworKyAgICAgIGZpCisrZG9uZQorK2V4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggODRmMzk4Zi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDMxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistZXhpdF9jb2RlPTAKKy1lY2hvICJzeXN2aXBjIHRlc3RzIgorLWZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKy0gICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCistICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKy0gICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0gICAgICAgICAgICAgIGV4aXRfY29kZT0kPworLSAgICAgIGZpCistZG9uZQorLWV4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggNDNjYjdlMi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDQxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistb2xkaG9zdG5hbWU9YGhvc3RuYW1lYAorLWV4aXRfY29kZT0wCistZWNobyAidW5zaGFyZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKHVuc2hhcmUpIgorLQkuL3V0c3Rlc3Rfbm9sdHAgdW5zaGFyZSAkaQorLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0JCWV4aXRfY29kZT0kPworLQlmaQorLWRvbmUKKy1lY2hvICJjbG9uZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKGNsb25lKSIKKy0JLi91dHN0ZXN0X25vbHRwIGNsb25lICRpCistCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorLQkJZXhpdF9jb2RlPSQ/CistCWZpCistZG9uZQorLWhvc3RuYW1lICIkb2xkaG9zdG5hbWUiCistZXhpdCAkZXhpdF9jb2RlCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudXRzdGVzdHNfbm9sdHAuc2ggYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjQzY2I3ZTIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCitAQCAtMCwwICsxLDQxIEBACisrIyEvYmluL3NoCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCisrIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKysjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKysjIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworKyMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCisrIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCisrIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKysjIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworK29sZGhvc3RuYW1lPWBob3N0bmFtZWAKKytleGl0X2NvZGU9MAorK2VjaG8gInVuc2hhcmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpICh1bnNoYXJlKSIKKysJLi91dHN0ZXN0X25vbHRwIHVuc2hhcmUgJGkKKysJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrCQlleGl0X2NvZGU9JD8KKysJZmkKKytkb25lCisrZWNobyAiY2xvbmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpIChjbG9uZSkiCisrCS4vdXRzdGVzdF9ub2x0cCBjbG9uZSAkaQorKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysJCWV4aXRfY29kZT0kPworKwlmaQorK2RvbmUKKytob3N0bmFtZSAiJG9sZGhvc3RuYW1lIgorK2V4aXQgJGV4aXRfY29kZQorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLWx0cC12bWEwMy1maXgtdGhlLWFsZ2lubWVudC1vZi1wYWdlLXNpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ZWFmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjQzODgxZDcxZDJkNDkwMjdjM2RjMTVmZTI3ZWJlN2Y0ZWU2ODcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBKdW4gMjAxNSAwOTo1MTowOSArMDgwMAorU3ViamVjdDogW1BBVENIXSBsdHA6IHZtYTAzIGZpeCB0aGUgYWxnaW5tZW50IG9mIHBhZ2Ugc2l6ZQorCit0aGUgb2Zmc2V0IHRoZSBwYXJhbSBvZiBtbWFwMigpIGRvZXNuJ3QgYWxpZ24gdGhlIHBhZ2Ugc2l6ZSwgYnV0LAordGhpcyBwYXJhbSBhbGxvdyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZSBhcyByZXR1cm5lZAorYnkgc3lzY29uZihfU0NfUEFHRV9TSVpFKS5tZWFud2hpbGUgb2Zmc2V0ICogNDA5NiBtdXN0IGJlIGEKK211bHRpcGxlIG9mIHRoZSBzeXN0ZW0gcGFnZSBzaXplLCBzbyBtb2RpZnkgdGhlIGlucHV0IHBhcmFtIG9mIG9mZnNldAorcGdvZmYgPSAoVUxPTkdfTUFYIC0gMSkmKH4oKHBnc3otMSk+PjEyKSk7CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitpbmRleCA2YWY5OTYwLi5iODZkN2NlIDEwMDY0NAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitAQCAtODksNyArODksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJaWYgKGZkID09IC0xKQorIAkJCXRzdF9icmttKFRCUk9LIHwgVEVSUk5PLCBOVUxMLCAib3BlbiAlcyIsIFRFU1RGSUxFKTsKKyAKKy0JCXBnb2ZmID0gVUxPTkdfTUFYIC0gMTsKKysJCXBnb2ZmID0gKFVMT05HX01BWCAtIDEpJih+KChwZ3N6LTEpPj4xMikpOworIAkJbWFwID0gbW1hcDIoTlVMTCwgcGdzeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCisgCQkJICAgIGZkLCBwZ29mZik7CisgCQlpZiAobWFwID09IE1BUF9GQUlMRUQpCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLW51bWEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NGYwMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1tQQVRDSF0gYWRkIGtub2IgdG8gY29udHJvbCB3aGV0aGVyIG51bWEgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworb3RoZXJ3aXNlIHRoZSByYW5kb20gZGVwZW5kZW5jeSB3aWxsIGJlIGdlbmVyYXRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmMzk3ZTcuLjEzNTcyNTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0Miw2ICsxNDIsMTIgQEAgZWxzZQorICAgICBBQ19TVUJTVChbV0lUSF9SRUFMVElNRV9URVNUU1VJVEVdLFsibm8iXSkKKyBmaQorIAorK0FDX0FSR19XSVRIKFtudW1hXSwKKysgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbnVtYV0sCisrICAgIFt3aXRob3V0IHRoZSBudW1hIHN1cHBvcnRdKSwKKysgIFtdLFt3aXRoX251bWE9eWVzXSwKKyspCisrCisgQUNfQ09ORklHX1NVQkRJUlMoW3V0aWxzL2Zmc2ItNi4wLXJjMl0pCisgCisgIyBFTkQgdGVzdHN1aXRlcyBrbm9icworQEAgLTE1OSw3ICsxNjUsOSBAQCBMVFBfQ0hFQ0tfU0lHTkFMCisgTFRQX0NIRUNLX1NZU0NBTExfRVZFTlRGRAorIExUUF9DSEVDS19TWVNDQUxMX0tFWUNUTAorIExUUF9DSEVDS19TWVNDQUxMX01PRElGWV9MRFQKKytpZiB0ZXN0ICJ4JHdpdGhfbnVtYSIgPSB4eWVzOyB0aGVuCisgTFRQX0NIRUNLX1NZU0NBTExfTlVNQQorK2ZpCisgTFRQX0NIRUNLX1NZU0NBTExfUVVPVEFDVEwKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9TSUdOQUxGRAorIExUUF9DSEVDS19TWVNDQUxMX1VOU0hBUkUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItdGlycGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci10aXJwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZmNGM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItdGlycGMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorW1BBVENIXSBhZGQga25vYiB0byBjb250cm9sIHdoZXRoZXIgdGlycGMgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGlycGMgc3VwcG9ydCBpcyBicm9rZW4gdXBzdHJlYW0uIGluIHRoZSBtZWFudGltZSwgYWxsb3cgdG8gZGlzYWJsZSB0aXJwYy4KKworU2lnbmVkLW9mZi1ieTogRmF0aGkgQm91ZHJhIDxmYXRoaS5ib3VkcmFAbGluYXJvLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTk4LDYgKzk4LDEzIEBAIGlmIHRlc3QgIngkd2l0aF9weXRob24iID0geHllczsgdGhlbgorIGVsc2UKKyAgICAgQUNfU1VCU1QoW1dJVEhfUFlUSE9OXSxbIm5vIl0pCisgZmkKKysKKysjIFRJIFJQQworK0FDX0FSR19XSVRIKFt0aXJwY10sCisrICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXRpcnBjXSwKKysgICAgW3dpdGhvdXQgbGlidGlycGMgc3VwcG9ydF0pLAorKyAgW10sW3dpdGhfdGlycGM9eWVzXSwKKyspCisgIyBFTkQgdG9vbHMga25vYnMKKyAKKyAjIFRlc3RzdWl0ZXMga25vYnMKK0BAIC0xODIsNyArMTg5LDkgQEAgTFRQX0NIRUNLX1JFTkFNRUFUCisgTFRQX0NIRUNLX0ZBTExPQ0FURQorIExUUF9DSEVDS19TWVNDQUxMX0ZDTlRMCisgTFRQX0NIRUNLX1NZU0NBTExfUEVSRl9FVkVOVF9PUEVOCisraWYgdGVzdCAieCR3aXRoX3RpcnBjIiA9IHh5ZXM7IHRoZW4KKyBMVFBfQ0hFQ0tfVElSUEMKKytmaQorIExUUF9DSEVDS19URUUKKyBMVFBfQ0hFQ0tfU1BMSUNFCisgTFRQX0NIRUNLX1ZNU1BMSUNFCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2x0cC1Eby1ub3QtbGluay1hZ2FpbnN0LWxpYmZsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZkNGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDViZGE5YzBhZjU2ODY5YzZmZjJjMjVkMzhlYTA4NzE3OWM5NDZiYzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTEgTWFyIDIwMTQgMTQ6NDc6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbHRwOiBEb24ndCBsaW5rIGFnYWluc3QgbGliZmwKKworV2UgaGF2ZSBhbHJlYWR5IGRlZmluZWQgeXl3cmFwIGZ1bmN0aW9uIGluIHNjYW4ubCBmaWxlLiBBZnRlciB0aGlzLCB3ZSBubyBsb25nZXIgbmVlZCB0bworbGluayBhZ2FpbnN0IGxpYmZsIGFuZCBzbyBubyBsb25nZXIgZ2V0IGVycm9ycyBhYm91dCB1bmRlZmluZWQgcmVmZXJlbmNlcyB0byB5eWxleC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcGFuL01ha2VmaWxlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGFuL01ha2VmaWxlIGIvcGFuL01ha2VmaWxlCitpbmRleCA0Y2M2NDY2Li5hNGI1NzViIDEwMDY0NAorLS0tIGEvcGFuL01ha2VmaWxlCisrKysgYi9wYW4vTWFrZWZpbGUKK0BAIC0zMSw3ICszMSw3IEBAIENQUEZMQUdTCQkrPSAtV25vLWVycm9yCisgCisgQ1BQRkxBR1MJCSs9IC1JJChhYnNfc3JjZGlyKQorIAorLUxETElCUwkJCSs9IC1sbSAkKExFWExJQikKKytMRExJQlMJCQkrPSAtbG0KKyAKKyBMRkxBR1MJCQkrPSAtbAorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbWFrZS1zZXRyZWdpZDAyLXdvcmsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzYwMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1tQQVRDSF0gbWFrZSBzZXRyZWdpZDAyIHdvcmsKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCit0aGVyZSBpcyBubyAibm9ib2R5IiBncm91cCBpbiBvZS1jb3JlLCB0aGUgdXNlciAibm9ib2R5IiBiZWxvbmdzIHRvCisibm9ncm91cCIgZ3JvdXAsIHNvIHJlcGxhY2Ugbm9ib2R5IHdpdGggbm9ncm91cCB0byBtYWtlIHRoZSB0ZXN0IHBhc3MKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMgfCAxNiArKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK2luZGV4IDgwNTg2MjcuLjg2NmJlZTQgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3NldHJlZ2lkL3NldHJlZ2lkMDIuYworKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK0BAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBnaWRfdCBuZWdfb25lID0gLTE7CisgCisgc3RhdGljIHN0cnVjdCBwYXNzd2QgKmx0cHVzZXI7CisgCistc3RhdGljIHN0cnVjdCBncm91cCBub2JvZHksIHJvb3QsIGJpbjsKKytzdGF0aWMgc3RydWN0IGdyb3VwIG5vZ3JvdXAsIHJvb3QsIGJpbjsKKyAKKyAvKgorICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0ZXN0IGRhdGEuICBFYWNoIHN0cnVjdHVyZSBpbiB0aGUgYXJyYXkKK0BAIC01NywxNyArNTcsMTcgQEAgc3RydWN0IHRlc3RfZGF0YV90IHsKKyAJY2hhciAqdGVzdF9tc2c7CisgfSB0ZXN0X2RhdGFbXSA9IHsKKyAJeworLQkmbmVnX29uZSwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJm5lZ19vbmUsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIHJvb3QpLCJ9LCB7CistCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIGJpbikifSwgeworLQkmcm9vdC5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwtMSksIn0sIHsKKy0JJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIC0xKSwifSwgeworLQkmcm9vdC5ncl9naWQsICZiaW4uZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwgYmluKSJ9LCB7CistCSZiaW4uZ3JfZ2lkLCAmcm9vdC5ncl9naWQsIEVQRVJNLCAmbm9ib2R5LCAmbm9ib2R5LAorKwkmYmluLmdyX2dpZCwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIHJvb3QpLCJ9CisgfTsKKyAKK0BAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHZvaWQgc2V0dXAodm9pZCkKKyB9IHdoaWxlICgwKQorIAorIAlHRVRfR0lEKHJvb3QpOworLQlHRVRfR0lEKG5vYm9keSk7CisrCUdFVF9HSUQobm9ncm91cCk7CisgCUdFVF9HSUQoYmluKTsKKyAKKyAJVEVTVF9QQVVTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE1MDQyMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4ZWJmMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIKQEAgLTAsMCArMSw4NiBAQAorU1VNTUFSWSA9ICJMaW51eCBUZXN0IFByb2plY3QiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggVGVzdCBQcm9qZWN0IGlzIGEgam9pbnQgcHJvamVjdCB3aXRoIFNHSSwgSUJNLCBPU0RMLCBhbmQgQnVsbCB3aXRoIGEgZ29hbCB0byBkZWxpdmVyIHRlc3Qgc3VpdGVzIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgdGhhdCB2YWxpZGF0ZSB0aGUgcmVsaWFiaWxpdHksIHJvYnVzdG5lc3MsIGFuZCBzdGFiaWxpdHkgb2YgTGludXguIFRoZSBMaW51eCBUZXN0IFByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIGZvciB0ZXN0aW5nIHRoZSBMaW51eCBrZXJuZWwgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2x0cC5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9ydW5fZnJlZXplci5zaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTE3O21kNT04NmE2MWQyYzA0MmQ1OTgzNmZmYjM1M2EyMTQ1NjQ5OCBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9tZW1vcnlfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9jcHVfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9DT1BZSU5HO21kNT0yMTZlNDNiNzJlZmJlNGVkOTAxN2NjMTljNGM2OGIwMSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9yZWFsdGltZS9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgZmlsZTovL3Rvb2xzL25ldHBpcGUtMi40L0NPUFlJTkc7bWQ1PTllMzc4MWJiNWZlNzg3YWE4MGUxZjUxZjUwMDZiNmZhIFwKKyAgICBmaWxlOi8vdG9vbHMvbmV0cGlwZS0yLjQtaXB2Ni9DT1BZSU5HO21kNT05ZTM3ODFiYjVmZTc4N2FhODBlMWY1MWY1MDA2YjZmYSBcCisgICAgZmlsZTovL3Rvb2xzL3RvcC1MVFAvcHJvYy9DT1BZSU5HO21kNT1hZWZjODhlYjhhNDE2NzJmYmZjZmU2YjY5YWI4YzQ5YyBcCisgICAgZmlsZTovL3Rvb2xzL3BvdW5kZXIyMS9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2JlbmNobWFyay9rZXJuYmVuY2gtMC40Mi9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2Zmc2ItNi4wLXJjMi9DT1BZSU5HO21kNT1jNDYwODIxNjdhMzE0ZDc4NWQwMTJhMjQ0NzQ4ZDgwMyBcCisiCisKK0RFUEVORFMgPSAiYXR0ciBsaWJhaW8gbGliY2FwIGFjbCBvcGVuc3NsIHppcC1uYXRpdmUiCitTUkNSRVYgPSAiNzdkMGI3ZmQwMTQ4Y2U2NTdjNWEyNTA2MDY2N2U5NzhjMDc2NjJhMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xpbnV4LXRlc3QtcHJvamVjdC9sdHAuZ2l0IFwKKyAgICBmaWxlOi8vMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggXAorICAgIGZpbGU6Ly9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBcCisgICAgZmlsZTovL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLWtub2ItZm9yLW51bWEucGF0Y2ggXAorICAgIGZpbGU6Ly9hZGQta25vYi1mb3ItdGlycGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWx0cC12bWEwMy1maXgtdGhlLWFsZ2lubWVudC1vZi1wYWdlLXNpemUucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2V4cG9ydCBwcmVmaXggPSAiL29wdC9sdHAiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL29wdC9sdHAiCisKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS13aXRoLW51bWEsIC0td2l0aG91dC1udW1hLCBudW1hY3RsLCIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi1JICR7U30vdGVzdGNhc2VzL3JlYWx0aW1lL200IgorRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcG93ZXItbWFuYWdlbWVudC10ZXN0c3VpdGUgLS13aXRoLXJlYWx0aW1lLXRlc3RzdWl0ZSAiCisjIGx0cCBuZXR3b3JrL3JwYyB0ZXN0IGNhc2VzIGZ0YmZzIHdoZW4gbGlidGlycGMgaXMgZm91bmQKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC10aXJwYyAiCisKKyMgVGhlIG1ha2VmaWxlcyBtYWtlIGV4Y2Vzc2l2ZSB1c2Ugb2YgbWFrZSAtQyBhbmQgc2V2ZXJhbCBpbmNsdWRlIHRlc3RjYXNlcy5taworIyB3aGljaCB0cmlnZ2VycyBhIGJ1aWxkIG9mIHRoZSBzeXNjYWxsIGhlYWRlci4gVG8gcmVwcm9kdWNlLCBidWlsZCBsdHAsCisjIHRoZW4gZGVsZXRlIHRoZSBoZWFkZXIsIHRoZW4gIm1ha2UgLWogWFgiIGFuZCB3YXRjaCByZWdlbi5zaCBydW4gbXVsdGlwbGUKKyMgdGltZXMuIEl0cyBlYXNpZXIgdG8gZ2VuZXJhdGUgdGhpcyBvbmNlIGhlcmUgaW5zdGVhZC4KK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJKCBtYWtlIC1DICR7Qn0vdGVzdGNhc2VzL2tlcm5lbCBpbmNsdWRlL2xpbnV4X3N5c2NhbGxfbnVtYmVycy5oICkKK30KKworZG9faW5zdGFsbCgpeworICAgIGluc3RhbGwgLWQgJHtEfS9vcHQvbHRwLworICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IFNLSVBfSURDSEVDSz0xIGluc3RhbGwKKworICAgICMgQ29weSBQT1NJWCB0ZXN0IHN1aXRlIGludG8gJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcyBieSBtYW51YWwKKyAgICBjcCAtciB0ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUgJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcworfQorCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIGUyZnNwcm9ncy1ta2UyZnMgcHl0aG9uLWNvcmUgbGliYWlvIGJhc2ggZ2F3ayBleHBlY3QiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgIC9vcHQvbHRwL3J1bnRlc3QvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RjYXNlcy8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC9zY2VuYXJpb19ncm91cHMvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0c2NyaXB0cy8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RzY3JpcHRzL29wZW5fcG9zaXhfdGVzdHN1aXRlLy5kZWJ1ZyBcCisiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiL29wdC9sdHAvbGliL2xpYm1lbS5hIgorCitGSUxFU18ke1BOfSArPSAiL29wdC9sdHAvKiAvb3B0L2x0cC9ydW50ZXN0LyogL29wdC9sdHAvc2NlbmFyaW9fZ3JvdXBzLyogL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vKi9iaW4vKiAvb3B0L2x0cC90ZXN0c2NyaXB0cy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9jb25mb3JtYW5jZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9Eb2N1bWVudGF0aW9uLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2Z1bmN0aW9uYWwvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvaW5jbHVkZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9zY3JpcHRzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3N0cmVzcy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS90b29scy8qIgorCisjIEF2b2lkIGdlbmVyYXRlZCBiaW5hcmllcyBzdHJpcHBpbmcuIE90aGVyd2lzZSBzb21lIG9mIHRoZSBsdHAgdGVzdHMgc3VjaCBhcyBsZGQwMSAmIG5tMDEgZmFpbHMKK0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisjIEhvd2V2ZXIsIHRlc3RfYXJjaF9zdHJpcHBlZCBpcyBhbHJlYWR5IHN0cmlwcGVkLCBzby4uLgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImFscmVhZHktc3RyaXBwZWQiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMS1Eb24tdC1yZXVzZS13ZWFrLXN5bWJvbC1vcHRvcHQtdG8tZml4LUZUQkZTLW9uLW1pcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkYTMzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb206IEx1ayBDbGFlcyA8bHVrQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDQgSnVsIDIwMDkgMTA6NTQ6NTMgKzAyMDAKK1N1YmplY3Q6IERvbid0IHJldXNlIHdlYWsgc3ltYm9sIG9wdG9wdCB0byBmaXggRlRCRlMgb24gbWlwcyoKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tIAorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGdldG9wdC5jIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dldG9wdC5jIGIvZ2V0b3B0LmMKK2luZGV4IDgzY2U2MjguLjgyZTk4M2MgMTAwNjQ0CistLS0gYS9nZXRvcHQuYworKysrIGIvZ2V0b3B0LmMKK0BAIC00Myw3ICs0Myw3IEBAIHR5cGVkZWYJaW50CXNzaXplX3Q7CisgY2hhcgkqb3B0YXJnOworIGludAlvcHRpbmQgPSAxOworIGludAlvcHRlcnIgPSAxOworLWludAlvcHRvcHQ7CisraW50CW9wdG9wdGM7CisgCisgc3RhdGljIHZvaWQKKyBlcnJvcihjb25zdCBjaGFyICpzLCBpbnQgYykKK0BAIC02OSw3ICs2OSw3IEBAIGVycm9yKGNvbnN0IGNoYXIgKnMsIGludCBjKQorIAkJKmJwKysgPSAqcysrOworIAl3aGlsZSAoKm1zZykKKyAJCSpicCsrID0gKm1zZysrOworLQkqYnArKyA9IG9wdG9wdDsKKysJKmJwKysgPSBvcHRvcHRjOworIAkqYnArKyA9ICdcbic7CisgCXdyaXRlKDIsIGJ1ZiwgYnAgLSBidWYpOworIAlhY19mcmVlKGJ1Zik7CitAQCAtMTAxLDEzICsxMDEsMTMgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCX0KKyAJCWN1cnAgPSAmYXJndltvcHRpbmRdWzFdOworIAl9CistCW9wdG9wdCA9IGN1cnBbMF0gJiAwMzc3OworKwlvcHRvcHRjID0gY3VycFswXSAmIDAzNzc7CisgCXdoaWxlIChvcHRzdHJpbmdbMF0pIHsKKyAJCWlmIChvcHRzdHJpbmdbMF0gPT0gJzonKSB7CisgCQkJb3B0c3RyaW5nKys7CisgCQkJY29udGludWU7CisgCQl9CistCQlpZiAoKG9wdHN0cmluZ1swXSAmIDAzNzcpID09IG9wdG9wdCkgeworKwkJaWYgKChvcHRzdHJpbmdbMF0gJiAwMzc3KSA9PSBvcHRvcHRjKSB7CisgCQkJaWYgKG9wdHN0cmluZ1sxXSA9PSAnOicpIHsKKyAJCQkJaWYgKGN1cnBbMV0gIT0gJ1wwJykgeworIAkJCQkJb3B0YXJnID0gKGNoYXIgKikmY3VycFsxXTsKK0BAIC0xMjcsNyArMTI3LDcgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCQkJCW9wdGluZCsrOworIAkJCQlvcHRhcmcgPSAwOworIAkJCX0KKy0JCQlyZXR1cm4gb3B0b3B0OworKwkJCXJldHVybiBvcHRvcHRjOworIAkJfQorIAkJb3B0c3RyaW5nKys7CisgCX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmFkNDMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI3IEFwciAyMDExIDAwOjE4OjQyICswMjAwCitTdWJqZWN0OiBQYXRjaGVkIG91dCBTU0wyIHN1cHBvcnQgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBPcGVuU1NMLgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBtYWlseC4xICAgfCAgICAyICstCisgb3BlbnNzbC5jIHwgICAgNCArLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQoraW5kZXggNDE3ZWEwNC4uYTAyZTQzMCAxMDA2NDQKKy0tLSBhL21haWx4LjEKKysrKyBiL21haWx4LjEKK0BAIC0zNTc1LDcgKzM1NzUsNyBAQCBPbmx5IGFwcGxpY2FibGUgaWYgU1NML1RMUyBzdXBwb3J0IGlzIGJ1aWx0IHVzaW5nIE9wZW5TU0wuCisgLlRQCisgLkIgc3NsLW1ldGhvZAorIFNlbGVjdHMgYSBTU0wvVExTIHByb3RvY29sIHZlcnNpb247CistdmFsaWQgdmFsdWVzIGFyZSBgc3NsMicsIGBzc2wzJywgYW5kIGB0bHMxJy4KKyt2YWxpZCB2YWx1ZXMgYXJlIGBzc2wzJywgYW5kIGB0bHMxJy4KKyBJZiB1bnNldCwgdGhlIG1ldGhvZCBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LAorIGlmIHBvc3NpYmxlLgorIC5UUAorZGlmZiAtLWdpdCBhL29wZW5zc2wuYyBiL29wZW5zc2wuYworaW5kZXggYjRlMzNmYy4uNDRmZTRlNSAxMDA2NDQKKy0tLSBhL29wZW5zc2wuYworKysrIGIvb3BlbnNzbC5jCitAQCAtMjE2LDkgKzIxNiw3IEBAIHNzbF9zZWxlY3RfbWV0aG9kKGNvbnN0IGNoYXIgKnVocCkKKyAKKyAJY3AgPSBzc2xfbWV0aG9kX3N0cmluZyh1aHApOworIAlpZiAoY3AgIT0gTlVMTCkgeworLQkJaWYgKGVxdWFsKGNwLCAic3NsMiIpKQorLQkJCW1ldGhvZCA9IFNTTHYyX2NsaWVudF9tZXRob2QoKTsKKy0JCWVsc2UgaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorKwkJaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorIAkJCW1ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAJCWVsc2UgaWYgKGVxdWFsKGNwLCAidGxzMSIpKQorIAkJCW1ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDMtRml4ZWQtTGludGlhbi13YXJuaW5nLXdhcm5pbmctbWFjcm8tTi1ub3QtZGVmaW5lZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDMtRml4ZWQtTGludGlhbi13YXJuaW5nLXdhcm5pbmctbWFjcm8tTi1ub3QtZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2I3M2FlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE0IEFwciAyMDEyIDIwOjIyOjQzICswMjAwCitTdWJqZWN0OiBGaXhlZCBMaW50aWFuIHdhcm5pbmcgKHdhcm5pbmc6IG1hY3JvIGBOJyBub3QgZGVmaW5lZCkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21haWx4LjEgYi9tYWlseC4xCitpbmRleCBhMDJlNDMwLi5iMDcyM2JkIDEwMDY0NAorLS0tIGEvbWFpbHguMQorKysrIGIvbWFpbHguMQorQEAgLTM3ODEsNyArMzc4MSw3IEBAIHlvdSBjb3VsZCBleGFtaW5lIHRoZSBmaXJzdCBtZXNzYWdlIGJ5IGdpdmluZyB0aGUgY29tbWFuZDoKKyAuc3AKKyAuZmkKKyB3aGljaCBtaWdodCBjYXVzZQorLS5OIG1haWx4CisrLkkgbWFpbHgKKyB0byByZXNwb25kIHdpdGgsIGZvciBleGFtcGxlOgorIC5uZgorIC5zcApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjE2NDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA5OTg0YWU1Y2IwZWEwZDYxZGYxNjEyYjA2OTUyYTYxMzIzYzA4M2Q5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTM6MzggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIG91dG9mOiBJbnRyb2R1Y2UgZXhwYW5kYWRkciBmbGFnCisKK0RvY3VtZW50IHRoYXQgYWRkcmVzcyBleHBhbnNpb24gaXMgZGlzYWJsZWQgdW5sZXNzIHRoZSBleHBhbmRhZGRyCitiaW5hcnkgb3B0aW9uIGlzIHNldC4KKworVGhpcyBoYXMgYmVlbiBhc3NpZ25lZCBDVkUtMjAxNC03ODQ0IGZvciBCU0QgbWFpbHgsIGJ1dCBpdCBpcyBub3QKK2EgdnVsbmVyYWJpbGl0eSBpbiBIZWlybG9vbSBtYWlseCBiZWNhdXNlIHRoaXMgZmVhdHVyZSB3YXMgZG9jdW1lbnRlZC4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8IDE0ICsrKysrKysrKysrKysrCisgbmFtZXMuYyB8ICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWFpbHguMSBiL21haWx4LjEKK2luZGV4IDcwYTc4NTkuLjIyYTE3MWIgMTAwNjQ0CistLS0gYS9tYWlseC4xCisrKysgYi9tYWlseC4xCitAQCAtNjU2LDYgKzY1NiwxNCBAQCBidXQgYW55IHJlcGx5IHJldHVybmVkIHRvIHRoZSBtYWNoaW5lCisgd2lsbCBoYXZlIHRoZSBzeXN0ZW0gd2lkZSBhbGlhcyBleHBhbmRlZAorIGFzIGFsbCBtYWlsIGdvZXMgdGhyb3VnaCBzZW5kbWFpbC4KKyAuU1MgIlJlY2lwaWVudCBhZGRyZXNzIHNwZWNpZmljYXRpb25zIgorK0lmIHRoZQorKy5JIGV4cGFuZGFkZHIKKytvcHRpb24gaXMgbm90IHNldCAodGhlIGRlZmF1bHQpLCByZWNpcGllbnQgYWRkcmVzc2VzIG11c3QgYmUgbmFtZXMgb2YKKytsb2NhbCBtYWlsYm94ZXMgb3IgSW50ZXJuZXQgbWFpbCBhZGRyZXNzZXMuCisrLlBQCisrSWYgdGhlCisrLkkgZXhwYW5kYWRkcgorK29wdGlvbiBpcyBzZXQsIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisgV2hlbiBhbiBhZGRyZXNzIGlzIHVzZWQgdG8gbmFtZSBhIHJlY2lwaWVudAorIChpbiBhbnkgb2YgVG8sIENjLCBvciBCY2MpLAorIG5hbWVzIG9mIGxvY2FsIG1haWwgZm9sZGVycworQEAgLTIzOTEsNiArMjM5OSwxMiBAQCBhbmQgZXhpdHMgaW1tZWRpYXRlbHkuCisgSWYgdGhpcyBvcHRpb24gaXMgc2V0LAorIFxmSW1haWx4XGZSIHN0YXJ0cyBldmVuIHdpdGggYW4gZW1wdHkgbWFpbGJveC4KKyAuVFAKKysuQiBleHBhbmRhZGRyCisrQ2F1c2VzCisrLkkgbWFpbHgKKyt0byBleHBhbmQgbWVzc2FnZSByZWNpcGllbnQgYWRkcmVzc2VzLCBhcyBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24sCisrUmVjaXBpZW50IGFkZHJlc3Mgc3BlY2lmaWNhdGlvbnMuCisrLlRQCisgLkIgZmxpcHIKKyBFeGNoYW5nZXMgdGhlCisgLkkgUmVzcG9uZAorZGlmZiAtLWdpdCBhL25hbWVzLmMgYi9uYW1lcy5jCitpbmRleCA2NmU5NzZiLi5jNjk1NjBmIDEwMDY0NAorLS0tIGEvbmFtZXMuYworKysrIGIvbmFtZXMuYworQEAgLTI2OCw2ICsyNjgsOSBAQCBvdXRvZihzdHJ1Y3QgbmFtZSAqbmFtZXMsIEZJTEUgKmZvLCBzdHJ1Y3QgaGVhZGVyICpocCkKKyAJRklMRSAqZm91dCwgKmZpbjsKKyAJaW50IGlzcGlwZTsKKyAKKysJaWYgKHZhbHVlKCJleHBhbmRhZGRyIikgPT0gTlVMTCkKKysJCXJldHVybiBuYW1lczsKKysKKyAJdG9wID0gbmFtZXM7CisgCW5wID0gbmFtZXM7CisgCXRpbWUoJm5vdyk7CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMi11bnBhY2stRGlzYWJsZS1vcHRpb24tcHJvY2Vzc2luZy1mb3ItZW1haWwtYWRkcmVzc2VzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMi11bnBhY2stRGlzYWJsZS1vcHRpb24tcHJvY2Vzc2luZy1mb3ItZW1haWwtYWRkcmVzc2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZGJmZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRnJvbSBlMzRlMmFjNjdiODA0OTcwODBlYmVjY2NlYzQwYzNiNjE0NTYxNjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTQ6MDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIHVucGFjazogRGlzYWJsZSBvcHRpb24gcHJvY2Vzc2luZyBmb3IgZW1haWwgYWRkcmVzc2VzCisgd2hlbiBjYWxsaW5nIHNlbmRtYWlsCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGV4dGVybi5oICB8IDIgKy0KKyBuYW1lcy5jICAgfCA4ICsrKysrKy0tCisgc2VuZG91dC5jIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0ZXJuLmggYi9leHRlcm4uaAoraW5kZXggNmI4NWJhMC4uODg3M2ZlOCAxMDA2NDQKKy0tLSBhL2V4dGVybi5oCisrKysgYi9leHRlcm4uaAorQEAgLTM5Niw3ICszOTYsNyBAQCBzdHJ1Y3QgbmFtZSAqb3V0b2Yoc3RydWN0IG5hbWUgKm5hbWVzLCBGSUxFICpmbywgc3RydWN0IGhlYWRlciAqaHApOworIGludCBpc19maWxlYWRkcihjaGFyICpuYW1lKTsKKyBzdHJ1Y3QgbmFtZSAqdXNlcm1hcChzdHJ1Y3QgbmFtZSAqbmFtZXMpOworIHN0cnVjdCBuYW1lICpjYXQoc3RydWN0IG5hbWUgKm4xLCBzdHJ1Y3QgbmFtZSAqbjIpOworLWNoYXIgKip1bnBhY2soc3RydWN0IG5hbWUgKm5wKTsKKytjaGFyICoqdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmVsaWRlKHN0cnVjdCBuYW1lICpuYW1lcyk7CisgaW50IGNvdW50KHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmRlbGV0ZV9hbHRlcm5hdGVzKHN0cnVjdCBuYW1lICpucCk7CitkaWZmIC0tZ2l0IGEvbmFtZXMuYyBiL25hbWVzLmMKK2luZGV4IGM2OTU2MGYuLjQ1YmJhZWQgMTAwNjQ0CistLS0gYS9uYW1lcy5jCisrKysgYi9uYW1lcy5jCitAQCAtNTQ5LDcgKzU0OSw3IEBAIGNhdChzdHJ1Y3QgbmFtZSAqbjEsIHN0cnVjdCBuYW1lICpuMikKKyAgKiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlIG5hbWUgbGlzdCB3b24ndCBmaXQuCisgICovCisgY2hhciAqKgorLXVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisrdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCkKKyB7CisgCWNoYXIgKiphcCwgKip0b3A7CisgCXN0cnVjdCBuYW1lICpuOworQEAgLTU2NCw3ICs1NjQsNyBAQCB1bnBhY2soc3RydWN0IG5hbWUgKm5wKQorIAkgKiB0aGUgdGVybWluYXRpbmcgMCBwb2ludGVyLiAgQWRkaXRpb25hbCBzcG90cyBtYXkgYmUgbmVlZGVkCisgCSAqIHRvIHBhc3MgYWxvbmcgLWYgdG8gdGhlIGhvc3QgbWFpbGVyLgorIAkgKi8KKy0JZXh0cmEgPSAyOworKwlleHRyYSA9IDMgKyBjb3VudChzbW9wdHMpOworIAlleHRyYSsrOworIAltZXRvbyA9IHZhbHVlKCJtZXRvbyIpICE9IE5VTEw7CisgCWlmIChtZXRvbykKK0BAIC01ODEsNiArNTgxLDEwIEBAIHVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisgCQkqYXArKyA9ICItbSI7CisgCWlmICh2ZXJib3NlKQorIAkJKmFwKysgPSAiLXYiOworKwlmb3IgKDsgc21vcHRzICE9IE5VTEw7IHNtb3B0cyA9IHNtb3B0cy0+bl9mbGluaykKKysJCWlmICgoc21vcHRzLT5uX3R5cGUgJiBHREVMKSA9PSAwKQorKwkJCSphcCsrID0gc21vcHRzLT5uX25hbWU7CisrCSphcCsrID0gIi0tIjsKKyAJZm9yICg7IG4gIT0gTlVMTDsgbiA9IG4tPm5fZmxpbmspCisgCQlpZiAoKG4tPm5fdHlwZSAmIEdERUwpID09IDApCisgCQkJKmFwKysgPSBuLT5uX25hbWU7CitkaWZmIC0tZ2l0IGEvc2VuZG91dC5jIGIvc2VuZG91dC5jCitpbmRleCA3YjdmMmViLi5jNTJmMTVkIDEwMDY0NAorLS0tIGEvc2VuZG91dC5jCisrKysgYi9zZW5kb3V0LmMKK0BAIC04MzUsNyArODM1LDcgQEAgc3RhcnRfbXRhKHN0cnVjdCBuYW1lICp0bywgc3RydWN0IG5hbWUgKm1haWxhcmdzLCBGSUxFICppbnB1dCwKKyAjZW5kaWYJLyogSEFWRV9TT0NLRVRTICovCisgCisgCWlmICgoc210cCA9IHZhbHVlKCJzbXRwIikpID09IE5VTEwpIHsKKy0JCWFyZ3MgPSB1bnBhY2soY2F0KG1haWxhcmdzLCB0bykpOworKwkJYXJncyA9IHVucGFjayhtYWlsYXJncywgdG8pOworIAkJaWYgKGRlYnVnIHx8IHZhbHVlKCJkZWJ1ZyIpKSB7CisgCQkJcHJpbnRmKGNhdGdldHMoY2F0ZCwgQ0FUU0VULCAxODEsCisgCQkJCQkiU2VuZG1haWwgYXJndW1lbnRzOiIpKTsKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTMtZmlvLmMtVW5jb25kaXRpb25hbGx5LXJlcXVpcmUtd29yZGV4cC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NThkODYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSAyYmFlOGVjZjA0ZWMyYmE2YmI5ZjBhZjViODA0ODVkZDBlZGI0MjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTI6NDg6MjUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIGZpby5jOiBVbmNvbmRpdGlvbmFsbHkgcmVxdWlyZSB3b3JkZXhwIHN1cHBvcnQKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCA2NyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCA2NWU4ZjEwLi4xNTI5MjM2IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDMsMTIgKzQzLDE1IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmaW8uYwkyLjc2IChncml0dGVyKSA5LzE2LzA5IjsKKyAjZW5kaWYgLyogbm90IGxpbnQgKi8KKyAKKyAjaW5jbHVkZSAicmN2LmgiCisrCisrI2lmbmRlZiBIQVZFX1dPUkRFWFAKKysjZXJyb3Igd29yZGV4cCBzdXBwb3J0IGlzIHJlcXVpcmVkCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CistI2lmZGVmCUhBVkVfV09SREVYUAorICNpbmNsdWRlIDx3b3JkZXhwLmg+CistI2VuZGlmCS8qIEhBVkVfV09SREVYUCAqLworICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaWYgZGVmaW5lZCAoVVNFX05TUykKK0BAIC00ODEsNyArNDg0LDYgQEAgbmV4dDoKKyBzdGF0aWMgY2hhciAqCisgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyB7CistI2lmZGVmCUhBVkVfV09SREVYUAorIAl3b3JkZXhwX3Qgd2U7CisgCWNoYXIgKmNwOworIAlzaWdzZXRfdCBuc2V0OworQEAgLTUyNyw2NSArNTI5LDYgQEAgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyAJfQorIAl3b3JkZnJlZSgmd2UpOworIAlyZXR1cm4gY3A7CistI2Vsc2UJLyogIUhBVkVfV09SREVYUCAqLworLQljaGFyIHhuYW1lW1BBVEhTSVpFXTsKKy0JY2hhciBjbWRidWZbUEFUSFNJWkVdOwkJLyogYWxzbyB1c2VkIGZvciBmaWxlIG5hbWVzICovCistCWludCBwaWQsIGw7CistCWNoYXIgKmNwLCAqc2hlbGw7CistCWludCBwaXZlY1syXTsKKy0JZXh0ZXJuIGludCB3YWl0X3N0YXR1czsKKy0Jc3RydWN0IHN0YXQgc2J1ZjsKKy0KKy0JaWYgKHBpcGUocGl2ZWMpIDwgMCkgeworLQkJcGVycm9yKCJwaXBlIik7CistCQlyZXR1cm4gbmFtZTsKKy0JfQorLQlzbnByaW50ZihjbWRidWYsIHNpemVvZiBjbWRidWYsICJlY2hvICVzIiwgbmFtZSk7CistCWlmICgoc2hlbGwgPSB2YWx1ZSgiU0hFTEwiKSkgPT0gTlVMTCkKKy0JCXNoZWxsID0gU0hFTEw7CistCXBpZCA9IHN0YXJ0X2NvbW1hbmQoc2hlbGwsIDAsIC0xLCBwaXZlY1sxXSwgIi1jIiwgY21kYnVmLCBOVUxMKTsKKy0JaWYgKHBpZCA8IDApIHsKKy0JCWNsb3NlKHBpdmVjWzBdKTsKKy0JCWNsb3NlKHBpdmVjWzFdKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWNsb3NlKHBpdmVjWzFdKTsKKy1hZ2FpbjoKKy0JbCA9IHJlYWQocGl2ZWNbMF0sIHhuYW1lLCBzaXplb2YgeG5hbWUpOworLQlpZiAobCA8IDApIHsKKy0JCWlmIChlcnJubyA9PSBFSU5UUikKKy0JCQlnb3RvIGFnYWluOworLQkJcGVycm9yKCJyZWFkIik7CistCQljbG9zZShwaXZlY1swXSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQljbG9zZShwaXZlY1swXSk7CistCWlmICh3YWl0X2NoaWxkKHBpZCkgPCAwICYmIFdURVJNU0lHKHdhaXRfc3RhdHVzKSAhPSBTSUdQSVBFKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgxLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gZmFpbGVkLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gMCkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MiwKKy0JCQkJCSJcIiVzXCI6IE5vIG1hdGNoLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gc2l6ZW9mIHhuYW1lKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgzLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gYnVmZmVyIG92ZXJmbG93LlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JeG5hbWVbbF0gPSAwOworLQlmb3IgKGNwID0gJnhuYW1lW2wtMV07ICpjcCA9PSAnXG4nICYmIGNwID4geG5hbWU7IGNwLS0pCistCQk7CistCWNwWzFdID0gJ1wwJzsKKy0JaWYgKHN0cmNocih4bmFtZSwgJyAnKSAmJiBzdGF0KHhuYW1lLCAmc2J1ZikgPCAwKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDg0LAorLQkJCQkiXCIlc1wiOiBBbWJpZ3VvdXMuXG4iKSwgbmFtZSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQlyZXR1cm4gc2F2ZXN0cih4bmFtZSk7CistI2VuZGlmCS8qICFIQVZFX1dPUkRFWFAgKi8KKyB9CisgCisgLyoKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTQtZ2xvYm5hbWUtSW52b2tlLXdvcmRleHAtd2l0aC1XUkRFX05PQ01ELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWNmYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDczZmVmYTBjMWFjNzAwNDNlYzg0ZjJkOGI4ZjlmNjgzMjEzZjE2OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGbG9yaWFuIFdlaW1lciA8ZndlaW1lckByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAxMzoxMTozMiArMDEwMAorU3ViamVjdDogW1BBVENIIDQvNF0gZ2xvYm5hbWU6IEludm9rZSB3b3JkZXhwIHdpdGggV1JERV9OT0NNRCAoQ1ZFLTIwMDQtMjc3MSkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCAxNTI5MjM2Li43NzRhMjA0IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDk3LDcgKzQ5Nyw3IEBAIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgCXNpZ2VtcHR5c2V0KCZuc2V0KTsKKyAJc2lnYWRkc2V0KCZuc2V0LCBTSUdDSExEKTsKKyAJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbnNldCwgTlVMTCk7CistCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgMCk7CisrCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgV1JERV9OT0NNRCk7CisgCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbnNldCwgTlVMTCk7CisgCXN3aXRjaCAoaSkgeworIAljYXNlIDA6CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNS11c3Itc2Jpbi1zZW5kbWFpbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1OTkxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRGVzY3JpcHRpb246IFNlbmRtYWlsIGlzIGF0IC91c3Ivc2Jpbi9zZW5kbWFpbAorIEFzIHBlciBEZWJpYW4gUG9saWN5IMKnMTEuNgorQXV0aG9yOiBSeWFuIEthdmFuYWdoIDxyYWtAZGViaWFuLm9yZz4KK09yaWdpbjogRGViaWFuCitGb3J3YXJkZWQ6IG5vCistLS0KK1RoaXMgcGF0Y2ggaGVhZGVyIGZvbGxvd3MgREVQLTM6IGh0dHA6Ly9kZXAuZGViaWFuLm5ldC9kZXBzL2RlcDMvCitJbmRleDogaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorCistLS0gaGVpcmxvb20tbWFpbHgtMTIuNS5vcmlnL01ha2VmaWxlCTIwMTEtMDQtMjYgMTc6MjM6MjIuMDAwMDAwMDAwIC0wNDAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQkyMDE1LTAxLTI3IDEzOjIwOjA0LjczMzU0MjgwMSAtMDUwMAorQEAgLTEzLDcgKzEzLDcgQEAKKyAKKyBNQUlMUkMJCT0gJChTWVNDT05GRElSKS9uYWlsLnJjCisgTUFJTFNQT09MCT0gL3Zhci9tYWlsCistU0VORE1BSUwJPSAvdXNyL2xpYi9zZW5kbWFpbAorK1NFTkRNQUlMCT0gL3Vzci9zYmluL3NlbmRtYWlsCisgCisgREVTVERJUgkJPQorIAorSW5kZXg6IGhlaXJsb29tLW1haWx4LTEyLjUvbWFpbHguMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGhlaXJsb29tLW1haWx4LTEyLjUub3JpZy9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MTg6NDkuMDAwMDAwMDAwIC0wNTAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MjA6MzIuMzgyMzM2ODY3IC0wNTAwCitAQCAtNDkyMiw3ICs0OTIyLDcgQEAKKyB3aGljaCBqdXN0IGFjdHMgYXMgYSBwcm94eS4KKyAuUFAKKyBcZklNYWlseFxmUiBpbW1lZGlhdGVseSBjb250YWN0cyB0aGUgU01UUCBzZXJ2ZXIgKG9yCistLklSIFwlL3Vzci9saWIvc2VuZG1haWwgKQorKy5JUiBcJS91c3Ivc2Jpbi9zZW5kbWFpbCApCisgZXZlbiB3aGVuIG9wZXJhdGluZyBpbgorIC5JIGRpc2Nvbm5lY3RlZAorIG1vZGUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRmZDA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitrcmI1IHN1cHBvcnQgaXMgYXV0b2RldGVjdGVkIGZyb20gc3lzcm9vdCBtYWtpbmcgYnVpbGRzIHVuZGV0ZXJtaW5pc3RpYworZmVlbCBmcmVlIHRvIGltcHJvdmUgdGhpcyB0byBzdXBwb3J0IGV4cGxpY2l0bHkgZW5hYmxpbmcvZGlzYWJsaW5nIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBhL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNjoxMS4xNzc3OTIzMzQgKzAyMDAKKysrKyBiL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNzoyMC4wMjg3OTM5OTQgKzAyMDAKK0BAIC00MjQsMzYgKzQyNCw2IEBACisgfQorICEKKyAKKy08JHRtcDIuYyBsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3MnIFwKKy0JCScjZGVmaW5lIFVTRV9HU1NBUEknICctbGdzcycgfHwKKy0JPCR0bXAyLmMgbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzYXBpX2tyYjUnIFwKKy0JCQknI2RlZmluZSBVU0VfR1NTQVBJJyAnLWxnc3NhcGlfa3JiNScgfHwKKy0JCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaV9rcmI1LCBvbGQtc3R5bGUnIFwKKy0JCQkJJyNkZWZpbmUgVVNFX0dTU0FQSQorLSNkZWZpbmUgR1NTQVBJX09MRF9TVFlMRScgJy1sZ3NzYXBpX2tyYjUnIDw8XCEgfHwgXAorLQkJCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaScgXAorLQkJCQknI2RlZmluZSBVU0VfR1NTQVBJCistI2RlZmluZQlHU1NBUElfUkVHX0lOQ0xVREUnICctbGdzc2FwaScgPDxcJQorLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+CistI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgorLQorLWludCBtYWluKHZvaWQpCisteworLQlnc3NfaW1wb3J0X25hbWUoMCwgMCwgZ3NzX250X3NlcnZpY2VfbmFtZSwgMCk7CistCWdzc19pbml0X3NlY19jb250ZXh0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApOworLQlyZXR1cm4gMDsKKy19CistIQorLSNpbmNsdWRlIDxnc3NhcGkuaD4KKy0KKy1pbnQgbWFpbih2b2lkKQorLXsKKy0JZ3NzX2ltcG9ydF9uYW1lKDAsIDAsIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLCAwKTsKKy0JZ3NzX2luaXRfc2VjX2NvbnRleHQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7CistCXJldHVybiAwOworLX0KKy0lCistCisgY2F0ID4kdG1wMi5jIDw8XCEKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2lmZGVmIEhBVkVfTkxfTEFOR0lORk8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L21haWx4XzEyLjUtNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmE5MDQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAibWFpbHggaXMgdGhlIHRyYWRpdGlvbmFsIGNvbW1hbmQtbGluZS1tb2RlIG1haWwgdXNlciBhZ2VudCIKKworREVTQ1JJUFRJT04gPSAiTWFpbHggaXMgZGVyaXZlZCBmcm9tIEJlcmtlbGV5IE1haWwgYW5kIGlzIGludGVuZGVkIHByb3ZpZGUgdGhlIFwKK2Z1bmN0aW9uYWxpdHkgb2YgdGhlIFBPU0lYIG1haWx4IGNvbW1hbmQgd2l0aCBhZGRpdGlvbmFsIHN1cHBvcnQgXAorZm9yIE1JTUUsIElNQVAsIFBPUDMsIFNNVFAsIGFuZCBTL01JTUUuIgorCitIT01FUEFHRSA9ICJodHRwOi8vaGVpcmxvb20uc291cmNlZm9yZ2UubmV0L21haWx4Lmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEICYgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjAyYTBhNjI5MTBjZjk0ZjdhZjhhMzQzNmEyYTJkZCIKKworREVQRU5EUyA9ICJvcGVuc3NsIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUub3JpZy50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjlhNjAzM2VmMTQxMjgyNGQwMmViOWQ5MjEzY2IxZjIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwMTViYTQyMDkxMzU4NjdmMzdhMDI0NWQyMjIzNWEzOTJiOGJiZWQ5NTY5MTMyODZiODg3YzJlMmE5YTQyMWFkIgorCitTID0gIiR7V09SS0RJUn0vaGVpcmxvb20tbWFpbHgtMTIuNSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EX0JTRF9TT1VSQ0UgLURERUJJQU4gLUkke1N9L0VYVCIKKworIyAiU1RSSVA9dHJ1ZSIgbWVhbnMgdGhhdCAndHJ1ZScgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gJ3N0cmlwJyBmaWxlcyB3aGljaCB3aWxsIGFjaGlldmUgdGhlIGVmZmVjdCBvZiBub3Qgc3RyaXBwaW5nIHRoZW0KKyMgbWFpbHgncyBNYWtlZmlsZSBkb2Vzbid0IGFsbG93IGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGF2b2lkIHN0cmlwcGluZworRVhUUkFfT0VNQUtFID0gIlNFTkRNQUlMPSR7c2JpbmRpcn0vc2VuZG1haWwgSVB2Nj0tREhBVkVfSVB2Nl9GVU5DUyBQUkVGSVg9L3VzciBVQ0JJTlNUQUxMPS91c3IvYmluL2luc3RhbGwgU1RSSVA9dHJ1ZSIKKworIyBUaGUgbWFrZWNvbmZpZyBjYW4ndCBydW4gcGFyYWxsZWxseSwgb3RoZXJ3aXNlIHRoZSBjaGVja2luZyByZXN1bHRzCisjIG1pZ2h0IGJlIGluY29ycmVjdCBhbmQgbGVhZCB0byBlcnJvcnM6CisjIGZpby5jOjU2OjE3OiBmYXRhbCBlcnJvcjogc3NsLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyMgI2luY2x1ZGUgPHNzbC5oPgorUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4tcGFnZXMvbWFuLXBhZ2VzXzQuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5MGE0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wMi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkxpbnV4IG1hbi1wYWdlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCBtYW4tcGFnZXMgcHJvamVjdCBkb2N1bWVudHMgdGhlIExpbnV4IGtlcm5lbCBhbmQgQyBsaWJyYXJ5IGludGVyZmFjZXMgdGhhdCBhcmUgZW1wbG95ZWQgYnkgdXNlciBwcm9ncmFtcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvZG9jcy9tYW4tcGFnZXMiCitMSUNFTlNFID0gIkdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT04ZjJhM2Q0MzA1N2Q0NThlNTA2NjcxNDk4MDU2N2E2MCIKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9kb2NzLyR7QlBOfS9BcmNoaXZlLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzZGYzMjc5Nzk4YTMzNDViYjJjNzA5NTg0YzgzNjM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQyMzI0ZjllZDQ3Yzg5YTQzY2IzN2I2YmIwZDVmYmNhZDQ0ODM4ZWVlNDVjZDM5NGUxODFjOThkMDM4YzQ5ZmYiCisKK1JERVBFTkRTXyR7UE59ID0gIm1hbiIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKKyMgT25seSBkZWxpdmVyZXMgbWFuLXBhZ2VzIHNvIEZJTEVTXyR7UE59IGdldHMgZXZlcnl0aGluZworRklMRVNfJHtQTn0tZG9jID0gIiIKK0ZJTEVTXyR7UE59ID0gIiR7bWFuZGlyfS8qIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwYXNzd2QuNV0gPSAiJHttYW5kaXJ9L21hbjUvcGFzc3dkLjUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0c3BuYW0uM10gPSAiJHttYW5kaXJ9L21hbjMvZ2V0c3BuYW0uMyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vY29uZmlndXJlX3NlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vY29uZmlndXJlX3NlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDllNjgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9jb25maWd1cmVfc2VkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK21hbjogcmVwbGFjZSAnLCcgd2l0aCAnIycKKworU29tZXRpbWVzLCB0aGUgcGFyYW1ldGVycyBvZiBDQy9CVUlMRF9DQyBjb250YWlucyB0aGUgJywnLCB3aGljaAorY2F1c2UgdGhlIHNlZCBjb21tYW5kIGZhaWxlZCwgc28gcmVwbGFjZSB0aGUgJywnIHdpdGggJyMnCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDlmNjJjZjkuLjlhNTY1YWUgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTEzMjEsOSArMTMyMSw5IEBAIGRvCisgICBlY2hvICJDcmVhdGluZyAkaW5maWxlIGZyb20gJGluZmlsZS5pbiIKKyAgIHNlZCAtZSAnCisgcyxAdmVyc2lvbkAsJHZlcnNpb24sCistcyxAQ0NALCRDQywKKytzI0BDQ0AjJENDIworIHMsQEVYRUVYVEAsJEVYRUVYVCwKKy1zLEBCVUlMRF9DQ0AsJEJVSUxEX0NDLAorK3MjQEJVSUxEX0NDQCMkQlVJTERfQ0MjCisgcyxASU5TVEFMTEAsJElOU1RBTEwsCisgcyxAREVGU0AsJERFRlMsCisgcyxATElCU0AsJExJQlMsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41Zy1ub25yb290YnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4MzRiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdSAtciBtYW4tMS41Zy5vbGQvY29uZmlndXJlIG1hbi0xLjVnL2NvbmZpZ3VyZQorLS0tIG1hbi0xLjVnLm9sZC9jb25maWd1cmUJV2VkIEFwciAgNyAwNDoxNjowNSAxOTk5CisrKysgbWFuLTEuNWcvY29uZmlndXJlCU1vbiBNYXkgMTUgMTU6MjI6NDQgMjAwMAorQEAgLTc5MSw3ICs3OTEsNyBAQAorICAgICByZWFkIG1vZGUKKyAgICAgaWYgdGVzdCAiJG1vZGUiICE9ICIiOyB0aGVuIG1hbl9tb2RlPSRtb2RlOyBmaQorICAgZmkKKy0gIG1hbl9pbnN0YWxsX2ZsYWdzPSItbSAkbWFuX21vZGUgLW8gJG1hbl91c2VyIC1nICRtYW5fZ3JvdXAiCisrICBtYW5faW5zdGFsbF9mbGFncz0iIgorIGZpCisgCisgIyBXaGF0IHNlY3Rpb25zIGRvIHdlIGFudGljaXBhdGU/CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1nZW5jYXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVoMS1nZW5jYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0YjE0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBnZW5jYXQvZ2VubGliLmMJMjAwNi0wOC0wMiAyMDoxMTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZW5jYXQvZ2VubGliLmMub2RlbgkyMDA4LTEyLTIxIDE5OjE4OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ3LDYgKzQ3LDcgQEAgdXAtdG8tZGF0ZS4gIE1hbnkgdGhhbmtzLgorIDAxLzE0LzkxICAgNCBuYXpndWwJT2ZmIGJ5IG9uZSBvbiBudW1iZXIgc3BlY2lmaWVkIGVudHJpZXMKKyAqLworIAorKyN1bmRlZiBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaWZkZWYgU1lTVgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzMWViMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluLm1pa2UJRnJpIEFwciAgOSAxMzozNTo1NCAxOTk5CisrKysgbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluCUZyaSBBcHIgIDkgMTM6MzY6NDUgMTk5OQorQEAgLTEsOCArMSw4IEBACisgIyBvbmx5IGV4ZWN1dGVkIGZyb20gYSBzdWJkaXIKKyBNQU4xID0gbWFuIHdoYXRpcyBhcHJvcG9zCistTUFONSA9IG1hbi5jb25mCisrTUFONSA9IG1hbi5jb25maWcKKyBNQU44ID0gbWFrZXdoYXRpcworLUFMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZi41CisrQUxMID0gbWFuLjEgd2hhdGlzLjEgYXByb3Bvcy4xIG1hbi5jb25maWcuNQorIE1BWUJFOCA9IG1ha2V3aGF0aXMKKyAKKyAuU1VGRklYRVM6IC5tYW4gLjEgLjUgLjgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLWluaXRpYWwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTZjMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaC5pbml0aWFsCVR1ZSBKdWwgIDMgMTU6Mzg6MzkgMjAwMQorKysrIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaAlUdWUgSnVsICAzIDE1OjM5OjM5IDIwMDEKK0BAIC04MSw4ICs4MSwxMCBAQAorIAljb250aW51ZTs7CisgICAgIC1zKSBzZXRzZWN0aW9ucz0xCisgCWNvbnRpbnVlOzsKKy0gICAgLXUpIGZpbmRhcmc9Ii1uZXdlciAvdmFyL2NhY2hlL21hbi93aGF0aXMiCistCXVwZGF0ZT0xCisrICAgIC11KSBpZiBbIC1lIC92YXIvY2FjaGUvbWFuL3doYXRpcyBdOyB0aGVuCisrCSAgZmluZGFyZz0iLW5ld2VyIC92YXIvY2FjaGUvbWFuL3doYXRpcyIKKysJICB1cGRhdGU9MQorKwlmaQorIAljb250aW51ZTs7CisgICAgIC12KSB2ZXJib3NlPTEKKyAJY29udGludWU7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItbmV3bGluZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExZGY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gc3JjL21hbi5jCTIwMDgtMTItMjEgMTk6MTc6MzEuMDAwMDAwMDAwICswMTAwCisrKysgc3JjL21hbi5jLm9kZW4JMjAwOC0xMi0yMSAxOToxNzozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTEsNyArMzkxLDcgQEAgYWdhaW46CisgCSAgYmVnKys7CisgCisgICAgICBlbmQgPSBiZWc7CistICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcpCisrICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcgJiYgKGVuZC1idWYpPEJVRlNJWkUpCisgCSAgZW5kKys7CQkvKiBub3RlIHRoYXQgYnVmIGlzIE5VTC10ZXJtaW5hdGVkICovCisgICAgICAqZW5kID0gJ1wwJzsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkMjg4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFuLmMub3ZlcmZsb3cJTW9uIEp1biAyNSAwMDowMTo0NSAyMDAxCisrKysgbWFuLTEuNWkyL3NyYy9tYW4uYwlNb24gSnVuIDI1IDAwOjAxOjQ1IDIwMDEKK0BAIC0zODEsNiArMzgxLDkgQEAKKyAJICBzdHJjYXQobmFtZSwgIi8iKTsKKyAJICBzdHJjYXQobmFtZSwgYmVnKTsKKyAgICAgIH0KKysgICAgIC8qIElmIHRoaXMgaXMgdG9vIGxvbmcsIGJhZCB0aGluZ3MgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLiAqCisrICAgICAgKiB3ZSBzaG91bGQgcXVpdCBJTU1FRElBVEVMWS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgIGlmKHN0cmxlbihuYW1lKT5zaXplb2YodWx0bmFtZSkpIF9leGl0KDEpOworIAorICAgICAgZ290byBhZ2FpbjsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLWkxOG4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLWkxOG4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlMDljMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotaTE4bi5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9tc2dzL2luc3Quc2guaTE4bglXZWQgQXByIDI1IDEwOjQwOjUwIDIwMDEKKysrKyBtYW4tMS41ai9tc2dzL2luc3Quc2gJV2VkIEFwciAyNSAxMDo0MToxNyAyMDAxCitAQCAtMjcsOCArMjcsNyBAQAorIGZvciBqIGluICRNOyBkbworICAgaWYgWyAtZiAkaiBdOyB0aGVuCisgICAgIGk9YGVjaG8gJGogfCBzZWQgLWUgJ3MvbWVzcy4vLzsgcy8uY2F0Ly8nYAorLSAgICBkZXN0PWBlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorLSAgICBkZXN0PSR7UFJFRklYfSRkZXN0CisrICAgIGRlc3Q9JHtQUkVGSVh9L2BlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorICAgICBlY2hvICJta2RpciAtcCBgZGlybmFtZSAkZGVzdGAiCisgICAgIG1rZGlyIC1wIGBkaXJuYW1lICRkZXN0YDsKKyAgICAgZWNobyAiaW5zdGFsbCAtYyAtbSA2NDQgJGogJGRlc3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLW5vY2FjaGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLW5vY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxZGRkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotbm9jYWNoZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4ubm9jYWNoZQlUaHUgTm92IDIyIDE1OjA3OjEyIDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4JVGh1IE5vdiAyMiAxNTowNzoxMiAyMDAxCitAQCAtODEsNiArODEsOSBAQAorICMgCisgI05PQ0FDSEUKKyAjCisrIyBOT0NBQ0hFIGtlZXBzIG1hbiBmcm9tIGNyZWF0aW5nIGNhY2hlIHBhZ2VzCisrTk9DQUNIRQorKyMKKyAjIFVzZWZ1bCBwYXRocyAtIG5vdGUgdGhhdCBDT0wgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIHdoZW4KKyAjIE5ST0ZGIGlzIGRlZmluZWQgYXMgImdyb2ZmIC1UYXNjaWkiIG9yICJncm9mZiAtVGxhdGluMSI7CisgIyBub3Qgb25seSBpcyBpdCBzdXBlcmZsdW91cywgYnV0IGl0IGFjdHVhbGx5IGRhbWFnZXMgdGhlIG91dHB1dC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotdXRmOC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotdXRmOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzZTRjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai11dGY4LnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL2NvbmZpZ3VyZS51dGY4CVRodSBOb3YgMjIgMTU6MDI6MzUgMjAwMQorKysrIG1hbi0xLjVqL2NvbmZpZ3VyZQlUaHUgTm92IDIyIDE1OjAzOjE1IDIwMDEKK0BAIC00MDgsOSArNDA4LDkgQEAKKyAgIEZnYXdrPS9iaW4vZ2F3aworICAgRmF3az0vYmluL2dhd2sKKyAgIEZtYXdrPW1pc3NpbmcKKy0gIHRyb2ZmPSIiCistICBucm9mZj0iIgorLSAgam5yb2ZmPSIiCisrICB0cm9mZj0vdXNyL2Jpbi90cm9mZgorKyAgbnJvZmY9L3Vzci9iaW4vbnJvZmYKKysgIGpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgZXFuPSIiCisgICBuZXFuPSIiCisgICBqbmVxbj0iIgorQEAgLTQ1Myw2ICs0NTMsOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZucm9mZj0vdXNyL2Jpbi9ucm9mZgorKyAgRmpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgRmdlcW49L3Vzci9iaW4vZ2VxbgorICAgRmd0Ymw9L3Vzci9iaW4vZ3RibAorICAgRmNvbD0vdXNyL2Jpbi9jb2wKK0BAIC00ODUsMjUgKzQ4NywyNSBAQAorICAgdGhlbgorICAgICBpZiB0ZXN0ICRGbnJvZmYgPSAibWlzc2luZyIKKyAgICAgdGhlbgorLSAgICAgIG5yb2ZmPSJucm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSJucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZWxzZQorLSAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UbGF0aW4xIC1tYW5kb2MiCisrICAgICAgbnJvZmY9IiRGbnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGZpCisgICAgIHRyb2ZmPSJ0cm9mZiAtbWFuZG9jIgorICAgICBlY2hvICJXYXJuaW5nOiBjb3VsZCBub3QgZmluZCBncm9mZiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAkRm5yb2ZmID0gIm1pc3NpbmciCisgICAgIHRoZW4KKy0gICAgICBucm9mZj0iJEZncm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSIkRmdyb2ZmIC1UdXRmOCAtbWFuZG9jIgorICAgICBlbHNlCistICAgICAgbnJvZmY9IiRGbnJvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0iJEZucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZmkKKyAgICAgdHJvZmY9IiRGZ3JvZmYgLVRwcyAtbWFuZG9jIgorLSAgICBqbnJvZmY9IiRGZ3JvZmYgLVRuaXBwb24gLW1hbmRvY2oiCisrICAgIGpucm9mZj0iJEZqbnJvZmYgLVR1dGY4IC1tYW5kb2NqIgorICAgZmkKKyAgIGVxbj0iJEZnZXFuIC1UcHMiCistICBuZXFuPSIkRmdlcW4gLVRsYXRpbjEiCistICBqbmVxbj0iJEZnZXFuIC1UbmlwcG9uIgorKyAgbmVxbj0iJEZnZXFuIC1UdXRmOCIKKysgIGpuZXFuPSIkRmdlcW4gLVR1dGY4IgorICAgdGJsPSIkRmd0YmwiCisgICBjb2w9IiRGY29sIgorICAgdmdyaW5kPSIkRnZncmluZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstY29uZnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzQ2YzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGNvbmZpZ3VyZQkyMDA2LTA1LTAxIDE5OjU2OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIGNvbmZpZ3VyZS5vZGVuCTIwMDgtMTItMjEgMTk6MTY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTk4LDcgKzE5OCw3IEBACisgICAgIGNvbmZkaXI9IiR7Y29uZnByZWZpeH0vc2hhcmUvbWlzYyIKKyAgIGZpCisgZmkKKy1jb25mZmlsZW5hbWU9Im1hbi5jb25mIgorK2NvbmZmaWxlbmFtZT0ibWFuLmNvbmZpZyIKKyAKKyBpZiB0ZXN0ICIkUkFORE9NIiA9ICIkUkFORE9NIjsgdGhlbgorICAgIyBQbGFpbiBvbGQgQm91cm5lIHNoZWxsLgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1ub25hc2NpaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2MmQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gLi9zcmMvYXByb3Bvcy5zaC5ub25hc2NpaQkyMDAxLTExLTIzIDAwOjMwOjQyLjAwMDAwMDAwMCArMDEwMAorKysrIC4vc3JjL2Fwcm9wb3Muc2gJMjAwMi0wOC0xMyAxNTo0NDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw5ICsxOCw5IEBACisgCisgIyBXaGVuIG1hbiBwYWdlcyBpbiB5b3VyIGZhdm9yaXRlIGxvY2FsZSBsb29rIHRvIGdyZXAgbGlrZSBiaW5hcnkgZmlsZXMKKyAjIChhbmQgeW91IHVzZSBHTlUgZ3JlcCkgeW91IG1heSB3YW50IHRvIGFkZCB0aGUgJ2EnIG9wdGlvbiB0byAqZ3JlcG9wdDEuCistYXByb3Bvc2dyZXBvcHQxPSdpJworK2Fwcm9wb3NncmVwb3B0MT0naWEnCisgYXByb3Bvc2dyZXBvcHQyPScnCistd2hhdGlzZ3JlcG9wdDE9J2l3JworK3doYXRpc2dyZXBvcHQxPSdpd2EnCisgd2hhdGlzZ3JlcG9wdDI9J14nCisgZ3JlcG9wdDE9JCVhcHJvcG9zX29yX3doYXRpcyVncmVwb3B0MQorIGdyZXBvcHQyPSQlYXByb3Bvc19vcl93aGF0aXMlZ3JlcG9wdDIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstc29maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjkyNTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL3NyYy9tYW4uYy5zb2ZpeAlUaHUgTm92IDIyIDE0OjUxOjQ0IDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmMJVGh1IE5vdiAyMiAxNDo1Mjo0NCAyMDAxCitAQCAtMzAwLDcgKzMwMCw3IEBACisgCisgICAgICBpZiAoc3RybGVuKG5hbWUwKSA+PSBzaXplb2YodWx0bmFtZSkpCisgCSAgICAgcmV0dXJuIG5hbWUwOworLSAgICAgc3RyY3B5KHVsdG5hbWUsIG5hbWUwKTsKKysgICAgIHN0cm5jcHkodWx0bmFtZSwgbmFtZTAsIEJVRlNJWkUtMzIpOworICAgICAgbmFtZSA9IHVsdG5hbWU7CisgCisgYWdhaW46CitAQCAtMzMyLDcgKzMzMiw3IEBACisgCSAgICogLnNvIGZpbGVzIC0gd2UgY291bGQgZ2xvYiBmb3IgYWxsIHBvc3NpYmxlIGV4dGVuc2lvbnMsCisgCSAgICogZm9yIG5vdzogb25seSB0cnkgLmd6CisgCSAgICovCistCSAgZWxzZSBpZiAoZnAgPT0gTlVMTCAmJiBnZXRfZXhwYW5kZXIoIi5neiIpICYmCisrCSAgaWYgKGZwID09IE5VTEwgJiYgZ2V0X2V4cGFuZGVyKCIuZ3oiKSAmJgorIAkJICAgc3RybGVuKG5hbWUpK3N0cmxlbigiLmd6IikgPCBCVUZTSVpFKSB7CisgCSAgICAgICBzdHJjYXQobmFtZSwgIi5neiIpOworIAkgICAgICAgZnAgPSBmb3BlbiAobmFtZSwgInIiKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVnMTE2MjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxMjk5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmFkCTIwMDMtMTItMTEgMTk6MTc6MTAuMDAwMDAwMDAwICswMTAwCisrKysgLi9jb25maWd1cmUJMjAwMy0xMi0xMSAxOToxNzoyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNiw3ICsyNiw3IEBACisgIyAoSW5kZWVkLCAtciBtYXkgY2F1c2UgdGhlIHRlcm1pbmFsIHRvIGdldCBpbnRvIGZ1bm55IHN0YXRlcy4KKyAjIFZlcnkgaW5jb252ZW5pZW50LiBGb3Igdmlld2luZyBwYWdlcyBpbiBzdHJhbmdlIGxvY2FsZXMsIHNldCBMQ18qLikKKyAjCistREVGQVVMVExFU1NPUFQ9Ii1pcyIKKytERUZBVUxUTEVTU09QVD0iLWlzciIKKyAjCisgIyBOb3RlIHRoYXQgbm90IGNyZWF0aW5nIGFueSBjYXQgZGlyZWN0b3JpZXMgKC92YXIvY2FjaGUvbWFuIG9yIHNvKQorICMgYW5kIG5vdCBtYWtpbmcgbWFuIHN1aWQgb3Igc2dpZCBpcyByZWNvbW1lbmRlZC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1aWxkcm9vdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1aWxkcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzk3ZjU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmxlc3MJMjAwMy0xMi0xMSAxOToxODoxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyAuL2NvbmZpZ3VyZQkyMDAzLTEyLTExIDE5OjIwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTQwMSwxOCArNDAxLDEzIEBACisgCisgaWYgdGVzdCAiJGFucyIgPSAiZmFsc2UiCisgdGhlbgorLSAgZm9yIGkgaW4gbW9yZSBsZXNzIGNtcCBjYXQgYXdrIGdhd2sgbWF3aworLSAgZG8KKy0gICAgZXZhbCBGJGk9Im1pc3NpbmciCistICAgIGZvciBqIGluICRERUZQQVRICistICAgIGRvCistICAgICAgaWYgdGVzdCAtZiAkai8kaQorLSAgICAgIHRoZW4KKy0JZXZhbCBGJGk9JGovJGkKKy0JYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICBkb25lCisrICBGbW9yZT0vYmluL21vcmUKKysgIEZsZXNzPS91c3IvYmluL2xlc3MKKysgIEZjbXA9L3Vzci9iaW4vY21wCisrICBGY2F0PS9iaW4vY2F0CisrICBGZ2F3az0vYmluL2dhd2sKKysgIEZhd2s9L2Jpbi9nYXdrCisrICBGbWF3az1taXNzaW5nCisgICB0cm9mZj0iIgorICAgbnJvZmY9IiIKKyAgIGpucm9mZj0iIgorQEAgLTQ1Nyw2ICs0NTIsMTkgQEAKKyAgICAgICBmaQorICAgICBkb25lCisgICBkb25lCisrICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZnZXFuPS91c3IvYmluL2dlcW4KKysgIEZndGJsPS91c3IvYmluL2d0YmwKKysgIEZjb2w9L3Vzci9iaW4vY29sCisrICBGZ3JlZmVyPS91c3IvYmluL2dyZWZlcgorKyAgRmdwaWM9L3Vzci9iaW4vZ3BpYworKyAgRm1vcmU9L2Jpbi9tb3JlCisrICBGbGVzcz0vdXNyL2Jpbi9sZXNzCisrICBGY21wPS91c3IvYmluL2NtcAorKyAgRmNhdD0vYmluL2NhdAorKyAgRmdhd2s9L2Jpbi9nYXdrCisrCisrCisgICBmb3IgaSBpbiBlcW4gdGJsIHJlZmVyIHBpYworICAgZG8KKyAgICAgaWYgdGVzdCBgZXZhbCBlY2hvIFxcJEZnJGlgID0gIm1pc3NpbmciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1uby1jb2xvci1mb3ItcHJpbnRpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1uby1jb2xvci1mb3ItcHJpbnRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1ZmYxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41bTIvY29uZmlndXJlLmNvbG9yCTIwMDYtMDktMTYgMTg6Mjc6MzcuMDAwMDAwMDAwICswMjAwCisrKysgbWFuLTEuNW0yL2NvbmZpZ3VyZQkyMDA2LTA5LTE2IDE4OjI4OjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTUzOSw2ICs1MzksOCBAQAorICAgICB0cm9mZj0iJHRyb2ZmIC1jIgorICAgICBucm9mZj0iJG5yb2ZmIC1jIgorICAgICBqbnJvZmY9IiRqbnJvZmYgLWMiCisrZWxzZQorKyAgICB0cm9mZj0iJHRyb2ZmIC1jIgorIGZpCisgCisgaWYgWyB4JGRlZmF1bHQgPSB4IF07IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXNpZ3BpcGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjc4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVtMi9zcmMvdXRpbC5jX3NpZ3BpcGUJMjAwNi0xMi0wOSAxMzo0MzoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBtYW4tMS41bTIvc3JjL3V0aWwuYwkyMDA2LTEyLTA5IDEzOjUzOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTExNiwxMSArMTE2LDE0IEBACisgc3RhdGljIGludAorIHN5c3RlbTEgKGNvbnN0IGNoYXIgKmNvbW1hbmQpIHsKKyAJdm9pZCAoKnByZXZfaGFuZGxlcikoaW50KSA9IHNpZ25hbCAoU0lHSU5ULGNhdGNoX2ludCk7CisrCXNpZ25hbCAoU0lHUElQRSxTSUdfSUdOKTsKKyAJaW50IHJldCA9IHN5c3RlbShjb21tYW5kKTsKKyAKKyAJLyogY2hpbGQgdGVybWluYXRlZCB3aXRoIHNpZ25hbD8gKi8KKyAJaWYgKFdJRlNJR05BTEVEKHJldCkgJiYKKy0JICAgIChXVEVSTVNJRyhyZXQpID09IFNJR0lOVCB8fCBXVEVSTVNJRyhyZXQpID09IFNJR1FVSVQpKQorKwkgICAgKFdURVJNU0lHKHJldCkgPT0gU0lHSU5UIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdQSVBFIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdRVUlUKSkKKyAJCWV4aXQoMSk7CisgCisgCS8qIG9yIHdlIGNhdWdodCBhbiBpbnRlcnJ1cHQ/ICovCitAQCAtMTI4LDYgKzEzMSw3IEBACisgCQlleGl0KDEpOworIAorIAlzaWduYWwoU0lHSU5ULHByZXZfaGFuZGxlcik7CisrCXNpZ25hbChTSUdQSVBFLFNJR19ERkwpOworIAlyZXR1cm4gcmV0OworIH0KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXR2X2Zocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXR2X2Zocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTY2ZDc1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXR2X2Zocy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4vTWFrZWZpbGUuaW4JMjAwOC0xMi0yMSAxOToxOTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBtYW4vTWFrZWZpbGUuaW4ub2RlbgkyMDA4LTEyLTIxIDE5OjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDYgKzM0LDE1IEBACisgCWZvciBpIGluICQoTUFOOCk7IFwKKyAJCWRvIGlmIHRlc3QgLWYgJCRpLjg7IHRoZW4gJChJTlNUQUxMKSAkJGkuOCAkKG1hbmRpcikvbWFuOC8kJGkuQG1hbjhleHRAOyBmaTsgZG9uZQorIAorK2luc3RhbGwtbDEwbjogJChBTEwpCisrCW1rZGlyIC1wICQobWFuZGlyKS8kKFNMQU5HKS9tYW4xICQobWFuZGlyKS8kKFNMQU5HKS9tYW41ICQobWFuZGlyKS8kKFNMQU5HKS9tYW44CisrCWZvciBpIGluICQoTUFOMSk7IFwKKysJCWRvICQoSU5TVEFMTCkgJCRpLjEgJChtYW5kaXIpLyQoU0xBTkcpL21hbjEvJCRpLkBtYW4xZXh0QDsgZG9uZQorKwlmb3IgaSBpbiAkKE1BTjUpOyBcCisrCQlkbyAkKElOU1RBTEwpICQkaS41ICQobWFuZGlyKS8kKFNMQU5HKS9tYW41LyQkaS5AbWFuNWV4dEA7IGRvbmUKKysJZm9yIGkgaW4gJChNQU44KTsgXAorKwkJZG8gaWYgdGVzdCAtZiAkJGkuODsgdGhlbiAkKElOU1RBTEwpICQkaS44ICQobWFuZGlyKS8kKFNMQU5HKS9tYW44LyQkaS5AbWFuOGV4dEA7IGZpOyBkb25lCisrCisgY2xlYW46CisgCXJtIC1mIGNvcmUgKi5pbiAqLkBtYW4xZXh0QCAqLkBtYW41ZXh0QCAqLkBtYW44ZXh0QCAqfgorIAorQEAgLTQ5LDcgKzU4LDcgQEAKKyAJQGZvciBpIGluIEBsYW5ndWFnZXNAOyBkbyBpZiB0ZXN0IC1kICQkaTsgdGhlbiBlY2hvOyBcCisgCQllY2hvICI9PT09IEluc3RhbGxpbmcgdGhlIGBjYXQgJCRpLnR4dGAgbWFuIHBhZ2VzLiA9PT09IjsgXAorIAkJY2QgJCRpOyBTTEFORz0vJCRpOyBpZiB0ZXN0ICQkU0xBTkcgPSAvZW47IHRoZW4gU0xBTkc9IDsgZmk7IFwKKy0JCWV4cG9ydCBTTEFORzsgbWFrZSAtZiAuLi9NYWtlZmlsZSBpbnN0YWxsOyBjZCAuLjsgXAorKwkJZXhwb3J0IFNMQU5HOyBtYWtlIC1mIC4uL01ha2VmaWxlIGluc3RhbGwtbDEwbjsgY2QgLi47IFwKKyAJCWVsc2UgZWNobyAiPT09PSBObyAkJGkgbWFuIHBhZ2VzIGZvdW5kLiA9PT09IjsgZmk7IGRvbmUKKyAKKyBjbGVhbnN1YmRpcnM6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLWkxOG5fd2hhdGlzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzIxMzI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL2Fwcm9wb3Muc2ggbWFuLTEuNmUvc3JjL2Fwcm9wb3Muc2gKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9hcHJvcG9zLnNoCTIwMDctMDUtMTggMTM6NDk6MzEuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL2Fwcm9wb3Muc2gJMjAwNy0wNS0xOCAxNDoyNDozMy4wMDAwMDAwMDAgLTAzMDAKK0BAIC02MCwxNiArNjAsNTYgQEAKKyAgICAgZXNhYworIGRvbmUKKyAKKysjIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGxvb2sgZm9yCisrTEFOR19MSVNUPWBlY2hvICRMQU5HVUFHRTokTENfQUxMOiRMQ19NRVNTQUdFUzokTEFORyB8IHRyICc6JyAnICdgCisrRElSX0xJU1Q9IiIKKytmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAkbWFucGF0aCAvdXNyL2xpYgorK2RvCisrICAgIGZvciBsIGluICRMQU5HX0xJU1QKKysgICAgZG8KKysgICAgICAgIGlmIFsgLWQgJGQvJGwgXQorKyAgICAgICAgdGhlbgorKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdAorKyAgICAgICAgICAgIGlmICEgZWNobyAiJERJUl9MSVNUIiB8IGdyZXAgIiAkZC8kbFxiIiA+IC9kZXYvbnVsbAorKyAgICAgICAgICAgIHRoZW4KKysgICAgICAgICAgICAgICAgRElSX0xJU1Q9IiRESVJfTElTVCAkZC8kbCIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgZG9uZQorKyAgICBESVJfTElTVD0iJERJUl9MSVNUICRkIgorKyAgICAjIGNoZWNrIHRoYXQgdGhlIHBhdGggaXMgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QKKysgICAgaWYgISBlY2hvICIkRElSX0xJU1QiIHwgZ3JlcCAiICRkXGIiID4gL2Rldi9udWxsCisrICAgIHRoZW4KKysgICAgICAgIERJUl9MSVNUPSIkRElSX0xJU1QgJGQvJGwiCisrICAgIGZpCisrZG9uZQorKworIHdoaWxlIFsgIiQxIiAhPSAiIiBdCisgZG8KKyAgICAgZm91bmQ9MAorLSAgICBmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAkbWFucGF0aCAvdXNyL2xpYgorKyAgICAjIGluIG9yZGVyIG5vdCB0byBkaXNwbGF5IGxpbmVzIGluIG1vcmUgdGhhbiBvbmUgbGFuZ3VhZ2UgZm9yCisrICAgICMgYSBzYW1lIG1hbiBwYWdlOyB3ZSBjaGVjayB0aGF0IGEgZ2l2ZW4gbWFuIHBhZ2UgbmFtZQorKyAgICAjIGhhc24ndCBhbHJlYWR5IGJlZW4gZGlzcGxheWVkCisrICAgIEJBWj0iIgorKyAgICBmb3IgZCBpbiAkRElSX0xJU1QKKyAgICAgZG8KKyAgICAgICAgIGlmIFsgLWYgJGQvd2hhdGlzIF0KKyAgICAgICAgIHRoZW4KKy0gICAgICAgICAgICBpZiBncmVwIC0iJGdyZXBvcHQxIiAiJGdyZXBvcHQyIiIkMSIgJGQvd2hhdGlzCisrICAgICAgICAgICAgaWYgRk9PPWBncmVwIC0iJGdyZXBvcHQxIiAiJGdyZXBvcHQyIiIkMSIgJGQvd2hhdGlzYAorICAgICAgICAgICAgIHRoZW4KKy0gICAgICAgICAgICAgICAgZm91bmQ9MQorKyAgICAgICAgICAgICAgICAjIHRoZSBMQ19BTEw9QyBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgdGV4dCBpcworKyAgICAgICAgICAgICAgICAjIGluIGEgZGlmZmVyZW50IGVuY29kaW5nIHRoYW4gdGhlIGxvY2FsZQorKyAgICAgICAgICAgICAgICBCQVI9YGVjaG8gLWUgIiRGT08iIHwgTENfQUxMPUMgc2VkICdzLyAtIC4qJC8vJyB8IHRyICcgW10nICdfJyB8IHNvcnQgLXVgCisrICAgICAgICAgICAgICAgIGZvciBpIGluICRCQVIKKysgICAgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICAgICAgIGlmICEgZWNobyAiJEJBWiIgfCBncmVwICIkaSIgPiAvZGV2L251bGwKKysgICAgICAgICAgICAgICAgICAgIHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBCQVo9IiRCQVogJGkiCisrICAgICAgICAgICAgICAgICAgICAgICAgaT0iXmBlY2hvICRpIHwgc2VkICdzOl9cKzpcXFwoXFtfIFxdXFxcfFxcXFtcXFx8XFxcXVxcXClcXFwrOmcnYCIKKysgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICIkRk9PIiB8IGdyZXAgIiRpIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kPTEKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRvbmUKKyAjIFNvbWUgcGVvcGxlIGFyZSBzYXRpc2ZpZWQgd2l0aCBhIHNpbmdsZSBvY2N1cnJlbmNlCisgIyBCdXQgaXQgaXMgYmV0dGVyIHRvIGdpdmUgYWxsCisgIyAgICAgICAgICAgICAgIGJyZWFrCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21ha2V3aGF0aXMuc2ggbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTM6NDk6MzEuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gJMjAwNy0wNS0xOCAxMzo1MDowNy4wMDAwMDAwMDAgLTAzMDAKK0BAIC00MSwxMiArNDEsMzIgQEAKKyAKKyBwcm9ncmFtPWBiYXNlbmFtZSAkMGAKKyAKKysjIHRoaXMgYWxsb3dzIHRvIGRlZmluZSBsYW5ndWFnZSBzcGVjaWZpYyB2YWx1ZXMgZnJvIE5BTUUsIERFU0NSSVBUSU9OCisrIyBpZiBub3QgZGVmaW5lZCwgdXNpbmcgdGhvc2UgZGVmYXVsdCB2YWx1ZXMKKytpZiBbIC16ICIkTUFOX05BTUUiIF0KKyt0aGVuCisrCU1BTl9OQU1FPSLQmNCc0JV8Tk9NfEpNw4lOT3xOQVZOfM6fzp3On86czpF8Tk9NQlJFfE5JTUV8SVpFTkF8TklNSXxJTUV8XAorK07DiVZ8Tk9NRXzlkI3liY187J2066aEfE5BQU18TkFaV0F8TlVNRXzQmNCc0K98TUVOT3zQndCQ0JfQktCQfOWQjeensHzlkI3nqLEiCisrZmkKKytpZiBbIC16ICIkTUFOX0RFU0NSSVBUSU9OIiBdCisrdGhlbgorKwlNQU5fREVTQ1JJUFRJT049ItCe0J/QmNCh0JDQndCY0JV8REVTQ1JJUENJw5N8UE9QSVN8QkVTS1JJVkVMU0V8QkVTQ0hSRUlCVU5HfFwKKyvOoM6VzqHOmc6TzqHOkc6mzpd8REVTQ1JJUENJw5NOfEtJUkpFTERVU3xBWkFMUEVOQXxLVVZBVVN8T1BJU3xMRcONUsOBU3xERVNDUklaSU9ORXxcCisr6Kqs5piOfOyEpOuqhXxCRVNDSFJJSlZJTkd8REVTQ1JJw4fDg098REVTQ1JJRVJFfNCe0J/QmNChfOaPj+i/sCIKKytmaQorKyMgbWFrZSB0aGVtIGludG8gYXdrIHJlZ2V4cAorK01BTl9OQU1FPSJeKCR7TUFOX05BTUV9KSI7CisrTUFOX0RFU0NSSVBUSU9OPSJeKCR7TUFOX0RFU0NSSVBUSU9OfSkiOworKworICMgSW4gY2FzZSBib3RoIC91c3IvbWFuIGFuZCAvdXNyL3NoYXJlL21hbiBleGlzdCwgdGhlIGZvcm1lciBpcyBsb2NhbAorICMgYW5kIHNob3VsZCBiZSBmaXJzdC4KKyAjIEl0IGlzIGEgYnVnIHRvIGFkZCAvdmFyL2NhY2hlL21hbiB0byBERUZDQVRQQVRILgorIGRtPQorIGZvciBkIGluIC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisgZG8KKysgICAgaWYgWyAtbiAiJExBTkciIC1hIC1kICIkZC8kTEFORyIgXTsgdGhlbgorKwlpZiBbIHgkZG0gPSB4IF07IHRoZW4gZG09IiRkLyRMQU5HIjsgZWxzZSBkbT0kZG06IiRkLyRMQU5HIjsgZmkKKysgICAgZmkKKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkbSA9IHggXTsgdGhlbiBkbT0kZDsgZWxzZSBkbT0kZG06JGQ7IGZpCisgICAgIGZpCitAQCAtNTUsNiArNzUsOSBAQAorIGRjPQorIGZvciBkIGluIC92YXIvY2FjaGUvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4KKyBkbworKyAgICBpZiBbIC1uICIkTEFORyIgLWEgLWQgIiRkLyRMQU5HIiBdOyB0aGVuCisrCWlmIFsgeCRkYyA9IHggXTsgdGhlbiBkbT0iJGQvJExBTkciOyBlbHNlIGRtPSRkYzoiJGQvJExBTkciOyBmaQorKyAgICBmaQorICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRjID0geCBdOyB0aGVuIGRjPSRkOyBlbHNlIGRjPSRkYzokZDsgZmkKKyAgICAgZmkKK0BAIC0xOTQsNyArMjE3LDcgQEAKKyAJICAgIHNlY3Rpb249JGkKKyAJICAgIGN1cmRpcj0kbWFuZGlyLyR7cGFnZXN9JGkKKyAJICAgIGV4cG9ydCBzZWN0aW9uIHZlcmJvc2UgY3VyZGlyCistCSAgICBmaW5kICRtYW5kaXIvJHtwYWdlc30kaS8uIC1uYW1lICcqJyAkZmluZGFyZzAgJGZpbmRhcmcgLXByaW50IHwgJEFXSyAnCisrCSAgICBmaW5kICRtYW5kaXIvJHtwYWdlc30kaS8uIC1uYW1lICcqJyAkZmluZGFyZzAgJGZpbmRhcmcgLXByaW50IHwgTENfQUxMPUMgJEFXSyAtdiBNQU5fTkFNRT0iJE1BTl9OQU1FIiAtdiBNQU5fREVTQ1JJUFRJT049IiRNQU5fREVTQ1JJUFRJT04iICcKKyAKKyAJICAgIGZ1bmN0aW9uIHJlYWRsaW5lKCkgeworIAkgICAgICBpZiAodXNlX3pjYXQgfHwgdXNlX2J6Y2F0KSB7CitAQCAtMjYxLDEzICsyODQsNyBAQAorIAkJZ3N1YigvLlxiLywgIiIpOworIAkJaWYgKCgkMSB+IC9eXC5bU3NdW0hoXS8gJiYKKyAJCSAgKCQyIH4gL1tObl1bQWFdW01tXVtFZV0vIHx8CistCQkgICAkMiB+IC9eSk3JTk8vIHx8ICQyIH4gL15OQVZOLyB8fCAkMiB+IC9eTlVNRS8gfHwKKy0JCSAgICQyIH4gL15CRVpFSUNITlVORy8gfHwgJDIgfiAvXk5PTUJSRS8gfHwKKy0JCSAgICQyIH4gL15OSU1JLyB8fCAkMiB+IC9eTk9NLyB8fCAkMiB+IC9eSU1FLyB8fAorLQkJICAgJDIgfiAvXk5byUVdVi8gfHwgJDIgfiAvXk5BTUEvIHx8ICQyIH4gL17MvsGwLyB8fAorLQkJICAgJDIgfiAvXsy+vs4vIHx8ICQyIH4gL17AzLinLyB8fCAkMiB+IC9eTkFaV0EvIHx8CistCQkgICAkMiB+IC9e7uH69+Hu6eUvIHx8ICQyIH4gL17D+7PGLyB8fCAkMiB+IC9eple62S8gfHwKKy0JCSAgICQyIH4gL15OT01FLyB8fCAkMiB+IC9eTkFBTS8gfHwgJDIgfiAvXsjMxS8pKSB8fAorKwkJICAgJDIgfiBNQU5fTkFNRSApKSB8fAorIAkJICAocGFnZXMgPT0gImNhdCIgJiYgJDEgfiAvXk5BTUUvKSkgeworIAkJICAgIGlmICghaW5zaCkgeworIAkJICAgICAgaW5zaCA9IDE7CitAQCAtMjc4LDYgKzI5NSw3IEBACisgCQkgIGlmICgkMSB+IC9eXC5bU3NdW0hoWVNdLyB8fAorIAkJICAgIChwYWdlcyA9PSAiY2F0IiAmJgorIAkJICAgICgkMSB+IC9eU1t5WWVFXS8gfHwgJDEgfiAvXkRFU0NSSVBUSU9OLyB8fAorKwkJICAgICAkMSB+IE1BTl9ERVNDUklQVElPTiB8fAorIAkJICAgICAkMSB+IC9eQ09NTUFORC8gfHwgJDEgfiAvXk9WRVJWSUVXLyB8fAorIAkJICAgICAkMSB+IC9eU1RSVUNUVVJFUy8gfHwgJDEgfiAvXklOVFJPRFVDVElPTi8gfHwKKyAJCSAgICAgJDAgfiAvXlteIF0vKSkpIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbWFuZGlycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbWFuZGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQwMDY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1tYW5kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jb25mLmluCTIwMDUtMDgtMjAgMjA6MjY6MDYuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21hbi5jb25mLmluCTIwMDctMDUtMTggMTA6MzA6MjkuMDAwMDAwMDAwIC0wMzAwCitAQCAtMzYsMTEgKzM2LDEyIEBACisgIworICMgRXZlcnkgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgTUFOUEFUSCBpbmNsdWRlcyB0aGVzZSBmaWVsZHMKKyAjCistTUFOUEFUSAkvdXNyL21hbgorIE1BTlBBVEgJL3Vzci9zaGFyZS9tYW4KKytNQU5QQVRICS91c3IvWDExUjYvbWFuCisgTUFOUEFUSAkvdXNyL2xvY2FsL21hbgorIE1BTlBBVEgJL3Vzci9sb2NhbC9zaGFyZS9tYW4KKy1NQU5QQVRICS91c3IvWDExUjYvbWFuCisrTUFOUEFUSAkvdXNyL2tlcmJlcm9zL21hbgorK01BTlBBVEgJL3Vzci9tYW4KKyAjCisgIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBvbmUgb2YgdGhlc2UgYnkgZGVmYXVsdAorICMKK0BAIC02Nyw2ICs2OCw5IEBACisgTUFOUEFUSF9NQVAJL3Vzci9YMTFSNi9iaW4JCS91c3IvWDExUjYvbWFuCisgTUFOUEFUSF9NQVAJL3Vzci9iaW4vWDExCQkvdXNyL1gxMVI2L21hbgorIE1BTlBBVEhfTUFQCS91c3IvYmluL21oCQkvdXNyL3NoYXJlL21hbgorK01BTlBBVEhfTUFQCS91c3Iva2VyYmVyb3MvYmluCQkvdXNyL2tlcmJlcm9zL21hbgorK01BTlBBVEhfTUFQCS91c3Iva2VyYmVyb3Mvc2JpbgkJL3Vzci9rZXJiZXJvcy9tYW4KKysKKyAjCisgIyBOT0FVVE9QQVRIIGtlZXBzIG1hbiBmcm9tIGF1dG9tYXRpY2FsbHkgYWRkaW5nIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlCisgIyBtYW51YWwgcGFnZSBkaXJlY3RvcmllcyB0byB0aGUgcGF0aC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1uZXdfc2VjdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5NzczYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjZlLm9yaWcvY29uZmlndXJlCTIwMDYtMDUtMDEgMTQ6NTY6MTQuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvY29uZmlndXJlCTIwMDctMDUtMTggMTQ6MzU6NDMuMDAwMDAwMDAwIC0wMzAwCitAQCAtOTYwLDcgKzk2MCw3IEBACisgCisgIyBXaGF0IHNlY3Rpb25zIGRvIHdlIGFudGljaXBhdGU/CisgCistdG1wc2VjdGlvbnM9IjEgMXAgOCAyIDMgM3AgNCA1IDYgNyA5IDBwIHRjbCBuIGwgcCBvIgorK3RtcHNlY3Rpb25zPSIxIDFwIDggMiAzIDNwIDNwbSA0IDUgNiA3IDkgMHAgdGNsIG4gbCBwIG8iCisgCisgaWYgWyB4JGRlZmF1bHQgPSB4IF07IHRoZW4KKyAgIGVjaG8gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1yb191c3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxY2IwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFuLTEuNmYub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjQyOjM0LjAwMDAwMDAwMCAtMDgwMAorKysrIG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NDI6MzUuNjY3NDI4MzQ3IC0wODAwCitAQCAtMTI0LDcgKzEyNCw3IEBACisgCWNvbnRpbnVlOzsKKyAgICAgLXMpIHNldHNlY3Rpb25zPTEKKyAJY29udGludWU7OworLSAgICAtdSkgZmluZGFyZz0iLWN0aW1lIDAiCisrICAgIC11KSBmaW5kYXJnPSItbmV3ZXIgL3Zhci9jYWNoZS9tYW4vd2hhdGlzIgorIAl1cGRhdGU9MQorIAljb250aW51ZTs7CisgICAgIC12KSB2ZXJib3NlPTEKK0BAIC0xNjUsMTQgKzE2NSw3IEBACisgIyBmaXJzdCB0cnVuY2F0ZSBhbGwgdGhlIHdoYXRpcyBmaWxlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBuZXcsCisgIyB0aGVuIG9ubHkgdXBkYXRlIC0gd2UgbWlnaHQgdmlzaXQgdGhlIHNhbWUgZGlyZWN0b3J5IHR3aWNlCisgaWYgWyB4JHVwZGF0ZSA9IHggXTsgdGhlbgorLSAgIGZvciBwYWdlcyBpbiBtYW4gY2F0CistICAgZG8KKy0gICAgICBldmFsIHBhdGg9IlwkJHBhZ2VzInBhdGgKKy0gICAgICBmb3IgbWFuZGlyIGluICRwYXRoCistICAgICAgZG8KKy0JIGNwIC9kZXYvbnVsbCAkbWFuZGlyL3doYXRpcworLSAgICAgIGRvbmUKKy0gICBkb25lCisrICAgY3AgL2Rldi9udWxsIC92YXIvY2FjaGUvbWFuL3doYXRpcworIGZpCisgCisgZm9yIHBhZ2VzIGluIG1hbiBjYXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtc2VjdXJpdHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmE4ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDA2LTA3LTE5IDAxOjU4OjA4LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTA6MTg6MzEuMDAwMDAwMDAwIC0wMzAwCitAQCAtNDUsNyArNDUsNyBAQAorICMgYW5kIHNob3VsZCBiZSBmaXJzdC4KKyAjIEl0IGlzIGEgYnVnIHRvIGFkZCAvdmFyL2NhY2hlL21hbiB0byBERUZDQVRQQVRILgorIGRtPQorLWZvciBkIGluIC91c3IvbWFuIC91c3Ivc2hhcmUvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisrZm9yIGQgaW4gL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4gL3Vzci9YMTFSNi9tYW4gL3Vzci9sb2NhbC9tYW4KKyBkbworICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRtID0geCBdOyB0aGVuIGRtPSRkOyBlbHNlIGRtPSRkbTokZDsgZmkKK0BAIC01Myw3ICs1Myw3IEBACisgZG9uZQorIERFRk1BTlBBVEg9JGRtCisgZGM9CistZm9yIGQgaW4gL3Vzci9tYW4vcHJlZm9ybWF0IC91c3IvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL3NoYXJlL21hbgorK2ZvciBkIGluIC92YXIvY2FjaGUvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4KKyBkbworICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRjID0geCBdOyB0aGVuIGRjPSRkOyBlbHNlIGRjPSRkYzokZDsgZmkKK0BAIC03NiwxMiArNzYsMTIgQEAKKyAjIFdlIHRyeSBoZXJlIHRvIGJlIGNhcmVmdWwgKGFuZCBhdm9pZCBwcmVjb25zdHJ1Y3RlZCBzeW1saW5rcykKKyAjIGluIGNhc2UgbWFrZXdoYXRpcyBpcyBydW4gYXMgcm9vdCwgYnkgY3JlYXRpbmcgYSBzdWJkaXJlY3Rvcnkgb2YgL3RtcC4KKyAKKy1UTVBGSUxFRElSPS90bXAvd2hhdGlzLnRtcC5kaXIuJCQKKy1ybSAtcmYgJFRNUEZJTEVESVIKKy1pZiAhIG1rZGlyIC1tIDA3MDAgJFRNUEZJTEVESVI7IHRoZW4KKy0gICAgZWNobyBDb3VsZCBub3QgY3JlYXRlICRUTVBGSUxFRElSCistICAgIGV4aXQgMTsKKytUTVBGSUxFRElSPWBta3RlbXAgLWQgL3RtcC9tYWtld2hhdGlzWFhYWFhYYAorK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorKyAgIGVjaG8gIiQwOiBDYW4ndCBjcmVhdGUgdGVtcCBmaWxlLCBleGl0aW5nLi4uIgorKyAgIGV4aXQgMQorIGZpCisrY2htb2QgMDcwMCAkVE1QRklMRURJUgorIFRNUEZJTEU9JFRNUEZJTEVESVIvdworIAorICMgbWFrZSBzdXJlIFRNUEZJTEVESVIgaXMgZGVsZXRlZCBpZiBwcm9ncmFtIGlzIGtpbGxlZCBvciB0ZXJtaW5hdGVzCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jIG1hbi0xLjZlL3NyYy9tYW4uYworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jCTIwMDYtMDUtMDEgMTc6MzQ6MjIuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21hbi5jCTIwMDctMDUtMTggMTA6MTE6MzMuMDAwMDAwMDAwIC0wMzAwCitAQCAtMTIzNCw3ICsxMjM0LDYgQEAKKyAjZW5kaWYKKyAKKyAKKy0jaWYgMAorICAgICAgeworIAkvKiBUaGVyZSBhcmUgbm8ga25vd24gY2FzZXMgb2YgYnVmZmVyIG92ZXJmbG93IGNhdXNlZCBieQorIAkgICBleGNlc3NpdmVseSBsb25nIGVudmlyb25tZW50IHZhcmlhYmxlcy4gSW4gY2FzZSB5b3UgZmluZCBvbmUsCitAQCAtMTI1Nyw3ICsxMjU2LDYgQEAKKyAJICAgTUFOX0lDT05WX1BBVEgsIE1BTl9JQ09OVl9PUFQsIE1BTl9JQ09OVl9JTlBVVF9DSEFSU0VULAorIAkgICBNQU5fSUNPTlZfT1VUUFVUX0NIQVJTRVQsIE5MU1BBVEgsIFBBVEggKi8KKyAgICAgIH0KKy0jZW5kaWYKKyAKKyAKKyAjaWZuZGVmIF9fRnJlZUJTRF9fIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS11c2VfaTE4bl92YXJzX2luX2Ffc3RkX3dheS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4Zjc0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL2NhdG9wZW4vY2F0b3Blbi5jIG1hbi0xLjZlL2NhdG9wZW4vY2F0b3Blbi5jCistLS0gbWFuLTEuNmUub3JpZy9jYXRvcGVuL2NhdG9wZW4uYwkyMDA1LTA4LTIwIDIwOjI2OjA2LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL2NhdG9wZW4vY2F0b3Blbi5jCTIwMDctMDUtMTggMTE6MzE6MDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtOSwyMiArOSw2MyBAQAorIGV4dGVybiBjaGFyICppbmRleCAoY29uc3QgY2hhciAqLCBpbnQpOyAgICAgICAgIC8qIG5vdCBhbHdheXMgaW4gPHN0cmluZy5oPiAqLworIGV4dGVybiBjaGFyICpteV9tYWxsb2MoaW50KTsJLyogaW4gdXRpbC5jICovCisgCisrLyogaWYgdGhlIHByb2dyYW0gaGFzIHNnaWQvc3VpZCBwcml2aWxlZ2VzIHRoZW4gZ2V0ZW52IGRvZXNuJ3QgcmV0dXJuCisrICogTkxTUEFUSDsgc28gd2Ugc2V0IGhlcmUgYSBnb29kIGRlZmF1bHQgdmFsdWUuCisrICovCisgI2lmbmRlZiBERUZBVUxUX05MU1BBVEgKKyAjIGlmIF9fR0xJQkNfXyA+PSAyCistIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9zaGFyZS9sb2NhbGUvJUwvJU4iCisrIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9zaGFyZS9sb2NhbGUvJUwvJU46L3Vzci9zaGFyZS9sb2NhbGUvJWxfJXQvJU46L3Vzci9zaGFyZS9sb2NhbGUvJWwvJU4iCisgIyBlbHNlCisgIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9saWIvbG9jYWxlLyVOLyVMIgorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy1zdGF0aWMgbmxfY2F0ZCBteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpwYXRoKTsKKytzdGF0aWMgbmxfY2F0ZCBteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpwYXRoLCBjaGFyICpsYW5nKTsKKyAKKyBzdGF0aWMJCQkJLyogdGhpcyBzb3VyY2UgaW5jbHVkZWQgaW4gZ3JpcGVzLmMgKi8KKyBubF9jYXRkCisgbXlfY2F0b3BlbihjaGFyICpuYW1lLCBpbnQgb2ZsYWcpIHsKKy0gIG5sX2NhdGQgZmQ7CisrICBubF9jYXRkIGZkID0gKG5sX2NhdGQpIC0xOworKworKyAgLyogdXNpbmcgZmlyc3QgdGhlIG15X2NhdG9wZW5wYXRoLCB3aGljaCBsb29rcyB3aXRoIExBTkdVQUdFCisrICAgKiBhbmQgb25seSBpZiBpdCBmYWlscyByZXNzb3J0IHRvIGNhdG9wZW4sIGl0IGdpdmVzIGJldHRlciBpMThuCisrICAgKi8KKysgIHsKKysgICAgY2hhciAqbmxzcGF0aCwgKmxhbmcsICpzOworIAorLSAgZmQgPSBjYXRvcGVuKG5hbWUsIG9mbGFnKTsKKysgICAgLyoKKysgICAgICogIklmIE5MU1BBVEggZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudmlyb25tZW50LCBvciBpZiBhCisrICAgICAqIG1lc3NhZ2UgY2F0YWxvZyBjYW5ub3QgYmUgb3BlbmVkIGluIGFueSBvZiB0aGUgcGF0aHMgc3BlY2lmaWVkCisrICAgICAqIGJ5IE5MU1BBVEgsIHRoZW4gYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBkZWZhdWx0IHBhdGggaXMgdXNlZCIKKysgICAgICovCisrICAgIG5sc3BhdGggPSBnZXRlbnYoIk5MU1BBVEgiKTsKKysgICAgaWYgKCFubHNwYXRoKQorKyAgICAgIG5sc3BhdGggPSBERUZBVUxUX05MU1BBVEg7CisrIAorKyAgICBsYW5nID0gZ2V0ZW52KCJMQU5HVUFHRSIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTENfQUxMIik7CisrICAgIGlmICghbGFuZykKKysgICAgICBsYW5nID0gZ2V0ZW52KCJMQ19NRVNTQUdFUyIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTEFORyIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9ICIiOworKyAKKysgICAgd2hpbGUoKmxhbmcgJiYgKGZkID09IChubF9jYXRkKSAtMSkpIHsKKysgICAgICBzID0gaW5kZXgobGFuZywgJzonKTsKKysgICAgICBpZiAocykgKnMgPSAwOworKyAgICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoLCBsYW5nKTsKKysgICAgICBpZiAocykgbGFuZz1zKzE7CisrICAgICAgZWxzZSBsYW5nID0gIiI7CisrICAgIH0KKysgICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKysgICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIG5sc3BhdGgsICJlbiIpOworKyAgfQorKworKyAgLyogc3RpbGwgbm90IGZvdW5kLCB1c2UgdGhlIHN5c3RlbSBjYXRvcGVuICovCisrICBpZiAoZmQgPT0gKG5sX2NhdGQpIC0xKQorKyAgICBmZCA9IGNhdG9wZW4obmFtZSwgb2ZsYWcpOworIAorICAgaWYgKGZkID09IChubF9jYXRkKSAtMSAmJiBvZmxhZykgeworICAgICBvZmxhZyA9IDA7CitAQCAtMzIsOCArNzMsNiBAQAorICAgfQorIAorICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkgeworLSAgICBjaGFyICpubHNwYXRoOworLQorICAgICAvKiBUaGUgbGliYyBjYXRvcGVuIGZhaWxzIC0gbGV0IHVzIHNlZSBpZiB3ZSBjYW4gZG8gYmV0dGVyICovCisgICAgIC8qIFRoZSBxdW90ZXMgYmVsb3cgYXJlIGZyb20gWC9PcGVuLCBYUEcgMTk4NywgVm9sLiAzLiAqLworIAorQEAgLTU4LDE3ICs5Nyw2IEBACisgI2VuZGlmCisgICAgIH0KKyAKKy0gICAgLyoKKy0gICAgICogIklmIE5MU1BBVEggZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudmlyb25tZW50LCBvciBpZiBhCistICAgICAqIG1lc3NhZ2UgY2F0YWxvZyBjYW5ub3QgYmUgb3BlbmVkIGluIGFueSBvZiB0aGUgcGF0aHMgc3BlY2lmaWVkCistICAgICAqIGJ5IE5MU1BBVEgsIHRoZW4gYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBkZWZhdWx0IHBhdGggaXMgdXNlZCIKKy0gICAgICovCistCistICAgIG5sc3BhdGggPSBnZXRlbnYoIk5MU1BBVEgiKTsKKy0gICAgaWYgKG5sc3BhdGgpCistICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoKTsKKy0gICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKy0gICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIERFRkFVTFRfTkxTUEFUSCk7CisgICB9CisgICByZXR1cm4gZmQ7CisgfQorQEAgLTkwLDE1ICsxMTgsMTMgQEAKKyAgKgorICAqLworIHN0YXRpYyBubF9jYXRkCistbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqbmxzcGF0aCkgeworLSAgaW50IGZkOworK215X2NhdG9wZW5wYXRoKGNoYXIgKm5hbWUsIGNoYXIgKm5sc3BhdGgsIGNoYXIgKmxhbmcpIHsKKyAgIG5sX2NhdGQgY2ZkID0gKG5sX2NhdGQpIC0xOworLSAgY2hhciAqcGF0aDAsICpwYXRoLCAqcywgKmZpbGUsICpsYW5nLCAqbGFuZ19sLCAqbGFuZ190LCAqbGFuZ19jOworKyAgY2hhciAqcGF0aDAsICpwYXRoLCAqcywgKmZpbGUsICpsYW5nX2wsICpsYW5nX3QsICpsYW5nX2M7CisgICBpbnQgbGFuZ3N6LCBuYW1lc3osIHN6LCBsYW5nX2xfc3osIGxhbmdfdF9zeiwgbGFuZ19jX3N6OworIAorICAgbmFtZXN6ID0gc3RybGVuKG5hbWUpOworIAorLSAgbGFuZyA9IGdldGVudigiTEFORyIpOworICAgaWYgKCFsYW5nKQorICAgICBsYW5nID0gIiI7CisgICBsYW5nc3ogPSBzdHJsZW4obGFuZyk7CitAQCAtMTk0LDE0ICsyMjAsOSBAQAorICAgICAgIHBhdGggPSBzKzE7CisgICAgIH0gZWxzZQorICAgICAgIHBhdGggPSAwOworLSAgICBmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworLSAgICBpZiAoZmQgIT0gLTEpIHsKKy0gICAgICAvKiB3ZSBmb3VuZCB0aGUgcmlnaHQgY2F0YWxvZyAtIGJ1dCB3ZSBkb24ndCBrbm93IHRoZQorLQkgdHlwZSBvZiBubF9jYXRkLCBzbyBjbG9zZSBpdCBhZ2FpbiBhbmQgYXNrIGxpYmMgKi8KKy0gICAgICBjbG9zZShmZCk7CistICAgICAgY2ZkID0gY2F0b3BlbihmaWxlLCAwKTsKKy0gICAgICBicmVhazsKKy0gICAgfQorKwljZmQgPSBjYXRvcGVuKGZpbGUsIDApOworKwlpZiAoY2ZkICE9IChubF9jYXRkKSAtMSkKKysJCQlicmVhazsKKyAgIH0KKyAKKyAgIGZyZWUocGF0aDApOworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYW5wYXRoLmMgbWFuLTEuNmUvc3JjL21hbnBhdGguYworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbnBhdGguYwkyMDA2LTA4LTAzIDE4OjE4OjMzLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYW5wYXRoLmMJMjAwNy0wNS0xOCAxMTowMjo0OC4wMDAwMDAwMDAgLTAzMDAKK0BAIC0yODIsMTMgKzI4MiwxNCBAQAorIAkJLyogV2UgY2Fubm90IHVzZSAibGFuZyA9IHNldGxvY2FsZShMQ19NRVNTQUdFUywgTlVMTCkiIG9yIHNvOgorIAkJICAgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRsb2NhbGUgaXMgYW4gb3BhcXVlIHN0cmluZy4gKi8KKyAJCS8qIFBPU0lYIHByZXNjcmliZXMgdGhlIG9yZGVyOiBMQ19BTEwsIExDX01FU1NBR0VTLCBMQU5HICovCistCQlpZigobGFuZyA9IGdldGVudigiTENfQUxMIikpICE9IE5VTEwpCisrCSAgICAgICAgLyogTEFOR1VBR0UgaXMgR05VL0xpbnV4IGFuZCBvdmVycnVsZXMgYWxsICovCisrCQlpZigobGFuZyA9IGdldGVudigiTEFOR1VBR0UiKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CistCQlpZigobGFuZyA9IGdldGVudigiTENfTUVTU0FHRVMiKSkgIT0gTlVMTCkKKysJCWVsc2UgaWYoKGxhbmcgPSBnZXRlbnYoIkxDX0FMTCIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQU5HIikpICE9IE5VTEwpCisrCQllbHNlIGlmKChsYW5nID0gZ2V0ZW52KCJMQ19NRVNTQUdFUyIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQU5HVUFHRSIpKSAhPSBOVUxMKQorKwkJZWxzZSBpZigobGFuZyA9IGdldGVudigiTEFORyIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKyAJCWFkZF90b19tYW5kaXJsaXN0X3goZGlyLCAwLCBwZXJycyk7CisgCX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtd2hhdGlzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtd2hhdGlzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzRlZDMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS13aGF0aXMyLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFuLTEuNmYub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjUxOjQ1LjAwMDAwMDAwMCAtMDgwMAorKysrIG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NTk6MzUuMzk5Nzk5NDEyIC0wODAwCitAQCAtMTY0LDEwICsxNjQsMTUgQEAKKyBmaQorIGNhdHBhdGg9YGVjaG8gJHtjYXRwYXRofSB8IHRyIDogJyAnYAorIAorKyNXSEFUSVNfRElSPSRERVNURElSL3Zhci9jYWNoZS9tYW4vYGVjaG8gJGhlcmV8c2VkIC1lICdzIS4qL21hbi8hIWcnYAorK1dIQVRJU19ESVI9JERFU1RESVIvdmFyL2NhY2hlL21hbi8kTEFORworK1tbIC1kICRXSEFUSVNfRElSIF1dIHx8IG1rZGlyIC1wICRXSEFUSVNfRElSLworKworICMgZmlyc3QgdHJ1bmNhdGUgYWxsIHRoZSB3aGF0aXMgZmlsZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgbmV3LAorICMgdGhlbiBvbmx5IHVwZGF0ZSAtIHdlIG1pZ2h0IHZpc2l0IHRoZSBzYW1lIGRpcmVjdG9yeSB0d2ljZQorIGlmIFsgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0gICBjcCAvZGV2L251bGwgL3Zhci9jYWNoZS9tYW4vd2hhdGlzCisrICAgbWtkaXIgLXAgJFdIQVRJU19ESVIvCisrICAgL2Jpbi9lY2hvIC1uID4gJFdIQVRJU19ESVIvd2hhdGlzCisgZmkKKyAKKyBmb3IgcGFnZXMgaW4gbWFuIGNhdAorQEAgLTE4MCwxMyArMTg1LDcgQEAKKyAJZWNobyAiYWJvdXQgdG8gZW50ZXIgJG1hbmRpciIgPiAvZGV2L3N0ZGVycgorICAgICAgZmkKKyAKKy0gICAgICMga2x1ZGdlIGZvciBTbGFja3dhcmUncyAvdXNyL21hbi9wcmVmb3JtYXQKKy0gICAgIGlmIFsgJG1hbmRpciA9IC91c3IvbWFuL3ByZWZvcm1hdCBdCistICAgICB0aGVuCistCW1hbmRpcjE9L3Vzci9tYW4KKy0gICAgIGVsc2UKKy0JbWFuZGlyMT0kbWFuZGlyCistICAgICBmaQorKyAgICAgbWFuZGlyMT0kV0hBVElTX0RJUgorIAorICAgICAgIyBpZiAkbWFuZGlyIGlzIG9uIGEgcmVhZG9ubHkgcGFydGl0aW9uLCBhbmQgdGhlIHdoYXRpcyBmaWxlCisgICAgICAjIGlzIG5vdCBhIHN5bWxpbmssIHRoZW4gbGV0J3Mgc2tpcCB0cnlpbmcgdG8gdXBkYXRlIGl0CitAQCAtMjA3LDExICsyMDYsNiBAQAorIAlmaQorICAgICAgZmkKKyAKKy0gICAgIGlmIFsgLXMgJHttYW5kaXJ9L3doYXRpcyAtYSAkcGFnZXMgPSBtYW4gLWEgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0JaWYgWyB4JHZlcmJvc2UgIT0geCBdOyB0aGVuCistCSAgIGVjaG8gc2tpcHBpbmcgJG1hbmRpciAtIHdlIGRpZCBpdCBhbHJlYWR5ID4gL2Rldi9zdGRlcnIKKy0JZmkKKy0gICAgIGVsc2UgICAgICAKKyAgICAgICAgaGVyZT1gcHdkYAorICAgICAgICBjZCAkbWFuZGlyCisgICAgICAgIGZvciBpIGluICRzZWN0aW9ucworQEAgLTQ0Nyw3ICs0NDcsNiBAQAorCisgICAgICAgIGNobW9kIDY0NCAke21hbmRpcjF9L3doYXRpcworICAgICAgICBybSAkVE1QRklMRQorLSAgICAgZmkKKyAgICBkb25lCisgZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42Zy13aGF0aXMzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42Zy13aGF0aXMzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzQ0NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZnLXdoYXRpczMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRG8gbm90IHVzZSBhYnNvbHV0ZSBwYXRoIGZvciBhd2sgd2hpbGUgZ2V0dGluZyB0aGUgcGF0aCBvZiBhd2sKK3doZW4gcnVubmluZyBtYWtld2hhdGlzLgorVGhpcyBjYW4gYXZvaWQgZXJyb3JzIGlmIHBhdGggb2YgYXdrIGNoYW5nZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFttYW4tMS42Z10KKworU2lnbmVkLW9mZi1ieTogSmlhbiBMaXUgPGppYW4ubGl1QHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51ciBtYW4tMS42Zy5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZnL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmcub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDE1LTAyLTI1IDE2OjEzOjEyLjY1NzYxMTQxOSArMDgwMAorKysrIG1hbi0xLjZnL3NyYy9tYWtld2hhdGlzLnNoCTIwMTUtMDItMjUgMTY6MTQ6NDkuMzM0Njk0ODE1ICswODAwCitAQCAtNjcsNyArNjcsNyBAQAorICMgYnV0IHRoYXQgbGVhZHMgdG8gcHJvYmxlbXMgYW5kIGJ1Z3MuCisKKyAjIEFXSz0vdXNyL2Jpbi9nYXdrCistQVdLPUBhd2tACisrQVdLPWB3aGljaCBhd2tgCisKKyAjIEZpbmQgYSBwbGFjZSBmb3Igb3VyIHRlbXBvcmFyeSBmaWxlcy4gSWYgc2VjdXJpdHkgaXMgbm90IGEgY29uY2VybiwgdXNlCisgIwlUTVBGSUxFPS90bXAvd2hhdGlzJCQ7IFRNUEZJTEVESVI9bm9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uMS5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2ODA0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uNy5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1YWY4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxMGJlMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYKQEAgLTAsMCArMSwxNDEgQEAKKyMKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBtYW4uY29uZi5pbiBieSB0aGUKKyMgY29uZmlndXJlIHNjcmlwdC4KKyMKKyMgbWFuLmNvbmYgZnJvbSBtYW4tMS41cAorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUsIHNlZSB0aGUgbWFuIHBhZ2VzIG1hbigxKQorIyBhbmQgbWFuLmNvbmYoNSkuCisjCisjIFRoaXMgZmlsZSBpcyByZWFkIGJ5IG1hbiB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgbWFucGF0aCAoYWxzbyB1c2VkCisjIHdoZW4gTUFOUEFUSCBjb250YWlucyBhbiBlbXB0eSBzdWJzdHJpbmcpLCB0byBmaW5kIG91dCB3aGVyZSB0aGUgY2F0CisjIHBhZ2VzIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gbWFuIHBhZ2VzIHNob3VsZCBiZSBzdG9yZWQsCisjIGFuZCB0byBtYXAgZWFjaCBQQVRIIGVsZW1lbnQgdG8gYSBtYW5wYXRoIGVsZW1lbnQuCisjIEl0IG1heSBhbHNvIHJlY29yZCB0aGUgcGF0aG5hbWUgb2YgdGhlIG1hbiBiaW5hcnkuIFtUaGlzIGlzIHVudXNlZC5dCisjIFRoZSBmb3JtYXQgaXM6CisjCisjIE1BTkJJTgkJcGF0aG5hbWUKKyMgTUFOUEFUSAkJbWFucGF0aF9lbGVtZW50CVtjb3JyZXNwb25kaW5nX2NhdGRpcl0KKyMgTUFOUEFUSF9NQVAJCXBhdGhfZWxlbWVudAltYW5wYXRoX2VsZW1lbnQKKyMKKyMgSWYgbm8gY2F0ZGlyIGlzIGdpdmVuLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGVxdWFsIHRvIHRoZSBtYW5kaXIKKyMgKHNvIHRoYXQgdGhpcyBkaXIgaGFzIGJvdGggbWFuMSBldGMuIGFuZCBjYXQxIGV0Yy4gc3ViZGlycykuCisjIFRoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIFVuaXggc2V0dXAuCisjIENlcnRhaW4gdmVyc2lvbnMgb2YgdGhlIEZTU1RORCByZWNvbW1lbmQgcHV0dGluZyBmb3JtYXR0ZWQgdmVyc2lvbnMKKyMgb2YgL3Vzci8uLi4vbWFuL21hbngvcGFnZS54IGludG8gL3Zhci9jYXRtYW4vLi4uL2NhdHgvcGFnZS54LgorIyBUaGUga2V5d29yZCBGU1NUTkQgd2lsbCBjYXVzZSB0aGlzIGJlaGF2aW91ci4KKyMgQ2VydGFpbiB2ZXJzaW9ucyBvZiB0aGUgRkhTIHJlY29tbWVuZCBwdXR0aW5nIGZvcm1hdHRlZCB2ZXJzaW9ucyBvZgorIyAvdXNyLy4uLi9zaGFyZS9tYW4vW2xvY2FsZS9dbWFueC9wYWdlLnggaW50bworIyAvdmFyL2NhY2hlL21hbi8uLi4vW2xvY2FsZS9dY2F0eC9wYWdlLnguCisjIFRoZSBrZXl3b3JkIEZIUyB3aWxsIGNhdXNlIHRoaXMgYmVoYXZpb3VyIChhbmQgb3ZlcnJpZGVzIEZTU1RORCkuCisjIEV4cGxpY2l0bHkgZ2l2ZW4gY2F0ZGlycyBvdmVycmlkZS4KKyMKKyMgRlNTVE5ECitGSFMKKyMKKyMgVGhpcyBmaWxlIGlzIGFsc28gcmVhZCBieSBtYW4gaW4gb3JkZXIgdG8gZmluZCBob3cgdG8gY2FsbCBucm9mZiwgbGVzcywgZXRjLiwKKyMgYW5kIHRvIGRldGVybWluZSB0aGUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBleHRlbnNpb25zIGFuZCBkZWNvbXByZXNzb3JzLgorIworIyBNQU5CSU4JCS91c3IvbG9jYWwvYmluL21hbgorIworIyBFdmVyeSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBNQU5QQVRIIGluY2x1ZGVzIHRoZXNlIGZpZWxkcworIworTUFOUEFUSAkvdXNyL21hbgorTUFOUEFUSAkvdXNyL3NoYXJlL21hbgorTUFOUEFUSAkvdXNyL2xvY2FsL21hbgorTUFOUEFUSAkvdXNyL2xvY2FsL3NoYXJlL21hbgorTUFOUEFUSAkvdXNyL1gxMVI2L21hbgorIworIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBvbmUgb2YgdGhlc2UgYnkgZGVmYXVsdAorIworIyBNQU5QQVRICS9vcHQvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL2xpYi8qL21hbgorIyBNQU5QQVRICS91c3Ivc2hhcmUvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL2tlcmJlcm9zL21hbgorIworIyBTZXQgdXAgUEFUSCB0byBNQU5QQVRIIG1hcHBpbmcKKyMKKyMgSWYgcGVvcGxlIGFzayBmb3IgIm1hbiBmb28iIGFuZCBoYXZlICIvZGlyL2Jpbi9mb28iIGluIHRoZWlyIFBBVEgKKyMgYW5kIHRoZSBkb2NzIGFyZSBmb3VuZCBpbiAiL2Rpci9tYW4iLCB0aGVuIG5vIG1hcHBpbmcgaXMgcmVxdWlyZWQuCisjCisjIFRoZSBiZWxvdyBtYXBwaW5ncyBhcmUgc3VwZXJmbHVvdXMgd2hlbiB0aGUgcmlnaHQgaGFuZCBzaWRlIGlzCisjIGluIHRoZSBtYW5kYXRvcnkgbWFucGF0aCBhbHJlYWR5LCBidXQgd2lsbCBrZWVwIG1hbiBmcm9tIHN0YXR0aW5nCisjIGxvdHMgb2Ygb3RoZXIgbmVhcmJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyMKK01BTlBBVEhfTUFQCS9iaW4JCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3NiaW4JCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4JCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL3NiaW4JCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL2xvY2FsL2JpbgkJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvbG9jYWwvc2JpbgkJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvWDExUjYvYmluCQkvdXNyL1gxMVI2L21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4vWDExCQkvdXNyL1gxMVI2L21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4vbWgJCS91c3Ivc2hhcmUvbWFuCisjCisjIE5PQVVUT1BBVEgga2VlcHMgbWFuIGZyb20gYXV0b21hdGljYWxseSBhZGRpbmcgZGlyZWN0b3JpZXMgdGhhdCBsb29rIGxpa2UKKyMgbWFudWFsIHBhZ2UgZGlyZWN0b3JpZXMgdG8gdGhlIHBhdGguCisjCisjTk9BVVRPUEFUSAorIworIyBOT0NBQ0hFIGtlZXBzIG1hbiBmcm9tIGNyZWF0aW5nIGNhY2hlIHBhZ2VzICgiY2F0IHBhZ2VzIikKKyMgKGdlbmVyYWxseSBvbmUgZW5hYmxlcy9kaXNhYmxlIGNhdCBwYWdlIGNyZWF0aW9uIGJ5IGNyZWF0aW5nL2RlbGV0aW5nCisjIHRoZSBkaXJlY3RvcnkgdGhleSB3b3VsZCBsaXZlIGluIC0gbWFuIG5ldmVyIGRvZXMgbWtkaXIpCisjIAorI05PQ0FDSEUKKyMKKyMgVXNlZnVsIHBhdGhzIC0gbm90ZSB0aGF0IENPTCBzaG91bGQgbm90IGJlIGRlZmluZWQgd2hlbgorIyBOUk9GRiBpcyBkZWZpbmVkIGFzICJncm9mZiAtVGFzY2lpIiBvciAiZ3JvZmYgLVRsYXRpbjEiOworIyBub3Qgb25seSBpcyBpdCBzdXBlcmZsdW91cywgYnV0IGl0IGFjdHVhbGx5IGRhbWFnZXMgdGhlIG91dHB1dC4KKyMgRm9yIHVzZSB3aXRoIHV0Zi04LCBOUk9GRiBzaG91bGQgYmUgIm5yb2ZmIC1tYW5kb2MiIHdpdGhvdXQgLVQgb3B0aW9uLgorIyAoTWF5YmUgLSBidXQgdG9kYXkgSSBuZWVkIC1UbGF0aW4xIHRvIHByZXZlbnQgZG91YmxlIGNvbnZlcnNpb24gdG8gdXRmOC4pCisjCisjIElmIHlvdSBoYXZlIGEgbmV3IHRyb2ZmICh2ZXJzaW9uIDEuMTguMT8pIGFuZCBpdHMgY29sb3JlZCBvdXRwdXQKKyMgY2F1c2VzIHByb2JsZW1zLCBhZGQgdGhlIC1jIG9wdGlvbiB0byBUUk9GRiwgTlJPRkYsIEpOUk9GRi4KKyMKK1RST0ZGCQkvdXNyL2Jpbi9ncm9mZiAtVHBzIC1tYW5kb2MKK05ST0ZGCQkvdXNyL2Jpbi9ucm9mZiAtVGxhdGluMSAtbWFuZG9jCitKTlJPRkYJCS91c3IvYmluL2dyb2ZmIC1UbmlwcG9uIC1tYW5kb2NqCitFUU4JCS91c3IvYmluL2VxbiAtVHBzCitORVFOCQkvdXNyL2Jpbi9lcW4gLVRsYXRpbjEKK0pORVFOCQkvdXNyL2Jpbi9lcW4gLVRuaXBwb24KK1RCTAkJL3Vzci9iaW4vdGJsCisjIENPTAkJL3Vzci9iaW4vY29sCitSRUZFUgkJL3Vzci9iaW4vcmVmZXIKK1BJQwkJL3Vzci9iaW4vcGljCitWR1JJTkQJCQorR1JBUAkJCitQQUdFUgkJL3Vzci9iaW4vbGVzcyAtaXNSCitDQVQJCS9iaW4vY2F0CisjCisjIFRoZSBjb21tYW5kICJtYW4gLWEgeHl6enkiIHdpbGwgc2hvdyBhbGwgbWFuIHBhZ2VzIGZvciB4eXp6eS4KKyMgV2hlbiBDTVAgaXMgZGVmaW5lZCBtYW4gd2lsbCB0cnkgdG8gYXZvaWQgc2hvd2luZyB0aGUgc2FtZQorIyB0ZXh0IHR3aWNlLiAoQnV0IGNvbXByZXNzZWQgcGFnZXMgY29tcGFyZSB1bmVxdWFsLikKKyMKK0NNUAkJL3Vzci9iaW4vY21wIC1zCisjCisjIENvbXByZXNzIGNhdCBwYWdlcworIworQ09NUFJFU1MJL2Jpbi9iemlwMgorQ09NUFJFU1NfRVhUCS5iejIKKyMKKyMgRGVmYXVsdCBtYW51YWwgc2VjdGlvbnMgKGFuZCBvcmRlcikgdG8gc2VhcmNoIGlmIC1TIGlzIG5vdCBzcGVjaWZpZWQKKyMgYW5kIHRoZSBNQU5TRUNUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuCisjCitNQU5TRUNUCQkxOjFwOjg6MjozOjNwOjQ6NTo2Ojc6OTowcDp0Y2w6bjpsOnA6bworIworIyBEZWZhdWx0IG9wdGlvbnMgdG8gdXNlIHdoZW4gbWFuIGlzIGludm9rZWQgd2l0aG91dCBvcHRpb25zCisjIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiB0aG9zZSB0aGF0IHRoaW5rIC1hIHNob3VsZCBiZSB0aGUgZGVmYXVsdAorIyBOb3RlIHRoYXQgc29tZSBzeXN0ZW1zIGhhdmUgL3Vzci9tYW4vYWxsbWFuLCBjYXVzaW5nIHBhZ2VzIHRvIGJlIHNob3duIHR3aWNlLgorIworI01BTkRFRk9QVElPTlMJLWEKKyMKKyMgRGVjb21wcmVzcyB3aXRoIGdpdmVuIGRlY29tcHJlc3NvciB3aGVuIGlucHV0IGZpbGUgaGFzIGdpdmVuIGV4dGVuc2lvbgorIyBUaGUgY29tbWFuZCBnaXZlbiBtdXN0IGFjdCBhcyBhIGZpbHRlci4KKyMKKy5negkJL2Jpbi9ndW56aXAgLWMKKy5iejIJCS91c3IvYmluL2J1bnppcDIgLWMKKy54egkJL3Vzci9iaW4vdW54eiAtYworLnoJCQorLloJCS9iaW4vemNhdAorLkYJCQorLlkJCQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbnBhdGguNS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDEyZmY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbl8xLjZnLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbl8xLjZnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNDczNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuXzEuNmcuYmIKQEAgLTAsMCArMSw4NCBAQAorU1VNTUFSWSA9ICJPbmxpbmUgZG9jdW1lbnRhdGlvbiB0b29scyIKK0RFU0NSSVBUSU9OID0gIkEgc2V0IG9mIGRvY3VtZW50YXRpb24gdG9vbHM6IG1hbiwgYXByb3BvcyBhbmQgd2hhdGlzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ByaW1hdGVzLnhpbWlhbi5jb20vfmZsdWNpZnJlZGkvbWFuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitQUiA9ICJyMSIKKworREVQRU5EUyA9ICJncm9mZiBsZXNzIgorCitkZWYgY29tcHJlc3NfcGtnKGQpOgorICAgIGlmICJjb21wcmVzc19kb2MiIGluIChkLmdldFZhcigiSU5IRVJJVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgY29tcHJlc3MgPSBkLmdldFZhcigiRE9DX0NPTVBSRVNTIiwgVHJ1ZSkKKyAgICAgICAgIGlmIGNvbXByZXNzID09ICJneiI6CisgICAgICAgICAgICAgcmV0dXJuICJnemlwIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAiYnoyIjoKKyAgICAgICAgICAgICByZXR1cm4gImJ6aXAyIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAieHoiOgorICAgICAgICAgICAgIHJldHVybiAieHoiCisgICAgcmV0dXJuICIiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke0Bjb21wcmVzc19wa2coZCl9IgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL2xvb2thc2lkZS9wa2dzL21hbjJodG1sLyR7QlB9LnRhci5nei9iYTE1NGQ1Nzk2OTI4Yjg0MWM5YzY5ZjBhZTM3NjY2MC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWstY29uZnBhdGgucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVoMS1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLW5vbmFzY2lpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLW1hbmRpcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLXNvZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtcm9fdXNyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1uZXdsaW5lLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai11dGY4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVoMS1nZW5jYXQucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItdHZfZmhzLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai1pMThuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXdoYXRpczIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItc2lncGlwZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1uZXdfc2VjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLjEuZ3o7dW5wYWNrPWZhbHNlIFwKKyAgICAgICAgICAgZmlsZTovL21hbi43Lmd6O3VucGFjaz1mYWxzZSBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4uY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tYW5wYXRoLjUuZ3o7dW5wYWNrPWZhbHNlIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZnLXdoYXRpczMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX3NlZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYTE1NGQ1Nzk2OTI4Yjg0MWM5YzY5ZjBhZTM3NjY2MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjY2RjYjhjM2Y0ZTAwODA5MjNkN2U4MThmMGU0YTIwMmRiMjZjNDY0MTVlYWVmMzYxMzg3YzIwOTk1Yjg5NTlmIgorCitDRkxBR1MgKz0gIi1EU1lTViIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICAgICAgJHtTfS9jb25maWd1cmUgLWRlZmF1bHQgLWNvbmZkaXIgL2V0YyArc2dpZCArZmhzICtsYW5nIGFsbAorfQorCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKXsKKwlta2RpciAtcCAgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjUKKyAgICAgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjcKKwljcCAke1dPUktESVJ9L21hbi5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L21hbi5jb25maWcKKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW4uMS5neiAke0R9JHtkYXRhZGlyfS9tYW4vbWFuMS8KKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW4uNy5neiAke0R9JHtkYXRhZGlyfS9tYW4vbWFuNy8KKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW5wYXRoLjUuZ3ogJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjUvCit9CisKKworUkRFUEVORFNfJHtQTn0gPSAibGVzcyBncm9mZiIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2xvY2FsZSAke3N5c2NvbmZkaXJ9L21hbi5jb25maWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tYy9tYy1DVFJMLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTRiYTlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGaXggYnVpbGQgd2l0aCBtdXNsIGJ5IGVuc3VyaW5nIENUUkwgaXMgZGVmaW5lZC4KKworbXVzbCBkb2VzIG5vdCBkZWZpbmUgQ1RSTCBpbiA8dGVybWlvcy5oPiwgd2UgY291bGQgaW5jbHVkZSA8c3lzL3R0eWRlZmF1bHRzLmg+CitleHBsaWNpdGx5IGJ1dCBpdCdzIGVhc2llciBqdXN0IHRvIGVuc3VyZSBDVFJMIGlzIGRlZmluZWQuCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbSBTYWJvdGFnZSBMaW51eCwgdGhlIGxpY2Vuc2Ugc3RhdGVtZW50IGZvciBwYXRjaGVzIGFuZAorYnVpbGQgc2NyaXB0cyBpbiBTYWJvdGFnZSBMaW51eCBzYXlzOgorCisgICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIENocmlzdGlhbiBOZXVraXJjaGVuIGhhcyB3YWl2ZWQKKyAgICBhbGwgY29weXJpZ2h0IGFuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGlzIHdvcmsuCisKKyAgICBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisKK1RoZXJlZm9yZSB0aGlzIHNob3VsZCBiZSBnb29kIHRvIGluY2x1ZGUgaW4gT3BlbkVtYmVkZGVkLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIChzaG91bGQgYmUgaW5jbHVkZWQgaW4gdjQuOC4xNCkKKworZGlmZiAtdSBtYy00LjguMS43Lm9yZy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMgbWMtNC44LjEuNy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKKy0tLSBtYy00LjguMS43Lm9yZy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKKysrKyBtYy00LjguMS43L2xpYi90dHkvdHR5LW5jdXJzZXMuYworQEAgLTY1LDcgKzY1LDcgQEAKKyAKKyAvKioqIGZpbGUgc2NvcGUgbWFjcm8gZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy0jaWYgZGVmaW5lZChfQUlYKSAmJiAhZGVmaW5lZChDVFJMKQorKyNpZiAhZGVmaW5lZChDVFJMKQorICNkZWZpbmUgQ1RSTCh4KSAoKHgpICYgMHgxZikKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuNy41LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2ViMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIGlzIGFuIG5jdXJzZXMgYmFzZWQgZmlsZSBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0RFUEVORFMgPSAibmN1cnNlcyBnbGliLTIuMCIKK1JERVBFTkRTXyR7UE59ID0gIm5jdXJzZXMtdGVybWluZm8iCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbWMtQ1RSTC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJkYWU5NjYyNDQ0OTZjZDRmNmQyODJkODBjOWNmM2M2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE2ODMzODg2MmJiMzAwMTdlYjY1ZWQ1NjlhNThlODBhYjY2YWU4Y2VmMTFjODg2NDQwYzllOWY0ZDFlZmM2YWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCAtLXdpdGhvdXQtc2FtYmEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9tYy8uZGVidWcvIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbiwjISR7YmluZGlyfS9lbnYgcHl0aG9uLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCit9CisKK1BBQ0tBR0VTID0rICIke0JQTn0taGVscGVycy1wZXJsICR7QlBOfS1oZWxwZXJzLXB5dGhvbiAke0JQTn0taGVscGVycyAke0JQTn0tZmlzaCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1wZXJsID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQZXJsLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYSsgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2FwdCsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmQgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2Rwa2crIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL21haWxmcyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcGF0Y2hmcyBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcnBtcysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VsaWIgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3V6aXAiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1wZXJsID0gInBlcmwiCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQeXRob24tYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1weXRob24gPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3MzKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWMxNTQxIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gInB5dGhvbiIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycyA9ICJNaWRuaWdodCBDb21tYW5kZXIgc2hlbGwgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycyA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKiAke2xpYmV4ZWNkaXJ9L21jL2V4dC5kLyoiCisKK1NVTU1BUllfJHtCUE59LWZpc2ggPSAiTWlkbmlnaHQgQ29tbWFuZGVyIEZpc2ggc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1maXNoID0gIiR7bGliZXhlY2Rpcn0vbWMvZmlzaCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNmMyZmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTQuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJNaWRuaWdodCBDb21tYW5kZXIgaXMgYW4gbmN1cnNlcyBiYXNlZCBmaWxlIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MGJiYWZlMzYwZTczZjk4NDBiZDc5ODE2MjFmOWMyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorREVQRU5EUyA9ICJuY3Vyc2VzIGdsaWItMi4wIHV0aWwtbGludXgiCitSREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTFjYjc1NjQzYzJiZDRkZjY0YmJjZjJkYWI3NjkwNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MWZkMGZkMjI4MGMzZDA5ZDdlMGFlYzhhYjAwMWZjODlkYWQ4ZTRmZDk5NDFmMzg2NDE0NjY3YjU1MTUyZWM1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjCisjIEJvdGggU2FtYmEgKHNtYikgYW5kIHNmdHAgcmVxdWlyZSBwYWNrYWdlIGRlbGl2ZXJlZCBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkCisjCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXZmcy1zbWIsLS1kaXNhYmxlLXZmcy1zbWIsc2FtYmEsIgorUEFDS0FHRUNPTkZJR1tzZnRwXSA9ICItLWVuYWJsZS12ZnMtc2Z0cCwtLWRpc2FibGUtdmZzLXNmdHAsbGlic3NoMiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L21jLy5kZWJ1Zy8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhJHtiaW5kaXJ9L2VudiBweXRob24sJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKK30KKworUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMtcHl0aG9uICR7QlBOfS1oZWxwZXJzICR7QlBOfS1maXNoIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFBlcmwtYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1wZXJsID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYXB0KyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWIgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViZCAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZHBrZysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvbWFpbGZzICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9wYXRjaGZzIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9ycG1zKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWxpYiBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdXppcCIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAicGVybCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1weXRob24gPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFB5dGhvbi1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvczMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1weXRob24gPSAicHl0aG9uIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKKworU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgorRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1GaXgtdHlwby1pbi1jb21wYXJpc2lvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MGIxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorRnJvbSAxOGQzNjBkNzQyNzFhMDY2YTg0OWJjMWZiYTRmMTBkYmIyM2VkMjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgOCBTZXAgMjAxNSAwODoxNzo0MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggdHlwbyBpbiBjb21wYXJpc2lvbgorCitlcnJvcjogY29tcGFyaXNvbiBvZiBhcnJheSAnZGV2bm0nIGVxdWFsIHRvIGEgbnVsbCBwb2ludGVyIGlzIGFsd2F5cyBmYWxzZQorCitVc2VyIGJpdHdpc2UgJyYnIG9wZXJhdG9yIGFzIGl0IGlzIGEgbWFzaworCitGaXhlcworZXJyb3I6IHVzZSBvZiBsb2dpY2FsICcmJicgd2l0aCBjb25zdGFudCBvcGVyYW5kCisKK1JlbW92ZSBleHRyYW5lb3VzIHBhcmVucworCitlcnJvcjogZXF1YWxpdHkgY29tcGFyaXNvbiB3aXRoIGV4dHJhbmVvdXMgcGFyZW50aGVzZXMKKworUmVtb3ZlIGRlYWQgY29kZQorCityZXN0cmlwZS5jOjQ2NToyMTogZXJyb3I6IGV4cGxpY2l0bHkgYXNzaWduaW5nIHZhbHVlIG9mIHZhcmlhYmxlIG9mIHR5cGUgJ2ludCcgdG8gaXRzZWxmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbWRtb24uaCAgICAgICB8IDIgKy0KKyBtZG9wZW4uYyAgICAgIHwgMiArLQorIHJlc3RyaXBlLmMgICAgfCAzIC0tLQorIHN1cGVyLWludGVsLmMgfCAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tZG1vbi5oIGIvbWRtb24uaAoraW5kZXggYWE3NTBjNi4uMGIwOGMzZCAxMDA2NDQKKy0tLSBhL21kbW9uLmgKKysrKyBiL21kbW9uLmgKK0BAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXNfcmVzeW5jX2NvbXBsZXRlKHN0cnVjdCBtZGluZm8gKmFycmF5KQorIAkJYnJlYWs7CisgCWNhc2UgMTA6CisgCQlsID0gYXJyYXktPmFycmF5LmxheW91dDsKKy0JCW5jb3BpZXMgPSAobCAmIDB4ZmYpICogKChsID4+IDgpICYmIDB4ZmYpOworKwkJbmNvcGllcyA9IChsICYgMHhmZikgKiAoKGwgPj4gOCkgJiAweGZmKTsKKyAJCXN5bmNfc2l6ZSA9IGFycmF5LT5jb21wb25lbnRfc2l6ZSAqIGFycmF5LT5hcnJheS5yYWlkX2Rpc2tzOworIAkJc3luY19zaXplIC89IG5jb3BpZXM7CisgCQlicmVhazsKK2RpZmYgLS1naXQgYS9tZG9wZW4uYyBiL21kb3Blbi5jCitpbmRleCAyODQxMGY0Li5jNWVlMmE2IDEwMDY0NAorLS0tIGEvbWRvcGVuLmMKKysrKyBiL21kb3Blbi5jCitAQCAtMzE4LDcgKzMxOCw3IEBAIGludCBjcmVhdGVfbWRkZXYoY2hhciAqZGV2LCBjaGFyICpuYW1lLCBpbnQgYXV0b2YsIGludCB0cnVzdHdvcnRoeSwKKyAJZWxzZSBpZiAobnVtIDwgMCkgeworIAkJLyogbmVlZCB0byBjaG9vc2UgYSBmcmVlIG51bWJlci4gKi8KKyAJCWNoYXIgKl9kZXZubSA9IGZpbmRfZnJlZV9kZXZubSh1c2VfbWRwKTsKKy0JCWlmIChkZXZubSA9PSBOVUxMKSB7CisrCQlpZiAoX2Rldm5tID09IE5VTEwpIHsKKyAJCQlwcl9lcnIoIk5vIGF2YWlsIG1kIGRldmljZXMgLSBhYm9ydGluZ1xuIik7CisgCQkJcmV0dXJuIC0xOworIAkJfQorZGlmZiAtLWdpdCBhL3Jlc3RyaXBlLmMgYi9yZXN0cmlwZS5jCitpbmRleCA0ZDkyMTkwLi5jZmU5NjY2IDEwMDY0NAorLS0tIGEvcmVzdHJpcGUuYworKysrIGIvcmVzdHJpcGUuYworQEAgLTQ2MSw5ICs0NjEsNiBAQCBpbnQgcmFpZDZfY2hlY2tfZGlza3MoaW50IGRhdGFfZGlza3MsIGludCBzdGFydCwgaW50IGNodW5rX3NpemUsCisgCQkJY3Vycl9icm9rZW5fZGlzayA9IGRpc2tEOworIAkJfQorIAorLQkJaWYoKFB4ID09IDApICYmIChReCA9PSAwKSkKKy0JCQljdXJyX2Jyb2tlbl9kaXNrID0gY3Vycl9icm9rZW5fZGlzazsKKy0KKyAJCWlmKGN1cnJfYnJva2VuX2Rpc2sgPj0gZGF0YV9kaXNrcyArIDIpCisgCQkJYnJva2VuX3N0YXR1cyA9IDI7CisgCitkaWZmIC0tZ2l0IGEvc3VwZXItaW50ZWwuYyBiL3N1cGVyLWludGVsLmMKK2luZGV4IDNmODEyZDYuLjE4MzgwMTIgMTAwNjQ0CistLS0gYS9zdXBlci1pbnRlbC5jCisrKysgYi9zdXBlci1pbnRlbC5jCitAQCAtMTAwMjcsNyArMTAwMjcsNyBAQCBlbnVtIGltc21fcmVzaGFwZV90eXBlIGltc21fYW5hbHl6ZV9jaGFuZ2Uoc3RydWN0IHN1cGVydHlwZSAqc3QsCisgCQkJCWdlby0+c2l6ZSA9IG1heF9zaXplOworIAkJfQorIAorLQkJaWYgKChkaXJlY3Rpb24gPT0gUk9MTEJBQ0tfTUVUQURBVEFfQ0hBTkdFUykpIHsKKysJCWlmIChkaXJlY3Rpb24gPT0gUk9MTEJBQ0tfTUVUQURBVEFfQ0hBTkdFUykgeworIAkJCS8qIGFjY2VwdCBzaXplIGZvciByb2xsYmFjayBvbmx5CisgCQkJKi8KKyAJCX0gZWxzZSB7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL2djYy00LjkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YmYxZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK3N1cGVyLWludGVsLmM6NTA2MzoyOiBlcnJvcjogcmlnaHQtaGFuZCBvcGVyYW5kIG9mIGNvbW1hIGV4cHJlc3Npb24gaGFzIG5vIGVmZmVjdCBbLVdlcnJvcj11bnVzZWQtdmFsdWVdCisgIHNucHJpbnRmKChjaGFyICopIHNwYXJlLT5zaWcsIE1BWF9TSUdOQVRVUkVfTEVOR1RILAorICBeCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworbWFrZTogKioqIFtzdXBlci1pbnRlbC5vXSBFcnJvciAxCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG1kYWRtLTMuMy9zdXBlci1pbnRlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLm9yaWcvc3VwZXItaW50ZWwuYwkyMDE0LTA1LTAyIDE1OjA4OjIxLjE1NDMxOTY1MSAtMDcwMAorKysrIG1kYWRtLTMuMy9zdXBlci1pbnRlbC5jCTIwMTQtMDUtMDIgMTU6MDk6MzEuNDcwOTg1Nzk0IC0wNzAwCitAQCAtNTA2MCw3ICs1MDYwLDcgQEAKKyAJc3BhcmUtPmNhY2hlX3NpemUgPSBtcGItPmNhY2hlX3NpemUsCisgCXNwYXJlLT5wd3JfY3ljbGVfY291bnQgPSBfX2NwdV90b19sZTMyKDEpLAorIAorLQlzbnByaW50ZigoY2hhciAqKSBzcGFyZS0+c2lnLCBNQVhfU0lHTkFUVVJFX0xFTkdUSCwKKysJKHZvaWQpc25wcmludGYoKGNoYXIgKikgc3BhcmUtPnNpZywgTUFYX1NJR05BVFVSRV9MRU5HVEgsCisgCQkgTVBCX1NJR05BVFVSRSBNUEJfVkVSU0lPTl9SQUlEMCk7CisgCisgCWZvciAoZCA9IHN1cGVyLT5kaXNrczsgZDsgZCA9IGQtPm5leHQpIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4yLjJfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IzZGIwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitCeSBoYXJkY29kaW5nIENDJ3MgZGVmaW5pdGlvbiBpbiB0aGUgTWFrZWZpbGUsIGFsbCB0aGUgZ2NjIHBhcmFtZXRlcnMgCitzZXQgYnkgdHVuZSBzZXR0aW5ncyBhcmUgbG9zdC4gQ2F1c2luZyBjb21waWxlIGZhaWx1cmUgd2l0aCB4MzIgdG9vbGNoYWluCisKK0FzIHRoZSBiaXRiYWtlIGRlZmluZWQgQ0MgaXMgZ29vZCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZWRmaW5lIENDIGluIHRoZSAKK21ha2UgZmlsZSwgaGVuY2UgbWFraW5nIHRoZSBDQyBkZWZpbml0aW9uIGluIHRoZSBNYWtlZmlsZSBjb25kaXRpb25hbC4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNworCitJbmRleDogbWRhZG0tMy4zL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLm9yaWcvTWFrZWZpbGUJMjAxMy0wOS0wMyAwNzo0Nzo0Ny4wMDAwMDAwMDAgKzAzMDAKKysrKyBtZGFkbS0zLjMvTWFrZWZpbGUJMjAxMy0xMC0xNiAxNjo0NDoyMy41NDIyOTU0ODcgKzAzMDAKK0BAIC00MSw3ICs0MSw3IEBACisgCisgS0xJQkNfR0NDID0gZ2NjIC1ub3N0ZGluYyAtaXdpdGhwcmVmaXggaW5jbHVkZSAtSSQoS0xJQkMpL2tsaWJjL2luY2x1ZGUgLUkkKEtMSUJDKS9saW51eC9pbmNsdWRlIC1JJChLTElCQykva2xpYmMvYXJjaC9pMzg2L2luY2x1ZGUgLUkkKEtMSUJDKS9rbGliYy9pbmNsdWRlL2JpdHMzMgorIAorLUNDID0gJChDUk9TU19DT01QSUxFKWdjYworK0NDID89ICQoQ1JPU1NfQ09NUElMRSlnY2MKKyBDWEZMQUdTID89IC1nZ2RiCisgQ1dGTEFHUyA9IC1XYWxsIC1XZXJyb3IgLVdzdHJpY3QtcHJvdG90eXBlcyAtV2V4dHJhIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgorIGlmZGVmIFdBUk5fVU5VU0VECmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMy4yX3gzMl9hYmlfdGltZV90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NTZkMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXaGVuIHRyeSB0byBwcmludCB0aW1lX3QgdmFsdWVzIGFzIGEgbG9uZyBpbnQgaXQgY2F1c2VzIGFuIGVycm9yIGJlY2F1c2UgdGltZV90CitkYXRhIHR5cGUgaW4geDMyIEFCSSBpcyBsb25nIGxvbmcgaW50LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBtZGFkbS0zLjMuNC9tb25pdG9yLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtZGFkbS0zLjMuNC5vcmlnL21vbml0b3IuYworKysrIG1kYWRtLTMuMy40L21vbml0b3IuYworQEAgLTI1Nyw5ICsyNTcsMTIgQEAgc3RhdGljIGludCByZWFkX2FuZF9hY3Qoc3RydWN0IGFjdGl2ZV9hcgorIAkJCW1kaS0+Y3Vycl9zdGF0ZSA9IHJlYWRfZGV2X3N0YXRlKG1kaS0+c3RhdGVfZmQpOworIAkJfQorIAl9CistCisgCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19JTFAzMl9fKQorKwlkcHJpbnRmKCIoJWQpOiAlbGxkLiUwNmxsZCBzdGF0ZTolcyBwcmV2OiVzIGFjdGlvbjolcyBwcmV2OiAlcyBzdGFydDolbGx1XG4iLAorKyNlbHNlCisgCWRwcmludGYoIiglZCk6ICVsZC4lMDZsZCBzdGF0ZTolcyBwcmV2OiVzIGFjdGlvbjolcyBwcmV2OiAlcyBzdGFydDolbGx1XG4iLAorKyNlbmRpZgorIAkJYS0+aW5mby5jb250YWluZXJfbWVtYmVyLAorIAkJdHYudHZfc2VjLCB0di50dl91c2VjLAorIAkJYXJyYXlfc3RhdGVzW2EtPmN1cnJfc3RhdGVdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjc2MDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKKy4vdGVzdCAmPi4vdGVzdC5sb2cKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWVjaG8gIlBBU1M6IG1kYWRtIgorCXJtIHRlc3QubG9nCitlbHNlCisJZWNobyAiRkFJTDogbWRhZG0iCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9tZGFkbV8zLjMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTk4MTY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBtYW5hZ2luZyBzb2Z0d2FyZSBSQUlEIHVuZGVyIExpbnV4IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9yYWlkL21kYWRtLyIKKworIyBTb21lIGZpbGVzIGFyZSBHUEx2Misgd2hpbGUgb3RoZXJzIGFyZSBHUEx2Mi4KK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tZG1vbi5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTg7bWQ1PWFmN2Q4NDQ0ZDljNGQzZTVjN2NhYWMwZDlkMzQwMzlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21kYWRtLmg7YmVnbGlubG5lPTQ7ZW5kbGluZT0yMjttZDU9NDYyYmM5OTM2YWMwZDNkYTExMDE5MWEzZjk5OTQxNjEiCisKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3JhaWQvbWRhZG0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nY2MtNC45LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21kYWRtLTMuMy4yX3gzMl9hYmlfdGltZV90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKwkgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3Y2E4YjExNDcxMGY5OGY1M2YyMGM1Nzg3YjY3NGEwOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YWU1ZjQ1MzA2Yjg3MzE5MGU5MWY0MTA3MDliMDBlNTE5OTdiNjMzYzA3MmIzM2Y4ZWZkOWY3ZGYwMjJjYTY4IgorCitDRkxBR1MgKz0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworRVhUUkFfT0VNQUtFID0gIkNIRUNLX1JVTl9ESVI9MCIKKyMgUFBDNjQgYW5kIE1JUFM2NCB1c2VzIGxvbmcgbG9uZyBmb3IgdTY0IGluIHRoZSBrZXJuZWwsIGJ1dCBwb3dlcnBjJ3MgYXNtL3R5cGVzLmgKKyMgcHJldmVudHMgNjQtYml0IHVzZXJsYW5kIGZyb20gc2VlaW5nIHRoaXMgZGVmaW5pdGlvbiwgaW5zdGVhZCBkZWZhdWx0aW5nCisjIHRvIHU2NCA9PSBsb25nIGluIHVzZXJzcGFjZS4gRGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyB0byBnZXQKKyMgaW50LWxsNjQuaCBpbmNsdWRlZAorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAnIENGTEFHUz0tRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXycKK0VYVFJBX09FTUFLRV9hcHBlbmRfbWlwczY0ID0gJyBDRkxBR1M9LURfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18nCitFWFRSQV9PRU1BS0VfYXBwZW5kX21pcHM2NG4zMiA9ICcgQ0ZMQUdTPS1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fJworCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlleHBvcnQgU1RSSVA9IiIKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMiCisKK2luaGVyaXQgcHRlc3QKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtYSAke1N9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCisJY3AgJHtTfS90ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lICdzIXNsZWVwIDAuKiFzbGVlcCAxIWc7IHMhL3Zhci90bXAhLyFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbG4gLXMgL3NiaW4vbWRhZG0gJHtEfSR7UFRFU1RfUEFUSH0vbWRhZG0KKwlmb3IgcHJnIGluIHRlc3Rfc3RyaXBlIHN3YXBfc3VwZXIgcmFpZDZjaGVjaworCWRvCisJCWluc3RhbGwgLUQgLW0gNzU1ICRwcmcgJHtEfSR7UFRFU1RfUEFUSH0vCisJZG9uZQorfQorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImJhc2giCitSUkVDT01NRU5EU18ke1BOfS1wdGVzdCArPSAiIFwKKyAgICBjb3JldXRpbHMgXAorICAgIHV0aWwtbGludXggXAorICAgIGtlcm5lbC1tb2R1bGUtbG9vcCBcCisgICAga2VybmVsLW1vZHVsZS1saW5lYXIgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDAgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDEgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDEwIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQ0NTYgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluZ2V0dHkvbWluZ2V0dHlfMS4wOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxNjIyOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJDb21wYWN0IGdldHR5IHRlcm1pbmFsIGhhbmRsZXIgZm9yIHZpcnR1YWwgY29uc29sZXMgb25seSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWluZ2V0dHkvIgorTElDRU5TRSA9ICJHUEx2MiIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wYzU2ZGIwMTQzZjRmODBjMzY5ZWUzYWY3NDI1YWY2ZSIKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYTc1YWQ2NDg3ZmYyNzE0MjRmZmMwMGE2NDQyMDk5MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZjU1YzkwYmE0ZmFhOTEzZDkxZWY5OWNiZjVjYjJlYjRkYmUyNzgwMzE0YzNiYjE3OTUzZjg0OWM4Y2RkZDE3IgorCisjIHN1YnN0aXR1dGUgb3VyIENGTEFHUyBmb3IgIi1PMiAtV2FsbCAtVyAtcGlwZSIKKyMKK0VYVFJBX09FTUFLRSA9ICJDQz0nJHtDQ30nIFwKKyAgICAgICAgICAgICAgICBDRkxBR1M9JyR7Q0ZMQUdTfSAtRF9HTlVfU09VUkNFJyIKKworZG9faW5zdGFsbCgpeworICAgIGluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44ICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ2V0dHkiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9nZXR0eSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L21pbmdldHR5IgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1GaXgtYnVpbGQtaXNzdXMtc3VyZmFjZWQtZHVlLXRvLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1GaXgtYnVpbGQtaXNzdXMtc3VyZmFjZWQtZHVlLXRvLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjNjdmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIGQ2MmE1ODYyZTI2ZWQzZmM1OGQ3ODllZmU5YzQwY2E2YzkxMWQzNmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAyMjozNTozMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgaXNzdXMgc3VyZmFjZWQgZHVlIHRvIG11c2wKKworc3JjL2dldHNkaXIuaDoyODoxNDogZXJyb3I6ICdNQVhOQU1MRU4nIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisgICBjaGFyIGZuYW1lW01BWE5BTUxFTiArIDFdOyAgLyogZmlsZW5hbWUgKyB0ZXJtaW5hdGluZyBudWxsICovCisKK3NyYy9kaWFsLmM6MzUyOjIyOiBlcnJvcjogJ0tJT0NTT1VORCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8ICAgICAgaW9jdGwoY29uc29sZWZkLCBLSU9DU09VTkQsIGspOworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9kaWFsLmMgICAgfCAyICstCisgc3JjL2dldHNkaXIuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGlhbC5jIGIvc3JjL2RpYWwuYworaW5kZXggYTkwYzFkMi4uYmYwMjU3NCAxMDA2NDQKKy0tLSBhL3NyYy9kaWFsLmMKKysrKyBiL3NyYy9kaWFsLmMKK0BAIC0zOSw3ICszOSw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAKKyAjaWZkZWYgVkNfTVVTSUMKKy0jICBpZiBkZWZpbmVkKF9fR0xJQkNfXykKKysjICBpZiBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCisgIyAgICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjICAgIGluY2x1ZGUgPHN5cy9rZC5oPgorICMgICAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KK2RpZmYgLS1naXQgYS9zcmMvZ2V0c2Rpci5jIGIvc3JjL2dldHNkaXIuYworaW5kZXggMjE5NWIyNy4uYjYxYTM2MSAxMDA2NDQKKy0tLSBhL3NyYy9nZXRzZGlyLmMKKysrKyBiL3NyYy9nZXRzZGlyLmMKK0BAIC0zMCw2ICszMCw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgCisgI2luY2x1ZGUgImdldHNkaXIuaCIKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4MjYxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorU3ViamVjdDogW1BBVENIXSBmaXggbWluaWNvbSAtaC8tdiByZXR1cm4gdmFsdWUgaXMgbm90IDAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvbWluaWNvbS5jIHwgICAgNiArKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21pbmljb20uYyBiL3NyYy9taW5pY29tLmMKK2luZGV4IGUxYTU1N2IuLjczMGRhN2MgMTAwNjQ0CistLS0gYS9zcmMvbWluaWNvbS5jCisrKysgYi9zcmMvbWluaWNvbS5jCitAQCAtMTE2NiwxNSArMTE2NiwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgICAgICJtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuIgorICAgICAgICAgICAgICAgICAgImFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvblxuIgorICAgICAgICAgICAgICAgICAgIjIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiIpOworLSAgICAgICAgICBleGl0KDEpOworLSAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGNhc2UgJ3MnOiAvKiBzZXR1cCBtb2RlICovCisgICAgICAgICAgIGRvc2V0dXAgPSAxOworICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICBoZWxwdGhlbSgpOworLSAgICAgICAgICBleGl0KDEpOworLSAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGNhc2UgJ3AnOiAvKiBQc2V1ZG8gdGVybWluYWwgdG8gdXNlLiAqLworICAgICAgICAgICBpZiAoc3RybmNtcChvcHRhcmcsICIvZGV2LyIsIDUpID09IDApCisgICAgICAgICAgICAgb3B0YXJnICs9IDU7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tL2FsbG93LnRvLmRpc2FibGUubG9ja2Rldi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjMDg4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIGEvY29uZmlndXJlLmluCTIwMTMtMDItMDYgMTg6MTg6MTMuMDAwMDAwMDAwICswMTAwCisrKysgYi9jb25maWd1cmUuaW4JMjAxMy0wNy0yMSAxNTozMToyNy42MTQ4Mjg4OTQgKzAyMDAKK0BAIC00MCw3ICs0MCwxMyBAQAorIGZpCisgCisgUEtHX1BST0dfUEtHX0NPTkZJRworLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorKworK0FDX0FSR19FTkFCTEUoW2xvY2tkZXZdLAorKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxvY2tkZXZdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW0VuYWJsZSBsb2NrZGV2IHN1cHBvcnQgKGRlZjogZW5hYmxlZCldKSwKKysgICAgICAgIFtdLCBbZW5hYmxlX2xvY2tkZXY9InllcyJdKQorKworK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiB0ZXN0ICJ4JGVuYWJsZV9sb2NrZGV2IiA9IHh5ZXM7IHRoZW4KKyAJUEtHX0NIRUNLX01PRFVMRVMoW0xPQ0tERVZdLCBbbG9ja2Rldl0sIEFDX0RFRklORShbSEFWRV9MT0NLREVWXSxbMV0sW0RlZmluZSBpZiB5b3UgaGF2ZSBsb2NrZGV2XSksWzpdKQorIGZpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTc1Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlRleHQtYmFzZWQgbW9kZW0gY29udHJvbCBhbmQgdGVybWluYWwgZW11bGF0aW9uIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJNaW5pY29tIGlzIGEgdGV4dC1iYXNlZCBtb2RlbSBjb250cm9sIGFuZCB0ZXJtaW5hbCBlbXVsYXRpb24gcHJvZ3JhbSBmb3IgVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpY29udiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDIwNDc3YWJjNTY3NDA0ZGViY2EwYTJhMWNiNmI2NDUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21pbmljb20uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT1hNTg4MzhjYjcwOWYwZGI1MTdmNGU0MjczMGM0OWU4MSIKKworU1JDX1VSSSA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy9kb3dubG9hZC5waHAvbGF0ZXN0ZmlsZS8zLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MDQ0Y2EzZTI5MTI2OGMzMzI5NGYxNzFkNDI2ZGMyZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YWMzYTY2M2I4MmY0ZjVkZjY0MTE0YjQ3OTJiOTkyNmI1MzZjODVmNTlkZTBmMmQyYjMyMWM3NjI2YTkwNGY0IgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsb2NrZGV2XSA9ICItLWVuYWJsZS1sb2NrZGV2LC0tZGlzYWJsZS1sb2NrZGV2LGxvY2tkZXYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK2RvX2luc3RhbGwoKSB7CisJZm9yIGQgaW4gZG9jIGV4dHJhcyBtYW4gbGliIHNyYzsgZG8gbWFrZSAtQyAkZCBERVNURElSPSR7RH0gaW5zdGFsbDsgZG9uZQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9maWxlcy9kaXNhYmxlLXN0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjg2OWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzN2IzY2M5Li5mMTAyNmYzIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtOTUsNyArOTUsNyBAQCBpbnN0YWxsLWRpcnM6CisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAKKyBpbnN0YWxsLWJpbmFyaWVzOiAkKFBST0cpCistCSQoSU5TVEFMTCkgLW0gMDU1NSAtcyAkKFBST0cpICQoREVTVERJUikkKGJpbmRpcikvJChQUk9HKQorKwkkKElOU1RBTEwpIC1tIDA1NTUgJChQUk9HKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPRykKKyAKKyBpbnN0YWxsLW1hbjoKKyAJJChJTlNUQUxMKSAtbSAwNDQ0ICQoc3JjZGlyKS9ta3RlbXAuJChtYW50eXBlKSBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNmRjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9maWxlcy9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDI0IEBACitUaGlzIGZpeGVzIHRoZSBwYXJhbGxlbCBtYWtlIGluc3RhbGwgZmFpbHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCitodHRwOi8vd3d3LmdyYXRpc29mdC51cy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTI4CisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG1rdGVtcC0xLjcvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta3RlbXAtMS43Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBta3RlbXAtMS43L01ha2VmaWxlLmluCitAQCAtOTQsMTAgKzk0LDEwIEBAIGluc3RhbGwtZGlyczoKKyAJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKSBcCisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAKKy1pbnN0YWxsLWJpbmFyaWVzOiAkKFBST0cpCisraW5zdGFsbC1iaW5hcmllczogaW5zdGFsbC1kaXJzICQoUFJPRykKKyAJJChJTlNUQUxMKSAtbSAwNTU1ICQoUFJPRykgJChERVNURElSKSQoYmluZGlyKS8kKFBST0cpCisgCistaW5zdGFsbC1tYW46CisraW5zdGFsbC1tYW46IGluc3RhbGwtZGlycworIAkkKElOU1RBTEwpIC1tIDA0NDQgJChzcmNkaXIpL21rdGVtcC4kKG1hbnR5cGUpIFwKKyAJICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9ta3RlbXAuMQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvbWt0ZW1wXzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTIzOGVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIHNhZmUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRpb24gZnJvbSBzaGVsbCBzY3JpcHRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ta3RlbXAub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5ta3RlbXAub3JnL2J1Z3MiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTQzMDY4MGY2MzIyYTFlYjg3MTk5YjVlMDFhODJjMGQ0IgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWt0ZW1wLm9yZy9wdWIvbWt0ZW1wLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICBmaWxlOi8vZGlzYWJsZS1zdHJpcC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4N2JiZWQ5ZmEyZWU4ZTc2NDU3MzNjMGU4ZTY1MTcyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlOTRiOWUxZWRmODY2YjI2MDk1NDVkYTY1YjYyNzk5NmFjNWQxNThmZGEwNzFlNDkyYmRkYjJmNGE0ODI2NzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1saWJjIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L21rdGVtcCAke0R9JHtiYXNlX2JpbmRpcn0vbWt0ZW1wCisJcm1kaXIgJHtEfSR7YmluZGlyfQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJta3RlbXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wXSA9ICIke2Jhc2VfYmluZGlyfS9ta3RlbXAiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJta3RlbXAuMSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZXyR7UE59LWRvYyA9ICIzMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWJmNTYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJtc210cCBpcyBhbiBTTVRQIGNsaWVudCIKK0RFU0NSSVBUSU9OID0gIkEgc2VuZG1haWwgcmVwbGFjZW1lbnQgZm9yIHVzZSBpbiBNVEFzIGxpa2UgbXV0dCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tc210cC5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitERVBFTkRTID0gInpsaWIgZ251dGxzIgorCisjQ09QWUlORyBvciBMaWNlbmNlCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21zbXRwL2ZpbGVzL21zbXRwLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjNiYWNhOTNjN2U1ZjFhYTlkMzZhMmU1YjM4NzM5YWI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmNmVjZDdjYmZhZGY1NDhmZDU1MjA1YmQyNGNiNjNiODRiY2JiMTE4NWVmZWQ5MTdkZDc4MDA1OTVhNDg3ODkiCisKK2luaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2VjcmV0IC0td2l0aG91dC1saWJnc2FzbCAtLXdpdGhvdXQtbGliaWRuIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZW5kbWFpbCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzZW5kbWFpbF0gPSAiJHtiaW5kaXJ9L21zbXRwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NlbmRtYWlsXSA9ICIke3NiaW5kaXJ9L3NlbmRtYWlsIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitwa2dfcG9zdGluc3RfJHtQTn1fbGludXhzdGRiYXNlICgpIHsKKwkjIC91c3IvbGliL3NlbmRtaWFsIGlzIHJlcXVpcmVkIGJ5IExTQiBjb3JlIHRlc3QKKwlbICEgLUwgJEQvdXNyL2xpYi9zZW5kbWFpbCBdICYmIGxuIC1zZiAke3NiaW5kaXJ9L3NlbmRtYWlsICREL3Vzci9saWIvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL2lmY29uZmlnLWludGVyZmFjZS0wLWRlbC1JUC13aWxsLXJlbW92ZS10aGUtYWxpYXNlZC0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL2lmY29uZmlnLWludGVyZmFjZS0wLWRlbC1JUC13aWxsLXJlbW92ZS10aGUtYWxpYXNlZC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmODE0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvaWZjb25maWctaW50ZXJmYWNlLTAtZGVsLUlQLXdpbGwtcmVtb3ZlLXRoZS1hbGlhc2VkLS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDgxODE0ZGMyYjE0ODQzMDA5MTkzZWZkMzA3ZDgxNGMyNmJhYTYxZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaXJpIFBvcGVsa2EgPGpwb3BlbGthQHJlZGhhdC5jb20+CitEYXRlOiBXZWQsIDcgRGVjIDIwMTEgMTk6MTQ6MDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaWZjb25maWcgaW50ZXJmYWNlOjAgZGVsIDxJUD4gd2lsbCByZW1vdmUgdGhlIGFsaWFzZWQgSVAgb24gSUE2NAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2NvbW1pdCA4MTgxNGRjMmIxNDg0MzAwOTE5M2VmZDMwN2Q4MTRjMjZiYWE2MWYwIGZyb20KK2dpdDovL2dpdC5jb2RlLnNmLm5ldC9wL25ldC10b29scy9jb2RlCisKKy0tLQorIGlmY29uZmlnLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pZmNvbmZpZy5jIGIvaWZjb25maWcuYworaW5kZXggYmM0MDVjNi4uZGFlODkyMiAxMDA2NDQKKy0tLSBhL2lmY29uZmlnLmMKKysrKyBiL2lmY29uZmlnLmMKK0BAIC04OTAsNyArODkwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgIGNvbnRpbnVlOworIAkJfQorIAkJCistCQltZW1jcHkoJmlwLCAmc2luLnNpbl9hZGRyLnNfYWRkciwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKysJCS8qIENsZWFyICJpcCIgaW4gY2FzZSBzaXplb2YodW5zaWduZWQgbG9uZykgPiBzaXplb2Yoc2luLnNpbl9hZGRyLnNfYWRkcikgKi8KKysJCWlwID0gMDsKKysJCW1lbWNweSgmaXAsICZzaW4uc2luX2FkZHIuc19hZGRyLCBzaXplb2Yoc2luLnNpbl9hZGRyLnNfYWRkcikpOworIAkJCisgCQlpZiAoZ2V0X25tYmNfcGFyZW50KGlmci5pZnJfbmFtZSwgJm5tLCAmYmMpIDwgMCkgeworIAkJICAgIGZwcmludGYoc3RkZXJyLCBfKCJJbnRlcmZhY2UgJXMgbm90IGluaXRpYWxpemVkXG4iKSwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvbmV0LXRvb2xzLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMzljMmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaApAQCAtMCwwICsxLDc1IEBACisvKgorKiBjb25maWcuaAlBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIGluY2x1ZGVmaWxlCisqCisqIE5FVC1UT09MUwlBIGNvbGxlY3Rpb24gb2YgcHJvZ3JhbXMgdGhhdCBmb3JtIHRoZSBiYXNlIHNldCBvZiB0aGUKKyoJCU5FVC0zIE5ldHdvcmtpbmcgRGlzdHJpYnV0aW9uIGZvciB0aGUgTElOVVggb3BlcmF0aW5nCisqCQlzeXN0ZW0uCisqCisqCQlETyAgTk9UICBFRElUICBESVJFQ1RMWQorKgorKi8KKworLyogCisgKiAKKyAqIEludGVybmF0aW9uYWxpemF0aW9uCisgKiAKKyAqIFRoZSBuZXQtdG9vbHMgcGFja2FnZSBoYXMgY3VycmVudGx5IGJlZW4gdHJhbnNsYXRlZCB0byBGcmVuY2gsCisgKiBHZXJtYW4gYW5kIEJyYXppbGlhbiBQb3J0dWdlc2UuICBPdGhlciB0cmFuc2xhdGlvbnMgYXJlLCBvZgorICogY291cnNlLCB3ZWxjb21lLiAgQW5zd2VyIGBuJyBoZXJlIGlmIHlvdSBoYXZlIG5vIHN1cHBvcnQgZm9yCisgKiBpbnRlcm5hdGlvbmFsaXphdGlvbiBvbiB5b3VyIHN5c3RlbS4KKyAqIAorICovCisjZGVmaW5lIEkxOE4gMQorCisvKiAKKyAqIAorICogUHJvdG9jb2wgRmFtaWxpZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0FGVU5JWCAxCisjZGVmaW5lIEhBVkVfQUZJTkVUIDEKKyNkZWZpbmUgSEFWRV9BRklORVQ2IDEKKyNkZWZpbmUgSEFWRV9BRklQWCAwCisjZGVmaW5lIEhBVkVfQUZBVEFMSyAwCisjZGVmaW5lIEhBVkVfQUZBWDI1IDAKKyNkZWZpbmUgSEFWRV9BRk5FVFJPTSAxCisjZGVmaW5lIEhBVkVfQUZST1NFIDAKKyNkZWZpbmUgSEFWRV9BRlgyNSAwCisjZGVmaW5lIEhBVkVfQUZFQ09ORVQgMAorI2RlZmluZSBIQVZFX0FGREVDbmV0IDAKKyNkZWZpbmUgSEFWRV9BRkFTSCAwCisKKy8qIAorICogCisgKiBEZXZpY2UgSGFyZHdhcmUgdHlwZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0hXRVRIRVIgMQorI2RlZmluZSBIQVZFX0hXQVJDIDEKKyNkZWZpbmUgSEFWRV9IV1NMSVAgMQorI2RlZmluZSBIQVZFX0hXUFBQIDEKKyNkZWZpbmUgSEFWRV9IV1RVTk5FTCAxCisjZGVmaW5lIEhBVkVfSFdTVFJJUCAwCisjZGVmaW5lIEhBVkVfSFdUUiAwCisjZGVmaW5lIEhBVkVfSFdBWDI1IDAKKyNkZWZpbmUgSEFWRV9IV1JPU0UgMAorI2RlZmluZSBIQVZFX0hXTkVUUk9NIDEKKyNkZWZpbmUgSEFWRV9IV1gyNSAwCisjZGVmaW5lIEhBVkVfSFdGUiAxCisjZGVmaW5lIEhBVkVfSFdTSVQgMAorI2RlZmluZSBIQVZFX0hXRkRESSAwCisjZGVmaW5lIEhBVkVfSFdISVBQSSAwCisjZGVmaW5lIEhBVkVfSFdBU0ggMAorI2RlZmluZSBIQVZFX0hXSERMQ0xBUEIgMAorI2RlZmluZSBIQVZFX0hXSVJEQSAxCisjZGVmaW5lIEhBVkVfSFdFQyAwCisjZGVmaW5lIEhBVkVfSFdJQiAwCisKKy8qIAorICogCisgKiBPdGhlciBGZWF0dXJlcy4KKyAqIAorICovCisjZGVmaW5lIEhBVkVfRldfTUFTUVVFUkFERSAxCisjZGVmaW5lIEhBVkVfSVBfVE9PTFMgMQorI2RlZmluZSBIQVZFX01JSSAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvbmV0LXRvb2xzLWNvbmZpZy5tYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNTE2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZQpAQCAtMCwwICsxLDM2IEBACitJMThOPTEKK0hBVkVfQUZVTklYPTEKK0hBVkVfQUZJTkVUPTEKK0hBVkVfQUZJTkVUNj0xCisjIEhBVkVfQUZJUFg9MAorIyBIQVZFX0FGQVRBTEs9MAorIyBIQVZFX0FGQVgyNT0wCitIQVZFX0FGTkVUUk9NPTEKKyMgSEFWRV9BRlJPU0U9MAorIyBIQVZFX0FGWDI1PTAKKyMgSEFWRV9BRkVDT05FVD0wCisjIEhBVkVfQUZERUNuZXQ9MAorIyBIQVZFX0FGQVNIPTAKK0hBVkVfSFdFVEhFUj0xCitIQVZFX0hXQVJDPTEKK0hBVkVfSFdTTElQPTEKK0hBVkVfSFdQUFA9MQorSEFWRV9IV1RVTk5FTD0xCitIQVZFX0hXU1RSSVA9MQorSEFWRV9IV1RSPTEKKyMgSEFWRV9IV0FYMjU9MAorIyBIQVZFX0hXUk9TRT0wCitIQVZFX0hXTkVUUk9NPTEKKyMgSEFWRV9IV1gyNT0wCitIQVZFX0hXRlI9MQorIyBIQVZFX0hXU0lUPTAKKyMgSEFWRV9IV0ZEREk9MAorIyBIQVZFX0hXSElQUEk9MAorIyBIQVZFX0hXQVNIPTAKKyMgSEFWRV9IV0hETENMQVBCPTAKK0hBVkVfSFdJUkRBPTEKKyMgSEFWRV9IV0VDPTAKKyMgSEFWRV9IV0lCPTAKK0hBVkVfRldfTUFTUVVFUkFERT0xCitIQVZFX0lQX1RPT0xTPTEKK0hBVkVfTUlJPTEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHNfMS42MC0yNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHNfMS42MC0yNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWZjMWU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCkBAIC0wLDAgKzEsODkgQEAKK1NVTU1BUlkgPSAiQmFzaWMgbmV0d29ya2luZyB0b29scyIKK0RFU0NSSVBUSU9OID0gIkEgY29sbGVjdGlvbiBvZiBwcm9ncmFtcyB0aGF0IGZvcm0gdGhlIGJhc2Ugc2V0IG9mIHRoZSBORVQtMyBuZXR3b3JraW5nIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vbmV0LXRvb2xzLmJlcmxpb3MuZGUvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5kZWJpYW4ub3JnL25ldC10b29scyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaWZjb25maWcuYztiZWdpbmxpbmU9MTE7ZW5kbGluZT0xNTttZDU9ZDFjYTM3MjA4MGFkNTQwMWUyM2NhMGFmYzM1Y2Y5YmEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAwNTAzMTJUMDAwMDAwWi9wb29sL21haW4vbi8ke0JQTn0vJHtCUE59XzEuNjAub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vLzIwMTUwODMxVDA5MzM0MlovcG9vbC9tYWluL24vJHtCUE59LyR7QlBOfV8ke1BWfS5kaWZmLmd6O2FwcGx5PW5vO25hbWU9cGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmV0LXRvb2xzLWNvbmZpZy5oIFwKKyAgICAgICAgICAgZmlsZTovL25ldC10b29scy1jb25maWcubWFrZSBcCisgICAgICAgICAgIGZpbGU6Ly9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoIFwKKwkgICAiCisKK1MgPSAiJHtXT1JLRElSfS9uZXQtdG9vbHMtMS42MCIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiZWNhZjM3YWNiNWI1ZGFmZjRiZGRhNzc3ODVmZDkxNmQiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJlYzY3OTY3Y2Y3YjFhM2EzODI4YTg0NzYyZmJjMDEzYWM1MGVlNWRjOWFhMzA5NWQ1YzU5MWYzMDJjMmRlMGY1IgorCitTUkNfVVJJW3BhdGNoLm1kNXN1bV0gPSAiZWEzNTkyZjQ5YWM4MzgwOTYyYmM0ZDliNjZjN2U3ZTkiCitTUkNfVVJJW3BhdGNoLnNoYTI1NnN1bV0gPSAiYWVlZWFmYWZmNjg4NjZhNDQ2ZjAxYmI2MzlkNGUwMTQ2YTYwYWYzNGRjZDIwZTMxYTNlNDY1ODUwMjJmYzc2YyIKKworaW5oZXJpdCBnZXR0ZXh0CisKKyMgVGhlIE1ha2VmaWxlIGlzIGxhbWUsIG5vIHBhcmFsbGVsIGJ1aWxkCitQQVJBTExFTF9NQUtFID0gIiIKKworIyBVbmxpa2Ugb3RoZXIgRGViaWFuIHBhY2thZ2VzLCBuZXQtdG9vbHMgKi5kaWZmLmd6IGNvbnRhaW5zIGFub3RoZXIgc2VyaWVzIG9mCisjIHBhdGNoZXMgbWFpbnRhaW5lZCBieSBxdWlsdC4gU28gbWFudWFsbHkgYXBwbHkgdGhlbSBiZWZvcmUgYXBwbHlpbmcgb3RoZXIgbG9jYWwKKyMgcGF0Y2hlcy4gQWxzbyByZW1vdmUgYWxsIHRlbXAgZmlsZXMgYmVmb3JlIGxlYXZpbmcsIGJlY2F1c2UgZG9fcGF0Y2goKSB3aWxsIHBvcCAKKyMgdXAgYWxsIHByZXZpb3VzbHkgYXBwbGllZCBwYXRjaGVzIGluIHRoZSBzdGFydAorbmV0dG9vbHNfZG9fcGF0Y2goKSB7CisJY2QgJHtTfQorCXF1aWx0IHBvcCAtYSB8fCB0cnVlCisJaWYgWyAtZCAke1N9Ly5wYy1uZXR0b29scyBdOyB0aGVuCisJCXJtIC1yZiAke1N9Ly5wYworCQltdiAke1N9Ly5wYy1uZXR0b29scyAke1N9Ly5wYworCQlRVUlMVF9QQVRDSEVTPSR7U30vZGViaWFuL3BhdGNoZXMgcXVpbHQgcG9wIC1hCisJCXJtIC1yZiAke1N9Ly5wYyAke1N9L2RlYmlhbgorCWZpCisJcGF0Y2ggLXAxIDwgJHtXT1JLRElSfS8ke0JQTn1fJHtQVn0uZGlmZgkKKwlRVUlMVF9QQVRDSEVTPSR7U30vZGViaWFuL3BhdGNoZXMgcXVpbHQgcHVzaCAtYQorCW12ICR7U30vLnBjICR7U30vLnBjLW5ldHRvb2xzCit9CisKK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIke1N9IgorCisjIFdlIGludm9rZSBiYXNlIGRvX3BhdGNoIGF0IGVuZCwgdG8gaW5jb3Jwb3JhdGUgYW55IGxvY2FsIHBhdGNoCitweXRob24gZG9fcGF0Y2goKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCduZXR0b29sc19kb19wYXRjaCcsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdwYXRjaF9kb19wYXRjaCcsIGQpCit9CisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIG5ldC10b29scyBoYXMgaXRzIG93biBjb25maWcgbWVjaGFuaXNtIHJlcXVpcmluZyAibWFrZSBjb25maWciCisJIyB3ZSBwcmUtZ2VuZXJhdGUgZGVzaXJlZCBvcHRpb25zIGFuZCBjb3B5IHRvIHNvdXJjZSBkaXJlY3RvcnkgaW5zdGVhZAorCWNwICR7V09SS0RJUn0vbmV0LXRvb2xzLWNvbmZpZy5oICAgICR7U30vY29uZmlnLmgKKwljcCAke1dPUktESVJ9L25ldC10b29scy1jb25maWcubWFrZSAke1N9L2NvbmZpZy5tYWtlCit9CisKK2RvX2NvbXBpbGUoKSB7CisJIyBuZXQtdG9vbHMgdXNlIENPUFRTL0xPUFRTIHRvIGFsbG93IGFkZGluZyBjdXN0b20gb3B0aW9ucworCWV4cG9ydCBDT1BUUz0iJENGTEFHUyIKKwlleHBvcnQgTE9QVFM9IiRMREZMQUdTIgorCXVuc2V0IENGTEFHUworCXVuc2V0IExERkxBR1MKKworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdCQVNFRElSPSR7RH0nIGluc3RhbGwKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2Jhc2Vfc2JpbmRpcl9wcm9ncyA9ICJhcnAgaWZjb25maWcgaXBtYWRkciBpcHR1bm5lbCBtaWktdG9vbCBuYW1laWYgcGxpcGNvbmZpZyByYXJwIHJvdXRlIHNsYXR0YWNoIgorYmFzZV9iaW5kaXJfcHJvZ3MgID0gImRuc2RvbWFpbm5hbWUgZG9tYWlubmFtZSBob3N0bmFtZSBuZXRzdGF0IG5pc2RvbWFpbm5hbWUgeXBkb21haW5uYW1lIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2Jhc2Vfc2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30iCitweXRob24gX19hbm9ueW1vdXMoKSB7CisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvY3Jvc3NfYXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDA3YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0ZpeCBjcm9zcyBsaW5rIHVzaW5nIGF1dG9jb25mIGRldGVjdGVkIEFSCisKK0lmIGJ1aWxkaW5nIG9uIDMyYml0IGhvc3QgYW5kIGNyZWF0aW5nIDY0Yml0IGxpYnJhcmllcywgdGhlIHRhcmdldAorcGFja2FnZSBidWlsZHMgc2hvdWxkIG5vdCBpbnZva2UgdGhlIDMyYml0IGhvc3RzJ3MgYXIuICBTcGVjaWZpY2FsbHkKK3lvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlIGxpa2U6CisKK3g4Nl82NC1saW51eC1nY2MgICAgLW02NCAtLXN5c3Jvb3Q9L29wdC9xZW11eDg2LTY0L3RtcC9zeXNyb290cy9xZW11eDg2LTY0IC1nIC1vIHRlc3QgdGVzdC5vIGxpYm5ld3QuYSAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbHNsYW5nCitsaWJuZXd0LmE6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEFyY2hpdmUgaGFzIG5vIGluZGV4OyBydW4gcmFubGliIHRvIGFkZCBvbmUKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gIHwgMyArKy0KKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNyw2ICs3LDcgQEAgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACisgQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIEBDUFBGTEFHU0AgCisgR05VX0xEID0gQEdOVV9MREAKKytBUiA9IEBBUkAKKyAKKyBWRVJTSU9OID0gQFZFUlNJT05ACisgVEFHID0gciQoc3Vic3QgLiwtLCQoVkVSU0lPTikpCitAQCAtMTA5LDcgKzExMCw3IEBAIHdoaXB0Y2wuJChTT0VYVCk6ICQoV0hJUFRDTE9CSlMpICQoTElCTkVXVFNIKQorIAkkKENDKSAtc2hhcmVkICQoU0hDRkxBR1MpICQoTERGTEFHUykgLW8gd2hpcHRjbC4kKFNPRVhUKSAkKFdISVBUQ0xPQkpTKSAtTC4gLWxuZXd0ICAkKExJQlRDTCkgLWxwb3B0ICQoTElCUykKKyAKKyAkKExJQk5FV1QpOiAkKExJQk9CSlMpCistCWFyIHJ2ICRAICReCisrCSQoQVIpIHJ2ICRAICReCisgCisgbmV3dC5vICQoU0hBUkVERElSKS9uZXd0Lm86IG5ld3QuYyBNYWtlZmlsZQorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTJlNmRhOC4uY2Q4M2Q1NyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTUsNiArMTUsMTAgQEAgQUNfUFJPR19JTlNUQUxMCisgQUNfUFJPR19MTl9TCisgQUNfUFJPR19HUkVQCisgQUNfU1lTX0xBUkdFRklMRQorK0FOX01BS0VWQVIoW0FSXSwgW0FDX1BST0dfQVJdKQorK0FOX1BST0dSQU0oW2FyXSwgW0FDX1BST0dfQVJdKQorK0FDX0RFRlVOKFtBQ19QUk9HX0FSXSwgW0FDX0NIRUNLX1RPT0woQVIsIGFyLCA6KV0pCisrQUNfUFJPR19BUgorIAorICMgQXJlIHdlIHVzaW5nIEdOVSBsZD8KKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvZml4X1NIQVJFRERJUi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvZml4X1NIQVJFRERJUi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGExZThjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9maXhfU0hBUkVERElSLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdXRob3I6IGRleHVhbi5jdWlAaW50ZWwuY29tCitEYXRlOiBGcmkgQXByIDE1IDE2OjE3OjM5IENTVCAyMDExCisKK1RoZSBwYXRjaCBmaXhlcyBhIHBhcmFsbGVsLW1ha2UgaXNzdWU6IHdoZW4gZ2VuZXJhdGluZyAkKFNIQVJFRERJUikvJS5vLCB3ZSBzaG91bGQKK2Vuc3VyZSB0aGUgZGlyZWN0b3J5ICR7U0hBUkVERElSfSBleGlzdHMuCisKK1dlIG5lZWQgdG8gcHVzaCB0aGUgcGF0Y2ggdG8gdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IERleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTI4LDEyICsxMjgsMTIgQEAgJChTSEFSRURESVIpOgorIAorIHNoYXJlZGxpYjogJChMSUJORVdUU0gpCisgCistJChMSUJORVdUU0gpOiAkKFNIQVJFRERJUikgJChTSEFSRURPQkpTKQorKyQoTElCTkVXVFNIKTogJChTSEFSRURPQkpTKQorIAkkKENDKSAtc2hhcmVkIC1vICQoTElCTkVXVFNIKSAkKFNITElCRkxBR1MpICQoU0hBUkVET0JKUykgJChMREZMQUdTKSAkKExJQlMpCisgCWxuIC1mcyAkKExJQk5FV1RTT05BTUUpIGxpYm5ld3QuJChTT0VYVCkKKyAJbG4gLWZzICQoTElCTkVXVFNIKSAkKExJQk5FV1RTT05BTUUpCisgCistJChTSEFSRURESVIpLyUubyA6ICUuYworKyQoU0hBUkVERElSKS8lLm8gOiAlLmMgJChTSEFSRURESVIpCisgCSQoQ0MpICQoU0hDRkxBR1MpIC1jICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAtbyAkQCAkPAorIAorIGluc3RhbGw6ICQoTElCTkVXVCkgaW5zdGFsbC1zaCB3aGlwdGFpbAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjM0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5pbgorKysrIGdpdC9NYWtlZmlsZS5pbgorQEAgLTUsNyArNSw3IEBAIENDID0gQENDQAorIENQUCA9IEBDUFBACisgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACistQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL3NsYW5nIEBDUFBGTEFHU0AgCisrQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIEBDUFBGTEFHU0AgCisgR05VX0xEID0gQEdOVV9MREAKKyAKKyBWRVJTSU9OID0gQFZFUlNJT05ACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhNDFhMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOC5iYgpAQCAtMCwwICsxLDI5IEBACityZXF1aXJlIHJlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XyR7UFZ9LmJiCisKK1NVTU1BUlkgLj0gIiAtIHB5dGhvbiIKK0RFUEVORFMgPSAibGlibmV3dCBweXRob24iCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWNvcmUiCisKK2luaGVyaXQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uIgorRVhUUkFfT0VNQUtFICs9ICJQWVRIT05WRVJTPSR7UFlUSE9OX0RJUn0iCisKKworZG9fY29tcGlsZSAoKSB7CisJVkVSU0lPTj0iJChzZWQgLW4gJ3MvXlZFUlNJT04gPSAvL3AnIE1ha2VmaWxlKSIKKwlvZV9ydW5tYWtlIF9zbmFjay5zbworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorCWluc3RhbGwgLW0gMDc1NSAke1BZVEhPTl9ESVJ9L19zbmFjay5zbyAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJaW5zdGFsbCAtbSAwNjQ0IHNuYWNrLnB5ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KK30KKworUEFDS0FHRVNfcmVtb3ZlID0gIndoaXB0YWlsIgorCitGSUxFU18ke1BOfSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyZTQxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzIgorCitERVNDUklQVElPTiA9ICJOZXd0IGlzIGEgcHJvZ3JhbW1pbmcgbGlicmFyeSBmb3IgY29sb3IgdGV4dCBtb2RlLCB3aWRnZXQgYmFzZWQgdXNlciBcCitpbnRlcmZhY2VzLiAgTmV3dCBjYW4gYmUgdXNlZCB0byBhZGQgc3RhY2tlZCB3aW5kb3dzLCBlbnRyeSB3aWRnZXRzLCBcCitjaGVja2JveGVzLCByYWRpbyBidXR0b25zLCBsYWJlbHMsIHBsYWluIHRleHQgZmllbGRzLCBzY3JvbGxiYXJzLCBcCitldGMuLCB0byB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzLiAgVGhpcyBwYWNrYWdlIGFsc28gY29udGFpbnMgdGhlIFwKK3NoYXJlZCBsaWJyYXJ5IG5lZWRlZCBieSBwcm9ncmFtcyBidWlsdCB3aXRoIG5ld3QsIGFzIHdlbGwgYXMgYSBcCisvdXNyL2Jpbi9kaWFsb2cgcmVwbGFjZW1lbnQgY2FsbGVkIHdoaXB0YWlsLiAgTmV3dCBpcyBiYXNlZCBvbiB0aGUgXAorc2xhbmcgbGlicmFyeS4iCisKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9uZXd0LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworIyBzbGFuZyBuZWVkcyB0byBiZSA+PSAyLjIKK0RFUEVORFMgPSAic2xhbmcgcG9wdCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbi9lL25ld3QvbmV3dC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X1NIQVJFRERJUi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9zc19hci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ODU3MjFiZWUxYTMxODU3MDcwNGIxOWRjZjMxZDI2OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NzFiMGU2MzRlZGU1NmFlNmE2YWNkOTEwNzI4YmI1ODMyYWMxM2RkYjBkMWQyNzkxOWQyNDk4ZGFiNzBjOTFlIgorCitTID0gIiR7V09SS0RJUn0vbmV3dC0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10Y2wgLS13aXRob3V0LXB5dGhvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworCitQQUNLQUdFU19wcmVwZW5kID0gIndoaXB0YWlsICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2ggYXV0b2dlbi5zaAorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitGSUxFU193aGlwdGFpbCA9ICIke2JpbmRpcn0vd2hpcHRhaWwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDdlNjA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKQEAgLTAsMCArMSwxNjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uCisjCisKK1NVTU1BUlkgPSAiU3RhbmRhcmQgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJQYWNrYWdlIGdyb3VwIGJyaW5naW5nIGluIHBhY2thZ2VzIG5lZWRlZCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIgorUFIgPSAicjYiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMgXAorICAgICIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhZnRlciByZW5hbWUKKyAgICBuYW1lbWFwID0ge30KKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1iYXNpYyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljLWxpYnMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMtdXRpbHMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMtZXh0ZW5kZWQiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWRldi11dGlscyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtbXVsdGl1c2VyIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWluaXRzY3JpcHRzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zeXMtc2VydmljZXMiCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJy1kZXYnKToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZ1s6LTRdLCBOb25lKQorICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIG1hcHBlZCArPSAnLWRldicKKyAgICAgICAgZWxpZiBwa2cuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZ1s6LTRdLCBOb25lKQorICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIG1hcHBlZCArPSAnLWRiZycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZywgTm9uZSkKKworICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICBvbGR0YXNrbmFtZSA9IG1hcHBlZC5yZXBsYWNlKCJwYWNrYWdlZ3JvdXAtY29yZSIsICJ0YXNrLWNvcmUiKQorICAgICAgICAgICAgbWFwc3RyID0gIiAlcyAlcyIgJSAobWFwcGVkLCBvbGR0YXNrbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBtYXBzdHIpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyVzIiAlIHBrZywgbWFwc3RyKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJDT05GTElDVFNfJXMiICUgcGtnLCBtYXBzdHIpCit9CisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1tdWx0aXVzZXIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyA9ICJcCisgICAgZ2xpYi0yLjAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzID0gIlwKKyAgICBiYXNoIFwKKyAgICBhY2wgXAorICAgIGF0dHIgXAorICAgIGJjIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwaW8gXAorICAgIGUyZnNwcm9ncyBcCisgICAgZWQgXAorICAgIGZpbGUgXAorICAgIGZpbmR1dGlscyBcCisgICAgZ2F3ayBcCisgICAgZ21wIFwKKyAgICBncmVwIFwKKyAgICBtYWtlZGV2cyBcCisgICAgbWMgXAorICAgIG1jLWZpc2ggXAorICAgIG1jLWhlbHBlcnMgXAorICAgIG1jLWhlbHBlcnMtcGVybCBcCisgICAgbWMtaGVscGVycy1weXRob24gXAorICAgIG1rdGVtcCBcCisgICAgbmN1cnNlcyBcCisgICAgbmV0LXRvb2xzIFwKKyAgICBwYXggXAorICAgIHBvcHQgXAorICAgIHByb2NwcyBcCisgICAgcHNtaXNjIFwKKyAgICBzZWQgXAorICAgIHRhciBcCisgICAgdGltZSBcCisgICAgdXRpbC1saW51eCBcCisgICAgemxpYiBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQgPSAiXAorICAgIGlwcm91dGUyIFwKKyAgICBpcHV0aWxzIFwKKyAgICBpcHRhYmxlcyBcCisgICAgbW9kdWxlLWluaXQtdG9vbHMgXAorICAgIG9wZW5zc2wgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyA9ICJcCisgICAgYnlhY2MgXAorICAgIGRpZmZ1dGlscyBcCisgICAgbTQgXAorICAgIG1ha2UgXAorICAgIHBhdGNoIFwKKyAgICAiCisKK1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0cyA/PSAiaW5pdHNjcmlwdHMiCitWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID89ICJzeXN2aW5pdCIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID89ICJidXN5Ym94IgorVklSVFVBTC1SVU5USU1FX3N5c2xvZyA/PSAic3lza2xvZ2QiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzfSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyfSBcCisgICAgZXRodG9vbCBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX3N5c2xvZ30gXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciA9ICJcCisgICAgY3JhY2tsaWIgXAorICAgIGd6aXAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnVzZXInLCAnJywgZCl9IFwKKyAgICBzaGFkb3cgXAorICAgIHN1ZG8gXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyA9ICJcCisgICAgYXQgXAorICAgIGJ6aXAyIFwKKyAgICBjcm9uaWUgXAorICAgIGRidXMgXAorICAgIGRidXMtZ2xpYiBcCisgICAgcHl0aG9uLWRidXMgXAorICAgIGVsZnV0aWxzIFwKKyAgICBnemlwIFwKKyAgICBsZXNzIFwKKyAgICBsaWJjYXAgXAorICAgIGxpYmV2ZW50IFwKKyAgICBsb2dyb3RhdGUgXAorICAgIG5mcy11dGlscyBcCisgICAgcGNpdXRpbHMgXAorICAgIGxpYnBjcmUgXAorICAgIHJwY2JpbmQgXAorICAgIHN5c2ZzdXRpbHMgXAorICAgIHRjcC13cmFwcGVycyBcCisgICAgdHpkYXRhIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1sc2IuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4MjM4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCkBAIC0wLDAgKzEsMjc4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIkxpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikiCitERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzYXRpc2Z5IHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHNwZWNpZmljYXRpb24iCitQUiA9ICJyMTAiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh0LCBsaWJ4dHN0IGFuZCBvdGhlcnMgcmVxdWlyZSB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjCisjIFdlIHdpbGwgc2tpcCBwYXJzaW5nIHRoaXMgcGFja2FnZWdlb3VwIGZvciBub24tZ2xpYmMgc3lzdGVtcworIworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpZiBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkgIT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoICVzIEMgbGlicmFyeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkpCit9CisKK1BBQ0tBR0VTID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2IgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXN5cy1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZGIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXBlcmwgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtdGNsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItbWlzYyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkIFwKKyAgICAiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1zeXMtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWRiIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXRjbCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLW1pc2MgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXN5cy1leHRlbmRlZCA9ICJcCisgICAgY3VybCBcCisgICAgZGhjcC1jbGllbnQgXAorICAgIGhkcGFybSBcCisgICAgbGlnaHR0cGQgXAorICAgIGxpYmFpbyBcCisgICAgbHJ6c3ogXAorICAgIGx6byBcCisgICAgbWMgXAorICAgIG1jLWZpc2ggXAorICAgIG1jLWhlbHBlcnMgXAorICAgIG1jLWhlbHBlcnMtcGVybCBcCisgICAgbWMtaGVscGVycy1weXRob24gXAorICAgIG1kYWRtIFwKKyAgICBtaW5pY29tIFwKKyAgICBuZW9uIFwKKyAgICBwYXJ0ZWQgXAorICAgICR7UFRIfSBcCisgICAgcXVvdGEgXAorICAgIHNjcmVlbiBcCisgICAgc2V0c2VyaWFsIFwKKyAgICBzeXNzdGF0IFwKKyAgICB1ZGV2LWV4dHJhY29uZiBcCisgICAgdW56aXAgXAorICAgIHdhdGNoZG9nIFwKKyAgICB3Z2V0IFwKKyAgICB3aGljaCBcCisgICAgeGluZXRkIFwKKyAgICB6aXAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZGIgPSAiXAorICAgIGRiIFwKKyAgICBzcWxpdGUzIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXBlcmwgPSAiXAorICAgIGdkYm0gXAorICAgIHBlcmwgXAorICAgIHpsaWIgXAorICAgICIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1weXRob24gPSAiXAorICAgIGV4cGF0IFwKKyAgICBnZGJtIFwKKyAgICBnbXAgXAorICAgIG5jdXJzZXMgXAorICAgIG9wZW5zc2wgXAorICAgIHB5dGhvbiBcCisgICAgcmVhZGxpbmUgXAorICAgIHppcCBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS10Y2wgPSAiXAorICAgIHRjbCBcCisgICAgIgorCisjIE1pc2NlbGxhbmVvdXMgcGFja2FnZXMgcmVxdWlyZWQgYnkgTFNCIChvciBMU0IgdGVzdHMpCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItbWlzYyA9ICJcCisgICAgY2hrY29uZmlnIFwKKyAgICBnZXR0ZXh0IFwKKyAgICBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgIGdyb2ZmIFwKKyAgICBsc2Jpbml0c2NyaXB0cyBcCisgICAgbHNidGVzdCBcCisgICAgbHNvZiBcCisgICAgc3RyYWNlIFwKKyAgICBsaWJ1c2IxIFwKKyAgICB1c2J1dGlscyBcCisgICAgcnBtIFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiTFNCIENvcmUiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGNvbW1hbmRzL2xpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgQ29yZSBzcGVjaWZpY2F0aW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiXAorICAgIGF0IFwKKyAgICBiYXNoIFwKKyAgICBiYyBcCisgICAgYmludXRpbHMgXAorICAgIGJpbnV0aWxzLXN5bWxpbmtzIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwaW8gXAorICAgIGNyb25pZSBcCisgICAgY3VwcyBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBlZCBcCisgICAgZ2xpYmMtdXRpbHMgXAorICAgIGVsZnV0aWxzIFwKKyAgICBmaWxlIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIGZvbnRjb25maWctdXRpbHMgXAorICAgIGZvb21hdGljLWZpbHRlcnMgXAorICAgIGdhd2sgXAorICAgIGdob3N0c2NyaXB0IFwKKyAgICBncmVwIFwKKyAgICBnemlwIFwKKyAgICBsb2NhbGVkZWYgXAorICAgIGxzYiBcCisgICAgbTQgXAorICAgIG1haWx4IFwKKyAgICBtYWtlIFwKKyAgICBtYW4gXAorICAgIG1hbi1wYWdlcyBcCisgICAgbWt0ZW1wIFwKKyAgICBtc210cCBcCisgICAgcGF0Y2ggXAorICAgIHBheCBcCisgICAgcHJvY3BzIFwKKyAgICBwc21pc2MgXAorICAgIHNlZCBcCisgICAgc2hhZG93IFwKKyAgICB0YXIgXAorICAgIHRpbWUgXAorICAgIHV0aWwtbGludXggXAorICAgIHhkZy11dGlscyBcCisgICAgXAorICAgIGdsaWJjIFwKKyAgICBsaWJnY2MgXAorICAgIGxpYnBhbSBcCisgICAgbGlieG1sMiBcCisgICAgbmN1cnNlcyBcCisgICAgemxpYiBcCisgICAgbnNwciBcCisgICAgbGlicG5nMTIgXAorICAgIG5zcyBcCisiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgPSAiTFNCIFJ1bnRpbWUgTGFuZ3VhZ2VzIChQZXJsKSIKK0RFU0NSSVBUSU9OX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBSdW50aW1lIGxhbmd1YWdlcyBzcGVjaWZpY2F0aW9uIChQZXJsIHBhcnRzKSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIlwKKyAgICBwZXJsIFwKKyAgICBwZXJsLW1vZHVsZXMgXAorICAgIHBlcmwtbWlzYyBcCisgICAgcGVybC1wb2QgXAorICAgIHBlcmwtZGV2IFwKKyAgICBwZXJsLWRvYyBcCisiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJMU0IgUnVudGltZSBMYW5ndWFnZXMgKFB5dGhvbikiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBSdW50aW1lIGxhbmd1YWdlcyBzcGVjaWZpY2F0aW9uIChQeXRob24gcGFydHMpIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJcCisgICAgcHl0aG9uIFwKKyAgICBweXRob24tbW9kdWxlcyBcCisgICAgcHl0aG9uLW1pc2MgXAorIgorCitkZWYgZ2V0X2xpYnF0MyhkKToKKyAgICBpZiAnbGludXhzdGRiYXNlJyBpbiBkLmdldFZhcignRElTVFJPT1ZFUlJJREVTJywgRmFsc2UpIG9yICIiOgorICAgICAgICBpZiAncXQzJyBpbiBkLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJywgRmFsc2UpIG9yICIiOgorICAgICAgICAgICAgcmV0dXJuICdsaWJxdC1tdDMnCisKKyAgICAgICAgYmIud2FybignVGhlIG1ldGEtcXQzIGxheWVyIHNob3VsZCBiZSBhZGRlZCwgdGhpcyBsYXllciBwcm92aWRlcyBRdCAzLngnIFwKKyAgICAgICAgICAgICAgICAnbGlicmFyaWVzLiBJdHMgaW50ZW5kZWQgdXNlIGlzIGZvciBwYXNzaW5nIExTQiB0ZXN0cyBhcyBRdDMgaXMnIFwKKyAgICAgICAgICAgICAgICAnYSByZXF1aXJlbWVudCBmb3IgTFNCLicpCisgICAgcmV0dXJuICcnCisKK1FUNFBLR1MgPSAiIFwKKyAgICBsaWJxdGNvcmU0IFwKKyAgICBsaWJxdGd1aTQgXAorICAgIGxpYnF0c3FsNCBcCisgICAgbGlicXRzdmc0IFwKKyAgICBsaWJxdHhtbDQgXAorICAgIGxpYnF0bmV0d29yazQgXAorICAgIHF0NC1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJvcGVuZ2wiLCAibGlicXRvcGVuZ2w0IiwgIiIsIGQpfSBcCisgICAgIgorUVQ0UEtHU19taXBzNjQgPSAiIgorUVQ0UEtHU19taXBzNjRuMzIgPSAiIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIkxTQiBEZXNrdG9wIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBsaWJyYXJpZXMgXAorICAgIHNwZWNpZmllZCBpbiB0aGUgTFNCIERlc2t0b3Agc3BlY2lmaWNhdGlvbiIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIlwKKyAgICBsaWJ4dCBcCisgICAgbGlieHhmODZ2bSBcCisgICAgbGliZHJtIFwKKyAgICBsaWJnbHUgXAorICAgIGxpYnhpIFwKKyAgICBsaWJ4dHN0IFwKKyAgICBsaWJ4MTEtbG9jYWxlIFwKKyAgICB4b3JnLW1pbmltYWwtZm9udHMgXAorICAgIGdkay1waXhidWYtbG9hZGVyLWljbyBcCisgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItYm1wIFwKKyAgICBnZGstcGl4YnVmLWxvYWRlci1hbmkgXAorICAgIGdkay1waXhidWYteGxpYiBcCisgICAgbGliZXJhdGlvbi1mb250cyBcCisgICAgZ3RrKyBcCisgICAgYXRrIFwKKyAgICBsaWJhc291bmQgXAorICAgICR7UVQ0UEtHU30gXAorICAgICR7QGdldF9saWJxdDMoZCl9IFwKKyIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkID0gIlwKKyAgICBsZGQgXAorICAgIHBhbS1wbHVnaW4td2hlZWwgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMgXAorICAgIG1rZm9udGRpciBcCisgICAgbGlidXJpLXBlcmwgXAorICAgIGxpYnhtbC1wYXJzZXItcGVybCBcCisgICAgbGlieG1sLXBlcmwgXAorICAgIGxpYnhtbC1zYXgtcGVybCBcCisgICAgZ2xpYmMtbG9jYWxlZGF0YXMgXAorICAgIGdsaWJjLWdjb252cyBcCisgICAgZ2xpYmMtY2hhcm1hcHMgXAorICAgIGdsaWJjLWJpbmFyaWVzIFwKKyAgICBnbGliYy1sb2NhbGVkYXRhLXBvc2l4IFwKKyAgICBnbGliYy1leHRyYS1uc3MgXAorICAgIGdsaWJjLXBjcHJvZmlsZSBcCisgICAgbGliY2xhc3MtaXNhLXBlcmwgXAorICAgIGxpYmVudi1wZXJsIFwKKyAgICBsaWJkdW1wdmFsdWUtcGVybCBcCisgICAgbGliZmlsZS1jaGVja3RyZWUtcGVybCBcCisgICAgbGliaTE4bi1jb2xsYXRlLXBlcmwgXAorICAgIGxpYnBvZC1wbGFpbmVyLXBlcmwgXAorIgorCitQVEggPSAicHRoIgorUFRIX2xpYmMtdWNsaWJjID0gIiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtLzk5X3BhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2U5OTBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0KQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9zZXBlcm1pdCBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vY3J5cHRfY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzgyYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitUaGlzIHBhdGNoIGZpeGVzIGEgY2FzZSB3aGVyZSBpdCBmaW5kIGNyeXB0IGRlZmluZWQgaW4gbGliYyAobXVzbCkgYnV0Citub3QgaW4gc3BlY2lmaWVkIGxpYnJhcmllcyB0aGVuIGl0IGVuZHMgdXAgYXNzaWduaW5nCisKK0xJQkNSWVBUPSItbCIgd2hpY2ggdGhlbiBnb2VzIGludG8gbWFrZWZpbGUgY2F1c2UgYWxsIHNvcnQgb2YgcHJvYmxlbXMKK2UuZy4KKworbGQ6IGNhbm5vdCBmaW5kIC1sLW0zMgorfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVGhlIHJlYXNvbiBpcyB0aGF0IC1sIGFwcGVhcnMgb24gY29tbWFuZGxpbmUgd2l0aCBvdXQgYW55IGxpYnJhcnkgYW5kCitjb21waWxlciB0cmVhdHMgdGhlIG5leHQgYXJndW1lbnQgYXMgbGlicmFyeSBuYW1lIHdoYXRldmVyIGl0IGlzLgorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IExpbnV4LVBBTS0xLjEuNi9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjYub3JnL2NvbmZpZ3VyZS5hYworKysrIExpbnV4LVBBTS0xLjEuNi9jb25maWd1cmUuYWMKK0BAIC00MDAsNyArNDAwLDkgQEAgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfaGVhZGVyX3hjcnlwdF9oIiA9CisgICBbY3J5cHRfbGlicz0iY3J5cHQiXSkKKyAKKyBCQUNLVVBfTElCUz0kTElCUworLUFDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwgTElCQ1JZUFQ9Ii1sJGFjX2xpYiIsIExJQkNSWVBUPSIiKQorK0FDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwKKysJICAgICAgIFt0ZXN0ICIkYWNfY3Zfc2VhcmNoX2NyeXB0IiA9ICJub25lIHJlcXVpcmVkIiB8fAorKwkJTElCQ1JZUFQ9IiRhY19jdl9zZWFyY2hfY3J5cHQiXSkKKyBBQ19DSEVDS19GVU5DUyhjcnlwdF9yIGNyeXB0X2dlbnNhbHRfcikKKyBMSUJTPSRCQUNLVVBfTElCUworIEFDX1NVQlNUKExJQkNSWVBUKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9maXhzZXBidWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5YzNiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRml4IHRoZSBidWlsZCBlcnJvciB3aGVuIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGlzIHVzZWQ6CisKK01ha2luZyBpbnN0YWxsIGluIHh0ZXN0c21ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbGlicGFtLzEuMS42LXIyL2J1aWxkL3h0ZXN0cycvdXNyL2Jpbi9pbnN0YWxsIC1jIC1kIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9pbWFnZS91c3Ivc2hhcmUvTGludXgtUEFNL3h0ZXN0c2ZvciBmaWxlIGluIHJ1bi14dGVzdHMuc2ggdHN0LXBhbV9kaXNwYXRjaDEucGFtZCB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kIHRzdC1wYW1fZGlzcGF0Y2gzLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDQucGFtZCB0c3QtcGFtX2Rpc3BhdGNoNS5wYW1kIHRzdC1wYW1fY3JhY2tsaWIxLnBhbWQgdHN0LXBhbV9jcmFja2xpYjIucGFtZCB0c3QtcGFtX3VuaXgxLnBhbWQgdHN0LXBhbV91bml4Mi5wYW1kIHRzdC1wYW1fdW5peDMucGFtZCB0c3QtcGFtX3VuaXg0LnBhbWQgdHN0LXBhbV91bml4MS5zaCB0c3QtcGFtX3VuaXgyLnNoIHRzdC1wYW1fdW5peDMuc2ggdHN0LXBhbV91bml4NC5zaCBhY2Nlc3MuY29uZiB0c3QtcGFtX2FjY2VzczEucGFtZCB0c3QtcGFtX2FjY2VzczEuc2ggdHN0LXBhbV9hY2Nlc3MyLnBhbWQgdHN0LXBhbV9hY2Nlc3MyLnNoIHRzdC1wYW1fYWNjZXNzMy5wYW1kIHRzdC1wYW1fYWNjZXNzMy5zaCB0c3QtcGFtX2FjY2VzczQucGFtZCB0c3QtcGFtX2FjY2VzczQuc2ggbGltaXRzLmNvbmYgdHN0LXBhbV9saW1pdHMxLnBhbWQgdHN0LXBhbV9saW1pdHMxLnNoIHRzdC1wYW1fc3VjY2VlZF9pZjEucGFtZCB0c3QtcGFtX3N1Y2NlZWRfaWYxLnNoIGdyb3VwLmNvbmYgdHN0LXBhbV9ncm91cDEucGFtZCB0c3QtcGFtX2dyb3VwMS5zaCB0c3QtcGFtX2F1dGhmYWlsLnBhbWQgdHN0LXBhbV9hdXRoc3VjY2VlZC5wYW1kIHRzdC1wYW1fc3Vic3RhY2sxLnBhbWQgdHN0LXBhbV9zdWJzdGFjazFhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazEuc2ggdHN0LXBhbV9zdWJzdGFjazIucGFtZCB0c3QtcGFtX3N1YnN0YWNrMmEucGFtZCB0c3QtcGFtX3N1YnN0YWNrMi5zaCB0c3QtcGFtX3N1YnN0YWNrMy5wYW1kIHRzdC1wYW1fc3Vic3RhY2szYS5wYW1kIHRzdC1wYW1fc3Vic3RhY2szLnNoIHRzdC1wYW1fc3Vic3RhY2s0LnBhbWQgdHN0LXBhbV9zdWJzdGFjazRhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazQuc2ggdHN0LXBhbV9zdWJzdGFjazUucGFtZCB0c3QtcGFtX3N1YnN0YWNrNWEucGFtZCB0c3QtcGFtX3N1YnN0YWNrNS5zaCB0c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnBhbWQgdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaCB0c3QtcGFtX3B3aGlzdG9yeTEucGFtZCB0c3QtcGFtX3B3aGlzdG9yeTEuc2ggdHN0LXBhbV90aW1lMS5wYW1kIHRpbWUuY29uZiA7IGRvIFwvdXNyL2Jpbi9pbnN0YWxsIC1jICRmaWxlIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9pbWFnZS91c3Ivc2hhcmUvTGludXgtUEFNL3h0ZXN0cyA7IFwJZG9uZQorL3Vzci9iaW4vaW5zdGFsbDogY2Fubm90IHN0YXQgYHJ1bi14dGVzdHMuc2gnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgdHN0LXBhbV9kaXNwYXRjaDEucGFtZCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitJbmRleDogTGludXgtUEFNLTEuMS42L3h0ZXN0cy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuNi5vcmlnL3h0ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDEyOjI2OjMwLjM2MDI2NjAwMCArMDAwMAorKysrIExpbnV4LVBBTS0xLjEuNi94dGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wMy0yMSAxMTozOTo1OC41NTcxNjY2NTAgKzAwMDAKK0BAIC01OSw3ICs1OSw3IEBACisgaW5zdGFsbF94dGVzdHM6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzCisgCWZvciBmaWxlIGluICQoRVhUUkFfRElTVCkgOyBkbyBcCistCQkkKElOU1RBTEwpICQkZmlsZSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMgOyBcCisrCQkkKElOU1RBTEwpICQoc3JjZGlyKS8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorIAlkb25lCisgCWZvciBmaWxlIGluICQoWFRFU1RTKTsgZG8gXAorIAkJJChJTlNUQUxMKSAubGlicy8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2xpYnBhbS14dGVzdHMtcmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODAwMjlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwyMjYgQEAKK0Zyb20gNTU1NDA3ZmY2ZTJmNzQyZGY2NGFlOTM4NTlmMTRhMGZjMTM5NzgyOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxMiBTZXAgMjAxNCAwNTozNTowNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBsaWJwYW0veHRlc3RzOiByZW1vdmUgYmFzaCBkZXBlbmRlbmN5CisKK1RoZXJlJ3Mgbm90IGJhc2ggc3BlY2lmaWMgc3ludGF4IGluIHRoZSB4dGVzdCBzY3JpcHRzOgorCisgICMgYWZ0ZXIgYmVsb3cgcGF0Y2hlcyBhcHBsaWVkOgorICAkIGNkIExpbnV4LVBBTS0xLjEuNi94dGVzdHMKKyAgJCBjaGVja2Jhc2hpc21zICouc2gKKyAgTm8gb3V0cHV0CisKK0p1c3QgcmVtb3ZlIHRoZSBydW50aW1lIGRlcGVuZGVuY3kgdG8gYmFzaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgeHRlc3RzL3J1bi14dGVzdHMuc2ggICAgICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2ggfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaCAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2ggICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDEuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDIuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDMuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDQuc2ggICAgICAgICAgfCAgICAyICstCisgMTkgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94dGVzdHMvcnVuLXh0ZXN0cy5zaCBiL3h0ZXN0cy9ydW4teHRlc3RzLnNoCitpbmRleCAzYTg5MDU3Li4xY2Y4Njg0IDEwMDc1NQorLS0tIGEveHRlc3RzL3J1bi14dGVzdHMuc2gKKysrKyBiL3h0ZXN0cy9ydW4teHRlc3RzLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIFNSQ0RJUj0kMQorIHNoaWZ0IDEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaAoraW5kZXggMTgwZDI1Ni4uNzA1MjFkMiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL2dyb3VwYWRkIHRzdHBhbWFjY2VzcworIC91c3Ivc2Jpbi91c2VyYWRkIC1HIHRzdHBhbWFjY2VzcyAtcCAnISEnIHRzdHBhbWFjY2VzczEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaAoraW5kZXggMGEzMDI3NS4uN2UzZTYwZiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL2dyb3VwYWRkIHRzdHBhbWFjY2VzcworIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtYWNjZXNzMgorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoCitpbmRleCAzNDhlMGMzLi4zNjMwZTJlIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczMKKyAuL3RzdC1wYW1fYWNjZXNzMworZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoCitpbmRleCA2MWU3YjQ0Li40NTM4ZGY0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczQKKyAuL3RzdC1wYW1fYWNjZXNzNAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoIGIveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKK2luZGV4IDI0OGQ0N2UuLmRjMmE2NzUgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aGZhaWwgdHN0LXBhbV9hc3NlbWJsZV9saW5lMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAoraW5kZXggYjc2Mzc3Zi4uNDRmYWNhOSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi9ncm91cGFkZCB0c3RwYW1ncnBnCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1ncnAKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoIGIveHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaAoraW5kZXggNGZhYTgyMi4uMzJjMDIxZCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1saW1pdHMKKyAuL3RzdC1wYW1fbGltaXRzMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2ggYi94dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoCitpbmRleCBkZGIzYjhiLi4wZjIxMmUyIDEwMDY0NAorLS0tIGEveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCB0c3RwYW1wd2hpc3RvcnkKKyAuL3RzdC1wYW1fcHdoaXN0b3J5MQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAoraW5kZXggNTI2MDE3NS4uZjFiNzJhNyAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhmYWlsIHRzdC1wYW1fc3Vic3RhY2sxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCitpbmRleCBjMDJmNTk3Li4zODA0ZmE3IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazIuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aHN1Y2NlZWQgdHN0LXBhbV9zdWJzdGFjazIKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKK2luZGV4IDBlNTcyYWEuLmFhNDhlOGUgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoc3VjY2VlZCB0c3QtcGFtX3N1YnN0YWNrMworZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAoraW5kZXggYTNlZjA4YS4uOTU4YTA3YSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhzdWNjZWVkIHRzdC1wYW1fc3Vic3RhY2s0CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCitpbmRleCBlMjcxNGZkLi43ZTBkYTc0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazUuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aGZhaWwgdHN0LXBhbV9zdWJzdGFjazUKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCitpbmRleCBhNjQzYjJlLi41OGU1N2I0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtdGVzdAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgcGFtdGVzdAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoIGIveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKK2luZGV4IGY3NWJkODQuLjcyZGVhYzAgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV91bml4MS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW11bml4CisgLi90c3QtcGFtX3VuaXgxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDIuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAoraW5kZXggNzA5MzE1NS4uYzA0ZDZlNiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXgyLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIHBhbXVuaXgwID0gMGFYS1p6dEEuZDFLWQorIC91c3Ivc2Jpbi91c2VyYWRkIC1wIDBhWEtaenRBLmQxS1kgIHRzdHBhbXVuaXgKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4My5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCitpbmRleCBlZjRhMDdjLi5iNTJkYjJiIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgcGFtdW5peDAxID0gMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVIHRzdHBhbXVuaXgKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4NC5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCitpbmRleCA3ODdjMmY5Li5lNzk3NmZkIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDQuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgcGFtdW5peDAxID0gMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVIHRzdHBhbXVuaXgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2xpYnBhbS14dGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2xpYnBhbS14dGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2ODc0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitUaGlzIHBhdGNoIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IHN1YiBwYWNrYWdlIGxpYnBhbS14dGVzdHMgdG8gZG8gbW9yZSBjaGVja3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLSBMaW51eC1QQU0tMS4xLjQveHRlc3RzL01ha2VmaWxlLmFtLm9yaWcJMjAxMS0wNy0xOSAxNzowMDowOS42MTk5ODAwMDEgKzA4MDAKKysrKyBMaW51eC1QQU0tMS4xLjQveHRlc3RzL01ha2VmaWxlLmFtCTIwMTEtMDctMTkgMTY6NTQ6MDAuMjI5OTc5OTk4ICswODAwCitAQCAtNyw3ICs3LDcgQEAKKyBBTV9MREZMQUdTID0gLUwkKHRvcF9idWlsZGRpcikvbGlicGFtIC1scGFtIFwKKyAJLUwkKHRvcF9idWlsZGRpcikvbGlicGFtX21pc2MgLWxwYW1fbWlzYworIAorLUNMRUFORklMRVMgPSAqfiAkKFhURVNUUykKKytDTEVBTkZJTEVTID0gKn4KKyAKKyBFWFRSQV9ESVNUID0gcnVuLXh0ZXN0cy5zaCB0c3QtcGFtX2Rpc3BhdGNoMS5wYW1kIHRzdC1wYW1fZGlzcGF0Y2gyLnBhbWQgXAorIAl0c3QtcGFtX2Rpc3BhdGNoMy5wYW1kIHRzdC1wYW1fZGlzcGF0Y2g0LnBhbWQgXAorQEAgLTUxLDMgKzUxLDE4IEBACisgCisgeHRlc3RzOiAkKFhURVNUUykgcnVuLXh0ZXN0cy5zaAorIAkiJChzcmNkaXIpIi9ydW4teHRlc3RzLnNoICIkKHNyY2RpcikiICR7WFRFU1RTfSAke05PU1JDVEVTVFN9CisrCisrYWxsOiAkKFhURVNUUykKKysKKytpbnN0YWxsOiBpbnN0YWxsX3h0ZXN0cworKworK2luc3RhbGxfeHRlc3RzOgorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cworKwlmb3IgZmlsZSBpbiAkKEVYVFJBX0RJU1QpIDsgZG8gXAorKwkJJChJTlNUQUxMKSAkJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwlkb25lCisrCWZvciBmaWxlIGluICQoWFRFU1RTKTsgZG8gXAorKwkJJChJTlNUQUxMKSAubGlicy8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwlkb25lCisrCisrLlBIT05ZOiBhbGwgaW5zdGFsbF94dGVzdHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLW5vLWlubmV0Z3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNTUxYWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2lubmV0Z3IgbWF5IG5vdCBiZSB0aGVyZSBzbyBtYWtlIHN1cmUgdGhhdCB3aGVuIGlubmV0Z3IgaXMgbm90IHByZXNlbnQKK3RoZW4gd2UgaW5mb3JtIGFib3V0IGl0IGFuZCBub3QgdXNlIGl0LgorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYworKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYworQEAgLTY1OSw3ICs2NTksMTEgQEAgc3RhdGljIGludCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcAorIAl9CisgCS8qIElmIGJ1ZmZlciBzdGFydHMgd2l0aCBALCB3ZSBhcmUgdXNpbmcgbmV0Z3JvdXBzICovCisgCWlmIChidWZmZXJbMF0gPT0gJ0AnKQorLQkgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorKyAgICAgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjZWxzZQorKyAgICAgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9ncm91cCBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKyAJLyogb3RoZXJ3aXNlLCBpZiB0aGUgYnVmZmVyIHN0YXJ0cyB3aXRoICUsIGl0J3MgYSBVTklYIGdyb3VwICovCisgCWVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnJScpCisgICAgICAgICAgIGdvb2QgJj0gcGFtX21vZHV0aWxfdXNlcl9pbl9ncm91cF9uYW1fbmFtKHBhbWgsIHVzZXIsICZidWZmZXJbMV0pOworSW5kZXg6IExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKKysrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCitAQCAtNTU1LDkgKzU1NSwxMyBAQCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QKKyAJICB9CisgCSAgLyogSWYgYnVmZmVyIHN0YXJ0cyB3aXRoIEAsIHdlIGFyZSB1c2luZyBuZXRncm91cHMgKi8KKyAJICBpZiAoYnVmZmVyWzBdID09ICdAJykKKy0JICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorKwkgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjZWxzZQorKwkgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV90aW1lIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOworKyNlbmRpZgorIAkgIGVsc2UKKy0JICAgIGdvb2QgJj0gbG9naWNfZmllbGQocGFtaCwgdXNlciwgYnVmZmVyLCBjb3VudCwgaXNfc2FtZSk7CisrCSAgICAgICBnb29kICY9IGxvZ2ljX2ZpZWxkKHBhbWgsIHVzZXIsIGJ1ZmZlciwgY291bnQsIGlzX3NhbWUpOworIAkgIEQoKCJ3aXRoIHVzZXI6ICVzIiwgZ29vZCA/ICJwYXNzZXMiOiJmYWlscyIgKSk7CisgCisgCSAgLyogaGVyZSB3ZSBnZXQgdGhlIHRpbWUgZmllbGQgKi8KK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCisrKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYworQEAgLTIzMSwxOCArMjMxLDI3IEBAIGV2YWx1YXRlX25vdGluZ3JvdXAocGFtX2hhbmRsZV90ICpwYW1oLAorIH0KKyAvKiBSZXR1cm4gUEFNX1NVQ0NFU1MgaWYgdGhlIChob3N0LHVzZXIpIGlzIGluIHRoZSBuZXRncm91cC4gKi8KKyBzdGF0aWMgaW50CistZXZhbHVhdGVfaW5uZXRncihjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKytldmFsdWF0ZV9pbm5ldGdyKGNvbnN0IHBhbV9oYW5kbGVfdCogcGFtaCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisgeworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKyAJaWYgKGlubmV0Z3IoZ3JvdXAsIGhvc3QsIHVzZXIsIE5VTEwpID09IDEpCisgCQlyZXR1cm4gUEFNX1NVQ0NFU1M7CisrI2Vsc2UKKysgICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fc3VjY2VlZF9pZiBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKysKKyAJcmV0dXJuIFBBTV9BVVRIX0VSUjsKKyB9CisgLyogUmV0dXJuIFBBTV9TVUNDRVNTIGlmIHRoZSAoaG9zdCx1c2VyKSBpcyBOT1QgaW4gdGhlIG5ldGdyb3VwLiAqLworIHN0YXRpYyBpbnQKKy1ldmFsdWF0ZV9ub3Rpbm5ldGdyKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQorK2V2YWx1YXRlX25vdGlubmV0Z3IoY29uc3QgcGFtX2hhbmRsZV90KiBwYW1oLCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKyB7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorIAlpZiAoaW5uZXRncihncm91cCwgaG9zdCwgdXNlciwgTlVMTCkgPT0gMCkKKyAJCXJldHVybiBQQU1fU1VDQ0VTUzsKKysjZWxzZQorKwlwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3N1Y2NlZWRfaWYgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisgCXJldHVybiBQQU1fQVVUSF9FUlI7CisgfQorIAorQEAgLTM2MSwxNCArMzcwLDE0IEBAIGV2YWx1YXRlKHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGRlYnVnLAorIAkJY29uc3Qgdm9pZCAqcmhvc3Q7CisgCQlpZiAocGFtX2dldF9pdGVtKHBhbWgsIFBBTV9SSE9TVCwgJnJob3N0KSAhPSBQQU1fU1VDQ0VTUykKKyAJCQlyaG9zdCA9IE5VTEw7CistCQlyZXR1cm4gZXZhbHVhdGVfaW5uZXRncihyaG9zdCwgdXNlciwgcmlnaHQpOworKwkJcmV0dXJuIGV2YWx1YXRlX2lubmV0Z3IocGFtaCwgcmhvc3QsIHVzZXIsIHJpZ2h0KTsKKyAJfQorIAkvKiAoUmhvc3QsIHVzZXIpIGlzIG5vdCBpbiB0aGlzIGdyb3VwLiAqLworIAlpZiAoc3RyY2FzZWNtcChxdWFsLCAibm90aW5uZXRnciIpID09IDApIHsKKyAJCWNvbnN0IHZvaWQgKnJob3N0OworIAkJaWYgKHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fUkhPU1QsICZyaG9zdCkgIT0gUEFNX1NVQ0NFU1MpCisgCQkJcmhvc3QgPSBOVUxMOworLQkJcmV0dXJuIGV2YWx1YXRlX25vdGlubmV0Z3Iocmhvc3QsIHVzZXIsIHJpZ2h0KTsKKysJCXJldHVybiBldmFsdWF0ZV9ub3Rpbm5ldGdyKHBhbWgsIHJob3N0LCB1c2VyLCByaWdodCk7CisgCX0KKyAJLyogRmFpbCBjbG9zZWQuICovCisgCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1zZWN1cml0eS1hYnN0cmFjdC1zZWN1cmV0dHktaGFuZGxpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1zZWN1cml0eS1hYnN0cmFjdC1zZWN1cmV0dHktaGFuZGxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MzRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDIwMCBAQAorRGVzY3JpcHRpb246IGV4dHJhY3QgdGhlIHNlY3VyZXR0eSBsb2dpYyBmb3IgdXNlIHdpdGggdGhlICJudWxsb2tfc2VjdXJlIiBvcHRpb24KKyBpbnRyb2R1Y2VkIGluIHRoZSAiMDU1X3BhbV91bml4X251bGxva19zZWN1cmUiIHBhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtCistLS0gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvTWFrZWZpbGUuYW0JMjAxMy0wNy0wNSAxMTowODoyMy4yMjQ0ODMyMzcgKzA4MDAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbQkyMDEzLTA3LTA1IDExOjE1OjIxLjMwNDQ4NjQ1NiArMDgwMAorQEAgLTI0LDYgKzI0LDEwIEBAIGVuZGlmCisgc2VjdXJlbGliX0xUTElCUkFSSUVTID0gcGFtX3NlY3VyZXR0eS5sYQorIHBhbV9zZWN1cmV0dHlfbGFfTElCQUREID0gLUwkKHRvcF9idWlsZGRpcikvbGlicGFtIC1scGFtCisgCisrcGFtX3NlY3VyZXR0eV9sYV9TT1VSQ0VTID0JXAorKwlwYW1fc2VjdXJldHR5LmMJCVwKKysJdHR5X3NlY3VyZS5jCisrCisgaWYgRU5BQkxFX1JFR0VORVJBVEVfTUFOCisgbm9pbnN0X0RBVEEgPSBSRUFETUUKKyBSRUFETUU6IHBhbV9zZWN1cmV0dHkuOC54bWwKK2RpZmYgLXVycE4gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvcGFtX3NlY3VyZXR0eS5jIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYworLS0tIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYwkyMDEzLTA3LTA1IDExOjA3OjUwLjA2NDQ4MzU2OCArMDgwMAorKysrIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYwkyMDEzLTA3LTA1IDExOjEyOjIzLjk5NDQ4MzM0NCArMDgwMAorQEAgLTEsNyArMSw1IEBACisgLyogcGFtX3NlY3VyZXR0eSBtb2R1bGUgKi8KKyAKKy0jZGVmaW5lIFNFQ1VSRVRUWV9GSUxFICIvZXRjL3NlY3VyZXR0eSIKKy0jZGVmaW5lIFRUWV9QUkVGSVggICAgICIvZGV2LyIKKyAjZGVmaW5lIENNRExJTkVfRklMRSAgICIvcHJvYy9jbWRsaW5lIgorICNkZWZpbmUgQ09OU09MRUFDVElWRV9GSUxFCSIvc3lzL2NsYXNzL3R0eS9jb25zb2xlL2FjdGl2ZSIKKyAKK0BAIC00MCw2ICszOCw5IEBACisgI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2R1dGlsLmg+CisgI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9leHQuaD4KKyAKKytleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1dHR5bmFtZSk7CisrCisgI2RlZmluZSBQQU1fREVCVUdfQVJHICAgICAgIDB4MDAwMQorICNkZWZpbmUgUEFNX05PQ09OU09MRV9BUkcgICAweDAwMDIKKyAKK0BAIC03MywxMSArNzQsNyBAQCBzZWN1cmV0dHlfcGVyZm9ybV9jaGVjayAocGFtX2hhbmRsZV90ICpwCisgICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lOworICAgICBjb25zdCBjaGFyICp1dHR5bmFtZTsKKyAgICAgY29uc3Qgdm9pZCAqdm9pZF91dHR5bmFtZTsKKy0gICAgY2hhciB0dHlmaWxlbGluZVsyNTZdOworLSAgICBjaGFyIHB0bmFtZVsyNTZdOworLSAgICBzdHJ1Y3Qgc3RhdCB0dHlmaWxlaW5mbzsKKyAgICAgc3RydWN0IHBhc3N3ZCAqdXNlcl9wd2Q7CistICAgIEZJTEUgKnR0eWZpbGU7CisgCisgICAgIC8qIGxvZyBhIHRyYWlsIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICAgaWYgKGN0cmwgJiBQQU1fREVCVUdfQVJHKSB7CitAQCAtMTA1LDUwICsxMDIsNyBAQCBzZWN1cmV0dHlfcGVyZm9ybV9jaGVjayAocGFtX2hhbmRsZV90ICpwCisgCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CisgICAgIH0KKyAKKy0gICAgLyogVGhlIFBBTV9UVFkgaXRlbSBtYXkgYmUgcHJlZml4ZWQgd2l0aCAiL2Rldi8iIC0gc2tpcCB0aGF0ICovCistICAgIGlmIChzdHJuY21wKFRUWV9QUkVGSVgsIHV0dHluYW1lLCBzaXplb2YoVFRZX1BSRUZJWCktMSkgPT0gMCkgeworLQl1dHR5bmFtZSArPSBzaXplb2YoVFRZX1BSRUZJWCktMTsKKy0gICAgfQorLQorLSAgICBpZiAoc3RhdChTRUNVUkVUVFlfRklMRSwgJnR0eWZpbGVpbmZvKSkgeworLQlwYW1fc3lzbG9nKHBhbWgsIExPR19OT1RJQ0UsICJDb3VsZG4ndCBvcGVuICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKy0JcmV0dXJuIFBBTV9TVUNDRVNTOyAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBzZWN1cmV0dHkgaGFuZGxpbmcsCistCQkJICAgICAgIHRoaXMgbmVlZHMgdG8gc3VjY2VlZC4gIEJ1dCB3ZSBzdGlsbCBsb2cgdGhlCistCQkJICAgICAgIGVycm9yLiAqLworLSAgICB9CistCistICAgIGlmICgodHR5ZmlsZWluZm8uc3RfbW9kZSAmIFNfSVdPVEgpIHx8ICFTX0lTUkVHKHR0eWZpbGVpbmZvLnN0X21vZGUpKSB7CistCS8qIElmIHRoZSBmaWxlIGlzIHdvcmxkIHdyaXRhYmxlIG9yIGlzIG5vdCBhCistCSAgIG5vcm1hbCBmaWxlLCByZXR1cm4gZXJyb3IgKi8KKy0JcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLAorLQkJICAgIiVzIGlzIGVpdGhlciB3b3JsZCB3cml0YWJsZSBvciBub3QgYSBub3JtYWwgZmlsZSIsCistCQkgICBTRUNVUkVUVFlfRklMRSk7CistCXJldHVybiBQQU1fQVVUSF9FUlI7CistICAgIH0KKy0KKy0gICAgdHR5ZmlsZSA9IGZvcGVuKFNFQ1VSRVRUWV9GSUxFLCJyIik7CistICAgIGlmICh0dHlmaWxlID09IE5VTEwpIHsgLyogQ2hlY2sgdGhhdCB3ZSBvcGVuZWQgaXQgc3VjY2Vzc2Z1bGx5ICovCistCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwgIkVycm9yIG9wZW5pbmcgJXM6ICVtIiwgU0VDVVJFVFRZX0ZJTEUpOworLQlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOworLSAgICB9CistCistICAgIGlmIChpc2RpZ2l0KHV0dHluYW1lWzBdKSkgeworLQlzbnByaW50ZihwdG5hbWUsIHNpemVvZihwdG5hbWUpLCAicHRzLyVzIiwgdXR0eW5hbWUpOworLSAgICB9IGVsc2UgeworLQlwdG5hbWVbMF0gPSAnXDAnOworLSAgICB9CistCistICAgIHJldHZhbCA9IDE7CistCistICAgIHdoaWxlICgoZmdldHModHR5ZmlsZWxpbmUsIHNpemVvZih0dHlmaWxlbGluZSktMSwgdHR5ZmlsZSkgIT0gTlVMTCkKKy0JICAgJiYgcmV0dmFsKSB7CistCWlmICh0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPT0gJ1xuJykKKy0JICAgIHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9ICdcMCc7CistCistCXJldHZhbCA9ICggc3RyY21wKHR0eWZpbGVsaW5lLCB1dHR5bmFtZSkKKy0JCSAgICYmICghcHRuYW1lWzBdIHx8IHN0cmNtcChwdG5hbWUsIHV0dHluYW1lKSkgKTsKKy0gICAgfQorLSAgICBmY2xvc2UodHR5ZmlsZSk7CisrICAgIHJldHZhbCA9IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUocGFtaCwgdXR0eW5hbWUpOworIAorICAgICBpZiAocmV0dmFsICYmICEoY3RybCAmIFBBTV9OT0NPTlNPTEVfQVJHKSkgeworICAgICAgICAgRklMRSAqY21kbGluZWZpbGU7CitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUuYyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMKKy0tLSBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMJMTk3MC0wMS0wMSAwODozMDowMC4wMDAwMDAwMDAgKzA4MzAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMJMjAxMy0wNy0wNSAxMToxNDoyMS41MzQ0ODI5MDAgKzA4MDAKK0BAIC0wLDAgKzEsOTAgQEAKKysvKgorKyAqIEEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgcGFydGljdWxhciBsaW5lIGlzIGluIC9ldGMvc2VjdXJldHR5CisrICovCisrCisrCisrI2RlZmluZSBTRUNVUkVUVFlfRklMRSAiL2V0Yy9zZWN1cmV0dHkiCisrI2RlZmluZSBUVFlfUFJFRklYICAgICAiL2Rldi8iCisrCisrLyogVGhpcyBmdW5jdGlvbiB0YWtlbiBvdXQgb2YgcGFtX3NlY3VyZXR0eSBieSBTYW0gSGFydG1hbgorKyAqIDxoYXJ0bWFuc0BkZWJpYW4ub3JnPiovCisrLyoKKysgKiBieSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+LCBSZWQgSGF0IFNvZnR3YXJlLgorKyAqIEp1bHkgMjUsIDE5OTYuCisrICogU2xpZ2h0IG1vZGlmaWNhdGlvbnMgQUdNLiAxOTk2LzEyLzMKKysgKi8KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdWxlcy5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8c3lzbG9nLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdXRpbC5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fZXh0Lmg+CisrCisrZXh0ZXJuIGludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworKworK2ludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqdXR0eW5hbWUpCisreworKyAgICBpbnQgcmV0dmFsID0gUEFNX0FVVEhfRVJSOworKyAgICBjaGFyIHR0eWZpbGVsaW5lWzI1Nl07CisrICAgIGNoYXIgcHRuYW1lWzI1Nl07CisrICAgIHN0cnVjdCBzdGF0IHR0eWZpbGVpbmZvOworKyAgICBGSUxFICp0dHlmaWxlOworKyAgICAvKiBUaGUgUEFNX1RUWSBpdGVtIG1heSBiZSBwcmVmaXhlZCB3aXRoICIvZGV2LyIgLSBza2lwIHRoYXQgKi8KKysgICAgaWYgKHN0cm5jbXAoVFRZX1BSRUZJWCwgdXR0eW5hbWUsIHNpemVvZihUVFlfUFJFRklYKS0xKSA9PSAwKQorKwl1dHR5bmFtZSArPSBzaXplb2YoVFRZX1BSRUZJWCktMTsKKysKKysgICAgaWYgKHN0YXQoU0VDVVJFVFRZX0ZJTEUsICZ0dHlmaWxlaW5mbykpIHsKKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfTk9USUNFLCAiQ291bGRuJ3Qgb3BlbiAlczogJW0iLAorKwkgICAgICAgICAgIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9TVUNDRVNTOyAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBzZWN1cmV0dHkgaGFuZGxpbmcsCisrCQkJICAgICAgIHRoaXMgbmVlZHMgdG8gc3VjY2VlZC4gIEJ1dCB3ZSBzdGlsbCBsb2cgdGhlCisrCQkJICAgICAgIGVycm9yLiAqLworKyAgICB9CisrCisrICAgIGlmICgodHR5ZmlsZWluZm8uc3RfbW9kZSAmIFNfSVdPVEgpIHx8ICFTX0lTUkVHKHR0eWZpbGVpbmZvLnN0X21vZGUpKSB7CisrCS8qIElmIHRoZSBmaWxlIGlzIHdvcmxkIHdyaXRhYmxlIG9yIGlzIG5vdCBhCisrCSAgIG5vcm1hbCBmaWxlLCByZXR1cm4gZXJyb3IgKi8KKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLAorKwkgICAgICAgICAgICIlcyBpcyBlaXRoZXIgd29ybGQgd3JpdGFibGUgb3Igbm90IGEgbm9ybWFsIGZpbGUiLAorKwkgICAgICAgICAgIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9BVVRIX0VSUjsKKysgICAgfQorKworKyAgICB0dHlmaWxlID0gZm9wZW4oU0VDVVJFVFRZX0ZJTEUsInIiKTsKKysgICAgaWYodHR5ZmlsZSA9PSBOVUxMKSB7IC8qIENoZWNrIHRoYXQgd2Ugb3BlbmVkIGl0IHN1Y2Nlc3NmdWxseSAqLworKwlwYW1fc3lzbG9nKHBhbWgsIExPR19FUlIsICJFcnJvciBvcGVuaW5nICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9TRVJWSUNFX0VSUjsKKysgICAgfQorKworKyAgICBpZiAoaXNkaWdpdCh1dHR5bmFtZVswXSkpIHsKKysJc25wcmludGYocHRuYW1lLCBzaXplb2YocHRuYW1lKSwgInB0cy8lcyIsIHV0dHluYW1lKTsKKysgICAgfSBlbHNlIHsKKysJcHRuYW1lWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgICByZXR2YWwgPSAxOworKworKyAgICB3aGlsZSAoKGZnZXRzKHR0eWZpbGVsaW5lLHNpemVvZih0dHlmaWxlbGluZSktMSwgdHR5ZmlsZSkgIT0gTlVMTCkgCisrCSAgICYmIHJldHZhbCkgeworKwlpZih0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPT0gJ1xuJykKKysJICAgIHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9ICdcMCc7CisrCXJldHZhbCA9ICggc3RyY21wKHR0eWZpbGVsaW5lLHV0dHluYW1lKQorKwkgICAgICAgICAgICYmICghcHRuYW1lWzBdIHx8IHN0cmNtcChwdG5hbWUsIHV0dHluYW1lKSkgKTsKKysgICAgfQorKyAgICBmY2xvc2UodHR5ZmlsZSk7CisrCisrICAgIGlmKHJldHZhbCkgeworKwlyZXR2YWwgPSBQQU1fQVVUSF9FUlI7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHJldHZhbDsKKyt9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0MWU4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaApAQCAtMCwwICsxLDI0MCBAQAorRnJvbSA5YmRjMTk3NDc0Nzk1ZjJkMDAwYzJiYzA0ZjU4ZjdjZWY4ODk4ZjIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW1hcm5hdGggVmFsbHVyaSA8YW1hcm5hdGgudmFsbHVyaUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDE1IEp1bCAyMDE1IDEzOjA3OjIwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERlYmlhbiBwYXRjaCB0byBhZGQgYSBuZXcgJ251bGxva19zZWN1cmUnIG9wdGlvbiB0byBwYW1fdW5peCwKKyB3aGljaCBhY2NlcHRzIHVzZXJzIHdpdGggbnVsbCBwYXNzd29yZHMgb25seSB3aGVuIHRoZSBhcHBsaWNhbnQgaXMgY29ubmVjdGVkCisgZnJvbSBhIHR0eSBsaXN0ZWQgaW4gL2V0Yy9zZWN1cmV0dHkuCisKK0F1dGhvcnM6IFNhbSBIYXJ0bWFuIDxoYXJ0bWFuc0BkZWJpYW4ub3JnPiwKKyAgICAgICAgIFN0ZXZlIExhbmdhc2VrIDx2b3Jsb25AZGViaWFuLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCit2MjoKKwktIEZvcndhcmQgcG9ydGVkIGZyb20gdjEuMS42IHRvIHYxLjIuMQorCitTaWduZWQtb2ZmLWJ5OiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4KKy0tLQorIG1vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0gICAgfCAgMyArKy0KKyBtb2R1bGVzL3BhbV91bml4L1JFQURNRSAgICAgICAgIHwgMTEgKysrKysrKysrKy0KKyBtb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjggICAgIHwgIDkgKysrKysrKystCisgbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbCB8IDE5ICsrKysrKysrKysrKysrKysrKy0KKyBtb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYyAgICAgIHwgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQorIG1vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oICAgICAgfCAgOCArKysrKystLQorIDYgZmlsZXMgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtIGIvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbQoraW5kZXggNTZlZDU5MS4uOWEzNzJhYyAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KK0BAIC0zMCw3ICszMCw4IEBAIGlmIEhBVkVfVkVSU0lPTklORworICAgcGFtX3VuaXhfbGFfTERGTEFHUyArPSAtV2wsLS12ZXJzaW9uLXNjcmlwdD0kKHNyY2RpcikvLi4vbW9kdWxlcy5tYXAKKyBlbmRpZgorIHBhbV91bml4X2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJwYW0vbGlicGFtLmxhIFwKKy0JQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykKKysJQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykgXAorKwkuLi9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUubG8KKyAKKyBzZWN1cmVsaWJfTFRMSUJSQVJJRVMgPSBwYW1fdW5peC5sYQorIAorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKK2luZGV4IDM5MzVkYmEuLjc4ODBkOTEgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L1JFQURNRQorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKK0BAIC02Nyw3ICs2NywxNiBAQCBudWxsb2sKKyAKKyAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKKyAgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxvayBhcmd1bWVudCBvdmVycmlkZXMKKy0gICAgdGhpcyBkZWZhdWx0LgorKyAgICB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZQorKyAgICBzZXJ2aWNlLgorKworK251bGxva19zZWN1cmUKKysKKysgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKKysgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxva19zZWN1cmUgYXJndW1lbnQKKysgICAgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MKKysgICAgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mIHRoZSB2YWx1ZXMKKysgICAgZm91bmQgaW4gL2V0Yy9zZWN1cmV0dHkuCisgCisgdHJ5X2ZpcnN0X3Bhc3MKKyAKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjggYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKK2luZGV4IDMzOTE3OGIuLmE0YmQ5MDYgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAorQEAgLTkyLDcgKzkyLDE0IEBAIFR1cm5zIG9mZiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIG5hbWVseSBtZXNzYWdlcyBhYm91dCBzZXNzaW9uIG9wZW4gYW5kIGNsb3NlIHZpCisgLlJTIDQKKyBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rXCYuIFRoZQorIFxmQm51bGxva1xmUgorLWFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHRcJi4KKythcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUgc2VydmljZVwmLgorKy5SRQorKy5QUAorK1xmQm51bGxva19zZWN1cmVcZlIKKysuUlMgNAorK1RoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmtcJi4gVGhlCisrXGZCbnVsbG9rX3NlY3VyZVxmUgorK2FyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlIGFzIGxvbmcgYXMgdGhlIHZhbHVlIG9mIFBBTV9UVFkgaXMgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5XCYuCisgLlJFCisgLlBQCisgXGZCdHJ5X2ZpcnN0X3Bhc3NcZlIKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sIGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbAoraW5kZXggYThiNjRiYi4uMWNlZDZmNCAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKK0BAIC0xNTksNyArMTU5LDI0IEBACisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZQorICAgICAgICAgICAgIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4KKy0gICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2s8L29wdGlvbj4gYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdC4KKysgICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2s8L29wdGlvbj4gYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdAorKyAgICAgICAgICAgIGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUKKysgICAgICAgICAgICBzZXJ2aWNlLgorKyAgICAgICAgICA8L3BhcmE+CisrICAgICAgICA8L2xpc3RpdGVtPgorKyAgICAgIDwvdmFybGlzdGVudHJ5PgorKyAgICAgIDx2YXJsaXN0ZW50cnk+CisrICAgICAgICA8dGVybT4KKysgICAgICAgICAgPG9wdGlvbj5udWxsb2tfc2VjdXJlPC9vcHRpb24+CisrICAgICAgICA8L3Rlcm0+CisrICAgICAgICA8bGlzdGl0ZW0+CisrICAgICAgICAgIDxwYXJhPgorKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZQorKyAgICAgICAgICAgIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4KKysgICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2tfc2VjdXJlPC9vcHRpb24+IGFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzCisrICAgICAgICAgICAgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MKKysgICAgICAgICAgICB0aGUgc2VydmljZSBhcyBsb25nIGFzIHRoZSB2YWx1ZSBvZiBQQU1fVFRZIGlzIHNldCB0byBvbmUgb2YKKysgICAgICAgICAgICB0aGUgdmFsdWVzIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5LgorICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKK2luZGV4IGFiY2NkODIuLjIzNjE5NTcgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYworKysrIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKK0BAIC0xODksMTMgKzE4OSwyMiBAQCBpbnQgX3NldF9jdHJsKHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGZsYWdzLCBpbnQgKnJlbWVtYmVyLCBpbnQgKnJvdW5kcywKKyAJLyogbm93IHBhcnNlIHRoZSBhcmd1bWVudHMgdG8gdGhpcyBtb2R1bGUgKi8KKyAKKyAJZm9yICg7IGFyZ2MtLSA+IDA7ICsrYXJndikgeworKwkJaW50IHNsOworIAorIAkJRCgoInBhbV91bml4IGFyZzogJXMiLCAqYXJndikpOworIAorIAkJZm9yIChqID0gMDsgaiA8IFVOSVhfQ1RSTFNfOyArK2opIHsKKy0JCQlpZiAodW5peF9hcmdzW2pdLnRva2VuCistCQkJICAgICYmICFzdHJuY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4sIHN0cmxlbih1bml4X2FyZ3Nbal0udG9rZW4pKSkgeworLQkJCQlicmVhazsKKysJCQlpZiAodW5peF9hcmdzW2pdLnRva2VuKSB7CisrCQkJCXNsID0gc3RybGVuKHVuaXhfYXJnc1tqXS50b2tlbik7CisrCQkJCWlmICh1bml4X2FyZ3Nbal0udG9rZW5bc2wtMV0gPT0gJz0nKSB7CisrCQkJCQkvKiBleGNsdWRlIGFyZ3VtZW50IGZyb20gY29tcGFyaXNvbiAqLworKwkJCQkJaWYgKCFzdHJuY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4sIHNsKSkKKysJCQkJCQlicmVhazsKKysJCQkJfSBlbHNlIHsKKysJCQkJLyogY29tcGFyZSBmdWxsIHN0cmluZ3MgKi8KKysJCQkJCWlmICghc3RyY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4pKQorKwkJCQkJCWJyZWFrOworKwkJCQl9CisgCQkJfQorIAkJfQorIAorQEAgLTU2Niw2ICs1NzUsNyBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAorICAgICBpZiAoY2hpbGQgPT0gMCkgeworIAlzdGF0aWMgY2hhciAqZW52cFtdID0geyBOVUxMIH07CisgCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworKwlpbnQgbnVsbG9rID0gb2ZmKFVOSVhfX05PTlVMTCwgY3RybCk7CisgCisgCS8qIFhYWCAtIHNob3VsZCByZWFsbHkgdGlkeSB1cCBQQU0gaGVyZSB0b28gKi8KKyAKK0BAIC01OTMsNyArNjAzLDE2IEBAIHN0YXRpYyBpbnQgX3VuaXhfcnVuX2hlbHBlcl9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICpwYXNzd2QsCisgCS8qIGV4ZWMgYmluYXJ5IGhlbHBlciAqLworIAlhcmdzWzBdID0gQ0hLUFdEX0hFTFBFUjsKKyAJYXJnc1sxXSA9IHVzZXI7CistCWlmIChvZmYoVU5JWF9fTk9OVUxMLCBjdHJsKSkgewkvKiB0aGlzIG1lYW5zIHdlJ3ZlIHN1Y2NlZWRlZCAqLworKwlpZiAob24oVU5JWF9OVUxMT0tfU0VDVVJFLCBjdHJsKSkgeworKwkJY29uc3Qgdm9pZCAqdXR0eW5hbWU7CisrCQlyZXR2YWwgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1RUWSwgJnV0dHluYW1lKTsKKysJCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NFU1MgfHwgdXR0eW5hbWUgPT0gTlVMTAorKwkJCXx8IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUocGFtaCwgKGNvbnN0IGNoYXIgKil1dHR5bmFtZSkgIT0gUEFNX1NVQ0NFU1MpIHsKKysJCQludWxsb2sgPSAwOworKwkJfQorKwl9CisrCisrCWlmIChudWxsb2spIHsKKyAJICBhcmdzWzJdPSJudWxsb2siOworIAl9IGVsc2UgeworIAkgIGFyZ3NbMl09Im5vbnVsbCI7CitAQCAtNjc4LDYgKzY5NywxNyBAQCBfdW5peF9ibGFua3Bhc3N3ZCAocGFtX2hhbmRsZV90ICpwYW1oLCB1bnNpZ25lZCBpbnQgY3RybCwgY29uc3QgY2hhciAqbmFtZSkKKyAJaWYgKG9uKFVOSVhfX05PTlVMTCwgY3RybCkpCisgCQlyZXR1cm4gMDsJLyogd2lsbCBmYWlsIGJ1dCBkb24ndCBsZXQgb24geWV0ICovCisgCisrCWlmIChvbihVTklYX05VTExPS19TRUNVUkUsIGN0cmwpKSB7CisrCQlpbnQgcmV0dmFsMjsKKysJCWNvbnN0IHZvaWQgKnV0dHluYW1lOworKwkJcmV0dmFsMiA9IHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fVFRZLCAmdXR0eW5hbWUpOworKwkJaWYgKHJldHZhbDIgIT0gUEFNX1NVQ0NFU1MgfHwgdXR0eW5hbWUgPT0gTlVMTCkKKysJCQlyZXR1cm4gMDsKKysKKysJCWlmIChfcGFtbW9kdXRpbF90dHlfc2VjdXJlKHBhbWgsIChjb25zdCBjaGFyICopdXR0eW5hbWUpICE9IFBBTV9TVUNDRVNTKQorKwkJCXJldHVybiAwOworKwl9CisrCisgCS8qIFVOSVggcGFzc3dvcmRzIGFyZWEgKi8KKyAKKyAJcmV0dmFsID0gZ2V0X3B3ZF9oYXNoKHBhbWgsIG5hbWUsICZwd2QsICZzYWx0KTsKK0BAIC03NjQsNyArNzk0LDcgQEAgaW50IF91bml4X3ZlcmlmeV9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oLCBjb25zdCBjaGFyICpuYW1lCisgCQkJfQorIAkJfQorIAl9IGVsc2UgeworLQkJcmV0dmFsID0gdmVyaWZ5X3B3ZF9oYXNoKHAsIHNhbHQsIG9mZihVTklYX19OT05VTEwsIGN0cmwpKTsKKysJCXJldHZhbCA9IHZlcmlmeV9wd2RfaGFzaChwLCBzYWx0LCBfdW5peF9ibGFua3Bhc3N3ZChwYW1oLCBjdHJsLCBuYW1lKSk7CisgCX0KKyAKKyAJaWYgKHJldHZhbCA9PSBQQU1fU1VDQ0VTUykgeworZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKK2luZGV4IDM3MjljZTAuLjQzY2RiZWEgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaAorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKK0BAIC05OSw4ICs5OSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAjZGVmaW5lIFVOSVhfTUlOX1BBU1NfTEVOICAgICAgICAyNwkvKiBtaW4gbGVuZ3RoIGZvciBwYXNzd29yZCAqLworICNkZWZpbmUgVU5JWF9RVUlFVAkJIDI4CS8qIERvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKi8KKyAjZGVmaW5lIFVOSVhfREVTICAgICAgICAgICAgICAgICAyOSAgICAgLyogREVTLCBkZWZhdWx0ICovCisrI2RlZmluZSBVTklYX05VTExPS19TRUNVUkUgICAgICAgMzAgICAgIC8qIE5VTEwgcGFzc3dvcmRzIGFsbG93ZWQgb25seSBvbiBzZWN1cmUgdHR5cyAqLworIC8qIC0tLS0tLS0tLS0tLS0tICovCistI2RlZmluZSBVTklYX0NUUkxTXyAgICAgICAgICAgICAgMzAJLyogbnVtYmVyIG9mIGN0cmwgYXJndW1lbnRzIGRlZmluZWQgKi8KKysjZGVmaW5lIFVOSVhfQ1RSTFNfICAgICAgICAgICAgICAzMQkvKiBudW1iZXIgb2YgY3RybCBhcmd1bWVudHMgZGVmaW5lZCAqLworIAorICNkZWZpbmUgVU5JWF9ERVNfQ1JZUFQoY3RybCkJKG9mZihVTklYX01ENV9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CSUdDUllQVCxjdHJsKSYmb2ZmKFVOSVhfU0hBMjU2X1BBU1MsY3RybCkmJm9mZihVTklYX1NIQTUxMl9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CTE9XRklTSF9QQVNTLGN0cmwpKQorIAorQEAgLTExOCw3ICsxMTksNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KKyAvKiBVTklYX05PVF9TRVRfUEFTUyAqLyAgICB7Im5vdF9zZXRfcGFzcyIsICAgIF9BTExfT05fLCAgICAgICAgICAgICAgICAwMTAwLCAwfSwKKyAvKiBVTklYX19QUkVMSU0gKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwMjAwLCAwfSwKKyAvKiBVTklYX19VUERBVEUgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwNDAwLCAwfSwKKy0vKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDAxMDAwLCAwfSwKKysvKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwMjAwMDAwMDAwMCksICAgMDEwMDAsIDB9LAorIC8qIFVOSVhfX1FVSUVUICovICAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDIwMDAsIDB9LAorIC8qIFVOSVhfVVNFX0FVVEhUT0sgKi8gICAgIHsidXNlX2F1dGh0b2siLCAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDQwMDAsIDB9LAorIC8qIFVOSVhfU0hBRE9XICovICAgICAgICAgIHsic2hhZG93IiwgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAwMTAwMDAsIDB9LAorQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KKyAvKiBVTklYX01JTl9QQVNTX0xFTiAqLyAgICB7Im1pbmxlbj0iLAkJX0FMTF9PTl8sICAgICAgICAgMDQwMDAwMDAwMCwgMH0sCisgLyogVU5JWF9RVUlFVCAqLyAgICAgICAgICAgeyJxdWlldCIsICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAwMTAwMDAwMDAwMCwgMH0sCisgLyogVU5JWF9ERVMgKi8gICAgICAgICAgICAgeyJkZXMiLCAgICAgICAgICAgICBfQUxMX09OX14oMDI2MDQyMDAwMCksICAgICAgMCwgMX0sCisrLyogVU5JWF9OVUxMT0tfU0VDVVJFICovICAgeyJudWxsb2tfc2VjdXJlIiwgICBfQUxMX09OX14oMDEwMDApLCAgMDIwMDAwMDAwMDAsIDB9LAorIH07CisgCisgI2RlZmluZSBVTklYX0RFRkFVTFRTICAodW5peF9hcmdzW1VOSVhfX05PTlVMTF0uZmxhZykKK0BAIC0xNzEsNiArMTczLDggQEAgZXh0ZXJuIGludCBfdW5peF9yZWFkX3Bhc3N3b3JkKHBhbV9oYW5kbGVfdCAqIHBhbWgKKyAJCQksY29uc3QgY2hhciAqcHJvbXB0MgorIAkJCSxjb25zdCBjaGFyICpkYXRhX25hbWUKKyAJCQksY29uc3Qgdm9pZCAqKnBhc3MpOworK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsCisrICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworIAorIGV4dGVybiBpbnQgX3VuaXhfcnVuX3ZlcmlmeV9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLAorIAkJCXVuc2lnbmVkIGludCBjdHJsLCBjb25zdCBjaGFyICp1c2VyLCBpbnQgKmRheXNsZWZ0KTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYWNjb3VudCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2YjE3MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQKQEAgLTAsMCArMSwyNSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1hY2NvdW50IC0gYXV0aG9yaXphdGlvbiBzZXR0aW5ncyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiB0aGUgYXV0aG9yaXphdGlvbiBtb2R1bGVzIHRoYXQgZGVmaW5lCisjIHRoZSBjZW50cmFsIGFjY2VzcyBwb2xpY3kgZm9yIHVzZSBvbiB0aGUgc3lzdGVtLiAgVGhlIGRlZmF1bHQgaXMgdG8KKyMgb25seSBkZW55IHNlcnZpY2UgdG8gdXNlcnMgd2hvc2UgYWNjb3VudHMgYXJlIGV4cGlyZWQgaW4gL2V0Yy9zaGFkb3cuCisjCisjIEFzIG9mIHBhbSAxLjAuMS02LCB0aGlzIGZpbGUgaXMgbWFuYWdlZCBieSBwYW0tYXV0aC11cGRhdGUgYnkgZGVmYXVsdC4KKyMgVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29uZmlndXJlIGFueQorIyBsb2NhbCBtb2R1bGVzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGRlZmF1bHQgYmxvY2ssIGFuZCB1c2UKKyMgcGFtLWF1dGgtdXBkYXRlIHRvIG1hbmFnZSBzZWxlY3Rpb24gb2Ygb3RoZXIgbW9kdWxlcy4gIFNlZQorIyBwYW0tYXV0aC11cGRhdGUoOCkgZm9yIGRldGFpbHMuCisjCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCithY2NvdW50CVtzdWNjZXNzPTEgbmV3X2F1dGh0b2tfcmVxZD1kb25lIGRlZmF1bHQ9aWdub3JlXQlwYW1fdW5peC5zbyAKKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK2FjY291bnQJcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCithY2NvdW50CXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorIyBlbmQgb2YgcGFtLWF1dGgtdXBkYXRlIGNvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYXV0aCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYwYjY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGgKQEAgLTAsMCArMSwxOCBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1hdXRoIC0gYXV0aGVudGljYXRpb24gc2V0dGluZ3MgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMgdGhhdCBkZWZpbmUKKyMgdGhlIGNlbnRyYWwgYXV0aGVudGljYXRpb24gc2NoZW1lIGZvciB1c2Ugb24gdGhlIHN5c3RlbQorIyAoZS5nLiwgL2V0Yy9zaGFkb3csIExEQVAsIEtlcmJlcm9zLCBldGMuKS4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUKKyMgdHJhZGl0aW9uYWwgVW5peCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLgorCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorYXV0aAlbc3VjY2Vzcz0xIGRlZmF1bHQ9aWdub3JlXQlwYW1fdW5peC5zbyBudWxsb2tfc2VjdXJlCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCithdXRoCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorYXV0aAlyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tcGFzc3dvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5NjA1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tcGFzc3dvcmQgLSBwYXNzd29yZC1yZWxhdGVkIG1vZHVsZXMgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGRlZmluZSB0aGUgc2VydmljZXMgdG8gYmUKKyMgdXNlZCB0byBjaGFuZ2UgdXNlciBwYXNzd29yZHMuICBUaGUgZGVmYXVsdCBpcyBwYW1fdW5peC4KKworIyBFeHBsYW5hdGlvbiBvZiBwYW1fdW5peCBvcHRpb25zOgorIworIyBUaGUgInNoYTUxMiIgb3B0aW9uIGVuYWJsZXMgc2FsdGVkIFNIQTUxMiBwYXNzd29yZHMuICBXaXRob3V0IHRoaXMgb3B0aW9uLAorIyB0aGUgZGVmYXVsdCBpcyBVbml4IGNyeXB0LiAgUHJpb3IgcmVsZWFzZXMgdXNlZCB0aGUgb3B0aW9uICJtZDUiLgorIworIyBUaGUgIm9ic2N1cmUiIG9wdGlvbiByZXBsYWNlcyB0aGUgb2xkIGBPQlNDVVJFX0NIRUNLU19FTkFCJyBvcHRpb24gaW4KKyMgbG9naW4uZGVmcy4KKyMKKyMgU2VlIHRoZSBwYW1fdW5peCBtYW5wYWdlIGZvciBvdGhlciBvcHRpb25zLgorCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorcGFzc3dvcmQJW3N1Y2Nlc3M9MSBkZWZhdWx0PWlnbm9yZV0JcGFtX3VuaXguc28gb2JzY3VyZSBzaGE1MTIKKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Bhc3N3b3JkCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorcGFzc3dvcmQJcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGE1NTFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbgpAQCAtMCwwICsxLDE5IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLXNlc3Npb24gLSBzZXNzaW9uLXJlbGF0ZWQgbW9kdWxlcyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBtb2R1bGVzIHRoYXQgZGVmaW5lIHRhc2tzIHRvIGJlIHBlcmZvcm1lZAorIyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBzZXNzaW9ucyBvZiAqYW55KiBraW5kIChib3RoIGludGVyYWN0aXZlIGFuZAorIyBub24taW50ZXJhY3RpdmUpLgorIworCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorc2Vzc2lvbglbZGVmYXVsdD0xXQkJCXBhbV9wZXJtaXQuc28KKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Nlc3Npb24JcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCitzZXNzaW9uCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorc2Vzc2lvbglyZXF1aXJlZAlwYW1fdW5peC5zbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExMGJiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKQEAgLTAsMCArMSwxOSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIC0gc2Vzc2lvbi1yZWxhdGVkIG1vZHVsZXMKKyMgY29tbW9uIHRvIGFsbCBub24taW50ZXJhY3RpdmUgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBkZWZpbmUgdGFza3MgdG8gYmUgcGVyZm9ybWVkCisjIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGFsbCBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMuCisjCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCitzZXNzaW9uCVtkZWZhdWx0PTFdCQkJcGFtX3Blcm1pdC5zbworIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworc2Vzc2lvbglyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK3Nlc3Npb24JcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCitzZXNzaW9uCXJlcXVpcmVkCXBhbV91bml4LnNvIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9vdGhlciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5NzBlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIKQEAgLTAsMCArMSwyNCBAQAorIworIyAvZXRjL3BhbS5kL290aGVyIC0gc3BlY2lmeSB0aGUgUEFNIGZhbGxiYWNrIGJlaGF2aW91cgorIworIyBOb3RlIHRoYXQgdGhpcyBmaWxlIGlzIHVzZWQgZm9yIGFueSB1bnNwZWNpZmllZCBzZXJ2aWNlOyBmb3IgZXhhbXBsZQorI2lmIC9ldGMvcGFtLmQvY3JvbiAgc3BlY2lmaWVzIG5vIHNlc3Npb24gbW9kdWxlcyBidXQgY3JvbiBjYWxscworI3BhbV9vcGVuX3Nlc3Npb24sIHRoZSBzZXNzaW9uIG1vZHVsZSBvdXQgb2YgL2V0Yy9wYW0uZC9vdGhlciBpcworI3VzZWQuICAKKworIyBXZSB1c2UgcGFtX3dhcm4uc28gdG8gZ2VuZXJhdGUgc3lzbG9nIG5vdGVzIHRoYXQgdGhlICdvdGhlcicKKyNmYWxsYmFjayBydWxlcyBhcmUgYmVpbmcgdXNlZCAoYXMgYSBoaW50IHRvIHN1Z2dlc3QgeW91IHNob3VsZCBzZXR1cAorI3NwZWNpZmljIFBBTSBydWxlcyBmb3IgdGhlIHNlcnZpY2UgYW5kIGFpZCB0byBkZWJ1Z2dpbmcpLiBUaGVuIHRvIGJlCisjc2VjdXJlLCBkZW55IGFjY2VzcyB0byBhbGwgc2VydmljZXMgYnkgZGVmYXVsdC4gCisKK2F1dGggICAgICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCithdXRoICAgICAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbworCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworYWNjb3VudCAgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KKworcGFzc3dvcmQgICByZXF1aXJlZCAgICAgcGFtX3dhcm4uc28KK3Bhc3N3b3JkICAgcmVxdWlyZWQgICAgIHBhbV9kZW55LnNvCisKK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzMDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIKQEAgLTAsMCArMSwxNjkgQEAKK1NVTU1BUlkgPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcykiCitERVNDUklQVElPTiA9ICJMaW51eC1QQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzIGZvciBMaW51eCksIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBhdXRoZW50aWNhdGluZyB1c2VycyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saW51eC1wYW0vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtL25ld3RpY2tldCIKK1NFQ1RJT04gPSAiYmFzZSIKKyMgUEFNIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBCU0QuCisjIC9ldGMvcGFtLmQgY29tZXMgZnJvbSBEZWJpYW4gbGlicGFtLXJ1bnRpbWUgaW4gMjAwOS0xMSAoYXQgdGhhdCB0aW1lCisjIGxpYnBhbS1ydW50aW1lLTEuMC4xIGlzIEdQTHYyKyksIGJ5IG9wZW5lbWJlZGRlZAorTElDRU5TRSA9ICJHUEx2MisgfCBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZWI1YzFiZjg1NGU4ODgxMDA1ZDY3MzU5OWVlNzRkMyIKKworU1JDX1VSSSA9ICJodHRwOi8vbGludXgtcGFtLm9yZy9saWJyYXJ5L0xpbnV4LVBBTS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3BhbSBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYWNjb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYXV0aCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tcGFzc3dvcmQgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24gXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvb3RoZXIgXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWRjNTMwNjc1NTZkMmRkNTY3ODA4ZmQ1MDk1MTlkZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzQyYjEyMTFjMGQzYjIwM2E3ZGYyNTQwYTViMDNhNDI4YTA4N2JkOGE0OGMxN2U0OWFlMjY4Zjk5MmIzMzRkOSIKKworU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly9wYW0tbm8taW5uZXRnci5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL3BhbS1uby1pbm5ldGdyLnBhdGNoIgorCitERVBFTkRTID0gImJpc29uIGZsZXggZmxleC1uYXRpdmUgY3JhY2tsaWIiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZGItdW5pcXVlbmFtZT1fcGFtIFwKKyAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9zZWN1cml0eSBcCisgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uaXMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZWdlbmVyYXRlLWRvY3UgXAorCQktLWRpc2FibGUtcHJlbHVkZSIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorCitQUiA9ICJyNSIKKworUyA9ICIke1dPUktESVJ9L0xpbnV4LVBBTS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0LCIKKworUEFDS0FHRVMgKz0gIiR7UE59LXJ1bnRpbWUgJHtQTn0teHRlc3RzIgorRklMRVNfJHtQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlci8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L0xpbnV4LVBBTS94dGVzdHMvLmRlYnVnIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSAke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tcnVudGltZSA9ICIke3N5c2NvbmZkaXJ9IgorRklMRVNfJHtQTn0teHRlc3RzID0gIiR7ZGF0YWRpcn0vTGludXgtUEFNL3h0ZXN0cyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7TUxQUkVGSVh9cGFtLXBsdWdpbi0uKiIKKworZGVmIGdldF9tdWx0aWxpYl9iaXQoZCk6CisgICAgYmFzZWxpYiA9IGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkgb3IgJycKKyAgICByZXR1cm4gYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKworbGlicGFtX3N1ZmZpeCA9ICJzdWZmaXgke0BnZXRfbXVsdGlsaWJfYml0KGQpfSIKKworUlBST1ZJREVTXyR7UE59ICs9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IgorUlBST1ZJREVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7UE59LXJ1bnRpbWUtJHtsaWJwYW1fc3VmZml4fSIKKworUkRFUEVORFNfJHtQTn0tcnVudGltZSA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tZGVueS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcGVybWl0LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi13YXJuLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi11bml4LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICIKK1JERVBFTkRTXyR7UE59LXh0ZXN0cyA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tYWNjZXNzLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZWJ1Zy0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tY3JhY2tsaWItJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXB3aGlzdG9yeS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tc3VjY2VlZC1pZi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tdGltZS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICBjb3JldXRpbHMiCisKKyMgRklYTUU6IE5hdGl2ZSBzdWZmaXggYnJlYWtzIGhlcmUsIGRpc2FibGUgaXQgZm9yIG5vdworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGRlZiBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKHBuLCBkaXIsIGZpbGUpOgorICAgICAgICBuZiA9IG9zLnBhdGguam9pbihkaXIsIGZpbGUpCisgICAgICAgIG9mID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgb2Y6CisgICAgICAgICAgICBuZiA9IG9mICsgIiAiICsgbmYKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwbiwgbmYpCisKKyAgICBkZWYgcGFtX3BsdWdpbl9ob29rKGZpbGUsIHBrZywgcGF0dGVybiwgZm9ybWF0LCBiYXNlbmFtZSk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgbGlicGFtX3N1ZmZpeCA9IGQuZ2V0VmFyKCdsaWJwYW1fc3VmZml4JywgVHJ1ZSkKKworICAgICAgICByZGVwcyA9IGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiByZGVwczoKKyAgICAgICAgICAgIHJkZXBzID0gcmRlcHMgKyAiICIgKyBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJkZXBzID0gcG4gKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCByZGVwcykKKworICAgICAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcHJvdmlkZXM6CisgICAgICAgICAgICBwcm92aWRlcyA9IHByb3ZpZGVzICsgIiAiICsgcGtnICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvdmlkZXMgPSBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgcHJvdmlkZXMpCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgZHZhciA9IGJiLmRhdGEuZXhwYW5kKCcke1dPUktESVJ9L3BhY2thZ2UnLCBkLCBUcnVlKQorICAgIHBhbV9saWJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHknKQorICAgIHBhbV9zYmluZGlyID0gZC5leHBhbmQoJyR7c2JpbmRpcn0nKQorICAgIHBhbV9maWx0ZXJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlcicpCisgICAgcGFtX3BrZ25hbWUgPSBtbHByZWZpeCArICdwYW0tcGx1Z2luJXMnCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwYW1fbGliZGlyLCAnXnBhbSguKilcLnNvJCcsIHBhbV9wa2duYW1lLAorICAgICAgICAgICAgICAgICAgICAgICdQQU0gcGx1Z2luIGZvciAlcycsIGhvb2s9cGFtX3BsdWdpbl9ob29rLCBleHRyYV9kZXBlbmRzPScnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfY2hrcHdkJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdW5peCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICd1bml4X3VwZGF0ZScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5MicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGFsbHkyJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGltZXN0YW1wJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90aW1lc3RhbXBfY2hlY2snKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi1ta2hvbWVkaXInICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAnbWtob21lZGlyX2hlbHBlcicpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLWNvbnNvbGUnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX2NvbnNvbGVfYXBwbHknKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9maWx0ZXJkaXIsICdeKC4qKSQnLCAncGFtLWZpbHRlci0lcycsICdQQU0gZmlsdGVyIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL3J1biB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3BhbSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wYW0uZC8qICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCisJIyBUaGUgbHNiIHJlcXVpcmVzIHVuaXhfY2hrcHdkIGhhcyBzZXR1aWQgcGVybWlzc2lvbgorCWNobW9kIDQ3NTUgJHtEfSR7c2JpbmRpcn0vdW5peF9jaGtwd2QKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJZWNobyAic2Vzc2lvbiBvcHRpb25hbCBwYW1fc3lzdGVtZC5zbyIgPj4gJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24KKwlmaQorfQorCitweXRob24gZG9fcGFtX3Nhbml0eSAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBiYi53YXJuKCJCdWlsZGluZyBsaWJwYW0gYnV0ICdwYW0nIGlzbid0IGluIERJU1RST19GRUFUVVJFUywgUEFNIHdvbid0IHdvcmsgY29ycmVjdGx5IikKK30KK2FkZHRhc2sgcGFtX3Nhbml0eSBiZWZvcmUgZG9fY29uZmlndXJlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIG5hdGl2ZSIKKworQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24iCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYXV0aCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1wYXNzd29yZCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLWFjY291bnQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDM3NmNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGQ3OGRkMDg3YzRlYzQ3MTVhYWI1ZmUxMTU2NjhlNzI2MDQ2ZWNkNzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxODoxNjowNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIGZjbnRsLmggaW4gL3BsYXRmb3JtX2RlZnMuaAorCitleHBvc2VkIHdoZW4gY29tcGlsaW5nIHVzaW5nIG11c2wKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmggYi9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAoraW5kZXggMmI1NTc1Mi4uMzJiZDNkMyAxMDA2NDQKKy0tLSBhL2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oCisrKysgYi9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAorQEAgLTQyLDYgKzQyLDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvTWFrZWZpbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5MGJlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDI4NSBAQAorYW1fX3R0eV9jb2xvcnNfZHVtbXkgPSBcCisgIG1nbj0gcmVkPSBncm49IGxnbj0gYmx1PSBicmc9IHN0ZD07IFwKKyAgYW1fX2NvbG9yX3Rlc3RzPW5vCisKK2FtX190dHlfY29sb3JzID0gXAorJChhbV9fdHR5X2NvbG9yc19kdW1teSk7IFwKK3Rlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgIT0gWG5vIFwKKyYmIHRlc3QgIlgkJFRFUk0iICE9IFhkdW1iIFwKKyYmIHsgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhhbHdheXMgfHwgdGVzdCAtdCAxIDI+L2Rldi9udWxsOyB9IFwKKyYmIHsgXAorICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCisgIHJlZD0nG1swOzMxbSc7IFwKKyAgZ3JuPScbWzA7MzJtJzsgXAorICBsZ249JxtbMTszMm0nOyBcCisgIGJsdT0nG1sxOzM0bSc7IFwKKyAgbWduPScbWzA7MzVtJzsgXAorICBicmc9JxtbMW0nOyBcCisgIHN0ZD0nG1ttJzsgXAorfQorCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19yc3RfdGl0bGUgPSB7IHNlZCAncy8uKi8gICAmICAgLztoO3MvLi89L2c7cDt4O3MvICokJC8vO3A7ZycgJiYgZWNobzsgfQorYW1fX3JzdF9zZWN0aW9uID0geyBzZWQgJ3A7cy8uLz0vZzsnICYmIGVjaG87IH0KK2FtX19zaF9lX3NldHVwID0gY2FzZSAkJC0gaW4gKmUqKSBzZXQgK2U7OyBlc2FjCisKK2FtX19jb21tb25fZHJpdmVyX2ZsYWdzID0gXAorICAtLWNvbG9yLXRlc3RzICIkJGFtX19jb2xvcl90ZXN0cyIgXAorICAtLWVuYWJsZS1oYXJkLWVycm9ycyAiJCRhbV9fZW5hYmxlX2hhcmRfZXJyb3JzIiBcCisgIC0tZXhwZWN0LWZhaWx1cmUgIiQkYW1fX2V4cGVjdF9mYWlsdXJlIgorYW1fX2NoZWNrX3ByZSA9IFwKKyQoYW1fX3NoX2Vfc2V0dXApOwkJCQkJXAorJChhbV9fdnBhdGhfYWRqX3NldHVwKSAkKGFtX192cGF0aF9hZGopCQkJXAorJChhbV9fdHR5X2NvbG9ycyk7CQkJCQlcCitzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOwkJCVwKK2FtX19vZGlyPWBlY2hvICIuLyRAIiB8IHNlZCAnc3wvW14vXSokJHx8J2A7CQlcCit0ZXN0ICJ4JCRhbV9fb2RpciIgPSB4LiB8fCAkKE1LRElSX1ApICIkJGFtX19vZGlyIiB8fCBleGl0ICQkPzsJXAoraWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsJCQlcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsJCQkJXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsJCQkJXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgCQkJCVwKK2lmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuCQlcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IAkJCQlcCitlbHNlCQkJCQkJCVwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IAkJCQlcCitmaTsgCQkJCQkJCVwKKyQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpICQoVEVTVFNfRU5WSVJPTk1FTlQpCisKK2FtX19zZXRfVEVTVFNfYmFzZXMgPSBcCisgIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCisgIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICBiYXNlcz1gZWNobyAkJGJhc2VzYAorCitSRUNIRUNLX0xPR1MgPSAkKFRFU1RfTE9HUykKK1RFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKK2FtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKK2FtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMToubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi5zaC5sb2c9LmxvZykKK1NIX0xPR19EUklWRVIgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC90ZXN0LWRyaXZlcgorU0hfTE9HX0NPTVBJTEUgPSAkKFNIX0xPR19DT01QSUxFUikKKworYW1fX3NldF9iID0gXAorICBjYXNlICckQCcgaW4gXAorICAgICovKikgXAorICAgICAgY2FzZSAnJConIGluIFwKKyAgICAgICAgKi8qKSBiPSckKic7OyBcCisgICAgICAgICAgKikgYj1gZWNobyAnJEAnIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCisgICAgICAgZXNhYzs7IFwKKyAgICAqKSBcCisgICAgICBiPSckKic7OyBcCisgIGVzYWMKKworTUtESVJfUCA9IC9iaW4vbWtkaXIgLXAKK1NIRUxMID0gL2Jpbi9iYXNoCitWRVJTSU9OID0gMy4xCitQQUNLQUdFX1NUUklORyA9IEdOVSBwYXJ0ZWQgMy4xCitQQUNLQUdFX0JVR1JFUE9SVCA9IGJ1Zy1wYXJ0ZWRAZ251Lm9yZworYWJzX3NyY2RpciA9ICQoUFdEKQorYWJzX3RvcF9idWlsZGRpciA9ICQoUFdEKS8uLgorYWJzX3RvcF9zcmNkaXIgPSAkKFBXRCkvLi4KK3NyY2RpciA9IC4KK3RvcF9zcmNkaXIgPSAuLgorc3ViZGlyID0gdGVzdHMKK1NIX0xPR19DT01QSUxFUiA9ICQoU0hFTEwpCisKK1RFU1RTID0gXAorICBoZWxwLXZlcnNpb24uc2ggXAorICB0MDAwMC1iYXNpYy5zaCBcCisgIHQwMDAxLXRpbnkuc2ggXAorICB0MDAxMC1zY3JpcHQtbm8tY3RybC1jaGFycy5zaCBcCisgIHQwMTAwLXByaW50LnNoIFwKKyAgdDAxMDEtcHJpbnQtZW1wdHkuc2ggXAorICB0MDIwMC1ncHQuc2ggXAorICB0MDIwMS1ncHQuc2ggXAorICB0MDIwMi1ncHQtcG1ici5zaCBcCisgIHQwMjAzLWdwdC10aW55LWRldmljZS1hYm9ydC5zaCBcCisgIHQwMjAzLWdwdC1zaG9ydGVuZWQtZGV2aWNlLXByaW1hcnktdmFsaWQuc2ggXAorICB0MDIwNS1ncHQtbGlzdC1jbG9iYmVycy1wbWJyLnNoIFwKKyAgdDAyMDYtZ3B0LXByaW50LXdpdGgtY29ycnVwdC1wcmltYXJ5LWNsb2JiZXJzLXBtYnIuc2ggXAorICB0MDIwNy1JRUMtYmluYXJ5LW5vdGF0aW9uLnNoIFwKKyAgdDAyMDgtbWtwYXJ0LWVuZC1pbi1JRUMuc2ggXAorICB0MDIwOS1ncHQtcG1icl9ib290LnNoIFwKKyAgdDAyMTAtZ3B0LXJlc2l6ZWQtcGFydGl0aW9uLWVudHJ5LWFycmF5LnNoIFwKKyAgdDAyMTEtZ3B0LXJld3JpdGUtaGVhZGVyLnNoIFwKKyAgdDAyMTItZ3B0LW1hbnktcGFydGl0aW9ucy5zaCBcCisgIHQwMjIwLWdwdC1tc2Z0cmVzLnNoIFwKKyAgdDAyNTAtZ3B0LnNoIFwKKyAgdDAyODAtZ3B0LWNvcnJ1cHQuc2ggXAorICB0MDMwMC1kb3Mtb24tZ3B0LnNoIFwKKyAgdDA0MDAtbG9vcC1jbG9iYmVyLWluZmxvb3Auc2ggXAorICB0MDUwMC1kdXAtY2xvYmJlci5zaCBcCisgIHQwNTAxLWR1cGxpY2F0ZS5zaCBcCisgIHQxMTAwLWJ1c3ktbGFiZWwuc2ggXAorICB0MTEwMS1idXN5LXBhcnRpdGlvbi5zaCBcCisgIHQxNzAwLXByb2JlLWZzLnNoIFwKKyAgdDIyMDAtZG9zLWxhYmVsLXJlY29nLnNoIFwKKyAgdDIyMDEtcGM5OC1sYWJlbC1yZWNvZy5zaCBcCisgIHQyMzAwLWRvcy1sYWJlbC1leHRlbmRlZC1ib290Y29kZS5zaCBcCisgIHQyMzEwLWRvcy1leHRlbmRlZC0yLXNlY3Rvci1taW4tb2Zmc2V0LnNoIFwKKyAgdDI0MDAtZG9zLWhmcy1wYXJ0aXRpb24tdHlwZS5zaCBcCisgIHQyNTAwLXByb2JlLWNvcnJ1cHQtaGZzLnNoIFwKKyAgdDMwMDAtcmVzaXplLWZzLnNoIFwKKyAgdDMyMDAtdHlwZS1jaGFuZ2Uuc2ggXAorICB0MzMwMC1wYWxvLXByZXAuc2ggXAorICB0MzMxMC1mbGFncy5zaCBcCisgIHQzNDAwLXdob2xlLWRpc2stRkFULXBhcnRpdGlvbi5zaCBcCisgIHQ0MDAwLXN1bi1yYWlkLXR5cGUuc2ggXAorICB0NDAwMS1zdW4tdnRvYy5zaCBcCisgIHQ0MTAwLW1zZG9zLXBhcnRpdGlvbi1saW1pdHMuc2ggXAorICB0NDEwMC1kdmgtcGFydGl0aW9uLWxpbWl0cy5zaCBcCisgIHQ0MTAwLW1zZG9zLXN0YXJ0aW5nLXNlY3Rvci5zaCBcCisgIHQ0MjAwLXBhcnRwcm9iZS5zaCBcCisgIHQ0MzAwLW5pbGZzMi10aW55LnNoIFwKKyAgdDUwMDAtdGFncy5zaCBcCisgIHQ2MDAwLWRtLnNoIFwKKyAgdDYwMDEtcHNlcC5zaCBcCisgIHQ2MTAwLW1kcmFpZC1wYXJ0aXRpb25zLnNoIFwKKyAgdDcwMDAtc2NyaXB0aW5nLnNoIFwKKyAgdDgwMDAtbG9vcC5zaCBcCisgIHQ4MDAxLWxvb3AtYmxrcGcuc2ggXAorICB0OTAxMC1iaWctc2VjdG9yLnNoIFwKKyAgdDkwMjAtYWxpZ25tZW50LnNoIFwKKyAgdDkwMjEtbWF4aW1hLnNoIFwKKyAgdDkwMjItb25lLXVuaXQtc25hcC5zaCBcCisgIHQ5MDIzLXZhbHVlLWx0LW9uZS5zaCBcCisgIHQ5MDMwLWFsaWduLWNoZWNrLnNoIFwKKyAgdDkwNDAtbWFueS1wYXJ0aXRpb25zLnNoIFwKKyAgdDkwNDEtdW5kZXRlY3RlZC1pbi11c2UtMTZ0aC1wYXJ0aXRpb24uc2ggXAorICB0OTA0Mi1kb3MtcGFydGl0aW9uLWxpbWl0LnNoIFwKKyAgdDkwNTAtcGFydGl0aW9uLXRhYmxlLXR5cGVzLnNoCisKK1RFU1RTX0VOVklST05NRU5UID0gXAorICBleHBvcnQJCQkJCVwKKyAgYWJzX3RvcF9idWlsZGRpcj0nJChhYnNfdG9wX2J1aWxkZGlyKScJXAorICBhYnNfdG9wX3NyY2Rpcj0nJChhYnNfdG9wX3NyY2RpciknCQlcCisgIGFic19zcmNkaXI9JyQoYWJzX3NyY2RpciknCQkJXAorICBidWlsdF9wcm9ncmFtcz1wYXJ0ZWQJCQkJXAorICBzcmNkaXI9JyQoc3JjZGlyKScJCQkJXAorICB0b3Bfc3JjZGlyPSckKHRvcF9zcmNkaXIpJwkJCVwKKyAgVkVSU0lPTj0kKFZFUlNJT04pCQkJCVwKKyAgOyA5PiYyCisKKy5TVUZGSVhFUzogLmxvZworCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NoX2Vfc2V0dXApOyAkKGFtX190dHlfY29sb3JzKTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCXdzPSdbIAldJzsgXAorCXJlc3VsdHM9YGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiLnRyczsgZG9uZWA7IFwKKwl0ZXN0IC1uICIkJHJlc3VsdHMiIHx8IHJlc3VsdHM9L2Rldi9udWxsOyBcCisJYWxsPWAgIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDoiICAgICAgICAgICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlwYXNzPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqUEFTUyIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWZhaWw9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypGQUlMIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJc2tpcD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlNLSVAiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4ZmFpbD1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWEZBSUwiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhwYXNzPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYUEFTUyIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZXJyb3I9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkVSUk9SIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlpZiB0ZXN0IGBleHByICQkZmFpbCArICQkeHBhc3MgKyAkJGVycm9yYCAtZXEgMDsgdGhlbiBcCisJICBzdWNjZXNzPXRydWU7IFwKKwllbHNlIFwKKwkgIHN1Y2Nlc3M9ZmFsc2U7IFwKKwlmaTsgXAorCWJyPSc9PT09PT09PT09PT09PT09PT09JzsgYnI9JCRiciQkYnIkJGJyJCRicjsgXAorCXJlc3VsdF9jb3VudCAoKSBcCisJeyBcCisJICAgIGlmIHRlc3QgeCIkJDEiID0geCItLW1heWJlLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9eWVzOyBcCisJICAgIGVsaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbm8tY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT1ubzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICIkQDogaW52YWxpZCAncmVzdWx0X2NvdW50JyB1c2FnZSIgPiYyOyBleGl0IDQ7IFwKKwkgICAgZmk7IFwKKwkgICAgc2hpZnQ7IFwKKwkgICAgZGVzYz0kJDEgY291bnQ9JCQyOyBcCisJICAgIGlmIHRlc3QgJCRtYXliZV9jb2xvcml6ZSA9IHllcyAmJiB0ZXN0ICQkY291bnQgLWd0IDA7IHRoZW4gXAorCSAgICAgIGNvbG9yX3N0YXJ0PSQkMyBjb2xvcl9lbmQ9JCRzdGQ7IFwKKwkgICAgZWxzZSBcCisJICAgICAgY29sb3Jfc3RhcnQ9IGNvbG9yX2VuZD07IFwKKwkgICAgZmk7IFwKKwkgICAgZWNobyAiJCR7Y29sb3Jfc3RhcnR9IyAkJGRlc2MgJCRjb3VudCQke2NvbG9yX2VuZH0iOyBcCisJfTsgXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0ICgpIFwKKwl7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlRPVEFMOiIgJCRhbGwgICAiJCRicmciOyBcCisJICByZXN1bHRfY291bnQgJCQxICJQQVNTOiAiICQkcGFzcyAgIiQkZ3JuIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiU0tJUDogIiAkJHNraXAgICIkJGJsdSI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhGQUlMOiIgJCR4ZmFpbCAiJCRsZ24iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJGQUlMOiAiICQkZmFpbCAgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWFBBU1M6IiAkJHhwYXNzICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkVSUk9SOiIgJCRlcnJvciAiJCRtZ24iOyBcCisJfTsgXAorCXsJCQkJCQkJCVwKKwkgIGVjaG8gIiQoUEFDS0FHRV9TVFJJTkcpOiAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykiIHwJXAorCSAgICAkKGFtX19yc3RfdGl0bGUpOwkJCQkJCVwKKwkgIGNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbm8tY29sb3I7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBlY2hvICIuLiBjb250ZW50czo6IDpkZXB0aDogMiI7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBmb3IgaSBpbiAkJGJhc2VzOyBkbwkJCQkJCVwKKwkgICAgaWYgZ3JlcCAiXiQkd3MqOmNvcHktaW4tZ2xvYmFsLWxvZzokJHdzKm5vJCR3cyokJCIgJCRpLnRycyBcCisJICAgICAgICAgPi9kZXYvbnVsbDsgdGhlbiBjb250aW51ZTsgXAorCSAgICBmaTsgXAorCSAgICBnbG9iX3Jlcz1gc2VkIC1uIC1lICJzLyQkd3MqJCQvLyIgXAorCSAgICAgICAgICAgICAgICAgICAgIC1lICJzL14kJHdzKjpnbG9iYWwtdGVzdC1yZXN1bHQ6JCR3cyovL3AiIFwKKwkJICAgICAgICAkJGkudHJzYDsgXAorCSAgICB0ZXN0IC1uICIkJGdsb2JfcmVzIiB8fCBnbG9iX3Jlcz1SVU47IFwKKwkgICAgZWNobyAiJCRnbG9iX3JlczogJCRpIiB8ICQoYW1fX3JzdF9zZWN0aW9uKTsgXAorCSAgICBpZiB0ZXN0ICEgLXIgJCRpLmxvZzsgdGhlbiBcCisJICAgICAgZWNobyAiZmF0YWw6IG1ha2luZyAkQDogJCRpLmxvZyBpcyB1bnJlYWRhYmxlIiA+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY2F0ICQkaS5sb2c7IGVjaG87IFwKKwkgIGRvbmU7CVwKKwl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXA7CQkJCQlcCisJbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCisJICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAorCSBlbHNlCQkJCQkJCQlcCisJICBjb2w9IiQkcmVkIjsJCQkJCQkJXAorCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKKwlmaTsJCQkJCQkJCVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCisJZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAorCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKKwkgIGlmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbgkJCVwKKwkgICAgZWNobyAiJCR7Y29sfVBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkkJHtzdGR9IjsJXAorCSAgZmk7CQkJCQkJCQlcCisJICBlY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQlcCisJZmk7CQkJCQkJCQlcCisJJCRzdWNjZXNzIHx8IGV4aXQgMQorCitjaGVjay1URVNUUzoKKwlAaWYgdGVzdCAkQCAhPSByZWNoZWNrOyB0aGVuIFwKKwkgICBsaXN0PSckKFJFQ0hFQ0tfTE9HUyknOyBcCisJICAgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3Q7IFwKKwkgZmkKKwlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCisJQHdzPSdbIAldJzsgXAorCWxvZ19saXN0PScnIHRyc19saXN0PScnOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJZm9yIGkgaW4gJCRiYXNlczsgZG8gXAorCSAgaWYgdGVzdCAteiAiJCRsb2dfbGlzdCI7IHRoZW4gXAorCSAgICBsb2dfbGlzdD0iJCRpLmxvZyI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2dfbGlzdD0iJCRsb2dfbGlzdCAkJGkubG9nIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLXogIiQkdHJzX2xpc3QiOyB0aGVuIFwKKwkgICAgdHJzX2xpc3Q9IiQkaS50cnMiOyBcCisJICBlbHNlIFwKKwkgICAgdHJzX2xpc3Q9IiQkdHJzX2xpc3QgJCRpLnRycyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCIKKworLnNoLmxvZzoKKwlAcD0nJDwnOyBcCisJJChhbV9fc2V0X2IpOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKFNIX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAkKFNIX0xPR19DT01QSUxFKSAiJCR0c3QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWNvbXBpbGUtZmFpbHVyZS13aGlsZS1kaXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWNvbXBpbGUtZmFpbHVyZS13aGlsZS1kaXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhYjcxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDA2MGU3NDM1NDc3NGQzNmQyYzExZWYwOGUzZTdlYTliOWI2ZTIzZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDEzIE5vdiAyMDE0IDExOjI5OjMzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6IGZpeCBjb21waWxlIGZhaWx1cmUgd2hpbGUKKyAtLWRpc2FibGUtZGV2aWNlLW1hcHBlcgorCitXaGlsZSAtLWRpc2FibGUtZGV2aWNlLW1hcHBlciwgdGhlIE1BQ1JPIEVOQUJMRV9ERVZJQ0VfTUFQUEVSIGlzCit1bmRlZiwgYnV0IGl0IG1pc3NlZCB0byBzY29wZSBzb21lIGRldmljZSBtYXBwZXIgZnVuY3Rpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGlicGFydGVkL2FyY2gvbGludXguYyB8IDggKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicGFydGVkL2FyY2gvbGludXguYyBiL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKK2luZGV4IDZmZDczYzUuLjJhZmE0NzkgMTAwNjQ0CistLS0gYS9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCisrKysgYi9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCitAQCAtMjMyMCw2ICsyMzIwLDcgQEAgemFzcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyBzdGF0aWMgY2hhciAqCisgZG1fY2Fub25pY2FsX3BhdGggKFBlZERldmljZSBjb25zdCAqZGV2KQorIHsKKysjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKyAgICAgICAgIExpbnV4U3BlY2lmaWMgY29uc3QgKmFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAKKyAgICAgICAgIC8qIEdldCBtYXAgbmFtZSBmcm9tIGRldmljZW1hcHBlciAqLworQEAgLTIzMzcsNiArMjMzOCw3IEBAIGRtX2Nhbm9uaWNhbF9wYXRoIChQZWREZXZpY2UgY29uc3QgKmRldikKKyAgICAgICAgIGRtX3Rhc2tfZGVzdHJveSAodGFzayk7CisgICAgICAgICByZXR1cm4gZGV2X25hbWU7CisgZXJyOgorKyNlbmRpZgorICAgICAgICAgcmV0dXJuIE5VTEw7CisgfQorIAorQEAgLTI5NTcsMTMgKzI5NTksMTUgQEAgX2Rpc2tfc3luY19wYXJ0X3RhYmxlIChQZWREaXNrKiBkaXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqbGVuZ3RoKTsKKyAKKy0KKysjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKyAgICAgICAgIGlmIChkaXNrLT5kZXYtPnR5cGUgPT0gUEVEX0RFVklDRV9ETSkgeworICAgICAgICAgICAgICAgICBhZGRfcGFydGl0aW9uID0gX2RtX2FkZF9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlbW92ZV9wYXJ0aXRpb24gPSBfZG1fcmVtb3ZlX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgcmVzaXplX3BhcnRpdGlvbiA9IF9kbV9yZXNpemVfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICBnZXRfcGFydGl0aW9uX3N0YXJ0X2FuZF9sZW5ndGggPSBfZG1fZ2V0X3BhcnRpdGlvbl9zdGFydF9hbmRfbGVuZ3RoOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0gZWxzZQorKyNlbmRpZgorKyAgICAgICAgeworICAgICAgICAgICAgICAgICBhZGRfcGFydGl0aW9uID0gX2Jsa3BnX2FkZF9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlbW92ZV9wYXJ0aXRpb24gPSBfYmxrcGdfcmVtb3ZlX3BhcnRpdGlvbjsKKyAjaWZkZWYgQkxLUEdfUkVTSVpFX1BBUlRJVElPTgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWRvYy1tYW5kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWRvYy1tYW5kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMWQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtZG9jLW1hbmRpci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbYnVnLXBhcnRlZEBnbnUub3JnXQorCit8IGZvciBwbyBpbiBgbHMgLTEgLi8qLnB0X0JSLnBvIDI+L2Rldi9udWxsYDsgZG8gXAorfCAJCW1ha2UgJChiYXNlbmFtZSAke3BvJS5wdF9CUi5wb30pOyBcCit8IAlkb25lCit8IE1ha2VmaWxlOjkwNDogKioqIFJlY3Vyc2l2ZSB2YXJpYWJsZSBgbWFuZGlyJyByZWZlcmVuY2VzIGl0c2VsZiAoZXZlbnR1YWxseSkuICBTdG9wLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorCistLS0gcGFydGVkLTMuMS9kb2MvcG80YS5tay5vcmlnCTIwMTItMDMtMTUgMTQ6MDk6MTEuNTU1ODMxODcyICswMTAwCisrKysgcGFydGVkLTMuMS9kb2MvcG80YS5tawkyMDEyLTAzLTE1IDE0OjEwOjQ0LjI0MzgzMDk4NSArMDEwMAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjIHRocmVzaG9sZCBpcyA4MCUpLCBpdCB3b24ndCBiZSBkaXN0cmlidXRlZCwgYW5kIHRoZSBidWlsZCB3b24ndCBmYWlsLgorICMKKyAKKy1tYW5kaXIgPSAkKG1hbmRpcikvJChsYW5nKQorK21hbmRpciA6PSAkKG1hbmRpcikvJChsYW5nKQorIAorICMgSW5mb3JtIGF1dG9tYWtlIHRoYXQgd2Ugd2FudCB0byBpbnN0YWxsIHNvbWUgbWFuIHBhZ2VzIGluIHNlY3Rpb24gMSwgNQorICMgYW5kIDguCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvbm9fY2hlY2sucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvbm9fY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkOGRiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ub19jaGVjay5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0lmIGNoZWNrIGlzIGRldGVjdGVkLCBpdCBtYWtlcyB0aGUgYnVpbGRzIG5vbi1kZXRlcm1pbnN0aWMgc28ganVzdCBmb3JjZQoraXQgdG8gYmUgZGlzYWJsZWQuCisKK1JQIC0gNC8xMS8wOAorCitJbmRleDogcGFydGVkLTEuOS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhcnRlZC0xLjkuMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTIzIDE4OjUyOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIHBhcnRlZC0xLjkuMC9jb25maWd1cmUuYWMJMjAxMC0wMi0wMiAxNDoxMzo1Ni4wMTM5MDUwOTMgKzAwMDAKK0BAIC00NzcsNyArNDc3LDcgQEAKKyBBTV9DT05ESVRJT05BTChbQlVJTERfTElOVVhdLCBbdGVzdCAiJE9TIiA9IGxpbnV4XSkKKyAKKyBkbmwgY2hlY2sgZm9yICJjaGVjayIsIHVuaXQgdGVzdGluZyBsaWJyYXJ5L2hlYWRlcgorLVBLR19DSEVDS19NT0RVTEVTKFtDSEVDS10sIFtjaGVjayA+PSAwLjkuM10sIGhhdmVfY2hlY2s9eWVzLCBoYXZlX2NoZWNrPW5vKQorK2hhdmVfY2hlY2s9bm8KKyBpZiB0ZXN0ICIkaGF2ZV9jaGVjayIgIT0gInllcyI7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVChbVW5hYmxlIHRvIGxvY2F0ZSBjaGVjayB2ZXJzaW9uIDAuOS4zIG9yIGhpZ2hlcjogbm90IGJ1aWxkaW5nXSkKKyBmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1YzVlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3N5c2NhbGxzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3N5c2NhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmJlOWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvc3lzY2FsbHMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcGFydGVkLTEuOS4wL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXJ0ZWQtMS45LjAub3JpZy9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCTIwMDktMDctMjMgMTg6NTI6MDguMDAwMDAwMDAwICswMTAwCisrKysgcGFydGVkLTEuOS4wL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMJMjAxMC0wMi0wMiAxNDoxNDoxNi41MjM5MDQ3NjggKzAwMDAKK0BAIC0xNyw2ICsxNyw4IEBACisgCisgI2RlZmluZSBQUk9DX0RFVklDRVNfQlVGU0laIDE2Mzg0CisgCisrI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKysKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPGFyY2gvbGludXguaD4KKyAKK0BAIC0xNDc3LDEyICsxNDc5LDE0IEBACisgCisgI2lmIFNJWkVPRl9PRkZfVCA8IDgKKyAKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQorIHN0YXRpYyBfc3lzY2FsbDUoaW50LF9sbHNlZWssCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIGZkLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LAorICAgICAgICAgICAgICAgICAgbG9mZl90KiwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCBvcmlnaW4pCisrI2VuZGlmCisgCisgbG9mZl90CisgbGxzZWVrICh1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGludCB3aGVuY2UpCitAQCAtMTQ5MCwxMSArMTQ5NCwyMCBAQAorICAgICAgICAgbG9mZl90IHJlc3VsdDsKKyAgICAgICAgIGludCByZXR2YWw7CisgCisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKKyAgICAgICAgIHJldHZhbCA9IF9sbHNlZWsoZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgPj4gMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuY2UpOworKyNlbHNlCisrIAlyZXR2YWwgPSBzeXNjYWxsKF9fTlJfX2xsc2VlaywgZmQsCisrCQkJICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgPj4gMzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKysJCQkgd2hlbmNlKTsKKysjZW5kaWYKKysKKyAgICAgICAgIHJldHVybiAocmV0dmFsPT0tMSA/IChsb2ZmX3QpIHJldHZhbCA6IHJlc3VsdCk7CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvcGFydGVkXzMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhhZTA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJEaXNrIHBhcnRpdGlvbiBlZGl0aW5nL3Jlc2l6aW5nIHV0aWxpdHkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZjMxYjI2NmQzNDQwZGQ3ZWU1MGY5MmNmNjdkOGU2YyIKK1NFQ1RJT04gPSAiY29uc29sZS90b29scyIKK0RFUEVORFMgPSAibmN1cnNlcyByZWFkbGluZSB1dGlsLWxpbnV4IgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9wYXJ0ZWQvcGFydGVkLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9ub19jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNjYWxscy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZG9jLW1hbmRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDI0N2I2YTdiMzE0ZjhlZGViNjE4MTU5ZmE5NWY5Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODU4YjU4OWMyMjI5N2NhY2RmNDM3ZjNiYWZmNmYwNGIzMzMwODc1MjFhYjI3NGY3YWI2NzdjYjhjNmJiNzhlNCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXZpY2UtbWFwcGVyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB0ZXhpbmZvIHB0ZXN0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgdGVzdHMgcHJpbnQtYWxpZ24gcHJpbnQtbWF4IGR1cC1jbG9iYmVyIGR1cGxpY2F0ZSBmcy1yZXNpemUKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJbWtkaXIgJHQvYnVpbGQtYXV4CisJY3AgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4LworCWNwIC1yICR7U30vdGVzdHMgJHQKKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR0L3Rlc3RzLworCXNlZCAtaSAic3xeVkVSU0lPTi4qfFZFUlNJT04gPSAke1BWfXxnIiAkdC90ZXN0cy9NYWtlZmlsZQorCWZvciBpIGluIHByaW50LWFsaWduIHByaW50LW1heCBkdXAtY2xvYmJlciBkdXBsaWNhdGUgZnMtcmVzaXplOyBcCisJICBkbyBjcCAke0J9L3Rlc3RzLy5saWJzLyRpICR0L3Rlc3RzLzsgXAorCWRvbmUKKwlzZWQgLWUgJ3N8IC4uL3BhcnRlZHx8JyAtaSAkdC90ZXN0cy8qLnNoCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggY29yZXV0aWxzIHBlcmwgdXRpbC1saW51eC1sb3NldHVwIHB5dGhvbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9maXhfZm9yX2NvbXBpbGVfd2l0aF9nY2MtNC42LjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3NzljMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHRoaXMgY29tcGlsZXIgZXJyb3Igd2l0aCBnY2MgNC42LjAKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNS8wOAorCit8IGZ0cy5jOiBJbiBmdW5jdGlvbiAncGF4X2Z0c19zZXQnOgorfCBmdHMuYzo0Njk6NzogZXJyb3I6IHBhcmFtZXRlciAnc3AnIHNldCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWJ1dC1zZXQtcGFyYW1ldGVyXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworfCAKK3wgbWFrZVsyXTogKioqIFtmdHMub10gRXJyb3IgMQorCitJbmRleDogcGF4LTMuNC9saWIvZnRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvbGliL2Z0cy5jCisrKysgcGF4LTMuNC9saWIvZnRzLmMKK0BAIC00NjYsNyArNDY2LDcgQEAgbmFtZToJCXQgPSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EKHAtPmZ0cworIC8qIEFSR1NVU0VEICovCisgaW50CisgZnRzX3NldChzcCwgcCwgaW5zdHIpCistCUZUUyAqc3A7CisrCUZUUyBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgKnNwOworIAlGVFNFTlQgKnA7CisgCWludCBpbnN0cjsKKyB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4NzhmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDE4NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F1dGhvcjogSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIERlYyA2IDEwOjM0OjUzIDIwMTEgLTA4MDAKKworICAgIEZpeCBwYXgtMy40IGJ1aWxkIGZvciB4MzIKKyAgICAKKyAgICBvZmZfdCBpcyA4Ynl0ZSBmb3IgeDMyLiAgV2UgbmVlZCB0byBjaGVjayBib3RoIF9GSUxFX09GRlNFVF9CSVRTIGFuZAorICAgIHNpemUgb2Ygb2ZmX3QgdG8gc2VlIGlmIGZpbGUgb2Zmc2V0IGlzIDY0Yml0LiAgVGhpcyBwYXRjaCBhZGRzCisgICAgQUNfQ0hFQ0tfU0laRU9GKG9mZl90KSBhbmQgY2hlY2tzIFNJWkVPRl9PRkZfVCA9PSA4LgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA2CisKK0luZGV4OiBwYXgtMy40L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9jb25maWd1cmUuaW4KKysrKyBwYXgtMy40L2NvbmZpZ3VyZS5pbgorQEAgLTMzLDQgKzMzLDcgQEAgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX0NfQ09OU1QKKyAKKytBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCisrQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisrCisgQUNfT1VUUFVUKFtNYWtlZmlsZSBsaWIvTWFrZWZpbGUgc3JjL01ha2VmaWxlXSkKK0luZGV4OiBwYXgtMy40L3NyYy9hcl9pby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9hcl9pby5jCisrKysgcGF4LTMuNC9zcmMvYXJfaW8uYworQEAgLTM3OCw3ICszNzgsOCBAQCBhcl9jbG9zZSh2b2lkKQorIAkgKiBjb3VsZCBoYXZlIHdyaXR0ZW4gYW55dGhpbmcgeWV0LgorIAkgKi8KKyAJaWYgKGZybXQgPT0gTlVMTCkgeworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLCAiJXM6IHVua25vd24gZm9ybWF0LCAlcXUgYnl0ZXMgc2tpcHBlZC5cbiIsCisgI2Vsc2UKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsICIlczogdW5rbm93biBmb3JtYXQsICVsdSBieXRlcyBza2lwcGVkLlxuIiwKK0BAIC0zOTEsNyArMzkyLDggQEAgYXJfY2xvc2Uodm9pZCkKKyAKKyAJaWYgKHN0cmNtcChOTV9DUElPLCBhcmd2MCkgPT0gMCkKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCSAgICAiJXF1IGJsb2Nrc1xuIiwKKyAjZWxzZQorIAkJICAgICIlbHUgYmxvY2tzXG4iLAorQEAgLTM5OSw3ICs0MDEsOCBAQCBhcl9jbG9zZSh2b2lkKQorIAkJCShyZGNudCA/IHJkY250IDogd3JjbnQpIC8gNTEyMCk7CisgCWVsc2UgaWYgKHN0cmNtcChOTV9UQVIsIGFyZ3YwKSAhPSAwKQorIAkJKHZvaWQpZnByaW50ZihsaXN0ZiwKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIAkJICAgICIlczogJXMgdm9sICVkLCAlbHUgZmlsZXMsICVxdSBieXRlcyByZWFkLCAlcXUgYnl0ZXMgd3JpdHRlbi5cbiIsCisgI2Vsc2UKKyAJCSAgICAiJXM6ICVzIHZvbCAlZCwgJWx1IGZpbGVzLCAlbHUgYnl0ZXMgcmVhZCwgJWx1IGJ5dGVzIHdyaXR0ZW4uXG4iLAorSW5kZXg6IHBheC0zLjQvc3JjL2NwaW8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvY3Bpby5jCisrKysgcGF4LTMuNC9zcmMvY3Bpby5jCitAQCAtMjE4LDcgKzIxOCw4IEBAIHJkX2xuX25tIChBUkNIRCAqYXJjbikKKyAJICovCisgCWlmICgoYXJjbi0+c2Iuc3Rfc2l6ZSA9PSAwKSB8fAorIAkgICAgKGFyY24tPnNiLnN0X3NpemUgPj0gKG9mZl90KSBzaXplb2YoYXJjbi0+bG5fbmFtZSkpKSB7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCXBheHdhcm4gKDEsICJDcGlvIGxpbmsgbmFtZSBsZW5ndGggaXMgaW52YWxpZDogJXF1IiwKKyAJCQkgYXJjbi0+c2Iuc3Rfc2l6ZSk7CisgI2Vsc2UKK0luZGV4OiBwYXgtMy40L3NyYy9nZW5fc3Vicy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9nZW5fc3Vicy5jCisrKysgcGF4LTMuNC9zcmMvZ2VuX3N1YnMuYworQEAgLTEzMyw3ICsxMzMsOCBAQCBsc19saXN0IChBUkNIRCAqYXJjbiwgdGltZV90IG5vdywgRklMRSAqCisgICAgKiBwcmludCBkZXZpY2UgaWQncyBmb3IgZGV2aWNlcywgb3Igc2l6ZXMgZm9yIG90aGVyIG5vZGVzCisgICAgKi8KKyAgIGlmICgoYXJjbi0+dHlwZSA9PSBQQVhfQ0hSKSB8fCAoYXJjbi0+dHlwZSA9PSBQQVhfQkxLKSkKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlNGx1LCU0bHUgIiwgKHVuc2lnbmVkIGxvbmcpIE1BSk9SIChzYnAtPnN0X3JkZXYpLAorIAkJICAgICh1bnNpZ25lZCBsb25nKSBNSU5PUiAoc2JwLT5zdF9yZGV2KSk7CisgI2Vsc2UKK0BAIC0xNDIsNyArMTQzLDggQEAgbHNfbGlzdCAoQVJDSEQgKmFyY24sIHRpbWVfdCBub3csIEZJTEUgKgorICNlbmRpZgorICAgZWxzZQorICAgICB7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlOXF1ICIsIHNicC0+c3Rfc2l6ZSk7CisgI2Vsc2UKKyAgICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlOWx1ICIsIHNicC0+c3Rfc2l6ZSk7CitAQCAtMzM0LDcgKzMzNiw4IEBAIHVsX2FzYyAodV9sb25nIHZhbCwgY2hhciAqc3RyLCBpbnQgbGVuLCAKKyAgIHJldHVybiAoMCk7CisgfQorIAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgLyoKKyAgKiBhc2NfdXFkKCkKKyAgKgljb252ZXJ0IGhleC9vY3RhbCBjaGFyYWN0ZXIgc3RyaW5nIGludG8gYSB1X3F1YWRfdC4gV2UgZG8gbm90IGhhdmUgdG8KK0luZGV4OiBwYXgtMy40L3NyYy9vcHRpb25zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL29wdGlvbnMuYworKysrIHBheC0zLjQvc3JjL29wdGlvbnMuYworQEAgLTE1NDUsNyArMTU0NSw4IEBAIHN0cl9vZmZ0IChjaGFyICp2YWwpCisgICBjaGFyICpleHByOworICAgb2ZmX3QgbnVtLCB0OworIAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBudW0gPSBzdHJ0b3EgKHZhbCwgJmV4cHIsIDApOworICAgaWYgKChudW0gPT0gTE9OR19MT05HX01BWCkgfHwgKG51bSA8PSAwKSB8fCAoZXhwciA9PSB2YWwpKQorICNlbHNlCitJbmRleDogcGF4LTMuNC9zcmMvdGFyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL3Rhci5jCisrKysgcGF4LTMuNC9zcmMvdGFyLmMKK0BAIC01OCw3ICs1OCw4IEBACisgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGFyX2Noa3NtIChjaGFyICosIGludCk7Cisgc3RhdGljIGNoYXIgKm5hbWVfc3BsaXQgKGNoYXIgKiwgaW50KTsKKyBzdGF0aWMgaW50IHVsX29jdCAodV9sb25nLCBjaGFyICosIGludCwgaW50KTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIHN0YXRpYyBpbnQgdXFkX29jdCAodV9xdWFkX3QsIGNoYXIgKiwgaW50LCBpbnQpOworICNlbmRpZgorIAorQEAgLTE5Niw3ICsxOTcsOCBAQCB1bF9vY3QgKHVfbG9uZyB2YWwsIHJlZ2lzdGVyIGNoYXIgKnN0ciwgCisgICByZXR1cm4gKDApOworIH0KKyAKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIC8qCisgICogdXFkX29jdCgpCisgICoJY29udmVydCBhbiB1X3F1YWRfdCB0byBhbiBvY3RhbCBzdHJpbmcuIG9uZSBvZiBtYW55IG9kZGJhbGwgZmllbGQKK0BAIC00MjcsNyArNDI5LDggQEAgdGFyX3JkIChBUkNIRCAqYXJjbiwgY2hhciAqYnVmKQorIAkJCSAgICAgICAweGZmZik7CisgICBhcmNuLT5zYi5zdF91aWQgPSAodWlkX3QpIGFzY191bCAoaGQtPnVpZCwgc2l6ZW9mIChoZC0+dWlkKSwgT0NUKTsKKyAgIGFyY24tPnNiLnN0X2dpZCA9IChnaWRfdCkgYXNjX3VsIChoZC0+Z2lkLCBzaXplb2YgKGhkLT5naWQpLCBPQ1QpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdXFkIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CisgI2Vsc2UKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191bCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworQEAgLTY1OSw3ICs2NjIsOCBAQCB0YXJfd3IgKHJlZ2lzdGVyIEFSQ0hEICogYXJjbikKKyAgICAgICAgKiBkYXRhIGZvbGxvd3MgdGhpcyBmaWxlLCBzbyBzZXQgdGhlIHBhZAorICAgICAgICAqLworICAgICAgIGhkLT5saW5rZmxhZyA9IEFSRUdUWVBFOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICAgaWYgKHVxZF9vY3QgKCh1X3F1YWRfdCkgYXJjbi0+c2Iuc3Rfc2l6ZSwgaGQtPnNpemUsCisgCQkgICBzaXplb2YgKGhkLT5zaXplKSwgMSkpCisgI2Vsc2UKK0BAIC04MzQsNyArODM4LDggQEAgdXN0YXJfcmQgKEFSQ0hEICphcmNuLCBjaGFyICpidWYpCisgICAgKi8KKyAgIGFyY24tPnNiLnN0X21vZGUgPSAobW9kZV90KSAoYXNjX3VsIChoZC0+bW9kZSwgc2l6ZW9mIChoZC0+bW9kZSksIE9DVCkgJgorIAkJCSAgICAgICAweGZmZik7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191cWQgKGhkLT5zaXplLCBzaXplb2YgKGhkLT5zaXplKSwgT0NUKTsKKyAjZWxzZQorICAgYXJjbi0+c2Iuc3Rfc2l6ZSA9IChvZmZfdCkgYXNjX3VsIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CitAQCAtMTA4MSw3ICsxMDg2LDggQEAgdXN0YXJfd3IgKHJlZ2lzdGVyIEFSQ0hEICogYXJjbikKKyAgICAgICBlbHNlCisgCWhkLT50eXBlZmxhZyA9IFJFR1RZUEU7CisgICAgICAgYXJjbi0+cGFkID0gVEFSX1BBRCAoYXJjbi0+c2Iuc3Rfc2l6ZSk7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgICBpZiAodXFkX29jdCAoKHVfcXVhZF90KSBhcmNuLT5zYi5zdF9zaXplLCBoZC0+c2l6ZSwKKyAJCSAgIHNpemVvZiAoaGQtPnNpemUpLCAzKSkKKyAJewpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4XzMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDA0ODcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJQb3J0YWJsZSBBcmNoaXZlIGVYY2hhbmdlIgorREVTQ1JJUFRJT04gPSAicGF4IChQb3J0YWJsZSBBcmNoaXZlIGVYY2hhbmdlKSBpcyB0aGUgUE9TSVggc3RhbmRhcmQgYXJjaGl2ZSB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL2N2c3dlYi5vcGVuYnNkLm9yZy9jZ2ktYmluL2N2c3dlYi9zcmMvYmluL3BheC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cub3BlbmJzZC5vcmcvcXVlcnktcHIuaHRtbCIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjBiNjc0ZGZkYzU2ZGFhMzgzMmQ0MDY5YjgyMGVhMCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGF4Lmg7ZW5kbGluZT00MDttZDU9MzA5ZDNlMjQxYzFkODIwNjkyMjhlNWE1MWU5YjhkNjAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NwaW8uaDtlbmRsaW5lPTQwO21kNT1jM2I0YmJmZjYxMzNhODMzODc5Njg2MTdiYmFlOGFjNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdmlzLmg7ZW5kbGluZT00MDttZDU9YjI4M2Y3NTlhYmQ0YTVhZDdlMDE0YjgwZjUxZmMwNTMiCisKK1NFQ1RJT04gPSAiYmFzZSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy8ke0JQTn0vJHtCUH0udGFyLmJ6Mi9mYmQ5MDIzYjU5MGI0NWFjM2FkZTk1ODcwNzAyYTBkNi8ke0JQfS50YXIuYnoyIFwKKwlmaWxlOi8vZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoIFwKKwlmaWxlOi8vcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImZiZDkwMjNiNTkwYjQ1YWMzYWRlOTU4NzA3MDJhMGQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjM2MwNjA0OGUwMjgyODA3N2NmNzc1N2QzZDE0MjI0MTQyOTIzODg5M2I5MWQ1MjlhZjI5YTJlOGNjNTYyM2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BiemlwMi9wYnppcDJfMS4xLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzA5ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlBCWklQMiBpcyBhIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGJ6aXAyIgorREVTQ1JJUFRJT04gPSAiUEJaSVAyIGlzIGEgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ6aXAyIGJsb2NrLXNvcnRpbmcgXAorZmlsZSBjb21wcmVzc29yIHRoYXQgdXNlcyBwdGhyZWFkcyBhbmQgYWNoaWV2ZXMgbmVhci1saW5lYXIgc3BlZWR1cCBvbiBTTVAgXAorbWFjaGluZXMuIFRoZSBvdXRwdXQgb2YgdGhpcyB2ZXJzaW9uIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBiemlwMiB2MS4wLjIgb3IgXAorbmV3ZXIgKGllOiBhbnl0aGluZyBjb21wcmVzc2VkIHdpdGggcGJ6aXAyIGNhbiBiZSBkZWNvbXByZXNzZWQgd2l0aCBiemlwMikuIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvbXByZXNzaW9uLmNhL3BiemlwMi8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRjNGYyZWRlYzk2NzlkNWFiZWYzNTE0YTgxNmI1NGE0IgorCitERVBFTkRTID0gImJ6aXAyIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0LyR7QlBOfS8xLjEvJHtQVn0vK2Rvd25sb2FkLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjkxYTQ5MTFiMTMzMDU4NTA0MjM4NDBlYjBmYTZmNGY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU3M2JiMzU4YTVhN2QzYmY1ZjQyZjg4MWFmMzI0Y2VkZjk2MGM3ODZlOGQ2NmRkMDNkNDQ4ZGRkOGEwMTY2ZWUiCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKK0VYVFJBX09FTUFLRSA9ICJDWFg9JyR7Q1hYfSAke0NYWEZMQUdTfScgTERGTEFHUz0nJHtMREZMQUdTfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IHBiemlwMiAke0R9JHtiaW5kaXJ9LworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGliY29udmVydC1hc24xLXBlcmxfMC4yNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGliY29udmVydC1hc24xLXBlcmxfMC4yNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzBlN2VjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJjb252ZXJ0LWFzbjEtcGVybF8wLjI3LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQ29udmVydDo6QVNOMSAtIFBlcmwgQVNOLjEgRW5jb2RlL0RlY29kZSBsaWJyYXJ5IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5tZDtiZWdpbmxpbmU9OTE7ZW5kbGluZT05NzttZDU9Y2VmZjdmZDI4NmViNmQ4ZThlMGQzZDIzZTA5NmE2M2YiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HQi9HQkFSUi9Db252ZXJ0LUFTTjEtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjg3MjNlOTZiZTBiMjU4YTllMjA0ODAyNzZlOGE2MmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzRhNGE3OGFlMGM1ZTk3MzEwMGFjMGE4ZjIwM2ExMTBmNzZmYjA0N2I3OWRhZTRmYzFmZDdkNjgxNGQzZDU4YSIKKworUyA9ICIke1dPUktESVJ9L0NvbnZlcnQtQVNOMS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0VYVFJBX1BFUkxGTEFHUyA9ICItSSAke1BFUkxIT1NUTElCfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlidGltZWRhdGUtcGVybF8yLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmNkZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlcyB1c2VmdWwgZm9yIG1hbmlwdWxhdGluZyBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uIgorU0VDVElPTiA9ICJsaWJzIgorIyBZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjE7bWQ1PTU3NmI3Y2I0MWU1ZTgyMTUwMWEwMWVkNjZmMGY5ZDllIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR0IvR0JBUlIvVGltZURhdGUtJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vVGltZURhdGUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1jYXJwIHBlcmwtbW9kdWxlLWV4cG9ydGVyIHBlcmwtbW9kdWxlLXN0cmljdCBwZXJsLW1vZHVsZS10aW1lLWxvY2FsIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjFkOTExNTNhYzk3MTM0N2FlZTg0MjkyZWQ4ODZjMWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzViZDI1NDg3MWNiNTg1M2E2YWEwNDAzYWMwYmUyNzBjZGQ3NWM5ZDFiNjYzOWYxOGVjYmE2M2MxNTI5OGU4NiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5ZTcxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHN1cHBvcnRpbmcgc2ltcGxlIGdlbmVyaWMgbmFtZXNwYWNlcyIKK0RFU0NSSVBUSU9OID0gIlhNTDo6TmFtZXNwYWNlU3VwcG9ydCBvZmZlcnMgYSBzaW1wbGUgd2F5IHRvIHByb2Nlc3MgbmFtZXNwYWNlLWJhc2VkIFhNTCBuYW1lcy4gXAorICAgICAgICAgICAgICAgIEl0IGFsc28gaGVscHMgbWFpbnRhaW4gYSBwcmVmaXgtdG8tbmFtZXNwYWNlIFVSSSBtYXAsIGFuZCBwcm92aWRlcyBhIG51bWJlciBvZiBcCisgICAgICAgICAgICAgICAgYmFzaWMgY2hlY2tzLiAiCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTUVUQS55bWw7YmVnaW5saW5lPTIyO2VuZGxpbmU9MjI7bWQ1PTNiMmI1NjRkYWU4YjlhZjllODg5NmU4NWMwN2RjYmU1IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1AvUEUvUEVSSUdSSU4vWE1MLU5hbWVzcGFjZVN1cHBvcnQtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjIyMmNjYTc2MTYxY2Q5NTZkNzI0Mjg2ZDM2YjYwN2RhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZkODE1MWYwYTNmMTAyMzEzZDc2YjY0YmZkMWMyZDllZDQ2YmZlNjNhMTZmMDM4ZTdkODYwZmRhMjg3Yjc0ZWEiCisKKworUyA9ICIke1dPUktESVJ9L1hNTC1OYW1lc3BhY2VTdXBwb3J0LSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORD0ibmF0aXZlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhMzM3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1iYXNlLXBlcmxfMS4wOC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkJhc2UgY2xhc3MgU0FYIERyaXZlcnMgYW5kIEZpbHRlcnMiCitERVNDUklQVElPTiA9ICJUaGlzIG1vZHVsZSBoYXMgYSB2ZXJ5IHNpbXBsZSB0YXNrIC0gdG8gYmUgYSBiYXNlIGNsYXNzIGZvciBcCitQZXJsU0FYIGRyaXZlcnMgYW5kIGZpbHRlcnMuIEl0J3MgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gcGFzcyBcCit0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIG91dHB1dCB1bmNoYW5nZWQuIEl0IGNhbiBiZSB1c2VmdWwgdG8gXAordXNlIHRoaXMgbW9kdWxlIGFzIGEgYmFzZSBjbGFzcyBzbyB5b3UgZG9uJ3QgaGF2ZSB0bywgZm9yIGV4YW1wbGUsIFwKK2ltcGxlbWVudCB0aGUgY2hhcmFjdGVycygpIGNhbGxiYWNrLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2Rpc3QuaW5pO2VuZGxpbmU9NTttZDU9OGY5YzlhNTUzNDBhZWZhZWU2ZTk3MDRjODg0NjY0NDYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HUi9HUkFOVE0vWE1MLVNBWC1CYXNlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4YzhjMzI0N2RmZDA4MDcxMjU5NjExOGQ3MGRiZTMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NjI3MDMxOGIxNWY4OGI4NDI3ZTU4NTE5OGFiYmMxOWJjMmU2Y2NiMzZkYzRjMGE0ZjJkOTgwNzMzMDIxOWUiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtU0FYLUJhc2UtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1wZXJsXzAuOTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDM5NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHVzaW5nIGFuZCBidWlsZGluZyBQZXJsIFNBWDIgWE1MIHByb2Nlc3NvcnMiCitERVNDUklQVElPTiA9ICJYTUw6OlNBWCBjb25zaXN0cyBvZiBzZXZlcmFsIGZyYW1ld29yayBjbGFzc2VzIGZvciB1c2luZyBhbmQgXAorYnVpbGRpbmcgUGVybCBTQVgyIFhNTCBwYXJzZXJzLCBmaWx0ZXJzLCBhbmQgZHJpdmVycy4gIEl0IGlzIGRlc2lnbmVkIFwgCithcm91bmQgdGhlIG5lZWQgdG8gYmUgYWJsZSB0byAicGx1ZyBpbiIgZGlmZmVyZW50IFNBWCBwYXJzZXJzIHRvIGFuIFwKK2FwcGxpY2F0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHByb2dyYW1tZXIgaW50ZXJ2ZW50aW9uLiAgVGhvc2Ugb2YgeW91IFwKK2ZhbWlsaWFyIHdpdGggdGhlIERCSSB3aWxsIGJlIHJpZ2h0IGF0IGhvbWUuICBTb21lIG9mIHRoZSBkZXNpZ25zIFwKK2NvbWUgZnJvbSB0aGUgSmF2YSBKQVhQIHNwZWNpZmljYXRpb24gKFNBWCBwYXJ0KSwgb25seSB3aXRob3V0IHRoZSBcCitqYXZhbmVzcy4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitERVBFTkRTICs9ICJsaWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ICs9ICJsaWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsIGxpYnhtbC1zYXgtYmFzZS1wZXJsIHBlcmwtbW9kdWxlLWZpbGUtdGVtcCIKK1BSID0gInIyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02NWM0Y2Q4ZjM5YzI0YzcxMzVlZDcwZGFjYmNiMDllMyIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9HL0dSL0dSQU5UTS9YTUwtU0FYLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5MGY1Mzc1YWU4N2ZkZWJmZGI1YmMzODU0MDE5ZjI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMyYjA0YjhlMzZiNmNjNGNmYzQ4NmRlMmQ4NTlkODdhZjUzODZkZDkzMGYyMzgzYzQ5MzQ3MDUwZDZmNWFkODQiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtU0FYLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3ouaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg5OTFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkEgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgZ3ppcCIKK0RFU0NSSVBUSU9OID0gInBpZ3osIHdoaWNoIHN0YW5kcyBmb3IgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgZ3ppcCwgaXMgYSBcCitmdWxseSBmdW5jdGlvbmFsIHJlcGxhY2VtZW50IGZvciBnemlwIHRoYXQgZXhwbG9pdHMgbXVsdGlwbGUgcHJvY2Vzc29ycyBhbmQgXAorbXVsdGlwbGUgY29yZXMgdG8gdGhlIGhpbHQgd2hlbiBjb21wcmVzc2luZyBkYXRhLiBwaWd6IHdhcyB3cml0dGVuIGJ5IE1hcmsgXAorQWRsZXIsIGFuZCB1c2VzIHRoZSB6bGliIGFuZCBwdGhyZWFkIGxpYnJhcmllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vemxpYi5uZXQvcGlnei8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIlpsaWIgJiBBcGFjaGUtMi4wIgorCitTUkNfVVJJID0gImh0dHA6Ly96bGliLm5ldC8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitQUk9WSURFU19jbGFzcy1uYXRpdmUgKz0gImd6aXAtbmF0aXZlIgorCitERVBFTkRTID0gInpsaWIiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19pbnN0YWxsX2NsYXNzLXRhcmdldCgpIHsKKwkjIEluc3RhbGwgZmlsZXMgaW50byAvYmluIChGSFMpLCB3aGljaCBpcyB0eXBpY2FsIHBsYWNlIGZvciBnemlwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpbnN0YWxsICR7Qn0vcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vcGlnegorCWxuIC1uc2YgcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vdW5waWd6CisJbG4gLW5zZiBwaWd6ICR7RH0ke2Jhc2VfYmluZGlyfS9waWd6Y2F0Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAke0J9L3BpZ3ogJHtEfSR7YmluZGlyfS9nemlwCisJbG4gLW5zZiBnemlwICR7RH0ke2JpbmRpcn0vZ3VuemlwCisJbG4gLW5zZiBnemlwICR7RH0ke2JpbmRpcn0vemNhdAorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI4MCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd1bnppcCBnemlwIHpjYXQiCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d1bnppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3VuemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d6aXBdID0gIiR7YmFzZV9iaW5kaXJ9L2d6aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbemNhdF0gPSAiJHtiYXNlX2JpbmRpcn0vemNhdCIKK0FMVEVSTkFUSVZFX1RBUkdFVCA9ICIke2Jhc2VfYmluZGlyfS9waWd6IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3ovbGluay1vcmRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmVjYzBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVGhpcyBwYXRjaCBhdm9pZHMgdW5kZXJsaW5raW5nIGlzc3VlcyBzaW5jZSB3ZSBwYXNzIC1seiB2aWEgTERGTEFHUyBidXQgaXQgYXBwZWFycworYmVmb3JlIHBpZ3oubyB3aGljaCBuZWVkcyBzeW1ib2xzIGZyb20gbGlieiBob3dldmVyIGR1ZSB0byBvcmRlciBsaW5rZXIgaGFwcGlseSBkaXNjYXJkcyBsaWJ6CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcGlnei0yLjMuMy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBpZ3otMi4zLjMub3JpZy9NYWtlZmlsZQkyMDE1LTAxLTE5IDIwOjEyOjMxLjAwMDAwMDAwMCAtMDgwMAorKysrIHBpZ3otMi4zLjMvTWFrZWZpbGUJMjAxNS0wMS0yOCAwOToxMTo1MC4yNjY2NjkxODQgLTA4MDAKK0BAIC01LDcgKzUsNyBAQAorICMgdXNlIGdjYyBhbmQgZ21ha2Ugb24gU29sYXJpcworIAorIHBpZ3o6IHBpZ3oubyB5YXJuLm8gdHJ5Lm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlneiAkXiAtbHB0aHJlYWQgLWxtCisrCSQoQ0MpIC1vIHBpZ3ogJF4gJChMREZMQUdTKSAtbHogLWxwdGhyZWFkIC1sbQorIAlsbiAtZiBwaWd6IHVucGlnegorIAorIHBpZ3oubzogcGlnei5jIHlhcm4uaCB0cnkuaCAke1pPUEZMSX1kZWZsYXRlLmggJHtaT1BGTEl9dXRpbC5oCitAQCAtMzUsNyArMzUsNyBAQAorIGRldjogcGlneiBwaWd6dCBwaWd6bgorIAorIHBpZ3p0OiBwaWd6dC5vIHlhcm50Lm8gdHJ5Lm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlnenQgJF4gLWxwdGhyZWFkIC1sbQorKwkkKENDKSAtbyBwaWd6dCAkXiAkKExERkxBR1MpIC1seiAtbHB0aHJlYWQgLWxtCisgCisgcGlnenQubzogcGlnei5jIHlhcm4uaCB0cnkuaAorIAkkKENDKSAkKENGTEFHUykgLURERUJVRyAtZyAtYyAtbyBwaWd6dC5vIHBpZ3ouYworQEAgLTQ0LDcgKzQ0LDcgQEAKKyAJJChDQykgJChDRkxBR1MpIC1EREVCVUcgLWcgLWMgLW8geWFybnQubyB5YXJuLmMKKyAKKyBwaWd6bjogcGlnem4ubyB0cnluLm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlnem4gJF4gLWxtCisrCSQoQ0MpIC1vIHBpZ3puICReICQoTERGTEFHUykgLWx6IC1sbQorIAorIHBpZ3puLm86IHBpZ3ouYyB0cnkuaAorIAkkKENDKSAkKENGTEFHUykgLURERUJVRyAtRE5PVEhSRUFEIC1nIC1jIC1vIHBpZ3puLm8gcGlnei5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwYmUyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnel8yLjMuMy5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHBpZ3ouaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9waWd6LmM7YmVnaW5saW5lPTc7ZW5kbGluZT0yMTttZDU9YTIxZDQwNzVjYjAwYWI0Y2ExN2ZjZTVlNzUzNGNhOTUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9saW5rLW9yZGVyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDFkN2ExNmNjZTc3OTI5Y2MxYTc4YWExYmRmYjY4Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGU4YjY3YjQzMmNlNzkwNzU3NWE1NDlmM2UxY2FjNDcwOTc4MWJhMGY2YjQ4YWZlYTlmNTkzNjk4NDZiNTA5YyIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvZml4LWNvbmZpZ3VyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvZml4LWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzRhZTgwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9maXgtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKKworZXhlY19wcmVmaXggaXMgL3VzciBkZWZhdWx0IGluIE9FLUNvcmUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorSW5kZXg6IHByb2Nwcy1uZy0zLjMuMTAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHJvY3BzLW5nLTMuMy4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHByb2Nwcy1uZy0zLjMuMTAvY29uZmlndXJlLmFjCitAQCAtNzAsNyArNzAsNyBAQCBBQ19GVU5DX01NQVAKKyBBQ19GVU5DX1JFQUxMT0MKKyBBQ19GVU5DX1NUUlRPRAorIAorLXVzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS91c3IvYmluJworK3VzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgQUNfU1VCU1QoW3VzcmJpbl9leGVjZGlyXSkKKyAKKyBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE0LjFdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9zeXNjdGwuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlNzQ4OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorIyBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB0YWtlbiBmcm9tIERlYmlhbi4KKyMKKyMgL2V0Yy9zeXNjdGwuY29uZiAtIENvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc2V0dGluZyBzeXN0ZW0gdmFyaWFibGVzCisjIFNlZSBzeXNjdGwuY29uZiAoNSkgZm9yIGluZm9ybWF0aW9uLgorIworCisja2VybmVsLmRvbWFpbm5hbWUgPSBleGFtcGxlLmNvbQorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIHRvIHN0b3AgbG93LWxldmVsIG1lc3NhZ2VzIG9uIGNvbnNvbGUKKyNrZXJuZWwucHJpbnRrID0gNCA0IDEgNworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzMKKyMgRnVuY3Rpb25zIHByZXZpb3VzbHkgZm91bmQgaW4gbmV0YmFzZQorIworCisjIFVuY29tbWVudCB0aGUgbmV4dCB0d28gbGluZXMgdG8gZW5hYmxlIFNwb29mIHByb3RlY3Rpb24gKHJldmVyc2UtcGF0aCBmaWx0ZXIpCisjIFR1cm4gb24gU291cmNlIEFkZHJlc3MgVmVyaWZpY2F0aW9uIGluIGFsbCBpbnRlcmZhY2VzIHRvCisjIHByZXZlbnQgc29tZSBzcG9vZmluZyBhdHRhY2tzCituZXQuaXB2NC5jb25mLmRlZmF1bHQucnBfZmlsdGVyPTEKK25ldC5pcHY0LmNvbmYuYWxsLnJwX2ZpbHRlcj0xCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIFRDUC9JUCBTWU4gY29va2llcworI25ldC5pcHY0LnRjcF9zeW5jb29raWVzPTEKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgcGFja2V0IGZvcndhcmRpbmcgZm9yIElQdjQKKyNuZXQuaXB2NC5pcF9mb3J3YXJkPTEKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgcGFja2V0IGZvcndhcmRpbmcgZm9yIElQdjYKKyNuZXQuaXB2Ni5jb25mLmFsbC5mb3J3YXJkaW5nPTEKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZGl0aW9uYWwgc2V0dGluZ3MgLSB0aGVzZSBzZXR0aW5ncyBjYW4gaW1wcm92ZSB0aGUgbmV0d29yaworIyBzZWN1cml0eSBvZiB0aGUgaG9zdCBhbmQgcHJldmVudCBhZ2FpbnN0IHNvbWUgbmV0d29yayBhdHRhY2tzCisjIGluY2x1ZGluZyBzcG9vZmluZyBhdHRhY2tzIGFuZCBtYW4gaW4gdGhlIG1pZGRsZSBhdHRhY2tzIHRocm91Z2gKKyMgcmVkaXJlY3Rpb24uIFNvbWUgbmV0d29yayBlbnZpcm9ubWVudHMsIGhvd2V2ZXIsIHJlcXVpcmUgdGhhdCB0aGVzZQorIyBzZXR0aW5ncyBhcmUgZGlzYWJsZWQgc28gcmV2aWV3IGFuZCBlbmFibGUgdGhlbSBhcyBuZWVkZWQuCisjCisjIElnbm9yZSBJQ01QIGJyb2FkY2FzdHMKKyNuZXQuaXB2NC5pY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMgPSAxCisjCisjIElnbm9yZSBib2d1cyBJQ01QIGVycm9ycworI25ldC5pcHY0LmljbXBfaWdub3JlX2JvZ3VzX2Vycm9yX3Jlc3BvbnNlcyA9IDEKKyMKKyMgRG8gbm90IGFjY2VwdCBJQ01QIHJlZGlyZWN0cyAocHJldmVudCBNSVRNIGF0dGFja3MpCisjbmV0LmlwdjQuY29uZi5hbGwuYWNjZXB0X3JlZGlyZWN0cyA9IDAKKyNuZXQuaXB2Ni5jb25mLmFsbC5hY2NlcHRfcmVkaXJlY3RzID0gMAorIyBfb3JfCisjIEFjY2VwdCBJQ01QIHJlZGlyZWN0cyBvbmx5IGZvciBnYXRld2F5cyBsaXN0ZWQgaW4gb3VyIGRlZmF1bHQKKyMgZ2F0ZXdheSBsaXN0IChlbmFibGVkIGJ5IGRlZmF1bHQpCisjIG5ldC5pcHY0LmNvbmYuYWxsLnNlY3VyZV9yZWRpcmVjdHMgPSAxCisjCisjIERvIG5vdCBzZW5kIElDTVAgcmVkaXJlY3RzICh3ZSBhcmUgbm90IGEgcm91dGVyKQorI25ldC5pcHY0LmNvbmYuYWxsLnNlbmRfcmVkaXJlY3RzID0gMAorIworIyBEbyBub3QgYWNjZXB0IElQIHNvdXJjZSByb3V0ZSBwYWNrZXRzICh3ZSBhcmUgbm90IGEgcm91dGVyKQorI25ldC5pcHY0LmNvbmYuYWxsLmFjY2VwdF9zb3VyY2Vfcm91dGUgPSAwCisjbmV0LmlwdjYuY29uZi5hbGwuYWNjZXB0X3NvdXJjZV9yb3V0ZSA9IDAKKyMKKyMgTG9nIE1hcnRpYW4gUGFja2V0cworI25ldC5pcHY0LmNvbmYuYWxsLmxvZ19tYXJ0aWFucyA9IDEKKyMKKworI2tlcm5lbC5zaG1tYXggPSAxNDE3NjI1NjAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwc18zLjMuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmYWJhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGFuZCBwcm9jZXNzIG1vbml0b3JpbmcgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiUHJvY3BzIGNvbnRhaW5zIGEgc2V0IG9mIHN5c3RlbSB1dGlsaXRpZXMgdGhhdCBwcm92aWRlIHN5c3RlbSBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZXMgdXNpbmcgXAordGhlIC9wcm9jIGZpbGVzeXN0ZW0uIFRoZSBwYWNrYWdlIGluY2x1ZGVzIHRoZSBwcm9ncmFtcyBwcywgdG9wLCB2bXN0YXQsIHcsIGtpbGwsIGFuZCBza2lsbC4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdG9yaW91cy5vcmcvcHJvY3BzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTT0iZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGNmNjZhNDk4NDEyMDAwN2M5ODgxY2M4NzFjZjQ5ZGIgXAorICAgICAgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAibmN1cnNlcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBkYXRlLWFsdGVybmF0aXZlcworCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHJvY3BzLW5nL1Byb2R1Y3Rpb24vcHJvY3BzLW5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2N0bC5jb25mIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZmI3ZjNmNmJmOTJjZTZjNWM5ZWQ5OTQ5YWU4NThmZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMDJlNmY5ODk3NGRmY2VhYjc5ODg0ZGY5MDJjYTNkZjMwYjBlOWJhZDZkNzZhZWUwZmI1ZGNlMTdmMjY3ZjA0IgorCitTID0gIiR7V09SS0RJUn0vcHJvY3BzLW5nLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2tpbGwgLS1kaXNhYmxlLW1vZGVybi10b3AiCisKK0NQUEZMQUdTICs9ICItSSR7U30iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCVsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtzYmluZGlyfS8kaSAke0R9JHtiYXNlX3NiaW5kaXJ9LyRpOyBkb25lCisgICAgICAgIGlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybWRpciAke0R9JHtzYmluZGlyfQorICAgICAgICBmaQorCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQKKyAgICAgICAgICAgICAgICBsbiAtc2YgLi4vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQvOTktc3lzY3RsLmNvbmYKKyAgICAgICAgZmkKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYiCisKK2JpbmRpcl9wcm9ncyA9ICJmcmVlIHBraWxsIHBtYXAgcGdyZXAgcHdkeCBza2lsbCBzbmljZSB0b3AgdXB0aW1lIgorYmFzZV9iaW5kaXJfcHJvZ3MgKz0gImtpbGwgcGlkb2YgcHMgd2F0Y2giCitiYXNlX3NiaW5kaXJfcHJvZ3MgKz0gInN5c2N0bCIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAia2lsbC4xIHVwdGltZS4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3VwdGltZS4xXSA9ICIke21hbmRpcn0vbWFuMS91cHRpbWUuMSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKyAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9zYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2Q2MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gMzYzOGNjNTViNGQwODg1MWZhYmE0NjYzNWQ3MzdiMjRkMDE2NjY1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyYWQgSm9yc2NoIDxhbm9taWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogRnJpLCAyOCBGZWIgMjAxNCAyMTo1NTowMiArMTEwMAorU3ViamVjdDogW1BBVENIXSBUeXBvIGluIGZ1c2VyIG1ha2VzIC1NIG9uIGFsbCB0aGUgdGltZQorCitCcmFkIGZvdW5kIHRoYXQgZnVzZXIgaGFkIHRoZSAtTSBvcHRpb24gb24gYWxsIHRoZSB0aW1lLgorQSBzaW1wbGUgYnV0IHNpZ25pZmljYW50IHR5cG8gY2F1c2VkIHRoaXMsIHRoYW5rcyB0aGUgdGhlIHBhdGNoLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc0MDI3NQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENyYWlnIFNtYWxsIDxjc21hbGxAZW5jLmNvbS5hdT4KKy0tLQorIENoYW5nZUxvZyAgIHwgNCArKysrCisgc3JjL2Z1c2VyLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggZmQxY2NjZi4uZTVmNzg0YyAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDcgQEAKKytDaGFuZ2VzIGluIDIyLjIyCisrPT09PT09PT09PT09PT09PQorKwkqIEZpeGVkIHR5cG8gaW4gZnVzZXIgd2hpY2ggaGFzIC1NIG9uIERlYmlhbiAjNzQwMjc1CisrCisgQ2hhbmdlcyBpbiAyMi4yMQorID09PT09PT09PT09PT09PT0KKyAJKiBNaXNzaW5nIGNvbW1hIGluIGZ1c2VyKDEpIGFkZGVkIERlYmlhbiAjNzAyMzkxCitkaWZmIC0tZ2l0IGEvc3JjL2Z1c2VyLmMgYi9zcmMvZnVzZXIuYworaW5kZXggYjQ4NWY2NS4uMzg5YjMwMiAxMDA2NDQKKy0tLSBhL3NyYy9mdXNlci5jCisrKysgYi9zcmMvZnVzZXIuYworQEAgLTExNzQsNyArMTE3NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQl1c2FnZShfKCJObyBwcm9jZXNzIHNwZWNpZmljYXRpb24gZ2l2ZW4iKSk7CisgCisgCS8qIENoZWNrIGlmIC1NIGZsYWcgd2FzIHVzZWQgYW5kIGlmIHNvIGNoZWNrIG1vdW50cyAqLworLQlpZiAob3B0cyAqIE9QVF9JU01PVU5UUE9JTlQpIHsKKysJaWYgKG9wdHMgJiBPUFRfSVNNT1VOVFBPSU5UKSB7CisgCSAgICBjaGVja19tb3VudHBvaW50cygmbW91bnRzLCAmbmFtZXNfaGVhZCwgJm5hbWVzX3RhaWwpOworIAl9CisgCistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMi1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGFmY2FjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBhYTY2YWZlY2Q4YmE5Y2M0MTM5ZjI1YWIxNWVjMzE1MTczNDEzYTdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KK0RhdGU6IFdlZCwgMjAgQXVnIDIwMTQgMTA6MzE6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSA8bGltaXRzLmg+IGZvciBQQVRIX01BWAorCitXaGVuIGJ1aWxkaW5nIGFnYWluc3QgbXVzbCBsaWJjLCBQQVRIX01BWCBpcyBkZWZpbmVkIGluIDxsaW1pdHMuaD4uCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgKFNob3VsZCBiZSBpbiBuZXh0IHJlbGVhc2UgYWZ0ZXIgMjIuMjEpCistLS0KKyBzcmMvcHN0cmVlLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9wc3RyZWUuYyBiL3NyYy9wc3RyZWUuYworaW5kZXggMDcxZTZjNC4uMGQyODI2MCAxMDA2NDQKKy0tLSBhL3NyYy9wc3RyZWUuYworKysrIGIvc3JjL3BzdHJlZS5jCitAQCAtNDEsNiArNDEsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpbmNsdWRlICJpMThuLmgiCisgI2luY2x1ZGUgImNvbW0uaCIKKy0tIAorMi4wLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGUwNjU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIHByb2Nlc3NlcyBvbiB5b3VyIHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBwc21pc2MgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgZm9yIG1hbmFnaW5nIHByb2Nlc3NlcyBvbiB5b3VyIFwKK3N5c3RlbTogcHN0cmVlLCBraWxsYWxsIGFuZCBmdXNlci4gIFRoZSBwc3RyZWUgY29tbWFuZCBkaXNwbGF5cyBhIHRyZWUgXAorc3RydWN0dXJlIG9mIGFsbCBvZiB0aGUgcnVubmluZyBwcm9jZXNzZXMgb24geW91ciBzeXN0ZW0uICBUaGUga2lsbGFsbCBcCitjb21tYW5kIHNlbmRzIGEgc3BlY2lmaWVkIHNpZ25hbCAoU0lHVEVSTSBpZiBub3RoaW5nIGlzIHNwZWNpZmllZCkgdG8gXAorcHJvY2Vzc2VzIGlkZW50aWZpZWQgYnkgbmFtZS4gIFRoZSBmdXNlciBjb21tYW5kIGlkZW50aWZpZXMgdGhlIFBJRHMgXAorb2YgcHJvY2Vzc2VzIHRoYXQgYXJlIHVzaW5nIHNwZWNpZmllZCBmaWxlcyBvciBmaWxlc3lzdGVtcy4iCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpbnRsIgorTElDRU5TRSA9ICJHUEx2MiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHNtaXNjL3BzbWlzYy0ke1BWfS50YXIuZ3oiCisKK1MgPSAiJHtXT1JLRElSfS9wc21pc2MtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgImZ1c2VyIGZ1c2VyLWRvYyBraWxsYWxsIGtpbGxhbGwtZG9jIHBzdHJlZSBwc3RyZWUtZG9jIgorUEFDS0FHRVMgKz0gInBzbWlzYy1leHRyYXMiCisKK0ZJTEVTXyR7UE59ID0gIiIKK1JERVBFTkRTXyR7UE59ID0gImZ1c2VyIGtpbGxhbGwgcHN0cmVlIgorCitGSUxFU19mdXNlciA9ICIke2JpbmRpcn0vZnVzZXIuJHtCUE59IgorRklMRVNfZnVzZXItZG9jID0gIiR7bWFuZGlyfS9tYW4xL2Z1c2VyKiIKKworRklMRVNfa2lsbGFsbCA9ICIke2JpbmRpcn0va2lsbGFsbC4ke0JQTn0iCitGSUxFU19raWxsYWxsLWRvYyA9ICIke21hbmRpcn0vbWFuMS9raWxsYWxsKiIKKworRklMRVNfcHN0cmVlID0gIiR7YmluZGlyfS9wc3RyZWUiCitGSUxFU19wc3RyZWUtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BzdHJlZSoiCisKK0ZJTEVTX3BzbWlzYy1leHRyYXMgPSAiJHtiaW5kaXJ9IgorRklMRVNfcHNtaXNjLWV4dHJhcy1kb2MgPSAiJHttYW5kaXJ9IgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiOTAiCisKK0FMVEVSTkFUSVZFX2tpbGxhbGwgPSAia2lsbGFsbCIKKworQUxURVJOQVRJVkVfZnVzZXIgPSAiZnVzZXIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjXzIyLjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmFiYTllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHBzbWlzYy5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzNWMwZmQ2ZWIyMDgyODgyNjJiMzg1ZmE2NTZmMWJmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3MzIzY2FkNjE5MjEwODQ1YjY5NmQ3ZDcyMmMzODM4NTJiMmFjYjVjNDliNWIwODUyYzRmMjljNzdhODE0NWEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggXAorICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDdmYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9jb25maWctdGNwd3JhcHBlcnMucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBxdW90YS10b29scy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIHF1b3RhLXRvb2xzL2NvbmZpZ3VyZS5pbgorQEAgLTE1MSwzMyArMTUxLDQ2IEBAIEFDX1NVQlNUKFFVT1RBX05FVExJTktfUFJPRykKKyBBQ19TVUJTVChORVRMSU5LTElCUykKKworIEFDX1NFQVJDSF9MSUJTKGdldGhvc3RieW5hbWUsIG5zbCkKKy1BQ19NU0dfQ0hFQ0tJTkcoZm9yIGhvc3RfYWNjZXNzIGluIC1sd3JhcCkKKy1BQ19DQUNIRV9WQUwoYWNfY3ZfbGliX3dyYXBfbWFpbiwKKy0Jc2F2ZWRfTElCUz0iJExJQlMiCistCUxJQlM9IiRMSUJTIC1sd3JhcCIKKy0JW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0JI2luY2x1ZGUgPHN0ZGlvLmg+CistCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0JI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0JI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKy0JI2luY2x1ZGUgPHRjcGQuaD4KKy0Jc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworLQlpbnQgZGVueV9zZXZlcml0eSwgYWxsb3dfc2V2ZXJpdHk7XV0sW1tob3N0c19hY2Nlc3MoJnJlcXVlc3QpO11dKV0sCistCWRubCBXZSBhbHdheXMgcmVzdG9yZSBMSUJTIGFzIHdlIGFkZCAtbHdyYXAgaW4gdGhlIG5leHQgY2hlY2sKKy0JW2FjX2N2X2xpYl93cmFwX21haW49eWVzOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQoeWVzKV0sCistCVthY19jdl9saWJfd3JhcF9tYWluPW5vOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQobm8pXSkKKy0JXSkKKworLWlmIHRlc3QgJHthY19jdl9saWJfd3JhcF9tYWlufSA9IHllczsgdGhlbgorLQlBQ19DSEVDS19IRUFERVIodGNwZC5oLCwgWworLQkJZWNobyAnRVJST1I6IGNvdWxkIG5vdCBmaW5kIHRjcGQuaCAtIG1pc3NpbmcgVENQIHdyYXBwZXJzIHBhY2thZ2UnCistCQlleGl0IDEKKy0JXSkKKy0JTElCUz0iJExJQlMgLWx3cmFwIgorLQlBQ19ERUZJTkUoW0hPU1RTX0FDQ0VTU10sIDEsIFtVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhZF0pCistCUNPTVBJTEVfT1BUUz0iJENPTVBJTEVfT1BUUyBIT1NUU19BQ0NFU1MiCisrQUNfQVJHX1dJVEgodGNwd3JhcHBlcnMsCisrCVsgIC0td2l0aC10Y3B3cmFwcGVycz1beWVzL25vL3RyeV0gICBVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhIFtkZWZhdWx0PXllcywgaWYgYXZhaWxhYmxlLl1dLAorKwksCisrCXdpdGhfdGNwd3JhcHBlcnM9InRyeSIpCisrCisraWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4bm87IHRoZW4KKysJQUNfTVNHX0NIRUNLSU5HKGZvciBob3N0X2FjY2VzcyBpbiAtbHdyYXApCisrCUFDX0NBQ0hFX1ZBTChhY19jdl9saWJfd3JhcF9tYWluLAorKwkJc2F2ZWRfTElCUz0iJExJQlMiCisrCQlMSUJTPSIkTElCUyAtbHdyYXAiCisrCQlbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworKwkJI2luY2x1ZGUgPHN0ZGlvLmg+CisrCQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCQkjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKwkJI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysJCSNpbmNsdWRlIDx0Y3BkLmg+CisrCQlzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJlcXVlc3Q7CisrCQlpbnQgZGVueV9zZXZlcml0eSwgYWxsb3dfc2V2ZXJpdHk7XV0sW1tob3N0c19hY2Nlc3MoJnJlcXVlc3QpO11dKV0sCisrCQlkbmwgV2UgYWx3YXlzIHJlc3RvcmUgTElCUyBhcyB3ZSBhZGQgLWx3cmFwIGluIHRoZSBuZXh0IHRyeQorKwkJW2FjX2N2X2xpYl93cmFwX21haW49eWVzOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQoeWVzKV0sCisrCQlbYWNfY3ZfbGliX3dyYXBfbWFpbj1ubzsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKG5vKV0pCisrCQldKQorKworKwlpZiB0ZXN0ICJ4JGFjX2N2X2xpYl93cmFwX21haW4iID0geHllczsgdGhlbgorKwkJQUNfQ0hFQ0tfSEVBREVSKHRjcGQuaCwsIFsKKysJCQlpZiB0ZXN0ICJ4JHdpdGhfdGNwd3JhcHBlcnMiICE9IHh0cnk7IHRoZW4KKysJCQkJQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgZmluZCB0Y3BkLmggLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlXSkKKysJCQlmaQorKwkJXSkKKysKKysJCUxJQlM9IiRMSUJTIC1sd3JhcCIKKysJCUFDX0RFRklORShbSE9TVFNfQUNDRVNTXSwgMSwgW1VzZSBob3N0cy5hbGxvdyBhbmQgaG9zdHMuZGVueSBmb3IgYWNjZXNzIGNoZWNraW5nIG9mIHJwYy5ycXVvdGFkXSkKKysJCUNPTVBJTEVfT1BUUz0iJENPTVBJTEVfT1BUUyBIT1NUU19BQ0NFU1MiCisrCWVsaWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4dHJ5OyB0aGVuCisrCQlBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBmaW5kIGxpYndyYXAgLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlXSkKKysJZmkKKyBmaQorCisrCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfQ19DT05TVAorIEFDX0NfSU5MSU5FCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2ZjbnRsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZTYwZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorSW5jbHVkZSBmY250bC5oIHRvIHBhY2lmeSBjb21waWxlciBlcnJvcnMgb24gbXVzbAorbGlrZQorCitlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ2xvZmZfdCcKK0NvdmVyIHJwYyBoZWFkZXJzIHVuZGVyIHByb3BlciBjb25kaXRpb25hbAorRG9udCB1c2UgX19QIGl0cyB1bmRlZmluZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK25kZXg6IHF1b3RhLXRvb2xzL3F1b3RhLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0luZGV4OiBxdW90YS10b29scy9xdW90YS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YS5oCisrKysgcXVvdGEtdG9vbHMvcXVvdGEuaAorQEAgLTE2NSw2ICsxNjUsNiBAQCBlbnVtIHsKKyAJI2VuZGlmCisgI2VuZGlmCisgCistbG9uZyBxdW90YWN0bCBfX1AoKGludCwgY29uc3QgY2hhciAqLCBxaWRfdCwgY2FkZHJfdCkpOworK2xvbmcgcXVvdGFjdGwgKGludCwgY29uc3QgY2hhciAqLCBxaWRfdCwgY2FkZHJfdCk7CisgCisgI2VuZGlmIC8qIF9RVU9UQV8gKi8KK0luZGV4OiBxdW90YS10b29scy9xdW90YWNoZWNrLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3RhY2hlY2suYworKysrIHF1b3RhLXRvb2xzL3F1b3RhY2hlY2suYworQEAgLTE5LDYgKzE5LDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorIAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0luZGV4OiBxdW90YS10b29scy9xdW90YWlvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3RhaW8uYworKysrIHF1b3RhLXRvb2xzL3F1b3RhaW8uYworQEAgLTEyLDYgKzEyLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CitJbmRleDogcXVvdGEtdG9vbHMvZHFibGtfdjIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvZHFibGtfdjIuaAorKysrIHF1b3RhLXRvb2xzL2RxYmxrX3YyLmgKK0BAIC03LDYgKzcsNyBAQAorICNpZm5kZWYgR1VBUkRfRFFCTEtfVjJfSAorICNkZWZpbmUgR1VBUkRfRFFCTEtfVjJfSAorIAorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSAicXVvdGFfdHJlZS5oIgorIAorSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3Rhb3BzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3Rhb3BzLmMKKysrKyBxdW90YS10b29scy9xdW90YW9wcy5jCitAQCAtMzQsNyArMzQsOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CitJbmRleDogcXVvdGEtdG9vbHMvcnF1b3RhX2NsaWVudC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9ycXVvdGFfY2xpZW50LmMKKysrKyBxdW90YS10b29scy9ycXVvdGFfY2xpZW50LmMKK0BAIC0xOSw3ICsxOSw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitAQCAtMzUsNyArMzcsOSBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAibW50b3B0LmgiCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlICJycXVvdGEuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgI2luY2x1ZGUgInF1b3RhaW8uaCIKKyAjaW5jbHVkZSAicXVvdGFzeXMuaCIKK0luZGV4OiBxdW90YS10b29scy9zZXRxdW90YS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9zZXRxdW90YS5jCisrKysgcXVvdGEtdG9vbHMvc2V0cXVvdGEuYworQEAgLTcsNyArNyw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDJkOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMTg1IEBACitVc2UgcHJvcGVyIEM5OSBpbnRlZ2VyIHR5cGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcXVvdGEtdG9vbHMvYnlsYWJlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9ieWxhYmVsLmMKKysrKyBxdW90YS10b29scy9ieWxhYmVsLmMKK0BAIC0yMCw2ICsyMCw3IEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAiYnlsYWJlbC5oIgorICNpbmNsdWRlICJjb21tb24uaCIKK0BAIC0zNywzMiArMzgsMzIgQEAgc3RhdGljIHN0cnVjdCB1dWlkQ2FjaGVfcyB7CisgCisgI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDCTB4RUY1MworIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfZHVtbXkxWzU2XTsKKy0JdV9jaGFyIHNfbWFnaWNbMl07CistCXVfY2hhciBzX2R1bW15Mls0Nl07CistCXVfY2hhciBzX3V1aWRbMTZdOworLQl1X2NoYXIgc192b2x1bWVfbmFtZVsxNl07CisrCXVpbnQ4X3Qgc19kdW1teTFbNTZdOworKwl1aW50OF90IHNfbWFnaWNbMl07CisrCXVpbnQ4X3Qgc19kdW1teTJbNDZdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc192b2x1bWVfbmFtZVsxNl07CisgfTsKKyAKKy0jZGVmaW5lIGV4dDJtYWdpYyhzKQkoKHVpbnQpIHMuc19tYWdpY1swXSArICgoKHVpbnQpIHMuc19tYWdpY1sxXSkgPDwgOCkpCisrI2RlZmluZSBleHQybWFnaWMocykJKCh1aW50MzJfdCkgcy5zX21hZ2ljWzBdICsgKCgodWludDMyX3QpIHMuc19tYWdpY1sxXSkgPDwgOCkpCisgCisgI2RlZmluZSBYRlNfU1VQRVJfTUFHSUMgIlhGU0IiCisgI2RlZmluZSBYRlNfU1VQRVJfTUFHSUMyICJCU0ZYIgorIHN0cnVjdCB4ZnNfc3VwZXJfYmxvY2sgeworLQl1X2NoYXIgc19tYWdpY1s0XTsKKy0JdV9jaGFyIHNfZHVtbXlbMjhdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfZHVtbXkyWzYwXTsKKy0JdV9jaGFyIHNfZnNuYW1lWzEyXTsKKysJdWludDhfdCBzX21hZ2ljWzRdOworKwl1aW50OF90IHNfZHVtbXlbMjhdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc19kdW1teTJbNjBdOworKwl1aW50OF90IHNfZnNuYW1lWzEyXTsKKyB9OworIAorICNkZWZpbmUgUkVJU0VSX1NVUEVSX01BR0lDCSJSZUlzRXIyRnMiCisgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfZHVtbXkxWzUyXTsKKy0JdV9jaGFyIHNfbWFnaWNbMTBdOworLQl1X2NoYXIgc19kdW1teTJbMjJdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfdm9sdW1lX25hbWVbMTZdOworKwl1aW50OF90IHNfZHVtbXkxWzUyXTsKKysJdWludDhfdCBzX21hZ2ljWzEwXTsKKysJdWludDhfdCBzX2R1bW15MlsyMl07CisrCXVpbnQ4X3Qgc191dWlkWzE2XTsKKysJdWludDhfdCBzX3ZvbHVtZV9uYW1lWzE2XTsKKyB9OworIAorIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc3dhcHBlZCh1bnNpZ25lZCBzaG9ydCBhKQorQEAgLTIyMiw3ICsyMjMsNyBAQCBzdGF0aWMgY2hhciAqZ2V0X3NwZWNfYnlfeChpbnQgbiwgY29uc3QKKyAJcmV0dXJuIE5VTEw7CisgfQorIAorLXN0YXRpYyB1X2NoYXIgZnJvbWhleChjaGFyIGMpCisrc3RhdGljIHVpbnQ4X3QgZnJvbWhleChjaGFyIGMpCisgeworIAlpZiAoaXNkaWdpdChjKSkKKyAJCXJldHVybiAoYyAtICcwJyk7CitAQCAtMjM0LDcgKzIzNSw3IEBAIHN0YXRpYyB1X2NoYXIgZnJvbWhleChjaGFyIGMpCisgCisgc3RhdGljIGNoYXIgKmdldF9zcGVjX2J5X3V1aWQoY29uc3QgY2hhciAqcykKKyB7CistCXVfY2hhciB1dWlkWzE2XTsKKysJdWludDhfdCB1dWlkWzE2XTsKKyAJaW50IGk7CisgCisgCWlmIChzdHJsZW4ocykgIT0gMzYgfHwgc1s4XSAhPSAnLScgfHwgc1sxM10gIT0gJy0nIHx8IHNbMThdICE9ICctJyB8fCBzWzIzXSAhPSAnLScpCitJbmRleDogcXVvdGEtdG9vbHMvcXVvdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90LmMKKysrKyBxdW90YS10b29scy9xdW90LmMKK0BAIC00Nyw2ICs0Nyw3IEBACisgI2luY2x1ZGUgPHV0bXAuaD4KKyAjaW5jbHVkZSA8cHdkLmg+CisgI2luY2x1ZGUgPGdycC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAicG90LmgiCisgI2luY2x1ZGUgInF1b3QuaCIKK0BAIC01Niw4ICs1Nyw4IEBACisgI2luY2x1ZGUgInF1b3Rhc3lzLmgiCisgCisgI2RlZmluZQlUU0laRQk1MDAKKy1zdGF0aWMgX191aW50NjRfdCBzaXplc1tUU0laRV07Cistc3RhdGljIF9fdWludDY0X3Qgb3ZlcmZsb3c7Cisrc3RhdGljIHVpbnQ2NF90IHNpemVzW1RTSVpFXTsKKytzdGF0aWMgdWludDY0X3Qgb3ZlcmZsb3c7CisgCisgc3RhdGljIGludCBhZmxhZzsKKyBzdGF0aWMgaW50IGNmbGFnOworQEAgLTcyLDcgKzczLDcgQEAgc3RhdGljIHRpbWVfdCBub3c7CisgY2hhciAqcHJvZ25hbWU7CisgCisgc3RhdGljIHZvaWQgbW91bnR0YWJsZSh2b2lkKTsKKy1zdGF0aWMgY2hhciAqaWRuYW1lKF9fdWludDMyX3QsIGludCk7Cisrc3RhdGljIGNoYXIgKmlkbmFtZSh1aW50MzJfdCwgaW50KTsKKyBzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Cisgc3RhdGljIHZvaWQgY3JlcG9ydChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgCitAQCAtMTczLDcgKzE3NCw3IEBAIHN0YXRpYyBpbnQgcWNtcChkdV90ICogcDEsIGR1X3QgKiBwMikKKyBzdGF0aWMgdm9pZCBjcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZzZGlyKQorIHsKKyAJaW50IGk7CistCV9fdWludDY0X3QgdCA9IDA7CisrCXVpbnQ2NF90IHQgPSAwOworIAorIAlwcmludGYoXygiJXMgKCVzKTpcbiIpLCBmaWxlLCBmc2Rpcik7CisgCWZvciAoaSA9IDA7IGkgPCBUU0laRSAtIDE7IGkrKykKK0BAIC0yMTksNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGUsIGNvbgorIAl9CisgfQorIAorLXN0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIF9fdWludDMyX3QgaWQsIGludCBieWlkKQorK3N0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIHVpbnQzMl90IGlkLCBpbnQgYnlpZCkKKyB7CisgCXN0cnVjdCBwYXNzd2QgKnB3OworIAlzdHJ1Y3QgZ3JvdXAgICpncjsKK0BAIC0yNDAsNyArMjQxLDcgQEAgc3RhdGljIGlkY2FjaGVfdCAqZ2V0bmV4dGVudChpbnQgdHlwZSwgXworIAlyZXR1cm4gJmlkYzsKKyB9CisgCistc3RhdGljIGNoYXIgKmlkbmFtZShfX3VpbnQzMl90IGlkLCBpbnQgdHlwZSkKKytzdGF0aWMgY2hhciAqaWRuYW1lKHVpbnQzMl90IGlkLCBpbnQgdHlwZSkKKyB7CisgCWlkY2FjaGVfdCAqbmNwLCAqaWRwOworIAlzdGF0aWMgaWRjYWNoZV90IG5jWzJdW05JRF07CitAQCAtMjg2LDggKzI4Nyw4IEBAIHN0YXRpYyB2b2lkIGFjY3RYRlMoeGZzX2JzdGF0X3QgKnApCisgeworIAlyZWdpc3RlciBkdV90ICpkcDsKKyAJZHVfdCAqKmhwOworLQlfX3VpbnQ2NF90IHNpemU7CistCV9fdWludDMyX3QgaSwgaWQ7CisrCXVpbnQ2NF90IHNpemU7CisrCXVpbnQzMl90IGksIGlkOworIAorIAlpZiAoKHAtPmJzX21vZGUgJiBTX0lGTVQpID09IDApCisgCQlyZXR1cm47CitJbmRleDogcXVvdGEtdG9vbHMvcXVvdC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90LmgKKysrKyBxdW90YS10b29scy9xdW90LmgKK0BAIC0zNSwxOCArMzUsMTggQEAKKyAjZGVmaW5lCVNFQzI0SFIJKDYwKjYwKjI0KQkvKiBzZWNvbmRzIHBlciBkYXkgKi8KKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCV9fdWludDMyX3QgaWQ7CisrCXVpbnQzMl90IGlkOworIAljaGFyIG5hbWVbVVRfTkFNRVNJWkUgKyAxXTsKKyB9IGlkY2FjaGVfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCBkdSB7CisgCXN0cnVjdCBkdSAqbmV4dDsKKy0JX191aW50NjRfdCBibG9ja3M7CistCV9fdWludDY0X3QgYmxvY2tzMzA7CistCV9fdWludDY0X3QgYmxvY2tzNjA7CistCV9fdWludDY0X3QgYmxvY2tzOTA7CistCV9fdWludDY0X3QgbmZpbGVzOworLQlfX3VpbnQzMl90IGlkOworKwl1aW50NjRfdCBibG9ja3M7CisrCXVpbnQ2NF90IGJsb2NrczMwOworKwl1aW50NjRfdCBibG9ja3M2MDsKKysJdWludDY0X3QgYmxvY2tzOTA7CisrCXVpbnQ2NF90IG5maWxlczsKKysJdWludDMyX3QgaWQ7CisgfSBkdV90OworIAorICNkZWZpbmUJTkRVCTYwMDAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNhMmZmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitSZXBsYWNlIGdldHJwY2J5bnVtYmVyX3Igd2l0aCBnZXRycGNieW51bWJlcgorbXVzbCBhbmQgdWNsaWJjIGRvbnQgaW1wbGVtZW50IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IHF1b3RhLXRvb2xzL3N2Y19zb2NrZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvc3ZjX3NvY2tldC5jCisrKysgcXVvdGEtdG9vbHMvc3ZjX3NvY2tldC5jCitAQCAtNTUsNyArNTUsOCBAQCBzdGF0aWMgaW50IHN2Y19zb2NrZXQgKHVfbG9uZyBudW1iZXIsIGluCisgCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgCisgCWlmICghcG9ydCkgeworLQkJcmV0ID0gZ2V0cnBjYnludW1iZXJfcihudW1iZXIsICZycGNidWYsIHJwY2RhdGEsIHNpemVvZihycGNkYXRhKSwgJnJwY3ApOworKwkJcnBjcCA9IGdldHJwY2J5bnVtYmVyKG51bWJlcik7CisrCQlyZXQgPSAwOworIAkJaWYgKHJldCA9PSAwICYmIHJwY3AgIT0gTlVMTCkgeworIAkJCS8qIEZpcnN0IHRyeSBuYW1lICovCisgCQkJcmV0ID0gZ2V0c2VydmJ5bmFtZV9yKHJwY3AtPnJfbmFtZSwgcHJvdG8sICZzZXJ2YnVmLCBzZXJ2ZGF0YSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNGIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1vbml0b3JpbmcgJiBsaW1pdGluZyB1c2VyIGRpc2sgdXNhZ2UgcGVyIGZpbGVzeXN0ZW0iCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4cXVvdGEvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE4MTM2JmF0aWQ9MTE4MTM2IgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9xdW90YS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzM7bWQ1PTMzMWM3ZDc3NzQ0YmZlMGFkMjQwMjdmMDY1MTAyOGVjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JxdW90YV9zZXJ2ZXIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mZTdlMGQ3ZTExYzZmODIwZjhmYTYyYTVhZjcxMjMwZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zdmNfc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9MjRkNWE4NzkyZGE0NTkxMDc4NmVlYWM3NTBiZThjZWIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGludXhxdW90YS9xdW90YS10b29scy8ke1BWfS9xdW90YS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZjbnRsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2ggXAorCSAgICIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImE4YTVkZjI2MjI2MWU2NTk3MTZjY2FkMmE1ZDZkZjBkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY0YzJmNDhhYmY5NGJiZGMzOTZkZjMzZDI3NmYyZTlkMTlhZjU4YzIzMmNiODVlZWY5YzE3NGE3NDdjMzM3OTUiCisKK1MgPSAiJHtXT1JLRElSfS9xdW90YS10b29scyIKKworREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSBlMmZzcHJvZ3MiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHBrZ2NvbmZpZworCitDRkxBR1MgKz0gIi1JPSR7aW5jbHVkZWRpcn0vdGlycGMiCitMREZMQUdTICs9ICItbHRpcnBjIgorQVNORUVERUQgPSAiIgorRVhUUkFfT0VNQUtFICs9ICdTVFJJUD0iIicKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyBycGMgYnNkIgorUEFDS0FHRUNPTkZJR19saWJjLW11c2wgPSAidGNwLXdyYXBwZXJzIHJwYyIKKworUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC10Y3B3cmFwcGVycywtLXdpdGhvdXQtdGNwd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1tycGNdID0gIi0tZW5hYmxlLXJwYz15ZXMsLS1lbmFibGUtcnBjPW5vLGxpYnRpcnBjIgorUEFDS0FHRUNPTkZJR1tic2RdID0gIi0tZW5hYmxlLWJzZF9iZWhhdmlvdXI9eWVzLC0tZW5hYmxlLWJzZF9iZWhhdmlvdXI9bm8sIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUk9PVERJUj0ke0R9IGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZWY5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMjIxIEBACitGcm9tIDJhNDRkODYyMjMzZjIxMjY1ODFlMjkwZDU2OGUxYzhiOGYyZWI5ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsbyBMYW5kbWV0ZXIgPGNsYW5kbWV0ZXJAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAxNToyODo0NSArMDAwMAorU3ViamVjdDogW1BBVENIXSBBdm9pZCB1c2Ugb2YgZ2xpYmMgc3lzL2NkZWZzLmggaGVhZGVyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3JjL2NoZWNrX2JvdW5kLmMgIHwgICAgMiArLQorIHNyYy9wbWFwX3N2Yy5jICAgICB8ICAgMTAgKysrKystLS0tLQorIHNyYy9ycGNiX3N2Yy5jICAgICB8ICAgMTAgKysrKystLS0tLQorIHNyYy9ycGNiX3N2Y180LmMgICB8ICAgMTQgKysrKysrKy0tLS0tLS0KKyBzcmMvcnBjYl9zdmNfY29tLmMgfCAgIDQ2ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvcnBjYmluZC5jICAgICAgfCAgIDEyICsrKysrKy0tLS0tLQorIHNyYy91dGlsLmMgICAgICAgICB8ICAgIDIgKy0KKyBzcmMvd2FybXN0YXJ0LmMgICAgfCAgICA0ICsrLS0KKyA4IGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NoZWNrX2JvdW5kLmMgYi9zcmMvY2hlY2tfYm91bmQuYworaW5kZXggYzcwYjg0NS4uNWQyMTczMCAxMDA2NDQKKy0tLSBhL3NyYy9jaGVja19ib3VuZC5jCisrKysgYi9zcmMvY2hlY2tfYm91bmQuYworQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBmZGxpc3QgKmZkaGVhZDsJLyogTGluayBsaXN0IG9mIHRoZSBjaGVjayBmZCdzICovCisgc3RhdGljIHN0cnVjdCBmZGxpc3QgKmZkdGFpbDsKKyBzdGF0aWMgY2hhciAqbnVsbHN0cmluZyA9ICIiOworIAorLXN0YXRpYyBib29sX3QgY2hlY2tfYm91bmQgX19QKChzdHJ1Y3QgZmRsaXN0ICosIGNoYXIgKnVhZGRyKSk7Cisrc3RhdGljIGJvb2xfdCBjaGVja19ib3VuZCAoc3RydWN0IGZkbGlzdCAqLCBjaGFyICp1YWRkcik7CisgCisgLyoKKyAgKiBSZXR1cm5zIDEgaWYgdGhlIGdpdmVuIGFkZHJlc3MgaXMgYm91bmQgZm9yIHRoZSBnaXZlbiBhZGRyICYgdHJhbnNwb3J0CitkaWZmIC0tZ2l0IGEvc3JjL3BtYXBfc3ZjLmMgYi9zcmMvcG1hcF9zdmMuYworaW5kZXggYWQyOGI5My4uOWM3ZDQwOSAxMDA2NDQKKy0tLSBhL3NyYy9wbWFwX3N2Yy5jCisrKysgYi9zcmMvcG1hcF9zdmMuYworQEAgLTYwLDExICs2MCwxMSBAQCBzdGF0aWMJY2hhciBzY2NzaWRbXSA9ICJAKCMpcG1hcF9zdmMuYyAxLjIzIDg5LzA0LzA1IENvcHlyIDE5ODQgU3VuIE1pY3JvIjsKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorICNpbmNsdWRlICJ4bG9nLmgiCisgI2luY2x1ZGUgPHJwYy9zdmNfc29jLmg+IC8qIHN2Y19nZXRjYWxsZXIgcm91dGluZSBkZWZpbml0aW9uICovCistc3RhdGljIHN0cnVjdCBwbWFwbGlzdCAqZmluZF9zZXJ2aWNlX3BtYXAgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwKKy0JCQkJCSAgICAgICBycGNwcm90X3QpKTsKKy1zdGF0aWMgYm9vbF90IHBtYXBwcm9jX2NoYW5nZSBfX1AoKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgdV9sb25nKSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19nZXRwb3J0IF9fUCgoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19kdW1wIF9fUCgoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKSk7Cisrc3RhdGljIHN0cnVjdCBwbWFwbGlzdCAqZmluZF9zZXJ2aWNlX3BtYXAgKHJwY3Byb2dfdCwgcnBjdmVyc190LAorKwkJCQkJICAgICAgIHJwY3Byb3RfdCk7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19jaGFuZ2UgKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgdV9sb25nKTsKKytzdGF0aWMgYm9vbF90IHBtYXBwcm9jX2dldHBvcnQgKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKik7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19kdW1wIChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICopOworIAorIC8qCisgICogQ2FsbGVkIGZvciBhbGwgdGhlIHZlcnNpb24gMiBpbnF1aXJpZXMuCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjLmMgYi9zcmMvcnBjYl9zdmMuYworaW5kZXggYmQ5MjIwMS4uNmM3ZjdmZSAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiX3N2Yy5jCisrKysgYi9zcmMvcnBjYl9zdmMuYworQEAgLTUzLDEwICs1MywxMCBAQAorICNpbmNsdWRlICJycGNiaW5kLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKKyAKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl8zX2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCQkgICBycGN2ZXJzX3QpKTsKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZHVtcF8zX2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCQlycGN2ZXJzX3QpKTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl8zX2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKysJCQkJCSAgIHJwY3ZlcnNfdCk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfM19sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCQlycGN2ZXJzX3QpOworIAorIC8qCisgICogQ2FsbGVkIGJ5IHN2Y19nZXRyZXFzZXQuIFRoZXJlIGlzIGEgc2VwYXJhdGUgc2VydmVyIGhhbmRsZSBmb3IKK0BAIC03NSw3ICs3NSw3IEBAIHJwY2Jfc2VydmljZV8zKHN0cnVjdCBzdmNfcmVxICpycXN0cCwgU1ZDWFBSVCAqdHJhbnNwKQorIAl9IGFyZ3VtZW50OworIAljaGFyICpyZXN1bHQ7CisgCXhkcnByb2NfdCB4ZHJfYXJndW1lbnQsIHhkcl9yZXN1bHQ7CistCXZvaWQgKigqbG9jYWwpIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworKwl2b2lkICooKmxvY2FsKSAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7CisgCXJwY3Byb2dfdCBzZXRwcm9nID0gMDsKKyAKKyAJcnBjYnNfcHJvY2luZm8oUlBDQlZFUlNfM19TVEFULCBycXN0cC0+cnFfcHJvYyk7CitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjXzQuYyBiL3NyYy9ycGNiX3N2Y180LmMKK2luZGV4IGI2NzM0NTIuLjY3NjRjMGEgMTAwNjQ0CistLS0gYS9zcmMvcnBjYl9zdmNfNC5jCisrKysgYi9zcmMvcnBjYl9zdmNfNC5jCitAQCAtNTQsMTMgKzU0LDEzIEBACisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAjaW5jbHVkZSAieGxvZy5oIgorIAorLXN0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRyXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKy0JCQkJICAgICAgcnBjdmVyc190KSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldHZlcnNhZGRyXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfNF9sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCSAgICAgIHJwY3ZlcnNfdCk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldHZlcnNhZGRyXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIHN0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRybGlzdF80X2xvY2FsCistCV9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworLXN0YXRpYyB2b2lkIGZyZWVfcnBjYl9lbnRyeV9saXN0IF9fUCgocnBjYl9lbnRyeV9saXN0X3B0ciAqKSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfNF9sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKysJKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworK3N0YXRpYyB2b2lkIGZyZWVfcnBjYl9lbnRyeV9saXN0IChycGNiX2VudHJ5X2xpc3RfcHRyICopOworK3N0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIAorIC8qCisgICogQ2FsbGVkIGJ5IHN2Y19nZXRyZXFzZXQuIFRoZXJlIGlzIGEgc2VwYXJhdGUgc2VydmVyIGhhbmRsZSBmb3IKK0BAIC03OCw3ICs3OCw3IEBAIHJwY2Jfc2VydmljZV80KHN0cnVjdCBzdmNfcmVxICpycXN0cCwgU1ZDWFBSVCAqdHJhbnNwKQorIAl9IGFyZ3VtZW50OworIAljaGFyICpyZXN1bHQ7CisgCXhkcnByb2NfdCB4ZHJfYXJndW1lbnQsIHhkcl9yZXN1bHQ7CistCXZvaWQgKigqbG9jYWwpIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworKwl2b2lkICooKmxvY2FsKSAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7CisgCXJwY3Byb2dfdCBzZXRwcm9nID0gMDsKKyAKKyAJcnBjYnNfcHJvY2luZm8oUlBDQlZFUlNfNF9TVEFULCBycXN0cC0+cnFfcHJvYyk7CitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjX2NvbS5jIGIvc3JjL3JwY2Jfc3ZjX2NvbS5jCitpbmRleCBmZjljZTZiLi44YWVmOWU1IDEwMDY0NAorLS0tIGEvc3JjL3JwY2Jfc3ZjX2NvbS5jCisrKysgYi9zcmMvcnBjYl9zdmNfY29tLmMKK0BAIC0xMDAsMjkgKzEwMCwyOSBAQCBzdHJ1Y3QgZmluZm8geworIHN0YXRpYyBzdHJ1Y3QgZmluZm8gICAgIEZJTkZPW05GT1JXQVJEXTsKKyAKKyAKKy1zdGF0aWMgYm9vbF90IHhkcl9lbmNhcF9wYXJtcyBfX1AoKFhEUiAqLCBzdHJ1Y3QgZW5jYXBfcGFybXMgKikpOworLXN0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfYXJncyBfX1AoKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKikpOworLXN0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfcmVzdWx0IF9fUCgoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKSk7Cistc3RhdGljIGJvb2xfdCB4ZHJfb3BhcXVlX3Bhcm1zIF9fUCgoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKSk7Cistc3RhdGljIGludCBmaW5kX3JtdGNhbGxmZF9ieV9uZXRpZCBfX1AoKGNoYXIgKikpOworLXN0YXRpYyBTVkNYUFJUICpmaW5kX3JtdGNhbGx4cHJ0X2J5X2ZkIF9fUCgoaW50KSk7Cistc3RhdGljIGludCBmb3J3YXJkX3JlZ2lzdGVyIF9fUCgodV9pbnQzMl90LCBzdHJ1Y3QgbmV0YnVmICosIGludCwgY2hhciAqLAorLSAgICBycGNwcm9jX3QsIHJwY3ZlcnNfdCwgdV9pbnQzMl90ICopKTsKKy1zdGF0aWMgc3RydWN0IGZpbmZvICpmb3J3YXJkX2ZpbmQgX19QKCh1X2ludDMyX3QpKTsKKy1zdGF0aWMgaW50IGZyZWVfc2xvdF9ieV94aWQgX19QKCh1X2ludDMyX3QpKTsKKy1zdGF0aWMgaW50IGZyZWVfc2xvdF9ieV9pbmRleCBfX1AoKGludCkpOworLXN0YXRpYyBpbnQgbmV0YnVmY21wIF9fUCgoc3RydWN0IG5ldGJ1ZiAqLCBzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgc3RydWN0IG5ldGJ1ZiAqbmV0YnVmZHVwIF9fUCgoc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIHZvaWQgbmV0YnVmZnJlZSBfX1AoKHN0cnVjdCBuZXRidWYgKikpOworLXN0YXRpYyBpbnQgY2hlY2tfcm10Y2FsbHMgX19QKChzdHJ1Y3QgcG9sbGZkICosIGludCkpOworLXN0YXRpYyB2b2lkIHhwcnRfc2V0X2NhbGxlciBfX1AoKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopKTsKKy1zdGF0aWMgdm9pZCBzZW5kX3N2Y3N5c2VyciBfX1AoKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopKTsKKy1zdGF0aWMgdm9pZCBoYW5kbGVfcmVwbHkgX19QKChpbnQsIFNWQ1hQUlQgKikpOworLXN0YXRpYyB2b2lkIGZpbmRfdmVyc2lvbnMgX19QKChycGNwcm9nX3QsIGNoYXIgKiwgcnBjdmVyc190ICosIHJwY3ZlcnNfdCAqKSk7Cistc3RhdGljIHJwY2JsaXN0X3B0ciBmaW5kX3NlcnZpY2UgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgY2hhciAqKSk7Cistc3RhdGljIGNoYXIgKmdldG93bmVyIF9fUCgoU1ZDWFBSVCAqLCBjaGFyICosIHNpemVfdCkpOworLXN0YXRpYyBpbnQgYWRkX3BtYXBsaXN0IF9fUCgoUlBDQiAqKSk7Cistc3RhdGljIGludCBkZWxfcG1hcGxpc3QgX19QKChSUENCICopKTsKKytzdGF0aWMgYm9vbF90IHhkcl9lbmNhcF9wYXJtcyAoWERSICosIHN0cnVjdCBlbmNhcF9wYXJtcyAqKTsKKytzdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX2FyZ3MgKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfcm10Y2FsbF9yZXN1bHQgKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfb3BhcXVlX3Bhcm1zIChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopOworK3N0YXRpYyBpbnQgZmluZF9ybXRjYWxsZmRfYnlfbmV0aWQgKGNoYXIgKik7Cisrc3RhdGljIFNWQ1hQUlQgKmZpbmRfcm10Y2FsbHhwcnRfYnlfZmQgKGludCk7Cisrc3RhdGljIGludCBmb3J3YXJkX3JlZ2lzdGVyICh1X2ludDMyX3QsIHN0cnVjdCBuZXRidWYgKiwgaW50LCBjaGFyICosCisrICAgIHJwY3Byb2NfdCwgcnBjdmVyc190LCB1X2ludDMyX3QgKik7Cisrc3RhdGljIHN0cnVjdCBmaW5mbyAqZm9yd2FyZF9maW5kICh1X2ludDMyX3QpOworK3N0YXRpYyBpbnQgZnJlZV9zbG90X2J5X3hpZCAodV9pbnQzMl90KTsKKytzdGF0aWMgaW50IGZyZWVfc2xvdF9ieV9pbmRleCAoaW50KTsKKytzdGF0aWMgaW50IG5ldGJ1ZmNtcCAoc3RydWN0IG5ldGJ1ZiAqLCBzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyBzdHJ1Y3QgbmV0YnVmICpuZXRidWZkdXAgKHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIHZvaWQgbmV0YnVmZnJlZSAoc3RydWN0IG5ldGJ1ZiAqKTsKKytzdGF0aWMgaW50IGNoZWNrX3JtdGNhbGxzIChzdHJ1Y3QgcG9sbGZkICosIGludCk7Cisrc3RhdGljIHZvaWQgeHBydF9zZXRfY2FsbGVyIChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKTsKKytzdGF0aWMgdm9pZCBzZW5kX3N2Y3N5c2VyciAoU1ZDWFBSVCAqLCBzdHJ1Y3QgZmluZm8gKik7Cisrc3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5IChpbnQsIFNWQ1hQUlQgKik7Cisrc3RhdGljIHZvaWQgZmluZF92ZXJzaW9ucyAocnBjcHJvZ190LCBjaGFyICosIHJwY3ZlcnNfdCAqLCBycGN2ZXJzX3QgKik7Cisrc3RhdGljIHJwY2JsaXN0X3B0ciBmaW5kX3NlcnZpY2UgKHJwY3Byb2dfdCwgcnBjdmVyc190LCBjaGFyICopOworK3N0YXRpYyBjaGFyICpnZXRvd25lciAoU1ZDWFBSVCAqLCBjaGFyICosIHNpemVfdCk7Cisrc3RhdGljIGludCBhZGRfcG1hcGxpc3QgKFJQQ0IgKik7Cisrc3RhdGljIGludCBkZWxfcG1hcGxpc3QgKFJQQ0IgKik7CisgCisgLyoKKyAgKiBTZXQgYSBtYXBwaW5nIG9mIHByb2dyYW0sIHZlcnNpb24sIG5ldGlkCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2JpbmQuYyBiL3NyYy9ycGNiaW5kLmMKK2luZGV4IDA0NWRhYTEuLjEzNzAxMWIgMTAwNjQ0CistLS0gYS9zcmMvcnBjYmluZC5jCisrKysgYi9zcmMvcnBjYmluZC5jCitAQCAtMTM1LDEzICsxMzUsMTMgQEAgY2hhciAqdGNwX3VhZGRyOwkvKiBVbml2ZXJzYWwgVENQIGFkZHJlc3MgKi8KKyBzdGF0aWMgY2hhciBzZXJ2bmFtZVtdID0gInJwY2JpbmQiOworIHN0YXRpYyBjaGFyIHN1cGVydXNlcltdID0gInN1cGVydXNlciI7CisgCistaW50IG1haW4gX19QKChpbnQsIGNoYXIgKltdKSk7CisraW50IG1haW4gKGludCwgY2hhciAqW10pOworIAorLXN0YXRpYyBpbnQgaW5pdF90cmFuc3BvcnQgX19QKChzdHJ1Y3QgbmV0Y29uZmlnICopKTsKKy1zdGF0aWMgdm9pZCByYmxsaXN0X2FkZCBfX1AoKHJwY3Byb2dfdCwgcnBjdmVyc190LCBzdHJ1Y3QgbmV0Y29uZmlnICosCistCQkJICAgICBzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgdm9pZCB0ZXJtaW5hdGUgX19QKChpbnQpKTsKKy1zdGF0aWMgdm9pZCBwYXJzZWFyZ3MgX19QKChpbnQsIGNoYXIgKltdKSk7Cisrc3RhdGljIGludCBpbml0X3RyYW5zcG9ydCAoc3RydWN0IG5ldGNvbmZpZyAqKTsKKytzdGF0aWMgdm9pZCByYmxsaXN0X2FkZCAocnBjcHJvZ190LCBycGN2ZXJzX3QsIHN0cnVjdCBuZXRjb25maWcgKiwKKysJCQkgICAgIHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIHZvaWQgdGVybWluYXRlIChpbnQpOworK3N0YXRpYyB2b2lkIHBhcnNlYXJncyAoaW50LCBjaGFyICpbXSk7CisgCisgaW50CisgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorZGlmZiAtLWdpdCBhL3NyYy91dGlsLmMgYi9zcmMvdXRpbC5jCitpbmRleCBhNmM4MzViLi4zM2I5ZTRmIDEwMDY0NAorLS0tIGEvc3JjL3V0aWwuYworKysrIGIvc3JjL3V0aWwuYworQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW40OworIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpsb2NhbF9pbjY7CisgI2VuZGlmCisgCistc3RhdGljIGludCBiaXRtYXNrY21wIF9fUCgodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50KSk7Cisrc3RhdGljIGludCBiaXRtYXNrY21wICh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCBpbnQpOworIAorIC8qCisgICogRm9yIGFsbCBiaXRzIHNldCBpbiAibWFzayIsIGNvbXBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbgorZGlmZiAtLWdpdCBhL3NyYy93YXJtc3RhcnQuYyBiL3NyYy93YXJtc3RhcnQuYworaW5kZXggYjZlYjczZS4uNDJkZDNhZiAxMDA2NDQKKy0tLSBhL3NyYy93YXJtc3RhcnQuYworKysrIGIvc3JjL3dhcm1zdGFydC5jCitAQCAtNTgsOCArNTgsOCBAQAorICNkZWZpbmUJUE1BUEZJTEUJUlBDQklORF9TVEFURURJUiAiL3BvcnRtYXAueGRyIgorICNlbmRpZgorIAorLXN0YXRpYyBib29sX3Qgd3JpdGVfc3RydWN0IF9fUCgoY2hhciAqLCB4ZHJwcm9jX3QsIHZvaWQgKikpOworLXN0YXRpYyBib29sX3QgcmVhZF9zdHJ1Y3QgX19QKChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKSk7Cisrc3RhdGljIGJvb2xfdCB3cml0ZV9zdHJ1Y3QgKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopOworK3N0YXRpYyBib29sX3QgcmVhZF9zdHJ1Y3QgKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopOworIAorIHN0YXRpYyBib29sX3QKKyB3cml0ZV9zdHJ1Y3QoY2hhciAqZmlsZW5hbWUsIHhkcnByb2NfdCBzdHJ1Y3Rwcm9jLCB2b2lkICpsaXN0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtdWNsaWJjLW5zcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhNTVmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gYjhmMGQ3YjczMThiYTM0NGMyNTc4NWQ2ZjVjZjNmOGRlOTgwMTJkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4KK0RhdGU6IFR1ZSwgMiBGZWIgMjAxMCAwOTozNjowMyArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gdWNsaWJjLW5zcworCistLS0KKyBzcmMvcnBjYmluZC5jIHwgICAgNCArKysrCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcnBjYmluZC5jIGIvc3JjL3JwY2JpbmQuYworaW5kZXggNTI1ZmZiYS4uMWZlMWE2MCAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiaW5kLmMKKysrKyBiL3NyYy9ycGNiaW5kLmMKK0BAIC02Nyw3ICs2NywxMSBAQAorICNpbmNsdWRlIDxwd2QuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKysjZGVmaW5lIF9fbnNzX2NvbmZpZ3VyZV9sb29rdXAoeCx5KQorKyNlbHNlCisgI2luY2x1ZGUgPG5zcy5oPgorKyNlbmRpZgorICNpbmNsdWRlICJjb25maWcuaCIKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorIAorLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9pbml0LmQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NDk5YWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorIworIyBzdGFydC9zdG9wIHJwY2JpbmQgZGFlbW9uLgorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBycGNiaW5kCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFJQQyBwb3J0bWFwcGVyIHJlcGxhY2VtZW50CisjIERlc2NyaXB0aW9uOiAgICAgICBycGNiaW5kIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKKyMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQorIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KKyMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQorIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCisjIyMgRU5EIElOSVQgSU5GTworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAtZiAvc2Jpbi9ycGNiaW5kIHx8IGV4aXQgMAorCitPUFRJT05TPSIiCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9ycGNiaW5kIF0KK3RoZW4KKyAgICAuIC9ldGMvZGVmYXVsdC9ycGNiaW5kCitlbGlmIFsgLWYgL2V0Yy9ycGNiaW5kLmNvbmYgXQordGhlbgorICAgIC4gL2V0Yy9ycGNiaW5kLmNvbmYKK2ZpCisKK3N0YXJ0ICgpCit7CisgICAgZWNobyAtbiAiU3RhcnRpbmcgcnBjYmluZCBkYWVtb24uLi4iCisgICAgaWYgcGlkb2YgL3NiaW4vcnBjYmluZCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gImFscmVhZHkgcnVubmluZy4iCisgICAgICAgIGV4aXQgMAorICAgIGZpCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9ycGNiaW5kIC0tICIkQCIKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiZG9uZS4iCisgICAgZWxzZQorICAgICAgICBlY2hvICJmYWlsZWQuIgorICAgIGZpCit9CisKK3N0b3AgKCkKK3sKKyAgICBlY2hvICJTdG9wcGluZyBycGNiaW5kIGRhZW1vbi4uLiIKKyAgICBpZiAhIHBpZG9mIC9zYmluL3JwY2JpbmQgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJub3QgcnVubmluZy4iCisgICAgICAgIHJldHVybiAwCisgICAgZmkKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgL3NiaW4vcnBjYmluZAorICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJkb25lLiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gImZhaWxlZC4iCisgICAgZmkKK30KKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIHN0YXJ0ICRPUFRJT05TCisgICAgICAgIDs7CisgICAgc3RvcCkKKyAgICAgICAgc3RvcAorICAgICAgICA7OworICAgIGZvcmNlLXJlbG9hZCkKKyAgICAgICAgc3RvcAorICAgICAgICBzdGFydCAkT1BUSU9OUworICAgICAgICA7OworICAgIHJlc3RhcnQpCisgICAgICAgIHN0b3AKKyAgICAgICAgc3RhcnQgJE9QVElPTlMKKyAgICAgICAgOzsKKyAgICBzdGF0dXMpCisgICAgICAgIHN0YXR1cyAvc2Jpbi9ycGNiaW5kCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3JwY2JpbmQge3N0YXJ0fHN0b3B8Zm9yY2UtcmVsb2FkfHJlc3RhcnR8c3RhdHVzfSIKKyAgICAgICAgZXhpdCAxCisgICAgICAgIDs7Citlc2FjCisKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9tdXNsLXN1bnJwYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9tdXNsLXN1bnJwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzcyYTFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL211c2wtc3VucnBjLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1RoZSBtdXNsIGltcGxlbWVudGF0aW9uIG9mIGdldGFkZHJpbmZvIGFuZCBnZXRzZXJ2YnluYW1lIGRvZXMgbm90CithbGlhc2VzLiBBcyBhIHdvcmthcm91bmQgd2UgdXNlICJzdW5wcmMiIGluc3RlYWQgb2YgInBvcnRtYXBwZXIiCisKK3BvcnRlZCBmcm9tIGFscGluZSBsaW51eAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcnBjYmluZC0wLjIuMi9zcmMvcnBjYmluZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBjYmluZC0wLjIuMi5vcmlnL3NyYy9ycGNiaW5kLmMKKysrKyBycGNiaW5kLTAuMi4yL3NyYy9ycGNiaW5kLmMKK0BAIC00OTEsNyArNDkxLDcgQEAgaW5pdF90cmFuc3BvcnQoc3RydWN0IG5ldGNvbmZpZyAqbmNvbmYpCisgCQkJaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhob3N0c1tuaG9zdHNiYWtdLAorIAkJCSAgICBzZXJ2bmFtZSwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgeworIAkJCSAgaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhob3N0c1tuaG9zdHNiYWtdLAorLQkJCQkJCSAgICAicG9ydG1hcHBlciIsICZoaW50cywgJnJlcykpICE9IDApIHsKKysJCQkJCQkgICAgInN1bnJwYyIsICZoaW50cywgJnJlcykpICE9IDApIHsKKyAJCQkJc3lzbG9nKExPR19FUlIsCisgCQkJCSAgICAiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLAorIAkJCQkgICAgbmNvbmYtPm5jX25ldGlkLCBnYWlfc3RyZXJyb3IoYWljb2RlKSk7CitAQCAtNTY0LDcgKzU2NCw3IEBAIGluaXRfdHJhbnNwb3J0KHN0cnVjdCBuZXRjb25maWcgKm5jb25mKQorIAkJaWYgKChzdHJjbXAobmNvbmYtPm5jX25ldGlkLCAibG9jYWwiKSAhPSAwKSAmJgorIAkJICAgIChzdHJjbXAobmNvbmYtPm5jX25ldGlkLCAidW5peCIpICE9IDApKSB7CisgCQkJaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhOVUxMLCBzZXJ2bmFtZSwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CistCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsICJwb3J0bWFwcGVyIiwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CisrCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsICJzdW5ycGMiLCAmaGludHMsICZyZXMpKSE9IDApIHsKKyAJCQkgIHByaW50ZigiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLCAgbmNvbmYtPm5jX25ldGlkLCBnYWlfc3RyZXJyb3IoYWljb2RlKSk7CisgCQkJICBzeXNsb2coTE9HX0VSUiwKKyAJCQkJICAgICJjYW5ub3QgZ2V0IGxvY2FsIGFkZHJlc3MgZm9yICVzOiAlcyIsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9yZW1vdmUtc3lzLXF1ZXVlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZmM5NzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaApAQCAtMCwwICsxLDIyIEBACittdXNsIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBoZWFkZXIgYW5kIGhlcmUgaXMgcmVhc29uaW5nCitodHRwOi8vd2lraS5tdXNsLWxpYmMub3JnL3dpa2kvRkFRI1E6X3doeV9pc19zeXMuMkZxdWV1ZS5oX25vdF9pbmNsdWRlZF8uM0YKKworU28gaW5jbHVkZSBpdCBvbmx5IHdoZW4gX19HTElCQ19fIGlzIGRlZmluZWQgd2hpY2ggaXMgdHJ1ZSBmb3IgdWNsaWJjIGFuZCBnbGliYworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycGNiaW5kLTAuMi4yL3NyYy91dGlsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycGNiaW5kLTAuMi4yLm9yaWcvc3JjL3V0aWwuYworKysrIHJwY2JpbmQtMC4yLjIvc3JjL3V0aWwuYworQEAgLTQxLDcgKzQxLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaWZkZWYgX19HTElCQ19fCisgI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxpZmFkZHJzLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRkZmJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZgpAQCAtMCwwICsxLDMgQEAKKyMgT3B0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byBycGNiaW5kLgorIworUlBDQklORF9PUFRTPSIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FlMjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJQQyBCaW5kIFNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc29ja2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9ycGNiaW5kLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjYmluZCAtdyAkUlBDQklORF9PUFRTCitTdWNjZXNzRXhpdFN0YXR1cz0yCisKK1tJbnN0YWxsXQorQWxzbz1ycGNiaW5kLnNvY2tldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc29ja2V0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2MxZDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zb2NrZXQKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJQQ2JpbmQgU2VydmVyIEFjdGl2YXRpb24gU29ja2V0CisKK1tTb2NrZXRdCitMaXN0ZW5TdHJlYW09L3Zhci9ydW4vcnBjYmluZC5zb2NrCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZF8wLjIuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZF8wLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM2MDIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi4zLmJiCkBAIC0wLDAgKzEsNzMgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsIEFkZHJlc3NlcyB0byBSUEMgUHJvZ3JhbSBOdW1iZXIgTWFwcGVyIgorREVTQ1JJUFRJT04gPSAiVGhlIHJwY2JpbmQgdXRpbGl0eSBpcyBhIHNlcnZlciB0aGF0IGNvbnZlcnRzIFJQQyBcCisgICAgICAgICAgICAgICBwcm9ncmFtIG51bWJlcnMgaW50byB1bml2ZXJzYWwgYWRkcmVzc2VzLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ycGNiaW5kLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0yMDEyMzcmYXRpZD05NzY3NTEiCitERVBFTkRTID0gImxpYnRpcnBjIHF1b3RhIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0NjQ4NmU0YzRhNDE2NjAyNjkzYTcxMWJiNWJmYTM5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ycGNpbmZvLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ZjhhOGNkMmNiMjVhYzVhYTE2NzY3MzY0ZmIwZTNjMjQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3JwY2JpbmQvcnBjYmluZC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQuZCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaCBcCisgICAgICAgICAgICR7VUNMSUJDUEFUQ0hFU30gXAorICAgICAgICAgICAke01VU0xQQVRDSEVTfSBcCisgICAgICAgICAgIGZpbGU6Ly9ycGNiaW5kLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5zb2NrZXQgXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCitNVVNMUEFUQ0hFU19saWJjLW11c2wgPSAiZmlsZTovL211c2wtc3VucnBjLnBhdGNoIgorCitVQ0xJQkNQQVRDSEVTX2xpYmMtdWNsaWJjID0gImZpbGU6Ly8wMDAxLXVjbGliYy1uc3MucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK1VDTElCQ1BBVENIRVMgPz0gIiIKK01VU0xQQVRDSEVTID89ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjODg3NTI0NmIyNjg4YTFhZGZiZDZhZDQzNDgwMjc4ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODk3ODIzYTlkODIwZWEwMTFkOWVhMDIwNTRkNWFiOTk0NjliOWNhNTM0NjI2NWZlZTM4MDcxM2M4ZmVkMjdiIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0tZW5hYmxlLWxpYndyYXAsLS1kaXNhYmxlLWxpYndyYXAsdGNwLXdyYXBwZXJzIgorCitJTklUU0NSSVBUX05BTUUgPSAicnBjYmluZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDEyIDIgMyA0IDUgLiBzdG9wIDYwIDAgMSA2IC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJycGNiaW5kLnNlcnZpY2UiCisKK2luaGVyaXQgdXNlcmFkZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgLyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tc2hlbGwgL2Jpbi9mYWxzZSAtLXVzZXItZ3JvdXAgcnBjIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbWQgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLWVuYWJsZS13YXJtc3RhcnRzIC0td2l0aC1ycGN1c2VyPXJwYyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCW12ICR7RH0ke2JpbmRpcn0gJHtEfSR7c2JpbmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1lICdzLC9ldGMvLCR7c3lzY29uZmRpcn0vLGcnIFwKKwkJLWUgJ3MsL3NiaW4vLCR7c2JpbmRpcn0vLGcnIFwKKwkJJHtXT1JLRElSfS9pbml0LmQgPiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcnBjYmluZAorCWNobW9kIDA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3JwY2JpbmQKKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JwY2JpbmQuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ycGNiaW5kLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JwY2JpbmQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcnBjYmluZC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMS1maXgtZm9yLW11bHRpam9iLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWNlZjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBwYXJhbGxlbCBidWlsZCBmYWlsdXJlIGFuZCB1cGRhdGUgY29udGV4dCB0byBtYWtlIHBhdGNoCitjb3VsZGUgYmUgYXBwbGllZC4KKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvc2NyZWVuLmdpdC9jb21taXQ/aWQ9YzBkZTZkZAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSBjMGRlNmRkNzk3MGIyYzdiNDI2YTVjMzlkY2JjMzFjMmJlZjg3MjMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FtYWRldXN6PTIwUz1DNT04MmF3aT1DNT04NHNraT89IDxhbWFkZUBhc21ibHIubmV0PgorRGF0ZTogVGh1LCAyIEphbiAyMDE0IDE4OjE4OjA2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBmb3IgbXVsdGlqb2IgYnVpbGQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworbWFrZSBzdXJlIHRoYXQgY29tbS5zaCBzY3JpcHQgZ2VuZXJhdGVzIGNvbW0uaCBoZWFkZXIgYmVmb3JlIGRvaW5nCithbnl0aGluZyBlbHNlCisKK1NpZ25lZC1vZmYtYnk6IEFtYWRldXN6IFPFgmF3acWEc2tpIDxhbWFkZUBhc21ibHIubmV0PgorLS0tCisgTWFrZWZpbGUuaW4gfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGNlODZjYmMuLmRlYTE2ZDggMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yOTgsNyArMjk4LDcgQEAgc2VhcmNoLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggc2VhcmNoLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIG1hcmsuaCBleHRlcm4uaAorIHR0eS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHR0eS5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIGNvbW0uaCBcCisgIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oCistdGVybS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHRlcm0uYyB0ZXJtLmgKKyt0ZXJtLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdGVybS5jIHRlcm0uaCBjb21tLmgKKyB3aW5kb3cubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB3aW5kb3cuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBsb2dmaWxlLmgKKyB1dG1wLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdXRtcC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIFwKK0BAIC0zMjQsNyArMzI0LDcgQEAgY2FudmFzLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggY2FudmFzLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oIFwKKyAgYnJhaWxsZS5oCisgY29tbS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGNvbW0uYyBjb25maWcuaCBhY2xzLmggY29tbS5oCista21hcGRlZi5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGttYXBkZWYuYyBjb25maWcuaAorK2ttYXBkZWYubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBrbWFwZGVmLmMgY29uZmlnLmggY29tbS5oCisgYWNscy5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGFjbHMuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBjb21tLmggXAorICBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaAorIGJyYWlsbGUubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBicmFpbGxlLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorQEAgLTM1MCw3ICszNTAsNyBAQCBsYXlvdXQubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBsYXlvdXQuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYQorIHZpZXdwb3J0Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdmlld3BvcnQuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBcCisgIGJyYWlsbGUuaAorLWxpc3RfZ2VuZXJpYy5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2dlbmVyaWMuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKKy1saXN0X2Rpc3BsYXkubzogbGlzdF9nZW5lcmljLmggbGlzdF9kaXNwbGF5LmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCistbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKKytsaXN0X2dlbmVyaWMubzogbGlzdF9nZW5lcmljLmggbGlzdF9nZW5lcmljLmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorK2xpc3RfZGlzcGxheS5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2Rpc3BsYXkuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisrbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMi1jb21tLmgtbm93LWRlcGVuZHMtb24tdGVybS5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDcxY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IGZyb206CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L3NjcmVlbi5naXQvY29tbWl0Lz9pZD0zOWM1ZjFjCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDM5YzVmMWM3NmYxZmNlZjRiNTk1OGJmODI4YTYzZjUzNDI2YjY5ODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWtlIEdlcndpdHogPG1pa2VAbWlrZWdlcndpdHouY29tPgorRGF0ZTogVHVlLCAyNCBEZWMgMjAxMyAyMjoxNjozMSAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjb21tLmggbm93IGRlcGVuZHMgb24gdGVybS5oCisKKy0tLQorIHNyYy9NYWtlZmlsZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgoraW5kZXggZTc5MWU3OS4uZDRmN2MwYiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTExMyw3ICsxMTMsNyBAQCB0ZXJtLmg6IHRlcm0uYyB0ZXJtLnNoCisgCisga21hcGRlZi5jOiB0ZXJtLmgKKyAKKy1jb21tLmg6IGNvbW0uYyBjb21tLnNoIGNvbmZpZy5oCisrY29tbS5oOiBjb21tLmMgY29tbS5zaCBjb25maWcuaCB0ZXJtLmgKKyAJQVdLPSQoQVdLKSBDQz0iJChDQykgJChDRkxBR1MpIiBzcmNkaXI9JHtzcmNkaXJ9IHNoICQoc3JjZGlyKS9jb21tLnNoCisgCisgZG9jczoKKy0tIAorMi40LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODRhYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3OWFmYjY3NjkwNDY1MzQwMzE0NWZkYTllMWE2YTlkM2VhMWNiMjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMToxMDozMiArMDMwMAorU3ViamVjdDogW1BBVENIIDQvNF0gQXZvaWQgbWlzLWlkZW50aWZ5aW5nIHN5c3RlbXMgYXMgU1ZSNAorCitMaW51eCBjYW4gYmUgbWlzZGV0ZWN0ZWQgYXMgU1ZSNCBiZWNhdXNlIGl0IGhhcworbGliZWxmIGluc3RhbGxlZC4gVGhpcyBsZWFkcyB0byBsaW5raW5nIHdpdGggbGliZWxmLCBldmVuIHRob3VnaCBubworc3ltYm9scyBmcm9tIHRoYXQgbGlicmFyeSB3ZXJlIGFjdHVhbGx5IHVzZWQsIGFuZCB0byBhIHdvcmthcm91bmQgZm9yCithIGJ1Z2d5IGdldGxvZ2luKCkgYmVpbmcgZW5hYmxlZC4KKworSXQgaXMgbm90IGRvY3VtZW50ZWQgd2hpY2ggZXhhY3QgU1ZSNCBzeXN0ZW0gaGFkIHRoZSBidWcgdGhhdCB0aGUKK3dvcmthcm91bmQgd2FzIGFkZGVkIGZvciwgc28gYWxsIEkgY291bGQgZG8gaXMgbWFrZSBhbiBlZHVjYXRlZCBndWVzcworYXQgdGhlICNkZWZpbmVzIGl0cyBjb21waWxlciB3b3VsZCBiZSBsaWtlbHkgdG8gc2V0LgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTQgKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZGM5MjhhZS4uNjU0MzljZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc5LDE0ICsxNzksMjQgQEAgQUNfRUdSRVBfQ1BQKHllcywKKyAjZW5kaWYKKyBdLCBMSUJTPSIkTElCUyAtbHNvY2tldCAtbGluZXQiO3NlcXB0eD0xKQorIAorK0FDX0NIRUNLSU5HKFNWUjQpCisrQUNfRUdSRVBfQ1BQKHllcywKKytbbWFpbiAoKSB7CisrI2lmIGRlZmluZWQoU1ZSNCkgfHwgZGVmaW5lZChfX1NWUjQpCisrICB5ZXM7CisrI2VuZGlmCisrXSwgQUNfTk9URSgtIHlvdSBoYXZlIGEgU1ZSNCBzeXN0ZW0pIEFDX0RFRklORShTVlI0KSBzdnI0PTEpCisraWYgdGVzdCAtbiAiJHN2cjQiIDsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sZWxmIgorIEFDX0NIRUNLSU5HKFNWUjQpCisgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDx1dG1weC5oPgorIF0sLAorLVtBQ19DSEVDS19IRUFERVIoZHdhcmYuaCwgQUNfREVGSU5FKFNWUjQpIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSwKKy1bQUNfQ0hFQ0tfSEVBREVSKGVsZi5oLCBBQ19ERUZJTkUoU1ZSNCkgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pKV0pXQorK1tBQ19DSEVDS19IRUFERVIoZHdhcmYuaCwgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pLAorK1tBQ19DSEVDS19IRUFERVIoZWxmLmgsIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSldKV0KKyAsTElCUz0iJG9sZGxpYnMiKQorK2ZpCisrCisgQUNfQ0hFQ0tfSEVBREVSUyhbc3Ryb3B0cy5oIHN0cmluZy5oIHN0cmluZ3MuaF0pCisgCisgQUNfQ0hFQ0tJTkcoZm9yIFNvbGFyaXMgMi54KQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4YmYwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSBjZDBmN2YxMGEzZmZmYmM2MGZlNTVlYjIwMDQ3NGQxM2ZlMWRhNjViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMDozNDoyOSArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNF0gUHJvdmlkZSBjcm9zcyBjb21waWxlIGFsdGVybmF0aXZlcyBmb3IgQUNfVFJZX1JVTgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMzIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI3NjkwYTYuLmNlODlmNTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM0OCw3ICszNDgsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIGZpZm9zIGFyZSB1c2FibGUpIGZpZm89MSwKKy1BQ19OT1RFKC0geW91ciBmaWZvcyBhcmUgbm90IHVzYWJsZSkpCisrQUNfTk9URSgtIHlvdXIgZmlmb3MgYXJlIG5vdCB1c2FibGUpLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIGZpZm9zIGFyZSB1c2FibGUpIGZpZm89MSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIAorIGlmIHRlc3QgLW4gIiRmaWZvIjsgdGhlbgorQEAgLTM5Niw3ICszOTcsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIGltcGxlbWVudGF0aW9uIGlzIG9rKSwgCistQUNfTk9URSgtIHlvdSBoYXZlIGEgYnJva2VuIGltcGxlbWVudGF0aW9uKSBBQ19ERUZJTkUoQlJPS0VOX1BJUEUpIGZpZm9icj0xKQorK0FDX05PVEUoLSB5b3UgaGF2ZSBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbikgQUNfREVGSU5FKEJST0tFTl9QSVBFKSBmaWZvYnI9MSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBmaWZvIGltcGxlbWVudGF0aW9uIGlzIG9rKSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIGZpCisgCitAQCAtNDU4LDcgKzQ2MCw4IEBAIG1haW4oKQorICAgZXhpdCgwKTsKKyB9CisgXSwgQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgdXNhYmxlKSBzb2NrPTEsCistQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgbm90IHVzYWJsZSkpCisrQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgbm90IHVzYWJsZSksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc29ja2V0cyBhcmUgdXNhYmxlKSBzb2NrPTEpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyAKKyBpZiB0ZXN0IC1uICIkc29jayI7IHRoZW4KK0BAIC00OTcsNyArNTAwLDggQEAgbWFpbigpCisgfQorIF0sQUNfTk9URSgtIHlvdSBhcmUgbm9ybWFsKSwKKyBBQ19OT1RFKC0gdW5peCBkb21haW4gc29ja2V0cyBhcmUgbm90IGtlcHQgaW4gdGhlIGZpbGVzeXN0ZW0pCistQUNfREVGSU5FKFNPQ0tfTk9UX0lOX0ZTKSBzb2Nrbm9mcz0xKQorK0FDX0RFRklORShTT0NLX05PVF9JTl9GUykgc29ja25vZnM9MSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBzb2NrZXRzIGFyZSBub3JtYWwpKQorIHJtIC1mIC90bXAvY29uZnRlc3QqCisgZmkKKyAKK0BAIC02MjQsNyArNjI4LDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLEFDX05PVEUoLSBzZWxlY3QgaXMgb2spLAorLUFDX05PVEUoLSBzZWxlY3QgY2FuJ3QgY291bnQpIEFDX0RFRklORShTRUxFQ1RfQlJPS0VOKSkKKytBQ19OT1RFKC0gc2VsZWN0IGNhbid0IGNvdW50KSBBQ19ERUZJTkUoU0VMRUNUX0JST0tFTiksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc2VsZWN0IGlzIG9rKSkKKyAKKyBkbmwKKyBkbmwgICAgKioqKiAgdGVybWNhcCBvciB0ZXJtaW5mbyAgKioqKgorQEAgLTY2Niw3ICs2NzEsOCBAQCBtYWluKCkKKyB7CisgIGV4aXQoc3RyY21wKHRnb3RvKCIlcDElZCIsIDAsIDEpLCAiMSIpID8gMCA6IDEpOworIH1dLCBBQ19OT1RFKC0geW91IHVzZSB0aGUgdGVybWNhcCBkYXRhYmFzZSksCistQUNfTk9URSgtIHlvdSB1c2UgdGhlIHRlcm1pbmZvIGRhdGFiYXNlKSBBQ19ERUZJTkUoVEVSTUlORk8pKQorK0FDX05PVEUoLSB5b3UgdXNlIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSkgQUNfREVGSU5FKFRFUk1JTkZPKSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyB0ZXJtaW5mbyBkYXRhYmFzZSBpcyB1c2VkKSBBQ19ERUZJTkUoVEVSTUlORk8pKQorIEFDX0NIRUNLSU5HKG9zcGVlZCkKKyBBQ19UUllfTElOSyhleHRlcm4gc2hvcnQgb3NwZWVkOyxvc3BlZWQ9NTssLEFDX0RFRklORShORUVEX09TUEVFRCkpCisgCitAQCAtODAxLDcgKzgwNyw4IEBAIG1haW4oKQorICAgICBlbHNlCisgICAgICAgQUNfTk9URSgtIGNhbid0IGRldGVybWluZSAtIGFzc3VtZSBwdHlzIGFyZSB3b3JsZCBhY2Nlc3NhYmxlKQorICAgICBmaQorLSAgXQorKyAgXSwKKysgIEFDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHB0eXMgYXJlIHdvcmxkIGFjY2Vzc2FibGUpCisgKQorIHJtIC1mIGNvbmZ0ZXN0X2dycAorIGZpCitAQCAtODg1LDcgKzg5Miw3IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgbG9hZD0xKQorIGZpCistaWYgdGVzdCAteiAiJGxvYWQiIDsgdGhlbgorK2lmIHRlc3QgLXogIiRsb2FkIiAmJiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBrZXJuZWxmaWxlKQorIGZvciBjb3JlIGluIC91bml4IC92bXVuaXggL2R5bml4IC9ocC11eCAveGVsb3MgL2Rldi9rc3ltcyAva2VybmVsL3VuaXggL2tlcm5lbC9nZW51bml4IC91bmljb3MgL21hY2ggL25ldGJzZCAvMzg2YnNkIC9kZ3V4IC9ic2QgL3N0YW5kL3ZtdW5peDsgZG8KKyAgIGlmIHRlc3QgLWYgJGNvcmUgfHwgdGVzdCAtYyAkY29yZTsgdGhlbgorQEAgLTEwNzgsNyArMTA4NSw3IEBAIG1haW4oKQorICNlbmRpZgorICAgZXhpdCgwKTsKKyB9CistXSwsQUNfREVGSU5FKFNZU1ZTSUdTKSkKKytdLCxBQ19ERUZJTkUoU1lTVlNJR1MpLDopCisgCisgZmkKKyAKK0BAIC0xMTU4LDcgKzExNjUsNyBAQCBtYWluKCkgeworICAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgIGV4aXQoMSk7CisgICBleGl0KDApOyAvKiBsaWJjIHZlcnNpb24gd29ya3MgcHJvcGVybHkuICAqLworLX1dLCBBQ19ERUZJTkUoVVNFQkNPUFkpKQorK31dLCBBQ19ERUZJTkUoVVNFQkNPUFkpLCw6KQorIAorIEFDX1RSWV9SVU4oWworICNkZWZpbmUgYmNvcHkocyxkLGwpIG1lbW1vdmUoZCxzLGwpCitAQCAtMTE3Myw3ICsxMTgwLDggQEAgbWFpbigpIHsKKyAgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgICBleGl0KDEpOworICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKy19XSwgQUNfREVGSU5FKFVTRU1FTU1PVkUpKQorK31dLCBBQ19ERUZJTkUoVVNFTUVNTU9WRSksLAorKyAgQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgdXNlIG1lbW1vdmUpIEFDX0RFRklORShVU0VNRU1NT1ZFKSkKKyAKKyAKKyBBQ19UUllfUlVOKFsKK0BAIC0xMTg5LDcgKzExOTcsNyBAQCBtYWluKCkgeworICAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgIGV4aXQoMSk7CisgICBleGl0KDApOyAvKiBsaWJjIHZlcnNpb24gd29ya3MgcHJvcGVybHkuICAqLworLX1dLCBBQ19ERUZJTkUoVVNFTUVNQ1BZKSkKKyt9XSwgQUNfREVGSU5FKFVTRU1FTUNQWSksLDopCisgCisgQUNfU1lTX0xPTkdfRklMRV9OQU1FUworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjJjMTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaApAQCAtMCwwICsxLDY1IEBACitGcm9tIDczYjcyNmMyNWY5NGMxYjE1NTE0ZWQ5MjQ5YjkyN2FmZGZiYmZiOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCA3IEF1ZyAyMDE1IDEwOjMwOjQwICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBSZW1vdmUgcmVkdW5kYW50IGNvbXBpbGVyIHNhbml0eSBjaGVja3MKKworQUNfUFJPR19DQyBhbHJlYWR5IHBlcmZvcm1zIHNhbml0eSBjaGVja3MuIEFuZCB1bmxpa2UgdGhlIHJlbW92ZWQKK2NoZWNrcywgaXQgZG9lcyBzbyBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIGNyb3NzIGNvbXBpbGF0aW9uLgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBmZmUyZTM3Li4yNzY5MGE2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00OCwzMSArNDgsNiBAQCBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIEFDX0lTQ19QT1NJWAorIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIAorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsWworLWlmIHRlc3QgJENDICE9IGNjIDsgdGhlbgorLUFDX05PVEUoWW91ciAkQ0MgZmFpbGVkIC0gcmVzdGFydGluZyB3aXRoIENDPWNjKQorLUFDX05PVEUoKQorLUNDPWNjCistZXhwb3J0IENDCistZXhlYyAkMCAkY29uZmlndXJlX2FyZ3MKKy1maQorLV0pCistCistQUNfVFJZX1JVTihtYWluKCl7ZXhpdCgwKTt9LCwKKy1leGVjIDU+JjIKKy1ldmFsICRhY19saW5rCistQUNfTk9URShDQz0kQ0M7IENGTEFHUz0kQ0ZMQUdTOyBMSUJTPSRMSUJTOykKKy1BQ19OT1RFKCRhY19jb21waWxlKQorLUFDX01TR19FUlJPUihDYW4ndCBydW4gdGhlIGNvbXBpbGVyIC0gc29ycnkpKQorLQorLUFDX1RSWV9SVU4oWworLW1haW4oKQorLXsKKy0gIGludCBfX3NvbWV0aGluZ19zdHJhbmdlXygpOworLSAgX19zb21ldGhpbmdfc3RyYW5nZV8oMCk7CistfQorLV0sQUNfTVNHX0VSUk9SKFlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc2V0IHRoZSBleGl0IHN0YXR1cyAtIHNvcnJ5KSkKKy0KKyBBQ19QUk9HX0FXSworIAorIEFDX1BST0dfSU5TVEFMTAorQEAgLTEzMDAsOCArMTI3NSw2IEBAIGZpCisgZG5sIFB0eCBidWcgd29ya2Fyb3VuZCAtLSBpbnNlcnQgLWxjIGFmdGVyIC1sdGVybWNhcAorIHRlc3QgLW4gIiRzZXFwdHgiICYmIExJQlM9Ii1sdGVybWNhcCAtbGMgLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sc2VjIC1sc2VxIgorIAorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsQUNfTVNHX0VSUk9SKENhbid0IHJ1biB0aGUgY29tcGlsZXIgLSBpbnRlcm5hbCBlcnJvci4gU29ycnkuKSkKKy0KKyBFVENTQ1JFRU5SQz0KKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRoZSBnbG9iYWwgc2NyZWVucmMgZmlsZSkKKyBBQ19BUkdfV0lUSChzeXMtc2NyZWVucmMsIFsgIC0td2l0aC1zeXMtc2NyZWVucmM9cGF0aCB0byB0aGUgZ2xvYmFsIHNjcmVlbnJjIGZpbGVdLCBbIEVUQ1NDUkVFTlJDPSIke3dpdGh2YWx9IiBdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlNTVhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSBkMGIyMGU0Y2FjYzYwYWQ2MmEyMTUwY2UwNzM4OGNiNWEyNWMyMDQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMTowOTowMSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNF0gU2tpcCBob3N0IGZpbGUgc3lzdGVtIGNoZWNrcyB3aGVuIGNyb3NzLWNvbXBpbGluZworCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjMgKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2U4OWY1Ni4uZGM5MjhhZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODUsNyArODUsNyBAQCBBQ19BUkdfRU5BQkxFKHNvY2tldC1kaXIsCisgZG5sCisgZG5sICAgICoqKiogIHNwZWNpYWwgdW5peCB2YXJpYW50cyAgKioqKgorIGRubAorLWlmIHRlc3QgLW4gIiRJU0MiOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1uICIkSVNDIiA7IHRoZW4KKyAgIEFDX0RFRklORShJU0MpIExJQlM9IiRMSUJTIC1saW5ldCIKKyBmaQorIAorQEAgLTk2LDEwICs5NiwxMSBAQCBkbmwgQUNfREVGSU5FKE9TRjEpCSMgdGhpcyBkaXNhYmxlcyBNSVBTIGFnYWluLi4uLgorIGRubCBmaQorIGRubCBmaQorIAorLWlmIHRlc3QgLWYgL3N5c1Y2OCA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3N5c1Y2OCA7IHRoZW4KKyBBQ19ERUZJTkUoc3lzVjY4KQorIGZpCisgCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgTUlQUykKKyBpZiB0ZXN0IC1mIC9saWIvbGlibWxkLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJtbGQuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2NtcGxycy9jYy9saWJtbGQuYTsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorQEAgLTEyMyw2ICsxMjQsNyBAQCBBQ19ERUZJTkUoVVNFX1dBSVQyKSBMSUJTPSIkTElCUyAtbGJzZCIgOyBDQz0iJENDIC1JL3Vzci9pbmNsdWRlL2JzZCIKKyApKQorIGZpCisgZmkKKytmaQorIAorIAorIEFDX0NIRUNLSU5HKGZvciBVbHRyaXgpCitAQCAtMTMyLDcgKzEzNCw3IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgVUxUUklYPTEpCisgCistaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJweXIuYSA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3Vzci9saWIvbGlicHlyLmEgOyB0aGVuCisgb2xkbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxweXIiCisgQUNfQ0hFQ0tJTkcoUHlyYW1pZCBPU1gpCitAQCAtNjc5LDE3ICs2ODEsMjEgQEAgQUNfVFJZX0xJTksoZXh0ZXJuIHNob3J0IG9zcGVlZDssb3NwZWVkPTU7LCxBQ19ERUZJTkUoTkVFRF9PU1BFRUQpKQorIGRubAorIGRubCAgICAqKioqICBQVFkgc3BlY2lmaWMgdGhpbmdzICAqKioqCisgZG5sCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgL2Rldi9wdGMpCisgaWYgdGVzdCAtciAvZGV2L3B0YzsgdGhlbgorIEFDX0RFRklORShIQVZFX0RFVl9QVEMpCisgZmkKKytmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIFNWUjQgcHR5cykKKyBzeXN2cjRwdHlzPQorIGlmIHRlc3QgLWMgL2Rldi9wdG14IDsgdGhlbgorIEFDX1RSWV9MSU5LKFtdLFtwdHNuYW1lKDApO2dyYW50cHQoMCk7dW5sb2NrcHQoMCk7XSxbQUNfREVGSU5FKEhBVkVfU1ZSNF9QVFlTKQorIHN5c3ZyNHB0eXM9MV0pCisgZmkKKytmaQorIAorIEFDX0NIRUNLX0ZVTkNTKGdldHB0KQorIAorQEAgLTY5OSw2ICs3MDUsNyBAQCBBQ19DSEVDS19GVU5DUyhvcGVucHR5LCwKKyBbQUNfQ0hFQ0tfTElCKHV0aWwsb3BlbnB0eSwgW0FDX0RFRklORShIQVZFX09QRU5QVFkpXSBbTElCUz0iJExJQlMgLWx1dGlsIl0pXSkKKyBmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIHB0eXJhbmdlcykKKyBpZiB0ZXN0IC1kIC9kZXYvcHR5bSA7IHRoZW4KKyBwZGlyPScvZGV2L3B0eW0nCitAQCAtNzIyLDYgKzcyOSw3IEBAIHAxPWBlY2hvICRwdHlzIHwgdHIgJyAnICdcMDEyJyB8IHNlZCAtZSAncy9eLipcKC5cKSQvXDEvZycgIHwgc29ydCAtdSB8IHRyIC1kICdcCisgQUNfREVGSU5FX1VOUVVPVEVEKFBUWVJBTkdFMCwiJHAwIikKKyBBQ19ERUZJTkVfVU5RVU9URUQoUFRZUkFOR0UxLCIkcDEiKQorIGZpCisrZmkKKyAKKyBkbmwgICAgKioqKiAgcHR5IG1vZGUvZ3JvdXAgaGFuZGxpbmcgKioqKgorIGRubAorQEAgLTg2OSwxNCArODc3LDE2IEBAIGZpCisgZG5sCisgZG5sICAgICoqKiogIGxvYWRhdiAgKioqKgorIGRubAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIGxpYnV0aWwocykpCisgdGVzdCAtZiAvdXNyL2xpYi9saWJ1dGlscy5hICYmIExJQlM9IiRMSUJTIC1sdXRpbHMiCisgdGVzdCAtZiAvdXNyL2xpYi9saWJ1dGlsLmEgJiYgTElCUz0iJExJQlMgLWx1dGlsIgorK2ZpCisgCisgQUNfQ0hFQ0tJTkcoZ2V0bG9hZGF2ZykKKyBBQ19UUllfTElOSygsW2dldGxvYWRhdmcoKGRvdWJsZSAqKTAsIDApO10sCisgQUNfREVGSU5FKExPQURBVl9HRVRMT0FEQVZHKSBsb2FkPTEsCistaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJrdm0uYSA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3Vzci9saWIvbGlia3ZtLmEgOyB0aGVuCisgb2xpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sa3ZtIgorIEFDX0NIRUNLSU5HKGdldGxvYWRhdmcgd2l0aCAtbGt2bSkKK0BAIC0xMDk0LDEzICsxMTA0LDE4IEBAIGRubCAgICAqKioqICBsaWJyYXJpZXMgICoqKioKKyBkbmwKKyAKKyBBQ19DSEVDS0lORyhmb3IgY3J5cHQgYW5kIHNlYyBsaWJyYXJpZXMpCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyB0ZXN0IC1mIC9saWIvbGliY3J5cHRfZC5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGliY3J5cHRfZC5hICYmIExJQlM9IiRMSUJTIC1sY3J5cHRfZCIKKytmaQorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sY3J5cHQiCisgQUNfQ0hFQ0tJTkcoY3J5cHQpCisgQUNfVFJZX0xJTksoLCwsTElCUz0iJG9sZGxpYnMiKQorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgdGVzdCAtZiAvbGliL2xpYnNlYy5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlic2VjLmEgJiYgTElCUz0iJExJQlMgLWxzZWMiCisgdGVzdCAtZiAvbGliL2xpYnNoYWRvdy5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlic2hhZG93LmEgJiYgTElCUz0iJExJQlMgLWxzaGFkb3ciCisrZmkKKysKKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbHN1biIKKyBBQ19DSEVDS0lORyhJUklYIHN1biBsaWJyYXJ5KQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGNhZjVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitUaGlzIGZpeGVzIHRoZSBwYXJhbGxlbCBtYWtlIGluc3RhbGwgZmFpbHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogc2NyZWVuLTQuMC4zL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2NyZWVuLTQuMC4zLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBzY3JlZW4tNC4wLjMvTWFrZWZpbGUuaW4KK0BAIC03MCw3ICs3MCw3IEBAIHNjcmVlbjogJChPRklMRVMpCisgLmMubzoKKyAJJChDQykgLWMgLUkuIC1JJChzcmNkaXIpICQoTV9DRkxBR1MpICQoREVGUykgJChPUFRJT05TKSAkKENGTEFHUykgJDwKKyAKKy1pbnN0YWxsX2JpbjogLnZlcnNpb24gc2NyZWVuCisraW5zdGFsbF9iaW46IC52ZXJzaW9uIHNjcmVlbiBpbnN0YWxsZGlycworIAktaWYgWyAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKSBdICYmIFsgISAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKS5vbGQgXTsgXAorIAkJdGhlbiBtdiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKSAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKS5vbGQ7IGZpCisgCSQoSU5TVEFMTF9QUk9HUkFNKSBzY3JlZW4gJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vc2NyZWVuLnBhbSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vc2NyZWVuLnBhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY1N2ZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9zY3JlZW4ucGFtCkBAIC0wLDAgKzEsMiBAQAorIyVQQU0tMS4wCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI0NTdhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJNdWx0aXBsZXhpbmcgdGVybWluYWwgbWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIlNjcmVlbiBpcyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBtYW5hZ2VyIFwKK3RoYXQgbXVsdGlwbGV4ZXMgYSBwaHlzaWNhbCB0ZXJtaW5hbCBiZXR3ZWVuIHNldmVyYWwgXAorcHJvY2Vzc2VzLCB0eXBpY2FsbHkgaW50ZXJhY3RpdmUgc2hlbGxzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zY3JlZW4vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/ZnVuYz1hZGRpdGVtJmdyb3VwPXNjcmVlbiIKKworU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbi5oO2VuZGxpbmU9MjY7bWQ1PTM5NzExNDI5ODkyODlhODE5OGE1NDQyMjA3MDNjMmJmIgorCitERVBFTkRTID0gIm5jdXJzZXMgXAorICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2NyZWVuL3NjcmVlbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdmaWxlOi8vc2NyZWVuLnBhbScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjViYjNiMGZmMjY3NGUyOTM3OGMzMWFkMzQxMTE3MGFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZhNDA0OWY4YWVlMjgzZGU2MmUyODNkNDI3ZjJjZmQzNWQ2YzM2OWI0MGY3ZjQ1Zjk0N2RiZmQ5MTU2OTlkNjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbdXRlbXB0ZXJdID0gImFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPXllcyxhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD1ubyxsaWJ1dGVtcHRlciwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcHR5LW1vZGU9MDYyMCAtLXdpdGgtcHR5LWdyb3VwPTUgXAorICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtJywgJy0tZGlzYWJsZS1wYW0nLCBkKX0iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zY3JlZW4ucGFtICR7RH0vJHtzeXNjb25mZGlyfS9wYW0uZC9zY3JlZW4KKwlmaQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmluZGlyfS9zY3JlZW4gPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvTWFrZXZhcnMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDlmNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzCkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvZml4X3JldHVybl90eXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjU1MWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ2hhbmdlIHRoZSBnZXRsaW5lIHJldHVybiB0eXBlIHRvIG1hdGNoIGl0cyBkZWNsYXJhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtdXJOIHNlZC00LjEuMi1vcmlnL2xpYi9nZXRsaW5lLmMgc2VkLTQuMS4yL2xpYi9nZXRsaW5lLmMKKy0tLSBzZWQtNC4xLjItb3JpZy9saWIvZ2V0bGluZS5jCTIwMTAtMDgtMzEgMDg6NDc6NTAuMDcwMDk0MDI0ICswODAwCisrKysgc2VkLTQuMS4yL2xpYi9nZXRsaW5lLmMJMjAxMC0wOC0zMSAwODo0ODo1MC45ODIxNzgxNzIgKzA4MDAKK0BAIC0zMCw3ICszMCw3IEBACisgICAgbmVjZXNzYXJ5LiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCAobm90IGluY2x1ZGluZyB0aGUKKyAgICBudWxsIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuICAqLworIAorLXNpemVfdAorK3NzaXplX3QKKyBnZXRsaW5lIChsaW5lcHRyLCBuLCBzdHJlYW0pCisgICAgICBjaGFyICoqbGluZXB0cjsKKyAgICAgIHNpemVfdCAqbjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDU5NDA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9zZWQtNC4xLjJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZS0xLjEyLnggaGFzIGRlcHJlY2F0ZWQgdXNlIG9mIEBta2Rpcl9wQCwgZml4IHRoZSBpc3N1ZSBieSB1c2luZyBATUtESVJfUEAgaW5zdGVhZC4KKworQXZvaWQgdGhpcyBidWlsZCBpc3N1ZToKK3wgbWFrZVsxXTogbWtkaXJfcEA6IENvbW1hbmQgbm90IGZvdW5kCit8IG1ha2VbMV06ICoqKiBbaW5zdGFsbC1kYXRhLXllc10gRXJyb3IgMTI3CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzEzCisKK0luZGV4OiBzZWQtNC4xLjIvaW50bC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlZC00LjEuMi5vcmlnL2ludGwvTWFrZWZpbGUuaW4KKysrKyBzZWQtNC4xLjIvaW50bC9NYWtlZmlsZS5pbgorQEAgLTQwLDcgKzQwLDcgQEAgc3ViZGlyID0gaW50bAorIElOU1RBTEwgPSBASU5TVEFMTEAKKyBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorIG1raW5zdGFsbGRpcnMgPSAkKG1rZGlyX3ApCistbWtkaXJfcCA9IEBta2Rpcl9wQAorK21rZGlyX3AgPSBATUtESVJfUEAKKyAKKyBsID0gQElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYQAorIAorSW5kZXg6IHNlZC00LjEuMi9wby9NYWtlZmlsZS5pbi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlZC00LjEuMi5vcmlnL3BvL01ha2VmaWxlLmluLmluCisrKysgc2VkLTQuMS4yL3BvL01ha2VmaWxlLmluLmluCitAQCAtMjksNyArMjksNyBAQCBnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisgSU5TVEFMTCA9IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMyL2J1aWxkMC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vaW5zdGFsbCAtYworIElOU1RBTExfREFUQSA9ICR7SU5TVEFMTH0gLW0gNjQ0CisgbWtpbnN0YWxsZGlycyA9ICQobWtkaXJfcCkKKy1ta2Rpcl9wID0gQG1rZGlyX3BACisrbWtkaXJfcCA9IEBNS0RJUl9QQAorIAorIENDID0gaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vc3J2L2hvbWUvbml0aW4vYnVpbGRzMi9idWlsZDAvdG1wL3N5c3Jvb3RzL3FlbXV4ODYKKyBHTVNHRk1UID0gL3Nydi9ob21lL25pdGluL2J1aWxkczIvYnVpbGQwL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9tc2dmbXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwZjYyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdHN1aXRlIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvc2VkLWFkZC1wdGVzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvc2VkLWFkZC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDVlOGI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK3NlZDogYWRkIHB0ZXN0CisKK3B0ZXN0IG5lZWRzIGJ1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzLgorc2VyaWFsLXRlc3RzIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRob3NlIHRhcmdldHMuCisKK0FuZCBmaXggZm9sbG93aW5nIGVycm9yIGFmdGVyIGFkZCBzZXJpYWwtdGVzdHMuCisKK1tzbmlwXQoraGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gLi4vc2VkL3NlZAorbWFrZVsyXTogKioqIFtzZWQuMV0gRXJyb3IgMgorW3NuaXBdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8ICAgIDIgKy0KKyBkb2MvTWFrZWZpbGUuYW0gICAgICAgfCAgICAyICstCisgdGVzdHN1aXRlL01ha2VmaWxlLmFtIHwgICAgNiArKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWQzM2VjOS4uNGYwYzUzMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNCw3ICs0LDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQtYXV4KQorIEFDX0NPTkZJR19TUkNESVIoW3NlZC9zZWQuY10pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaDpjb25maWdfaC5pbikKKyBBQ19QUkVSRVEoMi42MCkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbc2VyaWFsLXRlc3RzXSkKKyAKKyBTRURfRkVBVFVSRV9WRVJTSU9OPTQuMi4yCisgQUNfREVGSU5FX1VOUVVPVEVEKFNFRF9GRUFUVVJFX1ZFUlNJT04sICIkU0VEX0ZFQVRVUkVfVkVSU0lPTiIsCitkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmFtIGIvZG9jL01ha2VmaWxlLmFtCitpbmRleCBhZjY5NzVjLi42ZmQ4YzlhIDEwMDY0NAorLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKysgYi9kb2MvTWFrZWZpbGUuYW0KK0BAIC0yNSw3ICsyNSw3IEBAICQoc3JjZGlyKS9zLXRleGk6IHNlZC1pbi50ZXhpICQoc3JjZGlyKS9ncm91cGlmeS5zZWQKKyAJZmkKKyAJZWNobyBzdGFtcCA+ICQoc3JjZGlyKS9zLXRleGkKKyAKKy1zZWQuMTogJCh0b3Bfc3JjZGlyKS9zZWQvc2VkLmMgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChzcmNkaXIpL3NlZC54CisrX3NlZC4xOiAkKHRvcF9zcmNkaXIpL3NlZC9zZWQuYyAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYyAkKHNyY2Rpcikvc2VkLngKKyAJJChIRUxQMk1BTikgLS1uYW1lICJzdHJlYW0gZWRpdG9yIGZvciBmaWx0ZXJpbmcgYW5kIHRyYW5zZm9ybWluZyB0ZXh0IiBcCisgCSAgLXAgc2VkIC0taW5jbHVkZSAkKHNyY2Rpcikvc2VkLnggLW8gJChzcmNkaXIpL3NlZC4xICQoU0VEKSAKKyAKK2RpZmYgLS1naXQgYS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gYi90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KK2luZGV4IGQ4MGU3MmMuLmIwNWYwMWUgMTAwNjQ0CistLS0gYS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorQEAgLTk5LDUgKzk5LDExIEBAIEVYVFJBX0RJU1QgPSBcCisgIyBhdXRvbWFrZSBtYWtlcyBgY2hlY2snIGRlcGVuZCBvbiAkKFRFU1RTKS4gIERlY2xhcmUKKyAjIGR1bW15IHRhcmdldHMgZm9yICQoVEVTVFMpIHNvIHRoYXQgbWFrZSBkb2VzIG5vdCBjb21wbGFpbi4KKyAKKytpbnN0YWxsLXB0ZXN0OgorKwljZCAkKEJVSUxERElSKTsgdGFyIC1jZiAtICQoVEVTVERJUikgLS1leGNsdWRlICoubyB8ICggY2QgJChERVNURElSKSAmJiB0YXIgLXhmIC0gKQorKwlmb3IgaSBpbiAkKEVYVFJBX0RJU1QpIHRzdC1yZWdleDIuYzsgZG8gaW5zdGFsbCAkKHNyY2RpcikvJCRpICQoREVTVERJUikvJChURVNURElSKTsgZG9uZQorKwlzZWQgLWUgJ3MvXk1ha2VmaWxlOi9fTWFrZWZpbGU6LycgLWUgJ3MvXnNyY2RpciA9IFwoLipcKS9zcmNkaXIgPSAuLycgLWUgJ3MvYmFzaC9zaC8nIC1pICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQorKwlmb3IgaSBpbiBgZ3JlcCAtcmwgIi4uL3NlZC9zZWQiICQoREVTVERJUikvJChURVNURElSKWA7IGRvIHNlZCAtZSAncy8uLlwvc2VkXC9zZWQvc2VkLycgLWkgJCRpOyBkb25lCisrCisgLlBIT05ZOiAkKFNFRFRFU1RTKQorICQoU0VEVEVTVFMpOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZTNhNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiU3RyZWFtIEVEaXRvciAodGV4dCBmaWx0ZXJpbmcgdXRpbGl0eSkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2VkLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VkL3NlZC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWUwMGZmZDE4MzdmMjk4NDM5YTIxNGZkMTk3ZjZhNDA3IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zZWQvc2VkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcmV0dXJuX3R5cGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyIKKworU1JDX1VSSVttZDVzdW1dID0gIjkyOGYwZTA2NDIyZjQxNDA5MTkxNzQwMWYxYTgzNGQwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzOGU4MzdiYTc2NWQ1ZGEwYTMwYzk4YjU3YzI5NTNjZWNlYTk2ODI3ODgyZjU5NDYxMmFjYWNlOTNjZWVlYWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L01ha2V2YXJzICR7U30vcG8vCit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpZiBbICEgJHtEfSR7YmluZGlyfSAtZWYgJHtEfSR7YmFzZV9iaW5kaXJ9IF07IHRoZW4KKwkgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorCSAgICBybWRpciAke0R9JHtiaW5kaXJ9LworCWZpCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZWRdID0gIiR7YmFzZV9iaW5kaXJ9L3NlZCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhN2Q4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJTdHJlYW0gRURpdG9yICh0ZXh0IGZpbHRlcmluZyB1dGlsaXR5KSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zZWQvIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZWQvc2VkLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9NzY3YWIzYTA2ZDc1ODRmNmZkMDQ2OWFiYWVjNDQxMmYiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zZWQvc2VkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zZWQtYWRkLXB0ZXN0LnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDExMWRlNGZhYTNiOTg0OGEwNjg2YjJmMjYwYzUwNTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmVhMGE5NGQ0YjYwNTg5NGYzZTJkNTU3MmUzZjk2ZTQ0MTNiY2FkM2EwODVhYWU3MzY3YzJjZjA3OTA4YjJmZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGdldHRleHQgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlICR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGxvY2FsZS1iYXNlLXJ1LXJ1IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWFjbCBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICctLWVuYWJsZS1yZWdleC10ZXN0cycsICcnLCBkKX0iCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpZiBbICEgJHtEfSR7YmluZGlyfSAtZWYgJHtEfSR7YmFzZV9iaW5kaXJ9IF07IHRoZW4KKwkgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorCSAgICBybWRpciAke0R9JHtiaW5kaXJ9LworCWZpCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZWRdID0gIiR7YmFzZV9iaW5kaXJ9L3NlZCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworVEVTVERJUiA9ICJ0ZXN0c3VpdGUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBpbnN0YWxsLXB0ZXN0IEJVSUxERElSPSR7Qn0gREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBURVNURElSPSR7VEVTVERJUn0KK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtRG8tbm90LXJlYWQtbG9naW4uZGVmcy1iZWZvcmUtZG9pbmctY2hyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtRG8tbm90LXJlYWQtbG9naW4uZGVmcy1iZWZvcmUtZG9pbmctY2hyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGI5NWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSAxNzBjMjVjOGUwYjVjM2RjMjYxNWQxZGI5NGM4ZDI0YTEzZmY5OWJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CitEYXRlOiBUaHUsIDExIFNlcCAyMDE0IDE1OjExOjIzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCByZWFkIGxvZ2luLmRlZnMgYmVmb3JlIGRvaW5nIGNocm9vdCgpCisKK0lmICJ1c2VyYWRkIC0tcm9vdCA8cm9vdD4gLi4uIiB3YXMgdXNlZCwgdGhlIGxvZ2luLmRlZnMgZmlsZSB3b3VsZCBzdGlsbAorYmUgcmVhZCBmcm9tIC9ldGMvbG9naW4uZGVmcyBpbnN0ZWFkIG9mIDxyb290Pi9ldGMvbG9naW4uZGVmcy4gVGhpcyB3YXMKK2R1ZSB0byBnZXRkZWZfdWxvbmcoKSBiZWluZyBjYWxsZWQgYmVmb3JlIHByb2Nlc3Nfcm9vdF9mbGFnKCkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmcvcGlwZXJtYWlsL3BrZy1zaGFkb3ctZGV2ZWwvMjAxNC1TZXB0ZW1iZXIvMDEwNDQ2Lmh0bWxdCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGV0ZXIua2plbGxlcnN0ZWR0QGF4aXMuY29tPgorLS0tCisgc3JjL3VzZXJhZGQuYyB8IDggKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJhZGQuYyBiL3NyYy91c2VyYWRkLmMKK2luZGV4IGE4YTFmNzYuLmUxZWJmNTAgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmFkZC5jCisrKysgYi9zcmMvdXNlcmFkZC5jCitAQCAtMTk5Myw5ICsxOTkzLDExIEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2VuZGlmCQkJCS8qIFVTRV9QQU0gKi8KKyAjZW5kaWYJCQkJLyogQUNDVF9UT09MU19TRVRVSUQgKi8KKyAKKysjaWZkZWYgRU5BQkxFX1NVQklEUworIAkvKiBOZWVkZWQgZm9yIHVzZXJucyBjaGVjayAqLworLQl1aWRfdCB1aWRfbWluID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUlOIiwgMTAwMFVMKTsKKy0JdWlkX3QgdWlkX21heCA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01BWCIsIDYwMDAwVUwpOworKwl1aWRfdCB1aWRfbWluOworKwl1aWRfdCB1aWRfbWF4OworKyNlbmRpZgorIAorIAkvKgorIAkgKiBHZXQgbXkgbmFtZSBzbyB0aGF0IEkgY2FuIHVzZSBpdCB0byByZXBvcnQgZXJyb3JzLgorQEAgLTIwMjYsNiArMjAyOCw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWlzX3NoYWRvd19ncnAgPSBzZ3JfZmlsZV9wcmVzZW50ICgpOworICNlbmRpZgorICNpZmRlZiBFTkFCTEVfU1VCSURTCisrCXVpZF9taW4gPSAodWlkX3QpIGdldGRlZl91bG9uZyAoIlVJRF9NSU4iLCAxMDAwVUwpOworKwl1aWRfbWF4ID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUFYIiwgNjAwMDBVTCk7CisgCWlzX3N1Yl91aWQgPSBzdWJfdWlkX2ZpbGVfcHJlc2VudCAoKSAmJiAhcmZsZyAmJgorIAkgICAgKCF1c2VyX2lkIHx8ICh1c2VyX2lkIDw9IHVpZF9tYXggJiYgdXNlcl9pZCA+PSB1aWRfbWluKSk7CisgCWlzX3N1Yl9naWQgPSBzdWJfZ2lkX2ZpbGVfcHJlc2VudCAoKSAmJiAhcmZsZyAmJgorLS0gCisxLjkuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLXVzZXJhZGQuYy1jcmVhdGUtcGFyZW50LWRpcmVjdG9yaWVzLXdoZW4tbmVjZXNzYXJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZGRlOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaApAQCAtMCwwICsxLDEwOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU3ViamVjdDogdXNlcmFkZC5jOiBjcmVhdGUgcGFyZW50IGRpcmVjdG9yaWVzIHdoZW4gbmVjZXNzYXJ5CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy91c2VyYWRkLmMgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VyYWRkLmMgYi9zcmMvdXNlcmFkZC5jCitpbmRleCA0YmQ5NjlkLi5jYjVkZDZjIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJhZGQuYworKysrIGIvc3JjL3VzZXJhZGQuYworQEAgLTE4OTMsNiArMTg5MywzNSBAQCBzdGF0aWMgdm9pZCB1c3JfdXBkYXRlICh2b2lkKQorIH0KKyAKKyAvKgorKyAqIG1rZGlyX3AgLSBjcmVhdGUgZGlyZWN0b3JpZXMsIGluY2x1ZGluZyBwYXJlbnQgZGlyZWN0b3JpZXMgd2hlbiBuZWVkZWQKKysgKgorKyAqIHNpbWlsYXIgdG8gYG1rZGlyIC1wJworKyAqLworK3ZvaWQgbWtkaXJfcChjb25zdCBjaGFyICpwYXRoKSB7CisrCWludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisrCWNoYXIgbmV3ZGlyW2xlbiArIDFdOworKwltb2RlX3QgbW9kZSA9IDA3NTU7CisrCWludCBpID0gMDsKKysKKysJaWYgKHBhdGhbaV0gPT0gJ1wwJykgeworKwkJcmV0dXJuOworKwl9CisrCisrCS8qIHNraXAgdGhlIGxlYWRpbmcgJy8nICovCisrCWkrKzsKKysKKysJd2hpbGUocGF0aFtpXSAhPSAnXDAnKSB7CisrCQlpZiAocGF0aFtpXSA9PSAnLycpIHsKKysJCQlzdHJuY3B5KG5ld2RpciwgcGF0aCwgaSk7CisrCQkJbmV3ZGlyW2ldID0gJ1wwJzsKKysJCQlta2RpcihuZXdkaXIsIG1vZGUpOworKwkJfQorKwkJaSsrOworKwl9CisrCW1rZGlyKHBhdGgsIG1vZGUpOworK30KKysKKysvKgorICAqIGNyZWF0ZV9ob21lIC0gY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkKKyAgKgorICAqCWNyZWF0ZV9ob21lKCkgY3JlYXRlcyB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90CitAQCAtMTkwNywzNiArMTkzNiwzMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfaG9tZSAodm9pZCkKKyAJCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisgCQl9CisgI2VuZGlmCistCQkvKiBYWFggLSBjcmVhdGUgbWlzc2luZyBwYXJlbnQgZGlyZWN0b3JpZXMuICAtLW1hcmVrbSAqLworLQkJaWYgKG1rZGlyICh1c2VyX2hvbWUsIDApICE9IDApIHsKKy0JCQlmcHJpbnRmIChzdGRlcnIsCistCQkJICAgICAgICAgXygiJXM6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICVzXG4iKSwKKy0JCQkgICAgICAgICBQcm9nLCB1c2VyX2hvbWUpOworLSNpZmRlZiBXSVRIX0FVRElUCistCQkJYXVkaXRfbG9nZ2VyIChBVURJVF9BRERfVVNFUiwgUHJvZywKKy0JCQkgICAgICAgICAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorLQkJCSAgICAgICAgICAgICAgdXNlcl9uYW1lLCAodW5zaWduZWQgaW50KSB1c2VyX2lkLAorLQkJCSAgICAgICAgICAgICAgU0hBRE9XX0FVRElUX0ZBSUxVUkUpOworLSNlbmRpZgorLQkJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKy0JCX0KKy0JCWNob3duICh1c2VyX2hvbWUsIHVzZXJfaWQsIHVzZXJfZ2lkKTsKKy0JCWNobW9kICh1c2VyX2hvbWUsCistCQkgICAgICAgMDc3NyAmIH5nZXRkZWZfbnVtICgiVU1BU0siLCBHRVRERUZfREVGQVVMVF9VTUFTSykpOworLQkJaG9tZV9hZGRlZCA9IHRydWU7CisrCQlta2Rpcl9wKHVzZXJfaG9tZSk7CisrCX0KKysJaWYgKGFjY2VzcyAodXNlcl9ob21lLCBGX09LKSAhPSAwKSB7CisgI2lmZGVmIFdJVEhfQVVESVQKKyAJCWF1ZGl0X2xvZ2dlciAoQVVESVRfQUREX1VTRVIsIFByb2csCisgCQkgICAgICAgICAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorIAkJICAgICAgICAgICAgICB1c2VyX25hbWUsICh1bnNpZ25lZCBpbnQpIHVzZXJfaWQsCistCQkgICAgICAgICAgICAgIFNIQURPV19BVURJVF9TVUNDRVNTKTsKKysJCSAgICAgICAgICAgICAgU0hBRE9XX0FVRElUX0ZBSUxVUkUpOworICNlbmRpZgorLSNpZmRlZiBXSVRIX1NFTElOVVgKKy0JCS8qIFJlc2V0IFNFTGludXggdG8gY3JlYXRlIGZpbGVzIHdpdGggZGVmYXVsdCBjb250ZXh0cyAqLworLQkJaWYgKHJlc2V0X3NlbGludXhfZmlsZV9jb250ZXh0ICgpICE9IDApIHsKKy0JCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CistCQl9CisrCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisrCX0KKysJY2hvd24gKHVzZXJfaG9tZSwgdXNlcl9pZCwgdXNlcl9naWQpOworKwljaG1vZCAodXNlcl9ob21lLAorKwkgICAgICAgMDc3NyAmIH5nZXRkZWZfbnVtICgiVU1BU0siLCBHRVRERUZfREVGQVVMVF9VTUFTSykpOworKwlob21lX2FkZGVkID0gdHJ1ZTsKKysjaWZkZWYgV0lUSF9BVURJVAorKwlhdWRpdF9sb2dnZXIgKEFVRElUX0FERF9VU0VSLCBQcm9nLAorKwkJICAgICAgImFkZGluZyBob21lIGRpcmVjdG9yeSIsCisrCQkgICAgICB1c2VyX25hbWUsICh1bnNpZ25lZCBpbnQpIHVzZXJfaWQsCisrCQkgICAgICBTSEFET1dfQVVESVRfU1VDQ0VTUyk7CisgI2VuZGlmCisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKwkvKiBSZXNldCBTRUxpbnV4IHRvIGNyZWF0ZSBmaWxlcyB3aXRoIGRlZmF1bHQgY29udGV4dHMgKi8KKysJaWYgKHJlc2V0X3NlbGludXhfZmlsZV9jb250ZXh0ICgpICE9IDApIHsKKysJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKyAJfQorKyNlbmRpZgorIH0KKyAKKyAvKgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2FsbG93LWZvci1zZXR0aW5nLXBhc3N3b3JkLWluLWNsZWFyLXRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkYTI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMjAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitBbGxvdyBmb3Igc2V0dGluZyBwYXNzd29yZCBpbiBjbGVhciB0ZXh0LgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCAgICA4ICsrKystLS0tCisgc3JjL2dyb3VwYWRkLmMgIHwgICAgOCArKysrKysrLQorIHNyYy9ncm91cG1vZC5jICB8ICAgIDggKysrKysrKy0KKyBzcmMvdXNlcmFkZC5jICAgfCAgICA5ICsrKysrKystLQorIHNyYy91c2VybW9kLmMgICB8ICAgIDggKysrKysrKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDI1ZTI4OGQuLjg1NmIwODcgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTg4LDEwICs4OCwxMCBAQCBjaGdwYXNzd2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgY2hzaF9MREFERCAgICAgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUX05PUEFNKSAkKExJQlNLRVkpICQoTElCTUQpCisgY2hwYXNzd2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdwYXNzd2RfTERBREQgID0gJChMREFERCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorLWdyb3VwYWRkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorK2dyb3VwYWRkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdyb3VwZGVsX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorIGdyb3VwbWVtc19MREFERCA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQlNFTElOVVgpCistZ3JvdXBtb2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpCisrZ3JvdXBtb2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgZ3JwY2tfTERBREQgICAgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCisgZ3JwY29udl9MREFERCAgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCisgZ3JwdW5jb252X0xEQUREID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorQEAgLTExMSw5ICsxMTEsOSBAQCBzdV9TT1VSQ0VTICAgICA9IFwKKyAJc3VhdXRoLmMKKyBzdV9MREFERCAgICAgICA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQkNSWVBUX05PUEFNKSAkKExJQlNLRVkpICQoTElCTUQpCisgc3Vsb2dpbl9MREFERCAgPSAkKExEQUREKSAkKExJQkNSWVBUKQorLXVzZXJhZGRfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKQorK3VzZXJhZGRfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKSAkKExJQkNSWVBUKQorIHVzZXJkZWxfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKQorLXVzZXJtb2RfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKQorK3VzZXJtb2RfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKSAkKExJQkNSWVBUKQorIHZpcHdfTERBREQgICAgID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorIAorIGluc3RhbGwtYW06IGFsbC1hbQorZGlmZiAtLWdpdCBhL3NyYy9ncm91cGFkZC5jIGIvc3JjL2dyb3VwYWRkLmMKK2luZGV4IGY3MTZmNTcuLjRlMjhjMjYgMTAwNjQ0CistLS0gYS9zcmMvZ3JvdXBhZGQuYworKysrIGIvc3JjL2dyb3VwYWRkLmMKK0BAIC0xMjQsNiArMTI0LDcgQEAgc3RhdGljIC8qQG5vcmV0dXJuQCovdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGVcbiIKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub24tdW5pcXVlKSBHSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICB1c2UgdGhpcyBlbmNyeXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXcgZ3JvdXBcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCB1c2UgdGhpcyBjbGVhciBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1yLCAtLXN5c3RlbSAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKCJcbiIsIHVzYWdlb3V0KTsKK0BAIC0zODcsMTIgKzM4OCwxMyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl7ImtleSIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0snfSwKKyAJCXsibm9uLXVuaXF1ZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJeyJwYXNzd29yZCIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQl7InN5c3RlbSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InfSwKKyAJCXsicm9vdCIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAorIAkJe05VTEwsIDAsIE5VTEwsICdcMCd9CisgCX07CisgCistCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZmc6aEs6b3A6clI6IiwKKysJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJmZzpoSzpvcDpQOnJSOiIsCisgCQkgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2YnOgorQEAgLTQ0NCw2ICs0NDYsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXBmbGcgPSB0cnVlOworIAkJCWdyb3VwX3Bhc3N3ZCA9IG9wdGFyZzsKKyAJCQlicmVhazsKKysJCWNhc2UgJ1AnOgorKwkJCXBmbGcgPSB0cnVlOworKwkJCWdyb3VwX3Bhc3N3ZCA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJYnJlYWs7CisgCQljYXNlICdyJzoKKyAJCQlyZmxnID0gdHJ1ZTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvZ3JvdXBtb2QuYyBiL3NyYy9ncm91cG1vZC5jCitpbmRleCBkOWQzODA3Li42OGY0OWQxIDEwMDY0NAorLS0tIGEvc3JjL2dyb3VwbW9kLmMKKysrKyBiL3NyYy9ncm91cG1vZC5jCitAQCAtMTI3LDYgKzEyNyw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdG8gdXNlIGEgZHVwbGljYXRlIChub24tdW5pcXVlKSBHSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICBjaGFuZ2UgdGhlIHBhc3N3b3JkIHRvIHRoaXMgKGVuY3J5cHRlZClcbiIKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NXT1JEXG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgY2hhbmdlIHRoZSBwYXNzd29yZCB0byB0aGlzIGNsZWFyIFBBU1NXT1JEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKCJcbiIsIHVzYWdlb3V0KTsKKyAJZXhpdCAoc3RhdHVzKTsKK0BAIC0zNzUsMTAgKzM3NiwxMSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl7Im5ldy1uYW1lIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ24nfSwKKyAJCXsibm9uLXVuaXF1ZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJeyJwYXNzd29yZCIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQl7InJvb3QiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCXtOVUxMLCAwLCBOVUxMLCAnXDAnfQorIAl9OworLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImc6aG46b3A6UjoiLAorKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImc6aG46b3A6UDpSOiIsCisgCQkgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2cnOgorQEAgLTQwNSw2ICs0MDcsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCWdyb3VwX3Bhc3N3ZCA9IG9wdGFyZzsKKyAJCQlwZmxnID0gdHJ1ZTsKKyAJCQlicmVhazsKKysJCWNhc2UgJ1AnOgorKwkJCWdyb3VwX3Bhc3N3ZCA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJcGZsZyA9IHRydWU7CisrCQkJYnJlYWs7CisgCQljYXNlICdSJzogLyogbm8tb3AsIGhhbmRsZWQgaW4gcHJvY2Vzc19yb290X2ZsYWcgKCkgKi8KKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJhZGQuYyBiL3NyYy91c2VyYWRkLmMKK2luZGV4IGIzYmQ0NTEuLjQ0MTZmOTAgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmFkZC5jCisrKysgYi9zcmMvdXNlcmFkZC5jCitAQCAtNzczLDYgKzc3Myw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdG8gY3JlYXRlIHVzZXJzIHdpdGggZHVwbGljYXRlXG4iCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uLXVuaXF1ZSkgVUlEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgZW5jcnlwdGVkIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKysJKHZvaWQpIGZwdXRzIChfKCIgIC1QLCAtLWNsZWFyLXBhc3N3b3JkIFBBU1NXT1JEIGNsZWFyIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1yLCAtLXN5c3RlbSAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXMsIC0tc2hlbGwgU0hFTEwgICAgICAgICAgICAgbG9naW4gc2hlbGwgb2YgdGhlIG5ldyBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworQEAgLTEwNDcsNiArMTA0OCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQl7Im5vLXVzZXItZ3JvdXAiLCAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdOJ30sCisgCQkJeyJub24tdW5pcXVlIiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJCXsicGFzc3dvcmQiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysJCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQkJeyJzeXN0ZW0iLCAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAncid9LAorIAkJCXsicm9vdCIsICAgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCQl7InNoZWxsIiwgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCitAQCAtMTA1OSw5ICsxMDYxLDkgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJfTsKKyAJCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LAorICNpZmRlZiBXSVRIX1NFTElOVVgKKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYjpjOmQ6RGU6ZjpnOkc6aGs6SzpsbU1Ob3A6clI6czp1OlVaOiIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOlA6clI6czp1OlVaOiIsCisgI2Vsc2UJCQkJLyogIVdJVEhfU0VMSU5VWCAqLworLQkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpyUjpzOnU6VSIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOlA6clI6czp1OlUiLAorICNlbmRpZgkJCQkvKiAhV0lUSF9TRUxJTlVYICovCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHsKKyAJCQlzd2l0Y2ggKGMpIHsKK0BAIC0xMjI3LDYgKzEyMjksOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJCX0KKyAJCQkJdXNlcl9wYXNzID0gb3B0YXJnOworIAkJCQlicmVhazsKKysJCQljYXNlICdQJzogLyogc2V0IGNsZWFyIHRleHQgcGFzc3dvcmQgKi8KKysJCQkJdXNlcl9wYXNzID0gcHdfZW5jcnlwdCAob3B0YXJnLCBjcnlwdF9tYWtlX3NhbHQgKE5VTEwsIE5VTEwpKTsKKysJCQkJYnJlYWs7CisgCQkJY2FzZSAncic6CisgCQkJCXJmbGcgPSB0cnVlOworIAkJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvdXNlcm1vZC5jIGIvc3JjL3VzZXJtb2QuYworaW5kZXggZTdkNDM1MS4uYjc5ZjdhMyAxMDA2NDQKKy0tLSBhL3NyYy91c2VybW9kLmMKKysrKyBiL3NyYy91c2VybW9kLmMKK0BAIC00MTksNiArNDE5LDcgQEAgc3RhdGljIC8qQG5vcmV0dXJuQCovdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBsb2NhdGlvbiAodXNlIG9ubHkgd2l0aCAtZClcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtbywgLS1ub24tdW5pcXVlICAgICAgICAgICAgICBhbGxvdyB1c2luZyBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIFVJRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1wLCAtLXBhc3N3b3JkIFBBU1NXT1JEICAgICAgIHVzZSBlbmNyeXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXcgcGFzc3dvcmRcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCB1c2UgY2xlYXIgcGFzc3dvcmQgZm9yIHRoZSBuZXcgcGFzc3dvcmRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtUiwgLS1yb290IENIUk9PVF9ESVIgICAgICAgICBkaXJlY3RvcnkgdG8gY2hyb290IGludG9cbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcywgLS1zaGVsbCBTSEVMTCAgICAgICAgICAgICBuZXcgbG9naW4gc2hlbGwgZm9yIHRoZSB1c2VyIGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtdSwgLS11aWQgVUlEICAgICAgICAgICAgICAgICBuZXcgVUlEIGZvciB0aGUgdXNlciBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworQEAgLTk5Niw2ICs5OTcsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJeyJtb3ZlLWhvbWUiLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ20nfSwKKyAJCQl7Im5vbi11bmlxdWUiLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJCXsicGFzc3dvcmQiLCAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJCXsicm9vdCIsICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQkJeyJzaGVsbCIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwKKyAJCQl7InVpZCIsICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndSd9LAorQEAgLTEwMTIsNyArMTAxNCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQl7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KKyAJCX07CisgCQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwKKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYWM6ZDplOmY6ZzpHOmhsOkxtb3A6UjpzOnU6VSIKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAiYWM6ZDplOmY6ZzpHOmhsOkxtb3A6UDpSOnM6dTpVIgorICNpZmRlZiBFTkFCTEVfU1VCSURTCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgInY6dzpWOlc6IgorICNlbmRpZgkJCQkvKiBFTkFCTEVfU1VCSURTICovCitAQCAtMTExMiw2ICsxMTE0LDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQkJdXNlcl9wYXNzID0gb3B0YXJnOworIAkJCQlwZmxnID0gdHJ1ZTsKKyAJCQkJYnJlYWs7CisrCQkJY2FzZSAnUCc6CisrCQkJCXVzZXJfcGFzcyA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJCXBmbGcgPSB0cnVlOworKwkJCQlicmVhazsKKyAJCQljYXNlICdSJzogLyogbm8tb3AsIGhhbmRsZWQgaW4gcHJvY2Vzc19yb290X2ZsYWcgKCkgKi8KKyAJCQkJYnJlYWs7CisgCQkJY2FzZSAncyc6CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NoZWNrX3NpemVfb2ZfdWlkX3RfYW5kX2dpZF90X3VzaW5nX0FDX0NIRUNLX1NJWkVPRi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1NTkwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAyY2I1NDE1OGI4MGNkYmQ5N2NhM2IzNmRmODNmOTI1NWU5MjNhZTNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFtZXMgTGUgQ3Vpcm90IDxjaGV3aUBhdXJhLW9ubGluZS5jby51az4KK0RhdGU6IFNhdCwgMjMgQXVnIDIwMTQgMDk6NDY6MzkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgc2l6ZSBvZiB1aWRfdCBhbmQgZ2lkX3QgdXNpbmcgQUNfQ0hFQ0tfU0laRU9GCisKK1RoaXMgYnVpbHQtaW4gY2hlY2sgaXMgc2ltcGxlciB0aGFuIHRoZSBwcmV2aW91cyBtZXRob2QgYW5kLCBtb3N0CitpbXBvcnRhbnRseSwgd29ya3Mgd2hlbiBjcm9zcy1jb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKK1todHRwczovL2dpdGh1Yi5jb20vc2hhZG93LW1haW50L3NoYWRvdy9jb21taXQvMmNiNTQxNThiODBjZGJkOTdjYTNiMzZkZjgzZjkyNTVlOTIzYWUzZl0KKworU2lnbmVkLW9mZi1ieTogU2VyZ2UgSGFsbHluIDxzZXJnZS5oYWxseW5AdWJ1bnR1LmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDE0ICsrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDFhM2Y4NDEuLjRhNGQ2ZDAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTMzNSwxNiArMzM1LDEwIEBAIGlmIHRlc3QgIiRlbmFibGVfc3ViaWRzIiAhPSAibm8iOyB0aGVuCisgCWRubAorIAlkbmwgRklYTUU6IGNoZWNrIGlmIDMyIGJpdCBVSURzL0dJRHMgYXJlIHN1cHBvcnRlZCBieSBsaWJjCisgCWRubAorLQlBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLWludCBtYWluKHZvaWQpIHsKKy0JdWlkX3QgdTsKKy0JZ2lkX3QgZzsKKy0JcmV0dXJuIChzaXplb2YgdSA8IDQpIHx8IChzaXplb2YgZyA8IDQpOworLX0KKy0JXSldLCBbaWQzMmJpdD0ieWVzIl0sIFtpZDMyYml0PSJubyJdKQorLQorLQlpZiB0ZXN0ICJ4JGlkMzJiaXQiID0gInh5ZXMiOyB0aGVuCisrCUFDX0NIRUNLX1NJWkVPRihbdWlkX3RdLCwgWyNpbmNsdWRlICJzeXMvdHlwZXMuaCJdKQorKwlBQ19DSEVDS19TSVpFT0YoW2dpZF90XSwsIFsjaW5jbHVkZSAic3lzL3R5cGVzLmgiXSkKKysKKysJaWYgdGVzdCAiJGFjX2N2X3NpemVvZl91aWRfdCIgLWdlIDQgJiYgdGVzdCAiJGFjX2N2X3NpemVvZl9naWRfdCIgLWdlIDQ7IHRoZW4KKyAJCUFDX0RFRklORShFTkFCTEVfU1VCSURTLCAxLCBbRGVmaW5lIHRvIHN1cHBvcnQgdGhlIHN1Ym9yZGluYXRlIElEcy5dKQorIAkJZW5hYmxlX3N1Ymlkcz0ieWVzIgorIAllbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jb21tb25pby5jLWZpeC11bmV4cGVjdGVkLW9wZW4tZmFpbHVyZS1pbi1jaHJvb3QtZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTNkMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitjb21tb25pby5jOiBmaXggdW5leHBlY3RlZCBvcGVuIGZhaWx1cmUgaW4gY2hyb290IGVudmlyb25tZW50CisKK1doZW4gdXNpbmcgY29tbWFuZHMgd2l0aCAnLVIgPG5ld3Jvb3Q+JyBvcHRpb24gaW4gb3VyIHBzZXVkbyBlbnZpcm9ubWVudCwKK3dlIHdvdWxkIHVzdWFsbHkgZ2V0IHRoZSAnUGVtaXNzaW9uIERlbmllZCcgZXJyb3IuIFRoaXMgcGF0Y2ggc2VydmVzIGFzCithIHdvcmthcm91bmQgdG8gdGhpcyBwcm9ibGVtLgorCitOb3RlIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSB0aGUgbG9naWMgaW4gdGhlIGNvZGUsIGl0IGp1c3QgZXhwYW5kcwordGhlIGNvZGVzLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvY29tbW9uaW8uYyB8ICAgMTYgKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2NvbW1vbmlvLmMgYi9saWIvY29tbW9uaW8uYworaW5kZXggY2M1MzZiZi4uNTFjYWZkOSAxMDA2NDQKKy0tLSBhL2xpYi9jb21tb25pby5jCisrKysgYi9saWIvY29tbW9uaW8uYworQEAgLTYxMywxMCArNjEzLDE4IEBAIGludCBjb21tb25pb19vcGVuIChzdHJ1Y3QgY29tbW9uaW9fZGIgKmRiLCBpbnQgbW9kZSkKKyAJZGItPmN1cnNvciA9IE5VTEw7CisgCWRiLT5jaGFuZ2VkID0gZmFsc2U7CisgCistCWZkID0gb3BlbiAoZGItPmZpbGVuYW1lLAorLQkgICAgICAgICAgICAgKGRiLT5yZWFkb25seSA/IE9fUkRPTkxZIDogT19SRFdSKQorLQkgICAgICAgICAgIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLIHwgT19OT0ZPTExPVyk7CistCXNhdmVkX2Vycm5vID0gZXJybm87CisrCWlmIChkYi0+cmVhZG9ubHkpIHsKKysJCWZkID0gb3BlbiAoZGItPmZpbGVuYW1lLAorKwkJCSAgICh0cnVlID8gT19SRE9OTFkgOiBPX1JEV1IpCisrCQkJICAgfCBPX05PQ1RUWSB8IE9fTk9OQkxPQ0sgfCBPX05PRk9MTE9XKTsKKysJCXNhdmVkX2Vycm5vID0gZXJybm87CisrCX0gZWxzZSB7CisrCQlmZCA9IG9wZW4gKGRiLT5maWxlbmFtZSwKKysJCQkgICAoZmFsc2UgPyBPX1JET05MWSA6IE9fUkRXUikKKysJCQkgICB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyB8IE9fTk9GT0xMT1cpOworKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKysJfQorKworIAlkYi0+ZnAgPSBOVUxMOworIAlpZiAoZmQgPj0gMCkgeworICNpZmRlZiBXSVRIX1RDQgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9kaXNhYmxlLXN5c2xvZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9kaXNhYmxlLXN5c2xvZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTQzZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2Rpc2FibGUtc3lzbG9nLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Rpc2FibGUgdXNlIG9mIHN5c2xvZyB0byBwcmV2ZW50IHN5c3Jvb3QgdXNlciBhbmQgZ3JvdXAgYWRkaXRpb25zIGZyb20KK3dyaXRpbmcgZW50cmllcyB0byB0aGUgaG9zdCdzIHN5c2xvZy4gVGhpcyBwYXRjaCBzaG91bGQgb25seSBiZSB1c2VkCit3aXRoIHRoZSBzaGFkb3ctbmF0aXZlIHJlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL2dyb3VwYWRkLmMgc2hhZG93LTQuMS40LjMvc3JjL2dyb3VwYWRkLmMKKy0tLSBzaGFkb3ctNC4xLjQuMy5vcmlnLy9zcmMvZ3JvdXBhZGQuYwkyMDExLTAyLTEzIDA5OjU4OjE2LjAwMDAwMDAwMCAtMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL3NyYy9ncm91cGFkZC5jCTIwMTItMDQtMDUgMTA6MDU6NTkuNDQwMDAxNzU4IC0wNzAwCitAQCAtMzQsNiArMzQsOSBAQAorIAorICNpZGVudCAiJElkOiBncm91cGFkZC5jIDMwMTUgMjAwOS0wNi0wNSAyMjoxNjo1NlogbmVrcmFsLWd1ZXN0ICQiCisgCisrLyogRGlzYWJsZSB1c2Ugb2Ygc3lzbG9nIHNpbmNlIHdlJ3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kIGFnYWluc3QgYSBzeXNyb290ICovCisrI3VuZGVmIFVTRV9TWVNMT0cKKysKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CitkaWZmIC11ck4gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL3VzZXJhZGQuYyBzaGFkb3ctNC4xLjQuMy9zcmMvdXNlcmFkZC5jCistLS0gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL3VzZXJhZGQuYwkyMDExLTAyLTEzIDA5OjU4OjE2LjAwMDAwMDAwMCAtMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL3NyYy91c2VyYWRkLmMJMjAxMi0wNC0wNSAxMDowNjoyNS4wNzYwMDEzMTUgLTA3MDAKK0BAIC0zNCw2ICszNCw5IEBACisgCisgI2lkZW50ICIkSWQ6IHVzZXJhZGQuYyAzMDE1IDIwMDktMDYtMDUgMjI6MTY6NTZaIG5la3JhbC1ndWVzdCAkIgorIAorKy8qIERpc2FibGUgdXNlIG9mIHN5c2xvZyBzaW5jZSB3ZSdyZSBydW5uaW5nIHRoaXMgY29tbWFuZCBhZ2FpbnN0IGEgc3lzcm9vdCAqLworKyN1bmRlZiBVU0VfU1lTTE9HCisrCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjYjkxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1N1YmplY3Q6IGZpeCBpbnN0YWxsYXRpb24gZmFpbHVyZSB3aXRoIHN1YmlkcyBkaXNhYmxlZAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCAgICA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCAyNWUyODhkLi4wNzZmOGVmIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC01Miw3ICs1MiwxMCBAQCB1c2Jpbl9QUk9HUkFNUyA9IFwKKyBub2luc3RfUFJPR1JBTVMgPSBpZCBzdWxvZ2luCisgCisgc3VpZGJpbnMgICAgICAgPSBzdQorLXN1aWR1YmlucyAgICAgID0gY2hhZ2UgY2hmbiBjaHNoIGV4cGlyeSBncGFzc3dkIG5ld2dycCBwYXNzd2QgbmV3dWlkbWFwIG5ld2dpZG1hcAorK3N1aWR1YmlucyAgICAgID0gY2hhZ2UgY2hmbiBjaHNoIGV4cGlyeSBncGFzc3dkIG5ld2dycCBwYXNzd2QKKytpZiBFTkFCTEVfU1VCSURTCisrc3VpZHViaW5zICs9IG5ld2dpZG1hcCBuZXd1aWRtYXAKKytlbmRpZgorIGlmIEFDQ1RfVE9PTFNfU0VUVUlECisgCXN1aWR1YmlucyArPSBjaGFnZSBjaGdwYXNzd2QgY2hwYXNzd2QgZ3JvdXBhZGQgZ3JvdXBkZWwgZ3JvdXBtb2QgbmV3dXNlcnMgdXNlcmFkZCB1c2VyZGVsIHVzZXJtb2QKKyBlbmRpZgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luLmRlZnNfc2hhZG93LXN5c3Jvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2OGRkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290CkBAIC0wLDAgKzEsMzg2IEBACisjCisjIC9ldGMvbG9naW4uZGVmcyAtIENvbmZpZ3VyYXRpb24gY29udHJvbCBkZWZpbml0aW9ucyBmb3IgdGhlIHNoYWRvdyBwYWNrYWdlLgorIworIwkkSWQ6IGxvZ2luLmRlZnMgMzAzOCAyMDA5LTA3LTIzIDIwOjQxOjM1WiBuZWtyYWwtZ3Vlc3QgJAorIworCisjCisjIERlbGF5IGluIHNlY29uZHMgYmVmb3JlIGJlaW5nIGFsbG93ZWQgYW5vdGhlciBhdHRlbXB0IGFmdGVyIGEgbG9naW4gZmFpbHVyZQorIyBOb3RlOiBXaGVuIFBBTSBpcyB1c2VkLCBzb21lIG1vZHVsZXMgbWF5IGVuZm9yZSBhIG1pbmltYWwgZGVsYXkgKGUuZy4KKyMgICAgICAgcGFtX3VuaXggZW5mb3JjZXMgYSAycyBkZWxheSkKKyMKK0ZBSUxfREVMQVkJCTMKKworIworIyBFbmFibGUgbG9nZ2luZyBhbmQgZGlzcGxheSBvZiAvdmFyL2xvZy9mYWlsbG9nIGxvZ2luIGZhaWx1cmUgaW5mby4KKyMKKyNGQUlMTE9HX0VOQUIJCXllcworCisjCisjIEVuYWJsZSBkaXNwbGF5IG9mIHVua25vd24gdXNlcm5hbWVzIHdoZW4gbG9naW4gZmFpbHVyZXMgYXJlIHJlY29yZGVkLgorIworTE9HX1VOS0ZBSUxfRU5BQglubworCisjCisjIEVuYWJsZSBsb2dnaW5nIG9mIHN1Y2Nlc3NmdWwgbG9naW5zCisjCitMT0dfT0tfTE9HSU5TCQlubworCisjCisjIEVuYWJsZSBsb2dnaW5nIGFuZCBkaXNwbGF5IG9mIC92YXIvbG9nL2xhc3Rsb2cgbG9naW4gdGltZSBpbmZvLgorIworI0xBU1RMT0dfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlIGNoZWNraW5nIGFuZCBkaXNwbGF5IG9mIG1haWxib3ggc3RhdHVzIHVwb24gbG9naW4uCisjCisjIERpc2FibGUgaWYgdGhlIHNoZWxsIHN0YXJ0dXAgZmlsZXMgYWxyZWFkeSBjaGVjayBmb3IgbWFpbAorIyAoIm1haWx4IC1lIiBvciBlcXVpdmFsZW50KS4KKyMKKyMjTUFJTF9DSEVDS19FTkFCCQl5ZXMKKworIworIyBFbmFibGUgYWRkaXRpb25hbCBjaGVja3MgdXBvbiBwYXNzd29yZCBjaGFuZ2VzLgorIworI09CU0NVUkVfQ0hFQ0tTX0VOQUIJeWVzCisKKyMKKyMgRW5hYmxlIGNoZWNraW5nIG9mIHRpbWUgcmVzdHJpY3Rpb25zIHNwZWNpZmllZCBpbiAvZXRjL3BvcnR0aW1lLgorIworI1BPUlRUSU1FX0NIRUNLU19FTkFCCXllcworCisjCisjIEVuYWJsZSBzZXR0aW5nIG9mIHVsaW1pdCwgdW1hc2ssIGFuZCBuaWNlbmVzcyBmcm9tIHBhc3N3ZCBnZWNvcyBmaWVsZC4KKyMKKyNRVU9UQVNfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlICJzeXNsb2ciIGxvZ2dpbmcgb2Ygc3UgYWN0aXZpdHkgLSBpbiBhZGRpdGlvbiB0byBzdWxvZyBmaWxlIGxvZ2dpbmcuCisjIFNZU0xPR19TR19FTkFCIGRvZXMgdGhlIHNhbWUgZm9yIG5ld2dycCBhbmQgc2cuCisjCitTWVNMT0dfU1VfRU5BQgkJeWVzCitTWVNMT0dfU0dfRU5BQgkJeWVzCisKKyMKKyMgSWYgZGVmaW5lZCwgZWl0aGVyIGZ1bGwgcGF0aG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgZGV2aWNlIG5hbWVzIG9yCisjIGEgIjoiIGRlbGltaXRlZCBsaXN0IG9mIGRldmljZSBuYW1lcy4gIFJvb3QgbG9naW5zIHdpbGwgYmUgYWxsb3dlZCBvbmx5CisjIHVwb24gdGhlc2UgZGV2aWNlcy4KKyMKK0NPTlNPTEUJCS9ldGMvc2VjdXJldHR5CisjQ09OU09MRQljb25zb2xlOnR0eTAxOnR0eTAyOnR0eTAzOnR0eTA0CisKKyMKKyMgSWYgZGVmaW5lZCwgYWxsIHN1IGFjdGl2aXR5IGlzIGxvZ2dlZCB0byB0aGlzIGZpbGUuCisjCisjU1VMT0dfRklMRQkvdmFyL2xvZy9zdWxvZworCisjCisjIElmIGRlZmluZWQsICI6IiBkZWxpbWl0ZWQgbGlzdCBvZiAibWVzc2FnZSBvZiB0aGUgZGF5IiBmaWxlcyB0bworIyBiZSBkaXNwbGF5ZWQgdXBvbiBsb2dpbi4KKyMKKyNNT1REX0ZJTEUJL2V0Yy9tb3RkCisjTU9URF9GSUxFCS9ldGMvbW90ZDovdXNyL2xpYi9uZXdzL25ld3MtbW90ZAorCisjCisjIElmIGRlZmluZWQsIHRoaXMgZmlsZSB3aWxsIGJlIG91dHB1dCBiZWZvcmUgZWFjaCBsb2dpbiBwcm9tcHQuCisjCisjSVNTVUVfRklMRQkvZXRjL2lzc3VlCisKKyMKKyMgSWYgZGVmaW5lZCwgZmlsZSB3aGljaCBtYXBzIHR0eSBsaW5lIHRvIFRFUk0gZW52aXJvbm1lbnQgcGFyYW1ldGVyLgorIyBFYWNoIGxpbmUgb2YgdGhlIGZpbGUgaXMgaW4gYSBmb3JtYXQgc29tZXRoaW5nIGxpa2UgInZ0MTAwICB0dHkwMSIuCisjCisjVFRZVFlQRV9GSUxFCS9ldGMvdHR5dHlwZQorCisjCisjIElmIGRlZmluZWQsIGxvZ2luIGZhaWx1cmVzIHdpbGwgYmUgbG9nZ2VkIGhlcmUgaW4gYSB1dG1wIGZvcm1hdC4KKyMgbGFzdCwgd2hlbiBpbnZva2VkIGFzIGxhc3RiLCB3aWxsIHJlYWQgL3Zhci9sb2cvYnRtcCwgc28uLi4KKyMKKyNGVE1QX0ZJTEUJL3Zhci9sb2cvYnRtcAorCisjCisjIElmIGRlZmluZWQsIG5hbWUgb2YgZmlsZSB3aG9zZSBwcmVzZW5jZSB3aGljaCB3aWxsIGluaGliaXQgbm9uLXJvb3QKKyMgbG9naW5zLiAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBzaG91bGQgYmUgYSBtZXNzYWdlIGluZGljYXRpbmcKKyMgd2h5IGxvZ2lucyBhcmUgaW5oaWJpdGVkLgorIworI05PTE9HSU5TX0ZJTEUJL2V0Yy9ub2xvZ2luCisKKyMKKyMgSWYgZGVmaW5lZCwgdGhlIGNvbW1hbmQgbmFtZSB0byBkaXNwbGF5IHdoZW4gcnVubmluZyAic3UgLSIuICBGb3IKKyMgZXhhbXBsZSwgaWYgdGhpcyBpcyBkZWZpbmVkIGFzICJzdSIgdGhlbiBhICJwcyIgd2lsbCBkaXNwbGF5IHRoZQorIyBjb21tYW5kIGlzICItc3UiLiAgSWYgbm90IGRlZmluZWQsIHRoZW4gInBzIiB3b3VsZCBkaXNwbGF5IHRoZQorIyBuYW1lIG9mIHRoZSBzaGVsbCBhY3R1YWxseSBiZWluZyBydW4sIGUuZy4gc29tZXRoaW5nIGxpa2UgIi1zaCIuCisjCitTVV9OQU1FCQlzdQorCisjCisjICpSRVFVSVJFRCoKKyMgICBEaXJlY3Rvcnkgd2hlcmUgbWFpbGJveGVzIHJlc2lkZSwgX29yXyBuYW1lIG9mIGZpbGUsIHJlbGF0aXZlIHRvIHRoZQorIyAgIGhvbWUgZGlyZWN0b3J5LiAgSWYgeW91IF9kb18gZGVmaW5lIGJvdGgsICNNQUlMX0RJUiB0YWtlcyBwcmVjZWRlbmNlLgorIworI01BSUxfRElSCS92YXIvc3Bvb2wvbWFpbAorTUFJTF9GSUxFCS5tYWlsCisKKyMKKyMgSWYgZGVmaW5lZCwgZmlsZSB3aGljaCBpbmhpYml0cyBhbGwgdGhlIHVzdWFsIGNoYXR0ZXIgZHVyaW5nIHRoZSBsb2dpbgorIyBzZXF1ZW5jZS4gIElmIGEgZnVsbCBwYXRobmFtZSwgdGhlbiBodXNoZWQgbW9kZSB3aWxsIGJlIGVuYWJsZWQgaWYgdGhlCisjIHVzZXIncyBuYW1lIG9yIHNoZWxsIGFyZSBmb3VuZCBpbiB0aGUgZmlsZS4gIElmIG5vdCBhIGZ1bGwgcGF0aG5hbWUsIHRoZW4KKyMgaHVzaGVkIG1vZGUgd2lsbCBiZSBlbmFibGVkIGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorIworSFVTSExPR0lOX0ZJTEUJLmh1c2hsb2dpbgorI0hVU0hMT0dJTl9GSUxFCS9ldGMvaHVzaGxvZ2lucworCisjCisjIElmIGRlZmluZWQsIGVpdGhlciBhIFRaIGVudmlyb25tZW50IHBhcmFtZXRlciBzcGVjIG9yIHRoZQorIyBmdWxseS1yb290ZWQgcGF0aG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgc3VjaCBhIHNwZWMuCisjCisjRU5WX1RaCQlUWj1DU1Q2Q0RUCisjRU5WX1RaCQkvZXRjL3R6bmFtZQorCisjCisjIElmIGRlZmluZWQsIGFuIEhaIGVudmlyb25tZW50IHBhcmFtZXRlciBzcGVjLgorIworIyBmb3IgTGludXgveDg2CisjRU5WX0haCQlIWj0xMDAKKyMgRm9yIExpbnV4L0FscGhhLi4uCisjRU5WX0haCQlIWj0xMDI0CisKKyMKKyMgKlJFUVVJUkVEKiAgVGhlIGRlZmF1bHQgUEFUSCBzZXR0aW5ncywgZm9yIHN1cGVydXNlciBhbmQgbm9ybWFsIHVzZXJzLgorIworIyAodGhleSBhcmUgbWluaW1hbCwgYWRkIHRoZSByZXN0IGluIHRoZSBzaGVsbCBzdGFydHVwIGZpbGVzKQorRU5WX1NVUEFUSAlQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitFTlZfUEFUSAlQQVRIPS9iaW46L3Vzci9iaW4KKworIworIyBUZXJtaW5hbCBwZXJtaXNzaW9ucworIworIwlUVFlHUk9VUAlMb2dpbiB0dHkgd2lsbCBiZSBhc3NpZ25lZCB0aGlzIGdyb3VwIG93bmVyc2hpcC4KKyMJVFRZUEVSTQkJTG9naW4gdHR5IHdpbGwgYmUgc2V0IHRvIHRoaXMgcGVybWlzc2lvbi4KKyMKKyMgSWYgeW91IGhhdmUgYSAid3JpdGUiIHByb2dyYW0gd2hpY2ggaXMgInNldGdpZCIgdG8gYSBzcGVjaWFsIGdyb3VwCisjIHdoaWNoIG93bnMgdGhlIHRlcm1pbmFscywgZGVmaW5lIFRUWUdST1VQIHRvIHRoZSBncm91cCBudW1iZXIgYW5kCisjIFRUWVBFUk0gdG8gMDYyMC4gIE90aGVyd2lzZSBsZWF2ZSBUVFlHUk9VUCBjb21tZW50ZWQgb3V0IGFuZCBhc3NpZ24KKyMgVFRZUEVSTSB0byBlaXRoZXIgNjIyIG9yIDYwMC4KKyMKK1RUWUdST1VQCXR0eQorVFRZUEVSTQkJMDYwMAorCisjCisjIExvZ2luIGNvbmZpZ3VyYXRpb24gaW5pdGlhbGl6YXRpb25zOgorIworIwlFUkFTRUNIQVIJVGVybWluYWwgRVJBU0UgY2hhcmFjdGVyICgnXDAxMCcgPSBiYWNrc3BhY2UpLgorIwlLSUxMQ0hBUglUZXJtaW5hbCBLSUxMIGNoYXJhY3RlciAoJ1wwMjUnID0gQ1RSTC9VKS4KKyMJVUxJTUlUCQlEZWZhdWx0ICJ1bGltaXQiIHZhbHVlLgorIworIyBUaGUgRVJBU0VDSEFSIGFuZCBLSUxMQ0hBUiBhcmUgdXNlZCBvbmx5IG9uIFN5c3RlbSBWIG1hY2hpbmVzLgorIyBUaGUgVUxJTUlUIGlzIHVzZWQgb25seSBpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGl0LgorIyAobm93IGl0IHdvcmtzIHdpdGggc2V0cmxpbWl0IHRvbzsgdWxpbWl0IGlzIGluIDUxMi1ieXRlIHVuaXRzKQorIworIyBQcmVmaXggdGhlc2UgdmFsdWVzIHdpdGggIjAiIHRvIGdldCBvY3RhbCwgIjB4IiB0byBnZXQgaGV4YWRlY2ltYWwuCisjCitFUkFTRUNIQVIJMDE3NworS0lMTENIQVIJMDI1CisjVUxJTUlUCQkyMDk3MTUyCisKKyMgRGVmYXVsdCBpbml0aWFsICJ1bWFzayIgdmFsdWUgZm9yIG5vbi1QQU0gZW5hYmxlZCBzeXN0ZW1zLgorIyBVTUFTSyBpcyBhbHNvIHVzZWQgYnkgdXNlcmFkZCBhbmQgbmV3dXNlcnMgdG8gc2V0IHRoZSBtb2RlIG9mIG5ldyBob21lCisjIGRpcmVjdG9yaWVzLgorIyAwMjIgaXMgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCAwMjcsIG9yIGV2ZW4gMDc3LCBjb3VsZCBiZSBjb25zaWRlcmVkCisjIGJldHRlciBmb3IgcHJpdmFjeS4gVGhlcmUgaXMgbm8gT25lIFRydWUgQW5zd2VyIGhlcmU6IGVhY2ggc3lzYWRtaW4KKyMgbXVzdCBtYWtlIHVwIGhlciBtaW5kLgorVU1BU0sJCTAyMgorCisjCisjIFBhc3N3b3JkIGFnaW5nIGNvbnRyb2xzOgorIworIwlQQVNTX01BWF9EQVlTCU1heGltdW0gbnVtYmVyIG9mIGRheXMgYSBwYXNzd29yZCBtYXkgYmUgdXNlZC4KKyMJUEFTU19NSU5fREFZUwlNaW5pbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgYmV0d2VlbiBwYXNzd29yZCBjaGFuZ2VzLgorIwlQQVNTX01JTl9MRU4JTWluaW11bSBhY2NlcHRhYmxlIHBhc3N3b3JkIGxlbmd0aC4KKyMJUEFTU19XQVJOX0FHRQlOdW1iZXIgb2YgZGF5cyB3YXJuaW5nIGdpdmVuIGJlZm9yZSBhIHBhc3N3b3JkIGV4cGlyZXMuCisjCitQQVNTX01BWF9EQVlTCTk5OTk5CitQQVNTX01JTl9EQVlTCTAKKyNQQVNTX01JTl9MRU4JNQorUEFTU19XQVJOX0FHRQk3CisKKyMKKyMgSWYgInllcyIsIHRoZSB1c2VyIG11c3QgYmUgbGlzdGVkIGFzIGEgbWVtYmVyIG9mIHRoZSBmaXJzdCBnaWQgMCBncm91cAorIyBpbiAvZXRjL2dyb3VwIChjYWxsZWQgInJvb3QiIG9uIG1vc3QgTGludXggc3lzdGVtcykgdG8gYmUgYWJsZSB0byAic3UiCisjIHRvIHVpZCAwIGFjY291bnRzLiAgSWYgdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgZW1wdHksIG5vIG9uZQorIyB3aWxsIGJlIGFibGUgdG8gInN1IiB0byB1aWQgMC4KKyMKKyNTVV9XSEVFTF9PTkxZCW5vCisKKyMKKyMgSWYgY29tcGlsZWQgd2l0aCBjcmFja2xpYiBzdXBwb3J0LCB3aGVyZSBhcmUgdGhlIGRpY3Rpb25hcmllcworIworI0NSQUNLTElCX0RJQ1RQQVRICS92YXIvY2FjaGUvY3JhY2tsaWIvY3JhY2tsaWJfZGljdAorCisjCisjIE1pbi9tYXggdmFsdWVzIGZvciBhdXRvbWF0aWMgdWlkIHNlbGVjdGlvbiBpbiB1c2VyYWRkCisjCitVSURfTUlOCQkJIDEwMDAKK1VJRF9NQVgJCQk2MDAwMAorIyBTeXN0ZW0gYWNjb3VudHMKK1NZU19VSURfTUlOCQkgIDEwMQorU1lTX1VJRF9NQVgJCSAgOTk5CisKKyMKKyMgTWluL21heCB2YWx1ZXMgZm9yIGF1dG9tYXRpYyBnaWQgc2VsZWN0aW9uIGluIGdyb3VwYWRkCisjCitHSURfTUlOCQkJIDEwMDAKK0dJRF9NQVgJCQk2MDAwMAorIyBTeXN0ZW0gYWNjb3VudHMKK1NZU19HSURfTUlOCQkgIDEwMQorU1lTX0dJRF9NQVgJCSAgOTk5CisKKyMKKyMgTWF4IG51bWJlciBvZiBsb2dpbiByZXRyaWVzIGlmIHBhc3N3b3JkIGlzIGJhZAorIworTE9HSU5fUkVUUklFUwkJNQorCisjCisjIE1heCB0aW1lIGluIHNlY29uZHMgZm9yIGxvZ2luCisjCitMT0dJTl9USU1FT1VUCQk2MAorCisjCisjIE1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGNoYW5nZSBwYXNzd29yZCBpZiByZWplY3RlZCAodG9vIGVhc3kpCisjCisjUEFTU19DSEFOR0VfVFJJRVMJNQorCisjCisjIFdhcm4gYWJvdXQgd2VhayBwYXNzd29yZHMgKGJ1dCBzdGlsbCBhbGxvdyB0aGVtKSBpZiB5b3UgYXJlIHJvb3QuCisjCisjUEFTU19BTFdBWVNfV0FSTgl5ZXMKKworIworIyBOdW1iZXIgb2Ygc2lnbmlmaWNhbnQgY2hhcmFjdGVycyBpbiB0aGUgcGFzc3dvcmQgZm9yIGNyeXB0KCkuCisjIERlZmF1bHQgaXMgOCwgZG9uJ3QgY2hhbmdlIHVubGVzcyB5b3VyIGNyeXB0KCkgaXMgYmV0dGVyLgorIyBJZ25vcmVkIGlmIE1ENV9DUllQVF9FTkFCIHNldCB0byAieWVzIi4KKyMKKyNQQVNTX01BWF9MRU4JCTgKKworIworIyBSZXF1aXJlIHBhc3N3b3JkIGJlZm9yZSBjaGZuL2Noc2ggY2FuIG1ha2UgYW55IGNoYW5nZXMuCisjCisjQ0hGTl9BVVRICQl5ZXMKKworIworIyBXaGljaCBmaWVsZHMgbWF5IGJlIGNoYW5nZWQgYnkgcmVndWxhciB1c2VycyB1c2luZyBjaGZuIC0gdXNlCisjIGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzICJmcndoIiAoZnVsbCBuYW1lLCByb29tIG51bWJlciwgd29yaworIyBwaG9uZSwgaG9tZSBwaG9uZSkuICBJZiBub3QgZGVmaW5lZCwgbm8gY2hhbmdlcyBhcmUgYWxsb3dlZC4KKyMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksICJ5ZXMiID0gInJ3aCIgYW5kICJubyIgPSAiZnJ3aCIuCisjIAorQ0hGTl9SRVNUUklDVAkJcndoCisKKyMKKyMgUGFzc3dvcmQgcHJvbXB0ICglcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHVzZXIgbmFtZSkuCisjCisjIFhYWCAtIGl0IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgeWV0LCBmb3Igbm93IGxlYXZlIGl0IGNvbW1lbnRlZCBvdXQKKyMgdG8gdXNlIHRoZSBkZWZhdWx0IHdoaWNoIGlzIGp1c3QgIlBhc3N3b3JkOiAiLgorI0xPR0lOX1NUUklORwkJIiVzJ3MgUGFzc3dvcmQ6ICIKKworIworIyBPbmx5IHdvcmtzIGlmIGNvbXBpbGVkIHdpdGggTUQ1X0NSWVBUIGRlZmluZWQ6CisjIElmIHNldCB0byAieWVzIiwgbmV3IHBhc3N3b3JkcyB3aWxsIGJlIGVuY3J5cHRlZCB1c2luZyB0aGUgTUQ1LWJhc2VkCisjIGFsZ29yaXRobSBjb21wYXRpYmxlIHdpdGggdGhlIG9uZSB1c2VkIGJ5IHJlY2VudCByZWxlYXNlcyBvZiBGcmVlQlNELgorIyBJdCBzdXBwb3J0cyBwYXNzd29yZHMgb2YgdW5saW1pdGVkIGxlbmd0aCBhbmQgbG9uZ2VyIHNhbHQgc3RyaW5ncy4KKyMgU2V0IHRvICJubyIgaWYgeW91IG5lZWQgdG8gY29weSBlbmNyeXB0ZWQgcGFzc3dvcmRzIHRvIG90aGVyIHN5c3RlbXMKKyMgd2hpY2ggZG9uJ3QgdW5kZXJzdGFuZCB0aGUgbmV3IGFsZ29yaXRobS4gIERlZmF1bHQgaXMgIm5vIi4KKyMKKyMgTm90ZTogSWYgeW91IHVzZSBQQU0sIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhIHZhbHVlIGNvbnNpc3RlbnQgd2l0aAorIyB0aGUgUEFNIG1vZHVsZXMgY29uZmlndXJhdGlvbi4KKyMKKyMgVGhpcyB2YXJpYWJsZSBpcyBkZXByZWNhdGVkLiBZb3Ugc2hvdWxkIHVzZSBFTkNSWVBUX01FVEhPRC4KKyMKKyNNRDVfQ1JZUFRfRU5BQglubworCisjCisjIE9ubHkgd29ya3MgaWYgY29tcGlsZWQgd2l0aCBFTkNSWVBUTUVUSE9EX1NFTEVDVCBkZWZpbmVkOgorIyBJZiBzZXQgdG8gTUQ1ICwgTUQ1LWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIFNIQTI1NiwgU0hBMjU2LWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIFNIQTUxMiwgU0hBNTEyLWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIERFUywgREVTLWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQgKGRlZmF1bHQpCisjIE92ZXJyaWRlcyB0aGUgTUQ1X0NSWVBUX0VOQUIgb3B0aW9uCisjCisjIE5vdGU6IElmIHlvdSB1c2UgUEFNLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSB2YWx1ZSBjb25zaXN0ZW50IHdpdGgKKyMgdGhlIFBBTSBtb2R1bGVzIGNvbmZpZ3VyYXRpb24uCisjCisjRU5DUllQVF9NRVRIT0QgREVTCisKKyMKKyMgT25seSB3b3JrcyBpZiBFTkNSWVBUX01FVEhPRCBpcyBzZXQgdG8gU0hBMjU2IG9yIFNIQTUxMi4KKyMKKyMgRGVmaW5lIHRoZSBudW1iZXIgb2YgU0hBIHJvdW5kcy4KKyMgV2l0aCBhIGxvdCBvZiByb3VuZHMsIGl0IGlzIG1vcmUgZGlmZmljdWx0IHRvIGJydXRlIGZvcmNpbmcgdGhlIHBhc3N3b3JkLgorIyBCdXQgbm90ZSBhbHNvIHRoYXQgaXQgbW9yZSBDUFUgcmVzb3VyY2VzIHdpbGwgYmUgbmVlZGVkIHRvIGF1dGhlbnRpY2F0ZQorIyB1c2Vycy4KKyMKKyMgSWYgbm90IHNwZWNpZmllZCwgdGhlIGxpYmMgd2lsbCBjaG9vc2UgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvdW5kcyAoNTAwMCkuCisjIFRoZSB2YWx1ZXMgbXVzdCBiZSBpbnNpZGUgdGhlIDEwMDAtOTk5OTk5OTk5IHJhbmdlLgorIyBJZiBvbmx5IG9uZSBvZiB0aGUgTUlOIG9yIE1BWCB2YWx1ZXMgaXMgc2V0LCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkLgorIyBJZiBNSU4gPiBNQVgsIHRoZSBoaWdoZXN0IHZhbHVlIHdpbGwgYmUgdXNlZC4KKyMKKyMgU0hBX0NSWVBUX01JTl9ST1VORFMgNTAwMAorIyBTSEFfQ1JZUFRfTUFYX1JPVU5EUyA1MDAwCisKKyMKKyMgTGlzdCBvZiBncm91cHMgdG8gYWRkIHRvIHRoZSB1c2VyJ3Mgc3VwcGxlbWVudGFyeSBncm91cCBzZXQKKyMgd2hlbiBsb2dnaW5nIGluIG9uIHRoZSBjb25zb2xlIChhcyBkZXRlcm1pbmVkIGJ5IHRoZSBDT05TT0xFCisjIHNldHRpbmcpLiAgRGVmYXVsdCBpcyBub25lLgorIworIyBVc2Ugd2l0aCBjYXV0aW9uIC0gaXQgaXMgcG9zc2libGUgZm9yIHVzZXJzIHRvIGdhaW4gcGVybWFuZW50CisjIGFjY2VzcyB0byB0aGVzZSBncm91cHMsIGV2ZW4gd2hlbiBub3QgbG9nZ2VkIGluIG9uIHRoZSBjb25zb2xlLgorIyBIb3cgdG8gZG8gaXQgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4uLgorIworI0NPTlNPTEVfR1JPVVBTCQlmbG9wcHk6YXVkaW86Y2Ryb20KKworIworIyBTaG91bGQgbG9naW4gYmUgYWxsb3dlZCBpZiB3ZSBjYW4ndCBjZCB0byB0aGUgaG9tZSBkaXJlY3Rvcnk/CisjIERlZmF1bHQgaW4gbm8uCisjCitERUZBVUxUX0hPTUUJeWVzCisKKyMKKyMgSWYgdGhpcyBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUsIGxvZ2luIGVudmlyb25tZW50IHdpbGwgYmUKKyMgcmVhZCBmcm9tIGl0LiAgRXZlcnkgbGluZSBzaG91bGQgYmUgaW4gdGhlIGZvcm0gbmFtZT12YWx1ZS4KKyMKKyNFTlZJUk9OX0ZJTEUJL2V0Yy9lbnZpcm9ubWVudAorCisjCisjIElmIGRlZmluZWQsIHRoaXMgY29tbWFuZCBpcyBydW4gd2hlbiByZW1vdmluZyBhIHVzZXIuCisjIEl0IHNob3VsZCByZW1vdmUgYW55IGF0L2Nyb24vcHJpbnQgam9icyBldGMuIG93bmVkIGJ5CisjIHRoZSB1c2VyIHRvIGJlIHJlbW92ZWQgKHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQpLgorIworI1VTRVJERUxfQ01ECS91c3Ivc2Jpbi91c2VyZGVsX2xvY2FsCisKKyMKKyMgRW5hYmxlIHNldHRpbmcgb2YgdGhlIHVtYXNrIGdyb3VwIGJpdHMgdG8gYmUgdGhlIHNhbWUgYXMgb3duZXIgYml0cworIyAoZXhhbXBsZXM6IDAyMiAtPiAwMDIsIDA3NyAtPiAwMDcpIGZvciBub24tcm9vdCB1c2VycywgaWYgdGhlIHVpZCBpcworIyB0aGUgc2FtZSBhcyBnaWQsIGFuZCB1c2VybmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpbWFyeSBncm91cCBuYW1lLgorIworIyBUaGlzIGFsc28gZW5hYmxlcyB1c2VyZGVsIHRvIHJlbW92ZSB1c2VyIGdyb3VwcyBpZiBubyBtZW1iZXJzIGV4aXN0LgorIworVVNFUkdST1VQU19FTkFCIHllcworCisjCisjIElmIHNldCB0byBhIG5vbi1udWwgbnVtYmVyLCB0aGUgc2hhZG93IHV0aWxpdGllcyB3aWxsIG1ha2Ugc3VyZSB0aGF0CisjIGdyb3VwcyBuZXZlciBoYXZlIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiB1c2VycyBvbiBvbmUgbGluZS4KKyMgVGhpcyBwZXJtaXQgdG8gc3VwcG9ydCBzcGxpdCBncm91cHMgKGdyb3VwcyBzcGxpdCBpbnRvIG11bHRpcGxlIGxpbmVzLAorIyB3aXRoIHRoZSBzYW1lIGdyb3VwIElELCB0byBhdm9pZCBsaW1pdGF0aW9uIG9mIHRoZSBsaW5lIGxlbmd0aCBpbiB0aGUKKyMgZ3JvdXAgZmlsZSkuCisjCisjIDAgaXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIGRpc2FibGVzIHRoaXMgZmVhdHVyZS4KKyMKKyNNQVhfTUVNQkVSU19QRVJfR1JPVVAJMAorCisjCisjIElmIHVzZXJhZGQgc2hvdWxkIGNyZWF0ZSBob21lIGRpcmVjdG9yaWVzIGZvciB1c2VycyBieSBkZWZhdWx0IChub24KKyMgc3lzdGVtIHVzZXJzIG9ubHkpCisjIFRoaXMgb3B0aW9uIGlzIG92ZXJyaWRkZW4gd2l0aCB0aGUgLU0gb3IgLW0gZmxhZ3Mgb24gdGhlIHVzZXJhZGQgY29tbWFuZAorIyBsaW5lLgorIworQ1JFQVRFX0hPTUUgICAgIHllcworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW5fZGVmc19wYW0uc2VkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTFmM2JlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZApAQCAtMCwwICsxLDMyIEBACisvXkZBSUxMT0dfRU5BQi9iIGNvbW1lbnQKKy9eTEFTVExPR19FTkFCL2IgY29tbWVudAorL15NQUlMX0NIRUNLX0VOQUIvYiBjb21tZW50CisvXk9CU0NVUkVfQ0hFQ0tTX0VOQUIvYiBjb21tZW50CisvXlBPUlRUSU1FX0NIRUNLU19FTkFCL2IgY29tbWVudAorL15RVU9UQVNfRU5BQi9iIGNvbW1lbnQKKy9eTU9URF9GSUxFL2IgY29tbWVudAorL15GVE1QX0ZJTEUvYiBjb21tZW50CisvXk5PTE9HSU5TX0ZJTEUvYiBjb21tZW50CisvXkVOVl9IWi9iIGNvbW1lbnQKKy9eRU5WX1RaL2IgY29tbWVudAorL15QQVNTX01JTl9MRU4vYiBjb21tZW50CisvXlNVX1dIRUVMX09OTFkvYiBjb21tZW50CisvXkNSQUNLTElCX0RJQ1RQQVRIL2IgY29tbWVudAorL15QQVNTX0NIQU5HRV9UUklFUy9iIGNvbW1lbnQKKy9eUEFTU19BTFdBWVNfV0FSTi9iIGNvbW1lbnQKKy9eUEFTU19NQVhfTEVOL2IgY29tbWVudAorL15QQVNTX01JTl9MRU4vYiBjb21tZW50CisvXkNIRk5fQVVUSC9iIGNvbW1lbnQKKy9eQ0hTSF9BVVRIL2IgY29tbWVudAorL15JU1NVRV9GSUxFL2IgY29tbWVudAorL15MT0dJTl9TVFJJTkcvYiBjb21tZW50CisvXlVMSU1JVC9iIGNvbW1lbnQKKy9eRU5WSVJPTl9GSUxFL2IgY29tbWVudAorCitiIGV4aXQKKworOiBjb21tZW50CisgIHM6XjojOgorCis6IGV4aXQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hmbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWY3Njk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4KQEAgLTAsMCArMSwxNCBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgY2hmbicgc2VydmljZQorIworCisjIFRoaXMgYWxsb3dzIHJvb3QgdG8gY2hhbmdlIHVzZXIgaW5mb21hdGlvbiB3aXRob3V0IGJlaW5nCisjIHByb21wdGVkIGZvciBhIHBhc3N3b3JkCithdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NocGFzc3dkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NocGFzc3dkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2VmYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hwYXNzd2QKQEAgLTAsMCArMSw0IEBACisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93ICdjaHBhc3N3ZCcgc2VydmljZQorIworCitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2Noc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiMTY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYGNoc2gnIHNlcnZpY2UKKyMKKworIyBUaGlzIHdpbGwgbm90IGFsbG93IGEgdXNlciB0byBjaGFuZ2UgdGhlaXIgc2hlbGwgdW5sZXNzCisjIHRoZWlyIGN1cnJlbnQgb25lIGlzIGxpc3RlZCBpbiAvZXRjL3NoZWxscy4gVGhpcyBrZWVwcworIyBhY2NvdW50cyB3aXRoIHNwZWNpYWwgc2hlbGxzIGZyb20gY2hhbmdpbmcgdGhlbS4KK2F1dGggICAgICAgcmVxdWlyZWQgICBwYW1fc2hlbGxzLnNvCisKKyMgVGhpcyBhbGxvd3Mgcm9vdCB0byBjaGFuZ2UgdXNlciBzaGVsbCB3aXRob3V0IGJlaW5nCisjIHByb21wdGVkIGZvciBhIHBhc3N3b3JkCithdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2xvZ2luIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2xvZ2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDAwNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbG9naW4KQEAgLTAsMCArMSw4MSBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgbG9naW4nIHNlcnZpY2UKKyMKKworIyBFbmZvcmNlIGEgbWluaW1hbCBkZWxheSBpbiBjYXNlIG9mIGZhaWx1cmUgKGluIG1pY3Jvc2Vjb25kcykuCisjIChSZXBsYWNlcyB0aGUgYEZBSUxfREVMQVknIHNldHRpbmcgZnJvbSBsb2dpbi5kZWZzKQorIyBOb3RlIHRoYXQgb3RoZXIgbW9kdWxlcyBtYXkgcmVxdWlyZSBhbm90aGVyIG1pbmltYWwgZGVsYXkuIChmb3IgZXhhbXBsZSwKKyMgdG8gZGlzYWJsZSBhbnkgZGVsYXksIHlvdSBzaG91bGQgYWRkIHRoZSBub2RlbGF5IG9wdGlvbiB0byBwYW1fdW5peCkKK2F1dGggICAgICAgb3B0aW9uYWwgICBwYW1fZmFpbGRlbGF5LnNvICBkZWxheT0zMDAwMDAwCisKKyMgT3V0cHV0cyBhbiBpc3N1ZSBmaWxlIHByaW9yIHRvIGVhY2ggbG9naW4gcHJvbXB0IChSZXBsYWNlcyB0aGUKKyMgSVNTVUVfRklMRSBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKS4gVW5jb21tZW50IGZvciB1c2UKKyMgYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV9pc3N1ZS5zbyBpc3N1ZT0vZXRjL2lzc3VlCisKKyMgRGlzYWxsb3dzIHJvb3QgbG9naW5zIGV4Y2VwdCBvbiB0dHkncyBsaXN0ZWQgaW4gL2V0Yy9zZWN1cmV0dHkKKyMgKFJlcGxhY2VzIHRoZSBgQ09OU09MRScgc2V0dGluZyBmcm9tIGxvZ2luLmRlZnMpCisjIE5vdGUgdGhhdCBpdCBpcyBpbmNsdWRlZCBhcyBhICJyZXF1aXNpdGUiIG1vZHVsZS4gTm8gcGFzc3dvcmQgcHJvbXB0cyB3aWxsCisjIGJlIGRpc3BsYXllZCBpZiB0aGlzIG1vZHVsZSBmYWlscyB0byBhdm9pZCBoYXZpbmcgdGhlIHJvb3QgcGFzc3dvcmQKKyMgdHJhbnNtaXR0ZWQgb24gdW5zZWN1cmUgdHR5cy4KKyMgWW91IGNhbiBjaGFuZ2UgaXQgdG8gYSAicmVxdWlyZWQiIG1vZHVsZSBpZiB5b3UgdGhpbmsgaXQgcGVybWl0cyB0bworIyBndWVzcyB2YWxpZCB1c2VyIG5hbWVzIG9mIHlvdXIgc3lzdGVtIChpbnZhbGlkIHVzZXIgbmFtZXMgYXJlIGNvbnNpZGVyZWQKKyMgYXMgcG9zc2libHkgYmVpbmcgcm9vdCkuCithdXRoICAgICAgIFtzdWNjZXNzPW9rIGlnbm9yZT1pZ25vcmUgdXNlcl91bmtub3duPWlnbm9yZSBkZWZhdWx0PWRpZV0gIHBhbV9zZWN1cmV0dHkuc28KKworIyBEaXNhbGxvd3Mgb3RoZXIgdGhhbiByb290IGxvZ2lucyB3aGVuIC9ldGMvbm9sb2dpbiBleGlzdHMKKyMgKFJlcGxhY2VzIHRoZSBgTk9MT0dJTlNfRklMRScgb3B0aW9uIGZyb20gbG9naW4uZGVmcykKK2F1dGggICAgICAgcmVxdWlzaXRlICBwYW1fbm9sb2dpbi5zbworCisjIFRoaXMgbW9kdWxlIHBhcnNlcyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZpbGUocykKKyMgYW5kIGFsc28gYWxsb3dzIHlvdSB0byB1c2UgYW4gZXh0ZW5kZWQgY29uZmlnCisjIGZpbGUgL2V0Yy9zZWN1cml0eS9wYW1fZW52LmNvbmYuCisjIAorIyBwYXJzaW5nIC9ldGMvZW52aXJvbm1lbnQgbmVlZHMgInJlYWRlbnY9MSIKK3Nlc3Npb24gICAgICAgcmVxdWlyZWQgICBwYW1fZW52LnNvIHJlYWRlbnY9MQorCisjIFN0YW5kYXJkIFVuKnggYXV0aGVudGljYXRpb24uCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorCisjIFRoaXMgYWxsb3dzIGNlcnRhaW4gZXh0cmEgZ3JvdXBzIHRvIGJlIGdyYW50ZWQgdG8gYSB1c2VyCisjIGJhc2VkIG9uIHRoaW5ncyBsaWtlIHRpbWUgb2YgZGF5LCB0dHksIHNlcnZpY2UsIGFuZCB1c2VyLgorIyBQbGVhc2UgZWRpdCAvZXRjL3NlY3VyaXR5L2dyb3VwLmNvbmYgdG8gZml0IHlvdXIgbmVlZHMKKyMgKFJlcGxhY2VzIHRoZSBgQ09OU09MRV9HUk9VUFMnIG9wdGlvbiBpbiBsb2dpbi5kZWZzKQorYXV0aCAgICAgICBvcHRpb25hbCAgIHBhbV9ncm91cC5zbworCisjIFVuY29tbWVudCBhbmQgZWRpdCAvZXRjL3NlY3VyaXR5L3RpbWUuY29uZiBpZiB5b3UgbmVlZCB0byBzZXQKKyMgdGltZSByZXN0cmFpbnN0IG9uIGxvZ2lucy4KKyMgKFJlcGxhY2VzIHRoZSBgUE9SVFRJTUVfQ0hFQ0tTX0VOQUInIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMKKyMgYXMgd2VsbCBhcyAvZXRjL3BvcnR0aW1lKQorIyBhY2NvdW50ICAgIHJlcXVpc2l0ZSAgcGFtX3RpbWUuc28KKworIyBVbmNvbW1lbnQgYW5kIGVkaXQgL2V0Yy9zZWN1cml0eS9hY2Nlc3MuY29uZiBpZiB5b3UgbmVlZCB0bworIyBzZXQgYWNjZXNzIGxpbWl0cy4KKyMgKFJlcGxhY2VzIC9ldGMvbG9naW4uYWNjZXNzIGZpbGUpCisjIGFjY291bnQgIHJlcXVpcmVkICAgICAgIHBhbV9hY2Nlc3Muc28KKworIyBTZXRzIHVwIHVzZXIgbGltaXRzIGFjY29yZGluZyB0byAvZXRjL3NlY3VyaXR5L2xpbWl0cy5jb25mCisjIChSZXBsYWNlcyB0aGUgdXNlIG9mIC9ldGMvbGltaXRzIGluIG9sZCBsb2dpbikKK3Nlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbGltaXRzLnNvCisKKyMgUHJpbnRzIHRoZSBsYXN0IGxvZ2luIGluZm8gdXBvbiBzdWNjZXNmdWwgbG9naW4KKyMgKFJlcGxhY2VzIHRoZSBgTEFTVExPR19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKQorc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9sYXN0bG9nLnNvCisKKyMgUHJpbnRzIHRoZSBtb3RkIHVwb24gc3VjY2VzZnVsIGxvZ2luCisjIChSZXBsYWNlcyB0aGUgYE1PVERfRklMRScgb3B0aW9uIGluIGxvZ2luLmRlZnMpCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21vdGQuc28KKworIyBQcmludHMgdGhlIHN0YXR1cyBvZiB0aGUgdXNlcidzIG1haWxib3ggdXBvbiBzdWNjZXNmdWwgbG9naW4KKyMgKFJlcGxhY2VzIHRoZSBgTUFJTF9DSEVDS19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKS4gCisjCisjIFRoaXMgYWxzbyBkZWZpbmVzIHRoZSBNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlCisjIEhvd2V2ZXIsIHVzZXJkZWwgYWxzbyBuZWVkcyBNQUlMX0RJUiBhbmQgTUFJTF9GSUxFIHZhcmlhYmxlcworIyBpbiAvZXRjL2xvZ2luLmRlZnMgdG8gbWFrZSBzdXJlIHRoYXQgcmVtb3ZpbmcgYSB1c2VyIAorIyBhbHNvIHJlbW92ZXMgdGhlIHVzZXIncyBtYWlsIHNwb29sIGZpbGUuCisjIFNlZSBjb21tZW50cyBpbiAvZXRjL2xvZ2luLmRlZnMKK3Nlc3Npb24gICAgb3B0aW9uYWwgICBwYW1fbWFpbC5zbyBzdGFuZGFyZAorCisjIFN0YW5kYXJkIFVuKnggYWNjb3VudCBhbmQgc2Vzc2lvbgorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9uZXd1c2VycyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9uZXd1c2VycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEzZGRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL25ld3VzZXJzCkBAIC0wLDAgKzEsNCBAQAorIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyAnbmV3dXNlcnMnIHNlcnZpY2UKKyMKKworcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvcGFzc3dkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTM0OTkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZApAQCAtMCwwICsxLDUgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYHBhc3N3ZCcgc2VydmljZQorIworCitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9zdSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9zdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDU5MGEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3N1CkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYHN1JyBzZXJ2aWNlCisjCisKKyMgVGhpcyBhbGxvd3Mgcm9vdCB0byBzdSB3aXRob3V0IHBhc3N3b3JkcyAobm9ybWFsIG9wZXJhdGlvbikKK2F1dGggICAgICAgc3VmZmljaWVudCBwYW1fcm9vdG9rLnNvCisKKyMgVW5jb21tZW50IHRoaXMgdG8gZm9yY2UgdXNlcnMgdG8gYmUgYSBtZW1iZXIgb2YgZ3JvdXAgcm9vdAorIyBiZWZvcmUgdGhleSBjYW4gdXNlIGBzdScuIFlvdSBjYW4gYWxzbyBhZGQgImdyb3VwPWZvbyIKKyMgdG8gdGhlIGVuZCBvZiB0aGlzIGxpbmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgZ3JvdXAgb3RoZXIKKyMgdGhhbiB0aGUgZGVmYXVsdCAicm9vdCIgKGJ1dCB0aGlzIG1heSBoYXZlIHNpZGUgZWZmZWN0IG9mCisjIGRlbnlpbmcgInJvb3QiIHVzZXIsIHVubGVzcyBzaGUncyBhIG1lbWJlciBvZiAiZm9vIiBvciBleHBsaWNpdGx5CisjIHBlcm1pdHRlZCBlYXJsaWVyIGJ5IGUuZy4gInN1ZmZpY2llbnQgcGFtX3Jvb3Rvay5zbyIpLgorIyAoUmVwbGFjZXMgdGhlIGBTVV9XSEVFTF9PTkxZJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKQorIyBhdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3doZWVsLnNvCisKKyMgVW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgd2hlZWwgbWVtYmVycyB0byBiZSBhYmxlIHRvCisjIHN1IHdpdGhvdXQgYSBwYXNzd29yZC4KKyMgYXV0aCAgICAgICBzdWZmaWNpZW50IHBhbV93aGVlbC5zbyB0cnVzdAorCisjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IG1lbWJlcnMgb2YgYSBzcGVjaWZpYyBncm91cCB0byBub3QKKyMgYmUgYWxsb3dlZCB0byB1c2Ugc3UgYXQgYWxsLgorIyBhdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3doZWVsLnNvIGRlbnkgZ3JvdXA9bm9zdQorCisjIFVuY29tbWVudCBhbmQgZWRpdCAvZXRjL3NlY3VyaXR5L3RpbWUuY29uZiBpZiB5b3UgbmVlZCB0byBzZXQKKyMgdGltZSByZXN0cmFpbnN0IG9uIHN1IHVzYWdlLgorIyAoUmVwbGFjZXMgdGhlIGBQT1JUVElNRV9DSEVDS1NfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcworIyBhcyB3ZWxsIGFzIC9ldGMvcG9ydHRpbWUpCisjIGFjY291bnQgICAgcmVxdWlzaXRlICBwYW1fdGltZS5zbworCisjIFRoaXMgbW9kdWxlIHBhcnNlcyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZpbGUocykKKyMgYW5kIGFsc28gYWxsb3dzIHlvdSB0byB1c2UgYW4gZXh0ZW5kZWQgY29uZmlnCisjIGZpbGUgL2V0Yy9zZWN1cml0eS9wYW1fZW52LmNvbmYuCisjIAorIyBwYXJzaW5nIC9ldGMvZW52aXJvbm1lbnQgbmVlZHMgInJlYWRlbnY9MSIKK3Nlc3Npb24gICAgICAgcmVxdWlyZWQgICBwYW1fZW52LnNvIHJlYWRlbnY9MQorCisjIERlZmluZXMgdGhlIE1BSUwgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgSG93ZXZlciwgdXNlcmRlbCBhbHNvIG5lZWRzIE1BSUxfRElSIGFuZCBNQUlMX0ZJTEUgdmFyaWFibGVzCisjIGluIC9ldGMvbG9naW4uZGVmcyB0byBtYWtlIHN1cmUgdGhhdCByZW1vdmluZyBhIHVzZXIgCisjIGFsc28gcmVtb3ZlcyB0aGUgdXNlcidzIG1haWwgc3Bvb2wgZmlsZS4KKyMgU2VlIGNvbW1lbnRzIGluIC9ldGMvbG9naW4uZGVmcworIworIyAibm9wZW4iIHN0YW5kcyB0byBhdm9pZCByZXBvcnRpbmcgbmV3IG1haWwgd2hlbiBzdSdpbmcgdG8gYW5vdGhlciB1c2VyCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21haWwuc28gbm9wZW4KKworIyBTZXRzIHVwIHVzZXIgbGltaXRzLCBwbGVhc2UgdW5jb21tZW50IGFuZCByZWFkIC9ldGMvc2VjdXJpdHkvbGltaXRzLmNvbmYKKyMgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyMgKFJlcGxhY2VzIHRoZSB1c2Ugb2YgL2V0Yy9saW1pdHMgaW4gb2xkIGxvZ2luKQorIyBzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbworCisjIFRoZSBzdGFuZGFyZCBVbml4IGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMsIHVzZWQgd2l0aAorIyBOSVMgKG1hbiBuc3N3aXRjaCkgYXMgd2VsbCBhcyBub3JtYWwgL2V0Yy9wYXNzd2QgYW5kCisjIC9ldGMvc2hhZG93IGVudHJpZXMuCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2VjdXJldHR5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmUzNDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eQpAQCAtMCwwICsxLDIzOCBAQAorIyAvZXRjL3NlY3VyZXR0eTogbGlzdCBvZiB0ZXJtaW5hbHMgb24gd2hpY2ggcm9vdCBpcyBhbGxvd2VkIHRvIGxvZ2luLgorIyBTZWUgc2VjdXJldHR5KDUpIGFuZCBsb2dpbigxKS4KK2NvbnNvbGUKKworIyBTdGFuZGFyZCBzZXJpYWwgcG9ydHMKK3R0eVMwCit0dHlTMQordHR5UzIKK3R0eVMzCisKKyMgQVJNIEFNQkEgU29DcwordHR5QU0wCit0dHlBTTEKK3R0eUFNMgordHR5QU0zCit0dHlBTUEwCit0dHlBTUExCit0dHlBTUEyCit0dHlBTUEzCisKKyMgUUNPTSBTb2NzCit0dHlIU0wwCit0dHlIU0wxCit0dHlIU0wyCit0dHlIU0wzCit0dHlNU00wCit0dHlNU00xCit0dHlNU00yCisKKyMgU2Ftc3VuZyBBUk0gU29DcwordHR5U0FDMAordHR5U0FDMQordHR5U0FDMgordHR5U0FDMworCisjIFNUTSBTb0NzCit0dHlBUzAKK3R0eUFTMQordHR5QVMyCit0dHlBUzMKKworIyBUSSBPTUFQIFNvQ3MKK3R0eU8wCit0dHlPMQordHR5TzIKK3R0eU8zCisKKyMgWGlsaW54IFp5bnEgU29DCit0dHlQUzAKK3R0eVBTMQorCisjIFVTQiBkb25nbGVzCit0dHlVU0IwCit0dHlVU0IxCit0dHlVU0IyCisKKyMgVVNCIHNlcmlhbCBnYWRnZXQKK3R0eUdTMAorCisjIFBvd2VyTWFjCit0dHlQWjAKK3R0eVBaMQordHR5UFoyCit0dHlQWjMKKworIyBFbWJlZGRlZCBNUEMgcGxhdGZvcm1zCit0dHlQU0MwCit0dHlQU0MxCit0dHlQU0MyCit0dHlQU0MzCit0dHlQU0M0Cit0dHlQU0M1CisKKyMgUEEtUklTQyBtdXggcG9ydHMKK3R0eUIwCit0dHlCMQorCisjIFN0YW5kYXJkIGh5cGVydmlzb3IgdmlydHVhbCBjb25zb2xlCitodmMwCisKKyMgT2xkc3R5bGUgWGVuIGNvbnNvbGUKK3h2YzAKKworIyBTdGFuZGFyZCBjb25zb2xlcwordHR5MQordHR5MgordHR5MwordHR5NAordHR5NQordHR5NgordHR5NwordHR5OAordHR5OQordHR5MTAKK3R0eTExCit0dHkxMgordHR5MTMKK3R0eTE0Cit0dHkxNQordHR5MTYKK3R0eTE3Cit0dHkxOAordHR5MTkKK3R0eTIwCit0dHkyMQordHR5MjIKK3R0eTIzCit0dHkyNAordHR5MjUKK3R0eTI2Cit0dHkyNwordHR5MjgKK3R0eTI5Cit0dHkzMAordHR5MzEKK3R0eTMyCit0dHkzMwordHR5MzQKK3R0eTM1Cit0dHkzNgordHR5MzcKK3R0eTM4Cit0dHkzOQordHR5NDAKK3R0eTQxCit0dHk0MgordHR5NDMKK3R0eTQ0Cit0dHk0NQordHR5NDYKK3R0eTQ3Cit0dHk0OAordHR5NDkKK3R0eTUwCit0dHk1MQordHR5NTIKK3R0eTUzCit0dHk1NAordHR5NTUKK3R0eTU2Cit0dHk1NwordHR5NTgKK3R0eTU5Cit0dHk2MAordHR5NjEKK3R0eTYyCit0dHk2MworCisjIExvY2FsIFggZGlzcGxheXMgKGFsbG93cyBlbXB0eSBwYXNzd29yZHMgd2l0aCBwYW1fdW5peCdzIG51bGxva19zZWN1cmUpCitwdHMvMAorcHRzLzEKK3B0cy8yCitwdHMvMworCisjIEVtYmVkZGVkIEZyZWVzY2FsZSBpLk1YIHBvcnRzCit0dHlteGMwCit0dHlteGMxCit0dHlteGMyCit0dHlteGMzCit0dHlteGM0Cit0dHlteGM1CisKKyMgRnJlZXNjYWxlIGxwdWFydCBwb3J0cwordHR5TFAwCit0dHlMUDEKK3R0eUxQMgordHR5TFAzCit0dHlMUDQKK3R0eUxQNQorCisjIFN0YW5kYXJkIHNlcmlhbCBwb3J0cywgd2l0aCBkZXZmcwordHRzLzAKK3R0cy8xCisKKyMgU3RhbmRhcmQgY29uc29sZXMsIHdpdGggZGV2ZnMKK3ZjLzEKK3ZjLzIKK3ZjLzMKK3ZjLzQKK3ZjLzUKK3ZjLzYKK3ZjLzcKK3ZjLzgKK3ZjLzkKK3ZjLzEwCit2Yy8xMQordmMvMTIKK3ZjLzEzCit2Yy8xNAordmMvMTUKK3ZjLzE2Cit2Yy8xNwordmMvMTgKK3ZjLzE5Cit2Yy8yMAordmMvMjEKK3ZjLzIyCit2Yy8yMwordmMvMjQKK3ZjLzI1Cit2Yy8yNgordmMvMjcKK3ZjLzI4Cit2Yy8yOQordmMvMzAKK3ZjLzMxCit2Yy8zMgordmMvMzMKK3ZjLzM0Cit2Yy8zNQordmMvMzYKK3ZjLzM3Cit2Yy8zOAordmMvMzkKK3ZjLzQwCit2Yy80MQordmMvNDIKK3ZjLzQzCit2Yy80NAordmMvNDUKK3ZjLzQ2Cit2Yy80NwordmMvNDgKK3ZjLzQ5Cit2Yy81MAordmMvNTEKK3ZjLzUyCit2Yy81MwordmMvNTQKK3ZjLzU1Cit2Yy81NgordmMvNTcKK3ZjLzU4Cit2Yy81OQordmMvNjAKK3ZjLzYxCit2Yy82MgordmMvNjMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctNC4xLjMtZG90cy1pbi11c2VybmFtZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YmIwYTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKKyMgY29tbWl0IG1lc3NhZ2UgY29waWVkIGZyb20gb3BlbmVtYmVkZGVkOgorIyAgICBjb21taXQgMjQ2YzgwNjM3YjEzNWYzYTExM2QzMTliMTYzNDIyZjk4MTc0ZWU2YworIyAgICBBdXRob3I6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjICAgIERhdGU6ICAgV2VkIEp1biA5IDEzOjM3OjAzIDIwMTAgLTA3MDAKKyMKKyMgICAgc2hhZG93LTQuMS40LjI6IEFkZCBwYXRjaGVzIHRvIHN1cHBvcnQgZG90cyBpbiBsb2dpbiBpZC4KKyMgICAgCisjICAgIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjCisjIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IHNoYWRvdy00LjEuNC4yL2xpYm1pc2MvY2hrbmFtZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2hhZG93LTQuMS40LjIub3JpZy9saWJtaXNjL2Noa25hbWUuYwkyMDA5LTA0LTI4IDEyOjE0OjA0LjAwMDAwMDAwMCAtMDcwMAorKysrIHNoYWRvdy00LjEuNC4yL2xpYm1pc2MvY2hrbmFtZS5jCTIwMTAtMDYtMDMgMTc6NDM6MjAuNjM4OTczODU3IC0wNzAwCitAQCAtNjEsNiArNjEsNyBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9uYW1lIChjb25zdCBjaGFyICpuCisgCQkgICAgICAoICgnMCcgPD0gKm5hbWUpICYmICgnOScgPj0gKm5hbWUpICkgfHwKKyAJCSAgICAgICgnXycgPT0gKm5hbWUpIHx8CisgCQkgICAgICAoJy0nID09ICpuYW1lKSB8fAorKwkJICAgICAgKCcuJyA9PSAqbmFtZSkgfHwKKyAJCSAgICAgICggKCckJyA9PSAqbmFtZSkgJiYgKCdcMCcgPT0gKihuYW1lICsgMSkpICkKKyAJCSAgICAgKSkgeworIAkJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy11cGRhdGUtcGFtLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmODA0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK1RoZSBzeXN0ZW0tYXV0aCBpbiB0aGUgY29uZmlndXJlIGZpbGVzIGlzIGZyb20gRmVkb3JhIHdoaWNoIHB1dCBhbGwgdGhlIDQgcGFtIHR5cGUgcnVsZXMKK2luIG9uZSBmaWxlLgorSW4geW9jdG8gaXQgb2JleSB0aGUgd2F5IHdpdGggRGViaWFuL1VidW50dSwgYW5kIHRoZSBuYW1lcyBhcmUgY29tbW9uLWF1dGgsIGNvbW1vbi1hY2NvdW50LAorY29tbW9uLXBhc3N3b3JkIGFuZCBjb21tb24tc2Vzc2lvbi4KK1NvIHVwZGF0ZSB0aGVtIHdpdGggb2Ugd2F5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGFnZSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hhZ2UKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGFnZQkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGFnZQkyMDExLTA3LTIwIDE5OjAzOjA4Ljk2NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hncGFzc3dkIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGdwYXNzd2QKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGdwYXNzd2QJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hncGFzc3dkCTIwMTEtMDctMjAgMTk6MDM6MjYuNTQ0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGFkZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBhZGQKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGFkZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cGFkZAkyMDExLTA3LTIwIDE5OjA0OjA4LjEyNDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBkZWwgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwZGVsCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBkZWwJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBkZWwJMjAxMS0wNy0yMCAxOTowNDoyNi4xMTQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbWVtcyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtZW1zCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtZW1zCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbWVtcwkyMDExLTA3LTIwIDE5OjA0OjM1LjA3NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtb2Qgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbW9kCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtb2QJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtb2QJMjAxMS0wNy0yMCAxOTowNDo0NC44NjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJhZGQgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJhZGQKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyYWRkCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJhZGQJMjAxMS0wNy0yMCAxOTowNzoyNi4yNDQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJkZWwgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJkZWwKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyZGVsCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJkZWwJMjAxMS0wNy0yMCAxOTowNzozNS43MzQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJtb2Qgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJtb2QKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VybW9kCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJtb2QJMjAxMS0wNy0yMCAxOTowNzo0Mi4wMjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvdXNlcm1vZC1maXgtY29tcGlsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2RjMTUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3VzZXJtb2Q6IGZpeCBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggc3ViaWRzIGRpc2FibGVkCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy91c2VybW9kLmMgfCAgICAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VybW9kLmMgYi9zcmMvdXNlcm1vZC5jCitpbmRleCBlN2Q0MzUxLi42ODViNTBhIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJtb2QuYworKysrIGIvc3JjL3VzZXJtb2QuYworQEAgLTEzNjAsNyArMTM2MCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICAgICAgIFByb2csICh1bnNpZ25lZCBsb25nKSB1c2VyX25ld2lkKTsKKyAJCWV4aXQgKEVfVUlEX0lOX1VTRSk7CisgCX0KKy0KKysjaWZkZWYgRU5BQkxFX1NVQklEUworIAlpZiAoICAgKHZmbGcgfHwgVmZsZykKKyAJICAgICYmICFpc19zdWJfdWlkKSB7CisgCQlmcHJpbnRmIChzdGRlcnIsCitAQCAtMTM3Niw2ICsxMzc2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgICAgICAgUHJvZywgc3ViX2dpZF9kYm5hbWUgKCksICItdyIsICItVyIpOworIAkJZXhpdCAoRV9VU0FHRSk7CisgCX0KKysjZW5kaWYKKyB9CisgCisgLyoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc2VjdXJldHR5XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OGY4ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlByb3ZpZGVyIG9mIHRoZSBtYWNoaW5lIHNwZWNpZmljIHNlY3VyZXR0eSBmaWxlIgorU0VDVElPTiA9ICJiYXNlIHV0aWxzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NlY3VyZXR0eSIKKworUyA9ICIke1dPUktESVJ9IgorCisjIFNpbmNlIFNFUklBTF9DT05TT0xFUyBpcyBsaWtlbHkgdG8gYmUgc2V0IGZyb20gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworZG9faW5zdGFsbCAoKSB7CisJIyBFbnN1cmUgd2UgYWRkIGEgc3VpdGFibGUgc2VjdXJldHR5IGZpbGUgdG8gdGhlIHBhY2thZ2UgdGhhdCBoYXMKKwkjIG1vc3QgY29tbW9uIGVtYmVkZGVkIFRUWXMgZGVmaW5lZC4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNDAwICR7V09SS0RJUn0vc2VjdXJldHR5ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eQorCWlmIFsgISAteiAiJHtTRVJJQUxfQ09OU09MRVN9IiBdOyB0aGVuCisJCSMgT3VyIFNFUklBTF9DT05TT0xFUyBjb250YWlucyBhIGJhdWQgcmF0ZSBhbmQgc29tZXRpbWVzIGV4dHJhCisJCSMgb3B0aW9ucyBhcyB3ZWxsLiBUaGUgZm9sbG93aW5nIHBlYXJsIDopIHRha2VzIHRoYXQgYW5kIGNvbnZlcnRzCisJCSMgaXQgaW50byBuZXdsaW5lLXNlcGFyYXRlZCB0dHkncyBhbmQgYXBwZW5kcyB0aGVtIGludG8KKwkJIyBzZWN1cmV0dHkuIFNvIGlmIGEgbWFjaGluZSBoYXMgYSB3ZWlyZCBsb29raW5nIGNvbnNvbGUgZGV2aWNlCisJCSMgbm9kZSAoZS5nLiB0dHlBTUEwKSB0aGF0IHNlY3VyZXR0eSBkb2VzIG5vdCBrbm93LCBpdCB3aWxsIGdldAorCQkjIGFwcGVuZGVkIHRvIHNlY3VyZXR0eSBhbmQgcm9vdCBsb2dpbnMgd2lsbCBiZSBhbGxvd2VkIG9uIHRoYXQKKwkJIyBjb25zb2xlLgorCQl0bXA9IiR7U0VSSUFMX0NPTlNPTEVTfSIKKwkJZm9yIGVudHJ5IGluICR0bXAgOyBkbworCQkJdHR5ZGV2PWBlY2hvICIkZW50cnkiIHwgc2VkIC1lICdzL15bMC05XSpcOy8vJyAtZSAncy9cOy4qLy8nYAorCQkJaWYgISBncmVwIC1xICR0dHlkZXYgJHtEfSR7c3lzY29uZmRpcn0vc2VjdXJldHR5OyB0aGVuCisJCQkJZWNobyAkdHR5ZGV2ID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eQorCQkJZmkKKwkJZG9uZQorCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3NTY5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIlNoYWRvdyB1dGlscyByZXF1aXJlbWVudHMgZm9yIHVzZXJhZGQuYmJjbGFzcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wa2ctc2hhZG93LmFsaW90aC5kZWJpYW4ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3RyYWNrZXIvP2dyb3VwX2lkPTMwNTgwIgorU0VDVElPTiA9ICJiYXNlIHV0aWxzIgorTElDRU5TRSA9ICJCU0QgfCBBcnRpc3RpYy0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290O21kNT0yNWUyZjJkZTRkZmM4Zjk2NmFjNWNkZmNlNDVjZDdkNSIKKworREVQRU5EUyA9ICJiYXNlLXBhc3N3ZCIKKworUFIgPSAicjMiCisKKyMgVGhlIHNvbGUgcHVycG9zZSBvZiB0aGlzIHJlY2lwZSBpcyB0byBwcm92aWRlIHRoZSAvZXRjL2xvZ2luLmRlZnMKKyMgZmlsZSBmb3IgdGhlIHRhcmdldCBzeXNyb290IC0gbmVlZGVkIHNvIHRoZSBzaGFkb3ctbmF0aXZlIHV0aWxpdGllcworIyBjYW4gYWRkIGN1c3RvbSB1c2Vycy9ncm91cHMgZm9yIHJlY2lwZXMgdGhhdCB1c2UgaW5oZXJpdCB1c2VyYWRkLgorU1JDX1VSSSA9ICJmaWxlOi8vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCIKKworU1JDX1VSSVttZDVzdW1dID0gImI4NjA4ZDgyOTRhYzg4OTc0ZjI3YjIwZjk5MWMwZTc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzM2Y1YmI0ZWEwYzg4YzU1ZjM2NDJjOTdmOWQyNWNiZWY3NGY4MmUwYjRjZjhkNTRlN2FkNmY5ZjljYWE3NzgiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtcCAtbSA3NTUgJHtTfS9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290ICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKK30KKworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KK30KKworIyBkb24ndCBjcmVhdGUgYW55IHBhY2thZ2VzCisjIG90aGVyd2lzZTogZGJ1cy1kZXYgZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdC1kZXYgd2hpY2ggZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdCAKKyMgYW5kIHRoaXMgaGFzIGFub3RoZXIgY29weSBvZiAvZXRjL2xvZ2luLmRlZnMgYWxyZWFkeSBwcm92aWRlZCBieSBzaGFkb3cKK1BBQ0tBR0VTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxM2ZmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCkBAIC0wLDAgKzEsMTk2IEBACitTVU1NQVJZID0gIlRvb2xzIHRvIGNoYW5nZSBhbmQgYWRtaW5pc3RlciBwYXNzd29yZCBhbmQgZ3JvdXAgZGF0YSIKK0hPTUVQQUdFID0gImh0dHA6Ly9wa2ctc2hhZG93LmFsaW90aC5kZWJpYW4ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3RyYWNrZXIvP2dyb3VwX2lkPTMwNTgwIgorU0VDVElPTiA9ICJiYXNlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QgfCBBcnRpc3RpYy0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZDgwZmYxYzJiNDA4NDNjZjU3NjhlNTIyOWNmMTZlNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGFzc3dkLmM7YmVnaW5saW5lPTg7ZW5kbGluZT0zMDttZDU9ZDgzODg4ZWExNGFlNjE5NTE5ODJkNzcxMjU5NDc2NjEiCisKK0RFUEVORFMgPSAic2hhZG93LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtnLXNoYWRvdy5hbGlvdGguZGViaWFuLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luX2RlZnNfcGFtLnNlZCBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtc3lzbG9nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsbG93LWZvci1zZXR0aW5nLXBhc3N3b3JkLWluLWNsZWFyLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZXJhZGQuYy1jcmVhdGUtcGFyZW50LWRpcmVjdG9yaWVzLXdoZW4tbmVjZXNzYXJ5LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXN5c2xvZy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZmFmZTdkNDk2MjY4MmQzMWI1ZWJhNjVkYmE0ZmM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNiMDg5M2QxNDc2NzY2ODY4Y2Q4ODkyMGY0ZjEyMzFjNDc5NTY1MmFhNDA3NTY5ZmFmZjgwMmJjZGEwZjNkNDEiCisKKyMgQWRkaXRpb25hbCBQb2xpY3kgZmlsZXMgZm9yIFBBTQorUEFNX1NSQ19VUkkgPSAiZmlsZTovL3BhbS5kL2NoZm4gXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL2NocGFzc3dkIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jaHNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9sb2dpbiBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvbmV3dXNlcnMgXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL3Bhc3N3ZCBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvc3UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtYXVkaXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliY3JhY2sgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc2VsaW51eCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1ncm91cC1uYW1lLW1heC1sZW5ndGg9MjQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdWJvcmRpbmF0ZS1pZHM9eWVzIFwKKyAgICAgICAgICAgICAgICAgJHtOU0NET1BUfSIKKworTlNDRE9QVCA9ICIiCitOU0NET1BUX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQtbnNjZCIKK05TQ0RPUFRfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aG91dC1uc2NkIgorTlNDRE9QVF9saWJjLXVjbGliYyA9ICIgLS13aXRob3V0LW5zY2QiCitOU0NET1BUX2xpYmMtZ2xpYmMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXNwYXduJywgJy0td2l0aC1uc2NkJywgJy0td2l0aG91dC1uc2NkJywgZCl9IgorICAgICAgICAgIAorUEFNX1BMVUdJTlMgPSAibGlicGFtLXJ1bnRpbWUgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1mYWlsZGVsYXkgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1zZWN1cmV0dHkgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1ub2xvZ2luIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZW52IFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZ3JvdXAgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1saW1pdHMgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1sYXN0bG9nIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbW90ZCBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLW1haWwgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1zaGVsbHMgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1yb290b2siCisKK1BBQ0tBR0VDT05GSUcgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLXdpdGgtbGlicGFtLC0td2l0aG91dC1saWJwYW0sbGlicGFtLCR7UEFNX1BMVUdJTlN9IgorUEFDS0FHRUNPTkZJR1thdHRyXSA9ICItLXdpdGgtYXR0ciwtLXdpdGhvdXQtYXR0cixhdHRyIgorUEFDS0FHRUNPTkZJR1thY2xdID0gIi0td2l0aC1hY2wsLS13aXRob3V0LWFjbCxhY2wiCisKK1JERVBFTkRTXyR7UE59ID0gInNoYWRvdy1zZWN1cmV0dHkgXAorICAgICAgICAgICAgICAgICAgYmFzZS1wYXNzd2QgXAorICAgICAgICAgICAgICAgICAgdXRpbC1saW51eC1zdWxvZ2luIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBERVNURElSPSIke0R9IiBzYmluZGlyPSIke2Jhc2Vfc2JpbmRpcn0iIHVzYmluZGlyPSIke3NiaW5kaXJ9IiBpbnN0YWxsCisKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorCisJIyBFbmFibGUgQ1JFQVRFX0hPTUUgYnkgZGVmYXVsdC4KKwlzZWQgLWkgJ3MvI0NSRUFURV9IT01FL0NSRUFURV9IT01FL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgQXMgd2UgYXJlIG9uIGFuIGVtYmVkZGVkIHN5c3RlbSwgZW5zdXJlIHRoZSB1c2VycyBtYWlsYm94IGlzIGluCisJIyB+LyBub3QgL3Zhci9zcG9vbC9tYWlsIGJ5IGRlZmF1bHQsIGFzIHdobyBrbm93cyB3aGVyZSBvciBob3cgYmlnCisJIyAvdmFyIGlzLiBUaGUgc3lzdGVtIE1EQSB3aWxsIHNldCB0aGlzIGxhdGVyIGFueXdheS4KKwlzZWQgLWkgJ3MvTUFJTF9ESVIvI01BSUxfRElSL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlzZWQgLWkgJ3MvI01BSUxfRklMRS9NQUlMX0ZJTEUvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBEaXNhYmxlIGNoZWNraW5nIGVtYWlscy4KKwlzZWQgLWkgJ3MvTUFJTF9DSEVDS19FTkFCLyNNQUlMX0NIRUNLX0VOQUIvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBDb21tZW50IG91dCBTVV9OQU1FIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggYnVzeWJveAorCSMgU2VlIEJ1ZyM1MzU5IGFuZCBCdWcjNzE3MworCXNlZCAtaSAnczpeU1VfTkFNRTojU1VfTkFNRTpnJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIFVzZSBwcm9wZXIgZW5jcnlwdGlvbiBmb3IgcGFzc3dvcmRzCisJc2VkIC1pICdzL14jRU5DUllQVF9NRVRIT0QuKiQvRU5DUllQVF9NRVRIT0QgU0hBNTEyLycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBOb3cgd2UgZG9uJ3QgaGF2ZSBhIG1haWwgc3lzdGVtLiBEaXNhYmxlIG1haWwgY3JlYXRpb24gZm9yIG5vdy4KKwlzZWQgLWkgJ3M6L2Jpbi9iYXNoOi9iaW4vc2g6ZycgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2VyYWRkCisJc2VkIC1pICcvXkNSRUFURV9NQUlMX1NQT09MLyBzOl46IzonICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNlcmFkZAorCisJIyBVc2UgdXNlcnMgZ3JvdXAgYnkgZGVmYXVsdAorCXNlZCAtaSAncyxeR1JPVVA9MTAwMCxHUk9VUD0xMDAsZycgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2VyYWRkCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGltYWdlIGhhcyBhcyBhIC92YXIvc3Bvb2wvbWFpbCBkaXIgc28gc2hhZG93IGNhbgorCSMgcHV0IG1haWxib3hlcyB0aGVyZSBpZiB0aGUgdXNlciByZWNvbmZpZ3VyZXMgc2hhZG93IHRvIGl0cworCSMgZGVmYXVsdHMgKHNlZSBzZWQgYmVsb3cpLgorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvbWFpbAorCisJaWYgWyAtZSAke1dPUktESVJ9L3BhbS5kIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcGFtLmQvKiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwkJIyBSZW1vdmUgZGVmYXVsdHMgdGhhdCBhcmUgbm90IHVzZWQgd2hlbiBzdXBwb3J0aW5nIFBBTS4KKwkJc2VkIC1pIC1mICR7V09SS0RJUn0vbG9naW5fZGVmc19wYW0uc2VkICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9ICR7RH0ke2Jhc2VfYmluZGlyfSAKKworCSMgTW92ZSBiaW5hcmllcyB0byB0aGUgbG9jYXRpb25zIHdlIHdhbnQKKwlybSAke0R9JHtzYmluZGlyfS92aWdyCisJbG4gLXNmIHZpcHcuJHtCUE59ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vdmlncgorCWlmIFsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7c2JpbmRpcn0vdmlwdyAke0R9JHtiYXNlX3NiaW5kaXJ9L3ZpcHcKKwlmaQorCWlmIFsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdOyB0aGVuCisJCW12ICR7RH0ke2JpbmRpcn0vbG9naW4gJHtEfSR7YmFzZV9iaW5kaXJ9L2xvZ2luCisJCW12ICR7RH0ke2JpbmRpcn0vc3UgJHtEfSR7YmFzZV9iaW5kaXJ9L3N1CisJZmkKKworCSMgSGFuZGxlIGxpbmsgcHJvcGVybHkgYWZ0ZXIgcmVuYW1lLCBvdGhlcndpc2UgbWlzc2luZyBmaWxlcyB3b3VsZAorCSMgbGVhZCBycG0gZmFpbGVkIGRlcGVuZGVuY2llcy4KKwlsbiAtc2YgbmV3Z3JwLiR7QlBOfSAke0R9JHtiaW5kaXJ9L3NnCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1iYXNlIgorRklMRVNfJHtQTn0tYmFzZSA9ICJcCisgICAgJHtiYXNlX2JpbmRpcn0vbG9naW4uc2hhZG93IFwKKyAgICAke2Jhc2VfYmluZGlyfS9zdS5zaGFkb3cgXAorICAgICR7YmluZGlyfS9zZyBcCisgICAgJHtiaW5kaXJ9L25ld2dycC5zaGFkb3cgXAorICAgICR7YmluZGlyfS9ncm91cHMuc2hhZG93IFwKKyAgICAke3N5c2NvbmZkaXJ9L3BhbS5kL2xvZ2luIFwKKyAgICAke3N5c2NvbmZkaXJ9L3BhbS5kL3N1IFwKKyAgICAke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMgXAorIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWJhc2UiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhc3N3ZCBjaGZuIGNoc2ggY2hwYXNzd2QgdmlwdyB2aWdyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2NocGFzc3dkXSA9ICIke3NiaW5kaXJ9L2NocGFzc3dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3ZpcHddID0gIiR7YmFzZV9zYmluZGlyfS92aXB3IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3ZpZ3JdID0gIiR7YmFzZV9zYmluZGlyfS92aWdyIgorCitBTFRFUk5BVElWRV8ke1BOfS1iYXNlID0gIm5ld2dycCBncm91cHMgbG9naW4gc3UiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbG9naW5dID0gIiR7YmFzZV9iaW5kaXJ9L2xvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1XSA9ICIke2Jhc2VfYmluZGlyfS9zdSIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInBhc3N3ZC41IGdldHNwbmFtLjMgZ3JvdXBzLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JvdXBzLjFdID0gIiR7bWFuZGlyfS9tYW4xL2dyb3Vwcy4xIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkgIHJvb3Rhcmc9Ii0tcm9vdCAkRCIKKwllbHNlCisJICByb290YXJnPSIiCisJZmkKKworCXB3Y29udiAkcm9vdGFyZyB8fCBleGl0IDEKKwlncnBjb252ICRyb290YXJnIHx8IGV4aXQgMQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvd180LjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3NWNiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBzaGFkb3cuaW5jCisKKyMgQnVpbGQgZmFsc2VseSBhc3N1bWVzIHRoYXQgaWYgLS1lbmFibGUtbGlicGFtIGlzIHNldCwgd2UgZG9uJ3QgbmVlZCB0byBsaW5rIGFnYWluc3QKKyMgbGliY3J5cHQuIFRoaXMgYnJlYWtzIGNoc2guCitCVUlMRF9MREZMQUdTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNyeXB0JywgICctbGNyeXB0JywgJycsIGQpLCAnJywgZCl9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlYmZlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDk2ZWI3ZTI5ODIyMTUxODIzYTY2YTFlYjU5ZjFmYTRhZWFkNWFlMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAwNjozMzoyMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggIGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ3Bvc2l4X2Nsb3NlJworCitFeHBvc2VkIHdoaWxlIGNvbXBpbGluZyBvbiBtdXNsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL3NscG9zaW8uYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2xwb3Npby5jIGIvc3JjL3NscG9zaW8uYworaW5kZXggOWNlOTY5Ny4uOWZmOWJmZSAxMDA2NDQKKy0tLSBhL3NyYy9zbHBvc2lvLmMKKysrKyBiL3NyYy9zbHBvc2lvLmMKK0BAIC0zNjMsNyArMzYzLDcgQEAgc3RhdGljIGludCBwb3NpeF9jbG9zZV9mZCAoaW50ICpmZCkKKyAgICByZXR1cm4gMDsKKyB9CisgCistc3RhdGljIGludCBwb3NpeF9jbG9zZSAoU0xGaWxlX0ZEX1R5cGUgKmYpCisrc3RhdGljIGludCBwb3NpeF9jbG9zZXggKFNMRmlsZV9GRF9UeXBlICpmKQorIHsKKyAgICBpbnQgc3RhdHVzID0gZG9fY2xvc2UgKGYpOworIAorQEAgLTEwMDEsNyArMTAwMSw3IEBAIHN0YXRpYyBTTGFuZ19JbnRyaW5fRnVuX1R5cGUgRmRfTmFtZV9UYWJsZSBbXSA9CisgICAgTUFLRV9JTlRSSU5TSUNfMigid3JpdGUiLCBwb3NpeF93cml0ZSwgViwgRiwgQiksCisgICAgTUFLRV9JTlRSSU5TSUNfMSgiZHVwX2ZkIiwgcG9zaXhfZHVwLCBWLCBGKSwKKyAgICBNQUtFX0lOVFJJTlNJQ18yKCJkdXAyX2ZkIiwgcG9zaXhfZHVwMiwgSSwgRiwgSSksCistICAgTUFLRV9JTlRSSU5TSUNfMSgiY2xvc2UiLCBwb3NpeF9jbG9zZSwgSSwgRiksCisrICAgTUFLRV9JTlRSSU5TSUNfMSgiY2xvc2UiLCBwb3NpeF9jbG9zZXgsIEksIEYpLAorICAgIE1BS0VfSU5UUklOU0lDXzEoIl9jbG9zZSIsIHBvc2l4X2Nsb3NlX2ZkLCBJLCBJKSwKKyAjaWYgZGVmaW5lZChUVFlOQU1FX1IpCisgICAgTUFLRV9JTlRSSU5TSUNfMCgidHR5bmFtZSIsIHBvc2l4X3R0eW5hbWUsIFYpLAorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2NoYW5nZS1jaGFyLXR5cGUtdG8tc2lnbmVkLWNoYXItaW4tbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTFmZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDIxOCBAQAorc2xhbmc6IGNoYW5nZSBjaGFyIHR5cGUgdG8gc2lnbmVkIGNoYXIgaW4gbWFjcm9zCisKK0MgbGFuZ3VhZ2UgaGFzIDMgZGlzdGluY3QgY2hhciB0eXBlczoKKyAgICAgICAgIGNoYXIKKyAgICAgICAgIHVuc2lnbmVkIGNoYXIKKyAgICAgICAgIHNpZ25lZCBjaGFyCitBIGNoYXIgaGFzIHRoZSBzYW1lIHJhbmdlIG9mIHZhbHVlcyBhcyBzaWduZWQgY2hhciBvbiBYODYsCitidXQgc2FtZSBhcyB1bnNpZ25lZCBjaGFyIG9uIEFSTSB3aGljaCBtYWRlIFNsYW5nJ3MgdHlwZWNhc3QoKQorYW5kIGFycmF5X3NvcnQoKSB1bmFibGUgdG8gd29yayBmb3IgY2hhciB2YWx1ZSBvbiBBUk0sIHNpbmNlCitTbGFuZyBpcyBhc3N1bWluZyAiY2hhciIgYXMgInNpZ25lZCBjaGFyIi4KKworTm93IHdlIGNoYW5nZSAiY2hhciIgYXMgInNpZ25lZCBjaGFyIiBleHBsaWNpdGx5IGluCit1dGlsL21rc2xhcml0aDIuc2wsIGFuZCB1c2UgaXQgdG8gcmVnZW5lcmF0ZSBzcmMvc2xhcml0aDIuaW5jCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvc2xhcml0aDIuaW5jICAgICAgIHwgICA3MiArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCB8ICAgIDIgLQorIDIgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy91dGlsL21rc2xhcml0aDIuc2wKKysrKyBiL3NyYy91dGlsL21rc2xhcml0aDIuc2wKK0BAIC0xLDcgKzEsNyBAQAorICMhL3Vzci9iaW4vZW52IHNsc2gKKyAKKyBwcml2YXRlIHZhcmlhYmxlIENUeXBlcyA9CistICBbImNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKKysgIFsic2lnbmVkIGNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKKyAgICAibG9uZyIsICJ1bnNpZ25lZCBsb25nIiwgImxvbmcgbG9uZyIsICJ1bnNpZ25lZCBsb25nIGxvbmciLAorICAgICJmbG9hdCIsICJkb3VibGUiLCAibG9uZyBkb3VibGUiXTsKKyBwcml2YXRlIHZhcmlhYmxlIElzX0ludF9UeXBlID0KKy0tLSBhL3NyYy9zbGFyaXRoMi5pbmMKKysrKyBiL3NyYy9zbGFyaXRoMi5pbmMKK0BAIC0xLDQzICsxLDQzIEBACisgLyogRE8gTk9UIEVESVQgLS0gdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCAqLworLS8qIC0tLS0tLS0tLS0tLSBjaGFyIC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfY2hhcl90b19jaGFyLGNoYXIsY2hhcikKKysvKiAtLS0tLS0tLS0tLS0gc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLworK0RFRlVOXzEoY29weV9jaGFyX3RvX2NoYXIsc2lnbmVkIGNoYXIsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBjaGFyX3RvX2NoYXIJTlVMTAorICNkZWZpbmUgY29weV9jaGFyX3RvX3VjaGFyCWNvcHlfY2hhcl90b19jaGFyCisgI2RlZmluZSBjaGFyX3RvX3VjaGFyCU5VTEwKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19zaG9ydCxjaGFyLHNob3J0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3Nob3J0LHNpZ25lZCBjaGFyLHNob3J0KQorICNkZWZpbmUgY2hhcl90b19zaG9ydAlOVUxMCistREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LGNoYXIsdW5zaWduZWQgc2hvcnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LHNpZ25lZCBjaGFyLHVuc2lnbmVkIHNob3J0KQorICNkZWZpbmUgY2hhcl90b191c2hvcnQJTlVMTAorLURFRlVOXzEoY29weV9jaGFyX3RvX2ludCxjaGFyLGludCkKKy1ERUZVTl8yKGNoYXJfdG9faW50LGNoYXIsaW50LGNvcHlfY2hhcl90b19pbnQpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCkKKy1ERUZVTl8yKGNoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCxjb3B5X2NoYXJfdG9fdWludCkKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19sb25nLGNoYXIsbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fbG9uZyxjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsY2hhcix1bnNpZ25lZCBsb25nKQorLURFRlVOXzIoY2hhcl90b191bG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcsY29weV9jaGFyX3RvX3Vsb25nKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQpCisrREVGVU5fMihjaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQsY29weV9jaGFyX3RvX2ludCkKKytERUZVTl8xKGNvcHlfY2hhcl90b191aW50LHNpZ25lZCBjaGFyLHVuc2lnbmVkIGludCkKKytERUZVTl8yKGNoYXJfdG9fdWludCxzaWduZWQgY2hhcix1bnNpZ25lZCBpbnQsY29weV9jaGFyX3RvX3VpbnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fbG9uZyxzaWduZWQgY2hhcixsb25nKQorK0RFRlVOXzIoY2hhcl90b19sb25nLHNpZ25lZCBjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZykKKytERUZVTl8yKGNoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyxjb3B5X2NoYXJfdG9fdWxvbmcpCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fbGxvbmcsY2hhcixsb25nIGxvbmcpCistREVGVU5fMihjaGFyX3RvX2xsb25nLGNoYXIsbG9uZyBsb25nLGNvcHlfY2hhcl90b19sbG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b19sbG9uZyxzaWduZWQgY2hhcixsb25nIGxvbmcpCisrREVGVU5fMihjaGFyX3RvX2xsb25nLHNpZ25lZCBjaGFyLGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fbGxvbmcpCisgI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWxsb25nLGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQorLURFRlVOXzIoY2hhcl90b191bGxvbmcsY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY29weV9jaGFyX3RvX3VsbG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQorK0RFRlVOXzIoY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNvcHlfY2hhcl90b191bGxvbmcpCisgI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQpCistREVGVU5fMihjaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQsY29weV9jaGFyX3RvX2Zsb2F0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LHNpZ25lZCBjaGFyLGZsb2F0KQorK0RFRlVOXzIoY2hhcl90b19mbG9hdCxzaWduZWQgY2hhcixmbG9hdCxjb3B5X2NoYXJfdG9fZmxvYXQpCisgI2VuZGlmIC8qIFNMQU5HX0hBU19GTE9BVCAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19kb3VibGUsY2hhcixkb3VibGUpCistREVGVU5fMihjaGFyX3RvX2RvdWJsZSxjaGFyLGRvdWJsZSxjb3B5X2NoYXJfdG9fZG91YmxlKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUpCisrREVGVU5fMihjaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUsY29weV9jaGFyX3RvX2RvdWJsZSkKKyAjZW5kaWYgLyogU0xBTkdfSEFTX0ZMT0FUICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLGNoYXIsbG9uZyBkb3VibGUpCistREVGVU5fMihjaGFyX3RvX2xkb3VibGUsY2hhcixsb25nIGRvdWJsZSxjb3B5X2NoYXJfdG9fbGRvdWJsZSkKKytERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlKQorK0RFRlVOXzIoY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlLGNvcHlfY2hhcl90b19sZG91YmxlKQorICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLVRPX0RPVUJMRV9GVU4oY2hhcl90b19vbmVfZG91YmxlLGNoYXIpCisrVE9fRE9VQkxFX0ZVTihjaGFyX3RvX29uZV9kb3VibGUsc2lnbmVkIGNoYXIpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLworQEAgLTgyLDcgKzgyLDcgQEAgVE9fRE9VQkxFX0ZVTih1Y2hhcl90b19vbmVfZG91YmxlLHVuc2lnbgorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBzaG9ydCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3Nob3J0X3RvX2NoYXIsc2hvcnQsY2hhcikKKytERUZVTl8xKGNvcHlfc2hvcnRfdG9fY2hhcixzaG9ydCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHNob3J0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9zaG9ydF90b191Y2hhcixzaG9ydCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgc2hvcnRfdG9fdWNoYXIJTlVMTAorQEAgLTEyMyw3ICsxMjMsNyBAQCBUT19ET1VCTEVfRlVOKHNob3J0X3RvX29uZV9kb3VibGUsc2hvcnQpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIHNob3J0IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsY2hhcikKKytERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1c2hvcnRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3VzaG9ydF90b191Y2hhcix1bnNpZ25lZCBzaG9ydCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgdXNob3J0X3RvX3VjaGFyCU5VTEwKK0BAIC0xNjQsNyArMTY0LDcgQEAgVE9fRE9VQkxFX0ZVTih1c2hvcnRfdG9fb25lX2RvdWJsZSx1bnNpZworICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBpbnQgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9pbnRfdG9fY2hhcixpbnQsY2hhcikKKytERUZVTl8xKGNvcHlfaW50X3RvX2NoYXIsaW50LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgaW50X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9pbnRfdG9fdWNoYXIsaW50LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBpbnRfdG9fdWNoYXIJTlVMTAorQEAgLTIwNSw3ICsyMDUsNyBAQCBUT19ET1VCTEVfRlVOKGludF90b19vbmVfZG91YmxlLGludCkKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgaW50IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdWludF90b19jaGFyLHVuc2lnbmVkIGludCxjaGFyKQorK0RFRlVOXzEoY29weV91aW50X3RvX2NoYXIsdW5zaWduZWQgaW50LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWludF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfdWludF90b191Y2hhcix1bnNpZ25lZCBpbnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVpbnRfdG9fdWNoYXIJTlVMTAorQEAgLTI0Niw3ICsyNDYsNyBAQCBUT19ET1VCTEVfRlVOKHVpbnRfdG9fb25lX2RvdWJsZSx1bnNpZ25lCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIGxvbmcgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2xvbmdfdG9fdWNoYXIsbG9uZyx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgbG9uZ190b191Y2hhcglOVUxMCitAQCAtMjg3LDcgKzI4Nyw3IEBAIFRPX0RPVUJMRV9GVU4obG9uZ190b19vbmVfZG91YmxlLGxvbmcpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGxvbmcgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV91bG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfdWxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3Vsb25nX3RvX3VjaGFyLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC0zMjksNyArMzI5LDcgQEAgVE9fRE9VQkxFX0ZVTih1bG9uZ190b19vbmVfZG91YmxlLHVuc2lnbgorIAorIC8qIC0tLS0tLS0tLS0tLSBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9sbG9uZ190b191Y2hhcixsb25nIGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGxsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC0zNzIsNyArMzcyLDcgQEAgVE9fRE9VQkxFX0ZVTihsbG9uZ190b19vbmVfZG91YmxlLGxvbmcgbAorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV91bGxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfdWxsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyBsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91bGxvbmdfdG9fdWNoYXIsdW5zaWduZWQgbG9uZyBsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1bGxvbmdfdG9fdWNoYXIJTlVMTAorQEAgLTQxNSw3ICs0MTUsNyBAQCBUT19ET1VCTEVfRlVOKHVsbG9uZ190b19vbmVfZG91YmxlLHVuc2lnCisgCisgLyogLS0tLS0tLS0tLS0tIGZsb2F0IC0tLS0tLS0tLS0gKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistREVGVU5fMShjb3B5X2Zsb2F0X3RvX2NoYXIsZmxvYXQsY2hhcikKKytERUZVTl8xKGNvcHlfZmxvYXRfdG9fY2hhcixmbG9hdCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGZsb2F0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9mbG9hdF90b191Y2hhcixmbG9hdCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgZmxvYXRfdG9fdWNoYXIJTlVMTAorQEAgLTQ1OCw3ICs0NTgsNyBAQCBUT19ET1VCTEVfRlVOKGZsb2F0X3RvX29uZV9kb3VibGUsZmxvYXQpCisgCisgLyogLS0tLS0tLS0tLS0tIGRvdWJsZSAtLS0tLS0tLS0tICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9kb3VibGVfdG9fY2hhcixkb3VibGUsY2hhcikKKytERUZVTl8xKGNvcHlfZG91YmxlX3RvX2NoYXIsZG91YmxlLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgZG91YmxlX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9kb3VibGVfdG9fdWNoYXIsZG91YmxlLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBkb3VibGVfdG9fdWNoYXIJTlVMTAorQEAgLTUwMSw3ICs1MDEsNyBAQCBUT19ET1VCTEVfRlVOKGRvdWJsZV90b19vbmVfZG91YmxlLGRvdWJsCisgCisgLyogLS0tLS0tLS0tLS0tIGxvbmcgZG91YmxlIC0tLS0tLS0tLS0gKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKQorLURFRlVOXzEoY29weV9sZG91YmxlX3RvX2NoYXIsbG9uZyBkb3VibGUsY2hhcikKKytERUZVTl8xKGNvcHlfbGRvdWJsZV90b19jaGFyLGxvbmcgZG91YmxlLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGRvdWJsZV90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfbGRvdWJsZV90b191Y2hhcixsb25nIGRvdWJsZSx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGRvdWJsZV90b191Y2hhcglOVUxMCitAQCAtNTQ1LDcgKzU0NSw3IEBAIFRPX0RPVUJMRV9GVU4obGRvdWJsZV90b19vbmVfZG91YmxlLGxvbmcKKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCisgc3RhdGljIFRvX0RvdWJsZV9GdW5fVGFibGVfVHlwZSBUb19Eb3VibGVfRnVuX1RhYmxlIFtNQVhfQVJJVEhNRVRJQ19UWVBFU10gPQorIHsKKy0gICB7c2l6ZW9mKGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAorKyAgIHtzaXplb2Yoc2lnbmVkIGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAorICAgIHtzaXplb2YodW5zaWduZWQgY2hhciksIHVjaGFyX3RvX29uZV9kb3VibGV9LAorICAgIHtzaXplb2Yoc2hvcnQpLCBzaG9ydF90b19vbmVfZG91YmxlfSwKKyAgICB7c2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgdXNob3J0X3RvX29uZV9kb3VibGV9LAorQEAgLTU4Myw3ICs1ODMsNyBAQCBzdGF0aWMgVG9fRG91YmxlX0Z1bl9UYWJsZV9UeXBlIFRvX0RvdWJsCisgCisgc3RhdGljIEJpbmFyeV9NYXRyaXhfVHlwZSBCaW5hcnlfTWF0cml4IFtNQVhfQVJJVEhNRVRJQ19UWVBFU11bTUFYX0FSSVRITUVUSUNfVFlQRVNdID0KKyB7CistICAgLyogY2hhciAqLworKyAgIC8qIHNpZ25lZCBjaGFyICovCisgICAgeworICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b19jaGFyLCBjaGFyX3RvX2NoYXJ9LAorICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b191Y2hhciwgY2hhcl90b191Y2hhcn0sCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2ZpeC1jaGVjay1wY3JlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMTU1M2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorZml4IHRoZSBwY3JlIGV4aXN0ZW5jZSBjaGVja2luZworCit3aGVuIGNoZWNrIGlmIHRoZXJlIGlzIHBjcmUsIHRoZSBjb25maWd1cmUgZmlsZSBhbHdheXMgY2hlY2sKK3RoZSBob3N0IGRpci4gbm93IHdlIG1ha2UgaXQgd29yayBieSBhZGRpbmcgY29ycmVjdCBwcmVmaXggZm9yCitjcm9zcy1jb21waWxlIGVudmlyb25tZW50LgorCitXaGVuIGVuYWJsZSBwY3JlLW1vZHVsZSwgd2Ugc2VlIGEgUUEgd2FybmluZyBiZWNhdXNlIHJwYXRocworaGFyZGNvZGVkIGludG8gdGhlIGJ1aWxkLCBycGF0aHMgYXJlIG5vdCBuZWVkZWQsIHNvIGxldHMgdHVybgordGhpcyBvZmYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgICA2MCArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGYxNTg2YzMuLmQyMjgxNGYgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY5OTEsNiArNjk5MSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgCSAvdXNyL2luY2x1ZGUvcGNyZSwvdXNyL2xpYiBcCisgCSAvdXNyL3BjcmUvaW5jbHVkZSwvdXNyL3BjcmUvbGliIFwKKyAJIC91c3IvaW5jbHVkZSwvdXNyL2xpYiBcCisrCSAvdXNyL2luY2x1ZGUsL3Vzci9saWI2NCBcCisgCSAvb3B0L2luY2x1ZGUvcGNyZSwvb3B0L2xpYiBcCisgCSAvb3B0L3BjcmUvaW5jbHVkZSwvb3B0L3BjcmUvbGliIFwKKyAJIC9vcHQvaW5jbHVkZSwvb3B0L2xpYiIKK0BAIC03MDIxLDE0ICs3MDIyLDE0IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgICAgICAgICB4aW5jZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDF9J2AKKyAJeGxpYmRpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQyfSdgCisgCWZvdW5kPTAKKy0JaWYgdGVzdCAtciAkeGluY2Rpci8keGluY2ZpbGUKKysJaWYgdGVzdCAtciAkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2Rpci8keGluY2ZpbGUKKyAJdGhlbgorIAkgIGZvciBFIGluICRleHRzCisgCSAgZG8KKy0JICAgIGlmIHRlc3QgLXIgIiR4bGliZGlyLyR4bGliZmlsZS4kRSIKKysJICAgIGlmIHRlc3QgLXIgIiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyLyR4bGliZmlsZS4kRSIKKyAJICAgIHRoZW4KKy0JICAgICAgamRfcGNyZV9pbmNsdWRlX2Rpcj0iJHhpbmNkaXIiCistCSAgICAgIGpkX3BjcmVfbGlicmFyeV9kaXI9IiR4bGliZGlyIgorKwkgICAgICBqZF9wY3JlX2luY2x1ZGVfZGlyPSIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2RpciIKKysJICAgICAgamRfcGNyZV9saWJyYXJ5X2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIiCisgCSAgICAgIGpkX3dpdGhfcGNyZV9saWJyYXJ5PSJ5ZXMiCisgCSAgICAgIGZvdW5kPTEKKyAJICAgICAgYnJlYWsKK0BAIC03MDU0LDU2ICs3MDU1LDcgQEAgJGFzX2VjaG8gInllczogJGpkX3BjcmVfbGlicmFyeV9kaXIgYW5kICRqZF9wY3JlX2luY2x1ZGVfZGlyIiA+JjY7IH0KKyAgICAgdGhlbgorICAgICAgIFBDUkVfTElCPSIiCisgICAgIGVsc2UKKy0KKy1pZiB0ZXN0ICJYJGpkX3BjcmVfbGlicmFyeV9kaXIiICE9ICJYIgorLXRoZW4KKy0gIGlmIHRlc3QgIlgkUlBBVEgiID0gIlgiCistICB0aGVuCistCistY2FzZSAiJGhvc3Rfb3MiIGluCistICAqbGludXgqfCpzb2xhcmlzKiApCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiwiCistICAgICAgZWxzZQorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVIgIgorLSAgICAgIGVsc2UKKy0JUlBBVEg9Ii1SIgorLSAgICAgIGZpCistICAgIGZpCistICA7OworLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCistICAgIGVsc2UKKy0gICAgICBSUEFUSD0iLXJwYXRoICIKKy0gICAgZmkKKy0gIDs7CistICAqbmV0YnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgZmkKKy0gIDs7CistZXNhYworLQorLSAgICBpZiB0ZXN0ICJYJFJQQVRIIiAhPSAiWCIKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEgkamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgUlBBVEg9IiRSUEFUSDokamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gIGZpCistZmkKKy0KKysgICAgICBSUEFUSD0iIgorICAgICBmaQorIAorICAgICBQQ1JFX0lOQz0tSSRqZF9wY3JlX2luY2x1ZGVfZGlyCistLSAKKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9ycGF0aGZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGNhYzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorV2l0aG91dCB0aGlzIHBhdGNoIHdlIHNlZSBycGF0aHMgaGFyZGNvZGVkIGludG8gdGhlIGJ1aWxkIHdoaWNoIHJlc3VsdHMgaW4gUUEKK3dhcm5pbmdzLiBUaGVzZSBycGF0aHMgYXJlIG5vdCBuZWVkZWQgc28gbGV0cyB0dXJuIHRoaXMgb2ZmLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKyhidXQgY291bGQgYmUgdHVybmVkIGludG8gYSBwcm9wZXIgY29uZmlndXJlIG9wdGlvbikKKworUlAgMjAxMi8wMy8xNAorCitJbmRleDogc2xhbmctMi4yLjQvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2xhbmctMi4yLjQub3JpZy9jb25maWd1cmUJMjAxMi0wMy0xNCAyMzo0MDowMS4yODM1NjA2NzkgKzAwMDAKKysrKyBzbGFuZy0yLjIuNC9jb25maWd1cmUJMjAxMi0wMy0xNCAyMzo0MToxOC4wMjM1NTg5MDAgKzAwMDAKK0BAIC02MDgxLDU2ICs2MDgxLDcgQEAKKyBFTEZfQ0ZMQUdTPSIkRUxGX0NGTEFHUyAkSUVFRV9DRkxBR1MiCisgQ0ZMQUdTPSIkQ0ZMQUdTICRJRUVFX0NGTEFHUyIKKyAKKy0KKy1pZiB0ZXN0ICJYJGxpYmRpciIgIT0gIlgiCistdGhlbgorLSAgaWYgdGVzdCAiWCRSUEFUSCIgPSAiWCIKKy0gIHRoZW4KKy0KKy1jYXNlICIkaG9zdF9vcyIgaW4KKy0gICpsaW51eCp8KnNvbGFyaXMqICkKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVdsLC1SLCIKKy0gICAgICBlbHNlCistICAgICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItUiAiCistICAgICAgZWxzZQorLQlSUEFUSD0iLVIiCistICAgICAgZmkKKy0gICAgZmkKKy0gIDs7CistICAqb3NmKnwqb3BlbmJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKKy0gICAgZWxzZQorLSAgICAgIFJQQVRIPSItcnBhdGggIgorLSAgICBmaQorLSAgOzsKKy0gICpuZXRic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICBmaQorLSAgOzsKKy1lc2FjCistCistICAgIGlmIHRlc3QgIlgkUlBBVEgiICE9ICJYIgorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSCRsaWJkaXIiCistICAgIGZpCistICBlbHNlCistICAgIFJQQVRIPSIkUlBBVEg6JGxpYmRpciIKKy0gIGZpCistZmkKKy0KKytSUEFUSD0iIgorIAorICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThmZTk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKQEAgLTAsMCArMSwxMTYgQEAKK0Zyb20gNDU4OGY0YTAyODc3ODc3ODhlYjg2ZmIxNmYzMjZjYmFhNzQ1NGUxZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoZW5nIEp1bmxpbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogTW9uLCAxNiBKdW4gMjAxNCAxMjo1MToyNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBzbGFuZzogZml4IHRoZSBpY29udiBleGlzdGVuY2UgY2hlY2tpbmcKKworV2hlbiBjaGVja2luZyB3aGV0aGVyIHRoZXJlIGlzIGljb252LCB0aGUgY29uZmlndXJlIGZpbGUgYWx3YXlzIGNoZWNrIAordGhlIGhvc3QgZW52LgorCitOb3cgd2UgbWFrZSBpdCB3b3JraW5nIHByb3Blcmx5IGJ5IGFkZGluZyBjb3JyZWN0IHByZWZpeCBmb3IgY3Jvc3MtCitjb21waWxpbmcgZW52aXJvbm1lbnQuCisKK1doZW4gZW5hYmxpbmcgaWNvbnYtbW9kdWxlLCB3ZSBzZWUgYSBRQSB3YXJuaW5nIGJlY2F1c2UgcnBhdGhzIGhhcmRjb2RlZAoraW50byB0aGUgYnVpbGQuIEFuZCBycGF0aHMgYXJlIG5vdCBuZWVkZWQsIHNvIGxldCdzIHR1cm4gdGhpcyBvZmYuCisKK1RoaXMgcGF0Y2ggaXMgZ2VuZXJhdGVkIGJ5IHJlZmVyZW5jaW5nIHRoZSBleGlzdGluZyAiZml4LWNoZWNrLXBjcmUiCitwYXRjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5nIEp1bmxpbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorLS0tCisgY29uZmlndXJlIHwgNjAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDdhOTYyNTYuLjkxNjMyZjMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc5MDksNiArNzkwOSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgaWNvbnYgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorIAkgL3Vzci9pbmNsdWRlL2ljb252LC91c3IvbGliIFwKKyAJIC91c3IvaWNvbnYvaW5jbHVkZSwvdXNyL2ljb252L2xpYiBcCisgCSAvdXNyL2luY2x1ZGUsL3Vzci9saWIgXAorKwkgL3Vzci9pbmNsdWRlLC91c3IvbGliNjQgXAorIAkgL29wdC9pbmNsdWRlL2ljb252LC9vcHQvbGliIFwKKyAJIC9vcHQvaWNvbnYvaW5jbHVkZSwvb3B0L2ljb252L2xpYiBcCisgCSAvb3B0L2luY2x1ZGUsL29wdC9saWIiCitAQCAtNzkzOSwxNCArNzk0MCwxNCBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KKyAgICAgICAgIHhpbmNkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMX0nYAorIAl4bGliZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAJZm91bmQ9MAorLQlpZiB0ZXN0IC1yICR4aW5jZGlyLyR4aW5jZmlsZQorKwlpZiB0ZXN0IC1yICRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyLyR4aW5jZmlsZQorIAl0aGVuCisgCSAgZm9yIEUgaW4gJGV4dHMKKyAJICBkbworLQkgICAgaWYgdGVzdCAtciAiJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorKwkgICAgaWYgdGVzdCAtciAiJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorIAkgICAgdGhlbgorLQkgICAgICBqZF9pY29udl9pbmNsdWRlX2Rpcj0iJHhpbmNkaXIiCistCSAgICAgIGpkX2ljb252X2xpYnJhcnlfZGlyPSIkeGxpYmRpciIKKysJICAgICAgamRfaWNvbnZfaW5jbHVkZV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyIgorKwkgICAgICBqZF9pY29udl9saWJyYXJ5X2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIiCisgCSAgICAgIGpkX3dpdGhfaWNvbnZfbGlicmFyeT0ieWVzIgorIAkgICAgICBmb3VuZD0xCisgCSAgICAgIGJyZWFrCitAQCAtNzk3Miw1NiArNzk3Myw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9pY29udl9saWJyYXJ5X2RpciBhbmQgJGpkX2ljb252X2luY2x1ZGVfZGlyIiA+JjY7IH0KKyAgICAgdGhlbgorICAgICAgIElDT05WX0xJQj0iIgorICAgICBlbHNlCistCistaWYgdGVzdCAiWCRqZF9pY29udl9saWJyYXJ5X2RpciIgIT0gIlgiCistdGhlbgorLSAgaWYgdGVzdCAiWCRSUEFUSCIgPSAiWCIKKy0gIHRoZW4KKy0KKy1jYXNlICIkaG9zdF9vcyIgaW4KKy0gICpsaW51eCp8KnNvbGFyaXMqICkKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVdsLC1SLCIKKy0gICAgICBlbHNlCistICAgICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItUiAiCistICAgICAgZWxzZQorLQlSUEFUSD0iLVIiCistICAgICAgZmkKKy0gICAgZmkKKy0gIDs7CistICAqb3NmKnwqb3BlbmJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKKy0gICAgZWxzZQorLSAgICAgIFJQQVRIPSItcnBhdGggIgorLSAgICBmaQorLSAgOzsKKy0gICpuZXRic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICBmaQorLSAgOzsKKy1lc2FjCistCistICAgIGlmIHRlc3QgIlgkUlBBVEgiICE9ICJYIgorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSCRqZF9pY29udl9saWJyYXJ5X2RpciIKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgUlBBVEg9IiRSUEFUSDokamRfaWNvbnZfbGlicmFyeV9kaXIiCistICBmaQorLWZpCistCisrICAgICAgUlBBVEg9IiIKKyAgICAgZmkKKyAKKyAgICAgSUNPTlZfSU5DPS1JJGpkX2ljb252X2luY2x1ZGVfZGlyCistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDAwMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tIDNhMDVkMWE5MjAxNDBlOWYyYzcyNzkxYzEyZjY2NDIxM2ZlYjQ2ZGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYW5mcmVkIEhhbmtlIDxNYW5mcmVkLkhhbmtlQHRuZ3RlY2guY29tPgorRGF0ZTogVGh1LCAyMCBKdW4gMjAxMyAxMDoyNDoxMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBzcHJpbnRmIGJ1ZyAoY29uY2VybmluZyAlYyBmb3IgOC1iaXQgY2hhcmFjdGVyIGluIG5vbi1VVEY4CisgbW9kZSkgZml4ZWQKKworY2hhciAqc3RyIHBvaW50cyB0byBTTHVjaGFyX1R5cGUgdXRmOF9idWZbXSwgd2hpY2ggaGFkIHRvbyBzbWFsbCBzY29wZQorCitzcmMvdGVzdC9zdHJvcHMuc2wgZmFpbGVkIGluIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQ6CisgLSBjb21waWxlcjogIGdjYyAoRGViaWFuIDQuNy4yLTUpIDQuNy4yCisgLSBDRkxBR1M6ICAgIC1nIC1PMgorIC0gbGliYzogICAgICBHTlUgQyBMaWJyYXJ5IChEZWJpYW4gRUdMSUJDIDIuMTMtMzgpIHN0YWJsZSByZWxlYXNlIHZlcnNpb24gMi4xMworIC0ga2VybmVsOiAgICAzLjIuMC00LTY4Ni1wYWUgIzEgU01QIERlYmlhbiAzLjIuMzktMiBpNjg2IEdOVS9MaW51eAorLS0tCisgc3JjL3Nsc3Ryb3BzLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2xzdHJvcHMuYyBiL3NyYy9zbHN0cm9wcy5jCitpbmRleCBjZTZhY2IwLi5jYmJiYjAxIDEwMDY0NAorLS0tIGEvc3JjL3Nsc3Ryb3BzLmMKKysrKyBiL3NyYy9zbHN0cm9wcy5jCitAQCAtMTg4NCw2ICsxODg0LDcgQEAgc3RhdGljIGNoYXIgKlNMZG9fc3ByaW50ZiAoY2hhciAqZm10KSAvKnt7eyovCisgI2VuZGlmCisgICAgdW5zaWduZWQgY2hhciB1Y2g7CisgICAgaW50IHVzZV9sb25nID0gMCwgdXNlX2FsdF9mb3JtYXQgPSAwOworKyAgIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltTTFVURjhfTUFYX01CTEVOKzFdOworIAorICAgIHdoaWxlICgxKQorICAgICAgeworQEAgLTIwNzEsNyArMjA3Miw2IEBAIHN0YXRpYyBjaGFyICpTTGRvX3NwcmludGYgKGNoYXIgKmZtdCkgLyp7e3sqLworICNlbmRpZgorIAkgICAgICAgeworIAkJICBTTHdjaGFyX1R5cGUgd2M7CistCQkgIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltTTFVURjhfTUFYX01CTEVOKzFdOworIAorIAkJICBpZiAoLTEgPT0gU0xhbmdfcG9wX3djaGFyICgmd2MpKQorIAkJICAgIHJldHVybiBvdXQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZ18yLjIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTIyZjUzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJUaGUgc2hhcmVkIGxpYnJhcnkgZm9yIHRoZSBTLUxhbmcgZXh0ZW5zaW9uIGxhbmd1YWdlIgorCitERVNDUklQVElPTiA9ICJTLUxhbmcgaXMgYW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgYW5kIGEgcHJvZ3JhbW1pbmcgbGlicmFyeS4gIFRoZSBcCitTLUxhbmcgbGFuZ3VhZ2Ugd2FzIGRlc2lnbmVkIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbnRvIFwKK2EgcHJvZ3JhbSB0byBwcm92aWRlIHRoZSBwcm9ncmFtIHdpdGggYSBwb3dlcmZ1bCBleHRlbnNpb24gbGFuZ3VhZ2UuIFwKK1RoZSBTLUxhbmcgbGlicmFyeSwgcHJvdmlkZWQgaW4gdGhpcyBwYWNrYWdlLCBwcm92aWRlcyB0aGUgUy1MYW5nIFwKK2V4dGVuc2lvbiBsYW5ndWFnZS4gIFMtTGFuZydzIHN5bnRheCByZXNlbWJsZXMgQywgd2hpY2ggbWFrZXMgaXQgZWFzeSBcCit0byByZWNvZGUgUy1MYW5nIHByb2NlZHVyZXMgaW4gQyBpZiB5b3UgbmVlZCB0by4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvc2xhbmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJwY3JlIgorUFIgPSAicjEyIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTUyYTE4YTQ3MmQ0ZjdlNDU0NzliMDY1NjM3MTdjMDIiCisKKworU1JDX1VSSSA9ICJmdHA6Ly9zcGFjZS5taXQuZWR1L3B1Yi9kYXZpcy9zbGFuZy92Mi4yL3NsYW5nLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcnBhdGhmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNoZWNrLXBjcmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaCBcCisgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdmY2ZkNDQ3ZTM3OGYwN2RkMGMwYmFlNjcxZmU2NDg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhODI1N2E5YTJhNTUwOTlhZjg1OGIxMzMzOGRjOGYzYTA2ZGQyMDY5ZjQ2ZjBkZjJjOWMzYmI4NGEwMWQ1ZGIiCisKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC16IC0td2l0aG91dC1wbmcgLS13aXRob3V0LW9uaWcgLS14LWluY2x1ZGVzPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2luY2x1ZGUvWDExIC0teC1saWJyYXJpZXM9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvbGliIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIHNsYW5nIGtlZXBzIGNvbmZpZ3VyZS5hYyBhbmQgcmVzdCBvZiBhdXRvY29uZiBmaWxlcyBpbiBhdXRvY29uZi8gZGlyZWN0b3J5CisgICAgIyB3ZSBoYXZlIHRvIGdvIHRoZXJlIHRvIGJlIGFibGUgdG8gcnVuIGdudS1jb25maWdpemUgY2F1c2UgaXQgZXhwZWN0cyBjb25maWd1cmUue2luLGFjfQorICAgICMgdG8gYmUgcHJlc2VudC4gUmVzdWx0aW5nIGZpbGVzIGxhbmQgaW4gYXV0b2NvbmYvYXV0b2NvbmYvIHNvIHdlIG5lZWQgdG8gbW92ZSB0aGVtLgorICAgIGNkICR7U30vYXV0b2NvbmYgJiYgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICYmIG12IGF1dG9jb25mL2NvbmZpZy4qIC4KKyAgICBjZCAke0J9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSAtZSAnSU5TVF9MSUJfRElSPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2xpYicKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vdjIvbW9kdWxlcy8gJHtkYXRhZGlyfS9zbHNoLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS92Mi9tb2R1bGVzLy5kZWJ1ZyIKKworUEFSQUxMRUxfTUFLRSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtZXJyb3ItcmV0dXJuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtZXJyb3ItcmV0dXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjk5NWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXQtMy4zL2ZpeC1lcnJvci1yZXR1cm4ucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVGhpcyBwYXRjaCBmaXhpZXMgdGhlIHdyb25nIHJldHVybiBjb2RlIG9mIHN0YXQgLWguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogWmhhbmdsZSBZYW5nIDx6aGFuZ2xlLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIHN0YXQtMy4zL3N0YXQuYy5vcmlnCTIwMTMtMDgtMjIgMTA6NDk6NDUuMDAwMDAwMDAwICswODAwCisrKysgc3RhdC0zLjMvc3RhdC5jCTIwMTMtMDgtMjIgMTA6NTA6MzEuMDAwMDAwMDAwICswODAwCitAQCAtODQ1LDcgKzg0NSw3IEBACisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlUyAtIFNlY3VyaXR5IElEIGluIFNFLUxpbnV4XG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsICJcdFx0JSVDIC0gU2VjdXJpdHkgY29udGV4dCBpbiBTRS1MaW51eFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlZCAtIEZyZWUgZmlsZSBub2RlcyBpbiBmaWxlIHN5c3RlbVxuIik7CistICAgIGV4aXQoMSk7CisrICAgIGV4aXQoMCk7CisgfQorICAgCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTE4MzFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSBmaWxlIHN0YXR1cyBkaXNwbGF5IHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJEaXNwbGF5cyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIHRoYXQgdGhlIHN0YXQoKSBjYWxsIHByb3ZpZGVzIGFuZCBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlc3lzdGVtIHRoYXQgc3RhdGZzKCkgcHJvdmlkZXMuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9Mzk4ODZiMDc3ZmQwNzJlODc2ZTVjNGMxNjMxMGI2MzEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC91dGlscy9maWxlLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZXJyb3ItcmV0dXJuLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzdlMjQ3ZThlNDAwYWQ5MjA1ZjFiMDUwMGI3MjhmZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzA3MWYwMzg0YTQyM2E5MzhkZDU0MmMxZjA4NTQ3YTAyODI0ZjYzNTlhY2QzZWYzZjk0NGIyYzRjMmQxZWUwOSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfSAke0R9JHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC1tIDc1NSBzdGF0ICR7RH0ke2Jhc2VfYmluZGlyfS9zdGF0LnN0YXQKKwlpbnN0YWxsIC1tIDY0NCBzdGF0LjEgJHtEfSR7bWFuZGlyfS9tYW4xCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzdGF0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbc3RhdF0gPSAiMjAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N0YXRdID0gIiR7YmFzZV9iaW5kaXJ9L3N0YXQiCitBTFRFUk5BVElWRV9UQVJHRVRbc3RhdF0gPSAiJHtiYXNlX2JpbmRpcn0vc3RhdC5zdGF0IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAic3RhdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N0YXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvc3RhdC4xIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3MvZmlsZXMvdGV4aW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWM1OTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorLS0tIGEvZG9jL3N0cmVzcy50ZXhpCisrKysgYi9kb2Mvc3RyZXNzLnRleGkKK0BAIC02Miw0NyArNjIsNDcgQEAKKyAKKyBAdGFibGUgQHNhbXAKKyBAaXRlbSAtPworLUBpdGVteCAtLWhlbHAKKytAaXRlbSAtLWhlbHAKKyBTaG93IGhlbHAgaW5mb3JtYXRpb24uCisgCistQGl0ZW14IC0tdmVyc2lvbgorK0BpdGVtIC0tdmVyc2lvbgorIFNob3cgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAKKyBAaXRlbSAtdgorLUBpdGVteCAtLXZlcmJvc2UKKytAaXRlbSAtLXZlcmJvc2UKKyBUdXJuIHVwIHZlcmJvc2l0eS4KKyAKKyBAaXRlbSAtcQorLUBpdGVteCAtLXF1aWV0CisrQGl0ZW0gLS1xdWlldAorIFR1cm4gZG93biB2ZXJib3NpdHkuCisgCisgQGl0ZW0gLW4KKy1AaXRlbXggLS1kcnktcnVuCisrQGl0ZW0gLS1kcnktcnVuCisgU2hvdyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBkb25lLgorIAorIEBpdGVtIC10IEB2YXJ7c2Vjc30KKy1AaXRlbXggLS10aW1lb3V0IEB2YXJ7c2Vjc30KKytAaXRlbSAtLXRpbWVvdXQgQHZhcntzZWNzfQorIFRpbWUgb3V0IGFmdGVyIEB2YXJ7c2Vjc30gc2Vjb25kcy4KKyAKKy1AaXRlbXggLS1iYWNrb2ZmIEB2YXJ7dXNlY3N9CisrQGl0ZW0gLS1iYWNrb2ZmIEB2YXJ7dXNlY3N9CisgV2FpdCBmb3IgZmFjdG9yIG9mIEB2YXJ7dXNlY3N9IG1pY3Jvc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgd29yay4KKyAKKyBAaXRlbSAtYyBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWNwdSBAdmFye2ZvcmtzfQorK0BpdGVtIC0tY3B1IEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7c3FydCgpfS4KKyAKKyBAaXRlbSAtaSBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWlvIEB2YXJ7Zm9ya3N9CisrQGl0ZW0gLS1pbyBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we3N5bmMoKX0uCisgCisgQGl0ZW0gLW0gQHZhcntmb3Jrc30KKy1AaXRlbXggLS12bSBAdmFye2ZvcmtzfQorK0BpdGVtIC0tdm0gQHZhcntmb3Jrc30KKyBTcGF3biBAdmFye2ZvcmtzfSBwcm9jZXNzZXMgZWFjaCBzcGlubmluZyBvbiBAc2FtcHttYWxsb2MoKX0uCisgCistQGl0ZW14IC0tdm0tYnl0ZXMgQHZhcntieXRlc30KKytAaXRlbSAtLXZtLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisgQWxsb2NhdGUgQHZhcntieXRlc30gbnVtYmVyIG9mIGJ5dGVzLiAgVGhlIGRlZmF1bHQgaXMgMS4KKyAKKy1AaXRlbXggLS12bS1oYW5nCisrQGl0ZW0gLS12bS1oYW5nCisgSW5zdHJ1Y3QgZWFjaCB2bSBob2cgcHJvY2VzcyB0byBnbyB0byBzbGVlcCBhZnRlciBhbGxvY2F0aW5nIG1lbW9yeS4gIFRoaXMKKyBjb250cmFzdHMgd2l0aCB0aGVpciBub3JtYWwgYmVoYXZpb3IsIHdoaWNoIGlzIHRvIGZyZWUgdGhlIG1lbW9yeSBhbmQKKyByZWFsbG9jYXRlIEBlbXBoe2FkIGluZmluaXR1bX0uICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2ltdWxhdGluZyBsb3cgbWVtb3J5CitAQCAtMTE0LDEzICsxMTQsMTMgQEAKKyBAZW5kIGV4YW1wbGUKKyAKKyBAaXRlbSAtZCBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWhkZCBAdmFye2ZvcmtzfQorK0BpdGVtIC0taGRkIEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7d3JpdGUoKX0uCisgCistQGl0ZW14IC0taGRkLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisrQGl0ZW0gLS1oZGQtYnl0ZXMgQHZhcntieXRlc30KKyBXcml0ZSBAdmFye2J5dGVzfSBudW1iZXIgb2YgYnl0ZXMuICBUaGUgZGVmYXVsdCBpcyAxR0IuCisgCistQGl0ZW14IC0taGRkLW5vY2xlYW4KKytAaXRlbSAtLWhkZC1ub2NsZWFuCisgRG8gbm90IHVubGluayBmaWxlKHMpIHRvIHdoaWNoIHJhbmRvbSBBU0NJSSBkYXRhIGlzIHdyaXR0ZW4uCisgCisgQGVuZCB0YWJsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL3N0cmVzc18xLjAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3ZTRiYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIKQEAgLTAsMCArMSwxNCBAQAorREVTQ1JJUFRJT04gPSAiRGVsaWJlcmF0ZWx5IHNpbXBsZSB3b3JrbG9hZCBnZW5lcmF0b3IgZm9yIFBPU0lYIHN5c3RlbXMuIEl0IFwKK2ltcG9zZXMgYSBjb25maWd1cmFibGUgYW1vdW50IG9mIENQVSwgbWVtb3J5LCBJL08sIGFuZCBkaXNrIHN0cmVzcyBvbiB0aGUgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZW9wbGUuc2Vhcy5oYXJ2YXJkLmVkdS9+YXB3L3N0cmVzcy8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Blb3BsZS5zZWFzLmhhcnZhcmQuZWR1L35hcHcvJHtCUE59LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90ZXhpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODkwYTQyMzZkZDE2NTY3OTJmM2VmOWExOTBjZjk5ZWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDU3ZTRmYzJhNzcwNjQxMWUxMDE0YmYxNzJlNGY5NGI2M2ExMmYxODQxMjM3OGZjYTg2ODRjYTkyNDA4ODI1YiIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vZmlsZXMvc3Vkby5wYW0gYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzI2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtCkBAIC0wLDAgKzEsNiBAQAorIyVQQU0tMS4wCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2tleWluaXQuc28gcmV2b2tlCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fbGltaXRzLnNvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjU4NzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYwpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlByb3ZpZGUgbGltaXRlZCBzdXBlciB1c2VyIHByaXZpbGVnZXMgdG8gc3BlY2lmaWMgdXNlcnMiCitERVNDUklQVElPTiA9ICJTdWRvIChzdXBlcnVzZXIgZG8pIGFsbG93cyBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIGdpdmUgY2VydGFpbiB1c2VycyAob3IgZ3JvdXBzIG9mIHVzZXJzKSB0aGUgYWJpbGl0eSB0byBydW4gc29tZSAob3IgYWxsKSBjb21tYW5kcyBhcyByb290IHdoaWxlIGxvZ2dpbmcgYWxsIGNvbW1hbmRzIGFuZCBhcmd1bWVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zdWRvLndzIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3LnN1ZG8ud3MvYnVncy8iCitTRUNUSU9OID0gImFkbWluIgorTElDRU5TRSA9ICJJU0MgJiBCU0QgJiBabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0xJQ0VOU0U7bWQ1PWMxNmU1NDI0MDhhYmRhMDEzZDY3MmJlOGViODhkMTc0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BsdWdpbnMvc3Vkb2Vycy9yZWRibGFjay5jO2JlZ2lubGluZT0xO2VuZGxpbmU9NDE7bWQ1PWNmZTQxMTEyZjk2YzE5YTA3NDkzNGQxMjhmNDVjNjkzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL3JlYWxsb2NhcnJheS5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PTg1YjA5MDViNzk1ZDRkNThiZjJlMDA2MzU2NDllZWM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL2ZubWF0Y2guYztiZWdpbmxpbmU9MztlbmRsaW5lPTI3O21kNT02N2Y4M2VlOWJkNDU2NTU3Mzk3MDgyZjhmMWJlMGVmZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9nZXRjd2QuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTI3O21kNT00NDlhZjRjYzU3ZmM3ZDQ2ZjQyMDkwNjA4YmEzZTY4MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9nbG9iLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0zMTttZDU9NTg3MjczMzE0NmI5ZWIwZGViNzllMWY2NjQ4MTViODUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvc25wcmludGYuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTM0O21kNT1jODJjMWIzYTVjMzJlMDg1NDVjOWVjNWQ3MWU0MWU1MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3N1ZG9fcXVldWUuaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTI3O21kNT00NDlhZjRjYzU3ZmM3ZDQ2ZjQyMDkwNjA4YmEzZTY4MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9pbmV0X3B0b24uYztiZWdpbmxpbmU9MztlbmRsaW5lPTE3O21kNT0zOTcwYWIwNTE4YWI3OWNiZDBiYWZiNjk3ZjEwYjMzYSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zdWRvZXJzIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWVkaXRvcj0vYmluL3ZpIC0td2l0aC1lbnYtZWRpdG9yIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLS1kaXNhYmxlLWhhcmRlbmluZyAiCisKKyMgbWtzaWduYW1lL21rc2lnbGlzdCBhcmUgdXNlZCBvbiBidWlsZCBob3N0IHRvIGdlbmVyYXRlIHNvdXJjZSBmaWxlcworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlvZV9ydW5tYWtlIFNTUF9DRkxBR1M9IiIgU1NQX0xERkxBR1M9IiIgQ0M9IiRCVUlMRF9DQyIgQ0ZMQUdTPSIkQlVJTERfQ0ZMQUdTIiBDUFBGTEFHUz0iJEJVSUxEX0NQUEZMQUdTIC1JJHtTfS9pbmNsdWRlIC1JJHtTfSAtSSR7Qn0iICAtQyBsaWIvdXRpbCBta3NpZ25hbWUgbWtzaWdsaXN0Cit9CisKKyMgRXhwbGljaXRseSBjcmVhdGUgJHtsb2NhbHN0YXRlZGlyfS9saWIgYmVmb3JlIGRvX2luc3RhbGwgdG8gZW5zdXJlCisjIHRoZSBkaXJlY3RvcnkgaXMgYWNjZXNzaWJsZSBieSBhbGwgdXNlcnMuIE90aGVyd2lzZSB0aGUgbWtpbnN0YWxsZGlycworIyBzY3JpcHQgKGZyb20gc3Vkbykgd2lsbCByZWN1cnNpdmVseSBjcmVhdGUgJHtsb2NhbHN0YXRlZGlyfS9saWIvc3VkbworIyBhbmQgdGhlbiBjaG1vZCBlYWNoIGRpcmVjdG9yeSB3aXRoIDA3MDAgcGVybWlzc2lvbnMsIHdoaWNoIGlzbid0IHdoYXQKKyMgd2Ugd2FudCAoaS5lLCB1c2VycyB3b3VsZCBub3QgYmUgYWJsZSB0byBhY2Nlc3MgL3Zhci9saWIpLgorZG9faW5zdGFsbF9wcmVwZW5kICgpeworCW1rZGlyIC1wICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9saWIKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLUluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWlkX3QtZGVmaW5pdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLUluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWlkX3QtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjM2Y2Q0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMzg2ZTJjMmZhMmFiMmUwMmVmNzFjMjY4YTU3MjA1MTM5YmUzMjlhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDA3OjA3OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIGlkX3QgZGVmaW5pdGlvbgorCisvc3Vkb191dGlsLmg6MjE5OjE0OiBlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ2lkX3QnCisgX19kc29fcHVibGljIGlkX3Qgc3Vkb19zdHJ0b2lkX3YxKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc2VwLAorIGNoYXIgKiplbmRwLCBjb25zdCBjaGFyICoqZXJyc3RyKTsKKyAgICAgICAgICAgICAgIF4KKwkgICAgICAgbWFrZVsxXTogKioqIFtwcmVzZXJ2ZV9mZHMub10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGluY2x1ZGUvc3Vkb191dGlsLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdWRvX3V0aWwuaCBiL2luY2x1ZGUvc3Vkb191dGlsLmgKK2luZGV4IDg5YzlmODkuLmFjMDg1NWEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3N1ZG9fdXRpbC5oCisrKysgYi9pbmNsdWRlL3N1ZG9fdXRpbC5oCitAQCAtMTcsNiArMTcsOCBAQAorICNpZm5kZWYgU1VET19VVElMX0gKKyAjZGVmaW5lIFNVRE9fVVRJTF9ICisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworICNpZmRlZiBIQVZFX1NUREJPT0xfSAorICMgaW5jbHVkZSA8c3RkYm9vbC5oPgorICNlbHNlCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLzAwMDEtVXNlLWNvcnJlY3QtcGF0aC10by1pbml0LmQtYW5kLXRtcGZpbGVzLmQtZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQxODY4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1RoZSBtYWtlZmlsZSB1c2VzIHRvcF9zcmNkaXIgdG8gZmluZCBmaWxlcyB0aGF0IHdlcmUgY3JlYXRlZCBieSBjb25maWd1cmUsIHdoZW4KK2l0IHNob3VsZCB1c2UgdG9wX2J1aWxkZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cDovL2J1Z3ppbGxhLnN1ZG8ud3Mvc2hvd19idWcuY2dpP2lkPTcwOCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLQorIHNyYy9NYWtlZmlsZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuaW4gYi9zcmMvTWFrZWZpbGUuaW4KK2luZGV4IGYwMDllMTAuLjdhY2ZiMmQgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuaW4KKysrKyBiL3NyYy9NYWtlZmlsZS5pbgorQEAgLTE2NSwxMSArMTY1LDExIEBAIGluc3RhbGwtZGlyczoKKyAKKyBpbnN0YWxsLXJjOiBpbnN0YWxsLWRpcnMKKyAJaWYgWyAtbiAiJChJTklUX1NDUklQVCkiIF07IHRoZW4gXAorLQkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA3NTUgJCh0b3Bfc3JjZGlyKS9pbml0LmQvJChJTklUX1NDUklQVCkgJChERVNURElSKSQoSU5JVF9ESVIpL3N1ZG87IFwKKysJICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNzU1ICQodG9wX2J1aWxkZGlyKS9pbml0LmQvJChJTklUX1NDUklQVCkgJChERVNURElSKSQoSU5JVF9ESVIpL3N1ZG87IFwKKyAJICAgIHJtIC1mICQoREVTVERJUikkKFJDX0xJTkspOyBcCisgCSAgICBsbiAtcyAkKElOSVRfRElSKS9zdWRvICQoREVTVERJUikkKFJDX0xJTkspOyBcCisgCWVsaWYgdGVzdCAtbiAiJCh0bXBmaWxlc19kKSI7IHRoZW4gXAorLQkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA2NDQgJCh0b3Bfc3JjZGlyKS9pbml0LmQvc3Vkby5jb25mICQoREVTVERJUikkKHRtcGZpbGVzX2QpL3N1ZG8uY29uZjsgXAorKwkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA2NDQgJCh0b3BfYnVpbGRkaXIpL2luaXQuZC9zdWRvLmNvbmYgJChERVNURElSKSQodG1wZmlsZXNfZCkvc3Vkby5jb25mOyBcCisgCWZpCisgCisgaW5zdGFsbC1iaW5hcmllczogaW5zdGFsbC1kaXJzICQoUFJPR1MpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTRwMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTRwMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjNjZDZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNHAzLmJiCkBAIC0wLDAgKzEsMzYgQEAKK3JlcXVpcmUgc3Vkby5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLnN1ZG8ud3Mvc3Vkby9kaXN0L3N1ZG8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLWNvcnJlY3QtcGF0aC10by1pbml0LmQtYW5kLXRtcGZpbGVzLmQtZmlsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zdWRvLnBhbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzZGJkMWU0N2MxMzYxNzlmZjFiMDE0OTRjMWMwZTc1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE4YTY5N2NiYjExMzg1OTA1ODk0NDg1MGQwOTg0NjQ2MTgyNTQ4MDRjZjk3OTYxZGVlOTI2NDI5ZjAwYTEyMzciCisKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWxpbWl0cyBwYW0tcGx1Z2luLWtleWluaXQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgICAgICAgICAgYWNfY3ZfdHlwZV9yc2l6ZV90PW5vIFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS10bXBmaWxlcy5kPSR7bGliZGlyfS90bXBmaWxlcy5kJywgJy0tZGlzYWJsZS10bXBmaWxlcy5kJywgZCl9IFwKKyAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NjQgJHtXT1JLRElSfS9zdWRvLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc3VkbworCWZpCisKKwljaG1vZCA0MTExICR7RH0ke2JpbmRpcn0vc3VkbworCWNobW9kIDA0NDAgJHtEfSR7c3lzY29uZmRpcn0vc3Vkb2VycworCisJIyBFeHBsaWNpdGx5IHJlbW92ZSB0aGUgJHtsb2NhbHN0YXRlZGlyfS9ydW4gZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9yCisJcm1kaXIgLXAgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3N1ZG8KK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90bXBmaWxlcy5kIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tc3RyaXAtaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmYmE3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogc3lza2xvZ2QtMS41L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lza2xvZ2QtMS41Lm9yaWcvTWFrZWZpbGUJMjAwOS0wNi0wOSAxMzowMjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzeXNrbG9nZC0xLjUvTWFrZWZpbGUJMjAwOS0wNi0wOSAxMzowMzowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjcsOCArMTI3LDggQEAKKyAJcm0gLWYgc3lzbG9nZCBrbG9nZCBrc3ltIHN5c2xvZ190c3Qgb29wc190ZXN0IFRBR1MgdHN5c2xvZ2QgdGtsb2dkCisgCisgaW5zdGFsbF9leGVjOiBzeXNsb2dkIGtsb2dkCistCSR7SU5TVEFMTH0gLW0gNTAwIC1zIHN5c2xvZ2QgJHtCSU5ESVJ9L3N5c2xvZ2QKKy0JJHtJTlNUQUxMfSAtbSA1MDAgLXMga2xvZ2QgJHtCSU5ESVJ9L2tsb2dkCisrCSR7SU5TVEFMTH0gLW0gNTAwIHN5c2xvZ2QgJHtCSU5ESVJ9L3N5c2xvZ2QKKysJJHtJTlNUQUxMfSAtbSA1MDAga2xvZ2QgJHtCSU5ESVJ9L2tsb2dkCisgCisgaW5zdGFsbF9tYW46CisgCSR7SU5TVEFMTH0gLW0gJHtNQU5fUEVSTVN9IHN5c2tsb2dkLjggJHtNQU5ESVJ9L21hbjgvc3lza2xvZ2QuOApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tdmVjdG9yaXphdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjYzA0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1RoZSBjb21waWxlciBzaG91bGQgbm90IGJlIGdlbmVyYXRpbmcgdmVjdG9yaXplZCBpbnN0cnVjdGlvbnMgb24gdGhpcyB0YXJnZXQuCitUaGlzIGlzIGEgd29yayBhcm91bmQgdW50aWwgSSBjYW4gZGV0ZXJtaW5lIHdoeSB0aGlzIGlzIG9jY3VyaW5nIG9uIHRoaXMKK3BhcnRpY3VsYXIgcmVjaXBlCisKK0luZGV4OiBzeXNrbG9nZC0xLjUvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNrbG9nZC0xLjUub3JpZy9NYWtlZmlsZQorKysrIHN5c2tsb2dkLTEuNS9NYWtlZmlsZQorQEAgLTIwLDcgKzIwLDggQEAKKyBDQz0gZ2NjCisgI1NLRkxBR1M9IC1nIC1EU1lTViAtV2FsbAorICNMREZMQUdTPSAtZworLVNLRkxBR1M9ICQoUlBNX09QVF9GTEFHUykgLU8zIC1EU1lTViAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtZm5vLXN0cmVuZ3RoLXJlZHVjZQorK1NLRkxBR1M9ICQoUlBNX09QVF9GTEFHUykgLU8zIC1EU1lTViAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtZm5vLXN0cmVuZ3RoLXJlZHVjZSBcCisrCS1mbm8tdHJlZS12ZWN0b3JpemUKKyAjIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfTEFSR0VGSUxFX1NPVVJDRQorICMgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyAjICQoc2hlbGwgZ2V0Y29uZiBMRlNfU0tGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lza2xvZ2QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU4Zjg4MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkCkBAIC0wLDAgKzEsMTUxIEBACisjISAvYmluL3NoCisjIC9ldGMvaW5pdC5kL3N5c2tsb2dkOiBzdGFydCB0aGUgc3lzdGVtIGxvZyBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHN5c2tsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFNob3VsZC1TdGFydDogICAgICAgICAkbmV0d29yaworIyBTaG91bGQtU3RvcDogICAgICAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiAgICBTeXN0ZW0gbG9nZ2VyCisjIyMgRU5EIElOSVQgSU5GTworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbgorCitwaWRmaWxlX3N5c2xvZ2Q9L3Zhci9ydW4vc3lzbG9nZC5waWQKK3BpZGZpbGVfa2xvZ2Q9L3Zhci9ydW4va2xvZ2QucGlkCitiaW5wYXRoX3N5c2xvZ2Q9L3NiaW4vc3lzbG9nZAorYmlucGF0aF9rbG9nZD0vc2Jpbi9rbG9nZAorCit0ZXN0IC14ICRiaW5wYXRoIHx8IGV4aXQgMAorCit0ZXN0ICEgLXIgL2V0Yy9kZWZhdWx0L3N5c2xvZ2QgfHwgLiAvZXRjL2RlZmF1bHQvc3lzbG9nZAorCitjcmVhdGVfeGNvbnNvbGUoKQoreworICAgICMgT25seSBwcm9jZWVkIGlmIC9kZXYveGNvbnNvbGUgaXMgdXNlZCBhdCBhbGwKKyAgICBpZiAhIGdyZXAgLXEgJ15bXiNdLiovZGV2L3hjb25zb2xlJyAvZXRjL3N5c2xvZy5jb25mCisgICAgdGhlbgorCXJldHVybgorICAgIGZpCisKKyAgICBpZiBbICEgLWUgL2Rldi94Y29uc29sZSBdOyB0aGVuCisJbWtub2QgLW0gNjQwIC9kZXYveGNvbnNvbGUgcAorICAgIGVsc2UKKwljaG1vZCAwNjQwIC9kZXYveGNvbnNvbGUKKyAgICBmaQorICAgIGNob3duIHJvb3Q6YWRtIC9kZXYveGNvbnNvbGUKKyAgICB0ZXN0ICEgLXggL3NiaW4vcmVzdG9yZWNvbiB8fCAvc2Jpbi9yZXN0b3JlY29uIC9kZXYveGNvbnNvbGUKK30KKworbG9nX2JlZ2luX21zZyAoKSB7CisgICAgZWNobyAtbiAkMQorfQorCitsb2dfZW5kX21zZyAoKSB7CisgICAgZWNobyAkMQorfQorCitsb2dfc3VjY2Vzc19tc2cgKCkgeworICAgIGVjaG8gJDEKK30KKworcnVubmluZygpCit7CisgICAgIyBObyBwaWRmaWxlLCBwcm9iYWJseSBubyBkYWVtb24gcHJlc2VudAorICAgICMKKyAgICBpZiBbICEgLWYgJHBpZGZpbGUgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICBwaWQ9YGNhdCAkcGlkZmlsZV9zeXNsb2dkYAorCisgICAgIyBObyBwaWQsIHByb2JhYmx5IG5vIGRhZW1vbiBwcmVzZW50CisgICAgIworICAgIGlmIFsgLXogIiRwaWQiIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgaWYgWyAhIC1kIC9wcm9jLyRwaWQgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICBjbWQ9YGNhdCAvcHJvYy8kcGlkL2NtZGxpbmUgfCB0ciAiXDAwMCIgIlxuInxoZWFkIC1uIDFgCisKKyAgICAjIE5vIHN5c2xvZ2Q/CisgICAgIworICAgIGlmIFsgIiRjbWQiICE9ICIkYmlucGF0aCIgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICByZXR1cm4gMAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgbG9nX2JlZ2luX21zZyAiU3RhcnRpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgY3JlYXRlX3hjb25zb2xlCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9zeXNsb2dkIC0tICRTWVNMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJTdGFydGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkIC0tbmFtZSBrbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfa2xvZ2QgLS0gJEtMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICBzdG9wKQorICAgIGxvZ19iZWdpbl9tc2cgIlN0b3BwaW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkCisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJTdG9wcGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMgLS1leGVjICRiaW5wYXRoX2tsb2dkIC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKyAgICBsb2dfYmVnaW5fbXNnICJSZWxvYWRpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMyAtLWV4ZWMgJGJpbnBhdGhfa2xvZ2QgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICBsb2dfYmVnaW5fbXNnICJSZXN0YXJ0aW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXJldHJ5IDUgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfc3lzbG9nZCAtLSAkU1lTTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMyAtLWV4ZWMgJGJpbnBhdGhfa2xvZ2QgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVsb2FkLW9yLXJlc3RhcnQpCisgICAgaWYgcnVubmluZworICAgIHRoZW4KKwkkMCByZWxvYWQKKyAgICBlbHNlCisJJDAgc3RhcnQKKyAgICBmaQorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgc3lzbG9nZAorICAgIFJFVFZBTD0kPworICAgIHN0YXR1cyBrbG9nZAorICAgIHJ2YWw9JD8KKyAgICBbICRSRVRWQUwgLWVxIDAgXSAmJiBleGl0ICRydmFsCisgICAgZXhpdCAkUkVUVkFMCisgICAgOzsKKyAgKikKKyAgICBsb2dfc3VjY2Vzc19tc2cgIlVzYWdlOiAvZXRjL2luaXQuZC9zeXNrbG9nZCB7c3RhcnR8c3RvcHxyZWxvYWR8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkLW9yLXJlc3RhcnR8c3RhdHVzfSIKKyAgICBleGl0IDEKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2xvZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDlkZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZgpAQCAtMCwwICsxLDcxIEBACisjICAvZXRjL3N5c2xvZy5jb25mCUNvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc3lzbG9nZC4KKyMKKyMgIFBvcnRlZCBmcm9tIGRlYmlhbiBieSBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorIworCisjCisjIEZpcnN0IHNvbWUgc3RhbmRhcmQgbG9nZmlsZXMuICBMb2cgYnkgZmFjaWxpdHkuCisjCisKK2F1dGgsYXV0aHByaXYuKgkJCS92YXIvbG9nL2F1dGgubG9nCisqLio7YXV0aCxhdXRocHJpdi5ub25lCQktL3Zhci9sb2cvc3lzbG9nCisjY3Jvbi4qCQkJCS92YXIvbG9nL2Nyb24ubG9nCitkYWVtb24uKgkJCS0vdmFyL2xvZy9kYWVtb24ubG9nCitrZXJuLioJCQkJLS92YXIvbG9nL2tlcm4ubG9nCitscHIuKgkJCQktL3Zhci9sb2cvbHByLmxvZworbWFpbC4qCQkJCS0vdmFyL2xvZy9tYWlsLmxvZwordXNlci4qCQkJCS0vdmFyL2xvZy91c2VyLmxvZworCisjCisjIExvZ2dpbmcgZm9yIHRoZSBtYWlsIHN5c3RlbS4gIFNwbGl0IGl0IHVwIHNvIHRoYXQKKyMgaXQgaXMgZWFzeSB0byB3cml0ZSBzY3JpcHRzIHRvIHBhcnNlIHRoZXNlIGZpbGVzLgorIworbWFpbC5pbmZvCQkJLS92YXIvbG9nL21haWwuaW5mbworbWFpbC53YXJuCQkJLS92YXIvbG9nL21haWwud2FybgorbWFpbC5lcnIJCQkvdmFyL2xvZy9tYWlsLmVycgorCisjIExvZ2dpbmcgZm9yIElOTiBuZXdzIHN5c3RlbQorIworbmV3cy5jcml0CQkJL3Zhci9sb2cvbmV3cy5jcml0CituZXdzLmVycgkJCS92YXIvbG9nL25ld3MuZXJyCituZXdzLm5vdGljZQkJCS0vdmFyL2xvZy9uZXdzLm5vdGljZQorCisjCisjIFNvbWUgYGNhdGNoLWFsbCcgbG9nZmlsZXMuCisjCisqLj1kZWJ1ZztcCithdXRoLGF1dGhwcml2Lm5vbmU7XAorbmV3cy5ub25lO21haWwubm9uZQktL3Zhci9sb2cvZGVidWcKKworKi49aW5mbzsqLj1ub3RpY2U7Ki49d2FybjtcCithdXRoLGF1dGhwcml2Lm5vbmU7XAorY3JvbixkYWVtb24ubm9uZTtcCittYWlsLG5ld3Mubm9uZQkJLS92YXIvbG9nL21lc3NhZ2VzCisKKyMKKyMgRW1lcmdlbmNpZXMgYXJlIHNlbnQgdG8gZXZlcnlib2R5IGxvZ2dlZCBpbi4KKyMKKyouZW1lcmcJCQkJKgorCisjCisjIEkgbGlrZSB0byBoYXZlIG1lc3NhZ2VzIGRpc3BsYXllZCBvbiB0aGUgY29uc29sZSwgYnV0IG9ubHkgb24gYSB2aXJ0dWFsCisjIGNvbnNvbGUgSSB1c3VhbGx5IGxlYXZlIGlkbGUuCisjCisjZGFlbW9uLG1haWwuKjtcCisjbmV3cy49Y3JpdDtuZXdzLj1lcnI7bmV3cy49bm90aWNlO1wKKyMqLj1kZWJ1ZzsqLj1pbmZvO1wKKyMqLj1ub3RpY2U7Ki49d2FybgkvZGV2L3R0eTgKKworIyBUaGUgbmFtZWQgcGlwZSAvZGV2L3hjb25zb2xlIGlzIGZvciB0aGUgYHhjb25zb2xlJyB1dGlsaXR5LiAgVG8gdXNlIGl0LAorIyB5b3UgbXVzdCBpbnZva2UgYHhjb25zb2xlJyB3aXRoIHRoZSBgLWZpbGUnIG9wdGlvbjoKKyMKKyMgICAgJCB4Y29uc29sZSAtZmlsZSAvZGV2L3hjb25zb2xlIFsuLi5dCisjCisjIE5PVEU6IGFkanVzdCB0aGUgbGlzdCBiZWxvdywgb3IgeW91J2xsIGdvIGNyYXp5IGlmIHlvdSBoYXZlIGEgcmVhc29uYWJseQorIyAgICAgIGJ1c3kgc2l0ZS4uCisjCitkYWVtb24uKjttYWlsLio7XAorbmV3cy5lcnI7XAorKi49ZGVidWc7Ki49aW5mbztcCisqLj1ub3RpY2U7Ki49d2Fybgl8L2Rldi94Y29uc29sZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmOGFhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYwpAQCAtMCwwICsxLDU4IEBACitTVU1NQVJZID0gIlN5c3RlbSBMb2cgRGFlbW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoZSBzeXNrbG9nZCBwYWNrYWdlIGltcGxlbWVudHMgdHdvIHN5c3RlbSBsb2cgZGFlbW9uczogc3lzbG9nZCwga2xvZ2QiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZm9kcm9tLm9yZy9wcm9qZWN0cy9zeXNrbG9nZC8iCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgQlNEIgorTElDRU5TRV9zeXNsb2dkID0gIkJTRCIKK0xJQ0VOU0Vfa2xvZ2QgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3lzbG9nZC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTU7bWQ1PTc3ZmZiMmZlYzQ4YzQ2ZDdjYTBhYmIyZDU4MTNlN2ZkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tsb2dkLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xOTttZDU9N2U4N2VkMGFlNjE0MmRlMDc5YmNlNzM4YzEwYzg5OWQgXAorICAgICAgICAgICAgICAgICAgICIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pbmZvZHJvbS5vcmcvcHJvamVjdHMvc3lza2xvZ2QvZG93bmxvYWQvc3lza2xvZ2QtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLXN0cmlwLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lza2xvZ2QgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2U1MDB2MiA9ICIgZmlsZTovL25vLXZlY3Rvcml6YXRpb24ucGF0Y2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJzeXNsb2ciCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZi4ke0JQTn0iCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EU1lTViIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggXAorCQkJJHtEfSR7bWFuZGlyfS9tYW41IFwKKwkJCSR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlvZV9ydW5tYWtlICdCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfScgXAorCQkJJ01BTkRJUj0ke0R9JHttYW5kaXJ9JyBpbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vc3lza2xvZ2QgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZworfQorCisjIHN5c2tsb2dkIHBhY2thZ2UgaGFzIG5vIGludGVybmFsIHN5c3RlbWQgc3VwcG9ydCwgc28gd2Ugd2VpZ2ggYnVzeWJveCdzCisjIHN5c2tsb2dkIHV0aWxpdHkgb3ZlciBpdCBpbiBjYXNlIG9mIHN5c3RlbWQKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnMTAnLCcxMDAnLGQpfSIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic3lzbG9nZCBrbG9nZCBzeXNsb2ctaW5pdCBzeXNsb2ctY29uZiIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZ2RdID0gIiR7YmFzZV9zYmluZGlyfS9zeXNsb2dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tsb2dkXSA9ICIke2Jhc2Vfc2JpbmRpcn0va2xvZ2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWluaXRdID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2ctY29uZl0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZiIKKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlpZiB0ZXN0ICJ4JEQiID0gIngiOyB0aGVuCisJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgorCQkvZXRjL2luaXQuZC9zeXNsb2cgc3RvcAorCWZpCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2RfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc1ZWNjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBzeXNrbG9nZC5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImM3MDU5OWFiMGQwMzdmZGU3MjRmNzIxMGMyYzhkN2Y4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNjZjMTg1YWUyM2M5MmU4YjlmZWVlNjZhNmUzZDBiYzk0NGJmNjczMTEyZjUzZTNlY2Y2MmUwOGNlN2MyMDEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzc2MWZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYwpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIlN5c3RlbSBwZXJmb3JtYW5jZSB0b29scyIKK0RFU0NSSVBUSU9OID0gIlRoZSBzeXNzdGF0IHV0aWxpdGllcyBhcmUgYSBjb2xsZWN0aW9uIG9mIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdG9vbHMgZm9yIExpbnV4LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWJhc3RpZW4uZ29kYXJkLnBhZ2VzcGVyc28tb3JhbmdlLmZyLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitTUkNfVVJJID0gImh0dHA6Ly9wYWdlc3BlcnNvLW9yYW5nZS5mci9zZWJhc3RpZW4uZ29kYXJkL3N5c3N0YXQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzk5X3N5c3N0YXQgXAorICAgICAgICAgICBmaWxlOi8vc3lzc3RhdC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgKz0gImJhc2UtcGFzc3dkIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCBzeXN0ZW1kCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNlbnNvcnMiCitFWFRSQV9PRU1BS0UgKz0gJ0xGTEFHUz0iIicKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJzeXNzdGF0LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImVuYWJsZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgZXhwb3J0IHNhX2xpYl9kaXI9JHtsaWJkaXJ9L3NhCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL2xvZy9zYSB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisKKwlybSAtcmYgJHtEfS92YXIKKwlpbnN0YWxsIC1kICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfc3lzc3RhdCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c3N0YXQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyNATElCRElSQCMke2xpYmRpcn0jZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzc3RhdC5zZXJ2aWNlCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWUgL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorICAgICAgICAgICAgICAgIC9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorICAgICAgICBmaQorfQorCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vc2EiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9zYS8uZGVidWcvIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbGludGwiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC85OV9zeXNzdGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMGVjMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdApAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9nL3NhIG5vbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC9zeXNzdGF0LnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjA3MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249UmVzZXRzIFN5c3RlbSBBY3Rpdml0eSBMb2dzCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCitVc2VyPXJvb3QKK0V4ZWNTdGFydD1ATElCRElSQC9zYS9zYTEgLS1ib290CisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjEuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkMmVjMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHN5c3N0YXQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGQ4ZTZlNzJkMDU3MTg5YTE2NjA0NjJhNjc4ZDlhZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmViM2E5MGQ4NmZmZDY5Y2Y1Yjg4MTQ0YTg4NzZhZTA1YmQ0MjM4NGY1NTk2NzZmMDgxMDA2NzE1ODlmYTJiYiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTJhZTNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWdmaXg6IGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjRdCisKK1RoaXMgcGF0Y2ggYXZvaWRzIGhlYXAgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgOgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNAorCitUaGlzIGlzIGEgY2xlYW4gcGF0Y2ggZm9yIHRoZSBHUEx2MiB0YXIgcmVjaXBlLgorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzI1CisKK0luZGV4OiB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjE3Lm9yaWcvbGliL3J0YXBlbGliLmMKKysrKyB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworQEAgLTU3MCw3ICs1NzAsNyBAQCBybXRfcmVhZF9fIChpbnQgaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpCisgCisgICBzcHJpbnRmIChjb21tYW5kX2J1ZmZlciwgIlIlbHVcbiIsICh1bnNpZ25lZCBsb25nKSBsZW5ndGgpOworICAgaWYgKGRvX2NvbW1hbmQgKGhhbmRsZSwgY29tbWFuZF9idWZmZXIpID09IC0xCistICAgICAgfHwgKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikKKysgICAgICB8fCAoKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikgfHwgKHN0YXR1cyA+IGxlbmd0aCkpCisgICAgIHJldHVybiBTQUZFX1JFQURfRVJST1I7CisgCisgICBmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgc3RhdHVzOyBjb3VudGVyICs9IHJsZW4sIGJ1ZmZlciArPSBybGVuKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvZ2NjNDNidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA1OWEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRml4IGVycm9ycyB3aGVuIGJ1aWx0IHdpdGggZ2NjIDQuMworIyBQYXRjaCB0YWtlbiBmcm9tIERlYmlhbiBidWcgIzQ1MjA5NgorCitkaWZmIC11ck4gdGFyLTEuMTcub3JpZy9saWIvYXJncC1mbXRzdHJlYW0uaCB0YXItMS4xNy9saWIvYXJncC1mbXRzdHJlYW0uaAorLS0tIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AtZm10c3RyZWFtLmgJMjAwNi0wMS0xMSAxMjoyNDowNS4wMDAwMDAwMDAgLTA4MDAKKysrKyB0YXItMS4xNy9saWIvYXJncC1mbXRzdHJlYW0uaAkyMDEwLTA3LTIyIDIyOjM2OjEyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTE5OCw3ICsxOTgsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIEFSR1BfRlNfRUkKKy0jZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZQorKyAjaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworKyAgICNkZWZpbmUgQVJHUF9GU19FSSBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fKSkKKysgI2Vsc2UKKysgICAjZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZQorKyAjZW5kaWYKKyAjZW5kaWYKKyAKKyBBUkdQX0ZTX0VJIHNpemVfdAorZGlmZiAtdXJOIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AuaCB0YXItMS4xNy9saWIvYXJncC5oCistLS0gdGFyLTEuMTcub3JpZy9saWIvYXJncC5oCTIwMDctMDMtMzAgMDA6MDk6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgdGFyLTEuMTcvbGliL2FyZ3AuaAkyMDEwLTA3LTIyIDIyOjM4OjQ0LjAwMDAwMDAwMCAtMDcwMAorQEAgLTU4MCw3ICs1ODAsMTEgQEAKKyAjIGVuZGlmCisgCisgIyBpZm5kZWYgQVJHUF9FSQorLSMgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fCisrIyAgaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworKyMgICAgZGVmaW5lIEFSR1BfRUkgZXh0ZXJuIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18pKQorKyMgIGVsc2UKKysjICAgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fCisrIyAgZW5kaWYKKyAjIGVuZGlmCisgCisgQVJHUF9FSSB2b2lkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvbTRleHRlbnNpb25zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDUzNGMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBEZWZpbmUgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIG9ubHkgaWYgaXQgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkLgorIyBUaGlzIGlzIG5lZWRlZCB0byBjb25maWd1cmUgY29ycmVjdGx5IHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYuCisKKy0tLSB0YXItMS4xNy9tNC9leHRlbnNpb25zLm00Lm9yaWcJMjAxMC0wNy0yMiAyMjoyMTozNS4wMDAwMDAwMDAgLTA3MDAKKysrKyB0YXItMS4xNy9tNC9leHRlbnNpb25zLm00CTIwMTAtMDctMjIgMjI6MjM6NDEuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA0ICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgNSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC0xNiw2ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisrbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFtdLCBbCisgQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCitAQCAtNDgsNyArNDksNyBAQAorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrXSldKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzOWM0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiR05VIGZpbGUgYXJjaGl2aW5nIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJHTlUgdGFyIHNhdmVzIG1hbnkgZmlsZXMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0YXBlIFwKK29yIGRpc2sgYXJjaGl2ZSwgYW5kIGNhbiByZXN0b3JlIGluZGl2aWR1YWwgZmlsZXMgZnJvbSB0aGUgYXJjaGl2ZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGFyLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3Rhci90YXItJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiArPSAiREVGQVVMVF9STVRfRElSPSR7YmFzZV9zYmluZGlyfSIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSB0YXIgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAorICAgIGxuIC1zIHRhciAke0R9JHtiaW5kaXJ9L2d0YXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgbXYgJHtEfSR7YmluZGlyfS90YXIgJHtEfSR7YmFzZV9iaW5kaXJ9L3RhcgorICAgIG12ICR7RH0ke2JpbmRpcn0vZ3RhciAke0R9JHtiYXNlX2JpbmRpcn0vZ3RhcgorICAgIHJtZGlyICR7RH0ke2JpbmRpcn0vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1ybXQiCisKK0ZJTEVTXyR7UE59LXJtdCA9ICIke2Jhc2Vfc2JpbmRpcn0vcm10KiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidGFyIgorQUxURVJOQVRJVkVfJHtQTn0tcm10ID0gInJtdCIKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitBTFRFUk5BVElWRV8ke1BOfS1ybXRfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW3Rhcl0gPSAiJHtiYXNlX2JpbmRpcn0vdGFyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JtdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGFyLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci9yZW1vdmUtZ2V0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4YmUzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorSVNPIEMxMSByZW1vdmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGdldHMoKSBmcm9tIHRoZSBDIGxhbmd1YWdlLCBlZ2xpYmMgMi4xNisgcmVtb3ZlZCBpdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiB0YXItMS4yNy9nbnUvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjI3Lm9yaWcvZ251L3N0ZGlvLmluLmgJMjAxMy0wNi0yOSAwODo1NDoyNi4wMDAwMDAwMDAgKzAzMDAKKysrKyB0YXItMS4yNy9nbnUvc3RkaW8uaW4uaAkyMDEzLTEwLTE2IDE1OjIyOjQ2Ljk3NzIwNDczNyArMDMwMAorQEAgLTcxMCwxMCArNzEwLDEyIEBACisgLyogSXQgaXMgdmVyeSByYXJlIHRoYXQgdGhlIGRldmVsb3BlciBldmVyIGhhcyBmdWxsIGNvbnRyb2wgb2Ygc3RkaW4sCisgICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZzsgYmVzaWRlcywgQzExCisgICAgcmVtb3ZlZCBpdC4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUUworIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAKKyAjaWYgQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAgfHwgQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNhMjA2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjE3LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgdGFyLmluYworCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1BSID0gInIzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbTRleHRlbnNpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vZ2NjNDNidWlsZC5wYXRjaCBcCisgICAgZmlsZTovL2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggXAorICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM2YzRmMWMwNzVkYmYwZjc1YzI5NzM3ZmFhNThmMjkwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE5ZjkwMjFkZGE1MWExNjI5NWU0NzA2ZTgwODcwZTcxZjg3MTA3Njc1ZTUxYzE3NmE0OTFlYmEwZmM0Y2E0OTIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxNjAwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHRhci5pbmMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLXdpdGgtcG9zaXgtYWNscywgLS13aXRob3V0LXBvc2l4LWFjbHMsIGFjbCwiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSArPSAiZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjhmMzJiMmJjMWVkN2RkZjRjZjRlNGEzOTcxMTM0MWIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwZTRiZmUwNjAyZmVmMzRjZDkwOGQ5MWNmNjM4ZTE3ZWViMDkzOTRkN2I5OGMyNDg3MjE3ZGM0ZDMxNDc1NjIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMF9tYW5fcXVvdGluZy5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ2NzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZgpAQCAtMCwwICsxLDc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkxOTk1LTAxLTMwIDE5OjUxOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0wOSAxNjo1OTo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzMsNyArMTczLDcgQEAKKyBQYXR0ZXJucyBsaWtlIHRoZXNlIGNhbiBiZSB1c2VkIHdoZW4gdGhlIG1hY2hpbmUgaGFzIGRpZmZlcmVudCBpbnRlcm5ldAorIGFkZHJlc3NlcyB3aXRoIGRpZmZlcmVudCBpbnRlcm5ldCBob3N0bmFtZXMuICBTZXJ2aWNlIHByb3ZpZGVycyBjYW4gdXNlCisgdGhpcyBmYWNpbGl0eSB0byBvZmZlciBGVFAsIEdPUEhFUiBvciBXV1cgYXJjaGl2ZXMgd2l0aCBpbnRlcm5ldCBuYW1lcworLXRoYXQgbWF5IGV2ZW4gYmVsb25nIHRvIGRpZmZlcmVudCBvcmdhbml6YXRpb25zLiBTZWUgYWxzbyB0aGUgYHR3aXN0JworK3RoYXQgbWF5IGV2ZW4gYmVsb25nIHRvIGRpZmZlcmVudCBvcmdhbml6YXRpb25zLiBTZWUgYWxzbyB0aGUgYHR3aXN0XCcKKyBvcHRpb24gaW4gdGhlIGhvc3RzX29wdGlvbnMoNSkgZG9jdW1lbnQuIFNvbWUgc3lzdGVtcyAoU29sYXJpcywKKyBGcmVlQlNEKSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGludGVybmV0IGFkZHJlc3Mgb24gb25lIHBoeXNpY2FsCisgaW50ZXJmYWNlOyB3aXRoIG90aGVyIHN5c3RlbXMgeW91IG1heSBoYXZlIHRvIHJlc29ydCB0byBTTElQIG9yIFBQUAorQEAgLTIzNiwxMCArMjM2LDEwIEBACisgQmVmb3JlIGFjY2VwdGluZyBhIGNsaWVudCByZXF1ZXN0LCB0aGUgd3JhcHBlcnMgY2FuIHVzZSB0aGUgSURFTlQKKyBzZXJ2aWNlIHRvIGZpbmQgb3V0IHRoYXQgdGhlIGNsaWVudCBkaWQgbm90IHNlbmQgdGhlIHJlcXVlc3QgYXQgYWxsLgorIFdoZW4gdGhlIGNsaWVudCBob3N0IHByb3ZpZGVzIElERU5UIHNlcnZpY2UsIGEgbmVnYXRpdmUgSURFTlQgbG9va3VwCistcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYFVOS05PV05AaG9zdCcpIGlzIHN0cm9uZyBldmlkZW5jZSBvZiBhIGhvc3QKKytyZXN1bHQgKHRoZSBjbGllbnQgbWF0Y2hlcyBgVU5LTk9XTkBob3N0XCcpIGlzIHN0cm9uZyBldmlkZW5jZSBvZiBhIGhvc3QKKyBzcG9vZmluZyBhdHRhY2suCisgLlBQCistQSBwb3NpdGl2ZSBJREVOVCBsb29rdXAgcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYEtOT1dOQGhvc3QnKSBpcworK0EgcG9zaXRpdmUgSURFTlQgbG9va3VwIHJlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBLTk9XTkBob3N0XCcpIGlzCisgbGVzcyB0cnVzdHdvcnRoeS4gSXQgaXMgcG9zc2libGUgZm9yIGFuIGludHJ1ZGVyIHRvIHNwb29mIGJvdGggdGhlCisgY2xpZW50IGNvbm5lY3Rpb24gYW5kIHRoZSBJREVOVCBsb29rdXAsIGFsdGhvdWdoIGRvaW5nIHNvIGlzIG11Y2gKKyBoYXJkZXIgdGhhbiBzcG9vZmluZyBqdXN0IGEgY2xpZW50IGNvbm5lY3Rpb24uIEl0IG1heSBhbHNvIGJlIHRoYXQKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfb3B0aW9ucy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNQkxOTk0LTEyLTI4IDE3OjQyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CTIwMDQtMDQtMDkgMTY6NTk6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMTI0LDcgKzEyNCw3IEBACisgdmFsdWUgaXMgdGFrZW4uCisgLlNIIE1JU0NFTExBTkVPVVMKKyAuSVAgImJhbm5lcnMgL3NvbWUvZGlyZWN0b3J5IgorLUxvb2sgZm9yIGEgZmlsZSBpbiBgL3NvbWUvZGlyZWN0b3J5JyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGRhZW1vbgorK0xvb2sgZm9yIGEgZmlsZSBpbiBgL3NvbWUvZGlyZWN0b3J5XCcgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYWVtb24KKyBwcm9jZXNzIChmb3IgZXhhbXBsZSBpbi50ZWxuZXRkIGZvciB0aGUgdGVsbmV0IHNlcnZpY2UpLCBhbmQgY29weSBpdHMKKyBjb250ZW50cyB0byB0aGUgY2xpZW50LiBOZXdsaW5lIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5CisgY2FycmlhZ2UtcmV0dXJuIG5ld2xpbmUsIGFuZCAlPGxldHRlcj4gc2VxdWVuY2VzIGFyZSBleHBhbmRlZCAoc2VlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44IHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLjgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLjgJMTk5Ni0wMi0xMSAxNzowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CTIwMDQtMDQtMDkgMTc6MDA6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMjYsNyArMjYsNyBAQAorIEEgZGFlbW9uIHByb2Nlc3MgbmFtZS4gVHlwaWNhbGx5LCB0aGUgbGFzdCBjb21wb25lbnQgb2YgYSBkYWVtb24KKyBleGVjdXRhYmxlIHBhdGhuYW1lLgorIC5JUCBjbGllbnQKKy1BIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd24nIG9yIGBwYXJhbm9pZCcKKytBIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd25cJyBvciBgcGFyYW5vaWRcJworIHdpbGRjYXJkIHBhdHRlcm5zLgorIC5zcAorIFdoZW4gYSBjbGllbnQgaG9zdCBuYW1lIGlzIHNwZWNpZmllZCwgXGZJdGNwZG1hdGNoXGZSIGdpdmVzIGEKK0BAIC0zNywxMyArMzcsMTMgQEAKKyAuUFAKKyBPcHRpb25hbCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgd2l0aCB0aGUgXGZJZGFlbW9uQHNlcnZlclxmUiBmb3JtOgorIC5JUCBzZXJ2ZXIKKy1BIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd24nIG9yIGBwYXJhbm9pZCcKKy13aWxkY2FyZCBwYXR0ZXJucy4gVGhlIGRlZmF1bHQgc2VydmVyIG5hbWUgaXMgYHVua25vd24nLgorK0EgaG9zdCBuYW1lIG9yIG5ldHdvcmsgYWRkcmVzcywgb3Igb25lIG9mIHRoZSBgdW5rbm93blwnIG9yIGBwYXJhbm9pZFwnCisrd2lsZGNhcmQgcGF0dGVybnMuIFRoZSBkZWZhdWx0IHNlcnZlciBuYW1lIGlzIGB1bmtub3duXCcuCisgLlBQCisgT3B0aW9uYWwgaW5mb3JtYXRpb24gc3BlY2lmaWVkIHdpdGggdGhlIFxmSXVzZXJAY2xpZW50XGZSIGZvcm06CisgLklQIHVzZXIKKyBBIGNsaWVudCB1c2VyIGlkZW50aWZpZXIuIFR5cGljYWxseSwgYSBsb2dpbiBuYW1lIG9yIGEgbnVtZXJpYyB1c2VyaWQuCistVGhlIGRlZmF1bHQgdXNlciBuYW1lIGlzIGB1bmtub3duJy4KKytUaGUgZGVmYXVsdCB1c2VyIG5hbWUgaXMgYHVua25vd25cJy4KKyAuU0ggT1BUSU9OUworIC5JUCAtZAorIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmRlbnlcZlIgZmlsZXMgaW4gdGhlIGN1cnJlbnQKK0BAIC03MCw3ICs3MCw3IEBACisgLnRpICs1CisgdGNwZG1hdGNoIGluLnRlbG5ldGQgcGFyYW5vaWQKKyAuUFAKKy1PbiBzb21lIHN5c3RlbXMsIGRhZW1vbiBuYW1lcyBoYXZlIG5vIGBpbi4nIHByZWZpeCwgb3IgXGZJdGNwZG1hdGNoXGZSCisrT24gc29tZSBzeXN0ZW1zLCBkYWVtb24gbmFtZXMgaGF2ZSBubyBgaW4uXCcgcHJlZml4LCBvciBcZkl0Y3BkbWF0Y2hcZlIKKyBtYXkgbmVlZCBzb21lIGhlbHAgdG8gbG9jYXRlIHRoZSBpbmV0ZCBjb25maWd1cmF0aW9uIGZpbGUuCisgLlNIIEZJTEVTCisgLlBQCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3MzViZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAxX21hbl9wb3J0YWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI1MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zCTIwMDUtMDMtMDkgMTg6MzA6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMwkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTMsNyArMyw3IEBACisgaG9zdHNfYWNjZXNzLCBob3N0c19jdGwsIHJlcXVlc3RfaW5pdCwgcmVxdWVzdF9zZXQgXC0gYWNjZXNzIGNvbnRyb2wgbGlicmFyeQorIC5TSCBTWU5PUFNJUworIC5uZgorLSNpbmNsdWRlICJ0Y3BkLmgiCisrI2luY2x1ZGUgPHRjcGQuaD4KKyAKKyBleHRlcm4gaW50IGFsbG93X3NldmVyaXR5OworIGV4dGVybiBpbnQgZGVueV9zZXZlcml0eTsKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNS0wMy0wOSAxODozMDoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDUtMDMtMDkgMTg6MzA6MTguMDAwMDAwMDAwICswMTAwCitAQCAtOCw5ICs4LDkgQEAgbmFtZSwgaG9zdCBuYW1lL2FkZHJlc3MpIHBhdHRlcm5zLiAgRXhhbQorIGltcGF0aWVudCByZWFkZXIgaXMgZW5jb3VyYWdlZCB0byBza2lwIHRvIHRoZSBFWEFNUExFUyBzZWN0aW9uIGZvciBhCisgcXVpY2sgaW50cm9kdWN0aW9uLgorIC5QUAorLUFuIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGlzIGRlc2NyaWJlZCBpbiB0aGUKKy1cZklob3N0c19vcHRpb25zXGZSKDUpIGRvY3VtZW50LiBUaGUgZXh0ZW5zaW9ucyBhcmUgdHVybmVkIG9uIGF0CistcHJvZ3JhbSBidWlsZCB0aW1lIGJ5IGJ1aWxkaW5nIHdpdGggLURQUk9DRVNTX09QVElPTlMuCisrVGhlIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGlzIGRlc2NyaWJlZCBpbiB0aGUKKytcZklob3N0c19vcHRpb25zXGZSKDUpIGRvY3VtZW50LiBcZkJOb3RlIHRoYXQgdGhpcyBsYW5ndWFnZSBzdXBlcnNlZGVzCisrdGhlIG1lYW5pbmcgb2YgXGZJc2hlbGxfY29tbWFuZFxmQiBhcyBkb2N1bWVudGVkIGJlbG93LlxmUgorIC5QUAorIEluIHRoZSBmb2xsb3dpbmcgdGV4dCwgXGZJZGFlbW9uXGZSIGlzIHRoZSB0aGUgcHJvY2VzcyBuYW1lIG9mIGEKKyBuZXR3b3JrIGRhZW1vbiBwcm9jZXNzLCBhbmQgXGZJY2xpZW50XGZSIGlzIHRoZSBuYW1lIGFuZC9vciBhZGRyZXNzIG9mCitAQCAtMzQ2LDggKzM0Niw4IEBAIGluLnRmdHBkOiBMT0NBTCwgLm15LmRvbWFpbgorIC9ldGMvaG9zdHMuZGVueToKKyAuaW4gKzMKKyAubmYKKy1pbi50ZnRwZDogQUxMOiAoL3NvbWUvd2hlcmUvc2FmZV9maW5nZXIgLWwgQCVoIHwgXFwKKy0JL3Vzci91Y2IvbWFpbCAtcyAlZC0laCByb290KSAmCisraW4udGZ0cGQ6IEFMTDogKC91c3Ivc2Jpbi9zYWZlX2ZpbmdlciAtbCBAJWggfCBcXAorKwkvdXNyL2Jpbi9tYWlsIC1zICVkLSVoIHJvb3QpICYKKyAuZmkKKyAuUFAKKyBUaGUgc2FmZV9maW5nZXIgY29tbWFuZCBjb21lcyB3aXRoIHRoZSB0Y3BkIHdyYXBwZXIgYW5kIHNob3VsZCBiZQorQEAgLTM4Myw2ICszODMsNyBAQCB0aGF0IHNob3VsZG5cJ3QuICBBbGwgcHJvYmxlbXMgYXJlIHJlcG9yCisgLmZpCisgLlNIIFNFRSBBTFNPCisgLm5mCisraG9zdHNfb3B0aW9ucyg1KSBleHRlbmRlZCBzeW50YXguCisgdGNwZCg4KSB0Y3AvaXAgZGFlbW9uIHdyYXBwZXIgcHJvZ3JhbS4KKyB0Y3BkY2hrKDgpLCB0Y3BkbWF0Y2goOCksIHRlc3QgcHJvZ3JhbXMuCisgLlNIIEJVR1MKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUJMjAwNS0wMy0wOSAxODozMDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIsMTAgKzIsOCBAQAorIC5TSCBOQU1FCisgaG9zdHNfb3B0aW9ucyBcLSBob3N0IGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGV4dGVuc2lvbnMKKyAuU0ggREVTQ1JJUFRJT04KKy1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZSBkZXNjcmliZWQKKy1pbiB0aGUgaG9zdHNfYWNjZXNzKDUpIGRvY3VtZW50LiBUaGUgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBhdCBwcm9ncmFtCistYnVpbGQgdGltZS4gRm9yIGV4YW1wbGUsIGJ5IGVkaXRpbmcgdGhlIE1ha2VmaWxlIGFuZCB0dXJuaW5nIG9uIHRoZSAKKy1QUk9DRVNTX09QVElPTlMgY29tcGlsZS10aW1lIG9wdGlvbi4KKytUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZSBkZXNjcmliZWQKKytpbiB0aGUgaG9zdHNfYWNjZXNzKDUpIGRvY3VtZW50LgorIC5QUAorIFRoZSBleHRlbnNpYmxlIGxhbmd1YWdlIHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgLnNwCitAQCAtNTgsMTIgKzU2LDEyIEBAIE5vdGljZSB0aGUgbGVhZGluZyBkb3Qgb24gdGhlIGRvbWFpbiBuYW0KKyBFeGVjdXRlLCBpbiBhIGNoaWxkIHByb2Nlc3MsIHRoZSBzcGVjaWZpZWQgc2hlbGwgY29tbWFuZCwgYWZ0ZXIKKyBwZXJmb3JtaW5nIHRoZSAlPGxldHRlcj4gZXhwYW5zaW9ucyBkZXNjcmliZWQgaW4gdGhlIGhvc3RzX2FjY2Vzcyg1KQorIG1hbnVhbCBwYWdlLiAgVGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgd2l0aCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIKKy1jb25uZWN0ZWQgdG8gdGhlIG51bGwgZGV2aWNlLCBzbyB0aGF0IGl0IHdvblwndCBtZXNzIHVwIHRoZQorK2Nvbm5lY3RlZCB0byB0aGUgbnVsbCBkZXZpY2UsIHNvIHRoYXQgaXQgd29uJ3QgbWVzcyB1cCB0aGUKKyBjb252ZXJzYXRpb24gd2l0aCB0aGUgY2xpZW50IGhvc3QuIEV4YW1wbGU6CisgLnNwCisgLm5mCisgLnRpICszCistc3Bhd24gKC9zb21lL3doZXJlL3NhZmVfZmluZ2VyIC1sIEAlaCB8IC91c3IvdWNiL21haWwgcm9vdCkgJgorK3NwYXduICgvdXNyL3NiaW4vc2FmZV9maW5nZXIgLWwgQCVoIHwgL3Vzci9iaW4vbWFpbCByb290KSAmCisgLmZpCisgLnNwCisgZXhlY3V0ZXMsIGluIGEgYmFja2dyb3VuZCBjaGlsZCBwcm9jZXNzLCB0aGUgc2hlbGwgY29tbWFuZCAic2FmZV9maW5nZXIKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2luZXRjZi5jIHRjcF93cmFwcGVyc183LjYvaW5ldGNmLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaW5ldGNmLmMJMTk5Ny0wMi0xMiAwMjoxMzoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2luZXRjZi5jCTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjYsMTMgKzI2LDE3IEBAIGV4dGVybiB2b2lkIGV4aXQoKTsKKyAgICogZ3Vlc3Nlcy4gU2hvcnRlciBuYW1lcyBmb2xsb3cgbG9uZ2VyIG9uZXMuCisgICAqLworIGNoYXIgICAqaW5ldF9maWxlc1tdID0geworKyNpZiAwCisgICAgICIvcHJpdmF0ZS9ldGMvaW5ldGQuY29uZiIsCQkvKiBORVhUICovCisgICAgICIvZXRjL2luZXQvaW5ldGQuY29uZiIsCQkvKiBTWVNWNCAqLworICAgICAiL3Vzci9ldGMvaW5ldGQuY29uZiIsCQkvKiBJUklYPz8gKi8KKysjZW5kaWYKKyAgICAgIi9ldGMvaW5ldGQuY29uZiIsCQkJLyogQlNEICovCisrI2lmIDAKKyAgICAgIi9ldGMvbmV0L3RsaWQuY29uZiIsCQkvKiBTWVNWND8/ICovCisgICAgICIvZXRjL3NhZi90bGlkLmNvbmYiLAkJLyogU1lTVjQ/PyAqLworICAgICAiL2V0Yy90bGlkLmNvbmYiLAkJCS8qIFNZU1Y0Pz8gKi8KKysjZW5kaWYKKyAgICAgMCwKKyB9OworIAorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC44IHRjcF93cmFwcGVyc183LjYvdGNwZC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuOAkxOTk2LTAyLTIxIDE2OjM5OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC44CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMTIsNyArMTIsMTEgQEAgVGhlIHByb2dyYW0gc3VwcG9ydHMgYm90aCA0LjNCU0Qtc3R5bGUgcworIFRMSS4gIEZ1bmN0aW9uYWxpdHkgbWF5IGJlIGxpbWl0ZWQgd2hlbiB0aGUgcHJvdG9jb2wgdW5kZXJuZWF0aCBUTEkgaXMKKyBub3QgYW4gaW50ZXJuZXQgcHJvdG9jb2wuCisgLlBQCistT3BlcmF0aW9uIGlzIGFzIGZvbGxvd3M6IHdoZW5ldmVyIGEgcmVxdWVzdCBmb3Igc2VydmljZSBhcnJpdmVzLCB0aGUKKytUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIG1vZGVzIG9mIG9wZXJhdGlvbjogZXhlY3V0aW9uIG9mIFxmSXRjcGRcZlAKKytiZWZvcmUgYSBzZXJ2aWNlIHN0YXJ0ZWQgYnkgXGZJaW5ldGRcZlAsIG9yIGxpbmtpbmcgYSBkYWVtb24gd2l0aAorK3RoZSBcZklsaWJ3cmFwXGZQIHNoYXJlZCBsaWJyYXJ5IGFzIGRvY3VtZW50ZWQgaW4gdGhlIFxmSWhvc3RzX2FjY2Vzc1xmUigzKQorK21hbnVhbCBwYWdlLiBPcGVyYXRpb24gd2hlbiBzdGFydGVkIGJ5IFxmSWluZXRkXGZQCisraXMgYXMgZm9sbG93czogd2hlbmV2ZXIgYSByZXF1ZXN0IGZvciBzZXJ2aWNlIGFycml2ZXMsIHRoZQorIFxmSWluZXRkXGZQIGRhZW1vbiBpcyB0cmlja2VkIGludG8gcnVubmluZyB0aGUgXGZJdGNwZFxmUCBwcm9ncmFtCisgaW5zdGVhZCBvZiB0aGUgZGVzaXJlZCBzZXJ2ZXIuIFxmSXRjcGRcZlAgbG9ncyB0aGUgcmVxdWVzdCBhbmQgZG9lcworIHNvbWUgYWRkaXRpb25hbCBjaGVja3MuIFdoZW4gYWxsIGlzIHdlbGwsIFxmSXRjcGRcZlAgcnVucyB0aGUKK0BAIC04OCwxMSArOTIsMTEgQEAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAuc3AKKyAuaW4gKzUKKyAjIG1rZGlyIC9vdGhlci9wbGFjZQorLSMgbXYgL3Vzci9ldGMvaW4uZmluZ2VyZCAvb3RoZXIvcGxhY2UKKy0jIGNwIHRjcGQgL3Vzci9ldGMvaW4uZmluZ2VyZAorKyMgbXYgL3Vzci9zYmluL2luLmZpbmdlcmQgL290aGVyL3BsYWNlCisrIyBjcCB0Y3BkIC91c3Ivc2Jpbi9pbi5maW5nZXJkCisgLmZpCisgLlBQCistVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL2V0Yy4gT24gc29tZQorK1RoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluLiBPbiBzb21lCisgc3lzdGVtcywgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluIG9yIGluIC91c3IvbGliZXhlYywgb3IgaGF2ZQorIG5vIGBpbi5cJyBwcmVmaXggdG8gdGhlaXIgbmFtZS4KKyAuU0ggRVhBTVBMRSAyCitAQCAtMTAxLDM1ICsxMDUsMzQgQEAgYXJlIGxlZnQgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2UuCisgLlBQCisgSW4gb3JkZXIgdG8gbW9uaXRvciBhY2Nlc3MgdG8gdGhlIFxmSWZpbmdlclxmUiBzZXJ2aWNlLCBwZXJmb3JtIHRoZQorIGZvbGxvd2luZyBlZGl0cyBvbiB0aGUgXGZJaW5ldGRcZlIgY29uZmlndXJhdGlvbiBmaWxlICh1c3VhbGx5IAorLVxmSS9ldGMvaW5ldGQuY29uZlxmUiBvciBcZkkvZXRjL2luZXQvaW5ldGQuY29uZlxmUik6CisrXGZJL2V0Yy9pbmV0ZC5jb25mXGZSKToKKyAubmYKKyAuc3AKKyAudGkgKzUKKy1maW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9ldGMvaW4uZmluZ2VyZCAgaW4uZmluZ2VyZAorK2ZpbmdlciAgc3RyZWFtICB0Y3AgIG5vd2FpdCAgbm9ib2R5ICAvdXNyL3NiaW4vaW4uZmluZ2VyZCAgaW4uZmluZ2VyZAorIC5zcAorIGJlY29tZXM6CisgLnNwCisgLnRpICs1CistZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC9zb21lL3doZXJlL3RjcGQgICAgIGluLmZpbmdlcmQKKytmaW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9zYmluL3RjcGQgICAgIGluLmZpbmdlcmQKKyAuc3AKKyAuZmkKKyAuUFAKKy1UaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3IvZXRjLiBPbiBzb21lCisrVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4uIE9uIHNvbWUKKyBzeXN0ZW1zLCBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4gb3IgaW4gL3Vzci9saWJleGVjLCB0aGUKKyBkYWVtb25zIGhhdmUgbm8gYGluLlwnIHByZWZpeCB0byB0aGVpciBuYW1lLCBvciB0aGVyZSBpcyBubyB1c2VyaWQKKyBmaWVsZCBpbiB0aGUgaW5ldGQgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFNpbWlsYXIgY2hhbmdlcyB3aWxsIGJlIG5lZWRlZCBmb3IgdGhlIG90aGVyIHNlcnZpY2VzIHRoYXQgYXJlIHRvIGJlCisgY292ZXJlZCBieSBcZkl0Y3BkXGZSLiAgU2VuZCBhIGBraWxsIC1IVVBcJyB0byB0aGUgXGZJaW5ldGRcZlIoOCkKKy1wcm9jZXNzIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLiBBSVggdXNlcnMgbWF5IGFsc28gaGF2ZSB0bworLWV4ZWN1dGUgdGhlIGBpbmV0aW1wXCcgY29tbWFuZC4KKytwcm9jZXNzIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLgorIC5TSCBFWEFNUExFIDMKKyBJbiB0aGUgY2FzZSBvZiBkYWVtb25zIHRoYXQgZG8gbm90IGxpdmUgaW4gYSBjb21tb24gZGlyZWN0b3J5ICgic2VjcmV0IgorIG9yIG90aGVyd2lzZSksIGVkaXQgdGhlIFxmSWluZXRkXGZSIGNvbmZpZ3VyYXRpb24gZmlsZSBzbyB0aGF0IGl0Cisgc3BlY2lmaWVzIGFuIGFic29sdXRlIHBhdGggbmFtZSBmb3IgdGhlIHByb2Nlc3MgbmFtZSBmaWVsZC4gRm9yIGV4YW1wbGU6CisgLm5mCisgLnNwCistICAgIG50YWxrICBkZ3JhbSAgdWRwICB3YWl0ICByb290ICAvc29tZS93aGVyZS90Y3BkICAvdXNyL2xvY2FsL2xpYi9udGFsa2QKKysgICAgbnRhbGsgIGRncmFtICB1ZHAgIHdhaXQgIHJvb3QgIC91c3Ivc2Jpbi90Y3BkICAvdXNyL2xvY2FsL2xpYi9udGFsa2QKKyAuc3AKKyAuZmkKKyAuUFAKK0BAIC0xNjQsNiArMTY3LDcgQEAgVGhlIGRlZmF1bHQgbG9jYXRpb25zIG9mIHRoZSBob3N0IGFjY2VzcworIC5TSCBTRUUgQUxTTworIC5uYQorIC5uZgorK2hvc3RzX2FjY2VzcygzKSwgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBsaWJ3cmFwIGxpYnJhcnkuCisgaG9zdHNfYWNjZXNzKDUpLCBmb3JtYXQgb2YgdGhlIHRjcGQgYWNjZXNzIGNvbnRyb2wgdGFibGVzLgorIHN5c2xvZy5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIHN5c2xvZ2QgY29udHJvbCBmaWxlLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay44IHRjcF93cmFwcGVyc183LjYvdGNwZGNoay44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuOAkxOTk1LTAxLTA4IDE3OjAwOjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay44CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtOSw4ICs5LDggQEAgdGNwZGNoayBbLWFdIFstZF0gWy1pIGluZXRfY29uZl0gWy12XQorIHBvdGVudGlhbCBhbmQgcmVhbCBwcm9ibGVtcyBpdCBjYW4gZmluZC4gVGhlIHByb2dyYW0gZXhhbWluZXMgdGhlCisgXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCBmaWxlcyAoYnkgZGVmYXVsdCwgdGhlc2UgYXJlCisgXGZJL2V0Yy9ob3N0cy5hbGxvd1xmUiBhbmQgXGZJL2V0Yy9ob3N0cy5kZW55XGZSKSwgYW5kIGNvbXBhcmVzIHRoZQorLWVudHJpZXMgaW4gdGhlc2UgZmlsZXMgYWdhaW5zdCBlbnRyaWVzIGluIHRoZSBcZklpbmV0ZFxmUiBvciBcZkl0bGlkXGZSCistbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGVzLgorK2VudHJpZXMgaW4gdGhlc2UgZmlsZXMgYWdhaW5zdCBlbnRyaWVzIGluIHRoZSBcZklpbmV0ZFxmUgorK25ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFxmSXRjcGRjaGtcZlIgcmVwb3J0cyBwcm9ibGVtcyBzdWNoIGFzIG5vbi1leGlzdGVudCBwYXRobmFtZXM7IHNlcnZpY2VzCisgdGhhdCBhcHBlYXIgaW4gXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCBydWxlcywgYnV0IGFyZSBub3QgY29udHJvbGxlZAorQEAgLTI2LDE0ICsyNiwxMyBAQCBwcm9ibGVtLgorIC5TSCBPUFRJT05TCisgLklQIC1hCisgUmVwb3J0IGFjY2VzcyBjb250cm9sIHJ1bGVzIHRoYXQgcGVybWl0IGFjY2VzcyB3aXRob3V0IGFuIGV4cGxpY2l0CistQUxMT1cga2V5d29yZC4gVGhpcyBhcHBsaWVzIG9ubHkgd2hlbiB0aGUgZXh0ZW5kZWQgYWNjZXNzIGNvbnRyb2wKKy1sYW5ndWFnZSBpcyBlbmFibGVkIChidWlsZCB3aXRoIC1EUFJPQ0VTU19PUFRJT05TKS4KKytBTExPVyBrZXl3b3JkLgorIC5JUCAtZAorIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmRlbnlcZlIgZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmVzLgorIC5JUCAiLWkgaW5ldF9jb25mIgorIFNwZWNpZnkgdGhpcyBvcHRpb24gd2hlbiBcZkl0Y3BkY2hrXGZSIGlzIHVuYWJsZSB0byBmaW5kIHlvdXIKKy1cZklpbmV0ZC5jb25mXGZSIG9yIFxmSXRsaWQuY29uZlxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3Igd2hlbgorK1xmSWluZXRkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKyB5b3Ugc3VzcGVjdCB0aGF0IHRoZSBwcm9ncmFtIHVzZXMgdGhlIHdyb25nIG9uZS4KKyAuSVAgLXYKKyBEaXNwbGF5IHRoZSBjb250ZW50cyBvZiBlYWNoIGFjY2VzcyBjb250cm9sIHJ1bGUuICBEYWVtb24gbGlzdHMsIGNsaWVudAorQEAgLTU0LDcgKzUzLDYgQEAgdGNwZG1hdGNoKDgpLCBleHBsYWluIHdoYXQgdGNwZCB3b3VsZCBkbworIGhvc3RzX2FjY2Vzcyg1KSwgZm9ybWF0IG9mIHRoZSB0Y3BkIGFjY2VzcyBjb250cm9sIHRhYmxlcy4KKyBob3N0c19vcHRpb25zKDUpLCBmb3JtYXQgb2YgdGhlIGxhbmd1YWdlIGV4dGVuc2lvbnMuCisgaW5ldGQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSBpbmV0ZCBjb250cm9sIGZpbGUuCistdGxpZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIHRsaWQgY29udHJvbCBmaWxlLgorIC5TSCBBVVRIT1JTCisgLm5hCisgLm5mCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44CTIwMDUtMDMtMDkgMTg6MzA6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDcgKzEzLDcgQEAgcmVxdWVzdCBmb3Igc2VydmljZS4gIEV4YW1wbGVzIGFyZSBnaXZlbgorIFRoZSBwcm9ncmFtIGV4YW1pbmVzIHRoZSBcZkl0Y3BkXGZSIGFjY2VzcyBjb250cm9sIHRhYmxlcyAoZGVmYXVsdAorIFxmSS9ldGMvaG9zdHMuYWxsb3dcZlIgYW5kIFxmSS9ldGMvaG9zdHMuZGVueVxmUikgYW5kIHByaW50cyBpdHMKKyBjb25jbHVzaW9uLiAgRm9yIG1heGltYWwgYWNjdXJhY3ksIGl0IGV4dHJhY3RzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKy1mcm9tIHlvdXIgXGZJaW5ldGRcZlIgb3IgXGZJdGxpZFxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZS4KKytmcm9tIHlvdXIgXGZJaW5ldGRcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUuCisgLlBQCisgV2hlbiBcZkl0Y3BkbWF0Y2hcZlIgZmluZHMgYSBtYXRjaCBpbiB0aGUgYWNjZXNzIGNvbnRyb2wgdGFibGVzLCBpdAorIGlkZW50aWZpZXMgdGhlIG1hdGNoZWQgcnVsZS4gSW4gYWRkaXRpb24sIGl0IGRpc3BsYXlzIHRoZSBvcHRpb25hbAorQEAgLTUwLDcgKzUwLDcgQEAgRXhhbWluZSBcZklob3N0cy5hbGxvd1xmUiBhbmQgXGZJaG9zdHMuZAorIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZXMuCisgLklQICItaSBpbmV0X2NvbmYiCisgU3BlY2lmeSB0aGlzIG9wdGlvbiB3aGVuIFxmSXRjcGRtYXRjaFxmUiBpcyB1bmFibGUgdG8gZmluZCB5b3VyCistXGZJaW5ldGQuY29uZlxmUiBvciBcZkl0bGlkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKytcZklpbmV0ZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisgeW91IHN1c3BlY3QgdGhhdCB0aGUgcHJvZ3JhbSB1c2VzIHRoZSB3cm9uZyBvbmUuCisgLlNIIEVYQU1QTEVTCisgVG8gcHJlZGljdCBob3cgXGZJdGNwZFxmUiB3b3VsZCBoYW5kbGUgYSB0ZWxuZXQgcmVxdWVzdCBmcm9tIHRoZSBsb2NhbAorQEAgLTg2LDcgKzg2LDYgQEAgdGNwZGNoayg4KSwgdGNwZCBjb25maWd1cmF0aW9uIGNoZWNrZXIKKyBob3N0c19hY2Nlc3MoNSksIGZvcm1hdCBvZiB0aGUgdGNwZCBhY2Nlc3MgY29udHJvbCB0YWJsZXMuCisgaG9zdHNfb3B0aW9ucyg1KSwgZm9ybWF0IG9mIHRoZSBsYW5ndWFnZSBleHRlbnNpb25zLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorLXRsaWQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSB0bGlkIGNvbnRyb2wgZmlsZS4KKyAuU0ggQVVUSE9SUworIC5uYQorIC5uZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNV93aWxkY2FyZF9tYXRjaGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTE4ODAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2VlIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTc4NDcKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTg6NTQ6MzMuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE4OjU0OjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTg5LDYgKzg5LDEwIEBACisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisrLklQIFwoYnUKKytXaWxkY2FyZHMgYCpcJyBhbmQgYD9cJyBjYW4gYmUgdXNlZCB0byBtYXRjaCBob3N0bmFtZXMgb3IgSVAgYWRkcmVzc2VzLiAgVGhpcworK21ldGhvZCBvZiBtYXRjaGluZyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBuZXQvbWFza1wnIG1hdGNoaW5nLAorK2hvc3RuYW1lIG1hdGNoaW5nIGJlZ2lubmluZyB3aXRoIGAuXCcgb3IgSVAgYWRkcmVzcyBtYXRjaGluZyBlbmRpbmcgd2l0aCBgLlwnLgorIC5TSCBXSUxEQ0FSRFMKKyBUaGUgYWNjZXNzIGNvbnRyb2wgbGFuZ3VhZ2Ugc3VwcG9ydHMgZXhwbGljaXQgd2lsZGNhcmRzOgorIC5JUCBBTEwKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkxOTk3LTAyLTEyIDAyOjEzOjIzLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxODo1MjoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yODksNiArMjg5LDExIEBACisgeworICAgICBpbnQgICAgIG47CisgCisrI2lmbmRlZiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HCisrICAgIGlmIChzdHJjaHIodG9rLCAnKicpIHx8IHN0cmNocih0b2ssJz8nKSkgeyAgLyogY29udGFpbnMgJyonIG9yICc/JyAqLworKyAgICAgICAgcmV0dXJuIChtYXRjaF9wYXR0ZXJuX3lsbyhzdHJpbmcsdG9rKSk7IAkgICAgICAgCisrICAgIH0gZWxzZSAKKysjZW5kaWYgICAgCisgICAgIGlmICh0b2tbMF0gPT0gJy4nKSB7CQkJLyogc3VmZml4ICovCisgCW4gPSBzdHJsZW4oc3RyaW5nKSAtIHN0cmxlbih0b2spOworIAlyZXR1cm4gKG4gPiAwICYmIFNUUl9FUSh0b2ssIHN0cmluZyArIG4pKTsKK0BAIC0zMjksMyArMzM0LDcxIEBACisgICAgIH0KKyAgICAgcmV0dXJuICgoYWRkciAmIG1hc2spID09IG5ldCk7CisgfQorKworKyNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworKy8qIE5vdGU6IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiBhZGFwdGVkIGluIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkKKysgICBmcm9tIFRhdHUgWWxvbmVuJ3MgbGFzdCBTU0ggdmVyc2lvbiB1bmRlciBmcmVlIGxpY2Vuc2UgYnkgCisrICAgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4uCisrCisrICAgQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKKysqLworKworKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoZXMgdGhlIHBhdHRlcm4gKHdoaWNoIG1heSBjb250YWluCisrICAgPyBhbmQgKiBhcyB3aWxkY2FyZHMpLCBhbmQgemVybyBpZiBpdCBkb2VzIG5vdCBtYXRjaC4gKi8KKysJICAKKytpbnQgbWF0Y2hfcGF0dGVybl95bG8oY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqcGF0dGVybikKKyt7CisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBhY2NlcHQgaWYgYWxzbyBhdCBlbmQgb2Ygc3RyaW5nLiAqLworKyAgICAgIGlmICghKnBhdHRlcm4pCisrICAgICAgICByZXR1cm4gISpzOworKworKyAgICAgIC8qIFByb2Nlc3MgJyonLiAqLworKyAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpCisrICAgICAgICB7CisrCSAgLyogU2tpcCB0aGUgYXN0ZXJpc2suICovCisrCSAgcGF0dGVybisrOworKworKwkgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBhY2NlcHQgaW1tZWRpYXRlbHkuICovCisrICAgICAgICAgIGlmICghKnBhdHRlcm4pCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrCSAgLyogSWYgbmV4dCBjaGFyYWN0ZXIgaW4gcGF0dGVybiBpcyBrbm93biwgb3B0aW1pemUuICovCisrICAgICAgICAgIGlmICgqcGF0dGVybiAhPSAnPycgJiYgKnBhdHRlcm4gIT0gJyonKQorKyAgICAgICAgICAgIHsKKysJICAgICAgLyogTG9vayBpbnN0YW5jZXMgb2YgdGhlIG5leHQgY2hhcmFjdGVyIGluIHBhdHRlcm4sIGFuZCB0cnkKKysJCSB0byBtYXRjaCBzdGFydGluZyBmcm9tIHRob3NlLiAqLworKyAgICAgICAgICAgICAgZm9yICg7ICpzOyBzKyspCisrICAgICAgICAgICAgICAgIGlmICgqcyA9PSAqcGF0dGVybiAmJgorKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hfcGF0dGVybl95bG8ocyArIDEsIHBhdHRlcm4gKyAxKSkKKysgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysJICAgICAgLyogRmFpbGVkLiAqLworKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgfQorKworKwkgIC8qIE1vdmUgYWhlYWQgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgYW5kIHRyeSB0byBtYXRjaCBhdCBlYWNoCisrCSAgICAgcG9zaXRpb24uICovCisrICAgICAgICAgIGZvciAoOyAqczsgcysrKQorKyAgICAgICAgICAgIGlmIChtYXRjaF9wYXR0ZXJuX3lsbyhzLCBwYXR0ZXJuKSkKKysgICAgICAgICAgICAgIHJldHVybiAxOworKwkgIC8qIEZhaWxlZC4gKi8KKysgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrCisrICAgICAgLyogVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgbW9yZSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gIElmIHdlIGFyZQorKwkgYXQgdGhlIGVuZCwgZmFpbC4gKi8KKysgICAgICBpZiAoISpzKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgICAgLyogQ2hlY2sgaWYgdGhlIG5leHQgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgYWNjZXB0YWJsZS4gKi8KKysgICAgICBpZiAoKnBhdHRlcm4gIT0gJz8nICYmICpwYXR0ZXJuICE9ICpzKQorKwlyZXR1cm4gMDsKKysgICAgICAKKysgICAgICAvKiBNb3ZlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciwgYm90aCBpbiBzdHJpbmcgYW5kIGluIHBhdHRlcm4uICovCisrICAgICAgcysrOworKyAgICAgIHBhdHRlcm4rKzsKKysgICAgfQorKyAgLypOT1RSRUFDSEVEKi8KKyt9CisrI2VuZGlmIC8qIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcgKi8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDZfZml4X2dldGhvc3RieW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1ZjRiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworKiBNb24gRmViICA1IDIwMDEgUHJlc3RvbiBCcm93biA8cGJyb3duQHJlZGhhdC5jb20+CistIGZpeCBnZXRob3N0YnluYW1lIHRvIHdvcmsgYmV0dGVyIHdpdGggZG90ICIuIiBub3RhdGlvbiAoIzE2OTQ5KQorCistLS0gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYy5maXhnZXRob3N0YnluYW1lCUZyaSBNYXIgMjEgMTM6Mjc6MjUgMTk5NworKysrIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJTW9uIEZlYiAgNSAxNDowOTo0MCAyMDAxCitAQCAtNTIsNyArNTIsOCBAQAorIGNoYXIgICAqbmFtZTsKKyB7CisgICAgIGNoYXIgICAgZG90X25hbWVbTUFYSE9TVE5BTUVMRU4gKyAxXTsKKy0KKysgICAgc3RydWN0IGhvc3RlbnQgKmhwOworKyAgICAKKyAgICAgLyoKKyAgICAgICogRG9uJ3QgYXBwZW5kIGRvdHMgdG8gdW5xdWFsaWZpZWQgbmFtZXMuIFN1Y2ggbmFtZXMgYXJlIGxpa2VseSB0byBjb21lCisgICAgICAqIGZyb20gbG9jYWwgaG9zdHMgZmlsZXMgb3IgZnJvbSBOSVMuCitAQCAtNjEsOCArNjIsMTIgQEAKKyAgICAgaWYgKHN0cmNocihuYW1lLCAnLicpID09IDAgfHwgc3RybGVuKG5hbWUpID49IE1BWEhPU1ROQU1FTEVOIC0gMSkgeworIAlyZXR1cm4gKGdldGhvc3RieW5hbWUobmFtZSkpOworICAgICB9IGVsc2UgeworLQlzcHJpbnRmKGRvdF9uYW1lLCAiJXMuIiwgbmFtZSk7CistCXJldHVybiAoZ2V0aG9zdGJ5bmFtZShkb3RfbmFtZSkpOworKyAgICAgICAgc3ByaW50Zihkb3RfbmFtZSwgIiVzLiIsIG5hbWUpOworKyAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lKGRvdF9uYW1lKTsKKysJaWYgKGhwKQorKwkgICAgcmV0dXJuIGhwOworKwllbHNlCisrCSAgICByZXR1cm4gKGdldGhvc3RieW5hbWUobmFtZSkpOworICAgICB9CisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTBfdXNhZ2ktaXB2Ni5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkNDdjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2gKQEAgLTAsMCArMSwxMjU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZml4X29wdGlvbnMuYyB0Y3Bfd3JhcHBlcnNfNy42L2ZpeF9vcHRpb25zLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZml4X29wdGlvbnMuYwkxOTk3LTA0LTA4IDAyOjI5OjE5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvZml4X29wdGlvbnMuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTExLDYgKzExLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CitAQCAtNDEsNiArNDQsMjIgQEAKKyAgICAgdW5zaWduZWQgaW50IG9wdDsKKyAgICAgaW50ICAgICBvcHRsZW47CisgICAgIHN0cnVjdCBpbl9hZGRyIGR1bW15OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKKysgICAgaW50IHNzbGVuOworKworKyAgICAvKgorKyAgICAgKiBjaGVjayBpZiB0aGlzIGlzIEFGX0lORVQgc29ja2V0CisrICAgICAqIFhYWCBJUHY2IHN1cHBvcnQ/CisrICAgICAqLworKyAgICBzc2xlbiA9IHNpemVvZihzcyk7CisrICAgIGlmIChnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcywgJnNzbGVuKSA8IDApIHsKKysJc3lzbG9nKExPR19FUlIsICJnZXRwZWVybmFtZTogJW0iKTsKKysJY2xlYW5fZXhpdChyZXF1ZXN0KTsKKysgICAgfQorKyAgICBpZiAoc3Muc3NfZmFtaWx5ICE9IEFGX0lORVQpCisrCXJldHVybjsKKysjZW5kaWYKKyAKKyAgICAgaWYgKChpcCA9IGdldHByb3RvYnluYW1lKCJpcCIpKSAhPSAwKQorIAlpcHByb3RvID0gaXAtPnBfcHJvdG87CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOToyMjo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTEgKzg1LDE4IEBACisgZm9yIGRhZW1vbiBwcm9jZXNzIG5hbWVzIG9yIGZvciBjbGllbnQgdXNlciBuYW1lcy4KKyAuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbS5tLm0ubVwnIGlzIGludGVycHJldGVkIGFzIGEKKy1gbmV0L21hc2tcJyBwYWlyLiBBIGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUKKytgbmV0L21hc2tcJyBwYWlyLiBBbiBJUHY0IGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUKKyBiaXR3aXNlIEFORCBvZiB0aGUgYWRkcmVzcyBhbmQgdGhlIGBtYXNrXCcuIEZvciBleGFtcGxlLCB0aGUgbmV0L21hc2sKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKyAuSVAgXChidQorK0FuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYFtuOm46bjpuOm46bjpuOm5dL21cJyBpcyBpbnRlcnByZXRlZCBhcyBhCisrYFtuZXRdL3ByZWZpeGxlblwnIHBhaXIuIEFuIElQdjYgaG9zdCBhZGRyZXNzIGlzIG1hdGNoZWQgaWYKKytgcHJlZml4bGVuXCcgYml0cyBvZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlIGBwcmVmaXhsZW5cJyBiaXRzIG9mIHRoZQorK2FkZHJlc3MuIEZvciBleGFtcGxlLCB0aGUgW25ldF0vcHJlZml4bGVuIHBhdHRlcm4KKytgWzNmZmU6NTA1OjI6MTo6XS82NFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUgcmFuZ2UKKytgM2ZmZTo1MDU6MjoxOjpcJyB0aHJvdWdoIGAzZmZlOjUwNToyOjE6ZmZmZjpmZmZmOmZmZmY6ZmZmZlwnLgorKy5JUCBcKGJ1CisgV2lsZGNhcmRzIGAqXCcgYW5kIGA/XCcgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggaG9zdG5hbWVzIG9yIElQIGFkZHJlc3Nlcy4gIFRoaXMKKyBtZXRob2Qgb2YgbWF0Y2hpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgbmV0L21hc2tcJyBtYXRjaGluZywKKyBob3N0bmFtZSBtYXRjaGluZyBiZWdpbm5pbmcgd2l0aCBgLlwnIG9yIElQIGFkZHJlc3MgbWF0Y2hpbmcgZW5kaW5nIHdpdGggYC5cJy4KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE5OjIyOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCw3ICsyNCwxMyBAQAorIC8qIFN5c3RlbSBsaWJyYXJpZXMuICovCisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpZmRlZiBJTlQzMl9UCisrICAgIHR5cGVkZWYgdWludDMyX3QgdV9pbnQzMl90OworKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTMzLDYgKzM5LDkgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c2V0am1wLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxuZXRkYi5oPgorKyNlbmRpZgorIAorIGV4dGVybiBjaGFyICpmZ2V0cygpOworIGV4dGVybiBpbnQgZXJybm87CitAQCAtODIsNiArOTEsMTAgQEAKKyBzdGF0aWMgaW50IGhvc3RfbWF0Y2goKTsKKyBzdGF0aWMgaW50IHN0cmluZ19tYXRjaCgpOworIHN0YXRpYyBpbnQgbWFza2VkX21hdGNoKCk7CisrI2lmZGVmIElORVQ2Cisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g0KCk7Cisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g2KCk7CisrI2VuZGlmCisgCisgLyogU2l6ZSBvZiBsb2dpY2FsIGxpbmUgYnVmZmVyLiAqLworIAorQEAgLTI4OSw2ICszMDIsMTMgQEAKKyB7CisgICAgIGludCAgICAgbjsKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgLyogY29udmVydCBJUHY0IG1hcHBlZCBJUHY2IGFkZHJlc3MgdG8gSVB2NCBhZGRyZXNzICovCisrICAgIGlmIChTVFJOX0VRKHN0cmluZywgIjo6ZmZmZjoiLCA3KQorKyAgICAgICYmIGRvdF9xdWFkX2FkZHIoc3RyaW5nICsgNykgIT0gSU5BRERSX05PTkUpIHsKKysgICAgICBzdHJpbmcgKz0gNzsKKysgICAgfQorKyNlbmRpZiAgICAKKyAjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKyAgICAgaWYgKHN0cmNocih0b2ssICcqJykgfHwgc3RyY2hyKHRvaywnPycpKSB7ICAvKiBjb250YWlucyAnKicgb3IgJz8nICovCisgICAgICAgICByZXR1cm4gKG1hdGNoX3BhdHRlcm5feWxvKHN0cmluZyx0b2spKTsgCSAgICAgICAKK0BAIC0zMDQsMjAgKzMyNCw3MiBAQAorICAgICB9IGVsc2UgaWYgKHRva1sobiA9IHN0cmxlbih0b2spKSAtIDFdID09ICcuJykgewkvKiBwcmVmaXggKi8KKyAJcmV0dXJuIChTVFJOX0VRKHRvaywgc3RyaW5nLCBuKSk7CisgICAgIH0gZWxzZSB7CQkJCQkvKiBleGFjdCBtYXRjaCAqLworKyNpZmRlZiBJTkVUNgorKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrCXN0cnVjdCBzb2NrYWRkcl9pbjYgcGF0LCBhZGRyOworKwlpbnQgbGVuLCByZXQ7CisrCWNoYXIgY2g7CisrCisrCWxlbiA9IHN0cmxlbih0b2spOworKwlpZiAoKnRvayA9PSAnWycgJiYgdG9rW2xlbiAtIDFdID09ICddJykgeworKwkgICAgY2ggPSB0b2tbbGVuIC0gMV07CisrCSAgICB0b2tbbGVuIC0gMV0gPSAnXDAnOworKwkgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCSAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysJICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrCSAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysJICAgIGlmICgocmV0ID0gZ2V0YWRkcmluZm8odG9rICsgMSwgTlVMTCwgJmhpbnRzLCAmcmVzKSkgPT0gMCkgeworKwkJbWVtY3B5KCZwYXQsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKHBhdCkpOworKwkJZnJlZWFkZHJpbmZvKHJlcyk7CisrCSAgICB9CisrCSAgICB0b2tbbGVuIC0gMV0gPSBjaDsKKysJICAgIGlmIChyZXQgIT0gMCB8fCBnZXRhZGRyaW5mbyhzdHJpbmcsIE5VTEwsICZoaW50cywgJnJlcykgIT0gMCkKKysJCXJldHVybiBOTzsKKysJICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworKwkgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisrI2lmZGVmIE5JX1dJVEhTQ09QRUlECisrCSAgICBpZiAocGF0LnNpbjZfc2NvcGVfaWQgIT0gMCAmJgorKwkJYWRkci5zaW42X3Njb3BlX2lkICE9IHBhdC5zaW42X3Njb3BlX2lkKQorKwkJcmV0dXJuIE5POworKyNlbmRpZgorKwkgICAgcmV0dXJuICghbWVtY21wKCZwYXQuc2luNl9hZGRyLCAmYWRkci5zaW42X2FkZHIsCisrCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSk7CisrCSAgICByZXR1cm4gKHJldCk7CisrCX0KKysjZW5kaWYKKyAJcmV0dXJuIChTVFJfRVEodG9rLCBzdHJpbmcpKTsKKyAgICAgfQorIH0KKyAKKyAvKiBtYXNrZWRfbWF0Y2ggLSBtYXRjaCBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL25ldG1hc2sgKi8KKyAKKysjaWZkZWYgSU5FVDYKKyBzdGF0aWMgaW50IG1hc2tlZF9tYXRjaChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorIGNoYXIgICAqbmV0X3RvazsKKyBjaGFyICAgKm1hc2tfdG9rOworIGNoYXIgICAqc3RyaW5nOworIHsKKysgICAgcmV0dXJuIChtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpIHx8CisrCSAgICBtYXNrZWRfbWF0Y2g2KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpKTsKKyt9CisrCisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpCisrI2Vsc2UKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorKyNlbmRpZgorK2NoYXIgICAqbmV0X3RvazsKKytjaGFyICAgKm1hc2tfdG9rOworK2NoYXIgICAqc3RyaW5nOworK3sKKysjaWZkZWYgSU5FVDYKKysgICAgdV9pbnQzMl90IG5ldDsKKysgICAgdV9pbnQzMl90IG1hc2s7CisrICAgIHVfaW50MzJfdCBhZGRyOworKyNlbHNlCisgICAgIHVuc2lnbmVkIGxvbmcgbmV0OworICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CisgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogRGlzYWxsb3cgZm9ybXMgb3RoZXIgdGhhbiBkb3R0ZWQgcXVhZDogdGhlIHRyZWF0bWVudCB0aGF0IGluZXRfYWRkcigpCitAQCAtMzI5LDEyICs0MDEsNzggQEAKKyAJcmV0dXJuIChOTyk7CisgICAgIGlmICgobmV0ID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKyAJfHwgKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUpIHsKKysjaWZuZGVmIElORVQ2CisgCXRjcGRfd2FybigiYmFkIG5ldC9tYXNrIGV4cHJlc3Npb246ICVzLyVzIiwgbmV0X3RvaywgbWFza190b2spOworKyNlbmRpZgorIAlyZXR1cm4gKE5PKTsJCQkJLyogbm90IHRjcGRfanVtcCgpICovCisgICAgIH0KKyAgICAgcmV0dXJuICgoYWRkciAmIG1hc2spID09IG5ldCk7CisgfQorIAorKyNpZmRlZiBJTkVUNgorK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNihuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorK2NoYXIgICAqbmV0X3RvazsKKytjaGFyICAgKm1hc2tfdG9rOworK2NoYXIgICAqc3RyaW5nOworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG5ldCwgYWRkcjsKKysgICAgdV9pbnQzMl90IG1hc2s7CisrICAgIGludCBsZW4sIG1hc2tfbGVuLCBpID0gMDsKKysgICAgY2hhciBjaDsKKysKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKGdldGFkZHJpbmZvKHN0cmluZywgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKQorKwlyZXR1cm4gTk87CisrICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworKyAgICBmcmVlYWRkcmluZm8ocmVzKTsKKysKKysgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyLnNpbjZfYWRkcikpIHsKKysJaWYgKCgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKysJIHx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKQorKwkgICAgcmV0dXJuIChOTyk7CisrCXJldHVybiAoKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbMTJdICYgbWFzaykgPT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSk7CisrICAgIH0KKysKKysgICAgLyogbWF0Y2ggSVB2NiBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL3ByZWZpeGxlbiAqLworKyAgICBsZW4gPSBzdHJsZW4obmV0X3Rvayk7CisrICAgIGlmICgqbmV0X3RvayAhPSAnWycgfHwgbmV0X3Rva1tsZW4gLSAxXSAhPSAnXScpCisrCXJldHVybiBOTzsKKysgICAgY2ggPSBuZXRfdG9rW2xlbiAtIDFdOworKyAgICBuZXRfdG9rW2xlbiAtIDFdID0gJ1wwJzsKKysgICAgaWYgKGdldGFkZHJpbmZvKG5ldF90b2sgKyAxLCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApIHsKKysJbmV0X3Rva1tsZW4gLSAxXSA9IGNoOworKwlyZXR1cm4gTk87CisrICAgIH0KKysgICAgbWVtY3B5KCZuZXQsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKG5ldCkpOworKyAgICBmcmVlYWRkcmluZm8ocmVzKTsKKysgICAgbmV0X3Rva1tsZW4gLSAxXSA9IGNoOworKyAgICBpZiAoKG1hc2tfbGVuID0gYXRvaShtYXNrX3RvaykpIDwgMCB8fCBtYXNrX2xlbiA+IDEyOCkKKysJcmV0dXJuIE5POworKworKyNpZmRlZiBOSV9XSVRIU0NPUEVJRAorKyAgICBpZiAobmV0LnNpbjZfc2NvcGVfaWQgIT0gMCAmJiBhZGRyLnNpbjZfc2NvcGVfaWQgIT0gbmV0LnNpbjZfc2NvcGVfaWQpCisrCXJldHVybiBOTzsKKysjZW5kaWYKKysgICAgd2hpbGUgKG1hc2tfbGVuID4gMCkgeworKwlpZiAobWFza19sZW4gPCAzMikgeworKwkgICAgbWFzayA9IGh0b25sKH4oMHhmZmZmZmZmZiA+PiBtYXNrX2xlbikpOworKwkgICAgaWYgKCgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldICYgbWFzaykgIT0gKCoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkcltpXSAmIG1hc2spKQorKwkJcmV0dXJuIE5POworKwkgICAgYnJlYWs7CisrCX0KKysJaWYgKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gIT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyW2ldKQorKwkgICAgcmV0dXJuIE5POworKwlpICs9IDQ7CisrCW1hc2tfbGVuIC09IDMyOworKyAgICB9CisrICAgIHJldHVybiBZRVM7CisrfQorKyNlbmRpZiAvKiBJTkVUNiAqLworKworICNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworIC8qIE5vdGU6IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiBhZGFwdGVkIGluIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkKKyAgICBmcm9tIFRhdHUgWWxvbmVuJ3MgbGFzdCBTU0ggdmVyc2lvbiB1bmRlciBmcmVlIGxpY2Vuc2UgYnkgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMTk5Ny0wMy0yMSAxOToyNzoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDQtMDQtMTAgMTk6MjI6NDQuMDAwMDAwMDAwICswMjAwCitAQCAtMjEsNyArMjEsNyBAQAorIAlAZWNobyAiCWR5bml4IGVwaXggZXNpeCBmcmVlYnNkIGhwdXggaXJpeDQgaXJpeDUgaXJpeDYgaXNjIGl1bml4IgorIAlAZWNobyAiCWxpbnV4IG1hY2h0ZW4gbWlwcyh1bnRlc3RlZCkgbmNyc3ZyNCBuZXRic2QgbmV4dCBvc2YgcG93ZXJfdW5peF8yMTEiCisgCUBlY2hvICIJcHR4LTIueCBwdHgtZ2VuZXJpYyBweXJhbWlkIHNjbyBzY28tbmlzIHNjby1vZDIgc2NvLW9zNSBzaW5peCBzdW5vczQiCistCUBlY2hvICIJc3Vub3M0MCBzdW5vczUgc3lzdjQgdGFuZGVtIHVsdHJpeCB1bmljb3M3IHVuaWNvczggdW5peHdhcmUxIHVuaXh3YXJlMiIKKysJQGVjaG8gIglzdW5vczQwIHN1bm9zNSBzb2xhcmlzOCBzeXN2NCB0YW5kZW0gdWx0cml4IHVuaWNvczcgdW5pY29zOCB1bml4d2FyZTEgdW5peHdhcmUyIgorIAlAZWNobyAiCXV0czIxNSB1eHAiCisgCUBlY2hvCisgCUBlY2hvICJJZiBub25lIG9mIHRoZXNlIG1hdGNoIHlvdXIgZW52aXJvbm1lbnQsIGVkaXQgdGhlIHN5c3RlbSIKK0BAIC0xMzEsMjAgKzEzMSwzNCBAQAorIAlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gU1lTVFlQRT0iLXN5c3R5cGUgYnNkNDMiIGFsbAorIAorICMgRnJlZWJzZCBhbmQgbGludXggYnkgZGVmYXVsdCBoYXZlIG5vIE5JUy4KKy0zODZic2QgbmV0YnNkIGJzZG9zOgorKzM4NmJzZCBic2RvczoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisgCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBORVRHUk9VUD0gVExJPSBcCisgCUVYVFJBX0NGTEFHUz0tRFNZU19FUlJMSVNUX0RFRklORUQgVlNZU0xPRz0gYWxsCisgCisgZnJlZWJzZDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9Ii1ML3Vzci9sb2NhbC92Ni9saWIgLWxpbmV0NiIgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gTkVUR1JPVVA9IFRMST0gXAorLQlFWFRSQV9DRkxBR1M9LURTWVNfRVJSTElTVF9ERUZJTkVEIFZTWVNMT0c9IGFsbAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtRElORVQ2IC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBcCisrCVZTWVNMT0c9IGFsbAorKworK25ldGJzZDoKKysJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBORVRHUk9VUD0gVExJPSBcCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESU5FVDYgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4iIFZTWVNMT0c9IGFsbAorIAorIGxpbnV4OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9c2V0ZW52Lm8gXAorLQlORVRHUk9VUD0gVExJPSBFWFRSQV9DRkxBR1M9Ii1EQlJPS0VOX1NPX0xJTkdFUiIgYWxsCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IFwKKysJTkVUR1JPVVA9Ii1ETkVUR1JPVVAiIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKysKKytnbnU6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCU5FVEdST1VQPS1ETkVUR1JPVVAgVExJPSBWU1lTTE9HPSBCVUdTPSBcCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiIgYWxsCisgCisgIyBUaGlzIGlzIGdvb2QgZm9yIG1hbnkgU1lTVitCU0QgaHlicmlkcyB3aXRoIE5JUywgcHJvYmFibHkgYWxzbyBmb3IgSFAtVVggNy54LgorIGhwdXggaHB1eDggaHB1eDkgaHB1eDEwOgorQEAgLTE5Niw2ICsyMTAsMTMgQEAKKyAJTkVUR1JPVVA9LURORVRHUk9VUCBBVVhfT0JKPXNldGVudi5vIFRMST0tRFRMSSBcCisgCUJVR1M9IiQoQlVHUykgLURTT0xBUklTXzI0X0dFVEhPU1RCWU5BTUVfQlVHIiBhbGwKKyAKKysjIFN1bk9TIDUuOCBpcyBhbm90aGVyIFNZU1Y0IHZhcmlhbnQsIGJ1dCBoYXMgSVB2NiBzdXBwb3J0Cisrc29sYXJpczg6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPSItbHNvY2tldCAtbG5zbCIgUkFOTElCPWVjaG8gQVJGTEFHUz1ydiBWU1lTTE9HPSBcCisrCU5FVEdST1VQPS1ETkVUR1JPVVAgQVVYX09CSj1zZXRlbnYubyBUTEk9LURUTEkgXAorKwlFWFRSQV9DRkxBR1M9Ii1ESU5FVDYgLUROT19DTE9ORV9ERVZJQ0UgLURJTlQzMl9UIiBhbGwKKysKKyAjIEdlbmVyaWMgU1lTVjQwCisgZXNpeCBzeXN2NDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMJMTk5Ni0wMi0xMSAxNzowMTozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU4LDkgKzU4LDMxIEBACisgeworICAgICBjaGFyICAgKmNwOworIAorKyNpZmRlZiBJTkVUNgorKyAgICBpbnQgYnJhY2tldCA9IDA7CisrCisrICAgIGZvciAoY3AgPSBzdHJpbmc7IGNwICYmICpjcDsgY3ArKykgeworKwlzd2l0Y2ggKCpjcCkgeworKwljYXNlICdbJzoKKysJICAgIGJyYWNrZXQrKzsKKysJICAgIGJyZWFrOworKwljYXNlICddJzoKKysJICAgIGJyYWNrZXQtLTsKKysJICAgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgICAgaWYgKGJyYWNrZXQgPT0gMCAmJiAqY3AgPT0gZGVsaW1pdGVyKSB7CisrCQkqY3ArKyA9IDA7CisrCQlyZXR1cm4gY3A7CisrCSAgICB9CisrCSAgICBicmVhazsKKysJfQorKyAgICB9CisrICAgIHJldHVybiAoTlVMTCk7CisrI2Vsc2UKKyAgICAgaWYgKChjcCA9IHN0cmNocihzdHJpbmcsIGRlbGltaXRlcikpICE9IDApCisgCSpjcCsrID0gMDsKKyAgICAgcmV0dXJuIChjcCk7CisrI2VuZGlmCisgfQorIAorIC8qIGRvdF9xdWFkX2FkZHIgLSBjb252ZXJ0IGRvdHRlZCBxdWFkIHRvIGludGVybmFsIGZvcm0gKi8KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmVmdXNlLmMgdGNwX3dyYXBwZXJzXzcuNi9yZWZ1c2UuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZWZ1c2UuYwkxOTk0LTEyLTI4IDE3OjQyOjQwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmVmdXNlLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSwxMiBAQAorIHZvaWQgICAgcmVmdXNlKHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN5c2xvZyhkZW55X3NldmVyaXR5LCAicmVmdXNlZCBjb25uZWN0IGZyb20gJXMgKCVzKSIsCisrCSAgIGV2YWxfY2xpZW50KHJlcXVlc3QpLCBldmFsX2hvc3RhZGRyKHJlcXVlc3QtPmNsaWVudCkpOworKyNlbHNlCisgICAgIHN5c2xvZyhkZW55X3NldmVyaXR5LCAicmVmdXNlZCBjb25uZWN0IGZyb20gJXMiLCBldmFsX2NsaWVudChyZXF1ZXN0KSk7CisrI2VuZGlmCisgICAgIGNsZWFuX2V4aXQocmVxdWVzdCk7CisgICAgIC8qIE5PVFJFQUNIRUQgKi8KKyB9CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMJMTk5NS0wMS0wMiAxNjoxMTozNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsMjAgKzY4LDUwIEBACisgLyogcmZjOTMxIC0gcmV0dXJuIHJlbW90ZSB1c2VyIG5hbWUsIGdpdmVuIHNvY2tldCBzdHJ1Y3R1cmVzICovCisgCisgdm9pZCAgICByZmM5MzEocm10X3Npbiwgb3VyX3NpbiwgZGVzdCkKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3Qgc29ja2FkZHIgKnJtdF9zaW47Cisrc3RydWN0IHNvY2thZGRyICpvdXJfc2luOworKyNlbHNlCisgc3RydWN0IHNvY2thZGRyX2luICpybXRfc2luOworIHN0cnVjdCBzb2NrYWRkcl9pbiAqb3VyX3NpbjsKKysjZW5kaWYKKyBjaGFyICAgKmRlc3Q7CisgeworICAgICB1bnNpZ25lZCBybXRfcG9ydDsKKyAgICAgdW5zaWduZWQgb3VyX3BvcnQ7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHJtdF9xdWVyeV9zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIG91cl9xdWVyeV9zaW47CisrICAgIGludCBhbGVuOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBybXRfcXVlcnlfc2luOworICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gb3VyX3F1ZXJ5X3NpbjsKKysjZW5kaWYKKyAgICAgY2hhciAgICB1c2VyWzI1Nl07CQkJLyogWFhYICovCisgICAgIGNoYXIgICAgYnVmZmVyWzUxMl07CQkvKiBYWFggKi8KKyAgICAgY2hhciAgICpjcDsKKyAgICAgY2hhciAgICpyZXN1bHQgPSB1bmtub3duOworICAgICBGSUxFICAgKmZwOworIAorKyNpZmRlZiBJTkVUNgorKyAgICAvKiBhZGRyZXNzIGZhbWlseSBtdXN0IGJlIHRoZSBzYW1lICovCisrICAgIGlmIChybXRfc2luLT5zYV9mYW1pbHkgIT0gb3VyX3Npbi0+c2FfZmFtaWx5KSB7CisrCVNUUk5fQ1BZKGRlc3QsIHJlc3VsdCwgU1RSSU5HX0xFTkdUSCk7CisrCXJldHVybjsKKysgICAgfQorKyAgICBzd2l0Y2ggKG91cl9zaW4tPnNhX2ZhbWlseSkgeworKyAgICBjYXNlIEFGX0lORVQ6CisrCWFsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKysJYnJlYWs7CisrICAgIGNhc2UgQUZfSU5FVDY6CisrCWFsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrCWJyZWFrOworKyAgICBkZWZhdWx0OgorKwlTVFJOX0NQWShkZXN0LCByZXN1bHQsIFNUUklOR19MRU5HVEgpOworKwlyZXR1cm47CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAgLyoKKyAgICAgICogVXNlIG9uZSB1bmJ1ZmZlcmVkIHN0ZGlvIHN0cmVhbSBmb3Igd3JpdGluZyB0byBhbmQgZm9yIHJlYWRpbmcgZnJvbQorICAgICAgKiB0aGUgUkZDOTMxIGV0Yy4gc2VydmVyLiBUaGlzIGlzIGRvbmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgU3VuT1MKK0BAIC05Miw3ICsxMjIsMTEgQEAKKyAgICAgICogc29ja2V0cy4KKyAgICAgICovCisgCisrI2lmZGVmIElORVQ2CisrICAgIGlmICgoZnAgPSBmc29ja2V0KG91cl9zaW4tPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApKSAhPSAwKSB7CisrI2Vsc2UKKyAgICAgaWYgKChmcCA9IGZzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSAhPSAwKSB7CisrI2VuZGlmCisgCXNldGJ1ZihmcCwgKGNoYXIgKikgMCk7CisgCisgCS8qCitAQCAtMTEyLDYgKzE0NiwyNSBAQAorIAkgICAgICogYWRkcmVzc2VzIGZyb20gdGhlIHF1ZXJ5IHNvY2tldC4KKyAJICAgICAqLworIAorKyNpZmRlZiBJTkVUNgorKwkgICAgbWVtY3B5KCZvdXJfcXVlcnlfc2luLCBvdXJfc2luLCBhbGVuKTsKKysJICAgIG1lbWNweSgmcm10X3F1ZXJ5X3Npbiwgcm10X3NpbiwgYWxlbik7CisrCSAgICBzd2l0Y2ggKG91cl9zaW4tPnNhX2ZhbWlseSkgeworKwkgICAgY2FzZSBBRl9JTkVUOgorKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmb3VyX3F1ZXJ5X3NpbiktPnNpbl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmcm10X3F1ZXJ5X3NpbiktPnNpbl9wb3J0ID0gaHRvbnMoUkZDOTMxX1BPUlQpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIEFGX0lORVQ2OgorKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm91cl9xdWVyeV9zaW4pLT5zaW42X3BvcnQgPSBodG9ucyhBTllfUE9SVCk7CisrCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm10X3F1ZXJ5X3NpbiktPnNpbjZfcG9ydCA9IGh0b25zKFJGQzkzMV9QT1JUKTsKKysJCWJyZWFrOworKwkgICAgfQorKworKwkgICAgaWYgKGJpbmQoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIG91cl9xdWVyeV9zaW4sCisrCQkgICAgIGFsZW4pID49IDAgJiYKKysJCWNvbm5lY3QoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIHJtdF9xdWVyeV9zaW4sCisrCQkJYWxlbikgPj0gMCkgeworKyNlbHNlCisgCSAgICBvdXJfcXVlcnlfc2luID0gKm91cl9zaW47CisgCSAgICBvdXJfcXVlcnlfc2luLnNpbl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworIAkgICAgcm10X3F1ZXJ5X3NpbiA9ICpybXRfc2luOworQEAgLTEyMSw2ICsxNzQsNyBAQAorIAkJICAgICBzaXplb2Yob3VyX3F1ZXJ5X3NpbikpID49IDAgJiYKKyAJCWNvbm5lY3QoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIHJtdF9xdWVyeV9zaW4sCisgCQkJc2l6ZW9mKHJtdF9xdWVyeV9zaW4pKSA+PSAwKSB7CisrI2VuZGlmCisgCisgCQkvKgorIAkJICogU2VuZCBxdWVyeSB0byBzZXJ2ZXIuIE5lZ2xlY3QgdGhlIHJpc2sgdGhhdCBhIDEzLWJ5dGUKK0BAIC0xMjksOCArMTgzLDEzIEBACisgCQkgKi8KKyAKKyAJCWZwcmludGYoZnAsICIldSwldVxyXG4iLAorKyNpZmRlZiBJTkVUNgorKwkJCW50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopcm10X3NpbiktPnNpbl9wb3J0KSwKKysJCQludG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW91cl9zaW4pLT5zaW5fcG9ydCkpOworKyNlbHNlCisgCQkJbnRvaHMocm10X3Npbi0+c2luX3BvcnQpLAorIAkJCW50b2hzKG91cl9zaW4tPnNpbl9wb3J0KSk7CisrI2VuZGlmCisgCQlmZmx1c2goZnApOworIAorIAkJLyoKK0BAIC0xNDQsOCArMjAzLDEzIEBACisgCQkgICAgJiYgZmVycm9yKGZwKSA9PSAwICYmIGZlb2YoZnApID09IDAKKyAJCSAgICAmJiBzc2NhbmYoYnVmZmVyLCAiJXUgLCAldSA6IFVTRVJJRCA6JSpbXjpdOiUyNTVzIiwKKyAJCQkgICAgICAmcm10X3BvcnQsICZvdXJfcG9ydCwgdXNlcikgPT0gMworKyNpZmRlZiBJTkVUNgorKwkJICAgICYmIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopcm10X3NpbiktPnNpbl9wb3J0KSA9PSBybXRfcG9ydAorKwkJICAgICYmIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopb3VyX3NpbiktPnNpbl9wb3J0KSA9PSBvdXJfcG9ydCkgeworKyNlbHNlCisgCQkgICAgJiYgbnRvaHMocm10X3Npbi0+c2luX3BvcnQpID09IHJtdF9wb3J0CisgCQkgICAgJiYgbnRvaHMob3VyX3Npbi0+c2luX3BvcnQpID09IG91cl9wb3J0KSB7CisrI2VuZGlmCisgCisgCQkgICAgLyoKKyAJCSAgICAgKiBTdHJpcCB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4uIEl0IGlzIHBhcnQgb2YgdGhlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMJMTk5Ny0wMy0yMSAxOToyNzoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw5IEBACisgI2RlZmluZQlJTkFERFJfTk9ORQkoLTEpCQkvKiBYWFggc2hvdWxkIGJlIDB4ZmZmZmZmZmYgKi8KKyAjZW5kaWYKKyAKKysjaWZuZGVmIElORVQ2CisgZXh0ZXJuIGNoYXIgKm1hbGxvYygpOworKyNlbmRpZgorIAorIC8qIEFwcGxpY2F0aW9uLXNwZWNpZmljLiAqLworIAorQEAgLTM5LDYgKzQxLDcgQEAKKyBpbnQgICAgIGRlbnlfc2V2ZXJpdHkgPSBMT0dfV0FSTklORzsKKyBpbnQgICAgIHJmYzkzMV90aW1lb3V0ID0gUkZDOTMxX1RJTUVPVVQ7CisgCisrI2lmbmRlZiBJTkVUNgorIC8qIGR1cF9ob3N0ZW50IC0gY3JlYXRlIGhvc3RlbnQgaW4gb25lIG1lbW9yeSBibG9jayAqLworIAorIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZHVwX2hvc3RlbnQoaHApCitAQCAtNzMsOSArNzYsNDYgQEAKKyAgICAgfQorICAgICByZXR1cm4gKCZoYi0+aG9zdCk7CisgfQorKyNlbmRpZgorIAorIC8qIGZpbmRfaW5ldF9hZGRyIC0gZmluZCBhbGwgYWRkcmVzc2VzIGZvciB0aGlzIGhvc3QsIHJlc3VsdCB0byBmcmVlKCkgKi8KKyAKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3QgYWRkcmluZm8gKmZpbmRfaW5ldF9hZGRyKGhvc3QpCisrY2hhciAgICpob3N0OworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsICZoaW50cywgJnJlcykgPT0gMCkKKysJcmV0dXJuIChyZXMpOworKworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUU7CisrICAgIGlmIChnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApIHsKKysJdGNwZF93YXJuKCIlczogaG9zdCBub3QgZm91bmQiLCBob3N0KTsKKysJcmV0dXJuICgwKTsKKysgICAgfQorKyAgICBpZiAocmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYgJiYgcmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVCkgeworKwl0Y3BkX3dhcm4oIiVkOiBub3QgYW4gaW50ZXJuZXQgaG9zdCIsIHJlcy0+YWlfZmFtaWx5KTsKKysJZnJlZWFkZHJpbmZvKHJlcyk7CisrCXJldHVybiAoMCk7CisrICAgIH0KKysgICAgaWYgKCFyZXMtPmFpX2Nhbm9ubmFtZSkgeworKwl0Y3BkX3dhcm4oIiVzOiBob3N0bmFtZSBhbGlhcyIsIGhvc3QpOworKwl0Y3BkX3dhcm4oIihjYW5ub3Qgb2J0YWluIG9mZmljaWFsIG5hbWUpIiwgcmVzLT5haV9jYW5vbm5hbWUpOworKyAgICB9IGVsc2UgaWYgKFNUUl9ORShob3N0LCByZXMtPmFpX2Nhbm9ubmFtZSkpIHsKKysJdGNwZF93YXJuKCIlczogaG9zdG5hbWUgYWxpYXMiLCBob3N0KTsKKysJdGNwZF93YXJuKCIob2ZmaWNpYWwgbmFtZTogJS4qcykiLCBTVFJJTkdfTEVOR1RILCByZXMtPmFpX2Nhbm9ubmFtZSk7CisrICAgIH0KKysgICAgcmV0dXJuIChyZXMpOworK30KKysjZWxzZQorIHN0cnVjdCBob3N0ZW50ICpmaW5kX2luZXRfYWRkcihob3N0KQorIGNoYXIgICAqaG9zdDsKKyB7CitAQCAtMTE4LDYgKzE1OCw3IEBACisgICAgIH0KKyAgICAgcmV0dXJuIChkdXBfaG9zdGVudChocCkpOworIH0KKysjZW5kaWYKKyAKKyAvKiBjaGVja19kbnMgLSBnaXZlIGVhY2ggYWRkcmVzcyB0aG9yb3VnaCB3b3Jrb3V0LCByZXR1cm4gYWRkcmVzcyBjb3VudCAqLworIAorQEAgLTEyNSw4ICsxNjYsMTMgQEAKKyBjaGFyICAgKmhvc3Q7CisgeworICAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJlcXVlc3Q7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNpbjsKKysgICAgc3RydWN0IGFkZHJpbmZvICpocCwgKnJlczsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisrI2VuZGlmCisgICAgIGludCAgICAgY291bnQ7CisgICAgIGNoYXIgICAqYWRkcjsKKyAKK0BAIC0xMzQsMTEgKzE4MCwxOCBAQAorIAlyZXR1cm4gKDApOworICAgICByZXF1ZXN0X2luaXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZzaW4sIDApOworICAgICBzb2NrX21ldGhvZHMoJnJlcXVlc3QpOworKyNpZm5kZWYgSU5FVDYKKyAgICAgbWVtc2V0KChjaGFyICopICZzaW4sIDAsIHNpemVvZihzaW4pKTsKKyAgICAgc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworKyNlbmRpZgorIAorKyNpZmRlZiBJTkVUNgorKyAgICBmb3IgKHJlcyA9IGhwLCBjb3VudCA9IDA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0LCBjb3VudCsrKSB7CisrCW1lbWNweSgmc2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CisrI2Vsc2UKKyAgICAgZm9yIChjb3VudCA9IDA7IChhZGRyID0gaHAtPmhfYWRkcl9saXN0W2NvdW50XSkgIT0gMDsgY291bnQrKykgeworIAltZW1jcHkoKGNoYXIgKikgJnNpbi5zaW5fYWRkciwgYWRkciwgc2l6ZW9mKHNpbi5zaW5fYWRkcikpOworKyNlbmRpZgorIAorIAkvKgorIAkgKiBGb3JjZSBob3N0IG5hbWUgYW5kIGFkZHJlc3MgY29udmVyc2lvbnMuIFVzZSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUKK0BAIC0xNTEsNyArMjA0LDExIEBACisgCSAgICB0Y3BkX3dhcm4oImhvc3QgYWRkcmVzcyAlcy0+bmFtZSBsb29rdXAgZmFpbGVkIiwKKyAJCSAgICAgIGV2YWxfaG9zdGFkZHIocmVxdWVzdC5jbGllbnQpKTsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICBmcmVlYWRkcmluZm8oaHApOworKyNlbHNlCisgICAgIGZyZWUoKGNoYXIgKikgaHApOworKyNlbmRpZgorICAgICByZXR1cm4gKGNvdW50KTsKKyB9CisgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmggdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmgJMTk5NC0xMi0zMSAxODoxOToyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmgJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00LDYgKzQsMTAgQEAKKyAgICogQXV0aG9yOiBXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisgICAqLworIAorKyNpZmRlZiBJTkVUNgorK2V4dGVybiBzdHJ1Y3QgYWRkcmluZm8gKmZpbmRfaW5ldF9hZGRyKCk7CisrI2Vsc2UKKyBleHRlcm4gc3RydWN0IGhvc3RlbnQgKmZpbmRfaW5ldF9hZGRyKCk7CisrI2VuZGlmCisgZXh0ZXJuIGludCBjaGVja19kbnMoKTsKKyBleHRlcm4gaW50IGNoZWNrX3BhdGgoKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc29ja2V0LmMgdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zb2NrZXQuYwkyMDA0LTA0LTEwIDE5OjIyOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCwxMyArMjQsMjIgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2lmZGVmIElOVDMyX1QKKyt0eXBlZGVmIHVpbnQzMl90IHVfaW50MzJfdDsKKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrI2lmZGVmIElORVQ2CisrI2lmbmRlZiBOSV9XSVRIU0NPUEVJRAorKyNkZWZpbmUgTklfV0lUSFNDT1BFSUQJMAorKyNlbmRpZgorKyNlbHNlCisgZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSgpOworKyNlbmRpZgorIAorIC8qIExvY2FsIHN0dWZmLiAqLworIAorQEAgLTc5LDggKzg4LDEzIEBACisgdm9pZCAgICBzb2NrX2hvc3QocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGNsaWVudDsKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNlcnZlcjsKKysjZWxzZQorICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisrI2VuZGlmCisgICAgIGludCAgICAgbGVuOworICAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworICAgICBpbnQgICAgIGZkID0gcmVxdWVzdC0+ZmQ7CitAQCAtMTA5LDcgKzEyMywxMSBAQAorIAltZW1zZXQoYnVmLCAwIHNpemVvZihidWYpKTsKKyAjZW5kaWYKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpZW50OworKyNlbHNlCisgICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gJmNsaWVudDsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogRGV0ZXJtaW5lIHRoZSBzZXJ2ZXIgYmluZGluZy4gVGhpcyBpcyB1c2VkIGZvciBjbGllbnQgdXNlcm5hbWUKK0BAIC0xMjIsNyArMTQwLDExIEBACisgCXRjcGRfd2FybigiZ2V0c29ja25hbWU6ICVtIik7CisgCXJldHVybjsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VydmVyOworKyNlbHNlCisgICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gJnNlcnZlcjsKKysjZW5kaWYKKyB9CisgCisgLyogc29ja19ob3N0YWRkciAtIG1hcCBlbmRwb2ludCBhZGRyZXNzIHRvIHByaW50YWJsZSBmb3JtICovCitAQCAtMTMwLDEwICsxNTIsMjYgQEAKKyB2b2lkICAgIHNvY2tfaG9zdGFkZHIoaG9zdCkKKyBzdHJ1Y3QgaG9zdF9pbmZvICpob3N0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBob3N0LT5zaW47CisrICAgIGludCBzYWxlbjsKKysKKysgICAgaWYgKCFzaW4pCisrCXJldHVybjsKKysjaWZkZWYgU0lONl9MRU4KKysgICAgc2FsZW4gPSBzaW4tPnNhX2xlbjsKKysjZWxzZQorKyAgICBzYWxlbiA9IChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSA/IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pCisrCQkJCQk6IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKysjZW5kaWYKKysgICAgZ2V0bmFtZWluZm8oc2luLCBzYWxlbiwgaG9zdC0+YWRkciwgc2l6ZW9mKGhvc3QtPmFkZHIpLAorKwkJTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QgfCBOSV9XSVRIU0NPUEVJRCk7CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBob3N0LT5zaW47CisgCisgICAgIGlmIChzaW4gIT0gMCkKKyAJU1RSTl9DUFkoaG9zdC0+YWRkciwgaW5ldF9udG9hKHNpbi0+c2luX2FkZHIpLCBzaXplb2YoaG9zdC0+YWRkcikpOworKyNlbmRpZgorIH0KKyAKKyAvKiBzb2NrX2hvc3RuYW1lIC0gbWFwIGVuZHBvaW50IGFkZHJlc3MgdG8gaG9zdCBuYW1lICovCitAQCAtMTQxLDYgKzE3OSwxNjAgQEAKKyB2b2lkICAgIHNvY2tfaG9zdG5hbWUoaG9zdCkKKyBzdHJ1Y3QgaG9zdF9pbmZvICpob3N0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBob3N0LT5zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW40OworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXMsICpyZXMwID0gTlVMTDsKKysgICAgaW50IHNhbGVuLCBhbGVuLCBlcnIgPSAxOworKyAgICBjaGFyICphcCA9IE5VTEwsICpyYXAsIGhuYW1lW05JX01BWEhPU1RdOworKworKyAgICBpZiAoc2luICE9IE5VTEwpIHsKKysJaWYgKHNpbi0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisrCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzaW47CisrCisrCSAgICBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKysJCW1lbXNldCgmc2luNCwgMCwgc2l6ZW9mKHNpbjQpKTsKKysjaWZkZWYgU0lONl9MRU4KKysJCXNpbjQuc2luX2xlbiA9IHNpemVvZihzaW40KTsKKysjZW5kaWYKKysJCXNpbjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisrCQlzaW40LnNpbl9wb3J0ID0gc2luNi0+c2luNl9wb3J0OworKwkJc2luNC5zaW5fYWRkci5zX2FkZHIgPSAqKHVfaW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIuczZfYWRkclsxMl07CisrCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjQ7CisrCSAgICB9CisrCX0KKysJc3dpdGNoIChzaW4tPnNhX2ZhbWlseSkgeworKwljYXNlIEFGX0lORVQ6CisrCSAgICBhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luICopc2luKS0+c2luX2FkZHI7CisrCSAgICBhbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKysJICAgIHNhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisrCSAgICBicmVhazsKKysJY2FzZSBBRl9JTkVUNjoKKysJICAgIGFwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luKS0+c2luNl9hZGRyOworKwkgICAgYWxlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworKwkgICAgc2FsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrCSAgICBicmVhazsKKysJZGVmYXVsdDoKKysJICAgIGJyZWFrOworKwl9CisrCWlmIChhcCkKKysJICAgIGVyciA9IGdldG5hbWVpbmZvKHNpbiwgc2FsZW4sIGhuYW1lLCBzaXplb2YoaG5hbWUpLAorKwkJCSAgICAgIE5VTEwsIDAsIE5JX1dJVEhTQ09QRUlEIHwgTklfTkFNRVJFUUQpOworKyAgICB9CisrICAgIGlmICghZXJyKSB7CisrCisrCVNUUk5fQ1BZKGhvc3QtPm5hbWUsIGhuYW1lLCBzaXplb2YoaG9zdC0+bmFtZSkpOworKworKwkvKiByZWplY3QgbnVtZXJpYyBhZGRyZXNzZXMgKi8KKysJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUUgfCBBSV9OVU1FUklDSE9TVDsKKysJaWYgKChlcnIgPSBnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSA9PSAwKSkgeworKwkgICAgZnJlZWFkZHJpbmZvKHJlczApOworKwkgICAgcmVzMCA9IE5VTEw7CisrCSAgICB0Y3BkX3dhcm4oImhvc3QgbmFtZS9uYW1lIG1pc21hdGNoOiAiCisrCQkgICAgICAicmV2ZXJzZSBsb29rdXAgcmVzdWx0cyBpbiBub24tRlFETiAlcyIsCisrCQkgICAgICBob3N0LT5uYW1lKTsKKysJICAgIHN0cmNweShob3N0LT5uYW1lLCBwYXJhbm9pZCk7CS8qIG5hbWUgaXMgYmFkLCBjbG9iYmVyIGl0ICovCisrCX0KKysJZXJyID0gIWVycjsKKysgICAgfQorKyAgICBpZiAoIWVycikgeworKwkvKiB3ZSBhcmUgbm93IHN1cmUgdGhhdCB0aGlzIGlzIG5vbi1udW1lcmljICovCisrCisrCS8qCisrCSAqIFZlcmlmeSB0aGF0IHRoZSBhZGRyZXNzIGlzIGEgbWVtYmVyIG9mIHRoZSBhZGRyZXNzIGxpc3QgcmV0dXJuZWQKKysJICogYnkgZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSkuCisrCSAqIAorKwkgKiBWZXJpZnkgYWxzbyB0aGF0IGdldGhvc3RieWFkZHIoKSBhbmQgZ2V0aG9zdGJ5bmFtZSgpIHJldHVybiB0aGUgc2FtZQorKwkgKiBob3N0bmFtZSwgb3IgcnNoZCBhbmQgcmxvZ2luZCBtYXkgc3RpbGwgZW5kIHVwIGJlaW5nIHNwb29mZWQuCisrCSAqIAorKwkgKiBPbiBzb21lIHNpdGVzLCBnZXRob3N0YnluYW1lKCJsb2NhbGhvc3QiKSByZXR1cm5zICJsb2NhbGhvc3QuZG9tYWluIi4KKysJICogVGhpcyBpcyBhIEROUyBhcnRlZmFjdC4gV2UgdHJlYXQgaXQgYXMgYSBzcGVjaWFsIGNhc2UuIFdoZW4gd2UKKysJICogY2FuJ3QgYmVsaWV2ZSB0aGUgYWRkcmVzcyBsaXN0IGZyb20gZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0IikKKysJICogd2UncmUgaW4gYmlnIHRyb3VibGUgYW55d2F5LgorKwkgKi8KKysKKysJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUU7CisrCWlmIChnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSAhPSAwKSB7CisrCisrCSAgICAvKgorKwkgICAgICogVW5hYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBob3N0IG5hbWUgbWF0Y2hlcyB0aGUgYWRkcmVzcy4gVGhpcworKwkgICAgICogbWF5IGJlIGEgdHJhbnNpZW50IHByb2JsZW0gb3IgYSBib3RjaGVkIG5hbWUgc2VydmVyIHNldHVwLgorKwkgICAgICovCisrCisrCSAgICB0Y3BkX3dhcm4oImNhbid0IHZlcmlmeSBob3N0bmFtZTogZ2V0YWRkcmluZm8oJXMsICVzKSBmYWlsZWQiLAorKwkJICAgICAgaG9zdC0+bmFtZSwKKysJCSAgICAgIChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSA/ICJBRl9JTkVUIiA6ICJBRl9JTkVUNiIpOworKworKwl9IGVsc2UgaWYgKChyZXMwLT5haV9jYW5vbm5hbWUgPT0gTlVMTAorKwkJICAgIHx8IFNUUl9ORShob3N0LT5uYW1lLCByZXMwLT5haV9jYW5vbm5hbWUpKQorKwkJICAgJiYgU1RSX05FKGhvc3QtPm5hbWUsICJsb2NhbGhvc3QiKSkgeworKworKwkgICAgLyoKKysJICAgICAqIFRoZSBnZXRob3N0YnlhZGRyKCkgYW5kIGdldGhvc3RieW5hbWUoKSBjYWxscyBkaWQgbm90IHJldHVybgorKwkgICAgICogdGhlIHNhbWUgaG9zdG5hbWUuIFRoaXMgY291bGQgYmUgYSBuYW1lc2VydmVyIGNvbmZpZ3VyYXRpb24KKysJICAgICAqIHByb2JsZW0uIEl0IGNvdWxkIGFsc28gYmUgdGhhdCBzb21lb25lIGlzIHRyeWluZyB0byBzcG9vZiB1cy4KKysJICAgICAqLworKworKwkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogJXMgIT0gJS4qcyIsCisrCQkgICAgICBob3N0LT5uYW1lLCBTVFJJTkdfTEVOR1RILAorKwkJICAgICAgKHJlczAtPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKSA/ICIiIDogcmVzMC0+YWlfY2Fub25uYW1lKTsKKysKKysJfSBlbHNlIHsKKysKKysJICAgIC8qCisrCSAgICAgKiBUaGUgYWRkcmVzcyBzaG91bGQgYmUgYSBtZW1iZXIgb2YgdGhlIGFkZHJlc3MgbGlzdCByZXR1cm5lZCBieQorKwkgICAgICogZ2V0aG9zdGJ5bmFtZSgpLiBXZSBzaG91bGQgZmlyc3QgdmVyaWZ5IHRoYXQgdGhlIGhfYWRkcnR5cGUKKysJICAgICAqIGZpZWxkIGlzIEFGX0lORVQsIGJ1dCB0aGlzIHByb2dyYW0gaGFzIGFscmVhZHkgY2F1c2VkIHRvbyBtdWNoCisrCSAgICAgKiBncmllZiBvbiBzeXN0ZW1zIHdpdGggYnJva2VuIGxpYnJhcnkgY29kZS4KKysJICAgICAqLworKworKwkgICAgZm9yIChyZXMgPSByZXMwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCkgeworKwkJaWYgKHJlcy0+YWlfZmFtaWx5ICE9IHNpbi0+c2FfZmFtaWx5KQorKwkJICAgIGNvbnRpbnVlOworKwkJc3dpdGNoIChyZXMtPmFpX2ZhbWlseSkgeworKwkJY2FzZSBBRl9JTkVUOgorKwkJICAgIHJhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luICopcmVzLT5haV9hZGRyKS0+c2luX2FkZHI7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIEFGX0lORVQ2OgorKwkJICAgIC8qIG5lZWQgdG8gY2hlY2sgc2NvcGVfaWQgKi8KKysJCSAgICBpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luKS0+c2luNl9zY29wZV9pZCAhPQorKwkJICAgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHIpLT5zaW42X3Njb3BlX2lkKSB7CisrCQkJY29udGludWU7CisrCQkgICAgfQorKwkJICAgIHJhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlcy0+YWlfYWRkciktPnNpbjZfYWRkcjsKKysJCSAgICBicmVhazsKKysJCWRlZmF1bHQ6CisrCQkgICAgY29udGludWU7CisrCQl9CisrCQlpZiAobWVtY21wKHJhcCwgYXAsIGFsZW4pID09IDApIHsKKysJCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisrCQkgICAgcmV0dXJuOwkJCS8qIG5hbWUgaXMgZ29vZCwga2VlcCBpdCAqLworKwkJfQorKwkgICAgfQorKworKwkgICAgLyoKKysJICAgICAqIFRoZSBob3N0IG5hbWUgZG9lcyBub3QgbWFwIHRvIHRoZSBpbml0aWFsIGFkZHJlc3MuIFBlcmhhcHMKKysJICAgICAqIHNvbWVvbmUgaGFzIG1lc3NlZCB1cC4gUGVyaGFwcyBzb21lb25lIGNvbXByb21pc2VkIGEgbmFtZQorKwkgICAgICogc2VydmVyLgorKwkgICAgICovCisrCisrCSAgICBnZXRuYW1laW5mbyhzaW4sIHNhbGVuLCBobmFtZSwgc2l6ZW9mKGhuYW1lKSwKKysJCQlOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCB8IE5JX1dJVEhTQ09QRUlEKTsKKysJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL2FkZHJlc3MgbWlzbWF0Y2g6ICVzICE9ICUuKnMiLAorKwkJICAgICAgaG5hbWUsIFNUUklOR19MRU5HVEgsCisrCQkgICAgICAocmVzMC0+YWlfY2Fub25uYW1lID09IE5VTEwpID8gIiIgOiByZXMwLT5haV9jYW5vbm5hbWUpOworKwl9CisrCXN0cmNweShob3N0LT5uYW1lLCBwYXJhbm9pZCk7CQkvKiBuYW1lIGlzIGJhZCwgY2xvYmJlciBpdCAqLworKwlpZiAocmVzMCkKKysJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKysgICAgfQorKyNlbHNlIC8qIElORVQ2ICovCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gaG9zdC0+c2luOworICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisgICAgIGludCAgICAgaTsKK0BAIC0yMjAsNiArNDEyLDcgQEAKKyAJfQorIAlzdHJjcHkoaG9zdC0+bmFtZSwgcGFyYW5vaWQpOwkJLyogbmFtZSBpcyBiYWQsIGNsb2JiZXIgaXQgKi8KKyAgICAgfQorKyNlbmRpZiAvKiBJTkVUNiAqLworIH0KKyAKKyAvKiBzb2NrX3NpbmsgLSBhYnNvcmIgdW5yZWNlaXZlZCBJUCBkYXRhZ3JhbSAqLworQEAgLTIyOCw3ICs0MjEsMTEgQEAKKyBpbnQgICAgIGZkOworIHsKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2luOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisrI2VuZGlmCisgICAgIGludCAgICAgc2l6ZSA9IHNpemVvZihzaW4pOworIAorICAgICAvKgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5jCTE5OTYtMDItMTEgMTc6MDE6MzMuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjAsNyArMTIwLDEyIEBACisgCisgICAgIC8qIFJlcG9ydCByZXF1ZXN0IGFuZCBpbnZva2UgdGhlIHJlYWwgZGFlbW9uIHByb2dyYW0uICovCisgCisrI2lmZGVmIElORVQ2CisrICAgIHN5c2xvZyhhbGxvd19zZXZlcml0eSwgImNvbm5lY3QgZnJvbSAlcyAoJXMpIiwKKysJICAgZXZhbF9jbGllbnQoJnJlcXVlc3QpLCBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisrI2Vsc2UKKyAgICAgc3lzbG9nKGFsbG93X3NldmVyaXR5LCAiY29ubmVjdCBmcm9tICVzIiwgZXZhbF9jbGllbnQoJnJlcXVlc3QpKTsKKysjZW5kaWYKKyAgICAgY2xvc2Vsb2coKTsKKyAgICAgKHZvaWQpIGV4ZWN2KHBhdGgsIGFyZ3YpOworICAgICBzeXNsb2coTE9HX0VSUiwgImVycm9yOiBjYW5ub3QgZXhlY3V0ZSAlczogJW0iLCBwYXRoKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkxOTk3LTAyLTEyIDAyOjEzOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjIsNiArMjIsOSBAQAorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTM5Nyw2ICs0MDAsMzEgQEAKKyAgICAgfQorIH0KKyAKKysjaWZkZWYgSU5FVDYKKytzdGF0aWMgaW50IGlzX2luZXQ2X2FkZHIocGF0KQorKyAgICBjaGFyICpwYXQ7CisreworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrICAgIGludCBsZW4sIHJldDsKKysgICAgY2hhciBjaDsKKysKKysgICAgaWYgKCpwYXQgIT0gJ1snKQorKwlyZXR1cm4gKDApOworKyAgICBsZW4gPSBzdHJsZW4ocGF0KTsKKysgICAgaWYgKChjaCA9IHBhdFtsZW4gLSAxXSkgIT0gJ10nKQorKwlyZXR1cm4gKDApOworKyAgICBwYXRbbGVuIC0gMV0gPSAnXDAnOworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKyAgICBpZiAoKHJldCA9IGdldGFkZHJpbmZvKHBhdCArIDEsIE5VTEwsICZoaW50cywgJnJlcykpID09IDApCisrCWZyZWVhZGRyaW5mbyhyZXMpOworKyAgICBwYXRbbGVuIC0gMV0gPSBjaDsKKysgICAgcmV0dXJuIChyZXQgPT0gMCk7CisrfQorKyNlbmRpZgorKworIC8qIGNoZWNrX2hvc3QgLSBjcml0aWNpemUgaG9zdCBwYXR0ZXJuICovCisgCisgc3RhdGljIGludCBjaGVja19ob3N0KHBhdCkKK0BAIC00MjMsMTQgKzQ1MSwyNyBAQAorICNlbmRpZgorICNlbmRpZgorICAgICB9IGVsc2UgaWYgKG1hc2sgPSBzcGxpdF9hdChwYXQsICcvJykpIHsJLyogbmV0d29yay9uZXRtYXNrICovCisrI2lmZGVmIElORVQ2CisrCWludCBtYXNrX2xlbjsKKysKKysJaWYgKChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKysJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrCSAgICAmJiAoIWlzX2luZXQ2X2FkZHIocGF0KQorKwkJfHwgKChtYXNrX2xlbiA9IGF0b2kobWFzaykpIDwgMCB8fCBtYXNrX2xlbiA+IDEyOCkpKQorKyNlbHNlCisgCWlmIChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKyAJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrI2VuZGlmCisgCSAgICB0Y3BkX3dhcm4oIiVzLyVzOiBiYWQgbmV0L21hc2sgcGF0dGVybiIsIHBhdCwgbWFzayk7CisgICAgIH0gZWxzZSBpZiAoU1RSX0VRKHBhdCwgIkZBSUwiKSkgewkJLyogb2Jzb2xldGUgKi8KKyAJdGNwZF93YXJuKCJGQUlMIGlzIG5vIGxvbmdlciByZWNvZ25pemVkIik7CisgCXRjcGRfd2FybigiKHVzZSBFWENFUFQgb3IgREVOWSBpbnN0ZWFkKSIpOworICAgICB9IGVsc2UgaWYgKHJlc2VydmVkX25hbWUocGF0KSkgewkJLyogb3RoZXIgcmVzZXJ2ZWQgKi8KKyAJIC8qIHZvaWQgKi8gOworKyNpZmRlZiBJTkVUNgorKyAgICB9IGVsc2UgaWYgKGlzX2luZXQ2X2FkZHIocGF0KSkgeyAvKiBJUHY2IGFkZHJlc3MgKi8KKysJYWRkcl9jb3VudCA9IDE7CisrI2VuZGlmCisgICAgIH0gZWxzZSBpZiAoTk9UX0lOQUREUihwYXQpKSB7CQkvKiBpbnRlcm5ldCBuYW1lICovCisgCWlmIChwYXRbc3RybGVuKHBhdCkgLSAxXSA9PSAnLicpIHsKKyAJICAgIHRjcGRfd2FybigiJXM6IGRvbWFpbiBvciBob3N0IG5hbWUgZW5kcyBpbiBkb3QiLCBwYXQpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTE5OTYtMDMtMTkgMTY6MjI6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMSw3ICsxMSwxMSBAQAorIHN0cnVjdCBob3N0X2luZm8geworICAgICBjaGFyICAgIG5hbWVbU1RSSU5HX0xFTkdUSF07CS8qIGFjY2VzcyB2aWEgZXZhbF9ob3N0bmFtZShob3N0KSAqLworICAgICBjaGFyICAgIGFkZHJbU1RSSU5HX0xFTkdUSF07CS8qIGFjY2VzcyB2aWEgZXZhbF9ob3N0YWRkcihob3N0KSAqLworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbjsJCS8qIHNvY2tldCBhZGRyZXNzIG9yIDAgKi8KKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsJCS8qIHNvY2tldCBhZGRyZXNzIG9yIDAgKi8KKysjZW5kaWYKKyAgICAgc3RydWN0IHRfdW5pdGRhdGEgKnVuaXQ7CQkvKiBUTEkgdHJhbnNwb3J0IGFkZHJlc3Mgb3IgMCAqLworICAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwkvKiBmb3Igc2hhcmVkIGluZm9ybWF0aW9uICovCisgfTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guYwkxOTk2LTAyLTExIDE3OjAxOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Nyw3ICs1NywxMSBAQAorIGludCAgICAgYXJnYzsKKyBjaGFyICAqKmFyZ3Y7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpocCwgKnJlczsKKysjZWxzZQorICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisrI2VuZGlmCisgICAgIGNoYXIgICAqbXluYW1lID0gYXJndlswXTsKKyAgICAgY2hhciAgICpjbGllbnQ7CisgICAgIGNoYXIgICAqc2VydmVyOworQEAgLTY4LDggKzcyLDEzIEBACisgICAgIGludCAgICAgY2g7CisgICAgIGNoYXIgICAqaW5ldGNmID0gMDsKKyAgICAgaW50ICAgICBjb3VudDsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2VydmVyX3NpbjsKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgY2xpZW50X3NpbjsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyX3NpbjsKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudF9zaW47CisrI2VuZGlmCisgICAgIHN0cnVjdCBzdGF0IHN0OworIAorICAgICAvKgorQEAgLTE3MiwxMyArMTgxLDIwIEBACisgICAgIGlmIChOT1RfSU5BRERSKHNlcnZlcikgPT0gMCB8fCBIT1NUTkFNRV9LTk9XTihzZXJ2ZXIpKSB7CisgCWlmICgoaHAgPSBmaW5kX2luZXRfYWRkcihzZXJ2ZXIpKSA9PSAwKQorIAkgICAgZXhpdCgxKTsKKysjaWZuZGVmIElORVQ2CisgCW1lbXNldCgoY2hhciAqKSAmc2VydmVyX3NpbiwgMCwgc2l6ZW9mKHNlcnZlcl9zaW4pKTsKKyAJc2VydmVyX3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKysjZW5kaWYKKyAJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX1NFUlZFUl9TSU4sICZzZXJ2ZXJfc2luLCAwKTsKKyAKKysjaWZkZWYgSU5FVDYKKysJZm9yIChyZXMgPSBocCwgY291bnQgPSAwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCwgY291bnQrKykgeworKwkgICAgbWVtY3B5KCZzZXJ2ZXJfc2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CisrI2Vsc2UKKyAJZm9yIChjb3VudCA9IDA7IChhZGRyID0gaHAtPmhfYWRkcl9saXN0W2NvdW50XSkgIT0gMDsgY291bnQrKykgeworIAkgICAgbWVtY3B5KChjaGFyICopICZzZXJ2ZXJfc2luLnNpbl9hZGRyLCBhZGRyLAorIAkJICAgc2l6ZW9mKHNlcnZlcl9zaW4uc2luX2FkZHIpKTsKKysjZW5kaWYKKyAKKyAJICAgIC8qCisgCSAgICAgKiBGb3JjZSBldmFsdWF0aW9uIG9mIHNlcnZlciBob3N0IG5hbWUgYW5kIGFkZHJlc3MuIEhvc3QgbmFtZQorQEAgLTE5NCw3ICsyMTAsMTEgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgYW4gYWRkcmVzcyBpbnN0ZWFkXG4iKTsKKyAJICAgIGV4aXQoMSk7CisgCX0KKysjaWZkZWYgSU5FVDYKKysJZnJlZWFkZHJpbmZvKGhwKTsKKysjZWxzZQorIAlmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgfSBlbHNlIHsKKyAJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX1NFUlZFUl9OQU1FLCBzZXJ2ZXIsIDApOworICAgICB9CitAQCAtMjA4LDYgKzIyOCwxOCBAQAorIAl0Y3BkbWF0Y2goJnJlcXVlc3QpOworIAlleGl0KDApOworICAgICB9CisrI2lmZGVmIElORVQ2CisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmIChnZXRhZGRyaW5mbyhjbGllbnQsIE5VTEwsICZoaW50cywgJnJlcykgPT0gMCkgeworKwlmcmVlYWRkcmluZm8ocmVzKTsKKysJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9BRERSLCBjbGllbnQsIDApOworKwl0Y3BkbWF0Y2goJnJlcXVlc3QpOworKwlleGl0KDApOworKyAgICB9CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIFBlcmhhcHMgdGhleSBhcmUgdGVzdGluZyBzcGVjaWFsIGNsaWVudCBob3N0bmFtZSBwYXR0ZXJucyB0aGF0IGFyZW4ndAorQEAgLTIyOSw2ICsyNjEsMzQgQEAKKyAgICAgICovCisgICAgIGlmICgoaHAgPSBmaW5kX2luZXRfYWRkcihjbGllbnQpKSA9PSAwKQorIAlleGl0KDEpOworKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfQ0xJRU5UX1NJTiwgJmNsaWVudF9zaW4sIDApOworKworKyAgICBmb3IgKHJlcyA9IGhwLCBjb3VudCA9IDA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0LCBjb3VudCsrKSB7CisrCW1lbWNweSgmY2xpZW50X3NpbiwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworKworKwkvKgorKwkgKiBnZXRuYW1laW5mbygpIGRvZXNuJ3QgZG8gcmV2ZXJzZSBsb29rdXAgYWdhaW5zdCBsaW5rLWxvY2FsCisrCSAqIGFkZHJlc3MuICBTbywgd2UgcGFzcyB0aHJvdWdoIGhvc3QgbmFtZSBldmFsdWF0aW9uIGFnYWluc3QKKysJICogc3VjaCBhZGRyZXNzZXMuCisrCSAqLworKwlpZiAocmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYgfHwKKysJICAgICFJTjZfSVNfQUREUl9MSU5LTE9DQUwoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlcy0+YWlfYWRkciktPnNpbjZfYWRkcikpIHsKKysJICAgIC8qCisrCSAgICAgKiBGb3JjZSBldmFsdWF0aW9uIG9mIGNsaWVudCBob3N0IG5hbWUgYW5kIGFkZHJlc3MuIEhvc3QgbmFtZQorKwkgICAgICogY29uZmxpY3RzIHdpbGwgYmUgcmVwb3J0ZWQgd2hpbGUgZXZhbF9ob3N0bmFtZSgpIGRvZXMgaXRzIGpvYi4KKysJICAgICAqLworKwkgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9OQU1FLCAiIiwgUlFfQ0xJRU5UX0FERFIsICIiLCAwKTsKKysJICAgIGlmIChTVFJfRVEoZXZhbF9ob3N0bmFtZShyZXF1ZXN0LmNsaWVudCksIHVua25vd24pKQorKwkJdGNwZF93YXJuKCJob3N0IGFkZHJlc3MgJXMtPm5hbWUgbG9va3VwIGZhaWxlZCIsCisrCQkJICBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisrCX0KKysJdGNwZG1hdGNoKCZyZXF1ZXN0KTsKKysJaWYgKHJlcy0+YWlfbmV4dCkKKysJICAgIHByaW50ZigiXG4iKTsKKysgICAgfQorKyAgICBmcmVlYWRkcmluZm8oaHApOworKyNlbHNlCisgICAgIG1lbXNldCgoY2hhciAqKSAmY2xpZW50X3NpbiwgMCwgc2l6ZW9mKGNsaWVudF9zaW4pKTsKKyAgICAgY2xpZW50X3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZjbGllbnRfc2luLCAwKTsKK0BAIC0yNTAsNiArMzEwLDcgQEAKKyAJICAgIHByaW50ZigiXG4iKTsKKyAgICAgfQorICAgICBmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgZXhpdCgwKTsKKyB9CisgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RsaS5jIHRjcF93cmFwcGVyc183LjYvdGxpLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGxpLmMJMTk5Ny0wMy0yMSAxOToyNzoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RsaS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNjUsOCArNjUsMTMgQEAKKyB2b2lkICAgIHRsaV9ob3N0KHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBjbGllbnQ7CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzZXJ2ZXI7CisrI2Vsc2UKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBJZiB3ZSBkaXNjb3ZlciB0aGF0IHdlIGFyZSB1c2luZyBhbiBJUCB0cmFuc3BvcnQsIHByZXRlbmQgd2UgbmV2ZXIKK0BAIC03NiwxNCArODEsMjkgQEAKKyAKKyAgICAgdGxpX2VuZHBvaW50cyhyZXF1ZXN0KTsKKyAgICAgaWYgKChyZXF1ZXN0LT5jb25maWcgPSB0bGlfdHJhbnNwb3J0KHJlcXVlc3QtPmZkKSkgIT0gMAorKyNpZmRlZiBJTkVUNgorKwkmJiAoU1RSX0VRKHJlcXVlc3QtPmNvbmZpZy0+bmNfcHJvdG9mbWx5LCAiaW5ldCIpIHx8CisrCSAgICBTVFJfRVEocmVxdWVzdC0+Y29uZmlnLT5uY19wcm90b2ZtbHksICJpbmV0NiIpKSkgeworKyNlbHNlCisgCSYmIFNUUl9FUShyZXF1ZXN0LT5jb25maWctPm5jX3Byb3RvZm1seSwgImluZXQiKSkgeworKyNlbmRpZgorIAlpZiAocmVxdWVzdC0+Y2xpZW50LT51bml0ICE9IDApIHsKKysjaWZkZWYgSU5FVDYKKysJICAgIGNsaWVudCA9ICooc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgcmVxdWVzdC0+Y2xpZW50LT51bml0LT5hZGRyLmJ1ZjsKKysJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmY2xpZW50OworKyNlbHNlCisgCSAgICBjbGllbnQgPSAqKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSByZXF1ZXN0LT5jbGllbnQtPnVuaXQtPmFkZHIuYnVmOworIAkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSAmY2xpZW50OworKyNlbmRpZgorIAl9CisgCWlmIChyZXF1ZXN0LT5zZXJ2ZXItPnVuaXQgIT0gMCkgeworKyNpZmRlZiBJTkVUNgorKwkgICAgc2VydmVyID0gKihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSByZXF1ZXN0LT5zZXJ2ZXItPnVuaXQtPmFkZHIuYnVmOworKwkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXI7CisrI2Vsc2UKKyAJICAgIHNlcnZlciA9ICooc3RydWN0IHNvY2thZGRyX2luICopIHJlcXVlc3QtPnNlcnZlci0+dW5pdC0+YWRkci5idWY7CisgCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9ICZzZXJ2ZXI7CisrI2VuZGlmCisgCX0KKyAJdGxpX2NsZWFudXAocmVxdWVzdCk7CisgCXNvY2tfbWV0aG9kcyhyZXF1ZXN0KTsKK0BAIC0xODcsNyArMjA3LDE1IEBACisgICAgIH0KKyAgICAgd2hpbGUgKGNvbmZpZyA9IGdldG5ldGNvbmZpZyhoYW5kbGVwKSkgeworIAlpZiAoc3RhdChjb25maWctPm5jX2RldmljZSwgJmZyb21fY29uZmlnKSA9PSAwKSB7CisrI2lmZGVmIE5PX0NMT05FX0RFVklDRQorKwkvKgorKwkgKiBJZiB0aGUgbmV0d29yayBkZXZpY2VzIGFyZSBub3QgY2xvbmVkIChhcyBpcyB0aGUgY2FzZSBmb3IKKysJICogU29sYXJpcyA4IEJldGEpLCB3ZSBtdXN0IGNvbXBhcmUgdGhlIG1ham9yIGRldmljZSBudW1iZXJzLgorKwkgKi8KKysJICAgIGlmIChtYWpvcihmcm9tX2NvbmZpZy5zdF9yZGV2KSA9PSBtYWpvcihmcm9tX2NsaWVudC5zdF9yZGV2KSkKKysjZWxzZQorIAkgICAgaWYgKG1pbm9yKGZyb21fY29uZmlnLnN0X3JkZXYpID09IG1ham9yKGZyb21fY2xpZW50LnN0X3JkZXYpKQorKyNlbmRpZgorIAkJYnJlYWs7CisgCX0KKyAgICAgfQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy91cGRhdGUuYyB0Y3Bfd3JhcHBlcnNfNy42L3VwZGF0ZS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3VwZGF0ZS5jCTE5OTQtMTItMjggMTc6NDI6NTYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi91cGRhdGUuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ2LDEwICs0NiwxOCBAQAorIAkgICAgcmVxdWVzdC0+ZmQgPSB2YV9hcmcoYXAsIGludCk7CisgCSAgICBjb250aW51ZTsKKyAJY2FzZSBSUV9DTElFTlRfU0lOOgorKyNpZmRlZiBJTkVUNgorKwkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkciAqKTsKKysjZWxzZQorIAkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKKysjZW5kaWYKKyAJICAgIGNvbnRpbnVlOworIAljYXNlIFJRX1NFUlZFUl9TSU46CisrI2lmZGVmIElORVQ2CisrCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyICopOworKyNlbHNlCisgCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyX2luICopOworKyNlbmRpZgorIAkgICAgY29udGludWU7CisgCisgCSAgICAvKgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy93b3JrYXJvdW5kcy5jIHRjcF93cmFwcGVyc183LjYvd29ya2Fyb3VuZHMuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy93b3JrYXJvdW5kcy5jCTE5OTYtMDMtMTkgMTY6MjI6MjYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi93b3JrYXJvdW5kcy5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTY2LDExICsxNjYsMjIgQEAKKyBpbnQgICAgKmxlbjsKKyB7CisgICAgIGludCAgICAgcmV0OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IHNhOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzYTsKKysjZW5kaWYKKyAKKyAgICAgaWYgKChyZXQgPSBnZXRwZWVybmFtZShzb2NrLCBzYSwgbGVuKSkgPj0gMAorKyNpZmRlZiBJTkVUNgorKwkmJiAoKHNpbi0+c3Vfc2kuc2lfZmFtaWx5ID09IEFGX0lORVQ2CisrCSAgICAgJiYgSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbi0+c3Vfc2luNi5zaW42X2FkZHIpKQorKwkgICAgfHwgKHNpbi0+c3Vfc2kuc2lfZmFtaWx5ID09IEFGX0lORVQKKysJCSYmIHNpbi0+c3Vfc2luLnNpbl9hZGRyLnNfYWRkciA9PSAwKSkpIHsKKysjZWxzZQorIAkmJiBzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQKKyAJJiYgc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworKyNlbmRpZgorIAllcnJubyA9IEVOT1RDT05OOworIAlyZXR1cm4gKC0xKTsKKyAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTFfdGNwZF9ibGFja2xpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2MTA2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoCkBAIC0wLDAgKzEsMTUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1BhdGg6IG5ld3MucG9yY3VwaW5lLm9yZyFuZXdzLnBvcmN1cGluZS5vcmchbm90LWZvci1tYWlsCitGcm9tOiBXaWV0c2UgVmVuZW1hIDx3aWV0c2VAKChubykoc3BhbSkocGxlYXNlKSl3enYud2luLnR1ZS5ubD4KK05ld3Nncm91cHM6IGNvbXAubWFpbC5zZW5kbWFpbCxjb21wLnNlY3VyaXR5LnVuaXgKK1N1YmplY3Q6IFRDUCBXcmFwcGVyIEJsYWNrbGlzdCBFeHRlbnNpb24KK0ZvbGxvd3VwLVRvOiBwb3N0ZXIKK0RhdGU6IDggU2VwIDE5OTcgMTg6NTM6MTMgLTA0MDAKK09yZ2FuaXphdGlvbjogV2lldHNlJ3MgaGFuZ291dCB3aGlsZSBvbiBzYWJhdHRpY2FsIGluIHRoZSBVU0EKK0xpbmVzOiAxNDcKK1NlbmRlcjogd2lldHNlQHNwaWtlLnBvcmN1cGluZS5vcmcKK01lc3NhZ2UtSUQ6IDw1djF2a3AkaDRmJDFAc3Bpa2UucG9yY3VwaW5lLm9yZz4KK05OVFAtUG9zdGluZy1Ib3N0OiBzcGlrZS5wb3JjdXBpbmUub3JnCitYcmVmOiBuZXdzLnBvcmN1cGluZS5vcmcgY29tcC5tYWlsLnNlbmRtYWlsOjM1NDEgY29tcC5zZWN1cml0eS51bml4OjcxNTgKKworVGhlIHBhdGNoIGJlbG93IGFkZHMgYSBuZXcgaG9zdCBwYXR0ZXJuIHRvIHRoZSBUQ1AgV3JhcHBlciBhY2Nlc3MKK2NvbnRyb2wgbGFuZ3VhZ2UuIEluc3RlYWQgb2YgYSBob3N0IG5hbWUgb3IgYWRkcmVzcyBwYXR0ZXJuLCB5b3UKK2NhbiBzcGVjaWZ5IGFuIGV4dGVybmFsIC9maWxlL25hbWUgd2l0aCBob3N0IG5hbWUgb3IgYWRkcmVzcworcGF0dGVybnMuICAgVGhlIGZlYXR1cmUgY2FuIGJlIHVzZWQgcmVjdXJzaXZlbHkuCisKK1RoZSAvZmlsZS9uYW1lIGV4dGVuc2lvbiBtYWtlcyBpdCBlYXN5IHRvIGJsYWNrbGlzdCBiYWQgc2l0ZXMsIGZvcgorZXhhbXBsZSwgdG8gYmxvY2sgdW53YW50ZWQgZWxlY3Ryb25pYyBtYWlsIHdoZW4gbGlid3JhcCBpcyBsaW5rZWQKK2ludG8gc2VuZG1haWwuICBBZGRpbmcgaG9zdHMgdG8gYSBzaW1wbGUgdGV4dCBmaWxlIGlzIG11Y2ggZWFzaWVyCit0aGFuIGhhdmluZyB0byBlZGl0IGEgbW9yZSBjb21wbGV4IGhvc3RzLmFsbG93L2RlbnkgZmlsZS4KKworSSBkZXZlbG9wZWQgdGhpcyBhIHllYXIgb3Igc28gYWdvIGFzIGEgc3Vic3RpdHV0ZSBmb3IgTklTIG5ldGdyb3Vwcy4KK0F0IHRoYXQgdGltZSwgSSBkaWQgbm90IGNvbnNpZGVyIGl0IG9mIHN1ZmZpY2llbnQgaW50ZXJlc3QgZm9yCitpbmNsdXNpb24gaW4gdGhlIFRDUCBXcmFwcGVyIGRpc3RyaWJ1dGlvbi4gSG93IHRpbWVzIGhhdmUgY2hhbmdlZC4KKworVGhlIHBhdGNoIGlzIHJlbGF0aXZlIHRvIFRDUCBXcmFwcGVycyB2ZXJzaW9uIDcuNi4gVGhlIG1haW4gYXJjaGl2ZQorc2l0ZSBpcyBmdHA6Ly9mdHAud2luLnR1ZS5ubC9wdWIvc2VjdXJpdHkvdGNwX3dyYXBwZXJzXzcuNi50YXIuZ3oKKworVGhhbmtzIHRvIHRoZSBEZWJpYW4gTElOVVggZm9sa3MgZm9yIGV4cHJlc3NpbmcgdGhlaXIgaW50ZXJlc3QgaW4KK3RoaXMgcGF0Y2guCisKKwlXaWV0c2UKKworCitbZGlmZiB1cGRhdGVkIGJ5IE1kXQorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6Mjg6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtOTcsNiArOTcsMTMgQEAKKyBgWzNmZmU6NTA1OjI6MTo6XS82NFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUgcmFuZ2UKKyBgM2ZmZTo1MDU6MjoxOjpcJyB0aHJvdWdoIGAzZmZlOjUwNToyOjE6ZmZmZjpmZmZmOmZmZmY6ZmZmZlwnLgorIC5JUCBcKGJ1CisrQSBzdHJpbmcgdGhhdCBiZWdpbnMgd2l0aCBhIGAvXCcgY2hhcmFjdGVyIGlzIHRyZWF0ZWQgYXMgYSBmaWxlCisrbmFtZS4gQSBob3N0IG5hbWUgb3IgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGl0IG1hdGNoZXMgYW55IGhvc3QgbmFtZQorK29yIGFkZHJlc3MgcGF0dGVybiBsaXN0ZWQgaW4gdGhlIG5hbWVkIGZpbGUuIFRoZSBmaWxlIGZvcm1hdCBpcworK3plcm8gb3IgbW9yZSBsaW5lcyB3aXRoIHplcm8gb3IgbW9yZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBwYXR0ZXJucworK3NlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSBmaWxlIG5hbWUgcGF0dGVybiBjYW4gYmUgdXNlZCBhbnl3aGVyZQorK2EgaG9zdCBuYW1lIG9yIGFkZHJlc3MgcGF0dGVybiBjYW4gYmUgdXNlZC4KKysuSVAgXChidQorIFdpbGRjYXJkcyBgKlwnIGFuZCBgP1wnIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGhvc3RuYW1lcyBvciBJUCBhZGRyZXNzZXMuICBUaGlzCisgbWV0aG9kIG9mIG1hdGNoaW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYG5ldC9tYXNrXCcgbWF0Y2hpbmcsCisgaG9zdG5hbWUgbWF0Y2hpbmcgYmVnaW5uaW5nIHdpdGggYC5cJyBvciBJUCBhZGRyZXNzIG1hdGNoaW5nIGVuZGluZyB3aXRoIGAuXCcuCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6Mjc6MDUuMDAwMDAwMDAwICswMjAwCitAQCAtMjUzLDYgKzI1MywyNiBAQAorICAgICB9CisgfQorIAorKy8qIGhvc3RmaWxlX21hdGNoIC0gbG9vayB1cCBob3N0IHBhdHRlcm5zIGZyb20gZmlsZSAqLworKworK3N0YXRpYyBpbnQgaG9zdGZpbGVfbWF0Y2gocGF0aCwgaG9zdCkKKytjaGFyICAgKnBhdGg7Cisrc3RydWN0IGhvc3RzX2luZm8gKmhvc3Q7CisreworKyAgICBjaGFyICAgIHRva1tCVUZTSVpdOworKyAgICBpbnQgICAgIG1hdGNoID0gTk87CisrICAgIEZJTEUgICAqZnA7CisrCisrICAgIGlmICgoZnAgPSBmb3BlbihwYXRoLCAiciIpKSAhPSAwKSB7CisrCXdoaWxlIChmc2NhbmYoZnAsICIlcyIsIHRvaykgPT0gMSAmJiAhKG1hdGNoID0gaG9zdF9tYXRjaCh0b2ssIGhvc3QpKSkKKysJICAgICAvKiB2b2lkICovIDsKKysJZmNsb3NlKGZwKTsKKysgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpIHsKKysJdGNwZF93YXJuKCJvcGVuICVzOiAlbSIsIHBhdGgpOworKyAgICB9CisrICAgIHJldHVybiAobWF0Y2gpOworK30KKysKKyAvKiBob3N0X21hdGNoIC0gbWF0Y2ggaG9zdCBuYW1lIGFuZC9vciBhZGRyZXNzIGFnYWluc3QgcGF0dGVybiAqLworIAorIHN0YXRpYyBpbnQgaG9zdF9tYXRjaCh0b2ssIGhvc3QpCitAQCAtMjgwLDYgKzMwMCw4IEBACisgCXRjcGRfd2FybigibmV0Z3JvdXAgc3VwcG9ydCBpcyBkaXNhYmxlZCIpOwkvKiBub3QgdGNwZF9qdW1wKCkgKi8KKyAJcmV0dXJuIChOTyk7CisgI2VuZGlmCisrICAgIH0gZWxzZSBpZiAodG9rWzBdID09ICcvJykgewkJCS8qIC9maWxlIGhhY2sgKi8KKysJcmV0dXJuIChob3N0ZmlsZV9tYXRjaCh0b2ssIGhvc3QpKTsKKyAgICAgfSBlbHNlIGlmIChTVFJfRVEodG9rLCAiS05PV04iKSkgewkJLyogY2hlY2sgYWRkcmVzcyBhbmQgbmFtZSAqLworIAljaGFyICAgKm5hbWUgPSBldmFsX2hvc3RuYW1lKGhvc3QpOworIAlyZXR1cm4gKFNUUl9ORShldmFsX2hvc3RhZGRyKGhvc3QpLCB1bmtub3duKSAmJiBIT1NUTkFNRV9LTk9XTihuYW1lKSk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDA0LTA0LTEwIDE5OjI3OjA1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM1Myw2ICszNTMsOCBAQAorIHsKKyAgICAgaWYgKHBhdFswXSA9PSAnQCcpIHsKKyAJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggXCJAXCIiLCBwYXQpOworKyAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLycpIHsKKysJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggXCIvXCIiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLicpIHsKKyAJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggZG90IiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbc3RybGVuKHBhdCkgLSAxXSA9PSAnLicpIHsKK0BAIC0zODUsNiArMzg3LDggQEAKKyB7CisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CQkJLyogQG5ldGdyb3VwICovCisgCXRjcGRfd2FybigiJXM6IHVzZXIgbmFtZSBiZWdpbnMgd2l0aCBcIkBcIiIsIHBhdCk7CisrICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcvJykgeworKwl0Y3BkX3dhcm4oIiVzOiB1c2VyIG5hbWUgYmVnaW5zIHdpdGggXCIvXCIiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLicpIHsKKyAJdGNwZF93YXJuKCIlczogdXNlciBuYW1lIGJlZ2lucyB3aXRoIGRvdCIsIHBhdCk7CisgICAgIH0gZWxzZSBpZiAocGF0W3N0cmxlbihwYXQpIC0gMV0gPT0gJy4nKSB7CitAQCAtNDMwLDggKzQzNCwxMyBAQAorIHN0YXRpYyBpbnQgY2hlY2tfaG9zdChwYXQpCisgY2hhciAgICpwYXQ7CisgeworKyAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworICAgICBjaGFyICAgKm1hc2s7CisgICAgIGludCAgICAgYWRkcl9jb3VudCA9IDE7CisrICAgIEZJTEUgICAqZnA7CisrICAgIHN0cnVjdCB0Y3BkX2NvbnRleHQgc2F2ZWRfY29udGV4dDsKKysgICAgY2hhciAgICpjcDsKKysgICAgY2hhciAgICp3c3AgPSAiIFx0XHJcbiI7CisgCisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CQkJLyogQG5ldGdyb3VwICovCisgI2lmZGVmIE5PX05FVEdSRU5UCitAQCAtNDUwLDYgKzQ1OSwyMSBAQAorIAl0Y3BkX3dhcm4oIm5ldGdyb3VwIHN1cHBvcnQgZGlzYWJsZWQiKTsKKyAjZW5kaWYKKyAjZW5kaWYKKysgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy8nKSB7CQkJLyogL3BhdGgvbmFtZSAqLworKwlpZiAoKGZwID0gZm9wZW4ocGF0LCAiciIpKSAhPSAwKSB7CisrCSAgICBzYXZlZF9jb250ZXh0ID0gdGNwZF9jb250ZXh0OworKwkgICAgdGNwZF9jb250ZXh0LmZpbGUgPSBwYXQ7CisrCSAgICB0Y3BkX2NvbnRleHQubGluZSA9IDA7CisrCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CisrCQl0Y3BkX2NvbnRleHQubGluZSsrOworKwkJZm9yIChjcCA9IHN0cnRvayhidWYsIHdzcCk7IGNwOyBjcCA9IHN0cnRvaygoY2hhciAqKSAwLCB3c3ApKQorKwkJICAgIGNoZWNrX2hvc3QoY3ApOworKwkgICAgfQorKwkgICAgdGNwZF9jb250ZXh0ID0gc2F2ZWRfY29udGV4dDsKKysJICAgIGZjbG9zZShmcCk7CisrCX0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisrCSAgICB0Y3BkX3dhcm4oIm9wZW4gJXM6ICVtIiwgcGF0KTsKKysJfQorICAgICB9IGVsc2UgaWYgKG1hc2sgPSBzcGxpdF9hdChwYXQsICcvJykpIHsJLyogbmV0d29yay9uZXRtYXNrICovCisgI2lmZGVmIElORVQ2CisgCWludCBtYXNrX2xlbjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3VzYWdpX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3VzYWdpX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjBlOGQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTFfdXNhZ2lfZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtdU4gdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJTW9uIE1heSAyMCAxNDowMDo1NiAyMDAyCisrKysgdGNwX3dyYXBwZXJzXzcuNi5uZXcvaG9zdHNfYWNjZXNzLmMJTW9uIE1heSAyMCAxNDoyNTowNSAyMDAyCitAQCAtNDQ4LDYgKzQ0OCwxNSBAQAorICAgICBpbnQgbGVuLCBtYXNrX2xlbiwgaSA9IDA7CisgICAgIGNoYXIgY2g7CisgCisrICAgIC8qCisrICAgICAqIEJlaGF2aW9yIG9mIGdldGFkZHJpbmZvKCkgYWdhaW5zdCBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3MgaXMKKysgICAgICogZGlmZmVyZW50IGJldHdlZW4gS0FNRSBhbmQgU29sYXJpczguICBXaGlsZSBLQU1FIHJldHVybnMKKysgICAgICogQUZfSU5FVDYsIFNvbGFyaXM4IHJldHVybnMgQUZfSU5FVC4gIFNvLCB3ZSBhdm9pZCB0aGlzIGhlcmUuCisrICAgICAqLworKyAgICBpZiAoU1RSTl9FUShzdHJpbmcsICI6OmZmZmY6IiwgNykKKysJJiYgZG90X3F1YWRfYWRkcihzdHJpbmcgKyA3KSAhPSBJTkFERFJfTk9ORSkKKysJcmV0dXJuIChtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcgKyA3KSk7CisrCisgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKK0BAIC00NTcsMTMgKzQ2Niw2IEBACisgICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworICAgICBmcmVlYWRkcmluZm8ocmVzKTsKKyAKKy0gICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyLnNpbjZfYWRkcikpIHsKKy0JaWYgKCgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKy0JIHx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKQorLQkgICAgcmV0dXJuIChOTyk7CistCXJldHVybiAoKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbMTJdICYgbWFzaykgPT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSk7CistICAgIH0KKy0KKyAgICAgLyogbWF0Y2ggSVB2NiBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL3ByZWZpeGxlbiAqLworICAgICBsZW4gPSBzdHJsZW4obmV0X3Rvayk7CisgICAgIGlmICgqbmV0X3RvayAhPSAnWycgfHwgbmV0X3Rva1tsZW4gLSAxXSAhPSAnXScpCitkaWZmIC11TiB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jIHRjcF93cmFwcGVyc183LjYubmV3L3NvY2tldC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYwlNb24gTWF5IDIwIDEzOjQ4OjM1IDIwMDIKKysrKyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9zb2NrZXQuYwlNb24gTWF5IDIwIDE0OjIyOjI3IDIwMDIKK0BAIC0yMjgsNyArMjI4LDcgQEAKKyAJaGludHMuYWlfZmFtaWx5ID0gc2luLT5zYV9mYW1pbHk7CisgCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRSB8IEFJX05VTUVSSUNIT1NUOworLQlpZiAoKGVyciA9IGdldGFkZHJpbmZvKGhvc3QtPm5hbWUsIE5VTEwsICZoaW50cywgJnJlczApID09IDApKSB7CisrCWlmICgoZXJyID0gZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkpID09IDApIHsKKyAJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKyAJICAgIHJlczAgPSBOVUxMOworIAkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Mjg5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMl9tYWtlZmlsZV9jb25maWcucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMjAwMy0wOC0yMSAwMTo0MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDMtMDgtMjEgMDE6NDM6MzUuMDAwMDAwMDAwICswMjAwCitAQCAtNDUsNyArNDUsNyBAQAorICMKKyAjIFN5c1YuNCBTb2xhcmlzIDIueCBPU0YgQUlYCisgI1JFQUxfREFFTU9OX0RJUj0vdXNyL3NiaW4KKy0jCisrUkVBTF9EQUVNT05fRElSPS91c3Ivc2JpbgorICMgQlNEIDQuNAorICNSRUFMX0RBRU1PTl9ESVI9L3Vzci9saWJleGVjCisgIworQEAgLTUxMiw2ICs1MTksNyBAQAorICMgKGV4YW1wbGVzOiBhbGxvdywgZGVueSwgYmFubmVycywgdHdpc3QgYW5kIHNwYXduKS4KKyAjIAorICNTVFlMRQk9IC1EUFJPQ0VTU19PUFRJT05TCSMgRW5hYmxlIGxhbmd1YWdlIGV4dGVuc2lvbnMuCisrU1RZTEUgPSAtRFBST0NFU1NfT1BUSU9OUworIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIE9wdGlvbmFsOiBDaGFuZ2luZyB0aGUgZGVmYXVsdCBkaXNwb3NpdGlvbiBvZiBsb2dmaWxlIHJlY29yZHMKK0BAIC01MzUsNiArNTQzLDcgQEAKKyAjIFRoZSBMT0dfWFhYIG5hbWVzIGJlbG93IGFyZSB0YWtlbiBmcm9tIHRoZSAvdXNyL2luY2x1ZGUvc3lzbG9nLmggZmlsZS4KKyAKKyBGQUNJTElUWT0gTE9HX01BSUwJIyBMT0dfTUFJTCBpcyB3aGF0IG1vc3Qgc2VuZG1haWwgZGFlbW9ucyB1c2UKKytGQUNJTElUWT0gTE9HX0RBRU1PTgorIAorICMgVGhlIHN5c2xvZyBwcmlvcml0eSBhdCB3aGljaCBzdWNjZXNzZnVsIGNvbm5lY3Rpb25zIGFyZSBsb2dnZWQuCisgCitAQCAtNjMxLDYgKzY0MCw3IEBACisgIyBsb29rdXBzIGFsdG9nZXRoZXIsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLgorIAorIFBBUkFOT0lEPSAtRFBBUkFOT0lECisrUEFSQU5PSUQ9CisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgT3B0aW9uYWw6IHR1cm5pbmcgb2ZmIGhvc3RuYW1lIGxvb2t1cHMKK0BAIC02NDQsNiArNjU0LDcgQEAKKyAjIG1vZGUgKHNlZSBwcmV2aW91cyBzZWN0aW9uKSBhbmQgY29tbWVudCBvdXQgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uLgorIAorIEhPU1ROQU1FPSAtREFMV0FZU19IT1NUTkFNRQorK0hPU1ROQU1FPQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgT3B0aW9uYWw6IFR1cm5pbmcgb24gaG9zdCBBRERSRVNTIGNoZWNraW5nCitAQCAtNjcwLDYgKzY4MSw3IEBACisgIyBTb2xhcmlzIDIueCwgYW5kIExpbnV4LiBTZWUgeW91ciBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAjCisgIyBLSUxMX09QVD0gLURLSUxMX0lQX09QVElPTlMKKytLSUxMX09QVD0gLURLSUxMX0lQX09QVElPTlMKKyAKKyAjIyBFbmQgY29uZmlndXJhdGlvbiBvcHRpb25zCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTY3Nyw5ICs2ODksMTAgQEAKKyAjIFByb3RlY3Rpb24gYWdhaW5zdCB3ZWlyZCBzaGVsbHMgb3Igd2VpcmQgbWFrZSBwcm9ncmFtcy4KKyAKKyBTSEVMTAk9IC9iaW4vc2gKKy0uYy5vOjsJJChDQykgJChDRkxBR1MpIC1jICQqLmMKKysuYy5vOjsJJChDQykgJChDRkxBR1MpIC1vICQqLm8gLWMgJCouYworIAorLUNGTEFHUwk9IC1PIC1ERkFDSUxJVFk9JChGQUNJTElUWSkgJChBQ0NFU1MpICQoUEFSQU5PSUQpICQoTkVUR1JPVVApIFwKKytDT1BUUwk9IC1PMiAtZworK0NGTEFHUwk9ICQoQ09QVFMpIC1ERkFDSUxJVFk9JChGQUNJTElUWSkgJChBQ0NFU1MpICQoUEFSQU5PSUQpICQoTkVUR1JPVVApIFwKKyAJJChCVUdTKSAkKFNZU1RZUEUpICQoQVVUSCkgJChVTUFTSykgXAorIAktRFJFQUxfREFFTU9OX0RJUj1cIiQoUkVBTF9EQUVNT05fRElSKVwiICQoU1RZTEUpICQoS0lMTF9PUFQpIFwKKyAJLURTRVZFUklUWT0kKFNFVkVSSVRZKSAtRFJGQzkzMV9USU1FT1VUPSQoUkZDOTMxX1RJTUVPVVQpIFwKK0BAIC03MTIsMTAgKzcyNSwxMSBAQAorIAorIGNvbmZpZy1jaGVjazoKKyAJQHNldCArZTsgdGVzdCAtbiAiJChSRUFMX0RBRU1PTl9ESVIpIiB8fCB7IG1ha2U7IGV4aXQgMTsgfQorLQlAc2V0ICtlOyBlY2hvICQoQ0ZMQUdTKSA+L3RtcC9jZmxhZ3MuJCQkJCA7IFwKKy0JaWYgY21wIGNmbGFncyAvdG1wL2NmbGFncy4kJCQkIDsgXAorLQl0aGVuIHJtIC90bXAvY2ZsYWdzLiQkJCQgOyBcCistCWVsc2UgbXYgL3RtcC9jZmxhZ3MuJCQkJCBjZmxhZ3MgOyBcCisrCUBzZXQgK2U7IGVjaG8gJChDRkxBR1MpID5jZmxhZ3MubmV3IDsgXAorKwlpZiBjbXAgY2ZsYWdzIGNmbGFncy5uZXcgOyBcCisrCXRoZW4gcm0gY2ZsYWdzLm5ldyA7IFwKKysJZWxzZSBtdiBjZmxhZ3MubmV3IGNmbGFncyA7IFwKKyAJZmkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorKwlAaWYgWyAhIC1kIHNoYXJlZCBdOyB0aGVuIG1rZGlyIHNoYXJlZDsgZmkKKyAKKyAkKExJQik6CSQoTElCX09CSikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEzX3NobGliX3dlYWtzeW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTM5NmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoCkBAIC0wLDAgKzEsMjU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkyMDA0LTA1LTAyIDE1OjM3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUJMjAwNC0wNS0wMiAxNTozMTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTAsMTUgKzE1MCwxNSBAQAorIAorIGxpbnV4OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPXdlYWtfc3ltYm9scy5vIFwKKyAJTkVUR1JPVVA9Ii1ETkVUR1JPVVAiIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorLQlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKyAKKyBnbnU6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorLQlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9d2Vha19zeW1ib2xzLm8gXAorIAlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorLQlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IiIGFsbAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURIQVZFX1dFQUtTWU1TIC1EX1JFRU5UUkFOVCIgYWxsCisgCisgIyBUaGlzIGlzIGdvb2QgZm9yIG1hbnkgU1lTVitCU0QgaHlicmlkcyB3aXRoIE5JUywgcHJvYmFibHkgYWxzbyBmb3IgSFAtVVggNy54LgorIGhwdXggaHB1eDggaHB1eDkgaHB1eDEwOgorQEAgLTcxMyw3ICs3MTMsMjIgQEAKKyAKKyBMSUIJPSBsaWJ3cmFwLmEKKyAKKy1hbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrCisrc2hhcmVkLyUubzogJS5jCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKFNIQ0ZMQUdTKSAtYyAkPCAtbyAkQAorKworK1NPTUFKT1IgPSAwCisrU09NSU5PUiA9IDcuNgorKworK1NITElCCQk9IHNoYXJlZC9saWJ3cmFwLnNvLiQoU09NQUpPUikuJChTT01JTk9SKQorK1NITElCU09NQUoJPSBzaGFyZWQvbGlid3JhcC5zby4kKFNPTUFKT1IpCisrU0hMSUJTTwkJPSBzaGFyZWQvbGlid3JhcC5zbworK1NITElCRkxBR1MJPSAtTHNoYXJlZCAtbHdyYXAKKysKKytTSExJTktGTEFHUyA9IC1zaGFyZWQgLVhsaW5rZXIgLXNvbmFtZSAtWGxpbmtlciBsaWJ3cmFwLnNvLiQoU09NQUpPUikgLWxjICQoTElCUykKKytTSENGTEFHUyA9IC1mUElDIC1zaGFyZWQgLURfUkVFTlRSQU5UCisrU0hMSUJfT0JKPSAkKGFkZHByZWZpeCBzaGFyZWQvLCAkKExJQl9PQkopKTsKKysKKythbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrICQoTElCKQorIAorICMgSW52YWxpZGF0ZSBhbGwgb2JqZWN0IGZpbGVzIHdoZW4gdGhlIGNvbXBpbGVyIG9wdGlvbnMgKENGTEFHUykgaGF2ZSBjaGFuZ2VkLgorIAorQEAgLTczMSwyNyArNzQ2LDMzIEBACisgCSQoQVIpICQoQVJGTEFHUykgJChMSUIpICQoTElCX09CSikKKyAJLSQoUkFOTElCKSAkKExJQikKKyAKKy10Y3BkOgl0Y3BkLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChMSUIpICQoTElCUykKKyskKFNITElCKTogJChTSExJQl9PQkopCisrCXJtIC1mICQoU0hMSUIpCisrCSQoQ0MpIC1vICQoU0hMSUIpICQoU0hMSU5LRkxBR1MpICQoU0hMSUJfT0JKKQorKwlsbiAtc2YgJChub3RkaXIgJChTSExJQikpICQoU0hMSUJTT01BSikKKysJbG4gLXNmICQobm90ZGlyICQoU0hMSUJTT01BSikpICQoU0hMSUJTTykKKysKKyt0Y3BkOgl0Y3BkLm8gJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIHRjcGQubyAkKFNITElCRkxBR1MpCisgCisgbWlzY2Q6CW1pc2NkLm8gJChMSUIpCisgCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaXNjZC5vICQoTElCKSAkKExJQlMpCisgCistc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoTElCKSAkKExJQlMpCisrc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERNQVRDSF9PQkogPSB0Y3BkbWF0Y2gubyBmYWtlbG9nLm8gaW5ldGNmLm8gc2NhZmZvbGQubworIAorLXRjcGRtYXRjaDogJChUQ1BETUFUQ0hfT0JKKSAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChMSUIpICQoTElCUykKKyt0Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChTSExJQkZMQUdTKQorIAorLXRyeS1mcm9tOiB0cnktZnJvbS5vIGZha2Vsb2cubyAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoTElCKSAkKExJQlMpCisrdHJ5LWZyb206IHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCRkxBR1MpCisgCisgVENQRENIS19PQkogPSB0Y3BkY2hrLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKy10Y3BkY2hrOiAkKFRDUERDSEtfT0JKKSAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoTElCKSAkKExJQlMpCisrdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKyAKKyBzaGFyOgkkKEtJVCkKKyAJQHNoYXIgJChLSVQpCitAQCAtNzY3LDcgKzc4OCw5IEBACisgCisgY2xlYW46CisgCXJtIC1mIHRjcGQgbWlzY2Qgc2FmZV9maW5nZXIgdGNwZG1hdGNoIHRjcGRjaGsgdHJ5LWZyb20gKi5bb2FdIGNvcmUgXAorKwlsaWJ3cmFwKi5zbyogXAorIAljZmxhZ3MKKysJcm0gLXJmIHNoYXJlZC8KKyAKKyB0aWR5OgljbGVhbgorIAljaG1vZCAtUiBhK3IgLgorQEAgLTkxMyw1ICs5MzYsNiBAQAorIHVwZGF0ZS5vOiBteXN0ZGFyZy5oCisgdXBkYXRlLm86IHRjcGQuaAorIHZmcHJpbnRmLm86IGNmbGFncworK3dlYWtfc3ltYm9scy5vOiB0Y3BkLmgKKyB3b3JrYXJvdW5kcy5vOiBjZmxhZ3MKKyB3b3JrYXJvdW5kcy5vOiB0Y3BkLmgKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaAkyMDA0LTA1LTAyIDE1OjM3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCTIwMDQtMDUtMDIgMTU6Mzc6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtNCw2ICs0LDE1IEBACisgICAqIEF1dGhvcjogV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorICAgKi8KKyAKKysjaWZuZGVmIF9UQ1BXUkFQUEVSU19UQ1BEX0gKKysjZGVmaW5lIF9UQ1BXUkFQUEVSU19UQ1BEX0gKKysKKysvKiBOZWVkIGRlZmluaXRpb25zIG9mIHN0cnVjdCBzb2NrYWRkcl9pbiBhbmQgRklMRS4gKi8KKysjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKworK19fQkVHSU5fREVDTFMKKysKKyAvKiBTdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgb25lIGNvbW11bmljYXRpb25zIGVuZHBvaW50LiAqLworIAorICNkZWZpbmUgU1RSSU5HX0xFTkdUSAkxMjgJCS8qIGhvc3RzLCB1c2VycywgcHJvY2Vzc2VzICovCitAQCAtMjksMTAgKzM4LDEwIEBACisgICAgIGNoYXIgICAgcGlkWzEwXTsJCQkvKiBhY2Nlc3MgdmlhIGV2YWxfcGlkKHJlcXVlc3QpICovCisgICAgIHN0cnVjdCBob3N0X2luZm8gY2xpZW50WzFdOwkJLyogY2xpZW50IGVuZHBvaW50IGluZm8gKi8KKyAgICAgc3RydWN0IGhvc3RfaW5mbyBzZXJ2ZXJbMV07CQkvKiBzZXJ2ZXIgZW5kcG9pbnQgaW5mbyAqLworLSAgICB2b2lkICAoKnNpbmspICgpOwkJCS8qIGRhdGFncmFtIHNpbmsgZnVuY3Rpb24gb3IgMCAqLworLSAgICB2b2lkICAoKmhvc3RuYW1lKSAoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGhvc3RuYW1lICovCistICAgIHZvaWQgICgqaG9zdGFkZHIpICgpOwkJLyogYWRkcmVzcyB0byBwcmludGFibGUgYWRkcmVzcyAqLworLSAgICB2b2lkICAoKmNsZWFudXApICgpOwkJLyogY2xlYW51cCBmdW5jdGlvbiBvciAwICovCisrICAgIHZvaWQgICgqc2luaykgKGludCk7CQkvKiBkYXRhZ3JhbSBzaW5rIGZ1bmN0aW9uIG9yIDAgKi8KKysgICAgdm9pZCAgKCpob3N0bmFtZSkgKHN0cnVjdCBob3N0X2luZm8gKik7IC8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGhvc3RuYW1lICovCisrICAgIHZvaWQgICgqaG9zdGFkZHIpIChzdHJ1Y3QgaG9zdF9pbmZvICopOyAvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCisrICAgIHZvaWQgICgqY2xlYW51cCkgKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7IC8qIGNsZWFudXAgZnVuY3Rpb24gb3IgMCAqLworICAgICBzdHJ1Y3QgbmV0Y29uZmlnICpjb25maWc7CQkvKiBuZXRkaXIgaGFuZGxlICovCisgfTsKKyAKK0BAIC03MCwyMCArNzksMjcgQEAKKyAjZGVmaW5lIGZyb21ob3N0IHNvY2tfaG9zdAkJLyogbm8gVExJIHN1cHBvcnQgbmVlZGVkICovCisgI2VuZGlmCisgCistZXh0ZXJuIGludCBob3N0c19hY2Nlc3MoKTsJCS8qIGFjY2VzcyBjb250cm9sICovCistZXh0ZXJuIHZvaWQgc2hlbGxfY21kKCk7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKy1leHRlcm4gY2hhciAqcGVyY2VudF94KCk7CQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworLWV4dGVybiB2b2lkIHJmYzkzMSgpOwkJCS8qIGNsaWVudCBuYW1lIGZyb20gUkZDIDkzMSBkYWVtb24gKi8KKy1leHRlcm4gdm9pZCBjbGVhbl9leGl0KCk7CQkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworLWV4dGVybiB2b2lkIHJlZnVzZSgpOwkJCS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCistZXh0ZXJuIGNoYXIgKnhnZXRzKCk7CQkJLyogZmdldHMoKSBvbiBzdGVyb2lkcyAqLworLWV4dGVybiBjaGFyICpzcGxpdF9hdCgpOwkJLyogc3RyY2hyKCkgYW5kIHNwbGl0ICovCistZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG90X3F1YWRfYWRkcigpOwkvKiByZXN0cmljdGVkIGluZXRfYWRkcigpICovCisrZXh0ZXJuIGludCBob3N0c19hY2Nlc3Moc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdCk7CS8qIGFjY2VzcyBjb250cm9sICovCisrZXh0ZXJuIHZvaWQgc2hlbGxfY21kKGNoYXIgKik7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKytleHRlcm4gY2hhciAqcGVyY2VudF94KGNoYXIgKiwgaW50LCBjaGFyICosIHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CisrCQkJCQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworK2V4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosIGNoYXIgKik7CisrCQkJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCisrZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworK2V4dGVybiB2b2lkIHJlZnVzZShzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworK2V4dGVybiBjaGFyICp4Z2V0cyhjaGFyICosIGludCwgRklMRSAqKTsJLyogZmdldHMoKSBvbiBzdGVyb2lkcyAqLworK2V4dGVybiBjaGFyICpzcGxpdF9hdChjaGFyICosIGludCk7CQkvKiBzdHJjaHIoKSBhbmQgc3BsaXQgKi8KKytleHRlcm4gdW5zaWduZWQgbG9uZyBkb3RfcXVhZF9hZGRyKGNoYXIgKik7CS8qIHJlc3RyaWN0ZWQgaW5ldF9hZGRyKCkgKi8KKyAKKyAvKiBHbG9iYWwgdmFyaWFibGVzLiAqLworIAorKyNpZmRlZiBIQVZFX1dFQUtTWU1TCisrZXh0ZXJuIGludCBhbGxvd19zZXZlcml0eSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOyAvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisrZXh0ZXJuIGludCBkZW55X3NldmVyaXR5IF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7IC8qIGZvciBjb25uZWN0aW9uIGxvZ2dpbmcgKi8KKysjZWxzZQorIGV4dGVybiBpbnQgYWxsb3dfc2V2ZXJpdHk7CQkvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisgZXh0ZXJuIGludCBkZW55X3NldmVyaXR5OwkJLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworKyNlbmRpZgorIGV4dGVybiBjaGFyICpob3N0c19hbGxvd190YWJsZTsJCS8qIGZvciB2ZXJpZmljYXRpb24gbW9kZSByZWRpcmVjdGlvbiAqLworIGV4dGVybiBjaGFyICpob3N0c19kZW55X3RhYmxlOwkJLyogZm9yIHZlcmlmaWNhdGlvbiBtb2RlIHJlZGlyZWN0aW9uICovCisgZXh0ZXJuIGludCBob3N0c19hY2Nlc3NfdmVyYm9zZTsJLyogZm9yIHZlcmJvc2UgbWF0Y2hpbmcgbW9kZSAqLworQEAgLTk4LDYgKzExNCw4IEBACisgI2lmZGVmIF9fU1REQ19fCisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3RfaW5pdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICosLi4uKTsKKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9zZXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqLC4uLik7CisrZXh0ZXJuIGludCBob3N0c19jdGwoY2hhciAqZGFlbW9uLCBjaGFyICpjbGllbnRfbmFtZSwgY2hhciAqY2xpZW50X2FkZHIsCisrCQljaGFyICpjbGllbnRfdXNlcik7CisgI2Vsc2UKKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9pbml0KCk7CS8qIGluaXRpYWxpemUgcmVxdWVzdCAqLworIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X3NldCgpOwkvKiB1cGRhdGUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KK0BAIC0xMjEsMjAgKzEzOSwyMyBAQAorICAgKiBob3N0X2luZm8gc3RydWN0dXJlcyBzZXJ2ZSBhcyBjYWNoZXMgZm9yIHRoZSBsb29rdXAgcmVzdWx0cy4KKyAgICovCisgCistZXh0ZXJuIGNoYXIgKmV2YWxfdXNlcigpOwkJLyogY2xpZW50IHVzZXIgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9ob3N0bmFtZSgpOwkJLyogcHJpbnRhYmxlIGhvc3RuYW1lICovCistZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGFkZHIoKTsJCS8qIHByaW50YWJsZSBob3N0IGFkZHJlc3MgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbygpOwkJLyogaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9jbGllbnQoKTsJCS8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworLWV4dGVybiBjaGFyICpldmFsX3NlcnZlcigpOwkJLyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfdXNlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGllbnQgdXNlciAqLworK2V4dGVybiBjaGFyICpldmFsX2hvc3RuYW1lKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIHByaW50YWJsZSBob3N0bmFtZSAqLworK2V4dGVybiBjaGFyICpldmFsX2hvc3RhZGRyKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIHByaW50YWJsZSBob3N0IGFkZHJlc3MgKi8KKytleHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbyhzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworK2V4dGVybiBjaGFyICpldmFsX2NsaWVudChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworK2V4dGVybiBjaGFyICpldmFsX3NlcnZlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworICNkZWZpbmUgZXZhbF9kYWVtb24ocikJKChyKS0+ZGFlbW9uKQkvKiBkYWVtb24gcHJvY2VzcyBuYW1lICovCisgI2RlZmluZSBldmFsX3BpZChyKQkoKHIpLT5waWQpCS8qIHByb2Nlc3MgaWQgKi8KKyAKKyAvKiBTb2NrZXQtc3BlY2lmaWMgbWV0aG9kcywgaW5jbHVkaW5nIEROUyBob3N0bmFtZSBsb29rdXBzLiAqLworIAorLWV4dGVybiB2b2lkIHNvY2tfaG9zdCgpOwkJLyogbG9vayB1cCBlbmRwb2ludCBhZGRyZXNzZXMgKi8KKy1leHRlcm4gdm9pZCBzb2NrX2hvc3RuYW1lKCk7CQkvKiB0cmFuc2xhdGUgYWRkcmVzcyB0byBob3N0bmFtZSAqLworLWV4dGVybiB2b2lkIHNvY2tfaG9zdGFkZHIoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKysvKiBsb29rIHVwIGVuZHBvaW50IGFkZHJlc3NlcyAqLworK2V4dGVybiB2b2lkIHNvY2tfaG9zdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOworKy8qIHRyYW5zbGF0ZSBhZGRyZXNzIHRvIGhvc3RuYW1lICovCisrZXh0ZXJuIHZvaWQgc29ja19ob3N0bmFtZShzdHJ1Y3QgaG9zdF9pbmZvICopOworKy8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKytleHRlcm4gdm9pZCBzb2NrX2hvc3RhZGRyKHN0cnVjdCBob3N0X2luZm8gKik7CisgI2RlZmluZSBzb2NrX21ldGhvZHMocikgXAorIAl7IChyKS0+aG9zdG5hbWUgPSBzb2NrX2hvc3RuYW1lOyAociktPmhvc3RhZGRyID0gc29ja19ob3N0YWRkcjsgfQorIAorQEAgLTE4Miw3ICsyMDMsNyBAQAorICAgKiBiZWhhdmlvci4KKyAgICovCisgCistZXh0ZXJuIHZvaWQgcHJvY2Vzc19vcHRpb25zKCk7CQkvKiBleGVjdXRlIG9wdGlvbnMgKi8KKytleHRlcm4gdm9pZCBwcm9jZXNzX29wdGlvbnMoY2hhciAqLCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIGV4ZWN1dGUgb3B0aW9ucyAqLworIGV4dGVybiBpbnQgZHJ5X3J1bjsJCQkvKiB2ZXJpZmljYXRpb24gZmxhZyAqLworIAorIC8qIEJ1ZyB3b3JrYXJvdW5kcy4gKi8KK0BAIC0yMjEsMyArMjQyLDcgQEAKKyAjZGVmaW5lIHN0cnRvawlteV9zdHJ0b2sKKyBleHRlcm4gY2hhciAqbXlfc3RydG9rKCk7CisgI2VuZGlmCisrCisrX19FTkRfREVDTFMKKysKKysjZW5kaWYKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd2Vha19zeW1ib2xzLmMgdGNwX3dyYXBwZXJzXzcuNi93ZWFrX3N5bWJvbHMuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy93ZWFrX3N5bWJvbHMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvd2Vha19zeW1ib2xzLmMJMjAwNC0wNS0wMiAxNTozMTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTEgQEAKKysgLyoKKysgICogQCgjKSB3ZWFrX3N5bWJvbHMuaCAxLjUgOTkvMTIvMjkgMjM6NTAKKysgICogCisrICAqIEF1dGhvcjogQW50aG9ueSBUb3ducyA8YWp0QGRlYmlhbi5vcmc+CisrICAqLworKworKyNpZmRlZiBIQVZFX1dFQUtTWU1TCisrI2luY2x1ZGUgPHN5c2xvZy5oPgorK2ludCBkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisraW50IGFsbG93X3NldmVyaXR5ID0gU0VWRVJJVFk7IAorKyNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTRfY2lkcl9zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTRfY2lkcl9zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTY4NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNF9jaWRyX3N1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDMtMDgtMjEgMDM6MTU6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtOTAsNiArOTAsMTAgQEAKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKyAuSVAgXChidQorK0FuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbW0nIGlzIGludGVycHJldGVkIGFzIGEKKytgbmV0L21hc2tsZW5ndGgnIHBhaXIsIHdoZXJlIGBtbScgaXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBgMScKKytiaXRzIGluIHRoZSBuZXRtYXNrIGFwcGxpZWQgdG8gdGhlIGBuLm4ubi5uJyBhZGRyZXNzLgorKy5JUCBcKGJ1CisgQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgW246bjpuOm46bjpuOm46bl0vbVwnIGlzIGludGVycHJldGVkIGFzIGEKKyBgW25ldF0vcHJlZml4bGVuXCcgcGFpci4gQW4gSVB2NiBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZgorIGBwcmVmaXhsZW5cJyBiaXRzIG9mIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUgYHByZWZpeGxlblwnIGJpdHMgb2YgdGhlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw4IEBACisgICAgIGlmICgoYWRkciA9IGRvdF9xdWFkX2FkZHIoc3RyaW5nKSkgPT0gSU5BRERSX05PTkUpCisgCXJldHVybiAoTk8pOworICAgICBpZiAoKG5ldCA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCistCXx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKSB7CisrCXx8ICgobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORQorKwkgICAgJiYgKG1hc2sgPSBjaWRyX21hc2tfYWRkcihtYXNrX3RvaykpID09IDApKSB7CisgI2lmbmRlZiBJTkVUNgorIAl0Y3BkX3dhcm4oImJhZCBuZXQvbWFzayBleHByZXNzaW9uOiAlcy8lcyIsIG5ldF90b2ssIG1hc2tfdG9rKTsKKyAjZW5kaWYKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvbWlzYy5jIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYwkyMDAzLTA4LTIxIDAzOjE1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtMTA3LDMgKzEwNywxNyBAQAorICAgICB9CisgICAgIHJldHVybiAocnVucyA9PSA0ID8gaW5ldF9hZGRyKHN0cikgOiBJTkFERFJfTk9ORSk7CisgfQorKworKy8qIGNpZHJfbWFza19hZGRyIC0gY29udmVydCBjaWRyIG5ldG1hc2sgbGVuZ3RoIHRvIGludGVybmFsIGZvcm0gKi8KKysKKyt1bnNpZ25lZCBsb25nIGNpZHJfbWFza19hZGRyKHN0cikKKytjaGFyICAgKnN0cjsKKyt7CisrICAgIGludCAgICAgbWFza2JpdHM7CisrCisrICAgIG1hc2tiaXRzID0gYXRvaShzdHIpOworKyAgICBpZiAobWFza2JpdHMgPCAxIHx8IG1hc2tiaXRzID4gMzIpCisrCXJldHVybiAoMCk7CisrICAgIHJldHVybiBodG9ubCgweEZGRkZGRkZGIDw8ICgzMiAtIG1hc2tiaXRzKSk7CisrfQorKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMJMjAwMy0wOC0yMSAwMzowOTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00OTcsMTIgKzQ5NywxMiBAQAorIAlpbnQgbWFza19sZW47CisgCisgCWlmICgoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCistCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSAmJiBjaWRyX21hc2tfYWRkcihtYXNrKSA9PSAwKQorIAkgICAgJiYgKCFpc19pbmV0Nl9hZGRyKHBhdCkKKyAJCXx8ICgobWFza19sZW4gPSBhdG9pKG1hc2spKSA8IDAgfHwgbWFza19sZW4gPiAxMjgpKSkKKyAjZWxzZQorIAlpZiAoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCistCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSAmJiBjaWRyX21hc2tfYWRkcihtYXNrKSA9PSAwKQorICNlbmRpZgorIAkgICAgdGNwZF93YXJuKCIlcy8lczogYmFkIG5ldC9tYXNrIHBhdHRlcm4iLCBwYXQsIG1hc2spOworICAgICB9IGVsc2UgaWYgKFNUUl9FUShwYXQsICJGQUlMIikpIHsJCS8qIG9ic29sZXRlICovCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNV9tYXRjaF9jbGFyaWZ5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2E2ODc0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTI1IDEyOjE3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0yNSAxMjoxNzo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC04OSw2ICs4OSw4IEBACisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisrYDI1NS4yNTUuMjU1LjI1NVwnIGlzIG5vdCBhIHZhbGlkIG1hc2sgdmFsdWUsIHNvIGEgc2luZ2xlIGhvc3QgY2FuIGJlCisrbWF0Y2hlZCBqdXN0IGJ5IGl0cyBJUC4KKyAuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbW0nIGlzIGludGVycHJldGVkIGFzIGEKKyBgbmV0L21hc2tsZW5ndGgnIHBhaXIsIHdoZXJlIGBtbScgaXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBgMScKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2V4cGFuZF9yZW1vdGVfcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2V4cGFuZF9yZW1vdGVfcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDg3Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ldmFsLmMgdGNwX3dyYXBwZXJzXzcuNi9ldmFsLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZXZhbC5jCTE5OTUtMDEtMzAgMTk6NTE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ldmFsLmMJMjAwNC0xMS0wNCAxMzo1OTowMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05OCw2ICs5OCwyOCBAQAorICAgICB9CisgfQorIAorKy8qIGV2YWxfcG9ydCAtIHJldHVybiBzdHJpbmcgd2l0aCB0aGUgcG9ydCAqLworK2NoYXIgICAqZXZhbF9wb3J0KHNhZGRyKQorKyNpZmRlZiBJTkVUNgorK3N0cnVjdCBzb2NrYWRkciAqc2FkZHI7CisrI2Vsc2UKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyOworKyNlbmRpZgorK3sKKysgICAgc3RhdGljIGNoYXIgcG9ydFsxNl07CisrICAgIGlmIChzYWRkciAhPSAwKSB7CisrICAgICAgICBzcHJpbnRmKHBvcnQsICIldSIsCisrI2lmZGVmIElORVQ2CisrICAgICAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYWRkciktPnNpbl9wb3J0KSk7CisrI2Vsc2UKKysgICAgICAgICAgICBudG9ocyhzYWRkci0+c2luX3BvcnQpKTsKKysjZW5kaWYKKysgICAgfSBlbHNlIHsKKysJc3RyY3B5KHBvcnQsICIwIik7CisrICAgIH0KKysgICAgcmV0dXJuIChwb3J0KTsKKyt9CisrCisgLyogZXZhbF9jbGllbnQgLSByZXR1cm4gc3RyaW5nIHdpdGggYXMgbXVjaCBhYm91dCB0aGUgY2xpZW50IGFzIHdlIGtub3cgKi8KKyAKKyBjaGFyICAgKmV2YWxfY2xpZW50KHJlcXVlc3QpCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0xMS0wNCAxMzoxNzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMTEtMDQgMTM6NTU6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMTc1LDYgKzE3NSw4IEBACisgdW5hdmFpbGFibGUuCisgLklQICIlbiAoJU4pIgorIFRoZSBjbGllbnQgKHNlcnZlcikgaG9zdCBuYW1lIChvciAidW5rbm93biIgb3IgInBhcmFub2lkIikuCisrLklQICIlciAoJVIpIgorK1RoZSBjbGllbnRzIChzZXJ2ZXJzKSBwb3J0IG51bWJlciAob3IgIjAiKS4KKyAuSVAgJXAKKyBUaGUgZGFlbW9uIHByb2Nlc3MgaWQuCisgLklQICVzCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfeC5jIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF94LmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF94LmMJMTk5NC0xMi0yOCAxNzo0MjozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfeC5jCTIwMDQtMTEtMDQgMTM6MTk6MjkuMDAwMDAwMDAwICswMTAwCitAQCAtNjMsNiArNjMsOCBAQAorIAkJY2ggPT0gJ24nID8gZXZhbF9ob3N0bmFtZShyZXF1ZXN0LT5jbGllbnQpIDoKKyAJCWNoID09ICdOJyA/IGV2YWxfaG9zdG5hbWUocmVxdWVzdC0+c2VydmVyKSA6CisgCQljaCA9PSAncCcgPyBldmFsX3BpZChyZXF1ZXN0KSA6CisrCQljaCA9PSAncicgPyBldmFsX3BvcnQocmVxdWVzdC0+Y2xpZW50LT5zaW4pIDoKKysJCWNoID09ICdSJyA/IGV2YWxfcG9ydChyZXF1ZXN0LT5zZXJ2ZXItPnNpbikgOgorIAkJY2ggPT0gJ3MnID8gZXZhbF9zZXJ2ZXIocmVxdWVzdCkgOgorIAkJY2ggPT0gJ3UnID8gZXZhbF91c2VyKHJlcXVlc3QpIDoKKyAJCWNoID09ICclJyA/ICIlIiA6ICh0Y3BkX3dhcm4oInVucmVjb2duaXplZCAlJSVjIiwgY2gpLCAiIik7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNC0xMS0wNCAxMzoxNzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA0LTExLTA0IDEzOjE5OjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTE0NSw2ICsxNDUsMTEgQEAKKyBleHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbyhzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworIGV4dGVybiBjaGFyICpldmFsX2NsaWVudChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworIGV4dGVybiBjaGFyICpldmFsX3NlcnZlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworKyNpZmRlZiBJTkVUNgorK2V4dGVybiBjaGFyICpldmFsX3BvcnQoc3RydWN0IHNvY2thZGRyICopOworKyNlbHNlCisrZXh0ZXJuIGNoYXIgKmV2YWxfcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisrI2VuZGlmCisgI2RlZmluZSBldmFsX2RhZW1vbihyKQkoKHIpLT5kYWVtb24pCS8qIGRhZW1vbiBwcm9jZXNzIG5hbWUgKi8KKyAjZGVmaW5lIGV2YWxfcGlkKHIpCSgociktPnBpZCkJLyogcHJvY2VzcyBpZCAqLworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvaGF2ZV9zdHJlcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjNTU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfbS5jIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF9tLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF9tLmMJMTk5NC0xMi0yOCAxNzo0MjozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfbS5jCTIwMDMtMDgtMjEgMDI6NDU6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtMjksMTEgKzI5LDE1IEBACisgCisgICAgIHdoaWxlICgqYnAgPSAqY3ApCisgCWlmICgqY3AgPT0gJyUnICYmIGNwWzFdID09ICdtJykgeworKyNpZmRlZiBIQVZFX1NUUkVSUk9SCisrCSAgICBzdHJjcHkoYnAsIHN0cmVycm9yKGVycm5vKSk7CisrI2Vsc2UKKyAJICAgIGlmIChlcnJubyA8IHN5c19uZXJyICYmIGVycm5vID4gMCkgeworIAkJc3RyY3B5KGJwLCBzeXNfZXJybGlzdFtlcnJub10pOworIAkgICAgfSBlbHNlIHsKKyAJCXNwcmludGYoYnAsICJVbmtub3duIGVycm9yICVkIiwgZXJybm8pOworIAkgICAgfQorKyNlbmRpZgorIAkgICAgYnAgKz0gc3RybGVuKGJwKTsKKyAJICAgIGNwICs9IDI7CisgCX0gZWxzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmEyMTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcub3JpZy9NYWtlZmlsZQkyMDA5LTA0LTA2IDEwOjU1OjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkyMDA5LTA0LTA2IDEwOjU3OjA0LjAwMDAwMDAwMCArMDAwMAorQEAgLTc0OCwzMSArNzQ4LDMxIEBACisgCisgJChTSExJQik6ICQoU0hMSUJfT0JKKQorIAlybSAtZiAkKFNITElCKQorLQkkKENDKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKysJJChDQykgJChMREZMQUdTKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKyAJbG4gLXNmICQobm90ZGlyICQoU0hMSUIpKSAkKFNITElCU09NQUopCisgCWxuIC1zZiAkKG5vdGRpciAkKFNITElCU09NQUopKSAkKFNITElCU08pCisgCisgdGNwZDoJdGNwZC5vICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorIAorIG1pc2NkOgltaXNjZC5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWlzY2QubyAkKExJQikgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBtaXNjZC5vICQoTElCKSAkKExJQlMpCisgCisgc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BETUFUQ0hfT0JKID0gdGNwZG1hdGNoLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKyB0Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoU0hMSUJGTEFHUykKKyAKKyB0cnktZnJvbTogdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERDSEtfT0JKID0gdGNwZGNoay5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCisgdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChUQ1BEQ0hLX09CSikgJChTSExJQkZMQUdTKQorIAorIHNoYXI6CSQoS0lUKQorIAlAc2hhciAkKEtJVCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTczNTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gZGFmODlkMjcyZTUxYjIxNTMwMTVjZTdmNTRhYjBiODYxODJlNjRjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyOCBKYW4gMjAxNSAxODo1MDoyMyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK21ha2U6ICoqKiBObyBydWxlIHRvIG1ha2UgdGFyZ2V0IGBjZmxhZ3MnLCBuZWVkZWQgYnkgYHRjcGQubycuICBTdG9wLgorCitMZXQgImNmbGFncyIgZGVwZW5kIG9uIGNvbmZpZy1jaGVjayB3aGljaCBnZW5lcmF0ZXMgY2ZsZ2FzIHdpbGwgZml4IHRoZQorcHJvYmxlbS4KKworQWxzbyBmaXhlZDoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgc2hhcmVkL2hvc3RzX2FjY2Vzcy5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgICAgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGZlNWU3MzIuLmY0Njg3NTEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC03MTQsNiArNzE0LDcgQEAgS0lUCT0gUkVBRE1FIG1pc2NkLmMgdGNwZC5jIGZyb21ob3N0LmMgaG9zdHNfYWNjZXNzLmMgc2hlbGxfY21kLmMgXAorIExJQgk9IGxpYndyYXAuYQorIAorIHNoYXJlZC8lLm86ICUuYworKwlbIC1kIHNoYXJlZCBdIHx8IG1rZGlyIC1wIHNoYXJlZAorIAkkKENDKSAkKENGTEFHUykgJChTSENGTEFHUykgLWMgJDwgLW8gJEAKKyAKKyBTT01BSk9SID0gMAorQEAgLTczMCw2ICs3MzEsOCBAQCBTSExJQl9PQko9ICQoYWRkcHJlZml4IHNoYXJlZC8sICQoTElCX09CSikpOworIAorIGFsbCBvdGhlcjogY29uZmlnLWNoZWNrIHRjcGQgdGNwZG1hdGNoIHRyeS1mcm9tIHNhZmVfZmluZ2VyIHRjcGRjaGsgJChMSUIpCisgCisrY2ZsYWdzOiBjb25maWctY2hlY2sKKysKKyAjIEludmFsaWRhdGUgYWxsIG9iamVjdCBmaWxlcyB3aGVuIHRoZSBjb21waWxlciBvcHRpb25zIChDRkxBR1MpIGhhdmUgY2hhbmdlZC4KKyAKKyBjb25maWctY2hlY2s6CitAQCAtNzM5LDcgKzc0Miw3IEBAIGNvbmZpZy1jaGVjazoKKyAJdGhlbiBybSBjZmxhZ3MubmV3IDsgXAorIAllbHNlIG12IGNmbGFncy5uZXcgY2ZsYWdzIDsgXAorIAlmaSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCistCUBpZiBbICEgLWQgc2hhcmVkIF07IHRoZW4gbWtkaXIgc2hhcmVkOyBmaQorKwlAWyAtZCBzaGFyZWQgXSB8fCBta2RpciAtcCBzaGFyZWQKKyAKKyAkKExJQik6CSQoTElCX09CSikKKyAJcm0gLWYgJChMSUIpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFuX2Zyb21ob3N0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFuX2Zyb21ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YmQ3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYW5fZnJvbWhvc3QucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjMJMjAwNC0wNC0yNSAwMDoxMDo0OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCTIwMDQtMDQtMjUgMDA6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMTQsNiArMTQsOSBAQAorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Rfc2V0KHJlcXVlc3QsIGtleSwgdmFsdWUsIC4uLiwgMCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorK3ZvaWQgZnJvbWhvc3QocmVxdWVzdCkKKytzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworKworIGludCBob3N0c19hY2Nlc3MocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorQEAgLTYwLDYgKzYzLDcgQEAKKyBpcyBhdmFpbGFibGUsIGhvc3QgbmFtZXMgYW5kIGNsaWVudCB1c2VyIG5hbWVzIGFyZSBsb29rZWQgdXAgb24gZGVtYW5kLAorIHVzaW5nIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBhcyBhIGNhY2hlLiAgaG9zdHNfYWNjZXNzKCkgcmV0dXJucyB6ZXJvIGlmCisgYWNjZXNzIHNob3VsZCBiZSBkZW5pZWQuCisrZnJvbWhvc3QoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaG9zdHNfYWNjZXNzKCkuCisgLlBQCisgaG9zdHNfY3RsKCkgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgcmVxdWVzdF9pbml0KCkgYW5kIGhvc3RzX2FjY2VzcygpCisgcm91dGluZXMgd2l0aCBhIHBlcmhhcHMgbW9yZSBjb252ZW5pZW50IGludGVyZmFjZSAodGhvdWdoIGl0IGRvZXMgbm90CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3JlbmFtZV9zdHJpbmdzX3ZhcmlhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NTA2MDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitTVFJJTkdTIG5hbWUgY29uZmxpY3RzIHdpdGggdmFyaWFibGUgZm9yIHN0cmluZ3MgdG9vbHMgKGUuZy4gaTU4Ni1vZS1saW51eC1zdHJpbmdzKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZS5vcmlnCTIwMTMtMDQtMTggMjM6NDE6NTguMjc3OTgxNzQwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDEzLTA0LTE4IDIzOjQyOjQyLjUxMzk3ODk2NiArMDIwMAorQEAgLTMwOSw3ICszMDksNyBAQAorIHB5cmFtaWQ6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0iZW52aXJvbi5vIHZmcHJpbnRmLm8iIFwKKy0JU1RSSU5HUz0iLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5IiBcCisrCVNUUklOR1NfRkxBR1M9Ii1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweSIgXAorIAlORVRHUk9VUD0iLURORVRHUk9VUCAtRFVTRV9HRVRET01BSU4iIFRMST0gYWxsCisgCisgIyBVbnRlc3RlZC4KK0BAIC00MTksNyArNDE5LDcgQEAKKyAjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGlmIHlvdXIgQyBsaWJyYXJ5IGRvZXMgbm90IHByb3ZpZGUgdGhlCisgIyBzdHJjaHIvc3RycmNoci9tZW1jbXAgcm91dGluZXMsIGJ1dCBjb21lcyB3aXRoIGluZGV4L3JpbmRleC9iY21wLgorICMKKy0jU1RSSU5HUz0gLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5CisrI1NUUklOR1NfRkxBR1M9IC1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBTeXN0ZW0gZGVwZW5kZW5jaWVzOiBzZWxlY3Rpb24gb2Ygbm9uLWRlZmF1bHQgb2JqZWN0IGxpYnJhcmllcy4KK0BAIC02OTAsNyArNjkwLDcgQEAKKyAJJChCVUdTKSAkKFNZU1RZUEUpICQoQVVUSCkgJChVTUFTSykgXAorIAktRFJFQUxfREFFTU9OX0RJUj1cIiQoUkVBTF9EQUVNT05fRElSKVwiICQoU1RZTEUpICQoS0lMTF9PUFQpIFwKKyAJLURTRVZFUklUWT0kKFNFVkVSSVRZKSAtRFJGQzkzMV9USU1FT1VUPSQoUkZDOTMxX1RJTUVPVVQpIFwKKy0JJChVQ0hBUikgJChUQUJMRVMpICQoU1RSSU5HUykgJChUTEkpICQoRVhUUkFfQ0ZMQUdTKSAkKERPVCkgXAorKwkkKFVDSEFSKSAkKFRBQkxFUykgJChTVFJJTkdTX0ZMQUdTKSAkKFRMSSkgJChFWFRSQV9DRkxBR1MpICQoRE9UKSBcCisgCSQoVlNZU0xPRykgJChIT1NUTkFNRSkKKyAKKyBMSUJfT0JKPSBob3N0c19hY2Nlc3MubyBvcHRpb25zLm8gc2hlbGxfY21kLm8gcmZjOTMxLm8gZXZhbC5vIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NzViODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jCTIwMDQtMDgtMjkgMTg6NDA6MDguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQwOjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTkyLDYgKzkyLDggQEAKKyAgICAgY2hhciAgICpjcDsKKyAgICAgY2hhciAgICpyZXN1bHQgPSB1bmtub3duOworICAgICBGSUxFICAgKmZwOworKyAgICB1bnNpZ25lZCBzYXZlZF90aW1lb3V0OworKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG5hY3QsIG9hY3Q7CisgCisgI2lmZGVmIElORVQ2CisgICAgIC8qIGFkZHJlc3MgZmFtaWx5IG11c3QgYmUgdGhlIHNhbWUgKi8KK0BAIC0xMzQsNyArMTM2LDEyIEBACisgCSAqLworIAorIAlpZiAoc2V0am1wKHRpbWVidWYpID09IDApIHsKKy0JICAgIHNpZ25hbChTSUdBTFJNLCB0aW1lb3V0KTsKKysJICAgIC8qIFNhdmUgU0lHQUxSTSB0aW1lciBhbmQgaGFuZGxlci4gU3VkaGVlciBBYmR1bC1TYWxhbSwgU1VOLiAqLworKwkgICAgc2F2ZWRfdGltZW91dCA9IGFsYXJtKDApOworKwkgICAgbmFjdC5zYV9oYW5kbGVyID0gdGltZW91dDsKKysJICAgIG5hY3Quc2FfZmxhZ3MgPSAwOworKwkgICAgKHZvaWQpIHNpZ2VtcHR5c2V0KCZuYWN0LnNhX21hc2spOworKwkgICAgKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCAmbmFjdCwgJm9hY3QpOworIAkgICAgYWxhcm0ocmZjOTMxX3RpbWVvdXQpOworIAorIAkgICAgLyoKK0BAIC0yMjMsNiArMjMwLDEwIEBACisgCSAgICB9CisgCSAgICBhbGFybSgwKTsKKyAJfQorKwkvKiBSZXN0b3JlIFNJR0FMUk0gdGltZXIgYW5kIGhhbmRsZXIuIFN1ZGhlZXIgQWJkdWwtU2FsYW0sIFNVTi4gKi8KKysJKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2FjdCwgTlVMTCk7CisrCWlmIChzYXZlZF90aW1lb3V0ID4gMCkKKysJICAgIGFsYXJtKHNhdmVkX3RpbWVvdXQpOworIAlmY2xvc2UoZnApOworICAgICB9CisgICAgIFNUUk5fQ1BZKGRlc3QsIHJlc3VsdCwgU1RSSU5HX0xFTkdUSCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3JmYzkzMS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyM2Y0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZgpAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMJMjAwNS0wMy0wOSAxODoyMjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMJMjAwNS0wMy0wOSAxODoyMDo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMzcsMTAgKzIzNywxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorIC8qIEFSR1NVU0VEICovCisgCistdm9pZCAgICByZmM5MzEocmVxdWVzdCkKKy1zdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworK3ZvaWQgICAgcmZjOTMxKHJtdF9zaW4sIG91cl9zaW4sIGRlc3QpCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IHNvY2thZGRyICpybXRfc2luOworK3N0cnVjdCBzb2NrYWRkciAqb3VyX3NpbjsKKysjZWxzZQorK3N0cnVjdCBzb2NrYWRkcl9pbiAqcm10X3NpbjsKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKm91cl9zaW47CisrI2VuZGlmCisrY2hhciAgICpkZXN0OworIHsKKy0gICAgc3RyY3B5KHJlcXVlc3QtPnVzZXIsIHVua25vd24pOworKyAgICBzdHJjcHkoZGVzdCwgdW5rbm93bik7CisgfQorIAorIC8qIGNoZWNrX3BhdGggLSBleGFtaW5lIGFjY2Vzc2liaWxpdHkgKi8KK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNS0wMy0wOSAxODoyMjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA1LTAzLTA5IDE4OjIxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTgzLDcgKzgzLDExIEBAIGV4dGVybiBpbnQgaG9zdHNfYWNjZXNzKHN0cnVjdCByZXF1ZXN0X2kKKyBleHRlcm4gdm9pZCBzaGVsbF9jbWQoY2hhciAqKTsJCS8qIGV4ZWN1dGUgc2hlbGwgY29tbWFuZCAqLworIGV4dGVybiBjaGFyICpwZXJjZW50X3goY2hhciAqLCBpbnQsIGNoYXIgKiwgc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsKKyAJCQkJCS8qIGRvICU8Y2hhcj4gZXhwYW5zaW9uICovCisrI2lmZGVmIElORVQ2CisgZXh0ZXJuIHZvaWQgcmZjOTMxKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY2hhciAqKTsKKysjZWxzZQorK2V4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luICosIGNoYXIgKik7CisrI2VuZGlmCisgCQkJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCisgZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworIGV4dGVybiB2b2lkIHJlZnVzZShzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIuOCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1NjE2YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjgKQEAgLTAsMCArMSwzNCBAQAorLlRIIFNBRkVfRklOR0VSIDggIjIxdGggSnVuZSAxOTk3IiBMaW51eCAiTGludXggUHJvZ3JhbW1lcidzIE1hbnVhbCIKKy5TSCBOQU1FCitzYWZlX2ZpbmdlciBcLSBmaW5nZXIgY2xpZW50IHdyYXBwZXIgdGhhdCBwcm90ZWN0cyBhZ2FpbnN0IG5hc3R5IHN0dWZmCitmcm9tIGZpbmdlciBzZXJ2ZXJzCisuU0ggU1lOT1BTSVMKKy5CIHNhZmVfZmluZ2VyIFtmaW5nZXJfb3B0aW9uc10KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBzYWZlX2ZpbmdlcgorY29tbWFuZCBwcm90ZWN0cyBhZ2FpbnN0IG5hc3R5IHN0dWZmIGZyb20gZmluZ2VyIHNlcnZlcnMuIFVzZSB0aGlzCitwcm9ncmFtIGZvciBhdXRvbWF0aWMgcmV2ZXJzZSBmaW5nZXIgcHJvYmVzIGZyb20gdGhlCisuQiB0Y3Bfd3JhcHBlcgorLkIgKHRjcGQpCissIG5vdCB0aGUgcmF3IGZpbmdlciBjb21tYW5kLiBUaGUKKy5CIHNhZmVfZmluZ2VyCitjb21tYW5kIG1ha2VzIHN1cmUgdGhhdCB0aGUgZmluZ2VyIGNsaWVudCBpcyBub3QgcnVuIHdpdGggcm9vdAorcHJpdmlsZWdlcy4gSXQgYWxzbyBydW5zIHRoZSBmaW5nZXIgY2xpZW50IHdpdGggYSBkZWZpbmVkIFBBVEgKK2Vudmlyb25tZW50LgorLkIgc2FmZV9maW5nZXIKK3dpbGwgYWxzbyBwcm90ZWN0IHlvdSBmcm9tIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgb3V0cHV0IG9mIHNvbWUKK2ZpbmdlciBzZXJ2ZXJzLiBUaGUgcHJvYmxlbTogc29tZSBwcm9ncmFtcyBtYXkgcmVhY3QgdG8gc3R1ZmYgaW4KK3RoZSBmaXJzdCBjb2x1bW4uIE90aGVyIHByb2dyYW1zIG1heSBnZXQgdXBzZXQgYnkgdGhyYXNoIGFueXdoZXJlCitvbiBhIGxpbmUuIEZpbGUgc3lzdGVtcyBtYXkgZmlsbCB1cCBhcyB0aGUgZmluZ2VyIHNlcnZlciBrZWVwcworc2VuZGluZyBkYXRhLiBUZXh0IGVkaXRvcnMgbWF5IGJvbWIgb3V0IG9uIGV4dHJlbWVseSBsb25nIGxpbmVzLgorVGhlIGZpbmdlciBzZXJ2ZXIgbWF5IHRha2UgZm9yZXZlciBiZWNhdXNlIGl0IGlzIHNvbWVob3cgd2VkZ2VkLgorLkIgc2FmZV9maW5nZXIKK3Rha2VzIGNhcmUgb2YgYWxsIHRoaXMgYmFkbmVzcy4KKy5TSCBTRUUgQUxTTworLkJSIGhvc3RzX2FjY2VzcyAoNSksCisuQlIgaG9zdHNfb3B0aW9ucyAoNSksCisuQlIgdGNwZCAoOCkKKy5TSCBBVVRIT1IKK1dpZXRzZSBWZW5lbWEsIEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zYWZlX2Zpbmdlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJhZmVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0gdGNwLXdyYXBwZXJzLTcuNi1pcHY2LjEub3JpZy9zYWZlX2Zpbmdlci5jCisrKysgdGNwLXdyYXBwZXJzLTcuNi1pcHY2LjEvc2FmZV9maW5nZXIuYworQEAgLTI2LDIxICsyNiwyNCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxwd2QuaD4KKysjaW5jbHVkZSA8c3lzbG9nLmg+CisgCisgZXh0ZXJuIHZvaWQgZXhpdCgpOworIAorIC8qIExvY2FsIHN0dWZmICovCisgCistY2hhciAgICBwYXRoW10gPSAiUEFUSD0vYmluOi91c3IvYmluOi91c3IvdWNiOi91c3IvYnNkOi9ldGM6L3Vzci9ldGM6L3Vzci9zYmluIjsKKytjaGFyICAgIHBhdGhbXSA9ICJQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluIjsKKyAKKyAjZGVmaW5lCVRJTUVfTElNSVQJNjAJCS8qIERvIG5vdCBrZWVwIGxpc3RpbmdpbmcgZm9yZXZlciAqLworICNkZWZpbmUJSU5QVVRfTEVOR1RICTEwMDAwMAkJLyogRG8gbm90IGtlZXAgbGlzdGluZ2luZyBmb3JldmVyICovCisgI2RlZmluZQlMSU5FX0xFTkdUSAkxMjgJCS8qIEVkaXRvcnMgY2FuIGNob2tlIG9uIGxvbmcgbGluZXMgKi8KKyAjZGVmaW5lCUZJTkdFUl9QUk9HUkFNCSJmaW5nZXIiCS8qIE1vc3QsIGlmIG5vdCBhbGwsIFVOSVggc3lzdGVtcyAqLworICNkZWZpbmUJVU5QUklWX05BTUUJIm5vYm9keSIJLyogUHJlZmVycmVkIHByaXZpbGVnZSBsZXZlbCAqLworLSNkZWZpbmUJVU5QUklWX1VHSUQJMzI3NjcJCS8qIERlZmF1bHQgdWlkIGFuZCBnaWQgKi8KKysjZGVmaW5lCVVOUFJJVl9VR0lECTY1NTM0CQkvKiBEZWZhdWx0IHVpZCBhbmQgZ2lkICovCisgCisgaW50ICAgICBmaW5nZXJfcGlkOworK2ludAlhbGxvd19zZXZlcml0eSA9IFNFVkVSSVRZOworK2ludAlkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisgCisgdm9pZCAgICBjbGVhbnVwKHNpZykKKyBpbnQgICAgIHNpZzsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2VhMDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworKiBNb24gRmViIDEwIDIwMDMgSGFyYWxkIEhveWVyIDxoYXJhbGRAcmVkaGF0LmRlPiA3LjYtMjkKKy0gYWRkZWQgc2VjdXJpdHkgcGF0Y2ggdGNwX3dyYXBwZXJzLTcuNi1zaWcucGF0Y2gKKworLS0tIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMuc2lnCTIwMDMtMDItMTAgMTY6MTg6MzEuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDAzLTAyLTEwIDE2OjUwOjM4LjAwMDAwMDAwMCArMDEwMAorQEAgLTY2LDYgKzY2LDcgQEAKKyAKKyAjZGVmaW5lCVlFUwkJMQorICNkZWZpbmUJTk8JCTAKKysjZGVmaW5lIEVSUiAgICAgICAgICAgICAtMQorIAorICAvKgorICAgKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGdsb2JhbGx5IHZpc2libGUgc28gdGhhdCB0aGV5IGNhbiBiZSByZWRpcmVjdGVkIGluCitAQCAtMTI5LDkgKzEyOSw5IEBACisgCXJldHVybiAodmVyZGljdCA9PSBBQ19QRVJNSVQpOworICAgICBpZiAodGFibGVfbWF0Y2goaG9zdHNfYWxsb3dfdGFibGUsIHJlcXVlc3QpKQorIAlyZXR1cm4gKFlFUyk7CistICAgIGlmICh0YWJsZV9tYXRjaChob3N0c19kZW55X3RhYmxlLCByZXF1ZXN0KSkKKy0JcmV0dXJuIChOTyk7CistICAgIHJldHVybiAoWUVTKTsKKysgICAgaWYgKHRhYmxlX21hdGNoKGhvc3RzX2RlbnlfdGFibGUsIHJlcXVlc3QpID09IE5PKQorKwlyZXR1cm4gKFlFUyk7CisrICAgIHJldHVybiAoTk8pOworIH0KKyAKKyAvKiB0YWJsZV9tYXRjaCAtIG1hdGNoIHRhYmxlIGVudHJpZXMgd2l0aCAoZGFlbW9uLCBjbGllbnQpIHBhaXIgKi8KK0BAIC0xNzUsNiArMTc1LDcgQEAKKyAJKHZvaWQpIGZjbG9zZShmcCk7CisgICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisgCXRjcGRfd2FybigiY2Fubm90IG9wZW4gJXM6ICVtIiwgdGFibGUpOworKwltYXRjaCA9IEVSUjsKKyAgICAgfQorICAgICBpZiAobWF0Y2gpIHsKKyAJaWYgKGhvc3RzX2FjY2Vzc192ZXJib3NlID4gMSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ2xvbmdqbXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZGQ2MzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQyOjI1LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MTowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw3ICszMyw3IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIykgcmZjOTMxLmMgMS4KKyAKKyBpbnQgICAgIHJmYzkzMV90aW1lb3V0ID0gUkZDOTMxX1RJTUVPVVQ7LyogR2xvYmFsIHNvIGl0IGNhbiBiZSBjaGFuZ2VkICovCisgCistc3RhdGljIGptcF9idWYgdGltZWJ1ZjsKKytzdGF0aWMgc2lnam1wX2J1ZiB0aW1lYnVmOworIAorIC8qIGZzb2NrZXQgLSBvcGVuIHN0ZGlvIHN0cmVhbSBvbiB0b3Agb2Ygc29ja2V0ICovCisgCitAQCAtNjIsNyArNjIsNyBAQCBpbnQgICAgIHByb3RvY29sOworIHN0YXRpYyB2b2lkIHRpbWVvdXQoc2lnKQorIGludCAgICAgc2lnOworIHsKKy0gICAgbG9uZ2ptcCh0aW1lYnVmLCBzaWcpOworKyAgICBzaWdsb25nam1wKHRpbWVidWYsIHNpZyk7CisgfQorIAorIC8qIHJmYzkzMSAtIHJldHVybiByZW1vdGUgdXNlciBuYW1lLCBnaXZlbiBzb2NrZXQgc3RydWN0dXJlcyAqLworQEAgLTEzNSw3ICsxMzUsNyBAQCBjaGFyICAgKmRlc3Q7CisgCSAqIFNldCB1cCBhIHRpbWVyIHNvIHdlIHdvbid0IGdldCBzdHVjayB3aGlsZSB3YWl0aW5nIGZvciB0aGUgc2VydmVyLgorIAkgKi8KKyAKKy0JaWYgKHNldGptcCh0aW1lYnVmKSA9PSAwKSB7CisrCWlmIChzaWdzZXRqbXAodGltZWJ1ZiwgMCkgPT0gMCkgeworIAkgICAgLyogU2F2ZSBTSUdBTFJNIHRpbWVyIGFuZCBoYW5kbGVyLiBTdWRoZWVyIEFiZHVsLVNhbGFtLCBTVU4uICovCisgCSAgICBzYXZlZF90aW1lb3V0ID0gYWxhcm0oMCk7CisgCSAgICBuYWN0LnNhX2hhbmRsZXIgPSB0aW1lb3V0OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc29ja2xlbl90LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc29ja2xlbl90LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNDZkZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zb2NrbGVuX3QucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorY29tbWl0IDg4YjY5ODRlZjBiZjNiNzAzYzFjODUxMDkyNjYyYjk1ZTkxZGIxZmYKK0F1dGhvcjogZmFycmFoIHJhc2hpZCA8ZmFycmFoLnJhc2hpZEB3aW5kcml2ZXIuY29tPgorRGF0ZTogICBUdWUgRmViIDEyIDA5OjUzOjUwIDIwMTMgLTA1MDAKKworICAgIHRjcC13cmFwcGVycyBTdXBwb3J0IGZvciBidWlsZGluZyB3aXRoIGdsaWJjCisgICAgCisgICAgQWRkZWQgc3VwcG9ydCBmb3Igc29ja2xlbl90IHR5cGUgdG8gbGVuIGFyZ3VtZW50IHBhc3NlZCB0byBzb2NrZXQgcmVsYXRlZAorICAgIGNhbGxzLiBUaGlzIGZpeGVzIGEgYnVnIHRoYXQgY2F1c2VzIHRjcCB3cmFwcGVycyB0byBmYWlsIHdoZW4gdXNpbmcgc3NoZC4KKyAgICAKKyAgICBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBmYXJyYWggcmFzaGlkIDxmYXJyYWgucmFzaGlkQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9maXhfb3B0aW9ucy5jIGIvZml4X29wdGlvbnMuYworaW5kZXggNzQ3M2FkZi4uZmUyYjQ0MiAxMDA2NDQKKy0tLSBhL2ZpeF9vcHRpb25zLmMKKysrKyBiL2ZpeF9vcHRpb25zLmMKK0BAIC0zOCw3ICszOCwxMiBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICNpZmRlZiBJUF9PUFRJT05TCisgICAgIHVuc2lnbmVkIGNoYXIgb3B0YnVmW0JVRkZFUl9TSVpFIC8gM10sICpjcDsKKyAgICAgY2hhciAgICBsYnVmW0JVRkZFUl9TSVpFXSwgKmxwOworLSAgICBpbnQgICAgIG9wdHNpemUgPSBzaXplb2Yob3B0YnVmKSwgaXBwcm90bzsKKysjaWZkZWYgX19HTElCQ19fCisrICAgIHNvY2tsZW5fdCAgb3B0c2l6ZSA9IHNpemVvZihvcHRidWYpOworKyNlbHNlCisrICAgIGludCAgICAgb3B0c2l6ZSA9IHNpemVvZihvcHRidWYpOworKyNlbmRpZgorKyAgICBpbnQgaXBwcm90bzsKKyAgICAgc3RydWN0IHByb3RvZW50ICppcDsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworICAgICB1bnNpZ25lZCBpbnQgb3B0OworZGlmZiAtLWdpdCBhL3NvY2tldC5jIGIvc29ja2V0LmMKK2luZGV4IDRiMmM1NzUuLmEwZDI5ODcgMTAwNjQ0CistLS0gYS9zb2NrZXQuYworKysrIGIvc29ja2V0LmMKK0BAIC05NSw3ICs5NSwxMSBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisgI2VuZGlmCisrI2lmZGVmIF9fR0xJQkNfXworKyAgICBzb2NrbGVuX3QgIGxlbjsKKysjZWxzZQorICAgICBpbnQgICAgIGxlbjsKKysjZW5kaWYKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworIAorQEAgLTQyNiw3ICs0MzAsMTEgQEAgaW50ICAgICBmZDsKKyAjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICNlbmRpZgorKyNpZmRlZiBfX0dMSUJDX18KKysgICAgc29ja2xlbl90ICBzaXplID0gc2l6ZW9mKHNpbik7CisrI2Vsc2UKKyAgICAgaW50ICAgICBzaXplID0gc2l6ZW9mKHNpbik7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIEVhdCB1cCB0aGUgbm90LXlldCByZWNlaXZlZCBkYXRhZ3JhbS4gU29tZSBzeXN0ZW1zIGluc2lzdCBvbiBhCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyOWJkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RjcGRjaGtfbGlid3JhcHBlZC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAyOjUwOjM3LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDI6NTA6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsNiArNTMsMjQgQEAKKyAjaW5jbHVkZSAiaW5ldGNmLmgiCisgI2luY2x1ZGUgInNjYWZmb2xkLmgiCisgCisrLyogbGlzdCBvZiBwcm9ncmFtcyB3aGljaCBhcmUga25vd24gdG8gYmUgbGlua2VkIHdpdGggbGlid3JhcCBpbiBkZWJpYW4gKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbGlid3JhcF9wcm9ncmFtc1tdID0geworKyAgICAicG9ydG1hcCIsICJtb3VudGQiLCAic3RhdGQiLCAidWdpZGQiLAorKyAgICAicmVkaXIiLCAicmxpbmV0ZCIsCisrICAgICJzc2hkIiwKKysgICAgImF0ZnRwZCIsCisrICAgICJkaWFsZCIsCisrICAgICJlc291bmQiLAorKyAgICAiZ2RtIiwgImdub21lLXNlc3Npb24iLAorKyAgICAiaWNlY2FzdCIsICJpY2VjYXN0X2FkbWluIiwgImljZWNhc3RfY2xpZW50IiwgImljZWNhc3Rfc291cmNlIiwKKysgICAgIm15c3FsZCIsCisrICAgICJudG9wIiwKKysgICAgInBwdHBkIiwKKysgICAgInJxdW90YWQiLAorKyAgICAic2VuZG1haWwiLCAic21haWwiLAorKyAgICBOVUxMCisrfTsKKysKKyAgLyoKKyAgICogU3RvbGVuIGZyb20gaG9zdHNfYWNjZXNzLmMuLi4KKyAgICovCitAQCAtMTQ3LDggKzE2NSw4IEBACisgICAgIC8qCisgICAgICAqIFRoZXNlIGFyZSBub3QgcnVuIGZyb20gaW5ldGQgYnV0IG1heSBoYXZlIGJ1aWx0LWluIGFjY2VzcyBjb250cm9sLgorICAgICAgKi8KKy0gICAgaW5ldF9zZXQoInBvcnRtYXAiLCBXUl9OT1QpOworLSAgICBpbmV0X3NldCgicnBjYmluZCIsIFdSX05PVCk7CisrICAgIGZvciAoYyA9IDA7IGxpYndyYXBfcHJvZ3JhbXNbY107IGMrKykKKysJaW5ldF9zZXQobGlid3JhcF9wcm9ncmFtc1tjXSwgV1JfWUVTKTsKKyAKKyAgICAgLyoKKyAgICAgICogQ2hlY2sgYWNjZXNzaWJpbGl0eSBvZiBhY2Nlc3MgY29udHJvbCBmaWxlcy4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RyeS1mcm9tLjggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOGYzMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44CkBAIC0wLDAgKzEsMjggQEAKKy5USCBUUlktRlJPTSA4ICIyMXRoIEp1bmUgMTk5NyIgTGludXggIkxpbnV4IFByb2dyYW1tZXIncyBNYW51YWwiCisuU0ggTkFNRQordHJ5LWZyb20gXC0gdGVzdCBwcm9ncmFtIGZvciB0aGUgdGNwX3dyYXBwZXIKKy5TSCBTWU5PUFNJUworLkIgdHJ5LWZyb20KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB0cnktZnJvbQorY29tbWFuZCBjYW4gYmUgY2FsbGVkIHZpYSBhIHJlbW90ZSBzaGVsbCBjb21tYW5kIHRvIGZpbmQgb3V0CitpZiB0aGUgaG9zdG5hbWUgYW5kIGFkZHJlc3MgYXJlIHByb3Blcmx5IHJlY29nbml6ZWQKK2J5IHRoZQorLkIgdGNwX3dyYXBwZXIKK2xpYnJhcnksIGlmIHVzZXJuYW1lIGxvb2t1cCB3b3JrcywgYW5kIChTeXNWIG9ubHkpIGlmIHRoZSBUTEkKK29uIHRvcCBvZiBJUCBoZXVyaXN0aWNzIHdvcmsuIERpYWdub3N0aWNzIGFyZSByZXBvcnRlZCB0aHJvdWdoCisuQlIgc3lzbG9nICgzKQorYW5kIHJlZGlyZWN0ZWQgdG8gc3RkZXJyLgorCitFeGFtcGxlOgorCityc2ggaG9zdCAvc29tZS93aGVyZS90cnktZnJvbQorCisuU0ggU0VFIEFMU08KKy5CUiBob3N0c19hY2Nlc3MgKDUpLAorLkJSIGhvc3RzX29wdGlvbnMgKDUpLAorLkJSIHRjcGQgKDgpCisuU0ggQVVUSE9SCitXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVyc183LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMDQ3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiCkBAIC0wLDAgKzEsMTI4IEBACitTVU1NQVJZID0gIlNlY3VyaXR5IHRvb2wgdGhhdCBpcyBhIHdyYXBwZXIgZm9yIFRDUCBkYWVtb25zIgorREVTQ1JJUFRJT04gPSAiVG9vbHMgZm9yIG1vbml0b3JpbmcgYW5kIGZpbHRlcmluZyBpbmNvbWluZyByZXF1ZXN0cyBmb3IgdGNwIFwKKyAgICAgICAgICAgICAgIHNlcnZpY2VzLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0RJU0NMQUlNRVI7bWQ1PTA3MWJkNjljYjc4YjE4ODg4ZWE1ZTNkYTVjMzEyN2ZhIgorUFIgPSJyMTAiCisKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnIGxpYndyYXAgbGlid3JhcC1kb2MgbGlid3JhcC1kZXYgbGlid3JhcC1zdGF0aWNkZXYgJHtQTn0gJHtQTn0tZG9jIgorRklMRVNfbGlid3JhcCA9ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfbGlid3JhcC1kb2MgPSAiJHttYW5kaXJ9L21hbjMgJHttYW5kaXJ9L21hbjUiCitGSUxFU19saWJ3cmFwLWRldiA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2luY2x1ZGVkaXJ9IgorRklMRVNfbGlid3JhcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKK0ZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0iCitGSUxFU18ke1BOfS1kb2MgPSAiJHttYW5kaXJ9L21hbjgiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLnBvcmN1cGluZS5vcmcvcHViL3NlY3VyaXR5L3RjcF93cmFwcGVyc18ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDBfbWFuX3F1b3RpbmcuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDZfZml4X2dldGhvc3RieW5hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTBfdXNhZ2ktaXB2Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMV91c2FnaV9maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzEzX3NobGliX3dlYWtzeW0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTRfY2lkcl9zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzE1X21hdGNoX2NsYXJpZnkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhdmVfc3RyZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuX2Zyb21ob3N0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmZjOTMxLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vc2FmZV9maW5nZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2lnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zaWdsb25nam1wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NvY2tsZW5fdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90cnktZnJvbS44IFwKKyAgICAgICAgICAgZmlsZTovL3NhZmVfZmluZ2VyLjggXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTZmYTI1ZjcxMjI2ZDA5MGYzNGRlM2Y2YjEyMmZiNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU0M2Q3YWRlZGY3OGE2ZGUwYjIyMWNjYmJkMTk1MmUwOGI1MTM4NzE3ZjRhZGU4MTQwMzliYjQ4OWE0MzE1ZCIKKworUyA9ICIke1dPUktESVJ9L3RjcF93cmFwcGVyc18ke1BWfSIKKworRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgXAorICAgICAgICAgICAgICAgICdBUj0ke0FSfScgXAorICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyBcCisgICAgICAgICAgICAgICAgJ1JFQUxfREFFTU9OX0RJUj0ke3NiaW5kaXJ9JyBcCisgICAgICAgICAgICAgICAgJ1NUWUxFPS1EUFJPQ0VTU19PUFRJT05TJyBcCisgICAgICAgICAgICAgICAgJ0ZBQ0lMSVRZPUxPR19EQUVNT04nIFwKKyAgICAgICAgICAgICAgICAnU0VWRVJJVFk9TE9HX0lORk8nIFwKKyAgICAgICAgICAgICAgICAnQlVHUz0nIFwKKyAgICAgICAgICAgICAgICAnVlNZU0xPRz0nIFwKKyAgICAgICAgICAgICAgICAnUkZDOTMxX1RJTUVPVVQ9MTAnIFwKKyAgICAgICAgICAgICAgICAnQUNDRVNTPS1ESE9TVFNfQUNDRVNTJyBcCisgICAgICAgICAgICAgICAgJ0tJTExfT1BUPS1ES0lMTF9JUF9PUFRJT05TJyBcCisgICAgICAgICAgICAgICAgJ1VNQVNLPS1EREFFTU9OX1VNQVNLPTAyMicgXAorICAgICAgICAgICAgICAgICdORVRHUk9VUD0ke0VYVFJBX09FTUFLRV9ORVRHUk9VUH0nIFwKKyAgICAgICAgICAgICAgICAnTElCUz0tbG5zbCcgXAorICAgICAgICAgICAgICAgICdBUkZMQUdTPXJ2JyBcCisgICAgICAgICAgICAgICAgJ0FVWF9PQko9d2Vha19zeW1ib2xzLm8nIFwKKyAgICAgICAgICAgICAgICAnVExJPScgXAorICAgICAgICAgICAgICAgICdDT1BUUz0nIFwKKyAgICAgICAgICAgICAgICAnRVhUUkFfQ0ZMQUdTPSR7Q0ZMQUdTfSAtRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuJyIKKworRVhUUkFfT0VNQUtFX05FVEdST1VQID0gIi1ETkVUR1JPVVAgLURVU0VfR0VURE9NQUlOIgorRVhUUkFfT0VNQUtFX05FVEdST1VQX2xpYmMtdWNsaWJjID0gIi1EVVNFX0dFVERPTUFJTiIKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSAnVEFCTEVTPS1ESE9TVFNfREVOWT1cIiR7c3lzY29uZmRpcn0vaG9zdHMuZGVueVwiIC1ESE9TVFNfQUxMT1c9XCIke3N5c2NvbmZkaXJ9L2hvc3RzLmFsbG93XCInIFwKKwkJICAgYWxsCit9CisKK0JJTlMgPSAic2FmZV9maW5nZXIgdGNwZCB0Y3BkY2hrIHRyeS1mcm9tIHRjcGRtYXRjaCIKK01BTlMzID0gImhvc3RzX2FjY2VzcyIKK01BTlM1ID0gImhvc3RzX29wdGlvbnMiCitNQU5TOCA9ICJ0Y3BkIHRjcGRjaGsgdGNwZG1hdGNoIgorZG9faW5zdGFsbCAoKSB7CisJb2VfbGliaW5zdGFsbCAtYSBsaWJ3cmFwICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1DIHNoYXJlZCAtc28gbGlid3JhcCAke0R9JHtiYXNlX2xpYmRpcn0KKworCWlmIFsgIiR7bGliZGlyfSIgIT0gIiR7YmFzZV9saWJkaXJ9IiBdIDsgdGhlbgorCQlyZWxfbGliX3ByZWZpeD1gZWNobyAke2xpYmRpcn0gfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZydgCisJCWxpYm5hbWU9YHJlYWRsaW5rICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ3cmFwLnNvIHwgeGFyZ3MgYmFzZW5hbWVgCisJCWxuIC1zICR7cmVsX2xpYl9wcmVmaXh9JHtiYXNlX2xpYmRpcn0vJHtsaWJuYW1lfSAke0R9JHtsaWJkaXJ9L2xpYndyYXAuc28KKwkJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYndyYXAuc28KKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWZvciBiIGluICR7QklOU307IGRvCisJCWluc3RhbGwgLW0gMDc1NSAkYiAke0R9JHtzYmluZGlyfS8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjMKKwlmb3IgbSBpbiAke01BTlMzfTsgZG8KKwkJaW5zdGFsbCAtbSAwNjQ0ICRtLjMgJHtEfSR7bWFuZGlyfS9tYW4zLyB8fCBleGl0IDEKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuNQorCWZvciBtIGluICR7TUFOUzV9OyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJG0uNSAke0R9JHttYW5kaXJ9L21hbjUvIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44CisJZm9yIG0gaW4gJHtNQU5TOH07IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkbS44ICR7RH0ke21hbmRpcn0vbWFuOC8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdHJ5LWZyb20uOCAke0R9JHttYW5kaXJ9L21hbjgvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2FmZV9maW5nZXIuOCAke0R9JHttYW5kaXJ9L21hbjgvCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IHRjcGQuaCAke0R9JHtpbmNsdWRlZGlyfS8KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9ob3N0cy5hbGxvdworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RzLmRlbnkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vaG9zdHMuYWxsb3cgJHtzeXNjb25mZGlyfS9ob3N0cy5kZW55IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpMmh0bWwvdGV4aTJodG1sXzUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWMyODllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJQZXJsIHNjcmlwdCB0aGF0IGNvbnZlcnRzIFRleGluZm8gdG8gSFRNTCIKK0hPTUVQQUdFICAgID0gImh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIgorU0VDVElPTiAgICAgPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgICAgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1BSID0gInIyIgorCitTUkNfVVJJICAgICA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L3RleGkyaHRtbC8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMTVhYzg3NmZjZGM4YmU4NjViMTY1MzVmNDgwYWE1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlOGE5OGIwZWUyMGM0OTVhNmFiODk0Mzk4YTA2NWVmNTgwMjcyZGJkNWExNWIxYjE5ZThiZDFiYzg5ZDlmOWZhIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBhdXRvdG9vbHNfZG9fY29uZmlndXJlIHVwZGF0ZXMgcG8vTWFrZWZpbGUuaW4uaW4sIHdlIGFsc28gbmVlZAorCSMgdXBkYXRlIHBvX2RvY3VtZW50LgorCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX2RvY3VtZW50LworCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX21lc3NhZ2VzLworfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS90ZXhpMmh0bWwKK30KKworRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L3RleGluZm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXktbmF0aXZlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYgpAQCAtMCwwICsxLDMwIEBACitERVNDUklQVElPTiA9ICJGYWtlIHZlcnNpb24gb2YgdGhlIHRleGluZm8gdXRpbGl0eSBzdWl0ZSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDZiYjYyZTczY2E4YjkwMWQzZjJlOWQ3MTU0MmY0YmIiCitERVBFTkRTID0gIiIKK1BWID0gIjEuMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vdGVtcGxhdGUucHkgZmlsZTovL0NPUFlJTkciCisKK1MgPSAiJHtXT1JLRElSfSIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsX25hbWUoKSB7CisgICAgRklMRU5BTUU9IiR7RH0ke2JpbmRpcn0vJDEiCisgICAgIyBVc2luZyBsbiBjYXVzZXMgcHJvYmxlbXMgd2l0aCBybV93b3JrCisgICAgY3AgLVQgIiR7U30vdGVtcGxhdGUucHkiICIkRklMRU5BTUUiCisgICAgY2htb2QgK3ggJEZJTEVOQU1FCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgbWtkaXIgLXAgIiR7RH0ke2JpbmRpcn0iCisgICAgZm9yIGkgaW4gbWFrZWluZm8gcG9kMnRleGkgdGV4aTJkdmkgcGRmdGV4aTJkdmkgdGV4aW5kZXggdGV4aTJwZGYgXAorICAgICAgICAgICAgIHR4aXhtbDJ0ZXhpIHRleGkyYW55IGluc3RhbGwtaW5mbyBnaW5zdGFsbC1pbmZvIFwKKyAgICAgICAgICAgICB1cGRhdGUtaW5mby1kaXI7IGRvCisgICAgICAgIGRvX2luc3RhbGxfbmFtZSAkaQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvQ09QWUlORyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzFjYmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS9DT1BZSU5HCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3JwLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvdGVtcGxhdGUucHkgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNzAzM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMi43CisKKyMgdGVtcGxhdGUucHkgKGFuZCBvdGhlciBmaWxlbmFtZXMpCisjIEJ5IE1heCBFbGlhc2VyIChtYXguZWxpYXNlckBpbnRlbC5jb20pCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnAuCisKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhFIFNPRlRXQVJFLgorCisjIFRoaXMgcHJvZ3JhbSBhY3RzIGxpa2UgYSBkdW1teSB2ZXJzaW9uIG9mIHRoZSB0ZXhpbmZvIHV0aWxpdGllcywgY3JlYXRpbmcKKyMgdGhlIHJpZ2h0IG91dHB1dCBmaWxlcyBidXQgbGVhdmluZyB0aGVtIGJsYW5rLiBJdCB3aWxsIHBhcnNlIG91dCB0aGUgbmFtZQorIyBvZiB0aGUgZXhlY3V0YWJsZSBmcm9tIGFyZ3ZbMF0gYW5kIGVtdWxhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbSwgc28KKyMgbXVsdGlwbGUgY29waWVzIG9mIHRoaXMgc2NyaXB0IHdpbGwgZXhpc3QgdW5kZXIgZGlmZmVyZW50IG5hbWVzLgorCitpbXBvcnQgc3lzLCBvcworCitvbG9uZyA9ICItLW91dHB1dD0iCitFbG9uZyA9ICItLW1hY3JvLWV4cGFuZD0iCisKKwordGhpc19iaW5hcnkgPSBzeXMuYXJndlswXS5zcGxpdCAoIi8iKVstMV0KKworIyBUbyBiZSBvdXRwdXR0ZWQgaWYgZnVuY3Rpb25hbGl0eSB0aGF0IGhhc24ndCBiZWVuIHN0dWJiZWQgeWV0IGlzIGludm9rZWQuCitzdHViX21zZyA9ICIiIgorVGhpcyBzdGFuZC1pbiB2ZXJzaW9uIG9mICVzIGlzIG5vdCB5ZXQgZnVsbHkgY2FwYWJsZSBvZiBlbXVsYXRpbmcgdGhlIHJlYWwKK3ZlcnNpb24gZnJvbSB0aGUgR05VIHRleGluZm8gc3VpdGUuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCBmaWxlIGEgYnVnIHJlcG9ydAord2l0aCBkZXRhaWxzIG9uIHRoZSByZWNpcGUgdGhhdCBmYWlsZWQuCisiIiIgJSB0aGlzX2JpbmFyeQorCisjIEF1dG90b29scyBzZXR1cHMgcXVlcnkgdGhlIHZlcnNpb24sIHNvIHRoaXMgaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LiBTb21lIG9mCisjIHRoZW0gKGxvb2tpbicgYXQgeW91LCBnbGliYykgYWN0dWFsbHkgbG9vayBmb3IgdGhlIHN1YnN0cmluZyAiR05VIHRleGluZm8sIgorIyBzbyB3ZSBwdXQgdGhhdCBzdWJzdHJpbmcgaW4gdGhlcmUgd2l0aG91dCBhY3R1YWxseSB0ZWxsaW5nIGEgbGllLgordmVyc2lvbl9zdHIgPSAiIiIgJXMgKGZha2UgdGV4aW5mbywgZW11bGF0aW5nIEdOVSB0ZXhpbmZvKSA1LjIKKyAKK1N1cGVyIGFtYXppbmcgdmVyc2lvbiB3aGljaCBpcyB0b3RhbGx5IG5vdCBmYWtlIGluIGFueSB3YXkgd2hhdHNvZXZlci4KK0NvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVAorbGljZW5zZS4KKyIiIiAlIHRoaXNfYmluYXJ5CisKK3NpbXBsZV9iaW5hcmllcyA9ICJwb2QydGV4aSB0ZXhpMmR2aSBwZGZ0ZXhpMmR2aSB0ZXhpbmRleCB0ZXhpMnBkZiBcCisgICAgICAgICAgICAgICAgICAgdHhpeG1sMnRleGkgaW5zdGFsbC1pbmZvIGdpbnN0YWxsLWluZm8gXAorICAgICAgICAgICAgICAgICAgIHVwZGF0ZS1pbmZvLWRpciIuc3BsaXQgKCkKKworIyBUaGVzZSB1dGlsaXRpZXMgdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIGFuZCBmbGFncy4KK2NvbXBsZXhfYmluYXJpZXMgPSAibWFrZWluZm8gdGV4aTJhbnkiLnNwbGl0ICgpCisKK3ZhbGlkX2JpbmFyaWVzID0gc2ltcGxlX2JpbmFyaWVzICsgY29tcGxleF9iaW5hcmllcworCisjIEZvciBnZW5lcmF0aW5nIGJsYW5rIG91dHB1dCBmaWxlcy4KK2RlZiB0b3VjaF9maWxlIChwYXRoKToKKyAgICBmID0gb3BlbiAocGF0aCwgInciKQorICAgIGYuY2xvc2UgKCkKKworYXNzZXJ0IHRoaXNfYmluYXJ5IGluIHZhbGlkX2JpbmFyaWVzLCBcCisgICAgICAgdGhpc19iaW5hcnkgKyAiIGlzIG5vdCBvbmUgb2YgIiArICcsICcuam9pbiAodmFsaWRfYmluYXJpZXMpCisKK2lmICItLXZlcnNpb24iIGluIHN5cy5hcmd2OgorICAgIHByaW50IHZlcnNpb25fc3RyCisgICAgc3lzLmV4aXQgKDApCisKKyMgRm9yIGRlYnVnZ2luZworbG9nX2ludGVyY2VwdGlvbnMgPSBGYWxzZQoraWYgbG9nX2ludGVyY2VwdGlvbnM6CisgICAgZiA9IG9wZW4gKCIvdG1wL2ludGVyY2VwdGVkXyIgKyB0aGlzX2JpbmFyeSwgImEiKQorICAgIGYud3JpdGUgKCcgJy5qb2luIChbdGhpc19iaW5hcnldICsgc3lzLmFyZ3ZbMTpdKSArICdcbicpCisgICAgZi5jbG9zZSAoKQorCisjIExvb2sgdGhyb3VnaCB0aGUgb3B0aW9ucyBhbmQgZmxhZ3MsIGFuZCBpZiBuZWNlc3NhcnksIHRvdWNoIGFueSBvdXRwdXQKKyMgZmlsZXMuCithcmdfaWR4ID0gMQord2hpbGUgYXJnX2lkeCA8IGxlbiAoc3lzLmFyZ3YpOgorICAgIGFyZyA9IHN5cy5hcmd2IFthcmdfaWR4XQorICAgIAorICAgIGlmIGFyZyA9PSAiLS0iOgorICAgICAgICBicmVhaworICAgIAorICAgICMgU29tZXRoaW5nIGxpa2UgLUkgLiBjYW4gcmVzdWx0IGluIGEgbmVlZCBmb3IgdGhpcyAoc3BlY2lmaWNhbGx5IHRoZSAuKQorICAgIGVsaWYgbGVuIChhcmcpIDwgMjoKKyAgICAgICAgcGFzcworICAgIAorICAgICMgQ2hlY2sgaWYgLW8gb3IgLS1vdXRwdXQgaXMgc3BlY2lmaWVkLiBUaGVzZSBjYW4gYmUgdXNlZCBhdCBtb3N0IG9uY2UuCisgICAgZWxpZiBhcmdbMF0gPT0gJy0nIGFuZCBhcmdbMV0gIT0gJy0nIGFuZCBhcmdbbGVuIChhcmcpIC0gMV0gPT0gJ28nOgorICAgICAgICB0b3VjaF9maWxlIChzeXMuYXJndlthcmdfaWR4ICsgMV0pCisgICAgICAgIHN5cy5leGl0ICgwKQorICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGggKG9sb25nKToKKyAgICAgICAgdG91Y2hfZmlsZSAoYXJnLnNwbGl0ICgiPSIpWzFdKQorICAgICAgICBzeXMuZXhpdCAoMCkKKyAgICAKKyAgICAjIENoZWNrIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBhcmdbMF0gIT0gJy0nIG9yIGFyZ1sxXSA9PSAnLScgb3IgJ0UnIG5vdCBpbiBhcmcgb3IgXAorICAgICAgICAgICAgICAgdGhpc19iaW5hcnkgaW4gc2ltcGxlX2JpbmFyaWVzLCBcCisgICAgICAgICAgICAgICAiLUUgb3B0aW9uIG5vdCB5ZXQgc3VwcG9ydGVkIiArIHN0dWJfbXNnCisgICAgICAgIAorICAgICAgICBhc3NlcnQgbm90IGFyZy5zdGFydHN3aXRoIChFbG9uZyksIFwKKyAgICAgICAgICAgICAgIEVsb25nWzotMV0gKyAiIG9wdGlvbiBub3QgeWV0IHN1cHBvcnRlZCIgKyBzdHViX21zZworICAgIAorICAgIGFyZ19pZHggKz0gMQorCisjIFRoZSAtby8tLW91dHB1dCBvcHRpb24gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0LiBGb3IgbWFrZWluZm8gYW5kIHRleGkyYW55LAorIyB0aGF0IGRlZmF1bHQgaXMgdG8gbG9vayBmb3IgYSBAc2V0ZmlsZW5hbWUgY29tbWFuZCBpbiB0aGUgaW5wdXQgZmlsZS4KKyMgT3RoZXJ3aXNlLCBwcmludGluZyBub3RoaW5nIHRvIHN0ZG91dCBhbmQgdGhlbiBleGl0aW5nIHNob3VsZCBzdWZmaWNlLgorYXNzZXJ0IHRoaXNfYmluYXJ5IGluIHNpbXBsZV9iaW5hcmllcywgXAorICAgICAgICJEb24ndCBrbm93IGhvdyB0byBnZXQgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIGZyb20gaW5wdXQgZmlsZSEiICsgXAorICAgICAgIHN0dWJfbXNnCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvY2hlY2stbG9jYWxlLWgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDY2NjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK2ZpeCB0aGUgbWFjcm8gY2hlY2sKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2NvbmZpZ3VyZSBkb2VzIG5vdCBjaGVjayBpZiBsb2NhbGUuaCBleGlzdHMsIGJ1dCBjaGVjayBzZXRsb2NhbGUsCitpZiBzZXRsb2NhbGUgZXhpc3QsIHRoZSBsb2NhbGUuaCBzaG91bGQgZXhpc3QuCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9zeXN0ZW0uaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9zeXN0ZW0uaCBiL2xpYi9zeXN0ZW0uaAoraW5kZXggOTQ2ZWIzYy4uYzcwMDM3YiAxMDA2NDQKKy0tLSBhL2xpYi9zeXN0ZW0uaAorKysrIGIvbGliL3N5c3RlbS5oCitAQCAtNDIsNyArNDIsNyBAQCBleHRlcm4gY2hhciAqc3Vic3RyaW5nIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgCisgLyogQWxsIHN5c3RlbXMgbm93YWRheXMgcHJvYmFibHkgaGF2ZSB0aGVzZSBmdW5jdGlvbnMsIGJ1dCAuLi4gKi8KKy0jaWZkZWYgSEFWRV9MT0NBTEVfSAorKyNpZmRlZiBIQVZFX1NFVExPQ0FMRQorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjZW5kaWYKKyAjaWZuZGVmIEhBVkVfU0VUTE9DQUxFCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvZG8tY29tcGlsZS1uYXRpdmUtdG9vbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZWJlMjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gNDU4ZTk0NTBjZWNmNzAzZjU1NTM2ZTYwOTM2NTE2MjcxOTU4NTkwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJSb3kuTGkiIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBTZXAgMjAxNCAxNzowMzoyOSArMDgwMAorU3ViamVjdDogW1BBVENIXSBkbyBub3QgY29tcGlsZSBob3N0IHRvb2xzLCBzaW5jZSB3ZSBoYXZlIG5hdGl2ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiNDYxMzBkLi5jZjU4NjU0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05MCwyOCArOTAsNyBAQCBBQ19DQU5PTklDQUxfQlVJTEQKKyAjICRuYXRpdmVfdG9vbHMgaXMgYWxzbyBhZGRlZCB0byBTVUJESVJTIGluIHRoZSBtYWluIE1ha2VmaWxlLmFtLAorICMgc28gdGhhdCBtYWtlIGNvbXBpbGVzIHRoZSBuYXRpdmUgdG9vbHMgZmlyc3QuCisgIworLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKy0gIG5hdGl2ZV90b29scz0KKy1lbHNlCistICBuYXRpdmVfdG9vbHM9dG9vbHMKKy0gIHRlc3QgLWQgIiRuYXRpdmVfdG9vbHMiIHx8IG1rZGlyICIkbmF0aXZlX3Rvb2xzIgorLSAgY29uZmRpcj1gKGNkICIkc3JjZGlyIjtwd2QpYAorLSAgIyBNYWtlIHN1cmUgdGhlIHNlY29uZGFyeSBjb25maWd1cmUgd29uJ3QgZmFpbCB3aXRoCistICAjICJlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQiLgorLSAgcm0gLWYgY29uZmlnLnN0YXR1cworLSAgQUNfTVNHX05PVElDRShbW0RvaW5nIGNvbmZpZ3VyZSBvZiBuYXRpdmUgdG9vbHMgKCR7YnVpbGR9KS5dXSkKKy0gIGNkICIkbmF0aXZlX3Rvb2xzIiB8fCBleGl0IDEKKy0gICMgUnVuIHNlY29uZGFyeSBjb25maWd1cmUgaW4gYWx0ZXJuYXRlIGVudmlyb25tZW50IG9yCistICAjIGl0IGdldHMgdGhlIHdyb25nIENDIGV0Yy4gIGVudiAtaSBnaXZlcyB0aGlzIGJ1aWxkIGhvc3QgY29uZmlndXJlCistICAjIGEgY2xlYW4gZW52aXJvbm1lbnQuCistICBlbnYgLWkgQ0M9IiR7QlVJTERfQ0N9IiBBUj0iJHtCVUlMRF9BUn0iIFJBTkxJQj0iJHtCVUlMRF9SQU5MSUJ9IiBcCistICAgICAgUEFUSD0iJHtQQVRIfSIgXAorLSAgICAgIHRvb2xzX29ubHk9MSBcCistICAgICR7Y29uZmRpcn0vY29uZmlndXJlIC0tYnVpbGQ9JHtidWlsZH0gLS1ob3N0PSR7YnVpbGR9IFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1ubHMKKy0gIGNkIC4uIHx8IGV4aXQgMQorLSAgQUNfTVNHX05PVElDRShbW0NvbnRpbnVpbmcgd2l0aCBtYWluIGNvbmZpZ3VyZSAoJHtob3N0fSkuXV0pCistZmkKKytuYXRpdmVfdG9vbHM9CisgQUNfU1VCU1QobmF0aXZlX3Rvb2xzKQorIEFNX0NPTkRJVElPTkFMKFRPT0xTX09OTFksIFtbdGVzdCAieCR0b29sc19vbmx5IiA9IHgxXV0pCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC91c2luZy1uYXRpdmUtbWFrZWluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5NzA1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gOWIwZGY3ZDZkM2MxOGNmYWM4MmMyOTFkNjBhNTM1N2QxYmM4ZDlkMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJSb3kuTGkiIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBTZXAgMjAxNCAxNzoxMDowMyArMDgwMAorU3ViamVjdDogW1BBVENIXSB1c2luZyBuYXRpdmUgbWFrZWluZm8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KKworZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQoraW5kZXggNjNkZjgxOC4uYjZjZWIzNCAxMDA2NDQKKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMTksNyArMTksNyBAQCBtYW5fTUFOUyA9IGluZm8uMSBpbmZva2V5LjEgaW5zdGFsbC1pbmZvLjEgbWFrZWluZm8uMSB0ZXhpbmRleC4xIHRleGkyZHZpLjEgXAorIAorICMgVXNlIHRoZSBwcm9ncmFtcyBidWlsdCBpbiBvdXIgZGlzdHJpYnV0aW9uLCB0YWtpbmcgYWNjb3VudCBvZiBwb3NzaWJsZQorICMgY3Jvc3MtY29tcGlsaW5nLgorLU1BS0VJTkZPID0gJCh0b3BfYnVpbGRkaXIpLyQobmF0aXZlX3Rvb2xzKS9tYWtlaW5mby9tYWtlaW5mbworK01BS0VJTkZPID0gbWFrZWluZm8KKyBJTlNUQUxMX0lORk8gPSAkKHRvcF9idWlsZGRpcikvJChuYXRpdmVfdG9vbHMpL3V0aWwvaW5zdGFsbC1pbmZvCisgCisgVFhJX1hMQVRFID0gdHhpLWNzLnRleCB0eGktZGUudGV4IHR4aS1lbi50ZXggdHhpLWVzLnRleCB0eGktZnIudGV4IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczMzhhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHRleGluZm8tNS4yL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMi5vcmlnL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKysrKyB0ZXhpbmZvLTUuMi9nbnVsaWIvbGliL01ha2VmaWxlLmFtCitAQCAtMzc4LDcgKzM3OCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZGlzYWJsZS1uYXRpdmUtdG9vbHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZGlzYWJsZS1uYXRpdmUtdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2ZjE2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kaXNhYmxlLW5hdGl2ZS10b29scy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitXZSBhbHJlYWR5IERFUEVORCBvbiB0aGUgbmF0aXZlIHRleGluZm8gYmVpbmcgcHJlc2VudCBiZWZvcmUgYnVpbGRpbmcgc28KK3RoZXJlIGlzbid0IGFueSBuZWVkIHRvIHRyeSBhbmQgYnVpbGQgdGhlIHJlcXVpcmVkIG5hdGl2ZSB0ZXhpbmZvIGJpbmFyaWVzCitiZWZvcmUgY3Jvc3MtY29tcGlsaW5nLiBUaGlzIHNpbXBsaWZpZXMgdGhlIHJlY2lwZSBzb21ld2hhdCEKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIG9lIHNwZWNpZmljCisKK1NpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHRleGluZm8tNC4xMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTQuMTMub3JpZy9jb25maWd1cmUuYWMKKysrKyB0ZXhpbmZvLTQuMTMvY29uZmlndXJlLmFjCitAQCAtMTAwLDI5ICsxMDAsNyBAQCBBQ19DQU5PTklDQUxfQlVJTEQKKyAjICRuYXRpdmVfdG9vbHMgaXMgYWxzbyBhZGRlZCB0byBTVUJESVJTIGluIHRoZSBtYWluIE1ha2VmaWxlLmFtLAorICMgc28gdGhhdCBtYWtlIGNvbXBpbGVzIHRoZSBuYXRpdmUgdG9vbHMgZmlyc3QuCisgIworLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKy0gIG5hdGl2ZV90b29scz0KKy1lbHNlCistICBuYXRpdmVfdG9vbHM9dG9vbHMKKy0gIHRlc3QgLWQgIiRuYXRpdmVfdG9vbHMiIHx8IG1rZGlyICIkbmF0aXZlX3Rvb2xzIgorLSAgY29uZmRpcj1gKGNkICIkc3JjZGlyIjtwd2QpYAorLSAgIyBNYWtlIHN1cmUgdGhlIHNlY29uZGFyeSBjb25maWd1cmUgd29uJ3QgZmFpbCB3aXRoCistICAjICJlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQiLgorLSAgcm0gLWYgY29uZmlnLnN0YXR1cworLSAgQUNfTVNHX05PVElDRShbW0RvaW5nIGNvbmZpZ3VyZSBvZiBuYXRpdmUgdG9vbHMgKCR7YnVpbGR9KS5dXSkKKy0gIGNkICIkbmF0aXZlX3Rvb2xzIiB8fCBleGl0IDEKKy0gICMgUnVuIHNlY29uZGFyeSBjb25maWd1cmUgaW4gYWx0ZXJuYXRlIGVudmlyb25tZW50IG9yCistICAjIGl0IGdldHMgdGhlIHdyb25nIENDIGV0Yy4KKy0gICMgZW52IC1pIGdpdmVzIHRoaXMgYnVpbGQgaG9zdCBjb25maWd1cmUgYSBjbGVhbiBlbnZpcm9ubWVudDsKKy0gICMgY29uc2VxdWVudGx5LCB3ZSBoYXZlIHRvIHJlLWluaXRpYWxpemUgJFBBVEguCistICBlbnYgLWkgQ0M9IiRCVUlMRF9DQyIgQVI9IiRCVUlMRF9BUiIgUkFOTElCPSIkQlVJTERfUkFOTElCIiBcCistICAgICAgUEFUSD0iJFBBVEgiIFwKKy0gICAgICB0b29sc19vbmx5PTEgXAorLSAgICAke2NvbmZkaXJ9L2NvbmZpZ3VyZSAtLWJ1aWxkPSR7YnVpbGR9IC0taG9zdD0ke2J1aWxkfSBcCistICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCAtLWRpc2FibGUtbmxzCistICBjZCAuLiB8fCBleGl0IDEKKy0gIEFDX01TR19OT1RJQ0UoW1tDb250aW51aW5nIHdpdGggbWFpbiBjb25maWd1cmUgKCR7aG9zdH0pLl1dKQorLWZpCisrbmF0aXZlX3Rvb2xzPQorIEFDX1NVQlNUKG5hdGl2ZV90b29scykKKyBBTV9DT05ESVRJT05BTChUT09MU19PTkxZLCBbW3Rlc3QgIngkdG9vbHNfb25seSIgPSB4MV1dKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZTQ3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA2ZjFmMzkxMmZjYjkwMGIzYTNlNmNiZTMzNjAzMDZmYWRlMzMzNDk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgNiBBdWcgMjAxNSAxNDo1NTowOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBkb250LWRlcGVuZC1vbi1oZWxwMm1hbgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKy0tLQorIGRvYy9NYWtlZmlsZS5hbSB8ICAyICstCisgbWFuL01ha2VmaWxlLmFtIHwgMTIgKysrKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KK2luZGV4IDcxOThhNmIuLjRiYmE1NTAgMTAwNjQ0CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTQwLDcgKzQwLDcgQEAgcmVmY2FyZF9maWxlcyA9IHJlZmNhcmQvTWFrZWZpbGUgcmVmY2FyZC90eGljbWRjaGVjayBcCisgIyBJbmNsdWRlIG91ciB0ZXhpbmZvLnRleCwgbm90IEF1dG9tYWtlJ3MuCisgRVhUUkFfRElTVCA9IGVwc2YudGV4IHRleGluZm8udGV4IFwKKyAgICAgICAgICAgICAgZmRsLnRleGkgXAorLQkgICAgICQobWFuX01BTlMpICQoVFhJX1hMQVRFKSBcCisrCSAgICAgJChUWElfWExBVEUpIFwKKyAJICAgICAkKHJlZmNhcmRfZmlsZXMpCisgCisgaWYgSU5TVEFMTF9XQVJOSU5HUworZGlmZiAtLWdpdCBhL21hbi9NYWtlZmlsZS5hbSBiL21hbi9NYWtlZmlsZS5hbQoraW5kZXggYTA4ZDYwMy4uYmRmYzlhNCAxMDA2NDQKKy0tLSBhL21hbi9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMTMsMjQgKzEzLDI0IEBACisgIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKyAjIFRoZXNlIGFyZSBnZW5lcmF0ZWQgdXNpbmcgaGVscDJtYW4uCistbWFuX01BTlMgPSBpbnN0YWxsLWluZm8uMSBtYWtlaW5mby4xIHRleGluZGV4LjEgdGV4aTJkdmkuMQorKyNtYW5fTUFOUyA9IGluc3RhbGwtaW5mby4xIG1ha2VpbmZvLjEgdGV4aW5kZXguMSB0ZXhpMmR2aS4xCisgCisgIyBUaGVzZSByZXF1aXJlIHRoZSBidWlsZCBpbiBpbmZvLywgdGh1cyBjYW4ndCBkbyBpZiB3ZSBmYWlsZWQgdG8gZmluZCBhCisgIyB0ZXJtaW5hbCBsaWJyYXJ5LgorIGlmIEhBVkVfVEVSTUxJQlMKKy1tYW5fTUFOUyArPSBpbmZvLjEKKysjbWFuX01BTlMgKz0gaW5mby4xCisgZW5kaWYKKyAKKyAjIFRoZXNlIGFyZSBoYW5kLXdyaXR0ZW4uCistbWFuX01BTlMgKz0gaW5mby41IHRleGluZm8uNQorKyNtYW5fTUFOUyArPSBpbmZvLjUgdGV4aW5mby41CisgCisgIyBUaGlzIGlzIGdlbmVyYXRlZCBieSBwb2QybWFuLCBidXQgbGV0J3MganVzdCBydW4gaXQgYnkgaGFuZC4KKy1tYW5fTUFOUyArPSBwb2QydGV4aS4xCisrI21hbl9NQU5TICs9IHBvZDJ0ZXhpLjEKKyAKKyAjIFRoZXNlIGFyZSBqdXN0IC5zbydzIHRvIHRoZSBjb21tb24gcHJvZ3JhbS4KKy1tYW5fTUFOUyArPSB0ZXhpMmFueS4xIHRleGkycGRmLjEgcGRmdGV4aTJkdmkuMQorKyNtYW5fTUFOUyArPSB0ZXhpMmFueS4xIHRleGkycGRmLjEgcGRmdGV4aTJkdmkuMQorIAorLUVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKSBnaW5mby5oMm0KKytFWFRSQV9ESVNUID0gZ2luZm8uaDJtCisgCisgIyBNYWludGFpbmVycyBzaG91bGQgYmUgYWJsZSB0byByZWdlbmVyYXRlLgorIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChtYW5fTUFOUykKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2xpbmstemlwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2xpbmstemlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNmU5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vbGluay16aXAucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAoraW5zdGFsbC1pbmZvIHVzZXMgc3ltYm9scyBmcm9tIHpsaWIgc28gbXVzdCBsaW5rIGFnYWluc3QgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB0ZXhpbmZvLTUuMS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMS5vcmlnL2luc3RhbGwtaW5mby9NYWtlZmlsZS5hbQorKysrIHRleGluZm8tNS4xL2luc3RhbGwtaW5mby9NYWtlZmlsZS5hbQorQEAgLTM0LDQgKzM0LDQgQEAgQU1fQ1BQRkxBR1MgPSAJCQkJCVwKKyAgIC1JJCh0b3Bfc3JjZGlyKS9nbnVsaWIvbGliCQkJXAorICAgLUkkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYgkJCVwKKyAgIC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIKKy1MREFERCA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hICQoTElCSU5UTCkKKytMREFERCA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hICQoTElCSU5UTCkgLWx6CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vdGV4aW5mby00LjEyLXpsaWIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vdGV4aW5mby00LjEyLXpsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiZDIyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby90ZXhpbmZvLTQuMTItemxpYi5wYXRjaApAQCAtMCwwICsxLDIzMyBAQAorRnJvbSAyMGUxZDhhOTQ4MWRjMTNkZDFkNGQxNjhiOTBlMGVkMmZmMDk3Yjk4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgNiBBdWcgMjAxNSAxNDoyOTo1NyArMDMwMAorU3ViamVjdDogW1BBVENIXSB0ZXhpbmZvLTQuMTItemxpYgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGluc3RhbGwtaW5mby9NYWtlZmlsZS5pbiAgICB8ICAyICstCisgaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jIHwgNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbiBiL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgoraW5kZXggYWQ3M2FiYi4uZWFhMjE1MyAxMDA2NDQKKy0tLSBhL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgorKysrIGIvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmluCitAQCAtMjQxLDcgKzI0MSw3IEBAIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIKKyBQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorIGFtX2dpbnN0YWxsX2luZm9fT0JKRUNUUyA9IGluc3RhbGwtaW5mby4kKE9CSkVYVCkKKyBnaW5zdGFsbF9pbmZvX09CSkVDVFMgPSAkKGFtX2dpbnN0YWxsX2luZm9fT0JKRUNUUykKKy1naW5zdGFsbF9pbmZvX0xEQUREID0gJChMREFERCkKKytnaW5zdGFsbF9pbmZvX0xEQUREID0gJChMREFERCkgLWx6CisgYW1fX0RFUEVOREVOQ0lFU18xID0KKyBnaW5zdGFsbF9pbmZvX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hIFwKKyAJJChhbV9fREVQRU5ERU5DSUVTXzEpCitkaWZmIC0tZ2l0IGEvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jIGIvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCitpbmRleCBiNDU0YzE1Li40ZTM5MTIyIDEwMDY0NAorLS0tIGEvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCisrKysgYi9pbnN0YWxsLWluZm8vaW5zdGFsbC1pbmZvLmMKK0BAIC0yMiw2ICsyMiw3IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlIDxhcmd6Lmg+CisrI2luY2x1ZGUgPHpsaWIuaD4KKyAKKyAjZGVmaW5lIFRBQl9XSURUSCA4CisgCitAQCAtNjg0LDE1ICs2ODUsMTUgQEAgVGhlIGZpcnN0IHRpbWUgeW91IGludm9rZSBJbmZvIHlvdSBzdGFydCBvZmYgbG9va2luZyBhdCB0aGlzIG5vZGUuXG5cCisgICAgCisgICAgUmV0dXJuIGVpdGhlciBzdGRpbiByZWFkaW5nIHRoZSBmaWxlLCBvciBhIG5vbi1zdGRpbiBwaXBlIHJlYWRpbmcKKyAgICB0aGUgb3V0cHV0IG9mIHRoZSBjb21wcmVzc2lvbiBwcm9ncmFtLiAgKi8KKy1GSUxFICoKKyt2b2lkICoKKyBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgICAgIHZvaWQgKCpjcmVhdGVfY2FsbGJhY2spIChjaGFyICopLAorLSAgICBjaGFyICoqb3BlbmVkX2ZpbGVuYW1lLCBjaGFyICoqY29tcHJlc3Npb25fcHJvZ3JhbSkgCisrICAgIGNoYXIgKipvcGVuZWRfZmlsZW5hbWUsIGNoYXIgKipjb21wcmVzc2lvbl9wcm9ncmFtLCBpbnQgKmlzX3BpcGUpIAorIHsKKyAgIGNoYXIgKmxvY2FsX29wZW5lZF9maWxlbmFtZSwgKmxvY2FsX2NvbXByZXNzaW9uX3Byb2dyYW07CisgICBpbnQgbnJlYWQ7CisgICBjaGFyIGRhdGFbMTNdOworLSAgRklMRSAqZjsKKysgIGd6RmlsZSAqZjsKKyAKKyAgIC8qIFdlIGxldCB0aGVtIHBhc3MgTlVMTCBpZiB0aGV5IGRvbid0IHdhbnQgdGhpcyBpbmZvLCBidXQgaXQncyBlYXNpZXIKKyAgICAgIHRvIGFsd2F5cyBkZXRlcm1pbmUgaXQuICAqLworQEAgLTcwMCw0OCArNzAxLDQ4IEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgb3BlbmVkX2ZpbGVuYW1lID0gJmxvY2FsX29wZW5lZF9maWxlbmFtZTsKKyAKKyAgICpvcGVuZWRfZmlsZW5hbWUgPSBmaWxlbmFtZTsKKy0gIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgIGlmICghZikKKyAgICAgeworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmd6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLnh6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmJ6MiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5seiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIubHptYSIsICIiKTsKKy0gICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICNpZmRlZiBfX01TRE9TX18KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmlneiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5pbnoiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICNlbmRpZiAvKiBfX01TRE9TX18gKi8KKyAgIGlmICghZikKK0BAIC03NTcsNyArNzU4LDcgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAoKmNyZWF0ZV9jYWxsYmFjaykgKGZpbGVuYW1lKTsKKyAKKyAgICAgICAgICAgLyogQW5kIHRyeSBvcGVuaW5nIGl0IGFnYWluLiAgKi8KKy0gICAgICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgICAgICAgIGlmICghZikKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KK0BAIC03NjcsMTIgKzc2OCwxMiBAQCBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgCisgICAvKiBSZWFkIGZpcnN0IGZldyBieXRlcyBvZiBmaWxlIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdGhlIGZpbGVuYW1lLgorICAgICAgSWYgdGhlIGZpbGUgaXMgc2hvcnRlciB0aGFuIHRoaXMgaXQgY2FuJ3QgYmUgdXNhYmxlIGFueXdheS4gICovCistICBucmVhZCA9IGZyZWFkIChkYXRhLCBzaXplb2YgKGRhdGEpLCAxLCBmKTsKKy0gIGlmIChucmVhZCAhPSAxKQorKyAgbnJlYWQgPSBnenJlYWQgKGYsIGRhdGEsIHNpemVvZiAoZGF0YSkpOworKyAgaWYgKG5yZWFkICE9IHNpemVvZiAoZGF0YSkpCisgICAgIHsKKyAgICAgICAvKiBFbXB0eSBmaWxlcyBkb24ndCBzZXQgZXJybm8uICBDYWxsaW5nIGNvZGUgY2FuIGNoZWNrIGZvcgorICAgICAgICAgIHRoaXMsIHNvIG1ha2Ugc3VyZSBlcnJubyA9PSAwIGp1c3QgaW4gY2FzZSBpdCBpc24ndCBhbHJlYWR5LiAqLworLSAgICAgIGlmIChucmVhZCA9PSAwKQorKyAgICAgIGlmIChucmVhZCA+PSAwKQorICAgICAgICAgZXJybm8gPSAwOworICAgICAgIHJldHVybiAwOworICAgICB9CitAQCAtODM4LDM1ICs4MzksNDAgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICAqY29tcHJlc3Npb25fcHJvZ3JhbSA9IE5VTEw7CisgCisgICAvKiBTZWVrIGJhY2sgb3ZlciB0aGUgbWFnaWMgYnl0ZXMuICAqLworLSAgaWYgKGZzZWVrIChmLCAwLCAwKSA8IDApCisrICBpZiAoZ3pzZWVrIChmLCAwLCBTRUVLX1NFVCkgPT0gLTEpCisgICAgIHJldHVybiAwOworIAorICAgaWYgKCpjb21wcmVzc2lvbl9wcm9ncmFtKQorICAgICB7IC8qIEl0J3MgY29tcHJlc3NlZCwgc28gb3BlbiBhIHBpcGUuICAqLworKyAgICAgIEZJTEUgKnA7CisgICAgICAgY2hhciAqY29tbWFuZCA9IGNvbmNhdCAoKmNvbXByZXNzaW9uX3Byb2dyYW0sICIgLWQiLCAiIik7CisgCistICAgICAgaWYgKGZjbG9zZSAoZikgPCAwKQorKyAgICAgIGlmIChnemNsb3NlIChmKSA8IDApCisgICAgICAgICByZXR1cm4gMDsKKy0gICAgICBmID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTiwgc3RkaW4pOworLSAgICAgIGlmICghZikKKysgICAgICBwID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTiwgc3RkaW4pOworKyAgICAgIGlmICghcCkKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGYgPSBwb3BlbiAoY29tbWFuZCwgInIiKTsKKy0gICAgICBpZiAoIWYpCisrICAgICAgcCA9IHBvcGVuIChjb21tYW5kLCAiciIpOworKyAgICAgIGlmICghcCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogVXNlZCBmb3IgZXJyb3IgbWVzc2FnZSBpbiBjYWxsaW5nIGNvZGUuICovCisgICAgICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb21tYW5kOworICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICAqaXNfcGlwZSA9IDE7CisrICAgICAgcmV0dXJuIHA7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSNpZiBPX0JJTkFSWQorKyNpZiAwICYmIE9fQklOQVJZCisgICAgICAgLyogU2luY2UgdGhpcyBpcyBhIHRleHQgZmlsZSwgYW5kIHdlIG9wZW5lZCBpdCBpbiBiaW5hcnkgbW9kZSwKKyAgICAgICAgICBzd2l0Y2ggYmFjayB0byB0ZXh0IG1vZGUuICAqLworICAgICAgIGYgPSBmcmVvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCAiciIsIGYpOworICAgICAgIGlmICghIGYpCisgCXJldHVybiAwOworICNlbmRpZgorKyAgICAgICppc19waXBlID0gMDsKKyAgICAgfQorIAorICAgcmV0dXJuIGY7CitAQCAtODg1LDcgKzg5MSw4IEBAIHJlYWRmaWxlIChjaGFyICpmaWxlbmFtZSwgaW50ICpzaXplcCwKKyAgICAgdm9pZCAoKmNyZWF0ZV9jYWxsYmFjaykgKGNoYXIgKiksIGNoYXIgKipvcGVuZWRfZmlsZW5hbWUsCisgICAgIGNoYXIgKipjb21wcmVzc2lvbl9wcm9ncmFtKQorIHsKKy0gIEZJTEUgKmY7CisrICB2b2lkICpmOworKyAgaW50IHBpcGVfcDsKKyAgIGludCBmaWxsZWQgPSAwOworICAgaW50IGRhdGFfc2l6ZSA9IDgxOTI7CisgICBjaGFyICpkYXRhID0geG1hbGxvYyAoZGF0YV9zaXplKTsKK0BAIC04OTMsMTQgKzkwMCwyMCBAQCByZWFkZmlsZSAoY2hhciAqZmlsZW5hbWUsIGludCAqc2l6ZXAsCisgICAvKiBJZiB0aGV5IHBhc3NlZCB0aGUgc3BhY2UgZm9yIHRoZSBmaWxlIG5hbWUgdG8gcmV0dXJuLCB1c2UgaXQuICAqLworICAgZiA9IG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChmaWxlbmFtZSwgY3JlYXRlX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWRfZmlsZW5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3Byb2dyYW0pOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl9wcm9ncmFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlwZV9wKTsKKyAKKyAgIGlmICghZikKKyAgICAgcmV0dXJuIDA7CisgCisgICBmb3IgKDs7KQorICAgICB7CistICAgICAgaW50IG5yZWFkID0gZnJlYWQgKGRhdGEgKyBmaWxsZWQsIDEsIGRhdGFfc2l6ZSAtIGZpbGxlZCwgZik7CisrICAgICAgaW50IG5yZWFkOworKworKyAgICAgIGlmIChwaXBlX3ApCisrICAgICAgICBucmVhZCA9IGZyZWFkIChkYXRhICsgZmlsbGVkLCAxLCBkYXRhX3NpemUgLSBmaWxsZWQsIGYpOworKyAgICAgIGVsc2UKKysgICAgICAgIG5yZWFkID0gZ3pyZWFkIChmLCBkYXRhICsgZmlsbGVkLCBkYXRhX3NpemUgLSBmaWxsZWQpOworICAgICAgIGlmIChucmVhZCA8IDApCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgICBpZiAobnJlYWQgPT0gMCkKK0BAIC05MTksOCArOTMyLDEwIEBAIHJlYWRmaWxlIChjaGFyICpmaWxlbmFtZSwgaW50ICpzaXplcCwKKyAgIC8qIFdlIG5lZWQgdG8gY2xvc2UgdGhlIHN0cmVhbSwgc2luY2Ugb24gc29tZSBzeXN0ZW1zIHRoZSBwaXBlIGNyZWF0ZWQKKyAgICAgIGJ5IHBvcGVuIGlzIHNpbXVsYXRlZCBieSBhIHRlbXBvcmFyeSBmaWxlIHdoaWNoIG9ubHkgZ2V0cyByZW1vdmVkCisgICAgICBpbnNpZGUgcGNsb3NlLiAgKi8KKy0gIGlmIChmICE9IHN0ZGluKQorKyAgaWYgKHBpcGVfcCkKKyAgICAgcGNsb3NlIChmKTsKKysgIGVsc2UKKysgICAgZ3pjbG9zZSAoZik7CisgCisgICAqc2l6ZXAgPSBmaWxsZWQ7CisgICByZXR1cm4gZGF0YTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vdXNlX2hvc3RfbWFrZWRvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjdmMzJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjcm9zcyBidWlsZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdGV4aW5mby01LjEvaW5mby9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRleGluZm8tNS4xLm9yaWcvaW5mby9NYWtlZmlsZS5hbQorKysrIHRleGluZm8tNS4xL2luZm8vTWFrZWZpbGUuYW0KK0BAIC03Niw3ICs3Niw3IEBAIGNtZF9zb3VyY2VzID0gJChzcmNkaXIpL3Nlc3Npb24uYyAkKHNyY2QKKyAjIG1vcmUgdGhhbiBvbmNlLgorIGZ1bnMuaDogbWFrZWRvYyQoRVhFRVhUKSAkKGNtZF9zb3VyY2VzKQorIAlybSAtZiAkKGdlbmVyYXRlZF9zb3VyY2VzKQorLQkkKHRvcF9idWlsZGRpcikvJChuYXRpdmVfdG9vbHMpL2luZm8vbWFrZWRvYyAkKGNtZF9zb3VyY2VzKQorKwltYWtlZG9jICQoY21kX3NvdXJjZXMpCisgCisgIyBUaGUgZm9sbG93aW5nIGhhY2sgaXMgbmVjZXNzYXJ5IHRvIGhpbnQgbWFrZSBiZWZvcmUgdGhlIGF1dG9tYXRpYworICMgZGVwZW5kZW5jaWVzIGFyZSBidWlsdC4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb180LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjc4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiRG9jdW1lbnRhdGlvbiBzeXN0ZW0gZm9yIG9uLWxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IgorREVTQ1JJUFRJT04gPSAiVGV4aW5mbyBpcyBhIGRvY3VtZW50YXRpb24gc3lzdGVtIHRoYXQgY2FuIHByb2R1Y2UgYm90aCBcCitvbmxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IGZyb20gYSBzaW5nbGUgc291cmNlIGZpbGUuIFRoZSBcCitHTlUgUHJvamVjdCB1c2VzIHRoZSBUZXhpbmZvIGZpbGUgZm9ybWF0IGZvciBtb3N0IG9mIGl0cyBkb2N1bWVudGF0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGV4aW5mby00LjgtcmVwbGFjZW1lbnQtbmF0aXZlIgorCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyB0ZXhpbmZvLTQuOC1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSIKKworVEFSR0VUX1BBVENIID0gImZpbGU6Ly91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaCBcCisiCitUQVJHRVRfUEFUQ0hfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RleGluZm8vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWxvY2FsZS1oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgJHtUQVJHRVRfUEFUQ0h9IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTlhMWE1OTFlZDIzNjAwM2QwZDRiMDA4YmYwN2VlZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjNjZGVlYmU2NWZkZjUxMGY1NWQ3NjVhYjEwMzFiNTQ0MTZhYTViYzI2MzViNmE1NGVmOWJjYjIzNjdjOTE3IgorCit0ZXhfdGV4aW5mbyA9ICJ0ZXhtZi90ZXgvdGV4aW5mbyIKKworaW5oZXJpdCBnZXR0ZXh0IGF1dG90b29scworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCWluc3RhbGwgLXAgLW02NDQgJHtTfS9kb2MvdGV4aW5mby50ZXggJHtTfS9kb2MvdHhpLT8/LnRleCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSA3NTUgaW5mby9tYWtlZG9jICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSBtYWtlaW5mby9tYWtlaW5mbyAke0R9JHtiaW5kaXJ9Cit9CisKK1BBQ0tBR0VTICs9ICJpbmZvIGluZm8tZG9jIgorCitGSUxFU19pbmZvID0gIiR7YmluZGlyfS9pbmZvICR7YmluZGlyfS9pbmZva2V5ICR7YmluZGlyfS9pbnN0YWxsLWluZm8iCitGSUxFU19pbmZvLWRvYyA9ICIke2luZm9kaXJ9L2luZm8uaW5mbyAke2luZm9kaXJ9L2RpciAke2luZm9kaXJ9L2luZm8tKi5pbmZvIFwKKyAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2luZm8uMSogJHttYW5kaXJ9L21hbjUvaW5mby41KiBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZva2V5LjEqICR7bWFuZGlyfS9tYW4xL2luc3RhbGwtaW5mby4xKiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L21ha2VpbmZvICR7YmluZGlyfS90ZXhpKiAke2JpbmRpcn0vcGRmdGV4aTJkdmkgJHtiaW5kaXJ9L3BvZDJ0ZXhpICR7ZGF0YWRpcn0vdGV4aW5mbyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2luZm9kaXJ9L3RleGluZm8qIFwKKyAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99IFwKKyAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMSAke21hbmRpcn0vbWFuNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmI3MTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYgpAQCAtMCwwICsxLDgyIEBACitTVU1NQVJZID0gIkRvY3VtZW50YXRpb24gc3lzdGVtIGZvciBvbi1saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCIKK0RFU0NSSVBUSU9OID0gIlRleGluZm8gaXMgYSBkb2N1bWVudGF0aW9uIHN5c3RlbSB0aGF0IGNhbiBwcm9kdWNlIGJvdGggXAorb25saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCBmcm9tIGEgc2luZ2xlIHNvdXJjZSBmaWxlLiBUaGUgXAorR05VIFByb2plY3QgdXNlcyB0aGUgVGV4aW5mbyBmaWxlIGZvcm1hdCBmb3IgbW9zdCBvZiBpdHMgZG9jdW1lbnRhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiB0ZXhpbmZvLXJlcGxhY2VtZW50LW5hdGl2ZSIKKworZGVmIGNvbXByZXNzX3BrZyhkKToKKyAgICBpZiAiY29tcHJlc3NfZG9jIiBpbiAoZC5nZXRWYXIoIklOSEVSSVQiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIGNvbXByZXNzID0gZC5nZXRWYXIoIkRPQ19DT01QUkVTUyIsIFRydWUpCisgICAgICAgICBpZiBjb21wcmVzcyA9PSAiZ3oiOgorICAgICAgICAgICAgIHJldHVybiAiZ3ppcCIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gImJ6MiI6CisgICAgICAgICAgICAgcmV0dXJuICJiemlwMiIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gInh6IjoKKyAgICAgICAgICAgICByZXR1cm4gInh6IgorICAgIHJldHVybiAiIgorCitSREVQRU5EU19pbmZvICs9ICIke0Bjb21wcmVzc19wa2coZCl9IgorCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyB0ZXhpbmZvLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIG5jdXJzZXMtbmF0aXZlIgorCitUQVJHRVRfUEFUQ0ggPSAiZmlsZTovL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2giCitUQVJHRVRfUEFUQ0hfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RleGluZm8vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RleGluZm8tNC4xMi16bGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmstemlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICAke1RBUkdFVF9QQVRDSH0gXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImUxYTJlZjVkY2U1MDE4YjUzZjBmNmVlZDQ1YjI0N2E3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzZDMxODMyOTBmMzRlN2Y5NThkMjA5ZDBiMjAwMjJjNmZlOWU5MjFlYjZmZTk0YzI3ZDk4ODgyN2Q0ODc4ZDIiCisKK3RleF90ZXhpbmZvID0gInRleG1mL3RleC90ZXhpbmZvIgorCitpbmhlcml0IGdldHRleHQgYXV0b3Rvb2xzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIGF1dG90b29sc19kb19jb25maWd1cmUgdXBkYXRlcyBwby9NYWtlZmlsZS5pbi5pbiwgd2UgYWxzbyBuZWVkCisJIyB1cGRhdGUgcG9fZG9jdW1lbnQuCisJY3AgLWYgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcG9fZG9jdW1lbnQvCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlpZiBbIC1kIHRvb2xzIF07dGhlbgorCQlvZV9ydW5tYWtlIC1DIHRvb2xzL2dudWxpYi9saWIKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCWluc3RhbGwgLXAgLW02NDQgJHtTfS9kb2MvdGV4aW5mby50ZXggJHtTfS9kb2MvdHhpLT8/LnRleCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vdGV4aTJhbnkgJHtEfSR7YmluZGlyfS9wb2QydGV4aQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSA3NTUgaW5mby9tYWtlZG9jICR7RH0ke2JpbmRpcn0KK30KKworUEFDS0FHRVMgKz0gImluZm8gaW5mby1kb2MiCisKK0ZJTEVTX2luZm8gPSAiJHtiaW5kaXJ9L2luZm8gJHtiaW5kaXJ9L2luZm9rZXkgJHtiaW5kaXJ9L2luc3RhbGwtaW5mbyIKK0ZJTEVTX2luZm8tZG9jID0gIiR7aW5mb2Rpcn0vaW5mby5pbmZvKiAke2luZm9kaXJ9L2RpciAke2luZm9kaXJ9L2luZm8tKi5pbmZvKiBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZvLjEqICR7bWFuZGlyfS9tYW41L2luZm8uNSogXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mb2tleS4xKiAke21hbmRpcn0vbWFuMS9pbnN0YWxsLWluZm8uMSoiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9tYWtlaW5mbyAke2JpbmRpcn0vdGV4aSogJHtiaW5kaXJ9L3BkZnRleGkyZHZpICR7YmluZGlyfS9wb2QydGV4aSAke2RhdGFkaXJ9L3RleGluZm8iCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIgorRklMRVNfJHtQTn0tZG9jID0gIiR7aW5mb2Rpcn0vdGV4aW5mbyogXAorICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30gXAorICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xICR7bWFuZGlyfS9tYW41IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lLTEuNy9kZWJpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlYTBlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoCkBAIC0wLDAgKzEsMTMwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0gdGltZS0xLjcub3JpZy9jb25maWd1cmUuaW4KKysrKyB0aW1lLTEuNy9jb25maWd1cmUuaW4KK0BAIC0xLDExICsxLDggQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyBBQ19JTklUKHRpbWUuYykKKy1WRVJTSU9OPTEuNworLUFDX1NVQlNUKFZFUlNJT04pCistUEFDS0FHRT10aW1lCistQUNfU1VCU1QoUEFDS0FHRSkKKytBTV9JTklUX0FVVE9NQUtFKHRpbWUsIDEuNykKKyAKKy1BQ19BUkdfUFJPR1JBTQorK0FNX01BSU5UQUlORVJfTU9ERQorIAorIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKK0BAIC0xNSw3ICsxMiw3IEBACisgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIEFDX0hFQURFUl9TVERDCisgQUNfSEVBREVSX1NZU19XQUlUCistQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCBzdHJpbmcuaCBzeXMvcnVzYWdlLmgpCisrQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCBzdHJpbmcuaCBzeXMvcnVzYWdlLmggc3lzL3Jlc291cmNlLmgpCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfQ19DT05TVAorLS0tIHRpbWUtMS43Lm9yaWcvdmVyc2lvbi50ZXhpCisrKysgdGltZS0xLjcvdmVyc2lvbi50ZXhpCitAQCAtMSwzICsxLDMgQEAKKy1Ac2V0IFVQREFURUQgMTIgSnVuZSAxOTk2CisrQHNldCBVUERBVEVEIDkgTWF5IDIwMDIKKyBAc2V0IEVESVRJT04gMS43CisgQHNldCBWRVJTSU9OIDEuNworLS0tIHRpbWUtMS43Lm9yaWcvdGltZS5jCisrKysgdGltZS0xLjcvdGltZS5jCitAQCAtMTQ3LDYgKzE0NywxMCBAQAorICAgTlVMTAorIH07CisgDAorKworKy8qIElmIHRydWUsIGRvIG5vdCBzaG93IHRoZSBleGl0IG1lc3NhZ2UgKi8KKytzdGF0aWMgYm9vbGVhbiBxdWlldDsKKysKKyAvKiBJZiB0cnVlLCBzaG93IGFuIEVuZ2xpc2ggZGVzY3JpcHRpb24gbmV4dCB0byBlYWNoIHN0YXRpc3RpYy4gICovCisgc3RhdGljIGJvb2xlYW4gdmVyYm9zZTsKKyAKK0BAIC0xNzIsNiArMTc2LDcgQEAKKyAgIHsiaGVscCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCd9LAorICAgeyJvdXRwdXQtZmlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAorICAgeyJwb3J0YWJpbGl0eSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKyAgeyJxdWlldCIsIG5vX2FyZ3VtZW50LE5VTEwsICdxJ30sCisgICB7InZlcmJvc2UiLCBub19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKKyAgIHsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVid9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorQEAgLTMzMyw3ICszMzgsOCBAQAorICAgZWxzZSBpZiAoV0lGU0lHTkFMRUQgKHJlc3AtPndhaXRzdGF0dXMpKQorICAgICBmcHJpbnRmIChmcCwgIkNvbW1hbmQgdGVybWluYXRlZCBieSBzaWduYWwgJWRcbiIsCisgCSAgICAgV1RFUk1TSUcgKHJlc3AtPndhaXRzdGF0dXMpKTsKKy0gIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzcC0+d2FpdHN0YXR1cykgJiYgV0VYSVRTVEFUVVMgKHJlc3AtPndhaXRzdGF0dXMpKQorKyAgZWxzZSBpZiAoV0lGRVhJVEVEIChyZXNwLT53YWl0c3RhdHVzKSAmJiBXRVhJVFNUQVRVUyAocmVzcC0+d2FpdHN0YXR1cykKKysJICAgJiYgIXF1aWV0KQorICAgICBmcHJpbnRmIChmcCwgIkNvbW1hbmQgZXhpdGVkIHdpdGggbm9uLXplcm8gc3RhdHVzICVkXG4iLAorIAkgICAgIFdFWElUU1RBVFVTIChyZXNwLT53YWl0c3RhdHVzKSk7CisgCitAQCAtNTIzLDYgKzUyOSw3IEBACisgICBjaGFyICpmb3JtYXQ7CQkJLyogRm9ybWF0IGZvdW5kIGluIGVudmlyb25tZW50LiAgKi8KKyAKKyAgIC8qIEluaXRpYWxpemUgdGhlIG9wdGlvbiBmbGFncy4gICovCisrICBxdWlldCA9IGZhbHNlOworICAgdmVyYm9zZSA9IGZhbHNlOworICAgb3V0ZmlsZSA9IE5VTEw7CisgICBvdXRmcCA9IHN0ZGVycjsKK0BAIC01MzYsNyArNTQzLDcgQEAKKyAgIGlmIChmb3JtYXQpCisgICAgIG91dHB1dF9mb3JtYXQgPSBmb3JtYXQ7CisgCistICB3aGlsZSAoKG9wdGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIithZjpvOnB2ViIsIGxvbmdvcHRzLCAoaW50ICopIDApKQorKyAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICIrYWY6bzpwcXZWIiwgbG9uZ29wdHMsIChpbnQgKikgMCkpCisgCSAhPSBFT0YpCisgICAgIHsKKyAgICAgICBzd2l0Y2ggKG9wdGMpCitAQCAtNTU1LDYgKzU2Miw5IEBACisgCWNhc2UgJ3AnOgorIAkgIG91dHB1dF9mb3JtYXQgPSBwb3NpeF9mb3JtYXQ7CisgCSAgYnJlYWs7CisrCWNhc2UgJ3EnOgorKwkgIHF1aWV0ID0gdHJ1ZTsKKysJICBicmVhazsKKyAJY2FzZSAndic6CisgCSAgdmVyYm9zZSA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtNjQyLDkgKzY1Miw5IEBACisgICBmZmx1c2ggKG91dGZwKTsKKyAKKyAgIGlmIChXSUZTVE9QUEVEIChyZXMud2FpdHN0YXR1cykpCistICAgIGV4aXQgKFdTVE9QU0lHIChyZXMud2FpdHN0YXR1cykpOworKyAgICBleGl0IChXU1RPUFNJRyAocmVzLndhaXRzdGF0dXMpICsgMTI4KTsKKyAgIGVsc2UgaWYgKFdJRlNJR05BTEVEIChyZXMud2FpdHN0YXR1cykpCistICAgIGV4aXQgKFdURVJNU0lHIChyZXMud2FpdHN0YXR1cykpOworKyAgICBleGl0IChXVEVSTVNJRyAocmVzLndhaXRzdGF0dXMpICsgMTI4KTsKKyAgIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzLndhaXRzdGF0dXMpKQorICAgICBleGl0IChXRVhJVFNUQVRVUyAocmVzLndhaXRzdGF0dXMpKTsKKyB9CitAQCAtNjU3LDcgKzY2Nyw3IEBACisgICBmcHJpbnRmIChzdHJlYW0sICJcCisgVXNhZ2U6ICVzIFstYXB2Vl0gWy1mIGZvcm1hdF0gWy1vIGZpbGVdIFstLWFwcGVuZF0gWy0tdmVyYm9zZV1cblwKKyAgICAgICAgWy0tcG9ydGFiaWxpdHldIFstLWZvcm1hdD1mb3JtYXRdIFstLW91dHB1dD1maWxlXSBbLS12ZXJzaW9uXVxuXAorLSAgICAgICBbLS1oZWxwXSBjb21tYW5kIFthcmcuLi5dXG4iLAorKyAgICAgICBbLS1xdWlldF0gWy0taGVscF0gY29tbWFuZCBbYXJnLi4uXVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAgIGV4aXQgKHN0YXR1cyk7CisgfQorLS0tIHRpbWUtMS43Lm9yaWcvcmVzdXNlLmgKKysrKyB0aW1lLTEuNy9yZXN1c2UuaAorQEAgLTM2LDE5ICszNiw4IEBACisgIyBpbmNsdWRlIDxzeXMvcnVzYWdlLmg+CisgI2Vsc2UKKyAjIGRlZmluZSBUVl9NU0VDIHR2X3VzZWMgLyAxMDAwCistIyBpZiBIQVZFX1dBSVQzCisrIyBpZiBIQVZFX1NZU19SRVNPVVJDRV9ICisgIyAgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CistIyBlbHNlCistLyogUHJvY2VzcyByZXNvdXJjZSB1c2FnZSBzdHJ1Y3R1cmUuICAqLworLXN0cnVjdCBydXNhZ2UKKy17CistICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsJLyogVXNlciB0aW1lIHVzZWQuICAqLworLSAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CS8qIFN5c3RlbSB0aW1lIHVzZWQuICAqLworLSAgaW50IHJ1X21heHJzcywgcnVfaXhyc3MsIHJ1X2lkcnNzLCBydV9pc3JzcywKKy0gIHJ1X21pbmZsdCwgcnVfbWFqZmx0LCBydV9uc3dhcCwgcnVfaW5ibG9jaywgCistICBydV9vdWJsb2NrLCBydV9tc2dzbmQsIHJ1X21zZ3JjdiwgcnVfbnNpZ25hbHMsCistICBydV9udmNzdywgcnVfbml2Y3N3OworLX07CisgIyBlbmRpZgorICNlbmRpZgorIAorLS0tIHRpbWUtMS43Lm9yaWcvdGltZS50ZXhpCisrKysgdGltZS0xLjcvdGltZS50ZXhpCitAQCAtMTEsNiArMTEsMTIgQEAKKyBAZmluYWxvdXQKKyBAZW5kIGlmdGV4CisgCisrQGRpcmNhdGVnb3J5IEluZGl2aWR1YWwgdXRpbGl0aWVzCisrQGRpcmVudHJ5CisrKiB0aW1lOiAodGltZSkuICAgICAgICAgICAgICAgICAgICAgUnVuIHByb2dyYW1zIGFuZCBzdW1tYXJpemUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gcmVzb3VyY2UgdXNhZ2UuCisrQGVuZCBkaXJlbnRyeQorKworIEBpZmluZm8KKyBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB0aGUgR05VIEBjb2Rle3RpbWV9IGNvbW1hbmQgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMKKyBhbmQgc3VtbWFyaXppbmcgdGhlIHN5c3RlbSByZXNvdXJjZXMgdGhleSB1c2UuCitAQCAtMTg1LDYgKzE5MSwxMCBAQAorIHN5cyAlUworIEBlbmQgZXhhbXBsZQorIAorK0BpdGVtIC1xCisrQGl0ZW14IC0tcXVpZXQKKytTdXBwcmVzcyBub24temVybyBlcnJvciBjb2RlIGZyb20gdGhlIGV4ZWN1dGVkIHByb2dyYW0uCisrCisgQGl0ZW0gLXYKKyBAaXRlbXggLS12ZXJib3NlCisgQGNpbmRleCBmb3JtYXQKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUuaW5mbworKysrIHRpbWUtMS43L3RpbWUuaW5mbworQEAgLTEsNSArMSwxMCBAQAorLVRoaXMgaXMgSW5mbyBmaWxlIC4vdGltZS5pbmZvLCBwcm9kdWNlZCBieSBNYWtlaW5mby0xLjU1IGZyb20gdGhlIGlucHV0CistZmlsZSB0aW1lLnRleGkuCisrVGhpcyBpcyB0aW1lLmluZm8sIHByb2R1Y2VkIGJ5IG1ha2VpbmZvIHZlcnNpb24gNC4xIGZyb20gdGltZS50ZXhpLgorKworK0lORk8tRElSLVNFQ1RJT04gSW5kaXZpZHVhbCB1dGlsaXRpZXMKKytTVEFSVC1JTkZPLURJUi1FTlRSWQorKyogdGltZTogKHRpbWUpLiAgICAgICAgICAgICAgICAgICAgIFJ1biBwcm9ncmFtcyBhbmQgc3VtbWFyaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHJlc291cmNlIHVzYWdlLgorK0VORC1JTkZPLURJUi1FTlRSWQorIAorICAgIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHRoZSBHTlUgYHRpbWUnIGNvbW1hbmQgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMKKyBhbmQgc3VtbWFyaXppbmcgdGhlIHN5c3RlbSByZXNvdXJjZXMgdGhleSB1c2UuCitAQCAtMzEsNyArMzYsNyBAQAorIAorICogUmVzb3VyY2UgTWVhc3VyZW1lbnQ6OiAgTWVhc3VyaW5nIHByb2dyYW0gcmVzb3VyY2UgdXNlLgorIAorLSAtLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tCisrIC0tLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tLQorIAorIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZQorIAorQEAgLTU4LDE0ICs2MywxNCBAQAorICAgIFRoZSBgdGltZScgY29tbWFuZCBydW5zIGFub3RoZXIgcHJvZ3JhbSwgdGhlbiBkaXNwbGF5cyBpbmZvcm1hdGlvbgorIGFib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGF0IHByb2dyYW0sIGNvbGxlY3RlZCBieSB0aGUgc3lzdGVtIHdoaWxlCisgdGhlIHByb2dyYW0gd2FzIHJ1bm5pbmcuICBZb3UgY2FuIHNlbGVjdCB3aGljaCBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZAorLWFuZCB0aGUgZm9ybWF0IGluIHdoaWNoIGl0IGlzIHNob3duICgqbm90ZSBTZXR0aW5nIEZvcm1hdDo6LiksIG9yIGhhdmUKKythbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoKm5vdGUgU2V0dGluZyBGb3JtYXQ6OiksIG9yIGhhdmUKKyBgdGltZScgc2F2ZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBmaWxlIGluc3RlYWQgb2YgZGlzcGxheWluZyBpdCBvbiB0aGUKKy1zY3JlZW4gKCpub3RlIFJlZGlyZWN0aW5nOjouKS4KKytzY3JlZW4gKCpub3RlIFJlZGlyZWN0aW5nOjopLgorIAorICAgIFRoZSByZXNvdXJjZXMgdGhhdCBgdGltZScgY2FuIHJlcG9ydCBvbiBmYWxsIGludG8gdGhlIGdlbmVyYWwKKyBjYXRlZ29yaWVzIG9mIHRpbWUsIG1lbW9yeSwgYW5kIEkvTyBhbmQgSVBDIGNhbGxzLiAgU29tZSBzeXN0ZW1zIGRvIG5vdAorIHByb3ZpZGUgbXVjaCBpbmZvcm1hdGlvbiBhYm91dCBwcm9ncmFtIHJlc291cmNlIHVzZTsgYHRpbWUnIHJlcG9ydHMKKy11bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoKm5vdGUgQWNjdXJhY3k6Oi4pLgorK3VuYXZhaWxhYmxlIGluZm9ybWF0aW9uIGFzIHplcm8gdmFsdWVzICgqbm90ZSBBY2N1cmFjeTo6KS4KKyAKKyAgICBUaGUgZm9ybWF0IG9mIHRoZSBgdGltZScgY29tbWFuZCBpczoKKyAKK0BAIC0xMzIsNiArMTM3LDEwIEBACisgICAgICAgICAgIHVzZXIgJVUKKyAgICAgICAgICAgc3lzICVTCisgCisrYC1xJworK2AtLXF1aWV0JworKyAgICAgU3VwcHJlc3Mgbm9uLXplcm8gZXJyb3IgY29kZSBmcm9tIHRoZSBleGVjdXRlZCBwcm9ncmFtLgorKworIGAtdicKKyBgLS12ZXJib3NlJworICAgICAgVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdCwgd2hpY2ggZGlzcGxheXMgZWFjaCBhdmFpbGFibGUKK0BAIC0xNzQsNyArMTgzLDcgQEAKKyAgICBUaGUgcmVzb3VyY2Ugc3BlY2lmaWVycywgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhvc2UgcmVjb2duaXplZCBieQorIHRoZSBgdGNzaCcgYnVpbHRpbiBgdGltZScgY29tbWFuZCwgYXJlIGxpc3RlZCBiZWxvdy4gIE5vdCBhbGwgcmVzb3VyY2VzCisgYXJlIG1lYXN1cmVkIGJ5IGFsbCB2ZXJzaW9ucyBvZiBVbml4LCBzbyBzb21lIG9mIHRoZSB2YWx1ZXMgbWlnaHQgYmUKKy1yZXBvcnRlZCBhcyB6ZXJvICgqbm90ZSBBY2N1cmFjeTo6LikuCisrcmVwb3J0ZWQgYXMgemVybyAoKm5vdGUgQWNjdXJhY3k6OikuCisgCisgKiBNZW51OgorIAorQEAgLTMwOCwxMSArMzE3LDExIEBACisgYC1vIEZJTEUnCisgYC0tb3V0cHV0PUZJTEUnCisgICAgICBXcml0ZSB0aGUgcmVzb3VyY2UgdXNlIHN0YXRpc3RpY3MgdG8gRklMRS4gIEJ5IGRlZmF1bHQsIHRoaXMKKy0gICAgICpvdmVyd3JpdGVzKiB0aGUgZmlsZSwgZGVzdHJveWluZyB0aGUgZmlsZSdzIHByZXZpb3VzIGNvbnRlbnRzLgorKyAgICAgX292ZXJ3cml0ZXNfIHRoZSBmaWxlLCBkZXN0cm95aW5nIHRoZSBmaWxlJ3MgcHJldmlvdXMgY29udGVudHMuCisgCisgYC1hJworIGAtLWFwcGVuZCcKKy0gICAgICpBcHBlbmQqIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKysgICAgIF9BcHBlbmRfIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKyAgICAgIG9mIG92ZXJ3cml0aW5nIGl0LiAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCB0aGUgYC1vJyBvcgorICAgICAgYC0tb3V0cHV0JyBvcHRpb24uCisgCitAQCAtNDM3LDcgKzQ0Niw3IEBACisgCisgYC1hJworIGAtLWFwcGVuZCcKKy0gICAgICpBcHBlbmQqIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKysgICAgIF9BcHBlbmRfIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKyAgICAgIG9mIG92ZXJ3cml0aW5nIGl0LgorIAorIGAtZiBGT1JNQVQnCitAQCAtNDYyLDE3ICs0NzEsMTcgQEAKKyAKKyAfCisgVGFnIFRhYmxlOgorLU5vZGU6IFRvcH85MzQKKy1Ob2RlOiBSZXNvdXJjZSBNZWFzdXJlbWVudH8xNzI1CistTm9kZTogU2V0dGluZyBGb3JtYXR/MzY3OAorLU5vZGU6IEZvcm1hdCBTdHJpbmd/NDkwNworLU5vZGU6IFRpbWUgUmVzb3VyY2VzfzYyMTQKKy1Ob2RlOiBNZW1vcnkgUmVzb3VyY2VzfzY4NDQKKy1Ob2RlOiBJL08gUmVzb3VyY2Vzfzc1NDkKKy1Ob2RlOiBDb21tYW5kIEluZm9/ODc0NworLU5vZGU6IFJlZGlyZWN0aW5nfzg5NjQKKy1Ob2RlOiBFeGFtcGxlc385NzU0CistTm9kZTogQWNjdXJhY3l/MTIwNjQKKy1Ob2RlOiBJbnZva2luZyB0aW1lfzEzNTg2CisrTm9kZTogVG9wfzExMTUKKytOb2RlOiBSZXNvdXJjZSBNZWFzdXJlbWVudH8xOTA4CisrTm9kZTogU2V0dGluZyBGb3JtYXR/Mzg1OAorK05vZGU6IEZvcm1hdCBTdHJpbmd/NTE2NAorK05vZGU6IFRpbWUgUmVzb3VyY2VzfzY0NzAKKytOb2RlOiBNZW1vcnkgUmVzb3VyY2VzfzcxMDAKKytOb2RlOiBJL08gUmVzb3VyY2Vzfzc4MDUKKytOb2RlOiBDb21tYW5kIEluZm9/OTAwMworK05vZGU6IFJlZGlyZWN0aW5nfzkyMjAKKytOb2RlOiBFeGFtcGxlc38xMDAxMAorK05vZGU6IEFjY3VyYWN5fzEyMzIwCisrTm9kZTogSW52b2tpbmcgdGltZX8xMzg0MgorIB8KKyBFbmQgVGFnIFRhYmxlCistLS0gdGltZS0xLjcub3JpZy90aW1lLmh0bWwKKysrKyB0aW1lLTEuNy90aW1lLmh0bWwKK0BAIC0wLDAgKzEsMTAyMSBAQAorKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisrICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAvbG9vc2UuZHRkIj4KKys8SFRNTD4KKys8IS0tIENyZWF0ZWQgb24gU2VwdGVtYmVyLCAxIDIwMDMgYnkgdGV4aTJodG1sIDEuNjYgLS0+CisrPCEtLQorK1dyaXR0ZW4gYnk6IExpb25lbCBDb25zIDxMaW9uZWwuQ29uc0BjZXJuLmNoPiAob3JpZ2luYWwgYXV0aG9yKQorKyAgICAgICAgICAgIEthcmwgQmVycnkgIDxrYXJsQGZyZWVmcmllbmRzLm9yZz4KKysgICAgICAgICAgICBPbGFmIEJhY2htYW5uIDxvYmFjaG1hbkBtYXRoZW1hdGlrLnVuaS1rbC5kZT4KKysgICAgICAgICAgICBhbmQgbWFueSBvdGhlcnMuCisrTWFpbnRhaW5lZCBieTogTWFueSBjcmVhdGl2ZSBwZW9wbGUgPGRldkB0ZXhpMmh0bWwuY3ZzaG9tZS5vcmc+CisrU2VuZCBidWdzIGFuZCBzdWdnZXN0aW9ucyB0byA8dXNlcnNAdGV4aTJodG1sLmN2c2hvbWUub3JnPgorKworKy0tPgorKzxIRUFEPgorKzxUSVRMRT5NZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L1RJVExFPgorKworKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSJNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UiPgorKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UiPgorKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKys8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+CisrPE1FVEEgTkFNRT0iR2VuZXJhdG9yIiBDT05URU5UPSJ0ZXhpMmh0bWwgMS42NiI+CisrCisrPC9IRUFEPgorKworKzxCT0RZIExBTkc9ImVuIiBCR0NPTE9SPSIjRkZGRkZGIiBURVhUPSIjMDAwMDAwIiBMSU5LPSIjMDAwMEZGIiBWTElOSz0iIzgwMDA4MCIgQUxJTks9IiNGRjAwMDAiPgorKworKzxBIE5BTUU9IlNFQ19Ub3AiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgxPk1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvSDE+CisrCisrPFA+CisrCisrVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdGhlIEdOVSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kIGZvciBydW5uaW5nIHByb2dyYW1zCisrYW5kIHN1bW1hcml6aW5nIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHRoZXkgdXNlLgorK1RoaXMgaXMgZWRpdGlvbiAxLjcsIGZvciB2ZXJzaW9uIDEuNy4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPk1lYXN1cmluZyBwcm9ncmFtIHJlc291cmNlIHVzZS48L1REPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+IC0tIFRoZSBEZXRhaWxlZCBOb2RlIExpc3RpbmcgLS0tCisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPk1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZQorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+MS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TZWxlY3RpbmcgdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlRoZSBpbmZvcm1hdGlvbiA8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5Xcml0aW5nIHRoZSBpbmZvcm1hdGlvbiB0byBhIGZpbGUuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+RXhhbXBsZXMgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkxpbWl0YXRpb25zIG9uIHRoZSBhY2N1cmFjeSBvZiA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZC48L1REPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+VGhlIEZvcm1hdCBTdHJpbmcKKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8SFIgU0laRT0xPgorKzxBIE5BTUU9IlNFQzEiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzIiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmx0OyZsdDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEEgTkFNRT0iUmVzb3VyY2UgTWVhc3VyZW1lbnQiPjwvQT4KKys8SDE+IDEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZSA8L0gxPgorKzwhLS1kb2NpZDo6U0VDMTo6LS0+CisrPFA+CisrCisrVGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgcnVucyBhbm90aGVyIHByb2dyYW0sIHRoZW4gZGlzcGxheXMgaW5mb3JtYXRpb24KKythYm91dCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhhdCBwcm9ncmFtLCBjb2xsZWN0ZWQgYnkgdGhlIHN5c3RlbSB3aGlsZQorK3RoZSBwcm9ncmFtIHdhcyBydW5uaW5nLiAgWW91IGNhbiBzZWxlY3Qgd2hpY2ggaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQKKythbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPiksIG9yIGhhdmUKKys8Q09ERT50aW1lPC9DT0RFPiBzYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiBhIGZpbGUgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIGl0IG9uIHRoZQorK3NjcmVlbiAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+KS4KKys8L1A+CisrPFA+CisrCisrVGhlIHJlc291cmNlcyB0aGF0IDxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQgb24gZmFsbCBpbnRvIHRoZSBnZW5lcmFsCisrY2F0ZWdvcmllcyBvZiB0aW1lLCBtZW1vcnksIGFuZCBJL08gYW5kIElQQyBjYWxscy4gIFNvbWUgc3lzdGVtcyBkbyBub3QKKytwcm92aWRlIG11Y2ggaW5mb3JtYXRpb24gYWJvdXQgcHJvZ3JhbSByZXNvdXJjZSB1c2U7IDxDT0RFPnRpbWU8L0NPREU+CisrcmVwb3J0cyB1bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+KS4KKys8L1A+CisrPFA+CisrCisrVGhlIGZvcm1hdCBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBpczoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnRpbWUgW29wdGlvbjxzbWFsbD4uLi48L3NtYWxsPl0gPFZBUj5jb21tYW5kPC9WQVI+IFs8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPl0KKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8QSBOQU1FPSJJRFgxIj48L0E+CisrPENPREU+dGltZTwvQ09ERT4gcnVucyB0aGUgcHJvZ3JhbSA8VkFSPmNvbW1hbmQ8L1ZBUj4sIHdpdGggYW55IGdpdmVuIGFyZ3VtZW50cworKzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+LiAgV2hlbiA8VkFSPmNvbW1hbmQ8L1ZBUj4gZmluaXNoZXMsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzCisraW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHVzZWQgYnkgPFZBUj5jb21tYW5kPC9WQVI+LgorKzwvUD4KKys8UD4KKysKKytIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4gdG8gbWVhc3VyZSB0aGUgdGltZSBhbmQgb3RoZXIKKytyZXNvdXJjZXMgdXNlZCBieSBydW5uaW5nIHRoZSBwcm9ncmFtIDxDT0RFPmdyZXA8L0NPREU+OgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgZ3JlcCBub2JvZHkgL2V0Yy9hbGlhc2VzCisrbm9ib2R5Oi9kZXYvbnVsbAorK2V0Yy1maWxlczpub2JvZHkKKyttaXNjLWdyb3VwOm5vYm9keQorKzAuMDd1c2VyIDAuNTBzeXN0ZW0gMDowNi42OWVsYXBzZWQgOCVDUFUgKDBhdmd0ZXh0KzQ4OWF2Z2RhdGEgMzI0bWF4cmVzaWRlbnQpaworKzQ2aW5wdXRzKzdvdXRwdXRzICg0M21ham9yKzI1MW1pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrTWFpbCBzdWdnZXN0aW9ucyBhbmQgYnVnIHJlcG9ydHMgZm9yIEdOVSA8Q09ERT50aW1lPC9DT0RFPiB0bworKzxDT0RFPmJ1Zy1nbnUtdXRpbHNAcHJlcC5haS5taXQuZWR1PC9DT0RFPi4gIFBsZWFzZSBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mCisrPENPREU+dGltZTwvQ09ERT4sIHdoaWNoIHlvdSBjYW4gZ2V0IGJ5IHJ1bm5pbmcgYDxTQU1QPnRpbWUgLS12ZXJzaW9uPC9TQU1QPicsIGFuZCB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIGFuZCBDIGNvbXBpbGVyIHlvdSB1c2VkLgorKzwvUD4KKys8UD4KKysKKys8VEFCTEUgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlNlbGVjdGluZyB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgYnkgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+VGhlIGluZm9ybWF0aW9uIDxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+MS4zIFJlZGlyZWN0aW5nIE91dHB1dDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPldyaXRpbmcgdGhlIGluZm9ybWF0aW9uIHRvIGEgZmlsZS48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4xLjQgRXhhbXBsZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5FeGFtcGxlcyBvZiB1c2luZyA8Q09ERT50aW1lPC9DT0RFPi48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+TGltaXRhdGlvbnMgb24gdGhlIGFjY3VyYWN5IG9mIDxDT0RFPnRpbWU8L0NPREU+IG91dHB1dC48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMSI+MS42IFJ1bm5pbmcgdGhlIDxDT0RFPnRpbWU8L0NPREU+IENvbW1hbmQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kLjwvVEQ+PC9UUj4KKys8L1RBQkxFPgorKzxQPgorKworKzxBIE5BTUU9IlNldHRpbmcgRm9ybWF0Ij48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzIiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzMiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0IDwvSDI+CisrPCEtLWRvY2lkOjpTRUMyOjotLT4KKys8UD4KKysKKys8Q09ERT50aW1lPC9DT0RFPiB1c2VzIGEgPEVNPmZvcm1hdCBzdHJpbmc8L0VNPiB0byBkZXRlcm1pbmUgd2hpY2ggaW5mb3JtYXRpb24gdG8KKytkaXNwbGF5IGFib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY29tbWFuZCBpdCBydW5zLiAgU2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT4sIGZvciB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZvcm1hdCBzdHJpbmcgY29udGVudHMuCisrPC9QPgorKzxQPgorKworK1lvdSBjYW4gc3BlY2lmeSBhIGZvcm1hdCBzdHJpbmcgd2l0aCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgbGlzdGVkCisrYmVsb3cuICBJZiBubyBmb3JtYXQgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCB0aGUKKys8Q09ERT5USU1FPC9DT0RFPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0cyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBmb3JtYXQKKytzdHJpbmcuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IGZvcm1hdCBidWlsdCBpbnRvIDxDT0RFPnRpbWU8L0NPREU+IGlzIHVzZWQ6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT4lVXVzZXIgJVNzeXN0ZW0gJUVlbGFwc2VkICVQQ1BVICglWHRleHQrJURkYXRhICVNbWF4KWsKKyslSWlucHV0cyslT291dHB1dHMgKCVGbWFqb3IrJVJtaW5vcilwYWdlZmF1bHRzICVXc3dhcHMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gc2V0IHRoZSBmb3JtYXQgYXJlOgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1mIDxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1mb3JtYXQ9PFZBUj5mb3JtYXQ8L1ZBUj48L0NPREU+CisrPEREPlVzZSA8VkFSPmZvcm1hdDwvVkFSPiBhcyB0aGUgZm9ybWF0IHN0cmluZy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1wPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1wb3J0YWJpbGl0eTwvQ09ERT4KKys8REQ+VXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0IHN0cmluZywgZm9yIGNvbmZvcm1hbmNlIHdpdGggUE9TSVggc3RhbmRhcmQKKysxMDAzLjI6CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnJlYWwgJWUKKyt1c2VyICVVCisrc3lzICVTCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcXVpZXQ8L0NPREU+CisrPEREPlN1cHByZXNzIG5vbi16ZXJvIGVycm9yIGNvZGUgZnJvbSB0aGUgZXhlY3V0ZWQgcHJvZ3JhbS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi12PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS12ZXJib3NlPC9DT0RFPgorKzxERD48QSBOQU1FPSJJRFgyIj48L0E+CisrVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdCwgd2hpY2ggZGlzcGxheXMgZWFjaCBhdmFpbGFibGUgcGllY2Ugb2YKKytpbmZvcm1hdGlvbiBvbiB0aGUgcHJvZ3JhbSdzIHJlc291cmNlIHVzZSBvbiBpdHMgb3duIGxpbmUsIHdpdGggYW4KKytFbmdsaXNoIGRlc2NyaXB0aW9uIG9mIGl0cyBtZWFuaW5nLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iRm9ybWF0IFN0cmluZyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMzIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjIgVGhlIEZvcm1hdCBTdHJpbmcgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzM6Oi0tPgorKzxQPgorKworKzxBIE5BTUU9IklEWDMiPjwvQT4KKys8QSBOQU1FPSJJRFg0Ij48L0E+CisrVGhlIDxFTT5mb3JtYXQgc3RyaW5nPC9FTT4gY29udHJvbHMgdGhlIGNvbnRlbnRzIG9mIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuCisrSXQgY29uc2lzdHMgb2YgPEVNPnJlc291cmNlIHNwZWNpZmllcnM8L0VNPiBhbmQgPEVNPmVzY2FwZXM8L0VNPiwgaW50ZXJzcGVyc2VkCisrd2l0aCBwbGFpbiB0ZXh0LgorKzwvUD4KKys8UD4KKysKKytBIGJhY2tzbGFzaCBpbnRyb2R1Y2VzIGFuIDxFTT5lc2NhcGU8L0VNPiwgd2hpY2ggaXMgdHJhbnNsYXRlZAorK2ludG8gYSBzaW5nbGUgcHJpbnRpbmcgY2hhcmFjdGVyIHVwb24gb3V0cHV0LiAgVGhlIHZhbGlkIGVzY2FwZXMgYXJlCisrbGlzdGVkIGJlbG93LiAgQW4gaW52YWxpZCBlc2NhcGUgaXMgb3V0cHV0IGFzIGEgcXVlc3Rpb24gbWFyayBmb2xsb3dlZAorK2J5IGEgYmFja3NsYXNoLgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPlx0PC9DT0RFPgorKzxERD5hIHRhYiBjaGFyYWN0ZXIKKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlxuPC9DT0RFPgorKzxERD5hIG5ld2xpbmUKKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlxcPC9DT0RFPgorKzxERD5hIGxpdGVyYWwgYmFja3NsYXNoCisrPC9ETD4KKys8UD4KKysKKys8Q09ERT50aW1lPC9DT0RFPiBhbHdheXMgcHJpbnRzIGEgbmV3bGluZSBhZnRlciBwcmludGluZyB0aGUgcmVzb3VyY2UgdXNlCisraW5mb3JtYXRpb24sIHNvIG5vcm1hbGx5IGZvcm1hdCBzdHJpbmdzIGRvIG5vdCBlbmQgd2l0aCBhIG5ld2xpbmUKKytjaGFyYWN0ZXIgKG9yIGA8U0FNUD5cbjwvU0FNUD4nKS4KKys8L1A+CisrPFA+CisrCisrQSByZXNvdXJjZSBzcGVjaWZpZXIgY29uc2lzdHMgb2YgYSBwZXJjZW50IHNpZ24gZm9sbG93ZWQgYnkgYW5vdGhlcgorK2NoYXJhY3Rlci4gIEFuIGludmFsaWQgcmVzb3VyY2Ugc3BlY2lmaWVyIGlzIG91dHB1dCBhcyBhIHF1ZXN0aW9uIG1hcmsKKytmb2xsb3dlZCBieSB0aGUgaW52YWxpZCBjaGFyYWN0ZXIuICBVc2UgYDxTQU1QPiUlPC9TQU1QPicgdG8gb3V0cHV0IGEgbGl0ZXJhbAorK3BlcmNlbnQgc2lnbi4KKys8L1A+CisrPFA+CisrCisrVGhlIHJlc291cmNlIHNwZWNpZmllcnMsIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mIHRob3NlIHJlY29nbml6ZWQgYnkgdGhlCisrPENPREU+dGNzaDwvQ09ERT4gYnVpbHRpbiA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kLCBhcmUgbGlzdGVkIGJlbG93LiAgTm90IGFsbAorK3Jlc291cmNlcyBhcmUgbWVhc3VyZWQgYnkgYWxsIHZlcnNpb25zIG9mIFVuaXgsIHNvIHNvbWUgb2YgdGhlIHZhbHVlcworK21pZ2h0IGJlIHJlcG9ydGVkIGFzIHplcm8gKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPikuCisrPC9QPgorKzxQPgorKworKzxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8QSBOQU1FPSJUaW1lIFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM0Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMSBUaW1lIFJlc291cmNlcyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNDo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5FPC9DT0RFPgorKzxERD5FbGFwc2VkIHJlYWwgKHdhbGwgY2xvY2spIHRpbWUgdXNlZCBieSB0aGUgcHJvY2VzcywgaW4KKytbaG91cnM6XW1pbnV0ZXM6c2Vjb25kcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPmU8L0NPREU+CisrPEREPkVsYXBzZWQgcmVhbCAod2FsbCBjbG9jaykgdGltZSB1c2VkIGJ5IHRoZSBwcm9jZXNzLCBpbgorK3NlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5TPC9DT0RFPgorKzxERD5Ub3RhbCBudW1iZXIgb2YgQ1BVLXNlY29uZHMgdXNlZCBieSB0aGUgc3lzdGVtIG9uIGJlaGFsZiBvZiB0aGUgcHJvY2VzcworKyhpbiBrZXJuZWwgbW9kZSksIGluIHNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5VPC9DT0RFPgorKzxERD5Ub3RhbCBudW1iZXIgb2YgQ1BVLXNlY29uZHMgdGhhdCB0aGUgcHJvY2VzcyB1c2VkIGRpcmVjdGx5IChpbiB1c2VyCisrbW9kZSksIGluIHNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5QPC9DT0RFPgorKzxERD5QZXJjZW50YWdlIG9mIHRoZSBDUFUgdGhhdCB0aGlzIGpvYiBnb3QuICBUaGlzIGlzIGp1c3QgdXNlciArIHN5c3RlbQorK3RpbWVzIGRpdmllZCBieSB0aGUgdG90YWwgcnVubmluZyB0aW1lLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iTWVtb3J5IFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM1Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMiBNZW1vcnkgUmVzb3VyY2VzIDwvSDM+CisrPCEtLWRvY2lkOjpTRUM1OjotLT4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPk08L0NPREU+CisrPEREPk1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUgb2YgdGhlIHByb2Nlc3MgZHVyaW5nIGl0cyBsaWZldGltZSwgaW4KKytLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT50PC9DT0RFPgorKzxERD5BdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIG9mIHRoZSBwcm9jZXNzLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5LPC9DT0RFPgorKzxERD5BdmVyYWdlIHRvdGFsIChkYXRhK3N0YWNrK3RleHQpIG1lbW9yeSB1c2Ugb2YgdGhlIHByb2Nlc3MsIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPkQ8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHVuc2hhcmVkIGRhdGEgYXJlYSwgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+cDwvQ09ERT4KKys8REQ+QXZlcmFnZSBzaXplIG9mIHRoZSBwcm9jZXNzJ3MgdW5zaGFyZWQgc3RhY2ssIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlg8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHNoYXJlZCB0ZXh0LCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5aPC9DT0RFPgorKzxERD5TeXN0ZW0ncyBwYWdlIHNpemUsIGluIGJ5dGVzLiAgVGhpcyBpcyBhIHBlci1zeXN0ZW0gY29uc3RhbnQsIGJ1dAorK3ZhcmllcyBiZXR3ZWVuIHN5c3RlbXMuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJJL08gUmVzb3VyY2VzIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzYiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzUiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzciPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi4zIEkvTyBSZXNvdXJjZXMgPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzY6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+RjwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIG1ham9yLCBvciBJL08tcmVxdWlyaW5nLCBwYWdlIGZhdWx0cyB0aGF0IG9jY3VycmVkIHdoaWxlIHRoZQorK3Byb2Nlc3Mgd2FzIHJ1bm5pbmcuICBUaGVzZSBhcmUgZmF1bHRzIHdoZXJlIHRoZSBwYWdlIGhhcyBhY3R1YWxseQorK21pZ3JhdGVkIG91dCBvZiBwcmltYXJ5IG1lbW9yeS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlI8L0NPREU+CisrPEREPk51bWJlciBvZiBtaW5vciwgb3IgcmVjb3ZlcmFibGUsIHBhZ2UgZmF1bHRzLiAgVGhlc2UgYXJlIHBhZ2VzIHRoYXQgYXJlCisrbm90IHZhbGlkIChzbyB0aGV5IGZhdWx0KSBidXQgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gY2xhaW1lZCBieSBvdGhlcgorK3ZpcnR1YWwgcGFnZXMuICBUaHVzIHRoZSBkYXRhIGluIHRoZSBwYWdlIGlzIHN0aWxsIHZhbGlkIGJ1dCB0aGUgc3lzdGVtCisrdGFibGVzIG11c3QgYmUgdXBkYXRlZC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlc8L0NPREU+CisrPEREPk51bWJlciBvZiB0aW1lcyB0aGUgcHJvY2VzcyB3YXMgc3dhcHBlZCBvdXQgb2YgbWFpbiBtZW1vcnkuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5jPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgdGltZXMgdGhlIHByb2Nlc3Mgd2FzIGNvbnRleHQtc3dpdGNoZWQgaW52b2x1bnRhcmlseSAoYmVjYXVzZQorK3RoZSB0aW1lIHNsaWNlIGV4cGlyZWQpLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+dzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIHByb2dyYW0gd2FzIGNvbnRleHQtc3dpdGNoZWQgdm9sdW50YXJpbHksIGZvcgorK2luc3RhbmNlIHdoaWxlIHdhaXRpbmcgZm9yIGFuIEkvTyBvcGVyYXRpb24gdG8gY29tcGxldGUuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5JPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgZmlsZSBzeXN0ZW0gaW5wdXRzIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+TzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIGZpbGUgc3lzdGVtIG91dHB1dHMgYnkgdGhlIHByb2Nlc3MuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5yPC9DT0RFPgorKzxERD5OdW1iZXIgb2Ygc29ja2V0IG1lc3NhZ2VzIHJlY2VpdmVkIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+czwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNvY2tldCBtZXNzYWdlcyBzZW50IGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+azwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNpZ25hbHMgZGVsaXZlcmVkIHRvIHRoZSBwcm9jZXNzLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iQ29tbWFuZCBJbmZvIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzciPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzYiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzgiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi40IENvbW1hbmQgSW5mbyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNzo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5DPC9DT0RFPgorKzxERD5OYW1lIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9mIHRoZSBjb21tYW5kIGJlaW5nIHRpbWVkLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+eDwvQ09ERT4KKys8REQ+RXhpdCBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJSZWRpcmVjdGluZyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM4Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjMgUmVkaXJlY3RpbmcgT3V0cHV0IDwvSDI+CisrPCEtLWRvY2lkOjpTRUM4OjotLT4KKys8UD4KKysKKytCeSBkZWZhdWx0LCA8Q09ERT50aW1lPC9DT0RFPiB3cml0ZXMgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIHRoZQorK3N0YW5kYXJkIGVycm9yIHN0cmVhbS4gIFRoZSBvcHRpb25zIGJlbG93IG1ha2UgaXQgd3JpdGUgdGhlIHN0YXRpc3RpY3MKKyt0byBhIGZpbGUgaW5zdGVhZC4gIERvaW5nIHRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgcHJvZ3JhbSB5b3UncmUKKytydW5uaW5nIHdyaXRlcyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3IgeW91J3JlIHJ1bm5pbmcgPENPREU+dGltZTwvQ09ERT4KKytub25pbnRlcmFjdGl2ZWx5IG9yIGluIHRoZSBiYWNrZ3JvdW5kLgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1vIDxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tb3V0cHV0PTxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+V3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIDxWQVI+ZmlsZTwvVkFSPi4gIEJ5IGRlZmF1bHQsIHRoaXMKKys8RU0+b3ZlcndyaXRlczwvRU0+IHRoZSBmaWxlLCBkZXN0cm95aW5nIHRoZSBmaWxlJ3MgcHJldmlvdXMgY29udGVudHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tYTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tYXBwZW5kPC9DT0RFPgorKzxERD48RU0+QXBwZW5kPC9FTT4gdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorK29mIG92ZXJ3cml0aW5nIGl0LiAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCB0aGUgYDxTQU1QPi1vPC9TQU1QPicgb3IKKytgPFNBTVA+LS1vdXRwdXQ8L1NBTVA+JyBvcHRpb24uCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJFeGFtcGxlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM5Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS40IEV4YW1wbGVzIDwvSDI+CisrPCEtLWRvY2lkOjpTRUM5OjotLT4KKys8UD4KKysKKytSdW4gdGhlIGNvbW1hbmQgYDxTQU1QPndjIC9ldGMvaG9zdHM8L1NBTVA+JyBhbmQgc2hvdyB0aGUgZGVmYXVsdCBpbmZvcm1hdGlvbjoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIHdjIC9ldGMvaG9zdHMKKysgICAgICAzNSAgICAgMTExICAgIDExMzQgL2V0Yy9ob3N0cworKzAuMDB1c2VyIDAuMDFzeXN0ZW0gMDowMC4wNGVsYXBzZWQgMjUlQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpaworKzFpbnB1dHMrMW91dHB1dHMgKDBtYWpvciswbWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytSdW4gdGhlIGNvbW1hbmQgYDxTQU1QPmxzIC1GczwvU0FNUD4nIGFuZCBzaG93IGp1c3QgdGhlIHVzZXIsIHN5c3RlbSwgYW5kCisrd2FsbC1jbG9jayB0aW1lOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgLWYgJnF1b3Q7XHQlRSByZWFsLFx0JVUgdXNlcixcdCVTIHN5cyZxdW90OyBscyAtRnMKKyt0b3RhbCAxNgorKzEgYWNjb3VudC8gICAgICAxIGRiLyAgICAgICAgICAgMSBtYWlsLyAgICAgICAgIDEgcnVuLworKzEgYmFja3Vwcy8gICAgICAxIGVtYWNzLyAgICAgICAgMSBtc2dzLyAgICAgICAgIDEgcndoby8KKysxIGNyYXNoLyAgICAgICAgMSBnYW1lcy8gICAgICAgIDEgcHJlc2VydmUvICAgICAxIHNwb29sLworKzEgY3Jvbi8gICAgICAgICAxIGxvZy8gICAgICAgICAgMSBxdW90YXMvICAgICAgIDEgdG1wLworKyAgICAgICAgMDowMC4wMyByZWFsLCAgIDAuMDAgdXNlciwgICAgICAwLjAxIHN5cworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK0VkaXQgdGhlIGZpbGUgYDxUVD4uYmFzaHJjPC9UVD4nIGFuZCBoYXZlIDxDT0RFPnRpbWU8L0NPREU+IGFwcGVuZCB0aGUgZWxhcHNlZCB0aW1lCisrYW5kIG51bWJlciBvZiBzaWduYWxzIHRvIHRoZSBmaWxlIGA8VFQ+bG9nPC9UVD4nLCByZWFkaW5nIHRoZSBmb3JtYXQgc3RyaW5nCisrZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPENPREU+VElNRTwvQ09ERT46CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgZXhwb3J0IFRJTUU9JnF1b3Q7XHQlRSxcdCVrJnF1b3Q7ICMgSWYgdXNpbmcgYmFzaCBvciBrc2gKKytlZyQgc2V0ZW52IFRJTUUgJnF1b3Q7XHQlRSxcdCVrJnF1b3Q7ICMgSWYgdXNpbmcgY3NoIG9yIHRjc2gKKytlZyQgdGltZSAtYSAtbyBsb2cgZW1hY3MgLmJhc2hyYworK2VnJCBjYXQgbG9nCisrICAgICAgICAwOjE2LjU1LCAgICAgICAgNzI2CisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrUnVuIHRoZSBjb21tYW5kIGA8U0FNUD5zbGVlcCA0PC9TQU1QPicgYW5kIHNob3cgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBpdAorK3ZlcmJvc2VseToKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIC12IHNsZWVwIDQKKysgICAgICAgIENvbW1hbmQgYmVpbmcgdGltZWQ6ICZxdW90O3NsZWVwIDQmcXVvdDsKKysgICAgICAgIFVzZXIgdGltZSAoc2Vjb25kcyk6IDAuMDAKKysgICAgICAgIFN5c3RlbSB0aW1lIChzZWNvbmRzKTogMC4wNQorKyAgICAgICAgUGVyY2VudCBvZiBDUFUgdGhpcyBqb2IgZ290OiAxJQorKyAgICAgICAgRWxhcHNlZCAod2FsbCBjbG9jaykgdGltZSAoaDptbTpzcyBvciBtOnNzKTogMDowNC4yNgorKyAgICAgICAgQXZlcmFnZSBzaGFyZWQgdGV4dCBzaXplIChrYnl0ZXMpOiAzNgorKyAgICAgICAgQXZlcmFnZSB1bnNoYXJlZCBkYXRhIHNpemUgKGtieXRlcyk6IDI0CisrICAgICAgICBBdmVyYWdlIHN0YWNrIHNpemUgKGtieXRlcyk6IDAKKysgICAgICAgIEF2ZXJhZ2UgdG90YWwgc2l6ZSAoa2J5dGVzKTogNjAKKysgICAgICAgIE1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUgKGtieXRlcyk6IDMyCisrICAgICAgICBBdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMpOiAyNAorKyAgICAgICAgTWFqb3IgKHJlcXVpcmluZyBJL08pIHBhZ2UgZmF1bHRzOiAzCisrICAgICAgICBNaW5vciAocmVjbGFpbWluZyBhIGZyYW1lKSBwYWdlIGZhdWx0czogMAorKyAgICAgICAgVm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXM6IDExCisrICAgICAgICBJbnZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiAwCisrICAgICAgICBTd2FwczogMAorKyAgICAgICAgRmlsZSBzeXN0ZW0gaW5wdXRzOiAzCisrICAgICAgICBGaWxlIHN5c3RlbSBvdXRwdXRzOiAxCisrICAgICAgICBTb2NrZXQgbWVzc2FnZXMgc2VudDogMAorKyAgICAgICAgU29ja2V0IG1lc3NhZ2VzIHJlY2VpdmVkOiAwCisrICAgICAgICBTaWduYWxzIGRlbGl2ZXJlZDogMQorKyAgICAgICAgUGFnZSBzaXplIChieXRlcyk6IDQwOTYKKysgICAgICAgIEV4aXQgc3RhdHVzOiAwCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPEEgTkFNRT0iQWNjdXJhY3kiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDMTAiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzkiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzExIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjUgQWNjdXJhY3kgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzEwOjotLT4KKys8UD4KKysKKytUaGUgZWxhcHNlZCB0aW1lIGlzIG5vdCBjb2xsZWN0ZWQgYXRvbWljYWxseSB3aXRoIHRoZSBleGVjdXRpb24gb2YgdGhlCisrcHJvZ3JhbTsgYXMgYSByZXN1bHQsIGluIGJpemFycmUgY2lyY3Vtc3RhbmNlcyAoaWYgdGhlIDxDT0RFPnRpbWU8L0NPREU+CisrY29tbWFuZCBnZXRzIHN0b3BwZWQgb3Igc3dhcHBlZCBvdXQgaW4gYmV0d2VlbiB3aGVuIHRoZSBwcm9ncmFtIGJlaW5nCisrdGltZWQgZXhpdHMgYW5kIHdoZW4gPENPREU+dGltZTwvQ09ERT4gY2FsY3VsYXRlcyBob3cgbG9uZyBpdCB0b29rIHRvIHJ1biksIGl0CisrY291bGQgYmUgbXVjaCBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGV4ZWN1dGlvbiB0aW1lLgorKzwvUD4KKys8UD4KKysKKytXaGVuIHRoZSBydW5uaW5nIHRpbWUgb2YgYSBjb21tYW5kIGlzIHZlcnkgbmVhcmx5IHplcm8sIHNvbWUgdmFsdWVzCisrKGUuZy4sIHRoZSBwZXJjZW50YWdlIG9mIENQVSB1c2VkKSBtYXkgYmUgcmVwb3J0ZWQgYXMgZWl0aGVyIHplcm8gKHdoaWNoCisraXMgd3JvbmcpIG9yIGEgcXVlc3Rpb24gbWFyay4KKys8L1A+CisrPFA+CisrCisrTW9zdCBpbmZvcm1hdGlvbiBzaG93biBieSA8Q09ERT50aW1lPC9DT0RFPiBpcyBkZXJpdmVkIGZyb20gdGhlIDxDT0RFPndhaXQzPC9DT0RFPgorK3N5c3RlbSBjYWxsLiAgVGhlIG51bWJlcnMgYXJlIG9ubHkgYXMgZ29vZCBhcyB0aG9zZSByZXR1cm5lZCBieQorKzxDT0RFPndhaXQzPC9DT0RFPi4gIE1hbnkgc3lzdGVtcyBkbyBub3QgbWVhc3VyZSBhbGwgb2YgdGhlIHJlc291cmNlcyB0aGF0CisrPENPREU+dGltZTwvQ09ERT4gY2FuIHJlcG9ydCBvbjsgdGhvc2UgcmVzb3VyY2VzIGFyZSByZXBvcnRlZCBhcyB6ZXJvLiAgVGhlCisrc3lzdGVtcyB0aGF0IG1lYXN1cmUgbW9zdCBvciBhbGwgb2YgdGhlIHJlc291cmNlcyBhcmUgYmFzZWQgb24gNC4yIG9yCisrNC4zQlNELiAgTGF0ZXIgQlNEIHJlbGVhc2VzIHVzZSBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0CisrbWVhc3VyZXMgZmV3ZXIgcmVzb3VyY2VzLgorKzwvUD4KKys8UD4KKysKKytPbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYSA8Q09ERT53YWl0MzwvQ09ERT4gY2FsbCB0aGF0IHJldHVybnMgc3RhdHVzCisraW5mb3JtYXRpb24sIHRoZSA8Q09ERT50aW1lczwvQ09ERT4gc3lzdGVtIGNhbGwgaXMgdXNlZCBpbnN0ZWFkLiAgSXQgcHJvdmlkZXMKKyttdWNoIGxlc3MgaW5mb3JtYXRpb24gdGhhbiA8Q09ERT53YWl0MzwvQ09ERT4sIHNvIG9uIHRob3NlIHN5c3RlbXMgPENPREU+dGltZTwvQ09ERT4KKytyZXBvcnRzIG1vc3Qgb2YgdGhlIHJlc291cmNlcyBhcyB6ZXJvLgorKzwvUD4KKys8UD4KKysKKytUaGUgYDxTQU1QPiVJPC9TQU1QPicgYW5kIGA8U0FNUD4lTzwvU0FNUD4nIHZhbHVlcyBhcmUgYWxsZWdlZGx5IG9ubHkgJnF1b3Q7cmVhbCZxdW90OyBpbnB1dAorK2FuZCBvdXRwdXQgYW5kIGRvIG5vdCBpbmNsdWRlIHRob3NlIHN1cHBsaWVkIGJ5IGNhY2hpbmcgZGV2aWNlcy4gIFRoZQorK21lYW5pbmcgb2YgJnF1b3Q7cmVhbCZxdW90OyBJL08gcmVwb3J0ZWQgYnkgYDxTQU1QPiVJPC9TQU1QPicgYW5kIGA8U0FNUD4lTzwvU0FNUD4nIG1heSBiZQorK211ZGRsZWQgZm9yIHdvcmtzdGF0aW9ucywgZXNwZWNpYWxseSBkaXNrbGVzcyBvbmVzLgorKzwvUD4KKys8UD4KKysKKys8QSBOQU1FPSJJbnZva2luZyB0aW1lIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzExIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kIDwvSDI+CisrPCEtLWRvY2lkOjpTRUMxMTo6LS0+CisrPFA+CisrCisrVGhlIGZvcm1hdCBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBpczoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnRpbWUgW29wdGlvbjxzbWFsbD4uLi48L3NtYWxsPl0gPFZBUj5jb21tYW5kPC9WQVI+IFs8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPl0KKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8QSBOQU1FPSJJRFg1Ij48L0E+CisrPENPREU+dGltZTwvQ09ERT4gcnVucyB0aGUgcHJvZ3JhbSA8VkFSPmNvbW1hbmQ8L1ZBUj4sIHdpdGggYW55IGdpdmVuIGFyZ3VtZW50cworKzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+LiAgV2hlbiA8VkFSPmNvbW1hbmQ8L1ZBUj4gZmluaXNoZXMsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzCisraW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHVzZWQgYnkgPFZBUj5jb21tYW5kPC9WQVI+IChvbiB0aGUgc3RhbmRhcmQgZXJyb3IKKytvdXRwdXQsIGJ5IGRlZmF1bHQpLiAgSWYgPFZBUj5jb21tYW5kPC9WQVI+IGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzIG9yIGlzCisrdGVybWluYXRlZCBieSBhIHNpZ25hbCwgPENPREU+dGltZTwvQ09ERT4gZGlzcGxheXMgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIHRoZQorK2V4aXQgc3RhdHVzIG9yIHNpZ25hbCBudW1iZXIuCisrPC9QPgorKzxQPgorKworK09wdGlvbnMgdG8gPENPREU+dGltZTwvQ09ERT4gbXVzdCBhcHBlYXIgb24gdGhlIGNvbW1hbmQgbGluZSBiZWZvcmUKKys8VkFSPmNvbW1hbmQ8L1ZBUj4uICBBbnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIDxWQVI+Y29tbWFuZDwvVkFSPiBpcworK3Bhc3NlZCBhcyBhcmd1bWVudHMgdG8gPFZBUj5jb21tYW5kPC9WQVI+LgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1vIDxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tb3V0cHV0PTxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+V3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIDxWQVI+ZmlsZTwvVkFSPi4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1hPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1hcHBlbmQ8L0NPREU+CisrPEREPjxFTT5BcHBlbmQ8L0VNPiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrb2Ygb3ZlcndyaXRpbmcgaXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tZiA8VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tZm9ybWF0PTxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD5Vc2UgPFZBUj5mb3JtYXQ8L1ZBUj4gYXMgdGhlIGZvcm1hdCBzdHJpbmcuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tLWhlbHA8L0NPREU+CisrPEREPlByaW50IGEgc3VtbWFyeSBvZiB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gPENPREU+dGltZTwvQ09ERT4gYW5kIGV4aXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcDwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcG9ydGFiaWxpdHk8L0NPREU+CisrPEREPlVzZSB0aGUgUE9TSVggZm9ybWF0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXY8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXZlcmJvc2U8L0NPREU+CisrPEREPjxBIE5BTUU9IklEWDYiPjwvQT4KKytVc2UgdGhlIGJ1aWx0LWluIHZlcmJvc2UgZm9ybWF0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LVY8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXZlcnNpb248L0NPREU+CisrPEREPjxBIE5BTUU9IklEWDciPjwvQT4KKytQcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgPENPREU+dGltZTwvQ09ERT4gYW5kIGV4aXQuCisrPC9ETD4KKys8UD4KKysKKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDX0NvbnRlbnRzIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5UYWJsZSBvZiBDb250ZW50czwvSDE+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMSIgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT4KKys8QlI+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMiIgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MzIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPgorKzxCUj4KKys8QkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0M0IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+MS4yLjEgVGltZSBSZXNvdXJjZXM8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzUiIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4xLjIuMiBNZW1vcnkgUmVzb3VyY2VzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M2IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+MS4yLjMgSS9PIFJlc291cmNlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DNyIgSFJFRj0idGltZS5odG1sI1NFQzciPjEuMi40IENvbW1hbmQgSW5mbzwvQT4KKys8QlI+CisrPC9CTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzgiIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M5IiBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MxMCIgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzExIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPgorKzxCUj4KKys8L0JMT0NLUVVPVEU+CisrPC9CTE9DS1FVT1RFPgorKzxIUiBTSVpFPTE+CisrPEEgTkFNRT0iU0VDX09WRVJWSUVXIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5TaG9ydCBUYWJsZSBvZiBDb250ZW50czwvSDE+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMSIgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT4KKys8QlI+CisrCisrPC9CTE9DS1FVT1RFPgorKzxIUiBTSVpFPTE+CisrPEEgTkFNRT0iU0VDX0Fib3V0Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5BYm91dCB0aGlzIGRvY3VtZW50PC9IMT4KKytUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQKKytieSAKKyt1c2luZyA8QSBIUkVGPSJodHRwOi8vdGV4aTJodG1sLmN2c2hvbWUub3JnIj48ST50ZXhpMmh0bWw8L0k+PC9BPgorKzxQPjwvUD4KKytUaGUgYnV0dG9ucyBpbiB0aGUgbmF2aWdhdGlvbiBwYW5lbHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisrPFA+PC9QPgorKzx0YWJsZSBib3JkZXIgPSAiMSI+CisrPFRSPgorKzxUSD4gQnV0dG9uIDwvVEg+CisrPFRIPiBOYW1lIDwvVEg+CisrPFRIPiBHbyB0byA8L1RIPgorKzxUSD4gRnJvbSAxLjIuMyBnbyB0bzwvVEg+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbICZsdDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytCYWNrCisrPC9URD4KKys8VEQ+CisrcHJldmlvdXMgc2VjdGlvbiBpbiByZWFkaW5nIG9yZGVyCisrPC9URD4KKys8VEQ+CisrMS4yLjIKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmZ3Q7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrRm9yd2FyZAorKzwvVEQ+CisrPFREPgorK25leHQgc2VjdGlvbiBpbiByZWFkaW5nIG9yZGVyCisrPC9URD4KKys8VEQ+CisrMS4yLjQKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmbHQ7Jmx0OyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0Zhc3RCYWNrCisrPC9URD4KKys8VEQ+CisrYmVnaW5uaW5nIG9mIHRoaXMgY2hhcHRlciBvciBwcmV2aW91cyBjaGFwdGVyCisrPC9URD4KKys8VEQ+CisrMQorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbIFVwIF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrVXAKKys8L1REPgorKzxURD4KKyt1cCBzZWN0aW9uCisrPC9URD4KKys8VEQ+CisrMS4yCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmd0OyZndDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytGYXN0Rm9yd2FyZAorKzwvVEQ+CisrPFREPgorK25leHQgY2hhcHRlcgorKzwvVEQ+CisrPFREPgorKzIKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgW1RvcF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrVG9wCisrPC9URD4KKys8VEQ+CisrY292ZXIgKHRvcCkgb2YgZG9jdW1lbnQKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbQ29udGVudHNdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0NvbnRlbnRzCisrPC9URD4KKys8VEQ+CisrdGFibGUgb2YgY29udGVudHMKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbSW5kZXhdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0luZGV4CisrPC9URD4KKys8VEQ+CisrY29uY2VwdCBpbmRleAorKzwvVEQ+CisrPFREPgorKyAmbmJzcDsgCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgPyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0Fib3V0CisrPC9URD4KKys8VEQ+CisrdGhpcyBwYWdlCisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPC9UQUJMRT4KKysgICAgPFA+CisrICAgICAgd2hlcmUgdGhlIDxTVFJPTkc+IEV4YW1wbGUgPC9TVFJPTkc+IGFzc3VtZXMgdGhhdCB0aGUgY3VycmVudCBwb3NpdGlvbgorKyAgICAgIGlzIGF0IDxTVFJPTkc+IFN1YnN1YnNlY3Rpb24gT25lLVR3by1UaHJlZSA8L1NUUk9ORz4gb2YgYSBkb2N1bWVudCBvZgorKyAgICAgIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOjwvUD4KKysgICAgPFVMPgorKyAgICAgIDxMST4gMS4gU2VjdGlvbiBPbmUKKysgICAgICAgIDxVTD4KKysgICAgICAgICAgPExJPjEuMSBTdWJzZWN0aW9uIE9uZS1PbmUKKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+Li4uPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8TEk+MS4yIFN1YnNlY3Rpb24gT25lLVR3bworKyAgICAgICAgICAgIDxVTD4KKysgICAgICAgICAgICAgIDxMST4xLjIuMSBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tT25lPC9MST4KKysgICAgICAgICAgICAgIDxMST4xLjIuMiBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVHdvPC9MST4KKysgICAgICAgICAgICAgIDxMST4xLjIuMyBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVGhyZWUgJm5ic3A7ICZuYnNwOworKyAgICAgICAgICAgICAgICA8U1RST05HPiZsdDs9PSBDdXJyZW50IFBvc2l0aW9uIDwvU1RST05HPjwvTEk+CisrICAgICAgICAgICAgICA8TEk+MS4yLjQgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLUZvdXI8L0xJPgorKyAgICAgICAgICAgIDwvVUw+CisrICAgICAgICAgIDwvTEk+CisrICAgICAgICAgIDxMST4xLjMgU3Vic2VjdGlvbiBPbmUtVGhyZWUKKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+Li4uPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8L0xJPgorKyAgICAgICAgICA8TEk+MS40IFN1YnNlY3Rpb24gT25lLUZvdXI8L0xJPgorKyAgICAgICAgPC9VTD4KKysgICAgICA8L0xJPgorKyAgICA8L1VMPgorKworKzxIUiBTSVpFPTE+CisrPEJSPgorKzxGT05UIFNJWkU9Ii0xIj4KKytUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQKKytieSA8ST5yb290PC9JPiBvbiA8ST5TZXB0ZW1iZXIsIDEgMjAwMzwvST4KKyt1c2luZyA8QSBIUkVGPSJodHRwOi8vdGV4aTJodG1sLmN2c2hvbWUub3JnIj48ST50ZXhpMmh0bWw8L0k+PC9BPgorKzwvRk9OVD4KKysKKys8L0JPRFk+CisrPC9IVE1MPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU4NjIxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJUb29sIHRoYXQgbWVhc3VyZXMgQ1BVIHJlc291cmNlcyIKK0RFU0NSSVBUSU9OID0gInRpbWUgbWVhc3VyZXMgbWFueSBvZiB0aGUgQ1BVIHJlc291cmNlcywgc3VjaCBhcyB0aW1lIGFuZCBcCittZW1vcnksIHRoYXQgb3RoZXIgcHJvZ3JhbXMgdXNlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90aW1lLyIKK1NFQ1RJT04gPSAidXRpbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitpbmhlcml0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ0aW1lIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lXzEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjNTM1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSB0aW1lLmluYworCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RpbWUvdGltZS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9kZWJpYW4ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMzhkMmI4YjM0YjFjYTI1OWNmN2IwNTNjYWFjMzJiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMzdlYTc5YTI1M2JmODVhODVhZGEyZjdjNjMyYzE0ZTQ4MWE1ZmQyNjJhMzYyZjZmNGZkNThlNjg2MDE0OTZkIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE1Zi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg2NWEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIKQEAgLTAsMCArMSwyNSBAQAorIyBub3RlIHRoYXQgd2UgYWxsb3cgZm9yIHVzIHRvIHVzZSBkYXRhIGxhdGVyIHRoYW4gb3VyIGNvZGUgdmVyc2lvbgorIworREVTQ1JJUFRJT04gPSAidHpjb2RlLCB0aW1lem9uZSB6b25laW5mbyB1dGlscyAtLSB6aWMsIHpkdW1wLCB0enNlbGVjdCIKK0xJQ0VOU0UgPSAiUEQgJiBCU0QiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vUkVBRE1FO21kNT1kMGZmOTNhNzNkZDViYzNjNmU3MjRiYjQzNDM3NjBmNiIKKworU1JDX1VSSSA9IiBmdHA6Ly9mdHAuaWFuYS5vcmcvdHovcmVsZWFzZXMvdHpjb2RlJHtQVn0udGFyLmd6O25hbWU9dHpjb2RlIFwKKyAgICAgICAgICAgZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6ZGF0YTIwMTVmLnRhci5nejtuYW1lPXR6ZGF0YSIKKworU1JDX1VSSVt0emNvZGUubWQ1c3VtXSA9ICIxOTU3OGQ0MzJiYThiOTJmNzM0MDZhMTdhOWJjMjY4ZCIKK1NSQ19VUklbdHpjb2RlLnNoYTI1NnN1bV0gPSAiMGM5NWUwYTQyYmI2MTE0MWY3OTBmNGY1ZjIwNGI5NTRkNzY1NGM4OTRhYTU0YTU5NGEyMTVkNmYzOGRlODRhZSIKK1NSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiZTNiODI3MzJkMjBlOTczZTQ4YWYxYzZmMTNkZjlhMWQiCitTUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjk1OWY4MWI1NDFlMDQyZWNiMTNjNTAwOTdkMjY0YWU5MmZmMDNhNTc5NzljNDc4ZGJjZjI0ZDVkYTI0MjUzMWQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgemljICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHpkdW1wICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHR6c2VsZWN0ICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTVmLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2RhNDBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYgpAQCAtMCwwICsxLDIwNyBAQAorREVTQ1JJUFRJT04gPSAiVGltZXpvbmUgZGF0YSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiUEQgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hc2lhO2JlZ2lubGluZT0yO2VuZGxpbmU9MzttZDU9OTk2YTk4MTE3NDdhYTQ4ZGI5MWVkMjM5ZTViMzU1YTEiCitERVBFTkRTID0gInR6Y29kZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKKworU1JDX1VSSVt0emRhdGEubWQ1c3VtXSA9ICJlM2I4MjczMmQyMGU5NzNlNDhhZjFjNmYxM2RmOWExZCIKK1NSQ19VUklbdHpkYXRhLnNoYTI1NnN1bV0gPSAiOTU5ZjgxYjU0MWUwNDJlY2IxM2M1MDA5N2QyNjRhZTkyZmYwM2E1Nzk3OWM0NzhkYmNmMjRkNWRhMjQyNTMxZCIKKworaW5oZXJpdCBhbGxhcmNoCisKK1JDT05GTElDVFNfJHtQTn0gPSAidGltZXpvbmVzIHRpbWV6b25lLWFmcmljYSB0aW1lem9uZS1hbWVyaWNhIHRpbWV6b25lLWFudGFyY3RpY2EgXAorICAgICAgICAgICAgIHRpbWV6b25lLWFyY3RpYyB0aW1lem9uZS1hc2lhIHRpbWV6b25lLWF0bGFudGljIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1hdXN0cmFsaWEgdGltZXpvbmUtZXVyb3BlIHRpbWV6b25lLWluZGlhbiBcCisgICAgICAgICAgICAgdGltZXpvbmUtaXNvMzE2Ni50YWIgdGltZXpvbmUtcGFjaWZpYyB0aW1lem9uZS16b25lLnRhYiIKKworUyA9ICIke1dPUktESVJ9IgorCitERUZBVUxUX1RJTUVaT05FID89ICJVbml2ZXJzYWwiCisKK1RaT05FUz0gImFmcmljYSBhbnRhcmN0aWNhIGFzaWEgYXVzdHJhbGFzaWEgZXVyb3BlIG5vcnRoYW1lcmljYSBzb3V0aGFtZXJpY2EgIFwKKyAgICAgICAgIGZhY3RvcnkgZXRjZXRlcmEgYmFja3dhcmQgc3lzdGVtdiBcCisgICAgICAgICIKKyMgcGFjaWZpY25ldyAKKworZG9fY29tcGlsZSAoKSB7CisgICAgICAgIGZvciB6b25lIGluICR7VFpPTkVTfTsgZG8gXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mbyAtTCAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4IC1MIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQgLUwgJHtTfS9sZWFwc2Vjb25kcyBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyRleGVjX3ByZWZpeCAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFBSICR7U30vJGV4ZWNfcHJlZml4ICR7RH0vCisgICAgICAgICMgbGliYyBpcyByZW1vdmluZyB6b25laW5mbyBmaWxlcyBmcm9tIHBhY2thZ2UKKyAgICAgICAgY3AgLXBQICIke1N9L3pvbmUudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFAgIiR7U30vaXNvMzE2Ni50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisKKyAgICAgICAgIyBJbnN0YWxsIGRlZmF1bHQgdGltZXpvbmUKKyAgICAgICAgaWYgWyAtZSAke0R9JHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9IF07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgICAgIGVjaG8gJHtERUZBVUxUX1RJTUVaT05FfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RpbWV6b25lCisgICAgICAgICAgICBsbiAtcyAke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gJHtEfSR7c3lzY29uZmRpcn0vbG9jYWx0aW1lCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJiZXJyb3IgIkRFRkFVTFRfVElNRVpPTkUgaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUuIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlldGNfbHQ9IiREJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCisJc3JjPSIkRCR7c3lzY29uZmRpcn0vdGltZXpvbmUiCisKKwlpZiBbIC1lICR7c3JjfSBdIDsgdGhlbgorCQl0ej0kKHNlZCAtZSAnczojLio6OicgLWUgJ3M6W1s6c3BhY2U6XV0qOjpnJyAtZSAnL14kL2QnICIke3NyY30iKQorCWZpCisJCisJaWYgWyAteiAiJHt0en0iIF0gOyB0aGVuCisJCWV4aXQgMAorCWZpCisJCisJaWYgWyAhIC1lICIkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iIF0gOyB0aGVuCisJCWVjaG8gIllvdSBoYXZlIGFuIGludmFsaWQgVElNRVpPTkUgc2V0dGluZyBpbiAke3NyY30iCisJCWVjaG8gIllvdXIgJHtldGNfbHR9IGhhcyBiZWVuIHJlc2V0IHRvIFVuaXZlcnNhbDsgZW5qb3khIgorCQl0ej0iVW5pdmVyc2FsIgorCQllY2hvICJVcGRhdGluZyAke2V0Y19sdH0gd2l0aCAkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iCisJCWlmIFsgLUwgJHtldGNfbHR9IF0gOyB0aGVuCisJCQlybSAtZiAiJHtldGNfbHR9IgorCQlmaQorCQlsbiAtcyAiJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgIiR7ZXRjX2x0fSIKKwlmaQorfQorCisjIFBhY2thZ2VzIHByaW1hcmlseSBvcmdhbml6ZWQgYnkgZGlyZWN0b3J5IHdpdGggYSBtYWpvciBjaXR5CisjIGluIG1vc3QgdGltZSB6b25lcyBpbiB0aGUgYmFzZSBwYWNrYWdlCisKK1BBQ0tBR0VTID0gInR6ZGF0YSB0emRhdGEtbWlzYyB0emRhdGEtcG9zaXggdHpkYXRhLXJpZ2h0IHR6ZGF0YS1hZnJpY2EgXAorICAgIHR6ZGF0YS1hbWVyaWNhcyB0emRhdGEtYW50YXJjdGljYSB0emRhdGEtYXJjdGljIHR6ZGF0YS1hc2lhIFwKKyAgICB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSB0emRhdGEtZXVyb3BlIHR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtYWZyaWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hZnJpY2EgPSAidHpkYXRhLWFmcmljYSIKKworRklMRVNfdHpkYXRhLWFtZXJpY2FzICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvKiAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVMvKiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9CcmF6aWwvKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NhbmFkYS8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWV4aWNvLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DaGlsZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hbWVyaWNhcyA9ICJ0emRhdGEtYW1lcmljYXMiCisKK0ZJTEVTX3R6ZGF0YS1hbnRhcmN0aWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FudGFyY3RpY2EvKiIKK1JQUk9WSURFU190emRhdGEtYW50YXJjdGljYSA9ICJ0emRhdGEtYW50YXJjdGljYSIKKworRklMRVNfdHpkYXRhLWFyY3RpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BcmN0aWMvKiIKK1JQUk9WSURFU190emRhdGEtYXJjdGljID0gInR6ZGF0YS1hcmN0aWMiCisKK0ZJTEVTX3R6ZGF0YS1hc2lhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvKiAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSW5kaWFuLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NaWRlYXN0LyoiCitSUFJPVklERVNfdHpkYXRhLWFzaWEgPSAidHpkYXRhLWFzaWEiCisKK0ZJTEVTX3R6ZGF0YS1hdGxhbnRpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdGxhbnRpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1hdGxhbnRpYyA9ICJ0emRhdGEtYXRsYW50aWMiCisKK0ZJTEVTX3R6ZGF0YS1hdXN0cmFsaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhLyoiCitSUFJPVklERVNfdHpkYXRhLWF1c3RyYWxpYSA9ICJ0emRhdGEtYXVzdHJhbGlhIgorCitGSUxFU190emRhdGEtZXVyb3BlICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1ldXJvcGUgPSAidHpkYXRhLWV1cm9wZSIKKworRklMRVNfdHpkYXRhLXBhY2lmaWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1wYWNpZmljID0gInR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtcG9zaXggKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXgvKiIKK1JQUk9WSURFU190emRhdGEtcG9zaXggPSAidHpkYXRhLXBvc2l4IgorCitGSUxFU190emRhdGEtcmlnaHQgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQvKiIKK1JQUk9WSURFU190emRhdGEtcmlnaHQgPSAidHpkYXRhLXJpZ2h0IgorCisKK0ZJTEVTX3R6ZGF0YS1taXNjICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0N1YmEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VneXB0ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VpcmUgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ZhY3RvcnkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCLUVpcmUgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hvbmdrb25nICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ljZWxhbmQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lyYW4gICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lzcmFlbCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phbWFpY2EgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phcGFuICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0t3YWphbGVpbiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0xpYnlhICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05hdmFqbyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvbGFuZCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvcnR1Z2FsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1NpbmdhcG9yZSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1R1cmtleSIKK1JQUk9WSURFU190emRhdGEtbWlzYyA9ICJ0emRhdGEtbWlzYyIKKworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0FuY2hvcmFnZSAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0RlbnZlciAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NoaWNhZ28gICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NhcmFjYXMgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTG9uZG9uICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvUGFyaXMgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvQ2Fpcm8gICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTW9zY293ICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0R1YmFpICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0thcmFjaGkgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0RoYWthICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0JhbmtvayAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0hvbmdfS29uZyAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL1Rva3lvICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvRGFyd2luICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQWRlbGFpZGUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQnJpc2JhbmUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL05vdW1lYSAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DU1Q2Q0RUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1Q1RURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQrMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQtMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQwICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HcmVlbndpY2ggICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9IU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1Q3TURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWi1DSEFUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QUkMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QU1Q4UERUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0MgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0sgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VQ1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VVEMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Vbml2ZXJzYWwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XLVNVICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9adWx1ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby96b25lLnRhYiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9pc28zMTY2LnRhYiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdGMvKiIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3RpbWV6b25lICR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDYtdW56aXA2MC1hbHQtaWNvbnYtdXRmOF9DVkUtMjAxNS0xMzE1LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDYtdW56aXA2MC1hbHQtaWNvbnYtdXRmOF9DVkUtMjAxNS0xMzE1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTNjMWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2gKQEAgLTAsMCArMSw0MDIgQEAKK0Zyb206IEdpb3Zhbm5pIFNjYWZvcmEgPGdpb3Zhbm5pLmFyY2hsaW51eC5vcmc+CitTdWJqZWN0OiB1bnppcCBmaWxlcyBlbmNvZGVkIHdpdGggbm9uLWxhdGluLCBub24tdW5pY29kZSBmaWxlIG5hbWVzCitMYXN0LVVwZGF0ZTogMjAxNS0wMi0xMQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1VwZGF0ZWQgMjAxNS0wMi0xMSBieSBNYXJjIERlc2xhdXJpZXJzIDxtYXJjLmRlc2xhdXJpZXJzQGNhbm9uaWNhbC5jb20+Cit0byBmaXggYnVmZmVyIG92ZXJmbG93IGluIGNoYXJzZXRfdG9faW50ZXJuKCkKKworU2lnbmVkLW9mZi1ieTogTWFyYyBEZXNsYXVyaWVycyA8bWFyYy5kZXNsYXVyaWVyc0BjYW5vbmljYWwuY29tPgorCitJbmRleDogdW56aXAtNi4wL3VuaXgvdW5peC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW5peC91bml4LmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW5peC91bml4LmMJMjAxNS0wMi0xMSAwOToxODowNC45MDIwODEzMTkgLTA1MDAKK0BAIC0zMCw2ICszMCw5IEBACisgI2RlZmluZSBVTlpJUF9JTlRFUk5BTAorICNpbmNsdWRlICJ1bnppcC5oIgorIAorKyNpbmNsdWRlIDxpY29udi5oPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKworICNpZmRlZiBTQ09fWEVOSVgKKyAjICBkZWZpbmUgU1lTTkRJUgorICNlbHNlICAvKiBTQ08gVW5peCwgQUlYLCBETklYLCBUSSBTeXNWLCBDb2hlcmVudCA0LngsIC4uLiAqLworQEAgLTE4NzQsMyArMTg3NywxMDIgQEAKKyAgICAgfQorIH0KKyAjZW5kaWYgLyogUUxaSVAgKi8KKysKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGNoYXIgKmxvY2FsX2NoYXJzZXQ7CisrICAgIGNoYXIgKmFyY2hpdmVfY2hhcnNldDsKKyt9IENIQVJTRVRfTUFQOworKworKy8qIEEgbWFwcGluZyBvZiBsb2NhbCA8LT4gYXJjaGl2ZSBjaGFyc2V0cyB1c2VkIGJ5IGRlZmF1bHQgdG8gY29udmVydCBmaWxlbmFtZXMKKysgKiBvZiBET1MvV2luZG93cyBaaXAgYXJjaGl2ZXMuIEN1cnJlbnRseSB2ZXJ5IGJhc2ljLiAqLworK3N0YXRpYyBDSEFSU0VUX01BUCBkb3NfY2hhcnNldF9tYXBbXSA9IHsKKysgICAgeyAiQU5TSV9YMy40LTE5NjgiLCAiQ1A4NTAiIH0sCisrICAgIHsgIklTTy04ODU5LTEiLCAiQ1A4NTAiIH0sCisrICAgIHsgIkNQMTI1MiIsICJDUDg1MCIgfSwKKysgICAgeyAiVVRGLTgiLCAiQ1A4NjYiIH0sCisrICAgIHsgIktPSTgtUiIsICJDUDg2NiIgfSwKKysgICAgeyAiS09JOC1VIiwgIkNQODY2IiB9LAorKyAgICB7ICJJU08tODg1OS01IiwgIkNQODY2IiB9CisrfTsKKysKKytjaGFyIE9FTV9DUFtNQVhfQ1BfTkFNRV0gPSAiIjsKKytjaGFyIElTT19DUFtNQVhfQ1BfTkFNRV0gPSAiIjsKKysKKysvKiBUcnkgdG8gZ3Vlc3MgdGhlIGRlZmF1bHQgdmFsdWUgb2YgT0VNX0NQIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4KKysgKiBJU09fQ1AgaXMgbGVmdCBhbG9uZSBmb3Igbm93LiAqLworK3ZvaWQgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKCkKKyt7CisrICAgIGNvbnN0IGNoYXIgKmxvY2FsX2NoYXJzZXQ7CisrICAgIGludCBpOworKworKyAgICAvKiBNYWtlIGEgZ3Vlc3Mgb25seSBpZiBPRU1fQ1Agbm90IGFscmVhZHkgc2V0LiAqLyAKKysgICAgaWYoKk9FTV9DUCA9PSAnXDAnKSB7CisrICAgIAlsb2NhbF9jaGFyc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisrICAgIAlmb3IoaSA9IDA7IGkgPCBzaXplb2YoZG9zX2NoYXJzZXRfbWFwKS9zaXplb2YoQ0hBUlNFVF9NQVApOyBpKyspCisrICAgIAkJaWYoIXN0cmNhc2VjbXAobG9jYWxfY2hhcnNldCwgZG9zX2NoYXJzZXRfbWFwW2ldLmxvY2FsX2NoYXJzZXQpKSB7CisrICAgIAkJCXN0cm5jcHkoT0VNX0NQLCBkb3NfY2hhcnNldF9tYXBbaV0uYXJjaGl2ZV9jaGFyc2V0LAorKyAgICAJCQkJCXNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJYnJlYWs7CisrICAgIAkJfQorKyAgICB9CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBvbmUgZW5jb2RpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIHVzaW5nIGljb252KCkuCisrICogQmUgYXMgbm9uLWludHJ1c2l2ZSBhcyBwb3NzaWJsZS4gSWYgZXJyb3IgaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvdmVydGlvbgorKyAqIGp1c3QgbGVhdmUgdGhlIHN0cmluZyBpbnRhY3QuICovCisrc3RhdGljIHZvaWQgY2hhcnNldF90b19pbnRlcm4oY2hhciAqc3RyaW5nLCBjaGFyICpmcm9tX2NoYXJzZXQpCisreworKyAgICBpY29udl90IGNkOworKyAgICBjaGFyICpzLCpkLCAqYnVmOworKyAgICBzaXplX3Qgc2xlbiwgZGxlbiwgYnVmbGVuOworKyAgICBjb25zdCBjaGFyICpsb2NhbF9jaGFyc2V0OworKworKyAgICBpZigqZnJvbV9jaGFyc2V0ID09ICdcMCcpCisrICAgIAlyZXR1cm47CisrCisrICAgIGJ1ZiA9IE5VTEw7CisrICAgIGxvY2FsX2NoYXJzZXQgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKKysKKysgICAgaWYoKGNkID0gaWNvbnZfb3Blbihsb2NhbF9jaGFyc2V0LCBmcm9tX2NoYXJzZXQpKSA9PSAoaWNvbnZfdCktMSkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgc2xlbiA9IHN0cmxlbihzdHJpbmcpOworKyAgICBzID0gc3RyaW5nOworKworKyAgICAvKiAgTWFrZSBzdXJlIE9VVEJVRlNJWiArIDEgbmV2ZXIgZW5kcyB1cCBzbWFsbGVyIHRoYW4gRklMTkFNU0laCisrICAgICAqICBhcyB0aGlzIGZ1bmN0aW9uIGFsc28gZ2V0cyBjYWxsZWQgd2l0aCBHLm91dGJ1ZiBpbiBmaWxlaW8uYworKyAgICAgKi8KKysgICAgYnVmbGVuID0gRklMTkFNU0laOworKyAgICBpZiAoT1VUQlVGU0laICsgMSA8IEZJTE5BTVNJWikKKysgICAgeworKyAgICAgICAgYnVmbGVuID0gT1VUQlVGU0laICsgMTsKKysgICAgfQorKworKyAgICBkID0gYnVmID0gbWFsbG9jKGJ1Zmxlbik7CisrICAgIGlmKCFkKQorKyAgICAJZ290byBjbGVhbnVwOworKworKyAgICBiemVybyhidWYsYnVmbGVuKTsKKysgICAgZGxlbiA9IGJ1ZmxlbiAtIDE7CisrCisrICAgIGlmKGljb252KGNkLCAmcywgJnNsZW4sICZkLCAmZGxlbikgPT0gKHNpemVfdCktMSkKKysgICAgCWdvdG8gY2xlYW51cDsKKysgICAgc3RybmNweShzdHJpbmcsIGJ1ZiwgYnVmbGVuKTsKKysKKysgICAgY2xlYW51cDoKKysgICAgZnJlZShidWYpOworKyAgICBpY29udl9jbG9zZShjZCk7CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBPRU1fQ1AgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGNoYXJzZXQuICovCisraW5saW5lIHZvaWQgb2VtX2ludGVybihjaGFyICpzdHJpbmcpCisreworKyAgICBjaGFyc2V0X3RvX2ludGVybihzdHJpbmcsIE9FTV9DUCk7CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBJU09fQ1AgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGNoYXJzZXQuICovCisraW5saW5lIHZvaWQgaXNvX2ludGVybihjaGFyICpzdHJpbmcpCisreworKyAgICBjaGFyc2V0X3RvX2ludGVybihzdHJpbmcsIElTT19DUCk7CisrfQorSW5kZXg6IHVuemlwLTYuMC91bml4L3VueGNmZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW5peC91bnhjZmcuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bml4L3VueGNmZy5oCTIwMTUtMDItMTEgMDg6NDY6NDMuNjcxMzI0MjYwIC0wNTAwCitAQCAtMjI4LDQgKzIyOCwzMCBAQAorIC8qIHdpbGRfZGlyLCBkaXJuYW1lLCB3aWxkbmFtZSwgbWF0Y2huYW1lW10sIGRpcm5hbWVsZW4sIGhhdmVfZGlybmFtZSwgKi8KKyAvKiAgICBhbmQgbm90Zmlyc3RjYWxsIGFyZSB1c2VkIGJ5IGRvX3dpbGQoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgCisrCisrI2RlZmluZSBNQVhfQ1BfTkFNRSAyNSAKKysgICAKKysjaWZkZWYgU0VUTE9DQUxFCisrIyAgdW5kZWYgU0VUTE9DQUxFCisrI2VuZGlmCisrI2RlZmluZSBTRVRMT0NBTEUoY2F0ZWdvcnksIGxvY2FsZSkgc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2NhbGUpCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKyAgIAorKyNpZmRlZiBfSVNPX0lOVEVSTgorKyMgIHVuZGVmIF9JU09fSU5URVJOCisrI2VuZGlmCisrI2RlZmluZSBfSVNPX0lOVEVSTihzdHIxKSBpc29faW50ZXJuKHN0cjEpCisrCisrI2lmZGVmIF9PRU1fSU5URVJOCisrIyAgdW5kZWYgX09FTV9JTlRFUk4KKysjZW5kaWYKKysjaWZuZGVmIElaX09FTTJJU09fQVJSQVkKKysjICBkZWZpbmUgSVpfT0VNMklTT19BUlJBWQorKyNlbmRpZgorKyNkZWZpbmUgX09FTV9JTlRFUk4oc3RyMSkgb2VtX2ludGVybihzdHIxKQorKworK3ZvaWQgaXNvX2ludGVybihjaGFyICopOworK3ZvaWQgb2VtX2ludGVybihjaGFyICopOworK3ZvaWQgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKHZvaWQpOworKyAgIAorICNlbmRpZiAvKiAhX191bnhjZmdfaCAqLworSW5kZXg6IHVuemlwLTYuMC91bnppcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW56aXAuYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bnppcC5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCitAQCAtMzI3LDExICszMjcsMjEgQEAKKyAgIC0yICBqdXN0IGZpbGVuYW1lcyBidXQgYWxsb3cgLWgvLXQvLXogIC1sICBsb25nIFVuaXggXCJscyAtbFwiIGZvcm1hdFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXYgIHZlcmJvc2UsIG11bHRpLXBhZ2UgZm9ybWF0XG4iOworIAorKyNpZm5kZWYgVU5JWAorIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTNbXSA9ICJtaXNjZWxsYW5lb3VzIG9wdGlvbnM6XG5cCisgICAtaCAgcHJpbnQgaGVhZGVyIGxpbmUgICAgICAgLXQgIHByaW50IHRvdGFscyBmb3IgbGlzdGVkIGZpbGVzIG9yIGZvciBhbGxcblwKKyAgIC16ICBwcmludCB6aXBmaWxlIGNvbW1lbnQgICAtVCAgcHJpbnQgZmlsZSB0aW1lcyBpbiBzb3J0YWJsZSBkZWNpbWFsIGZvcm1hdFwKKyBcbiAgLUMgIGJlIGNhc2UtaW5zZW5zaXRpdmUgICAlc1wKKyAgIC14ICBleGNsdWRlIGZpbGVuYW1lcyB0aGF0IGZvbGxvdyBmcm9tIGxpc3RpbmdcbiI7CisrI2Vsc2UgLyogVU5JWCAqLworK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTNbXSA9ICJtaXNjZWxsYW5lb3VzIG9wdGlvbnM6XG5cCisrICAtaCAgcHJpbnQgaGVhZGVyIGxpbmUgICAgICAgLXQgIHByaW50IHRvdGFscyBmb3IgbGlzdGVkIGZpbGVzIG9yIGZvciBhbGxcblwKKysgIC16ICBwcmludCB6aXBmaWxlIGNvbW1lbnQgICVjLVQlYyBwcmludCBmaWxlIHRpbWVzIGluIHNvcnRhYmxlIGRlY2ltYWwgZm9ybWF0XAorK1xuICVjLUMlYyBiZSBjYXNlLWluc2Vuc2l0aXZlICAgJXNcCisrICAteCAgZXhjbHVkZSBmaWxlbmFtZXMgdGhhdCBmb2xsb3cgZnJvbSBsaXN0aW5nXG5cCisrICAtTyBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBET1MsIFdpbmRvd3MgYW5kIE9TLzIgYXJjaGl2ZXNcblwKKysgIC1JIENIQVJTRVQgIHNwZWNpZnkgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIFVOSVggYW5kIG90aGVyIGFyY2hpdmVzXG4iOworKyNlbmRpZiAvKiAhVU5JWCAqLworICNpZmRlZiBNT1JFCisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBaaXBJbmZvVXNhZ2VMaW5lNFtdID0KKyAgICAgICIgIC1NICBwYWdlIG91dHB1dCB0aHJvdWdoIGJ1aWx0LWluIFwibW9yZVwiXG4iOworQEAgLTY2NCw2ICs2NzQsMTcgQEAKKyAgIC1VICB1c2UgZXNjYXBlcyBmb3IgYWxsIG5vbi1BU0NJSSBVbmljb2RlICAtVVUgaWdub3JlIGFueSBVbmljb2RlIGZpZWxkc1xuXAorICAgLUMgIG1hdGNoIGZpbGVuYW1lcyBjYXNlLWluc2Vuc2l0aXZlbHkgICAgIC1MICBtYWtlIChzb21lKSBuYW1lcyBcCisgbG93ZXJjYXNlXG4gJS00MnMgIC1WICByZXRhaW4gVk1TIHZlcnNpb24gbnVtYmVyc1xuJXMiOworKyNlbGlmIChkZWZpbmVkIFVOSVgpCisrc3RhdGljIFpDT05TVCBjaGFyIEZhciBVbnppcFVzYWdlTGluZTRbXSA9ICJcCisrbW9kaWZpZXJzOlxuXAorKyAgLW4gIG5ldmVyIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcyAgICAgICAgIC1xICBxdWlldCBtb2RlICgtcXEgPT4gcXVpZXRlcilcblwKKysgIC1vICBvdmVyd3JpdGUgZmlsZXMgV0lUSE9VVCBwcm9tcHRpbmcgICAgICAtYSAgYXV0by1jb252ZXJ0IGFueSB0ZXh0IGZpbGVzXG5cCisrICAtaiAganVuayBwYXRocyAoZG8gbm90IG1ha2UgZGlyZWN0b3JpZXMpICAgLWFhIHRyZWF0IEFMTCBmaWxlcyBhcyB0ZXh0XG5cCisrICAtVSAgdXNlIGVzY2FwZXMgZm9yIGFsbCBub24tQVNDSUkgVW5pY29kZSAgLVVVIGlnbm9yZSBhbnkgVW5pY29kZSBmaWVsZHNcblwKKysgIC1DICBtYXRjaCBmaWxlbmFtZXMgY2FzZS1pbnNlbnNpdGl2ZWx5ICAgICAtTCAgbWFrZSAoc29tZSkgbmFtZXMgXAorK2xvd2VyY2FzZVxuICUtNDJzICAtViAgcmV0YWluIFZNUyB2ZXJzaW9uIG51bWJlcnNcbiVzXAorKyAgLU8gQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgRE9TLCBXaW5kb3dzIGFuZCBPUy8yIGFyY2hpdmVzXG5cCisrICAtSSBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBVTklYIGFuZCBvdGhlciBhcmNoaXZlc1xuXG4iOworICNlbHNlIC8qICFWTVMgKi8KKyBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFVuemlwVXNhZ2VMaW5lNFtdID0gIlwKKyBtb2RpZmllcnM6XG5cCitAQCAtODAyLDYgKzgyMywxMCBAQAorICNlbmRpZiAvKiBVTklDT0RFX1NVUFBPUlQgKi8KKyAKKyAKKysjaWZkZWYgVU5JWAorKyAgICBpbml0X2NvbnZlcnNpb25fY2hhcnNldHMoKTsKKysjZW5kaWYKKysKKyAjaWYgKGRlZmluZWQoX19JQk1DX18pICYmIGRlZmluZWQoX19ERUJVR19BTExPQ19fKSkKKyAgICAgZXh0ZXJuIHZvaWQgRGVidWdNYWxsb2Modm9pZCk7CisgCitAQCAtMTMzNSw2ICsxMzYwLDExIEBACisgICAgIGFyZ2MgPSAqcGFyZ2M7CisgICAgIGFyZ3YgPSAqcGFyZ3Y7CisgCisrI2lmZGVmIFVOSVgKKysgICAgZXh0ZXJuIGNoYXIgT0VNX0NQW01BWF9DUF9OQU1FXTsKKysgICAgZXh0ZXJuIGNoYXIgSVNPX0NQW01BWF9DUF9OQU1FXTsKKysjZW5kaWYKKysgICAgCisgICAgIHdoaWxlICgrK2FyZ3YsICgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ID09ICctJykpIHsKKyAgICAgICAgIHMgPSAqYXJndiArIDE7CisgICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSAhPSAwKSB7ICAgIC8qICIhPSAwIjogIHByZXZlbnQgVHVyYm8gQyB3YXJuaW5nICovCitAQCAtMTUxNiw2ICsxNTQ2LDM1IEBACisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAjZW5kaWYgIC8qIE1BQ09TICovCisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ0knKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLUljaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1JIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgKCdqJyk6ICAgIC8qIGp1bmsgcGF0aG5hbWVzL2RpcmVjdG9yeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5qZmxhZyA9IEZBTFNFLCBuZWdhdGl2ZSA9IDA7CitAQCAtMTU5MSw2ICsxNjUwLDM1IEBACisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICArK3VPLm92ZXJ3cml0ZV9hbGw7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnTycpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtT2NoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLU8gY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1PIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAoJ3AnKTogICAgLyogcGlwZXM6ICBleHRyYWN0IHRvIHN0ZG91dCwgbm8gbWVzc2FnZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmNmbGFnID0gRkFMU0U7CitJbmRleDogdW56aXAtNi4wL3VuenByaXYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuenByaXYuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bnpwcml2LmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKK0BAIC0zMDA4LDcgKzMwMDgsNyBAQAorICAgICAgICAgICEoKChpc2xvY2hkcikgfHwgKGlzdXhhdHQpKSAmJiBcCisgICAgICAgICAgICAoKGhvc3R2ZXIpID09IDI1IHx8IChob3N0dmVyKSA9PSAyNiB8fCAoaG9zdHZlcikgPT0gNDApKSkgfHwgXAorICAgICAgICAgKGhvc3RudW0pID09IEZTX0hQRlNfIHx8IFwKKy0gICAgICAgICgoaG9zdG51bSkgPT0gRlNfTlRGU18gJiYgKGhvc3R2ZXIpID09IDUwKSkgeyBcCisrICAgICAgICAoKGhvc3RudW0pID09IEZTX05URlNfIC8qICYmIChob3N0dmVyKSA9PSA1MCAqLyApKSB7IFwKKyAgICAgICAgIF9PRU1fSU5URVJOKChzdHJpbmcpKTsgXAorICAgICB9IGVsc2UgeyBcCisgICAgICAgICBfSVNPX0lOVEVSTigoc3RyaW5nKSk7IFwKK0luZGV4OiB1bnppcC02LjAvemlwaW5mby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvemlwaW5mby5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3ppcGluZm8uYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorQEAgLTQ1Nyw2ICs0NTcsMTAgQEAKKyAgICAgaW50ICAgIHRmbGFnX3NsbT1UUlVFLCB0ZmxhZ18ydj1GQUxTRTsKKyAgICAgaW50ICAgIGV4cGxpY2l0X2g9RkFMU0UsIGV4cGxpY2l0X3Q9RkFMU0U7CisgCisrI2lmZGVmIFVOSVgKKysgICAgZXh0ZXJuIGNoYXIgT0VNX0NQW01BWF9DUF9OQU1FXTsKKysgICAgZXh0ZXJuIGNoYXIgSVNPX0NQW01BWF9DUF9OQU1FXTsKKysjZW5kaWYKKyAKKyAjaWZkZWYgTUFDT1MKKyAgICAgdU8ubGZsYWcgPSBMRkxBRzsgICAgICAgICAvKiByZXNldCBkZWZhdWx0IG9uIGVhY2ggY2FsbCAqLworQEAgLTUwMSw2ICs1MDUsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ0knKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLUljaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1JIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgJ2wnOiAgICAgIC8qIGxvbmdlciBmb3JtIG9mICJscyAtbCIgdHlwZSBsaXN0aW5nICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAtMiwgbmVnYXRpdmUgPSAwOworQEAgLTUyMSw2ICs1NTQsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICBHLk1fZmxhZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnTycpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtT2NoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLU8gY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1PIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAncyc6ICAgICAgLyogZGVmYXVsdDogIHNob3J0ZXIgImxzIC1sIiB0eXBlIGxpc3RpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5sZmxhZyA9IC0yLCBuZWdhdGl2ZSA9IDA7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA5LWN2ZS0yMDE0LTgxMzktY3JjLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzdmMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tOiBzbXMKK1N1YmplY3Q6IEZpeCBDVkUtMjAxNC04MTM5OiBDUkMzMiB2ZXJpZmljYXRpb24gaGVhcC1iYXNlZCBvdmVyZmxvdworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NzM3MjIKKworVGhlIHBhdGNoIGNvbWVzIGZyb20gdW56aXBfNi4wLTgrZGViN3UyLmRlYmlhbi50YXIuZ3oKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL2V4dHJhY3QuYworKysrIGIvZXh0cmFjdC5jCitAQCAtMjk4LDYgKzI5OCw4IEBACisgI2lmbmRlZiBTRlgKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIEluY29uc2lzdEVGbGVuZ3RoW10gPSAiYmFkIGV4dHJhLWZpZWxkIGVudHJ5OlxuIFwKKyAgICAgIEVGIGJsb2NrIGxlbmd0aCAoJXUgYnl0ZXMpIGV4Y2VlZHMgcmVtYWluaW5nIEVGIGRhdGEgKCV1IGJ5dGVzKVxuIjsKKysgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFRvb1NtYWxsRUJsZW5ndGhbXSA9ICJiYWQgZXh0cmEtZmllbGQgZW50cnk6XG4gXAorKyAgICAgRUYgYmxvY2sgbGVuZ3RoICgldSBieXRlcykgaW52YWxpZCAoPCAlZClcbiI7CisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBJbnZhbGlkQ29tcHJEYXRhRUFzW10gPQorICAgICAgIiBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSBmb3IgRUFzXG4iOworICMgIGlmIChkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKE5UU0RfRUFTKSkKK0BAIC0yMDIzLDcgKzIwMjUsOCBAQAorICAgICAgICAgZWJJRCA9IG1ha2V3b3JkKGVmKTsKKyAgICAgICAgIGViTGVuID0gKHVuc2lnbmVkKW1ha2V3b3JkKGVmK0VCX0xFTik7CisgCistICAgICAgICBpZiAoZWJMZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKSB7CisrICAgICAgICBpZiAoZWJMZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKQorKyAgICAgICAgeworICAgICAgICAgICAgLyogRGlzY292ZXJlZCBzb21lIGV4dHJhIGZpZWxkIGluY29uc2lzdGVuY3khICovCisgICAgICAgICAgICAgaWYgKHVPLnFmbGFnKQorICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAxLCAoKGNoYXIgKilzbGlkZSwgIiUtMjJzICIsCitAQCAtMjE1OCwxMSArMjE2MSwxOSBAQAorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgRUZfUEtWTVM6CistICAgICAgICAgICAgICAgIGlmIChtYWtlbG9uZyhlZitFQl9IRUFEU0laRSkgIT0KKysgICAgICAgICAgICAgICAgaWYgKGViTGVuIDwgNCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwKKysgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhUb29TbWFsbEVCbGVuZ3RoKSwKKysgICAgICAgICAgICAgICAgICAgICBlYkxlbiwgNCkpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1ha2Vsb25nKGVmK0VCX0hFQURTSVpFKSAhPQorICAgICAgICAgICAgICAgICAgICAgY3JjMzIoQ1JDVkFMX0lOSVRJQUwsIGVmKyhFQl9IRUFEU0laRSs0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHRlbnQpKGViTGVuLTQpKSkKKysgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwgKChjaGFyICopc2xpZGUsCisgICAgICAgICAgICAgICAgICAgICAgIExvYWRGYXJTdHJpbmcoQmFkQ1JDX0VBcykpKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEVGX1BLVzMyOgorICAgICAgICAgICAgIGNhc2UgRUZfUEtVTklYOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzdkNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMC1jdmUtMjAxNC04MTQwLXRlc3QtY29tcHItZWIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODE0MDogb3V0LW9mLWJvdW5kcyB3cml0ZSBpc3N1ZSBpbiB0ZXN0X2NvbXByX2ViKCkKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzczNzIyCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIHVuemlwXzYuMC04K2RlYjd1Mi5kZWJpYW4udGFyLmd6CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTIyMzIsMTAgKzIyMzIsMTcgQEAKKyAgICAgaWYgKGNvbXByX29mZnNldCA8IDQpICAgICAgICAgICAgICAgIC8qIGZpZWxkIGlzIG5vdCBjb21wcmVzc2VkOiAqLworICAgICAgICAgcmV0dXJuIFBLX09LOyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBhbmQgc2lnbmFsIE9LICovCisgCisrICAgIC8qIFJldHVybiBuby9iYWQtZGF0YSBlcnJvciBzdGF0dXMgaWYgYW55IHByb2JsZW0gaXMgZm91bmQ6CisrICAgICAqICAgIDEuIGViX3NpemUgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHVuY29tcHJlc3NlZCBzaXplCisrICAgICAqICAgICAgIChlYl91Y3NpemUpLiAgKEVsc2UgZXh0cmFjdCBlYl91Y3NpemUuKQorKyAgICAgKiAgICAyLiBlYl91Y3NpemUgaXMgemVybyAoaW52YWxpZCkuICAyMDE0LTEyLTA0IFNNUy4KKysgICAgICogICAgMy4gZWJfdWNzaXplIGlzIHBvc2l0aXZlLCBidXQgZWJfc2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZAorKyAgICAgKiAgICAgICB0aGUgY29tcHJlc3NlZCBkYXRhIGhlYWRlci4KKysgICAgICovCisgICAgIGlmICgoZWJfc2l6ZSA8IChFQl9VQ1NJWkVfUCArIDQpKSB8fAorLSAgICAgICAgKChlYl91Y3NpemUgPSBtYWtlbG9uZyhlYisoRUJfSEVBRFNJWkUrRUJfVUNTSVpFX1ApKSkgPiAwTCAmJgorLSAgICAgICAgIGViX3NpemUgPD0gKGNvbXByX29mZnNldCArIEVCX0NNUFJIRUFETEVOKSkpCistICAgICAgICByZXR1cm4gSVpfRUZfVFJVTkM7ICAgICAgICAgICAgICAgLyogbm8gY29tcHJlc3NlZCBkYXRhISAqLworKyAgICAgKChlYl91Y3NpemUgPSBtYWtlbG9uZyggZWIrIChFQl9IRUFEU0laRSsgRUJfVUNTSVpFX1ApKSkgPT0gMEwpIHx8CisrICAgICAoKGViX3Vjc2l6ZSA+IDBMKSAmJiAoZWJfc2l6ZSA8PSAoY29tcHJfb2Zmc2V0ICsgRUJfQ01QUkhFQURMRU4pKSkpCisrICAgICAgICByZXR1cm4gSVpfRUZfVFJVTkM7ICAgICAgICAgICAgIC8qIG5vL2JhZCBjb21wcmVzc2VkIGRhdGEhICovCisgCisgICAgIGlmICgKKyAjaWZkZWYgSU5UXzE2QklUCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzExLWN2ZS0yMDE0LTgxNDEtZ2V0emlwNjRkYXRhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYzFkYjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODE0MTogb3V0LW9mLWJvdW5kcyByZWFkIGlzc3VlcyBpbiBnZXRaaXA2NERhdGEoKQorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NzM3MjIKKworVGhlIHBhdGNoIGNvbWVzIGZyb20gdW56aXBfNi4wLTgrZGViN3UyLmRlYmlhbi50YXIuZ3oKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKworLS0tIGEvZmlsZWlvLmMKKysrKyBiL2ZpbGVpby5jCitAQCAtMTc2LDYgKzE3Niw4IEBACisgI2VuZGlmCisgc3RhdGljIFpDT05TVCBjaGFyIEZhciBFeHRyYUZpZWxkVG9vTG9uZ1tdID0KKyAgICJ3YXJuaW5nOiAgZXh0cmEgZmllbGQgdG9vIGxvbmcgKCVkKS4gIElnbm9yaW5nLi4uXG4iOworK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgRXh0cmFGaWVsZENvcnJ1cHRbXSA9CisrICAid2FybmluZzogIGV4dHJhIGZpZWxkICh0eXBlOiAweCUwNHgpIGNvcnJ1cHQuICBDb250aW51aW5nLi4uXG4iOworIAorICNpZmRlZiBXSU5ETEwKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIERpc2tGdWxsUXVlcnlbXSA9CitAQCAtMjI5NSw3ICsyMjk3LDEyIEBACisgICAgICAgICAgICAgaWYgKHJlYWRidWYoX19HX18gKGNoYXIgKilHLmV4dHJhX2ZpZWxkLCBsZW5ndGgpID09IDApCisgICAgICAgICAgICAgICAgIHJldHVybiBQS19FT0Y7CisgICAgICAgICAgICAgLyogTG9va3MgbGlrZSBoZXJlIGlzIHdoZXJlIGV4dHJhIGZpZWxkcyBhcmUgcmVhZCAqLworLSAgICAgICAgICAgIGdldFppcDY0RGF0YShfX0dfXyBHLmV4dHJhX2ZpZWxkLCBsZW5ndGgpOworKyAgICAgICAgICAgIGlmIChnZXRaaXA2NERhdGEoX19HX18gRy5leHRyYV9maWVsZCwgbGVuZ3RoKSAhPSBQS19DT09MKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgTG9hZEZhclN0cmluZyggRXh0cmFGaWVsZENvcnJ1cHQpLCBFRl9QS1NaNjQpKTsKKysgICAgICAgICAgICAgICAgZXJyb3IgPSBQS19XQVJOOworKyAgICAgICAgICAgIH0KKyAjaWZkZWYgVU5JQ09ERV9TVVBQT1JUCisgICAgICAgICAgICAgRy51bmlwYXRoX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgICAgICBpZiAoRy5Vek8uVV9mbGFnIDwgMikgeworLS0tIGEvcHJvY2Vzcy5jCisrKysgYi9wcm9jZXNzLmMKK0BAIC0xLDUgKzEsNSBAQAorIC8qCistICBDb3B5cmlnaHQgKGMpIDE5OTAtMjAwOSBJbmZvLVpJUC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICBDb3B5cmlnaHQgKGMpIDE5OTAtMjAxNCBJbmZvLVpJUC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgICBTZWUgdGhlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0UsIHZlcnNpb24gMjAwOS1KYW4tMDIgb3IgbGF0ZXIKKyAgICh0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlIGFsc28gaW5jbHVkZWQgaW4gdW56aXAuaCkgZm9yIHRlcm1zIG9mIHVzZS4KK0BAIC0xOTAxLDQ4ICsxOTAxLDgyIEBACisgICAgIGFuZCBhIDQtYnl0ZSB2ZXJzaW9uIG9mIGRpc2sgc3RhcnQgbnVtYmVyLgorICAgICBTZXRzIGJvdGggbG9jYWwgaGVhZGVyIGFuZCBjZW50cmFsIGhlYWRlciBmaWVsZHMuICBOb3QgdGVycmlibHkgY2xldmVyLAorICAgICBidXQgaXQgbWVhbnMgdGhhdCB0aGlzIHByb2NlZHVyZSBpcyBvbmx5IGNhbGxlZCBpbiBvbmUgcGxhY2UuCisrCisrICAgIDIwMTQtMTItMDUgU01TLgorKyAgICBBZGRlZCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgZW5vdWdoIGRhdGEgYXJlIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZworKyAgICBtYWtlaW50NjQoKSBvciBtYWtlbG9uZygpLiAgUmVwbGFjZWQgdmFyaW91cyBzaXplb2YoKSB2YWx1ZXMgd2l0aAorKyAgICBzaW1wbGUgKCI0IiBvciAiOCIpIGNvbnN0YW50cy4gIChUaGUgWmlwNjQgc3RydWN0dXJlcyBkbyBub3QgZGVwZW5kCisrICAgIG9uIG91ciB2YXJpYWJsZSBzaXplcy4pICBFcnJvciBoYW5kbGluZyBpcyBjcnVkZSwgYnV0IHdlIHNob3VsZCBub3cKKysgICAgc3RheSB3aXRoaW4gdGhlIGJ1ZmZlci4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisrI2RlZmluZSBaNjRGTEdTIDB4ZmZmZgorKyNkZWZpbmUgWjY0RkxHTCAweGZmZmZmZmZmCisrCisgICAgIGlmIChlZl9sZW4gPT0gMCB8fCBlZl9idWYgPT0gTlVMTCkKKyAgICAgICAgIHJldHVybiBQS19DT09MOworIAorICAgICBUcmFjZSgoc3RkZXJyLCJcbmdldFppcDY0RGF0YTogc2Nhbm5pbmcgZXh0cmEgZmllbGQgb2YgbGVuZ3RoICV1XG4iLAorICAgICAgIGVmX2xlbikpOworIAorLSAgICB3aGlsZSAoZWZfbGVuID49IEVCX0hFQURTSVpFKSB7CisrICAgIHdoaWxlIChlZl9sZW4gPj0gRUJfSEVBRFNJWkUpCisrICAgIHsKKyAgICAgICAgIGViX2lkID0gbWFrZXdvcmQoRUJfSUQgKyBlZl9idWYpOworICAgICAgICAgZWJfbGVuID0gbWFrZXdvcmQoRUJfTEVOICsgZWZfYnVmKTsKKyAKKy0gICAgICAgIGlmIChlYl9sZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKSB7CistICAgICAgICAgICAgLyogZGlzY292ZXJlZCBzb21lIGV4dHJhIGZpZWxkIGluY29uc2lzdGVuY3khICovCisrICAgICAgICBpZiAoZWJfbGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvKiBFeHRyYSBibG9jayBsZW5ndGggZXhjZWVkcyByZW1haW5pbmcgZXh0cmEgZmllbGQgbGVuZ3RoLiAqLworICAgICAgICAgICAgIFRyYWNlKChzdGRlcnIsCisgICAgICAgICAgICAgICAiZ2V0WmlwNjREYXRhOiBibG9jayBsZW5ndGggJXUgPiByZXN0IGVmX3NpemUgJXVcbiIsIGViX2xlbiwKKyAgICAgICAgICAgICAgIGVmX2xlbiAtIEVCX0hFQURTSVpFKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistICAgICAgICBpZiAoZWJfaWQgPT0gRUZfUEtTWjY0KSB7CistCisrICAgICAgICBpZiAoZWJfaWQgPT0gRUZfUEtTWjY0KQorKyAgICAgICAgeworICAgICAgICAgICBpbnQgb2Zmc2V0ID0gRUJfSEVBRFNJWkU7CisgCistICAgICAgICAgIGlmIChHLmNyZWMudWNzaXplID09IDB4ZmZmZmZmZmYgfHwgRy5scmVjLnVjc2l6ZSA9PSAweGZmZmZmZmZmKXsKKy0gICAgICAgICAgICBHLmxyZWMudWNzaXplID0gRy5jcmVjLnVjc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLnVjc2l6ZSk7CisrICAgICAgICAgIGlmICgoRy5jcmVjLnVjc2l6ZSA9PSBaNjRGTEdMKSB8fCAoRy5scmVjLnVjc2l6ZSA9PSBaNjRGTEdMKSkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDggPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworKyAgICAgICAgICAgIEcuY3JlYy51Y3NpemUgPSBHLmxyZWMudWNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IDg7CisgICAgICAgICAgIH0KKy0gICAgICAgICAgaWYgKEcuY3JlYy5jc2l6ZSA9PSAweGZmZmZmZmZmIHx8IEcubHJlYy5jc2l6ZSA9PSAweGZmZmZmZmZmKXsKKy0gICAgICAgICAgICBHLmNzaXplID0gRy5scmVjLmNzaXplID0gRy5jcmVjLmNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CistICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihHLmNyZWMuY3NpemUpOworKworKyAgICAgICAgICBpZiAoKEcuY3JlYy5jc2l6ZSA9PSBaNjRGTEdMKSB8fCAoRy5scmVjLmNzaXplID09IFo2NEZMR0wpKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgOCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisrICAgICAgICAgICAgRy5jc2l6ZSA9IEcuY3JlYy5jc2l6ZSA9IEcubHJlYy5jc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9PSAweGZmZmZmZmZmKXsKKysKKysgICAgICAgICAgaWYgKEcuY3JlYy5yZWxhdGl2ZV9vZmZzZXRfbG9jYWxfaGVhZGVyID09IFo2NEZMR0wpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob2Zmc2V0KyA4ID4gZWZfbGVuKQorKyAgICAgICAgICAgICAgcmV0dXJuIFBLX0VSUjsKKysKKyAgICAgICAgICAgICBHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMuZGlza19udW1iZXJfc3RhcnQgPT0gMHhmZmZmKXsKKysKKysgICAgICAgICAgaWYgKEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCA9PSBaNjRGTEdTKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgNCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisgICAgICAgICAgICAgRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0ID0gKHp1dmxfdCltYWtlbG9uZyhvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0KTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gNDsKKyAgICAgICAgICAgfQorKyNpZiAwCisrICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAvKiBFeHBlY3Qgb25seSBvbmUgRUZfUEtTWjY0IGJsb2NrLiAqLworKyNlbmRpZiAvKiAwICovCisgICAgICAgICB9CisgCistICAgICAgICAvKiBTa2lwIHRoaXMgZXh0cmEgZmllbGQgYmxvY2sgKi8KKysgICAgICAgIC8qIFNraXAgdGhpcyBleHRyYSBmaWVsZCBibG9jay4gKi8KKyAgICAgICAgIGVmX2J1ZiArPSAoZWJfbGVuICsgRUJfSEVBRFNJWkUpOworICAgICAgICAgZWZfbGVuIC09IChlYl9sZW4gKyBFQl9IRUFEU0laRSk7CisgICAgIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvYXZvaWQtc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzMGU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1bml4L01ha2VmaWxlOiByZW1vdmUgaGFyZCBjb2RlZCBzdHJpcCBjb21tYW5kcworCitSZW1vdmUgdGhlIGhhcmQgY29kZWQgc3RyaXAgY29tbWFuZHMsIGJvdGggTEYyICh1c2VkIGluIGxpbmtpbmcpIGFuZAorU1RSSVAgdXNlZCBhbG9uZS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1bnppcDYwLm9yaWcvdW5peC9jb25maWd1cmUgdW56aXA2MC91bml4L2NvbmZpZ3VyZQorLS0tIHVuemlwNjAub3JpZy91bml4L2NvbmZpZ3VyZQkyMDA5LTA0LTE2IDE0OjI1OjEyLjAwMDAwMDAwMCAtMDUwMAorKysrIHVuemlwNjAvdW5peC9jb25maWd1cmUJMjAxMS0wNi0yMSAxMToyMzozNi44MjI4NDk5NjAgLTA1MDAKK0BAIC0xNyw3ICsxNyw3IEBACisgSVpfQlpJUDI9JHszfQorIENGTEFHUz0iJHtDRkxBR1N9IC1JLiAtRFVOSVgiCisgTEZMQUdTMT0iIgorLUxGTEFHUzI9Ii1zIgorK0xGTEFHUzI9IiIKKyBMTj0ibG4gLXMiCisgCisgQ0ZMQUdTX09QVD0nJworZGlmZiAtdXIgdW56aXA2MC5vcmlnL3VuaXgvTWFrZWZpbGUgdW56aXA2MC91bml4L01ha2VmaWxlCistLS0gdW56aXA2MC5vcmlnL3VuaXgvTWFrZWZpbGUJMjAwOS0wMS0xOCAxNjo0MToxOC4wMDAwMDAwMDAgLTA2MDAKKysrKyB1bnppcDYwL3VuaXgvTWFrZWZpbGUJMjAxMS0wNi0yMSAxMToxMjoyMi45MDAwMDMzODggLTA1MDAKK0BAIC01Miw3ICs1Miw3IEBACisgQ0YgPSAkKENGTEFHUykgJChDRl9OT09QVCkKKyBMRkxBR1MxID0KKyBMRiA9IC1vIHVuemlwJEUgJChMRkxBR1MxKQorLUxGMiA9IC1zCisrTEYyID0gCisgCisgIyBVblppcFNGWCBmbGFncworIFNMID0gLW8gdW56aXBzZngkRSAkKExGTEFHUzEpCitAQCAtNzAsNyArNzAsNyBAQAorIENITU9EID0gY2htb2QKKyBCSU5QRVJNUyA9IDc1NQorIE1BTlBFUk1TID0gNjQ0CistU1RSSVAgPSBzdHJpcAorK1NUUklQID0KKyBFID0KKyBPID0gLm8KKyBNID0gdW5peAorQEAgLTc3Niw3ICs3NzYsNiBAQAorICMKKyBnY2M6CQl1bml4X21ha2UKKyAJJChNQUtFKSB1bnppcHMgQ0M9Z2NjIExEPWdjYyBDRkxBR1M9Ii1PMyIgTEYyPSIiCistCSQoU1RSSVApICQoVU5aSVBTKQorIAorICMgSGV1cmlrb24gSEs2OCAoNjgwMTApLCBVbmlQbHVzKyBTeXN0ZW0gViA1LjAsIEdyZWVuIEhpbGxzIEMtNjgwMDAKKyBoazY4OgkJdW5peF9tYWtlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2RlZmluZS1sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWM2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitQYXNzIExERkxBR1MgdG8gdGhlIGxpbmtlciAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pa2hhaWwgRHVybmV2IDxNaWtoYWlsX0R1cm5ldkBtZW50b3IuY29tPgorCitkaWZmIC1OYXVyIG9sZC91bml4L2NvbmZpZ3VyZSBuZXcvdW5peC9jb25maWd1cmUKKy0tLSBvbGQvdW5peC9jb25maWd1cmUJMjAxNC0wMS0xMyAyMTo1OToyNy4wMDAwMDAwMDAgKzExMDAKKysrKyBuZXcvdW5peC9jb25maWd1cmUJMjAxNC0wMS0xNCAxNjozNjowMi4wMDAwMDAwMDAgKzExMDAKK0BAIC0xNiw3ICsxNiw3IEBACisgQ0ZMQUdTUj0ke0NGTEFHU30KKyBJWl9CWklQMj0kezN9CisgQ0ZMQUdTPSIke0NGTEFHU30gLUkuIC1EVU5JWCIKKy1MRkxBR1MxPSIiCisrTEZMQUdTMT0ke0xERkxBR1N9CisgTEZMQUdTMj0iIgorIExOPSJsbiAtcyIKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTBiZmJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvdW56aXAtNi4wX292ZXJmbG93My5kaWZmCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gMTkwMDQwZWJmY2Y1Mzk1YTZjY2VkZWRlMmNjOTM0M2QzNGYwYTEwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1hbmNoYSA8bWFuY2hhMSBBVCB6b2hvIERPVCBjb20+CitEYXRlOiBXZWQsIDExIEZlYiAyMDE1CitTdWJqZWN0OiBJbmZvLVpJUCBVblppcCBidWZmZXIgb3ZlcmZsb3cKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCeSBjYXJlZnVsbHkgY3JhZnRpbmcgYSBjb3JydXB0IFpJUCBhcmNoaXZlIHdpdGggImV4dHJhIGZpZWxkcyIgdGhhdAorcHVycG9ydCB0byBoYXZlIGNvbXByZXNzZWQgYmxvY2tzIGxhcmdlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nCit1bmNvbXByZXNzZWQgYmxvY2tzIGluIFNUT1JFRCBuby1jb21wcmVzc2lvbiBtb2RlLCBhbiBhdHRhY2tlciBjYW4KK3RyaWdnZXIgYSBoZWFwIG92ZXJmbG93IHRoYXQgY2FuIHJlc3VsdCBpbiBhcHBsaWNhdGlvbiBjcmFzaCBvcgorcG9zc2libHkgaGF2ZSBvdGhlciB1bnNwZWNpZmllZCBpbXBhY3QuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHdoZW4gZXh0cmEgZmllbGRzIHVzZSBTVE9SRUQgbW9kZSwgdGhlCisiY29tcHJlc3NlZCIgYW5kIHVuY29tcHJlc3NlZCBibG9jayBzaXplcyBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogbWFuY2hhIDxtYW5jaGExIEFUIHpvaG8gRE9UIGNvbT4KKy0tLQorIGV4dHJhY3QuYyB8ICAgIDggKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKKy0tLSBhL2V4dHJhY3QuYworKysrIGIvZXh0cmFjdC5jCitAQCAtMjIxNyw2ICsyMjE3LDcgQEAgc3RhdGljIGludCB0ZXN0X2NvbXByX2ViKF9fR19fIGViLCBlYl9zaQorICAgICB1bGcgZWJfdWNzaXplOworICAgICB1Y2ggKmViX3VjcHRyOworICAgICBpbnQgcjsKKysgICAgdXNoIG1ldGhvZDsKKyAKKyAgICAgaWYgKGNvbXByX29mZnNldCA8IDQpICAgICAgICAgICAgICAgIC8qIGZpZWxkIGlzIG5vdCBjb21wcmVzc2VkOiAqLworICAgICAgICAgcmV0dXJuIFBLX09LOyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBhbmQgc2lnbmFsIE9LICovCitAQCAtMjIyNiw2ICsyMjI3LDEzIEBAIHN0YXRpYyBpbnQgdGVzdF9jb21wcl9lYihfX0dfXyBlYiwgZWJfc2kKKyAgICAgICAgICBlYl9zaXplIDw9IChjb21wcl9vZmZzZXQgKyBFQl9DTVBSSEVBRExFTikpKQorICAgICAgICAgcmV0dXJuIElaX0VGX1RSVU5DOyAgICAgICAgICAgICAgIC8qIG5vIGNvbXByZXNzZWQgZGF0YSEgKi8KKyAKKysgICAgbWV0aG9kID0gbWFrZXdvcmQoZWIgKyAoRUJfSEVBRFNJWkUgKyBjb21wcl9vZmZzZXQpKTsKKysgICAgaWYgKChtZXRob2QgPT0gU1RPUkVEKSAmJgorKyAgICAgICAgKGViX3NpemUgLSBjb21wcl9vZmZzZXQgLSBFQl9DTVBSSEVBRExFTiAhPSBlYl91Y3NpemUpKQorKwlyZXR1cm4gUEtfRVJSOwkJCSAgLyogY29tcHJlc3NlZCAmIHVuY29tcHJlc3NlZAorKwkJCQkJICAgKiBzaG91bGQgbWF0Y2ggaW4gU1RPUkVECisrCQkJCQkgICAqIG1ldGhvZCAqLworKworICAgICBpZiAoCisgI2lmZGVmIElOVF8xNkJJVAorICAgICAgICAgKCgodWxnKShleHRlbnQpZWJfdWNzaXplKSAhPSBlYl91Y3NpemUpIHx8CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwYTcxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgZXh0cmFjdGluZyBhbmQgdmlld2luZyBmaWxlcyBpbiAuemlwIGFyY2hpdmVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvLXppcC5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTk0Y2FlYzVhNTFlZjU1ZWY3MTFlZTRlOGIxYzY5ZTI5IgorUEUgPSAiMSIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3VuemlwNjAudGd6IFwKKwlmaWxlOi8vYXZvaWQtc3RyaXAucGF0Y2ggXAorCWZpbGU6Ly9kZWZpbmUtbGRmbGFncy5wYXRjaCBcCisJZmlsZTovLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBcCisJZmlsZTovL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZiBcCisJZmlsZTovLzA5LWN2ZS0yMDE0LTgxMzktY3JjLW92ZXJmbG93LnBhdGNoIFwKKwlmaWxlOi8vMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoIFwKKwlmaWxlOi8vMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjJiNDkwNDA3NDg5NTIxZGI4NjNiNTIzYTdmODYzNzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDM2ZDk2OTkxNjQ2ZDA0NDllZDBhYTk1MmU0ZmJlMjFiNDc2Y2U5OTRhYmMyNzZlNDlkMzBlNjg2NzA4YmQzNyIKK1MgPSAiJHtXT1JLRElSfS91bnppcDYwIgorCisjIE1ha2VmaWxlIHVzZXMgQ0ZfTk9PUFQgaW5zdGVhZCBvZiBDRkxBR1MuICBXZSBsaWZ0ZWQgdGhlIHZhbHVlcyBmcm9tCisjIE1ha2VmaWxlIGFuZCBhZGQgQ0ZMQUdTLiAgT3B0aW1pemF0aW9uIHdpbGwgYmUgb3ZlcnJpZGVuIGJ5IHVuemlwCisjIGNvbmZpZ3VyZSB0byBiZSAtTzMuCisjCitFWFRSQV9PRU1BS0UgKz0gIlNUUklQPXRydWUgTEYyPScnIFwKKyAgICAgICAgICAgICAgICAnQ0ZfTk9PUFQ9LUkuIC1JYnppcDIgLURVTklYICR7Q0ZMQUdTfSciCisKK2V4cG9ydCBMRCA9ICIke0NDfSIKK0xEX2NsYXNzLW5hdGl2ZSA9ICIke0NDfSIKKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGdlbmVyaWMKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGluc3RhbGwgcHJlZml4PSR7RH0ke3ByZWZpeH0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0KKwltdiAke0R9JHtwcmVmaXh9L21hbi8qICR7RH0ke21hbmRpcn0KKwlybWRpciAke0R9JHtwcmVmaXh9L21hbi8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdW56aXBdID0gIiR7YmluZGlyfS91bnppcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXgtcGluZy1mYWlsdXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFiOWM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDc5IEBACitGaXggcGluZyBtb2RlIGZhaWx1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nICAKKworV2hlbiB3YXRjaGRvZyB3b3JrcyBvbiBwaW5nIG1vZGUsIHRoZSBzeXN0ZW0gd2lsbCBiZSByZWJvb3RlZCBzaW5jZQord2F0Y2hkb2cgY2FuIG5vdCByZWNlaXZlIHRoZSBleHBlY3RlZCBFQ09SRVBMWSBvbiBhIHNldHRpbmcgaW50ZXJ2YWwuCisKK1BpbmcgbW9kZSB1c2VzIGEgcmF3IHNvY2tldCB0byBzZW5kIGEgRUNPIHBhY2tldCwgdGhlbiB1c2VzIHNlbGVjdCgpCit0byB3YWl0IGFuZCByZWN2ZnJvbSgpIHRvIHJlY2VpdmUgdGhlIEVDT1JFUExZIHBhY2tldCwgaWYgc2VsZWN0KCkKK3Nob3dzIHRoZSBkYXRhIGlzIHJlYWR5LCBhbmQgdGhlIGRhdGEgaXMgbm90IHRoZSBleHBlY3RlZCBFQ09SRVBMWSwKK2FuZCB3YWl0aW5nIHRpbWUgaXMgbm90IG92ZXJkdWUsIGl0IHdpbGwgY29udGludWUgdXNlIHNlbGVjdCgpIGFuZAorcmVjdmZyb20oKS4KKworUHJvYmxlbSBpcyB0aGF0IHRoZSByYXcgc29ja2V0IGNhbiByZWNlaXZlIGFueSBpY21wIHBhY2tldHMsIGlmIHdlIGRvCitub3Qgc2V0IGZpbHRlcnMsIGFuZCB0aGVyZSBhcmUgbWFueSBpY21wIHBhY2tldHMgb24gc29ja2V0LCB0aGlzCitwcm9ncmFtIHdpbGwgbm90IGZpbmQgaXRzIGludGVyZXN0ZWQgRUNPUkVQTFkgcGFja2V0IGluIGEgc3BlY2lhbAoraW50ZXJ2YWwsIHdoaWNoIG1ha2VzIHRoZSBwaW5nIG1vZGUgZmFpbC4KKworCitPdGhlciBwcm9ncmFtIGlzIHRoYXQgd2F0Y2hkb2cgc29tZXRpbWUgY2FuIG5vdCByZWFjaCB0aGUgY2FsbCBvZgorcmVjdmZyb20gdG8gdHJ5IHRvIHJlY2VpdmUgcGFja2V0cyBzaW5jZSB0dl9zZWMgb2Ygc3RydWN0IHRpbWV2YWwKK29mIHNlbGVjdCBwYXJhbWV0ZXIgaXMgMC4KKworVGhlIHRpbWVvdXQgb2Ygc2VsZWN0KCkgaXMgdGhlIHJlc3VsdCBvZiBwaW5nIGludGVydmFsIG1pbnVzaW5nIHRoZQordGltZSBvZiBjYWxsaW5nIGdldHRpbWVvZmRheSBzcGVuZGluZywgd2hlbiBwaW5nIGludGVydmFsIGlzIDEgc2Vjb25kLAorYW5kIHRoZSBjYWxsIG9mIGdldHRpbWVvZmRheSgpIHNwZW5kcyBzZXZlcmFsIHVzZWNvbmRzLCB0aGUgdHZfc2VjIG9mCitzdHJ1Y3QgdGltZXZhbCBvZiBzZWxlY3QgcGFyYW1ldGVyIG11c3QgYmUgMCwgYXQgdGhhdCBjb25kaXRpb24sIHdlCitzaG91bGQgaXQgaXMgdmFsaWQgb2YgdHZfc2VjIG9mIHN0cnVjdCB0aW1ldmFsIG9mIHNlbGVjdCBwYXJhbWV0ZXIgYmUgMCAKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL25ldC5jICAgICAgfCAgICAyICstCisgc3JjL3dhdGNoZG9nLmMgfCAgICA1ICsrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiB3YXRjaGRvZy01LjE0L3NyYy93YXRjaGRvZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2F0Y2hkb2ctNS4xNC5vcmlnL3NyYy93YXRjaGRvZy5jCisrKysgd2F0Y2hkb2ctNS4xNC9zcmMvd2F0Y2hkb2cuYworQEAgLTI0LDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNpbmNsdWRlIDxsaW51eC9vb20uaD4KKysjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKK0luZGV4OiB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdhdGNoZG9nLTUuMTQub3JpZy9zcmMvbmV0LmMKKysrKyB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYworQEAgLTExLDcgKzExLDggQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorLSNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKysjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorKy8vI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBmb3IgZ2V0aG9zdG5hbWUoKSBldGMgKi8KK0BAIC0xNzksNiArMTgwLDkgQEAgaW50IG9wZW5fbmV0Y2hlY2soc3RydWN0IGxpc3QgKnRsaXN0KQorIHsKKyAJc3RydWN0IGxpc3QgKmFjdDsKKyAJaW50IGhvbGQgPSAwOworKwlzdHJ1Y3QgaWNtcF9maWx0ZXIgZmlsdDsKKysJZmlsdC5kYXRhID0gfigxPDxJQ01QX0VDSE9SRVBMWSk7CisrCisgCisgCWlmICh0bGlzdCAhPSBOVUxMKSB7CisgCQlmb3IgKGFjdCA9IHRsaXN0OyBhY3QgIT0gTlVMTDsgYWN0ID0gYWN0LT5uZXh0KSB7CitAQCAtMjAyLDYgKzIwNiw3IEBAIGludCBvcGVuX25ldGNoZWNrKHN0cnVjdCBsaXN0ICp0bGlzdCkKKyAJCQkgICAgZmF0YWxfZXJyb3IoRVhfU1lTRVJSLCAiZXJyb3Igb3BlbmluZyBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisgCQkJfQorIAorKwkJCXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfUkFXLCBJQ01QX0ZJTFRFUiwgKGNoYXIqKSZmaWx0LCBzaXplb2YoZmlsdCkpOworIAkJCS8qIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBicm9hZGNhc3QgcGluZ3MgdG8gd29yayAqLworIAkJCSh2b2lkKXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIChjaGFyICopJmhvbGQsIHNpemVvZihob2xkKSk7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeHNlcGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYWQzYTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGaXggb3V0IG9mIHRyZWUgYnVpbGQgc3VwcG9ydDoKKworfCBpbnN0YWxsaW5nIC9ldGMvd2F0Y2hkb2cuY29uZgorfCAgL2Jpbi9ta2RpciAtcCAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNScKK3wgIC9iaW4vbWtkaXIgLXAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCit8ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy5jb25mLjUgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjUnCit8ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2tlZXBhbGl2ZS44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2lkZW50aWZ5LjggJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCit8IC91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB3YXRjaGRvZy5jb25mJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBtYWtlWzJdOiAqKiogW2luc3RhbGwtZXRjLWxvY2FsXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzAzLzIxCisKK0luZGV4OiB3YXRjaGRvZy01LjEzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL01ha2VmaWxlLmFtCTIwMTMtMDItMDEgMTE6MTU6NDQuMDAwMDAwMDAwICswMDAwCisrKysgd2F0Y2hkb2ctNS4xMy9NYWtlZmlsZS5hbQkyMDEzLTAzLTIxIDExOjU5OjM1LjYzNzEzOTAzMSArMDAwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyAJZWxzZSBcCisgCSAgICAgICAgZWNobyAiaW5zdGFsbGluZyAkKENPTkZJR19GSUxFTkFNRSkiOyBcCisgCQkkKG1raW5zdGFsbGRpcnMpIGBkaXJuYW1lICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSlgOyBcCistCSAgICAgICAgJChJTlNUQUxMX0RBVEEpIHdhdGNoZG9nLmNvbmYgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKTsgXAorKwkgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvd2F0Y2hkb2cuY29uZiAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpOyBcCisgCWZpCisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOiBpbnN0YWxsLWV0Yy1sb2NhbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmMjk2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIHdhdGNoZG9nLTUuMTMub3JpZy93YXRjaGRvZy5jb25mCTIwMTMtMDItMDEgMTI6MTU6NDQuMDAwMDAwMDAwICswMTAwCisrKysgd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy5jb25mCTIwMTQtMTEtMTMgMTA6NTk6NDMuMjMzOTQzMDAwICswMTAwCitAQCAtMjAsNyArMjAsNyBAQAorICN0ZXN0LWJpbmFyeQkJPSAKKyAjdGVzdC10aW1lb3V0CQk9IAorIAorLSN3YXRjaGRvZy1kZXZpY2UJPSAvZGV2L3dhdGNoZG9nCisrd2F0Y2hkb2ctZGV2aWNlCT0gL2Rldi93YXRjaGRvZworIAorICMgRGVmYXVsdHMgY29tcGlsZWQgaW50byB0aGUgYmluYXJ5CisgI3RlbXBlcmF0dXJlLWRldmljZQk9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1pbml0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE4ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaApAQCAtMCwwICsxLDUzIEBACistLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL3JlZGhhdC93YXRjaGRvZy5pbml0CTIwMTQtMTEtMTIgMTc6MTg6MzkuMTI1OTQzMDAwICswMTAwCisrKysgd2F0Y2hkb2ctNS4xMy9yZWRoYXQvd2F0Y2hkb2cuaW5pdAkyMDE0LTExLTEyIDE4OjI3OjM2LjE4OTk0MzAwMCArMDEwMAorQEAgLTcsNyArNyw3IEBACisgIyAgICAgICAgICAgICAgICAgSGVubmluZyBQLiBTY2htaWVkZWhhdXNlbiA8aHBzQHRhbnN0YWFmbC5kZT4KKyAKKyAjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLS4gL2V0Yy9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworIAorIFsgLXggL3Vzci9zYmluL3dhdGNoZG9nIC1hIC1lIC9ldGMvd2F0Y2hkb2cuY29uZiBdIHx8IGV4aXQgMAorIAorQEAgLTIzLDIyICsyMywyMiBAQAorIAorIHN0YXJ0KCkgeworIAorLQllY2hvIC1uICQiU3RhcnRpbmcgJHByb2c6ICIKKysJZWNobyAtbiAiU3RhcnRpbmcgJHByb2c6ICIKKyAJaWYgWyAtbiAiJChwaWRvZnByb2MgJHByb2cpIiBdOyB0aGVuCistCQllY2hvIC1uICQiJHByb2c6IGFscmVhZHkgcnVubmluZyIKKy0JCWVjaG9fZmFpbHVyZQorKwkJZWNobyAtbiAiJHByb2c6IGFscmVhZHkgcnVubmluZyAiCisrCQlmYWlsdXJlCisgCQllY2hvCisgCQlyZXR1cm4gMQorIAlmaQorIAlpZiBbICIkVkVSQk9TRSIgPSAieWVzIiBdOyB0aGVuCistCSAgICBkYWVtb24gL3Vzci9zYmluLyR7cHJvZ30gLXYKKysJICAgIC91c3Ivc2Jpbi8ke3Byb2d9IC12CisgCWVsc2UKKy0JICAgIGRhZW1vbiAvdXNyL3NiaW4vJHtwcm9nfQorKwkgICAgL3Vzci9zYmluLyR7cHJvZ30KKyAgICAgICAgIGZpCisgCVJFVFZBTD0kPworIAlbICRSRVRWQUwgLWVxIDAgXSAmJiB0b3VjaCAkbG9ja2ZpbGUKKy0JWyAkUkVUVkFMIC1lcSAwIF0gJiYgZWNob19zdWNjZXNzCistCVsgJFJFVFZBTCAtbmUgMCBdICYmIGVjaG9fZmFpbHVyZQorKwlbICRSRVRWQUwgLWVxIDAgXSAmJiBzdWNjZXNzCisrCVsgJFJFVFZBTCAtbmUgMCBdICYmIGZhaWx1cmUKKyAJZWNobworIAlyZXR1cm4gJFJFVFZBTAorIH0KK0BAIC01MCw4ICs1MCwxMCBAQAorIAkjIGFuZCByZWJvb3QgdGhlIGJveC4KKyAJa2lsbHByb2MgJHByb2cgLVRFUk0KKyAJUkVUVkFMPSQ/CistCWVjaG8KKyAJWyAkUkVUVkFMIC1lcSAwIF0gJiYgcm0gLWYgJGxvY2tmaWxlICRwaWRmaWxlCisrCVsgJFJFVFZBTCAtZXEgMCBdICYmIHN1Y2Nlc3MKKysJWyAkUkVUVkFMIC1uZSAwIF0gJiYgZmFpbHVyZQorKwllY2hvCisgCXJldHVybiAkUkVUVkFMCisgfQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjMGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSB3YXRjaGRvZyIKK0RFU0NSSVBUSU9OID0gIldhdGNoZG9nIGlzIGEgZGFlbW9uIHRoYXQgY2hlY2tzIGlmIHlvdXIgc3lzdGVtIGlzIHN0aWxsIFwKK3dvcmtpbmcuIElmIHByb2dyYW1zIGluIHVzZXIgc3BhY2UgYXJlIG5vdCBsb25nZXIgZXhlY3V0ZWQgXAoraXQgd2lsbCByZWJvb3QgdGhlIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd2F0Y2hkb2cuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNzIwMzAmYXRpZD04NjAxOTQiCisKK0xJQ0VOU0UgPSAiR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lY2MwNTUxYmY1NGFkOTdmNmI1NDE3MjBmODRkNjU2OSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vd2F0Y2hkb2cvd2F0Y2hkb2ctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LXBpbmctZmFpbHVyZS5wYXRjaCBcCisJICAgZmlsZTovL3dhdGNoZG9nLWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly93YXRjaGRvZy1jb25mLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWIyZGJhMGM1OTM5NDJmNGFjYzEwMGJjYTBkNTYwYzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjIwYjJmNDllOTg3OWYyZTg1YzczZDRjMWY0MjJmOTEwMWU2YjM4ZTgyNGZlYTI0MTRiZWZkOGJiNjg2NmFkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gIndhdGNoZG9nLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTUgMSAyIDMgNCA1IC4gc3RvcCA4NSAwIDYgLiIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1zb2Z0ZG9nIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1EICR7U30vcmVkaGF0L3dhdGNoZG9nLmluaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93YXRjaGRvZy5zaAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5Yjg5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJDb25zb2xlIFVSTCBkb3dubG9hZCB1dGlsaXR5IHN1cHBvcnRpbmcgSFRUUCwgRlRQLCBldGMiCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3dnZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImdudXRscyB6bGliIGxpYnBjcmUiCisKK0lOQ19QUiA9ICJyMTYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtaXB2NiAtLXdpdGgtc3NsPWdudXRscyAtLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLWlyaSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmdudXRscy1wcmVmaXggYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oPW5vIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ3Z2V0IgorQUxURVJOQVRJVkVfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gImNhLWNlcnRpZmljYXRlcyIKKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1dWlkXSA9ICItLXdpdGgtbGlidXVpZCwgLS13aXRob3V0LWxpYnV1aWQsdXRpbC1saW51eCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzYzZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHdnZXQtMS4xNi4zL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdnZXQtMS4xNi4zLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgd2dldC0xLjE2LjMvbGliL01ha2VmaWxlLmFtCitAQCAtODQ2LDcgKzg0Niw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvZml4X21ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWEyZTdlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB3Z2V0LTEuMTIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2dldC0xLjEyLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDktMjIgMDk6Mzk6NDkuMDAwMDAwMDAwIC0wNzAwCisrKysgd2dldC0xLjEyL2NvbmZpZ3VyZS5hYwkyMDExLTEwLTE5IDIwOjMyOjUzLjcxNDgxMjE2MCAtMDcwMAorQEAgLTE3Nyw3ICsxNzcsNyBAQAorIGRubCBHZXR0ZXh0CisgZG5sCisgQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSxbbmVlZC1uZ2V0dGV4dF0pCistQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xN10pCisrQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xOF0pCisgCisgQUNfUFJPR19SQU5MSUIKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE2LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMzRhNDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiCkBAIC0wLDAgKzEsOSBAQAorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3dnZXQvd2dldC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4X21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImY2MWQ5MDExYjk5ZjgyNDEwNmE1ZDVhMDVkZDBmNjNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmMWM2ZDA5ZDcxNDhjMWMyZDlmZDBlYTY1NWRjZjRkY2M0MDdkZWIyZGIzMmQ0MTI2MjUxY2EwMjQ1Y2I2NzAiCisKK3JlcXVpcmUgd2dldC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTVjZGM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b21ha2UgZm9yZWlnbiBzdHJpY3RuZXNzCisKK1VzZSBmb3JlaWduIHN0cmljdG5lc3MgdG8gYXZvaWQgYXV0b21ha2UgZXJyb3JzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIG5vIGxvbmdlciBhY3RpdmVdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA1ICsrKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGIzMGI2ZjUuLmJkMzIyMmMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEsNiArMSw3IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCistQUNfSU5JVCh3aGljaC5jKQorLUFNX0lOSVRfQVVUT01BS0Uod2hpY2gsIDIuMTgpCisrQUNfSU5JVChbd2hpY2hdLFsyLjE4XSkKKytBQ19DT05GSUdfU1JDRElSKHdoaWNoLmMpCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKKy0tIAorMS43LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2ZpeF9uYW1lX2NvbmZsaWN0X2dyb3VwX21lbWJlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjliMWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0aGlzIGlzIDIuMTgoR1BMdjIpIHNwZWNpZmljXQorCisjIGdsaWJjIGFsc28gaW1wbGVtZW50cyB0aGUgZnVuY3Rpb24gZ3JvdXBfbWVtYmVyLiBUbyBhdm9pZCBuYW1lIGNvbmZsaWN0LAorIyBoZXJlIGxldCB1cyBhcHBlbmQgYSAiXyIgdG8gd2hpY2gncyB2ZXJzaW9uLgorIworIyBTaWduZWQtb2ZmLWJ5IERleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPiwgMjAxMC0wOC0yMAorIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKKworLS0tIHdoaWNoLTIuMTgvYmFzaC5jCisrKysgd2hpY2gtMi4xOC9iYXNoLmMKK0BAIC00NSw3ICs0NSwxMiBAQAorICAqIC0gY2hhbmdlZCBhbGwgb2NjdXJlbmNlcyBvZiAnZ2lkX3QnIGludG8gJ0dJRF9UJy4KKyAgKiAtIGV4cG9ydGVkIGZ1bmN0aW9ucyBuZWVkZWQgaW4gd2hpY2guYworICAqLworLXN0YXRpYyBpbnQgZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpOworKworKy8qCisrICogZ2xpYmMgYWxzbyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbiBncm91cF9tZW1iZXIuIFRvIGF2b2lkIG5hbWUgY29uZmxpY3QsCisrICogaGVyZSBsZXQgdXMgYXBwZW5kIGEgIl8iIHRvIHdoaWNoJ3MgdmVyc2lvbi4KKysgKi8KKytzdGF0aWMgaW50IF9ncm91cF9tZW1iZXIgKEdJRF9UIGdpZCk7Cisgc3RhdGljIGNoYXIqIGV4dHJhY3RfY29sb25fdW5pdCAoY2hhciBjb25zdCogc3RyaW5nLCBpbnQgKnBfaW5kZXgpOworIAorIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitAQCAtMjAwLDggKzIwNSw4IEBACisgCisgLyogRnJvbSBiYXNoLTIuMDViIC8gZ2VuZXJhbC5jIC8gbGluZSA4MDUgKi8KKyAvKiBSZXR1cm4gbm9uLXplcm8gaWYgR0lEIGlzIG9uZSB0aGF0IHdlIGhhdmUgaW4gb3VyIGdyb3VwcyBsaXN0LiAqLworLWludAorLWdyb3VwX21lbWJlciAoR0lEX1QgZ2lkKQorK3N0YXRpYyBpbnQKKytfZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpCisgeworICNpZiBkZWZpbmVkIChIQVZFX0dFVEdST1VQUykKKyAgIHJlZ2lzdGVyIGludCBpOworQEAgLTI5MCw3ICsyOTUsNyBAQAorICAgICByZXR1cm4gKFhfQklUICh1X21vZGVfYml0cyAoZmluZm8uc3RfbW9kZSkpKSA/IChGU19FWElTVFMgfCBGU19FWEVDQUJMRSkgOiBGU19FWElTVFM7CisgCisgICAvKiBPdGhlcndpc2UsIGlmIHdlIGFyZSBpbiB0aGUgb3duaW5nIGdyb3VwLCB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgYXBwbHkuICovCistICBpZiAoZ3JvdXBfbWVtYmVyIChmaW5mby5zdF9naWQpKQorKyAgaWYgKF9ncm91cF9tZW1iZXIgKGZpbmZvLnN0X2dpZCkpCisgICAgIHJldHVybiAoWF9CSVQgKGdfbW9kZV9iaXRzIChmaW5mby5zdF9tb2RlKSkpID8gKEZTX0VYSVNUUyB8IEZTX0VYRUNBQkxFKSA6IEZTX0VYSVNUUzsKKyAKKyAgIC8qIE90aGVyd2lzZSwgaWYgd2UgYXJlIGluIHRoZSBvdGhlciBncm91cCwgdGhlIG90aGVyIHBlcm1pc3Npb25zIGFwcGx5LiAqLworQEAgLTMzMSw3ICszMzYsNyBAQAorIC8qIEdpdmVuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdW5pdHMgb2YgaW5mb3JtYXRpb24gc2VwYXJhdGVkIGJ5IGNvbG9ucywKKyAgICByZXR1cm4gdGhlIG5leHQgb25lIHBvaW50ZWQgdG8gYnkgKFBfSU5ERVgpLCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBtb3JlLgorICAgIEFkdmFuY2UgKFBfSU5ERVgpIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGNvbG9uLiAqLworLWNoYXIqCisrc3RhdGljIGNoYXIqCisgZXh0cmFjdF9jb2xvbl91bml0IChjaGFyIGNvbnN0KiBzdHJpbmcsIGludCogcF9pbmRleCkKKyB7CisgICBpbnQgaSwgc3RhcnQsIGxlbjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMjEvYXV0b21ha2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGYyZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1VwZGF0ZSBhdXRvY29uZiBwcm9sb2d1ZSB0byB1c2UgImZvcmVpZ24iIHN0cmljdG5lc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZDk3NDQ2MS4uYTIwZGZhOCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMSw3ICsxLDcgQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyBBQ19JTklUKFt3aGljaF0sIFsyLjIxXSkKKyBBQ19DT05GSUdfU1JDRElSKHdoaWNoLmMpCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNmNjOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiRGlzcGxheXMgdGhlIGZ1bGwgcGF0aCBvZiBzaGVsbCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OID0gIldoaWNoIGlzIGEgdXRpbGl0eSB0aGF0IHByaW50cyBvdXQgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgXAorZXhlY3V0YWJsZXMgdGhhdCBiYXNoKDEpIHdvdWxkIGV4ZWN1dGUgd2hlbiB0aGUgcGFzc2VkIFwKK3Byb2dyYW0gbmFtZXMgd291bGQgaGF2ZSBiZWVuIGVudGVyZWQgb24gdGhlIHNoZWxsIHByb21wdC4gXAorSXQgZG9lcyB0aGlzIGJ5IHVzaW5nIHRoZSBleGFjdCBzYW1lIGFsZ29yaXRobSBhcyBiYXNoLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYXJsbzE3LmhvbWUueHM0YWxsLm5sL3doaWNoLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzL3doaWNoL3doaWNoLTIuMTgudGFyLmd6LzQyZDUxOTM4ZTQ4YjkxZjZlMTlmYWJmMjE2ZjVjM2U5L3doaWNoLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MmQ1MTkzOGU0OGI5MWY2ZTE5ZmFiZjIxNmY1YzNlOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NDQ1Y2Q3ZTAyZWMwYzI2YTQ0ZmQ1NjA5ODQ2NGRlZDA2NGJhNWQ5M2RkMmUxNWVjMTI0MTBiYTU2YjJlNTQ0IgorCitERVBFTkRTID0gImN3YXV0b21hY3Jvcy1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlPTEQ9IkBBQ0xPQ0FMX0NXRkxBR1NAIgorCU5FVz0iLUkgJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyR7ZGF0YWRpcn0vY3dhdXRvbWFjcm9zL200IgorCXNlZCAtaSAicyMke09MRH0jJHtORVd9I2ciIGBncmVwIC1ybCAke09MRH0gJHtTfWAKK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAid2hpY2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Njg3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiRGlzcGxheXMgdGhlIGZ1bGwgcGF0aCBvZiBzaGVsbCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OID0gIldoaWNoIGlzIGEgdXRpbGl0eSB0aGF0IHByaW50cyBvdXQgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgXAorZXhlY3V0YWJsZXMgdGhhdCBiYXNoKDEpIHdvdWxkIGV4ZWN1dGUgd2hlbiB0aGUgcGFzc2VkIFwKK3Byb2dyYW0gbmFtZXMgd291bGQgaGF2ZSBiZWVuIGVudGVyZWQgb24gdGhlIHNoZWxsIHByb21wdC4gXAorSXQgZG9lcyB0aGlzIGJ5IHVzaW5nIHRoZSBleGFjdCBzYW1lIGFsZ29yaXRobSBhcyBiYXNoLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYXJsbzE3LmhvbWUueHM0YWxsLm5sL3doaWNoLyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3doaWNoLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YTk5NjM2OTNhZjIyNzJlN2E4ZGY2ZjIzMTE2NGU3YTIiCitERVBFTkRTICAgICA9ICJjd2F1dG9tYWNyb3MtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUFIgPSAicjMiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaWJlcnR5IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vd2hpY2gvd2hpY2gtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDk3ZmYxYTMyNGFlMDJlMGEzYjAzNjlmMDdhNzU0NGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjRhMjQ1Yjk0MTI0YjM3N2Q4YjQ5NjQ2YmY0MjFmOTE1NWQzNmFhNzYxNGI2ZWJmODM3MDVkM2ZmYzc2ZWFhZCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICdzJUBBQ0xPQ0FMX0NXRkxBR1NAJS1JICR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3Ivc2hhcmUvY3dhdXRvbWFjcm9zL200JWcnICR7U30vTWFrZWZpbGUuYW0gJHtTfS90aWxkZS9NYWtlZmlsZS5hbQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ3aGljaCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlscy8wMDAxLVJlaW5zdGF0ZS14ZGctdGVybWluYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkMWJhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoCkBAIC0wLDAgKzEsNjcyIEBACitGcm9tIDE3NGFhNzIwNmY0YjMwOGQ0ZDIyOTJiYjgwNjdhMDdkOGNjNzE1YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAyOSBBcHIgMjAxNCAwNzoyOTozMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBSZWluc3RhdGUgeGRnLXRlcm1pbmFsCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbUmV2ZXJ0XQorLS0tCisgc2NyaXB0cy9NYWtlZmlsZS5pbiAgfCAgIDYgKy0KKyBzY3JpcHRzL3hkZy10ZXJtaW5hbCB8IDYyMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYyNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDc1NSBzY3JpcHRzL3hkZy10ZXJtaW5hbAorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5pbiBiL3NjcmlwdHMvTWFrZWZpbGUuaW4KK2luZGV4IDJjN2QyYWMuLmJlZjEwZDEgMTAwNjQ0CistLS0gYS9zY3JpcHRzL01ha2VmaWxlLmluCisrKysgYi9zY3JpcHRzL01ha2VmaWxlLmluCitAQCAtMjAsMTEgKzIwLDExIEBAIFNDUklQVFMJCT0gXAorICAgICB4ZGctb3BlbiBcCisgICAgIHhkZy1lbWFpbCBcCisgICAgIHhkZy1zY3JlZW5zYXZlciBcCistICAgIHhkZy1zZXR0aW5ncworKyAgICB4ZGctc2V0dGluZ3MgXAorKyAgICB4ZGctdGVybWluYWwKKyAjICAgIHhkZy1zdQorICMgICAgeGRnLWNvcHkgXAorICMgICAgeGRnLWZpbGUtZGlhbG9nCistIyAgICB4ZGctdGVybWluYWwKKyAKKyBNQU5QQUdFUz0JJChTQ1JJUFRTOiU9bWFuLyUuMSkKKyBXRUJQQUdFUz0JJChTQ1JJUFRTOiU9JS5odG1sKQorQEAgLTQyLDcgKzQyLDcgQEAgcmVsZWFzZToJc2NyaXB0cyBodG1sIG1hbgorIAlybSAtZiB4ZGctKi5pbiAqfiBIQUNLSU5HIGdlbmVyYXRlLWhlbHAtc2NyaXB0LmF3aworIAlybSAtcmYgZGVzYy8KKyAJcm0gLXJmIHhzbC8KKy0Jcm0gLWYgeGRnLWZpbGUtZGlhbG9nIHhkZy1zdSB4ZGctY29weSB4ZGctdGVybWluYWwKKysJcm0gLWYgeGRnLWZpbGUtZGlhbG9nIHhkZy1zdSB4ZGctY29weQorIAorIGRpc3RjbGVhbjogY2xlYW4KKyAJcm0gLWYgTWFrZWZpbGUKK2RpZmYgLS1naXQgYS9zY3JpcHRzL3hkZy10ZXJtaW5hbCBiL3NjcmlwdHMveGRnLXRlcm1pbmFsCituZXcgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMDAwMDAwMC4uNGJkOTIwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvc2NyaXB0cy94ZGctdGVybWluYWwKK0BAIC0wLDAgKzEsNjIyIEBACisrIyEvYmluL3NoCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgICB4ZGctdGVybWluYWwKKysjCisrIyAgIFV0aWxpdHkgc2NyaXB0IHRvIG9wZW4gdGhlIHJlZ2lzdGVyZWQgdGVybWluYWwgZW11bGF0b3IKKysjCisrIyAgIFJlZmVyIHRvIHRoZSB1c2FnZSgpIGZ1bmN0aW9uIGJlbG93IGZvciB1c2FnZS4KKysjCisrIyAgIENvcHlyaWdodCAyMDA5LTIwMTAsIEZhdGhpIEJvdWRyYSA8ZmFib0BmcmVlZGVza3RvcC5vcmc+CisrIyAgIENvcHlyaWdodCAyMDA5LTIwMTAsIFJleCBEaWV0ZXIgPHJkaWV0ZXJAZmVkb3JhcHJvamVjdC5vcmc+CisrIyAgIENvcHlyaWdodCAyMDA2LCBLZXZpbiBLcmFtbWVyIDxrZXZpbi5rcmFtbWVyQGdteC5hdD4KKysjCisrIyAgIExJQ0VOU0U6CisrIworKyMgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKyMgICBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorKyMgICB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisrIyAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorKyMgICBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKysjICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysjCisrIyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisrIyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKyMKKysjICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKysjICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrIyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisrIyAgIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisrIyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorKyMgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKysjICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKyMKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrbWFudWFscGFnZSgpCisreworK2NhdCA8PCBfTUFOVUFMUEFHRQorK05hbWUKKysKKysgICB4ZGctdGVybWluYWwgLSBvcGVucyB0aGUgdXNlcidzIHByZWZlcnJlZCB0ZXJtaW5hbCBlbXVsYXRvciBhcHBsaWNhdGlvbgorKworK1N5bm9wc2lzCisrCisrICAgeGRnLXRlcm1pbmFsIFtjb21tYW5kXQorKworKyAgIHhkZy10ZXJtaW5hbCB7IC0taGVscCB8IC0tbWFudWFsIHwgLS12ZXJzaW9uIH0KKysKKytEZXNjcmlwdGlvbgorKworKyAgIHhkZy10ZXJtaW5hbCBvcGVucyB0aGUgdXNlcidzIHByZWZlcnJlZCB0ZXJtaW5hbCBlbXVsYXRvciBhcHBsaWNhdGlvbi4gSWYKKysgICBhIGNvbW1hbmQgaXMgcHJvdmlkZWQgdGhlIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgc2hlbGwgd2l0aGluIHRoZQorKyAgIG5ld2x5IG9wZW5lZCB0ZXJtaW5hbCB3aW5kb3cuCisrCisrICAgeGRnLXRlcm1pbmFsIGlzIGZvciB1c2UgaW5zaWRlIGEgZGVza3RvcCBzZXNzaW9uIG9ubHkuIEl0IGlzIG5vdAorKyAgIHJlY29tbWVuZGVkIHRvIHVzZSB4ZGctdGVybWluYWwgYXMgcm9vdC4KKysKKytPcHRpb25zCisrCisrICAgLS1oZWxwCisrICAgICAgICAgICBTaG93IGNvbW1hbmQgc3lub3BzaXMuCisrCisrICAgLS1tYW51YWwKKysgICAgICAgICAgIFNob3cgdGhpcyBtYW51YWwgcGFnZS4KKysKKysgICAtLXZlcnNpb24KKysgICAgICAgICAgIFNob3cgdGhlIHhkZy11dGlscyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorKworK0V4aXQgQ29kZXMKKysKKysgICBBbiBleGl0IGNvZGUgb2YgMCBpbmRpY2F0ZXMgc3VjY2VzcyB3aGlsZSBhIG5vbi16ZXJvIGV4aXQgY29kZSBpbmRpY2F0ZXMKKysgICBmYWlsdXJlLiBUaGUgZm9sbG93aW5nIGZhaWx1cmUgY29kZXMgY2FuIGJlIHJldHVybmVkOgorKworKyAgIDEKKysgICAgICAgICAgIEVycm9yIGluIGNvbW1hbmQgbGluZSBzeW50YXguCisrCisrICAgMworKyAgICAgICAgICAgQSByZXF1aXJlZCB0b29sIGNvdWxkIG5vdCBiZSBmb3VuZC4KKysKKysgICA0CisrICAgICAgICAgICBUaGUgYWN0aW9uIGZhaWxlZC4KKysKKytFeGFtcGxlcworKworKyB4ZGctdGVybWluYWwKKysKKysgICBPcGVucyB0aGUgdXNlcidzIGRlZmF1bHQgdGVybWluYWwgZW11bGF0b3IsIGp1c3Qgc3RhcnRpbmcgYW4gaW50ZXJhY3RpdmUKKysgICBzaGVsbC4KKysKKysgeGRnLXRlcm1pbmFsIHRvcAorKworKyAgIE9wZW5zIHRoZSB1c2VyJ3MgZGVmYXVsdCB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgbGV0cyBpdCBydW4gdGhlIHRvcAorKyAgIGV4ZWN1dGFibGUuCisrX01BTlVBTFBBR0UKKyt9CisrCisrdXNhZ2UoKQorK3sKKytjYXQgPDwgX1VTQUdFCisrICAgeGRnLXRlcm1pbmFsIC0gb3BlbnMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGVybWluYWwgZW11bGF0b3IgYXBwbGljYXRpb24KKysKKytTeW5vcHNpcworKworKyAgIHhkZy10ZXJtaW5hbCBbY29tbWFuZF0KKysKKysgICB4ZGctdGVybWluYWwgeyAtLWhlbHAgfCAtLW1hbnVhbCB8IC0tdmVyc2lvbiB9CisrCisrX1VTQUdFCisrfQorKworKyNAeGRnLXV0aWxzLWNvbW1vbkAKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgICBDb21tb24gdXRpbGl0eSBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gYWxsIFhERyB3cmFwcGVyIHNjcmlwdHMKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworK0RFQlVHKCkKKyt7CisrICBbIC16ICIke1hER19VVElMU19ERUJVR19MRVZFTH0iIF0gJiYgcmV0dXJuIDA7CisrICBbICR7WERHX1VUSUxTX0RFQlVHX0xFVkVMfSAtbHQgJDEgXSAmJiByZXR1cm4gMDsKKysgIHNoaWZ0CisrICBlY2hvICIkQCIgPiYyCisrfQorKworKyMgVGhpcyBoYW5kbGVzIGJhY2tzbGFzaGVzIGJ1dCBub3QgcXVvdGUgbWFya3MuCisrZmlyc3Rfd29yZCgpCisreworKyAgICByZWFkIGZpcnN0IHJlc3QKKysgICAgZWNobyAiJGZpcnN0IgorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgbWFwIGEgYmluYXJ5IHRvIGEgLmRlc2t0b3AgZmlsZQorK2JpbmFyeV90b19kZXNrdG9wX2ZpbGUoKQorK3sKKysgICAgc2VhcmNoPSIke1hER19EQVRBX0hPTUU6LSRIT01FLy5sb2NhbC9zaGFyZX06JHtYREdfREFUQV9ESVJTOi0vdXNyL2xvY2FsL3NoYXJlOi91c3Ivc2hhcmV9IgorKyAgICBiaW5hcnk9ImB3aGljaCAiJDEiYCIKKysgICAgYmluYXJ5PSJgcmVhZGxpbmsgLWYgIiRiaW5hcnkiYCIKKysgICAgYmFzZT0iYGJhc2VuYW1lICIkYmluYXJ5ImAiCisrICAgIElGUz06CisrICAgIGZvciBkaXIgaW4gJHNlYXJjaDsgZG8KKysgICAgICAgIHVuc2V0IElGUworKyAgICAgICAgWyAiJGRpciIgXSB8fCBjb250aW51ZQorKyAgICAgICAgWyAtZCAiJGRpci9hcHBsaWNhdGlvbnMiIF0gfHwgWyAtZCAiJGRpci9hcHBsbmsiIF0gfHwgY29udGludWUKKysgICAgICAgIGZvciBmaWxlIGluICIkZGlyIi9hcHBsaWNhdGlvbnMvKi5kZXNrdG9wICIkZGlyIi9hcHBsaWNhdGlvbnMvKi8qLmRlc2t0b3AgIiRkaXIiL2FwcGxuay8qLmRlc2t0b3AgIiRkaXIiL2FwcGxuay8qLyouZGVza3RvcDsgZG8KKysgICAgICAgICAgICBbIC1yICIkZmlsZSIgXSB8fCBjb250aW51ZQorKyAgICAgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIGl0J3Mgd29ydGggdGhlIHByb2Nlc3NpbmcuCisrICAgICAgICAgICAgZ3JlcCAtcSAiXkV4ZWMuKiRiYXNlIiAiJGZpbGUiIHx8IGNvbnRpbnVlCisrICAgICAgICAgICAgIyBNYWtlIHN1cmUgaXQncyBhIHZpc2libGUgZGVza3RvcCBmaWxlIChlLmcuIG5vdCAicHJlZmVycmVkLXdlYi1icm93c2VyLmRlc2t0b3AiKS4KKysgICAgICAgICAgICBncmVwIC1FcSAiXihOb0Rpc3BsYXl8SGlkZGVuKT10cnVlIiAiJGZpbGUiICYmIGNvbnRpbnVlCisrICAgICAgICAgICAgY29tbWFuZD0iYGdyZXAgLUUgIl5FeGVjKFxbW15dPV0qXSk/PSIgIiRmaWxlIiB8IGN1dCAtZD0gLWYgMi0gfCBmaXJzdF93b3JkYCIKKysgICAgICAgICAgICBjb21tYW5kPSJgd2hpY2ggIiRjb21tYW5kImAiCisrICAgICAgICAgICAgaWYgWyB4ImByZWFkbGluayAtZiAiJGNvbW1hbmQiYCIgPSB4IiRiaW5hcnkiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgIyBGaXggYW55IGRvdWJsZSBzbGFzaGVzIHRoYXQgZ290IGFkZGVkIHBhdGggY29tcG9zaXRpb24KKysgICAgICAgICAgICAgICAgZWNobyAiJGZpbGUiIHwgc2VkIC1lICdzLC8vKiwvLGcnCisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIGZpCisrICAgICAgICBkb25lCisrICAgIGRvbmUKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIG1hcCBhIC5kZXNrdG9wIGZpbGUgdG8gYSBiaW5hcnkKKysjIyBGSVhNRTogaGFuZGxlIHZlbmRvciBkaXIgY2FzZQorK2Rlc2t0b3BfZmlsZV90b19iaW5hcnkoKQorK3sKKysgICAgc2VhcmNoPSIke1hER19EQVRBX0hPTUU6LSRIT01FLy5sb2NhbC9zaGFyZX06JHtYREdfREFUQV9ESVJTOi0vdXNyL2xvY2FsL3NoYXJlOi91c3Ivc2hhcmV9IgorKyAgICBkZXNrdG9wPSJgYmFzZW5hbWUgIiQxImAiCisrICAgIElGUz06CisrICAgIGZvciBkaXIgaW4gJHNlYXJjaDsgZG8KKysgICAgICAgIHVuc2V0IElGUworKyAgICAgICAgWyAiJGRpciIgXSAmJiBbIC1kICIkZGlyL2FwcGxpY2F0aW9ucyIgXSB8fCBjb250aW51ZQorKyAgICAgICAgZmlsZT0iJGRpci9hcHBsaWNhdGlvbnMvJGRlc2t0b3AiCisrICAgICAgICBbIC1yICIkZmlsZSIgXSB8fCBjb250aW51ZQorKyAgICAgICAgIyBSZW1vdmUgYW55IGFyZ3VtZW50cyAoJUYsICVmLCAlVSwgJXUsIGV0Yy4pLgorKyAgICAgICAgY29tbWFuZD0iYGdyZXAgLUUgIl5FeGVjKFxbW15dPV0qXSk/PSIgIiRmaWxlIiB8IGN1dCAtZD0gLWYgMi0gfCBmaXJzdF93b3JkYCIKKysgICAgICAgIGNvbW1hbmQ9ImB3aGljaCAiJGNvbW1hbmQiYCIKKysgICAgICAgIHJlYWRsaW5rIC1mICIkY29tbWFuZCIKKysgICAgICAgIHJldHVybgorKyAgICBkb25lCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBzdWNjZXNzZnVsbHkgY29tcGxldGluZyB0aGUgZGVzaXJlZCBvcGVyYXRpb24KKysKKytleGl0X3N1Y2Nlc3MoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICIkQCIKKysgICAgICAgIGVjaG8KKysgICAgZmkKKysKKysgICAgZXhpdCAwCisrfQorKworKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gbWFsZm9ybWVkIGFyZ3VtZW50cywgbm90IGVub3VnaCBhcmd1bWVudHMKKysjIG9yIG1pc3NpbmcgcmVxdWlyZWQgb3B0aW9uLgorKyMgcHJpbnRzIHVzYWdlIGluZm9ybWF0aW9uCisrCisrZXhpdF9mYWlsdXJlX3N5bnRheCgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICAgICAgZWNobyAiVHJ5ICd4ZGctdGVybWluYWwgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorKyAgICBlbHNlCisrICAgICAgICB1c2FnZQorKyAgICAgICAgZWNobyAiVXNlICdtYW4geGRnLXRlcm1pbmFsJyBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIKKysgICAgZmkKKysKKysgICAgZXhpdCAxCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBtaXNzaW5nIGZpbGUgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZQorKworK2V4aXRfZmFpbHVyZV9maWxlX21pc3NpbmcoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCAyCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBmYWlsdXJlIHRvIGxvY2F0ZSBuZWNlc3NhcnkgdG9vbCBhcHBsaWNhdGlvbnMKKysKKytleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCAzCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBmYWlsdXJlIHJldHVybmVkIGJ5IGEgdG9vbCBhcHBsaWNhdGlvbgorKworK2V4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNAorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byByZWFkIGEgc3BlY2lmaWVkIGZpbGUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3JlYWQoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCA1CisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIGluc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvIHdyaXRlIGEgc3BlY2lmaWVkIGZpbGUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3dyaXRlKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNgorK30KKysKKytjaGVja19pbnB1dF9maWxlKCkKKyt7CisrICAgIGlmIFsgISAtZSAiJDEiIF07IHRoZW4KKysgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX21pc3NpbmcgImZpbGUgJyQxJyBkb2VzIG5vdCBleGlzdCIKKysgICAgZmkKKysgICAgaWYgWyAhIC1yICIkMSIgXTsgdGhlbgorKyAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl9yZWFkICJubyBwZXJtaXNzaW9uIHRvIHJlYWQgZmlsZSAnJDEnIgorKyAgICBmaQorK30KKysKKytjaGVja192ZW5kb3JfcHJlZml4KCkKKyt7CisrICAgIGZpbGVfbGFiZWw9IiQyIgorKyAgICBbIC1uICIkZmlsZV9sYWJlbCIgXSB8fCBmaWxlX2xhYmVsPSJmaWxlbmFtZSIKKysgICAgZmlsZT1gYmFzZW5hbWUgIiQxImAKKysgICAgY2FzZSAiJGZpbGUiIGluCisrICAgICAgIFtbOmFscGhhOl1dKi0qKQorKyAgICAgICAgIHJldHVybgorKyAgICAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkZmlsZV9sYWJlbCAnJGZpbGUnIGRvZXMgbm90IGhhdmUgYSBwcm9wZXIgdmVuZG9yIHByZWZpeCIgPiYyCisrICAgIGVjaG8gJ0EgdmVuZG9yIHByZWZpeCBjb25zaXN0cyBvZiBhbHBoYSBjaGFyYWN0ZXJzIChbYS16QS1aXSkgYW5kIGlzIHRlcm1pbmF0ZWQnID4mMgorKyAgICBlY2hvICd3aXRoIGEgZGFzaCAoIi0iKS4gQW4gZXhhbXBsZSAnIiRmaWxlX2xhYmVsIicgaXMgJyInZXhhbXBsZS0kZmlsZSciID4mMgorKyAgICBlY2hvICJVc2UgLS1ub3ZlbmRvciB0byBvdmVycmlkZSBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIgPiYyCisrICAgIGV4aXQgMQorK30KKysKKytjaGVja19vdXRwdXRfZmlsZSgpCisreworKyAgICAjIGlmIHRoZSBmaWxlIGV4aXN0cywgY2hlY2sgaWYgaXQgaXMgd3JpdGVhYmxlCisrICAgICMgaWYgaXQgZG9lcyBub3QgZXhpc3RzLCBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byB3cml0ZSBvbiB0aGUgZGlyZWN0b3J5CisrICAgIGlmIFsgLWUgIiQxIiBdOyB0aGVuCisrICAgICAgICBpZiBbICEgLXcgIiQxIiBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl93cml0ZSAibm8gcGVybWlzc2lvbiB0byB3cml0ZSB0byBmaWxlICckMSciCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBESVI9YGRpcm5hbWUgIiQxImAKKysgICAgICAgIGlmIFsgISAtdyAiJERJUiIgXSB8fCBbICEgLXggIiRESVIiIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3dyaXRlICJubyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlICckMSciCisrICAgICAgICBmaQorKyAgICBmaQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2tzIGZvciBzaGFyZWQgY29tbWFuZHMsIGUuZy4gLS1oZWxwCisrCisrY2hlY2tfY29tbW9uX2NvbW1hbmRzKCkKKyt7CisrICAgIHdoaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisrICAgICAgICBwYXJtPSIkMSIKKysgICAgICAgIHNoaWZ0CisrCisrICAgICAgICBjYXNlICIkcGFybSIgaW4KKysgICAgICAgICAgICAtLWhlbHApCisrICAgICAgICAgICAgdXNhZ2UKKysgICAgICAgICAgICBlY2hvICJVc2UgJ21hbiB4ZGctdGVybWluYWwnIG9yICd4ZGctdGVybWluYWwgLS1tYW51YWwnIGZvciBhZGRpdGlvbmFsIGluZm8uIgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrCisrICAgICAgICAgICAgLS1tYW51YWwpCisrICAgICAgICAgICAgbWFudWFscGFnZQorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrCisrICAgICAgICAgICAgLS12ZXJzaW9uKQorKyAgICAgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbCAxLjEuMCByYzEiCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICAgICAgOzsKKysgICAgICAgIGVzYWMKKysgICAgZG9uZQorK30KKysKKytjaGVja19jb21tb25fY29tbWFuZHMgIiRAIgorKworK1sgLXogIiR7WERHX1VUSUxTX0RFQlVHX0xFVkVMfSIgXSAmJiB1bnNldCBYREdfVVRJTFNfREVCVUdfTEVWRUw7CisraWYgWyAke1hER19VVElMU19ERUJVR19MRVZFTC0wfSAtbHQgMSBdOyB0aGVuCisrICAgICMgQmUgc2lsZW50CisrICAgIHhkZ19yZWRpcmVjdF9vdXRwdXQ9IiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwiCisrZWxzZQorKyAgICAjIEFsbCBvdXRwdXQgdG8gc3RkZXJyCisrICAgIHhkZ19yZWRpcmVjdF9vdXRwdXQ9IiA+JjIiCisrZmkKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrcyBmb3Iga25vd24gZGVza3RvcCBlbnZpcm9ubWVudHMKKysjIHNldCB2YXJpYWJsZSBERSB0byB0aGUgZGVza3RvcCBlbnZpcm9ubWVudHMgbmFtZSwgbG93ZXJjYXNlCisrCisrZGV0ZWN0REUoKQorK3sKKysgICAgIyBzZWUgaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjQKKysgICAgdW5zZXQgR1JFUF9PUFRJT05TCisrCisrICAgIGlmIFsgLW4gIiR7WERHX0NVUlJFTlRfREVTS1RPUH0iIF07IHRoZW4KKysgICAgICBjYXNlICIke1hER19DVVJSRU5UX0RFU0tUT1B9IiBpbgorKyAgICAgICAgIEVOTElHSFRFTk1FTlQpCisrICAgICAgICAgICBERT1lbmxpZ2h0ZW5tZW50OworKyAgICAgICAgICAgOzsKKysgICAgICAgICBHTk9NRSkKKysgICAgICAgICAgIERFPWdub21lOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBLREUpCisrICAgICAgICAgICBERT1rZGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIExYREUpCisrICAgICAgICAgICBERT1seGRlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBNQVRFKQorKyAgICAgICAgICAgREU9bWF0ZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgWEZDRSkKKysgICAgICAgICAgIERFPXhmY2UKKysgICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBjbGFzc2ljIGZhbGxiYWNrcworKyAgICAgIGlmIFsgeCIkS0RFX0ZVTExfU0VTU0lPTiIgIT0geCIiIF07IHRoZW4gREU9a2RlOworKyAgICAgIGVsaWYgWyB4IiRHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiICE9IHgiIiBdOyB0aGVuIERFPWdub21lOworKyAgICAgIGVsaWYgWyB4IiRNQVRFX0RFU0tUT1BfU0VTU0lPTl9JRCIgIT0geCIiIF07IHRoZW4gREU9bWF0ZTsKKysgICAgICBlbGlmIGBkYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLWRlc3Q9b3JnLmZyZWVkZXNrdG9wLkRCdXMgL29yZy9mcmVlZGVza3RvcC9EQnVzIG9yZy5mcmVlZGVza3RvcC5EQnVzLkdldE5hbWVPd25lciBzdHJpbmc6b3JnLmdub21lLlNlc3Npb25NYW5hZ2VyID4gL2Rldi9udWxsIDI+JjFgIDsgdGhlbiBERT1nbm9tZTsKKysgICAgICBlbGlmIHhwcm9wIC1yb290IF9EVF9TQVZFX01PREUgMj4gL2Rldi9udWxsIHwgZ3JlcCAnID0gXCJ4ZmNlNFwiJCcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIERFPXhmY2U7CisrICAgICAgZWxpZiB4cHJvcCAtcm9vdCAyPiAvZGV2L251bGwgfCBncmVwIC1pICdeeGZjZV9kZXNrdG9wX3dpbmRvdycgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIERFPXhmY2UKKysgICAgICBlbGlmIGVjaG8gJERFU0tUT1AgfCBncmVwIC1xICdeRW5saWdodGVubWVudCc7IHRoZW4gREU9ZW5saWdodGVubWVudDsKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBmYWxsYmFjayB0byBjaGVja2luZyAkREVTS1RPUF9TRVNTSU9OCisrICAgICAgY2FzZSAiJERFU0tUT1BfU0VTU0lPTiIgaW4KKysgICAgICAgICBnbm9tZSkKKysgICAgICAgICAgIERFPWdub21lOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBMWERFfEx1YnVudHUpCisrICAgICAgICAgICBERT1seGRlOyAKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTUFURSkKKysgICAgICAgICAgIERFPW1hdGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIHhmY2V8eGZjZTR8J1hmY2UgU2Vzc2lvbicpCisrICAgICAgICAgICBERT14ZmNlOworKyAgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrCisrICAgIGlmIFsgeCIkREUiID0geCIiIF07IHRoZW4KKysgICAgICAjIGZhbGxiYWNrIHRvIHVuYW1lIG91dHB1dCBmb3Igb3RoZXIgcGxhdGZvcm1zCisrICAgICAgY2FzZSAiJCh1bmFtZSAyPi9kZXYvbnVsbCkiIGluIAorKyAgICAgICAgRGFyd2luKQorKyAgICAgICAgICBERT1kYXJ3aW47CisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiZ25vbWUiIF07IHRoZW4KKysgICAgICAjIGdub21lLWRlZmF1bHQtYXBwbGljYXRpb25zLXByb3BlcnRpZXMgaXMgb25seSBhdmFpbGFibGUgaW4gR05PTUUgMi54CisrICAgICAgIyBidXQgbm90IGluIEdOT01FIDMueAorKyAgICAgIHdoaWNoIGdub21lLWRlZmF1bHQtYXBwbGljYXRpb25zLXByb3BlcnRpZXMgPiAvZGV2L251bGwgMj4mMSAgfHwgREU9Imdub21lMyIKKysgICAgZmkKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGtmbWNsaWVudCBleGVjL29wZW5VUkwgY2FuIGdpdmUgYm9ndXMgZXhpdCB2YWx1ZSBpbiBLREUgPD0gMy41LjQKKysjIEl0IGFsc28gYWx3YXlzIHJldHVybnMgMSBpbiBLREUgMy40IGFuZCBlYXJsaWVyCisrIyBTaW1wbHkgcmV0dXJuIDAgaW4gc3VjaCBjYXNlCisrCisra2ZtY2xpZW50X2ZpeF9leGl0X2NvZGUoKQorK3sKKysgICAgdmVyc2lvbj1gTENfQUxMPUMuVVRGLTgga2RlLWNvbmZpZyAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwICdeS0RFJ2AKKysgICAgbWFqb3I9YGVjaG8gJHZlcnNpb24gfCBzZWQgJ3MvS0RFLio6IFwoWzAtOV1cKS4qL1wxLydgCisrICAgIG1pbm9yPWBlY2hvICR2ZXJzaW9uIHwgc2VkICdzL0tERS4qOiBbMC05XSpcLlwoWzAtOV1cKS4qL1wxLydgCisrICAgIHJlbGVhc2U9YGVjaG8gJHZlcnNpb24gfCBzZWQgJ3MvS0RFLio6IFswLTldKlwuWzAtOV0qXC5cKFswLTldXCkuKi9cMS8nYAorKyAgICB0ZXN0ICIkbWFqb3IiIC1ndCAzICYmIHJldHVybiAkMQorKyAgICB0ZXN0ICIkbWlub3IiIC1ndCA1ICYmIHJldHVybiAkMQorKyAgICB0ZXN0ICIkcmVsZWFzZSIgLWd0IDQgJiYgcmV0dXJuICQxCisrICAgIHJldHVybiAwCisrfQorKworK3Rlcm1pbmFsX2tkZSgpCisreworKyAgICB0ZXJtaW5hbD1ga3JlYWRjb25maWcgLS1maWxlIGtkZWdsb2JhbHMgLS1ncm91cCBHZW5lcmFsIC0ta2V5IFRlcm1pbmFsQXBwbGljYXRpb24gLS1kZWZhdWx0IGtvbnNvbGVgCisrCisrICAgIHRlcm1pbmFsX2V4ZWM9YHdoaWNoICR0ZXJtaW5hbCAyPi9kZXYvbnVsbGAKKysKKysgICAgaWYgWyAteCAiJHRlcm1pbmFsX2V4ZWMiIF07IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgLWUgIiQxIgorKyAgICAgICAgZmkKKysKKysgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgImNvbmZpZ3VyZWQgdGVybWluYWwgcHJvZ3JhbSAnJHRlcm1pbmFsJyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUiCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2dub21lKCkKKyt7CisrICAgIHRlcm1fZXhlY19rZXk9Ii9kZXNrdG9wL2dub21lL2FwcGxpY2F0aW9ucy90ZXJtaW5hbC9leGVjIgorKyAgICB0ZXJtX2V4ZWNfYXJnX2tleT0iL2Rlc2t0b3AvZ25vbWUvYXBwbGljYXRpb25zL3Rlcm1pbmFsL2V4ZWNfYXJnIgorKworKyAgICB0ZXJtX2V4ZWM9YGdjb25mdG9vbC0yIC0tZ2V0ICR7dGVybV9leGVjX2tleX1gCisrICAgIHRlcm1fZXhlY19hcmc9YGdjb25mdG9vbC0yIC0tZ2V0ICR7dGVybV9leGVjX2FyZ19rZXl9YAorKworKyAgICB0ZXJtaW5hbF9leGVjPWB3aGljaCAkdGVybV9leGVjIDI+L2Rldi9udWxsYAorKworKyAgICBpZiBbIC14ICIkdGVybWluYWxfZXhlYyIgXTsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBpZiBbIHgiJHRlcm1fZXhlY19hcmciID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgIiQxIgorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgIiR0ZXJtX2V4ZWNfYXJnIiAiJDEiCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrCisrICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJjb25maWd1cmVkIHRlcm1pbmFsIHByb2dyYW0gJyR0ZXJtX2V4ZWMnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZSIKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfeGZjZSgpCisreworKyAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgIGV4by1vcGVuIC0tbGF1bmNoIFRlcm1pbmFsRW11bGF0b3IKKysgICAgZWxzZQorKyAgICAgICAgZXhvLW9wZW4gLS1sYXVuY2ggVGVybWluYWxFbXVsYXRvciAiJDEiCisrICAgIGZpCisrCisrICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgIGVsc2UKKysgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2dlbmVyaWMoKQorK3sKKysgICAgIyBpZiAkVEVSTSBpcyBhIGtub3duIG5vbi1jb21tYW5kLCB1c2UgaGFyZC1jb2RlZCBmYWxsYmFja3MKKysgICAgaWYgWyB4IiRURVJNIiA9IHgiIiBdIHx8IFsgeCIkVEVSTSIgPSB4ImxpbnV4IiBdIHx8IFsgeCIkVEVSTSIgPSB4InZ0MTAwIiBdOyB0aGVuCisrICAgICAgICBURVJNPXh0ZXJtCisrICAgIGZpCisrCisrICAgIHRlcm1pbmFsX2V4ZWM9YHdoaWNoICRURVJNIDI+L2Rldi9udWxsYAorKworKyAgICBpZiBbIC14ICIkdGVybWluYWxfZXhlYyIgXTsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIHNjcmVlbiBhbmQgdXJ4dnQgd29uJ3QgZG8gdGhlaXIgb3duIHBhcnNpbmcgb2YgcXVvdGVkIGFyZ3VtZW50cworKyAgICAgICAgICAgIGlmIFsgeCIkVEVSTSIgPSB4InNjcmVlbiIgXTsgdGhlbgorKyAgICAgICAgICAgICAgICAjIHNjcmVlbiBoYXMgYW4gaW5jb21wYXRpYmxlIG1lYW5pbmcgZm9yIC1lCisrICAgICAgICAgICAgICAgIHNoIC1jICJleGVjICR0ZXJtaW5hbF9leGVjICQxIgorKyAgICAgICAgICAgIGVsaWYgWyB4IiRURVJNIiA9IHgidXJ4dnQiIF0gfHwgWyB4IiRURVJNIiA9IHgicnh2dC11bmljb2RlIiBdIHx8IFsgeCIkVEVSTSIgPSB4InJ4dnQiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgI1RPRE86IFVzZSB3aGF0ZXZlciBtZWNoYW5pc20gZGFzaCBzdXBwb3J0cyB0byB0ZXN0IGZvcgorKyAgICAgICAgICAgICAgICAjICAgICAgcnh2dC0qIHRvIG1hdGNoIHRoaW5ncyBsaWtlIHJ4dnQtdW5pY29kZS0yNTZjb2xvcgorKyAgICAgICAgICAgICAgICBzaCAtYyAiZXhlYyAkdGVybWluYWxfZXhlYyAtZSAkMSIKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjIC1lICIkMSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysKKysgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgImNvbmZpZ3VyZWQgdGVybWluYWwgcHJvZ3JhbSAnJFRFUk0nIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZSIKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfbHhkZSgpCisreworKyAgICBpZiB3aGljaCBseHRlcm1pbmFsICY+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICBseHRlcm1pbmFsCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgbHh0ZXJtaW5hbCAtZSAiJDEiCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICB0ZXJtaW5hbF9nZW5lcmljICIkMSIKKysgICAgZmkKKyt9CisrCisrI1sgeCIkMSIgIT0geCIiIF0gfHwgZXhpdF9mYWlsdXJlX3N5bnRheAorKworK2NvbW1hbmQ9Cisrd2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KKysgICAgcGFybT0iJDEiCisrICAgIHNoaWZ0CisrCisrICAgIGNhc2UgIiRwYXJtIiBpbgorKyAgICAgIC0qKQorKyAgICAgICAgZXhpdF9mYWlsdXJlX3N5bnRheCAidW5leHBlY3RlZCBvcHRpb24gJyRwYXJtJyIKKysgICAgICAgIDs7CisrCisrICAgICAgKikKKysgICAgICAgIGlmIFsgLW4gIiRjb21tYW5kIiBdIDsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9zeW50YXggInVuZXhwZWN0ZWQgYXJndW1lbnQgJyRwYXJtJyIKKysgICAgICAgIGZpCisrICAgICAgICBjb21tYW5kPSIkcGFybSIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKytkb25lCisrCisrZGV0ZWN0REUKKysKKytpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgIERFPWdlbmVyaWMKKytmaQorKworK2Nhc2UgIiRERSIgaW4KKysgICAga2RlKQorKyAgICB0ZXJtaW5hbF9rZGUgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBnbm9tZSopCisrICAgIHRlcm1pbmFsX2dub21lICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgeGZjZSkKKysgICAgdGVybWluYWxfeGZjZSAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgIGx4ZGUpCisrICAgIHRlcm1pbmFsX2x4ZGUgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBnZW5lcmljKQorKyAgICB0ZXJtaW5hbF9nZW5lcmljICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgKikKKysgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJubyB0ZXJtaW5hbCBlbXVsYXRvciBhdmFpbGFibGUiCisrICAgIDs7CisrZXNhYworLS0gCisxLjkuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHNfMS4xLjAtcmMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZjFlM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkJhc2ljIGRlc2t0b3AgaW50ZWdyYXRpb24gZnVuY3Rpb25zIgorCitERVNDUklQVElPTiA9ICJUaGUgeGRnLXV0aWxzIHBhY2thZ2UgaXMgYSBzZXQgb2Ygc2ltcGxlIHNjcmlwdHMgdGhhdCBwcm92aWRlIGJhc2ljIFwKK2Rlc2t0b3AgaW50ZWdyYXRpb24gZnVuY3Rpb25zIGZvciBhbnkgRnJlZSBEZXNrdG9wLCBzdWNoIGFzIExpbnV4LiBcCitUaGV5IGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGEgc2V0IG9mIGRlZmFjdG8gc3RhbmRhcmRzLiBcCitUaGUgZm9sbG93aW5nIHNjcmlwdHMgYXJlIHByb3ZpZGVkIGF0IHRoaXMgdGltZTogXAoreGRnLWRlc2t0b3AtaWNvbiBcICAgICAKK3hkZy1kZXNrdG9wLW1lbnUgXCAgCit4ZGctZW1haWwgXCAKK3hkZy1pY29uLXJlc291cmNlIFwKK3hkZy1taW1lIFwgICAgICAgCit4ZGctb3BlbiBcICAgICAKK3hkZy1zY3JlZW5zYXZlciBcIAoreGRnLXRlcm1pbmFsIFwKKyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hNTM2N2E5MDkzNDA5OGQ2YjA1YWYzYjc0NjQwNTAxNCIKKworU1JDX1VSSSA9ICJodHRwOi8vcG9ydGxhbmQuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYWRmNWU3YTA4ZTA1MjZmYzYwZGJlM2U1YjdlZjhkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YjA1NTU4YWU0YmI4ZWRlMzU2ODYzY2FlOGM0MmUzZTAxMmFhNDIxYmY5ZDQ1MTMwYTU3MGZkMjA5ZDc5MTAyIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHhwcm9wIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4cHJvcCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvRGlzYWJsZS1zZXJ2aWNlcy1mcm9tLWluZXRkLmNvbmYtaWYtYS1zZXJ2aWNlLXdpdGgtdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvRGlzYWJsZS1zZXJ2aWNlcy1mcm9tLWluZXRkLmNvbmYtaWYtYS1zZXJ2aWNlLXdpdGgtdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDZlNmMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGQ1ODhiNjUzMGUxMzgyYTYyNDg5OGIzZjQzMDdmNjM2YzcyYzgwYTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI4IE5vdiAyMDA3IDEwOjEzOjA4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgc2VydmljZXMgZnJvbSBpbmV0ZC5jb25mIGlmIGEgc2VydmljZSB3aXRoIHRoZSBzYW1lIGlkIGV4aXN0cy4KKworICBUaGlzIHdheSwgaWYgYSBzZXJ2aWNlIGlzIGVuYWJsZWQgaW4gL2V0Yy94aW5ldGQqIF9hbmRfIGluCisvZXRjL2luZXRkLmNvbmYsIHRoZSBvbmUgKGV2ZW4gaWYgZGlzYWJsZWQpIGZyb20gL2V0Yy94aW5ldGQqIHRha2VzCitwcmVjZWRlbmNlLgorCitTaWduZWQtb2ZmLWJ5OiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CistLS0KKyB4aW5ldGQvaW5ldC5jIHwgICAyMiArKysrKysrKysrKysrKysrKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2luZXQuYyBiL3hpbmV0ZC9pbmV0LmMKK2luZGV4IDFjYjJiYTIuLjhjYWFiNDUgMTAwNjQ0CistLS0gYS94aW5ldGQvaW5ldC5jCisrKysgYi94aW5ldGQvaW5ldC5jCitAQCAtMjMsNiArMjMsOCBAQAorICNpbmNsdWRlICJwYXJzZXN1cC5oIgorICNpbmNsdWRlICJudmxpc3RzLmgiCisgCisrc3RhdGljIHBzaV9oIGl0ZXIgOworKworIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqZGVmYXVsdHMpOworIAorQEAgLTMyLDEyICszNCwxNSBAQCB2b2lkIHBhcnNlX2luZXRfY29uZl9maWxlKCBpbnQgZmQsIHN0cnVjdCBjb25maWd1cmF0aW9uICpjb25mcCApCisgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpkZWZhdWx0X2NvbmZpZyA9IENORl9ERUZBVUxUUyggY29uZnAgKTsKKyAgICAKKyAgICBsaW5lX2NvdW50ID0gMDsKKysgICBpdGVyID0gcHNpX2NyZWF0ZSAoc2NvbmZzKTsKKyAKKyAgICBmb3IoIDs7ICkKKyAgICB7ICAgCisgICAgICAgaWYgKGdldF9uZXh0X2luZXRfZW50cnkoZmQsIHNjb25mcywgZGVmYXVsdF9jb25maWcpID09IC0yKQorICAgICAgICAgIGJyZWFrOworICAgIH0KKysKKysgICBwc2lfZGVzdHJveShpdGVyKTsKKyB9CisgCisgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsIAorQEAgLTQ2LDcgKzUxLDcgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgY2hhciAqcDsKKyAgICBzdHJfaCBzdHJwOworICAgIGNoYXIgKmxpbmUgPSBuZXh0X2xpbmUoZmQpOworLSAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqc2NwOworKyAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqc2NwLCAqdG1wOworICAgIHVuc2lnbmVkIHUsIGk7CisgICAgY29uc3QgY2hhciAqZnVuYyA9ICJnZXRfbmV4dF9pbmV0X2VudHJ5IjsKKyAgICBjaGFyICpuYW1lID0gTlVMTCwgKnJwY3ZlcnMgPSBOVUxMLCAqcnBjcHJvdG8gPSBOVUxMOworQEAgLTQwNSw3ICs0MTAsMTYgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgU0NfU1BFQ0lGWSggc2NwLCBBX1NPQ0tFVF9UWVBFICk7CisgICAgU0NfU1BFQ0lGWSggc2NwLCBBX1dBSVQgKTsKKyAKKy0gICBpZiggISBwc2V0X2FkZChzY29uZnMsIHNjcCkgKQorKyAgIGZvciAoIHRtcCA9IFNDUCggcHNpX3N0YXJ0KCBpdGVyICkgKSA7IHRtcCA7IHRtcCA9IFNDUCggcHNpX25leHQoaXRlcikpICl7CisrICAgICAgaWYgKEVRKFNDX0lEKHNjcCksIFNDX0lEKHRtcCkpKSB7CisrICAgICAgICAgcGFyc2Vtc2coTE9HX0RFQlVHLCBmdW5jLCAicmVtb3ZpbmcgZHVwbGljYXRlIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgICAgICAgIHNjX2ZyZWUoc2NwKTsKKysgICAgICAgICBzY3AgPSBOVUxMOworKyAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICB9CisrCisrICAgaWYoIHNjcCAmJiAhIHBzZXRfYWRkKHNjb25mcywgc2NwKSApCisgICAgeworICAgICAgIG91dF9vZl9tZW1vcnkoIGZ1bmMgKTsKKyAgICAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CitAQCAtNDE0LDcgKzQyOCw5IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgIH0KKyAKKyAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CistICAgcGFyc2Vtc2coIExPR19ERUJVRywgZnVuYywgImFkZGVkIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgIGlmIChzY3ApIHsKKysgICAgICBwYXJzZW1zZyggTE9HX0RFQlVHLCBmdW5jLCAiYWRkZWQgc2VydmljZSAlcyIsIFNDX05BTUUoc2NwKSk7CisrICAgfQorICAgIHJldHVybiAwOworIH0KKyAKKy0tIAorMS41LjMuNi4yMDQwLmcxNWU2CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC9WYXJpb3VzLWZpeGVzLWZyb20tdGhlLXByZXZpb3VzLW1haW50YWluZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1OWNkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGEzNDEwYjBiYzgxYWIwM2E4ODlkOWZmYzE0ZTM1MWJhZGY4MzcyZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CitEYXRlOiBNb24sIDI2IE5vdiAyMDA3IDE2OjAyOjA0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFZhcmlvdXMgZml4ZXMgZnJvbSB0aGUgcHJldmlvdXMgbWFpbnRhaW5lci4KKworLS0tCisgeGluZXRkL2NoaWxkLmMgICB8ICAgMjAgKysrKysrKysrKysrKysrKystLS0KKyB4aW5ldGQvc2VydmljZS5jIHwgICAgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3hpbmV0ZC9jaGlsZC5jIGIveGluZXRkL2NoaWxkLmMKK2luZGV4IDg5ZWU1NGMuLjQ4ZTk2MTUgMTAwNjQ0CistLS0gYS94aW5ldGQvY2hpbGQuYworKysrIGIveGluZXRkL2NoaWxkLmMKK0BAIC0yODQsNiArMjg0LDcgQEAgdm9pZCBjaGlsZF9wcm9jZXNzKCBzdHJ1Y3Qgc2VydmVyICpzZXJwICkKKyAgICBjb25uZWN0aW9uX3MgICAgICAgICAgICAqY3AgID0gU0VSVkVSX0NPTk5FQ1RJT04oIHNlcnAgKSA7CisgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICAgKnNjcCA9IFNWQ19DT05GKCBzcCApIDsKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAqZnVuYyA9ICJjaGlsZF9wcm9jZXNzIiA7CisrICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmQsIG51bGxfZmQ7CisgCisgICAgc2lnbmFsX2RlZmF1bHRfc3RhdGUoKTsKKyAKK0BAIC0yOTYsOSArMjk3LDIyIEBAIHZvaWQgY2hpbGRfcHJvY2Vzcyggc3RydWN0IHNlcnZlciAqc2VycCApCisgICAgc2lnbmFsc19wZW5kaW5nWzBdID0gLTE7CisgICAgc2lnbmFsc19wZW5kaW5nWzFdID0gLTE7CisgCistICAgU2Nsb3NlKDApOworLSAgIFNjbG9zZSgxKTsKKy0gICBTY2xvc2UoMik7CisrICAgaWYgKCAoIG51bGxfZmQgPSBvcGVuKCAiL2Rldi9udWxsIiwgT19SRE9OTFkgKSApID09IC0xICkKKysgICB7CisrICAgICAgbXNnKCBMT0dfRVJSLCBmdW5jLCAib3BlbignL2Rldi9udWxsJykgZmFpbGVkOiAlbSIpIDsKKysgICAgICBfZXhpdCggMSApIDsKKysgICB9CisrCisrICAgZm9yICggZmQgPSAwIDsgZmQgPD0gTUFYX1BBU1NfRkQgOyBmZCsrICkKKysgICB7CisrICAgICAgaWYgKCBmZCAhPSBudWxsX2ZkICYmIGR1cDIoIG51bGxfZmQsIGZkICkgPT0gLTEgKQorKyAgICAgIHsKKysgICAgICAgICBtc2coIExPR19FUlIsIGZ1bmMsICJkdXAyKCVkLCAlZCkgZmFpbGVkOiAlbSIpIDsKKysgICAgICAgICBfZXhpdCggMSApIDsKKysgICAgICB9CisrICAgfQorKyAgIGlmICggbnVsbF9mZCA+IE1BWF9QQVNTX0ZEICkKKysgICAgICAodm9pZCkgU2Nsb3NlKCBudWxsX2ZkICkgOworIAorIAorICNpZmRlZiBERUJVR19TRVJWRVIKK2RpZmYgLS1naXQgYS94aW5ldGQvc2VydmljZS5jIGIveGluZXRkL3NlcnZpY2UuYworaW5kZXggM2Q2OGQ3OC4uMDEzMmQ2YyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9zZXJ2aWNlLmMKKysrKyBiL3hpbmV0ZC9zZXJ2aWNlLmMKK0BAIC03NDUsOCArNzQ1LDggQEAgc3RhdGljIHN0YXR1c19lIGZhaWxlZF9zZXJ2aWNlKHN0cnVjdCBzZXJ2aWNlICpzcCwKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTEVEOworIAorICAgICAgICAgICAgIGlmICggbGFzdCA9PSBOVUxMICkgeworLSAgICAgICAgICAgICAgIGxhc3QgPSBTQUlOKCBjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKy0JICAgICAgIFNWQ19MQVNUX0RHUkFNX0FERFIoc3ApID0gKHVuaW9uIHhzb2NrYWRkciAqKWxhc3Q7CisrCSAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9ICBTQUlOKCBjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKysJICAgIGxhc3QgPSBTQUlOKCBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSApOworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAodm9pZCkgdGltZSggJmN1cnJlbnRfdGltZSApIDsKK0BAIC03NzIsOCArNzcyLDggQEAgc3RhdGljIHN0YXR1c19lIGZhaWxlZF9zZXJ2aWNlKHN0cnVjdCBzZXJ2aWNlICpzcCwKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTEVEOworIAorIAkgICAgaWYoIGxhc3QgPT0gTlVMTCApIHsKKy0gICAgICAgICAgICAgICBsYXN0ID0gU0FJTjYoY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CistCSAgICAgICBTVkNfTEFTVF9ER1JBTV9BRERSKCBzcCApID0gKHVuaW9uIHhzb2NrYWRkciAqKWxhc3Q7CisrCSAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9IFNBSU42KGNhbGxvYyggMSwgc2l6ZW9mKHVuaW9uIHhzb2NrYWRkcikgKSApOworKyAgICAgICAgICAgIGxhc3QgPSBTQUlONihTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSk7CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICh2b2lkKSB0aW1lKCAmY3VycmVudF90aW1lICkgOworLS0gCisxLjUuMy42LjIwNDAuZzE1ZTYKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0MmRiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAoreGluZXRkOiBDVkUtMjAxMy00MzQyCisKK3hpbmV0ZCBkb2VzIG5vdCBlbmZvcmNlIHRoZSB1c2VyIGFuZCBncm91cCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMKK2ZvciBUQ1BNVVggc2VydmljZXMsIHdoaWNoIGNhdXNlcyB0aGVzZSBzZXJ2aWNlcyB0byBiZSBydW4gYXMgcm9vdAorYW5kIG1ha2VzIGl0IGVhc2llciBmb3IgcmVtb3RlIGF0dGFja2VycyB0byBnYWluIHByaXZpbGVnZXMgYnkKK2xldmVyYWdpbmcgYW5vdGhlciB2dWxuZXJhYmlsaXR5IGluIGEgc2VydmljZS4KK2h0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEzLTQzNDIKKwordGhlIHBhdGNoIGNvbWUgZnJvbToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD03OTk3MzImYWN0aW9uPWRpZmYKKworU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgeGluZXRkL2J1aWx0aW5zLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvYnVpbHRpbnMuYyBiL3hpbmV0ZC9idWlsdGlucy5jCitpbmRleCAzYjg1NTc5Li4zNGE1YmFjIDEwMDY0NAorLS0tIGEveGluZXRkL2J1aWx0aW5zLmMKKysrKyBiL3hpbmV0ZC9idWlsdGlucy5jCitAQCAtNjE3LDcgKzYxNyw3IEBAIHN0YXRpYyB2b2lkIHRjcG11eF9oYW5kbGVyKCBjb25zdCBzdHJ1Y3Qgc2VydmVyICpzZXJwICkKKyAgICBpZiggU0NfSVNfSU5URVJOQUwoIHNjcCApICkgeworICAgICAgIFNDX0lOVEVSTkFMKHNjcCwgbnNlcnApOworICAgIH0gZWxzZSB7CistICAgICAgZXhlY19zZXJ2ZXIobnNlcnApOworKyAgICAgIGNoaWxkX3Byb2Nlc3MobnNlcnApOworICAgIH0KKyB9CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1zaG91bGQtYmUtYWJsZS10by1saXN0ZW4tb24tSVB2Ni1ldmVuLWluLWluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzY1Y2ExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2gKQEAgLTAsMCArMSwxMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGY0NGIyMThjY2M3NzlhYjNmNGFlZDA3MjM5MGNjZjEyOWQ5NGI1OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYXZpZCBNYWRvcmUgPGRhdmlkQHBsZWlhZGVzLnN0YXJzPgorRGF0ZTogTW9uLCAyNCBNYXIgMjAwOCAxMjo0NTozNiArMDEwMAorU3ViamVjdDogW1BBVENIXSB4aW5ldGQgc2hvdWxkIGJlIGFibGUgdG8gbGlzdGVuIG9uIElQdjYgZXZlbiBpbiAtaW5ldGRfY29tcGF0IG1vZGUKKworeGluZXRkIGRvZXMgbm90IGJpbmQgdG8gSVB2NiBhZGRyZXNzZXMgKGFuZCBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgYW4KK29wdGlvbiB0byBkbyBzbykgd2hlbiB1c2VkIGluIC1pbmV0ZF9jb21wYXQgbW9kZS4gIEFzIGN1cnJlbnQgaW5ldGQncworYXJlIElQdjYtYXdhcmUsIHRoaXMgaXMgYSBwcm9ibGVtOiB0aGlzIG1lYW5zIHhpbmV0ZCBjYW5ub3QgYmUgdXNlZCBhcworYSBkcm9wLWluIGluZXRkIHJlcGxhY2VtZW50LgorCitUaGUgYXR0YWNoZWQgcGF0Y2ggaXMgYSBzdWdnZXN0aW9uOiBpdCBhZGRzIGEgLWluZXRkX2lwdjYgZ2xvYmFsCitvcHRpb24gdGhhdCwgaWYgdXNlZCwgY2F1c2VzIGluZXRkLWNvbXBhdGliaWxpdHkgbGluZXMgdG8gaGF2ZSBhbgoraW1wbGljaXQgIklQdjYiIG9wdGlvbi4gIFBlcmhhcHMgdGhpcyBpcyBub3QgdGhlIGJlc3Qgc29sdXRpb24sIGJ1dAordGhlcmUgc2hvdWxkIGRlZmluaXRlbHkgYmUgYSB3YXkgdG8gZ2V0IGluZXRkLmNvbmYgdG8gYmUgcmVhZCBpbgorSVB2Ni1hd2FyZSBtb2RlLgorLS0tCisgeGluZXRkL2NvbmZwYXJzZS5jIHwgICAgMSArCisgeGluZXRkL2luZXQuYyAgICAgIHwgICAxNyArKysrKysrKysrKysrKysrKworIHhpbmV0ZC9vcHRpb25zLmMgICB8ICAgIDMgKysrCisgeGluZXRkL3hpbmV0ZC5tYW4gIHwgICAgNiArKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvY29uZnBhcnNlLmMgYi94aW5ldGQvY29uZnBhcnNlLmMKK2luZGV4IGRiOWY0MzEuLmQ3YjBiY2MgMTAwNjQ0CistLS0gYS94aW5ldGQvY29uZnBhcnNlLmMKKysrKyBiL3hpbmV0ZC9jb25mcGFyc2UuYworQEAgLTQwLDYgKzQwLDcgQEAKKyAjaW5jbHVkZSAiaW5ldC5oIgorICNpbmNsdWRlICJtYWluLmgiCisgCisrZXh0ZXJuIGludCBpbmV0ZF9pcHY2OworIGV4dGVybiBpbnQgaW5ldGRfY29tcGF0OworIAorIC8qCitkaWZmIC0tZ2l0IGEveGluZXRkL2luZXQuYyBiL3hpbmV0ZC9pbmV0LmMKK2luZGV4IDhjYWFiNDUuLjJlNjE3YWUgMTAwNjQ0CistLS0gYS94aW5ldGQvaW5ldC5jCisrKysgYi94aW5ldGQvaW5ldC5jCitAQCAtMjUsNiArMjUsOCBAQAorIAorIHN0YXRpYyBwc2lfaCBpdGVyIDsKKyAKKytleHRlcm4gaW50IGluZXRkX2lwdjY7CisrCisgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpkZWZhdWx0cyk7CisgCitAQCAtMzYwLDYgKzM2MiwyMSBAQCBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywKKyAgICAgICAgICB9CisgICAgICAgICAgU0NfU0VSVkVSX0FSR1Yoc2NwKVt1XSA9IHA7CisgICAgICAgfQorKworKyAgICAgIC8qIFNldCB0aGUgSVB2NiBmbGFnIGlmIHdlIHdlcmUgcGFzc2VkIHRoZSAtaW5ldGRfaXB2NiBvcHRpb24gKi8KKysgICAgICBpZiAoIGluZXRkX2lwdjYgKQorKyAgICAgIHsKKysgICAgICAgICBudnAgPSBudl9maW5kX3ZhbHVlKCBzZXJ2aWNlX2ZsYWdzLCAiSVB2NiIgKTsKKysgICAgICAgICBpZiAoIG52cCA9PSBOVUxMICkKKysgICAgICAgICB7CisrICAgICAgICAgICAgcGFyc2Vtc2coIExPR19XQVJOSU5HLCBmdW5jLCAiaW5ldGQuY29uZiAtIEJhZCBmb28gJXMiLCBuYW1lICkgOworKyAgICAgICAgICAgIHBzZXRfZGVzdHJveShhcmdzKTsKKysgICAgICAgICAgICBzY19mcmVlKHNjcCk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgIH0KKysgICAgICAgICBNX1NFVChTQ19YRkxBR1Moc2NwKSwgbnZwLT52YWx1ZSk7CisrICAgICAgfQorKworICAgICAgIC8qIFNldCB0aGUgcmV1c2UgZmxhZywgYXMgdGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgaW5ldGQgKi8KKyAgICAgICBudnAgPSBudl9maW5kX3ZhbHVlKCBzZXJ2aWNlX2ZsYWdzLCAiUkVVU0UiICk7CisgICAgICAgaWYgKCBudnAgPT0gTlVMTCApCitkaWZmIC0tZ2l0IGEveGluZXRkL29wdGlvbnMuYyBiL3hpbmV0ZC9vcHRpb25zLmMKK2luZGV4IGIwNThiNmEuLmRjMmYzYTAgMTAwNjQ0CistLS0gYS94aW5ldGQvb3B0aW9ucy5jCisrKysgYi94aW5ldGQvb3B0aW9ucy5jCitAQCAtMzAsNiArMzAsNyBAQCBpbnQgbG9ncHJvY3Nfb3B0aW9uIDsKKyB1bnNpZ25lZCBsb2dwcm9jc19vcHRpb25fYXJnIDsKKyBpbnQgc3RheWFsaXZlX29wdGlvbj0wOworIGNoYXIgKnByb2dyYW1fbmFtZSA7CisraW50IGluZXRkX2lwdjYgPSAwIDsKKyBpbnQgaW5ldGRfY29tcGF0ID0gMCA7CisgaW50IGRvbnRfZm9yayA9IDA7CisgCitAQCAtMTI4LDYgKzEyOSw4IEBAIGludCBvcHRfcmVjb2duaXplKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICB9CisrICAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCAoICZhcmd2WyBhcmcgXVsgMSBdLCAiaW5ldGRfaXB2NiIgKSA9PSAwICkKKysgICAgICAgICAgICBpbmV0ZF9pcHY2ID0gMTsKKyAgICAgICAgICBlbHNlIGlmICggc3RyY21wICggJmFyZ3ZbIGFyZyBdWyAxIF0sICJpbmV0ZF9jb21wYXQiICkgPT0gMCApCisgICAgICAgICAgICAgaW5ldGRfY29tcGF0ID0gMTsKKyAgICAgICB9CitkaWZmIC0tZ2l0IGEveGluZXRkL3hpbmV0ZC5tYW4gYi94aW5ldGQveGluZXRkLm1hbgoraW5kZXggYzc2YzNjNi4uYzlkZDgwMyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC94aW5ldGQubWFuCisrKysgYi94aW5ldGQveGluZXRkLm1hbgorQEAgLTEwNiw2ICsxMDYsMTIgQEAgVGhpcyBvcHRpb24gY2F1c2VzIHhpbmV0ZCB0byByZWFkIC9ldGMvaW5ldGQuY29uZiBpbiBhZGRpdGlvbiB0byB0aGUKKyBzdGFuZGFyZCB4aW5ldGQgY29uZmlnIGZpbGVzLiAgL2V0Yy9pbmV0ZC5jb25mIGlzIHJlYWQgYWZ0ZXIgdGhlCisgc3RhbmRhcmQgeGluZXRkIGNvbmZpZyBmaWxlcy4KKyAuVFAKKysuQkkgXC1pbmV0ZF9pcHY2CisrVGhpcyBvcHRpb24gY2F1c2VzIHhpbmV0ZCB0byBiaW5kIHRvIElQdjYgKEFGX0lORVQ2KSBhZGRyZXNzZXMgZm9yCisraW5ldGQgY29tcGF0aWJpbGl0eSBsaW5lcyAoc2VlIHByZXZpb3VzIG9wdGlvbikuICBUaGlzIG9ubHkgYWZmZWN0cworK2hvdyAvZXRjL2luZXRkLmNvbmYgaXMgaW50ZXJwcmV0ZWQgYW5kIHRodXMgb25seSBoYXMgYW55IGVmZmVjdCBpZgorK3RoZSBcLWluZXRkX2NvbXBhdCBvcHRpb24gaXMgYWxzbyB1c2VkLgorKy5UUAorIC5CSSBcLWNjICIgaW50ZXJ2YWwiCisgVGhpcyBvcHRpb24gaW5zdHJ1Y3RzCisgLkIgeGluZXRkCistLSAKKzEuNS41LnJjMC4xMjcuZ2I0MzM3CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNmVhMjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mCkBAIC0wLDAgKzEsMTEgQEAKKyMgU2ltcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgeGluZXRkCisjCisjIFNvbWUgZGVmYXVsdHMsIGFuZCBpbmNsdWRlIC9ldGMveGluZXRkLmQvCisKK2RlZmF1bHRzCit7CisKKworfQorCitpbmNsdWRlZGlyIC9ldGMveGluZXRkLmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmRlZmF1bHQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTM4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgeGluZXRkLiBUaGlzIGZpbGUgaXMgc291cmNlZCBieSAvYmluL3NoIGZyb20KKyMgL2V0Yy9pbml0LmQveGluZXRkCisKKyMgZW5hYmxlIHhpbmV0ZCBJbmV0ZCBjb21wYXQgbW9kZQorSU5FVERfQ09NUEFUPVllcworCisjIE9wdGlvbnMgdG8gcGFzcyB0byB4aW5ldGQKKyMKKyMgLXN0YXlhbGl2ZSBjb21lcyBieSBkZWZhdWx0IDogaXQgY2FuIGJlIHJlbW92ZWQgaWYgeGluZXRkIGlzIGV4cGVjdGVkCisjIG5vdCB0byBzdGFydCB3aGVuIG5vIHNlcnZpY2UgaXMgY29uZmlndXJlZAorIworWElORVREX09QVFM9Ii1zdGF5YWxpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5pbml0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdjMmM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdApAQCAtMCwwICsxLDY0IEBACisjIS9iaW4vc2gKKyMKKyMgL2V0Yy9pbml0LmQveGluZXRkICAtLSAgc2NyaXB0IHRvIHN0YXJ0IGFuZCBzdG9wIHhpbmV0ZC4KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2lmIHRlc3QgLWYgL2V0Yy9kZWZhdWx0L3hpbmV0ZDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L3hpbmV0ZAorZmkKKworCit0ZXN0IC14IC91c3Ivc2Jpbi94aW5ldGQgfHwgZXhpdCAwCisKK2NoZWNrcG9ydG1hcCAoKSB7CisgIGlmIGdyZXAgIl5bXiAqI10iIC9ldGMveGluZXRkLmNvbmYgfCBncmVwIC1xICdycGMvJzsgdGhlbgorICAgIGlmICEgcnBjaW5mbyAtdSBsb2NhbGhvc3QgcG9ydG1hcHBlciA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIldBUk5JTkc6IHBvcnRtYXBwZXIgaW5hY3RpdmUgLSBSUEMgc2VydmljZXMgdW5hdmFpbGFibGUhIgorICAgICAgZWNobyAiICAgIENvbW1lbnRpbmcgb3V0IG9yIHJlbW92aW5nIHRoZSBSUEMgc2VydmljZXMgZnJvbSIKKyAgICAgIGVjaG8gIiAgICB0aGUgL2V0Yy94aW5ldGQuY29uZiBmaWxlIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS4iCisgICAgICBlY2hvCisgICAgZmkKKyAgZmkKK30gCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBjaGVja3BvcnRtYXAKKwllY2hvIC1uICJTdGFydGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWJhY2tncm91bmQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQgLS0gLXBpZGZpbGUgL3Zhci9ydW4veGluZXRkLnBpZCAkWElORVREX09QVFMKKwllY2hvICIuIgorCTs7CisgICAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAzIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4veGluZXRkOworCWV4aXQgJD8KKwk7OworICAgIHJlbG9hZCkKKwllY2hvIC1uICJSZWxvYWRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXIgY29uZmlndXJhdGlvbjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAxIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgZm9yY2UtcmVsb2FkKQorCWVjaG8gIiQwIGZvcmNlLXJlbG9hZDogRm9yY2UgUmVsb2FkIGlzIGRlcHJlY2F0ZWQiCisJZWNobyAtbiAiRm9yY2VmdWxseSByZWxvYWRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXIgY29uZmlndXJhdGlvbjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAxIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3hpbmV0ZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfGZvcmNlLXJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLnNlcnZpY2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZmRjNWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTMgQEAKK1tVbml0XQorRGVzY3JpcHRpb249WGluZXRkIEEgUG93ZXJmdWwgUmVwbGFjZW1lbnQgRm9yIEluZXRkCitBZnRlcj1zeXNsb2cudGFyZ2V0IG5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitQSURGaWxlPS92YXIvcnVuL3hpbmV0ZC5waWQKK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9zeXNjb25maWcveGluZXRkCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3hpbmV0ZCAtc3RheWFsaXZlIC1waWRmaWxlIC92YXIvcnVuL3hpbmV0ZC5waWQgIiRFWFRSQU9QVElPTlMiCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZF8yLjMuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjMDNlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiU29ja2V0LWJhc2VkIHNlcnZpY2UgYWN0aXZhdGlvbiBkYWVtb24iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20veGluZXRkLW9yZy94aW5ldGQiCisKKyMgeGluZXRkIGlzIGEgQlNELWxpa2UgbGljZW5zZQorIyBBcHBsZSBhbmQgR2VudG9vIHNheSBCU0QgaGVyZS4KK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT04YWQ4NjE1MTk4NTQyNDQ0Zjg0ZDI4YTZjZjIyNmRkOCIKKworREVQRU5EUyA9ICIiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3hpbmV0ZC1vcmcveGluZXRkLmdpdDtwcm90b2NvbD1odHRwcyBcCisgICAgICBmaWxlOi8veGluZXRkLmluaXQgXAorICAgICAgZmlsZTovL3hpbmV0ZC5jb25mIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuZGVmYXVsdCBcCisgICAgICBmaWxlOi8vVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2ggXAorICAgICAgZmlsZTovL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuc2VydmljZSBcCisgICAgICAiCisKK1NSQ1JFViA9ICI2OGJiOWFiOWU5ZjIxNGFkOGEyMzIyZjI4YWMxZDY3MzNlNzBiYzI0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ4aW5ldGQuc2VydmljZSIKKworSU5JVFNDUklQVF9OQU1FID0gInhpbmV0ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitFWFRSQV9PRUNPTkY9Ii0tZGlzYWJsZS1ubHMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS13aXRoLWxpYndyYXAsLHRjcC13cmFwcGVycyIKKworZG9fY29uZmlndXJlKCkgeworCSMgTG9va3MgbGlrZSBjb25maWd1cmUuaW4gaXMgYnJva2VuLCBzbyB3ZSBhcmUgc2tpcHBpbmcKKwkjIHJlYnVpbGRpbmcgY29uZmlndXJlIGFuZCBhcmUganVzdCB1c2luZyB0aGUgc2hpcHBlZCBvbmUKKwkoIGNkICR7U307IGdudS1jb25maWdpemUgLS1mb3JjZSApCisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsKCkgeworCSMgU2FtZSBoZXJlLCB0aGUgTWFrZWZpbGUgZG9lcyBzb21lIHJlYWxseSBzdHVwaWQgdGhpbmdzLAorCSMgYnV0IHNpbmNlIHdlIG9ubHkgd2FudCB0d28gZmlsZXMgd2h5IG5vdCBvdmVycmlkZQorCSMgZG9faW5zdGFsbCBmcm9tIGF1dG90b29scyBhbmQgZG9pbmcgaXQgb3Vyc2VsZnM/CisJaW5zdGFsbCAtZCAiJHtEfSR7c2JpbmRpcn0iCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L3hpbmV0ZC5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisJaW5zdGFsbCAtbSA2NDQgIiR7V09SS0RJUn0veGluZXRkLmNvbmYiICIke0R9JHtzeXNjb25mZGlyfSIKKwlpbnN0YWxsIC1tIDc1NSAiJHtXT1JLRElSfS94aW5ldGQuaW5pdCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC94aW5ldGQiCisJaW5zdGFsbCAtbSA2NDQgIiR7V09SS0RJUn0veGluZXRkLmRlZmF1bHQiICIke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hpbmV0ZCIKKwlpbnN0YWxsIC1tIDc1NSAiJHtCfS94aW5ldGQveGluZXRkIiAiJHtEfSR7c2JpbmRpcn0iCisJaW5zdGFsbCAtbSA3NTUgIiR7Qn0veGluZXRkL2l0b3giICIke0R9JHtzYmluZGlyfSIKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veGluZXRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veGluZXRkLnNlcnZpY2UKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0veGluZXRkLmNvbmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3h6L3h6XzUuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWU0OGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuYWdpbmcgTFpNQSBjb21wcmVzc2VkIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3R1a2Fhbmkub3JnL3h6LyIKK1NFQ1RJT04gPSAiYmFzZSIKKworIyBUaGUgc291cmNlIGluY2x1ZGVzIGJpdHMgb2YgUEQsIEdQTHYyLCBHUEx2MywgTEdQTHYyLjErLCBidXQgdGhlIG9ubHkgZmlsZQorIyB3aGljaCBpcyBHUEx2MyBpcyBhbiBtNCBtYWNybyB3aGljaCBpc24ndCBzaGlwcGVkIGluIGFueSBvZiBvdXIgcGFja2FnZXMsCisjIGFuZCB0aGUgTEdQTCBiaXRzIGFyZSB1bmRlciBsaWIvLCB3aGljaCBhcHBlYXJzIHRvIGJlIHVzZWQgZm9yIGxpYmdudSwgd2hpY2gKKyMgYXBwZWFycyB0byBiZSB1c2VkIGZvciBET1MgYnVpbGRzLiBTbyB3ZSdyZSBsZWZ0IHdpdGggR1BMdjIrIGFuZCBQRC4KK0xJQ0VOU0UgPSAiR1BMdjIrICYgR1BMdjMrICYgTEdQTHYyLjErICYgUEQiCitMSUNFTlNFXyR7UE59ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tc3RhdGljZGV2ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZG9jID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tbG9jYWxlID0gIkdQTHYyKyIKK0xJQ0VOU0VfbGlibHptYSA9ICJQRCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ3NWI2YzdkY2EyMzY3NDBhY2U0YmJhNTUzZThlMWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjIuMTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2dldG9wdC5jO2VuZGxpbmU9MjM7bWQ1PTIwNjliMGVlNzEwNTcyYzAzYmIzMTE0ZTQ1MzJjZDg0ICIKKworU1JDX1VSSSA9ICJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjNlNDRjNzY2YzNmYjRmMTllMzQ4ZTY0NmZjZDU3NzhhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI5MThiNjY0ODA3NmU3NGY4ZDdhZTE5ZGI1ZWU2NjNkZjgwMDA0OWUxODcyNTlmYWY1ZWI5OTdhN2I5NzQ2ODEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworUEFDS0FHRVMgPSsgImxpYmx6bWEiCisKK0ZJTEVTX2xpYmx6bWEgPSAiJHtsaWJkaXJ9L2xpYmx6bWEqJHtTT0xJQlN9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMjFjNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYwpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkNvbXByZXNzb3IvYXJjaGl2ZXIgZm9yIGNyZWF0aW5nIGFuZCBtb2RpZnlpbmcgLnppcCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mby16aXAub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTA0ZDQzYzVkNzBiNDk2YzAzMjMwODEwNmUyNmFlMTdkIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3ppcCR7QGQuZ2V0VmFyKCdQVicsMSkucmVwbGFjZSgnLicsICcnKX0udGd6IgorCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnQklORD0ke0NDfScgJ0FTPSR7Q0N9IC1jJyAnQ1BQPSR7Q1BQfScgXAorCQknQ0ZMQUdTPS1JLiAtRFVOSVggJHtDRkxBR1N9JyAnSU5TVEFMTD1pbnN0YWxsJyBcCisJCSdCSU5GTEFHUz0wNzU1JyAnSU5TVEFMTF9EPWluc3RhbGwgLWQnIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBmbGFncyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQorCXNlZCAtaSAncyNMRkxBR1MxPSIiI0xGTEFHUzE9IiR7TERGTEFHU30iIycgZmxhZ3MKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZ2VuZXJpYyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBwcmVmaXg9JHtEfSR7cHJlZml4fSBcCisJCSAgIEJJTkRJUj0ke0R9JHtiaW5kaXJ9IE1BTkRJUj0ke0R9JHttYW5kaXJ9L21hbjEgXAorCQkgICBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwXzMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTk2MTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB6aXAuaW5jCisKK1BSPSJyMiIKKworIyB6aXAtMi4zMiBzdGlsbCB1c2VzIGRpcmVjdG9yeSBuYW1lIG9mIHppcC0yLjMwCitTID0gIiR7V09SS0RJUn0vemlwMzAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3Yjc0NTUxZTYzZjhlZTZhYWI2ZmJjODY2NzZjMGQzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGU4YmIxZjliN2ViMGIwMTI4NTQ5NWEyNjk5ZGYzYTRiNzY2Nzg0YzE3NjVhOGYxYWVlZGY2M2MwODA2MzY5IgorCisjIHppcC5pbmMgc2V0cyBDRkxBR1MsIGJ1dCB3aGF0IE1ha2VmaWxlIGFjdHVhbGx5IHVzZXMgaXMKKyMgQ0ZMQUdTX05PT1BULiAgSXQgd2lsbCBhbHNvIGZvcmNlIC1PMyBvcHRpbWl6YXRpb24sIG92ZXJyaWRpbmcKKyMgd2hhdGV2ZXIgd2Ugc2V0LgorIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgJ0NGTEFHU19OT09QVD0tSS4gLURVTklYICR7Q0ZMQUdTfSciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjE2LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjE2LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2ZmIyNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMTYuMy5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIldlYktpdCBiYXNlZCB3ZWIgYnJvd3NlciBmb3IgR05PTUUiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitERVBFTkRTID0gImxpYnNvdXAtMi40IHdlYmtpdGd0ayBndGsrMyBpc28tY29kZXMgY2EtY2VydGlmaWNhdGVzIGF2YWhpIGxpYm5vdGlmeSBnY3IgbGlid25jazMgXAorCSAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ25vbWUtZGVza3RvcDMiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjMyOTZhZjQ1MzJiODAxOTc3NWY0YjQwZDIxYTM0MWFlIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDUyN2YxNzcwNzc5ZWMyMmQ5NTVhZWIxM2IxNDhhODQ2YTI2MTQ0ZTQzM2ZmMDQ4MGM5ODFhZjgwZTIzOTBiMSIKKworRVhUUkFfT0VDT05GICs9ICIgLS1kaXNhYmxlLW5zcyAtLXdpdGgtZGlzdHJpYnV0b3ItbmFtZT0ke0RJU1RST30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHRvdWNoICR7U30vZ25vbWUtZG9jLXV0aWxzLm1ha2UKKyAgICBzZWQgLWkgLWUgczpoZWxwOjpnICR7U30vTWFrZWZpbGUuYW0KK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwZGF0YSAke2RhdGFkaXJ9L2RidXMtMSAke2RhdGFkaXJ9L2dub21lLXNoZWxsL3NlYXJjaC1wcm92aWRlcnMiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9lcGlwaGFueS8qL3dlYi1leHRlbnNpb25zLy5kZWJ1Zy9saWJlcGh5d2ViZXh0ZW5zaW9uLnNvIgorUkRFUEVORFNfJHtQTn0gPSAiaXNvLWNvZGVzIGFkd2FpdGEtaWNvbi10aGVtZSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNhLWNlcnRpZmljYXRlcyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZmlsZXMvMDAwMS15ZWxwLm00LWRyb3AtdGhlLWNoZWNrLWZvci1pdHN0b29sLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZmlsZXMvMDAwMS15ZWxwLm00LWRyb3AtdGhlLWNoZWNrLWZvci1pdHN0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ODVkN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9maWxlcy8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAzMGYwM2EyNTZlZmUzNzVhNGQ1YzNhMjRiZjQxNjhlYmYzODBlM2FiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDMwIEp1bCAyMDE1IDE1OjEzOjIzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHllbHAubTQ6IGRyb3AgdGhlIGNoZWNrIGZvciBpdHN0b29sCisKK0l0IGlzbid0IHVzZWQgZm9yIGFueXRoaW5nIGR1cmluZyBidWlsZCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHByb3ZpZGUKK2l0IGFzIGEgcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3RhcmJhbGwtc3BlY2lmaWMgaXNzdWVdCistLS0KKyBtNC95ZWxwLm00IHwgNiAtLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L3llbHAubTQgYi9tNC95ZWxwLm00CitpbmRleCA1ZGI4NDdmLi4xYjZlZGU0IDEwMDY0NAorLS0tIGEvbTQveWVscC5tNAorKysrIGIvbTQveWVscC5tNAorQEAgLTI3LDEyICsyNyw2IEBAIEFDX0FSR19XSVRIKFtoZWxwLWRpcl0sCisgSEVMUF9ESVI9IiR3aXRoX2hlbHBfZGlyIgorIEFDX1NVQlNUKEhFTFBfRElSKQorIAorLUFDX0FSR19WQVIoW0lUU1RPT0xdLCBbUGF0aCB0byB0aGUgYGl0c3Rvb2xgIGNvbW1hbmRdKQorLUFDX0NIRUNLX1BST0coW0lUU1RPT0xdLCBbaXRzdG9vbF0sIFtpdHN0b29sXSkKKy1pZiB0ZXN0IHgiJElUU1RPT0wiID0geDsgdGhlbgorLSAgQUNfTVNHX0VSUk9SKFtpdHN0b29sIG5vdCBmb3VuZF0pCistZmkKKy0KKyBBQ19BUkdfVkFSKFtYTUxMSU5UXSwgW1BhdGggdG8gdGhlIGB4bWxsaW50YCBjb21tYW5kXSkKKyBBQ19DSEVDS19QUk9HKFtYTUxMSU5UXSwgW3htbGxpbnRdLCBbeG1sbGludF0pCisgaWYgdGVzdCB4IiRYTUxMSU5UIiA9IHg7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjViNmU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGJpdHMgb2YgY3J5cHRvIFVJIGFuZCBwYXJzaW5nIGV0YyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCisKK0RFUEVORFMgPSAiZ3RrKzMgcDExLWtpdCBnbGliLTIuMCBsaWJnY3J5cHQgdmFsYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGd0ay1kb2MKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDU4MzU2ODBiZTBiNmE4MzhlMDJhNTI4ZDUzNzhkOWMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlY2ZlOGRmNDFjYzg4MTU4MzY0YmIxNWFkZGM2NzBiMTFlNTM5ZmU4NDQ3NDI5ODM2MjliYTIzMjM4ODhkMDc1IgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2RidXMtMSBcCisgICAgJHtkYXRhZGlyfS9nY3ItMyBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvMDAwMS1waXhvcHMtQmUtbW9yZS1jYXJlZnVsLWFib3V0LWludGVnZXItb3ZlcmZsb3cucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvMDAwMS1waXhvcHMtQmUtbW9yZS1jYXJlZnVsLWFib3V0LWludGVnZXItb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3YzFkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi8wMDAxLXBpeG9wcy1CZS1tb3JlLWNhcmVmdWwtYWJvdXQtaW50ZWdlci1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDg5IEBACitGcm9tIGZmZWM4NmVkNTAxMGM1YTJiZTE0ZjQ3YjMzYmNmNGVkMzE2OWExOTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTMgSnVsIDIwMTUgMDA6MzM6NDAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGl4b3BzOiBCZSBtb3JlIGNhcmVmdWwgYWJvdXQgaW50ZWdlciBvdmVyZmxvdworCitPdXIgbG9hZGVyIGNvZGUgaXMgc3VwcG9zZWQgdG8gaGFuZGxlIG91dC1vZi1tZW1vcnkgYW5kIG92ZXJmbG93CitzaXR1YXRpb25zIGdyYWNlZnVsbHksIHJlcG9ydGluZyBlcnJvcnMgaW5zdGVhZCBvZiBhYm9ydGluZy4gQnV0CitpZiB5b3UgbG9hZCBhbiBpbWFnZSBhdCBhIHNwZWNpZmljIHNpemUsIHdlIGFsc28gZXhlY3V0ZSBvdXIKK3NjYWxpbmcgY29kZSwgd2hpY2ggd2FzIG5vdCBjYXJlZnVsIGVub3VnaCBhYm91dCBvdmVyZmxvdyBpbiBzb21lCitwbGFjZXMuCisKK1RoaXMgY29tbWl0IG1ha2VzIHRoZSBzY2FsaW5nIGNvZGUgc2lsZW50bHkgcmV0dXJuIGlmIGl0IGZhaWxzIHRvCithbGxvY2F0ZSBmaWx0ZXIgdGFibGVzLiBUaGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkbywgc2luY2UKK2dka19waXhidWZfc2NhbGUoKSBpcyBub3QgdGFraW5nIGEgR0Vycm9yLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMjk3CisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMgfCAgIDIyICsrKysrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jIGIvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKK2luZGV4IDI5YTFjMTQuLmNlNTE3NDUgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYworKysrIGIvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKK0BAIC0xMjcyLDcgKzEyNzIsMTYgQEAgbWFrZV9maWx0ZXJfdGFibGUgKFBpeG9wc0ZpbHRlciAqZmlsdGVyKQorICAgaW50IGlfb2Zmc2V0LCBqX29mZnNldDsKKyAgIGludCBuX3ggPSBmaWx0ZXItPngubjsKKyAgIGludCBuX3kgPSBmaWx0ZXItPnkubjsKKy0gIGludCAqd2VpZ2h0cyA9IGdfbmV3IChpbnQsIFNVQlNBTVBMRSAqIFNVQlNBTVBMRSAqIG5feCAqIG5feSk7CisrICBnc2l6ZSBuX3dlaWdodHM7CisrICBpbnQgKndlaWdodHM7CisrCisrICBuX3dlaWdodHMgPSBTVUJTQU1QTEUgKiBTVUJTQU1QTEUgKiBuX3ggKiBuX3k7CisrICBpZiAobl93ZWlnaHRzIC8gKFNVQlNBTVBMRSAqIFNVQlNBTVBMRSAqIG5feCkgIT0gbl95KQorKyAgICByZXR1cm4gTlVMTDsgLyogb3ZlcmZsb3csIGJhaWwgKi8KKysKKysgIHdlaWdodHMgPSBnX3RyeV9uZXcgKGludCwgbl93ZWlnaHRzKTsKKysgIGlmICghd2VpZ2h0cykKKysgICAgcmV0dXJuIE5VTEw7IC8qIG92ZXJmbG93LCBiYWlsICovCisgCisgICBmb3IgKGlfb2Zmc2V0PTA7IGlfb2Zmc2V0IDwgU1VCU0FNUExFOyBpX29mZnNldCsrKQorICAgICBmb3IgKGpfb2Zmc2V0PTA7IGpfb2Zmc2V0IDwgU1VCU0FNUExFOyBqX29mZnNldCsrKQorQEAgLTEzNDcsOCArMTM1NiwxMSBAQCBwaXhvcHNfcHJvY2VzcyAoZ3VjaGFyICAgICAgICAgKmRlc3RfYnVmLAorICAgaWYgKHhfc3RlcCA9PSAwIHx8IHlfc3RlcCA9PSAwKQorICAgICByZXR1cm47IC8qIG92ZXJmbG93LCBiYWlsIG91dCAqLworIAorLSAgbGluZV9idWZzID0gZ19uZXcgKGd1Y2hhciAqLCBmaWx0ZXItPnkubik7CisgICBmaWx0ZXJfd2VpZ2h0cyA9IG1ha2VfZmlsdGVyX3RhYmxlIChmaWx0ZXIpOworKyAgaWYgKCFmaWx0ZXJfd2VpZ2h0cykKKysgICAgcmV0dXJuOyAvKiBvdmVyZmxvdywgYmFpbCBvdXQgKi8KKysKKysgIGxpbmVfYnVmcyA9IGdfbmV3IChndWNoYXIgKiwgZmlsdGVyLT55Lm4pOworIAorICAgY2hlY2tfc2hpZnQgPSBjaGVja19zaXplID8gZ2V0X2NoZWNrX3NoaWZ0IChjaGVja19zaXplKSA6IDA7CisgCitAQCAtMTQ2OCw3ICsxNDgwLDcgQEAgdGlsZV9tYWtlX3dlaWdodHMgKFBpeG9wc0ZpbHRlckRpbWVuc2lvbiAqZGltLAorIAkJICAgZG91YmxlICAgICAgICAgICAgICAgICBzY2FsZSkKKyB7CisgICBpbnQgbiA9IGNlaWwgKDEgLyBzY2FsZSArIDEpOworLSAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19uZXcgKGRvdWJsZSwgU1VCU0FNUExFICogbik7CisrICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX21hbGxvY19uIChzaXplb2YgKGRvdWJsZSkgKiBTVUJTQU1QTEUsIG4pOworICAgaW50IG9mZnNldDsKKyAgIGludCBpOworIAorQEAgLTE1MjYsNyArMTUzOCw3IEBAIGJpbGluZWFyX21hZ25pZnlfbWFrZV93ZWlnaHRzIChQaXhvcHNGaWx0ZXJEaW1lbnNpb24gKmRpbSwKKyAgICAgfQorIAorICAgZGltLT5uID0gbjsKKy0gIGRpbS0+d2VpZ2h0cyA9IGdfbmV3IChkb3VibGUsIFNVQlNBTVBMRSAqIG4pOworKyAgZGltLT53ZWlnaHRzID0gZ19tYWxsb2NfbiAoc2l6ZW9mIChkb3VibGUpICogU1VCU0FNUExFLCBuKTsKKyAKKyAgIHBpeGVsX3dlaWdodHMgPSBkaW0tPndlaWdodHM7CisgCitAQCAtMTYxNyw3ICsxNjI5LDcgQEAgYmlsaW5lYXJfYm94X21ha2Vfd2VpZ2h0cyAoUGl4b3BzRmlsdGVyRGltZW5zaW9uICpkaW0sCisgCQkJICAgZG91YmxlICAgICAgICAgICAgICAgICBzY2FsZSkKKyB7CisgICBpbnQgbiA9IGNlaWwgKDEvc2NhbGUgKyAzLjApOworLSAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19uZXcgKGRvdWJsZSwgU1VCU0FNUExFICogbik7CisrICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX21hbGxvY19uIChzaXplb2YgKGRvdWJsZSkgKiBTVUJTQU1QTEUsIG4pOworICAgZG91YmxlIHc7CisgICBpbnQgb2Zmc2V0LCBpOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYmRjZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHBhcmFsbGVsIGluc3RhbGwgaXNzdWUgdGhhdCBsaWIgbGlicGl4YnVmbG9hZGVyLXBuZy5sYQorZGVwZW5kcyBvbiBsaWJnZGtfcGl4YnVmLTIuMC5sYSB3aGljaCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGR1cmluZyBpbnN0YS0KK2xsYXRpb24sIGlmIGxpYmdka19waXhidWYtMi4wLmxhIGlzIHJlZ2VuZXJhdGluZyBhbmQgYXQgdGhlIHNhbWUgdGltZQorbGlicGl4YnVmbG9hZGVyLXBuZy5sYSBsaW5rcyBpdCwgdGhlIGVycm9yIHdpbGwgaGFwcGVuLgorCitFcnJvciBtZXNzYWdlIGlzOgorKiB1c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbGdka19waXhidWYtMi4wCisqIGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK01ha2UgYW4gZXhwbGljaXQgZGVwZW5kZW5jeSB0byB0aGUgbGlicyBpbnN0YWxsIHRhcmdldHMgd291bGQgZml4IHRoaXMKK2lzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGdkay1waXhidWYvTWFrZWZpbGUuYW0gfCAgICAxICsKKyBsaWJkZXBzLm1rICAgICAgICAgICAgIHwgICAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZGVwcy5taworCitkaWZmIC0tZ2l0IGEvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbSBiL2dkay1waXhidWYvTWFrZWZpbGUuYW0KK2luZGV4IDk1YTkzYTguLmRiNDRjYWUgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL01ha2VmaWxlLmFtCisrKysgYi9nZGstcGl4YnVmL01ha2VmaWxlLmFtCitAQCAtNzgzLDMgKzc4Myw0IEBAIGxvYWRlcnMuY2FjaGU6CisgZW5kaWYKKyAKKyAtaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2dpdC5taworKy1pbmNsdWRlICQodG9wX3NyY2RpcikvbGliZGVwcy5taworZGlmZiAtLWdpdCBhL2xpYmRlcHMubWsgYi9saWJkZXBzLm1rCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDdhMTBhOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliZGVwcy5taworQEAgLTAsMCArMSwzIEBACisrIyBFeHRlbmRpbmcgZGVwZW5kZW5jaWVzIG9mIGluc3RhbGwtbG9hZGVyTFRMSUJSQVJJRVM6CisrIyBUaGUgJChsaWItTFRMSUJSQVJJRVMpIGlzIG5lZWRlZCBieSByZWxpbmtpbmcgJChsb2FkZXJfTFRMSUJSQVJJRVMpCisraW5zdGFsbC1sb2FkZXJMVExJQlJBUklFUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworLS0gCisxLjcuNi4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9mYXRhbC1sb2FkZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTQ2YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0lmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNwZWNpZmllZCBzZXQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4oKSB0bworbm9uLXplcm8gaWYgdGhlIGxvYWRlciBoYWQgZXJyb3JzIChtaXNzaW5nIGxpYnJhcmllcywgZ2VuZXJhbGx5KS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYyBiL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMKK2luZGV4IGE5Y2EwMTUuLjM5NTY3NGEgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCisrKysgYi9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCitAQCAtMTQ2LDcgKzE0Niw3IEBAIHdyaXRlX2xvYWRlcl9pbmZvIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqcGF0aCwgR2RrUGl4YnVmRm9ybWF0ICppbmZvKQorICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MgKGNvbnRlbnRzLCAnXG4nKTsKKyB9CisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgZ2Jvb2xlYW4KKyBxdWVyeV9tb2R1bGUgKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCisgeworICAgICAgICAgY2hhciAqcGF0aDsKK0BAIC0xNTUsNiArMTU1LDcgQEAgcXVlcnlfbW9kdWxlIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQorICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCpmaWxsX3Z0YWJsZSkgICAoR2RrUGl4YnVmTW9kdWxlICptb2R1bGUpOworICAgICAgICAgZ3BvaW50ZXIgZmlsbF9pbmZvX3B0cjsKKyAgICAgICAgIGdwb2ludGVyIGZpbGxfdnRhYmxlX3B0cjsKKysgICAgICAgIGdib29sZWFuIHJldCA9IFRSVUU7CisgCisgICAgICAgICBpZiAoZ19wYXRoX2lzX2Fic29sdXRlIChmaWxlKSkKKyAgICAgICAgICAgICAgICAgcGF0aCA9IGdfc3RyZHVwIChmaWxlKTsKK0BAIC0yMDQsMTAgKzIwNSwxMyBAQCBxdWVyeV9tb2R1bGUgKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX21vZHVsZV9lcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIGdfZnByaW50ZiAoc3RkZXJyLCAiQ2Fubm90IGxvYWQgbG9hZGVyICVzXG4iLCBwYXRoKTsKKysgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICB9CisgICAgICAgICBpZiAobW9kdWxlKQorICAgICAgICAgICAgICAgICBnX21vZHVsZV9jbG9zZSAobW9kdWxlKTsKKyAgICAgICAgIGdfZnJlZSAocGF0aCk7CisrCisrICAgICAgICByZXR1cm4gcmV0OworIH0KKyAKKyAjaWZkZWYgR19PU19XSU4zMgorQEAgLTI1Nyw2ICsyNjEsNyBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgR1N0cmluZyAqY29udGVudHM7CisgICAgICAgICBnY2hhciAqY2FjaGVfZmlsZSA9IE5VTEw7CisgICAgICAgICBnaW50IGZpcnN0X2ZpbGUgPSAxOworKyAgICAgICAgZ2Jvb2xlYW4gc3VjY2VzcyA9IFRSVUU7CisgCisgI2lmZGVmIEdfT1NfV0lOMzIKKyAgICAgICAgIGdjaGFyICpsaWJkaXI7CitAQCAtMzYwLDcgKzM2NSw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGxlbiA9IHN0cmxlbiAoZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gU09FWFRfTEVOICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY21wIChkZW50ICsgbGVuIC0gU09FWFRfTEVOLCBTT0VYVCkgPT0gMCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBwYXRoLCBkZW50KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBwYXRoLCBkZW50KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIGdfZGlyX2Nsb3NlIChkaXIpOworQEAgLTM3OCw3ICszODQsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgICAgICAgICAgICAgIGluZmlsZW5hbWUgPSBnX2xvY2FsZV90b191dGY4IChpbmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfbW9kdWxlIChjb250ZW50cywgY3dkLCBpbmZpbGVuYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5X21vZHVsZSAoY29udGVudHMsIGN3ZCwgaW5maWxlbmFtZSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgZ19mcmVlIChjd2QpOworICAgICAgICAgfQorQEAgLTM5NCw1ICs0MDEsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBnX3ByaW50ICgiJXNcbiIsIGNvbnRlbnRzLT5zdHIpOworIAorLSAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoZ19nZXRlbnYgKCJHREtfUElYQlVGX0ZBVEFMX0xPQURFUiIpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyA/IDAgOiAxOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjYTYyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnZGstcGl4YnVmLTIuMjIuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGstcGl4YnVmLTIuMjIuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDA5OjA2OjM0LjAwMDAwMDAwMCArMDgwMAorKysrIGdkay1waXhidWYtMi4yMi4xL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDA5OjA3OjMzLjAwMDAwMDAwMCArMDgwMAorQEAgLTI4Nyw3ICsyODcsNyBAQAorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICchPScgeHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNDg0LDcgKzQ4NCw3IEBACisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgcGl4YnVmX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBwaXhidWZfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIHBpeGJ1Zl9kZXBsaWJzX2NoZWNrPWAkcGl4YnVmX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtOTU3LDcgKzk1Nyw3IEBACisgIyBXZSBhcmUgdXNpbmcgZ21vZHVsZS1uby1leHBvcnQgbm93LCBidXQgSSdtIGxlYXZpbmcgdGhlIHN0cmlwcGluZworICMgY29kZSBpbiBwbGFjZSBmb3Igbm93LCBzaW5jZSBwYW5nbyBhbmQgYXRrIHN0aWxsIHJlcXVpcmUgZ21vZHVsZS4KKyBleHBvcnQgU0VECistZXhwb3J0X2R5bmFtaWM9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKytleHBvcnRfZHluYW1pYz1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19QSVhCVUZfREVQX0xJQlM9YGVjaG8gJEdES19QSVhCVUZfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYAorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjkwNzIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBnZGstcGl4YnVmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zMC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2MyZGNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIkltYWdlIGxvYWRpbmcgbGlicmFyeSBmb3IgR1RLKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3RrLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGstcGl4YnVmL2dkay1waXhidWYuaDtlbmRsaW5lPTI2O21kNT03MmIzOWRhN2NiZGRlMmU2NjUzMjlmZWY2MThlMWQ2YiIKKworU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wIgorREVQRU5EU19hcHBlbmRfbGludXhzdGRiYXNlID0gIiB2aXJ0dWFsL2xpYngxMSIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZmF0YWwtbG9hZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGZlZDBkNTQ0MzJmMWI2OWZjNmU2NmU2MDhiZDU1NDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDg1MzgzMDYxNjExM2RiNDQzNTgzNzk5MmMwYWViZDk0Y2JiOTkzYzQ0ZGM1NTA2M2NlZTdmNzJhN2JlZjhiZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcGl4YnVmY2FjaGUgcHRlc3QtZ25vbWUKKworTElCViA9ICIyLjEwLjAiCisKK0dES19QSVhCVUZfTE9BREVSUyA/PSAicG5nIGpwZWciCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0dES19QSVhCVUZfTE9BREVSU30iCitQQUNLQUdFQ09ORklHX2xpbnV4c3RkYmFzZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9ICR7R0RLX1BJWEJVRl9MT0FERVJTfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKKworUEFDS0FHRUNPTkZJR1twbmddID0gIi0td2l0aC1saWJwbmcsLS13aXRob3V0LWxpYnBuZyxsaWJwbmciCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0td2l0aC1saWJqcGVnLC0td2l0aG91dC1saWJqcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0td2l0aC1saWJ0aWZmLC0td2l0aG91dC1saWJ0aWZmLHRpZmYiCitQQUNLQUdFQ09ORklHW2pwZWcyMDAwXSA9ICItLXdpdGgtbGliamFzcGVyLC0td2l0aG91dC1saWJqYXNwZXIsamFzcGVyIgorCisjIFVzZSBHSU8gdG8gc25pZmYgaW1hZ2UgZm9ybWF0IGluc3RlYWQgb2YgdHJ5aW5nIGFsbCBsb2FkZXJzCitQQUNLQUdFQ09ORklHW2dpby1zbmlmZl0gPSAiLS1lbmFibGUtZ2lvLXNuaWZmaW5nLC0tZGlzYWJsZS1naW8tc25pZmZpbmcsLHNoYXJlZC1taW1lLWluZm8iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgxMSwtLXdpdGhvdXQteDExLHZpcnR1YWwvbGlieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1BBQ0tBR0VTID0rICIke1BOfS14bGliIgorCitGSUxFU18ke1BOfS14bGliID0gIiR7bGliZGlyfS8qcGl4YnVmX3hsaWIqJHtTT0xJQlN9IgorQUxMT1dfRU1QVFlfJHtQTn0teGxpYiA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKKwkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKKwkke2xpYmRpcn0vbGliKi5zby4qIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisJJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCisJJHtpbmNsdWRlZGlyfS8qIFwKKwkke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisgICAgICAgICR7bGliZGlyfS8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8uZGVidWcvKiBcCisiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5nZGstcGl4YnVmLWxvYWRlci0uKiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIHBvc3RpbnN0X3BpeGJ1ZmxvYWRlciA9IGQuZ2V0VmFyKCJwb3N0aW5zdF9waXhidWZsb2FkZXIiLCBUcnVlKQorCisgICAgbG9hZGVyc19yb290ID0gZC5leHBhbmQoJyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMnKQorCisgICAgcGFja2FnZXMgPSAnICcuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBsb2FkZXJzX3Jvb3QsICdebGlicGl4YnVmbG9hZGVyLSguKilcLnNvJCcsICdnZGstcGl4YnVmLWxvYWRlci0lcycsICdHREsgcGl4YnVmIGxvYWRlciBmb3IgJXMnKSkKKyAgICBkLnNldFZhcignUElYQlVGX1BBQ0tBR0VTJywgcGFja2FnZXMpCisKKyAgICAjIFRoZSB0ZXN0IHN1aXRlIGV4ZXJjaXNlcyBhbGwgdGhlIGxvYWRlcnMsIHNvIGVuc3VyZSB0aGV5IGFyZSBhbGwKKyAgICAjIGRlcGVuZGVuY2llcyBvZiB0aGUgcHRlc3QgcGFja2FnZS4KKyAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfZ2RrLXBpeGJ1Zi1wdGVzdCIsICIgIiArIHBhY2thZ2VzKQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lICJsaWJwaXhidWZsb2FkZXItKi5sYSIgLWV4ZWMgcm0gXHtcfSBcOworCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZSBcCisJCUdES19QSVhCVUZfTU9EVUxFRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMKK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMTYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjJmMDZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJHTk9NRSBsaWJyYXJ5IGZvciByZWFkaW5nIC5kZXNrdG9wIGZpbGVzIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitCUE4gPSAiZ25vbWUtZGVza3RvcCIKKworaW5oZXJpdCBnbm9tZSBwa2djb25maWcKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImFiNWJmNGNjOTRhZDYzNjM5ZjQyYWRjYzE1NDJiMWYwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiM2E4ZjE5NmI0NmViOWRiZDNiYTJhZmI4ZmI1ZmVmNmE4ODI1NTM5ZDQ0OWEwMjE4MTMxMTI0MmUyMjIyN2JkMCIKKworREVQRU5EUyArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBnY29uZiBsaWJ4cmFuZHIgdmlydHVhbC9saWJ4MTEgZ3RrKzMgZ2xpYi0yLjAgZ25vbWUtZG9jLXV0aWxzIGdub21lLWNvbW1vbiBzdGFydHVwLW5vdGlmaWNhdGlvbiBpc28tY29kZXMiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZGVza3RvcC1kb2NzIgorCitQQUNLQUdFUyA9KyAibGliZ25vbWUtZGVza3RvcDMiCitGSUxFU19saWJnbm9tZS1kZXNrdG9wMyA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9L2xpYmdub21lLWRlc2t0b3AqL3BucC5pZHMgJHtkYXRhZGlyfS9nbm9tZS8qeG1sIgorCitSUkVDT01NRU5EU19saWJnbm9tZS1kZXNrdG9wMyArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2ZjljOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2gKQEAgLTAsMCArMSwxNzggQEAKK0NyZWF0ZSBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmcgY3Vyc29ycworCitUaGlzIGN1dHMgZG93biB0aGUgaW5zdGFsbGVkIHNpemUgYnkgfjExTUIuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworRnJvbSAxZThjMGRkMGEyZGU1ZTFkNWZmNjBmZjExZjEzMWU4ODUxMGM3ZjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xPz1EMD1BMD1EMT04Mz1EMT04MT1EMD1CQj1EMD1CMD1EMD1CRD0yMD1EMD05OD1EMD1CNj1EMD1CMT89CisgPT9VVEYtOD9xPz1EMT04Mz1EMD1CQj1EMD1CMD1EMT04Mj1EMD1CRT1EMD1CMj89IDxscm4xOTg2QGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTYgTWF5IDIwMTUgMDc6NDk6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ3JlYXRlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZyBjdXJzb3JzCisKK0Fsc28gc3VwcG9ydCBjcmVhdGluZyBzeW1saW5rcyBmb3IgVzMyIGN1cnNvcnMgKGluY2x1ZGluZyBMIGFuZCBYTCB2YXJpYW50cykuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkyMjMKKy0tLQorIE1ha2VmaWxlLmFtICB8IDkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGNvbmZpZ3VyZS5hYyB8IDI0ICsrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDExNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBmZWQzOTcyLi40ZDAwMjY4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNiw2ICs2LDE3IEBAIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00ICR7QUNMT0NBTF9GTEFHU30KKyAKKyBjdXJzb3JkaXIgPSAkKGRhdGFkaXIpL2ljb25zL0Fkd2FpdGEvY3Vyc29ycworIGN1cnNvcl9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS9jdXJzb3JzLyopCisraWYgRU5BQkxFX0xfWExfVkFSSUFOVFMKKytjdXJzb3JsZGlyID0gJChkYXRhZGlyKS9pY29ucy9BZHdhaXRhLUxhcmdlL2N1cnNvcnMKKytjdXJzb3JsX0RBVEEgPSAkKHdpbGRjYXJkICQoc3JjZGlyKS9BZHdhaXRhLUxhcmdlL2N1cnNvcnMvKikKKytjdXJzb3J4bGRpciA9ICQoZGF0YWRpcikvaWNvbnMvQWR3YWl0YS1FeHRyYUxhcmdlL2N1cnNvcnMKKytjdXJzb3J4bF9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS1FeHRyYUxhcmdlL2N1cnNvcnMvKikKKytlbHNlCisrY3Vyc29ybGRpciA9CisrY3Vyc29ybF9EQVRBID0KKytjdXJzb3J4bGRpciA9CisrY3Vyc29yeGxfREFUQSA9CisrZW5kaWYKKyAKKyB0aGVtZV9pbl9maWxlcyA9IGluZGV4LnRoZW1lLmluLmluCisgdGhlbWVfREFUQSA9ICQodGhlbWVfaW5fZmlsZXM6LnRoZW1lLmluLmluPS50aGVtZSkKK0BAIC05OSw2ICsxMTAsODggQEAgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAlmaQorIAorIGluc3RhbGwtZGF0YS1ob29rOgorKwljZCAkKERFU1RESVIpJChjdXJzb3JkaXIpICYmIFwKKysJaWYgdGVzdCAieCQoZW5hYmxlX3czMl9jdXJzb3JzKSIgPSAieHllcyI7IFwKKysJdGhlbiBcCisrCQljdXI9LmN1ciAmJiBcCisrCQlhbmk9LmFuaTsgXAorKwllbHNlIFwKKysJCWN1cj0gJiYgXAorKwkJYW5pPSA7IFwKKysJZmk7IFwKKysJaWYgdGVzdCAieCQoZW5hYmxlX2xfeGxfdmFyaWFudHMpIiA9ICJ4eWVzIjsgXAorKwl0aGVuIFwKKysJCXRoZW1lZGlycz0iJChjdXJzb3JkaXIpICQoY3Vyc29ybGRpcikgJChjdXJzb3J4bGRpcikiOyBcCisrCWVsc2UgXAorKwkJdGhlbWVkaXJzPSIkKGN1cnNvcmRpcikiOyBcCisrCWZpOyBcCisrCWZvciBkIGluICQkdGhlbWVkaXJzOyBcCisrCWRvIFwKKysJCWNkICQoREVTVERJUikkJGQgJiYgXAorKwkJZWNobyBDcmVhdGluZyBzeW1saW5rcyBpbiAkKERFU1RESVIpJCRkICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJZHJhcGVkX2JveCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJaWNvbiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJdGFyZ2V0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG90Ym94JCRjdXIJCQlkb3RfYm94X21hc2skJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBYX2N1cnNvciQkY3VyCQlwaXJhdGUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQkwOGU4ZTFjOTVmZTJmYzAxZjk3NmYxZTA2M2EyNGNjZCQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyX3dhdGNoJCRhbmkJCTNlY2I2MTBjMWJmMjQxMGY0NDIwMGY0OGM0MGQzNTk5JCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0ciQkY3VyCQl0b3BfbGVmdF9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHJpZ2h0X3B0ciQkY3VyCQlkcmFmdF9sYXJnZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHJpZ2h0X3B0ciQkY3VyCQlkcmFmdF9zbWFsbCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIG1vdmUkJGN1cgkJCTQ0OThmMGUwYzE5MzdmZmUwMWZkMDZmOTczNjY1ODMwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbW92ZSQkY3VyCQkJOTA4MTIzNzM4M2Q5MGU1MDlhYTAwZjAwMTcwZTk2OGYkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjb3B5JCRjdXIJCQkxMDgxZTM3MjgzZDkwMDAwODAwMDAzYzA3ZjNlZjZiZiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNvcHkkJGN1cgkJCTY0MDdiMGU5NDE4MTc5MDUwMWZkMWUxNjdiNDc0ODcyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWNyb3NzX3JldmVyc2UkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zcyQkY3VyCQkJZGlhbW9uZF9jcm9zcyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQxJCRjdXIJCQlncmFiJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCTlkODAwNzg4ZjFiMDg4MDBhZTgxMDIwMjM4MGEwODIyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCWUyOTI4NWU2MzQwODYzNTI5NDZhMGU3MDkwZDczMTA2JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCWhhbmQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBncmFiYmluZyQkY3VyCQlmbGV1ciQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCWQ5Y2UwYWI2MDU2OThmMzIwNDI3Njc3YjQ1OGFkNjBiJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJNWM2Y2Q5OGIzZjNlYmNiMWY5YzdmMWMyMDQ2MzA0MDgkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBxdWVzdGlvbl9hcnJvdyQkY3VyCQloZWxwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJbGVmdF9wdHJfaGVscCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxpbmskJGN1cgkJCTMwODVhMGUyODU0MzA4OTQ5NDA1MjcwMzJmOGIyNmRmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGluayQkY3VyCQkJNjQwZmIwZTc0MTk1NzkxNTAxZmQxZWQ1N2I0MTQ4N2YkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zc2VkX2NpcmNsZSQkY3VyCQkwM2I2ZTBmY2IzNDk5Mzc0YTg2N2MwNDFmNTIyOThmMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGZkX2RvdWJsZV9hcnJvdyQkY3VyCWZjZjFjM2M3Y2Q0NDkxZDgwMWYxZTFjNzhmMTAwMDAwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYmRfZG91YmxlX2Fycm93JCRjdXIJYzcwODhmMGYzZTZjODA4ODIzNmVmOGUxZTNlNzAwMDAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyIAloX2RvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJMTRmZWY3ODJkMDI0NDA4ODQzOTI5NDJjMTEyMDUyMzAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoX2RvdWJsZV9hcnJvdyQkY3VyCQkwMjgwMDYwMzBlMGU3ZWJmZmM3ZjcwNzBjMDYwMDE0MCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIgCWRvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIgCXZfZG91YmxlX2Fycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cgkyODcwYTA5MDgyYzEwMzA1MDgxMGZmZGZmZmZlMDIwNCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHZfZG91YmxlX2Fycm93JCRjdXIJCTAwMDA4MTYwMDAwMDA2ODEwMDAwNDA4MDgwMDEwMTAyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJZGVmYXVsdCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQkJGN1cgkJCXBvaW50ZXIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQlwcm9ncmVzcyQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIHdhdGNoJCRhbmkJCQl3YWl0JCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWNyb3NzaGFpciQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHh0ZXJtJCRjdXIJCQl0ZXh0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLWxpbmskJGN1cgkJYWxpYXMkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkbmQtY29weSQkY3VyCQljb3B5JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLW5vbmUkJGN1cgkJbm8tZHJvcCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzZWRfY2lyY2xlJCRjdXIJCW5vdC1hbGxvd2VkJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2JfaF9kb3VibGVfYXJyb3ckJGN1cgljb2wtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cglyb3ctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX3NpZGUkJGN1cgkJbi1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICByaWdodF9zaWRlJCRjdXIJCWUtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYm90dG9tX3NpZGUkJGN1cgkJcy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3NpZGUkJGN1cgkJdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB0b3BfcmlnaHRfY29ybmVyJCRjdXIJbmUtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX2xlZnRfY29ybmVyJCRjdXIJbnctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYm90dG9tX3JpZ2h0X2Nvcm5lciQkY3VyCXNlLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJvdHRvbV9sZWZ0X2Nvcm5lciQkY3VyCXN3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJZXctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cglucy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBmZF9kb3VibGVfYXJyb3ckJGN1cgluZXN3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJkX2RvdWJsZV9hcnJvdyQkY3VyCW53c2UtcmVzaXplJCRjdXI7IFwKKysJZG9uZQorIAlpZiB0ZXN0IC16ICIkKERFU1RESVIpIiAmJiB0ZXN0IC1uICIkKEdUS19VUERBVEVfSUNPTl9DQUNIRSkiIDsgdGhlbiBcCisgCQkkKEdUS19VUERBVEVfSUNPTl9DQUNIRSkgLXEgJChERVNURElSKSQodGhlbWVkaXIpOyBcCisgCWZpCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZTRkOGEwLi4zMTJiMjRjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMSw2ICszMSw3IEBAIEFDX1NVQlNUKFtyZW5kZXJfc2l6ZXNdLCBbIjh4OCAxNngxNiAyMngyMiAyNHgyNCAzMngzMiA0OHg0OCAyNTZ4MjU2Il0pCisgQUNfU1VCU1QoW3N5bWJvbGljX3JlbmRlcl9zaXplc10sIFsiIl0pCisgQUNfU1VCU1QoW2luc3RhbGxfc2l6ZXNdLCBbIjh4OCAxNngxNiAyMngyMiAyNHgyNCAzMngzMiA0OHg0OCA2NHg2NCA5Nng5NiAyNTZ4MjU2Il0pCisgCisrQUNfUFJPR19MTl9TCisgQUNfUEFUSF9QUk9HKEdUS19VUERBVEVfSUNPTl9DQUNIRSwgZ3RrLXVwZGF0ZS1pY29uLWNhY2hlKQorIAorICMgbmVlZCBnaXQsIGljb250b29sLCBhbmQgaW5rc2NhcGUgZm9yIHJlbmRlcmluZworQEAgLTU2LDYgKzU3LDI5IEBAIGlmIHRlc3QgIngkR1RLX0VOQ09ERV9TWU1CT0xJQ19TVkciID0gInhmYWxzZSI7IHRoZW4KKyBmaQorIEFDX1NVQlNUKHN5bWJvbGljX2VuY29kZV9zaXplcykKKyAKKytBQ19BUkdfRU5BQkxFKFt3MzItY3Vyc29yc10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXczMi1jdXJzb3JzXSwKKysgICAgW01ha2UgYW5kIGluc3RhbGwgV2luZG93cyBjdXJzb3JzICguY3VyIGFuZCAuYW5pKSBpbnN0ZWFkIG9mIFggY3Vyc29yc10pXSwKKysgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAgIHllcykgZW5hYmxlX3czMl9jdXJzb3JzPXllcyA7OworKyAgICBubykgIGVuYWJsZV93MzJfY3Vyc29ycz1ubyA7OworKyAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXczMi1jdXJzb3JzXSkgOzsKKysgICBlc2FjXSwKKysgIFtlbmFibGVfdzMyX2N1cnNvcnM9bm9dKQorK0FDX1NVQlNUKGVuYWJsZV93MzJfY3Vyc29ycykKKysKKytBQ19BUkdfRU5BQkxFKFtsLXhsLXZhcmlhbnRzXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbC14bC12YXJpYW50c10sCisrICAgIFtBbHNvIG1ha2UgYW5kIGluc3RhbGwgTGFyZ2UgYW5kIEV4dHJhIExhcmdlIFdpbmRvd3MgY3Vyc29yIHZlcnNpb25zXSldLAorKyAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgICAgeWVzKSBlbmFibGVfbF94bF92YXJpYW50cz15ZXMgOzsKKysgICAgbm8pICBlbmFibGVfbF94bF92YXJpYW50cz1ubyA7OworKyAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWwteGwtdmFyaWFudHNdKSA7OworKyAgIGVzYWNdLAorKyAgW2VuYWJsZV9sX3hsX3ZhcmlhbnRzPW5vXSkKKytBQ19TVUJTVChlbmFibGVfbF94bF92YXJpYW50cykKKytBTV9DT05ESVRJT05BTChbRU5BQkxFX0xfWExfVkFSSUFOVFNdLCBbdGVzdCB4JGVuYWJsZV9sX3hsX3ZhcmlhbnRzID0geHllc10pCisrCisgQUNfQ09ORklHX0ZJTEVTKFsKKyBNYWtlZmlsZQorIGFkd2FpdGEtaWNvbi10aGVtZS5wYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xNi4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xNi4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3ZmEwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjE2LjIuMS5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkdUSysgaWNvbiB0aGVtZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2Fkd2FpdGEtaWNvbi10aGVtZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitMSUNFTlNFID0gIkxHUEwtMy4wIHwgQ0MtQlktU0EtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Yzg0Y2FjODhlNDZmYzA3NjQ3ZWEwN2U2YzI0ZWViN2MiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWljb24tY2FjaGUKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWVmODY5NTJjOTQ3YWEyN2ExYTg4OGI3NzM1ZDYwYjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQ1NTZkZmJmNTU1ZDRmYWMxMmQ0ZDVjMTJmNzUxOWRlMGQ0M2VjNDJhMWI2NDk2MTE0MzlhNTBiZjdhY2I5NiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBCdWlsZCB1c2VzIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIHRvIGNyZWF0ZSBwbmcgdmVyc2lvbnM6CisgICAgICAgICMgbm8gbmVlZCB0byBzdG9yZSB0aGUgc3ZncyBhbnltb3JlLgorCXJtIC1mICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMuc3ZnIFwKKwkgICAgICAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvc2NhbGFibGUvKi8qLXN5bWJvbGljLXJ0bC5zdmcKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tY3Vyc29ycyAke1BOfS1zeW1ib2xpYyAke1BOfS1oaXJlcyAke1BOfSIKKworUlJFUExBQ0VTXyR7UE59ID0gImdub21lLWljb24tdGhlbWUiCitSQ09ORkxJQ1RTXyR7UE59ID0gImdub21lLWljb24tdGhlbWUiCitSUFJPVklERVNfJHtQTn0gPSAiZ25vbWUtaWNvbi10aGVtZSIKKworRklMRVNfJHtQTn0tY3Vyc29ycyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9jdXJzb3JzLyIKK0ZJTEVTXyR7UE59LXN5bWJvbGljID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLyovKi8qLnN5bWJvbGljLnBuZyIKK0ZJTEVTXyR7UE59LWhpcmVzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzI1NngyNTYvIgorRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9wa2djb25maWcvYWR3YWl0YS1pY29uLXRoZW1lLnBjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvcmVtb3ZlX3BsdXNfZnJvbV9pbnZhbGlkX2NoYXJhY3RlcnNfbGlzdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhN2NhNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JlbW92ZSAnKycgZnJvbSBpbnZhbGlkIGNoYXJhY3RlcnMgbGlzdAorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBHQ29uZi0zLjIuNS9nY29uZi9nY29uZi1iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBHQ29uZi0zLjIuNS5vcmlnL2djb25mL2djb25mLWJhY2tlbmQuYworKysrIEdDb25mLTMuMi41L2djb25mL2djb25mLWJhY2tlbmQuYworQEAgLTM3LDcgKzM3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgaW52YWxpZF9jaGFyc1tdID0KKyAgIC8qIFNwYWNlIGlzIGNvbW1vbiBpbiB1c2VyIG5hbWVzIChhbmQgdGh1cyBob21lIGRpcmVjdG9yaWVzKSBvbiBXaW5kb3dzICovCisgICAiICIKKyAjZW5kaWYKKy0gICJcdFxyXG5cIiQmPD4sKz0jISgpJ3x7fVtdP35gOyVcXCI7CisrICAiXHRcclxuXCIkJjw+LD0jISgpJ3x7fVtdP35gOyVcXCI7CisgCisgc3RhdGljIGdib29sZWFuCisgZ2NvbmZfYWRkcmVzc192YWxpZCAoY29uc3QgY2hhciAgKmFkZHJlc3MsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi91bmFibGUtY29ubmVjdC1kYnVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzU4YTRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaApAQCAtMCwwICsxLDk1IEBACitGaXhlcyBlcnJvcnMgc3VjaCBhcyB0aGlzIGluIHRoZSByb290ZnMgZ2VuZXJhdGlvbjoKKworKGdjb25mdG9vbC0yLnJlYWw6MTAwOTUpOiBHQ29uZi1XQVJOSU5HICoqOiBDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIEQtQlVTIGRhZW1vbjoKK1VzaW5nIFgxMSBmb3IgZGJ1cy1kYWVtb24gYXV0b2xhdW5jaCB3YXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCBzZXQgeW91ciBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MgaW5zdGVhZAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGIwODk1ZTE5OThlYmM4M2FiMDMwZWMwZjE3YzA2ODU0MzlmNWI0MDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYXkgU3Ryb2RlIDxyc3Ryb2RlQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE1IEFwciAyMDEzIDA5OjU3OjM0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGRidXM6IERvbid0IHNwZXcgdG8gY29uc29sZSB3aGVuIHVuYWJsZSB0byBjb25uZWN0IHRvIGRidXMKKyBkYWVtb24KKworSW5zdGVhZCBwYXNzIHRoZSBlcnJvciB1cCBmb3IgdGhlIGNhbGxlciB0byBkZWNpZGUgd2hhdCB0byBkby4KKworVGhpcyBwcmV2ZW50IHVudHJhcHBhYmxlIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSBzaG93aW5nIHVwIGF0IHRoZQorY29uc29sZSBpZiBnY29uZnRvb2wgLS1tYWtlZmlsZS1pbnN0YWxsLXJ1bGUgaXMgY2FsbGVkLgorLS0tCisgZ2NvbmYvZ2NvbmYtZGJ1cy5jIHwgICAyNCArKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY29uZi9nY29uZi1kYnVzLmMgYi9nY29uZi9nY29uZi1kYnVzLmMKK2luZGV4IDU2MTBmY2YuLjA0OGUzZWEgMTAwNjQ0CistLS0gYS9nY29uZi9nY29uZi1kYnVzLmMKKysrKyBiL2djb25mL2djb25mLWRidXMuYworQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgR0hhc2hUYWJsZSAgICAgKmVuZ2luZXNfYnlfZGIgPSBOVUxMOworIHN0YXRpYyBHSGFzaFRhYmxlICAgICAqZW5naW5lc19ieV9hZGRyZXNzID0gTlVMTDsKKyBzdGF0aWMgZ2Jvb2xlYW4gICAgICAgIGRidXNfZGlzY29ubmVjdGVkID0gRkFMU0U7CisgCistc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfZGJ1c19jb25uZWN0aW9uICAgICAgKHZvaWQpOworK3N0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAgICAgIChHRXJyb3IgKiplcnJvcik7Cisgc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfc2VydmljZSAgICAgICAgICAgICAgKGdib29sZWFuICAgICAgICAgIHN0YXJ0X2lmX25vdF9mb3VuZCwKKyAJCQkJCQkgR0Vycm9yICAgICAgICAgICoqZXJyKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gICAgIGVuc3VyZV9kYXRhYmFzZSAgICAgICAgICAgICAoR0NvbmZFbmdpbmUgICAgICAqY29uZiwKK0BAIC0zODMsNyArMzgzLDcgQEAgZ2NvbmZfZW5naW5lX2RldGFjaCAoR0NvbmZFbmdpbmUgKmNvbmYpCisgfQorIAorIHN0YXRpYyBnYm9vbGVhbgorLWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisrZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoR0Vycm9yICoqZXJyKQorIHsKKyAgIERCdXNFcnJvciBlcnJvcjsKKyAKK0BAIC0zOTIsNyArMzkyLDkgQEAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAodm9pZCkKKyAKKyAgIGlmIChkYnVzX2Rpc2Nvbm5lY3RlZCkKKyAgICAgeworLSAgICAgIGdfd2FybmluZyAoIlRoZSBjb25uZWN0aW9uIHRvIERCdXMgd2FzIGJyb2tlbi4gQ2FuJ3QgcmVpbml0aWFsaXplIGl0LiIpOworKyAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdDT05GX0VSUk9SLAorKyAgICAgICAgICAgICAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCisrICAgICAgICAgICAgICAgICAgICJUaGUgY29ubmVjdGlvbiB0byBEQnVzIHdhcyBicm9rZW4uIENhbid0IHJlaW5pdGlhbGl6ZSBpdC4iKTsKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKyAKK0BAIC00MDIsNyArNDA0LDEwIEBAIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisgICAKKyAgIGlmICghZ2xvYmFsX2Nvbm4pIAorICAgICB7CistICAgICAgZ193YXJuaW5nICgiQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBELUJVUyBkYWVtb246XG4lcyIsIGVycm9yLm1lc3NhZ2UpOworKyAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdDT05GX0VSUk9SLAorKyAgICAgICAgICAgICAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCisrICAgICAgICAgICAgICAgICAgICJDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIEQtQlVTIGRhZW1vbjpcbiVzIiwKKysgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CisgICAgICAgCisgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAgICAgIHJldHVybiBGQUxTRTsKK0BAIC00MzEsMTMgKzQzNiw4IEBAIGVuc3VyZV9zZXJ2aWNlIChnYm9vbGVhbiAgc3RhcnRfaWZfbm90X2ZvdW5kLAorIAorICAgaWYgKGdsb2JhbF9jb25uID09IE5VTEwpCisgICAgIHsKKy0gICAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKCkpCistCXsKKy0JICBnX3NldF9lcnJvciAoZXJyLCBHQ09ORl9FUlJPUiwKKy0JCSAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCistCQkgICAgICAgXygiTm8gRC1CVVMgZGFlbW9uIHJ1bm5pbmdcbiIpKTsKKy0JICByZXR1cm4gRkFMU0U7CistCX0KKysgICAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKGVycikpCisrICAgICAgICByZXR1cm4gRkFMU0U7CisgCisgICAgICAgZ19hc3NlcnQgKGdsb2JhbF9jb25uICE9IE5VTEwpOworICAgICB9CitAQCAtMjUxMiw3ICsyNTEyLDcgQEAgZ2NvbmZfcGluZ19kYWVtb24gKHZvaWQpCisgeworICAgaWYgKGdsb2JhbF9jb25uID09IE5VTEwpCisgICB7CistICAgIGlmICghZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoKSkKKysgICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uIChOVUxMKSkKKyAgICAgeworICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mXzMuMi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmRhZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIkdOT01FIGNvbmZpZ3VyYXRpb24gc3lzdGVtIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSIKKworREVQRU5EUyA9ICJnbGliLTIuMCBkYnVzIGRidXMtZ2xpYiBsaWJ4bWwyIGludGx0b29sLW5hdGl2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImdsaWItMi4wLW5hdGl2ZSBkYnVzLW5hdGl2ZSBkYnVzLWdsaWItbmF0aXZlIGxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbm9tZS1jb21tb24tbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViLW5hdGl2ZSIKKworCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIGdldHRleHQKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vR0NvbmYvJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS9HQ29uZi0ke1BWfS50YXIueHo7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjJiMTY5OTZkMGU0YjExMjg1NmVlNWM1OTEzMGU4MjJjIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTkxMmI5MTgwM2FiMDlhNWVlZDM0ZDM2NGJmMDlmZTNhMmE5Yzk2NzUxZmRlMDNhNGUwY2ZhNTFhMDRkNzg0YyIKKworUyA9ICIke1dPUktESVJ9L0dDb25mLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zdGF0aWMgLS1lbmFibGUtZGVidWc9eWVzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtb3JiaXQgLS13aXRoLW9wZW5sZGFwPW5vIC0tZGlzYWJsZS1ndGsiCisKKyMgRGlzYWJsZSBQb2xpY3lLaXQgYnkgZGVmYXVsdAorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKyMgV2UgcmVhbGx5IGRvbid0IHdhbnQgUG9saWN5S2l0IGZvciBuYXRpdmUgb3IgdWNsaWJjCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFQ09ORklHX2xpYmMtdWNsaWJjID0gIiIKKworUEFDS0FHRUNPTkZJR1twb2xpY3lraXRdID0gIi0tZW5hYmxlLWRlZmF1bHRzLXNlcnZpY2UsLS1kaXNhYmxlLWRlZmF1bHRzLXNlcnZpY2UscG9sa2l0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHRoaXMgZGlyZWN0b3J5IG5lZWQgdG8gYmUgY3JlYXRlZCB0byBhdm9pZCBhbiBFcnJvciAyNTYgYXQgZ2RtIGxhdW5jaAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLnN5c3RlbQorCisJIyB0aGlzIHN0dWZmIGlzIHVudXNhYmxlCisJcm0gLWYgJHtEfSR7bGliZGlyfS9HQ29uZi8qLyouKmEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2dpby8qLyouKmEKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2djb25mdG9vbC0yIFwKKwkJR0NPTkZfQkFDS0VORF9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L0dDb25mLzIKK30KKworIyBkaXNhYmxlIGRidXMteDExIHdoZW4geDExIGlzbid0IGluIERJU1RST19GRUFUVVJFUworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2RidXMteDExJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vR0NvbmYvKiBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby8qLyouc28gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0KiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyovKi8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vc2dtbC9nY29uZi9nY29uZi0xLjAuZHRkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWNvbW1vbl8zLjE0LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjcwMzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIG1hY3JvcyBmb3IgYnVpbGRpbmcgR05PTUUgYXBwbGljYXRpb25zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NFQ1RJT04gPSAieDExL2dub21lIgoraW5oZXJpdCBnbm9tZWJhc2UgYWxsYXJjaAorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJiYTU4YzYxZDBkODFiN2MzZmY4NDUyYzYyMDUxM2E5ZCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjRjMDAyNDJmNzgxYmI0NDEyODlmNDlkZDgwZWQxZDg5NWQ4NGRlMGM5NGJmYzJjNjgxOGExMDRjOWUzOTI2MmMiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiIgorREVQRU5EUyA9ICIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCitGSUxFU18ke1BOfS1kZXYgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODc1MDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiQSBjb2xsZWN0aW9uIG9mIGRvY3VtZW50YXRpb24gdXRpbGl0aWVzIGZvciB0aGUgR25vbWUgcHJvamVjdCIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTk9NRSBEb2N1bWVudGF0aW9uIEJ1aWxkIFV0aWxpdGllcyAoZ25vbWUtZG9jLSBcCit1dGlscykgd2VyZSBjcmVhdGVkIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRvIFwKK2luY2x1ZGUgYW5kIGNyZWF0ZSBkb2N1bWVudGF0aW9uIGluIHRoZWlyIHJlbGVhc2VzLiBUaGV5IGluY2x1ZGUgdGhlIFwKK3htbDJwbyB0b29sIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byB0cmFuc2xhdGUgYW5kIGtlZXAgdXAgdG8gZGF0ZSBcCit0cmFuc2xhdGlvbnMgb2YgZG9jdW1lbnRhdGlvbi4iCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitERVBFTkRTID0gImxpYnhtbDIgbGlieHNsdCBsaWJ4c2x0LW5hdGl2ZSBnbm9tZS1kb2MtdXRpbHMtbmF0aXZlIGdsaWItMi4wIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgbGlieHNsdC1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZSBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjcm9sbGtlZXBlciIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgICR7RH0ke2RhdGFkaXJ9L3htbC9nbm9tZS94c2x0LworCWNwIC1wUHIgJHtTfS94c2x0LyogJHtEfSR7ZGF0YWRpcn0veG1sL2dub21lL3hzbHQvCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke2JpbmRpcn0veG1sMnBvCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbCogJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKKworUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNmQ2OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorSW4gY3Jvc3MgZW52aXJvbm1lbnQgd2UgaGF2ZSB0byBwcmVwZW5kIHRoZSBzeXNyb290IHRvIHRoZSBwYXRoIGZvdW5kIGJ5Citwa2djb25maWcgc2luY2UgdGhlIHBhdGggcmV0dXJuZWQgZnJvbSBwa2djb25maWcgZG9lcyBub3QgaGF2ZSBzeXNyb290IHByZWZpeGVkCitpdCBlbmRzIHVwIHVzaW5nIHRoZSBmaWxlcyBmcm9tIGhvc3Qgc3lzdGVtLiBOb3cgdXN1YWxseSBwZW9wbGUgaGF2ZSBnbm9tZSBpbnN0YWxsZWQKK3NvIHRoZSBidWlsZCBzdWNjZWVkcyBidXQgaWYgeW91IGRvbnQgaGF2ZSBnbm9tZSBpbnN0YWxsZWQgb24gYnVpbGQgaG9zdCB0aGVuCitpdCB3b250IGZpbmQgdGhlIGZpbGVzIG9uIGhvc3Qgc3lzdGVtIGFuZCBwYWNrYWdlcyB1c2luZyBnbm9tZS1kb2MtdXRpbHMgd29udAorY29tcGlsZS4KKworVGhpcyBzaG91bGQgd29yayBvayB3aXRoIG5vbiBzeXNyb290ZWQgYnVpbGRzIHRvbyBzaW5jZSBpbiB0aG9zZSBjYXNlcyBQS0dfQ09ORklHX1NZU1JPT1RfRElSCit3aWxsIGJlIGVtcHR5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCitAQCAtMTMzLDExICsxMzMsMTEgQEAgX0RPQ19BQlNfU1JDRElSID0gQGFic19zcmNkaXJACisgX3htbDJwbyA/PSBgd2hpY2ggeG1sMnBvYAorIF94bWwycG9fbW9kZSA9ICQoaWYgJChET0NfSUQpLG1hbGxhcmQsZG9jYm9vaykKKyAKKy1fZGIyaHRtbCA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAorLV9kYjJvbWYgID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKKy1fY2h1bmtzICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jaHVua3MueHNsCistX2NyZWRpdHMgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKKy1faWRzID89ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCisrX2RiMmh0bWwgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyaHRtbCBnbm9tZS1kb2MtdXRpbHNgCisrX2RiMm9tZiAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKKytfY2h1bmtzICA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAorK19jcmVkaXRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jcmVkaXRzLnhzbAorK19pZHMgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCisgCisgaWYgRU5BQkxFX1NLCisgX0VOQUJMRV9TSyA9IHRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMTk2YzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1dlIGNhbid0IHVzZSAjIS9mdWxsL3BhdGgvdG8vcHl0aG9uIC11IGFzIHRoaXMgY2FuIGJlIGxvbmdlciB0aGFuIHNoZWJhbmcKK2FsbG93cyBmb3IuICBJbiBvcmRlciB0byBiZSBhcHByb3ByYWl0ZSBmb3IgdXBzdHJlYW0gbW9yZSB3b3JrIHdvdWxkIGJlCituZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1haW4geG1sMnBvIGNvZGUgZG9lc24ndCByZWx5IG9uIHB5dGhvbgorYmVpbmcgaW52b2tlZCB3aXRoIC11IChmb3JjZSBzdGRpbi9vdXQvZXJyIHRvIGJlIHVzZWQgcmF3KS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtXb3VsZCBicmVhayBiZWhhdmlvciBvbiBXaW5kb3dzXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KK0BAIC03LDcgKzcsNiBAQCBDTEVBTkZJTEVTID0geG1sMnBvCisgCisgeG1sMnBvOiB4bWwycG8ucHkuaW4KKyAJJChBTV9WX0dFTilzZWQgLWUgInMvXlZFUlNJT04gPS4qL1ZFUlNJT04gPSBcIkBWRVJTSU9OQFwiLyIgXAorLQkgICAgLWUgInMrXiMhLipweXRob24uKisjISQoUFlUSE9OKSsiIFwKKyAJICA8ICQoc3JjZGlyKS94bWwycG8ucHkuaW4gPiB4bWwycG8KKyAJJChBTV9WX2F0KWNobW9kICt4IHhtbDJwbworIAorSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdQorKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorICMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KKyAjIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgMjAwNiBEYW5pbG8gxaBlZ2FuIDxkYW5pbG9AZ25vbWUub3JnPi4KKyAjIENvcHlyaWdodCAoYykgMjAwOSBDbGF1ZGUgUGFyb3ogPGNsYXVkZUAyeGxpYnJlLm5ldD4uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0NjQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy94c2x0cHJvY19ub25ldC5wYXRjaApAQCAtMCwwICsxLDk1IEBACitUaGlzIGFkZHMgdGhlIC1ub25ldCBvcHRpb24gdG8geHNsdHByb2MgaW52b2NhdGlvbnMsIHdoaWNoIGZpeGVzCitjb21waWxlIGVycm9ycyB3aGVuIGJ1aWxkaW5nIHRoZSBnbm9tZS1kb2MtdXRpbHMgZG9jcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvZG9jL3hzbHQvTWFrZWZpbGUuYW0KKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQorQEAgLTIxLDE0ICsyMSwxNCBAQCBhbGw6ICQoeHNsZG9jX2RvY3MpICQoeHNsZG9jX3htbHMpCisgCisgJCh4c2xkb2NfZG9jcyk6ICQoeHNsZG9jX3hzbHMpIHhzbGRvYy5hd2sgeHNsZG9jLWZpbGwueHNsCisgCSQoQU1fVl9HRU4pJChHRFVfQVdLKSAtZiAiJChzcmNkaXIpL3hzbGRvYy5hd2siICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCistCXwgeHNsdHByb2MgLW8gIiRAIiBcCisrCXwgeHNsdHByb2MgLW5vbmV0IC1vICIkQCIgXAorIAktLXN0cmluZ3BhcmFtIGJhc2VuYW1lICIkKGJhc2VuYW1lICQobm90ZGlyICRAKSkiIFwKKyAJLS1zdHJpbmdwYXJhbSB4c2xfZmlsZSAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAorIAkiJChzcmNkaXIpL3hzbGRvYy1maWxsLnhzbCIgLQorIAorICQoeHNsZG9jX3htbHMpOiB4c2xkb2MtZG9jYm9vay54c2wKKyAkKHhzbGRvY194bWxzKTogQy8lLnhtbCA6IEMvJS54c2xkb2MKKy0JJChBTV9WX0dFTil4c2x0cHJvYyAtbyAiJEAiIFwKKysJJChBTV9WX0dFTil4c2x0cHJvYyAtbm9uZXQgLW8gIiRAIiBcCisgCS0tc3RyaW5ncGFyYW0gYmFzZW5hbWUgIiQoYmFzZW5hbWUgJChub3RkaXIgJEApKSIgXAorIAktLXN0cmluZ3BhcmFtIHhzbF9maWxlICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCisgCSIkKHNyY2RpcikveHNsZG9jLWRvY2Jvb2sueHNsIiAiJDwiCitAQCAtNjIsNyArNjIsNyBAQCBnbm9tZS1kb2MteHNsdC1jaGVjay1pbmNsdWRlczoKKyBnbm9tZS1kb2MteHNsdC1jaGVjay14c2xkb2M6ICQoeHNsZG9jX2RvY3MpCisgCUBlY2hvICJSdW5uaW5nIHhzbGRvYyBjaGVja3MiOworIAlAKGVjaG8gIjx4c2xkb2M+IjsgY2F0ICQoeHNsZG9jX2RvY3MpOyBlY2hvICI8L3hzbGRvYz4iKSBcCistCXwgeHNsdHByb2MgIiQoc3JjZGlyKS94c2xkb2MtY2hlY2sueHNsIiAtIDE+IC9kZXYvbnVsbAorKwl8IHhzbHRwcm9jIC1ub25ldCAiJChzcmNkaXIpL3hzbGRvYy1jaGVjay54c2wiIC0gMT4gL2Rldi9udWxsCisgCisgLlBIT05ZOiBjbGVhbi14c2xkb2MKKyBjbGVhbi1sb2NhbDogY2xlYW5feHNsZG9jCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKK0BAIC0zNyw3ICszNyw3IEBAICQoRE9DX0hfRklMRSk6ICQoRE9DX0hfRE9DUyk7CisgCWxpc3Q9JyQoRE9DX0hfRE9DUyknOyBmb3IgZG9jIGluICQkbGlzdDsgZG8gXAorIAkgIHhtbHBhdGg9ImBlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2A6JChzcmNkaXIpL2BlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2AiOyBcCisgCSAgaWYgISB0ZXN0IC1mICIkJGRvYyI7IHRoZW4gZG9jPSIkKHNyY2RpcikvJCRkb2MiOyBmaTsgXAorLQkgIHhzbHRwcm9jIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9jcmVkaXRzKSAkJGRvYzsgXAorKwkgIHhzbHRwcm9jIC1ub25ldCAtLXBhdGggIiQkeG1scGF0aCIgJChfY3JlZGl0cykgJCRkb2M7IFwKKyAJZG9uZSB8IHNvcnQgfCB1bmlxIFwKKyAJICB8IGF3ayAnQkVHSU57cz0iIn17bj1zcGxpdCgkJDAsdywiPCIpO2lmKHMhPSIiJiZzIT1zdWJzdHIod1sxXSwxLGxlbmd0aCh3WzFdKS0xKSl7cHJpbnQgc307aWYobj4xKXtwcmludCAkJDA7cz0iIn1lbHNle3M9JCQwfX07RU5Ee2lmKHMhPSIiKXtwcmludCBzfX0nIFwKKyAJICB8IHNlZCAtZSAncy9cXC9cXFxcLycgLWUgJ3MvIi9cXCIvJyAtZSAncy9cKC4qXCkvXHQiXDEiLC8nID4+ICRALnRtcAorQEAgLTUwLDcgKzUwLDcgQEAgJChET0NfSF9GSUxFKTogJChET0NfSF9ET0NTKTsKKyAJICBkb2NpZD1gZWNobyAiJCRkb2MiIHwgc2VkIC1lICdzLy4qXC9cKFteL10qXClcLnhtbC9cMS8nIFwKKyAJICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYDsgXAorIAkgIGVjaG8gJCR4bWxwYXRoOyBcCistCSAgaWRzPWB4c2x0cHJvYyAtLXhpbmNsdWRlIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9pZHMpICQkZG9jYDsgXAorKwkgIGlkcz1geHNsdHByb2MgLW5vbmV0IC0teGluY2x1ZGUgLS1wYXRoICIkJHhtbHBhdGgiICQoX2lkcykgJCRkb2NgOyBcCisgCSAgZm9yIGlkIGluICQkaWRzOyBkbyBcCisgCSAgICBlY2hvICcjZGVmaW5lIEhFTFBfJ2BlY2hvICQkZG9jaWRgJ18nYGVjaG8gJCRpZCBcCisgCSAgICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYCcgIickJGlkJyInID4+ICRALnRtcDsgXAorQEAgLTE5Nyw3ICsxOTcsNyBAQCAkKF9ET0NfT01GX0RCKSA6ICQoRE9DX01PRFVMRSktJS5vbWYgOiAlCisgCSAgZWNobyAiVGhlIGZpbGUgJyQoX3NrY29udGVudHNsaXN0KScgZG9lcyBub3QgZXhpc3QuIiA+JjI7CQlcCisgCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKKyAJICBleGl0IDE7IH0KKy0JJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCdkb2Nib29rJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKysJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwnZG9jYm9vaycpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisgCisgIyMgQCBfRE9DX09NRl9IVE1MCisgIyMgVGhlIE9NRiBmaWxlcyBmb3IgSFRNTCBvdXRwdXQKK0BAIC0yMTIsNyArMjEyLDcgQEAgaWYgRU5BQkxFX1NLCisgCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKKyAJICBleGl0IDE7IH0KKyBlbmRpZgorLQkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ3hodG1sJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKysJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwneGh0bWwnKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQorIAorICMjIEAgX0RPQ19PTUZfQUxMCisgIyMgQWxsIE9NRiBvdXRwdXQgZmlsZXMgdG8gYmUgYnVpbHQKK0BAIC0yNjcsNyArMjY3LDcgQEAgX0RPQ19DX0ZJR1VSRVMgPSAkKGlmICQoRE9DX0ZJR1VSRVMpLAorICMjIEFsbCBIVE1MIGRvY3VtZW50YXRpb24gaW4gdGhlIEMgbG9jYWxlCisgIyBGSVhNRTogcHJvYmFibHkgaGF2ZSB0byBzaGVsbCBlc2NhcGUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG5hbWVzCisgX0RPQ19DX0hUTUwgPSAkKGZvcmVhY2ggZiwJCQkJCQlcCistCSQoc2hlbGwgeHNsdHByb2MgLS14aW5jbHVkZSAJCQkJCVwKKysJJChzaGVsbCB4c2x0cHJvYyAtbm9uZXQgLS14aW5jbHVkZSAJCQkJCVwKKyAJICAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIgkJXAorIAkgICQoX2NodW5rcykgIkMvJChET0NfTU9EVUxFKS54bWwiKSwJCQkJXAorIAlDLyQoZikueGh0bWwpCitAQCAtMzkzLDcgKzM5Myw3IEBAIF9ET0NfSFRNTF9BTEwgPSAkKGlmICQoZmlsdGVyIGh0bWwgSFRNTCwKKyBfRE9DX0hUTUxfVE9QUyA9ICQoZm9yZWFjaCBsYyxDICQoX0RPQ19SRUFMX0xJTkdVQVMpLCQobGMpLyQoRE9DX01PRFVMRSkueGh0bWwpCisgCisgJChfRE9DX0hUTUxfVE9QUyk6ICQoX0RPQ19DX0RPQ1MpICQoX0RPQ19MQ19ET0NTKQorLQkkKEdEVV9WX0RCMkhUTSl4c2x0cHJvYyAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCisrCSQoR0RVX1ZfREIySFRNKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCisgCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzXzAuMjAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjYzAwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ25vbWUtZG9jLXV0aWxzLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorCitTUkNfVVJJICs9ICJmaWxlOi8veHNsdHByb2Nfbm9uZXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjNjNjRhZDdiYWNkNjE3YjA0OTk5ZTRhMTY4YWZhYWM1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiY2IwNjM5ZmZhOTU1MGI2ZGRmM2I2MmYzYjFhZGQ5MmZiOTJhYjQ2OTBkMzUxZjIzNTNjZmZlNjY4YmU4YzRhNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YS9wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MDM0MjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdub21lLW1pbWUtZGF0YS0yLjE4LjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1taW1lLWRhdGEtMi4xOC4wLm9yaWcvTWFrZWZpbGUuYW0JMjAwOS0wNi0xMSAxNzoyNzo0OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbm9tZS1taW1lLWRhdGEtMi4xOC4wL01ha2VmaWxlLmFtCTIwMDktMDYtMTEgMTc6Mjc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMSw2ICsxLDYgQEAKKyBTVUJESVJTID0gbWFuIHBvCisgCistcGtnY29uZmlnZGlyID0gJChkYXRhZGlyKS9wa2djb25maWcKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBnbm9tZS1taW1lLWRhdGEtMi4wLnBjCisgCisgTlVMTD0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YV8yLjE4LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMWViNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQmFzZSBNSU1FIGFuZCBBcHBsaWNhdGlvbiBkYXRhYmFzZSBmb3IgR05PTUUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NoZWNrLW1pbWUucGw7ZW5kbGluZT0yNjttZDU9YTk1YjYzYzkyYzMzZDRjYTFhZjYxYTMxNTg4OGY0NTAiCisKK2luaGVyaXQgZ25vbWViYXNlIG1pbWUKK1BSID0gInI0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1NDE4NTgxODhmODAwOTBkMTJhMzNiNWE3YzM0ZDQyYyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjM3MTk2YjViMzcwODViYmNkNDVjMzM4YzM2ZTI2ODk4ZmUzNWRkNTk3NTI5NWY2OWY0ODAyOGIxZTg0MzZmZDciCitHTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCisKK0RFUEVORFMgKz0gInNoYXJlZC1taW1lLWluZm8gaW50bHRvb2wtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAic2hhcmVkLW1pbWUtaW5mbyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsL2xpYmFydF9sZ3BsLTIuMy4yMS1jcm9zc2NvbXBpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNjFmNTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK1Rha2VuIGZyb20gcG9ydGFnZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Zyb20gZTE0NDNjOTQ1YTRjZjY3MDk2ZDhjMjc3MjFhYWRkNzM2ODM4MmIzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEdpbGxlcyBEYXJ0aWd1ZWxvbmd1ZSA8ZXZhQGdlbnRvby5vcmc+CitEYXRlOiBUdWUsIDYgQXByIDIwMTAgMTU6MjI6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGdlbnRvbzogdXNlIElTTyB0eXBlcyBmb3IgZml4ZWQgdHlwZSBzaXplCisKKy0tLQorIE1ha2VmaWxlLmFtICB8ICAgMTEgKystLS0tLS0tLS0KKyBhcnRfY29uZmlnLmggfCAgICA1ICsrKysrCisgY29uZmlndXJlLmluIHwgICAxMCAtLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcnRfY29uZmlnLmgKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDk1OTUyZGEuLjZhYTJmZTMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yLDEzICsyLDYgQEAgY2hlY2tfUFJPR1JBTVMgPSB0ZXN0YXJ0IHRlc3R1dGEKKyAKKyBiaW5fU0NSSVBUUyA9IFwKKyAJbGliYXJ0Mi1jb25maWcKKy0JCistbm9pbnN0X1NDUklQVFMgPSBnZW5fYXJ0X2NvbmZpZy5zaAorLQorLUJVSUxUX1NPVVJDRVMgPSBhcnRfY29uZmlnLmgKKy0KKy1hcnRfY29uZmlnLmg6CistCS4vZ2VuX2FydF9jb25maWcuc2ggPiBhcnRfY29uZmlnLmgKKyAKKyBFWFRSQV9ESVNUID0gCQkJXAorIAlsaWJhcnQuZGVmCQlcCitAQCAtMTczLDUgKzE2Niw1IEBAIGluc3RhbGwtZGF0YS1sb2NhbDogaW5zdGFsbC1tcy1saWIgaW5zdGFsbC1saWJ0b29sLWltcG9ydC1saWIKKyAKKyB1bmluc3RhbGwtbG9jYWw6IHVuaW5zdGFsbC1tcy1saWIgdW5pbnN0YWxsLWxpYnRvb2wtaW1wb3J0LWxpYgorIAorLUNMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpICQoYmluX1NDUklQVFMpCistRElTVENMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpICQoYmluX1NDUklQVFMpCisrQ0xFQU5GSUxFUyA9ICQoYmluX1NDUklQVFMpCisrRElTVENMRUFORklMRVMgPSAkKGJpbl9TQ1JJUFRTKQorZGlmZiAtLWdpdCBhL2FydF9jb25maWcuaCBiL2FydF9jb25maWcuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU5ODVmMWYKKy0tLSBhL2FydF9jb25maWcuaAorKysrIGIvYXJ0X2NvbmZpZy5oCitAQCAtMCwwICsxLDUgQEAKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrdHlwZWRlZiB1aW50OF90IGFydF91ODsKKyt0eXBlZGVmIHVpbnQxNl90IGFydF91MTY7CisrdHlwZWRlZiB1aW50MzJfdCBhcnRfdTMyOworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZTQ4MDRmNy4uZGRjYWM0ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtOTIsMTUgKzkyLDYgQEAgQUNfRlVOQ19BTExPQ0EKKyAKKyBBQ19DX0JJR0VORElBTgorIAorLUFDX0NIRUNLX1NJWkVPRihjaGFyKQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfQ0hBUiwgJGFjX2N2X3NpemVvZl9jaGFyKQorLUFDX0NIRUNLX1NJWkVPRihzaG9ydCkKKy1BQ19TVUJTVChBUlRfU0laRU9GX1NIT1JULCAkYWNfY3Zfc2l6ZW9mX3Nob3J0KQorLUFDX0NIRUNLX1NJWkVPRihpbnQpCistQUNfU1VCU1QoQVJUX1NJWkVPRl9JTlQsICRhY19jdl9zaXplb2ZfaW50KQorLUFDX0NIRUNLX1NJWkVPRihsb25nKQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfTE9ORywgJGFjX2N2X3NpemVvZl9sb25nKQorLQorIEFDX0NPTkZJR19GSUxFUyhbCisgbGliYXJ0LWZlYXR1cmVzLmgKKyBNYWtlZmlsZQorQEAgLTEwOSw2ICsxMDAsNSBAQCBsaWJhcnQtMi4wLXVuaW5zdGFsbGVkLnBjCisgbGliYXJ0LXppcF0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFtsaWJhcnQtY29uZmlnXSxbY2htb2QgK3ggbGliYXJ0LWNvbmZpZ10pCistQUNfQ09ORklHX0ZJTEVTKFtnZW5fYXJ0X2NvbmZpZy5zaF0sW2NobW9kICt4IGdlbl9hcnRfY29uZmlnLnNoXSkKKyAKKyBBQ19PVVRQVVQKKy0tIAorMS43LjAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbF8yLjMuMjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbF8yLjMuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1ODFiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsXzIuMy4yMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkxpYnJhcnkgb2YgZnVuY3Rpb25zIGZvciAyRCBncmFwaGljcyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKK1BSID0gInIyIgorCisjIGNhbid0IHVzZSBnbm9tZS5vZWNsYXNzIGR1ZSB0byBfIGluIGZpbGVuYW1lCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9saWJhcnRfbGdwbC8yLjMvbGliYXJ0X2xncGwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwODU1OWZmM2M2N2ZkOTVkNTdiMGM1ZTkxYTZiNDMwMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGMxMWU3NGMxMGZjOWZmZTQxODg1MzdlMmIzNzBjMGFiYWNjYTdkODkwMjFkNGQzMDNhZmRmN2ZkNzQ3NmZhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICIiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9saWJhcnQyLWNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2xpYmFydF9sZ3BsLSR7UFZ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMTYuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJmMmM3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorU1VNTUFSWSA9ICJHTk9NRSBkZXNrdG9wLXdpZGUgR1NldHRpbmdzIHNjaGVtYXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdldHRleHQKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYmFlYmJjZjNjMjA1OTFmOTg4NzZlNDJmYjBhM2ZkMzUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI3NGZlOWZkYWQ1MTBjOGE2NjY2ZmViZWNlYjdlYmFmYzU4MWVmOTkwYjNhZmNjOGMxZThiNWQ5MGIyNGIzNDYxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1MjczZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJNdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBHVUlzIgorREVTQ1JJUFRJT04gPSAiR1RLKyBpcyBhIG11bHRpLXBsYXRmb3JtIHRvb2xraXQgZm9yIGNyZWF0aW5nIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMuIE9mZmVyaW5nIGEgY29tcGxldGUgXAorc2V0IG9mIHdpZGdldHMsIEdUSysgaXMgc3VpdGFibGUgZm9yIHByb2plY3RzIHJhbmdpbmcgZnJvbSBzbWFsbCBvbmUtb2ZmIHByb2plY3RzIHRvIGNvbXBsZXRlIGFwcGxpY2F0aW9uIHN1aXRlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworU0VDVElPTiA9ICJsaWJzIgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICJkaXJlY3RmYiB4MTEiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4Y3Vyc29yIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnhyZW5kZXIgbGlieGNvbXBvc2l0ZSIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgcGFuZ28gYXRrIGpwZWcgbGlicG5nIGdkay1waXhidWYtbmF0aXZlIGRvY2Jvb2stdXRpbHMtbmF0aXZlIFwKKyBjYWlybyBnZGstcGl4YnVmIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14PXllcyAtLXdpdGgtZ2RrdGFyZ2V0PXgxMSwtLXdpdGgteD1ubywke1gxMURFUEVORFN9IgorIyB3aXRob3V0IC0td2l0aC1nZGt0YXJnZXQ9ZGlyZWN0ZmIgaXQgd2lsbCBjaGVjayBmb3IgY2Fpcm8teGxpYiB3aGljaCBpc24ndCBhdmFpbGFibGUgd2l0aG91dCBYMTEgRElTVFJPX0ZFQVRVUkUKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdID0gIi0td2l0aC1nZGt0YXJnZXQ9ZGlyZWN0ZmIsLGRpcmVjdGZiIgorCitpbmhlcml0IGF1dG90b29scyBndGstZG9jIHBrZ2NvbmZpZyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGd0ay1pbW1vZHVsZXMtY2FjaGUKKworUEFDS0FHRVMgKz0gImxpYmdhaWwgZ3RrLWRlbW8iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wIFwKKwkke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjAgXAorCSR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKwkke2RhdGFkaXJ9L3RoZW1lcyAke3N5c2NvbmZkaXJ9IFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2VuZ2luZXMvbGlicGl4bWFwLnNvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTIuMC9pbmNsdWRlIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9pbmNsdWRlIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzLyoubGEgXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2ltbW9kdWxlcy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L3ByaW50YmFja2VuZHMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9lbmdpbmVzLyoubGEgXAorCSR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8uZGVidWcvKiBcCisgICAgICAgICR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vbG9hZGVycy8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9pbW1vZHVsZXMvLmRlYnVnLyogXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vZW5naW5lcy8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9wcmludGJhY2tlbmRzLy5kZWJ1Zy8qIgorCitGSUxFU19ndGstZGVtbyA9ICIgXAorICR7ZGF0YWRpcn0vZ3RrLTIuMC9kZW1vLyogXAorICR7YmluZGlyfS9ndGstZGVtbyBcCisgIgorCitGSUxFU19saWJnYWlsID0gIiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJnYWlsLnNvIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmZlcnJldC5zbyBcCisJIgorCitHVEtCQVNFX1JSRUNPTU1FTkRTID89ICJsaWJlcmF0aW9uLWZvbnRzIGdkay1waXhidWYtbG9hZGVyLXBuZyBnZGstcGl4YnVmLWxvYWRlci1qcGVnIGdkay1waXhidWYtbG9hZGVyLWdpZiBnZGstcGl4YnVmLWxvYWRlci14cG0gc2hhcmVkLW1pbWUtaW5mbyIKK0dUS0dMSUJDX1JSRUNPTU1FTkRTID89ICIke0dUS0JBU0VfUlJFQ09NTUVORFN9IGdsaWJjLWdjb252LWlzbzg4NTktMSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtHVEtCQVNFX1JSRUNPTU1FTkRTfSIKK1JSRUNPTU1FTkRTXyR7UE59X2xpYmMtZ2xpYmMgPSAiJHtHVEtHTElCQ19SUkVDT01NRU5EU30iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtndGstdXBkYXRlLWljb24tY2FjaGVdID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9ndGstMi4wCisKKwlta2RpciAtcCAke0R9JHtsaWJkaXJ9L2d0ay0yLjAvaW5jbHVkZQorCWluc3RhbGwgLW0gMDY0NCBnZGsvZ2RrY29uZmlnLmggJHtEfSR7bGliZGlyfS9ndGstMi4wL2luY2x1ZGUvZ2RrY29uZmlnLmgKKworCWluc3RhbGwgLW0gMDY0NCAke1N9L2d0ay9ndGtmaWxlY2hvb3NlcnByaXZhdGUuaCAke0R9JHtpbmNsdWRlZGlyfS9ndGstMi4wL2d0ay8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ndGsvZ3RrZmlsZWNob29zZXJ1dGlscy5oICAgJHtEfSR7aW5jbHVkZWRpcn0vZ3RrLTIuMC9ndGsvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZ3RrL2d0a2ZpbGVzeXN0ZW1tb2RlbC5oICAgICR7RH0ke2luY2x1ZGVkaXJ9L2d0ay0yLjAvZ3RrLworCisJbXYgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZ3RrX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZ3RrX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJaWYgWyAtZSAke0R9JHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisJCWluc3RhbGwgLW0gNzU1ICR7RH0ke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWZpCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9kb2MtZml4ZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTQ3OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1RoZXJlIGFyZSBpc3N1ZXMgYnVpbGRpbmcgdGhlIGd0aysgdHV0b3JpYWwgYW5kIGZhcSBkb2N1bWVudGF0aW9uLgorU2luY2UgdGhleSB3ZXJlIHJlbW92ZWQgaW4gZ3RrKyB1cHN0cmVhbSBhbmQgYXJlIHN1cGVyZmx1b3VzIGluCitlbWJlZGRlZCBhcHBsaWNhdGlvbnMsIGp1c3QgZG9uJ3QgYnVpbGQgdGhlbS4KKworVGhhbmtzIHRvIEpvc2h1YSBMb2NrIGZvciBzdWdnZXN0aW5nIHRoaXMgYXBwcm9hY2guCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitkaWZmIC11ck4gZ3RrKy0yLjIyLjEub3JpZy9kb2NzL01ha2VmaWxlLmFtIGd0aystMi4yMi4xL2RvY3MvTWFrZWZpbGUuYW0KKy0tLSBndGsrLTIuMjIuMS5vcmlnL2RvY3MvTWFrZWZpbGUuYW0JMjAxMC0xMS0xNSAwNDoxMzowOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBndGsrLTIuMjIuMS9kb2NzL01ha2VmaWxlLmFtCTIwMTEtMDItMjMgMTk6MjU6MTYuOTE0ODE1MDk3IC0wODAwCitAQCAtMSw3ICsxLDcgQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcikvTWFrZWZpbGUuZGVjbAorIAorLVNVQkRJUlMgPSB0dXRvcmlhbCBmYXEgcmVmZXJlbmNlIHRvb2xzCisrU1VCRElSUyA9IHJlZmVyZW5jZSB0b29scworIAorIEVYVFJBX0RJU1QgKz0gXAorIAlkZWZzZm9ybWF0LnR4dAkJCVwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWU3MjhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1VwZGF0ZWQgdG8gYXBwbHkgdG8gZ3RrKy0yLjI0LjE1CisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMgZ3RrKy0yLjI0LjE1L2NvbmZpZ3VyZS5hYworLS0tIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMJMjAxMy0wMS0xMiAyMDo1Mjo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjCTIwMTMtMDItMTIgMjE6MzM6MzAuNjg5OTI1OTY3ICswMjAwCitAQCAtNDE1LDcgKzQxNSw3IEBACisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJyE9JyB4cGFzc19hbGwgfHwgdGVzdCAieCRlbmFibGVfc3RhdGljIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgZW5hYmxlX2V4cGxpY2l0X2RlcHM9eWVzCisgICAgIGVsc2UKK0BAIC03NzQsNyArNzc0LDcgQEAKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIG1vZHVsZV9kZXBsaWJzX2NoZWNrPWAkbW9kdWxlX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtMTU3NCw3ICsxNTc0LDcgQEAKKyAjIFdlIGFyZSB1c2luZyBnbW9kdWxlLW5vLWV4cG9ydCBub3csIGJ1dCBJJ20gbGVhdmluZyB0aGUgc3RyaXBwaW5nCisgIyBjb2RlIGluIHBsYWNlIGZvciBub3csIHNpbmNlIHBhbmdvIGFuZCBhdGsgc3RpbGwgcmVxdWlyZSBnbW9kdWxlLgorIGV4cG9ydCBTRUQKKy1leHBvcnRfZHluYW1pYz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorK2V4cG9ydF9keW5hbWljPWAoJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19ERVBfTElCUz1gZWNobyAkR0RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKyAgIEdUS19ERVBfTElCUz1gZWNobyAkR1RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmUxZjVmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0ZpeGVzCisKK2luY2x1ZGUvZ3RrLTIuMC9ndGsvZ3RraXRlbWZhY3RvcnkuaDo0NzoxOiB3YXJuaW5nOiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpc24ndCBhIHByb3RvdHlwZSBbLVdzdHJpY3QtcHJvdG90eXBlc10KKyB0eXBlZGVmIHZvaWQgKCpHdGtJdGVtRmFjdG9yeUNhbGxiYWNrKSAgKCk7CisKK2djYzUgaGFzIC1Xc3RyaWN0LXByb3RvdHlwZXMgb24gYnkgZGVmYXVsdCBmb3IgLVdlcnJvciBzbyB0aGlzIGJlY29tZXMgYSBidWlsZCBmYWlsdXJlIGZvciBjb25zdW1lcnMKK29mIHRoaXMgaGVhZGVyIGUuZy4gbWF0Y2hib3gtcGFuZWwtMgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBndGsrLTIuMjQuMjcvZ3RrL2d0a2l0ZW1mYWN0b3J5LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsrLTIuMjQuMjcub3JpZy9ndGsvZ3RraXRlbWZhY3RvcnkuaAorKysrIGd0aystMi4yNC4yNy9ndGsvZ3RraXRlbWZhY3RvcnkuaAorQEAgLTQ0LDcgKzQ0LDcgQEAgdHlwZWRlZiB2b2lkCSgqR3RrUHJpbnRGdW5jKQkJICAgKGdwb2ludAorICAqIChOb3RlIHRoYXQgaWYgd2UgYXJlIGluY2x1ZGVkIGZyb20gYSBDKysgcHJvZ3JhbSAoKSB3aWxsIG1lYW4KKyAgKiAodm9pZCkgc28gYW4gZXhwbGljaXQgY2FzdCB3aWxsIGJlIG5lZWRlZC4pCisgICovCistdHlwZWRlZgl2b2lkCSgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjaykgICgpOworK3R5cGVkZWYJdm9pZAkoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2spICAodm9pZCk7CisgdHlwZWRlZgl2b2lkCSgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjazEpIChncG9pbnRlcgkJIGNhbGxiYWNrX2RhdGEsCisgCQkJCQkgICAgZ3VpbnQJCSBjYWxsYmFja19hY3Rpb24sCisgCQkJCQkgICAgR3RrV2lkZ2V0CQkqd2lkZ2V0KTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3RvZ2dsZS1mb250LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwZDEyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmCkBAIC0wLDAgKzEsMTAyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYy5vcmlnCTIwMTAtMDYtMjIgMTg6MTE6MzMuMDAwMDAwMDAwICswODAwCisrKysgZ3RrL2d0a2NlbGxyZW5kZXJlcnRvZ2dsZS5jCTIwMTAtMDYtMjIgMTg6MTE6NDMuMDAwMDAwMDAwICswODAwCitAQCAtNzEsNiArNzEsOCBAQAorICAgUFJPUF9JTkRJQ0FUT1JfU0laRQorIH07CisgCisrLyogVGhpcyBpcyBhIGhhcmQtY29kZWQgZGVmYXVsdCB3aGljaCBwcm9tcHRseSBnZXRzIG92ZXJyaWRkZW4gYnkgYSBzaXplCisrICAgY2FsY3VsYXRlZCBmcm9tIHRoZSBmb250IHNpemUuICovCisgI2RlZmluZSBUT0dHTEVfV0lEVEggMTMKKyAKKyBzdGF0aWMgZ3VpbnQgdG9nZ2xlX2NlbGxfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKK0BAIC04MCw4ICs4Miw5IEBACisgdHlwZWRlZiBzdHJ1Y3QgX0d0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGUgR3RrQ2VsbFJlbmRlcmVyVG9nZ2xlUHJpdmF0ZTsKKyBzdHJ1Y3QgX0d0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGUKKyB7CistICBnaW50IGluZGljYXRvcl9zaXplOworLQorKyAgZ2ludCBpbmRpY2F0b3Jfc2l6ZTsgLyogVGhpcyBpcyB0aGUgcmVhbCBzaXplICovCisrICBnaW50IG92ZXJyaWRlX3NpemU7IC8qIFRoaXMgaXMgdGhlIHNpemUgc2V0IGZyb20gdGhlIGluZGljYXRvci1zaXplIHByb3BlcnR5ICovCisrICBHdGtXaWRnZXQgKmNhY2hlZF93aWRnZXQ7CisgICBndWludCBpbmNvbnNpc3RlbnQgOiAxOworIH07CisgCitAQCAtMTA0LDYgKzEwNyw3IEBACisgICBHVEtfQ0VMTF9SRU5ERVJFUiAoY2VsbHRvZ2dsZSktPnlwYWQgPSAyOworIAorICAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBUT0dHTEVfV0lEVEg7CisrICBwcml2LT5vdmVycmlkZV9zaXplID0gMDsKKyAgIHByaXYtPmluY29uc2lzdGVudCA9IEZBTFNFOworIH0KKyAKK0BAIC0yMTAsNyArMjE0LDcgQEAKKyAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgY2VsbHRvZ2dsZS0+cmFkaW8pOworICAgICAgIGJyZWFrOworICAgICBjYXNlIFBST1BfSU5ESUNBVE9SX1NJWkU6CistICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+aW5kaWNhdG9yX3NpemUpOworKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPm92ZXJyaWRlX3NpemUgPyBwcml2LT5vdmVycmlkZV9zaXplIDogcHJpdi0+aW5kaWNhdG9yX3NpemUpOworICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwYXJhbV9pZCwgcHNwZWMpOworQEAgLTI0NSw3ICsyNDksNyBAQAorICAgICAgIGNlbGx0b2dnbGUtPnJhZGlvID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgIGJyZWFrOworICAgICBjYXNlIFBST1BfSU5ESUNBVE9SX1NJWkU6CistICAgICAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKysgICAgICBwcml2LT5vdmVycmlkZV9zaXplID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CisgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHBhcmFtX2lkLCBwc3BlYyk7CitAQCAtMjczLDYgKzI3NywyNyBAQAorIH0KKyAKKyBzdGF0aWMgdm9pZAorK29uX3dpZGdldF9zdHlsZV9zZXQgKEd0a1dpZGdldCAqd2lkZ2V0LCBHdGtTdHlsZSAqcHJldmlvdXMsIGdwb2ludGVyIHVzZXJfZGF0YSkKKyt7CisrICBHdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlICpwcml2ID0gdXNlcl9kYXRhOworKyAgUGFuZ29Db250ZXh0ICpjb250ZXh0OworKyAgUGFuZ29Gb250TWV0cmljcyAqbWV0cmljczsKKysgIGludCBoZWlnaHQ7CisrICAKKysgIGNvbnRleHQgPSBndGtfd2lkZ2V0X2dldF9wYW5nb19jb250ZXh0ICh3aWRnZXQpOworKyAgbWV0cmljcyA9IHBhbmdvX2NvbnRleHRfZ2V0X21ldHJpY3MgKGNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LT5zdHlsZS0+Zm9udF9kZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmdvX2NvbnRleHRfZ2V0X2xhbmd1YWdlIChjb250ZXh0KSk7CisrCisrICBoZWlnaHQgPSBwYW5nb19mb250X21ldHJpY3NfZ2V0X2FzY2VudCAobWV0cmljcykgKworKyAgICBwYW5nb19mb250X21ldHJpY3NfZ2V0X2Rlc2NlbnQgKG1ldHJpY3MpOworKyAgCisrICBwYW5nb19mb250X21ldHJpY3NfdW5yZWYgKG1ldHJpY3MpOworKyAgCisrICBwcml2LT5pbmRpY2F0b3Jfc2l6ZSA9IFBBTkdPX1BJWEVMUyAoaGVpZ2h0ICogMC44NSk7CisrfQorKworK3N0YXRpYyB2b2lkCisgZ3RrX2NlbGxfcmVuZGVyZXJfdG9nZ2xlX2dldF9zaXplIChHdGtDZWxsUmVuZGVyZXIgKmNlbGwsCisgCQkJCSAgIEd0a1dpZGdldCAgICAgICAqd2lkZ2V0LAorIAkJCQkgICBHZGtSZWN0YW5nbGUgICAgKmNlbGxfYXJlYSwKK0BAIC0yODcsNiArMzEyLDIwIEBACisgCisgICBwcml2ID0gR1RLX0NFTExfUkVOREVSRVJfVE9HR0xFX0dFVF9QUklWQVRFIChjZWxsKTsKKyAKKysgIGlmIChwcml2LT5vdmVycmlkZV9zaXplKSB7CisrICAgIHByaXYtPmluZGljYXRvcl9zaXplID0gcHJpdi0+b3ZlcnJpZGVfc2l6ZTsKKysgIH0gZWxzZSBpZiAocHJpdi0+Y2FjaGVkX3dpZGdldCAhPSB3aWRnZXQpIHsKKysgICAgaWYgKHByaXYtPmNhY2hlZF93aWRnZXQpIHsKKysgICAgICBnX29iamVjdF9yZW1vdmVfd2Vha19wb2ludGVyICh3aWRnZXQsICZwcml2LT5jYWNoZWRfd2lkZ2V0KTsKKysgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPmNhY2hlZF93aWRnZXQsIG9uX3dpZGdldF9zdHlsZV9zZXQsIHByaXYpOworKyAgICB9CisrICAgIHByaXYtPmNhY2hlZF93aWRnZXQgPSB3aWRnZXQ7CisrICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIgKHdpZGdldCwgJnByaXYtPmNhY2hlZF93aWRnZXQpOworKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3aWRnZXQsICJzdHlsZS1zZXQiLCBvbl93aWRnZXRfc3R5bGVfc2V0LCBwcml2KTsKKysgICAgCisrICAgIG9uX3dpZGdldF9zdHlsZV9zZXQgKHdpZGdldCwgTlVMTCwgcHJpdik7CisrICB9CisrCisgICBjYWxjX3dpZHRoID0gKGdpbnQpIGNlbGwtPnhwYWQgKiAyICsgcHJpdi0+aW5kaWNhdG9yX3NpemU7CisgICBjYWxjX2hlaWdodCA9IChnaW50KSBjZWxsLT55cGFkICogMiArIHByaXYtPmluZGljYXRvcl9zaXplOworIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3hzZXR0aW5ncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhOTcwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBndGsrLTIuMjEuMi9nZGsveDExL2dka2V2ZW50cy14MTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0aystMi4yMS4yLm9yaWcvZ2RrL3gxMS9nZGtldmVudHMteDExLmMJMjAxMC0wNi0yMiAxNzoyODowNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBndGsrLTIuMjEuMi9nZGsveDExL2dka2V2ZW50cy14MTEuYwkyMDEwLTA2LTIyIDE3OjI4OjA2LjAwMDAwMDAwMCArMDgwMAorQEAgLTMwNjIsMTAgKzMwNjIsOSBAQAorIHsKKyAgIEdka1NjcmVlblgxMSAqc2NyZWVuID0gZGF0YTsKKyAgIAorLSAgaWYgKHhzZXR0aW5nc19jbGllbnRfcHJvY2Vzc19ldmVudCAoc2NyZWVuLT54c2V0dGluZ3NfY2xpZW50LCAoWEV2ZW50ICopeGV2ZW50KSkKKy0gICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworLSAgZWxzZQorLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKysgIHhzZXR0aW5nc19jbGllbnRfcHJvY2Vzc19ldmVudCAoc2NyZWVuLT54c2V0dGluZ3NfY2xpZW50LCAoWEV2ZW50ICopeGV2ZW50KTsKKysKKysgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworIH0KKyAKKyBzdGF0aWMgQm9vbApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjlmMGQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKQEAgLTAsMCArMSwxMTEgQEAKK1NVTU1BUlkgPSAiTXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgR1VJcyIKK0RFU0NSSVBUSU9OID0gIkdUSysgaXMgYSBtdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiBPZmZlcmluZyBhIGNvbXBsZXRlIFwKK3NldCBvZiB3aWRnZXRzLCBHVEsrIGlzIHN1aXRhYmxlIGZvciBwcm9qZWN0cyByYW5naW5nIGZyb20gc21hbGwgb25lLW9mZiBwcm9qZWN0cyB0byBjb21wbGV0ZSBhcHBsaWNhdGlvbiBzdWl0ZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgY2Fpcm8gcGFuZ28gYXRrIGpwZWcgbGlicG5nIGdkay1waXhidWYgXAorICAgICAgICAgICBkb2Nib29rLXV0aWxzLW5hdGl2ZSBnZGstcGl4YnVmLW5hdGl2ZSBsaWJlcG94eSIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGd0ay1pbW1vZHVsZXMtY2FjaGUgZ3NldHRpbmdzCisKKyMgVGhpcyBzaG91bGQgYmUgaW4gYXV0b3Rvb2xzLmJiY2xhc3MsIGJ1dCB1bnRpbCBzb21ldGhpbmcgZWxzZXMgdXNlcyBpdCBwdXR0aW5nCisjIGl0IGhlcmUgYXZvaWRzIHJlYnVpbGRpbmcgZXZlcnl0aGluZy4KK2V4cG9ydCBQS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgRG8gdGhpcyBiZWNhdXNlIHRoZSBjb25maWd1cmUgc2NyaXB0IGlzIHJ1bm5pbmcgLi9saWJ0b29sIGRpcmVjdGx5CisgICAgcm0gLWYgbGlidG9vbAorICAgIGxuIC1zICR7VEFSR0VUX1BSRUZJWH1saWJ0b29sIGxpYnRvb2wKK30KKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZ2xpYnRlc3QgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteGluZXJhbWEgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1tb2R1bGVzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWN1cHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIngxMSIsICJ4MTEiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndheWxhbmQiLCAid2F5bGFuZCIsICIiLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtYmFja2VuZCwtLWRpc2FibGUteDExLWJhY2tlbmQsYXQtc3BpMi1hdGsgZm9udGNvbmZpZyBsaWJ4MTEgbGlieGV4dCBsaWJ4Y3Vyc29yIGxpYnhpIGxpYnhkYW1hZ2UgbGlieHJhbmRyIGxpYnhyZW5kZXIgbGlieGNvbXBvc2l0ZSBsaWJ4Zml4ZXMiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtYmFja2VuZCwtLWRpc2FibGUtd2F5bGFuZC1iYWNrZW5kLHdheWxhbmQgbGlieGtiY29tbW9uIHZpcnR1YWwvbWVzYSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbXYgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1kZW1vIgorTElCViA9ICIzLjAuMCIKKworRklMRVNfJHtQTn0tZGVtbyA9ICIke2JpbmRpcn0vZ3RrMy1kZW1vIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0azMtZGVtby1hcHBsaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLWljb24tYnJvd3NlciBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLXdpZGdldC1mYWN0b3J5IFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2RlbW8gXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLWRlbW8uZGVza3RvcCBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2d0azMtaWNvbi1icm93c2VyLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLXdpZGdldC1mYWN0b3J5LmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvKi9hcHBzL2d0azMtZGVtbyoucG5nIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyovYXBwcy9ndGszLXdpZGdldC1mYWN0b3J5Ki5wbmciCisKKyMgVGhlIGRlbW8gdXNlcyBQTkcgZmlsZXMgYW5kIG1pbWUgdHlwZSBzbmlmZmluZywgc28gZW5zdXJlIHRoYXQgdGhlc2UKKyMgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50LgorUkRFUEVORFNfJHtQTn0tZGVtbyArPSAiZ2RrLXBpeGJ1Zi1sb2FkZXItcG5nIHNoYXJlZC1taW1lLWluZm8iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLTMuMCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWxhdW5jaCBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcyAke3N5c2NvbmZkaXJ9ICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcy8gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzL2xpYnBpeG1hcC5zbyBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLyouc28iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2d0a2J1aWxkZXIucm5nIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2ltbW9kdWxlcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvMy4wLjAvcHJpbnRiYWNrZW5kcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2xvYWRlcnMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9pbW1vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vcHJpbnRiYWNrZW5kcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLy5kZWJ1ZyIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiYWR3YWl0YS1pY29uLXRoZW1lLXN5bWJvbGljIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrMy1pbW1vZHVsZS0uKiBeZ3RrMy1wcmludGJhY2tlbmQtLioiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtndGstdXBkYXRlLWljb24tY2FjaGVdID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgaW1wb3J0IG9zLnBhdGgKKworICAgIGd0a19saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfScpCisgICAgaW1tb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2ltbW9kdWxlcycpCisgICAgcHJpbnRtb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ3ByaW50YmFja2VuZHMnKTsKKworICAgIGltbW9kdWxlcyA9IGRvX3NwbGl0X3BhY2thZ2VzKGQsIGltbW9kdWxlc19yb290LCAnXmltLSguKilcLnNvJCcsICdndGszLWltbW9kdWxlLSVzJywgJ0dUSyBpbnB1dCBtb2R1bGUgZm9yICVzJykKKyAgICBpZiBpbW1vZHVsZXM6CisgICAgICAgIGQuc2V0VmFyKCJHVEtJTU1PRFVMRVNfUEFDS0FHRVMiLCAiICIuam9pbihpbW1vZHVsZXMpKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcHJpbnRtb2R1bGVzX3Jvb3QsICdebGlicHJpbnRiYWNrZW5kLSguKilcLnNvJCcsICdndGszLXByaW50YmFja2VuZC0lcycsICdHVEsgcHJpbnRiYWNrZW5kIG1vZHVsZSBmb3IgJXMnKQorCisgICAgaWYgKGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCAxKSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfJHtQTn0nLCAnJHtNTFBSRUZJWH1saWJndGstMy4wJykKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eb250LWZvcmNlLWNzZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkOGE4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2gKQEAgLTAsMCArMSwxMTggQEAKK3dpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCitGcm9tIGM1ZTVlZTY3NDkwZTdlN2FmNTYwNTJkOGY4YmViNzVkYjAwMmMyZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFbW1hbnVlbGUgQmFzc2kgPGViYXNzaUBnbm9tZS5vcmc+CitEYXRlOiBXZWQsIDMgSnVuIDIwMTUgMTQ6MDc6MjkgKzAxMDAKK1N1YmplY3Q6IHdpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KKworVGhlIGNoYW5nZSBpbiAwMzIxM2I5NTA5ZmMxZGYxNmM2NjE5NGVhMTY4YWVkNmMxNTExMGU5IGNoYW5nZWQgdGhlIHJ1bGVzCithcyB0byB3aGVuIENTRCBjYW4gYmUgZW5hYmxlZCwgYnV0IGl0IGFsc28gdW5jb25kaXRpb25hbGx5IGVuYWJsZXMgQ1NECit3aXRoIHRoZSBpbXBsaWNpdCBhc3N1bXB0aW9uIHRoYXQgY2xpZW50LXNpZGUgc2hhZG93cyB3ZXJlIHRoZSByZWFsCitpc3N1ZSwgYW5kIHRoYXQgd2UgY291bGQgd29yayBhcm91bmQgdGhhdCBieSBkcmF3aW5nIG91ciBvd24gYm9yZGVycy4KK1RoaXMgYWxzbyBtZWFucyB0aGF0IHNldHRpbmcgYSB0aXRsZWJhciBmb3IgYSBHdGtXaW5kb3cgd2lsbCBlbmFibGUgQ1NECit1bmNvbmRpdGlvbmFsbHkuCisKK0luIHJlYWxpdHksIHNvbWUgd2luZG93IG1hbmFnZXJzIChsaWtlIE1hdGNoYm94KSAqb25seSogc3VwcG9ydAorc2VydmVyLXNpZGUgZGVjb3JhdGlvbnMsIGFuZCB3aWxsIGlnbm9yZSBhbGwgaGludHMgdG8gdGhlIGNvbnRyYXJ5LCB0bwordGhlIHBvaW50IG9mIGRyYXdpbmcgZGVjb3JhdGlvbnMgYXQgcmFuZG9tIGxvY2F0aW9ucyBvbiB0b3Agb2YgdGhlCit3aW5kb3cuCisKK1NpbmNlIENTRCBhcmUgZW5hYmxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBHVEtfQ1NEIGVudmlyb25tZW50IHZhcmlhYmxlCitpcyBhbHNvIG5vdCBhIHN1aXRhYmxlIGVzY2FwZSBoYXRjaC4KKworSW4gdGhlIGdyYW5kIHRyYWRpdGlvbiBvZiBhc2tpbmcgb3Vyc2VsdmVzIGlmIHdlIHNob3VsZCBkbyBzb21ldGhpbmcKK2p1c3QgYmVjYXVzZSB3ZSBjYW4sIHdlIHNob3VsZCBzcGxpdCB0aGUgZW52aXJvbm1lbnQgY2hlY2tzIGZyb20gdGhlCitjaGVja3Mgb24gd2hhdCB0aGUgdXNlciByZXF1ZXN0ZWQ7IGJ5IGRvaW5nIHRoYXQsIHdlIGNhbiBhbHNvIGNoZWNrCit3aGVuIGVuYWJsaW5nIGNsaWVudC1zaWRlIGRlY29yYXRpb25zLCBhbmQgaWRlYWxseSBiYWlsIG91dCBpZiBuZWVkZWQuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAzNDMKKworZGlmZiAtLWdpdCBhL2d0ay9ndGt3aW5kb3cuYyBiL2d0ay9ndGt3aW5kb3cuYworaW5kZXggNDIzYzZiZC4uOWZlODgyZiAxMDA2NDQKKy0tLSBhL2d0ay9ndGt3aW5kb3cuYworKysrIGIvZ3RrL2d0a3dpbmRvdy5jCitAQCAtNDA1Niw2ICs0MDU2LDMyIEBAIGd0a193aW5kb3dfc3VwcG9ydHNfY2xpZW50X3NoYWRvdyAoR3RrV2luZG93ICp3aW5kb3cpCisgICByZXR1cm4gVFJVRTsKKyB9CisgCisrc3RhdGljIGdib29sZWFuCisrZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisreworKyAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7CisrCisrI2lmZGVmIEdES19XSU5ET1dJTkdfQlJPQURXQVkKKysgIGlmIChHREtfSVNfQlJPQURXQVlfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorKyAgICByZXR1cm4gVFJVRTsKKysjZW5kaWYKKysKKysjaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECisrICBpZiAoR0RLX0lTX1dBWUxBTkRfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorKyAgICByZXR1cm4gVFJVRTsKKysjZW5kaWYKKysKKysjaWZkZWYgR0RLX1dJTkRPV0lOR19NSVIKKysgIGlmIChHREtfSVNfTUlSX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKysgICAgcmV0dXJuIFRSVUU7CisrI2VuZGlmCisrCisrICBjc2RfZW52ID0gZ19nZXRlbnYgKCJHVEtfQ1NEIik7CisrCisrICAvKiBJZiBHVEtfQ1NEIGlzIHVuc2V0IHdlIGRlZmF1bHQgdG8gQ1NEIHN1cHBvcnQgKi8KKysgIHJldHVybiBjc2RfZW52ID09IE5VTEwgfHwgKHN0cmNtcCAoY3NkX2VudiwgIjEiKSA9PSAwKTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBndGtfd2luZG93X2VuYWJsZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorIHsKK0BAIC00MDYzLDYgKzQwODksMTAgQEAgZ3RrX3dpbmRvd19lbmFibGVfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gR1RLX1dJREdFVCAod2luZG93KTsKKyAgIEdka1Zpc3VhbCAqdmlzdWFsOworIAorKyAgLyogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgQ1NELCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZW5hYmxpbmcgdGhlbSAqLworKyAgaWYgKCFndGtfd2luZG93X2Nhbl91c2VfY3NkICh3aW5kb3cpKQorKyAgICByZXR1cm47CisrCisgICAvKiBXZSBuZWVkIGEgdmlzdWFsIHdpdGggYWxwaGEgZm9yIGNsaWVudCBzaGFkb3dzICovCisgICBpZiAocHJpdi0+dXNlX2NsaWVudF9zaGFkb3cpCisgICAgIHsKK0BAIC01ODM5LDcgKzU4NjksNiBAQCBzdGF0aWMgZ2Jvb2xlYW4KKyBndGtfd2luZG93X3Nob3VsZF91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyB7CisgICBHdGtXaW5kb3dQcml2YXRlICpwcml2ID0gd2luZG93LT5wcml2OworLSAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7CisgCisgICBpZiAocHJpdi0+Y3NkX3JlcXVlc3RlZCkKKyAgICAgcmV0dXJuIFRSVUU7CitAQCAtNTg1MCwyNCArNTg3OSw3IEBAIGd0a193aW5kb3dfc2hvdWxkX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorICAgaWYgKHByaXYtPnR5cGUgPT0gR1RLX1dJTkRPV19QT1BVUCkKKyAgICAgcmV0dXJuIEZBTFNFOworIAorLSNpZmRlZiBHREtfV0lORE9XSU5HX0JST0FEV0FZCistICBpZiAoR0RLX0lTX0JST0FEV0FZX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKy0gICAgcmV0dXJuIFRSVUU7CistI2VuZGlmCistCistI2lmZGVmIEdES19XSU5ET1dJTkdfV0FZTEFORAorLSAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKy0gICAgcmV0dXJuIFRSVUU7CistI2VuZGlmCistCistI2lmZGVmIEdES19XSU5ET1dJTkdfTUlSCistICBpZiAoR0RLX0lTX01JUl9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCistICAgIHJldHVybiBUUlVFOworLSNlbmRpZgorLQorLSAgY3NkX2VudiA9IGdfZ2V0ZW52ICgiR1RLX0NTRCIpOworLQorLSAgcmV0dXJuIChnX3N0cmNtcDAgKGNzZF9lbnYsICIxIikgPT0gMCk7CisrICByZXR1cm4gZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAod2luZG93KTsKKyB9CisgCisgc3RhdGljIHZvaWQKKy0tIAorY2dpdCB2MC4xMC4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNGJlZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK0luZGV4OiBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0aystMy44LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYworQEAgLTUzMSw3ICs1MzEsNyBAQCBBQ19NU0dfQ0hFQ0tJTkcoW1doZXRoZXIgdG8gd3JpdGUgZGVwZW5kCisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0geHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNzkzLDcgKzc5Myw3IEBAIGVsc2UKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIgorICAgICAgICAgbW9kdWxlX2RlcGxpYnNfY2hlY2s9YCRtb2R1bGVfbGlidG9vbF9jb25maWcgfCBcCisgICAgICAgICAgICAgZ3JlcCAnXltbYS16X11dKmNoZWNrW1thLXpfXV0qX21ldGhvZD1bWydcJyciXV0nIHwgXAorICAgICAgICAgICAgIHNlZCAncy8uKltbJ1wnJyJdXVwoLipcKVtbJ1wnJyJdXSQvXDEvJ2AKK0BAIC0xNTI4LDcgKzE1MjgsNyBAQCBmaQorICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKKyAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCisgZXhwb3J0IFNFRAorLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrZXhwb3J0X2R5bmFtaWM9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfREVQX0xJQlM9YGVjaG8gJEdES19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCisgICBHVEtfREVQX0xJQlM9YGVjaG8gJEdUS19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4xNi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzM2YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGd0ayszLmluYworCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8ke01BSl9WRVJ9L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0RvbnQtZm9yY2UtY3NkLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzU5ZTVjOGI1YTQ1ODViNjA2MjNkZDcwOGRmNDAwYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZDEyNzI2ZDA4NTZhOTY4YjQxODAyYWU1YzU5NzFkN2U5YmFjNTMyNzE3ZTMwOWQzZjgxYjk5ODlkYTVmZmJlIgorCitTID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9MjU7bWQ1PTFkOGRjMGZjY2RiZmEyNjI4N2EyNzFkY2U4OGFmNzM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI1O21kNT1jOTIwY2UzOWRjODhjNmYwNmQzZTdjNTBlMDgwODZmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNTttZDU9Y2I3MzJkYWVlMWQ4MmFmN2EyYmY5NTNjZjNjZjI2ZjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrK18yLjI0LjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNDM3NzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYgpAQCAtMCwwICsxLDM0IEBACityZXF1aXJlIGd0aysuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI3O21kNT1jNTllMGI0NDkwZGQxMzVhNTcyNmViZjg1MWY5YjE3ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNzttZDU9MDdkYjI4NWVjMjA4ZmIzZTBiZjdkODYxYjA2MTQyMDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9Mjc7bWQ1PTI2MmRiNWRiNWY3NzZmOTg2M2U1NmRmMzE0MjNlMjRjIgorU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLzIuMjQvZ3RrKy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RvZ2dsZS1mb250LmRpZmY7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL2RvYy1maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaCBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZmFjZjg3YjJlYTY3ZTRlNWM3ODY2YTkwMDNlNjUyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMmM2NDQxZTk4YmM1MjMyZTVmOWJiYTY5NjUwNzVkY2Y1ODBhODcyNjM5OGY3Mzc0ZDM5ZjkwYjg4ZWQ0NjU2IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUteGtiIC0tZGlzYWJsZS1nbGlidGVzdCAtLWRpc2FibGUtY3VwcyAtLWRpc2FibGUteGluZXJhbWEiCisKK0xJQlYgPSAiMi4xMC4wIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrLWltbW9kdWxlLS4qIF5ndGstcHJpbnRiYWNrZW5kLS4qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZ3RrX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9JykKKyAgICBpbW1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAnaW1tb2R1bGVzJykKKyAgICBwcmludG1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAncHJpbnRiYWNrZW5kcycpOworCisgICAgZC5zZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGltbW9kdWxlc19yb290LCAnXmltLSguKilcLnNvJCcsICdndGstaW1tb2R1bGUtJXMnLCAnR1RLIGlucHV0IG1vZHVsZSBmb3IgJXMnKSkpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcHJpbnRtb2R1bGVzX3Jvb3QsICdebGlicHJpbnRiYWNrZW5kLSguKilcLnNvJCcsICdndGstcHJpbnRiYWNrZW5kLSVzJywgJ0dUSyBwcmludGJhY2tlbmQgbW9kdWxlIGZvciAlcycpCisKKyAgICBpZiAoZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpKToKKyAgICAgICAgZC5zZXRWYXIoJ1BLR18ke1BOfScsICcke01MUFJFRklYfWxpYmd0ay0yLjAnKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4xNi42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4xNi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTM4MTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjE2LjYuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJOYXRpdmUgaWNvbiB1dGlscyBmb3IgR1RLKyIKK0RFU0NSSVBUSU9OID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSBhbmQgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgYnVpbHQgZnJvbSBHVEsrIG5hdGl2ZWx5LCBmb3IgYnVpbGQgdGltZSBhbmQgb24taG9zdCBwb3N0aW5zdCBzY3JpcHQgZXhlY3V0aW9uLiIKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlicnN2Zy1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgZmlsZTovL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImZjNTllNWM4YjVhNDU4NWI2MDYyM2RkNzA4ZGY0MDBiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRkMTI3MjZkMDg1NmE5NjhiNDE4MDJhZTVjNTk3MWQ3ZTliYWM1MzI3MTdlMzA5ZDNmODFiOTk4OWRhNWZmYmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgorCitTID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKKworaW5oZXJpdCBwa2djb25maWcgbmF0aXZlCisKK1BLR19DT05GSUdfRk9SX0JVSUxEID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wa2ctY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgeworCSMgUXVpdGUgdWdseSBidXQgZGVmaW5lcyBlbm91Z2ggdG8gY29tcGlsZSB0aGUgdG9vbHMuCisJaWYgISB0ZXN0IC1mIGd0ay9jb25maWcuaDsgdGhlbgorCQllY2hvICIjZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSBcImd0azMwXCIiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfVU5JU1REX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJCWVjaG8gIiNkZWZpbmUgSEFWRV9GVFdfSCAxIiA+PiBndGsvY29uZmlnLmgKKwlmaQorCWlmICEgdGVzdCAtZiBnZGsvY29uZmlnLmg7IHRoZW4KKwkJdG91Y2ggZ2RrL2NvbmZpZy5oCisJZmkKK30KKworZG9fY29tcGlsZSgpIHsKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL3VwZGF0ZWljb25jYWNoZS5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2RrLXBpeGJ1Zi0yLjApIFwKKwkJLW8gZ3RrLXVwZGF0ZS1pY29uLWNhY2hlCisKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL2VuY29kZXN5bWJvbGljLmMgXAorCQkkKCR7UEtHX0NPTkZJR19GT1JfQlVJTER9IC0tY2ZsYWdzIC0tbGlicyBnaW8tMi4wIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyAke0R9JHtiaW5kaXJ9CisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycy5jYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKK30KKworIyBQcmV2ZW50IGJpdGJha2UgZnJvbSBvcHRpbWl6aW5nIGF3YXkgdGhlIG5hdGl2ZSBsaWJyc3ZnIHN5c3Jvb3QgcG9wdWxhdGlvbgorZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZVtkZXBlbmRzXSArPSAibGlicnN2Zy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMvUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzN2Y4MDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIDRkMDlmZjMyNDQxOWZlNGU2NzEyMzMwNDRlNDI0Mzc4ZGE1Mzk2OWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDE0OjIwOjMwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSBHZGstZGVwZW5kZW5jeSBmcm9tIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnCisKK0J1aWxkaW5nIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIHdpdGhvdXQgYnVpbGRpbmcgR2RrIGlzIHVzZWZ1bAorYXMgb25seSB0aGUgaWNvbiB0b29scyBhcmUgbmVlZGVkIG9uIHRoZSBuYXRpdmUgYnVpbGQ6IHRoaXMgbWFrZXMKK25hdGl2ZSBidWlsZCBtdWNoIGZhc3RlciBhbmQgcmVxdWlyZXMgbXVjaCBsZXNzIGRlcGVuZGVuY2llcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBndGsvZW5jb2Rlc3ltYm9saWMuYyB8IDM2ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9lbmNvZGVzeW1ib2xpYy5jIGIvZ3RrL2VuY29kZXN5bWJvbGljLmMKK2luZGV4IDlmN2QwMTUuLjFmMDc1NjMgMTAwNjQ0CistLS0gYS9ndGsvZW5jb2Rlc3ltYm9saWMuYworKysrIGIvZ3RrL2VuY29kZXN5bWJvbGljLmMKK0BAIC0xOSw3ICsxOSw2IEBACisgCisgI2luY2x1ZGUgPGdsaWIuaD4KKyAjaW5jbHVkZSA8Z2RrLXBpeGJ1Zi9nZGstcGl4ZGF0YS5oPgorLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisgI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyAKKyAjaWZkZWYgSEFWRV9VTklTVERfSAorQEAgLTQzLDMwICs0MiwxOCBAQCBzdGF0aWMgR2RrUGl4YnVmICoKKyBsb2FkX3N5bWJvbGljX3N2ZyAoY2hhciAqZmlsZV9kYXRhLCBnc2l6ZSBmaWxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqZmcsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1JHQkEgICpzdWNjZXNzX2NvbG9yLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqd2FybmluZ19jb2xvciwKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKmVycm9yX2NvbG9yLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3NfZmcsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzc19zdWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3Nfd2FybmluZywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICoqZXJyb3IpCisgeworICAgR0lucHV0U3RyZWFtICpzdHJlYW07CisgICBHZGtQaXhidWYgKnBpeGJ1ZjsKKy0gIGdjaGFyICpjc3NfZmc7CistICBnY2hhciAqY3NzX3N1Y2Nlc3M7CistICBnY2hhciAqY3NzX3dhcm5pbmc7CistICBnY2hhciAqY3NzX2Vycm9yOworICAgZ2NoYXIgKmRhdGE7CisgICBnY2hhciAqc3ZnX3dpZHRoLCAqc3ZnX2hlaWdodDsKKyAgIGdjaGFyICplc2NhcGVkX2ZpbGVfZGF0YTsKKyAKKy0gIGNzc19mZyA9IGdka19yZ2JhX3RvX3N0cmluZyAoZmcpOworLQorLSAgY3NzX3N1Y2Nlc3MgPSBjc3Nfd2FybmluZyA9IGNzc19lcnJvciA9IE5VTEw7CistCistICBjc3Nfd2FybmluZyA9IGdka19yZ2JhX3RvX3N0cmluZyAod2FybmluZ19jb2xvcik7CistICBjc3NfZXJyb3IgPSBnZGtfcmdiYV90b19zdHJpbmcgKGVycm9yX2NvbG9yKTsKKy0gIGNzc19zdWNjZXNzID0gZ2RrX3JnYmFfdG9fc3RyaW5nIChzdWNjZXNzX2NvbG9yKTsKKy0KKyAgIC8qIEZldGNoIHNpemUgZnJvbSB0aGUgb3JpZ2luYWwgaWNvbiAqLworICAgc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEgKGZpbGVfZGF0YSwgZmlsZV9sZW4sIE5VTEwpOworICAgcGl4YnVmID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9zdHJlYW0gKHN0cmVhbSwgTlVMTCwgZXJyb3IpOworQEAgLTEwNSwxMCArOTIsNiBAQCBsb2FkX3N5bWJvbGljX3N2ZyAoY2hhciAqZmlsZV9kYXRhLCBnc2l6ZSBmaWxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIjwvc3ZnPiIsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgZ19mcmVlIChlc2NhcGVkX2ZpbGVfZGF0YSk7CistICBnX2ZyZWUgKGNzc19mZyk7CistICBnX2ZyZWUgKGNzc193YXJuaW5nKTsKKy0gIGdfZnJlZSAoY3NzX2Vycm9yKTsKKy0gIGdfZnJlZSAoY3NzX3N1Y2Nlc3MpOworICAgZ19mcmVlIChzdmdfd2lkdGgpOworICAgZ19mcmVlIChzdmdfaGVpZ2h0KTsKKyAKK0BAIC0xNjcsNyArMTUwLDggQEAgbWFrZV9zeW1ib2xpY19waXhidWYgKGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgKiplcnJvcikKKyAKKyB7CistICBHZGtSR0JBIHIgPSB7IDEsMCwwLDF9LCBnID0gezAsMSwwLDF9OworKyAgY29uc3QgY2hhciByW10gPSAicmdiYSgyNTUsMCwwLDEpIjsKKysgIGNvbnN0IGNoYXIgZ1tdID0gInJnYmEoMCwyNTUsMCwxKSI7CisgICBHZGtQaXhidWYgKmxvYWRlZDsKKyAgIEdka1BpeGJ1ZiAqcGl4YnVmOworICAgaW50IHBsYW5lOworQEAgLTE5NiwxMCArMTgwLDEwIEBAIG1ha2Vfc3ltYm9saWNfcGl4YnVmIChjaGFyICpmaWxlLAorICAgICAgICAqIHRoZSAicmVzdCIsIGFzIGFsbCBjb2xvciBmcmFjdGlvbnMgc2hvdWxkIGFkZCB1cCB0byAxLgorICAgICAgICAqLworICAgICAgIGxvYWRlZCA9IGxvYWRfc3ltYm9saWNfc3ZnIChmaWxlX2RhdGEsIGZpbGVfbGVuLCB3aWR0aCwgaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMCA/ICZyIDogJmcsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDEgPyAmciA6ICZnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAyID8gJnIgOiAmZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMCA/IHIgOiBnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAxID8gciA6IGcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDIgPyByIDogZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpOworICAgICAgIGlmIChsb2FkZWQgPT0gTlVMTCkKKyAgICAgICAgIHJldHVybiBOVUxMOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2Mtc3R1Yi9ndGstZG9jLXN0dWJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjMyNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYyIKK0RFU0NSSVBUSU9OID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYywgYXMgd2UgZG9uJ3Qgd2FudCB0byBidWlsZCB0aGUgQVBJIGRvY3VtZW50YXRpb24iCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitQUk9WSURFUyA9ICJndGstZG9jIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIgorCitTUkNSRVYgPSAiMWRlYTI2NjU5M2VkYjc2NmQ2ZDg5OGM3OTQ1MWVmMTkzZWIxN2NmYSIKK1BWID0gIjEuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiODc4ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRnJvbSA4ZDQ5YTM4NmY0NjdjYmY4ZTA4NDJkMjIxODEyNmY2NDNlNTBmODM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pcXVlIExldWVuYmVyZ2VyIDxkaW1zdGFyQG9wZW5zdXNlLm9yZz4KK0RhdGU6IFN1biwgMjcgTm92IDIwMTEgMTQ6MjQ6NTcgKzAwMDAKK1N1YmplY3Q6IEZpeCBidWlsZCB3aXRoIGdsaWIgMi4zMTogT25seSBnbGliLmggY2FuIGJlICNpbmNsdWRlJ2QuIEZpeGVzIGJ1ZyAjNjY0OTE0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tCitkaWZmIC0tZ2l0IGEvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYyBiL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMKK2luZGV4IDFmN2E0MWYuLjU2YTkyODYgMTAwNjQ0CistLS0gYS9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCisrKysgYi9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCitAQCAtMjgsNyArMjgsNyBAQAorICNpbmNsdWRlICJhbmltYXRpb24uaCIKKyAKKyAjaWZkZWYgSEFWRV9XT1JLSU5HX0FOSU1BVElPTgorLSNpbmNsdWRlIDxnbGliL2d0aW1lci5oPgorKyNpbmNsdWRlIDxnbGliLmg+CisgCisgc3RydWN0IF9BbmltYXRpb25JbmZvIHsKKyAJR1RpbWVyICp0aW1lcjsKKy0tCitjZ2l0IHYwLjkuMC4yCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9zdWJzdGl0dXRlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNTU3YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYyBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCistLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYwkyMDEwLTEwLTAxIDE1OjQyOjM3LjAwMDAwMDAwMCArMDMwMAorKysrIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMJMjAxMy0wOC0yMCAwMjo1MDoyNy45MzA1MTA1NjUgKzAzMDAKK0BAIC0xNjYsNiArMTY2LDkgQEAKKworIEFDX1NVQlNUKERFVkVMT1BNRU5UX0NGTEFHUykKKworK0FDX1NVQlNUKFtleHBvcnRlZF9zeW1ib2xzX3Rlc3RzXSwgW1skKEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMpXV0pCisrQUNfU1VCU1QoW3RvcnR1cmVfdGVzdF90ZXN0c10sIFtbJChUT1JUVVJFX1RFU1RfVEVTVFMpXV0pCisrCisgQU1fQ09ORklHX0hFQURFUihbZW5naW5lcy9zdXBwb3J0L2NvbmZpZy5oXSkKKworIEFDX0NPTkZJR19GSUxFUyhbCitkaWZmIC1OdXJkIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCistLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMC0wOS0xOSAxODoxODoyMS4wMDAwMDAwMDAgKzAzMDAKKysrKyBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQkyMDEzLTA4LTIwIDAyOjUwOjM2Ljg0MjUxMDg2NSArMDMwMAorQEAgLTY2LDcgKzY2LDcgQEAKKyAjIFByZWZpeCB3aXRoIGV4cG9ydGVkXworIEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMgPSAkKHBhdHN1YnN0ICUsZXhwb3J0ZWRfJSwkKEJVSUxEX0VOR0lORVMpKQorCistVEVTVFMgKz0gJChFWFBPUlRFRF9TWU1CT0xTX1RFU1RTKQorK1RFU1RTICs9IEBleHBvcnRlZF9zeW1ib2xzX3Rlc3RzQAorCisKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAQCAtODgsNyArODgsNyBAQAorIFRPUlRVUkVfVEVTVF9URVNUUyA9IHRvcnR1cmVfYnVpbGRpbiAkKHBhdHN1YnN0ICUsdG9ydHVyZV8lLCQoVE9SVFVSRV9URVNUX0VOR0lORVMpKQorCisgIyBBZGQgVE9SVFVSRV9URVNUX0VOR0lORVMgdG8gbGlzdCBvZiB0ZXN0cworLVRFU1RTICs9ICQoVE9SVFVSRV9URVNUX1RFU1RTKQorK1RFU1RTICs9IEB0b3J0dXJlX3Rlc3RfdGVzdHNACisKKyAjIFBvc3NpYmxlIG90aGVyIHRlc3RzOgorICMgIC0gQW4gZXh0ZW5zaXZlIHRoZW1lIHN3aXRjaCB0ZXN0cyB0aGF0IGxvYWRzL3VubG9hZHMgdGhlIGVuZ2luZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXNfMi4yMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXNfMi4yMC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMDQ1NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lc18yLjIwLjIuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHVEsrIHRoZW1lIGVuZ2luZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgZ3RrKyIKKworUFIgPSAicjMiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1zY2hlbWFzIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0ay1lbmdpbmUtLiogXmd0ay10aGVtZS0uKiIKKworUkRFUEVORFNfZ3RrLXRoZW1lLXJlZG1vbmQgPSAiZ3RrLWVuZ2luZS1yZWRtb25kOTUiCitSREVQRU5EU19ndGstdGhlbWUtbWV0YWwgPSAiZ3RrLWVuZ2luZS1tZXRhbCIKK1JERVBFTkRTX2d0ay10aGVtZS1taXN0ID0gImd0ay1lbmdpbmUtbWlzdCIKK1JERVBFTkRTX2d0ay10aGVtZS1jcnV4ID0gImd0ay1lbmdpbmUtY3J1eC1lbmdpbmUiCitSREVQRU5EU19ndGstdGhlbWUtbGlnaHRob3VzZWJsdWUgPSAiZ3RrLWVuZ2luZS1saWdodGhvdXNlYmx1ZSIKK1JERVBFTkRTX2d0ay10aGVtZS10aGluaWNlID0gImd0ay1lbmdpbmUtdGhpbmljZSIKK1JERVBFTkRTX2d0ay10aGVtZS1pbmR1c3RyaWFsID0gImd0ay1lbmdpbmUtaW5kdXN0cmlhbCIKK1JERVBFTkRTX2d0ay10aGVtZS1jbGVhcmxvb2tzID0gImd0ay1lbmdpbmUtY2xlYXJsb29rcyIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXNjaGVtYXMgPSAiJHtkYXRhZGlyfS9ndGstZW5naW5lcy8qLnhtbCIKKworQ0ZMQUdTX3ByZXBlbmQgPSAiLURIQVZFX0FOSU1BVElPTiAiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK2luaGVyaXQgZ25vbWViYXNlCitHTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGVuZ2luZXNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignbGliZGlyJywgVHJ1ZSksICJndGstMi4wLzIuMTAuMC9lbmdpbmVzIikKKyAgICB0aGVtZXNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCAidGhlbWVzIikKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGVuZ2luZXNfcm9vdCwgJ15saWIoLiopXC5zbyQnLCAnZ3RrLWVuZ2luZS0lcycsICdHVEsgJXMgdGhlbWUgZW5naW5lJywgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCB0aGVtZXNfcm9vdCwgJyguKiknLCAnZ3RrLXRoZW1lLSVzJywgJ0dUSyB0aGVtZSAlcycsIGFsbG93X2RpcnM9VHJ1ZSwgZXh0cmFfZGVwZW5kcz0nJykKKyAgICAjIFRPRE86IG1hcmsgdGhlbWUgcGFja2FnZXMgYXMgYXJjaCBhbGwKK30KKworU1JDX1VSSSArPSAiZmlsZTovL2dsaWItMi4zMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjVkZWIyODdiYzYwNzVkYzIxODEyMTMwNjA0YzdkYzRmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTViNjgwYWJjYTZjNzczZWNiODUyNTM1MjFmYTEwMGRkM2I4NTQ5YmVmZWVjYzc1OTViMTAyMDlkNjJkNjZiNSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLXRoZW1lLXRvcnR1cmVyL2d0ay10aGVtZS10b3J0dXJlcl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg5ZmQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR1RLKyBUaGVtZSBiZW5jaG1hcmsgcHJvZ3JhbSIKK0RFUEVORFMgPSAiZ3RrKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93aWtpLmxhcHRvcC5vcmcvZ28vR1RLX2Zvcl9PTFBDIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hcHB3aW5kb3cuYztlbmRsaW5lPTEzO21kNT04YzA5OTIwZGU0NjBjN2VhMWY2NGVlNTY5ODZhYWJkOSIKKworU1JDUkVWID0gIjk5OTYyYWUzOWJiNWFhZGIzMTkyOWIyNWM1OGUxYTA1M2Y5Yzk1NDUiCitQViA9ICIwLjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9kZXYubGFwdG9wLm9yZy9wcm9qZWN0cy9zb2MtZ3RrLyIKK1MgPSAiJHtXT1JLRElSfS9naXQvZ3RrLXRoZW1lLXRvcnR1cmVyIgorCitDRkxBR1MgKz0gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgdG9ydHVyZXIgJHtEfSR7YmluZGlyfQorfQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2hpY29sb3ItaWNvbi10aGVtZS9oaWNvbG9yLWljb24tdGhlbWVfMC4xNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2hpY29sb3ItaWNvbi10aGVtZS9oaWNvbG9yLWljb24tdGhlbWVfMC4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzA0NjMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvaGljb2xvci1pY29uLXRoZW1lL2hpY29sb3ItaWNvbi10aGVtZV8wLjE1LmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiRGVmYXVsdCBpY29uIHRoZW1lIHRoYXQgYWxsIGljb24gdGhlbWVzIGF1dG9tYXRpY2FsbHkgaW5oZXJpdCBmcm9tIgorSE9NRVBBR0UgPSAiaHR0cDovL2ljb24tdGhlbWUuZnJlZWRlc2t0b3Aub3JnL3dpa2kvSGljb2xvclRoZW1lIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYwOGE0NDY4MDk5MTNmYzliM2M3MThmMGVhZWEwNDI2IgorCitTUkNfVVJJID0gImh0dHA6Ly9pY29uLXRoZW1lLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjZhYTJiMzk5M2E4ODNkODUwMTdjN2NjMGNmYzBmYjczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljYzQ1YWMzMzE4YzMxMjEyZWEyZDhjYjk5ZTY0MDIwNzMyMzkzZWU3NjMwZmE2YzE4MTBhZjVmOTg3MDMzY2MiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTA4YWMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkpTT04tR0xpYiBpbXBsZW1lbnRzIGEgZnVsbCBKU09OIHBhcnNlciB1c2luZyBHTGliIGFuZCBHT2JqZWN0IgorREVTQ1JJUFRJT04gPSAiVXNlIEpTT04tR0xpYiBpdCBpcyBwb3NzaWJsZSB0byBwYXJzZSBhbmQgZ2VuZXJhdGUgdmFsaWQgSlNPTlwKKyBkYXRhIHN0cnVjdHVyZXMsIHVzaW5nIGEgRE9NLWxpa2UgQVBJLiBKU09OLUdMaWIgYWxzbyBvZmZlcnMgR09iamVjdCBcCitpbnRlZ3JhdGlvbiwgcHJvdmlkaW5nIHRoZSBhYmlsaXR5IHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgR09iamVjdCBcCitpbnN0YW5jZXMgdG8gYW5kIGZyb20gSlNPTiBkYXRhIHR5cGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9Kc29uR2xpYiIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzMTMxYjA0MTdlY2RlM2RhMWFlNzJhY2NlYWEzNzVjZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjgwZjM1OTNjYjZiZDEzZjE0NjU4MjhlNDZhOWY3NDBlMmU5YmQzY2QyMjU3ODg5NDQyYjNlNjJiZDZkZTA1Y2QiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgbGliX3BhY2thZ2UKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmkvMDAwMS1taXBzLVVzZS1jb21waWxlci1pbnRlcm5hbC1kZWZpbmUtZm9yLWxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTZlNjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGE1ZWZhYTk2ZmQ5MzRlYjI0NWMyMzRhNTI3NWZjZjYyNjk4ZWY5ODYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyIEFwciAyMDE1IDIxOjM4OjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG1pcHM6IFVzZSBjb21waWxlciBpbnRlcm5hbCBkZWZpbmUgZm9yIGxpbnV4CisKK19fbGludXhfXyBpcyBkZWZpbmVkIGJ5IGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yCitsaW51eCBwbGF0Zm9ybXMsIGxldHMgdXNlIGl0CisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvbWlwcy9mZml0YXJnZXQuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taXBzL2ZmaXRhcmdldC5oIGIvc3JjL21pcHMvZmZpdGFyZ2V0LmgKK2luZGV4IDcxN2Q2NTkuLjZmYWEzNTggMTAwNjQ0CistLS0gYS9zcmMvbWlwcy9mZml0YXJnZXQuaAorKysrIGIvc3JjL21pcHMvZmZpdGFyZ2V0LmgKK0BAIC0zMiw3ICszMiw3IEBACisgI2Vycm9yICJQbGVhc2UgZG8gbm90IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGlyZWN0bHkgaW50byB5b3VyIHNvdXJjZS4gIFVzZSBmZmkuaCBpbnN0ZWFkLiIKKyAjZW5kaWYKKyAKKy0jaWZkZWYgbGludXgKKysjaWZkZWYgX19saW51eF9fCisgIyBpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorICNlbGlmIGRlZmluZWQoX19ydGVtc19fKQorIC8qCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmkvZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmkvZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzViZmZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS9maXgtbGliZmZpLmxhLWxvY2F0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGxpYmZmaS0zLjAuMTMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJmZmktMy4wLjEzLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBsaWJmZmktMy4wLjEzL01ha2VmaWxlLmFtCitAQCAtOTgsNyArOTgsNyBAQCBGTEFHU19UT19QQVNTID0gJChBTV9NQUtFRkxBR1MpCisgCisgTUFLRU9WRVJSSURFUz0KKyAKKy10b29sZXhlY2xpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQorK2xpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQorIG5vaW5zdF9MVExJQlJBUklFUyA9IGxpYmZmaV9jb252ZW5pZW5jZS5sYQorIAorIGxpYmZmaV9sYV9TT1VSQ0VTID0gc3JjL3ByZXBfY2lmLmMgc3JjL3R5cGVzLmMgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaV8zLjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MTZjYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJBIHBvcnRhYmxlIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgYGxpYmZmaScgbGlicmFyeSBwcm92aWRlcyBhIHBvcnRhYmxlLCBoaWdoIGxldmVsIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgXAorY29udmVudGlvbnMuICBUaGlzIGFsbG93cyBhIHByb2dyYW1tZXIgdG8gY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuIFwKK3RpbWUuIEZGSSBzdGFuZHMgZm9yIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlLiAgQSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBpcyB0aGUgcG9wdWxhciBuYW1lIGZvciB0aGUgXAoraW50ZXJmYWNlIHRoYXQgYWxsb3dzIGNvZGUgd3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4gIFRoZSBgbGliZmZpJyBcCitsaWJyYXJ5IHJlYWxseSBvbmx5IHByb3ZpZGVzIHRoZSBsb3dlc3QsIG1hY2hpbmUgZGVwZW5kZW50IGxheWVyIG9mIGEgZnVsbHkgZmVhdHVyZWQgZm9yZWlnbiBmdW5jdGlvbiBpbnRlcmZhY2UuICBcCitBIGxheWVyIG11c3QgZXhpc3QgYWJvdmUgYGxpYmZmaScgdGhhdCBoYW5kbGVzIHR5cGUgY29udmVyc2lvbnMgZm9yIHZhbHVlcyBwYXNzZWQgYmV0d2VlbiB0aGUgdHdvIGxhbmd1YWdlcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MzYxMGJiMTc2ODNhMDA4OWVkNjQwNTU0MTZiMmFlMWIiCisKK1NSQ19VUkkgPSAiZnRwOi8vc291cmNld2FyZS5vcmcvcHViL2xpYmZmaS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODNiODk1ODc2MDdlM2ViNjVjNzBkMzYxZjEzYmFiNDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDA2ZWJiOGUxZDlhMjJkMTllMzhkNjNmZGI4Mzk1NDI1M2YzOWJlZGM1ZDQ2MjMyYTA1NjQ1Njg1NzIyY2EzNyIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtYnVpbGRkaXIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGliZmZpLSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L2dsYWRlLWNydWZ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZDU4NjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9jb25maWd1cmUuaW4gbGliZ2xhZGUtMi40LjAvY29uZmlndXJlLmluCistLS0gbGliZ2xhZGUtMi40LjB+L2NvbmZpZ3VyZS5pbgkyMDA0LTA1LTE3IDEyOjM4OjMxLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmdsYWRlLTIuNC4wL2NvbmZpZ3VyZS5pbgkyMDA0LTA3LTI4IDE2OjUzOjA5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE0Nyw2ICsxNDcsMTggQEAKKyBBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTiwgJGhhdmVfcHl0aG9uKQorIEFDX1NVQlNUKFBZVEhPTikKKyAKKytBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjcnVmdCBpbiBsaWJndGtdKQorK0FDX1RSWV9MSU5LKFsKKysjaW5jbHVkZSA8Z3RrL2d0ay5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorK10sICAgICAgWyBndGtfdHJlZV9nZXRfdHlwZSAoKTsgcmV0dXJuIDA7IF0sCisrICAgICAgICBbIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgICAgICBoYXZlX2NydWZ0PXllcyBdLAorKyAgICAgICAgWyBBQ19NU0dfUkVTVUxUKG5vKQorKwkgIEFDX0RFRklORShESVNBQkxFX0NSVUZULCxbbGVhdmUgb3V0IHN1cHBvcnQgZm9yIG9sZCwgYnJva2VuIHdpZGdldHNdKQorKyAgICAgICAgICBoYXZlX2NydWZ0PW5vIF0pCisrQUNfU1VCU1QoRElTQUJMRV9DUlVGVCkKKysKKyBkbmwgYWRkIGRlYnVnZ2luZyBvcHRpb25zIC4uLgorIGNoYW5nZXF1b3RlKCwpZG5sCisgaWYgdGVzdCAieCRHQ0MiID0geHllczsgdGhlbgorT25seSBpbiBsaWJnbGFkZS0yLjQuMDogY29uZmlndXJlLmluLm9yaWcKK2RpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYyBsaWJnbGFkZS0yLjQuMC9nbGFkZS9nbGFkZS1ndGsuYworLS0tIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYwkyMDA0LTAzLTEzIDEzOjQ3OjM1LjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmdsYWRlLTIuNC4wL2dsYWRlL2dsYWRlLWd0ay5jCTIwMDQtMDctMjggMTY6NTM6NTIuMDAwMDAwMDAwICswMTAwCitAQCAtMjEzLDYgKzIxMyw4IEBACisgCWd0a19jbGlzdF9jb2x1bW5fdGl0bGVzX2hpZGUgKEdUS19DTElTVCAodykpOworIH0KKyAKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKysKKyBzdGF0aWMgdm9pZAorIHRyZWVfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCisgCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTIzOCw2ICsyNDAsOCBAQAorICAgICBndGtfdHJlZV9zZXRfdmlld19saW5lcyAoR1RLX1RSRUUgKHcpLCBCT09MICh2YWx1ZSkpOworIH0KKyAKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCisgCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTI1NCw2ICsyNTgsNyBAQAorICAgICBndGtfY2hlY2tfbWVudV9pdGVtX3NldF9zaG93X3RvZ2dsZSAoR1RLX0NIRUNLX01FTlVfSVRFTSAodyksIEJPT0wgKHZhbHVlKSk7CisgfQorIAorKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorIHN0YXRpYyB2b2lkCisgdGV4dF9zZXRfdGV4dCAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorIAkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCitAQCAtMjYyLDYgKzI2Nyw3IEBACisgCisgICAgIGd0a19lZGl0YWJsZV9pbnNlcnRfdGV4dCAoR1RLX0VESVRBQkxFICh3KSwgdmFsdWUsIC0xLCAmcG9zKTsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIHZvaWQKKyByYWRpb19tZW51X2l0ZW1fc2V0X2dyb3VwIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCitAQCAtMTEyNSwxMyArMTEzMSwxNyBAQAorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGNsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNoYWRvd190eXBlIiwgY2xpc3Rfc2V0X3NoYWRvd190eXBlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2hvd190aXRsZXMiLCBjbGlzdF9zZXRfc2hvd190aXRsZXMpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInNlbGVjdGlvbl9tb2RlIiwgdHJlZV9zZXRfc2VsZWN0aW9uX21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInZpZXdfbW9kZSIsIHRyZWVfc2V0X3ZpZXdfbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9UUkVFLCAidmlld19saW5lIiwgdHJlZV9zZXRfdmlld19saW5lKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NIRUNLX01FTlVfSVRFTSwgImFsd2F5c19zaG93X3RvZ2dsZSIsCisgCQkJCWNoZWNrX21lbnVfaXRlbV9zZXRfYWx3YXlzX3Nob3dfdG9nZ2xlKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RFWFQsICJ0ZXh0IiwgdGV4dF9zZXRfdGV4dCk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9SQURJT19NRU5VX0lURU0sICJncm91cCIsCisgCQkJCXJhZGlvX21lbnVfaXRlbV9zZXRfZ3JvdXApOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVE9PTEJBUiwgInRvb2x0aXBzIiwgdG9vbGJhcl9zZXRfdG9vbHRpcHMpOworQEAgLTEyODgsOCArMTI5OCwxMCBAQAorIAkJCSAgIGdsYWRlX3N0YW5kYXJkX2J1aWxkX2NoaWxkcmVuLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URUFST0ZGX01FTlVfSVRFTSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RFWFQsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URVhUX1ZJRVcsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9USVBTX1FVRVJZLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCitAQCAtMTMwNCw4ICsxMzE2LDEwIEBACisgCQkJICAgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfY2hpbGRyZW4sIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RPT0xfQlVUVE9OLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVFJFRSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNlbmRpZgorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RSRUVfVklFVywgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1ZCVVRUT05fQk9YLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzRjMDkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaApAQCAtMCwwICsxLDUwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9jb25maWd1cmUuaW4gbGliZ2xhZGUtMi40LjIvY29uZmlndXJlLmluCistLS0gbGliZ2xhZGUtMi40LjIub3JpZy9jb25maWd1cmUuaW4JMjAwNS0wMi0xMSAxMjo0Mjo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9jb25maWd1cmUuaW4JMjAwNS0wMy0yMiAwMToyMjowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MiwxMSArNTIsMzMgQEAKKyBBQ19QQVRIX1BST0coUEtHX0NPTkZJRywgcGtnLWNvbmZpZywgbm8pCisgCisgUEtHX0NIRUNLX01PRFVMRVMoTElCR0xBREUsIFtkbmwKKy0gIGxpYnhtbC0yLjAgPj0gcmVxdWlyZWRfbGlieG1sX3ZlcnNpb24gZG5sCisgICBhdGsgPj0gcmVxdWlyZWRfYXRrX3ZlcnNpb24gZG5sCisgICBndGsrLTIuMCA+PSByZXF1aXJlZF9ndGtfdmVyc2lvbiBkbmwKKyAgIGdsaWItMi4wID49IHJlcXVpcmVkX2dsaWJfdmVyc2lvbl0pCisgCisrZGlzYWJsZV94bWwyPW5vCisrQUNfQVJHX1dJVEgoW2xpYnhtbDJdLAorKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1saWJ4bWwyXSwgW0Rvbid0IHVzZSBsaWJ4bWwyLCB1c2UgR2xpYidzIEdNYXJrdXBQYXJzZXIgaW5zdGVhZF0pLAorKyAgW2Rpc2FibGVfeG1sMj15ZXNdLAorKyAgW2Rpc2FibGVfeG1sMj1ub10pCisrCisrQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBhcmUgdXNpbmcgbGlieG1sMl0pCisraWYgdGVzdCAieCRkaXNhYmxlX3htbDIiID09ICJ4bm8iOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKHllcykKKysgIFBLR19DSEVDS19NT0RVTEVTKFhNTDIsIGxpYnhtbC0yLjAgPj0gMi40LjEwKQorKyAgUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMj0ibGlieG1sLTIuMCIKKysgIExJQkdMQURFX0NGTEFHUz0iJExJQkdMQURFX0NGTEFHUyAkWE1MMl9DRkxBR1MiCisrICBMSUJHTEFERV9MSUJTPSIkTElCR0xBREVfTElCUyAkWE1MMl9MSUJTIgorK2Vsc2UKKysgIExJQkdMQURFX0NGTEFHUz0iJExJQkdMQURFX0NGTEFHUyAtRFVTRV9HTUFSS1VQX1BBUlNFUiIKKysgIFBLR0NGR19SRVFVSVJFX0xJQlhNTDI9IiIKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKysKKytBQ19TVUJTVChYTUwyX0xJQlMpCisrQUNfU1VCU1QoWE1MMl9DRkxBR1MpCisrQUNfU1VCU1QoUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMikKKysKKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBuYXRpdmUgV2luMzJdKQorIGNhc2UgIiRob3N0IiBpbgorICAgKi0qLW1pbmd3KikKK0BAIC0xMTYsNiArMTM4LDIxIEBACisgICBmaQorIGZpCisgCisraWYgdGVzdCAieCRkaXNhYmxlX3htbDIiID09ICJ4eWVzIjsgdGhlbgorKyAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCisrICBlY2hvICIgIFlvdSBjaG9zZSB0byBkaXNhYmxlIGxpYnhtbDIgYW5kIHVzZSBHbGliJ3MiCisrICBlY2hvICIgIEdNYXJrdXBQYXJzZXIgaW5zdGVhZC4iIAorKyAgZWNobyAgCisrICBlY2hvICIgIFBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCB1c2luZyBsaWJnbGFkZSB3aXRoIgorKyAgZWNobyAiICBHTWFya3VwUGFyc2VyIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIG9ubHkuIgorKyAgZWNobworKyAgZWNobyAiICBQbGVhc2UgcG9zdCBwcm9ibGVtcyBvciBzdWNjZXNzIHN0b3JpZXMgdG8iCisrICBlY2hvICIgIHRoZSBnbGFkZS1kZXZlbCBtYWlsaW5nIGxpc3QuIFRoYW5rIHlvdS4iCisrICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKytmaQorKworKworKworIEdUS19ET0NfQ0hFQ0soMS4wKQorIAorIGRubCBnZXR0ZXh0IHN0dWZmIC4uLiB0aGVyZSBpcyBubyBtZXNzYWdlIGNhdGFsb2cgZm9yIGxpYmdsYWRlIC0tIGxpYmdsYWRlCitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9nbGFkZS9nbGFkZS1wYXJzZXIuYyBsaWJnbGFkZS0yLjQuMi9nbGFkZS9nbGFkZS1wYXJzZXIuYworLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMJMjAwNC0xMS0xMSAxMTo1NjoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9nbGFkZS9nbGFkZS1wYXJzZXIuYwkyMDA1LTAzLTIyIDAxOjIwOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDcgKzM0LDE1IEBACisgIyAgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbiwgU3RyaW5nKSAoU3RyaW5nKQorICNlbmRpZgorIAorLSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisrI2lmZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKyMgIGluY2x1ZGUgPHpsaWIuaD4KKysjZWxzZQorKyMgIGluY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKysjZW5kaWYKKysKKysjaWZkZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrIyAgZGVmaW5lIHhtbENoYXIgZ2NoYXIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiZ2xhZGUtcGFyc2VyLmgiCisgI2luY2x1ZGUgImdsYWRlLXByaXZhdGUuaCIKK0BAIC01MDgsNyArNTE2LDkgQEAKKyAgICAgY2FzZSBQQVJTRVJfU1RBUlQ6CisgCWlmICghc3RyY21wKG5hbWUsICJnbGFkZS1pbnRlcmZhY2UiKSkgeworIAkgICAgc3RhdGUtPnN0YXRlID0gUEFSU0VSX0dMQURFX0lOVEVSRkFDRTsKKy0jaWYgMAorKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrICNpZiAwCisgCSAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBYTUwgbmFtZXNwYWNlICovCisgCSAgICBmb3IgKGkgPSAwOyBhdHRycyAmJiBhdHRyc1tpXSAhPSBOVUxMOyBpICs9IDIpIHsKKyAJCWlmICghc3RyY21wKGF0dHJzW2ldLCAieG1sbnMiKSAmJgorQEAgLTUxOCw3ICs1MjgsOSBAQAorIAkJICAgIGdfd2FybmluZygidW5rbm93biBhdHRyaWJ1dGUgYCVzJyBmb3IgPGdsYWRlLWludGVyZmFjZT4iLAorIAkJCSAgICAgIGF0dHJzW2ldKTsKKyAJICAgIH0KKysgI2VuZGlmCisgI2VuZGlmCisrCisgCX0gZWxzZSB7CisgCSAgICBnX3dhcm5pbmcoIkV4cGVjdGVkIDxnbGFkZS1pbnRlcmZhY2U+LiAgR290IDwlcz4uIiwgbmFtZSk7CisgCSAgICBzdGF0ZS0+cHJldl9zdGF0ZSA9IHN0YXRlLT5zdGF0ZTsKK0BAIC0xMDYzLDEyICsxMDc1LDE4IEBACisgICAgIH0KKyB9CisgCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgeG1sRW50aXR5UHRyCisgZ2xhZGVfcGFyc2VyX2dldF9lbnRpdHkoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgeG1sQ2hhciAqbmFtZSkKKyB7CisgICAgIHJldHVybiB4bWxHZXRQcmVkZWZpbmVkRW50aXR5KG5hbWUpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBnbGFkZV9wYXJzZXJfd2FybmluZyhHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKKyB7CitAQCAtMTA3OSw2ICsxMDk3LDEwIEBACisgICAgIHZhX2VuZChhcmdzKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZ2xhZGVfcGFyc2VyX2Vycm9yKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQorIHsKK0BAIC0xMDg5LDYgKzExMTEsMTAgQEAKKyAgICAgdmFfZW5kKGFyZ3MpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBnbGFkZV9wYXJzZXJfZmF0YWxfZXJyb3IoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCisgeworQEAgLTEwOTksNiArMTEyNSwxMCBAQAorICAgICB2YV9lbmQoYXJncyk7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgeG1sU0FYSGFuZGxlciBnbGFkZV9wYXJzZXIgPSB7CisgICAgIChpbnRlcm5hbFN1YnNldFNBWEZ1bmMpTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGludGVybmFsU3Vic2V0ICovCisgICAgIChpc1N0YW5kYWxvbmVTQVhGdW5jKU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzU3RhbmRhbG9uZSAqLworQEAgLTExMjYsNiArMTE1Niw4MiBAQAorICAgICAoZmF0YWxFcnJvclNBWEZ1bmMpZ2xhZGVfcGFyc2VyX2ZhdGFsX2Vycm9yLCAgICAgICAvKiBmYXRhbEVycm9yICovCisgfTsKKyAKKysjZWxzZSAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50X3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICoqYXR0cl9uYW1lcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJfdmFsdWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnJvcikKKyt7CisrICAgIGd1aW50IGkgPSAwOworKworKyAgICAvKiBQYWNrIGF0dHJpYnV0ZSBuYW1lcy92YWx1ZXMgZnJvbSB0d28gc2VwYXJhdGUKKysgICAgICogIGFycmF5cyAoR01hcmt1cFBhcnNlciBzdHlsZSkgaW50byBvbmUgc2luZ2xlCisrICAgICAqICBhcnJheSAobGlieG1sIFNBWFBhcnNlciBzdHlsZSkuIFRoaXMgaXMgbm90CisrICAgICAqICB2ZXJ5IGVmZmljaWVudCwgYnV0IHdlIGRvIGl0IHRvIG1ha2UgdGhlCisrICAgICAqICBHTWFya3VwUGFyc2VyIGNvZGUgYXMgbGl0dGxlIGludmFzaXZlIGFzCisrICAgICAqICBwb3NzaWJsZS4gKi8KKysKKysgICAgd2hpbGUgKGF0dHJfbmFtZXNbaV0gIT0gTlVMTCkgeworKyAgICAgICsraTsKKysgICAgfQorKworKyAgICBpZiAoMSkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2NoYXIgKmF0dHJbKGkqMikrMV07CisrICAgICAgICBndWludCBqLCBrOworKyAgICAgICAKKysgICAgICAgIGZvciAoaj0wLCBrPTA7ICBrIDwgaTsgIGogKz0gMikKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdHRyW2pdID0gYXR0cl9uYW1lc1trXTsKKysgICAgICAgICAgICBhdHRyW2orMV0gPSBhdHRyX3ZhbHVlc1trXTsKKysgICAgICAgICAgICArK2s7CisrICAgICAgICB9CisrICAgICAgICBhdHRyW2kqMl0gPSBOVUxMOworKworKyAgICAgICAgZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnQoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIG5hbWUsIGF0dHIpOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50X3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnIpCisreworKyAgICBnbGFkZV9wYXJzZXJfZW5kX2VsZW1lbnQoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIG5hbWUpOworK30KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzX3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpjaGFycywgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAgICAgICAgICAgICAgICBsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAqKmVycikKKyt7CisrICAgIGdsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzKChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBjaGFycywgKGludCkgbGVuKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfZXJyb3IoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgR0Vycm9yICplcnIsIGdwb2ludGVyIGRhdGEpCisreworKyAgICBnX2xvZygiR2xhZGUtUGFyc2VyIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwsICIlcyIsIGVyci0+bWVzc2FnZSk7CisrfQorKworK3N0YXRpYyBjb25zdCBHTWFya3VwUGFyc2VyICAgZ2xhZGVfcGFyc2VyID0geworKyAgICBnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudF93cmFwcGVyLCAgLyogZWxlbWVudCBvcGVuICAgKi8KKysgICAgZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50X3dyYXBwZXIsICAgIC8qIGVsZW1lbnQgY2xvc2UgICovCisrICAgIGdsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzX3dyYXBwZXIsICAgICAvKiB0ZXh0IGNvbnRlbnQgICAqLworKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGFzc3Rocm91Z2ggICAgKi8KKysgICAgZ2xhZGVfcGFyc2VyX2Vycm9yLCAgICAgICAgICAgICAgICAgIC8qIHBhcnNlIGVycm9yICAgICovCisrfTsKKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisgc3RhdGljIHZvaWQKKyB3aWRnZXRfaW5mb19mcmVlKEdsYWRlV2lkZ2V0SW5mbyAqaW5mbykKKyB7CitAQCAtMTE5MSw2ICsxMjk3LDkgQEAKKyAgKgorICAqIFJldHVybnM6IHRoZSBHbGFkZUludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBYTUwgZmlsZS4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIEdsYWRlSW50ZXJmYWNlICoKKyBnbGFkZV9wYXJzZXJfcGFyc2VfZmlsZShjb25zdCBnY2hhciAqZmlsZSwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyB7CitAQCAtMTIyMiw2ICsxMzMxLDMxIEBACisgICAgIHJldHVybiBzdGF0ZS5pbnRlcmZhY2U7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworK0dsYWRlSW50ZXJmYWNlICoKKytnbGFkZV9wYXJzZXJfcGFyc2VfZmlsZShjb25zdCBnY2hhciAqZmlsZSwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrICAgIEdsYWRlSW50ZXJmYWNlICAqaW50ZXJmYWNlOworKyAgICBHRXJyb3IgICAgICAgICAgKmVyciAgICAgPSBOVUxMOworKyAgICBnY2hhciAgICAgICAgICAgKmNvbnRlbnQgPSBOVUxMOworKyAgICBnc2l6ZSAgICAgICAgICAgIGNsZW47CisrCisrICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlLCAmY29udGVudCwgJmNsZW4sICZlcnIpKSB7CisrICAgICAgICBnX3dhcm5pbmcoImNvdWxkIG5vdCBsb2FkIGdsYWRlIGZpbGU6ICVzIiwgZXJyLT5tZXNzYWdlKTsKKysgICAgICAgIGdfZXJyb3JfZnJlZShlcnIpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgaW50ZXJmYWNlID0gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb250ZW50LCAoZ2ludCkgY2xlbiwgZG9tYWluKTsKKysKKysgICAgZ19mcmVlKGNvbnRlbnQpOworKworKyAgICByZXR1cm4gaW50ZXJmYWNlOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisgLyoqCisgICogZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcgorICAqIEBidWZmZXI6IGEgYnVmZmVyIGluIG1lbW9yeSBjb250YWluaW5nIFhNTCBkYXRhLgorQEAgLTEyMzcsNiArMTM3MSw5IEBACisgICoKKyAgKiBSZXR1cm5zOiB0aGUgR2xhZGVJbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgWE1MIGJ1ZmZlci4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIEdsYWRlSW50ZXJmYWNlICoKKyBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorIHsKK0BAIC0xMjYzLDYgKzE0MDAsMTYxIEBACisgICAgIHJldHVybiBzdGF0ZS5pbnRlcmZhY2U7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKworK3N0YXRpYyBHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrCUdNYXJrdXBQYXJzZUNvbnRleHQgICpjb250ZXh0OworKwlHbGFkZVBhcnNlU3RhdGUgICAgICAgc3RhdGUgPSB7IDAgfTsKKysJR0Vycm9yICAgICAgICAgICAgICAgKmVyciAgID0gTlVMTDsKKysKKysJc3RhdGUuaW50ZXJmYWNlID0gTlVMTDsKKysJaWYgKGRvbWFpbikKKysJCXN0YXRlLmRvbWFpbiA9IGRvbWFpbjsKKysJZWxzZQorKwkJc3RhdGUuZG9tYWluID0gdGV4dGRvbWFpbihOVUxMKTsKKysKKysJLyogRklYTUU6IFRoaXMgc3Ryc3RyKCkgaXMgbm90IHNhZmUsIGFzIGl0IGlnbm9yZXMgdGhlIGxlbgorKwkgKiAgICAgICAgYXJndW1lbnQgYW5kIGFzc3VtZXMgdGhlIGJ1ZmZlciBpcyBOVUwtdGVybWluYXRlZCAqLworKwlpZiAoc3Ryc3RyKGJ1ZmZlciwgIjw/eG1sIikgPT0gTlVMTCkgeworKwkJZ193YXJuaW5nKCJObyBYTUwgaGVhZGVyIGZvdW5kIGluIGRvY3VtZW50ISIpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJY29udGV4dCA9IGdfbWFya3VwX3BhcnNlX2NvbnRleHRfbmV3KCZnbGFkZV9wYXJzZXIsIChHTWFya3VwUGFyc2VGbGFncykgMCwgJnN0YXRlLCBOVUxMKTsKKysKKysJZ2xhZGVfcGFyc2VyX3N0YXJ0X2RvY3VtZW50KCZzdGF0ZSk7CisrCisrCWlmICghZ19tYXJrdXBfcGFyc2VfY29udGV4dF9wYXJzZShjb250ZXh0LCBidWZmZXIsIChnc3NpemUpIGxlbiwgJmVycikpIHsKKysJCWdfd2FybmluZygiZG9jdW1lbnQgbm90IHdlbGwgZm9ybWVkOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCQlnX2Vycm9yX2ZyZWUoZXJyKTsKKysJCWlmIChzdGF0ZS5pbnRlcmZhY2UpCisrCQkJZ2xhZGVfaW50ZXJmYWNlX2Rlc3Ryb3kgKHN0YXRlLmludGVyZmFjZSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlnbGFkZV9wYXJzZXJfZW5kX2RvY3VtZW50KCZzdGF0ZSk7CisrCisrCWlmIChzdGF0ZS5zdGF0ZSAhPSBQQVJTRVJfRklOSVNIKSB7CisrCQlnX3dhcm5pbmcoImRpZCBub3QgZmluaXNoIGluIFBBUlNFUl9GSU5JU0ggc3RhdGUhIik7CisrCisrCQlpZiAoc3RhdGUuaW50ZXJmYWNlKQorKwkJCWdsYWRlX2ludGVyZmFjZV9kZXN0cm95KHN0YXRlLmludGVyZmFjZSk7CisrCisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlyZXR1cm4gc3RhdGUuaW50ZXJmYWNlOworK30KKysKKytzdHJ1Y3QgX2d6aXBfcmZjMTk1Ml9oZHIKKyt7CisrCWd1aW50OAlpZDEsIGlkMiwgY20sIGZsYWdzOworKwlndWludDMyIG10aW1lOworKwlndWludDggIHhmbGFnczsKKysJZ3VpbnQ4ICBvczsKKyt9OworKworK3N0YXRpYyBHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2d6aXBwZWRfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorK3sKKysJc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyICpoZHIgPSAoc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyKilidWZmZXI7CisrCXN0cnVjdCB6X3N0cmVhbV9zICAgICAgICAgenN0cmVhbTsKKysJR2xhZGVJbnRlcmZhY2UgICAgICAgICAgICppbnRlcmZhY2U7CisrCWNvbnN0IGd1aW50OCAgICAgICAgICAgICAqY2J1ZjsgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSAqLworKwlndWludDggICAgICAgICAgICAgICAgICAgKmRlY29tcHJlc3NfYnVmOworKwlndWxvbmcgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3NfbGVuID0gMDsKKysJZ2ludCAgICAgICAgICAgICAgICAgICAgICByZXQ7CisrCisrCWdfYXNzZXJ0KGhkciAhPSBOVUxMICYmIGhkci0+aWQxID09IDB4MWYgJiYgaGRyLT5pZDIgPT0gMHg4Yik7CisrCisrCWlmIChoZHItPmNtICE9IFpfREVGTEFURUQpIHsKKysJCWdfd2FybmluZygiVW5rbm93biBkZWNvbXByZXNzaW9uIG1ldGhvZCAldSIsIChndWludCkgaGRyLT5jbSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwkvKiBVbmNvbXByZXNzZWQgc2l6ZSAobW9kdWxvIDJeMzIpIGlzIGxhc3QKKysJICogIDQgYnl0ZXMgb2YgZ3ppcHBlZCBmaWxlLCBhbmQgbGl0dGxlIGVuZGlhbi4KKysJICogIFNlZSBSRkMgMTk1MiAqLworKwlkZWNvbXByZXNzX2xlbiA9IEdVSU5UMzJfRlJPTV9MRSgqKChndWludDMyKikoKChndWludDgqKWJ1ZmZlcikgKyBsZW4gLSA0KSkpOworKworKwkvKiBwYXJhbm9pZCBtb2RlOiBnbGFkZSBmaWxlcyA+IDVNQiBhcmUgdW5saWtlbHkgKi8KKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGVjb21wcmVzc19sZW4gPCA1KjEwMjQqMTAyNCwgTlVMTCk7CisrCisrCWRlY29tcHJlc3NfYnVmID0gZ19tYWxsb2MwKGRlY29tcHJlc3NfbGVuICsgMSk7IC8qICsxIGZvciBOVUwtdGVybWluYXRvciAqLworKworKwkvKiBmaW5kIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSwgc2tpcHBpbmcgaGVhZGVyIHN0dWZmICovCisrCWNidWYgPSAoZ3VpbnQ4KilidWZmZXIgKyAxMDsKKysJaWYgKGhkci0+ZmxhZ3MgJiAweDA0KSB7CisrCQlndWludDE2IHhsZW4gPSBHVUlOVDE2X0ZST01fTEUoKigoZ3VpbnQxNiopY2J1ZikpOworKwkJY2J1ZiArPSB4bGVuICsgMjsKKysJfQorKwlpZiAoaGRyLT5mbGFncyAmIDB4MDgpIHsKKysJCWd1aW50MTYgb25hbWVsZW4gPSBzdHJsZW4oY2J1Zik7CisrCQljYnVmICs9IG9uYW1lbGVuICsgMTsKKysJfQorKwlpZiAoaGRyLT5mbGFncyAmIDB4MTApIHsKKysJCWd1aW50MTYgY29tbWVudGxlbiA9IHN0cmxlbihjYnVmKTsKKysJCWNidWYgKz0gY29tbWVudGxlbiArIDE7CisrCX0KKysJaWYgKGhkci0+ZmxhZ3MgJiAweDAyKQorKwl7CisrCQljYnVmICs9IDI7IC8qIHNraXAgaGVhZGVyIENSQzE2ICovCisrCX0KKysKKysJenN0cmVhbS5uZXh0X2luICA9ICh2b2lkKiljYnVmOworKwl6c3RyZWFtLmF2YWlsX2luID0gKHVMb25nZikgbGVuIC0gKCh2b2lkKiljYnVmLSh2b2lkKilidWZmZXIpIC0gNCAtIDQgKzE7IAorKwl6c3RyZWFtLm5leHRfb3V0ID0gZGVjb21wcmVzc19idWY7CisrCXpzdHJlYW0uYXZhaWxfb3V0PSBkZWNvbXByZXNzX2xlbjsKKysJenN0cmVhbS56YWxsb2MgICA9IFpfTlVMTDsKKysJenN0cmVhbS56ZnJlZSAgICA9IFpfTlVMTDsKKysJenN0cmVhbS5vcGFxdWUgICA9IFpfTlVMTDsKKysKKysJcmV0ID0gaW5mbGF0ZUluaXQyKCZ6c3RyZWFtLCAtTUFYX1dCSVRTKTsKKysKKysJaWYgKHJldCAhPSBaX09LKSB7CisrCQlnX3dhcm5pbmcoImluZmxhdGVJbml0MigpIGZhaWxlZC4gemxpYiBlcnJvciBjb2RlOiAlZCIsIHJldCk7CisrCQlnX2ZyZWUoZGVjb21wcmVzc19idWYpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJcmV0ID0gaW5mbGF0ZSgmenN0cmVhbSwgWl9GSU5JU0gpOworKworKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworKwkJZ193YXJuaW5nKCJ6bGliIGRlY29tcHJlc3Npb24gZmFpbGVkLiB6bGliIGVycm9yIGNvZGU6ICVkIiwgcmV0KTsKKysJCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlpbnRlcmZhY2UgPSBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGRlY29tcHJlc3NfYnVmLCBkZWNvbXByZXNzX2xlbiwgZG9tYWluKTsKKysKKysJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKKysKKysJcmV0dXJuIGludGVyZmFjZTsKKyt9CisrCisrR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKwlnX3JldHVybl92YWxfaWZfZmFpbChidWZmZXIgIT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbiA+IDAsIE5VTEwpOworKworKwkvKiBDaGVjayBpZiBidWZmZXIgaXMgZ3ppcHBlZCAqLworKwlpZiAoYnVmZmVyWzBdID09IDB4MWYgJiYgYnVmZmVyWzFdID09IChnY2hhcikweDhiKSB7CisrCQlyZXR1cm4gZ2xhZGVfcGFyc2VyX3BhcnNlX2d6aXBwZWRfYnVmZmVyKGJ1ZmZlciwgbGVuLCBkb21haW4pOworKwl9CisrCisrCS8qIEJ1ZmZlciBpcyBjbGVhcnRleHQuICovCisrCXJldHVybiBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGJ1ZmZlciwgbGVuLCBkb21haW4pOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgdm9pZAorIGR1bXBfd2lkZ2V0KHhtbE5vZGUgKnBhcmVudCwgR2xhZGVXaWRnZXRJbmZvICppbmZvLCBnaW50IGluZGVudCkKKyB7CitAQCAtMTM4Miw2ICsxNjc0LDggQEAKKyAJeG1sTm9kZUFkZENvbnRlbnQod2lkZ2V0LCAiICAiKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKyAvKioKKyAgKiBnbGFkZV9pbnRlcmZhY2VfZHVtcAorICAqIEBpbnRlcmZhY2U6IHRoZSBHbGFkZUludGVyZmFjZQorQEAgLTEzOTAsNiArMTY4NCw5IEBACisgICogVGhpcyBmdW5jdGlvbiBkdW1wcyB0aGUgY29udGVudHMgb2YgYSBHbGFkZUludGVyZmFjZSBpbnRvIGEgZmlsZSBhcworICAqIFhNTC4gIEl0IGlzIGludGVuZGVkIG1haW5seSBhcyBhIGRlYnVnZ2luZyB0b29sLgorICAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgdm9pZAorIGdsYWRlX2ludGVyZmFjZV9kdW1wKEdsYWRlSW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IGdjaGFyICpmaWxlbmFtZSkKKyB7CitAQCAtMTQyOCw2ICsxNzI1LDE3IEBACisgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyB9CisgCisrI2Vsc2UgLyogZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrdm9pZAorK2dsYWRlX2ludGVyZmFjZV9kdW1wKEdsYWRlSW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IGdjaGFyICpmaWxlbmFtZSkKKyt7CisrICAgIGdfd2FybmluZygiZ2xhZGVfaW50ZXJmYWNlX2R1bXAoKSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIGxpYnhtbDIuIik7CisrfQorKworKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKysKKyAjaWYgMAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9saWJnbGFkZS0yLjAucGMuaW4gbGliZ2xhZGUtMi40LjIvbGliZ2xhZGUtMi4wLnBjLmluCistLS0gbGliZ2xhZGUtMi40LjIub3JpZy9saWJnbGFkZS0yLjAucGMuaW4JMjAwMS0xMi0xMiAxNToyODoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9saWJnbGFkZS0yLjAucGMuaW4JMjAwNS0wMy0yMiAwMToyMDowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMSw3ICsxMSw3IEBACisgTmFtZTogTGliZ2xhZGUKKyBEZXNjcmlwdGlvbjogYSBsaWJyYXJ5IGZvciBkeW5hbWljYWxseSBsb2FkaW5nIEdMQURFIGludGVyZmFjZSBmaWxlcworIFZlcnNpb246IEBWRVJTSU9OQAorLVJlcXVpcmVzOiBndGsrLTIuMCBsaWJ4bWwtMi4wCisrUmVxdWlyZXM6IGd0aystMi4wIEBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sZ2xhZGUtMi4wCisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vbGliZ2xhZGUtMi4wCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViMmVjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVc2luZyBAUFlUSE9OQCBmb3IgdGhpcyBwYXRoIHdvdWxkIHJlc3VsdCBpbiB0aGUgYnVpbGQgc3lzdGVtIHB5dGhvbiBiZWluZyAKK3JlZmVycmVkIHRvLiBJbnN0ZWFkIHdlIHdhbnQgdG8gbG9jYXRlIHB5dGhvbiBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbiBsaWJnbGFkZS0yLjYuNC9saWJnbGFkZS1jb252ZXJ0LmluCistLS0gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbgkyMDExLTA5LTIyIDEwOjE4OjI4Ljk5MTE2NDAwMyArMDgwMAorKysrIGxpYmdsYWRlLTIuNi40L2xpYmdsYWRlLWNvbnZlcnQuaW4JMjAxMS0wOS0yMiAxMDoxODo1NS40MzExNjQwMDMgKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBZVEhPTkAKKysjIS91c3IvYmluL2VudiBweXRob24KKyAjIC0qLSBtb2RlOiBweXRob24gLSotCisgCisgIyB5ZXMsIHRoaXMgcmVxdWlyZXMgcHl0aG9uIDIueCBhbmQgYW4gWE1MIHBhcnNlciBtb2R1bGUgKGVnLiBQeUV4cGF0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZV8yLjYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTI2N2NhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJSdW50aW1lIHN1cHBvcnQgZm9yIHRoZSBHVEsrIGludGVyZmFjZSBidWlsZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2xpYmdsYWRlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGFkZS9nbGFkZS5oO2VuZGxpbmU9MjI7bWQ1PWEwNGY0NjFjOTY0YmE0YjU3YTE3MmQxZmJjZDhmOGZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsYWRlL2dsYWRlLWd0ay5jO2VuZGxpbmU9MjI7bWQ1PTc2NmY5OTM0MzNlMjY0MmZlYzg3OTM2ZDMxOTk5MGZmIgorCitTRUNUSU9OID0gImxpYnMiCitQUiA9ICJyNSIKK0RFUEVORFMgPSAiemxpYiBnZGstcGl4YnVmIGd0aysiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYworR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZ2xhZGUtY3J1ZnQucGF0Y2ggZmlsZTovL25vLXhtbDIucGF0Y2ggZmlsZTovL3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDE3NzZiNDBmNGUxNjZiNWU5YzEwN2YxYzhmZTQxMzkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI2NDM2MWU3NjQ3ODM5ZDM2ZWQ4MzM2ZDk5MmZkMjEwZDNlODEzOTg4MjI2OWJlZDQ3ZGM0Njc0OTgwMTY1ZGVjIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJ4bWwyIgorCitDRkxBR1MgKz0gIi1seiIKKworUEFDS0FHRVMgKz0gIiAke1BOfS1kYXRhIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK0ZJTEVTXyR7UE59LWRhdGEgPSAiJHtkYXRhZGlyfS94bWwvbGliZ2xhZGUvZ2xhZGUtMi4wLmR0ZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2xpYmdsYWRlLWNvbnZlcnQiCisjUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZGF0YSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYm5vdGlmeS9saWJub3RpZnlfMC43LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDE4OGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3Igc2VuZGluZyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgdG8gYSBub3RpZmljYXRpb24gZGFlbW9uIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitERVBFTkRTID0gImRidXMgZ3RrKzMgZGJ1cy1nbGliIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImE0OTk3MDE5ZDA4ZjQ2ZjNiZjU3Yjc4ZTZmNzk1YTU5IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMGVmNjFjYTQwMGQzMGUyODIxNzk3OWJmYTBlNzNhNzQwNmIxOWMzMmRkNzYxNTA2NTRlYzViMmJkZjQ3ZDgzNyIKKworIyB0aGVyZSB3ZXJlIHRpbWVzLCB3ZSBoYWQgdHdvIHZlcnNpb25zIG9mIGxpYm5vdGlmeSAob2UtY29yZSBsaWJub3RpZnk6MC42LnggLworIyBtZXRhLWdub21lIGxpYm5vdGlmeTM6IDAuNy54KQorUFJPVklERVMgKz0gImxpYm5vdGlmeTMiCitSUFJPVklERVNfJHtQTn0gKz0gImxpYm5vdGlmeTMiCitSQ09ORkxJQ1RTXyR7UE59ICs9ICJsaWJub3RpZnkzIgorUlJFUExBQ0VTXyR7UE59ICs9ICJsaWJub3RpZnkzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmcvZ3RrLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmFmNDgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSAxYzM4ZDU3MGIzM2YyYjAzNmQ0ZmE0N2U5MjliYjJiMzI2NGUzOGJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgQXVnIDIwMTUgMTY6MjU6MzggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBhZGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIHVzZSBvZiBHVEsrCisKK0Rpc3RybyBwYWNrYWdlcnMgbGlrZSBwcmVkaWN0YWJpbGl0eSBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RlZCBvcHRpb25hbAorZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlZGljYWJsZS4gIEFkZCBhIC0td2l0aC1ndGszIG9wdGlvbiAoZGVmYXVsdCB0byAiYXV0byIpCitmb3IgZm9yY2libHkgY29udHJvbGxpbmcgd2hldGhlciBHVEsrIHdpbGwgYmUgdXNlZCBvciBub3QuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNjkzXQorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGb3J3YXJkLXBvcnRlZCB0byAyLjQwLjEwCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxNyArKysrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZjc3ZjNhLi5jYTc3ZGU4IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMjgsMTcgKzEyOCwyMiBAQCBBQ19DSEVDS19GVU5DUyhzdHJ0b2tfcikKKyAjIEdUSworICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistUEtHX0NIRUNLX01PRFVMRVMoW0dUSzNdLFtndGsrLTMuMCA+PSAkR1RLM19SRVFVSVJFRF0sW2hhdmVfZ3RrXzM9eWVzXSxbaGF2ZV9ndGtfMz1ub10pCistCisgR1RLM19CSU5BUllfVkVSU0lPTj0KKyAKKy1pZiB0ZXN0ICIkaGF2ZV9ndGtfMyIgPSAieWVzIjsgdGhlbgorLSAgICBHVEszX0JJTkFSWV9WRVJTSU9OPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1ndGtfYmluYXJ5X3ZlcnNpb24gZ3RrKy0zLjBgIgorK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgR1RLKyAzXSkKKytBQ19BUkdfV0lUSChbZ3RrM10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1ndGszXSxbRG9uJ3QgYnVpbGQgR1RLKzMgdG9vbHMgKGRlZmF1bHQ9YXV0byldKV0sCisrICBbXSxbUEtHX0NIRUNLX0VYSVNUUyhbZ3RrKy0zLjAgPj0gJEdUSzNfUkVRVUlSRURdLFt3aXRoX2d0azM9eWVzXSxbd2l0aF9ndGszPW5vXSldKQorK0FDX01TR19SRVNVTFQoWyR3aXRoX2d0azNdKQorKworK2lmIHRlc3QgIiR3aXRoX2d0azMiID0gInllcyI7IHRoZW4KKysgIFBLR19DSEVDS19NT0RVTEVTKEdUSzMsIFtndGsrLTMuMCA+PSAkR1RLM19SRVFVSVJFRF0pCisrICBHVEszX0JJTkFSWV9WRVJTSU9OPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1ndGtfYmluYXJ5X3ZlcnNpb24gZ3RrKy0zLjBgIgorIGZpCisgCisgQUNfU1VCU1QoW0dUSzNfQklOQVJZX1ZFUlNJT05dKQorIAorLUFNX0NPTkRJVElPTkFMKFtIQVZFX0dUS18zXSxbdGVzdCAiJGhhdmVfZ3RrXzMiID0gInllcyJdKQorK0FNX0NPTkRJVElPTkFMKFtIQVZFX0dUS18zXSxbdGVzdCAiJHdpdGhfZ3RrMyIgPSAieWVzIl0pCisgCisgZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGRubCBHREstUGl4YnVmIFNWRyBsb2FkZXIKK0BAIC0yODksNiArMjk0LDYgQEAgbGlicnN2Zy0kVkVSU0lPTgorIAlCdWlsZCBpbnRyb3NwZWN0YWJsZSBiaW5kaW5nczogICR7Zm91bmRfaW50cm9zcGVjdGlvbn0KKyAJQnVpbGQgVmFsYSBiaW5kaW5nczogICAgICAgICAgICAke2VuYWJsZV92YWxhfQorIAlCdWlsZCBHZGtQaXhidWYgbG9hZGVyOiAgICAgICAgICR7ZW5hYmxlX3BpeGJ1Zl9sb2FkZXJ9CistICAgICAgICBHVEsrICRHVEszX1JFUVVJUkVEIG9yIGxhdGVyOiAgICAgICAgICAgJHtoYXZlX2d0a18zfQorKyAgICAgICAgR1RLKyAkR1RLM19SRVFVSVJFRCBvciBsYXRlcjogICAgICAgICAgICR7d2l0aF9ndGtfM30KKyAJQnVpbGQgbWlzY2VsbGFlbm91cyB0b29sczogICAgICAke2J1aWxkX21pc2NfdG9vbHN9CisgIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Z18yLjQwLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjBlNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlbmRlcmluZyBTVkcgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9saWJyc3ZnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yc3ZnLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0yNDttZDU9MjBiNDExM2M0OTA5YmJmMGQ2N2UwMDY3NzgzMDJiYzYiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJjYWlybyBnZGstcGl4YnVmIGdsaWItMi4wIGxpYmNyb2NvIGxpYnhtbDIgcGFuZ28iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIHBpeGJ1ZmNhY2hlCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ndGstb3B0aW9uLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmYWRlYmUyZTc5OWFiMTU5MTY5ZWUzMTk4NDE1ZmY4NSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjk2NWM4MDc0MzhjZTkwYjIwNGU5MzBmZjgwYzkyZWJhMTYwNmEyZjZmZDVjY2ZkMDkzMzVjOTk4OTZkZDM0NzkiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtdmFsYSIKKworIyBUaGUgb2xkZXIgbGQgKDIuMjIpIG9uIHRoZSBob3N0IChDZW50b3MgNi41KSBkb2Vzbid0IGhhdmUgdGhlCisjIC1Cc3ltYm9saWMtZnVuY3Rpb25zIG9wdGlvbiwgd2UgY2FuIGRpc2FibGUgaXQgZm9yIG5hdGl2ZS4KK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1Cc3ltYm9saWM9YXV0byIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImdka3BpeGJ1ZiIKKyMgVGhlIGdkay1waXhidWYgbG9hZGVyCitQQUNLQUdFQ09ORklHW2dka3BpeGJ1Zl0gPSAiLS1lbmFibGUtcGl4YnVmLWxvYWRlciwtLWRpc2FibGUtcGl4YnVmLWxvYWRlcixnZGstcGl4YnVmLW5hdGl2ZSIKKyMgR1RLKyB0ZXN0IGFwcGxpY2F0aW9uIChyc3ZnLXZpZXcpCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0azMsLS13aXRob3V0LWd0azMsZ3RrKzMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTG9hZGFibGUgbW9kdWxlcyBkb24ndCBuZWVkIC5hIG9yIC5sYSBvbiBMaW51eAorCXJtIC1mICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyouYSAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmxhCit9CisKK1BBQ0tBR0VTID0rICJsaWJyc3ZnLWd0ayByc3ZnIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8uZGVidWciCitGSUxFU19yc3ZnID0gIiR7YmluZGlyfS9yc3ZnKiBcCisJICAgICAgJHtkYXRhZGlyfS9waXhtYXBzL3N2Zy12aWV3ZXIuc3ZnIFwKKwkgICAgICAke2RhdGFkaXJ9L3RoZW1lcyIKK0ZJTEVTX2xpYnJzdmctZ3RrID0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qLyovKi5zbyIKKworUElYQlVGX1BBQ0tBR0VTID0gImxpYnJzdmctZ3RrIgorCitQSVhCVUZDQUNIRV9TWVNST09UX0RFUFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgaGFyZmJ1enotbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgcGFuZ28tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgaWN1LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1nbm9tZS9saWJzZWNyZXQvbGlic2VjcmV0XzAuMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJjODNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJsaWJzZWNyZXQgaXMgYSBsaWJyYXJ5IGZvciBzdG9yaW5nIGFuZCByZXRyaWV2aW5nIHBhc3N3b3JkcyBhbmQgb3RoZXIgc2VjcmV0cyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yM2MyYTVlMDEwNmI5OWQ3NTIzODk4NjU1OWJiNWZjNiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYworCitERVBFTkRTID0gImdsaWItMi4wIGxpYmdjcnlwdCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtbWFucGFnZXMiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjIzY2RmODI2N2QxMWEyNmY4OGYwZGJlYzFlMjAyMmFkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTJmZDI4OGIwMTJlMWIyYjFiNTRkNTg2Y2Q0YzY1MDc4ODU3MTU1MzQ2NDRiNDUzNGI3ZWY3ZDcwNzliYTQ0MyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlid25jay9saWJ3bmNrM18zLjE0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmNTE3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiV2luZG93IG5hdmlnYXRpb24gY29uc3RydWN0aW9uIHRvb2xraXQiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitCUE4gPSAibGlid25jayIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWIgZ3RrKzMgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlieHJlcyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInN0YXJ0dXAtbm90aWZpY2F0aW9uIgorUEFDS0FHRUNPTkZJR1tzdGFydHVwLW5vdGlmaWNhdGlvbl0gPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sLS1kaXNhYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLHN0YXJ0dXAtbm90aWZpY2F0aW9uIgorCitpbmhlcml0IGdub21lYmFzZQorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNDUzODY3MmUwZDc3NWZhZGVkZjEwYWJlYjgwMjAwNDciCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJmNTA4MDA3NjM0NjYwOWI0YzM2Mzk0Yjg3OWYzYTg2YjkyY2VkM2I5MGEzN2NiNTRjOGU5YTE0ZjAwZTc5MjFjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9idWlsZGVyXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3MjlmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJOZXcgdXNlciB0byBkbyBzcGVjaWZpYyBqb2IiCitERVNDUklQVElPTiA9ICJUaGlzIHJlY2lwZSBjcmVhdGUgYSBuZXcgdXNlciBuYW1lZCAke1BOfSwgd2hvIGlzIHVzZWQgZm9yIHNwZWNpZmljIGpvYnMgbGlrZSBidWlsZGluZy4gVGhlIHRhc2sgY2FuIGJlIGF1dG8gc3RhcnRlZCB2aWEgbWluaSBYIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyNiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vYnVpbGRlcl9ob2Jfc3RhcnQuc2g7ZW5kbGluZT01O21kNT04NDc5NmMzYzQxNzg1ZDg2MTAwZmRhYmNiZGFkZTAwZSIKKworU1JDX1VSSSA9ICJmaWxlOi8vYnVpbGRlcl9ob2Jfc3RhcnQuc2ggXAorICAgICAgICAgICBmaWxlOi8vcGxlYXNlX3dhaXRfZGlhbG9nLnB5IFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworUkRFUEVORFNfJHtQTn0gPSAibWluaS14LXNlc3Npb24iCisKK2luaGVyaXQgdXNlcmFkZAorCisjIGJ1aWxkZXIgdXNlciBwYXNzd29yZCBpcyAiYnVpbGRlciIKK0JVSUxERVJfUEFTU1dPUkQgPz0gIi5nTGliaU5YbjBQMTIiCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ncm91cHMgdmlkZW8sdHR5LGF1ZGlvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1wYXNzd29yZCAke0JVSUxERVJfUEFTU1dPUkR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGJ1aWxkZXIiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L21pbmlfeC9zZXNzaW9uLmQKKwlpbnN0YWxsIC1wIC1tIDc1NSBidWlsZGVyX2hvYl9zdGFydC5zaCAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kLworCisJY2hvd24gIGJ1aWxkZXIuYnVpbGRlciAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCisgICAgICAgIGluc3RhbGwgLXAgLW0gNzU1IHBsZWFzZV93YWl0X2RpYWxvZy5weSAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9idWlsZGVyX2hvYl9zdGFydC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM5NGIwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjVGhpcyBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgdmlhIG1pbmkgWCBzZXNzaW9uIG9uIGJlaGFsZiBvZiBmaWxlIG93bmVyLCBhZnRlcgorI2luc3RhbGxlZCBpbiAvZXRjL21pbmlfeC9zZXNzaW9uLmQvLiBBbnkgYXV0byBzdGFydCBqb2JzIGluY2x1ZGluZyBYIGFwcHMgY2FuCisjYmUgcHV0IGhlcmUKKworIyBzdGFydCBob2IgaGVyZQorZXhwb3J0IFBTRVVET19QUkVGSVg9L3VzcgorZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPS9ob21lL2J1aWxkZXIvcHNldWRvCitleHBvcnQgUFNFVURPX0xJQkRJUj0vdXNyL2xpYi9wc2V1ZG8vbGliNjQKK2V4cG9ydCBHSVRfUFJPWFlfQ09NTUFORD0vaG9tZS9idWlsZGVyL3Bva3kvc2NyaXB0cy9vZS1naXQtcHJveHkKKworI3N0YXJ0IHBjbWFuZm0gaW4gZGFlbW9uIG1vZGUgdG8gYWxsb3cgYXN5bmNocm9ub3VzIGxhdW5jaAorcGNtYW5mbSAtZCYKKworI3JlZ2lzdGVyIGhhbmRsZXJzIGZvciBzb21lIGZpbGUgdHlwZXMKK2lmIFsgISAtZCAvaG9tZS9idWlsZGVyLy5sb2NhbC9zaGFyZS9hcHBsaWNhdGlvbnMgXTsgdGhlbgorICAgIG1rZGlyIC1wIC9ob21lL2J1aWxkZXIvLmxvY2FsL3NoYXJlL2FwcGxpY2F0aW9ucy8KKyAgICAjcmVnaXN0ZXIgZm9sZGVycyB0byBvcGVuIHdpdGggUENNYW5GTSBmaWxlbWFuYWdlcgorICAgIHhkZy1taW1lIGRlZmF1bHQgcGNtYW5mbS5kZXNrdG9wIGlub2RlL2RpcmVjdG9yeQorCisgICAgI3JlZ2lzdGVyIGh0bWwgbGlua3MgYW5kIGZpbGVzIHdpdGggZXBpcGhhbnkKKyAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgeC1zY2hlbWUtaGFuZGxlci9odHRwCisgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHgtc2NoZW1lLWhhbmRsZXIvaHR0cHMKKyAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgdGV4dC9odG1sCisKKyAgICAjcmVnaXN0ZXIgdGV4dCBmaWxlcyB3aXRoIGxlYWZwYWQgdGV4dCBlZGl0b3IKKyAgICB4ZGctbWltZSBkZWZhdWx0IGxlYWZwYWQuZGVza3RvcCB0ZXh0L3BsYWluCitmaQorCitjZCAvaG9tZS9idWlsZGVyL3Bva3kKKy4gLi9vZS1pbml0LWJ1aWxkLWVudgorCitob2IgJgorCittYXRjaGJveC10ZXJtaW5hbCYKKworL2V0Yy9taW5pX3gvcGxlYXNlX3dhaXRfZGlhbG9nLnB5ICYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9wbGVhc2Vfd2FpdF9kaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyMzgxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5CkBAIC0wLDAgKzEsMjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IGdsaWIKK2ltcG9ydCBndGsKKyAKK2RlZiBkZXN0cm95X3dpbmRvd19jYih3aWRnZXQsIGV2ZW50KToKKyAgICBndGsubWFpbl9xdWl0KCkKKyAKK2RlZiBhbGxfZG9uZV9jYigpOgorICAgIGd0ay5tYWluX3F1aXQoKQorIAorZGVmIGRpYWxvZ3VlX3VpKCk6CisgICAgd2luZG93ID0gZ3RrLldpbmRvdygpCisgICAgd2luZG93LnNldF90aXRsZSgiUGxlYXNlIHdhaXQuLi4iKQorICAgIHdpbmRvdy5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBkZXN0cm95X3dpbmRvd19jYikKKyAgICB3aW5kb3cuc2hvdygpCisgICAgd2luZG93LnNldF9ib3JkZXJfd2lkdGgoMTIpCisgCisgICAgbXNnID0gIlBsZWFzZSB3YWl0IHdoaWxlIEJpdEJha2UgaW5pdGlhbGl6ZXMgSG9iIgorICAgIGxhYmVsID0gZ3RrLkxhYmVsKG1zZykKKyAgICBsYWJlbC5zaG93KCkKKyAgICB3aW5kb3cuYWRkKGxhYmVsKQorIAorICAgIGdsaWIudGltZW91dF9hZGRfc2Vjb25kcygxMCwgYWxsX2RvbmVfY2IpCisgCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGRpYWxvZ3VlX3VpKCkKKyAgICBndGsubWFpbigpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLWZwdS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNzJlODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jCkBAIC0wLDAgKzEsNiBAQAorCitkZWYgZ2V0X2NhaXJvX2ZwdV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisgICAgICAgIHJldHVybiAiLS1kaXNhYmxlLXNvbWUtZmxvYXRpbmctcG9pbnQiCisgICAgcmV0dXJuICIiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTQ1MzE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiVGhlIENhaXJvIDJEIHZlY3RvciBncmFwaGljcyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiQ2Fpcm8gaXMgYSBtdWx0aS1wbGF0Zm9ybSBsaWJyYXJ5IHByb3ZpZGluZyBhbnRpLWFsaWFzZWQgXAordmVjdG9yLWJhc2VkIHJlbmRlcmluZyBmb3IgbXVsdGlwbGUgdGFyZ2V0IGJhY2tlbmRzLiBQYXRocyBjb25zaXN0IFwKK29mIGxpbmUgc2VnbWVudHMgYW5kIGN1YmljIHNwbGluZXMgYW5kIGNhbiBiZSByZW5kZXJlZCBhdCBhbnkgd2lkdGggXAord2l0aCB2YXJpb3VzIGpvaW4gYW5kIGNhcCBzdHlsZXMuIEFsbCBjb2xvcnMgbWF5IGJlIHNwZWNpZmllZCB3aXRoIFwKK29wdGlvbmFsIHRyYW5zbHVjZW5jZSAob3BhY2l0eS9hbHBoYSkgYW5kIGNvbWJpbmVkIHVzaW5nIHRoZSBcCitleHRlbmRlZCBQb3J0ZXIvRHVmZiBjb21wb3NpdGluZyBhbGdlYnJhIGFzIGZvdW5kIGluIHRoZSBYIFJlbmRlciBcCitFeHRlbnNpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1QTC0xICYgTEdQTHYyLjEgJiBHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIk1QTC0xICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59LWRldiA9ICJNUEwtMSAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfS1nb2JqZWN0ID0gIk1QTC0xICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59LXBlcmYtdXRpbHMgPSAiR1BMdjMrIgorWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSBsaWJ4cmVuZGVyIGxpYnhleHQiCitERVBFTkRTID0gImxpYnBuZyBmb250Y29uZmlnIHBpeG1hbiBnbGliLTIuMCB6bGliIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExIHhjYicsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14PXllcyAtZW5hYmxlLXhsaWIsLS13aXRoLXg9bm8gLS1kaXNhYmxlLXhsaWIsJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbeGNiXSA9ICItLWVuYWJsZS14Y2IsLS1kaXNhYmxlLXhjYixsaWJ4Y2IiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSA9ICItLWVuYWJsZS1kaXJlY3RmYj15ZXMsLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS1lbmFibGUtdmFsZ3JpbmQ9eWVzLC0tZGlzYWJsZS12YWxncmluZCx2YWxncmluZCIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2w9eWVzLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2dsZXN2Ml0gPSAiLS1lbmFibGUtZ2xlc3YyLC0tZGlzYWJsZS1nbGVzdjIsdmlydHVhbC9saWJnbGVzMiIKKworI2NoZWNrIGZvciBUQVJHRVRfRlBVPXNvZnQgYW5kIGluZm9ybSBjb25maWd1cmUgb2YgdGhlIHJlc3VsdCBzbyBpdCBjYW4gZGlzYWJsZSBzb21lIGZsb2F0aW5nIHBvaW50cyAKK3JlcXVpcmUgY2Fpcm8tZnB1LmluYworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfY2Fpcm9fZnB1X3NldHRpbmcoYmIsIGQpfSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRlZSBcCisgICAgICAgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBXZSBkb24ndCBkZXBlbmQgb24gYmludXRpbHMgc28gd2UgbmVlZCB0byBkaXNhYmxlIHRoaXMKK2V4cG9ydCBhY19jdl9saWJfYmZkX2JmZF9vcGVucj0ibm8iCisjIEVuc3VyZSB3ZSBkb24ndCBkZXBlbmQgb24gTFpPCitleHBvcnQgYWNfY3ZfbGliX2x6bzJfbHpvMmFfZGVjb21wcmVzcz0ibm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitDRkxBR1MgKz0gIi1mZmF0LWx0by1vYmplY3RzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MTdkYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjIuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSBjYWlyby5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTczZTk5OWUwYzcyYjVhYzkwMTI0MjRmYTE1N2FkNzciCisKK1NSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL2NhaXJvLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImUxY2RmYWYxYzZjOTk1YzRkNGM1NGUwNzIxNWIwMTE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5MTlkOTk5ZGRiMWJiYmVjZDRiYmU2NTI5OWNhMmFiZDIwNzljN2UxM2QyMjQ1Nzc4OTVhZmE3MDA1ZWNjZWIiCisKK1BBQ0tBR0VTID0rICJjYWlyby1nb2JqZWN0IGNhaXJvLXNjcmlwdC1pbnRlcnByZXRlciBjYWlyby1wZXJmLXV0aWxzIgorCitTVU1NQVJZXyR7UE59ID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKK0RFU0NSSVBUSU9OXyR7UE59ID0gIkNhaXJvIGlzIGEgbXVsdGktcGxhdGZvcm0gbGlicmFyeSBwcm92aWRpbmcgYW50aS1hbGlhc2VkIFwKK3ZlY3Rvci1iYXNlZCByZW5kZXJpbmcgZm9yIG11bHRpcGxlIHRhcmdldCBiYWNrZW5kcy4gUGF0aHMgY29uc2lzdCBcCitvZiBsaW5lIHNlZ21lbnRzIGFuZCBjdWJpYyBzcGxpbmVzIGFuZCBjYW4gYmUgcmVuZGVyZWQgYXQgYW55IHdpZHRoIFwKK3dpdGggdmFyaW91cyBqb2luIGFuZCBjYXAgc3R5bGVzLiBBbGwgY29sb3JzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBcCitvcHRpb25hbCB0cmFuc2x1Y2VuY2UgKG9wYWNpdHkvYWxwaGEpIGFuZCBjb21iaW5lZCB1c2luZyB0aGUgXAorZXh0ZW5kZWQgUG9ydGVyL0R1ZmYgY29tcG9zaXRpbmcgYWxnZWJyYSBhcyBmb3VuZCBpbiB0aGUgWCBSZW5kZXIgXAorRXh0ZW5zaW9uLiIKKworU1VNTUFSWV9jYWlyby1nb2JqZWN0ID0gIlRoZSBDYWlybyBsaWJyYXJ5IEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IgorREVTQ1JJUFRJT05fY2Fpcm8tZ29iamVjdCA9ICJBIEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IGZvciB0aGUgQ2Fpcm8gQVBJLiIKKworU1VNTUFSWV9jYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgPSAiVGhlIENhaXJvIGxpYnJhcnkgc2NyaXB0IGludGVycHJldGVyIgorREVTQ1JJUFRJT05fY2Fpcm8tc2NyaXB0LWludGVycHJldGVyID0gIlRoZSBDYWlybyBzY3JpcHQgaW50ZXJwcmV0ZXIgaW1wbGVtZW50cyBcCitDYWlyb1NjcmlwdC4gIENhaXJvU2NyaXB0IGlzIHVzZWQgYnkgdHJhY2luZyB1dGlsaXRpZXMgdG8gZW5hYmxlIHRoZSBhYmlsaXR5IFwKK3RvIHJlcGxheSByZW5kZXJpbmcuIgorCitERVNDUklQVElPTl9jYWlyby1wZXJmLXV0aWxzID0gIlRoZSBDYWlybyBsaWJyYXJ5IHBlcmZvcm1hbmNlIHV0aWxpdGllcyIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jYWlyby8qLnNvIgorRklMRVNfJHtQTn0tZ29iamVjdCA9ICIke2xpYmRpcn0vbGliY2Fpcm8tZ29iamVjdC5zby4qIgorRklMRVNfJHtQTn0tc2NyaXB0LWludGVycHJldGVyID0gIiR7bGliZGlyfS9saWJjYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIuc28uKiIKK0ZJTEVTXyR7UE59LXBlcmYtdXRpbHMgPSAiJHtiaW5kaXJ9L2NhaXJvLXRyYWNlICR7bGliZGlyfS9jYWlyby8qLmxhICR7bGliZGlyfS9jYWlyby9saWJjYWlyby10cmFjZS5zby4qIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2JpbmRpcn0vY2Fpcm8tc3BoaW54CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvL2NhaXJvLXNwaGlueCoKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby8uZGVidWcvY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvLy5kZWJ1Zy9jYWlyby1zcGhpbngqCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjFjZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYwpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIkdyYXBoaWNzIGxpYnJhcnkgZm9yIGNyZWF0aW5nIGhhcmR3YXJlLWFjY2VsZXJhdGVkIHVzZXIgaW50ZXJmYWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2x1dHRlci1wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKKworaW5oZXJpdCBjbHV0dGVyIHB0ZXN0LWdub21lCisKK0RFUEVORFMgPSAicGFuZ28gZ2xpYi0yLjAganNvbi1nbGliIGF0ayB1ZGV2IGNvZ2wtMS4wIgorUEFDS0FHRV9CRUZPUkVfUE4gKz0gIiR7UE59LWV4YW1wbGVzIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCitFREVQRU5EU19YMTEgPSAidmlydHVhbC9saWJ4MTEgbGlieGkgbGlieGZpeGVzIgorRURFUEVORFNfR0xYID0gInZpcnR1YWwvbGliZ2wiCitFREVQRU5EU19FR0wgPSAidmlydHVhbC9lZ2wiCitFREVQRU5EU19XQVlMQU5EID0gIndheWxhbmQgbGlieGtiY29tbW9uIGdkay1waXhidWYiCisKK0VERVBFTkRTX0VWREVWID0gImxpYnhrYmNvbW1vbiIKK0VSREVQRU5EU19FVkRFViA9ICJ4a2V5Ym9hcmQtY29uZmlnIgorCisjIERpc2FibGUgcHJldHR5IG11Y2ggZXZlcnl0aGluZywgb3ZlcnJpZGUgaW4gcGxhdGZvcm0gc3BlY2lmaWMgc2V0IHVwCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uCVwKKwkgICAgIAkgLS1kaXNhYmxlLXF1YXJ0ei1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLXdpbjMyLWJhY2tlbmQJXAorCSAgICAgCSAtLWRpc2FibGUtZ2RrLWJhY2tlbmQJCVwKKwkgICAgIAkgLS1kaXNhYmxlLWNleDEwMC1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLXRzbGliLWlucHV0CQlcCisJICAgIAkiCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtYmFja2VuZCwtLWRpc2FibGUteDExLWJhY2tlbmQsJHtFREVQRU5EU19YMTF9IgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIiwsJHtFREVQRU5EU19YMTF9ICR7RURFUEVORFNfR0xYfSIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wtYmFja2VuZCwtLWRpc2FibGUtZWdsLWJhY2tlbmQsJHtFREVQRU5EU19FR0x9IgorUEFDS0FHRUNPTkZJR1tldmRldl0gPSAiLS1lbmFibGUtZXZkZXYtaW5wdXQsLS1kaXNhYmxlLWV2ZGV2LWlucHV0LCR7RURFUEVORFNfRVZERVZ9LCR7RVJERVBFTkRTX0VWREVWfSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1iYWNrZW5kLC0tZGlzYWJsZS13YXlsYW5kLWJhY2tlbmQsJHtFREVQRU5EU19XQVlMQU5EfSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZC1jb21wb3NpdG9yXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix3YXlsYW5kIgorCisjIERlZmF1bHQgY29uZmlndXJhdGlvbiwgZGlzdHJvcyBtaWdodCB3YW50IHRvIG92ZXJyaWRlCitQQUNLQUdFQ09ORklHID8/PSAiZWdsIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dseCB4MTEnLCAnJywgZCl9IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9jbHV0dGVyL2V4YW1wbGVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7bGliZGlyfS9jbHV0dGVyL2V4YW1wbGVzIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLy5kZWJ1ZyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTEyOCBmb3IgdGhpcworCXRvdWNoIC10IDIwMDAwMTAxMDAwMCAke1N9L3BvL2NsdXR0ZXItMS4wLnBvdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNmE3MGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL2luc3RhbGwtZXhhbXBsZXMucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorSW5zdGFsbCB0aGUgZXhhbXBsZXMgdG8gJGxpYmRpci9jbHV0dGVyLy4KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9NYWtlZmlsZS5hbQoraW5kZXggNGI5YjQ0OS4uMjMyY2QxOSAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmFtCisrKysgYi9leGFtcGxlcy9NYWtlZmlsZS5hbQorQEAgLTM4LDYgKzM4LDcgQEAgQU1fQ1BQRkxBR1MgPSBcCisgCS1JJCh0b3Bfc3JjZGlyKS9jbHV0dGVyIFwKKyAJLUkkKHRvcF9idWlsZGRpcikvY2x1dHRlcgorIAorLW5vaW5zdF9QUk9HUkFNUyA9ICQoYWxsX2V4YW1wbGVzKQorK2V4YW1wbGVkaXIgPSAkKHBrZ2xpYmRpcikvZXhhbXBsZXMKKytleGFtcGxlX1BST0dSQU1TID0gJChhbGxfZXhhbXBsZXMpCisgCisgRVhUUkFfRElTVCA9IHJlZGhhbmQucG5nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWMxOGM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDY2OGUxZDE0YWYxMzI0OTM4NGFiMzI0YzdkNzllYzQxNDdmMDdlNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAyNyBBcHIgMjAxNSAyMDoxMjozMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBSdW4gaW5zdGFsbGVkIHRlc3RzIHdpdGggdGFwIG91dHB1dAorCitDb25maWd1cmUgb3V0cHV0IGZyb20gaW5zdGFsbGVkLXRlc3RzIHRvIGJlIFRBUCBjb21wbGlhbnQgc3VjaCB0aGF0Citnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIHByb3Blcmx5IGludGVycHJldHMgdGhlIHJlc3VsdHMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBUaW0gT3JsaW5nIDxUaWNvVGltb0BnbWFpbC5jb20+CistLS0KKyBidWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5tayBiL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworaW5kZXggN2M1ZjgyYi4uODQ0ZTE3ZSAxMDA2NDQKKy0tLSBhL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworKysrIGIvYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rCitAQCAtMTI3LDcgKzEyNyw4IEBAIGluc3RhbGxlZF90ZXN0X21ldGFfREFUQSA9ICQoaW5zdGFsbGVkX3Rlc3RjYXNlczo9LnRlc3QpCisgJS50ZXN0OiAlJChFWEVFWFQpIE1ha2VmaWxlCisgCSQoQU1fVl9HRU4pIChlY2hvICdbVGVzdF0nID4gJEAudG1wOyBcCisgCWVjaG8gJ1R5cGU9c2Vzc2lvbicgPj4gJEAudG1wOyBcCistCWVjaG8gJ0V4ZWM9ZW52IEdfRU5BQkxFX0RJQUdOT1NUSUM9MCBDTFVUVEVSX0VOQUJMRV9ESUFHTk9TVElDPTAgJChpbnN0YWxsZWRfdGVzdGRpcikvJDwnID4+ICRALnRtcDsgXAorKwllY2hvICdFeGVjPWVudiBHX0VOQUJMRV9ESUFHTk9TVElDPTAgQ0xVVFRFUl9FTkFCTEVfRElBR05PU1RJQz0wICQoaW5zdGFsbGVkX3Rlc3RkaXIpLyQ8IC0tdGFwJyA+PiAkQC50bXA7IFwKKysJZWNobyAnT3V0cHV0PVRBUCcgPj4gJEAudG1wOyBcCisgCW12ICRALnRtcCAkQCkKKyAKKyBDTEVBTkZJTEVTICs9ICQoaW5zdGFsbGVkX3Rlc3RfbWV0YV9EQVRBKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ODc3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBjbHV0dGVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjBfMS4yMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOGNkZmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGNsdXR0ZXItMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjY0OTQyNTZjOTgwZDQ5NzAzYTU1MzkxNmUzMDgzY2QiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxZDc3Y2UxNjAyNWY4NzY2N2ExZDAwZGM0ZmE2MTdhMTkzNTE1NmY2M2ZkMTc2MzVmZGFkZjEzODg2NmM5ZTFlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZlZDcxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiR1N0cmVhbWVyIGludGVncmF0aW9uIGxpYnJhcnkgZm9yIENsdXR0ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNsdXR0ZXItcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIrIgorCitpbmhlcml0IGNsdXR0ZXIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaCIKKworREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBjbHV0dGVyLTEuMCIKK1JERVBFTkRTXyR7UE59ICs9ICJnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIgorUEFDS0FHRVMgID0rICIke1BOfS1leGFtcGxlcyIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworRklMRVNfJHtQTn0gICAgICAgICAgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wL2xpYiouc28iCitGSUxFU18ke1BOfS1kZXYgICAgICArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyAgICAgICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvbGliKi5zbyIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzICA9ICIke2JpbmRpcn0vdmlkZW8tcGxheWVyICR7YmluZGlyfS92aWRlby1zaW5rIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvMDAwMS1JbnN0YWxsLWV4YW1wbGUtYmluYXJ5LW5lZWRlZC1mb3ItY29yZS1pbWFnZS1jbHV0dGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvMDAwMS1JbnN0YWxsLWV4YW1wbGUtYmluYXJ5LW5lZWRlZC1mb3ItY29yZS1pbWFnZS1jbHV0dGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjZiOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC8wMDAxLUluc3RhbGwtZXhhbXBsZS1iaW5hcnktbmVlZGVkLWZvci1jb3JlLWltYWdlLWNsdXR0ZXIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBkNzdjNzExMjc3YmYwNzVjZTA1NDVjMTliMzIyZjA0MGM0OWM3NzhhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDMwIEFwciAyMDE1IDEyOjE5OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEluc3RhbGwgZXhhbXBsZSBiaW5hcnkgbmVlZGVkIGZvciBjb3JlLWltYWdlLWNsdXR0ZXIKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW1wb3J0ZWQgZnJvbSBjbHV0dGVyLWdzdC0xLjggcGFja2FnZSwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLAorY29tbWl0IGFlMjhlZTNmN2EwNjBiOWUwZDEzMTU0YTg0ZjI0NDRhOTg0OTBiNWIsIHVwZGF0ZWQgZm9yIGNsdXR0ZXItZ3N0IDMuMAorCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZXhhbXBsZXMvTWFrZWZpbGUuYW0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitpbmRleCBiZmJjMWI1Li4wOTY1NWUzIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKysrKyBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyBOVUxMID0gIworIAorLW5vaW5zdF9QUk9HUkFNUyA9IGNhbWVyYS1wbGF5ZXIgdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uIHZpZGVvLWNvbnRlbnQKKytiaW5fUFJPR1JBTVMgPSBjYW1lcmEtcGxheWVyIHZpZGVvLXBsYXllciB2aWRlby1zaW5rIHZpZGVvLXNpbmstbmF2aWdhdGlvbiB2aWRlby1jb250ZW50CisgCisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgXAorIAkJJChNQUlOVEFJTkVSX0NGTEFHUykgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC9lbmFibGUtdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC9lbmFibGUtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhZWMzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wL2VuYWJsZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitJbnN0YWxsIGV4YW1wbGUgYmluYXJ5IG5lZWRlZCBmb3IgY29yZS1pbWFnZS1jbHV0dGVyCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0ltcG9ydGVkIGZyb20gY2x1dHRlci1nc3QtMS44IHBhY2thZ2UsIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZCwKK2NvbW1pdCBhZTI4ZWUzZjdhMDYwYjllMGQxMzE1NGE4NGYyNDQ0YTk4NDkwYjViLCB1cGRhdGVkIGZvciBjbHV0dGVyLWdzdCAxLjYKKworU2lnbmVkLW9mZi1ieTogVG9tYXMgRnJ5ZHJ5Y2ggPHRvbWFzQHNsZWVwZml2ZS5jb20+CisKK0luZGV4OiBnaXQvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9leGFtcGxlcy9NYWtlZmlsZS5hbQkyMDExLTAxLTMxIDEwOjE0OjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9leGFtcGxlcy9NYWtlZmlsZS5hbQkyMDExLTAxLTMxIDEwOjE0OjM0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEsNiArMSw2IEBACisgTlVMTCA9ICMKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24KKytiaW5fUFJPR1JBTVMgPSB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24KKyAKKyBJTkNMVURFUyA9IC1JJCh0b3Bfc3JjZGlyKSBcCisgCSAgICQoTUFJTlRBSU5FUl9DRkxBR1MpIFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5YTk1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjbHV0dGVyLWdzdC0zLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NsdXR0ZXItZ3N0L2NsdXR0ZXItZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OTViYWFjYmExOTRlODE0YzExMGVhM2JkZjI1ZGRiZjQiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY3ZDk3Zjk2ZTdjY2E4MmYzODMxN2QxNzM0ZDVkYWRiIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNTgyZTg1Yjg4NDgyZTE2ZjdlYzcxOTM2M2UzOGZhZGY4NGZhYjRkNGJhYWEyMWU1MjI3YTQ1NGI4MjRmMTM1YyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTg5OGI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjAuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZW1iZWRkaW5nIGEgQ2x1dHRlciBjYW52YXMgaW4gYSBHVEsrIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbHV0dGVyLXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKKworaW5oZXJpdCBjbHV0dGVyCisKK0RFUEVORFMgPSAiY2x1dHRlci0xLjAgZ3RrKzMiCitQQUNLQUdFUyAgPSsgIiR7UE59LWV4YW1wbGVzIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wXzEuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMGVhMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgY2x1dHRlci1ndGstMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNTU3ZDgxNGMzZTcwY2MzYTJkMWNmMzgxNjkxOWIxNGYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJiYmQwM2RmYTlhMjAxMDJkNWNkYjQ0MDUxM2IwYTAzNTkzM2RhNTU3YWQ3ZTlkYTMxNTQ2MDM0ZGUyZGFmMDY5IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGEzMWM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKQEAgLTAsMCArMSw3MCBAQAorU1VNTUFSWSA9ICJNb2Rlcm4gM0QgZ3JhcGhpY3MgQVBJIHdpdGggYXNzb2NpYXRlZCB1dGlsaXR5IEFQSXMiCitIT01FUEFHRSA9ICJodHRwOi8vd2lraS5jbHV0dGVyLXByb2plY3Qub3JnL3dpa2kvQ29nbCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNsdXR0ZXIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnZGstcGl4YnVmIgorUEFDS0FHRVMgPSsgIiR7UE59LWV4YW1wbGVzIFwKKyAgICAgICAgICAgICBsaWJjb2dsIGxpYmNvZ2wtZ2xlczIgbGliY29nbC1wYW5nbyBsaWJjb2dsLXBhdGggXAorICAgICAgICAgICAgIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCisjIEV4dHJhIERFUEVORFMgZm9yIFBBQ0tBR0VDT05GSUcKK0VERVBFTkRTX0dMID0gInZpcnR1YWwvbGliZ2wgbGliZHJtIgorRURFUEVORFNfR0xFUzIgPSAidmlydHVhbC9saWJnbGVzMiIKK0VERVBFTkRTX0tNUyA9ICJsaWJkcm0gdmlydHVhbC9lZ2wiCitFREVQRU5EU19FR0wgPSAidmlydHVhbC9lZ2wiCitFREVQRU5EU19YMTEgPSAidmlydHVhbC9saWJ4MTEgbGlieGNvbXBvc2l0ZSBsaWJ4Zml4ZXMgbGlieGkgbGlieHJhbmRyIgorRURFUEVORFNfV0FZTEFORCA9ICJ2aXJ0dWFsL21lc2Egd2F5bGFuZCIKKworIyBFeHRyYSBSREVQRU5EUyBmb3IgUEFDS0FHRUNPTkZJRworIyBUaGlzIGhhcyB0byBiZSBleHBsaWN0bHkgbGlzdGVkLCBiZWNhdXNlIGNvZ2wgZGxvcGVucyB0aGUgYmFja2VuZHMKK0VSREVQRU5EU19HTCAgICA9ICJsaWJnbCIKK0VSREVQRU5EU19HTEVTMiA9ICJsaWJnbGVzMiIKKworIyBHTEVTdjEgaXMgcmFyZWx5IHRlc3RlZCwgc28gZGlzYWJsZSBpdAorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbglcCisJICAgICAgIAkgLS1lbmFibGUtZXhhbXBsZXMtaW5zdGFsbAlcCisJICAgICAgIAkgLS1lbmFibGUtZGVidWcJCSAJXAorCSAgICAgICAJIC0tZGlzYWJsZS1nbGVzMQkJXAorCSAgICAgICAgIC0tZGlzYWJsZS1jYWlybyAgICAgICAgICAgICAgICBcCisJICAgIAkiCisKKyMgT3BlbkdML0dMWAorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLWdsIC0tZW5hYmxlLWdseCwtLWRpc2FibGUtZ2wgLS1kaXNhYmxlLWdseCwke0VERVBFTkRTX0dMfSAke0VERVBFTkRTX1gxMX0sJHtFUkRFUEVORFNfR0x9IgorCisjIEdMRVN2MgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLCR7RURFUEVORFNfR0xFUzJ9LCAke0VSREVQRU5EU19HTEVTMn0iCisKKyMgRUdMIGJhY2tlbmRzCitQQUNLQUdFQ09ORklHW2VnbC1rbXNdID0gIi0tZW5hYmxlLWttcy1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLWttcy1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19LTVN9IgorUEFDS0FHRUNPTkZJR1tlZ2wtbnVsbF0gPSAiLS1lbmFibGUtbnVsbC1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLW51bGwtZWdsLXBsYXRmb3JtIgorUEFDS0FHRUNPTkZJR1tlZ2wteDExXSA9ICItLWVuYWJsZS14bGliLWVnbC1wbGF0Zm9ybSwtLWRpc2FibGUteGxpYi1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19YMTF9ICR7RURFUEVORFNfRUdMfSIKK1BBQ0tBR0VDT05GSUdbZWdsLXdheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS13YXlsYW5kLWVnbC1wbGF0Zm9ybSwke0VERVBFTkRTX1dBWUxBTkR9IgorCisjIFdheWxhbmQgKHNlcnZlci1zaWRlKQorUEFDS0FHRUNPTkZJR1t3YXlsYW5kLXNlcnZlcl0gPSAiLS1lbmFibGUtd2F5bGFuZC1lZ2wtc2VydmVyLC0tZGlzYWJsZS13YXlsYW5kLWVnbC1zZXJ2ZXIsJHtFREVQRU5EU19XQVlMQU5EfSIKKworIyBTdXBwb3J0IHJlbmRlcmluZyB0ZXh0IGRpcmVjdGx5IHdpdGggUGFuZ28KK1BBQ0tBR0VDT05GSUdbY29nbC1wYW5nb10gPSAiLS1lbmFibGUtY29nbC1wYW5nbywtLWRpc2FibGUtY29nbC1wYW5nbyxwYW5nbyIKKworIyBSZXNwZWN0IHRoZSBESVNUUk9fRkVBVFVSRVMgdG8gcHVsbCBpbiBHTFggb3IgV2F5bGFuZCBhcyBhcHByb3ByaWF0ZSBieQorIyBkZWZhdWx0LgorUEFDS0FHRUNPTkZJRyA/Pz0gImNvZ2wtcGFuZ28gZ2xlczIgXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICdlZ2wtd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dseCBlZ2wteDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgIgorCisKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7YmluZGlyfS8qICR7ZGF0YWRpcn0vY29nbC9leGFtcGxlcy1kYXRhLyoiCitGSUxFU19saWJjb2dsID0gIiR7bGliZGlyfS9saWJjb2dsJHtTT0xJQlN9IgorRklMRVNfbGliY29nbC1nbGVzMiA9ICIke2xpYmRpcn0vbGliY29nbC1nbGVzMiR7U09MSUJTfSIKK0ZJTEVTX2xpYmNvZ2wtcGFuZ28gPSAiJHtsaWJkaXJ9L2xpYmNvZ2wtcGFuZ28ke1NPTElCU30iCisKK0ZJTEVTX2xpYmNvZ2wtcGF0aCA9ICIke2xpYmRpcn0vbGliY29nbC1wYXRoJHtTT0xJQlN9IgorCisjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhZnRlciBEZWJpYW4tcmVuYW1pbmcKK1JQUk9WSURFU19saWJjb2dsID0gImNvZ2wtMS4wIgorUkNPTkZMSUNUU19saWJjb2dsID0gImNvZ2wtMS4wIgorUlJFUExBQ0VTX2xpYmNvZ2wgPSAiY29nbC0xLjAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wL2NvZ2wtZnJhbWVidWZmZXItZ2wtV29yay1hZ2Fpbi1vbi1HTEVTdjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wL2NvZ2wtZnJhbWVidWZmZXItZ2wtV29yay1hZ2Fpbi1vbi1HTEVTdjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4Mzk1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAvY29nbC1mcmFtZWJ1ZmZlci1nbC1Xb3JrLWFnYWluLW9uLUdMRVN2Mi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKKworRnJvbSBmOGNjZTVmNmNiMjk1OGE0MDc0Zjg3Y2QzNDViZmU0NmUwZGRhNmUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc3BlciBTdC4gUGllcnJlIiA8anN0cGllcnJlQG1lY2hleWUubmV0PgorRGF0ZTogTW9uLCAyMCBBcHIgMjAxNSAxMjowODoyOSAtMDcwMAorU3ViamVjdDogY29nbC1mcmFtZWJ1ZmZlci1nbDogV29yayBhZ2FpbiBvbiBHTEVTdjIKKworCitkaWZmIC0tZ2l0IGEvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jIGIvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCitpbmRleCA3OTNiMTBiLi42MDljZmIzIDEwMDY0NAorLS0tIGEvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCisrKysgYi9jb2dsL2RyaXZlci9nbC9jb2dsLWZyYW1lYnVmZmVyLWdsLmMKK0BAIC0xMDcsNiArMTA3LDEyIEBACisgI2lmbmRlZiBHTF9QQUNLX0lOVkVSVF9NRVNBCisgI2RlZmluZSBHTF9QQUNLX0lOVkVSVF9NRVNBIDB4ODc1OAorICNlbmRpZgorKyNpZm5kZWYgR0xfQkFDS19MRUZUCisrI2RlZmluZSBHTF9CQUNLX0xFRlQJCQkJMHgwNDAyCisrI2VuZGlmCisrI2lmbmRlZiBHTF9CQUNLX1JJR0hUCisrI2RlZmluZSBHTF9CQUNLX1JJR0hUCQkJCTB4MDQwMworKyNlbmRpZgorIAorICNpZm5kZWYgR0xfQ09MT1IKKyAjZGVmaW5lIEdMX0NPTE9SIDB4MTgwMAorQEAgLTI0NSw2ICsyNTEsOSBAQCBfY29nbF9mcmFtZWJ1ZmZlcl9nbF9mbHVzaF9zdGVyZW9fbW9kZV9zdGF0ZSAoQ29nbEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKKyAgIGlmIChmcmFtZWJ1ZmZlci0+dHlwZSA9PSBDT0dMX0ZSQU1FQlVGRkVSX1RZUEVfT0ZGU0NSRUVOKQorICAgICByZXR1cm47CisgCisrICBpZiAoIWN0eC0+Z2xEcmF3QnVmZmVyKQorKyAgICByZXR1cm47CisrCisgICAvKiBUaGUgb25lLXNob3QgZGVmYXVsdCBkcmF3IGJ1ZmZlciBzZXR0aW5nIGluIF9jb2dsX2ZyYW1lYnVmZmVyX2dsX2JpbmQKKyAgICAqIG11c3QgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLiBJZiBub3QgaXQgd291bGQgb3ZlcnJpZGUgd2hhdCB3ZSBzZXQgaGVyZS4gKi8KKyAgIGdfYXNzZXJ0IChjdHgtPndhc19ib3VuZF90b19vbnNjcmVlbik7CistLSAKK2NnaXQgdjAuMTAuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjBfMS4yMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMGI4MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgY29nbC0xLjAuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xYjFhNTA4ZDkxZDI1Y2E2MDdjODNmOTJmM2UzMWM4NCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjViMjg4OTcxOTRkOWZmNzZhNTc0YTk0OTNkMWY3ZWUwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNzI5ZTM1NDk1ODI5ZTdkMzFmYWZhMzM1OGU0N2I3NDNiYTIxYTJiMDhmZjliNmNkMjhmYjc0YzBkZTkxMTkyYiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXMvY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXMvY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTdlYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA4ODA3N2VkMTU2YTcxNGYzMmJiNDA4ZjQyMjI3OGQ2MTYxMWZmZDQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IFNhdCwgMjYgSnVsIDIwMTQgMTY6NTc6NDYgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmluOiBGaXggc3RyaW5nIGFyZ3VtZW50IHN5bnRheAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorLS0tCisgY29uZmlndXJlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBiZmUxYjgyLi5lOTM5YmJkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC02NSw3ICs2NSw3IEBAIGZpKQorIAorIERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT049MS40LjE0CisgCistUEtHX0NIRUNLX01PRFVMRVMoRElSRUNURkIsIGRpcmVjdGZiID49ICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OLFsgV0FURVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F0ZXIgZGlyZWN0ZmJgIF0sCisrUEtHX0NIRUNLX01PRFVMRVMoW0RJUkVDVEZCXSwgZGlyZWN0ZmIgPj0gJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04sWyBXQVRFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT13YXRlciBkaXJlY3RmYmAgXSwKKyAJQUNfTVNHX0VSUk9SKFskRElSRUNURkJfUEtHX0VSUk9SUworICoqKiBEaXJlY3RGQiAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTiBvciBuZXdlciBpcyByZXF1aXJlZC4gVGhlIGxhdGVzdCB2ZXJzaW9uCisgKioqIG9mIERpcmVjdEZCIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnLy5dKSkKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlc18xLjcuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNlOGJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJFeGFtcGxlIERpcmVjdEZCIGFwcGxpY2F0aW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoZSBEaXJlY3RGQi1leGFtcGxlcyBwYWNrYWdlIGNvbnRhaW5zIGEgc2V0IG9mIHNpbXBsZSBEaXJlY3RGQiBcCisgICAgICBhcHBsaWNhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGFuZCBkZW1vbnN0cmF0ZSB2YXJpb3VzIERpcmVjdEZCIFwKKyAgICAgIGZlYXR1cmVzIgorREVQRU5EUyA9ICJkaXJlY3RmYiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorCitTUkNfVVJJID0gIiBcCisgICAgICAgICAgIGh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnL2Rvd25sb2Fkcy9FeHRyYXMvRGlyZWN0RkItZXhhbXBsZXMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaCBcCisgICAgICAgICAgIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lY2Y2ZmQyYjE5OTE1YWZjNGRhNTYwNDM5MjZjYTE4ZiIKKworUyA9ICIke1dPUktESVJ9L0RpcmVjdEZCLWV4YW1wbGVzLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworU1JDX1VSSVttZDVzdW1dID0gIjhiNjBjODY3YWYyOTU0ODFjMzJhOGM3ZmM1ODAyMzA3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhMjEwNGNjNGRhODEyM2M4MzcxODEzNTUxYjY2Yjk0MzE5ODk3OWY3NDVjYmViYzAzNGJiNWUxMDg0NDEyMmEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2YWFlYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMKQEAgLTAsMCArMSw4MCBAQAorU1VNTUFSWSA9ICJHcmFwaGljcyBhYnN0cmFjdGlvbiBsaWJyYXJ5IGZvciB0aGUgTGludXggRnJhbWVidWZmZXIgRGV2aWNlIgorREVTQ1JJUFRJT04gPSAiRGlyZWN0RkIgaXMgYSB0aGluIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBkZXZlbG9wZXJzIFwKK3dpdGggaGFyZHdhcmUgZ3JhcGhpY3MgYWNjZWxlcmF0aW9uLCBpbnB1dCBkZXZpY2UgaGFuZGxpbmcgYW5kIFwKK2Fic3RyYWN0aW9uLCBhbiBpbnRlZ3JhdGVkIHdpbmRvd2luZyBzeXN0ZW0gd2l0aCBzdXBwb3J0IGZvciBcCit0cmFuc2x1Y2VudCB3aW5kb3dzIGFuZCBtdWx0aXBsZSBkaXNwbGF5IGxheWVycyBvbiB0b3Agb2YgdGhlIFwKK0xpbnV4IGZyYW1lYnVmZmVyIGRldmljZS4iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGNmM2M4MjU2NTllODI1Mzk2NDVkYTQxYTc5MDg1ODkiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9kaXJlY3RmYi5vcmciCitERVBFTkRTID0gImpwZWcgbGlicG5nIGZyZWV0eXBlIHpsaWIgdHNsaWIgc3lzZnN1dGlscyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy9kb3dubG9hZHMvQ29yZS9EaXJlY3RGQi0xLjcvRGlyZWN0RkItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmFzaGlzbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vRGlyZWN0RkItJHtQVn0iCisKK0xERkxBR1NfYXBwZW5kID0iIC1sdHMgLWxtIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2RpcmVjdGZiLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tqcGVnMjAwMF0gPSAiLS1lbmFibGUtanBlZzIwMDAsLS1kaXNhYmxlLWpwZWcyMDAwLGphc3BlciIKK1BBQ0tBR0VDT05GSUdbZHJta21zXSA9ICItLWVuYWJsZS1kcm1rbXMsLS1kaXNhYmxlLWRybWttcyxsaWJkcm0iCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKK1BBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLXdpdGgtZ2Z4ZHJpdmVycz1ub25lIFwKKyAgLS1lbmFibGUtZnJlZXR5cGU9eWVzIFwKKyAgLS1lbmFibGUtemxpYiBcCisgIC0tZGlzYWJsZS1pbWxpYjIgXAorICAtLWRpc2FibGUtbWVzYSBcCisgIC0tZGlzYWJsZS1zZGwgXAorICAtLWRpc2FibGUtdm5jIFwKKyAgLS1kaXNhYmxlLXgxMSBcCisiCisKKyNPbmNlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIG9wdGlvbiBvZiBnY2MgaXMgYWRkZWQgaW50byBUQVJHRVRfQ0xGQUdTIGFzIGRlZmF1bHQKKyN0aGlzIHdpbGwgY2F1c2UgZGlyZWN0ZmIgYnVpbGQgZmFpbHVyZSBvbiB4ODYgYXJjaCwgc28gZmlsdGVyIG91dCBpdC4KK1RBUkdFVF9DRkxBR1NfcmVtb3ZlX3g4NiA9ICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciIKKworI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5kaXJlY3RmYi1pbnB1dGRyaXZlcnMtLioiCisjCisjcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworIyAgICBpbnB1dGRyaXZlcnNfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMnKQorIyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBpbnB1dGRyaXZlcnNfbGliZGlyLCAnKi5zbyQnLCAnZGlyZWN0ZmItaW5wdXRkcml2ZXJzLSVzJywgJ0RpcmVjdGZiIHBsdWdpbiBmb3IgJXMnKQorI30KKworIyBOT1RFOiBtb25vbGl0aGljIHBhY2thZ2luZyBmb3Igbm93LCBzaG91bGQgaW1wcm92ZSB0aGF0IGV2ZW50dWFsbHkKKworCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vKi8qLy5kZWJ1Zy8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9LyovLmRlYnVnLyouc28gXAorIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIlwKKyAgJHtiaW5kaXJ9L2RpcmVjdGZiLWNvbmZpZyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9zeXN0ZW1zLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW50ZXJmYWNlcy8qLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vd20vKi5sYSBcCisiCisKK0ZJTEVTXyR7UE59ICs9ICJcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9zeXN0ZW1zLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW50ZXJmYWNlcy8qLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vd20vKi5zbyBcCisgICR7ZGF0YWRpcn0vZGlyZWN0ZmItJHtQVn0gXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmUwZjc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSBmNDNlZjQ0ODA2ZmZiOGUzYjM1ZDk5MDcwZGRlOWI2Y2MxNzE0ZDNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgOCBTZXAgMjAxNSAyMTozMjoyMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBnZngsZGlyZWN0OiBBYm9pZCB1c25nIFZMQXMgYW5kIHByaW50ZiBmb3JtYXRzCisKK1ZMQXMgYXJlIGZsYWdnZWQgYnkgY2xhbmcgd2hlbiB1c2luZyBub24tUE9EIHR5cGVzLCB0aGVyZWZvcmUgcmVwbGFjZQordGhlIHVzYWdlIHdpdGggYWxsb2NhIHdoaWNoIGlzIGV4YWN0IHNhbWUgYWxsb2NhdGlvbiBvbiBzdGFjaworCisgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXykpKSBpcyBub3QgcG9ydGFibGUgYXMgdXNlZCBoZXJlCisgdGhlcmVmb3JlIGRpc2FibGUgdGhlIGNoZWNrIGZvciBjbGFuZyBoZXJlLCB3ZSBsb3NlIG5vIGZ1bmN0aW9uYWxpdHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWIvZGlyZWN0L3V0aWwuaCB8IDIgKy0KKyBzcmMvZ2Z4L3V0aWwuY3BwICB8IDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kaXJlY3QvdXRpbC5oIGIvbGliL2RpcmVjdC91dGlsLmgKK2luZGV4IDcyOTQxZTkuLjhlN2ZhNGEgMTAwNjQ0CistLS0gYS9saWIvZGlyZWN0L3V0aWwuaAorKysrIGIvbGliL2RpcmVjdC91dGlsLmgKK0BAIC05OCw3ICs5OCw3IEBACisgI2RlZmluZSBEX0NPTlNUX0ZVTkMKKyAjZW5kaWYKKyAKKy0jaWYgX19HTlVDX18gPj0gMworKyNpZiBfX0dOVUNfXyA+PSAzICYmICFkZWZpbmVkIF9fY2xhbmdfXworICNkZWZpbmUgRF9GT1JNQVRfUFJJTlRGKG4pICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgbiwgbisxKSkpCisgI2RlZmluZSBEX0ZPUk1BVF9WUFJJTlRGKG4pICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBuLCAwKSkpCisgI2Vsc2UKK2RpZmYgLS1naXQgYS9zcmMvZ2Z4L3V0aWwuY3BwIGIvc3JjL2dmeC91dGlsLmNwcAoraW5kZXggNDAwMzJiYy4uZDEwMTVkNCAxMDA2NDQKKy0tLSBhL3NyYy9nZngvdXRpbC5jcHAKKysrKyBiL3NyYy9nZngvdXRpbC5jcHAKK0BAIC0yOTQsOCArMjk0LDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfc3RlcmVvKCBDb3JlU3VyZmFjZSAgICAgICAgICAgKnNvdXJjZSwKKyB7CisgICAgICB1bnNpZ25lZCBpbnQgaSwgbiA9IDA7CisgICAgICBERkJSZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgc291cmNlLT5jb25maWcuc2l6ZS53LCBzb3VyY2UtPmNvbmZpZy5zaXplLmggfTsKKy0gICAgIERGQlJlY3RhbmdsZSByZWN0c1tudW1dOworLSAgICAgREZCUG9pbnQgICAgIHBvaW50c1tudW1dOworKyAgICAgREZCUmVjdGFuZ2xlICpyZWN0cyA9ICAoREZCUmVjdGFuZ2xlKilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUmVjdGFuZ2xlKSAqIG51bSk7CisrICAgICBERkJQb2ludCAqcG9pbnRzID0gIChERkJQb2ludCopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlBvaW50KSAqIG51bSk7CisgCisgICAgICBmb3IgKGk9MDsgaTxudW07IGkrKykgeworICAgICAgICAgICBERkJfUkVHSU9OX0FTU0VSVCggJnJlZ2lvbnNbaV0gKTsKK0BAIC0zNTEsOCArMzUxLDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfY2xpZW50KCBDb3JlU3VyZmFjZSAgICAgICAgICAgICAqc291cmNlLAorIHsKKyAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICBpLCBuID0gMDsKKyAgICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICByZWN0ID0geyAwLCAwLCBzb3VyY2UtPmNvbmZpZy5zaXplLncsIHNvdXJjZS0+Y29uZmlnLnNpemUuaCB9OworLSAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgIHJlY3RzW251bV07CistICAgICBERkJQb2ludCAgICAgICAgICAgICAgICAgcG9pbnRzW251bV07CisrICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAqcmVjdHMgPSAgKERGQlJlY3RhbmdsZSopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlJlY3RhbmdsZSkgKiBudW0pOworKyAgICAgREZCUG9pbnQgICAgICAgICAgICAgICAgKnBvaW50cyA9ICAoREZCUG9pbnQqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJQb2ludCkgKiBudW0pOworICAgICAgQ29yZUdyYXBoaWNzU3RhdGVDbGllbnQgKmNsaWVudCA9IF9jbGllbnQgPyBfY2xpZW50IDogJlN0YXRlQ2xpZW50OjpHZXQoKS0+Y2xpZW50OworICAgICAgQ2FyZFN0YXRlICAgICAgICAgICAgICAgKnN0YXRlICA9IGNsaWVudC0+c3RhdGU7CisgICAgICBDYXJkU3RhdGUgICAgICAgICAgICAgICAgYmFja3VwOworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9iYXNoaXNtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY0ZTkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaApAQCAtMCwwICsxLDE4IEBACiske3gvL3kvfSBpcyBhIGJhc2ggc3ludGF4LiBSZXBsYWNlIHdpdGggc29tZXRoaW5nIGRhc2ggY29tcGF0aWJsZQorCitSUCAyMDE1LzUvMworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBEaXJlY3RGQi0xLjcuNy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIERpcmVjdEZCLTEuNy43L2NvbmZpZ3VyZS5pbgorQEAgLTI2OTYsNyArMjY5Niw3IEBAIEFNX0NPTkRJVElPTkFMKEJVSUxEX1RPT0xTLCB0ZXN0ICIkd2l0aF8KKyBBTV9DT05ESVRJT05BTChDUk9TU19DT01QSUxJTkcsIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gInllcyIpCisgCisgQ0ZMQUdTPSIkQ0ZMQUdTICRERkJfSU5URVJOQUxfQ0ZMQUdTIgorLUNYWEZMQUdTPSIkQ1hYRkxBR1MgJHtDRkxBR1MvLy1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24vfSIKKytDWFhGTEFHUz0iJENYWEZMQUdTICQocHJpbnRmICclc1xuJyAiJENGTEFHUyIgfCBzZWQgJ3MvLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbi8vZycpIgorIERGQl9MREZMQUdTPSIkTERGTEFHUyAkWkxJQl9MSUJTIgorIAorIENGTEFHUz0iJENGTEFHUyAkQ0ZMQUdTX1NURCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhjMDE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29uZmlndXJlZml4LnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0xpYnRvb2wgbmVlZHMgdGhlc2Ugc2V0IGNvcnJlY3RseSBlbHNlIHdlIGVuZCB1cCB3aXRoIHBvaW50bGVzcyBycGF0aHMKK3N1Y2ggYXMgdGhlIFFBIHdhcm5pbmdzOgorCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJsYXllciBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJtYXN0ZXIgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZnQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZHVtcCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnB1dCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJmeCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJzY3JlZW4gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnNwZWN0b3IgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9ta2RmaWZmIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5mbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYnBlbm1vdW50IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmZ1c2lvbi0xLjQuc28uNiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvbGliZnVzaW9uLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZmJkZXYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2Rldm1lbS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZHVtbXkuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl92NGwuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lDb3JlUmVzb3VyY2VNYW5hZ2VyL2xpYmljb3JlcmVzb3VyY2VtYW5hZ2VyX3Rlc3Quc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9qcGVnLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfcG5nLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfZGZpZmYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9mdDIuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9kZ2lmZi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3dtL2xpYmRpcmVjdGZid21fZGVmYXVsdC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl96eXRyb25pYy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wZW5tb3VudC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saW51eF9pbnB1dC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9zZXJpYWxtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9tdXRvdWNoLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3RzbGliLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX2pveXN0aWNrLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3NvbnlwaS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saXJjLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3dtOTd4eF90cy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wczJtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9rZXlib2FyZC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTIvMDMvMTYKKworSW5kZXg6IERpcmVjdEZCLTEuNC4xNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBEaXJlY3RGQi0xLjQuMTUub3JpZy9jb25maWd1cmUuaW4JMjAxMi0wMy0xNiAxMzozMjoyMy42OTI0MDI4NzkgKzAwMDAKKysrKyBEaXJlY3RGQi0xLjQuMTUvY29uZmlndXJlLmluCTIwMTItMDMtMTYgMTM6MzM6MjIuMzEyNDAwOTYwICswMDAwCitAQCAtOTcsMTMgKzk3LDYgQEAKKyBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQorIEFDX0NIRUNLX0ZVTkNTKGZvcmspCisgCistCistIyMgV29yayBhcm91bmQgbGlic3R1aGwgZHVyaW5nIGNyb3NzIGJ1aWxkLi4uCistaWYgdGVzdCAiJGhvc3QiICE9ICIkYnVpbGQiOyB0aGVuCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iIgorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIiCistZmkKKy0KKyBBQ19QQVRIX1BST0dTKFBFUkwsIHBlcmw1IHBlcmwpCisgCisgQUNfUEFUSF9QUk9HKE1BTjJIVE1MLCBtYW4yaHRtbCwgbm8pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4MWE2NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaApAQCAtMCwwICsxLDM2IEBACitkaXJlY3RmYjogRml4IGZvciBoYW5ncyBpbiBkaXJlY3RfdGVzdCwgZnVzaW9uX3NraXJtaXNoIG9uIGV4aXQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW4gUG9zdCA8bGF1cmVuLnBvc3RAZnJlZXNjYWxlLmNvbT4KKworLS0tIGEvbGliL2Z1c2lvbi9mdXNpb24uYwkyMDEzLTAxLTE4IDIyOjU3OjExLjAwMDAwMDAwMCArMDgwMAorKysrIGIvbGliL2Z1c2lvbi9mdXNpb24uYwkyMDEzLTA3LTA0IDEwOjQyOjU2LjUwMjY5OTExOSArMDgwMAorQEAgLTI4NTMsOSArMjg1MywxNCBAQAorICAgICAgICAgICBkaXJlY3RfbXV0ZXhfbG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisgCisgICAgICAgICAgIHdoaWxlICgxKSB7CistICAgICAgICAgICAgICAgaWYgKCF3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzKQorKyAgICAgICAgICAgICAgIGlmICghd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVycyl7CisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rfd2FpdHF1ZXVlX3dhaXQoICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9jb25kLCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKy0KKysgICAgICAgICAgICAgICAgICAgIGlmICh3b3JsZC0+ZGlzcGF0Y2hfc3RvcCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICBEX0RFQlVHX0FUKCBGdXNpb25fTWFpbl9EaXNwYXRjaCwgIiAgLT4gSUdOT1JJTkcgKGRpc3BhdGNoX3N0b3AhKVxuIiApOworKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RfbXV0ZXhfdW5sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1ZiA9IChGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKil3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzOworICAgICAgICAgICAgICAgIERfTUFHSUNfQVNTRVJUKCBidWYsIEZ1c2lvbkV2ZW50RGlzcGF0Y2hlckJ1ZmZlciApOworIAorQEAgLTI4NzIsNiArMjg3NywxMSBAQAorIC8vRF9JTkZPKCJ3YWl0aW5nLi4uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgIERfQVNTRVJUKCBidWYtPnJlYWRfcG9zID09IGJ1Zi0+d3JpdGVfcG9zICk7CisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rfd2FpdHF1ZXVlX3dhaXQoICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9jb25kLCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysJCSAgICAgIGlmICh3b3JsZC0+ZGlzcGF0Y2hfc3RvcCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICBEX0RFQlVHX0FUKCBGdXNpb25fTWFpbl9EaXNwYXRjaCwgIiAgLT4gSUdOT1JJTkcgKGRpc3BhdGNoX3N0b3AhKVxuIiApOworKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RfbXV0ZXhfdW5sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgIGJ1ZiA9IChGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKil3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYl8xLjcuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmMwNzBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGRpcmVjdGZiLmluYworCitSViA9ICIxLjctNyIKKworTEVBRF9TT05BTUUgPSAibGliZGlyZWN0ZmItMS43LnNvLjAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNTJjZjE4NjNiMWEzYTI4YWExMzcwZTkwNTM0NDBiZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzg1YzYzOGRjMzFiOGZlM2E3YzgxYmUxNDc1Yzg5YjIyNTVhYjNkNjdiNzc3Yzc0N2QzZmJjNTJmODAyN2EzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2luc3RhbGx0ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc1ZGFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAordGVzdHM6IGFsc28gaW5zdGFsbCB0ZXN0cyBhcHAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggYmYxOTg3Zi4uZDkwOWUxOSAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTI3LDEwICsyNywxMSBAQCBBTV9DUFBGTEFHUyA9IFwKKyAKKyBMREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJkcm0ubGEKKyAKKy1jaGVja19QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgPSBcCisgCWRyaXN0YXQgXAorIAlkcm1zdGF0CisgCisrY2hlY2tfUFJPR1JBTVMgPQorIGlmIEhBVkVfTk9VVkVBVQorIFNVQkRJUlMgKz0gbm91dmVhdQorIGVuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjYyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjMwNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCBEUk0gc2VydmljZXMiCitERVNDUklQVElPTiA9ICJUaGUgcnVudGltZSBsaWJyYXJ5IGZvciBhY2Nlc3NpbmcgdGhlIGtlcm5lbCBEUk0gc2VydmljZXMuICBEUk0gXAorc3RhbmRzIGZvciBcIkRpcmVjdCBSZW5kZXJpbmcgTWFuYWdlclwiLCB3aGljaCBpcyB0aGUga2VybmVsIHBvcnRpb24gb2YgdGhlIFwKK1wiRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZVwiIChEUkkpLiAgRFJJIGlzIHJlcXVpcmVkIGZvciBtYW55IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGY4NmRybS5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzI7bWQ1PWM4YTNiOTYxYWY3NjY3YzUzMDgxNjc2MWU5NDlkYzcxIgorUFJPVklERVMgPSAiZHJtIgorREVQRU5EUyA9ICJsaWJwdGhyZWFkLXN0dWJzIHVkZXYgbGlicGNpYWNjZXNzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnL2xpYmRybS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luc3RhbGx0ZXN0cy5wYXRjaCAiCitTUkNfVVJJW21kNXN1bV0gPSAiYzkyOTFiYWUwZTVjYTY1ZDE0ODM4MjFkMzY5OGQzYWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTA2YzI5NGJkYmUxYzk0YzNjYTA4NDMwNWQ2MWE2ZTVhODM2N2YzYjQ5ODZlNmNjMTNiMWU5YjNmNzU5MzFkYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNhaXJvLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtb21hcC1leHBlcmltZW50YWwtYXBpIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC10ZXN0LXByb2dyYW1zIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZhbGdyaW5kIFwKKyAgICAgICAgICAgICAgICAiCisKK0FMTE9XX0VNUFRZXyR7UE59LWRyaXZlcnMgPSAiMSIKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyAke1BOfS1kcml2ZXJzICR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgXAorICAgICAgICAgICAgICR7UE59LWludGVsICR7UE59LWV4eW5vcyAke1BOfS1rbXMgJHtQTn0tZnJlZWRyZW5vIgorCitSUkVDT01NRU5EU18ke1BOfS1kcml2ZXJzID0gIiR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgJHtQTn0taW50ZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BOfS1leHlub3MgJHtQTn0tZnJlZWRyZW5vIgorCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2JpbmRpcn0vZHIqICR7YmluZGlyfS9tb2RlKiAke2JpbmRpcn0vKnRlc3QiCitGSUxFU18ke1BOfS1yYWRlb24gPSAiJHtsaWJkaXJ9L2xpYmRybV9yYWRlb24uc28uKiIKK0ZJTEVTXyR7UE59LW5vdXZlYXUgPSAiJHtsaWJkaXJ9L2xpYmRybV9ub3V2ZWF1LnNvLioiCitGSUxFU18ke1BOfS1vbWFwID0gIiR7bGliZGlyfS9saWJkcm1fb21hcC5zby4qIgorRklMRVNfJHtQTn0taW50ZWwgPSAiJHtsaWJkaXJ9L2xpYmRybV9pbnRlbC5zby4qIgorRklMRVNfJHtQTn0tZXh5bm9zID0gIiR7bGliZGlyfS9saWJkcm1fZXh5bm9zLnNvLioiCitGSUxFU18ke1BOfS1rbXMgPSAiJHtsaWJkaXJ9L2xpYmttcyouc28uKiIKK0ZJTEVTXyR7UE59LWZyZWVkcmVubyA9ICIke2xpYmRpcn0vbGliZHJtX2ZyZWVkcmVuby5zby4qIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ZDMxZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby1mYl8xLjAuMC5iYgpAQCAtMCwwICsxLDYgQEAKK0VHTElORk9fUExBVEZPUk0gPz0gImZiIgorRUdMSU5GT19CSU5BUllfTkFNRSA/PSAiZWdsaW5mby1mYiIKKworaW5jbHVkZSBlZ2xpbmZvLmluYworCitTVU1NQVJZICs9ICIoRnJhbWVidWZmZXIgdmVyc2lvbikiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8teDExXzEuMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDI3ZmRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYgpAQCAtMCwwICsxLDEyIEBACitFR0xJTkZPX1BMQVRGT1JNID89ICJ4MTEiCitFR0xJTkZPX0JJTkFSWV9OQU1FID89ICJlZ2xpbmZvLXgxMSIKKworaW5jbHVkZSBlZ2xpbmZvLmluYworCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1VNTUFSWSArPSAiKFgxMSB2ZXJzaW9uKSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NzY4OGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3IgcHJpbnRpbmcgaW5mb3JtYXRpb24gRUdMIGFuZCBpdHMgY2xpZW50IEFQSXMgKE9wZW5HTCwgT3BlbkdMIEVTLCBPcGVuVkcpIgorU0VDVElPTiA9ICJncmFwaGljcyIKK0xJQ0VOU0UgPSAiWmxpYiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kdjEvZWdsaW5mbyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThkNGYzM2JjM2FkZDk3NmY3ZGZhZTg1ZGFiNjZmMDNjIgorCitERVBFTkRTID0gInZpcnR1YWwvZWdsIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZHYxL2VnbGluZm8uZ2l0O2JyYW5jaD1tYXN0ZXIiCitTUkNSRVYgPSAiNGIzMTc2NDhlYzZjZjM5NTU2YTllNWQ4MDc4ZjYwNWJjMGVkZDVkZSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCB3YWYKKworIyBCU1AgbGF5ZXJzIHNob3VsZCBhZGQgLmJiYXBwZW5kIGZpbGVzIGZvciB0aGUgLXgxMSBhbmQgLWZiIC5iYiByZWNpcGVzLCB3aGljaAorIyBhcHBlbmQgdGhlIHJlc3BlY3RpdmUgRUdML09wZW5HTEVTL09wZW5WRyBsaWJyYXJpZXMgdG8gREVQRU5EUyBhbmQgc2V0CisjIEVHTF9ERVZJQ0UgYXMgYXBwcm9wcmlhdGUuCitFR0xJTkZPX0RFVklDRSA/PSAiZ2VuZXJpYyIKKworRVhUUkFfT0VDT05GID0gIi0tcGxhdGZvcm09JHtFR0xJTkZPX1BMQVRGT1JNfSBcCisgICAgICAgICAgICAgICAgLS1kZXZpY2U9JHtFR0xJTkZPX0RFVklDRX0gXAorICAgICAgICAgICAgICAgIC0tc3lzcm9vdCAke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW12ICR7RH0vJHtiaW5kaXJ9L2VnbGluZm8gJHtEfS8ke2JpbmRpcn0vJHtFR0xJTkZPX0JJTkFSWV9OQU1FfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTFlNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorUmV2ZXJ0IHBhcnQgb2YgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2ZvbnRjb25maWcvY29tbWl0L2ZvbnRjb25maWcucGMuaW4/aWQ9MzM4ZmZlNmI4ODZhZDRiYTg2ZmY0NzFjYjU5YzRhNWU1ZmZiZTQwOAorV2UgcmVhbGx5IGRvbnQgZG8gc3RhdGljIGxpbmtpbmcgc28gaXRzIG5vdCBnb2luZyB0byBjYXVzZSBpc3N1ZXMgZm9yIHVzIGJ1dCBhcyBzdWNoIHRoaXMgaXMgaGFybWluZyB1cyBieSBhZGRpbmcgYWJzb2x1dGUKK3BhdGhzIGludG8gLUkgb3B0aW9ucyBpbnRvIGZvbnRjb25maWcucGMgd2hpY2ggaXMgdGhlbSBwcmVwZW5kZWQgd2l0aCBzeXNyb290IHdoZW4gcmVhZCBiYWNrIGJ5IGNyb3NzIHBrZy1jb25maWcgYW5kCit3ZSBlbmQgdXAgd2l0aCAtSSA8c3lzcm9vdD4vPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL2ZvbnRjb25maWcgaW4gQ0ZMQUdTIG9mIGNsaWVudHMgd2hpY2ggZGVwZW5kIG9uIGl0LiBvbmUgc3VjaCBleGFtcGxlCitpcyBtYXRjaGJveC1wYW5lbC0yIGFuZCBpdCB3YXMgd29ya2luZyBmaW5lIHdpdGggZ2NjIDwgNSBiZWNhdXNlIGl0IHRvbGVyYXRlZCBub24tZXhpc3RpbmcgcGF0aHMgaW4gLUkgZmxhZ3MgYnV0IGdjYy01CitnZW50bHkgcmVmdXNlcyBhbmQgcmlnaHRseSBzby4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBmb250Y29uZmlnLTIuMTEuOTMvZm9udGNvbmZpZy5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZvbnRjb25maWctMi4xMS45My5vcmlnL2ZvbnRjb25maWcucGMuaW4KKysrKyBmb250Y29uZmlnLTIuMTEuOTMvZm9udGNvbmZpZy5wYy5pbgorQEAgLTE1LDQgKzE1LDQgQEAgUmVxdWlyZXM6IEBQS0dDT05GSUdfUkVRVUlSRVNACisgUmVxdWlyZXMucHJpdmF0ZTogQFBLR0NPTkZJR19SRVFVSVJFU19QUklWQVRFTFlACisgTGliczogLUwke2xpYmRpcn0gLWxmb250Y29uZmlnCisgTGlicy5wcml2YXRlOiBARVhQQVRfTElCU0AgQEZSRUVUWVBFX0xJQlNAIEBJQ09OVl9MSUJTQCBATElCWE1MMl9MSUJTQAorLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBFWFBBVF9DRkxBR1NAIEBGUkVFVFlQRV9DRkxBR1NAIEBJQ09OVl9DRkxBR1NAIEBMSUJYTUwyX0NGTEFHU0AKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMS45NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJmZjIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGZvbnQgY29uZmlndXJhdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRm9udGNvbmZpZyBpcyBhIGZvbnQgY29uZmlndXJhdGlvbiBhbmQgY3VzdG9taXphdGlvbiBsaWJyYXJ5LCB3aGljaCBcCitkb2VzIG5vdCBkZXBlbmQgb24gdGhlIFggV2luZG93IFN5c3RlbS4gSXQgaXMgZGVzaWduZWQgdG8gbG9jYXRlIFwKK2ZvbnRzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCBzZWxlY3QgdGhlbSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIFwKK3NwZWNpZmllZCBieSBhcHBsaWNhdGlvbnMuIFwKK0ZvbnRjb25maWcgaXMgbm90IGEgcmFzdGVyaXphdGlvbiBsaWJyYXJ5LCBub3IgZG9lcyBpdCBpbXBvc2UgYSBcCitwYXJ0aWN1bGFyIHJhc3Rlcml6YXRpb24gbGlicmFyeSBvbiB0aGUgYXBwbGljYXRpb24uIFRoZSBYLXNwZWNpZmljIFwKK2xpYnJhcnkgJ1hmdCcgdXNlcyBmb250Y29uZmlnIGFsb25nIHdpdGggZnJlZXR5cGUgdG8gc3BlY2lmeSBhbmQgXAorcmFzdGVyaXplIGZvbnRzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mb250Y29uZmlnLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9Zm9udGNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUgJiBNSVQgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdhMDQ0OWU5YmM1MzcwNDAyYTk0YzAwMjA0YmVjYTNkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2ZyZWV0eXBlLmM7ZW5kbGluZT00NTttZDU9NWQ5NTEzZTMxOTZhMWZiZmRmYTk0MDUxYzA5ZGZjODQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZjY2FjaGUuYztiZWdpbmxpbmU9MTE5OTtlbmRsaW5lPTEyMTQ7bWQ1PTAzMjZjZmViNGE3MzMzZGQ0ZGQyNWZiYmM0YjlmMjdmIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZXhwYXQgZnJlZXR5cGUgemxpYiIKKworU1JDX1VSSSA9ICJodHRwOi8vZm9udGNvbmZpZy5vcmcvcmVsZWFzZS9mb250Y29uZmlnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NzliZTg3MGM3ZjgzZjE1Zjg3YmFjMDg1YjYxZDY0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3M2Y2ZDMyM2M3YmNmYmRlMjVkNzgzOTc2NzUxOTFkNTViOGY0MTM5MTMyYzZhOTQ0NDQxMGYzYTJkOGE5YTk1IgorCitQQUNLQUdFUyA9KyAiZm9udGNvbmZpZy11dGlscyIKK0ZJTEVTXyR7UE59ID0rICIke2RhdGFkaXJ9L3htbC8qIgorRklMRVNfZm9udGNvbmZpZy11dGlscyA9ICIke2JpbmRpcn0vKiIKKworIyBXb3JrIGFyb3VuZCBwYXN0IGJyZWFrYWdlIGluIGRlYmlhbi5iYmNsYXNzCitSUFJPVklERVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorUlJFUExBQ0VTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JDT05GTElDVFNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorREVCSUFOX05PQVVUT05BTUVfZm9udGNvbmZpZy11dGlscyA9ICIxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKKworRVhUUkFfT0VDT05GID0gIiAtLWRpc2FibGUtZG9jcyAtLXdpdGgtZGVmYXVsdC1mb250cz0ke2RhdGFkaXJ9L2ZvbnRzIC0td2l0aC1jYWNoZS1kaXI9JHtGT05UQ09ORklHX0NBQ0hFX0RJUn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTk5YzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuYmIKQEAgLTAsMCArMSw2MCBAQAorU1VNTUFSWSA9ICJGcmVldHlwZSBmb250IHJlbmRlcmluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRnJlZVR5cGUgaXMgYSBzb2Z0d2FyZSBmb250IGVuZ2luZSB0aGF0IGlzIGRlc2lnbmVkIHRvIGJlIHNtYWxsLCBlZmZpY2llbnQsIFwKK2hpZ2hseSBjdXN0b21pemFibGUsIGFuZCBwb3J0YWJsZSB3aGlsZSBjYXBhYmxlIG9mIHByb2R1Y2luZyBoaWdoLXF1YWxpdHkgb3V0cHV0IChnbHlwaCBcCitpbWFnZXMpLiBJdCBjYW4gYmUgdXNlZCBpbiBncmFwaGljcyBsaWJyYXJpZXMsIGRpc3BsYXkgc2VydmVycywgZm9udCBjb252ZXJzaW9uIHRvb2xzLCB0ZXh0IFwKK2ltYWdlIGdlbmVyYXRpb24gdG9vbHMsIGFuZCBtYW55IG90aGVyIHByb2R1Y3RzIGFzIHdlbGwuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLm5vbmdudS5vcmcvYnVncy8/Z3JvdXA9ZnJlZXR5cGUiCisKK0xJQ0VOU0UgPSAiRnJlZVR5cGUgfCBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL0xJQ0VOU0UuVFhUO21kNT1jMDE3ZmYxN2ZjNmYwNzk0YWRmOTNkYjU1NTljY2Q1NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL0ZUTC5UWFQ7bWQ1PWQ0NzllODM3OTdmNjk5ZmU4NzNiMzhkYWRkMGZjZDRjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvR1BMdjIuVFhUO21kNT04ZWYzODA0NzZmNjQyYzIwZWJmNDBmZWNiMGFkZDJlYyIKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mcmVldHlwZS9mcmVldHlwZS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjU2ODI4OTBjYjAyNjdmNjY3MWRkM2RlNmVhYmQzZTY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg0NjlmYjgxMjQ3NjRmODUwMjljYzgyNDdjMzFlMTMyYTJjNWU1MTA4NGRkY2UyYTQ0ZWEzMmVlNGFlODM0N2UiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZnJlZXR5cGUtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIKKworTElCVE9PTCA9ICIke1N9L2J1aWxkcy91bml4LyR7SE9TVF9TWVN9LWxpYnRvb2wiCitFWFRSQV9PRU1BS0UgPSAiJ0xJQlRPT0w9JHtMSUJUT09MfSciCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtemxpYiAtLXdpdGhvdXQtYnppcDIgQ0NfQlVJTEQ9JyR7QlVJTERfQ0N9JyIKK1RBUkdFVF9DUFBGTEFHUyArPSAiLURfRklMRV9PRkZTRVRfQklUUz02NCIKKworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1twaXhtYXBdID0gIi0td2l0aC1wbmcsLS13aXRob3V0LXBuZyxsaWJwbmciCisjIFRoaXMgcmVzdWx0cyBpbiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgc28gZW5hYmxpbmcgaXMgbm9uLXRyaXZpYWwKK1BBQ0tBR0VDT05GSUdbaGFyZmJ1enpdID0gIi0td2l0aC1oYXJmYnV6eiwtLXdpdGhvdXQtaGFyZmJ1enosaGFyZmJ1enoiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwljZCBidWlsZHMvdW5peAorCWxpYnRvb2xpemUgLS1mb3JjZSAtLWNvcHkKKwlhY2xvY2FsIC1JIC4KKwlnbnUtY29uZmlnaXplIC0tZm9yY2UKKwlhdXRvY29uZgorCWNkICR7U30KKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbmZpZ3VyZV9jbGFzcy1uYXRpdmUoKSB7CisJKGNkIGJ1aWxkcy91bml4ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBydW5uaW5nIGdudS1jb25maWdpemUiCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJJHtCVUlMRF9DQ30gLW8gb2Jqcy9hcGluYW1lcyBzcmMvdG9vbHMvYXBpbmFtZXMuYworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZnJlZXR5cGUyL2NvbmZpZy9mdGNvbmZpZy5oCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9mc3Rlc3RzL2ZzdGVzdHNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWMzM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlZhcmlvdXMgYmVuY2htYXJuaW5nIHRlc3RzIGZvciBYIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiWmxpYiIKK0RFUEVORFMgPSAicGFuZ28gbGlieGV4dCBsaWJ4ZnQgdmlydHVhbC9saWJ4MTEgZ3RrKyIKKworU1JDUkVWID0gImU1OTM5ZmY2MDhiOTVjZGQ0ZDBhYjBlMTkzNTc4MWFiOWEyNzZhYzAiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly90ZXN0LXBhbmdvLWdkay5jO2VuZGxpbmU9MjQ7bWQ1PTFlZTc0ZWM4NTFlY2RhNTdlYjdhYzZjYzE4MGY3NjU1IgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3Rlc3RzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvYXV0b3Rvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZlMDg3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDE0OSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnbGV3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9NYWtlZmlsZS5hbQkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSw1IEBACisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLS1pbnN0YWxsCisrCisrU1VCRElSUyA9IGluY2x1ZGUgc3JjCisrCitJbmRleDogZ2xldy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L2NvbmZpZ3VyZS5hYwkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSw2NyBAQAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisrCisrQUNfUFJFUkVRKFsyLjYyXSkKKytBQ19JTklUKFtnbGV3XSwgWzEuOS4wXSwgW0JVRy1SRVBPUlQtQUREUkVTU10pCisrQUNfQ09ORklHX1NSQ0RJUihbc3JjL2dsZXcuY10pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKytBTV9JTklUX0FVVE9NQUtFKFstV2FsbCAtV2Vycm9yIGZvcmVpZ25dKQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKysKKytMVF9JTklUCisrCisrIyBDaGVja3MgZm9yIHByb2dyYW1zLgorK0FDX1BST0dfQ0MKKytBQ19QUk9HX0lOU1RBTEwKKytBQ19QUk9HX0xOX1MKKysKKysjIENoZWNrcyBmb3IgbGlicmFyaWVzLgorKworKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCisrQUNfQ0hFQ0tfSEVBREVSUyhbaW50dHlwZXMuaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRsaWIuaCBzdHJpbmcuaF0pCisrCisrIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorK0FDX1RZUEVfSU5UMzJfVAorK0FDX1RZUEVfSU5UNjRfVAorK0FDX1RZUEVfVUlOVDY0X1QKKytBQ19DSEVDS19UWVBFUyhbcHRyZGlmZl90XSkKKysKKysjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisrQUNfRlVOQ19NQUxMT0MKKytBQ19DSEVDS19GVU5DUyhbc3RydG9sXSkKKysKKysjIENoZWNrIGZvciBwa2djb25maWcgbGlicworKworK1BLR19DSEVDS19NT0RVTEVTKFtYMTFdLCBbeDExXSkKKytBQ19TVUJTVChbWDExX0xJQlNdKQorK0FDX1NVQlNUKFtYMTFfQ0ZMQUdTXSkKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbWE1VXSwgW3htdV0pCisrQUNfU1VCU1QoW1hNVV9MSUJTXSkKKytBQ19TVUJTVChbWE1VX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hJXSwgW3hpXSkKKytBQ19TVUJTVChbWElfTElCU10pCisrQUNfU1VCU1QoW1hJX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hFWFRdLCBbeGV4dF0pCisrQUNfU1VCU1QoW1hFWFRfTElCU10pCisrQUNfU1VCU1QoW1hFWFRfQ0ZMQUdTXSkKKysKKysjIENoZWNrIGZvciBHTFUgaXMgZW5vdWdoIGFuZCBpbXBsZXMgZ2wgc28gbm8gZG91YmxlZCAtbEdMIGluIExERkxBR1MKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbR0xVXSwgW2dsdV0pCisrQUNfU1VCU1QoW0dMVV9MSUJTXSkKKytBQ19TVUJTVChbR0xVX0NGTEFHU10pCisrCisrIyBFTkFCTEUgb3B0aW9uIGZvciBNdWx0aXBsZSBSZW5kZXJpbmcgQ29udGV4dHMgc3VwcG9ydAorK0FDX0NIRUNLX0VOQUJMRV9HTEVXTVgKKysKKysjIGZvciBub3cgd2UgdXNlIHRoZSBzYW1lIHZlcnNpb24gYXMgdGhlIHBhY2thZ2UsIGJ1dCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkCisrIyBpbiB0aGUgZnV0dXJlCisrCisrQUNfU1VCU1QoW0xJQkdMRVdfU09fVkVSU0lPTl0sIFsxOjk6MF0pCisrCisrQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZQorKyAgICAgICAgICAgICAgICAgaW5jbHVkZS9NYWtlZmlsZQorKyAgICAgICAgICAgICAgICAgc3JjL01ha2VmaWxlXSkKKytBQ19PVVRQVVQKK0luZGV4OiBnbGV3L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvc3JjL01ha2VmaWxlLmFtCTIwMDktMTItMDIgMDA6MzM6NDguNjkwNzg2MTEwICswMTAwCitAQCAtMCwwICsxLDM1IEBACisrCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorKworK2lmIEVOQUJMRV9HTEVXTVgKKytBTV9DUFBGTEFHUyArPSAtREdMRVdfTVgKKytlbmRpZgorKworK0FNX0NGTEFHUyA9IEBYMTFfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhNVV9DRkxBR1NAIFwKKysgICAgICAgICAgICBAWElfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhFWFRfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQEdMVV9DRkxBR1NACisrCisrbGliX0xUTElCUkFSSUVTID0gbGliR0xFVy5sYQorKworK2xpYkdMRVdfbGFfU09VUkNFUyA9IGdsZXcuYworKworK2xpYkdMRVdfbGFfTElCQUREID0gQFgxMV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWE1VX0xJQlNAIFwKKysgICAgICAgICAgICAgICAgICAgIEBYSV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWEVYVF9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAR0xVX0xJQlNACisrCisrbGliR0xFV19sYV9MREZMQUdTID0gLXZlcnNpb24tbnVtYmVyIEBMSUJHTEVXX1NPX1ZFUlNJT05ACisrCisrYmluX1BST0dSQU1TID0gZ2xld2luZm8gdmlzdWFsaW5mbworKworK2dsZXdpbmZvX1NPVVJDRVMgPSBnbGV3aW5mby5jCisrCisrZ2xld2luZm9fTERBREQgPSBsaWJHTEVXLmxhCisrCisrdmlzdWFsaW5mb19TT1VSQ0VTID0gIHZpc3VhbGluZm8uYworKworK3Zpc3VhbGluZm9fTERBREQgPSBsaWJHTEVXLmxhCisrCitJbmRleDogZ2xldy9tNC9nbGV3bXgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L200L2dsZXdteC5tNAkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSwxMSBAQAorKworK0FDX0RFRlVOKFtBQ19DSEVDS19FTkFCTEVfR0xFV01YXSxbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIHN1cHBvcnRdKQorK0FDX0FSR19FTkFCTEUoW2dsZXdteF0sCisrICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbGV3bXhdLCBbZW5hYmxlIEdMRVcgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIChkZWZhdWx0IGlzIG5vKV0pXSwKKysgICBbRU5BQkxFX0dMRVdNWD0iJGVuYWJsZXZhbCJdLAorKyAgIFtFTkFCTEVfR0xFV01YPSJubyJdKQorK0FDX01TR19SRVNVTFQoWyR7RU5BQkxFX0dMRVdNWH1dKQorK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfR0xFV01YXSwgW3Rlc3QgeCIke0VOQUJMRV9HTEVXTVh9IiA9ICJ4eWVzIl0pCisrXSkKKysKK0luZGV4OiBnbGV3L2luY2x1ZGUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L2luY2x1ZGUvTWFrZWZpbGUuYW0JMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsMyBAQAorKworK25vYmFzZV9pbmNsdWRlX0hFQURFUlMgPSBHTC9nbGV3LmggIEdML2dseGV3LmggIEdML3dnbGV3LmgKKysKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhOTlhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKKworV2UgbWFpbnRhaW4gdGhlIGF1dG90b29scyBjb25maWd1cmUuYWMgYW5kIE1ha2VmaWxlLmFtLCB0byBjb3JyZWN0bHkKK3Byb3ZpZGUgdGhlIGdsZXcucGMsIHRoZSBmb2xsb3dpbmcgcGF0Y2ggaXMgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ2xldy0xLjExLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuMTEuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2xldy0xLjExLjAvTWFrZWZpbGUuYW0KK0BAIC0zLDMgKzMsNSBAQCBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtLWluc3RhbGwKKyAKKyBTVUJESVJTID0gaW5jbHVkZSBzcmMKKyAKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBnbGV3LnBjCitJbmRleDogZ2xldy0xLjExLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjExLjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGV3LTEuMTEuMC9jb25maWd1cmUuYWMKK0BAIC02Niw1ICs2Niw2IEBAIEFDX1NVQlNUKFtMSUJHTEVXX1NPX1ZFUlNJT05dLCBbMTo5OjBdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUKKy0gICAgICAgICAgICAgICAgIHNyYy9NYWtlZmlsZV0pCisrICAgICAgICAgICAgICAgICBzcmMvTWFrZWZpbGUKKysgICAgICAgICAgICAgICAgIGdsZXcucGNdKQorIEFDX09VVFBVVAorSW5kZXg6IGdsZXctMS4xMS4wL2dsZXcucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuMTEuMC5vcmlnL2dsZXcucGMuaW4KKysrKyBnbGV3LTEuMTEuMC9nbGV3LnBjLmluCitAQCAtNSw3ICs1LDcgQEAgaW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZS9HTAorIAorIE5hbWU6IGdsZXcKKyBEZXNjcmlwdGlvbjogVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgbGlicmFyeQorLVZlcnNpb246IEB2ZXJzaW9uQAorLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBjZmxhZ3NACistTGliczogLUwke2xpYmRpcn0gLWxAbGlibmFtZUAKKy1SZXF1aXJlczogQHJlcXVpcmVzbGliQAorK1ZlcnNpb246IEBWRVJTSU9OQAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBDRkxBR1NACisrTGliczogLUwke2xpYmRpcn0gLWxHTEVXCisrUmVxdWlyZXM6IGdsdQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDdlZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZ2xld19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgZm9sbG93aW5nIGlzc3VlIHdpdGggYXV0b21ha2UgMS4xMgorCit8IGF1dG9tYWtlOiB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogd2FybmluZzogJ2xpYkdMRVcubGEnOiBsaW5raW5nIGxpYnRvb2wgbGlicmFyaWVzIHVzaW5nIGEgbm9uLVBPU0lYCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYXV0b21ha2UtMS4xMi9hbS9sdGxpYnJhcnkuYW06IGFyY2hpdmVyIHJlcXVpcmVzICdBTV9QUk9HX0FSJyBpbiAnY29uZmlndXJlLmFjJworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMworCitJbmRleDogZ2xldy0xLjcuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuNy4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2xldy0xLjcuMC9jb25maWd1cmUuYWMKK0BAIC0xNCw2ICsxNCw5IEBAIExUX0lOSVQKKyBBQ19QUk9HX0NDCisgQUNfUFJPR19JTlNUQUxMCisgQUNfUFJPR19MTl9TCisrIyBhdXRvbWFrZSAxLjEyIHNlZW1zIHRvIHJlcXVpcmUgdGhpcywgYnV0IGF1dG9tYWtlIDEuMTEgZG9lc24ndCByZWNvZ25pemUgaXQKKyttNF9wYXR0ZXJuX2FsbG93KFtBTV9QUk9HX0FSXSkKKytBTV9QUk9HX0FSCisgCisgIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEyLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjhjNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgT3BlbkdMIEV4dGVuc2lvbiBXcmFuZ2xlciBMaWJyYXJ5IChHTEVXKSBpcyBhIGNyb3NzLXBsYXRmb3JtIG9wZW4tc291cmNlIEMvQysrIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dsZXcuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD02NzU4NiIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MmFjMjUxNTU4ZGU2ODVjNmI5NDc4ZDg5YmUzMTQ5YzIiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgdmlydHVhbC9saWJnbCBsaWJnbHUgbGlieGV4dCBsaWJ4aSBsaWJ4bXUiCisKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9nbGV3L2dsZXcvJHtQVn0vZ2xldy0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAxMjQ2YzdlY2QxMzVkOTliZTAzMWFhNjNmODZkY2ExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmNTgxMDNmNDgyNGI0NDNlN2ZhNGVkM2FmNTkzYjhlZGFjNmYzYTdiZTNiMzA5MTFlZGJjNzM0NGY0OGU0YmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS4wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwYmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVGV4dCBzaGFwaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJIYXJmQnV6eiBpcyBhbiBPcGVuVHlwZSB0ZXh0IHNoYXBpbmcgZW5naW5lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvSGFyZkJ1enoiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUhhcmZCdXp6IgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUwMjFkZDZkZGE2ZmYxZTZiMTA0NDAwMmZjNjYyYjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9oYi11Y2RuL0NPUFlJTkc7bWQ1PTk5NGJhMGYxMjk1ZjE1YjRiZGE0OTk5YTViYmVkZGVmIFwKKyIKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2hhcmZidXp6L3JlbGVhc2UvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzRmNjQ0MDQ1ZmU0MmMzOGEyNjQxZmMxZTgyYTgwMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZWIzY2FmODY1NDAxMGZjZGNhNjFjODEwYTNhNzUzMjIzN2ZjNTY3ZWU0MjcxZGViNjc0YjVlZmJiZTNiNDY2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbGliX3BhY2thZ2UKKworREVQRU5EUyA9ICJnbGliLTIuMCBjYWlybyBmcmVldHlwZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZ2xpYiAtLXdpdGgtZnJlZXR5cGUgLS13aXRoLWNhaXJvIC0td2l0aG91dC1ncmFwaGl0ZTIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJpY3UiCitQQUNLQUdFQ09ORklHW2ljdV0gPSAiLS13aXRoLWljdSwtLXdpdGhvdXQtaWN1LGljdSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWljdSAke1BOfS1pY3UtZGJnICR7UE59LWljdS1kZXYiCisKK0ZJTEVTXyR7UE59LWljdSA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvLioiCitGSUxFU18ke1BOfS1pY3UtZGJnID0gIiR7bGliZGlyfS8uZGVidWcvbGliaGFyZmJ1enotaWN1LnNvKiIKK0ZJTEVTXyR7UE59LWljdS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5sYSBcCisgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3Uuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2hhcmZidXp6LWljdS5wYyBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1jbHV0dGVyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGYyNWNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYgpAQCAtMCwwICsxLDEzIEBACitERVNDUklQVElPTiA9ICJBbiBpbWFnZSB3aXRoIHN1cHBvcnQgZm9yIHRoZSBPcGVuIEdMLWJhc2VkIHRvb2xraXQgQ2x1dHRlciwgXAord2hpY2ggZW5hYmxlcyBkZXZlbG9wbWVudCBvZiByaWNoIGFuZCBhbmltYXRlZCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgeDExLWJhc2UgeDExLXNhdG8gc3NoLXNlcnZlci1kcm9wYmVhciIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0lOU1RBTEwgPSAiXAorICAgICR7Q09SRV9JTUFHRV9CQVNFX0lOU1RBTEx9IFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLWNvcmUgXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDExOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkFuIGltYWdlIHRoYXQgdXNlcyBEaXJlY3RGQiBpbnN0ZWFkIG9mIFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitpbmhlcml0IGNvcmUtaW1hZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJkaXJlY3RmYiIKK0NPTkZMSUNUX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKwkke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisJcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKwlwYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYiBcCisiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlMjcxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYgpAQCAtMCwwICsxLDExIEBACitTVU1NQVJZID0gIkEgdmVyeSBiYXNpYyBXYXlsYW5kIGltYWdlIHdpdGggYSB0ZXJtaW5hbCIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgc3NoLXNlcnZlci1kcm9wYmVhciBod2NvZGVjcyIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIndheWxhbmQiCisKK0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMICs9ICJ3ZXN0b24gd2VzdG9uLWluaXQgd2VzdG9uLWV4YW1wbGVzIGd0ayszLWRlbW8gY2x1dHRlci0xLjAtZXhhbXBsZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1NWJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXgxMS5iYgpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiQSB2ZXJ5IGJhc2ljIFgxMSBpbWFnZSB3aXRoIGEgdGVybWluYWwiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMS1zZWxlY3QtcGxhdGZvcm1zLWJhc2VkLW9uLWNvbmZpZ3VyYXRpb24tcmVzdWx0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0YzhlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2gKQEAgLTAsMCArMSwxMjggQEAKK0Zyb20gM2E5MzE1MGJjMGFlYzg2YWZkYjdkMDUzMjQ3ZGMyNDQ4OTI1ZTA5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFdlZCwgNiBNYXkgMjAxNSAxMDo0NToyMiArMDIwMAorU3ViamVjdDogW1BBVENIIDEvMl0gc2VsZWN0IHBsYXRmb3JtcyBiYXNlZCBvbiBjb25maWd1cmF0aW9uIHJlc3VsdHMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWzFdCisKK1sxXSBodHRwczovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5L3B1bGwvNTIKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgIHwgMTMgKysrKystLS0tLS0tLQorIHNyYy9kaXNwYXRjaF9jb21tb24uYyB8ICA5ICsrKysrKy0tLQorIHNyYy9kaXNwYXRjaF9jb21tb24uaCB8ICA5ICsrKysrLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE1MmZjNTguLmJkZDcwZGEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU4LDYgKzU4LDEwIEBAIEFDX0NIRUNLX0hFQURFUihbS0hSL2tocnBsYXRmb3JtLmhdLAorICMgdWludHB0cl90IHRvIGEgdm9pZCAqIikgYnkgZGVmYXVsdC4gIEtpbGwgdGhhdC4KKyBYT1JHX1RFU1RTRVRfQ0ZMQUcoQ1dBUk5GTEFHUywgWy1Xbm8taW50LWNvbnZlcnNpb25dKQorIAorK1BLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9eWVzXSwgW3gxMT1ub10pCisrCisrQU1fQ09ORElUSU9OQUwoSEFWRV9YMTEsIHRlc3QgeCR4MTEgPSB4eWVzKQorKworIGhhc196bm93PXllcworIAorIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC04Niw3ICs5MCw3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgIDs7CisgICAgICopCisgICAgICAgICBidWlsZF9lZ2w9eWVzCistICAgICAgICBidWlsZF9nbHg9eWVzCisrICAgICAgICBidWlsZF9nbHg9JHgxMQorICAgICAgICAgYnVpbGRfd2dsPW5vCisgICAgICAgICAjIE9uIHBsYXRmb3JtcyB3aXRoIGRsb3Blbiwgd2UgbG9hZCBldmVyeXRoaW5nIGR5bmFtaWNhbGx5IGFuZAorICAgICAgICAgIyBkb24ndCBsaW5rIGFnYWluc3QgYSBzcGVjaWZpYyB3aW5kb3cgc3lzdGVtIG9yIEdMIGltcGxlbWVudGF0aW9uLgorQEAgLTE0NCwxMyArMTQ4LDYgQEAgZXNhYworIAorIEFDX1NVQlNUKFtWSVNJQklMSVRZX0NGTEFHU10pCisgCistUEtHX0NIRUNLX01PRFVMRVMoWDExLCBbeDExXSwgW3gxMT15ZXNdLCBbeDExPW5vXSkKKy1pZiB0ZXN0IHgkeDExID0geG5vIC1hIHgkYnVpbGRfZ2x4ID0geHllczsgdGhlbgorLSAgICBBQ19NU0dfRVJST1IoW2xpYlgxMSBoZWFkZXJzIChsaWJ4MTEtZGV2KSByZXF1aXJlZCB0byBidWlsZCB3aXRoIEdMWCBzdXBwb3J0XSkKKy1maQorLQorLUFNX0NPTkRJVElPTkFMKEhBVkVfWDExLCB0ZXN0IHgkeDExID0geHllcykKKy0KKyBQS0dfQ0hFQ0tfTU9EVUxFUyhHTCwgW2dsXSwgW2dsPXllc10sIFtnbD1ub10pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKK2RpZmYgLS1naXQgYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmMgYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKK2luZGV4IDRlMzRkNmUuLjJhYjg0ZWQgMTAwNjQ0CistLS0gYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKKysrKyBiL3NyYy9kaXNwYXRjaF9jb21tb24uYworQEAgLTYxNSwxMCArNjE1LDEzIEBAIGVwb3h5X2dldF9wcm9jX2FkZHJlc3MoY29uc3QgY2hhciAqbmFtZSkKKyAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICAgcmV0dXJuIGVwb3h5X2dsX2Rsc3ltKG5hbWUpOworICNlbHNlCisrI2lmIFBMQVRGT1JNX0hBU19HTFgKKyAgICAgaWYgKGVwb3h5X2N1cnJlbnRfY29udGV4dF9pc19nbHgoKSkgeworICAgICAgICAgcmV0dXJuIGdsWEdldFByb2NBZGRyZXNzQVJCKChjb25zdCBHTHVieXRlICopbmFtZSk7CistICAgIH0gZWxzZSB7CisrICAgIH0gZWxzZQorKyNlbmRpZiAvKiBQTEFURk9STV9IQVNfR0xYICovCisgI2lmIFBMQVRGT1JNX0hBU19FR0wKKysgICAgeworICAgICAgICAgR0xlbnVtIGVnbF9hcGkgPSBlcG94eV9lZ2xfZ2V0X2N1cnJlbnRfZ2xfY29udGV4dF9hcGkoKTsKKyAKKyAgICAgICAgIHN3aXRjaCAoZWdsX2FwaSkgeworQEAgLTYyOCwxMCArNjMxLDEwIEBAIGVwb3h5X2dldF9wcm9jX2FkZHJlc3MoY29uc3QgY2hhciAqbmFtZSkKKyAgICAgICAgIGNhc2UgRUdMX05PTkU6CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistI2VuZGlmCisgICAgIH0KKysjZW5kaWYgLyogUExBVEZPUk1fSEFTX0VHTCAqLworICAgICBlcnJ4KDEsICJDb3VsZG4ndCBmaW5kIGN1cnJlbnQgR0xYIG9yIEVHTCBjb250ZXh0LlxuIik7CistI2VuZGlmCisrI2VuZGlmIC8qIF9XSU4zMiB8IF9fQVBQTEVfXyovCisgfQorIAorIHZvaWQKK2RpZmYgLS1naXQgYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmggYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKK2luZGV4IDZiODUwM2EuLjgyNjgxZTQgMTAwNjQ0CistLS0gYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKKysrKyBiL3NyYy9kaXNwYXRjaF9jb21tb24uaAorQEAgLTIxLDEyICsyMSwxMyBAQAorICAqIElOIFRIRSBTT0ZUV0FSRS4KKyAgKi8KKyAKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAKKyAjaWZkZWYgX1dJTjMyCisgI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIDAKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggMAorLSNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAxCisrI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIEJVSUxEX1dHTAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorICNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAwCitAQCAtMzQsMTMgKzM1LDEzIEBACisgI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIDAKKyAjZGVmaW5lIEVQT1hZX0lNUE9SVEVYUE9SVAorICNlbGlmIGRlZmluZWQoQU5EUk9JRCkKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMQorKyNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCBCVUlMRF9FR0wKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggMAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZWxzZQorLSNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAxCistI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIDEKKysjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgQlVJTERfRUdMCisrI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIEJVSUxEX0dMWAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZW5kaWYKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjJkNjg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAyNDg2OGNiZmI5ZGRhNWY2OTI5ZGQyNzdjNDdkMzVkZjAxNmU4NzU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogV2VkLCA2IE1heSAyMDE1IDExOjA1OjQ4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBhZGQgYW4gb3B0aW9uIHRvIGRpc2FibGUgZ2x4IHN1cHBvcnQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwordGhpcyBvcHRpb24gd291bGQgaGVscCB1cyBpbiB5b2N0byB0byBnZXQgZGV0ZXJtaW5pc3RpYyBidWlsZCByZXN1bHRzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsxXQorCitbMV0gaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS9wdWxsLzUyCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZGQ3MGRhLi42YzcxNTNkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01OCw3ICs1OCwxNCBAQCBBQ19DSEVDS19IRUFERVIoW0tIUi9raHJwbGF0Zm9ybS5oXSwKKyAjIHVpbnRwdHJfdCB0byBhIHZvaWQgKiIpIGJ5IGRlZmF1bHQuICBLaWxsIHRoYXQuCisgWE9SR19URVNUU0VUX0NGTEFHKENXQVJORkxBR1MsIFstV25vLWludC1jb252ZXJzaW9uXSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPXllc10sIFt4MTE9bm9dKQorK0FDX0FSR19FTkFCTEUoW2dseF0sCisrICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWdseF0sCisrCQkJCVtkaXNhYmxlIGlmIHlvdSBkb24ndCB3YW50IHgxMS9nbHggc3VwcG9ydF0pXSwKKysgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgIFtlbmFibGVfZ2x4PXllc10KKysgICAgICAgICAgICAgKQorKworK1BLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9JGVuYWJsZV9nbHhdLCBbeDExPW5vXSkKKyAKKyBBTV9DT05ESVRJT05BTChIQVZFX1gxMSwgdGVzdCB4JHgxMSA9IHh5ZXMpCisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5L25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOGZlYTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1RoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIHB5dGhvbjMgYnkgdGhpcyBwYWNrYWdlICh0aGUgcHl0aG9uIHNjcmlwdHMKK3RoYXQgYXJlIHVzaW5nIGR1cmluZyBjb25maWd1cmF0aW9uIG9ubHkgbmVlZCBweXRob24yLjcrKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEdhcnkgVGhvbWFzIDxnYXJ5QG1sYmFzc29jLmNvbT4KKy0tCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC00MCw3ICs0MCw3IEBAIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjgpCisgWE9SR19ERUZBVUxUX09QVElPTlMKKyAKKy1BQ19DSEVDS19QUk9HUyhbUFlUSE9OXSwgW3B5dGhvbjMgcHl0aG9uMiBweXRob25dKQorK0FDX0NIRUNLX1BST0dTKFtQWVRIT05dLCBbcHl0aG9uMiBweXRob25dKQorIAorICMgSW5pdGlhbGl6ZSBsaWJ0b29sCisgQUNfRElTQUJMRV9TVEFUSUMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDE3MjkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHlfZ2l0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGZ1bmN0aW9uIHBvaW50ZXIgbWFuYWdlbWVudCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NThlZjRjODBkNDAxZTA3YmQ5ZWU4YjZiNThjZjQ2NGIiCisKKworU1JDX1VSSSA9ICIgXAorICAgIGdpdDovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5LmdpdCBcCisgICAgZmlsZTovLzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovL25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2ggXAorIgorU1JDUkVWPSJlMmMzM2FmNWJmY2ZjOWQxNjhmOWU3NzYxNTZkZDQ3YzMzZjQyOGIzIgorUFYgPSAiMS4zLjEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitERVBFTkRTID0gInV0aWwtbWFjcm9zIHZpcnR1YWwvZWdsIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUtZ2x4LCAtLWRpc2FibGUtZ2x4LCB2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZmFrZWtleS9saWJmYWtla2V5X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZGRlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBjb252ZXJ0aW5nIGNoYXJhY3RlcnMgdG8gWCBrZXktcHJlc3NlcyIKK0RFU0NSSVBUSU9OID0gImxpYmZha2VrZXkgaXMgYSBzaW1wbGUgbGlicmFyeSBmb3IgY29udmVydGluZyBVVEYtOCBjaGFyYWN0ZXJzIGludG8gJ2Zha2UnIFggXAora2V5LXByZXNzZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvbGliZmFrZWtleS5jO2VuZGxpbmU9MzA7bWQ1PTYwMmI1Y2NkNDhmNjQ0MDc1MTA4NjdmMzM3M2I0NDhjIgorCitERVBFTkRTID0gImxpYnh0c3QiCitTRUNUSU9OID0gIngxMS93bSIKKworU1JDUkVWID0gImUzMjdmZjA0OWI4NTAzYWYyZGFkZmZhODQzNzBhMDg2MGI5ZmI2ODIiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieHRzdCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZDUwN2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveC9saWJwbmcucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSAxOWMzZDI0MjAzNDc0OGIzYzYwNzY1NjgzZTFmZjRlMmRmOTcwMjA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTAgRGVjIDIwMTMgMTE6Mzc6MzIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBpbXByb3ZlIGxpYnBuZyBkZXRlY3Rpb24KKworSW5zdGVhZCBvZiBsb29raW5nIGZvciAibGlicG5nMTIiIGV4cGxpY2l0bHkgdGhvdWdoIHBrZy1jb25maWcgYW5kIHRoZW4gZmFsbGluZworYmFjayB0byBsaWJyYXJ5IGh1bnRpbmcsIGp1c3QgdXNlIHBrZy1jb25maWcgdG8gZmluZCAibGlicG5nIiB3aGljaCBpcyBwcm92aWRlZAorYnkgYm90aCBsaWJwbmcxMiBhbmQgbGlicG5nMTYuCisKK1RoaXMgYWxzbyBtYWtlcyB0aGUgbGlicG5nIGRldGVjdGlvbiBkZXRlcm1pbmlzdGljLgorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjkgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGEyODA3Ni4uNjVkN2M3OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzQsNyArMzQsNyBAQCBBQ19BUkdfRU5BQkxFKGpwZWcsCisgICBlbmFibGVfanBlZz0kZW5hYmxldmFsLCBlbmFibGVfanBlZz1ubykKKyAKKyBBQ19BUkdfRU5BQkxFKHBuZywKKy0gIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgcG5nIHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwKKysgIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgUE5HIHN1cHBvcnQgW2RlZmF1bHQ9ZW5hYmxlZF1dLAorICAgICAgZW5hYmxlX3BuZz0kZW5hYmxldmFsLCBlbmFibGVfcG5nPXllcyApCisgCisgQUNfQVJHX0VOQUJMRShkb3h5Z2VuLWRvY3MsICAgICAKK0BAIC0xNTYsMjkgKzE1NiwxMCBAQCBmaQorIGRubCAtLS0tLS0gQ2hlY2sgZm9yIFBORyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyBpZiB0ZXN0IHgkZW5hYmxlX3BuZyAhPSB4bm87IHRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhmb3IgbGlicG5nMTIpCistICBpZiB0ZXN0IHgkUEtHX0NPTkZJRyAhPSB4bm8gJiYgJFBLR19DT05GSUcgLS1leGlzdHMgbGlicG5nMTI7IHRoZW4gCistICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKy0gICAgICAgIFBOR19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgbGlicG5nMTJgCistCVBOR19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGxpYnBuZzEyYAorLSAgICAgICAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQbmddKQorLQlTVVBQT1JUU19QTkc9MQorLQlQTkdfUkVRVUlSRUQ9ImxpYnBuZzEyIgorLSAgZWxzZQorLQlBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgICAgIyBBQ19DSEVDS19IRUFERVJTKHBuZy5oLCBbIGhhdmVfcG5nX2g9InllcyIgXSwgWyBoYXZlX3BuZ19oPSJubyIgXSApCistICAgICAgICBBQ19DSEVDS19MSUIoW3BuZ10sIFtwbmdfY3JlYXRlX3JlYWRfc3RydWN0XSwgW2hhdmVfcG5nPSJ5ZXMiXSwgW2hhdmVfcG5nPSJubyJdKQorLQorLSAgICAgICAgaWYgdGVzdCB4JGhhdmVfcG5nPXh5ZXMgJiYgdGVzdCB4JGhhdmVfcG5nX2g9eHllczsgdGhlbiAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBuZ10pCistCSAgICBTVVBQT1JUU19QTkc9MQorLSAgICAgICAgICAgIFBOR19MSUJTPSItbHBuZyAtbHoiCistICAgICAgICAgICAgTUJfRVhUUkFfTElCUz0iJE1CX0VYVFJBX0xJQlMgJFBOR19MSUJTIgorLSAgICAgICAgZWxzZQorLQkgICAgQUNfTVNHX1dBUk4oWyoqKiBDYW5ub3QgZmluZCBQTkcsIGRpc2FibGluZyBzdXBwb3J0XSkKKy0gICAgICAgICAgICBlbmFibGVfcG5nPW5vCistCWZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoUE5HLCBsaWJwbmcpCisrICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBOR10pCisrICBTVVBQT1JUU19QTkc9MQorKyAgUE5HX1JFUVVJUkVEPSJsaWJwbmciCisgZmkKKyAKKyAKKy0tIAorMS44LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlYjY3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCB3aW5kb3cgbWFuYWdlciBjb3JlIGxpYnJhcnkiCitTRUNUSU9OID0gIngxMS9saWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5jb20vIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi9tYmV4cC5jO2VuZGxpbmU9MjA7bWQ1PTI4YzBhZWYzYjIzZTMwODQ2NGY1ZGFlNmExMWIwZDJmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1iL21iZG90ZGVza3RvcC5jO2VuZGxpbmU9MjE7bWQ1PTVhMjg3MTU2YjMyMDdlODUxYzFkNjhkMDljNDM5YjUxIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhleHQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94LyR7QlBOfS8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJwbmcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzZjYzgwN2Y1NWEzZTdjNzUyZDgwMTMxNzY4NzVkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTRjYWI1MmUzMDRhMzUxMmM4ZGY0YmU1OWQ2OTBjZjM5MjFiYmI2OGEyOGVkZTdmZTI2YjkzNTM0MjE3YjUzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJqcGVnIHBuZyB4ZnQgeHNldHRpbmdzIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3BhbmdvXSA9ICItLWVuYWJsZS1wYW5nbywtLWRpc2FibGUtcGFuZ28scGFuZ28iCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS1lbmFibGUtcG5nLC0tZGlzYWJsZS1wbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t4ZnRdID0gIi0tZW5hYmxlLXhmdCwtLWRpc2FibGUteGZ0LGxpYnhmdCIKK1BBQ0tBR0VDT05GSUdbeHNldHRpbmdzXSA9ICItLWVuYWJsZS14c2V0dGluZ3MsLS1kaXNhYmxlLXhzZXR0aW5ncyxsaWJ4c2V0dGluZ3MtY2xpZW50IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTc2MzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9jb25maWd1cmVfdHdlYWsucGF0Y2gKQEAgLTAsMCArMSwxMTExIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBTREwtMS4yLjE1L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFNETC0xLjIuMTUub3JpZy9jb25maWd1cmUuaW4KKysrKyBTREwtMS4yLjE1L2NvbmZpZ3VyZS5pbgorQEAgLTQ4LDkgKzQ4LDkgQEAgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLXNjcmlwdHNdKQorIGRubCBBQ19DQU5PTklDQUxfSE9TVAorIEFDX0NfQklHRU5ESUFOCisgaWYgdGVzdCB4JGFjX2N2X2NfYmlnZW5kaWFuID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgNDMyMSkKKysgICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDQzMjEsICJCeXRlIE9yZGVyIikKKyBlbHNlCistICAgIEFDX0RFRklORShTRExfQllURU9SREVSLCAxMjM0KQorKyAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgMTIzNCwgIkJ5dGUgT3JkZXIiKQorIGZpCisgCisgZG5sIENoZWNrIGZvciB0b29scworQEAgLTEzNCw3ICsxMzQsNyBAQCBBQ19BUkdfRU5BQkxFKGxpYmMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmNdLCBbVXNlIHRoZSBzeXN0ZW0gQyBsaWJyYXJ5IFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfbGliYz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9saWJjID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9MSUJDKQorKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJDLDEsIiIpCisgCisgICAgIGRubCBDaGVjayBmb3IgQyBsaWJyYXJ5IGhlYWRlcnMKKyAgICAgQUNfSEVBREVSX1NUREMKK0BAIC0xNDUsNyArMTQ1LDcgQEAgaWYgdGVzdCB4JGVuYWJsZV9saWJjID0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB4eWVzIC1vIHgkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geHllczsgdGhlbgorICAgICAgICAgQUNfQ0hFQ0tfVFlQRShpbnQ2NF90KQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3R5cGVfaW50NjRfdCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUsMSwiIikKKyAgICAgICAgIGZpCisgICAgICAgICBoYXZlX2ludHR5cGVzPXllcworICAgICBmaQorQEAgLTE2MSwxMSArMTYxLDExIEBAIGlmIHRlc3QgeCRlbmFibGVfbGliYyA9IHh5ZXM7IHRoZW4KKyAKKyAgICAgQUNfRlVOQ19NRU1DTVAKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoSEFWRV9NRU1DTVApCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9NRU1DTVAsMSwiIikKKyAgICAgZmkKKyAgICAgQUNfRlVOQ19TVFJUT0QKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfc3RydG9kID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKEhBVkVfU1RSVE9EKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfU1RSVE9ELDEsIiIpCisgICAgIGZpCisgICAgIEFDX0NIRUNLX0ZVTkMobXByb3RlY3QsCisgICAgICAgICBBQ19UUllfQ09NUElMRShbCitAQCAtMTkxLDQwICsxOTEsNDAgQEAgaWYgdGVzdCB4JGhhdmVfaW50dHlwZXMgIT0geHllczsgdGhlbgorICAgICBBQ19DSEVDS19TSVpFT0YobG9uZywgNCkKKyAgICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZywgOCkKKyAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9jaGFyID0geDE7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQ4X3QsIHNpZ25lZCBjaGFyKQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQ4X3QsIHVuc2lnbmVkIGNoYXIpCisrICAgICAgICBBQ19ERUZJTkUoaW50OF90LCBzaWduZWQgY2hhciwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50OF90LCB1bnNpZ25lZCBjaGFyLCIiKQorICAgICBmaQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX3Nob3J0ID0geDI7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQxNl90LCBzaWduZWQgc2hvcnQpCistICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIHNob3J0KQorKyAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBzaG9ydCwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50MTZfdCwgdW5zaWduZWQgc2hvcnQsIiIpCisgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfaW50ID0geDI7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIGludCkKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIGludCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIGludCwiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIGludCwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfaW50ID0geDQ7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgaW50KQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQzMl90LCB1bnNpZ25lZCBpbnQpCisrICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGludCwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgaW50LCIiKQorICAgICBlbHNlCisgICAgICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2xvbmcgPSB4NDsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgbG9uZykKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGxvbmcpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDMyX3QsIHNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgbG9uZywiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfbG9uZyA9IHg4OyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50NjRfdCwgc2lnbmVkIGxvbmcpCistICAgICAgICBBQ19ERUZJTkUodWludDY0X3QsIHVuc2lnbmVkIGxvbmcpCistICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSwiIikKKyAgICAgZWxzZQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9sb25nX2xvbmcgPSB4ODsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZyBsb25nKQorLSAgICAgICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZyBsb25nKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nIGxvbmcsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nIGxvbmcsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCistICAgIEFDX0RFRklORShzaXplX3QsIHVuc2lnbmVkIGludCkKKy0gICAgQUNfREVGSU5FKHVpbnRwdHJfdCwgdW5zaWduZWQgbG9uZykKKysgICAgQUNfREVGSU5FKHNpemVfdCwgdW5zaWduZWQgaW50LCIiKQorKyAgICBBQ19ERUZJTkUodWludHB0cl90LCB1bnNpZ25lZCBsb25nLCIiKQorIGZpCisgCisgIyBTdGFuZGFyZCBDIHNvdXJjZXMKK0BAIC0yNDUsMjUgKzI0NSwyNSBAQCBBQ19BUkdfRU5BQkxFKGF1ZGlvLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hdWRpb10sIFtFbmFibGUgdGhlIGF1ZGlvIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2F1ZGlvPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9BVURJT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9BVURJT19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRSh2aWRlbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW9dLCBbRW5hYmxlIHRoZSB2aWRlbyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfVklERU9fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfVklERU9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoZXZlbnRzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ldmVudHNdLCBbRW5hYmxlIHRoZSBldmVudHMgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfZXZlbnRzPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2V2ZW50cyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfRVZFTlRTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0VWRU5UU19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShqb3lzdGljaywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtam95c3RpY2tdLCBbRW5hYmxlIHRoZSBqb3lzdGljayBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9qb3lzdGljaz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRElTQUJMRUQsMSwiIikKKyBlbHNlCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrLyouYyIKKyBmaQorQEAgLTI3MSw0MyArMjcxLDQzIEBAIEFDX0FSR19FTkFCTEUoY2Ryb20sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNkcm9tXSwgW0VuYWJsZSB0aGUgY2Ryb20gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfY2Ryb209eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKHRocmVhZHMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRocmVhZHNdLCBbRW5hYmxlIHRoZSB0aHJlYWRpbmcgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfdGhyZWFkcz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUodGltZXJzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10aW1lcnNdLCBbRW5hYmxlIHRoZSB0aW1lciBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV90aW1lcnM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9USU1FUlNfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGZpbGUsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZpbGVdLCBbRW5hYmxlIHRoZSBmaWxlIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2ZpbGU9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfZmlsZSAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfRklMRV9ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9GSUxFX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGxvYWRzbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbG9hZHNvXSwgW0VuYWJsZSB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2xvYWRzbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoY3B1aW5mbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY3B1aW5mb10sIFtFbmFibGUgdGhlIGNwdWluZm8gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfY3B1aW5mbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9jcHVpbmZvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9DUFVJTkZPX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0NQVUlORk9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoYXNzZW1ibHksCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFzc2VtYmx5XSwgW0VuYWJsZSBhc3NlbWJseSByb3V0aW5lcyBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2Fzc2VtYmx5PXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2Fzc2VtYmx5ID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0FTU0VNQkxZX1JPVVRJTkVTKQorKyAgICBBQ19ERUZJTkUoU0RMX0FTU0VNQkxZX1JPVVRJTkVTLDEsIiIpCisgZmkKKyAKKyBkbmwgU2VlIGlmIHRoZSBPU1MgYXVkaW8gaW50ZXJmYWNlIGlzIHN1cHBvcnRlZAorQEAgLTMzNSwxMiArMzM1LDEyIEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vc3NdLCBbc3VwcG9ydAorICAgICAgICAgICAgICAgaW50IGFyZyA9IFNORENUTF9EU1BfU0VURlJBR01FTlQ7CisgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgaGF2ZV9vc3M9eWVzCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTX1NPVU5EQ0FSRF9IKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TU19TT1VORENBUkRfSCwxLCIiKQorICAgICAgICAgICAgIF0pCisgICAgICAgICBmaQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9vc3MpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9vc3MgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2RzcC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZG1hLyouYyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTQwNyw3ICs0MDcsNyBAQCBDaGVja0RNRURJQSgpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2RtZWRpYSkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZG1lZGlhID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RNRURJQSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ETUVESUEsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kbWVkaWEvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sYXVkaW8iCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKK0BAIC00NDQsNyArNDQ0LDcgQEAgQ2hlY2tNTUUoKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9tbWUpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX21tZSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NTUVBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NTUVBVURJTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21tZS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRNTUVfQ0ZMQUdTIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRNTUVfTElCUyIKK0BAIC00NjcsNyArNDY3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVzZC1zaGFyZWRdLCBbZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfZXNkX3NoYXJlZD15ZXMpCisgICAgICAgICAgICAgZXNkX2xpYj1bYGZpbmRfbGliICJsaWJlc2Quc28uKiIgIiRFU0RfTElCUyIgfCBzZWQgJ3MvLipcL1woLipcKS9cMS87IHEnYF0KKyAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9FU0QpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRVNELDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZXNkLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJEVTRF9DRkxBR1MiCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvICE9IHh5ZXMgJiYgXAorQEAgLTQ3Nyw3ICs0NzcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXNkLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvID0geHllcyAmJiBcCisgICAgICAgICAgICAgICAgdGVzdCB4JGVuYWJsZV9lc2Rfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkZXNkX2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliZXNkIC0+ICRlc2RfbGliIgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9FU0RfRFlOQU1JQywgIiRlc2RfbGliIikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfRVNEX0RZTkFNSUMsICIkZXNkX2xpYiIsICIiKQorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJEVTRF9MSUJTIgorICAgICAgICAgICAgIGZpCitAQCAtNTY0LDcgKzU2NCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcnRzLXNoYXJlZF0sIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9hcnRzX3NoYXJlZD15ZXMpCisgICAgICAgICAgICAgICAgIGFydHNfbGliPVtgZmluZF9saWIgImxpYmFydHNjLnNvLioiICIkQVJUU19MSUJTIiB8IHNlZCAncy8uKlwvXCguKlwpL1wxLzsgcSdgXQorIAorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9BUlRTKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9BUlRTLCwgIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2FydHMvKi5jIgorICAgICAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJEFSVFNfQ0ZMQUdTIgorICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gIT0geHllcyAmJiBcCitAQCAtNTc0LDcgKzU3NCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcnRzLXNoYXJlZF0sIFsKKyAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvID0geHllcyAmJiBcCisgICAgICAgICAgICAgICAgICAgIHRlc3QgeCRlbmFibGVfYXJ0c19zaGFyZWQgPSB4eWVzICYmIHRlc3QgeCRhcnRzX2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYmFydHNjIC0+ICRhcnRzX2xpYiIKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfQVVESU9fRFJJVkVSX0FSVFNfRFlOQU1JQywgIiRhcnRzX2xpYiIpCisrICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9BUlRTX0RZTkFNSUMsICIkYXJ0c19saWIiLDEsIiIpCisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRBUlRTX0xJQlMiCisgICAgICAgICAgICAgICAgIGZpCitAQCAtNjM0LDcgKzYzNCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uYXMtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJE5BU19MSUJTIgorICAgICAgICAgICAgIGZpCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTkFTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX05BUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL25hcy8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICROQVNfQ0ZMQUdTIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNjQ5LDcgKzY0OSw3IEBAIENoZWNrRGlza0F1ZGlvKCkKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGlza2F1ZGlvXSwgW3N1cHBvcnQgdGhlIGRpc2sgd3JpdGVyIGF1ZGlvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9kaXNrYXVkaW89eWVzKQorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllcyAtYSB4JGVuYWJsZV9kaXNrYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ESVNLKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRElTSywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZGlzay8qLmMiCisgICAgIGZpCisgfQorQEAgLTY2MSw3ICs2NjEsNyBAQCBDaGVja0R1bW15QXVkaW8oKQorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kdW1teWF1ZGlvXSwgW3N1cHBvcnQgdGhlIGR1bW15IGF1ZGlvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9kdW1teWF1ZGlvPXllcykKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXMgLWEgeCRlbmFibGVfZHVtbXlhdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RVTU1ZKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFVNTVksMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2R1bW15LyouYyIKKyAgICAgZmkKKyB9CitAQCAtNjc3LDcgKzY3Nyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1taW50YXVkaW9dLCBbc3UKKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihtaW50L2ZhbGNvbi5oLCBoYXZlX21pbnRfZmFsY29uX2hkcj15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9taW50X2ZhbGNvbl9oZHIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgbWludGF1ZGlvPXllcworLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX01JTlQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTUlOVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21pbnQvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21pbnQvKi5TIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNzQ2LDcgKzc0Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uYXNtXSwgW3VzZSBuYXMKKyAgICAgICAgIENvbXBpbGVOQVNNIHVucXVvdGVkLXNlY3Rpb25zIHx8IE5BU009IiIKKyAKKyAgICAgICAgIGlmIHRlc3QgIngkTkFTTSIgIT0geCAtYSAieCROQVNNIiAhPSB4JyIkTkFTTSInOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IRVJNRVNfQkxJVFRFUlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IRVJNRVNfQkxJVFRFUlMsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9oZXJtZXMvKi5hc20iCisgICAgICAgICAgICAgTkFTTUZMQUdTPSIkTkFTTUZMQUdTIC1JICRzcmNkaXIvc3JjL2hlcm1lcy8iCisgCitAQCAtODQwLDkgKzg0MCw5IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hbHRpdmVjXSwgW3VzZQorICAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9nY2NfYWx0aXZlYyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FMVElWRUNfQkxJVFRFUlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BTFRJVkVDX0JMSVRURVJTLDEsIiIpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfYWx0aXZlY19oX2hkciA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FMVElWRUNfSCkKKysgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FMVElWRUNfSCwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRhbHRpdmVjX0NGTEFHUyIKKyAgICAgICAgIGZpCitAQCAtOTIwLDcgKzkyMCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pcG9kXSwgW2NvbmZpZ3UKKyAKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9pcG9kID0geHllczsgdGhlbgorICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC1ESVBPRCIKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0lQT0QpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9JUE9ELDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9pcG9kLyouYyIKKyAgICAgZmkKKyB9CitAQCAtOTU0LDcgKzk1NCw3IEBAIENoZWNrTkFOT1goKQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtREVOQUJMRV9OQU5PWF9ESVJFQ1RfRkIiCisgICAgICAgICBmaQorIAorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfTkFOT1gpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9OQU5PWCwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vbmFub3gvKi5jIgorICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxuYW5vLVgiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTEwMjAsNyArMTAyMCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS14MTEtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICAgICAgICAgICAgIExERkxBR1M9IiRMREZMQUdTICRYX0xJQlMiCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3gxMS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRYX0NGTEFHUyIKKyAKK0BAIC0xMDQyLDggKzEwNDIsOCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUteDExLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgICAgdGVzdCB4JGVuYWJsZV94MTFfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkeDExX2xpYiAhPSB4ICYmIHRlc3QgeCR4MTFleHRfbGliICE9IHg7IHRoZW4KKyAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJYMTEgLT4gJHgxMV9saWIiCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWDExZXh0IC0+ICR4MTFleHRfbGliIgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQywgIiR4MTFfbGliIikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWEVYVCwgIiR4MTFleHRfbGliIikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUMsICIkeDExX2xpYiIsIiIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hFWFQsICIkeDExZXh0X2xpYiIsIiIpCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBlbmFibGVfeDExX3NoYXJlZD1ubworICAgICAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkWF9MSUJTIC1sWDExIC1sWGV4dCIKK0BAIC0xMDYwLDIwICsxMDYwLDIwIEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kZ2FdLCBbYWxsb3cgdXMKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZGdhXSwgW3VzZSBER0EgMi4wIHZpZGVvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb19kZ2E9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfZGdhID0geHllcyAtYSB4JGVuYWJsZV92aWRlb19kZ2EgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RHQSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfREdBLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2RnYS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS1kZ2Ftb3VzZSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLWRnYW1vdXNlXSwgW3VzZSBYMTEgREdBIGZvciBtb3VzZSBldmVudHMgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfZGdhbW91c2U9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfZGdhID0geHllcyAtYSB4JGVuYWJsZV92aWRlb194MTFfZGdhbW91c2UgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9ER0FNT1VTRSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX0RHQU1PVVNFLDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS12bSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXZtXSwgW3VzZSBYMTEgVk0gZXh0ZW5zaW9uIGZvciBmdWxsc2NyZWVuIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX3ZtPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV92bSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1ZJRE1PREUpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9WSURNT0RFLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL1hleHQvWHhmODZ2bS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS14diwKK0BAIC0xMDg3LDE0ICsxMDg3LDE0IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteHZdLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteGluZXJhbWFdLCBbZW5hYmxlIFgxMSBYaW5lcmFtYSBzdXBwb3J0IFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfeGluZXJhbWE9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW9feDExX3hpbmVyYW1hID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWElORVJBTUEpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YSU5FUkFNQSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9YZXh0L1hpbmVyYW1hLyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLXhtZSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhtZV0sIFtlbmFibGUgWGkgR3JhcGhpY3MgWE1FIGZvciBmdWxsc2NyZWVuIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfeG1lPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV94bWUgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YTUUpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YTUUsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vWGV4dC9YTUUvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEteHJhbmRyLAorQEAgLTExMTEsOCArMTExMSw4IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteHJhbmQKKyAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfeDExX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JHhyYW5kcl9saWIgIT0geCA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlhyZW5kZXIgLT4gJHhyZW5kZXJfbGliIgorICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWHJhbmRyIC0+ICR4cmFuZHJfbGliIgorLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSRU5ERVIsICIkeHJlbmRlcl9saWIiKQorLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSQU5EUiwgIiR4cmFuZHJfbGliIikKKysgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkVOREVSLCAiJHhyZW5kZXJfbGliIiwiIikKKysgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkFORFIsICIkeHJhbmRyX2xpYiIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGVseV9lbmFibGVfdmlkZW9feDExX3hyYW5kcj15ZXMKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIoWHJlbmRlciwgWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uLCBoYXZlX3hyZW5kZXJfbGliPXllcykKK0BAIC0xMTI1LDcgKzExMjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhyYW5kCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZGVmaW5pdGVseV9lbmFibGVfdmlkZW9feDExX3hyYW5kciA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hSQU5EUikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hSQU5EUiwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTExNTIsNyArMTE1Miw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1waG90b25dLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3Bob3RvbikKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19waG90b24gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUEhPVE9OKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BIT1RPTiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3Bob3Rvbi8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxwaCIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTExNjYsNyArMTE2Niw3IEBAIGRubCBTZXQgdXAgdGhlIEJXaW5kb3cgdmlkZW8gZHJpdmVyIGlmIGUKKyBDaGVja0JXSU5ET1coKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0JXSU5ET1cpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9CV0lORE9XLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9id2luZG93LyouY2MiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICBmaQorQEAgLTExODksNyArMTE4OSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1jYXJib25dLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfY2FyYm9uKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfY2FyYm9uID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1RPT0xCT1gpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfVE9PTEJPWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL21hY2NvbW1vbi8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vbWFjcm9tLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTEyMTgsNyArMTIxOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1jb2NvYV0sIFsKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfY29jb2EpCisgICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2NvY29hID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1FVQVJUWikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVUFSVFosMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9xdWFydHovKi5tIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTEyNDUsNyArMTI0NSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1mYmNvbl0sIFsKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2ZiY29uKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2ZiY29uID0geHllczsgdGhlbgorICAgICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKGdldHBhZ2VzaXplKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0ZCQ09OKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0ZCQ09OLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZmJjb24vKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTEyOTYsNyArMTI5Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1kaXJlY3RmYl0KKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2RpcmVjdGZiKQorIAorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2RpcmVjdGZiID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RJUkVDVEZCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RJUkVDVEZCLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZGlyZWN0ZmIvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkRElSRUNURkJfQ0ZMQUdTIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRESVJFQ1RGQl9MSUJTIgorQEAgLTEzMjMsNyArMTMyMyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1wczJnc10sIFsKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19wczJncykKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19wczJncyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QUzJHUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QUzJHUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3BzMmdzLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xMzc2LDcgKzEzNzYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZ2dpXSwgW3VzCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fZ2dpKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2dnaSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9HR0kpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0dJLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZ2dpLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGdnaSAtbGdpaSAtbGdnIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTQwNiw3ICsxNDA2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXN2Z2FdLCBbdQorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3N2Z2EpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fc3ZnYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9TVkdBTElCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1NWR0FMSUIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9zdmdhLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHZnYSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE0MzgsNyArMTQzOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby12Z2xdLCBbdXMKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb192Z2wpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fdmdsID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1ZHTCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9WR0wsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby92Z2wvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sdmdsIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTQ2Niw3ICsxNDY2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXdzY29uc10sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fd3Njb25zKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3dzY29ucyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XU0NPTlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV1NDT05TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd3Njb25zLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xNDkxLDcgKzE0OTEsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tYWFsaWJdLCBbCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fYWFsaWIpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fYWFsaWIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQUFMSUIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQUFMSUIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9hYWxpYi8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxhYSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE1NTMsNyArMTU1Myw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1xdG9waWFdLAorICAgICAgICAgQ1hYRkxBR1M9IiRPTERfQ1hYIgorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcXRvcGlhKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3F0b3BpYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVE9QSUEpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVRPUElBLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcXRvcGlhLyouY2MiCisgICAgICAgICAgICAgU0RMTUFJTl9TT1VSQ0VTPSIkc3JjZGlyL3NyYy9tYWluL3F0b3BpYS8qLmNjIgorICAgICAgICAgICAgIFNETE1BSU5fTERGTEFHUz0iLXN0YXRpYyIKK0BAIC0xNTgzLDcgKzE1ODMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcGljb2d1aV0sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcGljb2d1aSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19waWNvZ3VpID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BJQ09HVUkpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUElDT0dVSSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3BpY29ndWkvKi5jIgorICAgICAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgLWxwZ3VpIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTYwNyw3ICsxNjA3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXhiaW9zXSwgWworICAgICB2aWRlb194Ymlvcz1ubworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGVuYWJsZV92aWRlb194YmlvcyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIHZpZGVvX3hiaW9zPXllcworLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWEJJT1MpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YQklPUywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8veGJpb3MvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xNjI1LDcgKzE2MjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZ2VtXSwgW3VzCisgICAgICAgICBBQ19DSEVDS19MSUIoZ2VtLCBhcHBsX2luaXQsIGhhdmVfZ2VtX2xpYj15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9nZW1faGRyID0geHllcyAtYSB4JGhhdmVfZ2VtX2xpYiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICB2aWRlb19nZW09eWVzCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0VNKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dFTSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2dlbS8qLmMiCisgICAgICAgICAgICAgU0RMX0xJQlM9IiRTRExfTElCUyAtbGdlbSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE2NDAsNyArMTY0MCw3IEBAIENoZWNrRHVtbXlWaWRlbygpCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWR1bW15XSwgW3VzZSBkdW1teSB2aWRlbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9fZHVtbXk9eWVzKQorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX2R1bW15ID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRFVNTVkpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9EVU1NWSwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZHVtbXkvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xNjY3LDggKzE2NjcsOCBAQCBDaGVja09wZW5HTFgxMSgpCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fb3BlbmdsKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9HTFgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9HTFgsMSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgfQorQEAgLTE2ODcsNyArMTY4Nyw3IEBAIENoZWNrT3BlbkdMUU5YKCkKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19vcGVuZ2wpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxHTCIKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTY5Nyw4ICsxNjk3LDggQEAgZG5sIENoZWNrIGZvciBXaW4zMiBPcGVuR0wKKyBDaGVja1dJTjMyR0woKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9XR0wpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfV0dMLDEsIiIpCisgICAgIGZpCisgfQorIAorQEAgLTE3MDYsNyArMTcwNiw3IEBAIGRubCBDaGVjayBmb3IgQmVPUyBPcGVuR0wKKyBDaGVja0JlR0woKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxHTCIKKyAgICAgZmkKKyB9CitAQCAtMTcxNSw3ICsxNzE1LDcgQEAgZG5sIENoZWNrIGZvciBNYWNPUyBPcGVuR0wKKyBDaGVja01hY0dMKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKyAgICAgICAgIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgICAgICotKi1kYXJ3aW4qKQorICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX2NvY29hID0geHllczsgdGhlbgorQEAgLTE3NDcsOCArMTc0Nyw4IEBAIENoZWNrQXRhcmlPU01lc2EoKQorICAgICAgICAgICAgIE9TTUVTQV9DRkxBR1M9YCRPU01FU0FfQ09ORklHIC0tY2ZsYWdzYAorICAgICAgICAgICAgIE9TTUVTQV9MSUJTPWAkT1NNRVNBX0NPTkZJRyAtLWxpYnNgCisgICAgICAgICBmaQorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9PU01FU0EpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBLDEsIiIpCisgICAgICAgICBTRExfQ0ZMQUdTPSIkU0RMX0NGTEFHUyAkT1NNRVNBX0NGTEFHUyIKKyAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgJE9TTUVTQV9MSUJTIgorIAorQEAgLTE3NTgsNyArMTc1OCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vc21lc2Etc2hhcmVkXSwKKyAgICAgICAgIGlmIHRlc3QgIngkZW5hYmxlX29zbWVzYV9zaGFyZWQiID0gInh5ZXMiIC1hICJ4JGVuYWJsZV9hdGFyaV9sZGciID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICAgIyBEeW5hbWljIGxpbmtpbmcKKyAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGhhdmVfb3NtZXNhX2hkciIgPSAieHllcyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBX0RZTkFNSUMpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQV9EWU5BTUlDLDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTc5Miw3ICsxNzkyLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWlucHV0LWV2ZW50c10sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdXNlX2lucHV0X2V2ZW50cykKKyAgICAgICAgIGlmIHRlc3QgeCR1c2VfaW5wdXRfZXZlbnRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfTElOVVhFVikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX0xJTlVYRVYsMSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgfQorQEAgLTE4MTQsNyArMTgxNCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnB1dC10c2xpYl0sIFsKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRlbmFibGVfaW5wdXRfdHNsaWIpCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2lucHV0X3RzbGliID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfVFNMSUIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9JTlBVVF9UU0xJQiwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sdHMiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTE4MzcsNyArMTgzNyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wdGhdLCBbdXNlIEdOVQorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKHB0aCkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHVzZV9wdGgpCisgICAgICAgICBpZiB0ZXN0ICJ4JHVzZV9wdGgiID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvcHRoLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzc2VtLmMiCisgICAgICAgICAgICAgU0RMX0NGTEFHUz0iJFNETF9DRkxBR1MgYCRQVEhfQ09ORklHIC0tY2ZsYWdzYCIKK0BAIC0xOTQzLDcgKzE5NDMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgCisgICAgICAgICAjIERvIGZ1dGhlciB0ZXN0aW5nIGlmIHdlIGhhdmUgcHRocmVhZCBzdXBwb3J0Li4uCisgICAgICAgICBpZiB0ZXN0IHgkdXNlX3B0aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQUQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRCwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkcHRocmVhZF9jZmxhZ3MiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJHB0aHJlYWRfbGliIgorICAgICAgICAgICAgIFNETF9DRkxBR1M9IiRTRExfQ0ZMQUdTICRwdGhyZWFkX2NmbGFncyIKK0BAIC0xOTY1LDcgKzE5NjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgaGFzX3JlY3Vyc2l2ZV9tdXRleGVzPXllcworLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVgsMSwiIikKKyAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXNfcmVjdXJzaXZlX211dGV4ZXMgPSB4bm87IHRoZW4KK0BAIC0xOTc2LDcgKzE5NzYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlApOworICAgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgaGFzX3JlY3Vyc2l2ZV9tdXRleGVzPXllcworLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9OUCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfTlAsMSwiIikKKyAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhc19yZWN1cnNpdmVfbXV0ZXhlcykKK0BAIC0yMDY1LDcgKzIwNjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RkaW8tcmVkaXJlY3RdCisgICAgIGZpCisgCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XSU5ESUIpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XSU5ESUIsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3dpbmNvbW1vbi8qLmMiCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5kaWIvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0yMDg3LDcgKzIwODcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGlyZWN0eF0sIFt1c2UKKyAgICAgICAgICAgICBoYXZlX2RpcmVjdHg9eWVzCisgICAgICAgICBmaQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRoYXZlX2RpcmVjdHggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRERSQVcpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRERSQVcsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5keDUvKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTIxMTgsNyArMjExOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zZGwtZGxvcGVuXSwgW3UKKyAgICAgICAgICAgICBBQ19DSEVDS19MSUIoYywgZGxvcGVuLCBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyIsCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKGRsLCBkbG9wZW4sIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sZGwiLAorICAgICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihsdGRsLCBkbG9wZW4sIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sbHRkbCIpKSkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExPUEVOLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2Rsb3Blbi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTIxMzUsNyArMjEzNSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hdGFyaS1sZGddLCBbdXMKKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihsZGcuaCwgaGF2ZV9sZGdfaGRyPXllcykKKyAgICAgICAgIEFDX0NIRUNLX0xJQihsZGcsIGxkZ19vcGVuLCBoYXZlX2xkZ19saWI9eWVzLCBoYXZlX2xkZ19saWI9bm8sIC1sZ2VtKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbGRnX2hkciA9IHh5ZXMgLWEgeCRoYXZlX2xkZ19saWIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fTERHKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0xERywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9taW50LyouYyIKKyAgICAgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTIC1sbGRnIC1sZ2VtIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworQEAgLTIyNjYsMTEgKzIyNjYsMTEgQEAgQ2hlY2tVU0JISUQoKQorICAgICAgICAgICAgIGhhdmVfbWFjaGluZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICBdKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX21hY2hpbmVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElEX01BQ0hJTkVfSk9ZU1RJQ0tfSCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISURfTUFDSElORV9KT1lTVElDS19ILDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX21hY2hpbmVfam95c3RpY2spCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISUQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISUQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9ic2QvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkVVNCX0NGTEFHUyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkVVNCX0xJQlMiCitAQCAtMjI4OSw3ICsyMjg5LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNsb2NrX2dldHRpbWVdLAorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nsb2NrX2dldHRpbWUgPSB4eWVzOyB0aGVuCisgICAgICAgICBBQ19DSEVDS19MSUIocnQsIGNsb2NrX2dldHRpbWUsIGhhdmVfY2xvY2tfZ2V0dGltZT15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9jbG9ja19nZXR0aW1lID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUpCisrICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ0xPQ0tfR0VUVElNRSwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1scnQiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTIzMjAsNyArMjMyMCw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tJUG9kCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjM4NiwxNyArMjM4NiwxNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCisgICAgICAgICAgIGNhc2UgJEFSQ0ggaW4KKyAgICAgICAgICAgICBzeXN2NXxzb2xhcmlzfGhwdXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTywxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9zdW4vKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgbmV0YnNkfG9wZW5ic2QpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JTRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQlNELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2JzZC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBhaXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1BBVUQpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1BBVUQsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vcGF1ZGlvLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgICAgICA7OworQEAgLTI0MDYsNyArMjQwNiw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgY2FzZSAkQVJDSCBpbgorICAgICAgICAgICAgIGxpbnV4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0xJTlVYKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0xJTlVYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2xpbnV4LyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICA7OworQEAgLTI0MTYsMzIgKzI0MTYsMzIgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorICAgICAgICAgICBjYXNlICRBUkNIIGluCisgICAgICAgICAgICAgbGludXh8c29sYXJpcykKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9MSU5VWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9MSU5VWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9saW51eC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAqZnJlZWJzZCopCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRlJFRUJTRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9GUkVFQlNELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2ZyZWVic2QvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKm9wZW5ic2QqfCpuZXRic2QqKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09QRU5CU0QpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1BFTkJTRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9vcGVuYnNkLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGJzZGkpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQlNESSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9CU0RJLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2JzZGkvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgYWl4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0FJWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9BSVgsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vYWl4LyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIG9zZikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9PU0YpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1NGLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL29zZi8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKK0BAIC0yNDQ5LDcgKzI0NDksNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIC1hIHgkdXNlX3B0aHJlYWRzICE9IHh5ZXMgLWEgeCR1c2VfcHRoICE9IHh5ZXMgLWEgeCRBUkNIID0geGlyaXg7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9TUFJPQykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9TUFJPQywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9pcml4LyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzbXV0ZXguYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzY29uZC5jIgorQEAgLTI0NTcsNyArMjQ1Nyw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNDc2LDIwICsyNDc2LDIwIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tQVEhSRUFECisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfUU5YTlRPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1FOWE5UTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL250by8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxhc291bmQiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9RTlgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9RTlgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9xbngvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI1MTQsMjkgKzI1MTQsMjkgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja05BU00KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9XQVZFT1VUKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1dBVkVPVVQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby93aW5kaWIvKi5jIgorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2RpcmVjdHggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RTT1VORCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFNPVU5ELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3dpbmR4NS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1dJTk1NKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfV0lOTU0sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay93aW4zMi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aHJlYWQgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3dpbjMyL1NETF9zeXNtdXRleC5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC93aW4zMi9TRExfc3lzc2VtLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3dpbjMyL1NETF9zeXN0aHJlYWQuYyIKK0BAIC0yNTQ1LDEzICsyNTQ1LDEzIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX2xvYWRzbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjYyMiwyNSArMjYyMiwyNSBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrQmVHTAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CQVVESU8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9iYXVkaW8vKi5jYyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svYmVvcy8qLmNjIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JFT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9iZW9zLyouY2MiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2Jlb3MvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNtdXRleC5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNjb25kLmMiCitAQCAtMjY0OCw3ICsyNjQ4LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvYmVvcy8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI2NTYsMTEgKzI2NTYsMTEgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICAgICAgICAgKi0qLWJlb3MqKQorLSAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fQkVPUykKKysgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0JFT1MsMSwiIikKKyAgICAgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9iZW9zLyouYyIKKyAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKi0qLWhhaWt1KikKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTikKKysgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTiwxLCIiKQorICAgICAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2Rsb3Blbi8qLmMiCisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYyAgICAKK0BAIC0yNjk2LDcgKzI2OTYsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIGxpYnJhcnkKKyAgICAgICAgICMgKHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlIGR5bmFtaWMgWDExIGNoZWNrKQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gPSB4eWVzIC1hIHgkaGF2ZV9kbG9wZW4gIT0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMQ09NUEFUKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMQ09NUEFULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTI3MTQsMjYgKzI3MTQsMjYgQEAgY2FzZSAiJGhvc3QiIGluCisgCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQ09SRUFVRElPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0NPUkVBVURJTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19JT0tJVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0lPS0lULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svZGFyd2luLyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgICAgIG5lZWRfaW9raXRfZnJhbWV3b3JrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01BQ09TWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01BQ09TWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjc3NSwzMCArMjc3NSwzMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JGVuYWJsZV9wdGggPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfU1VOQVVESU8pCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3N1bi8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19NSU5UKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfTUlOVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL21pbnQvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTUlOVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01JTlQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9taW50LyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JGVuYWJsZV9wdGggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9NSU5UKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX01JTiwxLCIiVCkKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvbWludC8qLmMiCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL21pbnQvKi5TIgorICAgICAgICAgICAgIGZpCitAQCAtMjgxMSwyMCArMjgxMSwyMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrUFRIUkVBRAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB2aWRlbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1JJU0NPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3Jpc2Nvcy8qLlMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19SSVNDT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1JJU0NPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1JJU0NPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3Jpc2Nvcy8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI4NDYsMzEgKzI4NDYsMzEgQEAgQ2hlY2tXYXJuQWxsCisgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgeCRoYXZlX2pveXN0aWNrICE9IHh5ZXM7IHRoZW4KKyAgICAgIyBXYW50cyBqb3lzdGljayBzdWJzeXN0ZW0sIGJ1dCBkb2Vzbid0IGhhdmUgYSBwbGF0Zm9ybS1zcGVjaWZpYyBiYWNrZW5kLi4uCistICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRFVNTVkpCisrICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRFVNTVksMSwiIikKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svZHVtbXkvKi5jIgorICAgZmkKKyBmaQorIGlmIHRlc3QgeCRoYXZlX2Nkcm9tICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2R1bW15LyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX3RocmVhZHMgIT0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQsMSwiIikKKyAgICAgZmkKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvKi5jIgorIGZpCisgaWYgdGVzdCB4JGhhdmVfdGltZXJzICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCkKKysgICAgICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL2R1bW15LyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vZHVtbXkvKi5jIgorIGZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4YjkyNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWJYMTEtMS41Ljk5LjkwMSBoYXMgY2hhbmdlZCBwcm90b3R5cGUgb2YgX1hEYXRhMzIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorPGh0dHA6Ly9idWd6aWxsYS5saWJzZGwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5PgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLXIgYjZiMjgyOWNkN2VmIHNyYy92aWRlby94MTEvU0RMX3gxMXN5bS5oCistLS0gYS9zcmMvdmlkZW8veDExL1NETF94MTFzeW0uaAlXZWQgRmViIDI3IDE1OjIwOjMxIDIwMTMgLTA4MDAKKysrKyBiL3NyYy92aWRlby94MTEvU0RMX3gxMXN5bS5oCVdlZCBNYXIgMjcgMTY6MDc6MjMgMjAxMyArMDEwMAorQEAgLTE2NSw3ICsxNjUsNyBAQAorICAqLworICNpZmRlZiBMT05HNjQKKyBTRExfWDExX01PRFVMRShJT18zMkJJVCkKKy1TRExfWDExX1NZTShpbnQsX1hEYXRhMzIsKERpc3BsYXkgKmRweSxyZWdpc3RlciBsb25nICpkYXRhLHVuc2lnbmVkIGxlbiksKGRweSxkYXRhLGxlbikscmV0dXJuKQorK1NETF9YMTFfU1lNKGludCxfWERhdGEzMiwoRGlzcGxheSAqZHB5LHJlZ2lzdGVyIF9YY29uc3QgbG9uZyAqZGF0YSx1bnNpZ25lZCBsZW4pLChkcHksZGF0YSxsZW4pLHJldHVybikKKyBTRExfWDExX1NZTSh2b2lkLF9YUmVhZDMyLChEaXNwbGF5ICpkcHkscmVnaXN0ZXIgbG9uZyAqZGF0YSxsb25nIGxlbiksKGRweSxkYXRhLGxlbiksKQorICNlbmRpZgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzYmFhOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE4NyBAQAorUmF0aGVyIHRoYW4gY29kZSB3aGljaCBkb2Vzbid0IGV2ZW4gd29yayBwcm9wZXJseSB3aGVuIGNyb3NzIGNvbXBpbGluZywKK2xldHMganVzdCB1c2UgcGtnLWNvbmZpZyBpbnN0ZWFkLiBJdHMgYSBsaXR0bGUgc2ltcGxlci4KKworUlAgMjAxNC82LzIwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogU0RMLTEuMi4xNS9zZGwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBTREwtMS4yLjE1Lm9yaWcvc2RsLm00CisrKysgU0RMLTEuMi4xNS9zZGwubTQKK0BAIC0xMiwxNzQgKzEyLDggQEAgZG5sIFRlc3QgZm9yIFNETCwgYW5kIGRlZmluZSBTRExfQ0ZMQUdTCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfU0RMXSwKKyBbZG5sIAorLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIHNkbC1jb25maWcgc2NyaXB0CistZG5sCistQUNfQVJHX1dJVEgoc2RsLXByZWZpeCxbICAtLXdpdGgtc2RsLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgU0RMIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKy0gICAgICAgICAgICBzZGxfcHJlZml4PSIkd2l0aHZhbCIsIHNkbF9wcmVmaXg9IiIpCistQUNfQVJHX1dJVEgoc2RsLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1zZGwtZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIFNETCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCistICAgICAgICAgICAgc2RsX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIHNkbF9leGVjX3ByZWZpeD0iIikKKy1BQ19BUkdfRU5BQkxFKHNkbHRlc3QsIFsgIC0tZGlzYWJsZS1zZGx0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBTREwgcHJvZ3JhbV0sCistCQkgICAgLCBlbmFibGVfc2RsdGVzdD15ZXMpCistCistICBpZiB0ZXN0IHgkc2RsX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCistICAgIHNkbF9jb25maWdfYXJncz0iJHNkbF9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRzZGxfZXhlY19wcmVmaXgiCistICAgIGlmIHRlc3QgeCR7U0RMX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgU0RMX0NPTkZJRz0kc2RsX2V4ZWNfcHJlZml4L2Jpbi9zZGwtY29uZmlnCistICAgIGZpCistICBmaQorLSAgaWYgdGVzdCB4JHNkbF9wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgc2RsX2NvbmZpZ19hcmdzPSIkc2RsX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRzZGxfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke1NETF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIFNETF9DT05GSUc9JHNkbF9wcmVmaXgvYmluL3NkbC1jb25maWcKKy0gICAgZmkKKy0gIGZpCistCistICBhc19zYXZlX1BBVEg9IiRQQVRIIgorLSAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCistICAgIFBBVEg9IiRwcmVmaXgvYmluOiRwcmVmaXgvdXNyL2JpbjokUEFUSCIKKy0gIGZpCistICBBQ19QQVRIX1BST0coU0RMX0NPTkZJRywgc2RsLWNvbmZpZywgbm8sIFskUEFUSF0pCistICBQQVRIPSIkYXNfc2F2ZV9QQVRIIgorICAgbWluX3NkbF92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4xMS4wLCQxKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBTREwgLSB2ZXJzaW9uID49ICRtaW5fc2RsX3ZlcnNpb24pCistICBub19zZGw9IiIKKy0gIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgIG5vX3NkbD15ZXMKKy0gIGVsc2UKKy0gICAgU0RMX0NGTEFHUz1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgU0RMX0xJQlM9YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS1saWJzYAorLQorLSAgICBzZGxfbWFqb3JfdmVyc2lvbj1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgc2RsX21pbm9yX3ZlcnNpb249YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHNkbF9taWNyb192ZXJzaW9uPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zZGx0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKy0gICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKy0gICAgICBhY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCistICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKy0gICAgICBDRkxBR1M9IiRDRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICBMSUJTPSIkTElCUyAkU0RMX0xJQlMiCistZG5sCistZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIFNETCBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKKy1kbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHNkbC1jb25maWcgdG8gc29tZSBleHRlbnQKKy1kbmwKKy0gICAgICBybSAtZiBjb25mLnNkbHRlc3QKKy0gICAgICBBQ19UUllfUlVOKFsKKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlICJTREwuaCIKKy0KKy1jaGFyKgorLW15X3N0cmR1cCAoY2hhciAqc3RyKQorLXsKKy0gIGNoYXIgKm5ld19zdHI7CistICAKKy0gIGlmIChzdHIpCistICAgIHsKKy0gICAgICBuZXdfc3RyID0gKGNoYXIgKiltYWxsb2MgKChzdHJsZW4gKHN0cikgKyAxKSAqIHNpemVvZihjaGFyKSk7CistICAgICAgc3RyY3B5IChuZXdfc3RyLCBzdHIpOworLSAgICB9CistICBlbHNlCistICAgIG5ld19zdHIgPSBOVUxMOworLSAgCistICByZXR1cm4gbmV3X3N0cjsKKy19CistCistaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisteworLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CistICBjaGFyICp0bXBfdmVyc2lvbjsKKy0KKy0gIC8qIFRoaXMgaGFuZ3Mgb24gc29tZSBzeXN0ZW1zICg/KQorLSAgc3lzdGVtICgidG91Y2ggY29uZi5zZGx0ZXN0Iik7CistICAqLworLSAgeyBGSUxFICpmcCA9IGZvcGVuKCJjb25mLnNkbHRlc3QiLCAiYSIpOyBpZiAoIGZwICkgZmNsb3NlKGZwKTsgfQorLQorLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCistICB0bXBfdmVyc2lvbiA9IG15X3N0cmR1cCgiJG1pbl9zZGxfdmVyc2lvbiIpOworLSAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9zZGxfdmVyc2lvbiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistCistICAgaWYgKCgkc2RsX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKKy0gICAgICAoKCRzZGxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRzZGxfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKy0gICAgICAoKCRzZGxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRzZGxfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKCRzZGxfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorLSAgICB7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIHByaW50ZigiXG4qKiogJ3NkbC1jb25maWcgLS12ZXJzaW9uJyByZXR1cm5lZCAlZC4lZC4lZCwgYnV0IHRoZSBtaW5pbXVtIHZlcnNpb25cbiIsICRzZGxfbWFqb3JfdmVyc2lvbiwgJHNkbF9taW5vcl92ZXJzaW9uLCAkc2RsX21pY3JvX3ZlcnNpb24pOworLSAgICAgIHByaW50ZigiKioqIG9mIFNETCByZXF1aXJlZCBpcyAlZC4lZC4lZC4gSWYgc2RsLWNvbmZpZyBpcyBjb3JyZWN0LCB0aGVuIGl0IGlzXG4iLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKKy0gICAgICBwcmludGYoIioqKiBiZXN0IHRvIHVwZ3JhZGUgdG8gdGhlIHJlcXVpcmVkIHZlcnNpb24uXG4iKTsKKy0gICAgICBwcmludGYoIioqKiBJZiBzZGwtY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTRExfQ09ORklHXG4iKTsKKy0gICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIHNkbC1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGVcbiIpOworLSAgICAgIHByaW50ZigiKioqIGNvbmZpZy5jYWNoZSBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOworLSAgICAgIHJldHVybiAxOworLSAgICB9CistfQorLQorLV0sLCBub19zZGw9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKKy0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCistICAgICAgIENYWEZMQUdTPSIkYWNfc2F2ZV9DWFhGTEFHUyIKKy0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKy0gICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAieCRub19zZGwiID0geCA7IHRoZW4KKy0gICAgIEFDX01TR19SRVNVTFQoeWVzKQorLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorLSAgZWxzZQorLSAgICAgQUNfTVNHX1JFU1VMVChubykKKy0gICAgIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgICAgIGVjaG8gIioqKiBUaGUgc2RsLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IFNETCBjb3VsZCBub3QgYmUgZm91bmQiCistICAgICAgIGVjaG8gIioqKiBJZiBTREwgd2FzIGluc3RhbGxlZCBpbiBQUkVGSVgsIG1ha2Ugc3VyZSBQUkVGSVgvYmluIGlzIGluIgorLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIFNETF9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorLSAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIHNkbC1jb25maWcuIgorLSAgICAgZWxzZQorLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYuc2RsdGVzdCA7IHRoZW4KKy0gICAgICAgIDoKKy0gICAgICAgZWxzZQorLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBTREwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCistICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJExJQlMgJFNETF9MSUJTIgorLSAgICAgICAgICBBQ19UUllfTElOSyhbCistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgIlNETC5oIgorLQorLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisteyByZXR1cm4gMDsgfQorLSN1bmRlZiAgbWFpbgorLSNkZWZpbmUgbWFpbiBLX2FuZF9SX0NfbWFpbgorLV0sICAgICAgWyByZXR1cm4gMDsgXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorLSAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIFNETCBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKy0gICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgU0RMLiBJZiBpdCBpcyBub3QgZmluZGluZyBTREwsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorLSAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKy0gICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKy0gICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorLQkgIGVjaG8gIioqKiIKKy0gICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorLSAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKy0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIFNETCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBTREwgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCistICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBzZGwtY29uZmlnIHNjcmlwdDogJFNETF9DT05GSUciIF0pCistICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorLSAgICAgICAgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCistICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICAgIGZpCistICAgICBmaQorLSAgICAgU0RMX0NGTEFHUz0iIgorLSAgICAgU0RMX0xJQlM9IiIKKy0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoW1NETF0sIFtzZGwgPj0gJG1pbl9zZGxfdmVyc2lvbl0pCisgICBBQ19TVUJTVChTRExfQ0ZMQUdTKQorICAgQUNfU1VCU1QoU0RMX0xJQlMpCistICBybSAtZiBjb25mLnNkbHRlc3QKKyBdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsXzEuMi4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjZiZDQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWSA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgaXMgYSBjcm9zcy1wbGF0Zm9ybSBtdWx0aW1lZGlhIFwKK2xpYnJhcnkgZGVzaWduZWQgdG8gcHJvdmlkZSBsb3cgbGV2ZWwgYWNjZXNzIHRvIGF1ZGlvLCBrZXlib2FyZCwgbW91c2UsIFwKK2pveXN0aWNrLCAzRCBoYXJkd2FyZSB2aWEgT3BlbkdMLCBhbmQgMkQgdmlkZW8gZnJhbWVidWZmZXIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubGlic2RsLm9yZy8iCisKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3ODE4Y2Q3ZmQ4Mzg3N2E4ZTNlZjgyYjgyNzk4ZWY0IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnNkbCIKKworREVQRU5EUyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wgbGliZ2x1JywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHJhbmRyIGxpYnhyZW5kZXInLCAnJywgZCl9IFwKKyAgICAgICAgICAgdHNsaWIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEgbmF0aXZlc2RrLWxpYnhyYW5kciBuYXRpdmVzZGstbGlieHJlbmRlciBuYXRpdmVzZGstbGlieGV4dCcsICcnLCBkKX0iCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubGlic2RsLm9yZy9yZWxlYXNlL1NETC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX3R3ZWFrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L1NETC0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gIjlkOTZkZjg0MTc1NzJhMmFmYjc4MWE3YzRjODExYTg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ2ZDMxNmE3OTNlNWUzNDgxNTVmMGRkOTNiOTc5Nzk4OTMzZmI5OGFhMWVkZWJjYzEwODgyOWQ2NDc0YWFkMDAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vc2RsLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1jZHJvbSAtLWVuYWJsZS10aHJlYWRzIC0tZW5hYmxlLXRpbWVycyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZmlsZSAtLWRpc2FibGUtb3NzIC0tZGlzYWJsZS1lc2QgLS1kaXNhYmxlLWFydHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kaXNrYXVkaW8gLS1kaXNhYmxlLW5hcyAtLWRpc2FibGUtZXNkLXNoYXJlZCAtLWRpc2FibGUtZXNkdGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1pbnRhdWRpbyAtLWRpc2FibGUtbmFzbSAtLWRpc2FibGUtdmlkZW8tZGdhIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tZmJjb24gLS1kaXNhYmxlLXZpZGVvLXBzMmdzIC0tZGlzYWJsZS12aWRlby1wczMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14YmlvcyAtLWRpc2FibGUtZ2VtIC0tZGlzYWJsZS12aWRlby1kdW1teSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5wdXQtZXZlbnRzIC0tZW5hYmxlLWlucHV0LXRzbGliIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJy0tZW5hYmxlLXZpZGVvLWRpcmVjdGZiJywgJy0tZGlzYWJsZS12aWRlby1kaXJlY3RmYicsIGQpfSBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLS1lbmFibGUtdmlkZW8tb3BlbmdsJywgJy0tZGlzYWJsZS12aWRlby1vcGVuZ2wnLCBkKX0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0tZW5hYmxlLXZpZGVvLXgxMScsICctLWRpc2FibGUtdmlkZW8teDExJywgZCl9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tc3ZnYSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLXBpY29ndWkgLS1kaXNhYmxlLXZpZGVvLXF0b3BpYSAtLWVuYWJsZS1zZGwtZGxvcGVuIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1wdWxzZWF1ZGlvIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhIC0tZGlzYWJsZS1hbHNhdGVzdCwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiwiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0taW5jbHVkZT1hY2luY2x1ZGUgLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICAjIFJlbW92ZSBvbGQgbGlidG9vbCBtYWNyb3MuCisgICAgICAgIE1BQ1JPUz0ibGlidG9vbC5tNCBsdH5vYnNvbGV0ZS5tNCBsdG9wdGlvbnMubTQgbHRzdWdhci5tNCBsdHZlcnNpb24ubTQiCisgICAgICAgIGZvciBpIGluICR7TUFDUk9TfTsgZG8KKyAgICAgICAgICAgICAgIHJtIC1mICR7U30vYWNpbmNsdWRlLyRpCisgICAgICAgIGRvbmUKKyAgICAgICAgZXhwb3J0IFNZU1JPT1Q9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNjRmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMl8yLjAuMy5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciBpcyBhIGNyb3NzLXBsYXRmb3JtIG11bHRpbWVkaWEgXAorbGlicmFyeSBkZXNpZ25lZCB0byBwcm92aWRlIGxvdyBsZXZlbCBhY2Nlc3MgdG8gYXVkaW8sIGtleWJvYXJkLCBtb3VzZSwgXAoram95c3RpY2ssIDNEIGhhcmR3YXJlIHZpYSBPcGVuR0wsIGFuZCAyRCB2aWRlbyBmcmFtZWJ1ZmZlci4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5saWJzZGwub3JnLyIKKworU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIlpsaWIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9NjdkY2I3ZmFlMTY5NTI1NTdiYzVmOTZlOWViNWQxODgiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGlic2RsMiIKKworREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9uYXRpdmVzZGstbGlieDExIG5hdGl2ZXNkay1saWJ4cmFuZHIgbmF0aXZlc2RrLWxpYnhyZW5kZXIgbmF0aXZlc2RrLWxpYnhleHQnLCAnJywgZCl9IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubGlic2RsLm9yZy9yZWxlYXNlL1NETDItJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vU0RMMi0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gImZlNmM2MWQyZTlkZjllZjU3MGU3ZTgwYzZlODIyNTM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1YTY5YTZhYmY4MGJjY2U3MTNmYTg3MzYwNzczNWZlNzEyZjQ0Mjc2YTdmMDQ4ZDYwYTYxYmIyZjZiM2M5MGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1vc3MgLS1kaXNhYmxlLWVzZCAtLWRpc2FibGUtYXJ0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRpc2thdWRpbyAtLWRpc2FibGUtbmFzIC0tZGlzYWJsZS1lc2Qtc2hhcmVkIC0tZGlzYWJsZS1lc2R0ZXN0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tZHVtbXkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zZGwtZGxvcGVuIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGgiCisKKyMgb3BlbmdsIHBhY2thZ2Vjb25maWcgZmFjdG9yZWQgb3V0IHRvIG1ha2UgaXQgZWFzeSBmb3IgZGlzdHJvcworIyBhbmQgQlNQIGxheWVycyB0byBwaWNrIGVpdGhlciAoZGVza3RvcCkgb3BlbmdsLCBnbGVzMiwgb3Igbm8gR0wKK1BBQ0tBR0VDT05GSUdfR0wgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ29wZW5nbCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7UEFDS0FHRUNPTkZJR19HTH0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gICAgICAgPSAiLS1lbmFibGUtYWxzYSAtLWRpc2FibGUtYWxzYXRlc3QsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIsIgorUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gICA9ICItLWVuYWJsZS12aWRlby1kaXJlY3RmYiAtLWRpc2FibGUtdmlkZW8tZGlyZWN0ZmIsZGlyZWN0ZmIiCitQQUNLQUdFQ09ORklHW2dsZXMyXSAgICAgID0gIi0tZW5hYmxlLXZpZGVvLW9wZW5nbGVzLC0tZGlzYWJsZS12aWRlby1vcGVuZ2xlcyx2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1tvcGVuZ2xdICAgICA9ICItLWVuYWJsZS12aWRlby1vcGVuZ2wsLS1kaXNhYmxlLXZpZGVvLW9wZW5nbCx2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZWF1ZGlvLC0tZGlzYWJsZS1wdWxzZWF1ZGlvLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW3RzbGliXSAgICAgID0gIi0tZW5hYmxlLWlucHV0LXRzbGliLC0tZGlzYWJsZS1pbnB1dC10c2xpYix0c2xpYiIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgPSAiLS1lbmFibGUtdmlkZW8td2F5bGFuZCwtLWRpc2FibGUtdmlkZW8td2F5bGFuZCx3YXlsYW5kIgorUEFDS0FHRUNPTkZJR1t4MTFdICAgICAgICA9ICItLWVuYWJsZS12aWRlby14MTEsLS1kaXNhYmxlLXZpZGVvLXgxMSx2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyYW5kciBsaWJ4cmVuZGVyIgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluY2x1ZGU9YWNpbmNsdWRlIC0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxpYnRvb2wgbWFjcm9zLgorICAgICAgICBNQUNST1M9ImxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00IgorICAgICAgICBmb3IgaSBpbiAke01BQ1JPU307IGRvCisgICAgICAgICAgICAgICBybSAtZiAke1N9L2FjaW5jbHVkZS8kaQorICAgICAgICBkb25lCisgICAgICAgIGV4cG9ydCBTWVNST09UPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4ZGU5OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9NSVQtc3R5bGUtbGljZW5zZQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDEgUmVkIEhhdCwgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgUmVkIEhhdCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgUmVkIEhhdCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFJFRCBIQVQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFJFRCBIQVQKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiAKKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQXV0aG9yOiAgT3dlbiBUYXlsb3IsIFJlZCBIYXQsIEluYy4KKyAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjdlZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitEbyBub3Qgc2V0IE9zIG9wdGltaXphdGlvbiBpbiB0YXJnZXQgQVBQIENGTEFHUywgc2luY2UgaXQgbWF5IGhhdmUgcG90ZW50aWFsCitlcnJvciBpZiAiLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIiBpcyBub3Qgc2V0IHdoZW4gY29uZmlndXJpbmcgR0NDLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitkaWZmIC1ydU4gWHNldHRpbmdzLWNsaWVudC0wLjEwLW9yaWcvY29uZmlndXJlLmFjIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMKKy0tLSBYc2V0dGluZ3MtY2xpZW50LTAuMTAtb3JpZy9jb25maWd1cmUuYWMJMjAxMC0wOS0yMSAxNDowMTo0Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMTAtMDktMjEgMTQ6MDI6MDEuMDAwMDAwMDAwICswODAwCitAQCAtMyw3ICszLDcgQEAKKyBBTV9JTklUX0FVVE9NQUtFKFhzZXR0aW5ncy1jbGllbnQsIDAuMTApCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKyAKKy1DRkxBR1M9Ii1PcyAtV2FsbCIKKytDRkxBR1M9Ii1PMiAtV2FsbCIKKyAKKyAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGQwZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvbGluay14MTEucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogWHNldHRpbmdzLWNsaWVudC0wLjEwL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwLm9yaWcvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo0OTo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo1MDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC05LDQgKzksNCBAQAorIAorIGxpYlhzZXR0aW5nc19jbGllbnRfbGFfU09VUkNFUz0gJChzb3VyY2VfYykgJChzb3VyY2VfaCkKKyAKKy1saWJYc2V0dGluZ3NfY2xpZW50X2xhX0xJQkFERCAgICAgID0gQFhfTElCU0AKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2xpYlhzZXR0aW5nc19jbGllbnRfbGFfTElCQUREICAgICAgPSBAWF9MSUJTQCAtbFgxMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYworLS0tIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMJMjAwMy0wMy0yOCAxMjozOTo1MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMTMtMDEtMTEgMDc6Mzc6MjEuNDkxNTk3NzQzICswMjAwCitAQCAtMSw3ICsxLDcgQEAKKyAjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgQUNfSU5JVCh4c2V0dGluZ3MtY2xpZW50LmMpCisgQU1fSU5JVF9BVVRPTUFLRShYc2V0dGluZ3MtY2xpZW50LCAwLjEwKQorLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisKKyBDRkxBR1M9Ii1PcyAtV2FsbCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50XzAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwZDlmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAidXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBYc2V0dGluZ3MgcHJvdG9jb2wiCitERVNDUklQVElPTiA9ICJMaWJyYXJpZXMgdXNlZCBmb3IgYXBwbGljYXRpb25zIG1ha2luZyB1c2Ugb2YgdGhlIFhzZXR0aW5ncyBjb25maWd1cmF0aW9uIFwKK3NldHRpbmcgcHJvcGFnYXRpb24gcHJvdG9jb2wuIENvbnRyb2xzIHNldHRpbmcgb2YgZG91YmxlIGNsaWNrIHRpbWVvdXQsIGRyYWctYW5kLWRyb3AgXAordGhyZXNob2xkLCBhbmQgZGVmYXVsdCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBmb3IgYWxsIGFwcGxpY2F0aW9ucyBydW5uaW5nIHdpdGhpbiBhIFwKK2Rlc2t0b3AuIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnL3NvdXJjZXMvb3B0aW9uYWwtZGVwZW5kZW5jaWVzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4L2xpYnMiCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jbGllbnQuaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY29tbW9uLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIgorCitQUiA9ICJyNSIKKworaGVhZGVycyA9ICJ4c2V0dGluZ3MtY29tbW9uLmggeHNldHRpbmdzLWNsaWVudC5oIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC9vcHRpb25hbC1kZXBlbmRlbmNpZXMvWHNldHRpbmdzLWNsaWVudC0wLjEwLnRhci5neiBcCisgICAgICAgIGZpbGU6Ly9NSVQtc3R5bGUtbGljZW5zZSBcCisgICAgICAgIGZpbGU6Ly9saW5rLXgxMS5wYXRjaDthcHBseT15ZXMgXAorICAgICAgICBmaWxlOi8vZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImMxNGFhOWRiNmMwOTdlMDMwNmRhYzk3ZmI3ZGExYWRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYyNzRhNGJjOTY5YWUxOTI5OTRhODU2YjdmNzg2YzZmY2U5NmJhZTc3Zjk2YzFjMmI3MWRkOTc1OTllMDZlNDMiCisKK1MgPSAiJHtXT1JLRElSfS9Yc2V0dGluZ3MtY2xpZW50LTAuMTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgVGhpcyBwYWNrYWdlIGRvZXNuJ3Qgc2hpcCB3aXRoIGl0cyBvd24gQ09QWUlORyBmaWxlIGFuZAorICAgICMgYXV0b3Rvb2xzIHdpbGwgaW5zdGFsbCBhIEdQTHYyIG9uZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgTUlULXN0eWxlIGxpY2Vuc2UgaGVyZS4KKyAgICAjIEFkZCB0aGUgY29ycmVjdCBsaWNlbnNlIGhlcmUgdG8gYXZvaWQgY29uZnVzaW9uLgorICAgIGNwIC1mICR7V09SS0RJUn0vTUlULXN0eWxlLWxpY2Vuc2UgJHtTfS9DT1BZSU5HCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2Y2FhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIG1hdGNoYm94IHRvb2xzCisjCisKKyMgVW5jb21tZW50IGJlbG93IHRvIGVuYWJsZSBwYXJzaW5nIG9mIGRlYmlhbiBtZW51IGVudHJ5cworIyBleHBvcnQgTUJfVVNFX0RFQl9NRU5VUz0xIAorCitpZiBbIC1lICRIT01FLy5tYXRjaGJveC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgJEhPTUUvLm1hdGNoYm94L3Nlc3Npb24KK2ZpCisKK2lmIFsgLWUgL2V0Yy9tYXRjaGJveC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgL2V0Yy9tYXRjaGJveC9zZXNzaW9uCitmaQorCisjIERlZmF1bHQgZmlsZXMgdG8gcnVuIGlmICRIT01FLy5tYXRjaGJveC9zZXNzaW9uIG9yIC9ldGMvbWF0Y2hib3gvc2Vzc2lvbgorIyBkb250IGV4aXN0LiAKKworbWF0Y2hib3gtZGVza3RvcCAmCittYXRjaGJveC1wYW5lbCAmCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyICRACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb25fMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFmMDU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkN1c3RvbSBNYXRjaGJveCBzZXNzaW9uIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21hdGNoYm94LXNlc3Npb247ZW5kbGluZT0yMDttZDU9MTgwZjFjMTY5YTE1ZDA1OWE1NmMzMDA5NGY2ZmI1ZWEiCisKK1NFQ1RJT04gPSAieDExIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1jb21tb24iCisKK1NSQ19VUkkgPSAiZmlsZTovL21hdGNoYm94LXNlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK1BSID0gInI0IgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAieC1zZXNzaW9uLW1hbmFnZXIiCitBTFRFUk5BVElWRV9UQVJHRVRbeC1zZXNzaW9uLW1hbmFnZXJdID0gIiR7YmluZGlyfS9tYXRjaGJveC1zZXNzaW9uIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9tYXRjaGJveC1zZXNzaW9uICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5ZGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtL2tiZGNvbmZpZwpAQCAtMCwwICsxLDQyIEBACisjCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBrZXlib2FyZCBjb25maWcgZmlsZSBmb3IgbWF0Y2hib3gKKyMKKyMgWW91IGNhbiBlZGl0IHRoaXMgZmlsZSBvciBjaGFuZ2UgcGVyIHVzZXIgYnkgY29weWluZyB0byAKKyMgIH4vLm1hdGNoYm94L2tiZGNvbmZpZworIworIyBTZSB0aGUgbWF0Y2hib3ggbWFudWFsIGZvciBtb3JlIGluZm8gKCBodHRwOi8vcHJvamVjdHMuby1oYW5kLmNvbS9tYXRjaGJveCApCisKKyMjIyBXaW5kb3cgb3BlcmF0aW9uIHNob3J0IGN1dHMgCisKKzxBbHQ+bj1uZXh0Cis8QWx0PnA9cHJldgorPEFsdD5jPWNsb3NlCis8QWx0PmQ9ZGVza3RvcAorPEFsdD5tPSFtYXRjaGJveC1yZW1vdGUgLW1ibWVudQorCisjIyMgQXBwIGxhdW5jaGluZy4KKworPGN0cmw+PGFsdD54PSF4dGVybQorPGN0cmw+PGFsdD5yPSFyeHZ0CisKKyMjIyBwb2t5IGFkZGl0aW9ucworCitYRjg2Q2FsZW5kYXI9ISRjb250YWN0cwordGVsZXBob25lPSEkZGF0ZXMKK1hGODZTdGFydD0hbWF0Y2hib3gtcmVtb3RlIC1kZXNrdG9wCitGMj0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKworI1hGODZNYWlsPSEkdGFza3MKKyNFc2NhcGU9Y2xvc2UKKworIyMjIHdpbmRvd3Mgc3R5bGUga2V5IHNob3J0Y3V0cworCis8YWx0PlRhYj1uZXh0Cis8YWx0PjxzaGlmdD5UYWI9cHJldgorCis8YWx0PnNwYWNlPXRhc2ttZW51Cis8YWx0PmVzY2FwZT0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKzxhbHQ+ZjQ9Y2xvc2UKKworZjExPWZ1bGxzY3JlZW4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmQyNTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV9naXQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBsaWdodHdlaWdodCB3aW5kb3cgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy93bS5oO2VuZGxpbmU9MjE7bWQ1PWE3ZTg0NDQ2NWVkYmNmNzljMjgyMzY5ZjkzY2FhODM1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0yMTttZDU9M2U1ZDlmODMyYjUyN2IwZDcyZGJlOGUzYzRjNjBiOTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dtLmM7ZW5kbGluZT0yMTttZDU9OGRjOWQyNDQ3N2Q4N2VmNWRmYmMyZTQ5MjcxNDZhYWIiCisKK1NFQ1RJT04gPSAieDExL3dtIgorREVQRU5EUyA9ICJsaWJtYXRjaGJveCB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyZW5kZXIgc3RhcnR1cC1ub3RpZmljYXRpb24gZXhwYXQgZ2NvbmYgbGlieGN1cnNvciBsaWJ4Zml4ZXMiCisKK1NSQ1JFViA9ICIyOTU0NGYwZTYxY2MyODFmYzYwMDYxNDQzYTUzNzI3MWUxMDgxYjc4IgorUFYgPSAiMS4yK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIFwKKyAgICAgICAgICAgZmlsZTovL2tiZGNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvYmxvbmRpZS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9EZWZhdWx0L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL01CT3B1cy9tYXRjaGJveCIKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14cm0gXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1leHBhdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1leHBhdC1saWI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtaW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwlpbnN0YWxsICR7V09SS0RJUn0va2JkY29uZmlnICR7U30vZGF0YS9rYmRjb25maWcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkwOWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVudS1jYWNoZS9tZW51LWNhY2hlXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgY2FjaGluZyBhcHBsaWNhdGlvbiBtZW51cyIKK0RFU0NSSVBUSU9OID0gIkEgbGlicmFyeSBjcmVhdGluZyBhbmQgdXRpbGl6aW5nIGNhY2hlcyB0byBzcGVlZCB1cCBmcmVlZGVza3RvcC5vcmcgYXBwbGljYXRpb24gbWVudXMiCitIT01FUEFHRSA9ICJodHRwOi8vbHhkZS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5NjRjNjg5ZmNmNGMyMWM2Nzk3ZWE4NzQwODQxNmI2IgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUgbGliZm0tZXh0cmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2x4ZGUvbWVudS1jYWNoZS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YThlNmMxYTg2ZDVlNjRlYzcyNWQ4NTBhNGFiZmJhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjdkZjQzN2JiZmQzMTE5YzVmNjYyYzZkMjA5Yjk4ZjE1ZGUwM2E3MjAzMzA4YzZiNTZhNGMxZTFkNDE5YWFmIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBndGstZG9jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbGliZ2x1XzkuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDk5OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlRoZSBPcGVuR0wgdXRpbGl0eSB0b29sa2l0IgorREVTQ1JJUFRJT04gPSAiR0xVIGlzIGEgdXRpbGl0eSB0b29sa2l0IHVzZWQgd2l0aCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIgorCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pbmNsdWRlL0dML2dsdS5oO2VuZGxpbmU9Mjk7bWQ1PTZiNzljNTcwZjY0NDM2M2IzNTY0NTZlN2Q0NDQ3MWQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9saWJ0ZXNzL3Rlc3MuYztlbmRsaW5lPTI5O21kNT02Yjc5YzU3MGY2NDQzNjNiMzU2NDU2ZTdkNDQ0NzFkOSIKKworIyBFcG9jaCBhcyB0aGlzIHVzZWQgdG8gYmUgcGFydCBvZiBtZXNhCitQRSA9ICIyIgorUFIgPSAiMCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2dsdS9nbHUtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImJlOTI0OTEzMmZmNDkyNzU0NjFjZjkyMDM5MDgzMDMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmN2FkMGQzNzlhNzIyZmNiZDMwM2FhNTY1MGM2ZDdkNTU0NGZkZTgzMTk2YjQyYTczZDExOTM1NjhhNGRmMTIiCisKK1MgPSAiJHtXT1JLRElSfS9nbHUtJHtQVn0iCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJnbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFJlcXVpcmVzIGxpYkdMLnNvIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IG1lc2Egd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjIFJlbW92ZSB0aGUgbWVzYS1nbHUgZGVwZW5kZW5jeSBpbiBtZXNhLWdsdS1kZXYsIGFzIG1lc2EtZ2x1IGlzIGVtcHR5CitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWU5YzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw2MjQgQEAKK0Zyb20gYjY5NWMzYTNmYTNmNGNkNDhjMTNhYTI2NTQyMTEwZGUyNzA3NTUxOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiBNb24sIDEyIE1heSAyMDE0IDE1OjIyOjMyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMS85XSBtZXNhLWRlbW9zOiBBZGQgbWlzc2luZyBkYXRhIGZpbGVzLgorCitBZGQgc29tZSBkYXRhIGZpbGVzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIGdpdCByZXBvc2l0b3J5OgorICAgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL21lc2EvZGVtb3MvdHJlZS8/aWQ9bWVzYS1kZW1vcy04LjEuMAorYnV0IG5vdCBpbiB0aGUgcmVsZWFzZSB0YXJiYWxsCisgICBmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2RlbW9zLzguMS4wL21lc2EtZGVtb3MtOC4xLjAudGFyLmJ6MgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wgICAgICB8ICAgNCArCisgc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgICB8ICAgNyArCisgc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcgICB8ICA0NyArKysrKysrCisgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcgICB8ICAzMSArKysrKworIHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0ICAgfCAgMTYgKysrCisgc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZyAgICAgICB8ICAyMSArKysKKyBzcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wgICAgIHwgMjc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvZ2xzbC9za2lubmluZy52ZXJ0ICAgICAgICAgIHwgIDI0ICsrKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnIHwgIDE5ICsrKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgfCAgMTQgKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnIHwgIDE3ICsrKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQgfCAgMTQgKysKKyBzcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCAgIHwgICA4ICsrCisgMTMgZmlsZXMgY2hhbmdlZCwgNTAxIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvc2tpbm5pbmcudmVydAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCisKK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbCBiL3NyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODZkMjk4ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wKK0BAIC0wLDAgKzEsNCBAQAorK3ZvaWQgbWFpbigpCisreworKyAgIGdsX0ZyYWdDb2xvciA9IGdsX0ZyYWdDb29yZC56enp6OworK30KK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCBiL3NyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzZkYzZlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKK0BAIC0wLDAgKzEsNyBAQAorK3ZvaWQgbWFpbigpIHsKKysgICB2ZWM0IHN1bSA9IHZlYzQoMCk7CisrICAgZm9yIChpbnQgaSA9IDE7IGkgIT0gMjsgaSArPSAyKSB7CisrICAgICAgc3VtICs9IHZlYzQoMC4xLCAwLjEsIDAuMSwgMC4xKTsKKysgICB9CisrICAgZ2xfRnJhZ0NvbG9yID0gc3VtOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZyBiL3NyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjVkYWJiNAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcKK0BAIC0wLDAgKzEsNDcgQEAKKysvLworKy8vIEZyYWdtZW50IHNoYWRlciBmb3IgcHJvY2VkdXJhbCBidW1wcworKy8vCisrLy8gQXV0aG9yczogSm9obiBLZXNzZW5pY2gsIFJhbmRpIFJvc3QKKysvLworKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IDNEbGFicyBJbmMuIEx0ZC4gCisrLy8KKysvLyBTZWUgM0RsYWJzLUxpY2Vuc2UudHh0IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uCisrLy8KKysvLyBUZXh0dXJlIG1hcHBpbmcvbW9kdWxhdGlvbiBhZGRlZCBieSBCcmlhbiBQYXVsCisrLy8KKysKKyt2YXJ5aW5nIHZlYzMgTGlnaHREaXI7CisrdmFyeWluZyB2ZWMzIEV5ZURpcjsKKysKKyt1bmlmb3JtIGZsb2F0IEJ1bXBEZW5zaXR5OyAgICAgLy8gPSAxNi4wCisrdW5pZm9ybSBmbG9hdCBCdW1wU2l6ZTsgICAgICAgIC8vID0gMC4xNQorK3VuaWZvcm0gZmxvYXQgU3BlY3VsYXJGYWN0b3I7ICAvLyA9IDAuNQorKworK3VuaWZvcm0gc2FtcGxlcjJEIFRleDsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICAgdmVjMyBhbWJpZW50ID0gdmVjMygwLjI1KTsKKysgICAgdmVjMyBsaXRDb2xvcjsKKysgICAgdmVjMiBjID0gQnVtcERlbnNpdHkgKiBnbF9UZXhDb29yZFswXS5zdDsKKysgICAgdmVjMiBwID0gZnJhY3QoYykgLSB2ZWMyKDAuNSk7CisrCisrICAgIGZsb2F0IGQsIGY7CisrICAgIGQgPSBwLnggKiBwLnggKyBwLnkgKiBwLnk7CisrICAgIGYgPSBpbnZlcnNlc3FydChkICsgMS4wKTsKKysKKysgICAgaWYgKGQgPj0gQnVtcFNpemUpCisrICAgICAgICB7IHAgPSB2ZWMyKDAuMCk7IGYgPSAxLjA7IH0KKysKKysgICAgdmVjMyBTdXJmYWNlQ29sb3IgPSB0ZXh0dXJlMkQoVGV4LCBnbF9UZXhDb29yZFswXS5zdCkueHl6OworKworKyAgICB2ZWMzIG5vcm1EZWx0YSA9IHZlYzMocC54LCBwLnksIDEuMCkgKiBmOworKyAgICBsaXRDb2xvciA9IFN1cmZhY2VDb2xvciAqIChhbWJpZW50ICsgbWF4KGRvdChub3JtRGVsdGEsIExpZ2h0RGlyKSwgMC4wKSk7CisrICAgIHZlYzMgcmVmbGVjdERpciA9IHJlZmxlY3QoTGlnaHREaXIsIG5vcm1EZWx0YSk7CisrICAgIAorKyAgICBmbG9hdCBzcGVjID0gbWF4KGRvdChFeWVEaXIsIHJlZmxlY3REaXIpLCAwLjApOworKyAgICBzcGVjICo9IFNwZWN1bGFyRmFjdG9yOworKyAgICBsaXRDb2xvciA9IG1pbihsaXRDb2xvciArIHNwZWMsIHZlYzMoMS4wKSk7CisrCisrICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobGl0Q29sb3IsIDEuMCk7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wZGIwNjBiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZworQEAgLTAsMCArMSwzMSBAQAorKyNleHRlbnNpb24gR0xfQVJCX3VuaWZvcm1fYnVmZmVyX29iamVjdCA6IGVuYWJsZQorKworK2xheW91dChzdGQxNDApIHVuaWZvcm0gY29sb3JzMAorK3sKKysgICAgZmxvYXQgRGlmZnVzZUNvb2w7CisrICAgIGZsb2F0IERpZmZ1c2VXYXJtOworKyAgICB2ZWMzICBTdXJmYWNlQ29sb3I7CisrICAgIHZlYzMgIFdhcm1Db2xvcjsKKysgICAgdmVjMyAgQ29vbENvbG9yOworKyAgICB2ZWM0ICBzb21lWzhdOworK307CisrCisrdmFyeWluZyBmbG9hdCBOZG90TDsKKyt2YXJ5aW5nIHZlYzMgIFJlZmxlY3RWZWM7CisrdmFyeWluZyB2ZWMzICBWaWV3VmVjOworKworK3ZvaWQgbWFpbiAodm9pZCkKKyt7CisrCisrICAgIHZlYzMga2Nvb2wgICAgPSBtaW4oQ29vbENvbG9yICsgRGlmZnVzZUNvb2wgKiBTdXJmYWNlQ29sb3IsIDEuMCk7CisrICAgIHZlYzMga3dhcm0gICAgPSBtaW4oV2FybUNvbG9yICsgRGlmZnVzZVdhcm0gKiBTdXJmYWNlQ29sb3IsIDEuMCk7CisrICAgIHZlYzMga2ZpbmFsICAgPSBtaXgoa2Nvb2wsIGt3YXJtLCBOZG90TCk7CisrCisrICAgIHZlYzMgbnJlZmxlY3QgPSBub3JtYWxpemUoUmVmbGVjdFZlYyk7CisrICAgIHZlYzMgbnZpZXcgICAgPSBub3JtYWxpemUoVmlld1ZlYyk7CisrCisrICAgIGZsb2F0IHNwZWMgICAgPSBtYXgoZG90KG5yZWZsZWN0LCBudmlldyksIDAuMCk7CisrICAgIHNwZWMgICAgICAgICAgPSBwb3coc3BlYywgMzIuMCk7CisrCisrICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQgKG1pbihrZmluYWwgKyBzcGVjLCAxLjApLCAxLjApOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydCBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzk3ZDczMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQKK0BAIC0wLDAgKzEsMTYgQEAKKyt2ZWMzIExpZ2h0UG9zaXRpb24gPSB2ZWMzKDAuMCwgMTAuMCwgNC4wKTsgCisrIAorK3ZhcnlpbmcgZmxvYXQgTmRvdEw7CisrdmFyeWluZyB2ZWMzICBSZWZsZWN0VmVjOworK3ZhcnlpbmcgdmVjMyAgVmlld1ZlYzsKKysgCisrdm9pZCBtYWluKHZvaWQpCisreworKyAgICB2ZWMzIGVjUG9zICAgICAgPSB2ZWMzIChnbF9Nb2RlbFZpZXdNYXRyaXggKiBnbF9WZXJ0ZXgpOworKyAgICB2ZWMzIHRub3JtICAgICAgPSBub3JtYWxpemUoZ2xfTm9ybWFsTWF0cml4ICogZ2xfTm9ybWFsKTsKKysgICAgdmVjMyBsaWdodFZlYyAgID0gbm9ybWFsaXplKExpZ2h0UG9zaXRpb24gLSBlY1Bvcyk7CisrICAgIFJlZmxlY3RWZWMgICAgICA9IG5vcm1hbGl6ZShyZWZsZWN0KC1saWdodFZlYywgdG5vcm0pKTsKKysgICAgVmlld1ZlYyAgICAgICAgID0gbm9ybWFsaXplKC1lY1Bvcyk7CisrICAgIE5kb3RMICAgICAgICAgICA9IChkb3QobGlnaHRWZWMsIHRub3JtKSArIDEuMCkgKiAwLjU7CisrICAgIGdsX1Bvc2l0aW9uICAgICA9IGZ0cmFuc2Zvcm0oKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lNDliOGFjCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnCitAQCAtMCwwICsxLDIxIEBACisrCisrY29uc3QgaW50IEtlcm5lbFNpemUgPSA5OworKworKy8vdGV4dHVyZSBvZmZzZXRzCisrdW5pZm9ybSB2ZWMyIE9mZnNldFtLZXJuZWxTaXplXTsKKysvL2NvbnZvbHV0aW9uIGtlcm5lbAorK3VuaWZvcm0gdmVjNCBLZXJuZWxWYWx1ZVtLZXJuZWxTaXplXTsKKyt1bmlmb3JtIHNhbXBsZXIyRCBzcmNUZXg7CisrdW5pZm9ybSB2ZWM0IFNjYWxlRmFjdG9yOworK3VuaWZvcm0gdmVjNCBCYXNlQ29sb3I7CisrCisrdm9pZCBtYWluKHZvaWQpCisreworKyAgICBpbnQgaTsKKysgICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7CisrICAgIGZvciAoaSA9IDA7IGkgPCBLZXJuZWxTaXplOyArK2kpIHsKKysgICAgICAgIHZlYzQgdG1wID0gdGV4dHVyZTJEKHNyY1RleCwgZ2xfVGV4Q29vcmRbMF0uc3QgKyBPZmZzZXRbaV0pOworKyAgICAgICAgc3VtICs9IHRtcCAqIEtlcm5lbFZhbHVlW2ldOworKyAgICB9CisrICAgIGdsX0ZyYWdDb2xvciA9IHN1bSAqIFNjYWxlRmFjdG9yICsgQmFzZUNvbG9yOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjgzM2NiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKK0BAIC0wLDAgKzEsMjc5IEBACisrLy8KKysvLyBEZXNjcmlwdGlvbiA6IEFycmF5IGFuZCB0ZXh0dXJlbGVzcyBHTFNMIDJELzNELzREIHNpbXBsZXgKKysvLyBub2lzZSBmdW5jdGlvbnMuCisrLy8gQXV0aG9yIDogSWFuIE1jRXdhbiwgQXNoaW1hIEFydHMuCisrLy8gTWFpbnRhaW5lciA6IGlqbQorKy8vIExhc3Rtb2QgOiAyMDExMDIyMworKy8vIExpY2Vuc2UgOiBDb3B5cmlnaHQgKEMpIDIwMTEgQXNoaW1hIEFydHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFydGlzdGljIExpY2Vuc2UgMi4wOyBTZWUgTElDRU5DRSBmaWxlLgorKy8vCisrCisrI2RlZmluZSBOT1JNQUxJWkVfR1JBRElFTlRTCisrI3VuZGVmIFVTRV9DSVJDTEUKKysjZGVmaW5lIENPTExBUFNFX1NPUlRORVQKKysKKytmbG9hdCBwZXJtdXRlKGZsb2F0IHgwLHZlYzMgcCkgeworKyAgZmxvYXQgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWMyIHBlcm11dGUodmVjMiB4MCx2ZWMzIHApIHsKKysgIHZlYzIgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWMzIHBlcm11dGUodmVjMyB4MCx2ZWMzIHApIHsKKysgIHZlYzMgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWM0IHBlcm11dGUodmVjNCB4MCx2ZWMzIHApIHsKKysgIHZlYzQgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKysKKyt1bmlmb3JtIHZlYzQgcFBhcmFtOworKy8vIEV4YW1wbGUKKysvLyBjb25zdCB2ZWM0IHBQYXJhbSA9IHZlYzQoIDE3LiogMTcuLCAzNC4sIDEuLCA3Lik7CisrCisrZmxvYXQgdGF5bG9ySW52U3FydChmbG9hdCByKQorKyAgeworKyAgcmV0dXJuICggMC44MzY2NjAwMjY1MzQwOCArIDAuNyowLjg1MzczNDcyMDk1MzE0IC0gMC44NTM3MzQ3MjA5NTMxNCAqIHIgKTsKKysgIH0KKysKKytmbG9hdCBzaW1wbGV4Tm9pc2UyKHZlYzIgdikKKysgIHsKKysgIGNvbnN0IHZlYzIgQyA9IHZlYzIoMC4yMTEzMjQ4NjU0MDUxODcxMzQsIC8vICgzLjAtc3FydCgzLjApKS82LjsKKysgICAgICAgICAgICAgICAgICAgICAgMC4zNjYwMjU0MDM3ODQ0Mzg1OTcpOyAvLyAwLjUqKHNxcnQoMy4wKS0xLik7CisrICBjb25zdCB2ZWMzIEQgPSB2ZWMzKCAwLiwgMC41LCAyLjApICogMy4xNDE1OTI2NTM1ODk3OTMxMjsKKysvLyBGaXJzdCBjb3JuZXIKKysgIHZlYzIgaSA9IGZsb29yKHYgKyBkb3QodiwgQy55eSkgKTsKKysgIHZlYzIgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4KTsKKysKKysvLyBPdGhlciBjb3JuZXJzCisrICB2ZWMyIGkxID0gKHgwLnggPiB4MC55KSA/IHZlYzIoMS4sMC4pIDogdmVjMigwLiwxLikgOworKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjMiB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHggOworKyAgdmVjMiB4MiA9IHgwIC0gMS4gKyAyLiAqIEMueHggOworKworKy8vIFBlcm11dGF0aW9ucworKyAgaSA9IG1vZChpLCBwUGFyYW0ueCk7CisrICB2ZWMzIHAgPSBwZXJtdXRlKCBwZXJtdXRlKAorKyAgICAgICAgICAgICBpLnkgKyB2ZWMzKDAuLCBpMS55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWMzKDAuLCBpMS54LCAxLiApLCBwUGFyYW0ueHl6KTsKKysKKysjaWZuZGVmIFVTRV9DSVJDTEUKKysvLyAoIE4gcG9pbnRzIHVuaWZvcm1seSBvdmVyIGEgbGluZSwgbWFwcGVkIG9udG8gYSBkaWFtb25kLikKKysgIHZlYzMgeCA9IGZyYWN0KHAgLyBwUGFyYW0udykgOworKyAgdmVjMyBoID0gMC41IC0gYWJzKHgpIDsKKysKKysgIHZlYzMgc3ggPSB2ZWMzKGxlc3NUaGFuKHgsRC54eHgpKSAqMi4gLTEuOworKyAgdmVjMyBzaCA9IHZlYzMobGVzc1RoYW4oaCxELnh4eCkpOworKworKyAgdmVjMyBhMCA9IHggKyBzeCpzaDsKKysgIHZlYzIgcDAgPSB2ZWMyKGEwLngsaC54KTsKKysgIHZlYzIgcDEgPSB2ZWMyKGEwLnksaC55KTsKKysgIHZlYzIgcDIgPSB2ZWMyKGEwLnosaC56KTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyNlbmRpZgorKworKyAgdmVjMyBnID0gMi4wICogdmVjMyggZG90KHAwLCB4MCksIGRvdChwMSwgeDEpLCBkb3QocDIsIHgyKSApOworKyNlbHNlCisrLy8gTiBwb2ludHMgYXJvdW5kIGEgdW5pdCBjaXJjbGUuCisrICB2ZWMzIHBoaSA9IEQueiAqIG1vZChwLHBQYXJhbS53KSAvcFBhcmFtLncgOworKyAgdmVjNCBhMCA9IHNpbihwaGkueHh5eStELnh5eHkpOworKyAgdmVjMiBhMSA9IHNpbihwaGkuenogK0QueHkpOworKyAgdmVjMyBnID0gdmVjMyggZG90KGEwLnh5LCB4MCksIGRvdChhMC56dywgeDEpLCBkb3QoYTEueHksIHgyKSApOworKyNlbmRpZgorKy8vIG1peAorKyAgdmVjMyBtID0gbWF4KDAuNSAtIHZlYzMoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSksIDAuKTsKKysgIG0gPSBtKm0gOworKyAgcmV0dXJuIDEuNjY2NjYqIDcwLipkb3QobSptLCBnKTsKKysgIH0KKysKKytmbG9hdCBzaW1wbGV4Tm9pc2UzKHZlYzMgdikKKysgIHsKKysgIGNvbnN0IHZlYzIgQyA9IHZlYzIoMS4vNi4gLCAxLi8zLiApIDsKKysgIGNvbnN0IHZlYzQgRCA9IHZlYzQoMC4sIDAuNSwgMS4wLCAyLjApOworKworKy8vIEZpcnN0IGNvcm5lcgorKyAgdmVjMyBpID0gZmxvb3IodiArIGRvdCh2LCBDLnl5eSkgKTsKKysgIHZlYzMgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eCkgOworKyAgCisrLy8gT3RoZXIgY29ybmVycworKyNpZmRlZiBDT0xMQVBTRV9TT1JUTkVUCisrICB2ZWMzIGcgPSB2ZWMzKCBncmVhdGVyVGhhbiggeDAueHl6LCB4MC55engpICk7CisrICB2ZWMzIGwgPSB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB4MC54eXosIHgwLnl6eCkgKTsKKysKKysgIHZlYzMgaTEgPSBnLnh5eiAqIGwuenh5OworKyAgdmVjMyBpMiA9IG1heCggZy54eXosIGwuenh5KTsKKysjZWxzZQorKy8vIEtlZXBpbmcgdGhpcyBjbGVhbiAtIGxldCB0aGUgY29tcGlsZXIgb3B0aW1pemUuCisrICB2ZWMzIHExOworKyAgcTEueCA9IG1heCh4MC54LCB4MC55KTsKKysgIHExLnkgPSBtaW4oeDAueCwgeDAueSk7CisrICBxMS56ID0geDAuejsKKysKKysgIHZlYzMgcTI7CisrICBxMi54ID0gbWF4KHExLngscTEueik7CisrICBxMi56ID0gbWluKHExLngscTEueik7CisrICBxMi55ID0gcTEueTsKKysKKysgIHZlYzMgcTM7CisrICBxMy55ID0gbWF4KHEyLnksIHEyLnopOworKyAgcTMueiA9IG1pbihxMi55LCBxMi56KTsKKysgIHEzLnggPSBxMi54OworKworKyAgdmVjMyBpMSA9IHZlYzMoZXF1YWwocTMueHh4LCB4MCkpOworKyAgdmVjMyBpMiA9IGkxICsgdmVjMyhlcXVhbChxMy55eXksIHgwKSk7CisrI2VuZGlmCisrCisrICAgLy8geDAgPSB4MCAtIDAuICsgMC4gKiBDCisrICB2ZWMzIHgxID0geDAgLSBpMSArIDEuICogQy54eHg7CisrICB2ZWMzIHgyID0geDAgLSBpMiArIDIuICogQy54eHg7CisrICB2ZWMzIHgzID0geDAgLSAxLiArIDMuICogQy54eHg7CisrCisrLy8gUGVybXV0YXRpb25zCisrICBpID0gbW9kKGksIHBQYXJhbS54ICk7CisrICB2ZWM0IHAgPSBwZXJtdXRlKCBwZXJtdXRlKCBwZXJtdXRlKAorKyAgICAgICAgICAgICBpLnogKyB2ZWM0KDAuLCBpMS56LCBpMi56LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnkgKyB2ZWM0KDAuLCBpMS55LCBpMi55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWM0KDAuLCBpMS54LCBpMi54LCAxLiApLCBwUGFyYW0ueHl6KTsKKysKKysvLyBHcmFkaWVudHMKKysvLyAoIE4qTiBwb2ludHMgdW5pZm9ybWx5IG92ZXIgYSBzcXVhcmUsIG1hcHBlZCBvbnRvIGEgb2N0b2hlZHJvbi4pCisrICBmbG9hdCBuXyA9IDEuMC9wUGFyYW0udyA7CisrICB2ZWMzIG5zID0gbl8gKiBELnd5eiAtIEQueHp4IDsKKysKKysgIHZlYzQgaiA9IHAgLSBwUGFyYW0udypwUGFyYW0udypmbG9vcihwICogbnMueiAqbnMueik7IC8vIG1vZChwLE4qTikKKysKKysgIHZlYzQgeF8gPSBmbG9vcihqICogbnMueikgOworKyAgdmVjNCB5XyA9IGZsb29yKGogLSBwUGFyYW0udyAqIHhfICkgOyAvLyBtb2QoaixOKQorKworKyAgdmVjNCB4ID0geF8gKm5zLnggKyBucy55eXl5OworKyAgdmVjNCB5ID0geV8gKm5zLnggKyBucy55eXl5OworKyAgdmVjNCBoID0gMS4gLSBhYnMoeCkgLSBhYnMoeSk7CisrCisrICB2ZWM0IGIwID0gdmVjNCggeC54eSwgeS54eSApOworKyAgdmVjNCBiMSA9IHZlYzQoIHguencsIHkuencgKTsKKysKKysgIHZlYzQgczAgPSB2ZWM0KGxlc3NUaGFuKGIwLEQueHh4eCkpICoyLiAtMS47CisrICB2ZWM0IHMxID0gdmVjNChsZXNzVGhhbihiMSxELnh4eHgpKSAqMi4gLTEuOworKyAgdmVjNCBzaCA9IHZlYzQobGVzc1RoYW4oaCwgRC54eHh4KSk7CisrCisrICB2ZWM0IGEwID0gYjAueHp5dyArIHMwLnh6eXcqc2gueHh5eSA7CisrICB2ZWM0IGExID0gYjEueHp5dyArIHMxLnh6eXcqc2guenp3dyA7CisrCisrICB2ZWMzIHAwID0gdmVjMyhhMC54eSxoLngpOworKyAgdmVjMyBwMSA9IHZlYzMoYTAuencsaC55KTsKKysgIHZlYzMgcDIgPSB2ZWMzKGExLnh5LGgueik7CisrICB2ZWMzIHAzID0gdmVjMyhhMS56dyxoLncpOworKworKyNpZmRlZiBOT1JNQUxJU0VfR1JBRElFTlRTCisrICBwMCAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMCxwMCkpOworKyAgcDEgKj0gdGF5bG9ySW52U3FydChkb3QocDEscDEpKTsKKysgIHAyICo9IHRheWxvckludlNxcnQoZG90KHAyLHAyKSk7CisrICBwMyAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMyxwMykpOworKyNlbmRpZgorKworKy8vIE1peAorKyAgdmVjNCBtID0gbWF4KDAuNiAtIHZlYzQoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSwgZG90KHgzLHgzKSksIDAuKTsKKysgIG0gPSBtICogbTsKKysvL3VzZWQgdG8gYmUgNjQuCisrICByZXR1cm4gNDguMCAqIGRvdCggbSptLCB2ZWM0KCBkb3QocDAseDApLCBkb3QocDEseDEpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHAyLHgyKSwgZG90KHAzLHgzKSApICk7CisrICB9CisrCisrdmVjNCBncmFkNChmbG9hdCBqLCB2ZWM0IGlwKQorKyAgeworKyAgY29uc3QgdmVjNCBvbmVzID0gdmVjNCgxLiwxLiwxLiwtMS4pOworKyAgdmVjNCBwLHM7CisrCisrICBwLnh5eiA9IGZsb29yKCBmcmFjdCAodmVjMyhqKSAqIGlwLnh5eikgKnBQYXJhbS53KSAqIGlwLnogLTEuMDsKKysgIHAudyA9IDEuNSAtIGRvdChhYnMocC54eXopLCBvbmVzLnh5eik7CisrICBzID0gdmVjNChsZXNzVGhhbihwLHZlYzQoMC4pKSk7CisrICBwLnh5eiA9IHAueHl6ICsgKHMueHl6KjIuLTEuKSAqIHMud3d3OworKworKyAgcmV0dXJuIHA7CisrICB9CisrCisrZmxvYXQgc2ltcGxleE5vaXNlNCh2ZWM0IHYpCisrICB7CisrICBjb25zdCB2ZWMyIEMgPSB2ZWMyKCAwLjEzODE5NjYwMTEyNTAxMDUwNCwgLy8gKDUgLSBzcXJ0KDUpKS8yMCBHNAorKyAgICAgICAgICAgICAgICAgICAgICAgIDAuMzA5MDE2OTk0Mzc0OTQ3NDUxKTsgLy8gKHNxcnQoNSkgLSAxKS80IEY0CisrLy8gRmlyc3QgY29ybmVyCisrICB2ZWM0IGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXl5eSkgKTsKKysgIHZlYzQgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eHgpOworKworKy8vIE90aGVyIGNvcm5lcnMKKysKKysvLyBGb3JjZSBleGlzdGFuY2Ugb2Ygc3RyaWN0IHRvdGFsIG9yZGVyaW5nIGluIHNvcnQuCisrICB2ZWM0IHEwID0gZmxvb3IoeDAgKiAxMDI0LjApICsgdmVjNCggMC4sIDEuLzQuLCAyLi80LiAsIDMuLzQuKTsKKysgIHZlYzQgcTE7CisrICBxMS54eSA9IG1heChxMC54eSxxMC56dyk7IC8vIHg6eiB5OncKKysgIHExLnp3ID0gbWluKHEwLnh5LHEwLnp3KTsKKysKKysgIHZlYzQgcTI7CisrICBxMi54eiA9IG1heChxMS54eixxMS55dyk7IC8vIHg6eSB6OncKKysgIHEyLnl3ID0gbWluKHExLnh6LHExLnl3KTsKKysgIAorKyAgdmVjNCBxMzsKKysgIHEzLnkgPSBtYXgocTIueSxxMi56KTsgLy8geTp6CisrICBxMy56ID0gbWluKHEyLnkscTIueik7CisrICBxMy54dyA9IHEyLnh3OworKworKyAgdmVjNCBpMSA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy54eHh4LCBxMCkpOworKyAgdmVjNCBpMiA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy55eXl5LCBxMCkpOworKyAgdmVjNCBpMyA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy56enp6LCBxMCkpOworKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjNCB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHh4eDsKKysgIHZlYzQgeDIgPSB4MCAtIGkyICsgMi4gKiBDLnh4eHg7CisrICB2ZWM0IHgzID0geDAgLSBpMyArIDMuICogQy54eHh4OworKyAgdmVjNCB4NCA9IHgwIC0gMS4gKyA0LiAqIEMueHh4eDsKKysKKysvLyBQZXJtdXRhdGlvbnMKKysgIGkgPSBtb2QoaSwgcFBhcmFtLnggKTsKKysgIGZsb2F0IGowID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSAoCisrICAgICAgICAgICAgICBpLncsIHBQYXJhbS54eXopICsgaS56LCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgICsgaS55LCBwUGFyYW0ueHl6KSArIGkueCwgcFBhcmFtLnh5eik7CisrICB2ZWM0IGoxID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSAoCisrICAgICAgICAgICAgIGkudyArIHZlYzQoaTEudywgaTIudywgaTMudywgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS56ICsgdmVjNChpMS56LCBpMi56LCBpMy56LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnkgKyB2ZWM0KGkxLnksIGkyLnksIGkzLnksIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueCArIHZlYzQoaTEueCwgaTIueCwgaTMueCwgMS4gKSwgcFBhcmFtLnh5eik7CisrLy8gR3JhZGllbnRzCisrLy8gKCBOKk4qTiBwb2ludHMgdW5pZm9ybWx5IG92ZXIgYSBjdWJlLCBtYXBwZWQgb250byBhIDQtb2N0b2hlZHJvbi4pCisrICB2ZWM0IGlwID0gcFBhcmFtIDsKKysgIGlwLnh5ICo9IHBQYXJhbS53IDsKKysgIGlwLnggKj0gcFBhcmFtLncgOworKyAgaXAgPSB2ZWM0KDEuLDEuLDEuLDIuKSAvIGlwIDsKKysKKysgIHZlYzQgcDAgPSBncmFkNChqMCwgaXApOworKyAgdmVjNCBwMSA9IGdyYWQ0KGoxLngsIGlwKTsKKysgIHZlYzQgcDIgPSBncmFkNChqMS55LCBpcCk7CisrICB2ZWM0IHAzID0gZ3JhZDQoajEueiwgaXApOworKyAgdmVjNCBwNCA9IGdyYWQ0KGoxLncsIGlwKTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyAgcDMgKj0gdGF5bG9ySW52U3FydChkb3QocDMscDMpKTsKKysgIHA0ICo9IHRheWxvckludlNxcnQoZG90KHA0LHA0KSk7CisrI2VuZGlmCisrCisrLy8gTWl4CisrICB2ZWMzIG0wID0gbWF4KDAuNiAtIHZlYzMoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSksIDAuKTsKKysgIHZlYzIgbTEgPSBtYXgoMC42IC0gdmVjMihkb3QoeDMseDMpLCBkb3QoeDQseDQpICksIDAuKTsKKysgIG0wID0gbTAgKiBtMDsKKysgIG0xID0gbTEgKiBtMTsKKysgIHJldHVybiAzMi4gKiAoIGRvdChtMCptMCwgdmVjMyggZG90KCBwMCwgeDAgKSwgZG90KCBwMSwgeDEgKSwgZG90KCBwMiwgeDIgKSkpCisrICAgICAgICAgICAgICAgKyBkb3QobTEqbTEsIHZlYzIoIGRvdCggcDMsIHgzICksIGRvdCggcDQsIHg0ICkgKSApICkgOworKworKyAgfQorKworKworKworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NraW5uaW5nLnZlcnQgYi9zcmMvZ2xzbC9za2lubmluZy52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjg5NzBlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvc2tpbm5pbmcudmVydAorQEAgLTAsMCArMSwyNCBAQAorKy8vIFZlcnRleCB3ZWlnaHRpbmcvYmxlbmRpbiBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrLy8gNCBOb3YgMjAwOAorKworK3VuaWZvcm0gbWF0NCBtYXQwLCBtYXQxOworK2F0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7CisrCisrdm9pZCBtYWluKCkgCisreworKyAgIC8vIHNpbXBsZSBkaWZmdXNlIHNoYWRpbmcKKysgICAvLyBOb3RlIHRoYXQgd2Ugc2hvdWxkIHJlYWxseSB0cmFuc2Zvcm0gdGhlIG5vcm1hbCB2ZWN0b3IgYWxvbmcgd2l0aAorKyAgIC8vIHRoZSBwb3N0aW9uIGJlbG93Li4uIHNvbWVkYXkuCisrICAgdmVjMyBsaWdodFZlYyA9IHZlYzMoMCwgMCwgMSk7CisrICAgdmVjMyBub3JtID0gZ2xfTm9ybWFsTWF0cml4ICogZ2xfTm9ybWFsOworKyAgIGZsb2F0IGRvdCA9IDAuMiArIG1heCgwLjAsIGRvdChub3JtLCBsaWdodFZlYykpOworKyAgIGdsX0Zyb250Q29sb3IgPSB2ZWM0KGRvdCk7CisrCisrICAgLy8gY29tcHV0ZSBzdW0gb2Ygd2VpZ2h0ZWQgdHJhbnNmb3JtYXRpb25zCisrICAgdmVjNCBwb3MwID0gbWF0MCAqIGdsX1ZlcnRleDsKKysgICB2ZWM0IHBvczEgPSBtYXQxICogZ2xfVmVydGV4OworKyAgIHZlYzQgcG9zID0gbWl4KHBvczAsIHBvczEsIHdlaWdodCk7CisrCisrICAgZ2xfUG9zaXRpb24gPSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICogcG9zOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjA4Mzk0MzYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcKK0BAIC0wLDAgKzEsMTkgQEAKKysvLyBNdWx0aS10ZXh0dXJlIGZyYWdtZW50IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysvLyBDb21wb3NpdGUgc2Vjb25kIHRleHR1cmUgb3ZlciBmaXJzdC4KKysvLyBXZSdyZSBhc3N1bWluZyB0aGUgMm5kIHRleHR1cmUgaGFzIGEgbWVhbmluZ2Z1bCBhbHBoYSBjaGFubmVsLgorKworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDE7CisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MjsKKyt1bmlmb3JtIHZlYzQgVW5pVjE7CisrdW5pZm9ybSB2ZWM0IFVuaVYyOworKworK3ZvaWQgbWFpbigpCisreworKyAgIHZlYzQgdDM7CisrICAgdmVjNCB0MSA9IHRleHR1cmUyRCh0ZXgxLCBnbF9UZXhDb29yZFswXS54eSk7CisrICAgdmVjNCB0MiA9IHRleHR1cmUyRCh0ZXgyLCBnbF9UZXhDb29yZFsxXS54eSk7CisrICAgdDMgPSBtaXgodDEsIHQyLCB0Mi53KTsKKysgICBnbF9GcmFnQ29sb3IgPSB0MyArIFVuaVYxICsgVW5pVjI7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uY2VmNTBkYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydAorQEAgLTAsMCArMSwxNCBAQAorKy8vIE11bHRpLXRleHR1cmUgdmVydGV4IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysKKythdHRyaWJ1dGUgdmVjNCBUZXhDb29yZDAsIFRleENvb3JkMTsKKythdHRyaWJ1dGUgdmVjNCBWZXJ0Q29vcmQ7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgZ2xfVGV4Q29vcmRbMF0gPSBUZXhDb29yZDA7CisrICAgZ2xfVGV4Q29vcmRbMV0gPSBUZXhDb29yZDE7CisrICAgLy8gbm90ZTogbWF5IHVzZSBnbF9WZXJ0ZXggb3IgVmVydENvb3JkIGhlcmUgZm9yIHRlc3Rpbmc6CisrICAgZ2xfUG9zaXRpb24gPSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICogZ2xfVmVydGV4OworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjBkZjAzMTkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcKK0BAIC0wLDAgKzEsMTcgQEAKKysvLyBNdWx0aS10ZXh0dXJlIGZyYWdtZW50IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysvLyBDb21wb3NpdGUgc2Vjb25kIHRleHR1cmUgb3ZlciBmaXJzdC4KKysvLyBXZSdyZSBhc3N1bWluZyB0aGUgMm5kIHRleHR1cmUgaGFzIGEgbWVhbmluZ2Z1bCBhbHBoYSBjaGFubmVsLgorKworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDE7CisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MjsKKyt1bmlmb3JtIHZlYzQgVW5pVjE7CisrdW5pZm9ybSB2ZWM0IFVuaVYyOworKworK3ZvaWQgbWFpbigpCisreworKyAgIHZlYzQgdDEgPSB0ZXh0dXJlMkQodGV4MSwgZ2xfVGV4Q29vcmRbMF0ueHkpOworKyAgIHZlYzQgdDIgPSB0ZXh0dXJlMkQodGV4MiwgZ2xfVGV4Q29vcmRbMV0ueHkpOworKyAgIGdsX0ZyYWdDb2xvciA9IHQxICsgdDIgKyBVbmlWMSArIFVuaVYyOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNlZjUwZGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK0BAIC0wLDAgKzEsMTQgQEAKKysvLyBNdWx0aS10ZXh0dXJlIHZlcnRleCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrCisrYXR0cmlidXRlIHZlYzQgVGV4Q29vcmQwLCBUZXhDb29yZDE7CisrYXR0cmlidXRlIHZlYzQgVmVydENvb3JkOworKworK3ZvaWQgbWFpbigpCisreworKyAgIGdsX1RleENvb3JkWzBdID0gVGV4Q29vcmQwOworKyAgIGdsX1RleENvb3JkWzFdID0gVGV4Q29vcmQxOworKyAgIC8vIG5vdGU6IG1heSB1c2UgZ2xfVmVydGV4IG9yIFZlcnRDb29yZCBoZXJlIGZvciB0ZXN0aW5nOgorKyAgIGdsX1Bvc2l0aW9uID0gZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCAqIGdsX1ZlcnRleDsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgYi9zcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJjN2FlNGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCitAQCAtMCwwICsxLDggQEAKKyt2b2lkIG1haW4oKSB7CisrICAgZ2xfUG9zaXRpb24gPSBnbF9WZXJ0ZXg7CisrICAgdmVjNCBzdW0gPSB2ZWM0KDApOworKyAgIGZvciAoaW50IGkgPSAxOyBpICE9IDI7IGkgKz0gMikgeworKyAgICAgIHN1bSArPSB2ZWM0KDAuMSwgMC4xLCAwLjEsIDAuMSk7CisrICAgfQorKyAgIGdsX0Zyb250Q29sb3IgPSBzdW07CisrfQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZhZjEyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDM2ODI5YThkN2FkMjg4ODUxNWZiZWU5NWMyYTcwYjNkNjM2ZDc1MzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCA5IEp1bCAyMDE0IDE0OjMwOjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi85XSBDb3JyZWN0bHkgaW1wbGVtZW50IHdpdGggQUNfV0lUSChnbHV0KSBzbyB0aGF0CisgLS13aXRob3V0LWdsdXQgd29ya3MuCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI2ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjNGVlMTJiLi45NDQ1NDI0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NywyMSArNjcsMjUgQEAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xfQ0ZMQUdTIgorIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xfTElCUyIKKyAKKyBkbmwgQ2hlY2sgZm9yIEdMVVQKKy1HTFVUX0NGTEFHUz0iIgorLUdMVVRfTElCUz0tbGdsdXQKKy1nbHV0X2VuYWJsZWQ9eWVzCisrZ2x1dF9lbmFibGVkPW5vCisgQUNfQVJHX1dJVEgoW2dsdXRdLAorIAlbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbHV0PURJUl0sCisgCQkJW2dsdXQgaW5zdGFsbCBkaXJlY3RvcnldKV0sCisgCVtHTFVUX0NGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlIgorLQkgR0xVVF9MSUJTPSItTCR3aXRodmFsL2xpYiAtbGdsdXQiXSkKKy1BQ19DSEVDS19IRUFERVIoW0dML2dsdXQuaF0sCistCQlbXSwKKy0JCVtnbHV0X2VuYWJsZWQ9bm9dKQorLUFDX0NIRUNLX0xJQihbZ2x1dF0sCistCQlbZ2x1dEluaXRdLAorLQkJW10sCistCQlbZ2x1dF9lbmFibGVkPW5vXSkKKysJIEdMVVRfTElCUz0iLUwkd2l0aHZhbC9saWIgLWxnbHV0Il0sCisrCVtHTFVUX0NGTEFHUz0iIgorKwkgR0xVVF9MSUJTPSItbGdsdXQiXQorKyAgICAgICAgKQorK0FTX0lGKFt0ZXN0ICJ4JHdpdGhfZ2x1dCIgIT0geG5vXSwKKysgICAgICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHV0LmhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgICAgICAgICBbZ2x1dF9lbmFibGVkPW5vXSkKKysgICAgICAgQUNfQ0hFQ0tfTElCKFtnbHV0XSwKKysgICAgICAgICAgICAgICAgICAgIFtnbHV0SW5pdF0sCisrICAgICAgICAgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICAgICAgICAgIFtnbHV0X2VuYWJsZWQ9bm9dKQorKyAgICAgICBnbHV0X2VuYWJsZWQ9eWVzCisrXSkKKyAKKyBkbmwgQ2hlY2sgZm9yIEZyZWVHTFVUIDIuNiBvciBsYXRlcgorIEFDX0VHUkVQX0hFQURFUihbZ2x1dEluaXRDb250ZXh0UHJvZmlsZV0sCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNThjMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCkBAIC0wLDAgKzEsNDI0IEBACitGcm9tIGIyNWU5YzY3NWNmNTYwYjhiMDM3ZGM4NTVjNmIzYjFkMDk5NTc4NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDkgSnVsIDIwMTQgMTQ6MjM6NDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzldIGNvbmZpZ3VyZTogQWxsb3cgdG8gZGlzYWJsZSBkZW1vcyB3aGljaCByZXF1aXJlIEdMRVcgb3IKKyBHTFUKKworKiBpbiBzb21lIHN5c3RlbXMgd2l0aG91dCBYMTEgc3VwcG9ydCB3ZSBkb24ndCBoYXZlIEdMRVcsIGJ1dAorICBtZXNhLWRlbW9zIGFyZSBzdGlsbCB1c2VmdWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgIHwgNDkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyBzcmMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8IDE0ICsrKysrKy0tLQorIHNyYy9kZW1vcy9NYWtlZmlsZS5hbSAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy9lZ2wvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgIDggKysrLS0KKyBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDQ0ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gfCAzMyArKysrKysrKysrLS0tLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDk0NDU0MjQuLmJjNGM4ZDEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTkzLDI1ICs5Myw0NCBAQCBBQ19FR1JFUF9IRUFERVIoW2dsdXRJbml0Q29udGV4dFByb2ZpbGVdLAorIAkJW0FDX0RFRklORShIQVZFX0ZSRUVHTFVUKV0sCisgCQlbXSkKKyAKKy1kbmwgQ2hlY2sgZm9yIEdMRVcKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHTEVXLCBbZ2xldyA+PSAxLjUuNF0pCistREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xFV19DRkxBR1MiCistREVNT19MSUJTPSIkREVNT19MSUJTICRHTEVXX0xJQlMiCisrQUNfQVJHX0VOQUJMRShbZ2xld10sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2xld10sCisrICAgICAgICBbYnVpbGQgZGVtb3Mgd2hpY2ggcmVxdWlyZSBnbGV3IEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgIFtlbmFibGVfZ2xldz0iJGVuYWJsZXZhbCJdLAorKyAgICBbZW5hYmxlX2dsZXc9eWVzXQorKykKKysKKytpZiB0ZXN0ICJ4JGVuYWJsZV9nbGV3IiA9IHh5ZXM7IHRoZW4KKysgICAgZG5sIENoZWNrIGZvciBHTEVXCisrICAgIFBLR19DSEVDS19NT0RVTEVTKEdMRVcsIFtnbGV3ID49IDEuNS40XSwgW2dsZXdfZW5hYmxlZD15ZXNdLCBbZ2xld19lbmFibGVkPW5vXSkKKysgICAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xFV19DRkxBR1MiCisrICAgIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xFV19MSUJTIgorK2ZpCisgCisgIyBMSUJTIHdhcyBzZXQgYnkgQUNfQ0hFQ0tfTElCIGFib3ZlCisgTElCUz0iIgorIAorLVBLR19DSEVDS19NT0RVTEVTKEdMVSwgW2dsdV0sIFtdLAorLQkJICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHUuaF0sCistCQkJCSAgIFtdLAorLQkJICAJCSAgIEFDX01TR19FUlJPUihbR0xVIG5vdCBmb3VuZF0pKQorLQkJICAgQUNfQ0hFQ0tfTElCKFtHTFVdLAorLQkJCQlbZ2x1QmVnaW5DdXJ2ZV0sCistCQkJCVtHTFVfTElCUz0tbEdMVV0sCistCQkJCUFDX01TR19FUlJPUihbR0xVIHJlcXVpcmVkXSkpIF0pCisrQUNfQVJHX0VOQUJMRShbZ2x1XSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbHVdLAorKyAgICAgICAgW2J1aWxkIGRlbW9zIHdoaWNoIHJlcXVpcmUgZ2x1IEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgIFtlbmFibGVfZ2x1PSIkZW5hYmxldmFsIl0sCisrICAgIFtlbmFibGVfZ2x1PXllc10KKyspCisgCistREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xVX0NGTEFHUyIKKy1ERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMVV9MSUJTIgorK2lmIHRlc3QgIngkZW5hYmxlX2dsdSIgPSB4eWVzOyB0aGVuCisrICAgIFBLR19DSEVDS19NT0RVTEVTKEdMVSwgW2dsdV0sIFtnbHVfZW5hYmxlZD15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVIoW0dML2dsdS5oXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtHTFUgbm90IGZvdW5kXSkpCisrICAgICAgICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihbR0xVXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHVCZWdpbkN1cnZlXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtHTFVfTElCUz0tbEdMVQorKwkJCQkgICAgZ2x1X2VuYWJsZWQ9eWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbR0xVIHJlcXVpcmVkXSkpIF0pCisrCisrICAgIERFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMVV9DRkxBR1MiCisrICAgIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xVX0xJQlMiCisrZmkKKyAKKyBBQ19BUkdfRU5BQkxFKFtlZ2xdLAorICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVnbF0sCitAQCAtMzA0LDYgKzMyMyw4IEBAIEFDX1NVQlNUKFtXQVlMQU5EX0NGTEFHU10pCisgQUNfU1VCU1QoW1dBWUxBTkRfTElCU10pCisgCisgCisrQU1fQ09ORElUSU9OQUwoSEFWRV9HTFUsIHRlc3QgIngkZ2x1X2VuYWJsZWQiID0gInh5ZXMiKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfR0xFVywgdGVzdCAieCRnbGV3X2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfRUdMLCB0ZXN0ICJ4JGVnbF9lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMRVNWMSwgdGVzdCAieCRnbGVzdjFfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjIsIHRlc3QgIngkZ2xlc3YyX2VuYWJsZWQiID0gInh5ZXMiKQorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMTY0N2Q2NC4uNzU0YzQ3YyAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMjMsMTQgKzIzLDE4IEBACisgIyAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorIAorK2lmIEhBVkVfR0xFVworK1VUSUwgPSB1dGlsCisrZW5kaWYKKysKKyBTVUJESVJTID0gXAorLQl1dGlsIFwKKysJJChVVElMKSBcCisgCWRhdGEgXAorIAlkZW1vcyBcCisgCWVnbCBcCisgCWZwIFwKKyAJZnBnbHNsIFwKKyAJZ2xzbCBcCistICAgICAgICBncyBcCisrCWdzIFwKKyAJb2Jqdmlld2VyIFwKKyAJb3NkZW1vcyBcCisgCXBlcmYgXAorQEAgLTQwLDggKzM5LDEyIEBAIFNVQkRJUlMgPSBcCisgCXNsYW5nIFwKKyAJdGVzdHMgXAorIAl0b29scyBcCistCXRyaXZpYWwgXAorLQl2cCBcCistCXZwZ2xzbCBcCisgCXdnbCBcCisgCXhkZW1vcworKworK2lmIEhBVkVfR0xFVworK1NVQkRJUlMgKz0gXAorKwl2cCBcCisrCXZwZ2xzbCBcCisrCXRyaXZpYWwKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9kZW1vcy9NYWtlZmlsZS5hbSBiL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQoraW5kZXggNDE2MDNmYS4uYWIxZTNhYiAxMDA2NDQKKy0tLSBhL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2RlbW9zL01ha2VmaWxlLmFtCitAQCAtMzAsOTEgKzMwLDEwMCBAQCBBTV9MREZMQUdTID0gXAorIAkkKERFTU9fTElCUykgXAorIAkkKEdMVVRfTElCUykKKyAKKytiaW5fUFJPR1JBTVMgPQorKworIGlmIEhBVkVfR0xVVAorLWJpbl9QUk9HUkFNUyA9IFwKKytpZiBIQVZFX0dMRVcKKytiaW5fUFJPR1JBTVMgKz0gXAorIAlhcmJmcGxpZ2h0IFwKKyAJYXJiZnNsaWdodCBcCisgCWFyYm9jY2x1ZGUgXAorIAlhcmJvY2NsdWRlMiBcCistCWJvdW5jZSBcCistCWNsZWFyc3BkIFwKKyAJY29weXBpeCBcCisgCWN1YmVtYXAgXAorIAljdWJlcmVuZGVyIFwKKyAJZGlub3NoYWRlIFwKKy0JZGlzc29sdmUgXAorLQlkcmF3cGl4IFwKKyAJZW5naW5lIFwKKyAJZmJvX2ZpcmVjdWJlIFwKKyAJZmJvdGV4dHVyZSBcCistCWZpcmUgXAorIAlmb2djb29yZCBcCisgCWZwbGlnaHQgXAorIAlmc2xpZ2h0IFwKKysJZ2xvc3MgXAorKwlpc29zdXJmIFwKKysJbXVsdGlhcmIgXAorKwlwYWx0ZXggXAorKwlwb2ludGJsYXN0IFwKKysJcHJvanRleCBcCisrCXNoYWRvd3RleCBcCisrCXNwcml0ZWJsYXN0IFwKKysJc3RleDNkIFwKKysJdGV4dHVyZXMgXAorKwl2YW9fZGVtbyBcCisrCXdpbnBvcworKworK2NvcHlwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytjdWJlbWFwX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrY3ViZXJlbmRlcl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2VuZ2luZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2Zib19maXJlY3ViZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2dsb3NzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisraXNvc3VyZl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK211bHRpYXJiX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrcHJvanRleF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK3RleHR1cmVzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrd2lucG9zX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZW5kaWYKKysKKytpZiBIQVZFX0dMVQorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWJvdW5jZSBcCisrCWNsZWFyc3BkIFwKKysJZGlzc29sdmUgXAorKwlkcmF3cGl4IFwKKysJZmlyZSBcCisgCWdhbW1hIFwKKyAJZ2VhcmJveCBcCisgCWdlYXJzIFwKKyAJZ2VhcnRyYWluIFwKKyAJZ2xpbmZvIFwKKy0JZ2xvc3MgXAorIAlnbHRlc3RwZXJmIFwKKyAJaXBlcnMgXAorLQlpc29zdXJmIFwKKyAJbG9kYmlhcyBcCisgCW1vcnBoM2QgXAorLQltdWx0aWFyYiBcCistCXBhbHRleCBcCisgCXBpeGVsdGVzdCBcCistCXBvaW50Ymxhc3QgXAorLQlwcm9qdGV4IFwKKyAJcmF5IFwKKyAJcmVhZHBpeCBcCisgCXJlZmxlY3QgXAorIAlyZW5vcm1hbCBcCistCXNoYWRvd3RleCBcCisgCXNpbmdsZWJ1ZmZlciBcCisgCXNwZWN0ZXggXAorLQlzcHJpdGVibGFzdCBcCistCXN0ZXgzZCBcCisgCXRlYXBvdCBcCisgCXRlcnJhaW4gXAorIAl0ZXNzZGVtbyBcCisgCXRleGN5bCBcCisgCXRleGVudiBcCistCXRleHR1cmVzIFwKKyAJdHJpc3BkIFwKKyAJdHVubmVsMiBcCistCXR1bm5lbCBcCistCXZhb19kZW1vIFwKKy0Jd2lucG9zCistZW5kaWYKKysJdHVubmVsCisgCisgdHVubmVsX1NPVVJDRVMgPSBcCisgCXR1bm5lbC5jIFwKKyAJdHVubmVsZGF0LmgKKyAKKy1jb3B5cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistY3ViZW1hcF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWN1YmVyZW5kZXJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1kcmF3cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgZGlzc29sdmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1lbmdpbmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1mYm9fZmlyZWN1YmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytkcmF3cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgZmlyZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWdsb3NzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgaXBlcnNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1pc29zdXJmX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgbG9kYmlhc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLW11bHRpYXJiX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistcHJvanRleF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHJlYWRwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyByZWZsZWN0X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdGVhcG90X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdGV4Y3lsX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistdGV4dHVyZXNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0dW5uZWxfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0dW5uZWwyX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistd2lucG9zX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZW5kaWYKKytlbmRpZgorIAorIEVYVFJBX0RJU1QgPSBcCisgCVJFQURNRQorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL01ha2VmaWxlLmFtCitpbmRleCBkNjRhNDllLi40ZmUxY2E4IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9NYWtlZmlsZS5hbQorQEAgLTI0LDggKzI0LDEyIEBACisgCisgU1VCRElSUyA9IFwKKyAJZWdsdXQgXAorLQlvcGVuZ2wgXAorLQlvcGVudmcgXAorIAlvcGVuZ2xlczEgXAorIAlvcGVuZ2xlczIgXAorIAlvZXNfdmcKKysKKytpZiBIQVZFX0dMVQorK1NVQkRJUlMgKz0gXAorKwlvcGVuZ2wgXAorKwlvcGVudmcKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK2luZGV4IDdhOTgyOGQuLjM0NTVlNzUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK0BAIC0zNiwyOCArMzYsNDMgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChFR0xfTElCUykgXAorIAktbG0KKyAKKytub2luc3RfUFJPR1JBTVMgPQorKworIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjEKKy1ub2luc3RfUFJPR1JBTVMgPSBcCistCWJpbmR0ZXggXAorLQljbGVhciBcCisrbm9pbnN0X1BST0dSQU1TICs9IFwKKyAJZHJhd3RleF9zY3JlZW4gXAorKwlnZWFyc19zY3JlZW4gXAorKwl0b3J1c19zY3JlZW4gXAorKwl0cmlfc2NyZWVuCisrCisrZHJhd3RleF9zY3JlZW5fU09VUkNFUyA9IGRyYXd0ZXguYworK2dlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZ2VhcnMuYworK3RvcnVzX3NjcmVlbl9TT1VSQ0VTID0gdG9ydXMuYworK3RyaV9zY3JlZW5fU09VUkNFUyA9IHRyaS5jCisrCisrZHJhd3RleF9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKytnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyt0b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyt0cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrCisraWYgSEFWRV9YMTEKKytub2luc3RfUFJPR1JBTVMgKz0gXAorKwljbGVhcgorKworK2Jpbl9QUk9HUkFNUyA9IFwKKysJYmluZHRleCBcCisgCWRyYXd0ZXhfeDExIFwKKyAJZWdsZmJkZXYgXAorIAllczFfaW5mbyBcCistCWdlYXJzX3NjcmVlbiBcCisgCWdlYXJzX3gxMSBcCisgCW1zYWEgXAorIAlwYnVmZmVyXAorIAlyZW5kZXJfdGV4IFwKKyAJdGV4dHVyZV9mcm9tX3BpeG1hcCBcCistCXRvcnVzX3NjcmVlbiBcCisgCXRvcnVzX3gxMSBcCistCXRyaV9zY3JlZW4gXAorIAl0cmlfeDExIFwKKyAJdHdvX3dpbgorLWVuZGlmCistZW5kaWYKKyAKKyBiaW5kdGV4X0xEQUREID0gJChYMTFfTElCUykKKyBlczFfaW5mb19MREFERCA9ICQoWDExX0xJQlMpCitAQCAtNzEsMjIgKzg2LDE1IEBAIHR3b193aW5fTERBREQgPSAkKFgxMV9MSUJTKQorIGNsZWFyX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhICQoRUdMX0xJQlMpICQoWDExX0xJQlMpCisgY2xlYXJfTERGTEFHUyA9CisgCistZHJhd3RleF9zY3JlZW5fU09VUkNFUyA9IGRyYXd0ZXguYworLWdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZ2VhcnMuYworLXRvcnVzX3NjcmVlbl9TT1VSQ0VTID0gdG9ydXMuYworLXRyaV9zY3JlZW5fU09VUkNFUyA9IHRyaS5jCistCisgZHJhd3RleF94MTFfU09VUkNFUyA9IGRyYXd0ZXguYworIGdlYXJzX3gxMV9TT1VSQ0VTID0gZ2VhcnMuYworIHRvcnVzX3gxMV9TT1VSQ0VTID0gdG9ydXMuYworIHRyaV94MTFfU09VUkNFUyA9IHRyaS5jCisgCistZHJhd3RleF9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy1nZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy10b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy10cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistCisgZHJhd3RleF94MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyBnZWFyc194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyB0b3J1c194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyB0cmlfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisrZW5kaWYKKytlbmRpZgorK2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQoraW5kZXggNDFjMWI4MC4uNzRhZjQ2MCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQorQEAgLTM2LDI2ICszNiwyOSBAQCBBTV9MREZMQUdTID0gXAorIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjIKKyBiaW5fUFJPR1JBTVMgPSBcCistCWVzMl9pbmZvIFwKKy0JZXMyZ2VhcnNfc2NyZWVuIFwKKy0JZXMyZ2VhcnNfeDExIFwKKy0JZXMydHJpCisrCWVzMmdlYXJzX3NjcmVlbgorKworK2VzMmdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2VzMmdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorKworIGlmIEhBVkVfV0FZTEFORAorIGJpbl9QUk9HUkFNUyArPSBlczJnZWFyc193YXlsYW5kCistZW5kaWYKKy1lbmRpZgorLWVuZGlmCisgCistZXMyX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorLWVzMnRyaV9MREFERCA9ICQoWDExX0xJQlMpCisrZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2VzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCisrZW5kaWYKKyAKKy1lczJnZWFyc19zY3JlZW5fU09VUkNFUyA9IGVzMmdlYXJzLmMKKytpZiBIQVZFX1gxMQorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWVzMnRyaSBcCisrCWVzMl9pbmZvIFwKKysJZXMyZ2VhcnNfeDExCisgCisrZXMyX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorIGVzMmdlYXJzX3gxMV9TT1VSQ0VTID0gZXMyZ2VhcnMuYworLQorLWVzMmdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLQorIGVzMmdlYXJzX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorK2VzMnRyaV9MREFERCA9ICQoWDExX0xJQlMpCisrZW5kaWYKKytlbmRpZgorK2VuZGlmCisgCistZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYworLWVzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzdiOTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMjM0IEBACitGcm9tIDVlMTAxMDhkNzZhNTlhYmFjMjFjN2U1NDBiY2ZkMmRkYWNjY2EyY2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogRnJpLCA5IE1heSAyMDE0IDExOjUwOjI0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNC85XSBVc2UgREVNT1NfREFUQV9ESVIgdG8gbG9jYXRlIGRhdGEgZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDk2XQorU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKy0tLQorIHNyYy9nbHNsL2Jlemllci5jICAgICAgICAgICB8ICAyICstCisgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMgIHwgIDQgKystLQorIHNyYy9nbHNsL2JyaWNrLmMgICAgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9idW1wLmMgICAgICAgICAgICAgfCAgNiArKystLS0KKyBzcmMvZ2xzbC9jb252b2x1dGlvbnMuYyAgICAgfCAgMiArLQorIHNyYy9nbHNsL21hbmRlbGJyb3QuYyAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9tdWx0aXRleC5jICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jICAgIHwgIDIgKy0KKyBzcmMvZ2xzbC9za2lubmluZy5jICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvdGV4ZGVtbzEuYyAgICAgICAgIHwgIDggKysrKy0tLS0KKyBzcmMvZ2xzbC90b3liYWxsLmMgICAgICAgICAgfCAgNCArKy0tCisgc3JjL29ianZpZXdlci9vYmp2aWV3LmMgICAgIHwgMTIgKysrKysrLS0tLS0tCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jIHwgIDggKysrKy0tLS0KKyAxMyBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2Jlemllci5jIGIvc3JjL2dsc2wvYmV6aWVyLmMKK2luZGV4IDBiNTZiYzEuLmUwMTYwM2QgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9iZXppZXIuYworKysrIGIvc3JjL2dsc2wvYmV6aWVyLmMKK0BAIC0xMyw3ICsxMyw3IEBACisgI2luY2x1ZGUgImdsdXRfd3JhcC5oIgorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImJlemllci5nZW9tIjsKKytzdGF0aWMgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBERU1PU19EQVRBX0RJUiAiYmV6aWVyLmdlb20iOworIAorIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKKyBzdGF0aWMgR0x1aW50IHZlcnRTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworaW5kZXggZTNiZjI0ZC4uNzY2MmIxZiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jCisrKysgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworQEAgLTYzLDggKzYzLDggQEAgaW5pdF9vcGVuZ2wgKHZvaWQpCisgICAgICBleGl0KDEpOworICAgfSAgICAgCisgCistICB2c2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9WRVJURVhfU0hBREVSLCAiYmxpbmtpbmctdGVhcG90LnZlcnQiKTsKKy0gIGZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX0ZSQUdNRU5UX1NIQURFUiwgImJsaW5raW5nLXRlYXBvdC5mcmFnIik7CisrICB2c2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9WRVJURVhfU0hBREVSLCBERU1PU19EQVRBX0RJUiAiYmxpbmtpbmctdGVhcG90LnZlcnQiKTsKKysgIGZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX0ZSQUdNRU5UX1NIQURFUiwgREVNT1NfREFUQV9ESVIgImJsaW5raW5nLXRlYXBvdC5mcmFnIik7CisgICBwcm9nX2lkID0gTGlua1NoYWRlcnMgKHZzaGFkX2lkLCBmc2hhZF9pZCk7CisgCisgICBVc2VQcm9ncmFtIChwcm9nX2lkKTsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9icmljay5jIGIvc3JjL2dsc2wvYnJpY2suYworaW5kZXggMzAyMTg1Ni4uZmU1ZjE5MCAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2JyaWNrLmMKKysrKyBiL3NyYy9nbHNsL2JyaWNrLmMKK0BAIC0xNCw4ICsxNCw4IEBACisgI2luY2x1ZGUgInNoYWRlcnV0aWwuaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMDYtYnJpY2suZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDA2LWJyaWNrLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gwNi1icmljay5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMDYtYnJpY2sudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9idW1wLmMgYi9zcmMvZ2xzbC9idW1wLmMKK2luZGV4IDU5ZjYyY2QuLjNhMWIyMGEgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9idW1wLmMKKysrKyBiL3NyYy9nbHNsL2J1bXAuYworQEAgLTE1LDkgKzE1LDkgQEAKKyAjaW5jbHVkZSAicmVhZHRleC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwLmZyYWciOworLXN0YXRpYyBjaGFyICpGcmFnVGV4UHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwdGV4LmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwLmZyYWciOworK3N0YXRpYyBjaGFyICpGcmFnVGV4UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwdGV4LmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwLnZlcnQiOworIHN0YXRpYyBjaGFyICpUZXh0dXJlRmlsZSA9IERFTU9TX0RBVEFfRElSICJ0aWxlLnJnYiI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jIGIvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKK2luZGV4IGExMjBjZmUuLjkzMTJmMDAgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9jb252b2x1dGlvbnMuYworKysrIGIvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKK0BAIC0zNDAsNyArMzQwLDcgQEAgc3RhdGljIHZvaWQgaW5pdCh2b2lkKQorIAorICAgIG1lbnVJbml0KCk7CisgICAgcmVhZFRleHR1cmUodGV4dHVyZUxvY2F0aW9uKTsKKy0gICBjcmVhdGVQcm9ncmFtKCJjb252b2x1dGlvbi52ZXJ0IiwgImNvbnZvbHV0aW9uLmZyYWciKTsKKysgICBjcmVhdGVQcm9ncmFtKERFTU9TX0RBVEFfRElSICJjb252b2x1dGlvbi52ZXJ0IiwgREVNT1NfREFUQV9ESVIgImNvbnZvbHV0aW9uLmZyYWciKTsKKyAKKyAgICBnbEVuYWJsZShHTF9URVhUVVJFXzJEKTsKKyAgICBnbENsZWFyQ29sb3IoMS4wLCAxLjAsIDEuMCwgMS4wKTsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9tYW5kZWxicm90LmMgYi9zcmMvZ2xzbC9tYW5kZWxicm90LmMKK2luZGV4IDMxZWRlMWQuLmFiMzRhMGYgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9tYW5kZWxicm90LmMKKysrKyBiL3NyYy9nbHNsL21hbmRlbGJyb3QuYworQEAgLTE0LDggKzE0LDggQEAKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxOC1tYW5kZWwuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDE4LW1hbmRlbC52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTgtbWFuZGVsLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxOC1tYW5kZWwudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9tdWx0aXRleC5jIGIvc3JjL2dsc2wvbXVsdGl0ZXguYworaW5kZXggMjYyZWE1MC4uNTQ2YmQyNyAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL211bHRpdGV4LmMKKysrKyBiL3NyYy9nbHNsL211bHRpdGV4LmMKK0BAIC0zNSw4ICszNSw4IEBACisgCisgc3RhdGljIGNvbnN0IGNoYXIgKkRlbW8gPSAibXVsdGl0ZXgiOworIAorLXN0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZSA9ICJtdWx0aXRleC52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUgPSAibXVsdGl0ZXguZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlID0gREVNT1NfREFUQV9ESVIgIm11bHRpdGV4LnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZSA9IERFTU9TX0RBVEFfRElSICJtdWx0aXRleC5mcmFnIjsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqVGV4RmlsZXNbMl0gPSAKKyAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCitpbmRleCAxM2ZkZDVkLi44ODVmMDFlIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCisrKysgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmMKK0BAIC0xNjksNyArMTY5LDcgQEAgU3BlY2lhbEtleShpbnQga2V5LCBpbnQgeCwgaW50IHkpCisgc3RhdGljIHZvaWQKKyBJbml0KHZvaWQpCisgeworLSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gInNpbXBsZXgtbm9pc2UuZ2xzbCI7CisrICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBERU1PU19EQVRBX0RJUiAic2ltcGxleC1ub2lzZS5nbHNsIjsKKyAgICBjaGFyIG5vaXNlVGV4dFsxMDAwMF07CisgICAgRklMRSAqZjsKKyAgICBpbnQgbGVuOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NraW5uaW5nLmMgYi9zcmMvZ2xzbC9za2lubmluZy5jCitpbmRleCBiZjM4ZDc3Li41MzZkNDc1IDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvc2tpbm5pbmcuYworKysrIGIvc3JjL2dsc2wvc2tpbm5pbmcuYworQEAgLTIwLDggKzIwLDggQEAKKyAjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1CisgI2VuZGlmCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJza2lubmluZy5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gInNraW5uaW5nLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAic2tpbm5pbmcuZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJza2lubmluZy52ZXJ0IjsKKyAKKyAvKiBwcm9ncmFtL3NoYWRlciBvYmplY3RzICovCisgc3RhdGljIEdMdWludCBmcmFnU2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3RleGRlbW8xLmMgYi9zcmMvZ2xzbC90ZXhkZW1vMS5jCitpbmRleCA2Y2RlMjM5Li5hMDgyMzQyIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvdGV4ZGVtbzEuYworKysrIGIvc3JjL2dsc2wvdGV4ZGVtbzEuYworQEAgLTM1LDExICszNSwxMSBAQAorIAorIHN0YXRpYyBjb25zdCBjaGFyICpEZW1vID0gInRleGRlbW8xIjsKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqUmVmbGVjdFZlcnRGaWxlID0gInJlZmxlY3QudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkN1YmVGcmFnRmlsZSA9ICJjdWJlbWFwLmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpSZWZsZWN0VmVydEZpbGUgPSBERU1PU19EQVRBX0RJUiAicmVmbGVjdC52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqQ3ViZUZyYWdGaWxlID0gREVNT1NfREFUQV9ESVIgImN1YmVtYXAuZnJhZyI7CisgCistc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVZlcnRGaWxlID0gInNpbXBsZS52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqU2ltcGxlVGV4RnJhZ0ZpbGUgPSAic2hhZG93dGV4LmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVWZXJ0RmlsZSA9IERFTU9TX0RBVEFfRElSICJzaW1wbGUudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVRleEZyYWdGaWxlID0gREVNT1NfREFUQV9ESVIgInNoYWRvd3RleC5mcmFnIjsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqR3JvdW5kSW1hZ2UgPSBERU1PU19EQVRBX0RJUiAidGlsZS5yZ2IiOworIAorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3RveWJhbGwuYyBiL3NyYy9nbHNsL3RveWJhbGwuYworaW5kZXggNWYyNzk1MS4uNGU3ZTgzMiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3RveWJhbGwuYworKysrIGIvc3JjL2dsc2wvdG95YmFsbC5jCitAQCAtMTQsOCArMTQsOCBAQAorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJDSDExLXRveWJhbGwuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDExLXRveWJhbGwudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLXRveWJhbGwuZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLXRveWJhbGwudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvb2Jqdmlld2VyL29ianZpZXcuYyBiL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCitpbmRleCA2ZGVmNzI2Li43OGE2YWNmIDEwMDY0NAorLS0tIGEvc3JjL29ianZpZXdlci9vYmp2aWV3LmMKKysrKyBiL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCitAQCAtMTYyLDEyICsxNjIsMTIgQEAgaW5pdF9tb2RlbCh2b2lkKQorIHN0YXRpYyB2b2lkCisgaW5pdF9za3lib3godm9pZCkKKyB7CistICAgU2t5Ym94VGV4ID0gTG9hZFNreUJveEN1YmVUZXh0dXJlKCJhbHBpbmVfZWFzdC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX3dlc3QucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV91cC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX2Rvd24ucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV9zb3V0aC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX25vcnRoLnJnYiIpOworKyAgIFNreWJveFRleCA9IExvYWRTa3lCb3hDdWJlVGV4dHVyZShERU1PU19EQVRBX0RJUiAiYWxwaW5lX2Vhc3QucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV93ZXN0LnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfdXAucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV9kb3duLnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfc291dGgucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV9ub3J0aC5yZ2IiKTsKKyAgICBnbG1TcGVjdWxhclRleHR1cmUoTW9kZWwsIFNreWJveFRleCk7CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworaW5kZXggNzQyMmI3OC4uZGJmODMzMiAxMDA2NDQKKy0tLSBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jCitAQCAtMzMsMTAgKzMzLDEwIEBACisgI2luY2x1ZGUgImdsbWFpbi5oIgorICNpbmNsdWRlICJjb21tb24uaCIKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUxID0gImdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTEgPSAiZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyI7Cistc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMiA9ICJnbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUyID0gImdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZTEgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTEudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlMSA9IERFTU9TX0RBVEFfRElSICJnbHNsc3RhdGVzY2hhbmdlMS5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUyID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTIgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyI7Cisgc3RhdGljIHN0cnVjdCB1bmlmb3JtX2luZm8gVW5pZm9ybXMxW10gPSB7CisgICAgeyAidGV4MSIsICAxLCBHTF9TQU1QTEVSXzJELCB7IDAsIDAsIDAsIDAgfSwgLTEgfSwKKyAgICB7ICJ0ZXgyIiwgIDEsIEdMX1NBTVBMRVJfMkQsIHsgMSwgMCwgMCwgMCB9LCAtMSB9LAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWMyYTM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaApAQCAtMCwwICsxLDI2NyBAQAorRnJvbSA0NTMzNTNhMjIxZGU5YzY0NDc5ZjQzNzI1NjVkMmNkODU5MWIzNmNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CitEYXRlOiBGcmksIDI5IEp1biAyMDEyIDExOjI2OjA0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNS85XSBGaXggYnVpbGQgd2hlbiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24gaXNuJ3QKKyBwcmVzZW50CisKK1RoZSBFR0wgZGVtb3Mgd29uJ3QgYnVpbGQgYWdhaW5zdCBFR0wgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydAordGhlIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbi4gRml4IHRoaXMsIGluIG1vc3QgY2FzZXMsIGJ5Cit3cmFwcGluZyByZWxldmFudCBiaXRzIG9mIGNvZGUgaW4gI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLgorCitTaWduZWQtb2ZmLWJ5OiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KKworQXBwbGllZCBhbmQgZml4ZWQgdXAgaW4gWW9jdG8gYnkuLi4KKworSW50ZWdyYXRlZC1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvZWdsL2VnbHV0L2VnbHV0LmMgICAgICAgIHwgIDkgKysrKysrKy0tCisgc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYyB8IDE0ICsrKysrKysrKysrKysrCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyAgICAgICB8ICAyICsrCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYyAgICAgICB8ICA3ICsrKysrKy0KKyBzcmMvZWdsL29wZW5nbC9kZW1vMy5jICAgICAgIHwgIDcgKysrKysrLQorIDUgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworaW5kZXggMmVlNmYxNS4uZjZhMmFkNCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworKysrIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jCitAQCAtNzYsOCArNzYsOSBAQCBfZWdsdXROb3codm9pZCkKKyBzdGF0aWMgdm9pZAorIF9lZ2x1dERlc3Ryb3lXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luKQorIHsKKy0gICBpZiAoX2VnbHV0LT5zdXJmYWNlX3R5cGUgIT0gRUdMX1BCVUZGRVJfQklUICYmCistICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCisrCisrICAgaWYgKF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9XSU5ET1dfQklUIHx8CisrICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9QSVhNQVBfQklUKQorICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKF9lZ2x1dC0+ZHB5LCB3aW4tPnN1cmZhY2UpOworIAorICAgIF9lZ2x1dE5hdGl2ZUZpbmlXaW5kb3cod2luKTsKK0BAIC0xNzUsNyArMTc2LDkgQEAgX2VnbHV0Q3JlYXRlV2luZG93KGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKKyAgICAgICAgICAgICB3aW4tPmNvbmZpZywgd2luLT5uYXRpdmUudS5waXhtYXAsIE5VTEwpOworICAgICAgIGJyZWFrOworICAgIGNhc2UgRUdMX1BCVUZGRVJfQklUOgorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGNhc2UgRUdMX1NDUkVFTl9CSVRfTUVTQToKKysjZW5kaWYKKyAgICAgICB3aW4tPnN1cmZhY2UgPSB3aW4tPm5hdGl2ZS51LnN1cmZhY2U7CisgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKK0BAIC0yODksOCArMjkyLDEwIEBAIGVnbHV0RGVzdHJveVdpbmRvdyhpbnQgd2luKQorICAgIGlmICh3aW5kb3ctPmluZGV4ICE9IHdpbikKKyAgICAgICByZXR1cm47CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgLyogWFhYIGl0IGNhdXNlcyBzb21lIGJ1ZyBpbiBzdC9lZ2wgS01TIGJhY2tlbmQgKi8KKyAgICBpZiAoIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCisrI2VuZGlmCisgICAgICAgZWdsTWFrZUN1cnJlbnQoX2VnbHV0LT5kcHksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworIAorICAgIF9lZ2x1dERlc3Ryb3lXaW5kb3coX2VnbHV0LT5jdXJyZW50KTsKK2RpZmYgLS1naXQgYS9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYworaW5kZXggMDIxYThmMS4uMDk0YTRlMiAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKKysrKyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKK0BAIC0zNSwyNiArMzUsMzMgQEAKKyAKKyAjZGVmaW5lIE1BWF9NT0RFUyAxMDAKKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyBzdGF0aWMgRUdMU2NyZWVuTUVTQSBrbXNfc2NyZWVuOworIHN0YXRpYyBFR0xNb2RlTUVTQSBrbXNfbW9kZTsKKyBzdGF0aWMgRUdMaW50IGttc193aWR0aCwga21zX2hlaWdodDsKKysjZW5kaWYKKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlSW5pdERpc3BsYXkodm9pZCkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgX2VnbHV0LT5uYXRpdmVfZHB5ID0gRUdMX0RFRkFVTFRfRElTUExBWTsKKyAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSA9IEVHTF9TQ1JFRU5fQklUX01FU0E7CisrI2VuZGlmCisgfQorIAorIHZvaWQKKyBfZWdsdXROYXRpdmVGaW5pRGlzcGxheSh2b2lkKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBrbXNfc2NyZWVuID0gMDsKKyAgICBrbXNfbW9kZSA9IDA7CisgICAga21zX3dpZHRoID0gMDsKKyAgICBrbXNfaGVpZ2h0ID0gMDsKKysjZW5kaWYKKyB9CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIHZvaWQKKyBpbml0X2ttcyh2b2lkKQorIHsKK0BAIC05NCwxOSArMTAxLDIzIEBAIGluaXRfa21zKHZvaWQpCisgICAga21zX3dpZHRoID0gd2lkdGg7CisgICAga21zX2hlaWdodCA9IGhlaWdodDsKKyB9CisrI2VuZGlmCisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xpbnQgc3VyZl9hdHRyaWJzWzE2XTsKKyAgICBFR0xpbnQgaTsKKysjZW5kaWYKKyAgICBjb25zdCBjaGFyICpleHRzOworIAorICAgIGV4dHMgPSBlZ2xRdWVyeVN0cmluZyhfZWdsdXQtPmRweSwgRUdMX0VYVEVOU0lPTlMpOworICAgIGlmICghZXh0cyB8fCAhc3Ryc3RyKGV4dHMsICJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSIpKQorICAgICAgIF9lZ2x1dEZhdGFsKCJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBpbml0X2ttcygpOworIAorICAgIGkgPSAwOworQEAgLTEyOCwxNCArMTM5LDE3IEBAIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKKyAKKyAgICB3aW4tPm5hdGl2ZS53aWR0aCA9IGttc193aWR0aDsKKyAgICB3aW4tPm5hdGl2ZS5oZWlnaHQgPSBrbXNfaGVpZ2h0OworKyNlbmRpZgorIH0KKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlRmluaVdpbmRvdyhzdHJ1Y3QgZWdsdXRfd2luZG93ICp3aW4pCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbFNob3dTY3JlZW5TdXJmYWNlTUVTQShfZWdsdXQtPmRweSwKKyAgICAgICAgICBrbXNfc2NyZWVuLCBFR0xfTk9fU1VSRkFDRSwgMCk7CisgICAgZWdsRGVzdHJveVN1cmZhY2UoX2VnbHV0LT5kcHksIHdpbi0+bmF0aXZlLnUuc3VyZmFjZSk7CisrI2VuZGlmCisgfQorIAorIHZvaWQKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworaW5kZXggZDg5MjczNC4uM2EzNTY0YyAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgc3RhdGljIHZvaWQKKyBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgI2RlZmluZSBNQVggOAorICAgIEVHTFNjcmVlbk1FU0Egc2NyZWVuc1tNQVhdOworICAgIEVHTGludCBudW1TY3JlZW5zOworQEAgLTI4LDYgKzI5LDcgQEAgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCisgICAgZm9yIChpID0gMDsgaSA8IG51bVNjcmVlbnM7IGkrKykgeworICAgICAgIHByaW50ZigiIFNjcmVlbiAlZCBoYW5kbGU6ICVkXG4iLCBpLCAoaW50KSBzY3JlZW5zW2ldKTsKKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qKgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMi5jCitpbmRleCA1MDViNDc0Li5iZmVmNTllIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAKKyAvKiNkZWZpbmUgRlJPTlRCVUZGRVIqLworIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyB2b2lkIF9zdWJzZXRfUmVjdGYoR0xmbG9hdCB4MSwgR0xmbG9hdCB5MSwgR0xmbG9hdCB4MiwgR0xmbG9hdCB5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCisgeworQEAgLTk1LDEyICs5NiwxMyBAQCBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKKyAgICAgICBwcmludGYoIiBTY3JlZW4gJWQgaGFuZGxlOiAlZFxuIiwgaSwgKGludCkgc2NyZWVuc1tpXSk7CisgICAgfQorIH0KKy0KKysjZW5kaWYKKyAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgIGludCBtYWosIG1pbjsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xDb250ZXh0IGN0eDsKKyAgICBFR0xTdXJmYWNlIHBidWZmZXIsIHNjcmVlbl9zdXJmOworICAgIEVHTENvbmZpZyBjb25maWdzWzEwXTsKK0BAIC0xMTUsNiArMTE3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIEVHTE1vZGVNRVNBIG1vZGU7CisgICAgRUdMU2NyZWVuTUVTQSBzY3JlZW47CisgICAgRUdMaW50IGNvdW50OworKyNlbmRpZgorIAorICAgIEVHTERpc3BsYXkgZCA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisgICAgYXNzZXJ0KGQpOworQEAgLTEzMiw2ICsxMzUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgZXhpdCgxKTsKKyAgICB9CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgZWdsR2V0Q29uZmlncyhkLCBjb25maWdzLCAxMCwgJm51bUNvbmZpZ3MpOworICAgIHByaW50ZigiR290ICVkIEVHTCBjb25maWdzOlxuIiwgbnVtQ29uZmlncyk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bUNvbmZpZ3M7IGkrKykgeworQEAgLTIxMSw2ICsyMTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgcGJ1ZmZlcik7CisgICAgZWdsRGVzdHJveUNvbnRleHQoZCwgY3R4KTsKKyAgICBlZ2xUZXJtaW5hdGUoZCk7CisrI2VuZGlmCisgCisgICAgcmV0dXJuIDA7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMy5jCitpbmRleCBmODRjYTIzLi4zMWI1ZDhiIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworQEAgLTQ2LDcgKzQ2LDcgQEAgR0x1Ynl0ZSBPcGVuR0xfYml0c1tdID0geworICAgIDB4M2UsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGMsIDB4MDAsIAorIH07CisgCistCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIHZvaWQgSW5pdCh2b2lkKQorIHsKKyAKK0BAIC01NTEsMTEgKzU1MSwxMyBAQCB3cml0ZV9wcG0oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IEdMdWJ5dGUgKmJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgIGZjbG9zZShmKTsKKyAgICB9CisgfQorKyNlbmRpZgorIAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgaW50IG1haiwgbWluOworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIEVHTENvbnRleHQgY3R4OworICAgIEVHTFN1cmZhY2Ugc2NyZWVuX3N1cmY7CisgICAgRUdMQ29uZmlnIGNvbmZpZ3NbMTBdOworQEAgLTU2Niw2ICs1NjgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgY29uc3QgR0x1Ynl0ZSAqYml0bWFwOworICAgIEVHTGludCBzY3JlZW5BdHRyaWJzWzMyXTsKKyAgICBFR0xpbnQgaTsKKysjZW5kaWYKKyAKKyAgICBFR0xEaXNwbGF5IGQgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworICAgIGFzc2VydChkKTsKK0BAIC01ODMsNiArNTg2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIGV4aXQoMSk7CisgICAgfQorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgMTAsICZudW1Db25maWdzKTsKKyAgICBlZ2xHZXRTY3JlZW5zTUVTQShkLCAmc2NyZWVuLCAxLCAmY291bnQpOworICAgIGVnbEdldE1vZGVzTUVTQShkLCBzY3JlZW4sICZtb2RlLCAxLCAmY291bnQpOworQEAgLTY0Miw2ICs2NDYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgc2NyZWVuX3N1cmYpOworICAgIGVnbERlc3Ryb3lDb250ZXh0KGQsIGN0eCk7CisgICAgZWdsVGVybWluYXRlKGQpOworKyNlbmRpZgorIAorICAgIHJldHVybiAwOworIH0KKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlMDgwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA2YTE5ZGJhMWQyNzU1NzljNzNlNzc2M2IwNTU0NDEwZmY0ZTFlNjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CitEYXRlOiBGcmksIDI5IEp1biAyMDEyIDEyOjAwOjI2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNi85XSBRdWVyeSBkaXNwbGF5IGZvciBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24KKyBiZWZvcmUgdXNpbmcgaXQKKworVGhpcyBjb2RlIG1ha2VzIGhlYXZ5IHVzZSBvZiB0aGUgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uIHNvCitjaGVjayB0aGUgZGlzcGxheSB0byBkZXRlcm1pbmUgaWYgaXQncyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgRUdMCitpbXBsZW1lbnRhdGlvbi4gSWYgaXQgZG9lc24ndCB0aGVuIGJhaWwuCisKK1NpZ25lZC1vZmYtYnk6IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorCitBcHBsaWVkIGFuZCBmaXhlZCB1cCBpbiBZb2N0byBieS4uLgorCitJbnRlZ3JhdGVkLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAbGludXguaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHNyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgfCA2ICsrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCitpbmRleCAzYTM1NjRjLi4wNmUyMTM4IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworQEAgLTExMCw2ICsxMTAsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIHByaW50ZigiRUdMIHZlcnNpb24gPSAlZC4lZFxuIiwgbWFqLCBtaW4pOworICAgIHByaW50ZigiRUdMX1ZFTkRPUiA9ICVzXG4iLCBlZ2xRdWVyeVN0cmluZyhkLCBFR0xfVkVORE9SKSk7CisgCisrICAgaWYgKCFzdHJzdHIoZWdsUXVlcnlTdHJpbmcoZCwgRUdMX0VYVEVOU0lPTlMpLAorKyAgICAgICAgICAgICAgICJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSIpKSB7CisrICAgICAgcHJpbnRmKCJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKysgICAgICBleGl0KDEpOworKyAgIH0KKysKKyAgICBlZ2xHZXRDb25maWdzKGQsIE5VTEwsIDAsICZudW1Db25maWdzKTsKKyAgICBjb25maWdzID0gbWFsbG9jKHNpemVvZigqY29uZmlncykgKm51bUNvbmZpZ3MpOworICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgbnVtQ29uZmlncywgJm51bUNvbmZpZ3MpOworLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkMmZhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIGQ5MzBiMmRhNTdmN2M5ZWZiODBjOGNlZjhmOGFkYWQxNWJiYmMwZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDE0IDE0OjMwOjUyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNy85XSBJbnN0YWxsIGZldyBtb3JlIHRlc3QgcHJvZ3JhbXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtICAgIHwgIDIgKy0KKyBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDEwICsrKystLS0tLS0KKyBzcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbSAgICB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCitpbmRleCAwYzcyMjhmLi44N2IyZjFhIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCitAQCAtNTAsNyArNTAsNyBAQCBlbmRpZgorIGVuZGlmCisgCisgaWYgSEFWRV9FR0wKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrYmluX1BST0dSQU1TID0gXAorIAlkZW1vMSBcCisgCWRlbW8yIFwKKyAJZGVtbzMgXAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK2luZGV4IDM0NTVlNzUuLjUxNmU1MTYgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK0BAIC0zNiwxMSArMzYsMTEgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChFR0xfTElCUykgXAorIAktbG0KKyAKKy1ub2luc3RfUFJPR1JBTVMgPQorK2Jpbl9QUk9HUkFNUyA9CisgCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX0dMRVNWMQorLW5vaW5zdF9QUk9HUkFNUyArPSBcCisrYmluX1BST0dSQU1TICs9IFwKKyAJZHJhd3RleF9zY3JlZW4gXAorIAlnZWFyc19zY3JlZW4gXAorIAl0b3J1c19zY3JlZW4gXAorQEAgLTU3LDEwICs1Nyw4IEBAIHRvcnVzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorIHRyaV9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyAKKyBpZiBIQVZFX1gxMQorLW5vaW5zdF9QUk9HUkFNUyArPSBcCistCWNsZWFyCistCistYmluX1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWNsZWFyIFwKKyAJYmluZHRleCBcCisgCWRyYXd0ZXhfeDExIFwKKyAJZWdsZmJkZXYgXAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KK2luZGV4IDczMThhNDMuLmI1NDUyMjUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KK0BAIC00OSw3ICs0OSw3IEBAIGVuZGlmCisgCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX1ZHCistbm9pbnN0X1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyA9IFwKKyAJbGlvbl9zY3JlZW4gXAorIAlzcF9zY3JlZW4gXAorIAkkKEVHTF9YMTFfREVNT1MpCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDg1NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitGcm9tIDBiNmY5NWY5YjhlY2UyMmU5ODU2YzE1MGU0YmUyOWZkODZlYWY1NDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDE0IDE0OjI5OjI3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggOC85XSBnbHNsLCBwZXJmOiBBZGQgZmV3IG1pc3NpbmcgLmdsc2wsIC52ZXJ0LCAuZnJhZyBmaWxlcyB0bworIEVYVFJBX0RBVEEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcGdsc2wvTWFrZWZpbGUuYW0gfCAgMiArKworIHNyYy9nbHNsL01ha2VmaWxlLmFtICAgfCAxMCArKysrKysrKy0tCisgc3JjL3BlcmYvTWFrZWZpbGUuYW0gICB8ICA2ICsrKysrKworIHNyYy92cGdsc2wvTWFrZWZpbGUuYW0gfCAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDQ3YzEwMzkuLmZkNDNjOTEgMTAwNjQ0CistLS0gYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitAQCAtMzksMTAgKzM5LDEyIEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyBlbmRpZgorIAorIEVYVFJBX0RJU1QgPSBcCisrCWRlcHRoLXJlYWQuZ2xzbCBcCisgCWRvd2hpbGUyLmdsc2wgXAorIAlkb3doaWxlLmdsc2wgXAorIAlmb3JicmVhay5nbHNsIFwKKyAJZm9yLmdsc2wgXAorKwlpbmZpbml0ZS1sb29wLmdsc2wgXAorIAltb3YuZ2xzbCBcCisgCW1vdi1pbW0uZ2xzbCBcCisgCXNpbXBsZWlmLmdsc2wgXAorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL01ha2VmaWxlLmFtIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDRmYWE4ZGIuLjA3OWEyOWQgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK0BAIC0zNyw3ICszNyw3IEBAIEFNX0xERkxBR1MgPSBcCisgaWYgSEFWRV9HTFVUCisgYmluX1BST0dSQU1TID0gXAorIAlhcnJheSBcCistICAgICAgICBiZXppZXIgXAorKwliZXppZXIgXAorIAliaXRtYXAgXAorIAlicmljayBcCisgCWJ1bXAgXAorQEAgLTEyMywxMiArMTIzLDE2IEBAIEVYVFJBX0RJU1QgPSBcCisgCUNIMDYtYnJpY2sudmVydCBcCisgCUNIMTEtYnVtcG1hcC5mcmFnIFwKKyAJQ0gxMS1idW1wbWFwLnZlcnQgXAorKwlDSDExLWJ1bXBtYXB0ZXguZnJhZyBcCisgCUNIMTEtdG95YmFsbC5mcmFnIFwKKyAJQ0gxMS10b3liYWxsLnZlcnQgXAorIAlDSDE4LW1hbmRlbC5mcmFnIFwKKyAJQ0gxOC1tYW5kZWwudmVydCBcCistICAgICAgICBiZXppZXIuZ2VvbSBcCisrCWJlemllci5nZW9tIFwKKyAJYnJpY2suc2h0ZXN0IFwKKysJYmxpbmtpbmctdGVhcG90LmZyYWcgXAorKwlibGlua2luZy10ZWFwb3QudmVydCBcCisrCWNvbnZvbHV0aW9uLmZyYWcgXAorIAljb252b2x1dGlvbi52ZXJ0IFwKKyAJY3ViZW1hcC5mcmFnIFwKKyAJbWFuZGVsYnJvdC5zaHRlc3QgXAorQEAgLTEzOCw1ICsxNDIsNyBAQCBFWFRSQV9ESVNUID0gXAorIAlyZWZsZWN0LnZlcnQgXAorIAlzaGFkb3d0ZXguZnJhZyBcCisgCXNpbXBsZS52ZXJ0IFwKKysJc2ltcGxleC1ub2lzZS5nbHNsIFwKKyAJc2tpbm5pbmcuZnJhZyBcCisrCXNraW5uaW5nLnZlcnQgXAorIAl0b3liYWxsLnNodGVzdAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL01ha2VmaWxlLmFtIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK2luZGV4IDUzNjNjNTguLmM1Y2NhOGQgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK0BAIC01NywzICs1Nyw5IEBAIGJpbl9QUk9HUkFNUyA9IFwKKyBlbmRpZgorIAorIGdsc2xzdGF0ZXNjaGFuZ2VfTERBREQgPSBsaWJwZXJmLmxhIC4uL3V0aWwvbGlidXRpbC5sYQorKworK0VYVFJBX0RJU1QgPSBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcgXAorKwlnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IFwKKysJZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK2RpZmYgLS1naXQgYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNGE4NWVkNC4uNDhiMDhmNCAxMDA2NDQKKy0tLSBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK0BAIC00NCw2ICs0NCw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCWZ1bmMyLmdsc2wgXAorIAlpZmVsc2UuZ2xzbCBcCisgCWlmLmdsc2wgXAorKwlpbmZpbml0ZS1sb29wLmdsc2wgXAorIAltb3YuZ2xzbCBcCisgCW5lc3RlZGlmcy5nbHNsIFwKKyAJbmVzdGVkc3dpenpsZS5nbHNsIFwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjYyZGVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBjOGMzZGU1NDE3ZDZiNmM3ZDc1NzljNTI4YzBjYWI3MThmNGJmZGI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDo0ODoxMiArMDIwMAorU3ViamVjdDogW1BBVENIIDkvOV0gZ2xzbCwgcGVyZjogSW5zdGFsbCAuZ2xzbCwgLnZlcnQsIC5mcmFnIGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSB8IDMgKystCisgc3JjL2dsc2wvTWFrZWZpbGUuYW0gICB8IDMgKystCisgc3JjL3BlcmYvTWFrZWZpbGUuYW0gICB8IDMgKystCisgc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSB8IDMgKystCisgNCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggZmQ0M2M5MS4uMmJmNTFkZSAxMDA2NDQKKy0tLSBhL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK0BAIC0zOCw3ICszOCw4IEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyAJZnAtdHJpCisgZW5kaWYKKyAKKy1FWFRSQV9ESVNUID0gXAorK2RlbW9zZGF0YWRpcj0kKGRhdGFkaXIpLyQoUEFDS0FHRSkvCisrZGlzdF9kZW1vc2RhdGFfREFUQT0gXAorIAlkZXB0aC1yZWFkLmdsc2wgXAorIAlkb3doaWxlMi5nbHNsIFwKKyAJZG93aGlsZS5nbHNsIFwKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitpbmRleCAwNzlhMjlkLi5mNjZlYzI5IDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitAQCAtMTE4LDcgKzExOCw4IEBAIHZlcnRfb3JfZnJhZ19vbmx5X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdmVydF90ZXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB2c3JheXRyYWNlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJQ0gwNi1icmljay5mcmFnIFwKKyAJQ0gwNi1icmljay52ZXJ0IFwKKyAJQ0gxMS1idW1wbWFwLmZyYWcgXAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL01ha2VmaWxlLmFtIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK2luZGV4IGM1Y2NhOGQuLjE0MDI1NmQgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK0BAIC01OCw3ICs1OCw4IEBAIGVuZGlmCisgCisgZ2xzbHN0YXRlc2NoYW5nZV9MREFERCA9IGxpYnBlcmYubGEgLi4vdXRpbC9saWJ1dGlsLmxhCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyBcCisgCWdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgXAorIAlnbHNsc3RhdGVzY2hhbmdlMi5mcmFnIFwKK2RpZmYgLS1naXQgYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNDhiMDhmNC4uNTUyNjg2NyAxMDA2NDQKKy0tLSBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK0BAIC0zOCw3ICszOCw4IEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyAJdnAtdHJpcworIGVuZGlmCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZm9yLmdsc2wgXAorIAlmdW5jLmdsc2wgXAorIAlmdW5jMi5nbHNsIFwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTE2NDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIKQEAgLTAsMCArMSw1NyBAQAorU1VNTUFSWSA9ICJNZXNhIGRlbW8gYXBwbGljYXRpb25zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZW1vbnN0cmF0aW9uIGFwcGxpY2F0aW9uLCBzdWNoIGFzIGdseGdlYXJzLiBcCitUaGVzZSBhcHBsaWNhdGlvbnMgY2FuIGJlIHVzZWQgZm9yIE1lc2EgdmFsaWRhdGlvbiBhbmQgYmVuY2htYXJraW5nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tZXNhM2Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTUlUICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMveGRlbW9zL2dseGdlYXJzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9OTE0MjI1Nzg1NDUwZWZmNjQ0YTg2Yzg3MWQzYWUwMGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3hkZW1vcy9nbHhkZW1vLmM7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT1iMDFkNWFiMWFlZTk0ZDM1YjdlZmFhMmVmNDhlMWEwNiIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2RlbW9zLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNzI2MTNhMmM4YzAxMzcxNmRiMDJlM2ZmNTlkMjkwNjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTRiZmVjYjU4MTZkZGQ0YjdiMzdjMWJjODc2YjYzZjFmN2YwNmZkYTU4NzkyMjFhOTc3NGQwOTUyZjkwYmE5MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz0gImRybSBvc21lc2EgZnJlZXR5cGUyIGdibSBlZ2wgZ2xlczEgZ2xlczIgXAorICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExIGdsZXcgZ2x1JywgJycsIGQpfSIKKworIyBUaGUgV2F5bGFuZCBjb2RlIGRvZXNuJ3Qgd29yayB3aXRoIFdheWxhbmQgMS4wLCBzbyBkaXNhYmxlIGl0IGZvciBub3cKKyMke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3lzdGVtLWRhdGEtZmlsZXMiCisKK1BBQ0tBR0VDT05GSUdbZHJtXSA9ICItLWVuYWJsZS1saWJkcm0sLS1kaXNhYmxlLWxpYmRybSxsaWJkcm0iCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2ZyZWV0eXBlMl0gPSAiLS1lbmFibGUtZnJlZXR5cGUyLC0tZGlzYWJsZS1mcmVldHlwZTIsZnJlZXR5cGUiCitQQUNLQUdFQ09ORklHW2dibV0gPSAiLS1lbmFibGUtZ2JtLC0tZGlzYWJsZS1nYm0sdmlydHVhbC9saWJnbCIKK1BBQ0tBR0VDT05GSUdbZ2xlczFdID0gIi0tZW5hYmxlLWdsZXMxLC0tZGlzYWJsZS1nbGVzMSx2aXJ0dWFsL2xpYmdsZXMxIgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW2dsdXRdID0gIi0td2l0aC1nbHV0PSR7U1RBR0lOR19FWEVDUFJFRklYRElSfSwtLXdpdGhvdXQtZ2x1dCwiCitQQUNLQUdFQ09ORklHW29zbWVzYV0gPSAiLS1lbmFibGUtb3NtZXNhLC0tZGlzYWJsZS1vc21lc2EsIgorUEFDS0FHRUNPTkZJR1t2Z10gPSAiLS1lbmFibGUtdmcsLS1kaXNhYmxlLXZnLHZpcnR1YWwvbGlib3BlbnZnIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLC0tZGlzYWJsZS13YXlsYW5kLHZpcnR1YWwvbGliZ2wgd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSx2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUdbZ2xld10gPSAiLS1lbmFibGUtZ2xldywtLWRpc2FibGUtZ2xldyxnbGV3IgorUEFDS0FHRUNPTkZJR1tnbHVdID0gIi0tZW5hYmxlLWdsdSwtLWRpc2FibGUtZ2x1LHZpcnR1YWwvbGliZ2wiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgaXQgY2FuIGJlIGNvbXBsZXRlbHkgZW1wdHkgd2hlbiBhbGwgUEFDS0FHRUNPTkZJRyBvcHRpb25zIGFyZSBkaXNhYmxlZAorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2JpbmRpcn0KKworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9jbGVhciBdOyB0aGVuCisgICAgICAgIAltdiAke0R9JHtiaW5kaXJ9L2NsZWFyICR7RH0ke2JpbmRpcn0vY2xlYXIubWVzYS1kZW1vcworCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTAuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJiY2E5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG1lc2FfJHtQVn0uYmIKKworU1VNTUFSWSArPSAiIChPcGVuR0wgb25seSwgbm8gRUdML0dMRVMpIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9tZXNhOiIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJnbCB2aXJ0dWFsL21lc2EiCisKK1MgPSAiJHtXT1JLRElSfS9tZXNhLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiZHJpICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3YTJjNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKQEAgLTAsMCArMSwxODUgQEAKK1NVTU1BUlkgPSAiQSBmcmVlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPcGVuR0wgQVBJIgorREVTQ1JJUFRJT04gPSAiTWVzYSBpcyBhbiBvcGVuLXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT3BlbkdMIHNwZWNpZmljYXRpb24gLSBcCithIHN5c3RlbSBmb3IgcmVuZGVyaW5nIGludGVyYWN0aXZlIDNEIGdyYXBoaWNzLiAgXAorQSB2YXJpZXR5IG9mIGRldmljZSBkcml2ZXJzIGFsbG93cyBNZXNhIHRvIGJlIHVzZWQgaW4gbWFueSBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIFwKK3JhbmdpbmcgZnJvbSBzb2Z0d2FyZSBlbXVsYXRpb24gdG8gY29tcGxldGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBtb2Rlcm4gR1BVcy4gXAorTWVzYSBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSBhbmQgWC5vcmcgXAorZW52aXJvbm1lbnQuIgorCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL2xpY2Vuc2UuaHRtbDttZDU9NmEyMzQ0NTk4MmE3YTk3MmFjMTk4ZTkzY2MxY2IzZGUiCisKK1BFID0gIjIiCisKK0RFUEVORFMgPSAiZXhwYXQgbWFrZWRlcGVuZC1uYXRpdmUgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGxpYnhtbDItbmF0aXZlIHVkZXYiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliZ2wgdmlydHVhbC9saWJnbGVzMSB2aXJ0dWFsL2xpYmdsZXMyIHZpcnR1YWwvZWdsIHZpcnR1YWwvbWVzYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB5dGhvbm5hdGl2ZSBnZXR0ZXh0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkLWdsYXBpIgorCitQQUNLQUdFQ09ORklHID8/PSAiZWdsIGdsZXMgZHJpIFwKKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfVwKKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9XAorCQkiCisKK1gxMV9ERVBTID0gInhmODZkcmlwcm90byBnbHByb3RvIHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHhmODZ2bSBsaWJ4ZGFtYWdlIGxpYnhmaXhlcyIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS1nbHgtdGxzLC0tZGlzYWJsZS1nbHgsJHtYMTFfREVQU30iCitQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLCx3YXlsYW5kIgorCitEUklEUklWRVJTID0gInN3cmFzdCIKK0RSSURSSVZFUlNfYXBwZW5kX3g4NiA9ICIscmFkZW9uLHIyMDAsbm91dmVhdSxpOTY1LGk5MTUiCitEUklEUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgorUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSAtLXdpdGgtZHJpLWRyaXZlcnM9JHtEUklEUklWRVJTfSwgLS1kaXNhYmxlLWRyaSwgZHJpMnByb3RvIGxpYmRybSIKK1BBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywgLS1kaXNhYmxlLWRyaTMsIGRyaTNwcm90byBwcmVzZW50cHJvdG8gbGlieHNobWZlbmNlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLWdibSIKKworUEFDS0FHRUNPTkZJR1tnbGVzXSA9ICItLWVuYWJsZS1nbGVzMSAtLWVuYWJsZS1nbGVzMiwgLS1kaXNhYmxlLWdsZXMxIC0tZGlzYWJsZS1nbGVzMiIKKworRUdMX1BMQVRGT1JNUyAgPSAiZHJtIgorRUdMX1BMQVRGT1JNUyAuPSIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnLHgxMScsICcnLCBkKX0iCitFR0xfUExBVEZPUk1TIC49IiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3dheWxhbmQnLCAnLHdheWxhbmQnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLXdpdGgtZWdsLXBsYXRmb3Jtcz0ke0VHTF9QTEFURk9STVN9LCAtLWRpc2FibGUtZWdsIgorCitHQUxMSVVNRFJJVkVSUyA9ICJzd3Jhc3QiCitHQUxMSVVNRFJJVkVSU19MTFZNMzMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncjYwMCcsICdyYWRlb25zaSxyNjAwJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcjYwMF0gPSAiIgorR0FMTElVTURSSVZFUlNfTExWTTMzX0VOQUJMRUQgPSAiJHtAYmFzZV92ZXJzaW9uX2xlc3Nfb3JfZXF1YWwoJ01FU0FfTExWTV9SRUxFQVNFJywgJzMuMicsIEZhbHNlLCBsZW4oJyR7R0FMTElVTURSSVZFUlNfTExWTTMzfScpID4gMCwgZCl9IgorR0FMTElVTURSSVZFUlNfTExWTSA9ICJyMzAwLHN2Z2Esbm91dmVhdSR7QCcsJHtHQUxMSVVNRFJJVkVSU19MTFZNMzN9JyBpZiAke0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEfSBlbHNlICcnfSIKK0dBTExJVU1EUklWRVJTX2FwcGVuZF94ODYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKK0dBTExJVU1EUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKKyMga2VlcCAtLXdpdGgtZ2FsbGl1bS1kcml2ZXJzIHNlcGFyYXRlLCBiZWNhdXNlIHdoZW4gb25seSBvbmUgb2YgZ2FsbGl1bSB2ZXJzaW9ucyBpcyBlbmFibGVkLCBvdGhlciAyIHdlcmUgYWRkaW5nIC0td2l0aG91dC1nYWxsaXVtLWRyaXZlcnMKK1BBQ0tBR0VDT05GSUdbZ2FsbGl1bV0gICAgICA9ICItLXdpdGgtZ2FsbGl1bS1kcml2ZXJzPSR7R0FMTElVTURSSVZFUlN9LCAtLXdpdGhvdXQtZ2FsbGl1bS1kcml2ZXJzIgorTUVTQV9MTFZNX1JFTEVBU0UgPz0gIjMuMyIKK1BBQ0tBR0VDT05GSUdbZ2FsbGl1bS1sbHZtXSA9ICItLWVuYWJsZS1nYWxsaXVtLWxsdm0gLS1lbmFibGUtbGx2bS1zaGFyZWQtbGlicywgLS1kaXNhYmxlLWdhbGxpdW0tbGx2bSwgbGx2bSR7TUVTQV9MTFZNX1JFTEVBU0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0AnZWxmdXRpbHMnIGlmICR7R0FMTElVTURSSVZFUlNfTExWTTMzX0VOQUJMRUR9IGVsc2UgJyd9IgorZXhwb3J0IFdBTlRfTExWTV9SRUxFQVNFID0gIiR7TUVTQV9MTFZNX1JFTEVBU0V9IgorUEFDS0FHRUNPTkZJR1t4YV0gID0gIi0tZW5hYmxlLXhhLCAtLWRpc2FibGUteGEiCisKKyMgbGx2bXBpcGUgaXMgc2xvdyBpZiBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyIChlLmcuIC1PMikKK0ZVTExfT1BUSU1JWkFUSU9OX2FwcGVuZCA9ICIgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiCisKKyMgTXVsdGlwbGUgdmlydHVhbC9nbCBwcm92aWRlcnMgYmVpbmcgYnVpbHQgYnJlYWtzIHN0YWdpbmcKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCisjIFJlbW92ZSB0aGUgbWVzYSBkZXBlbmRlbmN5IG9uIG1lc2EtZGV2LCBhcyBtZXNhIGlzIGVtcHR5CitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitQQUNLQUdFUyA9KyAibGliZWdsLW1lc2EgbGliZWdsLW1lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJvc21lc2EgbGlib3NtZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2wtbWVzYSBsaWJnbC1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xhcGkgbGliZ2xhcGktZGV2IFwKKyAgICAgICAgICAgICBsaWJnYm0gbGliZ2JtLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczEtbWVzYSBsaWJnbGVzMS1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczItbWVzYSBsaWJnbGVzMi1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczMtbWVzYSBsaWJnbGVzMy1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGlid2F5bGFuZC1lZ2wgbGlid2F5bGFuZC1lZ2wtZGV2IFwKKyAgICAgICAgICAgICBsaWJ4dm1jc29mdHBpcGUgbGlieHZtY3NvZnRwaXBlLWRldiBcCisgICAgICAgICAgICAgbGlieGF0cmFja2VyIGxpYnhhdHJhY2tlci1kZXYgXAorICAgICAgICAgICAgIG1lc2EtbWVnYWRyaXZlciBcCisgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIERyaXZlcnMgbmV2ZXIgbmVlZCBsaWJ0b29sIC5sYSBmaWxlcworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZHJpLyoubGEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2VnbC8qLmxhCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9nYWxsaXVtLXBpcGUvKi5sYQorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZ2JtLyoubGEKKyAgICAKKyAgICAjIGl0IHdhcyBwYWNrYWdlZCBpbiBsaWJkcmljb3JlOS4xLjMtMSBhbmQgcHJldmVudGluZyB1cGdyYWRlcyB3aGVuIGRlYmlhbi5iYmNsYXNzIHdhcyB1c2VkIAorICAgIHJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RyaXJjCit9CisKKyMgRm9yIHRoZSBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIE9wZW5HTCBpbnRlcmZhY2VzLCBpbmplY3QgdmFyaWFibGVzIHNvIHRoYXQKKyMgdGhleSBkb24ndCBnZXQgRGViaWFuLXJlbmFtZWQgKHdoaWNoIHdvdWxkIHJlbW92ZSB0aGUgLW1lc2Egc3VmZml4KSwgYW5kCisjIFJQUk9WSURFcy9SQ09ORkxJQ1RzIG9uIHRoZSBnZW5lcmljIGxpYmdsIG5hbWUuCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgcGtnY29uZmlnID0gKGQuZ2V0VmFyKCdQQUNLQUdFQ09ORklHJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgcCBpbiAoKCJlZ2wiLCAibGliZWdsIiwgImxpYmVnbDEiKSwKKyAgICAgICAgICAgICAgKCJkcmkiLCAibGliZ2wiLCAibGliZ2wxIiksCisgICAgICAgICAgICAgICgiZ2xlcyIsICJsaWJnbGVzMSIsICJsaWJnbGVzdjEtY20xIiksCisgICAgICAgICAgICAgICgiZ2xlcyIsICJsaWJnbGVzMiIsICJsaWJnbGVzdjItMiIpLAorICAgICAgICAgICAgICAoImdsZXMiLCAibGliZ2xlczMiLCkpOgorICAgICAgICBpZiBub3QgcFswXSBpbiBwa2djb25maWc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmdWxscCA9IHBbMV0gKyAiLW1lc2EiCisgICAgICAgIHBrZ3MgPSAiICIuam9pbihwWzE6XSkKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTl9OT0FVVE9OQU1FXyIgKyBmdWxscCwgIjEiKQorICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgCisgICAgICAgICMgRm9yIC1kZXYsIHRoZSBmaXJzdCBlbGVtZW50IGlzIGJvdGggdGhlIERlYmlhbiBhbmQgb3JpZ2luYWwgbmFtZQorICAgICAgICBmdWxscCArPSAiLWRldiIKKyAgICAgICAgcGtncyA9IHBbMV0gKyAiLWRldiIKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTl9OT0FVVE9OQU1FXyIgKyBmdWxscCwgIjEiKQorICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyIgKyBmdWxscCwgcGtncykKK30KKworcHl0aG9uIG1lc2FfcG9wdWxhdGVfcGFja2FnZXMoKSB7CisgICAgcGtncyA9IFsnbWVzYScsICdtZXNhLWRldicsICdtZXNhLWRiZyddCisgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICBkLnNldFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKyAgICAgICAgZC5zZXRWYXIoIlJDT05GTElDVFNfJXMiICUgcGtnLCBwa2cucmVwbGFjZSgibWVzYSIsICJtZXNhLWRyaSIsIDEpKQorICAgICAgICBkLnNldFZhcigiUlJFUExBQ0VTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKworICAgIGltcG9ydCByZQorICAgIGRyaV9kcml2ZXJzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZHJpIikKKyAgICBkcmlfcGtncyA9IG9zLmxpc3RkaXIoZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSArIGRyaV9kcml2ZXJzX3Jvb3QpCisgICAgbGliX25hbWUgPSBkLmV4cGFuZCgiJHtNTFBSRUZJWH1tZXNhLW1lZ2Fkcml2ZXIiKQorICAgIGZvciBwIGluIGRyaV9wa2dzOgorICAgICAgICBtID0gcmUubWF0Y2goJ14oLiopX2RyaVwuc28kJywgcCkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHBrZ19uYW1lID0gIiAke01MUFJFRklYfW1lc2EtZHJpdmVyLSVzIiAlIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVQTEFDRVNfJXMiICUgbGliX25hbWUsIHBrZ19uYW1lKQorCisgICAgcGlwZV9kcml2ZXJzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZ2FsbGl1bS1waXBlIikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwaXBlX2RyaXZlcnNfcm9vdCwgJ15waXBlXyguKilcLnNvJCcsICdtZXNhLWRyaXZlci1waXBlLSVzJywgJ01lc2EgJXMgcGlwZSBkcml2ZXInLCBleHRyYV9kZXBlbmRzPScnKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gIm1lc2FfcG9wdWxhdGVfcGFja2FnZXMgIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJebWVzYS1kcml2ZXItLioiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2RyaS8uZGVidWcvKiIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2RyaXJjIgorRklMRVNfbWVzYS1tZWdhZHJpdmVyID0gIiR7bGliZGlyfS9kcmkvKiIKK0ZJTEVTX2xpYmVnbC1tZXNhID0gIiR7bGliZGlyfS9saWJFR0wuc28uKiIKK0ZJTEVTX2xpYmdibSA9ICIke2xpYmRpcn0vbGliZ2JtLnNvLioiCitGSUxFU19saWJnbGVzMS1tZXNhID0gIiR7bGliZGlyfS9saWJHTEVTdjEqLnNvLioiCitGSUxFU19saWJnbGVzMi1tZXNhID0gIiR7bGliZGlyfS9saWJHTEVTdjIuc28uKiIKK0ZJTEVTX2xpYmdsLW1lc2EgPSAiJHtsaWJkaXJ9L2xpYkdMLnNvLioiCitGSUxFU19saWJnbGFwaSA9ICIke2xpYmRpcn0vbGliZ2xhcGkuc28uKiIKK0ZJTEVTX2xpYm9zbWVzYSA9ICIke2xpYmRpcn0vbGliT1NNZXNhLnNvLioiCitGSUxFU19saWJ3YXlsYW5kLWVnbCA9ICIke2xpYmRpcn0vbGlid2F5bGFuZC1lZ2wuc28uKiIKK0ZJTEVTX2xpYnh2bWNzb2Z0cGlwZSA9ICIke2xpYmRpcn0vbGliWHZNQ3NvZnRwaXBlLnNvLioiCitGSUxFU19saWJ4YXRyYWNrZXIgPSAiJHtsaWJkaXJ9L2xpYnhhdHJhY2tlci5zby4qIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZy9kcmkucGMiCitGSUxFU19saWJlZ2wtbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYkVHTC4qICR7aW5jbHVkZWRpcn0vRUdMICR7aW5jbHVkZWRpcn0vS0hSICR7bGliZGlyfS9wa2djb25maWcvZWdsLnBjIgorRklMRVNfbGliZ2JtLWRldiA9ICIke2xpYmRpcn0vbGliZ2JtLiogJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nYm0ucGMgJHtpbmNsdWRlZGlyfS9nYm0uaCIKK0ZJTEVTX2xpYmdsLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTC4qICR7aW5jbHVkZWRpcn0vR0wgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nbC5wYyIKK0ZJTEVTX2xpYmdsYXBpLWRldiA9ICIke2xpYmRpcn0vbGliZ2xhcGkuKiIKK0ZJTEVTX2xpYmdsZXMxLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTEVTdjEqLiogJHtpbmNsdWRlZGlyfS9HTEVTICR7bGliZGlyfS9wa2djb25maWcvZ2xlc3YxKi5wYyIKK0ZJTEVTX2xpYmdsZXMyLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTEVTdjIuKiAke2luY2x1ZGVkaXJ9L0dMRVMyICR7bGliZGlyfS9wa2djb25maWcvZ2xlc3YyLnBjIgorRklMRVNfbGliZ2xlczMtbWVzYS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9HTEVTMyIKK0ZJTEVTX2xpYm9zbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYk9TTWVzYS4qICR7aW5jbHVkZWRpcn0vb3NtZXNhLmggJHtsaWJkaXJ9L3BrZ2NvbmZpZy9vc21lc2EucGMiCitGSUxFU19saWJ3YXlsYW5kLWVnbC1kZXYgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZy93YXlsYW5kLWVnbC5wYyAke2xpYmRpcn0vbGlid2F5bGFuZC1lZ2wuKiIKK0ZJTEVTX2xpYnh2bWNzb2Z0cGlwZS1kZXYgPSAiJHtsaWJkaXJ9L2xpYlh2TUNzb2Z0cGlwZS5zbyAke2xpYmRpcn0vbGliWHZNQ3NvZnRwaXBlLmxhIgorRklMRVNfbGlieGF0cmFja2VyLWRldiA9ICIke2xpYmRpcn0vbGlieGF0cmFja2VyLnNvICR7bGliZGlyfS9saWJ4YXRyYWNrZXIubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L3hhX3RyYWNrZXIuaCAke2luY2x1ZGVkaXJ9L3hhX2NvbXBvc2l0ZS5oICR7aW5jbHVkZWRpcn0veGFfY29udGV4dC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy94YXRyYWNrZXIucGMiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2RyaS8uZGVidWcvKiAke2xpYmRpcn0vZWdsLy5kZWJ1Zy8qICR7bGliZGlyfS9nYm0vLmRlYnVnLyogJHtsaWJkaXJ9L2dhbGxpdW0tcGlwZS8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTAuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzU1MDY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhLyR7UFZ9L21lc2EtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTUzZTUyNWQyZjIwZWQ0OGZjYThmMWVjMzE3NmZkODMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTg1OTJlMDdjMzUwY2QyZTg5NjliNzNmYTgzMDQ4YzY1N2EzOWZlMmYxM2YzYjg4ZjVlNTgxOGZlMmU0Njc2ZCIKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzQ1MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ1JFViA9ICJlYTBkMWY1NzVjMjE0YzA5YmEzZGYxMjY0NGE5NjBlODZlMDMxNzY2IgorUFYgPSAiMTAuNS40K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC9tZXNhL21lc2E7YnJhbmNoPTEwLjUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gInB5dGhvbi1tYWtvLW5hdGl2ZSIKKworaW5oZXJpdCBweXRob25uYXRpdmUKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vZmlsZXMvbWluaS14LXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNjU1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorIworIyBWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIE1pbmkgWAorIworCisjIFVuY29tbWVudCBiZWxvdyB0byBlbmFibGUgcGFyc2luZyBvZiBkZWJpYW4gbWVudSBlbnRyeXMKKyMgZXhwb3J0IE1CX1VTRV9ERUJfTUVOVVM9MSAKKworaWYgWyAtZSAkSE9NRS8ubWluaV94L3Nlc3Npb24gXQordGhlbgorZXhlYyAkSE9NRS8ubWluaV94L3Nlc3Npb24KK2ZpCisKK2lmIFsgLWUgL2V0Yy9taW5pX3gvc2Vzc2lvbiBdCit0aGVuCitleGVjIC9ldGMvbWluaV94L3Nlc3Npb24KK2ZpCisKK01JTklfWF9TRVNTSU9OX0RJUj0vZXRjL21pbmlfeC9zZXNzaW9uLmQKK2lmIFsgLWQgIiRNSU5JX1hfU0VTU0lPTl9ESVIiIF07IHRoZW4KKwkjIEV4ZWN1dGUgc2Vzc2lvbiBmaWxlIG9uIGJlaGFsZiBvZiBmaWxlIG93bmVyCisJZmluZCAkTUlOSV9YX1NFU1NJT05fRElSIC10eXBlIGYgfCB3aGlsZSByZWFkIFNFU1NJT05GSUxFOyBkbworCQlzZXQgK2UKKwkJVVNFUk5BTUU9YHN0YXQgLWMgJVUgJFNFU1NJT05GSUxFYAorCQkjIFVzaW5nIHN1IHJhdGhlciB0aGFuIHN1ZG8gYXMgbGF0ZXN0IDEuOC4xIGNhdXNlIGZhaWx1cmUgW1lPQ1RPICMxMjExXQorIwkJc3UgLWwgLWMgJyRTRVNTSU9ORklMRSYnICRVU0VSTkFNRQorCQlzdWRvIC1iIC1pIC11ICRVU0VSTkFNRSAkU0VTU0lPTkZJTEUmCisJCXNldCAtZQorCWRvbmUKK2ZpCisKKyMgVGhpcyByZXNvbHV0aW9uIGlzIGJpZyBlbm91Z2ggZm9yIGhvYjIncyBtYXggd2luZG93IHNpemUuCit4cmFuZHIgLXMgMTAyNHg3NjgKKworIyBEZWZhdWx0IGZpbGVzIHRvIHJ1biBpZiAkSE9NRS8ubWluaV94L3Nlc3Npb24gb3IgL2V0Yy9taW5pX3gvc2Vzc2lvbgorIyBkb250IGV4aXN0LiAKKworbWF0Y2hib3gtdGVybWluYWwmCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4OWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL21pbmkteC1zZXNzaW9uXzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlZlcnkgc2ltcGxlIHNlc3Npb24gbWFuYWdlciBmb3IgWCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnBva3lsaW51eC5vcmciCisKK1BSID0gInI0IgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbWluaS14LXNlc3Npb247ZW5kbGluZT01O21kNT1iNjQzMGJmZmJjZjA1Zjk3NjBlNzI5Mzg4MjZiNzQ4NyIKKworU0VDVElPTiA9ICJ4MTEiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKKworU1JDX1VSSSA9ICJmaWxlOi8vbWluaS14LXNlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK1JERVBFTkRTXyR7UE59ID0gInN1ZG8iCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ4LXNlc3Npb24tbWFuYWdlciIKK0FMVEVSTkFUSVZFX1RBUkdFVFt4LXNlc3Npb24tbWFuYWdlcl0gPSAiJHtiaW5kaXJ9L21pbmkteC1zZXNzaW9uIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNTAiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L21pbmkteC1zZXNzaW9uICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGE4MzIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGaXggYnVpbGQgZm9yIFMgIT0gQgorCitUaGlzIHBhdGNoIGlzIHNwZWNpZmljIHRvIHZlcnNpb24gMS40LngKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC9pc3N1ZXMvODEKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorLS0KK0luZGV4OiBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCisrKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE0OjMzLjY4NDMxODY1MCArMDEwMAorQEAgLTEsMyArMSw2IEBACisrRVhUUkFfRElTVD0KKytDTEVBTkZJTEVTPQorKworICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorICMgV2UgcmVxdWlyZSBhdXRvbWFrZSAxLjYgYXQgbGVhc3QuCitAQCAtNzcsNyArODAsNyBAQAorIEdUS0RPQ19MSUJTPSQoTVhfTElCUykgJCh0b3BfYnVpbGRkaXIpL214LWd0ay9saWJteC1ndGstJChNWF9BUElfVkVSU0lPTikubGEKKyAKKyAjIFRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbWFrZSBydWxlcywgY29waWVkIGJ5IGd0a2RvY2l6ZS4KKy1pbmNsdWRlICQodG9wX3NyY2RpcikvZ3RrLWRvYy5tYWtlCisraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZ3RrLWRvYy5tYWtlCisgCisgIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlCisgRVhUUkFfRElTVCArPSB2ZXJzaW9uLnhtbC5pbgorSW5kZXg6IGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCisrKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MTQ6MjQuNDU2Mzc4MTM1ICswMTAwCitAQCAtMSwzICsxLDYgQEAKKytFWFRSQV9ESVNUPQorK0NMRUFORklMRVM9CisrCisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBXZSByZXF1aXJlIGF1dG9tYWtlIDEuNiBhdCBsZWFzdC4KK0BAIC0xMDYsNyArMTA5LDcgQEAKKyBHVEtET0NfTElCUz0kKE1YX0xJQlMpICQodG9wX2J1aWxkZGlyKS9teC9saWJteC0kKE1YX0FQSV9WRVJTSU9OKS5sYQorIAorICMgVGhpcyBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgZ3RrLWRvYyBtYWtlIHJ1bGVzLCBjb3BpZWQgYnkgZ3RrZG9jaXplLgorLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9ndGstZG9jLm1ha2UKKytpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9ndGstZG9jLm1ha2UKKyAKKyAjIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUKKyBFWFRSQV9ESVNUICs9IHZlcnNpb24ueG1sLmluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjOTNkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitGaXggbWlzc2luZyBpbmNsdWRlIGRpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIHRlc3RzCisKK1RoaXMgcGF0Y2ggaXMgY3VycmVudGx5IHJlcXVpcmVkIGZvciBhbGwgdmVyc2lvbnMgb2YgbXgKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC9pc3N1ZXMvODIKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorLS0KK0luZGV4OiBnaXQvdGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE4OjU2LjkxODU5NjQyNSArMDEwMAorKysrIGdpdC90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjIzOjI2Ljg2NDc4MTQwMSArMDEwMAorQEAgLTEwLDcgKzEwLDggQEAKKyAKKyBJTkNMVURFUyA9IFwKKyAJLUkkKHRvcF9zcmNkaXIpIFwKKy0JLUkkKHRvcF9idWlsZGRpcikKKysJLUkkKHRvcF9idWlsZGRpcilcCisrCS1JJCh0b3BfYnVpbGRkaXIpL214CisgCisgbm9pbnN0X1BST0dSQU1TID0gCQkJXAorIAl0ZXN0LWRlZm9ybS10ZXh0dXJlCQlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzNWI2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIG14LmluYworCisjIFRoZSAxLjQuNyB0YWcgZG9lcyBub3QgYnVpbGQgYWdhaW5zdCBjb2dsIDEuMTQsIHB1bGwgaW4gYSByZXZpc2lvbiB3aXRoIGEgZml4CitTUkNSRVYgPSAiOWIxZGI2YjgwNjBiZDAwYjEyMWE2OTJmOTQyNDA0YTI0YWUyOTYwZiIKK1BWID0gIjEuNC43K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214LmdpdDticmFuY2g9bXgtMS40IFwKKwkgICBmaWxlOi8vZml4LWJ1aWxkLWRpci5wYXRjaCBcCisJICAgZmlsZTovL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoIFwKKwkgICIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9teC9teC13aWRnZXQuYztiZWdpbmxpbmU9ODtlbmRsaW5lPTIwO21kNT0xM2JiYTNjOTczYTcyNDE0YTcwMWUxZTg3YjVlZTg3OSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTdmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXguaW5jCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQ2x1dHRlciBiYXNlZCBVSSB3aWRnZXQgbGlicmFyeSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCisKK2luaGVyaXQgY2x1dHRlciBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0RFUEVORFMgPSAiY2x1dHRlci0xLjAgZGJ1cy1nbGliIGdkay1waXhidWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NvdXJjZS5jbHV0dGVyLXByb2plY3Qub3JnL3NvdXJjZXMvbXgvJHtAZ2V0X3ZlcmRpcigiJHtQVn0iKX0vbXgtJHtQVn0udGFyLnh6IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24JCVwKKwkgICAgICAgIC0tZGlzYWJsZS1ndGstZG9jCQlcCisJICAgICAgICAtLWRpc2FibGUtZ3RrLXdpZGdldHMJCVwKKwkJLS13aXRoLWRidXMJCQlcCisJCS0td2l0aC13aW5zeXM9bm9uZQkJXAorCQktLXdpdGhvdXQtY2x1dHRlci1pbWNvbnRleHQJXAorCQktLXdpdGhvdXQtY2x1dHRlci1nZXN0dXJlCVwKKwkJLS13aXRob3V0LXN0YXJ0dXAtbm90aWZpY2F0aW9uCVwKKwkJLS13aXRob3V0LWdsYWRlCQkJXAorCSAgICAgICAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjdlNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIuYmIKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiQ2x1dHRlciBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyNiIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59LWNvcmUgXAorICAgICIKKworU1VNTUFSWV8ke1BOfS1jb3JlID0gIkNsdXR0ZXIgZ3JhcGhpY3MgbGlicmFyeSIKK1JERVBFTkRTXyR7UE59LWNvcmUgPSAiXAorICAgIGNsdXR0ZXItMS4wIFwKKyAgICBjbHV0dGVyLWdzdC0zLjAgXAorICAgIGNsdXR0ZXItZ3RrLTEuMCBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYzBhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJEaXJlY3RGQiB3aXRob3V0IFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitUT1VDSCA9ICcgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidG91Y2hzY3JlZW4iLCAidHNsaWIgdHNsaWItY2FsaWJyYXRlIHRzbGliLXRlc3RzIiwgIiIsZCl9JworCitSREVQRU5EU18ke1BOfSA9ICIgXAorCQlkaXJlY3RmYiBcCisJCWRpcmVjdGZiLWV4YW1wbGVzIFwKKwkJcGFuZ28gXAorCQlwYW5nby1tb2R1bGVzIFwKKwkJZm9udGNvbmZpZyBcCisJCSR7VE9VQ0h9IFwKKyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzAxYTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQmFzaWMgWDExIHNlc3Npb24iCitERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzZXQgdXAgYSBiYXNpYyB3b3JraW5nIFgxMSBzZXNzaW9uIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIG1hdGNoYm94LXdtCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXgxMS11dGlscyBcCisgICAgZGJ1cyBcCisgICAgcG9pbnRlcmNhbCBcCisgICAgbWF0Y2hib3gtdGVybWluYWwgXAorICAgIG1hdGNoYm94LXdtIFwKKyAgICBtaW5pLXgtc2Vzc2lvbiBcCisgICAgbGliZXJhdGlvbi1mb250cyBcCisgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlci5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzZjFiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworU1VNTUFSWSA9ICJYMTEgZGlzcGxheSBzZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0MCIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIFhTRVJWRVIKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyB4Zjg2LXZpZGVvLWZiZGV2IHhmODYtaW5wdXQtZXZkZXYiCitYU0VSVkVSQ09ERUNTID89ICIiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1hTRVJWRVJ9IFwKKyAgICAke1hTRVJWRVJDT0RFQ1N9IFwKKyAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzdkOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYgpAQCAtMCwwICsxLDM0IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0MCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIHgxMS1jb21tb24KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LXV0aWxzIgorCisjIHhzZXJ2ZXItY29tbW9uLCB4MTEtY29tbW9uCitWSVJUVUFMLVJVTlRJTUVfeHNlcnZlcl9jb21tb24gPz0gIngxMS1jb21tb24iCisKKyMgZWxzYSwgeHNlcnZlci1ub2RtLWluaXQKK1ZJUlRVQUwtUlVOVElNRV9ncmFwaGljYWxfaW5pdF9tYW5hZ2VyID89ICJ4c2VydmVyLW5vZG0taW5pdCIKKworU1VNTUFSWSA9ICJYMTEgZGlzcGxheSBzZXJ2ZXIgYW5kIGJhc2ljIHV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1BOfS14c2VydmVyIFwKKyAgICAke1BOfS11dGlscyBcCisgICAgIgorCitTVU1NQVJZXyR7UE59LXV0aWxzID0gIlgxMSBiYXNpYyB1dGlsaXRpZXMgYW5kIGluaXQiCitSREVQRU5EU18ke1BOfS11dGlscyA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfeHNlcnZlcl9jb21tb259IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9ncmFwaGljYWxfaW5pdF9tYW5hZ2VyfSBcCisgICAgeGF1dGggXAorICAgIHhob3N0IFwKKyAgICB4c2V0IFwKKyAgICB4cmFuZHIgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjBmZGY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28uaW5jCkBAIC0wLDAgKzEsOTkgQEAKK1NVTU1BUlkgPSAiRnJhbWV3b3JrIGZvciBsYXlvdXQgYW5kIHJlbmRlcmluZyBvZiBpbnRlcm5hdGlvbmFsaXplZCB0ZXh0IgorREVTQ1JJUFRJT04gPSAiUGFuZ28gaXMgYSBsaWJyYXJ5IGZvciBsYXlpbmcgb3V0IGFuZCByZW5kZXJpbmcgb2YgdGV4dCwgXAord2l0aCBhbiBlbXBoYXNpcyBvbiBpbnRlcm5hdGlvbmFsaXphdGlvbi4gUGFuZ28gY2FuIGJlIHVzZWQgYW55d2hlcmUgXAordGhhdCB0ZXh0IGxheW91dCBpcyBuZWVkZWQsIHRob3VnaCBtb3N0IG9mIHRoZSB3b3JrIG9uIFBhbmdvIHNvIGZhciBoYXMgXAorYmVlbiBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBHVEsrIHdpZGdldCB0b29sa2l0LiBQYW5nbyBmb3JtcyB0aGUgXAorY29yZSBvZiB0ZXh0IGFuZCBmb250IGhhbmRsaW5nIGZvciBHVEsrLTIueC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBhbmdvLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4wKyIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQiCitERVBFTkRTID0gImdsaWItMi4wIGZvbnRjb25maWcgZnJlZXR5cGUgemxpYiB2aXJ0dWFsL2xpYmljb252IGNhaXJvIGhhcmZidXp6IHFlbXUtbmF0aXZlIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICdwdGVzdCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteGZ0LC0td2l0aG91dC14ZnQsJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbcHRlc3RdID0gIi0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cywtLWRpc2FibGUtaW5zdGFsbGVkLXRlc3RzLGdsaWItMi4wLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnbGliLTIuMC1uYXRpdmUgY2Fpcm8tbmF0aXZlIGhhcmZidXp6LW5hdGl2ZSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXnBhbmdvLW1vZHVsZS0uKiIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAicGFuZ28tbW9kdWxlLWJhc2ljLWZjIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIHFlbXUgcHRlc3QKKworIyBDcmVhdGUgYSBwYW5nby1tb2R1bGVzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1tb2R1bGVzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LW1vZHVsZXMiCitSUkVDT01NRU5EU18ke0JQTn0tbW9kdWxlcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoInBhbmdvLW1vZHVsZSIpICE9IC0xXSl9IgorCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiIgorCisjIHNlZW1zIHRvIGdvIHdyb25nIHdpdGggZGVmYXVsdCBjZmxhZ3MKK0ZVTExfT1BUSU1JWkFUSU9OX2FybSA9ICItTzIiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisJCS0tZW5hYmxlLWV4cGxpY2l0LWRlcHM9bm8gXAorCSAgICAgICAgLS1kaXNhYmxlLWRlYnVnIFwKKwkgICAgICAgIC0td2l0aC1tbHByZWZpeD0ke01MUFJFRklYfSIKKworTEVBRF9TT05BTUUgPSAibGlicGFuZ28tMS4wKiIKK0xJQlYgPSAiMS44LjAiCisKK3BhbmdvX3Bvc3RpbnN0KCkgeworaWYgISBbIC1lICREJHtzeXNjb25mZGlyfS9wYW5nbyBdIDsgdGhlbgorCW1rZGlyIC1wICREJHtzeXNjb25mZGlyfS9wYW5nbworZmkKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywnJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzJyl9IFwKKwkJJEQke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzLyouc28gXAorCQk+ICREJHtzeXNjb25mZGlyfS9wYW5nby8ke01MUFJFRklYfXBhbmdvLm1vZHVsZXMgMj4vZGV2L251bGwKKworCVsgJD8gLW5lIDAgXSAmJiBleGl0IDEKKworCXNlZCAtaSAtZSAiczokRDo6IiAkRCR7c3lzY29uZmRpcn0vcGFuZ28vJHtNTFBSRUZJWH1wYW5nby5tb2R1bGVzCisKKwlleGl0IDAKK2Vsc2UKKwkke2JpbmRpcn0vJHtNTFBSRUZJWH1wYW5nby1xdWVyeW1vZHVsZXMgPiAvZXRjL3BhbmdvLyR7TUxQUkVGSVh9cGFuZ28ubW9kdWxlcworZmkKK30KKworIyBUaGlzIGJpbmFyeSBuZWVkcyB0byBiZSBjb21waWxlZCBmb3IgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiAgVGhpcyBpc24ndCBwcmV0dHkhCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWlmICR7QGJhc2VfY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCW1ha2UgQ0M9IiR7QlVJTERfQ0N9IiBDRkxBR1M9IiIgQU1fQ1BQRkxBR1M9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1jZmxhZ3MgZ2xpYi0yLjApIiBnZW5fYWxsX3VuaWNvZGVfTERBREQ9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1saWJzIGdsaWItMi4wKSIgLUMgJHtCfS90ZXN0cyBnZW4tYWxsLXVuaWNvZGUKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtNTFBSRUZJWH0iICE9ICIiIF07IHRoZW4KKwkJbXYgJHtEfS8ke2JpbmRpcn0vcGFuZ28tcXVlcnltb2R1bGVzICR7RH0vJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzIAorCWZpCit9CisKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIHBhbmdvX3Bvc3RpbnN0ID0gZC5nZXRWYXIoInBhbmdvX3Bvc3RpbnN0IiwgVHJ1ZSkKKworICAgIG1vZHVsZXNfcm9vdCA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzJykKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIG1vZHVsZXNfcm9vdCwgJ15wYW5nby0oLiopXC5zbyQnLCAncGFuZ28tbW9kdWxlLSVzJywgJ1BhbmdvIG1vZHVsZSAlcycsIHBhbmdvX3Bvc3RpbnN0KQorfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3BhbmdvLyogJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L2xpYnBhbmdvKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvKi5sYSIKKworRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLyogXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaW5zdGFsbGVkLXRlc3RzL3BhbmdvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8uZGVidWciCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJnbm9tZS1kZXNrdG9wLXRlc3RpbmcgbGliZXJhdGlvbi1mb250cyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQxNGRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIHRvIGFwcGx5IHRvIHBhbmdvLTEuMzIuNQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjIHBhbmdvLTEuMzIuNS9jb25maWd1cmUuYWMKKy0tLSBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjCTIwMTItMTItMDcgMDQ6NDM6MjUuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTA5IDA4OjI3OjQwLjMyODUxNjc5MiArMDIwMAorQEAgLTIxMyw2ICsyMTMsMTEgQEAKKworIEFDX1NVQlNUKFBBTkdPX0RFQlVHX0ZMQUdTKQorCisrQUNfQVJHX1dJVEgobWxwcmVmaXgsCisrICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1tbHByZWZpeD08QVJHPl0sIFttdWx0aWxpYiBwcmVmaXhdKSwKKysgICAgICAgICAgICBtbHByZWZpeF9zdHI9JHdpdGh2YWwsIG1scHJlZml4X3N0cj0iIikKKytBQ19ERUZJTkVfVU5RVU9URUQoW01MUFJFRklYXSwgWyIkbWxwcmVmaXhfc3RyIl0sIFttdWx0aWxpYiBwcmVmaXguXSkKKysKKyBBQ19BUkdfRU5BQkxFKHJlYnVpbGRzLAorICAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcmVidWlsZHNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlIGFsbCBzb3VyY2UgYXV0b2dlbmVyYXRpb24gcnVsZXNdKV0sLAorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMKKy0tLSBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jCTIwMTItMTItMTcgMjA6Mjc6NTYuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYwkyMDEzLTAxLTA5IDA4OjMxOjE2LjMzNjUxMjA1MiArMDIwMAorQEAgLTU1NSwxMSArNTU1LDExIEBACisgICAgICAgZmlsZXMgPSBnX25ldyAoY2hhciAqLCAzKTsKKworICAgICAgIGZpbGVzWzBdID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X3N5c2NvbmZfc3ViZGlyZWN0b3J5ICgpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmdvLm1vZHVsZXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxQUkVGSVggInBhbmdvLm1vZHVsZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZmlsZXNbMV0gPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfbGliX3N1YmRpcmVjdG9yeSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9WRVJTSU9OLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZXMuY2FjaGUiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxQUkVGSVggIm1vZHVsZXMuY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZmlsZXNbMl0gPSBOVUxMOworICAgICB9CitAQCAtNjc0LDcgKzY3NCw4IEBACisgICAgICAgaWYgKCFub19tb2R1bGVfd2FybmluZykKKwl7CisJICBnY2hhciAqZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfc3lzY29uZl9zdWJkaXJlY3RvcnkgKCksCistCQkJCQkgICAgICAicGFuZ28ubW9kdWxlcyIsCisrLyogRm9yIG11bHRpbGliIGNhc2UsIGtlZXAgbXVsdGlwbGUgY29uZmlnIGZpbGUgZm9yIGRpZmZlcmVudCBsaWJzICovCisrCQkJCQkgICAgICBNTFBSRUZJWCAicGFuZ28ubW9kdWxlcyIsCisJCQkJCSAgICAgIE5VTEwpOworCSAgZ19jcml0aWNhbCAoIk5vIG1vZHVsZXMgZm91bmQ6XG4iCisJCSAgICAgICJObyBidWlsdGluIG9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIHdlcmUgZm91bmQuXG4iCitkaWZmIC1OdXJkIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYy5yZWoJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlagkyMDEzLTAxLTA5IDA4OjI3OjQwLjMyODUxNjc5MiArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKy0tLSBwYW5nby9tb2R1bGVzLmMJMjAxMC0wOS0yMiAwMzozNzowMS4wMDAwMDAwMDAgKzA4MDAKKysrKysgcGFuZ28vbW9kdWxlcy5jCTIwMTItMDUtMDggMjE6MjE6MDIuMDAwMDAwMDAwICswODAwCisrQEAgLTUyOSw3ICs1MjksOCBAQAorKworKyAgIGlmICghZmlsZV9zdHIpCisrICAgICBmaWxlX3N0ciA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9zeXNjb25mX3N1YmRpcmVjdG9yeSAoKSwKKystCQkJCSAicGFuZ28ubW9kdWxlcyIsCisrKy8qIEZvciBtdWx0aWxpYiBjYXNlLCBrZWVwIG11bHRpcGxlIGNvbmZpZyBmaWxlIGZvciBkaWZmZXJlbnQgbGlicyAqLworKysJCQkJIE1MUFJFRklYICJwYW5nby5tb2R1bGVzIiwKKysgCQkJCSBOVUxMKTsKKysKKysgICBmaWxlcyA9IHBhbmdvX3NwbGl0X2ZpbGVfbGlzdCAoZmlsZV9zdHIpOworZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vcXVlcnltb2R1bGVzLmMgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCTIwMTItMDgtMjggMTU6Mjc6MTguMDAwMDAwMDAwICswMzAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCTIwMTMtMDEtMDkgMDg6MzE6NDcuODI4NTExMzU5ICswMjAwCitAQCAtMzA0LDcgKzMwNCw3IEBACisKKyAgICAgICBjYWNoZV9maWxlID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X2xpYl9zdWJkaXJlY3RvcnkgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9WRVJTSU9OLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kdWxlcy5jYWNoZSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUFJFRklYICJtb2R1bGVzLmNhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZXJyID0gTlVMTDsKKyAgICAgICBpZiAoIWdfZmlsZV9zZXRfY29udGVudHMgKGNhY2hlX2ZpbGUsIGNvbnRlbnRzLT5zdHIsIC0xLCAmZXJyKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTg3YTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEgL2Jpbi9zaAorCitnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIHBhbmdvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNDI1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuMzYuOC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHBhbmdvLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoIFwKKyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjE3YTlhNzUzMDA2Mjc1MjE1ZmE5ZmExMjc3NjBlY2UiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxOGRiYjUxYjhhZTEyYmFlMGFiN2E5NThlN2NmMzMxN2M5YWNmYzhhMWUxMTAzZWMyZjE0NzE2NGEwZmMyZDA3IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3Y2MwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworRnJvbSBlNDBlMGEyNWY5OTZkMmUyMDVjNGJkZWMyYzhhNWNjN2Y3NGU1MDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTY6MjU6MzAgLTAzMDAKK1N1YmplY3Q6IHRlc3RzOiBGaXggbWlzc2luZyBpbmNsdWRlIG9mIFh1dGlsLmgKKworVGhlIEVHTCB0ZXN0cyByZWx5IG9uIFh1dGlsLmggYmVpbmcgaW5jbHVkZWQuIFNvbWUgRUdMIGltcGxlbWVudGF0aW9uCitkb2VzIG5vdCBleHBsaXRseSBpbmNsdWRlIGl0IGJ5IGRlZmF1bHQgYW5kIHRoZW4gdGhlIGJ1aWxkIGZhaWxzLgorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorUmV2aWV3ZWQtYnk6IE5laWwgUm9iZXJ0cyA8bmVpbEBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jIGIvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYworaW5kZXggMDUwNGEyNi4uMTU0YjU1YyAxMDA2NDQKKy0tLSBhL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKKysrKyBiL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKK0BAIC0zMiw2ICszMiw3IEBACisgLyogQ2h1bmtzIG9mIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSB0YWtlbiBmcm9tIGVnbC11dGlsLmMgKi8KKyAKKyAjaW5jbHVkZSA8WDExL1hsaWIuaD4KKysjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisgCisgI2luY2x1ZGUgInBpZ2xpdC11dGlsLWdsLmgiCisgI2luY2x1ZGUgInBpZ2xpdC11dGlsLWVnbC5oIgorLS0gCitjZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4MjVjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGRyaXZlciB0ZXN0aW5nIGZyYW1ld29yayIKK0xJQ0VOU0UgPSAiTUlUICYgTEdQTHYyKyAmIEdQTHYzICYgR1BMdjIrICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjJiZWRlZDcxMDNhM2Q4YTQ0MmEyYTAzOTFkNjA3YjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvcGlnbGl0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoIgorCisjIEZyb20gMjAxNC8xMi8wNAorU1JDUkVWID0gIjEyNmM3ZDA0OWI4ZjMyZTU0MTYyNWQ1YTM1ZmJjNWY1ZTRlN2ZiZjgiCisjICh3aGVuIFBWIGdvZXMgYWJvdmUgMS4wIHJlbW92ZSB0aGUgdHJhaWxpbmcgcikKK1BWID0gIjEuMCtnaXRyJHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieHJlbmRlciB3YWZmbGUgdmlydHVhbC9saWJnbCBsaWJnbHUgcHl0aG9uLW1ha28tbmF0aXZlIHB5dGhvbi1udW1weS1uYXRpdmUiCisKK2luaGVyaXQgY21ha2UgcHl0aG9ubmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tmcmVlZ2x1dF0gPSAiLURQSUdMSVRfVVNFX0dMVVQ9MSwtRFBJR0xJVF9VU0VfR0xVVD0wLGZyZWVnbHV0LCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICBpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdmcmVlZ2x1dCcsICd5ZXMnLCAnbm8nLCBkKX0iID0gIm5vIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAiL14jLippbmNsdWRlIDxHTFwvZnJlZWdsdXRfZXh0Lmg+JC9kIiAke1N9L3NyYy9waWdsaXQvZ2x1dF93cmFwLmgKKyAgICAgICAgc2VkIC1pIC1lICIvXiMuKmluY2x1ZGUuKjxHTFwvZ2x1dC5oPiQvZCIgJHtTfS9zcmMvcGlnbGl0L2dsdXRfd3JhcC5oCisgICBmaQorfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9waWdsaXQvKi8uZGVidWcvIgorCitSREVQRU5EU18ke1BOfSA9ICJ3YWZmbGUgcHl0aG9uIHB5dGhvbi1tYWtvIHB5dGhvbi1qc29uIHB5dGhvbi1zdWJwcm9jZXNzIFwKKwlweXRob24tYXJncGFyc2UgcHl0aG9uLWltcG9ydGxpYiBweXRob24tdW5peGFkbWluIFwKKwlweXRob24tbXVsdGlwcm9jZXNzaW5nIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLW5ldHNlcnZlciBweXRob24tc2hlbGwgXAorCW1lc2EtZGVtb3MgYmFzaCBcCisJIgorCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2ViYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2svcG9uZy1jbG9jay1uby1mbGlja2VyLmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiBQb25nIENsb2NrIC0gQSBjbG9jayB0aGF0IHBsYXlzIHBvbmcuIAorICogICAgICAgICAgICAgU2VlIGh0dHA6Ly9tb2NvbG9jby5jb20vYXJjaGl2ZXMvMDAxNzY2LnBocCBmb3IgdGhlIGluc3BpcmF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNYXR0aGV3IEFsbHVtCisgKgorICogQXV0aG9yOiBNYXR0aGV3IEFsbHVtIG1hbGx1bUBvcGVuZWRoYW5kLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGF0b20uaD4KKworLyogVHdlYWsgdmFsdWVzIGZvciBkaWZmZXJlbnQgaHcgc2V0dXBzICovCisKKyNkZWZpbmUgRlBTICAgICAgICAgIDUwCisjZGVmaW5lIFJFU1ggICAgICAgICA0MAorI2RlZmluZSBSRVNZICAgICAgICAgNDAKKyNkZWZpbmUgVE9fTUlTU19TRUNTIDU1CisjZGVmaW5lIEJBTExEWCAgICAgICAxNgorI2RlZmluZSBCQUxMRFkgICAgICAgNAorCisKK3R5cGVkZWYgc3RydWN0IFBvbmdDbG9jaworeworICBEaXNwbGF5ICp4ZHB5OworICBpbnQgICAgICB4c2NyZWVuOworICBXaW5kb3cgICB4d2luLCB4d2luX3Jvb3Q7CisgIFBpeG1hcCAgIGJhY2tidWZmZXI7CisgIEdDICAgICAgIHhnYzsKKyAgaW50ICAgICAgeHdpbl93aWR0aCwgeHdpbl9oZWlnaHQ7CisgIGludCAgICAgIHBpeGVsdywgcGl4ZWxoOworCisgIGludCAgICAgIGJhbGxfeCwgYmFsbF95LCBiYWxsX2R4LCBiYWxsX2R5OworICBpbnQgICAgICBiYXRhX3ksIGJhdGJfeTsKKyAgQm9vbCAgICAgYmF0YV90b19taXNzLCBiYXRiX3RvX21pc3M7CisKK30gCitQb25nQ2xvY2s7CisKK3ZvaWQKK2dldF90aW1lKGludCAqaG91ciwgaW50ICptaW4sIGludCAqc2VjKQoreworICBzdHJ1Y3QgdGltZXZhbCAgIHR2OworICBzdHJ1Y3QgdG0gICAgICAgKmxvY2FsVGltZSA9IE5VTEw7IAorICB0aW1lX3QgICAgICAgICAgIGFjdHVhbFRpbWU7CisKKyAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisgIGFjdHVhbFRpbWUgPSB0di50dl9zZWM7CisgIGxvY2FsVGltZSA9IGxvY2FsdGltZSgmYWN0dWFsVGltZSk7CisKKyAgaWYgKGhvdXIpCisgICAgKmhvdXIgPSBsb2NhbFRpbWUtPnRtX2hvdXI7CisgIAorICBpZiAobWluKQorICAgICptaW4gID0gbG9jYWxUaW1lLT50bV9taW47CisKKyAgaWYgKHNlYykKKyAgICAqc2VjICA9IGxvY2FsVGltZS0+dG1fc2VjOworfQorCit2b2lkCitkcmF3X3JlY3QgKFBvbmdDbG9jayAqcG9uZ19jbG9jaywgCisJICAgaW50ICAgICAgICB4LAorCSAgIGludCAgICAgICAgeSwKKwkgICBpbnQgICAgICAgIHdpZHRoLAorCSAgIGludCAgICAgICAgaGVpZ2h0KQoreworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICB4ICogcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHkgKiBwb25nX2Nsb2NrLT5waXhlbGgsCisJCSAgd2lkdGggKiBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgaGVpZ2h0ICogcG9uZ19jbG9jay0+cGl4ZWxoKTsKK30KKwordm9pZAorZHJhd19maWVsZCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICBpbnQgaTsKKworICBkcmF3X3JlY3QgKHBvbmdfY2xvY2ssIDAsIDAsIFJFU1grMSwgMSk7ICAKKyAgZHJhd19yZWN0IChwb25nX2Nsb2NrLCAwLCBSRVNZLTEsIFJFU1grMSwgMSk7ICAKKworICBmb3IgKGk9MDsgaSA8IFJFU1kvMjsgaSsrKQorICAgIGRyYXdfcmVjdCAocG9uZ19jbG9jaywgKFJFU1gvMiktMSwgaSoyLCAyLCAxKTsgIAorfQorCit2b2lkCitkcmF3X2RpZ2l0IChQb25nQ2xvY2sgKnBvbmdfY2xvY2ssIAorCSAgICBpbnQgICAgICAgIHgsCisJICAgIGludCAgICAgICAgeSwKKwkgICAgaW50ICAgICAgICBkaWdpdCkKK3sKKyAgaW50IGRpZ2l0c1tdID0geyAweDFmOGM2M2YsIDB4MWYyMTA4NiwgMHgxZjBmZTFmLCAweDFmODdlMWYsIDB4MTA4N2UzMSwKKwkJICAgMHgxZjg3YzNmLCAweDFmOGZjM2YsIDB4ODQ0MjFmLCAgMHgxZjhmZTNmLCAweDEwODdlM2YgfTsKKworICBYUmVjdGFuZ2xlIHJlY3RzWzUqNV07CisgIGludCBpLGosazsKKworICBpID0gMDsKKworICBmb3IgKGs9MDsgazw1OyBrKyspIAorICAgIGZvciAoaj0wOyBqPDU7IGorKykJCisgICAgICBpZiAoZGlnaXRzW2RpZ2l0XSAmICgxIDw8ICgoayo1KStqKSkpCisJeworCSAgcmVjdHNbaV0ueCAgICAgID0gKHggKyBqKSAqIHBvbmdfY2xvY2stPnBpeGVsdzsgCisJICByZWN0c1tpXS55ICAgICAgPSAoeSArIGspICogcG9uZ19jbG9jay0+cGl4ZWxoOyAKKwkgIHJlY3RzW2ldLndpZHRoICA9IHBvbmdfY2xvY2stPnBpeGVsdzsKKwkgIHJlY3RzW2ldLmhlaWdodCA9IHBvbmdfY2xvY2stPnBpeGVsaDsgIAorCSAgaSsrOworCX0KKworICBYRmlsbFJlY3RhbmdsZXMgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgIHBvbmdfY2xvY2stPnhnYywKKwkJICAgcmVjdHMsIGkpOworfSAKKwordm9pZAorZHJhd190aW1lIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIGludCBob3VyLCBtaW47CisKKyAgZ2V0X3RpbWUoJmhvdXIsICZtaW4sIE5VTEwpOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpIC0gMTQsCisJICAgICAgNSwKKwkgICAgICBob3VyIC8gMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSAtIDgsCisJICAgICAgNSwKKwkgICAgICBob3VyICUgMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSArIDMsCisJICAgICAgNSwKKwkgICAgICBtaW4gLyAxMCApOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpICsgOSwKKwkgICAgICA1LAorCSAgICAgIG1pbiAlIDEwICk7Cit9CisKK3ZvaWQKK2RyYXdfYmF0X2FuZF9iYWxsIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIC8qIGJhbGwgKi8KKworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBwb25nX2Nsb2NrLT5iYWxsX3gsCisJCSAgcG9uZ19jbG9jay0+YmFsbF95LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICBwb25nX2Nsb2NrLT5waXhlbGgpOworCisgIC8qIGJhdCBhICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgMCwKKwkJICBwb25nX2Nsb2NrLT5iYXRhX3kgLSAoMiAqIHBvbmdfY2xvY2stPnBpeGVsaCksCisJCSAgcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsaCAqIDUpOworCisgIC8qIGJhdCBiICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgKHBvbmdfY2xvY2stPnh3aW5fd2lkdGggLSBwb25nX2Nsb2NrLT5waXhlbHcpLAorCQkgIHBvbmdfY2xvY2stPmJhdGJfeSAtICgyICogcG9uZ19jbG9jay0+cGl4ZWxoKSwKKwkJICBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgcG9uZ19jbG9jay0+cGl4ZWxoICogNSk7CisKK30KKwordm9pZAordXBkYXRlX3N0YXRlIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIGludCBzZWMsIG1pbiwgaG91cjsKKworICBnZXRfdGltZSgmaG91ciwgJm1pbiwgJnNlYyk7CisKKyAgLyogQ2hlY2sgYmFsbCBpcyBvbiBmaWVsZCBhbmQgbm8gb25lcyBkdWVzIHRvIG1pc3MgYSBzaG90LgorICAqLworICBpZiAoIChwb25nX2Nsb2NrLT5iYWxsX3ggPCAwICYmICFwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MpIAorICAgICAgfHwgKHBvbmdfY2xvY2stPmJhbGxfeCA+IChwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3KQorCSAgJiYgIXBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykgKQorICAgIHBvbmdfY2xvY2stPmJhbGxfZHggKj0gLTE7CisKKyAgaWYgKChwb25nX2Nsb2NrLT5iYWxsX3kgPCBwb25nX2Nsb2NrLT5waXhlbGgpCisgICAgICB8fCBwb25nX2Nsb2NrLT5iYWxsX3kgPiAocG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLSAoMipwb25nX2Nsb2NrLT5waXhlbGgpKSkKKyAgICBwb25nX2Nsb2NrLT5iYWxsX2R5ICo9IC0xOyAKKworICBwb25nX2Nsb2NrLT5iYWxsX3ggKz0gcG9uZ19jbG9jay0+YmFsbF9keDsKKyAgcG9uZ19jbG9jay0+YmFsbF95ICs9IHBvbmdfY2xvY2stPmJhbGxfZHk7CisKKyAgLyogU2V0IHVwIHNvbWVvbmUgdG8gbWlzcyBpZiB3ZSBnZXR0aW5nIGNsb3NlIHRvIGFuIGhvdXIgb3IgbWluLiAKKyAgICovCisgIGlmIChzZWMgPiBUT19NSVNTX1NFQ1MpCisgICAgeworICAgICAgaWYgKG1pbiA9PSA1OSkKKwlwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MgPSBUcnVlOwkKKyAgICAgIGVsc2UKKwlwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MgPSBUcnVlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFJlc2V0IHRoZSBnYW1lICovCisgICAgICBpZiAocG9uZ19jbG9jay0+YmF0YV90b19taXNzKQorCXsKKwkgIHBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcyA9IEZhbHNlOworCSAgcG9uZ19jbG9jay0+YmFsbF95ID0gcG9uZ19jbG9jay0+YmF0YV95OyAKKwkgIHBvbmdfY2xvY2stPmJhbGxfeCA9IHBvbmdfY2xvY2stPnBpeGVsdzsgCisJICBwb25nX2Nsb2NrLT5iYWxsX2R4ICo9IC0xOworCX0KKworICAgICAgaWYgKHBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykKKwl7CisJICBwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MgPSBGYWxzZTsKKwkgIHBvbmdfY2xvY2stPmJhbGxfeSA9IHBvbmdfY2xvY2stPmJhdGJfeTsgCisJICBwb25nX2Nsb2NrLT5iYWxsX3ggPSBwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3OworCSAgcG9uZ19jbG9jay0+YmFsbF9keCAqPSAtMTsgCisJfQorICAgIH0KKworICAvKiBLZWVwIGJhdHMgb24gZmllbGQgYW5kIG9ubHkgbW92ZSBpbiBub3Qgc2V0dXAgdG8gbWlzcyAqLworICBpZiAocG9uZ19jbG9jay0+YmFsbF95ID49ICgzKnBvbmdfY2xvY2stPnBpeGVsaCkKKyAgICAgICYmIHBvbmdfY2xvY2stPmJhbGxfeSA8PSAgKHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC0gKDUqcG9uZ19jbG9jay0+cGl4ZWxoKSkpCisgIHsKKyAgICBpZiAoIXBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykgCisgICAgICBwb25nX2Nsb2NrLT5iYXRiX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisKKyAgICBpZiAoIXBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcykKKyAgICAgIHBvbmdfY2xvY2stPmJhdGFfeSA9IHBvbmdfY2xvY2stPmJhbGxfeTsKKyAgfQorfQorCit2b2lkCitkcmF3X2ZyYW1lIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIHVwZGF0ZV9zdGF0ZSAocG9uZ19jbG9jayk7CisKKyAgLyogQ2xlYXIgcGxheWZpZWxkICovCisgIFhTZXRGb3JlZ3JvdW5kIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgMCwgMCwKKwkJICBwb25nX2Nsb2NrLT54d2luX3dpZHRoLCAKKwkJICBwb25nX2Nsb2NrLT54d2luX2hlaWdodCk7CisKKyAgWFNldEZvcmVncm91bmQgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBkcmF3X2ZpZWxkIChwb25nX2Nsb2NrKTsKKworICBkcmF3X3RpbWUgKHBvbmdfY2xvY2spOworCisgIGRyYXdfYmF0X2FuZF9iYWxsIChwb25nX2Nsb2NrKTsKKworICAvKiBmbGlwICdiYWNrYnVmZmVyJyAqLworICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcCAocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBwb25nX2Nsb2NrLT54d2luLAorCQkJICAgICAgcG9uZ19jbG9jay0+YmFja2J1ZmZlcik7CisgIFhDbGVhcldpbmRvdyhwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luKTsKKworICBYU3luYyhwb25nX2Nsb2NrLT54ZHB5LCBGYWxzZSk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBYR0NWYWx1ZXMgIGdjdjsKKyAgQXRvbSAgICAgICBhdG9tc19XSU5ET1dfU1RBVEUsIGF0b21zX1dJTkRPV19TVEFURV9GVUxMU0NSRUVOOworICBQb25nQ2xvY2sgKnBvbmdfY2xvY2s7CisKKyAgcG9uZ19jbG9jayA9IG1hbGxvYyhzaXplb2YoUG9uZ0Nsb2NrKSk7CisgIG1lbXNldChwb25nX2Nsb2NrLCAwLCBzaXplb2YoUG9uZ0Nsb2NrKSk7CisKKyAgaWYgKChwb25nX2Nsb2NrLT54ZHB5ID0gWE9wZW5EaXNwbGF5KGdldGVudigiRElTUExBWSIpKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIgb24gZGlzcGxheSAlcy4iLAorCSAgICBnZXRlbnYoIkRJU1BMQVkiKSk7CisgICAgZXhpdCgtMSk7CisgIH0KKworICBwb25nX2Nsb2NrLT54c2NyZWVuICAgICA9IERlZmF1bHRTY3JlZW4ocG9uZ19jbG9jay0+eGRweSk7CisgIHBvbmdfY2xvY2stPnh3aW5fcm9vdCAgID0gRGVmYXVsdFJvb3RXaW5kb3cocG9uZ19jbG9jay0+eGRweSk7CisgIHBvbmdfY2xvY2stPnh3aW5fd2lkdGggID0gRGlzcGxheVdpZHRoKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkgcG9uZ19jbG9jay0+eHNjcmVlbik7CisgIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0ID0gRGlzcGxheUhlaWdodChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJICBwb25nX2Nsb2NrLT54c2NyZWVuKTsKKworICBwb25nX2Nsb2NrLT5waXhlbHcgID0gcG9uZ19jbG9jay0+eHdpbl93aWR0aCAgLyBSRVNYOworICBwb25nX2Nsb2NrLT5waXhlbGggID0gcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLyBSRVNZOworCisgIHBvbmdfY2xvY2stPmJhbGxfeCA9IDA7IAorICBwb25nX2Nsb2NrLT5iYWxsX3kgPSBwb25nX2Nsb2NrLT54d2luX2hlaWdodCAvIDI7IAorCisgIHBvbmdfY2xvY2stPmJhbGxfZHggPSBCQUxMRFg7IAorICBwb25nX2Nsb2NrLT5iYWxsX2R5ID0gQkFMTERZOyAKKworICBwb25nX2Nsb2NrLT5iYXRiX3kgPSBwb25nX2Nsb2NrLT5iYXRhX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisKKyAgZ2N2LmJhY2tncm91bmQgPSBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgcG9uZ19jbG9jay0+eHNjcmVlbik7CisgIGdjdi5mb3JlZ3JvdW5kID0gV2hpdGVQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pOworICBnY3YuZ3JhcGhpY3NfZXhwb3N1cmVzID0gRmFsc2U7CisKKyAgcG9uZ19jbG9jay0+eGdjID0gWENyZWF0ZUdDIChwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luX3Jvb3QsIAorCQkJICAgICAgIEdDRm9yZWdyb3VuZHxHQ0JhY2tncm91bmR8R0NHcmFwaGljc0V4cG9zdXJlcywKKwkJCSAgICAgICAmZ2N2KTsKKworICBhdG9tc19XSU5ET1dfU1RBVEUKKyAgICA9IFhJbnRlcm5BdG9tKHBvbmdfY2xvY2stPnhkcHksICJfTkVUX1dNX1NUQVRFIixGYWxzZSk7CisgIGF0b21zX1dJTkRPV19TVEFURV9GVUxMU0NSRUVOCisgICAgPSBYSW50ZXJuQXRvbShwb25nX2Nsb2NrLT54ZHB5LCAiX05FVF9XTV9TVEFURV9GVUxMU0NSRUVOIixGYWxzZSk7CisKKyAgcG9uZ19jbG9jay0+eHdpbiA9IFhDcmVhdGVTaW1wbGVXaW5kb3cocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3Jvb3QsIAorCQkJCQkgMCwgMCwKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fd2lkdGgsIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQsIAorCQkJCQkgMCwKKwkJCQkJIFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCQkgICAgcG9uZ19jbG9jay0+eHNjcmVlbiksCisJCQkJCSBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyID0gWENyZWF0ZVBpeG1hcChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fcm9vdCwKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fd2lkdGgsIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQsIAorCQkJCQkgRGVmYXVsdERlcHRoKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgICAgcG9uZ19jbG9jay0+eHNjcmVlbikpOworCisgIFhTZWxlY3RJbnB1dChwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luLCBLZXlQcmVzc01hc2spOworICAKKworICAvKiBTZXQgdGhlIGhpbnRzIGZvciBmdWxsc2NyZWVuICovCisgIFhDaGFuZ2VQcm9wZXJ0eShwb25nX2Nsb2NrLT54ZHB5LCAKKwkJICBwb25nX2Nsb2NrLT54d2luLCAKKwkJICBhdG9tc19XSU5ET1dfU1RBVEUsIAorCQkgIFhBX0FUT00sIAorCQkgIDMyLCAKKwkJICBQcm9wTW9kZVJlcGxhY2UsIAorCQkgICh1bnNpZ25lZCBjaGFyICopICZhdG9tc19XSU5ET1dfU1RBVEVfRlVMTFNDUkVFTiwgMSk7CisKKyAgWE1hcFdpbmRvdyhwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luKTsKKyAgCisgIHdoaWxlIChUcnVlKSAKKyAgICB7CisgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgWEV2ZW50ICAgICAgICAgeGV2OworCisgICAgICB0aW1lb3V0LnR2X3NlYyAgPSAwOworICAgICAgdGltZW91dC50dl91c2VjID0gMTAwMDAwMCAvIEZQUzsgCisgICAgICBzZWxlY3QgKDAsIE5VTEwsIE5VTEwsIE5VTEwsICZ0aW1lb3V0KTsKKworICAgICAgZHJhd19mcmFtZSAocG9uZ19jbG9jayk7CisKKyAgICAgIFhGbHVzaChwb25nX2Nsb2NrLT54ZHB5KTsKKworICAgICAgaWYgKFhQZW5kaW5nKHBvbmdfY2xvY2stPnhkcHkpKQorCXsKKwkgIGlmIChYQ2hlY2tNYXNrRXZlbnQocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBLZXlQcmVzc01hc2ssCisJCQkgICAgICAmeGV2KSkKKwkgICAgZXhpdCgtMSk7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9ja18xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMWE3OTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiQSBjbG9jayBjb21iaW5lZCB3aXRoIGEgZ2FtZSBvZiBwb25nIgorTElDRU5TRSA9ICJHUEx2MisiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIHhkbWNwIHhhdSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9uZy1jbG9jay1uby1mbGlja2VyLmMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BvbmctY2xvY2stbm8tZmxpY2tlci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWRkMjQ4ZDUwZjczZjc0NmQxZWU3ODU4NmIwYjJlYmQzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUgKCkgeworCSR7Q0N9IC1vIHBvbmctY2xvY2sgcG9uZy1jbG9jay1uby1mbGlja2VyLmMgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIHgxMSB4YXUgeGRtY3BgCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBwb25nLWNsb2NrICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4NmYyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA5N10KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4gc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4KKy0tLSBzdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL2NvbmZpZ3VyZS5pbgkyMDExLTA1LTE2IDE3OjI5OjIwLjAwMDAwMDAwMCArMDMwMAorKysrIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluCTIwMTMtMDEtMDcgMDY6MDA6NDguOTIxOTA1NDA5ICswMjAwCitAQCAtMyw3ICszLDcgQEAKKyBBQ19DT05GSUdfU1JDRElSKGxpYnNuL3NuLWxhdW5jaGVlLmMpCisKKyBBTV9JTklUX0FVVE9NQUtFCistQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKworICMgSG9ub3IgYWNsb2NhbCBmbGFncworIEFDX1NVQlNUKEFDTE9DQUxfQU1GTEFHUywgIlwke0FDTE9DQUxfRkxBR1N9IikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uXzAuMTIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMWI5M2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiRW5hYmxlcyBtb25pdG9yaW5nIGFuZCBkaXNwbGF5IG9mIGFwcGxpY2F0aW9uIHN0YXJ0dXAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3N0YXJ0dXAtbm90aWZpY2F0aW9uLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9U3BlY2lmaWNhdGlvbnMiCisKKyMgbW9zdCBmaWxlcyBhcmUgdW5kZXIgTUlULCBidXQgbGlic24vc24tdXRpbC5jIGlzIHVuZGVyIExHUEwsIHRoZQorIyBlZmZlY3RpdmUgbGljZW5zZSBpcyBMR1BMCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMmFlMmNkNDdkNmQyZjIzODQxMGY1MzY0ZGZiYzBmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJzbi9zbi11dGlsLmM7ZW5kbGluZT0xODttZDU9MThhMTRkYzE4MjVkMzhlNzQxZDc3MjMxMWZlYTllZTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlic24vc24tY29tbW9uLmg7ZW5kbGluZT0yMzttZDU9NmQwNWJjMGViZGNmNTUxM2E2ZTc3Y2IyNmU4Y2Q3ZTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdC90ZXN0LWJvaWxlcnBsYXRlLmg7ZW5kbGluZT0yMzttZDU9OTIzZTcwNmIyYTcwNTg2MTc2ZWVhZDI2MWNjNWJiOTgiCisKK1BSID0gInIyIgorCitTRUNUSU9OID0gImxpYnMiCisKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSB4Y2ItdXRpbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjJjZDc3MzI2ZDRkY2FlZDlhNWEyM2ExMjMyZmIzOGU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMzkxZjdlOTMwYzU4MzA5NTA0NWNkMmQxMGViNzNhNjRmMDg1YzdmZGU5ZDI2MGYyNjUyYzdjYjNjZmJlNGEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90cy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBkYTkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZgpAQCAtMCwwICsxLDI1IEBACisjIFVuY29tbWVudCBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIGxpbnV4IGlucHV0IGxheWVyIGV2ZW50IGludGVyZmFjZQorbW9kdWxlX3JhdyBpbnB1dAorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtNTUwMC9TTC01MDAwZAorIyBtb2R1bGVfcmF3IGNvbGxpZQorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtQzcwMC9DNzUwL0M3NjAvQzg2MAorIyBtb2R1bGVfcmF3IGNvcmdpCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIGRldmljZSB3aXRoIGEgVUNCMTIwMC8xMzAwLzE0MDAgVFMgaW50ZXJmYWNlCisjIG1vZHVsZV9yYXcgdWNiMXgwMAorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSFAgaVBhcSBoMzYwMCBvciBzaW1pbGFyCisjIG1vZHVsZV9yYXcgaDM2MDAKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgSGl0YWNoaSBXZWJwYWQKKyMgbW9kdWxlX3JhdyBtazcxMgorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSUJNIEFyY3RpYyBJSQorIyBtb2R1bGVfcmF3IGFyY3RpYzIKKworbW9kdWxlIHB0aHJlcyBwbWluPTEKK21vZHVsZSB2YXJpYW5jZSBkZWx0YT0zMAorbW9kdWxlIGRlaml0dGVyIGRlbHRhPTEwMAorbW9kdWxlIGxpbmVhcgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90c2xpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY4ZThkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2gKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKworaWYgWyAtZSAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCBdOyB0aGVuCisgICAgVFNMSUJfVFNERVZJQ0U9L2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKKworICAgIGV4cG9ydCBUU0xJQl9UU0RFVklDRQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGM3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjEuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJBbiBhYnN0cmFjdGlvbiBsYXllciBmb3IgdG91Y2hzY3JlZW4gcGFuZWwgZXZlbnRzIgorREVTQ1JJUFRJT04gPSAiVHNsaWIgaXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRvdWNoc2NyZWVuIHBhbmVsIFwKK2V2ZW50cywgYXMgd2VsbCBhcyBhIGZpbHRlciBzdGFjayBmb3IgdGhlIG1hbmlwdWxhdGlvbiBvZiB0aG9zZSBldmVudHMuIFwKK1RzbGliIGlzIGdlbmVyYWxseSB1c2VkIG9uIGVtYmVkZGVkIGRldmljZXMgdG8gcHJvdmlkZSBhIGNvbW1vbiB1c2VyIFwKK3NwYWNlIGludGVyZmFjZSB0byB0b3VjaHNjcmVlbiBmdW5jdGlvbmFsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly90c2xpYi5iZXJsaW9zLmRlLyIKKworQVVUSE9SID0gIlJ1c3NlbGwgS2luZyB3LyBwbHVnaW5zIGJ5IENocmlzIExhcnNvbiBldC4gYWwuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMzBhOTcxNmVmMzc2MmUzNDY3YTJmNjJiZjc5MGYwYSIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS90c2xpYi0ke1BWfS50YXIueHo7ZG93bmxvYWRmaWxlbmFtZT10c2xpYi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly90c2xpYi5zaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNDc3MWY4NjA3YjM0MWJiNGIyOTc4MTlkMzdlODM3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZTM1ZTVmNzEwZWE5MzNiMTE4ZjcxMGUyY2U0NDAzYWMwNzZmZTY5OTI2YjU3MDMzMzg2N2Q0ZGUwODJhNTFjIgorCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1oMzYwMCAtLWVuYWJsZS1pbnB1dCAtLWRpc2FibGUtY29yZ2kgLS1kaXNhYmxlLWNvbGxpZSAtLWRpc2FibGUtbWs3MTIgLS1kaXNhYmxlLWFyY3RpYzIgLS1kaXNhYmxlLXVjYjF4MDAiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90cy5jb25mICR7U30vZXRjL3RzLmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdHNsaWIuc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCisjIFBlb3BsZSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdWRldidzIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIHN5bWxpbmsKKyMgaW5zdGVhZCBvZiBkZXRlY3Qtc3R5bHVzCisjUkRFUEVORFNfdHNsaWItY29uZl93ZWlyZC1tYWNoaW5lID0gImRldGVjdC1zdHlsdXMiCitSUFJPVklERVNfdHNsaWItY29uZiA9ICJsaWJ0cy0wLjAtY29uZiIKKworUEFDS0FHRVMgPSsgInRzbGliLWNvbmYgdHNsaWItdGVzdHMgdHNsaWItY2FsaWJyYXRlIgorREVCSUFOX05PQVVUT05BTUVfdHNsaWItY29uZiA9ICIxIgorREVCSUFOX05PQVVUT05BTUVfdHNsaWItdGVzdHMgPSAiMSIKK0RFQklBTl9OT0FVVE9OQU1FX3RzbGliLWNhbGlicmF0ZSA9ICIxIgorCitSREVQRU5EU18ke1BOfSA9ICJ0c2xpYi1jb25mIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicG9pbnRlcmNhbCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdHMvLmRlYnVnKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3RzLyoubGEiCitGSUxFU190c2xpYi1jb25mID0gIiR7c3lzY29uZmRpcn0vdHMuY29uZiAke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC90c2xpYi5zaCAke2RhdGFkaXJ9L3RzbGliIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vdHMvKi5zbyoiCitGSUxFU190c2xpYi1jYWxpYnJhdGUgKz0gIiR7YmluZGlyfS90c19jYWxpYnJhdGUiCitGSUxFU190c2xpYi10ZXN0cyA9ICIke2JpbmRpcn0vdHNfaGFydmVzdCAke2JpbmRpcn0vdHNfcHJpbnQgJHtiaW5kaXJ9L3RzX3ByaW50X3JhdyAke2JpbmRpcn0vdHNfdGVzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHMvMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwOTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPgorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+Cis8Zm9udGNvbmZpZz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+c2Fucy1zZXJpZjwvZmFtaWx5PgorCQk8YWNjZXB0PjxmYW1pbHk+TGliZXJhdGlvbiBTYW5zPC9mYW1pbHk+PC9hY2NlcHQ+CisJPC9hbGlhcz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+c2VyaWY8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gU2VyaWY8L2ZhbWlseT48L2FjY2VwdD4KKwk8L2FsaWFzPgorCTxhbGlhcz4KKwkJPGZhbWlseT5tb25vc3BhY2U8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gTW9ubzwvZmFtaWx5PjwvYWNjZXB0PgorCTwvYWxpYXM+Cis8L2ZvbnRjb25maWc+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250c18xLjA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE4MmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIkxpYmVyYXRpb24odG0pIEZvbnRzIgorREVTQ1JJUFRJT04gPSAiVGhlIExpYmVyYXRpb24odG0pIEZvbnRzIGlzIGEgZm9udCBmYW1pbHkgb3JpZ2luYWxseSBcCitjcmVhdGVkIGJ5IEFzY2VuZGVyKGMpIHdoaWNoIGFpbXMgYXQgbWV0cmljIGNvbXBhdGliaWxpdHkgd2l0aCBcCitBcmlhbCwgVGltZXMgTmV3IFJvbWFuLCBDb3VyaWVyIE5ldy4iCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGliZXJhdGlvbi1mb250cy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS8iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIjIueCBkZXBlbmRzIG9uIGZvbnRmb3JnZSBwYWNrYWdlLCB3aGljaCBpcyBub3QgeWV0IHByb3ZpZGVkIGluIG9lLWNvcmUiCisKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorUFIgPSAicjQiCitQRSA9ICIxIgorCitpbmhlcml0IGFsbGFyY2ggZm9udGNhY2hlCisKK0ZPTlRfUEFDS0FHRVMgPSAiJHtQTn0iCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvaS9saWJlcmF0aW9uLWZvbnRzL2xpYmVyYXRpb24tZm9udHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg0Njc5N2VmMGZjNzBiMGNiYWVkZTI1MTQ2NzdjNTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUwZDA5NTdjODViNzU4NTYxYTNkNGFlZjRlYmNkMmMzOTk1OWU1MzI4NDI5ZDk2YWUxMDYyNDlkODM1MzFhMSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9mb250cy90dGYvCisJZm9yIGkgaW4gKi50dGY7IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkaSAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8ke2l9CisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb250cy9jb25mLmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvY29uZi5kLworCisJaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L3NoYXJlL2RvYy8ke0JQTn0vCisJaW5zdGFsbCAtbSAwNjQ0IExpY2Vuc2UudHh0ICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0gJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmU0Y2VmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL3R0Zi1iaXRzdHJlYW0tdmVyYV8xLjEwLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiVGhlIEJpdHN0cmVhbSBWZXJhIGZvbnRzIC0gVFRGIEVkaXRpb24iCitERVNDUklQVElPTiA9ICJUaGUgQml0c3RyZWFtIFZlcmEgZm9udHMgaW5jbHVkZSBmb3VyIG1vbm9zcGFjZSBhbmQgc2FucyBcCitmYWNlcyAobm9ybWFsLCBvYmxpcXVlLCBib2xkLCBib2xkIG9ibGlxdWUpIGFuZCB0d28gc2VyaWYgZmFjZXMgKG5vcm1hbCBcCithbmQgYm9sZCkuICBJbiBhZGRpdGlvbiBGb250Y29uZmlnL1hmdDIgY2FuIGFydGlmaWNpYWxseSBvYmxpcXVlIHRoZSBcCitzZXJpZiBmYWNlcyBmb3IgeW91OiB0aGlzIGxvc2VzIGhpbnRpbmcgYW5kIGRpc3RvcnRzIHRoZSBmYWNlcyBzbGlnaHRseSwgXAorYnV0IGlzIHZpc2libHkgZGlmZmVyZW50IHRoYW4gbm9ybWFsIGFuZCBib2xkLCBhbmQgcmVhc29uYWJseSBwbGVhc2luZy4iCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiQml0c3RyZWFtVmVyYSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVC5UWFQ7bWQ1PTI3ZDc0ODRiMWUxOGQwZWU0Y2U1Mzg2NDRhM2YwNGJlIgorUFIgPSAicjciCisKK2luaGVyaXQgZm9udGNhY2hlCisKK0ZPTlRfUEFDS0FHRVMgPSAiJHtQTn0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L3R0Zi1iaXRzdHJlYW0tdmVyYS8xLjEwL3R0Zi1iaXRzdHJlYW0tdmVyYS0ke1BWfS50YXIuYnoyIiAKKworZG9faW5zdGFsbCAoKSB7IAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3ByZWZpeH0vc2hhcmUvZm9udHMvdHRmLyAKKyAgICAgICAgZm9yIGkgaW4gKi50dGY7IGRvIAorICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICRpICR7RH0ke3ByZWZpeH0vc2hhcmUvZm9udHMvdHRmLyR7aX0gCisgICAgICAgIGRvbmUgCisKKwkjIGZvbnRjb25maWcgc2hpcHMgdGhpcyB0b28uICBub3Qgc3VyZSB3aGF0IHRvIGRvIGFib3V0IGl0LgorICAgICAgICAjaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb250cyAKKyAgICAgICAgI2luc3RhbGwgLW0gNjQ0IGxvY2FsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvbG9jYWwuY29uZiAKKworCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LworICAgICAgICBmb3IgaSBpbiAqLlRYVDsgZG8gCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSA2NDQgJGkgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LyRpCisgICAgICAgIGRvbmUgCit9IAorCitGSUxFU18ke1BOfSA9ICIvZXRjICR7ZGF0YWRpcn0vZm9udHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYjIyYmQ1YjQ2NzVmNWRiZTE3YzY5NjNkOGMwMGVkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYjViMjdkZjdiYmIzMTgwMzZlYmRiNzVhY2QzZTk4ZjFiZDZlYjY2MDhmYjcwYTY3ZDQ3OGNkMjQzZDE3OGRjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2FmZmxlL3dhZmZsZV8xLjUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhYTA1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJjcm9zcy1wbGF0Zm9ybSBDIGxpYnJhcnkgdG8gZGVmZXIgc2VsZWN0aW9uIG9mIEdMIEFQSSBhbmQgb2Ygd2luZG93IHN5c3RlbSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTRjNTE1NDQwN2MyNDkwNzUwZGQ0NjFjNTBhZDk0Nzk3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvd2FmZmxlL3dhZmZsZS5oO2VuZGxpbmU9MjQ7bWQ1PTYxZGJmODY5N2Y2MWM3ODY0NWU3NWE5M2M1ODViMWJmIgorCitTUkNfVVJJID0gImh0dHA6Ly93YWZmbGUtZ2wub3JnL2ZpbGVzL3JlbGVhc2UvJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiYzBkODAyYmMzZDBhYmE4N2M1MWU0MjNhM2E4YmRkNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2JhYjBlOTI2NTE1MDY0ZTgxOGJmMDg5YTVhZjA0YmUzMzMwN2U1ZjQwZDA3NjU5ZmI0MGQ1OWIyYmZlMjBhYSIKKworaW5oZXJpdCBjbWFrZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgbGliX3BhY2thZ2UKKworIyBUaGlzIHNob3VsZCBiZSBvdmVycmlkZGVuIHBlci1tYWNoaW5lIHRvIHJlZmxlY3QgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgR0wKKyMgc3RhY2suCitQQUNLQUdFQ09ORklHID8/PSAiZ2x4IgorCisjIGxpYngxMSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTLgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dseCcsICd4MTEnLCAnJywgZCl9IgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGdsLnBjCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLUR3YWZmbGVfaGFzX2dseD0xLC1Ed2FmZmxlX2hhc19nbHg9MCx2aXJ0dWFsL2xpYmdsIGxpYngxMSIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyB3YXlsYW5kLWVnbC5wYywgZWdsLnBjLCBhbmQgdGhlIHdheWxhbmQKKyMgRElTVFJPX0ZFQVRVUkUuCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi1Ed2FmZmxlX2hhc193YXlsYW5kPTEsLUR3YWZmbGVfaGFzX3dheWxhbmQ9MCx2aXJ0dWFsL2xpYmdsIHdheWxhbmQiCisKKyMgSSBzYXkgdmlydHVhbC9saWJnbCwgYWN0dWFsbHkgd2FudHMgZ2JtLnBjIGVnbC5wYworUEFDS0FHRUNPTkZJR1tnYm1dID0gIi1Ed2FmZmxlX2hhc19nYm09MSwtRHdhZmZsZV9oYXNfZ2JtPTAsdmlydHVhbC9saWJnbCB1ZGV2IgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGVnbC5wYworUEFDS0FHRUNPTkZJR1t4MTEtZWdsXSA9ICItRHdhZmZsZV9oYXNfeDExX2VnbD0xLC1Ed2FmZmxlX2hhc194MTFfZWdsPTAsdmlydHVhbC9saWJnbCBsaWJ4Y2IiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZS9Nb2R1bGVzL0ZpbmRXYWZmbGUuY21ha2UgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY21ha2UvV2FmZmxlLyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvbGliaW5wdXQtY29uZmlndXJlLmFjLWFkZC1hcmctd2l0aC1saWJ1bndpbmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNWViY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gY2M2ZmNlNTg3ZjI2MjhjOGIzNDI3NjRlMDZmYjBmYzI3YzFlODI3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDMgQXVnIDIwMTUgMjA6MzM6NDQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBhZGQgYXJnIC0td2l0aC1saWJ1bndpbmQKKworQWRkIGFyZyAtLXdpdGgtbGlidW53aW5kIGZvciBjb25maWd1cmUgc28gaXQncyBvcHRpb25hbCB0byBjaGVjaworbGlidW53aW5kLCB3aGljaCBpcyBoZWxwZnVsbCB0byBtYWtlIGRldGVybWluaXN0aWMgYnVpbGRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbd2F5bGFuZC1kZXZlbF0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE5ICsrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzE0YjBkNC4uMjQyZDI1MSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjAsMTMgKzYwLDIyIEBAIFBLR19QUk9HX1BLR19DT05GSUcoKQorIFBLR19DSEVDS19NT0RVTEVTKE1UREVWLCBbbXRkZXYgPj0gMS4xLjBdKQorIFBLR19DSEVDS19NT0RVTEVTKExJQlVERVYsIFtsaWJ1ZGV2XSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJFVkRFViwgW2xpYmV2ZGV2ID49IDAuNF0pCistUEtHX0NIRUNLX01PRFVMRVMoTElCVU5XSU5ELAorKworK0FDX0FSR19XSVRIKGxpYnVud2luZCwKKysgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYnVud2luZF0sW0RvIG5vdCB1c2UgbGlidW53aW5kXSkpCisrCisrQVNfSUYoW3Rlc3QgIngkd2l0aF9saWJ1bndpbmQiICE9ICJ4bm8iXSwKKysJW1BLR19DSEVDS19NT0RVTEVTKExJQlVOV0lORCwKKyAJCSAgW2xpYnVud2luZF0sCisgCQkgIFtIQVZFX0xJQlVOV0lORD15ZXNdLAorLQkJICBbSEFWRV9MSUJVTldJTkQ9bm9dKQorLWlmIHRlc3QgIngkSEFWRV9MSUJVTldJTkQiID0gInh5ZXMiOyB0aGVuCistCUFDX0RFRklORShIQVZFX0xJQlVOV0lORCwgMSwgW0hhdmUgbGlidW53aW5kIHN1cHBvcnRdKQorLWZpCisrCQkgIFtIQVZFX0xJQlVOV0lORD1ub10pXSwKKysJW0hBVkVfTElCVU5XSU5EPW5vXSkKKysKKytBU19JRihbdGVzdCAieCRIQVZFX0xJQlVOV0lORCIgPSAieHllcyJdLAorKwlbQUNfREVGSU5FKEhBVkVfTElCVU5XSU5ELCAxLCBbSGF2ZSBsaWJ1bndpbmQgc3VwcG9ydF0pXSwKKysJW0FTX0lGKFt0ZXN0ICJ4JHdpdGhfbGlidW53aW5kIiA9ICJ4eWVzIl0sCisrCQlbQUNfTVNHX0VSUk9SKFtsaWJ1bndpbmQgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmRdKV0pXSkKKysKKyBBTV9DT05ESVRJT05BTChIQVZFX0xJQlVOV0lORCwgW3Rlc3QgIngkSEFWRV9MSUJVTldJTkQiID0geHllc10pCisgQUNfUEFUSF9QUk9HKEFERFIyTElORSwgW2FkZHIybGluZV0pCisgaWYgdGVzdCAieCRBRERSMkxJTkUiICE9ICJ4IjsgdGhlbgorLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzYzYmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaApAQCAtMCwwICsxLDcyIEBACitUaGlzIGlzIGEgd29ya2Fyb3VuZCB1cHN0cmVhbSBzdWdnZXN0cyBmb3IgdXNlIHdpdGgga2VybmVsIDQuMS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0ZW1wb3Jhcnkgd29yay1hcm91bmRdCitTaWduZWQtT2ZmLUJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKKworRnJvbTogUGV0ZXIgSHV0dGVyZXIgPHBldGVyLmh1dHRlcmVyQHdoby10Lm5ldD4KK0RhdGU6IE1vbiBBdWcgMyAxODoyMzoxMiBQRFQgMjAxNQorU3ViamVjdDogW1BBVENIIHYzIGxpYmlucHV0XSB0b3VjaHBhZDogc2VyaWFsIHN5bmFwdGljcyBuZWVkIHRvIGZha2UgbmV3IHRvdWNoZXMgb24gVFJJUExFVEFQCisKK09uIHRoZSA0LjEga2VybmVscyBzeW5hcHRpY3MgcHJldGVuZHMgdG8gaGF2ZSAzIHNsb3RzICh0aGUgc2VyaWFsIGZ3IG9ubHkgZG9lcworMikuIFRoaXMgd2FzIGFkZGVkIHRvIGF2b2lkIGN1cnNvciBqdW1wcyBidXQgaGFzIHNpbmNlIGJlZW4gcmV2ZXJ0ZWQgZm9yIDQuMgorKGtlcm5lbCBjb21taXQgZGJmM2MzNzA4NiwgNC4xLjMgaXMgc3RpbGwgYnVnZ3kpLiBJbiBzb21lIGNhc2VzIGEgVFJJUExFVEFQCittYXkgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgc2xvdCAyIGV2ZXIgYWN0aXZhdGluZy4KKworV2hpbGUgdGhlcmUgYXJlIHN0aWxsIHRob3NlIGtlcm5lbHMgb3V0IHRoZXJlLCB3b3JrIGFyb3VuZCB0aGlzIGJ1ZyBieSBvcGVuaW5nCithIG5ldyB0b3VjaCBwb2ludCB3aGVyZSBub25lIGV4aXN0cyBpZiB0aGUgZmFrZSBmaW5nZXIgY291bnQgZXhjZWVkcyB0aGUgc2xvdAorY291bnQuCisKK1JlcG9ydGVkLWJ5OiBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIDxqYW4uc3RlZmZlbnMgYXQgZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogUGV0ZXIgSHV0dGVyZXIgPHBldGVyLmh1dHRlcmVyIGF0IHdoby10Lm5ldD4KK1Rlc3RlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyA8amFuLnN0ZWZmZW5zIGF0IGdtYWlsLmNvbT4KK1Jldmlld2VkLWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZSBhdCByZWRoYXQuY29tPgorLS0tCitDaGFuZ2VzIHRvIHYyOgorLSBzcGxpdCBvdXQgdGhlIGhhbmRsaW5nIGluc3RlYWQgb2YgaGF2aW5nIGEgdG1wIHN0YXRlIHZhcmlhYmxlLCBzZWUgSGFucycKKyAgY29tbWVudHMgZnJvbSB2MgorCitNYWlubHkgc2VuZGluZyB0aGlzIHRvIHRoZSBsaXN0IGFnYWluIHNvIEkgaGF2ZSBhIGxpbmsgdG8gcG9pbnQgcGVvcGxlIHRvLgorSWYgeW91J3JlIG9uIDQuMS54IGFkZCB0aGlzIHBhdGNoIHRvIHlvdXIgZGlzdHJpYnV0aW9uIHBhY2thZ2UuCisKKyBzcmMvZXZkZXYtbXQtdG91Y2hwYWQuYyB8IDIyICsrKysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jIGIvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKK2luZGV4IGE2ODNkOWEuLjVlZjAzZDUgMTAwNjQ0CistLS0gYS9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYworKysrIGIvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKK0BAIC0zNjksMTMgKzM2OSwyMyBAQCB0cF9yZXN0b3JlX3N5bmFwdGljc190b3VjaGVzKHN0cnVjdCB0cF9kaXNwYXRjaCAqdHAsCisgCWZvciAoaSA9IDA7IGkgPCB0cC0+bnVtX3Nsb3RzOyBpKyspIHsKKyAJCXN0cnVjdCB0cF90b3VjaCAqdCA9IHRwX2dldF90b3VjaCh0cCwgaSk7CisgCistCQlpZiAodC0+c3RhdGUgIT0gVE9VQ0hfRU5EKQorKwkJc3dpdGNoKHQtPnN0YXRlKSB7CisrCQljYXNlIFRPVUNIX0hPVkVSSU5HOgorKwkJY2FzZSBUT1VDSF9CRUdJTjoKKysJCWNhc2UgVE9VQ0hfVVBEQVRFOgorIAkJCWNvbnRpbnVlOworLQorLQkJLyogbmV3IHRvdWNoLCBtb3ZlIGl0IHRocm91Z2ggYmVnaW4gdG8gdXBkYXRlIGltbWVkaWF0ZWx5ICovCistCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworLQkJdHBfYmVnaW5fdG91Y2godHAsIHQsIHRpbWUpOworLQkJdC0+c3RhdGUgPSBUT1VDSF9VUERBVEU7CisrCQljYXNlIFRPVUNIX05PTkU6CisrCQkJLyogbmV3IHRvdWNoLCBtb3ZlIGl0IHRocm91Z2ggdG8gYmVnaW4gaW1tZWRpYXRlbHkgKi8KKysJCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQlicmVhazsKKysJCWNhc2UgVE9VQ0hfRU5EOgorKwkJCS8qIHRvdWNoIGp1c3QgZW5kZWQgLHdlIG5lZWQgbmVlZCB0byByZXN0b3JlIGl0IHRvIHVwZGF0ZSAqLworKwkJCXRwX25ld190b3VjaCh0cCwgdCwgdGltZSk7CisrCQkJdHBfYmVnaW5fdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXQtPnN0YXRlID0gVE9VQ0hfVVBEQVRFOworKwkJCWJyZWFrOworKwkJfQorIAl9CisgfQorIAorLS0gCisyLjQuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMC4yMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWEyNDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpYnJhcnkgdG8gaGFuZGxlIGlucHV0IGRldmljZXMgaW4gV2F5bGFuZCBjb21wb3NpdG9ycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliaW5wdXQvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIxODRhZWYzOGZmMTM3ZWQzM2NlOWE2M2I5ZDFlYjhmIgorCitERVBFTkRTID0gImxpYmV2ZGV2IHVkZXYgbXRkZXYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImY5MWQ4ZjRjZWQ5ODZmMWFlMTZkNTJlYTAyYmM3ODM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjY2U3YTllNTEwZGZlNWM0YTE5YWQwMGU5MzUwODA4ZDRmNTlmODYxMWZkMmI1ZTg3MjEzYzUwNzI4M2Y1NTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW2d1aV0gPSAiLS1lbmFibGUtZXZlbnQtZ3VpLC0tZGlzYWJsZS1ldmVudC1ndWksY2Fpcm8gZ3RrKzMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdWRldi8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS91ZGV2Ly5kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbXRkZXZfMS4xLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDBlYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTXVsdGl0b3VjaCBQcm90b2NvbCBUcmFuc2xhdGlvbiBMaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJtdGRldiBpcyBhIGxpYnJhcnkgd2hpY2ggdHJhbnNmb3JtcyBhbGwgdmFyaWFudHMgb2Yga2VybmVsIFwKK211bHRpdG91Y2ggZXZlbnRzIHRvIHRoZSBzbG90dGVkIHR5cGUgQiBwcm90b2NvbC4gVGhlIGV2ZW50cyBwdXQgaW50byBtdGRldiBtYXkgXAorYmUgZnJvbSBhbnkgTVQgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdHlwZSBBIHdpdGhvdXQgY29udGFjdCB0cmFja2luZywgdHlwZSBBIHdpdGggXAorY29udGFjdCB0cmFja2luZywgb3IgdHlwZSBCIHdpdGggY29udGFjdCB0cmFja2luZyIKKworSE9NRVBBR0UgPSAiaHR0cDovL2JpdG1hdGgub3JnL2NvZGUvbXRkZXYvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhNmJkMDI2OGJiMGZjZDZiMjc2OTg2MTZjZWVlNWQ2IgorCitTUkNfVVJJID0gImh0dHA6Ly9iaXRtYXRoLm9yZy9jb2RlLyR7QlBOfS8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjUyYzk2MTBiNjAwMmY3MWQxNjQyZGMxYTFjY2E1ZWMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NzdkNTcwOGE3OTQ4ODQwZGU3MzRkOGI0Njc1ZDU5ODBkNDU2MTE3MWM1YThlODllNTRhZGY3YTEzZWJhN2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGU2YmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvYWx3YXlzLWJ1aWxkLXNjYW5uZXIucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK2J1aWxkOiBhbHdheXMgYnVpbGQgd2F5bGFuZC1zY2FubmVyCisKK1RoZSBwcmV2aW91cyBpZGlvbSBmb3IgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlZCBXYXlsYW5kIGlzIHRvIGJ1aWxkIG9uY2UgZm9yCit0aGUgYnVpbGQgaG9zdCAod2l0aCAtLWVuYWJsZS1zY2FubmVyIC0tZGlzYWJsZS1saWJyYXJpZXMpIHRvIGdldCBhCit3YXlsYW5kLXNjYW5uZXIgYmluYXJ5IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCBpbiBhIGNyb3NzLWNvbXBpbGUgKHdpdGgKKy0tZGlzYWJsZS1zY2FubmVyKS4gIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IHRoZSBjcm9zcyB3YXlsYW5kIGlzIG1pc3NpbmcKK2Egd2F5bGFuZC1zY2FubmVyIGJpbmFyeSwgd2hpY2ggbWVhbnMgeW91IHRoZW4gY2FuJ3QgZG8gYW55IFdheWxhbmQgZGV2ZWxvcG1lbnQKK29uIHRoZSB0YXJnZXQuCisKK0luc3RlYWQsIGFsd2F5cyBidWlsZCB3YXlsYW5kLXNjYW5uZXIgZm9yIHRoZSB0YXJnZXQgYW5kIGNoYW5nZQorLS1lbmFibGUvZGlzYWJsZS1zY2FubmVyIHRvIC0td2l0aC93aXRob3V0LWhvc3Qtc2Nhbm5lci4gIE5vcm1hbCBidWlsZHMgdXNlIHRoZQorZGVmYXVsdCBvZiAtLXdpdGhvdXQtaG9zdC1zY2FubmVyIGFuZCBydW4gdGhlIHdheWxhbmQtc2Nhbm5lciBpdCBqdXN0IGJ1aWx0LCBhbmQKK2Nyb3NzLWNvbXBpbGVkIGJ1aWxkcyBwYXNzIC0td2l0aC1ob3N0LXNjYW5uZXIgdG8gdXNlIGEgcHJldmlvdXNseSBidWlsdCBob3N0CitzY2FubmVyIGJ1dCBzdGlsbCBnZXQgYSB3YXlsYW5kLXNjYW5uZXIgdG8gaW5zdGFsbC4KKworKGEgdGhlb3JldGljYWxseSBuZWF0ZXIgc29sdXRpb24gd291bGQgYmUgdG8gYnVpbGQgdHdvIHNjYW5uZXJzIGlmIHJlcXVpcmVkIChvbmUKK3RvIHJ1biBhbmQgb25lIHRvIGluc3RhbGwpLCBidXQgYXV0b21ha2UgbWFrZXMgdGhpcyBvdmVybHkgY29tcGxpY2F0ZWQpCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYzE5NDk0Zi4uYzJkOTI5YiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTY0LDE2ICs2NCwxNyBAQCBub2Rpc3RfbGlid2F5bGFuZF9jbGllbnRfbGFfU09VUkNFUyA9CQlcCisgCisgcGtnY29uZmlnX0RBVEEgKz0gc3JjL3dheWxhbmQtY2xpZW50LnBjIHNyYy93YXlsYW5kLXNlcnZlci5wYworIAorLWlmIEVOQUJMRV9TQ0FOTkVSCistd2F5bGFuZF9zY2FubmVyID0gJCh0b3BfYnVpbGRkaXIpL3dheWxhbmQtc2Nhbm5lcgorIGJpbl9QUk9HUkFNUyA9IHdheWxhbmQtc2Nhbm5lcgorIHdheWxhbmRfc2Nhbm5lcl9TT1VSQ0VTID0gc3JjL3NjYW5uZXIuYworIHdheWxhbmRfc2Nhbm5lcl9DRkxBR1MgPSAkKEVYUEFUX0NGTEFHUykgJChBTV9DRkxBR1MpCisgd2F5bGFuZF9zY2FubmVyX0xEQUREID0gJChFWFBBVF9MSUJTKSBsaWJ3YXlsYW5kLXV0aWwubGEKKy0kKEJVSUxUX1NPVVJDRVMpIDogd2F5bGFuZC1zY2FubmVyCisgcGtnY29uZmlnX0RBVEEgKz0gc3JjL3dheWxhbmQtc2Nhbm5lci5wYworLWVsc2UKKysKKytpZiBIT1NUX1NDQU5ORVIKKyB3YXlsYW5kX3NjYW5uZXIgPSB3YXlsYW5kLXNjYW5uZXIKKytlbHNlCisrJChCVUlMVF9TT1VSQ0VTKSA6IHdheWxhbmQtc2Nhbm5lcgorK3dheWxhbmRfc2Nhbm5lciA9ICQodG9wX2J1aWxkZGlyKS93YXlsYW5kLXNjYW5uZXIKKyBlbmRpZgorIAorIHByb3RvY29sLyUtcHJvdG9jb2wuYyA6ICQodG9wX3NyY2RpcikvcHJvdG9jb2wvJS54bWwKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGMyYTgwNGUuLmRlMGIwMmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY1LDExICs2NSwxMSBAQCBBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKyAJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorIEFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorIAorLUFDX0FSR19FTkFCTEUoW3NjYW5uZXJdLAorLSAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtc2Nhbm5lcl0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgY29tcGlsYXRpb24gb2Ygd2F5bGFuZC1zY2FubmVyXSldLAorLSAgICAgICAgICAgICAgW10sCistICAgICAgICAgICAgICBbZW5hYmxlX3NjYW5uZXI9eWVzXSkKKytBQ19BUkdfV0lUSChbaG9zdC1zY2FubmVyXSwKKysgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1ob3N0LXNjYW5uZXJdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIGEgaG9zdCB3YXlsYW5kLXNjYW5uZXJdKV0sCisrICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgW3dpdGhfaG9zdF9zY2FubmVyPW5vXSkKKyAKKyBBQ19BUkdfRU5BQkxFKFtkb2N1bWVudGF0aW9uXSwKKyAJICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZG9jdW1lbnRhdGlvbl0sCitAQCAtNzcsMjUgKzc3LDIzIEBAIEFDX0FSR19FTkFCTEUoW2RvY3VtZW50YXRpb25dLAorIAkgICAgICBbXSwKKyAJICAgICAgW2VuYWJsZV9kb2N1bWVudGF0aW9uPXllc10pCisgCistQU1fQ09ORElUSU9OQUwoRU5BQkxFX1NDQU5ORVIsIHRlc3QgIngkZW5hYmxlX3NjYW5uZXIiID0geHllcykKKytBTV9DT05ESVRJT05BTChIT1NUX1NDQU5ORVIsIHRlc3QgIngkd2l0aF9ob3N0X3NjYW5uZXIiID0geHllcykKKyAKKyBBQ19BUkdfV0lUSChpY29uZGlyLCBbICAtLXdpdGgtaWNvbmRpcj08ZGlyPiAgICBMb29rIGZvciBjdXJzb3IgaWNvbnMgaGVyZV0sCisgCQkgICAgIFsgIElDT05ESVI9JHdpdGh2YWxdLAorIAkJICAgICBbICBJQ09ORElSPSR7ZGF0YWRpcn0vaWNvbnNdKQorIEFDX1NVQlNUKFtJQ09ORElSXSkKKyAKKy1pZiB0ZXN0ICJ4JGVuYWJsZV9zY2FubmVyIiA9ICJ4eWVzIjsgdGhlbgorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhFWFBBVCwgW2V4cGF0XSwgW10sCistCQlbQUNfQ0hFQ0tfSEVBREVSUyhleHBhdC5oLCBbXSwKKy0JCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0LmguIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKy0JCSBTQVZFX0xJQlM9IiRMSUJTIgorLQkJIEFDX1NFQVJDSF9MSUJTKFhNTF9QYXJzZXJDcmVhdGUsIGV4cGF0LCBbXSwKKy0JCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0IGxpYnJhcnkuIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKy0JCSBFWFBBVF9MSUJTPSIkTElCUyIKKy0JCSBMSUJTPSIkU0FWRV9MSUJTIgorLQkJIEFDX1NVQlNUKEVYUEFUX0xJQlMpCistCQldKQorLWZpCisrUEtHX0NIRUNLX01PRFVMRVMoRVhQQVQsIFtleHBhdF0sIFtdLAorKwlbQUNfQ0hFQ0tfSEVBREVSUyhleHBhdC5oLCBbXSwKKysJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQuaC4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorKwkgU0FWRV9MSUJTPSIkTElCUyIKKysJIEFDX1NFQVJDSF9MSUJTKFhNTF9QYXJzZXJDcmVhdGUsIGV4cGF0LCBbXSwKKysJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQgbGlicmFyeS4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorKwkgRVhQQVRfTElCUz0iJExJQlMiCisrCSBMSUJTPSIkU0FWRV9MSUJTIgorKwkgQUNfU1VCU1QoRVhQQVRfTElCUykKKysJXSkKKyAKKyBBQ19QQVRIX1BST0coWFNMVFBST0MsIHhzbHRwcm9jKQorIEFNX0NPTkRJVElPTkFMKFtIQVZFX1hTTFRQUk9DXSwgW3Rlc3QgIngkWFNMVFBST0MiICE9ICJ4Il0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YmM1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9kaXNhYmxlLW1hY3JvLWNoZWNrcy1ub3QtdXNlZC1mb3Itc2Nhbm5lci5wYXRjaApAQCAtMCwwICsxLDUwIEBACitkaXNhYmxlIG1hY3JvIGNoZWNrcyBub3QgdXNlZCBmb3Igc2Nhbm5lcgorCitXZSBvbmx5IGJ1aWxkIHdheWxhbmQtbmF0aXZlIGZvciB0aGUgc2Nhbm5lciwgc28gZGlzYWJsZSB0aGUgYml0cyB3ZSBkb24ndAorYWN0dWFsbHkgbmVlZC4gVGhpcyBhdm9pZCBidWlsZCBpc3N1ZSBvbiBvbGRlciBkaXN0cm8gc3VjaCBhcyBDZW50b3MgNS54OgorfCBlcnJvcjogJ09fQ0xPRVhFQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiBzeXMvdGltZXJmZC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8IGVycm9yOiAnQ0xPQ0tfTU9OT1RPTklDJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKK3wgZXJyb3I6ICdURkRfQ0xPRVhFQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiAnU0ZEX0NMT0VYRUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjAgKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDEsMTYgKzQxLDE2IEBAIEFDX1NVQlNUKEdDQ19DRkxBR1MpCisgCisgQUNfQ0hFQ0tfRlVOQ1MoW2FjY2VwdDQgbWtvc3RlbXAgcG9zaXhfZmFsbG9jYXRlXSkKKyAKKy1BQ19DSEVDS19ERUNMKFNGRF9DTE9FWEVDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJTRkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorLQkgICAgICBbWyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD5dXSkKKy1BQ19DSEVDS19ERUNMKFRGRF9DTE9FWEVDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJURkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorLQkgICAgICBbWyNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPl1dKQorLUFDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJDTE9DS19NT05PVE9OSUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKy0JICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorLUFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorKyMjQUNfQ0hFQ0tfREVDTChTRkRfQ0xPRVhFQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIlNGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCisrIwkgICAgICBbWyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD5dXSkKKysjQUNfQ0hFQ0tfREVDTChURkRfQ0xPRVhFQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIlRGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCisrIwkgICAgICBbWyNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPl1dKQorKyNBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIkNMT0NLX01PTk9UT05JQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorKyMJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorKyNBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKyAKKyBBQ19BUkdfRU5BQkxFKFtzY2FubmVyXSwKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXNjYW5uZXJdLAorLS0gCisxLjguMy4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlhMGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOC4xLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiV2F5bGFuZCwgYSBwcm90b2NvbCBiZXR3ZWVuIGEgY29tcG9zaXRvciBhbmQgY2xpZW50cyIKK0RFU0NSSVBUSU9OID0gIldheWxhbmQgaXMgYSBwcm90b2NvbCBmb3IgYSBjb21wb3NpdG9yIHRvIHRhbGsgdG8gaXRzIGNsaWVudHMgXAorYXMgd2VsbCBhcyBhIEMgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHByb3RvY29sLiBUaGUgY29tcG9zaXRvciBjYW4gYmUgXAorYSBzdGFuZGFsb25lIGRpc3BsYXkgc2VydmVyIHJ1bm5pbmcgb24gTGludXgga2VybmVsIG1vZGVzZXR0aW5nIGFuZCBldmRldiBcCitpbnB1dCBkZXZpY2VzLCBhbiBYIGFwcGxpY2F0aW9uLCBvciBhIHdheWxhbmQgY2xpZW50IGl0c2VsZi4gVGhlIGNsaWVudHMgY2FuIFwKK2JlIHRyYWRpdGlvbmFsIGFwcGxpY2F0aW9ucywgWCBzZXJ2ZXJzIChyb290bGVzcyBvciBmdWxsc2NyZWVuKSBvciBvdGhlciBcCitkaXNwbGF5IHNlcnZlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xZDQ0NzZhN2Q5OGRkNTY5MWM1M2Q0ZDQzYTUxMGM3MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvd2F5bGFuZC1zZXJ2ZXIuYztlbmRsaW5lPTIxO21kNT0wNzlhZTIxZGJmOThhZGE1MmVjMjM3NDQ4NTFiMGE1YyIKKworU1JDX1VSSSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZTg3Nzg3N2MzZTA0Y2ZiODY1Y2ZjZDA3MzNjOWFiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMTdjOTM4ZDFjMjRmZDBhMTBmNjUwYTYyM2EyNzc1ZDMyOWRiMzE2OGI1NzMyZTQ5OGIwODM4OGVjNzc2ZmM4IgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIFwKKyAgICBmaWxlOi8vZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2ggXAorICAgICIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0RFUEVORFMgPSAiZXhwYXQgbGliZmZpIHdheWxhbmQtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24gLS13aXRoLWhvc3Qtc2Nhbm5lciIKKworIyBXYXlsYW5kIGluc3RhbGxzIGEgTTQgbWFjcm8gZm9yIG90aGVyIHByb2plY3RzIHRvIHVzZSwgd2hpY2ggdXNlcyB0aGUgdGFyZ2V0CisjIHBrZy1jb25maWcgdG8gZmluZCBmaWxlcy4gIFJlcGxhY2UgcGtnLWNvbmZpZyB3aXRoIHBrZy1jb25maWctbmF0aXZlLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICBzZWQgLWUgJ3MsUEtHX0NIRUNLX01PRFVMRVMoLiopLCxnJyBcCisgICAgICAtZSAncywkUEtHX0NPTkZJRyxwa2ctY29uZmlnLW5hdGl2ZSxnJyBcCisgICAgICAtaSAke0R9LyR7ZGF0YWRpcn0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQKK30KKworc3lzcm9vdF9zdGFnZV9hbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJcm0gJHtTWVNST09UX0RFU1RESVJ9LyR7ZGF0YWRpcn0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQKKwljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00ICR7U1lTUk9PVF9ERVNURElSfS8ke2RhdGFkaXJ9L2FjbG9jYWwvCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0gJHtkYXRhZGlyfS93YXlsYW5kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiNzhiYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJTdGFydHVwIHNjcmlwdCBmb3IgdGhlIFdlc3RvbiBXYXlsYW5kIGNvbXBvc2l0b3IiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitTUkNfVVJJID0gImZpbGU6Ly9pbml0IgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbTc1NSAke1dPUktESVJ9L2luaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93ZXN0b24KK30KKworaW5oZXJpdCBhbGxhcmNoIHVwZGF0ZS1yYy5kCisKK1JERVBFTkRTXyR7UE59ID0gIndlc3RvbiBrYmQiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ3ZXN0b24iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTkzOGY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0CkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogd2VzdG9uCisjIFJlcXVpcmVkLVN0YXJ0OiAkbG9jYWxfZnMgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAkbG9jYWxfZnMgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIHRlc3QgLWUgL2V0Yy9kZWZhdWx0L3dlc3RvbiA7IHRoZW4KKyAgICAgICAgLiAvZXRjL2RlZmF1bHQvd2VzdG9uCitmaQorCitraWxscHJvYygpIHsKKyAgICAgICAgcGlkPWAvYmluL3BpZG9mICQxYAorICAgICAgICBbICIkcGlkIiAhPSAiIiBdICYmIGtpbGwgJHBpZAorfQorCityZWFkIENNRExJTkUgPCAvcHJvYy9jbWRsaW5lCitmb3IgeCBpbiAkQ01ETElORTsgZG8KKyAgICAgICAgY2FzZSAkeCBpbgorICAgICAgICB3ZXN0b249ZmFsc2UpCisJCWVjaG8gIldlc3RvbiBkaXNhYmxlZCIKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgICAuIC9ldGMvcHJvZmlsZQorCisgICAgICAgICMgVGhpcyBpcyBhbGwgYSBuYXN0eSBoYWNrCisgICAgICAgIGlmIHRlc3QgLXogIiRYREdfUlVOVElNRV9ESVIiOyB0aGVuCisgICAgICAgICAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj0vcnVuL3VzZXIvcm9vdAorICAgICAgICAgICAgICAgIG1rZGlyIC0tcGFyZW50cyAkWERHX1JVTlRJTUVfRElSCisgICAgICAgICAgICAgICAgY2htb2QgMDcwMCAkWERHX1JVTlRJTUVfRElSCisgICAgICAgIGZpCisKKyAgICAgICAgb3BlbnZ0IC1zIHdlc3RvbiAtLSAkT1BUQVJHUworICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIFdlc3RvbiIKKyAgICAgICAga2lsbHByb2Mgd2VzdG9uCisgIDs7CisKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODg0OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLW1ha2UtZXJyb3ItcG9ydGFibGUucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorRnJvbSBjMjJlOTAzNjVkODkzNDYyNTgzOTQ4MzNjYmNhZDAzZmYzMmIyZTI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWF5IDIwMTUgMjA6NTY6MDAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCB3ZXN0b25dIG1ha2UgZXJyb3IoKSBwb3J0YWJsZQorCitlcnJvcigpIGlzIG5vdCBwb3NpeCBidXQgZ251IGV4dGVuc2lvbiBzbyBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwKK2tpbmQgb2Ygc3lzdGVtc2kgZS5nLiBtdXNsLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgY29uZmlndXJlLmFjICAgICAgICB8ICAyICsrCisgc3JjL3dlc3Rvbi1lcnJvci5oICB8IDIwICsrKysrKysrKysrKysrKysrKysrCisgc3JjL3dlc3Rvbi1sYXVuY2guYyB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy93ZXN0b24tZXJyb3IuaAorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyNjNmYzIyLi5mNTJjZDYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01Nyw2ICs1Nyw4IEBAIEFDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorIAkgICAgICBbWyNpbmNsdWRlIDx0aW1lLmg+XV0pCisgQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0pCisgCisrQUNfQ0hFQ0tfSEVBREVSUyhbZXJyb3IuaF0pCisrCisgQUNfQ0hFQ0tfRlVOQ1MoW21rb3N0ZW1wIHN0cmNocm51bCBpbml0Z3JvdXBzIHBvc2l4X2ZhbGxvY2F0ZV0pCisgCisgQ09NUE9TSVRPUl9NT0RVTEVTPSJ3YXlsYW5kLXNlcnZlciA+PSAxLjcuOTMgcGl4bWFuLTEgPj0gMC4yNS4yIgorZGlmZiAtLWdpdCBhL3NyYy93ZXN0b24tZXJyb3IuaCBiL3NyYy93ZXN0b24tZXJyb3IuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIwODlkMDIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy93ZXN0b24tZXJyb3IuaAorQEAgLTAsMCArMSwyMCBAQAorKyNpZm5kZWYgX1dFU1RPTl9FUlJPUl9ICisrI2RlZmluZSBfV0VTVE9OX0VSUk9SX0gKKysKKysjaWYgZGVmaW5lZChIQVZFX0VSUk9SX0gpCisrI2luY2x1ZGUgPGVycm9yLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8ZXJyLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNkZWZpbmUgX3dlc3Rvbl9lcnJvcihTLCBFLCBGLCAuLi4pIGRvIHsgXAorKwlpZiAoRSkgXAorKwkJZXJyKFMsIEYgIjogJXMiLCAjI19fVkFfQVJHU19fLCBzdHJlcnJvcihFKSk7IFwKKysJZWxzZSBcCisrCQllcnIoUywgRiwgIyNfX1ZBX0FSR1NfXyk7IFwKKyt9IHdoaWxlKDApCisrCisrI2RlZmluZSBlcnJvciBfd2VzdG9uX2Vycm9yCisrI2VuZGlmCisrCisrI2VuZGlmCisrCitkaWZmIC0tZ2l0IGEvc3JjL3dlc3Rvbi1sYXVuY2guYyBiL3NyYy93ZXN0b24tbGF1bmNoLmMKK2luZGV4IDEwYzY2ZGUuLjNlNmQzMGEgMTAwNjQ0CistLS0gYS9zcmMvd2VzdG9uLWxhdW5jaC5jCisrKysgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitAQCAtMzAsNyArMzAsNiBAQAorICNpbmNsdWRlIDxwb2xsLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgCistI2luY2x1ZGUgPGVycm9yLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0BAIC01Niw2ICs1NSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgIndlc3Rvbi1sYXVuY2guaCIKKysjaW5jbHVkZSAid2VzdG9uLWVycm9yLmgiCisgCisgI2RlZmluZSBEUk1fTUFKT1IgMjI2CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJhMzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vZGlzYWJsZS13YXlsYW5kLXNjYW5uZXItcGtnLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTUwMSwxMiArNTAxLDYgQEAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0geHllczsgdGhlbgorIGZpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRoYXZlX2xjbXMiID0geHllc10pCisgCistQUNfUEFUSF9QUk9HKFt3YXlsYW5kX3NjYW5uZXJdLCBbd2F5bGFuZC1zY2FubmVyXSkKKy1pZiB0ZXN0IHgkd2F5bGFuZF9zY2FubmVyID0geDsgdGhlbgorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhXQVlMQU5EX1NDQU5ORVIsIFt3YXlsYW5kLXNjYW5uZXJdKQorLQl3YXlsYW5kX3NjYW5uZXI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F5bGFuZF9zY2FubmVyIHdheWxhbmQtc2Nhbm5lcmAKKy1maQorLQorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgc3JjL3ZlcnNpb24uaCBzcmMvd2VzdG9uLnBjXSkKKyAKKyBBTV9DT05ESVRJT05BTChbSEFWRV9HSVRfUkVQT10sIFt0ZXN0IC1mICRzcmNkaXIvLmdpdC9sb2dzL0hFQURdKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTZkNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAord2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYzogbWFrZSBsY21zIGV4cGxpY2l0bHkgY29uZmlndXJhYmxlCisKK1RoZSBsY21zIHBhY2thZ2UgaXMgb3V0c2lkZSBvZiBvcGVuZW1iZWRkZWQtY29yZSwgc28gbWFrZSBpdAorZXhwbGljaXRseSBjb25maWd1cmFibGUuIE1ha2UgaXQgZGV0ZXJtaW5pc3RpYywgc28gdGhhdCBpZiBsY21zCitkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcsIGF1dG9jb25mIHRocm93cyBhIGZhdGFsIGVycm9yLiBGb2xsb3cKK3Vwc3RyZWFtIHN0eWxlIHRvIG1ha2UgaXQgbW9yZSBsaWtlbHkgdG8gYmUgbWVyZ2VkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZXN0b24tMS41LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCitAQCAtNDkxLDEyICs0OTEsMjQgQEAgQUNfQVJHX0VOQUJMRShkZW1vLWNsaWVudHMtaW5zdGFsbCwKKyAJCQkgICAgIGVuYWJsZV9kZW1vX2NsaWVudHNfaW5zdGFsbD1ubykKKyBBTV9DT05ESVRJT05BTChJTlNUQUxMX0RFTU9fQ0xJRU5UUywgW3Rlc3QgIngkZW5hYmxlX2RlbW9fY2xpZW50c19pbnN0YWxsIiA9ICJ4eWVzIl0pCisgCistUEtHX0NIRUNLX01PRFVMRVMoTENNUywgbGNtczIsCistICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz15ZXNdLCBbaGF2ZV9sY21zPW5vXSkKKy1pZiB0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzOyB0aGVuCistICAgICAgIEFDX0RFRklORShIQVZFX0xDTVMsIDEsIFtIYXZlIGxjbXMgc3VwcG9ydF0pCisrQUNfQVJHX0VOQUJMRShsY21zLAorKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1sY21zXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGxjbXMgc3VwcG9ydF0pLCwKKysgICAgICAgICAgICAgIGVuYWJsZV9sY21zPWF1dG8pCisrQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRlbmFibGVfbGNtcyIgPSB4eWVzXSkKKytpZiB0ZXN0ICJ4JGVuYWJsZV9sY21zIiAhPSAieG5vIjsgdGhlbgorKyAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoTENNUywgCisrICAgICAgICAgICAgICAgICAgICAgICAgIGxjbXMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9bm9dKQorKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInhubyIgLWEgIngkZW5hYmxlX2xjbXMiID0gInh5ZXMiOyB0aGVuCisrICAgICAgICAgIEFDX01TR19FUlJPUihbbGNtcyBzdXBwb3J0IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBidXQgbGNtcyBjb3VsZG4ndCBiZSBmb3VuZF0pCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInh5ZXMiOyB0aGVuCisrICAgICAgICAgICAgICAgIGVuYWJsZV9sY21zPXllcworKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MQ01TLCAxLCBbSGF2ZSBsY21zIHN1cHBvcnRdKQorKyAgICAgICAgZmkKKyBmaQorLUFNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXNdKQorIAorIEFDX1BBVEhfUFJPRyhbd2F5bGFuZF9zY2FubmVyXSwgW3dheWxhbmQtc2Nhbm5lcl0pCisgaWYgdGVzdCB4JHdheWxhbmRfc2Nhbm5lciA9IHg7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDA3ZDRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKKworVGhlIGxpYndlYnAgcGFja2FnZSBpcyBvdXRzaWRlIG9mIG9wZW5lbWJlZGRlZC1jb3JlLCBzbyBtYWtlIGl0CitleHBsaWNpdGx5IGNvbmZpZ3VyYWJsZS4gTWFrZSBpdCBkZXRlcm1pbmlzdGljLCBzbyB0aGF0IGlmIGxpYndlYnAgCitkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcsIGF1dG9jb25mIHRocm93cyBhIGZhdGFsIGVycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZXN0b24tMS41LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCitAQCAtMjY4LDkgKzI2OCwyMiBAQCBmaQorIAorIFBLR19DSEVDS19NT0RVTEVTKFBJWE1BTiwgW3BpeG1hbi0xXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhQTkcsIFtsaWJwbmddKQorLVBLR19DSEVDS19NT0RVTEVTKFdFQlAsIFtsaWJ3ZWJwXSwgW2hhdmVfd2VicD15ZXNdLCBbaGF2ZV93ZWJwPW5vXSkKKy1BU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInh5ZXMiXSwKKy0gICAgICBbQUNfREVGSU5FKFtIQVZFX1dFQlBdLCBbMV0sIFtIYXZlIHdlYnBdKV0pCisrQUNfQVJHX0VOQUJMRSh3ZWJwLAorKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS13ZWJwXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGxpYndlYnAgc3VwcG9ydF0pLCwKKysgICAgICAgICAgICAgIGVuYWJsZV93ZWJwPWF1dG8pCisrQU1fQ09ORElUSU9OQUwoSEFWRV9XRUJQLCBbdGVzdCAieCRlbmFibGVfd2VicCIgPSB4eWVzXSkKKytBU19JRihbdGVzdCAieCRlbmFibGVfd2VicCIgIT0gInhubyJdLAorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhXRUJQLAorKyAgICAgICAgICAgICAgICAgICAgIFtsaWJ3ZWJwXSwKKysgICAgICAgICAgICAgICAgICAgICBbaGF2ZV93ZWJwPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgW2hhdmVfd2VicD1ub10pCisrICAgIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieG5vIiAtYSAieCRlbmFibGVfd2VicCIgPSAieHllcyJdLAorKyAgICAgICAgQUNfTVNHX0VSUk9SKFtsaWJ3ZWJwIHN1cHBvcnQgZXhwbGljaXRseSByZXF1ZXN0LCBidXQgbGlwd2VicCBjb3VsZCBub3QgYmUgZm91bmRdKSkKKysgICAgQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4eWVzIl0sCisrICAgICAgICBbZW5hYmxlX3dlYnA9eWVzXQorKyAgICAgICAgW0FDX0RFRklORShbSEFWRV9XRUJQXSwgWzFdLCBbSGF2ZSB3ZWJwXSldKQorKykKKyAKKyBBQ19BUkdfRU5BQkxFKHZhYXBpLXJlY29yZGVyLCBbICAtLWVuYWJsZS12YWFwaS1yZWNvcmRlcl0sLAorIAkgICAgICBlbmFibGVfdmFhcGlfcmVjb3JkZXI9YXV0bykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmI1ZWZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vcGFyYWxsZWxtYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0JhY2twb3J0IHR3byBwYXRjaGVzIGZyb20gdXBzdHJlYW0gdG8gZml4IHBhcmFsbGVsIGJ1aWxkcworCistIG1rZGlyIHJhY2VzICgyZWZmMjJiOGU2ZjZlNTI1NWExOTE1YzMzZGZkOTFjZWNmMDJjYmJjKQorLSB3ZXN0b24uZGVza3RvcCByYWNlICgzMTU0NzZmYTdiMWYxYzQ0YzFiMzUxMTYwMzZkZjU0YWM1Y2I5YTAzKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNTgxOWIxOS4uZmYxM2IxOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTIwLDcgKzIwLDcgQEAgd2VzdG9uLmluaSA6ICQoc3JjZGlyKS93ZXN0b24uaW5pLmluCisgCQkkPCA+ICRACisgCisgaXZpLXNoZWxsL3dlc3Rvbi5pbmkgOiAkKHNyY2RpcikvaXZpLXNoZWxsL3dlc3Rvbi5pbmkuaW4KKy0JJChBTV9WX0dFTikkKFNFRCkgXAorKwkkKEFNX1ZfR0VOKSQoTUtESVJfUCkgJChkaXIgJEApICYmICQoU0VEKSBcCisgCQktZSAnc3xAYmluZGlyW0BdfCQoYmluZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9idWlsZGRpcltAXXwkKGFic190b3BfYnVpbGRkaXIpfGcnIFwKKyAJCS1lICdzfEBhYnNfdG9wX3NyY2RpcltAXXwkKGFic190b3Bfc3JjZGlyKXxnJyBcCitAQCAtMjksNyArMjksNyBAQCBpdmktc2hlbGwvd2VzdG9uLmluaSA6ICQoc3JjZGlyKS9pdmktc2hlbGwvd2VzdG9uLmluaS5pbgorIAkJJDwgPiAkQAorIAorIHRlc3RzL3dlc3Rvbi1pdmkuaW5pIDogJChzcmNkaXIpL2l2aS1zaGVsbC93ZXN0b24uaW5pLmluCistCSQoQU1fVl9HRU4pJChTRUQpIFwKKysJJChBTV9WX0dFTikkKE1LRElSX1ApICQoZGlyICRAKSAmJiAkKFNFRCkgXAorIAkJLWUgJ3N8QGJpbmRpcltAXXwkKGJpbmRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3BfYnVpbGRkaXJbQF18JChhYnNfdG9wX2J1aWxkZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9zcmNkaXJbQF18JChhYnNfdG9wX3NyY2Rpcil8ZycgXAorQEAgLTE3OSw4ICsxNzksNyBAQCBwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBzcmMvd2VzdG9uLnBjCisgCisgd2F5bGFuZF9zZXNzaW9uZGlyID0gJChkYXRhZGlyKS93YXlsYW5kLXNlc3Npb25zCistd2F5bGFuZF9zZXNzaW9uX0RBVEEgPSBzcmMvd2VzdG9uLmRlc2t0b3AKKy1kaXN0X3dheWxhbmRfc2Vzc2lvbl9EQVRBID0gJCh3YXlsYW5kX3Nlc3Npb25fREFUQSkKKytkaXN0X3dheWxhbmRfc2Vzc2lvbl9EQVRBID0gc3JjL3dlc3Rvbi5kZXNrdG9wCisgCisgd2VzdG9uaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvd2VzdG9uCisgd2VzdG9uaW5jbHVkZV9IRUFERVJTID0JCQkJXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24uZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg2YWU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AKQEAgLTAsMCArMSw5IEBACitbRGVza3RvcCBFbnRyeV0KK0VuY29kaW5nPVVURi04CitUeXBlPUFwcGxpY2F0aW9uCitOYW1lPVdlc3RvbgorQ29tbWVudD1XYXlsYW5kIENvbXBvc3RpdG9yCitFeGVjPXdlc3RvbgorSWNvbj13ZXN0b24KK1Rlcm1pbmFsPWZhbHNlCitDYXRlZ29yaWVzPVV0aWxpdHk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24ucG5nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYThiN2UwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MmM2MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYgpAQCAtMCwwICsxLDk0IEBACitTVU1NQVJZID0gIldlc3RvbiwgYSBXYXlsYW5kIGNvbXBvc2l0b3IiCitERVNDUklQVElPTiA9ICJXZXN0b24gaXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBhIFdheWxhbmQgY29tcG9zaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Mjc1ZWZhYzI1NTlhMjI0NTI3YmQ0ZmQ1OTNkMzg0NjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NvbXBvc2l0b3IuYztlbmRsaW5lPTIzO21kNT1hOTc5M2YxZWRjOGQxYTRjMzQ0Y2E4YWUyNTIzNTJmYiIKKworU1JDX1VSSSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24ucG5nIFwKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5kZXNrdG9wIFwKKyAgICAgICAgICAgZmlsZTovL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsbWFrZS5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiMjRjYjhhN2VkMDUzNWI0ZmMzNjQyNjQzOTg4ZGFiMzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk2M2U2OWYzMjhlODE1Y2VjNDJjNTgwNDZjNGFmNzIxNDc2Yzc1NDFiYjdkOWVkYzcxNzQwZmFkYTVhZDMxMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVzZXJhZGQKKworREVQRU5EUyA9ICJsaWJ4a2Jjb21tb24gZ2RrLXBpeGJ1ZiBwaXhtYW4gY2Fpcm8gZ2xpYi0yLjAganBlZyIKK0RFUEVORFMgKz0gIndheWxhbmQgbGliaW5wdXQgdmlydHVhbC9lZ2wgcGFuZ28iCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zZXR1aWQtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXh3YXlsYW5kIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaW1wbGUtY2xpZW50cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2xpZW50cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZGVtby1jbGllbnRzLWluc3RhbGwgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGktY29tcG9zaXRvciBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJkcC1jb21wb3NpdG9yIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4NiA9ICJcCisJCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKKwkJIgorRVhUUkFfT0VDT05GX2FwcGVuZF9xZW11eDg2LTY0ID0gIlwKKwkJV0VTVE9OX05BVElWRV9CQUNLRU5EPWZiZGV2LWJhY2tlbmQuc28gXAorCQkiCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ2ttcyBmYmRldiB3YXlsYW5kIGVnbCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xhdW5jaCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIgorIworIyBDb21wb3NpdG9yIGNob2ljZXMKKyMKKyMgV2VzdG9uIG9uIEtNUworUEFDS0FHRUNPTkZJR1trbXNdID0gIi0tZW5hYmxlLWRybS1jb21wb3NpdG9yLC0tZGlzYWJsZS1kcm0tY29tcG9zaXRvcixkcm0gdWRldiB2aXJ0dWFsL21lc2EgbXRkZXYiCisjIFdlc3RvbiBvbiBXYXlsYW5kIChuZXN0ZWQgV2VzdG9uKQorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix2aXJ0dWFsL21lc2EiCisjIFdlc3RvbiBvbiBYMTEKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtY29tcG9zaXRvciwtLWRpc2FibGUteDExLWNvbXBvc2l0b3IsdmlydHVhbC9saWJ4MTEgbGlieGNiIGxpYnhjYiBsaWJ4Y3Vyc29yIGNhaXJvIgorIyBIZWFkbGVzcyBXZXN0b24KK1BBQ0tBR0VDT05GSUdbaGVhZGxlc3NdID0gIi0tZW5hYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IsLS1kaXNhYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IiCisjIFdlc3RvbiBvbiBmcmFtZWJ1ZmZlcgorUEFDS0FHRUNPTkZJR1tmYmRldl0gPSAiLS1lbmFibGUtZmJkZXYtY29tcG9zaXRvciwtLWRpc2FibGUtZmJkZXYtY29tcG9zaXRvcix1ZGV2IG10ZGV2IgorIyB3ZXN0b24tbGF1bmNoCitQQUNLQUdFQ09ORklHW2xhdW5jaF0gPSAiLS1lbmFibGUtd2VzdG9uLWxhdW5jaCwtLWRpc2FibGUtd2VzdG9uLWxhdW5jaCxsaWJwYW0gZHJtIgorIyBWQS1BUEkgZGVza3RvcCByZWNvcmRlcgorUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGktcmVjb3JkZXIsLS1kaXNhYmxlLXZhYXBpLXJlY29yZGVyLGxpYnZhIgorIyBXZXN0b24gd2l0aCBFR0wgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLWVuYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsLS1kaXNhYmxlLWVnbCAtLWRpc2FibGUtc2ltcGxlLWVnbC1jbGllbnRzLHZpcnR1YWwvZWdsIgorIyBXZXN0b24gd2l0aCBjYWlybyBnbGVzdjIgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tjYWlyby1nbGVzdjJdID0gIi0td2l0aC1jYWlyby1nbGVzdjIsLS13aXRoLWNhaXJvPWltYWdlLGNhaXJvIgorIyBXZXN0b24gd2l0aCBsY21zIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbbGNtc10gPSAiLS1lbmFibGUtbGNtcywtLWRpc2FibGUtbGNtcyxsY21zIgorIyBXZXN0b24gd2l0aCB3ZWJwIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgorIyBXZXN0b24gd2l0aCB1bndpbmRpbmcgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBXZXN0b24gZG9lc24ndCBuZWVkIHRoZSAubGEgZmlsZXMgdG8gbG9hZCBtb2R1bGVzLCBzbyB3aXBlIHRoZW0KKwlybSAtZiAke0R9LyR7bGliZGlyfS93ZXN0b24vKi5sYQorCisJIyBJZiBYMTEsIHNoaXAgYSBkZXNrdG9wIGZpbGUgdG8gbGF1bmNoIGl0CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIgPSAieDExIiBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisJCWluc3RhbGwgJHtXT1JLRElSfS93ZXN0b24uZGVza3RvcCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKworCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvNDh4NDgvYXBwcworCQlpbnN0YWxsICR7V09SS0RJUn0vd2VzdG9uLnBuZyAke0R9JHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKKyAgICAgICAgZmkKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LWV4YW1wbGVzIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vd2VzdG9uICR7YmluZGlyfS93ZXN0b24tdGVybWluYWwgJHtiaW5kaXJ9L3dlc3Rvbi1pbmZvICR7YmluZGlyfS93ZXN0b24tbGF1bmNoICR7YmluZGlyfS93Y2FwLWRlY29kZSAke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS8ke0JQTn0vKi5zbyAke2RhdGFkaXJ9IgorRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtiaW5kaXJ9LyoiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4a2V5Ym9hcmQtY29uZmlnIgorUlJFQ09NTUVORFNfJHtQTn0gPSAibGliZXJhdGlvbi1mb250cyIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIHdlc3Rvbi1sYXVuY2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViNjlkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hkZWZhdWx0cwpAQCAtMCwwICsxLDMgQEAKK1J4dnQqc2Nyb2xsQmFyX3JpZ2h0OiB0cnVlCitSeHZ0KmZvbnQ6IHhmdDpNb25vOnBpeGVsc2l6ZT05CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXJ2ZXIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTcwZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorIworCitYU0VSVkVSPS91c3IvYmluL1hvcmcKKworLiAvZXRjL3Byb2ZpbGUKKworQVJHUz0iIC1iciAtcG4iCisKK0RJU1BMQVk9JzowJworCitleGVjIHhpbml0IC9ldGMvWDExL1hzZXNzaW9uIC0tICRYU0VSVkVSICRESVNQTEFZICRBUkdTICQqCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNzMxMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbgpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworaWYgWyAteCAvdXNyL2Jpbi9kYnVzLWxhdW5jaCBdOyB0aGVuCisgICAgIyBBcyB0aGlzIGlzIHRoZSBYIHNlc3Npb24gc2NyaXB0LCBhbHdheXMgc3RhcnQgYSBuZXcgREJ1cyBzZXNzaW9uLgorICAgIGV2YWwgYGRidXMtbGF1bmNoIC0tc2gtc3ludGF4IC0tZXhpdC13aXRoLXNlc3Npb24gPC9kZXYvbnVsbGAKKyAgICBlY2hvICJELUJVUyBwZXItc2Vzc2lvbiBkYWVtb24gYWRkcmVzcyBpczogJERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIKK2ZpCisKKy4gL2V0Yy9wcm9maWxlCisKK2lmIFsgLWYgJEhPTUUvLnByb2ZpbGUgXTsgdGhlbgorICAgIC4gJEhPTUUvLnByb2ZpbGUKK2ZpCisKK1NZU1NFU1NJT05ESVI9L2V0Yy9YMTEvWHNlc3Npb24uZAorCitleHBvcnQgQ0xVVFRFUl9ESVNBQkxFX01JUE1BUFBFRF9URVhUPTEKKworZm9yIFNFU1NJT05GSUxFIGluICRTWVNTRVNTSU9ORElSLyo7IGRvCisgICAgc2V0ICtlCisgICAgY2FzZSAiJFNFU1NJT05GSUxFIiBpbgorICAgICAgICAqLnNoKQorICAgICAgICAgICAgLiAiJFNFU1NJT05GSUxFIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKi5zaGJnKQorICAgICAgICAgICAgIiRTRVNTSU9ORklMRSIgJgorICAgICAgICAgICAgOzsKKyAgICAgICAgKn4pCisgICAgICAgICAgICAjIElnbm9yZSBiYWNrdXAgZmlsZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAiJFNFU1NJT05GSUxFIgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgc2V0IC1lCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xMmtleW1hcC5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkMTAyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2gKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworIyBrZHJpdmUgMS40IGRvZXMgbm90IGhhdmUgZGVmYXVsdCBrZXltYXAgaW4gc2VydmVyCisjeG1vZG1hcCAtIDwvZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU5NGI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMgTWluaW1hbC9zdHViIGltcGxlbWVudGF0aW9uIG9mIHRoZSBYREcgQmFzZSBEaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKyMgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvYmFzZWRpci1zcGVjL2Jhc2VkaXItc3BlYy1sYXRlc3QuaHRtbAorIworIyBXYXlsYW5kIG5lZWRzIFhER19SVU5USU1FX0RJUiwgc28gc2V0IGl0IHRvIC90bXAuICBUaGlzIGlzbid0IGNvbXBsaWFudCB3aXRoCisjIHRoZSBzcGVjaWZpY2F0aW9uICh3cm9uZyBtb2RlLCB3cm9uZyBvd25lcikgYnV0IGl0J3MgbW9zdGx5IHN1ZmZpY2llbnQuCisjCisjIEluIHRoZSBpZGVhbCBjYXNlIHdoZXJlIFN5c3RlbUQgaXMgYm9vdGluZyBhbmQgdXNlcnNwYWNlIGlzIGluaXRpYXRlZCBieSBhCisjIFN5c3RlbUQgdXNlciBzZXNzaW9uIHRoaXMgd2lsbCBoYXZlIGJlZW4gc2V0IGFscmVhZHksIHNvIGRvbid0IG92ZXJ3cml0ZSBpdC4KKworaWYgWyAteiAiJFhHRF9SVU5USU1FX0RJUiIgXTsgdGhlbgorCVhER19SVU5USU1FX0RJUj0iL3RtcCIKKyAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvODl4ZGdhdXRvc3RhcnQuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzAwOGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoCkBAIC0wLDAgKzEsNyBAQAorWERHQVVUT1NUQVJUPS9ldGMveGRnL2F1dG9zdGFydAoraWYgWyAtZCAkWERHQVVUT1NUQVJUIF07IHRoZW4KKyAgICBmb3IgU0NSSVBUIGluICRYREdBVVRPU1RBUlQvKjsgZG8KKyAgICAgICAgQ01EPWBncmVwIF5FeGVjPSAkU0NSSVBUIHwgY3V0IC1kICc9JyAtZiAyYAorICAgICAgICAkQ01EICYKKyAgICBkb25lCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzZkZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzkwWFdpbmRvd01hbmFnZXIuc2gKQEAgLTAsMCArMSw3IEBACitpZiBbIC14ICRIT01FLy5Yc2Vzc2lvbiBdOyB0aGVuCisgICAgZXhlYyAkSE9NRS8uWHNlc3Npb24KK2VsaWYgWyAteCAvdXNyL2Jpbi94LXNlc3Npb24tbWFuYWdlciBdOyB0aGVuCisgICAgZXhlYyAvdXNyL2Jpbi94LXNlc3Npb24tbWFuYWdlcgorZWxzZQorICAgIGV4ZWMgL3Vzci9iaW4veC13aW5kb3ctbWFuYWdlcgorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWExM2ZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvZGVmYXVsdC54bW9kbWFwCkBAIC0wLDAgKzEsMjYwIEBACitrZXljb2RlICAgOCA9CitrZXljb2RlICAgOSA9IEVzY2FwZQora2V5Y29kZSAgMTAgPSAxIGV4Y2xhbQora2V5Y29kZSAgMTEgPSAyIGF0CitrZXljb2RlICAxMiA9IDMgbnVtYmVyc2lnbgora2V5Y29kZSAgMTMgPSA0IGRvbGxhcgora2V5Y29kZSAgMTQgPSA1IHBlcmNlbnQKK2tleWNvZGUgIDE1ID0gNiBhc2NpaWNpcmN1bQora2V5Y29kZSAgMTYgPSA3IGFtcGVyc2FuZCBicmFjZWxlZnQKK2tleWNvZGUgIDE3ID0gOCBhc3RlcmlzayBicmFja2V0bGVmdAora2V5Y29kZSAgMTggPSA5IHBhcmVubGVmdCBicmFja2V0cmlnaHQKK2tleWNvZGUgIDE5ID0gMCBwYXJlbnJpZ2h0IGJyYWNlcmlnaHQKK2tleWNvZGUgIDIwID0gbWludXMgdW5kZXJzY29yZSBiYWNrc2xhc2gKK2tleWNvZGUgIDIxID0gZXF1YWwgcGx1cwora2V5Y29kZSAgMjIgPSBCYWNrU3BhY2UKK2tleWNvZGUgIDIzID0gVGFiCitrZXljb2RlICAyNCA9IHEgUSBxCitrZXljb2RlICAyNSA9IHcgVyB3CitrZXljb2RlICAyNiA9IGUgRQora2V5Y29kZSAgMjcgPSByIFIgcgora2V5Y29kZSAgMjggPSB0IFQgdAora2V5Y29kZSAgMjkgPSB5IFkgeQora2V5Y29kZSAgMzAgPSB1IFUgdQora2V5Y29kZSAgMzEgPSBpIEkgaQora2V5Y29kZSAgMzIgPSBvIE8gbwora2V5Y29kZSAgMzMgPSBwIFAgcAora2V5Y29kZSAgMzQgPSBicmFja2V0bGVmdCBicmFjZWxlZnQKK2tleWNvZGUgIDM1ID0gYnJhY2tldHJpZ2h0IGJyYWNlcmlnaHQgYXNjaWl0aWxkZQora2V5Y29kZSAgMzYgPSBSZXR1cm4KK2tleWNvZGUgIDM3ID0gQ29udHJvbF9MCitrZXljb2RlICAzOCA9IGEgQQora2V5Y29kZSAgMzkgPSBzIFMgcwora2V5Y29kZSAgNDAgPSBkIEQKK2tleWNvZGUgIDQxID0gZiBGCitrZXljb2RlICA0MiA9IGcgRyBnCitrZXljb2RlICA0MyA9IGggSCBoCitrZXljb2RlICA0NCA9IGogSiBqCitrZXljb2RlICA0NSA9IGsgSyBrCitrZXljb2RlICA0NiA9IGwgTCBsCitrZXljb2RlICA0NyA9IHNlbWljb2xvbiBjb2xvbgora2V5Y29kZSAgNDggPSBhcG9zdHJvcGhlIHF1b3RlZGJsCitrZXljb2RlICA0OSA9IGdyYXZlIGFzY2lpdGlsZGUKK2tleWNvZGUgIDUwID0gU2hpZnRfTAora2V5Y29kZSAgNTEgPSBiYWNrc2xhc2ggYmFyCitrZXljb2RlICA1MiA9IHogWiB6CitrZXljb2RlICA1MyA9IHggWCB4CitrZXljb2RlICA1NCA9IGMgQwora2V5Y29kZSAgNTUgPSB2IFYgdgora2V5Y29kZSAgNTYgPSBiIEIKK2tleWNvZGUgIDU3ID0gbiBOIG4KK2tleWNvZGUgIDU4ID0gbSBNIG0KK2tleWNvZGUgIDU5ID0gY29tbWEgbGVzcwora2V5Y29kZSAgNjAgPSBwZXJpb2QgZ3JlYXRlcgora2V5Y29kZSAgNjEgPSBzbGFzaCBxdWVzdGlvbgora2V5Y29kZSAgNjIgPSBTaGlmdF9SCitrZXljb2RlICA2MyA9IEtQX011bHRpcGx5CitrZXljb2RlICA2NCA9IEFsdF9MCitrZXljb2RlICA2NSA9IHNwYWNlCitrZXljb2RlICA2NiA9IENhcHNfTG9jawora2V5Y29kZSAgNjcgPSBGMSBGMTEKK2tleWNvZGUgIDY4ID0gRjIgRjEyCitrZXljb2RlICA2OSA9IEYzIEYxMwora2V5Y29kZSAgNzAgPSBGNCBGMTQKK2tleWNvZGUgIDcxID0gRjUgRjE1CitrZXljb2RlICA3MiA9IEY2IEYxNgora2V5Y29kZSAgNzMgPSBGNyBGMTcKK2tleWNvZGUgIDc0ID0gRjggRjE4CitrZXljb2RlICA3NSA9IEY5IEYxOQora2V5Y29kZSAgNzYgPSBGMTAgRjIwCitrZXljb2RlICA3NyA9IE51bV9Mb2NrCitrZXljb2RlICA3OCA9IFNjcm9sbF9Mb2NrCitrZXljb2RlICA3OSA9IEtQXzcKK2tleWNvZGUgIDgwID0gS1BfOAora2V5Y29kZSAgODEgPSBLUF85CitrZXljb2RlICA4MiA9IEtQX1N1YnRyYWN0CitrZXljb2RlICA4MyA9IEtQXzQKK2tleWNvZGUgIDg0ID0gS1BfNQora2V5Y29kZSAgODUgPSBLUF82CitrZXljb2RlICA4NiA9IEtQX0FkZAora2V5Y29kZSAgODcgPSBLUF8xCitrZXljb2RlICA4OCA9IEtQXzIKK2tleWNvZGUgIDg5ID0gS1BfMwora2V5Y29kZSAgOTAgPSBLUF8wCitrZXljb2RlICA5MSA9IEtQX0RlY2ltYWwKK2tleWNvZGUgIDkyID0KK2tleWNvZGUgIDkzID0KK2tleWNvZGUgIDk0ID0gbGVzcyBncmVhdGVyIGJhcgora2V5Y29kZSAgOTUgPSBGMTEKK2tleWNvZGUgIDk2ID0gRjEyCitrZXljb2RlICA5NyA9CitrZXljb2RlICA5OCA9CitrZXljb2RlICA5OSA9CitrZXljb2RlIDEwMCA9CitrZXljb2RlIDEwMSA9CitrZXljb2RlIDEwMiA9CitrZXljb2RlIDEwMyA9CitrZXljb2RlIDEwNCA9IEtQX0VudGVyCitrZXljb2RlIDEwNSA9IENvbnRyb2xfUgora2V5Y29kZSAxMDYgPSBLUF9EaXZpZGUKK2tleWNvZGUgMTA3ID0KK2tleWNvZGUgMTA4ID0gTW9kZV9zd2l0Y2gKK2tleWNvZGUgMTA5ID0gQnJlYWsKK2tleWNvZGUgMTEwID0gSG9tZQora2V5Y29kZSAxMTEgPSBVcAora2V5Y29kZSAxMTIgPSBQcmlvcgora2V5Y29kZSAxMTMgPSBMZWZ0CitrZXljb2RlIDExNCA9IFJpZ2h0CitrZXljb2RlIDExNSA9IEVuZAora2V5Y29kZSAxMTYgPSBEb3duCitrZXljb2RlIDExNyA9IE5leHQKK2tleWNvZGUgMTE4ID0gSW5zZXJ0CitrZXljb2RlIDExOSA9IERlbGV0ZQora2V5Y29kZSAxMjAgPSBNZW51CitrZXljb2RlIDEyMSA9IEYxMwora2V5Y29kZSAxMjIgPSBGMTQKK2tleWNvZGUgMTIzID0gSGVscAora2V5Y29kZSAxMjQgPSBFeGVjdXRlCitrZXljb2RlIDEyNSA9IEYxNwora2V5Y29kZSAxMjYgPSBLUF9TdWJ0cmFjdAora2V5Y29kZSAxMjcgPSBQYXVzZQora2V5Y29kZSAxMjggPQora2V5Y29kZSAxMjkgPQora2V5Y29kZSAxMzAgPQora2V5Y29kZSAxMzEgPQora2V5Y29kZSAxMzIgPQora2V5Y29kZSAxMzMgPQora2V5Y29kZSAxMzQgPQora2V5Y29kZSAxMzUgPQora2V5Y29kZSAxMzYgPQora2V5Y29kZSAxMzcgPQora2V5Y29kZSAxMzggPQora2V5Y29kZSAxMzkgPQora2V5Y29kZSAxNDAgPQora2V5Y29kZSAxNDEgPQora2V5Y29kZSAxNDIgPQora2V5Y29kZSAxNDMgPQora2V5Y29kZSAxNDQgPQora2V5Y29kZSAxNDUgPQora2V5Y29kZSAxNDYgPQora2V5Y29kZSAxNDcgPQora2V5Y29kZSAxNDggPQora2V5Y29kZSAxNDkgPQora2V5Y29kZSAxNTAgPQora2V5Y29kZSAxNTEgPQora2V5Y29kZSAxNTIgPQora2V5Y29kZSAxNTMgPQora2V5Y29kZSAxNTQgPQora2V5Y29kZSAxNTUgPQora2V5Y29kZSAxNTYgPQora2V5Y29kZSAxNTcgPQora2V5Y29kZSAxNTggPQora2V5Y29kZSAxNTkgPQora2V5Y29kZSAxNjAgPQora2V5Y29kZSAxNjEgPQora2V5Y29kZSAxNjIgPQora2V5Y29kZSAxNjMgPQora2V5Y29kZSAxNjQgPQora2V5Y29kZSAxNjUgPQora2V5Y29kZSAxNjYgPQora2V5Y29kZSAxNjcgPQora2V5Y29kZSAxNjggPQora2V5Y29kZSAxNjkgPQora2V5Y29kZSAxNzAgPQora2V5Y29kZSAxNzEgPQora2V5Y29kZSAxNzIgPQora2V5Y29kZSAxNzMgPQora2V5Y29kZSAxNzQgPQora2V5Y29kZSAxNzUgPQora2V5Y29kZSAxNzYgPQora2V5Y29kZSAxNzcgPQora2V5Y29kZSAxNzggPQora2V5Y29kZSAxNzkgPQora2V5Y29kZSAxODAgPQora2V5Y29kZSAxODEgPQora2V5Y29kZSAxODIgPQora2V5Y29kZSAxODMgPQora2V5Y29kZSAxODQgPQora2V5Y29kZSAxODUgPQora2V5Y29kZSAxODYgPQora2V5Y29kZSAxODcgPQora2V5Y29kZSAxODggPQora2V5Y29kZSAxODkgPQora2V5Y29kZSAxOTAgPQora2V5Y29kZSAxOTEgPQora2V5Y29kZSAxOTIgPQora2V5Y29kZSAxOTMgPQora2V5Y29kZSAxOTQgPQora2V5Y29kZSAxOTUgPQora2V5Y29kZSAxOTYgPQora2V5Y29kZSAxOTcgPQora2V5Y29kZSAxOTggPQora2V5Y29kZSAxOTkgPQora2V5Y29kZSAyMDAgPQora2V5Y29kZSAyMDEgPQora2V5Y29kZSAyMDIgPQora2V5Y29kZSAyMDMgPQora2V5Y29kZSAyMDQgPQora2V5Y29kZSAyMDUgPQora2V5Y29kZSAyMDYgPQora2V5Y29kZSAyMDcgPQora2V5Y29kZSAyMDggPQora2V5Y29kZSAyMDkgPQora2V5Y29kZSAyMTAgPQora2V5Y29kZSAyMTEgPQora2V5Y29kZSAyMTIgPQora2V5Y29kZSAyMTMgPQora2V5Y29kZSAyMTQgPQora2V5Y29kZSAyMTUgPQora2V5Y29kZSAyMTYgPQora2V5Y29kZSAyMTcgPQora2V5Y29kZSAyMTggPQora2V5Y29kZSAyMTkgPQora2V5Y29kZSAyMjAgPQora2V5Y29kZSAyMjEgPQora2V5Y29kZSAyMjIgPQora2V5Y29kZSAyMjMgPQora2V5Y29kZSAyMjQgPQora2V5Y29kZSAyMjUgPQora2V5Y29kZSAyMjYgPQora2V5Y29kZSAyMjcgPQora2V5Y29kZSAyMjggPQora2V5Y29kZSAyMjkgPQora2V5Y29kZSAyMzAgPQora2V5Y29kZSAyMzEgPQora2V5Y29kZSAyMzIgPQora2V5Y29kZSAyMzMgPQora2V5Y29kZSAyMzQgPQora2V5Y29kZSAyMzUgPQora2V5Y29kZSAyMzYgPQora2V5Y29kZSAyMzcgPQora2V5Y29kZSAyMzggPQora2V5Y29kZSAyMzkgPQora2V5Y29kZSAyNDAgPQora2V5Y29kZSAyNDEgPQora2V5Y29kZSAyNDIgPQora2V5Y29kZSAyNDMgPQora2V5Y29kZSAyNDQgPQora2V5Y29kZSAyNDUgPQora2V5Y29kZSAyNDYgPQora2V5Y29kZSAyNDcgPQora2V5Y29kZSAyNDggPQora2V5Y29kZSAyNDkgPQora2V5Y29kZSAyNTAgPQora2V5Y29kZSAyNTEgPQora2V5Y29kZSAyNTIgPQora2V5Y29kZSAyNTMgPQora2V5Y29kZSAyNTQgPQorCithZGQgc2hpZnQgPSBTaGlmdF9MCithZGQgc2hpZnQgPSBTaGlmdF9SCithZGQgc2hpZnQgPSBNZW51CithZGQgbG9jayA9IENhcHNfTG9jaworYWRkIGNvbnRyb2wgPSBDb250cm9sX0wKK2FkZCBjb250cm9sID0gQ29udHJvbF9SCithZGQgbW9kMSA9IEFsdF9MCithZGQgbW9kMiA9IE51bV9Mb2NrCishbW9kMyAgICAgIAorYWRkIG1vZDQgPSBNb2RlX3N3aXRjaAorIW1vZDUgICAgICAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZ3BsdjItbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmY5NzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwzNTUgQEAKK0NPUFlJTkc6IGFkZCBHUEx2MiBsaWNlbnNlIGZpbGUKKwordGhpcyBpcyBhIGxvY2FsIGZpbGUgcmVjaXBlIGFuZCB0aGUgbGljZW5zZSBmaWxlIGlzIG1pc3NpbmcuSW4gb3JkZXIKK3RvIHBhc3MgdGhlIGxpY2Vuc2UgY2hlY2tzdW0gY2hlY2tpbmcsIHRoZSBsaWNlbnNlIGZpbGUgaXMgbmVlZGVkLiBTbwordGhpcyBwYXRjaCBhZGQgdGhlIEdQTHYyIGxpY2Vuc2UgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ1MTE5MDUKKy0tLSAvZGV2L251bGwKKysrKyBiL0NPUFlJTkcKK0BAIC0wLDAgKzEsMzM5IEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKworKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKworK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKworKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbl8wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmIzMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIFgxMSBzY3JpcHRzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyNDciCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIHhkeXBpbmZvIHhtb2RtYXAgeGluaXQKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiZmlsZTovL2V0YyBcCisgICAgICAgICAgIGZpbGU6Ly9ncGx2Mi1saWNlbnNlLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJY3AgLVIgJHtTfS9ldGMgJHtEfSR7c3lzY29uZmRpcn0KKwljaG1vZCAtUiA3NTUgJHtEfSR7c3lzY29uZmRpcn0KKwlmaW5kICR7RH0ke3N5c2NvbmZkaXJ9IC10eXBlIGYgLW5hbWUgXCp+IC1leGVjIHJtIC1yZiB7fSBcOworfQorCitSREVQRU5EU18ke1BOfSA9ICJkYnVzLXgxMSB4bW9kbWFwIHhkcHlpbmZvIHh0c2NhbCB4aW5pdCBmb3JtZmFjdG9yIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhkNDBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlNpbXBsZSBYc2VydmVyIEluaXQgU2NyaXB0IChubyBkbSkiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitTRUNUSU9OID0gIngxMSIKK1BSID0gInIzMSIKKworU1JDX1VSSSA9ICJmaWxlOi8veHNlcnZlci1ub2RtIFwKKyAgICAgICAgICAgZmlsZTovL1h1c2VybmFtZSBcCisgICAgICAgICAgIGZpbGU6Ly9ncGx2Mi1saWNlbnNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3hzZXJ2ZXItbm9kbS5jb25mIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCisjIFNpbmNlIHdlIHJlZmVyIHRvIFJPT1RMRVNTX1ggd2hpY2ggaXMgbm9ybWFsbHkgZW5hYmxlZCBwZXItbWFjaGluZQorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisgICAgICAgIGluc3RhbGwgeHNlcnZlci1ub2RtLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94c2VydmVyLW5vZG0uc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgICAgICAgc2VkIC1pICdzIV5IT01FPS4qIUhPTUU9L2hvbWUveHVzZXIhJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgICAgICAgICAgc2VkIC1pICdzIV5Vc2VyPS4qIVVzZXI9eHVzZXIhJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQorICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWQgLWkgJ3MhXkhPTUU9LiohSE9NRT0ke1JPT1RfSE9NRX0hJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgICAgICAgICAgc2VkIC1pICcvXlVzZXI9L2QnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgIGlmIFsgIiR7Uk9PVExFU1NfWH0iID0gIjEiIF0gOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L1gxMQorICAgICAgICAgICAgaW5zdGFsbCBYdXNlcm5hbWUgJHtEfSR7c3lzY29uZmRpcn0vWDExCisgICAgICAgIGZpCisgICAgZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnUk9PVExFU1NfWCcsICcxJywgJ3h1c2VyLWFjY291bnQnLCAnJywgZCl9IgorCitJTklUU0NSSVBUX05BTUUgPSAieHNlcnZlci1ub2RtIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOSA1IC4gc3RvcCAyMCAwIDEgMiAzIDYgLiIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ4c2VydmVyLW5vZG0uc2VydmljZSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDYwZTVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUKQEAgLTAsMCArMSBAQAoreHVzZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmY5NzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9ncGx2Mi1saWNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzU1IEBACitDT1BZSU5HOiBhZGQgR1BMdjIgbGljZW5zZSBmaWxlCisKK3RoaXMgaXMgYSBsb2NhbCBmaWxlIHJlY2lwZSBhbmQgdGhlIGxpY2Vuc2UgZmlsZSBpcyBtaXNzaW5nLkluIG9yZGVyCit0byBwYXNzIHRoZSBsaWNlbnNlIGNoZWNrc3VtIGNoZWNraW5nLCB0aGUgbGljZW5zZSBmaWxlIGlzIG5lZWRlZC4gU28KK3RoaXMgcGF0Y2ggYWRkIHRoZSBHUEx2MiBsaWNlbnNlIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmYTBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbQpAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IHhzZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICRsb2NhbF9mcyAkcmVtb3RlX2ZzIGRidXMKKyMgUmVxdWlyZWQtU3RvcDogJGxvY2FsX2ZzICRyZW1vdGVfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSAyIDMgNgorIyMjIEVORCBJTklUIElORk8KKwora2lsbHByb2MoKSB7ICAgICAgICAgICAgIyBraWxsIHRoZSBuYW1lZCBwcm9jZXNzKGVzKQorICAgICAgICBwaWQ9YC9iaW4vcGlkb2YgJDFgCisgICAgICAgIFsgIiRwaWQiICE9ICIiIF0gJiYga2lsbCAkcGlkCit9CisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHgxMT1mYWxzZSkKKwkJZWNobyAiWCBTZXJ2ZXIgZGlzYWJsZWQiIAorCQlleGl0IDA7CisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworZG9uZQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgICAgLiAvZXRjL3Byb2ZpbGUKKyAgICAgICB1c2VybmFtZT1yb290CisgICAgICAgZWNobyAiU3RhcnRpbmcgWHNlcnZlciIKKyAgICAgICBpZiBbIC1mIC9ldGMvWDExL1h1c2VybmFtZSBdOyB0aGVuCisgICAgICAgICAgIHVzZXJuYW1lPWBjYXQgL2V0Yy9YMTEvWHVzZXJuYW1lYAorICAgICAgICAgICAjIHNldHRpbmcgZm9yIHJvb3RsZXNzIFgKKyAgICAgICAgICAgY2htb2Qgbyt3IC92YXIvbG9nCisgICAgICAgICAgIGNobW9kIGcrciAvZGV2L3R0eVswLTNdCisgICAgICAgICAgICMgaGlkcmF3IGRldmljZSBpcyBwcm9iYWJseSBuZWVkZWQKKyAgICAgICAgICAgaWYgWyAtZSAvZGV2L2hpZHJhdzAgXTsgdGhlbgorICAgICAgICAgICAgICAgY2htb2QgbytydyAvZGV2L2hpZHJhdyoKKyAgICAgICAgICAgZmkKKyAgICAgICBmaQorICAgICAgICMgVXNpbmcgc3UgcmF0aGVyIHRoYW4gc3VkbyBhcyBsYXRlc3QgMS44LjEgY2F1c2UgZmFpbHVyZSBbWU9DVE8gIzEyMTFdCisgICAgICAgc3UgLWwgLWMgJy9ldGMvWDExL1hzZXJ2ZXImJyAkdXNlcm5hbWUgCisgICAgICAgIyBXYWl0IGZvciB0aGUgZGVza3RvcCB0byBzYXkgaXRzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAjIGJlZm9yZSBsb2FkaW5nIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0KKyAgICAgICAjIGRidXMtd2FpdCBvcmcubWF0Y2hib3hfcHJvamVjdC5kZXNrdG9wIExvYWRlZAorICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIFhTZXJ2ZXIiCisgICAgICAgIGtpbGxwcm9jIHhpbml0CisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgY2h2dCAxICYKKyAgOzsKKworICByZXN0YXJ0KQorCSQwIHN0b3AKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwNTgyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKQEAgLTAsMCArMSBAQAorSE9NRT0vaG9tZS9yb290CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ5NzlmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVhzZXJ2ZXIgc3RhcnR1cCB3aXRob3V0IGEgZGlzcGxheSBtYW5hZ2VyCisKK1tTZXJ2aWNlXQorVXNlcj1yb290CitFbnZpcm9ubWVudEZpbGU9L2V0Yy9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorRXhlY1N0YXJ0PS9ldGMvWDExL1hzZXJ2ZXIKKworW0luc3RhbGxdCitBbGlhcz1kaXNwbGF5LW1hbmFnZXIuc2VydmljZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvZW5kaWFuLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE1MzhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorbGlidm5jc2VydmVyOiByZXBsYWNlIExJQlZOQ1NFUlZFUl9XT1JEU19CSUdFTkRJQU4gd2l0aCBXT1JEU19CSUdFTkRJQU4KKworc2luY2UgbWFjcm8gQUNfQ19CSUdFTkRJQU4gaXMgdXNlZCBpbiBhdXRvY29uZiBhbmQgV09SRFNfQklHRU5ESUFOIGlzCithdXRvbWF0aWNhbGx5IHNldCBmb3IgZGlmZmVyZW50IGFyY2gsIGl0IGlzIGJldHRlciB0byB1c2UgV09SRFNfQklHRU5ESUFOCitpbnN0ZWFkIG9mIExJQlZOQ1NFUlZFUl9XT1JEU19CSUdFTkRJQU4sIHdoaWNoIGN1YXNlIGlzc3VlIGluIG1pcHMuCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC0tZ2l0IGEvbGlidm5jc2VydmVyL21haW4uYyBiL2xpYnZuY3NlcnZlci9tYWluLmMKK2luZGV4IGI2YmQ5MzAuLjhiYmI3YmYgMTAwNjQ0CistLS0gYS9saWJ2bmNzZXJ2ZXIvbWFpbi5jCisrKysgYi9saWJ2bmNzZXJ2ZXIvbWFpbi5jCitAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgTVVURVgoZXh0TXV0ZXgpOworIAorIHN0YXRpYyBpbnQgcmZiRW5hYmxlTG9nZ2luZz0xOworIAorLSNpZmRlZiBMSUJWTkNTRVJWRVJfV09SRFNfQklHRU5ESUFOCisrI2lmZGVmIFdPUkRTX0JJR0VORElBTgorIGNoYXIgcmZiRW5kaWFuVGVzdCA9ICgxPT0wKTsKKyAjZWxzZQorIGNoYXIgcmZiRW5kaWFuVGVzdCA9ICgxPT0xKTsKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL3N0YXJ0aW5nLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZTQwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorIi1ndWkiICYgIi1yZmJwb3J0IiByZXF1aXJlICJ3aXNoIiBpbnN0YWxsZWQsIG9yIGVsc2UgeDExdm5jIGZhaWxzIHRvIHN0YXJ0LgorUmVtb3ZpbmcgdGhlc2UgMiBwYXJhbWV0ZXJzIG1ha2VzIHgxMXZuYyB3b3JrcyB3ZWxsIG9uIHBva3kgc2F0byBpbWFnZS4KKworQWRkIGFsc28gLXNraXBfbG9ja2tleXMgb3B0aW9uIHRvIGlnbm9yZSBhbGwgQ2Fwc19Mb2NrLCBTaGlmdF9Mb2NrLCBOdW1fTG9jaywKK1Njcm9sbF9Mb2NrIGtleXN5bXMgcmVjZWl2ZWQgZnJvbSB2aWV3ZXJzLCBpbiBvcmRlciB0byBsZWF2ZSB0aGUgbG9jayBzdGF0ZSBvbgordGhlIHNlcnZlciBzaWRlIHVuY2hhbmdlZC4gWWV0LCB0aGUga2V5cyB3aWxsIGFwcGVhciBjb3JyZWN0bHkuCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiB4MTF2bmMtMC45LjEyL3gxMXZuYy94MTF2bmMuZGVza3RvcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHgxMXZuYy0wLjkuMTIub3JpZy94MTF2bmMveDExdm5jLmRlc2t0b3AJMjAxMS0wMy0wMyAxMDozMzoxOC4wMDAwMDAwMDAgKzA4MDAKKysrKyB4MTF2bmMtMC45LjEyL3gxMXZuYy94MTF2bmMuZGVza3RvcAkyMDExLTAzLTAzIDEwOjM1OjIwLjAwMDAwMDAwMCArMDgwMAorQEAgLTEsNyArMSw3IEBACisgW0Rlc2t0b3AgRW50cnldCisgTmFtZT1YMTFWTkMgU2VydmVyCisgQ29tbWVudD1TaGFyZSB0aGlzIGRlc2t0b3AgYnkgVk5DCistRXhlYz14MTF2bmMgLWd1aSB0cmF5PXNldHBhc3MgLXJmYnBvcnQgUFJPTVBUIC1iZyAtbyAlJUhPTUUvLngxMXZuYy5sb2cuJSVWTkNESVNQTEFZCisrRXhlYz14MTF2bmMgLWJnIC1yZmJwb3J0IDU5MDAgLXNraXBfbG9ja2tleXMgLW8gJSVIT01FLy54MTF2bmMubG9nLiUlVk5DRElTUExBWQorIEljb249Y29tcHV0ZXIKKyBUZXJtaW5hbD1mYWxzZQorIFR5cGU9QXBwbGljYXRpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL3gxMXZuY18wLjkuMTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwMjQxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRXhwb3J0cyB5b3VyIFggc2Vzc2lvbiBvbi10aGUtZmx5IHZpYSBWTkMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmthcmxydW5nZS5jb20veDExdm5jLyIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitBVVRIT1IgPSAiS2FybCBSdW5nZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzYxYjZiODM3Y2FkMjZjNjkwMGE5MjZiNjJhYWRhNWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veDExdm5jL3gxMXZuYy5oO2VuZGxpbmU9MzM7bWQ1PTZmOTVkYzY1MzU0NjdkN2VlMTU2M2ZkNDM0ZmIzNzJlIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ2bmNzZXJ2ZXIveDExdm5jLyR7UFZ9L3gxMXZuYy0ke1BWfS50YXIuZ3pcCisgICAgICAgICAgIGZpbGU6Ly9zdGFydGluZy1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuLWZpeC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMzcyZWM0ZmU4MjExMjIxNTQ3YjFjMTA4Y2Y1NmU0YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNjgyOWYyZTYyOTY2N2E1Mjg0ZGU2MmIwODBiMTMxMjZhMDczNjQ5OWZlNDdjZGI0NDdhZWRiMDdhNTlmMTNiIgorCitERVBFTkRTID0gIm9wZW5zc2wgdmlydHVhbC9saWJ4MTEgbGlieGV4dCBqcGVnIHpsaWIgbGlieGZpeGVzIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnh0c3QiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAnYXZhaGknLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thdmFoaV0gPSAiLS13aXRoLWF2YWhpLC0td2l0aG91dC1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbeGluZXJhbWFdID0gIi0td2l0aC14aW5lcmFtYSwtLXdpdGhvdXQteGluZXJhbWEsbGlieGluZXJhbWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYWM1NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitGaXggdHlwbyBpbiBNYWtlZmlsZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEub3JpZy9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDQuMDAxNDM1MzA1ICswMDAwCisrKysgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDQuMDYxNDM1MzAyICswMDAwCitAQCAtNzksNyArNzksNyBAQAorIAl1bF9hbmdsZSBcCisgCXVyX2FuZ2xlIFwKKyAJdl9kb3VibGVfYXJyb3cgXAorLQl3YXRjaGEgXAorKwl3YXRjaCBcCisgCXh0ZXJtICAKKyAKKyBDVVJTT1JfRElSID0gJChkYXRhZGlyKS9pY29ucy94Y3Vyc29yLXRyYW5zcGFyZW50L2N1cnNvcnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjhmZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1VzZSByZWxhdGl2ZSBzeW1saW5rIGZvciBsaW5rIHJhdGhlciB0aGFuIGFic29sdXRlIHBhdGggd2hpY2ggCitkb2Vzbid0IHdvcmsgd2VsbCBpbiBERVNURElSIHNldHRpbmcuCisKK0Fsc28gZml4IG91dCBvZiB0cmVlIGJ1aWxkcyB0byB1c2UgY29ycmVjdCBzcmNkaXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzMvOAorCitJbmRleDogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS5vcmlnL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNTowMy45MzM0MzUzMDcgKzAwMDAKKysrKyB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNToyNy4yOTM0MzQ3NTUgKzAwMDAKK0BAIC04OCw5ICs4OCw5IEBACisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKENVUlNPUl9ESVIpOyAKKy0JJChJTlNUQUxMX0RBVEEpICQoQ1VSU09SX1JFQUwpICQoREVTVERJUikkKENVUlNPUl9ESVIpLyAKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kKENVUlNPUl9SRUFMKSAkKERFU1RESVIpJChDVVJTT1JfRElSKS8KKyAJZm9yIENVUlNPUiBpbiAkKENVUlNPUl9OQU1FUyk7IGRvIFwKKyAJCWVjaG8gJy0tIEluc3RhbGxpbmcgY3Vyc29yICckJENVUlNPUjsgXAorLQkJbG4gLXMgJChERVNURElSKSQoQ1VSU09SX0RJUikvdHJhbnNwICQoREVTVERJUikkKENVUlNPUl9ESVIpLyQkQ1VSU09SOyBcCisrCQlsbiAtcyB0cmFuc3AgJChERVNURElSKSQoQ1VSU09SX0RJUikvJCRDVVJTT1I7IFwKKyAJZG9uZQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjY4YWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJUcmFuc3BhcmVudCBYMTEgY3Vyc29yIHRoZW1lIGZvciB0b3VjaHNjcmVlbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvbWF0Y2hib3gvdXRpbHMveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2IwYzYyMzA0OWQ0YWFiMjA2MDBkNjQ3M2Y4YWFiMjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjI2YWRmMmQ1MDNkMDEyOTk3MTgzOTBhZTM5ZGFiNDY5MWE2NzIyMGRlMDk0MjNiZTAzNjRlOWEwNjBiZjdlNCIKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vaWNvbnMveGN1cnNvci10cmFuc3BhcmVudC9jdXJzb3JzLyoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGFsbGFyY2gKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcG9pbnRlcmNhbC54aW5wdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzM2ZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0CkBAIC0wLDAgKzEgQEAKKyMgcmVwbGFjZSB3aXRoIHZhbGlkIG1hY2hpbmUgc3BlY2lmaWMgcG9pbnRlcmNhbC54aW5wdXQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTM0OGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXRfMC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gZGF0YSBmcm9tIHhpbnB1dC1jYWxpYnJhdG9yIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUFIgPSAicjciCisKK1NSQ19VUkkgPSAiZmlsZTovL3BvaW50ZXJjYWwueGlucHV0IgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICMgT25seSBpbnN0YWxsIGZpbGUgaWYgaXQgaGFzIGEgY29udGVudHMKKyAgICBpZiBbIC1zICR7U30vcG9pbnRlcmNhbC54aW5wdXQgXSAmJlwKKyAgICAgICBbICEgLW4gIiQoaGVhZCAtbjEgJHtTfS9wb2ludGVyY2FsLnhpbnB1dHxncmVwICJyZXBsYWNlLipwb2ludGVyY2FsXC54aW5wdXQiKSIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsLnhpbnB1dCAke0R9JHtzeXNjb25mZGlyfS8KKyAgICBmaQorfQorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcG9pbnRlcmNhbC54aW5wdXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5MDcyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yLzMweGlucHV0X2NhbGlicmF0ZS5zaApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworaWYgWyAiJEhBVkVfVE9VQ0hTQ1JFRU4iID0gIjEiIF07IHRoZW4KKwkvdXNyL2Jpbi94aW5wdXRfY2FsaWJyYXRvcl9vbmNlLnNoCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvQWxsb3cteGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaC10by1iZS1ydW4tYXMtbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5ODI5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gMTQ3MzRhOTNiZDNmYzMyMzMyNTQ1OWUyNGIwNDc5NTQyMmUzOTVlNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMSBKdWwgMjAxMyAxNTozODowMiArMDMwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyB4aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHRvIGJlIHJ1biBhcyBub3JtYWwKKyB1c2VyCisKK0FsbG93IG5vcm1hbCB1c2VyIHRvIGNyZWF0ZSB0aGVpciBvd24gcG9pbnRlcmNhbC54aW5wdXQgZmlsZXMgdGhhdAorb3ZlcnJpZGUgdGhlIHN5c3RlbSBwb2ludGVyY2FsIGZpbGUgaW4gL2V0Yy4KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorLS0tCisgc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHwgICAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIGIvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCitpbmRleCBmY2NiMTk3Li4wYWRhN2RhIDEwMDc1NQorLS0tIGEvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCisrKysgYi9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKK0BAIC0xMSwxOSArMTEsMzIgQEAKKyBQQVRIPSIvdXNyL2JpbjokUEFUSCIKKyAKKyBCSU5BUlk9InhpbnB1dF9jYWxpYnJhdG9yIgorLUNBTEZJTEU9Ii9ldGMvcG9pbnRlcmNhbC54aW5wdXQiCistTE9HRklMRT0iL3Zhci9sb2cveGlucHV0X2NhbGlicmF0b3IucG9pbnRlcmNhbC5sb2ciCisrU1lTX0NBTEZJTEU9Ii9ldGMvcG9pbnRlcmNhbC54aW5wdXQiCisrVVNFUl9DQUxGSUxFPSIkSE9NRS8ucG9pbnRlcmNhbC9wb2ludGVyY2FsLnhpbnB1dCIKKyAKKy1pZiBbIC1lICRDQUxGSUxFIF0gOyB0aGVuCistICBpZiBncmVwIHJlcGxhY2UgJENBTEZJTEUgOyB0aGVuCistICAgIGVjaG8gIkVtcHR5IGNhbGlicmF0aW9uIGZpbGUgZm91bmQsIHJlbW92aW5nIGl0IgorLSAgICBybSAkQ0FMRklMRQorLSAgZWxzZQorLSAgICBlY2hvICJVc2luZyBjYWxpYnJhdGlvbiBkYXRhIHN0b3JlZCBpbiAkQ0FMRklMRSIKKy0gICAgLiAkQ0FMRklMRSAmJiBleGl0IDAKKy0gIGZpCisraWYgWyAiJFVTRVIiID0gInJvb3QiIF07IHRoZW4KKysgIExPR0ZJTEU9Ii92YXIvbG9nL3hpbnB1dF9jYWxpYnJhdG9yLnBvaW50ZXJjYWwubG9nIgorKyAgQ0FMRklMRVM9IiRTWVNfQ0FMRklMRSIKKytlbHNlCisrICBMT0dGSUxFPSIkSE9NRS8ucG9pbnRlcmNhbC94aW5wdXRfY2FsaWJyYXRvci5wb2ludGVyY2FsLmxvZyIKKysgIENBTEZJTEVTPSIkVVNFUl9DQUxGSUxFICRTWVNfQ0FMRklMRSIKKysgIG1rZGlyIC1wICIkSE9NRS8ucG9pbnRlcmNhbCIKKyBmaQorIAorK2ZvciBDQUxGSUxFIGluICRDQUxGSUxFUzsgZG8KKysgIGlmIFsgLWUgJENBTEZJTEUgXTsgdGhlbgorKyAgICBpZiBncmVwIHJlcGxhY2UgJENBTEZJTEUgOyB0aGVuCisrICAgICAgZWNobyAiRW1wdHkgY2FsaWJyYXRpb24gZmlsZSBmb3VuZCwgcmVtb3ZpbmcgaXQiCisrICAgICAgcm0gJENBTEZJTEUgMj4vZGV2L251bGwgfHwgdHJ1ZQorKyAgICBlbHNlCisrICAgICAgZWNobyAiVXNpbmcgY2FsaWJyYXRpb24gZGF0YSBzdG9yZWQgaW4gJENBTEZJTEUiCisrICAgICAgLiAkQ0FMRklMRSAmJiBleGl0IDAKKysgICAgZmkKKysgIGZpCisrZG9uZQorKworK1sgIiRVU0VSIiAhPSAicm9vdCIgXSAmJiBDQUxGSUxFPSRVU0VSX0NBTEZJTEUKKysKKyBDQUxEQVRBPWAkQklOQVJZIC0tb3V0cHV0LXR5cGUgeGlucHV0IC12IHwgdGVlICRMT0dGSUxFIHwgZ3JlcCAnICAgIHhpbnB1dCBzZXQnIHwgc2VkICdzL14gICAgLy9nOyBzLyQvOy9nJ2AKKyBpZiBbICEgLXogIiRDQUxEQVRBIiBdIDsgdGhlbgorICAgZWNobyAkQ0FMREFUQSA+ICRDQUxGSUxFCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGUzZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIKQEAgLTAsMCArMSwzNyBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBwcm9ncmFtIGZvciBYMTEiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3hpbnB1dF9jYWxpYnJhdG9yIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9jYWxpYnJhdG9yLmNwcDtlbmRsaW5lPTIyO21kNT0xYmNiYTA4ZjY3Y2RiNTZmMzQwMjE1NTc4OThlNGI1YSIKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGkiCisKK1BWID0gIjAuNy41K2dpdCR7U1JDUFZ9IgorUFIgPSAicjYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDUkVWID0gImMwMWM1YWY4MDdjYjRiMDE1N2I4ODJhYjA3YTg5M2RmOWE4MTAxMTEiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vdGlhcy94aW5wdXRfY2FsaWJyYXRvci5naXQgXAorICAgICAgICAgICBmaWxlOi8vMzB4aW5wdXRfY2FsaWJyYXRlLnNoIFwKKyAgICAgICAgICAgZmlsZTovL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgZm9yY2UgbmF0aXZlIFgxMSB1aSBhcyB3ZSBkb24ndCBoYXZlIGd0aysgaW4gREVQRU5EUworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtZ3VpPXgxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoICR7RH0ke2JpbmRpcn0veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaAorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8zMHhpbnB1dF9jYWxpYnJhdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQKKyAgICBzZWQgLWUgJ3MsXkV4ZWM9LiosRXhlYz0ke2JpbmRpcn0veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaCwnICR7U30vc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvci5kZXNrdG9wID4gJHtEfSR7c3lzY29uZmRpcn0veGRnL2F1dG9zdGFydC94aW5wdXRfY2FsaWJyYXRvci5kZXNrdG9wCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQiCitSREVQRU5EU18ke1BOfSA9ICJ4aW5wdXQgZm9ybWZhY3RvciIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBvaW50ZXJjYWwteGlucHV0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NTNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRkaXJfMS4wLjcuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNyZWF0ZSBhbiBpbmRleCBvZiBYIGZvbnQgZmlsZXMgaW4gYSBkaXJlY3RvcnkiCisKK0RFU0NSSVBUSU9OID0gIkZvciBlYWNoIGRpcmVjdG9yeSBhcmd1bWVudCwgbWtmb250ZGlyIHJlYWRzIGFsbCBvZiB0aGUgXAorZm9udCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBUaGUgZm9udCBuYW1lcyBhbmQgcmVsYXRlZCBkYXRhIGFyZSB3cml0dGVuIFwKK291dCB0byB0aGUgZmlsZXMgXCJmb250cy5kaXJcIiwgXCJmb250cy5zY2FsZVwiLCBhbmQgXCJmb250cy5hbGlhc1wiLiAgXAorVGhlIFggc2VydmVyIGFuZCBmb250IHNlcnZlciB1c2UgdGhlc2UgZmlsZXMgdG8gZmluZCB0aGUgYXZhaWxhYmxlIGZvbnQgXAorZmlsZXMuIgorCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJta2ZvbnRzY2FsZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSArPSAibWtmb250c2NhbGUtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjRmY2YyYjkwY2FkYmZjMTUwMDliOWUxMjRkYzNhM2YiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxOGM0MjkxNDhjOTZjMjA3OWVkZGE5MjJhMmI2NzYzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NmQ1MmE0ODJkZjEzMDQ4NGU1MWZkMDY2ZDFiNmVkYTdjMmMwMmRkYmM5MWZlNmUyYmUxYjljNGU3MzA2NTMwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRzY2FsZV8xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNyZWF0ZSBhbiBpbmRleCBvZiBzY2FsYWJsZSBmb250IGZpbGVzIGZvciBYIgorCitERVNDUklQVElPTiA9ICJGb3IgZWFjaCBkaXJlY3RvcnkgYXJndW1lbnQsIG1rZm9udHNjYWxlIHJlYWRzIGFsbCBvZiB0aGUgXAorc2NhbGFibGUgZm9udCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBGb3IgZXZlcnkgZm9udCBmaWxlIGZvdW5kLCBhbiBYMTEgXAorZm9udCBuYW1lIChYTEZEKSBpcyBnZW5lcmF0ZWQsIGFuZCBpcyB3cml0dGVuIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGUgXAorbmFtZSB0byBhIGZpbGUgZm9udHMuc2NhbGUgaW4gdGhlIGRpcmVjdG9yeS4gIFRoZSByZXN1bHRpbmcgZm9udHMuc2NhbGUgXAoraXMgdXNlZCBieSB0aGUgbWtmb250ZGlyIHByb2dyYW0uIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSB6bGliIGxpYmZvbnRlbmMgZnJlZXR5cGUgeHByb3RvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmUwZDEyOWQwNTMwNTE3NmQxYTc5MGUwYWMxYWNiN2YiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YmRkNmViZmE2MmIxYmJkNDc0OTA2YWM4NmE0MGZkOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YzZkNTIyOGFmODg1NDc3YjlhZWM2MGNhNmYxNzI1NzhlN2QyZGU0MjIzNDM1N2FmNjJmYjAwNDM5NDUzZjIwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjY4MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9yZ2JfMS4wLjYuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWDExIGNvbG9yIG5hbWUgZGF0YWJhc2UiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgYm90aCB0aGUgbGlzdCBtYXBwaW5nIFggY29sb3IgbmFtZXMgXAordG8gUkdCIHZhbHVlcyAocmdiLnR4dCkgYW5kLCBpZiBjb25maWd1cmVkIHRvIHVzZSBhIGRhdGFiYXNlIGZvciBjb2xvciBcCitsb29rdXAsIHRoZSByZ2IgcHJvZ3JhbSB0byBjb252ZXJ0IHRoZSB0ZXh0IGZpbGUgaW50byB0aGUgYmluYXJ5IGRhdGFiYXNlIFwKK2Zvcm1hdC4iCisKK0RFUEVORFMgKz0gIiB4cHJvdG8gdXRpbC1tYWNyb3MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZjU5OGFkYmUyNDFiZDBiMGI5MTEzODMxZjZlMjQ5YSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYWI1YmJkNzY0MmU1Yzc4NDQyOTMwN2VjMjEwZDE5OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmNhN2M2YWE1OTkzOWI5ZjZhMGZiOWZmZjE1ZGZkNjIxNzY0MjBmZmQ0YWUzMGM4ZDkyYTZhMTI1ZmJlNmIwIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94MTFwZXJmXzEuNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTkzNTU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYMTEgc2VydmVyIHBlcmZvcm1hbmNlIHRlc3QgcHJvZ3JhbSIKKworREVTQ1JJUFRJT04gPSAiVGhlIHgxMXBlcmYgcHJvZ3JhbSBydW5zIG9uZSBvciBtb3JlIHBlcmZvcm1hbmNlIHRlc3RzIFwKK2FuZCByZXBvcnRzIGhvdyBmYXN0IGFuIFggc2VydmVyIGNhbiBleGVjdXRlIHRoZSB0ZXN0cy4iCisKKworREVQRU5EUyArPSAibGlieG11IGxpYnhyZW5kZXIgbGlieGZ0IGxpYnhleHQgZm9udGNvbmZpZyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDI4Y2E0ZDY3YTQxZmNkNGZjMzI4M2RjZTliYmRhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veDExcGVyZi5oO2VuZGxpbmU9MjQ7bWQ1PTI5NTU1MDY2YmFmNDA2YTEwNWZmOTE3YWMyNWIyZDAxIgorCitQRSA9ICIxIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L1gxMS94MTFwZXJmY29tcC8qIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjBiMjRlNGQ4YmViNjIyYTQxOWU4NDMxZTFjMDNjZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTg3MDk4ZGVjMTk0NzU3MmQ3MGM2MjY5N2E3YjcwYmRlMWFiNTY2ODIzN2Q0NjYwMDgwZWFkZTZiYzA5Njc1MSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3M2Y0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworU1VNTUFSWSA9ICJYIGF1dGhvcml0eSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9uIHRvIGVkaXQgYW5kIGRpc3BsYXkgdGhlIGF1dGhvcml6YXRpb24gXAoraW5mb3JtYXRpb24gdXNlZCBpbiBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVlYzc0ZGQ3ZWE0ZDEwYzQ3MTVhN2M0NGYxNTlhNDBiIgorCitERVBFTkRTICs9ICJsaWJ4YXUgbGlieGV4dCBsaWJ4bXUiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2Q2MDAzZjMyODM4ZDViNjg4ZTJjOGExMzEwODMyNzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTZjZTE1MjNlYjQ4YjFmOGE0ZjQyNDRmZTFjM2Q4ZTZhZjFhM2I3ZDRiMGU2MDYzNTgyNDIxYjBiNjhkYzI4ZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm8vZGlzYWJsZS14a2IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MTk5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeGRweWluZm8tMS4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGRweWluZm8tMS4zLjAub3JpZy9jb25maWd1cmUuYWMJMjAxMS0xMC0yMSAyMTozNDoyMS4wMDAwMDAwMDAgLTA3MDAKKysrKyB4ZHB5aW5mby0xLjMuMC9jb25maWd1cmUuYWMJMjAxMS0xMS0yOCAyMDowNjo1Ni41NTQwNTY5MzUgLTA4MDAKK0BAIC00NywxMSArNDcsMTUgQEAKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvbXVsdGlidWYuaCBYMTEvZXh0ZW5zaW9ucy9YU2htLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKyAKKytBQ19BUkdfRU5BQkxFKHhrYiwgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS14a2JdLCBbRGlzYWJsZSBYS0Igc3VwcG9ydF0pLAorKwlYS0I9IiRlbmFibGV2YWwiLCBYS0I9InllcyIpCisraWYgdGVzdCAieCRYS0IiID0gInh5ZXMiIDsgdGhlbgorIFBLR19DSEVDS19NT0RVTEVTKERQWV9YS0IsIHgxMSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkRFBZX1hLQl9DRkxBR1MgJERQWV9YMTFfQ0ZMQUdTIgorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9YS0IuaCBYMTEvWEtCbGliLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKytmaQorIAorIFBLR19DSEVDS19NT0RVTEVTKERQWV9YRjg2VklETU9ERSwgeHhmODZ2bSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm9fMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwNGJiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkRpc3BsYXkgaW5mb3JtYXRpb24gdXRpbGl0eSBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAiWGRweWluZm8gaXMgYSB1dGlsaXR5IGZvciBkaXNwbGF5aW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIFwKK1ggc2VydmVyLiBJdCBpcyB1c2VkIHRvIGV4YW1pbmUgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHNlcnZlciwgdGhlIFwKK3ByZWRlZmluZWQgdmFsdWVzIGZvciB2YXJpb3VzIHBhcmFtZXRlcnMgdXNlZCBpbiBjb21tdW5pY2F0aW5nIGJldHdlZW4gXAorY2xpZW50cyBhbmQgdGhlIHNlcnZlciwgYW5kIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2NyZWVucyBhbmQgdmlzdWFscyBcCit0aGF0IGFyZSBhdmFpbGFibGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mM2QwOWU2YjllMjAzYTFhZjQ4OWUxNmM3MDhmNGZiMyIKK0RFUEVORFMgKz0gImxpYnh0c3QgbGlieGV4dCBsaWJ4eGY4NnZtIGxpYnh4Zjg2ZGdhIGxpYnh4Zjg2bWlzYyBsaWJ4aSBsaWJ4cmVuZGVyIGxpYnhpbmVyYW1hIGxpYmRteCBsaWJ4YXUgbGlieGNvbXBvc2l0ZSIKK1BFID0gIjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXhrYi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg4MDkwMzdiZDQ4NTk5YWY1NWRhZDgxYzUwOGI2YjM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMwMjM4ZWQ5MTU2MTllMDZjZWI0MTcyMWU1Zjc0N2Q2NzMyMDU1NWNjMzhkNDU5ZTk1NDgzOWMxODljY2FmNTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUteGtiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzA5NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXYvZGlldC14MTEucGF0Y2gKQEAgLTAsMCArMSw4MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKKy0tLQorIHhldi5jIHwgICAxNiArKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworSW5kZXg6IHhldi0xLjIuMC94ZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhldi0xLjIuMC5vcmlnL3hldi5jCisrKysgeGV2LTEuMi4wL3hldi5jCitAQCAtMTE2LDcgKzExNiw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgbmJ5dGVzID0gWExvb2t1cFN0cmluZyAoZSwgc3RyLCAyNTYsICZrcywgTlVMTCk7CisgCisgICAgIC8qIG5vdCBzdXBwb3NlZCB0byBjYWxsIFhtYkxvb2t1cFN0cmluZyBvbiBhIGtleSByZWxlYXNlIGV2ZW50ICovCistICAgIGlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworKyAgICAvKmlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworICAgICAgICAgZG8geworICAgICAgICAgICAgIG5tYmJ5dGVzID0gWG1iTG9va3VwU3RyaW5nICh4aWMsIGUsIGJ1ZiwgYnNpemUgLSAxLCAma3MsICZzdGF0dXMpOworICAgICAgICAgICAgIGJ1ZltubWJieXRlc10gPSAnXDAnOworQEAgLTEyNiw3ICsxMjYsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgICAgICAgICAgICAgIGJ1ZiA9IHJlYWxsb2MgKGJ1ZiwgYnNpemUpOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0gd2hpbGUgKHN0YXR1cyA9PSBYQnVmZmVyT3ZlcmZsb3cpOworLSAgICB9CisrICAgIH0qLworIAorICAgICBpZiAoa3MgPT0gTm9TeW1ib2wpCisgCWtzbmFtZSA9ICJOb1N5bWJvbCI7CitAQCAtMTU2LDcgKzE1Niw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgfQorIAorICAgICAvKiBub3Qgc3VwcG9zZWQgdG8gY2FsbCBYbWJMb29rdXBTdHJpbmcgb24gYSBrZXkgcmVsZWFzZSBldmVudCAqLworLSAgICBpZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKysgICAgLyppZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKyAgICAgICAgIHByaW50ZiAoIiAgICBYbWJMb29rdXBTdHJpbmcgZ2l2ZXMgJWQgYnl0ZXM6ICIsIG5tYmJ5dGVzKTsKKyAgICAgICAgIGlmIChubWJieXRlcyA+IDApIHsKKyAgICAgICAgICAgIGR1bXAgKGJ1Ziwgbm1iYnl0ZXMpOworQEAgLTE2NCw3ICsxNjQsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgICAgICB9IGVsc2UgeworICAgICAJICAgcHJpbnRmICgiXG4iKTsKKyAgICAgICAgIH0KKy0gICAgfQorKyAgICB9ICovCisgCisgICAgIHByaW50ZiAoIiAgICBYRmlsdGVyRXZlbnQgcmV0dXJuczogJXNcbiIsCisgCSAgICBYRmlsdGVyRXZlbnQgKGV2ZW50cCwgZS0+d2luZG93KSA/ICJUcnVlIiA6ICJGYWxzZSIpOworQEAgLTEwMTUsNyArMTAxNSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAgWFNldExvY2FsZU1vZGlmaWVycyBmYWlsZWRcbiIsIFByb2dyYW1OYW1lKTsKKyAgICAgfQorIAorLSAgICB4aW0gPSBYT3BlbklNIChkcHksIE5VTEwsIE5VTEwsIE5VTEwpOworKyAgICAvKnhpbSA9IFhPcGVuSU0gKGRweSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgIGlmICh4aW0gPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICBYT3BlbklNIGZhaWxlZFxuIiwgUHJvZ3JhbU5hbWUpOworICAgICB9CitAQCAtMTA0Miw3ICsxMDQyLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBYRnJlZSAoeGltX3N0eWxlcyk7CisgICAgICAgICB9CistICAgIH0KKysJfSovCisgCisgICAgIHNjcmVlbiA9IERlZmF1bHRTY3JlZW4gKGRweSk7CisgCitAQCAtMTEwOSw3ICsxMTA5LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlwcmludGYgKCJPdXRlciB3aW5kb3cgaXMgMHglbHgsIGlubmVyIHdpbmRvdyBpcyAweCVseFxuIiwgdywgc3Vidyk7CisgICAgIH0KKyAKKy0gICAgaWYgKHhpbSAmJiB4aW1fc3R5bGUpIHsKKysgICAgLyppZiAoeGltICYmIHhpbV9zdHlsZSkgeworICAgICAgICAgeGljID0gWENyZWF0ZUlDICh4aW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhOSW5wdXRTdHlsZSwgeGltX3N0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBYTkNsaWVudFdpbmRvdywgdywKK0BAIC0xMTE5LDcgKzExMTksNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICBpZiAoeGljID09IE5VTEwpIHsKKyAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJYQ3JlYXRlSUMgZmFpbGVkXG4iKTsKKyAgICAgICAgIH0KKy0gICAgfQorKyAgICB9Ki8KKyAKKyAgICAgaGF2ZV9yciA9IFhSUlF1ZXJ5RXh0ZW5zaW9uIChkcHksICZycl9ldmVudF9iYXNlLCAmcnJfZXJyb3JfYmFzZSk7CisgICAgIGlmIChoYXZlX3JyKSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE1MWI1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldl8xLjIuMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYIEV2ZW50IFZpZXdlciIKK0RFU0NSSVBUSU9OID0gIlhldiBjcmVhdGVzIGEgd2luZG93IGFuZCB0aGVuIGFza3MgdGhlIFggc2VydmVyIHRvIHNlbmQgaXQgZXZlbnRzIFwKK3doZW5ldmVyIGFueXRoaW5nIGhhcHBlbnMgdG8gdGhlIHdpbmRvdyAoc3VjaCBhcyBpdCBiZWluZyBtb3ZlZCwgcmVzaXplZCwgXAordHlwZWQgaW4sIGNsaWNrZWQgaW4sIGV0Yy4pLiBZb3UgY2FuIGFsc28gYXR0YWNoIGl0IHRvIGFuIGV4aXN0aW5nIHdpbmRvdy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hldi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzM7bWQ1PTU3N2M5OTQyMWYxODAzYjg5MWQyYzc5MDk3YWU0NjgyIgorTElDRU5TRSA9ICJNSVQiCisKK1BFID0gIjEiCisKK0RFUEVORFMgKz0gImxpYnhyYW5kciB4cHJvdG8iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaWV0LXgxMS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI0OWJkZGU5MGYwMWMwZDg2MWFmNTJkYzhmZWMzNzllIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ5NGFlNjJhNmMxYWY1NmMyOTYxZDcxZjU3ODIwNzZhYzQxMTZmMGZhNGU0MDE0MjBhYzdlMGRiMzNkYzMxNGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hleWVzXzEuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDBjYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYMTEgZXllcyB0aGF0IGZvbGxvdyB0aGUgbW91c2UgY3Vyc29yIGRlbW8iCitERVNDUklQVElPTiA9ICJYZXllcyBpcyBhIHNtYWxsIFgxMSBhcHBsaWNhdGlvbiB0aGF0IHNob3dzIGEgcGFpciBvZiBleWVzIHRoYXQgbW92ZSB0byBcCitmb2xsb3cgdGhlIGxvY2F0aW9uIG9mIHRoZSBtb3VzZSBjdXJzb3IgYXJvdW5kIHRoZSBzY3JlZW4uIgorCitQRSA9ICIxIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZWE1MWIzNjUwNTFhYzMyZDE4MTNhN2RiYWE0YmZjNiIKKworU1JDX1VSSVttZDVzdW1dID0gImEzMDM1ZGNlY2RiZGI4OWU4NjQxNzdjMDgwOTI0OTgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3NWU5ODY4MGNkNTllMWY5NDM5MDE2Mzg2NjA5NTQ2ZWQwOGMyODRkMGYwNWE5NTI3NmY5NmFjYTZlOGE1MjEiCisKK0RFUEVORFMgKz0gImxpYnhhdSBsaWJ4dCBsaWJ4ZXh0IGxpYnhtdSBsaWJ4cmVuZGVyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU3MzdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiU2VydmVyIGFjY2VzcyBjb250cm9sIHByb2dyYW0gZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4aG9zdCBwcm9ncmFtIGlzIHVzZWQgdG8gYWRkIGFuZCBkZWxldGUgaG9zdCBuYW1lcyBvciBcCit1c2VyIG5hbWVzIHRvIHRoZSBsaXN0IGFsbG93ZWQgdG8gbWFrZSBjb25uZWN0aW9ucyB0byB0aGUgWCBzZXJ2ZXIuIEluIFwKK3RoZSBjYXNlIG9mIGhvc3RzLCB0aGlzIHByb3ZpZGVzIGEgcnVkaW1lbnRhcnkgZm9ybSBvZiBwcml2YWN5IGNvbnRyb2wgXAorYW5kIHNlY3VyaXR5LiBFbnZpcm9ubWVudHMgd2hpY2ggcmVxdWlyZSBtb3JlIHNvcGhpc3RpY2F0ZWQgbWVhc3VyZXMgXAorc2hvdWxkIGltcGxlbWVudCB0aGUgdXNlci1iYXNlZCBtZWNoYW5pc20gb3IgdXNlIHRoZSBob29rcyBpbiB0aGUgXAorcHJvdG9jb2wgZm9yIHBhc3Npbmcgb3RoZXIgYXV0aGVudGljYXRpb24gZGF0YSB0byB0aGUgc2VydmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGZiZWQ3MWRkZGY0ODU0MTgxOGNlZjgwNzkxMjQxOTkiCitERVBFTkRTICs9ICJsaWJ4bXUgbGlieGF1IgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImY1ZDQ5MDczOGIxNDhjYjdmMmZlNzYwZjQwZjkyNTE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzZTYxOWVlMTU0NzFmNTc2Y2ZiMzBjNjYzZTE4ZjViYzcwYWNhNTc3YTYzZDJjMmMwM2YwMDZhNzgzN2MyOWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbml0XzEuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYIFdpbmRvdyBTeXN0ZW0gaW5pdGlhbGl6ZXIiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4aW5pdCBwcm9ncmFtIGlzIHVzZWQgdG8gc3RhcnQgdGhlIFggV2luZG93IFN5c3RlbSBcCitzZXJ2ZXIgYW5kIGEgZmlyc3QgY2xpZW50IHByb2dyYW0gb24gc3lzdGVtcyB0aGF0IGNhbm5vdCBzdGFydCBYIFwKK2RpcmVjdGx5IGZyb20gL2V0Yy9pbml0IG9yIGluIGVudmlyb25tZW50cyB0aGF0IHVzZSBtdWx0aXBsZSB3aW5kb3cgXAorc3lzdGVtcy4gV2hlbiB0aGlzIGZpcnN0IGNsaWVudCBleGl0cywgeGluaXQgd2lsbCBraWxsIHRoZSBYIHNlcnZlciBhbmQgXAordGhlbiB0ZXJtaW5hdGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xOGYwMWU3YjM5ODA3YmViZTJiOGRmMTAxYTAzOWI2OCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlOTI4NDUyZGZhZjczODUxNDEzYTJkOGI4Yzc2Mzg4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1ZDg4ZDczOTdhMDdlMDFkYjI1MzE2M2I3YzdhMDBiMjQ5YjNkMzBlOTk0ODlmMjczNGNhYzlhMGM3OTAyYjMiCisKK0VYVFJBX09FQ09ORiA9ICJhY19jdl9wYXRoX01DT09LSUU9JHtiaW5kaXJ9L21jb29raWUiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ1dGlsLWxpbnV4LW1jb29raWUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlZmNjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbnB1dF8xLjYuMS5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJSdW50aW1lIGNvbmZpZ3VyYXRpb24gYW5kIHRlc3Qgb2YgWElucHV0IGRldmljZXMiCisKK0RFU0NSSVBUSU9OID0gIlhpbnB1dCBpcyBhbiB1dGlsaXR5IGZvciBjb25maWd1cmluZyBhbmQgdGVzdGluZyBYSW5wdXQgZGV2aWNlcyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODgxNTI1Zjg5Zjk5Y2FkMzljOTgzMmJjYjcyZTZmYTUiCisKK0RFUEVORFMgKz0gIiBsaWJ4aSBsaWJ4cmFuZHIgbGlieGluZXJhbWEiCisKKworU1JDX1VSSVttZDVzdW1dID0gIjMwNTk4MGFjNzhhNjk1NGUzMDZhMTRkODBhNTRjNDQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3NjMyZDBmMjI4YThhNmJlOTNiMDk4NTdlYTQxMzk0MGZjZjQ0MDkxZTYwZjRhMGZlOWY1ZmQ4MmVmZDg3MWYiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS4zLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWMwNjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkEgcHJvZ3JhbSB0byBjb21waWxlIFhLQiBrZXlib2FyZCBkZXNjcmlwdGlvbiIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhrYmNvbXAga2V5bWFwIGNvbXBpbGVyIGNvbnZlcnRzIGEgZGVzY3JpcHRpb24gb2YgYW4gXAorWEtCIGtleW1hcCBpbnRvIG9uZSBvZiBzZXZlcmFsIG91dHB1dCBmb3JtYXRzLiBUaGUgbW9zdCBjb21tb24gdXNlIGZvciBcCit4a2Jjb21wIGlzIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIGtleW1hcCBmaWxlICgueGttIGV4dGVuc2lvbikgd2hpY2ggY2FuIFwKK2JlIHJlYWQgZGlyZWN0bHkgYnkgWEtCLWNhcGFibGUgWCBzZXJ2ZXJzIG9yIHV0aWxpdGllcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA4NDM2ZTRmNDQ3Njk2NGUyZTJkZDdlN2U0MWUwNzZhIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworREVQRU5EUyArPSAibGlieGtiZmlsZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDEyYThlMzA5MmNkZGY3Zjg3YjI1MGY5NmJiMzhjNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZmFjOTczNzc4ZmFiZjUyMTYxMjFhZDYwYjdhZjhhYjc0Y2U3NTEzYWYwZjkyNjBjZjhjNTMwOWUxNjIyYjJhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG1vZG1hcF8xLjAuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlYWM2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3IgbW9kaWZ5aW5nIGtleW1hcHMgYW5kIHBvaW50ZXIgYnV0dG9uIG1hcHBpbmdzIGluIFgiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4bW9kbWFwIHByb2dyYW0gaXMgdXNlZCB0byBlZGl0IGFuZCBkaXNwbGF5IHRoZSBcCitrZXlib2FyZCBtb2RpZmllciBtYXAgYW5kIGtleW1hcCB0YWJsZSB0aGF0IGFyZSB1c2VkIGJ5IGNsaWVudCBcCithcHBsaWNhdGlvbnMgdG8gY29udmVydCBldmVudCBrZXljb2RlcyBpbnRvIGtleXN5bXMuIEl0IGlzIHVzdWFsbHkgcnVuIFwKK2Zyb20gdGhlIHVzZXIncyBzZXNzaW9uIHN0YXJ0dXAgc2NyaXB0IHRvIGNvbmZpZ3VyZSB0aGUga2V5Ym9hcmQgXAorYWNjb3JkaW5nIHRvIHBlcnNvbmFsIHRhc3Rlcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjcyYzE3ZTk2MzcwZTFlNzQ3NzNmYTIyZDk5ODk2MjEiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MjNmMDJkM2E1Zjk4NDUwNTU0NTU2MjA1ZjBhOTQ5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiN2IwZTVjYzVmMTBkMGZiNmQyZDZlYTRmMDBjNzdlOGFjMGU4NDdjYzVhNzNiZTk0Y2Q4NjEzOWFjNGFjNDc4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG9yZy1hcHAtY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyOWNiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJYIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9hcHBzIgorTElDRU5TRSA9ICJNSVQtWCIKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MtbmF0aXZlIHZpcnR1YWwvbGlieDExIgorCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0lOQ19QUiA9ICJyOCIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2FwcC8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS9YMTEvJHtCUE59ICR7ZGF0YWRpcn0vWDExL2FwcC1kZWZhdWx0cy8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cHJvcF8xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hwcm9wXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OGJmMDQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hwcm9wXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgdG8gZGlzcGxheSB3aW5kb3cgYW5kIGZvbnQgcHJvcGVydGllcyBvZiBhbiBYIHNlcnZlciIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhwcm9wIHV0aWxpdHkgaXMgZm9yIGRpc3BsYXlpbmcgd2luZG93IGFuZCBmb250IFwKK3Byb3BlcnRpZXMgaW4gYW4gWCBzZXJ2ZXIuIE9uZSB3aW5kb3cgb3IgZm9udCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgXAorY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvciBwb3NzaWJseSBpbiB0aGUgY2FzZSBvZiBhIHdpbmRvdywgYnkgY2xpY2tpbmcgXAorb24gdGhlIGRlc2lyZWQgd2luZG93LiBBIGxpc3Qgb2YgcHJvcGVydGllcyBpcyB0aGVuIGdpdmVuLCBwb3NzaWJseSB3aXRoIFwKK2Zvcm1hdHRpbmcgaW5mb3JtYXRpb24uIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMjI2YWI4ZGI4OGFjMGJjMDM5MTY3M2JlNDBjOWY5MSIKKworREVQRU5EUyArPSAibGlieG11IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmFlM2QyZmRhMDc2ODQwMjdhNjQzY2E3ODNkNTk1Y2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWJlZTg4YjEwMjU4NjVhZDEyMWY3MmQzMjU3NmRkMzAyN2FmMTQ0Njc3NGFhODMwMGNjZTNjMjYxZDg2OWJjNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWJkNDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNC4zLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSYW5kUjogWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24gY29tbWFuZCIKKworREVTQ1JJUFRJT04gPSAiWHJhbmRyIGlzIHVzZWQgdG8gc2V0IHRoZSBzaXplLCBvcmllbnRhdGlvbiBhbmQvb3IgXAorcmVmbGVjdGlvbiBvZiB0aGUgb3V0cHV0cyBmb3IgYSBzY3JlZW4uIEl0IGNhbiBhbHNvIHNldCB0aGUgc2NyZWVuIFwKK3NpemUuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlMTYwOGJkYjMzY2Y4YzYyYTQ0MzhmN2QzNDY3OWIzIgorREVQRU5EUyArPSAibGlieHJhbmRyIGxpYnhyZW5kZXIiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDQxZmRiOThkMmFiYzYwNTExMDhiNzA3NWQ5NDhmYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzE1NGFjMzQ4NmI4NjkyMzY5MmYyZDZjZGIyOTkxYTJlZTcyYmMzMmFmMmM0Mzc5YTZmMWMwNjhmMjA0YmUxYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXQvZGlzYWJsZS14a2IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0L2Rpc2FibGUteGtiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZDEzYTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0L2Rpc2FibGUteGtiLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2FkZCAiLWRpc2FibGUteGtiIiBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JlYmFzZSBmb3IgMS4yLjEgYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDgxYzNhZTQuLjI2NjAxYmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUyLDExICs1MiwxNSBAQCBQS0dfQ0hFQ0tfTU9EVUxFUyhTRVRfWEVYVCwgeGV4dCwKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvZHBtcy5oIFgxMS9leHRlbnNpb25zL01JVE1pc2MuaF0sLCxbI2luY2x1ZGUgPFgxMS9YbGliLmg+XSkKKyAJQ1BQRkxBR1M9IiRTQVZFX0NQUEZMQUdTIl0sW2VjaG8gIm5vdCBmb3VuZCJdKQorIAorK0FDX0FSR19FTkFCTEUoeGtiLCBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXhrYl0sIFtEaXNhYmxlIFhLQiBzdXBwb3J0XSksCisrCQlYS0I9IiRlbmFibGV2YWwiLCBYS0I9InllcyIpCisraWYgdGVzdCAieCRYS0IiID0gInh5ZXMiIDsgdGhlbgorIFBLR19DSEVDS19NT0RVTEVTKFNFVF9YS0IsIHgxMSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkU0VUX1hLQl9DRkxBR1MgJFNFVF9YMTFfQ0ZMQUdTIgorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvWEtCbGliLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKytmaQorIAorIEFDX0FSR19XSVRIKHhmODZtaXNjLCBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXhmODZtaXNjXSxbRGlzYWJsZSB4Zjg2bWlzYyBzdXBwb3J0Ll0pLAorICAgICAgICAgICAgICAgICBbVVNFX1hGODZNSVNDPSIkd2l0aHZhbCJdLCBbVVNFX1hGODZNSVNDPSJ5ZXMiXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXRfMS4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0XzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ODNiNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0XzEuMi4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIHNldHRpbmcgdmFyaW91cyB1c2VyIHByZWZlcmVuY2Ugb3B0aW9ucyBvZiB0aGUgZGlzcGxheSIKKworREVTQ1JJUFRJT04gPSAieHNldCBpcyBhIHV0aWxpdHkgdGhhdCBpcyB1c2VkIHRvIHNldCB2YXJpb3VzIHVzZXIgXAorcHJlZmVyZW5jZSBvcHRpb25zIG9mIHRoZSBkaXNwbGF5LiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iZWE4MWNjOTgyN2NkZjFhZjBlMTJjMmI4MjI4Y2Y4ZCIKK0RFUEVORFMgKz0gImxpYnhleHQgbGlieHhmODZtaXNjIGxpYnhtdSBsaWJ4YXUiCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14a2IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkY2QyMjczODhiNTc0ODdkNTQzY2FiMmZkN2E2MDJkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MzgyZjRmYjI5Yjg4NjQ3ZTEzZjNiNGJjMjkyNjMxMzQyNzA3NDdmYzE1OWNmYzVmN2UzYWYyMzU4OGM4MDYzIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhrYiAtLXdpdGhvdXQtZm9udGNhY2hlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHZpbmZvXzEuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHZpbmZvXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjVlZjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dmluZm9fMS4xLjMuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiUHJpbnQgb3V0IFgtVmlkZW8gZXh0ZW5zaW9uIGFkYXB0b3IgaW5mb3JtYXRpb24iCisKK0RFU0NSSVBUSU9OID0gInh2aW5mbyBwcmludHMgb3V0IHRoZSBjYXBhYmlsaXRpZXMgb2YgYW55IHZpZGVvIGFkYXB0b3JzIFwKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgZGlzcGxheSB0aGF0IGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFgtVmlkZW8gXAorZXh0ZW5zaW9uLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjY2NDEwMWFkN2ExZGM3NThhNGM0MTA5YmY5NzhlNjgiCitERVBFTkRTICs9ICIgbGlieHYiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTU4MzYwMTc2YjcxOGRlZTNjMzliYzA2NDhjMGQxMGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWZiYThiNjhkYWY1Mzg2M2U2NmQ1MDA0ZmE5YzcwM2ZjZWNmNjlkYjRkMTUxZWEyZDNkODg1ZDYyMWU2ZTVlYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHdpbmluZm9fMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NTI0MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIldpbmRvdyBpbmZvcm1hdGlvbiB1dGlsaXR5IGZvciBYIgorCitERVNDUklQVElPTiA9ICJYd2luaW5mbyBpcyBhIHV0aWxpdHkgZm9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgXAord2luZG93cy4gIEluZm9ybWF0aW9uIG1heSBpbmNsdWRlIHdpbmRvdyBwb3NpdGlvbiwgc2l6ZSwgY29sb3IgZGVwdGgsIFwKK2FuZCBhIG51bWJlciBvZiBvdGhlciBpdGVtcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc4OTc2Y2QzMTE1ZjZmYWY2MTVhY2NjNGUwOTRkOTBlIgorREVQRU5EUyArPSAibGlieGV4dCBsaWJ4bXUiCisKK1BFID0gIjAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNzc3YmFmYjY3NDU1NWU0OGZkODQzNzYxODI3MDkzMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMThlYjBlYTk1YmQ4ZGU3OTAzZGZhYTI2NDIzODIwYzUyM2FkMTU5OGJlMDc1MWQyZDhiNmEyYzIzYjIzZmY4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjkuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi45LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0MjhkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi45LjIuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBldmVudCBkZXZpY2VzIChldmRldikgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJldmRldiBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgTGludXgncyBnZW5lcmljIGV2ZW50IFwKK2RldmljZXMuIEl0IHRoZXJlZm9yZSBzdXBwb3J0cyBhbGwgaW5wdXQgZGV2aWNlcyB0aGF0IHRoZSBrZXJuZWwga25vd3MgXAorYWJvdXQsIGluY2x1ZGluZyBtb3N0IG1pY2UgYW5kIGtleWJvYXJkcy4gXAorXAorVGhlIGV2ZGV2IGRyaXZlciBjYW4gc2VydmUgYXMgYm90aCBhIHBvaW50ZXIgYW5kIGEga2V5Ym9hcmQgaW5wdXQgXAorZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgYm90aCB0aGUgY29yZSBrZXlib2FyZCBhbmQgdGhlIGNvcmUgcG9pbnRlci4gXAorTXVsdGlwbGUgaW5wdXQgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIFwKK2RyaXZlciwgd2l0aCBvbmUgTG9hZCBkaXJlY3RpdmUgZm9yIGV2ZGV2IGluIHRoZSBNb2R1bGUgc2VjdGlvbiBvZiB5b3VyIFwKK3hvcmcuY29uZiBmb3IgZWFjaCBpbnB1dCBkZXZpY2UgdGhhdCB3aWxsIHVzZSB0aGlzIGRyaXZlci4gIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZWZlMzNiMWNmMGNhY2JhMGU3MmUzYjBmYTBmMGUxNiIKKworREVQRU5EUyArPSAibXRkZXYgbGliZXZkZXYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OWVlYmYxNzFlNmM3YmZmYzQyZDRmYzQzMGQ0NzQ1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OTIzMjliNTMxYWZjNjkyOGNjZGE5NGU0YjUxYTU1MjBkNGRkZjhlZjlhMDA4OTBhNWQwZDMxODk4YWNlZmVjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF8xLjguMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfMS44LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlNTFhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfMS44LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBrZXlib2FyZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImtleWJvYXJkIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBrZXlib2FyZHMuIFRoZSBcCitkcml2ZXIgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIE9TLXByb3ZpZGVkIGtleWJvYXJkIGludGVyZmFjZS4gIFRoZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEga2V5Ym9hcmQgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBrZXlib2FyZC4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhMjA5OWQyNGFjOWUzMTZhNmQ0YjlmMjBiM2Q0ZTEwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTZjY2M0M2QzODliOTcwYWZiZDM4OTM4NzVkZmQ2NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWFjOGZmMzliZjlkYTdkMmZjN2ZkNmMyNDUxNTcyNmU4MTM4MzQwYzA1MThhYjhjNjA2ZTAwOGNmOTNjYTIxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiMDhmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0ga2V5Ym9hcmQgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJrZXlib2FyZCBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3Iga2V5Ym9hcmRzLiBUaGUgXAorZHJpdmVyIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBPUy1wcm92aWRlZCBrZXlib2FyZCBpbnRlcmZhY2UuICBUaGUgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIGtleWJvYXJkIGlucHV0IGRldmljZSwgYW5kIG1heSBiZSB1c2VkIGFzIHRoZSBYIHNlcnZlcidzIFwKK2NvcmUga2V5Ym9hcmQuIgorCitTUkNSRVYgPSAiM2UyOGQ2OGI1MGQyOTE5Mzg3MzRlOTY4NGI4Mjk2Y2E4NjRmMzg5MiIKK1BWID0gIjEuMy4yK2dpdCR7U1JDUFZ9IgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmQiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlL3VuYnJlYWsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlL3VuYnJlYWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzMDg2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2UvdW5icmVhay5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVbmJyZWFrIHRoZSBsaW51eCBtb3VzZSBkcml2ZXIgYnkgdXNpbmcgY29uZmlnLmgKKworUlAgLSA0LzExLzA3CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3NyYy9sbnhfbW91c2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9sbnhfbW91c2UuYwkyMDA4LTExLTA0IDIzOjQ2OjA1LjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9zcmMvbG54X21vdXNlLmMJMjAwOC0xMS0wNCAyMzo0NjoxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zLDggKzMsOCBAQAorICAqIENvcHlyaWdodCAxOTk5IGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KKyAgKi8KKyAKKy0jaWZkZWYgSEFWRV9YT1JHX0NPTkZJR19ICistI2luY2x1ZGUgPHhvcmctY29uZmlnLmg+CisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCisgI2luY2x1ZGUgPFgxMS9YLmg+CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlXzEuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV8xLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjBiNzhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV8xLjkuMS5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIG1vdXNlIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAibW91c2UgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIG1pY2UuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgbW9zdCBhdmFpbGFibGUgbW91c2UgdHlwZXMgYW5kIGludGVyZmFjZXMuICBUaGUgbW91c2UgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIHBvaW50ZXIgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBwb2ludGVyLiBNdWx0aXBsZSBtaWNlIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBlYTlmOTBkNzJiNmQ5MzI3ZGVkZTVmZmRiMmE1MTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NzA4NWI2NDljNWMwYjMzMzU2NWJhNTYyZjU3Mzk1MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzNDg1ZDM3NTc3OWMwODQwNmYwNzg5ZmVlZGRlMTU5MzNkYzcwMzE1OGEwODZkZGFjNjM4NTk4ZjQ3OWZjNWNlIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWEyZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIG1vdXNlIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAibW91c2UgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIG1pY2UuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgbW9zdCBhdmFpbGFibGUgbW91c2UgdHlwZXMgYW5kIGludGVyZmFjZXMuICBUaGUgbW91c2UgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIHBvaW50ZXIgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBwb2ludGVyLiBNdWx0aXBsZSBtaWNlIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLiIKKworU1JDUkVWID0gImVhNWNmZTgwNGUxMTJmMzIwZjE0YWQ4OTZjNzgwMmQ1MzU1MWQzZTYiCitQViA9ICIxLjMuMCtnaXQke1NSQ1BWfSIKK1BSID0gIiR7SU5DX1BSfS4wIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2RyaXZlci94Zjg2LWlucHV0LW1vdXNlIFwKKyAgICAgICAgICAgZmlsZTovL3VuYnJlYWsucGF0Y2giCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzXzEuOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzEyMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIHN5bmFwdGljcyB0b3VjaHBhZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInN5bmFwdGljcyBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgdGhlIHRvdWNocGFkcyBmcm9tIFwKK1N5bmFwdGljcyBJbmNvcnBvcmF0ZWQuIEV2ZW4gdGhvdWdoIHRoZXNlIHRvdWNocGFkcyAoYnkgZGVmYXVsdCwgXAorb3BlcmF0aW5nIGluIGEgY29tcGF0aWJpbGl0eSBtb2RlIGVtdWxhdGluZyBhIHN0YW5kYXJkIG1vdXNlKSBjYW4gYmUgXAoraGFuZGxlZCBieSB0aGUgbm9ybWFsIGV2ZGV2IG9yIG1vdXNlIGRyaXZlcnMsIHRoaXMgZHJpdmVyIGFsbG93cyBtb3JlIFwKK2FkdmFuY2VkIGZlYXR1cmVzIG9mIHRoZSB0b3VjaHBhZCB0byBiZWNvbWUgYXZhaWxhYmxlLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVhYWNkMzUzNWE3NDE4MjQ5NTVjNWViOGYwNjEzOTgiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZWQ2OGU4Y2M2NzRkZDYxYWRiMjgwNzA0NzY0YWFmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YjBlMTY0ZWJkMDJhNjgwZTBjNjk1OTU1ZTc4MzA1OWYzN2VkYjBjMjY1NjM5OGUwYTk3MmFkYzhlNjk4YzgwIgorCitERVBFTkRTICs9ICJsaWJ4aSBtdGRldiBsaWJ4dHN0IGxpYmV2ZGV2IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZjYzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIHN5bmFwdGljcyB0b3VjaHBhZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInN5bmFwdGljcyBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgdGhlIHRvdWNocGFkcyBmcm9tIFwKK1N5bmFwdGljcyBJbmNvcnBvcmF0ZWQuIEV2ZW4gdGhvdWdoIHRoZXNlIHRvdWNocGFkcyAoYnkgZGVmYXVsdCwgXAorb3BlcmF0aW5nIGluIGEgY29tcGF0aWJpbGl0eSBtb2RlIGVtdWxhdGluZyBhIHN0YW5kYXJkIG1vdXNlKSBjYW4gYmUgXAoraGFuZGxlZCBieSB0aGUgbm9ybWFsIGV2ZGV2IG9yIG1vdXNlIGRyaXZlcnMsIHRoaXMgZHJpdmVyIGFsbG93cyBtb3JlIFwKK2FkdmFuY2VkIGZlYXR1cmVzIG9mIHRoZSB0b3VjaHBhZCB0byBiZWNvbWUgYXZhaWxhYmxlLiIKKworU1JDUkVWID0gIjkzNGJjMDAxMmY5NDhjNTJhYWRjOGVkYTkxMmY3NzI4ZmI3Mzk0YTIiCitQViA9ICIwLjE1LjIrZ2l0JHtTUkNQVn0iCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3MiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTICs9ICJsaWJ4aSBtdGRldiBsaWJ4dHN0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNWI0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBWTVdhcmUgbW91c2UgaW5wdXQgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiVGhlIHZtbW91c2UgZHJpdmVyIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHNwZWNpYWwgVk1Nb3VzZSBcCitwcm90b2NvbCB0aGF0IGlzIHByb3ZpZGVkIGJ5IFZNd2FyZSB2aXJ0dWFsIG1hY2hpbmVzIHRvIGdpdmUgYWJzb2x1dGUgXAorcG9pbnRlciBwb3NpdGlvbmluZy4gVGhlIHZtbW91c2UgZHJpdmVyIGlzIGNhcGFibGUgb2YgZmFsbGluZyBiYWNrIHRvIHRoZSBcCitzdGFuZGFyZCAnbW91c2UnIGRyaXZlciBpZiBhIFZNd2FyZSB2aXJ0dWFsIG1hY2hpbmUgaXMgbm90IGRldGVjdGVkLiIKKworU1JDX1VSSVttZDVzdW1dID0gIjg1ZTJlNDY0YjcyMTljNDk1YWQzYTE2NDY1YzIyNmVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBhZjU1ODk1N2FjMWJlMWIyODYzNzEyYzI0NzVkZThmNGQ3ZjE0OTIxZmQwMWRlZDJlMmZkZTQ5MjFiMTkzMTkiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4Zjg2LWlucHV0LW1vdXNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02MjI4NDFjMDY4YTlkNzYyNWZiZmU3YWNmZmIxYThmYyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCBoYWwKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vaGFsLworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2hhbC8KK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aC11ZGV2LXJ1bGVzLWRpcj0ke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZCIKKworRklMRVNfJHtQTn0gKz0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLyAke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1jaXJydXNfMS41LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5ODQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gY2lycnVzIGRpc3BsYXkgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiY2lycnVzIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBDaXJydXMgTG9naWMgVkdBIGFkYXB0ZXJzLiBUaGVzZSBcCitkZXZpY2VzIGFyZSBub3Qgc28gY29tbW9uIGluIHRoZSB3aWxkIGFueW1vcmUsIGJ1dCBRRU1VIGNhbiBlbXVsYXRlIG9uZSwgc28gXAordGhlIGRyaXZlciBpcyBzdGlsbCB1c2VmdWwuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZGRjN2NhODYwZGM1ZmQwMTRlN2YxNjBlYTY5OTI5NSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkN2RmZDRjZGM0MmFhOGI2ZTkyMzUxMGZhMDBhZDJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVkYzg3YjIwYTU1MjU5MTI2YjUyMzliNWMxZWY5MTM0MTllYWI3ZGVkMGVkMTJhZTlhZTk4OTQ2MGQ3MzUxYWIiCisKK0RFUEVORFMgKz0gImxpYnBjaWFjY2VzcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tZmJkZXZfMC40LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWZiZGV2XzAuNC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTliZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWZiZGV2XzAuNC40LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBmYmRldiBkaXNwbGF5IGRyaXZlciIKK0RFU0NSSVBUSU9OID0gImZiZGV2IGlzIGFuIFhvcmcgZHJpdmVyIGZvciBmcmFtZWJ1ZmZlciBkZXZpY2VzLiBUaGlzIGlzIGEgbm9uLWFjY2VsZXJhdGVkIGRyaXZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4Y2JkOTlmZmY3NzNmOTJlODQ0OTQ4Zjc0ZWYwZGY4IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzkzMWMwZTE5ZDQ0MWNjNTc2ZGMwODhmOWViOWZkNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRkNGIzMjY0OTgyMjNhYmJmZGY3ODYwODlhNDZlYTNkYjRmYTZiYmQzNDEzMDhlYjQ4YTllMDBiYzNmZDUxYiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTVkZDM5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0luY2x1ZGUgeG9yZy1zZXJ2ZXIuaCB0byBmaXggYnVpbGQgZXJyb3JzIHNlZW4gd2l0aCBnbGliYyAyLjIwCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvd29yay9pNTg2LW9lLWxpbnV4L3hmODYtdmlkZW8taW50ZWwvMl8yLjk5LjkxMi1yMC94Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYzozOToKKy9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1Nzk6MTogZXJyb3I6IGV4cGVjdGVkIGlkZW50aWZpZXIgb3IgJygnIGJlZm9yZSAnX19leHRlbnNpb25fXycKKyBzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG4pOworIF4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhmODYtdmlkZW8taW50ZWwtMi45OS45MTIub3JpZy9zcmMvYmFja2xpZ2h0LmMJMjAxNC0wNC0wOSAxMDo0MToxOC4wMDAwMDAwMDAgLTA3MDAKKysrKyB4Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYwkyMDE0LTA4LTI4IDE4OjUyOjI1LjUyNDA3MDU4NyAtMDcwMAorQEAgLTI5LDYgKzI5LDcgQEAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2VuZGlmCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTUwOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVGhlc2UgbW9kdWxlcyBhcmUgb25seSB1c2VkIGZvciB0ZXN0cyB0aGF0IGRvbid0IGdldCBpbnN0YWxsZWQsIGFuZCB0aGUKK2F1dG9tYXRpYyBkZXRlY3Rpb24gd2l0aG91dCBleHBsaWNpdCBkZXBlbmRlbmNpZXMgbWVhbnMgdGhhdCBhIGJ1aWxkIGNhbiBmaW5kCitlLmcuIHhzaG1mZW5jZSBhdCBjb25maWd1cmUgdGltZSBidXQgdGhlbiBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXNyb290IGJ5Cit0aGUgdGltZSBjb21waWxlIGhhcHBlbnMuCisKK0FzIHRoZSB0ZXN0cyBkb24ndCBnZXQgaW5zdGFsbGVkLCBqdXN0IGRpc2FibGUgdGhlIGNoZWNrcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1zcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJkNjU0ZjMuLjc4YTBlMGQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI1MSArMjUxIEBAIGZpCistUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKKysjUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODlkNTJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gN2ZlMmIyOTQ4NjUyNDQzZmY0M2Q5MDc4NTViZDdhMDUxZDU0ZDMwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAyMzoxNDoxNyArMDAwMAorU3ViamVjdDogW1BBVENIXSBzbmE6IFByb3RlY3QgYWdhaW5zdCBBQkkgYnJlYWthZ2UgaW4gcmVjZW50IHZlcnNpb25zIG9mCisgbGliZHJtCisKK2NvbW1pdCA3ZmUyYjI5NDg2NTI0NDNmZjQzZDkwNzg1NWJkN2EwNTFkNTRkMzA5IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvc3JjL3NuYS9rZ2VtLmMgYi9zcmMvc25hL2tnZW0uYworaW5kZXggMTFmMDgyOGYyYmJjLi42ZjE2Y2JhYzg3ZjIgMTAwNjQ0CistLS0gYS9zcmMvc25hL2tnZW0uYworKysrIGIvc3JjL3NuYS9rZ2VtLmMKK0BAIC0xODIsNiArMTgyLDE1IEBAIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nIHsKKyAjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1NFVF9DQUNISU5HIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIExPQ0FMX0k5MTVfR0VNX1NFVF9DQUNISU5HLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZykKKyAjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0dFVF9DQUNISU5HIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIExPQ0FMX0k5MTVfR0VNX0dFVF9DQUNISU5HLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZykKKyAKKytzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCB7CisrCXVpbnQzMl90IGhhbmRsZTsKKysJdWludDMyX3QgcGFkOworKwl1aW50NjRfdCBvZmZzZXQ7CisrCXVpbnQ2NF90IHNpemU7CisrCXVpbnQ2NF90IGFkZHJfcHRyOworK307CisrI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1X0dFTV9NTUFQIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXApCisrCisgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXAyIHsKKyAJdWludDMyX3QgaGFuZGxlOworIAl1aW50MzJfdCBwYWQ7CitAQCAtNTE0LDE1ICs1MjMsMTUgQEAgcmV0cnlfd2M6CisgCisgc3RhdGljIHZvaWQgKl9fa2dlbV9ib19tYXBfX2NwdShzdHJ1Y3Qga2dlbSAqa2dlbSwgc3RydWN0IGtnZW1fYm8gKmJvKQorIHsKKy0Jc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIG1tYXBfYXJnOworKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCBhcmc7CisgCWludCBlcnI7CisgCisgcmV0cnk6CistCVZHX0NMRUFSKG1tYXBfYXJnKTsKKy0JbW1hcF9hcmcuaGFuZGxlID0gYm8tPmhhbmRsZTsKKy0JbW1hcF9hcmcub2Zmc2V0ID0gMDsKKy0JbW1hcF9hcmcuc2l6ZSA9IGJ5dGVzKGJvKTsKKy0JaWYgKChlcnIgPSBkb19pb2N0bChrZ2VtLT5mZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAsICZtbWFwX2FyZykpKSB7CisrCVZHX0NMRUFSKGFyZyk7CisrCWFyZy5oYW5kbGUgPSBiby0+aGFuZGxlOworKwlhcmcub2Zmc2V0ID0gMDsKKysJYXJnLnNpemUgPSBieXRlcyhibyk7CisrCWlmICgoZXJyID0gZG9faW9jdGwoa2dlbS0+ZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX01NQVAsICZhcmcpKSkgeworIAkJYXNzZXJ0KGVyciAhPSBFSU5WQUwpOworIAorIAkJaWYgKF9fa2dlbV90aHJvdHRsZV9yZXRpcmUoa2dlbSwgMCkpCitAQCAtNTM2LDEwICs1NDUsMTAgQEAgcmV0cnk6CisgCQlyZXR1cm4gTlVMTDsKKyAJfQorIAorLQlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKG1tYXBfYXJnLmFkZHJfcHRyLCBieXRlcyhibykpKTsKKysJVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChhcmcuYWRkcl9wdHIsIGJ5dGVzKGJvKSkpOworIAorIAlEQkcoKCIlczogY2FjaGluZyBDUFUgdm1hIGZvciAlZFxuIiwgX19GVU5DVElPTl9fLCBiby0+aGFuZGxlKSk7CistCXJldHVybiBiby0+bWFwX19jcHUgPSAodm9pZCAqKSh1aW50cHRyX3QpbW1hcF9hcmcuYWRkcl9wdHI7CisrCXJldHVybiBiby0+bWFwX19jcHUgPSAodm9pZCAqKSh1aW50cHRyX3QpYXJnLmFkZHJfcHRyOworIH0KKyAKKyBzdGF0aWMgaW50IGdlbV93cml0ZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwKKy0tIAorMi40LjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNjc1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3VkZXYtZnN0YXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSAxMmFmOGE1NzVkMTUxOGQ0MDQxNmY4MzE5NTA0OTE1N2MzYTA2MmE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CitEYXRlOiBUdWUsIDI0IEZlYiAyMDE1IDE1OjI1OjQwICswMDAwCitTdWJqZWN0OiBzbmE6IHVkZXYgaW50ZWdyYXRpb24gZGVwZW5kcyBvbiBmc3RhdCBhbmQgc3lzL3N0YXQuaAorCitzcmMvc25hL3NuYV9kcml2ZXIuYzogSW4gZnVuY3Rpb24gJ3NuYV9oYW5kbGVfdWV2ZW50cyc6CitzcmMvc25hL3NuYV9kcml2ZXIuYzo3NTk6MjogZXJyb3I6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdmc3RhdCcgWy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCisKK0Fsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaW5jbHVkZSB1ZGV2IHN1cHBvcnQgaW4gdGhlIGNvbmZpZ3VyZQorc3VtbWFyeS4KKworU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDc0NzZlMmIuLmRlM2E0YjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE5NywxMSArMTk3LDE1IEBAIEFDX0FSR19FTkFCTEUodWRldiwKKyAKKyBpZiB0ZXN0ICJ4JFVERVYiICE9ICJ4bm8iOyB0aGVuCisgCVBLR19DSEVDS19NT0RVTEVTKFVERVYsIFtsaWJ1ZGV2XSwgW3VkZXY9InllcyJdLCBbdWRldj0ibm8iXSkKKysJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3N0YXQuaF0sIFtdLCBbdWRldj0ibm8iXSkKKyAJaWYgdGVzdCAieCRVREVWIiA9ICJ4eWVzIiAtYSAieCR1ZGV2IiAhPSAieHllcyI7IHRoZW4KKyAJCUFDX01TR19FUlJPUihbdWRldiBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbm90IGZvdW5kIChsaWJ1ZGV2KV0pCisgCWZpCisgCWlmIHRlc3QgIngkdWRldiIgPSAieHllcyI7IHRoZW4KKyAJCUFDX0RFRklORShIQVZFX1VERVYsMSxbRW5hYmxlIHVkZXYtYmFzZWQgbW9uaXRvciBob3RwbHVnIGRldGVjdGlvbl0pCisrCQl1ZGV2X21zZz0iIHllcyIKKysJZWxzZQorKwkJdWRldl9tc2c9IiBubyIKKyAJZmkKKyBmaQorIAorQEAgLTkxMSw2ICs5MTUsNyBAQCBlY2hvICIgIFN1cHBvcnQgZm9yIEtlcm5lbCBNb2RlIFNldHRpbmc/ICRLTVMiCisgZWNobyAiICBTdXBwb3J0IGZvciBsZWdhY3kgVXNlciBNb2RlIFNldHRpbmcgKGZvciBpODEwKT8gJFVNUyIKKyBlY2hvICIgIFN1cHBvcnQgZm9yIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmU6JGRyaV9tc2ciCisgZWNobyAiICBTdXBwb3J0IGZvciBYdiBtb3Rpb24gY29tcGVuc2F0aW9uIChYdk1DIGFuZCBsaWJYdk1DKTokeHZtY19tc2ciCisrZWNobyAiICBTdXBwb3J0IGZvciBkaXNwbGF5IGhvdHBsdWcgbm90aWZpY2F0aW9ucyAodWRldik6JHVkZXZfbXNnIgorIGVjaG8gIiAgQnVpbGQgYWRkaXRpb25hbCB0b29scyBhbmQgdXRpbGl0aWVzPyR0b29sc19tc2ciCisgaWYgdGVzdCAtbiAiJHhwX21zZyI7IHRoZW4KKyBlY2hvICIgIEV4cGVyaW1lbnRhbCBzdXBwb3J0OiR4cF9tc2ciCitkaWZmIC0tZ2l0IGEvc3JjL3NuYS9zbmFfZHJpdmVyLmMgYi9zcmMvc25hL3NuYV9kcml2ZXIuYworaW5kZXggOGMwZDBiNS4uYmMyMGVmMCAxMDA2NDQKKy0tLSBhL3NyYy9zbmEvc25hX2RyaXZlci5jCisrKysgYi9zcmMvc25hL3NuYV9kcml2ZXIuYworQEAgLTc0MCw2ICs3NDAsOCBAQCBzbmFfd2FrZXVwX2hhbmRsZXIoV0FLRVVQSEFORExFUl9BUkdTX0RFQ0wpCisgfQorIAorICNpZiBIQVZFX1VERVYKKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKyBzdGF0aWMgdm9pZAorIHNuYV9oYW5kbGVfdWV2ZW50cyhpbnQgZmQsIHZvaWQgKmNsb3N1cmUpCisgeworLS0gCitjZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjE0NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiCkBAIC0wLDAgKzEsNDAgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwc2V0cyBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImludGVsIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBJbnRlbCBpbnRlZ3JhdGVkIGdyYXBoaWNzIFwKK2NoaXBzZXRzLiBUaGUgZHJpdmVyIHN1cHBvcnRzIGRlcHRocyA4LCAxNSwgMTYgYW5kIDI0LiBPbiBzb21lIGNoaXBzZXRzLCBcCit0aGUgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIGFjY2VsZXJhdGVkIDNEIHZpYSB0aGUgRGlyZWN0IFJlbmRlcmluZyBcCitJbmZyYXN0cnVjdHVyZSAoRFJJKS4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3MzBhZDU4ZDExYzdiYmFkOWE3MDY2ZDY5Zjc4MDhlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14MTEtZHJpMy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdWRldi1mc3RhdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZhMTk2YTY2ZTUyYzBjNjI0ZmU1ZDM1MGFmN2E1ZTdiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYjc4MWVlYTA1NTU4MjgyMGExMjNjNDdiNjI0MTFiZGY2YWFiZjRmMDNkYzA1NjhmYWVjNTVmYWY5NjY3YzkiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGRybSBsaWJwY2lhY2Nlc3MgcGl4bWFuIgorCitQQUNLQUdFQ09ORklHID8/PSAieHZtYyBzbmEgdWRldiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdkcmkgZHJpMSBkcmkyJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpIgorUEFDS0FHRUNPTkZJR1tkcmkxXSA9ICItLWVuYWJsZS1kcmkxLC0tZGlzYWJsZS1kcmkxLHhmODZkcmlwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsLS1kaXNhYmxlLWRyaTMsZHJpM3Byb3RvIgorUEFDS0FHRUNPTkZJR1tzbmFdID0gIi0tZW5hYmxlLXNuYSwtLWRpc2FibGUtc25hIgorUEFDS0FHRUNPTkZJR1t1eGFdID0gIi0tZW5hYmxlLXV4YSwtLWRpc2FibGUtdXhhIgorUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLWVuYWJsZS11ZGV2LC0tZGlzYWJsZS11ZGV2LHVkZXYiCitQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyB4Y2ItdXRpbCIKK1BBQ0tBR0VDT05GSUdbdG9vbHNdID0gIi0tZW5hYmxlLXRvb2xzLC0tZGlzYWJsZS10b29scyxsaWJ4aW5lcmFtYSBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4Zml4ZXMgbGlieGN1cnNvciBsaWJ4dHN0IGxpYnhleHQgbGlieHJlbmRlciIKKworIyAtLWVuYWJsZS1rbXMtb25seSBvcHRpb24gaXMgcmVxdWlyZWQgYnkgUk9PVExFU1NfWAorRVhUUkFfT0VDT05GICs9ICcke0BiYXNlX2NvbmRpdGlvbmFsKCAiUk9PVExFU1NfWCIsICIxIiwgIiAtLWVuYWJsZS1rbXMtb25seSIsICIiLCBkICl9JworCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wb2xraXQtMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcC8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXAvMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTc3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXAvMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZmM2NTNjYTNiMzY0MzVhZWEyODFhZTQwOWZiOTBmODVlMWJjMGQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDg6NDQ6MTMgKzAwMDAKK1N1YmplY3Q6IFtmcmVlZHJlbm9dW1BBVENIXSBkcm1tb2RlX291dHB1dF9kcG1zOiBSZXBsYWNlIGxvZ2ljYWwgJiYgd2l0aCBiaXR3aXNlICYKKyBvcGVyYXRpb24KKworVGhpcyBpcyBhIG1hc2sgY2FsY3VsYXRpb24gc28gYml0Yndpc2UgJiBzaG91bGQgaGF2ZSBiZWVuIHVzZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIHNyYy9kcm1tb2RlX2Rpc3BsYXkuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYyBiL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYworaW5kZXggYzNjZjRmOC4uZWI1NGI1OSAxMDA2NDQKKy0tLSBhL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYworKysrIGIvc3JjL2RybW1vZGVfZGlzcGxheS5jCitAQCAtNzc3LDcgKzc3Nyw3IEBAIGRybW1vZGVfb3V0cHV0X2RwbXMoeGY4Nk91dHB1dFB0ciBvdXRwdXQsIGludCBtb2RlKQorIAorIAlmb3IgKGkgPSAwOyBpIDwga291dHB1dC0+Y291bnRfcHJvcHM7IGkrKykgeworIAkJcHJvcHMgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtbW9kZS0+ZmQsIGtvdXRwdXQtPnByb3BzW2ldKTsKKy0JCWlmIChwcm9wcyAmJiAocHJvcHMtPmZsYWdzICYmIERSTV9NT0RFX1BST1BfRU5VTSkpIHsKKysJCWlmIChwcm9wcyAmJiAocHJvcHMtPmZsYWdzICYgRFJNX01PREVfUFJPUF9FTlVNKSkgeworIAkJCWlmICghc3RyY21wKHByb3BzLT5uYW1lLCAiRFBNUyIpKSB7CisgCQkJCW1vZGVfaWQgPSBrb3V0cHV0LT5wcm9wc1tpXTsKKyAJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wcyk7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcF8wLjQuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcF8wLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjY4MmVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwXzAuNC4zLmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBmcmFtZWJ1ZmZlciBkcml2ZXIiCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVEkgT01BUCBpbnRlZ3JhdGVkIGdyYXBoaWNzIGNoaXBzZXRzIGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAiT3Blbi1zb3VyY2UgWC5vcmcgZ3JhcGhpY3MgZHJpdmVyIGZvciBUSSBPTUFQIGdyYXBoaWNzIFwKK0N1cnJlbnRseSByZWxpZXMgb24gYSBjbG9zZWQtc291cmNlIHN1Ym1vZHVsZSBmb3IgRVhBIGFjY2VsZXJhdGlvbiBvbiBcCit0aGUgZm9sbG93aW5nIGNoaXBzZXRzOiBcCisgICsgT01BUDM0MzAgXAorICArIE9NQVAzNjMwIFwKKyAgKyBPTUFQNDQzMCBcCisgICsgT01BUDQ0NjAgXAorICArIE9NQVA1NDMwIFwKKyAgKyBPTUFQNTQzMiBcCitcCitOT1RFOiB0aGlzIGRyaXZlciBpcyB3b3JrIGluIHByb2dyZXNzLi4gIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHRyeSBcCithbmQgdXNlIGl0IHlldC4gIFRoZSBBUEkvQUJJIGJldHdlZW4gZHJpdmVyIGFuZCBrZXJuZWwsIGFuZCBkcml2ZXIgYW5kIFwKK2FjY2VsZXJhdGlvbiBzdWJtb2R1bGVzIGlzIG5vdCBzdGFibGUgeWV0LiAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhlIFwKK29tYXBkcm0ga2VybmVsIGRyaXZlciB3LyBHRU0gc3VwcG9ydC4gXAorIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwY2U1ZGUzYjExMTMxNWVhNjUyYTVmNzRlYzBjNjAyIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgbGliZHJtIHhmODZkcmlwcm90byIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZHJtbW9kZV9vdXRwdXRfZHBtcy1SZXBsYWNlLWxvZ2ljYWwtd2l0aC1iaXR3aXNlLW9wZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImJlMzVkYWY2ZmE0Yjc1MDkyY2M0YTg5NzhjNDM3YmM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiMWUwZTY5ZmQ0YzRjOGZkY2E1ZWYyY2IwNDQ3YmNjZDc1MThhNzE4NDk1ODc2YTY5MDRiZWY1N2IzOTk4NmQiCisKK0NGTEFHUyArPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0veG9yZyAiCisKKyMgVXNlIG92ZXJsYXkgMiBvbiBvbWFwMyB0byBlbmFibGUgb3RoZXIgYXBwcyB0byB1c2Ugb3ZlcmxheSAxIChlLmcuIGRtYWkgb3Igb21hcGZicGxheSkKK2RvX2NvbXBpbGVfcHJlcGVuZF9hcm12N2EgKCkgeworICAgICAgICBzZWQgLWkgLWUgczpmYjE6ZmIyOmcgJHtTfS9zcmMvb21hcF94di5jCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidvcGVuZ2wnIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjZjE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUHJldmVudHMtb21hcGZiLWZyb20tZnJvbS1jcmFzaGluZy13aGVuLXBpeGVsY2xvY2stby5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDI4YzAwNmM5NGU1N2VhNzFkZjExZWM0ZmZmNzlkN2ZmY2ZjNDg2MGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYXIgTWNLb24gPEZhck1jS29uQGJ1Z2xhYnMubmV0PgorRGF0ZTogVHVlLCAzIE1heSAyMDExIDIwOjU5OjA0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFByZXZlbnRzIG9tYXBmYiBmcm9tIGZyb20gY3Jhc2hpbmcgd2hlbiBwaXhlbGNsb2NrIG9mIDAgaXMKKyBzZW50IHRvIGl0LgorCitEdWUgdG8gYSBMaW51eCBkZXNpZ24gYnVnIGl0IGlzIGVhc3kgdG8gZ2V0IGEgcGl4ZWxjbG9jayBzZXQgdG8gemVybword2hlbiBjaGFuZ2luZyBkaXNwbGF5cyBhdCBydW50aW1lLgorLS0tCisgc3JjL29tYXBmYi1vdXRwdXQuYyB8IDkgKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItb3V0cHV0LmMgYi9zcmMvb21hcGZiLW91dHB1dC5jCitpbmRleCBmOGI0ZGIzLi40ZDU5MjY1IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1vdXRwdXQuYworKysrIGIvc3JjL29tYXBmYi1vdXRwdXQuYworQEAgLTEyNSw4ICsxMjUsMTMgQEAgT01BUEZCT3V0cHV0R2V0TW9kZXMoeGY4Nk91dHB1dFB0ciBvdXRwdXQpCisgCS8qIE9ubHkgcG9wdWxhdGUgdGhlIG5hdGl2ZSAoY3VycmVudCkgbW9kZSAqLworIAltb2RlID0gY2FsbG9jKDEsIHNpemVvZihEaXNwbGF5TW9kZVJlYykpOworIAltb2RlLT50eXBlICAgICAgfD0gTV9UX1BSRUZFUlJFRDsKKy0JbW9kZS0+Q2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKy0JbW9kZS0+U3ludGhDbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworKwlpZiAob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrID09IDApIHsKKysJCW1vZGUtPkNsb2NrID0gMDsKKysJCW1vZGUtPlN5bnRoQ2xvY2sgPSAwOworKwl9IGVsc2UgeworKwkJbW9kZS0+Q2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKysJCW1vZGUtPlN5bnRoQ2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKysJfQorIAltb2RlLT5IRGlzcGxheSAgID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisgCW1vZGUtPkhTeW5jU3RhcnQgPSBtb2RlLT5IRGlzcGxheQorIAkgICAgICAgICAgICAgICAgICArIG9mYi0+c3RhdGVfaW5mby5yaWdodF9tYXJnaW47CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmIwMWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1SZXZlcnQtU2V0LWEtbGFyZ2UtQ1JUQy11cHBlci1saW1pdC10by1ub3QtcHJ1bmUtbGFyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gOGZiN2QwZjk5ZDRhZmJiNTc0YjMwY2I0ZjFlNjZhOGY4OWQ5NGFkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEyOjA0OjM2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS82XSBSZXZlcnQgIlNldCBhIGxhcmdlIENSVEMgdXBwZXIgbGltaXQgdG8gbm90IHBydW5lIGxhcmdlcgorIHJlc29sdXRpb25zIgorCitQaWN0dXJlIGlzIGdhcmJsZWQgYWZ0ZXIgc3dpdGNoaW5nIHJlc29sdXRpb25zLCBzbyByZXZlcnQgaXQuCitWaXJ0dWFsIHNpemUgdG9vIGJpZywgcmV2ZXJ0IHRoZSBjb21taXQgOWM0ZDc1OTJkY2I3ZGMyMGE0OGE2Zjk0MWQ5ZDk0YmQ3M2QzNDE1My4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItY3J0Yy5jIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWNydGMuYyBiL3NyYy9vbWFwZmItY3J0Yy5jCitpbmRleCA5YWFhNTJmLi5jYmVmZjM1IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1jcnRjLmMKKysrKyBiL3NyYy9vbWFwZmItY3J0Yy5jCitAQCAtMTkwLDEzICsxOTAsMTMgQEAgT01BUEZCQ1JUQ0luaXQoU2NybkluZm9QdHIgcFNjcm4pCisgCSAqIEluIHByYWN0aXNlLCB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBzdXBwb3J0ZWQuCisgCSAqIChubyB3YXkgdG8gc2V0dXAgdGhlIG92ZXJsYXkgb2Zmc2V0L2Jhc2UgYWRkcmVzcykKKyAJICovCistCSAvKiBGSVhNRTogZmlndXJlIG91dCB3aGF0IG1ha2VzIHNlbnNlIGhlcmUuIEEga25vd24gbWF4IHJlc29sdXRpb24/CistCSAgKiBmcmFtZWJ1ZmZlciBzaXplPworLQkgICovCisgCXhmODZDcnRjU2V0U2l6ZVJhbmdlKHBTY3JuLAorLQkgICAgICAgICAgICAgICAgICAgICA4LCA4LCAyMDQ4LCAyMDQ4KTsKKysJICAgICAgICAgICAgICAgICAgICAgOCwgOCwKKysJICAgICAgICAgICAgICAgICAgICAgb2ZiLT5zdGF0ZV9pbmZvLnhyZXNfdmlydHVhbCwKKysJICAgICAgICAgICAgICAgICAgICAgb2ZiLT5zdGF0ZV9pbmZvLnlyZXNfdmlydHVhbCk7CisgCisgCW9mYi0+Y3J0YyA9IHhmODZDcnRjQ3JlYXRlKHBTY3JuLCAmT01BUEZCQ3J0Y0Z1bmNzKTsKKysKKyB9CisgCisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODNhOTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMi1SZXZlcnQtU2V0LXZpcnR1YWwtc2l6ZS13aGVuLWNvbmZpZ3VyaW5nLWZyYW1lYnVmZmVyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODU1YzMzM2FjMGQxNjM1MGY4OTVmMWQxYjkzOTFlOWNiYjBiNmRiNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEzOjI3OjIwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi82XSBSZXZlcnQgIlNldCB2aXJ0dWFsIHNpemUgd2hlbiBjb25maWd1cmluZyBmcmFtZWJ1ZmZlciIKKworVmlydHVhbCBzaXplIHRvbyBiaWcsIHNvIHJldmVydCBpdC4KKworVGhpcyByZXZlcnRzIGNvbW1pdCAyNjUzZWYwNzg4M2ZiZDFhNWU3MDI1ZjkzMDBjZjg5Yjc5YmE0MjlhLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1jcnRjLmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWNydGMuYyBiL3NyYy9vbWFwZmItY3J0Yy5jCitpbmRleCBjYmVmZjM1Li45NjU1ZGIyIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1jcnRjLmMKKysrKyBiL3NyYy9vbWFwZmItY3J0Yy5jCitAQCAtOTgsOCArOTgsNiBAQCBPTUFQRkJDcnRjQ29tbWl0Q2hhbmdlTW9kZSAoeGY4NkNydGNQdHIgY3J0YykKKyAJdiA9IG9mYi0+c3RhdGVfaW5mbzsKKyAJdi54cmVzID0gbW9kZS0+SERpc3BsYXk7CisgCXYueXJlcyA9IG1vZGUtPlZEaXNwbGF5OworLQl2LnhyZXNfdmlydHVhbCA9IGNydGMtPnNjcm4tPnZpcnR1YWxYOworLQl2LnlyZXNfdmlydHVhbCA9IGNydGMtPnNjcm4tPnZpcnR1YWxZOworIAl2LmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworIAl2LnBpeGNsb2NrID0gS0haMlBJQ09TKG1vZGUtPkNsb2NrID8gbW9kZS0+Q2xvY2sgOiA1NjAwMCk7CisgCXYubGVmdF9tYXJnaW4gPSBtb2RlLT5IVG90YWwgLSBtb2RlLT5IU3luY0VuZDsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZWE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAzLWZvcmNlLXBsYWluLW1vZGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAyNTJmNDRjMDcyZDM0NDdhMzIxMjdmYzlhZmU1ZDBkNDBmM2M1MTBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTM6MjA6MjAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzZdIGZvcmNlICdwbGFpbicgbW9kZQorCitUaGUgbmV3IERTUyBtb2RlIGJyZWFrcyBYViwgc28gZm9yY2UgcGxhaW4gbW9kZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItZHJpdmVyLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggMDE4ZTA0MC4uNDhhYTA5YyAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC0zMjYsNyArMzI2LDcgQEAgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKQorIAlPTUFQRkJQcm9iZUNvbnRyb2xsZXIob2ZiLT5jdHJsX25hbWUpOworIAorIAkvKiBEbyB3ZSBoYXZlIHRoZSBEU1Mga2VybmVsIEFQST8gKi8KKy0JaWYgKHN0YXQoU1lTRlNfRFNTX0RJUiwgJnN0KSA9PSAwKSB7CisrCWlmICgwKSB7IC8vc3RhdChTWVNGU19EU1NfRElSLCAmc3QpID09IDApIHsKKyAJCW9mYi0+ZHNzID0gVFJVRTsKKyAJfSBlbHNlIHsKKyAJCW9mYi0+ZHNzID0gRkFMU0U7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGFjOWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNC1ibGFja2xpc3QtdHYtb3V0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gY2ZhNDZiNjdmNTkxMTVmNmQ4ZWY5NDE0YWY2MDM4MDc0OWZmM2ViMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEzOjIxOjEyICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNC82XSBibGFja2xpc3QgdHYgb3V0CisKK1RoZSB0di1vdXQgZ2V0cyBhZGRlZCBsYXN0IGFuZCB0aGUgZHJpdmVyIHRyaWVzIHRvIHJlY29uZmlndXJlIGR2aSB0byBUViByZXNvbHV0aW9ucywgd2hpY2ggZmFpbHMuIHNvIGJsYWNrbGlzdCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItb3V0cHV0LWRzcy5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMgYi9zcmMvb21hcGZiLW91dHB1dC1kc3MuYworaW5kZXggNmNjNTJkZS4uODNjYjcxMSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jCisrKysgYi9zcmMvb21hcGZiLW91dHB1dC1kc3MuYworQEAgLTIwNSw2ICsyMDUsMTAgQEAgT01BUEZCRFNTT3V0cHV0RGV0ZWN0ICh4Zjg2T3V0cHV0UHRyIG91dHB1dCkKKyAJaWYob2ZiLT50aW1pbmdzW2lkeF1bMF0gPT0gJ1wwJykKKyAJCXJldHVybiBYRjg2T3V0cHV0U3RhdHVzRGlzY29ubmVjdGVkOworIAorKwkvLyBIYWNrIHRvIGRpc2FibGUgdGhlIHR2IG91dAorKwlpZiAoc3RybmNtcChvdXRwdXQtPm5hbWUsICJ0diIsIDIpID09IDApCisrCQlyZXR1cm4gWEY4Nk91dHB1dFN0YXR1c0Rpc2Nvbm5lY3RlZDsKKysKKyAJcmV0dXJuIFhGODZPdXRwdXRTdGF0dXNDb25uZWN0ZWQ7CisgfQorIAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiMjg0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDUtQXR0ZW1wdC10by1maXgtVlJGQi5wYXRjaApAQCAtMCwwICsxLDMyNSBAQAorRnJvbSA4YjFmNjk3YTYwZTM1YWI4MmZmZmRhYmZhZWZkYjQ1ZTlhOWRmMzc5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRWluby1WaWxsZSBUYWx2YWxhIDx0YWx2YWxhQHN0YW5mb3JkLmVkdT4KK0RhdGU6IFR1ZSwgMjMgQXVnIDIwMTEgMTg6Mzc6MDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzZdIEF0dGVtcHQgdG8gZml4IFZSRkIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2h0dHA6Ly9kb21pbmlvbi50aHJ1aGVyZS5uZXQvZ2l0L2NnaXQuY2dpL3hmODYtdmlkZW8tb21hcGZiL2NvbW1pdC8/aD1rb2VuL2ZpeHVwcyZpZD02ODMzZmM5Zjc5NTI2NWU0OTQzZDI0ODEwM2ZiYWYzNDYzYjUxNWQ2CisKK1NpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBLcnp5c3prb3dpYWsgPGRvc0Bkb3Nvd2lza28ubmV0PgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jIHwgIDQgKy0tCisgc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oIHwgIDIgKy0KKyBzcmMvb21hcGZiLWRyaXZlci5jICAgICAgICAgICAgfCAyOCArKysrKysrKysrKysrLS0tCisgc3JjL29tYXBmYi14di1ibGl6emFyZC5jICAgICAgIHwgIDEgKworIHNyYy9vbWFwZmIteHYtZ2VuZXJpYy5jICAgICAgICB8IDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIHNyYy9vbWFwZmIteHYuYyAgICAgICAgICAgICAgICB8ICAzICsrCisgNiBmaWxlcyBjaGFuZ2VkLCA4OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYyBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYworaW5kZXggZGNlZmE5Yi4uZDQzNDI3ZCAxMDA2NDQKKy0tLSBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYworKysrIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jCitAQCAtMzgsMTMgKzM4LDEzIEBACisgI2luY2x1ZGUgImltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oIgorIAorIC8qIEJhc2ljIGxpbmUtYmFzZWQgY29weSBmb3IgcGFja2VkIGZvcm1hdHMgKi8KKy12b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpCisrdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHNyY19zdHJpZGUsIGludCBkc3Rfc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpCisgeworIAlpbnQgaTsKKyAJaW50IGxlbiA9IHcgKiAyOworIAlmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKQorIAl7CistCQltZW1jcHkoZGVzdCArIGkgKiBsZW4sIHNyYyArIGkgKiBzdHJpZGUsIGxlbik7CisrCQltZW1jcHkoZGVzdCArIGkgKiBkc3Rfc3RyaWRlLCBzcmMgKyBpICogc3JjX3N0cmlkZSwgbGVuKTsKKyAJfQorIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmggYi9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgKK2luZGV4IDU4NDg5NmEuLmJhN2NhZjIgMTAwNjQ0CistLS0gYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgKKysrKyBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaAorQEAgLTI3LDcgKzI3LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgLyogQmFzaWMgbGluZS1iYXNlZCBjb3B5IGZvciBwYWNrZWQgZm9ybWF0cyAqLworLXZvaWQgcGFja2VkX2xpbmVfY29weShpbnQgdywgaW50IGgsIGludCBzdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCk7Cisrdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHNyY19zdHJpZGUsIGludCBkc3Rfc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpOworIAorIC8qIEJhc2ljIEMgaW1wbGVtZW50YXRpb24gb2YgWVYxMi9JNDIwIHRvIFVZVlkgY29udmVyc2lvbiAqLworIHZvaWQgdXYxMl90b191eXZ5KGludCB3LCBpbnQgaCwgaW50IHlfcGl0Y2gsIGludCB1dl9waXRjaCwgdWludDhfdCAqeV9wLCB1aW50OF90ICp1X3AsIHVpbnQ4X3QgKnZfcCwgdWludDhfdCAqZGVzdCk7CitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1kcml2ZXIuYyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK2luZGV4IDQ4YWEwOWMuLjA3OTg5ZjUgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWRyaXZlci5jCisrKysgYi9zcmMvb21hcGZiLWRyaXZlci5jCitAQCAtNjYsNiArNjYsNyBAQAorICNkZWZpbmUgT01BUEZCX1ZFUlNJT04gMTAwMAorICNkZWZpbmUgT01BUEZCX0RSSVZFUl9OQU1FICJPTUFQRkIiCisgI2RlZmluZSBPTUFQRkJfTkFNRSAib21hcGZiIgorKyNkZWZpbmUgRU5GT1JDRV9NT0RFUworIAorIHN0YXRpYyBCb29sIE9NQVBGQlByb2JlKERyaXZlclB0ciBkcnYsIGludCBmbGFncyk7Cisgc3RhdGljIEJvb2wgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKTsKK0BAIC0xMDUsMTEgKzEwNiwxMyBAQCBzdGF0aWMgU3ltVGFiUmVjIE9NQVBGQkNoaXBzZXRzW10gPSB7CisgdHlwZWRlZiBlbnVtIHsKKyAJT1BUSU9OX0FDQ0VMTUVUSE9ELAorIAlPUFRJT05fRkIsCisrCU9QVElPTl9ST1RBVEUsCisgfSBGQkRldk9wdHM7CisgCisgc3RhdGljIGNvbnN0IE9wdGlvbkluZm9SZWMgT01BUEZCT3B0aW9uc1tdID0geworIAl7IE9QVElPTl9BQ0NFTE1FVEhPRCwJIkFjY2VsTWV0aG9kIiwJT1BUVl9TVFJJTkcsCXswfSwJRkFMU0UgfSwKKyAJeyBPUFRJT05fRkIsCQkiZmIiLAkJT1BUVl9TVFJJTkcsCXswfSwJRkFMU0UgfSwKKysJeyBPUFRJT05fUk9UQVRFLAkicm90YXRpb24iLAlPUFRWX1NUUklORywJezB9LAlGQUxTRSB9LAorIAl7IC0xLAkJCU5VTEwsCQlPUFRWX05PTkUsCXswfSwJRkFMU0UgfQorIH07CisgCitAQCAtMjg2LDYgKzI4OSw3IEBAIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncykKKyB7CisgCU9NQVBGQlB0ciBvZmI7CisgCUVudGl0eUluZm9QdHIgcEVudDsKKysJY2hhciAqcm90YXRlOworIAlyZ2IgemVyb3MgPSB7IDAsIDAsIDAgfTsKKyAJc3RydWN0IHN0YXQgc3Q7CisgCitAQCAtMzc5LDYgKzM4Myw4IEBAIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncykKKyAJcFNjcm4tPnByb2dDbG9jayA9IFRSVUU7CisgCXBTY3JuLT5jaGlwc2V0ICAgPSAib21hcGZiIjsKKyAJCisrCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9JTkZPLCAiUm90YXRlIHRlc3QgdmVyc2lvbiAwLjAyXG4iKTsKKysJCisgCS8qIFN0YXJ0IHdpdGggY29uZmlndXJlZCB2aXJ0dWFsIHNpemUgKi8KKyAJcFNjcm4tPnZpcnR1YWxYID0gcFNjcm4tPmRpc3BsYXktPnZpcnR1YWxYOworIAlwU2Nybi0+dmlydHVhbFkgPSBwU2Nybi0+ZGlzcGxheS0+dmlydHVhbFk7CitAQCAtNDk2LDEyICs1MDIsMjEgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlvZmItPkNsb3NlU2NyZWVuID0gcFNjcmVlbi0+Q2xvc2VTY3JlZW47CisgCXBTY3JlZW4tPkNsb3NlU2NyZWVuID0gT01BUEZCQ2xvc2VTY3JlZW47CisgCisrCS8qIEVuZm9yY2UgdGhlIGRlZmF1bHQgbW9kZSAodGhpcyBpcyBzaWxseSBJIGd1ZXNzKSAqLworKyNpZmRlZiBFTkZPUkNFX01PREVTCisrCS8veGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0lORk8sICJFbmZvcmNpbmcgbW9kZXNcbiIpOworKwkvL3NldF9tb2RlKG9mYiwgJm9mYi0+ZGVmYXVsdF9tb2RlKTsKKysJLy9wU2Nybi0+ZGlzcGxheVdpZHRoID0gb2ZiLT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoIC8KKysJLy8gIChvZmItPnN0YXRlX2luZm8uYml0c19wZXJfcGl4ZWw+PjMpOyAvL29mYi0+c3RhdGVfaW5mby54cmVzOworKyNlbmRpZgorKworIAkvKiBNYXAgb3VyIGZyYW1lYnVmZmVyIG1lbW9yeSAqLworKwlvZmItPm1lbV9pbmZvLnNpemUgPSBvZmItPmZpeGVkX2luZm8ubGluZV9sZW5ndGggKiBvZmItPnN0YXRlX2luZm8ueXJlczsKKyAJb2ZiLT5mYiA9IG1tYXAgKE5VTEwsIG9mYi0+bWVtX2luZm8uc2l6ZSwKKyAJICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgCSAgICAgICAgICAgICAgICBvZmItPmZkLCAwKTsKKy0JaWYgKG9mYi0+ZmIgPT0gTlVMTCkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJNYXBwaW5nIGZyYW1lYnVmZmVyIG1lbW9yeSBmYWlsZWRcbiIpOworKwlpZiAob2ZiLT5mYiA9PSBNQVBfRkFJTEVEKSB7CisrCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTU3OCw4ICs1OTMsMTMgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAl9IGVsc2UgaWYgKCFvZmItPmRzcykgeworIAorIAkJb2ZiLT5wbGFuZV9pbmZvLmVuYWJsZWQgPSAxOworLQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworLQkJb2ZiLT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCWlmIChvZmItPnN0YXRlX2luZm8ucm90YXRlID09IDAgfHwgb2ZiLT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAyKSB7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQl9IGVsc2UgeworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCQlvZmItPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJfQorIAorIAkJaWYgKGlvY3RsIChvZmItPmZkLCBPTUFQRkJfU0VUVVBfUExBTkUsICZvZmItPnBsYW5lX2luZm8pKSB7CisgCQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi14di1ibGl6emFyZC5jIGIvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCitpbmRleCA0MDZmZmM2Li5iNzFkMmFhIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCisrKysgYi9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKK0BAIC0yMjAsNiArMjIwLDcgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VCbGl6emFyZCAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcGFja2VkX2xpbmVfY29weShzcmNfdyAmIH4zLAorIAkJCSAgICAgICAgICAgICAgICAgc3JjX2ggJiB+MywKKyAJCQkgICAgICAgICAgICAgICAgICgoc3JjX3cgKyAxKSAmIH4xKSAqIDIsCisrCQkJCQkgb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKWJ1ZiwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilvZmItPnBvcnQtPmZiKTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYyBiL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCitpbmRleCBlNmY4OWZlLi5iMzNmMzQ0IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di1nZW5lcmljLmMKKysrKyBiL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCitAQCAtNjIsNyArNjIsNyBAQCBpbnQgT01BUFhWQWxsb2NQbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyB7CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworIAorLQkvKiBUaGUgbWVtb3J5IHNpemUgaXMgYWxyZWFkeSBzZXQgaW4gT01BUEZCWFZRdWVyeUltYWdlQXR0cmlidXRlcyAqLworKwkvKiBUaGUgbWVtb3J5IHNpemUgaXMgYWxyZWFkeSBzZXQgYmVmb3JlIHdlIGdldCBoZXJlICovCisgCWlmIChpb2N0bChvZmItPnBvcnQtPmZkLCBPTUFQRkJfU0VUVVBfTUVNLCAmb2ZiLT5wb3J0LT5tZW1faW5mbykgIT0gMCkgeworIAkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJICAgICAgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIHBsYW5lIG1lbW9yeVxuIik7CitAQCAtNzMsMTkgKzczLDIwIEBAIGludCBPTUFQWFZBbGxvY1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIAlvZmItPnBvcnQtPmZiID0gbW1hcCAoTlVMTCwgb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplLAorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+cG9ydC0+ZmQsIDApOworLQlpZiAob2ZiLT5wb3J0LT5mYiA9PSBOVUxMKSB7CisrCWlmIChvZmItPnBvcnQtPmZiID09IE1BUF9GQUlMRUQpIHsKKyAJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCSAgICAgICAgICAgIk1hcHBpbmcgdmlkZW8gbWVtb3J5IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gWHZCYWRBbGxvYzsKKyAJfQorIAorIAkvKiBVcGRhdGUgdGhlIHN0YXRlIGluZm8gKi8KKysJLyogTGV0J3Mgbm90IC0gaXQncyBiYWQKKyAJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPR0VUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKyAJeworIAkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IFJlYWRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisgCQlyZXR1cm4gWHZCYWRBbGxvYzsKKyAJfQorLQorKwkqLworIAlyZXR1cm4gU3VjY2VzczsKKyB9CisgCitAQCAtOTMsNiArOTQsNyBAQCBpbnQgT01BUFhWQWxsb2NQbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyBpbnQgT01BUFhWU2V0dXBWaWRlb1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIHsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CisrCWludCByZXQ7CisgCisgCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT1BVVF9WU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+c3RhdGVfaW5mbykpCisgCXsKK0BAIC0xMDQsNiArMTA2LDMxIEBAIGludCBPTUFQWFZTZXR1cFZpZGVvUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAJCXJldHVybiBYdkJhZEFsbG9jOworIAl9CisrCS8qIENoYW5naW5nIHJvdGF0aW9uL25vbnN0ZCBmbGFncyBjYW4gY2hhbmdlIHRoZSBmaXhlZCBpbmZvISAqLworKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfRlNDUkVFTklORk8sICZvZmItPnBvcnQtPmZpeGVkX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisrCS8qIENvcnJlY3QgZml4ZWQgaW5mbyByZXF1aXJlcyByZWNhbGN1bGF0aW9uIG9mIG5lZWRlZCBtZW1vcnkgKi8KKysJb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplID0gb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoICogb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCisrCS8qIEFsbG9jYXRlIGJ1ZmZlciBtZW1vcnkgKi8KKysJcmV0ID0gT01BUFhWQWxsb2NQbGFuZShwU2Nybik7CisrCWlmIChyZXQgIT0gU3VjY2VzcykKKysJCXJldHVybiByZXQ7CisrCisrCS8qIFdvcmthcm91bmQgZm9yIHJlc2V0IG9mIG1vZGUgYWZ0ZXIgbWVtb3J5IGFsbG8gKi8KKysJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPUFVUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKysJeworKwkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IHNldHRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisrCQlyZXR1cm4gWHZCYWRBbGxvYzsKKysJfQorKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisgCisgCWlmKGlvY3RsKG9mYi0+cG9ydC0+ZmQsIE9NQVBGQl9TRVRVUF9QTEFORSwKKyAJICAgJm9mYi0+cG9ydC0+cGxhbmVfaW5mbykgIT0gMCkgeworQEAgLTEyNCw2ICsxNTEsOCBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGVQdHIgcERyYXcpCisgeworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKKysJc2hvcnQgZHJ3X3RlbXA7CisrCXNob3J0IHJvdF94cmVzLCByb3RfeXJlczsKKyAKKyAJaWYgKCFvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZAorIAkgfHwgb2ZiLT5wb3J0LT51cGRhdGVfd2luZG93LnggIT0gc3JjX3gKK0BAIC0xNjMsMTMgKzE5Miw2IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcmV0dXJuIFN1Y2Nlc3M7CisgCQl9CisgCistCQkvKiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBwbGFuZSBydW5uaW5nLCBlbmFibGUgaXQgKi8KKy0JCWlmICghb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLmVuYWJsZWQpIHsKKy0JCQlyZXQgPSBPTUFQWFZBbGxvY1BsYW5lKHBTY3JuKTsKKy0JCQlpZiAocmV0ICE9IFN1Y2Nlc3MpCistCQkJCXJldHVybiByZXQ7CistCQl9CistCisgCQkvKiBTZXQgdXAgdGhlIHN0YXRlIGluZm8sIHhyZXMgYW5kIHlyZXMgd2lsbCBiZSB1c2VkIGZvcgorIAkJICogc2NhbGluZyB0byB0aGUgdmFsdWVzIGluIHRoZSBwbGFuZSBpbmZvIHN0cnVjdAorIAkJICovCitAQCAtMTc5LDEyICsyMDEsMzEgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzX3ZpcnR1YWwgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnhvZmZzZXQgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlvZmZzZXQgPSAwOworLQkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9IDA7CisrCQkvL29mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLmdyYXlzY2FsZSA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uYml0c19wZXJfcGl4ZWwgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLm5vbnN0ZCA9IHh2X3RvX29tYXBmYl9mb3JtYXQoaW1hZ2UpOworIAorKwkJLyogUGxhbmUgaW5mbyBkb2VzIG5vdCByb3RhdGUgd2l0aCBzdGF0ZV9pbmZvICovCisrCQlpZiAob2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAxIHx8CisrCQkgIG9mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPT0gMykgeworKwkJCWRyd190ZW1wID0gZHJ3X3g7CisrCQkJZHJ3X3ggPSBkcndfeTsKKysJCQlkcndfeSA9IGRyd190ZW1wOworKworKwkJCWRyd190ZW1wID0gZHJ3X3c7CisrCQkJZHJ3X3cgPSBkcndfaDsKKysJCQlkcndfaCA9IGRyd190ZW1wOworKworKwkJCXJvdF94cmVzID0gb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCQkJcm90X3lyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueHJlczsKKysJCX0gZWxzZSB7CisrCQkJcm90X3hyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueHJlczsKKysJCQlyb3RfeXJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzOworKwkJfQorKworKworIAkJLyogU2V0IHVwIHRoZSB2aWRlbyBwbGFuZSBpbmZvICovCisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3ggPSBkcndfeDsKK0BAIC0xOTMsMTMgKzIzNCwxMyBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBkcndfaCAmIH4xNTsKKyAKKyAJCS8qIENhcCBvdXRwdXQgdG8gc2NyZWVuIHNpemUgKi8KKy0JCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID4gb2ZiLT5zdGF0ZV9pbmZvLnhyZXMpIHsKKysJCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID4gcm90X3hyZXMpIHsKKyAJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3ggPSAwOworLQkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKysJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gcm90X3hyZXM7CisgCQl9CistCQlpZiAob2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPiBvZmItPnN0YXRlX2luZm8ueXJlcykgeworKwkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID4gcm90X3lyZXMpIHsKKyAJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3kgPSAwOworLQkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSByb3RfeXJlczsKKyAJCX0KKyAKKyAJCXJldCA9IE9NQVBYVlNldHVwVmlkZW9QbGFuZShwU2Nybik7CitAQCAtMjIzLDYgKzI2NCw3IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcGFja2VkX2xpbmVfY29weShzcmNfdyAmIH4xNSwKKyAJCQkgICAgICAgICAgICAgICAgIHNyY19oICYgfjE1LAorIAkJCSAgICAgICAgICAgICAgICAgKChzcmNfdyArIDEpICYgfjEpICogMiwKKysJCQkgICAgICAgICAgICAgICAgIG9mYi0+cG9ydC0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilidWYsCisgCQkJICAgICAgICAgICAgICAgICAodWludDhfdCopb2ZiLT5wb3J0LT5mYik7CisgCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi14di5jIGIvc3JjL29tYXBmYi14di5jCitpbmRleCAxZGY2NTFlLi4wZmVlMmM2IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di5jCisrKysgYi9zcmMvb21hcGZiLXh2LmMKK0BAIC0xNjksOCArMTY5LDExIEBAIHN0YXRpYyBpbnQgT01BUEZCWFZRdWVyeUltYWdlQXR0cmlidXRlcyAoU2NybkluZm9QdHIgcFNjcm4sCisgCWggPSAqaGVpZ2h0OworIAorIAl3ID0gKHcgKyAxKSAmIH4xOworKworKwkvKiBDYW4ndCBjYWxjdWxhdGUgdGhlc2UgaGVyZSAtIGRvbid0IGtub3cgbGluZSBsZW5ndGgKKyAJb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplID0gdyA8PCAxOworIAlvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUgKj0gaDsKKysJKi8KKyAKKyAJcmV0dXJuIHNpemU7CisgfQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDYtb21hcGZiLXBvcnQtdG8tbmV3LXhzZXJ2ZXItdmlkZW8tQVBJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NjcyOTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaApAQCAtMCwwICsxLDI3MiBAQAorRnJvbSA4MDNlY2YyOTA5OTQ5ZTYxNTJmNGE4MWI2Y2JiOTJhNDQzMDY3OWFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMyBOb3YgMjAxMiAwMDozMTowNiArMDEwMAorU3ViamVjdDogW1BBVENIIDYvNl0gb21hcGZiOiBwb3J0IHRvIG5ldyB4c2VydmVyIHZpZGVvIEFQSQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2NvbXBhdC1hcGkuaCAgICB8IDk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL29tYXBmYi1kcml2ZXIuYyB8IDQxICsrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMTggaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb21wYXQtYXBpLmgKKworZGlmZiAtLWdpdCBhL3NyYy9jb21wYXQtYXBpLmggYi9zcmMvY29tcGF0LWFwaS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjE1OTFiMQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBhdC1hcGkuaAorQEAgLTAsMCArMSw5NiBAQAorKy8qCisrICogQ29weXJpZ2h0IDIwMTIgUmVkIEhhdCwgSW5jLgorKyAqCisrICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKysgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKysgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKysgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKysgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKyAqCisrICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKysgKiBTb2Z0d2FyZS4KKysgKgorKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisrICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisrICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKysgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKysgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisrICoKKysgKiBBdXRob3I6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisrICovCisrCisrLyogdGhpcyBmaWxlIHByb3ZpZGVzIEFQSSBjb21wYXQgYmV0d2VlbiBzZXJ2ZXIgcG9zdCAxLjEzIGFuZCBwcmUgaXQsCisrICAgaXQgc2hvdWxkIGJlIHJldXNlZCBpbnNpZGUgYXMgbWFueSBkcml2ZXJzIGFzIHBvc3NpYmxlICovCisrI2lmbmRlZiBDT01QQVRfQVBJX0gKKysjZGVmaW5lIENPTVBBVF9BUElfSAorKworKyNpZm5kZWYgR0xZUEhfSEFTX0dMWVBIX1BJQ1RVUkVfQUNDRVNTT1IKKysjZGVmaW5lIEdldEdseXBoUGljdHVyZShnLCBzKSBHbHlwaFBpY3R1cmUoKGcpKVsocyktPm15TnVtXQorKyNkZWZpbmUgU2V0R2x5cGhQaWN0dXJlKGcsIHMsIHApIEdseXBoUGljdHVyZSgoZykpWyhzKS0+bXlOdW1dID0gcAorKyNlbmRpZgorKworKyNpZm5kZWYgWEY4Nl9IQVNfU0NSTl9DT05WCisrI2RlZmluZSB4Zjg2U2NyZWVuVG9TY3JuKHMpIHhmODZTY3JlZW5zWyhzKS0+bXlOdW1dCisrI2RlZmluZSB4Zjg2U2NyblRvU2NyZWVuKHMpIHNjcmVlbkluZm8uc2NyZWVuc1socyktPnNjcm5JbmRleF0KKysjZW5kaWYKKysKKysjaWZuZGVmIFhGODZfU0NSTl9JTlRFUkZBQ0UKKysKKysjZGVmaW5lIFNDUk5fQVJHX1RZUEUgaW50CisrI2RlZmluZSBTQ1JOX0lORk9fUFRSKGFyZzEpIFNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbKGFyZzEpXQorKworKyNkZWZpbmUgU0NSRUVOX0FSR19UWVBFIGludAorKyNkZWZpbmUgU0NSRUVOX1BUUihhcmcxKSBTY3JlZW5QdHIgcFNjcmVlbiA9IHNjcmVlbkluZm8uc2NyZWVuc1soYXJnMSldCisrCisrI2RlZmluZSBTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wgaW50IGluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2CisrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHU19ERUNMIGludCBhcmcsIHBvaW50ZXIgYmxvY2tEYXRhLCBwb2ludGVyIHBUaW1lb3V0LCBwb2ludGVyIHBSZWFkbWFzaworKyNkZWZpbmUgQkxPQ0tIQU5ETEVSX0FSR1MgYXJnLCBibG9ja0RhdGEsIHBUaW1lb3V0LCBwUmVhZG1hc2sKKysKKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wgaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4KKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTIHNjcm5JbmRleCwgcFNjcmVlbgorKworKyNkZWZpbmUgQURKVVNUX0ZSQU1FX0FSR1NfREVDTCBpbnQgYXJnLCBpbnQgeCwgaW50IHksIGludCBmbGFncworKworKyNkZWZpbmUgU1dJVENIX01PREVfQVJHU19ERUNMIGludCBhcmcsIERpc3BsYXlNb2RlUHRyIG1vZGUsIGludCBmbGFncworKworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHU19ERUNMIGludCBhcmcsIGludCBmbGFncworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHUyh4KSAoeCktPnNjcm5JbmRleCwgMAorKworKyNkZWZpbmUgVlRfRlVOQ19BUkdTX0RFQ0wgaW50IGFyZywgaW50IGZsYWdzCisrI2RlZmluZSBWVF9GVU5DX0FSR1MoZmxhZ3MpIHBTY3JuLT5zY3JuSW5kZXgsIChmbGFncykKKysKKysjZGVmaW5lIFhGODZfRU5BQkxFRElTQUJMRUZCX0FSRyh4KSAoKHgpLT5zY3JuSW5kZXgpCisrI2Vsc2UKKysjZGVmaW5lIFNDUk5fQVJHX1RZUEUgU2NybkluZm9QdHIKKysjZGVmaW5lIFNDUk5fSU5GT19QVFIoYXJnMSkgU2NybkluZm9QdHIgcFNjcm4gPSAoYXJnMSkKKysKKysjZGVmaW5lIFNDUkVFTl9BUkdfVFlQRSBTY3JlZW5QdHIKKysjZGVmaW5lIFNDUkVFTl9QVFIoYXJnMSkgU2NyZWVuUHRyIHBTY3JlZW4gPSAoYXJnMSkKKysKKysjZGVmaW5lIFNDUkVFTl9JTklUX0FSR1NfREVDTCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2CisrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHU19ERUNMIFNjcmVlblB0ciBhcmcsIHBvaW50ZXIgcFRpbWVvdXQsIHBvaW50ZXIgcFJlYWRtYXNrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHUyBhcmcsIHBUaW1lb3V0LCBwUmVhZG1hc2sKKysKKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wgU2NyZWVuUHRyIHBTY3JlZW4KKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTIHBTY3JlZW4KKysKKysjZGVmaW5lIEFESlVTVF9GUkFNRV9BUkdTX0RFQ0wgU2NybkluZm9QdHIgYXJnLCBpbnQgeCwgaW50IHkKKysjZGVmaW5lIFNXSVRDSF9NT0RFX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcsIERpc3BsYXlNb2RlUHRyIG1vZGUKKysKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1MoeCkgKHgpCisrCisrI2RlZmluZSBWVF9GVU5DX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcKKysjZGVmaW5lIFZUX0ZVTkNfQVJHUyhmbGFncykgcFNjcm4KKysKKysjZGVmaW5lIFhGODZfRU5BQkxFRElTQUJMRUZCX0FSRyh4KSAoeCkKKysKKysjZW5kaWYKKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggMDc5ODlmNS4uNDg2ZmZhNCAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC00NCw2ICs0NCw4IEBACisgCisgI2luY2x1ZGUgImV4YS5oIgorIAorKyNpbmNsdWRlICJjb21wYXQtYXBpLmgiCisrCisgI2lmZGVmIEhBVkVfWEVYVFBST1RPXzcxCisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL2RwbXNjb25zdC5oPgorICNlbHNlCitAQCAtNzAsMTAgKzcyLDEwIEBACisgCisgc3RhdGljIEJvb2wgT01BUEZCUHJvYmUoRHJpdmVyUHRyIGRydiwgaW50IGZsYWdzKTsKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpOworLXN0YXRpYyBCb29sIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndik7Cistc3RhdGljIEJvb2wgT01BUEZCRW50ZXJWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpOworLXN0YXRpYyB2b2lkIE9NQVBGQkxlYXZlVlQoaW50IHNjcm5JbmRleCwgaW50IGZsYWdzKTsKKy1zdGF0aWMgQm9vbCBPTUFQRkJTd2l0Y2hNb2RlKGludCBzY3JuSW5kZXgsIERpc3BsYXlNb2RlUHRyIG1vZGUsIGludCBmbGFncyk7Cisrc3RhdGljIEJvb2wgT01BUEZCU2NyZWVuSW5pdChTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wpOworK3N0YXRpYyBCb29sIE9NQVBGQkVudGVyVlQoVlRfRlVOQ19BUkdTX0RFQ0wpOworK3N0YXRpYyB2b2lkIE9NQVBGQkxlYXZlVlQoVlRfRlVOQ19BUkdTX0RFQ0wpOworK3N0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoU1dJVENIX01PREVfQVJHU19ERUNMKTsKKyAKKyBzdGF0aWMgQm9vbAorIE9NQVBGQkVuc3VyZVJlYyhTY3JuSW5mb1B0ciBwU2NybikKK0BAIC00ODEsNyArNDgzLDcgQEAgT01BUEZCWHZTY3JlZW5Jbml0KFNjcmVlblB0ciBwU2NyZWVuKQorIH0KKyAKKyBzdGF0aWMgQm9vbAorLU9NQVBGQkNsb3NlU2NyZWVuKGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuKQorK09NQVBGQkNsb3NlU2NyZWVuKENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wpCisgeworIAlTY3JuSW5mb1B0ciBwU2NybiA9IHhmODZTY3JlZW5zW3BTY3JlZW4tPm15TnVtXTsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CitAQCAtNDkwLDExICs0OTIsMTEgQEAgT01BUEZCQ2xvc2VTY3JlZW4oaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4pCisgCisgCXBTY3JlZW4tPkNsb3NlU2NyZWVuID0gb2ZiLT5DbG9zZVNjcmVlbjsKKyAJCistCXJldHVybiAoKnBTY3JlZW4tPkNsb3NlU2NyZWVuKShzY3JuSW5kZXgsIHBTY3JlZW4pOworKwlyZXR1cm4gKCpwU2NyZWVuLT5DbG9zZVNjcmVlbikoQ0xPU0VfU0NSRUVOX0FSR1MpOworIH0KKyAKKyBzdGF0aWMgQm9vbAorLU9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKytPTUFQRkJTY3JlZW5Jbml0KFNDUkVFTl9JTklUX0FSR1NfREVDTCkKKyB7CisgCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbcFNjcmVlbi0+bXlOdW1dOworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKK0BAIC01MTYsNyArNTE4LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+ZmQsIDApOworIAlpZiAob2ZiLT5mYiA9PSBNQVBfRkFJTEVEKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTUyNiw3ICs1MjgsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCS8qIE9ubHkgc3VwcG9ydCBUcnVlQ29sb3IgZm9yIG5vdyAqLworIAlpZiAoIW1pU2V0VmlzdWFsVHlwZXMocFNjcm4tPmRlcHRoLCBUcnVlQ29sb3JNYXNrLAorIAkJcFNjcm4tPnJnYkJpdHMsIHBTY3JuLT5kZWZhdWx0VmlzdWFsKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJ2aXN1YWwgdHlwZSBzZXR1cCBmYWlsZWQiCisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJ2aXN1YWwgdHlwZSBzZXR1cCBmYWlsZWQiCisgCQkgICAgICAgICAgICIgZm9yICVkIGJpdHMgcGVyIHBpeGVsIFsxXVxuIiwKKyAJCSAgICAgICAgICAgcFNjcm4tPmJpdHNQZXJQaXhlbCk7CisgCQlyZXR1cm4gRkFMU0U7CitAQCAtNTM0LDcgKzUzNiw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJLyogU2V0IHVwIHBpeG1hcCBkZXB0aCBpbmZvcm1hdGlvbiAqLworIAlpZiAoIW1pU2V0UGl4bWFwRGVwdGhzKCkpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LFhfRVJST1IsInBpeG1hcCBkZXB0aCBzZXR1cCBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LFhfRVJST1IsInBpeG1hcCBkZXB0aCBzZXR1cCBmYWlsZWRcbiIpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTQ2LDcgKzU0OCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPnZpcnR1YWxZLCBwU2Nybi0+eERwaSwKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPnlEcGksIHBTY3JuLT5kaXNwbGF5V2lkdGgsCisgCSAgICAgICAgICAgICAgICAgIHBTY3JuLT5iaXRzUGVyUGl4ZWwpKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgImZiU2NyZWVuSW5pdCBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiZmJTY3JlZW5Jbml0IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAKK0BAIC01NjcsNyArNTY5LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkvKiBJbml0aWFsaXplIFhSZW5kZXIgZmFsbGJhY2tzICovCisgCWlmICghZmJQaWN0dXJlSW5pdChwU2NyZWVuLCBOVUxMLCAwKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJmYlBpY3R1cmVJbml0IGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJmYlBpY3R1cmVJbml0IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAJCitAQCAtNTc5LDcgKzU4MSw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJLyogSW5pdGlhbGl6ZSBkZWZhdWx0IGNvbG9ybWFwICovCisgCWlmICghbWlDcmVhdGVEZWZDb2xvcm1hcChwU2NyZWVuKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgCQkgICAgICAgICAgICJjcmVhdGluZyBkZWZhdWx0IGNvbG9ybWFwIGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KK0BAIC01ODksNyArNTkxLDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJLyogVGhpcyBpcyBub24tZmF0YWwgc2luY2Ugd2UgbWlnaHQgYmUgcnVubmluZyBhZ2FpbnN0IG9sZGVyCisgCQkgKiBrZXJuZWwgZHJpdmVyIGluIHdoaWNoIGNhc2Ugd2Ugb25seSBkbyBiYXNpYyAyRCBzdHVmZi4uLgorIAkJICovCistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIlJlYWRpbmcgcGxhbmUgaW5mbyBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiUmVhZGluZyBwbGFuZSBpbmZvIGZhaWxlZFxuIik7CisgCX0gZWxzZSBpZiAoIW9mYi0+ZHNzKSB7CisgCisgCQlvZmItPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CitAQCAtNjAyLDcgKzYwNCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCX0KKyAKKyAJCWlmIChpb2N0bCAob2ZiLT5mZCwgT01BUEZCX1NFVFVQX1BMQU5FLCAmb2ZiLT5wbGFuZV9pbmZvKSkgeworLQkJCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLAorKwkJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCQkgICAgICAgICAgICAiJXM6IFBsYW5lIHNldHVwIGZhaWxlZDogJXNcbiIsCisgCQkJICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcihlcnJubykpOworIAkJCXJldHVybiBGQUxTRTsKK0BAIC02NDUsOSArNjQ3LDEwIEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorLXN0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoaW50IHNjcm5JbmRleCwgRGlzcGxheU1vZGVQdHIgbW9kZSwgaW50IGZsYWdzKQorK3N0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoU1dJVENIX01PREVfQVJHU19ERUNMKQorIHsKKy0JcmV0dXJuIHhmODZTZXRTaW5nbGVNb2RlICh4Zjg2U2NyZWVuc1tzY3JuSW5kZXhdLCBtb2RlLCBSUl9Sb3RhdGVfMCk7CisrCVNDUk5fSU5GT19QVFIoYXJnKTsKKysJcmV0dXJuIHhmODZTZXRTaW5nbGVNb2RlIChwU2NybiwgbW9kZSwgUlJfUm90YXRlXzApOworIH0KKyAKKyB2b2lkCitAQCAtNjk5LDE0ICs3MDIsMTQgQEAgT01BUEZCUHJpbnRDYXBhYmlsaXRpZXMoU2NybkluZm9QdHIgcFNjcm4sCisgLyoqKiBVbmltcGxlbWVudGVkOiAqLworIAorIHN0YXRpYyBCb29sCistT01BUEZCRW50ZXJWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpCisrT01BUEZCRW50ZXJWVChWVF9GVU5DX0FSR1NfREVDTCkKKyB7CisgCXhmODZNc2coWF9OT1RfSU1QTEVNRU5URUQsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorIHN0YXRpYyB2b2lkCistT01BUEZCTGVhdmVWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpCisrT01BUEZCTGVhdmVWVChWVF9GVU5DX0FSR1NfREVDTCkKKyB7CisgCXhmODZNc2coWF9OT1RfSU1QTEVNRU5URUQsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKyB9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBiOWIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNy1hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0ZpeCBlcnJvcnMgd2l0aCBnbGliYyAyLjIwCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTMsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9taXNjLmg6MTE1LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4NnN0ci5oOjM3LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4Ni5oOjQ0LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy93b3JrL2k1ODYtb2UtbGludXgveGY4Ni12aWRlby1vbWFwZmIvMl8wLjEuMStnaXRyQVVUT0lOQysyOGMwMDZjOTRlLXIyMS43L2dpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmM6MzM6CisvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTc5OjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ19fZXh0ZW5zaW9uX18nCisgc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBuKTsKKyBeCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvc3RyaW5nLmg6NjM0OjAsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjUzLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvbWlzYy5oOjExNSwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODZzdHIuaDozNywKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODYuaDo0NCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvd29yay9pNTg2LW9lLWxpbnV4L3hmODYtdmlkZW8tb21hcGZiLzJfMC4xLjErZ2l0ckFVVE9JTkMrMjhjMDA2Yzk0ZS1yMjEuNy9naXQvc3JjL29tYXBmYi14di1nZW5lcmljLmM6Mjg6CisvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTc5OjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ19fZXh0ZW5zaW9uX18nCisgc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBuKTsKKyBeCisKK1NpbmdlZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMJMjAxNC0wOC0yOCAwNToxNjoyNS42ODQwNzA1ODcgLTA3MDAKKysrKyBnaXQvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCTIwMTQtMDgtMjggMTk6MDU6MzkuNDQwMDcwNTg3IC0wNzAwCitAQCAtMzAsNiArMzAsNyBAQAorICAqICAtCisgICovCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgInhmODYuaCIKKyAjaW5jbHVkZSAieGY4Nl9PU2xpYi5oIgorICNpbmNsdWRlICJ4Zjg2eHYuaCIKK0luZGV4OiBnaXQvc3JjL29tYXBmYi14di1nZW5lcmljLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYwkyMDE0LTA4LTI4IDA1OjE2OjI1LjY4NDA3MDU4NyAtMDcwMAorKysrIGdpdC9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYwkyMDE0LTA4LTI4IDE5OjA1OjUxLjc4MDA3MDU4NyAtMDcwMAorQEAgLTI1LDYgKzI1LDcgQEAKKyAgKiBHZW5lcmljIGZ1bmN0aW9ucyBmb3IgdGhlIFhWIGRyaXZlcgorICAqLworIAorKyNpbmNsdWRlIDx4b3JnLXNlcnZlci5oPgorICNpbmNsdWRlICJ4Zjg2LmgiCisgI2luY2x1ZGUgInhmODZfT1NsaWIuaCIKKyAjaW5jbHVkZSAieGY4Nnh2LmgiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlYjg3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiX2dpdC5iYgpAQCAtMCwwICsxLDM1IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFRleGFzIEluc3RydW1lbnRzIE9NQVAgZnJhbWVidWZmZXIgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJvbWFwZmIgZHJpdmVyIHN1cHBvcnRzIHRoZSBiYXNpYyBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIFwKK2ZyYW1lYnVmZmVyLiIKKworTElDRU5TRSA9ICJNSVQtWCAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTYzZTJjYmFjNTM4NjNmNjBlMmY0MzM0M2ZiMzQzNjdmIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEiCisKK1NSQ1JFViA9ICIzM2UzNmMxMmRkZTMzNmVkYmRkMzQ2MjZkZDhhZGZjYWViYzhmYmI4IgorUFIgPSAiJHtJTkNfUFJ9LjciCitQViA9ICIwLjEuMStnaXRyJHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC94Zjg2LXZpZGVvLW9tYXBmYi5naXQgXAorICBmaWxlOi8vMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoIFwKKyAgZmlsZTovLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaCBcCisgIGZpbGU6Ly8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2ggXAorICBmaWxlOi8vMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoIFwKKyAgZmlsZTovLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaCBcCisgIGZpbGU6Ly8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2ggXAorICBmaWxlOi8vMDAwNi1vbWFwZmItcG9ydC10by1uZXcteHNlcnZlci12aWRlby1BUEkucGF0Y2ggXAorICBmaWxlOi8vMDAwNy1hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GX2FybXY3YSA9ICIgLS1lbmFibGUtbmVvbiAiCitDRkxBR1MgKz0gIiAtSSR7U1RBR0lOR19JTkNESVJ9L3hvcmcgIgorCisjIFVzZSBvdmVybGF5IDIgb24gb21hcDMgdG8gZW5hYmxlIG90aGVyIGFwcHMgdG8gdXNlIG92ZXJsYXkgMSAoZS5nLiBkbWFpIG9yIG9tYXBmYnBsYXkpCitkb19jb21waWxlX3ByZXBlbmRfYXJtdjdhICgpIHsKKyAgICAgICAgc2VkIC1pIC1lIHM6ZmIxOmZiMjpnICR7U30vc3JjL29tYXBmYi14di5jCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZlc2FfMi4zLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZlc2FfMi4zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyNTFiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdmVzYV8yLjMuNC5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMWYwNjEwZWJkYzZmMzE0YTlmYTUxMDJhOGM1YzFiMCIKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBHZW5lcmljIFZlc2EgdmlkZW8gZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJ2ZXNhIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBnZW5lcmljIFZFU0EgdmlkZW8gY2FyZHMuIEl0IFwKK2NhbiBkcml2ZSBtb3N0IFZFU0EtY29tcGF0aWJsZSB2aWRlbyBjYXJkcywgYnV0IG9ubHkgbWFrZXMgdXNlIG9mIHRoZSBcCitiYXNpYyBzdGFuZGFyZCBWRVNBIGNvcmUgdGhhdCBpcyBjb21tb24gdG8gdGhlc2UgY2FyZHMuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgZGVwdGhzIDgsIDE1IDE2IGFuZCAyNC4iCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByYW5kcnByb3RvIGxpYnBjaWFjY2VzcyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gInhzZXJ2ZXIteG9yZy1tb2R1bGUtbGliaW50MTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhODkzYzM3YzU4OWY3YTMxY2VhOTI5YTVkODk2YTBlMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YmRkZjRkODc5ZGQ2ZjY3MDg4ZWNiMjAzYTMxZTEyMzM0YWFiOTgwMTc0YmQwOTA5OTMwYTIxZjMyZTI1MWMxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZS8wMDAyLWFkZC1vcHRpb24tZm9yLXZtd2dmeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDM5ZDA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorVXBzdHJlYW0tU3RhdHVzOlN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBmMTAzZDZmNTcwNjcxYzY0OWNjZDdiMjI1ZTZkNmM5ZjE0MzcxODg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjUgSnVuIDIwMTQgMTY6MTY6NDQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGFkZCBvcHRpb24gZm9yIHZtd2dmeAorCistLS0KKyBjb25maWd1cmUuYWMgfCAgIDQ5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJlNDBlZDcuLjhlMTUzMDcgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY0LDYgKzY0LDEzIEBAIEFDX0FSR19FTkFCTEUodm13YXJlY3RybC1jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVk1XQVJFQ1RSTD0kZW5hYmxldmFsXSwgW1ZNV0FSRUNUUkw9bm9dKQorIEFNX0NPTkRJVElPTkFMKEJVSUxEX1ZNV0FSRUNUUkwsIFt0ZXN0ICJ4JFZNV0FSRUNUUkwiID0geHllc10pCisgCisrIyBEZWZpbmUgYSBjb25maWd1cmUgb3B0aW9uIHRvIGJ1aWxkIHRoZSB2bXdnZnggZHJpdmVyCisrQUNfQVJHX0VOQUJMRSh2bXdnZngsCisrICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXZtd2dmeF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSB2bXdnZnggZHJpdmVyIChLTVMvM0QpIChkZWZhdWx0OiBlbmFibGVkKV0pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZNV0dGWD0iJGVuYWJsZXZhbCJdLCBbVk1XR0ZYPSJ5ZXMiXSkKKytBTV9DT05ESVRJT05BTChCVUlMRF9WTVdHRlgsIHRlc3QgIngkVk1XR0ZYIiA9IHh5ZXMpCisrCisgIyBTdG9yZSB0aGUgbGlzdCBvZiBzZXJ2ZXIgZGVmaW5lZCBvcHRpb25hbCBleHRlbnNpb25zIGluIFJFUVVJUkVEX01PRFVMRVMKKyBYT1JHX0RSSVZFUl9DSEVDS19FWFQoUkFORFIsIHJhbmRycHJvdG8pCisgWE9SR19EUklWRVJfQ0hFQ0tfRVhUKFJFTkRFUiwgcmVuZGVycHJvdG8pCitAQCAtODUsMTEgKzkyLDYgQEAgUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS40Ljk5XSwKKyAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWE9SR19TRVJWRVJfMV81XzBdLCAxLAorICAgICAgICAgICAgICAgICAgW0hhcyB2ZXJzaW9uIDEuNS4wIG9yIGdyZWF0ZXIgb2YgdGhlIFhzZXJ2ZXJdKV0pCisgCistUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS43LjBdLAorLSAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YT1JHX1NFUlZFUl8xXzdfMF0sIDEsCistICAgICAgICAgICAgICAgICBbSGFzIHZlcnNpb24gMS43LjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pCistCQkgQlVJTERfVk1XR0ZYPXllc10sW0JVSUxEX1ZNV0dGWD1ub10pCistCisgUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS4xMi4wXSwKKyAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWE9SR19TRVJWRVJfMV8xMl8wXSwgMSwKKyAgICAgICAgICAgICAgICAgIFtIYXMgdmVyc2lvbiAxLjEyLjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pXSkKK0BAIC0xMTQsMzkgKzExNiwyOCBAQCBBTV9DT05ESVRJT05BTChYU0VSVkVSX0xJQlBDSUFDQ0VTUywgdGVzdCAieCRYU0VSVkVSX0xJQlBDSUFDQ0VTUyIgPSB4eWVzKQorIAorIEFDX1NVQlNUKFttb2R1bGVkaXJdKQorIAorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistCVBLR19DSEVDS19NT0RVTEVTKFtMSUJEUk1dLCBbbGliZHJtXSxbXSxbQlVJTERfVk1XR0ZYPW5vXSkKKy1maQorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistIworLSMgRWFybHkgdmVyc2lvbnMgb2YgbWVzYSAxMCBmb3Jnb3QgdG8gYnVtcCB0aGUgWEEgbWFqb3IgdmVyc2lvbiBudW1iZXIgaW4KKy0jIHRoZSB4YV90cmFja2VyLmggaGVhZGVyCistIworLQlQS0dfQ0hFQ0tfTU9EVUxFUyhbWEFUUkFDS0VSXSwgW3hhdHJhY2tlciA+PSAwLjQuMF0sCistCQkJICBbUEtHX0NIRUNLX0VYSVNUUyhbeGF0cmFja2VyID0gMi4wLjBdLAorLQkgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hBXzJdLCAxLAorLSAgICAgICAgICAgICAgIAkJICBbSGFzIHZlcnNpb24gMiBvZiBYQV0pXSldLAorLQkJCSAgW0JVSUxEX1ZNV0dGWD1ub10pCistIworLSMgQ2hlY2sgZm9yIHByaW1lLgorLSMKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgS2VybmVsIE1vZGUgU2V0dGluZyBhbmQgM0RdKQorK2lmIHRlc3QgeCRWTVdHRlggPSB4eWVzOyB0aGVuCisrCVBLR19DSEVDS19NT0RVTEVTKFtMSUJEUk1dLCBbbGliZHJtXSkKKysJIyBDaGVjayBmb3IgcHJpbWUuCisgCVBLR19DSEVDS19FWElTVFMoW2xpYmRybSA+PSAyLjQuMzhdLAorIAkJCSBbQUNfREVGSU5FKFtIQVZFX0xJQkRSTV8yXzRfMzhdLCAxLAorIAkJCSBbSGFzIHZlcnNpb24gMi40LjM4IG9yIGdyZWF0ZXIgb2YgbGliZHJtXSldKQorLWZpCisgCistRFJJVkVSX05BTUU9dm13YXJlCistQUNfU1VCU1QoW0RSSVZFUl9OQU1FXSkKKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgS2VybmVsIE1vZGUgU2V0dGluZyBhbmQgM0RdKQorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistCUFDX01TR19SRVNVTFQoW3llc10pCisrCSMgRWFybHkgdmVyc2lvbnMgb2YgbWVzYSAxMCBmb3Jnb3QgdG8gYnVtcCB0aGUgWEEgbWFqb3IgdmVyc2lvbiBudW1iZXIKKysJIyBpbiB0aGUgeGFfdHJhY2tlci5oIGhlYWRlcgorKwlQS0dfQ0hFQ0tfTU9EVUxFUyhbWEFUUkFDS0VSXSwgW3hhdHJhY2tlciA+PSAwLjQuMF0sCisrCQkJICBbUEtHX0NIRUNLX0VYSVNUUyhbeGF0cmFja2VyID0gMi4wLjBdLAorKwkgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hBXzJdLCAxLAorKyAgICAgICAgICAgICAgIAkJICBbSGFzIHZlcnNpb24gMiBvZiBYQV0pXSldKQorICAgICAgICAgQUNfREVGSU5FKFtCVUlMRF9WTVdHRlhdLCAxLCBbQnVpbGRpbmcgdGhlIHZtd2dmeCBkcml2ZXIgcGF0aF0pCisrCUFDX01TR19SRVNVTFQoW3llc10pCisgZWxzZQorIAlBQ19NU0dfUkVTVUxUKFtub10pCisgZmkKKyAKKy1BTV9DT05ESVRJT05BTChCVUlMRF9WTVdHRlgsIHRlc3QgIngkQlVJTERfVk1XR0ZYIiA9IHh5ZXMpCisrRFJJVkVSX05BTUU9dm13YXJlCisrQUNfU1VCU1QoW0RSSVZFUl9OQU1FXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoWworICAgICAgICAgICAgICAgICBNYWtlZmlsZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZV8xMy4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZV8xMy4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliOThlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlXzEzLjEuMC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFZNd2FyZSBTVkdBIGRpc3BsYXkgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJ2bXdhcmUgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIFZNd2FyZSB2aXJ0dWFsIHZpZGVvIGNhcmRzLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWZjZDdkNDM3YTk1OWExNWZiZWU4NzA3NzQ3YzZiNTMiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHhpbmVyYW1hcHJvdG8gdmlkZW9wcm90byBsaWJwY2lhY2Nlc3MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLWFkZC1vcHRpb24tZm9yLXZtd2dmeC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjBjYmEyMmZlZDRjYjYzOWQ1YzQyNzZmNzg5MmM1NDNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMWQyNDRlNGIxYjc3ZTkyMTI2OTU3OTY1Y2RjOWZiODJkZTRjMjE1YzA3MDZhM2E4YWFmZjY5MzllNGEwY2MiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Ni4qLWxpbnV4fHg4Nl82NC4qLWxpbnV4KScKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtdm13Z2Z4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkZDFjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWNvbW1vbi5pbmMKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJYIGRyaXZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9kcml2ZXJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworUEUgPSAiMiIKK0lOQ19QUiA9ICJyMjEiCisKK0RFUEVORFMgPSAidmlydHVhbC94c2VydmVyIHhwcm90byByYW5kcnByb3RvIHV0aWwtbWFjcm9zIgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvZHJpdmVyLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLy5kZWJ1ZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwveHNlcnZlcgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIyBGSVhNRTogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSBsaWJ0b29sIGFyY2hpdmVzICgqLmxhKSBmcm9tIG1vZHVsZXMKKyMgZGlyZWN0b3J5LCBhcyB0aGV5IHNlcnZlIG5vIHVzZWZ1bCBwdXJwb3NlLiBVcHN0cmVhbSBzaG91bGQgZml4IE1ha2VmaWxlLmFtCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmaW5kICR7RH0ke2xpYmRpcn0veG9yZy9tb2R1bGVzIC1yZWdleCAiLipcLmxhJCIgfCB4YXJncyBybSAtZiAtLQorfQorCisjIEZ1bmN0aW9uIHRvIGFkZCB0aGUgcmVsZXZhbnQgQUJJIGRlcGVuZGVuY3kgdG8gZHJpdmVycywgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZAorIyBmcm9tIGEgUEFDS0FHRUZVTkMuCitkZWYgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsIG5hbWUpOgorICAgICMgTWFwIG9mIEFCSSBuYW1lcyBleHBvc2VkIGluIHRoZSBkZXBlbmRlbmNpZXMgdG8gcGtnLWNvbmZpZyB2YXJpYWJsZXMKKyAgICBhYmlzID0geworICAgICAgInZpZGVvIjogImFiaV92aWRlb2RydiIsCisgICAgICAiaW5wdXQiOiAiYWJpX3hpbnB1dCIKKyAgICB9CisKKyAgICBvdXRwdXQgPSBvcy5wb3BlbigicGtnLWNvbmZpZyB4b3JnLXNlcnZlciAtLXZhcmlhYmxlPSVzIiAlIGFiaXNbbmFtZV0pLnJlYWQoKQorICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICBhYmkgPSAiJXN4b3JnLWFiaS0lcy0lcyIgJSAobWxwcmVmaXgsIG5hbWUsIG91dHB1dC5zcGxpdCgiLiIpWzBdKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcG4sICcgJyArIGFiaSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWlucHV0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWlucHV0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmVjMDY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItaW5wdXQuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUgeG9yZy1kcml2ZXItY29tbW9uLmluYworCitERVBFTkRTICs9ICJpbnB1dHByb3RvIGticHJvdG8gIgorCitweXRob24gYWRkX3hvcmdfYWJpX2RlcGVuZHMoKSB7CisgICAgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsICJpbnB1dCIpCit9CitQQUNLQUdFRlVOQ1MgPSsgImFkZF94b3JnX2FiaV9kZXBlbmRzIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvaW5wdXQvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvaW5wdXQvLmRlYnVnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItdmlkZW8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItdmlkZW8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjgxZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci12aWRlby5pbmMKQEAgLTAsMCArMSw4IEBACitpbmNsdWRlIHhvcmctZHJpdmVyLWNvbW1vbi5pbmMKKworREVQRU5EUyA9KyAicmVuZGVycHJvdG8gdmlkZW9wcm90byB4ZXh0cHJvdG8gZm9udHNwcm90byIKKworcHl0aG9uIGFkZF94b3JnX2FiaV9kZXBlbmRzKCkgeworICAgIF9hZGRfeG9yZ19hYmlfZGVwZW5kcyhkLCAidmlkZW8iKQorfQorUEFDS0FHRUZVTkNTID0rICJhZGRfeG9yZ19hYmlfZGVwZW5kcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3Mvbm9jb21waWxlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3Mvbm9jb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzMwYzE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5ncy9ub2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworWE9SR19ERUZBVUxUX09QVElPTlMgcHVsbHMgaW4gdGhlIGZvbGxvd2luZyBkZXBlbmRlbmN5IGNoYWluczoKKworWE9SR19DV0FSTkZMQUdTIC0+IEFDX1BST0dfQ0NfQzk5CitYT1JHX1NUUklDVF9PUFRJT04gLT4gQUNfUFJPR19DQ19DOTksIFhPUkdfQ1dBUk5GTEFHUworWE9SR19NQU5QQUdFX1NFQ1RJT05TIC0+IEFDX0NBTk9OSUNBTF9IT1NUIC0+IENoZWNrcyBob3N0IAorCitlYWNoIG9mIHdoaWNoIHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIGhvc3QgY29tcGlsZXIuIEFzIGFuICJhbGwiCithcmNoaXRlY3R1cmUgcGFja2FnZSwgaXQgc2hvdWxkbid0IG5lZWQgYSBjb21waWxlciAoYW5kIGRvZXNuJ3QpLgorCitSUCAxNy81LzIwMTEKKworSW5kZXg6IGVuY29kaW5ncy0xLjAuNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbmNvZGluZ3MtMS4wLjQub3JpZy9jb25maWd1cmUuYWMJMjAxMS0wNS0xNyAyMzozNjoxOS41MDUwOTU4NzYgKzAxMDAKKysrKyBlbmNvZGluZ3MtMS4wLjQvY29uZmlndXJlLmFjCTIwMTEtMDUtMTcgMjM6NTQ6MTQuOTM1MDk2MTI4ICswMTAwCitAQCAtNCwxMiArNCwxMiBAQAorIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCistIyBSZXF1aXJlIHhvcmctbWFjcm9zOiBYT1JHX0RFRkFVTFRfT1BUSU9OUworIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgCSAgW200X2ZhdGFsKFttdXN0IGluc3RhbGwgeG9yZy1tYWNyb3MgMS4zIG9yIGxhdGVyIGJlZm9yZSBydW5uaW5nIGF1dG9jb25mL2F1dG9nZW5dKV0pCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjMpCistWE9SR19ERUZBVUxUX09QVElPTlMKKy0KKytYT1JHX1JFTEVBU0VfVkVSU0lPTgorK1hPUkdfQ0hBTkdFTE9HCisrWE9SR19JTlNUQUxMCisgQUNfUFJPR19JTlNUQUxMCisgCisgIyBSZXF1aXJlIFguT3JnJ3MgZm9udCB1dGlsIG1hY3JvcyAxLjIgb3IgbGF0ZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwODQ2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiVGhlIFhvcmcgZm9udCBlbmNvZGluZyBmaWxlcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIGVuY29kaW5ncyB0aGF0IG1hcCB0byBzcGVjaWZpYyBjaGFyYWN0ZXJzIGZvciBhIFwKK251bWJlciBvZiBYb3JnIGFuZCBjb21tb24gZm9udHMuIgorCityZXF1aXJlIHhvcmctZm9udC1jb21tb24uaW5jCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWRhOTNmMmRhZjJkNTU3MmZhYTJiZmFmMGRiZDllNzYiCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjEiCisKK0RFUEVORFMgPSAibWtmb250c2NhbGUtbmF0aXZlIGZvbnQtdXRpbC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbXBpbGVyLnBhdGNoIgorCitpbmhlcml0IGFsbGFyY2gKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtZW5jb2RpbmdzZGlyPSR7ZGF0YWRpcn0vZm9udHMvWDExL2VuY29kaW5ncyIKKworU1JDX1VSSVttZDVzdW1dID0gIjBmMmQ2NTQ2ZDUxNGM1Y2M0ZWNmNzhhNjA2NTdhNWMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlZDYzMTI5ODhhNDVkMjM4MTJjMmFjNzA4YjQ1OTVmNjNmZDdhNDljNGRjZDlmNjZiZGNkNTBkMTA1N2Q1MzkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhcy0xLjAuMy9ub2NvbXBpbGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXMtMS4wLjMvbm9jb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjlmYjhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXMtMS4wLjMvbm9jb21waWxlci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1hPUkdfREVGQVVMVF9PUFRJT05TIHB1bGxzIGluIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jeSBjaGFpbnM6CisKK1hPUkdfQ1dBUk5GTEFHUyAtPiBBQ19QUk9HX0NDX0M5OQorWE9SR19TVFJJQ1RfT1BUSU9OIC0+IEFDX1BST0dfQ0NfQzk5LCBYT1JHX0NXQVJORkxBR1MKK1hPUkdfTUFOUEFHRV9TRUNUSU9OUyAtPiBBQ19DQU5PTklDQUxfSE9TVCAtPiBDaGVja3MgaG9zdCAKKworZWFjaCBvZiB3aGljaCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSBob3N0IGNvbXBpbGVyLiBBcyBhbiAiYWxsIgorYXJjaGl0ZWN0dXJlIHBhY2thZ2UsIGl0IHNob3VsZG4ndCBuZWVkIGEgY29tcGlsZXIgKGFuZCBkb2Vzbid0KS4KKworUlAgMTcvNS8yMDExCisKK2RpZmYgLXVOciBmb250LWFsaWFzLTEuMC4zLm9yaWcvL2NvbmZpZ3VyZS5hYyBmb250LWFsaWFzLTEuMC4zL2NvbmZpZ3VyZS5hYworLS0tIGZvbnQtYWxpYXMtMS4wLjMub3JpZy8vY29uZmlndXJlLmFjCTIwMTEtMDUtMTggMjE6Mjk6MTguMzc4MjU4NjQzICswMjAwCisrKysgZm9udC1hbGlhcy0xLjAuMy9jb25maWd1cmUuYWMJMjAxMS0wNS0xOCAyMTozMjowNi44NjUyNTg1OTMgKzAyMDAKK0BAIC0yOCwxMiArMjgsMTIgQEAKKyBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorLSMgUmVxdWlyZSB4b3JnLW1hY3JvczogWE9SR19ERUZBVUxUX09QVElPTlMKKyBtNF9pZm5kZWYoW1hPUkdfTUFDUk9TX1ZFUlNJT05dLAorIAkgIFttNF9mYXRhbChbbXVzdCBpbnN0YWxsIHhvcmctbWFjcm9zIDEuMyBvciBsYXRlciBiZWZvcmUgcnVubmluZyBhdXRvY29uZi9hdXRvZ2VuXSldKQorIFhPUkdfTUFDUk9TX1ZFUlNJT04oMS4zKQorLVhPUkdfREVGQVVMVF9PUFRJT05TCistCisrWE9SR19SRUxFQVNFX1ZFUlNJT04KKytYT1JHX0NIQU5HRUxPRworK1hPUkdfSU5TVEFMTAorIEFDX1BST0dfSU5TVEFMTAorIAorIFhPUkdfRk9OVFJPT1RESVIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXNfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlMTAxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWCBmb250IGFsaWFzZXMiCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iZjAxNThiODliZTQ5M2Q1MjNkNjlkOWYyOTI2NTAzOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jeXJpbGxpYy9mb250cy5hbGlhczttZDU9ZjQwNzk1YjA2NDBkNjc4NTgyNmFlY2QzYjE2ZjYxMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vNzVkcGkvZm9udHMuYWxpYXM7bWQ1PTZiYzQ4MDIzZjJhZTdmM2JmYzEwNWRiN2IwZWU2YjQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21pc2MvZm9udHMuYWxpYXM7bWQ1PWE4ZWMwNWQ1Mjg0MzFkNGM5NzAzYjU1YTdlZmQ2N2E4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLzEwMGRwaS9mb250cy5hbGlhczttZDU9ODViZWJkNmNhMjEzYWE2NTZjMzAxYTcyZWI0Mzk3Y2IiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbXBpbGVyLnBhdGNoIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSBmb250LXV0aWwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZW5jb2RpbmdzIGZvbnQtdXRpbCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJmb250LXV0aWwtbmF0aXZlIgorCitpbmhlcml0IGFsbGFyY2gKKworUEUgPSAiMSIKK1BSID0gIiR7SU5DX1BSfS4zIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmQyNWY2NDc5NmZlZjM0YjUzYjQzOWMyZTllZmE1NjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGI0NTNiMmFhZTFjZmE4MDkwMDA5Y2EwMzcwMzdiOGM1ZTMzMzU1MDY1MWQ1YTE1OGI3MjY0Y2UxZDQ3MmM5YSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODUxMjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiWC5PcmcgZm9udCBwYWNrYWdlIGNyZWF0aW9uL2luc3RhbGxhdGlvbiB1dGlsaXRpZXMiCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKKworI1VuaWNvZGUgaXMgTUlUCitMSUNFTlNFID0gIkJTRCAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVkZjIwOGVjNjVlYjg0Y2U1YmI4ZDgyZDhmM2I5Njc1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VjczJhbnkuYztlbmRsaW5lPTI4O21kNT04MzU3ZGM1NjdmYzYyOGJkMTI2OTZmMTViMmEzM2JjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9iZGZ0cnVuY2F0ZS5jO2VuZGxpbmU9MjY7bWQ1PTRmODJmZmMxMDFhMWIxNjVlYWU5YzY5OThhYmZmOTM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hcC1JU084ODU5LTE7YmVnaW5saW5lPTk7ZW5kbGluZT0yMzttZDU9MWNlY2I5ODQwNjMyNDhmMjlmZmU1YzQ2ZjVjMDRmMzQiCisKK0RFUEVORFMgPSAiZW5jb2RpbmdzIHV0aWwtbWFjcm9zIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAidXRpbC1tYWNyb3MtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAibWtmb250ZGlyIG1rZm9udHNjYWxlIGVuY29kaW5ncyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJta2ZvbnRkaXItbmF0aXZlIG1rZm9udHNjYWxlLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMzc1NmRhYjgwOWY5ZWM1MDExYmIyN2ZiMmMzYzdkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYTdlYmRiMDcxNTEwNmRkMjU1MDgyZjIzMTBkYmFhMmNkN2UyMjU5NTdjMmE3N2Q3MTk3MjBjN2NjOTJiOTIxIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImZvbnR1dGlsX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK2ZvbnR1dGlsX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7ZGF0YWRpcn0vZm9udHMvICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZm9udHMvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyNjdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLWZvbnQtY29tbW9uLmluYwpAQCAtMCwwICsxLDQyIEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK0RFUEVORFMgPSAiIGVuY29kaW5ncyBmb250LWFsaWFzIGZvbnQtdXRpbC1uYXRpdmUgbWtmb250ZGlyLW5hdGl2ZSBta2ZvbnRzY2FsZS1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJlbmNvZGluZ3MgZm9udC11dGlsIGZvbnQtYWxpYXMiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorSU5DX1BSID0gInIyIgorCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9mb250LyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIG1rZm9udHNjYWxlLW5hdGl2ZSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRU1BS0UgKz0gIkZDQ0FDSEU9L2Jpbi90cnVlIFVUSUxfRElSPSR7U1RBR0lOR19ESVJfVEFSR0VUfVwkXChNQVBGSUxFU19QQVRIXCkiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfS9YMTEvZm9udHMgLXR5cGUgZiAtbmFtZSBmb250cy5kaXIgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7bGliZGlyfS9YMTEvZm9udHMgLXR5cGUgZiAtbmFtZSBmb250cy5zY2FsZSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtkYXRhZGlyfS9mb250cy9YMTEgLXR5cGUgZiAtbmFtZSBmb250cy5kaXIgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZGF0YWRpcn0vZm9udHMvWDExIC10eXBlIGYgLW5hbWUgZm9udHMuc2NhbGUgfCB4YXJncyBybSAtZgkKK30KKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vWDExL2ZvbnRzICR7ZGF0YWRpcn0iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgICAgIGZvciBmb250ZGlyIGluIGBmaW5kICREL3Vzci9saWIvWDExL2ZvbnRzIC10eXBlIGRgOyBkbworICAgICAgICAgICAgICAgIG1rZm9udGRpciAkZm9udGRpcgorICAgICAgICAgICAgICAgIG1rZm9udHNjYWxlICRmb250ZGlyCisgICAgICAgIGRvbmUKKyAgICAgICAgZm9yIGZvbnRkaXIgaW4gYGZpbmQgJEQvdXNyL3NoYXJlL2ZvbnRzL1gxMSAtdHlwZSBkYDsgZG8KKyAgICAgICAgICAgICAgICBta2ZvbnRkaXIgJGZvbnRkaXIKKyAgICAgICAgICAgICAgICBta2ZvbnRzY2FsZSAkZm9udGRpcgorICAgICAgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmNkMWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlhvcmcgbWluaW1hbCBmb250cyBkYXRhIgorREVTQ1JJUFRJT04gPSAiTWluaW1hbCBmb250cyByZXF1aXJlZCBieSBYLm9yZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL21pc2MvZm9udHMuZGlyO21kNT04MmExNDNkOTRkNmE5NzRhYWZlOTcxMzJkMmQ1MTlhYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8uLi9taXNjL2N1cnNvci5wY2YuZ3o7bWQ1PTQwYmM4MTAwMWZlZjRjMjFjYTA4ZGY0MzA1MDE0YTJhIgorCitTUkNfVVJJID0gImZpbGU6Ly9taXNjIgorCitQRSA9ICIxIgorUFIgPSAicjIiCisKK2luaGVyaXQgYWxsYXJjaCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgZm9udC1hbGlhcyByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTID0gIiR7V09SS0RJUn0vbWlzYyIKKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vWDExLyAke2RhdGFkaXJ9L2ZvbnRzL1gxMS8iCitSREVQRU5EU18ke1BOfSArPSAiZm9udC1hbGlhcyIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9mb250cy9YMTEvbWlzYworCWluc3RhbGwgLW0gMDY0NCAke1N9LyogJHtEfS8ke2RhdGFkaXJ9L2ZvbnRzL1gxMS9taXNjLworCWluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vWDExCisJbG4gLXNmICR7ZGF0YWRpcn0vZm9udHMvWDExLyAke0R9LyR7bGliZGlyfS9YMTEvZm9udHMgLXMKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzg1NzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhODI5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxYzVlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyZmExYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxMTliNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmZTg0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2MmM3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmE3NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmFmMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZGRkMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MWEyYWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTg2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTcucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTgucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODlhYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTgucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMmI1MzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTkucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUtPSTgtUi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1LT0k4LVIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZmNiODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1LT0k4LVIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGY2MzU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2M2M1ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEwLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEwLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWE3ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTAucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEzLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEzLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQ4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE0LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE0LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzkxYjhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE1LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE1LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjA0NTA4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE2LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE2LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhiMWYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTYucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxZTZjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyYjc1OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwYTQzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1ZTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiYmQ1MjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS04LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGQzMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0IucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGMzMTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGI1MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiMWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEwLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjODU4MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEzLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5MGYzZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE0LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxMjczZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE1LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3ogYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwMGI0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE2LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNWJiZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzgzNWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNTkzY2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWNmNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTQyM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08ucGNmLmd6IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU0NmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5neiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9jdXJzb3IucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWI3MmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvZm9udHMuZGlyIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTI3MThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpcgpAQCAtMCwwICsxLDQxMCBAQAorNDA5CisxMHgyMC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMQorMTB4MjAtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMAorMTB4MjAtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMQorMTB4MjAtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMworMTB4MjAtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNAorMTB4MjAtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNQorMTB4MjAtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNgorMTB4MjAtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTIKKzEweDIwLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0zCisxMHgyMC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktNAorMTB4MjAtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTUKKzEweDIwLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS03CisxMHgyMC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktOAorMTB4MjAtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTkKKzEweDIwLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAta29pOC1yCisxMHgyMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvMTA2NDYtMQorMTJ4MTNqYS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWphLTEzLTEyMC03NS03NS1jLTEyMC1pc28xMDY0Ni0xCisxMngyNC5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yNC0xNzAtMTAwLTEwMC1jLTEyMC1pc284ODU5LTEKKzEyeDI0cmsucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0xMjAtamlzeDAyMDEuMTk3Ni0wCisxOHgxOGphLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtamEtMTgtMTIwLTEwMC0xMDAtYy0xODAtaXNvMTA2NDYtMQorMTh4MThrby5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWtvLTE4LTEyMC0xMDAtMTAwLWMtMTgwLWlzbzEwNjQ2LTEKKzR4Ni1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMQorNHg2LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTAKKzR4Ni1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTEzCis0eDYtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xNAorNHg2LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTUKKzR4Ni1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTE2Cis0eDYtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTIKKzR4Ni1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMworNHg2LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS00Cis0eDYtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTUKKzR4Ni1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktNworNHg2LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS04Cis0eDYtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTkKKzR4Ni1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWtvaTgtcgorNHg2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc28xMDY0Ni0xCis1eDctSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTEKKzV4Ny1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTEwCis1eDctSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xMworNXg3LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTQKKzV4Ny1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTE1Cis1eDctSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xNgorNXg3LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0yCis1eDctSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTMKKzV4Ny1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktNAorNXg3LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS01Cis1eDctSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTcKKzV4Ny1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktOAorNXg3LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS05Cis1eDctS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1rb2k4LXIKKzV4Ny5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvMTA2NDYtMQorNXg4LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xCis1eDgtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xMAorNXg4LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTMKKzV4OC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTE0Cis1eDgtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xNQorNXg4LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTYKKzV4OC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMgorNXg4LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0zCis1eDgtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTQKKzV4OC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktNQorNXg4LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS03Cis1eDgtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTgKKzV4OC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktOQorNXg4LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAta29pOC1yCis1eDgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzEwNjQ2LTEKKzZ4MTAtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTAtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEwLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxMC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTAtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEwLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTAtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEwLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTAtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDEwLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTAtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWtvaTgtcgorNngxMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEyLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEyLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEyLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxMi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxMi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxMi1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWtvaTgtcgorNngxMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxMy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEzLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTEKKzZ4MTMtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTMtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMy1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWtvaTgtcgorNngxMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxM0ItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxM0ItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTNCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxM0ItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTNCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEzQi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTNCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEzQi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEzTy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxM08tSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxM08tSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxM08tSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxM08tSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxM08tSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEzTy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxM08tSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEzTy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxM08ucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4OS1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMQorNng5LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4OS1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDktSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNng5LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4OS1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDktSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4OS1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMworNng5LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDktSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4OS1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktNworNng5LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDktSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4OS1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWtvaTgtcgorNng5LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis3eDEzLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDEzLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxMy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTMtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxMy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTMtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDEzLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTMtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDEzLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTMtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAta29pOC1yCis3eDEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTNCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDEzQi1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDEzQi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDEzQi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDEzQi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDEzQi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTNCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDEzQi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTNCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS04Cis3eDEzQi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTNPLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTNPLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxM08tSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDEzTy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDEzTy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTNPLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTNPLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTQtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxNC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTQtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDE0LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxNC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTQtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDE0LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxNC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDE0LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTQtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxNC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDE0LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTQtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxNC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDE0LUpJU1gwMjAxLjE5NzYtMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1qaXN4MDIwMS4xOTc2LTAKKzd4MTQtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWtvaTgtcgorN3gxNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDE0Qi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxNEItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxNEItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxNEItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxNEItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxNEItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxNEItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxNEItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTRCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDE0Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxNEItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTRCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDE0Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxNEItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTRCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis4eDEzLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMworOHgxMy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTMtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNgorOHgxMy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTMtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNAorOHgxMy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTMtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOAorOHgxMy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1rb2k4LXIKKzh4MTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvMTA2NDYtMQorOHgxM0ItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTNCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTAKKzh4MTNCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTNCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTNCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTUKKzh4MTNCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTNCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzQi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMworOHgxM0ItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTNCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzQi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNworOHgxM0ItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTgKKzh4MTNCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzQi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvMTA2NDYtMQorOHgxM08tSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMQorOHgxM08tSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzTy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNAorOHgxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzTy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTIKKzh4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTNPLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTUKKzh4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTNPLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTkKKzh4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzEwNjQ2LTEKKzh4MTYucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy04MC1pc284ODU5LTEKKzh4MTZyay5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTgwLWppc3gwMjAxLjE5NzYtMAorOXgxNS1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xCis5eDE1LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMAorOXgxNS1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTEKKzl4MTUtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEzCis5eDE1LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNAorOXgxNS1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTUKKzl4MTUtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE2Cis5eDE1LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTIKKzl4MTUtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMworOXgxNS1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS00Cis5eDE1LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTUKKzl4MTUtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNworOXgxNS1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS04Cis5eDE1LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTkKKzl4MTUtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWtvaTgtcgorOXgxNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc28xMDY0Ni0xCis5eDE1Qi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMQorOXgxNUItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMAorOXgxNUItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMQorOXgxNUItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMworOXgxNUItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNAorOXgxNUItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNQorOXgxNUItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNgorOXgxNUItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTIKKzl4MTVCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0zCis5eDE1Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNAorOXgxNUItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTUKKzl4MTVCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS03Cis5eDE1Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktOAorOXgxNUItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTkKKzl4MTVCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc28xMDY0Ni0xCis5eDE4LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMQorOXgxOC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMAorOXgxOC1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMQorOXgxOC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMworOXgxOC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNAorOXgxOC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNQorOXgxOC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNgorOXgxOC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTIKKzl4MTgtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0zCis5eDE4LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNAorOXgxOC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTUKKzl4MTgtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS03Cis5eDE4LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktOAorOXgxOC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTkKKzl4MTgtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAta29pOC1yCis5eDE4LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvMTA2NDYtMQorOXgxOEItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMQorOXgxOEItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEwCis5eDE4Qi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTMKKzl4MThCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNAorOXgxOEItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE1Cis5eDE4Qi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTYKKzl4MThCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTIKKzl4MThCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTMKKzl4MThCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTQKKzl4MThCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTUKKzl4MThCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTcKKzl4MThCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTgKKzl4MThCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTkKKzl4MThCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzEwNjQ2LTEKK2FyYWJpYzI0LnBjZi5neiAtYXJhYmljLW5ld3NwYXBlci1tZWRpdW0tci1ub3JtYWwtLTMyLTI0Ni0xMDAtMTAwLXAtMTM3LWlzbzEwNjQ2LTEKK2NsQjZ4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xCNngxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTMtMTMwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNC0xNDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTE2LTE2MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI5eDE1LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNS0xNTAtNzUtNzUtYy05MC1pc282NDYuMTk5MS1pcnYKK2NsSTZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1pLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbEk4eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1pLW5vcm1hbC0tOC04MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSNHg2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc282NDYuMTk5MS1pcnYKK2NsUjV4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNTAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI1eDYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTUwLWlzbzY0Ni4xOTkxLWlydgorY2xSNXg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDEyLUlTTzg4NTktMS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKK2NsUjZ4MTItSVNPODg1OS0xMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCitjbFI2eDEyLUlTTzg4NTktMTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworY2xSNngxMi1JU084ODU5LTE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTQKK2NsUjZ4MTItSVNPODg1OS0xNS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE1CitjbFI2eDEyLUlTTzg4NTktMTYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorY2xSNngxMi1JU084ODU5LTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0yCitjbFI2eDEyLUlTTzg4NTktMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTMKK2NsUjZ4MTItSVNPODg1OS00LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorY2xSNngxMi1JU084ODU5LTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS01CitjbFI2eDEyLUlTTzg4NTktNy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTcKK2NsUjZ4MTItSVNPODg1OS04LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOAorY2xSNngxMi1JU084ODU5LTkucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS05CitjbFI2eDEyLUtPSTgtUi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1rb2k4LXIKK2NsUjZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorY2xSNngxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMy0xMzAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4Ni5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3gxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI3eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE0LTE0MC03NS03NS1jLTcwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3g4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMy0xMzAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTQucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTQwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDE2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE2LTE2MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjl4MTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTUwLTc1LTc1LWMtOTAtaXNvNjQ2LjE5OTEtaXJ2CitjdS1hbHQxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYWx0ZXJuYXRlIGdseXBocy1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTIyLWlzbzEwNjQ2LTEKK2N1LWFyYWJpYzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBhcmFiaWMgZXh0cmEtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEwMS1mb250c3BlY2lmaWMtMAorY3UtZGV2bmFnMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGRldmFuZ2FyaSBleHRyYS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTA1LWZvbnRzcGVjaWZpYy0wCitjdS1saWcxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgbGlnYXR1cmUtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTE0MS1mb250c3BlY2lmaWMtMAorY3UtcHVhMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IHB1YS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTEwLWlzbzEwNjQ2LTEKK2N1MTIucGNmLmd6IC1tdXR0LWNsZWFybHl1LW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMjMtaXNvMTA2NDYtMQorY3VhcmFiaWMxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYXJhYmljLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC05My1pc28xMDY0Ni0xCitjdWRldm5hZzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBkZXZhbmFnYXJpLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTIwLTkwLTkwLXAtMTA0LWZvbnRzcGVjaWZpYy0wCitjdXJzb3IucGNmLmd6IGN1cnNvcgorZGVjY3Vycy5wY2YuZ3ogZGVjdyRjdXJzb3IKK2RlY3Nlc3MucGNmLmd6IGRlY3ckc2Vzc2lvbgorZ2IxNmZzLnBjZi5neiAtaXNhcy1mYW5nc29uZyB0aS1tZWRpdW0tci1ub3JtYWwtLTE2LTE2MC03Mi03Mi1jLTE2MC1nYjIzMTIuMTk4MC0wCitnYjE2c3QucGNmLmd6IC1pc2FzLXNvbmcgdGktbWVkaXVtLXItbm9ybWFsLS0xNi0xNjAtNzItNzItYy0xNjAtZ2IyMzEyLjE5ODAtMAorZ2IyNHN0LnBjZi5neiAtaXNhcy1zb25nIHRpLW1lZGl1bS1yLW5vcm1hbC0tMjQtMjQwLTcyLTcyLWMtMjQwLWdiMjMxMi4xOTgwLTAKK2hhbmdsZzE2LnBjZi5neiAtZGFld29vLWdvdGhpYy1tZWRpdW0tci1ub3JtYWwtLTE2LTEyMC0xMDAtMTAwLWMtMTYwLWtzYzU2MDEuMTk4Ny0wCitoYW5nbG0xNi5wY2YuZ3ogLWRhZXdvby1taW5jaG8tbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTE2MC1rc2M1NjAxLjE5ODctMAoraGFuZ2xtMjQucGNmLmd6IC1kYWV3b28tbWluY2hvLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0yNDAta3NjNTYwMS4xOTg3LTAKK2ppc2thbjE2LnBjZi5neiAtamlzLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTUwLTc1LTc1LWMtMTYwLWppc3gwMjA4LjE5ODMtMAoramlza2FuMjQucGNmLmd6IC1qaXMtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yNC0yMzAtNzUtNzUtYy0yNDAtamlzeDAyMDguMTk4My0wCitrMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtMTQwLWppc3gwMjA4LjE5ODMtMAorbWljcm8ucGNmLmd6IG1pY3JvCituaWwyLnBjZi5neiAtbWlzYy1uaWwtbWVkaXVtLXItbm9ybWFsLS0yLTIwLTc1LTc1LWMtMTAtbWlzYy1mb250c3BlY2lmaWMKK29sY3Vyc29yLnBjZi5neiAtc3VuLW9wZW4gbG9vayBjdXJzb3ItLS0tLTEyLTEyMC03NS03NS1wLTE2MC1zdW5vbGN1cnNvci0xCitvbGdsMTAucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xMC0xMDAtNzUtNzUtcC0xMDEtc3Vub2xnbHlwaC0xCitvbGdsMTIucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xMi0xMjAtNzUtNzUtcC0xMTMtc3Vub2xnbHlwaC0xCitvbGdsMTQucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xNC0xNDAtNzUtNzUtcC0xMjgtc3Vub2xnbHlwaC0xCitvbGdsMTkucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xOS0xOTAtNzUtNzUtcC0xNTQtc3Vub2xnbHlwaC0xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyM2NlZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmRteF8xLjEuMy5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJETVg6IERpc3RyaWJ1dGVkIE11bHRpaGVhZCBYIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgRE1YIGV4dGVuc2lvbiBwcm92aWRlcyBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggXAorYW5kIGNvbnRyb2wgb2YgWGRteCgxKSBzZXJ2ZXIuIEF0dHJpYnV0ZXMgb2YgdGhlIFhkbXgoMSkgc2VydmVyIGFuZCBvZiBcCit0aGUgYmFjay1lbmQgc2NyZWVucyBhdHRhY2hlZCB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWVyaWVkIGFuZCBtb2RpZmllZCBcCit2aWEgdGhpcyBwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTNjMzQ5OTIzMWE4MDM1ZWZkMGUwMDRjZmJkM2I3MmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2RteC5jO2VuZGxpbmU9MzM7bWQ1PWM0M2YxOWFmMDNjN2M4NjE5Y2FkYzk3MjRlZDlhZmUxIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGRteHByb3RvIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmE5ODNlYmE1YTlmMDVkMTUyYTA3MjViOGU4NjMxNTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk3ZGEzNmQyZTU2YTJkN2I2ZTRmODk2MjQxNzg1YWNjOTVlOTdlYjk1NTc0NjVmZDY2YmEyYTE1NWE3YjIwMSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZm9udGVuY18xLjEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4MWYwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJYIGZvbnQgZW5jb2RpbmcgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliZm9udGVuYyBpcyBhIGxpYnJhcnkgd2hpY2ggaGVscHMgZm9udCBsaWJyYXJpZXMgXAorcG9ydGFibHkgZGV0ZXJtaW5lIGFuZCBkZWFsIHdpdGggZGlmZmVyZW50IGVuY29kaW5ncyBvZiBmb250cy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk2MjU0YzIwYWI4MWM2M2U2NWIyNmYwZGJjZDRhMWMxIgorCitERVBFTkRTICs9ICJ6bGliIHhwcm90byBmb250LXV0aWwiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjA5MjA5MjRjM2E5ZWJjMTI2NTUxN2JkZDJmOWZkZTUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcwNTg4OTMwZTZmYzk1NDJmZjM4ZTA4ODQ3NzhmYmM2ZTZmZWJmMjFhZGJhYjkyZmQ4ZjUyNGZlNjBhZWZkMjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0OWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmljZV8xLjAuOS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIklDRTogSW50ZXItQ2xpZW50IEV4Y2hhbmdlIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBJbnRlci1DbGllbnQgRXhjaGFuZ2UgKElDRSkgcHJvdG9jb2wgcHJvdmlkZXMgYSBcCitnZW5lcmljIGZyYW1ld29yayBmb3IgYnVpbGRpbmcgcHJvdG9jb2xzIG9uIHRvcCBvZiByZWxpYWJsZSwgYnl0ZS1zdHJlYW0gXAordHJhbnNwb3J0IGNvbm5lY3Rpb25zLiBJdCBwcm92aWRlcyBiYXNpYyBtZWNoYW5pc21zIGZvciBzZXR0aW5nIHVwIGFuZCBcCitzaHV0dGluZyBkb3duIGNvbm5lY3Rpb25zLCBmb3IgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbiwgZm9yIFwKK25lZ290aWF0aW5nIHZlcnNpb25zLCBhbmQgZm9yIHJlcG9ydGluZyBlcnJvcnMuICIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDE2MmIxYjNjNmZhODEyZGE5ZDgwNGRjZjg1ODRhOTMiCisKK0RFUEVORFMgKz0gInhwcm90byB4dHJhbnMiCitQUk9WSURFUyA9ICJpY2UiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliSUNFIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gImFkZGZiMWU4OTdjYTgwNzk1MzE2NjljN2M3NzExNzI2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhmNzAzMmYyYzFjNjQzNTJiNTQyM2Y2YjQ4YThlYmRjMzM5Y2M2MzA2NGFmMzRkNjZhNmM5YWE3OTc1OWUyMDIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FyYzRdID0gImFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9eWVzLGFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9bm8sbGliYnNkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyZmMwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK0Zyb20gYjE0Njk2YTU1Nzk2ZTczOTYyNGJiZGE0Zjc3MjQyNzAzMmVmZmYyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bGllbiBDcmlzdGF1IDxqY3Jpc3RhdUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAyNiBBcHIgMjAxNSAxNToyMDo1NyArMDIwMAorU3ViamVjdDogW1BBVENIIDEvNF0gSW5jbHVkZSBjb25maWcuaCBiZWZvcmUgYW55dGhpbmcgZWxzZSBpbiAqLmMKKworRGViaWFuIGJ1ZyM3NDkwMDggPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc0OTAwOD4KKworUmVwb3J0ZWQtYnk6IE1pY2hhZWwgVGF1dHNjaG5pZyA8bXRAZGViaWFuLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEp1bGllbiBDcmlzdGF1IDxqY3Jpc3RhdUBkZWJpYW4ub3JnPgorUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMgIHwgMyArKysKKyBzcmMvY29tbW9uX2luaXQuYyAgICAgICAgfCAzICsrKworIHNyYy9jb21tb25faW50ZXJmYWNlLmMgICB8IDMgKysrCisgc3JjL2NvbW1vbl9pby5jICAgICAgICAgIHwgMyArKysKKyBzcmMvY29tbW9uX2l0ZXJhdG9yLmMgICAgfCAzICsrKworIHNyYy9jb21tb25fbWFwLmMgICAgICAgICB8IDMgKysrCisgc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jIHwgMyArKysKKyBzcmMvbGludXhfZGV2bWVtLmMgICAgICAgfCA1ICsrKy0tCisgc3JjL29wZW5ic2RfcGNpLmMgICAgICAgIHwgMyArKysKKyBzcmMvc29seF9kZXZmcy5jICAgICAgICAgfCAzICsrKworIHNyYy94ODZfcGNpLmMgICAgICAgICAgICB8IDQgKysrLQorIDExIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYyBiL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCitpbmRleCA0ODg3NDNkLi4xNWQzOTVkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMKKysrKyBiL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCitAQCAtMzEsNiArMzEsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2luaXQuYyBiL3NyYy9jb21tb25faW5pdC5jCitpbmRleCBiMWMwYzNlLi5mN2I1OWJkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pbml0LmMKKysrKyBiL3NyYy9jb21tb25faW5pdC5jCitAQCAtMjgsNiArMjgsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2ludGVyZmFjZS5jIGIvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYworaW5kZXggNTk3NzhjZi4uY2I5NWU5MCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25faW50ZXJmYWNlLmMKKysrKyBiL3NyYy9jb21tb25faW50ZXJmYWNlLmMKK0BAIC0yOCw2ICsyOCw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2lvLmMgYi9zcmMvY29tbW9uX2lvLmMKK2luZGV4IGY1YzllNDUuLmU5NTg2YWQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2lvLmMKKysrKyBiL3NyYy9jb21tb25faW8uYworQEAgLTIyLDYgKzIyLDkgQEAKKyAgKiBBdXRob3I6CisgICoJQWRhbSBKYWNrc29uIDxhamF4QHJlZGhhdC5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2l0ZXJhdG9yLmMgYi9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKK2luZGV4IGNjZjY1NmQuLjJiZWIxODAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKKysrKyBiL3NyYy9jb21tb25faXRlcmF0b3IuYworQEAgLTI4LDYgKzI4LDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25fbWFwLmMgYi9zcmMvY29tbW9uX21hcC5jCitpbmRleCA4NzU3MTUxLi5mMTg1NGJiIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9tYXAuYworKysrIGIvc3JjL2NvbW1vbl9tYXAuYworQEAgLTIxLDYgKzIxLDkgQEAKKyAgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMgYi9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKK2luZGV4IDkzOTQyNzMuLmMxNzA4ZjYgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKKysrKyBiL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYworQEAgLTIzLDYgKzIzLDkgQEAKKyAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICoKKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAicGNpYWNjZXNzLmgiCitkaWZmIC0tZ2l0IGEvc3JjL2xpbnV4X2Rldm1lbS5jIGIvc3JjL2xpbnV4X2Rldm1lbS5jCitpbmRleCAxMGUzYmRlLi4wZDA1NjdjIDEwMDY0NAorLS0tIGEvc3JjL2xpbnV4X2Rldm1lbS5jCisrKysgYi9zcmMvbGludXhfZGV2bWVtLmMKK0BAIC0zMiw4ICszMiw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCistCistI2RlZmluZSBfR05VX1NPVVJDRQorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL29wZW5ic2RfcGNpLmMgYi9zcmMvb3BlbmJzZF9wY2kuYworaW5kZXggNGQxYjVjZC4uYjhjZTMxOCAxMDA2NDQKKy0tLSBhL3NyYy9vcGVuYnNkX3BjaS5jCisrKysgYi9zcmMvb3BlbmJzZF9wY2kuYworQEAgLTEzLDYgKzEzLDkgQEAKKyAgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KK2RpZmYgLS1naXQgYS9zcmMvc29seF9kZXZmcy5jIGIvc3JjL3NvbHhfZGV2ZnMuYworaW5kZXggZjU3MjM5My4uY2Y5NjQ2NyAxMDA2NDQKKy0tLSBhL3NyYy9zb2x4X2RldmZzLmMKKysrKyBiL3NyYy9zb2x4X2RldmZzLmMKK0BAIC0yNSw2ICsyNSw5IEBACisgLyoKKyAgKiBTb2xhcmlzIGRldmZzIGludGVyZmFjZXMKKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZ3MuaD4KK2RpZmYgLS1naXQgYS9zcmMveDg2X3BjaS5jIGIvc3JjL3g4Nl9wY2kuYworaW5kZXggNDljMWNhYi4uMzJkYWEwNCAxMDA2NDQKKy0tLSBhL3NyYy94ODZfcGNpLmMKKysrKyBiL3NyYy94ODZfcGNpLmMKK0BAIC0xOCw4ICsxOCwxMCBAQAorICAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKy0jZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ2OWE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSA3NjVlMGEzOGNiOGM0MGY4ODY1YWY1Y2IzNTZmZmU2MDM5ZmZiMDhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK0RhdGU6IFN1biwgMjIgTWFyIDIwMTUgMjE6Mzg6MjMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIEZpeCBxdW90aW5nIGlzc3VlLgorCittNCBoYXMgJ1tdJyBhcyBxdW90aW5nIGNoYXJhY3RlcnMsIHNvIGlmIHdlIHdhbnQgJ1tdJyB0bworZW5kIHVwIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LCB3ZSBuZWVkIHRvIHF1b3RlIHRoZW0gYWdhaW4uCisKK1JlcG9ydGVkIGJ5IEdyZWcgVHJveGVsIDxnZHRAaXIuYmJuLmNvbT4uCisKK1NpZ25lZC1vZmYtYnk6IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitSZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU2N2U5ZTEuLjg4ODMzMGIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTc2LDcgKzc2LDcgQEAgY2FzZSAkaG9zdF9vcyBpbgorIAkJOzsKKyAJKm5ldGJzZCopCisgCQljYXNlICRob3N0IGluCistCQkqaVszLTldODYqKQorKwkJKmlbWzMtOV1dODYqKQorIAkJCVBDSUFDQ0VTU19MSUJTPSIkUENJQUNDRVNTX0xJQlMgLWxpMzg2IgorIAkJCTs7CisgCQkqeDg2XzY0KnwqYW1kNjQqKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTEzYzhlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDZiZDJmN2Y5MmVhZTcxMzY2M2Y0ZTEzZjZlMmNiMjM1MjY2MDdiOGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjM2OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBsaW51eF9zeXNmcy5jOiBJbmNsdWRlIDxsaW1pdHMuaD4gZm9yIFBBVEhfTUFYCisKK0ZpeGVzIGNvbXBpbGF0aW9uIHdpdGggbXVzbCBsaWJjLgorCitUZXN0ZWQtYnk6IEJlcm5kIEt1aGxzIDxiZXJuZC5rdWhsc0B0LW9ubGluZS5kZT4KK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitSZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBzcmMvbGludXhfc3lzZnMuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpbnV4X3N5c2ZzLmMgYi9zcmMvbGludXhfc3lzZnMuYworaW5kZXggNTBkOTRjZi4uM2Y5NWU1MyAxMDA2NDQKKy0tLSBhL3NyYy9saW51eF9zeXNmcy5jCisrKysgYi9zcmMvbGludXhfc3lzZnMuYworQEAgLTQ1LDYgKzQ1LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwNC1Eb24tdC1pbmNsdWRlLXN5cy1pby5oLW9uLWFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMyODU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBiNmRmNTIwMjMwNmJkNzExNThiNDgyZjI1Y2EyZTY5MTk2NDVkNGRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgNCBKdW4gMjAxNSAyMDo1NTowNiAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvNF0gRG9uJ3QgaW5jbHVkZSBzeXMvaW8uaCBvbiBhcm0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvbGludXhfc3lzZnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9saW51eF9zeXNmcy5jIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK2luZGV4IDNmOTVlNTMuLjFlM2FhZDMgMTAwNjQ0CistLS0gYS9zcmMvbGludXhfc3lzZnMuYworKysrIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK0BAIC01MCw3ICs1MCw3IEBACisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorIAorLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hcm1fXykKKysjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICNpbmNsdWRlIDxzeXMvaW8uaD4KKyAjZWxzZQorICNkZWZpbmUgaW5iKHgpIC0xCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTZhNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBQQ0kgYWNjZXNzIGxpYnJhcnkgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gImxpYnBjaWFjY2VzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciBYIHRvIGFjY2VzcyB0aGUgXAorUENJIGJ1cyBhbmQgZGV2aWNlcyBpbiBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHdheS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWNlNzhhZWM3OTliMWNmNmRmYWVhNTVkMzg3OWVkOWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDdmODY0NjU0NTYxZTRhYzg2MjlhMGVmOWM4ZjA3ZmJjMWY4NTkyZDFiNmM0MTg0MzE1OTNlOWJhMmNmMmZjZiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzdhYWRhNTIyMmI5YTIyZmJmMzQ3MWZmMzY4NzA2OCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSB0aGF0IHByb3ZpZGVzIHdlYWsgYWxpYXNlcyBmb3IgcHRocmVhZCBmdW5jdGlvbnMiCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgd2VhayBhbGlhc2VzIGZvciBwdGhyZWFkIGZ1bmN0aW9ucyBcCitub3QgcHJvdmlkZWQgaW4gbGliYyBvciBvdGhlcndpc2UgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PVhDQiIKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlZGMxZmVhMDNkOTU5ZjBjMmQ3NDNmZTVjYTc0NmFkIgorCisjREVQRU5EUyA9ICJ4Y2ItcHJvdG8geHByb3RvIGxpYnhhdSBsaWJ4c2x0LW5hdGl2ZSIKKyMgREVQRU5EUyArPSAieHNsdHByb2MtbmF0aXZlIGdwZXJmLW5hdGl2ZSIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnB0aHJlYWQtc3R1YnMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImU4ZmEzMWI0MmUxM2Y4N2U4ZjVhN2EyYjczMWRiN2VlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM1YjZkNTRlM2NjNmYzYmEyODA2MWRhODFhZjY0YjlhOTJiN2I3NTczMTkwOTgxNzI0ODhhNjYwZTNkODcyOTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI1MTM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJTTTogU2Vzc2lvbiBNYW5hZ2VtZW50IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBTZXNzaW9uIE1hbmFnZW1lbnQgTGlicmFyeSAoU01saWIpIGlzIGEgbG93LWxldmVsIFwiQ1wiIFwKK2xhbmd1YWdlIGludGVyZmFjZSB0byBYU01QLiAgVGhlIHB1cnBvc2Ugb2YgdGhlIFggU2Vzc2lvbiBNYW5hZ2VtZW50IFwKK1Byb3RvY29sIChYU01QKSBpcyB0byBwcm92aWRlIGEgdW5pZm9ybSBtZWNoYW5pc20gZm9yIHVzZXJzIHRvIHNhdmUgYW5kIFwKK3Jlc3RvcmUgdGhlaXIgc2Vzc2lvbnMuICBBIHNlc3Npb24gaXMgYSBncm91cCBvZiBjbGllbnRzLCBlYWNoIG9mIHdoaWNoIFwKK2hhcyBhIHBhcnRpY3VsYXIgc3RhdGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jMGZiMzdmNDRlMDJiZGJkZTgwNTQ2MDI0NDAwNzI4ZCIKKworREVQRU5EUyArPSAibGliaWNlIHhwcm90byB4dHJhbnMiCisKKyMgbGliU00gY2FuIHdvcmsgd2l0aG91dCBsaWJ1dWlkLCB3ZSBleHBsaWNpdGx5IGRpc2FibGUgaXQgdG8gYnJlYWsgdGhlIGZvbGxvd2luZyBjaXJjdWxhciBkZXBlbmRlbmN5CisjIHdoZW4gRElTVFJPX0ZFQVRVUkVTIGNvbnRhaW5zICdzeXN0ZW1kJyBhbmQgJ3gxMScuCisjIHN5c3RlbWQgLT4gZGJ1cyAtPiBsaWJzbSAtPiB1dGlsLWxpbnV4IC0+IHN5c3RlbWQKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnV1aWQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliU00iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDk5YTc3NzNjNjVhYmE1MTM2MDlmZTY1MTg1M2M1ZjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJhY2E4YzlmNWQ5MzQ0NTBhNzA4OTZjNGFkMzhkMDY0NzU1MjEyNTVjYTYzYjcxN2E2NTEwZmRiNmUyODdiZCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLWRpZXRfMS42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkMDE0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgbGlieDExLmluYworCitERVNDUklQVElPTiArPSAiIFN1cHBvcnQgZm9yIFhDTVMgYW5kIFhMT0NBTEUgaXMgZGlzYWJsZWQgaW4gXAordGhpcyB2ZXJzaW9uLiIKKworU1JDX1VSSSArPSAiZmlsZTovL1gxOE5DTVNzdHVicy5kaWZmIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYgXAorICAgICAgICAgICAgZmlsZTovL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBcCisgICAgICAgICAgICIKKworUlBST1ZJREVTXyR7UE59LWRldiA9ICJsaWJ4MTEtZGV2IgorUlBST1ZJREVTXyR7UE59LWxvY2FsZSA9ICJsaWJ4MTEtbG9jYWxlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmUzNmI3M2Y4YTQyMTQzMTQyZGRhODEyOWYwMmU0ZTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2YzMWE3YzM5ZjJmNTJlOGViZDBkYjk1NjQwMzg0ZTYzNDUxZjliMDE0ZWVkMmJiN2Y1ZGUwM2U4YWRjODExMSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUteGxvY2FsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGVhZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIEludGVyZmFjZSBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBjbGllbnQgaW50ZXJmYWNlIHRvIHRoZSBYIFdpbmRvdyBcCitTeXN0ZW0sIG90aGVyd2lzZSBrbm93biBhcyAnWGxpYicuICBJdCBwcm92aWRlcyBhIGNvbXBsZXRlIEFQSSBmb3IgdGhlIFwKK2Jhc2ljIGZ1bmN0aW9ucyBvZiB0aGUgd2luZG93IHN5c3RlbS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitpbmhlcml0IHNpdGVpbmZvCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2xpYngxMToiCisKK1BFID0gIjEiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGlieDExIgorCitYT1JHX1BOID0gImxpYlgxMSIKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTcyMjU1ZGVlNjZiYjAxNTE0MzViMmQ1ZDcwOWZjZjciCisKK0RFUEVORFMgKz0gInhwcm90byB4ZXh0cHJvdG8geHRyYW5zIGxpYnhjYiBrYnByb3RvIGlucHV0cHJvdG8iCitERVBFTkRTICs9ICJ4cHJvdG8tbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1rZXlzeW1kZWZkaXI9JHtTVEFHSU5HX0lOQ0RJUn0vWDExLyAtLWRpc2FibGUteGY4NmJpZ2ZvbnQiCitFWFRSQV9PRU1BS0UgKz0gJ0NXQVJORkxBR1M9IiInCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ4Y21zIgorUEFDS0FHRUNPTkZJR1t4Y21zXSA9ICItLWVuYWJsZS14Y21zLC0tZGlzYWJsZS14Y21zIgorCisjIHNyYy91dGlsL21ha2VrZXlzIGlzIGJ1aWx0IG5hdGl2ZWx5IGJ1dCBuZWVkcyAtRF9HTlVfU09VUkNFIGRlZmluZWQuCitDUFBGTEFHU19GT1JfQlVJTEQgKz0gIi1EX0dOVV9TT1VSQ0UiCisKK1BBQ0tBR0VTID0rICIke1BOfS14Y2IiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS9YS2V5c3ltREIgJHtkYXRhZGlyfS9YMTEvWEVycm9yREIgJHtkYXRhZGlyfS9YMTEvWGNtcy50eHQiCitGSUxFU18ke1BOfS14Y2IgKz0gIiR7bGliZGlyfS9saWJYMTEteGNiLnNvLioiCitGSUxFU18ke1BOfS1sb2NhbGUgKz0gIiR7ZGF0YWRpcn0vWDExL2xvY2FsZSAke2xpYmRpcn0vWDExL2xvY2FsZSIKKworIyBNdWx0aXBsZSBsaWJ4MTEgZGVyaXZhdGl2ZXMgZnJvbSBmcm9tIHRoaXMgZmlsZSBhbmQgYXJlIHNlbGVjdGVkIGJ5IHZpcnR1YWwvbGlieDExCisjIEEgd29ybGQgYnVpbGQgc2hvdWxkIG9ubHkgYnVpbGQgdGhlIGNvcnJlY3QgdmVyc2lvbiwgbm90IGFsbCBvZiB0aGVtLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0Y2VkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9YMThOQ01Tc3R1YnMuZGlmZgpAQCAtMCwwICsxLDUyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvaW1Db252LmMKKysrKyBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYworQEAgLTgzLDYgKzgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBTdWJzdFJlYyBTdWJzdFRhYmxlWworICAqIGZyb20gVUNTIGNoYXIgdG8gc3BlY2lmaWVkIGNoYXJzZXQgY2hhci4KKyAgKiBUaGlzIGNvbnZlcnRlciBpcyBuZWVkZWQgZm9yIF9YaW1HZXRDaGFyQ29kZSBzdWJyb3V0aW5lLgorICAqLworKyNpZmRlZiBYTE9DQUxFCisgWFBvaW50ZXIKKyBfWGltR2V0TG9jYWxlQ29kZSAoCisgICAgIF9YY29uc3QgY2hhcioJZW5jb2RpbmdfbmFtZSkKK0BAIC05Niw2ICs5Nyw3IEBAIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgICAgfQorICAgICByZXR1cm4gY3Z0OworIH0KKysjZW5kaWYKKyAKKyAvKgorICAqIFJldHVybnMgdGhlIGxvY2FsZSBkZXBlbmRlbnQgcmVwcmVzZW50YXRpb24gb2YgYSBrZXlzeW0uCitAQCAtMTA2LDYgKzEwOCw3IEBAIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgKiB0ZXJtaW5hdGluZyBOVUwgYnl0ZS4gUmV0dXJuIDAgaWYgdGhlIGtleXN5bSBpcyBub3QgcmVwcmVzZW50YWJsZSBpbiB0aGUKKyAgKiBsb2NhbGUKKyAgKi8KKysjaWZkZWYgWExPQ0FMRQorIC8qQVJHU1VTRUQqLworIGludAorIF9YaW1HZXRDaGFyQ29kZSAoCitAQCAtMTM1LDYgKzEzOCw3IEBAIF9YaW1HZXRDaGFyQ29kZSAoCisgICAgICAgICBidWZbY291bnRdPSAnXDAnOworICAgICByZXR1cm4gY291bnQ7CisgfQorKyNlbmRpZgorIAorICNpZmRlZiBYS0IKKyBzdGF0aWMgaW50IGxvb2t1cF9zdHJpbmcoCitJbmRleDogbGliWDExLTEuMy9zcmMvWDE4TkNNU3N0dWJzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJYMTEtMS4zL3NyYy9YMThOQ01Tc3R1YnMuYworQEAgLTAsMCArMSw0MjggQEAKKysvKgorKyAqIFgxOE5DTVNzdHVicy5jCisrICogLSBQcm92aWRlcyBzdHVicyBhbmQgZHVtbXkgZnVuY3MgbmVlZGVkIHdoZW4gWGNtcyBhbmQgWExvY2FsZSBzdHVmZiByZW1vdmVkCisrICoKKysgKiBDb3B5cmlnaHQgqSAyMDAzIE1hdHRoZXcgQWxsdW0KKysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisrICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE1hdHRoZXcgQWxsdW0gbm90IGJlIHVzZWQgaW4KKysgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQKKysgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBhbmQgQ29tcGFxIG1ha2VzIG5vCisrICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0CisrICogaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKysgKgorKyAqIE1BVFRIRVcgQUxMVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgCisrICogU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgCisrICogSU4gTk8gRVZFTlQgU0hBTEwgS0VJVEggUEFDS0FSRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKysgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisrICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgIlhsaWJpbnQuaCIKKysjaW5jbHVkZSAiWGxjaW50LmgiCisrI2luY2x1ZGUgPFgxMS9YbG9jYWxlLmg+CisrI2luY2x1ZGUgPFgxMS9Yb3MuaD4KKysjaWZkZWYgV0lOMzIKKysjdW5kZWYgY2xvc2UKKysjZW5kaWYKKysjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisrI2luY2x1ZGUgIlhsY1B1YkkuaCIKKysKKysjaW5jbHVkZSAiWGNtc2ludC5oIiAJCS8qIGZvciBYY21zQ0NDIHR5cGUgICovCisrI2luY2x1ZGUgIlhsY1B1YkkuaCIgICAgICAgICAgICAvKiBmb3IgWExDZCB0eXBlICovCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworKyNpZiAhIFhMT0NBTEUKKysKKytCb29sCisrWFN1cHBvcnRzTG9jYWxlKCkKKyt7CisrICByZXR1cm4gRmFsc2U7IAkJCisrfQorKworK2NoYXIgKgorK1hTZXRMb2NhbGVNb2RpZmllcnMoCisrICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVycykKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrWExDZAorK19YT3BlbkxDKAorKyAgICBjaGFyICpuYW1lKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytYTENkCisrX1hsY0N1cnJlbnRMQygpCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGxjVmFUb0FyZ0xpc3QoCisrICAgIHZhX2xpc3QgdmFyLAorKyAgICBpbnQgY291bnQsCisrICAgIFhsY0FyZ0xpc3QgKmFyZ3NfcmV0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YbGNDb3VudFZhTGlzdCgKKysgICAgdmFfbGlzdCB2YXIsCisrICAgIGludCAqY291bnRfcmV0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YQ2xvc2VMQygKKysgICAgWExDZCBsY2QpCisreworKyAgcmV0dXJuOworK30KKysKKytpbnQKKytfWGxjQ29udmVydCgKKysgICAgWGxjQ29udiBjb252LAorKyAgICBYUG9pbnRlciAqZnJvbSwKKysgICAgaW50ICpmcm9tX2xlZnQsCisrICAgIFhQb2ludGVyICp0bywKKysgICAgaW50ICp0b19sZWZ0LAorKyAgICBYUG9pbnRlciAqYXJncywKKysgICAgaW50IG51bV9hcmdzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKysvKiBYSU0gU3R1YnMgKi8KKysKKytYUG9pbnRlcgorK19YaW1HZXRMb2NhbGVDb2RlICggX1hjb25zdCBjaGFyKiBlbmNvZGluZ19uYW1lICkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisraW50CisrX1hpbUdldENoYXJDb2RlICgKKysgICAgWFBvaW50ZXIgICAgICAgICAgICB1Y3NfY29udiwKKysgICAgS2V5U3ltICAgICAgICAgICAgICBrZXlzeW0sCisrICAgIHVuc2lnbmVkIGNoYXIqICAgICAgYnVmLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIG5ieXRlcykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogWHJtIFN0dWJzICovCisrCisrWHJtTWV0aG9kcworK19Ycm1Jbml0UGFyc2VJbmZvKAorKyAgICBYUG9pbnRlciAqc3RhdGUpCisreworKyAgICByZXR1cm4gKFhybU1ldGhvZHMpIE5VTEw7CisrfQorKworKy8qIFh3YyBTdHVicyAqLworKworK2ludAorK1h3Y1RleHRFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqb3ZlcmFsbF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpvdmVyYWxsX2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZCAKKytYd2NEcmF3U3RyaW5nKERpc3BsYXkgKmRpc3BsYXksCisrCSAgICAgIERyYXdhYmxlIGQsCisrCSAgICAgIFhGb250U2V0IGZvbnRfc2V0LAorKwkgICAgICBHQyBnYywKKysJICAgICAgaW50IHgsIGludCB5LAorKwkgICAgICBfWGNvbnN0IHdjaGFyX3QgKnN0cmluZywKKysJICAgICAgaW50IG51bV93Y2hhcnMpCisreworKyAgOworK30KKysKKyt2b2lkCisrWHdjRHJhd1RleHQoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBYd2NUZXh0SXRlbSAgICAgICAgKnRleHRfaXRlbXMsCisrICAgIGludCAgICAgICAgICAgICAgICAgbml0ZW1zKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1h3Y0RyYXdJbWFnZVN0cmluZygKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICA7CisrfQorKworK2ludAorK1h3Y1RleHRFc2NhcGVtZW50KAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgcmV0dXJuIDA7CisrfQorKworK1N0YXR1cworK1h3Y1RleHRQZXJDaGFyRXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKmlua19leHRlbnRzX2J1ZmZlciwKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpsb2dpY2FsX2V4dGVudHNfYnVmZmVyLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorKyAgICBpbnQgICAgICAgICAgICAgICAgKm51bV9jaGFycywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICptYXhfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqbWF4X2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4oWGNtc0ZhaWx1cmUpOworK30KKysKKytpbnQKKytYd2NUZXh0UHJvcGVydHlUb1RleHRMaXN0KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIGNvbnN0IFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCwKKysgICAgd2NoYXJfdCAqKipsaXN0X3JldCwKKysgICAgaW50ICpjb3VudF9yZXQpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK2ludAorK1h3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgd2NoYXJfdCAqKmxpc3QsCisrICAgIGludCBjb3VudCwKKysgICAgWElDQ0VuY29kaW5nU3R5bGUgc3R5bGUsCisrICAgIFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZAorK1h3Y0ZyZWVTdHJpbmdMaXN0KHdjaGFyX3QgKipsaXN0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrCisrdm9pZCBYbWJTZXRXTVByb3BlcnRpZXMgKCAgICAgICAgLyogQWN0dWFsbHkgZnJvbSBtYldNUHJvcHMuYyAqLworKyAgICBEaXNwbGF5ICpkcHksCisrICAgIFdpbmRvdyB3LAorKyAgICBfWGNvbnN0IGNoYXIgKndpbmRvd05hbWUsCisrICAgIF9YY29uc3QgY2hhciAqaWNvbk5hbWUsCisrICAgIGNoYXIgKiphcmd2LAorKyAgICBpbnQgYXJnYywKKysgICAgWFNpemVIaW50cyAqc2l6ZUhpbnRzLAorKyAgICBYV01IaW50cyAqd21IaW50cywKKysgICAgWENsYXNzSGludCAqY2xhc3NIaW50cykKKyt7CisrICByZXR1cm47CisrfQorKworK2ludAorK1htYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgY29uc3QgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wLAorKyAgICBjaGFyICoqKmxpc3RfcmV0LAorKyAgICBpbnQgKmNvdW50X3JldCkKKyt7CisrICByZXR1cm4gWExvY2FsZU5vdFN1cHBvcnRlZDsKKyt9CisrCisraW50CisrWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBjaGFyICoqbGlzdCwKKysgICAgaW50IGNvdW50LAorKyAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKKysgICAgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wKQorK3sKKysgIHJldHVybiBYTG9jYWxlTm90U3VwcG9ydGVkOworK30KKysKKytpbnQKKytYbWJUZXh0RXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAqb3ZlcmFsbF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgKm92ZXJhbGxfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkCisrWG1iRHJhd1RleHQoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBYbWJUZXh0SXRlbSAgICAgICAgKnRleHRfaXRlbXMsCisrICAgIGludCAgICAgICAgICAgICAgICAgbml0ZW1zKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1htYkRyYXdTdHJpbmcoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBfWGNvbnN0IGNoYXIgICAgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgOworK30KKysKKyt2b2lkCisrWG1iRHJhd0ltYWdlU3RyaW5nKAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgX1hjb25zdCBjaGFyICAgICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIDsKKyt9CisrCisraW50CisrWG1iVGV4dEVzY2FwZW1lbnQoCisrICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrU3RhdHVzCisrWG1iVGV4dFBlckNoYXJFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3QgY2hhciAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICppbmtfZXh0ZW50c19idWZmZXIsCisrICAgIFhSZWN0YW5nbGUgICAgICpsb2dpY2FsX2V4dGVudHNfYnVmZmVyLAorKyAgICBpbnQgICAgICAgICAgICAgYnVmZmVyX3NpemUsCisrICAgIGludCAgICAgICAgICAgICpudW1fY2hhcnMsCisrICAgIFhSZWN0YW5nbGUgICAgICptYXhfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICptYXhfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt1bnNpZ25lZCBpbnQKKytLZXlTeW1Ub1VjczQoS2V5U3ltIGtleXN5bSkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmIAorKworKyNpZiAhIFhDTVMKKysKKytYY21zQ0NDIAorK1hjbXNDQ0NPZkNvbG9ybWFwKGRweSwgY21hcCkKKysgICAgRGlzcGxheSAqZHB5OworKyAgICBDb2xvcm1hcCBjbWFwOworK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytTdGF0dXMKKytfWGNtc1Jlc29sdmVDb2xvclN0cmluZyAoCisrICAgIFhjbXNDQ0MgY2NjLAorKyAgICBjb25zdCBjaGFyICoqY29sb3Jfc3RyaW5nLAorKyAgICBYY21zQ29sb3IgKnBDb2xvcl9leGFjdF9yZXR1cm4sCisrICAgIFhjbXNDb2xvckZvcm1hdCByZXN1bHRfZm9ybWF0KQorK3sKKysgIHJldHVybihYY21zRmFpbHVyZSk7CisrfQorKworK3ZvaWQKKytfWGNtc1VucmVzb2x2ZUNvbG9yKAorKyAgICBYY21zQ0NDIGNjYywKKysgICAgWGNtc0NvbG9yICpwQ29sb3IpCisreworKyAgcmV0dXJuOworK30KKysKKyt2b2lkCisrX1hVbnJlc29sdmVDb2xvcigKKysgICAgWGNtc0NDQyBjY2MsCisrICAgIFhDb2xvciAqcFhDb2xvcikKKyt7CisrICByZXR1cm47CisrfQorKworK1hjbXNDbWFwUmVjICoKKytfWGNtc0FkZENtYXBSZWMoZHB5LCBjbWFwLCB3aW5kb3dJRCwgdmlzdWFsKQorKyAgICBEaXNwbGF5ICpkcHk7CisrICAgIENvbG9ybWFwIGNtYXA7CisrICAgIFdpbmRvdyB3aW5kb3dJRDsKKysgICAgVmlzdWFsICp2aXN1YWw7CisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGNtc1JHQl90b19YQ29sb3IoCisrICAgIFhjbXNDb2xvciAqcENvbG9ycywKKysgICAgWENvbG9yICpwWENvbG9ycywKKysgICAgdW5zaWduZWQgaW50IG5Db2xvcnMpCisreworKyAgcmV0dXJuOworK30KKysKKytYY21zQ21hcFJlYyAqCisrX1hjbXNDb3B5Q21hcFJlY0FuZEZyZWUoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgQ29sb3JtYXAgc3JjX2NtYXAsCisrICAgIENvbG9ybWFwIGNvcHlfY21hcCkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK19YY21zRGVsZXRlQ21hcFJlYygKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBDb2xvcm1hcCBjbWFwKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrI2VuZGlmCitJbmRleDogbGliWDExLTEuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbGliWDExLTEuMy9zcmMvTWFrZWZpbGUuYW0KK0BAIC0zMzUsNiArMzM1LDggQEAgaWYgVEhSU1RVQlMKKyBsaWJYMTFfbGFfU09VUkNFUys9VUlUaHJTdHVicy5jCisgZW5kaWYKKyAKKytsaWJYMTFfbGFfU09VUkNFUys9WDE4TkNNU3N0dWJzLmMKKysKKyB4MTFkYXRhZGlyID0gQFgxMV9EQVRBRElSQAorIHgxMWRhdGFfREFUQSA9IFhLZXlzeW1EQiBYRXJyb3JEQgorIAorQEAgLTM0Miw2ICszNDQsNyBAQCBFWFRSQV9ESVNUID0gXAorIAkkKHgxMWRhdGFfREFUQSkgXAorIAlvczJTdHVicy5jIFwKKy0JVUlUaHJTdHVicy5jIAorKwlVSVRoclN0dWJzLmMgXAorKwlYMThOQ01Tc3R1YnMuYworIAorIGlmIFhDQgorIGxpYlgxMV9sYV9TT1VSQ0VTICs9IFwKK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9sb2NraW5nLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL2xvY2tpbmcuYworKysrIGxpYlgxMS0xLjMvc3JjL2xvY2tpbmcuYworQEAgLTY2LDcgKzY2LDkgQEAgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYQorICNkZWZpbmUgTlVNX0ZSRUVfQ1ZMUyA0CisgCisgLyogaW4gbGNXcmFwLmMgKi8KKysjaWZkZWYgWExPQ0FMRQorIGV4dGVybiBMb2NrSW5mb1B0ciBfWGkxOG5fbG9jazsKKysjZW5kaWYKKyAKKyAjaWZkZWYgV0lOMzIKKyBzdGF0aWMgRFdPUkQgX1hfVGxzSW5kZXggPSAoRFdPUkQpLTE7CitAQCAtNTk0LDkgKzU5NiwxMSBAQCBTdGF0dXMgWEluaXRUaHJlYWRzKHZvaWQpCisgICAgIF9YZ2xvYmFsX2xvY2sgPSAmZ2xvYmFsX2xvY2s7CisgICAgIHhtdXRleF9pbml0KF9YZ2xvYmFsX2xvY2stPmxvY2spOworICAgICB4bXV0ZXhfc2V0X25hbWUoX1hnbG9iYWxfbG9jay0+bG9jaywgIlhsaWIgZ2xvYmFsIik7CisrI2lmZGVmIFhMT0NBTEUKKyAgICAgX1hpMThuX2xvY2sgPSAmaTE4bl9sb2NrOworICAgICB4bXV0ZXhfaW5pdChfWGkxOG5fbG9jay0+bG9jayk7CisgICAgIHhtdXRleF9zZXRfbmFtZShfWGkxOG5fbG9jay0+bG9jaywgIlhsaWIgaTE4biIpOworKyNlbmRpZgorICAgICBfWExvY2tNdXRleF9mbiA9IF9YTG9ja011dGV4OworICAgICBfWFVubG9ja011dGV4X2ZuID0gX1hVbmxvY2tNdXRleDsKKyAgICAgX1hDcmVhdGVNdXRleF9mbiA9IF9YQ3JlYXRlTXV0ZXg7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9kaXNhYmxlX3Rlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjZjZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworVXBkYXRlIGZvciAxLjYuMQorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtTnVyZCBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0KKy0tLSBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtCTIwMTItMDYtMDIgMDk6Mzc6MTguMDAwMDAwMDAwICswMzAwCisrKysgbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbQkyMDEzLTAxLTAyIDE2OjEwOjI0Ljk2MDE1NjEzMSArMDIwMAorQEAgLTM2LDExICszNiw2IEBACisgICAgICAgICA8IGxvY2FsZS5kaXIubDEgPiBsb2NhbGUuZGlyLmwyCisJY2F0IGxvY2FsZS5kaXIubDIgbG9jYWxlLmRpci5sMSA+IGxvY2FsZS5kaXIKKworLWlmIEhBVkVfUEVSTAorLUxPR19DT01QSUxFUiA9ICQoUEVSTCkKKy1URVNUUyA9IGNvbXBvc2UtY2hlY2sucGwKKy1lbmRpZiBIQVZFX1BFUkwKKy0KKworICMgUGVyLWxvY2FsZSBkYXRhIGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LWRpc2FibGUteGxvY2FsZS5kaWZmIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MzOTg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZgpAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLSBsaWJYMTEtWDExUjcuMC0xLjAuMC9zcmMvRm9udC5jLm9yaWcJMjAwNi0wMy0xMiAxODozNTo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJYMTEtWDExUjcuMC0xLjAuMC9zcmMvRm9udC5jCTIwMDYtMDMtMTIgMTg6NDA6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNzAxLDcgKzcwMSwxMSBAQAorICAgICB9CisgICAgIGlmIChsIC0gMiAtIChwIC0gY2hhcnNldCkgPCAwKQorIAlyZXR1cm4gMDsKKysjaWZkZWYgWExPQ0FMRQorICAgICBpZiAoX1hsY05Db21wYXJlSVNPTGF0aW4xKG5hbWUgKyBsIC0gMiAtIChwIC0gY2hhcnNldCksIGNoYXJzZXQsIHAgLSBjaGFyc2V0KSkKKysjZWxzZQorKyAgICBpZiAoc3RybmNhc2VjbXAobmFtZSArIGwgLSAyIC0gKHAgLSBjaGFyc2V0KSwgY2hhcnNldCwgcCAtIGNoYXJzZXQpKQorKyNlbmRpZgorIAlyZXR1cm4gMDsKKyAgICAgaWYgKHN0cmxlbihwICsgMSkgKyBsIC0gMSA+PSBzaXplb2YoYnVmKSAtIDEpCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzNDdmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3LmhvbGdlcnNjaHVyaWcuZGUvcGF0Y2hlci5odG1sCisjCisKKy0tLSBsaWJYMTEtWDExUjcuMC0xLjAuMC9pbmNsdWRlL1gxMS9YbGliLmh+Zml4LXV0Zjgtd3JvbmctZGVmaW5lCisrKysgbGliWDExLVgxMVI3LjAtMS4wLjAvaW5jbHVkZS9YMTEvWGxpYi5oCitAQCAtMTAzLDcgKzEwMyw3IEBACisgCisgLyogQVBJIG1lbnRpb25pbmcgIlVURjgiIG9yICJ1dGY4IiBpcyBhbiBYRnJlZTg2IGV4dGVuc2lvbiwgaW50cm9kdWNlZCBpbgorICAgIE5vdmVtYmVyIDIwMDAuIEl0cyBwcmVzZW5jZSBpcyBpbmRpY2F0ZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIG1hY3JvLiAqLworLSNkZWZpbmUgWF9IQVZFX1VURjhfU1RSSU5HIDEKKysjdW5kZWYgWF9IQVZFX1VURjhfU1RSSU5HCisgCisgdHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFiZjdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2xpYlgxMS1BZGQtbWlzc2luZy1OVUxMLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gNGQ4NWQ1ZjNiZDhhZmFjODkzNzM4ZmQ4OGUxOWQ4Y2I1Y2Y5OThmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiBTdW4sIDI3IEp1bCAyMDE0IDEzOjEwOjA3IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYlgxMTogQWRkIG1pc3NpbmcgTlVMTCBjaGVjayBvbiBpbSBhbmQgaW0tPm1ldGhvZHMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAoYzgyN2VkY2QxYzRhN2Y5MjBhYTI1MjA4MDgzYjViNThkNjBkMmI0NCkKK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CisKKy0tLQorIHNyYy94bGliaTE4bi9JQ1dyYXAuYyB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC1ydSBsaWJYMTEtMS42LjItb3JpZy9zcmMveGxpYmkxOG4vSUNXcmFwLmMgbGliWDExLTEuNi4yL3NyYy94bGliaTE4bi9JQ1dyYXAuYworLS0tIGxpYlgxMS0xLjYuMi1vcmlnL3NyYy94bGliaTE4bi9JQ1dyYXAuYwkyMDE0LTA3LTI3IDEzOjM4OjI5LjU4NjY2NjQ0OSAtMDQwMAorKysrIGxpYlgxMS0xLjYuMi9zcmMveGxpYmkxOG4vSUNXcmFwLmMJMjAxNC0wNy0yNyAxMzo0MTozOS42NzE2MDkwMzAgLTA0MDAKK0BAIC0xNjksNyArMTY5LDcgQEAKKyAgICAgdmFfbGlzdCB2YXI7CisgICAgIGludCAgICAgdG90YWxfY291bnQ7CisgICAgIFhJTUFyZyAqYXJnczsKKy0gICAgY2hhciAgICpyZXQ7CisrICAgIGNoYXIgICAqcmV0ID0gTlVMTDsKKyAKKyAgICAgLyoKKyAgICAgICogc28gY291bnQgdGhlIHN0dWZmIGRhbmdsaW5nIGhlcmUKK0BAIC0xODUsNyArMTg1LDggQEAKKyAgICAgX1hJTVZhVG9OZXN0ZWRMaXN0KHZhciwgdG90YWxfY291bnQsICZhcmdzKTsKKyAgICAgdmFfZW5kKHZhcik7CisgCistICAgIHJldCA9ICgqaW0tPm1ldGhvZHMtPnNldF92YWx1ZXMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJcmV0ID0gKCppbS0+bWV0aG9kcy0+c2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKyAgICAgWGZyZWUoYXJncyk7CisgICAgIHJldHVybiByZXQ7CisgfQorQEAgLTE5Niw3ICsxOTcsNyBAQAorICAgICB2YV9saXN0IHZhcjsKKyAgICAgaW50ICAgICB0b3RhbF9jb3VudDsKKyAgICAgWElNQXJnICphcmdzOworLSAgICBjaGFyICAgKnJldDsKKysgICAgY2hhciAgICpyZXQgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTIxMiw3ICsyMTMsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgcmV0ID0gKCppbS0+bWV0aG9kcy0+Z2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKysgICAgaWYgKGltICYmIGltLT5tZXRob2RzKQorKwlyZXQgPSAoKmltLT5tZXRob2RzLT5nZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworICAgICBYZnJlZShhcmdzKTsKKyAgICAgcmV0dXJuIHJldDsKKyB9CitAQCAtMjI4LDcgKzIzMCw3IEBACisgICAgIHZhX2xpc3QgdmFyOworICAgICBpbnQgICAgIHRvdGFsX2NvdW50OworICAgICBYSU1BcmcgKmFyZ3M7CistICAgIFhJQyAgICAgaWM7CisrICAgIFhJQyAgICAgaWMgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTI0NCw3ICsyNDYsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgaWMgPSAoWElDKSAoKmltLT5tZXRob2RzLT5jcmVhdGVfaWMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJaWMgPSAoWElDKSAoKmltLT5tZXRob2RzLT5jcmVhdGVfaWMpIChpbSwgYXJncyk7CisgICAgIFhmcmVlKGFyZ3MpOworICAgICBpZiAoaWMpIHsKKyAJaWMtPmNvcmUubmV4dCA9IGltLT5jb3JlLmljX2NoYWluOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTMxYzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjMuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBsaWJ4MTEuaW5jCitpbmhlcml0IGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZV90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTM2YjczZjhhNDIxNDMxNDJkZGE4MTI5ZjAyZTRlMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZjMxYTdjMzlmMmY1MmU4ZWJkMGRiOTU2NDAzODRlNjM0NTFmOWIwMTRlZWQyYmI3ZjVkZTAzZThhZGM4MTExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjhiZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4YXVfMS4wLjguYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYYXU6IFggQXV0aG9yaXR5IERhdGFiYXNlIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhhdSBwcm92aWRlcyB0aGUgbWFpbiBpbnRlcmZhY2VzIHRvIHRoZSBYMTEgXAorYXV0aG9yaXNhdGlvbiBoYW5kbGluZywgd2hpY2ggY29udHJvbHMgYXV0aG9yaXNhdGlvbiBmb3IgWCBjb25uZWN0aW9ucywgXAorYm90aCBjbGllbnQtc2lkZSBhbmQgc2VydmVyLXNpZGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworaW5oZXJpdCBnZXR0ZXh0CisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzkwOGUzNDI0OTExOTg0MDEzMjFjZWMxOTU2ODA3ZWMiCisKK0RFUEVORFMgKz0gIiB4cHJvdG8iCitQUk9WSURFUyA9ICJ4YXUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGF1IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ODVmOGFiYmZmYTZkMTQ1YzBmOTMwZjAwNzAzYjIxYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGQ0NzczMjBhZWI1Y2RkNjcyNzI4Mzg3MjJkNmI3ZDU0NDg4N2RmZTdkZTQ2ZTFlN2NjMGMyN2MyYmVhNGYyIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTQ4ODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlL2ZpeC14Y2IucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZXJlIGlzIG5vIGV4dHJhIHJlcGx5IGRhdGEgYW5kIGlmIHdlIHNheSBub3QgdG8gZGlzZ2FyZCBpdCwgeGNiCit0aHJvd3MgZmF0YWwgYXNzZXJ0cy4KKworUlAgLSAyNi8xMS8wOQorCitJbmRleDogZ2l0L3hjYWxpYnJhdGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3hjYWxpYnJhdGUuYwkyMDA5LTExLTI2IDA4OjExOjQ4LjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC94Y2FsaWJyYXRlLmMJMjAwOS0xMS0yNiAwODowOTo1NS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMTYsNyArMjE2LDcgQEAKKyAgIHJlcS0+cmVxVHlwZSA9IGluZm8tPmNvZGVzLT5tYWpvcl9vcGNvZGU7CisgICByZXEtPnhDYWxpYnJhdGVSZXFUeXBlID0gWF9YQ2FsaWJyYXRlUmF3TW9kZTsKKyAgIHJlcS0+b24gPSBlbmFibGU7CistICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4RmFsc2UpKSAKKysgIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhUcnVlKSkgCisgICAgIHsKKyAgICAgICBVbmxvY2tEaXNwbGF5IChkcHkpOworICAgICAgIFN5bmNIYW5kbGUgKCk7CitAQCAtMjQwLDcgKzI0MCw3IEBACisgICByZXEtPnhDYWxpYnJhdGVSZXFUeXBlID0gWF9YQ2FsaWJyYXRlU2NyZWVuVG9Db29yZDsKKyAgIHJlcS0+eCA9ICp4OworICAgcmVxLT55ID0gKnk7CistICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4RmFsc2UpKSAKKysgIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhUcnVlKSkgCisgICAgIHsKKyAgICAgICBVbmxvY2tEaXNwbGF5IChkcHkpOworICAgICAgIFN5bmNIYW5kbGUgKCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWU4NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhDYWxpYnJhdGU6IFRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhDYWxpYnJhdGUgaXMgYSBsaWJyYXJ5IGZvciBwZXJmb3JtaW5nIHRvdWNoc2NyZWVuIFwKK2NhbGlicmF0aW9uIHdpdGggdGhlIGtkcml2ZSB0c2xpYiB0b3VjaHNjcmVlbiBkcml2ZXIuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Y2FsaWJyYXRlLmg7ZW5kbGluZT0yMTttZDU9ZmE1NzJkZjY0MzlmMGYyMzVmMjYxMmYzNzBmMTUzZDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veGNhbGlicmF0ZS5jO2VuZGxpbmU9MjE7bWQ1PWZhNTcyZGY2NDM5ZjBmMjM1ZjI2MTJmMzcwZjE1M2Q3IgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGNhbGlicmF0ZXByb3RvIGxpYnhleHQiCisKK1NSQ1JFViA9ICIyMDlkODNhZjYxZWQzOGEwMDJjODA5NjM3N2RlYWMyOTJiM2UzOTZjIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2xpYi9saWJYQ2FsaWJyYXRlIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC14Y2IucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59LWxvY2FsZSArPSAiJHtkYXRhZGlyfS9YMTEvbG9jYWxlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzMWYyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIFggcHJvdG9jb2wgQy1sYW5ndWFnZSBCaW5kaW5nIChYQ0IpIGlzIGEgcmVwbGFjZW1lbnQgXAorZm9yIFhsaWIgZmVhdHVyaW5nIGEgc21hbGwgZm9vdHByaW50LCBsYXRlbmN5IGhpZGluZywgZGlyZWN0IGFjY2VzcyB0byBcCit0aGUgcHJvdG9jb2wsIGltcHJvdmVkIHRocmVhZGluZyBzdXBwb3J0LCBhbmQgZXh0ZW5zaWJpbGl0eS4iCitIT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9WENCIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitERVBFTkRTID0gInhjYi1wcm90byB4cHJvdG8gbGlieGF1IHhjYi1wcm90by1uYXRpdmUgbGlicHRocmVhZC1zdHVicyIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnhjYi0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3hjYmluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1jaGVjay5wYXRjaCIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebGlieGNiLS4qIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlieGNiLnNvLioiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnhhdSBhbmQgb3RoZXJzIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCAnJHtsaWJkaXJ9JywgJ15saWJ4Y2ItKC4qKVwuc29cLi4qJCcsICdsaWJ4Y2ItJXMnLCAnWENCIGxpYnJhcnkgbW9kdWxlIGZvciAlcycsIGFsbG93X2xpbmtzPVRydWUpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi9kaXNhYmxlLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDFjMGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitUaGUgImNoZWNrIiBwYWNrYWdlIGlzIGNoZWNrZWQgZm9yIHdpdGhvdXQgYW4gZXhwbGljaXQgZW5hYmxlL2Rpc2FibGUgb3B0aW9uLAord2hpY2ggY2FuIGxlYWQgdG8gbm9uLWRldGVybWluaXN0aWMgYnVpbGQgaXNzdWVzIHdpdGggYm90aCBjaGVjayBhbmQgbGlieHNsdC4KKworQXMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBpcyBtaW5pbWFsIGF0IHByZXNlbnQsIHNpbXBseSBkaXNhYmxlIHRoZSB0ZXN0IHN1aXRlLiAgSW4KK3RoZSBmdXR1cmUgaWYgdGhlIHRlc3Qgc3VpdGUgaXMgZXhwYW5kZWQgdGhpcyBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiB0aGUKK3B0ZXN0IERJU1RST19GRUFUVVJFLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNmQ3YzlhNS4uMjJjY2ViOSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjEsNyArMjEsOCBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAKKyBBTV9QQVRIX1BZVEhPTihbMi42XSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhDSEVDSywgW2NoZWNrID49IDAuOS40XSwgW0hBVkVfQ0hFQ0s9eWVzXSwgW0hBVkVfQ0hFQ0s9bm9dKQorK2RubCBQS0dfQ0hFQ0tfTU9EVUxFUyhDSEVDSywgW2NoZWNrID49IDAuOS40XSwgW0hBVkVfQ0hFQ0s9eWVzXSwgW0hBVkVfQ0hFQ0s9bm9dKQorK0hBVkVfQ0hFQ0s9bm8KKyBBTV9DT05ESVRJT05BTChIQVZFX0NIRUNLLCB0ZXN0IHgkSEFWRV9DSEVDSyA9IHh5ZXMpCisgCisgQUNfQ09ORklHX0hFQURFUlMoW3NyYy9jb25maWcuaF0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi94Y2JpbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Mjk3YzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitBcyBwa2ctY29uZmlnIC0tdmFyaWFibGUgZG9lc24ndCByZXNwZWN0IHRoZSBzeXNyb290LCBhZGQgdGhlIHBrZy1jb25maWcgc3lzcm9vdAordG8gdGhlIGJlZ2lubmluZyBvZiB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBsYXRlciBvbiB0aGUgaG9zdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5NGRhNGY3Li5kMjljZDZhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NCw3ICs2NCw3IEBAIEFDX1NVQlNUKE5FRURFRCkKKyAKKyAjIEZpbmQgdGhlIHhjYi1wcm90byBwcm90b2NvbCBkZXNjcmlwdGlvbnMKKyBBQ19NU0dfQ0hFQ0tJTkcoWENCUFJPVE9fWENCSU5DTFVERURJUikKKy1YQ0JQUk9UT19YQ0JJTkNMVURFRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXhjYmluY2x1ZGVkaXIgeGNiLXByb3RvYAorK1hDQlBST1RPX1hDQklOQ0xVREVESVI9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIvYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9eGNiaW5jbHVkZWRpciB4Y2ItcHJvdG9gCisgQUNfTVNHX1JFU1VMVCgkWENCUFJPVE9fWENCSU5DTFVERURJUikKKyBBQ19TVUJTVChYQ0JQUk9UT19YQ0JJTkNMVURFRElSKQorIAorQEAgLTc0LDcgKzc0LDcgQEAgQUNfU1VCU1QoWENCUFJPVE9fVkVSU0lPTikKKyAKKyAjIEZpbmQgdGhlIHhjYmdlbiBQeXRob24gcGFja2FnZQorIEFDX01TR19DSEVDS0lORyhYQ0JQUk9UT19YQ0JQWVRIT05ESVIpCistWENCUFJPVE9fWENCUFlUSE9ORElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5dGhvbmRpciB4Y2ItcHJvdG9gCisrWENCUFJPVE9fWENCUFlUSE9ORElSPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSL2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5dGhvbmRpciB4Y2ItcHJvdG9gCisgQUNfTVNHX1JFU1VMVCgkWENCUFJPVE9fWENCUFlUSE9ORElSKQorIEFDX1NVQlNUKFhDQlBST1RPX1hDQlBZVEhPTkRJUikKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2MjcwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiCkBAIC0wLDAgKzEsMTAgQEAKK2luY2x1ZGUgbGlieGNiLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IgorCisKK0RFUEVORFMgKz0gImxpYnhkbWNwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWE4NzNlYmQzODNkMWE2MDYxMmRkNmVjNmI0MmM3ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDM2MzVkNzAwNDViOWVkZTkwNzc4ZTY3NTE2MTM1ODI4YTU3ZGU4N2FjNTA4Zjk4NzAyNGY0M2MwMzYyMGZmNyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjYzNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiCkBAIC0wLDAgKzEsMTAgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBsaWJ4Y2IuaW5jCisKK1NSQ1JFViA9ICI2MjVlZDU5NmNhZTZkZDgxNzVhZWI2Y2I2ZjI2Nzg0OTI4MDQyZjIyIgorUFYgPSAiMS4xLjkwLjErZ2l0ciR7U1JDUFZ9IgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hjYi9saWJ4Y2IiCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZS9jaGFuZ2UtaW5jbHVkZS1vcmRlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzMzFmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBidWlsZCB1c2UgaXRzIG93biBYY29tcG9zaXRlLmggb3ZlciByYXRoZXIgdGhhbiBhbgorb2xkZXIgWGNvbXBvc2l0ZS5oIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN0YWdpbmcgZGlyLgorCitJbmRleDogbGliWGNvbXBvc2l0ZS0wLjQuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYY29tcG9zaXRlLTAuNC4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDYtMzAgMjI6NDI6NTMuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliWGNvbXBvc2l0ZS0wLjQuMy9zcmMvTWFrZWZpbGUuYW0JMjAxMC0xMS0yMyAyMzowOTozNC41NDQzMjI5MzAgLTA4MDAKK0BAIC0xOSw3ICsxOSw3IEBACisgIyAgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorICMgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgCistQU1fQ0ZMQUdTID0gJChDV0FSTkZMQUdTKSAkKFhDT01QT1NJVEVfQ0ZMQUdTKSAkKFhGSVhFU19DRkxBR1MpCisrQU1fQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgJChDV0FSTkZMQUdTKSAkKFhDT01QT1NJVEVfQ0ZMQUdTKSAkKFhGSVhFU19DRkxBR1MpCisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorIAorIGxpYl9MVExJQlJBUklFUyA9IGxpYlhjb21wb3NpdGUubGEKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGVfMC40LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjU3MTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiWGNvbXBvc2l0ZTogWCBDb21wb3NpdGUgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBjb21wb3NpdGUgZXh0ZW5zaW9uIHByb3ZpZGVzIHRocmVlIHJlbGF0ZWQgXAorbWVjaGFuaXNtczogcGVyLWhpZXJhcmNoeSBzdG9yYWdlLCBhdXRvbWF0aWMgc2hhZG93IHVwZGF0ZSwgYW5kIGV4dGVybmFsIFwKK3BhcmVudC4gIEluIHBlci1oaWVyYXJjaHkgc3RvcmFnZSwgdGhlIHJlbmRlcmluZyBvZiBhbiBlbnRpcmUgaGllcmFyY2h5IFwKK29mIHdpbmRvd3MgaXMgcmVkaXJlY3RlZCB0byBvZmYtc2NyZWVuIHN0b3JhZ2UuICBJbiBhdXRvbWF0aWMgc2hhZG93IFwKK3VwZGF0ZSwgd2hlbiBhIGhpZXJhcmNoeSBpcyByZW5kZXJlZCBvZmYtc2NyZWVuLCB0aGUgWCBzZXJ2ZXIgcHJvdmlkZXMgXAorYW4gYXV0b21hdGljIG1lY2hhbmlzbSBmb3IgcHJlc2VudGluZyB0aG9zZSBjb250ZW50cyB3aXRoaW4gdGhlIHBhcmVudCBcCit3aW5kb3cuICBJbiBleHRlcm5hbCBwYXJlbnQsIGEgbWVjaGFuaXNtIGZvciBwcm92aWRpbmcgcmVkaXJlY3Rpb24gb2YgXAorY29tcG9zaXRpbmcgdHJhbnNmb3JtYXRpb25zIHRocm91Z2ggYSBjbGllbnQuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZjI5MDdhYWQ1NDFmNmYyMjZmYmM1OGNjMWIzY2RmMSIKKworREVQRU5EUyArPSAiIGNvbXBvc2l0ZXByb3RvIHZpcnR1YWwvbGlieDExIGxpYnhmaXhlcyBsaWJ4ZXh0IgorUFJPVklERVMgPSAieGNvbXBvc2l0ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhjb21wb3NpdGUiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmN2EyMThkY2JmNmYwODQ4NTk5YzZjMzZmYzY1YzUxYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZGUyNTBjZDIwN2Q4YmVlNGEzMzgyNjVjMzAwN2Q3YTY4ZDVhY2E3OTFiNmFjNDFhZjE4ZTlhMmFlYjM0MTc4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU0ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJYY3Vyc29yOiBYIEN1cnNvciBtYW5hZ2VtZW50IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlhjdXJzb3IgaXMgYSBzaW1wbGUgbGlicmFyeSBkZXNpZ25lZCB0byBoZWxwIGxvY2F0ZSBhbmQgXAorbG9hZCBjdXJzb3JzLiBDdXJzb3JzIGNhbiBiZSBsb2FkZWQgZnJvbSBmaWxlcyBvciBtZW1vcnkuIEEgbGlicmFyeSBvZiBcCitjb21tb24gY3Vyc29ycyBleGlzdHMgd2hpY2ggbWFwIHRvIHRoZSBzdGFuZGFyZCBYIGN1cnNvciBuYW1lcy4gQ3Vyc29ycyBcCitjYW4gZXhpc3QgaW4gc2V2ZXJhbCBzaXplcyBhbmQgdGhlIGxpYnJhcnkgYXV0b21hdGljYWxseSBwaWNrcyB0aGUgYmVzdCBcCitzaXplLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODkwMmU2NjQzZjdiY2Q3NzkzYjIzZGNkNWQ4MDMxYTQiCisKK0RFUEVORFMgKz0gImxpYnhyZW5kZXIgbGlieGZpeGVzIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGN1cnNvciIKKworU1JDX1VSSVttZDVzdW1dID0gIjFlN2MxN2FmYmJjZTgzZTIyMTU5MTcwNDdjNTdkMWIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjliYzZhY2IyMWNhMTRkYTUxYmRhNWJjOTEyYzg5NTViYzZlNWU0MzNmMGFiMDBjNWU4YmVmODQyNTk2YzMzZGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZGFtYWdlXzEuMS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q3MDA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlhkYW1hZ2U6IFggRGFtYWdlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICInRGFtYWdlJyBpcyBhIHRlcm0gdGhhdCBkZXNjcmliZXMgY2hhbmdlcyBtYWtlIHRvIHBpeGVsIFwKK2NvbnRlbnRzIG9mIHdpbmRvd3MgYW5kIHBpeG1hcHMuICBEYW1hZ2UgYWNjdW11bGF0ZXMgYXMgZHJhd2luZyBvY2N1cnMgXAoraW4gdGhlIGRyYXdhYmxlLiAgRWFjaCBkcmF3aW5nIG9wZXJhdGlvbiAnZGFtYWdlcycgb25lIG9yIG1vcmUgXAorcmVjdGFuZ3VsYXIgYXJlYXMgd2l0aGluIHRoZSBkcmF3YWJsZS4gIFRoZSByZWN0YW5nbGVzIGFyZSBndWFyYW50ZWVkIHRvIFwKK2luY2x1ZGUgdGhlIHNldCBvZiBwaXhlbHMgbW9kaWZpZWQgYnkgZWFjaCBvcGVyYXRpb24sIGJ1dCBtYXkgaW5jbHVkZSBcCitzaWduaWZpY2FudGx5IG1vcmUgdGhhbiBqdXN0IHRob3NlIHBpeGVscy4gIFRoZSBEQU1BR0UgZXh0ZW5zaW9uIGFsbG93cyBcCithcHBsaWNhdGlvbnMgdG8gZWl0aGVyIHJlY2VpdmUgdGhlIHJhdyByZWN0YW5nbGVzIGFzIGEgc3RyZWFtIG9mIGV2ZW50cywgXAorb3IgdG8gaGF2ZSB0aGVtIHBhcnRpYWxseSBwcm9jZXNzZWQgd2l0aGluIHRoZSBYIHNlcnZlciB0byByZWR1Y2UgdGhlIFwKK2Ftb3VudCBvZiBkYXRhIHRyYW5zbWl0dGVkIGFzIHdlbGwgYXMgcmVkdWNlIHRoZSBwcm9jZXNzaW5nIGxhdGVuY3kgb25jZSBcCit0aGUgcmVwYWludCBvcGVyYXRpb24gaGFzIHN0YXJ0ZWQuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ZmUxMDFmMzBkZDI0MTM0Y2Y0MzE0Njg2MzI0MTg2OCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgZGFtYWdlcHJvdG8gbGlieGZpeGVzIgorUFJPVklERVMgPSAieGRhbWFnZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhkYW1hZ2UiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2YyOTJkZTJhOWZhMmU5YTkzOWFlZmRlNjhmZDM0ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YzNmZTdjNjU3ZTgzNTQ3ZjQ4MjJiZmRlMzBhOTBkODQ1MjRlZmI1NjM2NTQ0ODc2ODQwOWI3N2YwNTM1NWFkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZG1jcF8xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGUzMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJYRE1DUDogWCBEaXNwbGF5IE1hbmFnZXIgQ29udHJvbCBQcm90b2NvbCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgcHVycG9zZSBvZiB0aGUgWCBEaXNwbGF5IE1hbmFnZXIgQ29udHJvbCBQcm90b2NvbCBcCisoWERNQ1ApIGlzIHRvIHByb3ZpZGUgYSB1bmlmb3JtIG1lY2hhbmlzbSBmb3IgYW4gYXV0b25vbW91cyBkaXNwbGF5IHRvIFwKK3JlcXVlc3QgbG9naW4gc2VydmljZSBmcm9tIGEgcmVtb3RlIGhvc3QuIEFuIFggdGVybWluYWwgKHNjcmVlbiwgXAora2V5Ym9hcmQsIG1vdXNlLCBwcm9jZXNzb3IsIG5ldHdvcmsgaW50ZXJmYWNlKSBpcyBhIHByaW1lIGV4YW1wbGUgb2YgYW4gXAorYXV0b25vbW91cyBkaXNwbGF5LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK2luaGVyaXQgZ2V0dGV4dAorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ1NTlmYjI2ZTEyOTYyNjAyMmUwNTJhNWU2ZTBlMTIzIgorCitERVBFTkRTICs9ICJ4cHJvdG8iCitQUk9WSURFUyA9ICJ4ZG1jcCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZG1jcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMThhYTVjMTI3OWIwMWY5ZDE4ZTMyOTk5Njk2NjViMmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFmZTA5ODY3OTE4ZmZmMjU4Mjk2ZTFlMWUxNTlmMGRjNjM5Y2IzMGQyMDFjNTM1MTlmMjVhYjczYWY0ZTRlMiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYXJjNF0gPSAiYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj15ZXMsYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj1ubyxsaWJic2QiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE4YjY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhleHQgcHJvdmlkZXMgYW4gWCBXaW5kb3cgU3lzdGVtIGNsaWVudCBpbnRlcmZhY2UgdG8gXAorc2V2ZXJhbCBleHRlbnNpb25zIHRvIHRoZSBYIHByb3RvY29sLiAgVGhlIHN1cHBvcnRlZCBwcm90b2NvbCBleHRlbnNpb25zIFwKK2FyZSBET1VCTEUtQlVGRkVSLCBEUE1TLCBFeHRlbmRlZC1WaXN1YWwtSW5mb3JtYXRpb24sIExCWCwgTUlUX1NITSwgXAorTUlUX1NVTkRSWS1OT05TVEFOREFSRCwgTXVsdGktQnVmZmVyaW5nLCBTRUNVUklUWSwgU0hBUEUsIFNZTkMsIFRPRy1DVVAsIFwKK1hDLUFQUEdST1VQLCBYQy1NSVNDLCBYVEVTVC4gIGxpYlhleHQgYWxzbyBwcm92aWRlcyBhIHNtYWxsIHNldCBvZiBcCit1dGlsaXR5IGZ1bmN0aW9ucyB0byBhaWQgYXV0aG9ycyBvZiBjbGllbnQgQVBJcyBmb3IgWCBwcm90b2NvbCBcCitleHRlbnNpb25zLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc5Y2UyNjY3ODU0MTRiZDFjYmMzYmMyZjRkOWQ3YzgiCisKK0RFUEVORFMgKz0gInhwcm90byB2aXJ0dWFsL2xpYngxMSB4ZXh0cHJvdG8gbGlieGF1IGxpYnhkbWNwIgorUFJPVklERVMgPSAieGV4dCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZXh0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmRmN2M0YzFmMGJhZGQ5ZjgyYWIxMjRmYjMyZWI5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTE4ZDRkMzMyMjMxZjMxMzM3MWZkZWZhYzU5ZTM3NzZmNGYwODIzYmNiMjNjZjdjNzMwNWJmYjU3YjE2ZTM1IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzk5MTg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIKQEAgLTAsMCArMSwyNCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEV4dDogWCBFeHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWGV4dCBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byBcCitzZXZlcmFsIGV4dGVuc2lvbnMgdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgc3VwcG9ydGVkIHByb3RvY29sIGV4dGVuc2lvbnMgXAorYXJlIERPVUJMRS1CVUZGRVIsIERQTVMsIEV4dGVuZGVkLVZpc3VhbC1JbmZvcm1hdGlvbiwgTEJYLCBNSVRfU0hNLCBcCitNSVRfU1VORFJZLU5PTlNUQU5EQVJELCBNdWx0aS1CdWZmZXJpbmcsIFNFQ1VSSVRZLCBTSEFQRSwgU1lOQywgVE9HLUNVUCwgXAorWEMtQVBQR1JPVVAsIFhDLU1JU0MsIFhURVNULiAgbGliWGV4dCBhbHNvIHByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIFwKK3V0aWxpdHkgZnVuY3Rpb25zIHRvIGFpZCBhdXRob3JzIG9mIGNsaWVudCBBUElzIGZvciBYIHByb3RvY29sIFwKK2V4dGVuc2lvbnMuIgorCitERVBFTkRTICs9ICJ4cHJvdG8gdmlydHVhbC9saWJ4MTEgeGV4dHByb3RvIGxpYnhhdSBsaWJ4ZG1jcCIKK1BST1ZJREVTID0gInhleHQiCitTUkNSRVYgPSAiZDFmM2JjNzdhNDhjOGU0Mjc3MTU3OWUzZmRmMzM3MGIzNWQzMjA5ZCIKK1BFID0gIjEiCitQViA9ICIxLjAuOTkuMStnaXRyJHtTUkNQVn0iCisKK1hPUkdfUE4gPSAibGliWGV4dCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9saWIvJHtYT1JHX1BOfSIKK1MgPSAiJHtXT1JLRElSfS9naXQvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTI3NDBjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4xLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWEZpeGVzOiBYIEZpeGVzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9ucyBoYXZlIG9mdGVuIG5lZWRlZCB0byB3b3JrIGFyb3VuZCB2YXJpb3VzIFwKK3Nob3J0Y29taW5ncyBpbiB0aGUgY29yZSBYIHdpbmRvdyBzeXN0ZW0uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBcCitwcm92aWRlIHRoZSBtaW5pbWFsIHNlcnZlci1zaWRlIHN1cHBvcnQgbmVjZXNzYXJ5IHRvIGVsaW1pbmF0ZSBwcm9ibGVtcyBcCitjYXVzZWQgYnkgdGhlc2Ugd29ya2Fyb3VuZHMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYzFjZTQyYzMzNGE2ZjVjY2NiMDI3NzU1NmEwNTNlMCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgeHByb3RvIGZpeGVzcHJvdG8geGV4dHByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhmaXhlcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk4NWI4NWY4YjkzODZjODVkZGNmZTEwNzM5MDZiNGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjNiZWMwODUwODRmYTNjYWFlZTUxODA0OTBkZDg3MWYxZWIyMDIwYmE5ZTliMzlhMzBmOTM2OTNmZmMzNDc2NyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2ZTMzYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWEZvbnQ6IFggRm9udCByYXN0ZXJpc2F0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhmb250IHByb3ZpZGVzIHZhcmlvdXMgc2VydmljZXMgZm9yIFggc2VydmVycywgbW9zdCBcCitub3RhYmx5IGZvbnQgc2VsZWN0aW9uIGFuZCByYXN0ZXJpc2F0aW9uICh0aHJvdWdoIGV4dGVybmFsIGxpYnJhcmllcyBcCitzdWNoIGFzIGZyZWV0eXBlKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE0NmM4MDQwZjJmNzM3YmNkMGM0MzVmZWIyYWIxYzJjIgorCitERVBFTkRTICs9ICJmcmVldHlwZSB4dHJhbnMgZm9udHNwcm90byBsaWJmb250ZW5jIHpsaWIiCitQUk9WSURFUyA9ICJ4Zm9udCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZm9udCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NmY3NmJhOTRiNGM5MDkyMzBiYWMxZTJkY2Q1NTFjNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzA4OTg1MjdjNzNmOTc1OGY1NTFiYmFiNjEyYWY2MTFiOGEwOTYyMjAyODI5NTY4ZDk0ZjNlZGY0ZDg2MDk4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjdjZGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZnRfMi4zLjIuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJYRnQ6IFggRnJlZVR5cGUgbGliYXJ5IgorCitERVNDUklQVElPTiA9ICJYZnQgd2FzIGRlc2lnbmVkIHRvIHByb3ZpZGUgZ29vZCBzdXBwb3J0IGZvciBzY2FsYWJsZSBcCitmb250cywgYW5kIHRvIGRvIHNvIGVmZmljaWVudGx5LiAgVW5saWtlIHRoZSBjb3JlIGZvbnRzIHN5c3RlbSwgaXQgXAorc3VwcG9ydHMgZmVhdHVyZXMgc3VjaCBhcyBhbnRpLWFsaWFzaW5nIGFuZCBzdWItcGl4ZWwgcmFzdGVyaXNhdGlvbi4gXAorUGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCBpdCBnaXZlcyBhcHBsaWNhdGlvbnMgZnVsbCBjb250cm9sIG92ZXIgdGhlIFwKK3dheSBnbHlwaHMgYXJlIHJlbmRlcmVkLCBtYWtpbmcgZmluZSB0eXBlc2V0dGluZyBhbmQgV1lTSVdJRyBkaXNwbGF5IFwKK3Bvc3NpYmxlLiBGaW5hbGx5LCBpdCBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHVzZSBmb250cyB0aGF0IGFyZSBub3QgXAoraW5zdGFsbGVkIHN5c3RlbS13aWRlIGZvciBkaXNwbGF5aW5nIGRvY3VtZW50cyB3aXRoIGVtYmVkZGVkIGZvbnRzLiAgWGZ0IFwKK2lzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGNvcmUgZm9udHMgc3lzdGVtOiB1c2FnZSBvZiBYZnQgcmVxdWlyZXMgXAorZmFpcmx5IGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRvb2xraXRzICh1c2VyLWludGVyZmFjZSBsaWJyYXJpZXMpLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBiOTBiNjBlYjMwZjY1ZmM5YzI2NzNkN2NmNTllMjQiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGxpYnhyZW5kZXIgZnJlZXR5cGUgZm9udGNvbmZpZyIKK1BST1ZJREVTID0gInhmdCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjMzMWIzYTJhM2ExYTc4YjViNDRjZmJkNDNmODZmY2ZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1YTNjODI0NzYxZGYzNTFjYTkxODI3YWMyMjEwOTA5NDNlZjI4YjI0ODU3MzQ4NjA1MGRlODlmNGJmY2RjNGMiCisKK1hPUkdfUE4gPSAibGliWGZ0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworcHl0aG9uICgpIHsKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18ke1BOfScsICcke01MUFJFRklYfWxpYnhmdDInKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aV8xLjcuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzAzM2EzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhpIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgWDExIHByb3RvY29sIHRvIHN1cHBvcnQgXAoraW5wdXQgZGV2aWNlcyBvdGhlciB0aGFuIHRoZSBjb3JlIFgga2V5Ym9hcmQgYW5kIHBvaW50ZXIuICBJdCBhbGxvd3MgXAorY2xpZW50IHByb2dyYW1zIHRvIHNlbGVjdCBpbnB1dCBmcm9tIHRoZXNlIGRldmljZXMgaW5kZXBlbmRlbnRseSBmcm9tIFwKK2VhY2ggb3RoZXIgYW5kIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgY29yZSBkZXZpY2VzLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xN2IwNjQ3ODlmYWI5MzZhMWM1OGM0ZTEzZDk2NWIwZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWElHZXREZXZGb2N1cy5jO2VuZGxpbmU9MjM7bWQ1PWNkZmIwZDQzNWEzM2VjNTdlYTBkMWU4ZTM5NWI3MjlmIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGlucHV0cHJvdG8gbGlieGZpeGVzIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhpIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWM0YTY5YzM0YjE5ZWMxZTQyMTJlODQ5NTQ5NTQ0Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmNmZmMyNjg2NjE4ZGMxODAzNzI1NjM2Y2Q5MmIzNjM0MmM1MTJkYzYwYTdhMzVjYmEzNGJmNzE5MmE0MjI0NCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGluZXJhbWFfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YzgwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhpbmVyYW1hOiBYaW5lcmFtYSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWGluZXJhbWEgaXMgYSBzaW1wbGUgbGlicmFyeSBkZXNpZ25lZCB0byBpbnRlcmZhY2UgdGhlIFwKK1hpbmVyYW1hIEV4dGVuc2lvbiBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBvdXRwdXQgXAorZGV2aWNlcyB3aGljaCBtYXkgYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBsb2dpY2FsIFggc2NyZWVuLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZjRmNjM0ZDE2NDNhMmU2MzhiYmEzZmNkMTljMjUzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWGluZXJhbWEuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTI1O21kNT1mY2VmMjczYmZiNjYzMzkyNTY0MTFkZDA2ZWE3OWMwMiIKKworREVQRU5EUyArPSAibGlieGV4dCB4aW5lcmFtYXByb3RvIgorUFJPVklERVMgPSAieGluZXJhbWEiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhpbmVyYW1hIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTMzNmRjNDZhZTNiZjVmODFjMjQ3ZjcxMzE0NjFlZmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2E0NTY5OWYxNzczMDk1YTNmODIxZTQ5MWNiZDVlMTBjODg3YzVhNWZjZTVkOGQzZmNlZDE1YzJmZjc2OThlMiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTY2YjU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBYS0Iga2V5bWFwIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJsaWJ4a2Jjb21tb24gaXMgYSBrZXltYXAgY29tcGlsZXIgYW5kIHN1cHBvcnQgbGlicmFyeSB3aGljaCBcCitwcm9jZXNzZXMgYSByZWR1Y2VkIHN1YnNldCBvZiBrZXltYXBzIGFzIGRlZmluZWQgYnkgdGhlIFhLQiBzcGVjaWZpY2F0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueGtiY29tbW9uLm9yZyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5NDU3YjE1NmUzMTU1OTcyYWJlYmNhYWFhMGNiNDM0IgorTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly94a2Jjb21tb24ub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTFmYWVhZmNjNjA5YzMwYWYzYTU2MWE5MWU4NDE1OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MGJkNzgyNDc0MmI5YTZmNTJhNmNmODBlMmNhZGQ2ZjUzNDljZjYwMGEzNThkMDgyNjA3NzI2MTViODlkMTljIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2NzIgorCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLGxpYnhjYiB4a2V5Ym9hcmQtY29uZmlnLCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmZpbGVfMS4wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTM0NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiWEtCOiBYIEtleWJvYXJkIEZpbGUgbWFuaXB1bGF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhrYmZpbGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHJlYWQgYW5kIG1hbmlwdWxhdGUgXAorZGVzY3JpcHRpb24gZmlsZXMgZm9yIFhLQiwgdGhlIFgxMSBrZXlib2FyZCBjb25maWd1cmF0aW9uIGV4dGVuc2lvbi4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThiZTczNjdmN2U1ZDYwNWE0MjZmNzZiYjM3ZDRkNjFmIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBrYnByb3RvIgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhNGNmZWFmMjRkYWIxYjk5MTkwMzQ1NWQ2ZDdkNDA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxODE3ZTA1MzA5NjE5NzVkOTUxM2I3NzM5NjBiNGVkZDI3NWY3ZDVjNzIyOTNkNWExNTFlZDRmNDJhZWIxNmEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzYmFlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlhtdSBhbmQgWG11dTogWCBNaXNjZWxsYW5lb3VzIFV0aWxpdHkgbGlicmFyaWVzIgorCitERVNDUklQVElPTiA9ICJUaGUgWG11IExpYnJhcnkgaXMgYSBjb2xsZWN0aW9uIG9mIG1pc2NlbGxhbmVvdXMgKHNvbWUgXAorbWlnaHQgc2F5IHJhbmRvbSkgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdXNlZnVsIGluIGJ1aWxkaW5nIFwKK3ZhcmlvdXMgYXBwbGljYXRpb25zIGFuZCB3aWRnZXRzLiBUaGlzIGxpYnJhcnkgaXMgcmVxdWlyZWQgYnkgdGhlIEF0aGVuYSBcCitXaWRnZXRzLiBBIHN1YnNldCBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgZG8gbm90IHJlbHkgb24gdGhlIEF0aGVuYSBcCitXaWRnZXRzIChsaWJYYXcpIG9yIFggVG9vbGtpdCBJbnN0cmluc2ljcyAobGliWHQpIGFyZSBwcm92aWRlZCBpbiBhIFwKK3NlY29uZCBsaWJyYXJ5LCBsaWJYbXV1LiIKKworCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZWYzZDhlNGU5YzQyMDA0ZjE5NDFmYTIyZjAxZGMxOCIKKworREVQRU5EUyArPSAibGlieHQgbGlieGV4dCIKK1BST1ZJREVTID0gInhtdSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYbXUiCisKK0xFQURfU09OQU1FID0gImxpYlhtdSIKKworUEFDS0FHRVMgPSsgImxpYnhtdXUiCisKK0ZJTEVTX2xpYnhtdXUgPSAiJHtsaWJkaXJ9L2xpYlhtdXUuc28uKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MWQ5MmFiNjI3ZGZhMDY1NjgwNzYwNDNmM2UwODllNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NTZlZGM3YzM4MzI1NGVlZjhiNGUxYjczM2MzYmYxZGMwNjFiNTIzYzlmOTgzM2FjNzA1ODM3OGI4MzQ5ZDBiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHBtXzMuNS4xMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ODc0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIKQEAgLTAsMCArMSwyNyBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKKyMgbGlieHBtIHJlcXVpcmVzIHhnZXR0ZXh0IHRvIGJ1aWxkCitpbmhlcml0IGdldHRleHQKKworU1VNTUFSWSA9ICJYcG06IFggUGl4bWFwIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYcG0gcHJvdmlkZXMgc3VwcG9ydCBhbmQgY29tbW9uIG9wZXJhdGlvbiBmb3IgdGhlIFhQTSBcCitwaXhtYXAgZm9ybWF0LCB3aGljaCBpcyBjb21tb25seSB1c2VkIGluIGxlZ2FjeSBYIGFwcGxpY2F0aW9ucy4gIFhQTSBpcyBcCithbiBleHRlbnNpb24gb2YgdGhlIG1vbm9jaHJvbWUgWEJNIGJpdG1hcCBzcGVjaWZpY2llZCBpbiB0aGUgWCBcCitwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTFmNDI3MGIwMTJlY2Q0YWIxYTE2NGY1ZjRlZDZjZjciCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnNtIGxpYnh0IgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcG0iCisKK1BBQ0tBR0VTID0rICJzeHBtIGN4cG0iCitGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorRklMRVNfc3hwbSA9ICIke2JpbmRpcn0vc3hwbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjc2OWVlMTJhNDM2MTFjZGViZDM4MDk0ZWFmODNmM2YwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1YmRhZmE1MWQxYWUzMDA4NmZhYzAxYWI4M2JlOGQ0N2ZlMTE3YjIzOGQzNDM3ZjhlOTY1NDM0MDkwZTA0MWMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmJhZTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmFuZHJfMS41LjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IEV4dGVuc2lvbiwgY2FsbGVkIFJhbmRSIFwKK2ZvciBzaG9ydCwgYnJpbmdzIHRoZSBhYmlsaXR5IHRvIHJlc2l6ZSwgcm90YXRlIGFuZCByZWZsZWN0IHRoZSByb290IFwKK3dpbmRvdyBvZiBhIHNjcmVlbi4gSXQgaXMgYmFzZWQgb24gdGhlIFggUmVzaXplIGFuZCBSb3RhdGUgRXh0ZW5zaW9uIGFzIFwKK3NwZWNpZmllZCBpbiB0aGUgUHJvY2VlZGluZ3Mgb2YgdGhlIDIwMDEgVXNlbml4IFRlY2huaWNhbCBDb25mZXJlbmNlIFwKK1tSQU5EUl0uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOWQxYTIxMThhNmNkNTcyNzUyMWRiOGU3YTJmZWU2OSIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgcmFuZHJwcm90byBsaWJ4cmVuZGVyIGxpYnhleHQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJhbmRyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDk3NjI4NjdlNDFjNmZkODEzZGE4ODBkOGExYmM5MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2Zjg2NDk1OWI3ZmMzNWRiMTE3NTRiMjcwZDcxMTA2ZWY1YjVjZjM2MzQyNmFhNTg1ODljYjhhYzgyNjZkZTU4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkZTA0MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYUmVuZGVyOiBYIFJlbmRlcmluZyBFeHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggUmVuZGVyaW5nIEV4dGVuc2lvbiAoUmVuZGVyKSBpbnRyb2R1Y2VzIGRpZ2l0YWwgXAoraW1hZ2UgY29tcG9zaXRpb24gYXMgdGhlIGZvdW5kYXRpb24gb2YgYSBuZXcgcmVuZGVyaW5nIG1vZGVsIHdpdGhpbiB0aGUgXAorWCBXaW5kb3cgU3lzdGVtLiBSZW5kZXJpbmcgZ2VvbWV0cmljIGZpZ3VyZXMgaXMgYWNjb21wbGlzaGVkIGJ5IFwKK2NsaWVudC1zaWRlIHRlc3NlbGxhdGlvbiBpbnRvIGVpdGhlciB0cmlhbmdsZXMgb3IgdHJhcGV6b2lkcy4gIFRleHQgaXMgXAorZHJhd24gYnkgbG9hZGluZyBnbHlwaHMgaW50byB0aGUgc2VydmVyIGFuZCByZW5kZXJpbmcgc2V0cyBvZiB0aGVtLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhiYzcxOTg2ZDNiOWIzNjM5ZjZkZmQ2ZmFjOGYxOTYiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHJlbmRlcnByb3RvIHhwcm90byB4ZG1jcCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcmVuZGVyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZGI5Mjk2MmIxMjRjYTNhODE0N2RhYWU0YWRiZDYyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzJmZTU3OTgwYTE0MDkyNDI2ZGZmY2QxZjJkOWRlMDk4N2I5ZDQwYWRlYTY2M2JkNzBkNjM0MmMwZTliZTFhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlc18xLjAuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNGM0NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJYUmVzOiBYIFJlc291cmNlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYUmVzIHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIFwKK3RoZSBSZXNvdXJjZSBleHRlbnNpb24gdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgUmVzb3VyY2UgZXh0ZW5zaW9uIGFsbG93cyBcCitmb3IgWCBjbGllbnRzIHRvIHNlZSBhbmQgbW9uaXRvciB0aGUgWCByZXNvdXJjZSB1c2FnZSBvZiB2YXJpb3VzIGNsaWVudHMgXAorKHBpeG1hcHMsIGV0IGFsKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjODk0NDFhOGRmMjYxYmRjNTY1ODc0NjVlMTNjN2ZhIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHJlc291cmNlcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJlcyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ1ZWYyOTIwNmE2YjU4MjU0YzgxYmVhMjhlYzZjOTVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ODk5MDU0YWE4N2Y4MWIxN2JlY2M2OGU4NjQ1YjI0MGYxNDA0NjRjZjkwYzQyNjE2ZWJiMjYzZWM1ZmEwZTUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2NybnNhdmVyXzEuMi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRlNWRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYc2NybnNhdmVyOiBYIFNjcmVlbiBTYXZlciBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggV2luZG93IFN5c3RlbSBwcm92aWRlcyBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUgXAoraW1hZ2Ugb24gYSBkaXNwbGF5IHNjcmVlbiBhZnRlciBhIHVzZXItc2V0dGFibGUgcGVyaW9kIG9mIGluYWN0aXZpdHkgdG8gXAorYXZvaWQgYnVybmluZyB0aGUgY2F0aG9kZSByYXkgdHViZSBwaG9zcGhvcnMuIEhvd2V2ZXIsIG5vIGludGVyZmFjZXMgYXJlIFwKK3Byb3ZpZGVkIGZvciB0aGUgdXNlciB0byBjb250cm9sIHRoZSBpbWFnZSB0aGF0IGlzIGRyYXduLiBUaGlzIGV4dGVuc2lvbiBcCithbGxvd3MgYW4gZXh0ZXJuYWwgXCJzY3JlZW4gc2F2ZXJcIiBjbGllbnQgdG8gZGV0ZWN0IHdoZW4gdGhlIGFsdGVybmF0ZSBcCitpbWFnZSBpcyB0byBiZSBkaXNwbGF5ZWQgYW5kIHRvIHByb3ZpZGUgdGhlIGdyYXBoaWNzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yMWZkMTU0ZWU3NTc4MTM2MzJhZGE4NzFhMzQxMTNmYiIKKworREVQRU5EUyArPSAibGlieGV4dCBzY3Juc2F2ZXJwcm90byIKK1BST1ZJREVTID0gImxpYnhzcyIKK1JSRVBMQUNFU18ke1BOfSA9ICJsaWJ4c3MiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhTY3JuU2F2ZXIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YTc3M2IxNjE2NWUzOWU5Mzg2NTBiY2M5MDI3YzFkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZmYxZWZhNzM0MWM3ZjM0YmNmOWIxN2M4OTY0OGQ2MzI1ZGRhYWUyMmUzOTA0ZTA5MTc5NGUwYjQ0MjZjZTFkIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNobWZlbmNlXzEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzNGIxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJTaGFyZWQgbWVtb3J5ICdTeW5jRmVuY2UnIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgbGlicmFyeSBvZmZlcnMgYSBDUFUtYmFzZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSBjb21wYXRpYmxlIFwKK3dpdGggdGhlIFggU3luY0ZlbmNlIG9iamVjdHMgdGhhdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzIFwKK3VzaW5nIGZpbGUgZGVzY3JpcHRvciBwYXNzaW5nLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDdlNTA4Y2EyODBmZGU5NzkwNmVhY2I3Nzg5MmMzYWMiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NjY2MmU3Njg5OTExMmMwZjk5ZTIyZjJmYzc3NWE3ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMjFiMmQxZmQ3OGMxZWZiZTFmMmMxNmRhZTFjYjIzZjhmZDIzMWRjZjg5MTQ2NWI4ZGViZTYzNmE5MDU0YjBjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTZjNzU2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgZml4ZXMgY29tcGlsYXRpb24gd2l0aCB4MzIgdG9vbGNoYWluLgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMQorCisKKy0tLSBsaWJYdC0xLjEuMS9pbmNsdWRlL1gxMS9YdG9zLmgueDMyCTIwMTEtMDItMDggMDc6NTY6NDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliWHQtMS4xLjEvaW5jbHVkZS9YMTEvWHRvcy5oCTIwMTEtMTEtMzAgMTc6MTk6MjcuNDczMzQ5NzcwIC0wODAwCitAQCAtNjIsNyArNjIsNyBAQCBTT0ZUV0FSRS4KKyAgICAgZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgXAorICAgICBkZWZpbmVkKF9fczM5MHhfXykgfHwgXAorICAgICAoZGVmaW5lZChfX2hwcGFfXykgJiYgZGVmaW5lZChfX0xQNjRfXykpIHx8IFwKKy0gICAgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpIHx8IFwKKysgICAgKChkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkpICYmIGRlZmluZWQoX19MUDY0X18pKSB8fCBcCisgICAgIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgXAorICAgICAoZGVmaW5lZChzZ2kpICYmIChfTUlQU19TWkxPTkcgPT0gNjQpKQorICNkZWZpbmUgTE9ORzY0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0XzEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWQwYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIlh0OiBYIFRvb2xraXQgSW50cmluc2ljcyBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgSW50cmluc2ljcyBhcmUgYSBwcm9ncmFtbWluZyBsaWJyYXJ5IHRhaWxvcmVkIHRvIHRoZSBcCitzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB1c2VyIGludGVyZmFjZSBjb25zdHJ1Y3Rpb24gd2l0aGluIGEgbmV0d29yayBcCit3aW5kb3cgc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIFggV2luZG93IFN5c3RlbS4gVGhlIEludHJpbnNpY3MgYW5kIGEgXAord2lkZ2V0IHNldCBtYWtlIHVwIGFuIFggVG9vbGtpdC4gVGhlIEludHJpbnNpY3MgcHJvdmlkZSB0aGUgYmFzZSBcCittZWNoYW5pc20gbmVjZXNzYXJ5IHRvIGJ1aWxkIGEgd2lkZSB2YXJpZXR5IG9mIGludGVyb3BlcmF0aW5nIHdpZGdldCBcCitzZXRzIGFuZCBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudHMuIFRoZSBJbnRyaW5zaWNzIGFyZSBhIGxheWVyIG9uIHRvcCBvZiBcCitYbGliLCB0aGUgQyBMaWJyYXJ5IFggSW50ZXJmYWNlLiBUaGV5IGV4dGVuZCB0aGUgZnVuZGFtZW50YWwgXAorYWJzdHJhY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBYIFdpbmRvdyBTeXN0ZW0gd2hpbGUgc3RpbGwgcmVtYWluaW5nIFwKK2luZGVwZW5kZW50IG9mIGFueSBwYXJ0aWN1bGFyIHVzZXIgaW50ZXJmYWNlIHBvbGljeSBvciBzdHlsZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY1NjViMWUwMDk0ZWExY2FhZTA5NzFjYzQwMzVmMzQzIgorCisKK0RFUEVORFMgKz0gInV0aWwtbGludXggbGlieGNiIGxpYnNtIHZpcnR1YWwvbGlieDExIGticHJvdG8gbGlieGRtY3AiCitQUk9WSURFUyA9ICJ4dCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYdCIKKworU1JDX1VSSSArPSAgImZpbGU6Ly9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXhrYiIKKworU1JDX1VSSVttZDVzdW1dID0gIjhmNWI1NTc2ZmJhYmJhMjlhMDVmM2NhMjIyNmY3NGQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2ZWViNmJlNzgwMjExZmRkOThjNTEwOTI4NjYxOGY2NzA3NzEyMjM1ZmRkMTlkZjRjZTFlNjk1NGYzNDlmMWEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dHN0XzEuMi4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBiY2YzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYVGVzdDogWCBUZXN0IGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGlzIGV4dGVuc2lvbiBpcyBhIG1pbmltYWwgc2V0IG9mIGNsaWVudCBhbmQgc2VydmVyIFwKK2V4dGVuc2lvbnMgcmVxdWlyZWQgdG8gY29tcGxldGVseSB0ZXN0IHRoZSBYMTEgc2VydmVyIHdpdGggbm8gdXNlciBcCitpbnRlcnZlbnRpb24uIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJiNGY4OTk3MmMzODY5ZjYxN2Y2MWMxYTc5YWQxOTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9YVGVzdC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MzI7bWQ1PWIxYzhjOWRmZjg0MmI0ZDViODljYTVmYTMyYzQwZTk5IgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHJlY29yZHByb3RvIGlucHV0cHJvdG8gbGlieGkiCitQUk9WSURFUyA9ICJ4dHN0IgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYdHN0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjVjNmIzNjZhYzNkYzdhMTJjNWQ3OTgxNmNlOTZhNTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWYwYTdmZmQ1NzdlNWYxYTI1YjE2NjNiMzc1Njc5NTI5NjYzYTE4ODAxNTFiZWFhNzNlOTE4NmM4MzA5ZjZkOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJiOGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZfMS4wLjEwLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlh2IHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIHRoZSBcCitYIFZpZGVvIGV4dGVuc2lvbiB0byB0aGUgWCBwcm90b2NvbC4gVGhlIFggVmlkZW8gZXh0ZW5zaW9uIGFsbG93cyBmb3IgXAorYWNjZWxlcmF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuICBIYXJkd2FyZSBhZGFwdG9ycyBhcmUgZXhwb3NlZCB0byBcCitjbGllbnRzLCB3aGljaCBtYXkgZHJhdyBpbiBhIG51bWJlciBvZiBjb2xvdXJzcGFjZXMsIGluY2x1ZGluZyBZVVYuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04MjdkYTlhZmFiMWY3MjdmMmE2NjU3NDYyOWUwZjM5YyIKKworREVQRU5EUyArPSAibGlieGV4dCB2aWRlb3Byb3RvIgorCitYT1JHX1BOID0gImxpYlh2IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBhZjQ5ZDdkNzU4Yjk5MGU2ZmVmNjI5NzIyZDRhY2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTVmZTkyZjg2ODZjZTg2MTJlMmMxYmZhZjU4YzA1NzcxNTUzNDQxOWRhNzAwYmRhOGQ1MTdiMWQ5NzkxNDUyNSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2bWNfMS4wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTg0OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiWHZNQzogWCBWaWRlbyBNb3Rpb24gQ29tcGVuc2F0aW9uIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYdk1DIGV4dGVuZHMgdGhlIFggVmlkZW8gZXh0ZW5zaW9uIChYdikgYW5kIGVuYWJsZXMgXAoraGFyZHdhcmUgcmVuZGVyZWQgbW90aW9uIGNvbXBlbnNhdGlvbiBzdXBwb3J0LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGEyMDdmMDhkNDk2MTQ4OWM1NTA0NmM5YTVlNTAwZGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd3JhcHBlci9Ydk1DV3JhcHBlci5jO2VuZGxpbmU9MjY7bWQ1PTUxNTFkYWE4MTcyYTNmMWJiMGNiMGUwZmYxNTdkOWRlIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnh2IHZpZGVvcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHZNQyIKKworU1JDX1VSSVttZDVzdW1dID0gImViYTZiNzM4ZWQ1ZmRjZDhmNDIwM2Q3YzhhNDcwYzc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3MDNkN2RmZjZmZmMxODRmMTczNWNhNWQ0ZWI5ZGJiNDAyYjUyMmUwOGUwMDhmMmY5NmFlZTE2YzQwYTU3NTYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2ZGdhXzEuMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWEzOTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LURHQTogWEZyZWU4NiBEaXJlY3QgR3JhcGhpY3MgQWNjZXNzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYeGY4NmRnYSBwcm92aWRlcyB0aGUgWEZyZWU4Ni1ER0EgZXh0ZW5zaW9uLCB3aGljaCBcCithbGxvd3MgZGlyZWN0IGdyYXBoaWNzIGFjY2VzcyB0byBhIGZyYW1lYnVmZmVyLWxpa2UgcmVnaW9uLCBhbmQgYWxzbyBcCithbGxvd3MgcmVsYXRpdmUgbW91c2UgcmVwb3J0aW5nLCBldCBhbC4gIEl0IGlzIG1haW5seSB1c2VkIGJ5IGdhbWVzIGFuZCBcCitlbXVsYXRvcnMgZm9yIGdhbWVzLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWJiOTlhYzEyNWY4NGY0MjRhNDI3ODE1Mzk4OGUzMmYiCisKK0RFUEVORFMgKz0gImxpYnhleHQgeGY4NmRnYXByb3RvIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDdkZDliOWRmMzM2YjdkZDQwMjhiNmI1NjU0MmZmMmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGVlY2Q0YjZjMWRmOWEzNzA0YzA0NzMzYzJmNGZhOTNlZjQ2OWI1NTAyOGFmNTUxMGIyNTgxOGUyNDU2Yzc3ZSIKKworWE9SR19QTiA9ICJsaWJYeGY4NmRnYSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjZmMWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZtaXNjXzEuMC4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiWEZyZWU4Ni1NaXNjOiBYRnJlZTg2IG1pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYRnJlZTg2LU1pc2MgZXh0ZW5zaW9uLCBwcm92aWRlcyBhIG1lYW5zIHRvIGFjY2VzcyBcCitpbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzcGVjaWZpYyB0byB0aGUgWEZyZWU4Ni9Yb3JnIEREWC4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3YzkxZWNjNDM1YmQzZDJiZmFkODY4OTE0Yzk0YjQ1IgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZtaXNjcHJvdG8iCitQUk9WSURFUyA9ICJ4eGY4Nm1pc2MiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHhmODZtaXNjIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmJjMGJmNzg5MDlmZDcxMDIxYzQ2NmM3OTNkNDM4NWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTYzZjQyMDA4NjJlZmQzMzM0YzMzYTY2OWUwYTBhYWU1YmFiMzFmMzk5OGRiNzViODdhOTlhNjk3Y2MyNmI1YiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZ2bV8xLjEuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmODdkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJYRnJlZTg2LVZNOiBYRnJlZTg2IHZpZGVvIG1vZGUgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlh4Zjg2dm0gcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBcCitYRnJlZTg2LVZpZE1vZGVFeHRlbnNpb24gZXh0ZW5zaW9uLCB3aGljaCBhbGxvd3MgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBcCitnZXQgYW5kIHNldCB2aWRlbyBtb2RlIHRpbWluZ3MgaW4gZXh0ZW5zaXZlIGRldGFpbC4gIEl0IGlzIHVzZWQgYnkgdGhlIFwKK3h2aWR0dW5lIHByb2dyYW0gaW4gcGFydGljdWxhci4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZhMGI5YzQ2MmQ4ZjJmMTNlYmEyNjQ5MmQ0MmVhNjNkIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZ2aWRtb2RlcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHhmODZ2bSIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5OGI4ZmZmODJkZjE3MzA0ZGZkYjVmZTQwNjZmZTNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmZWUyN2Y5M2M1ZjMxYzBhZDU4Mjg1MmMwZmIzNmQ1MGU0ZGU3Y2Q1ODVmY2Y2NTVlMjc4YTYzM2Q4NWNkNTciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTY5ZGNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorRnJvbSBhMGY1M2UxZGJiMzg1MWJiMGYwZWZjZmRiZDU2NWIwNWU0YmU5Y2FjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVGh1LCAyMyBBdWcgMjAxMiAxODoxMDo1NyArMDIwMAorU3ViamVjdDogW1BBVENIIDEvMl0gQVJNOiBxZW11IHJlbGF0ZWQgd29ya2Fyb3VuZHMgaW4gY3B1IGZlYXR1cmVzIGRldGVjdGlvbgorIGNvZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyB3YXMgcG9ydGVkIGZyb20gbWV0YS1vZSdzIHBhdGNoIFsxXS4gVGhlIG9yaWdpbmFsIHBpeG1hbiBwYXRjaCBpcyBmb3VuZAorYXQgWzJdLgorCitbMV0gaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9tZXRhLW9wZW5lbWJlZGRlZC90cmVlL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4tMC4yNi4yLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaAorWzJdIGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvcGl4bWFuLzIwMTEtSmFudWFyeS8wMDA5MDYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXSBxZW11IGZpeAorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBwaXhtYW4vcGl4bWFuLWFybS5jIHwgICA4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9waXhtYW4vcGl4bWFuLWFybS5jIGIvcGl4bWFuL3BpeG1hbi1hcm0uYworaW5kZXggMjMzNzRlNC4uZDk4YmRhNiAxMDA2NDQKKy0tLSBhL3BpeG1hbi9waXhtYW4tYXJtLmMKKysrKyBiL3BpeG1hbi9waXhtYW4tYXJtLmMKK0BAIC0xMjksMTYgKzEyOSwzNSBAQCBkZXRlY3RfY3B1X2ZlYXR1cmVzICh2b2lkKQorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVsZi5oPgorIAorKy8qCisrICogVGhlIHdob2xlIENQVSBjYXBhYmlsaXRpZXMgZGV0ZWN0aW9uIGlzIGEgYml0IHVnbHk6IHdoZW4gcnVubmluZyBpbgorKyAqIHVzZXJzcGFjZSBxZW11LCB3ZSBzZWUgL3Byb2Mvc2VsZi9hdXh2IGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBUbyBtYWtlCisrICogZXZlcnl0aGluZyBldmVuIHdvcnNlLCB0aGUgc2l6ZSBvZiBlYWNoIHZhbHVlIGlzIDY0LWJpdCB3aGVuIHJ1bm5pbmcKKysgKiBvbiBhIDY0LWJpdCBob3N0IHN5c3RlbS4gU28gdGhlIGRhdGEgaXMgdG90YWxseSBib2d1cyBiZWNhdXNlIHdlIGV4cGVjdAorKyAqIDMyLWJpdCB2YWx1ZXMuIEFzIEFUX1BMQVRGT1JNIHZhbHVlIGlzIHVzZWQgYXMgYSBwb2ludGVyLCBpdCBtYXkgY2F1c2UKKysgKiBzZWdmYXVsdCAobnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHg4Ni02NCBob3N0KS4gU28gaW4gb3JkZXIgdG8gYmUKKysgKiBvbiBhIHNhZmUgc2lkZSwgd2UgcmVxdWlyZSB0aGF0IEFUX1BMQVRGT1JNIHZhbHVlIGlzIGZvdW5kIG9ubHkgb25jZSwKKysgKiBhbmQgaXQgaGFzIG5vbi16ZXJvIHZhbHVlICh0aGlzIGlzIHN0aWxsIG5vdCB0b3RhbGx5IHJlbGlhYmxlIGZvciBhIGJpZworKyAqIGVuZGlhbiA2NC1iaXQgaG9zdCBzeXN0ZW0gcnVubmluZyBxZW11IGFuZCBtYXkgdGhlb3JldGljYWxseSBmYWlsKS4KKysgKi8KKysjZGVmaW5lIEFSTV9IV0NBUF9WRlAgNjQKKysjZGVmaW5lIEFSTV9IV0NBUF9JV01NWFQgNTEyCisrI2RlZmluZSBBUk1fSFdDQVBfTkVPTiA0MDk2CisrCisgc3RhdGljIGFybV9jcHVfZmVhdHVyZXNfdAorIGRldGVjdF9jcHVfZmVhdHVyZXMgKHZvaWQpCisgeworICAgICBhcm1fY3B1X2ZlYXR1cmVzX3QgZmVhdHVyZXMgPSAwOworICAgICBFbGYzMl9hdXh2X3QgYXV4OworICAgICBpbnQgZmQ7CisrICAgIHVpbnQzMl90IGh3Y2FwID0gMDsKKysgICAgY29uc3QgY2hhciAqcGxhdCA9IE5VTEw7CisrICAgIGludCBwbGF0X2NudCA9IDA7CisgCisgICAgIGZkID0gb3BlbiAoIi9wcm9jL3NlbGYvYXV4diIsIE9fUkRPTkxZKTsKKyAgICAgaWYgKGZkID49IDApCitAQCAtMTQ3LDMyICsxNjYsNjEgQEAgZGV0ZWN0X2NwdV9mZWF0dXJlcyAodm9pZCkKKyAJeworIAkgICAgaWYgKGF1eC5hX3R5cGUgPT0gQVRfSFdDQVApCisgCSAgICB7CistCQl1aW50MzJfdCBod2NhcCA9IGF1eC5hX3VuLmFfdmFsOworLQorLQkJLyogaGFyZGNvZGUgdGhlc2UgdmFsdWVzIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBzcGVjaWZpYworLQkJICogdmVyc2lvbnMgb2YgdGhlIGh3Y2FwIGhlYWRlciwgZS5nLiBIV0NBUF9ORU9OCistCQkgKi8KKy0JCWlmICgoaHdjYXAgJiA2NCkgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fVkZQOworLQkJaWYgKChod2NhcCAmIDUxMikgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fSVdNTVhUOworLQkJLyogdGhpcyBmbGFnIGlzIG9ubHkgcHJlc2VudCBvbiBrZXJuZWwgMi42LjI5ICovCistCQlpZiAoKGh3Y2FwICYgNDA5NikgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fTkVPTjsKKysJCWh3Y2FwID0gYXV4LmFfdW4uYV92YWw7CisgCSAgICB9CisgCSAgICBlbHNlIGlmIChhdXguYV90eXBlID09IEFUX1BMQVRGT1JNKQorIAkgICAgeworLQkJY29uc3QgY2hhciAqcGxhdCA9IChjb25zdCBjaGFyKikgYXV4LmFfdW4uYV92YWw7CistCistCQlpZiAoc3RybmNtcCAocGxhdCwgInY3bCIsIDMpID09IDApCisrCQlwbGF0ID0gKGNvbnN0IGNoYXIqKSBhdXguYV91bi5hX3ZhbDsKKysJCXBsYXRfY250Kys7CisrCSAgICB9CisrCX0KKysJY2xvc2UgKGZkKTsKKysJaWYgKHBsYXQgPT0gTlVMTCB8fCBwbGF0X2NudCAhPSAxIHx8ICpwbGF0ICE9ICd2JykKKysJeworKwkgICAgLyoKKysJICAgICAqIFNvbWV0aGluZyBzZWVtcyB0byBiZSByZWFsbHkgd3JvbmcsIG1vc3QgbGlrZWx5IHdlIGFyZQorKwkgICAgICogcnVubmluZyB1bmRlciBxZW11LiBMZXQncyB1c2UgbWFjaGluZSB0eXBlIGZyb20gInVuYW1lIiBmb3IKKysJICAgICAqIENQVSBjYXBhYmlsaXRpZXMgZGV0ZWN0aW9uOgorKwkgICAgICogaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3FlbXUtZGV2ZWwgYXQgbm9uZ251Lm9yZy9tc2cyMjIxMi5odG1sCisrCSAgICAgKi8KKysJICAgIHN0cnVjdCB1dHNuYW1lIHU7CisrCSAgICBod2NhcCA9IDA7IC8qIGNsZWFyIGh3Y2FwLCBiZWNhdXNlIGl0IGlzIGJvZ3VzICovCisrCSAgICBpZiAodW5hbWUgKCZ1KSA9PSAwKQorKwkgICAgeworKwkJaWYgKHN0cmNtcCAodS5tYWNoaW5lLCAiYXJtdjdsIikgPT0gMCkKKysJCXsKKyAJCSAgICBmZWF0dXJlcyB8PSAoQVJNX1Y3IHwgQVJNX1Y2KTsKKy0JCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2NmwiLCAzKSA9PSAwKQorKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9WRlA7ICAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgdmZwICovCisrCQkgICAgaHdjYXAgfD0gQVJNX0hXQ0FQX05FT047IC8qIHFlbXUgaXMgc3VwcG9zZWQgdG8gZW11bGF0ZSBuZW9uICovCisrCQl9CisrCQllbHNlIGlmIChzdHJjbXAgKHUubWFjaGluZSwgImFybXY2bCIpID09IDApCisrCQl7CisgCQkgICAgZmVhdHVyZXMgfD0gQVJNX1Y2OworKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9WRlA7ICAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgdmZwICovCisrCQl9CisgCSAgICB9CisgCX0KKy0JY2xvc2UgKGZkKTsKKysJZWxzZSBpZiAoc3RybmNtcCAocGxhdCwgInY3bCIsIDMpID09IDApCisrCXsKKysJICAgIGZlYXR1cmVzIHw9IChBUk1fVjcgfCBBUk1fVjYpOworKwl9CisrCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2NmwiLCAzKSA9PSAwKQorKwl7CisrCSAgICBmZWF0dXJlcyB8PSBBUk1fVjY7CisrCX0KKyAgICAgfQorIAorKyAgICAvKiBoYXJkY29kZSB0aGVzZSB2YWx1ZXMgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIHNwZWNpZmljCisrICAgICAqIHZlcnNpb25zIG9mIHRoZSBod2NhcCBoZWFkZXIsIGUuZy4gSFdDQVBfTkVPTgorKyAgICAgKi8KKysgICAgaWYgKChod2NhcCAmIEFSTV9IV0NBUF9WRlApICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fVkZQOworKyAgICBpZiAoKGh3Y2FwICYgQVJNX0hXQ0FQX0lXTU1YVCkgIT0gMCkKKysgICAgICAgIGZlYXR1cmVzIHw9IEFSTV9JV01NWFQ7CisrICAgIC8qIHRoaXMgZmxhZyBpcyBvbmx5IHByZXNlbnQgb24ga2VybmVsIDIuNi4yOSAqLworKyAgICBpZiAoKGh3Y2FwICYgQVJNX0hXQ0FQX05FT04pICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fTkVPTjsKKysKKyAgICAgcmV0dXJuIGZlYXR1cmVzOworIH0KKyAKKy0tIAorMS43LjYuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyYTU3MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9hc21faW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGaXhlcyBlcnJvcnMgbGlrZQorCitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIC5saWJzL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK2l0IHdvcmtzIHdpdGggZ2xpYmMgYmVjYXVzZSBpdCB1c2VzIGdjYyBmaXhlZC1oZWFkZXJzIGJ1dCB0aGF0cyBub3QgcmlnaHQuCisKK1dlIG1vdmUgdGhlIGluY2x1ZGUgdW5kZXIgQyBibG9jaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLXByaXZhdGUuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBpeG1hbi0wLjMyLjYub3JpZy9waXhtYW4vcGl4bWFuLXByaXZhdGUuaAorKysrIHBpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1wcml2YXRlLmgKK0BAIC0xLDQgKzEsMyBAQAorLSNpbmNsdWRlIDxmbG9hdC5oPgorIAorICNpZm5kZWYgUElYTUFOX1BSSVZBVEVfSAorICNkZWZpbmUgUElYTUFOX1BSSVZBVEVfSAorQEAgLTE3LDYgKzE2LDggQEAKKyAKKyAjaWZuZGVmIF9fQVNTRU1CTEVSX18KKyAKKysjaW5jbHVkZSA8ZmxvYXQuaD4KKysKKyAjaWZuZGVmIFBBQ0tBR0UKKyAjICBlcnJvciBjb25maWcuaCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSBwaXhtYW4tcHJpdmF0ZS5oCisgI2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE1ZmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitSZXZlcnQgYSBjb21taXQgaW4gcGl4bWFuIDAuMzIuNiB3aGljaCBicmVha3MgY29tcGxpYXRpb24gb24gTUlQUyBtYWNoaW5lcyB3aXRoCitlcnJvcnMgc3VjaCBhczoKKworcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLlM6NDI2NzoKK0Vycm9yOiBpbnZhbGlkIG9wZXJhbmRzIGBtZmxvICQxNCwkYWMzJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLSBiL3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uaAorKysrIGEvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5oCitAQCAtNzIsMTAgKzcyLDcgQEAKKyAjZGVmaW5lIExFQUZfTUlQUzMyUjIoc3ltYm9sKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLmdsb2JsICBzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLmFsaWduICAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0jaWZkZWYgX19FTEZfXworLSAgICAgICAgICAgICAgICAuaGlkZGVuIHN5bWJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAudHlwZSAgIHN5bWJvbCwgQGZ1bmN0aW9uOyAgICAgICAgICAgICAgXAorLSNlbmRpZgorICAgICAgICAgICAgICAgICAuZW50ICAgIHN5bWJvbCwgMDsgICAgICAgICAgICAgICAgICAgICAgXAorIHN5bWJvbDogICAgICAgICAuZnJhbWUgIHNwLCAwLCByYTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAuc2V0ICAgIHB1c2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlNTliNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJQaXhtYW46IFBpeGVsIE1hbmlwdWxhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJQaXhtYW4gcHJvdmlkZXMgYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgcGl4ZWwgcmVnaW9ucyBcCistLSBhIHNldCBvZiBZLVggYmFuZGVkIHJlY3RhbmdsZXMsIGltYWdlIGNvbXBvc2l0aW5nIHVzaW5nIHRoZSBcCitQb3J0ZXIvRHVmZiBtb2RlbCBhbmQgaW1wbGljaXQgbWFzayBnZW5lcmF0aW9uIGZvciBnZW9tZXRyaWMgcHJpbWl0aXZlcyBcCitpbmNsdWRpbmcgdHJhcGV6b2lkcywgdHJpYW5nbGVzLCBhbmQgcmVjdGFuZ2xlcy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwOTZjNzY5YWUwY2JiNWZjYjk0ZWM0NjhiZTExYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1tYXRyaXguYztlbmRsaW5lPTI1O21kNT1iYTZlODc2OWJmYWFlZTJjNDE2OTg3NTVhZjA0YzRiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9waXhtYW4vcGl4bWFuLWFybS1uZW9uLWFzbS5oO2VuZGxpbmU9MjQ7bWQ1PTlhOWNjMWU1MWFiYmYxZGE1OGY0ZDk1MjhlYzlkNDliIFwKKyAgICAgICAgICAgICAgICAgICAiCitERVBFTkRTICs9ICJ6bGliIGxpYnBuZyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEUgPSAiMSIKKworSVdNTVhUID0gIi0tZGlzYWJsZS1hcm0taXdtbXh0IgorTE9PTkdTT05fTU1JID0gIi0tZGlzYWJsZS1sb29uZ3Nvbi1tbWkiCitORU9OID0gIiAtLWRpc2FibGUtYXJtLW5lb24gIgorTkVPTl9jbGFzcy1uYXRpdmVzZGsgPSAiIC0tZGlzYWJsZS1hcm0tbmVvbiAiCitORU9OX2FybXY3YSA9ICIgIgorTkVPTl9hcm12N2EtdmZwLW5lb24gPSAiICIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGsgJHtJV01NWFR9ICR7TE9PTkdTT05fTU1JfSAke05FT059IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZ3RrIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2ggXAorCSAgICBmaWxlOi8vYXNtX2luY2x1ZGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGE5ZThmMTQ3NDNhMzljZjMwMzgwM2YzNjljMWYzNDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjAxZmMwZDdkNmJjMDAxNzQ5NmYyYmQyN2IzY2ExNDIyNGFlYTBkZjZiNjI0YzVlZTJkYzAzMDdhNGZmMTRhNCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtaW1hZ2VfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0NjRiNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0RFUEVORFMgKz0gInhjYi11dGlsIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2ltYWdlL3hjYl9pbWFnZS5jO2VuZGxpbmU9MjQ7bWQ1PWVhZmRmOTY1Y2ZiODk5NTVmZGVkZjc1MDU0MjIzZmI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2ltYWdlL3hjYl9pbWFnZS5oO2JlZ2lubGluZT00O2VuZGxpbmU9Mjc7bWQ1PTQ4Y2QyNWFlNTVlN2RlNTI1ZmUxZTFhM2E3NjcyZTFjIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDhmZThmZmVjYzhkNGUzN2MwYWRlNzkwNmIzZjRjODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmRiOTZhMzdkNzg4MzFkNjQzNTM4ZGQxYjU5NWQ3ZDcxMmUwNGJkY2NmODg5NmE1ZTE4Y2UwZjM5OGVhMmZmYyIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1rZXlzeW1zXzAuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2E2NGVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8va2V5c3ltcy9rZXlzeW1zLmM7ZW5kbGluZT0zMDttZDU9MmY4ZGUwMjNlZDgyM2JiOTJmMGI0NzkwMDU3NGVhOWUgXAorCQkJCQkiCitTUkNfVVJJW21kNXN1bV0gPSAiMTAyMjI5MzA4M2VlYzllNjJkNTY1OTI2MWMyOWUzNjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGVmODQ5MGZmMWRlZGU1MmI3ZGU1MzMxNTg1NDdmOGI0NTRiMjQxYWEzZTRkY2NhMzY5NTA3ZjY2ZjIxNmRkOSIKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1yZW5kZXJ1dGlsXzAuMy45LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMyMmU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3JlbmRlcnV0aWwvZ2x5cGguYztlbmRsaW5lPTI0O21kNT1jNTE3YzQ4M2I4ZDcyNjIzNGVjOTRmOTE2OTIzNjY2MSBcCisJCQkJCWZpbGU6Ly9yZW5kZXJ1dGlsL3V0aWwuYztlbmRsaW5lPTIwO21kNT02ZTBiZmM0NGZiMTMyOThjMGY0Njk0ZWI3MGRjODBkNCBcCisJCQkJCWZpbGU6Ly9yZW5kZXJ1dGlsL3hjYl9yZW5kZXJ1dGlsLmg7ZW5kbGluZT0yNDttZDU9ZDBkZGFiMzA1MmRkNDk0OWM5M2NmY2IwODkxYzk2ZGYgXAorCQkJCQkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjhiMTE5Yzk0ZGE5MTBlMTI5MWYzZmZhYjkxMDE5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNmU5N2U0OGZiMTI4NmQ2Mzk0ZGRkYjFjMTczMmYwMDIyN2M3MGJkMWJlZGI3ZDFhY2FiZWZkZDM0MGJlYTViIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC13bV8wLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYxMzgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ld21oL2V3bWguYy5tNDtlbmRsaW5lPTI3O21kNT02M2ZkODA1NTJkN2RjODg2ZjRlYjI2NzYxMGQ1YmI5ZCBcCisJCQkJCWZpbGU6Ly9ld21oL3hjYl9ld21oLmgubTQ7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMDttZDU9NzNiNTg5ZjkwZWY5MGI0YTQzOTk4OTU1ZGFhZDVjZDggXAorCQkJCQlmaWxlOi8vaWNjY20vaWNjY20uYztlbmRsaW5lPTI4O21kNT1lMmIzMjQwYTBjMTk3ZTg5NzdhZGRlMmE1Y2YxOGQ1MCBcCisJCQkJCWZpbGU6Ly9pY2NjbS94Y2JfaWNjY20uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMxO21kNT0zOTM3NzJiN2IwN2I5ODY4ZDQ3OWQ1MzgyMzhjMWQ4YSBcCisJCQkJCSIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3YjE5YTFjZDdiZmNiNjVhMjRlMzZjMzAwZTAzMTI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI4YmY4MTc5NjQwZWFhODkyNzZkMmIwZjFjZTQyODUxMDNkMTM2YmU2Yzk4MjYyYjYxNTFhYWVlMWQzYzJhM2YiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkMDRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLmluYwpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSB4Y2ItdXRpbCBtb2R1bGUgcHJvdmlkZXMgYSBudW1iZXIgb2YgbGlicmFyaWVzIHdoaWNoIFwKK3NpdCBvbiB0b3Agb2YgbGlieGNiLCB0aGUgY29yZSBYIHByb3RvY29sIGxpYnJhcnksIGFuZCBzb21lIG9mIHRoZSBcCitleHRlbnNpb24gbGlicmFyaWVzLiBUaGVzZSBleHBlcmltZW50YWwgbGlicmFyaWVzIHByb3ZpZGUgY29udmVuaWVuY2UgXAorZnVuY3Rpb25zIGFuZCBpbnRlcmZhY2VzIHdoaWNoIG1ha2UgdGhlIHJhdyBYIHByb3RvY29sIG1vcmUgdXNhYmxlLiBTb21lIFwKK29mIHRoZSBsaWJyYXJpZXMgYWxzbyBwcm92aWRlIGNsaWVudC1zaWRlIGNvZGUgd2hpY2ggaXMgbm90IHN0cmljdGx5IFwKK3BhcnQgb2YgdGhlIFggcHJvdG9jb2wgYnV0IHdoaWNoIGhhdmUgdHJhZGl0aW9uYWxseSBiZWVuIHByb3ZpZGVkIGJ5IFwKK1hsaWIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvWGNiVXRpbC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworTElDRU5TRSA9ICJNSVQiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCisKK0RFUEVORFMgPSAibGlieGNiIgorREVQRU5EUyArPSAiZ3BlcmYtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWxfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2ZjA3YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMveGNiX2F1eC5jO2VuZGxpbmU9MzA7bWQ1PWFlMzA1YjljMmEzOGY5YmEyNzA2MDE5MTA0NmE2NDYwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy94Y2JfZXZlbnQuaDtlbmRsaW5lPTI3O21kNT02MjdiZTM1NWFlZTU5ZTFiOGFkZTgwZDViZDkwZmFkOSIKKworU1JDX1VSSVttZDVzdW1dID0gIjJlOTdmZWVkODE5MTk0NjVhMDRjY2M3MWU0MDczMzEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2ZTQ5NDY5Y2IzYjU5NGFmMWQzMzE3NmNkNzU2NWRlZjJiZTNmYThiZTQzNzFkNjIyNzFmYWJiNWVhZTUwZTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxNjk5MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xNS5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIktleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggV2luZG93IgorCitERVNDUklQVElPTiA9ICJUaGUgbm9uLWFyY2gga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBcCitXaW5kb3cuICBUaGUgZ29hbCBpcyB0byBwcm92aWRlIHRoZSBjb25zaXN0ZW50LCB3ZWxsLXN0cnVjdHVyZWQsIFwKK2ZyZXF1ZW50bHkgcmVsZWFzZWQgb3BlbiBzb3VyY2Ugb2YgWCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGEgZm9yIFggXAorV2luZG93IFN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuICBUaGUgcHJvamVjdCBpcyB0YXJnZXRlZCB0byBYS0ItYmFzZWQgXAorc3lzdGVtcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9YS2V5Ym9hcmRDb25maWciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhrZXlib2FyZC1jb25maWciCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGU3ZjIxY2E3ZGI5NzVjNjM0NjdkMmU3NjI0YTEyZjkiCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9kYXRhL3hrZXlib2FyZC1jb25maWcvJHtCUE59LSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiNGFmMWRlZWI3YzVmNGNhZDYyZTY1OTU3ZDk4ZDY3NTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGU0NDNjZjdjYTJmMGI0MDg0NjQ3MmMwMjk2NDdhMDU5MzNmYzcwNWQ2MTFlMTQ3OGM0ZGI4YTQ4YTZmMzhiZiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIHZpcnR1YWwvZ2V0dGV4dCB1dGlsLW1hY3JvcyBsaWJ4c2x0LW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC14a2ItcnVsZXMtc3ltbGluaz14b3JnIC0tZGlzYWJsZS1ydW50aW1lLWRlcHMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94a2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQKKyAgICBjZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL3J1bGVzICYmIGxuIC1zZiBiYXNlIHhvcmcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hvcmctbGliLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGYwMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jCkBAIC0wLDAgKzEsMjYgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKKworWE9SR19QTiA9ICIke0JQTn0iCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9saWIvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXNwZWNzIC0td2l0aG91dC1ncm9mZiAtLXdpdGhvdXQtcHMycGRmIC0td2l0aG91dC1mb3AiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLXdpdGgteG1sdG8sIC0td2l0aG91dC14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWVuYWJsZS1tYWxsb2MwcmV0dXJuc251bGwgLS1kaXNhYmxlLW1hbGxvYzByZXR1cm5zbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zcGVjcyAtLXdpdGhvdXQtZ3JvZmYgLS13aXRob3V0LXBzMnBkZiAtLXdpdGhvdXQtZm9wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LXhtbHRvIC0td2l0aC14bWx0byBcCisiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA/PSAieDExIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjdmMWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94dHJhbnNfMS4zLjUuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYVHJhbnM6IFggVHJhbnNwb3J0IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFRyYW5zcG9ydCBJbnRlcmZhY2UgaXMgaW50ZW5kZWQgdG8gY29tYmluZSBhbGwgXAorc3lzdGVtIGFuZCB0cmFuc3BvcnQgc3BlY2lmaWMgY29kZSBpbnRvIGEgc2luZ2xlIHBsYWNlLiAgVGhpcyBBUEkgc2hvdWxkIFwKK2JlIHVzZWQgYnkgYWxsIGxpYnJhcmllcywgY2xpZW50cyBhbmQgc2VydmVycyBvZiB0aGUgWCBXaW5kb3cgU3lzdGVtLiBcCitVc2Ugb2YgdGhpcyBBUEkgc2hvdWxkIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBuZXcgdHlwZXMgb2YgdHJhbnNwb3J0cyBhbmQgXAorc3VwcG9ydCBmb3IgbmV3IHBsYXRmb3JtcyB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGUgc291cmNlIFwKK2V4Y2VwdCBpbiB0aGUgWCBUcmFuc3BvcnQgSW50ZXJmYWNlIGNvZGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00OTM0NzkyMWQ0ZDUyNjgwMjFhOTk5ZjI1MGVkYzljYSIKKworUEUgPSAiMSIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImM1YmE0MzJkZDE1MTRkODU4MDUzZmZlOWY0NzM3ZGQ4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkYmQzYjM2OTMyY2U0YzA2MmNkMTBmNTdkNzhhMTU2YmE5OGQ2MThiZGI2ZjUwNjY0ZGEzMjc1MDJiYzgzMDEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vYmlncmVxc3Byb3RvXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OThhNDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitQRSA9ICIxIgorCitTVU1NQVJZID0gIkJpZ1JlcXM6IFggQmlnIFJlcXVlc3RzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBcCitCSUctUkVRVUVTVFMgZXh0ZW5zaW9uLCB1c2VkIHRvIHNlbmQgbGFyZ2VyIHJlcXVlc3RzIHRoYXQgdXN1YWwgaW4gb3JkZXIgXAordG8gYXZvaWQgZnJhZ21lbnRhdGlvbi4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjEyNzE1NjMwZGE2ZjI2OGQwZDM3MTJlZTFhNTA0ZjQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYTA1ZmIwMWZhMWQ1MTk4ODk0YzkzMWNmOTI1YzAyNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NjIxMTZhYjQ0ZTQxZDgxMjFiZmRlOTQ3MzIxOTUwMzcwYjI4NWE1MzE2NjEyYjhmY2U4MzM0ZDUwNzUxYjFlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvL2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhjYjI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBtaXNzaW5nIGxlbmd0aCBmaWVsZHMgdG8gdGhlIHJlcGxpZXMuIFdpdGhvdXQgdGhlc2UsIHNhbml0eSBjaGVja2luZyBpbiByZWNlbnQgWAorYnJlYWtzIHRoaW5ncy4KKworUlAgMTEvMi8xMAorCisKK0luZGV4OiBnaXQveGNhbGlicmF0ZXByb3RvLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy94Y2FsaWJyYXRlcHJvdG8uaAkyMDEwLTAyLTExIDExOjQ3OjQ1LjcxMTk4NTkzMiArMDAwMAorKysrIGdpdC94Y2FsaWJyYXRlcHJvdG8uaAkyMDEwLTAyLTExIDExOjQwOjIxLjAwMDAwMDAwMCArMDAwMAorQEAgLTY3LDEzICs2NywxMyBAQAorICAgICBCWVRFICAgIHR5cGU7ICAgLyogWF9SZXBseSAqLworICAgICBCWVRFICAgIHBhZDE7CisgICAgIENBUkQxNiAgc2VxdWVuY2VOdW1iZXIgQjE2OworKyAgICBDQVJEMzIgIGxlbmd0aDsKKyAgICAgQ0FSRDMyICBzdGF0dXM7CisgICAgIENBUkQzMiAgcGFkMiBCMzI7CisgICAgIENBUkQzMiAgcGFkMyBCMzI7CisgICAgIENBUkQzMiAgcGFkNCBCMzI7CisgICAgIENBUkQzMiAgcGFkNSBCMzI7CisgICAgIENBUkQzMiAgcGFkNiBCMzI7CistICAgIENBUkQzMiAgcGFkNyBCMzI7CisgfSB4WENhbGlicmF0ZVJhd01vZGVSZXBseTsKKyAKKyAjZGVmaW5lIHN6X3hYQ2FsaWJyYXRlUmF3TW9kZVJlcGx5CTMyCitAQCAtOTIsMTMgKzkyLDEzIEBACisgICAgIEJZVEUgICAgdHlwZTsgICAvKiBYX1JlcGx5ICovCisgICAgIEJZVEUgICAgcGFkMTsKKyAgICAgQ0FSRDE2ICBzZXF1ZW5jZU51bWJlciBCMTY7CisrICAgIENBUkQzMiAgbGVuZ3RoOworICAgICBDQVJEMzIgIHg7CisgICAgIENBUkQzMiAgeTsKKyAgICAgQ0FSRDMyICBwYWQyIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQzIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ0IEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ1IEIzMjsKKy0gICAgQ0FSRDMyICBwYWQ2IEIzMjsKKyB9IHhYQ2FsaWJyYXRlU2NyZWVuVG9Db29yZFJlcGx5OworIAorICNkZWZpbmUgc3pfeFhDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkUmVwbHkJMzIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4ZDE1NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWENhbGlicmF0ZTogVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgXAorVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gZXh0ZW5zaW9uLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Y2FsaWJyYXRld2lyZS5oO2VuZGxpbmU9MjM7bWQ1PTdmODZlZjdiMDNjY2U2YzRjOWViZDU5ZDIwY2E0ODVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hjYWxpYnJhdGVwcm90by5oO2VuZGxpbmU9MjM7bWQ1PWU0NDkwNDkxZWRjYzE3MWNhMjRmOTg1NjllZTU4MGRiIgorCitTUkNSRVYgPSAiMWRhNmZkMWUyYzdhNDk2NDgyNDVjOTg0ODFmYWJlYThiOTY5MGE4YyIKKworUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vY2FsaWJyYXRlcHJvdG8gXAorICAgICAgICAgICBmaWxlOi8vZml4LnBhdGNoO2FwcGx5PXllcyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NvbXBvc2l0ZXByb3RvXzAuNC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZlZTI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhjb21wb3NpdGU6IFggY29tcG9zaXRlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK2NvbXBvc2l0ZSBleHRlbnNpb24uICBUaGUgWCBjb21wb3NpdGUgZXh0ZW5zaW9uIHByb3ZpZGVzIHRocmVlIHJlbGF0ZWQgXAorbWVjaGFuaXNtcyBmb3IgY29tcG9zaXRpbmcgYW5kIG9mZi1zY3JlZW4gc3RvcmFnZS4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmM0YmZlMTM2ZjRhNDQxOGVhMmYyYTk2YjdjOGYzYzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tcG9zaXRlLmg7ZW5kbGluZT00MzttZDU9Y2JkNDRkNDA3OTA1M2FhNzU5MzBlZDJmMDJiOTI5MjYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiY29tcG9zaXRlZXh0IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk4NDgyZjY1YmExZTc0YTA4YmY1YjA1NmE0MDMxZWYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0OTM1OWYwYmUwYjJiOTg0YTgxNDljOTY2ZGQwNGU4YzU4ZTZlYWRlMmE0YTMwOWNmMTEyNjYzNWNjZDBjZmMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZGFtYWdlcHJvdG9fMS4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDAyNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGRhbWFnZTogWCBEYW1hZ2UgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERBTUFHRSBcCitleHRlbnNpb24uICBUaGUgREFNQUdFIGV4dGVuc2lvbiBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHJlY2VpdmUgXAoraW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlcyBtYWRlIHRvIHBpeGVsIGNvbnRlbnRzIG9mIHdpbmRvd3MgYW5kIFwKK3BpeG1hcHMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ1ZjVhMmRlNjVjM2E4NGNiZGU3NjlmMDdhNzY5NjA4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RhbWFnZXdpcmUuaDtlbmRsaW5lPTIzO21kNT00YTQ1MDFhNTkyZGJjN2RlNWNlODkyNTVlNTBkMDI5NiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJkYW1hZ2VleHQiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5OGU1OTA0NzY0YjgyNjQyY2M2M2Q5N2I0YmE5ZTk1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjN2MxMTJlOWI5ZWE4YTlkNWIwMTllNWYxN2Q0ODFhZTIwZjc2NmNiN2E0NjQ4MzYwZTdjMWI0NmZjOWZjNWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RteHByb3RvXzIuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTYwZTVkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRNWDogRGlzdHJpYnV0ZWQgTXVsdGloZWFkIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBETVggXAorZXh0ZW5zaW9uLiAgVGhlIERNWCBleHRlbnNpb24gcHJvdmlkZXMgc3VwcG9ydCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFwKK2FuZCBjb250cm9sIG9mIFhkbXggc2VydmVyLiAgQXR0cmlidXRlcyBvZiB0aGUgWGRteCBzZXJ2ZXIgYW5kIG9mIHRoZSBcCitiYWNrLWVuZCBzY3JlZW5zIGF0dGFjaGVkIHRvIHRoZSBzZXJ2ZXIgY2FuIGJlIHF1ZXJpZWQgYW5kIG1vZGlmaWVkIHZpYSBcCit0aGlzIHByb3RvY29sLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hM2MzNDk5MjMxYTgwMzVlZmQwZTAwNGNmYmQzYjcyYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kbXhwcm90by5oO2VuZGxpbmU9MzI7bWQ1PWFiODUwOTk1NWMzZGQ0YzY1ZmFjNzI4ZTFiMzY3YmM0IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGVlMTc1YmJkNDRkMDVjMzRkNDNiYjEyOWJlNTA5OGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTcyMDUxZTZhM2UwNmIyMzZkMTllZWQ1NjM2ODExN2I3NDVjYTFlMWEyN2JkYzUwZmQ1MWFhMzc1YmVhNjUwOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM0MGM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fMi44LmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRFJJMjogRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAyIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERpcmVjdCBcCitSZW5kZXJpbmcgSWZucmFzdHJ1Y3R1cmUgMi4gIERJUiBpcyByZXF1aXJlZCBmb3IgbWF5IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZTM5NmZhOTE4MzRmODc4NjAzMmNhZDJkYTU2MzhmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kcmkycHJvdG8uaDtlbmRsaW5lPTMxO21kNT0yMmYyOGJmNjhkMDFiNTMzZjI2MTk1ZTk0YjNlZDhjYSIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYjI3MjFkNWQyNGMwNGQ5OTgwYTBjNjU0MGNiNTM5NmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjliNTU0NzZkZWY0NGZjN2M0NTliMjUzN2QxN2RiYzczMWUzNmVkNWQ0MTZhZjdjYTBiMWUyZTY3NmY4YWEwNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDc0ZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRFJJMjogRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAyIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERpcmVjdCBcCitSZW5kZXJpbmcgSWZucmFzdHJ1Y3R1cmUgMi4gIERJUiBpcyByZXF1aXJlZCBmb3IgbWF5IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKKworU1JDUkVWID0gIjY2YzU2YWIxMGQ5MTdlM2Y0N2Y5MzE3OGQ3ZWFjNjQzMDk3MGQzYzQiCitQViA9ICIxLjk5LjMrZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9kcmkycHJvdG8iCisKK0xJQ19GSUxFU19DSEtTVU09ImZpbGU6Ly9DT1BZSU5HO21kNT0yZTM5NmZhOTE4MzRmODc4NjAzMmNhZDJkYTU2MzhmMyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDk3YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTNwcm90b18xLjAuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIDMgRXh0ZW5zaW9uIgorCitERVNDUklQVElPTiA9ICJUaGUgRFJJMyBleHRlbnNpb24gcHJvdmlkZXMgbWVjaGFuaXNtcyB0byB0cmFuc2xhdGUgYmV0d2VlbiBkaXJlY3QgXAorcmVuZGVyZWQgYnVmZmVycyBhbmQgWCBwaXhtYXBzLiBXaGVuIGNvbWJpbmVkIHdpdGggdGhlIFByZXNlbnQgZXh0ZW5zaW9uLCBcCithIGNvbXBsZXRlIGRpcmVjdCByZW5kZXJpbmcgc29sdXRpb24gZm9yIE9wZW5HTCBpcyBwcm92aWRlZC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZHJpM3Byb3RvLmg7ZW5kbGluZT0yMTttZDU9YWM5MGQxZDQxNmJlM2NiMTNlMWQzYzg4Y2Q1MTY2YmYiCisKKworU1JDX1VSSVttZDVzdW1dID0gImEzZDJjYmU2MGE5Y2ExYmYzYWVhNmM5M2M4MTdmZWUzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAxYmU0OWQ3MDIwMDUxOGI5YTZiMjk3MTMxZjZjYzcxZjRlYTJkZTE3NDM2ODk2YWYxNTMyMjZhNzc0ZmMwNzQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZpeGVzcHJvdG9fNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWZiODhkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGaXhlczogWCBGaXhlcyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBGaXhlcyBcCitleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBwcm92aWRlIHNlcnZlci1zaWRlIHN1cHBvcnQgXAorZm9yIGFwcGxpY2F0aW9uIHdvcmsgYXJvdW5kcyB0byBzaG9ydGNvbWluZ3MgaW4gdGhlIGNvcmUgWCB3aW5kb3cgXAorc3lzdGVtLiIKKworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI2MmE3YTg3ZGE1NmU2NmRkNjM5YmY3MzM0YTExMGM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hmaXhlc3Byb3RvLmg7ZW5kbGluZT00MzttZDU9YzNhOWVlNmRiMzUzMmVkMGQ0NGRlYTI2NmNmYzk3ZjQiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiZml4ZXNleHQiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImU3NDMxYWI4NGQzN2IyNjc4YWY3MWUyOTM1NWUxMDFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJhMmYzZjMxMjQ2YmRkM2YyYTBhY2Y4YmQzYjA5YmE5OWNhYjk2NWM3ZmIyYzJjOTJiN2RjNzI4NzBlNDI0Y2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmYzI4MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZm9udHNwcm90b18yLjEuMy5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGb250OiBYIEZvbnQgcmFzdGVyaXNhdGlvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIEZvbnQgXAorcmFzdGVyaXNhdGlvbiBleHRlbnNpb25zLiAgVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCB0byBjb250cm9sIFwKK3NlcnZlci1zaWRlIGZvbnQgY29uZmlndXJhdGlvbnMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWMzZTQ4YWE5Y2U4NjhjOGU5MGYwNDAxZGI0MWMxMWEyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0ZTcHJvdG8uaDtlbmRsaW5lPTQ0O21kNT1kMmU1OGUyNzA5NWU1ZWE3ZDRhZDQ1NmNjYjkxOTg2YyIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNjkzNGQwMGIwMDU1NWVhYWNkZTlmMDkxZjM5MmY5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTkwNDZiMGRkOTEzMDgyNWM0YTRjNDc5YmEzNTkxZDZkMGYxN2EzM2Y1NGUyOTRiNTY0Nzg3MjlhNmU1YWI4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9nbHByb3RvXzEuNC4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwM2QzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJPcGVuR0w6IFggT3BlbkdMIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBcCitPcGVuR0wtcmVsYXRlZCBleHRlbnNpb25zLCB1c2VkIHRvIGVuYWJsZSB0aGUgcmVuZGVyaW5nIG9mIGFwcGxpY2F0aW9ucyBcCit1c2luZyBPcGVuR0wuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ0NGVkMDE0Njk5Nzg1NjMwNGRmYmI1MTJhNTlhOGRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dseHByb3RvLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMjttZDU9NmI3OWM1NzBmNjQ0MzYzYjM1NjQ1NmU3ZDQ0NDcxZDkiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTU2NWYxYjBmYWNmNGE1OWMyNzc4MjI5YzFmNzBkMTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWRhYTk0YmRlZDMxMGEyYmZjYmI5ZGViNGQ3NTFkOTY1ZmNmZTZmYjNhMmY2ZDI0MmUyZGYyZDY1ODlkYmU0MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThlMGMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4xLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggSW5wdXQgXAorZXh0ZW5zaW9uLiAgVGhlIGV4dGVuc2lvbiBzdXBwb3J0cyBpbnB1dCBkZXZpY2VzIG90aGVyIHRoZW4gdGhlIGNvcmUgWCBcCitrZXlib2FyZCBhbmQgcG9pbnRlci4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTU2MmNjMGY2NTg3Yjk2MWYwMzIyMTFkODE2MGYzMWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEkycHJvdG8uaDtlbmRsaW5lPTQ4O21kNT0xYWMxNTgxZTYxMTg4ZGEyODg1Y2MxNGZmNDliMjBiZSIKKworUEUgPSAiMSIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjZjYWViZWFkNGI3NzliYTAzMTcyN2Y2NmE3ZmZhMzU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNDdlZTYyMDUzYTZhY2VmM2E4M2Y1MDYzMTI0OTRiZTE0NjEwNjhkMGI5MjY5ZDgxODgzOTcwM2I5NWMxZDEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIwZjNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIElucHV0IFwKK2V4dGVuc2lvbi4gIFRoZSBleHRlbnNpb24gc3VwcG9ydHMgaW5wdXQgZGV2aWNlcyBvdGhlciB0aGVuIHRoZSBjb3JlIFggXAora2V5Ym9hcmQgYW5kIHBvaW50ZXIuIgorCitQUiA9ICJyMSIKK1BFID0gIjEiCitTUkNSRVYgPSAiNzIwMzAzNjUyMmJhOWQ0YjIyNGQyODJkNmFmYzJkMGI5NDc3MTFlZSIKK1BWID0gIjEuOS45OS4xMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9pbnB1dHByb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmY1YzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9rYnByb3RvXzEuMC43LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEtCOiBYIEtleWJvYXJkIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK0tleWJvYXJkIGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgdG8gY29udHJvbCBvcHRpb25zIHJlbGF0ZWQgXAordG8ga2V5Ym9hcmQgaGFuZGxpbmcgYW5kIGxheW91dC4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2RkNmVhOTllMmE4M2E1NTJjMDJjODA5NjM2MjNjMzggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEtCcHJvdG8uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI1O21kNT01NzQ0ZWVmZjQwN2FlYjZlN2ExMzQ2ZWViYWI0ODZhMiIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTRhZmM5MGMxZjdiZWY0YTI3ZmRkNTllY2UzOWM4NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjg4MjIxMGI3NjM3NmUzZmEwMDZiMTFkYmQ4OTBlNTZlYzA5NDJiYzU2ZTY1ZDEyNDlmZjRhZjg2ZjkwYjg1NyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI2ZjMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9wcmVzZW50cHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBiYXNpYyBoZWFkZXJzIGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFByZXNlbnQgZXh0ZW5zaW9uIHByb3ZpZGVzIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgdG8gdXBkYXRlIHRoZWlyIFwKKyAgICAgICAgICAgICAgIHdpbmRvdyBjb250ZW50cyBmcm9tIGEgcGl4bWFwIGluIGEgd2VsbCBkZWZpbmVkIGZhc2hpb24sIHN5bmNocm9uaXppbmcgXAorICAgICAgICAgICAgICAgd2l0aCB0aGUgZGlzcGxheSByZWZyZXNoIGFuZCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgZWZmaWNpZW50IFwKKyAgICAgICAgICAgICAgIG1lY2hhbmlzbSB0aGFuIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgcGl4bWFwLlwKKyAgICAgICAgICAgICAgIgorCitMSUNFTlNFID0gIkdQTHYyIgorCitTUkNSRVYgPSAiMjRmM2E1NmU1NDFiMGE5ZTZjNmVlNzYwODFmNDQxMjIxYTEyMGVmOSIKK1BWID0gIjEuMCtnaXQke1NSQ1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDdlNTA4Y2EyODBmZGU5NzkwNmVhY2I3Nzg5MmMzYWMiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vcHJlc2VudHByb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OWU1MjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JhbmRycHJvdG9fMS41LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggUmVzaXplLCBcCitSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gXAorcmVzaXplLCByb3RhdGUgYW5kIHJlZmxlY3QgdGhlIHJvb3Qgd2luZG93IG9mIGEgc2NyZWVuLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wMDQyNmQ0MWJkM2Q5MjY3Y2Y5YmJiMmRmOTMyM2E1ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yYW5kcnByb3RvLmg7ZW5kbGluZT0zMDttZDU9Mzg4NTk1N2M2MDQ4ZmRmMzMxMGFjOGJhNTRjYTJjM2YiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmFuZHJleHQiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNDY3NjVjOGRjYWNiNzExNGM4MjFiYWYwZGYxZTc5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YzY3NTUzM2U3OWNkNzMwOTk3ZDIzMmM4ODk0YjY2OTIxNzRkY2U1OGQzZTIwNzAyMWI4Zjg2MGJlNDk4NDY4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlY29yZHByb3RvXzEuMTQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIzMTdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmVjb3JkOiBYIFJlY29yZCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBSZWNvcmQgXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gaXMgdXNlZCB0byByZWNvcmQgYW5kIHBsYXkgYmFjayBldmVudCBcCitzZXF1ZW5jZXMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU3NTgyN2EwZjU1NGJiZWQzMzI1NDI5NzZkNWYzZDQwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JlY29yZHByb3RvLmg7ZW5kbGluZT0xOTttZDU9MWNiYjBkZDQ1YTBiMDYwZmY4MzM5MDE2MjBhM2U3MzgiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmVjb3JkZXh0IgorUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI0ZTVkZWRlNWVhNTE5MDZmMTUzMGNhMWUyMWQyMTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTc3NzU0OGQyZTkyYWEyNTlmMTUyOGRlM2M0YTM2ZDE1ZTA3YTQ2NTBkMDk3NjU3M2E4ZTJmZjU0MzdlNzM3MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZW5kZXJwcm90b18wLjExLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4MDBlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlbmRlcjogWCByZW5kZXJpbmcgRXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggXAorUmVuZGVyaW5nIGV4dGVuc2lvbi4gIFRoaXMgaXMgdGhlIGJhc2lzIHRoZSBpbWFnZSBjb21wb3NpdGlvbiB3aXRoaW4gdGhlIFwKK1ggd2luZG93IHN5c3RlbS4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjgyNmQ5OTc2NTE5NjM1MmU2MTIyYTQwNmNmMGQwMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcmVuZGVycHJvdG8uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTI0O21kNT0zZTVlMjg1MWRhZDI0MGIwYTNhMjdjNDc3NmI0ZmQxZiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyZW5kZXJleHQiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImE5MTRjY2MxZGU2NmRkZWI0YjYxMWM2YjA2ODZlMjc0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA2NzM1YTViOTJiMjA3NTkyMDRlNDc1MWVjZDYwNjRhMmFkOGE2MjQ2YmI2NWIzMDc4Yjg2MmEwMGRlZjI1MzciCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI2MTBhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZXNvdXJjZXByb3RvXzEuMi4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlczogWCBSZXNvdXJjZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitSZXNvdXJjZSBleHRlbnNpb24uICBYUmVzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cyBYIGNsaWVudHMgdG8gXAorc2VlIGFuZCBtb25pdG9yIFggcmVzb3VyY2UgdXNhZ2Ugb2YgdmFyaW91cyBjbGllbnRzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02MDQ4NTkzMDVlNjYyNTAzMDc3MjQwZmVlOGM3N2Q5NyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyZXNvdXJjZWV4dCIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2ZkYjU3ZGFlMjIxYjcxYjI3MDNmOGUyOTgwZWFhZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2M2NjAwM2E2YmRlYjBmNzA5MzJhOWVkM2NmNTdjYzU1NDIzNDE1NDM3OGQzMDFlMGM1Y2ZhMTg5ZDhmNjgxOCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9zY3Juc2F2ZXJwcm90b18xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwN2Y1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYc2NybnNhdmVyOiBYIFNjcmVlbiBTYXZlciBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBTY3JlZW4gXAorU2F2ZXIgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxsb3dzIGFuIGV4dGVybmFsIFwic2NyZWVuIHNhdmVyXCIgXAorY2xpZW50IHRvIGRldGVjdCB3aGVuIHRoZSBhbHRlcm5hdGl2ZSBpbWFnZSBpcyB0byBiZSBkaXNwbGF5ZWQgYW5kIHRvIFwKK3Byb3ZpZGUgdGhlIGdyYXBoaWNzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZWQ0OWI3OGIxNWI0MzZjOTMzYjZiOGIwNTRlMzkwMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zYXZlcnByb3RvLmg7ZW5kbGluZT0yNjttZDU9YTg0YzA2MzczMDUxNTlmM2MwYWIxNzNhYWVlZGU0OGQiCisKK1BFID0gIjEiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tZW5hYmxlLXNwZWNzPW5vIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWRkOGE3Mzc3NWU4ZWNlMWQ2OTUxNWRkMTc3NjdiZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGJiNzBhOGRhMTY0OTMwY2NlYWViNGM3NDE4MDI5MTY2MDUzM2FkM2NjNDUzNzdiMzBhNzk1ZDFiODViY2Q2NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FhNzU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4yLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggVmlkZW8gXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxvd3MgZm9yIGFjY2VybGF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNlMzQ3MmExMTlhODY0MDg1ZmE0MTU1Y2IwOTc5YTdiIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTY1ODY0MTU5NTMyN2QzOTkwZWFiNzBmZGI1NWNhOGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGRhZTE2OGNiODIwZmNkMzJmNTY0ODc5YWZiM2YyNGQyN2MxNzYzMDBkOWFmNjY4MTlhMTgyNjU1MzliZDRiNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFiNTdiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgaGVhZGVycyIKK0RFU0NSSVBUSU9OID0gIkZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBYIHByb3RvY29sIEMtbGFuZ3VhZ2UgQmluZGluZyBcCisoWENCKS4gIFhDQiBpcyBhIHJlcGxhY2VtZW50IGZvciBYbGliIGZlYXR1cmluZyBhIHNtYWxsIGZvb3RwcmludCwgXAorbGF0ZW5jeSBoaWRpbmcsIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHByb3RvY29sLCBpbXByb3ZlZCB0aHJlYWRpbmcgXAorc3VwcG9ydCwgYW5kIGV4dGVuc2liaWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC94Y2ItcHJvdG8tJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB5dGhvbm5hdGl2ZQorCitQQUNLQUdFUyArPSAicHl0aG9uLXhjYmdlbiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3hjYi8qLnhtbCAke2RhdGFkaXJ9L3hjYi8qLnhzZCIKK0ZJTEVTX3B5dGhvbi14Y2JnZW4gPSAiJHtsaWJkaXJ9L3B5dGhvbioiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHB5dGhvbi1uYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b18xLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmM1YTExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYgpAQCAtMCwwICsxLDkgQEAKK2luY2x1ZGUgeGNiLXByb3RvLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kcmkyLnhtbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTI4O21kNT1mODc2M2IxM2ZmNDMyZTg1OTdlMGQ2MTBjZjU5OGU2NSIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiNmJmMjc5NzQ0NWRjNmQ0M2U5ZTQ3MDdjMDgyZWZmOWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjRhY2VlZTY1MDJhMGNlNDVmYzM5YjMzYzU0MWEyZGY0NzE1ZDAwYjcyZTY2MGViZThjNWJiNDQ0NzcxZTMyZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWE0ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIHhjYi1wcm90by5pbmMKK1NSQ1JFViA9ICJkODFjYTIzM2U5OGJlOGZhNTllOGM5MGQyNjJjMDUxNjk0NGM1YTY2IgorUFYgPSAiMS4yK2dpdHIke1NSQ1BWfSIKK1BSID0gInI0IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94Y2IvcHJvdG8iCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y21pc2Nwcm90b18xLjIuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1MWI5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYQy1NSVNDOiBYIFhDLU1pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhDLU1JU0MgXAorZXh0ZW5zaW9uLCB3aGljaCBpcyB1c2VkIHRvIGdldCBkZXRhaWxzIG9mIFhJRCBhbGxvY2F0aW9ucyB3aXRoaW4gdGhlIFwKK3NlcnZlci4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDlkODMwNDdjMTU5OTRlMDVkYjI5YjQyM2VkNjY2MmUiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjVmNDg0N2M3OGU0MWI4MDE5ODJjOGE1ZTA2MzY1YjI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIxMzIzNjg2OTM3MjI1NmMzNmRiNzlhZTM5ZDU0MjE0MTcyNjc3ZmI3OWU5Y2RjNTU1ZGNlZWM4MGJkOWQyZGYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGV4dHByb3RvXzcuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMGJkOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3Igc2V2ZXJhbCBYIFwKK2V4dGVuc2lvbnMuICBUaGVzZSBwcm90b2NvbCBleHRlbnNpb25zIGluY2x1ZGUgRE9VQkxFLUJVRkZFUiwgRFBNUywgXAorRXh0ZW5kZWQtVmlzdWFsLUluZm9ybWF0aW9uLCBMQlgsIE1JVF9TSE0sIE1JVF9TVU5EUlktTk9OU1RBTkRBUkQsIFwKK011bHRpLUJ1ZmZlcmluZywgU0VDVVJJVFksIFNIQVBFLCBTWU5DLCBUT0ctQ1VQLCBYQy1BUFBHUk9VUCwgWEMtTUlTQywgXAorWFRFU1QuICBJbiBhZGRpdGlvbiBhIHNtYWxsIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgYWxzbyBcCithdmFpbGFibGUuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg2ZjI3MzI5MTc1OWQwYmEyYTIyNTg1Y2QxYzA2YzUzIgorCitQRSA9ICIxIgorCitpbmhlcml0IGdldHRleHQKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwYzkwZjMxM2I0YjA4NTE3NThlZjc3Yjk1MDE5NTg0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYzZjRiMjNhYzhkYjljM2E5ZTBkOGVkYjU5MTcxM2YzZDcwZWY5YzNiMTc1OTcwZGQ4ODIzZGZjOTJhYTViYjAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmM2NlMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRnYXByb3RvXzIuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtREdBOiBYRnJlZTg2IERpcmVjdCBHcmFwaGljcyBBY2Nlc3MgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlODYgXAorRGlyZWN0IEdyYXBoaWNzIEFjY2VzcyBleHRlbnNpb24uIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBkaXJlY3QgZ3JhcGhpY3MgXAorYWNjZXNzIHRvIGEgZnJhbWVidWZmZXItbGlrZSByZWdpb24sIGFzIHdlbGwgYXMgcmVsYXRpdmUgbW91c2UgXAorcmVwb3J0aW5nLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDFlNjZlNGIzMTcwODhjZjg2OWJjOThlNmFmNGZiNiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ4eGY4NmRnYWV4dCIKK1BSID0gInIyIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImEwMzZkYzJmY2JmMDUyZWMxMDYyMWZkNDhiNjhkYmIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjNWVmNjUxMDhlMWYyMTQ2Mjg2ZTUzMDgwOTc1NjgzZGFlNDlmYzk0NjgwMDQyZTA0YmQxZTIwMTBlOTkwNTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRyaXByb3RvXzIuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjkyMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtRFJJOiBYRnJlZTg2IERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlODYgXAorRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSBleHRlbnNpb24uICBUaGUgWEZyZWU4Ni1EUkkgZXh0ZW5zaW9uIGlzIFwKK3VzZWQgdG8gb3JnYW5pemUgZGlyZWN0IHJlbmRlcmluZyBzdXBwb3J0IG9yIDNEIGNsaWVudHMgYW5kIGhlbHAgXAorYXJiaXRyYXRlIHJlcXVlc3RzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZjEwM2I5ZDk1MWUzOWZmN2UyM2QzODZlMjAxMWZhMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Zjg2ZHJpcHJvdG8uaDtlbmRsaW5lPTM1O21kNT00MmJlM2Q4ZTZkNDI5YWI3OTE3MjU3MmJiMGNmZjU0NCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjFkNzE2ZDBkYWMzYjY2NGU1ZWUyMGM2OWQzNGJjMTBlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljNGI4ZDcyMjFjYjZkYzQzMDkyNjljY2MwMDhhMjI3NTM2OThhZTkyNDVhMzk4YTU5ZGYzNWYxNDA0ZDY2MWYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2NjNlYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4Nm1pc2Nwcm90b18wLjkuMy5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtTWlzYzogWEZyZWU4NiBtaXNjZWxsYW5lb3VzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZSBcCittaXNjZWxsYW5lb3VzIGV4dGVuc2lvbi4gIFRoZSBYRnJlZTg2LU1pc2MgZXh0ZW5zaW9uIHByb3ZpZGVzIGEgbWVhbnMgdG8gXAorYWNjZXNzIGlucHV0IGRldmljZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHNwZWNpZmljIHRvIHRoZSBYRnJlZTg2L1hvcmcgXAorRERYLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDFlNjZlNGIzMTcwODhjZjg2OWJjOThlNmFmNGZiNiIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2E2M2JiYjMxY2Y1YjdmMzdiMjIzN2U5MjNmZjI1N2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDViOGVjNmE0YThjYTIxMDY2ZGNlMTE3ZTA5ZGNjODg1Mzk4NjJlNjE2ZTYwZmIzOTFkZTA1YjM2ZjYzYjA5NSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjMxOTAwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2dmlkbW9kZXByb3RvXzIuMy4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1WTTogWEZyZWU4NiB2aWRlbyBtb2RlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZTg2IFwKK3ZpZGVvIG1vZGUgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxsb3dzIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZ2V0IFwKK2FuZCBzZXQgdmlkZW8gbW9kZSB0aW1pbmdzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00OTliZTJmZjM4N2E0MmY4NDYyOGMzNWYzMTFmMTUwMiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ4eGY4NnZtZXh0IgorCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzkzZWNlZmVhZWNmZWFiZDFhZWQ2YTAxMDk1MTc0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NWQ5NDk5YWE3YjczMjAzZmQ2YjM1MDViMDI1OTYyNGFmZWQ1YzE2Yjk0MWJkMDRmY2YxMjNlNWRlNjk4NzcwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDc3NGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hpbmVyYW1hcHJvdG9fMS4yLjEuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYaW5lcmFtYTogWGluZXJhbWEgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhpbmVyYW1hIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgXAorcGh5c2ljYWwgb3V0cHV0IGRldmljZXMgd2hpY2ggbWF5IGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgbG9naWNhbCBYIFwKK3NjcmVlbi4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2UzOTdhNTMyNmM4M2Q1ZDBlYmY1YjNmODcxNjNhYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGFub3JhbWlYcHJvdG8uaDtlbmRsaW5lPTI0O21kNT0wOThlMGJjMDg5MzY4YTk4ODA5MmIzY2JkYTYxN2E1NyIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5NTlmZTBiZmIyMmEwZTcyNjA0MzNiOGQxOTk1OTBhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3NzU3NGJiM2RjMTkyZWNkOWM1NWY1OWY5OTFlYzFkZmYzNDBiZTNlMzEzOTJjOTVkZWZmNDIzZGE1MjQ4NWIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veG9yZy1wcm90by1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDE3YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYwpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlggcHJvdG9jb2wgaGVhZGVyczogJHtYT1JHX1BOfSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitYT1JHX1BOID0gIiR7QlBOfSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3Byb3RvLyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1mb3AiCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS13aXRob3V0LWZvcCAtLXdpdGhvdXQteG1sdG8gLS13aXRoLXhtbHRvIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCisKKyMgJHtQTn0gaXMgZW1wdHkgc28gd2UgbmVlZCB0byB0d2VhayAtZGV2IGFuZCAtZGJnIHBhY2thZ2UgZGVwZW5kZW5jaWVzCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBhZDI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitEb24ndCBhbHdheXMgZGVmaW5lIExPTkc2NCBmb3IgQU1ENjQKKyAgICAKK1gzMiBkZWZpbmVzIF9fYW1kNjRfXy9hbWQ2NCB3aXRoIDMyYml0IGxvbmcuICBXZSBzaG91bGQgc2ltcGx5IGNoZWNrCitfX0xQNjRfXyBiZWZvcmUgZGVmaW5pbmcgTE9ORzY0IHdpdGhvdXQgY2hlY2tpbmcgX19hbWQ2NF9fL2FtZDY0LgorCitUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIHdpdGggeDMyIHRvb2xjaGFpbi4KKworUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzEKKworLS0tIHhwcm90by03LjAuMjIvWG1kLmgueDMyCTIwMDktMDctMTEgMDQ6MTk6NTAuMDAwMDAwMDAwIC0wNzAwCisrKysgeHByb3RvLTcuMC4yMi9YbWQuaAkyMDExLTExLTMwIDE3OjE0OjE5LjI5MDM5NTg5MyAtMDgwMAorQEAgLTYyLDcgKzYyLDYgQEAgU09GVFdBUkUuCisgICAgICBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKGlhNjQpIHx8IFwKKyAgICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19zMzkweF9fKSB8fCBcCistICAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorICAgICAgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorICMgIGRlZmluZSBMT05HNjQJCQkJLyogMzIvNjQtYml0IGFyY2hpdGVjdHVyZSAqLworICMgZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI3YTdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI4LmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIGludGVyZmFjZSBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGJhc2ljIGhlYWRlcnMgZm9yIHRoZSBYIFdpbmRvdyBcCitTeXN0ZW0uIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI5ZTA1MTEwN2Q1NjI4OTY2NzM5YTBiMmU5YjMyNjc2IgorCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjNjZTJmMjMwYzVkOGZhOTI5ZjMyNmFkMWYwZmE0MGE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI5ZTg1NTY4ZDFmNjhjZWVmOGEyYzA4MWRhZDliYzBlNTUwMGE1M2NmZmZkZTI0YjU2NGRjNDNkNDZkZGY2Y2EiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL2djY21ha2VkZXBfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmMmY0YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiUHJvZ3JhbSB0byBjcmVhdGUgZGVwZW5kZW5jaWVzIGluIG1ha2VmaWxlcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIGdjY21ha2VkZXAgcHJvZ3JhbSBjYWxscyAnZ2NjIC1NJyB0byBvdXRwdXQgbWFrZWZpbGUgXAorcnVsZXMgZGVzY3JpYmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGVhY2ggc291cmNlZmlsZSwgc28gdGhhdCBtYWtlIGtub3dzIFwKK3doaWNoIG9iamVjdCBmaWxlcyBtdXN0IGJlIHJlY29tcGlsZWQgd2hlbiBhIGRlcGVuZGVuY3kgaGFzIGNoYW5nZWQuIgorCityZXF1aXJlIHhvcmctdXRpbC1jb21tb24uaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9NYWtlZmlsZS5hbTtlbmRsaW5lPTIwO21kNT0yM2MyNzczOTZkNjkwNDEzMjQ1ZWJiODliMThjNWQ0ZCIKK0RFU0NSSVBUSU9OID0gImNyZWF0ZSBkZXBlbmRlbmNpZXMgaW4gbWFrZWZpbGVzIHVzaW5nICdnY2MgLU0nIgorREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKK1JERVBFTkRTXyR7UE59ID0gImdjYyIKKworUFIgPSAicjMiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTI3ZGRiNjEzMWViNGE1NmZkZjY2NDRhNjNhZGU3ODgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjllMmU3YTU5MGUyN2Y4NGI2NzA4YWI3YTgxZTU0NjM5OWI5NDliZjY1MmZiOWI5NTE5M2UwZTU0M2U2YTU0OCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9tYWtlZGVwZW5kXzEuMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTk2N2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctdXRpbC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiY3JlYXRlIGRlcGVuZGVuY2llcyBpbiBtYWtlZmlsZXMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBtYWtlZGVwZW5kIHByb2dyYW0gcmVhZHMgZWFjaCBzb3VyY2VmaWxlIGluIHNlcXVlbmNlIFwKK2FuZCBwYXJzZXMgaXQgbGlrZSBhIEMtcHJlcHJvY2Vzc29yLCBwcm9jZXNzaW5nIFwKK2FsbCAjaW5jbHVkZSwgI2RlZmluZSwgICN1bmRlZiwgI2lmZGVmLCAjaWZuZGVmLCAjZW5kaWYsICNpZiwgI2VsaWYgXAorYW5kICNlbHNlIGRpcmVjdGl2ZXMgc28gdGhhdCBpdCBjYW4gY29ycmVjdGx5IHRlbGwgd2hpY2ggI2luY2x1ZGUsIFwKK2RpcmVjdGl2ZXMgd291bGQgYmUgdXNlZCBpbiBhIGNvbXBpbGF0aW9uLiBBbnkgI2luY2x1ZGUsIGRpcmVjdGl2ZXMgXAorY2FuIHJlZmVyZW5jZSBmaWxlcyBoYXZpbmcgb3RoZXIgI2luY2x1ZGUgZGlyZWN0aXZlcywgYW5kIHBhcnNpbmcgd2lsbCBcCitvY2N1ciBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiIKKworREVQRU5EUyA9ICJ4cHJvdG8gdXRpbC1tYWNyb3MiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDNhNmVkYTM0YjQ4ZWU4MjFiM2I2NmY0Zjc1M2NlNGYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZmIyZDdjN2UyMjg0MDk0Nzg2M2VmYWVkYzE3NTc0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MDM5MDNkNDFmYjViYWRiNzNjYjcwZDdiMzc0MGM4YjMwZmUxY2M2OGM1MDRkM2I2YTg1ZTY2NDRjNGU1MDA0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3V0aWwtbWFjcm9zXzEuMTkuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjZjUwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJYIGF1dG90b29scyBtYWNyb3MiCisKK0RFU0NSSVBUSU9OID0gIk00IGF1dG90b29scyBtYWNyb3MgdXNlZCBieSB2YXJpb3VzIFgub3JnIHByb2dyYW1zLiIKKworcmVxdWlyZSB4b3JnLXV0aWwtY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE5NzA1MTFmZGRkNDM5YjA3YTZiYTc4OWQyOGZmNjYyIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDBlMWNhYTQ5YTcxYTI2ZTBhYTY4ZGRkMDAyMDM3MTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGQ0ZGY1MWIyOTAyM2RhZjJmNjNhZWJmM2ViYzYzOGVhODhlZmVkZmQ1NjBhYjU4NjY3NDFhYjNmOTJhY2FhMSIKKworIyAke1BOfSBpcyBlbXB0eSBzbyB3ZSBuZWVkIHRvIHR3ZWFrIC1kZXYgYW5kIC1kYmcgcGFja2FnZSBkZXBlbmRlbmNpZXMKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkMDIyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC94b3JnLXV0aWwtY29tbW9uLmluYwpAQCAtMCwwICsxLDEzIEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvdXRpbC8ke1hPUkdfUE59LSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ViNmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKQEAgLTAsMCArMSw5IEBACitTZWN0aW9uICJNb2R1bGUiCisgICAgTG9hZCAiZmJkZXZodyIKKyAgICBMb2FkICJmYiIKKyAgICBMb2FkICJzaGFkb3ciCisgICAgTG9hZCAic2hhZG93ZmIiCisgICAgTG9hZCAidmJlIgorICAgIExvYWQgInZnYWh3IgorRW5kU2VjdGlvbgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVhcm0veG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzhiNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwcy94b3JnLmNvbmYKQEAgLTAsMCArMSw3MCBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgRGVmYXVsdERlcHRoICAxNgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzNjQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11cHBjL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXNoNC94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5YWUyMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mCkBAIC0wLDAgKzEsNjkgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYtNjQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZGE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY0IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJ2bW1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkYTllYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mCkBAIC0wLDAgKzEsNjQgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgInZtbW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy94b3JnLmNvbmYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDdjMjA0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQUiA9ICJyMzMiCisKK1NSQ19VUkkgPSAiZmlsZTovL3hvcmcuY29uZiIKKworU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIlwKKyAgICAgICAgICBmaWxlOi8vMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L1gxMS94b3JnLmNvbmYiCitDT05GRklMRVNfJHtQTn1fYXBwZW5kX2xpYmMtbXVzbCA9ICIgJHtzeXNjb25mZGlyfS9YMTEveG9yZy5jb25mLmQvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlpZiB0ZXN0IC1zICR7V09SS0RJUn0veG9yZy5jb25mOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94b3JnLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS8KKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2wgKCkgeworCWluc3RhbGwgLURtIDA2NDQgJHtXT1JLRElSfS8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vWDExL3hvcmcuY29uZi5kLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWMwMmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYwpAQCAtMCwwICsxLDE3MCBAQAorU1VNTUFSWSA9ICJUaGUgWC5PcmcgWCBzZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZGY4Nzk1MGFmNTFhYzJjNTgyMjA5NDU1M2VhMTg4MCIKKworIyB4Zjg2LSotKiBwYWNrYWdlcyBkZXBlbmQgb24gYW4gWCBzZXJ2ZXIgYnVpbHQgd2l0aCB0aGUgeGZyZWU4NiBERFgKKyMgc28gd2UgaGF2ZSBhIHZpcnR1YWwgdG8gcmVwcmVzZW50IHRoYXQ6CisjIGRlcHJlY2F0ZWQsIHdlIHNob3VsZCB1c2UgdmlydHVhbC94c2VydmVyIGluc3RlYWQKK1BST1ZJREVTID0gInZpcnR1YWwveHNlcnZlci14Zjg2IgorCisjIE90aGVyIHBhY2thZ2VzIHRlbmQgdG8ganVzdCBjYXJlIHRoYXQgdGhlcmUgaXMgKmFuKiBYIHNlcnZlcjoKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3hzZXJ2ZXIiCisKK1BFID0gIjIiCitJTkNfUFIgPSAicjgiCisKK1hPUkdfUE4gPSAieG9yZy1zZXJ2ZXIiCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwveHNlcnZlci8ke1hPUkdfUE59LSR7UFZ9LnRhci5iejIiCitTUkNfVVJJICs9ICJmaWxlOi8vbWFjcm9fdHdlYWsucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFJPVE9fREVQUyA9ICJyYW5kcnByb3RvIHJlbmRlcnByb3RvIGZpeGVzcHJvdG8gZGFtYWdlcHJvdG8geGV4dHByb3RvIHhwcm90byB4Zjg2ZGdhcHJvdG8geGY4Nm1pc2Nwcm90byB4Zjg2dmlkbW9kZXByb3RvIGNvbXBvc2l0ZXByb3RvIHJlY29yZHByb3RvIHJlc291cmNlcHJvdG8gdmlkZW9wcm90byBzY3Juc2F2ZXJwcm90byAgeGluZXJhbWFwcm90byBmb250c3Byb3RvIGticHJvdG8gaW5wdXRwcm90byBiaWdyZXFzcHJvdG8geGNtaXNjcHJvdG8gcHJlc2VudHByb3RvIgorTElCX0RFUFMgPSAicGl4bWFuIGxpYnhmb250IHh0cmFucyBsaWJ4YXUgbGlieGV4dCBsaWJ4ZG1jcCBsaWJkcm0gbGlieGtiZmlsZSBsaWJwY2lhY2Nlc3Mgb3BlbnNzbCBsaWJnY3J5cHQiCitERVBFTkRTID0gIiR7UFJPVE9fREVQU30gJHtMSUJfREVQU30gZm9udC11dGlsIgorCisjIFNwbGl0IG91dCBzb21lIG1vZHVsZXMgYW5kIGV4dGVuc2lvbnMgZnJvbSB0aGUgbWFpbiBwYWNrYWdlCisjIFRoZXNlIGFyZW4ndCBuZWVkZWQgZm9yIGJhc2ljIG9wZXJhdGlvbnMgYW5kIG9ubHkgdGFrZSB1cCBzcGFjZToKKyMgIDMyLjBrICAgbGliZHJpLnNvCisjICA5MS4wayAgIGxpYmV4YS5zbworIyAgMzM2LjBrICBsaWJnbHguc28KKyMgIDEzNjBrICAgbGliaW50MTAuc28KKyMgIDE4MC4wayAgbGlid2ZiLnNvCisjICAzMjAuMGsgIGxpYnhhYS5zbworIyAgMTI0LjBrICBsaWJ4ZjFicHAuc28KKyMgIDg0LjBrICAgbGlieGY0YnBwLnNvCisjICAgICAgICAgIGxpYnJlY29yZC5zbworIyAgICAgICAgICBsaWJleHRtb2Quc28KKyMgICAgICAgICAgbGliZGJlLnNvCisKK1BBQ0tBR0VTID0rICIke1BOfS1zZWN1cml0eS1wb2xpY3kgXAorICAgICAgICAgICAgICR7UE59LXNkbCBcCisgICAgICAgICAgICAgJHtQTn0tZmJkZXYgXAorICAgICAgICAgICAgICR7UE59LXh2ZmIgXAorICAgICAgICAgICAgICR7UE59LXV0aWxzIFwKKyAgICAgICAgICAgICAke1BOfS14ZXBoeXIgXAorICAgICAgICAgICAgICR7UE59LXh3YXlsYW5kIFwKKyAgICAgICAgICAgICAke1BOfS1tdWx0aW1lZGlhLW1vZHVsZXMgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZ2x4IFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliaW50MTAgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJhZmIgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJ3ZmIgIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlibWZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliY2ZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtZXhhIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUteGFhIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlieGYxYnBwIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlieGY0YnBwIFwKKyAgICAgICAgICAgICB4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIgorCitTVU1NQVJZX3hmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gbW9kZXNldHRpbmcgZGlzcGxheSBkcml2ZXIiCitJTlNBTkVfU0tJUF94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gInhvcmctZHJpdmVyLWFiaSIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7UE59LXNlY3VyaXR5LXBvbGljeSB4a2V5Ym9hcmQtY29uZmlnIHJnYiB4c2VydmVyLXhmODYtY29uZmlnIHhrYmNvbXAiCitSREVQRU5EU18ke1BOfS14dmZiICs9ICJ4a2V5Ym9hcmQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4YSA9ICIke1BOfSAoPSAke0VYVEVORFBLR1Z9KSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS9YMTEvT3B0aW9ucyAke2xpYmRpcn0vWDExL0NhcmRzICR7bGliZGlyfS9YMTEvZ2V0Y29uZmlnICR7bGliZGlyfS9YMTEvZXRjICR7bGliZGlyfS9tb2R1bGVzLyouc28gJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLnNvIC9ldGMvWDExICR7bGliZGlyfS94b3JnL3Byb3RvY29sLnR4dCAke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLmxhICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8qLmxhIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2xpYmRpcn0vWDExL2RvYyAke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQvUkVBRE1FLmNvbXBpbGVkICR7bG9jYWxzdGF0ZWRpcn0vbGliL3hrYi9SRUFETUUuY29tcGlsZWQiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LXNlY3VyaXR5LXBvbGljeSArPSAiJHtsaWJkaXJ9L3hzZXJ2ZXIvU2VjdXJpdHlQb2xpY3kiCitGSUxFU18ke1BOfS1zZGwgPSAiJHtiaW5kaXJ9L1hzZGwiCitGSUxFU18ke1BOfS1mYmRldiA9ICIke2JpbmRpcn0vWGZiZGV2IgorRklMRVNfJHtQTn0teHZmYiA9ICIke2JpbmRpcn0vWHZmYiIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9zY2FucGNpICR7YmluZGlyfS9wY2l0d2VhayAke2JpbmRpcn0vaW9wb3J0ICR7YmluZGlyfS9pbltid2xdICR7YmluZGlyfS9vdXRbYndsXSAke2JpbmRpcn0vbW1hcFtyd10gJHtiaW5kaXJ9L2d0ZiAke2JpbmRpcn0vZ2V0Y29uZmlnICR7YmluZGlyfS9nZXRjb25maWcucGwiCitGSUxFU18ke1BOfS14ZXBoeXIgPSAiJHtiaW5kaXJ9L1hlcGh5ciIKK0ZJTEVTXyR7UE59LXh3YXlsYW5kID0gIiR7YmluZGlyfS9Yd2F5bGFuZCIKK0ZJTEVTXyR7UE59LW11bHRpbWVkaWEtbW9kdWxlcyA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL211bHRpbWVkaWEvKmRydioiCitGSUxFU18ke1BOfS1leHRlbnNpb24tZHJpID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJkcmkuc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZHJpMiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZHJpMi5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1nbHggPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmdseC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1yZWNvcmQgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYnJlY29yZC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1leHRtb2QgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmV4dG1vZC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1kYmUgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmRiZS5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJpbnQxMCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmludDEwLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYmFmYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmFmYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ3ZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ3ZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlibWZiID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlibWZiLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYmNmYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmNmYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1leGEgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJleGEuc28iCitGSUxFU18ke1BOfS1tb2R1bGUteGFhID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlieGFhLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYnhmMWJwcCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYnhmMWJwcC5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ4ZjRicHAgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ4ZjRicHAuc28iCitGSUxFU194Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy9tb2Rlc2V0dGluZ19kcnYuc28iCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWZvcD1ubyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1waWMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3RhdGljIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlY29yZCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kbXggXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteG5lc3QgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS14dmZiIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtY29tcG9zaXRlIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWR0cmFjZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbnQxMD14ODZlbXUgXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9L2V0Yy9YMTEgXAorICAgICAgICAgICAgICAgICAtLWxvY2Fsc3RhdGVkaXI9L3ZhciBcCisgICAgICAgICAgICAgICAgIC0td2l0aC14a2Itb3V0cHV0PS92YXIvbGliL3hrYiBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1zaGExPWxpYmNyeXB0byBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJkcmkyIHVkZXYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZHJpIGdseCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAid2F5bGFuZCIsICJ4d2F5bGFuZCIsICIiLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW3VkZXZdID0gIi0tZW5hYmxlLWNvbmZpZy11ZGV2LC0tZGlzYWJsZS1jb25maWctdWRldix1ZGV2IgorUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpLGdscHJvdG8gdmlydHVhbC9tZXNhIHhmODZkcmlwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCisjIERSSTMgcmVxdWlyZXMgeHNobWZlbmNlIHRvIGFsc28gYmUgZW5hYmxlZAorUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLC0tZGlzYWJsZS1kcmkzLGRyaTNwcm90byIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbHggLS1lbmFibGUtZ2x4LXRscywtLWRpc2FibGUtZ2x4LGdscHJvdG8gdmlydHVhbC9saWJnbCB2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUdbdW53aW5kXSA9ICItLWVuYWJsZS1saWJ1bndpbmQsLS1kaXNhYmxlLWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW3hzaG1mZW5jZV0gPSAiLS1lbmFibGUteHNobWZlbmNlLC0tZGlzYWJsZS14c2htZmVuY2UsbGlieHNobWZlbmNlIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW3N5c3RlbWQtbG9naW5kXSA9ICItLWVuYWJsZS1zeXN0ZW1kLWxvZ2luZD15ZXMsLS1lbmFibGUtc3lzdGVtZC1sb2dpbmQ9bm8sZGJ1cywiCitQQUNLQUdFQ09ORklHW3hpbmVyYW1hXSA9ICItLWVuYWJsZS14aW5lcmFtYSwtLWRpc2FibGUteGluZXJhbWEseGluZXJhbWFwcm90byIKK1BBQ0tBR0VDT05GSUdbeHdheWxhbmRdID0gIi0tZW5hYmxlLXh3YXlsYW5kLC0tZGlzYWJsZS14d2F5bGFuZCx3YXlsYW5kIGxpYmVwb3h5IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBJdHMgYXNzdW1lZCBiYXNlLWZpbGVzIGNyZWF0ZXMgdGhpcyBmb3IgdXMKKwlybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9sb2cvCit9CisKKyMgQWRkIHJ1bnRpbWUgcHJvdmlkZXMgZm9yIHRoZSBBQkkgdmVyc2lvbnMgb2YgdGhlIHZpZGVvIGFuZCBpbnB1dCBzdWJzeXN0ZW1zLAorIyBzbyB0aGF0IGRyaXZlcnMgY2FuIGRlcGVuZCBvbiB0aGUgcmVsZXZhbnQgdmVyc2lvbi4KK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICAjIFNldCBQS0dfQ09ORklHX1BBVEggc28gcGtnLWNvbmZpZyBsb29rcyBhdCB0aGUgLnBjIGZpbGVzIHRoYXQgYXJlIGdvaW5nCisgICAgIyBpbnRvIHRoZSBuZXcgcGFja2FnZSwgbm90IHRoZSBzdGFnZWQgb25lcy4KKyAgICBuZXdlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgbmV3ZW52WyJQS0dfQ09ORklHX1BBVEgiXSA9IGQuZXhwYW5kKCIke1BLR0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8iKQorCisgICAgZGVmIGdldF9hYmkobmFtZSk6CisgICAgICAgIGFiaXMgPSB7CisgICAgICAgICAgInZpZGVvIjogImFiaV92aWRlb2RydiIsCisgICAgICAgICAgImlucHV0IjogImFiaV94aW5wdXQiCisgICAgICAgIH0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncz0icGtnLWNvbmZpZyAtLXZhcmlhYmxlPSVzIHhvcmctc2VydmVyIiAlIGFiaXNbbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIGVudj1uZXdlbnYsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dHB1dCA9IHAuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgICAgIHJldHVybiAiJXN4b3JnLWFiaS0lcy0lcyIgJSAobWxwcmVmaXgsIG5hbWUsIG91dHB1dC5zcGxpdCgiLiIpWzBdKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIHBuLCAiICIgKyBnZXRfYWJpKCJpbnB1dCIpKQorICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIHBuLCAiICIgKyBnZXRfYWJpKCJ2aWRlbyIpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLzAwMDEtdXNlLV9fR0xJQkNfXy1ndWFyZC1mb3ItZ2xpYmMtc3BlY2lmaWMtY29kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU0ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBmMjQyNzQwZjY0ODhhMjVlNmNhODQ5NjhiMGUyMzE5YTlhMzk3NWI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMDo1Mjo1MCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2UgX19HTElCQ19fIGd1YXJkIGZvciBnbGliYyBzcGVjaWZpYyBjb2RlCisKK1VzaW5nIF9fbGludXhfXyBpcyBhIHRhZCBiaXQgd3JvbmcgYXNzdW1wdGlvbiBzaW5jZQorbGludXggIT0gZ2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaCBiL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmgKK2luZGV4IGViMGEzMzguLmMzNjZmZmMgMTAwNjQ0CistLS0gYS9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCisrKysgYi9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCitAQCAtMTc4LDcgKzE3OCw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAKKy0jaWZkZWYgX19saW51eF9fCisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDx0ZXJtaW8uaD4KKyAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fR0xJQkNfXyAqLworICNpbmNsdWRlIDx0ZXJtaW9zLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvbWFjcm9fdHdlYWsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGVlYTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1RoaXMgaXMgdGhlIHJldmlzZWQgdmVyc2lvbiBvZiBmaWxlcy9tYWNyb190d2Vhay5wYXRjaCBmb3IKK3hvcmctc2VydmVyIDEuOC45OS45MDQgYW5kIG5ld2VyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3hvcmctc2VydmVyLm00IGIveG9yZy1zZXJ2ZXIubTQKK2luZGV4IGJkZWNmNjIuLjA0MGZkYjggMTAwNjQ0CistLS0gYS94b3JnLXNlcnZlci5tNAorKysrIGIveG9yZy1zZXJ2ZXIubTQKK0BAIC0yOCwxMCArMjgsMTIgQEAgZG5sCisgIyBDaGVja3MgZm9yIHRoZSAkMSBkZWZpbmUgaW4geG9yZy1zZXJ2ZXIuaCAoZnJvbSB0aGUgc2RrKS4gIElmIGl0CisgIyBpcyBkZWZpbmVkLCB0aGVuIGFkZCAkMSB0byAkUkVRVUlSRURfTU9EVUxFUy4KKyAKKyttNF9wYXR0ZXJuX2FsbG93KFBLR19DT05GSUdfU1lTUk9PVF9ESVIpCisrCisgQUNfREVGVU4oW1hPUkdfRFJJVkVSX0NIRUNLX0VYVF0sWworIAlBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyAJU0FWRV9DRkxBR1M9IiRDRkxBR1MiCistCUNGTEFHUz0iJENGTEFHUyAtSWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXNka2RpciB4b3JnLXNlcnZlcmAiCisrCUNGTEFHUz0iJENGTEFHUyAtSSRQS0dfQ09ORklHX1NZU1JPT1RfRElSYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9c2RrZGlyIHhvcmctc2VydmVyYCIKKyAJQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworICNpbmNsdWRlICJ4b3JnLXNlcnZlci5oIgorICNpZiAhZGVmaW5lZCAkMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTcuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDM5ZDMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIKQEAgLTAsMCArMSwyOCBAQAorcmVxdWlyZSB4c2VydmVyLXhvcmcuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMzk3ZTQwNTU2NjY1MTE1MDQ5MGZmNDkzZTQ2M2YxYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjYxMTIwNjEyNzI4ZjJjNTAzNDY3MWQwY2EzZTIyNzM0MzhjNjBhYmE5M2IzZGRhNGE4YWE0MGU2YTI1Nzk5MyIKKworIyBUaGVzZSBleHRlbnNpb25zIGFyZSBub3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzZXJ2ZXIsIHNvIGRlY2xhcmUgdGhlIG1pZ3JhdGlvbgorIyBwYXRoIGZvciBpbi1wbGFjZSB1cGdyYWRlcy4KKworUlJFUExBQ0VTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKK1JQUk9WSURFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCitSQ09ORkxJQ1RTXyR7UE59ID0gIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHJlc3RvcC94cmVzdG9wXzAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZGYwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYUmVzOiBBIHRvcC1saWtlIHJlc291cmNlIHVzYWdlIHRvb2wgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gInRvcC1saWtlIHN0YXRpc3RpY3Mgb2YgWDExIHNlcnZlciByZXNvdXJjZSB1c2FnZSBieSBjbGllbnRzIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3hyZXN0b3AiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hyZXN0b3AuYztlbmRsaW5lPTE4O21kNT03MzA4NzZjMzBmMGQ4YTkyODY3NmJjZDEyNDJhM2IzNSIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitQUiA9ICJyMyIKKworREVQRU5EUyA9ICJsaWJ4cmVzIGxpYnhleHQgdmlydHVhbC9saWJ4MTEgbmN1cnNlcyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMveHJlc3RvcC94cmVzdG9wLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ4YTU0NTk2Y2JhZjAzN2U2MmI4MGM0NTg1YTNjYTliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3YzJmYzk0YTdlY2VkYmFhZTBkMTgzN2U4MmU5M2QxZDk4ZjRhNmQ3NTk4Mjg4NjBlNTUyMTE5YWYzY2UyNTciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC8zMHhUc19DYWxpYnJhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0MzYxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworaWYgWyAiJEhBVkVfVE9VQ0hTQ1JFRU4iID0gIjEiIF07IHRoZW4KKwluPTEKKwl3aGlsZSBbICEgLXogJFRTTElCX1RTREVWSUNFIF0gJiYgWyAhIC1mIC9ldGMvcG9pbnRlcmNhbCBdICYmIFsgJG4gLWxlIDUgXQorCWRvCisJICAgL3Vzci9iaW4veHRzY2FsCisJICAgc2xlZXAgMQorCSAgIG49JCgoJG4rMSkpCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jaGFuZ2UtY3Jvc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhNzcxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gdG1wL21haW4uYy5vcmlnCTIwMDctMDEtMDIgMTU6Mzk6NTQuMDAwMDAwMDAwICswMDAwCisrKysgdG1wL21haW4uYwkyMDA3LTAxLTAyIDE1OjM5OjU0LjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMSw5ICsxMzEsMTAgQEAKKyB7CisgICBYUmVuZGVyRmlsbFJlY3RhbmdsZXMgKGRweSwgUGljdE9wU3JjLCBwaWN0LCAmcmVjdF9jb2xvciwgcmVjdGFuZ2xlcywgMik7CisgCistICBYRmlsbEFyYyAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLCAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwgCistCSAgICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwKKy0JICAgIFdJRFRIICsgMSwgV0lEVEggKyAxLCAwLCAzNjAgKiA2NCk7CisrICBYRmlsbFJlY3RhbmdsZSAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLAorKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAorKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAorKwkJICBXSURUSCwgV0lEVEgpOworIH0KKyAKKyB2b2lkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiMDg1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2xlYW51cC5wYXRjaApAQCAtMCwwICsxLDYyMSBAQAorLS0tCisgTWFrZWZpbGUuYW0gIHwgICAgOSAtLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDMgCisgZ3BlLWRpc3QuYW0gIHwgICAxMiAtLS0KKyBoMzYwMF90cy5oICAgfCAgMjE2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbWFpbi5jICAgICAgIHwgIDIxMCArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB4dHNjYWwuaW4gICAgfCAgIDE5IC0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA0NTUgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeHRzY2FsLTAuNi4zL3h0c2NhbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL3h0c2NhbC5pbgkyMDA0LTA5LTEwIDIwOjEwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsMTkgKzAsMCBAQAorLSMhL2Jpbi9zaAorLQorLW1vZHVsZV9pZCgpIHsKKy0gICAgIyBHZXQgbW9kZWwgbmFtZQorLSAgICBlY2hvIGBncmVwICJeSGFyZHdhcmUiIC9wcm9jL2NwdWluZm8gfCBzZWQgLWUgInMvLio6ICovLyIgfCB0ciBhLXogQS1aYAorLX0KKy0KKy1jYXNlIGBtb2R1bGVfaWRgIGluCistCSJIUCBJUEFRIEgzMTAwIiB8ICJIUCBJUEFRIEgzODAwIiApCistCQlBUkdTPSItcm90YXRlIDkwIiA7OworLQkiSFAgSVBBUSBIMzYwMCIgfCAiSFAgSVBBUSBIMzcwMCIgfCAiSFAgSVBBUSBIMzkwMCIgfCAqQ09MTElFIHwgKlBPT0RMRSkKKy0JCUFSR1M9Ii1yb3RhdGUgMjcwIiA7OworLQkjIEgyMjAwOiB3b3JrcyB3aXRob3V0IHJvdGF0aW9uCistZXNhYworLQorLSMgdGhlIHRoaW5ncyB3ZSBkbyBmb3IgYXV0b2NvbmYKKy1wcmVmaXg9QHByZWZpeEAKKy1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACistZXhlYyBAbGliZXhlY2RpckAveHRzY2FsLmJpbiAkQVJHUyAkKgorSW5kZXg6IHh0c2NhbC0wLjYuMy9tYWluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9tYWluLmMJMjAwNy0wNy0wMSAwMToxMjo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyB4dHNjYWwtMC42LjMvbWFpbi5jCTIwMDctMDctMDEgMDE6MTI6NTUuMDAwMDAwMDAwICswMTAwCitAQCAtMjIsMTIgKzIyLDEwIEBACisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CisgCisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKy0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJhbmRyLmg+CisgI2luY2x1ZGUgPFgxMS9YZnQvWGZ0Lmg+CisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL3hjYWxpYnJhdGUuaD4KKyAjaW5jbHVkZSA8WDExL2tleXN5bS5oPgorIAorLSNpbmNsdWRlICJoMzYwMF90cy5oIgorICNpbmNsdWRlICJjYWxpYnJhdGUuaCIKKyAKKyBEaXNwbGF5ICpkcHk7CitAQCAtNDUsMTUgKzQzLDExIEBAIFhmdENvbG9yIHhmdGNvbDsKKyBYZnREcmF3ICp4ZnRkcmF3OworIFhmdEZvbnQgKnhmdGZvbnQ7CisgaW50IHNjcmVlbl94LCBzY3JlZW5feTsKKy1pbnQgdHNfZmQ7CisgaW50IHNhbXBsZXM7CisgUGl4bWFwIGJnX3BpeG1hcDsKKyBpbnQgZmxhZ19kZWJ1ZzsKKy1pbnQgcm90YXRpb24gPSAwOworIGludCBlcnJvcl9iYXNlLCBldmVudF9iYXNlOworIAorLWludCB1c2luZ194Y2FsaWJyYXRlOworLQorIGludCBtb3Zpbmc7CisgCisgI2RlZmluZSBDUk9TU0hBSVJfU0laRQkyNQorQEAgLTYzLDcgKzU3LDYgQEAgaW50IG1vdmluZzsKKyAjZGVmaW5lIEVOT1VHSCA1CisgI2RlZmluZSBNQVhfU0FNUExFUyA0MAorIAorLSNkZWZpbmUgUkFXX0RFVklDRSAiL2Rldi9oMzYwMF90c3JhdyIKKyAjZGVmaW5lIEZPTlROQU1FICJzYW5zLTEwIgorIAorIHN0cnVjdCBwb2ludCAKK0BAIC0yODcsMTIgKzI4MCw4IEBAIHNvcnRfYnlfeSAoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCAqYikKKyB2b2lkCisgc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQorIHsKKy0gIFRTX0NBTCB0YzsKKy0gIGludCB4dHJhbnMsIHl0cmFucywgeHNjYWxlLCB5c2NhbGUsIHh5c2NhbGUsIHl4c2NhbGU7CisgICBjYWxpYnJhdGlvbiBvY2FsID0gKmNhbDsKKyAKKy0gIGlmICh1c2luZ194Y2FsaWJyYXRlKQorLSAgICB7CisgICAgICAgRklMRSAqZnA7CisgICAgICAgaWYgKGZsYWdfZGVidWcpCisgCXByaW50ZiAoImNvbnN0YW50cyBhcmU6ICVkICVkICVkICVkICVkICVkICVkXG4iLCBjYWwtPmFbMV0sIGNhbC0+YVsyXSwgY2FsLT5hWzBdLCBjYWwtPmFbNF0sIGNhbC0+YVs1XSwgY2FsLT5hWzNdLCBjYWwtPmFbNl0pOworQEAgLTMwNCwyOSArMjkzLDYgQEAgc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQorIAl9CisgICAgICAgZnByaW50ZiAoZnAsICIlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgY2FsLT5hWzFdLCBjYWwtPmFbMl0sIGNhbC0+YVswXSwgY2FsLT5hWzRdLCBjYWwtPmFbNV0sIGNhbC0+YVszXSwgY2FsLT5hWzZdKTsKKyAgICAgICBmY2xvc2UgKGZwKTsgCistICAgICAgcmV0dXJuOworLSAgICB9CistCistICB4dHJhbnMgPSBjYWwtPmFbMF0gLyBjYWwtPmFbNl07CistICB5dHJhbnMgPSBjYWwtPmFbM10gLyBjYWwtPmFbNl07CistICB4c2NhbGUgPSBjYWwtPmFbMV0gKiAyNTYgLyBjYWwtPmFbNl07CistICB5c2NhbGUgPSBjYWwtPmFbNV0gKiAyNTYgLyBjYWwtPmFbNl07CistICB4eXNjYWxlID0gY2FsLT5hWzJdICogMjU2IC8gY2FsLT5hWzZdOworLSAgeXhzY2FsZSA9IGNhbC0+YVs0XSAqIDI1NiAvIGNhbC0+YVs2XTsKKy0gIAorLSAgdGMueHRyYW5zID0geHRyYW5zOworLSAgdGMueXRyYW5zID0geXRyYW5zOworLSAgdGMueHNjYWxlID0geHNjYWxlOworLSAgdGMueXNjYWxlID0geXNjYWxlOworLSAgdGMueHlzd2FwID0gMDsKKy0KKy0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7CistCistICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19TRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKKy0gICAgeworLSAgICAgIHBlcnJvciAoIlRTX1NFVF9DQUwiKTsKKy0gICAgICBleGl0ICgxKTsKKy0gICAgfQorIH0KKyAKKyB2b2lkCitAQCAtMzk4LDgwICszNjQsMTMgQEAgaGFuZGxlX3RzX2V2ZW50IChpbnQgeCwgaW50IHksIGludCBwcmVzcworIH0KKyAKKyB2b2lkCistcmVhZF90cyAodm9pZCkKKy17CistICBUU19FVkVOVCB0c19ldjsKKy0gIGludCByOworLQorLSAgciA9IHJlYWQgKHRzX2ZkLCAmdHNfZXYsIHNpemVvZiAodHNfZXYpKTsKKy0gIGlmIChyID09IHNpemVvZiAodHNfZXYpKQorLSAgICBoYW5kbGVfdHNfZXZlbnQgKHRzX2V2LngsIHRzX2V2LnksIHRzX2V2LnByZXNzdXJlKTsKKy19CistCistdm9pZAorLWRvX2NhbCAoY2hhciAqKmFyZ3MpCisteworLSAgVFNfQ0FMIHRjOworLQorLSAgdGMueHNjYWxlID0gYXRvaSAoYXJnc1swXSk7CistICB0Yy54dHJhbnMgPSBhdG9pIChhcmdzWzFdKTsKKy0gIHRjLnlzY2FsZSA9IGF0b2kgKGFyZ3NbMl0pOworLSAgdGMueXRyYW5zID0gYXRvaSAoYXJnc1szXSk7CistICB0Yy54eXN3YXAgPSBhdG9pIChhcmdzWzRdKTsKKy0KKy0gIGlmIChmbGFnX2RlYnVnKQorLSAgICBmcHJpbnRmIChzdGRlcnIsICJzZXR0aW5nOiAlZCAlZCAlZCAlZCAlZFxuIiwgCistCSAgICAgdGMueHRyYW5zLCB0Yy55dHJhbnMsIHRjLnhzY2FsZSwgdGMueXNjYWxlLCB0Yy54eXN3YXApOworLSAgICAKKy0gIGlmIChpb2N0bCAodHNfZmQsIFRTX1NFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQorLSAgICB7CistICAgICAgcGVycm9yICgiVFNfU0VUX0NBTCIpOworLSAgICAgIGV4aXQgKDEpOworLSAgICB9CistICAKKy0gIGV4aXQgKDApOworLX0KKy0KKy12b2lkCistc2hvd19jYWwgKHZvaWQpCisteworLSAgVFNfQ0FMIHRjOworLQorLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfR0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCistICAgIHsKKy0gICAgICBwZXJyb3IgKCJUU19HRVRfQ0FMIik7CistICAgICAgZXhpdCAoMSk7CistICAgIH0KKy0KKy0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7CistfQorLQorLXZvaWQKKyB1c2FnZSAoY29uc3QgY2hhciAqbmFtZSkKKyB7CistICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgLXZpZXdcbiIsIG5hbWUpOworLSAgZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICVzIFstcm90YXRlIDwwIHwgOTAgfCAxODAgfCAyNzA+XVxuIiwgbmFtZSk7CistICBmcHJpbnRmIChzdGRlcnIsICIgICAgICAgJXMgLWNhbCA8eHM+IDx4dD4gPHlzPiA8eXQ+IDx4eXN3YXA+XG4iLCBuYW1lKTsKKy0KKysgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyBbLWRlYnVnXVxuIiwgbmFtZSk7CisgICBleGl0ICgxKTsKKyB9CisgCisgaW50CisteHJyX3N1cHBvcnRlZCAodm9pZCkKKy17CistICBpbnQgeHJyX2V2ZW50X2Jhc2UsIHhycl9lcnJvcl9iYXNlOworLSAgaW50IHhycl9tYWpvciwgeHJyX21pbm9yOworLQorLSAgaWYgKFhSUlF1ZXJ5RXh0ZW5zaW9uIChkcHksICZ4cnJfZXZlbnRfYmFzZSwgJnhycl9lcnJvcl9iYXNlKSA9PSBGYWxzZQorLSAgICAgIHx8IFhSUlF1ZXJ5VmVyc2lvbiAoZHB5LCAmeHJyX21ham9yLCAmeHJyX21pbm9yKSA9PSAwCistICAgICAgfHwgeHJyX21ham9yICE9IDEKKy0gICAgICB8fCB4cnJfbWlub3IgPCAxKQorLSAgICByZXR1cm4gMDsKKy0KKy0gIHJldHVybiAxOworLX0KKy0KKy1pbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CitAQCAtNDgwLDMxICszNzksMTEgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGludCBtYXhfZmQ7CisgICBHQyBiZ19nYzsKKyAgIGludCBpOworLSAgaW50IGhhdmVfeHJhbmRyOworIAorICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICAgeworLSAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLXZpZXciKSkKKy0JeworLQkgIHNob3dfY2FsICgpOworLQkgIGV4aXQgKDApOworLQl9CistICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1kZWJ1ZyIpKQorKyAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWRlYnVnIikpCisgCWZsYWdfZGVidWcgPSAxOworLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItY2FsIikpCistCXsKKy0JICBpZiAoYXJnYyA+IChpICsgNSkpCistCSAgICBkb19jYWwgKGFyZ3YgKyBpICsgMSk7CistCSAgZWxzZQorLQkgICAgdXNhZ2UgKGFyZ3ZbMF0pOworLQl9CistICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1yb3RhdGUiKSkKKy0JeworLQkgIGlmIChhcmdjID4gKGkgKyAxKSkKKy0JICAgIHJvdGF0aW9uID0gYXRvaSAoYXJndlsrK2ldKTsKKy0JICBlbHNlCistCSAgICB1c2FnZSAoYXJndlswXSk7CistCX0KKyAgICAgICBlbHNlCisgCXVzYWdlIChhcmd2WzBdKTsKKyAgICAgfQorQEAgLTUzMSw0OCArNDEwLDExIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgZnByaW50ZiAoc3RkZXJyLCAiZmFpbGVkIHRvIHNldCByYXcgbW9kZTogZXJyb3IgJWRcbiIsIHIpOworIAkgIGV4aXQgKDEpOworIAl9CistCistICAgICAgdXNpbmdfeGNhbGlicmF0ZSA9IDE7CistICAgIH0KKy0KKy0gIGhhdmVfeHJhbmRyID0geHJyX3N1cHBvcnRlZCAoKTsKKy0gIGlmIChoYXZlX3hyYW5kcikKKy0gICAgeworLSAgICAgIFhSUlNjcmVlbkNvbmZpZ3VyYXRpb24gKnJyX3NjcmVlbjsKKy0gICAgICBSb3RhdGlvbiBjdXJyZW50X3JvdGF0aW9uOworLQorLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJYUkFORFIgaXMgc3VwcG9ydGVkXG4iKTsKKy0KKy0gICAgICBycl9zY3JlZW4gPSBYUlJHZXRTY3JlZW5JbmZvIChkcHksIFJvb3RXaW5kb3cgKGRweSwgc2NyZWVuKSk7CistCistICAgICAgWFJSUm90YXRpb25zIChkcHksIHNjcmVlbiwgJmN1cnJlbnRfcm90YXRpb24pOworLQorLSAgICAgIFhSUkZyZWVTY3JlZW5Db25maWdJbmZvIChycl9zY3JlZW4pOworLQorLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJDdXJyZW50IFJBTkRSIHJvdGF0aW9uIGlzICVkXG4iLCBjdXJyZW50X3JvdGF0aW9uKTsKKy0KKy0gICAgICBzd2l0Y2ggKGN1cnJlbnRfcm90YXRpb24pCistCXsKKy0JY2FzZSBSUl9Sb3RhdGVfMjcwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQljYXNlIFJSX1JvdGF0ZV8xODA6CistCSAgcm90YXRpb24gKz0gOTA7CistCWNhc2UgUlJfUm90YXRlXzkwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQkgIHJvdGF0aW9uICU9IDM2MDsKKy0JY2FzZSBSUl9Sb3RhdGVfMDoKKy0JICBicmVhazsKKy0JZGVmYXVsdDoKKy0JICBmcHJpbnRmIChzdGRlcnIsICJVbmtub3duIFJBTkRSIHJvdGF0aW9uOiAlZFxuIiwgY3VycmVudF9yb3RhdGlvbik7CistCSAgYnJlYWs7CistCX0KKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgaWYgKGZsYWdfZGVidWcpCistCWZwcmludGYgKHN0ZGVyciwgIlhSQU5EUiBub3Qgc3VwcG9ydGVkXG4iKTsKKysgICAgICBwZXJyb3IgKCJYQ0FMSUJSQVRFIGV4dGVuc2lvbiBtaXNzaW5nIik7CisrICAgICAgZXhpdCAoMSk7CisgICAgIH0KKyAKKyAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBmbGFnX2RlYnVnID8gRmFsc2UgOiBUcnVlOworQEAgLTY2Niw0NSArNTA4LDE3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgICBmb3IgKGkgPSAwOyBpIDwgTlJfUE9JTlRTOyBpKyspCisgICAgIHsKKy0gICAgICBzd2l0Y2ggKHJvdGF0aW9uKQorLQl7CistCWNhc2UgMDoKKy0JICBjYWwueGZiW2ldID0gY2FsLnhzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IGNhbC55c2NyW2ldOworLQkgIGJyZWFrOworLQljYXNlIDkwOgorLQkgIGNhbC54ZmJbaV0gPSBjYWwueXNjcltpXTsKKy0JICBjYWwueWZiW2ldID0gc2NyZWVuX3ggLSBjYWwueHNjcltpXTsKKy0JICBicmVhazsKKy0JY2FzZSAxODA6CistCSAgY2FsLnhmYltpXSA9IHNjcmVlbl94IC0gY2FsLnhzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IHNjcmVlbl95IC0gY2FsLnlzY3JbaV07CistCSAgYnJlYWs7CistCWNhc2UgMjcwOgorLQkgIGNhbC54ZmJbaV0gPSBzY3JlZW5feSAtIGNhbC55c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBjYWwueHNjcltpXTsKKy0JICBicmVhazsKKy0JfQorKyAgICAgIGNhbC54ZmJbaV0gPSBjYWwueHNjcltpXTsKKysgICAgICBjYWwueWZiW2ldID0gY2FsLnlzY3JbaV07CisrICAgICAgWENhbGlicmF0ZVNjcmVlblRvQ29vcmQgKGRweSwgJmNhbC54ZmJbaV0sICZjYWwueWZiW2ldKTsKKyAKKyAgICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JcHJpbnRmICgicm90YXRpb24gJWQ6ICglZCwlZCkgLT4gKCVkLCVkKVxuIiwgcm90YXRpb24sIAorKwlwcmludGYgKCJyb3RhdGlvbiBjb252ZXJzaW9uOiAoJWQsJWQpIC0+ICglZCwlZClcbiIsCisgCQljYWwueHNjcltpXSwgY2FsLnlzY3JbaV0sIGNhbC54ZmJbaV0sIGNhbC55ZmJbaV0pOworICAgICB9CisgCisgICBuZXh0X2V2ZW50ICgpOworIAorLSAgaWYgKCF1c2luZ194Y2FsaWJyYXRlKQorLSAgICB7CistICAgICAgdHNfZmQgPSBvcGVuIChSQVdfREVWSUNFLCBPX1JET05MWSk7CistICAgICAgaWYgKHRzX2ZkIDwgMCkKKy0JeworLQkgIHBlcnJvciAoUkFXX0RFVklDRSk7CistCSAgZXhpdCAoMSk7CistCX0KKy0gICAgfQorLQorLSAgbWF4X2ZkID0gKHhmZCA+IHRzX2ZkKSA/IHhmZCA6IHRzX2ZkOworLQorICAgZm9yICg7OykKKyAgICAgeworICAgICAgIGZkX3NldCBmZHM7CitAQCAtNzEzLDEyICs1MjcsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorICAgICAgIEZEX1pFUk8gKCZmZHMpOworICAgICAgIEZEX1NFVCAoeGZkLCAmZmRzKTsKKy0gICAgICBpZiAodHNfZmQgIT0gLTEpCistCUZEX1NFVCAodHNfZmQsICZmZHMpOworIAorLSAgICAgIHNlbGVjdCAobWF4X2ZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7CistICAgICAgCistICAgICAgaWYgKHRzX2ZkICE9IC0xICYmIEZEX0lTU0VUICh0c19mZCwgJmZkcykpCistCXJlYWRfdHMgKCk7CisrICAgICAgc2VsZWN0ICh4ZmQgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgfQorIH0KKysKK0luZGV4OiB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvY29uZmlndXJlLmFjCTIwMDQtMDktMTAgMjA6MTE6MTIuMDAwMDAwMDAwICswMTAwCisrKysgeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTAxIDAxOjEyOjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTksOCArOSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4cmFuZHIgeGNhbGlicmF0ZSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorLUFDX0NPTkZJR19GSUxFUyhbeHRzY2FsXSkKKyBBQ19PVVRQVVQKK0luZGV4OiB4dHNjYWwtMC42LjMvZ3BlLWRpc3QuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9ncGUtZGlzdC5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsMTIgKzAsMCBAQAorLUNWU1RBRyA6PSAkKHNoZWxsIGVjaG8gJChQQUNLQUdFKS0kKFZFUlNJT04pIHwgdHIgW2Etei5dIFtBLVpfXSkKKy0KKy1kaXN0LXVwbG9hZDogZGlzdAorLQlzY3AgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci5iejIgJChVU0VSKUBoYW5kaGVsZHMub3JnOi9ob21lL2Z0cC9wdWIvcHJvamVjdHMvZ3BlL3NvdXJjZS8KKy0KKy10YWc6CistCWN2cyB0YWcgJChDVlNUQUcpCistCistcmV0YWc6CistCWN2cyB0YWcgLUYgJChDVlNUQUcpCistCistc291cmNlOiB0YWcgZGlzdC11cGxvYWQKK0luZGV4OiB4dHNjYWwtMC42LjMvaDM2MDBfdHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2gzNjAwX3RzLmgJMjAwMy0wNy0wNSAxNzoyNzoxMC4wMDAwMDAwMDAgKzAxMDAKKysrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDIxNiArMCwwIEBACistLyoKKy0qCistKiBEcml2ZXIgZm9yIHRoZSBIMzYwMCBUb3VjaCBTY3JlZW4gYW5kIG90aGVyIEF0bWVsIGNvbnRyb2xsZWQgZGV2aWNlcy4KKy0qCistKiBDb3B5cmlnaHQgMjAwMCBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24uCistKgorLSogVXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgR05VIEdQTCBpcyBwZXJtaXR0ZWQsCistKiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworLSogcHJlc2VydmVkIGluIGl0cyBlbnRpcmV0eSBpbiBhbGwgY29waWVzIGFuZCBkZXJpdmVkIHdvcmtzLgorLSoKKy0qIENPTVBBUSBDT01QVVRFUiBDT1JQT1JBVElPTiBNQUtFUyBOTyBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKy0qIEFTIFRPIFRIRSBVU0VGVUxORVNTIE9SIENPUlJFQ1RORVNTIE9GIFRISVMgQ09ERSBPUiBJVFMKKy0qIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCistKgorLSogQXV0aG9yOiBDaGFybGVzIEZseW5uLgorLSoKKy0qLworLQorLQorLSNpZm5kZWYgX19IMzYwMF9UU19IX18KKy0jZGVmaW5lIF9fSDM2MDBfVFNfSF9fCistCistI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CistCistZW51bSBoMzYwMF90c19taW5vcl9kZXZpY2VzIHsKKy0JVFNfTUlOT1IgICAgPSAwLAorLQlUU1JBV19NSU5PUiA9IDEsCistCUtFWV9NSU5PUiAgID0gMgorLX07CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24geworLSAgICAgICAgaW50IHhzY2FsZTsKKy0gICAgICAgIGludCB4dHJhbnM7CistICAgICAgICBpbnQgeXNjYWxlOworLSAgICAgICAgaW50IHl0cmFuczsKKy0gICAgICAgIGludCB4eXN3YXA7CistfSBUU19DQUw7CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZXZlbnQgeworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJlc3N1cmU7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCB4OworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeTsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZDsKKy19IFRTX0VWRU5UOworLQorLS8qIERlcHJlY2F0ZWQgLSBkbyBub3QgdXNlICovCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfcmV0dXJuIHsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByZXNzdXJlOworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeDsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHk7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7CistfSBUU19SRVQ7CistCistZW51bSBwb3dlcl9idXR0b25fbW9kZSB7CistICAgUEJNX1NVU1BFTkQgICAgICAgICAgID0gMCwKKy0gICBQQk1fR0VORVJBVEVfS0VZUFJFU1MgPSAxCistfTsKKy0KKy0KKy0vKiArKysrKysrKysrKysrKyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICovCistCistdHlwZWRlZiBzdHJ1Y3QgdGhlcm1fZGV2IHsKKy0Jc2hvcnQgZGF0YTsKKy19IFRIRVJNX0RFVjsKKy0KKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9BTEtBTElORSAgICAgICAgMHgwMQorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05JQ0QgICAgICAgICAgICAweDAyCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTklNSCAgICAgICAgICAgIDB4MDMKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9MSU9OICAgICAgICAgICAgMHgwNAorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX0xJUE9MWSAgICAgICAgICAweDA1CistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTk9UX0lOU1RBTExFRCAgIDB4MDYKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9VTktOT1dOICAgICAgICAgMHhmZgorLQorLS8qIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUgYXBtX2Jpb3MuaCBkZWZpbml0aW9ucyAqLworLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09GRkxJTkUJMHgwMAorLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09OTElORQkweDAxCistI2RlZmluZSBIMzYwMF9BQ19TVEFUVVNfQUNfQkFDS1VQCTB4MDIgICAvKiBXaGF0IGRvZXMgdGhpcyBtZWFuPyAqLworLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX1VOS05PV04JMHhmZgorLQorLS8qIFRoZXNlIGJpdGZpZWxkcyBhcmUgcmFyZWx5ICJvcidkIiB0b2dldGhlciAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfSElHSAkJMHgwMQorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfTE9XCQkweDAyCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DUklUSUNBTAkweDA0CistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0lORwkweDA4CistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0VfTUFJTiAgIDB4MTAKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0RFQUQgICAgICAgICAgMHgyMCAgIC8qIEJhdHRlcnkgd2lsbCBub3QgY2hhcmdlICovCistI2RlZmluZSBIMzYwMF9CQVRUX05PVF9JTlNUQUxMRUQgICAgICAgIDB4MjAgICAvKiBGb3IgZXhwYW5zaW9uIHBhY2sgYmF0dGVyaWVzICovCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19GVUxMICAgICAgICAgIDB4NDAgICAvKiBCYXR0ZXJ5IGZ1bGx5IGNoYXJnZWQgKGFuZCBjb25uZWN0ZWQgdG8gQUMpICovCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19OT0JBVFQJMHg4MAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfVU5LTk9XTgkweGZmCistCistc3RydWN0IGJhdHRlcnlfZGF0YSB7CistCXVuc2lnbmVkIGNoYXIgIGNoZW1pc3RyeTsKKy0JdW5zaWduZWQgY2hhciAgc3RhdHVzOworLQl1bnNpZ25lZCBzaG9ydCB2b2x0YWdlOyAgICAvKiBWb2x0YWdlIGZvciBiYXR0ZXJ5ICMwOyB1bmtub3duIGZvciBiYXR0ZXJ5ICMxICovCistCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRhZ2U7IC8qIFBlcmNlbnRhZ2Ugb2YgZnVsbCBjaGFyZ2UgKi8KKy0JdW5zaWduZWQgc2hvcnQgbGlmZTsgICAgICAgLyogTGlmZSByZW1haW5pbmcgaW4gbWludXRlcyAqLworLX07CistCistc3RydWN0IGgzNjAwX2JhdHRlcnkgeworLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICBhY19zdGF0dXM7CistCXVuc2lnbmVkIGNoYXIgICAgICAgYmF0dGVyeV9jb3VudDsgIC8qIEhvdyBtYW55IGJhdHRlcmllcyB3ZSBoYXZlICovCistCXN0cnVjdCBiYXR0ZXJ5X2RhdGEgYmF0dGVyeVsyXTsKKy19OworLQorLS8qIC0tLS0tLS0tIEVFUFJPTSBhbmQgU1BJIEludGVyZmFjZXMgLS0tLS0tLS0tLS0tLS0tKi8KKy0KKy0jZGVmaW5lIEVFUFJPTV9SRF9CVUZTSVogNgkvKiBFRVBST00gcmVhZHMgYXJlIDE2IGJpdHMgKi8KKy0jZGVmaW5lIEVFUFJPTV9XUl9CVUZTSVogNQkvKiBBbGxvdyByb29tIGZvciA4Yml0ICdhZGRyJyBmaWVsZCBpbiBidWZmZXIqLyAKKy0jZGVmaW5lIFNQSV9SRF9CVUZTSVoJIDE2CS8qIFNQSSByZWFkcyBhcmUgOCBiaXRzICovCistI2RlZmluZSBTUElfV1JfQlVGU0laCSA3CistCistLyogVGhlIEVFUFJPTSBpcyB3aGVyZSBpbnRlcm5hbCBwcm9ncmFtcyBhcmUgc3RvcmVkIG9uIHRoZSBBbXRlbC4KKy0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byByZWFkIG9yIHdyaXRlIHRoZXNlIHZhbHVlcyAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV9yZWFkX3JlcXVlc3QgeworLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDhiaXQgQWRkcmVzcyBPZmZzZXQgMC0yNTUgKi8KKy0JdW5zaWduZWQgY2hhciBsZW47ICAgICAvKiBOdW1iZXIgb2YgMTZiaXQgd29yZHMgdG8gcmVhZCAwLTEyOCAgKi8KKy0JdW5zaWduZWQgc2hvcnQgYnVmZltFRVBST01fUkRfQlVGU0laXTsKKy19IEVFUFJPTV9SRUFEOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV93cml0ZV9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgY2hhciBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLworLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDAtMTI4ICAqLworLQl1bnNpZ25lZCBzaG9ydCBidWZmW0VFUFJPTV9XUl9CVUZTSVpdOworLX0gRUVQUk9NX1dSSVRFOworLQorLS8qIFRoZSBTUEkgYnVzIGNvbm5lY3RzIHRvIEVFUFJPTXMgbG9jYXRlZCBvbiBzbGVldmVzIHBsdWdnZWQgaW50bworLSAgIHRoZSBpUEFRLiAgWW91IG1heSB3YW50IHRvIHJlYWQgdGhlc2UgdmFsdWVzICAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3NwaV9yZWFkX3JlcXVlc3QgeworLQl1bnNpZ25lZCBzaG9ydCBhZGRyOyAgICAvKiAxNmJpdCBBZGRyZXNzIE9mZnNldCAwLTEyOCAqLworLQl1bnNpZ25lZCBjaGFyIGxlbjsgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAqLworLQl1bnNpZ25lZCBjaGFyIGJ1ZmZbU1BJX1JEX0JVRlNJWl07CistfSBTUElfUkVBRDsKKy0KKy0jZGVmaW5lIFNQSV9SRUFEX1NUQVRVU19CWVRFICAweGZmZmYgICAvKiBVc2UgdGhpcyBhZGRyZXNzIHRvIHJlYWQgdGhlIHN0YXR1cyBieXRlICovCistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfc3BpX3dyaXRlX3JlcXVlc3QgeworLQl1bnNpZ25lZCBzaG9ydCBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLworLQl1bnNpZ25lZCBzaG9ydCBhZGRyOwkvKiB0aGlzIDE2Yml0IGFkZHJlc3MgYWNjZXNzZXMgYSBzaW5nbGUgYnl0ZSAqLworLQl1bnNpZ25lZCBjaGFyICBidWZmW1NQSV9XUl9CVUZTSVpdOworLX0gU1BJX1dSSVRFOworLQorLQorLS8qIC0tLS0tLS0tIGVuZCBvZiBFRVBST00gYW5kIFNQSSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0tLS0tLSovCistCistLyogVXNlciBzcGFjZSBzdHJ1Y3R1cmVzIGZvciBJT0NUTCBjYWxscyAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX3ZlcnNpb24geworLQl1bnNpZ25lZCBjaGFyIGhvc3RfdmVyc2lvbls4XTsJLyogYXNjaWkgIngueXkiICovCistCXVuc2lnbmVkIGNoYXIgcGFja192ZXJzaW9uWzhdOwkvKiBhc2NpaSAieC55eSIgKi8KKy0JdW5zaWduZWQgY2hhciBib290X3R5cGU7CQkvKiBUT0RPID8/ICovCistfSBWRVJfUkVUOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2xlZCB7CistICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZk9uQmxpbms7ICAgICAgIC8qIDA9b2ZmIDE9b24gMj1CbGluayAqLworLSAgICAgICAgdW5zaWduZWQgY2hhciBUb3RhbFRpbWU7ICAgICAgICAvKiBVbml0cyBvZiA1IHNlY29uZHMgKi8KKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgT25UaW1lOyAgICAgICAgICAgLyogdW5pdHMgb2YgMTAwbS9zICovCistICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZlRpbWU7ICAgICAgICAgIC8qIHVuaXRzIG9mIDEwMG0vcyAqLworLX0gTEVEX0lOOworLQorLWVudW0gZmxpdGVfbW9kZSB7CistICAgICAgICBGTElURV9NT0RFMSA9IDEsCistCUZMSVRFX0FVVE9fTU9ERSAgID0gMSwgICAgIC8qIGZvciByZWZlcmVuY2Ugb25seSAqLworLQlGTElURV9NQU5VQUxfTU9ERSA9IDIsICAgICAvKiBVc2UgdGhpcyBub3JtYWxseT8gKi8KKy0JRkxJVEVfR0VUX0xJR0hUX1NFTlNPUiA9IDMgLyogUmV0dXJucyBsaWdodCByZWFkaW5nIGluICJicmlnaHRuZXNzIiBmaWVsZCAqLworLX07CistZW51bSBmbGl0ZV9wd3IgeworLSAgICAgICAgRkxJVEVfUFdSX09GRiA9IDAsCistICAgICAgICBGTElURV9QV1JfT04gID0gMQorLX07CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZmxpdGUgeworLSAgICAgICAgdW5zaWduZWQgY2hhciBtb2RlOworLSAgICAgICAgdW5zaWduZWQgY2hhciBwd3I7CistICAgICAgICB1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CistfSBGTElURV9JTjsKKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVwZGF0ZWQgInVuaXZlcnNhbCIgc3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqLworLQorLS8qIFNldHMgYmFja2xpZ2h0IGZvciBib3RoIEgzMTAwIGFuZCBIMzYwMCBtb2RlbHMgLSB0ZWNobmljYWxseSAiZnJvbnRsaWdodCIgZm9yIEgzNjAwICovCistc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCB7CistCWVudW0gZmxpdGVfcHdyIHBvd2VyOyAgICAgICAgICAvKiAwID0gb2ZmLCAxID0gb24gKi8KKy0JdW5zaWduZWQgY2hhciAgYnJpZ2h0bmVzczsgICAgIC8qIDAgLSAyNTUgICAgICAgICAqLworLX07CistCistc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0IHsgICAgICAgICAgICAvKiBPbmx5IHVzZWZ1bCBvbiBIMzEwMCBtb2RlbCAqLworLQl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OyAgICAgICAvKiAwIC0gMjU1ICovCistfTsKKy0KKy0vKiBJT0NUTCBjbWRzICB1c2VyIG9yIGtlcm5lbCBzcGFjZSAqLworLQorLS8qIFVzZSAnZicgYXMgbWFnaWMgbnVtYmVyICovCistI2RlZmluZSBJT0NfSDM2MDBfVFNfTUFHSUMgICdmJworLQorLS8qIFRPRE86IFNvbWUgb2YgdGhlc2UgSU9XUiB2YWx1ZXMgYXJlIGp1c3QgcGxhaW4gd3JvbmcgKi8KKy0jZGVmaW5lIEdFVF9WRVJTSU9OCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDEsIHN0cnVjdCBoMzYwMF90c192ZXJzaW9uICkKKy0jZGVmaW5lIFJFQURfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIsIHN0cnVjdCBoMzYwMF9lZXByb21fcmVhZF9yZXF1ZXN0KQorLSNkZWZpbmUgV1JJVEVfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDMsIHN0cnVjdCBoMzYwMF9lZXByb21fd3JpdGVfcmVxdWVzdCkKKy0jZGVmaW5lIEdFVF9USEVSTUFMCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDQsIHN0cnVjdCB0aGVybV9kZXYpCistI2RlZmluZSBMRURfT04JCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDUsIHN0cnVjdCBoMzYwMF90c19sZWQpCistI2RlZmluZSBHRVRfQkFUVEVSWV9TVEFUVVMJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICA2LCBzdHJ1Y3QgaDM2MDBfYmF0dGVyeSkKKy0jZGVmaW5lIEZMSVRFX09OCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDcsIHN0cnVjdCBoMzYwMF90c19mbGl0ZSkKKy0jZGVmaW5lIFJFQURfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDgsIHN0cnVjdCBoMzYwMF9zcGlfcmVhZF9yZXF1ZXN0KQorLSNkZWZpbmUgV1JJVEVfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDksIHN0cnVjdCBoMzYwMF9zcGlfd3JpdGVfcmVxdWVzdCkKKy0jZGVmaW5lIFRTX0dFVF9DQUwJCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAxMCwgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uKQorLSNkZWZpbmUgVFNfU0VUX0NBTAkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDExLCBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24pCistCistLyogTmV3IElPQ1RMIGludGVyZmFjZXMgLSBkZWZpbmVkIHRvIGJlIG1vcmUgdXNlciBmcmllbmRseSAqLworLSNkZWZpbmUgVFNfR0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQorLSNkZWZpbmUgVFNfU0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQorLSNkZWZpbmUgVFNfR0VUX0NPTlRSQVNUICAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIxLCBzdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QpCistI2RlZmluZSBUU19TRVRfQ09OVFJBU1QgICAgICAgICBfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgMjEsIHN0cnVjdCBoMzYwMF90c19jb250cmFzdCkKKy0KKy0jZW5kaWYKK0luZGV4OiB4dHNjYWwtMC42LjMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9NYWtlZmlsZS5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIHh0c2NhbC0wLjYuMy9NYWtlZmlsZS5hbQkyMDA3LTA3LTAyIDEyOjUxOjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMTEgKzEsOCBAQAorLWxpYmV4ZWNfUFJPR1JBTVMgPSB4dHNjYWwuYmluCistYmluX1NDUklQVFMgPSB4dHNjYWwKKytiaW5fUFJPR1JBTVMgPSB4dHNjYWwKKyAKKy14dHNjYWxfYmluX1NPVVJDRVMgPSBtYWluLmMgY2FsaWJyYXRlLmMgY2FsaWJyYXRlLmggaDM2MDBfdHMuaAorK3h0c2NhbF9TT1VSQ0VTID0gbWFpbi5jIGNhbGlicmF0ZS5jIGNhbGlicmF0ZS5oCisgCisteHRzY2FsX2Jpbl9MREFERCA9IEBYVFNDQUxfTElCU0AKKyt4dHNjYWxfTERBREQgPSBAWFRTQ0FMX0xJQlNACisgCisgSU5DTFVERVMgPSBAWFRTQ0FMX0NGTEFHU0AgLUROUl9QT0lOVFM9NQorIAorLWluY2x1ZGUgZ3BlLWRpc3QuYW0KKy0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQ1MzNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK2FmdGVyIGdjYyBsaW5raW5nIGhhcyBjaGFuZ2VkLCBhbGwgdGhlIGxpYnJhcmllcyBtdXN0IGJlIGV4cGxpY2l0ZWx5IHNwZWNpZmllZCAKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgbGlua2luZyBlcnJvcjoKKworfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eCAgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yIC1nZ2RiIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLW8geHRzY2FsIG1haW4ubyBjYWxpYnJhdGUubyAtbFgxMSAtbFhmdCAtbFhleHQgLWxYY2FsaWJyYXRlXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9pNTg2LXBva3ktbGludXgvZ2NjL2k1ODYtcG9reS1saW51eC80LjUuMS9sZDogXj86IGludmFsaWQgRFNPIGZvciBzeW1ib2wgYFhSZW5kZXJDaGFuZ2VQaWN0dXJlJyBkZWZpbml0aW9uXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eC91c3IvbGliL2xpYlhyZW5kZXIuc28uMTogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlXk0KK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXNeTQorfCBtYWtlOiAqKiogW3h0c2NhbF0gRXJyb3IgMQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMS8wMS8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9jb25maWd1cmUuYWMKKysrKyB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCitAQCAtOSw3ICs5LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LWJ6aXAyXSkKKyAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQworIAorLVBLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhjYWxpYnJhdGUpCisrUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSB4cmVuZGVyKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorIEFDX09VVFBVVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbF8wLjYuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmZGRmMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgorCitERVNDUklQVElPTiA9ICJCYXNpYyB0b3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgorCitIT01FUEFHRSA9ICJodHRwOi8vZ3BlLmxpbnV4dG9nby5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmxpbnV4dG9nby5vcmciCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MTA7bWQ1PTg3MjFiY2IwOGFlOWYyNGU1ZmU0YzgyOTQxODczYzg3IgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhmdCBsaWJ4Y2FsaWJyYXRlIgorCitQUiA9ICJyMTMiCisKK1NSQ19VUkkgPSAiJHtHUEVfTUlSUk9SfS94dHNjYWwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9jaGFuZ2UtY3Jvc3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYW51cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzMweFRzX0NhbGlicmF0ZS5zaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjliY2FiODBiNDc0ZDU0NTQ0NzdkMWNhMTY2YTY4YzM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3YjlkYzIyMDNkZTliMTcwNmNhMzlmYTZjYTgwZWNhYjg4MDc5MDllYzkwMWM0YTM0NWI4ZTQxMTc4ODAwYTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8zMHhUc19DYWxpYnJhdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h2aWRlby10ZXN0cy94dmlkZW8tdGVzdHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliM2M5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlNpbXBsZSBYVmlkZW8gdGVzdCBhcHBsaWNhdGlvbiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3Rlc3QteHZpZGVvLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9NmFlM2I0YzNjMmZmOWU1MWRiYmMzNWJiMjM3YWZhMDAiCitERVBFTkRTID0gImxpYnh2IgorCitTUkNSRVYgPSAiZjhmMzIwZDAyNTRjMDljZTQ4M2ZjMWQ4ZWU5OWVjZjViYzk0MDk2NSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy90ZXN0LXh2aWRlbyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh2IHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZS9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzN2QxNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDkzIEBACitibGt0cmFjZTogb2JleSBMREZMQUdTCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCit0aGUgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gbWV0YS1tZW50b3IgbGF5ZXIgb24geW9jdG9wcm9qZWN0IGdpdCBzZXJ2ZXIKK2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL21ldGEtbWVudG9yIGFzIG9mIGNvbW1pdCBpZAorYWVkNDYzNDE0ZTJlMmJmOGNhNDRiYTU0ZWU1OTczZTdlZDU5OWU1NworCitTaWduZWQtb2ZmLWJ5OiBGYWhhZCBVc21hbiA8ZmFoYWRfdXNtYW5AbWVudG9yLmNvbT4KKy0tLQorIE1ha2VmaWxlICAgICAgICAgIHwgICAxMSArKysrKystLS0tLQorIGJ0cmVwbGF5L01ha2VmaWxlIHwgICAgMyArKy0KKyBidHQvTWFrZWZpbGUgICAgICB8ICAgIDMgKystCisgMyBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUKKysrKyBnaXQvTWFrZWZpbGUKK0BAIC0xLDUgKzEsNiBAQAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLU8yIC1nIC1XCisrTERGTEFHUyA9CisgQUxMX0NGTEFHUyA9ICQoQ0ZMQUdTKSAtRF9HTlVfU09VUkNFIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAorIFBST0dTCT0gYmxrcGFyc2UgYmxrdHJhY2UgdmVyaWZ5X2Jsa3BhcnNlIGJsa3Jhd3ZlcmlmeSBibGtpb21vbgorIExJQlMJPSAtbHB0aHJlYWQKK0BAIC0yMywxOSArMjQsMTkgQEAgYnRyZXBsYXkvYnRyZXBsYXk6CisgCSQoQ0MpIC1vICQqLm8gLWMgJChBTExfQ0ZMQUdTKSAkPAorIAorIGJsa3BhcnNlOiBibGtwYXJzZS5vIGJsa3BhcnNlX2ZtdC5vIHJidHJlZS5vIGFjdF9tYXNrLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pCisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYmxrdHJhY2U6IGJsa3RyYWNlLm8gYWN0X21hc2subworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgdmVyaWZ5X2Jsa3BhcnNlOiB2ZXJpZnlfYmxrcGFyc2UubworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTERGTEFHUykKKyAKKyBibGtyYXd2ZXJpZnk6IGJsa3Jhd3ZlcmlmeS5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJsa2lvbW9uOiBibGtpb21vbi5vIHJidHJlZS5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpIC1scnQKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgLWxydCAkKExERkxBR1MpCisgCisgJChQUk9HUyk6IHwgZGVwZW5kCisgCistLS0gZ2l0Lm9yaWcvYnRyZXBsYXkvTWFrZWZpbGUKKysrKyBnaXQvYnRyZXBsYXkvTWFrZWZpbGUKK0BAIC03LDYgKzcsNyBAQAorIAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLVcgLU8yIC1nCisrTERGTEFHUyA9CisgSU5DUwk9IC1JLiAtSS4uIC1JLi4vYnR0CisgT0NGTEFHUwk9IC1VQ09VTlRfSU9TIC1VREVCVUcgLUROREVCVUcKKyBYQ0ZMQUdTCT0gLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKK0BAIC0zMiwxMCArMzMsMTAgQEAgY2xlYW46IGRvY3NjbGVhbgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKi5vICQ8CisKKyBidHJlY29yZDogYnRyZWNvcmQubworLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYnRyZXBsYXk6IGJ0cmVwbGF5Lm8KKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpICQoTERGTEFHUykKKyAKKyBkZXBlbmQ6CisgCUAkKENDKSAtTU0gJChDRkxBR1MpICouYyAxPiAuZGVwZW5kCistLS0gZ2l0Lm9yaWcvYnR0L01ha2VmaWxlCisrKysgZ2l0L2J0dC9NYWtlZmlsZQorQEAgLTcsNiArNyw3IEBACisgCisgQ0MJPSBnY2MKKyBDRkxBR1MJPSAtV2FsbCAtVyAtTzIgLWcKKytMREZMQUdTID0KKyBJTkNTCT0gLUkuIC1JLi4KKyBYQ0ZMQUdTCT0gLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKKyBvdmVycmlkZSBDRkxBR1MgKz0gJChJTkNTKSAkKFhDRkxBR1MpCitAQCAtMzgsNyArMzksNyBAQCBjbGVhbjogZG9jc2NsZWFuCisgCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKi5vICQ8CisgCisgYnR0OiAkKE9CSlMpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgaWZuZXEgKCQod2lsZGNhcmQgLmRlcGVuZCksKQorIGluY2x1ZGUgLmRlcGVuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwYmU0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJHZW5lcmF0ZXMgdHJhY2VzIG9mIEkvTyB0cmFmZmljIG9uIGJsb2NrIGRldmljZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK0RFUEVORFMgPSAibGliYWlvIgorCitTUkNSRVYgPSAiNDNmYzg3MGNlMDRlOTYzZGVmNDVkZmMwZDFlZDRlYTIxZWYxMGQ0YiIKKworUFYgPSAiMS4xLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXQgXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAnQ0M9JHtDQ30nIFwKKyAgICAnQ0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdMREZMQUdTPSR7TERGTEFHU30nIFwKKyIKKworIyBUaGVyZSBhcmUgYSBmZXcgcGFyYWxsZWwgaXNzdWVzOgorIyAxKSAuLi9yYnRyZWUubzogZXJyb3IgYWRkaW5nIHN5bWJvbHM6IEludmFsaWQgb3BlcmF0aW9uCisjIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworIyBNYWtlZmlsZTo0MjogcmVjaXBlIGZvciB0YXJnZXQgJ2J0dCcgZmFpbGVkCisjIDIpIGdpdC9ibGtpb21vbi5jOjIxNjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcmJfaW5zZXJ0X2NvbG9yJworIyBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKyMgTWFrZWZpbGU6Mjc6IHJlY2lwZSBmb3IgdGFyZ2V0ICdibGtwYXJzZScgZmFpbGVkCisjIDMpIGxkOiByYnRyZWUubzogaW52YWxpZCBzdHJpbmcgb2Zmc2V0IDEyOCA+PSAxMjUgZm9yIHNlY3Rpb24gYC5zdHJ0YWInCisjIDQpIGJ0cmVwbGF5Lm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCisjIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworIyBidHJlcGxheS9idHJlcGxheS5jOjQ3OjE4OiBmYXRhbCBlcnJvcjogbGlzdC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQQVJBTExFTF9NQUtFID0gIiIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIEFSQ0g9IiR7QVJDSH0iIHByZWZpeD0ke3ByZWZpeH0gXAorCQltYW5kaXI9JHttYW5kaXJ9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM4NDFkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbGludXhfMS43LmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgY3J5cHRvZGV2XyR7UFZ9LmluYworCitTVU1NQVJZID0gIkEgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciBoZWFkZXIgZmlsZSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKKyMgSnVzdCBpbnN0YWxsIGNyeXB0b2Rldi5oIHdoaWNoIGlzIHRoZSBvbmx5IGhlYWRlciBmaWxlIG5lZWRlZCB0byBiZSBleHBvcnRlZAorZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1EICR7U30vY3J5cHRvL2NyeXB0b2Rldi5oICR7RH0ke2luY2x1ZGVkaXJ9L2NyeXB0by9jcnlwdG9kZXYuaAorfQorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbW9kdWxlXzEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkNTJlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBjcnlwdG9kZXZfJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiQSAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIGtlcm5lbCBtb2R1bGUiCisKK2luaGVyaXQgbW9kdWxlCisKKyMgSGVhZGVyIGZpbGUgcHJvdmlkZWQgYnkgYSBzZXBhcmF0ZSBwYWNrYWdlCitERVBFTkRTICs9ICJjcnlwdG9kZXYtbGludXgiCisKK1NSQ19VUkkgKz0gIiBcCitmaWxlOi8vMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2ggXAorIgorCitFWFRSQV9PRU1BS0U9J0tFUk5FTF9ESVI9IiR7U1RBR0lOR19LRVJORUxfRElSfSIgUFJFRklYPSIke0R9IicKKworUkNPTkZMSUNUU18ke1BOfSA9ICJvY2YtbGludXgiCitSUkVQTEFDRVNfJHtQTn0gPSAib2NmLWxpbnV4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTlhNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi10ZXN0c18xLjcuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBjcnlwdG9kZXZfJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiQSB0ZXN0IHN1aXRlIGZvciAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIgorCitERVBFTkRTICs9ICJvcGVuc3NsIgorCitTUkNfVVJJICs9ICIgXAorZmlsZTovLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaCBcCitmaWxlOi8vMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoIFwKKyIKKworRVhUUkFfT0VNQUtFPSdLRVJORUxfRElSPSIke1NUQUdJTkdfRVhFQ1BSRUZJWERJUn0iIFBSRUZJWD0iJHtEfSInCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSB0ZXN0cHJvZ3MKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGxfdGVzdHMKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2JpbmRpcn0vdGVzdHNfY3J5cHRvZGV2Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS90ZXN0c19jcnlwdG9kZXYvKiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2XzEuNy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYTY5MjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jCkBAIC0wLDAgKzEsMTMgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly9jcnlwdG9kZXYtbGludXgub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5nbmEub3JnL2NyeXB0b2Rldi1saW51eC9jcnlwdG9kZXYtbGludXgtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGI2M2IzNDgxY2YyYzkwMzg2YjM1ZjA1NzQ4MWQzNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDE4ODA1MzNiNTNkZTRkN2IzZjA1NGUyMzBmNTc2OTg4ZGFmYjhlZWQ3YmVmNWViY2Y2NDIyYmIyZTNhM2IyNSIKKworUyA9ICIke1dPUktESVJ9L2NyeXB0b2Rldi1saW51eC0ke1BWfSIKKworQ0xFQU5CUk9LRU4gPSAiMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLUFkZC10aGUtY29tcGlsZS1hbmQtaW5zdGFsbC1ydWxlcy1mb3ItY3J5cHRvZGV2LXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwMjk4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gMTk4MGE4ZjQ3NzlhOTU1ZTczMjg1ZTdhMGQ4NjU0OWI2OWJlYTVjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1IFpvbmdjaHVuIDxiNDA1MjdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFN1biwgMjggQXByIDIwMTMgMTQ6Mzk6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRoZSBjb21waWxlIGFuZCBpbnN0YWxsIHJ1bGVzIGZvciBjcnlwdG9kZXYgdGVzdHMgZm9sZGVyCisKK1RoaXMgaXMgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgY3J5cHRvZGV2IHRlc3RzIGZvbGRlciB0byByb290ZnMKKworU2lnbmVkLW9mZi1ieTogWXUgWm9uZ2NodW4gPGI0MDUyN0BmcmVlc2NhbGUuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgTWFrZWZpbGUgICAgICAgfCAgICA2ICsrKysrKworIHRlc3RzL01ha2VmaWxlIHwgICAgOCArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDMxYzRiM2YuLjJlY2YyYTkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zNCw2ICszNCw5IEBAIG1vZHVsZXNfaW5zdGFsbDoKKyAJQGVjaG8gIkluc3RhbGxpbmcgY3J5cHRvZGV2LmggaW4gJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0byAuLi4iCisgCUBpbnN0YWxsIC1EIGNyeXB0by9jcnlwdG9kZXYuaCAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvL2NyeXB0b2Rldi5oCisgCisraW5zdGFsbF90ZXN0czoKKysJbWFrZSAtQyB0ZXN0cyBpbnN0YWxsIERFU1RESVI9JChQUkVGSVgpCisrCisgY2xlYW46CisgCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIGNsZWFuCisgCXJtIC1mICQoaG9zdHByb2dzKSAqfgorQEAgLTQyLDYgKzQ1LDkgQEAgY2xlYW46CisgY2hlY2s6CisgCUNGTEFHUz0kKENSWVBUT0RFVl9DRkxBR1MpIEtFUk5FTF9ESVI9JChLRVJORUxfRElSKSBtYWtlIC1DIHRlc3RzIGNoZWNrCisgCisrdGVzdHByb2dzOgorKwlLRVJORUxfRElSPSQoS0VSTkVMX0RJUikgbWFrZSAtQyB0ZXN0cyB0ZXN0cHJvZ3MKKysKKyBDUE9QVFMgPQorIGlmbmVxICgke1NIT1dfVFlQRVN9LCkKKyBDUE9QVFMgKz0gLS1zaG93LXR5cGVzCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggYzlmMDRlOC4uY2QyMDJhZiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTE5LDYgKzE5LDEyIEBAIGV4YW1wbGUtYXN5bmMtaG1hYy1vYmpzIDo9IGFzeW5jX2htYWMubworIGV4YW1wbGUtYXN5bmMtc3BlZWQtb2JqcyA6PSBhc3luY19zcGVlZC5vCisgZXhhbXBsZS1oYXNoY3J5cHQtc3BlZWQtb2JqcyA6PSBoYXNoY3J5cHRfc3BlZWQuYworIAorK2luc3RhbGw6CisrCWluc3RhbGwgLWQgICQoREVTVERJUikvdXNyL2Jpbi90ZXN0c19jcnlwdG9kZXYKKysJZm9yIGJpbiBpbiAkKGhvc3Rwcm9ncyk7IGRvIFwKKysJCWluc3RhbGwgLW0gNzU1ICQke2Jpbn0gJChERVNURElSKS91c3IvYmluL3Rlc3RzX2NyeXB0b2Rldi87IFwKKysJZG9uZQorKworIGNoZWNrOiAkKGhvc3Rwcm9ncykKKyAJLi9jaXBoZXIKKyAJLi9obWFjCitAQCAtMjgsNiArMzQsOCBAQCBjaGVjazogJChob3N0cHJvZ3MpCisgCS4vY2lwaGVyLWdjbQorIAkuL2NpcGhlci1hZWFkCisgCisrdGVzdHByb2dzOiAkKGhvc3Rwcm9ncykKKysKKyBjbGVhbjoKKyAJcm0gLWYgKi5vICp+ICQoaG9zdHByb2dzKQorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTgwZmM2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA4YTg4NGY1NWJkMTUyN2JhYTgyZmFiNjhjMTg2YmE1NDYyNzM4NjBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KK0RhdGU6IFN1biwgNiBBcHIgMjAxNCAxOTo1MTozOSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIGluc3RhbGxpbmcgaGVhZGVyIGZpbGUgcHJvdmlkZWQgYnkgYW5vdGhlciBwYWNrYWdlCisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIHNwZWNpZmljIF0KKy0tLQorIE1ha2VmaWxlIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZDY2ZWYyNi4uOGU5N2M2YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTIzLDggKzIzLDYgQEAgaW5zdGFsbDogbW9kdWxlc19pbnN0YWxsCisgCisgbW9kdWxlc19pbnN0YWxsOgorIAltYWtlIC1DICQoS0VSTkVMX0RJUikgU1VCRElSUz1gcHdkYCBtb2R1bGVzX2luc3RhbGwKKy0JQGVjaG8gIkluc3RhbGxpbmcgY3J5cHRvZGV2LmggaW4gJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0byAuLi4iCistCUBpbnN0YWxsIC1EIGNyeXB0by9jcnlwdG9kZXYuaCAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvL2NyeXB0b2Rldi5oCisgCisgY2xlYW46CisgCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIGNsZWFuCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjODk3MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gN2Q3MTEyNDk5MTAzMGY5OTk2NWU2ZTZhYWVkNDIxMTE1ZjE4NWFkYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2FyZG8gUmliYWxkYSBEZWxnYWRvIDxyaWNhcmRvLnJpYmFsZGFAZ21haWwuY29tPgorRGF0ZTogTW9uLCA5IEZlYiAyMDE1IDEzOjUxOjU2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlvY3RsLmM6IEZpeCBidWlsZCBvbiAzLjE5CisKK2dldF91bnVzZWRfZmQoKSBNQUNSTyBoYXMgYmVlbiByZW1vdmVkIG9uIGtlcm5lbCAzLjE5LiBSZXBsYWNlIGJ5IHRoZQorYWN0dWFsIG91dHB1dCBvZiB0aGUgbWFjcm8uCisKK1NpZ25lZC1vZmYtYnk6IFJpY2FyZG8gUmliYWxkYSBEZWxnYWRvIDxyaWNhcmRvLnJpYmFsZGFAZ21haWwuY29tPgorLS0tCisgaW9jdGwuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2lvY3RsLmMgYi9pb2N0bC5jCitpbmRleCBmMjZjZjkzLi5jZjhjYzE3IDEwMDY0NAorLS0tIGEvaW9jdGwuYworKysrIGIvaW9jdGwuYworQEAgLTUyOSw3ICs1MjksNyBAQCBzdGF0aWMgaW50CisgY2xvbmVmZChzdHJ1Y3QgZmlsZSAqZmlscCkKKyB7CisgCWludCByZXQ7CistCXJldCA9IGdldF91bnVzZWRfZmQoKTsKKysJcmV0ID0gZ2V0X3VudXNlZF9mZF9mbGFncygwKTsKKyAJaWYgKHJldCA+PSAwKSB7CisgCQkJZ2V0X2ZpbGUoZmlscCk7CisgCQkJZmRfaW5zdGFsbChyZXQsIGZpbHApOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YWI4YjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDQ3ZmYxZWI5YmI0Zjg3MmMxZDczMWI5M2QzMzRlZTU4NjViZjM0MzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorRGF0ZTogU3VuLCA2IEFwciAyMDE0IDIyOjE2OjMwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB0ZXN0cyBNYWtlZmlsZSB1c2FnZSBvZiBMRExJQlMgdnMuIExERkxBR1MKKworTGlicmFyaWVzIG11c3QgY29tZSBhZnRlciBvYmplY3RzLCBhcyBsaW5rIG9yZGVyIG1hdHRlcnMsIGVzcGVjaWFsbHkKK3doZW4gdXNpbmcgbGlua2VyIGZsYWdzIGxpa2UgLVdsLC0tYXMtbmVlZGVkLgorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHRlc3RzL01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggY2QyMDJhZi4uNjdjM2M4MyAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTM5LDUgKzM5LDUgQEAgdGVzdHByb2dzOiAkKGhvc3Rwcm9ncykKKyBjbGVhbjoKKyAJcm0gLWYgKi5vICp+ICQoaG9zdHByb2dzKQorIAorLSR7Y29tcF9wcm9nc306IExERkxBR1MgKz0gLWxzc2wgLWxjcnlwdG8KKyske2NvbXBfcHJvZ3N9OiBMRExJQlMgKz0gLWxzc2wgLWxjcnlwdG8KKyAke2NvbXBfcHJvZ3N9OiAlOiAlLm8gb3BlbnNzbF93cmFwcGVyLm8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDA5YjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy5pbmMKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJEZXZpY2UgVHJlZSBDb21waWxlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBEZXZpY2UgVHJlZSBDb21waWxlciBpcyBhIHRvb2wgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBPcGVuLUZpcm13YXJlLWxpa2UgZGV2aWNlIHRyZWUgdXNlZCBieSBQb3dlclBDIGtlcm5lbHMuIgorU0VDVElPTiA9ICJib290bG9hZGVyIgorTElDRU5TRSA9ICJHUEx2MiB8IEJTRCIKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvZHRjL2R0Yy5naXQgXAorICAgICAgICAgICBmaWxlOi8vbWFrZV9pbnN0YWxsLnBhdGNoIFwKKwkgICIKKworRVhUUkFfT0VNQUtFPSdQUkVGSVg9IiR7cHJlZml4fSIgTElCRElSPSIke2xpYmRpcn0iIERFU1RESVI9IiR7RH0iJworCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS9jb252ZXJ0LWR0c3YwICR7YmluZGlyfS9mdGR1bXAgJHtiaW5kaXJ9L2R0ZGlmZiIKKworUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTIwNjE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMvbWFrZV9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdpdC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlCTIwMTEtMTEtMDIgMTQ6NTI6MTcuMjQzMTA0Nzc5IC0wNzAwCisrKysgZ2l0L01ha2VmaWxlCTIwMTEtMTEtMDIgMTU6MDY6MDEuNTU1MTA0OTgyIC0wNzAwCitAQCAtMTYxLDggKzE2MSw4IEBACisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoQklORElSKQorIAkkKElOU1RBTEwpICQoQklOKSAkKFNDUklQVFMpICQoREVTVERJUikkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChMSUJESVIpCistCSQoSU5TVEFMTCkgJChMSUJGRFRfbGliKSAkKERFU1RESVIpJChMSUJESVIpCistCWxuIC1zZiAkKG5vdGRpciAkKExJQkZEVF9saWIpKSAkKERFU1RESVIpJChMSUJESVIpLyQoTElCRkRUX3NvbmFtZSkKKysJJChJTlNUQUxMKSAkKExJQkZEVF9saWIpICQoREVTVERJUikkKExJQkRJUikvJChMSUJGRFRfc29uYW1lKQorKwlsbiAtc2YgJChMSUJGRFRfc29uYW1lKSAkKERFU1RESVIpJChMSUJESVIpLyQobm90ZGlyICQoTElCRkRUX2xpYikpCisgCWxuIC1zZiAkKExJQkZEVF9zb25hbWUpICQoREVTVERJUikkKExJQkRJUikvbGliZmR0LiQoU0hBUkVETElCX0VYVCkKKyAJJChJTlNUQUxMKSAtbSA2NDQgJChMSUJGRFRfYXJjaGl2ZSkgJChERVNURElSKSQoTElCRElSKQorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKElOQ0xVREVESVIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0NjE0MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjX2dpdC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGR0Yy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vbGliZmR0L2xpYmZkdC5oO2JlZ2lubGluZT0zO2VuZGxpbmU9NTI7bWQ1PWZiMzYwOTYzMTUxZjhlYzJkNmMwNmIwNTViY2JiNjhjIgorCitTUkNSRVYgPSAiMzAyZmNhOWY0YzI4M2UxOTk0Y2YwYTVhOWNlMWNmNDNjYTE1ZTZkMiIKK1BWID0gIjEuNC4xK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MzA5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5hZ2luZyBZb2N0byBQcm9qZWN0IHN0eWxlIGJyYW5jaGVkIGtlcm5lbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ2l0L3Rvb2xzL2tnaXQ7YmVnaW5saW5lPTU7ZW5kbGluZT05O21kNT1kOGQxZDcyOWE3MGNkNWY1Mjk3MmY4ODg0YjgwNzQzZCIKKworREVQRU5EUyA9ICJnaXQtbmF0aXZlIgorCitTUkNSRVYgPSAiYmQxNDRkNDNjYTViMWVhZjllNzI3YmNlZDRjZTNiNjFiNjQyMjk3YyIKK1BSID0gInIxMiIKK1BWID0gIjAuMitnaXQke1NSQ1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtdG9vbHMuZ2l0IgorUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeyAKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJY2QgJHtTfS9naXQKKwltYWtlIERFU1RESVI9JHtEfSR7YmluZGlyfSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk3YTI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIktleGVjIGZhc3QgcmVib290IHRvb2xzIgorREVTQ1JJUFRJT04gPSAiS2V4ZWMgaXMgYSBmYXN0IHJlYm9vdCBmZWF0dXJlIHRoYXQgbGV0cyB5b3UgcmVib290IHRvIGEgbmV3IExpbnV4IGtlcm5lbCIKK0FVVEhPUiA9ICJFcmljIEJpZWRlcm1hbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwva2V4ZWMvIgorU0VDVElPTiA9ICJrZXJuZWwvdXNlcmxhbmQiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWE1YmVkMmY2MGQzNTc2MThjYTE2MWFkNTM5ZjdjMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8va2V4ZWMva2V4ZWMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1hZjEwZjZhZTRhODcxNTk2NWU2NDhhYTY4N2FkM2UwOSIKK0RFUEVORFMgPSAiemxpYiB4eiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2tlcm5lbC9rZXhlYy9rZXhlYy10b29scy0ke1BWfS50YXIuZ3oiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0Lip8cG93ZXJwYy4qfG1pcHMuKiktKGxpbnV4fGZyZWVic2QuKiknCisKK0lOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAjIFJlbW92ZSB0aGUgJyouZCcgZmlsZSB0byBtYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIGZvciBkZXAgaW4gYGZpbmQgJHtCfSAtdHlwZSBmIC1uYW1lICcqLmQnYDsgZG8KKyAgICAgICAgZGVwX25vX2Q9ImBlY2hvICRkZXAgfCBzZWQgJ3MjLmQkIyMnYCIKKyAgICAgICAgIyBSZW1vdmUgZmlsZS5kIHdoZW4gdGhlcmUgaXMgYSBmaWxlLm8KKyAgICAgICAgaWYgWyAtZiAiJGRlcF9ub19kLm8iIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1mICRkZXAKKyAgICAgICAgZmkKKyAgICBkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDA3N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGExMTM1YjMxNzA5NjNiYTk1NmYyMzY0YzEyODM4NjRjMzU1NDEyOTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA3OjU5OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHB1cmdhdG9yeTogUGFzcyAtciBkaXJlY3RseSB0byBsaW5rZXIKKworVGhpcyBoZWxwcyBjb21waWxpbmcgd2l0aCBjbGFuZyBzaW5jZSAtciBpcyBub3QgYSBrbm93biBvcHRpb24gZm9yIGNsYW5nCit3aGVyZSBhcyBnY2Mga25vd3MgaG93IHRvIGRlYWwgd2l0aCBpdCBhbmQgcGFzc2VzIGl0IGRvd24gdG8gbGlua2VyCit1bmZpbHRlcmVkCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgcHVyZ2F0b3J5L01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcHVyZ2F0b3J5L01ha2VmaWxlIGIvcHVyZ2F0b3J5L01ha2VmaWxlCitpbmRleCAyYjVjMDYxLi5iMjUxMzUzIDEwMDY0NAorLS0tIGEvcHVyZ2F0b3J5L01ha2VmaWxlCisrKysgYi9wdXJnYXRvcnkvTWFrZWZpbGUKK0BAIC02MSw3ICs2MSw3IEBAICQoUFVSR0FUT1JZKTogQ1BQRkxBR1M9JCgkKEFSQ0gpX1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MpIFwKKyAJCQktSSQoc2hlbGwgJChDQykgLXByaW50LWZpbGUtbmFtZT1pbmNsdWRlKQorICQoUFVSR0FUT1JZKTogTERGTEFHUz0kKCQoQVJDSClfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUylcCisgCQkJLVdsLC0tbm8tdW5kZWZpbmVkIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIFwKKy0JCQktbm9kZWZhdWx0bGlicyAtZSBwdXJnYXRvcnlfc3RhcnQgLXIgXAorKwkJCS1ub2RlZmF1bHRsaWJzIC1lIHB1cmdhdG9yeV9zdGFydCAtV2wsLXIgXAorIAkJCS1XbCwtTWFwPSQoUFVSR0FUT1JZX01BUCkKKyAKKyAkKFBVUkdBVE9SWSk6ICQoUFVSR0FUT1JZX09CSlMpCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk3ZDkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYjE5YjY4ZWFiNTY3YWE1MzRjZjhkZWM3OWZlMThlM2RjMGUxNDA0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFF1YW55YW5nIFdhbmcgPHF1YW55YW5nLndhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTYgSnVuIDIwMTUgMTI6NTk6NTcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcG93ZXJwYzogY2hhbmdlIHRoZSBtZW1vcnkgc2l6ZSBsaW1pdAorCitXaGVuIHJ1biAia2V4ZWMiIGluIHBvd2VycGMgYm9hcmQsIHRoZSBrZXhlYyBoYXMgYSBsaW1pdCB0aGF0Cit0aGUga2VybmVsIHRleHQgYW5kIGJzcyBzaXplIG11c3QgYmUgbGVzcyB0aGFuIDI0TS4gQnV0IG5vdworc29tZSBrZXJuZWwgc2l6ZSBleGNlZWQgdGhlIGxpbWl0LiBTbyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgbGltaXQsCitlbHNlIHdpbGwgZ2V0IHRoZSBlcnJvciBsb2cgYXMgYmVsb3c6CisKK215X2xvYWQ6NjY5OiBkbworQ291bGQgbm90IGZpbmQgYSBmcmVlIGFyZWEgb2YgbWVtb3J5IG9mIDB4MTI0MDAgYnl0ZXMuLi4KK0NvdWxkIG5vdCBmaW5kIGEgZnJlZSBhcmVhIG9mIG1lbW9yeSBvZiAweDEzMDAwIGJ5dGVzLi4uCitsb2NhdGVfaG9sZSBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFF1YW55YW5nIFdhbmcgPHF1YW55YW5nLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGtleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmgKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmgKK0BAIC00Miw3ICs0Miw3IEBAIHZvaWQgZG9sX3BwY191c2FnZSh2b2lkKTsKKyAgKiBEdXJpbmcgaW5pdGFsIHNldHVwIHRoZSBrZXJuZWwgZG9lcyBub3QgbWFwIHRoZSB3aG9sZSBtZW1vcnkgYnV0IGEgcGFydCBvZgorICAqIGl0LiBPbiBCb29rLUUgdGhhdCBpcyA2NE1pQiwgNjAxIDI0TWlCIG9yIDI1Nk1pQiAoaWYgcG9zc2libGUpLgorICAqLworLSNkZWZpbmUgS0VSTkVMX0FDQ0VTU19UT1AgKDI0ICogMTAyNCAqIDEwMjQpCisrI2RlZmluZSBLRVJORUxfQUNDRVNTX1RPUCAoMzYgKiAxMDI0ICogMTAyNCkKKyAKKyAvKiBib290IGJsb2NrIHZlcnNpb24gMTcgYXMgZGVmaW5lZCBieSB0aGUgbGludXgga2VybmVsICovCisgc3RydWN0IGJvb3RibG9jayB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy1hYXJjaDY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2Y1ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDgwMSBAQAorRnJvbTogR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgorRGF0ZTogTW9uLCAxNSBKdWwgMjAxMyAyMzozMjozNiArMDAwMCAoLTA3MDApCitTdWJqZWN0OiBBZGQgYXJtNjQgc3VwcG9ydAorWC1HaXQtVXJsOiBodHRwczovL2dpdC5saW5hcm8ub3JnL2dpdHdlYj9wPXBlb3BsZSUyRmdlb2ZmJTJGa2V4ZWMtdG9vbHMuZ2l0O2E9Y29tbWl0ZGlmZl9wbGFpbjtoPWZiZjVhYzZjMmM3MGVjMGY2ZGEyYjlmZjU2M2U1NzM5OTk3NTJjMDEKKworQWRkIGFybTY0IHN1cHBvcnQKKworU2lnbmVkLW9mZi1ieTogR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgorCitHZXQgcGF0Y2ggZnJvbToKK2h0dHBzOi8vZmVkb3JhcGVvcGxlLm9yZy9+aHJ3L2FhcmNoNjQvZm9yLWZlZG9yYS9rZXhlYy1hYXJjaDY0LnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzIAorIGtleGVjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgCisga2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxMyArCisga2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYyAgICAgIHwgIDMwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGtleGVjL2FyY2gvYXJtNjQvaW5jbHVkZS9hcmNoL29wdGlvbnMuaCB8ICAgMjYgKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMgICAgICAgICAgfCAgMTc3ICsrKysrKysrKysrKysrKysrKworIGtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaCAgICAgICAgICB8ICAgMjAgKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jICAgICAgfCAgMTE0ICsrKysrKysrKysrCisga2V4ZWMva2V4ZWMtc3lzY2FsbC5oICAgICAgICAgICAgICAgICAgIHwgICAgOSAKKyBrZXhlYy9rZXhlYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAorIHB1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlICAgICAgICAgICB8ICAgIDcgCisgMTEgZmlsZXMgY2hhbmdlZCwgNjc1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcvY29uZmlndXJlLmFjCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworQEAgLTM2LDYgKzM2LDkgQEAgY2FzZSAkdGFyZ2V0X2NwdSBpbgorIAkJQVJDSD0icHBjNjQiCisgCQlTVUJBUkNIPSJMRSIKKyAJCTs7CisrCWFhcmNoNjQqICkKKysJCUFSQ0g9ImFybTY0IgorKwkJOzsKKyAJYXJtKiApCisgCQlBUkNIPSJhcm0iCisgCQk7OworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL01ha2VmaWxlCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL01ha2VmaWxlCitAQCAtNzEsNiArNzEsNyBAQCBLRVhFQ19TUkNTCQkJKz0gJCgkKEFSQ0gpX0ZTMkRUKQorIAorIGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvYWxwaGEvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2FybS9NYWtlZmlsZQorK2luY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2kzODYvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2lhNjQvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL202OGsvTWFrZWZpbGUKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlCitAQCAtMCwwICsxLDEzIEBACisrCisrYXJtNjRfS0VYRUNfU1JDUyArPSBcCisrCWtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuYyBcCisrCWtleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMgXAorKwlrZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jCisrCisrYXJtNjRfQVJDSF9SRVVTRV9JTklUUkQgPQorK2FybTY0X0FERF9TRUdNRU5UID0KKythcm02NF9WSVJUX1RPX1BIWVMgPQorKworK2Rpc3QgKz0gJChhcm02NF9LRVhFQ19TUkNTKSBcCisrCWtleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUgXAorKwlrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jCitAQCAtMCwwICsxLDMwNSBAQAorKy8qCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSkuCisrICovCisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLWVsZi5oIgorKyNpbmNsdWRlICIuLi8uLi9jcmFzaGR1bXAuaCIKKysKKytpbnQgaXNfY3Jhc2hrZXJuZWxfbWVtX3Jlc2VydmVkKHZvaWQpCisreworKwlyZXR1cm4gMDsKKyt9CisrCisrI2lmIDAKKysvKgorKyAqIFVzZWQgdG8gc2F2ZSB2YXJpb3VzIG1lbW9yeSByYW5nZXMvcmVnaW9ucyBuZWVkZWQgZm9yIHRoZSBjYXB0dXJlZAorKyAqIGtlcm5lbCB0byBib290LiAobGltZSBtZW1tYXA9IG9wdGlvbiBpbiBvdGhlciBhcmNocykKKysgKi8KKytzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBjcmFzaF9tZW1vcnlfcmFuZ2VzW0NSQVNIX01BWF9NRU1PUllfUkFOR0VTXTsKKytzdHJ1Y3QgbWVtb3J5X3JhbmdlcyB1c2FibGVtZW1fcmducyA9IHsKKysgICAgLnNpemUgPSAwLAorKyAgICAucmFuZ2VzID0gY3Jhc2hfbWVtb3J5X3JhbmdlcywKKyt9OworKworKy8qIG1lbW9yeSByYW5nZSByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwgKi8KKytzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBjcmFzaF9yZXNlcnZlZF9tZW07CisrCisrc3RhdGljIHN0cnVjdCBjcmFzaF9lbGZfaW5mbyBlbGZfaW5mbyA9IHsKKysJLmNsYXNzCQk9IEVMRkNMQVNTMzIsCisrCS5kYXRhCQk9IEVMRkRBVEEyTFNCLAorKwkubWFjaGluZQk9IEVNX0FSTSwKKysJLnBhZ2Vfb2Zmc2V0CT0gUEFHRV9PRkZTRVQsCisrfTsKKysKKyt1bnNpZ25lZCBsb25nIHBoeXNfb2Zmc2V0OworKworKy8qKgorKyAqIGNyYXNoX3JhbmdlX2NhbGxiYWNrKCkgLSBjYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggaW9tZW0gcmVnaW9uCisrICogQGRhdGE6IG5vdCB1c2VkCisrICogQG5yOiBub3QgdXNlZAorKyAqIEBzdHI6IG5hbWUgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKiBAYmFzZTogc3RhcnQgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbgorKyAqIEBsZW5ndGg6IHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggbWVtb3J5IHJlZ2lvbiBmb3VuZCBpbiAvcHJvYy9pb21lbS4gSXQKKysgKiBsb2NhdGVzIHN5c3RlbSBSQU0gYW5kIGNyYXNoa2VybmVsIHJlc2VydmVkIG1lbW9yeSBhbmQgcGxhY2VzIHRoZXNlIHRvCisrICogdmFyaWFibGVzOiBAY3Jhc2hfbWVtb3J5X3JhbmdlcyBhbmQgQGNyYXNoX3Jlc2VydmVkX21lbS4gTnVtYmVyIG9mIG1lbW9yeQorKyAqIHJlZ2lvbnMgaXMgcGxhY2VkIGluIEBjcmFzaF9tZW1vcnlfbnJfcmFuZ2VzLgorKyAqLworK3N0YXRpYyBpbnQgY3Jhc2hfcmFuZ2VfY2FsbGJhY2sodm9pZCAqVU5VU0VEKGRhdGEpLCBpbnQgVU5VU0VEKG5yKSwKKysJCQkJY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIGJhc2UsCisrCQkJCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKQorK3sKKysJc3RydWN0IG1lbW9yeV9yYW5nZSAqcmFuZ2U7CisrCisrCWlmICh1c2FibGVtZW1fcmducy5zaXplID49IENSQVNIX01BWF9NRU1PUllfUkFOR0VTKQorKwkJcmV0dXJuIDE7CisrCisrCXJhbmdlID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgdXNhYmxlbWVtX3JnbnMuc2l6ZTsKKysKKysJaWYgKHN0cm5jbXAoc3RyLCAiU3lzdGVtIFJBTVxuIiwgMTEpID09IDApIHsKKysJCXJhbmdlLT5zdGFydCA9IGJhc2U7CisrCQlyYW5nZS0+ZW5kID0gYmFzZSArIGxlbmd0aCAtIDE7CisrCQlyYW5nZS0+dHlwZSA9IFJBTkdFX1JBTTsKKysJCXVzYWJsZW1lbV9yZ25zLnNpemUrKzsKKysJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgIkNyYXNoIGtlcm5lbFxuIiwgMTMpID09IDApIHsKKysJCWNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCA9IGJhc2U7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0uZW5kID0gYmFzZSArIGxlbmd0aCAtIDE7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0udHlwZSA9IFJBTkdFX1JBTTsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY3Jhc2hfZXhjbHVkZV9yYW5nZSgpIC0gZXhjbHVkZXMgbWVtb3J5IHJlZ2lvbiByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwKKysgKgorKyAqIEZ1bmN0aW9uIGxvY2F0ZXMgd2hlcmUgY3Jhc2hrZXJuZWwgcmVzZXJ2ZWQgbWVtb3J5IGlzIGFuZCByZW1vdmVzIHRoYXQgcmVnaW9uCisrICogZnJvbSB0aGUgYXZhaWxhYmxlIG1lbW9yeSByZWdpb25zLgorKyAqLworK3N0YXRpYyB2b2lkIGNyYXNoX2V4Y2x1ZGVfcmFuZ2Uodm9pZCkKKyt7CisrCWNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnJhbmdlID0gJmNyYXNoX3Jlc2VydmVkX21lbTsKKysJaW50IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCB1c2FibGVtZW1fcmducy5zaXplOyBpKyspIHsKKysJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIgPSB1c2FibGVtZW1fcmducy5yYW5nZXMgKyBpOworKworKwkJLyoKKysJCSAqIFdlIGFzc3VtZSB0aGF0IGNyYXNoIGFyZWEgaXMgZnVsbHkgY29udGFpbmVkIGluCisrCQkgKiBzb21lIGxhcmdlciBtZW1vcnkgYXJlYS4KKysJCSAqLworKwkJaWYgKHItPnN0YXJ0IDw9IHJhbmdlLT5zdGFydCAmJiByLT5lbmQgPj0gcmFuZ2UtPmVuZCkgeworKwkJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKm5ldzsKKysJCQkvKgorKwkJCSAqIExldCdzIHNwbGl0IHRoaXMgYXJlYSBpbnRvIDIgc21hbGxlciBvbmVzIGFuZAorKwkJCSAqIHJlbW92ZSBleGNsdWRlZCByYW5nZSBmcm9tIGJldHdlZW4uIEZpcnN0IGNyZWF0ZQorKwkJCSAqIG5ldyBlbnRyeSBmb3IgdGhlIHJlbWFpbmluZyBhcmVhLgorKwkJCSAqLworKwkJCW5ldyA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIHVzYWJsZW1lbV9yZ25zLnNpemU7CisrCQkJbmV3LT5zdGFydCA9IHJhbmdlLT5lbmQgKyAxOworKwkJCW5ldy0+ZW5kID0gci0+ZW5kOworKwkJCXVzYWJsZW1lbV9yZ25zLnNpemUrKzsKKysJCQkvKgorKwkJCSAqIE5leHQgdXBkYXRlIHRoaXMgYXJlYSB0byBlbmQgYmVmb3JlIGV4Y2x1ZGVkIHJhbmdlLgorKwkJCSAqLworKwkJCXItPmVuZCA9IHJhbmdlLT5zdGFydCAtIDE7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKyt9CisrCisrc3RhdGljIGludCByYW5nZV9jbXAoY29uc3Qgdm9pZCAqYTEsIGNvbnN0IHZvaWQgKmEyKQorK3sKKysJY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcjEgPSBhMTsKKysJY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcjIgPSBhMjsKKysKKysJaWYgKHIxLT5zdGFydCA+IHIyLT5zdGFydCkKKysJCXJldHVybiAxOworKwlpZiAocjEtPnN0YXJ0IDwgcjItPnN0YXJ0KQorKwkJcmV0dXJuIC0xOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY3Jhc2hfZ2V0X21lbW9yeV9yYW5nZXMoKSAtIHJlYWQgc3lzdGVtIHBoeXNpY2FsIG1lbW9yeQorKyAqCisrICogRnVuY3Rpb24gcmVhZHMgdGhyb3VnaCBzeXN0ZW0gcGh5c2ljYWwgbWVtb3J5IGFuZCBzdG9yZXMgZm91bmQgbWVtb3J5IHJlZ2lvbnMKKysgKiBpbiBAY3Jhc2hfbWVtb3J5X3Jhbmdlcy4gTnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGZvdW5kIGlzIHBsYWNlZCBpbgorKyAqIEBjcmFzaF9tZW1vcnlfbnJfcmFuZ2VzLiBSZWdpb25zIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLgorKyAqCisrICogUmV0dXJucyAlMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kICUtMSBvdGhlcndpc2UgKGVycm5vIGlzIHNldCkuCisrICovCisrc3RhdGljIGludCBjcmFzaF9nZXRfbWVtb3J5X3Jhbmdlcyh2b2lkKQorK3sKKysJLyoKKysJICogRmlyc3QgcmVhZCBhbGwgbWVtb3J5IHJlZ2lvbnMgdGhhdCBjYW4gYmUgY29uc2lkZXJlZCBhcworKwkgKiBzeXN0ZW0gbWVtb3J5IGluY2x1ZGluZyB0aGUgY3Jhc2ggYXJlYS4KKysJICovCisrCWtleGVjX2lvbWVtX2Zvcl9lYWNoX2xpbmUoTlVMTCwgY3Jhc2hfcmFuZ2VfY2FsbGJhY2ssIE5VTEwpOworKworKwlpZiAodXNhYmxlbWVtX3JnbnMuc2l6ZSA8IDEpIHsKKysJCWVycm5vID0gRUlOVkFMOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCS8qCisrCSAqIEV4Y2x1ZGUgbWVtb3J5IHJlc2VydmVkIGZvciBjcmFzaGtlcm5lbCAodGhpcyBtYXkgcmVzdWx0IGEgc3BsaXQgbWVtb3J5CisrCSAqIHJlZ2lvbikuCisrCSAqLworKwljcmFzaF9leGNsdWRlX3JhbmdlKCk7CisrCisrCS8qCisrCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgc29ydGVkLgorKwkgKi8KKysJcXNvcnQodXNhYmxlbWVtX3JnbnMucmFuZ2VzLCB1c2FibGVtZW1fcmducy5zaXplLAorKwkgICAgICBzaXplb2YoKnVzYWJsZW1lbV9yZ25zLnJhbmdlcyksIHJhbmdlX2NtcCk7CisrCisrCXJldHVybiAwOworK30KKysKKysvKioKKysgKiBjbWRsaW5lX2FkZF9lbGZjb3JlaGRyKCkgLSBhZGRzIGVsZmNvcmVoZHI9IHRvIEBjbWRsaW5lCisrICogQGNtZGxpbmU6IGJ1ZmZlciB3aGVyZSBwYXJhbWV0ZXIgaXMgcGxhY2VkCisrICogQGVsZmNvcmVoZHI6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmY29yZWhkcgorKyAqCisrICogRnVuY3Rpb24gYXBwZW5kcyAnZWxmY29yZWhkcj1zdGFydCcgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIGluCisrICogQGNtZGxpbmUuIE5vdGUgdGhhdCBAY21kbGluZSBtdXN0IGJlIGF0IGxlYXN0ICVDT01NQU5EX0xJTkVfU0laRSBieXRlcyBsb25nCisrICogKGluY2x1bmRpbmcgJU5VTCkuCisrICovCisrc3RhdGljIHZvaWQgY21kbGluZV9hZGRfZWxmY29yZWhkcihjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIGVsZmNvcmVoZHIpCisreworKwljaGFyIGJ1ZltDT01NQU5EX0xJTkVfU0laRV07CisrCWludCBidWZsZW47CisrCisrCWJ1ZmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyBlbGZjb3JlaGRyPSUjbHgiLAorKwkJCSAgY21kbGluZSwgZWxmY29yZWhkcik7CisrCWlmIChidWZsZW4gPCAwKQorKwkJZGllKCJGYWlsZWQgdG8gY29uc3RydWN0IGVsZmNvcmVoZHI9IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJcbiIpOworKwlpZiAoYnVmbGVuID49IHNpemVvZihidWYpKQorKwkJZGllKCJDb21tYW5kIGxpbmUgb3ZlcmZsb3dcbiIpOworKworKwkodm9pZCkgc3RybmNweShjbWRsaW5lLCBidWYsIENPTU1BTkRfTElORV9TSVpFKTsKKysJY21kbGluZVtDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gJ1wwJzsKKyt9CisrCisrLyoqCisrICogY21kbGluZV9hZGRfbWVtKCkgLSBhZGRzIG1lbT0gcGFyYW1ldGVyIHRvIGtlcm5lbCBjb21tYW5kIGxpbmUKKysgKiBAY21kbGluZTogYnVmZmVyIHdoZXJlIHBhcmFtZXRlciBpcyBwbGFjZWQKKysgKiBAc2l6ZTogc2l6ZSBvZiB0aGUga2VybmVsIHJlc2VydmVkIG1lbW9yeSAoaW4gYnl0ZXMpCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgJ21lbT1zaXplJyBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kIGxpbmUgZ2l2ZW4gaW4KKysgKiBAY21kbGluZS4gTm90ZSB0aGF0IEBjbWRsaW5lIG11c3QgYmUgYXQgbGVhc3QgJUNPTU1BTkRfTElORV9TSVpFIGJ5dGVzIGxvbmcKKysgKiAoaW5jbHVkaW5nICVOVUwpLgorKyAqLworK3N0YXRpYyB2b2lkIGNtZGxpbmVfYWRkX21lbShjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUpCisreworKwljaGFyIGJ1ZltDT01NQU5EX0xJTkVfU0laRV07CisrCWludCBidWZsZW47CisrCisrCWJ1ZmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyBtZW09JWxkSyIsIGNtZGxpbmUsIHNpemUgPj4gMTApOworKwlpZiAoYnVmbGVuIDwgMCkKKysJCWRpZSgiRmFpbGVkIHRvIGNvbnN0cnVjdCBtZW09IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJcbiIpOworKwlpZiAoYnVmbGVuID49IHNpemVvZihidWYpKQorKwkJZGllKCJDb21tYW5kIGxpbmUgb3ZlcmZsb3dcbiIpOworKworKwkodm9pZCkgc3RybmNweShjbWRsaW5lLCBidWYsIENPTU1BTkRfTElORV9TSVpFKTsKKysJY21kbGluZVtDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gJ1wwJzsKKyt9CisrCisrc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByYW5nZV9zaXplKGNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIpCisreworKwlyZXR1cm4gci0+ZW5kIC0gci0+c3RhcnQgKyAxOworK30KKysKKytzdGF0aWMgdm9pZCBkdW1wX21lbW9yeV9yYW5nZXModm9pZCkKKyt7CisrCWludCBpOworKworKwlpZiAoIWtleGVjX2RlYnVnKQorKwkJcmV0dXJuOworKworKwlkYmdwcmludGYoImNyYXNoa2VybmVsOiBbJSNsbHggLSAlI2xseF0gKCVsZE0pXG4iLAorKwkJICBjcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQsIGNyYXNoX3Jlc2VydmVkX21lbS5lbmQsCisrCQkgICh1bnNpZ25lZCBsb25nKXJhbmdlX3NpemUoJmNyYXNoX3Jlc2VydmVkX21lbSkgPj4gMjApOworKworKwlmb3IgKGkgPSAwOyBpIDwgdXNhYmxlbWVtX3JnbnMuc2l6ZTsgaSsrKSB7CisrCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgaTsKKysJCWRiZ3ByaW50ZigibWVtb3J5IHJhbmdlOiBbJSNsbHggLSAlI2xseF0gKCVsZE0pXG4iLAorKwkJCSAgci0+c3RhcnQsIHItPmVuZCwgKHVuc2lnbmVkIGxvbmcpcmFuZ2Vfc2l6ZShyKSA+PiAyMCk7CisrCX0KKyt9CisrCisrLyoqCisrICogbG9hZF9jcmFzaGR1bXBfc2VnbWVudHMoKSAtIGxvYWRzIGFkZGl0aW9uYWwgc2VnbWVudHMgbmVlZGVkIGZvciBrZHVtcAorKyAqIEBpbmZvOiBrZXhlYyBpbmZvIHN0cnVjdHVyZQorKyAqIEBtb2RfY21kbGluZToga2VybmVsIGNvbW1hbmQgbGluZQorKyAqCisrICogVGhpcyBmdW5jdGlvbiBsb2FkcyBhZGRpdGlvbmFsIHNlZ21lbnRzIHdoaWNoIGFyZSBuZWVkZWQgZm9yIHRoZSBkdW1wIGNhcHR1cmUKKysgKiBrZXJuZWwuIEl0IGFsc28gdXBkYXRlcyBrZXJuZWwgY29tbWFuZCBsaW5lIHBhc3NlZCBpbiBAbW9kX2NtZGxpbmUgdG8gaGF2ZQorKyAqIHJpZ2h0IHBhcmFtZXRlcnMgZm9yIHRoZSBkdW1wIGNhcHR1cmUga2VybmVsLgorKyAqCisrICogUmV0dXJuICUwIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgJS0xIGluIGNhc2Ugb2YgZXJyb3IuCisrICovCisraW50IGxvYWRfY3Jhc2hkdW1wX3NlZ21lbnRzKHN0cnVjdCBrZXhlY19pbmZvICppbmZvLCBjaGFyICptb2RfY21kbGluZSkKKyt7CisrCXVuc2lnbmVkIGxvbmcgZWxmY29yZWhkcjsKKysJdW5zaWduZWQgbG9uZyBidWZzejsKKysJdm9pZCAqYnVmOworKwlpbnQgZXJyOworKworKwkvKgorKwkgKiBGaXJzdCBmZXRjaCBhbGwgdGhlIG1lbW9yeSAoUkFNKSByYW5nZXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gcGFzcyB0bworKwkgKiB0aGUgY3Jhc2hkdW1wIGtlcm5lbCBkdXJpbmcgcGFuaWMuCisrCSAqLworKwllcnIgPSBjcmFzaF9nZXRfbWVtb3J5X3JhbmdlcygpOworKwlpZiAoZXJyKQorKwkJcmV0dXJuIGVycjsKKysKKysJLyoKKysJICogTm93IHRoYXQgd2UgaGF2ZSBtZW1vcnkgcmVnaW9ucyBzb3J0ZWQsIHdlIGNhbiB1c2UgZmlyc3QgbWVtb3J5CisrCSAqIHJlZ2lvbiBhcyBQSFlTX09GRlNFVC4KKysJICovCisrCXBoeXNfb2Zmc2V0ID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzLT5zdGFydDsKKysJZGJncHJpbnRmKCJwaHlzX29mZnNldDogJSNseFxuIiwgcGh5c19vZmZzZXQpOworKworKwllcnIgPSBjcmFzaF9jcmVhdGVfZWxmMzJfaGVhZGVycyhpbmZvLCAmZWxmX2luZm8sCisrCQkJCQkgdXNhYmxlbWVtX3JnbnMucmFuZ2VzLAorKwkJCQkJIHVzYWJsZW1lbV9yZ25zLnNpemUsICZidWYsICZidWZzeiwKKysJCQkJCSBFTEZfQ09SRV9IRUFERVJfQUxJR04pOworKwlpZiAoZXJyKQorKwkJcmV0dXJuIGVycjsKKysKKysJLyoKKysJICogV2UgYWxsb2NhdGUgRUxGIGNvcmUgaGVhZGVyIGZyb20gdGhlIGVuZCBvZiB0aGUgbWVtb3J5IGFyZWEgcmVzZXJ2ZWQKKysJICogZm9yIHRoZSBjcmFzaGtlcm5lbC4gV2UgYWxpZ24gdGhlIGhlYWRlciB0byBTRUNUSU9OX1NJWkUgKHdoaWNoIGlzCisrCSAqIDFNQikgc28gdGhhdCBhdmFpbGFibGUgbWVtb3J5IHBhc3NlZCBpbiBrZXJuZWwgY29tbWFuZCBsaW5lIHdpbGwgYmUKKysJICogYWxpZ25lZCB0byAxTUIuIFRoaXMgaXMgYmVjYXVzZSBrZXJuZWwgY3JlYXRlX21hcHBpbmcoKSB3YW50cyBtZW1vcnkKKysJICogcmVnaW9ucyB0byBiZSBhbGlnbmVkIHRvIFNFQ1RJT05fU0laRS4KKysJICovCisrCWVsZmNvcmVoZHIgPSBhZGRfYnVmZmVyX3BoeXNfdmlydChpbmZvLCBidWYsIGJ1ZnN6LCBidWZzeiwgMSA8PCAyMCwKKysJCQkJCSAgY3Jhc2hfcmVzZXJ2ZWRfbWVtLnN0YXJ0LAorKwkJCQkJICBjcmFzaF9yZXNlcnZlZF9tZW0uZW5kLCAtMSwgMCk7CisrCisrCWRiZ3ByaW50ZigiZWxmY29yZWhkcjogJSNseFxuIiwgZWxmY29yZWhkcik7CisrCWNtZGxpbmVfYWRkX2VsZmNvcmVoZHIobW9kX2NtZGxpbmUsIGVsZmNvcmVoZHIpOworKworKwkvKgorKwkgKiBBZGQgJ21lbT1zaXplJyBwYXJhbWV0ZXIgdG8gZHVtcCBjYXB0dXJlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoaXMKKysJICogcHJldmVudHMgdGhlIGR1bXAgY2FwdHVyZSBrZXJuZWwgZnJvbSB1c2luZyBhbnkgb3RoZXIgbWVtb3J5IHJlZ2lvbnMKKysJICogd2hpY2ggYmVsb25nIHRvIHRoZSBwcmltYXJ5IGtlcm5lbC4KKysJICovCisrCWNtZGxpbmVfYWRkX21lbShtb2RfY21kbGluZSwgZWxmY29yZWhkciAtIGNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCk7CisrCisrCWR1bXBfbWVtb3J5X3JhbmdlcygpOworKwlkYmdwcmludGYoImtlcm5lbCBjb21tYW5kIGxpbmU6IFwiJXNcIlxuIiwgbW9kX2NtZGxpbmUpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmCisrCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvaW5jbHVkZS9hcmNoL29wdGlvbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2luY2x1ZGUvYXJjaC9vcHRpb25zLmgKK0BAIC0wLDAgKzEsMjYgQEAKKysjaWZuZGVmIEtFWEVDX0FSQ0hfQVJNNjRfT1BUSU9OU19ICisrI2RlZmluZSBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSAorKworKy8vI2RlZmluZSBPUFRfQVJDSF9NQVgJKChPUFRfTUFYKSswKQorKworKyNkZWZpbmUgT1BUX0FQUEVORAkoKE9QVF9NQVgpKzApCisrI2RlZmluZSBPUFRfUkFNRElTSwkoKE9QVF9NQVgpKzEpCisrI2RlZmluZSBPUFRfRFRCCQkoKE9QVF9NQVgpKzIpCisrCisrI2RlZmluZSBPUFRfQVJDSF9NQVgJKChPUFRfTUFYKSszKQorKworKworKyNkZWZpbmUgS0VYRUNfQVJDSF9PUFRJT05TIFwKKysJS0VYRUNfT1BUSU9OUyBcCisrCXsgImFwcGVuZCIsICAgICAgIDEsIE5VTEwsIE9QVF9BUFBFTkQgfSwgXAorKwl7ICJjb21tYW5kLWxpbmUiLCAxLCBOVUxMLCBPUFRfQVBQRU5EIH0sIFwKKysJeyAiZHRiIiwgICAgICAgICAgMSwgTlVMTCwgT1BUX0RUQiB9LCBcCisrCXsgImluaXRyZCIsICAgICAgIDEsIE5VTEwsIE9QVF9SQU1ESVNLIH0sIFwKKysJeyAicmFtZGlzayIsICAgICAgMSwgTlVMTCwgT1BUX1JBTURJU0sgfSwgXAorKworKyNkZWZpbmUgS0VYRUNfQVJDSF9PUFRfU1RSIEtFWEVDX09QVF9TVFIgLyogT25seSBhY2NlcHQgbG9uZyBhcmNoIG9wdGlvbnMuICovCisrCisrI2RlZmluZSBLRVhFQ19BTExfT1BUSU9OUyBLRVhFQ19BUkNIX09QVElPTlMKKysjZGVmaW5lIEtFWEVDX0FMTF9PUFRfU1RSIEtFWEVDX0FSQ0hfT1BUX1NUUgorKworKyNlbmRpZiAvKiBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSCAqLworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jCitAQCAtMCwwICsxLDE3NyBAQAorKy8qCisrICogQVJNNjQga2V4ZWMgc3VwcG9ydC4KKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKy8vI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLXN5c2NhbGwuaCIKKysjaW5jbHVkZSAia2V4ZWMtYXJtNjQuaCIKKysKKysKKyt2b2lkIGFyY2hfdXNhZ2Uodm9pZCkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKworKwlwcmludGYoCisrIiAgICAgLS1hcHBlbmQ9U1RSSU5HICAgICAgIFNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB0byBTVFJJTkcuXG4iCisrIiAgICAgLS1jb21tYW5kLWxpbmU9U1RSSU5HIFNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB0byBTVFJJTkcuXG4iCisrIiAgICAgLS1kdGI9RklMRSAgICAgICAgICAgIFVzZSBGSUxFIGFzIHRoZSBkZXZpY2UgdHJlZSBibG9iLlxuIgorKyIgICAgIC0taW5pdHJkPUZJTEUgICAgICAgICBVc2UgRklMRSBhcyB0aGUga2VybmVsIGluaXRpYWwgcmFtZGlzay5cbiIKKysiICAgICAtLXJhbWRpc2s9RklMRSAgICAgICAgVXNlIEZJTEUgYXMgdGhlIGtlcm5lbCBpbml0aWFsIHJhbWRpc2suXG4iKTsKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorKworK2ludCBhcmNoX3Byb2Nlc3Nfb3B0aW9ucyhpbnQgVU5VU0VEKGFyZ2MpLCBjaGFyICoqVU5VU0VEKGFyZ3YpKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiAwOworK30KKysKKytjb25zdCBzdHJ1Y3QgYXJjaF9tYXBfZW50cnkgYXJjaGVzW10gPSB7CisrCXsgImFhcmNoNjQiLCBLRVhFQ19BUkNIX0FSTTY0IH0sCisrCXsgTlVMTCwgMCB9LAorK307CisrCisrdm9pZCBhcmNoX3VwZGF0ZV9wdXJnYXRvcnkoc3RydWN0IGtleGVjX2luZm8gKlVOVVNFRChpbmZvKSkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKyt1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlMDE2bHggLT4gJTAxNmx4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGFkZHIsCisrCQlhZGRyICsgMHgwODAwMDAwMDBVTCk7CisrCXJldHVybiBhZGRyICsgMHgwODAwMDAwMDBVTDsKKyt9CisrCisrdm9pZCBhZGRfc2VnbWVudChzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmc3osCisrCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZV90IG1lbXN6KQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCWFkZF9zZWdtZW50X3BoeXNfdmlydChpbmZvLCBidWYsIGJ1ZnN6LCBiYXNlLCBtZW1zeiwgMSk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKytzdGF0aWMgaW50IGdldF9tZW1vcnlfcmFuZ2VzXzEoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCQl1bnNpZ25lZCBsb25nIGtleGVjX2ZsYWdzKQorK3sKKysJc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgbWVtb3J5X3JhbmdlW0tFWEVDX1NFR01FTlRfTUFYXTsKKysJY29uc3QgY2hhciAqaW9tZW07CisrCWludCByYW5nZV9jb3VudCA9IDA7CisrCWNoYXIgbGluZVtNQVhfTElORV07CisrCUZJTEUgKmZwOworKworKwlpb21lbSA9IHByb2NfaW9tZW0oKTsKKysJZnAgPSBmb3Blbihpb21lbSwgInIiKTsKKysKKysJaWYgKCFmcCkgeworKwkJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb3BlbiAlczogJXNcbiIsCisrCQkJaW9tZW0sIHN0cmVycm9yKGVycm5vKSk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJZGJncHJpbnRmKCJtZW1vcnkgcmFuZ2VzOlxuIik7CisrCisrCXdoaWxlKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApICE9IDApIHsKKysJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgcjsKKysJCWNoYXIgKnN0cjsKKysJCWludCBjb25zdW1lZDsKKysKKysJCWlmIChyYW5nZV9jb3VudCA+PSBLRVhFQ19TRUdNRU5UX01BWCkKKysJCQlicmVhazsKKysKKysJCWlmIChzc2NhbmYobGluZSwgIiVMeC0lTHggOiAlbiIsICZyLnN0YXJ0LCAmci5lbmQsICZjb25zdW1lZCkKKysJCQkhPSAyKQorKwkJCWNvbnRpbnVlOworKworKwkJc3RyID0gbGluZSArIGNvbnN1bWVkOworKwkJci5lbmQrKzsKKysKKysJCWlmIChtZW1jbXAoc3RyLCAiU3lzdGVtIFJBTVxuIiwgMTEpKSB7CisrCQkJZGJncHJpbnRmKCIgU2tpcDogJTAxNkx4IC0gJTAxNkx4IDogJXMiLCByLnN0YXJ0LCByLmVuZCwKKysJCQkJc3RyKTsKKysJCQljb250aW51ZTsKKysJCX0KKysKKysJCXIudHlwZSA9IFJBTkdFX1JBTTsKKysJCW1lbW9yeV9yYW5nZVtyYW5nZV9jb3VudF0gPSByOworKwkJcmFuZ2VfY291bnQrKzsKKysKKysJCWRiZ3ByaW50ZigiIEFkZDogICUwMTZMeCAtICUwMTZMeCA6ICVzIiwgci5zdGFydCwgci5lbmQsIHN0cik7CisrCX0KKysKKysJZmNsb3NlKGZwKTsKKysJKnJhbmdlID0gbWVtb3J5X3JhbmdlOworKwkqcmFuZ2VzID0gcmFuZ2VfY291bnQ7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGdldF9tZW1vcnlfcmFuZ2VzXzIoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCSAgICAgIHVuc2lnbmVkIGxvbmcgVU5VU0VEKGtleGVjX2ZsYWdzKSkKKyt7CisrCXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlIG1lbW9yeV9yYW5nZVsyXTsKKysKKysJbWVtb3J5X3JhbmdlWzBdLnN0YXJ0ID0gMHgwODAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVswXS5lbmQgICA9IDB4MTAwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMF0udHlwZSA9IFJBTkdFX1JBTTsKKysKKysJbWVtb3J5X3JhbmdlWzFdLnN0YXJ0ID0gMHg5MDAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVsxXS5lbmQgICA9IDB4ODgwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMV0udHlwZSA9IFJBTkdFX1JBTTsKKysKKysJKnJhbmdlID0gbWVtb3J5X3JhbmdlOworKwkqcmFuZ2VzID0gc2l6ZW9mKG1lbW9yeV9yYW5nZSkgLyBzaXplb2YobWVtb3J5X3JhbmdlWzBdKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK2ludCBnZXRfbWVtb3J5X3JhbmdlcyhzdHJ1Y3QgbWVtb3J5X3JhbmdlICoqcmFuZ2UsIGludCAqcmFuZ2VzLAorKwkJCXVuc2lnbmVkIGxvbmcga2V4ZWNfZmxhZ3MpCisreworKwkvKiBGSVhNRTogU2hvdWxkIGdldCB0aGlzIGluZm8gZnJvbSBkZXZpY2UgdHJlZS4gKi8KKysJCisrCXJldHVybiBnZXRfbWVtb3J5X3Jhbmdlc18xKHJhbmdlLCByYW5nZXMsIGtleGVjX2ZsYWdzKTsKKyt9CisrCisrc3RydWN0IGZpbGVfdHlwZSBmaWxlX3R5cGVbXSA9IHsKKysJeyAiZWxmLWFybTY0IiwgZWxmX2FybTY0X3Byb2JlLCBlbGZfYXJtNjRfbG9hZCwgZWxmX2FybTY0X3VzYWdlIH0sCisrfTsKKysKKytpbnQgZmlsZV90eXBlcyA9IHNpemVvZihmaWxlX3R5cGUpIC8gc2l6ZW9mKGZpbGVfdHlwZVswXSk7CisrCisraW50IGFyY2hfY29tcGF0X3RyYW1wb2xpbmUoc3RydWN0IGtleGVjX2luZm8gKmluZm8pCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgYXJjaF9yZXVzZV9pbml0cmQodm9pZCkKKyt7CisrfQorKworK2ludCBtYWNoaW5lX3ZlcmlmeV9lbGZfcmVsKHN0cnVjdCBtZW1fZWhkciAqZWhkcikKKyt7CisrCSh2b2lkKWVoZHI7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBtYWNoaW5lX2FwcGx5X2VsZl9yZWwoc3RydWN0IG1lbV9laGRyICplaGRyLCB1bnNpZ25lZCBsb25nIHJfdHlwZSwKKysJdm9pZCAqbG9jYXRpb24sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKKyt7CisrCSh2b2lkKWVoZHI7CisrCSh2b2lkKXJfdHlwZTsKKysJKHZvaWQpbG9jYXRpb247CisrCSh2b2lkKWFkZHJlc3M7CisrCSh2b2lkKXZhbHVlOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKK0BAIC0wLDAgKzEsMjAgQEAKKysvKgorKyAqIEFSTTY0IGtleGVjIHN1cHBvcnQuCisrICovCisrCisrI2lmICFkZWZpbmVkKEtFWEVDX0FSTTY0X0gpCisrI2RlZmluZSBLRVhFQ19BUk02NF9ICisrCisrLyogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+IEZJWE1FOiB0aGlzIGlzIGJyb2tlbiAqLworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMuaCIKKysKKysjZGVmaW5lIEtFWEVDX1NFR01FTlRfTUFYIDE2IC8qIEZJWE1FOiB0aGlzIHNob3VsZCBjb21lIGZyb20gPGxpbnV4L2tleGVjLmg+ICovCisrCisraW50IGVsZl9hcm02NF9wcm9iZShjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbik7CisraW50IGVsZl9hcm02NF9sb2FkKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4sCisrCXN0cnVjdCBrZXhlY19pbmZvICppbmZvKTsKKyt2b2lkIGVsZl9hcm02NF91c2FnZSh2b2lkKTsKKysKKysjZW5kaWYKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMKK0BAIC0wLDAgKzEsMTE0IEBACisrLyoKKysgKiBBUk02NCBrZXhlYyBzdXBwb3J0LgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPGdldG9wdC5oPgorKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy1zeXNjYWxsLmgiCisrCisrI2luY2x1ZGUgImtleGVjLWFybTY0LmgiCisrI2luY2x1ZGUgImFyY2gvb3B0aW9ucy5oIgorKworKyNpZiAhZGVmaW5lZChFTV9BQVJDSDY0KQorKyMgZGVmaW5lIEVNX0FBUkNINjQgMTgzCisrI2VuZGlmCisrCisraW50IGVsZl9hcm02NF9wcm9iZShjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbikKKyt7CisrCWludCByZXN1bHQ7CisrCXN0cnVjdCBtZW1fZWhkciBlaGRyOworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJCisrCXJlc3VsdCA9IGJ1aWxkX2VsZl9leGVjX2luZm8oYnVmLCBsZW4sICZlaGRyLCAwKTsKKysKKysJaWYgKHJlc3VsdCA8IDApIHsKKysJCWRiZ3ByaW50ZigiTm90IGFuIEVMRiBleGVjdXRhYmxlXG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWlmIChlaGRyLmVfbWFjaGluZSAhPSBFTV9BQVJDSDY0KSB7CisrCQlkYmdwcmludGYoIk5vdCBhbiBBQVJDSDY0IGV4ZWN1dGFibGVcbiIpOworKwkJcmVzdWx0ID0gLTE7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlyZXN1bHQgPSAwOworKworK291dDoKKysJZnJlZV9lbGZfaW5mbygmZWhkcik7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gcmVzdWx0OworK30KKysKKytpbnQgZWxmX2FybTY0X2xvYWQoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbiwKKysJCQlzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbykKKyt7CisrCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKysJCUtFWEVDX0FSQ0hfT1BUSU9OUworKwkJeyAwIH0KKysJfTsKKysJc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRfb3B0aW9uc1tdID0gS0VYRUNfT1BUX1NUUiAiIjsKKysJY29uc3QgY2hhciAqY29tbWFuZF9saW5lID0gTlVMTDsKKysJdW5zaWduZWQgaW50IGNvbW1hbmRfbGluZV9sZW4gPSAwOworKwljb25zdCBjaGFyICpyYW1kaXNrID0gTlVMTDsKKysJY29uc3QgY2hhciAqZHRiID0gTlVMTDsKKysJaW50IG9wdDsKKysJc3RydWN0IG1lbV9laGRyIGVoZHI7CisrCWludCByZXN1bHQ7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKworKwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIHNob3J0X29wdGlvbnMsIG9wdGlvbnMsIDApKQorKwkJIT0gLTEpIHsKKysJCXN3aXRjaCAob3B0KSB7CisrCQlkZWZhdWx0OgorKwkJCWlmIChvcHQgPCBPUFRfTUFYKSAvKiBJZ25vcmUgY29yZSBvcHRpb25zICovCisrCQkJCWJyZWFrOworKwkJY2FzZSBPUFRfQVBQRU5EOgorKwkJCWNvbW1hbmRfbGluZSA9IG9wdGFyZzsKKysJCQljb21tYW5kX2xpbmVfbGVuID0gc3RybGVuKGNvbW1hbmRfbGluZSkgKyAxOworKwkJCWJyZWFrOworKwkJY2FzZSBPUFRfUkFNRElTSzoKKysJCQlyYW1kaXNrID0gb3B0YXJnOworKwkJCWJyZWFrOworKwkJY2FzZSBPUFRfRFRCOgorKwkJCWR0YiA9IG9wdGFyZzsKKysJCQlicmVhazsKKysJCX0KKysJfQorKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjb21tYW5kX2xpbmU6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNvbW1hbmRfbGluZSk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IHJhbWRpc2s6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHJhbWRpc2spOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkdGI6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGR0Yik7CisrCisrCWlmIChpbmZvLT5rZXhlY19mbGFncyAmIEtFWEVDX09OX0NSQVNIKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgImtleGVjOiBrZHVtcCBub3QgeWV0IHN1cHBvcnRlZCBvbiBhcm02NFxuIik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJcmVzdWx0ID0gYnVpbGRfZWxmX2V4ZWNfaW5mbyhidWYsIGxlbiwgJmVoZHIsIDApOworKworKwlpZiAocmVzdWx0IDwgMCkgeworKwkJZnJlZV9lbGZfaW5mbygmZWhkcik7CisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBmcmVlX2VsZl9pbmZvIGZhaWxlZFxuIiwgX19mdW5jX18sCisrCQkJX19MSU5FX18pOworKwkJcmV0dXJuIHJlc3VsdDsKKysJfQorKworKwllbGZfZXhlY19idWlsZF9sb2FkKGluZm8sICZlaGRyLCBidWYsIGxlbiwgMCk7CisrCisrCWluZm8tPmVudHJ5ID0gKHZvaWQqKTB4ODAwODAwMDBVTDsgIC8vIEZJWE1FCisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBlbGZfYXJtNjRfdXNhZ2Uodm9pZCkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLXN5c2NhbGwuaAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKK0BAIC0zOSw4ICszOSw4IEBACisgI2lmZGVmIF9fczM5MF9fCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI3NworICNlbmRpZgorLSNpZmRlZiBfX2FybV9fCistI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCV9fTlJfU1lTQ0FMTF9CQVNFICsgMzQ3ICAKKysjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtNjRfXykKKysjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJX19OUl9TWVNDQUxMX0JBU0UgKyAzNDcKKyAjZW5kaWYKKyAjaWYgZGVmaW5lZChfX21pcHNfXykKKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAgICAgICAgICAgICAgICA0MzExCitAQCAtMTA4LDYgKzEwOCw4IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrZXhlY19maWxlX2xvYWQoaW50IGsKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfUFBDNjQgICAoMjEgPDwgMTYpCisgI2RlZmluZSBLRVhFQ19BUkNIX0lBXzY0ICAgKDUwIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9BUk0gICAgICg0MCA8PCAxNikKKysjZGVmaW5lIEtFWEVDX0FSQ0hfQVJNNjQgICAoMTgzIDw8IDE2KQorKy8qICNkZWZpbmUgS0VYRUNfQVJDSF9BQVJDSDY0ICgxODMgPDwgMTYpICovCisgI2RlZmluZSBLRVhFQ19BUkNIX1MzOTAgICAgKDIyIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9TSCAgICAgICg0MiA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfTUlQU19MRSAoMTAgPDwgMTYpCitAQCAtMTUzLDUgKzE1NSw4IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrZXhlY19maWxlX2xvYWQoaW50IGsKKyAjaWZkZWYgX19tNjhrX18KKyAjZGVmaW5lIEtFWEVDX0FSQ0hfTkFUSVZFCUtFWEVDX0FSQ0hfNjhLCisgI2VuZGlmCisrI2lmIGRlZmluZWQoX19hcm02NF9fKQorKyNkZWZpbmUgS0VYRUNfQVJDSF9OQVRJVkUJS0VYRUNfQVJDSF9BUk02NAorKyNlbmRpZgorIAorICNlbmRpZiAvKiBLRVhFQ19TWVNDQUxMX0ggKi8KK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLmMKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMuYworQEAgLTY2NCw2ICs2NjQsOCBAQCBzdGF0aWMgaW50IG15X2xvYWQoY29uc3QgY2hhciAqdHlwZSwgaW50CisgCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKyAJaW5mby5rZXhlY19mbGFncyA9IGtleGVjX2ZsYWdzOworIAorKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysKKyAJcmVzdWx0ID0gMDsKKyAJaWYgKGFyZ2MgLSBmaWxlaW5kIDw9IDApIHsKKyAJCWZwcmludGYoc3RkZXJyLCAiTm8ga2VybmVsIHNwZWNpZmllZFxuIik7CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCitAQCAtMCwwICsxLDcgQEAKKysjCisrIyBQdXJnYXRvcnkgYXJtNjQKKysjCisrCisrYXJtNjRfUFVSR0FUT1JZX1NSQ1MgPQorKworK2Rpc3QgKz0gcHVyZ2F0b3J5L2FyY2gvYXJtNjQvTWFrZWZpbGUgJChhcm02NF9QVVJHQVRPUllfU1JDUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk4ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2tleGVjLXRvb2xzOiBSZWZpbmUga2R1bXAgZGV2aWNlX3RyZWUgc29ydAorCitUaGUgY29tbWl0IGIwMmQ3MzViZiB3YXMgdG8gcmVhcnJhbmdlIHRoZSBkZXZpY2UtdHJlZSBlbnRyaWVzLCBhbmQKK2Fzc3VtZWQgdGhhdCB0aGVzZSBlbnRyaWVzIGFyZSBzb3J0ZWQgaW4gdGhlIGFzY2VuZGluZyBvcmRlci4gYnV0CithY2N0dWFsbHkgd2hlbiBJIHdhcyB2YWxpZGF0aW5nIGtleGVjIGFuZCBrZHVtcCwgdGhlIG9yZGVyIG9mCitzZXJpYWwgbm9kZSBzdGlsbCBpcyBjaGFuZ2VkLiBTbyB0aGUgcGF0Y2ggaXMgdG8gc29ydCB0aGVzZSBlbnRyaWVzCitieSB0aGUgZGlyZWN0b3J5IG5hbWUgaW4gYXNjZW5kaW5nIG9yZGVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWWFuZyBXZWkgPFdlaS5ZYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGtleGVjL2FyY2gvcHBjL2ZzMmR0LmMgfCAgIDEzICsrKysrKysrKystLS0KKyBrZXhlYy9mczJkdC5jICAgICAgICAgIHwgICAxMyArKysrKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKK0BAIC0yOTYsNiArMjk2LDkgQEAgc3RhdGljIGludCBjb21wYXJlZnVuYyhjb25zdCB2b2lkICpkZW50cgorIHsKKyAJY2hhciAqc3RyMSA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MSktPmRfbmFtZTsKKyAJY2hhciAqc3RyMiA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MiktPmRfbmFtZTsKKysJY2hhciogcHRyMSA9IHN0cmNocihzdHIxLCAnQCcpOworKwljaGFyKiBwdHIyID0gc3RyY2hyKHN0cjIsICdAJyk7CisrCWludCBsZW4xLCBsZW4yOworIAorIAkvKgorIAkgKiBzdHJjbXAgc2NhbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBmYWlscyB0byBpZGV0aWZ5IGZvciBzb21lCitAQCAtMzAzLDkgKzMwNiwxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVmdW5jKGNvbnN0IHZvaWQgKmRlbnRyCisgCSAqIFRoZXJlZm9yZSwgd2UgZ2V0IHRoZSB3cm9uZyBzb3J0ZWQgb3JkZXIgbGlrZSBtZW1vcnlAMTAwMDAwMDAgYW5kCisgCSAqIG1lbW9yeUBmMDAwMDAwLgorIAkgKi8KKy0JaWYgKHN0cmNocihzdHIxLCAnQCcpICYmIHN0cmNocihzdHIyLCAnQCcpICYmCistCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKKy0JCXJldHVybiAxOworKwlpZiAocHRyMSAmJiBwdHIyKSB7CisrCQlsZW4xID0gcHRyMSAtIHN0cjE7CisrCQlsZW4yID0gcHRyMiAtIHN0cjI7CisrCQlpZiAoIXN0cm5jbXAoc3RyMSwgc3RyMiwgbGVuMSA+bGVuMiA/IGxlbjE6IGxlbjIpICYmCisrCQkJCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKKysJCQkJcmV0dXJuIDE7CisrCX0KKyAKKyAJcmV0dXJuIHN0cmNtcChzdHIxLCBzdHIyKTsKKyB9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMteDMyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmQxOGViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaApAQCAtMCwwICsxLDg4IEBACit4ODZfNjQ6IEFkZCBzdXBwb3J0IHRvIGJ1aWxkIGtleGVjLXRvb2xzIHdpdGggeDMyIEFCSQorCitTdW1tYXJ5IG9mIGNoYW5nZXMsCisKK2NvbmZpZ3VyZS5hYzogQWRkIHRlc3QgZm9yIGRldGVjdCB4MzIgQUJJLgorcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlOiBOb3QgdXNlIG1jbW9kZWwgbGFyZ2Ugd2hlbgorCXgzMiBBQkkgaXMgc2V0Lgora2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYzogV2hlbiB4MzIgQUJJIGlzIHNldAorCXVzZSBFTEZDTEFTUzMyIGluc3RlYWQgb2YgRUxGQ0xBU1M2NC4KK2tleGVjL2tleGVjLXN5c2NhbGwuaDogQWRkIGNvcnJlY3Qgc3lzY2FsbCBudW1iZXIgZm9yIHgzMiBBQkkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5ICsrKysrKysrKworIGtleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMgfCA0ICsrKysKKyBrZXhlYy9rZXhlYy1zeXNjYWxsLmggICAgICAgICAgICAgICAgICAgIHwgNCArKysrCisgcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlICAgICAgICAgICB8IDQgKysrLQorIDQgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKK0BAIC01Niw2ICs1NiwxNSBAQCBjYXNlICR0YXJnZXRfY3B1IGluCisgCQk7OworIAlpYTY0fHg4Nl82NHxhbHBoYXxtNjhrICkKKyAJCUFSQ0g9IiR0YXJnZXRfY3B1IgorKworKwkJZG5sIC0tLVRlc3QgZm9yIHgzMiBBQkkgaW4geDg2XzY0CisrCQlpZiB0ZXN0ICJ4JEFSQ0giID0gInh4ODZfNjQiIDsgdGhlbgorKwkJCUFDX0VHUkVQX0NQUCh4MzJfdGVzdCwKKysJCQlbI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoX19JTFAzMl9fKQorKwkJCQl4MzJfdGVzdAorKwkJCSNlbmRpZgorKwkJCV0sIFNVQkFSQ0g9J3gzMicsIFNVQkFSQ0g9JzY0JykKKysJCWZpCisgCQk7OworIAkqICkKKyAJCUFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlICR0YXJnZXRfY3B1XSkKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYworQEAgLTgsNyArOCwxMSBAQCBpbnQgbWFjaGluZV92ZXJpZnlfZWxmX3JlbChzdHJ1Y3QgbWVtX2VoCisgCWlmIChlaGRyLT5laV9kYXRhICE9IEVMRkRBVEEyTFNCKSB7CisgCQlyZXR1cm4gMDsKKyAJfQorKyNpZmRlZiBfX0lMUDMyX18KKysJaWYgKGVoZHItPmVpX2NsYXNzICE9IEVMRkNMQVNTMzIpIHsKKysjZWxzZQorIAlpZiAoZWhkci0+ZWlfY2xhc3MgIT0gRUxGQ0xBU1M2NCkgeworKyNlbmRpZgorIAkJcmV0dXJuIDA7CisgCX0KKyAJaWYgKGVoZHItPmVfbWFjaGluZSAhPSBFTV9YODZfNjQpIHsKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorQEAgLTMxLDggKzMxLDEyIEBACisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI2OAorICNlbmRpZgorICNpZmRlZiBfX3g4Nl82NF9fCisrI2lmZGVmIF9fSUxQMzJfXworKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQk1MjgKKysjZWxzZQorICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNDYKKyAjZW5kaWYKKysjZW5kaWYKKyAjaWZkZWYgX19zMzkweF9fCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI3NworICNlbmRpZgorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9wdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrKyBrZXhlYy10b29scy0yLjAuMTAvcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlCitAQCAtMjMsNCArMjMsNiBAQCB4ODZfNjRfUFVSR0FUT1JZX1NSQ1MgKz0gcHVyZ2F0b3J5L2FyY2gvCisgeDg2XzY0X1BVUkdBVE9SWV9TUkNTICs9IHB1cmdhdG9yeS9hcmNoL2kzODYvdmdhLmMKKyB4ODZfNjRfUFVSR0FUT1JZX1NSQ1MgKz0gcHVyZ2F0b3J5L2FyY2gvaTM4Ni9waWMuYworIAorLXg4Nl82NF9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTID0gLW1jbW9kZWw9bGFyZ2UKKytpZmVxICgkKFNVQkFSQ0gpLDY0KQorKyAgICAgICAgeDg2XzY0X1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MgPSAtbWNtb2RlbD1sYXJnZQorK2VuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjEwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmRiOTgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIGtleGVjLXRvb2xzLmluYworZXhwb3J0IExERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSfSIKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXpsaWI9eWVzIgorCitTUkNfVVJJICs9ICJmaWxlOi8va2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLWFhcmNoNjQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLXgzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2ggXAorICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmNiNGQyMmJjZWM3MWI2ZTA3MGFhOGU5ZDk5MGE1ZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzMxYmI4M2RlZWY5NTQ3YTI4ZThjZmMxZjA5MTZlNzBmOGU2YjkyYTZiZDJlZjcwNzdlMTJlMzMzODIzOWFmMyIKKworUEFDS0FHRVMgPSsgImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKKworRklMRVNfa2V4ZWMgPSAiJHtzYmluZGlyfS9rZXhlYyIKK0ZJTEVTX2tkdW1wID0gIiR7c2JpbmRpcn0va2R1bXAiCitGSUxFU192bWNvcmUtZG1lc2cgPSAiJHtzYmluZGlyfS92bWNvcmUtZG1lc2ciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhY2IzYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYgpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIldyYXBwZXIgc2NyaXB0IGZvciB0aGUgTGludXgga2VybmVsIG1vZHVsZSBkZXBlbmRlbmN5IGluZGV4ZXIiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisjIFRoZSBrZXJuZWwgYW5kIHRoZSBzdGFnaW5nIGRpciBmb3IgaXQgaXMgbWFjaGluZSBzcGVjaWZpYworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgZm9yIHRoZSBzc3RhdGUgY29kZSB0byBwcm9jZXNzIHRoZSB3cmFwcGVyCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiZGVwbW9kd3JhcHBlciIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCisJY2F0ID4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vZGVwbW9kd3JhcHBlciA8PCBFT0YKKyMhL2Jpbi9zaAorIyBFeHBlY3RlZCB0byBiZSBjYWxsZWQgYXM6IGRlcG1vZHdyYXBwZXIgLWEgS0VSTkVMX1ZFUlNJT04KK2lmIFsgIlwkMSIgIT0gIi1hIiAtbyAiXCQyIiAhPSAiLWIiIF07IHRoZW4KKyAgICBlY2hvICJVc2FnZTogZGVwbW9kd3JhcHBlciAtYSAtYiByb290ZnMgS0VSTkVMX1ZFUlNJT04iID4mMgorICAgIGV4aXQgMQorZmkKK2lmIFsgISAtciAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uIF07IHRoZW4KKyAgICBlY2hvICJVbmFibGUgdG8gcmVhZDogJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbiIgPiYyCitlbHNlCisgICAga2VybmVsYWJpPVwkKGNhdCAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uKQorICAgIGlmIFsgIlwka2VybmVsYWJpIiAhPSAiXCQ0IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBLZXJuZWwgdmVyc2lvbiBcJDQgZG9lcyBub3QgbWF0Y2gga2VybmVsLWFiaXZlcnNpb24gKFwka2VybmVsYWJpKSIgPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCitpZiBbICEgLXIgJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLVwkNCBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIHJlYWQ6ICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC1cJDQiID4mMgorICAgIGV4ZWMgZW52IGRlcG1vZCAiXCQxIiAiXCQyIiAiXCQzIiAiXCQ0IgorZWxzZQorICAgIGV4ZWMgZW52IGRlcG1vZCAiXCQxIiAiXCQyIiAiXCQzIiAtRiAiJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLVwkNCIgIlwkNCIKK2ZpCitFT0YKKwljaG1vZCAreCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9kZXBtb2R3cmFwcGVyCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZGVwbW9kd3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK2RlcG1vZHdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlMjc0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCityZXF1aXJlIGttb2QuaW5jCisKK0RFUEVORFMgKz0gInpsaWItbmF0aXZlIgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJICs9ICJmaWxlOi8vQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaCBcCisgICAgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQgKCl7CisJZm9yIHRvb2wgaW4gZGVwbW9kIGluc21vZCBsc21vZCBtb2RpbmZvIG1vZHByb2JlIHJtbW9kCisJZG8KKwkJbG4gLXMga21vZCAke0R9JHtiaW5kaXJ9LyR0b29sCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFhNjdkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgTGludXgga2VybmVsIG1vZHVsZXMiCitERVNDUklQVElPTiA9ICJrbW9kIGlzIGEgc2V0IG9mIHRvb2xzIHRvIGhhbmRsZSBjb21tb24gdGFza3Mgd2l0aCBMaW51eCBrZXJuZWwgbW9kdWxlcyBsaWtlIFwKKyAgICAgICAgICAgICAgIGluc2VydCwgcmVtb3ZlLCBsaXN0LCBjaGVjayBwcm9wZXJ0aWVzLCByZXNvbHZlIGRlcGVuZGVuY2llcyBhbmQgYWxpYXNlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMucHJvZnVzaW9uLm1vYmkva21vZC8iCitMSUNFTlNFID0gIkdQTC0yLjArICYgTEdQTC0yLjErIgorTElDRU5TRV9saWJrbW9kID0gIkxHUEwtMi4xKyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyArPSAicGtnY29uZmlnLW5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlia21vZC9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIgoraW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYworCitTUkNSRVYgPSAiMGQ4MzM3MTVlYWE2NTYzNmRkYTI3MDViODkzNTlhMWUwMTU0ZGM1OCIKKyMgTG9va291dCBmb3IgUFYgYnVtcCB0b28gd2hlbiBTUkNSRVYgaXMgY2hhbmdlZAorUFYgPSAiMjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9rZXJuZWwva21vZC9rbW9kLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXBtb2Qtc2VhcmNoLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LU9fQ0xPRVhFQy5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluc3RhbGwgLS1zeW1saW5rIgorRVhUUkFfT0VDT05GICs9IiAtLWVuYWJsZS10b29scyAtLWRpc2FibGUtbWFucGFnZXMgLS13aXRoLXpsaWIiCisKK1BBQ0tBR0VDT05GSUdbZGVidWddID0gIi0tZW5hYmxlLWRlYnVnLC0tZGlzYWJsZS1kZWJ1ZyIKK1BBQ0tBR0VDT05GSUdbbG9nZ2luZ10gPSAiIC0tZW5hYmxlLWxvZ2dpbmcsLS1kaXNhYmxlLWxvZ2dpbmciCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgZ3RrZG9jaXplIC0tZG9jZGlyICR7U30vbGlia21vZC9kb2NzIHx8IHRvdWNoICR7U30vbGlia21vZC9kb2NzL2d0ay1kb2MubWFrZQorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwlzZWQgLWkgJ3MjfWxpYnRvb2wjfSR7VEFSR0VUX1NZU30tbGlidG9vbCMnICR7Qn0vZG9sdGxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzIyMTgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9DaGFuZ2UtdG8tY2FsbGluZy1ic3dhcF8taW5zdGVhZC1vZi1odG9iZS1hbmQtYmUtdG9oLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1N1YmplY3Q6IENoYW5nZSB0byBjYWxsaW5nIGJzd2FwXyogaW5zdGVhZCBvZiBodG9iZSogYW5kIGJlKnRvaAorCitXZSBjYW4ndCB1c2UgaHRvYmUqIGFuZCBiZSp0b2ggZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbm90CithdmFpbGFibGUgb24gb2xkZXIgdmVyc2lvbnMgb2YgZ2xpYmMsIEZvciBleGFtcGxlLCBzaGlwcGVkIG9uIENlbnRvcyA1LjUuCisKK0NoYW5nZSB0byBkaXJlY3RseSBjYWxsaW5nIGJzd2FwXyogYXMgZGVmaW5lZCBpbitieXRlc3dhcC5oLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMgYi9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKK2luZGV4IDZmYzA2ZmMuLjkxMjE4NWEgMTAwNjQ0CistLS0gYS9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKKysrKyBiL2xpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTEyNyw3ICsxMjgsNyBAQCBib29sIGttb2RfbW9kdWxlX3NpZ25hdHVyZV9pbmZvKGNvbnN0IHN0cnVjdCBrbW9kX2ZpbGUgKmZpbGUsIHN0cnVjdCBrbW9kX3NpZ25hdAorIAkJCW1vZHNpZy0+aGFzaCA+PSBQS0VZX0hBU0hfX0xBU1QgfHwKKyAJCQltb2RzaWctPmlkX3R5cGUgPj0gUEtFWV9JRF9UWVBFX19MQVNUKQorIAkJcmV0dXJuIGZhbHNlOworLQlzaWdfbGVuID0gYmUzMnRvaChnZXRfdW5hbGlnbmVkKCZtb2RzaWctPnNpZ19sZW4pKTsKKysJc2lnX2xlbiA9IGJzd2FwXzMyKGdldF91bmFsaWduZWQoJm1vZHNpZy0+c2lnX2xlbikpOworIAlpZiAoc2lnX2xlbiA9PSAwIHx8CisgCSAgICBzaXplIDwgKGludDY0X3QpKG1vZHNpZy0+c2lnbmVyX2xlbiArIG1vZHNpZy0+a2V5X2lkX2xlbiArIHNpZ19sZW4pKQorIAkJcmV0dXJuIGZhbHNlOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWFmY2I5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitBdm9pZCBwYXJhbGxlbC10ZXN0cyBhcyBpdCByZW1vdmUKK2J1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzIHJlcXVpcmVkIGJ5IHB0ZXN0LgorSW4gYXV0b21ha2UgMS4xMy40IHBhcmFsbGVsLXRlc3RzIGlzIGFzc3VtZWQgYnkgZGVmYXVscy4KK0luIG9yZGVyIHRvIGhhdmUgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMKK3NlcmlhbC10ZXN0cyBpcyBub3cgcmVxdWlyZWQKKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKGRpc2FibGUgZmVhdHVyZSBpbmNvbXBhdGlibGUgd2l0aCBwdGVzdCkgCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZWIwZjlkMS4uYTUzOTk2OCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTQsNyArMTQsNyBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgQUNfUFJFRklYX0RFRkFVTFQoWy91c3JdKQorIEFNX01BSU5UQUlORVJfTU9ERShbZW5hYmxlXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSBzaWxlbnQtcnVsZXMgdGFyLXBheCBuby1kaXN0LWd6aXAgZGlzdC14eiBzdWJkaXItb2JqZWN0cyBjb2xvci10ZXN0cyBwYXJhbGxlbC10ZXN0c10pCisrQU1fSU5JVF9BVVRPTUFLRShbY2hlY2stbmV3cyBmb3JlaWduIDEuMTEgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgY29sb3ItdGVzdHMgc2VyaWFsLXRlc3RzXSkKKyBBTV9TSUxFTlRfUlVMRVMoW3llc10pCisgTFRfSU5JVChbZGlzYWJsZS1zdGF0aWMgcGljLW9ubHldKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZGVwbW9kLXNlYXJjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyN2MwYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZgpAQCAtMCwwICsxLDYgQEAKKyMKKyMgL2V0Yy9kZXBtb2QuZC9kZXBtb2QuY29uZgorIworCitzZWFyY2ggdXBkYXRlcyBleHRyYW1vZHVsZXMgYnVpbHQtaW4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjFkNjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2ZpeC1PX0NMT0VYRUMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBiZDQzMzY3ZWVlODY4MDU5NzcwMTg4ZmQ5ZTlkYjM4NTIwZGM2ZmZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDIyIEphbiAyMDE0IDAxOjA2OjQwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oOiBjaGVjayB3aGV0aGVyIE9fQ0xPRVhFQyBpcworIGRlZmluZWQgb3Igbm90CisKK09fQ0xPRVhFQyBpcyBpbnRyb2R1Y2VkIGZyb20gTGludXggMi42LjIzLCBzbyBvbGQga2VybmVsIGRvZXNuJ3QgaGF2ZQoraXQsIHdlIG5lZWQgY2hlY2sgYmVmb3JlIHVzZS4KKworVGhpcyBwYXRjaCBpcyBtdWNoIG1vcmUgbGlrZSBhIHdvcmthcm91bmQsIHNpbmNlIGl0IG1heSBuZWVkIGZjbnRsKCkgdXNlCitGRF9DTE9FWEVDIHRvIHJlcGxhY2UuCisKK1RoaXMgcHJvYmxlbSB3YXMgcmVwb3J0ZWQgYnkgIlRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4iCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaCB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oIGIvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKK2luZGV4IDAxODAxMjQuLjEwMGI0MGYgMTAwNjQ0CistLS0gYS9saWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaAorKysrIGIvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKK0BAIC05LDYgKzksMTAgQEAKKyAjaW5jbHVkZSAibWFjcm8uaCIKKyAjaW5jbHVkZSAibGlia21vZC5oIgorIAorKyNpZm5kZWYgT19DTE9FWEVDCisrI2RlZmluZSBPX0NMT0VYRUMgMAorKyNlbmRpZgorKworIHN0YXRpYyBfYWx3YXlzX2lubGluZV8gX3ByaW50Zl9mb3JtYXRfKDIsIDMpIHZvaWQKKyAJa21vZF9sb2dfbnVsbChzdHJ1Y3Qga21vZF9jdHggKmN0eCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHt9CisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcHRlc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWRiY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtcnVOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0wNy0xMiAxNzoxMTowNS4yNzgzMzE1NTcgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDctMTIgMTc6MTQ6MjcuMDMzNzg4MDE2ICswMjAwCitAQCAtMjA0LDYgKzIwNCwxNiBAQAorIAorIGRpc3RjbGVhbi1sb2NhbDogJChESVNUQ0xFQU5fTE9DQUxfSE9PS1MpCisgCisraW5zdGFsbC1wdGVzdDoKKysJQCQoTUtESVJfUCkgJChERVNURElSKS90ZXN0c3VpdGUKKysJQGZvciBmaWxlIGluICQoVEVTVFNVSVRFKTsgZG8gXAorKwkJaW5zdGFsbCAkJGZpbGUgJChERVNURElSKS90ZXN0c3VpdGU7IFwKKysJZG9uZTsKKysJQHNlZCAtZSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgPCBNYWtlZmlsZSA+ICQoREVTVERJUikvTWFrZWZpbGUKKysJQCQoTUtESVJfUCkgJChERVNURElSKS90b29scworKwlAY3AgJChub2luc3RfU0NSSVBUUykgJChub2luc3RfUFJPR1JBTVMpICQoREVTVERJUikvdG9vbHMKKysJQGNwIC1yIHRlc3RzdWl0ZS9yb290ZnMgdGVzdHN1aXRlLy5saWJzICQoREVTVERJUikvdGVzdHN1aXRlCisrCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGN1c3RvbSByZWxlYXNlIGhlbHBlcnMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OThkZDJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKK3RvdWNoIHRlc3RzdWl0ZS9zdGFtcC1yb290ZnMKK3RhciB4ZiB0ZXN0bW9kdWxlLnRhcgorbWFrZSAtayBydW50ZXN0LVRFU1RTIDI+L2Rldi9udWxsfCBncmVwIC1lIF5QQVNTIC1lIF5GQUlMCitmaW5kIHRlc3RzdWl0ZSAtbmFtZSAqLmtvIC1leGVjIHJtIC1mIHt9IFw7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYmI5NWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYgpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCityZXF1aXJlIGttb2QuaW5jCisKK0RFUEVORFMgKz0gInpsaWIiCitQUk9WSURFUyArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCitSUFJPVklERVNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorUkNPTkZMSUNUU18ke1BOfSArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCitSUkVQTEFDRVNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorCisjIHRvIGZvcmNlIHVzZXIgdG8gcmVtb3ZlIG9sZCBtb2R1bGUtaW5pdC10b29scyBhbmQgcmVwbGFjZSB0aGVtIHdpdGgga21vZCB2YXJpYW50cworUkNPTkZMSUNUU19saWJrbW9kMiArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCisKKyMgYXV0b3Rvb2xzIHNldCBwcmVmaXggdG8gL3VzciwgaG93ZXZlciB3ZSB3YW50IHRoZW0gaW4gL2JpbiBhbmQgL3NiaW4KK2JpbmRpciA9ICIke2Jhc2VfYmluZGlyfSIKK3NiaW5kaXIgPSAiJHtiYXNlX3NiaW5kaXJ9IgorIyBsaWJkaXIgPSAiJHtiYXNlX2xpYmRpcn0iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICAgICAgIyBhZGQgc3ltbGlua3MgdG8ga21vZAorICAgICAgICBsbnIgJHtEfSR7YmFzZV9iaW5kaXJ9L2ttb2QgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzbW9kCisgICAgICAgIGZvciB0b29sIGluIGluc21vZCBybW1vZCBkZXBtb2QgbW9kaW5mbyBtb2Rwcm9iZTsgZG8KKyAgICAgICAgICAgICAgICBsbnIgJHtEfSR7YmFzZV9iaW5kaXJ9L2ttb2QgJHtEfSR7YmFzZV9zYmluZGlyfS8ke3Rvb2x9CisgICAgICAgIGRvbmUKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzCisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2VfbGliZGlyfS9kZXBtb2QuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX2xpYmRpcn0vbW9kcHJvYmUuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtzeXNjb25mZGlyfS9kZXBtb2QuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kCisKKyAgICAgICAgIyBpbnN0YWxsIGRlcG1vZC5kIGZpbGUgZm9yIHNlYXJjaC8gZGlyCisgICAgICAgIGluc3RhbGwgLURtNjQ0ICIke1dPUktESVJ9L2RlcG1vZC1zZWFyY2guY29uZiIgIiR7RH0ke2Jhc2VfbGliZGlyfS9kZXBtb2QuZC9zZWFyY2guY29uZiIKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICAgICAgICAgc2VkIC1pICdzL2FjX3B3ZD0vI2FjX3B3ZD0vJyBjb25maWcuc3RhdHVzIDsgc2VkIC1pICIvI2FjX3B3ZD0vYVxhY19wd2Q9Jy4nIiBjb25maWcuc3RhdHVzCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI2MCIKKworQUxURVJOQVRJVkVfa21vZCA9ICJpbnNtb2QgbW9kcHJvYmUgcm1tb2QgbW9kaW5mbyBiaW4tbHNtb2QgbHNtb2QgZGVwbW9kIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5zbW9kIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vZHByb2JlXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbW9kcHJvYmUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcm1tb2RdID0gIiR7YmFzZV9zYmluZGlyfS9ybW1vZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb2RpbmZvXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbW9kaW5mbyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiaW4tbHNtb2RdID0gIiR7YmFzZV9iaW5kaXJ9L2xzbW9kIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbHNtb2RdID0gIiR7YmFzZV9zYmluZGlyfS9sc21vZCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsc21vZF0gPSAiJHtiYXNlX2JpbmRpcn0vbHNtb2QuJHtCUE59IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGVwbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZGVwbW9kIgorCitQQUNLQUdFUyA9KyAibGlia21vZCAke1BOfS1iYXNoLWNvbXBsZXRpb24iCisKK0ZJTEVTX2xpYmttb2QgPSAiJHtiYXNlX2xpYmRpcn0vbGlia21vZCoke1NPTElCU30gJHtsaWJkaXJ9L2xpYmttb2QqJHtTT0xJQlN9IgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2RlcG1vZC5kICR7YmFzZV9saWJkaXJ9L21vZHByb2JlLmQiCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ODEzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41LzAwMDEtUmVjdGlmeS10aGUtZnVuY3Rpb24tc2lnbmF0dXJlcy10by1maXgtcHJvdG90eXBlLW1pcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGRiMTEyNzM5ZGM0ZjYwOGE5NjhiODEwNGIzODI5NTVkYzNkOTZjYTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA3OjQwOjEwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlY3RpZnkgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8gZml4IHByb3RvdHlwZSBtaXNtYXRjaGVzCisKK2NsYW5nIGlzIGxlc3MgZm9yZ2l2aW5nIHdoZW4gaXQgY29tZXMgdG8gY29kaW5nIHN0YW5kYXJkcywgY29ycmVjdCB0aGUKK2Z1bmN0aW9uIHNpZ25hdHVyZXMgdG8gcmVmbGVjdCB0aGUgZnVuY3Rpb24gbG9naWMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBmc3luYy5jICAgICAgfCA3ICsrKystLS0KKyBsYXRlbmN5dG9wLmggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mc3luYy5jIGIvZnN5bmMuYworaW5kZXggODJkZmYwZS4uNWNlZmJhOSAxMDA2NDQKKy0tLSBhL2ZzeW5jLmMKKysrKyBiL2ZzeW5jLmMKK0BAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBmc3luY19maWxlcyB7Cisgc3RhdGljIEdMaXN0ICpmc3luY19kYXRhOworIAorIAorLXN0YXRpYyBjaGFpbl9maWxlKHN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jLCBjaGFyICpmaWxlbmFtZSkKKytzdGF0aWMgdm9pZCBjaGFpbl9maWxlKHN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jLCBjaGFyICpmaWxlbmFtZSkKKyB7CisgCXN0cnVjdCBmc3luY19maWxlcyAqZmlsZTsKKyAJR0xpc3QgKml0ZW07CitAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgY2hhaW5fZmlsZShzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYywgY2hhciAqZmlsZW5hbWUpCisgCXByb2MtPmZpbGVzID0gZ19saXN0X2FwcGVuZChwcm9jLT5maWxlcywgZmlsZSk7CisgfQorIAorLXN0YXRpYyByZXBvcnRfZmlsZShjaGFyICpwcm9jZXNzLCBjaGFyICpmaWxlKQorK3N0YXRpYyB2b2lkIHJlcG9ydF9maWxlKGNoYXIgKnByb2Nlc3MsIGNoYXIgKmZpbGUpCisgeworIAlzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYzsKKyAJR0xpc3QgKml0ZW07CitAQCAtMTU3LDkgKzE1NywxMCBAQCBpbnQgZW5hYmxlX2ZzeW5jX3RyYWNlcih2b2lkKQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyIiwgImZzeW5jIik7CQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2l0ZXJfY3RybCIsICJmdHJhY2VfcHJpbnRrIik7CQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMSIpOworKwlyZXR1cm4gcmV0OworIH0KKyAKKy1pbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyt2b2lkIGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisgeworIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMCIpOworIH0KK2RpZmYgLS1naXQgYS9sYXRlbmN5dG9wLmggYi9sYXRlbmN5dG9wLmgKK2luZGV4IDUzOTRkNzMuLjlkMTA3YTggMTAwNjQ0CistLS0gYS9sYXRlbmN5dG9wLmgKKysrKyBiL2xhdGVuY3l0b3AuaAorQEAgLTU0LDUgKzU0LDUgQEAgZXh0ZXJuIGNoYXIgKnRyYW5zbGF0ZShjaGFyICpsaW5lKTsKKyBleHRlcm4gdm9pZCBpbml0X3RyYW5zbGF0aW9ucyhjaGFyICpmaWxlbmFtZSk7CisgZXh0ZXJuIGludCBmc3luY19kaXNwbGF5KGludCBkdXJhdGlvbik7CisgZXh0ZXJuIGludCBlbmFibGVfZnN5bmNfdHJhY2VyKHZvaWQpOworLWV4dGVybiBpbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCk7CisrZXh0ZXJuIHZvaWQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCk7CisgZXh0ZXJuIHZvaWQgdXBkYXRlX2xpc3Qodm9pZCk7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtZnN5bmMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDhjY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK2xpbnV4OiBzeXNmczogdXNlIHRyYWNpbmdfb24gYXMgdHJhY2luZ19lbmFibGVkIGlzIGRlcHJlY2F0ZWQKKwordHJhY2luZ19lbmFibGVkIHVzZSBpbiB0aGUga2VybmVsIGlzIGJlaW5nIGRlcHJlY2F0ZWQgYXMgcGVyIGNvbW1pdAorNjc1MmFiNGE5YzMwIFt0cmFjaW5nOiBEZXByZWNhdGUgdHJhY2luZ19lbmFibGVkIGZvciB0cmFjaW5nX29uXSBpbgordGhlIGxpbnV4IG1haW5saW5lIGtlcm5lbC4gdHJhY2luZ19lbmFibGVkIHVzZSB3aWxsIGdlbmVyYXRlIGEgd2FybmluZworYW5kIG1heSBubyBsb25nZXIgZnVuY3Rpb24gYXMgZXhwZWN0ZWQsIHRoZXJlZm9yZSBtb3ZlIHRvIHVzZSB0cmFjaW5nX29uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGVubmlzIEhhbGwgPGRlbm5pcy5oYWxsQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsYXRlbmN5dG9wLTAuNS9mc3luYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGF0ZW5jeXRvcC0wLjUub3JpZy9mc3luYy5jCTIwMTItMDgtMDMgMTA6NDU6NDkuMDAwMDAwMDAwIC0wNDAwCisrKysgbGF0ZW5jeXRvcC0wLjUvZnN5bmMuYwkyMDEyLTA4LTAzIDEwOjQ4OjM5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTE0OSwxOSArMTQ5LDE5IEBACisgICogY2QgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZworICAqIGVjaG8gZnN5bmMgPiBjdXJyZW50X3RyYWNlcgorICAqIGVjaG8gZnRyYWNlX3ByaW50ayA+IGl0ZXJfY3RybCAKKy0gKiBlY2hvIDEgPiB0cmFjaW5nX2VuYWJsZWQKKysgKiBlY2hvIDEgPiB0cmFjaW5nX29uCisgICovCisgCXJldCA9IHN5c3RlbSgiL2Jpbi9tb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL3N5cy9rZXJuZWwvZGVidWcvIik7CisgCWlmICghcmV0KSAKKyAJCXJldHVybiAtMTsKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlciIsICJmc3luYyIpOwkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9pdGVyX2N0cmwiLCAiZnRyYWNlX3ByaW50ayIpOwkKKy0Jd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMSIpOworKwl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMSIpOworIH0KKyAKKyBpbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyB7CistCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkIiwgIjAiKTsKKysJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjAiKTsKKyB9CisgCisgCitAQCAtMzM5LDggKzMzOSw4IEBACisgCQlpZiAoY3VyZHVyYXRpb24gPiA1KQorIAkJCWN1cmR1cmF0aW9uID0gNTsKKyAJCS8qIGNsZWFyIHRoZSBmdHJhY2UgYnVmZmVyICovCistCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIwIik7CistCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIxIik7CisrCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMCIpOworKwkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjEiKTsKKyAJCWtleSA9IHNlbGVjdCgxLCAmcmZkcywgTlVMTCwgTlVMTCwgJmVuZCk7CisgCQlwYXJzZV9mdHJhY2UoKTsKKyAJCXByaW50X2dsb2JhbF9saXN0KCk7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YyMTdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUub3JpZyBiL01ha2VmaWxlCitpbmRleCAxNmEyMzY5Li5mYTc5N2EyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUub3JpZworKysrIGIvTWFrZWZpbGUKK0BAIC0xLDEwICsxLDExIEBACistIyBGSVhNRTogVXNlIGF1dG9jb25mID8KKy1IQVNfR1RLX0dVSSA9IDEKKysjIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKysjIFNpZ25lZC1vZmYtYnk6IEphY2sgTWl0Y2hlbGwgPGphY2subWl0Y2hlbGxAZGJicm9hZGNhc3QuY28udWs+CisgCisgREVTVERJUiA9CisgU0JJTkRJUiA9IC91c3Ivc2JpbgorIFhDRkxBR1MgPSAtVyAgLWcgYHBrZy1jb25maWcgLS1jZmxhZ3MgZ2xpYi0yLjBgIC1EX0ZPUlRJRllfU09VUkNFPTIgLVduby1zaWduLWNvbXBhcmUKKy1MREYgPSAtV2wsLS1hcy1uZWVkZWQgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAgIC1sbmN1cnNlc3cgCisrTERGID0gLVdsLC0tYXMtbmVlZGVkIGBwa2ctY29uZmlnIC0tbGlicyBnbGliLTIuMGAgICAtbG5jdXJzZXMKKytDQyA/PSBnY2MKKyAKKyBPQkpTPSBsYXRlbmN5dG9wLm8gdGV4dF9kaXNwbGF5Lm8gdHJhbnNsYXRlLm8gZnN5bmMubworIAorQEAgLTI2LDE2ICsyNywxNyBAQCBlbmRpZgorIAorICMgV2Ugd3JpdGUgZXhwbGljaXR5IHRoaXMgImltcGxpY2l0IHJ1bGUiCisgJS5vIDogJS5jCistCWdjYyAtYyAkKENGTEFHUykgJChYQ0ZMQUdTKSAkPCAtbyAkQAorKwkkKENDKSAtYyAkKENGTEFHUykgJChYQ0ZMQUdTKSAkPCAtbyAkQAorIAorIGxhdGVuY3l0b3A6ICAkKE9CSlMpIGxhdGVuY3l0b3AuaCBNYWtlZmlsZQorLQlnY2MgJChDRkxBR1MpICQoT0JKUykgJChMREYpIC1vIGxhdGVuY3l0b3AgCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKE9CSlMpICQoTERGKSAtbyBsYXRlbmN5dG9wCisgCisgY2xlYW46CisgCXJtIC1mICp+IGxhdGVuY3l0b3AgREVBREpPRSAqLm8KKyAKKyBpbnN0YWxsOiBsYXRlbmN5dG9wCisgCW1rZGlyIC1wICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AKKysJbWtkaXIgLXAgJChERVNURElSKS8kKFNCSU5ESVIpCisgCWluc3RhbGwgLW0gMDY0NCBsYXRlbmN5dG9wLnRyYW5zICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC50cmFucworIAlpbnN0YWxsIC1tIDA2NDQgKi5wbmcgJChERVNURElSKS91c3Ivc2hhcmUvbGF0ZW5jeXRvcC8KKyAJaW5zdGFsbCAtbSAwNzU1IGxhdGVuY3l0b3AgJChERVNURElSKSQoU0JJTkRJUikvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3BfMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWYxYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkxpbnV4IHRvb2wgZm9yIG1lYXN1cmluZyBhbmQgZml4aW5nIGxhdGVuY3kiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxhdGVuY3l0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xhdGVuY3l0b3AuYztlbmRsaW5lPTIzO21kNT1lZTllYTliMTQxNTM1NmU1NzM0YWRhZDRhODdkYzdmYSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmludGwgbmN1cnNlcyBnbGliLTIuMCIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzLyR7QlBOfS8ke0JQfS50YXIuZ3ovNzNiYjMzNzFjNmVlMGIwZTY4ZTI1Mjg5MDI3ZTg2NWMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgIGZpbGU6Ly9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzNiYjMzNzFjNmVlMGIwZTY4ZTI1Mjg5MDI3ZTg2NWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWU3ZjcyZmJlYTdiZDkxOGU3MTIxMmExZWFiYWFkODQ4OGQyYzYwMjIwNWQyZTNjOTVkNjJjZDU3ZTkyMDNlZiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICIsLGd0aysiCisKK0VYVFJBX09FTUFLRV9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICdIQVNfR1RLX0dVST0xJywgJycsIGQpfSIKKworI0NGTEFHUyArPSAiJHtMREZMQUdTfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9ICR7RVhUUkFfT0VNQUtFX1h9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5YTdmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvMDAwMS1NYWtlZmlsZS1BZGQtTERGTEFHUy12YXJpYWJsZS10by1TTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDI3MmE4YTA2OWE4ZjVmMDZhMWU1ZGZhMGVmMTJmNWY5Mjk4NDcyOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOb29yIDxub29yX2Foc2FuQG1lbnRvci5jb20+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDE1IDIwOjU0OjAwICswNTAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBBZGQgTERGTEFHUyB2YXJpYWJsZSB0byBTTERGTEFHUy4KKworKiBBZGQgTERGTEFHUyB2YXJpYWJsZSB0byBTTERGTEFHUyBzbyB0aGF0IGV4dHJhIGxpbmtlcgorICBmbGFncyBjYW4gYmUgc2VudCB2aWEgdGhpcyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW3BlcmZtb24yLWxpYnBmbTQtY29tbWl0c0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdCisKK1NpZ25lZC1vZmYtYnk6IE5vb3IgQWhzYW4gPG5vb3JfYWhzYW5AbWVudG9yLmNvbT4KKy0tLQorIGxpYi9NYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQoraW5kZXggMWNjODc2NS4uNGJkOTJlZiAxMDA2NDQKKy0tLSBhL2xpYi9NYWtlZmlsZQorKysrIGIvbGliL01ha2VmaWxlCitAQCAtMTg3LDcgKzE4Nyw3IEBAIENGTEFHUyArPSAtRENPTkZJR19QRk1MSUJfQ0VMTAorIGVuZGlmCisgCisgaWZlcSAoJChTWVMpLExpbnV4KQorLVNMREZMQUdTPS1zaGFyZWQgLVdsLC1zb25hbWUgLVdsLCQoVkxJQlBGTSkKKytTTERGTEFHUz0kKExERkxBR1MpIC1zaGFyZWQgLVdsLC1zb25hbWUgLVdsLCQoVkxJQlBGTSkKKyBTTElCUEZNPWxpYnBmbS5zby4kKFZFUlNJT04pLiQoUkVWSVNJT04pLiQoQUdFKQorIFZMSUJQRk09bGlicGZtLnNvLiQoVkVSU0lPTikKKyBTT0xJQkVYVD1zbworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGZkYTkwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9saWJwZm00XzQuNi4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiTW9uaXRvcmluZyB0b29scyBleHBsb2l0aW5nIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50cyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBhIGxpYnJhcnksIGNhbGxlZCBsaWJwZm00IHdoaWNoIGlzIHVzZWQgdG8gZGV2ZWxvcCBcCittb25pdG9yaW5nIHRvb2xzIGV4cGxvaXRpbmcgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZXZlbnRzIHN1Y2ggYXMgdGhvc2UgXAorcHJvdmlkZWQgYnkgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZiBtb2Rlcm4gcHJvY2Vzc29ycy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGVyZm1vbjIuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNDQ4MjImYXRpZD03NTk5NTMmc291cmNlPW5hdmJhciIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZGU0ODhmM2JkNDQyNGUzMDhlMmUzOTljYjk5Yzc4OCIKKworU0VDVElPTiA9ICJkZXZlbCIKKworQ09NUEFUSUJMRV9IT1NUID0gInBvd2VycGM2NCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3BlcmZtb24yLyR7QlBOfS9saWJwZm0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUwNzdiOTAyMjQ0MGU0OTUxZDk2ZjJkMGU3M2JkNDg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhYjFlNWIwNDcyNTUwZjkwMzdhODgwMDgzNGY2YmMzYjkyNzY5MDA3MGY2OWZhYzBiNjcyODRiNGIwNWZkNWYiCisKK0VYVFJBX09FTUFLRSA9ICJERVNURElSPVwiJHtEfVwiIFBSRUZJWD1cIiR7cHJlZml4fVwiIExJQkRJUj1cIiR7bGliZGlyfVwiIExEQ09ORklHPVwidHJ1ZVwiIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiBBUkNIPVwicG93ZXJwY1wiIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIEFSQ0g9XCJwb3dlcnBjXCIgQklUTU9ERT1cIjY0XCIiCisKK1MgPSAiJHtXT1JLRElSfS9saWJwZm0tJHtQVn0iCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzOWNhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKQEAgLTAsMCArMSw0NDAgQEAKK1NVTU1BUlkgPSAiRmlybXdhcmUgZmlsZXMgZm9yIHVzZSB3aXRoIExpbnV4IGtlcm5lbCIKK1NFQ1RJT04gPSAia2VybmVsIgorCitMSUNFTlNFID0gIlwKKyAgICBGaXJtd2FyZS1BYmlsaXMgXAorICAgICYgRmlybXdhcmUtYWdlcmUgXAorICAgICYgRmlybXdhcmUtYW1kLXVjb2RlIFwKKyAgICAmIEZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCBcCisgICAgJiBGaXJtd2FyZS1jYTAxMzIgXAorICAgICYgRmlybXdhcmUtY2hlbHNpb19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1jdzEyMDAgXAorICAgICYgRmlybXdhcmUtZGliMDcwMCBcCisgICAgJiBGaXJtd2FyZS1lbmVfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtZndfc3N0XzBmMjggXAorICAgICYgRmlybXdhcmUtZ283MDA3IFwKKyAgICAmIEZpcm13YXJlLWkyNDAwbSBcCisgICAgJiBGaXJtd2FyZS1pYnRfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtaXQ5MTN4IFwKKyAgICAmIEZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtSW50Y1NTVDIgXAorICAgICYgRmlybXdhcmUtTWFydmVsbCBcCisgICAgJiBGaXJtd2FyZS1td2w4MzM1IFwKKyAgICAmIEZpcm13YXJlLW15cmkxMGdlX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLU9MUEMgXAorICAgICYgRmlybXdhcmUtcGhhbmZ3IFwKKyAgICAmIEZpcm13YXJlLXFhdF9kaDg5NXhjY19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1xbGEyeHh4IFwKKyAgICAmIEZpcm13YXJlLXI4YTc3OXhfdXNiMyBcCisgICAgJiBGaXJtd2FyZS1yYWRlb24gXAorICAgICYgRmlybXdhcmUtcmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1yYWxpbmstZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS10ZGE3NzA2LWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSBcCisgICAgJiBGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS12aWFfdnQ2NjU2IFwKKyAgICAmIEZpcm13YXJlLXdsMTI1MSBcCisgICAgJiBGaXJtd2FyZS14YzQwMDAgXAorICAgICYgRmlybXdhcmUteGM1MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMGMgXAorICAgICYgRmlybXdhcmUtc2lhbm8gXAorIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vTElDRU5DRS5BYmlsaXM7bWQ1PWI1ZWUzZjQxMDc4MGU1NjcxMWFkNDhlYWRjMjJiOGJjIFwKKyAgICBmaWxlOi8vTElDRU5DRS5hZ2VyZTttZDU9YWYwMTMzZGU2YjRhOWIyNTIyZGVmZDVmMTg4YWZkMzEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmF0aGVyb3NfZmlybXdhcmU7bWQ1PTMwYTE0Yzc4MjNiZWVkYWM5ZmEzOWM2NGZkZDAxYTEzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5icm9hZGNvbV9iY200M3h4O21kNT0zMTYwYzE0ZGY3MjI4ODkxYjg2ODA2MGUxOTUxZGZiYyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuY2EwMTMyO21kNT0yMDliMzNlNjZlZTViZTA0NjFmMTNkMzFkYTM5MjE5OCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuY2hlbHNpb19maXJtd2FyZTttZDU9ODE5YWE4YzNmYTQ1M2YxYjI1OGVkOGQxNjhhOWQ5MDMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmN3MTIwMDttZDU9ZjBmNzcwODY0ZTdhODQ0NGE1YzVhYTlkMTJhM2E3ZWQgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmVuZV9maXJtd2FyZTttZDU9ZWQ2N2YwZjYyZjhmNzk4MTMwYzI5NjcyMGI3ZDM5MjEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmZ3X3NzdF8wZjI4O21kNT02MzUzOTMxYzk4OGFkNTI4MThhZTczM2FjNjFjZDI5MyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuZ283MDA3O21kNT1jMGJiOWY2YWFhYmE1NWIwNTI5ZWU5YjMwYWE2NmJlYiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaTI0MDBtO21kNT0xNGI5MDE5NjllMjNjNDE4ODEzMjdjMGQ5ZTRiN2QzNiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaWJ0X2Zpcm13YXJlO21kNT1mZGJlZTFkZGZlMGZiN2FiMGIyZmNkNmI0NTRhMzY2YiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaXQ5MTN4O21kNT0xZmJmNzI3YmZiNmE5NDk4MTBjNGRiZmE3ZTZjZTRmOCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaXdsd2lmaV9maXJtd2FyZTttZDU9M2ZkODQyOTExZWE5M2MyOWNkMzI2NzlhYTIzZTFjODggXAorICAgIGZpbGU6Ly9MSUNFTkNFLkludGNTU1QyO21kNT05ZTdkOGJlYTc3NjEyZDdjYzdkOWU5YjU0YjYyMzA2MiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuTWFydmVsbDttZDU9OWRkZWExNzM0YTRiYWYzYzc4ZDg0NTE1MWY0MmEzN2EgXAorICAgIGZpbGU6Ly9MSUNFTkNFLm13bDgzMzU7bWQ1PTlhNjI3MWVlMGU2NDQ0MDRiMmZmM2M2MWZkMDcwOTgzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZTttZDU9NDJlMzJmYjg5ZjZiOTU5Y2EyMjJlMjVhYzhkZjhmZWQgXAorICAgIGZpbGU6Ly9MSUNFTkNFLk9MUEM7bWQ1PTViOTE3ZjlkOGMwNjE5OTFiZTRmNmY1ZjEwODcxOWNkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5waGFuZnc7bWQ1PTk1NGRjZWMwZTA1MWY5NDA5ODEyYjU2MWVhNzQzYmZhIFwKKyAgICBmaWxlOi8vTElDRU5DRS5xYXRfZGg4OTV4Y2NfZmlybXdhcmU7bWQ1PTllN2Q4YmVhNzc2MTJkN2NjN2Q5ZTliNTRiNjIzMDYyIFwKKyAgICBmaWxlOi8vTElDRU5DRS5xbGEyeHh4O21kNT1mNWNlODUyOWVjNWMxN2NiN2Y5MTFkMjcyMWQ5MGU5MSBcCisgICAgZmlsZTovL0xJQ0VOQ0UucjhhNzc5eF91c2IzO21kNT00YzE2NzE2NTYxNTMwMjVkNzA3NjEwNWE1ZGE3ZTQ5OCBcCisgICAgZmlsZTovL0xJQ0VOQ0UucmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZTttZDU9NzI4ZjFhODVmZDUzZmQ2N2ZhOGQ3YWZiMDgwYmM0MzUgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQ7bWQ1PWFiMmMyNjkyNzdjNDU0NzZmYjQ0OTY3MzkxMWEyZGZkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dDttZDU9MDBkMDZjZmQzZWRkZDVhMjY5ODk0OGVhZDJhZDU0YTUgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnRkYTc3MDYtZmlybXdhcmUudHh0O21kNT04MzU5OTdjZjVlM2MxMzFkMGRkZGQ2OTVjN2Q5MTAzZSBcCisgICAgZmlsZTovL0xJQ0VOQ0UudGktY29ubmVjdGl2aXR5O21kNT0xODZlN2E0M2NmNmMyNzQyODNhZDgxMjcyY2EyMThlYSBcCisgICAgZmlsZTovL0xJQ0VOQ0UudWVhZ2xlLWF0bTQtZmlybXdhcmU7bWQ1PTRlZDdlYTZiNTA3Y2NjNTgzYjlkNTk0NDE3NzE0MTE4IFwKKyAgICBmaWxlOi8vTElDRU5DRS52aWFfdnQ2NjU2O21kNT1lNDE1OTY5NGNiYTQyZDQzNzdhOTEyZTc4YTZlODUwZiBcCisgICAgZmlsZTovL0xJQ0VOQ0Uud2wxMjUxO21kNT1hZDNmODE5MjJiYjllMTk3MDE0YmIxODcyODlkM2I1YiBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM0MDAwO21kNT0wZmY1MWQyZGM0OWZjZTA0ODE0YzkxNTUwODEwOTJmMCBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM1MDAwO21kNT0xZTE3MGMxMzE3NTMyM2MzMmM3ZjRkMDk5OGQ1M2Y2NiBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM1MDAwYzttZDU9MTJiMDJlZmEzMDQ5ZGI2NWQ1MjRhZWI0MThkZDg3Y2EgXAorICAgIGZpbGU6Ly9MSUNFTlNFLmFtZC11Y29kZTttZDU9M2EwZGU0NTEyNTNjYzFlZGJmMzBhM2M2MjFlZmZlZTMgXAorICAgIGZpbGU6Ly9MSUNFTlNFLmRpYjA3MDA7bWQ1PWY3NDExODI1YzhhNTU1YTFhM2U1ZWFiOWNhNzczNDMxIFwKKyAgICBmaWxlOi8vTElDRU5TRS5yYWRlb247bWQ1PTZjN2Y5N2M2YzYyYmRkOTU5NmQwMjM4YmIyMDUxMThjIFwKKyAgICBmaWxlOi8vTElDRU5DRS5zaWFubzttZDU9NjAyYzc5YWUzZjk4ZjFlNzNkODgwZmQ5Zjk0MGE0MTggXAorIgorCisjIFRoZXNlIGFyZSBub3QgY29tbW9uIGxpY2Vuc2VzLCBzZXQgTk9fR0VORVJJQ19MSUNFTlNFIGZvciB0aGVtCisjIHNvIHRoYXQgdGhlIGxpY2Vuc2UgZmlsZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBmZXRjaGVkIHNvdXJjZQorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLUFiaWxpc10gPSAiTElDRU5DRS5BYmlsaXMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYWdlcmVdID0gIkxJQ0VOQ0UuYWdlcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZV0gPSAiTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWJyb2FkY29tX2JjbTQzeHhdID0gIkxJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jYTAxMzJdID0gIkxJQ0VOQ0UuY2EwMTMyIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWNoZWxzaW9fZmlybXdhcmVdID0gIkxJQ0VOQ0UuY2hlbHNpb19maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jdzEyMDBdID0gIkxJQ0VOQ0UuY3cxMjAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWVuZV9maXJtd2FyZV0gPSAiTElDRU5DRS5lbmVfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZndfc3N0XzBmMjhdID0gIkxJQ0VOQ0UuZndfc3N0XzBmMjgiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZ283MDA3XSA9ICJMSUNFTkNFLmdvNzAwNyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pMjQwMG1dID0gIkxJQ0VOQ0UuaTI0MDBtIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWlidF9maXJtd2FyZV0gPSAiTElDRU5DRS5pYnRfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaXQ5MTN4XSA9ICJMSUNFTkNFLml0OTEzeCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlXSA9ICJMSUNFTkNFLml3bHdpZmlfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtSW50Y1NTVDJdID0gIkxJQ0VOQ0UuSW50Y1NTVDIiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtTWFydmVsbF0gPSAiTElDRU5DRS5NYXJ2ZWxsIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLW13bDgzMzVdID0gIkxJQ0VOQ0UubXdsODMzNSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1teXJpMTBnZV9maXJtd2FyZV0gPSAiTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1PTFBDXSA9ICJMSUNFTkNFLk9MUEMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcGhhbmZ3XSA9ICJMSUNFTkNFLnBoYW5mdyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1xYXRfZGg4OTV4Y2NfZmlybXdhcmVdID0gIkxJQ0VOQ0UucWF0X2RoODk1eGNjX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXFsYTJ4eHhdID0gIkxJQ0VOQ0UucWxhMnh4eCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yOGE3Nzl4X3VzYjNdID0gIkxJQ0VOQ0UucjhhNzc5eF91c2IzIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmVdID0gIkxJQ0VOQ0UucmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yYWxpbmstZmlybXdhcmVdID0gIkxJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlXSA9ICJMSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXRkYTc3MDYtZmlybXdhcmVdID0gIkxJQ0VOQ0UudGRhNzcwNi1maXJtd2FyZS50eHQiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdGktY29ubmVjdGl2aXR5XSA9ICJMSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZV0gPSAiTElDRU5DRS51ZWFnbGUtYXRtNC1maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS12aWFfdnQ2NjU2XSA9ICJMSUNFTkNFLnZpYV92dDY2NTYiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtd2wxMjUxXSA9ICJMSUNFTkNFLndsMTI1MSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzQwMDBdID0gIkxJQ0VOQ0UueGM0MDAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNTAwMF0gPSAiTElDRU5DRS54YzUwMDAiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM1MDAwY10gPSAiTElDRU5DRS54YzUwMDBjIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWFtZC11Y29kZV0gPSAiTElDRU5TRS5hbWQtdWNvZGUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZGliMDcwMF0gPSAiTElDRU5TRS5kaWIwNzAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJhZGVvbl0gPSAiTElDRU5TRS5yYWRlb24iCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtc2lhbm9dID0gIkxJQ0VOQ0Uuc2lhbm8iCisKK1NSQ1JFViA9ICI3NWNjM2VmOGJhNjcxMmZkNzJjMDczYjE3YTc5MDI4MjEzNmNjNzQzIgorUEUgPSAiMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZmlybXdhcmUvbGludXgtZmlybXdhcmUuZ2l0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGFsbGFyY2ggdXBkYXRlLWFsdGVybmF0aXZlcworCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19jb21waWxlKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICAke0R9L2xpYi9maXJtd2FyZS8KKwljcCAtciAqICR7RH0vbGliL2Zpcm13YXJlLworCisJIyBBdm9pZCBNYWtlZmlsZSB0byBiZSBkZXBsb3llZAorCXJtICR7RH0vbGliL2Zpcm13YXJlL01ha2VmaWxlCisKKwkjIFJlbW92ZSB1bmJ1aWxkIGZpcm13YXJlIHdoaWNoIG5lZWRzIGNtYWtlIGFuZCBiYXNoCisJcm0gJHtEfS9saWIvZmlybXdhcmUvY2FybDkxNzBmdyAtcmYKKworCSMgUmVtb3ZlIHBvaW50bGVzcyBiYXNoIHNjcmlwdAorCXJtICR7RH0vbGliL2Zpcm13YXJlL2NvbmZpZ3VyZQorCisJIyBMaWJlcnRhcyBzZDg2ODYKKwlsbiAtc2YgbGliZXJ0YXMvc2Q4Njg2X3Y5LmJpbiAke0R9L2xpYi9maXJtd2FyZS9zZDg2ODYuYmluCisJbG4gLXNmIGxpYmVydGFzL3NkODY4Nl92OV9oZWxwZXIuYmluICR7RH0vbGliL2Zpcm13YXJlL3NkODY4Nl9oZWxwZXIuYmluCisKKwkjIGZpeHVwIHdsMTJ4eCBsb2NhdGlvbiwgYWZ0ZXIgMi42LjM3IHRoZSBrZXJuZWwgc2VhcmNoZXMgYSBkaWZmZXJlbnQgbG9jYXRpb24gZm9yIGl0CisJKCBjZCAke0R9L2xpYi9maXJtd2FyZSA7IGxuIC1zZiB0aS1jb25uZWN0aXZpdHkvKiAuICkKK30KKworCitQQUNLQUdFUyA9KyAiJHtQTn0tcmFsaW5rLWxpY2Vuc2UgJHtQTn0tcmFsaW5rIFwKKyAgICAgICAgICAgICAke1BOfS1yYWRlb24tbGljZW5zZSAke1BOfS1yYWRlb24gXAorICAgICAgICAgICAgICR7UE59LW1hcnZlbGwtbGljZW5zZSAke1BOfS1zZDg2ODYgJHtQTn0tc2Q4Nzg3ICR7UE59LXNkODc5NyBcCisgICAgICAgICAgICAgJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UgJHtQTn0td2wxMnh4ICR7UE59LXdsMTh4eCBcCisgICAgICAgICAgICAgJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgJHtQTn0tdnQ2NjU2IFwKKyAgICAgICAgICAgICAke1BOfS1ydGwtbGljZW5zZSAke1BOfS1ydGw4MTkyY3UgJHtQTn0tcnRsODE5MmNlICR7UE59LXJ0bDgxOTJzdSBcCisgICAgICAgICAgICAgJHtQTn0tYnJvYWRjb20tbGljZW5zZSAke1BOfS1iY200MzI5ICR7UE59LWJjbTQzMzAgJHtQTn0tYmNtNDMzNCAke1BOfS1iY200MzU0IFwKKyAgICAgICAgICAgICAke1BOfS1hdGhlcm9zLWxpY2Vuc2UgJHtQTn0tYXI5MTcwICR7UE59LWFyM2sgJHtQTn0tYXRoNmsgJHtQTn0tYXRoOWsgXAorICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLWxpY2Vuc2UgJHtQTn0taXdsd2lmaS0xMzUtNiBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS0zMTYwLTcgJHtQTn0taXdsd2lmaS0zMTYwLTggJHtQTn0taXdsd2lmaS0zMTYwLTkgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjAwMC00ICR7UE59LWl3bHdpZmktNjAwMGcyYS01ICR7UE59LWl3bHdpZmktNjAwMGcyYS02IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTYwMDBnMmItNSAke1BOfS1pd2x3aWZpLTYwMDBnMmItNiBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDUwLTQgJHtQTn0taXdsd2lmaS02MDUwLTUgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNzI2MC03ICR7UE59LWl3bHdpZmktNzI2MC04ICR7UE59LWl3bHdpZmktNzI2MC05IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTcyNjUtOCAke1BOfS1pd2x3aWZpLTcyNjUtOSBcCisgICAgICAgICAgICAgXAorICAgICAgICAgICAgICR7UE59LWxpY2Vuc2UgXAorICAgICAgICAgICAgICIKKworIyBGb3IgYXRoZXJvcworTElDRU5TRV8ke1BOfS1hcjkxNzAgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tYXIzayA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1hdGg2ayA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1hdGg5ayA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorCitGSUxFU18ke1BOfS1hdGhlcm9zLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLmF0aGVyb3NfZmlybXdhcmUiCitGSUxFU18ke1BOfS1hcjkxNzAgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hcjkxNzAqLmZ3IFwKKyIKK0ZJTEVTXyR7UE59LWFyM2sgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hcjNrIFwKKyIKK0ZJTEVTXyR7UE59LWF0aDZrID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXRoNmsgXAorIgorRklMRVNfJHtQTn0tYXRoOWsgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hcjkyNzEuZncgXAorICAvbGliL2Zpcm13YXJlL2FyNzAxMCouZncgXAorICAvbGliL2Zpcm13YXJlL2h0Y185MjcxLmZ3IFwKKyAgL2xpYi9maXJtd2FyZS9odGNfNzAxMC5mdyBcCisiCisKK1JERVBFTkRTXyR7UE59LWFyOTE3MCArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYXIzayArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYXRoNmsgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWF0aDlrICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCisKKyMgRm9yIHJhbGluaworTElDRU5TRV8ke1BOfS1yYWxpbmsgPSAiRmlybXdhcmUtcmFsaW5rLWZpcm13YXJlIgorCitGSUxFU18ke1BOfS1yYWxpbmstbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dCIKK0ZJTEVTXyR7UE59LXJhbGluayA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0Ki5iaW4gXAorIgorCitSREVQRU5EU18ke1BOfS1yYWxpbmsgKz0gIiR7UE59LXJhbGluay1saWNlbnNlIgorCisjIEZvciByYWRlb24KK0xJQ0VOU0VfJHtQTn0tcmFkZW9uID0gIkZpcm13YXJlLXJhZGVvbiIKKworRklMRVNfJHtQTn0tcmFkZW9uLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTlNFLnJhZGVvbiIKK0ZJTEVTXyR7UE59LXJhZGVvbiA9ICIgXAorICAvbGliL2Zpcm13YXJlL3JhZGVvbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXJhZGVvbiArPSAiJHtQTn0tcmFkZW9uLWxpY2Vuc2UiCisKKyMgRm9yIG1hcnZlbGwKK0xJQ0VOU0VfJHtQTn0tc2Q4Njg2ID0gIkZpcm13YXJlLU1hcnZlbGwiCitMSUNFTlNFXyR7UE59LXNkODc4NyA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgorTElDRU5TRV8ke1BOfS1zZDg3OTcgPSAiRmlybXdhcmUtTWFydmVsbCIKKworRklMRVNfJHtQTn0tbWFydmVsbC1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5NYXJ2ZWxsIgorRklMRVNfJHtQTn0tc2Q4Njg2ID0gIiBcCisgIC9saWIvZmlybXdhcmUvbGliZXJ0YXMvc2Q4Njg2X3Y5KiBcCisgIC9saWIvZmlybXdhcmUvc2Q4Njg2KiBcCisiCitGSUxFU18ke1BOfS1zZDg3ODcgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9tcnZsL3NkODc4N191YXBzdGEuYmluIFwKKyIKK0ZJTEVTXyR7UE59LXNkODc5NyA9ICIgXAorICAvbGliL2Zpcm13YXJlL21ydmwvc2Q4Nzk3X3VhcHN0YS5iaW4gXAorIgorCitSREVQRU5EU18ke1BOfS1zZDg2ODYgKz0gIiR7UE59LW1hcnZlbGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXNkODc4NyArPSAiJHtQTn0tbWFydmVsbC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tc2Q4Nzk3ICs9ICIke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UiCisKKyMgRm9yIHJ0bAorTElDRU5TRV8ke1BOfS1ydGw4MTkyY3UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tcnRsODE5MmNlID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LXJ0bDgxOTJzdSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgorCitGSUxFU18ke1BOfS1ydGwtbGljZW5zZSA9ICIgXAorICAvbGliL2Zpcm13YXJlL0xJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQgXAorIgorRklMRVNfJHtQTn0tcnRsODE5MmN1ID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnRsd2lmaS9ydGw4MTkyY3Vmdy5iaW4gXAorIgorRklMRVNfJHtQTn0tcnRsODE5MmNlID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiBcCisiCitGSUxFU18ke1BOfS1ydGw4MTkyc3UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydGx3aWZpL3J0bDg3MTJ1LmJpbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXJ0bDgxOTJjZSArPSAiJHtQTn0tcnRsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1ydGw4MTkyY3UgKz0gIiR7UE59LXJ0bC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tcnRsODE5MnN1ID0gIiR7UE59LXJ0bC1saWNlbnNlIgorCisjIEZvciB0aS1jb25uZWN0aXZpdHkKK0xJQ0VOU0VfJHtQTn0td2wxMnh4ID0gIkZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSIKK0xJQ0VOU0VfJHtQTn0td2wxOHh4ID0gIkZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSIKKworRklMRVNfJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSIKK0ZJTEVTXyR7UE59LXdsMTJ4eCA9ICIgXAorICAvbGliL2Zpcm13YXJlL3dsMTIqIFwKKyAgL2xpYi9maXJtd2FyZS9USSogXAorICAvbGliL2Zpcm13YXJlL3RpLWNvbm5lY3Rpdml0eSBcCisiCitGSUxFU18ke1BOfS13bDE4eHggPSAiIFwKKyAgL2xpYi9maXJtd2FyZS93bDE4KiBcCisgIC9saWIvZmlybXdhcmUvVEkqIFwKKyAgL2xpYi9maXJtd2FyZS90aS1jb25uZWN0aXZpdHkgXAorIgorCitSREVQRU5EU18ke1BOfS13bDEyeHggPSAiJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS13bDE4eHggPSAiJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UiCisKKyMgRm9yIHZ0NjY1NgorTElDRU5TRV8ke1BOfS12dDY2NTYgPSAiRmlybXdhcmUtdmlhX3Z0NjY1NiIKKworRklMRVNfJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnZpYV92dDY2NTYiCitGSUxFU18ke1BOfS12dDY2NTYgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS92bnR3dXNiLmZ3IFwKKyIKKworUkRFUEVORFNfJHtQTn0tdnQ2NjU2ID0gIiR7UE59LXZ0NjY1Ni1saWNlbnNlIgorCisjIEZvciBicm9hZGNvbQorIworIyBXQVJOSU5HOiBUaGUgQUxURVJOQVRJVkVfKiB2YXJpYWJsZXMgYXJlIG5vdCB1c2luZyAke1BOfSBiZWNhdXNlIG9mCisjIGEgYnVnIGluIGJpdGJha2U7IHdoZW4gdGhpcyBpcyBmaXhlZCBhbmQgYml0YmFrZSBsZWFybnMgaG93IHRvIHByb3BlcgorIyBwYXNzIHZhcmlhYmxlIGZsYWdzIHdpdGggZXhwYW5zaW9uIHdlIGNhbiByZXdvcmsgdGhpcyBwYXRjaC4KKworTElDRU5TRV8ke1BOfS1iY200MzI5ID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCitMSUNFTlNFXyR7UE59LWJjbTQzMzAgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKK0xJQ0VOU0VfJHtQTn0tYmNtNDMzNCA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgorTElDRU5TRV8ke1BOfS1iY200MzU0ID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCisKK0ZJTEVTXyR7UE59LWJyb2FkY29tLWxpY2Vuc2UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9MSUNFTkNFLmJyb2FkY29tX2JjbTQzeHggXAorIgorRklMRVNfJHtQTn0tYmNtNDMyOSA9ICIgXAorICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzI5LXNkaW8uYmluIFwKKyIKK0ZJTEVTXyR7UE59LWJjbTQzMzAgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzMC1zZGlvLmJpbiBcCisiCitGSUxFU18ke1BOfS1iY200MzM0ID0gIiBcCisgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzQtc2Rpby5iaW4gXAorIgorRklMRVNfJHtQTn0tYmNtNDM1NCA9ICIgXAorICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzU0LXNkaW8uYmluIFwKKyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWMtc2Rpby5iaW4iCisKK0FMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzMzQgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMzNFticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzNC1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX2xpbnV4X2Zpcm13YXJlLWJjbTQzNTQgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDM1NFticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDM1NC1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzMjkgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMyOVticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMyOS1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX2xpbnV4LWZpcm13YXJlLWJjbTQzMzAgPSAiYnJjbWZtYWMtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9UQVJHRVRfbGludXgtZmlybXdhcmUtYmNtNDMzMFticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzMC1zZGlvLmJpbiIKKworUkRFUEVORFNfJHtQTn0tYmNtNDMyOSArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWJjbTQzMzAgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1iY200MzM0ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYmNtNDM1NCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKKworIyBGb3IgaXdsd2lmaQorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTEzNS02ICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtNyAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDAtNCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwNTAtNCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwNTAtNSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtNyAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjUtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjUtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorCitGSUxFU18ke1BOfS1pd2x3aWZpLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTEzNS02ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0xMzUtNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktMzE2MC03ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0zMTYwLTcudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTMxNjAtOCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMzE2MC04LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS0zMTYwLTkgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTMxNjAtOS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMC00ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwLTQudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYS01LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmEtNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMGcyYi01ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwZzJiLTUudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYi02LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDUwLTQgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwNTAtNC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjA1MC01ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDUwLTUudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjAtNyA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2MC03LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjYwLTggPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjAtOC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2MC05ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjYwLTkudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjUtOCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2NS04LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjY1LTkgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjUtOS51Y29kZSIKKworUkRFUEVORFNfJHtQTn0taXdsd2lmaS0xMzUtNiAgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTcgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwLTQgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDUwLTQgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDUwLTUgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTcgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjY1LTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjY1LTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorCisjIEZvciBvdGhlciBmaXJtd2FyZXMKKyMgTWF5YmUgc3BsaXQgb3V0IHRvIHNlcGFyYXRlIHBhY2thZ2VzIHdoZW4gbmVlZGVkLgorTElDRU5TRV8ke1BOfSA9ICJcCisgICAgRmlybXdhcmUtQWJpbGlzIFwKKyAgICAmIEZpcm13YXJlLWFnZXJlIFwKKyAgICAmIEZpcm13YXJlLWFtZC11Y29kZSBcCisgICAgJiBGaXJtd2FyZS1jYTAxMzIgXAorICAgICYgRmlybXdhcmUtY2hlbHNpb19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1jdzEyMDAgXAorICAgICYgRmlybXdhcmUtZGliMDcwMCBcCisgICAgJiBGaXJtd2FyZS1lbmVfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtZndfc3N0XzBmMjggXAorICAgICYgRmlybXdhcmUtZ283MDA3IFwKKyAgICAmIEZpcm13YXJlLWkyNDAwbSBcCisgICAgJiBGaXJtd2FyZS1pYnRfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtaXQ5MTN4IFwKKyAgICAmIEZpcm13YXJlLW13bDgzMzUgXAorICAgICYgRmlybXdhcmUtbXlyaTEwZ2VfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtT0xQQyBcCisgICAgJiBGaXJtd2FyZS1waGFuZncgXAorICAgICYgRmlybXdhcmUtcWF0X2RoODk1eGNjX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXFsYTJ4eHggXAorICAgICYgRmlybXdhcmUtcjhhNzc5eF91c2IzIFwKKyAgICAmIEZpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdGRhNzcwNi1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS13bDEyNTEgXAorICAgICYgRmlybXdhcmUteGM0MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDBjIFwKKyIKK0ZJTEVTXyR7UE59LWxpY2Vuc2UgKz0gIi9saWIvZmlybXdhcmUvTElDRU4qIgorRklMRVNfJHtQTn0gKz0gIi9saWIvZmlybXdhcmUvKiIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1saWNlbnNlIgorCisjIE1ha2UgbGludXgtZmlybXdhcmUgZGVwZW5kIG9uIGFsbCBvZiB0aGUgc3BsaXQtb3V0IHBhY2thZ2VzLgorcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGZpcm13YXJlX3BrZ3MgPSBvZS51dGlscy5wYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU19saW51eC1maXJtd2FyZScsICcgJyArICcgJy5qb2luKGZpcm13YXJlX3BrZ3MpKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NmJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMKQEAgLTAsMCArMSw3NSBAQAorU1VNTUFSWSA9ICJTYW5pdGl6ZWQgc2V0IG9mIGtlcm5lbCBoZWFkZXJzIGZvciB0aGUgQyBsaWJyYXJ5J3MgdXNlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgICAgICAgICAgICAgICAgICAgICAgICBQTEVBU0UgUkVBRCAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgWW91J3JlIHByb2JhYmx5IGxvb2tpbmcgaGVyZSB0aGlua2luZyB5b3UgbmVlZCB0byBjcmVhdGUgc29tZSBuZXcgY29weQorIyBvZiBsaW51eC1saWJjLWhlYWRlcnMgc2luY2UgeW91IGhhdmUgeW91ciBvd24gY3VzdG9tIGtlcm5lbC4gVG8gcHV0IAorIyB0aGlzIHNpbXBseSwgeW91IERPIE5PVC4KKyMKKyMgV2h5PyBUaGVzZSBoZWFkZXJzIGFyZSB1c2VkIHRvIGJ1aWxkIHRoZSBsaWJjLiBJZiB5b3UgY3VzdG9taXNlIHRoZSAKKyMgaGVhZGVycyB5b3UgYXJlIGN1c3RvbWlzaW5nIHRoZSBsaWJjIGFuZCB0aGUgbGliYyBiZWNvbWVzIG1hY2hpbmUKKyMgc3BlY2lmaWMuIE1vc3QgcGVvcGxlIGRvIG5vdCBhZGQgY3VzdG9tIGxpYmMgZXh0ZW5zaW9ucyB0byB0aGUga2VybmVsCisjIGFuZCBoYXZlIGEgbWFjaGluZSBzcGVjaWZpYyBsaWJjLgorIworIyBCdXQgeW91IGhhdmUgc29tZSBrZXJuZWwgaGVhZGVycyB5b3UgbmVlZCBmb3Igc29tZSBkcml2ZXI/IFRoYXQgaXMgZmluZQorIyBidXQgZ2V0IHRoZW0gZnJvbSBTVEFHSU5HX0tFUk5FTF9ESVIgd2hlcmUgdGhlIGtlcm5lbCBpbnN0YWxscyBpdHNlbGYuCisjIFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIHVzaW5nIHRoZW0gbWFjaGluZSBzcGVjaWZpYyBidXQgdGhpcyBpcyBtdWNoCisjIGJldHRlciB0aGFuIGhhdmluZyBhIG1hY2hpbmUgc3BlY2lmaWMgQyBsaWJyYXJ5LiBUaGlzIGRvZXMgbWVhbiB5b3VyIAorIyByZWNpcGUgbmVlZHMgYSBERVBFTkRTICs9ICJ2aXJ0dWFsL2tlcm5lbCIgYnV0IGFnYWluLCB0aGF0IGlzIGZpbmUgYW5kCisjIG1ha2VzIHRvdGFsIHNlbnNlLgorIworIyBUaGVyZSBjYW4gYWxzbyBiZSBhIGNhc2Ugd2hlcmUgeW91ciBrZXJuZWwgZXh0cmVtZWx5IG9sZCBhbmQgeW91IHdhbnQKKyMgYW4gb2xkZXIgbGliYyBBQkkgZm9yIHRoYXQgb2xkIGtlcm5lbC4gVGhlIGhlYWRlcnMgaW5zdGFsbGVkIGJ5IHRoaXMKKyMgcmVjaXBlIHNob3VsZCBzdGlsbCBiZSBhIHN0YW5kYXJkIG1haW5saW5lIGtlcm5lbCwgbm90IHlvdXIgb3duIGN1c3RvbSAKKyMgb25lLgorIworIyAtLSBSUAorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBtYWpvciA9IGQuZ2V0VmFyKCJQViIsVHJ1ZSkuc3BsaXQoJy4nKVswXQorICAgIGlmIG1ham9yID09ICIzIjoKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiMy4wIikKKyAgICBlbGlmIG1ham9yID09ICI0IjoKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiNC54IikKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcigiSEVBREVSX0ZFVENIX1ZFUiIsICIyLjYiKQorfQorCitpbmhlcml0IGtlcm5lbC1hcmNoCisKK0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTiA/PSAiYnoyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgva2VybmVsL3Yke0hFQURFUl9GRVRDSF9WRVJ9L2xpbnV4LSR7UFZ9LnRhci4ke0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTn0iCisKK1MgPSAiJHtXT1JLRElSfS9saW51eC0ke1BWfSIKKworZG9fY29uZmlndXJlKCkgeworCW9lX3J1bm1ha2UgYWxsbm9jb25maWcKK30KKworZG9fY29tcGlsZSAoKSB7Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBoZWFkZXJzX2luc3RhbGwgSU5TVEFMTF9IRFJfUEFUSD0ke0R9JHtleGVjX3ByZWZpeH0KKwkjIEtlcm5lbCBzaG91bGQgbm90IGJlIGV4cG9ydGluZyB0aGlzIGhlYWRlcgorCXJtIC1mICR7RH0ke2V4ZWNfcHJlZml4fS9pbmNsdWRlL3Njc2kvc2NzaS5oCisKKwkjIFRoZSAuLmluc3RhbGwuY21kIGNvbmZsaWN0cyBiZXR3ZWVuIHZhcmlvdXMgY29uZmlndXJlIHJ1bnMKKwlmaW5kICR7RH0ke2luY2x1ZGVkaXJ9IC1uYW1lIC4uaW5zdGFsbC5jbWQgfCB4YXJncyBybSAtZgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworI0RFUEVORFMgPSAiY3Jvc3MtbGlua2FnZSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorREVQRU5EUyArPSAidW5pZmRlZi1uYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMS5iYgpAQCAtMCwwICsxLDcgQEAKK0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTiA9ICJ4eiIKKworcmVxdWlyZSBsaW51eC1saWJjLWhlYWRlcnMuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTlkYzBmNjcyOWYzNjQwMGVhODFhYTQxZDYxNGMzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYWY1MWYwODVhYWMxZTFjZWE0ZDAwZGJiZjMwOTNlYWQwN2I1NTFmYzA3YjMxYjJhOTg5YzA1ZjhlYTcyZDlmIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmM4YzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgpAQCAtMCwwICsxLDc2IEBACitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCBEZXZlbG9wbWVudCBTb3VyY2UiCitERVNDUklQVElPTiA9ICJEZXZlbG9wbWVudCBzb3VyY2UgbGludXgga2VybmVsLiBXaGVuIGJ1aWx0LCB0aGlzIHJlY2lwZSBwYWNrYWdlcyB0aGUgXAorc291cmNlIG9mIHRoZSBwcmVmZXJyZWQgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXIgYW5kIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgZnVsbCBrZXJuZWwgXAorZGV2ZWxvcG1lbnQgb3IgZXh0ZXJuYWwgbW9kdWxlIGJ1aWxkcyIKKworU0VDVElPTiA9ICJrZXJuZWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2UKKworIyBXaGlsc3Qgbm90IGEgbW9kdWxlLCB0aGlzIGVuc3VyZXMgd2UgZG9uJ3QgZ2V0IG11bHRpbGliIGV4dGVuZGVkICh3aGljaCB3b3VsZCBtYWtlIG5vIHNlbnNlKQoraW5oZXJpdCBtb2R1bGUtYmFzZQorCisjIFdlIG5lZWQgdGhlIGtlcm5lbCB0byBiZSBzdGFnZWQgKHVucGFja2VkLCBwYXRjaGVkIGFuZCBjb25maWd1cmVkKSBiZWZvcmUKKyMgd2UgY2FuIGdyYWIgdGhlIHNvdXJjZSBhbmQgbWFrZSB0aGUgc291cmNlIHBhY2thZ2UuIFdlIGFsc28gbmVlZCB0aGUgYml0cyBmcm9tCisjICR7Qn0gbm90IHRvIGNoYW5nZSB3aGlsZSB3ZSBpbnN0YWxsLCBzbyB2aXJ0dWFsL2tlcm5lbCBtdXN0IGZpbmlzaCBkb19jb21waWxlLgorZG9faW5zdGFsbFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisjIE5lZWQgdGhlIHNvdXJjZSwgbm90IGp1c3QgdGhlIG91dHB1dCBvZiBwb3B1bGF0ZV9zeXNyb290Citkb19pbnN0YWxsW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19pbnN0YWxsIgorCisjIFRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlLCBleGNlcHQgaW5zdGFsbCB0aGUgc291cmNlIHdoZXJlIHdlIGNhbiBwYWNrYWdlIGl0Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKKyMgRGVmaW5lIHdoZXJlIHRoZSBrZXJuZWwgaGVhZGVycyBhcmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyB3aGVyZQorIyB0aGV5IGFyZSBzdGFnZWQuCitLRVJORUxfU1JDX1BBVEggPSAiL3Vzci9zcmMva2VybmVsIgorUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitCID0gIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKCcke1N9Jyl9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBrZXJuZWxkaXI9JHtEfSR7S0VSTkVMX1NSQ19QQVRIfQorICAgICAgICBpbnN0YWxsIC1kICRrZXJuZWxkaXIKKworICAgICAgICAjCisgICAgICAgICMgQ29weSB0aGUgc3RhZ2luZyBkaXIgc291cmNlIChhbmQgbW9kdWxlIGJ1aWxkIHN1cHBvcnQpIGludG8gdGhlIGRldnNyYyBzdHJ1Y3R1cmUuCisgICAgICAgICMgV2UgY2FuIGtlZXAgdGhpcyBjb3B5IHNpbXBsZSBhbmQgdGFrZSBldmVyeXRoaW5nLCBzaW5jZSBhIHdlJ2xsIGNsZWFuIHVwIGFueSBidWlsZAorICAgICAgICAjIGFydGlmYWN0cyBhZnRlcndhcmRzLCBhbmQgdGhlIGV4dHJhIGkvbyBpcyBub3Qgc2lnbmlmaWNhbnQKKyAgICAgICAgIworICAgICAgICBjZCAke0J9CisgICAgICAgIGZpbmQgLiAtdHlwZSBkIC1uYW1lICcuZ2l0KicgLXBydW5lIC1vIC1wYXRoICcuZGVidWcnIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAka2VybmVsZGlyCisgICAgICAgIGNkICR7U30KKyAgICAgICAgZmluZCAuIC10eXBlIGQgLW5hbWUgJy5naXQqJyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGtlcm5lbGRpcgorCisgICAgICAgICMgRXhwbGljaXRseSBzZXQgS0JVSUxEX09VVFBVVCB0byBlbnN1cmUgdGhhdCB0aGUgaW1hZ2UgZGlyZWN0b3J5IGlzIGNsZWFuZWQgYW5kIG5vdAorICAgICAgICAjIFRoZSBtYWluIGJ1aWxkIGFydGlmYWN0cy4gV2UgY2xlYW4gdGhlIGRpcmVjdG9yeSB0byBhdm9pZCBRQSBlcnJvcnMgb24gbWlzbWF0Y2hlZAorICAgICAgICAjIGFyY2hpdGVjdHVyZSAoc2luY2Ugc2NyaXB0cyBhbmQgaGVscGVycyBhcmUgbmF0aXZlIGZvcm1hdCkuCisgICAgICAgIEtCVUlMRF9PVVRQVVQ9IiRrZXJuZWxkaXIiCisgICAgICAgIG9lX3J1bm1ha2UgLUMgJGtlcm5lbGRpciBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBjbGVhbiBfbXJwcm9wZXJfc2NyaXB0cworCisgICAgICAgICMgQXMgb2YgTGludXgga2VybmVsIHZlcnNpb24gMy4wLjEsIHRoZSBjbGVhbiB0YXJnZXQgcmVtb3ZlcworICAgICAgICAjIGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gd2hpY2ggaXMgcHJlc2VudCBpbgorICAgICAgICAjIEtCVUlMRF9MREZMQUdTX01PRFVMRSwgbWFraW5nIGl0IHJlcXVpcmVkIHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMuCisgICAgICAgIGlmIFsgJHtBUkNIfSA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgbWtkaXIgLXAgJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliLworICAgICAgICAgICAgICAgIGNwICR7Qn0vYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubyAka2VybmVsZGlyL2FyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8KKyAgICAgICAgZmkKKworICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQorfQorIyBFbnN1cmUgd2UgZG9uJ3QgcmFjZSBhZ2FpbnN0ICJtYWtlIHNjcmlwdHMiIGR1cmluZyBjcGlvCitkb19pbnN0YWxsW2xvY2tmaWxlc10gPSAiJHtUTVBESVJ9L2tlcm5lbC1zY3JpcHRzLmxvY2siCisKK1BBQ0tBR0VTID0gImtlcm5lbC1kZXZzcmMiCitGSUxFU18ke1BOfSA9ICIke0tFUk5FTF9TUkNfUEFUSH0iCitSREVQRU5EU18ke1BOfSA9ICJiYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzYTVlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCkBAIC0wLDAgKzEsNzkgQEAKKyMgU3VwcG9ydCBmb3IgZGV2aWNlIHRyZWUgZ2VuZXJhdGlvbgorRklMRVNfa2VybmVsLWRldmljZXRyZWUgPSAiLyR7S0VSTkVMX0lNQUdFREVTVH0vZGV2aWNldHJlZSoiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgZC5hcHBlbmRWYXIoIlBBQ0tBR0VTIiwgIiBrZXJuZWwtZGV2aWNldHJlZSIpCit9CisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJb2VfcnVubWFrZSAke0RUQn0KKwkJZG9uZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvZHRzLyR7RFRCfSIKKwkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC8ke0RUQn0iCisJCQlmaQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiCisJCWRvbmUKKwlmaQorfQorCitkb19kZXBsb3lfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCQlEVEJfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC9kdHMvJHtEVEJ9IgorCQkJaWYgWyAhIC1lICIke0RUQl9QQVRIfSIgXTsgdGhlbgorCQkJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwkJCWZpCisJCQlpbnN0YWxsIC1kICR7REVQTE9ZRElSfQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7REVQTE9ZRElSfS8ke0RUQl9OQU1FfS5kdGIKKwkJCWNkICR7REVQTE9ZRElSfQorCQkJbG4gLXNmICR7RFRCX05BTUV9LmR0YiAke0RUQl9TWU1MSU5LX05BTUV9LmR0YgorCQkJY2QgLQorCQlkb25lCisJZmkKK30KKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1kZXZpY2V0cmVlICgpIHsKKwljZCAvJHtLRVJORUxfSU1BR0VERVNUfQorCWZvciBEVEJfRklMRSBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfQorCWRvCisJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCX0ZJTEV9IHwgYXdrIC1GICIuIiAne3ByaW50ICQxfSdgCisJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsIC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7RFRCX0JBU0VfTkFNRX0uZHRiICR7RFRCX0JBU0VfTkFNRX0uZHRiIGRldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS5kdGIgJHtLRVJORUxfUFJJT1JJVFl9IHx8IHRydWUKKwlkb25lCit9CisKK3BrZ19wb3N0cm1fa2VybmVsLWRldmljZXRyZWUgKCkgeworCWNkIC8ke0tFUk5FTF9JTUFHRURFU1R9CisJZm9yIERUQl9GSUxFIGluICR7S0VSTkVMX0RFVklDRVRSRUV9CisJZG8KKwkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJfRklMRX0gfCBhd2sgLUYgIi4iICd7cHJpbnQgJDF9J2AKKwkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLXJlbW92ZSAke0RUQl9CQVNFX05BTUV9LmR0YiBkZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMGU0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJEdW1teSBMaW51eCBrZXJuZWwiCitERVNDUklQVElPTiA9ICJEdW1teSBMaW51eCBrZXJuZWwsIHRvIGJlIHNlbGVjdGVkIGFzIHRoZSBwcmVmZXJyZWQgXAorcHJvdmlkZXIgZm9yIHZpcnR1YWwva2VybmVsIHRvIHNhdGlzZnkgZGVwZW5kZW5jaWVzIGZvciBzaXR1YXRpb25zIFwKK3doZXJlIHlvdSB3aXNoIHRvIGJ1aWxkIHRoZSBrZXJuZWwgZXh0ZXJuYWxseSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0uIgorU0VDVElPTiA9ICJrZXJuZWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0NPUFlJTkcuR1BMO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworUFJPVklERVMgKz0gInZpcnR1YWwva2VybmVsIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLW1vZHVsZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtaW1hZ2UtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWZpcm13YXJlLS4qIgorCitQQUNLQUdFUyArPSAia2VybmVsLW1vZHVsZXMiCitGSUxFU19rZXJuZWwtbW9kdWxlcyA9ICIiCitBTExPV19FTVBUWV9rZXJuZWwtbW9kdWxlcyA9ICIxIgorREVTQ1JJUFRJT05fa2VybmVsLW1vZHVsZXMgPSAiS2VybmVsIG1vZHVsZXMgbWV0YSBwYWNrYWdlIgorCisjQ09NUEFUSUJMRV9NQUNISU5FID0gInlvdXJfbWFjaGluZSIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZmlsZTovL0NPUFlJTkcuR1BMIgorUyA9ICIke1dPUktESVJ9IgorCitkb19jb25maWd1cmUoKSB7CisJOgorfQorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX3NoYXJlZF93b3JrZGlyICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJOgorfQorCitkb19idW5kbGVfaW5pdHJhbWZzKCkgeworCToKK30KKworZG9fZGVwbG95KCkgeworCToKK30KKworYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2RlcGxveQorYWRkdGFzayBkZXBsb3kgYWZ0ZXIgZG9faW5zdGFsbAorYWRkdGFzayBzaGFyZWRfd29ya2RpciBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS9DT1BZSU5HLkdQTApAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU0ODJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgpAQCAtMCwwICsxLDUxIEBACisjIFRoaXMgcmVjaXBlIHRyYWNrcyB0aGUgbGludXgteW9jdG8tZGV2IHJlcG9zaXRvcnkgYXMgaXRzIHVwc3RyZWFtIHNvdXJjZS4KKyMgU2luY2UgdGhpcyB0cmVlIGlzIGZyZXF1ZW50bHkgdXBkYXRlZCwgYW5kIHBlcmlvZGljYWxseSByZWJ1aWx0LCBBVVRPUkVWIGlzCisjIHVzZWQgdG8gdHJhY2sgaXRzIGNvbnRlbnRzLgorIworIyBUaGlzIHJlY2lwZSBpcyBqdXN0IGxpa2Ugb3RoZXIgbGludXgteW9jdG8gdmFyaWFudHMsIHdpdGggdGhlIG9ubHkgZGlmZmVyZW5jZQorIyBiZWluZyB0aGF0IHRvIGF2b2lkIG5ldHdvcmsgYWNjZXNzIGR1cmluZyBpbml0aWFsIHBhcnNpbmcsIHN0YXRpYyBTUkNSRVZzIGFyZQorIyBwcm92aWRlZCBhbmQgb3ZlcnJpZGRlbiBpZiB0aGUgcHJlZmVycmVkIGtlcm5lbCBwcm92aWRlciBpcyBsaW51eC15b2N0by1kZXYuCisjCisjIFRvIGVuYWJsZSB0aGlzIHJlY2lwZSwgc2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiCisKK2luaGVyaXQga2VybmVsCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIHByb3ZpZGUgdGhpcyAuaW5jIHRvIHNldCBzcGVjaWZpYyByZXZpc2lvbnMKK2luY2x1ZGUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LXJldmlzaW9ucy5pbmMKKworIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBuZXR3b3JrIGFjY2VzcyByZXF1aXJlZAorIyBieSB0aGUgdXNlIG9mIEFVVE9SRVYgU1JDUkVWcywgd2hpY2ggYXJlIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZS4KK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9ICJsaW51eC15b2N0by1kZXYiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1kZXYgdG8gZW5hYmxlIGl0IikKK30KKworS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgorS01FVEEgPSAia2VybmVsLW1ldGEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tZGV2LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPW1hc3RlcjtkZXN0c3VmZml4PSR7S01FVEF9IgorCisjIFNldCBkZWZhdWx0IFNSQ1JFVnMuIEJvdGggdGhlIG1hY2hpbmUgYW5kIG1ldGEgU1JDUkVWcyBhcmUgc3RhdGljYWxseSBzZXQKKyMgdG8gdGhlIGtvcmcgdjMuNyB0YWcsIGFuZCBoZW5jZSBwcmV2ZW50IG5ldHdvcmsgYWNjZXNzIGR1cmluZyBwYXJzaW5nLiBJZgorIyBsaW51eC15b2N0by1kZXYgaXMgdGhlIHByZWZlcnJlZCBwcm92aWRlciwgdGhleSB3aWxsIGJlIG92ZXJyaWRkZW4gdG8KKyMgQVVUT1JFViBpbiBmb2xsb3dpbmcgYW5vbnltb3VzIHB5dGhvbiByb3V0aW5lIGFuZCByZXNvbHZlZCB3aGVuIHRoZQorIyB2YXJpYWJsZXMgYXJlIGZpbmFsaXplZC4KK1NSQ1JFVl9tYWNoaW5lID89ICcke0BvZS51dGlscy5jb25kaXRpb25hbCgiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgImxpbnV4LXlvY3RvLWRldiIsICIke0FVVE9SRVZ9IiwgIjI5NTk0NDA0ZDdmZTczY2Q4MGVhYTRlZThjNDNkY2M1Mzk3MGM2MGUiLCBkKX0nCitTUkNSRVZfbWV0YSA/PSAnJHtAb2UudXRpbHMuY29uZGl0aW9uYWwoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsICJsaW51eC15b2N0by1kZXYiLCAiJHtBVVRPUkVWfSIsICIyOTU5NDQwNGQ3ZmU3M2NkODBlYWE0ZWU4YzQzZGNjNTM5NzBjNjBlIiwgZCl9JworCitMSU5VWF9WRVJTSU9OID89ICI0LjItcmMrIgorTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0b2Rldi0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdWFybXxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzZDVjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiCkBAIC0wLDAgKzEsMjggQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIKK0tCUkFOQ0hfcWVtdXBwYyA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydC9xZW11cHBjIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitTUkNSRVZfbWFjaGluZSA/PSAiODI4MTkxNTUyN2JhOGQ3OWU1OTkwNmMwMmYyOGU3YWExMTQyNDcyMyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjVlN2QzNzJlYmMzMjdmMjg2NTZmYzk3MmZhYjU1NjA1ZWVhOGFlYzMiCitTUkNSRVZfbWV0YSA/PSAiM2EwOWIzOGE5ZjUwMTVjNTZkOTlkMTdhYTdjMmYyMDBjNTY2MjQ5YiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE0LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xNC4zNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworTElOVVhfS0VSTkVMX1RZUEUgPSAicHJlZW1wdC1ydCIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2fHFlbXV4ODYtNjR8cWVtdWFybXxxZW11cHBjfHFlbXVtaXBzKSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ4M2MzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpAQCAtMCwwICsxLDI2IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0IgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitTUkNSRVZfbWFjaGluZSA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tZXRhID89ICI0MjlmOWUyZmYwNjQ5YjhjOTM0MTM0NTYyMjU0NWQ4NzRkNWUzMDNhIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0xJTlVYX0tFUk5FTF9UWVBFID0gInByZWVtcHQtcnQiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NnxxZW11eDg2LTY0fHFlbXVhcm18cWVtdXBwY3xxZW11bWlwcykiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyYzgxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIKQEAgLTAsMCArMSwyMyBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9iYXNlIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICIzLjE0LjM2IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitTUkNSRVZfbWFjaGluZSA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tZXRhID89ICIzYTA5YjM4YTlmNTAxNWM1NmQ5OWQxN2FhN2MyZjIwMGM1NjYyNDliIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNThhMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIKQEAgLTAsMCArMSwyMyBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9iYXNlIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICIzLjE5LjUiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21ldGEgPz0gIjEwMTY3MTQ4NjgyNDlkNjRmYzE2NjkyZmQ3Njc5NjcyYjFlZmExN2IiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE5O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NikiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjEyMDVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvYmFzZSIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21ldGEgPz0gIjQyOWY5ZTJmZjA2NDliOGM5MzQxMzQ1NjIyNTQ1ZDg3NGQ1ZTMwM2EiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODYpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQxYTYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpAQCAtMCwwICsxLDUxIEBACitERVNDUklQVElPTiA9ICJZb2N0byBLZXJuZWwiCitTRUNUSU9OID0gImtlcm5lbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3ODEwZmFiNzQ4N2ZiMGFhZDMyN2I3NmYxYmU3Y2Q3IgorCitJTkNfUFIgPSAicjQiCisKK0RFUEVORFMgKz0gInh6LW5hdGl2ZSBiYy1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9hYXJjaDY0ID0gIiBsaWJnY2MiCitLRVJORUxfQ0NfYXBwZW5kX2FhcmNoNjQgPSAiICR7VE9PTENIQUlOX09QVElPTlN9IgorS0VSTkVMX0xEX2FwcGVuZF9hYXJjaDY0ID0gIiAke1RPT0xDSEFJTl9PUFRJT05TfSIKKworIyBBIEtNQUNISU5FIGlzIHRoZSBtYXBwaW5nIG9mIGEgeW9jdG8gJE1BQ0hJTkUgdG8gd2hhdCBpcyBidWlsdAorIyBieSB0aGUga2VybmVsLiBUaGlzIGlzIHR5cGljYWxseSB0aGUgYnJhbmNoIHRoYXQgc2hvdWxkIGJlIGJ1aWx0LAorIyBhbmQgaXQgY2FuIGJlIHNwZWNpZmljIHRvIHRoZSBtYWNoaW5lIG9yIHNoYXJlZAorIyBLTUFDSElORSA9ICJVTkRFRklORUQiCisKK0xJTlVYX0tFUk5FTF9UWVBFID89ICJzdGFuZGFyZCIKKworIyBLTUVUQSA/PSAiIgorS0JSQU5DSCA/PSAibWFzdGVyIgorS01BQ0hJTkUgPz0gIiR7TUFDSElORX0iCitTUkNSRVZfRk9STUFUID89ICJtZXRhX21hY2hpbmUiIAorCisjIExFVkVMUzoKKyMgICAwOiBubyByZXBvcnRpbmcKKyMgICAxOiByZXBvcnQgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpZWQsIGJ1dCBub3QgaW4gdGhlIGZpbmFsIGNvbmZpZworIyAgIDI6IHJlcG9ydCBvcHRpb25zIHRoYXQgYXJlIG5vdCBoYXJkd2FyZSByZWxhdGVkLCBidXQgc2V0IGJ5IGEgQlNQCitLQ09ORl9BVURJVF9MRVZFTCA/PSAiMSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA/PSAiMCIKKworTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0by0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKKworIyBQaWNrIHVwIHNoYXJlZCBmdW5jdGlvbnMKK2luaGVyaXQga2VybmVsCitpbmhlcml0IGtlcm5lbC15b2N0bworcmVxdWlyZSBsaW51eC1kdGIuaW5jCisKK0IgPSAiJHtXT1JLRElSfS9saW51eC0ke1BBQ0tBR0VfQVJDSH0tJHtMSU5VWF9LRVJORUxfVFlQRX0tYnVpbGQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisJaWYgWyAtbiAiJHtLTUVUQX0iIF07IHRoZW4KKwkJcm0gLXJmICR7U1RBR0lOR19LRVJORUxfRElSfS8ke0tNRVRBfQorCWZpCit9CisKKyMgZXh0cmEgdGFza3MKK2FkZHRhc2sga2VybmVsX2xpbmtfdm1saW51eCBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19pbnN0YWxsCithZGR0YXNrIHZhbGlkYXRlX2JyYW5jaGVzIGJlZm9yZSBkb19wYXRjaCBhZnRlciBkb19rZXJuZWxfY2hlY2tvdXQKK2FkZHRhc2sga2VybmVsX2NvbmZpZ2NoZWNrIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmIyZTVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIKQEAgLTAsMCArMSw0MSBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBib2FyZCBzcGVjaWZpYyBicmFuY2hlcworS0JSQU5DSF9xZW11YXJtICA/PSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCitLQlJBTkNIX3FlbXVhcm02NCA/PSAic3RhbmRhcmQvcWVtdWFybTY0IgorS0JSQU5DSF9xZW11bWlwcyA/PSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCitLQlJBTkNIX3FlbXVwcGMgID89ICJzdGFuZGFyZC9xZW11cHBjIgorS0JSQU5DSF9xZW11eDg2ICA/PSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiNDgxNzc0NzkxMmI1YzUwY2U1YzMxZWYyNTY1ODM0MGNhNjE1ZTFiNCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICI2ZWQ3NmVjMjZiMTIwZjY1Zjg1NDdjODYxMmI3MzM0YmQyNzQ1ZWM5IgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiYTg2YWRlODRiMmUxNDJjMGZkNzUzNmQ5NjQ3NzEwN2I2ZDA3ZGI1YyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImFmMWY3ZjU4NmJkMzJkMzljMDU3ZjE3NjA2OTkxYjg4N2VhZGIzODkiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiYTYzZDQwYjg2MGE2ZDI1NTAwNWE1NDE4OTRkNTM3MjkwOTBiNDBlYSIKK1NSQ1JFVl9tYWNoaW5lID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21ldGEgPz0gIjNhMDliMzhhOWY1MDE1YzU2ZDk5ZDE3YWE3YzJmMjAwYzU2NjI0OWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xNC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lOyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xNDtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICIzLjE0LjM2IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdWFybXxxZW11YXJtNjR8cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzE2NDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYgpAQCAtMCwwICsxLDQxIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9iYXNlIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIGJvYXJkIHNwZWNpZmljIGJyYW5jaGVzCitLQlJBTkNIX3FlbXVhcm0gID89ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKK0tCUkFOQ0hfcWVtdWFybTY0ID89ICJzdGFuZGFyZC9xZW11YXJtNjQiCitLQlJBTkNIX3FlbXVtaXBzID89ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKK0tCUkFOQ0hfcWVtdXBwYyAgPz0gInN0YW5kYXJkL3FlbXVwcGMiCitLQlJBTkNIX3FlbXV4ODYgID89ICJzdGFuZGFyZC9jb21tb24tcGMiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiOTYzYjRkZjY2M2RiYTI1ODRhYzg2NGUwYzAxNjgyNWRlMDA0NjU1OCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICJjZWRiYmM3YjVlNzJkZjJlODIwYmI5ZTc4ODVmMTIxMzJjNWUyZmZmIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiMjNhODMzODZlMTA5ODZhNjNlNmNlZjcxMmEwNDU0NDU0OTlkMDAyYiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiM2ViNzBjZWEzNTMyZTIyYWIxYjZkYTk4NjQ0NDY2MjEyMjllNjYxNiIKK1NSQ1JFVl9tYWNoaW5lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21ldGEgPz0gIjEwMTY3MTQ4NjgyNDlkNjRmYzE2NjkyZmQ3Njc5NjcyYjFlZmExN2IiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQ7bmFtZT1tYWNoaW5lO2JyYW5jaD0ke0tCUkFOQ0h9OyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xOTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICIzLjE5LjUiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICJxZW11YXJtfHFlbXVhcm02NHxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0IgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDQ2MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCkBAIC0wLDAgKzEsNDEgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICIzYzEyNDVkMTYyY2NiNTVkZTFhZjQyYmNmM2RiZjY5MDQ1N2JmOWU0IgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjQxMzJhNjkxZDA5MDhkMTBiOGYwN2NlN2VjZTAyZTZkYzk0ZTE3YmMiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICIwMzNlMWFhNjMzNDY1NDQ5ZWRmNTQ0ZWI4MWFkZGEwY2FmMTZlYzYwIgorU1JDUkVWX21hY2hpbmUgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWV0YSA/PSAiNDI5ZjllMmZmMDY0OWI4YzkzNDEzNDU2MjI1NDVkODc0ZDVlMzAzYSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICI0LjEuNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmM0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBlNGNhZDkwMDk5NGNmMjg2ZDk3MTc5NmE5NDdmZWE3ODJkZmM2NjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTE6NDM6MDIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGludmFsaWQgcG9pbnRlciBmcmVlIHdpdGggdHJhY2UgY29sbGVjdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitQYXRjaCBwcm9wb3NlZCBieSBMaSBSb25nUWluZyByZWxhdGVkIHRvIGJ1ZyMgNzkwCisKK1NpZ25lZC1vZmYtYnk6IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KKy0tLQorIGxpYi9jb250ZXh0LmMgfCA4ICsrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9jb250ZXh0LmMgYi9saWIvY29udGV4dC5jCitpbmRleCA0NWFhYjM0Li44ZDM3NzBmIDEwMDY0NAorLS0tIGEvbGliL2NvbnRleHQuYworKysrIGIvbGliL2NvbnRleHQuYworQEAgLTc5LDcgKzc5LDcgQEAgaW50IGJ0X2NvbnRleHRfYWRkX3RyYWNlKHN0cnVjdCBidF9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGgsCisgCXN0cnVjdCBidF90cmFjZV9kZXNjcmlwdG9yICp0ZDsKKyAJc3RydWN0IGJ0X2Zvcm1hdCAqZm10OworIAlzdHJ1Y3QgYnRfdHJhY2VfaGFuZGxlICpoYW5kbGU7CistCWludCByZXQsIGNsb3NlcmV0OworKwlpbnQgcmV0OworIAorIAlpZiAoIWN0eCB8fCAhZm9ybWF0X25hbWUgfHwgKCFwYXRoICYmICFzdHJlYW1fbGlzdCkpCisgCQlyZXR1cm4gLUVJTlZBTDsKK0BAIC0xNTksMTAgKzE1OSw4IEBAIGludCBidF9jb250ZXh0X2FkZF90cmFjZShzdHJ1Y3QgYnRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoLAorIAlyZXR1cm4gaGFuZGxlLT5pZDsKKyAKKyBlcnJvcjoKKy0JY2xvc2VyZXQgPSBmbXQtPmNsb3NlX3RyYWNlKHRkKTsKKy0JaWYgKGNsb3NlcmV0KSB7CistCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluIGNsb3NlX3RyYWNlIGNhbGxiYWNrXG4iKTsKKy0JfQorKwlpZiAoaGFuZGxlKQorKwkJYnRfY29udGV4dF9yZW1vdmVfdHJhY2UoY3R4LCBoYW5kbGUtPmlkKTsKKyBlbmQ6CisgCXJldHVybiByZXQ7CisgfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmJlNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkJhYmVsdHJhY2UgLSBUcmFjZSBGb3JtYXQgQmFiZWwgVG93ZXIiCitERVNDUklQVElPTiA9ICJCYWJlbHRyYWNlIHByb3ZpZGVzIHRyYWNlIHJlYWQgYW5kIHdyaXRlIGxpYnJhcmllcyBpbiBob3N0IHNpZGUsIGFzIHdlbGwgYXMgYSB0cmFjZSBjb252ZXJ0ZXIsIHdoaWNoIHVzZWQgdG8gY29udmVydCBMVFRuZyAyLjAgdHJhY2VzIGludG8gaHVtYW4tcmVhZGFibGUgbG9nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZWZmaWNpb3MuY29tL2JhYmVsdHJhY2UvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2JhYmVsdHJhY2UiCisKK0xJQ0VOU0UgPSAiTUlUICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmJhMTVkZDc2YTI0OGUxZGQ1MjZiY2EwZTIxMjVmYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgdXRpbC1saW51eCBwb3B0IGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworU1JDUkVWID0gIjkwMzk1ODI0ZWZjMDA3ZGU4ODc4N2E2YjhlNDAwYTA3Yzk4MGJlMWMiCitQViA9ICIxLjIuNCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZWZmaWNpb3MuY29tL2JhYmVsdHJhY2UuZ2l0O2JyYW5jaD1zdGFibGUtMS4yIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307ICR7U30vYm9vdHN0cmFwICkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDU0NGZlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgS0VSTkVMIE1PRFVMRSIKK0RFU0NSSVBUSU9OID0gIlRoZSBsdHRuZy1tb2R1bGVzIDIuMCBwYWNrYWdlIGNvbnRhaW5zIHRoZSBrZXJuZWwgdHJhY2VyIG1vZHVsZXMiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIgJiBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xNDEyY2FmNWExYWE5MGQ2YTQ4NTg4YTQ3OTRjMGVhYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKKworaW5oZXJpdCBtb2R1bGUKKworU1JDUkVWID0gIjdhODhmOGI1MDY5NmRkNzFlODBjMDg2NjExNTljYWY4ZTExOWJmNTEiCitQViA9ICIyLjYuMitnaXQke1NSQ1BWfSIKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFhcmNoNjR8bWlwc3xhcm0pLiotbGludXgnCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy1tb2R1bGVzLmdpdDticmFuY2g9c3RhYmxlLTIuNiIKKworZXhwb3J0IElOU1RBTExfTU9EX0RJUj0ia2VybmVsL2x0dG5nLW1vZHVsZXMiCisKK0VYVFJBX09FTUFLRSArPSAiS0VSTkVMRElSPScke1NUQUdJTkdfS0VSTkVMX0RJUn0nIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIERlbGV0ZSBlbXB0eSBkaXJlY3RvcmllcyB0byBhdm9pZCBRQSBmYWlsdXJlcyBpZiBubyBtb2R1bGVzIHdlcmUgYnVpbHQKKwlmaW5kICR7RH0vbGliIC1kZXB0aCAtdHlwZSBkIC1lbXB0eSAtZXhlYyBybWRpciB7fSBcOworfQorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0QnLCBUcnVlKSwgJ2xpYi9tb2R1bGVzJykpOgorICAgICAgICBiYi53YXJuKCIlczogbm8gbW9kdWxlcyB3ZXJlIGNyZWF0ZWQ7IHRoaXMgbWF5IGJlIGR1ZSB0byBDT05GSUdfVFJBQ0VQT0lOVFMgbm90IGJlaW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWwuIiAlIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvZXh0ZXJuLWRlY2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTllZjU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaApAQCAtMCwwICsxLDQ0MiBAQAorVGhpcyBtYWtlIHRoZSBkZWNsYXJhdGlvbnMgdG8gYmUgZXh0ZXJuIHNvIHRoZXkgZG9udCBlbmQgdXAKK2luIGR1cGxpY2F0ZXMgaW4gZGF0YS5yZWwucm8gc2VjdGlvbnMKKworYXZvaWQgZXJyb3JzIGxpa2UKKworfCAuLi8uLi8uLi9zcmMvY29tbW9uLy5saWJzL2xpYmNvbW1vbi5hKG1pLWx0dG5nLm8pOiguZGF0YS5yZWwucm8ubG9jYWwrMHgwKTogbXVsdGlwbGUgZGVmaW5pdGlvbiBvZiBgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHMnCit8IGNvbW1hbmRzL2VuYWJsZV9ldmVudHMubzooLmJzcysweDQ4KTogZmlyc3QgZGVmaW5lZCBoZXJlCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworfCBNYWtlZmlsZTo1MDI6IHJlY2lwZSBmb3IgdGFyZ2V0ICdsdHRuZycgZmFpbGVkCit8IG1ha2VbM106ICoqKiBbbHR0bmddIEVycm9yIDEKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnaXQvc3JjL2NvbW1vbi9jb25maWcvY29uZmlnLXNlc3Npb24tYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29tbW9uL2NvbmZpZy9jb25maWctc2Vzc2lvbi1hYmkuaAorKysrIGdpdC9zcmMvY29tbW9uL2NvbmZpZy9jb25maWctc2Vzc2lvbi1hYmkuaAorQEAgLTE4LDk1ICsxOCw5NSBAQAorICNpZm5kZWYgQ09ORklHX1NFU1NJT05fSU5URVJOQUxfSAorICNkZWZpbmUgQ09ORklHX1NFU1NJT05fSU5URVJOQUxfSAorIAorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kb21haW5zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9ldmVudDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0czsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYXR0cmlidXRlczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXhjbHVzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb25zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9mdW5jdGlvbl9hdHRyaWJ1dGVzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wcm9iZV9hdHRyaWJ1dGVzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zeW1ib2xfbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYWRkcmVzczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb2Zmc2V0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9lbmFibGVkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdmVyd3JpdGVfbW9kZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ViYnVmX3NpemU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X251bV9zdWJidWY7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N3aXRjaF90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcmVhZF90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdXRwdXRfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHJhY2VmaWxlX3NpemU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9jb3VudDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbGl2ZV90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYnVmZmVyX3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb25zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wZXJmOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb25maWc7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N0YXJ0ZWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X21vZGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbF90eXBlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9maWx0ZXI7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X291dHB1dHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnN1bWVyX291dHB1dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGVzdGluYXRpb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3BhdGg7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25ldF9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRyb2xfdXJpOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kYXRhX3VyaTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbWF4X3NpemU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9rZXJuZWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV91c3Q7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9qdWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9sb2c0ajsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl9waWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfdWlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfZ2xvYmFsOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfZGlzY2FyZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX292ZXJ3cml0ZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX3NwbGljZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX21tYXA7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3NpbmdsZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV90cmFjZXBvaW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9wcm9iZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfZnVuY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uX2VudHJ5OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9ub29wOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9zeXNjYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcHJvYmU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2tyZXRwcm9iZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcm9jbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJpbzsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfbmljZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92dGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92cHBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHRocmVhZF9pZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaG9zdG5hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2lwOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wZXJmX3RocmVhZF9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NoYW5uZWxzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRleHRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9mdW5jdGlvbl9hdHRyaWJ1dGVzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcHJvYmVfYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N5bWJvbF9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYWRkcmVzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X29mZnNldDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9lbmFibGVkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3ZlcndyaXRlX21vZGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zdWJidWZfc2l6ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X251bV9zdWJidWY7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zd2l0Y2hfdGltZXJfaW50ZXJ2YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9yZWFkX3RpbWVyX2ludGVydmFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0X3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfc2l6ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9jb3VudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xpdmVfdGltZXJfaW50ZXJ2YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYnVmZmVyX3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc2Vzc2lvbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wZXJmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uZmlnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3RhcnRlZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X21vZGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsX3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9maWx0ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9vdXRwdXRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uc3VtZXJfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGVzdGluYXRpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wYXRoOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbmV0X291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRyb2xfdXJpOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGF0YV91cmk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9tYXhfc2l6ZTsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9rZXJuZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfdXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2p1bDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9sb2c0ajsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl91aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfZ2xvYmFsOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX2Rpc2NhcmQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfb3ZlcndyaXRlOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX3NwbGljZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9tbWFwOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV90cmFjZXBvaW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfcHJvYmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uX2VudHJ5OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfbm9vcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3N5c2NhbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcHJvYmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcmV0cHJvYmU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9waWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcm9jbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ByaW87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9uaWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3RpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3Z0aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBwaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wdGhyZWFkX2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaG9zdG5hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9pcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BlcmZfdGhyZWFkX2NvdW50ZXI7CisgCisgI2VuZGlmIC8qIENPTkZJR19TRVNTSU9OX0lOVEVSTkFMX0ggKi8KK0luZGV4OiBnaXQvc3JjL2NvbW1vbi9taS1sdHRuZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2NvbW1vbi9taS1sdHRuZy5oCisrKysgZ2l0L3NyYy9jb21tb24vbWktbHR0bmcuaAorQEAgLTQ5LDEzMyArNDksMTMzIEBAIHN0cnVjdCBtaV9sdHRuZ192ZXJzaW9uIHsKKyB9OworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FjdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FkZF9jb250ZXh0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY2FsaWJyYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY3JlYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGVzdHJveTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfY2hhbm5lbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfY2hhbm5lbHM7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9saXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbG9hZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zYXZlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2V0X3Nlc3Npb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2FkZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2RlbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2xpc3Q7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9yZWNvcmQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdGFydDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N0b3A7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdWNjZXNzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfdmVyc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfYWRkX2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY2FsaWJyYXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NyZWF0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kZXN0cm95OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfY2hhbm5lbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2VuYWJsZV9jaGFubmVsczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfZXZlbnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbGlzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9sb2FkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NhdmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2V0X3Nlc3Npb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfYWRkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2RlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9saXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X3JlY29yZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdGFydDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdG9wOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N1Y2Nlc3M7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfdmVyc2lvbjsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gdmVyc2lvbiBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2NvbW1pdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2Rlc2NyaXB0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbGljZW5zZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX21ham9yOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWlub3I7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9wYXRjaF9sZXZlbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3N0cjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3dlYjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9jb21taXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fZGVzY3JpcHRpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbGljZW5zZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9tYWpvcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9taW5vcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9wYXRjaF9sZXZlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9zdHI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fd2ViOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGEgbHR0bmdfZXZlbnRfZmllbGQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2V2ZW50X2ZpZWxkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZHM7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbHR0bmdfZXZlbnRfY29udGV4dCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jb3VudGVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jcHVfY291bnRlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfdGhyZWFkX2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY3B1X2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl90aHJlYWRfY291bnRlcjsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsdHRuZ19ldmVudF9wZXJmX2NvdW50ZXJfY3R4ICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGVyZl9jb3VudGVyX2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BlcmZfY291bnRlcl9jb250ZXh0OworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBwaWQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRfaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkX2lkOworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBzYXZlIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zYXZlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zYXZlOworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBsb2FkIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9sb2FkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9sb2FkOworIAorIC8qIEdlbmVyYWwgZWxlbWVudCBvZiBtaV9sdHRuZyAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2VtcHR5OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2lkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X25vd3JpdGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc3VjY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2VudW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9mbG9hdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2ludGVnZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9vdGhlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX3N0cmluZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZW1wdHk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ub3dyaXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zdWNjZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2VudW07CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfZmxvYXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfaW50ZWdlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9vdGhlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9zdHJpbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2FsZXJ0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfY3JpdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfZnVuY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19saW5lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbW9kdWxlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfcHJvY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2dyYW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19zeXN0ZW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z191bml0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZW1lcmc7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9lcnI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9pbmZvOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbm90aWNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfdW5rbm93bjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3dhcm5pbmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfYWxlcnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfY3JpdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1ZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19saW5lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX21vZHVsZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9jZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2dyYW07CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfc3lzdGVtOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3VuaXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZW1lcmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZXJyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2luZm87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbm90aWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3Vua25vd247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfd2FybmluZzsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsb2dsZXZlbCBKVUwgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfY29uZmlnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2luZm87CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfb2ZmOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3NldmVyZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF93YXJuaW5nOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2NvbmZpZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfaW5mbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfb2ZmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9zZXZlcmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3dhcm5pbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgTG9nNGogKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX29mZjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2ZhdGFsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZXJyb3I7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al93YXJuOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfaW5mbzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2RlYnVnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfdHJhY2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfb2ZmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2ZhdGFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2Vycm9yOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX3dhcm47CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfaW5mbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9kZWJ1ZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al90cmFjZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9hbGw7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgdHlwZSAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfdW5rbm93bjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV91bmtub3duOworIAorIC8qIFN0aW5nIHJlbGF0ZWQgdG8gbHR0bmdfY2FsaWJyYXRlICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZV9mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jYWxpYnJhdGVfZnVuY3Rpb247CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gYSBsdHRuZ19zbmFwc2hvdCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2N0cmxfdXJsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2RhdGFfdXJsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X21heF9zaXplOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X25fcHRyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X3Nlc3Npb25fbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2N0cmxfdXJsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9kYXRhX3VybDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfbWF4X3NpemU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X25fcHRyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9zZXNzaW9uX25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90czsKKyAKKyAvKiBVdGlsaXR5IHN0cmluZyBmdW5jdGlvbiAgKi8KKyBjb25zdCBjaGFyICptaV9sdHRuZ19sb2dsZXZlbF9zdHJpbmcoaW50IHZhbHVlLCBlbnVtIGx0dG5nX2RvbWFpbl90eXBlIGRvbWFpbik7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDE2MTQ5NmZiZTE0NjU4MTdhNzdhNTBhMTE3MjczNGRhZTgxYTEzZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTIgTWF5IDIwMTUgMTE6MTE6NDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbHR0bmctdG9vbHM6IEZpeCBsaXZlIHRpbWVyIGNhbGN1bGF0aW9uIGVycm9yCisKK1RoZXJlIGlzIGFuIGNhbGN1bGF0aW9uIGVycm9yIGZvciBsaXZlIHRpbWVyLiBWYXJpYWJsZSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgaXMKK2Jhc2VkIG9uIG1pY3Jvc2Vjb25kLCBhbmQgaXQgaXMgbm90IHJpZ2h0IHRvIGFzc2lnbiBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgbW9kCisxMDAwMDAwIHRvIHZhciB0dl9uc2VjIHdoaWNoIGlzIGJhc2VkIG9uIG5hbm9zZWNvbmQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEppYW5jaHVhbiBXYW5nIDxqaWFuY2h1YW4ud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYyBiL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworaW5kZXggMTQwODA1Mi4uYzYyMDJiYSAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworKysrIGIvc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jCitAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgY29uc3VtZXJfdGltZXJfc3dpdGNoX3N0YXJ0KHN0cnVjdCBsdHRuZ19jb25zdW1lcl9jaGFubmVsICpjaGFubmVsLAorIAljaGFubmVsLT5zd2l0Y2hfdGltZXJfZW5hYmxlZCA9IDE7CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IHN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKHN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCitAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgY29uc3VtZXJfdGltZXJfbGl2ZV9zdGFydChzdHJ1Y3QgbHR0bmdfY29uc3VtZXJfY2hhbm5lbCAqY2hhbm5lbCwKKyAJY2hhbm5lbC0+bGl2ZV90aW1lcl9lbmFibGVkID0gMTsKKyAKKyAJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IGxpdmVfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGxpdmVfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChsaXZlX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMCkgKiAxMDAwOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRzLml0X3ZhbHVlLnR2X3NlYzsKKyAJaXRzLml0X2ludGVydmFsLnR2X25zZWMgPSBpdHMuaXRfdmFsdWUudHZfbnNlYzsKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc1ODgxNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBpbnN0YWxsY2hlY2sKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThiY2U0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDU4NGY1OWIuLmMyYmNhYmQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMiwzICsxMiw5IEBAIGRpc3RfZG9jX0RBVEEgPSBMSUNFTlNFIFwKKyBkaXN0X25vaW5zdF9EQVRBID0gQ29kaW5nU3R5bGUKKyAKKyBFWFRSQV9ESVNUID0gZXh0cmFzL2x0dG5nLWJhc2hfY29tcGxldGlvbiBncGwtMi4wLnR4dCBsZ3BsLTIuMS50eHQKKysKKytpbnN0YWxsLXB0ZXN0OgorKwljcCAtciAkKHNyY2RpcikvdGVzdHMgJChERVNURElSKQorKwlmb3IgbSBpbiAkJChmaW5kICQoREVTVERJUikvdGVzdHMgLW5hbWUgTWFrZWZpbGUpOyBkbyBcCisrICAgICAgICAgIHNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkJG07IFwKKysgICAgICAgIGRvbmUKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4uc2ggYi90ZXN0cy9ydW4uc2gKK2luZGV4IGM2YzUwZmQuLjY0NTUzNTkgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4uc2gKKysrKyBiL3Rlc3RzL3J1bi5zaAorQEAgLTE5LDQgKzE5LDcgQEAKKyAKKyBbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogTm8gdGVzdGxpc3QuIFBsZWFzZSBzcGVjaWZ5IGEgdGVzdGxpc3QgdG8gcnVuLiIgJiYgZXhpdCAxCisgCistcHJvdmUgLS1tZXJnZSAtLWV4ZWMgJycgLSA8ICQxCisrcHJvdmUgLS1tZXJnZSAtdiAtLWV4ZWMgJycgLSA8ICQxIHwgc2VkIFwKKysgIC1lICdzfF5vayBcKC4qXCl8UEFTUzogXDF8JyBcCisrICAtZSAnc3xebm90IG9rIFwoLipcKXxGQUlMOiBcMXwnIFwKKysgIHwgZWdyZXAgLWggJ1BBU1N8RkFJTCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1YTVkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA1ODRmNTliLi5jMmJjYWJkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTIsMyArMTIsOSBAQCBkaXN0X2RvY19EQVRBID0gTElDRU5TRSBcCisgZGlzdF9ub2luc3RfREFUQSA9IENvZGluZ1N0eWxlCisgCisgRVhUUkFfRElTVCA9IGV4dHJhcy9sdHRuZy1iYXNoX2NvbXBsZXRpb24gZ3BsLTIuMC50eHQgbGdwbC0yLjEudHh0CisrCisraW5zdGFsbC1wdGVzdDoKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3RzICQoREVTVERJUikKKysJZm9yIG0gaW4gJCQoZmluZCAkKERFU1RESVIpL3Rlc3RzIC1uYW1lIE1ha2VmaWxlKTsgZG8gXAorKyAgICAgICAgICBzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJCRtOyBcCisrICAgICAgICBkb25lCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNmQ1YjAwZC4uMzc3NGY5ZCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsMTQgKzEsMTcgQEAKKyBTVUJESVJTID0gdXRpbHMgcmVncmVzc2lvbiB1bml0IHN0cmVzcworIAorLWlmIFVTRV9QWVRIT04KKy1jaGVjay1hbToKKytpbnN0YWxsY2hlY2stYW06CisgCS4vcnVuLnNoIHVuaXRfdGVzdHMKKyAJLi9ydW4uc2ggZmFzdF9yZWdyZXNzaW9uCisraWYgVVNFX1BZVEhPTgorIAkuL3J1bi5zaCB3aXRoX2JpbmRpbmdzX3JlZ3Jlc3Npb24KKy1lbHNlCisrZW5kaWYKKysKKyBjaGVjay1hbToKKyAJLi9ydW4uc2ggdW5pdF90ZXN0cworIAkuL3J1bi5zaCBmYXN0X3JlZ3Jlc3Npb24KKytpZiBVU0VfUFlUSE9OCisrCS4vcnVuLnNoIHdpdGhfYmluZGluZ3NfcmVncmVzc2lvbgorIGVuZGlmCisgCisgZGlzdF9ub2luc3RfU0NSSVBUUyA9IHJ1bi5zaCB1bml0X3Rlc3RzIGZhc3RfcmVncmVzc2lvbiBsb25nX3JlZ3Jlc3Npb24gcm9vdF9yZWdyZXNzaW9uIHdpdGhfYmluZGluZ3NfcmVncmVzc2lvbgorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi5zaCBiL3Rlc3RzL3J1bi5zaAoraW5kZXggYzZjNTBmZC4uNjQ1NTM1OSAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi5zaAorKysrIGIvdGVzdHMvcnVuLnNoCitAQCAtMTksNCArMTksNyBAQAorIAorIFsgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBObyB0ZXN0bGlzdC4gUGxlYXNlIHNwZWNpZnkgYSB0ZXN0bGlzdCB0byBydW4uIiAmJiBleGl0IDEKKyAKKy1wcm92ZSAtLW1lcmdlIC0tZXhlYyAnJyAtIDwgJDEKKytwcm92ZSAtLW1lcmdlIC12IC0tZXhlYyAnJyAtIDwgJDEgfCBzZWQgXAorKyAgLWUgJ3N8Xm9rIFwoLipcKXxQQVNTOiBcMXwnIFwKKysgIC1lICdzfF5ub3Qgb2sgXCguKlwpfEZBSUw6IFwxfCcgXAorKyAgfCBlZ3JlcCAtaCAnUEFTU3xGQUlMJwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTdhOTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi42LjAuYmIKQEAgLTAsMCArMSw4MiBAQAorU0VDVElPTiA9ICJkZXZlbCIKK1NVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBDb250cm9sIgorREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IHRyYWNlIHRvb2xraXQgaXMgYSBzdWl0ZSBvZiB0b29scyBkZXNpZ25lZCBcCit0byBleHRyYWN0IHByb2dyYW0gZXhlY3V0aW9uIGRldGFpbHMgZnJvbSB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSBcCithbmQgaW50ZXJwcmV0IHRoZW0uIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wMWQ3ZmM0NDk2YWFjZjM3ZDkwZGY5MGI5MGIwY2FjMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0wZjBkNzE1MDBlNmE1N2ZkMjRkODI1ZjMzMjQyYjljYSIKKworREVQRU5EUyA9ICJsaWJ1cmN1IHBvcHQgbHR0bmctdXN0IGxpYnhtbDIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBwZXJsIGJhc2giCisKK1NSQ1JFViA9ICJkNTIyYzFmMTQyODVlMmU4YjEwYjdjMGNkMDExODQ3Njk2ZmZlNzc5IgorCitQWVRIT05fT1BUSU9OID0gImFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcycgXAorICAgICAgICAgICAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPScke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMnIFwKKyAgICAgICAgICAgICAgICAgUFlUSE9OX0lOQ0xVREU9Jy1JJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBcCisiCitQQUNLQUdFQ09ORklHID8/PSAibHR0bmctdXN0IgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbi1iaW5kaW5ncyAke1BZVEhPTl9PUFRJT059LCxweXRob24gc3dpZy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW2x0dG5nLXVzdF0gPSAiLS1lbmFibGUtbHR0bmctdXN0LCAtLWRpc2FibGUtbHR0bmctdXN0LCBsdHRuZy11c3QiCitQQUNLQUdFQ09ORklHW2ttb2RdID0gIi0tZW5hYmxlLWttb2QsIC0tZGlzYWJsZS1rbW9kLCBrbW9kIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdG9vbHMuZ2l0O2JyYW5jaD1zdGFibGUtMi42IFwKKyAgICAgICAgICAgZmlsZTovL3J1bnRlc3QtMi40LjAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXh0ZXJuLWRlY2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBcCisJICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdCBwa2djb25maWcgdXNlcmFkZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAidHJhY2luZyIKKworZXhwb3J0IEtFUk5FTERJUj0iJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvKiAke2RhdGFkaXJ9L3htbC9sdHRuZyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzLyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy8uZGVidWciCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qLmEiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qLmxhIgorCisjIFNpbmNlIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW50byAke2xpYmRpcn0vbHR0bmcvbGliZXhlYyB3ZSBtYXRjaCAKKyMgdGhlIGxpYmV4ZWMgaW5zYW5lIHRlc3Qgc28gc2tpcCBpdC4KKyMgUHl0aG9uIG1vZHVsZSBuZWVkcyB0byBrZWVwIF9sdHRuZy5zbworSU5TQU5FX1NLSVBfJHtQTn0gPSAibGliZXhlYyBkZXYtc28iCitJTlNBTkVfU0tJUF8ke1BOfS1kYmcgPSAibGliZXhlYyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRGVsZXRlIGEgc2hpcHBlZCBtNCBmaWxlIHRoYXQgb3ZlcnJpZGVzIG91ciBwYXRjaGVkIG9uZQorCXJtIC1mICR7U30vY29uZmlnL2xpYnhtbC5tNAorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwljaG1vZCAreCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAorCWZvciBpIGluIGBmaW5kICR7RH0ke1BURVNUX1BBVEh9IC1wZXJtIC91K3ggLXR5cGUgZmA7IGRvCisJCXNlZCAtZSAiczpcJFRFU1RESVIuKi9zcmMvYmluL2x0dG5nL1wkTFRUTkdfQklOOlwkTFRUTkdfQklOOmciIFwKKwkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAorCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXNlc3Npb25kL2x0dG5nLXNlc3Npb25kOlwkU0VTU0lPTkRfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9iaW4vbHR0bmctcmVsYXlkL1wkUkVMQVlEX0JJTjpcJFJFTEFZRF9CSU46ZyIgXAorCQkgIC1pICRpCisJZG9uZQorCisJc2VkIC1lICJzOnNyYy9iaW4vbHR0bmctc2Vzc2lvbmQ6JGJpbmRpcjpnIiBcCisJICAgIC1lICJzOnNyYy9iaW4vbHR0bmctY29uc3VtZXJkOiR7bGliZXhlY2Rpcn0vbGliZXhlYy86ZyIgXAorCS1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3JlZ3Jlc3Npb24vcnVuLXJlcG9ydC5weQorCXNlZCAtZSAiczpzcmMvYmluOmJpbjpnIiAtZSAiczpsdC06OmciIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAorCXNlZCAtZSAiczppbmlfY29uZmlnOlwubGlic1wvaW5pX2NvbmZpZzoiIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91bml0L2luaV9jb25maWcvdGVzdF9pbmlfY29uZmlnCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMTIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZkMDJhNmMxYWViMWQwNTBmZmU3YzY2MjRiYWI5YWNmYTc2ZmMwNWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTIgTWF5IDIwMTUgMTE6MDQ6MzQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbHR0bmctdXN0OkZpeCBsaXZlIHRpbWVyIGNhbGN1bGF0aW9uIGVycm9yCisKK1RoZXJlIGlzIGFuIGNhbGN1bGF0aW9uIGVycm9yIGZvciBsaXZlIHRpbWVyLiBWYXJpYWJsZSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgaXMKK2Jhc2VkIG9uIG1pY3Jvc2Vjb25kLCBhbmQgaXQgaXMgbm90IHJpZ2h0IHRvIGFzc2lnbiBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgbW9kCisxMDAwMDAwIHRvIHZhciB0dl9uc2VjIHdoaWNoIGlzIGJhc2VkIG9uIG5hbm9zZWNvbmQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEppYW5jaHVhbiBXYW5nIDxqaWFuY2h1YW4ud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYyBiL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworaW5kZXggZWI0ZTQ4Ni4uZTAzNzdhMyAxMDA2NDQKKy0tLSBhL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworKysrIGIvbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jCitAQCAtNTI4LDcgKzUyOCw3IEBAIHZvaWQgbGliX3JpbmdfYnVmZmVyX2NoYW5uZWxfc3dpdGNoX3RpbWVyX3N0YXJ0KHN0cnVjdCBjaGFubmVsICpjaGFuKQorIAl9CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCitAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgbGliX3JpbmdfYnVmZmVyX2NoYW5uZWxfcmVhZF90aW1lcl9zdGFydChzdHJ1Y3QgY2hhbm5lbCAqY2hhbikKKyAJfQorIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gY2hhbi0+cmVhZF90aW1lcl9pbnRlcnZhbCAvIDEwMDAwMDA7CistCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gY2hhbi0+cmVhZF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKGNoYW4tPnJlYWRfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitEb24ndCBidWlsZCB0aGUgZG9jIGV4YW1wbGVzIC0gd2UgZG9uJ3QgbmVlZCB0aGVtIGFuZCBpbiBmYWN0IHRoZXkKK25ldmVyIHN1Y2Nlc3NmdWxseSBidWlsdCBpbiBwcmV2aW91cyBpdGVyYXRpb25zIG9mIHRoZSBsdHRuZy11c3QKK3JlY2lwZSBhbnl3YXkuCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBkb2MvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gLiBleGFtcGxlcworK1NVQkRJUlMgPSAuCisgCisgZGlzdF9tYW5fTUFOUyA9IG1hbi9sdHRuZy1nZW4tdHAuMSBcCisgCW1hbi9sdHRuZy11c3QuMyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNGFmZDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgVXNlcnNwYWNlIFRyYWNlciAyLngiCitERVNDUklQVElPTiA9ICJUaGUgTFRUbmcgVVNUIDIueCBwYWNrYWdlIGNvbnRhaW5zIHRoZSB1c2Vyc3BhY2UgdHJhY2VyIGxpYnJhcnkgdG8gdHJhY2UgdXNlcnNwYWNlIGNvZGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9sdHRuZy5vcmcvdXN0IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2x0dG5nLXVzdCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBNSVQgJiBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5NjNlYjM2NmI3ODEyNTJiMGJmMGZkZjE2MjRkOWU5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NucHJpbnRmL3NucHJpbnRmLmM7ZW5kbGluZT0zMjttZDU9ZDNkNTQ0OTU5ZDhhMzc4MmIyZTA3NDUxYmUwYTkwM2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc25wcmludGYvdmFyaW91cy5oO2VuZGxpbmU9MzE7bWQ1PTg5ZjI1MDliNmI0NjgyYzRmYzk1MjU1ZWVjNGFiZTQ0IgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZQorCitERVBFTkRTID0gImxpYnVyY3UgdXRpbC1saW51eCIKK1JERVBFTkRTXyR7UE59LWJpbiA9ICJweXRob24tY29yZSIKKworIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgcmVuYW1lCitSUFJPVklERVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKK1JSRVBMQUNFU18ke1BOfSA9ICJsdHRuZzItdXN0IgorUkNPTkZMSUNUU18ke1BOfSA9ICJsdHRuZzItdXN0IgorCitTUkNSRVYgPSAiYzQ5ZWU5MDQwYWRhNjk4NGM4ODA3NTY2MTRlOGE2ZjdmZDY0NWJkNiIKK1BFID0gIjIiCitQViA9ICIyLjYuMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLXVzdC5naXQ7YnJhbmNoPXN0YWJsZS0yLjYgXAorICAgICAgICAgICBmaWxlOi8vbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBcCisgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgJHtTfS9ib290c3RyYXAgKQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWM0OWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvUEQucGF0Y2gKQEAgLTAsMCArMSw4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IG1vZHV0aWxzLWluaXRzY3JpcHRzLTEuMC9MSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbW9kdXRpbHMtaW5pdHNjcmlwdHMtMS4wL0xJQ0VOU0UJMjAxMC0xMi0wNiAxNDoyNjowMy41NzAzMzkwMDIgLTA4MDAKK0BAIC0wLDAgKzEgQEAKKytQdWJsaWMgRG9tYWluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc4YWRmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9tb2R1dGlscy5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vZHVsZS1pbml0LXRvb2xzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBTaG91bGQtU3RhcnQ6ICAgICAgY2hlY2tyb290CisjIFNob3VsZC1zdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBQcm9jZXNzIC9ldGMvbW9kdWxlcy4KKyMgRGVzY3JpcHRpb246ICAgICAgIExvYWQgdGhlIG1vZHVsZXMgbGlzdGVkIGluIC9ldGMvbW9kdWxlcy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0xPQURfTU9EVUxFPW1vZHByb2JlCitbIC1mIC9wcm9jL21vZHVsZXMgXSB8fCBleGl0IDAKK1sgLWYgL2V0Yy9tb2R1bGVzIF0gfHwgWyAtZCAvZXRjL21vZHVsZXMtbG9hZC5kIF0gfHwgZXhpdCAwCitbIC1lIC9zYmluL21vZHByb2JlIF0gfHwgTE9BRF9NT0RVTEU9aW5zbW9kCisKK2lmIFsgISAtZiAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9tb2R1bGVzLmRlcCBdOyB0aGVuCisJWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobyAiQ2FsY3VsYXRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcyAuLi4iCisJZGVwbW9kIC1BZQorZmkKKworbG9hZGVkX21vZHVsZXM9IiAiCisKK3Byb2Nlc3NfZmlsZSgpIHsKKwlmaWxlPSQxCisKKwkoY2F0ICRmaWxlOyBlY2hvOyApIHwKKwl3aGlsZSByZWFkIG1vZHVsZSBhcmdzCisJZG8KKwkJY2FzZSAiJG1vZHVsZSIgaW4KKwkJCVwjKnwiIikgY29udGludWUgOzsKKwkJZXNhYworCQlbIC1uICIkKGVjaG8gJGxvYWRlZF9tb2R1bGVzIHwgZ3JlcCAiICRtb2R1bGUgIikiIF0gJiYgY29udGludWUKKwkJWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobyAtbiAiJG1vZHVsZSAiCisJCWV2YWwgIiRMT0FEX01PRFVMRSAkbW9kdWxlICRhcmdzID4vZGV2L251bGwgMj4mMSIKKwkJbG9hZGVkX21vZHVsZXM9IiR7bG9hZGVkX21vZHVsZXN9JHttb2R1bGV9ICIKKwlkb25lCit9CisKK1sgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8gLW4gIkxvYWRpbmcgbW9kdWxlczogIgorWyAtZiAvZXRjL21vZHVsZXMgXSAmJiBwcm9jZXNzX2ZpbGUgL2V0Yy9tb2R1bGVzCisKK1sgLWQgL2V0Yy9tb2R1bGVzLWxvYWQuZCBdIHx8IGV4aXQgMAorCitmb3IgZiBpbiAvZXRjL21vZHVsZXMtbG9hZC5kLyouY29uZjsgZG8KKwlwcm9jZXNzX2ZpbGUgJGYKK2RvbmUKK1sgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8KKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NzBjZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9tb2R1dGlscy1pbml0c2NyaXB0cy5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkluaXRzY3JpcHQgZm9yIGF1dG8tbG9hZGluZyBrZXJuZWwgbW9kdWxlcyBvbiBib290IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTdiZjg3ZmMzNzk3NmU5M2VjNjZhZDg0ZmFjNThjMDk4IgorU1JDX1VSSSA9ICJmaWxlOi8vbW9kdXRpbHMuc2ggXAorCSAgIGZpbGU6Ly9QRC5wYXRjaCIKKworUFIgPSAicjciCisKK1MgPSAiJHtXT1JLRElSfSIKKworSU5JVFNDUklQVF9OQU1FID0gIm1vZHV0aWxzLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDUgUyAuIgorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK2RvX2NvbXBpbGUgKCkgeworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tb2R1dGlscy5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCit9CisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIG1vZHV0aWxzLnNlcnZpY2UKKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjNTZlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0tV2lkZSBQcm9maWxlciIKK0RFU0NSSVBUSU9OID0gIk9Qcm9maWxlIGlzIGEgc3lzdGVtLXdpZGUgcHJvZmlsZXIgZm9yIExpbnV4IHN5c3RlbXMsIGNhcGFibGUgXAorb2YgcHJvZmlsaW5nIGFsbCBydW5uaW5nIGNvZGUgYXQgbG93IG92ZXJoZWFkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvbmV3cy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTYxOTEmYXRpZD0xMTYxOTEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvcGFnZW50L29wYWdlbnQuaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTI2O21kNT00ZjE2ZjcyYzdhNDkzZDhhNDcwNGFhMThkMDNkMTVjNiBcCisgICAgICAgICAgICAgICAgICAgIgorU0VDVElPTiA9ICJkZXZlbCIKKworREVQRU5EUyA9ICJwb3B0IGJpbnV0aWxzIgorUkRFUEVORFNfJHtQTn0gPSAiYmludXRpbHMtc3ltbGlua3MiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtdm1saW51eCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9LyR7QlBOfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8ke0JQTn0vbGliKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqLmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3Jvb3QtaG9tZS1kaXIucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWtlcm5lbD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IC0td2l0aG91dC14IGFjX2N2X3Byb2dfWFNMVFBST0M9IgorZG9fY29uZmlndXJlICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworCWF1dG90b29sc19kb19jb25maWd1cmUKK30KKworRVhUUkFfT0VNQUtFID0gIlNSQ0RJUj0ke1BURVNUX1BBVEh9L2xpYnV0aWwrKy90ZXN0cyIKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSBjaGVjaworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXN1YmRpcnM9ImxpYmRiL3Rlc3RzIGxpYnV0aWwrKy90ZXN0cyBsaWJyZWdleC90ZXN0cyBsaWJ1dGlsL3Rlc3RzIGxpYm9wL3Rlc3RzIGxpYmRiL3Rlc3RzICIKKwlmb3IgdG9vbHRlc3QgaW4gJHtzdWJkaXJzfQorCWRvCisJCWZpbmQgJHt0b29sdGVzdH0gLXBlcm0gL3U9eCAtdHlwZSBmfCBjcGlvIC1wdmR1ICR7RH0ke1BURVNUX1BBVEh9CisJZG9uZQorCisJIyBuZWVkZWQgYnkgc29tZSBsaWJvcCB0ZXN0cworCWNwIC1yIGV2ZW50cyAke0R9JHtQVEVTVF9QQVRIfQorCisJIyBuZWVkZWQgYnkgbGlicmVnZXggcmVnZXhfdGVzdAorCWNwIGxpYnJlZ2V4L3N0bC5wYXQgJHtEfSR7UFRFU1RfUEFUSH0vbGlicmVnZXgKKwljcCBsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUgJHtEfSR7UFRFU1RfUEFUSH0vbGlicmVnZXgvdGVzdHMKKworCSMgbmVlZGVkIGJ5IGxpdHV0aWwrKyBmaWxlX21hbmlwX3Rlc3RzCisJY3AgJHtTfS9saWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHAgXAorCQlsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5vICR7RH0ke1BURVNUX1BBVEh9L2xpYnV0aWwrKy90ZXN0cworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlY2Q5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw1ODEgQEAKK2RubCBBWF9LRVJORUxfT1BUSU9OKG9wdGlvbiwgYWN0aW9uLWlmLWZvdW5kLCBhY3Rpb24taWYtbm90LWZvdW5kKQorZG5sIHNlZSBpZiBhdXRvY29uZi5oIGRlZmluZXMgdGhlIG9wdGlvbgorQUNfREVGVU4oW0FYX0tFUk5FTF9PUFRJT05dLCBbCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKK0FDX1RSWV9DT01QSUxFKCBbI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPl0sCitbCisjaWZuZGVmICQxCiticmVha19tZV9oYXJkKFxcXCk7CisjZW5kaWYKK10sWyQyXSxbJDNdLCkKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK10pCisKK2RubCBIYW5kbGUgdGhlIDIuNCBtb2R1bGUgaW5zaWRlIG1vZHVsZS8KK0FDX0RFRlVOKFtBWF9DT05GSUdfTU9EVUxFXSwKK1sKK2lmIHRlc3QgISAtZiAkS0lOQy9saW51eC9hdXRvY29uZi5oOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJseSBjb25maWd1cmVkIGtlcm5lbCBpbmNsdWRlIHRyZWUgZm91bmRdKQorZmkKKworZG5sICAtLS0gR2V0IExpbnV4IGtlcm5lbCB2ZXJzaW9uIGFuZCBjb21waWxlIHBhcmFtZXRlcnMgLS0tCisKK0FDX1NVQlNUKEtWRVJTKQorQUNfTVNHX0NIRUNLSU5HKFtmb3Iga2VybmVsIHZlcnNpb25dKQorZG5sIGl0J3MgbGlrZSB0aGlzIHRvIGhhbmRsZSBtYW5kcmFrZSdzIGZ1YmFyIHZlcnNpb24uaCAtIGJ1ZyAjNDcxNDQ4CitldmFsIEtWRVJTPWBnY2MgLUkkS0lOQyAtRSAtZE0gJEtJTkMvbGludXgvdmVyc2lvbi5oIHwgZ3JlcCAtdyBVVFNfUkVMRUFTRSB8IGF3ayAne3ByaW50ICRbXTN9J2AKK0FDX01TR19SRVNVTFQoWyRLVkVSU10pCitjYXNlICIkS1ZFUlMiIGluCisyLjIuKnwyLjQuKikgOzsKKyopIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQga2VybmVsIHZlcnNpb25dKQorZXNhYworCitkbmwgQ2hlY2sgZm9yIHRoZSBtaW5pbWFsIGtlcm5lbCB2ZXJzaW9uIHN1cHBvcnRlZAorQUNfTVNHX0NIRUNLSU5HKFtrZXJuZWwgdmVyc2lvbl0pCitBWF9LRVJORUxfVkVSU0lPTigyLCAyLCAxMCwgPD0sIEFDX01TR19SRVNVTFQoW29rXSksIEFDX01TR19FUlJPUihbY2hlY2sgaHRtbCBkb2N1bWVudGF0aW9uIGluc3RhbGwgc2VjdGlvbl0pKQorCitkbmwgbGludXgvc3BpbmxvY2suaCBhZGRlZCBhdCBzb21lIHBvaW50IGluIHBhc3QKK0FDX01TR19DSEVDS0lORyhbZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmhdKQoraWYgdGVzdCAtZiAkS0lOQy9saW51eC9zcGlubG9jay5oOyB0aGVuCisJRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURIQVZFX0xJTlVYX1NQSU5MT0NLX0hFQURFUiIKKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorCUFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbZm9yIHJ0Y19sb2NrXSkKK2djYyAtSSRLSU5DIC1FICRLSU5DL2xpbnV4L21jMTQ2ODE4cnRjLmggfCBncmVwIHJ0Y19sb2NrID4vZGV2L251bGwKK2lmIHRlc3QgIiQ/IiAtZXEgMDsgdGhlbgorCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1EUlRDX0xPQ0siCisJQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtub10pCitmaQorCSAKK2FyY2g9InVua25vd24iCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHg4Ni02NCBhcmNoaXRlY3R1cmUpCitBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODZfNjQsIHg4NjY0PTEsIHg4NjY0PTApCitBWF9NU0dfUkVTVUxUX1lOKCR4ODY2NCkKK0JVSUxEX0hBTU1FUj1ubworaWYgdGVzdCAiJHg4NjY0IiAtZXEgMTsgdGhlbgorCWFyY2g9Ing4NiIKKwlCVUlMRF9IQU1NRVI9eWVzCitlbHNlCisJQUNfTVNHX0NIRUNLSU5HKGZvciB4ODYgYXJjaGl0ZWN0dXJlKQorCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4NiwgeDg2PTEsIHg4Nj0wKQorCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4Nl9XUF9XT1JLU19PSywgeDg2PTEsIHg4Nj0keDg2KQorCUFYX01TR19SRVNVTFRfWU4oJHg4NikKKwl0ZXN0ICIkeDg2IiA9IDEgJiYgYXJjaD0ieDg2IgorCQorCWlmIHRlc3QgIiRhcmNoIiA9ICJ1bmtub3duIjsgdGhlbgorICAJCUFDX01TR19DSEVDS0lORyhmb3IgaWE2NCBhcmNoaXRlY3R1cmUpCisgIAkJQVhfS0VSTkVMX09QVElPTihDT05GSUdfSUE2NCwgaWE2ND0xLCBpYTY0PTApCisgIAkJQVhfTVNHX1JFU1VMVF9ZTigkaWE2NCkKKyAgCQl0ZXN0ICIkaWE2NCIgPSAxICYmIGFyY2g9ImlhNjQiCisJZmkKKworZmkKK0FDX1NVQlNUKEJVSUxEX0hBTU1FUikKKwordGVzdCAiJGFyY2giID0gInVua25vd24iICYmIEFDX01TR19FUlJPUihVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUpCisKK2RubCBjaGVjayB0byBzZWUgaWYga2VybmVsIHZlcmlvbiBhcHByb3ByaWF0ZSBmb3IgYXJjaAorQUNfTVNHX0NIRUNLSU5HKGFyY2gva2VybmVsIHZlcnNpb24gY29tYmluYXRpb24pCitjYXNlICIkYXJjaCIgaW4KK2lhNjQpCisJQVhfS0VSTkVMX1ZFUlNJT04oMiwgNCwgMTgsIDwsIEFDX01TR19SRVNVTFQoW29rXSksCisJCUFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgYXJjaC9rZXJuZWxdKSkgOzsKKyopIEFDX01TR19SRVNVTFQoW29rXSkKK2VzYWMKKworZG5sIGZvciBub3cgd2UgZG8gbm90IHN1cHBvcnQgUFJFRU1QVCBwYXRjaAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHJlZW1wdCBwYXRjaF0pCitBWF9LRVJORUxfT1BUSU9OKENPTkZJR19QUkVFTVBULHByZWVtcHQ9MSxwcmVlbXB0PTApCitBWF9NU0dfUkVTVUxUX1lOKFskcHJlZW1wdF0pCit0ZXN0ICIkcHJlZW1wdCIgPSAwIHx8IEFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gOiBDT05GSUdfUFJFRU1QVF0pCisKK0FDX1NVQlNUKEtJTkMpCisKK01PRElOU1RBTExESVI9L2xpYi9tb2R1bGVzLyRLVkVSUworIAorT1BST0ZJTEVfTU9EVUxFX0FSQ0g9JGFyY2gKK0FDX1NVQlNUKE9QUk9GSUxFX01PRFVMRV9BUkNIKQorXQorKQorCitkbmwgQVhfTVNHX1JFU1VMVF9ZTihhKQorZG5sIHJlc3VsdHMgInllcyIgaWZmIGE9PTEsICJubyIgZWxzZQorQUNfREVGVU4oW0FYX01TR19SRVNVTFRfWU5dLCBbeD1ubwordGVzdCAieCQxIiA9ICJ4MSIgJiYgeD15ZXMKK0FDX01TR19SRVNVTFQoJHgpXSkKKworZG5sIEFYX01BTExPQ19BVFRSSUJVVEUgLSBzZWUgaWYgZ2NjIHdpbGwgdGFrZSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKQorQUNfREVGVU4oW0FYX01BTExPQ19BVFRSSUJVVEVdLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK0FDX1RSWV9DT01QSUxFKCxbCit2b2lkIG1vbmtleSgpIF9fYXR0cmlidXRlX18oKG1hbGxvYykpOworXSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgQUNfREVGSU5FKE1BTExPQ19BVFRSSUJVVEVfT0ssIDEsIFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pLCBBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUyAKK10KKykKKworZG5sIGJ1aWx0aW5fZXhwZWN0IGlzIHVzZWQgaW4gbW9kdWxlIHdlIGNhbid0IGFkZCB0aGF0IGluIGNvbmZpZy5oCitBQ19ERUZVTihbQVhfQlVJTFRJTl9FWFBFQ1RdLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIF9fYnVpbHRpbl9leHBlY3QgaXMgdW5kZXJzdG9vZF0pCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK0FDX1RSWV9MSU5LKCxbCitpbnQgaTsKK2lmIChfX2J1aWx0aW5fZXhwZWN0KGksIDApKSB7IH0KK10sCitBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURFWFBFQ1RfT0siLAorQUNfTVNHX1JFU1VMVChbbm9dKTspCitDRkxBR1M9JFNBVkVfQ0ZMQUdTIAorXQorKSAKKworZG5sIEFYX0VYVFJBX0RJUlMgLSBMZXQgdXNlciBzcGVjaWZ5IGV4dHJhIGRpcnMgZm9yIGluY2x1ZGUvbGlicworQUNfREVGVU4oW0FYX0VYVFJBX0RJUlNdLAorWworQUNfQVJHX1dJVEgoZXh0cmEtaW5jbHVkZXMsCitbICAtLXdpdGgtZXh0cmEtaW5jbHVkZXM9RElSICAgIGFkZCBleHRyYSBpbmNsdWRlIHBhdGhzXSwKKyAgdXNlX2V4dHJhX2luY2x1ZGVzPSIkd2l0aHZhbCIsCisgIHVzZV9leHRyYV9pbmNsdWRlcz1OTworKQoraWYgdGVzdCAtbiAiJHVzZV9leHRyYV9pbmNsdWRlcyIgJiYgXAorICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAhPSAiTk8iOyB0aGVuCisgIGFjX3NhdmVfaWZzPSRJRlMKKyAgSUZTPSc6JworICBmb3IgZGlyIGluICR1c2VfZXh0cmFfaW5jbHVkZXM7IGRvCisgICAgZXh0cmFfaW5jbHVkZXM9IiRleHRyYV9pbmNsdWRlcyAtSSRkaXIiCisgIGRvbmUKKyAgSUZTPSRhY19zYXZlX2lmcworICBDUFBGTEFHUz0iJENQUEZMQUdTICRleHRyYV9pbmNsdWRlcyIKK2ZpCisKK0FDX0FSR19XSVRIKGV4dHJhLWxpYnMsCitbICAtLXdpdGgtZXh0cmEtbGlicz1ESVIgICAgICAgIGFkZCBleHRyYSBsaWJyYXJ5IHBhdGhzXSwKKyAgdXNlX2V4dHJhX2xpYnM9JHdpdGh2YWwsCisgIHVzZV9leHRyYV9saWJzPU5PCispCitpZiB0ZXN0IC1uICIkdXNlX2V4dHJhX2xpYnMiICYmIFwKKyAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9saWJzIiAhPSAiTk8iOyB0aGVuCisgICBhY19zYXZlX2lmcz0kSUZTCisgICBJRlM9JzonCisgICBmb3IgZGlyIGluICR1c2VfZXh0cmFfbGliczsgZG8KKyAgICAgZXh0cmFfbGlicmFyaWVzPSIkZXh0cmFfbGlicmFyaWVzIC1MJGRpciIKKyAgIGRvbmUKKyAgIElGUz0kYWNfc2F2ZV9pZnMKKyAgIExERkxBR1M9IiRMREZMQUdTICRleHRyYV9saWJyYXJpZXMiCitmaQorXQorKQorCitkbmwgQVhfUE9QVF9DT05TVCAtIGNoZWNrIHBvcHQgcHJvdG90eXBlCitBQ19ERUZVTihbQVhfUE9QVF9DT05TVF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3BvcHQgcHJvdG90eXBlXSkKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0iLVdlcnJvciAkQ1hYRkxBR1MiCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHBvcHQuaD5dLAorWworaW50IGM7IGNoYXIgKip2OworcG9wdEdldENvbnRleHQoMCwgYywgdiwgMCwgMCk7CitdLAorQUNfTVNHX1JFU1VMVChbdGFrZXMgY2hhciAqKl0pOywKK0FDX01TR19SRVNVTFQoW3Rha2VzIGNvbnN0IGNoYXIgKipdKTsgQUNfREVGSU5FKENPTlNUX1BPUFQsIDEsIFt3aGV0aGVyIHBvcHQgcHJvdG90eXBlIHRha2VzIGEgY29uc3QgY2hhciAqKl0pKQorQ1hYRkxBR1M9IiRTQVZFX0NYWEZMQUdTIgorXQorKQorCitkbmwgQVhfQ0hFQ0tfU1NUUkVBTSAtIGNoZWNrIGlmIGxvY2FsIHNzdHJlYW0gaXMgbmVlZGVkIHRvIGNvbXBpbGUgT0sKK0FDX0RFRlVOKFtBWF9DSEVDS19TU1RSRUFNXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgaW5jbHVkZWQgc3N0cmVhbV0pCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHNzdHJlYW0+XSwgW10sIAorQUNfTVNHX1JFU1VMVChbbm9dKTssCitBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgT1BfQ1hYRkxBR1M9IiRPUF9DWFhGTEFHUyAtSVwke3RvcF9zcmNkaXJ9L2luY2x1ZGUiKQorXQorKQorCitkbmwgQVhfQ0hFQ0tfVFlQRURFRih0eXBlZGVmX25hbWUsIHR5cGUsIGFjdGlvbi1pZi10cnVlLCBhY3Rpb24taWYtZmFsc2UpCitkbmwgZXhlYyBhY3Rpb24taWYtdHJ1ZSBpZiB0eXBlZGVmX25hbWUgaXMgYSB0eXBlZGVmIHRvIHR5cGUgZWxzZSBleGVjIAorZG5sIGFjdGlvbi1pZi1mYWxzZQorZG5sIGN1cnJlbnRseSB3b3JrIG9ubHkgd2l0aCB0eXBlIHR5cGVkZWYnZWQgaW4gc3RkZGVmLmgKK0FDX0RFRlVOKFtBWF9DSEVDS19UWVBFREVGXSwgWworZG5sIEFDX0xBTkdfUFVTSChDKSBub3QgaW4gYXV0b2NvbmYgMi4xMworQUNfTEFOR19TQVZFCitBQ19MQU5HX0MKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgorCitBQ19UUllfQ09NUElMRSgKKyAgWworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgIF0sCisgIFsKKyAgdHlwZWRlZiB2b2lkICgqZmN0MSkoJDEpOworICB0eXBlZGVmIHZvaWQgKCpmY3QyKSgkMik7CisgIGZjdDEgZjEgPSAwOworICBmY3QyIGYyID0gMDsKKyAgaWYgKGYxID09IGYyKSB7fQorICBdLAorWyQzXSxbJDRdKQorCitDRkxBR1M9JFNBVkVfQ0ZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKKworZG5sIEFYX1RZUEVERUZFRF9OQU1FKHR5cGVkZWZfbmFtZSwgY2FuZGlkYXRlX2xpc3QsIHZhcl9uYW1lKQorZG5sIHNldCB2YXJfbmFtZSB0byB0aGUgdHlwZWRlZiBuYW1lIG9mICQxIHdoaWNoIG11c3QgYmUgaW4gY2FuZGl0YXRlX2xpc3QKK2RubCBlbHNlIHByb2R1Y2UgYSBmYXRhbCBlcnJvcgorQUNfREVGVU4oW0FYX1RZUEVERUZFRF9OQU1FXSwgWworCUFDX01TR19DSEVDS0lORyhbdHlwZSBvZiAkMV0pCisJZm9yIGYgaW4gJDI7IGRvCisJCUFYX0NIRUNLX1RZUEVERUYoJDEsICRmLCAkMz0iJGYiLCAkMz0iIikKKwkJaWYgdGVzdCAtbiAiJHskM30iOyB0aGVuCisJCQlicmVhaworCQlmaQorCWRvbmUKKwlpZiB0ZXN0IC1uICIkeyQzfSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbJHskM31dKQorCWVsc2UKKwkJQUNfTVNHX0VSUk9SKFtub3QgZm91bmRdKQorCWZpCitdKQorCitkbmwgZmluZCBhIGJpbmFyeSBpbiB0aGUgcGF0aAorQUNfREVGVU4oW1FUX0ZJTkRfUEFUSF0sCitbCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCUFDX0NBQ0hFX1ZBTChxdF9jdl9wYXRoXyQxLAorCVsKKwkJcXRfY3ZfcGF0aF8kMT0iTk9ORSIKKwkJaWYgdGVzdCAtbiAiJCQyIjsgdGhlbgorCQkJcXRfY3ZfcGF0aF8kMT0iJCQyIjsKKwkJZWxzZQorCQkJZGlycz0iJDMiCisJCQlxdF9zYXZlX0lGUz0kSUZTCisJCQlJRlM9JzonCisJCQlmb3IgZGlyIGluICRQQVRIOyBkbworCQkJCWRpcnM9IiRkaXJzICRkaXIiCisJCQlkb25lCisJCQlJRlM9JHF0X3NhdmVfSUZTCisgCisJCQlmb3IgZGlyIGluICRkaXJzOyBkbworCQkJCWlmIHRlc3QgLXggIiRkaXIvJDEiOyB0aGVuCisJCQkJCWlmIHRlc3QgLW4gIiQ1IjsgdGhlbgorCQkJCQkJZXZhbHN0cj0iJGRpci8kMSAkNSAyPiYxICIKKwkJCQkJCWlmIGV2YWwgJGV2YWxzdHI7IHRoZW4KKwkJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJCWJyZWFrCisJCQkJCQlmaQorCQkJCQllbHNlCisJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJYnJlYWsKKwkJCQkJZmkKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCV0pCisgCisJaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfJDEiIHx8IHRlc3QgIiRxdF9jdl9wYXRoXyQxIiA9ICJOT05FIjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKwkJJDQKKwllbHNlCisJCUFDX01TR19SRVNVTFQoJHF0X2N2X3BhdGhfJDEpCisJCSQyPSRxdF9jdl9wYXRoXyQxCisJZmkKK10pCisKK2RubCBGaW5kIHRoZSB1aWMgY29tcGlsZXIgb24gdGhlIHBhdGggb3IgaW4gcXRfY3ZfZGlyCitBQ19ERUZVTihbUVRfRklORF9VSUNdLAorWworCVFUX0ZJTkRfUEFUSCh1aWMsIGFjX3VpYywgJHF0X2N2X2Rpci9iaW4pCisJaWYgdGVzdCAteiAiJGFjX3VpYyIgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbdWljIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorIAorZG5sIEZpbmQgdGhlIHJpZ2h0IG1vYyBpbiBwYXRoL3F0X2N2X2RpcgorQUNfREVGVU4oW1FUX0ZJTkRfTU9DXSwKK1sKKwlRVF9GSU5EX1BBVEgobW9jMiwgYWNfbW9jMiwgJHF0X2N2X2Rpci9iaW4pCisJUVRfRklORF9QQVRIKG1vYywgYWNfbW9jMSwgJHF0X2N2X2Rpci9iaW4pCisKKwlpZiB0ZXN0IC1uICIkYWNfbW9jMSIgLWEgLW4gIiRhY19tb2MyIjsgdGhlbgorCQlkbmwgZm91bmQgYm90aC4gUHJlZmVyIFF0MydzIGlmIGl0IGV4aXN0cyBlbHNlIG1vYzIKKwkJJGFjX21vYzEgLXYgMj4mMSB8IGdyZXAgIlF0IDMiID4vZGV2L251bGwKKwkJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgorCQkJYWNfbW9jPSRhY19tb2MxOworCQllbHNlCisJCQlhY19tb2M9JGFjX21vYzI7CisJCWZpCisJZWxzZQorCQlpZiB0ZXN0IC1uICIkYWNfbW9jMSI7IHRoZW4KKwkJCWFjX21vYz0kYWNfbW9jMTsKKwkJZWxzZQorCQkJYWNfbW9jPSRhY19tb2MyOworCQlmaQorCWZpCisKKwlpZiB0ZXN0IC16ICIkYWNfbW9jIiAgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbbW9jIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorCitkbmwgY2hlY2sgYSBwYXJ0aWN1bGFyIGxpYm5hbWUKK0FDX0RFRlVOKFtRVF9UUllfTElOS10sCitbCisJU0FWRV9MSUJTPSIkTElCUyIKKwlMSUJTPSIkTElCUyAkMSIKKwlBQ19UUllfTElOSyhbCisJI2luY2x1ZGUgPHFnbG9iYWwuaD4KKwkjaW5jbHVkZSA8cXN0cmluZy5oPgorCQldLAorCVsKKwlRU3RyaW5nIHMoIm1hbmdsZV9mYWlsdXJlIik7CisJI2lmIChRVF9WRVJTSU9OIDwgMjIxKQorCWJyZWFrX21lXyhcXFwpOworCSNlbmRpZgorCV0sCisJcXRfY3ZfbGlibmFtZT0kMSwKKwkpCisJTElCUz0iJFNBVkVfTElCUyIKK10pCisgCitkbmwgY2hlY2sgd2UgY2FuIGRvIGEgY29tcGlsZQorQUNfREVGVU4oW1FUX0NIRUNLX0NPTVBJTEVdLAorWworCUFDX01TR19DSEVDS0lORyhbZm9yIFF0IGxpYnJhcnkgbmFtZV0pCisgCisJQUNfQ0FDSEVfVkFMKHF0X2N2X2xpYm5hbWUsCisJWworCQlBQ19MQU5HX0NQTFVTUExVUworCQlTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworCQlDWFhGTEFHUz0iJENYWEZMQUdTICRRVF9JTkNMVURFUyAkUVRfTERGTEFHUyIgCisKKwkJZm9yIGxpYm5hbWUgaW4gLWxxdC1tdCAtbHF0MyAtbHF0MiAtbHF0OworCQlkbworCQkJUVRfVFJZX0xJTksoJGxpYm5hbWUpCisJCQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJCQlicmVhazsKKwkJCWZpCisJCWRvbmUKKworCQlDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworCV0pCisKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbZmFpbGVkXSkgCisJCWlmIHRlc3QgIiRGQVRBTCIgPSAxIDsgdGhlbgorCQkJQUNfTVNHX0VSUk9SKFtDYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBRdCBleGVjdXRhYmxlLiBDaGVjayB5b3UgaGF2ZSB0aGUgcmlnaHQgXCRRVERJUiAhXSkKKwkJZmkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoWyRxdF9jdl9saWJuYW1lXSkKKwlmaQorXSkKKworZG5sIGdldCBRdCB2ZXJzaW9uIHdlJ3JlIHVzaW5nCitBQ19ERUZVTihbUVRfR0VUX1ZFUlNJT05dLAorWworCUFDX0NBQ0hFX0NIRUNLKFtRdCB2ZXJzaW9uXSxseXhfY3ZfcXR2ZXJzaW9uLAorCVsKKwkJQUNfTEFOR19DUExVU1BMVVMKKwkJU0FWRV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUVRfSU5DTFVERVMiCisKKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisiJSUlIlFUX1ZFUlNJT05fU1RSIiUlJSIKK0VPRgorCQlseXhfY3ZfcXR2ZXJzaW9uPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8IFwKKwkJCWdyZXAgJ14iJSUlIicgIDI+L2Rldi9udWxsIHwgXAorCQkJc2VkIC1lICdzLyIlJSUiLy9nJyAtZSAncy8iLy9nJ2AKKwkJcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorCQlDUFBGTEFHUz0kU0FWRV9DUFBGTEFHUworCV0pCisgCisJUVRfVkVSU0lPTj0kbHl4X2N2X3F0dmVyc2lvbgorCUFDX1NVQlNUKFFUX1ZFUlNJT04pCitdKQorIAorZG5sIHN0YXJ0IGhlcmUgCitBQ19ERUZVTihbUVRfRE9fSVRfQUxMXSwKK1sKKwlkbmwgUGxlYXNlIGxlYXZlIHRoaXMgYWxvbmUuIEkgdXNlIHRoaXMgZmlsZSBpbgorCWRubCBvcHJvZmlsZS4KKwlGQVRBTD0wCisKKwlBQ19BUkdfV0lUSChxdC1kaXIsIFsgIC0td2l0aC1xdC1kaXIgICAgICAgICAgIHdoZXJlIHRoZSByb290IG9mIFF0IGlzIGluc3RhbGxlZCBdLAorCQlbIHF0X2N2X2Rpcj1gZXZhbCBlY2hvICIkd2l0aHZhbCIvYCBdKQorCSAKKwlBQ19BUkdfV0lUSChxdC1pbmNsdWRlcywgWyAgLS13aXRoLXF0LWluY2x1ZGVzICAgICAgd2hlcmUgdGhlIFF0IGluY2x1ZGVzIGFyZS4gXSwKKwkJWyBxdF9jdl9pbmNsdWRlcz1gZXZhbCBlY2hvICIkd2l0aHZhbCJgIF0pCisgCisJQUNfQVJHX1dJVEgocXQtbGlicmFyaWVzLCBbICAtLXdpdGgtcXQtbGlicmFyaWVzICAgICB3aGVyZSB0aGUgUXQgbGlicmFyeSBpcyBpbnN0YWxsZWQuXSwKKwkJWyAgcXRfY3ZfbGlicmFyaWVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAgXSkKKworCWRubCBwYXkgYXR0ZW50aW9uIHRvICRRVERJUiB1bmxlc3Mgb3ZlcnJpZGRlbgorCWlmIHRlc3QgLXogIiRxdF9jdl9kaXIiOyB0aGVuCisJCXF0X2N2X2Rpcj0kUVRESVIKKwlmaQorIAorCWRubCBkZXJpdmUgaW5jL2xpYiBpZiBuZWVkZWQKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfZGlyIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCQlxdF9jdl9pbmNsdWRlcz0kcXRfY3ZfZGlyL2luY2x1ZGUKKwkJZmkKKwkJaWYgdGVzdCAteiAiJHF0X2N2X2xpYnJhcmllcyI7IHRoZW4KKwkJCXF0X2N2X2xpYnJhcmllcz0kcXRfY3ZfZGlyL2xpYgorCQlmaQorCWZpCisKKwlkbmwgZmxhZ3MgZm9yIGNvbXBpbGF0aW9uCisJUVRfSU5DTFVERVM9CisJUVRfTERGTEFHUz0KKwlpZiB0ZXN0IC1uICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCVFUX0lOQ0xVREVTPSItSSRxdF9jdl9pbmNsdWRlcyIKKwlmaQorCWlmIHRlc3QgLW4gIiRxdF9jdl9saWJyYXJpZXMiOyB0aGVuCisJCVFUX0xERkxBR1M9Ii1MJHF0X2N2X2xpYnJhcmllcyIKKwlmaQorCUFDX1NVQlNUKFFUX0lOQ0xVREVTKQorCUFDX1NVQlNUKFFUX0xERkxBR1MpCisgCisJUVRfRklORF9NT0MKKwlNT0M9JGFjX21vYworCUFDX1NVQlNUKE1PQykKKwlRVF9GSU5EX1VJQworCVVJQz0kYWNfdWljCisJQUNfU1VCU1QoVUlDKQorCisJUVRfQ0hFQ0tfQ09NUElMRQorIAorCVFUX0xJQj0kcXRfY3ZfbGlibmFtZTsKKwlBQ19TVUJTVChRVF9MSUIpCisKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJUVRfR0VUX1ZFUlNJT04KKwlmaQorXSkKKworZG5sIEFYX0NYWEZMQUdTX09QVElPTlModmFyLW5hbWUsIG9wdGlvbikKK2RubCBhZGQgb3B0aW9uIHRvIHZhci1uYW1lIGlmICRDWFggc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DSEVDS19QUkVDT01QSUxFRF9IRUFERVJdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDWFh9IHN1cHBvcnQgcHJlY29tcGlsZWQgaGVhZGVyXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DUExVU1BMVVMKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitkbmwgd2UgY29uc2lkZXIgdGhhbiBpZiAtV2ludmFsaWQtcGNoIGlzIGFjY2VwdGVkIHBjaCB3aWxsIHdvcmtzIC4uLgorQ1hYRkxBR1M9LVdpbnZhbGlkLXBjaAorZG5sIGJ1dCB3ZSBkb24ndCB3YW50IC1XaW52YWxpZC1wY2ggZWxzZSBjb21waWxhdGlvbiB3aWxsIGZhaWwgZHVlIC1XZXJyb3IgYW5kCitkbmwgdGhlIGZhY3QgdGhhbiBzb21lIHBjaCB3aWxsIGJlIGludmFsaWQgZm9yIHRoZSBnaXZlbiBjb21waWxhdGlvbiBvcHRpb24KK0FDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7ICQxPSIkeyQxfSAtaW5jbHVkZSBiaXRzL3N0ZGMrKy5oIiwgQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKK2RubCBBWF9DSEVDS19ET0NCT09LCitBQ19ERUZVTihbQVhfQ0hFQ0tfRE9DQk9PS10sIFsKKyMgSXQncyBqdXN0IHJ1ZGUgdG8gZ28gb3ZlciB0aGUgbmV0IHRvIGJ1aWxkCitYU0xUUFJPQ19GTEFHUz0tLW5vbmV0CitET0NCT09LX1JPT1Q9CitpZiB0ZXN0ICEgLWYgL2V0Yy94bWwvY2F0YWxvZzsgdGhlbgorCWZvciBpIGluIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3N0eWxlc2hlZXQveHNsL253YWxzaCAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMvOworCWRvCisJCWlmIHRlc3QgLWQgIiRpIjsgdGhlbgorCQkJRE9DQk9PS19ST09UPSRpCisJCWZpCisJZG9uZQorCisJIyBMYXN0IHJlc29ydCAtIHRyeSBuZXQKKwlpZiB0ZXN0IC16ICIkRE9DQk9PS19ST09UIjsgdGhlbgorCQlYU0xUUFJPQ19GTEFHUz0KKwlmaQorZWxzZQorCVhNTF9DQVRBTE9HPS9ldGMveG1sL2NhdGFsb2cKKwlDQVRfRU5UUllfU1RBUlQ9JzwhLS0nCisJQ0FUX0VOVFJZX0VORD0nLS0+JworZmkKKworQUNfQ0hFQ0tfUFJPRyhYU0xUUFJPQyx4c2x0cHJvYyx4c2x0cHJvYywpCitYU0xUUFJPQ19XT1JLUz1ubworaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhbd2hldGhlciB4c2x0cHJvYyB3b3Jrc10pCisKKwlpZiB0ZXN0IC1uICIkWE1MX0NBVEFMT0ciOyB0aGVuCisJCURCX0ZJTEU9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2RvY2Jvb2sueHNsIgorCWVsc2UKKwkJREJfRklMRT0iJERPQ0JPT0tfUk9PVC9kb2Nib29rLnhzbCIKKwlmaQorCisJJFhTTFRQUk9DICRYU0xUUFJPQ19GTEFHUyAkREJfRklMRSA+L2Rldi9udWxsIDI+JjEgPDwgRU5ECis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KKzxib29rIGlkPSJ0ZXN0Ij4KKzwvYm9vaz4KK0VORAorCWlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KKwkJWFNMVFBST0NfV09SS1M9eWVzCisJZmkKKwlBQ19NU0dfUkVTVUxUKCRYU0xUUFJPQ19XT1JLUykKK2ZpCitBTV9DT05ESVRJT05BTChoYXZlX3hzbHRwcm9jLCB0ZXN0ICIkWFNMVFBST0NfV09SS1MiID0gInllcyIpCisKK0FDX1NVQlNUKFhNTF9DQVRBTE9HKQorQUNfU1VCU1QoWFNMVFBST0NfRkxBR1MpCitBQ19TVUJTVChET0NCT09LX1JPT1QpCitBQ19TVUJTVChDQVRfRU5UUllfU1RBUlQpCitBQ19TVUJTVChDQVRfRU5UUllfRU5EKQorXSkKKworZG5sIEFYX0NGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ0Mgc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q0N9ICQyIGlzIHVuZGVyc3Rvb2RdKQorQUNfTEFOR19TQVZFCitBQ19MQU5HX0MKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCisKK2RubCBBWF9DWFhGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ1hYIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ1hYRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q1hYfSAkMiBpcyB1bmRlcnN0b29kXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DUExVU1BMVVMKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworZG5sIEFYX0NPUFlfSUZfQ0hBTkdFKHNvdXJjZSwgZGVzdCkKK2RubCBjb3B5IHNvdXJjZSB0byBkZXN0IGlmIHRoZXkgZG9uJ3QgY29tcGFyZSBlcXVhbGx5IG9yIGlmIGRlc3QgZG9lc24ndCBleGlzdAorQUNfREVGVU4oW0FYX0NPUFlfSUZfQ0hBTkdFXSwgWworaWYgdGVzdCAtciAkMjsgdGhlbgorCWlmIGNtcCAkMSAkMiA+IC9kZXYvbnVsbDsgdGhlbgorCQllY2hvICQyIGlzIHVuY2hhbmdlZAorCWVsc2UKKwkJY3AgLWYgJDEgJDIKKwlmaQorZWxzZQorCWNwIC1mICQxICQyCitmaQorXSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJiNmM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorb3Byb2ZpbGUgZG9lc24ndCB3YW50IEdOVS1sZXZlbHMgb2YgYXV0b21ha2Ugc3RyaWN0bmVzcyBzbyB0ZWxsIGl0IHRvIGJlICJmb3JlaWduIi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1NzQwNTg1Li5jZjZjMzE2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNiArMTYgQEAgQUNfQ09ORklHX1NSQ0RJUihbbGlib3Avb3BfY29uZmlnLmhdKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmYTk1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK1ByZXZlbnQgcnVubmluZyBjaGVjayB0ZXN0cyBvbiBob3N0IGlmIGNyb3NzIGNvbXBpbGluZworCitUaGlzIHBhdGNoIGVuYWJsZXMgcnVubmluZyB0aGUgJ21ha2UgY2hlY2snIHRlc3RzIG9uIHRoZSB0YXJnZXQKK2luIGEgY3Jvc3MtY29tcGlsZWQgZW52aXJvbm1lbnQuIElmIG5vdCBjcm9zcy1jb21waWxpbmcsIHRoZW4gJ21ha2UKKyBjaGVjaycgYnVpbGRzIGFuZCBleGVjdXRlcyB0aGUgdGVzdHM7IG5vIGNoYW5nZSBmcm9tIHRoaXMgcGF0Y2guCitJbiBhIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudCwgdGhlIG1ha2UgdmFyaWFibGUgQ1JPU1NfQ09NUElMRSBpcworc2V0IHdoaWNoIGJ5cGFzc2VzIGFzc2lnaW5nIHRlc3RzIHRvIHRoZSBtYWtla2ZpbGUgdmFyaWFibGUgVEVTVFMuCitTaW5jZSBURVNUUyBpcyBlbXB0eSwgdGhlICdtYWtlIGNoZWNrJyBwcm9jZXNzIG5ldmVyIHRyaWVzIHRvIHJ1biB0aGUKK3Rlc3RzIG9uIHRoZSBob3N0cy4gIE9uIHRoZSB0YXJnZXQsIHRoZSB0ZXN0cyBtdXN0IGJlIHJ1biBtYW51YWxseS4KKworQWxzbywgaW4gdGhlIGxpYnV0aWwrKyB0ZXN0cywgYSBtYWtlZmlsZSB2YXJpYWJsZSBTUkNESVIgaXMgcGFzc2VkIGludG8KK3RoZSBjb21waWxhdGlvbiBwaGFzZSwgcG9pbnRpbmcgdG8gdGhlIHJ1bnRpbWUgbG9jYXRpb24gb2YgdGhlIHRlc3QKKydmaWxlLW1hbmlwLXRlc3RzJy4gIFRoZSBtZWNoYW5pc20gdXNlZCBmb3IgYSBob3N0IHRlc3QsIGJhc2VkIG9uCisndG9wZGlyJyBkb2Vzbid0IHdvcmsuICBJbnN0ZWFkLCBpZiBDUk9TU19DT01QSUxFIGlzIHNldCwgdGhlCittYWtlZmlsZSB0YWtlcyB0aGUgcGF0aCBvZiBTUkNESVIgZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIG5vdAorZnJvbSBhbiBleHByZXNzaW9uIGJhc2VkIG9uIHRoZSBob3N0IHBhdGggJ3RvcGRpcicuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDFlY2U2NC4uY2U1YTE2ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkyLDYgKzM5Miw3IEBAIEFDX0FSR19FTkFCTEUoYWNjb3VudC1jaGVjaywKKyAJZW5hYmxlX2FjY291bnRfY2hlY2s9JGVuYWJsZXZhbCwgZW5hYmxlX2FjY291bnRfY2hlY2s9eWVzKQorIAorIEFNX0NPTkRJVElPTkFMKENIRUNLX0FDQ09VTlQsIHRlc3QgIngkZW5hYmxlX2FjY291bnRfY2hlY2siID0gInh5ZXMiKQorK0FNX0NPTkRJVElPTkFMKENST1NTX0NPTVBJTEUsIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiA9ICJ4eWVzIikKKyAKKyBBQ19TVUJTVChPUF9DRkxBR1MpCisgQUNfU1VCU1QoT1BfQ1hYRkxBR1MpCitkaWZmIC0tZ2l0IGEvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggOGE2OTAwMy4uZDgyMDA5MCAxMDA2NDQKKy0tLSBhL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEzLDQgKzEzLDYgQEAgY2hlY2tfUFJPR1JBTVMgPSBkYl90ZXN0CisgZGJfdGVzdF9TT1VSQ0VTID0gZGJfdGVzdC5jCisgZGJfdGVzdF9MREFERCA9IC4uL2xpYm9kYi5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQorK2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggOGE3OWViNS4uNmQ0MTdjNCAxMDA2NDQKKy0tLSBhL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTMzLDQgKzMzLDYgQEAgbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIG1hbmdsZV90ZXN0c19TT1VSQ0VTID0gbWFuZ2xlX3Rlc3RzLmMKKyBtYW5nbGVfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30gdXRmOF9jaGVja2VyLnNoCisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA2ZjE5ODM4Li4xZDE3NmY5IDEwMDY0NAorLS0tIGEvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTgsNCArMTgsNiBAQCBqYXZhX3Rlc3RfTERBREQgPSBcCisgCisgRVhUUkFfRElTVCA9IG1hbmdsZWQtbmFtZS5pbgorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNTFhZjAzMS4uYTAxZWEyZCAxMDA2NDQKKy0tLSBhL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw3ICsxLDkgQEAKKyAKKyBSRUFMUEFUSD0gcmVhZGxpbmsgLWYKKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBTUkNESVIgOj0gJChzaGVsbCAkKFJFQUxQQVRIKSAkKHRvcGRpcikvbGlidXRpbCsrL3Rlc3RzLyApCisrZW5kaWYKKyAKKyBBTV9DUFBGTEFHUyA9IFwKKyAJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUQgU1JDRElSPSJcIiQoU1JDRElSKS9cIiIgQE9QX0NQUEZMQUdTQAorQEAgLTQ2LDQgKzQ4LDYgQEAgY2FjaGVkX3ZhbHVlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyB1dGlsaXR5X3Rlc3RzX1NPVVJDRVMgPSB1dGlsaXR5X3Rlc3RzLmNwcAorIHV0aWxpdHlfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBkZmNkNmVjLi5lODgzMWI1IDEwMDY0NAorLS0tIGEvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEyLDQgKzEyLDYgQEAgZmlsZV90ZXN0c19MREFERCA9IC4uL2xpYnV0aWwuYQorIHN0cmluZ190ZXN0c19TT1VSQ0VTID0gc3RyaW5nX3Rlc3RzLmMKKyBzdHJpbmdfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3Jvb3QtaG9tZS1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYzVlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK29wcm9maWxlOiBEZXRlcm1pbmUgdGhlIHJvb3QgaG9tZSBkaXJlY3RvcnkgZHluYW1pY2FsbHkKKworVGhpcyBjb21taXQgZGV0ZWN0cyB0aGUgcm9vdCBob21lIGRpcmVjdG9yeSBkeW5hbWljYWxseSB3aXRoIGNoYW5nZXMgdG8KK3RoZSBvcHJvZmlsZSBndWkgYXBwIHNvdXJjZS4KKworVGhlIGNvbW1pdCByZXBsYWNlcyBhbiBlYXJsaWVyIGZpeCB0aGF0IGRldGVjdGVkIGFuZCBhZGp1c3RlZCBhCisnbm9uLXN0YW5kYXJkJyByb290IGhvbWUgZGlyZWN0b3J5IGF0IGJ1aWxkIHRpbWUuICBUaGUgYWR2YW50YWdlIG9mIHRoaXMKK3BhdGNoIGlzIHRoYXQgdGhlIG9wcm9maWxlIHRvb2xzIGFyZSBhZGp1c3RlZCB0byB0aGUgY3VycmVudCBydW4tdGltZQorcGF0aCB0byB+cm9vdCwgbm90IHRoZSBidWlsZCB0aW1lIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitJbmRleDogb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLmh0bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcHJvZmlsZS0xLjAuMC5vcmlnL2RvYy9vcHJvZmlsZS5odG1sCTIwMTQtMTEtMDMgMTc6NTU6MzEuNTExMDM0ODU3ICswMDAwCisrKysgb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLmh0bWwJMjAxNC0xMS0wMyAxNzo1NzoyNi40MTUwMzc5ODggKzAwMDAKK0BAIC0xNTYzLDggKzE1NjMsOCBAQAorIAkJPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bXVzdDwvZW0+PC9zcGFuPiBzdG9wIGl0IGluIGEgY29udHJvbGxlZCBtYW5uZXIgaW4gb3JkZXIgdG8gcHJvY2VzcworIAkJdGhlIHByb2ZpbGUgZGF0YSBpdCBoYXMgY29sbGVjdGVkLiAgVXNlIDxjb2RlIGNsYXNzPSJjb2RlIj5raWxsIC1TSUdJTlQgJmx0O29wZXJmLVBJRCZndDs8L2NvZGU+CisgCQlmb3IgdGhpcyBwdXJwb3NlLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHdoZW4gcnVubmluZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGVyZjwvc3Ryb25nPjwvc3Bhbj4KKy0JCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vcm9vdDwvY29kZT4gb3IgYSBzdWJkaXJlY3RvcnkKKy0JCW9mIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Jvb3Q8L2NvZGU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKysJCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5+cm9vdDwvY29kZT4gb3IgYSBzdWJkaXJlY3RvcnkKKysJCW9mIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fnJvb3Q8L2NvZGU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKyAJCTwvcD4KKyAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICA8ZHQ+CitJbmRleDogb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLnhtbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wcm9maWxlLTEuMC4wLm9yaWcvZG9jL29wcm9maWxlLnhtbAkyMDE0LTExLTAzIDE3OjU1OjMxLjUxNTAzNDg1NyArMDAwMAorKysrIG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS54bWwJMjAxNC0xMS0wMyAxNzo1ODowMy43MTkwMzkwMDUgKzAwMDAKK0BAIC02NTQsOCArNjU0LDggQEAKKyAJCTxlbXBoYXNpcz5tdXN0PC9lbXBoYXNpcz4gc3RvcCBpdCBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGluIG9yZGVyIHRvIHByb2Nlc3MKKyAJCXRoZSBwcm9maWxlIGRhdGEgaXQgaGFzIGNvbGxlY3RlZC4gIFVzZSA8Y29kZT5raWxsIC1TSUdJTlQgJmx0O29wZXJmLVBJRCZndDs8L2NvZGU+CisgCQlmb3IgdGhpcyBwdXJwb3NlLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHdoZW4gcnVubmluZyA8Y29tbWFuZD5vcGVyZjwvY29tbWFuZD4KKy0JCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGZpbGVuYW1lPi9yb290PC9maWxlbmFtZT4gb3IgYSBzdWJkaXJlY3RvcnkKKy0JCW9mIDxmaWxlbmFtZT4vcm9vdDwvZmlsZW5hbWU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKysJCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGZpbGVuYW1lPn5yb290PC9maWxlbmFtZT4gb3IgYSBzdWJkaXJlY3RvcnkKKysJCW9mIDxmaWxlbmFtZT5+cm9vdDwvZmlsZW5hbWU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKyAJCTwvcGFyYT48L2xpc3RpdGVtPgorIAk8L3Zhcmxpc3RlbnRyeT4KKyAJPHZhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTRiZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCitzYXZlZF9kaXI9JFBXRAorZm9yIGRpciBpbiAqL3Rlc3RzIDsgZG8KKwljZCAkZGlyCisJZm9yIGF0ZXN0IGluICogOyBkbworCQlpZiBbIFwoIC14ICRhdGVzdCBcKSAtYSBcKCAtZiAkYXRlc3QgXCkgXSA7IHRoZW4KKwkJCS4vJGF0ZXN0ID4gJHthdGVzdH0uc3Rkb3V0IDI+ICR7YXRlc3R9LnN0ZGVycgorCQkJaWYgWyAkPyA9IDAgXSA7IHRoZW4KKwkJCQllY2hvICJQQVNTOiAkZGlyICRhdGVzdCIKKwkJCQlybSAke2F0ZXN0fS5zdGRvdXQgJHthdGVzdH0uc3RkZXJyCisJCQllbHNlCisJCQkJZWNobyAiRkFJTDogJHtkaXJ9LyR7YXRlc3R9IgorCQkJZmkKKwkJZmkKKwlkb25lCisJY2QgJHNhdmVkX2RpcgorZG9uZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhOTRhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZV8xLjEuMC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIG9wcm9maWxlLmluYworCitERVBFTkRTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKK0RFUEVORFNfYXBwZW5kX3Bvd2VycGM2NCA9ICIgbGlicGZtNCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI0OGM0YzA2OWY5NDc2ZjQyN2ZhNzE5NTU2M2Y5ODY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmNzU5YTZkZTFhNjAzM2Q1ZGZjOTNiZGExMjlhOWYyZTEyOGFlY2M0MjM4Y2M2NTdmZWIwODAxZDFiMDM2NmMiCisKK1MgPSAiJHtXT1JLRElSfS9vcHJvZmlsZS0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTQ0ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBvcHJvZmlsZS1zZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE9Qcm9maWxlVUkgc2VydmVyCisjIERlc2NyaXB0aW9uOiAgICAgICAKKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICAgICAgZWNobyAiU3RhcnRpbmcgT1Byb2ZpbGVVSSBzZXJ2ZXIiCisJLiAvZXRjL3Byb2ZpbGUKKwkvdXNyL2Jpbi9vcHJvZmlsZS1zZXJ2ZXIgJgorICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIE9Qcm9maWxlVUkgc2VydmVyIgorICAgICAgICBraWxscHJvYyBvcHJvZmlsZS1zZXJ2ZXIKKyAgOzsKKworICByZXN0YXJ0KQorCSQwIHN0b3AKKyAgICAgICAgc2xlZXAgMQorICAgICAgICAkMCBzdGFydAorICA7OworCisgICopCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIKKyAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmNiZTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQpAQCAtMCwwICsxLDYgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T1Byb2ZpbGVVSSBTZXJ2ZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS9iaW4vc2ggLWMgIi4gQFNZU0NPTkZESVJAL3Byb2ZpbGU7IEBCSU5ESVJAL29wcm9maWxlLXNlcnZlciIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlcl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2I3OGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK3JlcXVpcmUgb3Byb2ZpbGV1aS5pbmMKKworU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgIgorCitERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNsaWVudCAtLWVuYWJsZS1zZXJ2ZXIiCisKK1JERVBFTkRTXyR7UE59ID0gIm9wcm9maWxlIGF2YWhpLWRhZW1vbiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vcHJvZmlsZXVpLXNlcnZlcgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJc2VkIC1pIC1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJvcHJvZmlsZXVpLXNlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wcm9maWxldWktc2VydmVyLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjZjAxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlVzZXIgSW50ZXJmYWNlIGZvciB0aGUgU3lzdGVtLVdpZGUgUHJvZmlsZXIiCitERVNDUklQVElPTiA9ICJVc2VyIGludGVyZmFjZSBmb3IgdGhlIE9Qcm9maWxlIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vbGFicy5vLWhhbmQuY29tL29wcm9maWxldWkvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgYXZhaGkgaW50bHRvb2wtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWF2YWhpIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2OWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIG9wcm9maWxldWkuaW5jCisKK0RFUEVORFMgKz0gImd0aysgbGliZ2xhZGUgbGlieG1sMiBhdmFoaS11aSBnY29uZiIKKworU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1jbGllbnQgLS1kaXNhYmxlLXNlcnZlciIKKworUEFDS0FHRVMgPSsgIm9wcm9maWxldWktdmlld2VyIgorCitGSUxFU19vcHJvZmlsZXVpLXZpZXdlciA9ICIke2JpbmRpcn0vb3BhcmNoY29udiAke2JpbmRpcn0vb3Byb2ZpbGUtdmlld2VyICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyAke2RhdGFkaXJ9L29wcm9maWxldWkvICR7ZGF0YWRpcn0vaWNvbnMiCitSREVQRU5EU19vcHJvZmlsZXVpLXZpZXdlciA9ICJvcHJvZmlsZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi1mZWF0dXJlcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NTlhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jCkBAIC0wLDAgKzEsMjIgQEAKK1BFUkZfRkVBVFVSRVNfRU5BQkxFID89ICJwZXJmLXNjcmlwdGluZyBwZXJmLXR1aSIKKworZGVmIHBlcmZfZmVhdHVyZV9lbmFibGVkKGZlYXR1cmUsIHRydWV2YWwsIGZhbHNldmFsLCBkKToKKyAgICAiIiIKKyAgICBDaGVjayB3aGljaCBwZXJmIGZlYXR1cmVzIGFyZSBlbmFibGVkLgorCisgICAgVGhlIFBFUkZfRkVBVFVSRVNfRU5BQkxFIHZhcmlhYmxlIGxpc3RzIHRoZSBwZXJmIGZlYXR1cmVzIHRvCisgICAgZW5hYmxlLiAgT3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIHdoYXQncworICAgIGxpc3RlZCBhYm92ZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuICBJZiBlbXB0eSwgdGhlIGJ1aWxkIHdvbid0CisgICAgZW5hYmxlIGFueSBmZWF0dXJlcyAod2hpY2ggbWF5IGJlIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCwganVzdCBhCisgICAgYmFyZWJvbmVzIHBlcmYgd2l0aG91dCBhbnkgZXh0cmEgYmFnZ2FnZSwgd2hhdCB5b3UgZ2V0IGlmIHlvdQorICAgIHNwZWNpZnkgYW4gZW1wdHkgZmVhdHVyZSBsaXN0KS4KKworICAgIEF2YWlsYWJsZSBwZXJmIGZlYXR1cmVzOgorICAgICAgcGVyZi1zY3JpcHRpbmc6IGVuYWJsZSBzdXBwb3J0IGZvciBQZXJsIGFuZCBQeXRob24gYmluZGluZ3MKKyAgICAgIHBlcmYtdHVpOiBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIHBlcmYgVFVJICh2aWEgbGlibmV3dCkKKworICAgICIiIgorICAgIGVuYWJsZWRfZmVhdHVyZXMgPSBkLmdldFZhcigiUEVSRl9GRUFUVVJFU19FTkFCTEUiLCBUcnVlKSBvciAiIgorICAgIGlmIGZlYXR1cmUgaW4gZW5hYmxlZF9mZWF0dXJlczoKKyAgICAgICAgcmV0dXJuIHRydWV2YWwKKyAgICByZXR1cm4gZmFsc2V2YWwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYmQzYzgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCkBAIC0wLDAgKzEsMjEwIEBACitTVU1NQVJZID0gIlBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2xzIGZvciBMaW51eCIKK0RFU0NSSVBUSU9OID0gIlBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvciBMaW51eCBhcmUgYSBuZXcga2VybmVsLWJhc2VkIFwKK3N1YnN5c3RlbSB0aGF0IHByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIGFsbCB0aGluZ3MgXAorcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEl0IGNvdmVycyBoYXJkd2FyZSBsZXZlbCBcCisoQ1BVL1BNVSwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0KSBmZWF0dXJlcyBcCithbmQgc29mdHdhcmUgZmVhdHVyZXMgKHNvZnR3YXJlIGNvdW50ZXJzLCB0cmFjZXBvaW50cykgXAorYXMgd2VsbC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworUFIgPSAicjkiCisKK3JlcXVpcmUgcGVyZi1mZWF0dXJlcy5pbmMKKworQlVJTERQRVJGX2xpYmMtdWNsaWJjID0gIm5vIgorCisjIGd1aSBzdXBwb3J0IHdhcyBhZGRlZCB3aXRoIGtlcm5lbCAzLjYuMzUKKyMgc2luY2UgMy4xMCBsaWJuZXd0IHdhcyByZXBsYWNlZCBieSBzbGFuZworIyB0byBjb3ZlciBhIHdpZGUgcmFuZ2Ugb2Yga2VybmVsIHdlIGFkZCBib3RoIGRlcGVuZGVuY2llcworVFVJX0RFUEVORFMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtdHVpJywgJ2xpYm5ld3Qgc2xhbmcnLCAnJyxkKX0iCitTQ1JJUFRJTkdfREVQRU5EUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAncGVybCBweXRob24nLCAnJyxkKX0iCitMSUJVTldJTkRfREVQRU5EUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1saWJ1bndpbmQnLCAnbGlidW53aW5kJywgJycsZCl9IgorCitERVBFTkRTID0gIiBcCisgICAgdmlydHVhbC8ke01MUFJFRklYfWxpYmMgXAorICAgICR7TUxQUkVGSVh9ZWxmdXRpbHMgXAorICAgICR7TUxQUkVGSVh9YmludXRpbHMgXAorICAgICR7VFVJX0RFUEVORFN9IFwKKyAgICAke1NDUklQVElOR19ERVBFTkRTfSBcCisgICAgJHtMSUJVTldJTkRfREVQRU5EU30gXAorICAgIGJpc29uIGZsZXggeHogXAorIgorCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL3BlcmYiCisKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2Uga2VybmVsLWFyY2ggcHl0aG9ubmF0aXZlCisKKyMgbmVlZGVkIGZvciBidWlsZGluZyB0aGUgdG9vbHMvcGVyZiBQeXRob24gYmluZGluZ3MKK2luaGVyaXQgcHl0aG9uLWRpcgorZXhwb3J0IFNUQUdJTkdfSU5DRElSCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworZXhwb3J0IFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSCisKKyNrZXJuZWwgMy4xKyBzdXBwb3J0cyBXRVJST1IgdG8gZGlzYWJsZSB3YXJuaW5ncyBhcyBlcnJvcnMKK2V4cG9ydCBXRVJST1IgPSAiMCIKKworZG9fcG9wdWxhdGVfbGljW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19wYXRjaCIKKworIyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSB0b29scy9wZXJmIFBlcmwgYmluZGluZworaW5oZXJpdCBwZXJsbmF0aXZlIGNwYW4tYmFzZQorIyBFbnYgdmFyIHdoaWNoIHRlbGxzIHBlcmwgaWYgaXQgc2hvdWxkIHVzZSBob3N0IChubykgb3IgdGFyZ2V0ICh5ZXMpIHNldHRpbmdzCitleHBvcnQgUEVSTENPTkZJR1RBUkdFVCA9ICIke0Bpc190YXJnZXQoZCl9IgorZXhwb3J0IFBFUkxfSU5DID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0vQ09SRSIKK2V4cG9ydCBQRVJMX0xJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorCitpbmhlcml0IGtlcm5lbHNyYworCitCID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9IgorU1BEWF9TID0gIiR7U30vdG9vbHMvcGVyZiIKKworU0NSSVBUSU5HX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJycsICdOT19MSUJQRVJMPTEgTk9fTElCUFlUSE9OPTEnLGQpfSIKK1RVSV9ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXR1aScsICcnLCAnTk9fTkVXVD0xJyxkKX0iCitMSUJVTldJTkRfREVGSU5FUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1saWJ1bndpbmQnLCAnJywgJ05PX0xJQlVOV0lORD0xIE5PX0xJQkRXX0RXQVJGX1VOV0lORD0xJyxkKX0iCitMSUJOVU1BX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtbGlibnVtYScsICcnLCAnTk9fTElCTlVNQT0xJyxkKX0iCisKKyMgVGhlIExERkxBR1MgaXMgcmVxdWlyZWQgb3Igc29tZSBvbGQga2VybmVscyBmYWlscyBkdWUgbWlzc2luZworIyBzeW1ib2xzIGFuZCB0aGlzIGlzIHByZWZlcnJlZCB0aGFuIHJlcXVpcmluZyBwYXRjaGVzIHRvIGV2ZXJ5IG9sZAorIyBzdXBwb3J0ZWQga2VybmVsLgorTERGTEFHUz0iLWxkbCAtbHV0aWwiCisKK0VYVFJBX09FTUFLRSA9ICdcCisgICAgLUMgJHtTfS90b29scy9wZXJmIFwKKyAgICBPPSR7Qn0gXAorICAgIENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgQVJDSD0ke0FSQ0h9IFwKKyAgICBDQz0iJHtDQ30iIFwKKyAgICBBUj0iJHtBUn0iIFwKKyAgICBFWFRSQV9DRkxBR1M9Ii1sZHciIFwKKyAgICBwZXJmZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKKyAgICBOT19HVEsyPTEgJHtUVUlfREVGSU5FU30gTk9fRFdBUkY9MSAke0xJQlVOV0lORF9ERUZJTkVTfSBcCisgICAgJHtTQ1JJUFRJTkdfREVGSU5FU30gJHtMSUJOVU1BX0RFRklORVN9IFwKKycKKworRVhUUkFfT0VNQUtFICs9ICJcCisgICAgJ3ByZWZpeD0ke3ByZWZpeH0nIFwKKyAgICAnYmluZGlyPSR7YmluZGlyfScgXAorICAgICdzaGFyZWRpcj0ke2RhdGFkaXJ9JyBcCisgICAgJ3N5c2NvbmZkaXI9JHtzeXNjb25mZGlyfScgXAorICAgICdwZXJmZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9L3BlcmYtY29yZScgXAorICAgIFwKKyAgICAnRVRDX1BFUkZDT05GSUc9JHtAb3MucGF0aC5yZWxwYXRoKHN5c2NvbmZkaXIsIHByZWZpeCl9JyBcCisgICAgJ3NoYXJlZGlyPSR7QG9zLnBhdGgucmVscGF0aChkYXRhZGlyLCBwcmVmaXgpfScgXAorICAgICdtYW5kaXI9JHtAb3MucGF0aC5yZWxwYXRoKG1hbmRpciwgcHJlZml4KX0nIFwKKyAgICAnaW5mb2Rpcj0ke0Bvcy5wYXRoLnJlbHBhdGgoaW5mb2RpciwgcHJlZml4KX0nIFwKKyIKKworCitkb19jb21waWxlKCkgeworCSMgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyBleHBlY3RlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcKKwl1bnNldCBDRkxBR1MKKwlvZV9ydW5tYWtlIGFsbAorfQorCitkb19pbnN0YWxsKCkgeworCSMgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyBleHBlY3RlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcKKwl1bnNldCBDRkxBR1MKKwlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCisJIyB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoaXMgbWFrZSB0YXJnZXQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHBlcmYgdmVyc2lvbnMKKwlpZiBbICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAxLCAwLCBkKX0iID0gIjEiIF0gJiYgZ3JlcCAtcSBpbnN0YWxsLXB5dGhvbl9leHQgJHtTfS90b29scy9wZXJmL01ha2VmaWxlKjsgdGhlbgorCQlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsLXB5dGhvbl9leHQKKwlmaQorfQorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgIyBGaXggZm9yIHJlYnVpbGRpbmcKKyAgICBybSAtcmYgJHtCfS8KKyAgICBta2RpciAtcCAke0J9LworCisgICAgIyBJZiBidWlsZGluZyBhIG11bHRsaWIgYmFzZWQgcGVyZiwgdGhlIGluY29ycmVjdCBsaWJyYXJ5IHBhdGggd2lsbCBiZQorICAgICMgZGV0ZWN0ZWQgYnkgcGVyZiwgc2luY2UgaXQgdHJpZ2dlcnMgdmlhOiBpZmVxICgkKEFSQ0gpLHg4Nl82NCkuIEluIGEgMzIgYml0CisgICAgIyBidWlsZCwgd2l0aCBhIDY0IGJpdCBtdWx0aWxpYiwgdGhlIGFyY2ggd29uJ3QgbWF0Y2ggYW5kIHRoZSBkZXRlY3Rpb24gb2YgYSAKKyAgICAjIDY0IGJpdCBidWlsZCAoYW5kIGxpYnJhcnkpIGFyZSBub3QgZXhlY3RlZC4gVG8gZW5zdXJlIHRoYXQgbGlicmFyaWVzIGFyZQorICAgICMgaW5zdGFsbGVkIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uLCB3ZSBjYW4gdXNlIHRoZSB3ZWFrIGFzc2lnbm1lbnQgaW4gdGhlCisgICAgIyBjb25maWcvTWFrZWZpbGUuCisgICAgIworICAgICMgQWxzbyBuZWVkIHRvIHJlbG9jYXRlIC5jb25maWctZGV0ZWN0ZWQgdG8gJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZAorICAgICMgZm9yIGtlcm5lbCBzb3VyY2VzIHRoYXQgZG8gbm90IGFscmVhZHkgZG8gdGhpcworICAgICMgYXMgdHdvIGJ1aWxkcyAoZS5nLiBwZXJmIGFuZCBsaWIzMi1wZXJmIGZyb20gbXV0bGlsaWIgY2FuIGNvbmZsaWN0CisgICAgIyB3aXRoIGVhY2ggb3RoZXIgaWYgaXRzIGluIHRoZSBzaGFyZWQgc291cmNlIGRpcmVjdG9yeQorICAgICMKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlIiBdOyB0aGVuCisgICAgICAgICMgTWF0Y2ggJChwcmVmaXgpLyQobGliKSBhbmQgJChwcmVmaXgpL2xpYgorICAgICAgICBzZWQgLWkgLWUgJ3MsXmxpYmRpciA9IFwoJChwcmVmaXgpLy4qbGliXCksbGliZGlyID89IFwxLCcgXAorICAgICAgICAgICAgICAgLWUgJ3MsXnBlcmZleGVjZGlyID0gXCguKlwpLHBlcmZleGVjZGlyID89IFwxLCcgXAorICAgICAgICAgICAgICAgLWUgJ3MsXCAuY29uZmlnLWRldGVjdGVkLCAkKE9VVFBVVCkvY29uZmlnLWRldGVjdGVkLGcnIFwKKyAgICAgICAgICAgICR7U30vdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAorICAgICAgICAgICAgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICAgICAgc2VkIC1pIC1lICJzLHByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyQscHJlZml4PSdcJChERVNURElSX1NRKS91c3InIC0taW5zdGFsbC1saWI9J1wkKERFU1RESVIpXCQoUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIpJyxnIiBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgIGZpCisgICAgc2VkIC1pIC1lICJzLC0tcm9vdD0nL1wkKERFU1RESVJfU1EpJywtLXByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyAtLWluc3RhbGwtbGliPSdcJChERVNURElSKVwkKFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSKScsZyIgXAorICAgICAgICAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUqCisKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAorICAgICAgICAgICAgJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5idWlsZAorICAgIGZpCisKKyAgICAjIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIGluIENDIGlzIHByZXNlcnZlZAorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MsI0NDLCcgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICAgICAgc2VkIC1pICdzLEFSID0gJChDUk9TU19DT01QSUxFKWFyLCNBUiwnICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENDID0gJChDUk9TU19DT01QSUxFKWdjYywjQ0MsJyAke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUKKyAgICAgICAgc2VkIC1pICdzLEFSID0gJChDUk9TU19DT01QSUxFKWFyLCNBUiwnICR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZQorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsQ0MgOj0gJChDUk9TU19DT01QSUxFKWdjYyAtTUQsQ0MgKz0gLU1ELCcgJHtTfS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDRkxBR1M9LENDPSJcJChDQykiIENGTEFHUz0sJyAke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUKKyAgICBmaQorCisgICAgIyAzLjE3LXJjMSsgaGFzIGEgaW5jbHVkZSBpc3N1ZSBmb3IgYXJtL3Bvd2VycGMuIFRlbXBvcmFyaWx5IHNlZCBpbiB0aGUgYXBwcm9wcmlhdGUgaW5jbHVkZQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9hcmNoLyRBUkNIL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLCNpbmNsdWRlICJ1dGlsL2NhbGxjaGFpbi5oIiwjaW5jbHVkZSAidXRpbC9jYWxsY2hhaW4uaCJcbiNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiLCcgJHtTfS90b29scy9wZXJmL2FyY2gvJEFSQ0gvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYworICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2FyY2gvYXJtL3V0aWwvdW53aW5kLWxpYnVud2luZC5jIiBdICYmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS90ZXN0cy9kd2FyZi11bndpbmQuYyIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsI2luY2x1ZGUgInRlc3RzL3Rlc3RzLmgiLCNpbmNsdWRlICJ0ZXN0cy90ZXN0cy5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvZHdhcmYtdW53aW5kLmMKKyAgICAgICAgc2VkIC1pICdzLCNpbmNsdWRlICJwZXJmX3JlZ3MuaCIsI2luY2x1ZGUgInBlcmZfcmVncy5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC91bndpbmQtbGlidW53aW5kLmMKKyAgICBmaQorfQorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIGQuc2V0VmFyKCdQS0dWJywgZC5nZXRWYXIoIktFUk5FTF9WRVJTSU9OIiwgVHJ1ZSkuc3BsaXQoIi0iKVswXSkKK30KKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworCitQQUNLQUdFUyA9KyAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1BOfS1wZXJsICR7UE59LXB5dGhvbiIKKworUkRFUEVORFNfJHtQTn0gKz0gImVsZnV0aWxzIGJhc2giCitSREVQRU5EU18ke1BOfS1hcmNoaXZlID0rICJiYXNoIgorUkRFUEVORFNfJHtQTn0tcHl0aG9uID0rICJiYXNoIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59LXBlcmwgPSsgImJhc2ggcGVybCBwZXJsLW1vZHVsZXMiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9KyAicHl0aG9uIgorCitSU1VHR0VTVFNfU0NSSVBUSU5HID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsICcke1BOfS1wZXJsICR7UE59LXB5dGhvbicsICcnLGQpfSIKK1JTVUdHRVNUU18ke1BOfSArPSAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1JTVUdHRVNUU19TQ1JJUFRJTkd9IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJleGVjZGlyfS9wZXJmLWNvcmUgJHtleGVjX3ByZWZpeH0vbGliZXhlYy9wZXJmLWNvcmUgJHtsaWJkaXJ9L3RyYWNlZXZlbnQiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tYXJjaGl2ZSA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvcGVyZi1hcmNoaXZlIgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3Rlc3RzIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMgJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uIgorRklMRVNfJHtQTn0tcGVybCA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsIgorCisKK0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVD0iMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTA3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi43LmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiUG93ZXIgdXNhZ2UgdG9vbCIKK0RFU0NSSVBUSU9OID0gIkxpbnV4IHRvb2wgdG8gZGlhZ25vc2UgaXNzdWVzIHdpdGggcG93ZXIgY29uc3VtcHRpb24gYW5kIHBvd2VyIG1hbmFnZW1lbnQuIgorSE9NRVBBR0UgPSAiaHR0cDovLzAxLm9yZy9wb3dlcnRvcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5sZXNzd2F0dHMub3JnLyIKK0RFUEVORFMgPSAibmN1cnNlcyBsaWJubCBwY2l1dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vMDEub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvZG93bmxvYWRzL3Bvd2VydG9wL3Bvd2VydG9wLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImUwZDY4NmU0N2RhYWY3ZTlkODkwMzFmNzc2MzQzMmVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkNGIxNDkwZTJiYWFkNDQ2N2MwZGVkM2M0MjNkYjQ0NzJkY2JmN2IyZGQ4ZjhmMmE5MjhmNTQwNDdjNjc4Y2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKKyMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgd2l0aCBsaWJpbnRsIGluIHVDbGliYyBzeXN0ZW1zCitFWFRSQV9MREZMQUdTID89ICIiCitFWFRSQV9MREZMQUdTX2xpYmMtdWNsaWJjID0gIi1saW50bCIKK0xERkxBR1MgKz0gIiR7RVhUUkFfTERGTEFHU30iCisKKyMgd2UgZG8gbm90IHdhbnQgbGlibmN1cnNlc3cgaWYgd2UgY2FuCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIGNvbmZpZ3VyZS5hYyBjaGVja3MgZm9yIGRlbHdpbigpIGluICJuY3Vyc2VzdyBuY3Vyc2VzIiBzbyBsZXQncyBkcm9wIGZpcnN0IG9uZQorICAgIHNlZCAtaSAtZSAicy9uY3Vyc2Vzdy8vZyIgJHtTfS9jb25maWd1cmUuYWMKKyAgICBta2RpciAtcCAke0J9L3NyYy90dW5pbmcvCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworQUxURVJOQVRJVkVfJHtQTn0gPSAicG93ZXJ0b3AiCitBTFRFUk5BVElWRV9UQVJHRVRbcG93ZXJ0b3BdID0gIiR7c2JpbmRpcn0vcG93ZXJ0b3AiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcG93ZXJ0b3BdID0gIiR7c2JpbmRpcn0vcG93ZXJ0b3AiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MyY2JlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitPbiB1Y2xpYmMgZWxmLmggZG9lcyBub3QgaGF2ZSBHTlUgZXh0ZW50aW9ucyBidXQgd2UgbmVlZCB0aGlzIGRlZmluZQorc28gd2UgZGVmaW5lIGl0IGxvY2FsbHkgaWYgaXRzIG5vdCBnZXR0aW5nIGl0IGZyb20gZWxmLmgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvZWxmcGFyc2VyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDE4OjU3OjQxLjAwMDAwMDAwMCAtMDcwMAorKysrIGdpdC9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDIwOjI4OjU0LjczMzgyOTg5NSAtMDcwMAorQEAgLTE3LDYgKzE3LDEwIEBACisgICovCisgI2luY2x1ZGUgPGdsaWIuaD4KKyAKKysjaWZuZGVmIE5UX0dOVV9CVUlMRF9JRAorKyNkZWZpbmUgTlRfR05VX0JVSUxEX0lEIDMKKysjZW5kaWYKKysKKyB0eXBlZGVmIHN0cnVjdCBFbGZTeW0gRWxmU3ltOworIHR5cGVkZWYgc3RydWN0IEVsZlBhcnNlciBFbGZQYXJzZXI7CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNhYzY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaApAQCAtMCwwICsxLDIxIEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3V0aWwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3V0aWwuaAkyMDEwLTEyLTA3IDIyOjQxOjU3LjE1NjI0MzAwMSAtMDYwMAorKysrIGdpdC91dGlsLmgJMjAxMC0xMi0wNyAyMjo0Mzo0Ny42MTYyNDMwMDIgLTA2MDAKK0BAIC0zNyw0ICszNywxMyBAQAorICNkZWZpbmUgY3B1X3JlbGF4KCkgICAgIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpOworICNlbmRpZgorIAorKyNpZmRlZiBfX2FybV9fCisrLyoKKysgKiBVc2UgdGhlIF9fa3VzZXJfbWVtb3J5X2JhcnJpZXIgaGVscGVyIGluIHRoZSBDUFUgaGVscGVyIHBhZ2UuIFNlZQorKyAqIGFyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGRldGFpbHMuCisrICovCisrI2RlZmluZSBybWIoKQkJKCh2b2lkKCopKHZvaWQpKTB4ZmZmZjBmYTApKCkKKysjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorKyNlbmRpZgorKworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDU1YjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvdXRpbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdXRpbC5oCTIwMTAtMTItMDggMDE6MjI6NDQuNDg2MjQzMDAxIC0wNjAwCisrKysgZ2l0L3V0aWwuaAkyMDEwLTEyLTA4IDAxOjIzOjI3LjgzNjI0MzAwMSAtMDYwMAorQEAgLTM3LDQgKzM3LDE1IEBACisgI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7CisgI2VuZGlmCisgCisrI2lmZGVmIF9fbWlwc19fCisrI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKAkJCQkJXAorKwkJCQkiLnNldAltaXBzMlxuXHQiCQkJXAorKwkJCQkic3luY1xuXHQiCQkJCVwKKysJCQkJIi5zZXQJbWlwczAiCQkJCVwKKysJCQkJOiAvKiBubyBvdXRwdXQgKi8JCQlcCisrCQkJCTogLyogbm8gaW5wdXQgKi8JCQlcCisrCQkJCTogIm1lbW9yeSIpCisrI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorKyNlbmRpZgorKworICNlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMzZTEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJTeXN0ZW0td2lkZSBQZXJmb3JtYW5jZSBQcm9maWxlciBmb3IgTGludXgiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiZ3RrKyBsaWJnbGFkZSIKKworU1JDUkVWID0gImNkNDRlZTY2NDRjMzY0MTUwN2ZiNTNiOGEyYTY5MTM3ZjI5NzEyMTkiCitQViA9ICIxLjIuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnL3N5c3Byb2YgXAorICAgICAgICAgICBmaWxlOi8vZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9hcm0gID0gIiBmaWxlOi8vcm1iLWFybS5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX2FybWViICA9ICIgZmlsZTovL3JtYi1hcm0ucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9taXBzID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9taXBzNjQgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX21pcHM2NG4zMiA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBXZSBkbyBub3QgeWV0IHdvcmsgZm9yIGFhcmNoNjQuCisjCitDT01QQVRJQkxFX0hPU1QgPSAiXig/IWFhcmNoNjQpLioiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU4OTA4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVVByb2JlcyBrZXJuZWwgbW9kdWxlIGZvciBTeXN0ZW1UYXAiCisKK3JlcXVpcmUgc3lzdGVtdGFwX2dpdC5pbmMKKworREVQRU5EUyA9ICJzeXN0ZW10YXAgdmlydHVhbC9rZXJuZWwiCisKK1BSID0gInIxIgorCisjIE9uIHN5c3RlbXMgd2l0aG91dCBDT05GSUdfVVRSQUNFLCB0aGlzIHBhY2thZ2UgaXMgZW1wdHkuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitpbmhlcml0IG1vZHVsZS1iYXNlIGdldHRleHQKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vc3lzdGVtdGFwOiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vc3lzdGVtdGFwL3J1bnRpbWUvdXByb2JlcyIKKworRVhUUkFfT0VNQUtFID0gIiIKKworIyBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSB1cHJvYmVzIGtlcm5lbCBtb2R1bGUgb24gbWFjaGluZXMgd2l0aCB1dHJhY2UKKyMgc3VwcG9ydC4gIE5vdGUgdGhhdCBzdGFwcnVuIGV4cGVjdHMgaXQgaW4gdGhlIHN5c3RlbXRhcC9ydW50aW1lIGRpcmVjdG9yeSwKKyMgbm90IGluIC9saWIvbW9kdWxlcy4KK2RvX2NvbXBpbGUoKSB7CisJaWYgZ3JlcCAtcSAiQ09ORklHX1VUUkFDRT15IiAke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfS8uY29uZmlnCisJdGhlbgorCQl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBDQyBMRCBDUFAKKwkJb2VfcnVubWFrZSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCQkgICBBUj0iJHtLRVJORUxfQVJ9IiBcCisJCQkgICAtQyAke1NUQUdJTkdfS0VSTkVMX0RJUn0gc2NyaXB0cworCQlvZV9ydW5tYWtlIEtESVI9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICAgXAorCQkJICAgTT0iJHtTfS9ydW50aW1lL3Vwcm9iZXMvIiBcCisJCQkgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCQkgICBBUj0iJHtLRVJORUxfQVJ9IiBcCisJCQkgICAtQyAiJHtTfS9ydW50aW1lL3Vwcm9iZXMvIgorCWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaWYgWyAtZSAiJHtTfS9ydW50aW1lL3Vwcm9iZXMvdXByb2Jlcy5rbyIgXQorCXRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzLworCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ydW50aW1lL3Vwcm9iZXMvdXByb2Jlcy5rbyAke0R9JHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzLworCWZpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGYyZmJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDVlYjEwZDkwYWY5MTc4ZWRiNjVlNjA5MWFlOTM5ZDFiNWIxOWJiNzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMjMgU2VwIDIwMTQgMDQ6NDc6MTAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3lzdGVtdGFwOiBhbGxvdyB0byBkaXNhYmxlIGxpYnZpcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAxMyArKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTYzMWFlNy4uY2I0ODg1YiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTI1LDEwICs1MjUsMTUgQEAgZG5sIENoZWNrIGZvciB0aGUgbGlidmlydCBhbmQgbGlieG1sMiBkZXZlbCBwYWNrYWdlcworIAorIGRubCBXZSByZXF1aXJlIGxpYnZpcnQgPj0gMS4wLjIgYmVjYXVzZSBzdGFwdmlydCByZWxpZXMgb24gdGhlCisgZG5sIHZpckRvbWFpbk9wZW5DaGFubmVsIGZ1bmN0aW9uLCB3aGljaCB3YXMgaW1wbGVtZW50ZWQgaW4gMS4wLjIuCistUEtHX0NIRUNLX01PRFVMRVMoW2xpYnZpcnRdLCBbbGlidmlydCA+PSAxLjAuMl0sIFsKKy0gICBoYXZlX2xpYnZpcnQ9eWVzCistICAgQUNfREVGSU5FKFtIQVZFX0xJQlZJUlRdLFsxXSxbRGVmaW5lIHRvIDEgaWYgbGlidmlydCBkZXZlbG9wbWVudCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZF0pCistICAgXSwgW2hhdmVfbGlidmlydD1ub10pCisrQUNfQVJHX0VOQUJMRShbbGlidmlydF0sCisrICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnZpcnRdLCBbRG8gbm90IHVzZSBsaWJ2aXJ0IGV2ZW4gaWYgcHJlc2VudF0pKQorKworK2lmIHRlc3QgIiRlbmFibGVfbGlidmlydCIgIT0gbm87IHRoZW4KKysgIFBLR19DSEVDS19NT0RVTEVTKFtsaWJ2aXJ0XSwgW2xpYnZpcnQgPj0gMS4wLjJdLCBbCisrICAgICBoYXZlX2xpYnZpcnQ9eWVzCisrICAgICBBQ19ERUZJTkUoW0hBVkVfTElCVklSVF0sWzFdLFtEZWZpbmUgdG8gMSBpZiBsaWJ2aXJ0IGRldmVsb3BtZW50IGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkXSkKKysgICAgIF0sIFtoYXZlX2xpYnZpcnQ9bm9dKQorK2ZpCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCVklSVF0sIFt0ZXN0ICIke2hhdmVfbGlidmlydH0iID0gInllcyJdKQorIFBLR19DSEVDS19NT0RVTEVTKFtsaWJ4bWwyXSwgW2xpYnhtbC0yLjBdLCBbCisgICAgaGF2ZV9saWJ4bWwyPXllcworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhODk5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGdpdC9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0JMjAxMi0wNC0xMyAwODo0Mzo0Ni4yNjMzMzkwMDMgLTA1MDAKKysrKyBnaXQvZG9jL1N5c3RlbVRhcF9UYXBzZXRfUmVmZXJlbmNlL01ha2VmaWxlLmFtCTIwMTItMDQtMTMgMDk6MzE6MjIuNDcwMDgzOTE1IC0wNTAwCitAQCAtMjcsNiArMjcsMTAgQEAKKyBub2luc3RfUFJPR1JBTVMgPSBkb2Nwcm9jCisgU1JDVFJFRT0kKGFic190b3Bfc3JjZGlyKS8KKyBET0NQUk9DPSQoYWJzX2J1aWxkZGlyKS9kb2Nwcm9jCisrZG9jcHJvY19MSU5LID0gJChDQ19GT1JfQlVJTEQpICQoTERGTEFHU19GT1JfQlVJTEQpIC1vICRACisrCisrZG9jcHJvYy5vOiAkKHNyY2RpcikvZG9jcHJvYy5jCisrCSQoQ0NfRk9SX0JVSUxEKSAtYyAkKENGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoc3JjZGlyKS9kb2Nwcm9jLmMKKyAKKyBhbGw6ICQoUERGRE9DUykgc3RhbXAtaHRtbGRvY3Mgc3RhbXAtbWFuZG9jcworIHRhcHNldHMueG1sOiBkb2Nwcm9jICQoc2hlbGwgZmluZCAkKFNSQ1RSRUUpL3RhcHNldCAtbmFtZSAnKi5zdHAnKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OGNkYTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xOSw3ICsxOSw2IEBAIEFDX1BST0dfTE5fUworIEFDX1BST0dfQ0MKKyBBQ19QUk9HX0NYWAorIEFDX1BST0dfQ1BQCistQU1fUFJPR19DQ19TVERDCisgQU1fUFJPR19DQ19DX08KKyBBQ19QUk9HX1JBTkxJQgorIEFDX09CSkVYVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzYWY1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorc3lzdGVtdGFwOiBDcm9zcyBjb21waWxhdGlvbiBmaXgKKworVGhpcyBpcyBhIGNyb3NzIGNvbXBpbGF0aW9uIGZpeC4gSXQgYWxsb3dzIHN5c3RlbXRhcCB0byBmaW5kCit0aGUga2VybmVsIG1hcCBmaWxlIGluIHRoZSByaWdodCBwbGFjZSwgaS5lLiBpbiB0aGUga2VybmVsIGJ1aWxkIHRyZWUuCitXaXRob3V0IHRoaXMgZml4IGl0IHRha2VzIGEgbWFwIGZpbGUgZnJvbSB0aGUgYnVpbGQgaG9zdCwgaWYgYXZhaWxhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlraGFpbCBEdXJuZXYgPG1pa2hhaWxfZHVybmV2QG1lbnRvci5jb20+CisKK0luZGV4OiBnaXQvc2Vzc2lvbi5jeHgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zZXNzaW9uLmN4eAorKysrIGdpdC9zZXNzaW9uLmN4eAorQEAgLTE2MzQsNyArMTYzNCw3IEBAIHN5c3RlbXRhcF9zZXNzaW9uOjpwYXJzZV9rZXJuZWxfZnVuY3Rpb24KKyAJY2xvZyA8PCBfRigiS2VybmVsIHN5bWJvbCB0YWJsZSAlcyB1bmF2YWlsYWJsZSwgKCVzKSIsCisgCQkgICBzeXN0ZW1fbWFwX3BhdGguY19zdHIoKSwgc3RyZXJyb3IoZXJybm8pKSA8PCBlbmRsOworIAorLSAgICAgIHN5c3RlbV9tYXBfcGF0aCA9ICIvYm9vdC9TeXN0ZW0ubWFwLSIgKyBrZXJuZWxfcmVsZWFzZTsKKysgICAgICBzeXN0ZW1fbWFwX3BhdGggPSBrZXJuZWxfYnVpbGRfdHJlZSArICIvU3lzdGVtLm1hcC0iICsga2VybmVsX3JlbGVhc2U7CisgICAgICAgc3lzdGVtX21hcC5jbGVhcigpOworICAgICAgIHN5c3RlbV9tYXAub3BlbihzeXN0ZW1fbWFwX3BhdGguY19zdHIoKSwgaWZzdHJlYW06OmluKTsKKyAgICAgICBpZiAoISBzeXN0ZW1fbWFwLmlzX29wZW4oKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3gzMl9hYmlfdGltZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3gzMl9hYmlfdGltZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGE3ZWFlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAveDMyX2FiaV90aW1lLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0ZpeCB0aW1lX3QgcHJpbnQgYmVjYXVzZSBpbiB4MzIgQUJJIGlzIGxvbmcgbG9uZyBpbnQgaW5zdGVhZCBvZiBsb25nIGludC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY2FjaGUuY3h4IGIvY2FjaGUuY3h4CitpbmRleCAzNTQ2YjMwLi4xOWM3N2NhIDEwMDY0NAorLS0tIGEvY2FjaGUuY3h4CisrKysgYi9jYWNoZS5jeHgKK0BAIC0yOTQsNyArMjk0LDExIEBAIGNsZWFuX2NhY2hlKHN5c3RlbXRhcF9zZXNzaW9uJiBzKQorICAgICAgICAgeworICAgICAgICAgICAvL2ludGVydmFsIG5vdCBwYXNzZWQsIGRvbid0IGNvbnRpbnVlCisgICAgICAgICAgIGlmIChzLnZlcmJvc2UgPiAxKQorKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysgICAgICAgICAgICBjbG9nIDw8IF9GKCJDYWNoZSBjbGVhbmluZyBza2lwcGVkLCBpbnRlcnZhbCBub3QgcmVhY2hlZCAlbGxkIHMgLyAlbHUgcy4iLAorKyNlbHNlCisgICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2FjaGUgY2xlYW5pbmcgc2tpcHBlZCwgaW50ZXJ2YWwgbm90IHJlYWNoZWQgJWx1IHMgLyAlbHUgcy4iLAorKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGltZS50dl9zZWMtc2Iuc3RfbXRpbWUpLCBjYWNoZV9jbGVhbl9pbnRlcnZhbCkgIDw8IGVuZGw7CisgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KK0BAIC0zMDIsNyArMzA2LDExIEBAIGNsZWFuX2NhY2hlKHN5c3RlbXRhcF9zZXNzaW9uJiBzKQorICAgICAgICAgeworICAgICAgICAgICAvL2ludGVydmFsIHJlYWNoZWQsIGNvbnRpbnVlCisgICAgICAgICAgIGlmIChzLnZlcmJvc2UgPiAxKQorKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysgICAgICAgICAgICBjbG9nIDw8IF9GKCJDbGVhbmluZyBjYWNoZSwgaW50ZXJ2YWwgcmVhY2hlZCAlbGxkIHMgPiAlbHUgcy4iLAorKyNlbHNlCisgICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2xlYW5pbmcgY2FjaGUsIGludGVydmFsIHJlYWNoZWQgJWx1IHMgPiAlbHUgcy4iLAorKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGltZS50dl9zZWMtc2Iuc3RfbXRpbWUpLCBjYWNoZV9jbGVhbl9pbnRlcnZhbCkgIDw8IGVuZGw7CisgICAgICAgICB9CisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZDQyYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlNjcmlwdC1kaXJlY3RlZCBkeW5hbWljIHRyYWNpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2wgZm9yIExpbnV4IgorCityZXF1aXJlIHN5c3RlbXRhcF9naXQuaW5jCisKK0RFUEVORFMgPSAiZWxmdXRpbHMgc3FsaXRlMyBzeXN0ZW10YXAtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZWxmdXRpbHMtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIGdldHRleHQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWVsZnV0aWxzIG5hdGl2ZXNkay1zcWxpdGUzIG5hdGl2ZXNkay1nZXR0ZXh0IgorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgKz0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgKz0gInB5dGhvbi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWxpYmVsZj0ke1NUQUdJTkdfRElSX1RBUkdFVH0gLS13aXRob3V0LXJwbSBcCisgICAgICAgICAgICAtLXdpdGhvdXQtbnNzIC0td2l0aG91dC1hdmFoaSAtLXdpdGhvdXQtZHluaW5zdCBcCisgICAgICAgICAgICAtLWRpc2FibGUtc2VydmVyIC0tZGlzYWJsZS1ncmFwaGVyIC0tZW5hYmxlLXByb2xvZ3VlcyBcCisgICAgICAgICAgICBhY19jdl9wcm9nX2hhdmVfamF2YWM9bm8gXAorICAgICAgICAgICAgYWNfY3ZfcHJvZ19oYXZlX2phcj1ubyAiCisKK1NUQVBfRE9DUyA/PSAiLS1kaXNhYmxlLWRvY3MgLS1kaXNhYmxlLXB1YmxpY2FuIC0tZGlzYWJsZS1yZWZkb2NzIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7U1RBUF9ET0NTfSAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYnZpcnRdID0gIi0tZW5hYmxlLWxpYnZpcnQsLS1kaXNhYmxlLWxpYnZpcnQsbGlidmlydCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vc3lzdGVtdGFwLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTU3OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCkBAIC0wLDAgKzEsMjggQEAKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKK1NSQ1JFViA9ICJiZjE2MjY2NzgyZTFmMjU4OGI1MTlhNTBkOTY4NDI3OWQ0ZTIxMDM2IgorUFYgPSAiMi43K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9zeXN0ZW10YXAuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXN0ZW1fbWFwX2xvY2F0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnZpcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8veDMyX2FiaV90aW1lLnBhdGNoIFwKKyAgICAgICAgICAiCisKKyMgc3lzdGVtdGFwIGRvZXNuJ3Qgc3VwcG9ydCBtaXBzCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2fHBvd2VycGN8YXJtfGFhcmNoNjQpLiotbGludXgnCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgc3lzdGVtdGFwIGNhbid0IGJlIGJ1aWx0IHdpdGhvdXQgb3B0aW1pemF0aW9uLCBpZiBzb21lb25lIHRyaWVzIHRvIGNvbXBpbGUgYW4KKyMgZW50aXJlIGltYWdlIGFzIC1PMCwgd2Ugb3ZlcnJpZGUgaXQgd2l0aCAtTzIgaGVyZSBhbmQgZ2l2ZSBhIG5vdGUgYWJvdXQgaXQuCitkZWYgZ2V0X29wdGltaXphdGlvbihkKToKKyAgICBzZWxlY3RlZF9vcHRpbWl6YXRpb24gPSBkLmdldFZhcigiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgVHJ1ZSkKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMCIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgic3lzdGVtdGFwIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8wLCAtTzIgd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTzAiLCAiLU8yIikKKyAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uCisKK1NFTEVDVEVEX09QVElNSVpBVElPTiA6PSAiJHtAZ2V0X29wdGltaXphdGlvbihkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZWNjYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkdyYXBoaWNhbCB0cmFjZSB2aWV3ZXIgZm9yIEZ0cmFjZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK3JlcXVpcmUgdHJhY2UtY21kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9rZXJuZWwtc2hhcmsuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTg7bWQ1PTJjMjJjOTY1YTY0OWRkZDc5NzNkNzkxM2M1NjM0YTVlIgorCitERVBFTkRTID0gImd0aysgbGlieG1sMiIKK1JERVBFTkRTXyR7UE59ID0gInRyYWNlLWNtZCIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAncHJlZml4PSR7cHJlZml4fScgXAorICAgICdiaW5kaXJfcmVsYXRpdmU9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGJpbmRpcil9JyBcCisgICAgJ2xpYmRpcj0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgbGliZGlyKX0nIFwKKyAgICBOT19QWVRIT049MSBcCisgICAgZ3VpIFwKKyIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly4qLmQKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGxfZ3VpCisgICAgcm0gJHtEfSR7YmluZGlyfS90cmFjZS1jbWQKKyAgICBybSAtcmYgJHtEfSR7bGliZGlyfS90cmFjZS1jbWQKKyAgICBybWRpciAke0R9JHtsaWJkaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlNGE5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLmluYwpAQCAtMCwwICsxLDEyIEBACitTUkNSRVYgPSAiMDgxMzMzNWQyZTQ5MjkxZTdhYjZhNDM2NWNlYzJiYWEwNTgxM2VkYSIKK1BWID0gIjIuNS4zK2dpdCR7U1JDUFZ9IgorCitpbmhlcml0IHBrZ2NvbmZpZworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS90cmFjZS1jbWQ6IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9yb3N0ZWR0L3RyYWNlLWNtZC5naXQ7YnJhbmNoPXRyYWNlLWNtZC1zdGFibGUtdjIuNSBcCisgICAgICAgICAgIGZpbGU6Ly9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGRiNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI5IEBACit0cmFjZS1jbWQ6IEFkZCBibGt0cmFjZV9hcGkgY29tcGF0aWJpbGl0eSBmb3IgVENfQkFSUklFUgorCitOZXdlciBrZXJuZWxzIHJlcGxhY2UgVENfQkFSUklFUiB3aXRoIFRDX0ZMVVNILiBFbnN1cmUgdHJhY2UtY21kCitjYW4gYnVpbGQgcmVnYXJkbGVzcyBvZiB0aGUgbGludXgta2VybmVsLWhlYWRlcnMgdmVyc2lvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTdG9wIGdhcF0KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9wbHVnaW5fYmxrLmMgYi9wbHVnaW5fYmxrLmMKK2luZGV4IDkzMjdiMTcuLmM4ZTVlMWMgMTAwNjQ0CistLS0gYS9wbHVnaW5fYmxrLmMKKysrKyBiL3BsdWdpbl9ibGsuYworQEAgLTQ0LDYgKzQ0LDE1IEBAIHN0cnVjdCBibGtfZGF0YSB7CisgCXVuc2lnbmVkIHNob3J0CQlwZHVfbGVuOworIH07CisgCisrLyoKKysgKiBOZXdlciBrZXJuZWxzIGRvbid0IGRlZmluZSBCTEtfVENfQkFSUklFUiBhbmQgaGF2ZSByZXBsYWNlZCBpdCB3aXRoCisrICogQkxLX1RDX0ZMVVNILiBJbiB0aGlzIGNhc2UsIGRlZmluZSBpdCBoZXJlIGFuZCByZXBvcnQgRkxVU0hFUyBhcyBCQVJSSUVSUyBhcworKyAqIGEgd29ya2Fyb3VuZCwgYXMgZGVzY3JpYmVkIGluOgorKyAqIGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdDthPWNvbW1pdDtoPWMwOWM0N2NhZWRjOTg1NGQ1OTM3OGQ2ZTM0Yzk4OWU1MWNmZGQyYjQKKysgKi8KKysjaWZuZGVmIEJMS19UQ19CQVJSSUVSCisrI2RlZmluZSBCTEtfVENfQkFSUklFUiAxPDwyCisrI2VuZGlmCisgc3RhdGljIHZvaWQgZmlsbF9yd2JzKGNoYXIgKnJ3YnMsIGludCBhY3Rpb24sIHVuc2lnbmVkIGludCBieXRlcykKKyB7CisgCWludCBpID0gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWFjNzg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVXNlciBpbnRlcmZhY2UgdG8gRnRyYWNlIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorCityZXF1aXJlIHRyYWNlLWNtZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2UtY21kLmM7YmVnaW5saW5lPTY7ZW5kbGluZT04O21kNT0yYzIyYzk2NWE2NDlkZGQ3OTczZDc5MTNjNTYzNGE1ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2UtaW5wdXQuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTg7bWQ1PTNlYzgyZjQzYmJlMGNmYjU5NTFmZjQxNGVmNGQ0NGQwIFwKKyIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAncHJlZml4PSR7cHJlZml4fScgXAorICAgICdiaW5kaXI9JHtiaW5kaXJ9JyBcCisgICAgJ21hbl9kaXI9JHttYW5kaXJ9JyBcCisgICAgJ2h0bWxfaW5zdGFsbD0ke2RhdGFkaXJ9L2tlcm5lbHNoYXJrL2h0bWwnIFwKKyAgICAnaW1nX2luc3RhbGw9JHtkYXRhZGlyfS9rZXJuZWxzaGFyay9odG1sL2ltYWdlcycgXAorICAgIFwKKyAgICAnYmluZGlyX3JlbGF0aXZlPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBiaW5kaXIpfScgXAorICAgICdsaWJkaXI9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGxpYmRpcil9JyBcCisgICAgXAorICAgIE5PX1BZVEhPTj0xIFwKKyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdHJhY2UtY21kL3BsdWdpbnMvLmRlYnVnIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLiouZAorfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGwKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjUzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjUzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODYxYTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iZDJhN2ExMzM1NWZjY2E5MmFkODNiZGY3ZTI5NjAxMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtiZWdpbmxpbmU9MzIyO2VuZGxpbmU9NDM2O21kNT1jYWY5ZWU1NDEyMzRjNjYzYWVlY2RjZmVmMmY3OWFlMSIKK0RFUEVORFMgPSAiemxpYiIKKworUE4gPSAibGlicG5nMTIiCitTID0gIiR7V09SS0RJUn0vbGlicG5nLSR7UFZ9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xpYnBuZy9saWJwbmcxMi8ke1BWfS9saWJwbmctJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2QxOGE3NGU2ZmQyMDI5YWVlNzZjY2QwMGUwMGE5ZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQ1ZTQ5ZjY4OWU3NDUxYmQ1NzY1NjllNmEzNDRmN2UwZDExYzAyZWNiYjc5N2Y0ZGEwZTQzMTUyNjc2NWMwYSIKKworQklOQ09ORklHX0dMT0IgPSAiJHtQTn0tY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWcgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgVGhlIGZvbGxvdyBsaW5rIGZpbGVzIGxpbmsgdG8gY29ycmVzcG9uZGluZyBwbmcxMiouaCBhbmQgbGlicG5nMTIqIGZpbGVzCisJIyBUaGV5IGNvbmZsaWN0IHdpdGggaGlnaGVyIHZlcmlzb24sIHNvIGRyb3AgdGhlbQorCXVubGluayAke0R9LyR7aW5jbHVkZWRpcn0vcG5nLmgKKwl1bmxpbmsgJHtEfS8ke2luY2x1ZGVkaXJ9L3BuZ2NvbmYuaAorCisJdW5saW5rICR7RH0vJHtsaWJkaXJ9L2xpYnBuZy5sYQorCXVubGluayAke0R9LyR7bGliZGlyfS9saWJwbmcuc28KKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vbGlicG5nLmEKKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBuZy5wYworCisJdW5saW5rICR7RH0vJHtiaW5kaXJ9L2xpYnBuZy1jb25maWcKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJjbGFzcy1pc2EtcGVybF8wLjM2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzODQxZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJjbGFzcy1pc2EtcGVybF8wLjM2LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlcG9ydGluZyB0aGUgc2VhcmNoIHBhdGggZm9yIGEgY2xhc3MncyBJU0EgdHJlZSIKK0RFU0NSSVBUSU9OID0gIlN1cHBvc2UgeW91IGhhdmUgYSBjbGFzcyAobGlrZSBGb29kOjpGaXNoOjpGaXNoc3RpY2spIHRoYXQgaXMgZGVyaXZlZCwgXAordmlhIGl0cyBASVNBLCBmcm9tIG9uZSBvciBtb3JlIHN1cGVyY2xhc3NlcyAoYXMgRm9vZDo6RmlzaDo6RmlzaHN0aWNrIGlzIGZyb20gRm9vZDo6RmlzaCxcCitMaWZlOjpGdW5ndXMsIGFuZCBDaGVtaWNhbHMpLCBhbmQgc29tZSBvZiB0aG9zZSBzdXBlcmNsYXNzZXMgbWF5IHRoZW1zZWx2ZXMgZWFjaCBiZVwKK2Rlcml2ZWQsIHZpYSBpdHMgQElTQSwgZnJvbSBvbmUgb3IgbW9yZSBzdXBlcmNsYXNzZXMgKGFzIGFib3ZlKS5cCitcCitXaGVuLCB0aGVuLCB5b3UgY2FsbCBhIG1ldGhvZCBpbiB0aGF0IGNsYXNzICgkZmlzaHN0aWNrLT5jYWxvcmllcyksIFBlcmwgZmlyc3Qgc2VhcmNoZXNcCit0aGVyZSBmb3IgdGhhdCBtZXRob2QsIGJ1dCBpZiBpdCdzIG5vdCB0aGVyZSwgaXQgZ29lcyBzZWFyY2hpbmcgaW4gaXRzIHN1cGVyY2xhc3NlcywgYW5kXAorc28gb24sIGluIGEgZGVwdGgtZmlyc3QgKG9yIG1heWJlICJoZWlnaHQtZmlyc3QiIGlzIHRoZSB3b3JkKSBzZWFyY2guIEluIHRoZSBhYm92ZSBleGFtcGxlLFwKK2l0J2QgZmlyc3QgbG9vayBpbiBGb29kOjpGaXNoLCB0aGVuIEZvb2QsIHRoZW4gTWF0dGVyLCB0aGVuIExpZmU6OkZ1bmd1cywgdGhlbiBMaWZlLCB0aGVuXAorQ2hlbWljYWxzLlwKK1wKK1RoaXMgbGlicmFyeSwgQ2xhc3M6OklTQSwgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRoYXQgbGlzdCAtLSB0aGUgbGlzdFwKKyhpbiBvcmRlcikgb2YgbmFtZXMgb2YgY2xhc3NlcyBQZXJsIHdvdWxkIHNlYXJjaCB0byBmaW5kIGEgbWV0aG9kLCB3aXRoIG5vIGR1cGxpY2F0ZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvQ2xhc3MtSVNBLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MTA3O2VuZGxpbmU9MTExO21kNT02YTVjNjg0MmE2M2NmZTRkYWIxZjY2ZTIzNTBlNGQyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9TL1NNL1NNVUVMTEVSL0NsYXNzLUlTQS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzYTJhZDIwM2M4ZGM4N2Q2YzlkZTE2MjE1ZDAwYWY0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ODE2ZjM0ZTlhMzhlODQ5YTEwZGY3NTYwMzBkY2NmOWZlMDYxYTE5NmMxMWFjM2ZhYWZkNzExM2M5MjliOTY0IgorCitTID0gIiR7V09SS0RJUn0vQ2xhc3MtSVNBLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzQ2MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciBwcm92aWRlcyBzY3JlZW4gZHVtcCBvZiBQZXJsIGRhdGEiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0R1bXB2YWx1ZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mNzM2YmVjNWFkYTFmYzVlMzliMmE4ZTdlMDZiYmNiYiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0R1bXB2YWx1ZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZWRlOWY2OTNkNGE5YzQ1NTU1NDFjYjFhMWNjMjAwNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZWE3NDYwNmI1NDVmNzY5YTc4N2VjMmFlMjI5NTQ5YTJhZDBhOGUzY2Q0YjE0ZWZmMmNlMzg0MTgzNmIzYmRiIgorCitTID0gIiR7V09SS0RJUn0vRHVtcHZhbHVlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJlbnYtcGVybF8xLjA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGUxMTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgaW1wb3J0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXMgc2NhbGFycyBvciBhcnJheXMiCitERVNDUklQVElPTiA9ICJQZXJsIG1haW50YWlucyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gYSBzcGVjaWFsIGhhc2ggbmFtZWQgJUVOVi4gXAorRm9yIHdoZW4gdGhpcyBhY2Nlc3MgbWV0aG9kIGlzIGluY29udmVuaWVudCwgdGhlIFBlcmwgbW9kdWxlIEVudiBhbGxvd3MgZW52aXJvbm1lbnQgXAordmFyaWFibGVzIHRvIGJlIHRyZWF0ZWQgYXMgc2NhbGFyIG9yIGFycmF5IHZhcmlhYmxlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0Vudi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmMxY2JmMThkYjU2YjMzNDBkOTFjYjk0Nzk0M2JkMyIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0Vudi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZGJhNWMwNjkwZTY2OTcyYzk2ZmVlMTEyY2Y1ZjI1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOTRhM2Q0MTJkZjI0NmFmZGMzMWEyMTk5Y2JkOGFlOTE1MTY3YTNmNDY4NGY3YjcwMTRjZTEyMDAyNTFlYmIwIgorCitTID0gIiR7V09SS0RJUn0vRW52LSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZmlsZS1jaGVja3RyZWUtcGVybF80LjQxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTM3YzcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgcnVuIG1hbnkgZmlsZXRlc3QgY2hlY2tzIG9uIGEgdHJlZSIKK0RFU0NSSVBUSU9OID0gIlRoZSB2YWxpZGF0ZSgpIHJvdXRpbmUgdGFrZXMgYSBzaW5nbGUgbXVsdGlsaW5lIHN0cmluZyBjb25zaXN0aW5nIFwKK29mIGRpcmVjdGl2ZXMsIGVhY2ggY29udGFpbmluZyBhIGZpbGVuYW1lIHBsdXMgYSBmaWxlIHRlc3QgdG8gdHJ5IG9uIGl0LiAoVGhlIGZpbGUgXAordGVzdCBtYXkgYWxzbyBiZSBhICJjZCIsIGNhdXNpbmcgc3Vic2VxdWVudCByZWxhdGl2ZSBmaWxlbmFtZXMgdG8gYmUgaW50ZXJwcmV0ZWQgXAorcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuKSBBZnRlciB0aGUgZmlsZSB0ZXN0IHlvdSBtYXkgcHV0IHx8IGRpZSB0byBtYWtlIGl0IGEgXAorZmF0YWwgZXJyb3IgaWYgdGhlIGZpbGUgdGVzdCBmYWlscy4gVGhlIGRlZmF1bHQgaXMgfHwgd2Fybi4gVGhlIGZpbGUgdGVzdCBtYXkgXAorb3B0aW9uYWxseSBoYXZlIGEgIiEnIHByZXBlbmRlZCB0byB0ZXN0IGZvciB0aGUgb3Bwb3NpdGUgY29uZGl0aW9uLiBJZiB5b3UgZG8gYSBcCitjZCBhbmQgdGhlbiBsaXN0IHNvbWUgcmVsYXRpdmUgZmlsZW5hbWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5kZW50IHRoZW0gc2xpZ2h0bHkgZm9yIFwKK3JlYWRhYmlsaXR5LiBJZiB5b3Ugc3VwcGx5IHlvdXIgb3duIGRpZSgpIG9yIHdhcm4oKSBtZXNzYWdlLCB5b3UgY2FuIHVzZSAkZmlsZSB0byBcCitpbnRlcnBvbGF0ZSB0aGUgZmlsZW5hbWUuIFwKK1wKK0ZpbGV0ZXN0cyBtYXkgYmUgYnVuY2hlZDogIi1yd3giIHRlc3RzIGZvciBhbGwgb2YgLXIsIC13LCBhbmQgLXguIE9ubHkgdGhlIGZpcnN0IGZhaWxlZCBcCit0ZXN0IG9mIHRoZSBidW5jaCB3aWxsIHByb2R1Y2UgYSB3YXJuaW5nLiBcCitcCitUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgaXNzdWVkLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRmlsZS1DaGVja1RyZWUvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzZmY2FjYzVkZjgwZTAzNzA2MDMwMGE3ZjRiOTNiZjkiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9GaWxlLUNoZWNrVHJlZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MTljODJhYTdlNWI3Zjc1MmI0ZGExNGE2YzhhZDc0MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzk5YWI2YmI1YWY0NjY0ODMyNzE1OTc0YjVhMTllMzI4MDcxZGM5MjAyYWI3MmU1ZDVhNTk0ZWJkNDZhNzI5IgorCitTID0gIiR7V09SS0RJUn0vRmlsZS1DaGVja1RyZWUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MzllMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBjb21wYXJlIDgtYml0IHNjYWxhciBkYXRhIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUiCitERVNDUklQVElPTiA9ICJUaGlzIG1vZHVsZSBwcm92aWRlcyB5b3Ugd2l0aCBvYmplY3RzIHRoYXQgd2lsbCBjb2xsYXRlIGFjY29yZGluZyB0byBcCit5b3VyIG5hdGlvbmFsIGNoYXJhY3RlciBzZXQsIHByb3ZpZGVkIHRoYXQgdGhlIFBPU0lYIHNldGxvY2FsZSgpIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBcCitvbiB5b3VyIHN5c3RlbS4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0kxOE4tQ29sbGF0ZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mZjZkNjI5MTQ0YTZlYzFlYThjMzAwZjc1NzYwMTg0ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0kxOE4tQ29sbGF0ZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MmRkYjZkMWM1OWNmZGYzMWFhM2IwNDc5OWI4NmFmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MTc0NTA2YmM5MDNlZGE4OTY5MDM5NGUzZjQ1NTU4YWI3ZTAxMzExNDIyNzg5NmQ4NTY5ZDYxNjQ2NDhmZTM3IgorCitTID0gIiR7V09SS0RJUn0vSTE4Ti1Db2xsYXRlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1OGYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlBlcmwgZXh0ZW5zaW9uIGZvciBjb252ZXJ0aW5nIFBvZCB0byBvbGQtc3R5bGUgUG9kIgorREVTQ1JJUFRJT04gPSAiUG9kOjpQbGFpbmVyIHVzZXMgUG9kOjpQYXJzZXIgd2hpY2ggdGFrZXMgUG9kIHdpdGggdGhlIChuZXcpICdDPDwgLi4gPj4nIFwKK2NvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIG9sZChlcikgc3R5bGUgd2l0aCBqdXN0ICdDPD4nOyAnPCcgYW5kICc+JyBhcmUgcmVwbGFjZWQgYnkgXAorJ0U8bHQ+JyBhbmQgJ0U8Z3Q+Jy4gXAorXAorVGhpcyBjYW4gYmUgdXNlZCB0byBwcmUtcHJvY2VzcyBQb2QgYmVmb3JlIHVzaW5nIHRvb2xzIHdoaWNoIGRvIG5vdCByZWNvZ25pc2UgdGhlIG5ldyBzdHlsZSBQb2RzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0L1BvZC1QbGFpbmVyLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9Mjc7bWQ1PTIyN2NmODM5NzBmYzYxMjY0ODQ1ODI1ZDlkMmJmNmY4IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1IvUk0vUk1CQVJLRVIvUG9kLVBsYWluZXItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjUwMmVhY2QxYTQwODk0YjlkZmVhNTVmYzJjZDVlN2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWJiZmJmN2QxZDQ4NzFlNWE4M2JhYjIxMzdlMjJkMDg5MDc4MjA2ODE1MTkwZWIxZDVjMTI2MGEzNDk5NDU2ZiIKKworUyA9ICIke1dPUktESVJ9L1BvZC1QbGFpbmVyLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1mcHUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtZnB1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQwMjMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtZnB1LmluYwpAQCAtMCwwICsxLDYgQEAKKworZGVmIGdldF9hbHNhX2ZwdV9zZXR0aW5nKGJiLCBkKToKKwlpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisJCXJldHVybiAiLS13aXRoLXNvZnRmbG9hdCIKKwlyZXR1cm4gIiIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODNiYzNkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSAxN2FlYjM1NjVmNDExZTc3OTZjYWJlNDAzZjkyZDE1OTQ4YThjYTk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjEgQXVnIDIwMTUgMTQ6NDI6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IERvIG5vdCB0cnkgdG8gZGV0ZWN0IGNyb3NzLWNvbXBpbGVyCisKK2Nyb3NzIGNvbXBpbGVycyBhcmUgcGFzc2VkIHZpYSBwYXRoIG1heSBub3QgYmUgYSBnY2MgYmFzZWQgY3Jvc3MKK2NvbXBpbGVyIGluIHN1Y2ggY2FzZXMgdGhpcyBjaGVjayBmYWlscyBhbmQgdHJ5J3MgdG8gZm9yY2UgZ2NjIGJhc2VkCitjcm9zcyBjb21waWxlciBkZXRlY3Rpb24sIFRoaXMgY29kZSBpcyBhIGNvbnZlbmllbmNlIHRoYXQgbGltaXRzIHRoZQorYnVpbGQgc3lzdGVtCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgY29uZmlndXJlLmFjIHwgMTQgLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMwMjJjZjguLjlkNzc0NDAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3LDIwICsyNyw2IEBAIEFDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisgCisgZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgCistZG5sIHRyeSB0byBndWVzIGNyb3NzLWNvbXBpbGVyIGlmIG5vdCBzZXQKKy1pZiB0ZXN0ICJ4JGhvc3QiICE9ICJ4JGJ1aWxkIiAtYSAteiAiYGVjaG8gJENDIHwgZ3JlcCAtZSAnLWdjYydgIjsKKy10aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNyb3NzLWNvbXBpbGVyKQorLQorLSAgd2hpY2ggJHtwcm9ncmFtX3ByZWZpeH1nY2MgPi9kZXYvbnVsbCAyPiYxICYmIENDPSR7cHJvZ3JhbV9wcmVmaXh9Z2NjCistICB3aGljaCAke2hvc3RfY3B1fS0ke2hvc3Rfb3N9LWdjYyA+L2Rldi9udWxsIDI+JjEgXAorLSAgJiYgQ0M9JHtob3N0X2NwdX0tJHtob3N0X29zfS1nY2MKKy0gIHdoaWNoICR7aG9zdF9jcHV9LSR7aG9zdF92ZW5kb3J9LSR7aG9zdF9vc30tZ2NjID4vZGV2L251bGwgMj4mMSBcCistICAmJiBDQz0ke2hvc3RfY3B1fS0ke2hvc3RfdmVuZG9yfS0ke2hvc3Rfb3N9LWdjYworLQorLSAgQUNfTVNHX1JFU1VMVCgkQ0MpCistZmkKKy0JICAgIAorIENGTEFHUz0iJENGTEFHUyAtRF9HTlVfU09VUkNFIgorIAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhNmViOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIGUzMzM1N2I1OWExMGQ0NGU5YmVjNWQyNDEwMGNlMjNjYTMwMGNjNzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSG9uZyBILiBQaGFtIiA8aG9uZy5waGFtQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI5IEF1ZyAyMDE0IDE3OjEzOjU1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGlmIHdvcmRleHAgZnVuY3Rpb24gaXMgc3VwcG9ydGVkCisKK2VnbGliYyBjb3VsZCBiZSBjb25maWd1cmVkIHRvIGJ1aWxkIHdpdGhvdXQgd29yZGV4cCwgc28gaXQgaXMgbm90IGVub3VnaAordG8gY2hlY2sgaWYgd29yZGV4cC5oIGV4aXN0cyAodGhlIGhlYWRlciBmaWxlIGNvdWxkIGJlIGluc3RhbGxlZCwgYnV0IGl0J3MKK3Bvc3NpYmxlIHRoYXQgdGhlIHdvcmRleHAoKSBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkKS4gIEFuIGFkZGl0aW9uYWwKK2NoZWNrIGlmIHdvcmRleHAoKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbSBDIGxpYnJhcnkgaXMgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEhvbmcgSC4gUGhhbSA8aG9uZy5waGFtQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgfCA1ICsrKystCisgc3JjL3VzZXJmaWxlLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGI4MzUzYTAuLjc3M2I3MmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxMSw3ICszMTEsMTAgQEAgZmkKKyBBQ19TVUJTVChBTFNBX0RFUExJQlMpCisgCisgZG5sIENoZWNrIGZvciBoZWFkZXJzCistQUNfQ0hFQ0tfSEVBREVSUyhbd29yZGV4cC5oIGVuZGlhbi5oIHN5cy9lbmRpYW4uaF0pCisrQUNfQ0hFQ0tfSEVBREVSUyhbd29yZGV4cC5oIGVuZGlhbi5oIHN5cy9lbmRpYW4uaF0sCisrICBkbmwgTWFrZSBzdXJlIHdvcmRleHAgaXMgc3VwcG9ydGVkIGJ5IHRoZSBDIGxpYnJhcnkKKysgIEFDX0NIRUNLX0ZVTkNTKFt3b3JkZXhwXSkKKyspCisgCisgZG5sIENoZWNrIGZvciByZXNtZ3Igc3VwcG9ydC4uLgorIEFDX01TR19DSEVDS0lORyhmb3IgcmVzbWdyIHN1cHBvcnQpCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJmaWxlLmMgYi9zcmMvdXNlcmZpbGUuYworaW5kZXggM2E3MzgzNi4uYjhjZTgwOSAxMDA2NDQKKy0tLSBhL3NyYy91c2VyZmlsZS5jCisrKysgYi9zcmMvdXNlcmZpbGUuYworQEAgLTMyLDcgKzMyLDcgQEAKKyAgKiBzdG9yZXMgdGhlIGZpcnN0IG1hdGNoaW5lIG9uZS4gIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgc3RyZHVwJ2VkLgorICAqLworIAorLSNpZmRlZiBIQVZFX1dPUkRFWFBfSAorKyNpZiAoZGVmaW5lZChIQVZFX1dPUkRFWFBfSCkgJiYgZGVmaW5lZChIQVZFX1dPUkRFWFApKQorICNpbmNsdWRlIDx3b3JkZXhwLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorIGludCBzbmRfdXNlcl9maWxlKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKipyZXN1bHQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjAuMjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGY0MjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4wLjI5LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNjttZDU9MTFmZjg5YThhN2E0YTY5MGE1Yzc4ZWZmZTgxNTk1NDUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBjb25maWd1cmUuaW4gc2V0cyAtRF9fYXJtX18gb24gdGhlIGNvbW1hbmQgbGluZSBmb3IgYW55IGFybSBzeXN0ZW0KKyMgKG5vdCBqdXN0IHRob3NlIHdpdGggdGhlIEFSTSBpbnN0cnVjdGlvbiBzZXQpLCB0aGlzIHNob3VsZCBiZSByZW1vdmVkLAorIyAob3IgcmVwbGFjZWQgYnkgYSBwZXJtaXR0ZWQgI2RlZmluZSkuCisjRklYTUU6IHJlbW92ZSB0aGUgZm9sbG93aW5nCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvbGliLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZGU2N2UwZWNhNzI0NzRkNmIxMTIxMDM3ZGFmZTEwMjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzMwNDNjMzVlYjk2MzZiZTBmNGFmNmEyNDAyMzVjMjEzZjEyYTI1ZmViMWYwNGFlZWFjOGNiN2UzMGZjYmRkMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK3JlcXVpcmUgYWxzYS1mcHUuaW5jCitFWFRSQV9PRUNPTkYgKz0gIiR7QGdldF9hbHNhX2ZwdV9zZXR0aW5nKGJiLCBkKX0gIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXB5dGhvbiIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS13aXRoLXZlcnNpb25lZD1ubyAiCisKK1BBQ0tBR0VTID0rICJhbHNhLXNlcnZlciBsaWJhc291bmQgYWxzYS1jb25mLWJhc2UgYWxzYS1jb25mIGFsc2EtZG9jIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5sYSIKK0ZJTEVTX2xpYmFzb3VuZCA9ICIke2xpYmRpcn0vbGliYXNvdW5kLnNvLioiCitGSUxFU19hbHNhLXNlcnZlciA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2Fsc2EtY29uZiA9ICIke2RhdGFkaXJ9L2Fsc2EvIgorRklMRVNfYWxzYS1jb25mLWJhc2UgPSAiXAorJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZiBcCiske2RhdGFkaXJ9L2Fsc2EvY2FyZHMvYWxpYXNlcy5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZGVmYXVsdC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZG1peC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZHNub29wLmNvbmYiCisKK1JERVBFTkRTX2xpYmFzb3VuZCA9ICJhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYiCisjIHVwZ3JhZGUgcGF0aAorUlBST1ZJREVTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JSRVBMQUNFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCitSQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MGM3MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZDI4YzY1NWJlM2FjNGZjYjgwMjQ1NTU5ODM4ODRmODMyZWUxODc4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1heSAyMDE1IDE1OjE3OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFyY2FtLWF2OiBJbmNsdWRlIHN5cy9zZWxlY3QuaCBmb3IgZmRfc2V0IGRlZmluaXRpb24KKworZml4ZXMgYnVpbGQgZXJyb3JzIG9uIG5vbi1nbGliYyBiYXNlZCBzeXN0ZW1zCisKK2FyY2FtLWF2L2FyY2FtX2F2LmM6Mzg5OjI6IGVycm9yOiB1bmtub3duIHR5cGUgbmFtZSAnZmRfc2V0JworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgYXJjYW0tYXYvYXJjYW1fYXYuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYXJjYW0tYXYvYXJjYW1fYXYuYyBiL2FyY2FtLWF2L2FyY2FtX2F2LmMKK2luZGV4IDA0OTFmYzYuLmZmZjk2ZjkgMTAwNjQ0CistLS0gYS9hcmNhbS1hdi9hcmNhbV9hdi5jCisrKysgYi9hcmNhbS1hdi9hcmNhbV9hdi5jCitAQCAtMzEsNiArMzEsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaW5jbHVkZSA8c3lzL2lwYy5oPgorKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgI2luY2x1ZGUgPHN5cy9zaG0uaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxOTlmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSBjYTQxZTk2YTQ5YTU2ODEyODM1NGY2NWY5MGE3NjlkZWJmNTQzNWYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDkgSnVsIDIwMTUgMTE6NTg6MTIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5jbHVkZSBzcGVleGRzcF90eXBlcy5oLCBub3Qgc3BlZXhfdHlwZXMuaAorCitTcGVleGRzcCB3YXMgc2VwYXJhdGVkIGZyb20gc3BlZXggaW4gMS4ycmMyLiBzcGVleF90eXBlcy5oIGlzIG5vdAorc2hpcHBlZCBieSBzcGVleGRzcCwgc28gYWxzYS1wbHVnaW5zIHNob3VsZG4ndCB1c2UgdGhhdCBmaWxlLiBzcGVleGRzcAoraGFzIHNwZWV4ZHNwX3R5cGVzLmgsIHdoaWNoIGhhcyB0aGUgc2FtZSBjb250ZW50cyBhcyBzcGVleF90eXBlcy5oLgorCitzcGVleGRzcF90eXBlcy5oIGlzIGEgbmV3IGZpbGUgaW50cm9kdWNlZCBpbiAxLjJyYzIsIHNvIHRoaXMgY2hhbmdlCitidW1wcyB0aGUgbWluaW11bSBzdXBwb3J0ZWQgc3BlZXhkc3AgdmVyc2lvbi4gVGhlIHZlcnNpb24gY2hlY2sgaW4KK2NvbmZpZ3VyZS5hYyB3aWxsIGFjdHVhbGx5IGJyZWFrIGlmIHNwZWV4ZHNwIDEuMiBldmVyIGdldHMgcmVsZWFzZWQsCitiZWNhdXNlIHBrZy1jb25maWcgdGhpbmtzIHRoYXQgIjEuMiIgPCAiMS4ycmMyIiwgYnV0IEkgdGhpbmsgaXQncwordXNlZnVsIHRvIGZhaWwgaWYgdGhlIGluc3RhbGxlZCBzcGVleGRzcCB2ZXJzaW9uIGlzIDEuMnJjMSAod2hpY2ggSQorYmVsaWV2ZSBpcyB2ZXJ5IGNvbW1vbiBvbiBjdXJyZW50IGRpc3RyaWJ1dGlvbnMpLiBJZiBhIG5vbi1yYyB2ZXJzaW9uCitvZiBzcGVleGRzcCB3aWxsIGV2ZXIgZ2V0IHJlbGVhc2VkLCBJIGhvcGUgdmVyc2lvbiBudW1iZXIgMS4yIHdpbGwgYmUKK3NraXBwZWQgZm9yIHRoaXMgcmVhc29uLiAoQSBub24tcmMgdmVyc2lvbiBzZWVtcyB1bmxpa2VseSwgc2luY2UKKzEuMnJjMSB3YXMgcmVsZWFzZWQgeWVhcnMgYWdvLCBzbyBpdCdzIHByZXR0eSBsaWtlbHkgdGhhdCB0aGUgcHJvamVjdAoraXMgc3R1Y2sgb24gc28gY2FsbGVkICJyZWxlYXNlIGNhbmRpZGF0ZXMiIGZvcmV2ZXIuLi4pCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5hbHNhLmRldmVsLzE0MTE0OSkKKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAyICstCisgcHBoL2FyY2guaCAgICAgICAgICAgIHwgMiArLQorIHBwaC9zcGVleF9yZXNhbXBsZXIuaCB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTAyYTZkNy4uYzU1NGQyMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA4LDcgKzEwOCw3IEBAIEFDX1NVQlNUKEFWQ09ERUNfQ0ZMQUdTKQorIEFDX1NVQlNUKEFWQ09ERUNfTElCUykKKyBBQ19TVUJTVChBVkNPREVDX0hFQURFUikKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhzcGVleGRzcCwgW3NwZWV4ZHNwID49IDEuMl0sIFtIQVZFX1NQRUVYRFNQPSJ5ZXMiXSwgW0hBVkVfU1BFRVhEU1A9IiJdKQorK1BLR19DSEVDS19NT0RVTEVTKHNwZWV4ZHNwLCBbc3BlZXhkc3AgPj0gMS4ycmMyXSwgW0hBVkVfU1BFRVhEU1A9InllcyJdLCBbSEFWRV9TUEVFWERTUD0iIl0pCisgQU1fQ09ORElUSU9OQUwoSEFWRV9TUEVFWERTUCwgdGVzdCAiJEhBVkVfU1BFRVhEU1AiID0gInllcyIpCisgCisgQUNfQVJHX1dJVEgoW3NwZWV4XSwKK2RpZmYgLS1naXQgYS9wcGgvYXJjaC5oIGIvcHBoL2FyY2guaAoraW5kZXggZTJkNzMxYS4uYTA3ZDBkOSAxMDA2NDQKKy0tLSBhL3BwaC9hcmNoLmgKKysrKyBiL3BwaC9hcmNoLmgKK0BAIC0zNiw3ICszNiw3IEBACisgI2RlZmluZSBBUkNIX0gKKyAKKyAjaWZuZGVmIE9VVFNJREVfU1BFRVgKKy0jaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKysjaW5jbHVkZSAic3BlZXgvc3BlZXhkc3BfdHlwZXMuaCIKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/ICgtKHgpKSA6ICh4KSkgICAgICAvKio8IEFic29sdXRlIGludGVnZXIgdmFsdWUuICovCitkaWZmIC0tZ2l0IGEvcHBoL3NwZWV4X3Jlc2FtcGxlci5oIGIvcHBoL3NwZWV4X3Jlc2FtcGxlci5oCitpbmRleCBjNDRmYmNkLi5hYTg1YWJiIDEwMDY0NAorLS0tIGEvcHBoL3NwZWV4X3Jlc2FtcGxlci5oCisrKysgYi9wcGgvc3BlZXhfcmVzYW1wbGVyLmgKK0BAIC04Miw3ICs4Miw3IEBACisgICAgICAgCisgI2Vsc2UgLyogT1VUU0lERV9TUEVFWCAqLworIAorLSNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorKyNpbmNsdWRlICJzcGVleC9zcGVleGRzcF90eXBlcy5oIgorIAorICNlbmRpZiAvKiBPVVRTSURFX1NQRUVYICovCisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4wLjI5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyODYxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsMTA1IEBACitERVNDUklQVElPTiA9ICJBTFNBIFBsdWdpbnMiCitIT01FUEFHRSA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZyIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKKworIyBUaGUgcHJpbWFyeSBsaWNlbnNlIG9mIGFsc2EtcGx1Z2lucyBpcyBMR1BMdjIuMS4KKyMKKyMgbTQvYXR0cmlidXRlcy5tNCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisuIG00L2F0dHJpYnV0ZXMubTQgaXMgcGFydCBvZiB0aGUKKyMgYnVpbGQgc3lzdGVtLCBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGxpY2Vuc2luZyBvZiB0aGUgYnVpbGQgcmVzdWx0LgorIworIyBUaGUgc2FtcGxlcmF0ZSBwbHVnaW4gc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrIHRvIGJlIGNvbnNpc3RlbnQKKyMgd2l0aCB0aGUgbGlic2FtcGxlcmF0ZSBsaWNlbnNlLgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgZmlsZTovL200L2F0dHJpYnV0ZXMubTQ7ZW5kbGluZT0zMzttZDU9YjI1OTU4ZGE0NGMwMjIzMWUzNjQxZjFiY2NlZjUzZWIgXAorICAgICAgICBmaWxlOi8vcmF0ZS9yYXRlX3NhbXBsZXJhdGUuYztlbmRsaW5lPTE5O21kNT1mM2QzY2UwYjE4OTg0NmE0ODY1MTdkOTdhODU0YjI3NiBcCisiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3BsdWdpbnMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFyY2FtLWF2LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1mZF9zZXQtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYTY2Nzk3YjQ0NzFlM2NiZTk2NTc1MjA3YmZiZTI1MmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzI1ZDg1Y2FjMjg1ZjYzMmI4M2UwMTkxYWUzZjM0OGJhZDAzYzFmMDA3YjkzNzA0MmYxNjRhYmI4MWVhNjUzMiIKKworREVQRU5EUyArPSAiYWxzYS1saWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiXAorICAgICAgICBzYW1wbGVyYXRlIFwKKyAgICAgICAgc3BlZXhkc3AgXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW21hZW1vLXBsdWdpbl0gPSAiLS1lbmFibGUtbWFlbW8tcGx1Z2luLC0tZGlzYWJsZS1tYWVtby1wbHVnaW4iCitQQUNLQUdFQ09ORklHW21hZW1vLXJlc291cmNlLW1hbmFnZXJdID0gIi0tZW5hYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsLS1kaXNhYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1tzYW1wbGVyYXRlXSA9ICItLWVuYWJsZS1zYW1wbGVyYXRlLC0tZGlzYWJsZS1zYW1wbGVyYXRlLGxpYnNhbXBsZXJhdGUwIgorUEFDS0FHRUNPTkZJR1tzcGVleGRzcF0gPSAiLS13aXRoLXNwZWV4PWxpYiwtLXdpdGgtc3BlZXg9bm8sc3BlZXhkc3AiCisKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ2Fsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5saWJhc291bmQtbW9kdWxlLS4qIgorCisjIFRoZSBhbHNhLXBsdWdpbnMgcGFja2FnZSBkb2Vzbid0IGl0c2VsZiBjb250YWluIGFueXRoaW5nLCBpdCBqdXN0IGRlcGVuZHMgb24KKyMgYWxsIGJ1aWx0IHBsdWdpbnMuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAke0R9JHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEKKworCSMgV2UgdXNlIHRoZSBleGFtcGxlIGFzIGlzLCBzbyBqdXN0IGRyb3AgdGhlIC5leGFtcGxlIHN1ZmZpeC4KKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCW12ICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYuZXhhbXBsZSAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mCisJZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgcGx1Z2luZGlyID0gYmIuZGF0YS5leHBhbmQoJyR7bGliZGlyfS9hbHNhLWxpYi8nLCBkKQorICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYmFzb3VuZF9tb2R1bGVfKC4qKVwuc28kJywgJ2xpYmFzb3VuZC1tb2R1bGUtJXMnLCAnQWxzYSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykpCisgICAgZC5zZXRWYXIoIlJERVBFTkRTX2Fsc2EtcGx1Z2lucyIsIHBhY2thZ2VzKQorfQorCisjIFRoZSByYXRlIHBsdWdpbnMgY3JlYXRlIHNvbWUgc3ltbGlua3MuIEZvciBleGFtcGxlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4KKyMgY3JlYXRlcyB0aGVzZSBsaW5rcyB0byB0aGUgbWFpbiBwbHVnaW4gZmlsZToKKyMKKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9iZXN0LnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbGluZWFyLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbWVkaXVtLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfb3JkZXIuc28KKyMKKyMgVGhlIG90aGVyIHJhdGUgcGx1Z2lucyBjcmVhdGUgc2ltaWxhciBsaW5rcy4gV2UgaGF2ZSB0byBhZGQgdGhlIGxpbmtzIHRvCisjIEZJTEVTIG1hbnVhbGx5LCBiZWNhdXNlIGRvX3NwbGl0X3BhY2thZ2VzKCkgc2tpcHMgdGhlIGxpbmtzICh3aGljaCBpcyBnb29kLAorIyBiZWNhdXNlIHdlIHdvdWxkbid0IHdhbnQgZG9fc3BsaXRfcGFja2FnZXMoKSB0byBjcmVhdGUgc2VwYXJhdGUgcGFja2FnZXMgZm9yCisjIHRoZSBzeW1saW5rcykuCisjCisjIFRoZSBzeW1saW5rcyBjYXVzZSBRQSBlcnJvcnMsIGJlY2F1c2UgdXN1YWxseSBpdCdzIGEgYnVnIGlmIGEgbm9uCisjIC1kZXYvLWRiZy8tbmF0aXZlc2RrIHBhY2thZ2UgY29udGFpbnMgbGlua3MgdG8gLnNvIGZpbGVzLCBidXQgaW4gdGhpcyBjYXNlCisjIHRoZSBlcnJvcnMgYXJlIGZhbHNlIHBvc2l0aXZlcywgc28gd2UgZGlzYWJsZSB0aGUgUUEgY2hlY2tzLgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9sYXZjcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NhbXBsZXJhdGVfKi5zbyIKK0ZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NwZWV4cmF0ZV8qLnNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8uZGVidWciCisKKyMgNTAtcHVsc2VhdWRpby5jb25mIGRlZmluZXMgYSBkZXZpY2UgbmFtZWQgInB1bHNlIiB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gdXNlCisjIGlmIHRoZXkgZXhwbGljaXRseSB3YW50IHRvIHVzZSB0aGUgUHVsc2VBdWRpbyBwbHVnaW4uCisjIDk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIGNvbmZpZ3VyZXMgdGhlICJkZWZhdWx0IiBkZXZpY2UgdG8gdXNlIHRoZQorIyBQdWxzZUF1ZGlvIHBsdWdpbi4KK0ZJTEVTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAorICAgICAgICAke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvNTAtcHVsc2VhdWRpby5jb25mIFwKKyAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcHVsc2VhdWRpby1jb25mICs9ICJcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY29uZi1wdWxzZSBcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY3RsLXB1bHNlIFwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1wY20tcHVsc2UgXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQ5YTMwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAxZTU5MjZkZjc0YTM1ZmUyY2Q5MGJjNTlmNTI2NGE4NzE1Yzk0MDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwODoxNjo1OSArMDAwMAorU3ViamVjdDogW1BBVENIXSBhczEwazE6IE1ha2Ugb3V0cHV0X3RyYW1fbGluZSgpIHN0YXRpYyBpbmxpbmUKKworVGhlIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGluIGFueSBvdGhlciBmaWxlLCBpdHMgYmV0dGVyIHRvIG1ha2UgaXQgc3RhdGljCitpbmxpbmUgc28gY29tcGlsZXIgaGFzIGEgYmV0dGVyIGNoYW5jZSBvZiBvcHRpbWl6aW5nIGhlcmUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBhczEwazEvYXMxMGsxLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hczEwazEvYXMxMGsxLmMgYi9hczEwazEvYXMxMGsxLmMKK2luZGV4IDk2YWYwYzMuLmQwNzY2ZmQgMTAwNjQ0CistLS0gYS9hczEwazEvYXMxMGsxLmMKKysrKyBiL2FzMTBrMS9hczEwazEuYworQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIGFzX2V4aXQoY29uc3QgY2hhciAqbWVzc2FnZSkKKyAJZXhpdCgxKTsKKyB9CisgCistaW5saW5lIHZvaWQgb3V0cHV0X3RyYW1fbGluZSggc3RydWN0IGxpc3RfaGVhZCAqbGluZV9oZWFkLCBpbnQgdHlwZSl7Cisrc3RhdGljIGlubGluZSB2b2lkIG91dHB1dF90cmFtX2xpbmUoIHN0cnVjdCBsaXN0X2hlYWQgKmxpbmVfaGVhZCwgaW50IHR5cGUpeworICAgICAgICAgCisgICAgICAgICBzdHJ1Y3QgdHJhbSAqdHJhbV9zeW07CisgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvYXV0b3Rvb2xzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzkxZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorQWRkIHBhcmFtZXRlcnMgdG8gYXV0b3JlY29uZiB0byBzdXBwb3J0IGNyb3NzIGNvbXBpbGUuCitSZW1vdmUgc29tZSBzdWItY29tcG9uZW50cyB3aGljaCBuZWVkcyBmdXJ0aGVyIHJlY2lwZSBzdXBwb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL2xkMTBrMS9naXRjb21waWxlIGFsc2EtdG9vbHMtMS4wLjI0LjEvbGQxMGsxL2dpdGNvbXBpbGUKKy0tLSBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL2xkMTBrMS9naXRjb21waWxlCTIwMTEtMDctMDYgMTE6Mjc6NDAuMjI3NjY1MDAyICswODAwCisrKysgYWxzYS10b29scy0xLjAuMjQuMS9sZDEwazEvZ2l0Y29tcGlsZQkyMDExLTA3LTE0IDEzOjI2OjE4LjAxNzY2NTAwNCArMDgwMAorQEAgLTEsNiArMSw2IEBACisgIyEvYmluL2Jhc2gKKyAKKy1hdXRvcmVjb25mIC1maSB8fCBleGl0IDEKKythdXRvcmVjb25mICRBQ0xPQ0FMX0ZMQUdTIC1maSB8fCBleGl0IDEKKyBleHBvcnQgQ0ZMQUdTPSctTzIgLVdhbGwgLXBpcGUgLWcnCisgZWNobyAiQ0ZMQUdTPSRDRkxBR1MiCisgZWNobyAiLi9jb25maWd1cmUgJEAiCitkaWZmIC1ydU4gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9NYWtlZmlsZSBhbHNhLXRvb2xzLTEuMC4yNC4xL01ha2VmaWxlCistLS0gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9NYWtlZmlsZQkyMDExLTA3LTA2IDExOjI3OjQwLjIwNzY2NTAwMCArMDgwMAorKysrIGFsc2EtdG9vbHMtMS4wLjI0LjEvTWFrZWZpbGUJMjAxMS0wNy0xNCAxNTowODowOC44Nzc2NjUwMDkgKzA4MDAKK0BAIC0xLDggKzEsOCBAQAorIFZFUlNJT04gPSAxLjAuMjkKKyBUT1AgPSAuCistU1VCRElSUyA9IGFzMTBrMSBlbnZ5MjRjb250cm9sIGhkc3Bsb2FkZXIgaGRzcGNvbmYgaGRzcG1peGVyIFwKKytTVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgXAorIAkgIG1peGFydGxvYWRlciBwY3hocmxvYWRlciBybWVkaWdpY29udHJvbCBzYjE2X2NzcCBzZXEgc3NjYXBlX2N0bCBcCistCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBsZDEwazEgcWxvMTBrMSBcCisrCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBcCisgCSAgaHdtaXh2b2x1bWUgaGRhamFja3JldGFzayBoZGEtdmVyYiBoZGFqYWNrc2Vuc2V0ZXN0CisgCisgYWxsOgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MzI4YmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL2Jhc2gKKworYWNsb2NhbCAkQUNMT0NBTF9GTEFHUyB8fCBleGl0IDEKK2F1dG9tYWtlIC0tZm9yZWlnbiAtLWFkZC1taXNzaW5nIHx8IGV4aXQgMQorYXV0b2NvbmYgfHwgZXhpdCAxCitleHBvcnQgQ0ZMQUdTPSctTzIgLVdhbGwgLXBpcGUgLWcnCitlY2hvICJDRkxBR1M9JENGTEFHUyIKK2VjaG8gIi4vY29uZmlndXJlICRAIgorLi9jb25maWd1cmUgJEAgfHwgZXhpdCAxCit1bnNldCBDRkxBR1MKK2lmIFsgLXogIiRHSVRDT01QSUxFX05PX01BS0UiIF07IHRoZW4KKyAgbWFrZSB8fCBleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9tYWtlZmlsZV9ub19ndGsucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9tYWtlZmlsZV9ub19ndGsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NzYwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL21ha2VmaWxlX25vX2d0ay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitSZW1vdmUgc29tZSBzdWItY29tcG9uZW50cyB3aGljaCBuZWVkIGd0aysuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9nZXJpbyBOdW5lcyA8cm9udW5lc0BnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorCitVcGRhdGUgcGF0Y2ggZm9yIGFsc2EtdG9vbHMgMS4wLjI5CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggMjQ1N2ExYy4uNzIzNDZkOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsOSArMSw5IEBACisgVkVSU0lPTiA9IDEuMC4yOQorIFRPUCA9IC4KKy1TVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgXAorLQkgIG1peGFydGxvYWRlciBwY3hocmxvYWRlciBybWVkaWdpY29udHJvbCBzYjE2X2NzcCBzZXEgc3NjYXBlX2N0bCBcCistCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBcCistCSAgaHdtaXh2b2x1bWUgaGRhamFja3JldGFzayBoZGEtdmVyYiBoZGFqYWNrc2Vuc2V0ZXN0CisrU1VCRElSUyA9IGFzMTBrMSBcCisrCSAgbWl4YXJ0bG9hZGVyIHBjeGhybG9hZGVyIHNiMTZfY3NwIHNlcSBzc2NhcGVfY3RsIFwKKysJICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgXAorKwkgIGh3bWl4dm9sdW1lIGhkYS12ZXJiIGhkYWphY2tzZW5zZXRlc3QKKyAKKyBhbGw6CisgCUBmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjAuMjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmMzk2ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMC4yOS5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIkFkdmFuY2VkIHRvb2xzIGZvciBjZXJ0YWluIEFMU0Egc291bmQgY2FyZCBkcml2ZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyKyIKK0RFUEVORFMgPSAiYWxzYS1saWIgbmN1cnNlcyBnbGliLTIuMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaGRzcGxvYWRlci9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sZDEwazEvQ09QWUlORy5MSUI7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi90b29scy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJycsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly9tYWtlZmlsZV9ub19ndGsucGF0Y2gnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMzM5YTNjZDI0Zjc0OGM5ZDAwN2JkZmYwZTk4Nzc1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NGFiZjBhYjVhNzNmMDcxMGM3MGQ0ZmIzZGMxMDAzYWY1YmFlMmQyZWQ3MjFkNTlkMjQ1YjQxYWQwZjJmYmQxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK0VYVFJBX09FTUFLRSArPSAiR0lUQ09NUElMRV9BUkdTPSctLWhvc3Q9JHtIT1NUX1NZU30gLS1idWlsZD0ke0JVSUxEX1NZU30gLS10YXJnZXQ9JHtUQVJHRVRfU1lTfSAtLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0gLS1wcmVmaXg9JHtwcmVmaXh9JyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2d0aysnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tndGsrXSA9ICIsLGd0aysgZ3RrKzMsIgorCisjIGNvbmZpZ3VyZS5hYy8uaW4gZG9lc24ndCBleGlzdCBzbyBmb3JjZSBjb3B5CitBVVRPVE9PTFNfQ09QWUFDTE9DQUwgPSAiMSIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgICAjQXV0b21ha2UgZGlyIGlzIG5vdCBjb3JyZWN0bHkgZGV0ZWN0ZWQgaW4gY3Jvc3MgY29tcGlsYXRpb24gY2FzZQorICAgIGV4cG9ydCBBVVRPTUFLRV9ESVI9IiQoYXV0b21ha2UgLS1wcmludC1saWJkaXIpIgorICAgIGV4cG9ydCBBQ0xPQ0FMX0ZMQUdTPSItLXN5c3RlbS1hY2Rpcj0ke0FDTE9DQUxESVJ9LyIKKworICAgIGNwICR7V09SS0RJUn0vZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0ICR7U30vaGRhamFja3NlbnNldGVzdC9naXRjb21waWxlCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2xkMTBrMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4wLjI5LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4ZjliOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgYWxzYS11dGlsc18ke1BWfS5iYgorCitTVU1NQVJZID0gIlNoZWxsIHNjcmlwdHMgdGhhdCBzaG93IGhlbHAgaW5mbyBhbmQgY3JlYXRlIEFMU0EgY29uZmlndXJhdGlvbiBmaWxlcyIKK1BST1ZJREVTID0gImFsc2EtdXRpbHMtYWxzYWNvbmYiCisKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2Fsc2EtdXRpbHM6IgorCitQQUNLQUdFUyA9ICIke1BOfSIKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgorCitGSUxFU18ke1BOfSA9ICIke3NiaW5kaXJ9L2Fsc2Fjb25mIFwKKyAgICAgICAgICAgICAgICR7c2JpbmRpcn0vYWxzYS1pbmZvLnNoIFwKKyAgICAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vYWxzYS11dGlscy0ke1BWfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYWxzYWNvbmYvYWxzYWNvbmYgJHtEfSR7c2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vYWxzYS1pbmZvL2Fsc2EtaW5mby5zaCAke0R9JHtzYmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTlkZDUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gNDNhNTZmYTM2YTEyZjA5Y2NkNzhiM2NmNWU2YWUxOTdmY2FiNTAxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBGcmksIDI5IEF1ZyAyMDE0IDE4OjU4OjU2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFsc2FjdGw6IGRvbid0IGxldCBzeXN0ZW1kIHVuaXQgcmVzdG9yZSB0aGUgdm9sdW1lIHdoZW4KKyBhc291bmQuc3RhdGUgaXMgbWlzc2luZworCitUaGlzIGF2b2lkcyBhbiBlcnJvciBvbiBib290dXAKKworRmlsZWQgYXMgaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL3ZpZXcucGhwP2lkPTU0NTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgYWxzYWN0bC9NYWtlZmlsZS5hbSAgICAgICAgICAgICB8IDcgKysrKy0tLQorIGFsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4gfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Fsc2FjdGwvTWFrZWZpbGUuYW0gYi9hbHNhY3RsL01ha2VmaWxlLmFtCitpbmRleCA0N2YwNmU5Li5iNzI4YzA2IDEwMDY0NAorLS0tIGEvYWxzYWN0bC9NYWtlZmlsZS5hbQorKysrIGIvYWxzYWN0bC9NYWtlZmlsZS5hbQorQEAgLTQzLDkgKzQzLDEwIEBAIGluc3RhbGwtZGF0YS1ob29rOgorIGVuZGlmCisgCisgZWRpdCA9IFwKKy0JJChTRUQpIC1yIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCistCQkgIC1lICdzLEBteWRhdGFkaXJcQCwkKG15ZGF0YWRpciksZycgXAorLQkJICAtZSAncyxAZGFlbW9uc3dpdGNoXEAsJChBTFNBQ1RMX0RBRU1PTlNXSVRDSCksZycgXAorKwkkKFNFRCkgLWUgJ3MsQGxvY2Fsc3RhdGVkaXJcQCwkKGxvY2Fsc3RhdGVkaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisrCSAgICAgICAtZSAncyxAbXlkYXRhZGlyXEAsJChteWRhdGFkaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBkYWVtb25zd2l0Y2hcQCwkKEFMU0FDVExfREFFTU9OU1dJVENIKSxnJyBcCisgCQkJCQkJCTwgJDwgPiAkQCB8fCBybSAkQAorIAorIGFsc2Etc3RhdGUuc2VydmljZTogYWxzYS1zdGF0ZS5zZXJ2aWNlLmluCitkaWZmIC0tZ2l0IGEvYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbiBiL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4KK2luZGV4IDI0NWE0MzkuLmIwMTc4NTQgMTAwNjQ0CistLS0gYS9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluCisrKysgYi9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluCitAQCAtMTAsNiArMTAsNyBAQCBEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCisgQWZ0ZXI9YWxzYS1zdGF0ZS5zZXJ2aWNlCisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIENvbmZsaWN0cz1zaHV0ZG93bi50YXJnZXQKKytDb25kaXRpb25QYXRoRXhpc3RzPUBsb2NhbHN0YXRlZGlyQC9saWIvYWxzYS9hc291bmQuc3RhdGUKKyAKKyBbU2VydmljZV0KKyBUeXBlPW9uZXNob3QKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjAwNGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2FwbGF5L2FyZWNvcmQgKGFsc2EtdXRpbHMgdjEuMC4yOCkgY2Fubm90IGludGVycnVwdCBzdHJlYW1pbmcKK3ZpYSBDVFJMLUMuIEZpeGVkIHRoZSBpc3N1ZSBieSByZXZlcnRpbmcgYnVnZ3kgcGF0Y2hlcyBhbmQKK3Byb3Blcmx5IGhhbmRsaW5nICdpbl9hYm9ydGluZycgZmxhZyBpbiBhcHByb3ByaWF0ZSBmdW5jdGlvbnMuCisKK1NpZ25lZC1vZmYtYnk6IEFuYW50IEFncmF3YWwgPEFuYW50X0FncmF3YWxAbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1pa2hhaWwgRHVybmV2IDxtaWtoYWlsX2R1cm5ldkBtZW50b3IuY29tPgorCistLS0gYS9hcGxheS9hcGxheS5jCTIwMTQtMDUtMTkgMTY6MjU6MTQuMDAwMDAwMDAwICswNTMwCisrKysgYi9hcGxheS9hcGxheS5jCTIwMTQtMDUtMjAgMTU6MTc6MTQuMzY0ODIzMDA3ICswNTMwCitAQCAtMzkyLDE0ICszOTIsMjIgQEAKKyAJCXB1dGNoYXIoJ1xuJyk7CisgCWlmICghcXVpZXRfbW9kZSkKKyAJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGVkIGJ5IHNpZ25hbCAlcy4uLlxuIiksIHN0cnNpZ25hbChzaWcpKTsKKy0JaWYgKGhhbmRsZSkKKysJaWYgKHN0cmVhbSA9PSBTTkRfUENNX1NUUkVBTV9DQVBUVVJFKSB7CisrCQlpZiAoZm10X3JlY190YWJsZVtmaWxlX3R5cGVdLmVuZCkgeworKwkJCWZtdF9yZWNfdGFibGVbZmlsZV90eXBlXS5lbmQoZmQpOworKwkJCWZkID0gLTE7CisrCQl9CisrCQlzdHJlYW0gPSAtMTsKKysJfQorKwlpZiAoZmQgPiAxKSB7CisrCQljbG9zZShmZCk7CisrCQlmZCA9IC0xOworKwl9CisrCWlmIChoYW5kbGUgJiYgc2lnICE9IFNJR0FCUlQpIHsKKyAJCXNuZF9wY21fYWJvcnQoaGFuZGxlKTsKKy0JaWYgKHNpZyA9PSBTSUdBQlJUKSB7CistCQkvKiBkbyBub3QgY2FsbCBzbmRfcGNtX2Nsb3NlKCkgYW5kIGFib3J0IGltbWVkaWF0ZWx5ICovCisgCQloYW5kbGUgPSBOVUxMOworLQkJcHJnX2V4aXQoRVhJVF9GQUlMVVJFKTsKKyAJfQorLQlzaWduYWwoc2lnLCBzaWduYWxfaGFuZGxlcik7CisrCXByZ19leGl0KEVYSVRfRkFJTFVSRSk7CisgfQorIAorIC8qIGNhbGwgb24gU0lHVVNSMSBzaWduYWwuICovCitAQCAtMjA5Niw3ICsyMTA0LDcgQEAKKyAJc3NpemVfdCByZXN1bHQgPSBjb3VudCwgcjsKKyAJc2l6ZV90IHNpemU7CisgCistCXdoaWxlIChjb3VudCA+IDApIHsKKysJd2hpbGUgKGNvdW50ID4gMCAmJiAhaW5fYWJvcnRpbmcpIHsKKyAJCXNpemUgPSBjb3VudDsKKyAJCWlmIChzaXplID4gY2h1bmtfYnl0ZXMgLSBidWZmZXJfcG9zKQorIAkJCXNpemUgPSBjaHVua19ieXRlcyAtIGJ1ZmZlcl9wb3M7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzI4M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitbUEFUQ0hdIGFzc3VtZSBzdG9yaW5nIGlzIHN1Y2Nlc3MgaWYgbm90IHNvdW5kIGNhcmQgZGV2aWNlCisKK1Vwc3RyZWFtLVN0YXR1ZTogUGVuZGluZworCitTeXN0ZW1kIHdpbGwgcmVwb3J0IGZhaWx1cmUgd2hlbiBydW4gYWxzYS0qLCBpZiB0aGUgbWFjaGluZSBoYXMgbm90IHRoZQorc291bmQgY2FyZC4gVG8gdm9pZCB0aGlzIGFubm95ZWQgbWVzc2FnZSwgYWxzYS1yZXN0b3JlL2Fsc2Etc3RhdGUgaWdub3JlCithbGwgdGhlIGV4aXQgY29kZXMgYnkgcHJlZml4aW5nICItIiBpbiBFeGVjU3RhcnQsIGxpa2U6CisKKyAgIGFsc2EtdXRpbHMtMS4wLjI5JCBncmVwICI9LSIgLi8gLXJ8Z3JlcCBzZXJ2aWNlLmluCisgICAuL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW46RXhlY1N0YXJ0PS1Ac2JpbmRpckAvYWxzYWN0bCByZXN0b3JlCisgICAuL2Fsc2FjdGwvYWxzYS1zdGF0ZS5zZXJ2aWNlLmluOkV4ZWNTdGFydD0tQHNiaW5kaXJAL2Fsc2FjdGwgLXMgLW4gMTkgLWMgcmRhZW1vbgorICAgLi9hbHNhY3RsL2Fsc2Etc3RhdGUuc2VydmljZS5pbjpFeGVjU3RvcD0tQHNiaW5kaXJAL2Fsc2FjdGwgLXMga2lsbCBzYXZlX2FuZF9xdWl0CisgICBsc2EtdXRpbHMtMS4wLjI5JAorCitCdXQgYWxzYS1zdG9yZS5zZXJ2aWNlLmluIGlzIG1pc3NpbmcsIGFuZCBiZXR0ZXIgc29sdXRpb24gaXMgdG8gaWdub3JlCit0aGUgZXhpdCBjb2RlIDE5IHdoaWNoIG1lYW5zIG5vdCBzb3VuZCBjYXJkIGRldmljZSwgbm90IGFsbCBleGl0IGNvZGUKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2Fsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluIGIvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4KK2luZGV4IGYxYTU2YmIuLjY4Y2E1MjkgMTAwNjQ0CistLS0gYS9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbgorKysrIGIvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4KK0BAIC0xMywzICsxMyw0IEBAIEJlZm9yZT1zaHV0ZG93bi50YXJnZXQKKyBUeXBlPW9uZXNob3QKKyBFeGVjU3RhcnQ9QHNiaW5kaXJAL2Fsc2FjdGwgc3RvcmUKKyBTdGFuZGFyZE91dHB1dD1zeXNsb2cKKytTdWNjZXNzRXhpdFN0YXR1cz0wIDE5CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMC4yOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZlNGIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYWxzYWN0bC91dGlscy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWZlOTUyNmIwNTVlMjQ2YjU1NTg4MDlhNWFlMjVjMGI5IgorREVQRU5EUyA9ICJhbHNhLWxpYiBuY3Vyc2VzIGxpYnNhbXBsZXJhdGUwIgorCitQQUNLQUdFQ09ORklHID8/PSAidWRldiIKK1BBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPWBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kLCx1ZGV2IgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS1lbmFibGUteG1sdG8sIC0tZGlzYWJsZS14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvdXRpbHMvYWxzYS11dGlscy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXNzdW1lLXN0b3JpbmctaXMtc3VjY2Vzcy1pZi1ub3Qtc291bmQtY2FyZC1kZXZpY2UucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiMjg5YmY4NzRjNGM5YTYzZjRiMzk3MzA5M2RkNDA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNjAwNThmM2UxNDQ4M2NlZDVkZTkxOWRkNDczZjkzOTMyMDU5NDU0NTMwYTliN2VmOTdkY2FiZDY4MzNlOWIiCisKKyMgbGF6eSBoYWNrLiBuZWVkcyBwcm9wZXIgZml4aW5nIGluIGdldHRleHQubTQsIHNlZQorIyBodHRwOi8vYnVncy5vcGVuZW1iZWRkZWQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ4CisjIHBsZWFzZSBjbG9zZSBidWcgYW5kIHJlbW92ZSB0aGlzIGNvbW1lbnQgd2hlbiBwcm9wZXJseSBmaXhlZAorIworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW5scyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIyBUaGlzIGFyZSBhbGwgcGFja2FnZXMgdGhhdCB3ZSBuZWVkIHRvIG1ha2UuIEFsc28sIHRoZSBub3cgZW1wdHkgYWxzYS11dGlscworIyBpcGsgZGVwZW5kcyBvbiB0aGVtLgorCitBTFNBX1VUSUxTX1BLR1MgPSAiXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLW1pZGkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXBsYXkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFjb25uZWN0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWllY3NldCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1zcGVha2VydGVzdCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxbmV0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFkdW1wIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FjdGwgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWxvb3AgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYXVjbSBcCisgICAgICAgICAgICAiCisKK1BBQ0tBR0VTICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCitSREVQRU5EU18ke1BOfSArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19hbHNhLXV0aWxzLWFwbGF5ICAgICAgID0gIiR7YmluZGlyfS9hcGxheSAke2JpbmRpcn0vYXJlY29yZCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgPSAiJHtiaW5kaXJ9L2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgPSAiJHtiaW5kaXJ9L2Fsc2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgPSAiJHtiaW5kaXJ9L3NwZWFrZXItdGVzdCAke2RhdGFkaXJ9L3NvdW5kcy9hbHNhLyAke2RhdGFkaXJ9L2Fsc2Evc3BlYWtlci10ZXN0LyIKK0ZJTEVTX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5bWlkaSAke2JpbmRpcn0vYXJlY29yZG1pZGkgJHtiaW5kaXJ9L2FtaWRpIgorRklMRVNfYWxzYS11dGlscy1hY29ubmVjdCAgICA9ICIke2JpbmRpcn0vYWNvbm5lY3QiCitGSUxFU19hbHNhLXV0aWxzLWFzZXFuZXQgICAgID0gIiR7YmluZGlyfS9hc2VxbmV0IgorRklMRVNfYWxzYS11dGlscy1pZWNzZXQgICAgICA9ICIke2JpbmRpcn0vaWVjc2V0IgorRklMRVNfYWxzYS11dGlscy1hbHNhY3RsICAgICA9ICIke3NiaW5kaXJ9L2Fsc2FjdGwgKi91ZGV2L3J1bGVzLmQgKi8qL3VkZXYvcnVsZXMuZCAke3N5c3RlbWRfdW5pdGRpcn0gJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYSAke2RhdGFkaXJ9L2Fsc2EvaW5pdC8iCitGSUxFU19hbHNhLXV0aWxzLWFzZXFkdW1wICAgID0gIiR7YmluZGlyfS9hc2VxZHVtcCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgPSAiJHtiaW5kaXJ9L2Fsc2Fsb29wIgorRklMRVNfYWxzYS11dGlscy1hbHNhdWNtICAgICA9ICIke2JpbmRpcn0vYWxzYXVjbSIKKworCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXBsYXkgICAgICAgID0gIlBsYXkgKGFuZCByZWNvcmQpIHNvdW5kIGZpbGVzIHVzaW5nIEFMU0EiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgID0gIkNvbW1hbmQtbGluZSBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhbWl4ZXIgICAgPSAibmN1cnNlcy1iYXNlZCBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKK1NVTU1BUllfYWxzYS11dGlscy1zcGVha2VydGVzdCAgPSAiQUxTQSBzdXJyb3VuZCBzcGVha2VyIHRlc3QgdXRpbGl0eSIKK1NVTU1BUllfYWxzYS11dGlscy1taWRpICAgICAgICAgPSAiTWlzY2VsbGFuZW91cyBNSURJIHV0aWxpdGllcyBmb3IgQUxTQSIKK1NVTU1BUllfYWxzYS11dGlscy1hY29ubmVjdCAgICAgPSAiQUxTQSBzZXF1ZW5jZXIgY29ubmVjdGlvbiBtYW5hZ2VyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFuZXQgICAgICA9ICJOZXR3b3JrIGNsaWVudC9zZXJ2ZXIgZm9yIEFMU0Egc2VxdWVuY2VyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWllY3NldCAgICAgICA9ICJBTFNBIHV0aWxpdHkgZm9yIHNldHRpbmcvc2hvd2luZyBJRUM5NTggKFMvUERJRikgc3RhdHVzIGJpdHMiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWN0bCAgICAgID0gIlNhdmVzL3Jlc3RvcmVzIEFMU0Etc2V0dGluZ3MgaW4gL2V0Yy9hc291bmQuc3RhdGUiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcWR1bXAgICAgID0gIlNob3dzIHRoZSBldmVudHMgcmVjZWl2ZWQgYXQgYW4gQUxTQSBzZXF1ZW5jZXIgcG9ydCIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhbG9vcCAgICAgPSAiQUxTQSBQQ00gbG9vcGJhY2sgdXRpbGl0eSIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhdWNtICAgICAgPSAiQUxTQSBVc2UgQ2FzZSBNYW5hZ2VyIgorCitSUkVDT01NRU5EU19hbHNhLXV0aWxzLWFsc2FjdGwgPSAiYWxzYS1zdGF0ZXMiCisKK0FMTE9XX0VNUFRZX2Fsc2EtdXRpbHMgPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSBkb24ndCBzaGlwIHRoaXMgaGVyZSBiZWNhdXNlIGl0IHJlcXVpcmVzIGEgZGVwZW5kZW5jeSBvbiBiYXNoLgorCSMgU2VlIGFsc2EtdXRpbHMtc2NyaXB0c18ke1BWfS5iYgorCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2Fjb25mCisJcm0gJHtEfSR7c2JpbmRpcn0vYWxzYS1pbmZvLnNoCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1ZGV2JywgJ2ZhbHNlJywgJ3RydWUnLCBkKX07IHRoZW4KKwkgICAjIFRoaXMgaXMgd2hlcmUgYWxzYS11dGlscyB3aWxsIGluc3RhbGwgaXRzIHJ1bGVzIGlmIHdlIGRvbid0IHRlbGwgaXQgYW55dGhpbmcgZWxzZS4KKwkgICBybSAtcmYgJHtEfS9saWIvdWRldgorCSAgIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0vbGliCisJZmkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmxhYy9mbGFjXzEuMy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mbGFjL2ZsYWNfMS4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1MjcxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmxhYy9mbGFjXzEuMy4xLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiRnJlZSBMb3NzbGVzcyBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIkZMQUMgc3RhbmRzIGZvciBGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjLCBhIGxvc3NsZXNzIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdC4iCitIT01FUEFHRSA9ICJodHRwczovL3hpcGgub3JnL2ZsYWMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvZmxhYy9idWdzLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR0ZETC0xLjIgJiBHUEx2MisgJiBMR1BMdjIuMSsgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkZETDttZDU9YWQxNDE5ZWNjNTZlMDYwZWNjZjgxODRhODdjNDI4NWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL01ha2VmaWxlLmFtO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTBhODUzYjgxZDlkNDNkOGFhZDNiNTNiMDVjZmNjMzdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmxhYy9tYWluLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9ZDAzYTc2NjU1OGQyMzNmOWNjM2FjNWRmYWZkNDlkZWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGx1Z2luX2NvbW1vbi9hbGwuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT03YzhhM2I5ZTFlNjZlZDBhYmE3NjViYzZmMzVkYTg1ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLlhpcGg7bWQ1PWEyYzRiNzFjMDE5ODY4MjM3NmQ0ODNlYjViY2M5MTk3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvRkxBQy9hbGwuaDtiZWdpbmxpbmU9NjU7ZW5kbGluZT03MDttZDU9NjQ0NzRmMmIyMmU5ZTc3YjI4ZDhiOGIyNWM5ODNhNDgiCitERVBFTkRTID0gImxpYm9nZyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL2ZsYWMvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk5MjJjOWEwMzc4Yzg4ZDNlOTAxYjIzNGY4NTI2OTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDc3M2MwMDk5ZGJhNzY3ZDk2M2ZkOTIxNDMyNjNiZTMzOGM0ODcwMjE3MmU4NzU0YjliYzUxMDNlZmUxYzU2YyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW9nZ3Rlc3QgXAorICAgICAgICAgICAgICAgIC0td2l0aC1vZ2ctbGlicmFyaWVzPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtb2dnLWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1tcy1wbHVnaW4gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggXAorICAgICAgICAgICAgICAgIGFjX2N2X3Byb2dfTkFTTT0iIiBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFsdGl2ZWMiLCAiIC0tZW5hYmxlLWFsdGl2ZWMiLCAiIC0tZGlzYWJsZS1hbHRpdmVjIiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlMiIsICIgLS1lbmFibGUtc3NlIiwgIiIsIGQpfSIKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZWk3IiwgIiAtLWVuYWJsZS1zc2UiLCAiIiwgZCl9IgorCitQQUNLQUdFUyArPSAibGliZmxhYyBsaWJmbGFjKysgbGlib2dnZmxhYyBsaWJvZ2dmbGFjKysiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2xpYmZsYWMgPSAiJHtsaWJkaXJ9L2xpYkZMQUMuc28uKiIKK0ZJTEVTX2xpYmZsYWMrKyA9ICIke2xpYmRpcn0vbGliRkxBQysrLnNvLioiCitGSUxFU19saWJvZ2dmbGFjID0gIiR7bGliZGlyfS9saWJPZ2dGTEFDLnNvLioiCitGSUxFU19saWJvZ2dmbGFjKysgPSAiJHtsaWJkaXJ9L2xpYk9nZ0ZMQUMrKy5zby4qIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMmQ0NmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaApAQCAtMCwwICsxLDI1MiBAQAorRnJvbSBkNjRjN2VkYjY2ZjRhNjRmZjQ5YzQzMDZjZjc3ZmQyNjliNzA3OWFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMTYgTWFyIDIwMTUgMTM6NDU6MzAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIGVycm9yIHNpZ25hbCBlbWlzc2lvbiBmb3IgbWlzc2luZyBwbHVnaW5zCisKK0FkZCBhIG1pc3NpbmcgcGx1Z2lucyBlcnJvciBzaWduYWwgdG8gZ3N0LXBsYXllci4gTm90ZSB0aGF0IHRoaXMgZXJyb3IKK2RvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIHBsYXliYWNrIGhhcyBjb21wbGV0ZWx5IGZhaWxlZCwgYnV0IGluCitwcmFjdGljZSB0aGUgdXNlciBleHBlcmllbmNlIHdpbGwgYmUgYmFkICh0aGluaywgZS5nLiBvZiBhIG1wNCBmaWxlCit3aGVyZSBILjI2NCBjb2RlYyBpcyBtaXNzaW5nOiBBQUMgcGxheWJhY2sgc3RpbGwgd29ya3MuLi4pLgorCitVc2UgdGhlIHNpZ25hbCBpbiBndGstcGxheSB0byBzaG93IGEgaW5mb2JhciBpZiBwbHVnaW5zIGFyZSBtaXNzaW5nLgorCitTdWJtaXR0ZWQgdXBzdHJlYW0gYXQgaHR0cHM6Ly9naXRodWIuY29tL3Nkcm9lZ2UvZ3N0LXBsYXllci9wdWxsLzExCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgfCAgMiArLQorIGd0ay9ndGstcGxheS5jICAgICAgICAgICAgIHwgNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIHwgMjIgKysrKysrKysrKysrKysrKysrKworIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oIHwgIDMgKystCisgNCBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5MGFiNzRjLi42Y2RiNGViIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01Myw3ICs1Myw3IEBAIEFDX1NVQlNUKExUX0FHRSkKKyBQS0dfUFJPR19QS0dfQ09ORklHCisgCisgUEtHX0NIRUNLX01PRFVMRVMoR0xJQiwgW2dsaWItMi4wIGdvYmplY3QtMi4wXSkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHU1RSRUFNRVIsIFtnc3RyZWFtZXItMS4wID49IDEuNCBnc3RyZWFtZXItdmlkZW8tMS4wID49IDEuNF0pCisrUEtHX0NIRUNLX01PRFVMRVMoR1NUUkVBTUVSLCBbZ3N0cmVhbWVyLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXZpZGVvLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXBidXRpbHMtMS4wXSkKKyAKKyBHTElCX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdsaWItMi4wYCIKKyBBQ19TVUJTVChHTElCX1BSRUZJWCkKK2RpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCitpbmRleCBiOTI3NzNiLi5lMmI2MDVhIDEwMDY0NAorLS0tIGEvZ3RrL2d0ay1wbGF5LmMKKysrKyBiL2d0ay9ndGstcGxheS5jCitAQCAtMzAsNiArMzAsOCBAQCB0eXBlZGVmIHN0cnVjdAorICAgR3RrV2lkZ2V0ICpwcmV2X2J1dHRvbiwgKm5leHRfYnV0dG9uOworICAgR3RrV2lkZ2V0ICpzZWVrYmFyOworICAgR3RrV2lkZ2V0ICp2aWRlb19hcmVhOworKyAgR3RrV2lkZ2V0ICppbmZvX2xhYmVsOworKyAgR3RrV2lkZ2V0ICppbmZvX2JhcjsKKyAgIEd0a1dpZGdldCAqdm9sdW1lX2J1dHRvbjsKKyAgIGd1bG9uZyBzZWVrYmFyX3ZhbHVlX2NoYW5nZWRfc2lnbmFsX2lkOworICAgZ2Jvb2xlYW4gcGxheWluZzsKK0BAIC0xNDEsNiArMTQzLDEzIEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyB9CisgCisgc3RhdGljIHZvaWQKKytjbGVhcl9taXNzaW5nX3BsdWdpbnMgKEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGd0a19sYWJlbF9zZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSwgIiIpOworKyAgZ3RrX3dpZGdldF9oaWRlIChwbGF5LT5pbmZvX2Jhcik7CisrfQorKworK3N0YXRpYyB2b2lkCisgc2tpcF9wcmV2X2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgeworICAgR0xpc3QgKnByZXY7CitAQCAtMTU1LDYgKzE2NCw3IEBAIHNraXBfcHJldl9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIAorICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5uZXh0X2J1dHRvbiwgVFJVRSk7CisgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgcHJldi0+ZGF0YSk7CisrICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOworICAgc2V0X3RpdGxlIChwbGF5LCBwcmV2LT5kYXRhKTsKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+cHJldl9idXR0b24sIGdfbGlzdF9wcmV2aW91cyAocHJldikgIT0gTlVMTCk7CitAQCAtMTc1LDYgKzE4NSw3IEBAIHNraXBfbmV4dF9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIAorICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5wcmV2X2J1dHRvbiwgVFJVRSk7CisgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgbmV4dC0+ZGF0YSk7CisrICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOworICAgc2V0X3RpdGxlIChwbGF5LCBuZXh0LT5kYXRhKTsKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIGdfbGlzdF9uZXh0IChuZXh0KSAhPSBOVUxMKTsKK0BAIC0xOTMsMTAgKzIwNCwxNiBAQCB2b2x1bWVfY2hhbmdlZF9jYiAoR3RrU2NhbGVCdXR0b24gKiBidXR0b24sIGdkb3VibGUgdmFsdWUsIEd0a1BsYXkgKiBwbGF5KQorICAgZ3N0X3BsYXllcl9zZXRfdm9sdW1lIChwbGF5LT5wbGF5ZXIsIHZhbHVlKTsKKyB9CisgCisrdm9pZAorK2luZm9fYmFyX3Jlc3BvbnNlX2NiIChHdGtJbmZvQmFyICogYmFyLCBnaW50IHJlc3BvbnNlLCBHdGtQbGF5ICogcGxheSkKKyt7CisrICBndGtfd2lkZ2V0X2hpZGUgKEdUS19XSURHRVQgKGJhcikpOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCisgeworLSAgR3RrV2lkZ2V0ICpjb250cm9scywgKm1haW5faGJveCwgKm1haW5fdmJveDsKKysgIEd0a1dpZGdldCAqY29udHJvbHMsICptYWluX2hib3gsICptYWluX3Zib3gsICppbmZvX2JhciwgKmNvbnRlbnRfYXJlYTsKKyAKKyAgIHBsYXktPndpbmRvdyA9IGd0a193aW5kb3dfbmV3IChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChwbGF5LT53aW5kb3cpLCAiZGVsZXRlLWV2ZW50IiwKK0BAIC0yMDgsNiArMjI1LDIwIEBAIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LT52aWRlb19hcmVhLCAicmVhbGl6ZSIsCisgICAgICAgR19DQUxMQkFDSyAodmlkZW9fYXJlYV9yZWFsaXplX2NiKSwgcGxheSk7CisgCisrICBwbGF5LT5pbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcgKCk7CisrICBndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZSAoR1RLX0lORk9fQkFSIChwbGF5LT5pbmZvX2JhciksCisrICAgICAgR1RLX01FU1NBR0VfV0FSTklORyk7CisrICAvL2d0a19pbmZvX2Jhcl9zZXRfc2hvd19jbG9zZV9idXR0b24gKEdUS19JTkZPX0JBUiAocGxheS0+aW5mb19iYXIpLAorKyAgLy8gICAgVFJVRSk7CisrICBndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbCAocGxheS0+aW5mb19iYXIsIFRSVUUpOworKyAgZ19zaWduYWxfY29ubmVjdCAocGxheS0+aW5mb19iYXIsICJyZXNwb25zZSIsCisrICAgICAgR19DQUxMQkFDSyAoaW5mb19iYXJfcmVzcG9uc2VfY2IpLCBwbGF5KTsKKysKKysgIGNvbnRlbnRfYXJlYSA9IGd0a19pbmZvX2Jhcl9nZXRfY29udGVudF9hcmVhIChHVEtfSU5GT19CQVIgKHBsYXktPmluZm9fYmFyKSk7CisrICBwbGF5LT5pbmZvX2xhYmVsID0gZ3RrX2xhYmVsX25ldyAoIiIpOworKyAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGNvbnRlbnRfYXJlYSksIHBsYXktPmluZm9fbGFiZWwpOworKyAgZ3RrX3dpZGdldF9zaG93IChwbGF5LT5pbmZvX2xhYmVsKTsKKysKKyAgIC8qIFVuaWZpZWQgcGxheS9wYXVzZSBidXR0b24gKi8KKyAgIHBsYXktPnBsYXlfcGF1c2VfYnV0dG9uID0KKyAgICAgICBndGtfYnV0dG9uX25ld19mcm9tX2ljb25fbmFtZSAoIm1lZGlhLXBsYXliYWNrLXBhdXNlIiwKK0BAIC0yNTgsNiArMjg5LDcgQEAgY3JlYXRlX3VpIChHdGtQbGF5ICogcGxheSkKKyAKKyAgIG1haW5fdmJveCA9IGd0a19ib3hfbmV3IChHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBtYWluX2hib3gsIFRSVUUsIFRSVUUsIDApOworKyAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBwbGF5LT5pbmZvX2JhciwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAobWFpbl92Ym94KSwgY29udHJvbHMsIEZBTFNFLCBGQUxTRSwgMCk7CisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAocGxheS0+d2luZG93KSwgbWFpbl92Ym94KTsKKyAKK0BAIC0zMjIsNiArMzU0LDcgQEAgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorICAgICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIGdfbGlzdF9uZXh0IChuZXh0KSAhPSBOVUxMKTsKKyAKKyAgICAgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgbmV4dC0+ZGF0YSk7CisrICAgICAgY2xlYXJfbWlzc2luZ19wbHVnaW5zIChwbGF5KTsKKyAgICAgICBnc3RfcGxheWVyX3BsYXkgKHBsYXktPnBsYXllcik7CisgICAgICAgc2V0X3RpdGxlIChwbGF5LCBuZXh0LT5kYXRhKTsKKyAgICAgfSBlbHNlIHsKK0BAIC0zMzAsNiArMzYzLDI0IEBAIGVvc19jYiAoR3N0UGxheWVyICogdW51c2VkLCBHdGtQbGF5ICogcGxheSkKKyAgIH0KKyB9CisgCisrc3RhdGljIHZvaWQKKytlcnJvcl9jYiAoR3N0UGxheWVyICogcGxheWVyLCBHRXJyb3IgKiBlcnIsIEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGNoYXIgKm1lc3NhZ2U7CisrCisrICBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIGdzdF9wbGF5ZXJfZXJyb3JfcXVhcmsgKCksCisrICAgICAgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTikpIHsKKysgICAgLy8gYWRkIG1lc3NhZ2UgdG8gZW5kIG9mIGFueSBleGlzdGluZyBtZXNzYWdlOiB0aGVyZSBtYXkgYmUKKysgICAgLy8gbXVsdGlwbGUgbWlzc2luZyBwbHVnaW5zLgorKyAgICBtZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJXMlcy4gIiwKKysgICAgICAgIGd0a19sYWJlbF9nZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSksIGVyci0+bWVzc2FnZSk7CisrICAgIGd0a19sYWJlbF9zZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSwgbWVzc2FnZSk7CisrICAgIGdfZnJlZSAobWVzc2FnZSk7CisrCisrICAgIGd0a193aWRnZXRfc2hvdyAocGxheS0+aW5mb19iYXIpOworKyAgfQorK30KKysKKyBpbnQKKyBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgeworQEAgLTQyMiw2ICs0NzMsNyBAQCBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LnBsYXllciwgInZpZGVvLWRpbWVuc2lvbnMtY2hhbmdlZCIsCisgICAgICAgR19DQUxMQkFDSyAodmlkZW9fZGltZW5zaW9uc19jaGFuZ2VkX2NiKSwgJnBsYXkpOworICAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJlbmQtb2Ytc3RyZWFtIiwgR19DQUxMQkFDSyAoZW9zX2NiKSwgJnBsYXkpOworKyAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJlcnJvciIsIEdfQ0FMTEJBQ0sgKGVycm9yX2NiKSwgJnBsYXkpOworIAorICAgLyogV2UgaGF2ZSBmaWxlKHMpIHRoYXQgbmVlZCBwbGF5aW5nLiAqLworICAgc2V0X3RpdGxlICgmcGxheSwgZ19saXN0X2ZpcnN0IChwbGF5LnVyaXMpLT5kYXRhKTsKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitpbmRleCBiZDY4MmQ5Li43OGU3YmExIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitAQCAtNDcsNiArNDcsNyBAQAorIAorICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisgI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KKyAKKyBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcGxheWVyX2RlYnVnKTsKKyAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcGxheWVyX2RlYnVnCitAQCAtMjM4LDYgKzIzOSw3IEBAIGdzdF9wbGF5ZXJfY2xhc3NfaW5pdCAoR3N0UGxheWVyQ2xhc3MgKiBrbGFzcykKKyAgICAgICBnX3NpZ25hbF9uZXcgKCJ2aWRlby1kaW1lbnNpb25zLWNoYW5nZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAorICAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfTk9fUkVDVVJTRSB8IEdfU0lHTkFMX05PX0hPT0tTLCAwLCBOVUxMLAorICAgICAgIE5VTEwsIE5VTEwsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfSU5ULCBHX1RZUEVfSU5UKTsKKysKKyB9CisgCisgc3RhdGljIHZvaWQKK0BAIC02MTksNiArNjIxLDIxIEBAIGVycm9yX2NiIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKKyAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+cHJpdi0+bG9jayk7CisgfQorIAorK3N0YXRpYyB2b2lkCisrZWxlbWVudF9jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCisreworKyAgR3N0UGxheWVyICpzZWxmID0gR1NUX1BMQVlFUiAodXNlcl9kYXRhKTsKKysKKysgIGlmIChnc3RfaXNfbWlzc2luZ19wbHVnaW5fbWVzc2FnZSAobXNnKSkgeworKyAgICBnY2hhciAqZGVzYzsKKysKKysgICAgZGVzYyA9IGdzdF9taXNzaW5nX3BsdWdpbl9tZXNzYWdlX2dldF9kZXNjcmlwdGlvbiAobXNnKTsKKysgICAgZW1pdF9lcnJvciAoc2VsZiwgZ19lcnJvcl9uZXcgKEdTVF9QTEFZRVJfRVJST1IsCisrICAgICAgICBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOLCAiTWlzc2luZyBwbHVnaW4gJyVzJyIsIGRlc2MpKTsKKysgICAgZ19mcmVlIChkZXNjKTsKKysgIH0KKyt9CisrCisgc3RhdGljIGdib29sZWFuCisgZW9zX2Rpc3BhdGNoIChncG9pbnRlciB1c2VyX2RhdGEpCisgeworQEAgLTEwNTksNiArMTA3Niw4IEBAIGdzdF9wbGF5ZXJfbWFpbiAoZ3BvaW50ZXIgZGF0YSkKKyAgICAgICBOVUxMLCBOVUxMKTsKKyAgIGdfc291cmNlX2F0dGFjaCAoYnVzX3NvdXJjZSwgc2VsZi0+cHJpdi0+Y29udGV4dCk7CisgCisrICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVsZW1lbnQiLAorKyAgICAgIEdfQ0FMTEJBQ0sgKGVsZW1lbnRfY2IpLCBzZWxmKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZTo6ZXJyb3IiLCBHX0NBTExCQUNLIChlcnJvcl9jYiksCisgICAgICAgc2VsZik7CisgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVvcyIsIEdfQ0FMTEJBQ0sgKGVvc19jYiksIHNlbGYpOworQEAgLTE1NjAsNiArMTU3OSw3IEBAIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpCisgICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAgIHtDX0VOVU0gKEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEKSwgIkdTVF9QTEFZRVJfRVJST1JfRkFJTEVEIiwgImZhaWxlZCJ9LAorKyAgICB7Q19FTlVNIChHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOKSwgIkdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4iLCAibWlzc2luZy1wbHVnaW4ifSwKKyAgICAgezAsIE5VTEwsIE5VTEx9CisgICB9OworIAorQEAgLTE1NzcsNiArMTU5Nyw4IEBAIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X25hbWUgKEdzdFBsYXllckVycm9yIGVycm9yKQorICAgc3dpdGNoIChlcnJvcikgeworICAgICBjYXNlIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEOgorICAgICAgIHJldHVybiAiZmFpbGVkIjsKKysgICAgY2FzZSBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOOgorKyAgICAgIHJldHVybiAibWlzc2luZy1wbHVnaW4iOworICAgfQorIAorICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAoraW5kZXggYzQzODUxMy4uMzVmYjViYiAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorQEAgLTQ0LDcgKzQ0LDggQEAgR1R5cGUgICAgICAgIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOworICNkZWZpbmUgICAgICBHU1RfVFlQRV9QTEFZRVJfRVJST1IgICAgICAgICAgICAgICAgICAgIChnc3RfcGxheWVyX2Vycm9yX2dldF90eXBlICgpKQorIAorIHR5cGVkZWYgZW51bSB7CistICBHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCA9IDAKKysgIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEID0gMCwKKysgIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4KKyB9IEdzdFBsYXllckVycm9yOworIAorIGNvbnN0IGdjaGFyICpnc3RfcGxheWVyX2Vycm9yX2dldF9uYW1lICAgICAgICAgICAgICAgIChHc3RQbGF5ZXJFcnJvciBlcnJvcik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4M2M0MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoCkBAIC0wLDAgKzEsMTA3IEBACitGaXggcGF1c2UvcGxheQorCitUaGUgY3VycmVudCBwbGF5ZXIgc3RhdGUgaXMgbm93IG5vdGlmaWVkIHZpYSB0aGUgc3RhdGUtY2hhbmdlZCBzaWduYWwsCithbmQgaW4gdGhlIEdUSyBVSSBpdCB3YXMgb25seSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRlc2lyZWQgc3RhdGUuCisKK1RoaXMgaXMgYSBiYWNrcG9ydCBvZiB1cHN0cmVhbSBjb21taXQgNzM4NDc5YzdhMC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworLS0tCisgZ3RrL2d0ay1wbGF5LmMgICAgICAgICAgICAgfCAgOCArKysrKystLQorIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIHwgMTIgLS0tLS0tLS0tLS0tCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggfCAgMiAtLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IDZlN2EwOTguLmUyYjYwNWEgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zNCw2ICszNCw3IEBAIHR5cGVkZWYgc3RydWN0CisgICBHdGtXaWRnZXQgKmluZm9fYmFyOworICAgR3RrV2lkZ2V0ICp2b2x1bWVfYnV0dG9uOworICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisrICBnYm9vbGVhbiBwbGF5aW5nOworIH0gR3RrUGxheTsKKyAKKyAvKiBDb21wYXQgc3R1YnMgKi8KK0BAIC0xMTgsMTIgKzExOSwxMyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgeworICAgR3RrV2lkZ2V0ICppbWFnZTsKKyAKKy0gIGlmIChnc3RfcGxheWVyX2lzX3BsYXlpbmcgKHBsYXktPnBsYXllcikpIHsKKysgIGlmIChwbGF5LT5wbGF5aW5nKSB7CisgICAgIGdzdF9wbGF5ZXJfcGF1c2UgKHBsYXktPnBsYXllcik7CisgICAgIGltYWdlID0KKyAgICAgICAgIGd0a19pbWFnZV9uZXdfZnJvbV9pY29uX25hbWUgKCJtZWRpYS1wbGF5YmFjay1zdGFydCIsCisgICAgICAgICBHVEtfSUNPTl9TSVpFX0JVVFRPTik7CisgICAgIGd0a19idXR0b25fc2V0X2ltYWdlIChHVEtfQlVUVE9OIChwbGF5LT5wbGF5X3BhdXNlX2J1dHRvbiksIGltYWdlKTsKKysgICAgcGxheS0+cGxheWluZyA9IEZBTFNFOworICAgfSBlbHNlIHsKKyAgICAgZ2NoYXIgKnRpdGxlOworIAorQEAgLTEzNiw2ICsxMzgsNyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgICAgIHRpdGxlID0gZ3N0X3BsYXllcl9nZXRfdXJpIChwbGF5LT5wbGF5ZXIpOworICAgICBzZXRfdGl0bGUgKHBsYXksIHRpdGxlKTsKKyAgICAgZ19mcmVlICh0aXRsZSk7CisrICAgIHBsYXktPnBsYXlpbmcgPSBUUlVFOworICAgfQorIH0KKyAKK0BAIC0zMzUsNyArMzM4LDcgQEAgdmlkZW9fZGltZW5zaW9uc19jaGFuZ2VkX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LAorIHN0YXRpYyB2b2lkCisgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorIHsKKy0gIGlmIChnc3RfcGxheWVyX2lzX3BsYXlpbmcgKHBsYXktPnBsYXllcikpIHsKKysgIGlmIChwbGF5LT5wbGF5aW5nKSB7CisgICAgIEdMaXN0ICpuZXh0ID0gTlVMTDsKKyAgICAgZ2NoYXIgKnVyaTsKKyAKK0BAIC00NTIsNiArNDU1LDcgQEAgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQorICAgfQorIAorICAgcGxheS5wbGF5ZXIgPSBnc3RfcGxheWVyX25ldyAoKTsKKysgIHBsYXkucGxheWluZyA9IFRSVUU7CisgCisgICBnX29iamVjdF9zZXQgKHBsYXkucGxheWVyLCAiZGlzcGF0Y2gtdG8tbWFpbi1jb250ZXh0IiwgVFJVRSwgTlVMTCk7CisgCitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworaW5kZXggMDY5YjI4NC4uNzhlN2JhMSAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworQEAgLTE0MjIsMTggKzE0MjIsNiBAQCBnc3RfcGxheWVyX3NldF91cmkgKEdzdFBsYXllciAqIHNlbGYsIGNvbnN0IGdjaGFyICogdmFsKQorICAgZ19vYmplY3Rfc2V0IChzZWxmLCAidXJpIiwgdmFsLCBOVUxMKTsKKyB9CisgCistZ2Jvb2xlYW4KKy1nc3RfcGxheWVyX2lzX3BsYXlpbmcgKEdzdFBsYXllciAqIHNlbGYpCisteworLSAgZ2Jvb2xlYW4gdmFsOworLQorLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QTEFZRVIgKHNlbGYpLCBGQUxTRSk7CistCistICBnX29iamVjdF9nZXQgKHNlbGYsICJpcy1wbGF5aW5nIiwgJnZhbCwgTlVMTCk7CistCistICByZXR1cm4gdmFsOworLX0KKy0KKyBHc3RDbG9ja1RpbWUKKyBnc3RfcGxheWVyX2dldF9wb3NpdGlvbiAoR3N0UGxheWVyICogc2VsZikKKyB7CitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAoraW5kZXggNjkzM2RkNy4uMzVmYjViYiAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorQEAgLTkzLDggKzkzLDYgQEAgZ2NoYXIgKiAgICAgIGdzdF9wbGF5ZXJfZ2V0X3VyaSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllcik7Cisgdm9pZCAgICAgICAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICogdXJpKTsKKyAKKy1nYm9vbGVhbiAgICAgZ3N0X3BsYXllcl9pc19wbGF5aW5nICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKy0KKyBHc3RDbG9ja1RpbWUgZ3N0X3BsYXllcl9nZXRfcG9zaXRpb24gICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyBHc3RDbG9ja1RpbWUgZ3N0X3BsYXllcl9nZXRfZHVyYXRpb24gICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9maWxlY2hvb3Nlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmMWIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gNDNkNGIxOWFiNjExZDg0NDE1NmUyNmM0ODQwY2M1NGRkYjczYWUwMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDI2IEZlYiAyMDE1IDE3OjE3OjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGd0ay1wbGF5OiBzaG93IGEgZmlsZSBjaG9vc2VyIGlmIG5vIFVSSXMgd2VyZSBwYXNzZWQKKworLS0tCisgZ3RrL2d0ay1wbGF5LmMgfCAgIDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGYwMTUwNzcuLjk3NjZhNzIgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zMTksOCArMzE5LDMyIEBAIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGxheWxpc3RzIGFuZCBzdHVmZgorICAgLyogUGFyc2UgdGhlIGxpc3Qgb2YgdGhlIGZpbGUgbmFtZXMgd2UgaGF2ZSB0byBwbGF5LiAqLworICAgaWYgKCFmaWxlX25hbWVzKSB7CistICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgRklMRShzKXxVUkkocylcbiIsIEFQUF9OQU1FKTsKKy0gICAgcmV0dXJuIDE7CisrICAgIEd0a1dpZGdldCAqY2hvb3NlcjsKKysgICAgaW50IHJlczsKKysKKysgICAgY2hvb3NlciA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyAoIlNlbGVjdCBmaWxlcyB0byBwbGF5IiwgTlVMTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ2FuY2VsIiwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX09wZW4iLCBHVEtfUkVTUE9OU0VfQUNDRVBULAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgICBnX29iamVjdF9zZXQgKGNob29zZXIsCisrICAgICAgICAgICAgICAgICAgImxvY2FsLW9ubHkiLCBGQUxTRSwKKysgICAgICAgICAgICAgICAgICAic2VsZWN0LW11bHRpcGxlIiwgVFJVRSwKKysgICAgICAgICAgICAgICAgICBOVUxMKTsKKysKKysgICAgcmVzID0gZ3RrX2RpYWxvZ19ydW4gKEdUS19ESUFMT0cgKGNob29zZXIpKTsKKysgICAgaWYgKHJlcyA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7CisrICAgICAgR1NMaXN0ICpsOworKworKyAgICAgIGwgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91cmlzIChHVEtfRklMRV9DSE9PU0VSIChjaG9vc2VyKSk7CisrICAgICAgd2hpbGUgKGwpIHsKKysgICAgICAgIHBsYXkudXJpcyA9IGdfbGlzdF9hcHBlbmQgKHBsYXkudXJpcywgbC0+ZGF0YSk7CisrICAgICAgICBsID0gZ19zbGlzdF9kZWxldGVfbGluayAobCwgbCk7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGd0a193aWRnZXRfZGVzdHJveSAoY2hvb3Nlcik7CisgICB9IGVsc2UgeworICAgICBndWludCBpOworIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDIwN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9TWVkaWEgUGxheWVyCitDb21tZW50PUJhc2ljIG1lZGlhIHBsYXllcgorSWNvbj1hdWRpby1wbGF5ZXIKK1RyeUV4ZWM9Z3RrLXBsYXkKK0V4ZWM9Z3RrLXBsYXkKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R1RLO0F1ZGlvVmlkZW87CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkMThiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaApAQCAtMCwwICsxLDcxIEBACitBcyB0aGUgcmVzdCBvZiBTYXRvIGlzIEdUSysgMiwgcGF0Y2ggZ3RrLXBsYXkgdG8gdXNlIEdUSysgMi4gIFdoZW4gdGhlIHJlc3Qgb2YKK1NhdG8gaGFzIGJlZW4gcG9ydGVkIHRvIEdUSysgMyB0aGlzIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjhhZjEzYi4uOTBhYjc0YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjAsNyArNjAsNyBAQCBBQ19TVUJTVChHTElCX1BSRUZJWCkKKyBHU1RfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ3N0cmVhbWVyLTEuMGAiCisgQUNfU1VCU1QoR1NUX1BSRUZJWCkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTMuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTIuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKKyBBTV9DT05ESVRJT05BTChIQVZFX0dUSywgdGVzdCAieCRoYXZlX2d0ayIgIT0gInhubyIpCisgCisgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFsxLjMxLjFdKQorZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGYwMTUwNzcuLjk1NGQ2ZmIgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zNCw2ICszNCw0NiBAQCB0eXBlZGVmIHN0cnVjdAorICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisgfSBHdGtQbGF5OworIAorKy8qIENvbXBhdCBzdHVicyAqLworK0d0a1dpZGdldCAqCisrZ3RrX2JveF9uZXcgKEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorKyAgICAgICAgICAgICBnaW50IHNwYWNpbmcpCisreworKyAgc3dpdGNoIChvcmllbnRhdGlvbikgeworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKKysgICAgcmV0dXJuIGd0a19oYm94X25ldyAoRkFMU0UsIHNwYWNpbmcpOworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw6CisrICAgIHJldHVybiBndGtfdmJveF9uZXcgKEZBTFNFLCBzcGFjaW5nKTsKKysgIH0KKyt9CisrCisrR3RrV2lkZ2V0KgorK2d0a19idXR0b25fbmV3X2Zyb21faWNvbl9uYW1lIChjb25zdCBnY2hhciAqaWNvbl9uYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtJY29uU2l6ZSAgc2l6ZSkKKyt7CisrICBHdGtXaWRnZXQgKmJ1dHRvbjsKKysgIEd0a1dpZGdldCAqaW1hZ2U7CisrCisrICBpbWFnZSA9IGd0a19pbWFnZV9uZXdfZnJvbV9pY29uX25hbWUgKGljb25fbmFtZSwgc2l6ZSk7CisrICBidXR0b24gPSAgZ19vYmplY3RfbmV3IChHVEtfVFlQRV9CVVRUT04sCisrICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFnZSIsIGltYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKysgIHJldHVybiBidXR0b247CisrfQorKworK0d0a1dpZGdldCAqCisrZ3RrX3NjYWxlX25ld193aXRoX3JhbmdlIChHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgbWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBtYXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXApCisreworKyAgc3dpdGNoIChvcmllbnRhdGlvbikgeworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKKysgICAgcmV0dXJuIGd0a19oc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKG1pbiwgbWF4LCBzdGVwKTsKKysgIGNhc2UgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOgorKyAgICByZXR1cm4gZ3RrX3ZzY2FsZV9uZXdfd2l0aF9yYW5nZSAobWluLCBtYXgsIHN0ZXApOworKyAgfQorK30KKyAKKyBzdGF0aWMgdm9pZAorIHNldF90aXRsZSAoR3RrUGxheSAqIHBsYXksIGNvbnN0IGdjaGFyICogdGl0bGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Y2ZiYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZPSJHU3RyZWFtZXIgcGxheWJhY2sgaGVscGVyIGxpYnJhcnkgYW5kIGV4YW1wbGVzIgorCitMSUNFTlNFID0gIkxHUEwtMi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTk7bWQ1PTAzYWVjYTlkODI5NWY4MTE4MTc5MDkwNzVhMTVmZjY1IgorCitERVBFTkRTID0gImdsaWItMi4wIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGd0aysiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zZHJvZWdlL2dzdC1wbGF5ZXIuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVjaG9vc2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d0azIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LXBhdXNlLXBsYXkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dzdC1wbGF5ZXIuZGVza3RvcCIKKworU1JDUkVWID0gIjUzODZjNWI5ODRkNDBlZjU0MzQ2NzNlZDYyMjA0ZTY5YWFmNTI2NDUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXRvdWNoICR7U30vQ2hhbmdlTG9nCit9CisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9WQUxHUklORD1ubyBhY19jdl9wYXRoX0dEQj1ubyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSAwNjQ0IC1EICR7V09SS0RJUn0vZ3N0LXBsYXllci5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9nc3QtcGxheWVyLmRlc2t0b3AKK30KKworRklMRVNfJHtQTn0tYmluICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmRlc2t0b3AiCisKK1JERVBFTkRTXyR7UE59LWJpbiA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXBsYXliYWNrIgorUlJFQ09NTUVORFNfJHtQTn0tYmluID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLWxpYmF2IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS1tZXRhIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXBhY2thZ2UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxYmUwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAiIHNwbGl0X2dzdHJlYW1lcjEwX3BhY2thZ2VzICIKK1BBQ0tBR0VTUExJVEZVTkNTX2FwcGVuZCA9ICIgc2V0X21ldGFwa2dfcmRlcGVuZHMgIgorCitweXRob24gc3BsaXRfZ3N0cmVhbWVyMTBfcGFja2FnZXMgKCkgeworICAgIGdzdF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2dzdHJlYW1lci0ke0xJQlZ9JykKKyAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwbHVnaW5fcG9zdGluc3QnLCBUcnVlKQorICAgIGdsaWJkaXIgPSBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnZ3N0cmVhbWVyICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdzdF9saWJkaXIsICdsaWJnc3QoLiopXC5zbyQnLCBkLmV4cGFuZCgnJHtQTn0tJXMnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzJywgcG9zdGluc3Q9cG9zdGluc3QsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ3N0X2xpYmRpciwgJ2xpYmdzdCguKilcLmxhJCcsIGQuZXhwYW5kKCcke1BOfS0lcy1kZXYnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzIChkZXZlbG9wbWVudCBmaWxlcyknLCBleHRyYV9kZXBlbmRzPWQuZXhwYW5kKCcke1BOfS1kZXYnKSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnc3RfbGliZGlyLCAnbGliZ3N0KC4qKVwuYSQnLCBkLmV4cGFuZCgnJHtQTn0tJXMtc3RhdGljZGV2JyksICdHU3RyZWFtZXIgcGx1Z2luIGZvciAlcyAoc3RhdGljIGRldmVsb3BtZW50IGZpbGVzKScsIGV4dHJhX2RlcGVuZHM9ZC5leHBhbmQoJyR7UE59LXN0YXRpY2RldicpKQorfQorCitweXRob24gc2V0X21ldGFwa2dfcmRlcGVuZHMgKCkgeworICAgIGltcG9ydCBvcworCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIG1ldGFwa2cgPSAgcG4gKyAnLW1ldGEnCisgICAgZC5zZXRWYXIoJ0FMTE9XX0VNUFRZXycgKyBtZXRhcGtnLCAiMSIpCisgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBtZXRhcGtnLCAiIikKKyAgICBibGFja2xpc3QgPSBbIHBuLCBwbiArICctbG9jYWxlJywgcG4gKyAnLWRldicsIHBuICsgJy1kYmcnLCBwbiArICctZG9jJywgcG4gKyAnLW1ldGEnIF0KKyAgICBtZXRhcGtnX3JkZXBlbmRzID0gW10KKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXNbMTpdOgorICAgICAgICBpZiBub3QgcGtnIGluIGJsYWNrbGlzdCBhbmQgbm90IHBrZyBpbiBtZXRhcGtnX3JkZXBlbmRzIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGV2JykgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kYmcnKSBhbmQgbm90IHBrZy5jb3VudCgnbG9jYWxlJykgYW5kIG5vdCBwa2cuY291bnQoJy1zdGF0aWNkZXYnKToKKyAgICAgICAgICAgICMgU2VlIGlmIHRoZSBwYWNrYWdlIGlzIGVtcHR5IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnRzIG9mIGl0cyBQS0dERVNUIHN1YmRpcmVjdG9yeS4gCisgICAgICAgICAgICAjIElmIHRoaXMgc3ViZGlyZWN0b3J5IGlzIGVtcHR5LCB0aGVuIHRoZSBwYWNrYWdlIGlzLgorICAgICAgICAgICAgIyBFbXB0eSBwYWNrYWdlcyBkbyBub3QgZ2V0IGFkZGVkIHRvIHRoZSBtZXRhIHBhY2thZ2UncyBSREVQRU5EUworICAgICAgICAgICAgcGtnZGlyID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2Rpcik6CisgICAgICAgICAgICAgICAgZGlyX2NvbnRlbnRzID0gb3MubGlzdGRpcihwa2dkaXIpIG9yIFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpcl9jb250ZW50cyA9IFtdCisgICAgICAgICAgICBpc19lbXB0eSA9IGxlbihkaXJfY29udGVudHMpID09IDAKKyAgICAgICAgICAgIGlmIG5vdCBpc19lbXB0eToKKyAgICAgICAgICAgICAgICBtZXRhcGtnX3JkZXBlbmRzLmFwcGVuZChwa2cpCisgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBtZXRhcGtnLCAnICcuam9pbihtZXRhcGtnX3JkZXBlbmRzKSkKKyAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIG1ldGFwa2csIHBuICsgJyBtZXRhIHBhY2thZ2UnKQorfQorCisjIGVhY2ggcGx1Z2luLWRldiBkZXBlbmRzIG9uIFBOLWRldiwgcGx1Z2luLXN0YXRpY2RldiBvbiBQTi1zdGF0aWNkZXYKKyMgc28gd2UgbmVlZCB0aGVtIGV2ZW4gd2hlbiBlbXB0eSAobGlrZSBpbiBnc3QtcGx1Z2lucy1nb29kIGNhc2UpCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCitBTExPV19FTVBUWV8ke1BOfS1zdGF0aWNkZXYgPSAiMSIKKworUEFDS0FHRVMgKz0gIiR7UE59LWFwcHMgJHtQTn0tbWV0YSAke1BOfS1nbGliIgorRklMRVNfJHtQTn0tYXBwcyA9ICIke2JpbmRpcn0iCisKK1JERVBFTkRTXyR7UE59LWFwcHMgKz0gInBlcmwiCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtQTn0tbWV0YSIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLSR7TElCVn0vLmRlYnVnIgorRklMRVNfJHtQTn0tZ2xpYiA9ICIke2RhdGFkaXJ9L2dsaWItMi4wIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGU2ZTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpYmF2LWJhc2VkIEdTdHJlYW1lciAxLnggcGx1Z2luIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrICYgKCAoR1BMdjIrICYgTEdQTHYyLjErKSB8IChHUEx2MysgJiBMR1BMdjMrKSApIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nc3RyZWFtZXIubmV0LyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgemxpYiBiemlwMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgQ0FVVElPTjogVXNpbmcgdGhlIHN5c3RlbSBsaWJhdiBpcyBub3QgcmVjb21tZW5kZWQuIFNpbmNlIHRoZSBsaWJhdiBBUEkgaXMgY2hhbmdpbmcgYWxsIHRoZSB0aW1lLAorIyBjb21waWxhdGlvbiBlcnJvcnMgKGFuZCBvdGhlciwgbW9yZSBzdWJ0bGUgYnVncykgY2FuIGhhcHBlbi4gSXQgaXMgdXN1YWxseSBiZXR0ZXIgdG8gcmVseSBvbiB0aGUKKyMgbGliYXYgY29weSBpbmNsdWRlZCBpbiB0aGUgZ3N0LWxpYmF2IHBhY2thZ2UuCitQQUNLQUdFQ09ORklHID8/PSAiIG9yYyB5YXNtICIKK1BBQ0tBR0VDT05GSUdbbGliYXZdID0gIi0td2l0aC1zeXN0ZW0tbGliYXYsLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tsZ3BsXSAgPSAiLS1lbmFibGUtbGdwbCwsIgorUEFDS0FHRUNPTkZJR1t5YXNtXSAgPSAiLS1lbmFibGUteWFzbSwtLWRpc2FibGUteWFzbSx5YXNtLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbb3JjXSAgPSAiLS1lbmFibGUtb3JjLC0tZGlzYWJsZS1vcmMsb3JjIgorCisKK0dTVFJFQU1FUl8xXzBfREVCVUcgPz0gIi0tZGlzYWJsZS1kZWJ1ZyIKKworTElCQVZfRVhUUkFfQ09ORklHVVJFID0gIi0td2l0aC1saWJhdi1leHRyYS1jb25maWd1cmUiCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OID0gXAorJyR7TElCQVZfRVhUUkFfQ09ORklHVVJFfT0iJHtMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSR30iJworCitFWFRSQV9PRUNPTkYgPSAiJHtMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5hIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk5YWQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDU0YmJhMjI4ZWE1MmQwMWZkODQ5NDFkOTdiZTIzYzAzZjk4NjJiNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDYgQXByIDIwMTMgMDE6MjI6MjIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSB5YXNtIGZvciBsaWJhdiB3aGVuIC0tZGlzYWJsZS15YXNtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDIyZWRlODguLmVmM2MwNTAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMwNSw2ICszMDUsMTIgQEAgZWxzZQorICAgICBlbWJsaWJhdl9jb25maWd1cmVfYXJncz0iJGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWdwbCIKKyAgIGZpCisKKysgIEFDX0FSR19FTkFCTEUoeWFzbSwKKysgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXlhc21dLCBbZGlzYWJsZSB1c2Ugb2YgeWFzbSBhc3NlbWJsZXJdKV0pCisrICBpZiB0ZXN0ICJ4JGVuYWJsZV95YXNtIiA9ICJ4bm8iOyB0aGVuCisrICAgIGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzPSIkZW1ibGliYXZfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLXlhc20iCisrICBmaQorKworICAgIyBpZiB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLCB0ZWxsIGxpYmF2IHNvCisgICBjYXNlICRob3N0IGluCisgICAgICAgKmFuZHJvaWQqKQorLS0gCisxLjguMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhZGVhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEZXNjcmlwdGlvbjogV29ya2Fyb3VuZCB0byBidWlsZCBsaWJhdiBmb3IgaTU4NiB3aXRoIGdjYyA0LjkuMiBieSBhdm9pZGluZyBtZW1zZXQKK0F1dGhvcjogQmVybmhhcmQg3GJlbGFja2VyIDxiZXJuaGFyZHVAdnItd2ViLmRlPgorCistLS0KK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MzA4MgorTGFzdC1VcGRhdGU6IDIwMTUtMDQtMjgKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIGdzdC1saWJhdi0xLjQuNS5vcmlnL2dzdC1saWJzL2V4dC9saWJhdi9saWJhdmNvZGVjL2gyNjRfY2FiYWMuYworKysrIGdzdC1saWJhdi0xLjQuNS9nc3QtbGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9oMjY0X2NhYmFjLmMKK0BAIC0yMDIwLDcgKzIwMjAsMTEgQEAgZGVjb2RlX2ludHJhX21iOgorICAgICAgICAgLy8gSW4gZGVibG9ja2luZywgdGhlIHF1YW50aXplciBpcyAwCisgICAgICAgICBoLT5jdXJfcGljLnFzY2FsZV90YWJsZVttYl94eV0gPSAwOworICAgICAgICAgLy8gQWxsIGNvZWZmcyBhcmUgcHJlc2VudAorLSAgICAgICAgbWVtc2V0KGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSwgMTYsIDQ4KTsKKysgICAgICAgIC8qbWVtc2V0KGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSwgMTYsIDQ4KTsqLworKyAgICAgICAgICAgIC8qIGF2b2lkaW5nIHRoaXMgbWVtc2V0IGJlY2F1c2UgaXQgbGVhZHMgYXQgbGVhc3Qgd2l0aCBnY2M0LjkuMiB0byBlcnJvcjogJ2FzbScgb3BlcmFuZCBoYXMgaW1wb3NzaWJsZSBjb25zdHJhaW50cyAqLworKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0ODsgaSsrKSB7CisrICAgICAgICAgICAgKCAodW5zaWduZWQgY2hhciopKGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSkgKSBbaV0gPSAxNjsKKysgICAgICAgIH0KKyAgICAgICAgIGgtPmN1cl9waWMubWJfdHlwZVttYl94eV0gPSBtYl90eXBlOworICAgICAgICAgaC0+bGFzdF9xc2NhbGVfZGlmZiA9IDA7CisgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZjN2VjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNC41LmJiCkBAIC0wLDAgKzEsMjcgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLWxpYmF2LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXh0L2xpYmF2L2dzdGF2Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9YTc1MmMzNTI2N2Q4Mjc2ZmQ5Y2EzZGI2OTk0ZmNhOWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0xJQ0VOU0U7bWQ1PWVhNjZlOTdhN2FjMWRiOTc4Y2YzNTI5MDY4YThjOTQ4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LWxpYmF2L2dzdC1saWJhdi0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggXAorICAgIGZpbGU6Ly93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZjQ5MjJhNDZhZGJjYmU3YmQwMTMzMWZmNWRjNzk3OWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjA1YzYyNjI0NjA0ZjNiYjVjODcwODQ0Y2MxZjI3MTE3NzljYzUzM2IwMDRjMmFhMWQ4YzBkNTg1NTdhZmJiYyIKKworTElCQVZfRVhUUkFfQ09ORklHVVJFX0NPTU1PTl9BUkcgPSAiLS10YXJnZXQtb3M9bGludXggXAorICAtLWNjPScke0NDfScgLS1hcz0nJHtDQ30nIC0tbGQ9JyR7Q0N9JyAtLW5tPScke05NfScgLS1hcj0nJHtBUn0nIFwKKyAgLS1yYW5saWI9JyR7UkFOTElCfScgXAorICAke0dTVFJFQU1FUl8xXzBfREVCVUd9IFwKKyAgLS1jcm9zcy1wcmVmaXg9JyR7SE9TVF9QUkVGSVh9JyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1saWJhdi0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxYjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1saWJhdi5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V4dC9saWJhdi9nc3Rhdi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PWE3NTJjMzUyNjdkODI3NmZkOWNhM2RiNjk5NGZjYTljIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9MSUNFTlNFO21kNT0yM2E1NGY1OWI4MjU3MmMyMDNhNTU5MzQ2ZTg5ZWQ1NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtbGliYXY7YnJhbmNoPW1hc3RlciIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICIxMjcyMDJkNmY2NTU4NDg5MWRhYmY5MmJlMDMxZjBkMTcwYjBlN2YxIgorCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSRyA9ICItLXRhcmdldC1vcz1saW51eCBcCisgIC0tY2M9JyR7Q0N9JyAtLWFzPScke0NDfScgLS1sZD0nJHtDQ30nIC0tbm09JyR7Tk19JyAtLWFyPScke0FSfScgXAorICAke0dTVFJFQU1FUl8xXzBfREVCVUd9IFwKKyAgLS1jcm9zcy1wcmVmaXg9JyR7SE9TVF9QUkVGSVh9JyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWYxMGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYgpAQCAtMCwwICsxLDY1IEBACitERVNDUklQVElPTiA9ICJHc3RyZWFtZXIxLjAgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworQ09NTUVSQ0lBTF9QTFVHSU5TID0gIiR7Q09NTUVSQ0lBTF9BVURJT19QTFVHSU5TfSAke0NPTU1FUkNJQUxfVklERU9fUExVR0lOU30iCitERVBFTkRTX1VHTFk9IiR7QCdnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5JyBpZiAndWdseScgaW4gQ09NTUVSQ0lBTF9QTFVHSU5TLnNwbGl0KCctJykgZWxzZSAnJ30iCitERVBFTkRTX0JBRD0iJHtAJ2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCcgaWYgJ2JhZCcgaW4gQ09NTUVSQ0lBTF9QTFVHSU5TLnNwbGl0KCctJykgZWxzZSAnJ30iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgJHtERVBFTkRTX1VHTFl9ICR7REVQRU5EU19CQUR9IgorCitQQUNLQUdFUyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1kZWJ1ZyBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8iCisKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlID0gIjEiCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtZGVidWcgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLXZpZGVvID0gIjEiCisKK1JERVBFTkRTX2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlJywgJycsIGQpfSBcCisgICAgZ3N0cmVhbWVyMS4wIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXBsYXliYWNrIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWdpbyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hbHNhIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZvbHVtZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hdWRpb2NvbnZlcnQgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYXVkaW9yZXNhbXBsZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS10eXBlZmluZGZ1bmN0aW9ucyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12aWRlb3NjYWxlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvY29udmVydCBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1hdXRvZGV0ZWN0IFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLXNvdXBodHRwc3JjIgorCitSUkVDT01NRU5EU19nc3RyZWFtZXIxLjAtbWV0YS14MTEtYmFzZSA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS14aW1hZ2VzaW5rIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXh2aW1hZ2VzaW5rIgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12b3JiaXMgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2Utb2dnIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLXdhdnBhcnNlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLWZsYWMgXAorICAgICR7Q09NTUVSQ0lBTF9BVURJT19QTFVHSU5TfSIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtZGVidWcgPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtZGVidWcgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYXVkaW90ZXN0c3JjIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvdGVzdHNyYyIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8gPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtYXZpIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLW1hdHJvc2thIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXRoZW9yYSBcCisgICAgJHtDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlN9IgorCitSUkVDT01NRU5EU19nc3RyZWFtZXIxLjAtbWV0YS12aWRlbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYXVkaW8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTg5MDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYwpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIk9wZW5NQVggSUwgcGx1Z2lucyBmb3IgR1N0cmVhbWVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3N0cmVhbWVyLm5ldC8iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCIKK1JERVBFTkRTXyR7UE59ID0gImxpYm9teGlsIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCisKK1BSID0gInIxIgorCitHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVQgPz0gImJlbGxhZ2lvIgorR1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FID89ICIke2xpYmRpcn0vbGlib214aWwtYmVsbGFnaW8uc28uMCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtdmFsZ3JpbmQgLS13aXRoLW9teC10YXJnZXQ9JHtHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVR9IgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIG9teF90YXJnZXQgPSBkLmdldFZhcigiR1NUUkVBTUVSXzFfMF9PTVhfVEFSR0VUIiwgVHJ1ZSkKKyAgICBpZiBvbXhfdGFyZ2V0IGluIFsnZ2VuZXJpYycsICdiZWxsYWdpbyddOgorICAgICAgICBzcmNkaXIgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgICAgICMgQmVsbGFnaW8gaGVhZGVycyBhcmUgaW5jb21wbGV0ZSAodGhleSBhcmUgbWlzc2luZyB0aGUgT01YX1ZFUlNJT05fTUFKT1IsIworICAgICAgICAjIE9NWF9WRVJTSU9OX01JTk9SLCBPTVhfVkVSU0lPTl9SRVZJU0lPTiwgYW5kIE9NWF9WRVJTSU9OX1NURVAgbWFjcm9zKTsKKyAgICAgICAgIyBhcHBlbmRpbmcgYSBkaXJlY3RvcnkgcGF0aCB0byBnc3Qtb214JyBpbnRlcm5hbCBPcGVuTUFYIElMIGhlYWRlcnMgZml4ZXMgdGhpcworICAgICAgICBkLmFwcGVuZFZhcigiQ0ZMQUdTIiwgIiAtSSVzL29teC9vcGVubWF4IiAlIHNyY2RpcikKKyAgICBlbGlmIG9teF90YXJnZXQgPT0gInJwaSI6CisgICAgICAgICMgRGVkaWNhdGVkIFJhc3BiZXJyeSBQaSBPcGVuTUFYIElMIHN1cHBvcnQgbWFrZXMgdGhpcyBwYWNrYWdlIG1hY2hpbmUgc3BlY2lmaWMKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIGQuZ2V0VmFyKCJNQUNISU5FX0FSQ0giLCBUcnVlKSkKK30KKworc2V0X29teF9jb3JlX25hbWUoKSB7CisJc2VkIC1pIC1lICJzO15jb3JlLW5hbWU9Lio7Y29yZS1uYW1lPSR7R1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FfTsiICIke0R9JHtzeXNjb25mZGlyfS94ZGcvZ3N0b214LmNvbmYiCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gIiBzZXRfb214X2NvcmVfbmFtZSAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouYSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjhhYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBmNjI5ZTA0MWU5ZjY3OGZjZDg2YWQ3NjRhMTUxMTdkZmY2M2MyNzFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorRGF0ZTogU2F0LCAyNyBBcHIgMjAxMyAwMjo1MDoyNSArMDIwMAorU3ViamVjdDogW1BBVENIXSBvbXg6IGZpeGVkIHR5cGUgZXJyb3IgaW4gcHJpbnRmIGNhbGwKKworJXp1IGV4cGVjdHMgc2l6ZV90CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5MDA4XQorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBvbXgvZ3N0b214LmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9vbXgvZ3N0b214LmMgYi9vbXgvZ3N0b214LmMKK2luZGV4IGEyOTQ1ZWQuLjFlY2E3Y2MgMTAwNjQ0CistLS0gYS9vbXgvZ3N0b214LmMKKysrKyBiL29teC9nc3RvbXguYworQEAgLTE2MzAsNyArMTYzMCw3IEBAIGdzdF9vbXhfcG9ydF9hbGxvY2F0ZV9idWZmZXJzX3VubG9ja2VkIChHc3RPTVhQb3J0ICogcG9ydCwKKyAKKyAgIEdTVF9JTkZPX09CSkVDVCAoY29tcC0+cGFyZW50LAorICAgICAgICJBbGxvY2F0aW5nICVkIGJ1ZmZlcnMgb2Ygc2l6ZSAlenUgZm9yICVzIHBvcnQgJXUiLCBuLAorLSAgICAgIHBvcnQtPnBvcnRfZGVmLm5CdWZmZXJTaXplLCBjb21wLT5uYW1lLCAoZ3VpbnQpIHBvcnQtPmluZGV4KTsKKysgICAgICAoc2l6ZV90KSAocG9ydC0+cG9ydF9kZWYubkJ1ZmZlclNpemUpLCBjb21wLT5uYW1lLCAoZ3VpbnQpIHBvcnQtPmluZGV4KTsKKyAKKyAgIGlmICghcG9ydC0+YnVmZmVycykKKyAgICAgcG9ydC0+YnVmZmVycyA9IGdfcHRyX2FycmF5X3NpemVkX25ldyAobik7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjIuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3YzkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4yLjAuYmIKQEAgLTAsMCArMSwxMiBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtb214LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vbXgvZ3N0b214Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NWM4ZTFmY2EzMjcwNDQ4OGU3NmQyYmE5ZGRmYTkzNWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1vbXgvZ3N0LW9teC0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkMjRlOGMwMTUzYzM1ZGZlZmVlM2UyNmIxYzJjMzVmOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjQ4NzQ5NjFlNjQ4OGFkOWU1ODA4MTE0YmQ0ODZlYTk4MWM1NDA5MDcyNjJjYWFiMTQxOTM1NWZkODJkNzQ1IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LW9teC0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWM4NDY2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfZ2l0LmJiCkBAIC0wLDAgKzEsMjYgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtb214LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vbXgvZ3N0b214Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NWM4ZTFmY2EzMjcwNDQ4OGU3NmQyYmE5ZGRmYTkzNWYiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LW9teDticmFuY2g9bWFzdGVyO25hbWU9Z3N0LW9teCBcCisgICAgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2NvbW1vbjtkZXN0c3VmZml4PWdpdC9jb21tb247YnJhbmNoPW1hc3RlcjtuYW1lPWNvbW1vbiBcCisgICAgZmlsZTovLzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2ggXAorICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWX2dzdC1vbXggPSAiYTJkYjc2YjA0OGRiMjc4ZWYwYWE3OThlMTA2Yjc1OTQyNjRlMDZjMCIKK1NSQ1JFVl9jb21tb24gPSAiNWVkY2Q4NTdiMjEwN2NkOGI3OGMxNjIzMmRkMTA4Nzc1MTNlYzE1NyIKKworU1JDUkVWX0ZPUk1BVCA9ICJnc3Qtb214IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZWRiNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCkBAIC0wLDAgKzEsMTM1IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisgJiBMR1BMdjIuMSsgIgorCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGxpYnBuZyBqcGVnIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtYmFkLSR7UFZ9IgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBcCisgICAgICAgICAgICIKKworaW5oZXJpdCBnZXR0ZXh0IGJsdWV0b290aAorCisjIG9wZW5nbCBwYWNrYWdlY29uZmlnIGZhY3RvcmVkIG91dCB0byBtYWtlIGl0IGVhc3kgZm9yIGRpc3Ryb3MKKyMgYW5kIEJTUCBsYXllcnMgdG8gcGljayBlaXRoZXIgKGRlc2t0b3ApIG9wZW5nbCwgZ2xlczIsIG9yIG5vIEdMCitQQUNLQUdFQ09ORklHX0dMID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdnbGVzMicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7UEFDS0FHRUNPTkZJR19HTH0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisgICAgb3JjIGN1cmwgdXZjaDI2NCBuZW9uIHNuZGZpbGUgXAorICAgIGhscyBzYmMgZGFzaCBiejIgc21vb3Roc3RyZWFtaW5nIFwKKyAgICAiCisKKyMgZGFzaCA9IER5bmFtaWMgQWRhcHRpdmUgU3RyZWFtaW5nIG92ZXIgSFRUUAorUEFDS0FHRUNPTkZJR1thc3NyZW5kZXJdICAgICAgID0gIi0tZW5hYmxlLWFzc3JlbmRlciwtLWRpc2FibGUtYXNzcmVuZGVyLGxpYmFzcyIKK1BBQ0tBR0VDT05GSUdbY3VybF0gICAgICAgICAgICA9ICItLWVuYWJsZS1jdXJsLC0tZGlzYWJsZS1jdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW2dsZXMyXSAgICAgICAgICAgPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW29wZW5nbF0gICAgICAgICAgPSAiLS1lbmFibGUtb3BlbmdsLC0tZGlzYWJsZS1vcGVuZ2wsdmlydHVhbC9saWJnbCBsaWJnbHUiCitQQUNLQUdFQ09ORklHW2ZhYWNdICAgICAgICAgICAgPSAiLS1lbmFibGUtZmFhYywtLWRpc2FibGUtZmFhYyxmYWFjIgorUEFDS0FHRUNPTkZJR1tmYWFkXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWZhYWQsLS1kaXNhYmxlLWZhYWQsZmFhZDIiCitQQUNLQUdFQ09ORklHW2xpYm1tc10gICAgICAgICAgPSAiLS1lbmFibGUtbGlibW1zLC0tZGlzYWJsZS1saWJtbXMsbGlibW1zIgorUEFDS0FHRUNPTkZJR1ttb2RwbHVnXSAgICAgICAgID0gIi0tZW5hYmxlLW1vZHBsdWcsLS1kaXNhYmxlLW1vZHBsdWcsbGlibW9kcGx1ZyIKK1BBQ0tBR0VDT05GSUdbbXBnMTIzXSAgICAgICAgICA9ICItLWVuYWJsZS1tcGcxMjMsLS1kaXNhYmxlLW1wZzEyMyxtcGcxMjMiCitQQUNLQUdFQ09ORklHW29wdXNdICAgICAgICAgICAgPSAiLS1lbmFibGUtb3B1cywtLWRpc2FibGUtb3B1cyxsaWJvcHVzIgorUEFDS0FHRUNPTkZJR1tmbGl0ZV0gICAgICAgICAgID0gIi0tZW5hYmxlLWZsaXRlLC0tZGlzYWJsZS1mbGl0ZSxmbGl0ZS1hbHNhIgorUEFDS0FHRUNPTkZJR1tvcGVuY3ZdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5jdiwtLWRpc2FibGUtb3BlbmN2LG9wZW5jdiIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgICAgICA9ICItLWVuYWJsZS13YXlsYW5kIC0tZW5hYmxlLWVnbCwtLWRpc2FibGUtd2F5bGFuZCAtLWRpc2FibGUtZWdsLHdheWxhbmQgdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW3V2Y2gyNjRdICAgICAgICAgPSAiLS1lbmFibGUtdXZjaDI2NCwtLWRpc2FibGUtdXZjaDI2NCxsaWJ1c2IxIHVkZXYiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSAgICAgICAgPSAiLS1lbmFibGUtZGlyZWN0ZmIsLS1kaXNhYmxlLWRpcmVjdGZiLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1tuZW9uXSAgICAgICAgICAgID0gIi0tZW5hYmxlLW5lb24sLS1kaXNhYmxlLW5lb24sbmVvbiIKK1BBQ0tBR0VDT05GSUdbb3BlbmFsXSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuYWwsLS1kaXNhYmxlLW9wZW5hbCxvcGVuYWwtc29mdCIKK1BBQ0tBR0VDT05GSUdbaGxzXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1obHMsLS1kaXNhYmxlLWhscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW3NiY10gICAgICAgICAgICAgPSAiLS1lbmFibGUtc2JjLC0tZGlzYWJsZS1zYmMsc2JjIgorUEFDS0FHRUNPTkZJR1tkYXNoXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWRhc2gsLS1kaXNhYmxlLWRhc2gsbGlieG1sMiIKK1BBQ0tBR0VDT05GSUdbYnoyXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1iejIsLS1kaXNhYmxlLWJ6MixiemlwMiIKK1BBQ0tBR0VDT05GSUdbZmx1aWRzeW50aF0gICAgICA9ICItLWVuYWJsZS1mbHVpZHN5bnRoLC0tZGlzYWJsZS1mbHVpZHN5bnRoLGZsdWlkc3ludGgiCitQQUNLQUdFQ09ORklHW3NjaHJvZWRpbmdlcl0gICAgPSAiLS1lbmFibGUtc2Nocm8sLS1kaXNhYmxlLXNjaHJvLHNjaHJvZWRpbmdlciIKK1BBQ0tBR0VDT05GSUdbc21vb3Roc3RyZWFtaW5nXSA9ICItLWVuYWJsZS1zbW9vdGhzdHJlYW1pbmcsLS1kaXNhYmxlLXNtb290aHN0cmVhbWluZyxsaWJ4bWwyIgorUEFDS0FHRUNPTkZJR1tibHVlel0gICAgICAgICAgID0gIi0tZW5hYmxlLWJsdWV6LC0tZGlzYWJsZS1ibHVleiwke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbcnN2Z10gICAgICAgICAgICA9ICItLWVuYWJsZS1yc3ZnLC0tZGlzYWJsZS1yc3ZnLGxpYnJzdmciCitQQUNLQUdFQ09ORklHW3NuZGZpbGVdICAgICAgICAgPSAiLS1lbmFibGUtc25kZmlsZSwtLWRpc2FibGUtc25kZmlsZSxsaWJzbmRmaWxlMSIKK1BBQ0tBR0VDT05GSUdbd2VicF0gICAgICAgICAgICA9ICItLWVuYWJsZS13ZWJwLC0tZGlzYWJsZS13ZWJwLGxpYndlYnAiCitQQUNLQUdFQ09ORklHW3J0bXBdICAgICAgICAgICAgPSAiLS1lbmFibGUtcnRtcCwtLWRpc2FibGUtcnRtcCxydG1wZHVtcCIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gICAgICAgICA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIiCisKKyMgdGhlc2UgcGx1Z2lucyBoYXZlIG5vdCBiZWVuIHBvcnRlZCB0byAxLjAgKHlldCk6CisjICAgZGlyZWN0ZHJhdyB2Y2QgYXBleHNpbmsgZGMxMzk0IGx2MiBsaW5zeXMgbXVzZXBhY2sgbXl0aHR2CisjICAgbmFzIHRpbWlkaXR5IHRlbGV0ZXh0ZGVjIHNkbCB4dmlkIHdpbmluZXQgYWNtIGdzZXR0aW5ncworIyAgIHNuZGlvIHF0d3JhcHBlciBjZHhhcGFyc2UgZGNjcCBmYWNlb3ZlcmxheSBoZHZwYXJzZSB0dGEKKyMgICBtdmUgbnV2ZGVtdXggb3N4X3ZpZGVvIHBhdGNoZGV0ZWN0IHF1aWNrdGltZSByZWFsIHNkaQorIyAgIHZpZGVvbWVhc3VyZSBnc2V0dGluZ3MKKworIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm8gY29ycmVzcG9uZGluZyBsaWJyYXJ5IGluIE9FLWNvcmUgb3IgbWV0YS1vcGVuZW1iZWRkZWQ6CisjICAgb3Blbm5pMiB3aW5rcyBkaXJlY3QzZCBkaXJlY3RkcmF3IGRpcmVjdHNvdW5kIHdpbnNjcmVlbmNhcCBvc3hfdmlkZW8KKyMgICBhcHBsZV9tZWRpYSBhbmRyb2lkX21lZGlhIGF2YyBjaHJvbWFwcmludCBkYWFsYSBkdHMgZ21lIGdzbSBrYXRlIGxhZHNwYSBtaW1pYworIyAgIG1wZWcyZW5jIG1wbGV4IG9mYSBvcGVuanBlZyBvcGVuc2xlcyBwdnIgcmVzaW5kdmQgcnRtcCBzb3VuZHRvdWNoIHNwYW5kc3Agc3BjCisjICAgc3J0cCB2ZHBhdSB2b2FhY2VuYyB2b2FtcndiZW5jIHdhc2FwaSB6YmFyCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtLWVuYWJsZS1kdmIgXAorICAgIC0tZW5hYmxlLXNobSBcCisgICAgLS1lbmFibGUtZmJkZXYgXAorICAgIC0tZW5hYmxlLWRlY2tsaW5rIFwKKyAgICAtLWRpc2FibGUtYWNtIFwKKyAgICAtLWRpc2FibGUtYW5kcm9pZF9tZWRpYSBcCisgICAgLS1kaXNhYmxlLWFwZXhzaW5rIFwKKyAgICAtLWRpc2FibGUtYXBwbGVfbWVkaWEgXAorICAgIC0tZGlzYWJsZS1hdmMgXAorICAgIC0tZGlzYWJsZS1jaHJvbWFwcmludCBcCisgICAgLS1kaXNhYmxlLWNvY29hIFwKKyAgICAtLWRpc2FibGUtZGFhbGEgXAorICAgIC0tZGlzYWJsZS1kYzEzOTQgXAorICAgIC0tZGlzYWJsZS1kaXJlY3QzZCBcCisgICAgLS1kaXNhYmxlLWRpcmVjdGRyYXcgXAorICAgIC0tZGlzYWJsZS1kaXJlY3Rzb3VuZCBcCisgICAgLS1kaXNhYmxlLWR0cyBcCisgICAgLS1kaXNhYmxlLWdtZSBcCisgICAgLS1kaXNhYmxlLWdzZXR0aW5ncyBcCisgICAgLS1kaXNhYmxlLWdzbSBcCisgICAgLS1kaXNhYmxlLWthdGUgXAorICAgIC0tZGlzYWJsZS1sYWRzcGEgXAorICAgIC0tZGlzYWJsZS1saW5zeXMgXAorICAgIC0tZGlzYWJsZS1sdjIgXAorICAgIC0tZGlzYWJsZS1taW1pYyBcCisgICAgLS1kaXNhYmxlLW1wZWcyZW5jIFwKKyAgICAtLWRpc2FibGUtbXBsZXggXAorICAgIC0tZGlzYWJsZS1tdXNlcGFjayBcCisgICAgLS1kaXNhYmxlLW15dGh0diBcCisgICAgLS1kaXNhYmxlLW5hcyBcCisgICAgLS1kaXNhYmxlLW9mYSBcCisgICAgLS1kaXNhYmxlLW9wZW5qcGVnIFwKKyAgICAtLWRpc2FibGUtb3BlbnNsZXMgXAorICAgIC0tZGlzYWJsZS1vc3hfdmlkZW8gXAorICAgIC0tZGlzYWJsZS1wdnIgXAorICAgIC0tZGlzYWJsZS1xdWlja3RpbWUgXAorICAgIC0tZGlzYWJsZS1yZXNpbmR2ZCBcCisgICAgLS1kaXNhYmxlLXNkbCBcCisgICAgLS1kaXNhYmxlLXNkbHRlc3QgXAorICAgIC0tZGlzYWJsZS1zbmRpbyBcCisgICAgLS1kaXNhYmxlLXNvdW5kdG91Y2ggXAorICAgIC0tZGlzYWJsZS1zcGFuZHNwIFwKKyAgICAtLWRpc2FibGUtc3BjIFwKKyAgICAtLWRpc2FibGUtc3J0cCBcCisgICAgLS1kaXNhYmxlLXRlbGV0ZXh0ZGVjIFwKKyAgICAtLWRpc2FibGUtdGltaWRpdHkgXAorICAgIC0tZGlzYWJsZS12Y2QgXAorICAgIC0tZGlzYWJsZS12ZHBhdSBcCisgICAgLS1kaXNhYmxlLXZvYWFjZW5jIFwKKyAgICAtLWRpc2FibGUtdm9hbXJ3YmVuYyBcCisgICAgLS1kaXNhYmxlLXdhc2FwaSBcCisgICAgLS1kaXNhYmxlLXdpbGRtaWRpIFwKKyAgICAtLWRpc2FibGUtd2luaW5ldCBcCisgICAgLS1kaXNhYmxlLXdpbnNjcmVlbmNhcCBcCisgICAgLS1kaXNhYmxlLXh2aWQgXAorICAgIC0tZGlzYWJsZS16YmFyIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi0tZGlzYWJsZS15YWRpZiIsICIiLCBkKX0gXAorICAgICIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0ZJTEVTX2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC1vcGVuY3YgKz0gIiR7ZGF0YWRpcn0vZ3N0LXBsdWdpbnMtYmFkLzEuMC9vcGVuY3YqIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDJhMzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIGRlYmEwZGE0NWVjODIxMjA5YTdlZDE0OGE0NTIxZDU2MmU2NTEyY2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDE0OjQ3OjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGdsOiBkbyBub3QgY2hlY2sgZm9yIEdML0dMVS9FR0wvR0xFUzIgbGlicyBpZiBkaXNhYmxlZCBpbgorIGNvbmZpZ3VyYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU1MjJdCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE0ICsrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFhNDZhZmIuLmU4NWQ0YmEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY2MSwxMCArNjYxLDE2IEBAIGNhc2UgJGhvc3QgaW4KKyAgICAgZmkKKyAgIDs7CisgICAqKQorLSAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMLCBHTCwgZ2xUZXhJbWFnZTJELCwgR0wvZ2wuaCkKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTFUsIEdMVSwgZ2x1U3BoZXJlLCwgR0wvZ2x1LmgpCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0xFUzIsIEdMRVN2MiwgZ2xUZXhJbWFnZTJELCwgR0xFUzIvZ2wyLmgpCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoRUdMLCBFR0wsIGVnbEdldEVycm9yLCwgRUdML2VnbC5oKQorKyAgICBpZiB0ZXN0ICJ4JE5FRURfR0wiICE9ICJ4bm8iOyB0aGVuCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTCwgR0wsIGdsVGV4SW1hZ2UyRCwsIEdML2dsLmgpCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTFUsIEdMVSwgZ2x1U3BoZXJlLCwgR0wvZ2x1LmgpCisrICAgIGZpCisrICAgIGlmIHRlc3QgIngkTkVFRF9HTEVTMiIgIT0gInhubyI7IHRoZW4KKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMRVMyLCBHTEVTdjIsIGdsVGV4SW1hZ2UyRCwsIEdMRVMyL2dsMi5oKQorKyAgICBmaQorKyAgICBpZiB0ZXN0ICJ4JE5FRURfRUdMIiAhPSAieG5vIjsgdGhlbgorKyAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoRUdMLCBFR0wsIGVnbEdldEVycm9yLCwgRUdML2VnbC5oKQorKyAgICBmaQorIAorICAgICBvbGRfTElCUz0kTElCUworICAgICBvbGRfQ0ZMQUdTPSRDRkxBR1MKKy0tIAorMS44LjMuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MmFmZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGY1OWM1MjY5ZjkyZDU5YTUyOTZjYmZlZWI2ODJkNDIwOTVjZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTggU2VwIDIwMTQgMDI6MjQ6MDcgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkOiBhbGxvdyB0byBkaXNhYmxlIGxpYnNzaDIKKworbGlic3NoMiBpcyBhdXRvbWF0aWNhbGx5IGxpbmtlZCB0byBpZiBwcmVzZW50LCB0aGlzIHVuZGV0ZXJtaW5lZAorZGVwZW5kZW5jeSBtYXkgY2F1c2UgYnVpbGQgZXJyb3JzIGxpa2U6CisKKyAgLi4uL3g4Nl82NC1wb2t5LWxpbnV4LzQuOS4wL2xkOiBjYW5ub3QgZmluZCAtbHNzaDIKKworbGlic3NoMiBpc24ndCBhbiBvZS1jb3JlIHJlY2lwZSwgc28gYWxsb3cgdG8gZGlzYWJsZSBpdCBmcm9tCitjb25maWd1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMjMgKysrKysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGU5NWM1Yy4uMTIxNTNiNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTkwMSw2ICsxOTAxLDE1IEBAIEFHX0dTVF9DSEVDS19GRUFUVVJFKENIUk9NQVBSSU5ULCBbY2hyb21hcHJpbnRdLCBjaHJvbWFwcmludCwgWworIF0pCisgCisgZG5sICoqKiBDdXJsICoqKgorK0FDX0FSR19FTkFCTEUoW2xpYnNzaDJdLAorKyAgICAgWyAgLS1lbmFibGUtbGlic3NoMgkJZW5hYmxlIExJQlNTSDIgc3VwcG9ydCBAPDpAZGVmYXVsdD1hdXRvQDo+QF0sCisrICAgICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgICAgICB5ZXMpICBORUVEX1NTSDI9eWVzIDs7CisrICAgICAgIG5vKSAgIE5FRURfU1NIMj1ubyA7OworKyAgICAgICBhdXRvKSBORUVEX1NTSDI9YXV0byA7OworKyAgICAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWxpYnNzaDJdKSA7OworKyAgICAgZXNhY10sW05FRURfU1NIMj1hdXRvXSkKKysKKyB0cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9DVVJMLCB0cnVlKQorIEFHX0dTVF9DSEVDS19GRUFUVVJFKENVUkwsIFtDdXJsIHBsdWdpbl0sIGN1cmwsIFsKKyAgIFBLR19DSEVDS19NT0RVTEVTKENVUkwsIGxpYmN1cmwgPj0gNy4yMS4wLCBbCitAQCAtMTkxNSwxMiArMTkyNCwxNCBAQCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShDVVJMLCBbQ3VybCBwbHVnaW5dLCBjdXJsLCBbCisgICBdKQorICAgQUNfU1VCU1QoQ1VSTF9DRkxBR1MpCisgICBBQ19TVUJTVChDVVJMX0xJQlMpCistICBQS0dfQ0hFQ0tfTU9EVUxFUyhTU0gyLCBsaWJzc2gyID49IDEuNC4zLCBbCistICAgIEhBVkVfU1NIMj0ieWVzIgorLSAgICBBQ19ERUZJTkUoSEFWRV9TU0gyLCAxLCBbRGVmaW5lIGlmIGxpYnNzaDIgaXMgYXZhaWxhYmxlXSkKKy0gIF0sIFsKKy0gICAgSEFWRV9TU0gyPSJubyIKKy0gIF0pCisrICBpZiB0ZXN0ICJ4JE5FRURfU1NIMiIgIT0gInhubyI7IHRoZW4KKysgICAgUEtHX0NIRUNLX01PRFVMRVMoU1NIMiwgbGlic3NoMiA+PSAxLjQuMywgWworKyAgICAgIEhBVkVfU1NIMj0ieWVzIgorKyAgICAgIEFDX0RFRklORShIQVZFX1NTSDIsIDEsIFtEZWZpbmUgaWYgbGlic3NoMiBpcyBhdmFpbGFibGVdKQorKyAgICBdLCBbCisrICAgICAgSEFWRV9TU0gyPSJubyIKKysgICAgXSkKKysgIGZpCisgICBBTV9DT05ESVRJT05BTChVU0VfU1NIMiwgdGVzdCAieCRIQVZFX1NTSDIiID0gInh5ZXMiKQorICAgQUNfU1VCU1QoU1NIMl9DRkxBR1MpCisgICBBQ19TVUJTVChTU0gyX0xJQlMpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDY1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfMS40LjUuYmIKQEAgLTAsMCArMSwxNCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZ2wtZG8tbm90LWNoZWNrLWZvci1HTC1HTFUtRUdMLUdMRVMyLWxpYnMtaWYtZGlzYWJsZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImUwYmIzOTQxMmNmNGE0OGZlMDM5N2JjZjNhN2NkNDUxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE1MmZhZDcyNTA2ODNkNzJmOWRlYjM2YzU2ODU0MjgzMzgzNjVmZTRhNGM4N2ZmZTE1ZTM4NzgzYjE0Zjk4M2MiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTUwNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWRfZ2l0LmJiCkBAIC0wLDAgKzEsMjYgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTczYTU4NTVhODExOWRlYjAxN2Y1ZjEzY2YzMjcwOTVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC90dGEvZmlsdGVycy5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT04YTA4MjcwNjU2ZjJmOGFkN2JiMzY1NWI4MzEzOGU1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MjE2ODJlNGU4ZmVhNTI0MTNmZDI2YzYwYWNiOTA3ZTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9jcmMzMi5oO2JlZ2lubGluZT0xMjtlbmRsaW5lPTI5O21kNT0yN2RiMjY5YzU3NWQxZTUzMTdmZmZjYTJkMzNiM2I1MCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjZlNWRiNTdkMjQ0NmE3NTNhYWE3NmJlZTI2OGUxZjk1NjAwYjE0Y2UiCisKK1BBQ0tBR0VDT05GSUdbc2JjXSA9ICItLWVuYWJsZS1zYmMsLS1kaXNhYmxlLXNiYyxzYmMiCitQQUNLQUdFQ09ORklHW2hsc10gPSAiLS1lbmFibGUtaGxzLC0tZGlzYWJsZS1obHMsZ251dGxzIgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLWRpc2FibGUtb3BlbmpwZWcgXAorICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZjNmNDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwpAQCAtMCwwICsxLDM5IEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCisKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbGlieDExIGxpYnh2JywgJycsIGQpfSIKK0RFUEVORFMgKz0gImZyZWV0eXBlIGxpYm9pbCB1dGlsLWxpbnV4IgorCitpbmhlcml0IGdldHRleHQKKworUEFDS0FHRVNfRFlOQU1JQyA9KyAiXmxpYmdzdC4qIgorCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0gXAorICAgIG9yYyBpdm9yYmlzIG9nZyB0aGVvcmEgdm9yYmlzIHBhbmdvIFwKKyAgICAiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciIKK1gxMUVOQUJMRU9QVFMgPSAiLS1lbmFibGUteCAtLWVuYWJsZS14dmlkZW8gLS1lbmFibGUteHNobSIKK1gxMURJU0FCTEVPUFRTID0gIi0tZGlzYWJsZS14IC0tZGlzYWJsZS14dmlkZW8gLS1kaXNhYmxlLXhzaG0iCitQQUNLQUdFQ09ORklHW3gxMV0gICAgID0gIiR7WDExRU5BQkxFT1BUU30sJHtYMTFESVNBQkxFT1BUU30sJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gICAgPSAiLS1lbmFibGUtYWxzYSwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbaXZvcmJpc10gPSAiLS1lbmFibGUtaXZvcmJpcywtLWRpc2FibGUtaXZvcmJpcyx0cmVtb3IiCitQQUNLQUdFQ09ORklHW29nZ10gICAgID0gIi0tZW5hYmxlLW9nZywtLWRpc2FibGUtb2dnLGxpYm9nZyIKK1BBQ0tBR0VDT05GSUdbdGhlb3JhXSAgPSAiLS1lbmFibGUtdGhlb3JhLC0tZGlzYWJsZS10aGVvcmEsbGlidGhlb3JhIgorUEFDS0FHRUNPTkZJR1t2b3JiaXNdICA9ICItLWVuYWJsZS12b3JiaXMsLS1kaXNhYmxlLXZvcmJpcyxsaWJ2b3JiaXMiCitQQUNLQUdFQ09ORklHW3BhbmdvXSAgID0gIi0tZW5hYmxlLXBhbmdvLC0tZGlzYWJsZS1wYW5nbyxwYW5nbyIKKworCisjIGNkcGFyYW5vaWEgYW5kIGxpYnZpc3VhbCBkbyBub3Qgc2VlbSB0byBleGlzdCBhbnl3aGVyZSBpbiBPRQorRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZGlzYWJsZS1mcmVldHlwZXRlc3QgXAorICAgIC0tZGlzYWJsZS1jZHBhcmFub2lhIFwKKyAgICAtLWRpc2FibGUtbGlidmlzdWFsIFwKKyIKKworRklMRVNfJHtNTFBSRUZJWH1saWJnc3R0YWctMS4wICs9ICIke2RhdGFkaXJ9L2dzdC1wbHVnaW5zLWJhc2UvMS4wL2xpY2Vuc2UtdHJhbnNsYXRpb25zLmRpY3QiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2FwcGVuZF94ODYgPSAiIGFjX2N2X2hlYWRlcl9lbW1pbnRyaW5faD1ubyBhY19jdl9oZWFkZXJfeG1taW50cmluX2g9bm8iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS1iYXNldGV4dG92ZXJsYXktbWFrZS1tZW1vcnktY29weS13aGVuLXZpZGVvLWJ1ZmZlci1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZGNhOTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaApAQCAtMCwwICsxLDEyOSBAQAorRnJvbSAzNzgxZDQwOTQwZDQ2ZDdlNmE1MDIwOTJkMjRhYWM3OTk3ZjZkYTViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDUgTWFyIDIwMTUgMTI6MDY6MjMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIGJhc2V0ZXh0b3ZlcmxheTogbWFrZSBtZW1vcnkgY29weSB3aGVuIHZpZGVvIGJ1ZmZlcidzCisgbWVtb3J5IGlzIHJlYWR5IG9ubHkKKworMS4gc2luY2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIGp1c3QgbG9va3VwIHRoZSByZWZjb3VudCB0byBkZXRlcm1pbmUgaWYKKyAgIGEgYnVmZmVyIGlzIHdyaXRhYmxlLCBhbmQgaXQgd2lsbCB1c2UgX2dzdF9idWZmZXJfY29weSgpIHdoaWNoIGRvbid0CisgICBwZXJmb3JtIGEgZGVlcCBtZW1vcnkgY29weSBldmVuIGlmIHRoZSBmbGFnIG9mIGEgbWVtb3J5IGlzIHNldCB0bworICAgR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLiBTbywgd2UgZGV0ZWN0IHRoZSBtZW1vcnkgZmxhZyBhbmQgdXNlCisgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIHdpdGggR1NUX0JVRkZFUl9DT1BZX0RFRVAgcGFyYW1ldGVyIHRvIHBlcmZvcm0KKyAgIGRlZXAgbWVtb3J5IGNvcHkuIGlmIHRoZSBhbGxvY2F0b3Igb2YgYSBtZW1vcnkgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weQorICAgaW50ZXJmYWNlLCB0aGUgaXQgd2lsbCByZXR1cm4gTlVMTCwgaWYgdGhpcyBjYXNlLCB3ZSBjYW4gdXNlCisgICBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB0byBnZXQgYSBzaGFyZWQgbWVtb3J5IGJ1ZmZlciBvciB0aGUgb3JpZ25hbAorICAgYnVmZmVyIGlmIHRoZSBidWZmZXIncyByZWZjb3VudCBpcyAxLgorMi4gIG5ldyBmZWF0dXJlIGlzIG5vIGFkZGVkIGlmIGNhcHMgaGFzIG5vIGZlYXR1cmUgZHVyaW5nIGNhcHMgbmVnb3RpYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTVdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jIGIvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jCitpbmRleCBjOTE5ODYxLi4zYzBhMWQ3IDEwMDc1NQorLS0tIGEvZXh0L3BhbmdvL2dzdGJhc2V0ZXh0b3ZlcmxheS5jCisrKysgYi9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMKK0BAIC03NDcsNiArNzQ3LDcgQEAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X25lZ290aWF0ZSAoR3N0QmFzZVRleHRPdmVybGF5ICogb3ZlcmxheSwgR3N0Q2FwcyAqIGNhcHMpCisgICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICBmID0gZ3N0X2NhcHNfZmVhdHVyZXNfbmV3CisgICAgICAgICAgIChHU1RfQ0FQU19GRUFUVVJFX01FVEFfR1NUX1ZJREVPX09WRVJMQVlfQ09NUE9TSVRJT04sIE5VTEwpOworKyAgICAgIGdzdF9jYXBzX3NldF9mZWF0dXJlcyhvdmVybGF5X2NhcHMsIDAsIGYpOworICAgICB9IGVsc2UgeworICAgICAgIGdzdF9jYXBzX2ZlYXR1cmVzX2FkZCAoZiwKKyAgICAgICAgICAgR1NUX0NBUFNfRkVBVFVSRV9NRVRBX0dTVF9WSURFT19PVkVSTEFZX0NPTVBPU0lUSU9OKTsKK0BAIC0xODkwLDE2ICsxODkxLDcxIEBAIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9wdXNoX2ZyYW1lIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LAorICAgaWYgKGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKG92ZXJsYXktPnNyY3BhZCkpCisgICAgIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9uZWdvdGlhdGUgKG92ZXJsYXksIE5VTEwpOworIAorLSAgdmlkZW9fZnJhbWUgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKHZpZGVvX2ZyYW1lKTsKKy0KKyAgIGlmIChvdmVybGF5LT5hdHRhY2hfY29tcG9fdG9fYnVmZmVyKSB7CisgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG92ZXJsYXksICJBdHRhY2hpbmcgdGV4dCBvdmVybGF5IGltYWdlIHRvIHZpZGVvIGJ1ZmZlciIpOworKyAgICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworICAgICBnc3RfYnVmZmVyX2FkZF92aWRlb19vdmVybGF5X2NvbXBvc2l0aW9uX21ldGEgKHZpZGVvX2ZyYW1lLAorICAgICAgICAgb3ZlcmxheS0+Y29tcG9zaXRpb24pOworICAgICAvKiBGSVhNRTogZW11bGF0ZSBzaGFkZWQgYmFja2dyb3VuZCBib3ggaWYgd2FudF9zaGFkaW5nPXRydWUgKi8KKyAgICAgZ290byBkb25lOworICAgfQorIAorKyAgZ2ludCBtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSh2aWRlb19mcmFtZSk7CisrICBnYm9vbGVhbiBtZW1fcmRvbmx5ID0gRkFMU0U7CisrICBHc3RNZW1vcnkgKm1lbTsKKysgIEdzdEJ1ZmZlciAqb3JpZyA9IHZpZGVvX2ZyYW1lOworKworKyAgd2hpbGUgKC0tbT49MCkgeworKyAgICBtZW0gPSBnc3RfYnVmZmVyX2dldF9tZW1vcnkodmlkZW9fZnJhbWUsIG0pOworKyAgICBpZiAoR1NUX01FTU9SWV9JU19SRUFET05MWShtZW0pKSB7CisrICAgICAgbWVtX3Jkb25seSA9IFRSVUU7CisrICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgfQorKworKyAgaWYgKG1lbV9yZG9ubHkpIHsKKysgICAgLy8gc2luY2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIGp1c3QgbG9va3VwIHRoZSByZWZjb3VudCB0byBkZXRlcm1pbmUgaWYKKysgICAgLy8gYSBidWZmZXIgaXMgd3JpdGFibGUsIGFuZCBpdCB3aWxsIHVzZSBfZ3N0X2J1ZmZlcl9jb3B5KCkgd2hpY2ggZG9uJ3QKKysgICAgLy8gcGVyZm9ybSBhIGRlZXAgbWVtb3J5IGNvcHkgZXZlbiBpZiB0aGUgZmxhZyBvZiBhIG1lbW9yeSBpcyBzZXQgdG8KKysgICAgLy8gR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLiBTbywgd2UgZGV0ZWN0IHRoZSBtZW1vcnkgZmxhZyBhbmQgdXNlCisrICAgIC8vIGdzdF9idWZmZXJfY29weV9yZWdpb24gd2l0aCBHU1RfQlVGRkVSX0NPUFlfREVFUCBwYXJhbWV0ZXIgdG8gcGVyZm9ybQorKyAgICAvLyBkZWVwIG1lbW9yeSBjb3B5LiBpZiB0aGUgYWxsb2NhdG9yIG9mIGEgbWVtb3J5IGRvbid0IHN1cHBvcnQgbWVtX2NvcHkKKysgICAgLy8gaW50ZXJmYWNlLCB0aGUgaXQgd2lsbCByZXR1cm4gTlVMTCwgaWYgdGhpcyBjYXNlLCB3ZSBjYW4gdXNlCisrICAgIC8vIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHRvIGdldCBhIHNoYXJlZCBtZW1vcnkgYnVmZmVyIG9yIHRoZSBvcmlnbmFsCisrICAgIC8vIGJ1ZmZlciBpZiB0aGUgYnVmZmVyJ3MgcmVmY291bnQgaXMgMS4KKysgICAgR3N0QnVmZmVyICpuZXdfYnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAodmlkZW9fZnJhbWUsCisrICAgICAgICBHU1RfQlVGRkVSX0NPUFlfQUxMIHwgR1NUX0JVRkZFUl9DT1BZX0RFRVAsIDAsIC0xKTsKKysKKysgICAgR1NUX0RFQlVHX09CSkVDVCAob3ZlcmxheSwgImNvcHkgJXMgdmlkZW8gZnJhbWUgYnVmZmVyICVwIC0+ICVwIiwKKysgICAgICAgIGdfdHlwZV9uYW1lIChHU1RfTUlOSV9PQkpFQ1RfVFlQRSAodmlkZW9fZnJhbWUpKSwgdmlkZW9fZnJhbWUsIG5ld19idWYpOworKworKyAgICBpZiAoIW5ld19idWYpIHsKKysgICAgICAvL21heWJlIHRoZSBhbGxvY2F0b3IgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weSBpbnRlcmZhY2UsIHRoZSB3ZSBqdXN0IHVzZQorKyAgICAgIC8vZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgdG8gZ2V0IGEgd3JpdGFibGUgYnVmZmVyLgorKyAgICAgIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmICh2aWRlb19mcmFtZSk7CisrICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChuZXdfYnVmLCBHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSk7CisrICAgICAgdmlkZW9fZnJhbWUgPSBuZXdfYnVmOworKyAgICB9CisrCisrICAgIGlmICghdmlkZW9fZnJhbWUpIHsKKysgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG92ZXJsYXksICJtYWtlIHdyaXRhYmxlIGJ1ZmZlciBmYWlsZWQiKTsKKysgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisrICAgIH0KKysKKysgICAgbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkodmlkZW9fZnJhbWUpOworKyAgICB3aGlsZSAoLS1tPj0wKSB7CisrICAgICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5KHZpZGVvX2ZyYW1lLCBtKTsKKysgICAgICBHU1RfTUVNT1JZX0ZMQUdfVU5TRVQgKG1lbSwgR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZKTsKKysgICAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworKyAgfQorKworICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZvdmVybGF5LT5pbmZvLCB2aWRlb19mcmFtZSwKKyAgICAgICAgICAgR1NUX01BUF9SRUFEV1JJVEUpKQorICAgICBnb3RvIGludmFsaWRfZnJhbWU7CitAQCAtMTkxOCw2ICsxOTc0LDE4IEBAIGdzdF9iYXNlX3RleHRfb3ZlcmxheV9wdXNoX2ZyYW1lIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LAorIAorICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOworIAorKyAgaWYgKG1lbV9yZG9ubHkgJiYgb3JpZyA9PSB2aWRlb19mcmFtZSkgeworKyAgICAvL2lmIHdlIHVzZWQgdGhlIG9yaWdpbmFsIGJ1ZmZlciBhbmQgaXQncyBtZW0gaXMgc2V0IHRvIHJlYWQgb25seSwKKysgICAgLy9yZWNvdmVyIHRoZSBtZW1vcnkgcmVhZHkgb25seSBmbGFnIHNpbmNlIHdlIHVuc2V0IGl0IGJlZm9yZQorKyAgICAvLyBnc3RfdmlkZW9fZnJhbWVfbWFwICgpCisrICAgIG0gPSBnc3RfYnVmZmVyX25fbWVtb3J5KHZpZGVvX2ZyYW1lKTsKKysgICAgd2hpbGUgKC0tbT49MCkgeworKyAgICAgIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSh2aWRlb19mcmFtZSwgbSk7CisrICAgICAgR1NUX01FTU9SWV9GTEFHUyhtZW0pIHw9IChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpOworKyAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICAgIH0KKysgIH0KKysKKyBkb25lOgorIAorICAgcmV0dXJuIGdzdF9wYWRfcHVzaCAob3ZlcmxheS0+c3JjcGFkLCB2aWRlb19mcmFtZSk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiNDcyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSAyNjlmNjQyYzQ1ZDg1Y2ZkNjMwZWQ0OTA0NzhlNmJkNmI3MWE3NjdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IFR1ZSwgMTYgU2VwIDIwMTQgMDE6MDc6MTggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gdmlkZW8tZnJhbWU6IERvbid0IHJlZiBidWZmZXJzIHR3aWNlIHdoZW4gbWFwcGluZworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworaW5kZXggMDFmMjNjMC4uOGE5YWU5NiAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworQEAgLTEwNSw3ICsxMDUsNyBAQCBnc3RfdmlkZW9fZnJhbWVfbWFwX2lkIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIEdzdFZpZGVvSW5mbyAqIGluZm8sCisgICAgICAgZnJhbWUtPmRhdGFbaV0gPSBmcmFtZS0+bWFwWzBdLmRhdGEgKyBpbmZvLT5vZmZzZXRbaV07CisgICAgIH0KKyAgIH0KKy0gIGZyYW1lLT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKysgIGZyYW1lLT5idWZmZXIgPSBidWZmZXI7CisgICBpZiAoKGZsYWdzICYgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikgPT0gMCkKKyAgICAgZ3N0X2J1ZmZlcl9yZWYgKGZyYW1lLT5idWZmZXIpOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLWdzdHBsYXlzaW5rLWRvbi10LXNldC1hc3luYy1vZi1jdXN0b20tdGV4dC1zaW5rLXRvLWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljMTQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMGE3ODU1NWVhNmM4YzJmMWVlMjdlZTQ3MDdlOGQ3YWEwMGFiN2E2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNDoxNToyNSArMDgwMAorU3ViamVjdDogW1BBVENIIDIvNF0gZ3N0cGxheXNpbms6IGRvbid0IHNldCBhc3luYyBvZiBjdXN0b20gdGV4dC1zaW5rIHRvCisgZmFsc2UKKworc2V0IGFzeW5jIHRvIGZhbHNlIGxlYWQgdG8gQS9WIHN5bmMgcHJvYmxlbSB3aGVuIHNlZWtpbmcuCit0aGUgcHJlcm9sbCBuZWVkIHVzZSBHQVAgZXZlbnQgaW5zdGVhZCBvZiBzZXQgYXN5bmMgdG8gZmFsc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk5XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jIGIvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBmNWEyZDQyLi5mYmEwMTcyCistLS0gYS9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMKK0BAIC0yNDA4LDcgKzI0MDgsNyBAQCBnZW5fdGV4dF9jaGFpbiAoR3N0UGxheVNpbmsgKiBwbGF5c2luaykKKyAgICAgICAgICAgR19UWVBFX0JPT0xFQU4pOworICAgICAgIGlmIChlbGVtKSB7CisgICAgICAgICAvKiBtYWtlIHN1cmUgdGhlIHNwYXJzZSBzdWJ0aXRsZXMgZG9uJ3QgcGFydGljaXBhdGUgaW4gdGhlIHByZXJvbGwgKi8KKy0gICAgICAgIGdfb2JqZWN0X3NldCAoZWxlbSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOworKyAgICAgICAgLy9nX29iamVjdF9zZXQgKGVsZW0sICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBsYXlzaW5rLCAiYWRkaW5nIGN1c3RvbSB0ZXh0IHNpbmsiKTsKKyAgICAgICAgIGdzdF9iaW5fYWRkIChiaW4sIGNoYWluLT5zaW5rKTsKKyAgICAgICAgIC8qIE5PVEUgc3RyZWFtc3luY2hyb25pemVyIG5lZWRzIHN0cmVhbXMgZGVjb3VwbGVkICovCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjViNWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDItdmlkZW8tZnJhbWUtQWRkLUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSA0MGEyOTNkNDRkMWFlY2NmNWViOGU4NmYyM2EwYjEzNjY2MTExYzVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMTQ6Mzk6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIHZpZGVvLWZyYW1lOiBBZGQgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRgorCitUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVmZmVyIGlzIG5vdCByZWZmZWQgYW5vdGhlciB0aW1lIHdoZW4KK3N0b3JpbmcgaXQgaW4gdGhlIEdzdFZpZGVvRnJhbWUsIGtlZXBpbmcgaXQgd3JpdGFibGUgaWYgaXQgd2FzCit3cml0YWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MTE4CistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyB8ICAgIDkgKysrKysrKystCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmggfCAgIDE4ICsrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworaW5kZXggNTM3Y2Y3MC4uMDFmMjNjMCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYworQEAgLTEwNiw2ICsxMDYsOSBAQCBnc3RfdmlkZW9fZnJhbWVfbWFwX2lkIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIEdzdFZpZGVvSW5mbyAqIGluZm8sCisgICAgIH0KKyAgIH0KKyAgIGZyYW1lLT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKKysgIGlmICgoZmxhZ3MgJiBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSA9PSAwKQorKyAgICBnc3RfYnVmZmVyX3JlZiAoZnJhbWUtPmJ1ZmZlcik7CisrCisgICBmcmFtZS0+bWV0YSA9IG1ldGE7CisgCisgICAvKiBidWZmZXIgZmxhZ3MgZW5oYW5jZSB0aGUgZnJhbWUgZmxhZ3MgKi8KK0BAIC0xODksMTEgKzE5MiwxMyBAQCBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKKyAgIEdzdEJ1ZmZlciAqYnVmZmVyOworICAgR3N0VmlkZW9NZXRhICptZXRhOworICAgZ2ludCBpOworKyAgR3N0TWFwRmxhZ3MgZmxhZ3M7CisgCisgICBnX3JldHVybl9pZl9mYWlsIChmcmFtZSAhPSBOVUxMKTsKKyAKKyAgIGJ1ZmZlciA9IGZyYW1lLT5idWZmZXI7CisgICBtZXRhID0gZnJhbWUtPm1ldGE7CisrICBmbGFncyA9IGZyYW1lLT5tYXBbMF0uZmxhZ3M7CisgCisgICBpZiAobWV0YSkgeworICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmluZm8uZmluZm8tPm5fcGxhbmVzOyBpKyspIHsKK0BAIC0yMDIsNyArMjA3LDkgQEAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwIChHc3RWaWRlb0ZyYW1lICogZnJhbWUpCisgICB9IGVsc2UgeworICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZmcmFtZS0+bWFwWzBdKTsKKyAgIH0KKy0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7CisrCisrICBpZiAoKGZsYWdzICYgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikgPT0gMCkKKysgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZnJhbWUtPmJ1ZmZlcik7CisgfQorIAorIC8qKgorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmgKK2luZGV4IDYyN2ZhYjAuLmY4ZTYzMDQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaAorKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmgKK0BAIC0xNDksNiArMTQ5LDI0IEBAIHR5cGVkZWYgZW51bSB7CisgICBHU1RfVklERU9fQlVGRkVSX0ZMQUdfTEFTVCAgICAgICAgPSAoR1NUX0JVRkZFUl9GTEFHX0xBU1QgPDwgOCkKKyB9IEdzdFZpZGVvQnVmZmVyRmxhZ3M7CisgCisrLyoqCisrICogR3N0VmlkZW9CdWZmZXJGbGFnczoKKysgKiBAR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRjogIERvbid0IHRha2UgYW5vdGhlciByZWZlcmVuY2Ugb2YgdGhlIGJ1ZmZlciBhbmQgc3RvcmUgaXQgaW4KKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBHc3RWaWRlb0ZyYW1lLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVmZmVyIHN0YXlzCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZSB3aGlsZSB0aGUgZnJhbWUgaXMgbWFwcGVkLCBidXQgcmVxdWlyZXMgdGhhdCB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciByZWZlcmVuY2Ugc3RheXMgdmFsaWQgdW50aWwgdGhlIGZyYW1lIGlzIHVubWFwcGVkIGFnYWluLgorKyAqIEBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTEFTVDogICAgT2Zmc2V0IHRvIGRlZmluZSBtb3JlIGZsYWdzCisrICoKKysgKiBBZGRpdGlvbmFsIG1hcHBpbmcgZmxhZ3MgZm9yIGdzdF92aWRlb19mcmFtZV9tYXAoKS4KKysgKgorKyAqIFNpbmNlOiAxLjYKKysgKi8KKyt0eXBlZGVmIGVudW0geworKyAgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRiAgID0gKEdTVF9NQVBfRkxBR19MQVNUIDw8IDApLAorKyAgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX0xBU1QgICAgID0gKEdTVF9NQVBfRkxBR19MQVNUIDw8IDgpCisrICAvKiA4IG1vcmUgZmxhZ3MgcG9zc2libGUgYWZ0ZXJ3YXJkcyAqLworK30gR3N0VmlkZW9GcmFtZU1hcEZsYWdzOworKworIEdfRU5EX0RFQ0xTCisgCisgI2VuZGlmIC8qIF9fR1NUX1ZJREVPX0ZSQU1FX0hfXyAqLworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmViZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjI1IEBACitGcm9tIGJlNjE2M2NmYTNhMjU1NDkzZjlkNzViYWQ5NTQxY2JmZTE3MjNmZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTQ6MTc6MTAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIHNzYXBhcnNlOiBlbmhhbmNlIFNTQSB0ZXh0IGxpbmVzIHBhcnNpbmcuCisKK3NvbWUgcGFyc2VyIHdpbGwgcGFzcyBpbiB0aGUgb3JpZ2luYWwgc3NhIHRleHQgbGluZSB3aGljaCBzdGFydHMgd2l0aCAiRGlhbG9nOiIKK2FuZCB0aGVyZSdzIGFyZSBtYXliZSBtdWx0aXBsZSBEaWFsb2cgbGluZXMgaW4gb25lIGlucHV0IGJ1ZmZlci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTZdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3N1YnBhcnNlL2dzdHNzYXBhcnNlLmMgYi9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDA2ZWNlZjkuLjBhYjVkY2UKKy0tLSBhL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jCisrKysgYi9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYworQEAgLTI2MCw2ICsyNjAsNyBAQCBnc3Rfc3NhX3BhcnNlX3JlbW92ZV9vdmVycmlkZV9jb2RlcyAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQpCisgICogZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmU6CisgICogQHBhcnNlOiBjYWxsZXIgZWxlbWVudAorICAqIEB0eHQ6IHRleHQgdG8gcHVzaAorKyAqIEBzaXplOiB0ZXh0IHNpemUgbmVlZCB0byBiZSBwYXJzZQorICAqIEBzdGFydDogdGltZXN0YW1wIGZvciB0aGUgYnVmZmVyCisgICogQGR1cmF0aW9uOiBkdXJhdGlvbiBmb3IgdGhlIGJ1ZmZlcgorICAqCitAQCAtMjY5LDI3ICsyNzAsMTMzIEBAIGdzdF9zc2FfcGFyc2VfcmVtb3ZlX292ZXJyaWRlX2NvZGVzIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCkKKyAgKiBSZXR1cm5zOiByZXN1bHQgb2YgdGhlIHB1c2ggb2YgdGhlIGNyZWF0ZWQgYnVmZmVyCisgICovCisgc3RhdGljIEdzdEZsb3dSZXR1cm4KKy1nc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQsCisrZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0LCBnaW50IHNpemUsCisgICAgIEdzdENsb2NrVGltZSBzdGFydCwgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uKQorIHsKKyAgIEdzdEZsb3dSZXR1cm4gcmV0OworICAgR3N0QnVmZmVyICpidWY7CistICBnY2hhciAqdCwgKmVzY2FwZWQ7CisrICBnY2hhciAqdCwgKnRleHQsICpwLCAqZXNjYXBlZCwgKnBfc3RhcnQsICpwX2VuZDsKKyAgIGdpbnQgbnVtLCBpLCBsZW47CisrICBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSA9IEdfTUFYVUlOVDY0LCBlbmRfdGltZSA9IDA7CisgCistICBudW0gPSBhdG9pICh0eHQpOworLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUGFyc2luZyBsaW5lICMlZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCistICAgICAgbnVtLCBHU1RfVElNRV9BUkdTIChzdGFydCkpOworLQorLSAgLyogc2tpcCBhbGwgbm9uLXRleHQgZmllbGRzIGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgKi8KKysgIHAgPSB0ZXh0ID0gZ19tYWxsb2Moc2l6ZSArIDEpOworKyAgKnAgPSAnXDAnOworICAgdCA9IHR4dDsKKy0gIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKy0gICAgdCA9IHN0cmNociAodCwgJywnKTsKKysKKysgIC8qIHRoZXJlIGFyZSBtYXkgaGF2ZSBtdWx0aXBsZSBkaWFsb2d1ZSBsaW5lcyBhdCBhIHRpbWUgKi8KKysgIHdoaWxlICgqdCkgeworKyAgICAvKiBpZ25vcmUgbGVhZGluZyB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzICovCisrICAgIHdoaWxlIChpc3NwYWNlKCp0KSkKKysgICAgICB0Kys7CisrCisrICAgIC8qIGlnbm9yZSBGb3JtYXQ6IGFuZCBTdHlsZTogbGluZXMgKi8KKysgICAgaWYgKHN0cm5jbXAodCwgIkZvcm1hdDoiLCA3KSA9PSAwIHx8IHN0cm5jbXAodCwgIlN0eWxlOiIsIDYpID09IDApIHsKKysgICAgICB3aGlsZSAoKnQgIT0gJ1wwJyAmJiAqdCAhPSAnXG4nKSB7CisrICAgICAgICB0Kys7CisrICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICgqdCA9PSAnXDAnKQorKyAgICAgIGJyZWFrOworKworKyAgICAvKiBjb250aW51ZSB3aXRoIG5leHQgbGluZSAqLworKyAgICBpZiAoKnQgPT0gJ1xuJykgeworKyAgICAgIHQrKzsKKysgICAgICBjb250aW51ZTsKKysgICAgfQorKworKyAgICBpZihzdHJuY21wKHQsICJEaWFsb2d1ZToiLCA5KSAhPSAwKSB7CisrICAgICAgLyogbm90IHN0YXJ0ZWQgd2l0aCAiRGlhbG9ndWU6IiwgaXQgbXVzdCBiZSBhIGxpbmUgdHJpbW1lZCBieSBkZW11eGVyICovCisrICAgICAgbnVtID0gYXRvaSAodCk7CisrICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUGFyc2luZyBsaW5lICMlZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCisrICAgICAgICAgIG51bSwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpKTsKKysKKysgICAgICAvKiBza2lwIGFsbCBub24tdGV4dCBmaWVsZHMgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCAqLworKyAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKysgICAgICAgIHQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgICBpZiAodCA9PSBOVUxMKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgICsrdDsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgLyogc3RhcnRlZCB3aXRoICJEaWFsb2d1ZToiLCB1cGRhdGUgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiAqLworKyAgICAgIC8qIHRpbWUgZm9ybWF0IGFyZSBsaWtlIERpYWxvZzpNYXJrLDA6MDA6MDEuMDIsMDowMDowMy4wNCx4eCx4eHgsLi4uICovCisrICAgICAgZ3VpbnQgaG91ciwgbWluLCBzZWMsIG1zZWMsIGxlbjsKKysgICAgICBHc3RDbG9ja1RpbWUgdG1wOworKyAgICAgIGdjaGFyIHRfc3RyWzEyXSA9IHswfTsKKysKKysgICAgICAvKiBmaW5kIHRoZSBmaXJzdCAnLCcgKi8KKysgICAgICBwX3N0YXJ0ID0gc3RyY2hyICh0LCAnLCcpOworKyAgICAgIGlmIChwX3N0YXJ0KQorKyAgICAgICAgcF9lbmQgPSBzdHJjaHIgKCsrcF9zdGFydCwgJywnKTsKKysKKysgICAgICBpZiAocF9zdGFydCAmJiBwX2VuZCkgeworKyAgICAgICAgLyogY29weSB0ZXh0IGJldHdlZW4gZmlyc3QgJywnIGFuZCBzZWNvbmQgJywnICovCisrICAgICAgICBzdHJuY3B5KHRfc3RyLCBwX3N0YXJ0LCBwX2VuZCAtIHBfc3RhcnQpOworKyAgICAgICAgaWYgKHNzY2FuZiAodF9zdHIsICIldToldToldS4ldSIsICZob3VyLCAmbWluLCAmc2VjLCAmbXNlYykgPT0gNCkgeworKyAgICAgICAgICB0bXAgPSAoKGhvdXIqMzYwMCkgKyAobWluKjYwKSArIHNlYykgKiBHU1RfU0VDT05EICsgbXNlYypHU1RfTVNFQ09ORDsKKysgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJHZXQgc3RhcnQgdGltZTolMDJkOiUwMmQ6JTAyZDolMDNkXG4iLAorKyAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMsIG1zZWMpOworKyAgICAgICAgICBpZiAoc3RhcnRfdGltZSA+IHRtcCkKKysgICAgICAgICAgICBzdGFydF90aW1lID0gdG1wOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKKysgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2Ugc3NhIHN0YXJ0IHRpbWVzdGFtcCBzdHJpbmcgOiVzIiwgdF9zdHIpOworKyAgICAgICAgfQorKworKyAgICAgICAgcF9zdGFydCA9IHBfZW5kOworKyAgICAgICAgcF9lbmQgPSBzdHJjaHIgKCsrcF9zdGFydCwgJywnKTsKKysgICAgICAgIGlmIChwX2VuZCkgeworKyAgICAgICAgICAvKiBjb3B5IHRleHQgYmV0d2VlbiBzZWNvbmQgJywnIGFuZCB0aGlyZCAnLCcgKi8KKysgICAgICAgICAgc3RybmNweSh0X3N0ciwgcF9zdGFydCwgcF9lbmQgLSBwX3N0YXJ0KTsKKysgICAgICAgICAgaWYgKHNzY2FuZiAodF9zdHIsICIldToldToldS4ldSIsICZob3VyLCAmbWluLCAmc2VjLCAmbXNlYykgPT0gNCkgeworKyAgICAgICAgICAgIHRtcCA9ICgoaG91ciozNjAwKSArIChtaW4qNjApICsgc2VjKSpHU1RfU0VDT05EICsgbXNlYypHU1RfTVNFQ09ORDsKKysgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhcnNlLCAiR2V0IGVuZCB0aW1lOiUwMmQ6JTAyZDolMDJkOiUwM2RcbiIsCisrICAgICAgICAgICAgICAgIGhvdXIsIG1pbiwgc2VjLCBtc2VjKTsKKysgICAgICAgICAgICBpZiAoZW5kX3RpbWUgPCB0bXApCisrICAgICAgICAgICAgICBlbmRfdGltZSA9IHRtcDsKKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAorKyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIHNzYSBlbmQgdGltZXN0YW1wIHN0cmluZyA6JXMiLCB0X3N0cik7CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICB9CisrCisrICAgICAgLyogbm93IHNraXAgYWxsIG5vbi10ZXh0IGZpZWxkcyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0ICovCisrICAgICAgZm9yIChpID0gMDsgaSA8PSA4OyArK2kpIHsKKysgICAgICAgIHQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgICBpZiAodCA9PSBOVUxMKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgICsrdDsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgLyogbGluZSBlbmQgYmVmb3JlIGV4cGVjdGVkIG51bWJlciBvZiAnLCcsIG5vdCBhIERpYWxvZ3VlIGxpbmUgKi8KKyAgICAgaWYgKHQgPT0gTlVMTCkKKy0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CistICAgICsrdDsKKysgICAgICBicmVhazsKKysKKysgICAgLyogaWYgbm90IHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHByZXZpb3VzIGxpbmUgaXMgJ1wwJywKKysgICAgICogdGhlbiByZXBsYWNlIGl0IHdpdGggJ1xOJyAqLworKyAgICBpZiAocCAhPSB0ZXh0ICYmICpwID09ICdcMCcpIHsKKysgICAgICAqcCsrID0gJ1xcJzsKKysgICAgICAqcCsrID0gJ04nOworKyAgICB9CisrCisrICAgIC8qIGNvcHkgYWxsIGFjdHVhbCB0ZXh0IG9mIHRoaXMgbGluZSAqLworKyAgICB3aGlsZSAoKCp0ICE9ICdcMCcpICYmICgqdCAhPSAnXG4nKSkKKysgICAgICAqcCsrID0gKnQrKzsKKysKKysgICAgLyogYWRkIGEgdGVybWluYXRvciBhdCB0aGUgZW5kICovCisrICAgICpwID0gJ1wwJzsKKysgIH0KKysKKysgIC8qIG5vdCB2YWxpZCB0ZXh0IGZvdW5kIGluIHRoaXMgYnVmZmVyIHJldHVybiBPSyB0byBsZXQgY2FsbGVyIHVucmVmIGJ1ZmZlciAqLworKyAgaWYgKHN0cmxlbih0ZXh0KSA8PSAwKSB7CisrICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJOb3QgdmFsaWQgdGV4dCBmb3VuZCBpbiB0aGlzIGJ1ZmZlclxuIik7CisrICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgIH0KKyAKKysgIHQgPSB0ZXh0OworICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiVGV4dCA6ICVzIiwgdCk7CisgCisgICBpZiAoZ3N0X3NzYV9wYXJzZV9yZW1vdmVfb3ZlcnJpZGVfY29kZXMgKHBhcnNlLCB0KSkgeworQEAgLTMwNywxMyArNDE0LDIyIEBAIGdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCwKKyAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBlc2NhcGVkLCBsZW4gKyAxKTsKKyAgIGdzdF9idWZmZXJfc2V0X3NpemUgKGJ1ZiwgbGVuKTsKKyAgIGdfZnJlZSAoZXNjYXBlZCk7CisrICBnX2ZyZWUodCk7CisrCisrICBpZiAoc3RhcnRfdGltZSAhPSBHX01BWFVJTlQ2NCkKKysgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBzdGFydF90aW1lOworKyAgZWxzZQorKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHN0YXJ0OworIAorLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBzdGFydDsKKy0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKKysgIGlmIChlbmRfdGltZSA+IHN0YXJ0X3RpbWUpCisrICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBlbmRfdGltZSAtIHN0YXJ0X3RpbWU7CisrICBlbHNlCisrICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKKyAKKyAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIlB1c2hpbmcgYnVmZmVyIHdpdGggdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVAorLSAgICAgICIgYW5kIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLAorLSAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7CisrICAgICAgIiBhbmQgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULAorKyAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSwKKysgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSk7CisgCisgICByZXQgPSBnc3RfcGFkX3B1c2ggKHBhcnNlLT5zcmNwYWQsIGJ1Zik7CisgCitAQCAtMzMzLDYgKzQ0OSw3IEBAIGdzdF9zc2FfcGFyc2VfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgR3N0Q2xvY2tUaW1lIHRzOworICAgZ2NoYXIgKnR4dDsKKyAgIEdzdE1hcEluZm8gbWFwOworKyAgZ2ludCBzaXplOworIAorICAgaWYgKEdfVU5MSUtFTFkgKCFwYXJzZS0+ZnJhbWVkKSkKKyAgICAgZ290byBub3RfZnJhbWVkOworQEAgLTM1MCwxMyArNDY3LDE0IEBAIGdzdF9zc2FfcGFyc2VfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgLyogbWFrZSBkb3VibGUtc3VyZSBpdCdzIDAtdGVybWluYXRlZCBhbmQgYWxsICovCisgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOworICAgdHh0ID0gZ19zdHJuZHVwICgoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplKTsKKysgIHNpemUgPSBtYXAuc2l6ZTsKKyAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7CisgCisgICBpZiAodHh0ID09IE5VTEwpCisgICAgIGdvdG8gZW1wdHlfdGV4dDsKKyAKKyAgIHRzID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7CistICByZXQgPSBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAocGFyc2UsIHR4dCwgdHMsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpOworKyAgcmV0ID0gZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKHBhcnNlLCB0eHQsIHNpemUsIHRzLCBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKTsKKyAKKyAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRzKSkgeworICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyYmYwNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSAzYTdjZGNkZmM5YzViMGQyMDM5NGZlNTFiM2I4Y2RhMjM5MzFjYTZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1NlYmFzdGlhbj0yMERyPUMzPUI2Z2U/PSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KK0RhdGU6IEZyaSwgMTIgU2VwIDIwMTQgMTQ6NDE6MDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIHZpZGVvZmlsdGVyOiBVc2UgbmV3IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MTE4CistLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYyB8ICAgMjMgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMKK2luZGV4IGUxZmEyYzEuLjg3NGIyZTggMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMKK0BAIC0yNjAsMjMgKzI2MCwxNSBAQCBnc3RfdmlkZW9fZmlsdGVyX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBpbmJ1ZiwKKyAgIGlmIChmY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSkgeworICAgICBHc3RWaWRlb0ZyYW1lIGluX2ZyYW1lLCBvdXRfZnJhbWU7CisgCistICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmluX2ZyYW1lLCAmZmlsdGVyLT5pbl9pbmZvLCBpbmJ1ZiwgR1NUX01BUF9SRUFEKSkKKysgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmaW5fZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGluYnVmLAorKyAgICAgICAgICAgIEdTVF9NQVBfUkVBRCB8IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpKQorICAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7CisgCisgICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJm91dF9mcmFtZSwgJmZpbHRlci0+b3V0X2luZm8sIG91dGJ1ZiwKKy0gICAgICAgICAgICBHU1RfTUFQX1dSSVRFKSkKKysgICAgICAgICAgICBHU1RfTUFQX1dSSVRFIHwgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikpCisgICAgICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKKyAKKy0gICAgLyogR3N0VmlkZW9GcmFtZSBoYXMgYW5vdGhlciByZWZlcmVuY2UsIHNvIHRoZSBidWZmZXIgbG9va3MgdW53cml0ZWFibGUsCistICAgICAqIG1lYW5pbmcgdGhhdCB3ZSBjYW4ndCBhdHRhY2ggYW55IG1ldGFzIG9yIGFueXRoaW5nIHRvIGl0LiBPdGhlcgorLSAgICAgKiBtYXAoKSBmdW5jdGlvbnMgbGlrZSBnc3RfYnVmZmVyX21hcCgpIGRvbid0IGdldCBhbm90aGVyIHJlZmVyZW5jZQorLSAgICAgKiBvZiB0aGUgYnVmZmVyIGFuZCBleHBlY3QgdGhlIGJ1ZmZlciByZWZlcmVuY2UgdG8gYmUga2VwdCB1bnRpbAorLSAgICAgKiB0aGUgYnVmZmVyIGlzIHVubWFwcGVkIGFnYWluLiAqLworLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7CistICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7CisgICAgIHJlcyA9IGZjbGFzcy0+dHJhbnNmb3JtX2ZyYW1lIChmaWx0ZXIsICZpbl9mcmFtZSwgJm91dF9mcmFtZSk7CistICAgIGdzdF9idWZmZXJfcmVmIChpbmJ1Zik7CistICAgIGdzdF9idWZmZXJfcmVmIChvdXRidWYpOworIAorICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZvdXRfZnJhbWUpOworICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZpbl9mcmFtZSk7CitAQCAtMzE3LDcgKzMwOSw3IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKKyAgICAgR3N0TWFwRmxhZ3MgZmxhZ3M7CisgCistICAgIGZsYWdzID0gR1NUX01BUF9SRUFEOworKyAgICBmbGFncyA9IEdTVF9NQVBfUkVBRCB8IEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUY7CisgCisgICAgIGlmICghZ3N0X2Jhc2VfdHJhbnNmb3JtX2lzX3Bhc3N0aHJvdWdoICh0cmFucykpCisgICAgICAgZmxhZ3MgfD0gR1NUX01BUF9XUklURTsKK0BAIC0zMjUsMTQgKzMxNyw3IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKKyAgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGJ1ZiwgZmxhZ3MpKQorICAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7CisgCistICAgIC8qIEdzdFZpZGVvRnJhbWUgaGFzIGFub3RoZXIgcmVmZXJlbmNlLCBzbyB0aGUgYnVmZmVyIGxvb2tzIHVud3JpdGVhYmxlLAorLSAgICAgKiBtZWFuaW5nIHRoYXQgd2UgY2FuJ3QgYXR0YWNoIGFueSBtZXRhcyBvciBhbnl0aGluZyB0byBpdC4gT3RoZXIKKy0gICAgICogbWFwKCkgZnVuY3Rpb25zIGxpa2UgZ3N0X2J1ZmZlcl9tYXAoKSBkb24ndCBnZXQgYW5vdGhlciByZWZlcmVuY2UKKy0gICAgICogb2YgdGhlIGJ1ZmZlciBhbmQgZXhwZWN0IHRoZSBidWZmZXIgcmVmZXJlbmNlIHRvIGJlIGtlcHQgdW50aWwKKy0gICAgICogdGhlIGJ1ZmZlciBpcyB1bm1hcHBlZCBhZ2Fpbi4gKi8KKy0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKyAgICAgcmVzID0gZmNsYXNzLT50cmFuc2Zvcm1fZnJhbWVfaXAgKGZpbHRlciwgJmZyYW1lKTsKKy0gICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7CisgCisgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKKyAgIH0gZWxzZSB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODEzOTE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSBlZDA5YzhmZDJjOWMyYjUzODRiNzJjYzcwYWYzNzI4YmU2Njk0ZTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE0OjIwOjI2ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNC80XSBzdWJwYXJzZTogc2V0IG5lZWRfc2VnbWVudCBhZnRlciBzaW5rIHBhZCByZWNlaXZlZAorIEdTVF9FVkVOVF9TRUdNRU5UCisKK3N1YnBhcnNlIHdvcmtzIGluIHB1c2ggbW9kZSwgY2hhaW4gZnVuY2l0b24gd2lsbCBiZSBjYWxsZWQgb25jZQordXAgc3RyZWFtIGVsZW1lbnQgZmluaXNoZWQgdGhlIHNlZWtpbmcgYW5kIGZsdXNoaW5nLgoraWYgc2V0IG5lZWRfc2VnbWVudCBmbGFnIGluIHNyYyBwYWQgZXZlbnQgaGFuZGxlciwgdGhlIHNlZ21lbnQKK2V2ZW50IHdpbGwgYmUgcHVzaGVkIGVhcmxpZXIsIHJlc3VsdCBpbiB0aGUgc3VidGl0bGUgdGV4dCB3aWxsCitiZSBzZW5kIG91dCB0byBkb3duIHN0cmVhbSBmcm9tIHRoZSBiZWdpbm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NDk4XQorCitTaWduZWQtb2ZmLWJ5OiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jIGIvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBiNTY1ZTkzLi43NzQxY2NjCistLS0gYS9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYworKysrIGIvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMKK0BAIC0yNjYsMjIgKzI2NiwyMCBAQCBnc3Rfc3ViX3BhcnNlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgICBnb3RvIGJlYWNoOworICAgICAgIH0KKyAKKysgICAgICAvKiBBcHBseSB0aGUgc2VlayB0byBvdXIgc2VnbWVudCAqLworKyAgICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWxmLT5zZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAorKyAgICAgICAgICBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKysKKysgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAic2VnbWVudCBhZnRlciBzZWVrOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisrICAgICAgICAgICZzZWxmLT5zZWdtZW50KTsKKysKKyAgICAgICAvKiBDb252ZXJ0IHRoYXQgc2VlayB0byBhIHNlZWtpbmcgaW4gYnl0ZXMgYXQgcG9zaXRpb24gMCwKKyAgICAgICAgICBGSVhNRTogY291bGQgdXNlIGFuIGluZGV4ICovCisgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zaW5rcGFkLAorICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZWsgKHJhdGUsIEdTVF9GT1JNQVRfQllURVMsIGZsYWdzLAorICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCkpOworIAorLSAgICAgIGlmIChyZXQpIHsKKy0gICAgICAgIC8qIEFwcGx5IHRoZSBzZWVrIHRvIG91ciBzZWdtZW50ICovCistICAgICAgICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2VsZi0+c2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKKy0gICAgICAgICAgICBzdGFydF90eXBlLCBzdGFydCwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKKy0KKy0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzZWdtZW50IGFmdGVyIHNlZWs6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKKy0gICAgICAgICAgICAmc2VsZi0+c2VnbWVudCk7CistCistICAgICAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBUUlVFOworLSAgICAgIH0gZWxzZSB7CisrICAgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgInNlZWsgdG8gMCBieXRlcyBmYWlsZWQiKTsKKyAgICAgICB9CisgCitAQCAtMTYzMiw4ICsxNjMwLDEwIEBAIGdzdF9zdWJfcGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmcyk7CisgICAgICAgaWYgKHMtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCisgICAgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlbGYtPnNlZ21lbnQpOworLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJuZXdzZWdtZW50ICglcykiLAorLSAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWxmLT5zZWdtZW50LmZvcm1hdCkpOworKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJuZXdzZWdtZW50ICglcykgJSIgR1NUX1NFR01FTlRfRk9STUFULAorKyAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWxmLT5zZWdtZW50LmZvcm1hdCksICZzZWxmLT5zZWdtZW50KTsKKysKKysgICAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBUUlVFOworIAorICAgICAgIC8qIGlmIG5vdCB0aW1lIGZvcm1hdCwgd2UnbGwgZWl0aGVyIHN0YXJ0IHdpdGggYSAwIHRpbWVzdGFtcCBhbnl3YXkgb3IKKyAgICAgICAgKiBpdCdzIGZvbGxvd2luZyBhIHNlZWsgaW4gd2hpY2ggY2FzZSB3ZSdsbCBoYXZlIHNhdmVkIHRoZSByZXF1ZXN0ZWQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50LWlmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTVkZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGI2MDhkMDI3ZmZmNmVmYzJkMTk4OGViZjE2OWNiZTNiMmI0NGE2MWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDggTWF5IDIwMTQgMTI6MDE6MTcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRU5HUjAwMzEyMDM0OiBkbyBub3QgY2hhbmdlIGVvcyBldmVudCB0byBnYXAgZXZlbnQgaWYgbm8KKyBkYXRhIGhhcyBwYXNzZWQgdG8gc3RyZWFtc3luY2hyb25pemVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MDc0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgfCAgICA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggMzk5N2QxYi4uM2UxN2M1NSAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDg4LDEyICs0ODgsMTEgQEAgZ3N0X3N0cmVhbV9zeW5jaHJvbml6ZXJfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgICAgICB9CisgICAgICAgICBnX3NsaXN0X2ZyZWUgKHBhZHMpOworICAgICAgIH0gZWxzZSB7CistICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBzb21ldGhpbmcgdG8gcmVwbGFjZSBFT1MKKy0gICAgICAgICAqIGZvciBwcmVyb2xsIHB1cnBvc2VzICovCisrICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBFT1MgZXZlbnQgKi8KKyAgICAgICAgIGlmICghc2Vlbl9kYXRhKSB7CisgICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CisgCistICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZ2FwICh0aW1lc3RhbXAsIEdTVF9DTE9DS19USU1FX05PTkUpOworKyAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKyAgICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMjRiYzdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK2NvbW1pdCBmOTUzNjU0NGY1YWQxODJiNGY3OGQwMTQzZDFkYWE0NWRkNjRlNjI0CitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgOSAxNzozNzo0MyAyMDE0ICswODAwCisKK1tnc3RzdHJlYW1zeW5jaHJvbml6ZXJdIHNlbmQgRU9TIGV2ZW50IGluc3RlcmQgb2YgR0FQIGV2ZW50IGFzIEdBUAorZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUgZGlmZmVyZW50IGR1cmF0aW9uLgorICAgIAorc2VuZCBFT1MgZXZlbnQgaW5zdGVyZCBvZiBHQVAgZXZlbnQgYXMgR0FQIGV2ZW50IGhhcyBpc3N1ZSB3aGVuIEEvViBoYXZlIGRpZmZlcmVudCBkdXJhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY2NTVdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK2luZGV4IDNlMTdjNTUuLmZmNDJkNzIgMTAwNjQ0CistLS0gYS9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKKysrKyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworQEAgLTQ4OCwxOSArNDg4LDI0IEBAIGdzdF9zdHJlYW1fc3luY2hyb25pemVyX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAorICAgICAgICAgfQorICAgICAgICAgZ19zbGlzdF9mcmVlIChwYWRzKTsKKyAgICAgICB9IGVsc2UgeworLSAgICAgICAgLyogaWYgRU9TLCBidXQgbm8gZGF0YSBoYXMgcGFzc2VkLCB0aGVuIHNlbmQgRU9TIGV2ZW50ICovCisrICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBzb21ldGhpbmcgdG8gcmVwbGFjZSBFT1MKKysgICAgICAgICAqIGZvciBwcmVyb2xsIHB1cnBvc2VzICovCisgICAgICAgICBpZiAoIXNlZW5fZGF0YSkgeworLSAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworKyAgICAgICAgICBHc3RFdmVudCAqZW9zX2V2ZW50OworIAorLSAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKy0gICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisrICAgICAgICAgIC8qIEZJWE1FOiBjaGFuZ2UgdG8gRU9TIGV2ZW50IGFzIEdBUCBldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZQorKyAgICAgICAgICAgKiBkaWZmZXJlbnQgZHVyYXRpb24gKi8KKysgICAgICAgICAgZW9zX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisrICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBlb3NfZXZlbnQpOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgR3N0RXZlbnQgKmdhcF9ldmVudDsKKysgICAgICAgICAgR3N0RXZlbnQgKmVvc19ldmVudDsKKyAKKyAgICAgICAgICAgLyogRklYTUU6IEFsc28gc2VuZCBhIEdBUCBldmVudCB0byBsZXQgYXVkaW8gc2lua3Mgc3RhcnQgdGhlaXIKKyAgICAgICAgICAgICogY2xvY2sgaW4gY2FzZSB0aGV5IGRpZCBub3QgaGF2ZSBlbm91Z2ggZGF0YSB5ZXQgKi8KKy0gICAgICAgICAgZ2FwX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19nYXAgKHRpbWVzdGFtcCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CistICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnYXBfZXZlbnQpOworKyAgICAgICAgICAvKiBGSVhNRTogY2hhbmdlIHRvIEVPUyBldmVudCBhcyBHQVAgZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUKKysgICAgICAgICAgICogZGlmZmVyZW50IGR1cmF0aW9uICovCisrICAgICAgICAgIGVvc19ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworKyAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZW9zX2V2ZW50KTsKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzFiZTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9kby1ub3QtY2hhbmdlLWVvcy1ldmVudC10by1nYXAtZXZlbnQzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2NvbW1pdCAzZjcwNTJhYWM1ZTAxMThhOWE5ZTA5ZmZmMmY2NTA5MWJlNDQ4OTcyCitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgMjMgMTM6MzU6MTMgMjAxNCArMDgwMAorCitbc3RyZWFtc3luY2hyb25pemVyXSBPbmUgc3RyZWFtIGNhbiBmaW5pc2ggcGxheWJhY2suCisgIAorQXMgY2hhbmdlZCBHQVAgZXZlbnQgRU9TIGV2ZW50LCBzbyBFT1Mgd2lsbCBzZW5kIG1vcmUgdGltZXMsIHdoaWNoIHdpbGwKK2NhdXNlIHNlbmQgZnVuY3Rpb24gcmV0dXJuIGVycm9yLgorU3RyZWFtc3luY2hyb25pemVyIHdpbGwgZG9u4oCZdCBzZW5kIHNlY29uZCB0cmFjayBFT1MgZXZlbnQgaWYgc2VuZCB0aGUKK2ZpcnN0IHRyYWNrIEVPUyByZXR1cm4gZmFpbC4gRml4ZWQgYnkgaWdub3JlIHRoZSByZXR1cm4gZXJyb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NjU1XQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgYjA2NDk4QGZyZWVzY2FsZS5jb20KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggZmY0MmQ3Mi4uZDE3MzJjMyAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDgyLDcgKzQ4MiwxMCBAQCBnc3Rfc3RyZWFtX3N5bmNocm9uaXplcl9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKKyAgICAgICAgIHdoaWxlIChlcGFkKSB7CisgICAgICAgICAgIHBhZCA9IGVwYWQtPmRhdGE7CisgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlB1c2hpbmcgRU9TIik7CistICAgICAgICAgIHJldCA9IHJldCAmJiBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOworKyAgICAgICAgICAvKiBGSVhNRTogcmVtb3ZlIGVycm9yIGNoZWNrIGFzIEdBUCBjaGFuZ2VkIHRvIEVPUyB3aWxsIHNlbmQgRU9TCisrICAgICAgICAgICAqIG1vcmUgdGltZXMsIHdoaWNoIHdpbGwgY2F1c2UgcmV0dXJuIGVycm9yIGFuZCB0aGVuIGRvbid0IHNlbmQKKysgICAgICAgICAgICogRU9TIGV2ZW50IHRvIGZvbGxvd2luZyB0cmFja3MuICovCisrICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7CisgICAgICAgICAgIGVwYWQgPSBnX3NsaXN0X25leHQgKGVwYWQpOworICAgICAgICAgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTY3MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA1NDBlMDJjOTJjNzVlMDhiOTAzMjY4NjNkYzc4N2ZhNWNhZGY5ZGE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IEZyaSwgMTMgTWFyIDIwMTUgMTg6MDQ6MzEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZW5jb2RlYmluOiBOZWVkIG1vcmUgYnVmZmVycyBpbiBvdXRwdXQgcXVldWUgZm9yIGJldHRlcgorIHBlcmZvcm1hbmNlCisKK05lZWQgbW9yZSBidWZmZXJzIGluIG91dHB1dCBxdWV1ZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTkxXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorLS0tCisgZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jIHwgICAgMyArLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMgYi9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKK2luZGV4IDY3MjhlNTguLjMyZGFhZTQgMTAwNjQ0CistLS0gYS9nc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMKKysrKyBiL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYworQEAgLTExMzgsOCArMTEzOCw3IEBAIF9jcmVhdGVfc3RyZWFtX2dyb3VwIChHc3RFbmNvZGVCaW4gKiBlYmluLCBHc3RFbmNvZGluZ1Byb2ZpbGUgKiBzcHJvZiwKKyAgICAqIFdlIG9ubHkgdXNlIGEgMWJ1ZmZlciBsb25nIHF1ZXVlIGhlcmUsIHRoZSBhY3R1YWwgcXVldWVpbmcgd2lsbCBiZSBkb25lCisgICAgKiBpbiB0aGUgaW5wdXQgcXVldWUgKi8KKyAgIGxhc3QgPSBzZ3JvdXAtPm91dHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKKy0gIGdfb2JqZWN0X3NldCAoc2dyb3VwLT5vdXRxdWV1ZSwgIm1heC1zaXplLWJ1ZmZlcnMiLCAoZ3VpbnQzMikgMSwKKy0gICAgICAibWF4LXNpemUtYnl0ZXMiLCAoZ3VpbnQzMikgMCwgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKKysgIGdfb2JqZWN0X3NldCAoc2dyb3VwLT5vdXRxdWV1ZSwgIm1heC1zaXplLXRpbWUiLCAoZ3VpbnQ2NCkgMCwKKyAgICAgICAic2lsZW50IiwgVFJVRSwgTlVMTCk7CisgCisgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoZWJpbiksIHNncm91cC0+b3V0cXVldWUpOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmM2Y3NWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2ZpeC1pZDNkZW11eC11dGYxNi10by11dGY4LWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0F1dGhvcjogTHlvbiBXYW5nIDxiMTI2OTZAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCA5IDE3OjM3OjQzIDIwMTQgKzA4MDAKKworW2lkM3YyZnJhbWVzXSBCdWcgZml4IGZvciBpZDNkZW11eCBpc3N1ZQorCitGaXggdGhlIGlzc3VlIHRoYXQgaWQzIHRhZ3MgdXRmMTYgY2hhcmF0ZXJzIGNhbm5vdCBiZSBleHRyZWFjdGVkIGluIGlkM2RlbXV4Cit3aGVuIEkgdHJpZWQgdG8gZ2V0IHRoZSBpZDN2MiB0YWcgc3VjaCBhcyBUSVQyLCBUQUxCIGV0Yy4gaXQgd2lsbCByZXR1cm4gZXh0cmFjCitmYWlsZWQuCisKK0NoZWNrZWQgaW4gaWQzdjJmcmFtZS5jLCAgV2hlbiBwYXJzZSB0aGUgVVRGLTE2IHN0cmVhbXMsIGl0IHVzZWQgZ19jb252ZXJ0KCkgdG8KK2NvbnZlcnQgdGhlIGJ1ZmZlciBmcm9tIFVURi0xNiB0byBVVEYtOCwgaG93ZXZlciBpdCB3aWxsIHJldHVybiBlcnIgdGhhdCB0aGlzCitjb252ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2hpY2ggY2F1c2UgdGhlIGV4dHJhY3Rpb24gZmFpbGVkIHdpdGggdGhlc2UgVVRGLTE2CitjaGFyYWN0ZXJzLgorCitJbiB0aGUgcGF0Y2gsIHVzZSBnX3V0ZjE2X3RvX3V0ZjgoKSBpbnN0ZWFkIG9mIGdfY29udmVydCwgd2hpY2ggY2FuIGNvbnZlcnQgdGhlCitjaGFyYWN0ZXIgZm9ybWF0IHN1Y2Nlc3NmdWxseS4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTE0NAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogTHlvbiBXYW5nIDxiMTI2OTZAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYyBiL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDM3ODVjMmEuLjdiOWQ4YWMKKy0tLSBhL2dzdC1saWJzL2dzdC90YWcvaWQzdjJmcmFtZXMuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jCitAQCAtMTA1NywxNCArMTA1NywxNyBAQCBwYXJzZV9pbnNlcnRfc3RyaW5nX2ZpZWxkIChndWludDggZW5jb2RpbmcsIGdjaGFyICogZGF0YSwgZ2ludCBkYXRhX3NpemUsCisgICAgICAgICBkYXRhX3NpemUgLT0gMjsKKyAgICAgICB9CisgCistICAgICAgZmllbGQgPSBnX2NvbnZlcnQgKGRhdGEsIGRhdGFfc2l6ZSwgIlVURi04IiwgaW5fZW5jb2RlLCBOVUxMLCBOVUxMLCBOVUxMKTsKKy0KKy0gICAgICBpZiAoZmllbGQgPT0gTlVMTCB8fCBnX3V0ZjhfdmFsaWRhdGUgKGZpZWxkLCAtMSwgTlVMTCkgPT0gRkFMU0UpIHsKKy0gICAgICAgIC8qIEFzIGEgZmFsbGJhY2ssIHRyeSBpbnRlcnByZXRpbmcgVVRGLTE2IGluIHRoZSBvdGhlciBlbmRpYW5uZXNzICovCistICAgICAgICBpZiAoaW5fZW5jb2RlID09IHV0ZjE2YmVlbmMpCistICAgICAgICAgIGZpZWxkID0gZ19jb252ZXJ0IChkYXRhLCBkYXRhX3NpemUsICJVVEYtOCIsIHV0ZjE2bGVlbmMsCistICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgICBpZiAoaW5fZW5jb2RlID09IHV0ZjE2YmVlbmMpIHsKKysgICAgICAgICAgIGd1bmljaGFyMiAqZGF0YV91dGYxNjsKKysgICAgICAgICAgIGd1aW50IGk7CisrICAgICAgICAgICBkYXRhX3V0ZjE2ID0gIChndW5pY2hhcjIgKikgZGF0YTsKKysgICAgICAgICAgZm9yIChpPTA7IGk8KGRhdGFfc2l6ZT4+MSk7IGkrKykgeworKyAgICAgICAgICAgIGRhdGFfdXRmMTZbaV0gPSBHVUlOVDE2X1RPX0xFIChkYXRhX3V0ZjE2W2ldKTsKKysgICAgICAgICAgfQorICAgICAgIH0KKysgICAgICAvL2ZpZWxkID0gZ19jb252ZXJ0IChkYXRhLCBkYXRhX3NpemUsICJVVEYtOCIsIGluX2VuY29kZSwgTlVMTCwgTlVMTCwgTlVMTCk7CisrICAgICAgIGZpZWxkID0gZ191dGYxNl90b191dGY4KChndW5pY2hhcjIgKilkYXRhLCAoZ2xvbmcpKGRhdGFfc2l6ZT4+MSksIE5VTEwsIE5VTEwsIE5VTEwpOworKworICAgICB9CisgCisgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0YWJiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGFmMGRhYzI2ZjYyYWFjZWI0YmYyNjY3MjA5MTE5NTM3OTNlMGZjNWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDE0IE1heSAyMDE0IDEwOjE2OjIwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEVOR1IwMDMxMjUxNTogZ2V0IGNhcHMgZnJvbSBzcmMgcGFkIHdoZW4gcXVlcnkgY2FwcworCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzEyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB6aG91bWluZyA8YjQyNTg2QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMgYi9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCA5YjZjNDc4Li5hZTIyOTRhCistLS0gYS9nc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKKysrKyBiL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworQEAgLTE3MDgsNiArMTcwOCwxOSBAQCBnc3RfdGFnX2RlbXV4X3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCisgICAgICAgfQorICAgICAgIGJyZWFrOworICAgICB9CisrICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6CisrICAgIHsKKysKKysgICAgICAvKiBXZSBjYW4gaGlqYWNrIGNhcHMgcXVlcnkgaWYgd2UgdHlwZWZpbmQgYWxyZWFkeSAqLworKyAgICAgIGlmIChkZW11eC0+cHJpdi0+c3JjX2NhcHMpIHsKKysgICAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBkZW11eC0+cHJpdi0+c3JjX2NhcHMpOworKyAgICAgICAgcmVzID0gVFJVRTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKworICAgICBkZWZhdWx0OgorICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKKyAgICAgICBicmVhazsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzNjZTcyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9oYW5kbGUtYXVkaW8tdmlkZW8tZGVjb2Rlci1lcnJvci5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGJjYjJiOGI2ZjQ5ZTdjNjYxMjRhNGY1ZTA3ZGVhODI5ZDVlYmZlNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMeW9uIFdhbmcgPGx5b24ud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCAxNSBEZWMgMjAxNCAxNjo1MjowNyArMDgwMAorU3ViamVjdDogW1BBVENIXSBoYW5kbGUgYXVkaW8vdmlkZW8gZGVjb2RlciBlcnJvcgorCitXaGVuIHRoZXJlIGlzIGlucHV0IGRhdGEgYW5kIG5vIG91dHB1dCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaXQgd2lsbAorc2VuZCBHU1RfRUxFTUVOVF9FUlJPUiwgU28gdGhlIGNsaXBzIHBsYXlpbmcgd2lsbCBxdWl0LgorSG93ZXZlciwgaWYgb25seSBvbmUgb2YgdGhlIHRyYWNrcyBpcyBjb3JydXB0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHF1aXQgb3RoZXIKK3RyYWNrcyBwbGF5aW5nLgorCitUaGUgcGF0Y2ggY29tbWVudHMgdGhlIEdTVF9FTEVNRU5UX0VSUk9SKCkgYW5kIGp1c3QgYWRkIEdTVF9FUlJPUl9PQkpFQ1QoKQoraW5mb3JtYXRpb24gaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDE1NDJdCisKK1NpZ25lZC1vZmYtYnk6IEx5b24gV2FuZyA8bHlvbi53YW5nQGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgfCAgICA1ICsrKy0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIHwgICAgNSArKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGMyZTdhMjguLjg5MWRmMGEKKy0tLSBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitAQCAtMjEyMyw5ICsyMTIzLDEwIEBAIGdzdF9hdWRpb19kZWNvZGVyX3NpbmtfZXZlbnRmdW5jIChHc3RBdWRpb0RlY29kZXIgKiBkZWMsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgR1NUX0FVRElPX0RFQ09ERVJfU1RSRUFNX1VOTE9DSyAoZGVjKTsKKyAKKyAgICAgICBpZiAoZGVjLT5wcml2LT5jdHguaGFkX2lucHV0X2RhdGEgJiYgIWRlYy0+cHJpdi0+Y3R4LmhhZF9vdXRwdXRfZGF0YSkgeworLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlYywgU1RSRUFNLCBERUNPREUsCisrICAgICAgICAvKiBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBTVFJFQU0sIERFQ09ERSwKKyAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIiksCistICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7CisrICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7ICovCisrICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGRlYywgIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIik7CisgICAgICAgfQorIAorICAgICAgIC8qIHNlbmQgdGFnbGlzdCBpZiBubyB2YWxpZCBmcmFtZSBpcyBkZWNvZGVkIHV0aWwgRU9TICovCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggYWM1ODFlMS4uNDI3OGJjZAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK0BAIC0xMDY4LDkgKzEwNjgsMTAgQEAgZ3N0X3ZpZGVvX2RlY29kZXJfc2lua19ldmVudF9kZWZhdWx0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLAorIAorICAgICAgIC8qIEVycm9yIG91dCBldmVuIGlmIEVPUyB3YXMgb2sgd2hlbiB3ZSBoYWQgaW5wdXQsIGJ1dCBubyBvdXRwdXQgKi8KKyAgICAgICBpZiAocmV0ICYmIHByaXYtPmhhZF9pbnB1dF9kYXRhICYmICFwcml2LT5oYWRfb3V0cHV0X2RhdGEpIHsKKy0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZWNvZGVyLCBTVFJFQU0sIERFQ09ERSwKKysgICAgICAgIC8qIEdTVF9FTEVNRU5UX0VSUk9SIChkZWNvZGVyLCBTVFJFQU0sIERFQ09ERSwKKyAgICAgICAgICAgICAoIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIiksCistICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7CisrICAgICAgICAgICAgKCJubyB2YWxpZCBmcmFtZXMgZm91bmQiKSk7ICovCisrICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGRlY29kZXIsICJObyB2YWxpZCBmcmFtZXMgZGVjb2RlZCBiZWZvcmUgZW5kIG9mIHN0cmVhbSIpOworICAgICAgIH0KKyAKKyAgICAgICAvKiBGb3J3YXJkIEVPUyBpbW1lZGlhdGVseS4gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIG5vCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYTUyYjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3RhZ2xpc3Qtbm90LXNlbmQtdG8tZG93bi1zdHJlYW0taWYtYWxsLXRoZS1mcmFtZS1jb3IucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA2OGZhMWIxNDI1YWQyYzVmN2M1MDEzZDA5NDMxNTNhOGE2ZDA5MzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlhbiBMaSA8bGoucWZ5LnNoQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjQgU2VwIDIwMTQgMTc6MjE6MDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGFnbGlzdCBub3Qgc2VuZCB0byBkb3duIHN0cmVhbSBpZiBhbGwgdGhlIGZyYW1lIGNvcnJ1cHRlZAorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MjQ2CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKaWFuIExpIDxsai5xZnkuc2hAZ21haWwuY29tPgorLS0tCisgZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jIHwgICAgOSArKysrKysrKysKKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKK2luZGV4IDM1MDQ2NzguLjNkNjllZmUgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworQEAgLTIwODMsNiArMjA4MywxNSBAQCBnc3RfYXVkaW9fZGVjb2Rlcl9zaW5rX2V2ZW50ZnVuYyAoR3N0QXVkaW9EZWNvZGVyICogZGVjLCBHc3RFdmVudCAqIGV2ZW50KQorICAgICAgIGdzdF9hdWRpb19kZWNvZGVyX2RyYWluIChkZWMpOworICAgICAgIEdTVF9BVURJT19ERUNPREVSX1NUUkVBTV9VTkxPQ0sgKGRlYyk7CisgCisrICAgICAgLyogc2VuZCB0YWdsaXN0IGlmIG5vIHZhbGlkIGZyYW1lIGlzIGRlY29kZWQgdXRpbCBFT1MgKi8KKysgICAgICBpZiAoZGVjLT5wcml2LT50YWdsaXN0ICYmIGRlYy0+cHJpdi0+dGFnbGlzdF9jaGFuZ2VkKSB7CisrICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJjb2RlYyB0YWcgJSIgR1NUX1BUUl9GT1JNQVQsIGRlYy0+cHJpdi0+dGFnbGlzdCk7CisrICAgICAgICBpZiAoIWdzdF90YWdfbGlzdF9pc19lbXB0eSAoZGVjLT5wcml2LT50YWdsaXN0KSkKKysgICAgICAgICAgZ3N0X2F1ZGlvX2RlY29kZXJfcHVzaF9ldmVudCAoZGVjLAorKyAgICAgICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9yZWYgKGRlYy0+cHJpdi0+dGFnbGlzdCkpKTsKKysgICAgICAgIGRlYy0+cHJpdi0+dGFnbGlzdF9jaGFuZ2VkID0gRkFMU0U7CisrICAgICAgfQorKworICAgICAgIC8qIEZvcndhcmQgRU9TIGJlY2F1c2Ugbm8gYnVmZmVyIG9yIHNlcmlhbGl6ZWQgZXZlbnQgd2lsbCBjb21lIGFmdGVyCisgICAgICAgICogRU9TIGFuZCBub3RoaW5nIGNvdWxkIHRyaWdnZXIgYW5vdGhlciBfZmluaXNoX2ZyYW1lKCkgY2FsbC4gKi8KKyAgICAgICByZXQgPSBnc3RfYXVkaW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWMsIGV2ZW50KTsKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK2luZGV4IGRkOGFiZTMuLmQ5YmZlNGQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworQEAgLTEwMjQsNiArMTAyNCwxNCBAQCBnc3RfdmlkZW9fZGVjb2Rlcl9zaW5rX2V2ZW50X2RlZmF1bHQgKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIsCisgICAgICAgICogcGFyZW50IGNsYXNzJyA6OnNpbmtfZXZlbnQoKSB1bnRpbCBhIGxhdGVyIHRpbWUuCisgICAgICAgICovCisgICAgICAgZm9yd2FyZF9pbW1lZGlhdGUgPSBUUlVFOworKworKyAgICAgIC8qIHNlbmQgdGFnbGlzdCBpZiBubyB2YWxpZCBmcmFtZSBpcyBkZWNvZGVkIHV0aWwgRU9TICovCisrICAgICAgaWYgKGRlY29kZXItPnByaXYtPnRhZ3MgJiYgZGVjb2Rlci0+cHJpdi0+dGFnc19jaGFuZ2VkKSB7CisrICAgICAgICBnc3RfdmlkZW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWNvZGVyLAorKyAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfcmVmIChkZWNvZGVyLT5wcml2LT50YWdzKSkpOworKyAgICAgICAgZGVjb2Rlci0+cHJpdi0+dGFnc19jaGFuZ2VkID0gRkFMU0U7CisrICAgICAgfQorKworICAgICAgIGJyZWFrOworICAgICB9CisgICAgIGNhc2UgR1NUX0VWRU5UX0dBUDoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44Y2ZkYTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDUzIEBACitjb21taXQgODhkMjUzZWEyM2IwNjI4OWRmNDA0MDExNjBiNjA2MzIzZjE2YzkxMAorQXV0aG9yOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gRGVjIDE1IDA5OjM0OjM1IDIwMTQgKzA4MDAKKwordmlkZW9wb29sOiB1cGRhdGUgdmlkZW8gYWxpZ25tZW50IGFmdGVyIHZpZGVvIGFsaWdubWVudAorCitWaWRlbyBidWZmZXIgcG9vbCB3aWxsIHVwZGF0ZSB2aWRlbyBhbGlnbm1lbnQgdG8gcmVzcGVjdCBzdHJpZGUgYWxpZ25tZW50CityZXF1aXJlbWVudC4gQnV0IGhhdmVuJ3QgdXBkYXRlIGl0IHRvIHZpZGVvIGFsaWdubWVudCBpbiBjb25maWd1cmUuCitXaGljaCB3aWxsIGNhdXNlIHVzZXIgZ2V0IHdyb25nIHZpZGVvIGFsaWdubWVudC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTUwMQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMKK2luZGV4IDQ0NzVmNDUuLmFjZWY1OTQgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYworQEAgLTE2Nyw2ICsxNjcsNyBAQCB2aWRlb19idWZmZXJfcG9vbF9zZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQorICAgICAvKiBnZXQgYW4gYXBwbHkgdGhlIGFsaWdubWVudCB0byB0aGUgaW5mbyAqLworICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPnZpZGVvX2FsaWduKTsKKyAgICAgZ3N0X3ZpZGVvX2luZm9fYWxpZ24gKCZpbmZvLCAmcHJpdi0+dmlkZW9fYWxpZ24pOworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPnZpZGVvX2FsaWduKTsKKyAgIH0KKyAgIHByaXYtPmluZm8gPSBpbmZvOworCitkaWZmIC0tZ2l0IGEvc3lzL3hpbWFnZS94aW1hZ2Vwb29sLmMgYi9zeXMveGltYWdlL3hpbWFnZXBvb2wuYworaW5kZXggNmNjMmNmYS4uNmExY2JjOSAxMDA2NDQKKy0tLSBhL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jCisrKysgYi9zeXMveGltYWdlL3hpbWFnZXBvb2wuYworQEAgLTU5Nyw2ICs1OTcsOCBAQCB4aW1hZ2VfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKKyAgICAgLyogZG8gcGFkZGluZyBhbmQgYWxpZ25tZW50ICovCisgICAgIGdzdF92aWRlb19pbmZvX2FsaWduICgmaW5mbywgJnByaXYtPmFsaWduKTsKKworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPmFsaWduKTsKKysKKyAgICAgLyogd2UgbmVlZCB0aGUgdmlkZW8gbWV0YWRhdGEgdG9vIG5vdyAqLworICAgICBwcml2LT5hZGRfbWV0YXZpZGVvID0gVFJVRTsKKyAgIH0gZWxzZSB7CitkaWZmIC0tZ2l0IGEvc3lzL3h2aW1hZ2UveHZpbWFnZXBvb2wuYyBiL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMKK2luZGV4IDI0NGE1MWEuLjM0YjFhYjIgMTAwNjQ0CistLS0gYS9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jCisrKysgYi9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jCitAQCAtMTI0LDYgKzEyNCw4IEBAIHh2aW1hZ2VfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR3N0QnVmZmVyUG9vbCAqIHBvb2wsIEdzdFN0cnVjdHVyZSAqIGNvbmZpZykKKyAgICAgLyogZG8gcGFkZGluZyBhbmQgYWxpZ25tZW50ICovCisgICAgIGdzdF92aWRlb19pbmZvX2FsaWduICgmaW5mbywgJnByaXYtPmFsaWduKTsKKworKyAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF92aWRlb19hbGlnbm1lbnQgKGNvbmZpZywgJnByaXYtPmFsaWduKTsKKysKKyAgICAgLyogd2UgbmVlZCB0aGUgdmlkZW8gbWV0YWRhdGEgdG9vIG5vdyAqLworICAgICBwcml2LT5hZGRfbWV0YXZpZGVvID0gVFJVRTsKKyAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9lbmNvZGVyLUtlZXAtc3RpY2t5LWV2ZW50cy1hcm91bmQtd2hlbi1kb2luZy1hLXNvZnQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NzY5NjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGMzZjdkMzZiOTkyYTNjYmNlZTMzODZkZWE4NTcyMGYzY2IwNGUxZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogRnJpLCAyNyBNYXIgMjAxNSAxMzozOTo0MyArMDgwMAorU3ViamVjdDogW1BBVENIXSB2aWRlb2VuY29kZXI6IEtlZXAgc3RpY2t5IGV2ZW50cyBhcm91bmQgd2hlbiBkb2luZyBhIHNvZnQKKyByZXNldAorCitUaGUgY3VycmVudCBjb2RlIHdpbGwgZmlyc3QgZGlzY2FyZCBhbGwgZnJhbWVzLCBhbmQgdGhlbiB0cmllcyB0byBjb3B5CithbGwgc3RpY2t5IGV2ZW50cyBmcm9tIHRoZSAobm93IGRpc2NhcmRlZCkgZnJhbWVzLiBMZXQncyBjaGFuZ2UgdGhlIG9yZGVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2ODY1CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgCisKKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYyB8ICAgIDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jCitpbmRleCA2MTRiYTJkLi40YzViMTExIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMKK0BAIC0zNDAsMTAgKzM0MCw2IEBAIGdzdF92aWRlb19lbmNvZGVyX3Jlc2V0IChHc3RWaWRlb0VuY29kZXIgKiBlbmNvZGVyLCBnYm9vbGVhbiBoYXJkKQorIAorICAgcHJpdi0+ZHJhaW5lZCA9IFRSVUU7CisgCistICBnX2xpc3RfZm9yZWFjaCAocHJpdi0+ZnJhbWVzLCAoR0Z1bmMpIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiwgTlVMTCk7CistICBnX2xpc3RfZnJlZSAocHJpdi0+ZnJhbWVzKTsKKy0gIHByaXYtPmZyYW1lcyA9IE5VTEw7CistCisgICBwcml2LT5ieXRlcyA9IDA7CisgICBwcml2LT50aW1lID0gMDsKKyAKK0BAIC0zOTIsNiArMzg4LDEwIEBAIGdzdF92aWRlb19lbmNvZGVyX3Jlc2V0IChHc3RWaWRlb0VuY29kZXIgKiBlbmNvZGVyLCBnYm9vbGVhbiBoYXJkKQorICAgICAgICAgZW5jb2Rlci0+cHJpdi0+Y3VycmVudF9mcmFtZV9ldmVudHMpOworICAgfQorIAorKyAgZ19saXN0X2ZvcmVhY2ggKHByaXYtPmZyYW1lcywgKEdGdW5jKSBnc3RfdmlkZW9fY29kZWNfZnJhbWVfdW5yZWYsIE5VTEwpOworKyAgZ19saXN0X2ZyZWUgKHByaXYtPmZyYW1lcyk7CisrICBwcml2LT5mcmFtZXMgPSBOVUxMOworKworICAgR1NUX1ZJREVPX0VOQ09ERVJfU1RSRUFNX1VOTE9DSyAoZW5jb2Rlcik7CisgCisgICByZXR1cm4gcmV0OworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWMyY2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlXzEuNC41LmJiCkBAIC0wLDAgKzEsMzAgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSArPSAiZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ2V0LWNhcHMtZnJvbS1zcmMtcGFkLXdoZW4tcXVlcnktY2Fwcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly92aWRlb2J1ZmZlcl91cGRhdGFfYWxpZ25tZW50X3VwZGF0ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS12aWRlby1mcmFtZS1Eb24tdC1yZWYtYnVmZmVycy10d2ljZS13aGVuLW1hcHBpbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtdmlkZW9maWx0ZXItVXNlLW5ldy1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly92aWRlb2VuY29kZXItS2VlcC1zdGlja3ktZXZlbnRzLWFyb3VuZC13aGVuLWRvaW5nLWEtc29mdC0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNC1zdWJwYXJzZS1zZXQtbmVlZF9zZWdtZW50LWFmdGVyLXNpbmstcGFkLXJlY2VpdmVkLUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjM1NzE2NWFmNjI1YzBjYTM1M2FiNDdjNWQ4NDM5MjBlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc3YmQ4MTk5ZTdhMzEyZDNkNzFkZTliN2RkZjc2MWEzYjc4NTYwYTJjMmE4MDgyOWQwODE1Y2EzOWNiZDU1MWQiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYXNlLSR7UFZ9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmUzYTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKQEAgLTAsMCArMSwxOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM1NGNlOTM0NTcyNzE3NWZmNjZkMTdiNjdmZjUxZjU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICI4ZDRjYjY0YTRiOWQ4NGIxMDA3NmJmMzUwZjgwYTBkNmVhNjhlYzJkIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMTZkZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCkBAIC0wLDAgKzEsNTcgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorCisjIGxpYmlkM3RhZworREVQRU5EUyArPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSB6bGliIGJ6aXAyIGxpYmNhcCIKKworaW5oZXJpdCBnZXR0ZXh0CisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IFwKKyAgICBvcmMgY2Fpcm8gZmxhYyBnZGstcGl4YnVmIGd1ZGV2IGpwZWcgbGlicG5nIHNvdXAgc3BlZXggdGFnbGliIFwKKyAgICAiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20gbGlieHJlbmRlciBsaWJ4Zml4ZXMgbGlieGRhbWFnZSIKK1gxMUVOQUJMRU9QVFMgPSAiLS1lbmFibGUteCAtLWVuYWJsZS14c2htIgorWDExRElTQUJMRU9QVFMgPSAiLS1kaXNhYmxlLXggLS1kaXNhYmxlLXhzaG0iCitQQUNLQUdFQ09ORklHW3gxMV0gICAgICAgID0gIiR7WDExRU5BQkxFT1BUU30sJHtYMTFESVNBQkxFT1BUU30sJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2UsLS1kaXNhYmxlLXB1bHNlLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW2NhaXJvXSAgICAgID0gIi0tZW5hYmxlLWNhaXJvLC0tZGlzYWJsZS1jYWlybyxjYWlybyIKK1BBQ0tBR0VDT05GSUdbZmxhY10gICAgICAgPSAiLS1lbmFibGUtZmxhYywtLWRpc2FibGUtZmxhYyxmbGFjIgorUEFDS0FHRUNPTkZJR1tnZGstcGl4YnVmXSA9ICItLWVuYWJsZS1nZGtfcGl4YnVmLC0tZGlzYWJsZS1nZGtfcGl4YnVmLGdkay1waXhidWYiCitQQUNLQUdFQ09ORklHW2d1ZGV2XSAgICAgID0gIi0td2l0aC1ndWRldiwtLXdpdGhvdXQtZ3VkZXYsdWRldiIKK1BBQ0tBR0VDT05GSUdbamFja10gICAgICAgPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgorUEFDS0FHRUNPTkZJR1tqcGVnXSAgICAgICA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW2xpYnBuZ10gICAgID0gIi0tZW5hYmxlLWxpYnBuZywtLWRpc2FibGUtbGlicG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbc291cF0gICAgICAgPSAiLS1lbmFibGUtc291cCwtLWRpc2FibGUtc291cCxsaWJzb3VwLTIuNCIKK1BBQ0tBR0VDT05GSUdbc3BlZXhdICAgICAgPSAiLS1lbmFibGUtc3BlZXgsLS1kaXNhYmxlLXNwZWV4LHNwZWV4IgorUEFDS0FHRUNPTkZJR1t0YWdsaWJdICAgICA9ICItLWVuYWJsZS10YWdsaWIsLS1kaXNhYmxlLXRhZ2xpYix0YWdsaWIiCitQQUNLQUdFQ09ORklHW3ZweF0gICAgICAgID0gIi0tZW5hYmxlLXZweCwtLWRpc2FibGUtdnB4LGxpYnZweCIKK1BBQ0tBR0VDT05GSUdbd2F2cGFja10gICAgPSAiLS1lbmFibGUtd2F2cGFjaywtLWRpc2FibGUtd2F2cGFjayx3YXZwYWNrIgorCisjIHRoZSAxMzk0IHBsdWdpbnMgcmVxdWlyZSBib3RoIGxpYnJhdzEzOTQgYW5kIGxpYmllYzYxODgzCisjIHRoZSBmb3JtZXIgaXMgaW5jbHVkZWQgaW4gbWV0YS1vZSwgdGhlIGxhdHRlciBpc24ndAorIyAtPiBkaXNhYmxlZAorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1lbmFibGUtb3NzIFwKKyAgICAtLWVuYWJsZS1nc3RfdjRsMiBcCisgICAgLS13aXRob3V0LWxpYnY0bDIgXAorICAgIC0tZGlzYWJsZS1kaXJlY3Rzb3VuZCBcCisgICAgLS1kaXNhYmxlLXdhdmVmb3JtIFwKKyAgICAtLWRpc2FibGUtb3NzNCBcCisgICAgLS1kaXNhYmxlLXN1bmF1ZGlvIFwKKyAgICAtLWRpc2FibGUtb3N4X2F1ZGlvIFwKKyAgICAtLWRpc2FibGUtb3N4X3ZpZGVvIFwKKyAgICAtLWRpc2FibGUtYWFsaWIgXAorICAgIC0tZGlzYWJsZS1saWJjYWNhIFwKKyAgICAtLWRpc2FibGUtbGliZHYgXAorICAgIC0tZGlzYWJsZS1zaG91dDIgXAorICAgIC0tZGlzYWJsZS1leGFtcGxlcyBcCisgICAgLS1kaXNhYmxlLWR2MTM5NCBcCisiCisKK0ZJTEVTXyR7UE59LWVxdWFsaXplciArPSAiJHtkYXRhZGlyfS9nc3RyZWFtZXItMS4wL3ByZXNldHMvKi5wcnMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxOTczZDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGM3ODJhMzA0ODI5MDhhNGI0ZGQ5Y2Q0YWJmZjlmOWJjNDAxNjY5OGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogVHVlLCA1IEF1ZyAyMDE0IDE0OjQwOjQ2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGdzdHJ0cG1wNGdwYXk6IHNldCBkYWZhdWx0IHZhbHVlIGZvciBNUEVHNCB3aXRob3V0IGNvZGVjCisgZGF0YSBpbiBjYXBzLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MjYzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYyB8ICAgMTkgKysrKysrKysrKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCitpbmRleCA3OTEzZDlhLi4xNzQ5ZDM5IDEwMDY0NAorLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKKysrKyBiL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jCitAQCAtMzkwLDYgKzM5MCw3IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKKyAgIGNvbnN0IEdWYWx1ZSAqY29kZWNfZGF0YTsKKyAgIGNvbnN0IGdjaGFyICptZWRpYV90eXBlID0gTlVMTDsKKyAgIGdib29sZWFuIHJlczsKKysgIGNvbnN0IGdjaGFyICpuYW1lOworIAorICAgcnRwbXA0Z3BheSA9IEdTVF9SVFBfTVA0R19QQVkgKHBheWxvYWQpOworIAorQEAgLTQwMCw3ICs0MDEsNiBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCisgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiZ290IGNvZGVjX2RhdGEiKTsKKyAgICAgaWYgKEdfVkFMVUVfVFlQRSAoY29kZWNfZGF0YSkgPT0gR1NUX1RZUEVfQlVGRkVSKSB7CisgICAgICAgR3N0QnVmZmVyICpidWZmZXI7CistICAgICAgY29uc3QgZ2NoYXIgKm5hbWU7CisgCisgICAgICAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGNvZGVjX2RhdGEpOworICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRncGF5LCAiY29uZmlndXJpbmcgY29kZWNfZGF0YSIpOworQEAgLTQyNiw2ICs0MjYsMjMgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorIAorICAgICAgIHJ0cG1wNGdwYXktPmNvbmZpZyA9IGdzdF9idWZmZXJfY29weSAoYnVmZmVyKTsKKyAgICAgfQorKyAgfSBlbHNlIHsKKysgICAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7CisrCisrICAgIGlmICghc3RyY21wIChuYW1lLCAidmlkZW8vbXBlZyIpKSB7CisrICAgICAgcnRwbXA0Z3BheS0+cHJvZmlsZSA9IGdfc3RyZHVwICgiMSIpOworKworKyAgICAgIC8qIGZpeGVkIHJhdGUgKi8KKysgICAgICBydHBtcDRncGF5LT5yYXRlID0gOTAwMDA7CisrICAgICAgLyogdmlkZW8gc3RyZWFtIHR5cGUgKi8KKysgICAgICBydHBtcDRncGF5LT5zdHJlYW10eXBlID0gIjQiOworKyAgICAgIC8qIG5vIHBhcmFtcyBmb3IgdmlkZW8gKi8KKysgICAgICBydHBtcDRncGF5LT5wYXJhbXMgPSBOVUxMOworKyAgICAgIC8qIG1vZGUgKi8KKysgICAgICBydHBtcDRncGF5LT5tb2RlID0gImdlbmVyaWMiOworKworKyAgICAgIG1lZGlhX3R5cGUgPSAidmlkZW8iOworKyAgICB9CisgICB9CisgICBpZiAobWVkaWFfdHlwZSA9PSBOVUxMKQorICAgICBnb3RvIGNvbmZpZ19mYWlsZWQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjg4NjMxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorY29tbWl0IGQ3MWQ3NGRhYWM4ZWQ1NDE1NmVkMTAzOTU4YWI0NTVjNjNjNzJiMGUKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxMCAxMToyNTo0NyAyMDE0ICswODAwCisKK1thc3Rlcmlza2gyNjNdIGRlY3JlYXNlIHRoZSByYW5rIGFzIHdlIGhhdm4ndCB0aGlzIGtpbmQgb2YgZGVjb2Rlci4KKworRGVjcmVhc2UgdGhlIHJhbmsgYXMgd2UgaGF2bid0IHRoaXMga2luZCBvZiBkZWNvZGVyLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5OTM1CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYyBiL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKK2luZGV4IGEwMWZiYzguLjhmYTMxOTQgMTAwNjQ0CistLS0gYS9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jCisrKysgYi9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jCitAQCAtMjI2LDUgKzIyNiw1IEBAIGdib29sZWFuCisgZ3N0X2FzdGVyaXNraDI2M19wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQorIHsKKyAgIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXN0ZXJpc2toMjYzIiwKKy0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMpOworKyAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSAtIDEsIEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMpOworIH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2FiNjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kXzEuNC41LmJiCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMzttZDU9YjYwZWJlZmQ1YjJmNWE4ZTBjYWI2YmZlZTM5MWE1ZmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWdzdHJ0cG1wNGdwYXktc2V0LWRhZmF1bHQtdmFsdWUtZm9yLU1QRUc0LXdpdGhvdXQtY28ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlY3JlYXNlX2FzdGVyaXNraDI2M19yYW5rLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYWYxYTZkYWY3Mzc0OWJjNDIzZmVhYzMwMWQ2MDAzOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OWIxYjVmM2Y3YmNhYThhNjE1MjAyZWI1ZTE3NjEyMWVlYjgzMzY5NjBmNzA2ODdlNTM2YWQ3OGRiYzdlNjQxIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtZ29vZC0ke1BWfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwZTBlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1iNjBlYmVmZDViMmY1YThlMGNhYjZiZmVlMzkxYTVmZSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gImZkMDEyMzgwMGM4YzFjZjE0NjhjMGZhNWQ1OTJhZDBkMGQ4YjQxNDAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2JhMzE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKQEAgLTAsMCArMSwzMCBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBMR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGxpYmlkM3RhZyIKKworaW5oZXJpdCBnZXR0ZXh0CisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgb3JjIGE1MmRlYyBsYW1lIG1hZCBtcGVnMmRlYyBcCisgICAgIgorCitQQUNLQUdFQ09ORklHW2E1MmRlY10gICA9ICItLWVuYWJsZS1hNTJkZWMsLS1kaXNhYmxlLWE1MmRlYyxsaWJhNTIiCitQQUNLQUdFQ09ORklHW2NkaW9dICAgICA9ICItLWVuYWJsZS1jZGlvLC0tZGlzYWJsZS1jZGlvLGxpYmNkaW8iCitQQUNLQUdFQ09ORklHW2R2ZHJlYWRdICA9ICItLWVuYWJsZS1kdmRyZWFkLC0tZGlzYWJsZS1kdmRyZWFkLGxpYmR2ZHJlYWQiCitQQUNLQUdFQ09ORklHW2xhbWVdICAgICA9ICItLWVuYWJsZS1sYW1lLC0tZGlzYWJsZS1sYW1lLGxhbWUiCitQQUNLQUdFQ09ORklHW21hZF0gICAgICA9ICItLWVuYWJsZS1tYWQsLS1kaXNhYmxlLW1hZCxsaWJtYWQiCitQQUNLQUdFQ09ORklHW21wZWcyZGVjXSA9ICItLWVuYWJsZS1tcGVnMmRlYywtLWRpc2FibGUtbXBlZzJkZWMsbXBlZzJkZWMiCitQQUNLQUdFQ09ORklHW3gyNjRdICAgICA9ICItLWVuYWJsZS14MjY0LC0tZGlzYWJsZS14MjY0LHgyNjQiCisKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZGlzYWJsZS1hbXJuYiBcCisgICAgLS1kaXNhYmxlLWFtcndiIFwKKyAgICAtLWRpc2FibGUtc2lkcGxheSBcCisgICAgLS1kaXNhYmxlLXR3b2xhbWUgXAorICAgICIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjYjI4YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfMS40LjUuYmIKQEAgLTAsMCArMSwxMCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjk1NGJlZWQ3YmI5YTkzZTQyNmRlZTU0M2ZmNDYzOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWNkNWU4MWNmNjE4OTQ0ZjRkYzkzNWYxNjY5YjIxMjVlOGJiMmZlOWNjN2RjOGRjMTViNzIyMzdhY2E0OTA2NyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLXVnbHktJHtQVn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmNWZmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jaGVjay9lbGVtZW50cy94aW5nbXV4LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NGM3NzFiOGFmMTg4NzI0ODU1Y2I5OWNhZGQzOTAwNjggIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiMDZiOGFjMTBjZWU4NWM1YzMwNGNhMzIwOTk3YWE4ZjQ0Mjk1YTY2ZiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ODNiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLmluYwpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlBsdWdpbnMgZm9yIHRoZSBHU3RyZWFtZXIgbXVsdGltZWRpYSBmcmFtZXdvcmsgMS54IgorSE9NRVBBR0UgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R3N0cmVhbWVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitHU1RSRUFNRVJfMV8wX0RFQlVHID89ICItLWRpc2FibGUtZGVidWciCitHU1RSRUFNRVJfMV8wX0dJVF9CUkFOQ0ggPz0gIm1hc3RlciIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdmFsZ3JpbmQgJHtHU1RSRUFNRVJfMV8wX0RFQlVHfSAtLWRpc2FibGUtZXhhbXBsZXMgIgorCithY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCisKK0xJQlYgPSAiMS4wIgorcmVxdWlyZSBnc3QtcGx1Z2lucy1wYWNrYWdlLmluYworCitQQUNLQUdFQ09ORklHW29yY10gPSAiLS1lbmFibGUtb3JjLC0tZGlzYWJsZS1vcmMsb3JjIG9yYy1uYXRpdmUiCisKK2V4cG9ydCBPUkNDID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyfS9vcmNjIgorCitQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS0uKiIKKworIyBhcHBseSBnc3RyZWFtZXIgaGFjayBhZnRlciBNYWtlZmlsZS5pbi5pbiBpbiBzb3VyY2UgaXMgcmVwbGFjZWQgYnkgb3VyIHZlcnNpb24gZnJvbQorIyAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4sIGJ1dCBiZWZvcmUgY29uZmlndXJlIGlzIGV4ZWN1dGVkIAorIyBodHRwOi8vbGlzdHMubGludXh0b2dvLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxMi1Ob3ZlbWJlci8wMzIyMzMuaHRtbAorb2VfcnVuY29uZl9wcmVwZW5kKCkgeworCWlmIFsgLWUgJHtTfS9wby9NYWtlZmlsZS5pbi5pbiBdOyB0aGVuCisJCXNlZCAtaSAtZSAiMWFcXCIgLWUgJ0dFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VAJyAke1N9L3BvL01ha2VmaWxlLmluLmluCisJZmkKK30KKworU1JDX1VSSSA9ICIke0BnZXRfZ3N0X3NyY3VyaShkKX0iCisKK2RlZiBnZXRfZ3N0X3NyY3VyaShkKToKKyAgICAjIGNoZWNrIGlmIGV4cGVjdGVkIHByZWZpeCBpcyBwcmVzZW50CisgICAgcHJlZml4ID0gImdzdHJlYW1lcjEuMC0iCisgICAgYnBuID0gZC5nZXRWYXIoIkJQTiIsIFRydWUpCisgICAgaWYgbm90IGJwbi5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIGJiLmZhdGFsKCdJbnZhbGlkIEdTdHJlYW1lciAxLjAgcGx1Z2luIHBhY2thZ2UgbmFtZSAiJXMiIDogbXVzdCBzdGFydCB3aXRoICIlcyInICUgKGJwbiwgcHJlZml4KSkKKworICAgICMgcmVwbGFjZWQgcHJlZml4IHdpdGggImdzdC0iLCB3aGljaCBpcyB3aGF0IGlzIHVzZWQgZm9yIHRoZSB0YXJiYWxsIGFuZCByZXBvc2l0b3J5IGZpbGVuYW1lcworICAgIGdzdHBrZ19iYXNlbmFtZSA9ICJnc3QtIiArIGJwbltsZW4ocHJlZml4KTpdCisgICAgcHYgPSBkLmdldFZhcigiUFYiLCBUcnVlKQorICAgIGJyYW5jaCA9IGQuZ2V0VmFyKCJHU1RSRUFNRVJfMV8wX0dJVF9CUkFOQ0giLCBUcnVlKQorCisgICAgaWYgcHYgPT0gImdpdCI6CisgICAgICAgIHMgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyLyVzO2JyYW5jaD0lcyIgJSAoZ3N0cGtnX2Jhc2VuYW1lLCBicmFuY2gpCisgICAgZWxzZToKKyAgICAgICAgcyA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvJXMvJXMtJXMudGFyLnh6IiAlIChnc3Rwa2dfYmFzZW5hbWUsIGdzdHBrZ19iYXNlbmFtZSwgcHYpCisgICAgcmV0dXJuIHMKKworZGVsZXRlX2xpYmxpbmtfbTRfZmlsZSgpIHsKKwkjIFRoaXMgbTQgZmlsZSBjb250YWlucyBuYXN0aW5lc3Mgd2hpY2ggY29uZmxpY3RzIHdpdGggbGlidG9vbCAyLjIuMgorCXJtICIke1N9L200L2xpYi1saW5rLm00IiB8fCB0cnVlCit9CisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiBkZWxldGVfbGlibGlua19tNF9maWxlICIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhOTQyMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlci5pbmMKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgb24gdG9wIG9mIEdTdHJlYW1lciBmb3IgYnVpbGRpbmcgYW4gUlRTUCBzZXJ2ZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2MiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXJ0c3Atc2VydmVyLyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGxpYmNncm91cCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIgorCitQTlJFQUwgPSAiZ3N0LXJ0c3Atc2VydmVyIgorCitTUkNfVVJJID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8ke1BOUkVBTH0vJHtQTlJFQUx9LSR7UFZ9LnRhci54eiIKKworUyA9ICIke1dPUktESVJ9LyR7UE5SRUFMfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS40LjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5YjQyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1ydHNwLXNlcnZlcl8xLjQuNS5iYgpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCIKKworU1JDX1VSSVttZDVzdW1dID0gImE5ZjliODg5OWVjN2FiMzM2NjNjZGE3NjI3ZGI0MGQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMwODkyNTRiZDMxYjdjMWYxY2YyYzAzNGEzYjM1NTFmOTI4NzhmOWUzY2FiNjVjZWYzYTkwMWEwNGMwZjFkMzciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZThhYThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLmluYwpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkdTdHJlYW1lciAxLjAgbXVsdGltZWRpYSBmcmFtZXdvcmsiCitERVNDUklQVElPTiA9ICJHU3RyZWFtZXIgaXMgYSBtdWx0aW1lZGlhIGZyYW1ld29yayBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHZpZGVvIGFuZCBzb3VuZC4gXAorSXQgc3VwcG9ydHMgYSB3aWRlIHJhbmdlIG9mIGZvcm1hdHMgaW5jbHVkaW5nIG1wMywgb2dnLCBhdmksIG1wZWcgYW5kIHF1aWNrdGltZS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Hc3RyZWFtZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2MisiCitERVBFTkRTID0gImdsaWItMi4wIGxpYnhtbDIgYmlzb24tbmF0aXZlIGZsZXgtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitQQUNLQUdFQ09ORklHW2RlYnVnXSA9ICItLWVuYWJsZS1kZWJ1ZywtLWRpc2FibGUtZGVidWciCitQQUNLQUdFQ09ORklHW2NoZWNrXSA9ICItLWVuYWJsZS1jaGVjaywtLWRpc2FibGUtY2hlY2siCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jYm9vayAtLWRpc2FibGUtZ3RrLWRvYyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1leGFtcGxlcyAtLWRpc2FibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12YWxncmluZCBcCisgICAgICAgICAgICAgICAgIgorCitSUkVDT01NRU5EU18ke1BOfV9xZW11eDg2ICAgICs9ICJrZXJuZWwtbW9kdWxlLXNuZC1lbnMxMzcwIGtlcm5lbC1tb2R1bGUtc25kLXJhd21pZGkiCitSUkVDT01NRU5EU18ke1BOfV9xZW11eDg2LTY0ICs9ICJrZXJuZWwtbW9kdWxlLXNuZC1lbnMxMzcwIGtlcm5lbC1tb2R1bGUtc25kLXJhd21pZGkiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD1ubyIKKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLnNvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIgJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvICR7bGliZXhlY2Rpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjVjYzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDZiMjZmM2RiZjliZjU3N2Q3MTUzNGFiNzQxMGRlNjZkMDZlNDZiYTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDYgQXByIDIwMTMgMjM6NTI6MTEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGNyYXNoIHdpdGggZ3N0LWluc3BlY3QgQ2hyaXMgTG9yZCA8Y2hyaXNAb3BlbmVkaGFuZC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyB0b29scy9nc3QtaW5zcGVjdC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvZ3N0LWluc3BlY3QuYyBiL3Rvb2xzL2dzdC1pbnNwZWN0LmMKK2luZGV4IDIzYjdjNDQuLmI3OWIwMmUgMTAwNjQ0CistLS0gYS90b29scy9nc3QtaW5zcGVjdC5jCisrKysgYi90b29scy9nc3QtaW5zcGVjdC5jCitAQCAtMTU1Niw3ICsxNTU2LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOworICAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7CisgICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmZXJyKSkgeworLSAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKKysgICAgZ19wcmludGVyciAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyciA/IGVyci0+bWVzc2FnZSA6ICIobnVsbCkiKTsKKyAgICAgcmV0dXJuIC0xOworICAgfQorICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOworLS0gCisxLjguMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLWdzdGluZm8tU2hvcnRlbi1fX0ZJTEVfXy1vbi1hbGwtcGxhdGZvcm1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTNjNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDgxZmVjZDM2N2IwMTZlNWFjNGZiMGMwNGI4NGRhNWM0NzRmMzBkYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQZXRlciBVcmJhbmVjIDxnaXQudXNlckB1cmJhbmVjLm5ldD4KK0RhdGU6IEZyaSwgMjcgRmViIDIwMTUgMDE6MTY6NTggKzExMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIGdzdGluZm86IFNob3J0ZW4gX19GSUxFX18gb24gYWxsIHBsYXRmb3Jtcy4KKworVGhpcyBpcyB1c2VmdWwgbm90IG9ubHkgZm9yIE1TVkMsIGJ1dCBhbHNvIHdpdGggZ2NjL0xpbnV4IHdoZW4gZG9pbmcKK2Nyb3NzLWNvbXBpbGF0aW9uIGJ1aWxkcyBhbmQgb3V0LW9mLXRyZWUgYnVpbGRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTIxM10KKworU2lnbmVkLW9mZi1ieTogUGV0ZXIgVXJiYW5lYyA8Z2l0LnVzZXJAdXJiYW5lYy5uZXQ+CistLS0KKyBnc3QvZ3N0aW5mby5jIHwgMTEgKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0L2dzdGluZm8uYyBiL2dzdC9nc3RpbmZvLmMKK2luZGV4IGIyYTMwMDUuLjhiNjFkMDkgMTAwNjQ0CistLS0gYS9nc3QvZ3N0aW5mby5jCisrKysgYi9nc3QvZ3N0aW5mby5jCitAQCAtNDQ0LDcgKzQ0NCw2IEBAIGdzdF9kZWJ1Z19sb2cgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKKyAgIHZhX2VuZCAodmFyX2FyZ3MpOworIH0KKyAKKy0jaWZkZWYgR19PU19XSU4zMgorIC8qIGJhc2VkIG9uIGdfYmFzZW5hbWUoKSwgd2hpY2ggd2UgY2FuJ3QgdXNlIGJlY2F1c2UgaXQgd2FzIGRlcHJlY2F0ZWQgKi8KKyBzdGF0aWMgaW5saW5lIGNvbnN0IGdjaGFyICoKKyBnc3RfcGF0aF9iYXNlbmFtZSAoY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUpCitAQCAtNDY3LDcgKzQ2Niw2IEBAIGdzdF9wYXRoX2Jhc2VuYW1lIChjb25zdCBnY2hhciAqIGZpbGVfbmFtZSkKKyAKKyAgIHJldHVybiBmaWxlX25hbWU7CisgfQorLSNlbmRpZgorIAorIC8qKgorICAqIGdzdF9kZWJ1Z19sb2dfdmFsaXN0OgorQEAgLTQ5NywxMiArNDk1LDExIEBAIGdzdF9kZWJ1Z19sb2dfdmFsaXN0IChHc3REZWJ1Z0NhdGVnb3J5ICogY2F0ZWdvcnksIEdzdERlYnVnTGV2ZWwgbGV2ZWwsCisgICBnX3JldHVybl9pZl9mYWlsIChmdW5jdGlvbiAhPSBOVUxMKTsKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKGZvcm1hdCAhPSBOVUxMKTsKKyAKKy0gIC8qIFRoZSBwcmVkZWZpbmVkIG1hY3JvIF9fRklMRV9fIGlzIGFsd2F5cyB0aGUgZXhhY3QgcGF0aCBnaXZlbiB0byB0aGUKKy0gICAqIGNvbXBpbGVyIHdpdGggTVNWQywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgdGhlIGJhc2VuYW1lLiAgV2Ugd29yaworLSAgICogYXJvdW5kIGl0IGF0IHJ1bnRpbWUgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkuICovCistI2lmZGVmIEdfT1NfV0lOMzIKKysgIC8qIFRoZSBwcmVkZWZpbmVkIG1hY3JvIF9fRklMRV9fIGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoIGluIHNvbWUgYnVpbGQKKysgICAqIGVudmlyb25tZW50cywgc3VjaCBhcyBNU1ZDIG9yIG91dC1vZi10cmVlIGNyb3NzLWNvbXBpbGVzLiBUaGlzIG1heQorKyAgICogYmUgc2lnbmlmaWNhbnRseSBsb25nZXIgdGhhbiB0aGUgZmlsZW5hbWUuICBXZSB3b3JrIGFyb3VuZCBpdCBhdAorKyAgICogcnVudGltZSB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eS4gKi8KKyAgIGZpbGUgPSBnc3RfcGF0aF9iYXNlbmFtZSAoZmlsZSk7CistI2VuZGlmCisgCisgICBtZXNzYWdlLm1lc3NhZ2UgPSBOVUxMOworICAgbWVzc2FnZS5mb3JtYXQgPSBmb3JtYXQ7CistLSAKKzIuMy4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDVjYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMi1iYXNlc2luay1GaXgtUW9TLWxhdGVuZXNzLWNoZWNraW5nLWlmLXN1YmNsYXNzLWltcGxlLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gNjkxNDU2NmVkNmE4OWM5Njk3M2E1NzhhYTVlY2QwMWVlNjhjZGNmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW4gPEppYW4uTGlAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTQgTWF5IDIwMTUgMTU6NDk6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmFzZXNpbms6IEZpeCBRb1MvbGF0ZW5lc3MgY2hlY2tpbmcgaWYgc3ViY2xhc3MgaW1wbGVtZW50cworIHByZXBhcmUvcHJlcGFyZV9saXN0IHZmdW5jcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitJbiBiYXNlc2luayBmdW5jdGlvbnMgZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCgpLCBiZWxvdyBjb2RlIGlzIHVzZWQgdG8KK2NoZWNraW5nIGlmIGJ1ZmZlciBpcyBsYXRlIGJlZm9yZSBkb2luZyBwcmVwYXJlIGNhbGwgdG8gc2F2ZSBzb21lIGVmZm9ydDoKKyAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykKKyAgICAgIGxhdGUgPQorICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCisgICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCAwLCBGQUxTRSk7CisKKyAgICBpZiAoR19VTkxJS0VMWSAobGF0ZSkpCisgICAgICBnb3RvIGRyb3BwZWQ7CisKK0J1dCB0aGlzIGNvZGUgaGFzIHByb2JsZW0sIGl0IHNob3VsZCBjYWxjdWxhdGUgaml0dGVyIGJhc2VkIG9uIGN1cnJlbnQgbWVkaWEKK2Nsb2NrLCByYXRoZXIgdGhhbiBqdXN0IHBhc3NpbmcgMC4gSSBmb3VuZCBpdCB3aWxsIGRyb3AgYWxsIHRoZSBmcmFtZXMgd2hlbgorcmV3aW5kIGluIHNsb3cgc3BlZWQsIHN1Y2ggYXMgLTJYLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjU4CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorLS0tCisgbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIHwgICAyNiArKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jIGIvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCitpbmRleCBhNTA1Njk1Li41ZmIyZDZhIDEwMDY0NAorLS0tIGEvbGlicy9nc3QvYmFzZS9nc3RiYXNlc2luay5jCisrKysgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKK0BAIC0zMzY5LDEwICszMzY5LDI4IEBAIGdzdF9iYXNlX3NpbmtfY2hhaW5fdW5sb2NrZWQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdFBhZCAqIHBhZCwKKyAgICAgaWYgKEdfVU5MSUtFTFkgKHN0ZXBwZWQpKQorICAgICAgIGdvdG8gZHJvcHBlZDsKKyAKKy0gICAgaWYgKHN5bmNhYmxlICYmIGRvX3N5bmMpCistICAgICAgbGF0ZSA9CistICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCistICAgICAgICAgIEdTVF9DTE9DS19FQVJMWSwgMCwgRkFMU0UpOworKyAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykgeworKyAgICAgIEdzdENsb2NrICpjbG9jazsKKysKKysgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGJhc2VzaW5rKTsKKysgICAgICBjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChiYXNlc2luayk7CisrICAgICAgaWYgKGNsb2NrICYmIEdTVF9TVEFURSAoYmFzZXNpbmspID09IEdTVF9TVEFURV9QTEFZSU5HKSB7CisrICAgICAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOworKyAgICAgICAgR3N0Q2xvY2tUaW1lIHN0aW1lOworKyAgICAgICAgR3N0Q2xvY2tUaW1lIG5vdzsKKysKKysgICAgICAgIGJhc2VfdGltZSA9IEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VzaW5rKS0+YmFzZV90aW1lOworKyAgICAgICAgc3RpbWUgPSBiYXNlX3RpbWUgKyBnc3RfYmFzZV9zaW5rX2FkanVzdF90aW1lIChiYXNlc2luaywgcnN0YXJ0KTsKKysgICAgICAgIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOworKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKysKKysgICAgICAgIGxhdGUgPQorKyAgICAgICAgICAgIGdzdF9iYXNlX3NpbmtfaXNfdG9vX2xhdGUgKGJhc2VzaW5rLCBvYmosIHJzdGFydCwgcnN0b3AsCisrICAgICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCBHU1RfQ0xPQ0tfRElGRiAoc3RpbWUsIG5vdyksIEZBTFNFKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJhc2VzaW5rKTsKKysgICAgICB9CisrICAgIH0KKyAKKyAgICAgaWYgKEdfVU5MSUtFTFkgKGxhdGUpKQorICAgICAgIGdvdG8gZHJvcHBlZDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC9pbnB1dHNlbGVjdG9yLXN0aWNreS1ldmVudHMtaGF2ZW4tdC1zZW5kLW91dC13aGVuLWFjLTEtNC0xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1MGNlNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaApAQCAtMCwwICsxLDE2NyBAQAorRnJvbSA4M2JlZDkwYzMwNmVkMzE4NWQ0OGZlYmY2NDQxMTc3ZDYzOGY3MzQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgMjQgRGVjIDIwMTQgMTA6MTM6NTEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5wdXRzZWxlY3Rvcjogc3RpY2t5IGV2ZW50cyBoYXZlbid0IHNlbmQgb3V0IHdoZW4gYWN0aXZlCisgdHJhY2sgcmVhY2ggRU9TCisKK0VPUyBldmVudCBoYXNuJ3QgYmVlbiBzZW5kIHRvIGRvd24tZWxlbWVudC4gVGhlIHJlc29sdXRpb24gaXMgYmxvY2sgRU9TIGV2ZW50CitvZiBpbmFjdGl2ZSBwYWQsIHNlbmQgdGhlIGV2ZW50IGFmdGVyIHRoZSBwYWQgYWN0aXZlZC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk0OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKy0tLQorIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jIHwgICA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIHBsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oIHwgICAgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKK2luZGV4IGZiNTA4MDIuLjQ0NjFmN2MgMTAwNjQ0CistLS0gYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworKysrIGIvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMKK0BAIC00NDAsNiArNDQwLDE3IEBAIGdzdF9zZWxlY3Rvcl9wYWRfaXRlcmF0ZV9saW5rZWRfcGFkcyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCisgfQorIAorIHN0YXRpYyBnYm9vbGVhbgorK2dzdF9pbnB1dF9zZWxlY3Rvcl9lb3Nfd2FpdCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbGYsIEdzdFNlbGVjdG9yUGFkICogcGFkKQorK3sKKysgIHdoaWxlICghc2VsZi0+ZW9zICYmICFzZWxmLT5mbHVzaGluZyAmJiAhcGFkLT5mbHVzaGluZykgeworKyAgICAvKiB3ZSBjYW4gYmUgdW5sb2NrZWQgaGVyZSB3aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duIChmbHVzaGluZykgb3Igd2hlbiB3ZQorKyAgICAgKiBnZXQgdW5ibG9ja2VkICovCisrICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9XQUlUIChzZWxmKTsKKysgIH0KKysgIHJldHVybiBzZWxmLT5mbHVzaGluZzsKKyt9CisrCisrc3RhdGljIGdib29sZWFuCisgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgeworICAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKK0BAIC00ODYsNiArNDk3LDcgQEAgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgorICAgICAgIC8qIFVuYmxvY2sgdGhlIHBhZCBpZiBpdCdzIHdhaXRpbmcgKi8KKyAgICAgICBzZWxwYWQtPmZsdXNoaW5nID0gVFJVRTsKKysgICAgICBzZWwtPmVvcyA9IEZBTFNFOworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbCk7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6CitAQCAtNTIzLDIxICs1MzUsMTIgQEAgZ3N0X3NlbGVjdG9yX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKKyAgICAgICBzZWxwYWQtPmVvcyA9IFRSVUU7CisgCistICAgICAgaWYgKGZvcndhcmQpIHsKKy0gICAgICAgIHNlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBHc3RTZWxlY3RvclBhZCAqYWN0aXZlX3NlbHBhZDsKKy0KKy0gICAgICAgIC8qIElmIHRoZSBhY3RpdmUgc2lua3BhZCBpcyBpbiBFT1Mgc3RhdGUgYnV0IEVPUworLSAgICAgICAgICogd2FzIG5vdCBzZW50IGRvd25zdHJlYW0gdGhpcyBtZWFucyB0aGF0IHRoZSBwYWQKKy0gICAgICAgICAqIGdvdCBFT1MgYmVmb3JlIGl0IHdhcyBzZXQgYXMgYWN0aXZlIHBhZCBhbmQgdGhhdAorLSAgICAgICAgICogdGhlIHByZXZpb3VzbHkgYWN0aXZlIHBhZCBnb3QgRU9TIGFmdGVyIGl0IHdhcworLSAgICAgICAgICogYWN0aXZlCistICAgICAgICAgKi8KKy0gICAgICAgIGFjdGl2ZV9zZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEIChhY3RpdmVfc2lua3BhZCk7CistICAgICAgICBmb3J3YXJkID0gKGFjdGl2ZV9zZWxwYWQtPmVvcyAmJiAhYWN0aXZlX3NlbHBhZC0+ZW9zX3NlbnQpOworLSAgICAgICAgYWN0aXZlX3NlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworKyAgICAgIGlmICghZm9yd2FyZCkgeworKyAgICAgICAgLyogYmxvY2tlZCB1bnRpbCBhY3RpdmUgdGhlIHNpbmQgcGFkIG9yIGZsdXNoICovCisrICAgICAgICBnc3RfaW5wdXRfc2VsZWN0b3JfZW9zX3dhaXQgKHNlbCwgc2VscGFkKTsKKysgICAgICAgIGZvcndhcmQgPSBUUlVFOworICAgICAgIH0KKysgICAgICBzZWxwYWQtPmVvc19zZW50ID0gVFJVRTsKKyAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJyZWNlaXZlZCBFT1MiKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOnsKK0BAIC02NzYsNiArNjc5LDEyIEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0X3J1bm5pbmdfdGltZSAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbCwKKyAgICAgICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9hY3RpdmF0ZV9zaW5rcGFkIChzZWwsIEdTVF9QQURfQ0FTVCAoc2VscGFkKSk7CisgICAgIGFjdGl2ZV9zZWxwYWQgPSBHU1RfU0VMRUNUT1JfUEFEX0NBU1QgKGFjdGl2ZV9zaW5rcGFkKTsKKyAKKysgICAgaWYgKHNlbC0+ZW9zKSB7CisrICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsLCAiTm90IHdhaXRpbmcgYmVjYXVzZSBpbnB1dHNlbGVjdG9yIHJlYWNoIEVPUy4iKTsKKysgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworKyAgICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorKworICAgICBpZiAoc2VnLT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7CisgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VscGFkLAorICAgICAgICAgICAiTm90IHdhaXRpbmcgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgVElNRSBzZWdtZW50Iik7CitAQCAtOTcxLDYgKzk4MCwxMiBAQCBnc3Rfc2VsZWN0b3JfcGFkX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQorICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSk7CisgCisgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsKTsKKysgIGlmIChzZWwtPmVvcykgeworKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJpbnB1dHNlbGVjdG9yIGVvcy4iKTsKKysgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKKysgICAgZ290byBlb3M7CisrICB9CisrCisgICAvKiB3YWl0IG9yIGNoZWNrIGZvciBmbHVzaGluZyAqLworICAgaWYgKGdzdF9pbnB1dF9zZWxlY3Rvcl93YWl0IChzZWwsIHNlbHBhZCkpIHsKKyAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsKTsKK0BAIC0xMTUxLDYgKzExNjYsMTMgQEAgZmx1c2hpbmc6CisgICAgIHJlcyA9IEdTVF9GTE9XX0ZMVVNISU5HOworICAgICBnb3RvIGRvbmU7CisgICB9CisrZW9zOgorKyAgeworKyAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJXZSBhcmUgZW9zLCBkaXNjYXJkIGJ1ZmZlciAlcCIsIGJ1Zik7CisrICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7CisrICAgIHJlcyA9IEdTVF9GTE9XX0VPUzsKKysgICAgZ290byBkb25lOworKyAgfQorIH0KKyAKKyBzdGF0aWMgdm9pZCBnc3RfaW5wdXRfc2VsZWN0b3JfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7CitAQCAtMTMwOSw2ICsxMzMxLDcgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX2luaXQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWwpCisgICBnX211dGV4X2luaXQgKCZzZWwtPmxvY2spOworICAgZ19jb25kX2luaXQgKCZzZWwtPmNvbmQpOworICAgc2VsLT5ibG9ja2VkID0gRkFMU0U7CisrICBzZWwtPmVvcyA9IEZBTFNFOworIAorICAgLyogbGV0cyBnaXZlIGEgY2hhbmdlIGZvciBkb3duc3RyZWFtIHRvIGRvIHNvbWV0aGluZyBvbgorICAgICogYWN0aXZlLXBhZCBjaGFuZ2UgYmVmb3JlIHdlIHN0YXJ0IHB1c2hpbmcgbmV3IGJ1ZmZlcnMgKi8KK0BAIC0xMzc3LDYgKzE0MDAsMTEgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX3NldF9hY3RpdmVfcGFkIChHc3RJbnB1dFNlbGVjdG9yICogc2VsZiwgR3N0UGFkICogcGFkKQorICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk5ldyBhY3RpdmUgcGFkIGlzICUiIEdTVF9QVFJfRk9STUFULAorICAgICAgIHNlbGYtPmFjdGl2ZV9zaW5rcGFkKTsKKyAKKysgIGlmIChvbGQgIT0gbmV3ICYmIG5ldy0+ZW9zICYmICFuZXctPmVvc19zZW50KSB7CisrICAgIHNlbGYtPmVvcyA9IFRSVUU7CisrICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9CUk9BRENBU1QgKHNlbGYpOworKyAgfQorKworICAgcmV0dXJuIFRSVUU7CisgfQorIAorQEAgLTE3NzEsNiArMTc5OSw3IEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbGYpOworKyAgICAgIHNlbGYtPmVvcyA9IEZBTFNFOworICAgICAgIHNlbGYtPmJsb2NrZWQgPSBGQUxTRTsKKyAgICAgICBzZWxmLT5mbHVzaGluZyA9IEZBTFNFOworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbGYpOworQEAgLTE3NzksNiArMTgwOCw3IEBAIGdzdF9pbnB1dF9zZWxlY3Rvcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAorICAgICAgIC8qIGZpcnN0IHVubG9jayBiZWZvcmUgd2UgY2FsbCB0aGUgcGFyZW50IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiwgd2hpY2gKKyAgICAgICAgKiB0cmllcyB0byBhY3F1aXJlIHRoZSBzdHJlYW0gbG9jayB3aGVuIGdvaW5nIHRvIHJlYWR5LiAqLworICAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWxmKTsKKysgICAgICBzZWxmLT5lb3MgPSBUUlVFOworICAgICAgIHNlbGYtPmJsb2NrZWQgPSBGQUxTRTsKKyAgICAgICBzZWxmLT5mbHVzaGluZyA9IFRSVUU7CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsZik7CitkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmggYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaAoraW5kZXggOTZjNjgwZi4uOWJmOTI0ZiAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCisrKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaAorQEAgLTc3LDYgKzc3LDcgQEAgc3RydWN0IF9Hc3RJbnB1dFNlbGVjdG9yIHsKKyAgIEdNdXRleCBsb2NrOworICAgR0NvbmQgY29uZDsKKyAgIGdib29sZWFuIGJsb2NrZWQ7CisrICBnYm9vbGVhbiBlb3M7CisgICBnYm9vbGVhbiBmbHVzaGluZzsKKyB9OworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjQuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU4NzU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wXzEuNC41LmJiCkBAIC0wLDAgKzEsMTcgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9ZTA1OTEzODQ4MTIwNWVlMmM2ZmMxYzA3OWMwMTZkMGQiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0cmVhbWVyL2dzdHJlYW1lci0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaCBcCisgICAgZmlsZTovL2lucHV0c2VsZWN0b3Itc3RpY2t5LWV2ZW50cy1oYXZlbi10LXNlbmQtb3V0LXdoZW4tYWMtMS00LTEucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjg4YTkyODljNjRhNDk1MGViYjRmNTQ0OTgwMjM0Mjg5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwODAxYWE3Zjk3OTAyNDUyNjI1OGEwZTk0NzA3YmE0MmI4YWI2ZjdkMjIwNmU1NmFkYmM0NDMzMTU1Y2IwYWUiCisKK1MgPSAiJHtXT1JLRElSfS9nc3RyZWFtZXItJHtQVn0iCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDBkMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBnc3RyZWFtZXIxLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyO2JyYW5jaD1tYXN0ZXIiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiM2I4MTgxYThjNTUwZTc0YWNhYmE0ZThjNTViZGM2NDlmYTU1MWRjOSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MWExZDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHRoaXMga2luZCBvZiBlcnJvcnMgd2l0aCBhdXRvbWFrZSAxLjEyLng6Cit8IGRvYy9tYW4vTWFrZWZpbGUuYW06MzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8xMworCitJbmRleDogbGFtZS0zLjk5LjUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9jb25maWd1cmUuaW4KKysrKyBsYW1lLTMuOTkuNS9jb25maWd1cmUuaW4KK0BAIC03Nyw5ICs3Nyw2IEBAIGlmIHRlc3QgIiR7R0NDfSIgPSAieWVzIjsgdGhlbgorIAlBQ19NU0dfUkVTVUxUKCR7R0NDX3ZlcnNpb259KQorIGZpCisgCistZG5sIG1vcmUgYXV0b21ha2Ugc3R1ZmYKKy1BTV9DX1BST1RPVFlQRVMKKy0KKyBBQ19DSEVDS19IRUFERVIoZG1hbGxvYy5oKQorIGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX2RtYWxsb2NfaH0iID0gInllcyI7IHRoZW4KKyAJQU1fV0lUSF9ETUFMTE9DCitJbmRleDogbGFtZS0zLjk5LjUvZG9jL2h0bWwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2RvYy9odG1sL01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvZG9jL2h0bWwvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjICRJZDogTWFrZWZpbGUuYW0sdiAxLjcgMjAxMC8wOS8zMCAyMDo1ODo0MCBqYXowMDEgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCisgZG9jZGlyID0gJChkYXRhZGlyKS9kb2MKKyBwa2dkb2NkaXIgPSAkKGRvY2RpcikvJChQQUNLQUdFKQorSW5kZXg6IGxhbWUtMy45OS41L2xpYm1wM2xhbWUvaTM4Ni9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhbWUtMy45OS41Lm9yaWcvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyAkSWQ6IE1ha2VmaWxlLmFtLHYgMS4yNiAyMDExLzA0LzA0IDA5OjQyOjM0IGFsZWlkaW5nZXIgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiAkKHRvcF9zcmNkaXIpL2Fuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKyBERUZTID0gQERFRlNAIEBDT05GSUdfREVGU0AKKyAKK0luZGV4OiBsYW1lLTMuOTkuNS9kb2MvbWFuL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9kb2MvbWFuL01ha2VmaWxlLmFtCisrKysgbGFtZS0zLjk5LjUvZG9jL21hbi9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgJElkOiBNYWtlZmlsZS5hbSx2IDEuMSAyMDAwLzEwLzIyIDExOjM5OjQ0IGFsZWlkaW5nZXIgRXhwICQKKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCisgbWFuX01BTlMgPSBsYW1lLjEKKyBFWFRSQV9ESVNUID0gJHttYW5fTUFOU30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL25vLWd0azEucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9uby1ndGsxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OGQ3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9uby1ndGsxLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworIyBBY3F1aXJlZCBmcm9tIE9wZW5FbWJlZGRlZAorCistLS0gbGFtZS0zLjk2LjEvY29uZmlndXJlLmlufm5vLWd0azEucGF0Y2gJMjAwNC0wNy0yNSAxNTo1MjoxMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBsYW1lLTMuOTYuMS9jb25maWd1cmUuaW4JMjAwNC0wOS0xMCAxNTo1NDozOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zNjMsNyArMzYzLDEyIEBACisgCisgZG5sIGNvbmZpZ3VyZSB1c2Ugb2YgZmVhdHVyZXMKKyAKKy1BTV9QQVRIX0dUSygxLjIuMCwgSEFWRV9HVEs9InllcyIsIEhBVkVfR1RLPSJubyIpCisrI0FNX1BBVEhfR1RLKDEuMi4wLCBIQVZFX0dUSz0ieWVzIiwgSEFWRV9HVEs9Im5vIikKKytIQVZFX0dUSz0ibm8iCisrR1RLX0NGTEFHUz0iIgorK0dUS19MSUJTPSIiCisrQUNfU1VCU1QoR1RLX0NGTEFHUykKKytBQ19TVUJTVChHVEtfTElCUykKKworIGRubCBFbGVjdHJpY0ZlbmNlIG1hbGxvYyBkZWJ1Z2dpbmcKKyBBQ19NU0dfQ0hFQ0tJTkcodXNlIG9mIEVsZWN0cmljRmVuY2UgbWFsbG9jIGRlYnVnZ2luZykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc3NjExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWVfMy45OS41LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiSGlnaCBxdWFsaXR5IE1QMyBhdWRpbyBlbmNvZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xhbWUuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0yOTAmYXRpZD0xMDAyOTAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK0RFUEVORFMgPSAibmN1cnNlcyBnZXR0ZXh0LW5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ2YmRhMDBmZmJiMGJhMWRhYzIyZjhkMDg3ZjU0ZDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9sYW1lLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9YTIyNTgxODJjNTkzYzM5OGQxNWE0ODI2MjEzMGE5MmIgXAorIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xhbWUvbGFtZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tZ3RrMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NDgzNWIzMTNkNGE4YjY4ZjUzNDk4MTZkMzNlMDdjZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNDM0NmI0MTU4ZTRhZjNiZDlmMmUxOTRiYjIzZWI0NzNjNzVmYjczNzcwMTE1MjMzNTMxOTZiMTliOWEyM2ZmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRVMgKz0gImxpYm1wM2xhbWUgbGlibXAzbGFtZS1kZXYiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vbGFtZSIKK0ZJTEVTX2xpYm1wM2xhbWUgPSAiJHtsaWJkaXJ9L2xpYm1wM2xhbWUuc28uKiIKK0ZJTEVTX2xpYm1wM2xhbWUtZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9LyoiCitGSUxFU18ke1BOfS1kZXYgPSAiIgorCitDQUNIRURfQ09ORklHVVJFVkFSU19hcHBlbmRfeDg2ID0gIiBhY19jdl9oZWFkZXJfZW1taW50cmluX2g9bm8gYWNfY3ZfaGVhZGVyX3htbWludHJpbl9oPW5vIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyL2J1aWxkY2xlYW51cC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Mi9idWlsZGNsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2ODEwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Mi9idWlsZGNsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorSXQgbWFrZXMgbXVjaCBtb3JlIHNlbnNlIHRvIGNvbnRyb2wgb3VyIG93biBDRkxBR1MgYW5kIGF2b2lkaW5nIGZQSUMgYnJlYWtzCitzb21lIGFyY2hlcyB0b28uIEFzc3VtZSB3ZSBrbm93IHdoYXQgd2UncmUgZG9pbmcgYW5kIHJlbW92ZSBhbGwgdGhlIG1lc3NpbmcgCithcm91bmQuCisKK1JQIDIzLzIvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYTUyZGVjLTAuNy40L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGE1MmRlYy0wLjcuNC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEwLTAyLTIzIDE0OjUxOjUwLjAwMDAwMDAwMCArMDAwMAorKysrIGE1MmRlYy0wLjcuNC9jb25maWd1cmUuaW4JMjAxMC0wMi0yMyAxNDo1MjozNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNCw2MiArMTQsNiBAQAorIEFDX1BST0dfQ0MKKyBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIAorLWlmIHRlc3QgeCIkR0NDIiA9IHgieWVzIjsgdGhlbgorLQorLSAgICBkbmwgR0NDLXNwZWNpZmljIGZsYWdzIC0gdHJ5IHRvIG9wdGltaXplIHRoZW0gc29tZXRpbWUKKy0gICAgZG5sIC1XYWxsIC1XZXJyb3IgbW92ZWQgdG8gdGhlIGVuZCB0byBub3QgZGlzdHVyYiB0aGUgY29uZmlndXJlIHNjcmlwdAorLQorLSAgICBkbmwgLU8zCistICAgIGNoYW5nZXF1b3RlKDw8LD4+KQorLSAgICBPUFRfQ0ZMQUdTPWBlY2hvICIkQ0ZMQUdTInxzZWQgInMvLU9bMC05XSovL2ciYAorLSAgICBjaGFuZ2VxdW90ZShbLF0pCistICAgIE9QVF9DRkxBR1M9IiRPUFRfQ0ZMQUdTIC1PMyIKKy0gICAgQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKQorLQorLSAgICBkbmwgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKy0gICAgT1BUX0NGTEFHUz0iJENGTEFHUyAtZm9taXQtZnJhbWUtcG9pbnRlciIKKy0gICAgQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKQorLQorLSAgICBkbmwgYXJjaC1zcGVjaWZpYyBmbGFncworLSAgICBjYXNlICIkaG9zdCIgaW4KKy0gICAgaT84Ni0qIHwgaz8tKikKKy0JY2FzZSAiJGhvc3QiIGluCistCWkzODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1pMzg2Ijs7CistCWk0ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1pNDg2Ijs7CistCWk1ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1wZW50aXVtIjs7CistCWk2ODYtKikgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1wZW50aXVtcHJvIjs7CistCWs2LSopICAgT1BUX0NGTEFHUz0iJENGTEFHUyAtbWNwdT1rNiI7OworLQllc2FjCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBzcGFyYy0qIHwgc3BhcmM2NC0qKQorLQlPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tdHVuZT11bHRyYXNwYXJjIgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgbWlwcy1zZ2ktaXJpeDYuKikJZG5sIGRvIHdlIG5lZWQgdG8gYmUgdGhhdCBzcGVjaWZpYyA/CistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLW1hYmk9NjQiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBlc2FjCistZWxpZiB0ZXN0IHgiJENDIiA9IHgidGNjIiAtYSB4ImAkQ0MgLXZlcnNpb24gMj4mMSB8IGdyZXAgVGVuRFJBYCIgIT0geCIiOyB0aGVuCistICAgIGRubCBUZW5EUkEgcG9ydGFiaWxpdHkgY2hlY2tpbmcgY29tcGlsZXIKKy0gICAgVEVORFJBPXllcworLSAgICBDRkxBR1M9Ii1YcCAtWWFuc2kgLWZgcHdkYC9pbmNsdWRlL3RlbmRyYS5oIC1ERUxJREVfQ09ERSIKKy0gICAgZW5hYmxlX21saWI9bm8KKy0gICAgZW5hYmxlX29zcz1ubworLSAgICBlbmFibGVfc29sYXJpc19hdWRpbz1ubworLWVsaWYgdGVzdCB4IiRDQyIgPSB4ImljYyIgLWEgeCJgJENDIC1WIDI+JjEgfCBncmVwIEludGVsYCIgIT0geCIiOyB0aGVuCistICAgIGRubCBJbnRlbCBDKysgY29tcGlsZXIKKy0gICAgQ0ZMQUdTPSItZyAtTzMgLXVucm9sbCAtaXAiCistZWxzZQorLSAgICBkbmwgbm9uLWdjYyBmbGFncyAtIHdlIHByb2JhYmx5IG5lZWQgZXhhY3QgY29uZmlndXJhdGlvbiB0cmlwbGV0cyBoZXJlLgorLSAgICBjYXNlICIkaG9zdCIgaW4KKy0gICAgbWlwcy1zZ2ktaXJpeDYuKikKKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAtNjQiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBzcGFyYy1zdW4tc29sYXJpcyopCistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLXhDQyAtZmFzdCAteE81IgorLQlBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pOzsKKy0gICAgZXNhYworLWZpCistCisgZG5sIENoZWNrcyBmb3IgbGlidG9vbCAtIHRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIHdlIHNldCBjZmxhZ3MKKyBBQ19ESVNBQkxFX1NIQVJFRAorIEFDX0xJQlRPT0xfV0lOMzJfRExMCitJbmRleDogYTUyZGVjLTAuNy40L2xpYmE1Mi9jb25maWd1cmUuaW5jbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGE1MmRlYy0wLjcuNC5vcmlnL2xpYmE1Mi9jb25maWd1cmUuaW5jbAkyMDEwLTAyLTIzIDE0OjUxOjQ0LjAwMDAwMDAwMCArMDAwMAorKysrIGE1MmRlYy0wLjcuNC9saWJhNTIvY29uZmlndXJlLmluY2wJMjAxMC0wMi0yMyAxNDo1MTo1OS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDkgKzEsNiBAQAorIEFDX1NVQlNUKFtMSUJBNTJfQ0ZMQUdTXSkKKyBBQ19TVUJTVChbTElCQTUyX0xJQlNdKQorIAorLWRubCBhdm9pZCAtZlBJQyB3aGVuIHBvc3NpYmxlCistTElCQTUyX0NGTEFHUz0iJExJQkE1Ml9DRkxBR1MgLXByZWZlci1ub24tcGljIgorLQorIEFDX0FSR19FTkFCTEUoW2RvdWJsZV0sCisgICAgIFsgIC0tZW5hYmxlLWRvdWJsZSAgICAgICAgIHVzZSBkb3VibGUtcHJlY2lzaW9uIHNhbXBsZXNdKQorIGlmIHRlc3QgeCIkZW5hYmxlX2RvdWJsZSIgPSB4InllcyI7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Ml8wLjcuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Ml8wLjcuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI2NmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyXzAuNy40LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQVRTQyBBLzUyIHN1cnJvdW5kIHNvdW5kIHN0cmVhbSBkZWNvZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmE1Mi5zb3VyY2Vmb3JnZS5uZXQvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisJCQlmaWxlOi8vaW5jbHVkZS9hNTIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT04MTE1MmNlYjM1NjJiZjIwYTYwZDFiNjAxODE3NWRkMSIKK1NFQ1RJT04gPSAibGlicyIKK1BSID0gInI0IgorCitpbmhlcml0IGF1dG90b29scworCitTUkNfVVJJID0gImh0dHA6Ly9saWJhNTIuc291cmNlZm9yZ2UubmV0L2ZpbGVzL2E1MmRlYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYnVpbGRjbGVhbnVwLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2FhOWY1YmM0NDIzMmRjOGFlZWE3NzNmZWE1NmJlODAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTIxZDcyNGFiM2IzOTMzMzMwMTk0MzUzNjg3ZGY4MmM0NzViNWRmYjk5NzUxM2VlZjRjMjVkZTZjODY1ZWMzMyIKK1MgPSAiJHtXT1JLRElSfS9hNTJkZWMtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtc2hhcmVkICIKKworUEFDS0FHRVMgPSsgImE1MmRlYyBhNTJkZWMtZG9jIgorCitGSUxFU19hNTJkZWMgPSAiICR7YmluZGlyfS8qICIKK0ZJTEVTX2E1MmRlYy1kb2MgPSAiICR7bWFuZGlyfS9tYW4xLyogIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y0YjFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMKQEAgLTAsMCArMSwxNDYgQEAKK1NVTU1BUlkgPSAiT3BlbiBzb3VyY2UgYXVkaW8gYW5kIHZpZGVvIHByb2Nlc3NpbmcgdG9vbHMgYW5kIGxpYnJhaXJpZXMiCitERVNDUklQVElPTiA9ICJMaWJhdiBpcyBhIGZyaWVuZGx5IGFuZCBjb21tdW5pdHktZHJpdmVuIGVmZm9ydCB0byBwcm92aWRlIGl0cyB1c2VycyBcCisgICAgICAgICAgICAgICB3aXRoIGEgc2V0IG9mIHBvcnRhYmxlLCBmdW5jdGlvbmFsIGFuZCBoaWdoLXBlcmZvcm1hbmNlIGxpYnJhcmllcyBmb3IgXAorICAgICAgICAgICAgICAgZGVhbGluZyB3aXRoIG11bHRpbWVkaWEgZm9ybWF0cyBvZiBhbGwgc29ydHMuIEl0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgXAorICAgICAgICAgICAgICAgRkZtcGVnIGNvZGViYXNlLCBidXQgZ29lcyBpdHMgb3duIHdheSB0aGVzZSBkYXlzLCBwcm92aWRpbmcgaXRzIHVzZXJzIFwKKyAgICAgICAgICAgICAgIHdpdGggcmVsaWFibGUgcmVsZWFzZXMgYW5kIGEgY2xlYXIgdmlzaW9uIGhvdyB0byBnbyBmb3J3YXJkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJhdi5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJhdi5vcmcvcmVsZWFzZXMvJHtCUH0udGFyLnh6IgorCisjIFByb3ZpZGVzIGZmbXBlZyBjb21wYXQsIHNlZSBodHRwOi8vbGliYXYub3JnL2Fib3V0Lmh0bWwKK1BST1ZJREVTID0gImZmbXBlZyIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0RFUEVORFMgPSAiYWxzYS1saWIgemxpYiBsaWJvZ2cgeWFzbS1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCID0gIiR7U30vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworRlVMTF9PUFRJTUlaQVRJT05fYXJtdjdhID0gIi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU80IC1mZmFzdC1tYXRoIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIiR7RlVMTF9PUFRJTUlaQVRJT059IgorCitFWFRSQV9GRkNPTkZfYXJtdjdhID0gIi0tY3B1PWNvcnRleC1hOCIKK0VYVFJBX0ZGQ09ORiA/PSAiIgorCitQQUNLQUdFQ09ORklHID8/PSAiYnppcDIgeDI2NCB0aGVvcmEgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0tZW5hYmxlLWJ6bGliLC0tZGlzYWJsZS1iemxpYixiemlwMiIKK1BBQ0tBR0VDT05GSUdbZmFhY10gPSAiLS1lbmFibGUtbGliZmFhYywtLWRpc2FibGUtbGliZmFhYyxmYWFjIgorUEFDS0FHRUNPTkZJR1tnc21dID0gIi0tZW5hYmxlLWxpYmdzbSwtLWRpc2FibGUtbGliZ3NtLGxpYmdzbSIKK1BBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtaW5kZXY9amFjaywtLWRpc2FibGUtaW5kZXY9amFjayxqYWNrIgorUEFDS0FHRUNPTkZJR1tsaWJ2b3JiaXNdID0gIi0tZW5hYmxlLWxpYnZvcmJpcywtLWRpc2FibGUtbGlidm9yYmlzLGxpYnZvcmJpcyIKK1BBQ0tBR0VDT05GSUdbbXAzbGFtZV0gPSAiLS1lbmFibGUtbGlibXAzbGFtZSwtLWRpc2FibGUtbGlibXAzbGFtZSxsYW1lIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW3NjaHJvZWRpbmdlcl0gPSAiLS1lbmFibGUtbGlic2Nocm9lZGluZ2VyLC0tZGlzYWJsZS1saWJzY2hyb2VkaW5nZXIsc2Nocm9lZGluZ2VyIgorUEFDS0FHRUNPTkZJR1tzcGVleF0gPSAiLS1lbmFibGUtbGlic3BlZXgsLS1kaXNhYmxlLWxpYnNwZWV4LHNwZWV4IgorUEFDS0FHRUNPTkZJR1t0aGVvcmFdID0gIi0tZW5hYmxlLWxpYnRoZW9yYSwtLWRpc2FibGUtbGlidGhlb3JhLGxpYnRoZW9yYSIKK1BBQ0tBR0VDT05GSUdbdmFhcGldID0gIi0tZW5hYmxlLXZhYXBpLC0tZGlzYWJsZS12YWFwaSxsaWJ2YSIKK1BBQ0tBR0VDT05GSUdbdnB4XSA9ICItLWVuYWJsZS1saWJ2cHgsLS1kaXNhYmxlLWxpYnZweCxsaWJ2cHgiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExZ3JhYiwtLWRpc2FibGUteDExZ3JhYix2aXJ0dWFsL2xpYngxMSBsaWJ4Zml4ZXMgbGlieGV4dCB4cHJvdG8gdmlydHVhbC9saWJzZGwiCitQQUNLQUdFQ09ORklHW3gyNjRdID0gIi0tZW5hYmxlLWxpYngyNjQsLS1kaXNhYmxlLWxpYngyNjQseDI2NCIKKworIyBDaGVjayBjb2RlY3MgdGhhdCByZXF1aXJlIC0tZW5hYmxlLW5vbmZyZWUKK1VTRV9OT05GUkVFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgnUEFDS0FHRUNPTkZJRycsIFsgJ2ZhYWMnLCAnb3BlbnNzbCcgXSwgJ3llcycsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgIC0tZW5hYmxlLWdwbCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRV9OT05GUkVFJywgJ3llcycsICctLWVuYWJsZS1ub25mcmVlJywgJycsIGQpfSBcCisgICAgLS1lbmFibGUtYXZmaWx0ZXIgXAorICAgIFwKKyAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIFwKKyAgICAtLWVuYWJsZS1hdnNlcnZlciBcCisgICAgLS1lbmFibGUtYXZwbGF5IFwKKyAgICAtLWxkPSIke0NDTER9IiBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tZW5hYmxlLWhhcmRjb2RlZC10YWJsZXMgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKKyAgICAtLXNobGliZGlyPSR7bGliZGlyfSBcCisiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAjIFdlIGRvbid0IGhhdmUgVEFSR0VUX1BSRUZJWC1wa2djb25maWcKKyAgICBzZWQgLWkgJy9wa2dfY29uZmlnX2RlZmF1bHQ9IiR7Y3Jvc3NfcHJlZml4fSR7cGtnX2NvbmZpZ19kZWZhdWx0fSIvZCcgJHtTfS9jb25maWd1cmUKKyAgICBta2RpciAtcCAke0J9CisgICAgY2QgJHtCfQorICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorICAgIHNlZCAtaSAtZSBzOk9zOk80OmcgJHtCfS9jb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9saWJhdmZpbHRlci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vbGliYXZmaWx0ZXIvCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS12aG9vay1kYmcgJHtQTn0tdmhvb2sgZmZtcGVnLXgyNjQtcHJlc2V0cyIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIoYXYoY29kZWN8ZGV2aWNlfGZpbHRlcnxmb3JtYXR8dXRpbCl8c3dzY2FsZSkuKiIKKworUlNVR0dFU1RTXyR7UE59ID0gIm1wbGF5ZXIiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS8ke1BOfSIKKworRklMRVNfJHtQTn0tdmhvb2sgPSAiJHtsaWJkaXJ9L3Zob29rIgorRklMRVNfJHtQTn0tdmhvb2stZGJnICs9ICIke2xpYmRpcn0vdmhvb2svLmRlYnVnIgorCitGSUxFU19mZm1wZWcteDI2NC1wcmVzZXRzID0gIiR7ZGF0YWRpcn0vKi5hdnByZXNldCIKKworTEVBRF9TT05BTUUgPSAibGliYXZjb2RlYy5zbyIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0iCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGF2X2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGF2X3BrZ2NvbmZpZyA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGtnY29uZmlnJykKKworICAgICMgUnVudGltZSBwYWNrYWdlCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvXC4uKicsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworICAgICMgRGV2ZWxvcG1lbnQgcGFja2FnZXMgKC1kZXYsIC1zdGF0aWNkZXYpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLnNvJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpbmtzPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfcGtnY29uZmlnLCAnXmxpYiguKilcLnBjJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLWRldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JyR7UE59LWRldicsCisgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZD1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGF2X2xpYmRpciwgJ15saWIoLiopXC5hJCcsCisgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49J2xpYiVzLXN0YXRpY2RldicsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2xpYmF2ICVzIGRldmVsb3BtZW50IHBhY2thZ2UgLSBzdGF0aWMgbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKworICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ2k1ODYnLCAnaTY4NicgXToKKyAgICAgICAgIyBsaWJhdiBjYW4ndCBiZSBidWlsZCB3aXRoIC1mUElDIGZvciAzMi1iaXQgeDg2CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdJTlNBTkVfU0tJUF8lcycgJSBwa2csICcgdGV4dHJlbCcpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2L2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTMxY2FhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBDVkUtMjAxNC05Njc2LgorCitodHRwczovL3NlY3VyaXR5LXRyYWNrZXIuZGViaWFuLm9yZy90cmFja2VyL0NWRS0yMDE0LTk2NzYKK2h0dHBzOi8vZ2l0LmxpYmF2Lm9yZy8/cD1saWJhdi5naXQ7YT1jb21taXQ7aD1iM2YwNDY1NzM2OGEzMmE5OTAzNDA2Mzk1Zjg2NWUyMzBiMWRlMzQ4CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIGIzZjA0NjU3MzY4YTMyYTk5MDM0MDYzOTVmODY1ZTIzMGIxZGUzNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMdWNhIEJhcmJhdG8gPGx1X3plcm9AZ2VudG9vLm9yZz4KK0RhdGU6IE1vbiwgNSBKYW4gMjAxNSAxMDo0MDo0MSArMDEwMAorU3ViamVjdDogW1BBVENIXSBzZWdtZW50OiBGaXggdGhlIGZhaWx1cmUgcGF0aHMKKworQSBmYWlsdXJlIGluIHNlZ21lbnRfZW5kKCkgb3Igc2VnbWVudF9zdGFydCgpIHdvdWxkIGxlYWQgdG8gZnJlZWluZworYSBkYW5nbGluZyBwb2ludGVyIGFuZCBpbiBnZW5lcmFsIGZ1cnRoZXIgY2FsbHMgdG8gc2VnX3dyaXRlX3BhY2tldCgpCitvciB0byBzZWdfd3JpdGVfdHJhaWxlcigpIHdvdWxkIGhhdmUgdGhlIHNhbWUgZmF1bHR5IGJlaGF2aW91ci4KKworQ0M6IGxpYmF2LXN0YWJsZUBsaWJhdi5vcmcKK1JlcG9ydGVkLUJ5OiBsdW9kYWxvbmdkZUBnbWFpbC5jb20KKy0tLQorIGxpYmF2Zm9ybWF0L3NlZ21lbnQuYyB8IDMyICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvc2VnbWVudC5jIGIvbGliYXZmb3JtYXQvc2VnbWVudC5jCitpbmRleCA1MmRhNmI5Li5iY2ZkMWY5IDEwMDY0NAorLS0tIGEvbGliYXZmb3JtYXQvc2VnbWVudC5jCisrKysgYi9saWJhdmZvcm1hdC9zZWdtZW50LmMKK0BAIC0xODQsNiArMTg0LDEzIEBAIHN0YXRpYyB2b2lkIGNsb3NlX251bGxfY3R4KEFWSU9Db250ZXh0ICpwYikKKyAgICAgYXZfZnJlZShwYik7CisgfQorIAorK3N0YXRpYyB2b2lkIHNlZ19mcmVlX2NvbnRleHQoU2VnbWVudENvbnRleHQgKnNlZykKKyt7CisrICAgIGF2aW9fY2xvc2VwKCZzZWctPnBiKTsKKysgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHNlZy0+YXZmKTsKKysgICAgc2VnLT5hdmYgPSBOVUxMOworK30KKysKKyBzdGF0aWMgaW50IHNlZ193cml0ZV9oZWFkZXIoQVZGb3JtYXRDb250ZXh0ICpzKQorIHsKKyAgICAgU2VnbWVudENvbnRleHQgKnNlZyA9IHMtPnByaXZfZGF0YTsKK0BAIC0yNjUsMTIgKzI3Miw5IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCisgICAgIH0KKyAKKyBmYWlsOgorLSAgICBpZiAocmV0KSB7CistICAgICAgICBpZiAoc2VnLT5saXN0KQorLSAgICAgICAgICAgIGF2aW9fY2xvc2Uoc2VnLT5wYik7CistICAgICAgICBpZiAoc2VnLT5hdmYpCistICAgICAgICAgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHNlZy0+YXZmKTsKKy0gICAgfQorKyAgICBpZiAocmV0IDwgMCkKKysgICAgICAgIHNlZ19mcmVlX2NvbnRleHQoc2VnKTsKKysKKyAgICAgcmV0dXJuIHJldDsKKyB9CisgCitAQCAtMjgyLDYgKzI4Niw5IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCisgICAgIGludDY0X3QgZW5kX3B0cyA9IHNlZy0+cmVjb3JkaW5nX3RpbWUgKiBzZWctPm51bWJlcjsKKyAgICAgaW50IHJldCwgY2FuX3NwbGl0ID0gMTsKKyAKKysgICAgaWYgKCFvYykKKysgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisrCisgICAgIGlmIChzZWctPmhhc192aWRlbykgeworICAgICAgICAgY2FuX3NwbGl0ID0gc3QtPmNvZGVjLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTyAmJgorICAgICAgICAgICAgICAgICAgICAgcGt0LT5mbGFncyAmIEFWX1BLVF9GTEFHX0tFWTsKK0BAIC0zMjIsMTEgKzMyOSw4IEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3BhY2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCisgICAgIHJldCA9IGZmX3dyaXRlX2NoYWluZWQob2MsIHBrdC0+c3RyZWFtX2luZGV4LCBwa3QsIHMpOworIAorIGZhaWw6CistICAgIGlmIChyZXQgPCAwKSB7CistICAgICAgICBpZiAoc2VnLT5saXN0KQorLSAgICAgICAgICAgIGF2aW9fY2xvc2Uoc2VnLT5wYik7CistICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQob2MpOworLSAgICB9CisrICAgIGlmIChyZXQgPCAwKQorKyAgICAgICAgc2VnX2ZyZWVfY29udGV4dChzZWcpOworIAorICAgICByZXR1cm4gcmV0OworIH0KK0BAIC0zMzUsNyArMzM5LDExIEBAIHN0YXRpYyBpbnQgc2VnX3dyaXRlX3RyYWlsZXIoc3RydWN0IEFWRm9ybWF0Q29udGV4dCAqcykKKyB7CisgICAgIFNlZ21lbnRDb250ZXh0ICpzZWcgPSBzLT5wcml2X2RhdGE7CisgICAgIEFWRm9ybWF0Q29udGV4dCAqb2MgPSBzZWctPmF2ZjsKKy0gICAgaW50IHJldDsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmICghb2MpCisrICAgICAgICBnb3RvIGZhaWw7CisrCisgICAgIGlmICghc2VnLT53cml0ZV9oZWFkZXJfdHJhaWxlcikgeworICAgICAgICAgaWYgKChyZXQgPSBzZWdtZW50X2VuZChvYywgMCkpIDwgMCkKKyAgICAgICAgICAgICBnb3RvIGZhaWw7CistLSAKKzIuNC4xLjMxNC5nOTUzMmVhZAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2XzkuMTguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2XzkuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwYTY0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXZfOS4xOC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgbGliYXYuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NWU4MzgwNjhhNzVmYjg4ZTFiNGVhMDU0NmJjMTZmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwODc1ZTgzNWRhNjgzZWVmMWE3YmFjNzVlMTg4NDYzNDE5NDE0OWQ3NDc5ZDE1MzhiYTlmYmUxNjE0ZDA2NmQ3IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbGliYXYtZml4LUNWRS0yMDE0LTk2NzYucGF0Y2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGlicG9zdHByb2NfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYWE1MGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkZGbXBlZyBkZXJpdmVkIHBvc3Rwcm9jZXNzaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnZpZGVvbGFuLm9yZy8/cD1saWJwb3N0cHJvYy5naXQ7YT1zdW1tYXJ5IgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJhdiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKKyMgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGxpYmF2IHdoaWNoIGhhcyBjb21tZXJjaWFsIGZsYWcKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworUFYgPSAiNTIuMy4wK2dpdCR7U1JDUFZ9IgorCitTUkNSRVYgPSAiODExZGIzYjk1N2RmZGUyNGFlZjJkMGY4MmUyOTdlNWJmNTUyZDg3MyIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9sdS16ZXJvL3Bvc3Rwcm9jO3Byb3RvY29sPWh0dHBzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworRlVMTF9PUFRJTUlaQVRJT05fYXJtdjdhID0gIi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU80IC1mZmFzdC1tYXRoIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIiR7RlVMTF9PUFRJTUlaQVRJT059IgorCitFWFRSQV9GRkNPTkZfYXJtdjdhID0gIi0tY3B1PWNvcnRleC1hOCIKK0VYVFJBX0ZGQ09ORiA/PSAiIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAtLWVuYWJsZS1ncGwgXAorICAgIC0tZW5hYmxlLXBvc3Rwcm9jIFwKKyAgICBcCisgICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICBcCisgICAgLS1hcmNoPSR7VEFSR0VUX0FSQ0h9IFwKKyAgICAtLXRhcmdldC1vcz0ibGludXgiIFwKKyAgICAtLWVuYWJsZS1jcm9zcy1jb21waWxlIFwKKyAgICAtLWV4dHJhLWNmbGFncz0iJHtUQVJHRVRfQ0ZMQUdTfSAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIgXAorICAgIC0tZXh0cmEtbGRmbGFncz0iJHtUQVJHRVRfTERGTEFHU30iIFwKKyAgICAtLXN5c3Jvb3Q9IiR7U1RBR0lOR19ESVJfVEFSR0VUfSIgXAorICAgIC0tc2hsaWJkaXI9IiR7bGliZGlyfSIgXAorICAgICR7RVhUUkFfRkZDT05GfSBcCisiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAke1N9L2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9hZGRwa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvYWRkcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZDQwYzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvYWRkcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWQzdGFnLTAuMTUuMWIub3JpZy9NYWtlZmlsZS5hbQkyMDA5LTA3LTI5IDA5OjI5OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL01ha2VmaWxlLmFtCTIwMDktMDctMjkgMDk6Mjk6NDcuMDAwMDAwMDAwICswMTAwCitAQCAtMjcsNiArMjcsOSBAQAorIGxpYl9MVExJQlJBUklFUyA9CWxpYmlkM3RhZy5sYQorIGluY2x1ZGVfSEVBREVSUyA9CWlkM3RhZy5oCisgCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gaWQzdGFnLnBjCisrCisgIyMgRnJvbSB0aGUgbGlidG9vbCBkb2N1bWVudGF0aW9uIG9uIGxpYnJhcnkgdmVyc2lvbmluZzoKKyAjIworICMjIENVUlJFTlQKK0luZGV4OiBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZDN0YWctMC4xNS4xYi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTI5IDA5OjI3OjE1LjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTI5IDA5OjI3OjQ1LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwMSw1ICsyMDEsNSBAQAorIGRubCBBQ19TVUJTVChMVExJQk9CSlMpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtc3ZjKysvTWFrZWZpbGUgIFwKKy0JbGliaWQzdGFnLmxpc3RdKQorKwlsaWJpZDN0YWcubGlzdCBpZDN0YWcucGNdKQorIEFDX09VVFBVVAorSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL2lkM3RhZy5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2lkM3RhZy5wYy5pbgkyMDA5LTA3LTI5IDA5OjI5OjEwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IGlkM3RhZworK0Rlc2NyaXB0aW9uOiBJRDMgdGFnIHJlYWRpbmcgbGlicmFyeQorK1JlcXVpcmVzOgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1saWQzdGFnIC1segorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ1ZmIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTM1OTkyODAmZ3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDldCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYyBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMKKy0tLSBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwNC0wMS0yNCAwMToyMjo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJpZDN0YWctMC4xNS4xYi9jb25maWd1cmUuYWMJMjAxMy0wMS0wMyAwNjo0MTowMi43MzQ4MzUwMTQgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBACisKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIGRubCBTeXN0ZW0gdHlwZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnXzAuMTUuMWIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOGE0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBJRDMgdGFncyBpbiBNUDMgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21hZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDkiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTVlNjI3OWVmYjg3YzI2YzZlNWU3YTY4MzE3YTZhODdhIFwKKwkJCWZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT04NmFjNjhiNjdmMDU0YjdhZmRlOWUxNDliYmMzZmU2MyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiemxpYiBncGVyZi1uYXRpdmUiCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWFycy5vcmcvcHViL21wZWcvbGliaWQzdGFnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRwa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImU1ODA4YWQ5OTdiYTMyYzQ5ODgwMzgyMjA3ODc0OGMzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzZGE0ZjZlNzk5NzI3OGY4YTNmZWY0YzZhMzcyZDM0MmY3MDUwNTFkMWVlYjZhNDZhODZiMDM2MTBlMjYxNTEiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpZDN0YWctJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYWRkLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDlkYzhjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorSGVyZSBpcyBhIHBhdGNoIGZvciBhZGRpbmcgcGtnLWNvbmZpZyBzdXBwb3J0IHRvIGxpYm1hZC4KK0l0IHdvdWxkIG1ha2UgbGlmZSBhIGJpdCBlYXNpZXIgZm9yIGRpc3RybyBtYWludGFpbmVycyBpZiB0aGlzIHdhcyBhcHBsaWVkLgorSW4gY2FzZSB5b3UgZGlkbid0IGtub3csIHBrZy1jb25maWcgaXMgYSB0b29sIGZvciBwcm92aWRpbmcgTERGTEFHUyBhbmQKK0NGTEFHUyBmb3IgcGFja2FnZXMgdXNpbmcgc2hhcmVkIGxpYnJhcmllcy4gSXQncyBvbiBmcmVlZGVza3RvcC5vcmcuCitEZWJpYW4gaGFzIGFscmVhZHkgYmVlbiBkaXN0cmlidXRpbmcgdGhlIHBrZy1jb25maWcgZmlsZSBtYWQucGMgd2l0aAorbGlibWFkIGZvciBzb21lIHRpbWUsIGFuZCBwZW9wbGUgZGV2ZWxvcGluZyBvbiBkZWJpYW4gKG5vdGFibHkgeG1tczIgCitkZXZlbG9wZXJzKSBoYXZlIHN0YXJ0ZWQgcmVseWluZyBvbiB0aGlzIHN1cHBvcnQgYmVpbmcgcHJlc2VudCwgY2F1c2luZworc29tZSBjb25mdXNpb24gZm9yIHBlb3BsZSBpbnN0YWxsaW5nIGZyb20gc291cmNlIGFuZCBvbiBzb21lIEJTRHMgd2hpY2gKK2RvIG5vdCBwcm92aWRlIG1hZC5wYyAoZ29vZ2xlOiBwa2djb25maWcgbGlibWFkKS4KKworRU1ICisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS1oMzFnelpFdE5MVHFPamxGCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSZxdW90O2xpYm1hZC0wLjE1LjFiLXBrZ2NvbmZpZy5wYXRjaCZxdW90OworCitkaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCistLS0gbGlibWFkLTAuMTUuMWIub2xkL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTIzIDEwOjQxOjMyLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTA4LTA3IDAyOjI1OjI0LjYzMzQ2MjE2OCArMDIwMAorQEAgLTQyOSw1ICs0MjksNSBAQAorIGRubCBBQ19TVUJTVChMVExJQk9CSlMpCisgCisgQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZSBtc3ZjKysvTWFrZWZpbGUgIFwKKy0JbGlibWFkLmxpc3RdKQorKwlsaWJtYWQubGlzdCBtYWQucGNdKQorIEFDX09VVFBVVAorZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvbWFkLnBjLmluIGxpYm1hZC0wLjE1LjFiL21hZC5wYy5pbgorLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9tYWQucGMuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9tYWQucGMuaW4JMjAwNC0wOC0wNyAwMjowNDo1OS42MTc2OTI4NzIgKzAyMDAKK0BAIC0wLDAgKzEsMTQgQEAKKysjIGxpYm1hZCBwa2ctY29uZmlnIHNvdXJjZSBmaWxlCisrCisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogbWFkCisrRGVzY3JpcHRpb246IE1QRUcgQXVkaW8gRGVjb2RlcgorK1ZlcnNpb246IEBWRVJTSU9OQAorK1JlcXVpcmVzOgorK0NvbmZsaWN0czoKKytMaWJzOiAtTCR7bGliZGlyfSAtbG1hZCAtbG0KKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorZGlmZiAtTmF1ciBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0gbGlibWFkLTAuMTUuMWIvTWFrZWZpbGUuYW0KKy0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvTWFrZWZpbGUuYW0JMjAwNC0wMi0xNyAwMzowMjowMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9NYWtlZmlsZS5hbQkyMDA0LTA4LTA3IDAyOjAzOjE5Ljg1OTg1ODM2OCArMDIwMAorQEAgLTI0LDYgKzI0LDkgQEAKKyBTVUJESVJTID0JCQorIERJU1RfU1VCRElSUyA9CQltc3ZjKysKKyAKKytwa2djb25maWdkaXIgPQkJJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0JbWFkLnBjCisrCisgbGliX0xUTElCUkFSSUVTID0JbGlibWFkLmxhCisgaW5jbHVkZV9IRUFERVJTID0JbWFkLmgKKyAKK0BAIC0zNCw3ICszNyw4IEBACisgbWluaW1hZF9MREFERCA9CQlsaWJtYWQubGEKKyAKKyBFWFRSQV9ESVNUID0JCW1hZC5oLnNlZCAgXAorLQkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTgorKwkJCUNIQU5HRVMgQ09QWVJJR0hUIENSRURJVFMgUkVBRE1FIFRPRE8gVkVSU0lPTiBcCisrCQkJbWFkLnBjLmluCisgCisgZXhwb3J0ZWRfaGVhZGVycyA9CXZlcnNpb24uaCBmaXhlZC5oIGJpdC5oIHRpbWVyLmggc3RyZWFtLmggZnJhbWUuaCAgXAorIAkJCXN5bnRoLmggZGVjb2Rlci5oCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1NDQyNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Bhc3MgZm9yZWlnbiB0byBBTV9JTklUX0FVVE9NQUtFIHNvIGl0IGRvZXNuJ3QgZW5mb3JjZSBHTlUgc3RyaWN0bmVzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNjAyZmQzLi5lMDc1Yjg2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yOSArMjkgQEAgQUNfQ09ORklHX1NSQ0RJUihbZGVjb2Rlci5oXSkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWM3YWEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitnY2MgNC40IGRpZCB0aGlzOiBUaGUgTUlQUyBwb3J0IG5vIGxvbmdlciByZWNvZ25pemVzIHRoZSBoICBhc20gY29uc3RyYWludC4gSXQgd2FzIG5lY2Vzc2FyeSB0byByZW1vdmUgdGhpcyBjb25zdHJhaW50IGluIG9yZGVyIHRvIGF2b2lkIGdlbmVyYXRpbmcgdW5wcmVkaWN0YWJsZSBjb2RlIHNlcXVlbmNlcy4gCisKK3NvIHRoZSBsaWJtYWQgYnVpbGQgd2l0aCBnY2MtNC41LjAgd2FzIGZhaWxpbmcuCisKK0ZvdW5kIGEgc29sdXRpb24gaGVyZToKKworaHR0cDovL3VzLmdlbmVyYXRpb24tbnQuY29tL2Fuc3dlci9idWctNTY4NDE4LWxpYm1hZDAtZGV2LW1wZzMyMS1jb21waWxhdGlvbi1lcnJvcnMtbWlwcy1taXBzZWwtYXJjaGl0ZWN0dXJlcy1oZWxwLTE2OTAzMzQ1MS5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisyMDEwLzA3LzI5CitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogbGlibWFkLTAuMTUuMWIvZml4ZWQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm1hZC0wLjE1LjFiLm9yaWcvZml4ZWQuaAorKysrIGxpYm1hZC0wLjE1LjFiL2ZpeGVkLmgKK0BAIC0yOTcsNiArMjk3LDE1IEBAIG1hZF9maXhlZF90IG1hZF9mX211bF9pbmxpbmUobWFkX2ZpeGVkX3QKKyAKKyAvKiAtLS0gTUlQUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgCisrIyBlbGlmIGRlZmluZWQoRlBNX01JUFMpICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gNCkpCisrICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHU2NF9kaV90IF9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKKysjICAgZGVmaW5lIE1BRF9GX01MWChoaSwgbG8sIHgsIHkpIFwKKysgICAgZG8geyBcCisrICAgICAgICB1NjRfZGlfdCBfX2xsID0gKHU2NF9kaV90KSAoeCkgKiAoeSk7IFwKKysgICAgICAgIGhpID0gX19sbCA+PiAzMjsgXAorKyAgICAgICAgbG8gPSBfX2xsOyBcCisrICAgICB9IHdoaWxlICgwKQorKworICMgZWxpZiBkZWZpbmVkKEZQTV9NSVBTKQorIAorIC8qCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWU2ZDIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL25vLWZvcmNlLW1lbS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitUaGlzIG9wdGlvbiBubyBsb25nZXIgZXhpc3RzIGluIGdjYyAzLjQuMQorCitSUCAtIDE4LzA3LzIwMDgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibWFkLTAuMTUuMWIub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwOC0wNy0xOCAxNTo0NTozNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNDAsNyArMTQwLDYgQEAKKyAgICAgY2FzZSAiJG9wdGltaXplIiBpbgorIAktT3wiLU8gIiopCisgCSAgICBvcHRpbWl6ZT0iLU8iCistCSAgICBvcHRpbWl6ZT0iJG9wdGltaXplIC1mZm9yY2UtbWVtIgorIAkgICAgb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmZvcmNlLWFkZHIiCisgCSAgICA6ICN4IG9wdGltaXplPSIkb3B0aW1pemUgLWZpbmxpbmUtZnVuY3Rpb25zIgorIAkgICAgOiAjLSBvcHRpbWl6ZT0iJG9wdGltaXplIC1mc3RyZW5ndGgtcmVkdWNlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4N2QyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCistLS0gbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDEtMjMgMTE6NDE6MzIuMDAwMDAwMDAwICswMjAwCisrKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMTMtMDEtMDMgMDg6Mjg6MjMuNzE4NjkzNjk3ICswMjAwCitAQCAtMjgsNyArMjgsNyBAQAorCisgQU1fSU5JVF9BVVRPTUFLRQorCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyBkbmwgU3lzdGVtIHR5cGUuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZF8wLjE1LjFiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDhiMTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk1QRUcgQXVkaW8gRGVjb2RlciBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tYWQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTEyMzQ5JmF0aWQ9MTEyMzQ5IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCQlmaWxlOi8vQ09QWVJJR0hUO21kNT04ZTU1ZWIxNDg5NGU3ODJiODQ0ODhkNWEyMzliYzIzZCBcCisJCQlmaWxlOi8vdmVyc2lvbi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9YWEwNzMxMWRkMzkyODhkNDM0OWYyOGUxZGU1MTY0NTQiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYmlkM3RhZyIKK1BSID0gInIzIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5tYXJzLm9yZy9wdWIvbXBlZy9saWJtYWQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLWZvcmNlLW1lbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfbWlwc193aXRoX2djYy00LjUuMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYmU1NDNiYzMwYzU2ZmI2YmVhMWQ3YmY2YTY0ZTY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmZhYzNlZDZiZmJjMjgyM2QzNzc1ZWJiOTMxMDg3MzcxZTE0MmJiMGU5YmIxYmVlNTFhNzZhNmUwMDc4NjkwIiAKKworUyA9ICIke1dPUktESVJ9L2xpYm1hZC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItZW5hYmxlLXNwZWVkIC0tZW5hYmxlLXNoYXJlZCIKKyMgVGhlIEFTTydzIGRvbid0IHRha2UgYW55IGFjY291bnQgb2YgdGh1bWIuLi4KK0VYVFJBX09FQ09ORl9hcHBlbmRfdGh1bWIgPSAiIC0tZGlzYWJsZS1hc28gLS1lbmFibGUtZnBtPWRlZmF1bHQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIgLS1lbmFibGUtZnBtPWFybSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworIwlkYW1uIHBpY2t5IGF1dG9tYWtlLi4uCisJdG91Y2ggTkVXUyBBVVRIT1JTIENoYW5nZUxvZworfQorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib2dnL2xpYm9nZ18xLjMuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib2dnL2xpYm9nZ18xLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQyZTBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvZ2cvbGlib2dnXzEuMy4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiT2dnIGJpdHN0cmVhbSBhbmQgZnJhbWluZyBsaWJhcnkiCitERVNDUklQVElPTiA9ICJsaWJvZ2cgaXMgdGhlIGJpdHN0cmVhbSBhbmQgZnJhbWluZyBsaWJyYXJ5IFwKK2ZvciB0aGUgT2dnIHByb2plY3QuIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucyB3aGljaCBhcmUgXAorbmVjZXNzYXJ5IHRvIGNvZGVjIGxpYnJhcmllcyBsaWtlIGxpYnZvcmJpcy4iCitIT01FUEFHRSA9ICJodHRwOi8veGlwaC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3RyYWMueGlwaC5vcmcvbmV3dGlja2V0IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kYjFiN2E2NjhiMmE2ZjQ3YjJhZjg4ZmIwMDhhZDU1NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL29nZy9vZ2cuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1lZGE4MTI4NTZmMTNhM2IxMzI2ZWI4ZjAyMGNjM2IwYiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL29nZy8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YzNhMzQzMDlkOGI5ODY0MDgyN2U1ZDA5OTFhNDAxNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZjY4N2NjZGQ1YWM4YjUyZDc2MzI4ZmJiZmViYzcwYzQ1OWE0MGVhODkxZGJmM2RjY2I3NGEyMTA4MjZlNzliIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvY29uZmlndXJlLWZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvY29uZmlndXJlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzZlODBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1RvIGVuYWJsZSAtLWRpc2FibGUtV2Vycm9yIGZvciBsaWJvbXhpbCB0byBhdm9pZCBzb21lIGNvbXBpbGVycyB3aGljaCBjaGVjayBjb2RlIHN0cmljdGx5LgorCitGb3IgZXhhbXBsZSwgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBlcnJvcnMgaGFwcGVuZWQgdG8gc29tZSBjb21waWxlcnM6CisKKzEpIE9NWF9JTkRFWFRZUEUgaW4gaW5jbHVkZS9PTVhfSW5kZXguaCBJUyBOT1QgT01YX0lOREVYVkVORE9SVFlQRSBpbiBzcmMvYmFzZS9vbXhfYmFzZV9jb21wb25lbnQuaAorfCBpNTg2LXBva3ktbGludXgtbGlidG9vbDogY29tcGlsZTogIGk1ODYtcG9reS1saW51eC1nY2MgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUveW9jdG8tYnVpbGQ1L3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVdlcnJvciAtRENPTkZJR19ERUJVR19MRVZFTD0wIC1jIE9NWENvbXBvbmVudFJNRXh0LmMgIC1mUElDIC1EUElDIC1vIC5saWJzL2xpYm9teGJhc2VfbGEtT01YQ29tcG9uZW50Uk1FeHQubworfCBvbXhfYmFzZV9jb21wb25lbnQuYzogSW4gZnVuY3Rpb24gJ29teF9iYXNlX2NvbXBvbmVudF9HZXRQYXJhbWV0ZXInOgorfCBvbXhfYmFzZV9jb21wb25lbnQuYzo5OTE6MzogZXJyb3I6IGNhc2UgdmFsdWUgJzIxMzA3MDY0MzUnIG5vdCBpbiBlbnVtZXJhdGVkIHR5cGUgJ09NWF9JTkRFWFRZUEUnIFstV2Vycm9yPXN3aXRjaF0KK3wgb214X2Jhc2VfY29tcG9uZW50LmM6OTE4OjM6IGVycm9yOiBjYXNlIHZhbHVlICcyMTMwNzA2NDM2JyBub3QgaW4gZW51bWVyYXRlZCB0eXBlICdPTVhfSU5ERVhUWVBFJyBbLVdlcnJvcj1zd2l0Y2hdCisKKzIpCit8IGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUveW9jdG8tYnVpbGQ1L3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uICAgIC1ET01YSUxDT01QT21pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLVdhbGwgLVdlcnJvciAtRENPTkZJR19ERUJVR19MRVZFTD0wIC1jIC1vIG9teHJlZ2lzdGVyX2JlbGxhZ2lvLW9teHJlZ2lzdGVyLm8gYHRlc3QgLWYgJ29teHJlZ2lzdGVyLmMnIHx8IGVjaG8gJy4vJ2BvCit8IG9teHJlZ2lzdGVyLmM6IEluIGZ1bmN0aW9uICdidWlsZENvbXBvbmVudHNMaXN0JzoKK3wgb214cmVnaXN0ZXIuYzoxNzU6NzogZXJyb3I6IHZhcmlhYmxlICdlcnInIHNldCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWJ1dC1zZXQtdmFyaWFibGVdCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgODJkNzQyZDNlYTkwIGNvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCVR1ZSBEZWMgMjcgMTU6MzA6MzUgMjAxMSArMDgwMAorKysrIGIvY29uZmlndXJlLmFjCVR1ZSBEZWMgMjcgMTY6MjY6MDMgMjAxMSArMDgwMAorQEAgLTUsNyArNSw3IEBACisgQUNfUFJFUkVRKFsyLjU5XSkKKyAKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorLUNGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXJyb3IiCisrQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwiCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFNldCB0aGUgc2hhcmVkIHZlcnNpb25pbmcgaW5mbywgYWNjb3JkaW5nIHRvIHNlY3Rpb24gNi4zIG9mIHRoZSBsaWJ0b29sIGluZm8gIworQEAgLTEyMiw2ICsxMjIsMTQgQEAKKyAgICAgW3dpdGhfYW5kcm9pZD0kZW5hYmxldmFsXSwKKyAgICAgW3dpdGhfYW5kcm9pZD1ub10pCisgCisrQUNfQVJHX0VOQUJMRSgKKysgICAgW1dlcnJvcl0sCisrICAgIFtBQ19IRUxQX1NUUklORygKKysgICAgICAgIFstLWRpc2FibGUtV2Vycm9yXSwKKysgICAgICAgIFt3aGV0aGVyIHRvIGRpYWJsZSB0cmVhdGluZyBnY2Mgd2FybmluZ3MgYXMgZXJyb3JzXSldLAorKyAgICBbd2l0aF9XZXJyb3I9JGVuYWJsZXZhbF0sCisrICAgIFt3aXRoX1dlcnJvcj15ZXNdKQorKworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBDaGVjayBmb3IgcHJvZ3JhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTE5Myw2ICsyMDEsMTAgQEAKKyAgQ0ZHX0RFQlVHX0xFVkVMPTI1NQorIGZpCisgCisraWYgdGVzdCAieCR3aXRoX1dlcnJvciIgPSAieHllcyI7IHRoZW4KKysgQ0ZMQUdTPSIke0NGTEFHU30gLVdlcnJvciIKKytmaQorKworIEFDX1NVQlNUKENGR19ERUJVR19MRVZFTCkKKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtRENPTkZJR19ERUJVR19MRVZFTD0kQ0ZHX0RFQlVHX0xFVkVMIgorIApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2Rpc2FibGUtc28tdmVyc2lvbmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDA4ZTRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRGlzYWJsZSBzbyB2ZXJzaW9uaW5nIHNpbmNlIHRoZXkgYXJlIHJlYWxseSBub3QgYSB2ZXJzaW9uZWQgc2hhcmVkIGxpYi4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgQCBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL29teGlsL2J1Z3MvNTkvCisKK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CisKK2RpZmYgLXJ1YiBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQorLS0tIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjIyOjAwLjg1ODQyNTIzNCAtMDQwMAorKysrIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zL3NyYy9jb21wb25lbnRzL2F1ZGlvX2VmZmVjdHMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyNTo0Mi42ODc1MjUyMjUgLTA0MDAKK0BAIC0xMCw0ICsxMCw1IEBACisgbGlib214YXVkaW9fZWZmZWN0c19sYV9DRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgCQkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAkJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UKKytsaWJvbXhhdWRpb19lZmZlY3RzX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorIAorZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0KKy0tLSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL2Nsb2Nrc3JjL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODU4NDI1MjM0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyNDo0OS4xNTEyNTk3NTMgLTA0MDAKK0BAIC0xMCw0ICsxMCw0IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZQorLQorK2xpYm9teGNsb2Nrc3JjX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0gbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0KKy0tLSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy1vcmlnL3NyYy9jb21wb25lbnRzL3ZpZGVvc2NoZWR1bGVyL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODYyNDI1MjU0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjozNi40NjI2MDE3ODYgLTA0MDAKK0BAIC02LDcgKzYsNyBAQAorIAkJCQkJCQkJbGlicmFyeV9lbnRyeV9wb2ludC5jCisgCisgbGlib214dmlkZW9zY2hlZF9sYV9MSUJBREQgPSAkKHRvcF9idWlsZGRpcikvc3JjL2xpYm9teGlsLWJlbGxhZ2lvLmxhCistbGlib214dmlkZW9zY2hlZF9sYV9MREZMQUdTID0gCisrbGlib214dmlkZW9zY2hlZF9sYV9MREZMQUdTID0gLWF2b2lkLXZlcnNpb24KKyBsaWJvbXh2aWRlb3NjaGVkX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9keW5hbWljbG9hZGVyLWxpbmtpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3OTUzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgbGluayBpc3N1ZSB3aGVuIGxpYm9teGR5bmFtaWNsb2FkZXIuc28gaXMgbG9hZGVkIDoKK01pc3Npbmcgc3ltYm9sIFJNX0RlaW5pdC4KKworVGhpcyBwYXRjaCBjb21lcyBmcm9tICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9jZ2l0L2xpYm9teGlsLWJlbGxhZ2lvLmdpdC9jb21taXQvP2g9ZjE3JmlkPTQ5OTZhOTU4Mjg5NDNkMzQ1ZTUxZGVkNjg3NmMzMTAzNjUzZWVjZjgiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTw6liYXN0aWVuIE1lbm5ldHJpZXIgPHMubWVubmV0cmllckBpbm5vdGlzLm9yZz4KKworLS0tIGEvc3JjL2R5bmFtaWNfbG9hZGVyL01ha2VmaWxlLmFtCTIwMTQtMDItMjUgMTU6Mjk6MTAuMTI4NTQ5NjM2ICswMTAwCisrKysgYi9zcmMvZHluYW1pY19sb2FkZXIvTWFrZWZpbGUuYW0JMjAxNC0wMi0yNSAxNTozMDoxNS43NTY1NDg4MDggKzAxMDAKK0BAIC0zLDcgKzMsNyBAQAorIG9teGR5bmFtaWNsb2FkZXJfTFRMSUJSQVJJRVMgPSBsaWJvbXhkeW5hbWljbG9hZGVyLmxhCisgbGlib214ZHluYW1pY2xvYWRlcl9sYV9TT1VSQ0VTID0gc3RlX2R5bmFtaWNfY29tcG9uZW50X2xvYWRlci5jIHN0ZV9keW5hbWljX2NvbXBvbmVudF9sb2FkZXIuaAorIAorLWxpYm9teGR5bmFtaWNsb2FkZXJfbGFfTERGTEFHUyA9CisrbGlib214ZHluYW1pY2xvYWRlcl9sYV9MREZMQUdTID0gLWxvbXhpbC1iZWxsYWdpbyAtTCQodG9wX2J1aWxkZGlyKS9zcmMvLmxpYnMKKyBsaWJvbXhkeW5hbWljbG9hZGVyX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjIFwKKyAJCQktSSQodG9wX3NyY2Rpcikvc3JjL2Jhc2UgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZThjNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL21ha2VmaWxlLWRvY2Rpci1maXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBwYXRjaCBpcyB0byByZW1vdmUgREVTVERJUiBpbiBkb2NkaXIuCitPdGhlcndpc2UsIHdoZW4gdXNlcnMgaW5zdGFsbCBieSBydW5uaW5nIGBtYWtlIGluc3RhbGwgREVTVERJUj0vYWx0ZXJuYXRlL2RpcmVjdG9yeScgc3BlY2lmaWVkIGluIHRoZSBmaWxlIElOU1RBTEwsIHRoZSBkb2Mgd2lsbCBnbyBpbnRvIC9hbHRlcm5hdGUvZGlyZWN0b3J5L2FsdGVybmF0ZS9kaXJlY3RvcnksIHdoaWNoIGlzIG5vdCBleHBlY3RlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorCitkaWZmIC1yIDMwYjU5N2U0ZTcwZCBNYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxNTozODozNSAyMDExICswODAwCisrKysgYi9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDE1OjM5OjI1IDIwMTEgKzA4MDAKK0BAIC03LDcgKzcsNyBAQAorIHBrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKyBwa2djb25maWdfREFUQSA9IGxpYm9teGlsLWJlbGxhZ2lvLnBjCisgCistZG9jZGlyID0gJChERVNURElSKSQocHJlZml4KS9zaGFyZS9kb2MvQFBBQ0tBR0VACisrZG9jZGlyID0gJChwcmVmaXgpL3NoYXJlL2RvYy9AUEFDS0FHRUAKKyBkb2NfREFUQSA9IFJFQURNRSBcCisgCSAgIENoYW5nZUxvZyBcCisgCSAgIFRPRE8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvcGFyYWxsZWwtbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvcGFyYWxsZWwtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODNjYTEzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1RoaXMgcGF0Y2ggaXMgdG8gbWFrZSBsaWJvbXhpbCBNYWtlZmlsZSBzdXBwb3J0ICJtYWtlIC1qTiIuCitUaGUgb214cmVnaXN0ZXJfYmVsbGFnaW8gc3R1ZmZzIGRlcGVuZCBvbiBsaWJvbXhpbF9iZWxsYWdpbyBsaWJyYXJ5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgZjU5ZDA3N2QzZGQ1IE1ha2VmaWxlLmFtCistLS0gYS9zcmMvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxMDo1NDozNiAyMDExICswODAwCisrKysgYi9zcmMvTWFrZWZpbGUuYW0JV2VkIERlYyAyOCAxMDo1NTo0NiAyMDExICswODAwCitAQCAtNyw2ICs3LDcgQEAKKyBvbXhyZWdpc3Rlcl9iZWxsYWdpb19TT1VSQ0VTID0gb214cmVnaXN0ZXIuYyBjb21tb24uYyBjb21tb24uaAorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX0NGTEFHUyA9IC1ET01YSUxDT01QT05FTlRTUEFUSD1cIiQocGx1Z2luZGlyKS9cIiBcCisgCQkJICAgICAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKytvbXhyZWdpc3Rlcl9iZWxsYWdpb19MREFERCA9ICQobGliX0xUTElCUkFSSUVTKQorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX0xERkxBR1MgPSAtbG9teGlsLWJlbGxhZ2lvIC1MJChidWlsZGRpcikKKyAKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJvbXhpbC1iZWxsYWdpby5sYQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbF8wLjkuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWxfMC45LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkNmRmOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWxfMC45LjMuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJCZWxsYWdpbyBPcGVuTUFYIEludGVncmF0aW9uIExheWVyIChJTCkiCitERVNDUklQVElPTiA9ICJCZWxsYWdpbyBpcyBhbiBvcGVuc291cmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBLaHJvbm9zIE9wZW5NQVggXAorICAgICAgICAgICAgICAgSW50ZWdyYXRpb24gTGF5ZXIgQVBJIHRvIGFjY2VzcyBtdWx0aW1lZGlhIGNvbXBvbmVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL29teGlsLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWU2ZjBmNGRiYzdhYzE5M2I1MGYzMjNhNmFlMTkxY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29teGNvcmUuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT04MDZiMWU1NTY2YzA2NDg2ZmU4ZTQyYjQ2MWUwM2E5MCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb214aWwvbGlib214aWwtYmVsbGFnaW8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R5bmFtaWNsb2FkZXItbGlua2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMWRlODI3ZmRiNzVjMDJjODRlNTVmNzQwY2EyN2NiOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OTNjMDcyOWM4ZWY4YzE0NjdiM2JmZWZjZjM1NWVjMTlhNDZkZDkyZTMxYmZjMjgwZTE3ZDk2YjA5MzRkNzRjIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LWJlbGxhZ2lvLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1kb2MgLS1kaXNhYmxlLVdlcnJvciIKKworIworIyBUaGUgLnNvIGZpbGVzIHVuZGVyICR7bGliZGlyfS9iZWxsYWdpbyBhcmUgbm90IGludGVuZGVkIHRvIGJlIHZlcnNpb25lZCBhbmQgc3ltbGlua2VkLgorIyBNYWtlIHN1cmUgdGhleSBnZXQgcGFja2FnZWQgaW4gdGhlIG1haW4gcGFja2FnZS4KKyMKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vKi5zbyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLyouYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLyouYSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2JlbGxhZ2lvLy5kZWJ1Zy8gXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8uZGVidWcvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlNTgwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlicG5nL2xpYnBuZ18xLjYuMTcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iOWI3NTM5OWI3MmU0YTg2NTZjZjNhNmRkZmM4NmQ5YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtlbmRsaW5lPTE2O21kNT1jYzljMmQxZWFmZGExN2UxMjc3YTZmOTlhOWZjMjljNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtiZWdpbmxpbmU9MjQyO2VuZGxpbmU9MzU2O21kNT01OTkzMTY4MTlkNTI1ZGRlMmJmZGYyOGZlM2YzMjNhZiIKK0RFUEVORFMgPSAiemxpYiIKK0xJQlYgPSAiMTYiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGlicG5nL2xpYnBuZyR7TElCVn0vJHtQVn0vbGlicG5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjQzMGE5Yjc2Yjc4NTMzMjM1Y2Q0YjliMjZjZTc1YzdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4NTA3YjU1ZmJlNWNkNDNjNTE5ODFmMjkyNGU0NjcxZmQ4MWZlMzVkNTJkYzUzMzU3ZTIwZjJjNzdmYTVkZmQiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKKyMgV29yayBhcm91bmQgbWlzc2luZyBzeW1ib2xzCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vbiIsICItLWVuYWJsZS1hcm0tbmVvbj1vZmYiICxkKX0iCisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyIKKworRklMRVNfJHtQTn0tdG9vbHMgPSAiJHtiaW5kaXJ9L3BuZy1maXgtaXR4dCAke2JpbmRpcn0vcG5nZml4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNhbXBsZXJhdGUvbGlic2FtcGxlcmF0ZTBfMC4xLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNhbXBsZXJhdGUvbGlic2FtcGxlcmF0ZTBfMC4xLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2OTM1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic2FtcGxlcmF0ZS9saWJzYW1wbGVyYXRlMF8wLjEuOC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkF1ZGlvIFNhbXBsZSBSYXRlIENvbnZlcnNpb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9TUkMvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc2FtcGxlcmF0ZS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWQwODA3YzM1ZmM5MDY0NjZkMjRhNTA0NjM1MzQ4MTVhIgorREVQRU5EUyA9ICJmbGFjIGxpYnNuZGZpbGUxIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL1NSQy9saWJzYW1wbGVyYXRlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjFjN2ZiMjUxOTFiNGU2ZTM2MjhkMTk4YTY2YTg0ZjQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzYjU0YmRmNDZkNWU2ZDIzNTRiNzAzNDM5NWZlMzI5YzIyMmE5NjY3OTBkZTM0NTIwNzAyYmI5NjQyZjFjMDYiCitTID0gIiR7V09SS0RJUn0vbGlic2FtcGxlcmF0ZS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUdbZmZ0d10gPSAiLC0tZGlzYWJsZS1mZnR3LGZmdHciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtc2VnZmF1bHQtaW4tU0QyLVJTUkMtcGFyc2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNDg3MTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaApAQCAtMCwwICsxLDIxMSBAQAorRnJvbSA5MzQxZTljNmU3MGNkM2FkNzZjOTAxYzNjZjA1MmQ0Y2I1MmZkODI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KK0RhdGU6IFRodSwgMjcgSnVuIDIwMTMgMTg6MDQ6MDMgKzEwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL3NkMi5jIDogRml4IHNlZ2ZhdWx0IGluIFNEMiBSU1JDIHBhcnNlci4KKworKFVwc3RyZWFtIGNvbW1pdCA5MzQxZTljNmU3MGNkM2FkNzZjOTAxYzNjZjA1MmQ0Y2I1MmZkODI3KQorCitBIHNwZWNpYWxseSBjcmFmdGVkIHJlc291cmNlIGZvcmsgZm9yIGFuIFNEMiBmaWxlIGNhbiBjYXVzZQordGhlIFNEMiBSU1JDIHBhcnNlciB0byByZWFkIGRhdGEgZnJvbSBvdXRzaWRlIGEgZHluYW1pY2FsbHkKK2RlZmluZWQgYnVmZmVyLiBUaGUgZGF0YSB0aGF0IGlzIHJlYWQgaXMgY29udmVydGVkIGludG8gYQorc2hvcnQgb3IgaW50IGFuZCB1c2VkIGR1cmluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuCisKK1NpbmNlIG5vIHdyaXRlIG9jY3VycywgdGhpcyBpcyB1bmxpa2VseSB0byBiZSBleHBsb2l0YWJsZS4KKworQnVnIHJlcG9ydGVkIGJ5IFRoZSBNYXloZW0gVGVhbSBmcm9tIEN5bGFiLCBDYXJuZWdpZSBNZWxsb24KK1VuaXZlcmlzdHkuIFBhcGVyIGlzOgoraHR0cDovL3VzZXJzLmVjZS5jbXUuZWR1L35hcmViZXJ0L3BhcGVycy9tYXloZW0tb2FrbGFuZC0xMi5wZGYKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvc2QyLmMgfCAgIDkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2QyLmMgYi9zcmMvc2QyLmMKK2luZGV4IDM1Y2UzNmIuLjZiZTE1MGMgMTAwNjQ0CistLS0gYS9zcmMvc2QyLmMKKysrKyBiL3NyYy9zZDIuYworQEAgLTEsNSArMSw1IEBACisgLyoKKy0qKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBFcmlrIGRlIENhc3RybyBMb3BvIDxlcmlrZEBtZWdhLW5lcmQuY29tPgorKyoqIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CisgKiogQ29weXJpZ2h0IChDKSAyMDA0IFBhYXZvIEp1bXBwYW5lbgorICoqCisgKiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK0BAIC0zNzEsNDQgKzM3MSw2MSBAQCBzZDJfd3JpdGVfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YsIGludCBVTlVTRUQgKGNhbGNfbGVuZ3RoKSkKKyAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9jaGFyIChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CXJldHVybiBkYXRhIFtvZmZzZXRdIDsKKy19IC8qIHJlYWRfY2hhciAqLworK3JlYWRfcnNyY19jaGFyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKwlyZXR1cm4gZGF0YSBbb2Zmc2V0XSA7CisrfSAvKiByZWFkX3JzcmNfY2hhciAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9zaG9ydCAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCistewlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAxXSA7CistfSAvKiByZWFkX3Nob3J0ICovCisrcmVhZF9yc3JjX3Nob3J0IChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAxID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgMV0gOworK30gLyogcmVhZF9yc3JjX3Nob3J0ICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX2ludCAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCistewlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgMjQpICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCA4KSArIGRhdGEgW29mZnNldCArIDNdIDsKKy19IC8qIHJlYWRfaW50ICovCisrcmVhZF9yc3JjX2ludCAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0KQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMyA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gMCA7CisrCXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCAyNCkgKyAoZGF0YSBbb2Zmc2V0ICsgMV0gPDwgMTYpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgM10gOworK30gLyogcmVhZF9yc3JjX2ludCAqLworIAorIHN0YXRpYyBpbmxpbmUgaW50CistcmVhZF9tYXJrZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0KQorLXsKKytyZWFkX3JzcmNfbWFya2VyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAzID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysKKyAJaWYgKENQVV9JU19CSUdfRU5ESUFOKQorIAkJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDI0KSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgMl0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAzXSA7CistCWVsc2UgaWYgKENQVV9JU19MSVRUTEVfRU5ESUFOKQorKwlpZiAoQ1BVX0lTX0xJVFRMRV9FTkRJQU4pCisgCQlyZXR1cm4gZGF0YSBbb2Zmc2V0XSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCA4KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgM10gPDwgMjQpIDsKKy0JZWxzZQorLQkJcmV0dXJuIDB4NjY2IDsKKy19IC8qIHJlYWRfbWFya2VyICovCisrCisrCXJldHVybiAwIDsKKyt9IC8qIHJlYWRfcnNyY19tYXJrZXIgKi8KKyAKKyBzdGF0aWMgdm9pZAorLXJlYWRfc3RyIChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCwgY2hhciAqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW4pCistewlpbnQgayA7CisrcmVhZF9yc3JjX3N0ciAoY29uc3QgU0QyX1JTUkMgKnByc3JjLCBpbnQgb2Zmc2V0LCBjaGFyICogYnVmZmVyLCBpbnQgYnVmZmVyX2xlbikKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWludCBrIDsKKyAKKyAJbWVtc2V0IChidWZmZXIsIDAsIGJ1ZmZlcl9sZW4pIDsKKyAKKysJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgYnVmZmVyX2xlbiA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gOworKworIAlmb3IgKGsgPSAwIDsgayA8IGJ1ZmZlcl9sZW4gLSAxIDsgaysrKQorIAl7CWlmIChwc2ZfaXNwcmludCAoZGF0YSBbb2Zmc2V0ICsga10pID09IDApCisgCQkJcmV0dXJuIDsKKyAJCWJ1ZmZlciBba10gPSBkYXRhIFtvZmZzZXQgKyBrXSA7CisgCQl9IDsKKyAJcmV0dXJuIDsKKy19IC8qIHJlYWRfc3RyICovCisrfSAvKiByZWFkX3JzcmNfc3RyICovCisgCisgc3RhdGljIGludAorIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKK0BAIC00MzUsMTcgKzQ1MiwxNyBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCS8qIFJlc2V0IHRoZSBoZWFkZXIgc3RvcmFnZSBiZWNhdXNlIHdlIGhhdmUgY2hhbmdlZCB0byB0aGUgcnNyY2Rlcy4gKi8KKyAJcHNmLT5oZWFkaW5kZXggPSBwc2YtPmhlYWRlbmQgPSByc3JjLnJzcmNfbGVuIDsKKyAKKy0JcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMCkgOworLQlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDQpIDsKKy0JcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgOCkgOworLQlyc3JjLm1hcF9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDEyKSA7CisrCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMCkgOworKwlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX3JzcmNfaW50ICgmcnNyYywgNCkgOworKwlyc3JjLmRhdGFfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDgpIDsKKysJcnNyYy5tYXBfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDEyKSA7CisgCisgCWlmIChyc3JjLmRhdGFfb2Zmc2V0ID09IDB4NTE2MDcgJiYgcnNyYy5tYXBfb2Zmc2V0ID09IDB4MjAwMDApCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIlRyeWluZyBvZmZzZXQgb2YgMHg1MiBieXRlcy5cbiIpIDsKKy0JCXJzcmMuZGF0YV9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyAwKSArIDB4NTIgOworLQkJcnNyYy5tYXBfb2Zmc2V0ID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAweDUyICsgNCkgKyAweDUyIDsKKy0JCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyA4KSA7CistCQlyc3JjLm1hcF9sZW5ndGggPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyAxMikgOworKwkJcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgMCkgKyAweDUyIDsKKysJCXJzcmMubWFwX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgNCkgKyAweDUyIDsKKysJCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMHg1MiArIDgpIDsKKysJCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgMTIpIDsKKyAJCX0gOworIAorIAlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiICBkYXRhIG9mZnNldCA6IDB4JTA0WFxuICBtYXAgIG9mZnNldCA6IDB4JTA0WFxuIgorQEAgLTQ4OCw3ICs1MDUsNyBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKyAJCX0gOworIAorLQlyc3JjLnN0cmluZ19vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy5tYXBfb2Zmc2V0ICsgMjYpIDsKKysJcnNyYy5zdHJpbmdfb2Zmc2V0ID0gcnNyYy5tYXBfb2Zmc2V0ICsgcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy5tYXBfb2Zmc2V0ICsgMjYpIDsKKyAJaWYgKHJzcmMuc3RyaW5nX29mZnNldCA+IHJzcmMucnNyY19sZW4pCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCBzdHJpbmcgb2Zmc2V0ICglZCkuXG4iLCByc3JjLnN0cmluZ19vZmZzZXQpIDsKKyAJCWVycm9yID0gU0ZFX1NEMl9CQURfUlNSQyA7CitAQCAtNDk3LDcgKzUxNCw3IEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy50eXBlX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIDMwIDsKKyAKKy0JcnNyYy50eXBlX2NvdW50ID0gcmVhZF9zaG9ydCAocnNyYy5yc3JjX2RhdGEsIHJzcmMubWFwX29mZnNldCArIDI4KSArIDEgOworKwlyc3JjLnR5cGVfY291bnQgPSByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLm1hcF9vZmZzZXQgKyAyOCkgKyAxIDsKKyAJaWYgKHJzcmMudHlwZV9jb3VudCA8IDEpCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCB0eXBlIGNvdW50LlxuIikgOworIAkJZXJyb3IgPSBTRkVfU0QyX0JBRF9SU1JDIDsKK0BAIC01MTMsMTEgKzUzMCwxMSBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMuc3RyX2luZGV4ID0gLTEgOworIAlmb3IgKGsgPSAwIDsgayA8IHJzcmMudHlwZV9jb3VudCA7IGsgKyspCistCXsJbWFya2VyID0gcmVhZF9tYXJrZXIgKHJzcmMucnNyY19kYXRhLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKysJewltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisgCisgCQlpZiAobWFya2VyID09IFNUUl9NQVJLRVIpCisgCQl7CXJzcmMuc3RyX2luZGV4ID0gayA7CistCQkJcnNyYy5zdHJfY291bnQgPSByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy50eXBlX29mZnNldCArIGsgKiA4ICsgNCkgKyAxIDsKKysJCQlyc3JjLnN0cl9jb3VudCA9IHJlYWRfcnNyY19zaG9ydCAoJnJzcmMsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCArIDQpICsgMSA7CisgCQkJZXJyb3IgPSBwYXJzZV9zdHJfcnNyYyAocHNmLCAmcnNyYykgOworIAkJCWdvdG8gcGFyc2VfcnNyY19mb3JrX2NsZWFudXAgOworIAkJCX0gOworQEAgLTU0OSwyNiArNTY2LDI2IEBAIHBhcnNlX3N0cl9yc3JjIChTRl9QUklWQVRFICpwc2YsIFNEMl9SU1JDICogcnNyYykKKyAJZm9yIChrID0gMCA7IGRhdGFfb2Zmc2V0ICsgZGF0YV9sZW4gPCByc3JjLT5yc3JjX2xlbiA7IGsrKykKKyAJewlpbnQgc2xlbiA7CisgCistCQlzbGVuID0gcmVhZF9jaGFyIChyc3JjLT5yc3JjX2RhdGEsIHN0cl9vZmZzZXQpIDsKKy0JCXJlYWRfc3RyIChyc3JjLT5yc3JjX2RhdGEsIHN0cl9vZmZzZXQgKyAxLCBuYW1lLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKG5hbWUpLCBzbGVuICsgMSkpIDsKKysJCXNsZW4gPSByZWFkX3JzcmNfY2hhciAocnNyYywgc3RyX29mZnNldCkgOworKwkJcmVhZF9yc3JjX3N0ciAocnNyYywgc3RyX29mZnNldCArIDEsIG5hbWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAobmFtZSksIHNsZW4gKyAxKSkgOworIAkJc3RyX29mZnNldCArPSBzbGVuICsgMSA7CisgCistCQlyc3JjX2lkID0gcmVhZF9zaG9ydCAocnNyYy0+cnNyY19kYXRhLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMikgOworKwkJcnNyY19pZCA9IHJlYWRfcnNyY19zaG9ydCAocnNyYywgcnNyYy0+aXRlbV9vZmZzZXQgKyBrICogMTIpIDsKKyAKKy0JCWRhdGFfb2Zmc2V0ID0gcnNyYy0+ZGF0YV9vZmZzZXQgKyByZWFkX2ludCAocnNyYy0+cnNyY19kYXRhLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMiArIDQpIDsKKysJCWRhdGFfb2Zmc2V0ID0gcnNyYy0+ZGF0YV9vZmZzZXQgKyByZWFkX3JzcmNfaW50IChyc3JjLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMiArIDQpIDsKKyAJCWlmIChkYXRhX29mZnNldCA8IDAgfHwgZGF0YV9vZmZzZXQgPiByc3JjLT5yc3JjX2xlbikKKyAJCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkV4aXRpbmcgcGFyc2VyIG9uIGRhdGEgb2Zmc2V0IG9mICVkLlxuIiwgZGF0YV9vZmZzZXQpIDsKKyAJCQlicmVhayA7CisgCQkJfSA7CisgCistCQlkYXRhX2xlbiA9IHJlYWRfaW50IChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0KSA7CisrCQlkYXRhX2xlbiA9IHJlYWRfcnNyY19pbnQgKHJzcmMsIGRhdGFfb2Zmc2V0KSA7CisgCQlpZiAoZGF0YV9sZW4gPCAwIHx8IGRhdGFfbGVuID4gcnNyYy0+cnNyY19sZW4pCisgCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJFeGl0aW5nIHBhcnNlciBvbiBkYXRhIGxlbmd0aCBvZiAlZC5cbiIsIGRhdGFfbGVuKSA7CisgCQkJYnJlYWsgOworIAkJCX0gOworIAorLQkJc2xlbiA9IHJlYWRfY2hhciAocnNyYy0+cnNyY19kYXRhLCBkYXRhX29mZnNldCArIDQpIDsKKy0JCXJlYWRfc3RyIChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0ICsgNSwgdmFsdWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAodmFsdWUpLCBzbGVuICsgMSkpIDsKKysJCXNsZW4gPSByZWFkX3JzcmNfY2hhciAocnNyYywgZGF0YV9vZmZzZXQgKyA0KSA7CisrCQlyZWFkX3JzcmNfc3RyIChyc3JjLCBkYXRhX29mZnNldCArIDUsIHZhbHVlLCBTRl9NSU4gKFNJR05FRF9TSVpFT0YgKHZhbHVlKSwgc2xlbiArIDEpKSA7CisgCisgCQlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiICAweCUwNHggICAgICU0ZCAgICAgJTRkICAgICAlM2QgICAgJyVzJ1xuIiwgZGF0YV9vZmZzZXQsIHJzcmNfaWQsIGRhdGFfbGVuLCBzbGVuLCB2YWx1ZSkgOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjQ3M2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gZGJlMTRmMDAwMzBhZjVkMzU3N2Y0Y2FiYmY5ODYxZGI1OWU5YzM3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CitEYXRlOiBUaHUsIDI1IERlYyAyMDE0IDE5OjIzOjEyICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy9zZDIuYyA6IEZpeCB0d28gcG90ZW50aWFsIGJ1ZmZlciByZWFkIG92ZXJmbG93cy4KKworKFVwc3RyZWFtIGNvbW1pdCBkYmUxNGYwMDAzMGFmNWQzNTc3ZjRjYWJiZjk4NjFkYjU5ZTljMzc4KQorCitDbG9zZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmlrZC9saWJzbmRmaWxlL2lzc3Vlcy85MworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9zZDIuYyB8ICAgMTIgKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zZDIuYyBiL3NyYy9zZDIuYworaW5kZXggMGI0ZTVhZi4uYTcwYTFmMSAxMDA2NDQKKy0tLSBhL3NyYy9zZDIuYworKysrIGIvc3JjL3NkMi5jCitAQCAtNTE3LDYgKzUxNywxMSBAQCBzZDJfcGFyc2VfcnNyY19mb3JrIChTRl9QUklWQVRFICpwc2YpCisgCisgCXJzcmMudHlwZV9vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyAzMCA7CisgCisrCWlmIChyc3JjLm1hcF9vZmZzZXQgKyAyOCA+IHJzcmMucnNyY19sZW4pCisrCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCBtYXAgb2Zmc2V0LlxuIikgOworKwkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisrCQl9IDsKKysKKyAJcnNyYy50eXBlX2NvdW50ID0gcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy5tYXBfb2Zmc2V0ICsgMjgpICsgMSA7CisgCWlmIChyc3JjLnR5cGVfY291bnQgPCAxKQorIAl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgdHlwZSBjb3VudC5cbiIpIDsKK0BAIC01MzMsNyArNTM4LDEyIEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy5zdHJfaW5kZXggPSAtMSA7CisgCWZvciAoayA9IDAgOyBrIDwgcnNyYy50eXBlX2NvdW50IDsgayArKykKKy0JewltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisrCXsJaWYgKHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCA+IHJzcmMucnNyY19sZW4pCisrCQl7CXBzZl9sb2dfcHJpbnRmIChwc2YsICJCYWQgcnNyYyBtYXJrZXIuXG4iKSA7CisrCQkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisrCQkJfSA7CisrCisrCQltYXJrZXIgPSByZWFkX3JzcmNfbWFya2VyICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4KSA7CisgCisgCQlpZiAobWFya2VyID09IFNUUl9NQVJLRVIpCisgCQl7CXJzcmMuc3RyX2luZGV4ID0gayA7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwMmY0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9saWJzbmRmaWxlMV8xLjAuMjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBdWRpbyBmb3JtYXQgQ29udmVyc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUiCitBVVRIT1IgPSAiRXJpayBkZSBDYXN0cm8gTG9wbyIKK0RFUEVORFMgPSAic3FsaXRlMyIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9saWJzbmRmaWxlL2ZpbGVzL2xpYnNuZGZpbGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc3JjLXNkMi5jLUZpeC1zZWdmYXVsdC1pbi1TRDItUlNSQy1wYXJzZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtc2QyLmMtRml4LXR3by1wb3RlbnRpYWwtYnVmZmVyLXJlYWQtb3ZlcmZsb3dzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImUyYjdiYjYzN2UwMTAyMmM3ZDIwZjk1ZjljMzk5MGEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5MDE2ZGJkMzI2YWJlN2UyMzY2ZGVkNWMzNDRjODUzODI5YmViZmQxNzAyZWYyNmEwN2VmNjYyZDZhYTQ4ODIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU3N2ZlOTMyMDI3MzZiNDdjMDcwMzU5MTBmNDc5NzRhIgorCitTID0gIiR7V09SS0RJUn0vbGlic25kZmlsZS0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLS1lbmFibGUtYWxzYSwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1leHRlcm5hbC1saWJzIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmRfYXJtKCkgeworCWV4cG9ydCBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xCisJZXhwb3J0IGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0CisJYWNfY3Zfc2l6ZW9mX29mZl90PTgKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmEtMS4xLjEvbm8tZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTlmM2QxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGlidGhlb3JhLTEuMS4xL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidGhlb3JhLTEuMS4xLm9yaWcvTWFrZWZpbGUuYW0JMjAwOS0xMS0yNSAyMjowMTo1My41OTM3NzU5MjYgKzAxMDAKKysrKyBsaWJ0aGVvcmEtMS4xLjEvTWFrZWZpbGUuYW0JMjAwOS0xMS0yNSAyMjowMjowMC43Nzc1MjQwMTcgKzAxMDAKK0BAIC04LDcgKzgsNyBAQAorIEVYQU1QTEVTX0RJUiA9CisgZW5kaWYKKyAKKy1TVUJESVJTID0gbGliIGluY2x1ZGUgZG9jIHRlc3RzIG00ICQoRVhBTVBMRVNfRElSKQorK1NVQkRJUlMgPSBsaWIgaW5jbHVkZSB0ZXN0cyBtNCAkKEVYQU1QTEVTX0RJUikKKyAKKyAKKyAjIHdlIGluY2x1ZGUgdGhlIHdob2xlIGRlYmlhbi8gZGlyIGluIEVYVFJBX0RJU1QgYmVjYXVzZSB0aGVyZSdzIGEgcHJvYmxlbQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhXzEuMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhXzEuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Y2IxNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmFfMS4xLjEuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJUaGVvcmEgVmlkZW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJUaGUgbGlidGhlb3JhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyB0aGUgc3RhbmRhcmQgZW5jb2RlciBhbmQgZGVjb2RlciB1bmRlciBhIEJTRCBsaWNlbnNlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly94aXBoLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZy9uZXd0aWNrZXQiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNmOTE3MThmNTllYjZhODNkMDZkYzdiY2FmNDExMTMyIgorREVQRU5EUyA9ICJsaWJvZ2ciCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvdGhlb3JhL2xpYnRoZW9yYS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL25vLWRvY3MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOTJhYjY1Y2VkZDUwMjFkNmI3ZGRkMTE3ZTA3Y2Q4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNmFlMWVlMmZhM2Q0MmFjNDg5Mjg3ZDNlYzM0YzU4ODU3MzBiMTI5NmYwODAxYWU1NzdhMzUxOTNkM2FmZmJjIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1leGFtcGxlcyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9saWJ0b29sMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9saWJ0b29sMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTcyMDJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL2ZpbGVzL2xpYnRvb2wyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgY29uZmlndXJlLmFjIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogdGlmZi0zLjkuNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0aWZmLTMuOS41Lm9yaWcvY29uZmlndXJlLmFjCisrKysgdGlmZi0zLjkuNS9jb25maWd1cmUuYWMKK0BAIC0yNyw3ICsyNyw3IEBAIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHAKKyBBQ19QUkVSRVEoMi42NCkKKyBBQ19JTklUKFtMaWJUSUZGIFNvZnR3YXJlXSxbMy45LjVdLFt0aWZmQGxpc3RzLm1hcHRvb2xzLm9yZ10sW3RpZmZdKQorIEFDX0NPTkZJR19BVVhfRElSKGNvbmZpZykKKy1BQ19DT05GSUdfTUFDUk9fRElSKG00KQorK2RubCBBQ19DT05GSUdfTUFDUk9fRElSKG00KQorIEFDX0xBTkcoQykKKyAKKyBkbmwgQ29tcHV0ZSB0aGUgY2Fub25pY2FsIGhvc3QgKHJ1bi10aW1lKSBzeXN0ZW0gdHlwZSB2YXJpYWJsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjNhNWYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgVGFnIEltYWdlIEZpbGUgRm9ybWF0IChUSUZGKSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0zNGRhM2RiNDZmYWI3NTAxOTkyZjk2MTVkN2UxNThjZiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucmVtb3Rlc2Vuc2luZy5vcmcvbGlidGlmZi8iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLnJlbW90ZXNlbnNpbmcub3JnL3B1Yi9saWJ0aWZmL3RpZmYtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wyLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YWVlNzEwNzQwOGExMjhjMGM3YjI0Mjg2YzBkYjkwMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4Y2IxZDkwYzk2ZjYxY2RmYzBiY2YwMzZhY2MyNTFjOWRiZTYzMjAzMzRkYTk0MWM3YTgzY2ZlMTU3NmVmODkwIgorCitpbmhlcml0IGF1dG90b29scworCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJheF9jdl9jaGVja19nbF9saWJnbD1ubyIKKworUEFDS0FHRUNPTkZJRyA/PSAiY3h4IGpwZWcgemxpYiBsem1hIFwKKyAgICAgICAgICAgICAgICAgIHN0cmlwLWNob3BwaW5nIGV4dHJhc2FtcGxlLWFzLWFscGhhIGNoZWNrLXljYmNyLXN1YnNhbXBsaW5nIgorCitQQUNLQUdFQ09ORklHW2N4eF0gPSAiLS1lbmFibGUtY3h4LC0tZGlzYWJsZS1jeHgsLCIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnLCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbHptYSwtLWRpc2FibGUtbHptYSx4eiwiCisKKyMgQ29udmVydCBzaW5nbGUtc3RyaXAgdW5jb21wcmVzc2VkIGltYWdlcyB0byBtdWx0aXBsZSBzdHJpcHMgb2Ygc3BlY2lmaWVkCisjIHNpemUgKGRlZmF1bHQ6IDgxOTIpIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2UKK1BBQ0tBR0VDT05GSUdbc3RyaXAtY2hvcHBpbmddID0gIi0tZW5hYmxlLXN0cmlwLWNob3BwaW5nLC0tZGlzYWJsZS1zdHJpcC1jaG9wcGluZywsIgorCisjIFRyZWF0IGEgZm91cnRoIHNhbXBsZSB3aXRoIG5vIEVYVFJBU0FNUExFXyB2YWx1ZSBhcyBiZWluZyBBU1NPQ0FMUEhBCitQQUNLQUdFQ09ORklHW2V4dHJhc2FtcGxlLWFzLWFscGhhXSA9ICItLWVuYWJsZS1leHRyYXNhbXBsZS1hcy1hbHBoYSwtLWRpc2FibGUtZXh0cmFzYW1wbGUtYXMtYWxwaGEsLCIKKworIyBDb250cm9sIHBpY2tpbmcgdXAgWUNiQ3Igc3Vic2FtcGxlIGluZm8uIERpc2FibGUgdG8gc3VwcG9ydCBmaWxlcyBsYWNraW5nCisjIHRoZSB0YWcKK1BBQ0tBR0VDT05GSUdbY2hlY2steWNiY3Itc3Vic2FtcGxpbmddID0gIi0tZW5hYmxlLWNoZWNrLXljYmNyLXN1YnNhbXBsaW5nLC0tZGlzYWJsZS1jaGVjay15Y2Jjci1zdWJzYW1wbGluZywsIgorCisjIFN1cHBvcnQgYSBtZWNoYW5pc20gYWxsb3dpbmcgcmVhZGluZyBsYXJnZSBzdHJpcHMgKHVzdWFsbHkgb25lIHN0cmlwIGZpbGVzKQorIyBpbiBjaHVua3Mgd2hlbiB1c2luZyBUSUZGUmVhZFNjYW5saW5lLiBFeHBlcmltZW50YWwgNC4wKyBmZWF0dXJlCitQQUNLQUdFQ09ORklHW2NodW5reS1zdHJpcC1yZWFkXSA9ICItLWVuYWJsZS1jaHVua3ktc3RyaXAtcmVhZCwtLWRpc2FibGUtY2h1bmt5LXN0cmlwLXJlYWQsLCIKKworUEFDS0FHRVMgPSsgInRpZmZ4eCB0aWZmLXV0aWxzIgorRklMRVNfdGlmZnh4ID0gIiR7bGliZGlyfS9saWJ0aWZmeHguc28uKiIKK0ZJTEVTX3RpZmYtdXRpbHMgPSAiJHtiaW5kaXJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ2b3JiaXMvbGlidm9yYmlzXzEuMy41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ2b3JiaXMvbGlidm9yYmlzXzEuMy41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNmUwZjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnZvcmJpcy9saWJ2b3JiaXNfMS4zLjUuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJPZ2cgVm9yYmlzIEF1ZGlvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiT2dnIFZvcmJpcyBpcyBhIGhpZ2gtcXVhbGl0eSBsb3NzeSBhdWRpbyBjb2RlYyBcCit0aGF0IGlzIGZyZWUgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJlc3RyaWN0aW9ucy4gbGlidm9yYmlzIFwKK2lzIHRoZSBtYWluIHZvcmJpcyBjb2RlYyBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudm9yYmlzLmNvbS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2QyYzQ4N2QyZmM3ZGQzZTNjN2M0NjVhNWI3ZjYyMTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS92b3JiaXMvdm9yYmlzZW5jLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xMTttZDU9ZDFjMWQxMzg4NjNkNjMxNTEzMTE5M2Q0MDQ2ZDgxY2IiCitERVBFTkRTID0gImxpYm9nZyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL3ZvcmJpcy8ke0JQfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiMjhjYjI4MDk3YzA3YTczNWQ2YWY1NmU1OThlMWM5MGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTRmOTRhOTUyN2ZmMGE4ODQ3N2JlMGE3MWMwYmFiMDlhNGMzZmViZTBlZDg3OGIyNDgyNDkwNmNkNGIwZTFkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjLTAuNC4xL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjLTAuNC4xL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjNTY0MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWMtMC40LjEvYWx0aXZlY19oX25lZWRlZC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitBZGQgbmV3IG1ldGhvZCB0byBqdWRnZSB3aGV0aGVyIDxhbHRpdmVjLmg+IGlzIG5lZWRlZAorCitUaGUgb3JpZ2luYWwgbG9naWMgd2lsbCB1c2UgInR5cGVkZWYgdmVjdG9yIGludCB0OyIgdG8ganVkZ2UKK3doZXRoZXIgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkLiBhbHRpdmVjLmggY29udGFpbnMgdGhlIGZvbGxvd2luZworc3RhdGVtZW50OgorCisgI2lmICFkZWZpbmVkKF9fQVBQTEVfQUxUSVZFQ19fKQorICNkZWZpbmUgdmVjdG9yIF9fdmVjdG9yCisgI2RlZmluZSBwaXhlbCBfX3BpeGVsCisgI2RlZmluZSBib29sIAorICNlbmRpZgorCitJbiBnY2MtNC4zLjMsIF9fQVBQTEVfQUxUSVZFQ19fIGlzIG5vdCBkZWZpbmVkIGJ5IGNvbXBpbGVyLCBuZWl0aGVyCithcyB2ZWN0b3IsIHBpeGVsLCBhbmQgYm9vbC4gSW4gb3JkZXIgdG8gbWFrZSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7IgorcGFzcyB0aGUgY29tcGlsYXRpb24sIHdlIG5lZWQgdG8gaW5jbHVkZSBhbHRpdmVjLmguCisKK0hvd2V2ZXIgaW4gZ2NjLTQuNS4wLCBfX0FQUExFX0FMVElWRUNfXyBpcyBkZWZpbmVkIGJ5IGNvbXBpbGVyLAorc28gYXMgdmVjdG9yLCBwaXhlbCwgYW5kIGJvb2wuIFdlIGNvdWxkIG5vdCBqdWRnZSB3aGV0aGVyCithbHRpdmVjLmggaXMgbmVlZGVkIGJ5ICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiLgorSGVyZSB3ZSBpbmNsdWRlIGFub3RoZXIgc3RhdGVtZW50ICJpbnQgdG1wID0gX19DUjZfRVE7IiwgaW4KK3doaWNoIF9fQ1I2X0VRIGlzIGRlZmluZWQgaW4gYWx0aXZlYy5oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtcnVOIG1wZWcyZGVjLTAuNC4xLW9yaWcvY29uZmlndXJlLmluIG1wZWcyZGVjLTAuNC4xL2NvbmZpZ3VyZS5pbgorLS0tIG1wZWcyZGVjLTAuNC4xLW9yaWcvY29uZmlndXJlLmluCTIwMTAtMDktMTQgMjA6NTU6NDIuMzk5Njg3NjYzICswODAwCisrKysgbXBlZzJkZWMtMC40LjEvY29uZmlndXJlLmluCTIwMTAtMDktMTQgMjA6NTY6NDMuNDAzMjA0NjQ4ICswODAwCitAQCAtNzUsMTEgKzc1LDExIEBACisgCQkgQ0ZMQUdTPSIkT1BUX0NGTEFHUyAkVFJZX0NGTEFHUyAkQ0ZMQUdTIgorIAkJIEFDX01TR19DSEVDS0lORyhbaWYgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkXSkKKyAJCSBBQ19UUllfQ09NUElMRShbXSwKKy0JCSAgICBbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7CisrCQkgICAgW3R5cGVkZWYgdmVjdG9yIGludCB0OyBpbnQgdG1wID0gX19DUjZfRVE7CisgCQkgICAgIHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisgCQkgICAgW2hhdmVfYWx0aXZlYz15ZXM7IEFDX01TR19SRVNVTFQobm8pXSwKKyAJCSAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxhbHRpdmVjLmg+XSwKKy0JCQlbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7IHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisrCQkJW3R5cGVkZWYgdmVjdG9yIGludCB0OyBpbnQgdG1wID0gX19DUjZfRVE7IHZlY19sZCgwLCAodW5zaWduZWQgY2hhciAqKTApO10sCisgCQkJW0FDX0RFRklORShbSEFWRV9BTFRJVkVDX0hdLCwKKyAJCQkgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWx0aXZlYy5oPiBoZWFkZXIuXSkKKyAJCQkgaGF2ZV9hbHRpdmVjPXllczsgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZGUyYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjXzAuNC4xLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBhbmQgdGVzdCBwcm9ncmFtIGZvciBkZWNvZGluZyBNUEVHLTIgYW5kIE1QRUctMSB2aWRlbyBzdHJlYW1zIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvbXBlZzIuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIyO21kNT1lYWQ2MjYwMmQ0NjM4MzI5ZDNiNWI4NmE1NTgwMzE1NCIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC9maWxlcy9tcGVnMmRlYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWx0aXZlY19oX25lZWRlZC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjc2MzFiMGE0YmNmZGQwZDc4YzBiYjAwODMwODBiMGRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3NGE3NjA2OGY4ZWMzNmQ0YmI1OWEwM2JmMTE1N2JlNDQxMThjYTAyMjUyMTgwZThiMzU4YjBiNWUzZWRlZWUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zZGwiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgsLS13aXRob3V0LXgsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4diIKKworUEFDS0FHRVMgPSAibXBlZzJkZWMtZGJnIG1wZWcyZGVjIG1wZWcyZGVjLWRvYyBsaWJtcGVnMiBsaWJtcGVnMi1kZXYgbGlibXBlZzJjb252ZXJ0IGxpYm1wZWcyY29udmVydC1kZXYgbGlibXBlZzItc3RhdGljZGV2IGxpYm1wZWcyY29udmVydC1zdGF0aWNkZXYiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGlibXBlZzIgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLnNvLioiCitGSUxFU19saWJtcGVnMmNvbnZlcnQgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5zby4qIgorRklMRVNfbGlibXBlZzItZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMi5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm1wZWcyLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyLnBjIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L21wZWcyZGVjL21wZWcyLmgiCitGSUxFU19saWJtcGVnMi1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLmEiCitGSUxFU19saWJtcGVnMmNvbnZlcnQtZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJtcGVnMmNvbnZlcnQucGMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L21wZWcyZGVjL21wZWcyY29udmVydC5oIgorRklMRVNfbGlibXBlZzJjb252ZXJ0LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LmEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4MDZkNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLmluYwpAQCAtMCwwICsxLDE5NyBAQAorU1VNTUFSWSA9ICJTb3VuZCBzZXJ2ZXIgZm9yIExpbnV4IGFuZCBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnB1bHNlYXVkaW8ub3JnIgorQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTDttZDU9NDMyNWFmZDM5NmZlYmNiNjU5YzM2YjQ5NTMzMTM1ZDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTDttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3B1bHNlY29yZS9yZXNhbXBsZXIuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT0wOTc5NDAxMmFlMTY5MTJjMDI3MGYzMjgwY2M4ZmY4NCIKKworREVQRU5EUyA9ICJsaWJhdG9taWMtb3BzIGxpYm9pbCBsaWJzbmRmaWxlMSBsaWJ0b29sIgorIyBvcHRpb25hbAorREVQRU5EUyArPSAidWRldiBhbHNhLWxpYiBnbGliLTIuMCBnY29uZiIKK0RFUEVORFMgKz0gImpzb24tYyBnZGJtIHNwZWV4ZHNwIGxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUgbGliY2FwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXNlcmFkZCBnZXR0ZXh0IHBlcmxuYXRpdmUgYmx1ZXRvb3RoIHN5c3RlbWQKKworIyAqLmRlc2t0b3AgcnVsZXMgd29udCBiZSBnZW5lcmF0ZWQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgd2lsbCBmYWlsCisjIGlmIHVzaW5nIC0tZGlzYWJsZS1ubHMKK1VTRV9OTFMgPSAieWVzIgorCitFWFRSQV9PRUNPTkYgPSAiXAorCQktLWRpc2FibGUtaGFsLWNvbXBhdCBcCisJCS0tZGlzYWJsZS1vcmMgXAorCQktLWVuYWJsZS10Y3B3cmFwPW5vIFwKKwkJLS13aXRoLWFjY2Vzcy1ncm91cD1hdWRpbyBcCisJCS0tZGlzYWJsZS1vcGVuc3NsIFwKKwkJLS1kaXNhYmxlLXhlbiBcCisJCS0td2l0aC1kYXRhYmFzZT1zaW1wbGUgXAorCQktLXdpdGhvdXQtZmZ0dyBcCisJCS0td2l0aG91dC16c2gtY29tcGxldGlvbi1kaXIgXAorCQktLXdpdGgtdWRldi1ydWxlcy1kaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQgXAorICAgICAgICAgICAgICAgIGFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPW5vIFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdhdmFoaScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAnb2Zvbm8nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIGRidXMgXAorICAgICAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJR1tkYnVzXSA9ICItLWVuYWJsZS1kYnVzLC0tZGlzYWJsZS1kYnVzLGRidXMiCitQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXo0LC0tZGlzYWJsZS1ibHVlejQsYmx1ZXo0IHNiYyIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo1XSA9ICItLWVuYWJsZS1ibHVlejUsLS1kaXNhYmxlLWJsdWV6NSxibHVlejUgc2JjIgorUEFDS0FHRUNPTkZJR1tvZm9ub10gPSAiLS1lbmFibGUtYmx1ZXo1LW9mb25vLWhlYWRzZXQsLS1kaXNhYmxlLWJsdWV6NS1vZm9uby1oZWFkc2V0LG9mb25vIgorUEFDS0FHRUNPTkZJR1tndGtdID0gIi0tZW5hYmxlLWd0azMsLS1kaXNhYmxlLWd0azMsZ3RrKzMiCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQtZGFlbW9uIC0tZW5hYmxlLXN5c3RlbWQtbG9naW4gLS1lbmFibGUtc3lzdGVtZC1qb3VybmFsIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0sLS1kaXNhYmxlLXN5c3RlbWQtZGFlbW9uIC0tZGlzYWJsZS1zeXN0ZW1kLWxvZ2luIC0tZGlzYWJsZS1zeXN0ZW1kLWpvdXJuYWwsc3lzdGVtZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSx2aXJ0dWFsL2xpYngxMSBsaWJ4dHN0IGxpYmljZSBsaWJzbSBsaWJ4Y2IiCitQQUNLQUdFQ09ORklHW2F2YWhpXSA9ICItLWVuYWJsZS1hdmFoaSwtLWRpc2FibGUtYXZhaGksYXZhaGkiCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKKyMgU2luY2UgbWFueSBlbWJlZGRlZCBzeXN0ZW1zIGRvbid0IGhhdmUgbm9uLXJvb3QgdXNlcnMsIGl0J3MgdXNlZnVsIHRvIGJlCisjIGFibGUgdG8gdXNlIHB1bHNlYXVkaW8gYXV0b3NwYXduIGZvciByb290IGFzIHdlbGwuCitQQUNLQUdFQ09ORklHW2F1dG9zcGF3bi1mb3Itcm9vdF0gPSAiLCwsIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLS1lbmFibGUtbmVvbi1vcHQ9bm8iLCBkKX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybWViID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtLWVuYWJsZS1uZW9uLW9wdD1ubyIsIGQpfSIKKworCitleHBvcnQgVEFSR0VUX1BGUFUgPSAiJHtUQVJHRVRfRlBVfSIKKworIyBUT0RPOiBVc2UgbW9yZSBmaW5lIGdyYW51bGFyIHZlcnNpb24KKyNPRV9MVF9SUEFUSF9BTExPVz0iOiR7bGliZGlyfS9wdWxzZS0wLjk6IgorT0VfTFRfUlBBVEhfQUxMT1cgPSAiYW55IgorT0VfTFRfUlBBVEhfQUxMT1dbZXhwb3J0XT0iMSIKKworc2V0X2NmZ192YWx1ZSAoKSB7CisJc2VkIC1pIC1lICJzL1woOyAqXClcPyQyID0uKi8kMiA9ICQzLyIgIiQxIgorCWlmICEgZ3JlcCAtcSAiXiQyID0gJDNcJCIgIiQxIjsgdGhlbgorCQlkaWUgIlVzZSBvZiBzZWQgdG8gc2V0ICckMicgdG8gJyQzJyBpbiAnJDEnIGZhaWxlZCIKKwlmaQorfQorCitkb19jb21waWxlX2FwcGVuZCAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnYXV0b3NwYXduLWZvci1yb290JywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJc2V0X2NmZ192YWx1ZSBzcmMvY2xpZW50LmNvbmYgYWxsb3ctYXV0b3NwYXduLWZvci1yb290IHllcworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS92b2xhdGlsZXMuMDRfcHVsc2UgICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzL3ZvbGF0aWxlcy4wNF9wdWxzZQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gInB1bHNlYXVkaW8tc2VydmVyIgorR1JPVVBBRERfUEFSQU1fcHVsc2VhdWRpby1zZXJ2ZXIgPSAicHVsc2UiCitVU0VSQUREX1BBUkFNX3B1bHNlYXVkaW8tc2VydmVyID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9wdWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgL2Jpbi9mYWxzZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWdyb3VwcyBhdWRpbyxwdWxzZSAtLWdpZCBwdWxzZSBwdWxzZSIKKworIyBUaGUgY29uc29sZS1raXQgbW9kdWxlIGlzIGluY2x1ZGVkIGhlcmUgZXhwbGljaXRseSBzbyBiaXRiYWtlIGNhbiBtYXAgdG8gdGhlCisjIFJERVBFTkRTIHdlIGRlZmluZSBmb3IgaXQgaW4gdGhpcyByZWNpcGUsIGFuZCB0aGVyZWJ5IGVuc3VyZSB0aGF0IHdoZW4KKyMgYWRkaW5nIHRoZSBjb25zb2xlLWtpdCBtb2R1bGUgdG8gYW4gaW1hZ2UsIHdlIGFsc28gZ2V0IHRoZSBuZWNlc3NhcnkKKyMgY29uc29sZWtpdCBwYWNrYWdlIHByb2R1Y2VkLgorUEFDS0FHRVMgPSsgImxpYnB1bHNlY29yZSBsaWJwdWxzZWNvbW1vbiBsaWJwdWxzZSBsaWJwdWxzZS1zaW1wbGUgbGlicHVsc2UtbWFpbmxvb3AtZ2xpYiBcCisgICAgICAgICAgICAgcHVsc2VhdWRpby1zZXJ2ZXIgcHVsc2VhdWRpby1taXNjICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2RidXMnLCAncHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQnLCAnJywgZCl9IgorCisjdXBncmFkZSBwYXRoOgorUlJFUExBQ0VTX3B1bHNlYXVkaW8tc2VydmVyID0gImxpYnB1bHNlLWJpbiBsaWJwdWxzZS1jb25mIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecHVsc2VhdWRpby1saWItLiogXnB1bHNlYXVkaW8tbW9kdWxlLS4qIgorCitGSUxFU19saWJwdWxzZWNvcmUgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlY29yZSouc28iCitGSUxFU19saWJwdWxzZWNvbW1vbiA9ICIke2xpYmRpcn0vcHVsc2VhdWRpby9saWJwdWxzZWNvbW1vbiouc28iCisKKyMgY2xpZW50LmNvbmYgY29uZmlndXJlcyB0aGUgYmVoYXZpb3VyIG9mIGxpYnB1bHNlLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBzYW1lCisjIHBhY2thZ2UuCitGSUxFU19saWJwdWxzZSA9ICIke2xpYmRpcn0vbGlicHVsc2Uuc28uKiAke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mIgorCitGSUxFU19saWJwdWxzZS1zaW1wbGUgPSAiJHtsaWJkaXJ9L2xpYnB1bHNlLXNpbXBsZS5zby4qIgorRklMRVNfbGlicHVsc2UtbWFpbmxvb3AtZ2xpYiA9ICIke2xpYmRpcn0vbGlicHVsc2UtbWFpbmxvb3AtZ2xpYi5zby4qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vcHVsc2UvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B1bHNlLSR7UFZ9L21vZHVsZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8qLmxhICR7ZGF0YWRpcn0vdmFsYSAke2xpYmRpcn0vY21ha2UiICAgCitGSUxFU18ke1BOfS1jb25mID0gIiR7c3lzY29uZmRpcn0iCitGSUxFU18ke1BOfS1iaW4gKz0gIiR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvdm9sYXRpbGVzLjA0X3B1bHNlIgorRklMRVNfJHtQTn0tc2VydmVyID0gIiR7YmluZGlyfS9wdWxzZWF1ZGlvICR7YmluZGlyfS9zdGFydC0qICR7c3lzY29uZmRpcn0gJHtiaW5kaXJ9L3BhY3RsICovdWRldi9ydWxlcy5kLyoucnVsZXMgKi8qL3VkZXYvcnVsZXMuZC8qLnJ1bGVzICR7c3lzdGVtZF91c2VyX3VuaXRkaXJ9LyoiCisKKyNTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNlcnZlciIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zZXJ2ZXIgPSAicHVsc2VhdWRpby5zZXJ2aWNlIgorCitGSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS8qICR7bGliZGlyfS9wdWxzZWF1ZGlvL2xpYnB1bHNlZHNwLnNvIgorCisjIEFsbG93IHRoZSBwdWxzZWF1ZGlvIHBhY2thZ2UgdG8gYmUgY3JlYXRlZCBlbXB0eSBhcyBhIHBsYWNlaG9sZGVyICgtZGJnIGFuZCAtZGV2IGRlcGVuZCBvbiBpdCkKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK0NPTkZGSUxFU19saWJwdWxzZSA9ICIke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mIgorCitDT05GRklMRVNfcHVsc2VhdWRpby1zZXJ2ZXIgPSAiXCAKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9kZWZhdWx0LnBhIFwKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9kYWVtb24uY29uZiBcCisgICR7c3lzY29uZmRpcn0vcHVsc2Uvc3lzdGVtLnBhIFwKKyAgIgorCitwa2dfcG9zdGluc3RfJHtQTn0tc2VydmVyKCkgeworICAgICAgICBpZiBbIC16ICIkRCIgXSAmJiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF0gOyB0aGVuCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKyAgICAgICAgZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgI2Quc2V0VmFyKCdQS0dfcHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJykKKworICAgIHBsdWdpbmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbmRpciwgJ15tb2R1bGUtKC4qKVwuc28kJywgJ3B1bHNlYXVkaW8tbW9kdWxlLSVzJywgJ1B1bHNlQXVkaW8gbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5kaXIsICdebGliKC4qKVwuc28kJywgJ3B1bHNlYXVkaW8tbGliLSVzJywgJ1B1bHNlQXVkaW8gbGlicmFyeSBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBwcmVwZW5kPVRydWUpCit9CisKK1JERVBFTkRTX3B1bHNlYXVkaW8tc2VydmVyID0gIiBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZmlsdGVyLWFwcGx5IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1maWx0ZXItaGV1cmlzdGljcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtdWRldi1kZXRlY3QgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLW51bGwtc2luayBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV2aWNlLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXN0cmVhbS1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1jYXJkLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV0ZWN0IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLXNpbmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsc2Etc291cmNlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1hbHNhLWNhcmQgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLW5hdGl2ZS1wcm90b2NvbC11bml4IFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZWZhdWx0LWRldmljZS1yZXN0b3JlIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1pbnRlbmRlZC1yb2xlcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcmVzY3VlLXN0cmVhbXMgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsd2F5cy1zaW5rIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1zdXNwZW5kLW9uLWlkbGUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXBvc2l0aW9uLWV2ZW50LXNvdW5kcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcm9sZS1jb3JrIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1zd2l0Y2gtb24tcG9ydC1hdmFpbGFibGUiCisKKyMgSWYgdGhlIHNlcnZlciBpcyBpbnN0YWxsZWQsIGl0J3MgdXN1YWxseSBkZXNpcmFibGUgdG8gbWFrZSBBTFNBIGFwcGxpY2F0aW9ucworIyB1c2UgUHVsc2VBdWRpby4gYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZiB3aWxsIGluc3RhbGwgdGhlIGNvbmZpZ3VyYXRpb24KKyMgdGhhdCBtYWtlcyB0aGUgUHVsc2VBdWRpbyBwbHVnaW4gdGhlIGRlZmF1bHQgQUxTQSBkZXZpY2UuCitSREVQRU5EU19wdWxzZWF1ZGlvLXNlcnZlciArPSAiYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZiIKKworIyBwdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCBpcyBidWlsdCB3aGVuZXZlciBkYnVzIGlzIGVuYWJsZWQgYnkgUEFDS0FHRUNPTkZJRworIyBidXQgY29uc29sZWtpdCBkZXBlbmRzIG9uIGxpYngxMSBhbmQgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIERJU1RSTyB3aXRoIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JERVBFTkRTX3B1bHNlYXVkaW8tbW9kdWxlLWNvbnNvbGUta2l0ID0rICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdjb25zb2xla2l0JywgJycsIGQpfSIKK1JERVBFTkRTX3B1bHNlYXVkaW8tbWlzYyArPSAicHVsc2VhdWRpby1tb2R1bGUtY2xpLXByb3RvY29sLXVuaXgiCisKK0ZJTEVTX3B1bHNlYXVkaW8tbW9kdWxlLWdjb25mICs9ICIke2xpYmV4ZWNkaXJ9L3B1bHNlL2djb25mLWhlbHBlciIKK0ZJTEVTX3B1bHNlYXVkaW8tbW9kdWxlLWFsc2EtY2FyZCArPSAiJHtkYXRhZGlyfS9wdWxzZWF1ZGlvL2Fsc2EtbWl4ZXIiCisKKyMgVGhlIGNvbnNvbGUta2l0IG1vZHVsZSBpcyBnb29kIHRvIGhhdmUgb24gWDExIHN5c3RlbXMgKGl0IGtlZXBzIFB1bHNlQXVkaW8KKyMgcnVubmluZyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1c2VyIGxvZ2luIHNlc3Npb24pLiBUaGUgZGV2aWNlLW1hbmFnZXIgYW5kCisjIHgxMS0qIG1vZHVsZXMgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGUgc3RhcnQtcHVsc2VhdWRpby14MTEgc2NyaXB0LCBzbyB0aG9zZQorIyBtb2R1bGVzIG11c3QgYmUgaW5zdGFsbGVkIHdoZW4gWDExIGlzIGVuYWJsZWQuCitSREVQRU5EU19wdWxzZWF1ZGlvLXNlcnZlciArPSAiXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQgXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLWRldmljZS1tYW5hZ2VyIFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEtY29yay1yZXF1ZXN0IFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEtcHVibGlzaCBcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUteDExLXhzbXAgXAorICAgICAgICAnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOWViN2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNsaWVudC1jb25mLUFkZC1hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorRnJvbSAxY2I1NjQ3Zjc2ZGM4Y2Q3YmFjYmNlMmE2NGZhYzllNmMyZGMzYjE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE0OjMyOjQzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNsaWVudC1jb25mOiBBZGQgYWxsb3ctYXV0b3NwYXduLWZvci1yb290CisKK1VzdWFsbHkgYXV0b3NwYXduaW5nIGZvciByb290IGlzIGEgYmFkIGlkZWEsIHNpbmNlIGl0IGNhbiBlYXNpbHkKK2ludGVyZmVyZSB3aXRoIG90aGVyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcywgYnV0IGluIGVtYmVkZGVkCitlbnZpcm9ubWVudHMgd2hlcmUgb25seSByb290IGV4aXN0cywgYXV0b3NwYXduaW5nIGlzIGZpbmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yMzU0OV0KKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4gfCA5ICsrKysrKysrKworIHNyYy9wdWxzZS9jbGllbnQtY29uZi5jICAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jbGllbnQtY29uZi5oICAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jbGllbnQuY29uZi5pbiAgICAgICB8IDEgKworIHNyYy9wdWxzZS9jb250ZXh0LmMgICAgICAgICAgICB8IDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbiBiL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgoraW5kZXggMTAwMmRiZS4uMDA1ODQ5MCAxMDA2NDQKKy0tLSBhL21hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbgorKysrIGIvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCitAQCAtNzEsNiArNzEsMTUgQEAgTGljZW5zZSBhbG9uZyB3aXRoIFB1bHNlQXVkaW87IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgICAgPC9vcHRpb24+CisgCisgICAgIDxvcHRpb24+CisrICAgICAgPHA+PG9wdD5hbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3Q9PC9vcHQ+IEFsbG93IGF1dG9zcGF3bmluZyBhbHNvIGZvciByb290LgorKyAgICAgIFRha2VzIGEgYm9vbGVhbiB2YWx1ZSwgZGVmYXVsdHMgdG8gPG9wdD5ubzwvb3B0Pi4gSWYgdGhlIDxvcHQ+YXV0b3NwYXduCisrICAgICAgPC9vcHQ+IG9wdGlvbiBpcyBkaXNhYmxlZCwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gQXV0b3NwYXduaW5nIGZvcgorKyAgICAgIHJvb3QgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSBydW5uaW5nIFB1bHNlQXVkaW8gYXMgcm9vdCB3aWxsCisrICAgICAgaW50ZXJmZXJlIHdpdGggcmVndWxhciB1c2VycycgUHVsc2VBdWRpbyBpbnN0YW5jZXMuIFRoaXMgb3B0aW9uIHNob3VsZCBiZQorKyAgICAgIGVuYWJsZWQgb25seSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlcmUgYXJlIG5vIHJlZ3VsYXIgdXNlcnMgYXQgYWxsLjwvcD4KKysgICAgPC9vcHRpb24+CisrCisrICAgIDxvcHRpb24+CisgICAgICAgPHA+PG9wdD5kYWVtb24tYmluYXJ5PTwvb3B0PiBQYXRoIHRvIHRoZSBQdWxzZUF1ZGlvIGRhZW1vbiB0bworICAgICAgIHJ1biB3aGVuIGF1dG9zcGF3bmluZy4gRGVmYXVsdHMgdG8gYSBwYXRoIGNvbmZpZ3VyZWQgYXQgY29tcGlsZQorICAgICAgIHRpbWUuPC9wPgorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK2luZGV4IDgzMzMxZjguLjA0NzQ1ODMgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgdm9pZCBwYV9jbGllbnRfY29uZl9sb2FkKHBhX2NsaWVudF9jb25mICpjLCBib29sIGxvYWRfZnJvbV94MTEsIGJvb2wgbG9hZF9mcm9tX2UKKyAgICAgICAgIHsgImRlZmF1bHQtc2VydmVyIiwgICAgICAgICBwYV9jb25maWdfcGFyc2Vfc3RyaW5nLCAgICZjLT5kZWZhdWx0X3NlcnZlciwgTlVMTCB9LAorICAgICAgICAgeyAiZGVmYXVsdC1kYnVzLXNlcnZlciIsICAgIHBhX2NvbmZpZ19wYXJzZV9zdHJpbmcsICAgJmMtPmRlZmF1bHRfZGJ1c19zZXJ2ZXIsIE5VTEwgfSwKKyAgICAgICAgIHsgImF1dG9zcGF3biIsICAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2VfYm9vbCwgICAgICZjLT5hdXRvc3Bhd24sIE5VTEwgfSwKKysgICAgICAgIHsgImFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCIsIHBhX2NvbmZpZ19wYXJzZV9ib29sLCAgICZjLT5hbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3QsIE5VTEwgfSwKKyAgICAgICAgIHsgImNvb2tpZS1maWxlIiwgICAgICAgICAgICBwYV9jb25maWdfcGFyc2Vfc3RyaW5nLCAgICZjLT5jb29raWVfZmlsZV9mcm9tX2NsaWVudF9jb25mLCBOVUxMIH0sCisgICAgICAgICB7ICJkaXNhYmxlLXNobSIsICAgICAgICAgICAgcGFfY29uZmlnX3BhcnNlX2Jvb2wsICAgICAmYy0+ZGlzYWJsZV9zaG0sIE5VTEwgfSwKKyAgICAgICAgIHsgImVuYWJsZS1zaG0iLCAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2Vfbm90X2Jvb2wsICZjLT5kaXNhYmxlX3NobSwgTlVMTCB9LAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKK2luZGV4IGVhYzcwNWEuLjEzMTM5M2EgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAorKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmgKK0BAIC0zOCw2ICszOCw3IEBAIHR5cGVkZWYgc3RydWN0IHBhX2NsaWVudF9jb25mIHsKKyAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9hcHBsaWNhdGlvbjsKKyAgICAgY2hhciAqY29va2llX2ZpbGVfZnJvbV9jbGllbnRfY29uZjsKKyAgICAgYm9vbCBhdXRvc3Bhd24sIGRpc2FibGVfc2htLCBhdXRvX2Nvbm5lY3RfbG9jYWxob3N0LCBhdXRvX2Nvbm5lY3RfZGlzcGxheTsKKysgICAgYm9vbCBhbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3Q7CisgICAgIHNpemVfdCBzaG1fc2l6ZTsKKyB9IHBhX2NsaWVudF9jb25mOworIAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbiBiL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbgoraW5kZXggMjZiNzc5MC4uNjk4MzBlZiAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQuY29uZi5pbgorKysrIGIvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluCitAQCAtMjMsNiArMjMsNyBAQAorIDsgZGVmYXVsdC1kYnVzLXNlcnZlciA9CisgCisgOyBhdXRvc3Bhd24gPSB5ZXMKKys7IGFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCA9IG5vCisgOyBkYWVtb24tYmluYXJ5ID0gQFBBX0JJTkFSWUAKKyA7IGV4dHJhLWFyZ3VtZW50cyA9IC0tbG9nLXRhcmdldD1zeXNsb2cKKyAKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2UvY29udGV4dC5jIGIvc3JjL3B1bHNlL2NvbnRleHQuYworaW5kZXggNGJjNDQ1Zi4uZDZjM2Y2ZCAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jb250ZXh0LmMKKysrKyBiL3NyYy9wdWxzZS9jb250ZXh0LmMKK0BAIC05NzYsNyArOTc2LDcgQEAgaW50IHBhX2NvbnRleHRfY29ubmVjdCgKKyAgICAgaWYgKCEoZmxhZ3MgJiBQQV9DT05URVhUX05PQVVUT1NQQVdOKSAmJiBjLT5jb25mLT5hdXRvc3Bhd24pIHsKKyAKKyAjaWZkZWYgSEFWRV9HRVRVSUQKKy0gICAgICAgIGlmIChnZXR1aWQoKSA9PSAwKQorKyAgICAgICAgaWYgKCFjLT5jb25mLT5hbGxvd19hdXRvc3Bhd25fZm9yX3Jvb3QgJiYgZ2V0dWlkKCkgPT0gMCkKKyAgICAgICAgICAgICBwYV9sb2dfZGVidWcoIk5vdCBkb2luZyBhdXRvc3Bhd24gc2luY2Ugd2UgYXJlIHJvb3QuIik7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBjLT5kb19hdXRvc3Bhd24gPSB0cnVlOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY29uZi1wYXJzZXItYWRkLXN1cHBvcnQtZm9yLS5kLWRpcmVjdG9yaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjFiMmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5NiBAQAorRnJvbSA4Y2I2NDNiYmYwYTI4N2Q2Nzc5NGU2ODBkMjZmNDljNTAzZjMxMDUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDIxIE1heSAyMDE1IDIxOjAwOjU5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmYtcGFyc2VyOiBhZGQgc3VwcG9ydCBmb3IgLmQgZGlyZWN0b3JpZXMKKworVGhpcyBhbGxvd3MgYSBjb25maWd1cmF0aW9uIHNjaGVtZSB3aGVyZSBwcmlvciB0byBsb2FkaW5nCitjb25maWd1cmF0aW9uIGZyb20gInNvbWVmaWxlIiwgdGhlIHBhcnNlciBmaXJzdCBsb2FkcyBjb25maWd1cmF0aW9uCitmcm9tIGZpbGVzIGluIGRpcmVjdG9yeSAic29tZWZpbGUuZCIuIFRoaXMgZmVhdHVyZSBpcyBjdXJyZW50bHkKK2VuYWJsZWQgb25seSBmb3IgY2xpZW50LmNvbmYgYW5kIGRhZW1vbi5jb25mLgorCitUaGlzIG1ha2VzIGl0IGVhc2llciB0byBjcmVhdGUgY29uZmlndXJhdGlvbiBwYWNrYWdlcyBpbiBkaXN0cmlidXRpb25zCit3aGVuIHRoZXJlJ3MgbmVlZCB0byBoYXZlIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIGluIGRpZmZlcmVudCBzZXR1cHMuCitGb3IgZXhhbXBsZSwgdGhlIGdyYXBoaWNhbCBTYXRvIGVudmlyb25tZW50IGluIE9wZW5FbWJlZGRlZC1jb3JlIG5lZWRzCit0byBzZXQgYWxsb3ctYXV0b3NwYXduLWZvci1yb290PXRydWUgaW4gY2xpZW50LmNvbmYsIGJ1dCB0aGUgZGVmYXVsdAorY29uZmlndXJhdGlvbiBpbiBPcGVuRW1iZWRkZWQtY29yZSBzaG91bGQgbm90IHNldCB0aGF0IG9wdGlvbi4gV2l0aAordGhpcyBwYXRjaCwgSSBjYW4gY3JlYXRlIGEgU2F0by1zcGVjaWZpYyBwYWNrYWdlIHRoYXQgc2ltcGx5IGluc3RhbGxzCis1MC1zYXRvLmNvbmYgaW4gL2V0Yy9wdWxzZS9jbGllbnQuY29uZi5kIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCB0aGUKK21haW4gY2xpZW50LmNvbmYgZmlsZSBjb21pbmcgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5wdWxzZWF1ZGlvLmdlbmVyYWwvMjM1OTJdCisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBzcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYyAgICAgICAgICAgfCAgNCArKy0tCisgc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jIHwgIDIgKy0KKyBzcmMvcHVsc2UvY2xpZW50LWNvbmYuYyAgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYyAgICAgICAgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIHNyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaCAgICAgICAgICAgICB8ICA4ICsrKysrKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMgYi9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMKK2luZGV4IDIxYThlZGIuLjEzMzJmYzYgMTAwNjQ0CistLS0gYS9zcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMKKysrKyBiL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYworQEAgLTYxNyw3ICs2MTcsNyBAQCBpbnQgcGFfZGFlbW9uX2NvbmZfbG9hZChwYV9kYWVtb25fY29uZiAqYywgY29uc3QgY2hhciAqZmlsZW5hbWUpIHsKKyAgICAgY2kuZGVmYXVsdF9jaGFubmVsX21hcF9zZXQgPSBjaS5kZWZhdWx0X3NhbXBsZV9zcGVjX3NldCA9IGZhbHNlOworICAgICBjaS5jb25mID0gYzsKKyAKKy0gICAgciA9IGYgPyBwYV9jb25maWdfcGFyc2UoYy0+Y29uZmlnX2ZpbGUsIGYsIHRhYmxlLCBOVUxMLCBOVUxMKSA6IDA7CisrICAgIHIgPSBmID8gcGFfY29uZmlnX3BhcnNlKGMtPmNvbmZpZ19maWxlLCBmLCB0YWJsZSwgTlVMTCwgdHJ1ZSwgTlVMTCkgOiAwOworIAorICAgICBpZiAociA+PSAwKSB7CisgCitkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYworaW5kZXggMjMxNDYxMi4uOTg4YjRmZSAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCisrKysgYi9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYworQEAgLTI0ODMsNyArMjQ4Myw3IEBAIHBhX2Fsc2FfcGF0aCogcGFfYWxzYV9wYXRoX25ldyhjb25zdCBjaGFyICpwYXRoc19kaXIsIGNvbnN0IGNoYXIgKmZuYW1lLCBwYV9hbHNhCisgCisgICAgIGZuID0gcGFfbWF5YmVfcHJlZml4X3BhdGgoZm5hbWUsIHBhdGhzX2Rpcik7CisgCistICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBwLT5wcm9wbGlzdCwgcCk7CisrICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIGl0ZW1zLCBwLT5wcm9wbGlzdCwgZmFsc2UsIHApOworICAgICBwYV94ZnJlZShmbik7CisgCisgICAgIGlmIChyIDwgMCkKK0BAIC00Mjg4LDcgKzQyODgsNyBAQCBwYV9hbHNhX3Byb2ZpbGVfc2V0KiBwYV9hbHNhX3Byb2ZpbGVfc2V0X25ldyhjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgcGFfY2hhbm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhX3J1bl9mcm9tX2J1aWxkX3RyZWUoKSA/IFBBX1NSQ0RJUiAiL21vZHVsZXMvYWxzYS9taXhlci9wcm9maWxlLXNldHMvIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFfQUxTQV9QUk9GSUxFX1NFVFNfRElSKTsKKyAKKy0gICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIE5VTEwsIHBzKTsKKysgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIE5VTEwsIGZhbHNlLCBwcyk7CisgICAgIHBhX3hmcmVlKGZuKTsKKyAKKyAgICAgaWYgKHIgPCAwKQorZGlmZiAtLWdpdCBhL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYyBiL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYworaW5kZXggNDJiNmZkOS4uNTQxZjBlNyAxMDA2NDQKKy0tLSBhL3NyYy9tb2R1bGVzL21vZHVsZS1hdWdtZW50LXByb3BlcnRpZXMuYworKysrIGIvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jCitAQCAtMjA0LDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9ydWxlKHN0cnVjdCBydWxlICpyKSB7CisgICAgIHRhYmxlWzBdLmRhdGEgPSAmci0+YXBwbGljYXRpb25fbmFtZTsKKyAgICAgdGFibGVbMV0uZGF0YSA9ICZyLT5pY29uX25hbWU7CisgCistICAgIGlmIChwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHRhYmxlLCBOVUxMLCByKSA8IDApCisrICAgIGlmIChwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHRhYmxlLCBOVUxMLCBmYWxzZSwgcikgPCAwKQorICAgICAgICAgcGFfbG9nX3dhcm4oIkZhaWxlZCB0byBwYXJzZSAuZGVza3RvcCBmaWxlICVzLiIsIGZuKTsKKyAKKyAgICAgcGFfeGZyZWUoZm4pOworZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK2luZGV4IDgzMzMxZjguLjNjMzM4NGQgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworKysrIGIvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMKK0BAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBwYV9jbGllbnRfY29uZl9sb2FkKHBhX2NsaWVudF9jb25mICpjLCBib29sIGxvYWRfZnJvbV94MTEsIGJvb2wgbG9hZF9mcm9tX2UKKyAKKyAgICAgZiA9IHBhX29wZW5fY29uZmlnX2ZpbGUoREVGQVVMVF9DTElFTlRfQ09ORklHX0ZJTEUsIERFRkFVTFRfQ0xJRU5UX0NPTkZJR19GSUxFX1VTRVIsIEVOVl9DTElFTlRfQ09ORklHX0ZJTEUsICZmbik7CisgICAgIGlmIChmKSB7CistICAgICAgICBwYV9jb25maWdfcGFyc2UoZm4sIGYsIHRhYmxlLCBOVUxMLCBOVUxMKTsKKysgICAgICAgIHBhX2NvbmZpZ19wYXJzZShmbiwgZiwgdGFibGUsIE5VTEwsIHRydWUsIE5VTEwpOworICAgICAgICAgcGFfeGZyZWUoZm4pOworICAgICAgICAgZmNsb3NlKGYpOworICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jIGIvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jCitpbmRleCAyZGNkNDVhLi5kNDczMjMyIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jCisrKysgYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CitAQCAtMTAzLDcgKzEwNCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfbGluZShwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSkgeworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHN0YXRlLT5pdGVtX3RhYmxlLCBzdGF0ZS0+cHJvcGxpc3QsIHN0YXRlLT51c2VyZGF0YSk7CisrICAgICAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBzdGF0ZS0+aXRlbV90YWJsZSwgc3RhdGUtPnByb3BsaXN0LCBmYWxzZSwgc3RhdGUtPnVzZXJkYXRhKTsKKyAgICAgICAgIHBhX3hmcmVlKHBhdGgpOworICAgICAgICAgcmV0dXJuIHI7CisgICAgIH0KK0BAIC0xNTIsOCArMTUzLDEzIEBAIHN0YXRpYyBpbnQgcGFyc2VfbGluZShwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSkgeworICAgICAgICAgcmV0dXJuIG5vcm1hbF9hc3NpZ25tZW50KHN0YXRlKTsKKyB9CisgCisrc3RhdGljIGludCBjb25mX2ZpbHRlcihjb25zdCBzdHJ1Y3QgZGlyZW50ICplbnRyeSkgeworKyAgICByZXR1cm4gcGFfZW5kc3dpdGgoZW50cnktPmRfbmFtZSwgIi5jb25mIik7CisrfQorKworIC8qIEdvIHRocm91Z2ggdGhlIGZpbGUgYW5kIHBhcnNlIGVhY2ggbGluZSAqLworLWludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIHZvaWQgKnVzZXJkYXRhKSB7CisraW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgYm9vbCB1c2VfZG90X2QsCisrICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyZGF0YSkgeworICAgICBpbnQgciA9IC0xOworICAgICBib29sIGRvX2Nsb3NlID0gIWY7CisgICAgIHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgc3RhdGU7CitAQCAtMTYzLDYgKzE2OSwzOCBAQCBpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcAorIAorICAgICBwYV96ZXJvKHN0YXRlKTsKKyAKKysgICAgaWYgKHVzZV9kb3RfZCkgeworKyAgICAgICAgY2hhciAqZGlyX25hbWU7CisrICAgICAgICBpbnQgbjsKKysgICAgICAgIHN0cnVjdCBkaXJlbnQgKiplbnRyaWVzID0gTlVMTDsKKysKKysgICAgICAgIGRpcl9uYW1lID0gcGFfc3ByaW50Zl9tYWxsb2MoIiVzLmQiLCBmaWxlbmFtZSk7CisrCisrICAgICAgICBuID0gc2NhbmRpcihkaXJfbmFtZSwgJmVudHJpZXMsIGNvbmZfZmlsdGVyLCBhbHBoYXNvcnQpOworKyAgICAgICAgaWYgKG4gPj0gMCkgeworKyAgICAgICAgICAgIGludCBpOworKworKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKysgICAgICAgICAgICAgICAgY2hhciAqZmlsZW5hbWUyOworKworKyAgICAgICAgICAgICAgICBmaWxlbmFtZTIgPSBwYV9zcHJpbnRmX21hbGxvYygiJXMiIFBBX1BBVEhfU0VQICIlcyIsIGRpcl9uYW1lLCBlbnRyaWVzW2ldLT5kX25hbWUpOworKyAgICAgICAgICAgICAgICBwYV9jb25maWdfcGFyc2UoZmlsZW5hbWUyLCBOVUxMLCB0LCBwcm9wbGlzdCwgZmFsc2UsIHVzZXJkYXRhKTsKKysgICAgICAgICAgICAgICAgcGFfeGZyZWUoZmlsZW5hbWUyKTsKKysKKysgICAgICAgICAgICAgICAgZnJlZShlbnRyaWVzW2ldKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgZnJlZShlbnRyaWVzKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkKKysgICAgICAgICAgICAgICAgcGFfbG9nX2RlYnVnKCJzY2FuZGlyKFwiJXNcIikgZmFpbGVkOiAlcyIsIGRpcl9uYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIHBhX2xvZ193YXJuKCJzY2FuZGlyKFwiJXNcIikgZmFpbGVkOiAlcyIsIGRpcl9uYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHBhX3hmcmVlKGRpcl9uYW1lKTsKKysgICAgfQorKworICAgICBpZiAoIWYgJiYgIShmID0gcGFfZm9wZW5fY2xvZXhlYyhmaWxlbmFtZSwgInIiKSkpIHsKKyAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAgICAgICAgICAgICBwYV9sb2dfZGVidWcoIkZhaWxlZCB0byBvcGVuIGNvbmZpZ3VyYXRpb24gZmlsZSAnJXMnOiAlcyIsIGZpbGVuYW1lLCBwYV9jc3RyZXJyb3IoZXJybm8pKTsKK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmggYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmgKK2luZGV4IGRiYjZmNWMuLmNjMjBkN2QgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmgKKysrKyBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaAorQEAgLTU5LDYgKzU5LDExIEBAIHN0cnVjdCBwYV9jb25maWdfcGFyc2VyX3N0YXRlIHsKKyAgKiBwYV9jb25maWdfaXRlbXMgaW4gKnQgdGhhdCBpcyB0ZXJtaW5hdGVkIGJ5IGFuIGl0ZW0gd2hlcmUgbHZhbHVlIGlzCisgICogTlVMTC4KKyAgKgorKyAqIElmIHVzZV9kb3RfZCBpcyB0cnVlLCB0aGVuIGJlZm9yZSBwYXJzaW5nIHRoZSBmaWxlIG5hbWVkIGJ5IHRoZSBmaWxlbmFtZQorKyAqIGFyZ3VtZW50LCB0aGUgZnVuY3Rpb24gd2lsbCBwYXJzZSBhbGwgZmlsZXMgZW5kaW5nIHdpdGggIi5jb25mIiBpbgorKyAqIGFscGhhYmV0aWNhbCBvcmRlciBmcm9tIGEgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgZmlsZW5hbWUgKyAiLmQiLCBpZiBzdWNoCisrICogZGlyZWN0b3J5IGV4aXN0cy4KKysgKgorICAqIFNvbWUgY29uZmlndXJhdGlvbiBmaWxlcyBtYXkgY29udGFpbiBhIFByb3BlcnRpZXMgc2VjdGlvbiwgd2hpY2gKKyAgKiBpcyBhIGJpdCBzcGVjaWFsLiBOb3JtYWxseSBhbGwgYWNjZXB0ZWQgbHZhbHVlcyBtdXN0IGJlIHByZWRlZmluZWQKKyAgKiBpbiB0aGUgcGFfY29uZmlnX2l0ZW0gdGFibGUsIGJ1dCBpbiB0aGUgUHJvcGVydGllcyBzZWN0aW9uIHRoZQorQEAgLTY4LDcgKzczLDggQEAgc3RydWN0IHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgeworICAqIHByb3BlcnRpZXMsIGFuZCB0aG9zZSBwcm9wZXJ0aWVzIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIGdpdmVuCisgICogcHJvcGxpc3QuIElmIHByb3BsaXN0IGlzIE5VTEwsIHRoZW4gc2VjdGlvbnMgbmFtZWQgIlByb3BlcnRpZXMiCisgICogYXJlIG5vdCBhbGxvd2VkIGF0IGFsbCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAqLworLWludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIHZvaWQgKnVzZXJkYXRhKTsKKytpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcHJvcGxpc3QgKnByb3BsaXN0LCBib29sIHVzZV9kb3RfZCwKKysgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKTsKKyAKKyAvKiBHZW5lcmljIHBhcnNlcnMgZm9yIGludGVnZXJzLCBzaXplX3QsIGJvb2xlYW5zIGFuZCBzdHJpbmdzICovCisgaW50IHBhX2NvbmZpZ19wYXJzZV9pbnQocGFfY29uZmlnX3BhcnNlcl9zdGF0ZSAqc3RhdGUpOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTU1OTk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1wYWRzcC1NYWtlLWl0LWNvbXBpbGUtb24tbXVzbC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIGY2YWIzYzNhYTdhMTg0MWM4YWRkMDQ4MjgwMjkzNTZkMmE4Yzg4ZTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA2IEFwciAyMDE1IDIxOjU2OjMxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhZHNwOiBNYWtlIGl0IGNvbXBpbGUgb24gbXVzbAorCiticmVhayBhc3N1bXB0aW9ucyBvbiBnbGliYyBhbmQgdGhlcmUgaXMgbm8gc3RhdDY0IG9uIG5vbgorZ2xpYmMgQyBsaWJyYXJpZXMKKworU2VlIHB1bHNlYXVkaW8gYnVnCisKK2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzE5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy91dGlscy9wYWRzcC5jIHwgMTUgKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91dGlscy9wYWRzcC5jIGIvc3JjL3V0aWxzL3BhZHNwLmMKK2luZGV4IGU2MTM3M2MuLjY4NDcyMWEgMTAwNjQ0CistLS0gYS9zcmMvdXRpbHMvcGFkc3AuYworKysrIGIvc3JjL3V0aWxzL3BhZHNwLmMKK0BAIC0yMzY4LDcgKzIzNjgsNyBAQCBmYWlsOgorICAgICByZXR1cm4gcmV0OworIH0KKyAKKy0jaWZkZWYgc3VuCisrI2lmbmRlZiBfX0dMSUJDX18KKyBpbnQgaW9jdGwoaW50IGZkLCBpbnQgcmVxdWVzdCwgLi4uKSB7CisgI2Vsc2UKKyBpbnQgaW9jdGwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIC4uLikgeworQEAgLTI1MDgsMTAgKzI1MDgsMTMgQEAgaW50IHN0YXQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0ICpidWYpIHsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQorLQorICNpZmRlZiBIQVZFX09QRU42NAorLQorKyN1bmRlZiBzdGF0NjQKKysjaWZkZWYgX19HTElCQ19fCisgaW50IHN0YXQ2NChjb25zdCBjaGFyICpwYXRobmFtZSwgc3RydWN0IHN0YXQ2NCAqYnVmKSB7CisrI2Vsc2UKKytpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKSB7CisrI2VuZGlmCisgICAgIHN0cnVjdCBzdGF0IG9sZGJ1ZjsKKyAgICAgaW50IHJldDsKKyAKK0BAIC0yNTQ0LDcgKzI1NDcsNyBAQCBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpIHsKKyAKKyAgICAgcmV0dXJuIDA7CisgfQorLQorKyN1bmRlZiBvcGVuNjQKKyBpbnQgb3BlbjY0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikgeworICAgICB2YV9saXN0IGFyZ3M7CisgICAgIG1vZGVfdCBtb2RlID0gMDsKK0BAIC0yNjcwLDggKzI2NzMsOCBAQCBGSUxFKiBmb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSkgeworIH0KKyAKKyAjaWZkZWYgSEFWRV9PUEVONjQKKy0KKy1GSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSB7CisrI3VuZGVmIGZvcGVuNjQKKytGSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgZmlsZW5hbWUsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbW9kZSkgeworIAorICAgICBkZWJ1ZyhERUJVR19MRVZFTF9WRVJCT1NFLCBfX0ZJTEVfXyI6IGZvcGVuNjQoJXMpXG4iLCBmaWxlbmFtZT9maWxlbmFtZToiTlVMTCIpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk0MjUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vZml4LWdpdC12ZXJzaW9uLWdlbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACitnaXQtdmVyc2lvbi1nZW4gZ2V0cyBjb25mdXNlZCBpZiBhIHRhcmJhbGwgaXMgYmVpbmcgYnVpbHQgaW5zaWRlIGEgZ2l0IGRpcmVjdG9yeQorKGllIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGlzIGEgc3ViZGlyZWN0b3J5IG9mIGEgcG9reSBjbG9uZSksIGFuZCBlbmRzIHVwIGNhbGxpbmcKK3RoZSByZWxlYXNlIDYuMC1kaXJ0eS4gIEFkZCBhIHNob3J0Y3V0IGV4aXQgc28gaWYgYSB0YXJiYWxsIGlzIGRldGVjdGVkIGl0Citkb2Vzbid0IGF0dGVtcHQgdG8gbG9vayBhdCB0aGUgZ2l0IHN0YXR1cy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTM2KQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dpdC12ZXJzaW9uLWdlbiBiL2dpdC12ZXJzaW9uLWdlbgoraW5kZXggNzU0Njg4NC4uMDc5YjkzZSAxMDA3NTUKKy0tLSBhL2dpdC12ZXJzaW9uLWdlbgorKysrIGIvZ2l0LXZlcnNpb24tZ2VuCitAQCAtODQsNyArODQsMTAgQEAgdGhlbgorICAgICB2PWBjYXQgJHRhcmJhbGxfdmVyc2lvbl9maWxlYCB8fCBleGl0IDEKKyAgICAgY2FzZSAkdiBpbgorIAkqJG5sKikgdj0gOzsgIyByZWplY3QgbXVsdGktbGluZSBvdXRwdXQKKy0JWzAtOV0qKSA7OworKwlbMC05XSopCisrCQllY2hvICIkdiIgfCB0ciAtZCAnXDAxMicKKysJCWV4aXQgMAorKwkJOzsKKyAJKikgdj0gOzsKKyAgICAgZXNhYworICAgICB0ZXN0IC16ICIkdiIgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vdm9sYXRpbGVzLjA0X3B1bHNlIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vdm9sYXRpbGVzLjA0X3B1bHNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTk5ODAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby92b2xhdGlsZXMuMDRfcHVsc2UKQEAgLTAsMCArMSwyIEBACisjIDx0eXBlPiA8b3duZXI+IDxncm91cD4gPG1vZGU+IDxwYXRoPiA8bGlua3NvdXJjZT4KK2QgcHVsc2UgcHVsc2UgMDc1NSAvdmFyL3J1bi9wdWxzZSBub25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb182LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb182LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlOTA5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvXzYuMC5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHB1bHNlYXVkaW8uaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcy4wNF9wdWxzZSBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYjY5MWU4M2I3NDM0YzY3OGRmZmFjZmEzYTAyNzc1MGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUwNjQwZTBiODBiMTYwNzYwMGFjY2ZhZDJlNDVhYWJiNzlkMzc5YmY2MzU0Yzk2NzFlZmEyMDY1NDc3ZjZmNiIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIG1rZGlyIC1wICR7U30vbGlibHRkbAorICAgIGNwICR7U1RBR0lOR19MSUJESVJ9L2xpYmx0ZGwqICR7U30vbGlibHRkbAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ3ZjMxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc2JjL3NiY18xLjMuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJTQkMgQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJCbHVldG9vdGggbG93LWNvbXBsZXhpdHksIHN1YmJhbmQgY29kZWMgKFNCQykgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5ibHVlei5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2JjL3NiYy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjY7bWQ1PTBmNTdkMGRmMjJiMGQ0MDc0NmJkZDI5ODA1YTQzNjFiIgorCitERVBFTkRTID0gImxpYnNuZGZpbGUxIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvYmx1ZXRvb3RoLyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjJkOGI3ODQxZjJjMTFhYjI4NzcxOGQ1NjJmMmI5ODFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2MTAyMmNmNTc2ZjE0MTkwMjQxZTcwNzE3NTNmZGFjZGNlNWQxZGVhODlmZmQ3MDQxMTBmYzUwYmU2ODkzMDkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4XzEuMnJjMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2QyM2RiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJTcGVlY2ggQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJTcGVleCBpcyBhbiBPcGVuIFNvdXJjZS9GcmVlIFNvZnR3YXJlIHBhdGVudC1mcmVlIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdCBkZXNpZ25lZCBmb3Igc3BlZWNoLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3BlZXgub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMTQ2NDlkOGJhOWRkNzA0NWRmYjY2ODNmMjk4ZDBhOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3NwZWV4L3NwZWV4Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zNDttZDU9ZWY4YzhlYTRmNzE5OGQ3MWNmMzUwOWM2ZWQwNWVhNTAiCitERVBFTkRTID0gImxpYm9nZyBzcGVleGRzcCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnVzLnhpcGgub3JnL3JlbGVhc2VzL3NwZWV4L3NwZWV4LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjZhZTdkYjNiYWIwMWUxZDRiODZiYWNmYThjYTMzZTgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhYTI3YzcyNDdmZjE1Yzg1MjFjMmFlMGVhMjE5ODdjOWU5NzEwYThmMmQzNDQ4ZThiNzlkYTk4MDZiY2U4OTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBsaWJfcGFja2FnZQorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnVEFSR0VUX0ZQVScsICdzb2Z0JywgJy0tZW5hYmxlLWZpeGVkLXBvaW50IC0tZGlzYWJsZS1mbG9hdC1hcGkgLS1kaXNhYmxlLXZicicsICcnLCBkKX0gXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcC8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3AvMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwNjdkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3AvMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBjNzMzNzBjZWFmZDEzOGJlY2VlOGNhM2M2ODhiYTc1NzU2ODMwYmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBTdW4sIDUgSnVsIDIwMTUgMTc6NDg6MTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG9uJ3QgcmVseSBvbiBIQVZFX1NURElOVF9IIGV0IGFsLiBiZWluZyBkZWZpbmVkCisKK05vdCBldmVyeW9uZSB3aG8gaW5jbHVkZXMgc3BlZXhkc3BfY29uZmlnX3R5cGVzLmggd2lsbCBoYXZlIGEgdGVzdAord2hpY2ggZGVmaW5lcyB0aG9zZSwgYW5kIGlmIHdlJ3ZlIGNob3NlbiB0byB1c2UgdGhlIHN0ZGludCB0eXBlcyBhdAorY29uZmlndXJlIHRpbWUgdGhlbiB3ZSBrbm93IGV4YWN0bHkgd2hpY2ggaGVhZGVyKHMpIGFyZSBhdmFpbGFibGUsIHNvCitqdXN0IGNob29zZSB0aGUgYmVzdCBvbmUgdGhlbiBhbmQgZ2VuZXJhdGUgdGhlIGhlYWRlciB0byB1c2UgaXQuCisKK1RoaXMgcGF0Y2gsIGluY2x1ZGluZyB0aGUgYWJvdmUgdGV4dCwgaXMgY29waWVkIGZyb20gYSBjb21taXQgaW4gdGhlCitzcGVleCByZXBvc2l0b3J5WzFdLiBUaGUgb3JpZ2luYWwgY29tbWl0IGZvciBzcGVleCB3YXMgbWFkZSBieSBSb24KKzxyb25AZGViaWFuLm9yZz4uCisKK1sxXSBodHRwczovL2dpdC54aXBoLm9yZy8/cD1zcGVleC5naXQ7YT1jb21taXRkaWZmO2g9Nzc0Yzg3ZDZjYjdkZDhkYWJkZDE3Njc3ZmM2ZGE3NTNlY2Y0YWE4NworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYgKysrKysrCisgaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbiB8IDggKy0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMmNkMmQxZS4uMWRlMGMyMyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzM0LDYgKzMzNCwxMiBAQCBBQ19TVUJTVChbVVNJWkUxNl0pCisgQUNfU1VCU1QoW1NJWkUzMl0pCisgQUNfU1VCU1QoW1VTSVpFMzJdKQorIAorK0FTX0lGKFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N0ZGludF9oIiA9ICJ5ZXMiXSwgICAgW0lOQ0xVREVfU1RESU5UPSIjaW5jbHVkZSA8c3RkaW50Lmg+Il0sCisrICAgICAgW3Rlc3QgIiRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCIgPSAieWVzIl0sICBbSU5DTFVERV9TVERJTlQ9IiNpbmNsdWRlIDxpbnR0eXBlcy5oPiJdLAorKyAgICAgIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oIiA9ICJ5ZXMiXSwgW0lOQ0xVREVfU1RESU5UPSIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Il0pCisrCisrQUNfU1VCU1QoW0lOQ0xVREVfU1RESU5UXSkKKysKKyBBQ19DT05GSUdfRklMRVMoWworICAgICAgICAgICAgTWFrZWZpbGUgbGlic3BlZXhkc3AvTWFrZWZpbGUgZG9jL01ha2VmaWxlIFNwZWV4RFNQLnNwZWMKKyAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9zcGVleC9NYWtlZmlsZSBzcGVleGRzcC5wYworZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4gYi9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluCitpbmRleCAwMmI4MmZkLi41ZWE3YjU1IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbgorKysrIGIvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbgorQEAgLTEsMTMgKzEsNyBAQAorICNpZm5kZWYgX19TUEVFWF9UWVBFU19IX18KKyAjZGVmaW5lIF9fU1BFRVhfVFlQRVNfSF9fCisgCistI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAorLSMgIGluY2x1ZGUgPHN0ZGludC5oPgorLSNlbGlmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICistIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KKy0jZWxpZiBkZWZpbmVkIEhBVkVfU1lTX1RZUEVTX0gKKy0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jZW5kaWYKKytASU5DTFVERV9TVERJTlRACisgCisgdHlwZWRlZiBAU0laRTE2QCBzcHhfaW50MTZfdDsKKyB0eXBlZGVmIEBVU0laRTE2QCBzcHhfdWludDE2X3Q7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcF8xLjJyYzMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxYWNlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQSBwYXRlbnQtZnJlZSBEU1AgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlNwZWV4RFNQIGlzIGEgcGF0ZW50LWZyZWUsIE9wZW4gU291cmNlL0ZyZWUgU29mdHdhcmUgRFNQIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zcGVleC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTMxNDY0OWQ4YmE5ZGQ3MDQ1ZGZiNjY4M2YyOThkMGE4IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvc3BlZXgvc3BlZXhkc3AtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmVseS1vbi1IQVZFX1NURElOVF9ILWV0LWFsLi1iZWluZy1kZWZpbmVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzBkOWQzMTE4NGY3ZWI3NjExOTJmZDFlZjBiNzMzMzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGFlNjg4NjAwMDM5ZjVkMjI0YmRmMmUyMjJkMmZiZGU2NTYwODQ0N2U0YzJmNjgxNTg1ZTRkY2E2ZGY2OTJmMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgICAgIC0tZGlzYWJsZS1leGFtcGxlcyBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQVJHRVRfRlBVJywgJ3NvZnQnLCAnLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1kaXNhYmxlLWZsb2F0LWFwaScsICcnLCBkKX0gXAorIgorCisjIFdvcmthcm91bmQgZm9yIGEgYnVpbGQgZmFpbHVyZSB3aGVuIGJ1aWxkaW5nIHdpdGggTUFDSElORT1xZW11YXJtNjQuIEkgdGhpbmsKKyMgYWFyY2g2NCBpcyBzdXBwb3NlZCB0byBzdXBwb3J0IE5FT04ganVzdCBmaW5lLCBidXQgYnVpbGRpbmcgZm9yIHFlbXVhcm02NAorIyBmYWlscyBpbiBORU9OIGNvZGU6CisjCisjIC4uLi9zcGVleGRzcC0xLjJyYzMvbGlic3BlZXhkc3AvcmVzYW1wbGVfbmVvbi5oOjE0ODo1OiBlcnJvcjogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisjICAgICAgYXNtIHZvbGF0aWxlICgiICBjbXAgJVtsZW5dLCAjMFxuIgorIyAgICAgIF4KKyMKKyMgSSBzZW50IGFuIGVtYWlsIGFib3V0IHRoZSBpc3N1ZSB0byBzcGVleC1kZXYuIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgdGhlcmUKKyMgYXJlIG5vIHJlc3BvbnNlcyB5ZXQ6CisjIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8uY29tcHJlc3Npb24uc3BlZXguZGV2ZWwvNzM2MAorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhYXJjaDY0JywgJy0tZGlzYWJsZS1uZW9uJywgJycsIGQpfSIKKworIyBzcGVleGRzcCB3YXMgc3BsaXQgb2ZmIGZyb20gc3BlZXggaW4gMS4ycmMyLiBPbGRlciB2ZXJzaW9ucyBvZiBzcGVleCBjYW4ndAorIyBiZSBpbnN0YWxsZWQgdG9nZXRoZXIgd2l0aCBzcGVleGRzcCwgc2luY2UgdGhleSBjb250YWluIG92ZXJsYXBwaW5nIGZpbGVzLgorUkNPTkZMSUNUU18ke1BOfSA9ICJzcGVleCAoPCAxLjJyYzIpIgorUkNPTkZMSUNUU18ke1BOfS1kYmcgPSAic3BlZXgtZGJnICg8IDEuMnJjMikiCitSQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJzcGVleC1kZXYgKDwgMS4ycmMyKSIKK1JDT05GTElDVFNfJHtQTn0tc3RhdGljZGV2ID0gInNwZWV4LXN0YXRpY2RldiAoPCAxLjJyYzIpIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1MTAyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vdHJhYy54aXBoLm9yZy90aWNrZXQvMTkyMl0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK0luZGV4OiBjb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25maWd1cmUuaW4JKHJldmlzaW9uIDE4NzY0KQorKysrIGNvbmZpZ3VyZS5pbgkod29ya2luZyBjb3B5KQorQEAgLTksNyArOSw3IEBACisgQUNfQ0FOT05JQ0FMX0hPU1QKKyBBQ19DQU5PTklDQUxfVEFSR0VUCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIEFNX0lOSVRfQVVUT01BS0UobGlidm9yYmlzaWRlYywxLjIuMSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci90cmVtb3ItYXJtLXRodW1iMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci90cmVtb3ItYXJtLXRodW1iMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDQ5NTQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL3RyZW1vci1hcm0tdGh1bWIyLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitGcm9tOiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE2IEp1bCAyMDEyIDEzOjI5OjM0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHRyZW1vcjogYWRkIElUIGluc3RydWN0aW9ucyBmb3IgYXJtIHRodW1iMiB0dW5lIGZsYWdzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW4gVGh1bWItMiwgbW9zdCBpbnN0cnVjdGlvbnMgZG8gbm90IGhhdmUgYSBidWlsdCBpbiBjb25kaXRpb24gY29kZSAoZXhjZXB0IGZvciAKK2NvbmRpdGlvbmFsIGJyYW5jaGVzKS4gSW5zdGVhZCwgc2hvcnQgc2VxdWVuY2VzIG9mIGluc3RydWN0aW9ucyB3aGljaCBhcmUgdG8gYmUgCitleGVjdXRlZCBjb25kaXRpb25hbGx5IGNhbiBiZSBwcmVjZWRlZCBieSBhIHNwZWNpYWwgIklUIGluc3RydWN0aW9uIiB3aGljaCAKK2Rlc2NyaWJlcyB0aGUgY29uZGl0aW9uIGFuZCB3aGljaCBvZiB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBzaG91bGQgYmUgCitleGVjdXRlZCBpZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIHJlc3BlY3RpdmVseS4gCisKK0ZvciB0aGUgQVJNL1RodW1iIElUKElmLVRoZW4pIGluc3RydWN0aW9uOgoraHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2MuZHVpMDQ4OWMvQ2phYmljY2kuaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBYaW4gT3V5YW5nIDxYaW4uT3V5YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBhc21fYXJtLmggfCAgIDE0ICsrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2FzbV9hcm0uaCBiL2FzbV9hcm0uaAoraW5kZXggYzNiZGEwMC4uODIzYzU0ZiAxMDA3NTUKKy0tLSBhL2FzbV9hcm0uaAorKysrIGIvYXNtX2FybS5oCitAQCAtMTA4LDkgKzEwOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgWE5QUk9EMzEob2dnX2ludDMyX3QgIGEsIG9nZ19pbnQzMl90ICBiLAorIHN0YXRpYyBpbmxpbmUgb2dnX2ludDMyX3QgQ0xJUF9UT18xNShvZ2dfaW50MzJfdCB4KSB7CisgICBpbnQgdG1wOworICAgYXNtIHZvbGF0aWxlKCJzdWJzCSUxLCAlMCwgIzMyNzY4XG5cdCIKKysJICAgICAgICJpdHQgICAgIHBsXG5cdCIKKyAJICAgICAgICJtb3ZwbAklMCwgIzB4N2YwMFxuXHQiCisgCSAgICAgICAib3JycGwJJTAsICUwLCAjMHhmZlxuIgorIAkgICAgICAgImFkZHMJJTEsICUwLCAjMzI3Njhcblx0IgorKwkgICAgICAgIml0ICAgICAgbWlcblx0IgorIAkgICAgICAgIm1vdm1pCSUwLCAjMHg4MDAwIgorIAkgICAgICAgOiAiK3IiKHgpLCI9ciIodG1wKQorIAkgICAgICAgOgorQEAgLTEzOSwxMCArMTQxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3BfbG9vcF9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX3VpbnQzMl90ICpwaXAsCisgICAgICAgCisgICAgICAgImxkbWRiICAgcjAhLHtyMSxyM307IgorICAgICAgICJzdWJzICAgIHIxLHIxLCU0OyIgICAgICAgICAgLy9pbHNwW2pdLXdpCisrICAgICAgIml0ICAgICAgbWk7IgorICAgICAgICJyc2JtaSAgIHIxLHIxLCMwOyIgICAgICAgICAgLy9sYWJzKGlsc3Bbal0td2kpCisgICAgICAgInVtdWxsICAgJTAscjIscjEsJTA7IiAgICAgICAvL3FpKj1sYWJzKGlsc3Bbal0td2kpCisgICAgICAgCisgICAgICAgInN1YnMgICAgcjEscjMsJTQ7IiAgICAgICAgICAvL2lsc3BbaisxXS13aQorKyAgICAgICJpdCAgICAgIG1pOyIKKyAgICAgICAicnNibWkgICByMSxyMSwjMDsiICAgICAgICAgIC8vbGFicyhpbHNwW2orMV0td2kpCisgICAgICAgInVtdWxsICAgJTEscjMscjEsJTE7IiAgICAgICAvL3BpKj1sYWJzKGlsc3BbaisxXS13aSkKKyAgICAgICAKK0BAIC0xNjcsNiArMTcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAibW92ICAgICByMCwjMHg0MDAwO1xuIgorICAgICAgIAorICAgICAgICJzdWJzICAgIHIxLHIxLCU0O1xuIiAgICAgICAgICAvL2lsc3Bbal0td2kKKysgICAgICAiaXQgICAgICBtaTtcbiIKKyAgICAgICAicnNibWkgICByMSxyMSwjMDtcbiIgICAgICAgICAgLy9sYWJzKGlsc3Bbal0td2kpCisgICAgICAgInVtdWxsICAgJTAscjIscjEsJTA7XG4iICAgICAgIC8vcWkqPWxhYnMoaWxzcFtqXS13aSkKKyAgICAgICAidW11bGwgICAlMSxyMyxyMCwlMTtcbiIgICAgICAgLy9waSo9bGFicyhpbHNwW2orMV0td2kpCitAQCAtMTkwLDE4ICsxOTUsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAibW92ICAgICByMiwjMDsiCisgICAgICAgIm9yciAgICAgcjEsJTAsJTE7IgorICAgICAgICJ0c3QgICAgIHIxLCMweGZmMDAwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzg7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjODsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDBmMDAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjNDsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICM0OyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMDBjMDAwMDsiCisrICAgICAgIml0dCAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCMyOyIKKyAgICAgICAibW92bmUgICByMSxyMSxsc3IgIzI7IgorICAgICAgICJ0c3QgICAgIHIxLCMweDAwMDIwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzE7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjMTsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDAwMTAwMDA7IgorKyAgICAgICJpdCAgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjMTsiCisgICAgICAgIm1vdiAgICAgJTAsJTAsbHNyIHIyOyIKKyAgICAgICAibW92ICAgICAlMSwlMSxsc3IgcjI7IgorQEAgLTIyMiwxNSArMjMyLDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsc3Bfbm9ybV9hc20ob2dnX3VpbnQzMl90ICpxaXAsb2dnX2ludDMyX3QgKnFleHBwKXsKKyAgIG9nZ19pbnQzMl90IHFleHA9KnFleHBwOworIAorICAgYXNtKCJ0c3QgICAgICUwLCMweDAwMDBmZjAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICM4OyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjODsiCisgICAgICAgInRzdCAgICAgJTAsIzB4MDAwMGYwMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzQ7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCM0OyIKKyAgICAgICAidHN0ICAgICAlMCwjMHgwMDAwYzAwMDsiCisrICAgICAgIml0dCAgICAgZXE7IgorICAgICAgICJtb3ZlcSAgICUwLCUwLGxzbCAjMjsiCisgICAgICAgInN1YmVxICAgJTEsJTEsIzI7IgorICAgICAgICJ0c3QgICAgICUwLCMweDAwMDA4MDAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICMxOyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjMTsiCisgICAgICAgOiAiK3IiKHFpKSwiK3IiKHFleHApCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yXzIwMTUwMTA3LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yXzIwMTUwMTA3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNzg5NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3JfMjAxNTAxMDcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJGaXhlZC1wb2ludCBkZWNvZGVyIgorREVTQ1JJUFRJT04gPSAidHJlbW9yIGlzIGEgZml4ZWQgcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZvcmJpcyBjb2RlYy4iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRiMWI3YTY2OGIyYTZmNDdiMmFmODhmYjAwOGFkNTU1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29zLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0xNDttZDU9NWMwYWY1ZTFiZWRlZjNjZTgxNzhjODlmNDhjZDZmMWYiCitERVBFTkRTID0gImxpYm9nZyIKK1NSQ0RBVEUgPSAiJHtQVn0iCitQUiA9ICJyMSIKKworIyBTVk4gc3VwcG9ydCBmb3IgdXBzdHJlYW0gdmVyc2lvbiBjaGVjayBpc24ndCBpbXBsZW1lbnRlZCB5ZXQKK1JFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OID0gIjIwMTUwMTA3IgorUkVDSVBFX1VQU1RSRUFNX0RBVEUgPSAiSmFuIDA3LCAyMDE1IgorQ0hFQ0tfREFURSA9ICJBdWcgMTIsIDIwMTUiCisKK1NSQ19VUkkgPSAic3ZuOi8vc3ZuLnhpcGgub3JnL3RydW5rO21vZHVsZT1UcmVtb3I7cmV2PTE5NDI3O3Byb3RvY29sPWh0dHAgXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly90cmVtb3ItYXJtLXRodW1iMi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9UcmVtb3IiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS93ZWJwL2xpYndlYnBfMC40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiODBmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiV2ViUCBpcyBhbiBpbWFnZSBmb3JtYXQgZGVzaWduZWQgZm9yIHRoZSBXZWIiCitERVNDUklQVElPTiA9ICJXZWJQIGlzIGEgbWV0aG9kIG9mIGxvc3N5IGFuZCBsb3NzbGVzcyBjb21wcmVzc2lvbiB0aGF0IGNhbiBiZSBcCisgICAgICAgICAgICAgICB1c2VkIG9uIGEgbGFyZ2UgdmFyaWV0eSBvZiBwaG90b2dyYXBoaWMsIHRyYW5zbHVjZW50IGFuZCBcCisgICAgICAgICAgICAgICBncmFwaGljYWwgaW1hZ2VzIGZvdW5kIG9uIHRoZSB3ZWIuIFRoZSBkZWdyZWUgb2YgbG9zc3kgXAorICAgICAgICAgICAgICAgY29tcHJlc3Npb24gaXMgYWRqdXN0YWJsZSBzbyBhIHVzZXIgY2FuIGNob29zZSB0aGUgdHJhZGUtb2ZmIFwKKyAgICAgICAgICAgICAgIGJldHdlZW4gZmlsZSBzaXplIGFuZCBpbWFnZSBxdWFsaXR5LiBXZWJQIHR5cGljYWxseSBhY2hpZXZlcyBcCisgICAgICAgICAgICAgICBhbiBhdmVyYWdlIG9mIDMwJSBtb3JlIGNvbXByZXNzaW9uIHRoYW4gSlBFRyBhbmQgSlBFRyAyMDAwLCBcCisgICAgICAgICAgICAgICB3aXRob3V0IGxvc3Mgb2YgaW1hZ2UgcXVhbGl0eS4iCitIT01FUEFHRSA9ICJodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9zcGVlZC93ZWJwLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZThkZWU5MzJjMjZmMmRhYjUwM2FiZjcwYzk2ZDhiYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9QQVRFTlRTO21kNT1hZDI1ODBhZWUzNTQ2ODY3NWM0NGQ3YmViYmE2NWNhOCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwODgxMzUyNWVlZWZmZTdlMzA1YjRjYmZhZGU4YWU5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZmJlMGQ1OGZkYTkzNmYyZWQ5OWQwYjgzN2VkNzA4N2QwNjRkNjgzODkzMWYyODJjNDYxOGQyYTNmNzM5MGM0IgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLWRpc2FibGUtZXhwZXJpbWVudGFsIFwKKyAgICAtLWRpc2FibGUtd2ljIFwKKyAgICAtLWVuYWJsZS1saWJ3ZWJwbXV4IFwKKyAgICAtLWVuYWJsZS1saWJ3ZWJwZGVtdXggXAorICAgIC0tZW5hYmxlLXRocmVhZGluZyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisKKyMgbGlid2VicGRlY29kZXIgaXMgYSBzdWJzZXQgb2YgbGlid2VicCwgZG9uJ3QgYnVpbGQgaXQgdW5sZXNzIHJlcXVlc3RlZAorUEFDS0FHRUNPTkZJR1tkZWNvZGVyXSA9ICItLWVuYWJsZS1saWJ3ZWJwZGVjb2RlciwtLWRpc2FibGUtbGlid2VicGRlY29kZXIiCisKKyMgQXBwbHkgZm9yIGV4YW1wbGVzIHByb2dyYW1zOiBjd2VicCBhbmQgZHdlYnAKK1BBQ0tBR0VDT05GSUdbZ2lmXSA9ICItLWVuYWJsZS1naWYsLS1kaXNhYmxlLWdpZixnaWZsaWIiCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbcG5nXSA9ICItLWVuYWJsZS1wbmcsLS1kaXNhYmxlLXBuZywsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLWVuYWJsZS10aWZmLC0tZGlzYWJsZS10aWZmLHRpZmYiCisKKyMgQXBwbHkgb25seSBmb3IgZXhhbXBsZSBwcm9ncmFtIHZ3ZWJwCitQQUNLQUdFQ09ORklHW2dsXSA9ICItLWVuYWJsZS1nbCwtLWRpc2FibGUtZ2wsbWVzYS1nbHV0IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ2lmMndlYnAiCisKK0RFU0NSSVBUSU9OXyR7UE59LWdpZjJ3ZWJwID0gIlNpbXBsZSB0b29sIHRvIGNvbnZlcnQgYW5pbWF0ZWQgR0lGcyB0byBXZWJQIgorRklMRVNfJHtQTn0tZ2lmMndlYnAgPSAiJHtiaW5kaXJ9L2dpZjJ3ZWJwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjQvZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjQvZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzJmY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NC9kb24tdC1kZWZhdWx0LXRvLWNvcnRleC1hOS13aXRoLW5lb24ucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorLW1hcmNoIGZsYWcgaXMgbm90IGluIENGTEFHUyBzbyB0aGlzIHdpbGwgYWx3YXlzIGRlZmF1bHQgdG8gLW1jcHU9Y29ydGV4LWE4CistbWZwdT1uZW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMjkxNjAzNi4uZjRlY2U0MCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzczLDkgKzc3Myw2IEBAIGlmIFsgJGFzbSA9IGF1dG8gLWEgXCggJEFSQ0ggPSBYODYgLW8gJEFSQ0ggPSBYODZfNjQgXCkgXSA7IHRoZW4KKyBmaQorIAorIGlmIFsgJGFzbSA9IGF1dG8gLWEgJEFSQ0ggPSBBUk0gXSA7IHRoZW4KKy0gICAgIyBzZXQgZmxhZ3Mgc28gbmVvbiBpcyBidWlsdCBieSBkZWZhdWx0CistICAgIGVjaG8gJENGTEFHUyB8IGdyZXAgLUVxICcoLW1jcHV8LW1hcmNofC1tZnB1KScgfHwgQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWNvcnRleC1hOCAtbWZwdT1uZW9uIgorLQorICAgICBpZiAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oInJldiBpcCwgaXAiKTsnIDsgdGhlbiAgICAgIGRlZmluZSBIQVZFX0FSTVY2CisgICAgICAgICBjY19jaGVjayAnJyAnJyAnX19hc21fXygibW92dCByMCwgIzAiKTsnICAgICAgICAgJiYgZGVmaW5lIEhBVkVfQVJNVjZUMgorICAgICAgICAgY2NfY2hlY2sgJycgJycgJ19fYXNtX18oInZhZGQuaTE2IHEwLCBxMCwgcTAiKTsnICYmIGRlZmluZSBIQVZFX05FT04KK0BAIC03ODgsOCArNzg1LDYgQEAgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFSTSBdIDsgdGhlbgorIGZpCisgCisgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFBUkNINjQgXSA7IHRoZW4KKy0gICAgIyBzZXQgZmxhZ3Mgc28gbmVvbiBpcyBidWlsdCBieSBkZWZhdWx0CistICAgIGVjaG8gJENGTEFHUyB8IGdyZXAgLUVxICcoLW1jcHV8LW1hcmNofC1tZnB1fC1hcmNoKScgfHwgQ0ZMQUdTPSIkQ0ZMQUdTIC1hcmNoIGFybTY0IC1tZnB1PW5lb24iCisgCisgICAgIGlmICBjY19jaGVjayAnJyAnJyAnX19hc21fXygiY21lcSB2MC44aCwgdjAuOGgsICMwIik7JyA7IHRoZW4gZGVmaW5lIEhBVkVfTkVPTgorICAgICAgICAgQVNGTEFHUz0iJEFTRkxBR1MgLWMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2OTkwOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0X2dpdC5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkguMjY0L01QRUctNCBBVkMgdmlkZW8gZW5jb2RlciIKK0RFU0NSSVBUSU9OID0gIkEgZnJlZSBzb2Z0d2FyZSBsaWJyYXJ5IGFuZCBhcHBsaWNhdGlvbiBmb3IgZW5jb2RpbmcgdmlkZW8gc3RyZWFtcyBpbnRvIHRoZSBILjI2NC9NUEVHLTQgQVZDIGZvcm1hdC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy9kZXZlbG9wZXJzL3gyNjQuaHRtbCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInlhc20tbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdC52aWRlb2xhbi5vcmcveDI2NC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNSRVYgPSAiYzhhNzczZWJmY2ExNDhlZjA0ZjVhNjBkNDJjYmQ3MzM2YWYwYmFmNiIKKworUFYgPSAicjI0OTErZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgbGliX3BhY2thZ2UgcGtnY29uZmlnIHBlcmxuYXRpdmUKKworWDI2NF9ESVNBQkxFX0FTTSA9ICIiCitYMjY0X0RJU0FCTEVfQVNNX2FybXY0ID0gIi0tZGlzYWJsZS1hc20iCitYMjY0X0RJU0FCTEVfQVNNX2FybXY1ID0gIi0tZGlzYWJsZS1hc20iCitYMjY0X0RJU0FCTEVfQVNNX3Bvd2VycGMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgIi0tZGlzYWJsZS1hc20iLCAiIiwgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAnLS1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAtLWhvc3Q9JHtIT1NUX1NZU30gXAorICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7bGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS1jcm9zcy1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgICAgICAgICAgICAgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdGF0aWMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sYXZmIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3dzY2FsZSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcGljIFwKKyAgICAgICAgICAgICAgICAke1gyNjRfRElTQUJMRV9BU019IFwKKyAgICAgICAgICAgICAgICcKKworZG9fY29uZmlndXJlKCkgeworICAgIC4vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQorCisjIEdldCByaWQgb2YgLWUKK0VYVFJBX09FTUFLRSA9ICIiCitBUyA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworIyBQSUMgY2FuJ3QgYmUgZW5hYmxlZCBmb3IgMzItYml0IHg4NgorSU5TQU5FX1NLSVBfJHtQTn1fYXBwZW5kX3g4NiA9ICIgdGV4dHJlbCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvaW1hZ2VzL3F0NGUtZGVtby1pbWFnZS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L2ltYWdlcy9xdDRlLWRlbW8taW1hZ2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MTg0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L2ltYWdlcy9xdDRlLWRlbW8taW1hZ2UuYmIKQEAgLTAsMCArMSwxNCBAQAorREVTQ1JJUFRJT04gPSAiQW4gaW1hZ2UgdGhhdCB3aWxsIGxhdW5jaCBpbnRvIHRoZSBkZW1vIGFwcGxpY2F0aW9uIGZvciB0aGUgZW1iZWRkZWQgKG5vdCBiYXNlZCBvbiBYMTEpIHZlcnNpb24gb2YgUXQuIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKwkke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisJcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZSBcCisiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTAxMDNhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdC5iYgpAQCAtMCwwICsxLDUgQEAKKyMgUXQgdG9vbGNoYWluCitRVE5BTUUgPSAicXQiCitRVF9ESVJfTkFNRSA9ICJxdDQiCisKK3JlcXVpcmUgbWV0YS10b29sY2hhaW4tcXQuaW5jCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzVkOTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYwpAQCAtMCwwICsxLDM1IEBACitUT09MQ0hBSU5fSE9TVF9UQVNLID0gIm5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtJHtRVE5BTUV9LXRvb2xjaGFpbi1ob3N0IHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorVE9PTENIQUlOX1RBUkdFVF9UQVNLID0gInBhY2thZ2Vncm91cC0ke1FUTkFNRX0tdG9vbGNoYWluLXRhcmdldCIKK1RPT0xDSEFJTl9PVVRQVVROQU1FID0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi0ke1FUTkFNRX0tJHtESVNUUk9fVkVSU0lPTn0iCisKK3JlcXVpcmUgcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIKKworUVRfVE9PTFNfUFJFRklYID0gIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1Qke2JpbmRpcl9uYXRpdmVzZGt9IgorCitjcmVhdGVfc2RrX2ZpbGVzX2FwcGVuZCgpIHsKKyAgICBta2RpciAtcCAke1NES19PVVRQVVR9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kLworICAgIHNjcmlwdD0ke1NES19PVVRQVVR9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kLyR7UVRfRElSX05BTUV9LnNoCisKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ0ZMQUdTPSIkQ0ZMQUdTIicgPiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NYWEZMQUdTPSIkQ1hYRkxBR1MiJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xERkxBR1M9IiRMREZMQUdTIicgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DQz0kQ0MnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYPSRDWFgnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTElOSz0kQ1hYJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0FSPSRBUicgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQ9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7bGliZGlyfScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9JTkNESVJfUVQ9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0nID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTU9DPSR7UVRfVE9PTFNfUFJFRklYfS9tb2M0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQz0ke1FUX1RPT0xTX1BSRUZJWH0vdWljNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9VSUMzPSR7UVRfVE9PTFNfUFJFRklYfS91aWMzNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9SQ0M9JHtRVF9UT09MU19QUkVGSVh9L3JjYzQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNDUFAyWE1MPSR7UVRfVE9PTFNfUFJFRklYfS9xZGJ1c2NwcDJ4bWw0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FEQlVTWE1MMkNQUD0ke1FUX1RPT0xTX1BSRUZJWH0vcWRidXN4bWwyY3BwNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUc9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9xY29uZmlnLnByaScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBRTUFLRVNQRUM9JE9FQ09SRV9UQVJHRVRfU1lTUk9PVCR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9saW51eC1nKysnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgUVRfQ09ORl9QQVRIPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1Qke3N5c2NvbmZkaXJ9L3F0LmNvbmYnID4+ICRzY3JpcHQKKworICAgICMgbWFrZSBhIHN5bWJvbGljIGxpbmsgdG8gbWtzcGVjcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFF0IFNESworICAgICMgYW5kIFF0IENyZWF0b3IKKyAgICAoY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS8uLjsgbG4gLXMgJHtTREtUQVJHRVRTWVNST09UfS91c3Ivc2hhcmUvJHtRVF9ESVJfTkFNRX0vbWtzcGVjcyBta3NwZWNzOykKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExM2Y0OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiCkBAIC0wLDAgKzEsNiBAQAorIyBRdCBFbWJlZGRlZCB0b29sY2hhaW4KK1BSID0gInI2IgorUVROQU1FID0gInF0ZSIKK1FUX0RJUl9OQU1FID0gInF0b3BpYSIKKworcmVxdWlyZSBtZXRhLXRvb2xjaGFpbi1xdC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTVjYzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBuYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYworCitTVU1NQVJZID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IFNESyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzI3NWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSByZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCisKK0RFU0NSSVBUSU9OID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKK0xJQ0VOU0UgPSAiTUlUIgorCitSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLXF0NC10b29scyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NmU0YjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi1ob3N0LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBuYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYworCitTVU1NQVJZID0gIkhvc3QgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MWY4YTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0LmJiCkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwICBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZAorIworCitTVU1NQVJZID0gIlF0IHBhY2thZ2UgZ3JvdXBzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyNCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBxdWlja3kgYW5kIGZvdG93YWxsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRlbW9hcHBzIgorCitRVERFTU9TID89ICJxdWlja3kgJHtDT01NRVJDSUFMX1FUfSBmb3Rvd2FsbCIKKworU1VNTUFSWV8ke1BOfS1kZW1vYXBwcyA9ICJRdCBkZW1vIGFwcGxpY2F0aW9ucyIKK1JERVBFTkRTXyR7UE59LWRlbW9hcHBzID0gIiR7UVRERU1PU30iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0NGUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0NGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1ZmExZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQ0ZS5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlF0IGZvciBFbWJlZGRlZCBMaW51eCAoUXQgd2l0aG91dCBYMTEpIgorUFIgPSAicjIiCitMSUNFTlNFID0gIk1JVCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1RPVUNIID0gJyAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ0b3VjaHNjcmVlbiIsICJ0c2xpYiB0c2xpYi1jYWxpYnJhdGUgdHNsaWItdGVzdHMiLCAiIixkKX0nCisKK1JERVBFTkRTXyR7UE59ID0gIiBcCisJcXQ0LWVtYmVkZGVkIFwKKwlsaWJxdC1lbWJlZGRlZDNzdXBwb3J0NCBcCisJbGlicXQtZW1iZWRkZWRjbHVjZW5lNCBcCisJbGlicXQtZW1iZWRkZWRjb3JlNCBcCisJbGlicXQtZW1iZWRkZWRkYnVzNCBcCisJbGlicXQtZW1iZWRkZWRndWk0IFwKKwlsaWJxdC1lbWJlZGRlZGhlbHA0IFwKKwlsaWJxdC1lbWJlZGRlZG11bHRpbWVkaWE0IFwKKwlsaWJxdC1lbWJlZGRlZG5ldHdvcms0IFwKKwlsaWJxdC1lbWJlZGRlZHNjcmlwdDQgXAorCWxpYnF0LWVtYmVkZGVkc2NyaXB0dG9vbHM0IFwKKwlsaWJxdC1lbWJlZGRlZHNxbDQgXAorCWxpYnF0LWVtYmVkZGVkc3ZnNCBcCisJbGlicXQtZW1iZWRkZWR0ZXN0NCBcCisJbGlicXQtZW1iZWRkZWR3ZWJraXQ0IFwKKwlsaWJxdC1lbWJlZGRlZHhtbDQgXAorCXF0NC1lbWJlZGRlZC1mb250cy10dGYtZGVqYXZ1IFwKKwlxdDQtZW1iZWRkZWQtZm9udHMtdHRmLXZlcmEgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taWNvbmVuZ2luZS1zdmdpY29uIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LWdpZiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1pY28gXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1tbmcgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtc3ZnIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LXRpZmYgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tbW91c2Vkcml2ZXItdHNsaWIgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tc2NyaXB0LWRidXMgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisJJHtUT1VDSH0gXAorICAgICAgICBxdDQtZW1iZWRkZWQtZGVtb3MgXAorICAgICAgICBxdDQtZW1iZWRkZWQtZXhhbXBsZXMgXAorICAgICAgICBxdC1kZW1vLWluaXQgXAorICAgICAgICBxdDQtZW1iZWRkZWQtYXNzaXN0YW50IFwKKyIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiIFwKKwlsaWJxdC1lbWJlZGRlZHhtbHBhdHRlcm5zNCBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1waG9ub24tYmFja2VuZC1nc3RyZWFtZXIgXAorIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzJjMTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlRhcmdldCBwYWNrYWdlcyBmb3IgUXQgU0RLIgorCitRVExJQlBSRUZJWCA9ICIiCisKK3JlcXVpcmUgcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gcXQ0LXgxMS1mcmVlCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgcXQ0LXgxMS1mcmVlLWRldiBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2xpYnF0b3BlbmdsNC1kZXYnLCAnJywgZCl9IFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVudmcnLCAnbGlicXRvcGVudmc0LWRldicsICcnLCBkKX0gXAorICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTc4MmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpAQCAtMCwwICsxLDM5IEBACitMSUNFTlNFID0gIk1JVCIKKworIyBRdDQgY291bGQgTk9UIGJlIGJ1aWx0IG9uIE1JUFM2NCB3aXRoIDY0IGJpdHMgdXNlcnNwYWNlCitDT01QQVRJQkxFX0hPU1RfbWlwczY0ID0gIm51bGwiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlkgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgIHBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCBcCisgICAgICAgIHF0NCR7UVRMSUJQUkVGSVh9LW1rc3BlY3MgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9bXVsdGltZWRpYTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfTNzdXBwb3J0NC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Y2x1Y2VuZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWNvcmU0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kYnVzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGVzaWduZXJjb21wb25lbnRzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9ZGVzaWduZXI0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH11aXRvb2xzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Z3VpNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9aGVscDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfW5ldHdvcms0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zY3JpcHQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1zY3JpcHR0b29sczQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXNxbDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXN2ZzQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXRlc3Q0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH13ZWJraXQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH14bWw0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kZWNsYXJhdGl2ZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXhtbHBhdHRlcm5zNC1kZXYgXAorICAgICAgICBsaWJzcWxpdGUzLWRldiBcCisgICAgICAgIGV4cGF0LWRldiBcCisgICAgICAgICIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gIiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1waG9ub240LWRldiBcCisgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlZDIzNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJUYXJnZXQgcGFja2FnZXMgZm9yIFF0IEVtYmVkZGVkIFNESyIKKworUFIgPSAicjciCisKK1FUTElCUFJFRklYID0gIi1lbWJlZGRlZCIKKworcmVxdWlyZSBwYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbC9FeHBvcnRXaXphcmQtZGVwZW5kcy1vbi11aV93aXphcmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiMmIyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0FwcC9FeHBvcnRXaXphcmQuY3BwIGRlcGVuZHMgb24gd2l6YXJkLmggd2hpY2ggZGVwZW5kcyBvbiB1aV93aXphcmQuIFRoZSBsYXN0IG9uZQorc2hvdWxkIGJlIGFscmVhZHkgZ2VuZXJhdGVkIGJlZm9yZSBjb21waWxpbmcgRXhwb3J0V2l6YXJkLmNwcC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBGb3Rvd2FsbC0wLjkvQXBwL0V4cG9ydFdpemFyZC5jcHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBGb3Rvd2FsbC0wLjkub3JpZy9BcHAvRXhwb3J0V2l6YXJkLmNwcAkyMDA5LTExLTMwIDEzOjIxOjMxLjAwMDAwMDAwMCArMDIwMAorKysrIEZvdG93YWxsLTAuOS9BcHAvRXhwb3J0V2l6YXJkLmNwcAkyMDEyLTA1LTEwIDE3OjEyOjA2Ljc2NTIzMDgzMCArMDMwMAorQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSAiaW1hZ2Vsb2FkZXJxdC5oIgorICNpbmNsdWRlICJwb3N0ZXJhem9yY29yZS5oIgorICNpbmNsdWRlICJ3aXphcmQuaCIKKysjaW5jbHVkZSAidWlfd2l6YXJkLmgiCisgCisgI2luY2x1ZGUgPFFEZXNrdG9wU2VydmljZXM+CisgI2luY2x1ZGUgPFFEZXNrdG9wV2lkZ2V0PgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsXzAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWYwMjY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJDcmVhdGl2ZSBwaG90byBkaXNwbGF5IGFwcGxpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiRm90b3dhbGwgaXMgYSBjcmVhdGl2ZSB0b29sIHRoYXQgYWxsb3dzIHlvdSB0byBsYXlvdXQgeW91ciBwaG90b3Mgb3IgcGljdHVyZXMgXAoraW4gYSBwZXJzb25hbCB3YXkuIFlvdSBjYW4gYWRkIHBpY3R1cmVzLCB0aGVuIHJlc2l6ZSwgbW92ZSwgY2hhbmdlIGNvbG9ycywgdGV4dCwgc2hhZG93cywgZXRjLi4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZW5yaWNvcm9zLmNvbS9vcGVuc291cmNlL2ZvdG93YWxsIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9HUExfVjI7bWQ1PTc5ODA4Mzk3YzMzNTVmMTYzYzAxMjYxNjEyNWM5ZTI2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uY3BwO2JlZ2lubGluZT02O2VuZGxpbmU9MTE7bWQ1PWI1NjlhY2MyYmY4OTc0YTMwODJiNThmYzUzYjlkOGRjIgorU0VDVElPTiA9ICJ4MTEvYXBwcyIKKworUFIgPSAicjQiCisKK1NSQ1JFViA9ICIwNmQ1YTQxNDJjNTk5NjA0ZDlhOWZkNjQ3MjdiNjk0NWViOGNkM2RhIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Vucmljb3Jvcy9mb3Rvd2FsbC5naXQgXAorICAgICAgICAgICBmaWxlOi8vRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IHF0NHgxMQorCitFWFRSQV9RTUFLRVZBUlNfUFJFID0gIkNPTkZJRys9bm8td2ViY2FtIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgSU5TVEFMTF9ST09UPSR7RH0gaW5zdGFsbAorfQorCisjIEVuc3VyZSB3ZSBoYXZlIHNvbWUgcGx1Z2lucyBmb3Igc29tZSB1c2VmdWwgaW1hZ2UgZm9ybWF0cworUlJFQ09NTUVORFNfJHtQTn0gKz0gInF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtZ2lmIHF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBxdDQtcGx1Z2luLWltYWdlZm9ybWF0LXRpZmYiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcC9uby1ob3N0LXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYjViYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEbyBub3QgaW5jbHVkZSAvdXNyL2luY2x1ZGUgaG9zdCBwYXRocworCitUaGVzZSB3ZXJlIGFkZGVkIHVwc3RyZWFtIGFwcGFyZW50bHkgZm9yIGZyZWVic2Qgc3VwcG9ydCwgYnV0IHRyaWdnZXIKK2NvbXBpbGVyIHdhcm5pbmdzIGR1cmluZyB0aGUgYnVpbGQgYW5kIGNvdWxkIGJlIGRhbmdlcm91cywgc28gcmVtb3ZlCit0aGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Nyb3NzXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVXBkYXRlIHBhdGNoIGZvciB2ZXJzaW9uIDAuNy40LgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIHFtbXAtMC43LjQvQ01ha2VMaXN0cy50eHQJMjAxNC0wMS0xMCAwOTo1OTo0NC45NzE4Mzc3NDYgKzA4MDAKKysrKyBxbW1wLTAuNy40L0NNYWtlTGlzdHMudHh0Lm5ldwkyMDE0LTAxLTEwIDEwOjI0OjUxLjg1NTgzNzU2NiArMDgwMAorQEAgLTEsOSArMSw1IEBACisgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNi4wKQorIAorLSNmcmVlYnNkIHN1cHBvcnQKKy1pbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAvdXNyL2xvY2FsL2luY2x1ZGUpCistU0VUKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7Q01BS0VfUkVRVUlSRURfSU5DTFVERVN9IC91c3IvbG9jYWwvaW5jbHVkZSkKKy0KKyAjZXh0cmFjdCB2ZXJzaW9uIGZyb20gcW1tcC5oCisgRklMRShTVFJJTkdTICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3JjL3FtbXAvcW1tcC5oIgorICAgICAgUU1NUF9WRVJTSU9OX0RBVEEgUkVHRVggIl4jZGVmaW5lWyBcdF0rUU1NUF9WRVJTSU9OX1tBLVpdK1sgXHRdK1swLTldKy4qJCIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXBfMC44LjYuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXBfMC44LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4YWQwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcF8wLjguNi5iYgpAQCAtMCwwICsxLDc2IEBACitTVU1NQVJZID0gIlF0LWJhc2VkIE11bHRpbWVkaWEgUGxheWVyIgorREVTQ1JJUFRJT04gPSAiUW1tcCBpcyBhbiBhdWRpbyBwbGF5ZXIsIHdyaXR0ZW4gd2l0aCB0aGUgaGVscCBvZiB0aGUgUXQgbGlicmFyeS4gVGhlIHVzZXIgaW50ZXJmYWNlIGlzIHNpbWlsYXIgdG8gV2luYW1wIG9yIFhNTVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3FtbXAueWxzb2Z0d2FyZS5jb20iCitMSUNFTlNFID0gIkdQTHYyIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCisKK0RFUEVORFMgPSAidGFnbGliIGxpYm1hZCBsaWJ2b3JiaXMgbGlib2dnIGFsc2EtbGliIGxpYnNuZGZpbGUxIGxpYnNhbXBsZXJhdGUwIGN1cmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3FtbXAueWxzb2Z0d2FyZS5jb20vZmlsZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ob3N0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2N2U5NmU4OWM2MWI3NDMyZTVhMTJmNTU1ZGI3MDJiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZGFlYTNmMGEwZGY3YjM0MDg5NTEzYzJjNTc0MTNjODI4MTZhYjg4OTJiZGRhYmY0OWMxOGE3OTU2MjU1NDQ5IgoraW5oZXJpdCBjbWFrZSBxdDR4MTEKKworUU1NUF9QTFVHSU5fT1BUSU9OUyA/Pz0gIlwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01NUzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01QQzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX01PRFBMVUc6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9XQVZQQUNLOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfRkZNUEVHOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQUFDOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQ0RBOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTUlESTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0dNRTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX09TUzQ6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9KQUNLOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfQlMyQjpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX1BST0pFQ1RNOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfRU5DQTpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworZXhwb3J0IEVYVFJBX09FQ01BS0UgPSAiLURRVF9RTUFLRV9FWEVDVVRBQkxFPSR7T0VfUU1BS0VfUU1BS0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfTFJFTEVBU0VfRVhFQ1VUQUJMRT0ke09FX1FNQUtFX0xSRUxFQVNFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX01PQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfTU9DfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1VJQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfVUlDfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1JDQ19FWEVDVVRBQkxFPSR7T0VfUU1BS0VfUkNDfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX0xJQlJBUllfRElSPSR7T0VfUU1BS0VfTElCRElSX1FUfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX0hFQURFUlNfRElSPSR7T0VfUU1BS0VfSU5DRElSX1FUfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFFUX1FUQ09SRV9JTkNMVURFX0RJUj0ke09FX1FNQUtFX0lOQ0RJUl9RVH0vUXRDb3JlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7UU1NUF9QTFVHSU5fT1BUSU9OU30gXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBFbnN1cmUgd2UgZ2V0IHRoZSBjbWFrZSBjb25maWd1cmUgYW5kIG5vdCBxbWFrZQorCWNtYWtlX2RvX2NvbmZpZ3VyZQorfQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecW1tcC1wbHVnaW4tLiogIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgcW1tcF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3FtbXAnKQorICAgIGdkID0gZC5leHBhbmQoJyR7RH0vJHtsaWJkaXJ9L3FtbXAnKQorICAgIHBsdWdfZGlycyA9IG9zLmxpc3RkaXIoZ2QpCisKKyAgICBmb3IgcGx1Z19kaXIgaW4gcGx1Z19kaXJzOgorICAgICAgICBnX3BsdWdfZGlyID0gb3MucGF0aC5qb2luKHFtbXBfbGliZGlyLHBsdWdfZGlyKQorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnX3BsdWdfZGlyLCAnXmxpYiguKilcLnNvJCcsICdxbW1wLXBsdWdpbi0nICsgcGx1Z19kaXIubG93ZXIoKSArICctJXMnLCAnUW1tcCAnICsgcGx1Z19kaXIgICsgJyBwbHVnaW4gZm9yICVzJykKK30KKworRklMRVNfJHtQTn0gPSAiXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9xbW1wIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy8qIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3FtbXAvaW1hZ2VzLyogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyogXAorICAgICAgICAgICAgICAgICIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3FtbXAvKi8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ0YWdsaWIgYWxzYS1saWIgbGlibWFkIGN1cmwgbGliaWN1aTE4biIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcXVpY2t5XzAuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcXVpY2t5XzAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhNTYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xdWlja3lfMC40LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgbm90ZS10YWtpbmcgYXBwbGljYXRpb24gd2l0aCBXaWtpLXN0eWxlIHN5bnRheCBhbmQgYmVoYXZpb3VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LWFwcHMub3JnL2NvbnRlbnQvc2hvdy5waHAvUXVpY2t5P2NvbnRlbnQ9ODAzMjUiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3ZlcnNpb24uaDtlbmRsaW5lPTE5O21kNT04NzhiZGFmZjQzOGRhYjg2Mjk4MzAxZmQxYTIxMGUxNCIKK1NFQ1RJT04gPSAieDExL2FwcHMiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9xdC1hcHBzLm9yZy9DT05URU5UL2NvbnRlbnQtZmlsZXMvODAzMjUtcXVpY2t5LTAuNC50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MjRkOWU0NzdlZTljNDk5NGY3M2EzY2IyMTUxNjFkOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzY2Mzc2ZTAwMzVkNDQ1NDc2MTJiZjYyOTg5MDc2OWE2MTc4YzNlN2VhZmJjZjk1ZjFjNjIwN2FjMGYzNTJhIgorCitpbmhlcml0IHF0NHgxMQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9LyR7QlBOfSAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0L3F0ZGVtby1pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjAyNzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKworc2V0IC1lCisKK2lmIFsgLXggL3Vzci9iaW4vcXRkZW1vIF07IHRoZW4KKwlRVERFTU89InF0ZGVtbyIKK2Vsc2UKKwlRVERFTU89InF0ZGVtb0UgLXF3cyIKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyBxdGRlbW8iCisJaWYgWyAtZiAvZXRjL3Byb2ZpbGUuZC90c2xpYi5zaCBdOyB0aGVuCisJCS4gL2V0Yy9wcm9maWxlLmQvdHNsaWIuc2gKKwlmaQorCWlmIFsgLWUgIiRUU0xJQl9UU0RFVklDRSIgXTsgdGhlbgorCQlpZiBbICEgLWYgL2V0Yy9wb2ludGVyY2FsIF07IHRoZW4KKwkJCS91c3IvYmluL3RzX2NhbGlicmF0ZQorCQlmaQorCQlpZiBbICIkUVRERU1PIiA9ICJxdGRlbW8iIF07IHRoZW4KKwkJCVhvcmcgJgorCQkJZXhwb3J0IERJU1BMQVk9OjAKKwkJCSRRVERFTU8gJgorCQllbHNlCisJCQlRV1NfTU9VU0VfUFJPVE89dHNsaWI6JFRTTElCX1RTREVWSUNFICRRVERFTU8gJgorCQlmaQorCWVsc2UKKwkJaWYgWyAiJFFUREVNTyIgPSAicXRkZW1vIiBdOyB0aGVuCisJCQlYb3JnICYKKwkJCWV4cG9ydCBESVNQTEFZPTowCisJCWZpCisJCSRRVERFTU8gJgorCWZpCisJOzsKKyAgc3RvcCkKKwllY2hvICJTdG9wcGluZyBxdGRlbW8iCisJaWYgWyAiJFFUREVNTyIgPSAicXRkZW1vIiBdOyB0aGVuCisJCWtpbGxhbGwgWG9yZworCQlraWxsYWxsIHF0ZGVtbworCWVsc2UKKwkJa2lsbGFsbCBxdGRlbW9FCisJZmkKKwk7OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICopCisJZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0XzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0XzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFiMGI2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQtZGVtby9xdC1kZW1vLWluaXRfMC4xLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiSW5pdCBzY3JpcHQgZm9yIHF0ZGVtbyIKK0xJQ0VOU0UgPSAiTUlUIgorU1JDX1VSSSA9ICJmaWxlOi8vcXRkZW1vLWluaXQiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9xdGRlbW8taW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcXRkZW1vCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgYWxsYXJjaAorCitJTklUU0NSSVBUX05BTUUgPSAicXRkZW1vIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgNSAyIC4gc3RvcCAxOSAwIDEgNiAuIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0LWdyYXBoaWNzLXN5c3RlbS9xdDQtZ3JhcGhpY3Mtc3lzdGVtXzEuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC1ncmFwaGljcy1zeXN0ZW0vcXQ0LWdyYXBoaWNzLXN5c3RlbV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzZjNkYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC1ncmFwaGljcy1zeXN0ZW0vcXQ0LWdyYXBoaWNzLXN5c3RlbV8xLjAuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJTZXRzIGRlZmF1bHQgUXQ0IEdyYXBoaWNzIFN5c3RlbSB0byAke1FUX0dSQVBISUNTX1NZU1RFTX0iCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitQUiA9ICJyMSIKKworUVRfR1JBUEhJQ1NfU1lTVEVNID89ICJyYXN0ZXIiCisKK2RlZiBfZ2V0X2V4dHJhX3JkZXBlbmRzKGQpOgorICAgIGdzID0gZC5nZXRWYXIoJ1FUX0dSQVBISUNTX1NZU1RFTScsIFRydWUpCisgICAgaWYgZ3MgPT0gIm9wZW5nbCI6CisgICAgICAgIHJldHVybiAicXQ0LXBsdWdpbi1ncmFwaGljc3N5c3RlbXMtZ2xncmFwaGljc3N5c3RlbSIKKworICAgIHJldHVybiAiIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCisJY2ZnX2ZpbGU9JHtEfS8ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC9xdC1ncmFwaGljc3N5c3RlbQorCWVjaG8gImV4cG9ydCBRVF9HUkFQSElDU1NZU1RFTT0ke1FUX0dSQVBISUNTX1NZU1RFTX0iID4gJGNmZ19maWxlCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7QF9nZXRfZXh0cmFfcmRlcGVuZHMoZCl9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NzAwOGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29scy5pbmMKQEAgLTAsMCArMSwxMjUgQEAKK1NVTU1BUlkgPSAiU0RLIHRvb2xzIGZvciBRdCB2ZXJzaW9uIDQueCIKK0RFUEVORFMgPSAibmF0aXZlc2RrLXpsaWIgbmF0aXZlc2RrLWRidXMgcXQ0LW5hdGl2ZSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEnLCAnJywgZCl9IgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vcXQ0LSR7UFZ9OiIKKworaW5oZXJpdCBuYXRpdmVzZGsgcW1ha2UyCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnF0LXByb2plY3Qub3JnL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8ke1BWfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1jb25maWd1cmUtcW1ha2UtaXMtYWxyZWFkeS1idWlsdC1pbi1xdDQtdG9vbHMtbmF0aXZlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWNvbmZpZ3VyZS1Vc2UtT0VfUU1BS0VfLXZhbHVlcy10by1zcGVjaWZ5LVF0LXV0aWxpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIgorCitTID0gIiR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkdQTDM7bWQ1PTZlMTY5NGVlMzM4ZGI0MTA0MTc1MTc4ODQ5MThkNGQyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUExfRVhDRVBUSU9OLnR4dDttZDU9MDE0NWM0ZDFiNmY5NmE2NjFjMmMxMzlkZmIyNjhmYjYiCisKK3JlcXVpcmUgcXQ0X2FyY2guaW5jCisKKyMgRklYTUU6IG1ha2UgaXQgd29yayB3aXRoICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZyAtLWNmbGFncyBkYnVzLTEiCitFWFRSQV9PRUNPTkYgPSAiLXByZWZpeCAke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgIC1xdC1saWJqcGVnIC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgLW5vLWxpYmpwZWcgLW5vLWxpYnBuZyAtbm8tbGlibW5nIC1uby1saWJ0aWZmIFwKKyAgICAgICAgICAgICAgICAtbm8tYWNjZXNzaWJpbGl0eSBcCisgICAgICAgICAgICAgICAgLW5vLWN1cHMgXAorICAgICAgICAgICAgICAgIC1uby1leGNlcHRpb25zICBcCisgICAgICAgICAgICAgICAgLW5vLW5hcy1zb3VuZCBcCisgICAgICAgICAgICAgICAgLW5vLW5pcyAtbm8tb3BlbnNzbCBcCisgICAgICAgICAgICAgICAgLXZlcmJvc2UgLXJlbGVhc2UgLWZhc3QgLXN0YXRpYyBcCisgICAgICAgICAgICAgICAgLXBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorICAgICAgICAgICAgICAgIC14cGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisgICAgICAgICAgICAgICAgLWFyY2ggJHtRVF9BUkNIfSBcCisgICAgICAgICAgICAgICAgLWVtYmVkZGVkIC1uby1mcmVldHlwZSAtbm8tZ2xpYiAtbm8taWNvbnYgXAorICAgICAgICAgICAgICAgIC1xdDNzdXBwb3J0IFwKKyAgICAgICAgICAgICAgICAtSSR7U1RBR0lOR19ESVJfSE9TVH0ke1NES1BBVEhOQVRJVkV9L3Vzci9pbmNsdWRlL2RidXMtMS4wIFwKKyAgICAgICAgICAgICAgICAtSSR7U1RBR0lOR19ESVJfSE9TVH0ke1NES1BBVEhOQVRJVkV9L3Vzci9saWIvZGJ1cy0xLjAvaW5jbHVkZSIKKworIyB5YW5rIGRlZmF1bHQgLWUsIG90aGVyd2lzZSB3ZSBnZXQgdGhlIGZvbGxvd2luZyBlcnJvcjoKKyMgbW9jX3FidWZmZXIuY3BwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitFWFRSQV9PRU1BS0UgPSAiICIKKworZG9fY29uZmlndXJlKCkgeworICAgICMgQXZvaWQgcHJvYmxlbXMgd2l0aCBRdCA0LjguMCBjb25maWd1cmUgc2V0dGluZyBRTUFLRV9MSU5LIGZyb20gTEQgKHNpbmNlIHdlIHdhbnQgdGhlIGxpbmtlciB0byBiZSBnKyspCisgICAgdW5zZXQgTEQKKworICAgIGlmIFsgISAtZSBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysgXTsgdGhlbgorICAgICAgICBsbiAtc2YgbGludXgtZysrIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKworICAgIGZpCisKKyAgICBjcCAuLi9nKysuY29uZiBta3NwZWNzL2NvbW1vbgorICAgIGNwIC4uL2xpbnV4LmNvbmYgbWtzcGVjcy9jb21tb24KKworICAgIGlmIFsgLWYgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZiBdIDsgdGhlbgorICAgICAgICAjIGRvbid0IHVzZSBob3N0IGcrKyBldmVuIGR1cmluZyBjb25maWd1cmUgKDQuOC4wKykKKyAgICAgICAgc2VkIC1pIC1lICJzIz0gZysrIz0gJHtDWFh9IyIgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZgorICAgICAgICBzZWQgLWkgLWUgInMjPSBnY2MjPSAke0NDfSMiIG1rc3BlY3MvY29tbW9uL2crKy1iYXNlLmNvbmYKKyAgICBmaQorCisgICAgIyBVc2UgcW1ha2UgZnJvbSBxdDQtbmF0aXZlIGZvciBidWlsZGluZworICAgIGlmIFsgISAtZSBiaW4vcW1ha2UgXTsgdGhlbgorICAgICAgICBsbiAtc2YgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiBiaW4vcW1ha2UKKyAgICBmaQorICAgIHNldF9hcmNoCisgICAgKGVjaG8gbzsgZWNobyB5ZXMpIHwgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHx8IGRpZSAiQ29uZmlndXJpbmcgcXQgZmFpbGVkLiBFWFRSQV9PRUNPTkYgd2FzICR7RVhUUkFfT0VDT05GfSIKK30KKworVE9CVUlMRCA9ICJcCisgIHNyYy90b29scy9ib290c3RyYXAgXAorICBzcmMvdG9vbHMvbW9jIFwKKyAgc3JjL2NvcmVsaWIgXAorICBzcmMvc3FsIFwKKyAgc3JjL2RidXMgXAorICBzcmMvcXQzc3VwcG9ydCBcCisgIHNyYy94bWwgXAorICBzcmMvdG9vbHMvdWljIFwKKyAgc3JjL3Rvb2xzL3JjYyBcCisgIHNyYy9uZXR3b3JrIFwKKyAgc3JjL2d1aSBcCisgIHNyYy90b29scy91aWMzIFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHJlbGVhc2UgXAorICB0b29scy9saW5ndWlzdC9sdXBkYXRlIFwKKyAgdG9vbHMvcWRidXMgXAorIgorCitkb19jb21waWxlKCkgeworICAgIGZvciBpIGluICR7VE9CVUlMRH07IGRvCisgICAgICAgIGNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorICAgIGRvbmUKKworICAgICMgQnVpbGQgbmF0aXZlc2RrIHFtYWtlCisgICAgZXhwb3J0IFFNQUtFU1BFQz0iJHtTfS9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCisgICAgY2QgJHtTfS9xbWFrZQorICAgICR7T0VfUU1BS0VfUU1BS0V9CisgICAgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorICAgIGNkICR7U30KK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlMiAke0R9JHtiaW5kaXJ9L3FtYWtlMgorICAgIGZvciBpIGluIG1vYyB1aWMgdWljMyByY2MgbHJlbGVhc2UgbHVwZGF0ZSBxZGJ1c2NwcDJ4bWwgcWRidXN4bWwyY3BwOyBkbworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgYmluLyR7aX0gJHtEfSR7YmluZGlyfS8ke2l9NAorICAgIGRvbmUKKworICAgIChjZCAke0R9JHtiaW5kaXJ9OyBcCisgICAgbG4gLXMgcW1ha2UyIHFtYWtlOyBcCisgICAgZm9yIGkgaW4gbW9jIHVpYyB1aWMzIHJjYyBscmVsZWFzZSBsdXBkYXRlIHFkYnVzY3BwMnhtbCBxZGJ1c3htbDJjcHA7IGRvIFwKKyAgICAgICAgbG4gLXMgJHtpfTQgJHtpfTsgXAorICAgIGRvbmUpCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgY2F0ID4ke0R9JHtzeXNjb25mZGlyfS9xdC5jb25mIDw8RU9GCitbUGF0aHNdCitQcmVmaXggPSAke3ByZWZpeH0KK0VPRgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29sc180LjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJhMDdjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIG5hdGl2ZXNkay1xdDQtdG9vbHMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImQ5OTBlZTY2YmY3YWIwYzc4NTU4OTc3NmYzNWJhNmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyODgyMjk1MDk3ZTQ3ZmUwODlmOGFjNzQxYTk1ZmVmNDdlMGE3M2EzZjNjZGYyMWI1Njk5MDYzOGY2MjZlYTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTdlNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYwpAQCAtMCwwICsxLDY4IEBACitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UuR1BMMzttZDU9NmUxNjk0ZWUzMzhkYjQxMDQxNzUxNzg4NDkxOGQ0ZDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTF9FWENFUFRJT04udHh0O21kNT0wMTQ1YzRkMWI2Zjk2YTY2MWMyYzEzOWRmYjI2OGZiNiIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vcXQ0LSR7UFZ9OiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQucXQtcHJvamVjdC5vcmcvb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyR7UFZ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1BZGQtMmJwcC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtY29uZmlndXJlLWFkZC1jcm9zc2FyY2gtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtY29uZmlndXJlLWFkZC1ub3N0cmlwLWZvci1kZWJ1Zy1wYWNrYWdlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LWNvbmZpZ3VyZS1lbnN1cmUtd2UtaWRlbnRpZnktdGhlLWNvbXBpbGVyLWFzLWctaW4tY28ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1jb25maWd1cmUtbWFrZS1wdWxzZWF1ZGlvLWEtY29uZmlndXJhYmxlLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LUZpeGVzLWZvci1nY2MtNC43LjAtcGFydGljdWxhcmx5LW9uLXFlbXV4ODYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LURvbi10LWNyYXNoLW9uLWJyb2tlbi1HSUYtaW1hZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1hYXJjaDY0X2FkZF9oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LVFXU0xvY2staW52YWxpZC1hcmd1bWVudC1sb2dzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDk5MGVlNjZiZjdhYjBjNzg1NTg5Nzc2ZjM1YmE2YWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTI4ODIyOTUwOTdlNDdmZTA4OWY4YWM3NDFhOTVmZWY0N2UwYTczYTNmM2NkZjIxYjU2OTkwNjM4ZjYyNmVhMCIKKworUyA9ICIke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0iCisKKyMgZGlzYWJsZSB3ZWJraXQgZm9yIG1pcHM2NCBuMzIgdGVtcG9yYXJpbHkgdGhhdCBmYWlscyB0byBjb21waWxlLAorIyBxdCB1cHN0cmVhbSBkZWZlY3Q6CisjIGh0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMzkyMjQKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfbWlwczY0bjMyID0gIiAtbm8td2Via2l0IgorCisjIGRpc2FibGUgd2Via2l0IGZvciBhYXJjaDY0IHRlbXBvcmFyaWx5IHRoYXQgZmFpbHMgdG8gY29tcGlsZQorUVRfQ09ORklHX0ZMQUdTX2FwcGVuZF9hYXJjaDY0ID0gIiAtbm8td2Via2l0IgorCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHNfYXBwZW5kICAgICA9ICIgJHtiaW5kaXJ9L3FtbCAke2JpbmRpcn0vcW1scGx1Z2luZHVtcCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10b29scy1kYmdfYXBwZW5kID0gIiAke2JpbmRpcn0vLmRlYnVnL3FtbCAke2JpbmRpcn0vLmRlYnVnL3FtbHBsdWdpbmR1bXAiCisKK1BBQ0tBR0VTX2FwcGVuZCA9ICIgJHtRVF9CQVNFX05BTUV9LXRlc3RzLWRiZyAke1FUX0JBU0VfTkFNRX0tdGVzdHMiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdGVzdHMtZGJnICAgICAgICA9ICIke3ByZWZpeH0vdGVzdHMvcXQ0LyovLmRlYnVnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRlc3RzICAgICAgICAgICAgPSAiJHtwcmVmaXh9L3Rlc3RzL3F0NC8qIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgJ3M6cXRQcmVwYXJlVG9vbChMUkVMRUFTRSwgbHJlbGVhc2UpOkxSRUxFQVNFID0gJHtPRV9RTUFLRV9MUkVMRUFTRX06ZycgXAorICAgICAgICAke1N9L3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvCisKKyAgICBzZWQgLWkgXAorICAgIC1lIC9RTUFLRV9NT0NcIC9kIFwKKyAgICAtZSAvUU1BS0VfVUlDXCAvZCBcCisgICAgLWUgL1FNQUtFX1VJQzNcIC9kIFwKKyAgICAtZSAvUU1BS0VfUkNDXCAvZCBcCisgICAgJHtTfS9jb25maWd1cmUKKworICAgICMgQXZvaWQgcHJvYmxlbXMgd2l0aCBRdCA0LjguMCBjb25maWd1cmUgc2V0dGluZyBRTUFLRV9MSU5LIGZyb20gTEQgKHNpbmNlIHdlIHdhbnQgdGhlIGxpbmtlciB0byBiZSBnKyspCisgICAgdW5zZXQgTEQKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDEtcWxpYnJhcnlpbmZvLWFsbG93LXRvLXNldC1xdC5jb25mLWZyb20tdGhlLW91dHNpZGUtdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGIwYTA5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA1NTA5N2QyN2U4Yjc0NmIzZDVmZjQzNzkzOWNhZjFmYTQzYzBkNjJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSG9sZ2VyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMTc6MjI6MzAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8yMV0gcWxpYnJhcnlpbmZvOiBhbGxvdyB0byBzZXQgcXQuY29uZiBmcm9tIHRoZSBvdXRzaWRlCisgdXNpbmcgdGhlIGVudmlyb25tZW50CisKK0FsbG93IHRvIHNldCBhIHF0LmNvbmYgZnJvbSB0aGUgb3V0c2lkZSB1c2luZyB0aGUgZW52aXJvbm1lbnQuIFRoaXMgYWxsb3dzCit0byBpbmplY3QgbmV3IHByZWZpeGVzIGFuZCBvdGhlciBwYXRocyBpbnRvIHFtYWtlLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nCit0aGUgc2FtZSBxbWFrZSBiaW5hcnkgdG8gYnVpbGQgcXQveDExIGFuZCBxdC9lbWJlZGRlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAgYi9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcAoraW5kZXggMTgwZGMzOS4uNGFkYWQzNSAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwCisrKysgYi9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcAorQEAgLTU0LDYgKzU0LDcgQEAKKyBRVF9CRUdJTl9OQU1FU1BBQ0UKKyBleHRlcm4gUVN0cmluZyBxbWFrZV9saWJyYXJ5SW5mb0ZpbGUoKTsKKyBRVF9FTkRfTkFNRVNQQUNFCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNlbHNlCisgIyBpbmNsdWRlICJxY29yZWFwcGxpY2F0aW9uLmgiCisgI2VuZGlmCitAQCAtMTEyLDYgKzExMywxMCBAQCBRU2V0dGluZ3MgKlFMaWJyYXJ5SW5mb1ByaXZhdGU6OmZpbmRDb25maWd1cmF0aW9uKCkKKyAjaWZkZWYgQk9PVFNUUkFQUElORworICAgICBpZighUUZpbGU6OmV4aXN0cyhxdGNvbmZpZykpCisgICAgICAgICBxdGNvbmZpZyA9IHFtYWtlX2xpYnJhcnlJbmZvRmlsZSgpOworKyAgICBpZiAoIVFGaWxlOjpleGlzdHMocXRjb25maWcpKSB7CisrICAgICAgICBRQnl0ZUFycmF5IGNvbmZpZyA9IGdldGVudigiUVRfQ09ORl9QQVRIIik7CisrICAgICAgICBxdGNvbmZpZyA9IFFGaWxlOjpkZWNvZGVOYW1lKGNvbmZpZyk7CisrICAgIH0KKyAjZWxzZQorICAgICBpZiAoIVFGaWxlOjpleGlzdHMocXRjb25maWcpICYmIFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCkpIHsKKyAjaWZkZWYgUV9PU19NQUMKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmYzg4NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA1ZTZiMTA1MWFmYTMwOTlhMDJhNzU4YjA1OTYyMzY3NTlkNzA2NzBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjE4OjA4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMjFdIHFrYmR0dHlfcXdzOiBmaXggYnVpbGQgd2l0aCBvbGQga2VybmVsIGhlYWRlcnMKKworVGhpcyBpc3N1ZSBpcyB0aGF0IHdpdGggQysrIGNvbXBpbGVyIHByb2Nlc3MgYW4gb2xkIHZlcnNpb24gb2Yga2VybmVsCitoZWFkZXIgZmlsZSwgY29pbmNpZGVudGx5IHRoYXQgZmlsZSBoYXMgYSB2YXJpYWJsZSBuYW1lZCAnbmV3JzoKKworKiAnZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwJyBpbmNsdWRlICdsaW51eC92dC5oJzsKKyogJy91c3IvaW5jbHVkZS9saW51eC92dC5oJyBoYXMgYmVsb3cgY29kZSBvbiBTTEVELTExLng6CisgICAgKyB1bnNpZ25lZCBpbnQgbmV3OworCitPbiBtb3N0bHkgaG9zdHMgaXQgaGFzIGJlZW4gY2hhbmdlZCB0bzogbmV3IC0+IG5ld2V2LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcCB8IDEyICsrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwCitpbmRleCBhNDY4MTFiLi43NjIxMzhmIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwCitAQCAtNTQsOCArNTQsMjAgQEAKKyAKKyAjaWYgZGVmaW5lZCBRX09TX0xJTlVYCisgIyAgaW5jbHVkZSA8bGludXgva2QuaD4KKysKKysvKiBXb3JrYXJvdW5kIGtlcm5lbCBoZWFkZXJzIHVzaW5nICJuZXciIGFzIHZhcmlhYmxlIG5hbWUuIFRoZSBwcm9ibGVtCisrIGlzIHNwZWNpZmljIHRvIFNMRUQtMTEsIG90aGVyIGRpc3Ryb3MgdXNlICJuZXdldiIgcmF0aGVyIHRoYW4gIm5ldyIgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKysjd2FybmluZyAid29ya2Fyb3VuZCBrZXJuZWwgaGVhZGVycyB1c2luZyBuZXcgYXMgdmFyaWFibGUgbmFtZSBvbiBTTEVEIDExIgorKyNkZWZpbmUgbmV3IG5ld2V2CisrI2VuZGlmCisrCisgIyAgaW5jbHVkZSA8bGludXgvdnQuaD4gLy9UT0RPOiBtb3ZlIHZ0IGhhbmRsaW5nIHNvbWV3aGVyZSBlbHNlIChRTGludXhGYlNjcmVlbj8pCisgCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrI3VuZGVmIG5ldworKyNlbmRpZgorKworICMgIGluY2x1ZGUgInFzY3JlZW5fcXdzLmgiCisgIyAgaW5jbHVkZSAicXdpbmRvd3N5c3RlbV9xd3MuaCIKKyAjICBpbmNsdWRlICJxYXBwbGljYXRpb24uaCIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2FlYTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBiNjgwNWU4ODNjMDc4Zjc2NDdkOTIzNGFjYTRlMzUxM2ViZDFjOWJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVHVlLCAxIE1heSAyMDEyIDA3OjQ4OjE1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMjFdIHdlYmtpdDI6IHNldCBPVVRQVVRfRElSIHZhbHVlIGlmIGVtcHR5CisKK1dpdGhvdXQgdGhpcyBkb19jb25maWd1cmUgd2FzIHRyeWluZyB0byBjcmVhdGUgL2luY2x1ZGUvV2ViQ29yZS9saWJkdW1teS5wcmwgaW4gcm9vdCBvZiBidWlsZCBob3N0IGZpbGVzeXN0ZW0KK25vdyBpdCdzIGluIHByb3BlciBwbGFjZSAke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjEvc3JjLzNyZHBhcnR5L3dlYmtpdC9pbmNsdWRlL1dlYkNvcmUvbGliZHVtbXkucHJsCisKK0ZpcnN0IHJlcG9ydGVkIGhlcmU6CitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vb3BlbmVtYmVkZGVkLWRldmVsQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbXNnMjQ0MzYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8gYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworaW5kZXggMDA2YTg4Yy4uNWUxNzE5MyAxMDA2NDQKKy0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybworQEAgLTMsNiArMyw4IEBAIFRBUkdFVCA9IGR1bW15CisgCisgQ09ORklHIC09IGRlYnVnX2FuZF9yZWxlYXNlCisgCisraXNFbXB0eShPVVRQVVRfRElSKTogT1VUUFVUX0RJUiA9IC4uLy4uCisrCisgQ09ORklHKHN0YW5kYWxvbmVfcGFja2FnZSkgeworICAgICBpc0VtcHR5KFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSKTpXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9ICQkUFdEL2dlbmVyYXRlZAorICAgICBpc0VtcHR5KFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUik6V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSID0gJCRQV0QvLi4vV2ViQ29yZS9nZW5lcmF0ZWQKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDQtY29uZmlndXJlLXFtYWtlLWlzLWFscmVhZHktYnVpbHQtaW4tcXQ0LXRvb2xzLW5hdGl2ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWI4YTU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBhZjY5OWM2ZThjZjlmYjI4ZDZmOGI3ODliZjMzZDUzYjQ3ZWRhZWM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoyNDoyMCArMDIwMAorU3ViamVjdDogW1BBVENIIDA0LzIxXSBjb25maWd1cmU6IHFtYWtlIGlzIGFscmVhZHkgYnVpbHQgaW4gcXQ0LXRvb2xzLW5hdGl2ZSwKKyBzbyBkaXNhYmxlIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBlM2Q0NjRiLi5jYzA0YjI3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00ODk5LDcgKzQ4OTksNyBAQCBzZXRCb290c3RyYXBWYXJpYWJsZSgpCisgfQorIAorICMgYnVpbGQgcW1ha2UKKy1pZiB0cnVlOyB0aGVuICMjI1sgJyEnIC1mICIkb3V0cGF0aC9iaW4vcW1ha2UiIF07CisraWYgZmFsc2U7IHRoZW4gIyMjWyAnIScgLWYgIiRvdXRwYXRoL2Jpbi9xbWFrZSIgXTsKKyAgICAgZWNobyAiQ3JlYXRpbmcgcW1ha2UuIFBsZWFzZSB3YWl0Li4uIgorIAorICAgICBPTERfUUNPTkZJR19IPQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNS1jb25maWd1cmUtc2V0LUxGTEFHUy10by1waWNrLXVwLXpsaWItZnJvbS1zdGFnaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGYyYjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGFjOTMyMzdiYzkwZWE3NzczYzBlZjUyNzU5NjJiYWJhMDFkNGE5YzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/SmVyZW15PTIwTGFpbj1DMz1BOT89IDxqZXJlbXkubGFpbmVAbTR4Lm9yZz4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6Mjc6NDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8yMV0gY29uZmlndXJlOiBzZXQgTEZMQUdTIHRvIHBpY2sgdXAgemxpYiBmcm9tIHN0YWdpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggY2MwNGIyNy4uNWE3YzRlZSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjkwLDcgKzY5MCw3IEBAIGZpCisgIyBpbml0YWxpemUgdmFyaWFibGVzCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKy1TWVNURU1fVkFSSUFCTEVTPSJSQU5MSUIgU1RSSVAgT0JKRFVNUCBMRCBDQyBDWFggQ0ZMQUdTIENYWEZMQUdTIExERkxBR1MiCisrU1lTVEVNX1ZBUklBQkxFUz0iUkFOTElCIFNUUklQIE9CSkRVTVAgTEQgQ0MgQ1hYIENGTEFHUyBDWFhGTEFHUyBMREZMQUdTIExGTEFHUyIKKyBmb3IgdmFybmFtZSBpbiAkU1lTVEVNX1ZBUklBQkxFUzsgZG8KKyAgICAgcW1ha2V2YXJuYW1lPSIke3Zhcm5hbWV9IgorICAgICAjIHVzZSBMREZMQUdTIGZvciBhdXRvY29uZiBjb21wYXQsIGJ1dCBxbWFrZSB1c2VzIFFNQUtFX0xGTEFHUworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNi1jb25maWd1cmUtVXNlLU9FX1FNQUtFXy12YWx1ZXMtdG8tc3BlY2lmeS1RdC11dGlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZWJmNzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDBiYzBkYjgzODEyYjU5MDBkYzRlNmZmYTk2YmRlYWI0NmI2YWRjYWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6Mjk6MDkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8yMV0gY29uZmlndXJlOiBVc2UgT0VfUU1BS0VfKiB2YWx1ZXMgdG8gc3BlY2lmeSBRdCB1dGlsaXR5CisgcGF0aHMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1YTdjNGVlLi5kYjRkMDQ0IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC04NjgzLDExICs4NjgzLDExIEBAIFFNQUtFX0FCU09MVVRFX1NPVVJDRV9ST09UID0gXCRcJFFUX1NPVVJDRV9UUkVFCisgUU1BS0VfTU9DX1NSQyAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL3NyYy9tb2MKKyAKKyAjbG9jYWwgcGF0aHMgdGhhdCBjYW5ub3QgYmUgcXVlcmllZCBmcm9tIHRoZSBRVF9JTlNUQUxMXyogcHJvcGVydGllcyB3aGlsZSBidWlsZGluZyBRVERJUgorLVFNQUtFX01PQyAgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vbW9jCistUU1BS0VfVUlDICAgICAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi91aWMKKy1RTUFLRV9VSUMzICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3VpYzMKKy1RTUFLRV9SQ0MgICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3JjYworLVFNQUtFX1FEQlVTWE1MMkNQUCA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi9xZGJ1c3htbDJjcHAKKytRTUFLRV9NT0MgICAgICAgID0gXCR7T0VfUU1BS0VfTU9DfQorK1FNQUtFX1VJQyAgICAgICAgPSBcJHtPRV9RTUFLRV9VSUN9CisrUU1BS0VfVUlDMyAgICAgICA9IFwke09FX1FNQUtFX1VJQzN9CisrUU1BS0VfUkNDICAgICAgICA9IFwke09FX1FNQUtFX1JDQ30KKytRTUFLRV9RREJVU1hNTDJDUFAgPSBcJHtPRV9RTUFLRV9RREJVU1hNTDJDUFB9CisgUU1BS0VfSU5DRElSX1FUICA9IFwkXCRRVF9CVUlMRF9UUkVFL2luY2x1ZGUKKyBRTUFLRV9MSUJESVJfUVQgID0gXCRcJFFUX0JVSUxEX1RSRUUvbGliCisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA3LWRidXMtUmVtb3ZlLWNvbnN0LXVzYWdlLXRoYXQtY2F1c2VzLWNvbXBpbGUtZmFpbHVyZS0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyM2M5MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjAxMWJiODAyOTQ4MGFmMWQxMjY2ZjI1OGU1YTVmNWNlZjczOTJkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdmVsIEhlaW1saWNoIDx0cm9waWtoYWptYUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjMxOjEwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMjFdIGRidXM6IFJlbW92ZSAiY29uc3QiIHVzYWdlIHRoYXQgY2F1c2VzIGNvbXBpbGUgZmFpbHVyZQorIGJ1aWxkaW5nIG5hdGl2ZXNkay1xdDQtdG9vbHMKKworUGF0Y2ggaGFzIGFwcGFyZW50bHkgYmVlbiByZWplY3RlZCB1cHN0cmVhbSwgbm90IGJlY2F1c2UgaXQgaXMgaW52YWxpZAorYnV0IGJlY2F1c2UgdGhlIHN1Ym1pdHRlciBkaWQgbm90IHN1Ym1pdCBhIG1lcmdlIHJlcXVlc3QgZm9yIGl0LCBzbyB0aGUKK3ZhbGlkaXR5IG9mIHRoZSBwYXRjaCB1cHN0cmVhbSBpcyB1bmNlcnRhaW4uIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOgoraHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0xNzk2MgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbcG9zc2libGUgcmV0cnldCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwIGIvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcAoraW5kZXggMGYwYjY0Ny4uYWE0Y2JhYiAxMDA2NDQKKy0tLSBhL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAKKysrKyBiL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAKK0BAIC03Myw3ICs3Myw3IEBAIFFUX0JFR0lOX05BTUVTUEFDRQorIHN0YXRpYyBib29sIGlzRGVidWdnaW5nOworICNkZWZpbmUgcURCdXNEZWJ1ZyAgICAgICAgICAgICAgaWYgKCE6OmlzRGVidWdnaW5nKTsgZWxzZSBxRGVidWcKKyAKKy1RX0dMT0JBTF9TVEFUSUNfV0lUSF9BUkdTKGNvbnN0IFFTdHJpbmcsIG9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZywgKFFMYXRpbjFTdHJpbmcoREJVU19TRVJWSUNFX0RCVVMpKSkKKytRX0dMT0JBTF9TVEFUSUNfV0lUSF9BUkdTKFFTdHJpbmcsIG9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZywgKFFMYXRpbjFTdHJpbmcoREJVU19TRVJWSUNFX0RCVVMpKSkKKyAKKyBzdGF0aWMgaW5saW5lIFFTdHJpbmcgZGJ1c1NlcnZpY2VTdHJpbmcoKQorIHsgcmV0dXJuICpvcmdGcmVlZGVza3RvcERCdXNTdHJpbmcoKTsgfQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMDdmNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDY0Y2U1ZDBlN2MxOTQzNmI5MjhhMmEwZDlkMTkyZjU2YmUzYzliYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzI6NDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8yMV0gcW1ha2UucHJvOiBBbGxvdyBidWlsZGluZyBhIHNlcGFyYXRlIHFtYWtlIGZvciB0aGUKKyB0YXJnZXQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgcW1ha2UvcW1ha2UucHJvIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9xbWFrZS9xbWFrZS5wcm8gYi9xbWFrZS9xbWFrZS5wcm8KK2luZGV4IDM4ZTBmY2UuLjUzYjFmZmIgMTAwNjQ0CistLS0gYS9xbWFrZS9xbWFrZS5wcm8KKysrKyBiL3FtYWtlL3FtYWtlLnBybworQEAgLTcsNiArNyw3IEBAIENPTkZJRyArPSBjb25zb2xlIGJvb3RzdHJhcAorIENPTkZJRyAtPSBxdCBzaGFyZWQgYXBwX2J1bmRsZSB1aWMKKyBERUZJTkVTICs9IFFUX0JVSUxEX1FNQUtFIFFUX0JPT1RTVFJBUFBFRAorIERFU1RESVIgPSAuLi9iaW4vCisrVEFSR0VUID0gcW1ha2UyCisgCisgT0JKRUNUU19ESVIgPSAuCisgTU9DX0RJUiA9IC4KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViOGMxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBlMTI5ZGMwZDZjZGU2OWRkMTVkMTgzNmM0MTExZTA1MjZmYzI5MTYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjMzOjQ5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMjFdIHFtYWtlOiBmaXggc291cmNlIGZpbGUgcmVmZXJlbmNlcyBpbiBxbWFrZS5wcmkKKworRml4IGR1cGxpY2F0ZSBlbnRyaWVzIGluIFNPVVJDRVMgYW5kIEhFQURFUlMsIGFuZCBmaXggdGhlIHNvdXJjZSBmaWxlCitsaXN0IGZvciB0aGUgc3BsaXQgb2YgcWxvY2FsZS5jcHAuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHFtYWtlL3FtYWtlLnByaSB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcW1ha2UvcW1ha2UucHJpIGIvcW1ha2UvcW1ha2UucHJpCitpbmRleCAzMWY2N2Y0Li45MDgxNjY5IDEwMDY0NAorLS0tIGEvcW1ha2UvcW1ha2UucHJpCisrKysgYi9xbWFrZS9xbWFrZS5wcmkKK0BAIC0yMiw4ICsyMiw3IEBAIFNPVVJDRVMgKz0gcHJvamVjdC5jcHAgcHJvcGVydHkuY3BwIG1haW4uY3BwIGdlbmVyYXRvcnMvbWFrZWZpbGUuY3BwIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvc3ltYmlhbi9pbml0cHJvamVjdGRlcGxveV9zeW1iaWFuLmNwcCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuY3BwIFwKKyAgICAgICAgICAgIHdpbmRvd3MvcmVnaXN0cnkuY3BwIFwKKy0gICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3QuY3BwIFwKKy0gICAgICAgICAgIGdlbmVyYXRvcnMvaW50ZWdyaXR5L2didWlsZC5jcHAKKysgICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3QuY3BwCisgCisgSEVBREVSUyArPSBwcm9qZWN0LmggcHJvcGVydHkuaCBnZW5lcmF0b3JzL21ha2VmaWxlLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy91bml4L3VuaXhtYWtlLmggbWV0YS5oIG9wdGlvbi5oIGNhY2hla2V5cy5oIFwKK0BAIC00MCw4ICszOSw3IEBAIEhFQURFUlMgKz0gcHJvamVjdC5oIHByb3BlcnR5LmggZ2VuZXJhdG9ycy9tYWtlZmlsZS5oIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvc3ltYmlhbi9pbml0cHJvamVjdGRlcGxveV9zeW1iaWFuLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmggXAorICAgICAgICAgICAgd2luZG93cy9yZWdpc3RyeV9wLmggXAorLSAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdF9wLmggXAorLSAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmgKKysgICAgICAgICAgIHN5bWJpYW4vZXBvY3Jvb3RfcC5oCisgCisgY29udGFpbnMoUVRfRURJVElPTiwgT3BlblNvdXJjZSkgeworICAgIERFRklORVMgKz0gUU1BS0VfT1BFTlNPVVJDRV9FRElUSU9OCitAQCAtNzIsNiArNzAsOCBAQCBib290c3RyYXAgeyAjUXQgY29kZQorICAgICAgICAgcWxpc3QuY3BwIFwKKyAgICAgICAgIHFsaW5rZWRsaXN0LmNwcCBcCisgICAgICAgICBxbG9jYWxlLmNwcCBcCisrICAgICAgICBxbG9jYWxlX3Rvb2xzLmNwcCBcCisrICAgICAgICBxbG9jYWxlX3VuaXguY3BwIFwKKyAgICAgICAgIHFtYWxsb2MuY3BwIFwKKyAgICAgICAgIHFtYXAuY3BwIFwKKyAgICAgICAgIHFtZXRhdHlwZS5jcHAgXAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMC1jb25maWd1cmUtSGFjay10by1ub3QtdXNlLXRoZS1wZ19jb25maWctb2YtdGhlLWhvc3QtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNmEwYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDQ4ODg3OTFkMTg5OWY3ODFhZjcxMGRkODgxMzg4N2RlYTUyZmRhNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb2xnZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozNjozOCArMDIwMAorU3ViamVjdDogW1BBVENIIDEwLzIxXSBjb25maWd1cmU6IEhhY2sgdG8gbm90IHVzZSB0aGUgcGdfY29uZmlnIG9mIHRoZSBob3N0Cisgc3lzdGVtIHdoaWNoIHdpbGwgYWRkIC91c3IvaW5jbHVkZQorCitwZ19jb25maWcgaXMgYSBuYXRpdmUgYmluYXJ5IHNvIHVzaW5nIHRoYXQgd2hlbiBjcm9zcyBjb21waWxpbmcKK3dpbGwgYWx3YXlzIGZhaWwuICBUaGUgY29tbWVudGVkIG91dCBmaXggd291bGQgZG8sIGJ1dCBmb3IgT0UKK291ciAtcGxhdGZvcm0gYW5kIC14cGxhdGZvcm0gaXMgdGhlIHNhbWUgc28gd2UgYXJlIGFjdHVhbGx5IG5vdAorcmVhbGx5IGNyb3NzIGNvbXBpbGluZy4gSnVzdCBjb21tZW50IG91dCB0aGUgdGVzdCwgd2UgYXJlIHBhc3NpbmcKK3RoZSBsb2NhdGlvbiB0byB0aGUgcG9zdGdyZXMgaGVhZGVycyBhbmQgaWYgdGhleSBhcmUgb2theSB3ZQord2lsbCBwYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcGRhdGUgZm9yIHF0IDQuOC43LgorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkYjRkMDQ0Li4zNWE4ZmU3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC01NTc0LDEwICs1NTc0LDEwIEBACisgICAgICAgICAgICAgaWYgWyAiJENGR19TUUxfcHNxbCIgIT0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgIFsgLXogIiRDRkdfUFNRTF9DT05GSUciIF0gJiYgQ0ZHX1BTUUxfQ09ORklHPWAiJFdISUNIIiBwZ19jb25maWdgCisgICAgICAgICAgICAgICAgICMgQmUgY2FyZWZ1bCBub3QgdG8gdXNlIG5hdGl2ZSBwZ19jb25maWcgd2hlbiBjcm9zcyBidWlsZGluZy4KKy0gICAgICAgICAgICAgICAgaWYgWyAiJFhQTEFURk9STV9NSU5HVyIgIT0gInllcyIgXSAmJiBbIC14ICIkQ0ZHX1BTUUxfQ09ORklHIiBdOyB0aGVuCistICAgICAgICAgICAgICAgICAgICBRVF9DRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWluY2x1ZGVkaXIgMj4vZGV2L251bGxgCistICAgICAgICAgICAgICAgICAgICBRVF9MRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWxpYmRpciAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICAgICAgZmkKKysjICAgICAgICAgICAgICAgIGlmIFsgIiRYUExBVEZPUk1fTUlOR1ciICE9ICJ5ZXMiIF0gJiYgWyAteCAiJENGR19QU1FMX0NPTkZJRyIgXTsgdGhlbgorKyMgICAgICAgICAgICAgICAgICAgIFFUX0NGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0taW5jbHVkZWRpciAyPi9kZXYvbnVsbGAKKysjICAgICAgICAgICAgICAgICAgICBRVF9MRkxBR1NfUFNRTD1gJENGR19QU1FMX0NPTkZJRyAtLWxpYmRpciAyPi9kZXYvbnVsbGAKKysjICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIFsgLXogIiRRVF9DRkxBR1NfUFNRTCIgXSB8fCBRVF9DRkxBR1NfUFNRTD0iLUkkUVRfQ0ZMQUdTX1BTUUwiCisgICAgICAgICAgICAgICAgIFsgLXogIiRRVF9MRkxBR1NfUFNRTCIgXSB8fCBRVF9MRkxBR1NfUFNRTD0iLUwkUVRfTEZMQUdTX1BTUUwiCisgICAgICAgICAgICAgICAgICMgQnV0LCByZXNwZWN0IFBTUUxfTElCUyBpZiBzZXQKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTEtZnJlZXR5cGUtaG9zdC1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg3OWM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSAzZmNmZmE3OWU2YTVmMDQ0OGNiZmUyYmIzM2ZlMTIxOGY1ZGFlNjFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorRGF0ZTogTW9uLCA0IEp1biAyMDA3IDE0OjQ4OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMjFdIGZyZWV0eXBlIGhvc3QgaW5jbHVkZXMKKworSG9zdCBpbmNsdWRlIHBhdGggc2hvdWxkIG5vdCBiZSB1c2VkIGluIGNyb3NzIGNvbXBpbGluZyBjYXNlLgorCitQb3J0ZWQgZnJvbSBPRSBieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkgYi9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkKK2luZGV4IDdlZjFjZjkuLmIzNjJmY2QgMTAwNjQ0CistLS0gYS9jb25maWcudGVzdHMvdW5peC9mcmVldHlwZS9mcmVldHlwZS5wcmkKKysrKyBiL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaQorQEAgLTEsNSArMSw1IEBACisgIWNyb3NzX2NvbXBpbGUgeworLSAgICBUUllfSU5DTFVERVBBVEhTID0gL2luY2x1ZGUgL3Vzci9pbmNsdWRlICQkUU1BS0VfSU5DRElSICQkUU1BS0VfSU5DRElSX1gxMSAkJElOQ0xVREVQQVRICisrICAgIFRSWV9JTkNMVURFUEFUSFMgPSAkJFFNQUtFX0lOQ0RJUiAkJFFNQUtFX0lOQ0RJUl9YMTEgJCRJTkNMVURFUEFUSAorICAgICAjIExTQiBkb2Vzbid0IGFsbG93IHVzaW5nIGhlYWRlcnMgZnJvbSAvaW5jbHVkZSBvciAvdXNyL2luY2x1ZGUKKyAgICAgbGludXgtbHNiLWcrKzpUUllfSU5DTFVERVBBVEhTID0gJCRRTUFLRV9JTkNESVIgJCRRTUFLRV9JTkNESVJfWDExICQkSU5DTFVERVBBVEgKKyAgICAgZm9yKHAsIFRSWV9JTkNMVURFUEFUSFMpIHsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTItQWRkLTJicHAtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQxMWYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwzMTggQEAKK0Zyb20gODc0NDI3M2ZjNDUyZWI1NGJiZWViN2QxNTgyMzAwOWNlOTI2YzZmYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KZXJlbXk9MjBMYWluPUMzPUE5Pz0gPGplcmVteS5sYWluZUBtNHgub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozOToyMSArMDIwMAorU3ViamVjdDogW1BBVENIIDEyLzIxXSBBZGQgMmJwcCBzdXBwb3J0CisKK1N1Ym1pdHRlZCB1cHN0cmVhbSBidXQgcmVqZWN0ZWQgYXMgYmVpbmcgIm91dCBvZiBzY29wZSI6CitodHRwczovL2J1Z3JlcG9ydHMucXQtcHJvamVjdC5vcmcvYnJvd3NlL1FUQlVHLTM0NjgKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCisgc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAgICAgICAgIHwgMjExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwIHwgICA0ICstCisgMyBmaWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMzVhOGZlNy4uNzljMWM3YiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzA2Myw2ICs3MDYzLDcgQEAgaWYgWyAiJENGR19RV1NfREVQVEhTIiA9ICJwcm9tcHRlZCIgLWEgIiRQUk9NUFRfRk9SX0RFUFRIUyIgPSAieWVzIiBdOyB0aGVuCisgICAgIGVjaG8gIkNob29zZSBwaXhlbC1kZXB0aHMgdG8gc3VwcG9ydDoiCisgICAgIGVjaG8KKyAgICAgZWNobyAiICAgMS4gMWJwcCwgYmxhY2svd2hpdGUiCisrICAgIGVjaG8gIiAgIDIuIDJicHAsIGdyYXlzY2FsZSIKKyAgICAgZWNobyAiICAgNC4gNGJwcCwgZ3JheXNjYWxlIgorICAgICBlY2hvICIgICA4LiA4YnBwLCBwYWxldHRlZCIKKyAgICAgZWNobyAiICAxMi4gMTJicHAsIHJnYiA0LTQtNCIKK0BAIC03MDgxLDExICs3MDgyLDExIEBAIGlmIFsgIiRDRkdfUVdTX0RFUFRIUyIgPSAicHJvbXB0ZWQiIC1hICIkUFJPTVBUX0ZPUl9ERVBUSFMiID0gInllcyIgXTsgdGhlbgorIGZpCisgaWYgWyAtbiAiJENGR19RV1NfREVQVEhTIiAtYSAiJFBMQVRGT1JNX1FXUyIgPSAieWVzIiBdOyB0aGVuCisgICAgIGlmIFsgIiRDRkdfUVdTX0RFUFRIUyIgPSAiYWxsIiBdOyB0aGVuCistICAgICAgICBDRkdfUVdTX0RFUFRIUz0iMSA0IDggMTIgMTUgMTYgMTggMjQgMzIgZ2VuZXJpYyIKKysgICAgICAgIENGR19RV1NfREVQVEhTPSIxIDIgNCA4IDEyIDE1IDE2IDE4IDI0IDMyIGdlbmVyaWMiCisgICAgIGZpCisgICAgIGZvciBEIGluIGBlY2hvICIkQ0ZHX1FXU19ERVBUSFMiIHwgc2VkIC1lICdzLywvIC9nJ2A7IGRvCisgCWNhc2UgJEQgaW4KKy0JICAgIDF8NHw4fDEyfDE1fDE2fDE4fDI0fDMyKSBRQ09ORklHX0ZMQUdTPSIkUUNPTkZJR19GTEFHUyBRVF9RV1NfREVQVEhfJEQiOzsKKysJICAgIDF8Mnw0fDh8MTJ8MTV8MTZ8MTh8MjR8MzIpIFFDT05GSUdfRkxBR1M9IiRRQ09ORklHX0ZMQUdTIFFUX1FXU19ERVBUSF8kRCI7OworIAkgICAgZ2VuZXJpYykgUUNPTkZJR19GTEFHUz0iJFFDT05GSUdfRkxBR1MgUVRfUVdTX0RFUFRIX0dFTkVSSUMiOzsKKyAJZXNhYworICAgICBkb25lCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcAoraW5kZXggYjMwN2JmMi4uODg5NTBiMyAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcAorQEAgLTQ2OSw2ICs0NjksNTggQEAgc3RhdGljIHZvaWQgc29saWRGaWxsX2dyYXk0KFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUNvbG9yICZjb2xvciwKKyB9CisgI2VuZGlmIC8vIFFUX1FXU19ERVBUSF80CisgCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrc3RhdGljIGlubGluZSB2b2lkIHF0X3JlY3RmaWxsX2dyYXkyKHF1aW50OCAqZGVzdCwgcXVpbnQ4IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmlkZSkKKyt7CisrICAgIGNvbnN0IGludCBwaXhlbHNQZXJCeXRlID0gNDsKKysgICAgY29uc3QgaW50IGFsaWduV2lkdGggPSBxTWluKHdpZHRoLCAoNCAtICh4ICYgMykpICYgMyk7CisrICAgIGNvbnN0IGludCBkb0FsaWduID0gKGFsaWduV2lkdGggPiAwID8gMSA6IDApOworKyAgICBjb25zdCBpbnQgYWxpZ25TdGFydCA9IHBpeGVsc1BlckJ5dGUgLSAxIC0gKHggJiAzKTsKKysgICAgY29uc3QgaW50IGFsaWduU3RvcCA9IGFsaWduU3RhcnQgLSAoYWxpZ25XaWR0aCAtIDEpOworKyAgICBjb25zdCBxdWludDggYWxpZ25NYXNrID0gKCgxIDw8ICgyICogYWxpZ25XaWR0aCkpIC0gMSkgPDwgKDIgKiBhbGlnblN0b3ApOworKyAgICBjb25zdCBpbnQgdGFpbFdpZHRoID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgJiAzOworKyAgICBjb25zdCBpbnQgZG9UYWlsID0gKHRhaWxXaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IHF1aW50OCB0YWlsTWFzayA9ICgxIDw8ICgyICogKHBpeGVsc1BlckJ5dGUgLSB0YWlsV2lkdGgpKSkgLSAxOworKyAgICBjb25zdCBpbnQgd2lkdGg4ID0gKHdpZHRoIC0gYWxpZ25XaWR0aCkgLyBwaXhlbHNQZXJCeXRlOworKworKyAgICBkZXN0ICs9IHkgKiBzdHJpZGUgKyB4IC8gcGl4ZWxzUGVyQnl0ZTsKKysgICAgc3RyaWRlIC09IChkb0FsaWduICsgd2lkdGg4KTsKKysKKysgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgeworKyAgICAgICAgaWYgKGRvQWxpZ24pIHsKKysgICAgICAgICAgICAqZGVzdCA9ICgqZGVzdCAmIH5hbGlnbk1hc2spIHwgKHZhbHVlICYgYWxpZ25NYXNrKTsKKysgICAgICAgICAgICArK2Rlc3Q7CisrICAgICAgICB9CisrICAgICAgICBpZiAod2lkdGg4KSB7CisrICAgICAgICAgICAgcXRfbWVtZmlsbDxxdWludDg+KGRlc3QsIHZhbHVlLCB3aWR0aDgpOworKyAgICAgICAgICAgIGRlc3QgKz0gd2lkdGg4OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRvVGFpbCkKKysgICAgICAgICAgICAqZGVzdCA9ICgqZGVzdCAmIHRhaWxNYXNrKSB8ICh2YWx1ZSAmIH50YWlsTWFzayk7CisrICAgICAgICBkZXN0ICs9IHN0cmlkZTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBzb2xpZEZpbGxfZ3JheTIoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRQ29sb3IgJmNvbG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUmVnaW9uICZyZWdpb24pCisreworKyAgICBxdWludDggKmRlc3QgPSByZWludGVycHJldF9jYXN0PHF1aW50OCo+KHNjcmVlbi0+YmFzZSgpKTsKKysgICAgY29uc3QgcXVpbnQ4IGMgPSBxR3JheShjb2xvci5yZ2JhKCkpID4+IDY7CisrICAgIGNvbnN0IHF1aW50OCBjOCA9IChjIDw8IDYpIHwgKGMgPDwgNCkgfCAoYyA8PCAyKSB8IGM7CisrCisrICAgIGNvbnN0IGludCBzdHJpZGUgPSBzY3JlZW4tPmxpbmVzdGVwKCk7CisrICAgIGNvbnN0IFFWZWN0b3I8UVJlY3Q+IHJlY3RzID0gcmVnaW9uLnJlY3RzKCk7CisrCisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsKKysgICAgICAgIGNvbnN0IFFSZWN0IHIgPSByZWN0cy5hdChpKTsKKysgICAgICAgIHF0X3JlY3RmaWxsX2dyYXkyKGRlc3QsIGM4LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSk7CisrICAgIH0KKyt9CisrI2VuZGlmIC8vIFFUX1FXU19ERVBUSF8yCisrCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgc3RhdGljIGlubGluZSB2b2lkIHF0X3JlY3RmaWxsX21vbm8ocXVpbnQ4ICpkZXN0LCBxdWludDggdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCitAQCAtNTc2LDYgKzYyOCwxMSBAQCB2b2lkIHF0X3NvbGlkRmlsbF9zZXR1cChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFDb2xvciAmY29sb3IsCisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5zb2xpZEZpbGwgPSBzb2xpZEZpbGxfZ3JheTQ7CisgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysgICAgY2FzZSAyOgorKyAgICAgICAgc2NyZWVuLT5kX3B0ci0+c29saWRGaWxsID0gc29saWRGaWxsX2dyYXkyOworKyAgICAgICAgYnJlYWs7CisrI2VuZGlmCisgI2lmZGVmIFFUX1FXU19ERVBUSF8xCisgICAgIGNhc2UgMToKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPnNvbGlkRmlsbCA9IHNvbGlkRmlsbF9tb25vOworQEAgLTEwMDYsNiArMTA2MywxNDkgQEAgc3RhdGljIHZvaWQgYmxpdF80KFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUltYWdlICZpbWFnZSwKKyB9CisgI2VuZGlmIC8vIFFUX1FXU19ERVBUSF80CisgCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrCisrc3RydWN0IHFncmF5MiB7IHF1aW50OCBkdW1teTsgfSBRX1BBQ0tFRDsKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgU1JDPgorK3N0YXRpYyBpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKFNSQyBjb2xvcik7CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MzIgY29sb3IpCisreworKyAgICByZXR1cm4gcUdyYXkoY29sb3IpID4+IDY7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihxdWludDE2IGNvbG9yKQorK3sKKysgICAgY29uc3QgaW50IHIgPSAoY29sb3IgJiAweGY4MDApID4+IDExOworKyAgICBjb25zdCBpbnQgZyA9IChjb2xvciAmIDB4MDdlMCkgPj4gNjsgLy8gb25seSBrZWVwIDUgYml0CisrICAgIGNvbnN0IGludCBiID0gKGNvbG9yICYgMHgwMDFmKTsKKysgICAgcmV0dXJuIChyICogMTEgKyBnICogMTYgKyBiICogNSkgPj4gODsKKyt9CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHFyZ2I0NDQgY29sb3IpCisreworKyAgICByZXR1cm4gcXRfY29udmVydFRvR3JheTIocXVpbnQzMihjb2xvcikpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocWFyZ2I0NDQ0IGNvbG9yKQorK3sKKysgICAgcmV0dXJuIHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MzIoY29sb3IpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFNSQz4KKytzdGF0aWMgaW5saW5lIHZvaWQgcXRfcmVjdGNvbnZlcnRfZ3JheTIocWdyYXkyICpkZXN0MiwgY29uc3QgU1JDICpzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgY29uc3QgaW50IHBpeGVsc1BlckJ5dGUgPSA0OworKyAgICBxdWludDggKmRlc3Q4ID0gcmVpbnRlcnByZXRfY2FzdDxxdWludDgqPihkZXN0MikKKysgICAgICAgICAgICAgICAgICAgICsgeSAqIGRzdFN0cmlkZSArIHggLyBwaXhlbHNQZXJCeXRlOworKyAgICBjb25zdCBpbnQgYWxpZ25XaWR0aCA9IHFNaW4od2lkdGgsICg0IC0gKHggJiAzKSkgJiAzKTsKKysgICAgY29uc3QgaW50IGRvQWxpZ24gPSAoYWxpZ25XaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IGludCBhbGlnblN0YXJ0ID0gcGl4ZWxzUGVyQnl0ZSAtIDEgLSAoeCAmIDMpOworKyAgICBjb25zdCBpbnQgYWxpZ25TdG9wID0gYWxpZ25TdGFydCAtIChhbGlnbldpZHRoIC0gMSk7CisrICAgIGNvbnN0IHF1aW50OCBhbGlnbk1hc2sgPSAoKDEgPDwgKDIgKiBhbGlnbldpZHRoKSkgLSAxKSA8PCAoMiAqIGFsaWduU3RvcCk7CisrICAgIGNvbnN0IGludCB0YWlsV2lkdGggPSAod2lkdGggLSBhbGlnbldpZHRoKSAmIDM7CisrICAgIGNvbnN0IGludCBkb1RhaWwgPSAodGFpbFdpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgcXVpbnQ4IHRhaWxNYXNrID0gKDEgPDwgKDIgKiAocGl4ZWxzUGVyQnl0ZSAtIHRhaWxXaWR0aCkpKSAtIDE7CisrICAgIGNvbnN0IGludCB3aWR0aDggPSAod2lkdGggLSBhbGlnbldpZHRoKSAvIHBpeGVsc1BlckJ5dGU7CisrCisrICAgIHNyY1N0cmlkZSA9IHNyY1N0cmlkZSAvIHNpemVvZihTUkMpIC0gKHdpZHRoOCAqIHBpeGVsc1BlckJ5dGUgKyBhbGlnbldpZHRoKTsKKysgICAgZHN0U3RyaWRlIC09ICh3aWR0aDggKyBkb0FsaWduKTsKKysKKysgICAgZm9yIChpbnQgaiA9IDA7ICBqIDwgaGVpZ2h0OyArK2opIHsKKysgICAgICAgIGlmIChkb0FsaWduKSB7CisrICAgICAgICAgICAgcXVpbnQ4IGQgPSAqZGVzdDggJiB+YWxpZ25NYXNrOworKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBhbGlnblN0YXJ0OyBpID49IGFsaWduU3RvcDsgLS1pKQorKyAgICAgICAgICAgICAgICBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oKnNyYysrKSA8PCAoMiAqIGkpOworKyAgICAgICAgICAgICpkZXN0OCsrID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg4OyArK2kpIHsKKysgICAgICAgICAgICAqZGVzdDggPSAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMF0pIDw8IDYpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMV0pIDw8IDQpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMl0pIDw8IDIpCisrICAgICAgICAgICAgICAgICAgICAgfCAocXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbM10pKTsKKysgICAgICAgICAgICBzcmMgKz0gNDsKKysgICAgICAgICAgICArK2Rlc3Q4OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRvVGFpbCkgeworKyAgICAgICAgICAgIHF1aW50OCBkID0gKmRlc3Q4ICYgdGFpbE1hc2s7CisrICAgICAgICAgICAgc3dpdGNoICh0YWlsV2lkdGgpIHsKKysgICAgICAgICAgICBjYXNlIDM6IGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMl0pIDw8IDI7CisrICAgICAgICAgICAgY2FzZSAyOiBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzFdKSA8PCA0OworKyAgICAgICAgICAgIGNhc2UgMTogZCB8PSBxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1swXSkgPDwgNjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgKmRlc3Q4ID0gZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGRlc3Q4ICs9IGRzdFN0cmlkZTsKKysgICAgICAgIHNyYyArPSBzcmNTdHJpZGU7CisrICAgIH0KKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcXVpbnQzMiAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgcXRfcmVjdGNvbnZlcnRfZ3JheTI8cXVpbnQzMj4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3RlbXBsYXRlIDw+Cisrdm9pZCBxdF9yZWN0Y29udmVydChxZ3JheTIgKmRlc3QsIGNvbnN0IHF1aW50MTYgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHF1aW50MTY+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0U3RyaWRlLCBzcmNTdHJpZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxcmdiNDQ0ICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxcmdiNDQ0PihkZXN0LCBzcmMsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcWFyZ2I0NDQ0ICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxYXJnYjQ0NDQ+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3N0YXRpYyB2b2lkIGJsaXRfMihRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFJbWFnZSAmaW1hZ2UsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludCAmdG9wTGVmdCwgY29uc3QgUVJlZ2lvbiAmcmVnaW9uKQorK3sKKysgICAgc3dpdGNoIChpbWFnZS5mb3JtYXQoKSkgeworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHF1aW50MzI+KHNjcmVlbiwgaW1hZ2UsIHRvcExlZnQsIHJlZ2lvbik7CisrICAgICAgICByZXR1cm47CisrICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCMTY6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXVpbnQxNj4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0I0NDQ6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXJnYjQ0ND4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9BUkdCNDQ0NF9QcmVtdWx0aXBsaWVkOgorKyAgICAgICAgYmxpdF90ZW1wbGF0ZTxxZ3JheTIsIHFhcmdiNDQ0ND4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIHFDcml0aWNhbCgiYmxpdF8yKCk6IEltYWdlIGZvcm1hdCAlZCBub3Qgc3VwcG9ydGVkISIsIGltYWdlLmZvcm1hdCgpKTsKKysgICAgfQorK30KKysjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzIKKysKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAKKyBzdHJ1Y3QgcW1vbm8geyBxdWludDggZHVtbXk7IH0gUV9QQUNLRUQ7CitAQCAtMTI1OSw2ICsxNDU5LDExIEBAIHZvaWQgcXRfYmxpdF9zZXR1cChRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFJbWFnZSAmaW1hZ2UsCisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5ibGl0ID0gYmxpdF80OworICAgICAgICAgYnJlYWs7CisgI2VuZGlmCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrICAgIGNhc2UgMjoKKysgICAgICAgIHNjcmVlbi0+ZF9wdHItPmJsaXQgPSBibGl0XzI7CisrICAgICAgICBicmVhazsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAgICAgY2FzZSAxOgorICAgICAgICAgc2NyZWVuLT5kX3B0ci0+YmxpdCA9IGJsaXRfMTsKK0BAIC0yMTQ2LDYgKzIzNTEsOCBAQCBpbnQgUVNjcmVlbjo6YWxsb2ModW5zaWduZWQgaW50IHIsdW5zaWduZWQgaW50IGcsdW5zaWduZWQgaW50IGIpCisgICAgICAgICB9CisgICAgIH0gZWxzZSBpZiAoZCA9PSA0KSB7CisgICAgICAgICByZXQgPSBxR3JheShyLCBnLCBiKSA+PiA0OworKyAgICB9IGVsc2UgaWYgKGQgPT0gMikgeworKyAgICAgICAgcmV0ID0gcUdyYXkociwgZywgYikgPj4gNjsKKyAgICAgfSBlbHNlIGlmIChkID09IDEpIHsKKyAgICAgICAgIHJldCA9IHFHcmF5KHIsIGcsIGIpID49IDEyODsKKyAgICAgfSBlbHNlIHsKK0BAIC0yMjE2LDYgKzI0MjMsMTAgQEAgYm9vbCBRU2NyZWVuOjpzdXBwb3J0c0RlcHRoKGludCBkKSBjb25zdAorICAgICB9IGVsc2UgaWYoZD09MSkgeworICAgICAgICAgcmV0dXJuIHRydWU7CisgI2VuZGlmCisrI2lmZGVmIFFUX1FXU19ERVBUSF8yCisrICAgIH0gZWxzZSBpZihkPT0yKSB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzQKKyAgICAgfSBlbHNlIGlmKGQ9PTQpIHsKKyAgICAgICAgIHJldHVybiB0cnVlOworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcAoraW5kZXggNmYzY2FhZC4uMTQxNTllZSAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbmxpbnV4ZmJfcXdzLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwCitAQCAtNDY2LDggKzQ2Niw4IEBAIGJvb2wgUUxpbnV4RmJTY3JlZW46OmNvbm5lY3QoY29uc3QgUVN0cmluZyAmZGlzcGxheVNwZWMpCisgICAgICAgICBzZXR1cE9mZlNjcmVlbigpOworIAorICAgICAvLyBOb3cgcmVhZCBpbiBwYWxldHRlCistICAgIGlmKCh2aW5mby5iaXRzX3Blcl9waXhlbD09OCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT00KSkgeworLSAgICAgICAgc2NyZWVuY29scz0gKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT04KSA/IDI1NiA6IDE2OworKyAgICBpZigodmluZm8uYml0c19wZXJfcGl4ZWw9PTgpIHx8ICh2aW5mby5iaXRzX3Blcl9waXhlbD09NCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT0yKSkgeworKyAgICAgICAgc2NyZWVuY29scz0gMSA8PCB2aW5mby5iaXRzX3Blcl9waXhlbDsKKyAgICAgICAgIGludCBsb29wYzsKKyAgICAgICAgIDo6ZmJfY21hcCBzdGFydGNtYXA7CisgICAgICAgICBzdGFydGNtYXAuc3RhcnQ9MDsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyY2RhZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSA1NDkzNDJmYTM4MGVkMmE5YWQ0MWJlM2QwNGVlMmYwNTg1ZjZhNDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWljaGFlbCBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQxOjMyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMjFdIGNvbmZpZ3VyZTogYWRkICItY3Jvc3NhcmNoIiBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBkYXRlIGZvciBxdCA0LjguNworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNGViNGEzZC4uYTRkYWNlYyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMTE2MCw3ICsxMTYwLDcgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICBzaGlmdAorICAgICAgICAgVkFMPSQxCisgICAgICAgICA7OworLSAgICAtcHJlZml4fC1kb2NkaXJ8LWhlYWRlcmRpcnwtcGx1Z2luZGlyfC1pbXBvcnRkaXJ8LWRhdGFkaXJ8LWxpYmRpcnwtYmluZGlyfC10cmFuc2xhdGlvbmRpcnwtc3lzY29uZmRpcnwtZXhhbXBsZXNkaXJ8LWRlbW9zZGlyfC1kZXB0aHN8LW1ha2V8LW5vbWFrZXwtcGxhdGZvcm18LXhwbGF0Zm9ybXwtZGV2aWNlLW9wdGlvbnwtYnVpbGRrZXl8LXNka3wtYXJjaHwtaG9zdC1hcmNofC1teXNxbF9jb25maWd8LXBzcWxfY29uZmlnfC1zeXNyb290KQorKyAgICAtcHJlZml4fC1kb2NkaXJ8LWhlYWRlcmRpcnwtcGx1Z2luZGlyfC1pbXBvcnRkaXJ8LWRhdGFkaXJ8LWxpYmRpcnwtYmluZGlyfC10cmFuc2xhdGlvbmRpcnwtc3lzY29uZmRpcnwtZXhhbXBsZXNkaXJ8LWRlbW9zZGlyfC1kZXB0aHN8LW1ha2V8LW5vbWFrZXwtcGxhdGZvcm18LXhwbGF0Zm9ybXwtZGV2aWNlLW9wdGlvbnwtYnVpbGRrZXl8LXNka3wtYXJjaHwtaG9zdC1hcmNofC1teXNxbF9jb25maWd8LXBzcWxfY29uZmlnfC1zeXNyb290fC1jcm9zc2FyY2gpCisgICAgICAgICBWQVI9YGVjaG8gJDEgfCBzZWQgInMsXi1cKC4qXCksXDEsImAKKyAgICAgICAgIHNoaWZ0CisgICAgICAgICBWQUw9IiQxIgorQEAgLTE3MTksNiArMTcxOSw5IEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgREVWX1ZBTD1gZWNobyAkVkFMIHwgc2VkICJzLF4uKj1cKC4qXCksXDEsImAKKyAgICAgICAgIERldmljZVZhciBzZXQgJERFVl9WQVIgJERFVl9WQUwKKyAgICAgICAgIDs7CisrICAgIGNyb3NzYXJjaCkKKysgICAgICAgIENST1NTQVJDSD0iJFZBTCIKKysgICAgICAgIDs7CisgICAgIGRlYnVnLWFuZC1yZWxlYXNlKQorICAgICAgICAgaWYgWyAiJFZBTCIgPSAieWVzIiBdIHx8IFsgIiRWQUwiID0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgQ0ZHX0RFQlVHX1JFTEVBU0U9IiRWQUwiCitAQCAtMzMzMyw2ICszMzM2LDggQEAgYXJtKikKKyAgICAgOzsKKyBlc2FjCisgCisrQ0ZHX0FSQ0g9IiRDUk9TU0FSQ0giCisrCisgaWYgWyAtZCAiJHJlbHBhdGgvc3JjL2NvcmVsaWIvYXJjaC8kQ0ZHX0FSQ0giIF07IHRoZW4KKyAgICAgaWYgWyAiJE9QVF9WRVJCT1NFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgIGVjaG8gIiAgICAnJENGR19BUkNIJyBpcyBzdXBwb3J0ZWQiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzI0YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTQtdHJhbnNsYXRpb25zLWZpeC1waG9ueS10cmFuc2xhdGlvbi1saW5raW5nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMjFhZjhmNmQyMWIyOGE1MzA0MWFmZmIxMWI1OGQ2MzE2MDIzZmE5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQ1OjEwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMjFdIHRyYW5zbGF0aW9uczogZml4IHBob255IHRyYW5zbGF0aW9uIGxpbmtpbmcgZXJyb3IKKworICB8IC4uLi91c3IvbGliL2NydDEubzogSW4gZnVuY3Rpb24gYF9zdGFydCc6CisgIHwgLi4uLy4uL3N5c2RlcHMvaTM4Ni9lbGYvc3RhcnQuUzoxMTU6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG1haW4nCisgIHwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHRyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvIGIvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KK2luZGV4IGRjOTliZWIuLjBkOTg4MjkgMTAwNjQ0CistLS0gYS90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworKysrIGIvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KK0BAIC0xMDEsNyArMTAxLDcgQEAgdXBkYXRlcW0ubmFtZSA9IExSRUxFQVNFICR7UU1BS0VfRklMRV9JTn0KKyB1cGRhdGVxbS5DT05GSUcgKz0gbm9fbGluaworIFFNQUtFX0VYVFJBX0NPTVBJTEVSUyArPSB1cGRhdGVxbQorIAorLWlzRW1wdHkodmNwcm9qKSB7CisrIWlzRW1wdHkodmNwcm9qKSB7CisgICAgIFFNQUtFX0xJTksgPSBAOiBJR05PUkUgVEhJUyBMSU5FCisgICAgIE9CSkVDVFNfRElSID0KKyAgICAgd2luMzI6Q09ORklHIC09IGVtYmVkX21hbmlmZXN0X2V4ZQorQEAgLTExMSw3ICsxMTEsNyBAQCBpc0VtcHR5KHZjcHJvaikgeworICAgICBwaG9ueV9zcmMuaW5wdXQgPSBQSE9OWV9ERVBTCisgICAgIHBob255X3NyYy5vdXRwdXQgPSBwaG9ueS5jCisgICAgIHBob255X3NyYy52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfU09VUkNFUworLSAgICBwaG9ueV9zcmMuY29tbWFuZHMgPSBlY2hvIGludCBtYWluKCkgeyByZXR1cm4gMDsgfSA+IHBob255LmMKKysgICAgcGhvbnlfc3JjLmNvbW1hbmRzID0gZWNobyBcImludCBtYWluKCkgeyByZXR1cm4gMDsgfVwiID4gcGhvbnkuYworICAgICBwaG9ueV9zcmMubmFtZSA9IENSRUFURSBwaG9ueS5jCisgICAgIHBob255X3NyYy5DT05GSUcgKz0gY29tYmluZQorICAgICBRTUFLRV9FWFRSQV9DT01QSUxFUlMgKz0gcGhvbnlfc3JjCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE1LWNvbmZpZ3VyZS1hZGQtbm9zdHJpcC1mb3ItZGVidWctcGFja2FnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkYjQ5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gOTI1MGZlZDA4NmE0YThhNjQ1YTk3Mjc2NGE5YmYzNGU0NTY2ZWMyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhdGhpIEJvdWRyYSA8ZmFib0BkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0NjoxNCArMDIwMAorU3ViamVjdDogW1BBVENIIDE1LzIxXSBjb25maWd1cmU6IGFkZCBub3N0cmlwIGZvciBkZWJ1ZyBwYWNrYWdlcworCitRdCBpcyBidWlsdCBpbiByZWxlYXNlIG1vZGUgYW5kIHN0cmlwIGZpbGVzIGJ5IGRlZmF1bHQuCitTZXQgQ09ORklHKz1ub3N0cmlwIHRvIGF2b2lkIHRoZSBzdHJpcHBpbmcgYW5kCitsZXQgZGhfc3RyaXAgZG8gaXQgdG8gZ2VuZXJhdGUgZGVidWcgcGFja2FnZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNzk4M2MzZC4uZDAyODI0YiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzEwLDYgKzcxMCw4IEBAIG1rZGlyIC1wICIkb3V0cGF0aC9jb25maWcudGVzdHMiCisgcm0gLWYgIiRvdXRwYXRoL2NvbmZpZy50ZXN0cy8ucW1ha2UuY2FjaGUiCisgY3AgIiRRTUFLRV9WQVJTX0ZJTEUiICIkb3V0cGF0aC9jb25maWcudGVzdHMvLnFtYWtlLmNhY2hlIgorIAorK1FNYWtlVmFyIGFkZCBDT05GSUcgbm9zdHJpcAorKworIFFNYWtlVmFyIGFkZCBzdHlsZXMgImNkZSBtYWMgbW90aWYgcGxhc3RpcXVlIGNsZWFubG9va3Mgd2luZG93cyIKKyBRTWFrZVZhciBhZGQgZGVjb3JhdGlvbnMgImRlZmF1bHQgd2luZG93cyBzdHlsZWQiCisgUU1ha2VWYXIgYWRkIG1vdXNlLWRyaXZlcnMgInBjIgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzNkZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE2LWNvbmZpZ3VyZS1ldmFsLVFNQUtFX0NYWC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDg0MDM2MzRhNzFmMDY3ZWVjNTE0YjZkMjE5M2NmNDFlMjgxZGZmOGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDc6MDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNi8yMV0gY29uZmlndXJlOiBldmFsIFFNQUtFX0NYWAorCitBbGxvdyBleHBhbnNpb24gb2YgJCguLi4pIHJlZmVyZW5jZXMgaW4gUU1BS0VfQ1hYIChjdXJyZW50bHkgaXRzIHZhbHVlCitpcyAkKE9FX1FNQUtFX0NYWCkpIGluIG9yZGVyIHRvIGFsbG93IGNvbXBpbGVyIHZlcnNpb24gY2hlY2sgdG8gc3VjY2VlZAord2hpY2ggYWxsb3dzIFdlYktpdCB0byBiZSBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK0NvbmZsaWN0czoKKwljb25maWd1cmUKKy0tLQorIGNvbmZpZ3VyZSB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBkMDI4MjRiLi44OTFkNmU3IDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0zNDA5LDcgKzM0MDksOCBAQCBlbHNlCisgICAgIENGR19GUkFNRVdPUks9bm8KKyBmaQorIAorLVFNQUtFX0NPTkZfQ09NUElMRVI9YGdldFhRTWFrZUNvbmYgUU1BS0VfQ1hYYAorK1FNQUtFX0NPTkZfQ09NUElMRVI9YGdldFhRTWFrZUNvbmYgUU1BS0VfQ1hYIHwgc2VkIC1uICdzLyRbKF1cKFswLTlhLXpBLVpfXSpcKVspXS8kXDEvcGcnYAorK1FNQUtFX0NPTkZfQ09NUElMRVI9YGV2YWwgImVjaG8gJFFNQUtFX0NPTkZfQ09NUElMRVIiYAorIFRFU1RfQ09NUElMRVI9IiRDWFgiCisgCisgWyAteiAiJFRFU1RfQ09NUElMRVIiIF0gJiYgVEVTVF9DT01QSUxFUj0kUU1BS0VfQ09ORl9DT01QSUxFUgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNy1jb25maWd1cmUtZW5zdXJlLXdlLWlkZW50aWZ5LXRoZS1jb21waWxlci1hcy1nLWluLWNvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzE5NjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGQyYmI3MDFiNTUxNDAyZjBiZWZkZGQwZTkwNjQyMzU5NmJkYzBkZjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDg6MzcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8yMV0gY29uZmlndXJlOiBlbnN1cmUgd2UgaWRlbnRpZnkgdGhlIGNvbXBpbGVyIGFzIGcrKyBpbgorIGNvbmZpZ3VyZQorCitPdXIgUExBVEZPUk0gaW4gT0UgaXMgJHtUQVJHRVRfT1N9LW9lLWcrKywgYW5kIHByZXZpb3VzbHkgdGhlIGNvbmZpZ3VyZQorc2NyaXB0IHdhcyBpbnRlcnByZXRpbmcgZnJvbSB0aGlzIHRoYXQgdGhlIGNvbXBpbGVyIHdhcyAib2UtZysrIiBhbmQKK3RodXMKK2crKyBzcGVjaWZpYyBjaGVja3Mgd2VyZSBub3QgYmVpbmcgcnVuIHNpbmNlIHRoaXMgc3RyaW5nIGRpZCBub3QgbWF0Y2g7CithbW9uZyBvdGhlciB0aGluZ3MgdGhpcyByZXN1bHRlZCBpbiBhIGNvbXBpbGVyIHZlcnNpb24gY2hlY2sgaW4gdGhlCitRdFdlYktpdCBidWlsZCBjb2RlIG5vdCB3b3JraW5nLCBhbmQgaGVuY2UgdGhlIGZvbGxvd2luZyBlcnJvciBhdCBidWlsZAordGltZToKKworLi93dGYvTnVsbFB0ci5oOjQ4OjE6IGVycm9yOiBpZGVudGlmaWVyICdudWxscHRyJyB3aWxsIGJlY29tZSBhIGtleXdvcmQKK2luIEMrKzB4IFstV2Vycm9yPWMrKzB4LWNvbXBhdF0KKworVGhlIGVhc2llc3QgdGhpbmcgc2luY2Ugb3VyIFBMQVRGT1JNIGlzIGVudGlyZWx5IGFydGlmaWNpYWwgaXMgdG8ganVzdAorZm9yY2UgQ09NUElMRVIgdG8gImcrKyIgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaWYgaXQgaXMgZGV0ZWN0ZWQgYXMKKyJvZS1nKysiLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDg5MWQ2ZTcuLjcwMzE4OTggMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc1OTIsNiArNzU5Miw5IEBAIGVsaWYgWyAiJFhQTEFURk9STSIgIT0gIiRQTEFURk9STSIgXTsgdGhlbgorIGVsc2UKKyAgICAgQ09NUElMRVI9YGVjaG8gJFBMQVRGT1JNIHwgY3V0IC1mIDItIC1kLWAKKyBmaQorK2Nhc2UgJENPTVBJTEVSIGluCisrICAgICpvZS1nKyspIENPTVBJTEVSPSJnKysiIDs7CisrZXNhYworIGlmIFsgIiRDRkdfRVhDRVBUSU9OUyIgPSAidW5zcGVjaWZpZWQiIC1hICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgQ0ZHX0VYQ0VQVElPTlM9bm8KKyBmaQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljZGQ0YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOC1jb25maWd1cmUtbWFrZS1wdWxzZWF1ZGlvLWEtY29uZmlndXJhYmxlLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGQ2ZGMxYTdkNjU5NGQ3ZTM5NTM0NzczMmEzZTU1M2ZjODJjY2FiM2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjggRmViIDIwMTIgMTU6MTA6MjQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8yMV0gY29uZmlndXJlOiBtYWtlIHB1bHNlYXVkaW8gYSBjb25maWd1cmFibGUgb3B0aW9uCisKK0FsbG93cyBkaXNhYmxpbmcgcHVsc2VhdWRpbyBzdXBwb3J0IHdpdGhpbiBwaG9ub24gYXQgY29uZmlndXJlIHRpbWUuCisoVGhpcyBpcyB0aGUgUXQgNC44LjAgdmVyc2lvbi4pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3MDMxODk4Li5hNGE0MmYxIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xMTM5LDcgKzExMzksNyBAQCB3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKyAgICAgICAgIFZBTD1ubworICAgICAgICAgOzsKKyAgICAgI1F0IHN0eWxlIHllcyBvcHRpb25zCistICAgIC1pbmNyZW1lbnRhbHwtcXZmYnwtcHJvZmlsZXwtc2hhcmVkfC1zdGF0aWN8LXNtfC14aW5lcmFtYXwteHNoYXBlfC14c3luY3wteGlucHV0fC1lZ2x8LXJlZHVjZS1leHBvcnRzfC1wY2h8LXNlcGFyYXRlLWRlYnVnLWluZm98LXN0bHwtZnJlZXR5cGV8LXhjdXJzb3J8LXhmaXhlc3wteHJhbmRyfC14cmVuZGVyfC1taXRzaG18LWZvbnRjb25maWd8LXhrYnwtbmlzfC1xZGJ1c3wtZGJ1c3wtZGJ1cy1saW5rZWR8LWdsaWJ8LWdzdHJlYW1lcnwtZ3Rrc3R5bGV8LWN1cHN8LWljb252fC1sYXJnZWZpbGV8LWh8LWhlbHB8LXZ8LXZlcmJvc2V8LWRlYnVnfC1yZWxlYXNlfC1mYXN0fC1hY2Nlc3NpYmlsaXR5fC1jb25maXJtLWxpY2Vuc2V8LWdudW1ha2V8LWZyYW1ld29ya3wtcXQzc3VwcG9ydHwtZGVidWctYW5kLXJlbGVhc2V8LWV4Y2VwdGlvbnN8LWNvY29hfC1jYXJib258LXVuaXZlcnNhbHwtaGFyZmJ1enp8LXByZWZpeC1pbnN0YWxsfC1zaWxlbnR8LWFybWZwYXwtb3B0aW1pemVkLXFtYWtlfC1kd2FyZjJ8LXJlZHVjZS1yZWxvY2F0aW9uc3wtc3NlfC1vcGVuc3NsfC1vcGVuc3NsLWxpbmtlZHwtcHRtYWxsb2N8LXhtbHBhdHRlcm5zfC1waG9ub258LXBob25vbi1iYWNrZW5kfC1tdWx0aW1lZGlhfC1hdWRpby1iYWNrZW5kfC1zdmd8LWRlY2xhcmF0aXZlfC1kZWNsYXJhdGl2ZS1kZWJ1Z3wtamF2YXNjcmlwdC1qaXR8LXNjcmlwdHwtc2NyaXB0dG9vbHN8LXJwYXRofC1mb3JjZS1wa2ctY29uZmlnfC1zNjB8LXVzZWRlZmZpbGVzfC1pY3UpCisrICAgIC1pbmNyZW1lbnRhbHwtcXZmYnwtcHJvZmlsZXwtc2hhcmVkfC1zdGF0aWN8LXNtfC14aW5lcmFtYXwteHNoYXBlfC14c3luY3wteGlucHV0fC1lZ2x8LXJlZHVjZS1leHBvcnRzfC1wY2h8LXNlcGFyYXRlLWRlYnVnLWluZm98LXN0bHwtZnJlZXR5cGV8LXhjdXJzb3J8LXhmaXhlc3wteHJhbmRyfC14cmVuZGVyfC1taXRzaG18LWZvbnRjb25maWd8LXhrYnwtbmlzfC1xZGJ1c3wtZGJ1c3wtZGJ1cy1saW5rZWR8LWdsaWJ8LWdzdHJlYW1lcnwtcHVsc2VhdWRpb3wtZ3Rrc3R5bGV8LWN1cHN8LWljb252fC1sYXJnZWZpbGV8LWh8LWhlbHB8LXZ8LXZlcmJvc2V8LWRlYnVnfC1yZWxlYXNlfC1mYXN0fC1hY2Nlc3NpYmlsaXR5fC1jb25maXJtLWxpY2Vuc2V8LWdudW1ha2V8LWZyYW1ld29ya3wtcXQzc3VwcG9ydHwtZGVidWctYW5kLXJlbGVhc2V8LWV4Y2VwdGlvbnN8LWNvY29hfC1jYXJib258LXVuaXZlcnNhbHwtaGFyZmJ1enp8LXByZWZpeC1pbnN0YWxsfC1zaWxlbnR8LWFybWZwYXwtb3B0aW1pemVkLXFtYWtlfC1kd2FyZjJ8LXJlZHVjZS1yZWxvY2F0aW9uc3wtc3NlfC1vcGVuc3NsfC1vcGVuc3NsLWxpbmtlZHwtcHRtYWxsb2N8LXhtbHBhdHRlcm5zfC1waG9ub258LXBob25vbi1iYWNrZW5kfC1tdWx0aW1lZGlhfC1hdWRpby1iYWNrZW5kfC1zdmd8LWRlY2xhcmF0aXZlfC1kZWNsYXJhdGl2ZS1kZWJ1Z3wtamF2YXNjcmlwdC1qaXR8LXNjcmlwdHwtc2NyaXB0dG9vbHN8LXJwYXRofC1mb3JjZS1wa2ctY29uZmlnfC1zNjB8LXVzZWRlZmZpbGVzfC1pY3UpCisgICAgICAgICBWQVI9YGVjaG8gJDEgfCBzZWQgInMsXi1cKC4qXCksXDEsImAKKyAgICAgICAgIFZBTD15ZXMKKyAgICAgICAgIDs7CitAQCAtMjEyMCw2ICsyMTIwLDEzIEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgICAgIFVOS05PV05fT1BUPXllcworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisrICAgIHB1bHNlYXVkaW8pCisrICAgICAgICBpZiBbICIkVkFMIiA9ICJ5ZXMiIF0gfHwgWyAiJFZBTCIgPSAibm8iIF07IHRoZW4KKysgICAgICAgICAgICBDRkdfUFVMU0VBVURJTz0iJFZBTCIKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBVTktOT1dOX09QVD15ZXMKKysgICAgICAgIGZpCisrICAgICAgICA7OworICAgICBndGtzdHlsZSkKKyAgICAgICAgIGlmIFsgIiRWQUwiID0gInllcyIgXSB8fCBbICIkVkFMIiA9ICJubyIgXTsgdGhlbgorICAgICAgICAgICAgIENGR19RR1RLU1RZTEU9IiRWQUwiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE5LUZpeGVzLWZvci1nY2MtNC43LjAtcGFydGljdWxhcmx5LW9uLXFlbXV4ODYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzZDI0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK0Zyb20gMWYxZGEyZjI0ZDMwMjhiMjUwZGJjMmU5OGUyYjdlMzc4NjJiMzc3MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo1NDozOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE5LzIxXSBGaXhlcyBmb3IgZ2NjIDQuNy4wLCBwYXJ0aWN1bGFybHkgb24gcWVtdXg4NgorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85MzYzMQorT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTEzODQ4CisKK0J1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTY4CitCdWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzU4NAorCitSUCAyMDEyLzA0LzMwCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCisgc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwICAgICAgICAgICAgfCAyICstCisgLi4uL3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oICAgfCAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKK2luZGV4IDMyZTQ3Y2EuLmI4ZTczODkgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysrIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKK0BAIC0xMDgwLDcgKzEwODAsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKKyB7CisgICAgIC8vIFJlZiBjdXJyZW50U3R5bGUgaW4gY2FzZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgZGVsZXRlZCB3aGVuIHNldFJlbmRlclN0eWxlKCkgaXMgY2FsbGVkLgorICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1cnJlbnRTdHlsZShyZW5kZXJTdHlsZSgpKTsKKy0gICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpID8gcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCktPnJlbmRlclN0eWxlKCkgOiBmYWxzZTsKKysgICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4ocGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCktPnJlbmRlclN0eWxlKCkpIDogZmFsc2U7CisgICAgIGJvb2wgaGFzRGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKKyAgICAgYm9vbCBoYXNJbmRpcmVjdEFkamFjZW50UnVsZXMgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCitpbmRleCBkNjYwNzVlLi5hYjhmMTExIDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKK0BAIC03NCw3ICs3NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcihEb2N1bWVudCoKKyAgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gYWRvcHRSZWYobmV3IEhUTUxJbWFnZUVsZW1lbnQoaW1nVGFnLCBkb2N1bWVudCkpOworICAgICBpZiAob3B0aW9uYWxXaWR0aCkKKyAgICAgICAgIGltYWdlLT5zZXRXaWR0aCgqb3B0aW9uYWxXaWR0aCk7CistICAgIGlmIChvcHRpb25hbEhlaWdodCA+IDApCisrICAgIGlmIChvcHRpb25hbEhlaWdodCkKKyAgICAgICAgIGltYWdlLT5zZXRIZWlnaHQoKm9wdGlvbmFsSGVpZ2h0KTsKKyAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKKyB9CitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIGIvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCitpbmRleCA2MDg3ZWMzLi42ZDc0OGY2IDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKK0BAIC0yNSw2ICsyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQgeworIHB1YmxpYzoKKysgICAgdmlydHVhbCB+VGlsZWRCYWNraW5nU3RvcmVDbGllbnQoKSB7IH0KKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpID0gMDsKKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgPSAwOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyMS1jb25maWd1cmUtbWFrZS1xdDQtbmF0aXZlLXdvcmstd2l0aC1sb25nLWJ1aWxkaW5nLXBhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYzkwMjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaApAQCAtMCwwICsxLDk1IEBACitGcm9tIDY3NDJhYzdlYTZmZDFlOWM4MmVjYjUzMDVmODRlNzIxMjQyZjg1N2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDUgRGVjIDIwMTIgMDc6NDg6MTUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8yMV0gY29uZmlndXJlOiBtYWtlIHF0NC1uYXRpdmUgd29yayB3aXRoIGxvbmcgYnVpbGRpbmcKKyBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitSZWZlcmVuY2U6IGh0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMjgyOTIKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgNTIgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggYTRhNDJmMS4uMjM1ODU2MyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDc3OSw4ICs0Nzc5LDggQEAgREVNT1NfUEFUSF9TVFI9YCIkcmVscGF0aC9jb25maWcudGVzdHMvdW5peC9wYWRzdHJpbmciIDI2OCAicXRfZGVtb3BhdGg9JFFUX0lOU1QKKyBUT0RBWT1gZGF0ZSArJVktJW0tJWRgCisgY2F0ID4gIiRvdXRwYXRoL3NyYy9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmNwcC5uZXciIDw8RU9GCisgLyogTGljZW5zZSBJbmZvICovCistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpY2Vuc2VlX3N0ciAgICAgICAgICBbMjU2ICsgMTJdID0gIiRMSUNFTlNFX1VTRVJfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWRfcHJvZHVjdHNfc3RyIFsyNTYgKyAxMl0gPSAiJExJQ0VOU0VfUFJPRFVDVFNfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWVfc3RyICAgICAgICAgIFs1MTIgKyAxMl0gPSAiJExJQ0VOU0VfVVNFUl9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZF9wcm9kdWN0c19zdHIgWzUxMiArIDEyXSA9ICIkTElDRU5TRV9QUk9EVUNUU19TVFIiOworIAorIC8qIEluc3RhbGxhdGlvbiBkYXRlICovCisgc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2luc3RhbGxhdGlvbiAgICAgICAgICBbMTIrMTFdICAgID0gInF0X2luc3RkYXRlPSRUT0RBWSI7CitAQCAtNDgwNSwzNiArNDgwNSwzNiBAQCBpZiBbICEgLXogIiRRVF9IT1NUX1BSRUZJWCIgXTsgdGhlbgorIAorICNpZiBkZWZpbmVkKFFUX0JPT1RTVFJBUFBFRCkgfHwgZGVmaW5lZChRVF9CVUlMRF9RTUFLRSkKKyAvKiBJbnN0YWxsYXRpb24gSW5mbyAqLworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVFBSRUZJWF9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbMjU2ICsgMTJdID0gIiRIT1NURE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUSEVBREVSU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbMjU2ICsgMTJdID0gIiRIT1NUTElCUkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RCSU5BUklFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUUExVR0lOU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUSU1QT1JUU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUREFUQV9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbMjU2ICsgMTJdID0gIiRIT1NUVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RTRVRUSU5HU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRIT1NURVhBTVBMRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzI1NiArIDEyXSA9ICIkSE9TVERFTU9TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RQUkVGSVhfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzUxMiArIDEyXSA9ICIkSE9TVERPQ1VNRU5UQVRJT05fUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9oZWFkZXJzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVEhFQURFUlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzUxMiArIDEyXSA9ICIkSE9TVExJQlJBUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NUQklOQVJJRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wbHVnaW5zX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVFBMVUdJTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVElNUE9SVFNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVERBVEFfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV90cmFuc2xhdGlvbnNfcGF0aF9zdHIgWzUxMiArIDEyXSA9ICIkSE9TVFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NUU0VUVElOR1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkSE9TVEVYQU1QTEVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGVtb3NfcGF0aF9zdHIgICAgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RERU1PU19QQVRIX1NUUiI7CisgI2Vsc2UgLy8gUVRfQk9PVFNUUkFQUEVECisgRU9GCisgZmkKKyAKKyBjYXQgPj4gIiRvdXRwYXRoL3NyYy9jb3JlbGliL2dsb2JhbC9xY29uZmlnLmNwcC5uZXciIDw8RU9GCisgLyogSW5zdGFsbGF0aW9uIEluZm8gKi8KKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFsyNTYgKyAxMl0gPSAiJFBSRUZJWF9QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbMjU2ICsgMTJdID0gIiRET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhFQURFUlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzI1NiArIDEyXSA9ICIkTElCUkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEJJTkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJFBMVUdJTlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSU1QT1JUU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbMjU2ICsgMTJdID0gIiREQVRBX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFsyNTYgKyAxMl0gPSAiJFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRTRVRUSU5HU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbMjU2ICsgMTJdID0gIiRFWEFNUExFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbMjU2ICsgMTJdID0gIiRERU1PU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3ByZWZpeF9wYXRoX3N0ciAgICAgICBbNTEyICsgMTJdID0gIiRQUkVGSVhfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kb2N1bWVudGF0aW9uX3BhdGhfc3RyWzUxMiArIDEyXSA9ICIkRE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIRUFERVJTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGlicmFyaWVzX3BhdGhfc3RyICAgIFs1MTIgKyAxMl0gPSAiJExJQlJBUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2JpbmFyaWVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRCSU5BUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRQTFVHSU5TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW1wb3J0c19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJElNUE9SVFNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kYXRhX3BhdGhfc3RyICAgICAgICAgWzUxMiArIDEyXSA9ICIkREFUQV9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbNTEyICsgMTJdID0gIiRUUkFOU0xBVElPTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9zZXR0aW5nc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkU0VUVElOR1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9leGFtcGxlc19wYXRoX3N0ciAgICAgWzUxMiArIDEyXSA9ICIkRVhBTVBMRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzUxMiArIDEyXSA9ICIkREVNT1NfUEFUSF9TVFIiOworIEVPRgorIAorIGlmIFsgISAteiAiJFFUX0hPU1RfUFJFRklYIiBdOyB0aGVuCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTMwYWVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI3LXRvb2xzLnByby1kaXNhYmxlLXFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMDQ2MGUyYTVmMTNhYWYwMDgxYzNjOWZlYzg5MjgwMDQ2ODQyZGRiYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAzIEp1bCAyMDEzIDE3OjQ4OjMwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHRvb2xzLnBybzogZGlzYWJsZSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorCitXZSBkb24ndCB3YW50IHRoaXMgZW5hYmxlZCBqdXN0IGJlY2F1c2Ugd2UgaGF2ZSBFR0wgYW5kIE9wZW5HTCBFUyAyLjAKK2VuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHRvb2xzL3Rvb2xzLnBybyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL3Rvb2xzLnBybyBiL3Rvb2xzL3Rvb2xzLnBybworaW5kZXggMGUyNzA1My4uMmQzZjM2ZCAxMDA2NDQKKy0tLSBhL3Rvb2xzL3Rvb2xzLnBybworKysrIGIvdG9vbHMvdG9vbHMucHJvCitAQCAtNDksNCArNDksNCBAQCBRVERJUl9idWlsZDpSRVFVSVJFUyA9ICJjb250YWlucyhRVF9DT05GSUcsIGZ1bGwtY29uZmlnKSIKKyAKKyAhd2luMzI6IWVtYmVkZGVkOiFtYWM6IXN5bWJpYW46Q09ORklHICs9IHgxMQorIAorLXgxMTpjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6Y29udGFpbnMoUVRfQ09ORklHLCBlZ2wpOlNVQkRJUlMgKz0gcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIKKysjeDExOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTpjb250YWlucyhRVF9DT05GSUcsIGVnbCk6U1VCRElSUyArPSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDZlMmZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDI4LURvbi10LWNyYXNoLW9uLWJyb2tlbi1HSUYtaW1hZ2VzLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gZjFiNzZjMTI2YzQ3NmMxNTVhZjhjNDA0Yjk3YzQyY2QxYTcwOTMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhcnMgS25vbGwgPGxhcnMua25vbGxAZGlnaWEuY29tPgorRGF0ZTogVGh1LCAyNCBBcHIgMjAxNCAxNTozMzoyNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCBjcmFzaCBvbiBicm9rZW4gR0lGIGltYWdlcworCitCcm9rZW4gR0lGIGltYWdlcyBjb3VsZCBzZXQgaW52YWxpZCB3aWR0aCBhbmQgaGVpZ2h0Cit2YWx1ZXMgaW5zaWRlIHRoZSBpbWFnZSwgbGVhZGluZyB0byBRdCBjcmVhdGluZyBhIG51bGwKK1FJbWFnZSBmb3IgaXQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGFib3J0IGRlY29kaW5nCit0aGUgaW1hZ2UgYW5kIHJldHVybiBhbiBlcnJvci4KKworSW5pdGlhbCBwYXRjaCBieSBSaWNoIE1vb3JlLgorCitCYWNrcG9ydCBvZiBJZDgyYTQwMzZmNDc4YmQ2ZTQ5YzQwMmQ2NTk4ZjU3ZTdlNWJiNWUxZSBmcm9tIFF0IDUKKworVGFzay1udW1iZXI6IFFUQlVHLTM4MzY3CitDaGFuZ2UtSWQ6IEkwNjgwNzQwMDE4YWFhODM1NmQyNjdiN2FmM2YwMWZhYzM2OTczMTJhCitTZWN1cml0eS1hZHZpc29yeTogQ1ZFLTIwMTQtMDE5MAorUmV2aWV3ZWQtYnk6IFJpY2hhcmQgSi4gTW9vcmUgPHJpY2hAa2RlLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIHNyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAgYi9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcAoraW5kZXggMzMyNGYwNC4uNTE5OWRkMyAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwCisrKysgYi9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcAorQEAgLTM1OSw2ICszNTksMTMgQEAgaW50IFFHSUZGb3JtYXQ6OmRlY29kZShRSW1hZ2UgKmltYWdlLCBjb25zdCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGJpdHMsIDAsIGltYWdlLT5ieXRlQ291bnQoKSk7CisgICAgICAgICAgICAgICAgIH0KKyAKKysgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByZXZpb3VzIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBpbWFnZSBmYWlsZWQuIElmIGl0CisrICAgICAgICAgICAgICAgIC8vIGRpZCB0aGVuIHRoZSBpbWFnZSBpcyBicm9rZW4gYW5kIHdlIHNob3VsZCBnaXZlIHVwLgorKyAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzTnVsbCgpKSB7CisrICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IEVycm9yOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgICAgICAgICB9CisrCisgICAgICAgICAgICAgICAgIGRpc3Bvc2VQcmV2aW91cyhpbWFnZSk7CisgICAgICAgICAgICAgICAgIGRpc3Bvc2VkID0gZmFsc2U7CisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTRjMmE2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMwLWFhcmNoNjRfYXJtNjRfcWF0b21pY19zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDkxIEBACitGcm9tIDI5NDAxMGI1NjJjOTg0NmJiMmJjNGVlOWM2M2ZmNzhhZGM3YzFmNGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/TGlzYW5kcm89MjBEYW1pPUMzPUExbj0yME5pY2Fub3I9MjBQPUMzPUE5cmV6PTIwTWV5ZXI/PQorIDxwZXJlem1leWVyQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTUgTWFyIDIwMTQgMTU6NDA6NDkgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHFhdG9taWMgc3VwcG9ydCBmb3IgQUFyY2g2NCAoYWthIGFybTY0KS4KKworUGF0Y2ggYnkgTWFyayBTYWx0ZXIgPG1zYWx0ZXJAcmVkaGF0LmNvbT4KK2xpY2Vuc2VkIHVuZGVyIEJTRDoKKworPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NzM1NDg4IzE5NT4KKworVGhpcyBwYXRjaCBpcyBrbm93biB0byBub3QgYmUgdGhlIG1vc3QgY29ycmVjdCB3YXkKK3RvIGltcGxlbWVudCB0aGVtLCBhcyBpdCBzZWVtcyB0byBiZSBwb3NzaWJsZSB0byBkbyBpdCBpbiBhIGZhc3RlciB3YXksCitidXQgc2hvdWxkIHdvcmsgbm9uIHRoZSBsZXNzIHVudGlsIHdlIGNhbiBwcm92aWRlIHNvbWV0aGluZyBiZXR0ZXIuCisKK0NoYW5nZS1JZDogSWIzOTJiMjdkYzU0NjkxZmQ0YzJlYTk4OTYyNDBhZDcxZmI4MTI4Y2MKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaSAgICAgICAgICAgIHwgICA0ICsKKyBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcCB8ICA3MCArKysrKysKKyBzcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQorIHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggICAgICAgICAgIHwgMzM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggICAgICAgICAgICAgIHwgICAyICsKKyA1IGZpbGVzIGNoYW5nZWQsIDQxNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCisKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42MzUyM2Q5CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvYXJjaC5wcmkKK0BAIC0wLDAgKzEsNCBAQAorKyMKKysjIEFBcmNoNjQgYXJjaGl0ZWN0dXJlCisrIworK1NPVVJDRVMgKz0gJCRRVF9BUkNIX0NQUC9xYXRvbWljX2FhcmNoNjQuY3BwCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAgYi9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmZjODUxYjkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwCitAQCAtMCwwICsxLDcwIEBACisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqKgorKyoqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBEaWdpYSBQbGMgYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorKyoqIENvbnRhY3Q6IGh0dHA6Ly93d3cucXQtcHJvamVjdC5vcmcvbGVnYWwKKysqKgorKyoqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBRdENvcmUgbW9kdWxlIG9mIHRoZSBRdCBUb29sa2l0LgorKyoqCisrKiogJFFUX0JFR0lOX0xJQ0VOU0U6TEdQTCQKKysqKiBDb21tZXJjaWFsIExpY2Vuc2UgVXNhZ2UKKysqKiBMaWNlbnNlZXMgaG9sZGluZyB2YWxpZCBjb21tZXJjaWFsIFF0IGxpY2Vuc2VzIG1heSB1c2UgdGhpcyBmaWxlIGluCisrKiogYWNjb3JkYW5jZSB3aXRoIHRoZSBjb21tZXJjaWFsIGxpY2Vuc2UgYWdyZWVtZW50IHByb3ZpZGVkIHdpdGggdGhlCisrKiogU29mdHdhcmUgb3IsIGFsdGVybmF0aXZlbHksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIGluCisrKiogYSB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgRGlnaWEuICBGb3IgbGljZW5zaW5nIHRlcm1zIGFuZAorKyoqIGNvbmRpdGlvbnMgc2VlIGh0dHA6Ly9xdC5kaWdpYS5jb20vbGljZW5zaW5nLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24KKysqKiB1c2UgdGhlIGNvbnRhY3QgZm9ybSBhdCBodHRwOi8vcXQuZGlnaWEuY29tL2NvbnRhY3QtdXMuCisrKioKKysqKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5MR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSByZXF1aXJlbWVudHMKKysqKiB3aWxsIGJlIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sLgorKyoqCisrKiogSW4gYWRkaXRpb24sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIERpZ2lhIGdpdmVzIHlvdSBjZXJ0YWluIGFkZGl0aW9uYWwKKysqKiByaWdodHMuICBUaGVzZSByaWdodHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgRGlnaWEgUXQgTEdQTCBFeGNlcHRpb24KKysqKiB2ZXJzaW9uIDEuMSwgaW5jbHVkZWQgaW4gdGhlIGZpbGUgTEdQTF9FWENFUFRJT04udHh0IGluIHRoaXMgcGFja2FnZS4KKysqKgorKyoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrKiogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKysqKiBGb3VuZGF0aW9uIGFuZCBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgTElDRU5TRS5HUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUKKysqKiBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbC4KKysqKgorKyoqCisrKiogJFFUX0VORF9MSUNFTlNFJAorKyoqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaW5jbHVkZSA8UXRDb3JlL3FnbG9iYWwuaD4KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisrIyBpbmNsdWRlIDxzY2hlZC5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDx0aW1lLmg+CisrCisrUVRfQkVHSU5fTkFNRVNQQUNFCisrCisrUVRfVVNFX05BTUVTUEFDRQorKworK1FfQ09SRV9FWFBPUlQgdm9pZCBxdF9hdG9taWNfeWllbGQoaW50ICpjb3VudCkKKyt7CisrI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisrICAgIGlmICgoKmNvdW50KSsrIDwgNTApIHsKKysgICAgICAgIHNjaGVkX3lpZWxkKCk7CisrICAgIH0gZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdG07CisrICAgICAgICB0bS50dl9zZWMgPSAwOworKyAgICAgICAgdG0udHZfbnNlYyA9IDIwMDAwMDE7CisrICAgICAgICBuYW5vc2xlZXAoJnRtLCBOVUxMKTsKKysgICAgICAgICpjb3VudCA9IDA7CisrICAgIH0KKyt9CisrCisrUVRfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkgYi9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpCitpbmRleCBjZDIzZTVlLi5mNTBmY2E3IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaQorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaQorQEAgLTMxLDcgKzMxLDkgQEAgaW50ZWdyaXR5OkhFQURFUlMgKz0gYXJjaC9xYXRvbWljX2ludGVncml0eS5oCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfczM5MC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY194ODZfNjQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2guaCBcCistICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2g0YS5oCisrICAgICAgICAgICAgICAgICAgICAgICBhcmNoL3FhdG9taWNfc2g0YS5oIFwKKysgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19hYXJjaDY0LmggXAorKworIAorIFFUX0FSQ0hfQ1BQID0gJCRRVF9TT1VSQ0VfVFJFRS9zcmMvY29yZWxpYi9hcmNoLyQkUVRfQVJDSAorIERFUEVORFBBVEggKz0gJCRRVF9BUkNIX0NQUAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGU2MWNhOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaAorQEAgLTAsMCArMSwzMzUgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFF0Q29yZSBtb2R1bGUgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpZm5kZWYgUUFUT01JQ19BQVJDSDY0X0gKKysjZGVmaW5lIFFBVE9NSUNfQUFSQ0g2NF9ICisrCisrUVRfQkVHSU5fSEVBREVSCisrCisrUVRfQkVHSU5fTkFNRVNQQUNFCisrCisrI2RlZmluZSBRX0FUT01JQ19JTlRfUkVGRVJFTkNFX0NPVU5USU5HX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzUmVmZXJlbmNlQ291bnRpbmdOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzUmVmZXJlbmNlQ291bnRpbmdXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9URVNUX0FORF9TRVRfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNUZXN0QW5kU2V0TmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc1Rlc3RBbmRTZXRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9GRVRDSF9BTkRfU1RPUkVfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZFN0b3JlTmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc0ZldGNoQW5kU3RvcmVXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9GRVRDSF9BTkRfQUREX0lTX0FMV0FZU19OQVRJVkUKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRBZGROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRBZGRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX1BPSU5URVJfVEVTVF9BTkRfU0VUX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzVGVzdEFuZFNldE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNUZXN0QW5kU2V0V2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19QT0lOVEVSX0ZFVENIX0FORF9TVE9SRV9JU19BTFdBWVNfTkFUSVZFCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc0ZldGNoQW5kU3RvcmVOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRTdG9yZVdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfUE9JTlRFUl9GRVRDSF9BTkRfQUREX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRBZGROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRBZGRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjaWZuZGVmIFFfREFUQV9NRU1PUllfQkFSUklFUgorKyMgZGVmaW5lIFFfREFUQV9NRU1PUllfQkFSUklFUiBhc20gdm9sYXRpbGUoImRtYiBzeVxuIjo6OiJtZW1vcnkiKQorKyNlbmRpZgorKyNpZm5kZWYgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUgorKyMgZGVmaW5lIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVIgYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisrI2VuZGlmCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50OjpyZWYoKQorK3sKKysgICAgaW50IG5ld1ZhbHVlOworKworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICBuZXdWYWx1ZSA9IF9fYXRvbWljX2FkZF9mZXRjaCgmX3FfdmFsdWUsIDEsIF9fQVRPTUlDX0FDUV9SRUwpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKworKyAgICByZXR1cm4gbmV3VmFsdWUgIT0gMDsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50OjpkZXJlZigpCisreworKyAgICBpbnQgbmV3VmFsdWU7CisrCisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIG5ld1ZhbHVlID0gX19hdG9taWNfc3ViX2ZldGNoKCZfcV92YWx1ZSwgMSwgX19BVE9NSUNfQUNRX1JFTCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrCisrICAgIHJldHVybiBuZXdWYWx1ZSAhPSAwOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRSZWxheGVkKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBib29sIHZhbDsKKysKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbiAoJl9xX3ZhbHVlLCAmZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBfX0FUT01JQ19SRUxBWEVELCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVSZWxheGVkKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGludCB2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2V4Y2hhbmdlX24oJl9xX3ZhbHVlLCBuZXdWYWx1ZSwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZEFkZFJlbGF4ZWQoaW50IHZhbHVlVG9BZGQpCisreworKyAgICBpbnQgdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSBfX2F0b21pY19mZXRjaF9hZGQoJl9xX3ZhbHVlLCB2YWx1ZVRvQWRkLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0UmVsYXhlZChUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uICgmX3FfdmFsdWUsICZleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIF9fQVRPTUlDX1JFTEFYRUQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlUmVsYXhlZChUICpuZXdWYWx1ZSkKKyt7CisrICAgIFQgKnZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZXhjaGFuZ2VfbigmX3FfdmFsdWUsIG5ld1ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRSZWxheGVkKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBUICp2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2ZldGNoX2FkZCgmX3FfdmFsdWUsIHZhbHVlVG9BZGQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRBY3F1aXJlKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojp0ZXN0QW5kU2V0UmVsZWFzZShpbnQgZXhwZWN0ZWRWYWx1ZSwgaW50IG5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRPcmRlcmVkKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVBY3F1aXJlKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlUmVsZWFzZShpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZFN0b3JlT3JkZXJlZChpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIGludCByZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRBY3F1aXJlKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkUmVsZWFzZShpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkT3JkZXJlZChpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6dGVzdEFuZFNldEFjcXVpcmUoVCAqZXhwZWN0ZWRWYWx1ZSwgVCAqbmV3VmFsdWUpCisreworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0UmVsZWFzZShUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0T3JkZXJlZChUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHRlc3RBbmRTZXRBY3F1aXJlKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlQWNxdWlyZShUICpuZXdWYWx1ZSkKKyt7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRTdG9yZVJlbGVhc2UoVCAqbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVPcmRlcmVkKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZEFjcXVpcmUocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRSZWxlYXNlKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kQWRkT3JkZXJlZChxcHRyZGlmZiB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBUICpyZXR1cm5WYWx1ZSA9IGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKysjdW5kZWYgUV9EQVRBX01FTU9SWV9CQVJSSUVSCisrI3VuZGVmIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVIKKysKKytRVF9FTkRfTkFNRVNQQUNFCisrCisrUVRfRU5EX0hFQURFUgorKworKyNlbmRpZiAvLyBRQVRPTUlDX0FBUkNINjRfSAorZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oCitpbmRleCAxNDE3MjZjLi4zZTk2OTI2IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaAorQEAgLTk0LDYgKzk0LDggQEAgUVRfQkVHSU5fSEVBREVSCisgIyAgaW5jbHVkZSAiUXRDb3JlL3FhdG9taWNfc2g0YS5oIgorICNlbGlmIGRlZmluZWQoUVRfQVJDSF9OQUNMKQorICMgIGluY2x1ZGUgIlF0Q29yZS9xYXRvbWljX2dlbmVyaWMuaCIKKysjZWxpZiBkZWZpbmVkKFFUX0FSQ0hfQUFSQ0g2NCkKKysjICBpbmNsdWRlICJRdENvcmUvcWF0b21pY19hYXJjaDY0LmgiCisgI2Vsc2UKKyAjICBlcnJvciAiUXQgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byB0aGlzIGFyY2hpdGVjdHVyZSIKKyAjZW5kaWYKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxZTdhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMS1hYXJjaDY0X2FybTY0X21rc3BlY3MucGF0Y2gKQEAgLTAsMCArMSwxMjQgQEAKK0Zyb20gNzA5MGZjODBmZjYzMDcxMmE5MGRlOTI0MDMxOTBmNjQ3ZGQzOGEzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9MaXNhbmRybz0yMERhbWk9QzM9QTFuPTIwTmljYW5vcj0yMFA9QzM9QTlyZXo9MjBNZXllcj89CisgPHBlcmV6bWV5ZXJAZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNSBNYXIgMjAxNCAxNTozNTowMCAtMDMwMAorU3ViamVjdDogW1BBVENIXSBta3NwZWNzIGZvciBBQXJjaDY0IChha2EgYXJtNjQpLgorCitQYXRjaCBieSBNYXJjaW4gSnVzemtpZXdpY3ogPG1hcmNpbkBqdXN6a2lld2ljei5jb20ucGw+CitsaWNlbnNlZCB1bmRlciBlaXRoZXIgUHVibGljIERvbWFpbiBvciBCU0Q6CisKKzxodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTczNTQ4OCMxNzk+CisKK0NoYW5nZS1JZDogSTIxZjE3OTUzMjM0Y2ZiMTc2YmFjMDIzZTUyZWNkYzkyN2ZjNWMxYTkKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKysrCisgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKworIG1rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggYTliYTdjOC4uZTU3ZDA1MyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtMjgwOCw2ICsyODA4LDkgQEAgaWYgWyAiJENGR19FTUJFRERFRCIgIT0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgKjg2XzY0KQorICAgICAgICAgICAgICAgICBQTEFURk9STT1xd3MvbGludXgteDg2XzY0LWcrKworICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIGFhcmNoNjQpCisrICAgICAgICAgICAgICAgIFBMQVRGT1JNPWxpbnV4LWFhcmNoNjQtZysrCisrICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgUExBVEZPUk09cXdzL2xpbnV4LWdlbmVyaWMtZysrCisgICAgICAgICAgICAgICAgIDs7CitkaWZmIC0tZ2l0IGEvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWJjMGE5MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xbWFrZS5jb25mCitAQCAtMCwwICsxLDI3IEBACisrIworKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgbGludXgtZysrCisrIworKyMgV3JpdHRlbiBmb3IgR05VL0xpbnV4IHBsYXRmb3JtcyB0aGF0IGhhdmUgYm90aCBsaWIgYW5kIGxpYjY0IGRpcmVjdG9yaWVzLAorKyMgbGlrZSB0aGUgQU1EIE9wdGVyb24uCisrIworKworK01BS0VGSUxFX0dFTkVSQVRPUiAgICA9IFVOSVgKKytUQVJHRVRfUExBVEZPUk0gICAgICAgPSB1bml4CisrVEVNUExBVEUgICAgICAgICAgICAgID0gYXBwCisrQ09ORklHICAgICAgICAgICAgICAgKz0gcXQgd2Fybl9vbiByZWxlYXNlIGluY3JlbWVudGFsIGxpbmtfcHJsIGdkYl9kd2FyZl9pbmRleAorK1FUICAgICAgICAgICAgICAgICAgICs9IGNvcmUgZ3VpCisrUU1BS0VfSU5DUkVNRU5UQUxfU1RZTEUgPSBzdWJsaWIKKysKKytRTUFLRV9DRkxBR1MgICAgID0KKytRTUFLRV9MRkxBR1MgICAgID0KKysKKytRTUFLRV9DRkxBR1NfUkVMRUFTRSAgICs9IC1PMgorKworK2luY2x1ZGUoLi4vY29tbW9uL2xpbnV4LmNvbmYpCisraW5jbHVkZSguLi9jb21tb24vZ2NjLWJhc2UtdW5peC5jb25mKQorK2luY2x1ZGUoLi4vY29tbW9uL2crKy11bml4LmNvbmYpCisrCisrUU1BS0VfTElCRElSX1gxMSAgICAgID0gL3Vzci9YMTFSNi9saWI2NAorK1FNQUtFX0xJQkRJUl9PUEVOR0wgICA9IC91c3IvWDExUjYvbGliNjQKKysKKytsb2FkKHF0X2NvbmZpZykKK2RpZmYgLS1naXQgYS9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaCBiL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTYyMTI4YgorLS0tIC9kZXYvbnVsbAorKysrIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKK0BAIC0wLDAgKzEsNDIgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHFtYWtlIHNwZWMgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpbmNsdWRlICIuLi9saW51eC1nKysvcXBsYXRmb3JtZGVmcy5oIgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaApAQCAtMCwwICsxLDE4IEBACitBZGQgbWlzc2luZyBoZWFkZXIgZm9yIGFhcmNoNjQuIEFuZCBpbnN0YWxsIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC1OcnUgcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi5vcmlnL2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgKKy0tLSBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42Lm9yaWcvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgJMTk3MC0wMS0wMSAwODozMDowMC4wMDAwMDAwMDAgKzA4MzAKKysrKyBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL3FhdG9taWNfYWFyY2g2NC5oCTIwMTQtMDktMDkgMTc6MTg6MDMuNzY4MzUyNTUxICswODAwCitAQCAtMCwwICsxIEBACisrI2luY2x1ZGUgIi4uLy4uL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgiCistLS0gcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9oZWFkZXJzLnByaS5vcmlnCTIwMTQtMDktMDkgMTg6MDU6MzcuMTAwNDMwMzExICswODAwCisrKysgcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9oZWFkZXJzLnByaQkyMDE0LTA5LTA5IDE4OjA1OjU5LjExMjQzMDkxMSArMDgwMAorQEAgLTEsMyArMSwzIEBACistU1lOQ1FULkhFQURFUl9GSUxFUyA9IC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGV2ZW50ZGlzcGF0Y2hlci5oIC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGl0ZW1tb2RlbC5oIC4uL2NvcmVsaWIva2VybmVsL3FiYXNpY3RpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVhcHBsaWNhdGlvbi5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlZXZlbnQuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRsb29wLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc19uYWNsLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc192eHdvcmtzLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc193aW5jZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtYXRoLmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGFvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YXR5cGUuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWltZWRhdGEuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0LmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGNsZWFudXBoYW5kbGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdGRlZnMuaCAuLi9jb3JlbGliL2tlcm5lbC9xcG9pbnRlci5oIC4uL2NvcmVsaWIva2VybmVsL3FzaGFyZWRtZW1vcnkuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2lnbmFsbWFwcGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNvY2tldG5vdGlmaWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXN5c3RlbXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIva2VybmVsL3F0aW1lci5oIC4uL2NvcmVsaWIva2VybmVsL3F0cmFuc2xhdG9yLmggLi4vY29yZWxpYi9rZXJuZWwvcXZhcmlhbnQuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYWJzdHJhY3RhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGFyYWxsZWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXVzZWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3Fwcm9wZXJ0eWFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FzZXF1ZW50aWFsYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xdmFyaWFudGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FscGhhLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY1LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ny5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2F2cjMyLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYmZpbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2Jvb3RzdHJhcC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2dlbmVyaWMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pMzg2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaWE2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2ludGVncml0eS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX202OGsuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tYWNvc3guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19taXBzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcGFyaXNjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcG93ZXJwYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3MzOTAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoNGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zcGFyYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3N5bWJpYW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY192eHdvcmtzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93cy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3NjZS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3g4Nl82NC5oIC4uL2NvcmVsaWIvdG9vbHMvcWFsZ29yaXRobXMuaCAuLi9jb3JlbGliL3Rvb2xzL3FiaXRhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheW1hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNoYXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250YWluZXJmd2QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250aWd1b3VzY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjcnlwdG9ncmFwaGljaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lLmggLi4vY29yZWxpYi90b29scy9xZWFzaW5nY3VydmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlbGFwc2VkdGltZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXNoLmggLi4vY29yZWxpYi90b29scy9xaXRlcmF0b3IuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5lLmggLi4vY29yZWxpYi90b29scy9xbGlua2VkbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGUuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfYmxhY2tiZXJyeS5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcC5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcmdpbnMuaCAuLi9jb3JlbGliL3Rvb2xzL3FwYWlyLmggLi4vY29yZWxpYi90b29scy9xcG9pbnQuaCAuLi9jb3JlbGliL3Rvb2xzL3FxdWV1ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlY3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWdleHAuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkdmFsdWVyb2xsYmFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXNldC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZGRhdGEuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlcl9pbXBsLmggLi4vY29yZWxpYi90b29scy9xc2l6ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0YWNrLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nYnVpbGRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2xpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdtYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xdGV4dGJvdW5kYXJ5ZmluZGVyLmggLi4vY29yZWxpYi90b29scy9xdGltZWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3F2YXJsZW5ndGhhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZlY3Rvci5oIC4uL2NvcmVsaWIvcGx1Z2luL3FmYWN0b3J5aW50ZXJmYWNlLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnkuaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2luLmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbmxvYWRlci5oIC4uL2NvcmVsaWIvcGx1Z2luL3F1dWlkLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbS5oIC4uL2NvcmVsaWIvdGhyZWFkL3FhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xYmFzaWNhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXguaCAuLi9jb3JlbGliL3RocmVhZC9xcmVhZHdyaXRlbG9jay5oIC4uL2NvcmVsaWIvdGhyZWFkL3FzZW1hcGhvcmUuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZHN0b3JhZ2UuaCAuLi9jb3JlbGliL3RocmVhZC9xd2FpdGNvbmRpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FldmVudHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZmluYWxzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FoaXN0b3J5c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVzeW5jaHJvbml6ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXJ1bm5hYmxlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGNvbXBpbGVydGVzdC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRleGNlcHRpb24uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlcmtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmdW5jdGlvbndyYXBwZXJzLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGl0ZXJhdGVrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcGtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtZWRpYW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVkdWNla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlc3VsdHN0b3JlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW5iYXNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHN0b3JlZGZ1bmN0aW9uY2FsbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnR0aHJlYWRlbmdpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2wuaCAuLi9jb3JlbGliL2lvL3FhYnN0cmFjdGZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3FidWZmZXIuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtLmggLi4vY29yZWxpYi9pby9xZGVidWcuaCAuLi9jb3JlbGliL2lvL3FkaXIuaCAuLi9jb3JlbGliL2lvL3FkaXJpdGVyYXRvci5oIC4uL2NvcmVsaWIvaW8vcWZpbGUuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mby5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2UuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2UuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5ncy5oIC4uL2NvcmVsaWIvaW8vcXRlbXBvcmFyeWZpbGUuaCAuLi9jb3JlbGliL2lvL3F0ZXh0c3RyZWFtLmggLi4vY29yZWxpYi9pby9xdXJsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1kaXN0LmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1sYXJnZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWVkaXVtLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1taW5pbWFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1uYWNsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1zbWFsbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FlbmRpYW4uaCAuLi9jb3JlbGliL2dsb2JhbC9xZmVhdHVyZXMuaCAuLi9jb3JlbGliL2dsb2JhbC9xZ2xvYmFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmggLi4vY29yZWxpYi9nbG9iYWwvcW5hbWVzcGFjZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FudW1lcmljLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfd2luZG93cy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY3BsdWdpbi5oIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29yZSAKKytTWU5DUVQuSEVBREVSX0ZJTEVTID0gLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0ZXZlbnRkaXNwYXRjaGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0aXRlbW1vZGVsLmggLi4vY29yZWxpYi9rZXJuZWwvcWJhc2ljdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVldmVudC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGxvb3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX25hY2wuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3Z4d29ya3MuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3dpbmNlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1hdGguaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhdHlwZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtaW1lZGF0YS5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0Y2xlYW51cGhhbmRsZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0ZGVmcy5oIC4uL2NvcmVsaWIva2VybmVsL3Fwb2ludGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNoYXJlZG1lbW9yeS5oIC4uL2NvcmVsaWIva2VybmVsL3FzaWduYWxtYXBwZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc29ja2V0bm90aWZpZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtc2VtYXBob3JlLmggLi4vY29yZWxpYi9rZXJuZWwvcXRpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXRyYW5zbGF0b3IuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXJhbGxlbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhdXNlYW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXNlcXVlbnRpYWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3F2YXJpYW50YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWxwaGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjUuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ni5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY3LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2F2cjMyLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYmZpbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2Jvb3RzdHJhcC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2dlbmVyaWMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pMzg2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaWE2NC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2ludGVncml0eS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX202OGsuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19tYWNvc3guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19taXBzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcGFyaXNjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfcG93ZXJwYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3MzOTAuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zaC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoNGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19zcGFyYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3N5bWJpYW4uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY192eHdvcmtzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93cy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3dpbmRvd3NjZS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3g4Nl82NC5oIC4uL2NvcmVsaWIvdG9vbHMvcWFsZ29yaXRobXMuaCAuLi9jb3JlbGliL3Rvb2xzL3FiaXRhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcWJ5dGVhcnJheW1hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNoYXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250YWluZXJmd2QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fjb250aWd1b3VzY2FjaGUuaCAuLi9jb3JlbGliL3Rvb2xzL3FjcnlwdG9ncmFwaGljaGFzaC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lLmggLi4vY29yZWxpYi90b29scy9xZWFzaW5nY3VydmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlbGFwc2VkdGltZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXNoLmggLi4vY29yZWxpYi90b29scy9xaXRlcmF0b3IuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5lLmggLi4vY29yZWxpYi90b29scy9xbGlua2VkbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGUuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfYmxhY2tiZXJyeS5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcC5oIC4uL2NvcmVsaWIvdG9vbHMvcW1hcmdpbnMuaCAuLi9jb3JlbGliL3Rvb2xzL3FwYWlyLmggLi4vY29yZWxpYi90b29scy9xcG9pbnQuaCAuLi9jb3JlbGliL3Rvb2xzL3FxdWV1ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlY3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FyZWdleHAuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2NvcGVkdmFsdWVyb2xsYmFjay5oIC4uL2NvcmVsaWIvdG9vbHMvcXNldC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZGRhdGEuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyLmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkcG9pbnRlcl9pbXBsLmggLi4vY29yZWxpYi90b29scy9xc2l6ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0YWNrLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nYnVpbGRlci5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ2xpc3QuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdtYXRjaGVyLmggLi4vY29yZWxpYi90b29scy9xdGV4dGJvdW5kYXJ5ZmluZGVyLmggLi4vY29yZWxpYi90b29scy9xdGltZWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3F2YXJsZW5ndGhhcnJheS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZlY3Rvci5oIC4uL2NvcmVsaWIvcGx1Z2luL3FmYWN0b3J5aW50ZXJmYWNlLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnkuaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2luLmggLi4vY29yZWxpYi9wbHVnaW4vcXBsdWdpbmxvYWRlci5oIC4uL2NvcmVsaWIvcGx1Z2luL3F1dWlkLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbS5oIC4uL2NvcmVsaWIvdGhyZWFkL3FhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xYmFzaWNhdG9taWMuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXguaCAuLi9jb3JlbGliL3RocmVhZC9xcmVhZHdyaXRlbG9jay5oIC4uL2NvcmVsaWIvdGhyZWFkL3FzZW1hcGhvcmUuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkLmggLi4vY29yZWxpYi90aHJlYWQvcXRocmVhZHN0b3JhZ2UuaCAuLi9jb3JlbGliL3RocmVhZC9xd2FpdGNvbmRpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FldmVudHRyYW5zaXRpb24uaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZmluYWxzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FoaXN0b3J5c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVzeW5jaHJvbml6ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXJ1bm5hYmxlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGNvbXBpbGVydGVzdC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRleGNlcHRpb24uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVyLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZpbHRlcmtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmdW5jdGlvbndyYXBwZXJzLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGl0ZXJhdGVrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1hcGtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtZWRpYW4uaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVkdWNla2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJlc3VsdHN0b3JlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRydW5iYXNlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHN0b3JlZGZ1bmN0aW9uY2FsbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnR0aHJlYWRlbmdpbmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2wuaCAuLi9jb3JlbGliL2lvL3FhYnN0cmFjdGZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3FidWZmZXIuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtLmggLi4vY29yZWxpYi9pby9xZGVidWcuaCAuLi9jb3JlbGliL2lvL3FkaXIuaCAuLi9jb3JlbGliL2lvL3FkaXJpdGVyYXRvci5oIC4uL2NvcmVsaWIvaW8vcWZpbGUuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mby5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2UuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2UuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5ncy5oIC4uL2NvcmVsaWIvaW8vcXRlbXBvcmFyeWZpbGUuaCAuLi9jb3JlbGliL2lvL3F0ZXh0c3RyZWFtLmggLi4vY29yZWxpYi9pby9xdXJsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1kaXN0LmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1sYXJnZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWctbWVkaXVtLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1taW5pbWFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1uYWNsLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1zbWFsbC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FlbmRpYW4uaCAuLi9jb3JlbGliL2dsb2JhbC9xZmVhdHVyZXMuaCAuLi9jb3JlbGliL2dsb2JhbC9xZ2xvYmFsLmggLi4vY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmggLi4vY29yZWxpYi9nbG9iYWwvcW5hbWVzcGFjZS5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FudW1lcmljLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfd2luZG93cy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY3BsdWdpbi5oIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29yZSAKKyBTWU5DUVQuSEVBREVSX0NMQVNTRVMgPSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RFdmVudERpc3BhdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1vZGVsSW5kZXggLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBlcnNpc3RlbnRNb2RlbEluZGV4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNb2RlbEluZGV4TGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RJdGVtTW9kZWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0VGFibGVNb2RlbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RMaXN0TW9kZWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJhc2ljVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvcmVBcHBsaWNhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENsZWFuVXBGdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRpbWVyRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoaWxkRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUN1c3RvbUV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEeW5hbWljUHJvcGVydHlDaGFuZ2VFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXZlbnRMb29wIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhTWV0aG9kIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhRW51bSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVByb3BlcnR5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhQ2xhc3NJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhVHlwZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVR5cGVJZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YVR5cGVJZDIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1pbWVEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3RMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3REYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdFVzZXJEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FPYmplY3RDbGVhbnVwSGFuZGxlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2VuZXJpY0FyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHZW5lcmljUmV0dXJuQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZXR1cm5Bcmd1bWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU9iamVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWV0YU9iamVjdEFjY2Vzc29yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhT2JqZWN0RXh0cmFEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWRNZW1vcnkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpZ25hbE1hcHBlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU29ja2V0Tm90aWZpZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN5c3RlbVNlbWFwaG9yZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRyYW5zbGF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50TWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50SGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudENvbXBhcmlzb25IZWxwZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0QW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBbmltYXRpb25Ecml2ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYXJhbGxlbEFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYXVzZUFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUHJvcGVydHlBbmltYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNlcXVlbnRpYWxBbmltYXRpb25Hcm91cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudEFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdEFsZ29yaXRobXMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJpdEFycmF5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCaXRSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJ5dGVBcnJheSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZVJlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZUFycmF5TWF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2FjaGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMUNoYXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoYXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb250YWluZXJGd2QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnRpZ3VvdXNDYWNoZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnRpZ3VvdXNDYWNoZVR5cGVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29udGlndW91c0NhY2hlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDcnlwdG9ncmFwaGljSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0ZVRpbWUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUVhc2luZ0N1cnZlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFbGFwc2VkVGltZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoRHVtbXlWYWx1ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaER1bW15Tm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2ggLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11bHRpSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlSGFzaEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5lRiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlua2VkTGlzdERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3ROb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVMaW5rZWRMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpc3REYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVMaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN5c3RlbUxvY2FsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTG9jYWxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCQlN5c3RlbUxvY2FsZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcFBheWxvYWROb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11bHRpTWFwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXBJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZU1hcEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNYXJnaW5zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQYWlyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUG9pbnRGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FRdWV1ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVjdEYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlZ0V4cCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlckRlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXJBcnJheURlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXJQb2REZWxldGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRBcnJheVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFZhbHVlUm9sbGJhY2sgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNldCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVTZXRJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkRGF0YVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2hhcmVkUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV2Vha1BvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpemUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNpemVGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGFjayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RkV1N0cmluZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMYXRpbjFTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNoYXJSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbnN0U3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMUxpdGVyYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0Q29uY2F0ZW5hYmxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb25jYXRlbmFibGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ0J1aWxkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ0xpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVN0cmluZ0xpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTWF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dEJvdW5kYXJ5RmluZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lTGluZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyTGVuZ3RoQXJyYXkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3RvckRhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3RvclR5cGVkRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWZWN0b3JJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVZlY3Rvckl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGYWN0b3J5SW50ZXJmYWNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaWJyYXJ5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0UGx1Z2luIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0UGx1Z2luSW5zdGFuY2VGdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGx1Z2luTG9hZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FVdWlkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1TdHJpbmdSZWYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUF0dHJpYnV0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtQXR0cmlidXRlcyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9ucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTm90YXRpb25EZWNsYXJhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTm90YXRpb25EZWNsYXJhdGlvbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eURlY2xhcmF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1FbnRpdHlEZWNsYXJhdGlvbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1SZWFkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbVdyaXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQXRvbWljSW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBdG9taWNQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCYXNpY0F0b21pY0ludCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQmFzaWNBdG9taWNQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRleCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0ZXhMb2NrZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGV4RGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVhZFdyaXRlTG9jayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVhZExvY2tlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV3JpdGVMb2NrZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNlbWFwaG9yZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRTdG9yYWdlRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGhyZWFkU3RvcmFnZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RV2FpdENvbmRpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RUcmFuc2l0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFdmVudFRyYW5zaXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbmFsU3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhpc3RvcnlTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2lnbmFsVHJhbnNpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RhdGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0YXRlTWFjaGluZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUZ1dHVyZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJbnRlcmZhY2VCYXNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZVN5bmNocm9uaXplciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlV2F0Y2hlckJhc2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZVdhdGNoZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJ1bm5hYmxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uY3VycmVudEZpbHRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmN1cnJlbnRNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb25jdXJyZW50UnVuIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRQb29sIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEZpbGVFbmdpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZUhhbmRsZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCdWZmZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURhdGFTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXREZWJ1ZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGVidWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU5vRGVidWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUURpciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGlySXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlSW5mb0xpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGaWxlU3lzdGVtV2F0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRlNGaWxlRW5naW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FJT0RldmljZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1BJRCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUHJvY2Vzc0Vudmlyb25tZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQcm9jZXNzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZXNvdXJjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0dGluZ3MgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRlbXBvcmFyeUZpbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRTdHJlYW1GdW5jdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dFN0cmVhbU1hbmlwdWxhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUUyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dElTdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRPU3RyZWFtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FVcmwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRFbmRpYW4gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRHbG9iYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUludGVnZXJGb3JTaXplIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FOb0ltcGxpY2l0Qm9vbENhc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQ4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDggLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQxNiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VJTlQxNiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDMyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDMyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfSU5UNjQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UNjQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9MTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VMTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0xPTkcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3lzSW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdE1zZ0hhbmRsZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUdsb2JhbFN0YXRpYyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2xvYmFsU3RhdGljRGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQm9vbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVHlwZUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZsYWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUluY29tcGF0aWJsZUZsYWcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZsYWdzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGb3JlYWNoQ29udGFpbmVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGb3JlYWNoQ29udGFpbmVyQmFzZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlicmFyeUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUludGVybmFsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDT09SRCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmZpZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dENvZGVjIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0RW5jb2RlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dERlY29kZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRDb2RlY0ZhY3RvcnlJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRDb2RlY1BsdWdpbiAKKyBTWU5DUVQuUFJJVkFURV9IRUFERVJfRklMRVMgPSAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RldmVudGRpc3BhdGNoZXJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGl0ZW1tb2RlbF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVfbWFjX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV9zeW1iaWFuX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV91bml4X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWNtZGxpbmVhcmdzX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWdsb2JhbGRhdGFfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FjcmFzaGhhbmRsZXJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfYmxhY2tiZXJyeV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl9nbGliX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfdW5peF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl93aW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhb2JqZWN0X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2hhcmVkbWVtb3J5X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtZXJyb3JfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1zZW1hcGhvcmVfcC5oIC4uL2NvcmVsaWIva2VybmVsL3F0cmFuc2xhdG9yX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudF9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXdpbmV2ZW50bm90aWZpZXJfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbl9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGFyYWxsZWxhbmltYXRpb25ncm91cF9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xc2VxdWVudGlhbGFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xdmFyaWFudGFuaW1hdGlvbl9wLmggLi4vY29yZWxpYi90b29scy9xYnl0ZWRhdGFfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWRhdGV0aW1lX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FoYXJmYnV6el9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX2RhdGFfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX3Rvb2xzX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fwb2RsaXN0X3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FyaW5nYnVmZmVyX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWRwb2ludGVyX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaW1kX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3F0b29sc19wLmggLi4vY29yZWxpYi90b29scy9xdW5pY29kZXRhYmxlc19wLmggLi4vY29yZWxpYi9wbHVnaW4vcWVsZnBhcnNlcl9wLmggLi4vY29yZWxpYi9wbHVnaW4vcWZhY3Rvcnlsb2FkZXJfcC5oIC4uL2NvcmVsaWIvcGx1Z2luL3FsaWJyYXJ5X3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xc3lzdGVtbGlicmFyeV9wLmggLi4vY29yZWxpYi94bWwvcXhtbHN0cmVhbV9wLmggLi4vY29yZWxpYi94bWwvcXhtbHV0aWxzX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xbXV0ZXhfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleHBvb2xfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FvcmRlcmVkbXV0ZXhsb2NrZXJfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FyZWFkd3JpdGVsb2NrX3AuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3RzdGF0ZV9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0dHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWV2ZW50dHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWhpc3RvcnlzdGF0ZV9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXNpZ25hbGV2ZW50Z2VuZXJhdG9yX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsdHJhbnNpdGlvbl9wLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGVtYWNoaW5lX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZWludGVyZmFjZV9wLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmV3YXRjaGVyX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRocmVhZHBvb2xfcC5oIC4uL2NvcmVsaWIvaW8vcWFic3RyYWN0ZmlsZWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xZGF0YXN0cmVhbV9wLmggLi4vY29yZWxpYi9pby9xZGF0YXVybF9wLmggLi4vY29yZWxpYi9pby9xZGlyX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlaW5mb19wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbWVudHJ5X3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW1tZXRhZGF0YV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfZG5vdGlmeV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfZnNldmVudHNfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2lub3RpZnlfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX2txdWV1ZV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW13YXRjaGVyX3dpbl9wLmggLi4vY29yZWxpYi9pby9xZnNmaWxlZW5naW5lX2l0ZXJhdG9yX3AuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmVfcC5oIC4uL2NvcmVsaWIvaW8vcWlvZGV2aWNlX3AuaCAuLi9jb3JlbGliL2lvL3Fub25jb250aWd1b3VzYnl0ZWRldmljZV9wLmggLi4vY29yZWxpYi9pby9xcHJvY2Vzc19wLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2VfaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcXJlc291cmNlX3AuaCAuLi9jb3JlbGliL2lvL3FzZXR0aW5nc19wLmggLi4vY29yZWxpYi9pby9xdGxkdXJsX3AuaCAuLi9jb3JlbGliL2lvL3F1cmx0bGRzX3AuaCAuLi9jb3JlbGliL2lvL3F3aW5kb3dzcGlwZXdyaXRlcl9wLmggLi4vY29yZWxpYi9nbG9iYWwvcW51bWVyaWNfcC5oIC4uL2NvcmVsaWIvZ2xvYmFsL3F0X3BjaC5oIC4uL2NvcmVsaWIvY29kZWNzL3Fmb250bGFvY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3FpY29udmNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xaXNjaWljb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcWxhdGluY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3FzaW1wbGVjb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXRleHRjb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXRzY2lpY29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3F1dGZjb2RlY19wLmggCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmYWNlNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMy1jb25maWd1cmUtc3VwcG9ydC1jLTB4LXN0YW5kYXJkLWZvci1kaXJlY3RmZC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitjb25maWd1cmU6IHN1cHBvcnQgYysrMHggc3RhbmRhcmQgZm9yIGRpcmVjdGZkCisKK1doaWxlIGRpcmVjdGZkIHVwZ3JhZGUgdG8gMS43LjYsIGl0IGFsd2F5cyBpbmNsdWRlcyBkaXJlY3RmYisrIHV0aWxzCit3aGVuIEMrKyBpcyB1c2VkIGFuZCBzZXQgYysrMHggYXMgYysrIHN0YW5kYXJkLgorKEluIGdpdDovL2dpdC5kaXJlY3RmYi5vcmcvZ2l0L2RpcmVjdGZiL2NvcmUvRGlyZWN0RkIuZ2l0Citjb21taXQgYjQ0NGJjYWUzMTk3YmU5ZmFmODgzNDYwZGNjMjM5ZWY3NTdkNTkyMiwgYW5kIGNvbW1pdAorNTIyYmVlYjc2ZjJhOGQyZGVlMzBkOTI4ZDJhNTk1NWJkMDZjZjI1YykKKworVGhlIGRpcmVjdGZkIGluIHF0NCBpcyBjKyssIGFuZCB0aGVyZSB3YXMgYSBidWlsZCBmYWlsdXJlOgorLi4uCit8IHFkaXJlY3RmYndpbmRvd3N1cmZhY2UuY3BwOjMzNjo2OTogZXJyb3I6IGluIEMrKzk4ICdyZWN0JyBtdXN0IGJlCitpbml0aWFsaXplZCBieSBjb25zdHJ1Y3Rvciwgbm90IGJ5ICd7Li4ufScKK3wgICAgICBjb25zdCBERkJSZWN0YW5nbGUgcmVjdCA9IHsgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgfTsKKy4uLgorCitUaGUgZysrIHVzZWQgYysrOTggYXMgZGVmYXVsdCBjKysgc3RhbmRhcmQsIHdlIHNob3VsZAorZXhwbGljaXRseSBzZXQgYysrMHggZm9yIGRpcmVjdGZkIGluIHF0NC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1NzI0YmQ2Li5lY2MyZjhiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NjU2LDYgKzY2NTYsNyBAQCBpZiBbICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJHtzY3JlZW59IiA9ICJkaXJlY3RmYiIgXSAmJiBbICIke0NGR19DT05GSUdVUkVfRVhJVF9PTl9FUlJPUn0iID0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmICIkUEtHX0NPTkZJRyIgLS1leGlzdHMgZGlyZWN0ZmIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICBRVF9DRkxBR1NfRElSRUNURkI9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGRpcmVjdGZiIDI+L2Rldi9udWxsYAorKyAgICAgICAgICAgICAgIFFUX0NGTEFHU19ESVJFQ1RGQj0iJFFUX0NGTEFHU19ESVJFQ1RGQiAtc3RkPWMrKzB4IgorICAgICAgICAgICAgICAgIFFUX0xJQlNfRElSRUNURkI9YCRQS0dfQ09ORklHIC0tbGlicyBkaXJlY3RmYiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIGVsaWYgZGlyZWN0ZmItY29uZmlnIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICAgICAgICBRVF9DRkxBR1NfRElSRUNURkI9YGRpcmVjdGZiLWNvbmZpZyAtLWNmbGFncyAyPi9kZXYvbnVsbGAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L0ZpeC1RV1NMb2NrLWludmFsaWQtYXJndW1lbnQtbG9ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjVmMDBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSA1MmMzNDAwMWJhZDg1YzMwMzI2MTgwNzBiMWQ2YjJhM2M2ODgwNzE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmVpbCBKZXJyYW0gPG4uLi5Ab3NzYXUuaG9tZWxpbnV4Lm5ldD4KK0RhdGU6IFRodSwgOCBOb3YgMjAxMiAwODoxODozMiArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggUVdTTG9jayAiaW52YWxpZCBhcmd1bWVudCIgbG9ncworCitUaGVyZSB3YXMgbm8ga25vd24gYWN0dWFsIHByb2JsZW0gYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGxvZ3MsIGJ1dCB0aGV5Cit3ZXJlIHNwYW1taW5nIHRoZSBsb2csIHNvIEkgdGhvdWdodCBpdCB3b3J0aCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhbmQKK2ZpeCB0aGVtLgorCitUaGUgY29uZnVzaW9uIGlzIHRoYXQgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgd2F5cyBvZiBjcmVhdGluZyBRV1NMb2NrCitvYmplY3RzLiAgIlFXU0xvY2soKSIgY3JlYXRlcyBhbiBvYmplY3QgdGhhdCBjcmVhdGVzIGEgbmV3IHNldCBvZgorc2VtYXBob3Jlcywgd2hlcmVhcyAiUVdTTG9jayhpZCkiIGNyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgYWxpYXNlcyB0aGUKK2V4aXN0aW5nIHNldCBvZiBzZW1hcGhvcmVzIHdpdGggSUQgaWQuICBXaGF0IHNlZW1zIHRvIGhhcHBlbiBpcyB0aGF0CitlYWNoIGFwcGxpY2F0aW9uIGNyZWF0ZXMgYSBzZW1hcGhvcmUgc2V0IHNjb3BlZCB0byB0aGF0CithcHBsaWNhdGlvbiAoUVdTRGlzcGxheTo6RGF0YTo6Y2xpZW50TG9jayBpbiBxYXBwbGljYXRpb25fcXdzLmNwcCksCit0aGVuIHRoaXMgc2VtYXBob3JlIHNldCBpcyBwYXNzZWQgYnkgY29tcGxleCBtZWFucyB0bworcGxhY2VzIChRV1NDbGllbnRQcml2YXRlIGFuZCBRV1NNZW1vcnlTdXJmYWNlKSB0aGF0IHVzZSB0aGUgc2VtYXBob3JlcworZm9yIGEgc2hvcnQgcGVyaW9kIGFuZCB0aGVuIGRlbGV0ZSB0aGVpciBRV1NMb2NrIG9iamVjdHMuCisKK1RoZSBwcm9ibGVtIHdhcyB0aGF0IHRoZSBRV1NMb2NrIGRlc3RydWN0b3IgYWx3YXlzIGRlc3Ryb3llZCB0aGUKK3NlbWFwaG9yZSBzZXQsIGV2ZW4gd2hlbiB0aGF0IFFXU0xvY2sgaGFkbid0IGNyZWF0ZSB0aGUgc2VtYXBob3JlcworaXRzZWxmLCBoZW5jZSBtYWtpbmcgdGhlIHNlbWFwaG9yZXMgaW52YWxpZCBmb3Igb3RoZXIgUVdTTG9jayBvYmplY3RzCitzdGlsbCByZWZlcmVuY2luZyB0aGUgc2FtZSBzZXQuCisKK0NsZWFybHkgYSBRV1NMb2NrIG9iamVjdCBzaG91bGRuJ3QgZGVzdHJveSB0aGUgc2VtYXBob3JlIHNldCBpZiBpdAorZGlkbid0IGNyZWF0ZSBpdCBpdHNlbGYsIGFuZCB0aGF0IGlzIGNvbmZpcm1lZCBieSB0aGUgZmFjdCB0aGF0IG9uZSBvZgordGhlIGltcGxlbWVudGF0aW9ucyBpbnNpZGUgUVdTTG9jayBhbHJlYWR5IGltcGxlbWVudHMgdGhpcyBsb2dpYywgd2l0aAordGhlICdvd25lZCcgZmxhZy4gIFRoZSBmaXggaXMgdG8gaW1wbGVtZW50IHRoaXMgZm9yIHRoZSAjaWZuZGVmCitRVF9QT1NJWF9JUEMgY2FzZSAtIHdoaWNoIGlzIHdoYXQgaXMgdXNlZCBpbiBRdE1va28gLSBqdXN0IGFzIGlzCithbHJlYWR5IGltcGxlbWVudGVkIGZvciB0aGUgI2lmZGVmIFFUX1BPU0lYX0lQQyBjYXNlLgorCitPcmlnaW5hbCBwYXRjaCBjYW4gYmUgZm91bmQgaGVyZToKKyBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vY29tbXVuaXR5QGxpc3RzLm9wZW5tb2tvLm9yZy9tc2c2NTUxMi5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IE1pa2UgTG9vaWptYW5zIDxtaWtlLmxvb2lqbWFuc0B0b3BpYy5ubD4KKyAoUmVtb3ZlZCB0aGUgY29tbWVudGVkLW91dCBkZWJ1ZyBzdGF0ZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHBhdGNoLikKKworLS0tCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2suY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcAoraW5kZXggOTkxNGEyNC4uMTA1NTc4NSAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAKK0BAIC04Myw5ICs4MywxMiBAQCBRV1NMb2NrOjpRV1NMb2NrKGludCBpZCkgOiBzZW1JZChpZCkKKyAgICAgUVdTU2lnbmFsSGFuZGxlcjo6aW5zdGFuY2UoKS0+YWRkV1NMb2NrKHRoaXMpOworICNlbmRpZgorIAorKyAgICBvd25lZCA9IGZhbHNlOworKworICNpZm5kZWYgUVRfUE9TSVhfSVBDCisgICAgIGlmIChzZW1JZCA9PSAtMSkgeworICAgICAgICAgc2VtSWQgPSBzZW1nZXQoSVBDX1BSSVZBVEUsIDMsIElQQ19DUkVBVCB8IDA2NjYpOworKyAgICAgICAgb3duZWQgPSB0cnVlOworICAgICAgICAgaWYgKHNlbUlkID09IC0xKSB7CisgICAgICAgICAgICAgcGVycm9yKCJRV1NMb2NrOjpRV1NMb2NrIik7CisgICAgICAgICAgICAgcUZhdGFsKCJVbmFibGUgdG8gY3JlYXRlIHNlbWFwaG9yZSIpOworQEAgLTEwMCw3ICsxMDQsNiBAQCBRV1NMb2NrOjpRV1NMb2NrKGludCBpZCkgOiBzZW1JZChpZCkKKyAgICAgfQorICNlbHNlCisgICAgIHNlbXNbMF0gPSBzZW1zWzFdID0gc2Vtc1syXSA9IFNFTV9GQUlMRUQ7CistICAgIG93bmVkID0gZmFsc2U7CisgCisgICAgIGlmIChzZW1JZCA9PSAtMSkgeworICAgICAgICAgLy8gIyMjIGdlbmVyYXRlIHJlYWxseSB1bmlxdWUgSURzCitAQCAtMTM0LDkgKzEzNywxMSBAQCBRV1NMb2NrOjp+UVdTTG9jaygpCisgCisgICAgIGlmIChzZW1JZCAhPSAtMSkgeworICNpZm5kZWYgUVRfUE9TSVhfSVBDCistICAgICAgICBxdF9zZW11biBzZW12YWw7CistICAgICAgICBzZW12YWwudmFsID0gMDsKKy0gICAgICAgIHNlbWN0bChzZW1JZCwgMCwgSVBDX1JNSUQsIHNlbXZhbCk7CisrCWlmIChvd25lZCkgeworKwkgICAgcXRfc2VtdW4gc2VtdmFsOworKwkgICAgc2VtdmFsLnZhbCA9IDA7CisrCSAgICBzZW1jdGwoc2VtSWQsIDAsIElQQ19STUlELCBzZW12YWwpOworKwl9CisgICAgICAgICBzZW1JZCA9IC0xOworICNlbHNlCisgICAgICAgICAvLyBlbXVsYXRlIHRoZSBTRU1fVU5ETyBiZWhhdmlvciBmb3IgdGhlIEJhY2tpbmdTdG9yZSBsb2NrCitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrX3AuaCBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmgKK2luZGV4IGQzMjRlNGYuLmQ4NjdkMjAgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oCitAQCAtODYsOCArODYsOCBAQCBwcml2YXRlOgorICAgICBpbnQgbG9ja0NvdW50WzJdOworICNpZmRlZiBRVF9QT1NJWF9JUEMKKyAgICAgc2VtX3QgKnNlbXNbM107CistICAgIGJvb2wgb3duZWQ7CisgI2VuZGlmCisrICAgIGJvb2wgb3duZWQ7CisgfTsKKyAKKyBRVF9FTkRfTkFNRVNQQUNFCisgCistLSAKKzEuNy4xMC40CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvYWRkX2NoZWNrX2Zvcl9hYXJjaDY0XzMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNTEwM2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaApAQCAtMCwwICsxLDU1IEBACitBdXRob3I6IEtyaXNobmFuamFuYXBwYSwgSmFnYWRlZXNoIDxqYWdhZGVlc2gua3Jpc2huYW5qYW5hcHBhQGNhdml1bW5ldHdvcmtzLmNvbT4KK0RhdGU6ICAgU3VuIEFwciAxMiAxOToyNzoxMCAyMDE1ICswNTMwCisKK1tQQVRDSF0gYWRkIGNoZWNraW5nIGZvciBBQXJjaDY0IGlscDMyCisKK0Nyb3NzLWNvbXBpbGluZyBxdDQtZW1iZWRkZWQgYW5kIHF0NC14MTEtZnJlZSBhcHBsaWNhdGlvbnMgZm9yIEFBcmNoNjQgaWxwMzIKKyhib3RoIGJpZyBhbmQgbGl0dGxlIGVuZGlhbikgZmFpbHMgd2l0aCBiZWxvdyBlcnJvciwKKworKHNuaXApCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaDozMTowLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmg6MzIsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6MjYsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaDoyNiwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0Lmg6MjcsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOjMwLAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOjI3OgorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOiBJbiBpbnN0YW50aWF0aW9uIG9mICdUTyBRVFdURjo6Yml0d2lzZV9jYXN0KEZST00pIFt3CisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1tZWRpYXRlLmg6NTI6NDk6IHJlcXVpcmVkIGZyb20gaGVyZQorLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oOjYzOjE6IGVycm9yOiBzaXplIG9mIGFycmF5IGlzIG5lZ2F0aXZlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ1RPIFFUV1RGOjpiaXR3aXNlX2Nhc3QoRlJPTSkgW3cKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaDo1Nzo0NzogcmVxdWlyZWQgZnJvbSBoZXJlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6NjM6MTogZXJyb3I6IHNpemUgb2YgYXJyYXkgaXMgbmVnYXRpdmUKK21ha2VbMV06ICoqKiBbb2JqL3JlbGVhc2UvSlNDYWxsYmFja0NvbnN0cnVjdG9yLm9dIEVycm9yIDEKKy0tIENVVCAtLQorCit0aGUgZXJyb3IgaXMgYmVjYXVzZSBvZiBKU1ZBTFVFNjQgaXMgYmVpbmcgZGVmaW5lZCB3aGlsZSBjb21waWxpbmcgcHJvZ3JhbXMKK2ZvciBBQXJjaDY0IGlscDMyLiBUaGlzIG1ha2VzIGVxdWFsIGNvbmRpdGlvbiBjaGVja2luZyBvZiBpbnRwdHJfdCBhbmQgZG91YmxlCitkYXRhdHlwZXMgYXMgZmFsc2UsIGFuZCByZXN1bHRzIGluIC0xIChuZWdhdGl2ZSkgYXMgYXJyYXkgc2l6ZSBpbiBiaXR3aXNlX2Nhc3QKK2Z1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorCistLS0gYS9zcmMvM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJMjAxNC0wNC0xMSAwMDowNzoxMi4wMDAwMDAwMDAgKzA1MzAKKysrKyBiL3NyYy8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkyMDE1LTA0LTEwIDIyOjE5OjUxLjA2NjI3OTQyNiArMDUzMAorQEAgLTIxNCw2ICsyMTQsOSBAQAorICNkZWZpbmUgV1RGX0NQVV9BQVJDSDY0IDEKKyAjaWYgZGVmaW5lZChfX0FBUkNINjRFQl9fKQorICNkZWZpbmUgV1RGX0NQVV9CSUdfRU5ESUFOIDEKKysjaWYgIWRlZmluZWQoX19MUDY0X18pCisrI2RlZmluZSBXVEZfQ1BVX0FBUkNINjRfMzIgMQorKyNlbmRpZgorICNlbmRpZgorICNlbmRpZgorIAorQEAgLTkwMyw3ICs5MDYsNyBAQAorICNlbmRpZgorIAorICNpZiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUU2NCkgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzIpICYmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTMyXzY0KQorLSNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpIHx8IE9TKFNPTEFSSVMpIHx8IE9TKEhQVVgpKSkgfHwgKENQVShJQTY0KSAmJiAhQ1BVKElBNjRfMzIpKSB8fCBDUFUoQUxQSEEpIHx8IENQVShBSVg2NCkgfHwgQ1BVKFNQQVJDNjQpIHx8IENQVShNSVBTNjQpIHx8IENQVShBQVJDSDY0KQorKyNpZiAoQ1BVKFg4Nl82NCkgJiYgKE9TKFVOSVgpIHx8IE9TKFdJTkRPV1MpIHx8IE9TKFNPTEFSSVMpIHx8IE9TKEhQVVgpKSkgfHwgKENQVShJQTY0KSAmJiAhQ1BVKElBNjRfMzIpKSB8fCBDUFUoQUxQSEEpIHx8IENQVShBSVg2NCkgfHwgQ1BVKFNQQVJDNjQpIHx8IENQVShNSVBTNjQpIHx8IChDUFUoQUFSQ0g2NCkgJiYgIUNQVShBQVJDSDY0XzMyKSkKKyAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTY0IDEKKyAjZWxpZiBDUFUoQVJNKSB8fCBDUFUoUFBDNjQpCisgI2RlZmluZSBXVEZfVVNFX0pTVkFMVUUzMiAxCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2crKy5jb25mIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9nKysuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc4YzI0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9nKysuY29uZgpAQCAtMCwwICsxLDQwIEBACisjCisjIHFtYWtlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbW1vbiBnY2MKKyMKKworUU1BS0VfQ09NUElMRVIgPSBnY2MKKworUU1BS0VfQ0MgICAgICAgPSAkKE9FX1FNQUtFX0NDKQorUU1BS0VfQ0ZMQUdTICAgICAgICs9ICQoT0VfUU1BS0VfQ0ZMQUdTKQorUU1BS0VfQ0ZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8gKz0gJChPRV9RTUFLRV9DRkxBR1MpCitRTUFLRV9DRkxBR1NfUFJFQ09NUElMRSArPSAteCBjLWhlYWRlciAtYyAke1FNQUtFX1BDSF9JTlBVVH0gLW8gJHtRTUFLRV9QQ0hfT1VUUFVUfQorUU1BS0VfQ0ZMQUdTX1VTRV9QUkVDT01QSUxFICs9IC1pbmNsdWRlICR7UU1BS0VfUENIX09VVFBVVF9CQVNFfQorCitRTUFLRV9DWFggICAgICA9ICQoT0VfUU1BS0VfQ1hYKQorUU1BS0VfQ1hYRkxBR1MgICAgICs9ICQoT0VfUU1BS0VfQ1hYRkxBR1MpCitRTUFLRV9DWFhGTEFHU19SRUxFQVNFX1dJVEhfREVCVUdJTkZPICs9ICQkUU1BS0VfQ0ZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8KK1FNQUtFX0NYWEZMQUdTX1BSRUNPTVBJTEUgKz0gLXggYysrLWhlYWRlciAtYyAke1FNQUtFX1BDSF9JTlBVVH0gLW8gJHtRTUFLRV9QQ0hfT1VUUFVUfQorUU1BS0VfQ1hYRkxBR1NfVVNFX1BSRUNPTVBJTEUgPSAkJFFNQUtFX0NGTEFHU19VU0VfUFJFQ09NUElMRQorCitRTUFLRV9MSU5LICAgICA9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfU0hMSUIgICA9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfQwkJPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MSU5LX0NfU0hMSUIJPSAkKE9FX1FNQUtFX0xJTkspCitRTUFLRV9MRkxBR1MgICAgICAgKz0gJChPRV9RTUFLRV9MREZMQUdTKQorUU1BS0VfTEZMQUdTX05PVU5ERUYJKz0gLVdsLC0tbm8tdW5kZWZpbmVkCitRTUFLRV9MRkxBR1NfUlBBVEggICAgICAgID0gLVdsLC1ycGF0aC1saW5rLAorCitRTUFLRV9QQ0hfT1VUUFVUX0VYVCAgICA9IC5nY2gKKworIyAtQnN5bWJvbGljLWZ1bmN0aW9ucyAobGQpIHN1cHBvcnQKK1FNQUtFX0xGTEFHU19CU1lNQk9MSUNfRlVOQyA9IC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucworUU1BS0VfTEZMQUdTX0RZTkFNSUNfTElTVCA9IC1XbCwtLWR5bmFtaWMtbGlzdCwKKworIyBkbyBub3QgZGVwZW5kIG9uIGdkYgorQ09ORklHIC09IGdkYl9kd2FyZl9pbmRleAorCisjIHNvbWUgbGlua2luZyBoZWxwZXIuLi4KK0NPTkZJRyArPSBycGF0aF9saWJkaXJzCisKKyMgZm9yIHRoZSBTREsKK2lzRW1wdHkoUU1BS0VfUVRfQ09ORklHKTpRTUFLRV9RVF9DT05GSUcgPSAkKE9FX1FNQUtFX1FUX0NPTkZJRykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvbGludXguY29uZiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvbGludXguY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjcwMzgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9saW51eC5jb25mCkBAIC0wLDAgKzEsNjYgQEAKKyMKKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgY29tbW9uIGxpbnV4CisjCisKK1FNQUtFX0NGTEFHU19USFJFQUQJKz0gLURfUkVFTlRSQU5UCitRTUFLRV9DWFhGTEFHU19USFJFQUQJKz0gJCRRTUFLRV9DRkxBR1NfVEhSRUFECisKK1FNQUtFX0lOQ0RJUiAgICAgICAgICA9CitRTUFLRV9MSUJESVIgICAgICAgICAgPQorUU1BS0VfSU5DRElSX1gxMSAgICAgID0KK1FNQUtFX0xJQkRJUl9YMTEgICAgICA9CitRTUFLRV9JTkNESVJfUVQgICAgICAgPSAkKE9FX1FNQUtFX0lOQ0RJUl9RVCkKK1FNQUtFX0xJQkRJUl9RVCAgICAgICA9ICQoT0VfUU1BS0VfTElCRElSX1FUKQorUU1BS0VfSU5DRElSX09QRU5HTCAgID0KK1FNQUtFX0xJQkRJUl9PUEVOR0wgICA9CitRTUFLRV9JTkNESVJfT1BFTkdMX0VTMSA9ICQkUU1BS0VfSU5DRElSX09QRU5HTAorUU1BS0VfTElCRElSX09QRU5HTF9FUzEgPSAkJFFNQUtFX0xJQkRJUl9PUEVOR0wKK1FNQUtFX0lOQ0RJUl9PUEVOR0xfRVMyID0gJCRRTUFLRV9JTkNESVJfT1BFTkdMCitRTUFLRV9MSUJESVJfT1BFTkdMX0VTMiA9ICQkUU1BS0VfTElCRElSX09QRU5HTAorUU1BS0VfSU5DRElSX0VHTCAgICAgID0KK1FNQUtFX0xJQkRJUl9FR0wgICAgICA9CitRTUFLRV9JTkNESVJfT1BFTlZHICAgPQorUU1BS0VfTElCRElSX09QRU5WRyAgID0KKworCitRTUFLRV9MSUJTICAgICAgICAgICAgPQorUU1BS0VfTElCU19EWU5MT0FEICAgID0gLWxkbAorUU1BS0VfTElCU19YMTEgICAgICAgID0gJChPRV9RTUFLRV9MSUJTX1gxMSkKK1FNQUtFX0xJQlNfWDExU00gICAgICA9ICQoT0VfUU1BS0VfTElCU19YMTFTTSkKK1FNQUtFX0xJQlNfTklTICAgICAgICA9IC1sbnNsCitRTUFLRV9MSUJTX0VHTCAgICAgICAgPSAtbEVHTAorUU1BS0VfTElCU19PUEVOR0wgICAgID0gLWxHTAorUU1BS0VfTElCU19PUEVOR0xfUVQgID0gLWxHTAorUU1BS0VfTElCU19PUEVOR0xfRVMxID0gLWxHTEVTX0NNCitRTUFLRV9MSUJTX09QRU5HTF9FUzIgPSAtbEdMRVN2MgorUU1BS0VfTElCU19PUEVOVkcgICAgID0gLWxPcGVuVkcKK1FNQUtFX0xJQlNfVEhSRUFEICAgICA9IC1scHRocmVhZAorCitRTUFLRV9NT0MgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX01PQykKK1FNQUtFX1VJQyAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfVUlDKQorUU1BS0VfVUlDMyAgICAgICAgICAgID0gJChPRV9RTUFLRV9VSUMzKQorUU1BS0VfUkNDICAgICAgICAgICAgID0gJChPRV9RTUFLRV9SQ0MpCitRTUFLRV9RREJVU0NQUDJYTUwgICAgPSAkKE9FX1FNQUtFX1FEQlVTQ1BQMlhNTCkKK1FNQUtFX1FEQlVTWE1MMkNQUCAgICA9ICQoT0VfUU1BS0VfUURCVVNYTUwyQ1BQKQorCitRTUFLRV9BUiAgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX0FSKSBjcXMKK1FNQUtFX09CSkNPUFkgICAgICAgICA9IG9iamNvcHkKK1FNQUtFX1JBTkxJQiAgICAgICAgICA9CisKK1FNQUtFX1RBUiAgICAgICAgICAgICA9IHRhciAtY2YKK1FNQUtFX0daSVAgICAgICAgICAgICA9IGd6aXAgLTlmCisKK1FNQUtFX0NPUFkgICAgICAgICAgICA9IGNwIC1mCitRTUFLRV9DT1BZX0ZJTEUgICAgICAgPSAkKENPUFkpCitRTUFLRV9DT1BZX0RJUiAgICAgICAgPSAkKENPUFkpIC1yCitRTUFLRV9NT1ZFICAgICAgICAgICAgPSBtdiAtZgorUU1BS0VfREVMX0ZJTEUgICAgICAgID0gcm0gLWYKK1FNQUtFX0RFTF9ESVIgICAgICAgICA9IHJtZGlyCitRTUFLRV9TVFJJUCAgICAgICAgICAgPSAkKE9FX1FNQUtFX1NUUklQKQorUU1BS0VfU1RSSVBGTEFHU19MSUIgKz0gLS1zdHJpcC11bm5lZWRlZAorUU1BS0VfQ0hLX0RJUl9FWElTVFMgID0gdGVzdCAtZAorUU1BS0VfTUtESVIgICAgICAgICAgID0gbWtkaXIgLXAKK1FNQUtFX0lOU1RBTExfRklMRSAgICA9IGluc3RhbGwgLW0gNjQ0IC1wCitRTUFLRV9JTlNUQUxMX1BST0dSQU0gPSBpbnN0YWxsIC1tIDc1NSAtcAorCitpbmNsdWRlKHVuaXguY29uZikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9xdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkNmVjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2lmIFsgLWUgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgXQordGhlbgorICAgIFFXU19NT1VTRV9QUk9UTz1Uc2xpYjovZGV2L2lucHV0L3RvdWNoc2NyZWVuMAorICAgIGV4cG9ydCBRV1NfTU9VU0VfUFJPVE8KK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjkwNjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYwpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIkNyb3NzLXBsYXRmb3JtIFVJIHRvb2xraXQgYW5kIGFwcGxpY2F0aW9uIGZyYW1ld29yayAoZnJhbWVidWZmZXIgdmVyc2lvbikiCitERVNDUklQVElPTiA9ICJRdCBpcyBhIHZlcnNhdGlsZSBjcm9zcy1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgLS0gdGhpcyBpcyB0aGUgZW1iZWRkZWQgKGZyYW1lYnVmZmVyKSB2ZXJzaW9uLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy8iCitERVBFTkRTICs9ICJkaXJlY3RmYiB0c2xpYiIKKworUVQ0RURFUEVORFMgPSAiIgorUVRfQkFTRV9MSUIgID89ICJsaWJxdC1lbWJlZGRlZCIKKworIyBTZXQgbmVjZXNzYXJ5IHZhcmlhYmxlcyBpbiB0aGUgcHJvZmlsZQorU1JDX1VSSSArPSAiZmlsZTovL3F0ZS5zaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAzMy1jb25maWd1cmUtc3VwcG9ydC1jLTB4LXN0YW5kYXJkLWZvci1kaXJlY3RmZC5wYXRjaCBcCisiCisKK1FUX0VNQkVEREVEX0ZMQUdTID89ICIgXAorICAgIC1lbWJlZGRlZCAkUVRfQVJDSCBcCisgICAgLXF0bGliaW5maXggJHtRVF9MSUJJTkZJWH0gXAorIgorUVRfRU1CRURERURfRVhUUkFfRkxBR1MgPz0gIiBcCisgICAgLXBsdWdpbi1nZngtdHJhbnNmb3JtZWQgLXBsdWdpbi1nZngtcXZmYiAtcGx1Z2luLWdmeC12bmMgLXBsdWdpbi1nZngtZGlyZWN0ZmIgXAorICAgIC1wbHVnaW4tbW91c2UtdHNsaWIgLXF0LW1vdXNlLXBjIC1xdC1tb3VzZS1xdmZiIC1xdC1tb3VzZS1saW51eGlucHV0IFwKKyAgICAtcXQta2JkLXR0eSAtcXQta2JkLWxpbnV4aW5wdXQgXAorIgorUVRfRU1CRURERURfS0VZUEFEX0ZMQUdTID89ICIgXAorICAgIC1EUVRfS0VZUEFEX05BVklHQVRJT04gXAorIgorCitRVF9DT05GSUdfRkxBR1MgKz0gIiR7UVRfRU1CRURERURfRkxBR1N9ICR7UVRfRU1CRURERURfRVhUUkFfRkxBR1N9ICR7UVRfRU1CRURERURfS0VZUEFEX0ZMQUdTfSIKKworcmVxdWlyZSBxdDQuaW5jCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vZm9udHMKKyAgICB0b3VjaCAke0R9LyR7bGliZGlyfS9mb250cy9mb250ZGlyCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9xdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCisjIFdlIHB1dCB0aGUgcXRlIHByb2ZpbGUgaW50byBpdCdzIG93biBwYWNrYWdlIGFzIHdlIGRvbid0IHdhbnQgdG8gaW5zdGFsbCBhbGwgcXQgc3R1ZmYKKyMgd2l0aCBkZXBlbmRpbmcgb24gdGhlIGdsb2JhbCBwYWNrYWdlIHF0NC1lbWJlZGRlZAorUEFDS0FHRVMgKz0gIiAke1BOfS1jb25mIgorRklMRVNfJHtQTn0tY29uZiArPSAiICR7c3lzY29uZmRpcn0vcHJvZmlsZS5kL3F0ZS5zaCIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIgJHtQTn0tY29uZiIKKworT1RIRVJfUEFDS0FHRVMgKz0gIlwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtdmVyYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi1kZWphdnUgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYiCisKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1mb250cyA9ICIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtdmVyYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi1kZWphdnUgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmEgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMiCisKK0FMTE9XX0VNUFRZXyR7UVRfQkFTRV9OQU1FfS1mb250cyA9ICIxIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UVRfQkFTRV9OQU1FfS1mb250cy0uKiIKKworRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi12ZXJhICAgICAgID0gIiR7bGliZGlyfS9mb250cy9WZXJhKi50dGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLWRlamF2dSAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzL0RlamFWdSoudHRmIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYSAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy8qLnBmYSIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy1wZmIgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvKi5wZmIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtcXBmICAgICAgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzLyoucXBmKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cyAgICAgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvUkVBRE1FICR7bGliZGlyfS9mb250cy9mb250ZGlyIgorCitpbmhlcml0IHF0NGUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZF80LjguNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWRfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzNWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWRfNC44LjcuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHF0NC0ke1BWfS5pbmMKK3JlcXVpcmUgcXQ0LWVtYmVkZGVkLmluYworCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLW5vLW5lb24iICxkKX0iCisKK1FUX0NPTkZJR19GTEFHUyArPSAiIFwKKyAtZXhjZXB0aW9ucyBcCisiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQxZjhhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsMTEyIEBACitTVU1NQVJZID0gIlF0IHZlcnNpb24gNCB0b29scyBhbmQgc3VwcG9ydCBmaWxlcyBmb3IgdGhlIGJ1aWxkIGhvc3QiCitERVBFTkRTID0gInpsaWItbmF0aXZlIGRidXMtbmF0aXZlIgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK1BST1ZJREVTID0gInF0NC10b29scy1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwzO21kNT02ZTE2OTRlZTMzOGRiNDEwNDE3NTE3ODg0OTE4ZDRkMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMX0VYQ0VQVElPTi50eHQ7bWQ1PTAxNDVjNGQxYjZmOTZhNjYxYzJjMTM5ZGZiMjY4ZmI2IgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvJHtQVn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1xbGlicmFyeWluZm8tYWxsb3ctdG8tc2V0LXF0LmNvbmYtZnJvbS10aGUtb3V0c2lkZS11LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItcWtiZHR0eV9xd3MtZml4LWJ1aWxkLXdpdGgtb2xkLWtlcm5lbC1oZWFkZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWNvbmZpZ3VyZS1tYWtlLXF0NC1uYXRpdmUtd29yay13aXRoLWxvbmctYnVpbGRpbmctcGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZysrLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vbGludXguY29uZiBcCisJIgorUyA9ICIke1dPUktESVJ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItcHJlZml4ICR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgLWJpbmRpciAke2JpbmRpcn0gXAorICAgICAgICAgICAgICAgIC1saWJkaXIgJHtsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtZGF0YWRpciAke2RhdGFkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLXN5c2NvbmZkaXIgJHtzeXNjb25mZGlyfS9xdDQgXAorICAgICAgICAgICAgICAgIC1kb2NkaXIgJHtkb2NkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLWhlYWRlcmRpciAke2luY2x1ZGVkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLXBsdWdpbmRpciAke2xpYmRpcn0vcXQ0L3BsdWdpbnMgXAorICAgICAgICAgICAgICAgIC1pbXBvcnRkaXIgJHtsaWJkaXJ9L3F0NC9pbXBvcnRzIFwKKyAgICAgICAgICAgICAgICAtdHJhbnNsYXRpb25kaXIgJHtkYXRhZGlyfS9xdDQvdHJhbnNsYXRpb25zIFwKKyAgICAgICAgICAgICAgICAtZXhhbXBsZXNkaXIgJHtiaW5kaXJ9L3F0NC9leGFtcGxlcyBcCisgICAgICAgICAgICAgICAgLWRlbW9zZGlyICR7YmluZGlyfS9xdDQvZGVtb3MgXAorICAgICAgICAgICAgICAgIC1MICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgLUkgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAtcXQtbGlianBlZyAtc3lzdGVtLXpsaWIgXAorICAgICAgICAgICAgICAgIC1uby1saWJqcGVnIC1uby1saWJwbmcgLW5vLWxpYm1uZyAtbm8tbGlidGlmZiBcCisgICAgICAgICAgICAgICAgLW5vLWFjY2Vzc2liaWxpdHkgXAorICAgICAgICAgICAgICAgIC1uby1jdXBzIFwKKyAgICAgICAgICAgICAgICAtbm8tbmFzLXNvdW5kIFwKKyAgICAgICAgICAgICAgICAtbm8tbmlzIC1uby1vcGVuc3NsIFwKKyAgICAgICAgICAgICAgICAtdmVyYm9zZSAtcmVsZWFzZSBcCisgICAgICAgICAgICAgICAgLWVtYmVkZGVkIC1uby1mcmVldHlwZSAtbm8tZ2xpYiAtbm8taWNvbnYgXAorICAgICAgICAgICAgICAgIC1leGNlcHRpb25zIC14bWxwYXR0ZXJucyBcCisgICAgICAgICAgICAgICAgLXF0M3N1cHBvcnQgXAorICAgICAgICAgICAgICAgIC1uby1mYXN0IC1zaWxlbnQgLW5vLXJwYXRoIgorCisjIHlhbmsgZGVmYXVsdCAtZSwgb3RoZXJ3aXNlIHdlIGdldCB0aGUgZm9sbG93aW5nIGVycm9yOgorIyBtb2NfcWJ1ZmZlci5jcHA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0VYVFJBX09FTUFLRSA9ICIgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBBdm9pZCBwcm9ibGVtcyB3aXRoIFF0IDQuOC4wIGNvbmZpZ3VyZSBzZXR0aW5nIFFNQUtFX0xJTksgZnJvbSBMRCAoc2luY2Ugd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGcrKykKKwl1bnNldCBMRAorCisJKGVjaG8gbzsgZWNobyB5ZXMpIHwgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9IHx8IGRpZSAiQ29uZmlndXJpbmcgcXQgZmFpbGVkLiBFWFRSQV9PRUNPTkYgd2FzICR7RVhUUkFfT0VDT05GfSIKK30KKworVE9CVUlMRCA9ICJcCisgIHNyYy90b29scy9tb2MgXAorICBzcmMvY29yZWxpYiBcCisgIHNyYy9zcWwgXAorICBzcmMveG1sIFwKKyAgc3JjL25ldHdvcmsgXAorICBzcmMvdG9vbHMvdWljIFwKKyAgc3JjL3Rvb2xzL3JjYyBcCisgIHNyYy94bWxwYXR0ZXJucyBcCisgIHNyYy9kYnVzIFwKKyAgc3JjL2d1aSBcCisgIHNyYy90ZXN0bGliIFwKKyAgc3JjL3F0M3N1cHBvcnQgXAorICBzcmMvdG9vbHMvdWljMyBcCisgIHRvb2xzL2xpbmd1aXN0L2xjb252ZXJ0IFwKKyAgdG9vbHMvbGluZ3Vpc3QvbHJlbGVhc2UgXAorICB0b29scy9saW5ndWlzdC9sdXBkYXRlIFwKKyAgdG9vbHMvcWRidXMvcWRidXNjcHAyeG1sIFwKKyAgdG9vbHMvcWRidXMvcWRidXN4bWwyY3BwIFwKKyAgdG9vbHMveG1scGF0dGVybnMgXAorIgorCitkb19jb21waWxlKCkgeworCWZvciBpIGluICR7VE9CVUlMRH07IGRvCisJCWNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IgorCWRvbmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9xbWFrZSAke0R9JHtiaW5kaXJ9L3FtYWtlMgorCWZvciBpIGluIG1vYyB1aWMgdWljMyByY2MgbGNvbnZlcnQgbHJlbGVhc2UgbHVwZGF0ZSBxZGJ1c2NwcDJ4bWwgcWRidXN4bWwyY3BwIHhtbHBhdHRlcm5zOyBkbworCQlpbnN0YWxsIC1tIDA3NTUgYmluLyR7aX0gJHtEfSR7YmluZGlyfS8ke2l9NAorCWRvbmUKKyAgICAKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3F0NC8KKwljcCAtUGZSIG1rc3BlY3MgJHtEfSR7ZGF0YWRpcn0vcXQ0LworCWxuIC1zZiBsaW51eC1nKysgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvJHtCVUlMRF9PU30tb2UtZysrCisJaWYgWyAtZiAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZiBdIDsgdGhlbgorCQkjIG1rc3BlY3Mgd2VyZSByZWZhY3RvcmVkIGZvciA0LjguMAorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mCisJZWxzZQorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKysuY29uZgorCWZpCisJY3AgLWYgJHtXT1JLRElSfS9saW51eC5jb25mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi8KKworCWluc3RhbGwgLW0gMDY0NCB0b29scy9wb3J0aW5nL3NyYy9xM3BvcnRpbmcueG1sICR7RH0ke2RhdGFkaXJ9L3F0NC8KKworCWZvciBpIGluICR7VE9CVUlMRH07IGRvCisJCWNkICR7U30vJGkgJiYgb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExfUk9PVD0ke0R9CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZV80LjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRkNjYzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHF0NC1uYXRpdmUuaW5jCisKK1RPQlVJTEQgOj0gInNyYy90b29scy9ib290c3RyYXAgJHtUT0JVSUxEfSIKKworU1JDX1VSSVttZDVzdW1dID0gImQ5OTBlZTY2YmY3YWIwYzc4NTU4OTc3NmYzNWJhNmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUyODgyMjk1MDk3ZTQ3ZmUwODlmOGFjNzQxYTk1ZmVmNDdlMGE3M2EzZjNjZGYyMWI1Njk5MDYzOGY2MjZlYTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTE3MzcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYwpAQCAtMCwwICsxLDM4IEBACityZXF1aXJlIHF0NC5pbmMKKworU1VNTUFSWSA9ICJDcm9zcy1wbGF0Zm9ybSBVSSB0b29sa2l0IGFuZCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgKFgxMSB2ZXJzaW9uKSIKK0RFU0NSSVBUSU9OID0gIlF0IGlzIGEgdmVyc2F0aWxlIGNyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9uIGZyYW1ld29yayAtLSB0aGlzIGlzIHRoZSBYMTEgdmVyc2lvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGZvbnRjb25maWcgbGlieGZ0IGxpYnhleHQgbGlieHJlbmRlciBsaWJ4cmFuZHIgbGlieGN1cnNvciIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wnLCAnJywgZCl9IgorUFJPVklERVMgKz0gInF0NC14MTEiCitRVDRERVBFTkRTID0gIiIKKworUVRfR0xGTEFHUyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLW9wZW5nbCcsICctbm8tb3BlbmdsJywgZCl9ICIKK1FUX0dMRkxBR1NfcWVtdXg4NiA9ICItb3BlbmdsIgorUVRfR0xGTEFHU19xZW11cHBjID0gIi1vcGVuZ2wiCitRVF9YMTFfRkxBR1MgPz0gIi1uby14aW5lcmFtYSAtbm8teGtiIC1uby1ndGtzdHlsZSIKK1FUX0NPTkZJR19GTEFHUyArPSAiJHtRVF9YMTFfRkxBR1N9IgorUVRfQkFTRV9MSUIgID89ICJsaWJxdCIKKworIyByZXF1aXJlZCBieSBrZGVsaWJzNAorUVRfS0RFX0ZMQUdTID89ICItYWNjZXNzaWJpbGl0eSAtc20iCitRVF9ESVNUUk9fRkxBR1MgPz0gIiR7UVRfS0RFX0ZMQUdTfSIKKworaW5oZXJpdCBxdDR4MTEKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICMgZml4IHBrZ2NvbmZpZywgbGlidG9vbCBhbmQgcHJsIGZpbGVzCisgIHNlZCAtaSAtZSAncyNJL3Vzci9pbmNsdWRlI0lpbmNsdWRlZGlyfSNnJyBcIAorICAgIC1lICdzI0lpbiNJJHtpbiNnJyBcCisgICAgJHtEfSR7bGliZGlyfS8qLmxhICR7RH0ke2xpYmRpcn0vKi5wcmwgJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCisgICMgUVQgYWJ1c2VzICRpbmNsdWRlZGlyIHRvIHBvaW50IHRvIGl0cyBoZWFkZXJzLCB3aGljaCBicmVha3MgcGtnY29uZmlnIHN5c3Jvb3QsIHNvCisgICMgbWFudWFsbHkgZml4IGl0IHVwIGhlcmU6CisgIGZvciBwYyBpbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjIDsgZG8KKyAgICBzZWQgLWkgLWUgInM6cHJlZml4fWluY2x1ZGUvJHtRVF9CQVNFX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYyk6cHJlZml4fS9pbmNsdWRlOiIgXAorICAgICAgLWUgInMsQ2ZsYWdzOiAsQ2ZsYWdzOiAtSVB7aW5jbHVkZWRpcn0vJHtRVF9CQVNFX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYykgLCIgXAorICAgICAgLWUgJ3M6SVB7OkkkezpnJyAkcGMKKyAgZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZV80LjguNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWVfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiNWU2OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWVfNC44LjcuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHF0NC14MTEtZnJlZS5pbmMKK3JlcXVpcmUgcXQ0LSR7UFZ9LmluYworCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FybSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIiIsICIgLW5vLW5lb24iICxkKX0iCisKK1FUX0NPTkZJR19GTEFHUyArPSAiIFwKKyAtbm8tZW1iZWRkZWQgXAorIC14cmFuZHIgXAorIC14MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNThlNTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYwpAQCAtMCwwICsxLDM5MSBAQAoraW5oZXJpdCBxbWFrZV9iYXNlCisKK0RFUEVORFMgKz0gInF0NC10b29scy1uYXRpdmUgZnJlZXR5cGUganBlZyBsaWJwbmcgemxpYiBkYnVzIG9wZW5zc2wgZ2xpYi0yLjAgc3FsaXRlMyB0aWZmIGljdSIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSIKKworcmVxdWlyZSBxdDRfYXJjaC5pbmMKKworUVRfRElTVFJPX0ZMQUdTID89ICItbm8tYWNjZXNzaWJpbGl0eSAtbm8tc20iCitRVF9ESVNUUk9fRkxBR1NfbGludXhzdGRiYXNlID0gIi1zbSIKKworUVRfU1FMX0RSSVZFUl9GTEFHUyA/PSAiLW5vLXNxbC1pYmFzZSAtbm8tc3FsLW15c3FsIC1uby1zcWwtcHNxbCAtbm8tc3FsLW9kYmMgLW5vLXNxbC1zcWxpdGUyIC1wbHVnaW4tc3FsLXNxbGl0ZSAtc3lzdGVtLXNxbGl0ZSIKKworUVRfR0xGTEFHUyA/PSAiIgorCisgIAorUVRfUVQzU1VQUE9SVCA/PSAiLXF0M3N1cHBvcnQiCitRVF9YTUwgPz0gIi14bWxwYXR0ZXJucyIKK1FUX1dFQktJVCA/PSAiLXdlYmtpdCIKK1FUX1BIT05PTiA/PSAiLW5vLXBob25vbiIKK1FUX0RCVVMgPz0gIi1xZGJ1cyIKK1FUX01VTFRJTUVESUEgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICctcHVsc2VhdWRpbycsICctbm8tcHVsc2VhdWRpbycsIGQpfSIKKyAKK1FUX0NPTkZJR19GTEFHUyArPSAiLXJlbGVhc2UgLW5vLWN1cHMgLXJlZHVjZS1yZWxvY2F0aW9ucyBcCisgICAgICAgICAgICAgICAgICAgIC1zaGFyZWQgLW5vLW5hcy1zb3VuZCAtbm8tbmlzIFwKKyAgICAgICAgICAgICAgICAgICAgLXN5c3RlbS1saWJqcGVnIC1zeXN0ZW0tbGlicG5nIC1zeXN0ZW0tbGlidGlmZiAtc3lzdGVtLXpsaWIgXAorICAgICAgICAgICAgICAgICAgICAtbm8tcGNoIC1zdGwgLWdsaWIgLWljdSBcCisgICAgICAgICAgICAgICAgICAgIC1uby1ycGF0aCAtc2lsZW50IFwKKwkJICAgIC1EIFVTRV9RVE1VTFRJTUVESUE9MSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfREJVU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1FUM1NVUFBPUlR9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9XRUJLSVR9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9QSE9OT059IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9YTUx9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9NVUxUSU1FRElBfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfU1FMX0RSSVZFUl9GTEFHU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX0RJU1RST19GTEFHU30gXAorICAgICAgICAgICAgICAgICAgICAke1FUX0dMRkxBR1N9IgorCitFWFRSQV9PRU1BS0UgPSAiLWUiCisKK0VYVFJBX0VOViA9ICdRTUFLRT0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiAtYWZ0ZXIgXAorICAgICAgICAgICAgIElOQ1BBVEgrPSR7U1RBR0lOR19JTkNESVJ9L2ZyZWV0eXBlMiBMSUJTKz0tTCR7U1RBR0lOR19MSUJESVJ9IiBcCisgICAgICAgICAgICAgUU1BS0VTUEVDPSIke1FNQUtFU1BFQ30iIExJTks9IiR7Q1hYfSAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0iIFwKKyAgICAgICAgICAgICBBUj0iJHtUQVJHRVRfUFJFRklYfWFyIGNxcyIgXAorICAgICAgICAgICAgIE1PQz0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L21vYzQiIFVJQz0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3VpYzQiIE1BS0U9Im1ha2UgLWUiJworCitleHBvcnQgUVRfQ09ORl9QQVRIPSIke1dPUktESVJ9L3F0LmNvbmYiCisKKyMgTGlicmFyeSBwYWNrYWdlcworUVRfTElCX05BTUVTID0gIlF0M1N1cHBvcnQgUXRBc3Npc3RhbnRDbGllbnQgUXRDTHVjZW5lIFF0Q29yZSBRdERCdXMgUXREZXNpZ25lciBRdERlc2lnbmVyQ29tcG9uZW50cyBRdEd1aSBRdEhlbHAgUXROZXR3b3JrIFF0T3BlbkdMIFF0U2NyaXB0IFF0U2NyaXB0VG9vbHMgUXRTcWwgUXRTdmcgUXRUZXN0IFF0VWlUb29scyBRdFdlYktpdCBRdFhtbCBRdFhtbFBhdHRlcm5zIHBob25vbiBRdE11bHRpbWVkaWEgUXRPcGVuVkcgUXRNZWRpYVNlcnZpY2VzIFF0RGVjbGFyYXRpdmUiCisKK1FUX0VYVFJBX0xJQlMgPSAicHZyUVdTV1NFR0wiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgbGliX3BhY2thZ2VzID0gW10KKyAgICBkZXZfcGFja2FnZXMgPSBbXQorICAgIGRiZ19wYWNrYWdlcyA9IFtdCisgICAgc3RhdGljZGV2X3BhY2thZ2VzID0gW10KKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiUVRfTElCX05BTUVTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGtnID0gZC5nZXRWYXIoIlFUX0JBU0VfTElCIiwgVHJ1ZSkgKyBuYW1lLmxvd2VyKCkucmVwbGFjZSgicXQiLCAiIikucmVwbGFjZSgiXyIsICItIikgKyAiNCIKKyAgICAgICAgIyBOT1RFOiB0aGUgaGVhZGVycyBmb3IgUXRBc3Npc3RhbnRDbGllbnQgYXJlIGRpZmZlcmVudAorICAgICAgICBpbmNuYW1lID0gbmFtZS5yZXBsYWNlKCJRdEFzc2lzdGFudENsaWVudCIsICJRdEFzc2lzdGFudCIpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5zby4qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGV2IiAlIHBrZywgIiIiJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0ucHJsCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5sYQorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uc28KKyAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vJShpbmNuYW1lKXMKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvJShuYW1lKXMke1FUX0xJQklORklYfS5wYyIiIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtc3RhdGljZGV2IiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LmEiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kYmciICUgcGtnLCAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LnNvKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIlJSRUNPTU1FTkRTXyVzLWRiZyIgJSBwa2csICIke1BOfS1kYmciKQorICAgICAgICBsaWJfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtZGV2IiAlIHBrZykKKyAgICAgICAgZGJnX3BhY2thZ2VzLmFwcGVuZCgiJXMtZGJnIiAlIHBrZykKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIHBrZykKKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiT1RIRVJfUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkYmdfcGFja2FnZXMuYXBwZW5kKCIlcy1kYmciICUgbmFtZSkKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIG5hbWUpCisKKyAgICBmb3IgbmFtZSBpbiBkLmdldFZhcigiUVRfRVhUUkFfTElCUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCJRVF9CQVNFX0xJQiIsIFRydWUpICsgbmFtZS5sb3dlcigpLnJlcGxhY2UoInF0IiwgIiIpLnJlcGxhY2UoIl8iLCAiLSIpICsgIjQiCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcyIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMuc28uKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLXN0YXRpY2RldiIgJSBwa2csICIke2xpYmRpcn0vbGliJShuYW1lKXMuYSIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRldiIgJSBwa2csICIiIiR7bGliZGlyfS9saWIlKG5hbWUpcy5wcmwKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIlKG5hbWUpcy5sYQorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzLnNvCisgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9LyUoaW5jbmFtZSlzCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnLyUobmFtZSlzLnBjIiIiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kYmciICUgcGtnLCAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWIlKG5hbWUpcy5zbyoiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU18lcy1kYmciICUgcGtnLCAiJHtQTn0tZGJnIikKKyAgICAgICAgbGliX3BhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGRldl9wYWNrYWdlcy5hcHBlbmQoIiVzLWRldiIgJSBwa2cpCisgICAgICAgIGRiZ19wYWNrYWdlcy5hcHBlbmQoIiVzLWRiZyIgJSBwa2cpCisgICAgICAgIHN0YXRpY2Rldl9wYWNrYWdlcy5hcHBlbmQoIiVzLXN0YXRpY2RldiIgJSBwa2cpCisKKyAgICBkLnNldFZhcigiTElCX1BBQ0tBR0VTIiwgIiAiLmpvaW4obGliX3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiREVWX1BBQ0tBR0VTIiwgIiAiLmpvaW4oZGV2X3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiREJHX1BBQ0tBR0VTIiwgIiAiLmpvaW4oZGJnX3BhY2thZ2VzKSkKKyAgICBkLnNldFZhcigiU1RBVElDREVWX1BBQ0tBR0VTIiwgIiAiLmpvaW4oc3RhdGljZGV2X3BhY2thZ2VzKSkKK30KKworT1RIRVJfUEFDS0FHRVMgPSAiXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS10b29scyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWNvbW1vbiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRidXMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlc2lnbmVyIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LW1ha2VxcGYgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1ta3NwZWNzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0teG1scGF0dGVybnMgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xdDN0bzQgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyIKKworI1dlIHByZXBlbmQgc28gJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyBjb21lcyBiZWZvcmUgJHtQTn0tZG9jLHNvIHRoZSBwYWNrYWdpbmcgb2YgRklMRVNfIGdldCBkb25lIGJlZm9yZS4KK1BBQ0tBR0VTID0rICIke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIgorUEFDS0FHRVMgKz0gIiBcCisgICAgICAgICAgICAgJHtMSUJfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke0RFVl9QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7REJHX1BBQ0tBR0VTfSBcCisgICAgICAgICAgICAgJHtTVEFUSUNERVZfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke09USEVSX1BBQ0tBR0VTfSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tLiogXiR7UVRfQkFTRV9OQU1FfS10cmFuc2xhdGlvbi0uKiBeJHtRVF9CQVNFX05BTUV9LXBocmFzZWJvb2stLioiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitGSUxFU18ke1BOfSAgICAgPSAiIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vUXQvKiIKK0ZJTEVTXyR7UE59LWRiZyA9ICIvdXNyL3NyYy9kZWJ1Zy8iCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jID0gIiR7ZG9jZGlyfS8ke1FUX0RJUl9OQU1FfS9xY2gvcXQucWNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtMSUJfUEFDS0FHRVN9ICR7T1RIRVJfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtQTn0tZGV2ID0gIiR7REVWX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke0RCR19QQUNLQUdFU30iCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTElCfWNvcmU0X2FwcGVuZF9saWJjLWdsaWJjID0gIiBnbGliYy1nY29udi11dGYtMTYiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWV4YW1wbGVzICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1wbHVnaW4taW1hZ2Vmb3JtYXQtanBlZyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zIgorUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWRvYyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MiCisKK1JQUk9WSURFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgKz0gInFtYWtlMiIKK1JSRVBMQUNFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgKz0gInFtYWtlMiIKKworRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdHRyYWNlcmVwbGF5ICR7YmluZGlyfS9xZG9jKiAke2JpbmRpcn0vcW1ha2UgJHtiaW5kaXJ9L21vYyAke2JpbmRpcn0vdWljKiAke2JpbmRpcn0vcmNjIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzLWRiZyAgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcXR0cmFjZXJlcGxheSAke2JpbmRpcn0vLmRlYnVnL3Fkb2MqICR7YmluZGlyfS8uZGVidWcvcW1ha2UgJHtiaW5kaXJ9Ly5kZWJ1Zy91aWMqICR7YmluZGlyfS8uZGVidWcvbW9jICR7YmluZGlyfS8uZGVidWcvcmNjIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudCAgICAgICAgICAgID0gIiR7YmluZGlyfS8qYXNzaXN0YW50KiAke2JpbmRpcn0vcWNvbGxlY3Rpb25nZW5lcmF0b3IgJHtiaW5kaXJ9L3FoZWxwY29udmVydGVyICR7YmluZGlyfS9xaGVscGdlbmVyYXRvciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1hc3Npc3RhbnQtZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLyphc3Npc3RhbnQqICR7YmluZGlyfS8uZGVidWcvcWNvbGxlY3Rpb25nZW5lcmF0b3IgJHtiaW5kaXJ9Ly5kZWJ1Zy9xaGVscGNvbnZlcnRlciAke2JpbmRpcn0vLmRlYnVnL3FoZWxwZ2VuZXJhdG9yIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWNvbW1vbiAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdGNvbmZpZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1jb21tb24tZGJnICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0Y29uZmlnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRidXMgICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xZGJ1cyAke2JpbmRpcn0vcWRidXN4bWwyY3BwICR7YmluZGlyfS9xZGJ1c2NwcDJ4bWwgJHtiaW5kaXJ9L3FkYnVzdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRidXMtZGJnICAgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcWRidXMgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c3htbDJjcHAgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c2NwcDJ4bWwgJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1c3ZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcyAgICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcXRkZW1vKiAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1zdGF0aWNkZXYgICAgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3Mvc2hhcmVkL2xpYmRlbW9fc2hhcmVkLmEiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGVtb3MtZGJnICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdGRlbW8qICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8uZGVidWcvKiAgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyovLmRlYnVnICAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKi8qLy5kZWJ1ZyAgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLyovKi8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZXNpZ25lciAgICAgICAgICAgICA9ICIke2JpbmRpcn0vKmRlc2lnbmVyKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZXNpZ25lci1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLypkZXNpZ25lcioiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtc3RhdGljZGV2ICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzL3Rvb2xzL3BsdWdhbmRwYWludC9wbHVnaW5zL2xpYnBucF9iYXNpY3Rvb2xzLmEiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtZGJnICAgICAgICAgPSAiJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzLyovKi8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8qLyovKi8uZGVidWcgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzL2RlY2xhcmF0aXZlLyovKi8qLyovKi8uZGVidWcvKiAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvZGVjbGFyYXRpdmUvKi8qLyovKi8uZGVidWcvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdCAgICAgICAgICAgICA9ICIke2JpbmRpcn0vKmxpbmd1aXN0KiAke2JpbmRpcn0vbHJlbGVhc2UgJHtiaW5kaXJ9L2x1cGRhdGUgJHtiaW5kaXJ9L2xjb252ZXJ0ICR7YmluZGlyfS9xbTJ0cyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1saW5ndWlzdC1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnLypsaW5ndWlzdCogJHtiaW5kaXJ9Ly5kZWJ1Zy9scmVsZWFzZSAke2JpbmRpcn0vLmRlYnVnL2x1cGRhdGUgJHtiaW5kaXJ9Ly5kZWJ1Zy9sY29udmVydCAke2JpbmRpcn0vLmRlYnVnL3FtMnRzIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXBpeGVsdG9vbCAgICAgICAgICAgID0gIiR7YmluZGlyfS9waXhlbHRvb2wiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sLWRiZyAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9waXhlbHRvb2wiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcXQzdG80ICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0M3RvNCAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3EzcG9ydGluZy54bWwiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcXQzdG80LWRiZyAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdDN0bzQiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sdmlld2VyICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3FtbHZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXItZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3FtbHZpZXdlciIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1tYWtlcXBmICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vbWFrZXFwZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1tYWtlcXBmLWRiZyAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL21ha2VxcGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tbWtzcGVjcyAgICAgICAgICAgICAgPSAiJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLyogJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9lbnZpcm9ubWVudC1zZXR1cCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS14bWxwYXR0ZXJucyAgICAgICAgICA9ICIke2JpbmRpcn0veG1scGF0dGVybnMqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXhtbHBhdHRlcm5zLWRiZyAgICAgID0gIiR7YmluZGlyfS8uZGVidWcveG1scGF0dGVybnMqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zICAgICAgICAgID0gIiR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyogJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvcW1sdG9vbGluZy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zLWRiZyAgICAgID0gIiR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyovKi8qLy5kZWJ1Zy8qICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9pbXBvcnRzLyovLmRlYnVnICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zL3FtbHRvb2xpbmcvLmRlYnVnIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH0ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgICAgICArPSAibGliZGlyIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH0ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMtZGJnICArPSAibGliZGlyIgorCisjIExpY2Vuc2Ugb3B0aW9ucywgdG8gYmUgc2V0IGJ5IHRoZSByZWNpcGUgaWYgZGlmZmVyZW50IHZhbHVlcyBhcmUgbmVlZGVkCitRVF9MSUNFTlNFX0ZJTEUgPz0gIiIKK1FUX0xJQ0VOU0VfRkxBR1MgPz0gIi1vcGVuc291cmNlIgorCitkb19jb25maWd1cmUoKSB7CisJdW5zZXQgUU1BS0VTUEVDCisJdW5zZXQgUVRESVIKKworCXNldF9hcmNoCisJc2V0X2VuZGlhbgorCisJaWYgWyAhIC1lIGJpbi9xbWFrZSBdOyB0aGVuCisJCWxuIC1zZiAke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIGJpbi9xbWFrZQorCWZpCisKKwlpZiBbICEgLWUgbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIF07IHRoZW4KKwkJbG4gLXNmIGxpbnV4LWcrKyBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysKKwlmaQorCisJaWYgWyAtZiBta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mIF0gOyB0aGVuCisJCSMgbWtzcGVjcyB3ZXJlIHJlZmFjdG9yZWQgZm9yIDQuOC4wCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgbWtzcGVjcy9jb21tb24vZysrLXVuaXguY29uZgorCWVsc2UKKwkJY3AgLWYgJHtXT1JLRElSfS9nKysuY29uZiBta3NwZWNzL2NvbW1vbi9nKysuY29uZgorCWZpCisJY3AgLWYgJHtXT1JLRElSfS9saW51eC5jb25mIG1rc3BlY3MvY29tbW9uLworCisJZWNobyAiW1BhdGhzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+ICRRVF9DT05GX1BBVEgKKwllY2hvICJQcmVmaXg9JHtwcmVmaXh9IiAgICAgICAgICAgICAgICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkRvY3VtZW50YXRpb249JHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9IiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiSGVhZGVycz0ke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9IiAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJMaWJyYXJpZXM9JHtsaWJkaXJ9IiAgICAgICAgICAgICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkJpbmFyaWVzPSR7YmluZGlyfSIgICAgICAgICAgICAgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiUGx1Z2lucz0ke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkltcG9ydHM9JHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMiID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJEYXRhPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0iICAgICAgICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlRyYW5zbGF0aW9ucz0ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3RyYW5zbGF0aW9ucyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlNldHRpbmdzPSR7c3lzY29uZmRpcn0vJHtRVF9ESVJfTkFNRX0iICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRXhhbXBsZXM9JHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2V4YW1wbGVzIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRGVtb3M9JHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zIiAgID4+ICRRVF9DT05GX1BBVEgKKworCSR7RVhUUkFfUU1BS0VfTVVOR0V9fHwgdHJ1ZQorCisJZWNobyB5ZXMgfCBRVF9MSUNFTlNFX0ZJTEU9IiR7UVRfTElDRU5TRV9GSUxFfSIgLi9jb25maWd1cmUgLXYgXAorCQkJLXByZWZpeCAke3ByZWZpeH0gXAorCQkJLWJpbmRpciAke2JpbmRpcn0gXAorCQkJLWxpYmRpciAke2xpYmRpcn0gXAorCQkJLWRhdGFkaXIgJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktc3lzY29uZmRpciAke3N5c2NvbmZkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1kb2NkaXIgJHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1oZWFkZXJkaXIgJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfSBcCisJCQktcGx1Z2luZGlyICR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zIFwKKwkJCS1pbXBvcnRkaXIgJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMgXAorCQkJLXRyYW5zbGF0aW9uZGlyICR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vdHJhbnNsYXRpb25zIFwKKwkJCS1leGFtcGxlc2RpciAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMgXAorCQkJLWRlbW9zZGlyICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcyBcCisJCQktcGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisJCQkteHBsYXRmb3JtICR7VEFSR0VUX09TfS1vZS1nKysgXAorCQkJJHtRVF9FTkRJQU59IFwKKwkJCS1jcm9zc2FyY2ggJHtRVF9BUkNIfSBcCisJCQkke1FUX0xJQ0VOU0VfRkxBR1N9IFwKKwkJCSR7UVRfQ09ORklHX0ZMQUdTfSAtbm8tZmFzdCBcCisJCQktTCR7U1RBR0lOR19MSUJESVJ9IC1JJHtTVEFHSU5HX0lOQ0RJUn0gXAorCQkJLUkke1NUQUdJTkdfSU5DRElSfS9mcmVldHlwZTIKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAjIEZpeHVwIG1pc3Npbmcgd3NlZ2wgaGVhZGVyIGluIHNvbWUgU0dYIFNES3MKKyAgICBpZiAhIFsgLWUgJHtTVEFHSU5HX0lOQ0RJUn0vd3NlZ2wuaCBdIDsgdGhlbgorICAgICAgICBjcCBzcmMvM3JkcGFydHkvcG93ZXJ2ci93c2VnbC5oIHNyYy9wbHVnaW5zL2dmeGRyaXZlcnMvcG93ZXJ2ci9RV1NXU0VHTC8KKyAgICBmaQorCisgICAgdW5zZXQgQ0ZMQUdTIENYWEZMQUdTCisKKyAgICBvZV9ydW5tYWtlICR7RVhUUkFfRU5WfQorCisgICAgIyBCdWlsZCB0YXJnZXQgcW1ha2UKKyAgICBleHBvcnQgUU1BS0VTUEVDPSIke1N9L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKKyAgICBjZCAke1N9L3FtYWtlCisgICAgJHtPRV9RTUFLRV9RTUFLRX0KKyAgICBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisgICAgY2QgJHtTfQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICB0cmFuc2xhdGlvbl9kaXIgPSBkLmV4cGFuZCgnJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS90cmFuc2xhdGlvbnMvJykKKyAgICB0cmFuc2xhdGlvbl9uYW1lID0gZC5leHBhbmQoJyR7UVRfQkFTRV9OQU1FfS10cmFuc2xhdGlvbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgdHJhbnNsYXRpb25fZGlyLCAnXihhc3Npc3RhbnR8ZGVzaWduZXJ8bGluZ3Vpc3R8cXR8cXRjb25maWd8cXZmYnxxdHNjcmlwdClfKC4qKVwucW0kJywgdHJhbnNsYXRpb25fbmFtZSwgJyR7UE59IHRyYW5zbGF0aW9uIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycgKQorIAorICAgIHBocmFzZWJvb2tfZGlyID0gZC5leHBhbmQoJyR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vcGhyYXNlYm9va3MvJykKKyAgICBwaHJhc2Vib29rX25hbWUgPSBkLmV4cGFuZCgnJHtRVF9CQVNFX05BTUV9LXBocmFzZWJvb2stJXMnKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzJXMiICUgKGQuZXhwYW5kKCcke0R9JyksIHBocmFzZWJvb2tfZGlyKSk6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBocmFzZWJvb2tfZGlyLCAnXiguKilcLnFwaCQnLCBwaHJhc2Vib29rX25hbWUsICcke1BOfSBwaHJhc2Vib29rIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycgKQorICAgIGVsc2U6CisgICAgICAgIGJiLm5vdGUoIlRoZSBwYXRoIGRvZXMgbm90IGV4aXN0OiIsIGQuZXhwYW5kKCcke0R9JyksIHBocmFzZWJvb2tfZGlyKQorIAorICAgICMgUGFja2FnZSBhbGwgdGhlIHBsdWdpbnMgYW5kIHRoZWlyIC1kYmcgdmVyc2lvbiBhbmQgY3JlYXRlIGEgbWV0YSBwYWNrYWdlCisgICAgZGVmIHF0b3BpYV9zcGxpdChwYXRoLCBuYW1lLCBnbG9iKToKKyAgICAgICAgIiIiCisgICAgICAgIFNwbGl0IHRoZSBwYWNrYWdlIGludG8gYSBub3JtYWwgYW5kIC1kYmcgcGFja2FnZSBhbmQgdGhlbiBhZGQgdGhlCisgICAgICAgIG5ldyBwYWNrYWdlcyB0byB0aGUgbWV0YSBwYWNrYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8lcy8nICUgcGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcyVzIiAlIChkLmV4cGFuZCgnJHtEfScpLCBwbHVnaW5fZGlyKSk6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGUgcGF0aCBkb2VzIG5vdCBleGlzdDoiLCBkLmV4cGFuZCgnJHtEfScpLCBwbHVnaW5fZGlyKQorICAgICAgICAgICAgcmV0dXJuCisgCisgICAgICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UVRfQkFTRV9OQU1FfS1wbHVnaW4tJXMtJSVzJyAlIG5hbWUpCisgICAgICAgIGRldl9wYWNrYWdlcyA9IFtdCisgICAgICAgIGRldl9ob29rID0gbGFtYmRhIGZpbGUscGtnLGIsYyxkOmRldl9wYWNrYWdlcy5hcHBlbmQoKGZpbGUscGtnKSkKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgZ2xvYiwgcGx1Z2luX25hbWUsICcke1BOfSAlcyBmb3IgJSVzJyAlIG5hbWUsIGV4dHJhX2RlcGVuZHM9JycsIGhvb2s9ZGV2X2hvb2spCisgICAgICAgICMgQ3JlYXRlIGEgLWRiZyBwYWNrYWdlIGFzIHdlbGwKKyAgICAgICAgcGx1Z2luX2Rpcl9kYmcgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvJXMvLmRlYnVnJyAlIHBhdGgpCisgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgRmFsc2UpCisgICAgICAgIGZvciAoZmlsZSxwYWNrYWdlKSBpbiBkZXZfcGFja2FnZXM6CisgICAgICAgICAgICBwYWNrYWdlcyA9ICIlcyAlcy1kYmciICUgKHBhY2thZ2VzLCBwYWNrYWdlKQorICAgICAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHBsdWdpbl9kaXJfZGJnLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKQorICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRiZyIgJSBwYWNrYWdlLCBmaWxlX25hbWUpCisgICAgICAgICAgICBkLnNldFZhcigiREVTQ1JJUFRJT05fJXMtZGJnIiAlIHBhY2thZ2UsICIke1BOfSAlcyBmb3IgJXMiICUgKG5hbWUsIHBhY2thZ2UpKQorCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsIHBhY2thZ2VzKQorCisgICAgcXRvcGlhX3NwbGl0KCdhY2Nlc3NpYmxlJywgICAgJ2FjY2Vzc2libGUnLCAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnY29kZWNzJywgICAgICAgICdjb2RlYycsICAgICAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2RlY29yYXRpb25zJywgICAnZGVjb3JhdGlvbicsICAgICdebGlicWRlY29yYXRpb24oLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZGVzaWduZXInLCAgICAgICdkZXNpZ25lcicsICAgICAgJ15saWIoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZ2Z4ZHJpdmVycycsICAgICdnZnhkcml2ZXInLCAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2dyYXBoaWNzc3lzdGVtcycsJ2dyYXBoaWNzc3lzdGVtcycsICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdrYmRkcml2ZXJzJywgICAgJ2tiZGRyaXZlcicsICAgICAnXmxpYnEoLiopa2JkZHJpdmVyXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnbW91c2Vkcml2ZXJzJywgICdtb3VzZWRyaXZlcicsICAgJ15saWJxKC4qKW1vdXNlZHJpdmVyXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnaWNvbmVuZ2luZXMnLCAgICdpY29uZW5naW5lJywgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2ltYWdlZm9ybWF0cycsICAnaW1hZ2Vmb3JtYXQnLCAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdpbnB1dG1ldGhvZHMnLCAgJ2lucHV0bWV0aG9kJywgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc3FsZHJpdmVycycsICAgICdzcWxkcml2ZXInLCAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3NjcmlwdCcsICAgICAgICAnc2NyaXB0JywgICAgICAgICdebGlicXRzY3JpcHQoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc3R5bGVzJywgICAgICAgICdzdHlsZScsICAgICAgICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ3Bob25vbl9iYWNrZW5kJywncGhvbm9uLWJhY2tlbmQnLCdebGlicGhvbm9uXyguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdiZWFyZXInLCAgICAgICAgJ2JlYXJlcicsICAgICAgICAnXmxpYnEoLiopYmVhcmVyXC5zbyQnKQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMX1JPT1Q9JHtEfQorCisJIyBJbnN0YWxsIGEgcHJvcGVyIHRhcmdldCB2ZXJzaW9uIG9mIHFtYWtlCisJcm0gJHtEfS8ke2JpbmRpcn0vcW1ha2UKKwlpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlMiAke0R9JHtiaW5kaXJ9L3FtYWtlCisKKwkjIGZpeCBwa2djb25maWcsIGxpYnRvb2wgYW5kIHBybCBmaWxlcworCXNlZCAtaSAtZSAncyMtTCR7U30vbGliL1w/IyNnJyBcCisJCQktZSAncyMtTCR7U1RBR0lOR19MSUJESVJ9L1w/IyNnJyBcCisJCQktZSAncyNTVEFHSU5HX0xJQkRJUn0jbGliZGlyfScjZyBcCisJCQktZSAncyMtTCR7bGliZGlyfS9cPyMjZycgXAorCQkJLWUgcyMnJChPRV9RTUFLRV9MSUJTX1gxMSknIyIke09FX1FNQUtFX0xJQlNfWDExfSIjZyBcCisJCQktZSAncyMiIC1XbCwtcnBhdGgtbGluaywke1N9L2xpYi9cPyIjI2cnIFwKKwkJCS1lICdzIyIgLVdsLC1ycGF0aC1saW5rLCR7bGliZGlyfS9cPyIjI2cnIFwKKwkJCS1lICdzI0lpbiNJJHtpbiNnJyBcCisJCQktZSAncyMtTFwuXC4vXC5cLi9XZWJDb3JlL3JlbGVhc2Vcc1wrLUxcLlwuL1wuXC4vSmF2YVNjcmlwdENvcmUvcmVsZWFzZVxzXCstbHdlYmNvcmUjI2cnIFwKKwkJCS1lICdzIy1sanNjb3JlIyNnJyBcCisJCQkke0R9JHtsaWJkaXJ9LyoubGEgJHtEfSR7bGliZGlyfS8qLnBybCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisKKwkjIGZpeCBwa2djb25maWcgZmlsZXMKKwlzZWQgLWkgLWUgcyMibW9jX2xvY2F0aW9uPS4qJCIjIm1vY19sb2NhdGlvbj0ke2JpbmRpcn0vbW9jNCIjIFwKKwkJCS1lIHMjInVpY19sb2NhdGlvbj0uKiQiIyJ1aWNfbG9jYXRpb249JHtiaW5kaXJ9L3VpYzQiIyBcCisJCQkke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisJZm9yIG5hbWUgaW4gJHtRVF9MSUJfTkFNRVN9OyBkbworCQlzZWQgLWkgLWUgL1JlcXVpcmVzL3MjIiR7bmFtZX0iIyIke25hbWV9JHtRVF9MSUJJTkZJWH0iI2cgJHtEfSR7bGliZGlyfS9wa2djb25maWcvKi5wYworCWRvbmUKKworCSMgUVQgYWJ1c2VzICRpbmNsdWRlZGlyIHRvIHBvaW50IHRvIGl0cyBoZWFkZXJzLCB3aGljaCBicmVha3MgcGtnY29uZmlnIHN5c3Jvb3QsIHNvIG1hbnVhbGx5IGZpeCBpdCB1cCBoZXJlOgorCWZvciBwYyBpbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjIDsgZG8KKwkJc2VkIC1pIC1lICJzOnByZWZpeH0vaW5jbHVkZS8ke1FUX0RJUl9OQU1FfS8kKGJhc2VuYW1lICRwYyAucGMpOnByZWZpeH0vaW5jbHVkZToiIFwKKwkJCQktZSAnczpJUHs6SSR7OmcnICRwYworCWRvbmUKKworCSNBcHBlbmQgYW4gRSB0byB0aGUgcXRkZW1vIGZpbGUKKwlpZiBbIC1uICIke1FUX0xJQklORklYfSIgXSA7IHRoZW4KKwkJWyAtZiAke0R9JHtiaW5kaXJ9L3F0ZGVtbyBdICYmIG12ICR7RH0ke2JpbmRpcn0vcXRkZW1vICR7RH0ke2JpbmRpcn0vcXRkZW1vJHtRVF9MSUJJTkZJWH0KKwlmaQorCisJc2NyaXB0PSIke0R9LyR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vZW52aXJvbm1lbnQtc2V0dXAiCisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRVF9ESVJfTkFNRT0ke1FUX0RJUl9OQU1FfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRVF9MSUJJTkZJWD0ke1FUX0xJQklORklYfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9BUj1hcicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DQz1nY2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYPWcrKycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSU5LPWcrKycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQ9JHtsaWJkaXJ9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVD0ke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX01PQz0ke2JpbmRpcn0vbW9jJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQz0ke2JpbmRpcn0vdWljJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQzM9JHtiaW5kaXJ9L3VpYzMnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUkNDPSR7YmluZGlyfS9yY2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNDUFAyWE1MPSR7YmluZGlyfS9xZGJ1c2NwcDJ4bWwnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQPSR7YmluZGlyfS9xZGJ1c3htbDJjcHAnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy9xY29uZmlnLnByaScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBRTUFLRVNQRUM9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL2xpbnV4LWcrKycgPj4gJHNjcmlwdAorCWNobW9kIDA3NTUgJHNjcmlwdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NF9hcmNoLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDRfYXJjaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0YzI4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDRfYXJjaC5pbmMKQEAgLTAsMCArMSwyMiBAQAoraW5oZXJpdCBzaXRlaW5mbworCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworc2V0X2FyY2goKSB7CisgICBjYXNlICR7VEFSR0VUX0FSQ0h9IGluCisgICAgICAgYWFyY2g2NCopIFFUX0FSQ0g9YWFyY2g2NCA7OworICAgICAgIGFybSopICAgICBRVF9BUkNIPWFybSA7OworICAgICAgIGkqODYqKSAgICBRVF9BUkNIPWkzODYgOzsKKyAgICAgICBtaXBzKikgICAgUVRfQVJDSD1taXBzIDs7CisgICAgICAgcG93ZXJwYyopIFFUX0FSQ0g9cG93ZXJwYyA7OworICAgICAgIHg4Nl82NCopICBRVF9BUkNIPXg4Nl82NCA7OworICAgZXNhYworfQorCitzZXRfZW5kaWFuKCkgeworICAgIGlmIFsgJHtTSVRFSU5GT19FTkRJQU5ORVNTfSA9ICJsZSIgXSA7IHRoZW4KKyAgICAgICAgUVRfRU5ESUFOPSItbGl0dGxlLWVuZGlhbiIKKyAgICBlbGlmIFsgJHtTSVRFSU5GT19FTkRJQU5ORVNTfSA9ICJiZSIgXSA7IHRoZW4KKyAgICAgICAgUVRfRU5ESUFOPSItYmlnLWVuZGlhbiIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvUkVBRE1FIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNzU1OGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9SRUFETUUKQEAgLTAsMCArMSwxMyBAQAorVGhlIHJlY2lwZXMtcnQgcmVjaXBlcyBwcm92aWRlIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nCit0aGUgUFJFRU1QVF9SVCBrZXJuZWwuIFRoZSBjb3JlLWltYWdlLXJ0Ki5iYiBpbWFnZXMgYXJlIG1pbmltYWwgaW1hZ2VzIHdpdGgKK2EgY291cGxlIGV4dHJhIHBhY2thZ2VzLCBpbmNsdWRpbmcgcnQtdGVzdHMuIEluIG9yZGVyIHRvIGJ1aWxkIHRoZSBpbWFnZSB3aXRoCit0aGUgbGludXgteW9jdG8tcnQga2VybmVsLCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIKK2xvY2FsLmNvbmYsIGJibGF5ZXJzLmNvbmYsIG9yIHlvdXIgJE1BQ0hJTkUuY29uZi4KKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvLXJ0IgorCitJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbmV3IEJTUCB3aGljaCBzaG91bGQgdXNlIGxpbnV4LXlvY3RvLXJ0IGJ5IGRlZmF1bHQsCit1c2UgdGhlIGxpbmUgYWJvdmUgaW4gdGhlICRNQUNISU5FLmNvbmYgaW4geW91ciBCU1AgbGF5ZXIsIGFuZCBzcGVjaWZ5IHRoZQorZm9sbG93aW5nIGluIGEgbGludXgteW9jdG8tcnQgYmJhcHBlbmQgcmVjaXBlOgorCitDT01QQVRJQkxFX01BQ0hJTkVfJE1BQ0hJTkUgPSAkTUFDSElORQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2Q1ODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC1zZGsuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSByZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgorCitERVNDUklQVElPTiA9ICJTbWFsbCBpbWFnZSBjYXBhYmxlIG9mIGJvb3RpbmcgYSBkZXZpY2Ugd2l0aCBhIHRlc3Qgc3VpdGUgYW5kIFwKK3Rvb2xzIGZvciByZWFsLXRpbWUgdXNlLiBJdCBpbmNsdWRlcyB0aGUgZnVsbCBtZXRhLXRvb2xjaGFpbiwgZGV2ZWxvcG1lbnQgXAoraGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBzdGFuZGFsb25lIFNESy4iCitERVBFTkRTID0gImxpbnV4LXlvY3RvLXJ0IgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MgdG9vbHMtc2RrIHRvb2xzLWRlYnVnIGVjbGlwc2UtZGVidWcgdG9vbHMtcHJvZmlsZSB0b29scy10ZXN0YXBwcyBkZWJ1Zy10d2Vha3MiCisKK0lNQUdFX0lOU1RBTEwgKz0gInJ0LXRlc3RzIGh3bGF0ZGV0ZWN0IGtlcm5lbC1kZXYiCisKK0xJQ0VOU0UgPSAiTUlUIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWI2ZjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QgcGx1cyBhIFwKK3JlYWwtdGltZSB0ZXN0IHN1aXRlIGFuZCB0b29scyBhcHByb3ByaWF0ZSBmb3IgcmVhbC10aW1lIHVzZS4iCitERVBFTkRTID0gImxpbnV4LXlvY3RvLXJ0IgorCitJTUFHRV9JTlNUQUxMICs9ICJydC10ZXN0cyBod2xhdGRldGVjdCIKKworTElDRU5TRSA9ICJNSVQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDEtcnQtdGVzdHMtQWxsb3ctZm9yLXVzZXItc3BlY2lmaWVkLVBZTElCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNDkzZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitNZXNzYWdlLUlkOiA8NjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MS4xMzQ3NDE5NTk3LmdpdC5kdmhhcnRAbGludXguaW50ZWwuY29tPgorRnJvbTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDExIFNlcCAyMDEyIDE1OjE5OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBydC10ZXN0czogQWxsb3cgZm9yIHVzZXItc3BlY2lmaWVkIFBZTElCCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0FsbG93IHVzZXJzIChidWlsZCBzeXN0ZW1zKSB0byBzcGVjaWZ5IFBZTElCLiBUaGlzIGFsbG93cyBmb3IgYQorY3Jvc3MtYnVpbGQtc3lzdGVtIHRvIHNwZWNpZnkgdGhlIHRhcmdldCBQWUxJQiByYXRoZXIgdGhhbiB0aGUgaG9zdAorUFlMSUIuCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorQ0M6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPgorQ0M6IEpvaG4gS2FjdXIgPGprYWN1ckByZWRoYXQuY29tPgorLS0tCisgTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAzYTgyNDA3Li42MWUyZjlmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjMsNyArMjMsNyBAQCBlbmRpZgorIENGTEFHUyA/PSAtRF9HTlVfU09VUkNFIC1XYWxsIC1Xbm8tbm9ubnVsbCAtSXNyYy9pbmNsdWRlCisgTERGTEFHUyA/PQorIAorLVBZTElCICA6PSAkKHNoZWxsIHB5dGhvbiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7ICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKCknKQorK1BZTElCICA/PSAkKHNoZWxsIHB5dGhvbiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7ICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25fbGliKCknKQorIAorIGlmbmRlZiBERUJVRworIAlDRkxBR1MJKz0gLU8yCistLSAKKzEuNy4xMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjEzNmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gYWY5M2U1ODBkMDA1YTJiYmE2ZWQzNjUyODAwM2FmNGNmNjMxYWRiOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK01lc3NhZ2UtSWQ6IDxhZjkzZTU4MGQwMDVhMmJiYTZlZDM2NTI4MDAzYWY0Y2Y2MzFhZGI4LjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitJbi1SZXBseS1UbzogPDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEuMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK1JlZmVyZW5jZXM6IDw2Njc2NTUyMmI2MzQ5NTIzNDZmMWEzYWI3ZDAwYzcyMjJhMWY5MzYxLjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitGcm9tOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgU2VwIDIwMTIgMTQ6NTE6MTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHJ0LXRlc3RzOiBCcmVhayBvdXQgaW5zdGFsbF9od2xhdGRldGVjdAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitBbGxvdyBod2xhdGRldGVjdCB0byBiZSBpbnN0YWxsZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgcmVzdCBvZiB0aGUKK3Rlc3RzLiBUaGlzIGlzIGNvbnZlbmllbnQgZm9yIGJ1aWxkIHN5c3RlbXMgdGhhdCBwYWNrYWdlIGl0IHNlcGFyYXRlbHkKK2R1ZSB0byB0aGUgcHl0aG9uIGRlcGVuZGVuY3kuCisKK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorQ0M6IENsYXJrIFdpbGxpYW1zIDx3aWxsaWFtc0ByZWRoYXQuY29tPgorQ0M6IEpvaG4gS2FjdXIgPGprYWN1ckByZWRoYXQuY29tPgorLS0tCisgTWFrZWZpbGUgfCAxOCArKysrKysrKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDYxZTJmOWYuLjYzNmU2M2IgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xMTksMjEgKzExOSwxNSBAQCBjaGFuZ2Vsb2c6CisgCWdpdCBsb2cgPkNoYW5nZUxvZworIAorIC5QSE9OWTogaW5zdGFsbAorLWluc3RhbGw6IGFsbAorK2luc3RhbGw6IGFsbCBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisgCW1rZGlyIC1wICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuZGlyKS9tYW40IgorIAlta2RpciAtcCAiJChERVNURElSKSQoc3JjZGlyKSIgIiQoREVTVERJUikkKG1hbmRpcikvbWFuOCIKKyAJY3AgJChUQVJHRVRTKSAiJChERVNURElSKSQoYmluZGlyKSIKKy0JaWYgdGVzdCAtbiAiJChQWUxJQikiIDsgdGhlbiBcCistCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorLQkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQlmaQorIAlpbnN0YWxsIC1EIC1tIDY0NCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuYyAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9iYWNrZmlyZS5jIgorIAlpbnN0YWxsIC1tIDY0NCBzcmMvYmFja2ZpcmUvTWFrZWZpbGUgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvTWFrZWZpbGUiCisgCWd6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKyAJZ3ppcCBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorIAlnemlwIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKy0JZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IgorIAlnemlwIHNyYy9wdHNlbWF0ZXN0L3B0c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wdHNlbWF0ZXN0LjguZ3oiCisgCWd6aXAgc3JjL3NpZ3dhaXR0ZXN0L3NpZ3dhaXR0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2lnd2FpdHRlc3QuOC5neiIKKyAJZ3ppcCBzcmMvc3ZzZW1hdGVzdC9zdnNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc3ZzZW1hdGVzdC44Lmd6IgorQEAgLTE0MSw2ICsxMzUsMTYgQEAgaW5zdGFsbDogYWxsCisgCWd6aXAgc3JjL2JhY2tmaXJlL3NlbmRtZS44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NlbmRtZS44Lmd6IgorIAlnemlwIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaGFja2JlbmNoLjguZ3oiCisgCisrLlBIT05ZOiBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisraW5zdGFsbF9od2xhdGRldGVjdDogaHdsYXRkZXRlY3QKKysJaWYgdGVzdCAtbiAiJChQWUxJQikiIDsgdGhlbiBcCisrCQlta2RpciAtcCAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG1hbmRpcikvbWFuOCIgOyBcCisrCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorKwkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorKwkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorKwkJZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IiA7IFwKKysJZmkKKysKKyAuUEhPTlk6IHJlbGVhc2UKKyByZWxlYXNlOiBjbGVhbiBjaGFuZ2Vsb2cKKyAJbWtkaXIgLXAgcmVsZWFzZXMKKy0tIAorMS43LjExLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzNWRkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAwN2I1ZWQ0MmQ3MDQxY2NjMDg0ODg5ZWFhOTY4MTdhYTA5N2JmNDYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDMgRmViIDIwMTUgMDM6MTA6MjUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBnemlwIGNvbW1hbmQKKworVGhlICItYyIgZG9lc24ndCB3b3JrIGluIGNvbW1hbmQgImd6aXAgZmlsZSAtYyIsIG5lZWQgdXNlICJnemlwIC1jIGZpbGUiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggMjE5YTU5MS4uYzdkMTQ3YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTE0NCw3ICsxNDQsNyBAQCBpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdAorIAkJaW5zdGFsbCAtRCAtbSA3NTUgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LnB5ICQoREVTVERJUikkKFBZTElCKS9od2xhdGRldGVjdC5weSA7IFwKKyAJCXJtIC1mICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKyAJCWxuIC1zICQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5ICIkKERFU1RESVIpJChiaW5kaXIpL2h3bGF0ZGV0ZWN0IiA7IFwKKy0JCWd6aXAgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaHdsYXRkZXRlY3QuOC5neiIgOyBcCisrCQlnemlwIC1jIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiIDsgXAorIAlmaQorIAorIC5QSE9OWTogcmVsZWFzZQorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzhlYzkyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitDdXJyZW50bHkgZ3ppcCBvbiBob3N0IGlzIHVzZWQuIElmIGhvc3QgZ3ppcCBpcyBwcm92aWRlZCBieSBwaWd6LCBpdCBmYWlscyB0bworcmVkbyBpbnN0YWxsIHRoYXQgcGlneiBjYW4ndCBoYW5kbGUgdGhlIG9wdGlvbiBhZnRlciBmaWxlIG5hbWUuIFdoZW4gcnVuOgorCitnemlwIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IC1jID4gT1VUUFVUX0ZJTEUKKworRmlsZSBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCBpcyB6aXBwZWQgaW50byBiYWNrZmlyZS40Lmd6IGJ1dCB0aGUgT1VUUFVUX0ZJTEUKK2lzIGVtcHR5LiBXaGVuIHJlcnVuIGRvX2luc3RhbGwsIGl0IHNob3dzIHdhcm5pbmc6CisKK3wgZ3ppcDogc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgZG9lcyBub3QgZXhpc3QgLS0gc2tpcHBpbmcKKworYW5kIGVtcHR5IG1hbnVhbCBnemlwIGZpbGVzIGFyZSBjcmVhdGVkOgorCiskIGZpbGUgaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW40L2JhY2tmaXJlLjQuZ3oKK2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNC9iYWNrZmlyZS40Lmd6OiBlbXB0eQorCitGaXggaXQgYnkgcHV0dGluZyBvcHRpb24gJy1jJyBiZWZvcmUgdGhlIGZpbGUgbmFtZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCistLS0gZ2l0L01ha2VmaWxlLm9yaWcJMjAxNC0xMS0xNCAxNTo0NzoyNi40MDY2Mzg0MTkgKzA4MDAKKysrKyBnaXQvTWFrZWZpbGUJMjAxNC0xMS0xNCAxNTo0Njo1My44OTA2Mzc1MzMgKzA4MDAKK0BAIC0xMjcsMTUgKzEyNywxNSBAQAorIAljcCAkKFRBUkdFVFMpICIkKERFU1RESVIpJChiaW5kaXIpIgorIAlpbnN0YWxsIC1EIC1tIDY0NCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuYyAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9iYWNrZmlyZS5jIgorIAlpbnN0YWxsIC1tIDY0NCBzcmMvYmFja2ZpcmUvTWFrZWZpbGUgIiQoREVTVERJUikkKHNyY2RpcikvYmFja2ZpcmUvTWFrZWZpbGUiCistCWd6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKy0JZ3ppcCBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorLQlnemlwIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKy0JZ3ppcCBzcmMvcHRzZW1hdGVzdC9wdHNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcHRzZW1hdGVzdC44Lmd6IgorLQlnemlwIHNyYy9zaWd3YWl0dGVzdC9zaWd3YWl0dGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NpZ3dhaXR0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3N2c2VtYXRlc3Qvc3ZzZW1hdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3N2c2VtYXRlc3QuOC5neiIKKy0JZ3ppcCBzcmMvcG1xdGVzdC9wbXF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcG1xdGVzdC44Lmd6IgorLQlnemlwIHNyYy9iYWNrZmlyZS9zZW5kbWUuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zZW5kbWUuOC5neiIKKy0JZ3ppcCBzcmMvaGFja2JlbmNoL2hhY2tiZW5jaC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2hhY2tiZW5jaC44Lmd6IgorKwlnemlwIC1jIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40ID4iJChERVNURElSKSQobWFuZGlyKS9tYW40L2JhY2tmaXJlLjQuZ3oiCisrCWd6aXAgLWMgc3JjL2N5Y2xpY3Rlc3QvY3ljbGljdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2N5Y2xpY3Rlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvcGlfdGVzdHMvcGlfc3RyZXNzLjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGlfc3RyZXNzLjguZ3oiCisrCWd6aXAgLWMgc3JjL3B0c2VtYXRlc3QvcHRzZW1hdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3B0c2VtYXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvc2lnd2FpdHRlc3Qvc2lnd2FpdHRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zaWd3YWl0dGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9zdnNlbWF0ZXN0L3N2c2VtYXRlc3QuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zdnNlbWF0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL3BtcXRlc3QvcG1xdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BtcXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvYmFja2ZpcmUvc2VuZG1lLjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2VuZG1lLjguZ3oiCisrCWd6aXAgLWMgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9oYWNrYmVuY2guOC5neiIKKyAKKyAuUEhPTlk6IGluc3RhbGxfaHdsYXRkZXRlY3QKKyBpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3ZmRmZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorY2hpbGRpbmZvX3QgaXMgYSB1bmlvbiB0aGF0IGNvbnRhaW5zIGJvdGggc2lnbmVkIChlcnJvcikgYW5kIHVuc2lnbmVkCisodGhyZWFkaWQpIG1lbWJlcnMuIFRodXMgYSBsYXJnZSB0aHJlYWRpZCBjb3VsZCBhcHBlYXIgYXMgYSBuZWdhdGl2ZSBlcnJvcgordmFsdWUsIHdoaWNoIHdpbGwgY2F1c2UgdW5leHBlY3RlZCBmYWlsdXJlcy4KKworY2hpbGRpbmZvX3Qgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYSBzdHJ1Y3QsIGJ1dCBpdCBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlCitwZXJmb3JtYW5jZS4gU28gd2Uga2VlcCBpdCBhcyBhIHVuaW9uIGJ1dCBvbmx5IGNoZWNrIGVycm9yIGFnYWluc3QgLTEuIFRoZXJlIGlzCitzdGlsbCBhIGNoYW5jZSBvZiBmYWxzZSBhbGFybSBidXQgaXQncyBzbWFsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEplc3NlIFpoYW5nIDxzZW4uemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMgfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYyBiL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMKK2luZGV4IDhiYWViMjMuLmRjMGRlOGYgMTAwNjQ0CistLS0gYS9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jCisrKysgYi9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jCitAQCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3JvdXAoY2hpbGRpbmZvX3QgKmNoaWxkLAorIAkJY3R4LT53YWtlZmQgPSB3YWtlZmQ7CisgCisgCQljaGlsZFt0YWJfb2Zmc2V0K2ldID0gY3JlYXRlX3dvcmtlcihjdHgsICh2b2lkICopKHZvaWQgKilyZWNlaXZlcik7CistCQlpZiggY2hpbGRbdGFiX29mZnNldCtpXS5lcnJvciA8IDAgKSB7CisrCQlpZiggY2hpbGRbdGFiX29mZnNldCtpXS5lcnJvciA9PSAtMSApIHsKKyAJCQlyZXR1cm4gKGkgPiAwID8gaS0xIDogMCk7CisgCQl9CisgCQlzbmRfY3R4LT5vdXRfZmRzW2ldID0gZmRzWzFdOworQEAgLTMzMiw3ICszMzIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdyb3VwKGNoaWxkaW5mb190ICpjaGlsZCwKKyAJCXNuZF9jdHgtPm51bV9mZHMgPSBudW1fZmRzOworIAorIAkJY2hpbGRbdGFiX29mZnNldCtudW1fZmRzK2ldID0gY3JlYXRlX3dvcmtlcihzbmRfY3R4LCAodm9pZCAqKSh2b2lkICopc2VuZGVyKTsKKy0JCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K251bV9mZHMraV0uZXJyb3IgPCAwICkgeworKwkJaWYoIGNoaWxkW3RhYl9vZmZzZXQrbnVtX2ZkcytpXS5lcnJvciA9PSAtMSApIHsKKyAJCQlyZXR1cm4gKG51bV9mZHMraSktMTsKKyAJCX0KKyAJfQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnRfYm1hcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTIyODBlNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5CkBAIC0wLDAgKzEsNDEyIEBACisjIS91c3IvYmluL3B5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogICAgIEJTRC0zLUNsYXVzZQorIyBDb3B5cmlnaHQgKEMpIDIwMTUgRW5lYSBTb2Z0d2FyZSBBQgorIyBBdXRob3I6IFRob21hcyBMdW5kc3Ryw7ZtIDx0aG9tYXMubHVuZHN0cm9tQGVuZWEuY29tPgorCisjIFRoZSBzY3JpcHQgbWVhc3VyZXMgaW50ZXJydXB0IGxhdGVuY3kgdG9nZXRoZXIgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YKKyMgc3lzdGVtIGxvYWQuIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgcHJvZ3JhbXMgY3ljbGljdGVzdCBhbmQgc3RyZXNzLgorIworIyBUaGUgbWFpbiBvdXRwdXQgaXM6CisjCisjICAgQmVzdCBjYXNlIChtaW4pIGxhdGVuY3kKKyMgICAgIFRoaXMgaGFzIHZlcnkgbGltaXRlZCB2YWx1ZSwgYnV0IGlzIHByZXNlbnRlZCBzaW5jZSBpdCBjYW4gYmUgZG9uZQorIyAgICAgZWFzaWx5CisjCisjICAgQXZlcmFnZSBsYXRlbmN5CisjICAgICBUaGlzIHZhbHVlIGlzIG9mIGludGVycmVzdCBmb3IgdGhyb3VnaHB1dCBvcmllbnRlZCBzeXN0ZW1zLiBMaW1pdGVkCisjICAgICB2YWx1ZSBmb3IgYSByZWFsLXRpbWUgc3lzdGVtLiBBbHNvIHByZXNlbnRlZCBiZWNhdXNlIGl0IGlzIGVhc3kgdG8gZG8uCisjCisjICAgV29yc3QgY2FzZSAobWF4KSBsYXRlbmN5CisjICAgICBUaGlzIGlzIHRoZSBpbnRlcmVzdGluZyBudW1iZXIgZm9yIGEgcmVhbC10aW1lIHN5c3RlbS4gVGhlIG51bWJlcgorIyAgICAgcHJlc2VudGVkIGlzIChvZiBjb3VyY2UpIHRoZSBsYXJnZXN0IG51bWJlciBvYnNlcnZlZC4gVGhlIGNoYWxsZW5nZQorIyAgICAgaXMgdG8ga25vdyBob3cgdGhlIG9ic2VydmVkIHdvcnN0IGNhc2UgcmVsYXRlcyB0byB0aGUgYWN0dWFsIHdvcnN0IGNhc2UuCisjCisjICAgICBUbyBnZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgY29uZmlkZW5jZSwgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgdXNlZDoKKyMgICAgIDEpIEluc3RlYWQgb2Ygb25lIGxvbmcgcnVuLCB0aGUgbWVhc3VyZW1lbnQgaXMgbWFkZSBhcyBhIHNldCBvZiBzaG9ydGVyCisjICAgICAgICBydW5zLiBUaGUgbnVtYmVyIG9mIHJ1bnMgbXVzdCBiZSBhIHBvd2VyIG9mIDIgZm9yIHJlYXNvbnMgdGhhdCB3aWxsCisjICAgICAgICBzaG9ybHR5IGJlIG9idmlvdXMKKyMKKyMgICAgIDIpIEZpcnN0LCBhIGxpc3Qgb2YgdGhlIG1heCB2YWx1ZXMgYXJlIGNyZWF0ZWQuCisjCisjICAgICAzKSBUaGUgc21hbGxlc3QgdmFsdWUgaW4gdGhhdCBsaXN0IGlzIHJlY29yZGVkLgorIworIyAgICAgNCkgVGhlbiBhIG5ldyBsaXN0IGlzIGNyZWF0ZSBieSB0YWtpbmcgdGhlIG1heCB2YWx1ZSBvZiBlYWNoIHBhaXIgb2YKKyMgICAgICAgIHZhbHVlcyBpbiB0aGUgb3JpZ2luYWwgbGlzdC4gSW4gdGhpcyBsaXN0IHRoZSBzbWFsbGVzdCB2YWx1ZSBpcworIyAgICAgICAgcmVjb3JkZWQuCisjCisjICAgICA1KSBTdGVwIDMgaXMgcmVwZWF0ZWQgdW50aWwgdGhlcmUgaXMgb25seSBvbmUgdmFsdWUgaW4gdGhlIGxpc3QuIFNlZQorIyAgICAgICAgZXhhbXBsZSBiZWxvdzoKKyMKKyMgICAgICAgIFNhbXBsZXM6CisjICAgICAgICAgIHwgIDQ0IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNzcgfCAgNzcgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDExOCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTE5IHwgMTE5IHwgMTE5IHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMzggfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA1NyB8IDEzOCB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTc1IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMzAgfCAxNzUgfCAxNzUgfCAxNzUgfCAgICAgfAorIyAgICAgICAgICB8ICA1NCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTUwIHwgMTUwIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAgNDcgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA1OSB8ICA1OSB8IDE1MCB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTk5IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMTUgfCAxOTkgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDE3NyB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTI5IHwgMTc3IHwgMTk5IHwgMTk5IHwgMTk5IHwKKyMKKyMgICAgICAgIFNtYWxsZXN0IHZhbHVlOgorIyAgICAgICAgICB8ICA0NCB8ICA1OSB8IDExOSB8IDE3NSB8IDE5OSB8CisjCisjICAgICA2KSBUaGUgZ2VuZXJhdGVkIGxpc3Qgb2Ygc21hbGxlc3QgdmFsdWVzIGlzIGFuYWx5emVkLiBJbiB0aGlzIGNhc2UsIGl0CisjICAgICAgICBjYW4gYmUgb2JzZXJ2ZWQgdGhhdCB0aGUgdmFsdWVzIGFyZSBpbmNyZWFzaW5nIHNpZ25pZmljYW50bHkgdGhyb3VnaAorIyAgICAgICAgdGhlIGVudGlyZSBsaXN0LCB3aGljaCBsZWFkcyB0byB0aGUgY29uY2x1c2lvbiB0aGF0IHRoZSBudW1iZXIgb2YKKyMgICAgICAgIHNhbXBsZXMgaXMgdG9vIHNtYWxsLgorIyAgICAgICAgSWYgaW5zdGVhZCB0aGUgbGlzdCBoYWQgYmVlbiAoMTY3LCAxOTEsIDE5NiwgMTk5LCAxOTkpLCB0aGVyZSBoYWQKKyMgICAgICAgIGJlZW4gYSB2ZXJ5IHNtYWxsLCBvciBubywgaW5jcmVhc2UgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4gV2UgbWlnaHQKKyMgICAgICAgIHRoZW4gc3VzcGVjdCB0aGF0IHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpcyBwcm9iYWJseSBsYXJnZSBlbm91Z2guCisjICAgICAgICBUaGVyZSBpcyBob3dldmVyIG5vIGd1YXJhbnRlZSBmb3IgdGhhdC4KKyMKKyMgICAgIFN0ZXBzIDEtMiBhcmUgZG9uZSBpbiBydW5fY3ljbGljdGVzdF9zdWl0ZQorIyAgICAgU3RlcHMgMy01IGFyZSBkb25lIGluIGdlbl9taW5tYXhfbGlzdC4KKyMgICAgIFN0ZXAgNiBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5IHNpbmNlIHRoZXJlIGlzICh5ZXQpIG5vIHdlbGwgZGVmaW5lZAorIyAgICAgRkFJTCBjcml0ZXJpb24gYW5kIGEgdGhlb3JldGljYWxseSBzb2xpZCBQQVNTIGNyaXRlcmlvbiBtYXkgbmV2ZXIgYmUKKyMgICAgIGF2YWlsYWJsZS4KKworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjaworCisjIFNlZSBjb21tZW50IG9uIHRoZSBmdW5jdGlvbiBzZXRfaHVuZ190bW8KK2hhc19odW5nX3Rhc2tfZGV0ZWN0aW9uID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0RmFpbChFeGNlcHRpb24pOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiVGVzdCBmYWlsdXJlOiAoIiArIHNlbGYubXNnICsgIikiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB0Y19uYW1lKHN1Yl9uYW1lKToKKyAgICAgICAgcmV0dXJuICJydF9ibWFyay5pbnRsYXQuIiArIHN1Yl9uYW1lCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvZygpIGRvZXMgdGhlIHNhbWUgam9iIGFzIHByaW50IGV4Y2VwdCB0aGF0IGEgJyMnIGlzIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcKKyMgb2YgZWFjaCBsaW5lLiBUaGlzIGNhdXNlcyBURUZFTCB0byBpZ25vcmUgaXQKKworZGVmIGxvZygqbXNnKToKKyAgICAgICAgdG1wID0gIiIuam9pbihtYXAoc3RyLCBtc2cpKSAjICdtYXAoc3RyLCAuLi4nIGFsbG93cyBudW1iZXJzCisgICAgICAgIGZvciBsaW5lIGluIHRtcC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICBwcmludCAiIyIsIGxpbmUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBsb2coKSwgYnV0IHdpdGggYSB0aW1lc3RhbXAgYWRkZWQKKworZGVmIGxvZ190cygqbXNnKToKKyAgICAgICAgdHMgPSB0aW1lLmxvY2FsdGltZSgpCisgICAgICAgIHN0YW1wID0gIiUyZDolMDJkOiUwMmQ6ICIgJSAodHMudG1faG91ciwgdHMudG1fbWluLCB0cy50bV9zZWMpCisgICAgICAgIGxvZyhzdGFtcCwgKm1zZykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGxvZ190ZXN0X2hlYWRlcihzZXFfbm8sIG5yX29mX3Rlc3RzLCBuYW1lKToKKyAgICAgICAgbG9nKCI9IiAqIDc4KQorICAgICAgICBsb2coKQorICAgICAgICBsb2coIiAgVGVzdCBjYXNlICglZC8lZCk6ICVzIiAlIChzZXFfbm8sIG5yX29mX3Rlc3RzLCB0Y19uYW1lKG5hbWUpKSkKKyAgICAgICAgbG9nKCkKKyAgICAgICAgbG9nKCIuIiAqIDc4KQorICAgICAgICBsb2coKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgc3RhcnRfc3RyZXNzKCphcmdzKToKKyAgICAgICAgc3RyZXNzX2NtZCAgICAgICAgID0gWyAic3RyZXNzIiBdCisgICAgICAgIGFkZGVkX3N0cmVzc190eXBlcyA9IFtdCisgICAgICAgIHJlcV9zdHJlc3NfdHlwZXMgICA9IHNldChhcmdzKQorICAgICAgICBjcHVfY250ICAgICAgICAgICAgPSBzdHIobXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorCisgICAgICAgICMgVGhlIGZ1bmN0aW9uIGNvbmRfYWRkX3N0cmVzcyBhcHBlbmRzIHRoZSBvcHRpb25zIHRvIHRoZSBzdHJlc3MKKyAgICAgICAgIyBjb21tYW5kIGlmIHRoZSBzdHJlc3MgdHlwZSBpcyBpbiB0aGUgc2V0IG9mIHJlcXVlc3RlZCBzdHJlc3MgdHlwZXMKKworICAgICAgICBkZWYgY29uZF9hZGRfc3RyZXNzKHN0cmVzc190eXBlLCBvcHRpb25zKToKKyAgICAgICAgICAgICAgICBpZiBzdHJlc3NfdHlwZSBpbiByZXFfc3RyZXNzX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVxX3N0cmVzc190eXBlcy5yZW1vdmUoc3RyZXNzX3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZF9zdHJlc3NfdHlwZXMuYXBwZW5kKHN0cmVzc190eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXNzX2NtZC5leHRlbmQob3B0aW9ucykKKworICAgICAgICAjLS0tLS0tLS0tLQorCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygiaW8iLCAgWyItaSIsIGNwdV9jbnRdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoImNwdSIsIFsiLWMiLCBjcHVfY250XSkKKyAgICAgICAgY29uZF9hZGRfc3RyZXNzKCJoZGQiLCBbIi1kIiwgY3B1X2NudCwgIi0taGRkLWJ5dGVzIiwgIjIwTSJdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoInZtIiwgIFsiLW0iLCBjcHVfY250LCAiLS12bS1ieXRlcyIsICIxME0iXSkKKworICAgICAgICB1bmtub3duID0gIiwgIi5qb2luKHJlcV9zdHJlc3NfdHlwZXMpCisgICAgICAgIGlmIHVua25vd24gIT0gIiI6CisgICAgICAgICAgICByYWlzZSBUZXN0RmFpbCgiVW5rbm93biBzdHJlc3MgdHlwZShzKTogJXMiICUgdW5rbm93bikKKworICAgICAgICBpZiBub3QgYWRkZWRfc3RyZXNzX3R5cGVzOgorICAgICAgICAgICAgICAgIGxvZygiTm8gc3RyZXNzIHJlcXVlc3RlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBhZGRlZCAgICAgICAgICA9ICIrIi5qb2luKGFkZGVkX3N0cmVzc190eXBlcykKKyAgICAgICAgc3RyZXNzX2NtZF9zdHIgPSAiICIuam9pbihzdHJlc3NfY21kKQorCisgICAgICAgIGxvZygiU3RhcnRpbmcgc3RyZXNzKCIsIGFkZGVkLCAiKSIpCisgICAgICAgIGxvZygiICBDb21tYW5kOiAnIiwgc3RyZXNzX2NtZF9zdHIsICInIikKKyAgICAgICAgbG9nKCkKKworICAgICAgICAjIHByZWV4ZWNfZm49b3Muc2V0c2lkIGNhdXNlcyBzdHJlc3MgdG8gYmUgZXhlY3V0ZWQgaW4gYSBzZXBhcmF0ZQorICAgICAgICAjIHNlc3Npb24sID0+IGl0IGdldHMgYSBuZXcgcHJvY2VzcyBncm91cCAoaW5jbC4gY2hpbGRyZW4pLiBJdAorICAgICAgICAjIGNhbiB0aGVuIGJlIHRlcm1pbmF0ZWQgdXNpbmcgb3Mua2lsbHBnIGluIGVuZF9zdHJlc3Mgd2l0aG91dAorICAgICAgICAjIHRlcm1pbmF0aW5nIHRoaXMgc2NyaXB0LgorCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKHN0cmVzc19jbWQsIHByZWV4ZWNfZm49b3Muc2V0c2lkKQorCisgICAgICAgIHJldHVybiBwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBlbmRfc3RyZXNzKHApOgorICAgICAgICBpZiBwIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgdmFsdWUgTm9uZSBpbmRpY2F0ZXMgdGhhdCBubyBzdHJlc3Mgc2NlbmFyaW8gd2FzIHN0YXJ0ZWQKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBwLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbCgic3RyZXNzIHByZW1hdHVyZWx5IHRlcm1pbmF0ZWQuIikKKworICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChwLnBpZCksIHNpZ25hbC5TSUdURVJNKQorICAgICAgICBsb2coIlRlcm1pbmF0ZWQgc3RyZXNzIikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHVzMmhtc19zdHIodXMpOgorICAgICAgICBzID0gKHVzKzUwMDAwMCkgLy8gMTAwMDAwMCAjIFJvdW5kIG1pY3Jvc2Vjb25kcyB0byBzCisgICAgICAgIG0gPSBzLy82MAorICAgICAgICBzIC09IDYwKm07CisgICAgICAgIGggPSBtLy82MAorICAgICAgICBtIC09IDYwKmgKKworICAgICAgICByZXR1cm4gIiVkOiUwMmQ6JTAyZCIgJSAoaCwgbSwgcykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU29tZXRpbWUgdGhlIGh1bmcgdGFzayBzdXBlcnZpc2lvbiBpcyB0cmlnZ2VyZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZgorIyBjeWNsaWN0ZXN0IChjeWNsaWN0ZXN0IHN0YXJ2ZXMgc3RyZXNzKS4gVG8gYXZvaWQgdGhhdCwgdGhlIHN1cGVydmlzaW9uCisjIGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkCisKK2RlZiBzZXRfaHVuZ190bW8obmV3X3Rtbyk6CisgICAgICAgIGdsb2JhbCBoYXNfaHVuZ190YXNrX2RldGVjdGlvbgorCisgICAgICAgIHRtb19maWxlID0gIi9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNrX3RpbWVvdXRfc2VjcyIKKworICAgICAgICBpZiBub3QgaGFzX2h1bmdfdGFza19kZXRlY3Rpb246CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IG9zLmFjY2Vzcyh0bW9fZmlsZSwgb3MuV19PSyk6CisgICAgICAgICAgICAgICAgbG9nKCJIdW5nIHRhc2sgZGV0ZWN0aW9uIG5vdCBzdXBwb3J0ZWQiKQorICAgICAgICAgICAgICAgIGxvZygiICAoRmlsZSAiLCB0bW9fZmlsZSwgIiBub3QgZm91bmQpIikKKyAgICAgICAgICAgICAgICBoYXNfaHVuZ190YXNrX2RldGVjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3JpZ190bW8gPSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJjYXQiLCB0bW9fZmlsZV0pLnN0cmlwKCkpCisgICAgICAgIGlmIG5ld190bW8gIT0gb3JpZ190bW86CisgICAgICAgICAgICAgICAgY21kID0gKCAiZWNobyAiICsgc3RyKG5ld190bW8pICsgIiA+ICIgKyB0bW9fZmlsZSApCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIGxvZygiQ2hhbmdlZCB0aW1lb3V0IGZvciBkZXRlY3Rpb24gb2YgaHVuZyB0YXNrczogIiwKKyAgICAgICAgICAgICAgICAgICAgb3JpZ190bW8sICIgLT4gIiwgbmV3X3RtbykKKworICAgICAgICByZXR1cm4gb3JpZ190bW8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdlbl9taW5tYXhfbGlzdChtYXhfbGlzdCk6CisgICAgICAgIHJlcyA9IFttaW4obWF4X2xpc3QpXQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdG1wID0gbWF4X2xpc3QKKyAgICAgICAgICAgICAgICBtYXhfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgd2hpbGUgdG1wOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpc3QuYXBwZW5kKG1heCh0bXAucG9wKDApLCB0bXAucG9wKDApKSkKKworICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQobWluKG1heF9saXN0KSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihtYXhfbGlzdCkgPCAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJhbWV0ZXJzIGZvciBjeWNsaWN0ZXN0OgorIworIyBPbiB0aGUgLVMgb3B0aW9uIChmcm9tIGN5Y2xpY3Rlc3QuYyk6CisjICAtUyBpbXBsaWVzIG9wdGlvbnMgLWEgLXQgLW4gYW5kIHNhbWUgcHJpb3JpdHkgb2YgYWxsIHRocmVhZHMKKyMgICAgLWE6IE9uZSB0aHJlYWQgcGVyIGNvcmUKKyMgICAgLW46IHVzZSBjbG9ja19uYW5vc2xlZXAgaW5zdGVhZCBvZiBwb3NpeCBpbnRlcnZhbCB0aW1lcnMKKyMgICAgLXQ6ICh3aXRob3V0IGFyZ3VtZW50KSBTZXQgbnVtYmVyIG9mIHRocmVhZHMgdG8gdGhlIG51bWJlcgorIyAgICAgICAgIG9mIGNwdXMKKworaW50ZXJ2YWxfY29yZV8wID0gMTAwICAgICAjIFRpbWVyIGludGVydmFsIG9uIGNvcmUgMCBbdXNdCitpbnRlcnZhbF9kZWx0YSAgPSAyMCAgICAgICMgSW50ZXJ2YWwgaW5jcmVtZW50IGZvciBlYWNoIGNvcmUgW3VzXQorbG9vcF9jb3VudCAgICAgID0gMzAwMDAgICAjIE51bWJlciBvZiBsb29wcyAob24gY29yZSAwKS4KKworY21kID0gKCJjeWNsaWN0ZXN0IiwKKyAgICAgICAiLVMiLCAgICAgICAgICAgICAjIFN0YW5kYXJkIFNNUCB0ZXN0aW5nLiBTZWUgYmVsb3cKKyAgICAgICAiLXAiLCAiOTkiLCAgICAgICAjIFJUIHByaW9yaXR5IDk5CisgICAgICAgIi1xIiwgICAgICAgICAgICAgIyBRdWlldCBtb2RlLCBpLmUuIHByaW50IG9ubHkgYSBzdW1tYXJ5CisgICAgICAgIi1pIiwgc3RyKGludGVydmFsX2NvcmVfMCksCisgICAgICAgIi1kIiwgc3RyKGludGVydmFsX2RlbHRhKSwKKyAgICAgICAiLWwiLCBzdHIobG9vcF9jb3VudCkKKyAgICAgICApCityZXggPSByZS5jb21waWxlKCJDOlxzKihcZCspLipNaW46XHMqKFxkKykuKkF2ZzpccyooXGQrKS4qTWF4OlxzKihcZCspIikKKworZGVmIHJ1bl9jeWNsaWN0ZXN0X29uY2UoKToKKyAgICAgICAgcmVzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kKQorCisgICAgICAgICMgbWlubGlzdCBhbmQgbWF4bGlzdCBhcmUgbGlzdHMgd2l0aCB0aGUgZXh0cmVtZXMgZm9yIGVhY2ggY29yZQorICAgICAgICAjIGF2Z19jbnQgaXMgdGhlIHN1bSBvZiBjeWNsZXMgZm9yIGFsbCBjb3JlcworICAgICAgICAjIGF2Z19zdW0gaXMgdGhlIHN1bSBvZiAoY3ljbGUgY291bnQqYXZlcmFnZSkgZm9yIGVhY2ggY29yZQorICAgICAgICAjICAgICBTaW5jZSBjeWNsaWN0ZXN0IHJ1bnMgZGlmZmVyZW50IG51bWJlciBvZiBjeWNsZXMgb24KKyAgICAgICAgIyAgICAgZGlmZmVyZW50IGNvcmVzLCBhdmdfc3VtL2F2Z19jbnQgZ2l2ZXMgYSBtb3JlIGFjY3VyYXRlCisgICAgICAgICMgICAgIHZhbHVlIG9mIHRoZSBvdmVyYWxsIGF2ZXJhZ2UgdGhhbiBqdXN0IHRha2luZyB0aGUgYXZlcmFnZQorICAgICAgICAjICAgICBvZiBlYWNoIGNvcmUncyBhdmVyYWdlcworCisgICAgICAgIG1pbmxpc3QgPSBbXQorICAgICAgICBtYXhsaXN0ID0gW10KKyAgICAgICAgYXZnX3N1bSA9IDAKKyAgICAgICAgYXZnX2NudCA9IDAKKworICAgICAgICBmb3IgbGluZSBpbiByZXMuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgbSA9IHJleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbWlubGlzdC5hcHBlbmQoaW50KG0uZ3JvdXAoMikpKQorICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGlzdC5hcHBlbmQoaW50KG0uZ3JvdXAoNCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGludChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYXZnX3N1bSArPSBuICogaW50KG0uZ3JvdXAoMykpCisgICAgICAgICAgICAgICAgICAgICAgICBhdmdfY250ICs9IG4KKworICAgICAgICByZXR1cm4gbWluKG1pbmxpc3QpLCBbYXZnX3N1bSwgYXZnX2NudF0sIG1heChtYXhsaXN0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBIHByZWNvbmRpdGlvbiBmb3IgdGhlIHRyYWNraW5nIG9mIG1pbi1tYXggdmFsdWVzIGlzIHRoYXQKKyMgdGhlIHN1aXRlIHNpemUgb3MgYSBwb3dlciBvZiAyLgorCitOICAgICAgICAgID0gNQorc3VpdGVfc2l6ZSA9IDIqKk4KKworZXN0X2V4ZWNfdGltZV9vbmNlICA9IGludGVydmFsX2NvcmVfMCAqIGxvb3BfY291bnQKK2VzdF9leGVjX3RpbWVfc3VpdGUgPSBzdWl0ZV9zaXplICogZXN0X2V4ZWNfdGltZV9vbmNlCisKK2RlZiBydW5fY3ljbGljdGVzdF9zdWl0ZSgpOgorICAgICAgICBsb2coIlN0YXJ0aW5nIGN5Y2xpY3Rlc3QiKQorICAgICAgICBsb2coIiAgQ29tbWFuZCAgICAgICAgICA6ICIsICIgIi5qb2luKGNtZCkpCisgICAgICAgIGxvZygiICBOdW1iZXIgb2YgY3ljbGVzIDogIiwgbG9vcF9jb3VudCpzdWl0ZV9zaXplLAorICAgICAgICAgICAgIiAoIiwgc3VpdGVfc2l6ZSwgIiBzZXRzIG9mICIsIGxvb3BfY291bnQsICIgY3ljbGVzKSIpCisgICAgICAgIGxvZygiICBFeGVjLiB0aW1lIChlc3QpIDogIiwgdXMyaG1zX3N0cihlc3RfZXhlY190aW1lX3N1aXRlKSkKKyAgICAgICAgbG9nKCkKKworICAgICAgICBvcmlnX3RtbyA9IHNldF9odW5nX3RtbygwKSAjIDAgPT4gRGlzYWJsZQorCisgICAgICAgICMgZmxvYXQoJ2luZicpIGVtdWxhdGVzIGluZmluaXR5LiBBdCBsZWFzdCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBpcworICAgICAgICAjIGd1YXJhbnRlZWQgdG8gYmUgbGFyZ2VyIHRoYW4gYW55IGFjdHVhbCBudW1iZXIuCisgICAgICAgIGFja19taW4gPSBmbG9hdCgnaW5mJykKKyAgICAgICAgYWNrX2F2ZyA9IFswLCAwXQorCisgICAgICAgIGxvZygpCisgICAgICAgIGxvZ190cygiU3RhcnQgb2YgZXhlY3V0aW9uIikKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIG1heF9saXN0ID0gW10KKworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgc3VpdGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgdG1wX21pbiwgdG1wX2F2ZywgdG1wX21heCA9IHJ1bl9jeWNsaWN0ZXN0X29uY2UoKQorCisgICAgICAgICAgICAgICAgbXNnID0gIiUyZC8lMmQ6IiAlIChpKzEsIHN1aXRlX3NpemUpCisgICAgICAgICAgICAgICAgbXNnICs9ICIgbWluOiAlNGQiICUgdG1wX21pbgorICAgICAgICAgICAgICAgIG1zZyArPSAiIGF2ZzogJTUuMWYiICUgKGZsb2F0KHRtcF9hdmdbMF0pL3RtcF9hdmdbMV0pCisgICAgICAgICAgICAgICAgbXNnICs9ICIgbWF4OiAlNGQiICUgdG1wX21heAorICAgICAgICAgICAgICAgIGxvZ190cyhtc2cpCisKKyAgICAgICAgICAgICAgICAjIFRyYWNrIG1pbmltdW0gdmFsdWUKKyAgICAgICAgICAgICAgICBpZiB0bXBfbWluIDwgYWNrX21pbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFja19taW4gPSB0bXBfbWluCisKKyAgICAgICAgICAgICAgICAjIFRyYWNrIHNtYWxsZXN0IG1heCB2YWx1ZQorICAgICAgICAgICAgICAgIG1heF9saXN0LmFwcGVuZCh0bXBfbWF4KQorCisgICAgICAgICAgICAgICAgYWNrX2F2Z1swXSArPSB0bXBfYXZnWzBdCisgICAgICAgICAgICAgICAgYWNrX2F2Z1sxXSArPSB0bXBfYXZnWzFdCisKKyAgICAgICAgdCA9IHRpbWUudGltZSgpLXQKKyAgICAgICAgbG9nX3RzKCJDeWNsaWN0ZXN0IGNvbXBsZXRlZC4gQWN0dWFsIGV4ZWN1dGlvbiB0aW1lOiIsCisgICAgICAgICAgICAgICB1czJobXNfc3RyKHQqMTAwMDAwMCkpCisgICAgICAgIGxvZygpCisgICAgICAgIHNldF9odW5nX3RtbyhvcmlnX3RtbykKKworICAgICAgICByZXR1cm4gYWNrX21pbiwgZmxvYXQoYWNrX2F2Z1swXSkvYWNrX2F2Z1sxXSwgZ2VuX21pbm1heF9saXN0KG1heF9saXN0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBjeWNsaWN0ZXN0X3J1bm5lcjoKKyAgICAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHNlcV9ubywgbnJfb2ZfdGVzdHMsIG5hbWUsIHN0cmVzc3BhcmFtcyk6CisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dfdGVzdF9oZWFkZXIoc2VxX25vLCBucl9vZl90ZXN0cywgbmFtZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN0YXJ0X3N0cmVzcygqc3RyZXNzcGFyYW1zKQorCisgICAgICAgICAgICAgICAgICAgICAgICBibV9taW4sIGJtX2F2ZywgYm1fbWF4X2xpc3QgPSBydW5fY3ljbGljdGVzdF9zdWl0ZSgpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9zdHJlc3MocCkKKworICAgICAgICAgICAgICAgICAgICAgICAgYm1fbWF4ID0gYm1fbWF4X2xpc3RbLTFdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1pbjogJWQgdXMiICUgYm1fbWluKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJBdmc6ICUuMWYgdXMiICUgYm1fYXZnKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJNYXg6ICVkIHVzIiAlIGJtX21heCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1heCBsaXN0OiAiLCBibV9tYXhfbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlBBU1MiKQorCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgdGNfbmFtZShuYW1lKSwgIltNaW4vdXMsQXZnL3VzLE1heC91c106IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlZCwlLjFmLCVkIiAlIChibV9taW4sYm1fYXZnLCBibV9tYXgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiUEFTUzoiLCB0Y19uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVHJhY2ViYWNrOiIsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJXRDogIiwgb3MuZ2V0Y3dkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJGQUlMIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRkFJTDoiLCB0Y19uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitydW5uZXIgPSBjeWNsaWN0ZXN0X3J1bm5lcigpCisKK3Rlc3RzID0gKCgibm9fc3RyZXNzIiwgW10pLAorICAgICAgICAgKCJjcHUiLCAgWyJjcHUiXSksCisgICAgICAgICAoImhkZCIsICBbImhkZCJdKSwKKyAgICAgICAgICgiaW8iLCAgIFsiaW8iXSksCisgICAgICAgICAoInZtIiwgICBbInZtIl0pLAorICAgICAgICAgKCJmdWxsIiwgWyJpbyIsICJjcHUiLCAiaGRkIiwgInZtIl0pLAorICAgICAgICAgKQorCitucl9vZl90ZXN0cyA9IGxlbih0ZXN0cykKK2ZvciBzZXFfbm8sIHBhcmFtcyBpbiBlbnVtZXJhdGUodGVzdHMsIHN0YXJ0PTEpOgorICAgICAgICBydW5uZXIucnVuX3Rlc3Qoc2VxX25vLCBucl9vZl90ZXN0cywgKnBhcmFtcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZkM2UzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK3B5dGhvbiAuL3J0X2JtYXJrLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjkyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzE5ZWI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvaHdsYXRkZXRlY3RfMC45Mi5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0b3IiCitERVNDUklQVElPTiA9ICJQeXRob24gdXRpbGl0eSBmb3IgY29udHJvbGxpbmcgdGhlIGtlcm5lbCBoYXJkd2FyZSBsYXRlbmN5IGRldGVjdGlvbiBtb2R1bGUgKGh3bGF0X2RldGVjdG9yLmtvKS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvP3A9bGludXgva2VybmVsL2dpdC9jbHJrd2xsbXMvcnQtdGVzdHMuZ2l0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworcmVxdWlyZSBydC10ZXN0cy5pbmMKKworRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBod2xhdGRldGVjdAorfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGxfaHdsYXRkZXRlY3QgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBcCisJICAgICAgICAgICBNQU5ESVI9JHttYW5kaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9kaXN0LXBhY2thZ2VzL2h3bGF0ZGV0ZWN0LnB5IgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi10ZXh0dXRpbHMiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLWh3bGF0LWRldGVjdG9yIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MWRiMTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0cy5pbmMKQEAgLTAsMCArMSwxOSBAQAorIyBWZXJzaW9uIHYwLjkyCitQViA9ICIwLjkyIgorU1JDUkVWID0gIjVmOWYxZTNmZTMyNzQ0MGE5ZDQwNWY0YWY4ZmViMTZmZjdhOTA5ZWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Nscmt3bGxtcy9ydC10ZXN0cy5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ydC10ZXN0cy1BbGxvdy1mb3ItdXNlci1zcGVjaWZpZWQtUFlMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1ydC10ZXN0cy1CcmVhay1vdXQtaW5zdGFsbF9od2xhdGRldGVjdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9oYWNrYmVuY2gtZml4LWVycm9yLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLWZpeC1nemlwLWNvbW1hbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJlLWluc3RhbGwtZmFpbHVyZS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgbmVlZCB0byBhcHBlbmQgcnQtdGVzdHMnIGRlZmF1bHQgQ0ZMQUdTIHRvIG91cnMKK0NGTEFHUyArPSAiLUkke1N9L3NyYy9pbmNsdWRlIC1EX0dOVV9TT1VSQ0UgLVdhbGwgLVduby1ub25udWxsIgorCisjIGNhbGxpbmcgJ3VuYW1lIC1tJyBpcyBicm9rZW4gb24gY3Jvc3NidWlsZHMKK0VYVFJBX09FTUFLRSA9ICJOVU1BPTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjkyLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmUyZjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHNfMC45Mi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlJlYWwtVGltZSBwcmVlbXB0aW9uIHRlc3RjYXNlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vcnQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9DeWNsaWN0ZXN0IgorU0VDVElPTiA9ICJ0ZXN0cyIKK0RFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIHZpcnR1YWwvbGliYyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LmM7YmVnaW5saW5lPTc7ZW5kbGluZT05O21kNT1lNzY4YjhkYTQ0NTU1ZmU2M2Y2NWU1YzQ5Nzg0NGNiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGlfdGVzdHMvcGlfc3RyZXNzLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xOTttZDU9YmQ0MjZhNjM0YTQzZWM2MTJlOWZiZjEyNWRmY2M5NDkiCisKK3JlcXVpcmUgcnQtdGVzdHMuaW5jCitpbmhlcml0IHB0ZXN0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL3J0X2JtYXJrLnB5IFwKKyAgICAgICAgICAgIgorIyBEbyBub3QgaW5zdGFsbCBod2xhdGRldGVjdAorRVhUUkFfT0VNQUtFICs9ICJQWUxJQj0nJyIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICAgICAgY3AgJHtXT1JLRElSfS9ydF9ibWFyay5weSAke0R9JHtQVEVTVF9QQVRIfQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHN0cmVzcyBweXRob24gcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLW11bHRpcHJvY2Vzc2luZyBweXRob24tZGF0ZXRpbWUgcHl0aG9uLXJlIHB5dGhvbi1sYW5nIgorCitGSUxFU18ke1BOfSArPSAiJHtwcmVmaXh9L3NyYy9iYWNrZmlyZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM3ZmYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmUuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiU2F0byB0aGVtZSBlbmdpbmUgZm9yIEdUSysiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSAmIExHUEx2MisiCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitERVBFTkRTID0gImd0aysiCitSREVQRU5EU19ndGstdGhlbWUtc2F0byA9ICJndGstc2F0by1lbmdpbmUiCisKK1BBQ0tBR0VTICs9ICJndGstdGhlbWUtc2F0byIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLnNvICIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8uZGVidWciCitGSUxFU19ndGstdGhlbWUtc2F0byA9ICIke2RhdGFkaXJ9L2ljb25zICR7ZGF0YWRpcn0vdGhlbWVzIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWZvciBpIGluIGBscyBndGstY29tbW9uYDsgZG8KKwkJbG4gLXNmIC4uL2d0ay1jb21tb24vJGkgZ3RrMi1lbmdpbmUvJGkKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0ZDk4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lX2dpdC5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIGd0ay1zYXRvLWVuZ2luZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zYXRvLXV0aWxzLmg7ZW5kbGluZT0yNDttZDU9NzA4ZjI4Y2ZlN2ZlMDI4ZDQ5N2FhZjQzODliODBiNjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhdG8tbWFpbi5jO2VuZGxpbmU9MjQ7bWQ1PWI1ZTVkZGRlYmNhNTcwMjc1YmVjYjUxYjUyNmU0YzVhIgorCitTUkNSRVYgPSAiNDc0MGFkOGQ1M2FiYTQzNjhjZTNlMDNiMDZjZmRjNjllYjg2ZGNkYyIKK1BWID0gIjAuMy4zK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tZGV2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmE2OWQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLWRldi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1zYXRvLmJiCisKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0byBmb3IgZGV2ZWxvcG1lbnQgd29yay4gSXQgaW5jbHVkZXMgZXZlcnl0aGluZyBcCit3aXRoaW4gY29yZS1pbWFnZS1zYXRvIHBsdXMgYSBuYXRpdmUgdG9vbGNoYWluLCBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBhbmQgXAordGVzdGluZyBsaWJyYXJpZXMsIHByb2ZpbGluZyBhbmQgZGVidWcgc3ltYm9scy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGsuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODM2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tc2RrLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1zYXRvLmJiCisKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0byBzdXBwb3J0IHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyB3aXRoaW4gXAorY29yZS1pbWFnZS1zYXRvIHBsdXMgbWV0YS10b29sY2hhaW4sIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBcCitmb3JtIGEgc3RhbmRhbG9uZSBTREsuIgorCitRVDRQS0cgPSAicXQ0LXBrZ3MiCitRVDRQS0dfbWlwczY0ID0gIiIKK1FUNFBLR19taXBzNjRuMzIgPSAiIgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MgdG9vbHMtc2RrICR7UVQ0UEtHfSBcCisJdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyBzc2gtc2VydmVyLW9wZW5zc2giCisKK0lNQUdFX0lOU1RBTEwgKz0gImtlcm5lbC1kZXZzcmMiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzI0NmQyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLmJiCkBAIC0wLDAgKzEsMTEgQEAKK0RFU0NSSVBUSU9OID0gIkltYWdlIHdpdGggU2F0bywgYSBtb2JpbGUgZW52aXJvbm1lbnQgYW5kIHZpc3VhbCBzdHlsZSBmb3IgXAorbW9iaWxlIGRldmljZXMuIFRoZSBpbWFnZSBzdXBwb3J0cyBYMTEgd2l0aCBhIFNhdG8gdGhlbWUsIFBpbWxpY28gXAorYXBwbGljYXRpb25zLCBhbmQgY29udGFpbnMgdGVybWluYWwsIGVkaXRvciwgYW5kIGZpbGUgbWFuYWdlci4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIHgxMS1zYXRvIHNzaC1zZXJ2ZXItZHJvcGJlYXIgaHdjb2RlY3MiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfSU5TVEFMTCArPSAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UyZDViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL2xlYWZwYWQuZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9Tm90ZXMKK0V4ZWM9L3Vzci9iaW4vbGVhZnBhZAorQ29tbWVudD1UZXh0IEVkaXRvcgorSWNvbj1hY2Nlc3Nvcmllcy10ZXh0LWVkaXRvcgorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R1RLO1V0aWxpdHk7VGV4dEVkaXRvcjsKK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViZjc0YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9vd2wtbWVudS5wYXRjaApAQCAtMCwwICsxLDYzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCistLS0gdG1wL3NyYy9tZW51LmMub3JpZwkyMDA3LTA0LTIzIDEyOjA4OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvbWVudS5jCTIwMDctMDQtMjMgMTI6MDg6NDEuMDAwMDAwMDAwICswMTAwCitAQCAtMTUyLDcgKzE1Miw3IEBACisgCX0KKyAJCisgCWFjY2VsX2dyb3VwID0gZ3RrX2FjY2VsX2dyb3VwX25ldygpOworLQlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlVfQkFSLCAiPG1haW4+IiwgYWNjZWxfZ3JvdXApOworKwlpZmFjdG9yeSA9IGd0a19pdGVtX2ZhY3RvcnlfbmV3KEdUS19UWVBFX01FTlUsICI8bWFpbj4iLCBhY2NlbF9ncm91cCk7CisgCWd0a19pdGVtX2ZhY3Rvcnlfc2V0X3RyYW5zbGF0ZV9mdW5jKGlmYWN0b3J5LCBtZW51X3RyYW5zbGF0ZSwgTlVMTCwgTlVMTCk7CisgCWd0a19pdGVtX2ZhY3RvcnlfY3JlYXRlX2l0ZW1zKGlmYWN0b3J5LCBubWVudV9pdGVtcywgbWVudV9pdGVtcywgTlVMTCk7CisgCWd0a193aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1cod2luZG93KSwgYWNjZWxfZ3JvdXApOworCistLS0gdG1wL3NyYy93aW5kb3cuYy5vcmlnCTIwMDctMDQtMjMgMTI6MTQ6MDcuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy93aW5kb3cuYwkyMDA3LTA0LTIzIDEyOjE0OjA3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE4LDYgKzE4LDggQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSAibGVhZnBhZC5oIgorKyNpbmNsdWRlIDxsaWJvd2wvb3dsd2luZG93bWVudS5oPgorKworIC8qCisgc3RhdGljIHZvaWQgY2Jfc2Nyb2xsX2V2ZW50KEd0a0FkanVzdG1lbnQgKmFkaiwgR3RrV2lkZ2V0ICp2aWV3KQorIHsKK0BAIC01Miw3ICs1NCw2IEBACisgCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7CisgCQorIAltZW51YmFyID0gY3JlYXRlX21lbnVfYmFyKHdpbmRvdyk7CistCWd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBtZW51YmFyLCBGQUxTRSwgRkFMU0UsIDApOworIAkKKyAJc3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc3cpLAorCistLS0gdG1wL3NyYy9tYWluLmMub3JpZwkyMDA3LTA0LTIzIDEyOjE1OjAzLjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvbWFpbi5jCTIwMDctMDQtMjMgMTI6MTU6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjQ0LDYgKzI0NCw3IEBACisgCUNvbmYgKmNvbmY7CisgCUd0a0l0ZW1GYWN0b3J5ICppZmFjdG9yeTsKKyAJZ2NoYXIgKnN0ZGluX2RhdGEgPSBOVUxMOworKwlHdGtXaWRnZXQgKm1lbnU7CisgCQorIAliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NBTEVESVIpOworIAliaW5kX3RleHRkb21haW5fY29kZXNldChQQUNLQUdFLCAiVVRGLTgiKTsKK0BAIC0yOTMsNyArMjk0LDEwIEBACisgCQljb25mLT5hdXRvaW5kZW50KTsKKyAJCisgCWd0a193aWRnZXRfc2hvd19hbGwocHViLT5tdy0+d2luZG93KTsKKysJb3dsX3NldF93aW5kb3dfbWVudSAoR1RLX1dJTkRPVyhwdWItPm13LT53aW5kb3cpLAorKwkJCSAgICAgR1RLX01FTlUocHViLT5tdy0+bWVudWJhcikpOworKwkKKyAJZ19mcmVlKGNvbmYtPmZvbnRuYW1lKTsKKyAJZ19mcmVlKGNvbmYpOworIAkKKworLS0tIHRtcC9zcmMvTWFrZWZpbGUuYW0ub3JpZwkyMDA3LTA0LTIzIDEyOjE3OjU0LjAwMDAwMDAwMCArMDEwMAorKysrIHRtcC9zcmMvTWFrZWZpbGUuYW0JMjAwNy0wNC0yMyAxMjoxNzo1NC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNyw0ICsyNyw0IEBACisgCWkxOG4uaAorIAorIGxlYWZwYWRfQ0ZMQUdTICA9ICQoR1RLX0NGTEFHUykgJChHTk9NRVBSSU5UX0NGTEFHUykKKy1sZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykKKytsZWFmcGFkX0xEQUREICAgPSAkKEdUS19MSUJTKSAkKElOVExMSUJTKSAkKEdOT01FUFJJTlRfTElCUykgLWxvd2wKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2xlYWZwYWRfMC44LjE4LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxNTE0OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIEdUSysgVGV4dCBFZGl0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vdGFyb3QuZnJlZXNoZWxsLm9yZy9sZWFmcGFkLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sZWFmcGFkLmg7ZW5kbGluZT0yMDttZDU9ZDNkNmE4OWY1ZTYxZThiMTNiZGVhNTM3NTExYmExZmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3V0aWxzLmM7ZW5kbGluZT0yMDttZDU9MGQyY2M2NTg0YmEzMjAyNDQ4YmIyNzRmNjI3Mzk1NzEiCisKK0RFUEVORFMgPSAiZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbGlib3dsIgorIyBUaGUgbGlib3dsIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL2xlYWZwYWQuZGVza3RvcCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI1NGE3MmZjNjc1MDVlM2FhNTI4ODRjNzI5Y2Q3Yjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk1OWQyMmFlMDdmMjI4MDNiYzY2ZmY0MGQzNzNhODU0NTMyYTZlNDczMjY4MGJmOGE5NmEzZmJjYjlmODBhMmMiCitQUiA9ICJyMiIKKworU1JDX1VSSV9hcHBlbmRfcG9reSA9ICIgZmlsZTovL293bC1tZW51LnBhdGNoO2FwcGx5PXllcyAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1jaG9vc2VyIC0tZGlzYWJsZS1lbWFjcyAtLWRpc2FibGUtcHJpbnQiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xlYWZwYWQuZGVza3RvcCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9sZWFmcGFkLmRlc2t0b3AiCisKK1BBQ0tBR0VTICs9ICJsZWFmcGFkLXN0b2NrLWljb25zIgorRklMRVNfbGVhZnBhZC1zdG9jay1pY29ucyA9ICIke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjNDdkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbGlib3dsL2xpYm93bF9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJPcGVuZWRIYW5kIFdpZGdldCBMaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bHBhbmVkLmg7ZW5kbGluZT0yMDttZDU9N2ZlZjg0NGM0Y2MwMWIxMDU0MWE3YWI2YWI1OTcxYWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bHRyZWVtb2RlbHNsaWNlLmg7ZW5kbGluZT0yMDttZDU9YTU0MjFmMmNkYWU4ZGViZTVlNGM0OGMwOWEwMmJlYjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3dsL293bGNvbG91cnN3YXRjaC5oO2VuZGxpbmU9MjQ7bWQ1PTA2M2M0MTVjNTg3MTlkNTM2OTkwY2E4ZjYwNmI1NzMwIgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImd0aysiCitTUkNSRVYgPSAiNmViYzhhYzhmODU3NTI3OGRkNDBhNTM1Y2FkZWZhMjYzNzRlNDRiMSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBSZXF1aXJlcyBnZGsvZ2RreC5oIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU2OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL2ZpbGVzL25vLWhhbmRlZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCShyZXZpc2lvbiAxNjE0KQorKysrIGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCSh3b3JraW5nIGNvcHkpCitAQCAtMzAwLDExICszMDAsMTMgQEAKKyAgICAgZ3RrX2ZvbnRfYnV0dG9uX3NldF9mb250X25hbWUgKEdUS19GT05UX0JVVFRPTiAoZm9udF9idXR0b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbmZfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKKyAgIH0gZWxzZSBpZiAoc3RyY21wIChrZXksIEhBTkRFRF9LRVkpID09IDApIHsKKysjaWYgMAorICAgICBHRW51bVZhbHVlICplOworICAgICBlID0gZ19lbnVtX2dldF92YWx1ZV9ieV9uYW1lIChnX3R5cGVfY2xhc3NfcmVmIChHVEtfVFlQRV9DT1JORVJfVFlQRSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25mX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7CisgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUgKEdUS19UT0dHTEVfQlVUVE9OIChoYW5kZWRfY2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52YWx1ZSA9PSBHVEtfQ09STkVSX1RPUF9SSUdIVCk7CisrI2VuZGlmCisgICB9CisgfQorIAorQEAgLTM5NSwxMiArMzk3LDEzIEBACisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYWxpZ24pLCBmb250X2J1dHRvbik7CisgCisgICAvKiBMZWZ0L1JpZ2h0IEhhbmRlZCAqLworLSAgCisrI2lmIDAKKyAgIGZyYW1lID0gbmV3X2ZyYW1lIChfKCJPcmllbnRhdGlvbiIpLCAmYWxpZ24pOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChib3gpLCBmcmFtZSwgVFJVRSwgVFJVRSwgMCk7CisgICBoYW5kZWRfY2hlY2sgPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX21uZW1vbmljIChfKCJfTGVmdC1oYW5kZWQiKSk7CisgICBnX3NpZ25hbF9jb25uZWN0IChoYW5kZWRfY2hlY2ssICJ0b2dnbGVkIiwgR19DQUxMQkFDSyAob25faGFuZGVkX3NldCksIE5VTEwpOworICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGFsaWduKSwgaGFuZGVkX2NoZWNrKTsKKysjZW5kaWYKKyAKKyAgIGdjb25mX2NsaWVudF9hZGRfZGlyIChnY29uZiwgSU5URVJGQUNFX0RJUiwgR0NPTkZfQ0xJRU5UX1BSRUxPQURfT05FTEVWRUwsIE5VTEwpOworICAgZ19zaWduYWxfY29ubmVjdCAoZ2NvbmYsICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAob25fZ2NvbmZfdmFsdWVfY2hhbmdlZCksIE5VTEwpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNzNhNGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvbWF0Y2hib3gtY29uZmlnLWd0a19naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBHVEsrIHRoZW1lIGNvbmZpZ3VyYXRpb24gYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBlYXJhbmNlL21iLWFwcGVhcmFuY2UuYztlbmRsaW5lPTI1O21kNT1lYTkyMzMzY2Y4YTY4MDI2MzlkNjJkODc0YzExNGEyOCIKKworREVQRU5EUyA9ICJnY29uZiBndGsrIgorUkRFUEVORFNfJHtQTn0gPSAic2V0dGluZ3MtZGFlbW9uIgorCitTUkNSRVYgPSAiM2VkNzRkZmI3YzU3YmUwODhhNWFiMzZlNDQ2YzBjY2RlOWZhMTAyOCIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0gXAorICAgICAgICBmaWxlOi8vbm8taGFuZGVkLnBhdGNoO3N0cmlwbGV2ZWw9MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzZXR0aW5ncy1kYWVtb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NzljYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggZGVza3RvcCBmb2xkZXJzIGZvciB0aGUgU2F0byBlbnZpcm9ubWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICIiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKKworU1JDUkVWID0gIjgxMGIwYjA4ZWI3OWU0Njg1MjAyZGEyZWMzNDdiOTkwYmI0NjdlMDciCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThkMmUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wL21hdGNoYm94LWRlc2t0b3BfZ2l0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggV2luZG93IE1hbmFnZXIgRGVza3RvcCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlidGFrdS9lZ2dzZXF1ZW5jZS5oO2VuZGxpbmU9MjA7bWQ1PWI5MWY2OGY3NjQyYTE0NTlmYTFmNGM5ZGY5NGE4ZjE1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kZXNrdG9wLmM7ZW5kbGluZT0yMDttZDU9MzZjOWJmMjk1ZTYwMDdmMzQyMzA5NWY0MDVhZjVhMmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTE5O21kNT0yMDQ0MjQ0Zjk3YTE5NWMyNWI3ZGM2MDJhYzdlOWEwMCIKKworREVQRU5EUyA9ICJndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMiCitTRUNUSU9OID0gIngxMS93bSIKK1NSQ1JFViA9ICI3MWUzZTZlMDQyNzFlOWQ1YTE0ZjFjMjMxZWYxMDBjN2YzMjAxMzRkIgorUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfS0yIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS13aXRoLWRidXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy84MG1hdGNoYm94a2V5Ym9hcmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmMTg4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworQ01EPSIiCisKK2lmIFsgIiRIQVZFX0tFWUJPQVJEIiA9ICIwIiBdOyB0aGVuCisgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCIKK2VsaWYgWyAiJERJU1BMQVlfQ0FOX1JPVEFURSIgPSAiMSIgXTsgdGhlbgorICAgIGlmIFsgIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiA9ICIxIiAtYSAiJEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFIiA9ICIwIiBdOyB0aGVuCisgICAgICAgIENNRD0ibWF0Y2hib3gta2V5Ym9hcmQgLWQgLW8gbGFuZHNjYXBlIgorICAgIGVsaWYgWyAiJEhBVkVfS0VZQk9BUkRfTEFORFNDQVBFIiA9ICIxIiAtYSAiJEhBVkVfS0VZQk9BUkRfUE9SVFJBSVQiID0gIjAiIF07IHRoZW4KKyAgICAgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCAtbyBwb3J0cmFpdCIKKyAgICBmaQorZmkKKworaWYgWyAiJENNRCIgXTsgdGhlbgorICAgICMgRGVsYXkgdG8gbWFrZSBzdXJlIHRoZSB3aW5kb3cgbWFuYWdlciBpcyBhY3RpdmUKKyAgICAjIGJ5IHdhaXRpbmcgZm9yIHRoZSBkZXNrdG9wIHRvIHNheSBpdHMgZmluaXNoZWQgbG9hZGluZworICAgIGRidXMtd2FpdCBvcmcubWF0Y2hib3hfcHJvamVjdC5kZXNrdG9wIExvYWRlZCAmJiAkQ01EICYKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvc2luZ2xlLWluc3RhbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YjZjNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitNdWx0aXBsZSBtYXRjaGJveC1rZXlib2FyZCBpbnN0YW5jZXMgd291bGQgb2NjdXB5IHdob2xlIHNjcmVlbiBhbmQgY2F1c2UgWAord2luZG93IHNlZ2ZhdWx0KEJ1ZyA1MDkpLiBNYWtpbmcgbWF0Y2hib3gta2V5Ym9hcmQgc2luZ2xldG9uIGlzIG9uZSB3b3JrCithcm91bmQuCisKK1RoaXMgcGF0Y2ggYWxsb3cgb25seSBvbmUgaW5zdGFuY2Ugb2YgbWF0Y2hib3gta2V5Ym9hcmQgYmFzZWQgb24gc29tZSBtZWNoYW5pc20KK2luIG1hdGNoYm94LWRlc2t0b3AuIEluIGZ1dHVyZSwgYW4gYXBwbGV0IGFuZCBHVEstSU0gbW9kdWxlcyBpbgorbWF0Y2hib3gta2V5Ym9hcmQgY2FuIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBtYXAvdW5tYXAgdGhlIHZpcnR1YWwga2V5Ym9hcmQKK29uIGRlbWFuZC4KKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IG1hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYXRjaGJveC1rZXlib2FyZC5vcmlnL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AJMjAxMC0xMi0yMiAyMDo0MTo0MC4wMDAwMDAwMDAgKzA4MDAKKysrKyBtYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZC5kZXNrdG9wCTIwMTAtMTItMjIgMjA6NDI6MTIuMDAwMDAwMDAwICswODAwCitAQCAtNiwzICs2LDUgQEAKKyBJY29uPW1hdGNoYm94LWtleWJvYXJkLnBuZworIENhdGVnb3JpZXM9UGFuZWw7VXRpbGl0eTtNQgorIFgtTUItSU5QVVQtTUVDSEFOU0lNPVRydWUKKytYLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKKytTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzMjFkMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggdmlydHVhbCBrZXlib2FyZCBmb3IgWDExIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitTRUNUSU9OID0gIngxMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYXRjaGJveC1rZXlib2FyZC5oO2VuZGxpbmU9MTc7bWQ1PTlkNjU4NmM2OWU0YTkyNmYzY2IwYjQ0MjVmMjRiYTNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGxldC9hcHBsZXQuYztlbmRsaW5lPTE4O21kNT00YTBmNzIxNzI0NzQ2YjE0ZDk1YjUxZGRkNDJiOTVlNyIKKworREVQRU5EUyA9ICJsaWJmYWtla2V5IGV4cGF0IGxpYnhmdCBndGsrIG1hdGNoYm94LXBhbmVsLTIiCisKK1NSQ1JFViA9ICIyMTdmMWJmZTE0YzQxY2Y3ZTI5MWQwNGE2M2FhMmQ3OWNjMTNkMDYzIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59O2JyYW5jaD1tYXRjaGJveC1rZXlib2FyZC0wLTEgXAorICAgICAgICAgICBmaWxlOi8vc2luZ2xlLWluc3RhbmNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzgwbWF0Y2hib3hrZXlib2FyZC5zaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWltbW9kdWxlcy1jYWNoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieGZ0LCBsaWJmYWtla2V5IGFuZCBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtY2Fpcm8gLS1lbmFibGUtZ3RrLWltIC0tZW5hYmxlLWFwcGxldCIKKworUEFDS0FHRVMgKz0gIiR7UE59LWltICR7UE59LWFwcGxldCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyBcCisJICAgICAgICR7c3lzY29uZmRpcn0gXAorCSAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisJICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyBcCisJICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gta2V5Ym9hcmQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9pbW1vZHVsZXMvLmRlYnVnIgorCitGSUxFU18ke1BOfS1pbSA9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8qLnNvIgorCitGSUxFU18ke1BOfS1hcHBsZXQgPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyouc28iCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vODBtYXRjaGJveGtleWJvYXJkLnNoICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKworCXJtIC1mICR7RH0ke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8qLmxhCisJcm0gLWYgJHtEfSR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhCit9CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA9ICIke1BOfS1pbSIKKworUkRFUEVORFNfJHtQTn0gPSAiZm9ybWZhY3RvciBkYnVzLXdhaXQiCitSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1hcHBsZXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YmE5YTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitEb24ndCB3YXJuIGlmIHRoZSBtYWNoaW5lIGRvZXNuJ3QgYWN0dWFsbHkgaGF2ZSBhIGJhdHRlcnksIG9yIGlmIHRoZSBhcHBsZXRzCitzdHJpbmcgY29udGFpbnMgY29uc2VjdXRpdmUgc2VwYXJhdG9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYworaW5kZXggNjUxNWNiMC4uYzQ0ZGQxMiAxMDA2NDQKKy0tLSBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFjcGkuYworKysrIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCitAQCAtMTQsOCArMTQsNiBAQCBpbnQgYmF0dF9zdGF0ZSwgYWNfc3RhdGU7CisgaW50IHBtX3N1cHBvcnQodm9pZCkKKyB7CisgCWlmKGNoZWNrX2FjcGlfc3VwcG9ydCgpID09IE5PVF9TVVBQT1JURUQpeworLQkJZ193YXJuaW5nKCJObyBBQ1BJIHN1cHBvcnRcbiIpOworLQorIAkJcmV0dXJuIDA7CisgCX0KKyAKK0BAIC0zMiw4ICszMCw5IEBAIGNvbnN0IGNoYXIqIHBtX2JhdHRlcnlfaWNvbih2b2lkKQorIAljb25zdCBjaGFyICppY29uOworIAliYXR0ZXJ5X3QgKmJpbmZvOworIAorKyAgICAgICAgLyogTm8gYmF0dGVyeSBhdmFpbGFibGUgKG5vdCBwcmVzZW50LCBkaXNhYmxlZCwgb3Igc29tZXRoaW5nCisrICAgICAgICAgICBlbHNlLiBTaWxlbnRseSBkbyBub3RoaW5nLiAqLworIAlpZiAoYmF0dF9zdGF0ZSAhPSBTVUNDRVNTKSB7CistCQlnX3dhcm5pbmcoIkNvdWxkbnQgaW5pdGlhbGl6ZSBBQ1BJIGJhdHRlcnlcbiIpOworIAkJcmV0dXJuIE5VTEw7CisgCX0KKyAKK2RpZmYgLS1naXQgYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCitpbmRleCA1NDY3NDM4Li4yZjM5Y2I2IDEwMDY0NAorLS0tIGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKKysrKyBiL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jCitAQCAtMTAsOCArMTAsNiBAQAorIGludCBwbV9zdXBwb3J0KHZvaWQpCisgeworIAlpZiAoMSA9PSBhcG1fZXhpc3RzICgpKSB7CistICAgICAgICAgICAgICAgIGdfd2FybmluZyAoIk5vIEFQTSBzdXBwb3J0Iik7CistCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorIAorZGlmZiAtLWdpdCBhL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMgYi9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCitpbmRleCAyZDhjYWZkLi44MjhhMzZkIDEwMDY0NAorLS0tIGEvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYworKysrIGIvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYworQEAgLTExMCwxMCArMTEwLDE1IEBAIGxvYWRfYXBwbGV0cyAoY29uc3QgY2hhciAgICAqYXBwbGV0c19kZXNjLAorICAgICAgICAgYXBwbGV0cyA9IGdfc3Ryc3BsaXQgKGFwcGxldHNfZGVzYywgIiwiLCAtMSk7CisgCisgICAgICAgICBmb3IgKGkgPSAwOyBhcHBsZXRzW2ldOyBpKyspIHsKKysgICAgICAgICAgICAgICAgY2hhciAqczsKKyAgICAgICAgICAgICAgICAgY2hhciAqKmJpdHM7CisgICAgICAgICAgICAgICAgIEd0a1dpZGdldCAqYXBwbGV0OworIAorLSAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAoYXBwbGV0c1tpXSwgIjoiLCAyKTsKKysgICAgICAgICAgICAgICAgcyA9IGFwcGxldHNbaV07CisrICAgICAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgc1swXSA9PSAnXDAnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICAgICAgICBiaXRzID0gZ19zdHJzcGxpdCAocywgIjoiLCAyKTsKKyAKKyAgICAgICAgICAgICAgICAgYXBwbGV0ID0gbG9hZF9hcHBsZXQgKGJpdHNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzWzFdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDczNjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvbWF0Y2hib3gtcGFuZWwtMl9naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJTaW1wbGUgR1RLKyBiYXNlZCBwYW5lbCBmb3IgaGFuZGhlbGQgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmg7ZW5kbGluZT0xMDttZDU9MGI3ZGIyOGY0YjY4NjNmYjg1M2QwNDY3ZTU5MDAxOWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0cy9zdGFydHVwL3N0YXJ0dXAuYztlbmRsaW5lPTIyO21kNT1iMGE2NGZiZWYzMDk3ZDc5ZjgyNjRlNjkwN2E5OGYwMyIKKworREVQRU5EUyA9ICJnbm9tZS1jb21tb24gZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBkYnVzIGRidXMtZ2xpYiIKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhY3BpIiwgImxpYmFjcGkiLCAiIixkKX0iCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgImFwbWQiLCAiIixkKX0iCisKKyMgVGhlIHN0YXJ0dXAtbm90aWZpY2F0aW9uIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICIyNmEzYTY3YjQxYzUwZTBhZTE2M2Q4ZmU4NmNjZjdhMGYwYTY3MWFlIgorUFYgPSAiMi4wK2dpdCR7U1JDUFZ9IgorCitSUFJPVklERVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCitSUkVQTEFDRVNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LXBhbmVsIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gLS1lbmFibGUtZGJ1cyIKK0VYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAiLS13aXRoLWJhdHRlcnk9YWNwaSIsICIiLGQpfSIKK0VYVFJBX09FQ09ORiArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICItLXdpdGgtYmF0dGVyeT1hcG0iLCAiIixkKX0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1wYW5lbC9icmlnaHRuZXNzLyoucG5nIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LXBhbmVsL3N0YXJ0dXAvKi5wbmcgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2U0ODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvL3Nlc3Npb24KQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZworCitpZiBbICIkSEFWRV9UT1VDSFNDUkVFTiIgPSAiMSIgXTsgdGhlbgorICAgIFNIT1dDVVJTT1I9Im5vIgorZWxzZQorICAgIFNIT1dDVVJTT1I9InllcyIKK2ZpCisKK2lmIFsgIiRIQVZFX0tFWUJPQVJEIiA9ICIxIiBdOyB0aGVuCisgICAgS0VZQk9BUkRfQVBQTEVUPSIiCitlbHNlCisgICAgS0VZQk9BUkRfQVBQTEVUPSJrZXlib2FyZCIKK2ZpCisKKyMgVGVsbCBHVEsrMyB3ZSByZWFsbHkgd2FudCBzZXJ2ZXIgc2lkZSBkZWNvcmF0aW9ucywgZXZlbiB3aXRoCisjIEd0a0hlYWRlckJhciB1c2luZyBhcHBsaWNhdGlvbnM6IFdpdGhvdXQgdGhhdCBtYi1wYW5lbCB3aWxsIHJlbmRlcgorIyBvbiB0b3Agb2YgdGhlIGNsaWVudCBzaWRlIGRlY29yYXRpb25zLgorZXhwb3J0IEdUS19DU0Q9MAorCittYXRjaGJveC1kZXNrdG9wICYKKworIyBMaW5lcyBjb250YWluaW5nIGZlYXR1cmUtW2Zvb10gYXJlIHJlbW92ZWQgYXQgYnVpbGQgdGltZSBpZiB0aGUgbWFjaGluZQorIyBkb2Vzbid0IGhhdmUgdGhlIGZlYXR1cmUgImZvbyIuCisKK1NUQVJUX0FQUExFVFM9c2hvd2Rlc2t0b3Asd2luZG93c2VsZWN0b3IKK0VORF9BUFBMRVRTPWNsb2NrLGJhdHRlcnksJEtFWUJPQVJEX0FQUExFVCxzeXN0cmF5LHN0YXJ0dXAtbm90aWZ5LG5vdGlmeQorRU5EX0FQUExFVFM9b3Blbm1va28tcGFuZWwtZ3NtLCRFTkRfQVBQTEVUUyAjIGZlYXR1cmUtcGhvbmUKKworbWF0Y2hib3gtcGFuZWwgLS10aXRsZWJhciAtLXN0YXJ0LWFwcGxldHMgJFNUQVJUX0FQUExFVFMgLS1lbmQtYXBwbGV0cyAkRU5EX0FQUExFVFMgJgorCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIC10aGVtZSBTYXRvIC11c2VfZGVza3RvcF9tb2RlIGRlY29yYXRlZCAtdXNlX2N1cnNvciAkU0hPV0NVUlNPUiAkQApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRlMThhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJDdXN0b20gTWF0Y2hib3ggc2Vzc2lvbiBmaWxlcyBmb3IgdGhlIFNhdG8gZW52aXJvbm1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2Vzc2lvbjtlbmRsaW5lPTM7bWQ1PWY4YTVjNWI5YzI3OWU1MmRjMDk0ZDEwZTExYzJiZTYzIgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ2NvbmYtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZm9ybWZhY3RvciBndGstc2F0by1lbmdpbmUgbWF0Y2hib3gtdGhlbWUtc2F0byBndGstdGhlbWUtc2F0byBtYXRjaGJveC1wYW5lbC0yIG1hdGNoYm94LWRlc2t0b3Atc2F0byBtYXRjaGJveC1zZXNzaW9uIGdjb25mIgorUFIgPSAicjMwIgorCisjIFRoaXMgcGFja2FnZSBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYmVjYXVzZSB0aGUgc2Vzc2lvbiBzY3JpcHQgaXMgbW9kaWZpZWQKKyMgYmFzZWQgb24gdGhlIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbWF0Y2hib3gtdGhlbWUtc2F0byByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImZpbGU6Ly9zZXNzaW9uIgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCSMgVGhpcyBpcyB0aGUgc2V0IG9mIG1hY2hpbmUgZmVhdHVyZXMgdGhhdCB0aGUgc2NyaXB0IGhhcyBtYXJrZXJzIGZvcgorCUZFQVRVUkVTPSJwaG9uZSIKKwlTQ1JJUFQ9IiR7U30vc2VkZGVyIgorCXJtIC1mICRTQ1JJUFQKKwl0b3VjaCAkU0NSSVBUCisJZm9yIEZFQVQgaW4gJEZFQVRVUkVTOyBkbworCQlpZiBlY2hvICR7TUFDSElORV9GRUFUVVJFU30gfCBhd2sgIi8kRkVBVC8ge2V4aXQgMX0iOyB0aGVuCisJCQllY2hvICIvZmVhdHVyZS0kRkVBVC9kIiA+PiAkU0NSSVBUCisJCWZpCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbWF0Y2hib3gKKwlzZWQgLWYgIiRTQ1JJUFQiICR7U30vc2Vzc2lvbiA+ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCisgICAgICAgIGNobW9kICt4ICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveC9zZXNzaW9uCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2V0X3ZhbHVlKCkgeworCQkjdHlwZSwgbmFtZSwgdmFsdWUKKwkJZ2NvbmZ0b29sLTIgLS1jb25maWctc291cmNlPXhtbDo6JEQke3N5c2NvbmZkaXJ9L2djb25mL2djb25mLnhtbC5kZWZhdWx0cyAtLWRpcmVjdCAtLXR5cGUgJDEgLS1zZXQgL2Rlc2t0b3AvcG9reS9pbnRlcmZhY2UvJDIgIiQzIgorCX0KKwlzZXRfdmFsdWUgc3RyaW5nIHRoZW1lIFNhdG8KKwlzZXRfdmFsdWUgc3RyaW5nIGljb25fdGhlbWUgU2F0bworCXNldF92YWx1ZSBib29sIHRvdWNoc2NyZWVuIHRydWUKKwlzZXRfdmFsdWUgc3RyaW5nIGZvbnRfbmFtZSAiU2FucyA5IgorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRlcm1pbmFsL21hdGNoYm94LXRlcm1pbmFsX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWZkMTUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBHVEsrIHRlcm1pbmFsIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT0yMDttZDU9OTZlMzkxNzZkOWUzNTU2MzlhMGI4YjFjN2E4NDA4MjAiCisKK0RFUEVORFMgPSAiZ3RrKyB2dGUiCitTRUNUSU9OID0gIngxMS91dGlscyIKK1NSQ1JFViA9ICI0NTJiY2EyNTM0OTJhOTdhNTg3ZjQ0MDI4OWI5YWIyN2QyMTczNTNlIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0N2UxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIk1hdGNoYm94IHdpbmRvdyBtYW5hZ2VyIFNhdG8gdGhlbWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJDQy1CWS1TQS0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hYWU4NmJiMzRiMGE4MzcxNmNhMDlmNGU3ODNkNmJhNCIKKworREVQRU5EUyA9ICJtYXRjaGJveC13bSIKK1NFQ1RJT04gPSAieDExL3dtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3RoZW1lcyIKKworIyBUaGUgbWF0Y2hib3gtd20gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc4NmRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fMC4xLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBtYXRjaGJveC10aGVtZS1zYXRvLmluYworCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG9reWxpbnV4Lm9yZy9yZWxlYXNlcy9zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8tMC4xLnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcyYWUyNzJlZjc4MDMxNDFhM2RjYjY5ZTY3MGNmZjk3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjViNTlmOTY0NmVkYmZiOTA3YTMwOTMzMmRiM2JkNmZhNzA4MGRjMWZlMjRkZjU0OTQ4MGNmYWU3ZDk3NGEzZmIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzNTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvX2dpdC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG1hdGNoYm94LXRoZW1lLXNhdG8uaW5jCisKK1NSQ1JFViA9ICJmNzJjZjRlZDdkNzFhZDllNDdiMGYyZDNkYmM1OTNiYzJmM2U3NmY4IgorUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWF0Y2hib3gtc2F0byIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdxdmdhJywgJy0td2l0aC1tb2RlPXF2Z2EnLCAnJyxkKX0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY3OWRiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by5iYgpAQCAtMCwwICsxLDY2IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlNhdG8gZGVza3RvcCIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjMzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24geDExdm5jCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9ICIke1BOfSAke1BOfS1iYXNlICR7UE59LWFwcHMgJHtQTn0tZ2FtZXMiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1BOfS1iYXNlIFwKKyAgICAke1BOfS1hcHBzIFwKKyAgICAke1BOfS1nYW1lcyBcCisgICAgIgorCitORVRXT1JLX01BTkFHRVIgPz0gImNvbm5tYW4tZ25vbWUiCitORVRXT1JLX01BTkFHRVJfbGliYy11Y2xpYmMgPSAiIgorCitTVU1NQVJZXyR7UE59LWJhc2UgPSAiU2F0byBkZXNrdG9wIC0gYmFzZSBwYWNrYWdlcyIKK1JERVBFTkRTXyR7UE59LWJhc2UgPSAiXAorICAgIG1hdGNoYm94LWRlc2t0b3AgXAorICAgIG1hdGNoYm94LXNlc3Npb24tc2F0byBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQgXAorICAgIG1hdGNoYm94LWtleWJvYXJkLWFwcGxldCBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQtaW0gXAorICAgIG1hdGNoYm94LWNvbmZpZy1ndGsgXAorICAgIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgXAorICAgIHNhdG8taWNvbi10aGVtZSBcCisgICAgc2V0dGluZ3MtZGFlbW9uIFwKKyAgICBndGstc2F0by1lbmdpbmUgXAorICAgIHNodXRkb3duLWRlc2t0b3AgXAorICAgIGxpYnNkbCBcCisgICAgJHtORVRXT1JLX01BTkFHRVJ9IFwKKyAgICB1ZGV2LWV4dHJhY29uZiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8tc2VydmVyIHB1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0bycsICcnLCBkKX0gXAorICAgICIKKworIyBwY21hbmZtIGRvZXNuJ3Qgd29yayBvbiBtaXBzCitGSUxFTUFOQUdFUiA/PSAicGNtYW5mbSIKK0ZJTEVNQU5BR0VSX21pcHMgPz0gIiIKKworV0VCID89ICIiCisjV0VCID0gImVwaXBoYW55IgorCitTVU1NQVJZXyR7UE59LWFwcHMgPSAiU2F0byBkZXNrdG9wIC0gYXBwbGljYXRpb25zIgorUkRFUEVORFNfJHtQTn0tYXBwcyA9ICJcCisgICAgbGVhZnBhZCBcCisgICAgZ3N0LXBsYXllci1iaW4gXAorICAgIHgxMXZuYyBcCisgICAgbWF0Y2hib3gtdGVybWluYWwgXAorICAgIHNhdG8tc2NyZWVuc2hvdCBcCisgICAgJHtGSUxFTUFOQUdFUn0gXAorICAgICR7V0VCfSBcCisgICAgIgorCitTVU1NQVJZXyR7UE59LWdhbWVzID0gIlNhdG8gZGVza3RvcCAtIGdhbWVzIgorUkRFUEVORFNfJHtQTn0tZ2FtZXMgPSAiXAorICAgIG9oLXB1enpsZXMgXAorICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTU1OTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLWRpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5MjFhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1yZWd1bGFyLnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1yZWd1bGFyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTc3YThlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLXJlZ3VsYXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLW1pbWUtdGV4dC1wbGFpbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlNGJhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL25vLWRlc2t0b3AucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzZDZkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK0Rpc2FibGUgdGhlIGRlc2t0b3AgcHJlZmVyZW5jZXMgbGF1bmNoZXIgYXMgd2UgZG9uJ3QgdXNlIHRoZSBwY21hbmZtIGRlc2t0b3AgaW4KK1NhdG8uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcCBiL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcAoraW5kZXggY2NmOGFiYi4uM2Y2ZmMxYyAxMDA2NDQKKy0tLSBhL2RhdGEvcGNtYW5mbS1kZXNrdG9wLXByZWYuZGVza3RvcC5pbgorKysrIGIvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wLmluCitAQCAtNywzICs3LDQgQEAgRXhlYz1wY21hbmZtIC0tZGVza3RvcC1wcmVmCisgU3RhcnR1cE5vdGlmeT10cnVlCisgVGVybWluYWw9ZmFsc2UKKyBOb3RTaG93SW49R05PTUU7WEZDRTtLREU7CisrTm9EaXNwbGF5PXRydWUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL3BjbWFuZm1fMS4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2NzMwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiRmFzdCBsaWdodHdlaWdodCB0YWJiZWQgZmlsZW1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vcGNtYW5mbS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BjbWFuZm0uaDtlbmRsaW5lPTIyO21kNT00MTdiMzg1NTc3MWEzYTg3ZjhhZDc1M2Q5OTQ0OTFmMCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3NlYWwtZ3RrLWNvbXBhdC5oO2VuZGxpbmU9MjE7bWQ1PTQ2OTIyYzg2OTFmNThkMTI0Zjk0MjBmZTE2MTQ5Y2UyIgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ3RrKyBzdGFydHVwLW5vdGlmaWNhdGlvbiBsaWJmbSBpbnRsdG9vbC1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9wb2t5ID0gIiBsaWJvd2wiCisKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YWFyY2g2NC4qfGFybS4qfG1pcHMuKnxwb3dlcnBjLip8c2guKiktKGxpbnV4fGZyZWVic2QuKiknCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vcGNtYW5mbS0ke1BWfS50YXIueHogXAorCSAgIGZpbGU6Ly9nbm9tZS1mcy1kaXJlY3RvcnkucG5nIFwKKwkgICBmaWxlOi8vZ25vbWUtZnMtcmVndWxhci5wbmcgXAorCSAgIGZpbGU6Ly9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nIFwKKwkgICBmaWxlOi8vZW1ibGVtLXN5bWJvbGljLWxpbmsucG5nIFwKKwkgICBmaWxlOi8vbm8tZGVza3RvcC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImM5OTM0MDJkNDA3YjBhM2ZjMDc2Zjg0MmFjMWJjNWM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmYThkODJmYzYzYmUxNDcwNDUxNzRiZWYwNzQ4MDdlMWUzMmNlOGM2YmY0ZGJkOGZhZDQ5ZTI2MGJjZjYzODAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcy8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyoucG5nICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vcGNtYW5mbSIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gImFkd2FpdGEtaWNvbi10aGVtZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0by81MC1zYXRvLmNvbmYgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8vNTAtc2F0by5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NDkyZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1bHNlYXVkaW8tc2F0by9wdWxzZWF1ZGlvLWNsaWVudC1jb25mLXNhdG8vNTAtc2F0by5jb25mCkBAIC0wLDAgKzEsNyBAQAorIyBXZSByZWx5IG9uIFB1bHNlQXVkaW8ncyBhdXRvc3Bhd24gZmVhdHVyZSB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSBkYWVtb24KKyMgaW4gU2F0by4gVGhlIGdyYXBoaWNhbCBzZXNzaW9uIGluIFNhdG8gcnVucyB1bmRlciByb290LCBob3dldmVyLCBhbmQKKyMgUHVsc2VBdWRpbyBkaXNhYmxlcyBhdXRvc3Bhd25pbmcgZm9yIHJvb3QgYnkgZGVmYXVsdC4gSW4gYSBub3JtYWwgc2V0dXAgaXQncworIyBub3QgZGVzaXJhYmxlIHRvIGF1dG9zcGF3biBmb3Igcm9vdCwgYmVjYXVzZSBpdCBjYW4gZWFzaWx5IGludGVyZmVyZSB3aXRoCisjIG90aGVyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcywgYnV0IGluIFNhdG8gdGhlcmUgYXJlIG5vIG90aGVyIHVzZXJzLCBzbworIyBpdCdzIE9LIHRvIGVuYWJsZSB0aGlzIGluIFNhdG8uCithbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QgPSB5ZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvXzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3MzM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiL2V0Yy9wdWxzZS9jbGllbnQuY29uZiB0YWlsb3JlZCBmb3IgU2F0byIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovLzUwLXNhdG8uY29uZiIKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vNTAtc2F0by5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQvNTAtc2F0by5jb25mCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYuZC81MC1zYXRvLmNvbmYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kLzUwLXNhdG8uY29uZiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzLzAwMDEtVXNlLWxhYnMtaW5zdGVhZC1vZi1hYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzZDFkZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gOTgwOGRjMDllMDg5MzdjOWJmZmQ4NThkM2RlZDQyODIyNWE0MzEyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDk6MDI6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gVXNlIGxhYnMgaW5zdGVhZCBvZiBhYnMKKworY2x1ZXZhbHMgaXMgYXJyYXkgb2YgbG9uZ3Mgc28gd2UgaGF2ZSB0byB1c2UgbGFicygpIGluc3RlYWQgb2YgYWJzKCkKK3NpbmNlIGFicygpIHJldHVybnMgaW50CisKK0ZpeGVzCisKK2tlZW4uYzoxNDU4OjE3OiBlcnJvcjogYWJzb2x1dGUgdmFsdWUgZnVuY3Rpb24gJ2FicycgZ2l2ZW4gYW4gYXJndW1lbnQKK29mIHR5cGUgJ2xvbmcnIGJ1dCBoYXMgcGFyYW1ldGVyIG9mIHR5cGUgJ2ludCcgd2hpY2ggbWF5IGNhdXNlCit0cnVuY2F0aW9uIG9mIHZhbHVlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisga2Vlbi5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2tlZW4uYyBiL2tlZW4uYworaW5kZXggYTZhNzIzOC4uMTYzMTk5MiAxMDA2NDQKKy0tLSBhL2tlZW4uYworKysrIGIva2Vlbi5jCitAQCAtMTA0Myw3ICsxMDQzLDcgQEAgZG9uZQorIAkJICAgIGNsdWV2YWxzW2pdICo9IGdyaWRbaV07CisgCQkgICAgYnJlYWs7CisgCQkgIGNhc2UgQ19TVUI6CistCQkgICAgY2x1ZXZhbHNbal0gPSBhYnMoY2x1ZXZhbHNbal0gLSBncmlkW2ldKTsKKysJCSAgICBjbHVldmFsc1tqXSA9IGxhYnMoY2x1ZXZhbHNbal0gLSBncmlkW2ldKTsKKyAJCSAgICBicmVhazsKKyAJCSAgY2FzZSBDX0RJVjoKKyAJCSAgICB7CitAQCAtMTQ1NSw3ICsxNDU1LDcgQEAgc3RhdGljIGludCBjaGVja19lcnJvcnMoY29uc3QgZ2FtZV9zdGF0ZSAqc3RhdGUsIGxvbmcgKmVycm9ycykKKyAJCWNsdWV2YWxzW2pdICo9IHN0YXRlLT5ncmlkW2ldOworIAkJYnJlYWs7CisgCSAgICAgIGNhc2UgQ19TVUI6CistCQljbHVldmFsc1tqXSA9IGFicyhjbHVldmFsc1tqXSAtIHN0YXRlLT5ncmlkW2ldKTsKKysJCWNsdWV2YWxzW2pdID0gbGFicyhjbHVldmFsc1tqXSAtIHN0YXRlLT5ncmlkW2ldKTsKKyAJCWJyZWFrOworIAkgICAgICBjYXNlIENfRElWOgorIAkJeworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9maXgtY29tcGlsaW5nLWZhaWx1cmUtd2l0aC1vcHRpb24tZy1PLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDZmZWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitndGsuYzogZml4IGNvbXBpbGluZyBmYWlsdXJlIHdpdGggb3B0aW9uIC1nIC1PCisKK1RoZXJlIHdlcmUgY29tcGlsaW5nIGZhaWx1cmUgd2l0aCBvcHRpb24gLWcgLU8KKy4uLgorLi8uL2d0ay5jOiBJbiBmdW5jdGlvbiAnY29uZmlndXJlX2FyZWEnOgorLi8uL2d0ay5jOjM5NzoyOiBlcnJvcjogJ2NyJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24gWy1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZF0KKyAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsCisgIF4KKy4vLi9ndGsuYzozODQ6MTQ6IG5vdGU6ICdjcicgd2FzIGRlY2xhcmVkIGhlcmUKKyAgICAgY2Fpcm9fdCAqY3I7CisgICAgICAgICAgICAgIF4KKy4vLi9ndGsuYzogSW4gZnVuY3Rpb24gJ21haW4nOgorLi8uL2d0ay5jOjI5MTE6NjogZXJyb3I6ICdlcnJvcicgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgcG5hbWUsIGVycm9yKTsKKyAgICAgIF4KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCisuLi4KKworSW5pdGlhbGl6ZWQgcG9pbnRlciAnY3InIGFuZCAnZXJyb3InIHdpdGggTlVMTAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ3RrLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrLmMgYi9ndGsuYworaW5kZXggYTJlYmEyYy4uYzU0YmY2MyAxMDA2NDQKKy0tLSBhL2d0ay5jCisrKysgYi9ndGsuYworQEAgLTM4MSw3ICszODEsNyBAQCBzdGF0aWMgdm9pZCBjbGVhcl9iYWNraW5nX3N0b3JlKGZyb250ZW5kICpmZSkKKyAKKyBzdGF0aWMgdm9pZCBzZXR1cF9iYWNraW5nX3N0b3JlKGZyb250ZW5kICpmZSkKKyB7CistICAgIGNhaXJvX3QgKmNyOworKyAgICBjYWlyb190ICpjciA9IE5VTEw7CisgICAgIGludCBpOworIAorICAgICBmZS0+cGl4bWFwID0gZ2RrX3BpeG1hcF9uZXcoZmUtPmFyZWEtPndpbmRvdywgZmUtPnB3LCBmZS0+cGgsIC0xKTsKK0BAIC0yNDgxLDcgKzI0ODEsNyBAQCBjaGFyICpmZ2V0bGluZShGSUxFICpmcCkKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworICAgICBjaGFyICpwbmFtZSA9IGFyZ3ZbMF07CistICAgIGNoYXIgKmVycm9yOworKyAgICBjaGFyICplcnJvciA9IE5VTEw7CisgICAgIGludCBuZ2VuZXJhdGUgPSAwLCBwcmludCA9IEZBTFNFLCBweCA9IDEsIHB5ID0gMTsKKyAgICAgaW50IHRpbWVfZ2VuZXJhdGlvbiA9IEZBTFNFLCB0ZXN0X3NvbHZlID0gRkFMU0UsIGxpc3RfcHJlc2V0cyA9IEZBTFNFOworICAgICBpbnQgc29sbiA9IEZBTFNFLCBjb2xvdXIgPSBGQUxTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvb2gtcHV6emxlcy1vd2wtbWVudS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTJjM2FiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKQEAgLTAsMCArMSwyMDMgQEAKK1RoaXMgcGF0Y2ggZW5hYmxlIG93bCBtZW51LCB3aGljaCBpcyBoaWRkZW4gaW4gdGhlIHRpdGxlIGJhciB0byBzYXZlIHNwYWNlIG9uCitzbWFsbCBzY3JlZW4uIEl0IGhhcyBub3QgYmVlbiB1c2VkIGZvciBhIGxvbmcgdGltZSwgcmViYXNlIG5lZWRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbmFibGUgZmVhdHVyZV0KKworSW5kZXg6IHNyYy9ndGsuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9ndGsuYwkocmV2aXNpb24gMjIpCisrKysgc3JjL2d0ay5jCSh3b3JraW5nIGNvcHkpCitAQCAtMjgsNiArMjgsOCBAQAorICNpbmNsdWRlIDxnZGsvZ2RreC5oPgorICNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KKyAKKysjaW5jbHVkZSA8bGlib3dsL293bHdpbmRvd21lbnUuaD4KKysKKyAjaW5jbHVkZSA8bGlicnN2Zy9yc3ZnLmg+CisgCisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CitAQCAtMTIzNyw2ICsxMjM5LDcgQEAKKyAgICAgfQorIH0KKyAKKysjaWYgMAorIHN0YXRpYyB2b2lkCisgYWRkX3dpZGdldCAoR3RrVUlNYW5hZ2VyICptZXJnZSwKKyAJICAgIEd0a1dpZGdldCAqd2lkZ2V0LAorQEAgLTEyNDcsMTAgKzEyNTAsMTEgQEAKKyAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChib3gsIHdpZGdldCwgRkFMU0UsIEZBTFNFLCAwKTsKKyAKKyAgICAgdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCAoR1RLX1dJREdFVCAoYm94KSk7CistICAgIGd0a193aWRnZXRfc2hvd19hbGwgKHRvcGxldmVsKTsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIEd0a0FjdGlvbkVudHJ5IHRvcGxldmVsX2FjdGlvbnNbXSA9IHsKKysgICAgeyAiVG9wIiwgTlVMTCwgIiIgfSwKKyAgICAgeyAiR2FtZSIsIE5VTEwsIE5fKCJHYW1lIikgfSwKKyAgICAgeyAiU2V0dGluZ3MiLCBOVUxMLCBOXygiU2V0dGluZ3MiKSB9LAorICAgICB7ICJIZWxwIiwgTlVMTCwgTl8oIkhlbHAiKSB9LAorQEAgLTEzMDMsMTEgKzEzMDcsMTMgQEAKKyAJCQlmcm9udGVuZCAqZmUpCisgeworICAgICBHU3RyaW5nICp4bWw7CisrICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworICAgICBnYm9vbGVhbiBwcmVzZXRzID0gRkFMU0U7CisgICAgIEdTTGlzdCAqcmFkaW9fZ3JvdXAgPSBOVUxMOworICAgICBpbnQgaTsKKyAKKy0gICAgeG1sID0gZ19zdHJpbmdfbmV3ICgiPHVpPjxtZW51YmFyPjxwbGFjZWhvbGRlciBuYW1lPVwiVHlwZVBsYWNlaG9sZGVyXCI+IgorKyAgICB4bWwgPSBnX3N0cmluZ19uZXcgKCI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIlRvcE1lbnVcIiBhY3Rpb249XCJUb3BcIj4iCisrCQkJIjxwbGFjZWhvbGRlciBuYW1lPVwiVHlwZVBsYWNlaG9sZGVyXCI+IgorIAkJCSI8bWVudSBuYW1lPVwiU2V0dGluZ3NNZW51XCIgYWN0aW9uPVwiU2V0dGluZ3NcIj4iKTsKKyAKKyAgICAgZm9yIChpID0gMDsgaSA8IG1pZGVuZF9udW1fcHJlc2V0cyhmZS0+bWUpOyBpKyspIHsKK0BAIC0xMzU5LDggKzEzNjUsMTQgQEAKKyAJCQkgIjxtZW51aXRlbSBuYW1lPVwiQ3VzdG9tTWVudVwiIGFjdGlvbj1cIkN1c3RvbVwiLz4iKTsKKyAgICAgfQorICAgICAKKy0gICAgZ19zdHJpbmdfYXBwZW5kICh4bWwsICI8L21lbnU+PC9wbGFjZWhvbGRlcj48L21lbnViYXI+PC91aT4iKTsKKy0gICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgeG1sLT5zdHIsIC0xLCBOVUxMKTsKKysgICAgZ19zdHJpbmdfYXBwZW5kICh4bWwsICI8L21lbnU+PC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51YmFyPjwvdWk+Iik7CisrCisrICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHhtbC0+c3RyLCAtMSwgJmVycm9yKTsKKysgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKKysJZ193YXJuaW5nICgiRXJyb3IgYWRkaW5nIGN1c3RvbTogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisrCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworKyAgICB9CisrCisgICAgIGdfc3RyaW5nX2ZyZWUgKHhtbCwgVFJVRSk7CisgfQorIAorQEAgLTE0MzQsNiArMTQ0Niw3IEBACisgbmV3X3dpbmRvdyhjaGFyICphcmcsIGNoYXIgKiplcnJvcikKKyB7CisgICAgIGZyb250ZW5kICpmZTsKKysgICAgR0Vycm9yICplcnIgPSBOVUxMOworICAgICBHdGtCb3ggKnZib3g7CisgICAgIEd0a1VJTWFuYWdlciAqbWVyZ2U7CisgICAgIEd0a0FjdGlvbkdyb3VwICphY3Rpb25zOworQEAgLTE0OTYsOCArMTUwOSw2IEBACisgICAgIGd0a193aW5kb3dfYWRkX2FjY2VsX2dyb3VwKEdUS19XSU5ET1coZmUtPndpbmRvdyksIGZlLT5hY2NlbGdyb3VwKTsKKyAKKyAgICAgbWVyZ2UgPSBndGtfdWlfbWFuYWdlcl9uZXcgKCk7CistICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChtZXJnZSksICJhZGRfd2lkZ2V0IiwKKy0JCSAgICAgIEdfQ0FMTEJBQ0sgKGFkZF93aWRnZXQpLCB2Ym94KTsKKyAKKyAgICAgYWN0aW9ucyA9IGd0a19hY3Rpb25fZ3JvdXBfbmV3ICgiUHV6emxlQWN0aW9ucyIpOworICAgICBndGtfYWN0aW9uX2dyb3VwX2FkZF9hY3Rpb25zIChhY3Rpb25zLCB0b3BsZXZlbF9hY3Rpb25zLAorQEAgLTE1MDksMjIgKzE1MjAsMzkgQEAKKyAKKyAgICAgZ3RrX3VpX21hbmFnZXJfaW5zZXJ0X2FjdGlvbl9ncm91cCAobWVyZ2UsIGFjdGlvbnMsIDApOworICAgICAKKy0gICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fZmlsZSAobWVyZ2UsIERBVEFESVIgIi9vaC1wdXp6bGVzL3VpL21lbnUueG1sIiwgTlVMTCk7CisrICAgIGd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX2ZpbGUgKG1lcmdlLCBEQVRBRElSICIvb2gtcHV6emxlcy91aS9tZW51LnhtbCIsIAorKwkJCQkgICAgICZlcnIpOworKyAgICBpZiAoZXJyICE9IE5VTEwpIHsKKysJZ193YXJuaW5nICgiRXJyb3IgbWFraW5nIFVJOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCWdfZXJyb3JfZnJlZSAoZXJyKTsKKysJZXJyID0gTlVMTDsKKysgICAgfQorIAorICAgICBpZiAodGhlZ2FtZS5jYW5fc29sdmUpIHsKKy0JICAgIGNoYXIgKnN0ciA9ICI8dWk+PG1lbnViYXI+PG1lbnUgbmFtZT1cIkdhbWVNZW51XCIgYWN0aW9uPVwiR2FtZVwiPiIKKysJY2hhciAqc3RyID0gIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiVG9wTWVudVwiIGFjdGlvbj1cIlRvcFwiPiIKKysJICAgICI8bWVudSBuYW1lPVwiR2FtZU1lbnVcIiBhY3Rpb249XCJHYW1lXCI+IgorIAkgICAgIjxwbGFjZWhvbGRlciBuYW1lPVwiU29sdmVQbGFjZWhvbGRlclwiPiIKKyAJICAgICI8c2VwYXJhdG9yIG5hbWU9XCJTb2x2ZVNlcFwiLz4iCisgCSAgICAiPG1lbnVpdGVtIG5hbWU9XCJTb2x2ZU1lbnVcIiBhY3Rpb249XCJTb2x2ZVwiLz4iCistCSAgICAiPC9wbGFjZWhvbGRlcj48L21lbnU+PC9tZW51YmFyPjwvdWk+IjsKKysJICAgICI8L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnU+PC9tZW51YmFyPjwvdWk+IjsKKyAKKy0JZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgc3RyLCAtMSwgTlVMTCk7CisrCWd0a191aV9tYW5hZ2VyX2FkZF91aV9mcm9tX3N0cmluZyAobWVyZ2UsIHN0ciwgLTEsICZlcnIpOworKwlpZiAoZXJyICE9IE5VTEwpIHsKKysJICAgIGdfd2FybmluZyAoIkVycm9yIGFkZGluZyBzb2x2ZS4gJXMiLCBlcnItPm1lc3NhZ2UpOworKwkgICAgZ19lcnJvcl9mcmVlIChlcnIpOworKwl9CisgICAgIH0KKyAKKyAgICAgaWYgKChuID0gbWlkZW5kX251bV9wcmVzZXRzKGZlLT5tZSkpID4gMCB8fCB0aGVnYW1lLmNhbl9jb25maWd1cmUpIHsKKyAJZ2VuZXJhdGVfc2V0dGluZ3NfbWVudSAobWVyZ2UsIGFjdGlvbnMsIGZlKTsKKyAgICAgfQorIAorKyAgICAvKiBEbyB0aGlzIHNvIHRoYXQgdGhlIG1lbnUgaXMgcGFja2VkIG5vdyBpbnN0ZWFkIG9mIGluIHRoZSBpZGxlIGxvb3AgKi8KKysgICAgZ3RrX3VpX21hbmFnZXJfZW5zdXJlX3VwZGF0ZSAobWVyZ2UpOworKworKyAgICBvd2xfc2V0X3dpbmRvd19tZW51X2l0ZW0gKEdUS19XSU5ET1cgKGZlLT53aW5kb3cpLAorKwkJCSAgICAgIEdUS19NRU5VX0lURU0gKGd0a191aV9tYW5hZ2VyX2dldF93aWRnZXQgKG1lcmdlLCAiL21lbnViYXIvVG9wTWVudSIpKSk7CisrICAgIAorICAgICBzZXR1cF9jb2xvdXJzIChmZSk7CisgICAgIHNldHVwX3BpeGJ1ZnMgKGZlKTsKKyAKK0BAIC0xNTcyLDcgKzE2MDAsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sgfAorIAkJCSAgR0RLX0JVVFRPTl9NT1RJT05fTUFTSyk7CisgCistICAgIC8qIFRoZSB3aW5kb3cgaXMgc2hvd24gb25jZSB0aGUgbWVudWJhciBoYXMgYmVlbiBhZGRlZCAqLworKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsIChmZS0+d2luZG93KTsKKyAgICAgcmV0dXJuIGZlOworIH0KKyAKK0luZGV4OiBzcmMvbWVudS54bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzcmMvbWVudS54bWwJKHJldmlzaW9uIDIyKQorKysrIHNyYy9tZW51LnhtbAkod29ya2luZyBjb3B5KQorQEAgLTEsMjYgKzEsMjUgQEAKKyA8dWk+CisgPG1lbnViYXI+CistPG1lbnUgbmFtZT0iR2FtZU1lbnUiIGFjdGlvbj0iR2FtZSI+CistCTxtZW51aXRlbSBuYW1lPSJOZXdNZW51IiBhY3Rpb249Ik5ldyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUmVzdGFydE1lbnUiIGFjdGlvbj0iUmVzdGFydCIvPgorLTwhLS0JPG1lbnVpdGVtIG5hbWU9IlNwZWNpZmljTWVudSIgYWN0aW9uPSJTcGVjaWZpYyIvPiAtLT4KKy0JPG1lbnVpdGVtIG5hbWU9IlJhbmRvbU1lbnUiIGFjdGlvbj0iUmFuZG9tIi8+CistCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDEiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IkxvYWRNZW51IiBhY3Rpb249IkxvYWQiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlNhdmVNZW51IiBhY3Rpb249IlNhdmUiLz4KKy0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMiIvPgorLQk8bWVudWl0ZW0gbmFtZT0iVW5kb01lbnUiIGFjdGlvbj0iVW5kbyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUmVkb01lbnUiIGFjdGlvbj0iUmVkbyIvPgorLQk8cGxhY2Vob2xkZXIgbmFtZT0iQ29weVBsYWNlaG9sZGVyIi8+CistCTxwbGFjZWhvbGRlciBuYW1lPSJTb2x2ZVBsYWNlaG9sZGVyIi8+CistCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDMiLz4KKy0JPG1lbnVpdGVtIG5hbWU9IlF1aXRNZW51IiBhY3Rpb249IlF1aXQiLz4KKy08L21lbnU+CisrPG1lbnUgbmFtZT0iVG9wTWVudSIgYWN0aW9uPSJUb3AiPgorKwk8bWVudSBuYW1lPSJHYW1lTWVudSIgYWN0aW9uPSJHYW1lIj4KKysJCTxtZW51aXRlbSBuYW1lPSJOZXdNZW51IiBhY3Rpb249Ik5ldyIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlJlc3RhcnRNZW51IiBhY3Rpb249IlJlc3RhcnQiLz4KKysJPCEtLQk8bWVudWl0ZW0gbmFtZT0iU3BlY2lmaWNNZW51IiBhY3Rpb249IlNwZWNpZmljIi8+IC0tPgorKwkJPG1lbnVpdGVtIG5hbWU9IlJhbmRvbU1lbnUiIGFjdGlvbj0iUmFuZG9tIi8+CisrCQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAxIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iTG9hZE1lbnUiIGFjdGlvbj0iTG9hZCIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlNhdmVNZW51IiBhY3Rpb249IlNhdmUiLz4KKysJCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDIiLz4KKysJCTxtZW51aXRlbSBuYW1lPSJVbmRvTWVudSIgYWN0aW9uPSJVbmRvIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iUmVkb01lbnUiIGFjdGlvbj0iUmVkbyIvPgorKwkJPHBsYWNlaG9sZGVyIG5hbWU9IkNvcHlQbGFjZWhvbGRlciIvPgorKwkJPHBsYWNlaG9sZGVyIG5hbWU9IlNvbHZlUGxhY2Vob2xkZXIiLz4KKysJPC9tZW51PgorIAorLTxwbGFjZWhvbGRlciBuYW1lPSJUeXBlUGxhY2Vob2xkZXIiLz4KKy0KKy08bWVudSBuYW1lPSJIZWxwTWVudSIgYWN0aW9uPSJIZWxwIj4KKysJPHBsYWNlaG9sZGVyIG5hbWU9IlR5cGVQbGFjZWhvbGRlciIvPgorIAk8bWVudWl0ZW0gbmFtZT0iQWJvdXRNZW51IiBhY3Rpb249IkFib3V0Ii8+CisrCTxtZW51aXRlbSBuYW1lPSJRdWl0TWVudSIgYWN0aW9uPSJRdWl0Ii8+CisrCisgPC9tZW51PgorIDwvbWVudWJhcj4KKyA8L3VpPgorSW5kZXg6IHNyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9NYWtlZmlsZS5hbQkocmV2aXNpb24gMjIpCisrKysgc3JjL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCitAQCAtMTAsNyArMTAsNyBAQAorIAlsaWdodHVwIGxvb3B5IG1hcCBtaW5lcyBuZXQgbmV0c2xpZGUgcGF0dGVybiBwZWdzIHJlY3Qgc2FtZWdhbWUgXAorIAlzaXh0ZWVuIHNsYW50IHNvbG8gdGVudHMgdHdpZGRsZSB1bnRhbmdsZQorIAorLWxpYnB1enpsZXNfbGFfTElCQUREID0gJChQVVpaTEVTX0xJQlMpCisrbGlicHV6emxlc19sYV9MSUJBREQgPSAkKFBVWlpMRVNfTElCUykgLWxvd2wKKyBsaWJwdXp6bGVzX2xhX1NPVVJDRVMgPSBjb21iaS5jIFwKKyAJCQljb25maWd1cmF0aW9uLmMgXAorIAkJCWRyYXdpbmcuYyBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZDJjYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9vaC1wdXp6bGVzX2dpdC5iYgpAQCAtMCwwICsxLDc0IEBACitTVU1NQVJZID0gIlBvcnRhYmxlIFB1enpsZSBDb2xsZWN0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL28taGFuZC5jb20vIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9ZjU2ZWM2NzcyZGQxYzdjMzY3MDY3YmJlYThlYTE2NzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3RyZWUyMzQuaDtlbmRsaW5lPTI4O21kNT1hMTg4ZTZkMjUwNDMwY2EwOTRhNTRhODJmNDg0NzJhNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdHJlZTIzNC5jO2VuZGxpbmU9Mjg7bWQ1PWI0ZmViMTk3NmZlZWJmOGYxMzc5MDkzZWQ1MmYyOTQ1IgorCitTRUNUSU9OID0gIngxMSIKK0RFUEVORFMgPSAiZ3RrKyBnY29uZiBpbnRsdG9vbC1uYXRpdmUgbGlicnN2ZyIKKworIyBsaWJvd2wgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworREVQRU5EU19hcHBlbmRfcG9reSA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnbGlib3dsJywgJycsIGQpfSIKKworIyBSZXF1aXJlcyBnZGsvZ2RreC5oIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICI5MmYxYTIwZTRiNzJlZWQ3YTM1YjAwOTg0ZDk3OTNiNTFkYzJmYjNiIgorUFYgPSAiMC4yK2dpdCR7U1JDUFZ9IgorUFIgPSAicjEwIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKK1NSQ19VUklfYXBwZW5kX3Bva3kgPSAiIGZpbGU6Ly9vaC1wdXp6bGVzLW93bC1tZW51LnBhdGNoO3N0cmlwbGV2ZWw9MCAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworYmluZGlyID0gIi91c3IvZ2FtZXMiCisKK0VYVFJBX09FTUFLRSArPSAiR0NPTkZfRElTQUJMRV9NQUtFRklMRV9TQ0hFTUFfSU5TVEFMTD0xIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisgICAgY2QgJHtEfS8ke3ByZWZpeH0vZ2FtZXMKKyAgICBmb3IgcHJvZyBpbiAqOyBkbworCWlmIFsgLXggJHByb2cgXTsgdGhlbgorICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQorICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCisJICAgIGVjaG8gIm1ha2luZyAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AiCisJICAgIGNhdCA8PFNUT1AgPiAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT0kdGl0bGUKK0V4ZWM9JHtwcmVmaXh9L2dhbWVzLyRwcm9nCitJY29uPWFwcGxpY2F0aW9ucy1nYW1lcworVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R2FtZTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCitDb21tZW50PVBsYXkgJHRpdGxlLgorU1RPUAorICAgICAgICBmaQorICAgIGRvbmUKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LWV4dHJhIgorUkRFUEVORFNfJHtQTn0tZXh0cmEgKz0gIm9oLXB1enpsZXMiCisKK0ZJTEVTXyR7UE59ID0gIi91c3Ivc2hhcmUvcGl4bWFwcyAvdXNyL3NoYXJlL29oLXB1enpsZXMvIgorRklMRVNfJHtQTn0tZGJnICs9ICIvdXNyL2dhbWVzLy5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZXh0cmEgPSAiL3Vzci9nYW1lcy8gL3Vzci9zaGFyZS9hcHBsaWNhdGlvbnMgL2V0Yy9nY29uZi9zY2hlbWFzIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHZhciA9IGJiLmRhdGEuZXhwYW5kKCJGSUxFU18ke1BOfSIsIGQsIDEpCisgICAgZGF0YSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICBmb3IgbmFtZSBpbiAoImJyaWRnZXMiLCAiZmlmdGVlbiIsICJpbmVydGlhIiwgIm1hcCIsICJzYW1lZ2FtZSIsICJzbGFudCIpOgorICAgICAgICBkYXRhID0gZGF0YSArICIgL3Vzci9nYW1lcy8lcyIgJSBuYW1lCisgICAgICAgIGRhdGEgPSBkYXRhICsgIiAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucy8lcy5kZXNrdG9wIiAlIG5hbWUKKyAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC9ldGMvZ2NvbmYvc2NoZW1hcy8lcy5zY2hlbWFzIiAlIG5hbWUKKyAgICBkLnNldFZhcih2YXIsIGRhdGEpCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4MjZjMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9wdXp6bGVzX2dpdC5iYgpAQCAtMCwwICsxLDYxIEBACitTVU1NQVJZID0gIlNpbW9uIFRhdGhhbSdzIFBvcnRhYmxlIFB1enpsZSBDb2xsZWN0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jaGlhcmsuZ3JlZW5lbmQub3JnLnVrL35zZ3RhdGhhbS9wdXp6bGVzLyIKKworREVQRU5EUyA9ICJndGsrIGxpYnh0IgorCisjIFRoZSBsaWJ4dCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PTMzYmNkNGJjZThmM2MxOTdmMmFlZmJkYmQyZDI5OWJjIgorCitTUkNfVVJJID0gImdpdDovL2dpdC50YXJ0YXJ1cy5vcmcvc2ltb24vcHV6emxlcy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIFwKKyIKK1NSQ1JFViA9ICJjMjk2MzAxYTA2Y2U0OWI4N2M5NTRjOWQxNTQ1MjUyMWRmZWRkZjFhIgorUEUgPSAiMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgLi9ta2ZpbGVzLnBsCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7cHJlZml4fS9iaW4vKiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vYmluLy5kZWJ1ZyIKKworZG9faW5zdGFsbCAoKSB7CisgICAgcm0gLXJmICR7RH0vKgorICAgIGV4cG9ydCBwcmVmaXg9JHtEfQorICAgIGV4cG9ydCBERVNURElSPSR7RH0KKyAgICBpbnN0YWxsIC1kICR7RH0vJHtwcmVmaXh9L2Jpbi8KKyAgICBvZV9ydW5tYWtlIGluc3RhbGwKKworCisgICAgaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisgICAgIyBDcmVhdGUgZGVza3RvcCBzaG9ydGN1dHMKKyAgICBjZCAke0R9LyR7cHJlZml4fS9iaW4KKyAgICBmb3IgcHJvZyBpbiAqOyBkbworCWlmIFsgLXggJHByb2cgXTsgdGhlbgorICAgICAgICAgICAgIyBDb252ZXJ0IHByb2cgdG8gVGl0bGUgQ2FzZQorICAgICAgICAgICAgdGl0bGU9JChlY2hvICRwcm9nIHwgc2VkICdzL1woXlx8IFwpLi9cVSYvZycpCisJICAgIGVjaG8gIm1ha2luZyAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AiCisJICAgIGNhdCA8PFNUT1AgPiAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyRwcm9nLmRlc2t0b3AKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT0kdGl0bGUKK0V4ZWM9JHtwcmVmaXh9L2Jpbi8kcHJvZworSWNvbj1hcHBsaWNhdGlvbnMtZ2FtZXMKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPUdhbWU7CitTdGFydHVwTm90aWZ5PXRydWUKK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorU1RPUAorICAgICAgICBmaQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTQzYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorU1VNTUFSWSA9ICJyeHZ0IHRlcm1pbmFsIGNsb25lIHN1cHBvcnRpbmcgdW5pY29kZSIKK0RFU0NSSVBUSU9OID0gInJ4dnQtdW5pY29kZSBpcyBhIGNsb25lIG9mIHRoZSB3ZWxsIGtub3duIFwKK3Rlcm1pbmFsIGVtdWxhdG9yIHJ4dnQsIG1vZGlmaWVkIHRvIHN0b3JlIHRleHQgaW4gVW5pY29kZSBcCisoZWl0aGVyIFVDUy0yIG9yIFVDUy00KSBhbmQgdG8gdXNlIGxvY2FsZS1jb3JyZWN0IGlucHV0IGFuZCBcCitvdXRwdXQuIEl0IGFsc28gc3VwcG9ydHMgbWl4aW5nIG11bHRpcGxlIGZvbnRzIGF0IHRoZSBcCitzYW1lIHRpbWUsIGluY2x1ZGluZyBYZnQgZm9udHMuIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4dCBsaWJ4ZnQgZ2RrLXBpeGJ1ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGlzdC5zY2htb3JwLmRlL3J4dnQtdW5pY29kZS9BdHRpYy9yeHZ0LXVuaWNvZGUtJHtQVn0udGFyLmJ6MiBcCisJICAgZmlsZTovL3h3Yy5wYXRjaCBcCisJICAgZmlsZTovL3J4dnQuZGVza3RvcCBcCisJICAgZmlsZTovL3J4dnQucG5nIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1BST1ZJREVTID0gInZpcnR1YWwveC10ZXJtaW5hbC1lbXVsYXRvciIKK0FMVEVSTkFUSVZFXyR7UE59ID0gIngtdGVybWluYWwtZW11bGF0b3IiCitBTFRFUk5BVElWRV9UQVJHRVRbeC10ZXJtaW5hbC1lbXVsYXRvcl0gPSAiJHtiaW5kaXJ9L3J4dnQiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mcGVybWlzc2l2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXhpbSBcCisJCS0tZW5hYmxlLXV0bXAgLS1lbmFibGUtd3RtcCAtLWVuYWJsZS1sYXN0bG9nIFwKKwkJLS13aXRoLXRlcm09cnh2dCAtLWVuYWJsZS1rZWVwc2Nyb2xsaW5nIFwKKwkJLS1lbmFibGUteGZ0IC0td2l0aC1uYW1lPXJ4dnQgLS1lbmFibGUtZnJpbGxzIFwKKwkJLS1lbmFibGUtc3dhcHNjcmVlbiAtLWVuYWJsZS10cmFuc3BhcmVuY3kgXAorCQktLXdpdGgtY29kZXNldHM9ZXUgLS1lbmFibGUtcG9pbnRlci1ibGFuayBcCisJCS0tZW5hYmxlLXRleHQtYmxpbmsgLS1lbmFibGUtcnh2dC1zY3JvbGwgXAorCQktLWVuYWJsZS1jb21iaW5pbmcgLS1kaXNhYmxlLXBlcmwgXAorCQktLXdpdGgteD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzdGFydHVwXSA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiwtLWRpc2FibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sc3RhcnR1cC1ub3RpZmljYXRpb24sIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY3AgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwllY2hvICcjZGVmaW5lIFVUTVBfRklMRSAiJHtsb2NhbHN0YXRlZGlyfS9ydW4vdXRtcCInID4+IGNvbmZpZy5oCisJZWNobyAnI2RlZmluZSBXVE1QX0ZJTEUgIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL3d0bXAiJyA+PiBjb25maWcuaAorCWVjaG8gJyNkZWZpbmUgTEFTVExPR19GSUxFICIke2xvY2Fsc3RhdGVkaXJ9L2xvZy9sYXN0bG9nIicgPj4gY29uZmlnLmgKKwllY2hvICcjZGVmaW5lIEhBVkVfWExPQ0FMRSAxJyA+PiBjb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnh2dC5wbmcgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yeHZ0LmRlc2t0b3AgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvcnh2dC5kZXNrdG9wICR7ZGF0YWRpcn0vcGl4bWFwcy9yeHZ0LnBuZyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LmRlc2t0b3AgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MmVhNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5kZXNrdG9wCkBAIC0wLDAgKzEsOSBAQAorW0Rlc2t0b3AgRW50cnldCitWZXJzaW9uPTEuMAorTmFtZT1UZXJtaW5hbAorQ29tbWVudD1BIHVuaWNvZGUgY2FwYWJsZSByeHZ0IGNsb25lCitFeGVjPXJ4dnQKK0ljb249dGVybWluYWwKK1Rlcm1pbmFsPWZhbHNlCitUeXBlPUFwcGxpY2F0aW9uCitDYXRlZ29yaWVzPVV0aWxpdHk7VGVybWluYWxFbXVsYXRvcjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LnBuZyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTZmYTJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS94d2MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUveHdjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWZlZWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUveHdjLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC1ydU4gcnh2dC11bmljb2RlLTkuMTAtb3JpZy8vc3JjL3NjcmVlbi5DIHJ4dnQtdW5pY29kZS05LjEwL3NyYy9zY3JlZW4uQworLS0tIHJ4dnQtdW5pY29kZS05LjEwLW9yaWcvL3NyYy9zY3JlZW4uQwkyMDExLTA0LTE5IDEzOjM0OjAxLjMyNzY2NDk4NCArMDgwMAorKysrIHJ4dnQtdW5pY29kZS05LjEwL3NyYy9zY3JlZW4uQwkyMDExLTA0LTE5IDEzOjM0OjQ3LjAzNzY2NTAwMSArMDgwMAorQEAgLTMxNTIsNyArMzE1Miw3IEBACisgICAgICAgcmV0dXJuIGZhbHNlOworICAgICB9CisgCistI2lmIDAKKysjaWYgSEFWRV9YV0MKKyAgIFhUZXh0UHJvcGVydHkgY3Q7CisgCisgICBpZiAoWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSAoZHB5LCAmc2VsZWN0aW9uLnRleHQsIDEsIFhTdHJpbmdTdHlsZSwgJmN0KSA+PSAwKQorQEAgLTM3MzQsOSArMzczNCwxMSBAQAorICAgICAgICAgfQorICAgICAgIGVsc2UKKyAjZW5kaWYKKysjaWZkZWYgSEFWRV9YV0MKKyAgICAgICBpZiAoWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSAoZHB5LCAmY2wsIDEsIChYSUNDRW5jb2RpbmdTdHlsZSkgc3R5bGUsICZjdCkgPj0gMCkKKyAgICAgICAgIGZyZWVjdCA9IDE7CisgICAgICAgZWxzZQorKyNlbmRpZgorICAgICAgICAgeworICAgICAgICAgICAvKiBpZiB3ZSBmYWlsZWQgdG8gY29udmVydCB0aGVuIHNlbmQgaXQgcmF3ICovCisgICAgICAgICAgIGN0LnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKiljbDsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MGVjNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSByeHZ0LXVuaWNvZGUuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uQztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT03NzU0ODUzOThhMDlmYTdhZWU2ZjkwNDY0YWY4ODQzMiIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhNWI4MjNmMDhkMjEwMzZmOTRhNmM1MWU5NGQwMjViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3M2UxM2ZlNjRiNTlmZDNjOGU2ZTIwYzAwZjE0OWQzODg3NDFmMTQxYjgxNTVlNDcwMGQzZWQ0MGFhOTRiNGUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNDk0OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcnh2dC11bmljb2RlLmluYworCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uQztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT03ZGFjMDM5NTgwNjU3MDg1NmUwMzdmOThhYmE4NTEzYiIKKworU1JDX1VSSVttZDVzdW1dID0gImE5YTA2YzYwODI1OGM1ZmQyNDdjMzcyNWQ4ZjQ0NTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1MjcwZWQ3MmJjNTg5NWE2NGExZDczOTJiZjQ1YTYyMjIwNDE5MjM3MWMzOTY1YmQzZGQ5NzhkYzA4ODk1NmIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE3NmVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGI5ZjAyOTg5MzEwYTNjOTIwNTg5ZjFhYTY0NmJjYmYxNmIyNTcyYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMyBKdW4gMjAxMiAxMTowNzozMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBJbmhlcml0IHRoZSBHTk9NRSBpY29uIHRoZW1lCisKK0lmIHRoZSBHTk9NRSBpY29uIHRoZW1lIGlzbid0IGluc3RhbGxlZCB0aGlzIGlzIGEgbm8tb3AsIGJ1dCBpZiBpdCBpcyB0aGVuCit5b3UnbGwgZ2V0IGZhbGxiYWNrIGZyb20gU2F0byB0byBHTk9NRSBmb3IgaWNvbnMgdGhhdCBhcmUgbm90IGluIFNhdG8uCisKK0FzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgZnVsbCBHTk9NRSBpY29uIHRoZW1lIGRlcGVuZCBvbiBnbm9tZS1pY29uLXRoZW1lLAordGhpcyBqdXN0IHdvcmtzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBpbmRleC50aGVtZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvaW5kZXgudGhlbWUgYi9pbmRleC50aGVtZQoraW5kZXggYzRiMDNhNy4uNjg4ZmJiZiAxMDA2NDQKKy0tLSBhL2luZGV4LnRoZW1lCisrKysgYi9pbmRleC50aGVtZQorQEAgLTEsNiArMSw3IEBACisgW0ljb24gVGhlbWVdCisgTmFtZT1TYXRvCisgQ29tbWVudD1TYXRvIGljb24gdGhlbWUKKytJbmhlcml0cz1BZHdhaXRhCisgCisgRGlyZWN0b3JpZXM9MTZ4MTYvYXBwcywxNngxNi9zdGF0dXMsMTZ4MTYvc3RvY2ssMTZ4MTYvcGxhY2VzLDE2eDE2L21pbWV0eXBlcywxNngxNi9kZXZpY2VzLDE2eDE2L2FjdGlvbnMsMjJ4MjIvYXBwcywyMngyMi9zdGF0dXMsMjJ4MjIvc3RvY2ssMjJ4MjIvcGxhY2VzLDIyeDIyL21pbWV0eXBlcywyMngyMi9kZXZpY2VzLDIyeDIyL2FjdGlvbnMsMzJ4MzIvYXBwcywzMngzMi9zdGF0dXMsMzJ4MzIvc3RvY2ssMzJ4MzIvcGxhY2VzLDMyeDMyL21pbWV0eXBlcywzMngzMi9kZXZpY2VzLDMyeDMyL2FjdGlvbnMsNDh4NDgvYXBwcyw0OHg0OC9zdGF0dXMsNDh4NDgvc3RvY2ssNDh4NDgvcGxhY2VzLDQ4eDQ4L21pbWV0eXBlcyw0OHg0OC9kZXZpY2VzLDQ4eDQ4L2FjdGlvbnMsNjR4NjQvYXBwcyw2NHg2NC9zdGF0dXMsNjR4NjQvc3RvY2ssNjR4NjQvcGxhY2VzLDY0eDY0L21pbWV0eXBlcyw2NHg2NC9kZXZpY2VzLDY0eDY0L2FjdGlvbnMsCisgCistLSAKKzEuNy4xMAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkNzM1ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZV8wLjQuMS5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlNhdG8gaWNvbiB0aGVtZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkNDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU2YTgzMGJiZTZlNDY5N2ZlNmNiYmFlMDFiYjdjMmIyIgorU0VDVElPTiA9ICJ4MTEiCisKK1BSID0gInI2IgorCitERVBFTkRTID0gImljb24tbmFtaW5nLXV0aWxzLW5hdGl2ZSBsaWJ4bWwtc2ltcGxlLXBlcmwtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9wb2t5bGludXgub3JnL3JlbGVhc2VzL3NhdG8vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NmE4NDdmMzEyOGE0M2E5Y2YyM2I3MDI5YTY1NmY1MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjBhMjgwN2E2YTk2OTE4YWM3OTlhODYwOTRlYzNlOGUyYzg5MmJlMGZkNjc5YTQyMzJjMmE3N2YyZjYxNzMyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYWxsYXJjaCBndGstaWNvbi1jYWNoZSBwZXJsbmF0aXZlCisKKyMgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNlcyBwa2ctY29uZmlnIHRvIGZpbmQgbmF0aXZlIGJpbmFyaWVzIHRvIGV4ZWN1dGUsIHNvCisjIHRlbGwgaXQgdG8gdXNlIG91ciBwa2ctY29uZmlnLW5hdGl2ZSB3cmFwcGVyLgorZXhwb3J0IFBLR19DT05GSUcgPSAicGtnLWNvbmZpZy1uYXRpdmUiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2ljb25zL1NhdG8iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyBwcmVmZXJlbmNlcy1zeXN0ZW0ucG5nIHt9L2FwcHMvcHJlZmVyZW5jZXMtZGVza3RvcC5wbmcgXDsKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgZmlsZS1tYW5hZ2VyLnBuZyB7fS9hcHBzL3N5c3RlbS1maWxlLW1hbmFnZXIucG5nIFw7CisJZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIC4uL2FwcHMvdGVybWluYWwucG5nIHt9L3BsYWNlcy9jb21wdXRlci5wbmcgXDsKK30KKworIyBFeHBsaWN0bHkgc2V0dGluZyAiU2F0byIgYXMgdGhlIGRlZmF1bHQgaWNvbiB0aGVtZSB0byBhdm9pZCBmbGlja2VyaW5nIGZyb20KKyMgdGhlIGRlc2t0b3AgYW5kIHNldHRpbmdzIGRhZW1vbiByYWNpbmcuICBUaGlzIHNob3VsZG4ndCBiZSBkb25lIGhlcmUgYnV0IGluIHRoZSBzYXRvIGltYWdlCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIG1rZGlyIC1wICREL2V0Yy9ndGstMi4wCisKKyAgICBncmVwIC1zIC1xIC1lIF5ndGstaWNvbi10aGVtZS1uYW1lLipcIlNhdG9cIiAkRC9ldGMvZ3RrLTIuMC9ndGtyYyB8fCBcCisgICAgICAgIGVjaG8gJ2d0ay1pY29uLXRoZW1lLW5hbWUgPSAiU2F0byInID4+ICREL2V0Yy9ndGstMi4wL2d0a3JjCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk0MDMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLXNjcmVlbnNob3Qvc2F0by1zY3JlZW5zaG90X2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlVsdHJhLXNpbXBsZSBzY3JlZW4gY2FwdHVyZSB1dGlsaXR5LCBhaW1lZCBhdCBoYW5kaGVsZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tYWluLmM7ZW5kbGluZT05O21kNT0wMjNlMTRkNjQwNGQwYTk2MWViOTdjYmQwMTFmYzE0MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zY3JlZW5zaG90LXVpLmg7ZW5kbGluZT05O21kNT02MzhkOWZmYTgzZTkzMjVhMzZkZjIyNDE2NmVkNmFkMCIKKworREVQRU5EUyA9ICJtYXRjaGJveC1wYW5lbC0yIgorU1JDUkVWID0gIjNhOTY4OGU4YTAxYjYzYTc4ZjQwMmI0ZTdjMGI4YjAwNWZjZGZhMjkiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9zY3JlZW5zaG90IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLy5kZWJ1ZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5sYQorfQorCisjIFRoZSBtYXRjaGJveC1wYW5lbC0yIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzLzcwc2V0dGluZ3MtZGFlbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Mzc0MTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaApAQCAtMCwwICsxIEBACisvdXNyL2Jpbi9zZXR0aW5ncy1kYWVtb24gJgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvYWRkc291bmRrZXlzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvYWRkc291bmRrZXlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZjA2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9hZGRzb3VuZGtleXMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9zZXR0aW5ncy1kYWVtb24uYwkyMDA5LTA1LTIyIDE0OjU3OjA1LjAwMDAwMDAwMCArMDEwMAorKysrIHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uYwkyMDA5LTA1LTIyIDE0OjU4OjIyLjAwMDAwMDAwMCArMDEwMAorQEAgLTE4Nyw2ICsxODcsMTAgQEAKKyAgICAgR0NPTkZfVkFMVUVfU1RSSU5HLCB0cmFuc2xhdGVfc3RyaW5nX3N0cmluZyB9LAorICAgeyAiL2Rlc2t0b3AvcG9reS9pbnRlcmZhY2UvZ3RrX2NvbG9yX3NjaGVtZSIsICJHdGsvQ29sb3JTY2hlbWUiLAorICAgICBHQ09ORl9WQUxVRV9TVFJJTkcsIHRyYW5zbGF0ZV9zdHJpbmdfc3RyaW5nIH0sCisrICB7ICIvZGVza3RvcC9nbm9tZS9zb3VuZC90aGVtZV9uYW1lIiwgIk5ldC9Tb3VuZFRoZW1lTmFtZSIsCisrICAgIEdDT05GX1ZBTFVFX1NUUklORywgICB0cmFuc2xhdGVfc3RyaW5nX3N0cmluZyB9LAorKyAgeyAiL2Rlc2t0b3AvZ25vbWUvc291bmQvZXZlbnRfc291bmRzIiwgIk5ldC9FbmFibGVFdmVudFNvdW5kcyIgLAorKyAgICBHQ09ORl9WQUxVRV9CT09MLCAgICAgdHJhbnNsYXRlX2Jvb2xfaW50IH0sCisgfTsKKyAKKyBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25FbnRyeSoKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uLnNjaGVtYXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcwkyMDA5LTA1LTIyIDE1OjQ5OjE3LjAwMDAwMDAwMCArMDEwMAorKysrIHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcwkyMDA5LTA1LTIyIDE1OjUxOjMxLjAwMDAwMDAwMCArMDEwMAorQEAgLTE5Niw2ICsxOTYsMjcgQEAKKyAgICAgPC9sb2NhbGU+CisgICA8L3NjaGVtYT4KKyAKKysgIDxzY2hlbWE+CisrICAgIDxrZXk+L3NjaGVtYXMvZGVza3RvcC9nbm9tZS9zb3VuZC90aGVtZV9uYW1lPC9rZXk+CisrICAgIDxhcHBseXRvPi9kZXNrdG9wL2dub21lL3NvdW5kL3RoZW1lX25hbWU8L2FwcGx5dG8+CisrICAgIDxvd25lcj5nbm9tZTwvb3duZXI+CisrICAgIDx0eXBlPnN0cmluZzwvdHlwZT4KKysgICAgPGRlZmF1bHQ+ZnJlZWRlc2t0b3A8L2RlZmF1bHQ+CisrICAgIDxsb2NhbGUgbmFtZT0iQyI+CisrICAgICAgPHNob3J0PlNvdW5kIFRoZW1lIE5hbWU8L3Nob3J0PgorKyAgICA8L2xvY2FsZT4KKysgIDwvc2NoZW1hPgorKworKyAgPHNjaGVtYT4KKysgICAgPGtleT4vc2NoZW1hcy9kZXNrdG9wL2dub21lL3NvdW5kL2V2ZW50X3NvdW5kczwva2V5PgorKyAgICA8YXBwbHl0bz4vZGVza3RvcC9nbm9tZS9zb3VuZC9ldmVudF9zb3VuZHM8L2FwcGx5dG8+CisrICAgIDxvd25lcj5nbm9tZTwvb3duZXI+CisrICAgIDx0eXBlPmJvb2w8L3R5cGU+CisrICAgIDxkZWZhdWx0PnRydWU8L2RlZmF1bHQ+CisrICAgIDxsb2NhbGUgbmFtZT0iQyI+CisrICAgICAgPHNob3J0PkVuYWJsZSBTb3VuZCBFdmVudHM8L3Nob3J0PgorKyAgICA8L2xvY2FsZT4KKysgIDwvc2NoZW1hPgorIAorIDwvc2NoZW1hbGlzdD4KKyA8L2djb25mc2NoZW1hZmlsZT4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NDM3NDQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworYWZ0ZXIgZ2NjIGxpbmtpbmcgaGFzIGNoYW5nZWQsIGFsbCB0aGUgbGlicmFyaWVzIG11c3QgYmUgZXhwbGljaXRlbHkgc3BlY2lmaWVkIHRvIGZvciBsaW5raW5nLiAKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgbGlua2luZyBlcnJvcjoKKworfCBtYWtlICBhbGwtYW1eTQorfCBtYWtlWzFdOiBFbnRlcmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQorfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eCAtV2FsbCAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzIgLWdnZGIgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbyBzZXR0aW5ncy1kYWVtb24gc2V0dGluZ3NfZGFlbW9uLXhzZXR0aW5ncy1jb21tb24ubyBzZXR0aW5nc19kYWVtb24teHNldHRpbmdzLW1hbmFnZXIubyBzZXR0aW5nc19kYWVtb24tc2V0dGluZ3MtZGFlbW9uLm8gLXB0aHJlYWQgLWxnY29uZi0yIC1sZGJ1cy1nbGliLTEgLWxkYnVzLTEgLWxwdGhyZWFkIC1sZ2RrLXgxMS0yLjAgLWxnZGtfcGl4YnVmLTIuMCAtbHBhbmdvY2Fpcm8tMS4wIC1scGFuZ28tMS4wIC1sY2Fpcm8gLWxnb2JqZWN0LTIuMCAtbGdtb2R1bGUtMi4wIC1sZ3RocmVhZC0yLjAgLWxydCAtbGdsaWItMi4wXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9pNTg2LXBva3ktbGludXgvZ2NjL2k1ODYtcG9reS1saW51eC80LjUuMS9sZDogKl5BOiBpbnZhbGlkIERTTyBmb3Igc3ltYm9sIGBYQ3JlYXRlU2ltcGxlV2luZG93JyBkZWZpbml0aW9uXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eC91c3IvbGliL2xpYlgxMS5zby42OiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBCYWQgdmFsdWVeTQorfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1c15NCit8IG1ha2VbMV06ICoqKiBbc2V0dGluZ3MtZGFlbW9uXSBFcnJvciAxXk0KK3wgbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9zZXR0aW5ncy1kYWVtb24tMC4wK3N2bnIyMDU5LXIzL3NldHRpbmdzLWRhZW1vbideTQorfCBtYWtlOiAqKiogW2FsbF0gRXJyb3IgMl5NCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDExLzAxLzExCisKK0luZGV4OiBzZXR0aW5ncy1kYWVtb24vY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2V0dGluZ3MtZGFlbW9uLm9yaWcvY29uZmlndXJlLmFjCisrKysgc2V0dGluZ3MtZGFlbW9uL2NvbmZpZ3VyZS5hYworQEAgLTE0LDcgKzE0LDcgQEAgQUNfUFJPR19DQworIAorIAorIGRubCBUT0RPOiBtYWtlIGdjb25mIG9wdGlvbmFsCistUEtHX0NIRUNLX01PRFVMRVMoQVBQLCBbZ2NvbmYtMi4wIGdkay14MTEtMi4wXSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhBUFAsIFtnY29uZi0yLjAgZ2RrLXgxMS0yLjAgeDExXSkKKyAKKyAKKyBBQ19TVUJTVChBUFBfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2MTU1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbl9naXQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhIGJyaWRnZSBiZXR3ZWVuIGdjb25mIGFuZCB4c2V0dGluZ3MiCitIT01FUEFHRSA9ICJodHRwOi8vc3ZuLm8taGFuZC5jb20vdmlldy9tYXRjaGJveC90cnVuay9zZXR0aW5ncy1kYWVtb24vIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hzZXR0aW5ncy1tYW5hZ2VyLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNvbW1vbi5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIgorREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCBndGsrIgorU0VDVElPTiA9ICJ4MTEiCitTUkNSRVYgPSAiOWE5OTUyOGIwMjI1NTQ1MGRiODExNzZhYmQ5YmJjYzFkYWI5YTRjMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3hzZXR0aW5ncy1kYWVtb24gXAorICAgICAgICAgICBmaWxlOi8vYWRkc291bmRrZXlzLnBhdGNoO2FwcGx5PXllcyBcCisgICAgICAgICAgIGZpbGU6Ly83MHNldHRpbmdzLWRhZW1vbi5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2NvbmYgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK0ZJTEVTXyR7UE59ID0gCSIke2JpbmRpcn0vKiAke3N5c2NvbmZkaXJ9IgorCisjIFJlcXVpcmVzIGdkay14MTEtMi4wIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGd0ayB3aGVuIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZAorCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vNzBzZXR0aW5ncy1kYWVtb24uc2ggJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmRkNmQxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhbiBpY29uIHRvIHNodXQgZG93biB0aGUgc3lzdGVtIGNsZWFubHkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9zaHV0ZG93bi5kZXNrdG9wIgorCitQUiA9ICJyMSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisJaW5zdGFsbCAtbSAwNjQ0IHNodXRkb3duLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLworCisJc2VkIC1pICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9zaHV0ZG93bi5kZXNrdG9wIC1lICdzI15FeGVjPVwoLipcKSNFeGVjPSR7YmFzZV9zYmluZGlyfS9cMSMnCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgZ3JlcCAtcSBxZW11YXJtICREJHtzeXNjb25mZGlyfS9ob3N0bmFtZSAmJiBcCisgICAgICAgIHNlZCAtaSAkRCR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL3NodXRkb3duLmRlc2t0b3AgLWUgJ3MjXkV4ZWM9XCguKlwpL2hhbHQjRXhlYz1cMS9yZWJvb3QjJyBcCisgICAgICAgIHx8IHRydWUKK30KKworaW5oZXJpdCBhbGxhcmNoCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi5kZXNrdG9wIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24uZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI2NTlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24uZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK0VuY29kaW5nPVVURi04CitUeXBlPUFwcGxpY2F0aW9uCitOYW1lPVNodXRkb3duCitDb21tZW50PUNsb3NlIGRvd24gdGhlIG1hY2hpbmUgc2FmZWx5CitFeGVjPXBvd2Vyb2ZmCitJY29uPXN5c3RlbS1zaHV0ZG93bgorVGVybWluYWw9ZmFsc2UKK0NhdGVnb3JpZXM9VXRpbGl0eTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjM0MjAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC9maWxlcy8wMDAxLVRoaXMtcGF0Y2gtZml4ZXMtYS1jb21tYW5kLWxpbmUtdGhhdC1pcy10b28tbG9uZy1vdmUucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorRnJvbSAyMmQ1MDYzYzU1MWQzYzA4YzBhNGFkOGI4MGUwOGI3OTNkNTMwOTNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDE2OjIzOjI3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoaXMgcGF0Y2ggZml4ZXMgYSBjb21tYW5kIGxpbmUgdGhhdCBpcyB0b28gbG9uZyAob3ZlciAxMDBLISkKKyBhbmQgaXMgcmVqZWN0ZWQgYnkgL2Jpbi9zaC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbc2hvdWxkIGFwcGVhciBpbiAyLjEwLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xODQ4NTZdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAgICAgICAgfCAxMSArKysrKystLS0tLQorIFRvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5IHwgMTYgKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK2luZGV4IGExM2FmN2MuLjA1OGMyNDEgMTAwNjQ0CistLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKK0BAIC00MDgsNyArNDA4LDcgQEAgc2V0KFdlYktpdDJXZWJFeHRlbnNpb25fSU5TVEFMTEVEX0hFQURFUlMKKyAgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmgKKyApCisgCistZmlsZShHTE9CIEluc3BlY3RvckZpbGVzCisrc2V0KEluc3BlY3RvckZpbGVzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvKi5odG1sCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS8qLmpzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvKi5jc3MKK0BAIC00MjMsMTMgKzQyMywxNCBAQCBmaWxlKEdMT0IgSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy8qLmpzCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL2d0ay8qLnBuZworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9ndGsvKi5zdmcKKy0pCistCistbGlzdChBUFBFTkQgSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCisgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKyApCisgCisrZmlsZShHTE9CIEluc3BlY3RvckZpbGVzRGVwZW5kZW5jaWVzCisrICAgICR7SW5zcGVjdG9yRmlsZXN9CisrKQorKworICMgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIEdUSysgQVBJIFdlYktpdFZlcnNpb24uaCBhbmQgb25lIGdlbmVyYXRlZCBieSBXZWJDb3JlLgorIGxpc3QoSU5TRVJUIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUyAwCisgICAgICIke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0iCitAQCAtNTY0LDcgKzU2NSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKKyAKKyBhZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0vSW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLnhtbAorLSAgICBERVBFTkRTICR7SW5zcGVjdG9yRmlsZXN9CisrICAgIERFUEVORFMgJHtJbnNwZWN0b3JGaWxlc0RlcGVuZGVuY2llc30KKyAgICAgICAgICAgICAke1RPT0xTX0RJUn0vZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKKyAgICAgQ09NTUFORCAke1RPT0xTX0RJUn0vZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkgLS1vdXRwdXQ9JHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19ESVJ9L0luc3BlY3RvckdSZXNvdXJjZUJ1bmRsZS54bWwgJHtJbnNwZWN0b3JGaWxlc30KKyAgICAgVkVSQkFUSU0KK2RpZmYgLS1naXQgYS9Ub29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CitpbmRleCAwNjg3YzRjLi4wMzA2MGNmIDEwMDc1NQorLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKKysrKyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5CitAQCAtMTYsNiArMTYsNyBAQAorICMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgCisgaW1wb3J0IGFyZ3BhcnNlCisraW1wb3J0IGdsb2IKKyBpbXBvcnQgb3MKKyBpbXBvcnQgc3lzCisgCitAQCAtMjYsMTAgKzI3LDE3IEBAIEJBU0VfRElSID0gJ1dlYkluc3BlY3RvclVJLycKKyBkZWYgZ2V0X2ZpbGVuYW1lcyhhcmdzKToKKyAgICAgZmlsZW5hbWVzID0gW10KKyAKKy0gICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CistICAgICAgICBiYXNlX2Rpcl9pbmRleCA9IGZpbGVuYW1lLnJmaW5kKEJBU0VfRElSKQorLSAgICAgICAgaWYgYmFzZV9kaXJfaW5kZXggIT0gLTE6CistICAgICAgICAgICAgZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZVtiYXNlX2Rpcl9pbmRleCArIGxlbihCQVNFX0RJUik6XSkKKysgICAgZm9yIHBhdHRlcm4gaW4gYXJnczoKKysgICAgICAgIHBhdGhzID0gZ2xvYi5nbG9iKHBhdHRlcm4pCisrICAgICAgICBmb3IgZmlsZW5hbWUgaW4gcGF0aHM6CisrICAgICAgICAgICAgYmFzZV9kaXJfaW5kZXggPSBmaWxlbmFtZS5yZmluZChCQVNFX0RJUikKKysgICAgICAgICAgICBpZiBiYXNlX2Rpcl9pbmRleCAhPSAtMToKKysgICAgICAgICAgICAgICAgbmFtZSA9IGZpbGVuYW1lW2Jhc2VfZGlyX2luZGV4ICsgbGVuKEJBU0VfRElSKTpdCisrICAgICAgICAgICAgICAgICMgVGhlIHJlc3VsdCBzaG91bGQgdXNlIGZvcndhcmQgc2xhc2hlcywgdGh1cyBtYWtlIHN1cmUgYW55IG9zLXNwZWNpZmljCisrICAgICAgICAgICAgICAgICMgc2VwYXJhdG9yLCBhZGRlZCBieSB0aGUgZ2xvYi5nbG9iKCkgY2FsbCwgaXMgcHJvcGVybHkgcmVwbGFjZWQKKysgICAgICAgICAgICAgICAgaWYgb3Muc2VwICE9ICcvJzoKKysgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob3Muc2VwLCAnLycpCisrICAgICAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQobmFtZSkKKyAgICAgcmV0dXJuIGZpbGVuYW1lcworIAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay9nY2M1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTFhODEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitKU09iamVjdDogQ3JlYXRlIGV4cGxpY2l0IGluc3RhbnRpYXRpb24gb2YgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzCisKK1JlYXNvbiBmb3IgY2hhbmdlOiBuZXdlciBnY2MgbWlnaHQgb3B0aW1pemUgYXdheSB0aGUgdGVtcGxhdGVzCithbmQgdGhleSB3b250IGJlIGF2YWlsYWJsZSBmb3Igb3RoZXIgLmNwcCBmaWxlcyB0byB1c2UgYXMgdGhlc2UKK2FyZSB1c2VkIGluIGEgZGlmZmVyZW50IC5jcHAgd2UgbmVlZCB0byB0ZWxsIGNvbXBpbGVyIHRvIGV4cGxpY2l0bHkKK2luc3RhbnRpYXRlIHRoZW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogd2Via2l0Z3RrLTIuOC41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdlYmtpdGd0ay0yLjguNS5vcmlnL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysrIHdlYmtpdGd0ay0yLjguNS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKK0BAIC0xOTY1LDYgKzE5NjUsMTAgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgorICAgICB9CisgfQorIAorK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxJbnQzMlNoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxEb3VibGVTaGFwZT4oRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKTsKKyt0ZW1wbGF0ZSB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXM8Q29udGlndW91c1NoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworKworIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQorIHsKKyAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjguNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjguNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmQ2NzBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvd2Via2l0Z3RrXzIuOC41LmJiCkBAIC0wLDAgKzEsNTggQEAKK1NVTU1BUlkgPSAiV2ViS2l0IHdlYiByZW5kZXJpbmcgZW5naW5lIGZvciB0aGUgR1RLKyBwbGF0Zm9ybSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvIgorCitMSUNFTlNFID0gIkJTRCAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ09QWUlORy5MSUI7bWQ1PWQwYzZkNjM5N2E1ZDg0Mjg2ZGRhNzU4ZGE1N2JkNjkxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9XZWJLaXQvTElDRU5TRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1BUFBMRTttZDU9NDY0NmY5MDA4MmM0MGJjZjI5OGMyODVmOGJhYjBiMTIgXAorCQkgICAgZmlsZTovL1NvdXJjZS9XZWJDb3JlL0xJQ0VOU0UtTEdQTC0yO21kNT0zNjM1N2ZmZGUyYjY0YWUxNzdiMjQ5NDQ0NWI3OWQyMSBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTIuMTttZDU9YTc3OGEzM2VmMzM4YWJiYWY4YjhhN2MzNmI2ZWVjODAgXAorCQkgICAiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgIGZpbGU6Ly8wMDAxLVRoaXMtcGF0Y2gtZml4ZXMtYS1jb21tYW5kLWxpbmUtdGhhdC1pcy10b28tbG9uZy1vdmUucGF0Y2ggXAorICBmaWxlOi8vZ2NjNS5wYXRjaCBcCisgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZjc5OTkxODQ4YTUwOTZkM2E3NTI4OWViY2U1NDdhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZDFmMGM1MzQ5MzVmNDNmZDc0ZGY5MGYyNjQ4ZmNlZTY3MmQ2MGYxZjU3YTMwZmE1NTdhNzc4OTFhZTA0ZDIwIgorCitpbmhlcml0IGNtYWtlIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBwZXJsbmF0aXZlIHB5dGhvbm5hdGl2ZQorCitERVBFTkRTID0gInpsaWIgZW5jaGFudCBsaWJzb3VwLTIuNCBjdXJsIGxpYnhtbDIgY2Fpcm8gbGlieHNsdCBsaWJ4dCBsaWJpZG4gZ251dGxzIFwKKyAgICAgICAgICAgZ3RrKyBndGsrMyBnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBmbGV4LW5hdGl2ZSBncGVyZi1uYXRpdmUgc3FsaXRlMyBcCisJICAgcGFuZ28gaWN1IGJpc29uLW5hdGl2ZSBnbm9tZS1jb21tb24gZ2F3ayBpbnRsdG9vbC1uYXRpdmUgbGlid2VicCBcCisJICAgYXRrIHVkZXYgaGFyZmJ1enoganBlZyBsaWJwbmcgcHVsc2VhdWRpbyBsaWJyc3ZnIGxpYnRoZW9yYSBsaWJ2b3JiaXMgbGlieGNvbXBvc2l0ZSBsaWJ4dHN0IFwKKwkgICBydWJ5LW5hdGl2ZSBsaWJzZWNyZXQgbGlibm90aWZ5IGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBcCisgICAgICAgICAgIgorREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wnLCAnJywgZCl9IgorCitFWFRSQV9PRUNNQUtFID0gIiBcCisJCS1EUE9SVD1HVEsgXAorCQktRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSBcCisJCS1ERU5BQkxFX0lOVFJPU1BFQ1RJT049RmFsc2UgXAorCQktREVOQUJMRV9NSU5JQlJPV1NFUj1UcnVlIFwKKwkgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJy1ERU5BQkxFX1dFQkdMPVRydWUnLCAnLURFTkFCTEVfV0VCR0w9RmFsc2UnLCBkKX0gXAorCQkiCisKKyMgSmF2YXNjcmlwdCBKSVQgaXMgbm90IHN1cHBvcnRlZCBvbiBwb3dlcnBjCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfcG93ZXJwYzY0ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorCisjIEFSTSBKSVQgY29kZSBkb2VzIG5vdCBidWlsZCBvbiBBUk12NS82IGFueW1vcmUsIGFwcGFyZW50bHkgdGhleSB0ZXN0IG9ubHkgb24gdjcgb253YXJkcworRVhUUkFfT0VDTUFLRV9hcHBlbmRfYXJtdjUgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NiA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKKworIyBiaW51dGlscyAyLjI1LjEgaGFzIGEgYnVnIG9uIGFhcmNoNjQ6CisjIGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE4NDMwCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hYXJjaDY0ID0gIiAtRFVTRV9MRF9HT0xEPUZhbHNlICIKKworIyBKSVQgbm90IHN1cHBvcnRlZCBvbiBNSVBTIGVpdGhlcgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwcyA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX21pcHM2NCA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS93ZWJraXQyZ3RrLTQuMC9pbmplY3RlZC1idW5kbGUvbGlid2Via2l0Mmd0a2luamVjdGVkYnVuZGxlLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vd2Via2l0Mmd0ay00LjAvaW5qZWN0ZWQtYnVuZGxlLy5kZWJ1Zy9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS93ZWJraXRndGsvd2Via2l0Mmd0ay00LjAvLmRlYnVnLyoiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmIxMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlnZml4LnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwci11dGlsLTEuMy40L2FwdS1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItdXRpbC0xLjMuNC5vcmlnL2FwdS1jb25maWcuaW4JMjAwOS0wMS0xMiAxNzowODowNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcHItdXRpbC0xLjMuNC9hcHUtY29uZmlnLmluCTIwMDktMDEtMTIgMTc6MDk6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtMTM0LDE0ICsxMzQsNyBAQAorICAgICBleGl0IDAKKyAgICAgOzsKKyAgICAgLS1pbmNsdWRlcykKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1JJGluY2x1ZGVkaXIgJElOQ0xVREVTIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAic291cmNlIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFVfU09VUkNFX0RJUi9pbmNsdWRlICRJTkNMVURFUyIKKy0gICAgZWxzZQorLSAgICAgICAgIyB0aGlzIGlzIGZvciBWUEFUSCBidWlsZHMKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBVX0JVSUxEX0RJUi9pbmNsdWRlIC1JJEFQVV9TT1VSQ0VfRElSL2luY2x1ZGUgJElOQ0xVREVTIgorLSAgICBmaQorICAgICA7OworICAgICAtLWxkZmxhZ3MpCisgICAgIGZsYWdzPSIkZmxhZ3MgJExERkxBR1MiCitAQCAtMTU1LDI4ICsxNDgsMTAgQEAKKyAgICAgZXhpdCAwCisgICAgIDs7CisgICAgIC0tbGluay1sZCkKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkQVBVX0JVSUxEX0RJUiAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGZpCisgICAgIDs7CisgICAgIC0tbGluay1saWJ0b29sKQorLSAgICAjIElmIHRoZSBMQV9GSUxFIGV4aXN0cyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUsIHVzZSBpdC4gIElmIHdlJ3JlCistICAgICMgaW5zdGFsbGVkIGFuZCB0aGUgTEFfRklMRSBkb2VzIG5vdCBleGlzdCwgYXNzdW1lIHRvIHVzZSAtTC8tbAorLSAgICAjICh0aGUgTEFfRklMRSBtYXkgbm90IGhhdmUgYmVlbiBpbnN0YWxsZWQpLiAgSWYgd2UncmUgYnVpbGRpbmcgb3Vyc2VsdmVzLAorLSAgICAjIHdlJ2xsIGFzc3VtZSB0aGF0IGF0IHNvbWUgcG9pbnQgdGhlIC5sYSBmaWxlIGJlIGNyZWF0ZWQuCistICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKy0gICAgICAgICMgU2luY2UgdGhlIHVzZXIgaXMgc3BlY2lmeWluZyB0aGV5IGFyZSBsaW5raW5nIHdpdGggbGlidG9vbCwgd2UKKy0gICAgICAgICMgKmtub3cqIHRoYXQgLVIgd2lsbCBiZSByZWNvZ25pemVkIGJ5IGxpYnRvb2wuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtUiRsaWJkaXIgLWwkQVBSVVRJTF9MSUJOQU1FIgorLSAgICBlbHNlCistICAgICAgICBmbGFncz0iJGZsYWdzICRMQV9GSUxFIgorLSAgICBmaQorKyAgICAgICAgZmxhZ3M9IiRmbGFncyAtbCRBUFJVVElMX0xJQk5BTUUiCisgICAgIDs7CisgICAgIC0tYXB1LWxhLWZpbGUpCisgICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlndXJlX2ZpeGVzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlndXJlX2ZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTI0NGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWd1cmVfZml4ZXMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLXV0aWwtMS40LjEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLXV0aWwtMS40LjEub3JpZy9jb25maWd1cmUuaW4JMjAwOS0xMi0xOCAwMzoxNToxOS4wMDAwMDAwMDAgKzA4MDAKKysrKyBhcHItdXRpbC0xLjQuMS9jb25maWd1cmUuaW4JMjAxMS0xMi0zMCAxMzozMjowNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC04LDE1ICs4LDE1IEBACisgQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL3ByaXZhdGUvYXB1X2NvbmZpZy5oKQorIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkKQorIAorLXNpbmNsdWRlKGJ1aWxkL2FwdS1jb25mLm00KQorLXNpbmNsdWRlKGJ1aWxkL2FwdS1pY29udi5tNCkKKy1zaW5jbHVkZShidWlsZC9hcHUtaGludHMubTQpCistc2luY2x1ZGUoYnVpbGQvYXByX2NvbW1vbi5tNCkKKy1zaW5jbHVkZShidWlsZC9maW5kX2Fwci5tNCkKKy1zaW5jbHVkZShidWlsZC9jcnlwdG8ubTQpCistc2luY2x1ZGUoYnVpbGQvZGJtLm00KQorLXNpbmNsdWRlKGJ1aWxkL2RiZC5tNCkKKy1zaW5jbHVkZShidWlsZC9kc28ubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1jb25mLm00KQorKyNzaW5jbHVkZShidWlsZC9hcHUtaWNvbnYubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1oaW50cy5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXByX2NvbW1vbi5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZmluZF9hcHIubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2NyeXB0by5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZGJtLm00KQorKyNzaW5jbHVkZShidWlsZC9kYmQubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2Rzby5tNCkKKyAKKyBkbmwgR2VuZXJhdGUgLi9jb25maWcubmljZSBmb3IgcmVwcm9kdWNpbmcgcnVucyBvZiBjb25maWd1cmUKKyBkbmwgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxOWExZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL3J1bi1wdGVzdApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0CisuL3Rlc3RhbGwgfHNlZCBcCisgIC1lICdzfFwoLipcKTogIFNVQ0NFU1N8UEFTUzogXDF8JyBcCisgIC1lICdzfFwoLipcKTogIEZBSUxFRHxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsXzEuNS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTRkMTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYgpAQCAtMCwwICsxLDgxIEBACitTVU1NQVJZID0gIkFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIChBUFIpIGNvbXBhbmlvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiYXByIGV4cGF0IGdkYm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTE5ZTBhMThlMDNmN2MwMjMwNzA1NjhjMTRiMDc3YmIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9hcHVfdmVyc2lvbi5oO2VuZGxpbmU9MTc7bWQ1PTgwNjY4NWE4NGU3MWYxMGM4MDE0NGM0OGViMzVkZjQyIgorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vYXByLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODY2ODI1YzA0ZGE4MjdjNmU1ZjUzZGFmZjU1NjlmNDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTc2YTEyYTU5YmMyODZkNjM0YTIxZDdiZTA4NDFjYzc0Mjg5ZWE5MDc3YWExYWY0NmJlMTlkMWE2ZTg0NGMxOSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vYXByLTEtY29uZmlnIFwgCisJCS0td2l0aG91dC1vZGJjIFwKKwkJLS13aXRob3V0LXBnc3FsIFwKKwkJLS13aXRoLWRibT1nZGJtIFwKKwkJLS13aXRoLWdkYm09JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisJCS0td2l0aG91dC1zcWxpdGUyIFwKKwkJLS13aXRob3V0LXNxbGl0ZTMgXAorCQktLXdpdGgtZXhwYXQ9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSIKKworCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBiaW5jb25maWcKKworUFIgPSAicjEiCisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEUgPSAiIC1lICdzOmxvY2F0aW9uPXNvdXJjZTpsb2NhdGlvbj1pbnN0YWxsZWQ6JyIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlpZiBbICIke0NMQVNTT1ZFUlJJREV9IiA9ICJjbGFzcy10YXJnZXQiIF07IHRoZW4KKwkJY3AgJHtTVEFHSU5HX0RBVEFESVJ9L2Fwci9hcHJfcnVsZXMubWsgJHtCfS9idWlsZC9ydWxlcy5taworCWZpCit9Citkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJbWtkaXIgJHtCfS9idWlsZAorCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYXByL2Fwcl9ydWxlcy5tayAke0J9L2J1aWxkL3J1bGVzLm1rCit9Citkb19jb25maWd1cmVfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlzZWQgLWkgInMjTElCVE9PTD1cJChTSEVMTCkgXCQoYXByX2J1aWxkZGlyKSNMSUJUT09MPVwkKFNIRUxMKSAke1NUQUdJTkdfQklORElSX05BVElWRX0jIiAke0J9L2J1aWxkL3J1bGVzLm1rCisJIyBzb21ldGltZXMgdGhlcmUgaXNuJ3QgU0hFTEwKKwlzZWQgLWkgInMjTElCVE9PTD1cJChhcHJfYnVpbGRkaXIpI0xJQlRPT0w9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IyIgJHtCfS9idWlsZC9ydWxlcy5taworfQorCitkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3AgJHtTVEFHSU5HX0RBVEFESVJ9L2Fwci9hcHJfcnVsZXMubWsgJHtTfS9idWlsZC9ydWxlcy5taworfQorCitkb19jb25maWd1cmVfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlzZWQgLWkgInMjXChhcHJfYnVpbGRkaXJcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXChhcHJfYnVpbGRlcnNcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXCh0b3BfYnVpbGRkaXJcKT0uKiNcMT0ke1NUQUdJTkdfREFUQURJUn0vYnVpbGQtMSMiICR7U30vYnVpbGQvcnVsZXMubWsKKwlzZWQgLWkgInMjXChMSUJUT09MPVwkKGFwcl9idWlsZGRpcilcKS4qI1wxL2xpYnRvb2wjIiAke1N9L2J1aWxkL3J1bGVzLm1rCit9CisKK0ZJTEVTXyR7UE59ICAgICArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLTEuc28iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9hcHJ1dGlsLmV4cCAke2xpYmRpcn0vYXByLXV0aWwtMS9hcHJfZGJtX2dkYm0uc28qICR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5hIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJY2QgJHtCfS90ZXN0CisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCW1rZGlyICR0CisJZm9yIGkgaW4gdGVzdGFsbCBkYXRhOyBkbyBcCisJICBjcCAtciAke0J9L3Rlc3QvJGkgJHQ7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODA1YjhiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL0ZpeC1wYWNrZXQtZGlzY2FyZHMtSFRUUC1yZWRpcmVjdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGaXggcGFja2V0IGRpc2NhcmRzIEhUVFAgcmVkaXJlY3QuCisKK0Rpc2Nvbm5lY3QgdGhlIGNvbm5lY3Rpb24gYnkgcG9sbCgpIHRpbWVvdXQuCitJZiB0aW1lb3V0PTAgYW5kIGFwcl93YWl0X2Zvcl9pb19vcl90aW1lb3V0KCk9QVBSX1RJTUVVUCB0aGVuCithcHJfc29ja2V0X3JlY3YoKSByZXR1cm5zIEVBR0FJTi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE5vcmlha2kgWW9zaGl0YW5lIDx5b3NoaXRhbmUubnJzQGNudC5uY29zLm5lYy5jby5qcD4KK1NpZ25lZC1vZmYtYnk6IExpIFdhbmcgPGxpLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG5ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMgYi9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYworaW5kZXggYzEzM2EyNi4uZThmYWYxNSAxMDA2NDQKKy0tLSBhL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jCisrKysgYi9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYworQEAgLTg1LDYgKzg1LDEwIEBAIGFwcl9zdGF0dXNfdCBhcHJfc29ja2V0X3JlY3YoYXByX3NvY2tldF90ICpzb2NrLCBjaGFyICpidWYsIGFwcl9zaXplX3QgKmxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKHNvY2stPnRpbWVvdXQgPiAwKSkgeworIGRvX3NlbGVjdDoKKyAgICAgICAgIGFydiA9IGFwcl93YWl0X2Zvcl9pb19vcl90aW1lb3V0KE5VTEwsIHNvY2ssIDEpOworKyAgICAgICAgaWYgKChhcnYgPT0gQVBSX1RJTUVVUCkgJiYgKHNvY2stPnRpbWVvdXQgPT0gMCkpIHsKKysgICAgICAgICAgICAqbGVuID0gMDsKKysgICAgICAgICAgICByZXR1cm4gRUFHQUlOOworKyAgICAgICAgfQorICAgICAgICAgaWYgKGFydiAhPSBBUFJfU1VDQ0VTUykgeworICAgICAgICAgICAgICpsZW4gPSAwOworICAgICAgICAgICAgIHJldHVybiBhcnY7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY2xlYW51cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjc4NGUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuNC4yL2J1aWxkL2J1aWxkY2hlY2suc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItMS40LjIub3JpZy9idWlsZC9idWlsZGNoZWNrLnNoCTIwMDktMTEtMTMgMDg6Mjc6MTYuMDAwMDAwMDAwICswODAwCisrKysgYXByLTEuNC4yL2J1aWxkL2J1aWxkY2hlY2suc2gJMjAxMC0xMS0yNiAxNTo0NDowMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zMiwzNSArMzIsNCBAQAorIGVjaG8gImJ1aWxkY29uZjogYXV0b2NvbmYgdmVyc2lvbiAkYWNfdmVyc2lvbiAob2spIgorIGZpCisgCistIyBTYW1wbGUgbGlidG9vbCAtLXZlcnNpb24gb3V0cHV0czoKKy0jIGx0bWFpbi5zaCAoR05VIGxpYnRvb2wpIDEuMy4zICgxLjM4NS4yLjE4MSAxOTk5LzA3LzAyIDE1OjQ5OjExKQorLSMgbHRtYWluLnNoIChHTlUgbGlidG9vbCAxLjEzNjEgMjAwNC8wMS8wMiAyMzoxMDo1MikgMS41YQorLSMgb3V0cHV0IGlzIG11bHRpbGluZSBmcm9tIDEuNSBvbndhcmRzCistCistIyBSZXF1aXJlIGxpYnRvb2wgMS40IG9yIG5ld2VyCistbGlidG9vbD1gYnVpbGQvUHJpbnRQYXRoIGdsaWJ0b29sMSBnbGlidG9vbCBsaWJ0b29sIGxpYnRvb2wxNSBsaWJ0b29sMTRgCistbHRfcHZlcnNpb249YCRsaWJ0b29sIC0tdmVyc2lvbiAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvKFteKV0qKS8vZztzL15bXjAtOV0qLy87cy9bLSBdLiovL2c7cSdgCistaWYgdGVzdCAteiAiJGx0X3B2ZXJzaW9uIjsgdGhlbgorLWVjaG8gImJ1aWxkY29uZjogbGlidG9vbCBub3QgZm91bmQuIgorLWVjaG8gIiAgICAgICAgICAgWW91IG5lZWQgbGlidG9vbCB2ZXJzaW9uIDEuNCBvciBuZXdlciBpbnN0YWxsZWQiCistZWNobyAiICAgICAgICAgICB0byBidWlsZCBBUFIgZnJvbSBTVk4uIgorLWV4aXQgMQorLWZpCistbHRfdmVyc2lvbj1gZWNobyAkbHRfcHZlcnNpb258c2VkIC1lICdzL1woW2Etel0qXCkkLy5cMS8nYAorLUlGUz0uOyBzZXQgJGx0X3ZlcnNpb247IElGUz0nICcKKy1sdF9zdGF0dXM9Imdvb2QiCistaWYgdGVzdCAiJDEiID0gIjEiOyB0aGVuCistICAgaWYgdGVzdCAiJDIiIC1sdCAiNCI7IHRoZW4KKy0gICAgICBsdF9zdGF0dXM9ImJhZCIKKy0gICBmaQorLWZpCistaWYgdGVzdCAkbHRfc3RhdHVzID0gImdvb2QiOyB0aGVuCistICAgZWNobyAiYnVpbGRjb25mOiBsaWJ0b29sIHZlcnNpb24gJGx0X3B2ZXJzaW9uIChvaykiCistICAgZXhpdCAwCistZmkKKy0KKy1lY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgdmVyc2lvbiAkbHRfcHZlcnNpb24gZm91bmQuIgorLWVjaG8gIiAgICAgICAgICAgWW91IG5lZWQgbGlidG9vbCB2ZXJzaW9uIDEuNCBvciBuZXdlciBpbnN0YWxsZWQiCistZWNobyAiICAgICAgICAgICB0byBidWlsZCBBUFIgZnJvbSBTVk4uIgorLQorLWV4aXQgMQorK2V4aXQgMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ2ZpeC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWdmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1YzRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWdmaXgucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuMy4zL2Fwci1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItMS4zLjMub3JpZy9hcHItY29uZmlnLmluCTIwMDktMDEtMTIgMTU6MTY6MzEuMDAwMDAwMDAwICswMDAwCisrKysgYXByLTEuMy4zL2Fwci1jb25maWcuaW4JMjAwOS0wMS0xMiAxNToxOToyNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTIsMTQgKzE1Miw3IEBACisgICAgIGZsYWdzPSIkZmxhZ3MgJExERkxBR1MiCisgICAgIDs7CisgICAgIC0taW5jbHVkZXMpCistICAgIGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorICAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRpbmNsdWRlZGlyICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gInNvdXJjZSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBSX1NPVVJDRV9ESVIvaW5jbHVkZSAkRVhUUkFfSU5DTFVERVMiCistICAgIGVsc2UKKy0gICAgICAgICMgdGhpcyBpcyBmb3IgVlBBVEggYnVpbGRzCistICAgICAgICBmbGFncz0iJGZsYWdzIC1JJEFQUl9CVUlMRF9ESVIvaW5jbHVkZSAtSSRBUFJfU09VUkNFX0RJUi9pbmNsdWRlICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZmkKKyAgICAgOzsKKyAgICAgLS1zcmNkaXIpCisgICAgIGVjaG8gJEFQUl9TT1VSQ0VfRElSCitAQCAtMTgxLDI5ICsxNjcsMTQgQEAKKyAgICAgZXhpdCAwCisgICAgIDs7CisgICAgIC0tbGluay1sZCkKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtbCR7QVBSX0xJQk5BTUV9IgorLSAgICBlbHNlCistICAgICAgICAjIyMgdGhpcyBzdXJlbHkgY2FuJ3Qgd29yayBzaW5jZSB0aGUgbGlicmFyeSBpcyBpbiAubGlicz8KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkQVBSX0JVSUxEX0RJUiAtbCR7QVBSX0xJQk5BTUV9IgorLSAgICBmaQorKyAgICAgICAgZmxhZ3M9IiRmbGFncyAtbCR7QVBSX0xJQk5BTUV9IgorICAgICA7OworICAgICAtLWxpbmstbGlidG9vbCkKKyAgICAgIyBJZiB0aGUgTEFfRklMRSBleGlzdHMgd2hlcmUgd2UgdGhpbmsgaXQgc2hvdWxkIGJlLCB1c2UgaXQuICBJZiB3ZSdyZQorICAgICAjIGluc3RhbGxlZCBhbmQgdGhlIExBX0ZJTEUgZG9lcyBub3QgZXhpc3QsIGFzc3VtZSB0byB1c2UgLUwvLWwKKyAgICAgIyAodGhlIExBX0ZJTEUgbWF5IG5vdCBoYXZlIGJlZW4gaW5zdGFsbGVkKS4gIElmIHdlJ3JlIGJ1aWxkaW5nIG91cnNlbHZlcywKKyAgICAgIyB3ZSdsbCBhc3N1bWUgdGhhdCBhdCBzb21lIHBvaW50IHRoZSAubGEgZmlsZSBiZSBjcmVhdGVkLgorLSAgICBpZiB0ZXN0IC1mICIkTEFfRklMRSI7IHRoZW4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGVsaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCistICAgICAgICAjIyMgYXZvaWQgdXNpbmcgLUwgaWYgbGliZGlyIGlzIGEgInN0YW5kYXJkIiBsb2NhdGlvbiBsaWtlIC91c3IvbGliCistICAgICAgICAjIFNpbmNlIHRoZSB1c2VyIGlzIHNwZWNpZnlpbmcgdGhleSBhcmUgbGlua2luZyB3aXRoIGxpYnRvb2wsIHdlCistICAgICAgICAjICprbm93KiB0aGF0IC1SIHdpbGwgYmUgcmVjb2duaXplZCBieSBsaWJ0b29sLgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRsaWJkaXIgLVIkbGliZGlyIC1sJHtBUFJfTElCTkFNRX0iCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGZpCisrICAgICAgICBmbGFncz0iJGZsYWdzIC1sJHtBUFJfTElCTkFNRX0iCisgICAgIDs7CisgICAgIC0tc2hsaWItcGF0aC12YXIpCisgICAgIGVjaG8gIiRTSExJQlBBVEhfVkFSIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWd1cmVfZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxNDAwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9jb25maWd1cmVfZml4ZXMucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLTEuMy4zL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci0xLjMuMy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIGFwci0xLjMuMy9jb25maWd1cmUuaW4KK0BAIC03OTQsMzkgKzc5NCw2IEBAIEFDX0NIRUNLX0ZVTkNTKFttbWFwIG11bm1hcCBzaG1fb3BlbiBzaG0KKyAgICAgICAgICAgICAgICAgY3JlYXRlX2FyZWFdKQorIAorIEFQUl9DSEVDS19ERUZJTkUoTUFQX0FOT04sIHN5cy9tbWFuLmgpCistQUNfQ0hFQ0tfRklMRSgvZGV2L3plcm8pCistCistIyBOb3QgYWxsIHN5c3RlbXMgY2FuIG1tYXAgL2Rldi96ZXJvIChzdWNoIGFzIEhQLVVYKS4gIENoZWNrIGZvciB0aGF0LgorLWlmIHRlc3QgIiRhY19jdl9mdW5jX21tYXAiID0gInllcyIgJiYKKy0gICB0ZXN0ICIkYWNfY3ZfZmlsZV9fZGV2X3plcm8iID0gInllcyI7IHRoZW4KKy0gICAgQUNfTVNHX0NIRUNLSU5HKGZvciBtbWFwIHRoYXQgY2FuIG1hcCAvZGV2L3plcm8pCistICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0jaW5jbHVkZSA8ZmNudGwuaD4KKy0jaWZkZWYgSEFWRV9TWVNfTU1BTl9ICistI2luY2x1ZGUgPHN5cy9tbWFuLmg+CistI2VuZGlmCistICAgIGludCBtYWluKCkKKy0gICAgeworLSAgICAgICAgaW50IGZkOworLSAgICAgICAgdm9pZCAqbTsKKy0gICAgICAgIGZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKKy0gICAgICAgIGlmIChmZCA8IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gMTsKKy0gICAgICAgIH0KKy0gICAgICAgIG0gPSBtbWFwKDAsIHNpemVvZih2b2lkKiksIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CistICAgICAgICBpZiAobSA9PSAodm9pZCAqKS0xKSB7ICAvKiBha2EgTUFQX0ZBSUxFRCAqLworLSAgICAgICAgICAgIHJldHVybiAyOworLSAgICAgICAgfQorLSAgICAgICAgaWYgKG11bm1hcChtLCBzaXplb2Yodm9pZCopKSA8IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gMzsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiAwOworLSAgICB9XSwgW10sIFthY19jdl9maWxlX19kZXZfemVybz1ub10sIFthY19jdl9maWxlX19kZXZfemVybz1ub10pCistCistICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2ZpbGVfX2Rldl96ZXJvKQorLWZpCisgCisgIyBOb3cgd2UgZGV0ZXJtaW5lIHdoaWNoIG9uZSBpcyBvdXIgYW5vbnltb3VzIHNobWVtIHByZWZlcmVuY2UuCisgaGF2ZXNobWdldGFub249IjAiCitAQCAtMTUxOCwxMyArMTQ4NSwxNCBAQCBlbHNlCisgICAgIGJpZ2VuZGlhbj0wCisgZmkKKyAKKy1BUFJfQ0hFQ0tfU0laRU9GX0VYVEVOREVEKFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy91aW8uaD5dLHN0cnVjdCBpb3ZlYywwKQorLWlmIHRlc3QgIiRhY19jdl9zaXplb2Zfc3RydWN0X2lvdmVjIiA9ICIwIjsgdGhlbgorLSAgICBoYXZlX2lvdmVjPTAKKy1lbHNlCistICAgIGhhdmVfaW92ZWM9MQorLWZpCisrI0FQUl9DSEVDS19TSVpFT0ZfRVhURU5ERUQoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjI2luY2x1ZGUgPHN5cy91aW8uaD5dLHN0cnVjdCBpb3ZlYywwKQorKyNpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3N0cnVjdF9pb3ZlYyIgPSAiMCI7IHRoZW4KKysjICAgIGhhdmVfaW92ZWM9MAorKyNlbHNlCisrIyAgICBoYXZlX2lvdmVjPTEKKysjZmkKKytoYXZlX2lvdmVjPTEKKyAKKyBBQ19TVUJTVCh2b2lkcF9zaXplKQorIEFDX1NVQlNUKHNob3J0X3ZhbHVlKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxOWExZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9ydW4tcHRlc3QKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2QgdGVzdAorLi90ZXN0YWxsIHxzZWQgXAorICAtZSAnc3xcKC4qXCk6ICBTVUNDRVNTfFBBU1M6IFwxfCcgXAorICAtZSAnc3xcKC4qXCk6ICBGQUlMRUR8RkFJTDogXDF8JwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2OTY0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorTWFrZWZpbGUuaW46IGZpeCBjcm9zcyBjb21waWxpbmcgZmFpbGVkCisKK1RoZSB0b29scy9nZW5fdGVzdF9jaGFyIHdhcyBpbnZva2VkIGF0IGJ1aWxkIHRpbWUsCithbmQgaXQgZGlkbid0IHdvcmsgZm9yIHRoZSBjcm9zcyBjb21waWxpbmcsIHNvIHdlCitjb21waWxlIGl0IHdpdGggJEJVSUxEX0NDLgorCitSZW1vdmUgdGhlICd0b29scycgZGlyIGNyZWF0aW9uLCBpdCBhbHdheXMgZXhpc3RlZC4KK0FuZCBpdCBjYXVzZWQgZ2VuX3Rlc3RfY2hhciB1bmV4cGVjdGVkIHJlYnVpbHQgYXQKK2RvX2luc3RhbGwgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBpbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAxMCArKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGEyYTUxOTQuLjVmZTAyOGYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00Niw3ICs0Niw2IEBAIExUX1ZFUlNJT04gPSBATFRfVkVSU0lPTkAKKyAKKyBDTEVBTl9UQVJHRVRTID0gYXByLWNvbmZpZy5vdXQgYXByLmV4cCBleHBvcnRzLmMgZXhwb3J0X3ZhcnMuYyAubWFrZS5kaXJzIFwKKyAJYnVpbGQvYXByX3J1bGVzLm91dCB0b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEAgXAorLQl0b29scy9nZW5fdGVzdF9jaGFyLm8gdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbyBcCisgCWluY2x1ZGUvcHJpdmF0ZS9hcHJfZXNjYXBlX3Rlc3RfY2hhci5oCisgRElTVENMRUFOX1RBUkdFVFMgPSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIFwKKyAJaW5jbHVkZS9hcHIuaCBpbmNsdWRlL2FyY2gvdW5peC9hcHJfcHJpdmF0ZS5oIFwKK0BAIC0xMjksMTMgKzEyOCw4IEBAIGNoZWNrOiAkKFRBUkdFVF9MSUIpCisgZXRhZ3M6CisgCWV0YWdzIGBmaW5kIC4gLW5hbWUgJyouW2NoXSdgCisgCistT0JKRUNUU19nZW5fdGVzdF9jaGFyID0gdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbyAkKExPQ0FMX0xJQlMpCistdG9vbHMvZ2VuX3Rlc3RfY2hhci5sbzogdG9vbHMvZ2VuX3Rlc3RfY2hhci5jCistCSQoQVBSX01LRElSKSB0b29scworLQkkKExUX0NPTVBJTEUpCistCistdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRAOiAkKE9CSkVDVFNfZ2VuX3Rlc3RfY2hhcikKKy0JJChMSU5LX1BST0cpICQoT0JKRUNUU19nZW5fdGVzdF9jaGFyKSAkKEFMTF9MSUJTKQorK3Rvb2xzL2dlbl90ZXN0X2NoYXJARVhFRVhUQDogdG9vbHMvZ2VuX3Rlc3RfY2hhci5jCisrCSQoQlVJTERfQ0MpICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgJDwgLW8gJEAKKyAKKyBpbmNsdWRlL3ByaXZhdGUvYXByX2VzY2FwZV90ZXN0X2NoYXIuaDogdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRACisgCSQoQVBSX01LRElSKSBpbmNsdWRlL3ByaXZhdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWY3ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByXzEuNS4yLmJiCkBAIC0wLDAgKzEsOTYgQEAKK1NVTU1BUlkgPSAiQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgKEFQUikgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hcHIuYXBhY2hlLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInV0aWwtbGludXgiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTRkZmQ0Y2QyMTY4MjhjOGNhZTVkZTVhMTJmMzg0NGM4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYXByX2xpYi5oO2VuZGxpbmU9MTc7bWQ1PWVlNDJmYTc1NzVkYzQwNTgwYTllMDFjMWI3NWZhZTk2IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS9hcHIvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX2ZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFudXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly91cGdyYWRlLWFuZC1maXgtMS41LjEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlOTc2OWYzMzQ5ZmUxMWZjMGE1ZTFiMjI0YzIzNmFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkMDNlZDI5YzIyYTcxNTJiZTQ1YjhlNTA0MzEwNjM3MzZkZjllMWRhYTFkZGY5M2Y2YTU0N2JhN2EyOGY2N2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBsaWJfcGFja2FnZSBiaW5jb25maWcgbXVsdGlsaWJfaGVhZGVyIHB0ZXN0CisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEUgPSAiIC1lICdzOmxvY2F0aW9uPXNvdXJjZTpsb2NhdGlvbj1pbnN0YWxsZWQ6JyIKKworIyBBZGRlZCB0byBmaXggc29tZSBpc3N1ZXMgd2l0aCBjbWFrZS4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2Jtd2Nhcml0L21ldGEtcm9zL2lzc3Vlcy82OCNpc3N1ZWNvbW1lbnQtMTk4OTY5MjgKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhcHJfY3ZfbXV0ZXhfcmVjdXJzaXZlPXllcyIKKworIyBBbHNvIHN1cHByZXNzIHRyeWluZyB0byB1c2Ugc2N0cC4KKyMKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm8gYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ubyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBBdm9pZCBhYnNvbHV0ZSBwYXRocyBmb3IgZ3JlcCBzaW5jZSBpdCBjYXVzZXMgZmFpbHVyZXMKKwkjIHdoZW4gdXNpbmcgc3N0YXRlIGJldHdlZW4gZGlmZmVyZW50IGhvc3RzIHdpdGggZGlmZmVyZW50CisJIyBpbnN0YWxsIHBhdGhzIGZvciBncmVwLgorCWV4cG9ydCBHUkVQPSJncmVwIgorCisJY2QgJHtTfQorCS4vYnVpbGRjb25mCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2Fwci5leHAgJHtkYXRhZGlyfS9idWlsZC0xLyoiCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKKyNmb3Igc29tZSByZWFzb24sIGJ1aWxkL2xpYnRvb2wubTQgaGFuZGxlZCBieSBidWlsZGNvbmYgc3RpbGwgYmUgb3ZlcndyaXR0ZW4KKyN3aGVuIGF1dG9jb25mLCBzbyBoYW5kbGUgaXQgYWdhaW4uCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAncy9MSUJUT09MPVwoLipcKXRvcF9idWlsZC9MSUJUT09MPVwxYXByX2J1aWxkLycgJHtTfS9idWlsZC9saWJ0b29sLm00CisJc2VkIC1pIC1lICdzL0xJQlRPT0w9XCguKlwpdG9wX2J1aWxkL0xJQlRPT0w9XDFhcHJfYnVpbGQvJyAke1N9L2J1aWxkL2Fwcl9ydWxlcy5taworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYXByLmgKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcgorCWNwICR7U30vJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtkYXRhZGlyfS9idWlsZC0xL2xpYnRvb2wKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gImFwcl9ydWxlcy5tayBsaWJ0b29sIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImFwcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK2Fwcl9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWQ9JHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hcHIKKwlpbnN0YWxsIC1kICRkLworCWNwICR7U30vYnVpbGQvYXByX3J1bGVzLm1rICRkLworCXNlZCAtaSBzLGFwcl9idWlsZGRpcj0uKixhcHJfYnVpbGRkaXI9LGcgJGQvYXByX3J1bGVzLm1rCisJc2VkIC1pIHMsYXByX2J1aWxkZXJzPS4qLGFwcl9idWlsZGVycz0sZyAkZC9hcHJfcnVsZXMubWsKKwlzZWQgLWkgcyxMSUJUT09MPS4qLExJQlRPT0w9JHtIT1NUX1NZU30tbGlidG9vbCxnICRkL2Fwcl9ydWxlcy5taworCXNlZCAtaSBzLFwkXChhcHJfYnVpbGRlcnNcKSwke1NUQUdJTkdfREFUQURJUn0vYXByLyxnICRkL2Fwcl9ydWxlcy5taworCWNwICR7U30vYnVpbGQvbWtkaXIuc2ggJGQvCisJY3AgJHtTfS9idWlsZC9tYWtlX2V4cG9ydHMuYXdrICRkLworCWNwICR7U30vYnVpbGQvbWFrZV92YXJfZXhwb3J0LmF3ayAkZC8KK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwljZCAke1N9L3Rlc3QKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbWtkaXIgLXAgJHQvLmxpYnMKKwljcCAtciAke1N9L3Rlc3QvZGF0YSAkdC8KKwljcCAtciAke1N9L3Rlc3QvLmxpYnMvKi5zbyAkdC8ubGlicy8KKwljcCAke1N9L3Rlc3QvcHJvY19jaGlsZCAkdC8KKwljcCAke1N9L3Rlc3QvcmVhZGNoaWxkICR0LworCWNwICR7U30vdGVzdC9zb2NrY2hpbGQgJHQvCisJY3AgJHtTfS90ZXN0L3NvY2twZXJmICR0LworCWNwICR7U30vdGVzdC90ZXN0YWxsICR0LworCWNwICR7U30vdGVzdC90cnlyZWFkICR0LworfQorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL2Jhc2giCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmMTdkNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXNwZWxsL2FzcGVsbF8wLjYwLjYuMS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkdOVSBBc3BlbGwgc3BlbGwtY2hlY2tlciIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJMR1BMdjIgfCBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2FzcGVsbC9hc3BlbGwtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImU2NmE5YzlhZjZhNjBkYzQ2MTM0ZmRhY2Y2Y2U5N2Q3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1MjU4M2E4M2E2MzYzMzcwMWM1ZjcxZGIzZGM0MGFhYjg3YjdmNzZiMjk3MjNhZWIyNzk0MWVmZjQyZGY2ZTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2N1cnNlc10gPSAiLS1lbmFibGUtY3Vyc2VzLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcyIKKworUEFDS0FHRVMgKz0gImxpYmFzcGVsbCBsaWJwc3BlbGwgYXNwZWxsLXV0aWxzIgorCitSREVQRU5EU18ke1BOfS11dGlscyArPSAicGVybCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXNwZWxsLTAuNjAvLmRlYnUqIgorRklMRVNfbGliYXNwZWxsID0gIiR7bGliZGlyfS9saWJhc3BlbGwuc28uKiAke2xpYmRpcn0vYXNwZWxsKiIKK0ZJTEVTX2FzcGVsbC11dGlscyA9ICIke2JpbmRpcn0vd29yZC1saXN0LWNvbXByZXNzICR7YmluZGlyfS9hc3BlbGwtaW1wb3J0ICR7YmluZGlyfS9ydW4td2l0aC1hc3BlbGwgJHtiaW5kaXJ9L3ByZSoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vYXNwZWxsIgorRklMRVNfbGlicHNwZWxsID0gIiR7bGliZGlyfS9saWJwc3BlbGwuc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L3BzcGVsbC1jb25maWciCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgoraW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wc3BlbGwtY29uZmlnIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTVmZGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWF0a18yLjE2LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJBVC1TUEkgMiBUb29sa2l0IEJyaWRnZSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTlmMjg4YmE5ODJkNjA1MThmMzc1YjU4OTgyODM4ODYiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtCUE59LyR7TUFKX1ZFUn0vJHtCUE59LSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4OTM2NDg4YzhjZGNlMGUxNThmODBiMmUyNDc1MjdmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OGVmYzQ1ZWMzNjM4M2JmNzg1Zjg2MzZlNjRhOGQ4NjZkZWZlYjAyMGUwMGEwOGY5Mjk3OGYxZmMzNzcyZmY5IgorCitERVBFTkRTID0gImRidXMgZ2xpYi0yLjAgYXRrIGF0LXNwaTItY29yZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBhdC1zcGkyLWNvcmUgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWdub21lICR7UE59LWd0azIiCisKK0ZJTEVTXyR7UE59LWdub21lID0gIiR7bGliZGlyfS9nbm9tZS1zZXR0aW5ncy1kYWVtb24tMy4wL2d0ay1tb2R1bGVzIgorRklMRVNfJHtQTn0tZ3RrMiA9ICIke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmF0ay1icmlkZ2UuKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTUxZDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGMzMjA3OTljOTQxZDQyYTliN2UzNTE4MDUzNTk2OTRlYTNiMzZkMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA1IEFwciAyMDE1IDA5OjA4OjM4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG5scy5tNDogVGFrZSBpdCBmcm9tIGdldHRleHQtMC4xNQorCitJdCBvdGhlcndpc2UgZXhwZWN0cyBnZXR0ZXh0IHRvIHByb3ZpZGUgaXQuIExldHMgZ28gaW5kZXBlbmRlbnQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBtNC9ubHMubTQgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBtNC9ubHMubTQKKworZGlmZiAtLWdpdCBhL200L25scy5tNCBiL200L25scy5tNAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJjOGZlNjkKKy0tLSAvZGV2L251bGwKKysrKyBiL200L25scy5tNAorQEAgLTAsMCArMSwzMCBAQAorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSBub3QgaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sIFVscmljaCBEcmVwcGVyIGRyZXBwZXJAY3lnbnVzLmNvbSwgMTk5NS0yMDAwLgorK2RubCBCcnVubyBIYWlibGUgaGFpYmxlQGNsaXNwLmNvbnMub3JnLCAyMDAwLTIwMDMuCisrCisrQUNfUFJFUkVRKDIuNTApCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkXSkKKytkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUworK0FDX0FSR19FTkFCTEUobmxzLAorK1sgLS1kaXNhYmxlLW5scyBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKytVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQorK0FDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrQUNfU1VCU1QoVVNFX05MUykKKytdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzNjYmU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1jb3JlXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkFzc2lzdGl2ZSBUZWNobm9sb2d5IFNlcnZpY2UgUHJvdmlkZXIgSW50ZXJmYWNlIChkYnVzIGNvcmUpIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJlNmVlZWEzNzBmOTEzYjc2MzliNjA5OTEzYjJjZjAyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFjMGI3N2ZiOGNlODFhYmJmMWQ4MGMwYWZlZTk4NThiM2Y5MjI5ZjY3M2I3ODgxOTk1ZmUwZmMxNmIxYTc0ZDAiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCB2aXJ0dWFsL2xpYngxMSBsaWJ4aSBsaWJ4dHN0IGludGx0b29sLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUteGV2aWUgLS13aXRoLWRidXMtZGFlbW9uZGlyPSR7YmluZGlyfSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyouc2VydmljZSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvYWNjZXNzaWJpbGl0eS1zZXJ2aWNlcy8qLnNlcnZpY2UiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xNi4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjhmOWI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXRrXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkFjY2Vzc2liaWxpdHkgdG9vbGtpdCBmb3IgR05PTUUiCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvR0FQLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvbGlicyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXRrL2F0a3V0aWwuYztlbmRsaW5lPTE4O21kNT02ZmQzMWNkMmZkYzliMzBmNjE5Y2E4ZDgxOWJjMTJkMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrLmg7ZW5kbGluZT0xODttZDU9ZmNkNzcxMDE4N2UwZWFlNDg1ZTM1NmMzMGQxYjBjM2IiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYzdjNTAwMmJkNmU1OGI0NzIzYTE2NWYxYmYzMTIxMTYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwOTVmOTg2MDYwYTZhMGIyMmViMTVlZWY4NGFlOWYxNGExY2Y4MDgyNDg4ZmFhNjg4NmQ5NGMzNzQzOGFlNTYyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1nbGlidGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYmM4YmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuYWdpbmcgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9hY2wvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIrIgorTElDRU5TRV9saWIke0JQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0NPUFlJTkc7bWQ1PWM3ODFkNzBlZDJiNGQ0ODk5NWI3OTA0MDMyMTdhMjQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9DT1BZSU5HLkxHUEw7bWQ1PTllOWEyMDY5MTdmOGFmMTEyZGE2MzRjZTNhYjQxNzY0IgorCitERVBFTkRTID0gImF0dHIiCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vYWNsLyR7QlB9LnNyYy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoIFwKKyIKKworcmVxdWlyZSBlYS1hY2wuaW5jCisKKyMgYXZvaWQgUlBBVEggaGFyZGNvZGUgdG8gc3RhZ2luZyBkaXIKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkIC1pICR7U30vY29uZmlnLnN0YXR1cyAtZSBzLF5cXFwoaGFyZGNvZGVfaW50b19saWJzPVxcXCkuKiQsXFwxXCdub1wnLAorCSR7U30vY29uZmlnLnN0YXR1cworfQorCisjIGxpYmRpciBzaG91bGQgcG9pbnQgdG8gLmxhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtEfSR7bGliZGlyfS9saWJhY2wubGEgLWUgXAorCSAgICBzLF5saWJkaXI9XCcke2Jhc2VfbGliZGlyfVwnJCxsaWJkaXI9XCcke2xpYmRpcn1cJywKK30KKworaW5oZXJpdCBwdGVzdAorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbmZzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCW1rZGlyICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUKKwljcCAke1N9L2luY2x1ZGUvYnVpbGRkZWZzICR7U30vaW5jbHVkZS9idWlsZG1hY3JvcyAke1N9L2luY2x1ZGUvYnVpbGRydWxlcyAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLworfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJhY2wgYmFzaCBjb3JldXRpbHMgcGVybCBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXggc2hhZG93IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3NjVmZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK2FjbDogZml4IHRoZSBvcmRlciBvZiBleHBlY3RlZCBvdXRwdXQgb2YgZ2V0ZmFjbAorCitUaGUgcmVzdWx0IG9mIGdldGZhY2wgaXMgc29ydGVkIGJ5IHVzZXIgaWQuCitJbiBDZW50b3Mgb3IgUkhFTCwgYmluIHVzZXIgaWQgaXMgMSBhbmQgZGFlbW9uIHVzZXIgaWQgaXMgMi4KK0J1dCBpbiBvdXIgaW1hZ2UsIGJpbiB1c2VyIGlkIGlzIDIgYW5kIGRhZW1vbiB1c2VyIGlkIGlzIDEuCitUaGUgcGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSB0byBtYWtlIHB0ZXN0IHBhc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdC9taXNjLnRlc3QgfCAgIDM4ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9taXNjLnRlc3QgYi90ZXN0L21pc2MudGVzdAoraW5kZXggNmU5ODA1My4uNTNhZTViMCAxMDA2NDQKKy0tLSBhL3Rlc3QvbWlzYy50ZXN0CisrKysgYi90ZXN0L21pc2MudGVzdAorQEAgLTc5LDggKzc5LDggQEAgTXVsdGlwbGUgdXNlcnMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBtYXNrOjpydy0KKyAJPiBvdGhlcjo6ci0tCitAQCAtOTQsOCArOTQsOCBAQCBNdWx0aXBsZSBncm91cHMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBncm91cDpkYWVtb246ci0tCisgCT4gZ3JvdXA6dXNlcnM6cnctCitAQCAtMTExLDggKzExMSw4IEBAIFJlbW92ZSBvbmUgZ3JvdXAKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZgorIAk+IHVzZXI6OnJ3LQorLQk+IHVzZXI6YmluOnJ3LQorIAk+IHVzZXI6ZGFlbW9uOnItLQorKwk+IHVzZXI6YmluOnJ3LQorIAk+IGdyb3VwOjpyLS0KKyAJPiBncm91cDpkYWVtb246ci0tCisgCT4gbWFzazo6cnctCitAQCAtMTQ2LDggKzE0Niw4IEBAIERlZmF1bHQgQUNMCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gKKyAJPiB1c2VyOmRhZW1vbjpydy0KKysJPiB1c2VyOmJpbjpyd3gKKyAJPiBncm91cDo6ci14CisgCT4gbWFzazo6cnd4CisgCT4gb3RoZXI6Oi0tLQorQEAgLTIzNiwxNiArMjM2LDE2IEBAIEFkZCBzb21lIHVzZXJzIGFuZCBncm91cHMKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9kCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnIteAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTI2MiwxNiArMjYyLDE2IEBAIFN5bWxpbmsgaW4gZGlyZWN0b3J5IHdpdGggZGVmYXVsdCBBQ0w/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvbAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyLXgKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0yODcsMTYgKzI4NywxNiBAQCBEb2VzIG1hc2sgbWFuaXB1bGF0aW9uIHdvcms/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyLXgKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0zMDgsMTYgKzMwOCwxNiBAQCBEb2VzIG1hc2sgbWFuaXB1bGF0aW9uIHdvcms/CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQvZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyLXgKKyAJPiBncm91cDpkYWVtb246ci14CisgCT4gZ3JvdXA6dXNlcnM6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnIteAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CisgCT4gZGVmYXVsdDpncm91cDo6ci14CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjotLS0KK0BAIC0zMzMsOCArMzMzLDggQEAgUmVtb3ZlIHRoZSBkZWZhdWx0IEFDTAorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CisgCT4gdXNlcjpkYWVtb246cnctCisrCT4gdXNlcjpiaW46cnd4CisgCT4gZ3JvdXA6OnIteAorIAk+IG1hc2s6OnJ3eAorIAk+IG90aGVyOjotLS0KK0BAIC0zNzMsMTQgKzM3MywxNCBAQCBOb3csIGNobW9kIHNob3VsZCBjaGFuZ2UgdGhlIGdyb3VwX29iaiBlbnRyeQorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246cnd4CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnJ3eAorIAk+IG1hc2s6OnJ3eAorIAk+IG90aGVyOjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyd3gKKysJPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnJ3eAorIAk+IGRlZmF1bHQ6bWFzazo6cnd4CisgCT4gZGVmYXVsdDpvdGhlcjo6ci14CitAQCAtMzkyLDE0ICszOTIsMTQgQEAgTm93LCBjaG1vZCBzaG91bGQgY2hhbmdlIHRoZSBncm91cF9vYmogZW50cnkKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246cnd4CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyd3gKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6OnIteAorQEAgLTQxMSwxNCArNDExLDE0IEBAIE5vdywgY2htb2Qgc2hvdWxkIGNoYW5nZSB0aGUgZ3JvdXBfb2JqIGVudHJ5CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gbWFzazo6ci14CisgCT4gb3RoZXI6Oi0tLQorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnJ3eAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDpncm91cDo6cnd4CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjpyLXgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWRkLW1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjk3OWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtjb25maWd1cmUuYWMgaXMgbWlzc2luZyBmcm9tIHRhcmJhbGxdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGFjbC0yLjIuNTIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYWNsLTIuMi41Mi9jb25maWd1cmUuYWMKK0BAIC0wLDAgKzEsNTAgQEAKKysKKysjIENvcHlyaWdodCAoQykgMjAwOSAgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysjCisrQUNfSU5JVChpbmNsdWRlL2FjbC5oKQorK0FDX0NPTkZJR19BVVhfRElSKFsuXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL2NvbmZpZy5oKQorK0FDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisrCisrQUNfUFJPR19MSUJUT09MCisrCisrQUNfQVJHX0VOQUJMRShzaGFyZWQsCisrWyAtLWVuYWJsZS1zaGFyZWQ9W3llcy9ub10gRW5hYmxlIHVzZSBvZiBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX3NoYXJlZD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX3NoYXJlZCkKKysKKytBQ19BUkdfRU5BQkxFKGdldHRleHQsCisrWyAtLWVuYWJsZS1nZXR0ZXh0PVt5ZXMvbm9dIEVuYWJsZSBhbHRlcm5hdGUgbGFuZ3VhZ2Ugc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9nZXR0ZXh0PXllcykKKytBQ19TVUJTVChlbmFibGVfZ2V0dGV4dCkKKysKKytBQ19BUkdfRU5BQkxFKGxpYjY0LAorK1sgLS1lbmFibGUtbGliNjQ9W3llcy9ub10gRW5hYmxlIGxpYjY0IHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwsCisrCWVuYWJsZV9saWI2ND1ubykKKytBQ19TVUJTVChlbmFibGVfbGliNjQpCisrCisrQUNfUEFDS0FHRV9HTE9CQUxTKGFjbCkKKytBQ19QQUNLQUdFX1VUSUxJVElFUyhhY2wpCisrQUNfUEFDS0FHRV9ORUVEX0FUVFJfWEFUVFJfSAorK0FDX1BBQ0tBR0VfTkVFRF9BVFRSX0VSUk9SX0gKKytBQ19NVUxUSUxJQigkZW5hYmxlX2xpYjY0KQorK0FDX1BBQ0tBR0VfTkVFRF9HRVRYQVRUUl9MSUJBVFRSCisrQUNfTUFOVUFMX0ZPUk1BVAorKworK0FDX0ZVTkNfR0NDX1ZJU0lCSUxJVFkKKysKKytBQ19PVVRQVVQoaW5jbHVkZS9idWlsZGRlZnMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzFjYzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitncGFzc3dkIC1hIGRhZW1vbiBiaW4KK21ha2UgLUMgdGVzdCAtayB0ZXN0cyByb290LXRlc3RzIHxzZWQgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIG9rJHxQQVNTOiBcMXwnIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBmYWlsZWR8RkFJTDogXDF8JworZ3Bhc3N3ZCAtZCBkYWVtb24gYmluCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2xfMi4yLjUyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZGJkYjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgYWNsLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vYWRkLW1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTYxNDE1MzEyNDI2ZTljMjIxMmJkN2RjNzkyOWFiZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTc5MDc0YmIwNTgwYzA2YzRiNDEzN2JlNGM1YTkyYTcwMTU4MzI3Nzk2N2FjZGI1NTQ2MDQzYzc4NzRlMGQyMyIKKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjNzUwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyLmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuaXB1bGF0aW5nIGZpbGVzeXN0ZW0gZXh0ZW5kZWQgYXR0cmlidXRlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL2F0dHIvIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpbnRsIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIrIgorTElDRU5TRV9saWIke0JQTn0gPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0NPUFlJTkc7bWQ1PTJkMGFhMTRiM2ZjZTQ2OTRlNGY2MTVlMzAxODYzMzVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0dHIvYXR0ci5jO2VuZGxpbmU9MTc7bWQ1PWJlMDQwMzI2MWYwODQ3ZTVmNDNlZDViMDhkMTk1OTNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmF0dHIvbGliYXR0ci5jO2VuZGxpbmU9MTc7bWQ1PTc5NzBmNzcwNDlmOGZhMTE5OWZmZjYyYTdhYjcyNGZiIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vYXR0ci8ke0JQfS5zcmMudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK3JlcXVpcmUgZWEtYWNsLmluYworCisjIGxpYmRpciBzaG91bGQgcG9pbnQgdG8gLmxhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtEfSR7bGliZGlyfS9saWJhdHRyLmxhIC1lIFwKKwkgICAgcyxebGliZGlyPVwnJHtiYXNlX2xpYmRpcn1cJyQsbGliZGlyPVwnJHtsaWJkaXJ9XCcsCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0YXIgLWNmIC0gdGVzdC8gLS1leGNsdWRlIGV4dCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlCisJZm9yIGkgaW4gYnVpbGRkZWZzIGJ1aWxkbWFjcm9zIGJ1aWxkcnVsZXM7IFwKKwkgIGRvIGNwICR7U30vaW5jbHVkZS8kaSAke0R9JHtQVEVTVF9QQVRIfS9pbmNsdWRlLzsgXAorCWRvbmUKKwlzZWQgLWUgJ3N8OyBAZWNob3w7IGVjaG98JyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L01ha2VmaWxlCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImNvcmV1dGlscyBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgcGVybC1tb2R1bGUtcG9zaXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0MGM5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hdHRyXzIuNC40Ny5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGF0dHIuaW5jCisKKyMgY29uZmlndXJlLmFjIHdhcyBtaXNzaW5nIGZyb20gdGhlIHJlbGVhc2UgdGFyYmFsbC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4KKyMgZnV0dXJlIHJlbGVhc2VzIG9mIGF0dHIsIHJlbW92ZSB0aGlzIHdoZW4gdXBkYXRpbmcgdGhlIHJlY2lwZS4KK1NSQ19VUklfYXBwZW5kICs9ICJmaWxlOi8vYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg0ZjU4ZGVjMDBiNjBmMmRjOGZkMWM5NzA5MjkxY2M3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI1NzcyZjY1M2FjNWIyZTNjZWViODlkZjUwZTQ2ODg4OTFlMjFmNzIzYzQ2MDYzNjU0ODk3MTY1MmFmMGE4NTkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2VhLWFjbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcwZTE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMgdGhpcyBidWlsZCBzeXN0ZW0gaXMgbW9zdGx5IHNoYXJlZCBieSBhdHRyIGFuZCBhY2wKKworU1JDX1VSSSArPSAiZmlsZTovL3JlbGF0aXZlLWxpYmRpci5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0CisKKyMgdGhlIHBhY2thZ2UgY29tZXMgd2l0aCBhIGN1c3RvbSBjb25maWcuaC5pbiwgaXQgY2Fubm90IGJlCisjIG92ZXJ3cml0dGVuIGJ5IGF1dG9oZWFkZXIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorRVhUUkFfT0VDT05GID0gIklOU1RBTExfVVNFUj1yb290IElOU1RBTExfR1JPVVA9cm9vdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1nZXR0ZXh0PW5vIgorCitFWFRSQV9PRU1BS0UgPSAiUEtHX0xJQl9ESVI9JHtiYXNlX2xpYmRpcn0gUEtHX0RFVkxJQl9ESVI9JHtsaWJkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgaW5zdGFsbC1saWIgaW5zdGFsbC1kZXYgRElTVF9ST09UPSIke0R9IgorfQorCitQQUNLQUdFUyA9KyAibGliJHtCUE59IgorCitGSUxFU19saWIke0JQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisjIE9ubHkgYXBwZW5kIGxkZmxhZ3MgZm9yIHRhcmdldCByZWNpcGUgYW5kIGlmIFVTRV9OTFMgaXMgZW5hYmxlZAorTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIiR7QFsnJywgJyAtbGludGwgJ11bKGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ3llcycpXX0iCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICIke0BbJycsICcgLS1kaXNhYmxlLWdldHRleHQgJ11bKGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJyldfSIKKworZml4X3N5bWxpbmsgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiAhPSAicG9wdWxhdGVfc3lzcm9vdCIgLWEgIiR7QkJfQ1VSUkVOVFRBU0t9IiAhPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJcmV0dXJuCisJZmkKKworCWlmIHRlc3QgIiR7bGliZGlyfSIgPSAiJHtiYXNlX2xpYmRpcn0iIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCSMgUmVtb3ZlIGJhZCBzeW1saW5rcyAmIGNyZWF0ZSB0aGUgY29ycmVjdCBzeW1saW5rcworCWlmIHRlc3QgLUwgJHtsaWJkaXJ9L2xpYiR7QlBOfS5zbyA7IHRoZW4KKwkJcm0gLXJmICR7bGliZGlyfS9saWIke0JQTn0uc28KKwkJbG4gLXNmICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5zbyAke2xpYmRpcn0vbGliJHtCUE59LnNvCisJZmkKKwlpZiB0ZXN0IC1MICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5hIDsgdGhlbgorCQlybSAtcmYgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmEKKwkJbG4gLXNmICR7bGliZGlyfS9saWIke0JQTn0uYSAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0uYQorCWZpCisJaWYgdGVzdCAtTCAgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhIDsgdGhlbgorCQlybSAtcmYgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhCisJCWxuIC1zZiAke2xpYmRpcn0vbGliJHtCUE59LmxhICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5sYQorCWZpCit9CitTU1RBVEVQT1NUSU5TVEZVTkNTX2NsYXNzLW5hdGl2ZSArPSAiZml4X3N5bWxpbmsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmNjM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApAQCAtMCwwICsxLDYzIEBACitTdWJqZWN0OiBbUEFUQ0hdIGF0dHI6IE1pc3NpbmcgY29uZmlndXJlLmFjCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW1Vwc3RyZWFtIHJlbGVhc2VkIHRhcmJhbGwgbWlzc2luZyB0aGlzIGZpbGVdCitTaWduZWQtb2ZmLWJ5OiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICA0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb25maWd1cmUuYWMKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI5NjZkMGUKKy0tLSAvZGV2L251bGwKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTAsMCArMSw0OCBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyMKKytBQ19JTklUKGluY2x1ZGUvYXR0cmlidXRlcy5oKQorK0FDX0NPTkZJR19BVVhfRElSKFsuXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL2NvbmZpZy5oKQorK0FDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisrCisrQUNfUFJPR19MSUJUT09MCisrCisrQUNfQVJHX0VOQUJMRShzaGFyZWQsCisrWyAtLWVuYWJsZS1zaGFyZWQ9W3llcy9ub10gRW5hYmxlIHVzZSBvZiBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX3NoYXJlZD15ZXMpCisrQUNfU1VCU1QoZW5hYmxlX3NoYXJlZCkKKysKKytBQ19BUkdfRU5BQkxFKGdldHRleHQsCisrWyAtLWVuYWJsZS1nZXR0ZXh0PVt5ZXMvbm9dIEVuYWJsZSBhbHRlcm5hdGUgbGFuZ3VhZ2Ugc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSwsCisrCWVuYWJsZV9nZXR0ZXh0PXllcykKKytBQ19TVUJTVChlbmFibGVfZ2V0dGV4dCkKKysKKytBQ19BUkdfRU5BQkxFKGxpYjY0LAorK1sgLS1lbmFibGUtbGliNjQ9W3llcy9ub10gRW5hYmxlIGxpYjY0IHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwsCisrCWVuYWJsZV9saWI2ND1ubykKKytBQ19TVUJTVChlbmFibGVfbGliNjQpCisrCisrQUNfUEFDS0FHRV9HTE9CQUxTKGF0dHIpCisrQUNfUEFDS0FHRV9VVElMSVRJRVMoYXR0cikKKytBQ19NQU5VQUxfRk9STUFUCisrQUNfTVVMVElMSUIoJGVuYWJsZV9saWI2NCkKKysKKytBQ19DX0NPTlNUCisrQUNfVFlQRV9NT0RFX1QKKytBQ19GVU5DX0FMTE9DQQorKworK0FDX09VVFBVVChpbmNsdWRlL2J1aWxkZGVmcykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9yZWxhdGl2ZS1saWJkaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcmVsYXRpdmUtbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmJmMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcmVsYXRpdmUtbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1c2UgcmVsYXRpdmUgcGF0aCBpbiBzeW1ib2xpYyBsaW5rcywgb3IgaXQgZmFpbHMgaW4gc3RhZ2luZworc2VkIGV4cHJlc3Npb24gZnJvbSB1ZGV2CisKKzcvMjkvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLXUgaW5jbHVkZS5vcmlnL2J1aWxkbWFjcm9zIGluY2x1ZGUvYnVpbGRtYWNyb3MKKy0tLSBpbmNsdWRlLm9yaWcvYnVpbGRtYWNyb3MJMjAxMC0wNy0yOSAxNzozOTo0OC4wMDAwMDAwMDAgKzA4MDAKKysrKyBpbmNsdWRlL2J1aWxkbWFjcm9zCTIwMTAtMDctMjkgMTg6MjA6MzQuMDAwMDAwMDAwICswODAwCitAQCAtODgsOSArODgsMTEgQEAKKyAJLi4vJChJTlNUQUxMKSAtbSA3NTUgLWQgJChQS0dfTElCX0RJUik7IFwKKyAJLi4vJChJTlNUQUxMKSAtVCBzb19iYXNlICQoTElCTkFNRSkubGFpICQoUEtHX0xJQl9ESVIpOyBcCisgCWlmIHRlc3QgIngkKFBLR19ERVZMSUJfRElSKSIgIT0gIngkKFBLR19MSUJfRElSKSIgOyB0aGVuIFwKKy0JLi4vJChJTlNUQUxMKSAtUyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmEgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5hOyBcCistCS4uLyQoSU5TVEFMTCkgLVMgJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5sYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmxhOyBcCistCS4uLyQoSU5TVEFMTCkgLVMgJChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5zbyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLnNvOyBcCisrCXJlbF9saWJfcHJlZml4PSQkKGVjaG8gJChQS0dfTElCX0RJUikgfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZycpOyBcCisrCS4uLyQoSU5TVEFMTCkgLVMgJCRyZWxfbGliX3ByZWZpeCQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmE7IFwKKysJLi4vJChJTlNUQUxMKSAtUyAkJHJlbF9saWJfcHJlZml4JChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5sYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmxhOyBcCisrCXJlbF9kZXZsaWJfcHJlZml4PSQkKGVjaG8gJChQS0dfREVWTElCX0RJUikgfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZycpOyBcCisrCS4uLyQoSU5TVEFMTCkgLVMgJCRyZWxfZGV2bGliX3ByZWZpeCQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkuc28gJChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5zbzsgXAorIAlmaQorIGVsc2UKKyBJTlNUQUxMX0xUTElCX0RFViA9ICQoSU5TVEFMTF9MVExJQl9TVEFUSUMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmM2ODY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3QgLWsgdGVzdHMgcm9vdC10ZXN0cyB8c2VkIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBvayR8UEFTUzogXDF8JyBcCisgLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gZmFpbGVkfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5MDdmYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gODI5YTg5ZTdmNTc4NTIzOWE5Mzg0ZTNhZmQ0NmM5MDBmOWQ3NmFkYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDE5OjU1OjMyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBidWlsZCB3aXRoIG11c2wKKworc2lnbmFsLmggYWxyZWFkeSBpbmNsdWRlcyBiaXRzL3NpZ2NvbnRleHQuaAorRG9jdW1lbnRhdGlvbiBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IGlmIHlvdSBuZWVkIHRoZSBkZWZpbml0aW9ucyBpbgorc2lnY29udGV4dC5oLCB5b3UgYXJlIHN1cHBvc2VkIHRvIGluY2x1ZGUgc2lnbmFsLmggYW5kIG5vdCBzaWdjb250ZXh0LmguCisKK2EgZ29vZCBmaXggc2hvdWxkIGJlIHRvIHJlbW92ZSBnbGliYworc3BlY2lmaWMgdW5kZXJzdGFuZGluZywgaW4gdGhvc2UgaWZkZWYncworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIG9zX2RlcC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvb3NfZGVwLmMgYi9vc19kZXAuYworaW5kZXggMDhjNTAxZC4uNWNiNzg3MyAxMDA2NDQKKy0tLSBhL29zX2RlcC5jCisrKysgYi9vc19kZXAuYworQEAgLTQxLDcgKzQxLDcgQEAKKyAjICAgZWxzZSAvKiBfX0dMSUJDX18gPCAyICovCisgICAgICAgLyogbGliYzUgZG9lc24ndCBoYXZlIDxzaWdjb250ZXh0Lmg+OiBnbyBkaXJlY3RseSB3aXRoIHRoZSBrZXJuZWwgICAqLworICAgICAgIC8qIG9uZS4gIENoZWNrIExJTlVYX1ZFUlNJT05fQ09ERSB0byBzZWUgd2hpY2ggd2Ugc2hvdWxkIHJlZmVyZW5jZS4gKi8KKy0jICAgICBpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorKyMgICAgIGluY2x1ZGUgPHNpZ25hbC5oPgorICMgICBlbmRpZiAvKiBfX0dMSUJDX18gPCAyICovCisgIyBlbmRpZgorICNlbmRpZiAvKiBMSU5VWCAmJiAhUE9XRVJQQyAqLworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWUzNThmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnY183LjQuMi5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkEgZ2FyYmFnZSBjb2xsZWN0b3IgZm9yIEMgYW5kIEMrKyIKKworREVTQ1JJUFRJT04gPSAiVGhlIEJvZWhtLURlbWVycy1XZWlzZXIgY29uc2VydmF0aXZlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBiZVwKKyB1c2VkIGFzIGEgZ2FyYmFnZSBjb2xsZWN0aW5nIHJlcGxhY2VtZW50IGZvciBDIG1hbGxvYyBvciBDKysgbmV3LiBJdCBhbGxvd3NcCisgeW91IHRvIGFsbG9jYXRlIG1lbW9yeSBiYXNpY2FsbHkgYXMgeW91IG5vcm1hbGx5IHdvdWxkLCB3aXRob3V0IGV4cGxpY2l0bHlcCisgZGVhbGxvY2F0aW5nIG1lbW9yeSB0aGF0IGlzIG5vIGxvbmdlciB1c2VmdWwuIFRoZSBjb2xsZWN0b3IgYXV0b21hdGljYWxseVwKKyByZWN5Y2xlcyBtZW1vcnkgd2hlbiBpdCBkZXRlcm1pbmVzIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBiZSBvdGhlcndpc2VcCisgYWNjZXNzZWQuXAorICBUaGUgY29sbGVjdG9yIGlzIGFsc28gdXNlZCBieSBhIG51bWJlciBvZiBwcm9ncmFtbWluZyBsYW5ndWFnZVwKKyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBlaXRoZXIgdXNlIEMgYXMgaW50ZXJtZWRpYXRlIGNvZGUsIHdhbnQgdG8gZmFjaWxpdGF0ZVwKKyBlYXNpZXIgaW50ZXJvcGVyYXRpb24gd2l0aCBDIGxpYnJhcmllcywgb3IganVzdCBwcmVmZXIgdGhlIHNpbXBsZSBjb2xsZWN0b3JcCisgaW50ZXJmYWNlLlwKKyAgQWx0ZXJuYXRpdmVseSwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIG1heSBiZSB1c2VkIGFzIGEgbGVhayBkZXRlY3RvciBmb3IgQ1wKKyBvciBDKysgcHJvZ3JhbXMsIHRob3VnaCB0aGF0IGlzIG5vdCBpdHMgcHJpbWFyeSBnb2FsLlwKKyAgRW1waXJpY2FsbHksIHRoaXMgY29sbGVjdG9yIHdvcmtzIHdpdGggbW9zdCB1bm1vZGlmaWVkIEMgcHJvZ3JhbXMsIHNpbXBseVwKKyBieSByZXBsYWNpbmcgbWFsbG9jIHdpdGggR0NfbWFsbG9jIGNhbGxzLCByZXBsYWNpbmcgcmVhbGxvYyB3aXRoIEdDX3JlYWxsb2NcCisgY2FsbHMsIGFuZCByZW1vdmluZyBmcmVlIGNhbGxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5oYm9laG0uaW5mby9nYy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUuUVVJQ0s7bWQ1PTU1ZjUwODhmOTBhOTgyZmVkN2FmOWE0ODk3MDQ3ZWY3IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaGJvZWhtLmluZm8vZ2MvZ2Nfc291cmNlL2djLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjEyYzA1ZmQyODExZDk4OTM0MWQ4YzZkODFmNjZhZjg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzMzIwYWQ3YzQ1NDYwZTRhNDBlMDNmNWFhNGM2ODkzNzgzZjIxYTE2NDE2YzMyODJiOTk0ZjkzMzMxMmFmYTIiCitGSUxFU18ke1BOfS1kb2MgPSAiL3Vzci9zaGFyZSIKKworUkVBTF9QViA9ICIke0BbZC5nZXRWYXIoJ1BWJywxKVs6LTFdLCBkLmdldFZhcignUFYnLDEpXVsoZC5nZXRWYXIoJ1BWJywxKVstMV0pLmlzZGlnaXQoKV19IgorUyA9ICIke1dPUktESVJ9L2djLSR7UkVBTF9QVn0iCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBieSBkZWZhdWx0IHVzZSBleHRlcm5hbCBsaWJhdG9taWMtb3BzCitQQUNLQUdFQ09ORklHID8/PSAibGliYXRvbWljLW9wcyIKK1BBQ0tBR0VDT05GSUdbbGliYXRvbWljLW9wc10gPSAiLS13aXRoLWxpYmF0b21pYy1vcHM9eWVzLC0td2l0aC1saWJhdG9taWMtb3BzPW5vLGxpYmF0b21pYy1vcHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9hZGQtb3B0aW9uLWRldi1kc3AucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyOThjZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0FkZCBjb25maWcgb3B0aW9uIC0td2l0aC1kZXYtZHNwLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhhbmcgWGlhbyA8eGlhby56aGFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNiw2ICsxMDYsMTYgQEAgQUNfQVJHX1dJVEgocHl0aG9uLFsgIC0td2l0aC1weXRob25bWz1BUgorICAgZmkKKyAgIF0pCisgCisrQUNfQVJHX1dJVEgoZGV2LWRzcCxbICAtLXdpdGgtZGV2LWRzcCAgICAgICAgICBlbmFibGVzIGRldi9kc3AgZm9yIGVudHJvcHkgcHJvZHVjaW5nLiBhdXRvIGZvciBhdXRvLWRldGVjdGluZyBkZXYvZGVwIG9uIGhvc3QuIFtbZGVmYXVsdD1ub11dXSxbCisrICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKFtIQVZFX0RFVl9EU1BdLCAxKQorKyAgZWxzZQorKyAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSBhdXRvOyAgdGhlbgorKyAgICAgIGFjX2RldGVjdF9kZXZfZHNwPXllcworKyAgICBmaQorKyAgZmkKKysgIF0sW2FjX2RldGVjdF9kZXZfZHNwPW5vXSkKKysKKyAjIENoZWNrIGZvciBleHBlcnQgbW9kZQorIGlmIHRlc3QgIiRhY19lbmFibGVfZXhwZXJ0X21vZGUiID0geWVzOyB0aGVuCisgICBCRUVfRVhQRVJUX01PREUKK0BAIC00NjQsNyArNDc0LDcgQEAgbGludXgqKQorICAgICAgIGFjX2N2X2hhdmVfZGV2X2RzcD1ubworICAgICBmaQorICAgICBdKQorLSAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGV2X2RzcCIgPSB5ZXM7IHRoZW4KKysgIGlmIHRlc3QgIiRhY19jdl9oYXZlX2Rldl9kc3AiID0geWVzICYmIHRlc3QgIiRhY19kZXRlY3RfZGV2X2RzcCIgPSB5ZXM7IHRoZW4KKyAgICAgQUNfREVGSU5FKFtIQVZFX0RFVl9EU1BdLCAxKQorICAgZmkKKyAgIDs7CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU1MTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9iZWVjcnlwdC1lbmFibGUtcHRlc3Qtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitiZWVjcnlwdDogZW5hYmxlIHB0ZXN0IHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQWRkIGluc3RhbGwtcHRlc3QgcnVsZXMuCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgfCAzICsrKworIHRlc3RzL01ha2VmaWxlLmFtIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYjdlNzg2OS4uNTA3NmY1OSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTczLDMgKzczLDYgQEAgRElTVENMRUFORklMRVMgPSBtcG9wdC5zIGJsb3dmaXNob3B0LnMgc2hhMW9wdC5zCisgCisgYmVuY2g6CisgCShjZCB0ZXN0cyAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBiZW5jaCkKKysKKytpbnN0YWxsLXB0ZXN0OgorKwkoY2QgdGVzdHMgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2tfUFJPR1JBTVMpCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMTYwNGU1ZS4uZDhkYjhkOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEwMSwzICsxMDEsNiBAQCBiZW5jaDogYmVuY2htZSBiZW5jaHJzYSBiZW5jaGhmIGJlbmNoYmMKKyAJLi9iZW5jaGJjIEFFUyAxMjgKKyAJLi9iZW5jaGJjIEJsb3dmaXNoIDEyOAorIAkuL2JlbmNoYmMgQmxvd2Zpc2ggMTI4CisrCisrY2hlY2tfUFJPR1JBTVM6CisrCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoY2hlY2tfUFJPR1JBTVMpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9kaXNhYmxlLWljdS1jaGVjay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiMWZhNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgYXJlIHVuYWJsZSB0byBydW4gY29kZSBhdCBjb25maWd1cmUgdGltZSBpbiBhIGNyb3NzIGVudmlyb25lbW50LCBidXQgYXMgd2UKK2NvbnRyb2wgdGhlIGJ1aWxkIHdlIGNhbiBiZSBmYWlybHkgY2VydGFpbiB0aGlzIGRlcGVuZGVuY3kgaXMgbWV0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitKTCAwNS8wNy8xMAorSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMTc6MTI6MjUuMDAwMDAwMDAwICswODAwCisrKysgYmVlY3J5cHQtNC4yLjEvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMTc6MTI6MzAuMDAwMDAwMDAwICswODAwCitAQCAtMjkyLDMyICsyOTIsNiBAQAorICMgUHJlZGVmaW5lcyBhbmQgY2hlY2tzIGZvciBDKysgQVBJIHN1cHBvcnQKKyBBSF9URU1QTEFURShbQ1BQR0xVRV0sW0RlZmluZSB0byAxIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgdGhlIEMrKyBjb2RlXSkKKyAKKy1pZiB0ZXN0ICIkYWNfd2l0aF9jcGx1c3BsdXMiID0geWVzOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBJQk0ncyBJQ1UgbGlicmFyeSB2ZXJzaW9uID49IDIuOF0pCistICBBQ19MQU5HX1BVU0goQykKKy0gIEFDX1JVTl9JRkVMU0UoWworLSAgICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPl1dLFtbCistICAgICAgI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgMgorLSAgICAgIGV4aXQoMSk7CistICAgICAgI2VsaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPT0gMgorLSAgICAgICMgaWYgVV9JQ1VfVkVSU0lPTl9NSU5PUl9OVU0gPCA4CistICAgICAgZXhpdCgxKTsKKy0gICAgICAjIGVsc2UKKy0gICAgICBleGl0KDApOworLSAgICAgICMgZW5kaWYKKy0gICAgICAjZWxzZQorLSAgICAgIGV4aXQoMCk7CistICAgICAgI2VuZGlmCistICAgIF1dKV0sWworLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgICBdLFsKKy0gICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgICBBQ19NU0dfV0FSTihbZGlzYWJsaW5nIGNwbHVzcGx1c10pCistICAgIGFjX3dpdGhfY3BsdXNwbHVzPW5vCistICAgIF0pCistICBBQ19MQU5HX1BPUChDKQorLWZpCistCisgQU1fQ09ORElUSU9OQUwoW1dJVEhfQ1BMVVNQTFVTXSxbdGVzdCAiJGFjX3dpdGhfY3BsdXNwbHVzIiA9IHllc10pCisgCisgaWYgdGVzdCAiJGFjX3dpdGhfY3BsdXNwbHVzIiA9IHllcyA7IHRoZW4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtZm9yLWdjYy00LjcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0NGUzOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKKworZ2NjLTQuNyBzZWVtcyB0byBiZSBzdHJpY3RlciBhYm91dCBzb21lIHRoaW5ncywgc28gZm9sbG93Cit0aGUgc3VnZ2VzdGlvbiBmcm9tIHRoZSBlcnJvci9ub3RlIGluZm9ybWF0aW9uLgorCisgICAgLi4vLi4veDg2XzY0LWxpbnV4LWxpYnRvb2wgLS10YWc9Q1hYICAgLS1tb2RlPWNvbXBpbGUgZysrIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLi8uLiAKKyAgICB4ODZfNjQtbGludXgtbGlidG9vbDogY29tcGlsZTogIGcrKyAtREhBVkVfQ09ORklHX0ggLUkuIC1JLi4vLi4gLUkuLi8uLi9pbmNsdWRlIC1pc3lzdAorICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0hhc2h0YWJsZS5oOjQyOjAsCisgICAgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvUHJvcGVydGllcy5oOjM2LAorICAgICAgICAgICAgICAgICAgICAgZnJvbSBQcm9wZXJ0aWVzLmN4eDoyNToKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ2Jvb2wgYmVlY3J5cHQ6OnV0aQorICAgIFByb3BlcnRpZXMuY3h4OjIyODoxOiAgIHJlcXVpcmVkIGZyb20gaGVyZQorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogZXJyb3I6ICdjb250YWluc0FsbCcgd2FzIG5vdCBkZWNsCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBub3RlOiBkZWNsYXJhdGlvbnMgaW4gZGVwZW5kZW50IGIKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IHVzZSAndGhpcy0+Y29udGFpbnNBbGwnIGlucworICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnYm9vbCBiZWVjcnlwdDo6dXRpCisgICAgUHJvcGVydGllcy5jeHg6MjI4OjE6ICAgcmVxdWlyZWQgZnJvbSBoZXJlCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBlcnJvcjogJ2NvbnRhaW5zQWxsJyB3YXMgbm90IGRlY2wKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IGRlY2xhcmF0aW9ucyBpbiBkZXBlbmRlbnQgYgorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogdXNlICd0aGlzLT5jb250YWluc0FsbCcgaW5zCisgICAgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJlZWNyeXB0LTQuMi4xLm9yaWcvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCisrKysgYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCitAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgYmVlY3J5cHQgeworIAkJCQkJaWYgKGMtPnNpemUoKSAhPSBzaXplKCkpCisgCQkJCQkJcmV0dXJuIGZhbHNlOworIAorLQkJCQkJcmV0dXJuIGNvbnRhaW5zQWxsKCpjKTsKKysJCQkJCXJldHVybiB0aGlzLT5jb250YWluc0FsbCgqYyk7CisgCQkJCX0KKyAJCQkJcmV0dXJuIGZhbHNlOworIAkJCX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtc2VjdXJpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiMGMwMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0ZpeCB2aXNpYmlsaXR5IG9mIHZhcmlvdXMgQysrIGZ1bmN0aW9ucywgaW5zcGlyZWQgYnkgYSBzaW1pbGFyIHBhdGNoIGluIHRoZSBGaW5rCitwcm9qZWN0OiAKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9maW5rLWNvbW1pdHNAbGlzdHMuc291cmNlZm9yZ2UubmV0L21zZzc1NzQyLmh0bWwKKworSkwgMDUvMDcvMTAgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvYmVleW9uZC9CZWVDZXJ0aWZpY2F0ZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgJMjAxMC0xMS0yNiAxNzoyMjo1Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgJMjAxMC0xMS0yNiAxNzoyMzowMS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xNDcsMTMgKzE0NywxMyBAQAorIAkJCW11dGFibGUgYnl0ZWFycmF5KiBlbmM7CisgCisgCQkJQmVlQ2VydGlmaWNhdGUoKTsKKy0JCQlCZWVDZXJ0aWZpY2F0ZShJbnB1dFN0cmVhbSYgaW4pIHRocm93IChJT0V4Y2VwdGlvbik7CisgCisgCQkJdm9pZCBlbmNvZGVUQlMoRGF0YU91dHB1dFN0cmVhbSYgb3V0KSBjb25zdCB0aHJvdyAoSU9FeGNlcHRpb24pOworIAorIAkJCWJ5dGVhcnJheSogZW5jb2RlVEJTKCkgY29uc3QgdGhyb3cgKENlcnRpZmljYXRlRW5jb2RpbmdFeGNlcHRpb24pOworIAorIAkJcHVibGljOgorKwkJCUJlZUNlcnRpZmljYXRlKElucHV0U3RyZWFtJiBpbikgdGhyb3cgKElPRXhjZXB0aW9uKTsKKyAJCQlCZWVDZXJ0aWZpY2F0ZShjb25zdCBCZWVDZXJ0aWZpY2F0ZSYpIHRocm93IChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbik7CisgCQkJdmlydHVhbCB+QmVlQ2VydGlmaWNhdGUoKTsKKyAKK0luZGV4OiBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCTIwMTAtMTEtMjYgMTc6MjA6NTUuMDAwMDAwMDAwICswODAwCisrKysgYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvc2VjdXJpdHkvU2VjdXJpdHkuaAkyMDEwLTExLTI2IDE3OjIxOjM2LjAwMDAwMDAwMCArMDgwMAorQEAgLTYxLDcgKzYxLDYgQEAKKyAJCQlmcmllbmQgY2xhc3MgU2VjdXJlUmFuZG9tOworIAkJCWZyaWVuZCBjbGFzcyBTaWduYXR1cmU7CisgCistCQlwcml2YXRlOgorIAkJCXN0cnVjdCBzcGkKKyAJCQl7CisgCQkJCU9iamVjdCogY3NwaTsKK0BAIC03Niw2ICs3NSw3IEBACisgCQkJc3RhdGljIHNwaSogZ2V0U3BpKGNvbnN0IFN0cmluZyYgYWxnbywgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBQcm92aWRlciYpIHRocm93IChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24pOworIAkJCXN0YXRpYyBzcGkqIGdldEZpcnN0U3BpKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgCisrCQlwcml2YXRlOgorIAkJCXN0YXRpYyBjb25zdCBTdHJpbmcmIGdldEtleVN0b3JlRGVmYXVsdCgpOworIAorIAkJCXN0YXRpYyBib29sIF9pbml0OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWUyOTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworY2QgdGVzdHMKK2ZvciBpIGluIGBsc2A7IGRvIC4vJGk7IGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvICJQQVNTOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIkZBSUw6ICRpIjsgZmk7IGRvbmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHRfNC4yLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjI2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0XzQuMi4xLmJiCkBAIC0wLDAgKzEsNDggQEAKKyMgQmVlY3J5cHQgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIkEgZ2VuZXJhbC1wdXJwb3NlIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9iZWVjcnlwdCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vYmVlY3J5cHQvYmVlY3J5cHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtaWN1LWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWN1cml0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZm9yLWdjYy00LjcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1vcHRpb24tZGV2LWRzcC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODQ0MWMwMTQxNzA4MjNmMmRmZjk3ZTMzZGY1NWFmMWUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjg2ZjFmNTYwODBkMWE2YjFkMDI0MDAzYTVmYTIxNThmNGZmODJjYWUwYzY4MjlkM2M0NzZhNGI1ODk4YzU1ZCIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTg5NDM3MGFmZDVkZmU3ZDAyYjhkMTQzMTllNzI5YTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWRjZjNjODI1NjU5ZTgyNTM5NjQ1ZGE0MWE3OTA4NTg5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvYmVlY3J5cHQvYmVlY3J5cHQuaDtlbmRsaW5lPTIwO21kNT00N2E5M2VlZjUzOWFhYzIzN2VlZjg2Mjk3YTRkNzFjMSIKKworUFIgPSAicjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBwdGVzdAorYWNwYXRocz0iIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYmVlY3J5cHQvZ251LmgKK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYyAtLWRpc2FibGUtb3Blbm1wIC0td2l0aC1qYXZhPW5vIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjcGx1c3BsdXNdID0gIi0td2l0aC1jcGx1c3BsdXMsLS13aXRob3V0LWNwbHVzcGx1cyxpY3UiCisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0gJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vJHtCUE59Lyouc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLnNvICR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLmEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKKwljcCAtciAke0J9L3Rlc3RzLy5saWJzL3Rlc3QqICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS41OC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjQ2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYgpAQCAtMCwwICsxLDE4IEBACitpbmNsdWRlIGJvb3N0LSR7UFZ9LmluYworCitTVU1NQVJZID0gIlBvcnRhYmxlIEJvb3N0LkphbSBidWlsZCB0b29sIGZvciBib29zdCIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoIgorCitkb19jb21waWxlKCkgeworICAgIC4vYm9vdHN0cmFwLnNoIC0td2l0aC10b29sc2V0PWdjYworfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAjIGluc3RhbGwgdW5zdHJpcHBlZCB2ZXJzaW9uIGZvciBiamFtCisgICAgaW5zdGFsbCAtYyAtbSA3NTUgYmphbS5kZWJ1ZyAke0R9JHtiaW5kaXJ9L2JqYW0KK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS41OC4wLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS41OC4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdkMDkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC0xLjU4LjAuaW5jCkBAIC0wLDAgKzEsMjIgQEAKKyMgVGhlIEJvb3N0IHdlYiBzaXRlIHByb3ZpZGVzIGZyZWUgcGVlci1yZXZpZXdlZCBwb3J0YWJsZQorIyBDKysgc291cmNlIGxpYnJhcmllcy4gVGhlIGVtcGhhc2lzIGlzIG9uIGxpYnJhcmllcyB3aGljaAorIyB3b3JrIHdlbGwgd2l0aCB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkuIFRoZSBsaWJyYXJpZXMgYXJlCisjIGludGVuZGVkIHRvIGJlIHdpZGVseSB1c2VmdWwsIGFuZCBhcmUgaW4gcmVndWxhciB1c2UgYnkKKyMgdGhvdXNhbmRzIG9mIHByb2dyYW1tZXJzIGFjcm9zcyBhIGJyb2FkIHNwZWN0cnVtIG9mIGFwcGxpY2F0aW9ucy4KK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYm9vc3Qub3JnLyIKK0xJQ0VOU0UgPSAiQlNMLTEuMCAmIE1JVCAmIFB5dGhvbi0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFXzFfMC50eHQ7bWQ1PWU0MjI0Y2NhZWNiMTRkOTQyYzcxZDMxYmVmMjBkNzhjIgorCitCT09TVF9WRVIgPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIiwxKS5zcGxpdCgiLiIpKX0iCitCT09TVF9NQUogPSAiJHtAIl8iLmpvaW4oZC5nZXRWYXIoIlBWIiwxKS5zcGxpdCgiLiIpWzA6Ml0pfSIKK0JPT1NUX1AgPSAiYm9vc3RfJHtCT09TVF9WRVJ9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9ib29zdC8ke0JPT1NUX1B9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1taXBzMS1maXgtYWRkZWQtZ2NjLmphbS13YXMtcGFzc2luZy10aGUtb3B0aW9ucy1tMzItLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRG9uLXQtcGFzcy1tMzItbTY0LXdoZXJlLWl0LXMtbm90LXN1cHBvcnRlZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiODgzOTY1MGU2MWU5YzFjMGE4OWYzNzFkZDQ3NTU0NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGZjMjA0ZmMzM2VjNzljOTliOWE3NDk0NGMzZTU0YmQ3OGJlNGY3ZjE1ZTI2MGMwZTI3MDBhMzZkYzdkM2U1IgorCitTID0gIiR7V09SS0RJUn0vJHtCT09TVF9QfSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4OGU4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCkBAIC0wLDAgKzEsMTkyIEBACitTVU1NQVJZID0gIkZyZWUgcGVlci1yZXZpZXdlZCBwb3J0YWJsZSBDKysgc291cmNlIGxpYnJhcmllcyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiYmphbS1uYXRpdmUgemxpYiBiemlwMiIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JPT1NUX0xJQlMgPSAiXAorCWF0b21pYyBcCisJY2hyb25vIFwKKwlkYXRlX3RpbWUgXAorCWZpbGVzeXN0ZW0gXAorCWdyYXBoIFwKKwlpb3N0cmVhbXMgXAorCWxvZyBcCisJcHJvZ3JhbV9vcHRpb25zIFwKKwlyYW5kb20gXAorCXJlZ2V4IFwKKwlzZXJpYWxpemF0aW9uIFwKKwlzaWduYWxzIFwKKwlzeXN0ZW0gXAorCXRlc3QgXAorCXRocmVhZCBcCisJIgorCisjIG9wdGlvbmFsIGJvb3N0LXB5dGhvbiBsaWJyYXJ5CitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiwscHl0aG9uIHB5dGhvbjMiCitCT09TVF9MSUJTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uIHB5dGhvbjMnLCAnJywgZCl9IgoraW5oZXJpdCBweXRob24tZGlyCitQWVRIT05fUk9PVCA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyR7cHJlZml4fSIKKworIyBNYWtlIGEgcGFja2FnZSBmb3IgZWFjaCBsaWJyYXJ5LCBwbHVzIC1kZXYKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke0JPT1NUX1BBQ0tBR0VTfSIKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgcGFja2FnZXMgPSBbXQorICAgIGV4dHJhcyA9IFtdCisgICAgZm9yIGxpYiBpbiBkLmdldFZhcignQk9PU1RfTElCUycsIFRydWUpLnNwbGl0KCApOgorICAgICAgICAjIEJKQU0gZG9lcyBub3Qga25vdyAnLS13aXRoLXB5dGhvbjMnIChvbmx5IC0td2l0aC1weXRob24pCisgICAgICAgIGlmIGxpYiAhPSAicHl0aG9uMyI6CisgICAgICAgICAgICBleHRyYXMuYXBwZW5kKCItLXdpdGgtJXMiICUgbGliKQorICAgICAgICBwa2cgPSAiYm9vc3QtJXMiICUgbGliLnJlcGxhY2UoIl8iLCAiLSIpCisgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIGlmIGxpYiA9PSAicHl0aG9uIjoKKyAgICAgICAgICAgICMgc3BlY2lhbDogcHl0aG9uKi5zbyBtYXRjaGVzIHB5dGhvbjMuc28gISEKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcigiRklMRVNfJXMiICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWJib29zdF8lcy5zby4qIiAlIGxpYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcigiRklMRVNfJXMiICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWJib29zdF8lcyouc28uKiIgJSBsaWIpCisgICAgZC5zZXRWYXIoIkJPT1NUX1BBQ0tBR0VTIiwgIiAiLmpvaW4ocGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJCSkFNX0VYVFJBIiwgIiAiLmpvaW4oZXh0cmFzKSkKK30KKworIyBPdmVycmlkZSB0aGUgY29udGVudHMgb2Ygc3BlY2lmaWMgcGFja2FnZXMKK0ZJTEVTX2Jvb3N0LXNlcmlhbGl6YXRpb24gPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3NlcmlhbGl6YXRpb24qLnNvLiogXAorCSR7bGliZGlyfS9saWJib29zdF93c2VyaWFsaXphdGlvbiouc28uKiIKK0ZJTEVTX2Jvb3N0LXRlc3QgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0X3ByZ19leGVjX21vbml0b3IqLnNvLiogXAorCSR7bGliZGlyfS9saWJib29zdF91bml0X3Rlc3RfZnJhbWV3b3JrKi5zby4qIgorCisjIC1kZXYgbGFzdCB0byBwaWNrIHVwIHRoZSByZW1haW5pbmcgc3R1ZmYKK1BBQ0tBR0VTICs9ICIke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9L2xpYmJvb3N0Xyouc28iCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmJvb3N0XyouYSIKKworIyAiYm9vc3QiIGlzIGEgbWV0YXBhY2thZ2Ugd2hpY2ggcHVsbHMgaW4gYWxsIGJvb3N0IGxpYnJhYnJpZXMKK1BBQ0tBR0VTICs9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0JPT1NUX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCisjIHRvIGF2b2lkIEdOVV9IQVNIIFFBIGVycm9ycyBhZGRlZCBMREZMQUdTIHRvIEFSQ0g7IGEgbGl0dGxlIGJpdCBkaXJ0eSBidXQgYXQgbGVhc3QgaXQgd29ya3MKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCisjIE9oIHlpcHBlZSwgYSBuZXcgYnVpbGQgc3lzdGVtLCBpdCdzIHNvb28gY29vb29sIEkgY291bGQgZWF0IG15IG93bgorIyBmb290LiAgaW5saW5pbmc9b24gbGV0cyB0aGUgY29tcGlsZXIgY2hvb3NlLCBJIHRoaW5rLiAgQXQgbGVhc3QgdGhpcworIyBzdHVmZiBpcyBkb2N1bWVudGVkLi4uCisjIE5PVEU6IGlmIHlvdSBsZWF2ZSA8ZGVidWctc3ltYm9scz5vbiB0aGVuIGluIGEgZGVidWcgYnVpbGQgdGhlIGJ1aWxkIHN5cworIyBvYmpjb3B5IHdpbGwgYmUgaW52b2tlZCwgYW5kIHRoYXQgd29uJ3Qgd29yay4gIEJ1aWxkaW5nIGRlYnVnIGFwcGFyZW50bHkKKyMgcmVxdWlyZXMgaGFja2luZyBnY2MtdG9vbHMuamFtCisjCisjIFNvbWV0aW1lcyBJIHdha2UgdXAgc2NyZWFtaW5nLiAgRmFtb3VzIGZpZ3VyZXMgYXJlIGdhdGhlcmVkIGluIHRoZSBuaWdodG1hcmUsCisjIFN0ZXZlIEJvdXJuZSwgTGFycnkgV2FsbCwgdGhlIHdob2xlIG9mIHRoZSBBTlNJIEMgY29tbWl0dGVlLiAgVGhleSdyZSBqdXN0CisjIHN0YW5kaW5nIHRoZXJlLCB3YWl0aW5nLCBidXQgdGhlIHRydWVseSB0ZXJyaWZ5aW5nIHRoaW5nIGlzIHdoYXQgdGhleSBjYXJyeQorIyBpbiB0aGVpciBoYW5kcy4gIEF0IGZpcnN0IHNpZ2h0IGVhY2ggc2VlbXMgdG8gYmVhciB0aGUgc2FtZSB0aGluZywgYnV0IGl0IGlzCisjIG5vdCBzbyBmb3IgdGhlIGZvcm1zIGluIHRoZWlyIGdyYXNwIGFyZSBldmVyIHNvIHNsaWdodGx5IGRpZmZlcmVudCBvbmUgZnJvbQorIyB0aGUgb3RoZXIuICBFYWNoIGlzIHR3aXN0ZWQgaW4gc29tZSBncm90ZXNxdWUgd2F5IGZyb20gdGhlIG90aGVyIHRvIG1ha2UgZWFjaAorIyBhbiB1bnNwZWFrYWJsZSBwZXJ2ZXJzaW9uIGltcG9zc2libGUgdG8gcGVyY2VpdmUgd2l0aG91dCB0aGUgb25zZXQgb2YgbWFkbmVzcy4KKyMgVHJ1ZSBpbnNhbml0eSBhd2FpdHMgYW55b25lIHdobyBwZXJjZWl2ZXMgYWxsIG9mIHRoZXNlIGhvcnJvcnMgdG9nZXRoZXIuCisjCisjIFF1b3RhdGlvbiBtYXJrcywgdGhlcmUgbWlnaHQgYmUgYW4gZWFzaWVyIHdheSB0byBkbyB0aGlzLCBidXQgSSBjYW4ndCBmaW5kCisjIGl0LiAgVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgdXNlci5ocHAgY29uZmlndXJhdGlvbiBmaWxlIG11c3QgcmVjZWl2ZSBhCisjIHByZS1wcm9jZXNzb3IgbWFjcm8gZGVmaW5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgc3RyaW5nIC0gY29tcGxldGUgd2l0aCAiJ3MKKyMgYXJvdW5kIGl0LiAgKDw+IGlzIGEgcG9zc2liaWxpdHkgaGVyZSBidXQgdGhlIGRhbmdlciB0byB0aGF0IGlzIHRoYXQgdGhlCisjIGZhaWx1cmUgY2FzZSBpbnRlcnByZXRzIHRoZSA8IGFuZCA+IGFzIHNoZWxsIHJlZGlyZWN0aW9ucywgY3JlYXRpbmcKKyMgcmFuZG9tIGZpbGVzIGluIHRoZSBzb3VyY2UgdHJlZS4pCisjCisjYmphbTogJy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPVwiY29uZmlnXCInCisjZG9fY29tcGlsZTogJy1zR0NDPS4uLiAnIictREJPT1NUX1BMQVRGT1JNX0NPTkZJRz1cImNvbmZpZ1wiJyIKK1NRRCA9ICciJworRVFEID0gJ1wiJworI2Jvb3N0LmJiOiAgICIuLi4gICctc0dDQz0uLi4gJyR7U1FEfSctREJPT1NUX1BMQVRGT1JNX0NPTkZJRz0ke0VRRH1jb25maWcke0VRRH0nJHtTUUR9IC4uLiIKK0JKQU1fQ09ORiA9ICIke1NRRH0nLURCT09TVF9QTEFURk9STV9DT05GSUc9JHtFUUR9Ym9vc3QvY29uZmlnL3BsYXRmb3JtLyR7VEFSR0VUX09TfS5ocHAke0VRRH0nJHtTUUR9IgorCitCSkFNX1RPT0xTICAgPSAiLS1pZ25vcmUtc2l0ZS1jb25maWcgXAorCQknLXNUT09MUz1nY2MnIFwKKwkJJy1zR0NDPSR7Q0N9ICcke0JKQU1fQ09ORn0gXAorCQknLXNHWFg9JHtDWFh9ICcke0JKQU1fQ09ORn0gXAorCQknLXNHQ0NfSU5DTFVERV9ESVJFQ1RPUlk9JHtTVEFHSU5HX0lOQ0RJUn0nIFwKKwkJJy1zR0NDX1NURExJQl9ESVJFQ1RPUlk9JHtTVEFHSU5HX0xJQkRJUn0nIFwKKwkJJy1zQlVJTEQ9cmVsZWFzZSA8b3B0aW1pemF0aW9uPnNwYWNlIDx0aHJlYWRpbmc+bXVsdGkgPGlubGluaW5nPm9uIDxkZWJ1Zy1zeW1ib2xzPm9mZicgXAorCQknLXNQWVRIT05fUk9PVD0ke1BZVEhPTl9ST09UfScgXAorCQknLS1sYXlvdXQ9c3lzdGVtJyBcCisJCSIKKworIyB1c2UgUEFSQUxMRUxfTUFLRSB0byBzcGVlZCB1cCB0aGUgYnVpbGQsIGJ1dCBsaW1pdCBpdCBieSAtaiA2NCwgZ3JlYXRlciBwYXJhbGVsaXNtIGNhdXNlcyBiamFtIHRvIHNlZ2ZhdWx0IG9yIHRvIGlnbm9yZSAtagorIyBodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvNzYzNAorZGVmIGdldF9ib29zdF9wYXJhbGxlbF9tYWtlKGJiLCBkKToKKyAgICBwbSA9IGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgVHJ1ZSkKKyAgICBpZiBwbToKKyAgICAgICAgIyBsb29rIGZvciAnLWonIGFuZCB0aHJvdyBvdGhlciBvcHRpb25zIChlLmcuICctbCcpIGF3YXkKKyAgICAgICAgIyBiZWNhdXNlIHRoZXkgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgbWVhbmluZyBpbiBiamFtCisgICAgICAgIHBtID0gcG0uc3BsaXQoKQorICAgICAgICB3aGlsZSBwbToKKyAgICAgICAgICAgIHYgPSBOb25lCisgICAgICAgICAgICBvcHQgPSBwbS5wb3AoMCkKKyAgICAgICAgICAgIGlmIG9wdCA9PSAnLWonOgorICAgICAgICAgICAgICAgIHYgPSBwbS5wb3AoMCkKKyAgICAgICAgICAgIGVsaWYgb3B0LnN0YXJ0c3dpdGgoJy1qJyk6CisgICAgICAgICAgICAgICAgdiA9IG9wdFsyOl0uc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ID0gTm9uZQorCisgICAgICAgICAgICBpZiB2OgorICAgICAgICAgICAgICAgIHYgPSBtaW4oNjQsIGludCh2KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJy1qJyArIHN0cih2KQorCisgICAgcmV0dXJuICIiCisKK0JPT1NUX1BBUkFMTEVMX01BS0UgPSAiJHtAZ2V0X2Jvb3N0X3BhcmFsbGVsX21ha2UoYmIsIGQpfSIKK0JKQU1fT1BUUyAgICA9ICcke0JPT1NUX1BBUkFMTEVMX01BS0V9IFwKKwkJJHtCSkFNX1RPT0xTfSBcCisJCS1zQk9PU1RfQlVJTERfVVNFUl9DT05GSUc9JHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbSBcCisJCS0tYnVpbGRkaXI9JHtTfS8ke1RBUkdFVF9TWVN9IFwKKwkJLS1kaXNhYmxlLWljdSBcCisJCSR7QkpBTV9FWFRSQX0nCisKKyMgTmF0aXZlIGNvbXBpbGF0aW9uIG9mIGJ6aXAyIGlzbid0IHdvcmtpbmcKK0JKQU1fT1BUU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gJyAtc05PX0JaSVAyPTEnCisKK2RvX2Jvb3N0Y29uZmlnKCkgeworCWNwIC1mIGJvb3N0L2NvbmZpZy9wbGF0Zm9ybS9saW51eC5ocHAgYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LWdudWVhYmkuaHBwCisKKwkjIEQyMTk0OkZpeGluZyB0aGUgZmFpbHVyZSBvZiAiZXJyb3I6IGR1cGxpY2F0ZSBpbml0aWFsaXphdGlvbiBvZiBnY2Mgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMiIGR1cmluZyBjb21waWxhdGlvbi4KKwlzZWQgLWkgIi9edXNpbmcgZ2NjIDogNC4zLjEvZCIgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCXNlZCAtaSAiL151c2luZyBweXRob24gOiAke1BZVEhPTl9CQVNFVkVSU0lPTn0iL2QgJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCWVjaG8gJ3VzaW5nIGdjYyA6IDQuMy4xIDogJHtDWFh9IDogPGNmbGFncz4iJHtDRkxBR1N9IiA8Y3h4ZmxhZ3M+IiR7Q1hYRkxBR1N9IiA8bGlua2ZsYWdzPiIke0xERkxBR1N9IiA7JyA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJZWNobyAidXNpbmcgcHl0aG9uIDogJHtQWVRIT05fQkFTRVZFUlNJT059IDogOiAke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gOyIgPj4gJHtTfS90b29scy9idWlsZC9leGFtcGxlL3VzZXItY29uZmlnLmphbQorCWVjaG8gInVzaW5nIHB5dGhvbiA6IDMuNCA6IDogJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uMy40bSA7IiA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisKKwlDQz0iJHtCVUlMRF9DQ30iIENGTEFHUz0iJHtCVUlMRF9DRkxBR1N9IiAuL2Jvb3RzdHJhcC5zaCAtLXdpdGgtYmphbT1iamFtIC0td2l0aC10b29sc2V0PWdjYyAtLXdpdGgtcHl0aG9uLXJvb3Q9JHtQWVRIT05fUk9PVH0KKwlzZWQgLWkgJy9edXNpbmcgcHl0aG9uL2QnIHByb2plY3QtY29uZmlnLmphbQorfQorCitkb19ib29zdGNvbmZpZ1tkaXJzXSA9ICIke1N9IgorYWRkdGFzayBkb19ib29zdGNvbmZpZyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2RvX2NvbXBpbGUoKSB7CisJc2V0IC1leAorCWJqYW0gJHtCSkFNX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSBcCisJCS0tZXhlYy1wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAorCQktLWxpYmRpcj0ke2xpYmRpcn0gXAorCQktLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfQorfQorCitkb19pbnN0YWxsKCkgeworCXNldCAtZXgKKwliamFtICR7QkpBTV9PUFRTfSBcCisJCS0tbGliZGlyPSR7RH0ke2xpYmRpcn0gXAorCQktLWluY2x1ZGVkaXI9JHtEfSR7aW5jbHVkZWRpcn0gXAorCQlpbnN0YWxsCisJZm9yIGxpYiBpbiAke0JPT1NUX0xJQlN9OyBkbworCQlpZiBbIC1lICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LmEgXTsgdGhlbgorCQkJbG4gLXMgbGliYm9vc3RfJHtsaWJ9LmEgJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0tbXQuYQorCQlmaQorCQlpZiBbIC1lICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LnNvIF07IHRoZW4KKwkJCWxuIC1zIGxpYmJvb3N0XyR7bGlifS5zbyAke0R9JHtsaWJkaXJ9L2xpYmJvb3N0XyR7bGlifS1tdC5zbworCQlmaQorCWRvbmUKKworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2FybS1pbnRyaW5zaWNzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9hcm0taW50cmluc2ljcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTg1YzY5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC9hcm0taW50cmluc2ljcy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKzgvMTcvMjAxMCAtIHJlYmFzZWQgdG8gMS40NCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X3N5bmMuaHBwIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAKK2luZGV4IGI2MzU5YjUuLjc4YjFjYzIgMTAwNjQ0CistLS0gYS9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcAorKysrIGIvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAKK0BAIC0zMywxNyArMzMsNDYgQEAgcHVibGljOgorIAorICAgICBsb25nIG9wZXJhdG9yKysoKQorICAgICB7CisrI2lmZGVmIF9fQVJNX0FSQ0hfN0FfXworKyAgICAgICBpbnQgdjEsIHRtcDsKKysgICAgICAgYXNtIHZvbGF0aWxlICgiMTogICAgICAgICAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImxkcmV4ICAgJTAsICUxICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJhZGQgICAgICUwICwlMCwgIzEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3RyZXggICAlMiwgJTAsICUxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImNtcCAgICAgJTIsICMwICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJibmUgICAgIDFiICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiICh2MSksICIrUSIodmFsdWVfKSwgIj0mciIodG1wKQorKyAgICAgICAgICAgICAgICAgICAgKTsKKysjZWxzZQorICAgICAgICAgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoKCAmdmFsdWVfLCAxICk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgICAgbG9uZyBvcGVyYXRvci0tKCkKKyAgICAgeworKyNpZmRlZiBfX0FSTV9BUkNIXzdBX18KKysgICAgICAgaW50IHYxLCB0bXA7CisrICAgICAgIGFzbSB2b2xhdGlsZSAoIjE6ICAgICAgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJsZHJleCAgICUwLCAlMSAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3ViICAgICAlMCAsJTAsICMxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgInN0cmV4ICAgJTIsICUwLCAlMSBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJjbXAgICAgICUyLCAjMCAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiYm5lICAgICAxYiAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAodjEpLCAiK1EiKHZhbHVlXyksICI9JnIiKHRtcCkKKysgICAgICAgICAgICAgICAgICAgICk7CisrICAgICAgIHJldHVybiB2YWx1ZV87CisrI2Vsc2UKKyAgICAgICAgIHJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaCggJnZhbHVlXywgLTEgKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgICBvcGVyYXRvciBsb25nKCkgY29uc3QKKyAgICAgeworKyNpZiBfX0FSTV9BUkNIXzdBX18KKysgICAgICAgIHJldHVybiB2YWx1ZV87CisrI2Vsc2UKKyAgICAgICAgIHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZCggJnZhbHVlXywgMCApOworKyNlbmRpZgorICAgICB9CisgCisgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjU4LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5ZDVmNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiCkBAIC0wLDAgKzEsNiBAQAoraW5jbHVkZSBib29zdC0ke1BWfS5pbmMKK2luY2x1ZGUgYm9vc3QuaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vYXJtLWludHJpbnNpY3MucGF0Y2ggXAorIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDEtbWlwczEtZml4LWFkZGVkLWdjYy5qYW0td2FzLXBhc3NpbmctdGhlLW9wdGlvbnMtbTMyLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjliNGMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4MTdhZWQwZDc1NWJmOGMwYmE0ZWY2YTc3ZDQxNTM4ZTUwYjU3MWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogY2xheW1vcmUgPGNhcmxvc21mLnB0QGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDI6Mjg6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIG1pcHMxIGZpeCBhZGRlZCBnY2MuamFtIHdhcyBwYXNzaW5nIHRoZSBvcHRpb25zIC1tMzIgYW5kCisgLW02NCB0byBtaXBzIGNyb3NzLWNvbXBpbGVycywgd2hlbiB0aG9zZSBkbyBub3QgdXNlCisgc3VjaCBvcHRpb25zIFRoaXMgbW9kaWZpY2F0aW9uIHNvbHZlcyBpdCBieSBhZGRpbmcgbWlwcworIGFzIGFuIGV4Y2VwdGlvbgorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgTS4gRmVycmVpcmEgY2FybG9zbWYucHRAZ21haWwuY29tCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyB0b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK2luZGV4IGRiMDQ1MzQuLmVmZjk1YWUgMTAwNjQ0CistLS0gYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorKysrIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK0BAIC00NTEsNyArNDUxLDcgQEAgcnVsZSBzZXR1cC1hZGRyZXNzLW1vZGVsICggdGFyZ2V0cyAqIDogc291cmNlcyAqIDogcHJvcGVydGllcyAqICkKKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBsb2NhbCBhcmNoID0gWyBmZWF0dXJlLmdldC12YWx1ZXMgYXJjaGl0ZWN0dXJlIDogJChwcm9wZXJ0aWVzKSBdIDsKKy0gICAgICAgICAgICBpZiAkKGFyY2gpICE9IGFybQorKyAgICAgICAgICAgIGlmICQoYXJjaCkgIT0gYXJtICYmICQoYXJjaCkgIT0gbWlwczEKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGlmICQobW9kZWwpID0gMzIKKyAgICAgICAgICAgICAgICAgeworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAyLURvbi10LXBhc3MtbTMyLW02NC13aGVyZS1pdC1zLW5vdC1zdXBwb3J0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmN2U1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gZjgyNTYzNGE1NmIxMTlkZmE5ZDcxMjExOWE2NjI3OWNjNzYzNTk3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KPUMzPUI2cmc9MjBLcmF1c2U/PSA8am9lcmcua3JhdXNlQGVtYmVkZGVkLnJvY2tzPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE0OjI0OjAyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBEb24ndCBwYXNzIC1tMzIvLW02NCB3aGVyZSBpdCdzIG5vdCBzdXBwb3J0ZWQuCisKK09ubHkgUG93ZXJQQywgU1BBUkMsIGFuZCB4ODYgZG8gc3VwcG9ydCB0aGUgLW0zMiBhbmQgLW02NCBjb21waWxlciBvcHRpb25zIFsxXS4KKworUmF0aGVyIHRoZW4gZXhjbHVkaW5nIGFsbCBhcmNoaXRlY3R1cmVzIG5vdCBzdXBwb3J0aW5nIHRoZXNlIG9wdGlvbnMgYXMgaXQgaXMKK2RvbmUgaW4gY29tbWl0IGMwNjM0MzQxZDllZTJjMDJkM2E1NWM5MWRhZmI5ODhhZmMwNjZjNDkgWzJdLCBpbmNsdWRlIGFsbAorYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIHN1cHBvcnQgdGhlbS4KKworVGhpcyB3aWxsIGZpeCBidWlsZGluZyBCb29zdCBmb3IgdGhlIFN1cGVySCBhcmNoaXRlY3R1cmUgd2l0aCBCdWlsZHJvb3QgWzNdLgorCitbMV0gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PcHRpb24tU3VtbWFyeS5odG1sCitbMl0gaHR0cHM6Ly9naXRodWIuY29tL2Jvb3N0b3JnL2J1aWxkL2NvbW1pdC9jMDYzNDM0MWQ5ZWUyYzAyZDNhNTVjOTFkYWZiOTg4YWZjMDY2YzQ5CitbM10gaHR0cDovL2F1dG9idWlsZC5idWlsZHJvb3QubmV0L3Jlc3VsdHMvY2NkL2NjZDVjODM5NjMwMzJiYTQ5YjE2MjdiMWRmZjM5ZTM0YTk0ODY5NDMvYnVpbGQtZW5kLmxvZworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitpbmRleCBlZmY5NWFlLi4yZjZhZjkzIDEwMDY0NAorLS0tIGEvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KKysrKyBiL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCitAQCAtNDUxLDcgKzQ1MSw3IEBAIHJ1bGUgc2V0dXAtYWRkcmVzcy1tb2RlbCAoIHRhcmdldHMgKiA6IHNvdXJjZXMgKiA6IHByb3BlcnRpZXMgKiApCisgICAgICAgICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICAgbG9jYWwgYXJjaCA9IFsgZmVhdHVyZS5nZXQtdmFsdWVzIGFyY2hpdGVjdHVyZSA6ICQocHJvcGVydGllcykgXSA7CistICAgICAgICAgICAgaWYgJChhcmNoKSAhPSBhcm0gJiYgJChhcmNoKSAhPSBtaXBzMQorKyAgICAgICAgICAgIGlmICQoYXJjaCkgPSBwb3dlciB8fCAkKGFyY2gpID0gc3BhcmMgfHwgJChhcmNoKSA9IHg4NgorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgaWYgJChtb2RlbCkgPSAzMgorICAgICAgICAgICAgICAgICB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOGI3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzL2JqYW0tbmF0aXZlLWJ1aWxkLWJqYW0uZGVidWcucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSA2MTlhZGEzMTRhYjI2YzBjOWNiZmU1NzAyY2Q5YzBjYWE4ZjY0MTVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDMgQXVnIDIwMTUgMTc6MTI6MzMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmphbS1uYXRpdmU6IGJ1aWxkIGJqYW0uZGVidWcKKworYmphbSBpcyBzdHJpcHBlZCBieSBkZWZhdWx0LCB0aGlzIGNhdXNlcyBRQSB3YXJuaW5nIHdoaWxlIHN0cmlwcGluZyBpdAorZnJvbSBkb19wb3B1bGF0ZV9zeXNyb290KCk6CisKKyAgV0FSTklORzogRmlsZSAnLi4uL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9iamFtJyBcCisgICAgZnJvbSBiamFtLW5hdGl2ZSB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgXAorICAgIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchCisKK1RoZSBKQU0gc2NyaXB0cyBhbGxvdyB0byBidWlsZCB1bnN0cmlwcGVkIHZlcnNpb24gd2l0aCAnLS1kZWJ1ZycuIEp1c3QKK2J1aWxkIGFuZCBpbnN0YWxsIHRoZSBiamFtLmRlYnVnIHRvIHN0b3AgYmphbSBmcm9tIGJlaW5nIHN0cmlwcGVkIGluCitjb21waWxlIHN0ZXAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBib290c3RyYXAuc2ggICAgICAgICAgICAgICAgICAgIHwgMSArCisgdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9vdHN0cmFwLnNoIGIvYm9vdHN0cmFwLnNoCitpbmRleCA5OGNmODhiLi41NDY5MGFhIDEwMDc1NQorLS0tIGEvYm9vdHN0cmFwLnNoCisrKysgYi9ib290c3RyYXAuc2gKK0BAIC0yMjgsNiArMjI4LDcgQEAgaWYgdGVzdCAieCRCSkFNIiA9IHg7IHRoZW4KKyAgIGVjaG8gInRvb2xzL2J1aWxkL3NyYy9lbmdpbmUvJGFyY2gvYjIiCisgICBjcCAiJEJKQU0iIC4KKyAgIGNwICIkbXlfZGlyL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvJGFyY2gvYmphbSIgLgorKyAgY3AgIiRteV9kaXIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS8ke2FyY2h9LmRlYnVnL2JqYW0iIGJqYW0uZGVidWcKKyAKKyBmaQorIAorZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2ggYi90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoCitpbmRleCA2ZGJjNzA2Li5jNjlmZGM3IDEwMDc1NQorLS0tIGEvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaAorKysrIGIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaAorQEAgLTMxMiw1ICszMTIsNSBAQCBpZiB0ZXN0IC14ICIuL2Jvb3RzdHJhcC9qYW0wIiA7IHRoZW4KKyAgICAgaWYgdGVzdCAiJHtCSkFNX1VQREFURX0iICE9ICJ1cGRhdGUiIDsgdGhlbgorICAgICAgICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIgY2xlYW4KKyAgICAgZmkKKy0gICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIKKysgICAgZWNob19ydW4gLi9ib290c3RyYXAvamFtMCAtZiBidWlsZC5qYW0gLS10b29sc2V0PSRCT09TVF9KQU1fVE9PTFNFVCAiLS10b29sc2V0LXJvb3Q9JEJPT1NUX0pBTV9UT09MU0VUX1JPT1QiICIkQCIgLS1kZWJ1ZworIGZpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGIyODcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2NhLWNlcnRpZmljYXRlcyBpcyBhIHBhY2thZ2UgZnJvbSBEZWJpYW4sIGJ1dCBzb21lIGhvc3QgZGlzdHJvcyBzdWNoIGFzIEZlZG9yYQoraGF2ZSBhIGxlYW5lciBydW4tcGFydHMgcHJvdmlkZWQgYnkgY3JvbiB3aGljaCBkb2Vzbid0IHN1cHBvcnQgLS12ZXJib3NlIG9yIHRoZQorIC0tIHNlcGFyYXRvciBiZXR3ZWVuIGFyZ3VtZW50cyBhbmQgcGF0aHMuCisKK1RoaXMgc29sdmVzIGVycm9ycyBzdWNoIGFzCisKK3wgUnVubmluZyBob29rcyBpbiBbLi4uXS9yb290ZnMvZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZC4uLgorfCBbLi4uXS91c3Ivc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzOiBsaW5lIDE5NDogTm90OiBjb21tYW5kIG5vdCBmb3VuZAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CistLS0KKyBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTE5MSw5ICsxOTEsNyBAQCBpZiBbIC1kICIkSE9PS1NESVIiIF0KKyB0aGVuCisgCisgICBlY2hvICJSdW5uaW5nIGhvb2tzIGluICRIT09LU0RJUi4uLiIKKy0gIFZFUkJPU0VfQVJHPQorLSAgWyAiJHZlcmJvc2UiID0gMCBdIHx8IFZFUkJPU0VfQVJHPSItLXZlcmJvc2UiCistICBldmFsIHJ1bi1wYXJ0cyAiJFZFUkJPU0VfQVJHIiAtLXRlc3QgLS0gIiRIT09LU0RJUiIgfCB3aGlsZSByZWFkIGhvb2sKKysgIGV2YWwgcnVuLXBhcnRzIC0tdGVzdCAtLSAiJEhPT0tTRElSIiB8IHdoaWxlIHJlYWQgaG9vaworICAgZG8KKyAgICAgKCBjYXQgIiRBRERFRCIKKyAgICAgICBjYXQgIiRSRU1PVkVEIiApIHwgIiRob29rIiB8fCBlY2hvICJFOiAkaG9vayBleGl0ZWQgd2l0aCBjb2RlICQ/LiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMjcyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDExMWU5MDVmZTkzMWRhMWEzODAwYWNjZmM2NzVjYzAxYzhlZTA4MGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBVbGYgU2FtdWVsc3NvbiA8dWxmQGVtYWdpaS5jb20+CitEYXRlOiBUdWUsIDI4IEZlYiAyMDEyIDA2OjQyOjU4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IHJlbW92ZSBjIHJlaGFzaAorCitVcGRhdGVkIGVhcmxpZXIgcGF0Y2ggdG8gYXBwbHkgY2xlYW4gb24gMjAxMi0wMi0xMgorU2lnbmVkLW9mZi1ieTogVWxmIFNhbXVlbHNzb24gPHVsZkBlbWFnaWkuY29tPgorLS0tCisgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgICAyMCArKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgYi9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK2luZGV4IDUzNzU5NTAuLmM1NjdlM2QgMTAwNzU1CistLS0gYS9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBiL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTEzMiwxNiArMTMyLDE2IEBAIHJtIC1mICIkQ0VSVEJVTkRMRSIKKyBBRERFRF9DTlQ9JCh3YyAtbCA8ICIkQURERUQiKQorIFJFTU9WRURfQ05UPSQod2MgLWwgPCAiJFJFTU9WRUQiKQorCistaWYgWyAiJEFEREVEX0NOVCIgLWd0IDAgXSB8fCBbICIkUkVNT1ZFRF9DTlQiIC1ndCAwIF0KKy10aGVuCistICAjIG9ubHkgcnVuIGlmIHNldCBvZiBmaWxlcyBoYXMgY2hhbmdlZAorLSAgaWYgWyAiJHZlcmJvc2UiID0gMCBdCistICB0aGVuCistICAgIGNfcmVoYXNoIC4gPiAvZGV2L251bGwKKy0gIGVsc2UKKy0gICAgY19yZWhhc2ggLgorLSAgZmkKKy1maQorKyNpZiBbICIkQURERURfQ05UIiAtZ3QgMCBdIHx8IFsgIiRSRU1PVkVEX0NOVCIgLWd0IDAgXQorKyN0aGVuCisrIyAgIyBvbmx5IHJ1biBpZiBzZXQgb2YgZmlsZXMgaGFzIGNoYW5nZWQKKysjICBpZiBbICIkdmVyYm9zZSIgPSAwIF0KKysjICB0aGVuCisrIyAgICBjX3JlaGFzaCAuID4gL2Rldi9udWxsCisrIyAgZWxzZQorKyMgICAgY19yZWhhc2ggLgorKyMgIGZpCisrI2ZpCisKKyBjaG1vZCAwNjQ0ICIkVEVNUEJVTkRMRSIKKyBtdiAtZiAiJFRFTVBCVU5ETEUiICIkQ0VSVEJVTkRMRSIKKy0tCisxLjcuNC4xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTJiNDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDItdXBkYXRlLWNhLWNlcnRpZmljYXRlcy11c2UtU1lTUk9PVC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRnJvbSA3MjRjYjE1M2NhMGY2MDdmYjM4YjNhOGRiM2ViYjI3NDI2MDFjZDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KK0RhdGU6IFR1ZSwgMTkgTWFyIDIwMTMgMTc6MTQ6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IHVzZSAkU1lTUk9PVAorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorLS0tCisgc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzIHwgICAxNCArKysrKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTI0LDEyICsyNCwxMiBAQAorIHZlcmJvc2U9MAorIGZyZXNoPTAKKyBkZWZhdWx0PTAKKy1DRVJUU0NPTkY9L2V0Yy9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorLUNFUlRTRElSPS91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzCistTE9DQUxDRVJUU0RJUj0vdXNyL2xvY2FsL3NoYXJlL2NhLWNlcnRpZmljYXRlcworK0NFUlRTQ09ORj0kU1lTUk9PVC9ldGMvY2EtY2VydGlmaWNhdGVzLmNvbmYKKytDRVJUU0RJUj0kU1lTUk9PVC91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzCisrTE9DQUxDRVJUU0RJUj0kU1lTUk9PVC91c3IvbG9jYWwvc2hhcmUvY2EtY2VydGlmaWNhdGVzCisgQ0VSVEJVTkRMRT1jYS1jZXJ0aWZpY2F0ZXMuY3J0CistRVRDQ0VSVFNESVI9L2V0Yy9zc2wvY2VydHMKKy1IT09LU0RJUj0vZXRjL2NhLWNlcnRpZmljYXRlcy91cGRhdGUuZAorK0VUQ0NFUlRTRElSPSRTWVNST09UL2V0Yy9zc2wvY2VydHMKKytIT09LU0RJUj0kU1lTUk9PVC9ldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisgCisgd2hpbGUgWyAkIyAtZ3QgMCBdOworIGRvCitAQCAtOTIsOSArOTIsOSBAQCBhZGQoKSB7CisgICBQRU09IiRFVENDRVJUU0RJUi8kKGJhc2VuYW1lICIkQ0VSVCIgLmNydCB8IHNlZCAtZSAncy8gL18vZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvWygpXS89L2cnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzLywvXy9nJykucGVtIgorLSAgaWYgISB0ZXN0IC1lICIkUEVNIiB8fCBbICIkKHJlYWRsaW5rICIkUEVNIikiICE9ICIkQ0VSVCIgXQorKyAgaWYgISB0ZXN0IC1lICIkUEVNIiB8fCBbICIkKHJlYWRsaW5rICIkUEVNIikiICE9ICIke0NFUlQjIyRTWVNST09UfSIgXQorICAgdGhlbgorLSAgICBsbiAtc2YgIiRDRVJUIiAiJFBFTSIKKysgICAgbG4gLXNmICIke0NFUlQjIyRTWVNST09UfSIgIiRQRU0iCisgICAgIGVjaG8gIiskUEVNIiA+PiAiJEFEREVEIgorICAgZmkKKyAgICMgQWRkIHRyYWlsaW5nIG5ld2xpbmUgdG8gY2VydGlmaWNhdGUsIGlmIGl0IGlzIG1pc3NpbmcgKCM2MzU1NzApCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvZGVmYXVsdC1zeXNyb290LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL2RlZmF1bHQtc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGIwNzkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL2RlZmF1bHQtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordXBkYXRlLWNhLWNlcnRpZmljYXRlczogZmluZCBTWVNST09UIHJlbGF0aXZlIHRvIGl0cyBvd24gbG9jYXRpb24KKworVGhpcyBtYWtlcyB0aGUgc2NyaXB0IHJlbG9jYXRhYmxlLgorCitJbmRleDogZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworKysrIGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK0BAIC02Niw2ICs2NiwzOSBAQCBkbworICAgc2hpZnQKKyBkb25lCisgCisraWYgWyAteiAiJFNZU1JPT1QiIF07IHRoZW4KKysgIGxvY2FsX3doaWNoICgpIHsKKysgICAgaWYgWyAkIyAtbHQgMSBdOyB0aGVuCisrICAgICAgcmV0dXJuIDEKKysgICAgZmkKKysKKysgICAgKAorKyAgICAgIElGUz06CisrICAgICAgZm9yIGVudHJ5IGluICRQQVRIOyBkbworKyAgICAgICAgaWYgWyAteCAiJGVudHJ5LyQxIiBdOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRlbnRyeS8kMSIKKysgICAgICAgICAgZXhpdCAwCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBleGl0IDEKKysgICAgKQorKyAgfQorKworKyAgY2FzZSAiJDAiIGluCisrICAgICovKikKKysgICAgICBzYmluZGlyPSQoY2QgJHswJS8qfSAmJiBwd2QpCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzYmluZGlyPSQoY2QgJChkaXJuYW1lICQobG9jYWxfd2hpY2ggJDApKSAmJiBwd2QpCisrICAgICAgOzsKKysgIGVzYWMKKysgIHByZWZpeD0ke3NiaW5kaXIlLyp9CisrICBTWVNST09UPSR7cHJlZml4JS8qfQorKyAgaWYgWyAhIC1kICIkU1lTUk9PVC91c3Ivc2hhcmUvY2EtY2VydGlmaWNhdGVzIiBdOyB0aGVuCisrICAgIFNZU1JPT1Q9CisrICBmaQorK2ZpCisrCisgaWYgWyAhIC1zICIkQ0VSVFNDT05GIiBdCisgdGhlbgorICAgZnJlc2g9MQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvc2JpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTEzZmE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0xldCB1cyBhbHRlciB0aGUgaW5zdGFsbCBkZXN0aW5hdGlvbiBvZiB0aGUgc2NyaXB0IHZpYSBTQklORElSCisKKy0tLSBjYS1jZXJ0aWZpY2F0ZXMtMjAxMzAxMTkub3JpZy9zYmluL01ha2VmaWxlCisrKysgY2EtY2VydGlmaWNhdGVzLTIwMTMwMTE5L3NiaW4vTWFrZWZpbGUKK0BAIC0zLDkgKzMsMTIgQEAKKyAjCisgIworCisrU0JJTkRJUiA9IC91c3Ivc2JpbgorKworIGFsbDoKKworIGNsZWFuOgorCisgaW5zdGFsbDoKKy0JaW5zdGFsbCAtbTc1NSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzICQoREVTVERJUikvdXNyL3NiaW4vCisrCWluc3RhbGwgLWQgJChERVNURElSKSQoU0JJTkRJUikKKysJaW5zdGFsbCAtbTc1NSB1cGRhdGUtY2EtY2VydGlmaWNhdGVzICQoREVTVERJUikkKFNCSU5ESVIpLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTUwNDI2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTUwNDI2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNmUzZGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXNfMjAxNTA0MjYuYmIKQEAgLTAsMCArMSw4MCBAQAorU1VNTUFSWSA9ICJDb21tb24gQ0EgY2VydGlmaWNhdGVzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIFBFTSBmaWxlcyBvZiBDQSBjZXJ0aWZpY2F0ZXMgdG8gYWxsb3cgXAorU1NMLWJhc2VkIGFwcGxpY2F0aW9ucyB0byBjaGVjayBmb3IgdGhlIGF1dGhlbnRpY2l0eSBvZiBTU0wgY29ubmVjdGlvbnMuIFwKK1RoaXMgZGVyaXZlZCBmcm9tIERlYmlhbidzIENBIENlcnRpZmljYXRlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9zaWQvY2EtY2VydGlmaWNhdGVzIgorU0VDVElPTiA9ICJtaXNjIgorTElDRU5TRSA9ICJHUEwtMi4wKyAmIE1QTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT00OGQyYmFmOTc5ODY5OTllNzc2YjQzYzhkZDllMGM1YSIKKworIyBUaGlzIGlzIG5lZWRlZCB0byBlbnN1cmUgd2UgY2FuIHJ1biB0aGUgcG9zdGluc3QgYXQgaW1hZ2UgY3JlYXRpb24gdGltZQorREVQRU5EUyA9ICJjYS1jZXJ0aWZpY2F0ZXMtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCisjIHRhZzogZGViaWFuLzIwMTUwNDI2ICsgMgorU1JDUkVWID0gImQ0NzkwZDI4MzJhYWFjOTE1MmY0NTBlMDY2NjE1MTEwNjc1OTIyMjciCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC9jYS1jZXJ0aWZpY2F0ZXMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZhdWx0LXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2JpbmRpci5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhbGxhcmNoCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ0NFUlRTRElSPSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzJyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgb2VfcnVubWFrZSBjbGVhbgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyBcCisgICAgICAgICAgICAgICAke0R9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMgXAorICAgICAgICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOAorICAgIGluc3RhbGwgLW0gMDY0NCBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOCAke0R9JHttYW5kaXJ9L21hbjgvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgeworICAgICAgICBlY2hvICIjIExpbmVzIHN0YXJ0aW5nIHdpdGggIyB3aWxsIGJlIGlnbm9yZWQiCisgICAgICAgIGVjaG8gIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAhIHdpbGwgcmVtb3ZlIGNlcnRpZmljYXRlIG9uIG5leHQgdXBkYXRlIgorICAgICAgICBlY2hvICIjIgorICAgICAgICBmaW5kICR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcyAtdHlwZSBmIC1uYW1lICcqLmNydCcgfCBcCisgICAgICAgICAgICBzZWQgJ3MsXiR7RH0ke2RhdGFkaXJ9L2NhLWNlcnRpZmljYXRlcy8sLCcKKyAgICB9ID4ke0R9JHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAtZSAncywvZXRjLywke3N5c2NvbmZkaXJ9LywnIFwKKyAgICAgICAgICAgLWUgJ3MsL3Vzci9zaGFyZS8sJHtkYXRhZGlyfS8sJyBcCisgICAgICAgICAgIC1lICdzLC91c3IvbG9jYWwsJHtwcmVmaXh9L2xvY2FsLCcgXAorICAgICAgICAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzIFwKKyAgICAgICAgJHtEfSR7bWFuZGlyfS9tYW44L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMuOAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIFNZU1JPT1Q9IiREIiB1cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMuY29uZiIKKworIyBQb3N0aW5zdHMgZG9uJ3Qgc2VlbSB0byBiZSBydW4gZm9yIG5hdGl2ZXNkayBwYWNrYWdlcyB3aGVuIHBvcHVsYXRpbmcgU0RLcy4KK0NPTkZGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKyAgICBTWVNST09UPSIke0R9JHtTREtQQVRITkFUSVZFfSIgdXBkYXRlLWNhLWNlcnRpZmljYXRlcworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIFNZU1JPT1Q9IiR7RH0ke2Jhc2VfcHJlZml4fSIgJHtEfSR7c2JpbmRpcn0vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworfQorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9hZGQtcG9sa2l0LWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDg3OWQ0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBDb25zb2xlS2l0LTAuNC42Lm9yaWcvY29uZmlndXJlLmFjCisrKysgQ29uc29sZUtpdC0wLjQuNi9jb25maWd1cmUuYWMKK0BAIC01NiwxMCArNTYsMjQgQEAgUEtHX0NIRUNLX01PRFVMRVMoQ09OU09MRV9LSVQsCisgICBndGhyZWFkLTIuMCA+PSAkR0xJQl9SRVFVSVJFRF9WRVJTSU9OCisgKQorCistUEtHX0NIRUNLX01PRFVMRVMoUE9MS0lULAorLSAgcG9sa2l0LWdvYmplY3QtMSA+PSAkUE9MS0lUX1JFUVVJUkVEX1ZFUlNJT04sCistICBoYXZlX3BvbGtpdD15ZXMsCistICBoYXZlX3BvbGtpdD1ubykKKytBQ19BUkdfV0lUSChbcG9sa2l0XSwKKysgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBvbGtpdF0sCisrICAgIFtzdXBwb3J0IFBvbGljeUtpdCBAPDpAZGVmYXVsdD1jaGVja0A6PkBdKV0sCisrICBbXSwKKysgIFt3aXRoX3BvbGtpdD1jaGVja10pCisrCisrQVNfSUYoW3Rlc3QgIngkd2l0aF9wb2xraXQiICE9IHhub10sCisrICBbUEtHX0NIRUNLX01PRFVMRVMoUE9MS0lULAorKyAgICAgcG9sa2l0LWdvYmplY3QtMSA+PSAkUE9MS0lUX1JFUVVJUkVEX1ZFUlNJT04sCisrICAgICBoYXZlX3BvbGtpdD15ZXMsCisrICAgICBbaWYgdGVzdCAieCR3aXRoX3BvbGtpdCIgIT0geGNoZWNrOyB0aGVuCisrICAgICAgIEFDX01TR19GQUlMVVJFKAorKyAgICAgICAgIFstLXdpdGgtcG9sa2l0IHdhcyBnaXZlbiwgYnV0IHRlc3QgZm9yIHBvbGtpdCBmYWlsZWRdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGhhdmVfcG9sa2l0PW5vCisrICAgICAgZmkKKysgICAgIF0pXSkKKysKKyBpZiB0ZXN0ICJ4JGhhdmVfcG9sa2l0IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgICAgQUNfREVGSU5FKEhBVkVfUE9MS0lULCBbXSwgW0RlZmluZSBpZiB3ZSBoYXZlIHBvbGtpdF0pCisgZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJmOWI5YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0ZpeCBidWlsZHMgaW4gdGhlIGNhc2Ugb2Ygc2VwcmF0ZSBzb3VyY2UgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitSUCAyMDEzLzQvMTcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBwYW0tY2stY29ubmVjdG9yL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZWtpdC9wYW0tY2stY29ubmVjdG9yLm9yaWcvTWFrZWZpbGUuYW0JMjAxMC0wOS0wMyAxMzo1NDozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xla2l0L3BhbS1jay1jb25uZWN0b3IvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAwOTowNjo0OS4wOTM1MjQ5MTggKzAwMDAKK0BAIC00LDcgKzQsNyBAQAorIAorIElOQ0xVREVTID0gCQkJCQlcCisgCSQoTElCREJVU19DRkxBR1MpCQkJXAorLQktSSQodG9wX2J1aWxkZGlyKS9saWJjay1jb25uZWN0b3IJXAorKwktSSQodG9wX3NyY2RpcikvbGliY2stY29ubmVjdG9yCVwKKyAJJChOVUxMKQorIAorIHBhbWxpYmRpciA9ICQoUEFNX01PRFVMRV9ESVIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0XzAuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTg5MmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkZyYW1ld29yayBmb3IgZGVmaW5pbmcgYW5kIHRyYWNraW5nIHVzZXJzLCBsb2dpbiBzZXNzaW9ucywgYW5kIHNlYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9Db25zb2xlS2l0IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2J1Z2xpc3QuY2dpP3F1ZXJ5X2Zvcm1hdD1zcGVjaWZpYyZwcm9kdWN0PUNvbnNvbGVLaXQiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztlbmRsaW5lPTIxO21kNT0wYTk5NGUwOTc2OTc4MDIyMDE2MzI1NWQ4ZjkwNzFjMyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbGliLTIuMC1uYXRpdmUgZGJ1cyBkYnVzLWdsaWIgdmlydHVhbC9saWJ4MTEiCitSREVQRU5EU18ke1BOfSArPSAiYmFzZS1maWxlcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL0NvbnNvbGVLaXQvZGlzdC9Db25zb2xlS2l0LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcG9sa2l0LWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MTE3OTJiNGQ2MTYyNTNhNWJkZWM5MTc1ZjhiNzY3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDFkMTdlMDZmODAwNTk1ODlmYmVlZmU5NmFkMDdiY2M1NjRjNDllNjU1MTZkYTFjYWY5NzUxNDY0NzU1NjVjIgorCitTID0gIiR7V09SS0RJUn0vQ29uc29sZUtpdC0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbS1tb2R1bGUgLS13aXRoLXBhbS1tb2R1bGUtZGlyPSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LC0tZGlzYWJsZS1wYW0tbW9kdWxlLGxpYnBhbSIKK1BBQ0tBR0VDT05GSUdbcG9saWN5a2l0XSA9ICItLXdpdGgtcG9sa2l0LC0td2l0aG91dC1wb2xraXQscG9sa2l0IgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSIKKworRklMRVNfJHtQTn0gKz0gIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL0NvbnNvbGVLaXQgJHtleGVjX3ByZWZpeH0vbGliL0NvbnNvbGVLaXQgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9Db25zb2xlS2l0ICAke3N5c3RlbWRfdW5pdGRpcn0gJHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xICR7ZGF0YWRpcn0vUG9saWN5S2l0ICR7ZGF0YWRpcn0vcG9sa2l0KiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnIgorCitQQUNLQUdFUyA9KyAicGFtLXBsdWdpbi1jay1jb25uZWN0b3IiCitGSUxFU19wYW0tcGx1Z2luLWNrLWNvbm5lY3RvciArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyIKK1JERVBFTkRTX3BhbS1wbHVnaW4tY2stY29ubmVjdG9yICs9ICIke1BOfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgJHtsb2NhbHN0YXRlZGlyfS9sb2cvQ29uc29sZUtpdCAtIC0gLSAtIiBcCisJCQk+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvY29uc29sZWtpdC5jb25mCisJZmkKKworCSMgUmVtb3ZlIC92YXIvcnVuIGZyb20gcGFja2FnZSBhcyBjb25zb2xlLWtpdC1kYWVtb24gd2lsbCBwb3B1bGF0ZSBpdCBvbiBzdGFydHVwCisJcm0gLWZyICIke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4iCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tZGJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNzU1OTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitjcmVhdGVyZXBvOiBJbXBsZW1lbnQgLS1kYnBhdGggY29tbWFuZCBsaW5lIG9wdGlvbgorCistLWRicGF0aCBvcHRpb24gYWxsb3dzIHRvIHNwZWNpZnkgcGF0aCB0byB0aGUgZGlyZWN0b3J5Cit3aXRoIHJwbSBkYXRhYmFzZS4gQnkgZGVmYXVsdCBjcmVhdGVyZXBvIHVzZXMgb3IgY3JlYXRlcworcnBtIGRhdGFiYXNlIGluIC92YXIvbGliL3JwbS8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9nZW5wa2dtZXRhZGF0YS5weSAyMDE1LTAzLTMwIDIyOjE4OjE5LjkwNDAwMDAwMCArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2dlbnBrZ21ldGFkYXRhLnB5IDIwMTUtMDMtMzAgMjI6Mjg6NDkuMjA4MDAwMDAwICswMzAwCitAQCAtNjUsNiArNjUsNyBAQAorICAgICAgLXAsIC0tcHJldHR5ID0gb3V0cHV0IHhtbCBmaWxlcyBpbiBwcmV0dHkgZm9ybWF0LgorICAgICAgLS11cGRhdGUgPSB1cGRhdGUgZXhpc3RpbmcgbWV0YWRhdGEgKGlmIHByZXNlbnQpCisgICAgICAtZCwgLS1kYXRhYmFzZSA9IGdlbmVyYXRlIHRoZSBzcWxpdGUgZGF0YWJhc2VzLgorKyAgICAgLS1kYnBhdGggPGRpcj4gPSBzcGVjaWZ5IHBhdGggdG8gcnBtIGRiIGRpcmVjdG9yeS4KKyAgICAgIiIiKQorIAorICAgICBzeXMuZXhpdChyZXR2YWwpCitAQCAtNzIsMTAgKzczLDEzIEBACisgY2xhc3MgTWV0YURhdGFHZW5lcmF0b3I6CisgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzKToKKyAgICAgICAgIHNlbGYuY21kcyA9IGNtZHMKKy0gICAgICAgIHNlbGYudHMgPSBycG0uVHJhbnNhY3Rpb25TZXQoKQorICAgICAgICAgc2VsZi5wa2djb3VudCA9IDAKKyAgICAgICAgIHNlbGYuZmlsZXMgPSBbXQorIAorKyAgICAgICAgaWYgc2VsZi5jbWRzWydkYnBhdGgnXToKKysgICAgICAgICAgICBycG0uYWRkTWFjcm8oIl9kYnBhdGgiLCBzZWxmLmNtZHNbJ2RicGF0aCddKQorKyAgICAgICAgc2VsZi50cyA9IHJwbS5UcmFuc2FjdGlvblNldCgpCisrCisgICAgIGRlZiBfb3NfcGF0aF93YWxrKHNlbGYsIHRvcCwgZnVuYywgYXJnKToKKyAgICAgICAgICIiIkRpcmVjdG9yeSB0cmVlIHdhbGsgd2l0aCBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICAgICAgICBjb3B5IG9mIG9zLnBhdGgud2FsaywgZml4ZXMgdGhlIGxpbmsvc3RhdGluZyBwcm9ibGVtCitAQCAtNDM1LDYgKzQzOSw3IEBACisgICAgIGNtZHNbJ2Rpci1wYXR0ZXJuLW1hdGNoJ10gPSBbJy4qYmluXC8uKicsICdeXC9ldGNcLy4qJ10KKyAgICAgY21kc1snc2tpcC1zeW1saW5rcyddID0gRmFsc2UKKyAgICAgY21kc1sncGtnbGlzdCddID0gW10KKysgICAgY21kc1snZGJwYXRoJ10gPSBOb25lCisgCisgICAgIHRyeToKKyAgICAgICAgIGdvcHRzLCBhcmdzbGVmdCA9IGdldG9wdC5nZXRvcHQoYXJncywgJ3BocVZ2bmRnOnM6eDp1OmM6bzpDU2k6JywgWydoZWxwJywgJ2V4Y2x1ZGU9JywKK0BAIC00NDIsNyArNDQ3LDcgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFzZXVybD0nLCAnZ3JvdXBmaWxlPScsICdjaGVja3N1bT0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJywgJ3ByZXR0eScsICdzcGxpdCcsICdvdXRwdXRkaXI9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9lcG9jaCcsICdjaGVja3RzJywgJ2RhdGFiYXNlJywgJ3VwZGF0ZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXAtc3ltbGlua3MnLCAncGtnbGlzdD0nXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tpcC1zeW1saW5rcycsICdwa2dsaXN0PScsICdkYnBhdGg9J10pCisgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIGU6CisgICAgICAgICBlcnJvcnByaW50KF8oJ09wdGlvbnMgRXJyb3I6ICVzLicpICUgZSkKKyAgICAgICAgIHVzYWdlKCkKK0BAIC01MTYsNiArNTIxLDggQEAKKyAgICAgICAgICAgICAgICAgY21kc1snc2tpcC1zeW1saW5rcyddID0gVHJ1ZQorICAgICAgICAgICAgIGVsaWYgYXJnIGluIFsnLWknLCAnLS1wa2dsaXN0J106CisgICAgICAgICAgICAgICAgIGNtZHNbJ3BrZ2xpc3QnXSA9IGEKKysgICAgICAgICAgICBlbGlmIGFyZyA9PSAnLS1kYnBhdGgnOgorKyAgICAgICAgICAgICAgICBjbWRzWydkYnBhdGgnXSA9IG9zLnBhdGgucmVhbHBhdGgoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgIGVycm9ycHJpbnQoXygnT3B0aW9ucyBFcnJvcjogJXMnKSAlIGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tcnBtNTQ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzIwMGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkdW1wTWV0YWRhdGEucHk6IEZpeCBmb3IgUlBNNSAtIDUuNC45IGludGVncmF0aW9uCisKK1JQTTUgbm8gbG9uZ2VyIGhhcyBhIHN3aXRjaCB0byBkaXNhYmxlIHNpZ25hdHVyZSB2YWxpZGF0aW9uLiAgKER1ZSB0byBzZWN1cml0eQordmFsaWRhdGlvbiBjb25jZXJucy4pCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisgIGNyZWF0ZXJlcG8gZG9lcyBub3Qgc3VwcG9ydCBSUE01IHVwc3RyZWFtCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weSBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkKKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA2LTA1IDEwOjEyOjU1LjY4Nzk2NDIyMiAtMDUwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA2LTA1IDEwOjQwOjA4LjE1NDA2MDYwMCAtMDUwMAorQEAgLTkyLDcgKzkyLDcgQEAKKyAgICAgICAgICAgICBmZG5vID0gcGFja2FnZSAjIGxldCdzIGFzc3VtZSB0aGlzIGlzIGFuIGZkbm8gYW5kIGdvIHdpdGggaXQgOikKKyAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICByYWlzZSBNREVycm9yLCAiRXJyb3Igb3BlbmluZyBmaWxlIgorLSAgICB0cy5zZXRWU0ZsYWdzKChycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKysgICAgdHMuc2V0VlNGbGFncygocnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKyAgICAgdHJ5OgorICAgICAgICAgaGRyID0gdHMuaGRyRnJvbUZkbm8oZmRubykKKyAgICAgZXhjZXB0IHJwbS5lcnJvcjoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZHVtcE1ldGFkYXRhLWRpc2FibGUtc2lnbmF0dXJlLXZhbGlkYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1NTMxZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2R1bXBNZXRhZGF0YTogZGlzYWJsZSBzaWduYXR1cmUgdmFsaWRhdGlvbgorCitNYWtlcyBpdCBwb3NzaWJsZSB0byB3b3JrIG9uIFJQTSByZXBvc2l0b3JpZXMgdGhhdCBjb250YWluIHNpZ25lZCBwYWNrYWdlcword2l0aG91dCB0aGUgbmVlZCBvZiBpbXBvcnRpbmcgdGhlIHB1YmxpYyBwYXJ0IG9mIHRoZSBzaWduaW5nIGtleSBpbnRvIHRoZSBSUE0KK2RhdGFiYXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya3VzIExlaHRvbmVuIDxtYXJrdXMubGVodG9uZW5AbGludXguaW50ZWwuY29tPgorLS0tCisgZHVtcE1ldGFkYXRhLnB5IHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZHVtcE1ldGFkYXRhLnB5IGIvZHVtcE1ldGFkYXRhLnB5CitpbmRleCBlNDBlOGFjLi5jYTZhODJkIDEwMDY0NAorLS0tIGEvZHVtcE1ldGFkYXRhLnB5CisrKysgYi9kdW1wTWV0YWRhdGEucHkKK0BAIC05Miw3ICs5Miw5IEBAIGRlZiByZXR1cm5IZHIodHMsIHBhY2thZ2UpOgorICAgICAgICAgICAgIGZkbm8gPSBwYWNrYWdlICMgbGV0J3MgYXNzdW1lIHRoaXMgaXMgYW4gZmRubyBhbmQgZ28gd2l0aCBpdCA6KQorICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIHJhaXNlIE1ERXJyb3IsICJFcnJvciBvcGVuaW5nIGZpbGUiCistICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRCkpCisrICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5SUE1WU0ZfTk9NRDV8cnBtLlJQTVZTRl9ORUVEUEFZTE9BRHwKKysgICAgICAgICAgICAgICAgICAgcnBtLlJQTVZTRl9OT0RTQXxycG0uUlBNVlNGX05PUlNBfAorKyAgICAgICAgICAgICAgICAgICBycG0uUlBNVlNGX05PRFNBSEVBREVSfHJwbS5SUE1WU0ZfTk9SU0FIRUFERVIpKQorICAgICB0cnk6CisgICAgICAgICBoZHIgPSB0cy5oZHJGcm9tRmRubyhmZG5vKQorICAgICBleGNlcHQgcnBtLmVycm9yOgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgyMDJhNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2ZpeC1uYXRpdmUtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDE2MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitEYXRlOiBKYW4gMzEsIDIwMTEKKworVGhlcmUgYXJlIHR3byBmaXhlczoKKyAgMS4gLW5hdGl2ZSBuZWVkcyB0byBjdXN0b21pemUgcHJlZml4CisgIDIuIG5lZWRzIHRvIGNoYW5nZSBweXRob24gcmVmZXJlbmNlIGluIGJpbmFyaWVzCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggYjJkMWEzMi4uM2MzNjM5ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTMsMjIgKzMsMjIgQEAgVkVSU0lPTiA9IDAuNC4xMQorIFNIRUxMID0gL2Jpbi9zaAorIHRvcF9zcmNkaXIgPSAuCisgc3JjZGlyID0gLgorLXByZWZpeCA9IC91c3IKKy1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQorLQorLWJpbmRpciA9ICR7ZXhlY19wcmVmaXh9L2JpbgorLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCistbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKy1kYXRhZGlyID0gJHtwcmVmaXh9L3NoYXJlCistc3lzY29uZmRpciA9ICR7cHJlZml4fS9ldGMKKy1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KKy1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgorLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgorLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbworK3ByZWZpeCA/PSAvdXNyCisrZXhlY19wcmVmaXggPz0gJHtwcmVmaXh9CisrCisrYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L2JpbgorK3NiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vc2JpbgorK2xpYmV4ZWNkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworK2RhdGFkaXIgPz0gJHtwcmVmaXh9L3NoYXJlCisrc3lzY29uZmRpciA/PSAke3ByZWZpeH0vZXRjCisrc2hhcmVkc3RhdGVkaXIgPz0gJHtwcmVmaXh9L2NvbQorK2xvY2Fsc3RhdGVkaXIgPz0gJHtwcmVmaXh9L3ZhcgorK2xpYmRpciA/PSAke2V4ZWNfcHJlZml4fS9saWIKKytpbmZvZGlyID89ICR7cHJlZml4fS9pbmZvCisgZG9jZGlyID0gCistaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCisraW5jbHVkZWRpciA/PSAke3ByZWZpeH0vaW5jbHVkZQorIG9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKKy1tYW5kaXIgPSAke3ByZWZpeH0vc2hhcmUvbWFuCisrbWFuZGlyID89ICR7cHJlZml4fS9zaGFyZS9tYW4KKyAKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS8kKFBBQ0tBR0UpCisgcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkKK2RpZmYgLS1naXQgYS9iaW4vTWFrZWZpbGUgYi9iaW4vTWFrZWZpbGUKK2luZGV4IDUyYzFmNTAuLmUzMDYxMGUgMTAwNjQ0CistLS0gYS9iaW4vTWFrZWZpbGUKKysrKyBiL2Jpbi9NYWtlZmlsZQorQEAgLTEsMjIgKzEsMjIgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyB0b3Bfc3JjZGlyID0gLi4KKyBzcmNkaXIgPSAuLi9iaW4KKy1wcmVmaXggPSAvdXNyCistZXhlY19wcmVmaXggPSAke3ByZWZpeH0KKy0KKy1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KKy1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2JpbgorLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCistZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQorLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCistc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCistbG9jYWxzdGF0ZWRpciA9ICR7cHJlZml4fS92YXIKKy1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKKy1pbmZvZGlyID0gJHtwcmVmaXh9L2luZm8KKytwcmVmaXggPz0gL3VzcgorK2V4ZWNfcHJlZml4ID89ICR7cHJlZml4fQorKworK2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9iaW4KKytzYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L3NiaW4KKytsaWJleGVjZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKytkYXRhZGlyID89ICR7cHJlZml4fS9zaGFyZQorK3N5c2NvbmZkaXIgPz0gJHtwcmVmaXh9L2V0YworK3NoYXJlZHN0YXRlZGlyID89ICR7cHJlZml4fS9jb20KKytsb2NhbHN0YXRlZGlyID89ICR7cHJlZml4fS92YXIKKytsaWJkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliCisraW5mb2RpciA/PSAke3ByZWZpeH0vaW5mbworIGRvY2RpciA9IAorLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQorK2luY2x1ZGVkaXIgPz0gJHtwcmVmaXh9L2luY2x1ZGUKKyBvbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCistbWFuZGlyID0gJHtwcmVmaXh9L21hbgorK21hbmRpciA/PSAke3ByZWZpeH0vbWFuCisgCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvJChQQUNLQUdFKQorIHBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpCitAQCAtNDAsOCArNDAsMTEgQEAgYWxsOiAkKHNyY2RpcikvJChQQUNLQUdFKQorIAorIAorIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycworLQkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvJChQQUNLQUdFKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUEFDS0FHRSkKKy0JJChJTlNUQUxMX0JJTikgJChzcmNkaXIpL21vZGlmeXJlcG8gJChERVNURElSKSQoYmluZGlyKS9tb2RpZnlyZXBvCisrCXNlZCAtZSAic3xAREFUQURJUkB8JChkYXRhZGlyKXwiICQoc3JjZGlyKS8kKFBBQ0tBR0UpID4gJChzcmNkaXIpLyQoUEFDS0FHRSkudG1wCisrCXNlZCAtZSAic3xAREFUQURJUkB8JChkYXRhZGlyKXwiICQoc3JjZGlyKS9tb2RpZnlyZXBvID4gJChzcmNkaXIpL21vZGlmeXJlcG8udG1wCisrCSQoSU5TVEFMTF9CSU4pICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnRtcCAkKERFU1RESVIpJChiaW5kaXIpLyQoUEFDS0FHRSkKKysJJChJTlNUQUxMX0JJTikgJChzcmNkaXIpL21vZGlmeXJlcG8udG1wICQoREVTVERJUikkKGJpbmRpcikvbW9kaWZ5cmVwbworKwlybSAtZiAkKHNyY2RpcikvJChQQUNLQUdFKS50bXAgJChzcmNkaXIpL21vZGlmeXJlcG8udG1wCisgCisgCisgdW5pbnN0YWxsOgorZGlmZiAtLWdpdCBhL2Jpbi9jcmVhdGVyZXBvIGIvYmluL2NyZWF0ZXJlcG8KK2luZGV4IGIwZGU1MTUuLmVhYWNiMzkgMTAwNzU1CistLS0gYS9iaW4vY3JlYXRlcmVwbworKysrIGIvYmluL2NyZWF0ZXJlcG8KK0BAIC0xLDIgKzEsMiBAQAorICMhL2Jpbi9zaAorLWV4ZWMgL3Vzci9zaGFyZS9jcmVhdGVyZXBvL2dlbnBrZ21ldGFkYXRhLnB5ICIkQCIKKytleGVjIEBEQVRBRElSQC9jcmVhdGVyZXBvL2dlbnBrZ21ldGFkYXRhLnB5ICIkQCIKK2RpZmYgLS1naXQgYS9iaW4vbW9kaWZ5cmVwbyBiL2Jpbi9tb2RpZnlyZXBvCitpbmRleCBjOTczMmQ4Li42ZjdjMWQ0IDEwMDc1NQorLS0tIGEvYmluL21vZGlmeXJlcG8KKysrKyBiL2Jpbi9tb2RpZnlyZXBvCitAQCAtMSwyICsxLDIgQEAKKyAjIS9iaW4vc2gKKy1leGVjIC91c3Ivc2hhcmUvY3JlYXRlcmVwby9tb2RpZnlyZXBvLnB5ICIkQCIKKytleGVjIEBEQVRBRElSQC9jcmVhdGVyZXBvL21vZGlmeXJlcG8ucHkgIiRAIgorZGlmZiAtLWdpdCBhL2RvY3MvTWFrZWZpbGUgYi9kb2NzL01ha2VmaWxlCitpbmRleCAwYTQxMTc5Li5lMTI4Yzg1IDEwMDY0NAorLS0tIGEvZG9jcy9NYWtlZmlsZQorKysrIGIvZG9jcy9NYWtlZmlsZQorQEAgLTEsMjIgKzEsMjIgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyB0b3Bfc3JjZGlyID0gLi4KKyBzcmNkaXIgPSAuLi9kb2NzCistcHJlZml4ID0gL3VzcgorLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CistCistYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCistc2JpbmRpciA9ICR7ZXhlY19wcmVmaXh9L3NiaW4KKy1saWJleGVjZGlyID0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKKy1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YworLXNoYXJlZHN0YXRlZGlyID0gJHtwcmVmaXh9L2NvbQorLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCistbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCistaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCisrcHJlZml4ID89IC91c3IKKytleGVjX3ByZWZpeCA/PSAke3ByZWZpeH0KKysKKytiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vYmluCisrc2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9zYmluCisrbGliZXhlY2RpciA/PSAke2V4ZWNfcHJlZml4fS9saWJleGVjCisrZGF0YWRpciA/PSAke3ByZWZpeH0vc2hhcmUKKytzeXNjb25mZGlyID89ICR7cHJlZml4fS9ldGMKKytzaGFyZWRzdGF0ZWRpciA/PSAke3ByZWZpeH0vY29tCisrbG9jYWxzdGF0ZWRpciA/PSAke3ByZWZpeH0vdmFyCisrbGliZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYgorK2luZm9kaXIgPz0gJHtwcmVmaXh9L2luZm8KKyBkb2NkaXIgPSAKKy1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKKytpbmNsdWRlZGlyID89ICR7cHJlZml4fS9pbmNsdWRlCisgb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQorLW1hbmRpciA9ICR7ZGF0YWRpcn0vbWFuCisrbWFuZGlyID89ICR7ZGF0YWRpcn0vbWFuCisgCisgcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvJChQQUNLQUdFKQorIHBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIwNWExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitBdXRob3I6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworUHl0aG9uIGludGVycHJldGVyIHNob3VsZCBiZSB1c2UgZnJvbSBQQVRIIC0gbmF0aXZlIHB5dGhvbiAtIGFuZCBub3QgdGhlIG9uZSBmcm9tCitob3N0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9nZW5wa2dtZXRhZGF0YS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZ2VucGtnbWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxNDowNS4yNzg2NDkzODQgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9nZW5wa2dtZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE0OjIyLjI5MDY0ODg4NiArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXQKKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyBwcmltYXJ5IGZ1bmN0aW9ucyBhbmQgZ2x1ZSBmb3IgZ2VuZXJhdGluZyB0aGUgcmVwb3NpdG9yeSBtZXRhZGF0YQorICMKKyAKK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9tb2RpZnlyZXBvLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9tb2RpZnlyZXBvLnB5CTIwMTItMDQtMTAgMTc6MTQ6MDkuMTA2NjQ5MjcyICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvbW9kaWZ5cmVwby5weQkyMDEyLTA0LTEwIDE3OjE0OjI3LjgxODY0ODcyNSArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorICMgJElkJAorICMKKyAjIFRoaXMgdG9vbHMgaXMgdXNlZCB0byBpbnNlcnQgYXJiaXRyYXJ5IG1ldGFkYXRhIGludG8gYW4gUlBNIHJlcG9zaXRvcnkuCitJbmRleDogY3JlYXRlcmVwby0wLjQuMTEvZHVtcE1ldGFkYXRhLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOToyMy44NzQ2NDAwNjggKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOTozNC41MDI2Mzk3NTYgKzAzMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uIC10CisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorICMgYmFzZSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIGR1bXBpbmcgb3V0IHBhY2thZ2UgTWV0YWRhdGEKKyAjCisgIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL3JlYWRNZXRhZGF0YS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvcmVhZE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6MTkuNjI2NjQwMTkzICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvcmVhZE1ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTk6NDAuMTk4NjM5NTkwICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdAorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcmVjb21tZW5kcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JlY29tbWVuZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1ZGUyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JlY29tbWVuZHMucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorY3JlYXRlcmVwbzogaW1wbGVtZW50IHJlY29tbWVuZHMgc3VwcG9ydAorCitSZWNvcmQgYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyByZXF1aXJlcyBlbnRyeSBpbiB0aGUgb3V0cHV0IG1ldGFkYXRhCitpZiBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIGlzIG1hcmtlZCB3aXRoIHRoZSBSUE1TRU5TRV9NSVNTSU5HT0sgZmxhZworKGluZGljYXRpbmcgaXQgaXMgYSByZWNvbW1lbmRhdGlvbiwgcmF0aGVyIHRoYW4gYSBoYXJkIGRlcGVuZGVuY3kpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9kdW1wTWV0YWRhdGEucHkgYi9kdW1wTWV0YWRhdGEucHkKK2luZGV4IDcwYmIyZDguLmU0MGU4YWMgMTAwNjQ0CistLS0gYS9kdW1wTWV0YWRhdGEucHkKKysrKyBiL2R1bXBNZXRhZGF0YS5weQorQEAgLTMxOSw2ICszMTksMjMgQEAgY2xhc3MgUnBtTWV0YURhdGE6CisgICAgICAgICAgICAgICAgICAgICByZXFzLmFwcGVuZCgwKQorICAgICAgICAgcmV0dXJuIHJlcXMKKyAKKysgICAgZGVmIF9jaGVja01pc3NpbmdPayhzZWxmLCBmbGFncyk6CisrICAgICAgICByZXFzPVtdCisrICAgICAgICBpZiBmbGFncyBpcyBOb25lOgorKyAgICAgICAgICAgIHJldHVybiByZXFzCisrCisrICAgICAgICBpZiB0eXBlKGZsYWdzKSBpcyBub3QgdHlwZXMuTGlzdFR5cGU6CisrICAgICAgICAgICAgZmxhZ3MgPSBbZmxhZ3NdCisrICAgICAgICBmb3IgZmxhZyBpbiBmbGFnczoKKysgICAgICAgICAgICBuZXdmbGFnID0gZmxhZworKyAgICAgICAgICAgIGlmIGZsYWcgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgICAgIG5ld2ZsYWcgPSBmbGFnICYgcnBtLlJQTVNFTlNFX01JU1NJTkdPSworKyAgICAgICAgICAgICAgICBpZiBuZXdmbGFnOgorKyAgICAgICAgICAgICAgICAgICAgcmVxcy5hcHBlbmQoMSkKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJlcXMuYXBwZW5kKDApCisrICAgICAgICByZXR1cm4gcmVxcworKworIAorICAgICBkZWYgX2NvcnJlY3RWZXJzaW9uKHNlbGYsIHZlcnMpOgorICAgICAgICAgcmV0dXJudmVycyA9IFtdCitAQCAtNTM3LDkgKzU1NCwxMCBAQCBjbGFzcyBScG1NZXRhRGF0YToKKyAgICAgICAgIHRtcGZsYWdzID0gc2VsZi5oZHJbcnBtLlJQTVRBR19SRVFVSVJFRkxBR1NdCisgICAgICAgICBmbGFncyA9IHNlbGYuX2NvcnJlY3RGbGFncyh0bXBmbGFncykKKyAgICAgICAgIHByZXJlcSA9IHNlbGYuX2NoZWNrUHJlUmVxKHRtcGZsYWdzKQorKyAgICAgICAgbWlzc2luZ29rID0gc2VsZi5fY2hlY2tNaXNzaW5nT2sodG1wZmxhZ3MpCisgICAgICAgICB2ZXIgPSBzZWxmLl9jb3JyZWN0VmVyc2lvbihzZWxmLmhkcltycG0uUlBNVEFHX1JFUVVJUkVWRVJTSU9OXSkKKyAgICAgICAgIGlmIG5hbWVzIGlzIG5vdCBOb25lOgorLSAgICAgICAgICAgIGxzdCA9IHppcChuYW1lcywgZmxhZ3MsIHZlciwgcHJlcmVxKQorKyAgICAgICAgICAgIGxzdCA9IHppcChuYW1lcywgZmxhZ3MsIHZlciwgcHJlcmVxLCBtaXNzaW5nb2spCisgICAgICAgICByZXR1cm4gc2VsZi5fdW5pcShsc3QpCisgICAgICAgICAKKyAgICAgZGVmIG9ic29sZXRlc0xpc3Qoc2VsZik6CitAQCAtNjkyLDcgKzcxMCw3IEBAIGRlZiBnZW5lcmF0ZVhNTChkb2MsIG5vZGUsIGZvcm1hdG5zLCBycG1PYmosIHN1bXR5cGUpOgorICAgICBkZXBzTGlzdCA9IHJwbU9iai5kZXBzTGlzdCgpCisgICAgIGlmIGxlbihkZXBzTGlzdCkgPiAwOgorICAgICAgICAgcnBjb25vZGUgPSBmb3JtYXQubmV3Q2hpbGQoZm9ybWF0bnMsICdyZXF1aXJlcycsIE5vbmUpICAgIAorLSAgICAgICAgZm9yIChuYW1lLCBmbGFncywgKGUsdixyKSwgcHJlcmVxKSBpbiBkZXBzTGlzdDoKKysgICAgICAgIGZvciAobmFtZSwgZmxhZ3MsIChlLHYsciksIHByZXJlcSwgbWlzc2luZ29rKSBpbiBkZXBzTGlzdDoKKyAgICAgICAgICAgICBlbnRyeSA9IHJwY29ub2RlLm5ld0NoaWxkKGZvcm1hdG5zLCAnZW50cnknLCBOb25lKQorICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ25hbWUnLCBuYW1lKQorICAgICAgICAgICAgIGlmIGZsYWdzICE9IDA6CitAQCAtNzExLDYgKzcyOSw4IEBAIGRlZiBnZW5lcmF0ZVhNTChkb2MsIG5vZGUsIGZvcm1hdG5zLCBycG1PYmosIHN1bXR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgncmVsJywgc3RyKHIpKQorICAgICAgICAgICAgIGlmIHByZXJlcSA9PSAxOgorICAgICAgICAgICAgICAgICBlbnRyeS5uZXdQcm9wKCdwcmUnLCBzdHIocHJlcmVxKSkKKysgICAgICAgICAgICBpZiBtaXNzaW5nb2s6CisrICAgICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ21pc3NpbmdvaycsICcxJykKKyAgICAgICAgIAorICAgICBmb3IgZmlsZSBpbiBycG1PYmoudXNlZnVsRmlsZXMoKToKKyAgICAgICAgIGZpbGVzID0gZm9ybWF0Lm5ld0NoaWxkKE5vbmUsICdmaWxlJywgTm9uZSkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weSBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JwbS1jcmVhdGVzb2x2ZWRiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1YjYxYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weQpAQCAtMCwwICsxLDY0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIGEgc29sdXRpb24gZGF0YWJhc2UgZm9yIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcnBtIHBhY2thZ2VzCisjIGJ1dCB0cmllcyB0byBiZSBlZmZpY2llbnQgYWJvdXQgdGhpcywgb25seSBkb2luZyBzbyB3aGVuIHRoZSBwYWNrYWdlcyBoYXZlIGNoYW5nZWQKKyMgaW4gc29tZSB3YXkuCisjCisjIEl0IGlzIGFzc3VtZWQgc29tZXRoaW5nIGFscmVhZHkgd2VudCB0aHJvdWdoIGFuZCByZW1vdmVkIGFsbCB0aGUgc29sdmVkYi5kb25lIHN0YW1wIGZpbGVzCisjIGluIGFkdmFuY2UuCisjCisjIEZpcnN0IGFyZ3VtZW50IC0gdGhlIHJwbSBiaW5hcnkgdG8gdXNlCisjIFN1YnNlcXVlbnQgYXJndW1lbnRzIC0gcGF0aHMgdG8gcHJvY2VzcyBzb2x1dGlvbiBkYXRhYmFzZXMgZm9yCisjCisKK2ltcG9ydCBzeXMsIG9zCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IHN0YXQKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2lmIGxlbihzeXMuYXJndikgPCAxOgorICAgIHByaW50KCJFcnJvciwgcnBtIGNvbW1hbmQgbm90IHNwZWNpZmllZCIpCisgICAgc3lzLmV4aXQoMSkKKworaWYgbGVuKHN5cy5hcmd2KSA8IDI6CisgICAgcHJpbnQoIkVycm9yLCBubyBwYXRocyBzcGVjaWZpZWQiKQorICAgIHN5cy5leGl0KDEpCisKK3BhdGhzID0gc3lzLmFyZ3ZbMjpdCisKK2ZvciBwYXRoIGluIHBhdGhzOgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIuZG9uZSIpOgorICAgICAgICBjb250aW51ZQorICAgIGRhdGEgPSAiIgorICAgIG1hbmlmZXN0ID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisgICAgICAgICAgICBpZiBmLnN0YXJ0c3dpdGgocGF0aCArICIvIiArICJzb2x2ZWRiIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgc3RyKG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0pCisgICAgICAgICAgICBtYW5pZmVzdC5hcHBlbmQoZikKKyAgICBjaGVja3N1bSA9IGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi9zb2x2ZWRiLmNoZWNrc3VtIikgYW5kIG9wZW4ocGF0aCArICIvc29sdmVkYi5jaGVja3N1bSIsICJyIikucmVhZCgpID09IGNoZWNrc3VtOgorICAgICAgICBvcGVuKHBhdGggKyAiL3NvbHZlZGIuZG9uZSIsICJ3IikKKyAgICAgICAgY29udGludWUKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIiKToKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJybSAtcmYgJXMiICUgKHBhdGggKyAiL3NvbHZlZGIiKSwgc2hlbGw9VHJ1ZSkKKyAgICBvcy5ta2RpcihwYXRoICsgIi9zb2x2ZWRiIikKKyAgICBtID0gb3BlbihwYXRoICsgIi9zb2x2ZWRiL21hbmlmZXN0IiwgInciKQorICAgIG0ud3JpdGUoIiMgRHluYW1pY2FsbHkgZ2VuZXJhdGVkIHNvbHZlIG1hbmlmZXN0XG4iKQorICAgIGZvciBmIGluIG1hbmlmZXN0OgorICAgICAgICBtLndyaXRlKGYgKyAiXG4iKQorICAgIG0uY2xvc2UoKQorCisgICAgY21kID0gc3lzLmFyZ3ZbMV0gKyAnIC1pIC0tcmVwbGFjZXBrZ3MgLS1yZXBsYWNlZmlsZXMgLS1vbGRwYWNrYWdlIC1EICJfZGJwYXRoICcgKyBwYXRoICsgJy9zb2x2ZWRiIiAtLWp1c3RkYiBcCisJCQktLW5vYWlkIC0tbm9kZXBzIC0tbm9vcmRlciAtLW5vc2NyaXB0cyAtLW5vdHJpZ2dlcnMgLS1ub3BhcmVudGRpcnMgLS1ub2xpbmt0b3MgLS1zdGF0cyBcCisJCQktLWlnbm9yZXNpemUgLS1ub3NpZ25hdHVyZSAtLW5vZGlnZXN0IC1EICJfX2RiaV90eG4gY3JlYXRlIG5vZnN5bmMiIFwKKwkJCScgKyBwYXRoICsgJy9zb2x2ZWRiL21hbmlmZXN0JworICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICBvcGVuKHBhdGggKyAiL3NvbHZlZGIuY2hlY2tzdW0iLCAidyIpLndyaXRlKGNoZWNrc3VtKQorICAgIG9wZW4ocGF0aCArICIvc29sdmVkYi5kb25lIiwgInciKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5ZWNmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvXzAuNC4xMS5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkNyZWF0ZXMgbWV0YWRhdGEgaW5kZXhlcyBmb3IgUlBNIHBhY2thZ2UgcmVwb3NpdG9yaWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2NyZWF0ZXJlcG8uYmFzZXVybC5vcmcvIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJWZXJzaW9ucyBhZnRlciAwLjkuKiB1c2UgWVVNLCBzbyB3ZSBob2xkIGF0IDAuNC4xMSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCIKKworREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gImxpYnhtbDItbmF0aXZlIHJwbS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAibGlieG1sMi1weXRob24iCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImh0dHA6Ly9jcmVhdGVyZXBvLmJhc2V1cmwub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLXNjcmlwdHMtc2hvdWxkLXVzZS1pbnRlcnByZXRlci1mcm9tLWVudi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWNvbW1lbmRzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyZWF0ZXJlcG8tZGJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JwbS1jcmVhdGVzb2x2ZWRiLnB5IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2U5Y2NmNGFiY2ZmZTNmNDlhZjA3OGM4MzYxMWVkYTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTczYWUxMWEwZGNkZThiZGUzNmQ5MDBiYzNmN2Y4ZjEwODNiYTc1MmM3MGE1YzYxYjcyZDFlMWU3NjA4ZjIxYiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgLWUgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JwbS1jcmVhdGVzb2x2ZWRiLnB5ICR7RH0ke2JpbmRpcn0vCit9CisKKyMgV3JhcCB0aGUgcHl0aG9uIHNjcmlwdCBzaW5jZSB0aGUgbmF0aXZlIHB5dGhvbiBpcworIyAke2JpbmRpcn0vcHl0aG9uLW5hdGl2ZS9weXRob24sIGFuZCB0aGUgIiMhIC91c3IvYmluL2VudiBweXRob24iIGNhbid0CisjIGZpbmQgaXQgc2luY2UgaXQgaXMgbm90IGluIFBBVEguCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCSMgTm90IGFsbCB0aGUgcHl0aG9uIHNjcmlwdHMgc2hvdWxkIGJlIHdyYXBwZWQgc2luY2Ugc29tZSBvZgorCSMgdGhlbSBhcmUgbW9kdWxlcyAoYmUgaW1wb3J0ZWQpLgorCWZvciBpIGluICR7RH0ke2RhdGFkaXJ9L2NyZWF0ZXJlcG8vZ2VucGtnbWV0YWRhdGEucHkgXAorCQkgJHtEfSR7ZGF0YWRpcn0vY3JlYXRlcmVwby9tb2RpZnlyZXBvLnB5IFwKKwkJICR7RH0ke2JpbmRpcn0vcnBtLWNyZWF0ZXNvbHZlZGIucHkgOyBkbworCQlzZWQgLWkgLWUgJ3N8XiMhLiovdXNyL2Jpbi9lbnYgcHl0aG9ufCMhIC91c3IvYmluL2VudiBuYXRpdmVweXRob258JyAkaQorCWRvbmUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2NyZWF0ZXJlcG8gXAorCQkJUlBNX1VTUkxJQlJQTT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vbG9jYWxlCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9jb25maWd1cmVfYWMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9jb25maWd1cmVfYWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiZDMwNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL2NvbmZpZ3VyZV9hYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6ICBQZW5kaW5nCisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjgxLDcgKzI4MSw3IEBAIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAKKyBDVVJMX0NIRUNLX0NPTVBJTEVSCisgQ1VSTF9TRVRfQ09NUElMRVJfQkFTSUNfT1BUUworLUNVUkxfU0VUX0NPTVBJTEVSX0RFQlVHX09QVFMKKytkbmwgQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUUworIENVUkxfU0VUX0NPTVBJTEVSX09QVElNSVpFX09QVFMKKyBDVVJMX1NFVF9DT01QSUxFUl9XQVJOSU5HX09QVFMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3BrZ2NvbmZpZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9wa2djb25maWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODc2OWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcGFja2FnaW5nXQorCitkaWZmIC1OdXJkIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYyBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMKKy0tLSBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMJMjAxMy0wMi0wNiAxMTo0NzoxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBjdXJsLTcuMjkuMC9jb25maWd1cmUuYWMJMjAxMy0wMi0xNiAxMjozMjoyMi4xMzIzMjc3NjQgKzAyMDAKK0BAIC0xODgzLDYgKzE4ODMsNyBAQAorICAgICAgICBBQ19TVUJTVChVU0VfR05VVExTLCBbMV0pCisgICAgICAgIEdOVVRMU19FTkFCTEVEPTEKKyAgICAgICAgVVNFX0dOVVRMUz0ieWVzIgorKyAgICAgICBHTlVUTFNfUkVRVUlSRUQ9ImdudXRscyIKKyAgICAgICAgY3VybF9zc2xfbXNnPSJlbmFibGVkIChHbnVUTFMpIgorICAgICAgICBdLAorICAgICAgICBbCitAQCAtMTk1Myw2ICsxOTU0LDggQEAKKyAgICBdKQorIGZpCisgCisrQUNfU1VCU1QoR05VVExTX1JFUVVJUkVEKQorKworIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sIGNoZWNrIGZvciBQb2xhclNTTAorIGRubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmIC1OdXJkIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4gY3VybC03LjI5LjAvbGliY3VybC5wYy5pbgorLS0tIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4JMjAxMi0xMi0xMiAwMDozMjoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBjdXJsLTcuMjkuMC9saWJjdXJsLnBjLmluCTIwMTMtMDItMTYgMTI6MzM6MjcuMDYzODQ0MzM3ICswMjAwCitAQCAtMzUsNSArMzUsNSBAQAorIERlc2NyaXB0aW9uOiBMaWJyYXJ5IHRvIHRyYW5zZmVyIGZpbGVzIHdpdGggZnRwLCBodHRwLCBldGMuCisgVmVyc2lvbjogQENVUkxWRVJTSU9OQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sY3VybAorLUxpYnMucHJpdmF0ZTogQExJQkNVUkxfTElCU0AKKytMaWJzLnByaXZhdGU6IC1sZGwgLWx6CisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQENQUEZMQUdfQ1VSTF9TVEFUSUNMSUJACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ0LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5MzMwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsXzcuNDQuMC5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSB0b29sIGFuZCBsaWJyYXJ5IGZvciBjbGllbnQtc2lkZSBVUkwgdHJhbnNmZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saXN0LmNnaT9saXN0PWN1cmwtdHJhY2tlciIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT03O21kNT0zYTM0OTQyZjRhZTNmYmYxYTMwMzE2MDcxNGU2NjRhYyIKKworU1JDX1VSSSA9ICJodHRwOi8vY3VybC5oYXh4LnNlL2Rvd25sb2FkL2N1cmwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAiCisKKyMgY3VybCBsaWtlcyB0byBzZXQgLWcwIGluIENGTEFHUywgc28gd2Ugc3RvcCBpdAorIyBmcm9tIG11Y2tpbmcgYXJvdW5kIHdpdGggZGVidWcgb3B0aW9ucworIworU1JDX1VSSSArPSAiIGZpbGU6Ly9jb25maWd1cmVfYWMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2Yjk1MmNhMDBlNTQ3M2IxNmExMWYwNWYwNmFhOGRhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZTI1NDFiYWU2NTgyYmI2OTdjMGZiYWU0OWUxZDNlNmZhZDVkMDVkNWFhODBkYmQ2ZjA3MmUwYTQ0MzQxODE0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnIG11bHRpbGliX2hlYWRlcgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJpcHY2IiwgImlwdjYiLCAiIiwgZCl9IGdudXRscyB6bGliIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiaXB2NiBzc2wgemxpYiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gImlwdjYgc3NsIHpsaWIiCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCitQQUNLQUdFQ09ORklHW3NzbF0gPSAiLS13aXRoLXNzbCAtLXdpdGgtcmFuZG9tPS9kZXYvdXJhbmRvbSwtLXdpdGhvdXQtc3NsLG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS13aXRoLWdudXRscywtLXdpdGhvdXQtZ251dGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4vLC0td2l0aG91dC16bGliLHpsaWIiCitQQUNLQUdFQ09ORklHW3J0bXBkdW1wXSA9ICItLXdpdGgtbGlicnRtcCwtLXdpdGhvdXQtbGlicnRtcCxydG1wZHVtcCIKK1BBQ0tBR0VDT05GSUdbbGlic3NoMl0gPSAiLS13aXRoLWxpYnNzaDIsLS13aXRob3V0LWxpYnNzaDIsbGlic3NoMiIKK1BBQ0tBR0VDT05GSUdbc21iXSA9ICItLWVuYWJsZS1zbWIsLS1kaXNhYmxlLXNtYiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtbGliaWRuIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jcnlwdG8tYXV0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxkYXAgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1sZGFwcyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWNhLWJ1bmRsZT0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IFwKKyIKKyMgc2VlIGh0dHBzOi8vbGlzdHMueW9jdG9wcm9qZWN0Lm9yZy9waXBlcm1haWwvcG9reS8yMDEzLURlY2VtYmVyLzAwOTQzNS5odG1sCisjIFdlIHNob3VsZCBpZGVhbGx5IGRyb3AgYWNfY3Zfc2l6ZW9mX29mZl90IGZyb20gc2l0ZSBmaWxlcyBidXQgdW50aWwgdGhlbgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICdhY19jdl9zaXplb2Zfb2ZmX3Q9OCcsICcnLCBkKX0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBjdXJsL2N1cmxidWlsZC5oCit9CisKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0iCisKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfbGliJHtCUE59ICs9ICJjYS1jZXJ0aWZpY2F0ZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YmZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYzY0MGZmOTM0MGYzNThhMDA4MzU4MTZkMGZlYTAzZDI3YTdiZTk3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAzMSBNYXIgMjAxNSAwMDo1Njo0NCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogbGV0IGxpYnNvX3RhcmdldCBkZXBlbmQgb24gYnRfcmVjCisKK0ZpeGVkIHBhcmFsbGVsIGlzc3VlOgorbGlidG9vbDogbGluazogYGJ0X3JlYy5sbycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QKK01ha2VmaWxlOjg2NzogcmVjaXBlIGZvciB0YXJnZXQgJ2xpYmRiLTYuMC5sYScgZmFpbGVkCittYWtlOiAqKiogW2xpYmRiLTYuMC5sYV0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGU0NTFmNzAuLjBhNDIzNzUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC04NjMsNyArODYzLDcgQEAgJChsaWJkYl92ZXJzaW9uKTogJChDX09CSlMpCisgCSQoTE4pIC1zICQobGliZGJfdmVyc2lvbikgJChsaWJkYikKKyAKKyAjIFNoYXJlZCBDIGxpYnJhcnkuCistJChsaWJzb190YXJnZXQpOiAkKENfT0JKUykKKyskKGxpYnNvX3RhcmdldCk6ICQoQ19PQkpTKSBidF9yZWNAb0AKKyAJJChTT0xJTkspICQoU09GTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKENfT0JKUykgXAorIAkJJChMSUJDU09fTElCUykKKyAJJChSTSkgJChsaWJkYikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGU4ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9hcm0tdGh1bWItbXV0ZXhfZGI1LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK09yaWdpbmFsIHBhdGNoIHN1Ym1pdHRlZCBieSBqYm93bGVyQG5zbHUyLWxpbnV4Lm9yZyBvbiAyMDA1LTExLTE3OgorCitkYjogZml4IHRodW1iIHVjbGliYyBvcGVyYXRpb24gaW4gNC4zLjI5CisgIC0gdWNsaWJjIHRodW1iIGJ1aWxkcyB3ZXJlIHVzaW5nIGxpYnB0aHJlYWQgdG8gaW1wbGVtZW50IG11dGV4ZXMsIHRoZQorICAtIHVjbGliYyB2ZXJzaW9uIHNlZW1zIHRvIGJlIGEgc3R1YiAoYXQgbGVhc3Qgb24gdGh1bWIpLiAgVGhpcyBjb21taXQKKyAgLSBmaXhlcyB0aGUgQVJNL2djYy1hc3NlbWJseSBtdXRleCBpbXBsZW1lbnRhdGlvbiBzbyB0aGF0IGl0IGhhcyB0aHVtYgorICAtIHN1cHBvcnQgYW5kIHRoZSByZXN1bHRhbnQgZGI0IHdvcmtzICh0ZXN0ZWQgb24gTEUgVGh1bWIgdWNsaWJjKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitBdXRob3I6IGpib3dsZXJAbnNsdTItbGludXgub3JnCisKKy0tLSBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oLm9yaWcJMjAxMS0wMS0wNSAxOToyMTo0Mi4xODE4MDUzNjYgLTA2MDAKKysrKyBkYi01LjEuMTkvc3JjL2RiaW5jL211dGV4X2ludC5oCTIwMTEtMDEtMDUgMTk6MjQ6NTMuMTQxODUzMTE3IC0wNjAwCitAQCAtNDc0LDYgKzQ3NCwyNSBAQAorIAorICNpZmRlZiBMT0FEX0FDVFVBTF9NVVRFWF9DT0RFCisgLyogZ2NjL2FybTogMCBpcyBjbGVhciwgMSBpcyBzZXQuICovCisrI2lmIGRlZmluZWQgX190aHVtYl9fCisrI2RlZmluZQlNVVRFWF9TRVQodHNsKSAoewkJCQkJCVwKKysJaW50IF9fciwgX19wOwkJCQkJCQlcCisrCV9fYXNtX18gdm9sYXRpbGUoCQkJCQkJXAorKwkJIi5hbGlnbiAyXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiYnggICAgIHBjXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJub3Bcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIi5hcm1cblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkic3dwYiAgICUwLCAlMiwgWyUzXVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJlb3IgICAgJTAsICUwLCAjMVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIm9yciAgICAlMSwgcGMsICMxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiYnggICAgICUxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSIuZm9yY2VfdGh1bWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgOiAiPSZyIiAoX19yKSwgIj1yIiAoX19wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgOiAiciIgKDEpLCAiciIgKHRzbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgICAgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlfX3IgJiAxOwkJCQkJCQlcCisrfSkKKysjZWxzZQorICNkZWZpbmUJTVVURVhfU0VUKHRzbCkgKHsJCQkJCQlcCisgCWludCBfX3I7CQkJCQkJCVwKKyAJX19hc21fXyB2b2xhdGlsZSgJCQkJCQlcCitAQCAtNDg0LDYgKzUwMyw3IEBACisgCSAgICApOwkJCQkJCQkJXAorIAlfX3IgJiAxOwkJCQkJCQlcCisgfSkKKysjZW5kaWYKKyAKKyAjZGVmaW5lCU1VVEVYX1VOU0VUKHRzbCkJKCoodm9sYXRpbGUgdHNsX3QgKikodHNsKSA9IDApCisgI2RlZmluZQlNVVRFWF9JTklUKHRzbCkgICAgICAgICAoTVVURVhfVU5TRVQodHNsKSwgMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3ZjFlMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1dpdGggaGlnaGVyIHBhcmFsZWxpc20gaXQgc29tZXRpbWVzIGZhaWxzIHdpdGg6CitsaWJ0b29sOiBsaW5rOiBgdXRpbF9sb2cubG8nIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0CittYWtlOiAqKiogW2RiX3JlcGxpY2F0ZV0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gZGlzdC5vcmlnL01ha2VmaWxlLmluCTIwMTItMDUtMTEgMTk6NTc6NDguMDAwMDAwMDAwICswMjAwCisrKysgZGlzdC9NYWtlZmlsZS5pbgkyMDEzLTEwLTMxIDE4OjE3OjExLjg3NTUzMjUyMiArMDEwMAorQEAgLTEwMzQsNyArMTAzNCw3IEBACisgCSAgICBkYl9yZWNvdmVyQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikgJChMSUJTKQorIAkkKFBPU1RMSU5LKSAkQAorIAorLWRiX3JlcGxpY2F0ZTogZGJfcmVwbGljYXRlQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikKKytkYl9yZXBsaWNhdGU6IGRiX3JlcGxpY2F0ZUBvQCB1dGlsX2xvZ0BvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpCisgCSQoQ0NMSU5LKSAtbyAkQCAkKExERkxBR1MpIFwKKyAJICAgIGRiX3JlcGxpY2F0ZUBvQCB1dGlsX2xvZ0BvQCB1dGlsX3NpZ0BvQCAkKERFRl9MSUIpICQoTElCUykKKyAJJChQT1NUTElOSykgJEAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiODE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCkBAIC0wLDAgKzEsMTE2IEBACisjIFZlcnNpb24gNSBvZiB0aGUgQmVya2VsZXkgREIgZnJvbSBTbGVlcHljYXQKKyMKKyMgQXQgcHJlc2VudCB0aGlzIHBhY2thZ2Ugb25seSBpbnN0YWxscyB0aGUgREIgY29kZQorIyBpdHNlbGYgKHNoYXJlZCBsaWJyYXJpZXMsIC5hIGluIHRoZSBkZXYgcGFja2FnZSksCisjIGRvY3VtZW50YXRpb24gYW5kIGhlYWRlcnMuCisjCisjIFRoZSBoZWFkZXJzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhvc2UgYXMgdjMKKyMgb2YgdGhlIERCLCBvbmx5IG9uZSB2ZXJzaW9uIGNhbiBiZSB1c2VkICpmb3IgZGV2KgorIyBhdCBvbmNlIC0gREIzIGFuZCBEQjUgY2FuIGJvdGggYmUgaW5zdGFsbGVkIG9uIHRoZQorIyBzYW1lIHN5c3RlbSBhdCB0aGUgc2FtZSB0aW1lIGlmIHJlYWxseSBuZWNlc3NhcnkuCitTRUNUSU9OID0gImxpYnMiCitTVU1NQVJZID0gIkJlcmtlbGV5IERhdGFiYXNlIHY1IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2hub2xvZ3kvcHJvZHVjdHMvYmVya2VsZXktZGIvZGIvaW5kZXguaHRtbCIKK0xJQ0VOU0UgPSAiU2xlZXB5Y2F0IgorVklSVFVBTF9OQU1FID89ICJ2aXJ0dWFsL2RiIgorUkNPTkZMSUNUU18ke1BOfSA9ICJkYjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgorU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI5OTQ1NDU2NGQ1YjQ0Nzk3NTA1NjcwMzFkNjZmZTI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUwYTk5MmQ3NDA3MDk4OTJlODFmOWQ5M2YwNmRhZjMwNWNmNzNmYjgxYjU0NWFmZTcyNDc4MDQzMTcyYzM2MjgiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0xJQ0VOU0U7bWQ1PWVkMTE1OGUzMTQzN2Y0Zjg3Y2RkNGFiMmI4NjEzOTU1IgorCitpbmhlcml0IGF1dG90b29scworCisjIFB1dCB2aXJ0dWFsL2RiIGluIGFueSBhcHByb3ByaWF0ZSBwcm92aWRlciBvZiBhCisjIHJlbGF0aW9uYWwgZGF0YWJhc2UsIHVzZSBpdCBhcyBhIGRlcGVuZGVuY3kgaW4KKyMgcGxhY2Ugb2YgYSBzcGVjaWZpYyBkYiBhbmQgdXNlOgorIworIyBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYgorIworIyB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZGIgaW4gdGhlIGJ1aWxkIChkaXN0cm8pIC5jb25mCitQUk9WSURFUyArPSAiJHtWSVJUVUFMX05BTUV9IgorCisjIGJpdGJha2UgaXNuJ3QgcXVpdGUgY2xldmVyIGVub3VnaCB0byBkZWFsIHdpdGggc2xlZXB5Y2F0LAorIyB0aGUgZGlzdHJpYnV0aW9uIHNpdHMgaW4gdGhlIGV4cGVjdGVkIGRpcmVjdG9yeSwgYnV0IGFsbAorIyB0aGUgYnVpbGRzIG11c3Qgb2NjdXIgZnJvbSBhIHN1Yi1kaXJlY3RvcnkuICBUaGUgZm9sbG93aW5nCisjIHBlcnN1YWRlcyBiaXRiYWtlIHRvIGdvIHRvIHRoZSByaWdodCBwbGFjZQorUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2Rpc3QiCitCID0gIiR7V09SS0RJUn0vZGItJHtQVn0vYnVpbGRfdW5peCIKK1NQRFhfUyA9ICIke1dPUktESVJ9L2RiLSR7UFZ9IgorCisjIFRoZSBleGVjdXRhYmxlcyBnbyBpbiBhIHNlcGFyYXRlIHBhY2thZ2UgLSB0eXBpY2FsbHkgdGhlcmUKKyMgaXMgbm8gbmVlZCB0byBpbnN0YWxsIHRoZXNlIHVubGVzcyBkb2luZyByZWFsIGRhdGFiYXNlCisjIG1hbmFnZW1lbnQgb24gdGhlIHN5c3RlbS4KK2luaGVyaXQgbGliX3BhY2thZ2UKKworUEFDS0FHRVMgPSsgIiR7UE59LWN4eCIKK0ZJTEVTXyR7UE59LWN4eCA9ICIke2xpYmRpcn0vKmN4eCpzbyIKKworCisjIFRoZSBkZXYgcGFja2FnZSBoYXMgdGhlIC5zbyBsaW5rIChhcyBpbiBkYjMpIGFuZCB0aGUgLmEncyAtCisjIGl0IGlzIHRoZXJlZm9yZSBpbmNvbXBhdGlibGUgKGNhbm5vdCBiZSBpbnN0YWxsZWQgYXQgdGhlCisjIHNhbWUgdGltZSkgYXMgdGhlIGRiMyBwYWNrYWdlCisjIHNvcnQgb3V0IHRoZSAuc28gc2luY2UgdGhleSBkbyB2ZXJzaW9uIHByaW9yIHRvIHRoZSAuc28KK1NPTElCUyA9ICItNSouc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmRiLnNvICR7bGliZGlyfS9saWJkYl9jeHguc28iCisKKyNjb25maWd1cmF0aW9uIC0gc2V0IGluIGxvY2FsLmNvbmYgdG8gb3ZlcnJpZGUKKyMgQWxsIHRoZSAtLWRpc2FibGUtKiBvcHRpb25zIHJlcGxhY2UgLS1lbmFibGUtc21hbGxidWlsZCwgd2hpY2ggYnJlYWtzIGEgYnVuY2ggb2Ygc3R1ZmYgKGVnLiBwb3N0Zml4KQorREI1X0NPTkZJRyA/PSAiLS1lbmFibGUtb19kaXJlY3QgLS1kaXNhYmxlLWNyeXB0b2dyYXBoeSAtLWRpc2FibGUtcXVldWUgLS1kaXNhYmxlLXJlcGxpY2F0aW9uIC0tZGlzYWJsZS12ZXJpZnkgLS1kaXNhYmxlLWNvbXBhdDE4NSAtLWRpc2FibGUtc3FsIgorCitFWFRSQV9PRUNPTkYgPSAiJHtEQjVfQ09ORklHfSAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtY3h4IC0td2l0aC1zeXNyb290IgorCisjIE92ZXJyaWRlIHRoZSBNVVRFWCBzZXR0aW5nIGhlcmUsIHRoZSBQT1NJWCBsaWJyYXJ5IGlzCisjIHRoZSBkZWZhdWx0IC0gIlBPU0lYL3B0aHJlYWRzL2xpYnJhcnkiLgorIyBEb24ndCBpZ25vcmUgdGhlIG5pY2UgU1dQIGluc3RydWN0aW9uIG9uIHRoZSBBUk06CisjIFRoZXNlIGVuYWJsZSB0aGUgQVJNIGFzc2VtYmxlciBtdXRleCBjb2RlLCB0aGlzIHdvbid0CisjIHdvcmsgd2l0aCB0aHVtYiBjb21waWxhdGlvbi4uLgorQVJNX01VVEVYID0gIi0td2l0aC1tdXRleD1BUk0vZ2NjLWFzc2VtYmx5IgorTVVURVggPSAiIgorTVVURVhfYXJtID0gIiR7QVJNX01VVEVYfSIKK01VVEVYX2FybWViID0gIiR7QVJNX01VVEVYfSIKK0VYVFJBX09FQ09ORiArPSAiJHtNVVRFWH0iCisKKyMgQ2FuY2VsIHRoZSBzaXRlIHN0dWZmIC0gaXQncyBzZXQgZm9yIGRiMyBhbmQgZGVzdHJveXMgdGhlCisjIGNvbmZpZ3VyZS4KK0NPTkZJR19TSVRFID0gIiIKK2RvX2NvbmZpZ3VyZSgpIHsKKwlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtTfQorCWV4cG9ydCBTVFJJUD0idHJ1ZSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyBcCisJCSR7Qn0vbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9LyR7aW5jbHVkZWRpcn0vZGI1MQorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjUxLy4KKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNTEvLgorCWxuIC1zIGRiNTEvZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaAorCWxuIC1zIGRiNTEvZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oCisKKwkjIFRoZSBkb2NzIGVuZCB1cCBpbiAvdXNyL2RvY3MgLSBub3QgcmlnaHQuCisJaWYgdGVzdCAtZCAiJHtEfS8ke3ByZWZpeH0vZG9jcyIKKwl0aGVuCisJCW1rZGlyIC1wICIke0R9LyR7ZGF0YWRpcn0iCisJCXRlc3QgISAtZCAiJHtEfS8ke2RvY2Rpcn0iIHx8IHJtIC1yZiAiJHtEfS8ke2RvY2Rpcn0iCisJCW12ICIke0R9LyR7cHJlZml4fS9kb2NzIiAiJHtEfS8ke2RvY2Rpcn0iCisJZmkKKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDlkZjYyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKQEAgLTAsMCArMSwxMTggQEAKKyMgVmVyc2lvbiA2IG9mIHRoZSBCZXJrZWxleSBEQiBmcm9tIE9yYWNsZSAoZm9ybWVybHkgU2xlZXB5Y2F0KQorIworIyBBdCBwcmVzZW50IHRoaXMgcGFja2FnZSBvbmx5IGluc3RhbGxzIHRoZSBEQiBjb2RlCisjIGl0c2VsZiAoc2hhcmVkIGxpYnJhcmllcywgLmEgaW4gdGhlIGRldiBwYWNrYWdlKSwKKyMgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycy4KKyMKKyMgVGhlIGhlYWRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aG9zZSBhcyB2MworIyBvZiB0aGUgREIsIG9ubHkgb25lIHZlcnNpb24gY2FuIGJlIHVzZWQgKmZvciBkZXYqCisjIGF0IG9uY2UgLSBEQjMgYW5kIERCNiBjYW4gYm90aCBiZSBpbnN0YWxsZWQgb24gdGhlCisjIHNhbWUgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUgaWYgcmVhbGx5IG5lY2Vzc2FyeS4KK1NFQ1RJT04gPSAibGlicyIKK1NVTU1BUlkgPSAiQmVya2VsZXkgRGF0YWJhc2UgdjYiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5vbG9neS9wcm9kdWN0cy9iZXJrZWxleS1kYi9kYi9pbmRleC5odG1sIgorTElDRU5TRSA9ICJBR1BMLTMuMCIKK1ZJUlRVQUxfTkFNRSA/PSAidmlydHVhbC9kYiIKK1JDT05GTElDVFNfJHtQTn0gPSAiZGIzIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJVcGRhdGluZyB0byA2LjEueCByZXF1aXJlcyBhbHNvIHVwZGF0aW5nIHJwbSB0byA1LjQuMTUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vYmVya2VsZXktZGIvZGItJHtQVn0udGFyLmd6IgorU1JDX1VSSSArPSAiZmlsZTovL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2g7cGF0Y2hkaXI9Li4gXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWQyOGViODZhZDMyMDNiNTQyMjg0NGRiMTc5YzU4NWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjA4ZTRiMWNmMzkwZTliZjU0YzBlZjAwYzViZDljYTc2ZDM2ZTIyNjFiOWY0ZDMzZDU0NTE2ZjNmNmEyMGZkMiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9MWVjOGIwYjE3Y2MzMTUxM2ZlMzVhYjEwNzE2Zjg0OTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgUHV0IHZpcnR1YWwvZGIgaW4gYW55IGFwcHJvcHJpYXRlIHByb3ZpZGVyIG9mIGEKKyMgcmVsYXRpb25hbCBkYXRhYmFzZSwgdXNlIGl0IGFzIGEgZGVwZW5kZW5jeSBpbgorIyBwbGFjZSBvZiBhIHNwZWNpZmljIGRiIGFuZCB1c2U6CisjCisjIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiCisjCisjIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBkYiBpbiB0aGUgYnVpbGQgKGRpc3RybykgLmNvbmYKK1BST1ZJREVTICs9ICIke1ZJUlRVQUxfTkFNRX0iCisKKyMgYml0YmFrZSBpc24ndCBxdWl0ZSBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCBzbGVlcHljYXQsCisjIHRoZSBkaXN0cmlidXRpb24gc2l0cyBpbiB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5LCBidXQgYWxsCisjIHRoZSBidWlsZHMgbXVzdCBvY2N1ciBmcm9tIGEgc3ViLWRpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcKKyMgcGVyc3VhZGVzIGJpdGJha2UgdG8gZ28gdG8gdGhlIHJpZ2h0IHBsYWNlCitTID0gIiR7V09SS0RJUn0vZGItJHtQVn0vZGlzdCIKK0IgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9idWlsZF91bml4IgorU1BEWF9TID0gIiR7V09SS0RJUn0vZGItJHtQVn0iCisKKyMgVGhlIGV4ZWN1dGFibGVzIGdvIGluIGEgc2VwYXJhdGUgcGFja2FnZSAtIHR5cGljYWxseSB0aGVyZQorIyBpcyBubyBuZWVkIHRvIGluc3RhbGwgdGhlc2UgdW5sZXNzIGRvaW5nIHJlYWwgZGF0YWJhc2UKKyMgbWFuYWdlbWVudCBvbiB0aGUgc3lzdGVtLgoraW5oZXJpdCBsaWJfcGFja2FnZQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3h4IgorRklMRVNfJHtQTn0tY3h4ID0gIiR7bGliZGlyfS8qY3h4KnNvIgorCisKKyMgVGhlIGRldiBwYWNrYWdlIGhhcyB0aGUgLnNvIGxpbmsgKGFzIGluIGRiMykgYW5kIHRoZSAuYSdzIC0KKyMgaXQgaXMgdGhlcmVmb3JlIGluY29tcGF0aWJsZSAoY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUKKyMgc2FtZSB0aW1lKSBhcyB0aGUgZGIzIHBhY2thZ2UKKyMgc29ydCBvdXQgdGhlIC5zbyBzaW5jZSB0aGV5IGRvIHZlcnNpb24gcHJpb3IgdG8gdGhlIC5zbworU09MSUJTID0gIi02Ki5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliZGIuc28gJHtsaWJkaXJ9L2xpYmRiX2N4eC5zbyIKKworI2NvbmZpZ3VyYXRpb24gLSBzZXQgaW4gbG9jYWwuY29uZiB0byBvdmVycmlkZQorIyBBbGwgdGhlIC0tZGlzYWJsZS0qIG9wdGlvbnMgcmVwbGFjZSAtLWVuYWJsZS1zbWFsbGJ1aWxkLCB3aGljaCBicmVha3MgYSBidW5jaCBvZiBzdHVmZiAoZWcuIHBvc3RmaXgpCitEQjZfQ09ORklHID89ICItLWVuYWJsZS1vX2RpcmVjdCAtLWRpc2FibGUtY3J5cHRvZ3JhcGh5IC0tZGlzYWJsZS1xdWV1ZSAtLWRpc2FibGUtcmVwbGljYXRpb24gLS1kaXNhYmxlLXZlcmlmeSAtLWRpc2FibGUtY29tcGF0MTg1IC0tZGlzYWJsZS1zcWwiCisKK0VYVFJBX09FQ09ORiA9ICIke0RCNl9DT05GSUd9IC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1jeHggLS13aXRoLXN5c3Jvb3QiCisKKyMgT3ZlcnJpZGUgdGhlIE1VVEVYIHNldHRpbmcgaGVyZSwgdGhlIFBPU0lYIGxpYnJhcnkgaXMKKyMgdGhlIGRlZmF1bHQgLSAiUE9TSVgvcHRocmVhZHMvbGlicmFyeSIuCisjIERvbid0IGlnbm9yZSB0aGUgbmljZSBTV1AgaW5zdHJ1Y3Rpb24gb24gdGhlIEFSTToKKyMgVGhlc2UgZW5hYmxlIHRoZSBBUk0gYXNzZW1ibGVyIG11dGV4IGNvZGUKK0FSTV9NVVRFWCA9ICItLXdpdGgtbXV0ZXg9QVJNL2djYy1hc3NlbWJseSIKK01VVEVYID0gIiIKK01VVEVYX2FybSA9ICIke0FSTV9NVVRFWH0iCitNVVRFWF9hcm1lYiA9ICIke0FSTV9NVVRFWH0iCitFWFRSQV9PRUNPTkYgKz0gIiR7TVVURVh9IgorCisjIENhbmNlbCB0aGUgc2l0ZSBzdHVmZiAtIGl0J3Mgc2V0IGZvciBkYjMgYW5kIGRlc3Ryb3lzIHRoZQorIyBjb25maWd1cmUuCitDT05GSUdfU0lURSA9ICIiCitkb19jb25maWd1cmUoKSB7CisJZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICR7U30KKwlleHBvcnQgU1RSSVA9InRydWUiCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICdzfGhhcmRjb2RlX2ludG9fbGlicz15ZXN8aGFyZGNvZGVfaW50b19saWJzPW5vfCcgXAorCQkke0J9L2xpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAKKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MC8uCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwLy4KKwlsbiAtcyBkYjYwL2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmgKKwlsbiAtcyBkYjYwL2RiX2N4eC5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaAorCisJIyBUaGUgZG9jcyBlbmQgdXAgaW4gL3Vzci9kb2NzIC0gbm90IHJpZ2h0LgorCWlmIHRlc3QgLWQgIiR7RH0vJHtwcmVmaXh9L2RvY3MiCisJdGhlbgorCQlta2RpciAtcCAiJHtEfS8ke2RhdGFkaXJ9IgorCQl0ZXN0ICEgLWQgIiR7RH0vJHtkb2NkaXJ9IiB8fCBybSAtcmYgIiR7RH0vJHtkb2NkaXJ9IgorCQltdiAiJHtEfS8ke3ByZWZpeH0vZG9jcyIgIiR7RH0vJHtkb2NkaXJ9IgorCWZpCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke1BOfS1jeHggPSAiZGV2LXNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC41LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjY1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2RlYmlhbnV0aWxzL2RlYmlhbnV0aWxzXzQuNS4xLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgc3BlY2lmaWMgdG8gRGViaWFuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiAmIFNNQUlMX0dQTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWYwMWE1MjAzZDUwNTEyZmM0ODMwYjQzMzJiNjk2YTlmIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg3NTI0NTE4Y2Q1ODMzYTZhNGY3MDA3YjVkMWJkNWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTUzMWMyM2UwMTA1ZmUwMWNmYTkyODQ1N2E4MzQzYTFlOTQ3ZTI2MjFiM2NkNGQwNWY0ZTk2NTYwMjBjNjNiNyIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgLWUgJ3M6dGVtcGZpbGUuMSB3aGljaC4xOndoaWNoLjE6ZycgJHtTfS9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAjIERlYmlhbiBwbGFjZXMgc29tZSB1dGlscyBpbnRvICR7YmFzZV9iaW5kaXJ9IGFzIGRvZXMgYnVzeWJveAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICBmb3IgYXBwIGluIHJ1bi1wYXJ0cyB0ZW1wZmlsZTsgZG8KKyAgICAgICAgICAgIG12ICR7RH0ke2JpbmRpcn0vJGFwcCAke0R9JHtiYXNlX2JpbmRpcn0vJGFwcAorICAgICAgICBkb25lCisgICAgZmkKK30KKworIyBOb3RlIHRoYXQgd2UgcGFja2FnZSB0aGUgdXBkYXRlLWFsdGVybmF0aXZlcyBuYW1lLgorIworUEFDS0FHRVMgPSsgIiR7UE59LXJ1bi1wYXJ0cyIKK0ZJTEVTXyR7UE59LXJ1bi1wYXJ0cyA9ICIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMuZGViaWFudXRpbHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1ydW4tcGFydHMiCisKKworQUxURVJOQVRJVkVfUFJJT1JJVFk9IjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImFkZC1zaGVsbCBpbnN0YWxsa2VybmVsIHJlbW92ZS1zaGVsbCBzYXZlbG9nIHRlbXBmaWxlIHdoaWNoIgorQUxURVJOQVRJVkVfJHtQTn0tcnVuLXBhcnRzID0gInJ1bi1wYXJ0cyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2FkZC1zaGVsbF09IiR7c2JpbmRpcn0vYWRkLXNoZWxsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2luc3RhbGxrZXJuZWxdPSIke3NiaW5kaXJ9L2luc3RhbGxrZXJuZWwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVtb3ZlLXNoZWxsXT0iJHtzYmluZGlyfS9yZW1vdmUtc2hlbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVuLXBhcnRzXT0iJHtiYXNlX2JpbmRpcn0vcnVuLXBhcnRzIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NhdmVsb2ddPSIke2JpbmRpcn0vc2F2ZWxvZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt0ZW1wZmlsZV09IiR7YmFzZV9iaW5kaXJ9L3RlbXBmaWxlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3doaWNoXT0iJHtiaW5kaXJ9L3doaWNoIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2VuY2hhbnQvZW5jaGFudF8xLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2E0NzYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJFbmNoYW50IFNwZWxsIGNoZWNrZXIgQVBJIExpYnJhcnkiCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFiaXNvdXJjZS5jb20vcHJvamVjdHMvZW5jaGFudC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5hYmlzb3VyY2UuY29tL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1FbmNoYW50IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1kZmNiYWJmOTEzMWRjOWE5NWZlYmVmNjc1M2EyOTU4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5jaGFudC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PThkODgxY2FhMWQzNzUyMzU2N2UxZDhmNzI2Njc1YTE4IgorCitERVBFTkRTID0gImFzcGVsbCBnbGliLTIuMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYWJpc291cmNlLmNvbS9kb3dubG9hZHMvZW5jaGFudC8ke1BWfS9lbmNoYW50LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImRlMTEwMTFhZmY4MDFkYzYxMDQyODI4MDQxZmI1OWM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmYWM5ZTdiZTdlOTQyNGIyYzU1NzBkOGFmZmU1NjhkYjM5Zjc1NzJjMTBlZDQ4ZDRlMTNjZGRmMDNmNzA5N2YiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtYXNwZWxsLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKwkJLS1lbmFibGUtYXNwZWxsIGJyX2N2X2JpbnJlbG9jPW5vIFwKKwkJIgorCitleHBvcnQgQ1hYRkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9IC1sc3RkYysrICIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS8qJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKi5zbyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qe1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyouYSIKKworUkRFUEVORFNfJHtQTn0gKz0gImFzcGVsbCIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3B0ZXN0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3B0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjM2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorQWRkIGluc3RhbGwtcHRlc3QgcnVsZXMuCisKK1NpZ25lZC1vZmYtYnk6IEpvc2VwIFB1aWdkZW1vbnQgPGpvc2VwLnB1aWdkZW1vbnRAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXVyIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMS0wOC0xNiAxMDoxMzoxMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDQtMTIgMTg6MDI6MTYuNDczNzE1ODczICswMjAwCitAQCAtMzEsMyArMzEsOCBAQAorIAlkPWBkYXRlICcrJWQvJW0vJVknYDsgXAorIAlzZWQgJ3N8L1wqQERJU1RfREFURUBcKi98IiciJCRkIicifCcgJChzcmNkaXIpL3NyYy92ZXJzaW9uLmMgPiBcCisgCQkkKGRpc3RkaXIpL3NyYy92ZXJzaW9uLmMKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlAZm9yIHN1YmRpciBpbiAkKFNVQkRJUlMpOyBkbyBcCisrCQkkKE1BS0UpIC1DICQkc3ViZGlyIERFU1RESVI9JChERVNURElSKS8kJHN1YmRpciAkQDsgXAorKwlkb25lCitkaWZmIC11ciBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTEtMTEtMTEgMTk6Mzk6NDIuMDAwMDAwMDAwICswMTAwCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA0LTEyIDE4OjMwOjU3LjA2NjMwMTAzNyArMDIwMAorQEAgLTEzMiw0ICsxMzIsMTQgQEAKKyBkdGRlbF9MREFERCA9IC4uL3NyYy9saWJnZGJtLmxhIC4uL2NvbXBhdC9saWJnZGJtX2NvbXBhdC5sYQorIGRfY3JlYXRfY2VfTERBREQgPSAuLi9zcmMvbGliZ2RibS5sYSAuLi9jb21wYXQvbGliZ2RibV9jb21wYXQubGEKKyAKKytidWlsZHRlc3RzOiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKKyAKKytpbnN0YWxsLXB0ZXN0OiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTVUlURSkKKysJQCQoSU5TVEFMTCkgLWQgJChERVNURElSKQorKwlAZm9yIGZpbGUgaW4gJF47IGRvIFwKKysJCWlmIFsgLXggLmxpYnMvJCRmaWxlIF07IHRoZW4gXAorKwkJCSQoSU5TVEFMTF9QUk9HUkFNKSAubGlicy8kJGZpbGUgJChERVNURElSKS8kJGZpbGU7IFwKKysJCWVsc2UgXAorKwkJCSQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGUgJChERVNURElSKSA7IFwKKysJCWZpIFwKKysJZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjE1ZGE4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gdGhlIGdtZGIgdGVzdCBzdWl0ZQorCitjZCB0ZXN0cworCisuL3Rlc3RzdWl0ZSBBVVRPVEVTVF9QQVRIPSRQV0QgYWJzX2J1aWxkZGlyPSRQV0QgQ09NUEFUPTEgfCBzZWQgJ3MvXlteMC05XSpcKFswLTldXCtcKTogXCguKlwpXChva1x8cGFzc1x8c2tpcHBlZFx8ZmFpbFx8RkFJTEVEXClcKC4qXCkkL1wzOiBcMiBcNC87cy8gXCsvIC9nO3MvXm9rL1BBU1MvO3MvXnNraXBwZWQvU0tJUC87cy9eZmFpbC9GQUlMLztzL15GQUlMRUQvRkFJTC8nCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9sZGZsYWdzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NiNDNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitPYmV5IExERkxBR1MKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2xkIHZlcnNpb25dCisKKy0tLSBnZGJtLTEuOC4zLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCitAQCAtMTU2LDEyICsxNTYsMTIgQEAgaW5zdGFsbC1jb21wYXQ6CisKKyBsaWJnZGJtLmxhOiAkKExPQkpTKSBnZGJtLmgKKwlybSAtZiBsaWJnZGJtLmxhCistCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gbGliZ2RibS5sYSAtcnBhdGggJChsaWJkaXIpIFwKKysJJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vIGxpYmdkYm0ubGEgLXJwYXRoICQobGliZGlyKSBcCisJCS12ZXJzaW9uLWluZm8gJChTSExJQl9WRVIpICQoTE9CSlMpCisKKyBsaWJnZGJtX2NvbXBhdC5sYTogJChDX0xPQkpTKSBnZGJtLmgKKwlybSAtZiBsaWJnZGJtX2NvbXBhdC5sYQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vIGxpYmdkYm1fY29tcGF0LmxhIC1ycGF0aCAkKGxpYmRpcikgXAorKwkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gbGliZ2RibV9jb21wYXQubGEgLXJwYXRoICQobGliZGlyKSBcCisJCS12ZXJzaW9uLWluZm8gJChTSExJQl9WRVIpICQoQ19MT0JKUykKKworIGdkYm0uaDoJZ2RibS5wcm90byBnZGJtZXJybm8uaCBnZGJtLnByb3RvMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGlidG9vbC1tb2RlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGlidG9vbC1tb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWQwNGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9saWJ0b29sLW1vZGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBnZGJtLTEuOC4zL01ha2VmaWxlLmluLm9yaWcJMjAwNi0wMi0xNiAxNToxNzoyNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCTIwMDYtMDItMTYgMTU6MTg6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikgJChERVNURElSKSQobWFuM2RpcikgXAorIAkJJChERVNURElSKSQoaW5mb2RpcikKKy0JJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisrCSQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAtYyBsaWJnZGJtLmxhICQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibS5sYQorIAkkKElOU1RBTExfREFUQSkgZ2RibS5oIFwKKyAJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2dkYm0uaAorIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dkYm0uMyBcCitAQCAtMTQyLDcgKzE0Miw3IEBACisgaW5zdGFsbC1jb21wYXQ6CisgCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikKKy0JJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm1fY29tcGF0LmxhIFwKKysJJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpIC1jIGxpYmdkYm1fY29tcGF0LmxhIFwKKyAJCSQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKyAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kYm0uaCBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9kYm0uaApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjkxNDVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw2MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKKy0tLSBnZGJtLTEuOC4zL01ha2VmaWxlLmlufm1ha2VmaWxlCisrKysgZ2RibS0xLjguMy9NYWtlZmlsZS5pbgorQEAgLTIyLDYgKzIyLDcgQEAKKyBURVhJMkRWSSA9IHRleGkyZHZpCisgCisgREVGUyA9CisrREVTVERJUiA9CisgCisgIyBXaGVyZSB0aGUgc3lzdGVtIFtuXWRibSByb3V0aW5lcyBhcmUuLi4KKyBMSUJTID0gQExJQlNAIC1sYworQEAgLTEyNywyNiArMTI4LDI2IEBACisgcHJvZ3M6ICQoUFJPR1MpCisgCisgaW5zdGFsbDogbGliZ2RibS5sYSBnZGJtLmggZ2RibS5pbmZvCistCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9ST09UKSQobGliZGlyKSBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpICQoSU5TVEFMTF9ST09UKSQobWFuM2RpcikgXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmZvZGlyKQorLQkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKElOU1RBTExfUk9PVCkkKGxpYmRpcikvbGliZ2RibS5sYQorLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSBnZGJtLmggXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9nZGJtLmgKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL2dkYm0uMyBcCistCQkkKElOU1RBTExfUk9PVCkkKG1hbjNkaXIpL2dkYm0uMworLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSAkKHNyY2RpcikvZ2RibS5pbmZvIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5mb2RpcikvZ2RibS5pbmZvCisrCSQoc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKGxpYmRpcikgXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikgJChERVNURElSKSQobWFuM2RpcikgXAorKwkJJChERVNURElSKSQoaW5mb2RpcikKKysJJChMSUJUT09MKSAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisrCSQoSU5TVEFMTF9EQVRBKSBnZGJtLmggXAorKwkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZ2RibS5oCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ2RibS4zIFwKKysJCSQoREVTVERJUikkKG1hbjNkaXIpL2dkYm0uMworKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2dkYm0uaW5mbyBcCisrCQkkKERFU1RESVIpJChpbmZvZGlyKS9nZGJtLmluZm8KKyAKKyBpbnN0YWxsLWNvbXBhdDoKKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikKKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKQorIAkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibV9jb21wYXQubGEgXAorLQkJJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpL2xpYmdkYm1fY29tcGF0LmxhCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9kYm0uaCBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL2RibS5oCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9uZGJtLmggXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS9uZGJtLmgKKysJCSQoREVTVERJUikkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9kYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9kYm0uaAorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL25kYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9uZGJtLmgKKyAKKyAjbGliZ2RibS5hOiAkKE9CSlMpIGdkYm0uaAorICMJcm0gLWYgbGliZ2RibS5hCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGY4YzViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS4xMS5iYgpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI0MWRhMWI5ZmU0MmU2NDJjYmIyYzI0ZDVlMGM0ZDI0IgorCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzJjODMyNjgwY2YwOTk5Y2FlZGJlNWIyNjVjOGMxYmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGQ5MTJmNDRmMDVkMGIxNWE0YTVkOTZhNzZmODUyZTkwNWQwNTFiYjg4MDIyZmNkZmQ5OGI0M2JlMDkzZTNjMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIGxpYl9wYWNrYWdlIHB0ZXN0CisKKyMgTmVlZGVkIGZvciBkYm0gcHl0aG9uIG1vZHVsZQorRVhUUkFfT0VDT05GID0gIi1lbmFibGUtbGliZ2RibS1jb21wYXQiCisKKyMgU3RvcCBwcmVzZW5jZSBvZiBkYm0vbmJkbSBvbiB0aGUgaG9zdCBjb250YW1pbmF0aW5nIGJ1aWxkcworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2xpYl9uZGJtX21haW49bm8gYWNfY3ZfbGliX2RibV9tYWluPW5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCisgICAgIyB0aGVzZSBoZWFkZXJzCisgICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9nZGJtCisgICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKKyAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZGlmZnV0aWxzIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgLUMgdGVzdHMgYnVpbGR0ZXN0cworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY29tcGF0IFwKKyAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWNvbXBhdCA9ICIke2xpYmRpcn0vbGliZ2RibV9jb21wYXQke1NPTElCU30gXAorICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjguMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjAxYjZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJLZXkvdmFsdWUgZGF0YWJhc2UgbGlicmFyeSB3aXRoIGV4dGVuc2libGUgaGFzaGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGJtLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhlMjBlZWNlMjE0ZGY4ZWY5NTNlZDU4NTc4NjIxNTAiCisKK1BSID0gInI0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2RibS9nZGJtLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wtbW9kZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQxYjFkNWMwMjQ1YjFjMDBhZmY5MmRhNzUxZTlhYTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2MzNDAzMzhhMmUyOGI0MDA1OGFiOWViNTM1NGEyMWQ1M2Y4OGExNTgyZWEyMWJhMGJiMTg1YzM3YTI4MWRjOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2dkYm0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9kYm0uaCAke0R9JHtpbmNsdWRlZGlyfS8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9uZGJtLmggJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgIyBDcmVhdGUgYSBzeW1saW5rIHRvIG5kYm0uaCBhbmQgZ2RibS5oIGluIGluY2x1ZGUvZ2RibSB0byBsZXQgb3RoZXIgcGFja2FnZXMgdG8gZmluZAorICAgICMgdGhlc2UgaGVhZGVycworICAgIGxuIC1zZiAuLi9uZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vbmRibS5oCisgICAgbG4gLXNmIC4uL2dkYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9nZGJtLmgKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9kaXNhYmxlLXN0ZGMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZGlzYWJsZS1zdGRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZWNiMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZGlzYWJsZS1zdGRjLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGF0Y2ggd2FzIHJlbW92ZWQgaW4gZjE4MWM2Y2U4YjMgd2hlbiBnbXAgNC4yLjEgd2FzIG1pc3Rha2VubHkKK2Ryb3BwZWQuCisKK1Vwc3RyZWFtIGlzIG5vdCBpbnRlcmVzdGVkIGluIHBhdGNoZXMgZm9yIGFuY2llbnQgdmVyc2lvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworIyAiZXh0ZXJuIGlubGluZSIgaW4gdHJhZGl0aW9uYWwgZ2NjIG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSAKKyMgaW5saW5lZCB3aGVyZXZlciBpdCdzIHNlZW4sIHdoaWxlIGluIEM5OSwgImV4dGVybiBpbmxpbmUiIG1lYW5zIHRoYXQgaQorIyB0aGUgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgaW5saW5lZCB3aGVyZSB0aGUgaW5saW5lIGRlZmluaXRpb24gaXMgCisjIHNlZW4gd2hpbGUgaW4gb3RoZXIgcGxhY2VzIGl0J3Mgbm90IGlubGluZWQ6CisjIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwNi0xMS9tc2cwMDAwNi5odG1sCisjCisjIGdtcCBjaGVja3MgIi0tc3RkPWdudTk5IiB0byB1c2UgQzk5IGNvbnZlbnRpb24gaG93ZXZlciBpdCBpbnRlcm5hbGx5IAorIyBkZWZpbmVzIHNvbWUgImV4dGVybiBpbmxpbmUiIGZ1bmN0aW9ucyBpbiBnbXAuaCwgd2hpY2ggaXMgaW5jbHVkZWQKKyMgYnkgbWFpbmx5IC5jIGZpbGVzIGFuZCBmaW5hbGx5IGxlYWQgYSBmbG9vZCBvZiByZWRlZmluaXRpb24gZnVuY3Rpb24KKyMgZXJyb3JzIHdoZW4gbGlua2luZyBvYmplY3RzIHRvZ2V0aGVyLgorIworIyBTbyBkaXNhYmxlIEM5OS9BTlNJIGRldGVjdGlvbiB0byBzdGljayB0byB0cmFuZGl0aW9uYWwgZ2NjIGJlaGF2aW9yCisjCisjIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wOC0xMworIworIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MispCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDQ1MGNjOTIuLmFhYjBiNTkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTE4NjksOSArMTg2OSw3IEBAIEFDX1NVQlNUKERFRk5fTE9OR19MT05HX0xJTUIpCisgCisgIyBUaGUgQyBjb21waWxlciBhbmQgcHJlcHJvY2Vzc29yLCBwdXQgaW50byBBTlNJIG1vZGUgaWYgcG9zc2libGUuCisgQUNfUFJPR19DQworLUFDX1BST0dfQ0NfU1REQworIEFDX1BST0dfQ1BQCistR01QX0hfQU5TSQorIAorIAorICMgVGhlIEMgY29tcGlsZXIgb24gdGhlIGJ1aWxkIHN5c3RlbSwgYW5kIGFzc29jaWF0ZWQgdGVzdHMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9nbXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWVkMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDU2IEBACithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjoyMjQwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IE1ha2VmaWxlLmFtOjI4OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAyCisKKworVGhpcyBwYXRjaCB3YXMgcmVtb3ZlZCBpbiBmMTgxYzZjZThiMyB3aGVuIGdtcCA0LjIuMSB3YXMgbWlzdGFrZW5seQorZHJvcHBlZC4KKworVXBzdHJlYW0gaXMgbm90IGludGVyZXN0ZWQgaW4gcGF0Y2hlcyBmb3IgYW5jaWVudCB2ZXJzaW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKK0luZGV4OiBnbXAtNC4yLjEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTQuMi4xLm9yaWcvY29uZmlndXJlLmluCisrKysgZ21wLTQuMi4xL2NvbmZpZ3VyZS5pbgorQEAgLTY3LDcgKzY3LDcgQEAgZG5sCisgZG5sICBOb3RlIHRoYXQgdGhlcmUncyBhIGNvcHkgb2YgdGhlc2Ugb3B0aW9ucyBpbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLmFtLAorIGRubCAgc28gdXBkYXRlIHRoZXJlIHRvbyBpZiBjaGFuZ2luZyBhbnl0aGluZy4KKyBkbmwKKy1BTV9JTklUX0FVVE9NQUtFKFsxLjggZ251IG5vLWRlcGVuZGVuY2llcyAkKHRvcF9idWlsZGRpcikvYW5zaTJrbnJdKQorK0FNX0lOSVRfQVVUT01BS0UoWzEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzXSkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oOmNvbmZpZy5pbikKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKK0BAIC0yMDIyLDkgKzIwMjIsNiBAQCBmaQorIGVjaG8gIiAgICAgIE1QTl9QQVRIPVwiJHBhdGhcIiIKKyAKKyAKKy0jIEF1dG9tYWtlIGFuc2kya25yIHN1cHBvcnQuCistQU1fQ19QUk9UT1RZUEVTCistCisgR01QX1BST0dfQVIKKyBHTVBfUFJPR19OTQorIAorSW5kZXg6IGdtcC00LjIuMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC00LjIuMS5vcmlnL01ha2VmaWxlLmFtCisrKysgZ21wLTQuMi4xL01ha2VmaWxlLmFtCitAQCAtMjcsNyArMjcsNyBAQAorICMgTWFrZWZpbGVzIGluIHN1YmRpcmVjdG9yaWVzLCBidXQgaGVyZSB3ZSBtdXN0IG9taXQgaXQgc28gYXV0b21ha2UgZ2l2ZXMKKyAjIHRoZSBhY3R1YWwgYW5zaTJrbnIgYnVpbGQgcnVsZSwgbm90ICJjZCAkKHRvcF9idWlsZGRpcikgJiYgbWFrZSBhbnNpMmtuciIuCisgIworLUFVVE9NQUtFX09QVElPTlMgPSAxLjggZ251IG5vLWRlcGVuZGVuY2llcyBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAxLjggZ251IG5vLWRlcGVuZGVuY2llcworIAorIAorICMgTGlidG9vbCAtdmVyc2lvbi1pbmZvIGZvciBsaWJnbXAubGEgYW5kIGxpYm1wLmxhLiAgU2VlICJWZXJzaW9uaW5nIiBpbiB0aGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hbWQ2NC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hbWQ2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjRkMTJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FtZDY0LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ21wLTUuMC4zL2xvbmdsb25nLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNS4wLjMub3JpZy9sb25nbG9uZy5oCisrKysgZ21wLTUuMC4zL2xvbmdsb25nLmgKK0BAIC05OTQsOCArOTk0LDEwIEBAIGV4dGVybiBVV3R5cGUgX19NUE4odWRpdl9xcm5uZCkgX1BST1RPICgKKyAgICBjb3VudCBpcyBvbmx5IGFuIGludC4gKi8KKyAjZGVmaW5lIGNvdW50X3RyYWlsaW5nX3plcm9zKGNvdW50LCB4KQkJCQkJXAorICAgZG8gewkJCQkJCQkJCVwKKysgICAgVURJdHlwZSBfX2NidG1wOwkJCQkJCQlcCisgICAgIEFTU0VSVCAoKHgpICE9IDApOwkJCQkJCQlcCistICAgIF9fYXNtX18gKCJic2ZxICUxLCVxMCIgOiAiPXIiIChjb3VudCkgOiAicm0iICgoVURJdHlwZSkoeCkpKTsJXAorKyAgICBfX2FzbV9fICgiYnNmcSAlMSwlMCIgOiAiPXIiIChfX2NidG1wKSA6ICJybSIgKChVREl0eXBlKSh4KSkpOwlcCisrICAgIChjb3VudCkgPSBfX2NidG1wOwkJCQkJCQlcCisgICB9IHdoaWxlICgwKQorICNlbmRpZiAvKiB4ODZfNjQgKi8KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTEzODZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2FwcGVuZF91c2VyX3Byb3ZpZGVkX2ZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitBcHBlbmQgdGhlIHVzZXIgcHJvdmlkZWQgZmxhZ3MgdG8gdGhlIGF1dG8tZGV0ZWN0ZWQgb25lcy4KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogZ21wLTUuMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC01LjEuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTAyLTExIDE1OjA1OjQ0LjkyNTIwMjQwMyArMDIwMAorKysrIGdtcC01LjEuMS9jb25maWd1cmUuYWMJMjAxNC0wMi0xMSAxNToxOTowMy45MTg1MTEzOTggKzAyMDAKK0BAIC0xNzQ1LDggKzE3NDUsMTIgQEAKKyBFT0YKKyAKKyAKKy10ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CistdGVzdF9DUFBGTEFHUz0ke0NQUEZMQUdTK3NldH0KKyt0ZXN0X0NGTEFHUz0KKyt0ZXN0X0NQUEZMQUdTPQorKworK3VzZXJfQ0ZMQUdTPSRDRkxBR1MKKyt1c2VyX0NQUEZMQUdTPSRDUFBGTEFHUworK3VzZXJfQ1hYRkxBR1M9JENYWEZMQUdTCisgCisgZm9yIGFiaSBpbiAkYWJpbGlzdDsgZG8KKyAgIGFiaV9sYXN0PSIkYWJpIgorQEAgLTIxNzUsNyArMjE3OSw3IEBACisgd2FudF9jeHg9bm8KKyBBQ19QUk9HX0NYWAorIGlmIHRlc3QgJGVuYWJsZV9jeHggIT0gbm87IHRoZW4KKy0gIHRlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CisrICB0ZXN0X0NYWEZMQUdTPQorIAorICAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQVNfTUVTU0FHRV9MT0dfRkQoKQorICAgY3h4ZmxhZ3NfYWNfcHJvZ19jeHg9JENYWEZMQUdTCitAQCAtMjIwMiw3ICsyMjA2LDcgQEAKKyAgICMgQXV0b21ha2UgaW5jbHVkZXMgJENQUEZMQUdTIGluIGEgQysrIGNvbXBpbGUsIHNvIHdlIGRvIHRoZSBzYW1lIGhlcmUuCisgICAjCisgICBmb3IgY3h4ZmxhZ3NfY2hvaWNlIGluICRjeHhmbGFnc19saXN0OyBkbworLSAgICBldmFsIENYWEZMQUdTPVwiXCRjeHhmbGFnc18kY3h4ZmxhZ3NfY2hvaWNlXCIKKysgICAgZXZhbCBDWFhGTEFHUz1cIlwkY3h4ZmxhZ3NfJGN4eGZsYWdzX2Nob2ljZSAkdXNlcl9DWFhGTEFHU1wiCisgICAgIEdNUF9QUk9HX0NYWF9XT1JLUygkQ1hYICRDUFBGTEFHUyAkQ1hYRkxBR1MsCisgICAgICAgW3dhbnRfY3h4PXllcworICAgICAgIGJyZWFrXSkKK0BAIC0yMjkyLDYgKzIyOTYsOCBAQAorICMgIGRvbmUKKyBmaQorIAorK0NGTEFHUz0iJENGTEFHUyAkdXNlcl9DRkxBR1MiCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAkdXNlcl9DUFBGTEFHUyIKKyAKKyBjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgRGVjaWRlZDoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9jb25maWd1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OWRhM2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCB0byBhcHBseSB0byBnbXAtNS4xLjAKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworLS0tCisgYWNpbmNsdWRlLm00IHwgMzIgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyBjb25maWd1cmUuYWMgfCAyNiArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9hY2luY2x1ZGUubTQgYi9hY2luY2x1ZGUubTQKK2luZGV4IDIyNzcxMmEuLjE5OWFhNmYgMTAwNjQ0CistLS0gYS9hY2luY2x1ZGUubTQKKysrKyBiL2FjaW5jbHVkZS5tNAorQEAgLTQwLDI5ICs0MCwyOSBAQCBkbmwgICAgYV9vdXQuZXhlIC0gT3BlblZNUyBERUMgQyBjYWxsZWQgdmlhIEdOViB3cmFwcGVyIChnbnYuc291cmNlZm9yZ2UubmV0KQorIGRubCAgICBjb25mdGVzdC5leGUgLSB2YXJpb3VzIERPUyBjb21waWxlcnMKKyAKKyAKKy1kZWZpbmUoSUE2NF9QQVRURVJOLAorK2RlZmluZShbSUE2NF9QQVRURVJOXSwKKyBbW2lhNjQqLSotKiB8IGl0YW5pdW0tKi0qIHwgaXRhbml1bTItKi0qXV0pCisgCisgZG5sICBOZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIG1hdGNoIG02ODExLCBtNjgxMiwgbTY4aGMxMSBhbmQgbTY4aGMxMiwgYWxsCisgZG5sICBvZiB3aGljaCBjb25maWcuc3ViIGFjY2VwdHMuICAoVGhvdWdoIG5vbmUgb2Ygd2hpY2ggYXJlIGxpa2VseSB0byB3b3JrCisgZG5sICB3aXRoIEdNUC4pCisgZG5sCistZGVmaW5lKE02OEtfUEFUVEVSTiwKKytkZWZpbmUoW002OEtfUEFUVEVSTl0sCisgW1ttNjhrLSotKiB8IG02OFswLTldWzAtOV1bMC05XS0qLSpdXSkKKyAKKy1kZWZpbmUoUE9XRVJQQzY0X1BBVFRFUk4sCisrZGVmaW5lKFtQT1dFUlBDNjRfUEFUVEVSTl0sCisgW1twb3dlcnBjNjQtKi0qIHwgcG93ZXJwYzY0bGUtKi0qIHwgcG93ZXJwYzYyMC0qLSogfCBwb3dlcnBjNjMwLSotKiB8IHBvd2VycGM5NzAtKi0qIHwgcG93ZXJbMy05XS0qLSpdXSkKKyAKKy1kZWZpbmUoUzM5MF9QQVRURVJOLAorK2RlZmluZShbUzM5MF9QQVRURVJOXSwKKyBbW3MzOTAtKi0qIHwgejkwMGVzYS0qLSogfCB6OTkwZXNhLSotKiB8IHo5ZXNhLSotKiB8IHoxMGVzYS0qLSogfCB6MTk2ZXNhLSotKl1dKQorIAorLWRlZmluZShTMzkwWF9QQVRURVJOLAorK2RlZmluZShbUzM5MFhfUEFUVEVSTl0sCisgW1tzMzkweC0qLSogfCB6OTAwLSotKiB8IHo5OTAtKi0qIHwgejktKi0qIHwgejEwLSotKiB8IHoxOTYtKi0qXV0pCisgCistZGVmaW5lKFg4Nl9QQVRURVJOLAorK2RlZmluZShbWDg2X1BBVFRFUk5dLAorIFtbaT84NiotKi0qIHwga1s1LThdKi0qLSogfCBwZW50aXVtKi0qLSogfCBhdGhsb24tKi0qIHwgdmlhYzMqLSotKiB8IGdlb2RlKi0qLSogfCBhdG9tLSotKl1dKQorIAorLWRlZmluZShYODZfNjRfUEFUVEVSTiwKKytkZWZpbmUoW1g4Nl82NF9QQVRURVJOXSwKKyBbW2F0aGxvbjY0LSotKiB8IGs4LSotKiB8IGsxMC0qLSogfCBib2JjYXQtKi0qIHwgamFndWFyLSotKiB8IGJ1bGxkb3plci0qLSogfCBwaWxlZHJpdmVyLSotKiB8IHN0ZWFtcm9sbGVyLSotKiB8IGV4Y2F2YXRvci0qLSogfCBwZW50aXVtNC0qLSogfCBhdG9tLSotKiB8IGNvcmUyLSotKiB8IGNvcmVpKi0qLSogfCB4ODZfNjQtKi0qIHwgbmFuby0qLSpdXSkKKyAKKyBkbmwgIEdNUF9GQVRfU1VGRklYKERTVFZBUiwgRElSRUNUT1JZKQorQEAgLTgwLDcgKzgwLDcgQEAgZG5sICAgICAgeDg2ICAgICAgICAgLT4gIHg4NgorIGRubCAgICAgIHg4Ni9rNiAgICAgIC0+ICBrNgorIGRubCAgICAgIHg4Ni9rNi9tbXggIC0+ICBrNl9tbXgKKyAKKy1kZWZpbmUoR01QX0ZBVF9TVUZGSVgsCisrZGVmaW5lKFtHTVBfRkFUX1NVRkZJWF0sCisgW1skMT1gZWNobyAkMiB8IHNlZCAtZSAnL1wvL3M6XlteL10qLzo6JyAtZSAnczpbXFwvXTpfOmcnYF1dKQorIAorIAorQEAgLTg5LDcgKzg5LDcgQEAgZG5sICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sICBFbWl0IGNvZGUgdG8gcmVtb3ZlIGFueSBvY2N1cnJlbmNlIG9mIElURU0gZnJvbSAkTElTVFZBUi4gIElURU0gY2FuIGJlIGEKKyBkbmwgIHNoZWxsIGV4cHJlc3Npb24gbGlrZSAkZm9vIGlmIGRlc2lyZWQuCisgCistZGVmaW5lKEdNUF9SRU1PVkVfRlJPTV9MSVNULAorK2RlZmluZShbR01QX1JFTU9WRV9GUk9NX0xJU1RdLAorIFtyZW1vdmVfZnJvbV9saXN0X3RtcD0KKyBmb3IgcmVtb3ZlX2Zyb21fbGlzdF9pIGluICRbXVskMV07IGRvCisgICBpZiB0ZXN0ICRyZW1vdmVfZnJvbV9saXN0X2kgPSBbJDJdOyB0aGVuIDo7CitAQCAtMTA1LDEyICsxMDUsMTIgQEAgZG5sICBHTVBfU1RSSVBfUEFUSChzdWJkaXIpCisgZG5sICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG5sICBTdHJpcCBlbnRyaWVzICovc3ViZGlyIGZyb20gJHBhdGggYW5kICRmYXRfcGF0aC4KKyAKKy1kZWZpbmUoR01QX1NUUklQX1BBVEgsCisrZGVmaW5lKFtHTVBfU1RSSVBfUEFUSF0sCisgW0dNUF9TVFJJUF9QQVRIX1ZBUihwYXRoLCBbJDFdKQorIEdNUF9TVFJJUF9QQVRIX1ZBUihmYXRfcGF0aCwgWyQxXSkKKyBdKQorIAorLWRlZmluZShHTVBfU1RSSVBfUEFUSF9WQVIsCisrZGVmaW5lKFtHTVBfU1RSSVBfUEFUSF9WQVJdLAorIFt0bXBfcGF0aD0KKyBmb3IgaSBpbiAkW11bJDFdOyBkbworICAgY2FzZSAkaSBpbgorQEAgLTEzMSw3ICsxMzEsNyBAQCBkbmwKKyBkbmwgIER1bW15IHZhbHVlIGZvciBHTVBfTElNQl9CSVRTIGlzIGVub3VnaAorIGRubCAgZm9yIGFsbCBjdXJyZW50IGNvbmZpZ3VyZS10aW1lIHVzZXMgb2YgZ21wLmguCisgCistZGVmaW5lKEdNUF9JTkNMVURFX0dNUF9ILAorK2RlZmluZShbR01QX0lOQ0xVREVfR01QX0hdLAorIFtbI2RlZmluZSBfX0dNUF9XSVRISU5fQ09ORklHVVJFIDEgICAvKiBpZ25vcmUgdGVtcGxhdGUgc3R1ZmYgKi8KKyAjZGVmaW5lIEdNUF9OQUlMX0JJVFMgJEdNUF9OQUlMX0JJVFMKKyAjZGVmaW5lIEdNUF9MSU1CX0JJVFMgMTIzCitAQCAtMTQ2LDcgKzE0Niw3IEBAIGRubCAgRXhwYW5kIGF0IGF1dG9jb25mIHRpbWUgdG8gdGhlIHZhbHVlIG9mIGEgIiNkZWZpbmUgTkFNRSIgZnJvbSB0aGUgZ2l2ZW4KKyBkbmwgIEZJTEUuICBUaGUgcmVnZXhwcyBoZXJlIGFyZW4ndCB2ZXJ5IHJ1Z2dlZCwgYnV0IGFyZSBlbm91Z2ggZm9yIGdtcC4KKyBkbmwgIC9kZXYvbnVsbCBhcyBhIHBhcmFtZXRlciBwcmV2ZW50cyBhIGhhbmcgaWYgJDIgaXMgYWNjaWRlbnRhbGx5IG9taXR0ZWQuCisgCistZGVmaW5lKEdNUF9IRUFERVJfR0VUVkFMLAorK2RlZmluZShbR01QX0hFQURFUl9HRVRWQUxdLAorIFtwYXRzdWJzdChwYXRzdWJzdCgKKyBlc3lzY21kKFtncmVwICJeI2RlZmluZSAkMSAiICQyIC9kZXYvbnVsbCAyPi9kZXYvbnVsbF0pLAorIFteLiokMVsgCV0rXSxbXSksCitAQCAtMTYwLDcgKzE2MCw3IEBAIGRubCAgVGhlIGdtcCB2ZXJzaW9uIG51bWJlciwgZXh0cmFjdGVkIGZyb20gdGhlICNkZWZpbmVzIGluIGdtcC1oLmluIGF0CisgZG5sICBhdXRvY29uZiB0aW1lLiAgVHdvIGRpZ2l0cyBsaWtlIDMuMCBpZiBwYXRjaGxldmVsIDw9IDAsIG9yIHRocmVlIGRpZ2l0cworIGRubCAgbGlrZSAzLjAuMSBpZiBwYXRjaGxldmVsID4gMC4KKyAKKy1kZWZpbmUoR01QX1ZFUlNJT04sCisrZGVmaW5lKFtHTVBfVkVSU0lPTl0sCisgW0dNUF9IRUFERVJfR0VUVkFMKF9fR05VX01QX1ZFUlNJT04sZ21wLWguaW4pW11kbmwKKyAuR01QX0hFQURFUl9HRVRWQUwoX19HTlVfTVBfVkVSU0lPTl9NSU5PUixnbXAtaC5pbilbXWRubAorIC5HTVBfSEVBREVSX0dFVFZBTChfX0dOVV9NUF9WRVJTSU9OX1BBVENITEVWRUwsZ21wLWguaW4pXSkKK0BAIC0xNTI0LDcgKzE1MjQsOSBAQCBlc2FjCisgZWNobyBbImRlZmluZSg8Q09ORklHX1RPUF9TUkNESVI+LDxcYCR0bXAnPikiXSA+PiRnbXBfdG1wY29uZmlnbTQKKyAKKyAjIEFsbCBDUFVzIHVzZSBhc20tZGVmcy5tNAorLWVjaG8gWyJpbmNsdWRlXVsoQ09ORklHX1RPUF9TUkNESVJcYC9tcG4vYXNtLWRlZnMubTQnKSJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIC1uIFsiaW5jbHVkZSgiXSA+PiRnbXBfdG1wY29uZmlnbTRpCisrZWNobyAtbiBbIkNPTkZJR19UT1BfU1JDRElSXGAvbXBuL2FzbS1kZWZzLm00JyJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIFsiKSJdID4+JGdtcF90bXBjb25maWdtNGkKKyBdKQorIAorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNjRiMmM1MC4uZjA3YjgyMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzksMTQgKzM5LDYgQEAgQUNfUkVWSVNJT04oJFJldmlzaW9uJCkKKyBBQ19QUkVSRVEoMi41OSkKKyBBQ19JTklUKEdOVSBNUCwgR01QX1ZFUlNJT04sIFtnbXAtYnVnc0BnbXBsaWIub3JnLCBzZWUgaHR0cHM6Ly9nbXBsaWIub3JnL21hbnVhbC9SZXBvcnRpbmctQnVncy5odG1sXSwgZ21wKQorIEFDX0NPTkZJR19TUkNESVIoZ21wLWltcGwuaCkKKy1tNF9wYXR0ZXJuX2ZvcmJpZChbXlsgXHRdKkdNUF9dKQorLW00X3BhdHRlcm5fYWxsb3coR01QX0xERkxBR1MpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTElNQl9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX01QQVJBTV9IX1NVR0dFU1QpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTkFJTF9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX05VTUJfQklUUykKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9OT05TVERfQUJJKQorLW00X3BhdHRlcm5fYWxsb3coR01QX0NQVV9UWVBFKQorIAorICMgSWYgLS10YXJnZXQgaXMgbm90IHVzZWQgdGhlbiAkdGFyZ2V0X2FsaWFzIGlzIGVtcHR5LCBidXQgaWYgc2F5CisgIyAiLi9jb25maWd1cmUgYXRobG9uLXBjLWZyZWVic2QzLjUiIGlzIHVzZWQsIHRoZW4gYWxsIHRocmVlIG9mCitAQCAtMzQ4LDcgKzM0MCw3IEBAIEFIX1ZFUkJBVElNKFtIQVZFX0hPU1RfQ1BVXzFdLAorICMgQWZ0ZXIgR01QIHNwZWNpZmljIHNlYXJjaGVzIGFuZCB0ZXN0cywgdGhlIHN0YW5kYXJkIGF1dG9jb25mIEFDX1BST0dfQ0MgaXMKKyAjIGNhbGxlZC4gIFVzZXIgc2VsZWN0aW9ucyBvZiBDQyBldGMgYXJlIHJlc3BlY3RlZC4KKyAjCistIyBDYXJlIGlzIHRha2VuIG5vdCB0byB1c2UgbWFjcm9zIGxpa2UgQUNfVFJZX0NPTVBJTEUgZHVyaW5nIHRoZSBHTVAKKysjIENhcmUgaXMgdGFrZW4gbm90IHRvIHVzZSBtYWNyb3MgbGlrZSBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbXV0pXSxbXSxbXSkgZHVyaW5nIHRoZSBHTVAKKyAjIHByZS10ZXN0aW5nLCBzaW5jZSB0aGV5IG9mIGNvdXJzZSBkZXBlbmQgb24gQUNfUFJPR19DQywgYW5kIGFsc28gc29tZSBvZgorICMgdGhlbSBjYWNoZSB0aGVpciByZXN1bHRzLCB3aGljaCBpcyBub3Qgd2FudGVkLgorICMKK0BAIC00NDAsNyArNDMyLDcgQEAgYWJpbGlzdD0ic3RhbmRhcmQiCisgIyBGSVhNRTogV2UnZCBsaWtlIHRvIHByZWZlciBhbiBBTlNJIGNvbXBpbGVyLCBwZXJoYXBzIGJ5IHByZWZlcnJpbmcKKyAjIGM4OSBvdmVyIGNjIGhlcmUuICBCdXQgbm90ZSB0aGF0IG9uIEhQLVVYIGM4OSBwcm92aWRlcyBhIGNhc3RyYXRlZAorICMgZW52aXJvbm1lbnQsIGFuZCB3b3VsZCB3YW50IHRvIGJlIGV4Y2x1ZGVkIHNvbWVob3cuICBNYXliZQorLSMgQUNfUFJPR19DQ19TVERDIGFscmVhZHkgZG9lcyBlbm91Z2ggdG8gc3RpY2sgY2MgaW50byBBTlNJIG1vZGUgYW5kCisrIyAgYWxyZWFkeSBkb2VzIGVub3VnaCB0byBzdGljayBjYyBpbnRvIEFOU0kgbW9kZSBhbmQKKyAjIHdlIGRvbid0IG5lZWQgdG8gd29ycnkuCisgIworIGNjbGlzdD0iZ2NjIGNjIgorQEAgLTE4NDMsNyArMTgzNSw3IEBAIGVzYWMKKyBDRkxBR1Nfb3JfdW5zZXQ9JHtDRkxBR1MtJyh1bnNldCknfQorIENQUEZMQUdTX29yX3Vuc2V0PSR7Q1BQRkxBR1MtJyh1bnNldCknfQorIAorLWNhdCA+JkFDX0ZEX0NDIDw8RU9GCisrY2F0ID4mQVNfTUVTU0FHRV9MT0dfRkQoKSA8PEVPRgorIFVzZXI6CisgQUJJPSRBQkkKKyBDQz0kQ0MKK0BAIC0yMjY0LDcgKzIyNTYsNiBAQCBBQ19TVUJTVChERUZOX0xPTkdfTE9OR19MSU1CKQorIAorICMgVGhlIEMgY29tcGlsZXIgYW5kIHByZXByb2Nlc3NvciwgcHV0IGludG8gQU5TSSBtb2RlIGlmIHBvc3NpYmxlLgorIEFDX1BST0dfQ0MKKy1BQ19QUk9HX0NDX1NUREMKKyBBQ19QUk9HX0NQUAorIAorIAorQEAgLTIyODYsMTEgKzIyNzcsMTEgQEAgQUNfU1VCU1QoQ0NBUykKKyAKKyAjIFRoZSBDKysgY29tcGlsZXIsIGlmIGRlc2lyZWQuCisgd2FudF9jeHg9bm8KKytBQ19QUk9HX0NYWAorIGlmIHRlc3QgJGVuYWJsZV9jeHggIT0gbm87IHRoZW4KKyAgIHRlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CistICBBQ19QUk9HX0NYWAorIAorLSAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQUNfRkRfQ0MKKysgIGVjaG8gIkNYWEZMQUdTIGNob3NlbiBieSBhdXRvY29uZjogJENYWEZMQUdTIiA+JkFTX01FU1NBR0VfTE9HX0ZEKCkKKyAgIGN4eGZsYWdzX2FjX3Byb2dfY3h4PSRDWFhGTEFHUworICAgY3h4ZmxhZ3NfbGlzdD1hY19wcm9nX2N4eAorIAorQEAgLTI0MTIsNyArMjQwMyw3IEBAIGlmIHRlc3QgIiRlbmFibGVfYXNzZW1ibHkiID0gIm5vIjsgdGhlbgorIGZpCisgCisgCistY2F0ID4mQUNfRkRfQ0MgPDxFT0YKKytjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgRGVjaWRlZDoKKyBBQkk9JEFCSQorIENDPSRDQworQEAgLTM3ODEsNyArMzc3Miw3IEBAIEdNUF9GSU5JU0gKKyAjIEZJWE1FOiBVcGNvbWluZyB2ZXJzaW9uIG9mIGF1dG9jb25mL2F1dG9tYWtlIG1heSBub3QgbGlrZSBicm9rZW4gbGluZXMuCisgIyAgICAgICAgUmlnaHQgbm93IGF1dG9tYWtlIGlzbid0IGFjY2VwdGluZyB0aGUgbmV3IEFDX0NPTkZJR19GSUxFUyBzY2hlbWUuCisgCistQUNfT1VUUFVUKE1ha2VmaWxlCQkJCQkJCVwKKytBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlCQkJCQkJCVwKKyAgIG1wZi9NYWtlZmlsZSBtcG4vTWFrZWZpbGUgbXBxL01ha2VmaWxlCQkJCVwKKyAgIG1wei9NYWtlZmlsZSBwcmludGYvTWFrZWZpbGUgc2NhbmYvTWFrZWZpbGUgcmFuZC9NYWtlZmlsZSBjeHgvTWFrZWZpbGUgXAorICAgdGVzdHMvTWFrZWZpbGUgdGVzdHMvZGV2ZWwvTWFrZWZpbGUJCQkJCVwKK0BAIC0zNzkwLDcgKzM3ODEsOCBAQCBBQ19PVVRQVVQoTWFrZWZpbGUJCQkJCQkJXAorICAgdGVzdHMvY3h4L01ha2VmaWxlCQkJCQkJCVwKKyAgIGRvYy9NYWtlZmlsZSB0dW5lL01ha2VmaWxlCQkJCQkJXAorICAgZGVtb3MvTWFrZWZpbGUgZGVtb3MvY2FsYy9NYWtlZmlsZSBkZW1vcy9leHByL01ha2VmaWxlCQlcCistICBnbXAuaDpnbXAtaC5pbikKKysgIGdtcC5oOmdtcC1oLmluXSkKKytBQ19PVVRQVVQKKyAKKyBBQ19NU0dfTk9USUNFKFtzdW1tYXJ5IG9mIGJ1aWxkIG9wdGlvbnM6CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9nbXAtNi4wLjAtcHBjNjQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvZ21wLTYuMC4wLXBwYzY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTNiNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvZ21wLTYuMC4wLXBwYzY0LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKworU2lnbmVkLW9mZi1ieTogQXJtaW4gS3VzdGVyIDxha3VzdGVyODA4QGdtYWlsLmNvbT4KKworVGhpcyBwYXRjaCB3aXRoIHB1bGxlZCBmcm9tIGdtcC4KK2h0dHBzOi8vZ21wbGliLm9yZy9yZXBvL2dtcC9yZXYvNGE2ZDI1OGI0NjdmCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAZ21wbGliLm9yZz4KKyMgRGF0ZSAxMzk1ODM1MDY4IC0zNjAwCisjIE5vZGUgSUQgNGE2ZDI1OGI0NjdmNjYxZGEwODk0Y2M2MGVjZDA2MGYyZTNjNjdjNworIyBQYXJlbnQgIDMwMWNlMjc4ODgyNmEyZDRkMjcyNWJkNWNmMDFlOTk4NjM4ZGIzN2EKK1Byb3ZpZGUgZGVmYXVsdCBmb3IgQk1PRF8xX1RPX01PRF8xX1RIUkVTSE9MRC4KKworZGlmZiAtciAzMDFjZTI3ODg4MjYgLXIgNGE2ZDI1OGI0NjdmIG1wbi9wb3dlcnBjNjQvbW9kZTY0L2djZF8xLmFzbQorLS0tIGEvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtICAgIFR1ZSBNYXIgMjUgMTU6MzQ6NTIgMjAxNCArMDEwMAorKysrIGIvbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtICAgIFdlZCBNYXIgMjYgMTI6NTc6NDggMjAxNCArMDEwMAorQEAgLTQzLDYgKzQzLDkgQEAKKyBkZWZpbmUoYG4nLCAgICAgYHI0JykKKyBkZWZpbmUoYHYwJywgICAgYHI1JykKKworK2lmZGVmKGBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEJywsCisrICBgZGVmaW5lKGBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xEJywzMCknKQorKworIEVYVEVSTl9GVU5DKG1wbl9tb2RfMSkKKyBFWFRFUk5fRlVOQyhtcG5fbW9kZXhhY3RfMWNfb2RkKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OTA0YTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvdXNlLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnbXAtNC4yLjQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNC4yLjQub3JpZy9NYWtlZmlsZS5hbQkyMDA4LTA5LTEwIDE5OjMxOjI3LjAwMDAwMDAwMCArMDAwMAorKysrIGdtcC00LjIuNC9NYWtlZmlsZS5hbQkyMDA5LTA3LTA2IDIwOjE5OjE5LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwNiw3ICsxMDYsNyBAQAorICMgYnV0IGFueW9uZSBrbm93bGVkZ2FibGUgZW5vdWdoIHRvIGJlIHBsYXlpbmcgd2l0aCBleGVjX3ByZWZpeCB3aWxsIGJlIGFibGUKKyAjIHRvIGFkZHJlc3MgdGhhdC4KKyAjCistaW5jbHVkZWV4ZWNkaXIgPSAkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCisraW5jbHVkZWV4ZWNkaXIgPSAkKGluY2x1ZGVkaXIpCisgaW5jbHVkZV9IRUFERVJTID0gJChHTVBYWF9IRUFERVJTX09QVElPTikKKyBub2Rpc3RfaW5jbHVkZWV4ZWNfSEVBREVSUyA9IGdtcC5oICQoTVBCU0RfSEVBREVSU19PUFRJT04pCisgbGliX0xUTElCUkFSSUVTID0gbGliZ21wLmxhICQoR01QWFhfTFRMSUJSQVJJRVNfT1BUSU9OKSAkKE1QQlNEX0xUTElCUkFSSUVTX09QVElPTikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTJhMzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkdOVSBtdWx0aXByZWNpc2lvbiBhcml0aG1ldGljIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTVAgaXMgYSBmcmVlIGxpYnJhcnkgZm9yIGFyYml0cmFyeSBwcmVjaXNpb24gYXJpdGhtZXRpYywgb3BlcmF0aW5nIG9uIHNpZ25lZCBpbnRlZ2VycywgcmF0aW9uYWwgbnVtYmVycywgYW5kIGZsb2F0aW5nIHBvaW50IG51bWJlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vZ21wbGliLm9yZy8iCisKK1JFVklTSU9OID89ICIiCitTUkNfVVJJID0gImh0dHBzOi8vZ21wbGliLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0ke1JFVklTSU9OfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3JlYWRsaW5lXSA9ICItLXdpdGgtcmVhZGxpbmU9eWVzLC0td2l0aC1yZWFkbGluZT1ubyxyZWFkbGluZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF80LjIuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhjMDFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzQuMi4xLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgZ21wLmluYworCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04OTJmNTY5YTU1NWJhOWMwN2E1NjhhN2MwYzRmYTYzYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ21wLWguaW47YmVnaW5saW5lPTY7ZW5kbGluZT0yMTttZDU9ZTA1NmY3NGExMmMzMjc3ZDczMGRiY2ZiODVkMmNhMzQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXN0ZGMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dtcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDkxYzU2ZTBlMWNjYTZiMDliMTdiNjlkNDdlZjE4ZTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDA3ZmZjYjM3ZWVjZWMzNWM1ZWM3MjUxNmQxMGIzNWZkZjZlNmZlZjFmY2YxZGNkMzdlMzBiOGNiZjhiZjk0MSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjAuMC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI2M2U1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wXzYuMC4wLmJiCkBAIC0wLDAgKzEsMzMgQEAKK3JlcXVpcmUgZ21wLmluYworCitMSUNFTlNFPSJHUEx2MisgfCBMR1BMdjMrIgorCitSRVZJU0lPTj0iYSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorIgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hbWQ2NC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FwcGVuZF91c2VyX3Byb3ZpZGVkX2ZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nbXAtNi4wLjAtcHBjNjQucGF0Y2ggXAorICAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImI3ZmYyZDg4Y2FlN2Y4MDg1YmQ1MDA2MDk2ZWVkNDcwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdmOGU5YTgwNGI5YzZkMDcxNjRjZjc1NDIwN2JlODM4ZWNlMTIxOTQyNWQ2NGUyOGNmYTNlNzBkNWM3NTlhYWYiCisKK2FjcGF0aHMgPSAiIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLWVuYWJsZS1jeHg9ZGV0ZWN0IgorCitQQUNLQUdFUyA9KyAibGliZ21weHgiCitGSUxFU19saWJnbXB4eCA9ICIke2xpYmRpcn0vbGliZ21weHgke1NPTElCU30iCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAgICAgc2VkIC1pICJzfC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9fHxnIiAke0R9JHtpbmNsdWRlZGlyfS9nbXAuaAorfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiZ21wLmgiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZy8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDY2NmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvMDAwMS1nc3lzdGVtLXN1YnByb2Nlc3MuYy1FbmFibGUtR05VLWV4dGVuc2lvbnMtaW4tc3lzdGVtLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYjFkZTJjNjI5MGJjMDY1MWZlODdhOGM0ZmI1MmU3YTBhNWZlNjMyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgT2N0IDIwMTQgMTY6MDE6NDkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N5c3RlbS1zdWJwcm9jZXNzLmM6IEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBpbiBzeXN0ZW0gIEMKKyBsaWJyYXJ5CisKK1RoaXMgc2hvdWxkIGV4cG9ydCBPX0NMT0VYRUMgd2hlcmUgaXQgaXMgb25seQorYXZhaWxhYmxlIHdoZW4gX0dOVV9TT1VSQ0UgaXMgZGVmaW5lZCAuZS5nLiB1Y2xpYmMgYmFzZWQgc3lzdGVtcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYyBiL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jCitpbmRleCBhOTY3ODk2Li5hNTJhMzYyIDEwMDY0NAorLS0tIGEvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMKKysrKyBiL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jCitAQCAtMTgsNiArMTgsMTAgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HU1lTVEVNX05PX0xPQ0FMX0FMTE9DCisgI2luY2x1ZGUgImxpYmdzeXN0ZW0uaCIKKyAKKy0tIAorMi4xLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nXzIwMTQuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZ18yMDE0LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyZGU5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZ18yMDE0LjEuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJUZXN0IHJ1bm5lciBmb3IgR05PTUUtc3R5bGUgaW5zdGFsbGVkIHRlc3RzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLmdub21lLm9yZy9Hbm9tZUdvYWxzL0luc3RhbGxlZFRlc3RzIgorTElDRU5TRSA9ICJMR1BMdjIrIgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtQVn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNjA4YWQ3MmE3N2UyM2ExYWVjZGZkOGQwN2E5NGJhZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYTNlZWQ3MzY3OGRkMjJkMDlkNmE3ZWM0Zjg5OTU1N2RmM2U4YjRhODAyYWZmYTc2ZDBmMTYzYjMxMjg2NTM5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lci5jO2VuZGxpbmU9MTk7bWQ1PTY3MzExYTYwMGI4M2ZkMDA2OGRmYzdlNWI4NGZmYjNmIgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFIgPSAicjEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2pvdXJuYWxkXSA9ICItLXdpdGgtc3lzdGVtZC1qb3VybmFsLC0td2l0aG91dC1zeXN0ZW1kLWpvdXJuYWwsc3lzdGVtZCxzeXN0ZW1kIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MjQyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MjQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YWRkY2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQyNDIucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBlMjIwMmZmMmI3MDQ2MjNlZmM2Mjc3ZmI1MjU2ZTRlMTViYWM1Njc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2VybmVyIEtvY2ggPHdrQGdudXBnLm9yZz4KK0RhdGU6IFRodSwgMjUgSnVsIDIwMTMgMTE6MTc6NTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWl0aWdhdGUgYSBmbHVzaCtyZWxvYWQgY2FjaGUgYXR0YWNrIG9uIFJTQSBzZWNyZXQKKyBleHBvbmVudHMuCisKK2NvbW1pdCBlMjIwMmZmMmI3MDQ2MjNlZmM2Mjc3ZmI1MjU2ZTRlMTViYWM1Njc2IGZyb20KK2dpdDovL2dpdC5nbnVwZy5vcmcvbGliZ2NyeXB0LmdpdAorCisqIG1waS9tcGktcG93LmMgKGdjcnlfbXBpX3Bvd20pOiBBbHdheXMgcGVyZnJvbSB0aGUgbXBpX211bCBmb3IKK2V4cG9uZW50cyBpbiBzZWN1cmUgbWVtb3J5LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0KKworVGhlIGF0dGFjayBpcyBwdWJsaXNoZWQgYXMgaHR0cDovL2VwcmludC5pYWNyLm9yZy8yMDEzLzQ0OCA6CisKK0ZsdXNoK1JlbG9hZDogYSBIaWdoIFJlc29sdXRpb24sIExvdyBOb2lzZSwgTDMgQ2FjaGUgU2lkZS1DaGFubmVsCitBdHRhY2sgYnkgWXV2YWwgWWFyb20gYW5kIEthdHJpbmEgRmFsa25lci4gMTggSnVseSAyMDEzLgorCisgIEZsdXNoK1JlbG9hZCBpcyBhIGNhY2hlIHNpZGUtY2hhbm5lbCBhdHRhY2sgdGhhdCBtb25pdG9ycyBhY2Nlc3MgdG8KKyAgZGF0YSBpbiBzaGFyZWQgcGFnZXMuIEluIHRoaXMgcGFwZXIgd2UgZGVtb25zdHJhdGUgaG93IHRvIHVzZSB0aGUKKyAgYXR0YWNrIHRvIGV4dHJhY3QgcHJpdmF0ZSBlbmNyeXB0aW9uIGtleXMgZnJvbSBHbnVQRy4gIFRoZSBoaWdoCisgIHJlc29sdXRpb24gYW5kIGxvdyBub2lzZSBvZiB0aGUgRmx1c2grUmVsb2FkIGF0dGFjayBlbmFibGVzIGEgc3B5CisgIHByb2dyYW0gdG8gcmVjb3ZlciBvdmVyIDk4JSBvZiB0aGUgYml0cyBvZiB0aGUgcHJpdmF0ZSBrZXkgaW4gYQorICBzaW5nbGUgZGVjcnlwdGlvbiBvciBzaWduaW5nIHJvdW5kLiBVbmxpa2UgcHJldmlvdXMgYXR0YWNrcywgdGhlCisgIGF0dGFjayB0YXJnZXRzIHRoZSBsYXN0IGxldmVsIEwzIGNhY2hlLiBDb25zZXF1ZW50bHksIHRoZSBzcHkKKyAgcHJvZ3JhbSBhbmQgdGhlIHZpY3RpbSBkbyBub3QgbmVlZCB0byBzaGFyZSB0aGUgZXhlY3V0aW9uIGNvcmUgb2YKKyAgdGhlIENQVS4gVGhlIGF0dGFjayBpcyBub3QgbGltaXRlZCB0byBhIHRyYWRpdGlvbmFsIE9TIGFuZCBjYW4gYmUKKyAgdXNlZCBpbiBhIHZpcnR1YWxpc2VkIGVudmlyb25tZW50LCB3aGVyZSBpdCBjYW4gYXR0YWNrIHByb2dyYW1zCisgIGV4ZWN1dGluZyBpbiBhIGRpZmZlcmVudCBWTS4KKworSW5kZXg6IGdudXBnLTEuNC43L21waS9tcGktcG93LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL21waS9tcGktcG93LmMKKysrKyBnbnVwZy0xLjQuNy9tcGkvbXBpLXBvdy5jCitAQCAtMjEyLDcgKzIxMiwxMyBAQCBtcGlfcG93bSggTVBJIHJlcywgTVBJIGJhc2UsIE1QSSBleHBvbmVuCisgCQl0cCA9IHJwOyBycCA9IHhwOyB4cCA9IHRwOworIAkJcnNpemUgPSB4c2l6ZTsKKyAKKy0JCWlmKCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDAgKSB7CisrICAgICAgICAgICAgLyogVG8gbWl0aWdhdGUgdGhlIFlhcm9tL0ZhbGtuZXIgZmx1c2grcmVsb2FkIGNhY2hlCisrICAgICAgICAgICAgICogc2lkZS1jaGFubmVsIGF0dGFjayBvbiB0aGUgUlNBIHNlY3JldCBleHBvbmVudCwgd2UgZG8KKysgICAgICAgICAgICAgKiB0aGUgbXVsdGlwbGljYXRpb24gcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlCisrICAgICAgICAgICAgICogaGlnaC1iaXQgb2YgRS4gIEJ1dCB0byBhdm9pZCB0aGlzIHBlcmZvcm1hbmNlIHBlbmFsdHkKKysgICAgICAgICAgICAgKiB3ZSBkbyBpdCBvbmx5IGlmIHRoZSBleHBvbmVudCBoYXMgYmVlbiBzdG9yZWQgaW4gc2VjdXJlCisrICAgICAgICAgICAgICogbWVtb3J5IGFuZCB3ZSBjYW4gdGh1cyBhc3N1bWUgaXQgaXMgYSBzZWNyZXQgZXhwb25lbnQuICAqLworKwkJaWYgKGVzZWMgfHwgKG1waV9saW1iX3NpZ25lZF90KWUgPCAwKSB7CisgCQkgICAgLyptcGloZWxwX211bCggeHAsIHJwLCByc2l6ZSwgYnAsIGJzaXplICk7Ki8KKyAJCSAgICBpZiggYnNpemUgPCBLQVJBVFNVQkFfVEhSRVNIT0xEICkgeworIAkJCW1waWhlbHBfbXVsKCB4cCwgcnAsIHJzaXplLCBicCwgYnNpemUgKTsKK0BAIC0yMjcsNiArMjMzLDggQEAgbXBpX3Bvd20oIE1QSSByZXMsIE1QSSBiYXNlLCBNUEkgZXhwb25lbgorIAkJCW1waWhlbHBfZGl2cmVtKHhwICsgbXNpemUsIDAsIHhwLCB4c2l6ZSwgbXAsIG1zaXplKTsKKyAJCQl4c2l6ZSA9IG1zaXplOworIAkJICAgIH0KKysJCX0KKysJCWlmICggKG1waV9saW1iX3NpZ25lZF90KWUgPCAwICkgeworIAorIAkJICAgIHRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgCQkgICAgcnNpemUgPSB4c2l6ZTsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDM1MS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDM1MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjllZGU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MzUxLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGdudXBnLTEuNC43L2cxMC9nZXRrZXkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2dldGtleS5jCTIwMDctMDMtMDUgMTY6NTQ6NDEuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvZzEwL2dldGtleS5jCTIwMTMtMTEtMjggMTQ6NDE6NTkuNjQwMjEyMjQwICswODAwCitAQCAtMTQ1NCw3ICsxNDU0LDExIEBACisgCisgICAgICAgaWYoZmxhZ3MpCisgCWtleV91c2FnZSB8PSBQVUJLRVlfVVNBR0VfVU5LTk9XTjsKKysgICAgICBpZiAoIWtleV91c2FnZSkKKysJa2V5X3VzYWdlIHw9IFBVQktFWV9VU0FHRV9OT05FOworICAgICB9CisrICBlbHNlIGlmIChwKQorKyAgICBrZXlfdXNhZ2UgfD0gUFVCS0VZX1VTQUdFX05PTkU7CisgCisgICAvKiBXZSBzZXQgUFVCS0VZX1VTQUdFX1VOS05PV04gdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGtleSBoYXMgYQorICAgICAgY2FwYWJpbGl0eSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUuICBUaGlzIHNlcnZlcyB0byBkaXN0aW5ndWlzaAorSW5kZXg6IGdudXBnLTEuNC43L2cxMC9rZXlnZW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2tleWdlbi5jCTIwMDctMDItMDUgMDA6Mjc6NDAuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvZzEwL2tleWdlbi5jCTIwMTMtMTEtMjggMTQ6NDM6MDUuMDE2NjcwMDkyICswODAwCitAQCAtMjA5LDkgKzIwOSw2IEBACisgICAgIGlmICh1c2UgJiBQVUJLRVlfVVNBR0VfQVVUSCkKKyAgICAgICAgIGJ1ZlswXSB8PSAweDIwOworIAorLSAgICBpZiAoIWJ1ZlswXSkgCistICAgICAgICByZXR1cm47CistCisgICAgIGJ1aWxkX3NpZ19zdWJwa3QgKHNpZywgU0lHU1VCUEtUX0tFWV9GTEFHUywgYnVmLCAxKTsKKyB9CisgCitJbmRleDogZ251cGctMS40LjcvaW5jbHVkZS9jaXBoZXIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvaW5jbHVkZS9jaXBoZXIuaAkyMDA2LTA0LTIxIDIwOjM5OjQ5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2luY2x1ZGUvY2lwaGVyLmgJMjAxMy0xMS0yOCAxNDo0OToyNC4xNTkzMjI3NDQgKzA4MDAKK0BAIC01Miw2ICs1Miw3IEBACisgI2RlZmluZSBQVUJLRVlfVVNBR0VfQ0VSVCAgICA0ICAgICAgLyoga2V5IGlzIGFsc28gZ29vZCB0byBjZXJ0aWZ5IG90aGVyIGtleXMqLworICNkZWZpbmUgUFVCS0VZX1VTQUdFX0FVVEggICAgOCAgICAgIC8qIGtleSBpcyBnb29kIGZvciBhdXRoZW50aWNhdGlvbiAqLworICNkZWZpbmUgUFVCS0VZX1VTQUdFX1VOS05PV04gMTI4ICAgIC8qIGtleSBoYXMgYW4gdW5rbm93biB1c2FnZSBiaXQgKi8KKysjZGVmaW5lIFBVQktFWV9VU0FHRV9OT05FICAgIDI1NiAgICAvKiBObyB1c2FnZSBnaXZlbi4gKi8KKyAKKyAjZGVmaW5lIERJR0VTVF9BTEdPX01ENSAgICAgICAxCisgI2RlZmluZSBESUdFU1RfQUxHT19TSEExICAgICAgMgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00NTc2LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00NTc2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTIyZjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQ1NzYucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9kc2EuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL2RzYS5jCTIwMDYtMTItMTIgMDI6Mjc6MjEuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL2RzYS5jCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMjg3LDYgKzI4Nyw4IEBACisgICAgIE1QSSBraW52OworICAgICBNUEkgdG1wOworIAorKyAgICBtcGlfbm9ybWFsaXplIChoYXNoKTsKKysKKyAgICAgLyogc2VsZWN0IGEgcmFuZG9tIGsgd2l0aCAwIDwgayA8IHEgKi8KKyAgICAgayA9IGdlbl9rKCBza2V5LT5xICk7CisgCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL2VsZ2FtYWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL2VsZ2FtYWwuYwkyMDA2LTEyLTEyIDAzOjA4OjA1LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9lbGdhbWFsLmMJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0zNzYsNiArMzc2LDkgQEAKKyB7CisgICAgIE1QSSB0MSA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKCBza2V5LT5wICkgKTsKKyAKKysgICAgbXBpX25vcm1hbGl6ZSAoYSk7CisrICAgIG1waV9ub3JtYWxpemUgKGIpOworKworICAgICAvKiBvdXRwdXQgPSBiLyhhXngpIG1vZCBwICovCisgICAgIG1waV9wb3dtKCB0MSwgYSwgc2tleS0+eCwgc2tleS0+cCApOworICAgICBtcGlfaW52bSggdDEsIHQxLCBza2V5LT5wICk7CitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL3JhbmRvbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvcmFuZG9tLmMJMjAwNi0xMS0wMyAxODowOTozOS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmMJMjAxNC0wMS0yMyAxMTozMTo1My45OTM0OTU0NjIgKzA4MDAKK0BAIC0yNzMsNiArMjczLDE4IEBACisgfQorIAorIAorKy8qIFJhbmRvbWl6ZSB0aGUgTVBJICovIAorK3ZvaWQKKytyYW5kb21pemVfbXBpIChNUEkgbXBpLCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCkKKyt7CisrICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CisrCisrICBidWZmZXIgPSBnZXRfcmFuZG9tX2JpdHMgKG5iaXRzLCBsZXZlbCwgbXBpX2lzX3NlY3VyZSAobXBpKSk7CisrICBtcGlfc2V0X2J1ZmZlciAobXBpLCBidWZmZXIsIChuYml0cys3KS84LCAwKTsKKysgIHhmcmVlIChidWZmZXIpOworK30KKysKKysKKyBpbnQKKyByYW5kb21faXNfZmFrZWQoKQorIHsKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9yYW5kb20uaAkyMDA2LTAyLTA5IDE5OjI5OjI5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uaAkyMDE0LTAxLTIzIDExOjMwOjE3LjMwMDkxNTkxOSArMDgwMAorQEAgLTMyLDYgKzMyLDcgQEAKKyBpbnQgIHJhbmRvbV9pc19mYWtlZCh2b2lkKTsKKyB2b2lkIHJhbmRvbV9kaXNhYmxlX2xvY2tpbmcgKHZvaWQpOworIHZvaWQgcmFuZG9taXplX2J1ZmZlciggYnl0ZSAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgbGV2ZWwgKTsKKyt2b2lkIHJhbmRvbWl6ZV9tcGkgKE1QSSBtcGksIHNpemVfdCBuYml0cywgaW50IGxldmVsKTsKKyBieXRlICpnZXRfcmFuZG9tX2JpdHMoIHNpemVfdCBuYml0cywgaW50IGxldmVsLCBpbnQgc2VjdXJlICk7Cisgdm9pZCBmYXN0X3JhbmRvbV9wb2xsKCB2b2lkICk7CisgCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL3JzYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvcnNhLmMJMjAwNi0xMi0xMiAwMzowOTowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvcnNhLmMJMjAxNC0wMS0yMyAxMTozNTowNC4zMzA2MzkxMjUgKzA4MDAKK0BAIC0zMDEsOSArMzAxLDI2IEBACisgI2lmIDAKKyAgICAgbXBpX3Bvd20oIG91dHB1dCwgaW5wdXQsIHNrZXktPmQsIHNrZXktPm4gKTsKKyAjZWxzZQorLSAgICBNUEkgbTEgICA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKKy0gICAgTVBJIG0yICAgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7CistICAgIE1QSSBoICAgID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOworKyAgICBpbnQgbmxpbWJzID0gbXBpX2dldF9ubGltYnMgKHNrZXktPm4pKzE7CisrICAgIE1QSSBtMSAgID0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysgICAgTVBJIG0yICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyAgICBNUEkgaCAgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrIyBpZiAxCisrICAgIE1QSSBiZGF0YT0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysgICAgTVBJIHIgICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyMgZW5kaWYKKysKKysgICAgLyogUmVtb3ZlIHN1cGVyZmx1b3VzIGxlYWRpbmcgemVyb2VzIGZyb20gSU5QVVQuICAqLworKyAgICBtcGlfbm9ybWFsaXplIChpbnB1dCk7CisrCisrIyBpZiAxIAorKyAgICAvKiBCbGluZDogIGJkYXRhID0gKGRhdGEgKiByXmUpIG1vZCBuICAgKi8KKysgICAgcmFuZG9taXplX21waSAociwgbXBpX2dldF9uYml0cyAoc2tleS0+biksIDApOworKyAgICBtcGlfZmRpdl9yIChyLCByLCBza2V5LT5uKTsKKysgICAgbXBpX3Bvd20gKGJkYXRhLCByLCBza2V5LT5lLCBza2V5LT5uKTsKKysgICAgbXBpX211bG0gKGJkYXRhLCBiZGF0YSwgaW5wdXQsIHNrZXktPm4pOworKyAgICBpbnB1dCA9IGJkYXRhOworKyMgZW5kaWYKKyAKKyAgICAgLyogbTEgPSBjIF4gKGQgbW9kIChwLTEpKSBtb2QgcCAqLworICAgICBtcGlfc3ViX3VpKCBoLCBza2V5LT5wLCAxICApOworQEAgLTMyMSw4ICszMzgsMTUgQEAKKyAgICAgLyogbSA9IG0yICsgaCAqIHAgKi8KKyAgICAgbXBpX211bCAoIGgsIGgsIHNrZXktPnAgKTsKKyAgICAgbXBpX2FkZCAoIG91dHB1dCwgbTEsIGggKTsKKy0gICAgLyogcmVhZHkgKi8KKy0gICAgCisrCisrIyBpZiAxCisrICAgIG1waV9mcmVlIChiZGF0YSk7CisrICAgIC8qIFVuYmxpbmQ6IG91dHB1dCA9IChvdXRwdXQgKiByXigtMSkpIG1vZCBuICAqLworKyAgICBtcGlfaW52bSAociwgciwgc2tleS0+bik7CisrICAgIG1waV9tdWxtIChvdXRwdXQsIG91dHB1dCwgciwgc2tleS0+bik7CisrICAgIG1waV9mcmVlIChyKTsKKysjIGVuZGlmCisrCisgICAgIG1waV9mcmVlICggaCApOworICAgICBtcGlfZnJlZSAoIG0xICk7CisgICAgIG1waV9mcmVlICggbTIgKTsKK0BAIC0zOTcsNiArNDIxLDcgQEAKKyByc2FfZGVjcnlwdCggaW50IGFsZ28sIE1QSSAqcmVzdWx0LCBNUEkgKmRhdGEsIE1QSSAqc2tleSApCisgeworICAgICBSU0Ffc2VjcmV0X2tleSBzazsKKysgICAgTVBJIGlucHV0OworIAorICAgICBpZiggYWxnbyAhPSAxICYmIGFsZ28gIT0gMiApCisgCXJldHVybiBHMTBFUlJfUFVCS0VZX0FMR087CitAQCAtNDA3LDggKzQzMiwxNCBAQAorICAgICBzay5wID0gc2tleVszXTsKKyAgICAgc2sucSA9IHNrZXlbNF07CisgICAgIHNrLnUgPSBza2V5WzVdOworLSAgICAqcmVzdWx0ID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoIHNrLm4gKSApOworLSAgICBzZWNyZXQoICpyZXN1bHQsIGRhdGFbMF0sICZzayApOworKworKyAgICAvKiBNaXRpZ2F0ZXMgc2lkZS1jaGFubmVsIGF0dGFja3MgKENWRS0yMDEzLTQ1NzYpLiAgKi8KKysgICAgaW5wdXQgPSBtcGlfYWxsb2MgKDApOworKyAgICBtcGlfbm9ybWFsaXplIChkYXRhWzBdKTsKKysgICAgbXBpX2ZkaXZfciAoaW5wdXQsIGRhdGFbMF0sIHNrLm4pOworKyAgICAqcmVzdWx0ID0gbXBpX2FsbG9jX3NlY3VyZSAobXBpX2dldF9ubGltYnMgKHNrLm4pKTsKKysgICAgc2VjcmV0ICgqcmVzdWx0LCBpbnB1dCwgJnNrKTsKKysgICAgbXBpX2ZyZWUgKGlucHV0KTsKKyAgICAgcmV0dXJuIDA7CisgfQorIAorSW5kZXg6IGdudXBnLTEuNC43L2cxMC9ncGd2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2cxMC9ncGd2LmMJMjAwNi0xMi0xMyAxOToyNTowNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9nMTAvZ3Bndi5jCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMzkwLDYgKzM5MCw3IEBACisgdm9pZCByYW5kb21fZHVtcF9zdGF0cyh2b2lkKSB7fQorIGludCBxdWlja19yYW5kb21fZ2VuKCBpbnQgb25vZmYgKSB7IHJldHVybiAtMTt9Cisgdm9pZCByYW5kb21pemVfYnVmZmVyKCBieXRlICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCApIHt9Cisrdm9pZCByYW5kb21pemVfbXBpIChNUEkgbXBpLCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCkge30KKyBpbnQgcmFuZG9tX2lzX2Zha2VkKCkgeyByZXR1cm4gLTE7fQorIGJ5dGUgKmdldF9yYW5kb21fYml0cyggc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwsIGludCBzZWN1cmUgKSB7IHJldHVybiBOVUxMO30KKyB2b2lkIHNldF9yYW5kb21fc2VlZF9maWxlKCBjb25zdCBjaGFyICpuYW1lICkge30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWQ5YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0dudVBHMS1DVkUtMjAxMi02MDg1LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK2NvbW1pdCBmMGIzM2I2ZmI4ZTA1ODZlOTU4NGE3YTQwOWRjYzMxMjYzNzc2YTY3CitBdXRob3I6IFdlcm5lciBLb2NoIDx3a0BnbnVwZy5vcmc+CitEYXRlOiAgIFRodSBEZWMgMjAgMDk6NDM6NDEgMjAxMiArMDEwMAorCisgICAgZ3BnOiBJbXBvcnQgb25seSBwYWNrZXRzIHdoaWNoIGFyZSBhbGxvd2VkIGluIGEga2V5YmxvY2suCisgICAgCisgICAgKiBnMTAvaW1wb3J0LmMgKHZhbGlkX2tleWJsb2NrX3BhY2tldCk6IE5ldy4KKyAgICAocmVhZF9ibG9jayk6IFN0b3JlIG9ubHkgdmFsaWQgcGFja2V0cy4KKyAgICAtLQorICAgIAorICAgIEEgY29ycnVwdGVkIGtleSwgd2hpY2ggZm9yIGV4YW1wbGUgaW5jbHVkZWQgYSBtYW5nbGVkIHB1YmxpYyBrZXkKKyAgICBlbmNyeXB0ZWQgcGFja2V0LCB1c2VkIHRvIGNvcnJ1cHQgdGhlIGtleXJpbmcuICBUaGlzIGNoYW5nZSBza2lwcyBhbGwKKyAgICBwYWNrZXRzIHdoaWNoIGFyZSBub3QgYWxsb3dlZCBpbiBhIGtleWJsb2NrLgorICAgIAorICAgIEdudVBHLWJ1Zy1pZDogMTQ1NQorICAgIAorICAgIChjaGVycnktcGlja2VkIGZyb20gY29tbWl0IGY3OTVhMGQ1OWUxOTc0NTVmODcyM2MzMDBlZWJmNTllMDk4NTNlZmEpCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZzEwL2ltcG9ydC5jIGIvZzEwL2ltcG9ydC5jCitpbmRleCBiZmUwMmViLi5hNTdiMzJlIDEwMDY0NAorLS0tIGEvZzEwL2ltcG9ydC5jCisrKysgYi9nMTAvaW1wb3J0LmMKK0BAIC0zODQsNiArMzg0LDI3IEBAIGltcG9ydF9wcmludF9zdGF0cyAodm9pZCAqaGQpCisgfQorIAorIAorKy8qIFJldHVybiB0cnVlIGlmIFBLVFRZUEUgaXMgdmFsaWQgaW4gYSBrZXlibG9jay4gICovCisrc3RhdGljIGludAorK3ZhbGlkX2tleWJsb2NrX3BhY2tldCAoaW50IHBrdHR5cGUpCisreworKyAgc3dpdGNoIChwa3R0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUEtUX1BVQkxJQ19LRVk6CisrICAgIGNhc2UgUEtUX1BVQkxJQ19TVUJLRVk6CisrICAgIGNhc2UgUEtUX1NFQ1JFVF9LRVk6CisrICAgIGNhc2UgUEtUX1NFQ1JFVF9TVUJLRVk6CisrICAgIGNhc2UgUEtUX1NJR05BVFVSRToKKysgICAgY2FzZSBQS1RfVVNFUl9JRDoKKysgICAgY2FzZSBQS1RfQVRUUklCVVRFOgorKyAgICBjYXNlIFBLVF9SSU5HX1RSVVNUOgorKyAgICAgIHJldHVybiAxOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiAwOworKyAgICB9CisrfQorKworKworIC8qKioqKioqKioqKioqKioqCisgICogUmVhZCB0aGUgbmV4dCBrZXlibG9jayBmcm9tIHN0cmVhbSBBLgorICAqIFBFTkRJTkdfUEtUIHNob3VsZCBiZSBpbml0aWFsemVkIHRvIE5VTEwKK0BAIC00NjEsNyArNDgyLDcgQEAgcmVhZF9ibG9jayggSU9CVUYgYSwgUEFDS0VUICoqcGVuZGluZ19wa3QsIEtCTk9ERSAqcmV0X3Jvb3QgKQorIAkgICAgfQorIAkgICAgaW5fY2VydCA9IDE7CisgCSAgZGVmYXVsdDoKKy0JICAgIGlmKCBpbl9jZXJ0ICkgeworKwkgICAgaWYgKGluX2NlcnQgJiYgdmFsaWRfa2V5YmxvY2tfcGFja2V0IChwa3QtPnBrdHR5cGUpKSB7CisgCQlpZiggIXJvb3QgKQorIAkJICAgIHJvb3QgPSBuZXdfa2Jub2RlKCBwa3QgKTsKKyAJCWVsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwNWFjNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnbnVwZy0xLjQuNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdudXBnLTEuNC43L2NvbmZpZ3VyZS5hYworQEAgLTgyNyw3ICs4MjcsNiBAQCBlbHNlCisgICBBQ19TVUJTVChVU0VfTkxTKQorICAgQUNfU1VCU1QoVVNFX0lOQ0xVREVEX0xJQklOVEwpCisgICBBQ19TVUJTVChCVUlMRF9JTkNMVURFRF9MSUJJTlRMKQorLSAgQU1fUE9fU1VCRElSUworIGZpCisgCisgaWYgdGVzdCAiJHRyeV9leHRlbnNpb25zIiA9IHllcyB8fCB0ZXN0IHgiJGNhcmRfc3VwcG9ydCIgPSB4eWVzIDsgdGhlbgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2N1cmxfdHlwZW9mX2ZpeF9iYWNrcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWZiMjRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorCitUaGlzIGhhcyBiZWVuIGRpc2N1c3NlZCBpbiBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgYnVnIHJlcG9ydGVkCit1cHN0cmVhbToKKworaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTQ4NjI1MAoraHR0cDovL2J1Z3Muc291cmNlbWFnZS5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDQ2CisKK0ZpeDoKK2h0dHA6Ly9saXN0cy5nbnVwZy5vcmcvcGlwZXJtYWlsL2dudXBnLWRldmVsLzIwMDgtQXByaWwvMDI0MzQ0Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbRGViaWFuXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnbnVwZy0xLjQuNy9rZXlzZXJ2ZXIvZ3Bna2V5c19jdXJsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworKysrIGdudXBnLTEuNC43L2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworQEAgLTI4Niw3ICsyODYsNyBAQCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9WRVJCT1NFLDEpOworICAgICB9CisgCistICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUixvcHQtPmZsYWdzLmNoZWNrX2NlcnQpOworKyAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsKGxvbmcpb3B0LT5mbGFncy5jaGVja19jZXJ0KTsKKyAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX0NBSU5GTyxvcHQtPmNhX2NlcnRfZmlsZSk7CisgCisgICBpZihwcm94eSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9sb25nLWxvbmctdGh1bWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1NWNhYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK09yaWduYWwgUGF0Y2ggY2FtZSBmcm9tIE9wZW5XcnQgdmlhIE9FLUNsYXNzaWMKK2h0dHBzOi8vZGV2Lm9wZW53cnQub3JnL2Jyb3dzZXIvcGFja2FnZXMvdXRpbHMvZ251cGcvcGF0Y2hlcy8wMDEtbWlwc19nY2M0LjQKK3doaWNoIGlzIG5vIGxvbmdlciBhIHZhbGlkIHJldmlzaW9uIQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKworLS0tIGdudXBnL21waS9sb25nbG9uZy5ofiAgICAgIDIwMDYtMDItMTQgMTA6MDk6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZ251cGcvbXBpL2xvbmdsb25nLmggICAgICAgMjAwOC0xMC0yNyAxMzoxMTowOS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xODEsNyArMTgxLDcgQEAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqICBBUk0gICoqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyCisrI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyICYmICFkZWZpbmVkKF9fdGh1bWJfXykKKyAjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICAgX19hc21fXyAoImFkZHMgJTEsICU0LCAlNVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAiYWRjICAlMCwgJTIsICUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L21pcHNfZ2NjNC40LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9taXBzX2djYzQuNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTAzYjJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9taXBzX2djYzQuNC5wYXRjaApAQCAtMCwwICsxLDUwIEBACisKK0Zyb20gT3BlbmVtYmVkZGVkLUNsYXNzaWMKKworICAgIGdudXBnLTEuNC4xMDogUmVhZGQgdGhlIEFSTSBUaHVtYiBwYXRjaCBhcyBkZWJpYW4gaGFzIG5vIHRodW1iIHN1cHBvcnQKKworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkLXNwZWNpZmljXQorCitJbmRleDogZ251cGctMS40LjEwL21waS9sb25nbG9uZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40LjEwLm9yaWcvbXBpL2xvbmdsb25nLmgJMjAwOC0xMi0xMSAxNzozOTo0My4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbnVwZy0xLjQuMTAvbXBpL2xvbmdsb25nLmgJMjAxMC0wMy0yNyAxNDoyNzo1My4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MDYsMTggKzcwNiwzNSBAQAorICNlbmRpZiAvKiBfX204ODExMF9fICovCisgI2VuZGlmIC8qIF9fbTg4MDAwX18gKi8KKyAKKysvKiBUZXN0IGZvciBnY2MgPj0gbWFqLm1pbiwgYXMgcGVyIF9fR05VQ19QUkVSRVEgaW4gZ2xpYmMgKi8KKysjaWYgZGVmaW5lZCAoX19HTlVDX18pICYmIGRlZmluZWQgKF9fR05VQ19NSU5PUl9fKQorKyNkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgXAorKwkoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKKysjZWxzZQorKyNkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgIDAKKysjZW5kaWYKKysKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqICBNSVBTICAqKioqKioqKioqKioqKioqKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgI2lmIGRlZmluZWQgKF9fbWlwc19fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorLSNpZiBfX0dOVUNfXyA+IDIgfHwgX19HTlVDX01JTk9SX18gPj0gNworKyNpZiBfX0dOVUNfUFJFUkVRICg0LDQpCisrI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisrICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCVVESXR5cGUgX19sbCA9IChVREl0eXBlKSh1KSAqICh2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXcxID0gX19sbCA+PiAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXcwID0gX19sbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IHdoaWxlICgwKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKSAmJiBfX0dOVUNfUFJFUkVRICgyLDcpCisgI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgICBfX2FzbV9fICgibXVsdHUgJTIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICA6ICI9bCIgKChVU0l0eXBlKSh3MCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICI9aCIgKChVU0l0eXBlKSh3MSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICA6ICJkIiAoKFVTSXR5cGUpKHUpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkgICAgICJkIiAoKFVTSXR5cGUpKHYpKSkKKy0jZWxzZQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCAodW11bF9wcG1tKQorICNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICAgX19hc21fXyAoIm11bHR1ICUyLCUzIFxuIiBcCisgCSAgICJtZmxvICUwIFxuIiAgICAgXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZjE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL2Rpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogZ251cGctMi4xLjAvZGlybW5nci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTIuMS4wLm9yaWcvZGlybW5nci9NYWtlZmlsZS5hbQorKysrIGdudXBnLTIuMS4wL2Rpcm1uZ3IvTWFrZWZpbGUuYW0KK0BAIC03OCw3ICs3OCw4IEBAIGVuZGlmCisgZGlybW5ncl9MREFERCA9ICQobGliY29tbW9udGxzbnB0aCkgJChsaWJjb21tb25wdGgpIFwKKyAgICAgICAgICQoRE5TTElCUykgJChMSUJBU1NVQU5fTElCUykgXAorIAkkKExJQkdDUllQVF9MSUJTKSAkKEtTQkFfTElCUykgJChOUFRIX0xJQlMpIFwKKy0JJChOVEJUTFNfTElCUykgJChMSUJHTlVUTFNfTElCUykgJChMSUJJTlRMKSAkKExJQklDT05WKQorKwkkKE5UQlRMU19MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQklOVEwpICQoTElCSUNPTlYpIFwKKysJJChHUEdfRVJST1JfTElCUykKKyBpZiBVU0VfTERBUAorIGRpcm1uZ3JfTERBREQgKz0gJChsZGFwbGlicykKKyBlbmRpZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU4NjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw5MCBAQAorVXNlIHBrZy1jb25maWcgdG8gZmluZCBwdGggaW5zdGVhZCBvZiBwdGgtY29uZmlnLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorW25vdCBzdWJtaXR0ZWQgYnV0IHRoZXkndmUgYmVlbiBjbGVhciB0aGV5IGRvbid0IHdhbnQgYSBwa2ctY29uZmlnIGRlcGVuZGVuY3ldCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogZ251cGctMi4xLjAvbTQvZ251cGctcHRoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9tNC9nbnVwZy1wdGgubTQKKysrKyBnbnVwZy0yLjEuMC9tNC9nbnVwZy1wdGgubTQKK0BAIC0xNywzMyArMTcsOSBAQCBkbmwgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAjIFRha2VuIGFuZCBtb2RpZmllZCBmcm9tIHRoZSBtNCBtYWNyb3Mgd2hpY2ggY29tZSB3aXRoIFB0aC4KKyBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICAgWworLSAgICBfcHRoX3ZlcnNpb249YCRQVEhfQ09ORklHIC0tdmVyc2lvbiB8IGF3ayAnTlI9PTEge3ByaW50IFskXTN9J2AKKyAgICAgX3JlcV92ZXJzaW9uPSJpZmVsc2UoWyQxXSwsMS4yLjAsJDEpIgorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhQVEgsIFtwdGggPj0gJF9yZXFfdmVyc2lvbl0sIFtoYXZlX3B0aD15ZXNdLCBbaGF2ZV9wdGg9bm9dKQorIAorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFBUSCAtIHZlcnNpb24gPj0gJF9yZXFfdmVyc2lvbikKKy0gICAgZm9yIF92YXIgaW4gX3B0aF92ZXJzaW9uIF9yZXFfdmVyc2lvbjsgZG8KKy0gICAgICAgIGV2YWwgIl92YWw9XCJcJCR7X3Zhcn1cIiIKKy0gICAgICAgIF9tYWpvcj1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wxLydgCistICAgICAgICBfbWlub3I9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMi8nYAorLSAgICAgICAgX3J0eXBlPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgICAgIF9taWNybz1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1w0LydgCistICAgICAgICBjYXNlICRfcnR5cGUgaW4KKy0gICAgICAgICAgICAiYSIgKSBfcnR5cGU9MCA7OworLSAgICAgICAgICAgICJiIiApIF9ydHlwZT0xIDs7CistICAgICAgICAgICAgIi4iICkgX3J0eXBlPTIgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIF9oZXg9YGVjaG8gZHVtbXkgfCBhd2sgJ3sgcHJpbnRmKCIlZCUwMmQlMWQlMDJkIiwgbWFqb3IsIG1pbm9yLCBydHlwZSwgbWljcm8pOyB9JyBcCistICAgICAgICAgICAgICAibWFqb3I9JF9tYWpvciIgIm1pbm9yPSRfbWlub3IiICJydHlwZT0kX3J0eXBlIiAibWljcm89JF9taWNybyJgCistICAgICAgICBldmFsICIke192YXJ9X2hleD1cIlwkX2hleFwiIgorLSAgICBkb25lCistICAgIGhhdmVfcHRoPW5vCistICAgIGlmIHRlc3QgIi4kX3B0aF92ZXJzaW9uX2hleCIgIT0gLjsgdGhlbgorLSAgICAgICAgaWYgdGVzdCAiLiRfcmVxX3ZlcnNpb25faGV4IiAhPSAuOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAkX3B0aF92ZXJzaW9uX2hleCAtZ2UgJF9yZXFfdmVyc2lvbl9oZXg7IHRoZW4KKy0gICAgICAgICAgICAgICAgaGF2ZV9wdGg9eWVzCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCisgICAgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgUFRIIGluc3RhbGxhdGlvbiBpcyBzYW5lXSkKK0BAIC01MSw5ICsyNyw5IEBAIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2NmbGFncz0kQ0ZMQUdTCisgICAgICAgICAgX2dudXBnX3B0aF9zYXZlX2xkZmxhZ3M9JExERkxBR1MKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGlicz0kTElCUworLSAgICAgICAgIENGTEFHUz0iJENGTEFHUyBgJFBUSF9DT05GSUcgLS1jZmxhZ3NgIgorLSAgICAgICAgIExERkxBR1M9IiRMREZMQUdTIGAkUFRIX0NPTkZJRyAtLWxkZmxhZ3NgIgorLSAgICAgICAgIExJQlM9IiRMSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnMgLS1hbGxgIgorKyAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIX0NGTEFHUyIKKysgICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAkUFRIX0xERkxBR1MiCisrICAgICAgICAgTElCUz0iJExJQlMgJFBUSF9MSUJTIgorICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxwdGguaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWyBwdGhfaW5pdCAoKTtdXSldLAorQEAgLTgwLDI2ICs1NiwxMyBAQCBBQ19ERUZVTihbR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0tdLAorICMgUFRIX0NMRkFHUyBhbmQgUFRIX0xJQlMgYXJlIEFTX1NVQlNULgorICMKKyBBQ19ERUZVTihbR05VUEdfUEFUSF9QVEhdLAorLVsgQUNfQVJHX1dJVEgocHRoLXByZWZpeCwKKy0gICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1wdGgtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBHTlUgUHRoIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBwdGhfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBwdGhfY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRwdGhfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAgUFRIX0NPTkZJRz0iJHB0aF9jb25maWdfcHJlZml4L2Jpbi9wdGgtY29uZmlnIgorLSAgZmkKKy0gIEFDX1BBVEhfUFJPRyhQVEhfQ09ORklHLCBwdGgtY29uZmlnLCBubykKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxLjMuNywkMSkKKy0gIGlmIHRlc3QgIiRQVEhfQ09ORklHIiAhPSAibm8iOyB0aGVuCistICAgIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKCR0bXApCistICAgIGlmIHRlc3QgJGhhdmVfcHRoID0geWVzOyB0aGVuICAgICAgCistICAgICAgIFBUSF9DRkxBR1M9YCRQVEhfQ09ORklHIC0tY2ZsYWdzYAorLSAgICAgICBQVEhfTElCUz1gJFBUSF9DT05GSUcgLS1sZGZsYWdzYAorLSAgICAgICBQVEhfTElCUz0iJFBUSF9MSUJTIGAkUFRIX0NPTkZJRyAtLWxpYnMgLS1hbGxgIgorLSAgICAgICBBQ19ERUZJTkUoSEFWRV9QVEgsIDEsCisrICBHTlVQR19QVEhfVkVSU0lPTl9DSEVDSygkdG1wKQorKyAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKysgICAgICBBQ19ERUZJTkUoSEFWRV9QVEgsIDEsCisgICAgICAgICAgICAgICAgIFtEZWZpbmVkIGlmIHRoZSBHTlUgUHRoIGlzIGF2YWlsYWJsZV0pCistICAgIGZpCisgICBmaQorICAgQUNfU1VCU1QoUFRIX0NGTEFHUykKKyAgIEFDX1NVQlNUKFBUSF9MSUJTKQorIF0pCistCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZGJmMWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDcyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5lbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBnbnVwZy0yLjEuMC9tNC9ucHRoLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9tNC9ucHRoLm00CisrKysgZ251cGctMi4xLjAvbTQvbnB0aC5tNAorQEAgLTE3LDEwICsxNywxMCBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTlBUSF9DT05GSUddLAorICAgaWYgdGVzdCAieCRucHRoX2NvbmZpZ19wcmVmaXgiICE9IHggOyB0aGVuCisgICAgICAgTlBUSF9DT05GSUc9IiRucHRoX2NvbmZpZ19wcmVmaXgvYmluL25wdGgtY29uZmlnIgorICAgZmkKKy0gIEFDX1BBVEhfUFJPRyhOUFRIX0NPTkZJRywgbnB0aC1jb25maWcsIG5vKQorKyAgQUNfUEFUSF9QUk9HKFBLR0NPTkZJRywgcGtnLWNvbmZpZywgbm8pCisgCistICBpZiB0ZXN0ICIkTlBUSF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIG5wdGhfdmVyc2lvbj1gJE5QVEhfQ09ORklHIC0tdmVyc2lvbmAKKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisrICAgIG5wdGhfdmVyc2lvbj1gJFBLR0NPTkZJRyAtLW1vZHZlcnNpb24gbnB0aGAKKyAgIGZpCisgICBucHRoX3ZlcnNpb25fbWFqb3I9YGVjaG8gJG5wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorQEAgLTQ1LDcgKzQ1LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgCisgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIE5QVEggLSB2ZXJzaW9uID49ICRtaW5fbnB0aF92ZXJzaW9uKQorICAgb2s9bm8KKy0gIGlmIHRlc3QgIiROUFRIX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKysgIGlmIHRlc3QgIiRQS0dDT05GSUciICE9ICJubyIgOyB0aGVuCisgICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX25wdGhfdmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKyAgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbnB0aF92ZXJzaW9uIHwgXAorQEAgLTY2LDI4ICs2Niw5IEBAIEFDX0RFRlVOKFtBTV9QQVRIX05QVEhdLAorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIEFDX01TR19SRVNVTFQoW3llcyAoJG5wdGhfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgTlBUSCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKy0gICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCistICAgICBpZiB0ZXN0ICIkcmVxX25wdGhfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJE5QVEhfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorLSAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCistICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW05QVEggQVBJIHZlcnNpb25dKQorLSAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ucHRoX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KKy0gICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbb2theV0pCistICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgIG9rPW5vCistICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW2RvZXMgbm90IG1hdGNoLiB3YW50PSRyZXFfbnB0aF9hcGkgZ290PSR0bXBdKQorLSAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIE5QVEhfQ0ZMQUdTPWAkTlBUSF9DT05GSUcgLS1jZmxhZ3NgCistICAgIE5QVEhfTElCUz1gJE5QVEhfQ09ORklHIC0tbGlic2AKKysgICAgTlBUSF9DRkxBR1M9YCRQS0dDT05GSUcgLS1jZmxhZ3MgbnB0aGAKKysgICAgTlBUSF9MSUJTPWAkUEtHQ09ORklHIC0tbGlicyBucHRoYAorKyAgICBBQ19NU0dfV0FSTihbW0dPVCBIRVJFIC0gJE5QVEhfTElCUyBdXSkKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgbnB0aF9jb25maWdfaG9zdD1gJE5QVEhfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisgICAgIGlmIHRlc3QgeCIkbnB0aF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCitAQCAtMTAzLDYgKzg0LDcgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKysgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgTlBUSF9DRkxBR1M9IiIKKyAgICAgTlBUSF9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTk5ZjgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18xLjQuNy5iYgpAQCAtMCwwICsxLDEwNSBAQAorU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCitERVBFTkRTID0gInpsaWIgYnppcDIgcmVhZGxpbmUiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitQUiA9ICJyOSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9nbnVwZy9nbnVwZy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xvbmctbG9uZy10aHVtYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWlwc19nY2M0LjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3VybF90eXBlb2ZfZml4X2JhY2twb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDEzLTQzNTEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTMtNDU3Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxMy00MjQyLnBhdGNoIFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gImIwNmExNDFjY2E1Y2QxYTU1YmJkZDI1YWI4MzMzMDNjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5ZDE4YjdkMTkzZjYyY2EyN2VkNGZlYmNiNGM5MDQ0YWEwYzk1MzA1ZDMyNThmZTkwMmUyZmFlNWZjNjQ2OGQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCisjICAgLS13aXRoLWVnZC1zb2NrZXQ9TkFNRSAgdXNlIE5BTUUgZm9yIHRoZSBFR0Qgc29ja2V0CisjICAgLS13aXRoLXBob3RvLXZpZXdlcj1GSVhFRF9WSUVXRVIgIHNldCBhIGZpeGVkIHBob3RvIElEIHZpZXdlcgorIyAgIC0td2l0aC1pbmNsdWRlZC16bGliICAgIHVzZSB0aGUgemxpYiBjb2RlIGluY2x1ZGVkIGhlcmUKKyMgICAtLXdpdGgtY2FwYWJpbGl0aWVzICAgICB1c2UgbGludXggY2FwYWJpbGl0aWVzIGRlZmF1bHQ9bm8KKyMgICAtLXdpdGgtbWFpbHByb2c9TkFNRSAgICB1c2UgIk5BTUUgLXQiIGZvciBtYWlsIHRyYW5zcG9ydAorIyAgIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyMgICAtLXdpdGhvdXQtbGliaWNvbnYtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmljb252IGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorIyAgIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0IHVzZSB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpbmNsdWRlZCBoZXJlCisjICAgLS13aXRoLWxpYmludGwtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmludGwgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKyMgICAtLXdpdGhvdXQtbGliaW50bC1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaW50bCBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKKyMgICAtLXdpdGhvdXQtcmVhZGxpbmUgICAgICBkbyBub3Qgc3VwcG9ydCBmYW5jeSBjb21tYW5kIGxpbmUgZWRpdGluZworIyAgIC0td2l0aC1pbmNsdWRlZC1yZWdleCAgIHVzZSB0aGUgaW5jbHVkZWQgR05VIHJlZ2V4IGxpYnJhcnkKKyMgICAtLXdpdGgtemxpYj1ESVIgICAgICAgICB1c2UgbGlieiBpbiBESVIKKyMgICAtLXdpdGgtYnppcDI9RElSICAgICAgICBsb29rIGZvciBiemlwMiBpbiBESVIKKyMgICAtLWVuYWJsZS1zdGF0aWMtcm5kPWVnZHx1bml4fGxpbnV4fGF1dG8KKyMgICAtLWRpc2FibGUtZGV2LXJhbmRvbSAgICBkaXNhYmxlIHRoZSB1c2Ugb2YgZGV2IHJhbmRvbQorIyAgIC0tZGlzYWJsZS1hc20gICAgICAgICAgIGRvIG5vdCB1c2UgYXNzZW1ibGVyIG1vZHVsZXMKKyMgICAtLWVuYWJsZS1tLWd1YXJkICAgICAgICBlbmFibGUgbWVtb3J5IGd1YXJkIGZhY2lsaXR5CisjICAgLS1lbmFibGUtc2VsaW51eC1zdXBwb3J0CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlIFNFTGludXggc3VwcG9ydAorIyAgIC0tZGlzYWJsZS1jYXJkLXN1cHBvcnQgIGRpc2FibGUgT3BlblBHUCBjYXJkIHN1cHBvcnQKKyMgICAtLWRpc2FibGUtZ251cGctaWNvbnYgICBkaXNhYmxlIHRoZSBuZXcgaWNvbnYgY29kZQorIyAgIC0tZW5hYmxlLWJhY2tzaWdzICAgICAgIGVuYWJsZSB0aGUgZXhwZXJpbWVudGFsIGJhY2tzaWdzIGNvZGUKKyMgICAtLWVuYWJsZS1taW5pbWFsICAgICAgICBidWlsZCB0aGUgc21hbGxlc3QgZ3BnIGJpbmFyeSBwb3NzaWJsZQorIyAgIC0tZGlzYWJsZS1yc2EgICAgICAgICAgIGRpc2FibGUgdGhlIFJTQSBwdWJsaWMga2V5IGFsZ29yaXRobQorIyAgIC0tZGlzYWJsZS1pZGVhICAgICAgICAgIGRpc2FibGUgdGhlIElERUEgY2lwaGVyCisjICAgLS1kaXNhYmxlLWNhc3Q1ICAgICAgICAgZGlzYWJsZSB0aGUgQ0FTVDUgY2lwaGVyCisjICAgLS1kaXNhYmxlLWJsb3dmaXNoICAgICAgZGlzYWJsZSB0aGUgQkxPV0ZJU0ggY2lwaGVyCisjICAgLS1kaXNhYmxlLWFlcyAgICAgICAgICAgZGlzYWJsZSB0aGUgQUVTLCBBRVMxOTIsIGFuZCBBRVMyNTYgY2lwaGVycworIyAgIC0tZGlzYWJsZS10d29maXNoICAgICAgIGRpc2FibGUgdGhlIFRXT0ZJU0ggY2lwaGVyCisjICAgLS1kaXNhYmxlLXNoYTI1NiAgICAgICAgZGlzYWJsZSB0aGUgU0hBLTI1NiBkaWdlc3QKKyMgICAtLWRpc2FibGUtc2hhNTEyICAgICAgICBkaXNhYmxlIHRoZSBTSEEtMzg0IGFuZCBTSEEtNTEyIGRpZ2VzdHMKKyMgICAtLWRpc2FibGUtYnppcDIgICAgICAgICBkaXNhYmxlIHRoZSBCWklQMiBjb21wcmVzc2lvbiBhbGdvcml0aG0KKyMgICAtLWRpc2FibGUtZXhlYyAgICAgICAgICBkaXNhYmxlIGFsbCBleHRlcm5hbCBwcm9ncmFtIGV4ZWN1dGlvbgorIyAgIC0tZGlzYWJsZS1waG90by12aWV3ZXJzIGRpc2FibGUgcGhvdG8gSUQgdmlld2VycworIyAgIC0tZGlzYWJsZS1rZXlzZXJ2ZXItaGVscGVycyAgZGlzYWJsZSBhbGwgZXh0ZXJuYWwga2V5c2VydmVyIHN1cHBvcnQKKyMgICAtLWRpc2FibGUtbGRhcCAgICAgICAgICBkaXNhYmxlIExEQVAga2V5c2VydmVyIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1oa3AgICAgICAgICAgIGRpc2FibGUgSEtQIGtleXNlcnZlciBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtaHR0cCAgICAgICAgICBkaXNhYmxlIEhUVFAga2V5IGZldGNoaW5nIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1maW5nZXIgICAgICAgIGRpc2FibGUgRmluZ2VyIGtleSBmZXRjaGluZyBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUtbWFpbHRvICAgICAgICBkaXNhYmxlIGVtYWlsIGtleXNlcnZlciBpbnRlcmZhY2UKKyMgICAtLWRpc2FibGUta2V5c2VydmVyLXBhdGggZGlzYWJsZSB0aGUgZXhlYy1wYXRoIG9wdGlvbiBmb3Iga2V5c2VydmVyIGhlbHBlcnMKKyMgICAtLWVuYWJsZS1rZXktY2FjaGU9U0laRSBTZXQga2V5IGNhY2hlIHRvIFNJWkUgKGRlZmF1bHQgNDA5NikKKyMgICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisjICAgLS1kaXNhYmxlLWRucy1zcnYgICAgICAgZGlzYWJsZSB0aGUgdXNlIG9mIEROUyBTUlYgaW4gSEtQIGFuZCBIVFRQCisjICAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIyAgIC0tZGlzYWJsZS1yZWdleCAgICAgICAgIGRvIG5vdCBoYW5kbGUgcmVndWxhciBleHByZXNzaW9ucyBpbiB0cnVzdCBzaWdzCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCBcCisJCS0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS13aXRoLWJ6aXAyPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS1kaXNhYmxlLXNlbGludXgtc3VwcG9ydCBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJlYWRsaW5lPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICBhY19jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmU9bm8gXAorCQkiCisKKyMgRm9yY2UgZ2NjJ3MgdHJhZGl0aW9uYWwgaGFuZGxpbmcgb2YgaW5saW5lIHRvIGF2b2lkIGlzc3VlcyB3aXRoIGdjYyA1CitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0KKwltdiAke0R9JHtkYXRhZGlyfS8ke0JQTn0vKiAke0R9LyR7ZG9jZGlyfS8ke0JQTn0vIHx8IDoKKwltdiAke0R9JHtwcmVmaXh9L2RvYy8qICR7RH0vJHtkb2NkaXJ9LyR7QlBOfS8gfHwgOgorfQorCisjIHNwbGl0IG91dCBncGd2IGZyb20gbWFpbiBwYWNrYWdlCitSREVQRU5EU18ke1BOfSA9ICJncGd2IgorUEFDS0FHRVMgPSsgImdwZ3YiCitGSUxFU19ncGd2ID0gIiR7YmluZGlyfS9ncGd2IgorCisjIEV4Y2x1ZGUgZGVidWcgZmlsZXMgZnJvbSB0aGUgbWFpbiBwYWNrYWdlcworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJleGVjZGlyfS8ke0JQTn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS8ke0JQTn0vLmRlYnVnIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjdXJsXSA9ICItLXdpdGgtbGliY3VybD0ke1NUQUdJTkdfTElCRElSfSwtLXdpdGhvdXQtbGliY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tsaWJ1c2JdID0gIi0td2l0aC1saWJ1c2I9JHtTVEFHSU5HX0xJQkRJUn0sLS13aXRob3V0LWxpYnVzYixsaWJ1c2ItY29tcGF0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhjN2M5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMi4xLjcuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJHTlUgUHJpdmFjeSBHdWFyZCAtIGVuY3J5cHRpb24gYW5kIHNpZ25pbmcgdG9vbHMgKDIueCkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy8iCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorCitERVBFTkRTID0gIm5wdGggbGliYXNzdWFuIGxpYmtzYmEgemxpYiBiemlwMiByZWFkbGluZSBsaWJnY3J5cHQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwa2djb25maWcKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYmRmOTJiMTViOGJjZDg1NzliNjQzYzdmNDFhMzIzOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMThhMzc3NmQ0N2ZlYzk4ODkyZDUxZDI4YjY1NzRlZjE2YmYwYTI1ZWFiYjA5NTYyMzEwNThhYWYyZTc4NDZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWxkYXAgXAorCQktLWRpc2FibGUtY2NpZC1kcml2ZXIgXAorCQktLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisJCS0td2l0aC1iemlwMj0ke1NUQUdJTkdfTElCRElSfS8uLiBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJlYWRsaW5lPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBpbmVudHJ5IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVybmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00CisJcm0gLWYgJHtTfS9tNC9saWJhc3N1YW4ubTQKKwlybSAtZiAke1N9L200L2tzYmEubTQKKwlybSAtZiAke1N9L200L2xpYmdjcnlwdC5tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlsbiAtc2YgZ3BnMiAke0R9JHtiaW5kaXJ9L2dwZworCWxuIC1zZiBncGd2MiAke0R9JHtiaW5kaXJ9L2dwZ3YKK30KKworUkRFUEVORFNfJHtQTn0gPSAiZ251dGxzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliMTM4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy5pbmMKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHTlUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IExpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ251dGxzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL3N1cHBvcnQvP2dyb3VwPWdudXRscyIKK0RFUEVORFMgPSAibmV0dGxlIgorCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS14eCA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCitMSUNFTlNFXyR7UE59LW9wZW5zc2wgPSAiR1BMdjMrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCisKKworU0hSVF9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMV19IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnV0bHMub3JnL2djcnlwdC9nbnV0bHMvdiR7U0hSVF9WRVJ9L2dudXRscy0ke1BWfS50YXIueHoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnIHBrZ2NvbmZpZyBnZXR0ZXh0IGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORj0iLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWxpYnRhc24xIFwKKyAgICAgICAgICAgICAgLS1lbmFibGUtbG9jYWwtbGlib3B0cyBcCisgICAgICAgICAgICAgIC0td2l0aC1saWJwdGhyZWFkLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWd1aWxlIFwKKyAgICAgICAgICAgICAgLS1kaXNhYmxlLWNyeXdyYXAgXAorICAgICAgICAgICAgICAtLXdpdGhvdXQtcDExLWtpdCBcCisgICAgICAgICAgICAgICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZm9yIGRpciBpbiAuIGxpYjsgZG8KKwkJcm0gLWYgJHtkaXJ9L2FjbG9jYWwubTQgJHtkaXJ9L200L2xpYnRvb2wubTQgJHtkaXJ9L200L2x0Ki5tNAorCWRvbmUKK30KKworUEFDS0FHRUNPTkZJRyA/Pz0gInpsaWIiCitQQUNLQUdFQ09ORklHW3RwbV0gPSAiLS13aXRoLXRwbSwgLS13aXRob3V0LXRwbSwgdHJvdXNlcnMiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLCAtLXdpdGhvdXQtemxpYiwgemxpYiIKKworUEFDS0FHRVMgPSsgIiR7UE59LW9wZW5zc2wgJHtQTn0teHgiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2dudXRscy1jbGktZGVidWciCitGSUxFU18ke1BOfS1vcGVuc3NsID0gIiR7bGliZGlyfS9saWJnbnV0bHMtb3BlbnNzbC5zby4qIgorRklMRVNfJHtQTn0teHggPSAiJHtsaWJkaXJ9L2xpYmdudXRsc3h4LnNvLioiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjICs9ICIgLXB0aHJlYWQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvbmZpZ3VyZS5hYy1maXgtc2VkLWNvbW1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhOTkzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZWI5M2FhN2I5ODZjODRkYTYwYTNkYjQwYWZiMjlkMWE3MGM1MDIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAxNyBKYW4gMjAxNSAxNzowMjoxNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGZpeCBzZWQgY29tbWFuZAorCitUaGUgInNlZCAncy8uYmFrLy9nJyIgbWF0Y2hzICJiaXRiYWtlIiwgd2hpY2ggd291bGQgY2F1c2Ugc3RyYW5nZSBlcnJvcnMKK3doZW4gdGhlIFMgY29udGFpbnMgImJpdGJha2UiLCBmaXggdG8gInNlZCAncy9cLmJhayQvLydgIgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGM2ODE4YTAuLjFjNDU4MmQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQ2Niw3ICs0NjYsNyBAQCBpZiB0ZXN0ICIkTkVFRF9MSUJPUFRTX0RJUiIgPSAidHJ1ZSI7dGhlbgorIAlkbmwgcmVwbGFjZSBsaWJvcHRzLWdlbmVyYXRlZCBmaWxlcyB3aXRoIGRpc3RyaWJ1dGVkIGJhY2t1cHMsIGlmIHByZXNlbnQKKyAJbWlzc2luZ19iYWtzPQorIAlmb3IgaSBpbiAke3NyY2Rpcn0vc3JjLyotYXJncy5jLmJhayAke3NyY2Rpcn0vc3JjLyotYXJncy5oLmJhazsgZG8KKy0JCW5hbT1gZWNobyAkaXxzZWQgJ3MvLmJhay8vZydgCisrCQluYW09YGVjaG8gJGl8c2VkICdzL1wuYmFrJC8vJ2AKKyAJCWlmIHRlc3QgLWYgJGk7dGhlbgorIAkJCWNwIC1mICRpICRuYW0KKyAJCWVsc2UKKy0tIAorMi4wLjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ1MmM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBhZTMzNzA3ODhlZDM0NDdiYmExNjk2OWQ5ZWIxYmYxYjk2MzFlMWI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVmFsZW50aW4gUG9wYSA8dmFsZW50aW4ucG9wYUBpbnRlbC5jb20+CitEYXRlOiBGcmksIDI1IEFwciAyMDE0IDEzOjU4OjU1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIENvcnJlY3QgcnBsX2dldHRpbWVvZmRheSBzaWduYXR1cmUKKworQ3VycmVudGx5IHdlIGZhaWwgb24gdWNsaWJjIGxpa2UgYmVsb3cKKworfCBJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy9wcm9jZnMuaDozMjowLAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oOjI2LAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjM5MiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3NpZ25hbC5oOjUyLAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2wvc3lzL3NlbGVjdC5oOjU4LAorfCAgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLXVjbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oOjIyMCwKK3wgICAgICAgICAgICAgICAgICBmcm9tIC4uLy4uL2dsL3N5cy90eXBlcy5oOjI4LAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vbGliL2luY2x1ZGVzL2dudXRscy9nbnV0bHMuaDo0NiwKK3wgICAgICAgICAgICAgICAgICBmcm9tIGV4LWN4eC5jcHA6MzoKK3wgLi4vLi4vZ2wvc3lzL3RpbWUuaDozOTY6NjY6IGVycm9yOiBjb25mbGljdGluZyBkZWNsYXJhdGlvbiAndm9pZCogcmVzdHJpY3QnCit8IC4uLy4uL2dsL3N5cy90aW1lLmg6Mzk2OjUwOiBlcnJvcjogJ3Jlc3RyaWN0JyBoYXMgYSBwcmV2aW91cyBkZWNsYXJhdGlvbiBhcyAndGltZXZhbCogcmVzdHJpY3QnCit8IG1ha2VbNF06ICoqKiBbZXgtY3h4Lm9dIEVycm9yIDEKK3wgbWFrZVs0XTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KKworR0NDIGRldGVjdHMgdGhhdCB3ZSBjYWxsICdyZXN0cmljdCcgYXMgcGFyYW0gbmFtZSBpbiBmdW5jdGlvbgorc2lnbmF0dXJlcyBhbmQgY29tcGxhaW5zIHNpbmNlIGJvdGggcGFyYW1zIGFyZSBjYWxsZWQgJ3Jlc3RyaWN0JwordGhlcmVmb3JlIHdlIHVzZSBfX3Jlc3RyaWN0IHRvIGRlbm90ZSB0aGUgQzk5IGtleXdvcmsKKworVGhpcyBvbmx5IGhhcHBlbnMgb2YgdWNsaWJjIHNpbmNlIHRoaXMgY29kZSBpcyBub3QgZXhjZXJjaXNlZCB3aXRoCitlZ2xpYmMgb3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSBzYW1lIGlzc3VlIHRoZXJlIHRvbworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdsL3N5c190aW1lLmluLmggfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dsL3N5c190aW1lLmluLmggYi9nbC9zeXNfdGltZS5pbi5oCitpbmRleCA4NGExN2M5Li42Y2VhZGMzIDEwMDY0NAorLS0tIGEvZ2wvc3lzX3RpbWUuaW4uaAorKysrIGIvZ2wvc3lzX3RpbWUuaW4uaAorQEAgLTkzLDIwICs5MywyMCBAQCBzdHJ1Y3QgdGltZXZhbAorICMgICBkZWZpbmUgZ2V0dGltZW9mZGF5IHJwbF9nZXR0aW1lb2ZkYXkKKyAjICBlbmRpZgorIF9HTF9GVU5DREVDTF9SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KQorKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkKKyAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIF9HTF9DWFhBTElBU19SUEwgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KSk7CisgIyBlbHNlCisgIyAgaWYgIUBIQVZFX0dFVFRJTUVPRkRBWUAKKyBfR0xfRlVOQ0RFQ0xfU1lTIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKnJlc3RyaWN0LCB2b2lkICpyZXN0cmljdCkKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpCisgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKyAjICBlbmRpZgorIC8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBzeXN0ZW1zLCBieSBkZWZhdWx0LCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXpvbmUgKi4gICovCisgX0dMX0NYWEFMSUFTX1NZU19DQVNUIChnZXR0aW1lb2ZkYXksIGludCwKKy0gICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZ2V0dGltZW9mZGF5KTsKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFiN2M4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL3VzZS1wa2ctY29uZmlnLXRvLWxvY2F0ZS16bGliLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gY2VlODBhZjFmZTkzZjViNzY3NjVhZmVlYmZjYzNiOTAyNzY4ZjVkNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI2IE1heSAyMDE1IDIxOjQxOjI0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzZSBwa2ctY29uZmlnIHRvIGxvY2F0ZSB6bGliCisKK0FDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gc29tZXRpbWVzIGZpbmQgaG9zdCBsaWJzIGFuZCBpcyB0aGVyZWZvcmUgbm90Cityb2J1c3Qgd2hlbiBjcm9zcy1jb21waWxpbmcuIFJlbW92ZSBpdCBmb3IgemxpYiBhbmQgdXNlIFBLR19DSEVDS19NT0RVTEVTCitpbnN0ZWFkLgorCitSZW1vdmluZyBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgZm9yIHpsaWIgYWxzbyByZW1vdmVzIHRoZSAtLXdpdGgtbGliei1wcmVmaXgKK2NvbmZpZ3VyZSBvcHRpb24uIElmIHpsaWIgc3VwcG9ydCBpcyBlbmFibGVkLCB0aGVuIGZhaWx1cmUgdG8gZmluZCB6bGliIHZpYQorcGtnLWNvbmZpZyBpcyBub3cgdHJlYXRlZCBhcyBhIGZhdGFsIGVycm9yLgorCitDaGFuZ2UgYmFzZWQgb24gQ2hyb21lT1MgZ251dGxzIDIuMTIuMjMgY3Jvc3MtY29tcGlsZSBmaXhlcyBwYXRjaDoKKworICBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tLyMvYy8yNzE2NjEvCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI0ICsrKysrKysrKystLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMWI1NjFkNS4uMGM3ODdkYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTA4LDI1ICs1MDgsMjEgQEAgQUNfQVJHX1dJVEgoemxpYiwgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC16bGliXSwKKyBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gaW5jbHVkZSB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnRdKQorIGlmIHRlc3QgeCRhY196bGliICE9IHhubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKy0gQUNfTElCX0hBVkVfTElOS0ZMQUdTKHosLCBbI2luY2x1ZGUgPHpsaWIuaD5dLCBbY29tcHJlc3MgKDAsIDAsIDAsIDApO10pCistIGlmIHRlc3QgeCRhY19jdl9saWJ6ICE9IHh5ZXM7IHRoZW4KKy0gICBBQ19NU0dfV0FSTigKKy0qKiogCistKioqIFpMSUIgd2FzIG5vdCBmb3VuZC4gWW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIFpMSUIgY29tcHJlc3Npb24uKQorLSBmaQorIGVsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyBmaQorIAorLVBLR19DSEVDS19FWElTVFMoemxpYiwgWkxJQl9IQVNfUEtHQ09ORklHPXksIFpMSUJfSEFTX1BLR0NPTkZJRz1uKQorLQorIGlmIHRlc3QgeCRhY196bGliICE9IHhubzsgdGhlbgorLSAgaWYgdGVzdCAiJFpMSUJfSEFTX1BLR0NPTkZJRyIgPSAieSIgOyB0aGVuCistICAgIGlmIHRlc3QgIngkR05VVExTX1JFUVVJUkVTX1BSSVZBVEUiID0geDsgdGhlbgorLSAgICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSJSZXF1aXJlcy5wcml2YXRlOiB6bGliIgorLSAgICBlbHNlCistICAgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IiRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSwgemxpYiIKKy0gICAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKFpMSUIsIHpsaWIpCisrICBIQVZFX0xJQlo9eWVzCisrICBBQ19ERUZJTkUoW0hBVkVfTElCWl0sIFsxXSwgW3psaWIgaXMgZW5hYmxlZF0pCisrICBBQ19TVUJTVChIQVZFX0xJQlopCisrICBMVExJQlo9JFpMSUJfTElCUworKyAgQUNfU1VCU1QoTFRMSUJaKQorKyAgaWYgdGVzdCAieCRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSIgPSB4OyB0aGVuCisrICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSJSZXF1aXJlcy5wcml2YXRlOiB6bGliIgorKyAgZWxzZQorKyAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iJEdOVVRMU19SRVFVSVJFU19QUklWQVRFLCB6bGliIgorICAgZmkKKyBmaQorIEFDX1NVQlNUKEdOVVRMU19SRVFVSVJFU19QUklWQVRFKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy4zLjE3LjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy4zLjE3LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4NTc5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRsc18zLjMuMTcuMS5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgZ251dGxzLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmFjLWZpeC1zZWQtY29tbWFuZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiOGQwMWM3ZTdmMmNiYzU4NzFmZGNhODMyZDIyNjBiNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQwZjE1ODAzMGE5MmY0NTBhMDdiMjAzMDBhMzk5NjcxMGNhMTk4MDA4NDhkOWY2ZmQ2MjQ5MzE3MGM1YmJiNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjODlmMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbSBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbQorLS0tIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtCTIwMTItMDktMjQgMTU6MDg6NDIuMDAwMDAwMDAwICswMzAwCisrKysgbGlidGFzbjEtMi4xNC9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wMS0wMyAwNzozNToyNi43MDI3NjM0MDMgKzAyMDAKK0BAIC0zMSw3ICszMSw3IEBACisgQU1fTUFLRUlORk9IVE1MRkxBR1MgPSAkKEFNX01BS0VJTkZPRkxBR1MpIFwKKwktLW5vLXNwbGl0IC0tbnVtYmVyLXNlY3Rpb25zIC0tY3NzLWluY2x1ZGU9dGV4aW5mby5jc3MKKworLWRpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykgYXNuMVBhcnNlci4xIGFzbjFDb2RpbmcuMSBhc24xRGVjb2RpbmcuMQorK2Rpc3RfbWFuX01BTlMgPSAkKGdkb2NfTUFOUykKKworIEhFTFAyTUFOX09QVFMgPSAtLWluZm8tcGFnZSBsaWJ0YXNuMQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NzQ1NzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9saWJ0YXNuMV80LjUuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBBU04uMSBhbmQgREVSIG1hbmlwdWxhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0YXNuMS8iCisKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfS1iaW4gPSAiR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2VuZGxpbmU9ODttZDU9YzM4MDNhM2U4Y2E1YWI1ZWIxZTU5MTJmYWE0MDUzNTEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0YXNuMS9saWJ0YXNuMS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MWQyNzI2OTc1NDVlODJkMzlmNmJkMTQ4NTRiNjhmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OWIzYjVkY2UxMTkyNzM0MzE1NDRlY2IzMDUwODFmMzUzMDkxMTAwMWJiMTJlNWQ3NjU4ODkwN2VkYjcxYmRhIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZyBsaWJfcGFja2FnZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvZ3BnbWUucGMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL2dwZ21lLnBjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYTRkNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lL2dwZ21lLnBjCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD0vdXNyCitsaWJkaXI9JHtwcmVmaXh9L2xpYgoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitOYW1lOiBncGdtZQorRGVzY3JpcHRpb246IEdOVSBQcml2YWN5IEd1YXJkIE1hZGUgRWFzeQorVmVyc2lvbjogMS40LjMKK1JlcXVpcmVzOgorTGliczogLUwke2xpYmRpcn0gLWxncGdtZSAtbGFzc3VhbiAtbGdwZy1lcnJvcgorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmMWY0ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjc5IEBACitVcGRhdGUgZ3BnbWUgdG8gdXNlIHBrZ2NvbmZpZyBpbnN0ZWFkIG9mIC1jb25maWcgZmlsZXMgc2luY2UgaXRzCitzaW1wbGVyIGFuZCBsZXNzIGVycm9yIHByb25lIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbVXBzdHJlYW0gbm90IGludGVyZXN0ZWQgaW4gcGtnLWNvbmZpZyBzdXBwb3J0XQorUlAgMjAxNS80LzE3CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI5OGEyMmIuLmM3NzhiNjEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYyMiw2ICs2MjIsNyBAQCBBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUgc3JjL01ha2VmaWxlCisgICAgICAgICAgICAgICAgIHNyYy92ZXJzaW9uaW5mby5yYworICAgICAgICAgICAgICAgICBzcmMvZ3BnbWUuaCkKKyBBQ19DT05GSUdfRklMRVMoc3JjL2dwZ21lLWNvbmZpZywgY2htb2QgK3ggc3JjL2dwZ21lLWNvbmZpZykKKytBQ19DT05GSUdfRklMRVMoc3JjL2dwZ21lLnBjIHNyYy9ncGdtZS1wdGhyZWFkLnBjKQorIEFDX0NPTkZJR19GSUxFUyhbbGFuZy9NYWtlZmlsZSBsYW5nL2NsL01ha2VmaWxlIGxhbmcvY2wvZ3BnbWUuYXNkXSkKKyBBQ19PVVRQVVQKKyAKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDU4OTIyZjkuLjQwZDBkY2EgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTIwLDExICsyMCwxMyBAQAorIAorICMgTm90ZTogbW9jX2tkcGlwZWlvZGV2aWNlIHNob3VsZCBhY3R1YWxseSBiZSBhIGRlcGVuZGVjeSBiZWxvdy4KKyBFWFRSQV9ESVNUID0gZ3BnbWUtY29uZmlnLmluIGdwZ21lLm00IGxpYmdwZ21lLnZlcnMgQ2hhbmdlTG9nLTIwMTEgXAorLQkgICAgIGdwZ21lLmguaW4gdmVyc2lvbmluZm8ucmMuaW4gZ3BnbWUuZGVmIG1vY19rZHBpcGVpb2RldmljZS5jcHAKKysJICAgICBncGdtZS5oLmluIHZlcnNpb25pbmZvLnJjLmluIGdwZ21lLmRlZiBtb2Nfa2RwaXBlaW9kZXZpY2UuY3BwIGdwZ21lLnBjLmluIGdwZ21lLXB0aHJlYWQucGMuaW4KKyAKKyBiaW5fU0NSSVBUUyA9IGdwZ21lLWNvbmZpZworIG00ZGF0YWRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAorIG00ZGF0YV9EQVRBID0gZ3BnbWUubTQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBncGdtZS5wYyBncGdtZS1wdGhyZWFkLnBjCisgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IGdwZ21lLmgKKyAKKyBiaW5fUFJPR1JBTVMgPSBncGdtZS10b29sCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4gYi9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk4MGE0OGUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluCitAQCAtMCwwICsxLDE1IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBHUEdNRV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AR1BHTUVfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnbWUKKytEZXNjcmlwdGlvbjogR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBDIGxhbmd1YWdlIGxpYnJhcnkgdGhhdCBhbGxvd3MgdG8gYWRkc3VwcG9ydCBmb3IgY3J5cHRvZ3JhcGh5IHRvIGEgcHJvZ3JhbSAodGhyZWFkZWQgdmVyc2lvbikKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lLXB0aHJlYWQgLWxwdGhyZWFkCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKytSZXF1aXJlczogbGliYXNzdWFuIGdwZy1lcnJvcgorZGlmZiAtLWdpdCBhL3NyYy9ncGdtZS5tNCBiL3NyYy9ncGdtZS5tNAoraW5kZXggNmMyYmU0NC4uZDhhNzVjYiAxMDA2NDQKKy0tLSBhL3NyYy9ncGdtZS5tNAorKysrIGIvc3JjL2dwZ21lLm00CitAQCAtNzksNyArNzksNyBAQCBkbmwgY29uZmlnIHNjcmlwdCBkb2VzIG5vdCBtYXRjaCB0aGUgaG9zdCBzcGVjaWZpY2F0aW9uIHRoZSBzY3JpcHQKKyBkbmwgaXMgYWRkZWQgdG8gdGhlIGdwZ19jb25maWdfc2NyaXB0X3dhcm4gdmFyaWFibGUuCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorLVsgQUNfUkVRVUlSRShbX0FNX1BBVEhfR1BHTUVfQ09ORklHXSlkbmwKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuNC4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2dwZ21lX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC04OSwzNiArODksMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorICAgICAgbWluX2dwZ21lX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBHUEdNRSAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUUsIFtncGdtZSA+PSAkbWluX2dwZ21lX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMTI3LDE5ICsxMDMsMTEgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVdLAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdNRV9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS1jZmxhZ3NgCistICAgIEdQR01FX0xJQlM9YCRHUEdNRV9DT05GSUcgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfQ0ZMQUdTPSIiCistICAgIEdQR01FX0xJQlM9IiIKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCistICBBQ19TVUJTVChHUEdNRV9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9MSUJTKQorIF0pCisgCisgZG5sIEFNX1BBVEhfR1BHTUVfUFRIUkVBRChbTUlOSU1VTS1WRVJTSU9OLAorQEAgLTE0OCw3ICsxMTYsNyBAQCBkbmwgVGVzdCBmb3IgbGliZ3BnbWUgYW5kIGRlZmluZSBHUEdNRV9QVEhSRUFEX0NGTEFHUworIGRubCAgYW5kIEdQR01FX1BUSFJFQURfTElCUy4KKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKy1bIEFDX1JFUVVJUkUoW19BTV9QQVRIX0dQR01FX0NPTkZJR10pZG5sCisrWworICAgdG1wPWlmZWxzZShbJDFdLCAsMTowLjQuMiwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9ncGdtZV9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtMTU4LDM4ICsxMjYsMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIHB0aHJlYWQgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICBpZiBgJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIDI+IC9kZXYvbnVsbGAgOyB0aGVuCistICAgICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgICByZXFfbWljcm89YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICAgIGZpCistICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHTUVfUFRIUkVBRCwgW2dwZ21lLXB0aHJlYWQgPj0gJG1pbl9ncGdtZV92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IEdQR01FLCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfZ3BnbWVfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJEdQR01FX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBncGdtZS1wdGhyZWFkIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMTk4LDE5ICsxNDAsMTEgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfUFRIUkVBRF0sCisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR01FX1BUSFJFQURfQ0ZMQUdTPWAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgLS1jZmxhZ3NgCistICAgIEdQR01FX1BUSFJFQURfTElCUz1gJEdQR01FX0NPTkZJRyAtLXRocmVhZD1wdGhyZWFkIC0tbGlic2AKKy0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCisgICBlbHNlCistICAgIEdQR01FX1BUSFJFQURfQ0ZMQUdTPSIiCistICAgIEdQR01FX1BUSFJFQURfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX1BUSFJFQURfQ0ZMQUdTKQorLSAgQUNfU1VCU1QoR1BHTUVfUFRIUkVBRF9MSUJTKQorIF0pCisgCisgCitAQCAtMjI5LDM2ICsxNjMsMTIgQEAgQUNfREVGVU4oW0FNX1BBVEhfR1BHTUVfR0xJQl0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRV9HTElCLCBbZ3BnbWUgPj0gJG1pbl9ncGdtZV92ZXJzaW9uIGdsaWItMi4wXSwgW29rPXllc10sIFtvaz1ub10pICAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1uZSAiJHRtcCIgOyB0aGVuCisgICAgICAgICAgICAgIG9rPW5vCitAQCAtMjY3LDE3ICsxNzcsOSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9HTElCXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHTUVfR0xJQl9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS1nbGliIC0tY2ZsYWdzYAorLSAgICBHUEdNRV9HTElCX0xJQlM9YCRHUEdNRV9DT05GSUcgLS1nbGliIC0tbGlic2AKKy0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICAgIF9BTV9QQVRIX0dQR01FX0NPTkZJR19IT1NUX0NIRUNLCisgICBlbHNlCistICAgIEdQR01FX0dMSUJfQ0ZMQUdTPSIiCistICAgIEdQR01FX0dMSUJfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX0dMSUJfQ0ZMQUdTKQorLSAgQUNfU1VCU1QoR1BHTUVfR0xJQl9MSUJTKQorIF0pCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLnBjLmluIGIvc3JjL2dwZ21lLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjY5NTM5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dwZ21lLnBjLmluCitAQCAtMCwwICsxLDE1IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrIyBBUEkgaW5mbworK2FwaV92ZXJzaW9uPUBHUEdNRV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AR1BHTUVfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnbWUKKytEZXNjcmlwdGlvbjogR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBDIGxhbmd1YWdlIGxpYnJhcnkgdGhhdCBhbGxvd3MgdG8gYWRkc3VwcG9ydCBmb3IgY3J5cHRvZ3JhcGh5IHRvIGEgcHJvZ3JhbS4KKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKytSZXF1aXJlczogbGliYXNzdWFuIGdwZy1lcnJvcgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjUuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTk4Mzc3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZV8xLjUuNC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkhpZ2gtbGV2ZWwgR251UEcgZW5jcnlwdGlvbi9zaWduaW5nIEFQSSIKK0RFU0NSSVBUSU9OID0gIkdudVBHIE1hZGUgRWFzeSAoR1BHTUUpIGlzIGEgbGlicmFyeSBkZXNpZ25lZCB0byBtYWtlIGFjY2VzcyB0byBHbnVQRyBlYXNpZXIgZm9yIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlkZXMgYSBIaWdoLUxldmVsIENyeXB0byBBUEkgZm9yIGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIHNpZ25pbmcsIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gYW5kIGtleSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvZ3BnbWUuaHRtbCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3BnbWUuaC5pbjtlbmRsaW5lPTIzO21kNT03MWJhMmFlOGQ2Y2EwMzRlZDEwYmQwOTlhOGNmNDczYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZW5naW5lLmg7ZW5kbGluZT0yMjttZDU9NGI2ZDhiYTMxM2Q5YjU2NGNjNGQ0Y2ZiMTY0MGFmOWQiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ3BnbWUvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9ncGdtZS5wYyBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZlYWZhMDNlYTA2NGUxZDFkYzExYmMyYjg4NDA0NjIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiMzhjMGVjODgxNWM5ZTk0ZTYwNDdiNDg0OTg0ODA4YThkYWQ5ZDZiZWM4ZGYzM2RjNTMzOWZkNTVmZmVhNmMiCisKK0RFUEVORFMgPSAibGliZ3BnLWVycm9yIGxpYmFzc3VhbiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ncGdtZS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitQQUNLQUdFUyA9KyAiJHtQTn0tcHRocmVhZCIKK0ZJTEVTXyR7UE59LXB0aHJlYWQgPSAiJHtsaWJkaXJ9L2xpYmdwZ21lLXB0aHJlYWQuc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jb21tb24tbGlzcC9zb3VyY2UvZ3BnbWUvKiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKKwlybSAtZiAke1N9L200L2xpYmFzc3Vhbi5tNAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZ3BnbWUucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzZmMjIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LmluYwpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkludGVybmF0aW9uYWwgQ29tcG9uZW50IGZvciBVbmljb2RlIGxpYnJhcmllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBJbnRlcm5hdGlvbmFsIENvbXBvbmVudCBmb3IgVW5pY29kZSAoSUNVKSBpcyBhIG1hdHVyZSwgXAorcG9ydGFibGUgc2V0IG9mIEMvQysrIGFuZCBKYXZhIGxpYnJhcmllcyBmb3IgVW5pY29kZSBzdXBwb3J0LCBzb2Z0d2FyZSBcCitpbnRlcm5hdGlvbmFsaXphdGlvbiAoSTE4TikgYW5kIGdsb2JhbGl6YXRpb24gKEcxMU4pLCBnaXZpbmcgYXBwbGljYXRpb25zIHRoZSBcCitzYW1lIHJlc3VsdHMgb24gYWxsIHBsYXRmb3Jtcy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2l0ZS5pY3UtcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIklDVSIKK0RFUEVORFMgPSAiaWN1LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworUyA9ICIke1dPUktESVJ9L2ljdS9zb3VyY2UiCitTUERYX1MgPSAiJHtXT1JLRElSfS9pY3UiCitTVEFHSU5HX0lDVV9ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vJHtCUE59LyR7UFZ9IgorCitDUFBGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EVV9USU1FWk9ORT0wIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2ljdS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWcKKworIyBJQ1UgbmVlZHMgdGhlIG5hdGl2ZSBidWlsZCBkaXJlY3RvcnkgYXMgYW4gYXJndW1lbnQgdG8gaXRzIC0td2l0aC1jcm9zcy1idWlsZCBvcHRpb24gd2hlbgorIyBjcm9zcy1jb21waWxpbmcuIFRha2VuIHRoZSBzaXR1YXRpb24gdGhhdCBkaWZmZXJlbnQgYnVpbGRzIG1heSBzaGFyZSBhIGNvbW1vbiBzc3RhdGUtY2FjaGUKKyMgaW50byBjb25zaWRlcmF0aW9uLCB0aGUgbmF0aXZlIGJ1aWxkIGRpcmVjdG9yeSBuZWVkcyB0byBiZSBzdGFnZWQuCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWNyb3NzLWJ1aWxkPSR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0iCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRoLWNyb3NzLWJ1aWxkPSR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0iCisKK1BSRVBST0NFU1NfUkVMT0NBVEVfRElSUyA9ICIke2RhdGFkaXJ9LyR7QlBOfS8ke1BWfSIKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlta2RpciAtcCAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9jb25maWcvaWN1Y3Jvc3MubWsgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9L2NvbmZpZworCWNwIC1yICR7Qn0vY29uZmlnL2ljdWNyb3NzLmluYyAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9saWIgJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9CisJY3AgLXIgJHtCfS9iaW4gJHtEfS8ke1NUQUdJTkdfSUNVX0RJUl9OQVRJVkV9CisJY3AgLXIgJHtCfS90b29scyAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0KK30KKworUEFDS0FHRVMgPSsgImxpYmljdWRhdGEgbGliaWN1dWMgbGliaWN1aTE4biBsaWJpY3VsZSBsaWJpY3VseCBsaWJpY3V0dSBsaWJpY3VpbyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyIKKworRklMRVNfbGliaWN1ZGF0YSA9ICIke2xpYmRpcn0vbGliaWN1ZGF0YS5zby4qIgorRklMRVNfbGliaWN1dWMgPSAiJHtsaWJkaXJ9L2xpYmljdXVjLnNvLioiCitGSUxFU19saWJpY3VpMThuID0gIiR7bGliZGlyfS9saWJpY3VpMThuLnNvLioiCitGSUxFU19saWJpY3VsZSA9ICIke2xpYmRpcn0vbGliaWN1bGUuc28uKiIKK0ZJTEVTX2xpYmljdWx4ID0gIiR7bGliZGlyfS9saWJpY3VseC5zby4qIgorRklMRVNfbGliaWN1dHUgPSAiJHtsaWJkaXJ9L2xpYmljdXR1LnNvLioiCitGSUxFU19saWJpY3VpbyA9ICIke2xpYmRpcn0vbGliaWN1aW8uc28uKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjhkNTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvMDAwMS1EaXNhYmxlLUxERkxBR1NJQ1VEVC1mb3ItTGludXgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwYzgyZDZhYTAyYzA4ZTQxYjEzYzgzYjE0NzgyYmQ3MDI0ZTI1ZDU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTUgRmViIDIwMTQgMjE6MDY6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSBMREZMQUdTSUNVRFQgZm9yIExpbnV4CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIENvbmZpZ3VyYXRpb24gXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc291cmNlL2NvbmZpZy9taC1saW51eCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZy9taC1saW51eCBiL2NvbmZpZy9taC1saW51eAoraW5kZXggMzY2ZjBjYy4uMjY4OWFhYiAxMDA2NDQKKy0tLSBhL2NvbmZpZy9taC1saW51eAorKysrIGIvY29uZmlnL21oLWxpbnV4CitAQCAtMjEsNyArMjEsNyBAQCBMRF9SUEFUSD0gLVdsLC16b3JpZ2luLC1ycGF0aCwnJCQnT1JJR0lOCisgTERfUlBBVEhfUFJFID0gLVdsLC1ycGF0aCwKKyAKKyAjIyBUaGVzZSBhcmUgdGhlIGxpYnJhcnkgc3BlY2lmaWMgTERGTEFHUworLUxERkxBR1NJQ1VEVD0tbm9kZWZhdWx0bGlicyAtbm9zdGRsaWIKKysjIExERkxBR1NJQ1VEVD0tbm9kZWZhdWx0bGlicyAtbm9zdGRsaWIKKyAKKyAjIyBDb21waWxlciBzd2l0Y2ggdG8gZW1iZWQgYSBsaWJyYXJ5IG5hbWUKKyAjIFRoZSBpbml0aWFsIHRhYiBpbiB0aGUgbmV4dCBsaW5lIGlzIHRvIHByZXZlbnQgaWN1LWNvbmZpZyBmcm9tIHJlYWRpbmcgaXQuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDA2NTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UvaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3BrZ2RhdGEuY3BwOiB1c2UgTEFSR0VfQlVGRkVSX01BWF9TSVpFIGZvciBjbWQKKworVXNlIExBUkdFX0JVRkZFUl9NQVhfU0laRSBmb3IgY21kIHJhdGhlciB0aGFuIFNNQUxMX0JVRkZFUl9NQVhfU0laRSwKK290aGVyd2lzZSB0aGVyZSB3YXMgYSBTZWdtZW50YXRpb24gZmF1bHQgZXJyb3Igd2hlbiB0aGUgY29tbWFuZCBsaW5lIGlzCitsb25nLCB0aGlzIHNob3VsZCBiZSBhIG1pc3BsYXkgc2luY2Ugb3RoZXIgY21kIHVzZXMKK0xBUkdFX0JVRkZFUl9NQVhfU0laRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAgYi90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCistLS0gYS90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCisrKysgYi90b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwCitAQCAtMTAxOSw3ICsxMDE5LDcgQEAgbm9ybWFsX3N5bWxpbmtfbW9kZToKKyAKKyBzdGF0aWMgaW50MzJfdCBwa2dfaW5zdGFsbExpYnJhcnkoY29uc3QgY2hhciAqaW5zdGFsbERpciwgY29uc3QgY2hhciAqdGFyZ2V0RGlyLCBVQm9vbCBub1ZlcnNpb24pIHsKKyAgICAgaW50MzJfdCByZXN1bHQgPSAwOworLSAgICBjaGFyIGNtZFtTTUFMTF9CVUZGRVJfTUFYX1NJWkVdOworKyAgICBjaGFyIGNtZFtMQVJHRV9CVUZGRVJfTUFYX1NJWkVdOworIAorICAgICBzcHJpbnRmKGNtZCwgImNkICVzICYmICVzICVzICVzJXMlcyIsCisgICAgICAgICAgICAgdGFyZ2V0RGlyLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81NS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2M2E5YmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIGljdS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbGljZW5zZS5odG1sO21kNT02NGVmZjRhYWRmZjRkMTA0ZDZkNDM3YzRmZGUwZTZkNyIKKworZGVmIGljdV9kb3dubG9hZF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAiXyIgKyBwdnNwbGl0WzFdCisKK0lDVV9QViA9ICIke0BpY3VfZG93bmxvYWRfdmVyc2lvbihkKX0iCisKK0JBU0VfU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuaWN1LXByb2plY3Qub3JnL2ZpbGVzL2ljdTRjLyR7UFZ9L2ljdTRjLSR7SUNVX1BWfS1zcmMudGd6IgorU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAorICAgICAgICAgICBmaWxlOi8vaWN1LXBrZ2RhdGEtbGFyZ2UtY21kLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImUyZDUyM2RmNzlkNmNiNzg1NWMyZmJlMjg0ZjRkYjI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUxNmIyMmNiZWZkZDM1NGJlYzExNDU0MWY3ODQ5YTEyZjhmYzIwMTUzMjBjYTUyODJlZTRmZDc4NzU3MTQ1N2IiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pc28tY29kZXMvaXNvLWNvZGVzXzMuNTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMmU0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiSVNPIGxhbmd1YWdlLCB0ZXJyaXRvcnksIGN1cnJlbmN5LCBzY3JpcHQgY29kZXMgYW5kIHRoZWlyIHRyYW5zbGF0aW9ucyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKKworU1JDX1VSSSA9ICJodHRwczovL3BrZy1pc29jb2Rlcy5hbGlvdGguZGViaWFuLm9yZy9kb3dubG9hZHMvaXNvLWNvZGVzLSR7UFZ9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDA5N2EwMDg1ZjA5NzllMjhmOWRiNjZlYzI3NGM1ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4NmFmNTczNWRjZTZlNGVmZjJiOTgzZTVkOGFhOWEzZGVhMWI4ZGI3MDIzMzNmZjIwYmU4OWU0NWY3ZjM1YTcyIgorCisjIGluaGVyaXQgZ2V0dGV4dCBjYW5ub3QgYmUgdXNlZCwgYmVjYXVzZSBpdCBhZGRzIGdldHRleHQtbmF0aXZlIHRvIEJBU0VERVBFTkRTIHdoaWNoCisjIGFyZSBpbmhpYml0ZWQgYnkgYWxsYXJjaAorREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS94bWwvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW4vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmNjZGRhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBsaWJhc3N1YW4uCitUaGlzIHBhdGNoIGlzIHJlamVjdGVkIGJ5IHVwc3RyZWFtIGZvciB0aGUgcmVhc29uIGJlbG93OgorVGhleSB0aGluayBwa2djb25maWcgYWRkcyBubyBwb3J0YWJpbGl0eSBhbmQgbWFpbnRhaW5pbmcgdGhlbSBpcyBub3Qgd29ydGh3aGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFzc3Vhbi0yLjEuMi5vcmlnL01ha2VmaWxlLmFtCisrKysgbGliYXNzdWFuLTIuMS4yL01ha2VmaWxlLmFtCitAQCAtMjQsMTAgKzI0LDEzIEBAIEFVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyIG5vLWRpc3QtZ3oKKyAjIChBIHN1aXRhYmxlIGdpdGxvZy10by1jaGFuZ2Vsb2cgc2NyaXB0IGNhbiBiZSBmb3VuZCBpbiBHbnVQRyBtYXN0ZXIuKQorIEdJVExPR19UT19DSEFOR0VMT0c9Z2l0bG9nLXRvLWNoYW5nZWxvZworIAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGxpYmFzc3Vhbi5wYworKworIEVYVFJBX0RJU1QgPSBhdXRvZ2VuLnNoIGF1dG9nZW4ucmMgUkVBRE1FLkdJVCAgICAgICAgIAkgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBDaGFuZ2VMb2ctMjAxMSBkb2MvQ2hhbmdlTG9nLTIwMTEgc3JjL0NoYW5nZUxvZy0yMDExIAlcCisgICAgICAgICAgICAgIHRlc3RzL0NoYW5nZUxvZy0yMDExIGNvbnRyaWIvQ2hhbmdlTG9nLTIwMTEgICAgIAkJXAorLSAgICAgICAgICAgICBidWlsZC1hdXgvZ2l0LWxvZy1mb290ZXIgYnVpbGQtYXV4L2dpdC1sb2ctZml4CisrICAgICAgICAgICAgIGJ1aWxkLWF1eC9naXQtbG9nLWZvb3RlciBidWlsZC1hdXgvZ2l0LWxvZy1maXggbGliYXNzdWFuLnBjLmluCisgCisgU1VCRElSUyA9IG00IHNyYyBkb2MgdGVzdHMKKyAKK0luZGV4OiBsaWJhc3N1YW4tMi4xLjIvbGliYXNzdWFuLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliYXNzdWFuLTIuMS4yL2xpYmFzc3Vhbi5wYy5pbgorQEAgLTAsMCArMSwxNCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorK2FwaV92ZXJzaW9uPUBMSUJBU1NVQU5fQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QExJQkFTU1VBTl9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBsaWJhc3N1YW4KKytEZXNjcmlwdGlvbjogSVBDIGxpYnJhcnkgdXNlZCBieSBHbnVQRyBhbmQgR1BHTUUKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGFzc3VhbgorK0xpYnMucHJpdmF0ZTogLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhc3N1YW4tMi4xLjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJhc3N1YW4tMi4xLjIvY29uZmlndXJlLmFjCitAQCAtNDM5LDcgKzQzOSw3IEBAIEFDX0NPTkZJR19GSUxFUyhbZG9jL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMoW3Rlc3RzL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy9saWJhc3N1YW4tY29uZmlnXSwgW2NobW9kICt4IHNyYy9saWJhc3N1YW4tY29uZmlnXSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy92ZXJzaW9uaW5mby5yY10pCistCisrQUNfQ09ORklHX0ZJTEVTKFtsaWJhc3N1YW4ucGNdKQorIEFDX09VVFBVVAorIAorIGVjaG8gIgorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9zcmMvbGliYXNzdWFuLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXNzdWFuLTIuMS4yLm9yaWcvc3JjL2xpYmFzc3Vhbi5tNAorKysrIGxpYmFzc3Vhbi0yLjEuMi9zcmMvbGliYXNzdWFuLm00CitAQCAtMTUsMTggKzE1LDYgQEAgZG5sIFJldHVybnMgb2sgc2V0IHRvIHllcyBvciBuby4KKyBkbmwKKyBBQ19ERUZVTihbX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTl0sCisgWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19BUkdfV0lUSChsaWJhc3N1YW4tcHJlZml4LAorLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJhc3N1YW4tcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIExJQkFTU1VBTiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAgbGliYXNzdWFuX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgbGliYXNzdWFuX2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgkbGliYXNzdWFuX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgbGliYXNzdWFuX2NvbmZpZ19hcmdzPSIkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeCIKKy0gICAgaWYgdGVzdCB4JHtMSUJBU1NVQU5fQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICBMSUJBU1NVQU5fQ09ORklHPSRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeC9iaW4vbGliYXNzdWFuLWNvbmZpZworLSAgICBmaQorLSAgZmkKKy0KKy0gIEFDX1BBVEhfVE9PTChMSUJBU1NVQU5fQ09ORklHLCBsaWJhc3N1YW4tY29uZmlnLCBubykKKyAKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC45LjIsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCitAQCAtMzcsNTEgKzI1LDEyIEBAIEFDX0RFRlVOKFtfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKyAgICAgbWluX2xpYmFzc3Vhbl92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgTElCQVNTVUFOIC0gdmVyc2lvbiA+PSAkbWluX2xpYmFzc3Vhbl92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRMSUJBU1NVQU5fQ09ORklHIiAhPSAibm8iIFwKKy0gICAgICYmIHRlc3QgLWYgIiRMSUJBU1NVQU5fQ09ORklHIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fbGliYXNzdWFuX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0KKy0gICAgbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uPWAkTElCQVNTVUFOX0NPTkZJRyAtLXZlcnNpb25gCistICAgIG1ham9yPWBlY2hvICRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgbWljcm89YGVjaG8gJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wzLydgCistCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UgCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorLQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoTElCQVNTVUFOLCBbbGliYXNzdWFuID49ICRtaW5fbGliYXNzdWFuX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgIGlmIHRlc3QgIiRyZXFfbGliYXNzdWFuX2FwaSIgLWd0IDAgOyB0aGVuCisgICAgICAgdG1wPWAkTElCQVNTVUFOX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gbGliYXNzdWFuYAorICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtMSUJBU1NVQU4gQVBJIHZlcnNpb25dKQorICAgICAgICAgaWYgdGVzdCAiJHJlcV9saWJhc3N1YW5fYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorQEAgLTk2LDcgKzQ1LDcgQEAgQUNfREVGVU4oW19BTV9QQVRIX0xJQkFTU1VBTl9DT01NT05dLAorIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4IiRob3N0IiAhPSB4IDsgdGhlbgorLSAgICAgIGxpYmFzc3Vhbl9jb25maWdfaG9zdD1gJExJQkFTU1VBTl9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgICBsaWJhc3N1YW5fY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBsaWJhc3N1YW5gCisgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgICAgaWYgdGVzdCB4IiRsaWJhc3N1YW5fY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMzcsMTIgKzg2LDggQEAgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfTElCQVNTVUFOXSwKKyBbIF9BTV9QQVRIX0xJQkFTU1VBTl9DT01NT04oJDEpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBMSUJBU1NVQU5fQ0ZMQUdTPWAkTElCQVNTVUFOX0NPTkZJRyAkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBMSUJBU1NVQU5fTElCUz1gJExJQkFTU1VBTl9DT05GSUcgJGxpYmFzc3Vhbl9jb25maWdfYXJncyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCisgICBlbHNlCistICAgIExJQkFTU1VBTl9DRkxBR1M9IiIKKy0gICAgTElCQVNTVUFOX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChMSUJBU1NVQU5fQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuMi4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YWU0M2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW5fMi4yLjEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJJUEMgbGlicmFyeSB1c2VkIGJ5IEdudVBHIGFuZCBHUEdNRSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGliYXNzdWFuLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4uYztlbmRsaW5lPTIwO21kNT0wZjQ2NTU0NDE4MzQwNTA1NWVjMTc5ODY5ZmM1YjViYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYXNzdWFuLWRlZnMuaDtlbmRsaW5lPTIwO21kNT0yMGNkNTU1MzUyNjBjYTE3NzllZGFlNWM3YjgwYjIxZSIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliYXNzdWFuL2xpYmFzc3Vhbi0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjYyOTBlNzUwZWU4N2JlM2JmZDk1NzlmYzQ0YzZhMTg2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk0OTI4NWJiNzkzNDUzNjJjYjcyYTQwYzc5OGRlZmVmYzAwNzAzMWM2MGYyZjEwMjUxNzIwYmY2MGE5ZGUyZGUiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliYXNzdWFuLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC8qLm00Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDBlMjk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGF0b21pYyBpbnRlZ2VyIG9wZXJhdGlvbnMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vaXZtYWkvbGliYXRvbWljX29wcy8iCitTRUNUSU9OID0gIm9wdGlvbmFsIgorUFJPVklERVMgKz0gImxpYmF0b21pY3Mtb3BzIgorTElDRU5TRSA9ICJHUEx2MiAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvYy9MSUNFTlNJTkcudHh0O21kNT1lMDBkZDVjOGFjMDNhMTRjNWFlNTIyNWE0NTI1ZmEyZCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lml2bWFpc29mdC5jb20vX2Jpbi9hdG9taWNfb3BzL2xpYmF0b21pY19vcHMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQ2NTM4NjA0YjMxNGQyZmNjZGY4NjkxNWU1YzA4NTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDRmYTYxNWY2Mjk5MjU0N2JjYmRhNTYyMjYwZTI4YjUwNGJjNGMwNmUyZjk4NWYyNjdmM2FkZTMwMzA0YjVkZCIKKworUyA9ICIke1dPUktESVJ9L2xpYmF0b21pY19vcHMtJHtQVn0iCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyB0aG9zZSBjb250YWluIG9ubHkgZG9jcywgbm90IG5lY2Vzc2FyeSBmb3Igbm93LgorCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtkb2NkaXJ9CisJbXYgJHtEfSR7ZGF0YWRpcn0vbGliYXRvbWljX29wcyAke0R9JHtkb2NkaXJ9LyR7QlBOfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC43LjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyNjY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYnNkL2xpYmJzZF8wLjcuMC5iYgpAQCAtMCwwICsxLDIxIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCitTVU1NQVJZID0gIkxpYnJhcnkgb2YgdXRpbGl0eSBmdW5jdGlvbnMgZnJvbSBCU0Qgc3lzdGVtcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgbGlicmFyeSBwcm92aWRlcyB1c2VmdWwgZnVuY3Rpb25zIGNvbW1vbmx5IGZvdW5kIG9uIEJTRCBzeXN0ZW1zLCBcCisgICAgICAgICAgICAgICBhbmQgbGFja2luZyBvbiBvdGhlcnMgbGlrZSBHTlUgc3lzdGVtcywgdGh1cyBtYWtpbmcgaXQgZWFzaWVyIHRvIHBvcnQgXAorICAgICAgICAgICAgICAgcHJvamVjdHMgd2l0aCBzdHJvbmcgQlNEIG9yaWdpbnMsIHdpdGhvdXQgbmVlZGluZyB0byBlbWJlZCB0aGUgc2FtZSBcCisgICAgICAgICAgICAgICBjb2RlIG92ZXIgYW5kIG92ZXIgYWdhaW4gb24gZWFjaCBwcm9qZWN0LiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitMSUNFTlNFID0gIkJTRC00LUNsYXVzZSAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYxNTMwZWE5MmFlYWExYzVlMjU0N2NmZDQzOTA1ZDhjIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImZjY2ViNGU2NmZkNDQ4Y2E0ZWQ0MmJhMjJhOGJhYmIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBmM2IwZTE3ZTVjMzRjMDM4MTI2ZTBhMDQzNTFiMTFlMjNjNjEwMWE3ZDBjZTNiZWVhYjI5YmI2NDE1YzEwYmIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nL3B5dGhvbi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZy9weXRob24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1OTFlYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZy9weXRob24ucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSBiMDFiYjI2OTRmNjZjZDk4MWU2ZDYxNTIzNDMzZGMzZWI1ZWQzMmYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgeGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorRGF0ZTogU2F0LCAxOCBKdWwgMjAxNSAyMzowMzozMCArMDkwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWMgLSBBdm9pZCBhbiBpbmNvcnJlY3QgY2hlY2sgZm9yIHB5dGhvbi4KKyBNYWtlZmlsZS5hbSAtIGF2b2lkIGhhcmQgY29kZWQgaG9zdCBpbmNsdWRlIHBhdGhzLgorCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTGkgWGluIDxsaXhpbi5mbnN0QGNuLmZ1aml0c3UuY29tPgorLS0tCisgYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtIHwgIDMgKystCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgIHwgMTUgKystLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtIGIvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtCitpbmRleCA4MmI5YmI4Li5mOWZlN2E4IDEwMDY0NAorLS0tIGEvYmluZGluZ3MvcHl0aG9uL01ha2VmaWxlLmFtCisrKysgYi9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0KK0BAIC0yMyw3ICsyMyw4IEBAIFNVQkRJUlMgPSB0ZXN0CisgQ09ORklHX0NMRUFOX0ZJTEVTID0gKi5sb1QgKi5yZWogKi5vcmlnCisgQU1fQ0ZMQUdTID0gLWZQSUMgLURQSUMKKyBQWUxJQlZFUiA/PSBweXRob24kKFBZVEhPTl9WRVJTSU9OKQorLUFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpIC1JQFBZSU5DTFVERURJUkAKKytQWUlOQyA/PSAvdXNyL2luY2x1ZGUvJChQWUxJQlZFUikKKytBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX2J1aWxkZGlyKSAtSSQoUFlJTkMpCisgTElCUyA9ICQodG9wX2J1aWxkZGlyKS9zcmMvbGliY2FwLW5nLmxhCisgU1dJR19GTEFHUyA9IC1weXRob24KKyBTV0lHX0lOQ0xVREVTID0gJHtBTV9DUFBGTEFHU30KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDFkNzc3ZDUuLjlkOTBmNjQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyMywxOSArMTIzLDggQEAgaWYgdGVzdCB4JHVzZV9weXRob24gPSB4bm8gOyB0aGVuCisgZWxzZQorIEFDX01TR19SRVNVTFQodGVzdGluZykKKyBBTV9QQVRIX1BZVEhPTgorLVBZSU5DTFVERURJUj1gcHl0aG9uJHthbV9jdl9weXRob25fdmVyc2lvbn0gLWMgImZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSU5DTFVERVBZJykpImAKKy1pZiB0ZXN0IC1mICR7UFlJTkNMVURFRElSfS9QeXRob24uaCA7IHRoZW4KKy0JcHl0aG9uX2ZvdW5kPSJ5ZXMiCistCUFDX1NVQlNUKFBZSU5DTFVERURJUikKKy0JQUNfTVNHX05PVElDRShQeXRob24gYmluZGluZ3Mgd2lsbCBiZSBidWlsdCkKKy1lbHNlCistCXB5dGhvbl9mb3VuZD0ibm8iCistCWlmIHRlc3QgeCR1c2VfcHl0aG9uID0geHllcyA7IHRoZW4KKy0JCUFDX01TR19FUlJPUihbUHl0aG9uIGV4cGxpY2l0bHkgcmVxdWlyZWQgYW5kIHB5dGhvbiBoZWFkZXJzIGZvdW5kXSkKKy0JZWxzZQorLQkJQUNfTVNHX1dBUk4oIlB5dGhvbiBoZWFkZXJzIG5vdCBmb3VuZCAtIHB5dGhvbiBiaW5kaW5ncyB3aWxsIG5vdCBiZSBtYWRlIikKKy0JZmkKKy1maQorK3B5dGhvbl9mb3VuZD0ieWVzIgorK0FDX01TR19OT1RJQ0UoUHl0aG9uIGJpbmRpbmdzIHdpbGwgYmUgYnVpbHQpCisgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTiwgdGVzdCAke3B5dGhvbl9mb3VuZH0gPSAieWVzIikKKyAKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxZDVkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2FwLW5nL2xpYmNhcC1uZ18wLjcuNy5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkFuIGFsdGVybmF0ZSBwb3NpeCBjYXBhYmlsaXRpZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBsaWJjYXAtbmcgbGlicmFyeSBpcyBpbnRlbmRlZCB0byBtYWtlIHByb2dyYW1taW5nIFwKK3dpdGggUE9TSVggY2FwYWJpbGl0aWVzIG11Y2ggZWFzaWVyIHRoYW4gdGhlIHRyYWRpdGlvbmFsIGxpYmNhcCBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvbGliY2FwLW5nIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWUzZWRhMDFkOTgxNWY4ZDI0YWFlMmRiZDg5YjY4YjA2IgorCitTUkNfVVJJID0gImh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9zZ3J1YmIvbGliY2FwLW5nL2xpYmNhcC1uZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLnBhdGNoIgorCitpbmhlcml0IGxpYl9wYWNrYWdlIGF1dG90b29scyBweXRob25uYXRpdmUKKworU1JDX1VSSVttZDVzdW1dID0gIjNkN2QxMjZiMjllMjg2OWEwMjU3YzE3YzhiMGQ5YjJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxNTU0OWNlMzliMzMzZjZiNzhiYWVlMGMwYjRlZjE4YmM3MjZjNmJmMWNjYTEyM2RmZDg5ZGQ5NjNmNmQwNmIiCisKK0RFUEVORFMgKz0gInN3aWctbmF0aXZlIHB5dGhvbiIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtcHl0aG9uMyIKKworRVhUUkFfT0VNQUtFICs9ICJQWUxJQlZFUj0ncHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBQWUlOQz0nJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWUxJQlZFUn0nIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vKi8uZGVidWciCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92aW5nIGxpYmNhcC1uZyB0byBiYXNlX2xpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9LworCQltdiAtZiAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfS8KKwkJcmVscGF0aD0ke0Bvcy5wYXRoLnJlbHBhdGgoIiR7YmFzZV9saWJkaXJ9IiwgIiR7bGliZGlyfSIpfQorCQlsbiAtc2YgJHtyZWxwYXRofS9saWJjYXAtbmcuc28uMC4wLjAgJHtEfSR7bGliZGlyfS9saWJjYXAtbmcuc28KKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI5NGVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBnZXR0aW5nL3NldHRpbmcgUE9TSVguMWUgY2FwYWJpbGl0aWVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9mdWxseWNhcGFibGUvIgorCisjIG5vIHNwZWNpZmljIEdQTCB2ZXJzaW9uIHJlcXVpcmVkCitMSUNFTlNFID0gIkJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZTttZDU9M2Y4NGZkNmYyOWQ0NTNhNTY1MTRjYjdlNGVhZDI1ZjEiCisKK0RFUEVORFMgPSAicGVybC1uYXRpdmUtcnVudGltZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2xpYnMvc2VjdXJpdHkvbGludXgtcHJpdnMvJHtCUE59Mi8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDQzYWI5ZjY4MDQzNWE3ZmZmMzViNGFjZThkNDViODAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2VlNDU2OGY3OGRjODUxZDcyNmZjOTNmMjVmNGVkOTFjYzIyM2IxZmU4MjU5ZGFhNGE3NzE1OGQxNzRlNmM2NSIKKworaW5oZXJpdCBsaWJfcGFja2FnZQorCisjIGRvIE5PVCBwYXNzIHRhcmdldCBjZmxhZ3MgdG8gaG9zdCBjb21waWxhdGlvbnMKKyMKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIGxpYmNhcCB1c2VzIDo9IGZvciBjb21waWxlcnMsIGZvcnR1bmF0ZWx5LCBpdCBnaXZlcyB1cyBhIGhpbnQKKwkjIG9uIHdoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggPz0KKwlzZWQgLWUgJ3MsOj0sPz0sZycgLWkgTWFrZS5SdWxlcworCXNlZCAtZSAncyxeQlVJTERfQ0ZMQUdTID89ICQoLipDRkxBR1MpLEJVSUxEX0NGTEFHUyA6PSAkKEJVSUxEX0NGTEFHUyksJyAtaSBNYWtlLlJ1bGVzCisKKwkjIGRpc2FibGUgZ3BlcmYgZGV0ZWN0aW9uCisJc2VkIC1lICcvc2hlbGwgZ3BlcmYvY2lmZXEgKCx5ZXMpJyAtaSBsaWJjYXAvTWFrZWZpbGUKK30KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAnYXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gIiIKKworUEFDS0FHRUNPTkZJR1thdHRyXSA9ICJMSUJBVFRSPXllcyxMSUJBVFRSPW5vLGF0dHIiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiUEFNX0NBUD15ZXMsUEFNX0NBUD1ubyxsaWJwYW0iCisKK0VYVFJBX09FTUFLRSA9ICIgXAorICBJTkRFTlQ9ICBcCisgIGxpYj0ke0Bvcy5wYXRoLmJhc2VuYW1lKCcke2xpYmRpcn0nKX0gXAorICBSQUlTRV9TRVRGQ0FQPW5vIFwKKyAgRFlOQU1JQz15ZXMgXAorIgorCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgU1lTVEVNX0hFQURFUlM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKKyMgdGhlc2UgYXJlIHByZXNlbnQgaW4gdGhlIGxpYmNhcCBkZWZhdWx0cywgc28gaW5jbHVkZSBpbiBvdXIgQ0ZMQUdTIHRvbworQ0ZMQUdTICs9ICItRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlICR7RVhUUkFfT0VDT05GfQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBcCisJCSR7RVhUUkFfT0VDT05GfSBcCisJCURFU1RESVI9IiR7RH0iIFwKKwkJcHJlZml4PSIke3ByZWZpeH0iIFwKKwkJU0JJTkRJUj0iJHtEfSR7c2JpbmRpcn0iCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTW92ZSB0aGUgbGlicmFyeSB0byBiYXNlX2xpYmRpcgorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2xpYmRpcn0vbGliY2FwKiAke0R9JHtiYXNlX2xpYmRpcn0KKyAgICAgICAgICAgICAgICBpZiBbIC1kICR7RH0ke2xpYmRpcn0vc2VjdXJpdHkgXTsgdGhlbgorCQkJbXYgJHtEfSR7bGliZGlyfS9zZWN1cml0eSAke0R9JHtiYXNlX2xpYmRpcn0KKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9Lyouc28iCisKKyMgcGFtIGZpbGVzCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnLyouc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjaGVjay9saWJjaGVja18wLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBiNDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgID0gIkNoZWNrIC0gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayBmb3IgQyBjb2RlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NoZWNrLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImRldmVsIgorCitMSUNFTlNFICA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2NoZWNrL2NoZWNrLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTNjNWU1Yzc3ZDA5MGUxMDNhMTdmM2VkN2ZkN2Q4YjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjVmNTA3NjZhYTZmOGZlNWEyZGY3NTI2NjZjYTAxYTk1MGFkZDQ1MDc5YWEwNjQxNmI4Mzc2NWIxY2Y3MTA1MiIKKworUyA9ICIke1dPUktESVJ9L2NoZWNrLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdGV4aW5mbworCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9BV0tfUEFUSD0ke2JpbmRpcn0vZ2F3ayIKKworUlJFUExBQ0VTXyR7UE59ID0gImNoZWNrICg8PSAwLjkuNSkiCitSREVQRU5EU18ke1BOfSArPSAiZ2F3ayIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY3JvY28vbGliY3JvY29fMC42LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxYjkxMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY3JvY28vbGliY3JvY29fMC42LjguYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJDYXNjYWRpbmcgU3R5bGUgU2hlZXQgKENTUykgcGFyc2luZyBhbmQgbWFuaXB1bGF0aW9uIHRvb2xraXQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jci1yZ2IuYztlbmRsaW5lPTIyO21kNT0zMWQ1ZjA5NDRkNTU2Yzg1ODlkMDRlYTYwNTVmY2M2NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9jci10ZXN0LXV0aWxzLmM7ZW5kbGluZT0yMTttZDU9MjM4MmMyNzkzNGNhZTFkMzc5MmZjYjE3YTYxNDJjNGUiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ4bWwyIHpsaWIiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtQnN5bWJvbGljPWF1dG8iCitQUiA9ICJyMiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9jcm9jby0wLjYtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MgYmluY29uZmlnLWRpc2FibGVkCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjc2N2U3M2M0MTc0Zjc1Yjk5Njk1ZDQ1MzBmZDliYjgwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZWE2ZTFiODU4YzU1MjE5Y2VmZDcxMDk3NTZiZmY1YmMxYTc3NGJhN2E1NWY3ZDNjY2Q3MzRkNmI4NzFiODU3MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbi9maXgtaW5jbHVkZXMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb24vZml4LWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjdhZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb24vZml4LWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK211c2wgY29tcGxhaW5zCitmYXRhbCBlcnJvcjogc3lzL3VuaXN0ZC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CithbmQgcmlnaHRseSBzbworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBsaWJkYWVtb24tMC4xNC5vcmlnL2V4YW1wbGVzL3Rlc3RkLmMKKysrKyBsaWJkYWVtb24tMC4xNC9leGFtcGxlcy90ZXN0ZC5jCitAQCAtMjEsOSArMjEsOSBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKy0jaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgCisgI2luY2x1ZGUgPGxpYmRhZW1vbi9kZm9yay5oPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb25fMC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzBlZTE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBDIGxpYnJhcnkgd2hpY2ggZWFzZXMgdGhlIHdyaXRpbmcgb2YgVU5JWCBkYWVtb25zIgorU0VDVElPTiA9ICJsaWJzIgorQVVUSE9SID0gIkxlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4iCitIT01FUEFHRSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9saWJkYWVtb24vIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJkYWVtb24vZGFlbW9uLmg7YmVnaW5saW5lPTk7ZW5kbGluZT0yMTttZDU9YmQ5ZmJlNTdjZDk2ZDFhNTg0OGE4YmExMmQ5YTZiZjQiCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbGliZGFlbW9uL2xpYmRhZW1vbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWluY2x1ZGVzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MDlkYzI3MTA3YzIxYmNkOWZiZjJmOTVmNTY2OTU2MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDIzZWI1ZjZmOTg2ZGNjN2U3MDgzMDczNTViYTMyODlhYmUwM2NjMzgxZmM0N2E4MGJjYTRhNTBhYTZiODM0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1seW54IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1MTMwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZkZXYvbGliZXZkZXZfMS40LjIuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIGxpYnJhcnkgZm9yIGV2ZGV2IGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmV2ZGV2LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1YWFlMGQzOGZlZWE2ZmRhOTdjYTM4MWNiOTEzMmViIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmV2ZGV2L2xpYmV2ZGV2Lmg7ZW5kbGluZT0yMTttZDU9N2ZmNGYwYjUxMTMyNTJjMmYxYTgyOGUwYmJhZDk4ZDEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvbGliZXZkZXYvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGViZmNkNTE1MzU1OGViYTI1YThlNzFlYjI1MzRhZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2M3N2IyMTNmMDc1NzA2ZDQyOGEyYWY1NGI2NmJmODZiMDNhNjhlOWZiMzkwZTdlYzQ4Y2Y1NTA2NTk3MDY0MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjE2ODgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdApAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworZmFpbD0wCitmb3IgdGVzdCBpbiAuL3Rlc3QvKgorZG8KKwkkdGVzdAorCWlmIFsgJD8gLWVxIDAgXQorCXRoZW4KKwkJZmFpbD0xCisJZmkKK2RvbmUKKworaWYgWyAkZmFpbCAtZXEgMCBdCit0aGVuCisJZWNobyAiUEFTUzogbGliZXZlbnQiCitlbHNlCisJZWNobyAiRkFJTDogbGliZXZlbnQiCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50XzIuMC4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGMyNjNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBbiBhc3luY2hyb25vdXMgZXZlbnQgbm90aWZpY2F0aW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vbGliZXZlbnQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD01MDg4NCZhdGlkPTQ2MTMyMiIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT00NWM1MzE2ZmY2ODRiY2ZlMmY5Zjg2ZDhiMTI3OTU1OSIKKworU1JDX1VSSSA9ICIgXAorICAgICR7U09VUkNFRk9SR0VfTUlSUk9SfS9sZXZlbnQvJHtCUH0tc3RhYmxlLnRhci5neiBcCisgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNGM1NmY5ODZhYTk4NTY3N2NhMWRiODk2MzBhMmUxMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MWMyYzQ5ZjBhZGFkYWNmZGJlNjMzMmEzNzJjMzhjZjljOGI3ODk1YmI3M2RhYmVhYTUzY2RjYzFkNGUxZmEzIgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LXN0YWJsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorCitpbmhlcml0IGF1dG90b29scworCisjIE5lZWRlZCBmb3IgRGViaWFuIHBhY2thZ2luZworTEVBRF9TT05BTUUgPSAibGliZXZlbnQtMi4wLnNvIgorCitpbmhlcml0IHB0ZXN0CisKK0RFUEVORFMgPSAiemxpYiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWZvciBmaWxlIGluICR7Qn0vdGVzdC8ubGlicy9yZWdyZXNzICR7Qn0vdGVzdC8ubGlicy90ZXN0KgorCWRvCisJCWluc3RhbGwgLW0gMDc1NSAkZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJleGlmL2xpYmV4aWZfMC42LjIxLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJleGlmL2xpYmV4aWZfMC42LjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjRjYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV4aWYvbGliZXhpZl8wLjYuMjEuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZWFkaW5nIGV4dGVuZGVkIGltYWdlIGluZm9ybWF0aW9uIChFWElGKSBmcm9tIEpQRUcgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmV4aWYiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYmV4aWYvbGliZXhpZi0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjczMzliODk4NTBmMjhjOGYxYzIzN2YyMzNlMDViMjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTZjZGFlYjYyZWIzZTZkZmFiMjQzNWY3ZDdiY2NkMmYzNzQzOGQyMWM1MjE4ZWM0ZTU4ZWZhOTE1N2Q0ZDQxYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAtaSBzOmRvY1wgYmluYXJ5OmJpbmFyeTpnIE1ha2VmaWxlCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmEvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmEvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE1MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzMyMDc5OWM5NDFkNDJhOWI3ZTM1MTgwNTM1OTY5NGVhM2IzNmQyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgQXByIDIwMTUgMDk6MDg6MzggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbmxzLm00OiBUYWtlIGl0IGZyb20gZ2V0dGV4dC0wLjE1CisKK0l0IG90aGVyd2lzZSBleHBlY3RzIGdldHRleHQgdG8gcHJvdmlkZSBpdC4gTGV0cyBnbyBpbmRlcGVuZGVudAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIG00L25scy5tNCB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L25scy5tNAorCitkaWZmIC0tZ2l0IGEvbTQvbmxzLm00IGIvbTQvbmxzLm00CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmM4ZmU2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvbTQvbmxzLm00CitAQCAtMCwwICsxLDMwIEBACisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlIG5vdCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgVWxyaWNoIERyZXBwZXIgZHJlcHBlckBjeWdudXMuY29tLCAxOTk1LTIwMDAuCisrZG5sIEJydW5vIEhhaWJsZSBoYWlibGVAY2xpc3AuY29ucy5vcmcsIDIwMDAtMjAwMy4KKysKKytBQ19QUkVSRVEoMi41MCkKKysKKytBQ19ERUZVTihbQU1fTkxTXSwKKytbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorK2RubCBEZWZhdWx0IGlzIGVuYWJsZWQgTkxTCisrQUNfQVJHX0VOQUJMRShubHMsCisrWyAtLWRpc2FibGUtbmxzIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorK1VTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisrQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKytBQ19TVUJTVChVU0VfTkxTKQorK10pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmFfMS4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhXzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDJkNjIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhXzEuMi4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZmlsZSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3BjbWFuZm0uc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2ZtLWV4dHJhLmg7YmVnaW5saW5lPTg7ZW5kbGluZT0yMTttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGNtYW5mbS9saWJmbS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2ZmMzgyMDA3MDE2NThmN2U4MGUyNWVkMzk1ZDkyZGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY5MmYxNjI0YTRjYmM4ZDFkZDU1ZjNiM2YzMzY5ZmJmNWQyNmY2M2E5MTZlMmMyOTUyMzBiMjM0NGUxZmJmOSIKKworUyA9ICIke1dPUktESVJ9L2xpYmZtLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWV4dHJhLW9ubHkgLS13aXRoLWd0az1ubyIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtTfS9tNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOTUwMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtXzEuMi4zLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZmlsZSBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL3BjbWFuZm0uc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZtLmg7YmVnaW5saW5lPTg7ZW5kbGluZT0yMTttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Jhc2UvZm0tY29uZmlnLmg7YmVnaW5saW5lPTEwO2VuZGxpbmU9MjM7bWQ1PWVmMWY4NGRhNjRiM2MwMWNjYTQ0NzIxMmY3ZWY2MDA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mbS1ndGsuaDtiZWdpbmxpbmU9NjtlbmRsaW5lPTE5O21kNT02NDZiYWE0OTU1YzA0ZmU3NjhmMmNhMjdiOTJhYzhkZCIKKworCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBwYW5nbyBndGsrIG1lbnUtY2FjaGUgaW50bHRvb2wtbmF0aXZlIGxpYmV4aWYgbGliZm0tZXh0cmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3BjbWFuZm0vbGliZm0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2ZmMzgyMDA3MDE2NThmN2U4MGUyNWVkMzk1ZDkyZGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY5MmYxNjI0YTRjYmM4ZDFkZDU1ZjNiM2YzMzY5ZmJmNWQyNmY2M2E5MTZlMmMyOTUyMzBiMjM0NGUxZmJmOSIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtTfS9tNCIKKworUEFDS0FHRVMgKz0gIiR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1taW1lID0gIiR7ZGF0YWRpcn0vbWltZS8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9saWJmbS9tb2R1bGVzLy5kZWJ1ZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgcmVtb3ZlIGZpbGVzIHdoaWNoIGFyZSBwYXJ0IG9mIGxpYmZtLWV4dHJhCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLXhtbC1maWxlLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJmbS0xLjAvZm0tdmVyc2lvbi5oCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGliZm0tMS4wL2ZtLWV4dHJhLmgKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJmbS1leHRyYS5wYworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vbGliZm0tZXh0cmEuc28qCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5hCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5sYQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGRmYzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTEgQEAKK0FkZCBhbmQgdXNlIHBrZy1jb25maWcgZm9yIGxpYmdjcnlwdCBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0cy4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW3Vwc3RyZWFtIGhhdmUgaW5kaWNhdGVkIHRoZXkgZG9uJ3Qgd2FudCBhIHBrZy1jb25maWcgZGVwZW5kZW5jeV0KKworUlAgMjAxNC81LzIyCisKK0luZGV4OiBsaWJnY3J5cHQtMS4yLjQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ2NyeXB0LTEuMi40Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDMtMTkgMjI6MTQ6NTAuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2NyeXB0LTEuMi40L2NvbmZpZ3VyZS5hYwkyMDA4LTAzLTE5IDIyOjE0OjU4LjAwMDAwMDAwMCArMDAwMAorQEAgLTgwNyw2ICs4MDcsNyBAQAorIGRvYy9NYWtlZmlsZQorIHNyYy9NYWtlZmlsZQorIHNyYy9nY3J5cHQuaAorK3NyYy9saWJnY3J5cHQucGMKKyBzcmMvbGliZ2NyeXB0LWNvbmZpZworIHRlc3RzL01ha2VmaWxlCisgdzMyLWRsbC9NYWtlZmlsZQorSW5kZXg6IGxpYmdjcnlwdC0xLjIuNC9zcmMvbGliZ2NyeXB0LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2NyeXB0LTEuMi40L3NyYy9saWJnY3J5cHQucGMuaW4JMjAwOC0wMy0xOSAyMjoxNDo1OC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsMzMgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIHBrZy1jb25maWcgbWV0YWRhdGEgZmlsZS4KKysjIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysjIEF1dGhvcjogU2ltb24gSm9zZWZzc29uCisrIworKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdGhlIGF1dGhvciBnaXZlcworKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisrIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKysjCisrIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrIyBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0IGV2ZW4gdGhlCisrIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QExJQkdDUllQVF9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1ATElCR0NSWVBUX0NPTkZJR19IT1NUQAorKworKyMgTWlzYyBpbmZvcm1hdGlvbi4KKytzeW1tZXRyaWNfY2lwaGVycz1ATElCR0NSWVBUX0NJUEhFUlNACisrYXN5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfUFVCS0VZX0NJUEhFUlNACisrZGlnZXN0cz1ATElCR0NSWVBUX0RJR0VTVFNACisrCisrTmFtZTogbGliZ2NyeXB0CisrRGVzY3JpcHRpb246IEdOVSBjcnlwdG8gbGlicmFyeQorK1VSTDogaHR0cDovL3d3dy5nbnVwZy5vcmcKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdjcnlwdAorK0xpYnMucHJpdmF0ZTogLUwke2xpYmRpcn0gLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSAKK0luZGV4OiBsaWJnY3J5cHQtMS42LjEvc3JjL2xpYmdjcnlwdC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdjcnlwdC0xLjYuMS5vcmlnL3NyYy9saWJnY3J5cHQubTQJMjAxMy0xMi0xNiAxNzo0NDozMi4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnY3J5cHQtMS42LjEvc3JjL2xpYmdjcnlwdC5tNAkyMDE0LTA1LTEzIDIxOjI1OjM3LjQ3ODM4OTgzMyArMDAwMAorQEAgLTIyLDE3ICsyMiw3IEBACisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfTElCR0NSWVBUXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX0FSR19XSVRIKGxpYmdjcnlwdC1wcmVmaXgsCistICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJnY3J5cHQtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBMSUJHQ1JZUFQgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGxpYmdjcnlwdF9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JGxpYmdjcnlwdF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBpZiB0ZXN0IHgke0xJQkdDUllQVF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgTElCR0NSWVBUX0NPTkZJRz0kbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXgvYmluL2xpYmdjcnlwdC1jb25maWcKKy0gICAgIGZpCistICBmaQorIAorLSAgQUNfUEFUSF9UT09MKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQorICAgdG1wPWlmZWxzZShbJDFdLCAsMToxLjIuMCwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHJlcV9saWJnY3J5cHRfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTQyLDQ4ICszMiwxMyBAQAorICAgICAgbWluX2xpYmdjcnlwdF92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgTElCR0NSWVBUIC0gdmVyc2lvbiA+PSAkbWluX2xpYmdjcnlwdF92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRMSUJHQ1JZUFRfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9saWJnY3J5cHRfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb249YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBtaWNybz1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKExJQkdDUllQVCwgW2xpYmdjcnlwdCA+PSAkbWluX2xpYmdjcnlwdF92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisrCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBJZiB3ZSBoYXZlIGEgcmVjZW50IGxpYmdjcnlwdCwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUKKyAgICAgIGlmIHRlc3QgIiRyZXFfbGliZ2NyeXB0X2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRMSUJHQ1JZUFRfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGxpYmdjcnlwdGAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtMSUJHQ1JZUFQgQVBJIHZlcnNpb25dKQorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9saWJnY3J5cHRfYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorQEAgLTk2LDEwICs1MSw4IEBACisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIExJQkdDUllQVF9DRkxBR1M9YCRMSUJHQ1JZUFRfQ09ORklHIC0tY2ZsYWdzYAorLSAgICBMSUJHQ1JZUFRfTElCUz1gJExJQkdDUllQVF9DT05GSUcgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorLSAgICBsaWJnY3J5cHRfY29uZmlnX2hvc3Q9YCRMSUJHQ1JZUFRfQ09ORklHIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGxpYmdjcnlwdGAKKyAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgIGlmIHRlc3QgeCIkbGliZ2NyeXB0X2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTEzLDggKzY2LDYgQEAKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorLSAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgIExJQkdDUllQVF9MSUJTPSIiCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorICAgQUNfU1VCU1QoTElCR0NSWVBUX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MmU2MmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9maXgtSUNFLWZhaWx1cmUtb24tbWlwcy13aXRoLW9wdGlvbi1PLWFuZC1nLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK3Rlc3RzL2JlbmNoLXNsb3BlLmM6IHdvcmthcm91bmQgSUNFIGZhaWx1cmUgb24gbWlwcyB3aXRoICctTyAtZycKKworSGl0IGEgSUNFIGFuZCBjb3VsZCByZWR1Y2UgaXQgdG8gdGhlIGZvbGxvd2luZyBtaW5pbWFsIGV4YW1wbGU6CisKKzEuIE9ubHkgdGhlIHNpemUgb2YgYXJyYXkgYXNzaWduZWQgd2l0aCAyIGNhdXNlZCB0aGUgaXNzdWU6CiskIGNhdCA+IG1pcGdjYy10ZXN0LmMgPDwgRU5ECisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIGNoYXIgKnBTdHJBcnJ5W0FSUkFZX1NJWkVfTUFYXSA9IHsiaGVsbG8ifTsKKyAgICAgICAgaW50IGkgPSAwOworCisgICAgICAgIHdoaWxlKHBTdHJBcnJ5W2ldICYmIGk8QVJSQVlfU0laRV9NQVgpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBwU3RyQXJyeVtpXSk7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK0VORAorCisyLiBPbmx5IC1PMSBhbmQgLWcgb24gbWlwcyBjYXVzZWQgdGhlIGlzc3VlOgorJCBtaXBzLXBva3ktbGludXgtZ2NjIC1PMSAtZyAtbyBtaXBnY2MtdGVzdCBtaXBnY2MtdGVzdC5jCittaXBnY2MtdGVzdC5jOiBJbiBmdW5jdGlvbiAnbWFpbic6CittaXBnY2MtdGVzdC5jOjE4OjE6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBpbiBkd2FyZjJvdXRfdmFyX2xvY2F0aW9uLCBhdCBkd2FyZjJvdXQuYzoyMDgxMAorIH0KKyBeCitQbGVhc2Ugc3VibWl0IGEgZnVsbCBidWcgcmVwb3J0LAord2l0aCBwcmVwcm9jZXNzZWQgc291cmNlIGlmIGFwcHJvcHJpYXRlLgorU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sPiBmb3IgaW5zdHJ1Y3Rpb25zCisKKzMuIFRoZSBxdWljayB3b3Jrcm91bmQgaXMgdHJ5aW5nIHRvIGVubGFyZ2UgdGhlIHNpemUgb2YgYXJyYXkgd2l0aCBsYXJnZXIKK3RoYW4gMi4KKworNC4gRmlsZSBhIGJ1ZyB0byBHTlUsIGJ1dCBpdCBjb3VsZCBub3QgYmUgcmVwcm9kdWNlZCBvbiB0aGVyZSBlbnZpcm9ubWVudC4KK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjA2NDMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvYmVuY2gtc2xvcGUuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0cy9iZW5jaC1zbG9wZS5jIGIvdGVzdHMvYmVuY2gtc2xvcGUuYworaW5kZXggYmQwNTA2NC4uMjhjMjQzOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMKKysrKyBiL3Rlc3RzL2JlbmNoLXNsb3BlLmMKK0BAIC0xMTk3LDcgKzExOTcsNyBAQCBzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBoYXNoX29wcyA9IHsKKyB9OworIAorIAorLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlIGhhc2hfbW9kZXNbXSA9IHsKKytzdGF0aWMgc3RydWN0IGJlbmNoX2hhc2hfbW9kZSBoYXNoX21vZGVzWzNdID0geworICAgeyIiLCAmaGFzaF9vcHN9LAorICAgezB9LAorIH07CitAQCAtMTM0OSw3ICsxMzQ5LDcgQEAgc3RhdGljIHN0cnVjdCBiZW5jaF9vcHMgbWFjX29wcyA9IHsKKyB9OworIAorIAorLXN0YXRpYyBzdHJ1Y3QgYmVuY2hfbWFjX21vZGUgbWFjX21vZGVzW10gPSB7Cisrc3RhdGljIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtYWNfbW9kZXNbM10gPSB7CisgICB7IiIsICZtYWNfb3BzfSwKKyAgIHswfSwKKyB9OworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTU0MDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9maWxlcy9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitsaWJnY3J5cHQ6IGZpeCBidWlsZGluZyBlcnJvciB3aXRoICctTzInIGluIHN5c3Jvb3QgcGF0aAorCitDaGFyYWN0ZXJzIGxpa2UgJy1PMicgb3IgJy1PZmFzdCcgd2lsbCBiZSByZXBsYWNlZCBieSAnLU8xJyB3aGVuIGNvbXBpbGluZyBjaXBoZXIuCitJZiB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGxpYmdjcnlwdCBhbmQgc3lzcm9vdCBjb250YWlucyBzdWNoIGNoYXJhY3RlcnMsIHdlIHdvdWxkCitnZXQgY29tcGlsZSBlcnJvcnMgYmVjYXVzZSB0aGUgc3lzcm9vdCBwYXRoIGhhcyBiZWVuIG1vZGlmaWVkLgorCitGaXggdGhpcyBieSBhZGRpbmcgYmxhbmsgc3BhY2VzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9yaWdpbmFsIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlCitzZWQgY29tbWFuZC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY2lwaGVyL01ha2VmaWxlLmFtIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY2lwaGVyL01ha2VmaWxlLmFtIGIvY2lwaGVyL01ha2VmaWxlLmFtCitpbmRleCA3NmNkYzk2Li45YTg5NzkyIDEwMDY0NAorLS0tIGEvY2lwaGVyL01ha2VmaWxlLmFtCisrKysgYi9jaXBoZXIvTWFrZWZpbGUuYW0KK0BAIC02OSw3ICs2OSw3IEBAIHJmYzIyNjguYyBcCisgY2FtZWxsaWEuYyBjYW1lbGxpYS5oIGNhbWVsbGlhLWdsdWUuYworIAorIGlmIEVOQUJMRV9PX0ZMQUdfTVVOR0lORworLW9fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLy1PXChbMi05c11bMi05c10qXCkvLU8xLycgLWUgJ3MvLU9mYXN0Ly1PMS9nJworK29fZmxhZ19tdW5naW5nID0gc2VkIC1lICdzLyAtT1woWzItOXNdWzItOXNdKlwpIC8gLU8xIC8nIC1lICdzLyAtT2Zhc3QgLyAtTzEgL2cnCisgZWxzZQorIG9fZmxhZ19tdW5naW5nID0gY2F0CisgZW5kaWYKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODNiZTc4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0LmluYwpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaGljIGxpYnJhcnkgYmFzZWQgb24gdGhlIGNvZGUgZnJvbSBHbnVQRyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kaXJlY3RvcnkuZnNmLm9yZy9wcm9qZWN0L2xpYmdjcnlwdC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKK1NFQ1RJT04gPSAibGlicyIKKworIyBoZWxwZXIgcHJvZ3JhbSBnY3J5cHRybmQgYW5kIGdldHJhbmRvbSBhcmUgdW5kZXIgR1BMLCByZXN0IExHUEwKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErICYgR1BMdjMrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNFTlNFX2R1bXBzZXhwLWRldiA9ICJHUEx2MysiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IgbGliY2FwIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmdjcnlwdC9saWJnY3J5cHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJnY3J5cHQtZml4LWJ1aWxkaW5nLWVycm9yLXdpdGgtTzItaW4tc3lzcm9vdC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2ggXAorIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2xpYmdjcnlwdC1jb25maWciCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1hc20gLS13aXRoLWNhcGFiaWxpdGllcyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aGUgb25lIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Cit9CisKKyMgbGliZ2NyeXB0LnBjIGlzIGFkZGVkIGxvY2FsbHkgYW5kIHRodXMgaW5zdGFsbGVkIGhlcmUKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vc3JjL2xpYmdjcnlwdC5wYyAke0R9LyR7bGliZGlyfS9wa2djb25maWcvCit9CisKK1BBQ0tBR0VTID0rICJkdW1wc2V4cC1kZXYiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2htYWMyNTYiCitGSUxFU19kdW1wc2V4cC1kZXYgKz0gIiR7YmluZGlyfS9kdW1wc2V4cCIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDZjZTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHRfMS42LjMuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGxpYmdjcnlwdC5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImRlMDNiODY3ZDAyZmRmMTE1YTFiYWM4YmI4YjVjM2EzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY5ZTk0ZTFhNzA4NGQ5NGUxYTZjYTI2ZDQzNjA2OGNiNzQ4NjJkMTBhNzM1M2NmYWU1NzlhMmQ4ODY3NGZmMDkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZlZWRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE1MCBAQAorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliZ3BnLWVycm9yLTEuMTcvY29uZmlndXJlLmFjCitAQCAtNTI5LDYgKzUyOSw3IEBAIEFDX0NPTkZJR19GSUxFUyhbc3JjL01ha2VmaWxlIHRlc3RzL01ha2UKKyBBQ19DT05GSUdfRklMRVMoW2xhbmcvTWFrZWZpbGUgbGFuZy9jbC9NYWtlZmlsZSBsYW5nL2NsL2dwZy1lcnJvci5hc2RdKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL3ZlcnNpb25pbmZvLnJjIHNyYy9ncGctZXJyb3IudzMyLW1hbmlmZXN0XSkKKyBBQ19DT05GSUdfRklMRVMoW3NyYy9ncGctZXJyb3ItY29uZmlnXSwgW2NobW9kICt4IHNyYy9ncGctZXJyb3ItY29uZmlnXSkKKytBQ19DT05GSUdfRklMRVMoW3NyYy9ncGctZXJyb3IucGNdKQorIAorIEFDX09VVFBVVAorIAorSW5kZXg6IGxpYmdwZy1lcnJvci0xLjE3L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbGliZ3BnLWVycm9yLTEuMTcvc3JjL01ha2VmaWxlLmFtCitAQCAtNzUsNiArNzUsOCBAQCBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gZ3BnLWVycm9yLmgKKyBiaW5fU0NSSVBUUyA9IGdwZy1lcnJvci1jb25maWcKKyBtNGRhdGFkaXIgPSAkKGRhdGFkaXIpL2FjbG9jYWwKKyBtNGRhdGFfREFUQSA9IGdwZy1lcnJvci5tNAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGdwZy1lcnJvci5wYworIAorIEVYVFJBX0RJU1QgPSBta3N0cnRhYmxlLmF3ayBlcnItc291cmNlcy5oLmluIGVyci1jb2Rlcy5oLmluIFwKKyAJbWtlcnJub3MuYXdrIGVycm5vcy5pbiBSRUFETUUgXAorQEAgLTgyLDcgKzg0LDcgQEAgRVhUUkFfRElTVCA9IG1rc3RydGFibGUuYXdrIGVyci1zb3VyY2VzLgorIAlta2hlYWRlci5jIGdwZy1lcnJvci5oLmluIG1rdzMyZXJybWFwLmMgdzMyLWFkZC5oIHczMmNlLWFkZC5oIFwKKyAJZXJyLXNvdXJjZXMuaCBlcnItY29kZXMuaCBncGctZXJyb3ItY29uZmlnLmluIGdwZy1lcnJvci5tNCBcCisgCWdwZy1lcnJvci52ZXJzIGdwZy1lcnJvci5kZWYuaW4gXAorLSAgICAgICAgdmVyc2lvbmluZm8ucmMuaW4gZ3BnLWVycm9yLnczMi1tYW5pZmVzdC5pbiBcCisrICAgICAgICB2ZXJzaW9uaW5mby5yYy5pbiBncGctZXJyb3IudzMyLW1hbmlmZXN0LmluIGdwZy1lcnJvci5wYyBcCisgCSQobG9ja19vYmpfcHViKQorIAorIEJVSUxUX1NPVVJDRVMgPSBlcnItc291cmNlcy5oIGVyci1jb2Rlcy5oIGNvZGUtdG8tZXJybm8uaCBjb2RlLWZyb20tZXJybm8uaCBcCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmdwZy1lcnJvci0xLjE3Lm9yaWcvc3JjL2dwZy1lcnJvci5tNAorKysrIGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IubTQKK0BAIC0yNiw3MyArMjYsMTMgQEAgZG5sIGlzIGFkZGVkIHRvIHRoZSBncGdfY29uZmlnX3NjcmlwdF93YQorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR19FUlJPUl0sCisgWyBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iIgorLSAgZG5sIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4PVBGWCBpcyB0aGUgcHJlZmVycmVkIG5hbWUgZm9yIHRoaXMgb3B0aW9uLAorLSAgZG5sIHNpbmNlIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBvdXIgdGhyZWUgc2libGluZ3MgdXNlIHRoZSBkaXJlY3RvcnkvCistICBkbmwgcGFja2FnZSBuYW1lIGluIC0td2l0aC0kZGlyX25hbWUtcHJlZml4PVBGWC4KKy0gIEFDX0FSR19XSVRIKGxpYmdwZy1lcnJvci1wcmVmaXgsCistICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgR1BHIEVycm9yIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICAgICAgICAgICBbZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIl0pCistCistICBkbmwgQWNjZXB0IC0td2l0aC1ncGctZXJyb3ItcHJlZml4IGFuZCBtYWtlIGl0IHdvcmsgdGhlIHNhbWUgYXMKKy0gIGRubCAtLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeCBhYm92ZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LAorLSAgZG5sIGJ1dCBkbyBub3QgZG9jdW1lbnQgdGhpcyBvbGQsIGluY29uc2lzdGVudGx5LW5hbWVkIG9wdGlvbi4KKy0gIEFDX0FSR19XSVRIKGdwZy1lcnJvci1wcmVmaXgsLAorLSAgICAgICAgICAgICAgW2dwZ19lcnJvcl9jb25maWdfcHJlZml4PSIkd2l0aHZhbCJdKQorKyAgbWluX2dwZ19lcnJvcl92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4wLCQxKQorIAorLSAgaWYgdGVzdCB4IiR7R1BHX0VSUk9SX0NPTkZJR30iID0geCA7IHRoZW4KKy0gICAgIGlmIHRlc3QgeCIke2dwZ19lcnJvcl9jb25maWdfcHJlZml4fSIgIT0geCA7IHRoZW4KKy0gICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7Z3BnX2Vycm9yX2NvbmZpZ19wcmVmaXh9L2Jpbi9ncGctZXJyb3ItY29uZmlnIgorLSAgICAgZWxzZQorLSAgICAgICBjYXNlICIke1NZU1JPT1R9IiBpbgorLSAgICAgICAgIC8qKQorLSAgICAgICAgICAgaWYgdGVzdCAteCAiJHtTWVNST09UfS9iaW4vZ3BnLWVycm9yLWNvbmZpZyIgOyB0aGVuCistICAgICAgICAgICAgIEdQR19FUlJPUl9DT05GSUc9IiR7U1lTUk9PVH0vYmluL2dwZy1lcnJvci1jb25maWciCistICAgICAgICAgICBmaQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAnJykKKy0gICAgICAgICAgIDs7CistICAgICAgICAgICopCistICAgICAgICAgICBBQ19NU0dfV0FSTihbSWdub3JpbmcgXCRTWVNST09UIGFzIGl0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLl0pCistICAgICAgICAgICA7OworLSAgICAgICBlc2FjCistICAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR19FUlJPUiwgW2dwZy1lcnJvciA+PSAkbWluX2dwZ19lcnJvcl92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisgCistICBBQ19QQVRIX1BST0coR1BHX0VSUk9SX0NPTkZJRywgZ3BnLWVycm9yLWNvbmZpZywgbm8pCistICBtaW5fZ3BnX2Vycm9yX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjAsJDEpCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQRyBFcnJvciAtIHZlcnNpb24gPj0gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHX0VSUk9SX0NPTkZJRyIgIT0gIm5vIiBcCistICAgICAmJiB0ZXN0IC1mICIkR1BHX0VSUk9SX0NPTkZJRyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdfZXJyb3JfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGdwZ19lcnJvcl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIGlmIHRlc3QgIiRtYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWdlICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR19FUlJPUl9DRkxBR1M9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIEdQR19FUlJPUl9MSUJTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgR1BHX0VSUk9SX01UX0NGTEFHUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLW10IC0tY2ZsYWdzIDI+L2Rldi9udWxsYAorLSAgICBHUEdfRVJST1JfTVRfTElCUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLW10IC0tbGlicyAyPi9kZXYvbnVsbGAKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uKV0pCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGdwZ19lcnJvcl9jb25maWdfaG9zdD1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICBncGdfZXJyb3JfY29uZmlnX2hvc3Q9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aG9zdCBncGctZXJyb3JgCisgICAgIGlmIHRlc3QgeCIkZ3BnX2Vycm9yX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgiJGdwZ19lcnJvcl9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTEwNywxMSArNDcsNiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdfRVJST1JdLAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIEdQR19FUlJPUl9DRkxBR1M9IiIKKy0gICAgR1BHX0VSUk9SX0xJQlM9IiIKKy0gICAgR1BHX0VSUk9SX01UX0NGTEFHUz0iIgorLSAgICBHUEdfRVJST1JfTVRfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKEdQR19FUlJPUl9DRkxBR1MpCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmdwZy1lcnJvci0xLjE3L3NyYy9ncGctZXJyb3IucGMuaW4KK0BAIC0wLDAgKzEsMTEgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKytob3N0PUBHUEdfRVJST1JfQ09ORklHX0hPU1RACisrCisrTmFtZTogZ3BnLWVycm9yCisrRGVzY3JpcHRpb246IGEgbGlicmFyeSB0aGF0IGRlZmluZXMgY29tbW9uIGVycm9yIHZhbHVlcyBmb3IgYWxsIEdudVBHIGNvbXBvbmVudHMKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZGJiY2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlNtYWxsIGxpYnJhcnkgdGhhdCBkZWZpbmVzIGNvbW1vbiBlcnJvciB2YWx1ZXMgZm9yIGFsbCBHbnVQRyBjb21wb25lbnRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJncGctZXJyb3IvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGctZXJyb3IuaC5pbjtlbmRsaW5lPTIzO21kNT04YjIwNDkxOGYwY2E3MDcxMzYzOTRkOGJiMjBjN2ViYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaW5pdC5jO2VuZGxpbmU9MjA7bWQ1PThmNWE5YjU5NjM0ZjRhZWJjZDBlYzlkM2ViZDUzYmZlIgorCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJncGctZXJyb3IvbGliZ3BnLWVycm9yLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImMwNGMxNjI0NWI5MjgyOTI4MWY0M2I1YmVmN2QxNmRhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUzMTIwZTEzMzNkNWM1ZDI4ZDg3ZmYyODU0ZTllOTg3MTljOGUyMTQxNTJmMTdhZDUyOTE3MDRkMjVjNDk3OGIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZ3BnLWVycm9yLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyBnZXR0ZXh0CitDUFBGTEFHUyArPSAiLVAiCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJVEFSR0VUX0ZJTEU9bGludXgtZ251CisJaWYgWyAke1RBUkdFVF9PU30gIT0gImxpbnV4IiBdOyB0aGVuCisJCVRBUkdFVF9GSUxFPSR7VEFSR0VUX09TfQorCWZpCisKKwljYXNlICR7VEFSR0VUX0FSQ0h9IGluCisJICBhYXJjaDY0X2JlKSBUVVBMRT1hYXJjaDY0LXVua25vd24tbGludXgtZ251IDs7CisJICBhcm0pCSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGFybWViKSAgICAgIFRVUExFPWFybS11bmtub3duLWxpbnV4LWdudWVhYmkgOzsKKwkgIGk1ODZ8aTY4NikgIFRVUExFPWk2ODYtcGMtbGludXgtZ251IDs7CisJICBtaXBzNjRlbCkgICBUVVBMRT1taXBzZWwtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIG1pcHM2NCkgICAgIFRVUExFPW1pcHMtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIHg4Nl82NCkgICAgIFRVUExFPXg4Nl82NC1wYy1saW51eC1nbnUgOzsKKwkgICopICAgICAgICAgIFRVUExFPSR7VEFSR0VUX0FSQ0h9LXVua25vd24tbGludXgtZ251IDs7IAorCWVzYWMKKworCWNwICR7U30vc3JjL3N5c2NmZy9sb2NrLW9iai1wdWIuJFRVUExFLmggXAorCSAgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVEFSR0VUX0ZJTEUuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHdlIGRvbid0IGhhdmUgY29tbW9uIGxpc3AgaW4gT0UKKwlybSAtcmYgIiR7RH0ke2RhdGFkaXJ9L2NvbW1vbi1saXNwLyIKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZ3BnLWVycm9yIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWxfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2YjYzNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiaUNhbCBhbmQgc2NoZWR1bGluZyAoUkZDIDI0NDUsIDI0NDYsIDI0NDcpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsL2lzc3VlcyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBNUEwtMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ0ZmM1ODMwOWQ4ZWQ0NjU4N2FjNjNiYjQ0OWQ4MmY4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0U7bWQ1PWQxYTA4OTFjZDNlNTgyYjNlMmVjOGZlNjNiYWRiYmI2IgorU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZ2l0aHViLmNvbS8ke0JQTn0vJHtCUE59L2FyY2hpdmUvdiR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNGI4ZTMzYWU1ZWZiMmYwMjVlYjQzY2U2OTY4MmEzNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDcyZTgzODM0MDkyMzE1NzcyZTY3MTliODVmYzhiMTE1MzBiMWZmNTNmNGQxMDgzMTVmYjM4Y2RkYmNlOGMyIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9hdXRvY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2JmNTQ5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorSXQgYWRkcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIG5lZWRlZAorZm9yIGF1dG9jb25mIDIuNjUgdG8gcmVjb25maWd1cmUgbGliaWNvbnYgYW5kIGRlZmluZXMgdGhlIG00IG1hY3JvcyAKK2RpcmVjdG9yeS4gSXRzIGltcG9ydGVkIGZyb20gT0UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGliaWNvbnYtMS4xMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTEuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTEuMS9jb25maWd1cmUuYWMKK0BAIC0yMyw3ICsyMyw3IEBAIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkLWF1eCkKKyBBTV9JTklUX0FVVE9NQUtFKGxpYmljb252LCAxLjExKQorIEFDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oIGxpYi9jb25maWcuaCkKKyBBQ19QUk9HX01BS0VfU0VUCistCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIAorIEFDX1BST0dfQ0MKK0luZGV4OiBsaWJpY29udi0xLjExLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjExLjEub3JpZy9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTEuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworQEAgLTE2LDE3ICsxNiwxNyBAQCBkbmwgYWxvbmcgd2l0aCB0aGUgR05VIENIQVJTRVQgTGlicmFyeTsKKyBkbmwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorIGRubCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgCistQUNfUFJFUkVRKDIuMTMpCisrQUNfUFJFUkVRKDIuNjEpCisrQUNfSU5JVChbbGliY2hhcnNldF0sWzEuNF0gKQorK0FDX0NPTkZJR19TUkNESVIoW2xpYi9sb2NhbGNoYXJzZXQuY10pCisgCistUEFDS0FHRT1saWJjaGFyc2V0CistVkVSU0lPTj0xLjQKKy0KKy1BQ19JTklUKGxpYi9sb2NhbGNoYXJzZXQuYykKKyBBQ19DT05GSUdfQVVYX0RJUihidWlsZC1hdXgpCisgQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkKKyBBQ19QUk9HX01BS0VfU0VUCistQUNfU1VCU1QoUEFDS0FHRSkKKy1BQ19TVUJTVChWRVJTSU9OKQorK2RubCBBQ19TVUJTVChQQUNLQUdFKQorK2RubCBBQ19TVUJTVChWRVJTSU9OKQorKworK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyAKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjA3ZjczCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvc2hhcmVkX3ByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1dpdGggbGlidG9vbCBnZW5lcmF0aW5nIHNoYXJlZCBhbmQgc3RhdGljIHZlcnNpb24gb2YgbGlicmFyaWVzIG5lZWRzIC1mUElDIGZsYWdzCit3aXRob3V0IHRoaXMgaXQgd2lsbCBub3QgZ2VuZXJhdGUgdGhlIGNvbW1hbmRzIHRvIGNyZWF0ZSBzaGFyZWQgbGlua2VkIGxpYnJhcnkKK0l0cyBtb3JlIGVuZm9yY2VkIGJ5IGxpYnRvb2wgMi40LiBJIGhhdmUgbm90IGNoZWNrZWQgaXQgd2l0aCBvbGRlciBsaWJ0b29sCitsaWJpY29udiAxLjExLnggaXMgcmVsYXRpdmVseSBvbGQgcmVsZWFzZSBhbmQgbGlidG9vbCAyLjQgZGlkIG5vdCBleGlzdCB3aGVuIGl0Cit3YXMgcmVsZWFzZWQgdGhlc2Uga2luZCBvZiBwcm9ibGVtIGFyZSBtb3JlIGxpa2VseQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYmljb252LTEuMTEuMS9saWIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjExLjEub3JpZy9saWIvTWFrZWZpbGUuaW4KKysrKyBsaWJpY29udi0xLjExLjEvbGliL01ha2VmaWxlLmluCitAQCAtNzAsOSArNzAsOSBAQCBwcmVsb2FkYWJsZV9saWJpY29udi5zbyA6IHByZWxvYWRhYmxlX2xpCisgCisgcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc28gOiAkKFNPVVJDRVMpCisgCWlmIHRlc3QgLW4gIkBHQ0NAIjsgdGhlbiBcCistCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLWZQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXNoYXJlZCAtbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorKwkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1mUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1ycGF0aCAkKGxpYmRpcikgLW8gbGlicHJlbG9hZF9pY29udi5sYSAmJiBjcCAubGlicy9saWJwcmVsb2FkX2ljb252LnNvIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisgCWVsc2UgXAorLQkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1LUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1zaGFyZWQgLW8gcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc287IFwKKysJICAkKExJQlRPT0xfTElOSykgJChDQykgJChMREZMQUdTKSAkKElOQ0xVREVTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChERUZTKSAtS1BJQyAtRFBJQyAtRExJQklDT05WX1BMVUcgJChTT1VSQ0VTKSAtcnBhdGggJChsaWJkaXIpIC1vIGxpYnByZWxvYWRfaWNvbnYubGEgJiYgY3AgLmxpYnMvbGlicHJlbG9hZF9pY29udi5zbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorIAlmaQorIAorIHByZWxvYWRhYmxlX2xpYmljb252X3NvbGFyaXMuc28gOiAkKFNPVVJDRVMpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjM3N2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaApAQCAtMCwwICsxLDUwMDggQEAKK1RoaXMgcGF0Y2ggaXMgbmVlZGVkIHRvIHNvbHZlIGlzc3VlcyBsaWtlCit8IGljb252Lm86IEluIGZ1bmN0aW9uIGBtYWluJzoKK3wgL2hvbWUvamFtZXMvc3R1ZmYvYmVhZ2xlL3RtcC1lZ2xpYmMvd29yay9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saWJpY29udi0xLjE0LXIwL2xpYmljb252LTEuMTQvc3JjLy4vaWNvbnYuYzo4NjE6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHJlbG9jYXRlJworfCAuLi9zcmNsaWIvbGliaWNydC5hKHByb2dyZWxvYy5vKTogSW4gZnVuY3Rpb24gYHByZXBhcmVfcmVsb2NhdGUnOgorfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmNsaWIvcHJvZ3JlbG9jLmM6Mjk3OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjb21wdXRlX2N1cnJfcHJlZml4JworfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmNsaWIvcHJvZ3JlbG9jLmM6MzAyOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzZXRfcmVsb2NhdGlvbl9wcmVmaXgnCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCit8IG1ha2VbMV06ICoqKiBbaW5zdGFsbF0gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2FyZy1ub25udWxsLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTMwNDg0NDM4IC0wODAwCitAQCAtMCwwICsxLDI2IEBACisrLyogQSBDIG1hY3JvIGZvciBkZWNsYXJpbmcgdGhhdCBzcGVjaWZpYyBhcmd1bWVudHMgbXVzdCBub3QgYmUgTlVMTC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrLyogX0dMX0FSR19OT05OVUxMKChuLC4uLixtKSkgdGVsbHMgdGhlIGNvbXBpbGVyIGFuZCBzdGF0aWMgYW5hbHl6ZXIgdG9vbHMKKysgICB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFyZ3VtZW50cyBuLCAuLi4sIG0gbXVzdCBiZSBub24tTlVMTCBwb2ludGVycy4KKysgICBuID0gMSBzdGFuZHMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCwgbiA9IDIgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgZXRjLiAgKi8KKysjaWZuZGVmIF9HTF9BUkdfTk9OTlVMTAorKyMgaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgX19HTlVDX18gPiAzCisrIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyBwYXJhbXMpKQorKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKQorKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYysrZGVmcy5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2MrK2RlZnMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYysrZGVmcy5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYysrZGVmcy5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTQyNDg0NDM4IC0wODAwCitAQCAtMCwwICsxLDI3MSBAQAorKy8qIEMrKyBjb21wYXRpYmxlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG1hY3Jvcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2lmbmRlZiBfR0xfQ1hYREVGU19ICisrI2RlZmluZSBfR0xfQ1hYREVGU19ICisrCisrLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorKyAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorKyAgICAgaXQgZXhpc3RzOgorKworKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisrICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKysgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKysgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworKyAgICAgICAuLi4KKysgICAgICAgI2VuZGlmCisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKysgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKysKKysgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKysgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysgICAgICAgIyAgIHVuZGVmIGZvbworKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisrICAgICAgICMgIGVuZGlmCisrICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICAjIGVsc2UKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisrICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKysgICAgICAgLi4uCisrICAgICAgICNlbmRpZgorKworKyAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCisrICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorKyAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CisrCisrICAgICAgICNpZiBAR05VTElCX0ZPT0AKKysgICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACisrICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisrICAgICAgICMgICB1bmRlZiBmb28KKysgICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworKyAgICAgICAjICBlbmRpZgorKyAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CisrICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKysgICAgICAgIyBlbHNlCisrICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACisrICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKysgICAgICAgIyAgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjIGVuZGlmCisrICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CisrICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKysgICAgICAgLi4uCisrICAgICAgICNlbmRpZgorKyovCisrCisrLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworKyAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKysjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorKyNlbmRpZgorKworKy8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworKyAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisrICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKysgKi8KKysjZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKysjZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKysKKysvKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKysgICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCisrICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKysgKi8KKysjZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKworKy8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCisrICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CisrICovCisrI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworKyAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CisrICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorKyAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKysgICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKysgICBpcyBkZWZpbmVkLgorKyAgIEV4YW1wbGU6CisrICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKysgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysgIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKysgICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CisrICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCisrICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCisrICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKysgICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKysgICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCisrICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKysgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorKyAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCisrICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorKyAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKysgICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKysgICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorKyAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCisrICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorKyAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorKyAgIHZhcmlhbnRzLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCisrLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCisrICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCisrIyBpZiAhX19PUFRJTUlaRV9fCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorKyAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKysgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisrICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKysgICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworKyAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCisrI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKysvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKysgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKysjIGlmICFfX09QVElNSVpFX18KKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKysgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrIyBlbmRpZgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysjZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDI2ICswLDAgQEAKKy0vKiBBIEMgbWFjcm8gZm9yIGRlY2xhcmluZyB0aGF0IHNwZWNpZmljIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBOVUxMLgorLSAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworLSAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorLSAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworLSNpZm5kZWYgX0dMX0FSR19OT05OVUxMCistIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKy0jICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjcxICswLDAgQEAKKy0vKiBDKysgY29tcGF0aWJsZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBtYWNyb3MuCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5kZWYgX0dMX0NYWERFRlNfSAorLSNkZWZpbmUgX0dMX0NYWERFRlNfSAorLQorLS8qIFRoZSB0aHJlZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlcyBvZiB0aGVzZSBtYWNyb3MgYXJlOgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHN1YnN0aXR1dGUgZm9yIGEgZnVuY3Rpb24gdGhhdCBpcyBtaXNzaW5nIG9uIHNvbWUKKy0gICAgIHBsYXRmb3JtcywgYnV0IGlzIGRlY2xhcmVkIGFuZCB3b3JrcyBmaW5lIG9uIHRoZSBwbGF0Zm9ybXMgb24gd2hpY2gKKy0gICAgIGl0IGV4aXN0czoKKy0KKy0gICAgICAgI2lmIEBHTlVMSUJfRk9PQAorLSAgICAgICAjIGlmICFASEFWRV9GT09ACistICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CistICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0gICAgICAgLi4uCistICAgICAgICNlbmRpZgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIGFsbCBwbGF0Zm9ybXMsCistICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBwbGF0Zm9ybXM6CistCistICAgICAgICNpZiBAR05VTElCX0ZPT0AKKy0gICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACistICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistICAgICAgICMgICB1bmRlZiBmb28KKy0gICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworLSAgICAgICAjICBlbmRpZgorLSAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbHNlCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistICAgICAgIC4uLgorLSAgICAgICAjZW5kaWYKKy0KKy0gICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBzb21lIHBsYXRmb3JtcworLSAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgb2YgdGhlbSBhbmQKKy0gICAgIGlzIGFkZGl0aW9uYWxseSBlaXRoZXIgbWlzc2luZyBvciB1bmRlY2xhcmVkIG9uIHNvbWUgb3RoZXIgcGxhdGZvcm1zOgorLQorLSAgICAgICAjaWYgQEdOVUxJQl9GT09ACistICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorLSAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSAgICAgICAjICAgdW5kZWYgZm9vCistICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKy0gICAgICAgIyAgZW5kaWYKKy0gICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworLSAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CistICAgICAgICMgZWxzZQorLSAgICAgICAjICBpZiAhQEhBVkVfRk9PQCAgIG9yICAgaWYgIUBIQVZFX0RFQ0xfRk9PQAorLSAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CistICAgICAgICMgIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbmRpZgorLSAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworLSAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistICAgICAgIC4uLgorLSAgICAgICAjZW5kaWYKKy0qLworLQorLS8qIF9HTF9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKy0gICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCistIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybiAiQyIKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4KKy0jZW5kaWYKKy0KKy0vKiBfR0xfRlVOQ0RFQ0xfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKy0gICBkZWNsYXJlcyBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBuYW1lZCBycGxfZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorLSAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CistICovCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRlVOQ0RFQ0xfUlBMXzEgKHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfUlBMXzEocnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRVhURVJOX0MgcmV0dHlwZSBycGxfZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCistCistLyogX0dMX0ZVTkNERUNMX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CistICAgZGVjbGFyZXMgdGhlIHN5c3RlbSBmdW5jdGlvbiwgbmFtZWQgZnVuYywgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLAorLSAgIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsIGFuZCBhdHRyaWJ1dGVzLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CistICovCistI2RlZmluZSBfR0xfRlVOQ0RFQ0xfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICBfR0xfRVhURVJOX0MgcmV0dHlwZSBmdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfUlBMIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworLSAgIHRoYXQgcmVkaXJlY3RzIHRvIHJwbF9mdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFIGlzIGRlZmluZWQuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworLSAqLworLSNkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKQorLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpycGxfZnVuYzsgICAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF9mdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKy0gICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBycGxfZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudAorLSAgIGRlY2xhcmF0aW9uLiAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IKKy0gICB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6cnBsX2Z1bmMpOyAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCistICAgdGhhdCByZWRpcmVjdHMgdG8gdGhlIHN5c3RlbSBwcm92aWRlZCBmdW5jdGlvbiBmdW5jLCBpZiBHTlVMSUJfTkFNRVNQQUNFCistICAgaXMgZGVmaW5lZC4KKy0gICBFeGFtcGxlOgorLSAgICAgX0dMX0NYWEFMSUFTX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CistICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistICAvKiBJZiB3ZSB3ZXJlIHRvIHdyaXRlCistICAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOworLSAgICAgbGlrZSBhYm92ZSBpbiBfR0xfQ1hYQUxJQVNfUlBMXzEsIHRoZSBjb21waWxlciBjb3VsZCBvcHRpbWl6ZSBjYWxscworLSAgICAgYmV0dGVyIChyZW1vdmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhICdzdGF0aWMnIHBvaW50ZXIgdmFyaWFibGUpLAorLSAgICAgYnV0IHRoZW4gdGhlIF9HTF9DWFhBTElBU1dBUk4gbWFjcm8gYmVsb3cgd291bGQgY2F1c2UgYSB3YXJuaW5nIG5vdCBvbmx5CistICAgICBmb3IgdXNlcyBvZiA6OmZ1bmMgYnV0IGFsc28gZm9yIHVzZXMgb2YgR05VTElCX05BTUVTUEFDRTo6ZnVuYy4gICovCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gOjpmdW5jOyAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGZ1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgZGVjbGFyYXRpb24uCistICAgQSBjYXN0IGlzIHVzZWQgdG8gc2lsZW5jZSB0aGUgImludmFsaWQgY29udmVyc2lvbiIgZXJyb3IgdGhhdCB3b3VsZAorLSAgIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICBcCistICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OmZ1bmMpOyBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzLCByZXR0eXBlMiwgcGFyYW1ldGVyczIpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIGlzIHBpY2tlZCBhbW9uZyBhIHNldCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9ucywKKy0gICBuYW1lbHkgdGhlIG9uZSB3aXRoIHJldHR5cGUyIGFuZCBwYXJhbWV0ZXJzMi4gIFR3byBjb25zZWN1dGl2ZSBjYXN0cworLSAgIGFyZSB1c2VkIHRvIHNpbGVuY2UgdGhlICJjYW5ub3QgZmluZCBhIG1hdGNoIiBhbmQgImludmFsaWQgY29udmVyc2lvbiIKKy0gICBlcnJvcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSAgLyogVGhlIG91dGVyIGNhc3QgbXVzdCBiZSBhIHJlaW50ZXJwcmV0X2Nhc3QuCistICAgICBUaGUgaW5uZXIgY2FzdDogV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNldCBvZiBvdmVybG9hZGVkCistICAgICBmdW5jdGlvbnMsIGl0IHdvcmtzIGFzIGEgc3RhdGljX2Nhc3Q8PiwgY2hvb3NpbmcgdGhlIGRlc2lnbmF0ZWQgdmFyaWFudC4KKy0gICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgdmFyaWFudCwgaXQgd29ya3MgYXMgYQorLSAgICAgcmVpbnRlcnByZXRfY2FzdDw+LiBUaGUgcGFyZW50aGVzaXplZCBjYXN0IHN5bnRheCB3b3JrcyBib3RoIHdheXMuICAqLworLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIChyZXR0eXBlMigqKXBhcmFtZXRlcnMyKSg6OmZ1bmMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMscmV0dHlwZTIscGFyYW1ldGVyczIpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNXQVJOIChmdW5jKTsKKy0gICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiA6OmZ1bmMgaXMgdXNlZCBidXQgbm90IHdoZW4KKy0gICBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICBmdW5jIG11c3QgYmUgZGVmaW5lZCB3aXRob3V0IG92ZXJsb2FkZWQKKy0gICB2YXJpYW50cy4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTl8xIChmdW5jLCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMShmdW5jLG5hbWVzcGFjZSkgXAorLSAgIF9HTF9DWFhBTElBU1dBUk5fMiAoZnVuYywgbmFtZXNwYWNlKQorLS8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorLSAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworLSMgaWYgIV9fT1BUSU1JWkVfXworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICAgX0dMX1dBUk5fT05fVVNFIChmdW5jLCBcCistICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorLSAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKy0gICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorLSAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jIGVuZGlmCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNXQVJOMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CistICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gdGhlIGdpdmVuIG92ZXJsb2FkZWQgdmFyaWFudCBvZiA6OmZ1bmMKKy0gICBpcyB1c2VkIGJ1dCBub3Qgd2hlbiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jIGlzIHVzZWQuICAqLworLSNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTjFfMSAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorLSAgICAgICAgICAgICAgICAgICAgICAgIEdOVUxJQl9OQU1FU1BBQ0UpCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOMV8yIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBuYW1lc3BhY2UpCistLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCistICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCistIyBpZiAhX19PUFRJTUlaRV9fCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzeW1ib2wgOjoiICNmdW5jICIgcmVmZXJzIHRvIHRoZSBzeXN0ZW0gZnVuY3Rpb24uICIgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICAgIGV4dGVybiBfX3R5cGVvZl9fIChmdW5jKSBmdW5jCistIyBlbHNlCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCistICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSMgZW5kaWYKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistI2VuZGlmIC8qIF9HTF9DWFhERUZTX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMTAgKzAsMCBAQAorLSNpZm5kZWYgX05vcmV0dXJuCistIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCistICAgICAgfHwgMHg1MTEwIDw9IF9fU1VOUFJPX0MpCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKy0jIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCistIyBlbHNlCistIyAgZGVmaW5lIF9Ob3JldHVybgorLSMgZW5kaWYKKy0jZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCTIwMTEtMDgtMDcgMDY6MjI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMDkgKzAsMCBAQAorLS8qIEEgQyBtYWNybyBmb3IgZW1pdHRpbmcgd2FybmluZ3MgaWYgYSBmdW5jdGlvbiBpcyB1c2VkLgorLSAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CistICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKy0gICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKy0KKy0vKiBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAibGl0ZXJhbCBzdHJpbmciKSBpc3N1ZXMgYSBkZWNsYXJhdGlvbgorLSAgIGZvciBGVU5DVElPTiB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIGNvbXBpbGVyIHdhcm5pbmcgY29udGFpbmluZworLSAgIHRoZSB0ZXh0IG9mICJsaXRlcmFsIHN0cmluZyIgYW55d2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQsIGlmCistICAgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4gIElmIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKKy0gICBmZWF0dXJlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byBhbiB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorLQorLSAgIFRoaXMgbWFjcm8gaXMgdXNlZnVsIGZvciBtYXJraW5nIGEgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwKKy0gICBwb3J0YWJpbGl0eSB0cmFwLCB3aXRoIHRoZSBpbnRlbnQgdGhhdCAibGl0ZXJhbCBzdHJpbmciIGluY2x1ZGUKKy0gICBpbnN0cnVjdGlvbnMgb24gdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQKKy0gICBpbnN0ZWFkLiAgSG93ZXZlciwgb25lIG9mIHRoZSByZWFzb25zIHRoYXQgYSBmdW5jdGlvbiBpcyBhCistICAgcG9ydGFiaWxpdHkgdHJhcCBpcyBpZiBpdCBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZS4gIERlY2xhcmluZworLSAgIEZVTkNUSU9OIHdpdGggYSBkaWZmZXJlbnQgc2lnbmF0dXJlIGluIEMgaXMgYSBjb21waWxhdGlvbiBlcnJvciwgc28KKy0gICB0aGlzIG1hY3JvIG11c3QgdXNlIHRoZSBzYW1lIHR5cGUgYXMgYW55IGV4aXN0aW5nIGRlY2xhcmF0aW9uIHNvCistICAgdGhhdCBwcm9ncmFtcyB0aGF0IGF2b2lkIHRoZSBwcm9ibGVtYXRpYyBGVU5DVElPTiBkbyBub3QgZmFpbCB0bworLSAgIGNvbXBpbGUgbWVyZWx5IGJlY2F1c2UgdGhleSBpbmNsdWRlZCBhIGhlYWRlciB0aGF0IHBvaXNvbmVkIHRoZQorLSAgIGZ1bmN0aW9uLiAgQnV0IHRoaXMgaW1wbGllcyB0aGF0IF9HTF9XQVJOX09OX1VTRSBpcyBvbmx5IHNhZmUgdG8KKy0gICB1c2UgaWYgRlVOQ1RJT04gaXMga25vd24gdG8gYWxyZWFkeSBoYXZlIGEgZGVjbGFyYXRpb24uICBVc2Ugb2YKKy0gICB0aGlzIG1hY3JvIGltcGxpZXMgdGhhdCB0aGVyZSBtdXN0IG5vdCBiZSBhbnkgb3RoZXIgbWFjcm8gaGlkaW5nCistICAgdGhlIGRlY2xhcmF0aW9uIG9mIEZVTkNUSU9OOyBidXQgdW5kZWZpbmluZyBGVU5DVElPTiBmaXJzdCBpcyBwYXJ0CistICAgb2YgdGhlIHBvaXNvbmluZyBwcm9jZXNzIGFueXdheSAoYWx0aG91Z2ggZm9yIHN5bWJvbHMgdGhhdCBhcmUKKy0gICBwcm92aWRlZCBvbmx5IHZpYSBhIG1hY3JvLCB0aGUgcmVzdWx0IGlzIGEgY29tcGlsYXRpb24gZXJyb3IgcmF0aGVyCistICAgdGhhbiBhIHdhcm5pbmcgY29udGFpbmluZyAibGl0ZXJhbCBzdHJpbmciKS4gIEFsc28gbm90ZSB0aGF0IGluCistICAgQysrLCBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIGlmIEZVTkNUSU9OIGhhcyBubyBvdmVybG9hZHMuCistCistICAgRm9yIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHBvaXNvbiAnZ2V0bGluZScgYnk6CistICAgLSBhZGRpbmcgYSBjYWxsIHRvIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwKKy0gICAgIFtnZXRsaW5lXSkgaW4gY29uZmlndXJlLmFjLCB3aGljaCBwb3RlbnRpYWxseSBkZWZpbmVzCistICAgICBIQVZFX1JBV19ERUNMX0dFVExJTkUKKy0gICAtIGFkZGluZyB0aGlzIGNvZGUgdG8gYSBoZWFkZXIgdGhhdCB3cmFwcyB0aGUgc3lzdGVtIDxzdGRpby5oPjoKKy0gICAgICN1bmRlZiBnZXRsaW5lCistICAgICAjaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCistICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHJlcXVpcmVkIGJ5IFBPU0lYIDIwMDgsIGJ1dCIKKy0gICAgICAgIm5vdCB1bml2ZXJzYWxseSBwcmVzZW50OyB1c2UgdGhlIGdudWxpYiBtb2R1bGUgZ2V0bGluZSIpOworLSAgICAgI2VuZGlmCistCistICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHBvaXNvbiBnbG9iYWwgdmFyaWFibGVzLiAgQnV0IGl0IGlzCistICAgcG9zc2libGUgdG8gd3JpdGUgYSB3cmFwcGVyIGFjY2Vzc29yIGZ1bmN0aW9uLCBhbmQgcG9pc29uIHRoYXQKKy0gICAobGVzcyBjb21tb24gdXNhZ2UsIGxpa2UgJmVudmlyb24sIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvcgorLSAgIHJhdGhlciB0aGFuIGlzc3VlIHRoZSBuaWNlIHdhcm5pbmcsIGJ1dCB0aGUgZW5kIHJlc3VsdCBvZiBpbmZvcm1pbmcKKy0gICB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZWlyIHBvcnRhYmlsaXR5IHByb2JsZW0gaXMgc3RpbGwgYWNoaWV2ZWQpOgorLSAgICNpZiBIQVZFX1JBV19ERUNMX0VOVklST04KKy0gICBzdGF0aWMgaW5saW5lIGNoYXIgKioqcnBsX2Vudmlyb24gKHZvaWQpIHsgcmV0dXJuICZlbnZpcm9uOyB9CistICAgX0dMX1dBUk5fT05fVVNFIChycGxfZW52aXJvbiwgImVudmlyb24gaXMgbm90IGFsd2F5cyBwcm9wZXJseSBkZWNsYXJlZCIpOworLSAgICMgdW5kZWYgZW52aXJvbgorLSAgICMgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKy0gICAjZW5kaWYKKy0gICAqLworLSNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCistCistIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy0vKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLWV4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLS8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLWV4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKy0jIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKy1fR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCistIyBlbmRpZgorLSNlbmRpZgorLQorLS8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKy0gICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCistICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorLSAgIGFuZCBhdHRyaWJ1dGVzLgorLSAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKy0gICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworLSNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorLSMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorLWV4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorLSAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCistZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworLSMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorLV9HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKy0jIGVuZGlmCistI2VuZGlmCistCistLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CistICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKy0jaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCistIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCistIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCTIwMTItMDEtMDggMDI6MDc6MzkuOTUwNDg0NDM5IC0wODAwCitAQCAtMCwwICsxLDEwOSBAQAorKy8qIEEgQyBtYWNybyBmb3IgZW1pdHRpbmcgd2FybmluZ3MgaWYgYSBmdW5jdGlvbiBpcyB1c2VkLgorKyAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysvKiBfR0xfV0FSTl9PTl9VU0UgKGZ1bmN0aW9uLCAibGl0ZXJhbCBzdHJpbmciKSBpc3N1ZXMgYSBkZWNsYXJhdGlvbgorKyAgIGZvciBGVU5DVElPTiB3aGljaCB3aWxsIHRoZW4gdHJpZ2dlciBhIGNvbXBpbGVyIHdhcm5pbmcgY29udGFpbmluZworKyAgIHRoZSB0ZXh0IG9mICJsaXRlcmFsIHN0cmluZyIgYW55d2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQsIGlmCisrICAgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlci4gIElmIHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKKysgICBmZWF0dXJlLCB0aGUgbWFjcm8gZXhwYW5kcyB0byBhbiB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgorKworKyAgIFRoaXMgbWFjcm8gaXMgdXNlZnVsIGZvciBtYXJraW5nIGEgZnVuY3Rpb24gYXMgYSBwb3RlbnRpYWwKKysgICBwb3J0YWJpbGl0eSB0cmFwLCB3aXRoIHRoZSBpbnRlbnQgdGhhdCAibGl0ZXJhbCBzdHJpbmciIGluY2x1ZGUKKysgICBpbnN0cnVjdGlvbnMgb24gdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQKKysgICBpbnN0ZWFkLiAgSG93ZXZlciwgb25lIG9mIHRoZSByZWFzb25zIHRoYXQgYSBmdW5jdGlvbiBpcyBhCisrICAgcG9ydGFiaWxpdHkgdHJhcCBpcyBpZiBpdCBoYXMgdGhlIHdyb25nIHNpZ25hdHVyZS4gIERlY2xhcmluZworKyAgIEZVTkNUSU9OIHdpdGggYSBkaWZmZXJlbnQgc2lnbmF0dXJlIGluIEMgaXMgYSBjb21waWxhdGlvbiBlcnJvciwgc28KKysgICB0aGlzIG1hY3JvIG11c3QgdXNlIHRoZSBzYW1lIHR5cGUgYXMgYW55IGV4aXN0aW5nIGRlY2xhcmF0aW9uIHNvCisrICAgdGhhdCBwcm9ncmFtcyB0aGF0IGF2b2lkIHRoZSBwcm9ibGVtYXRpYyBGVU5DVElPTiBkbyBub3QgZmFpbCB0bworKyAgIGNvbXBpbGUgbWVyZWx5IGJlY2F1c2UgdGhleSBpbmNsdWRlZCBhIGhlYWRlciB0aGF0IHBvaXNvbmVkIHRoZQorKyAgIGZ1bmN0aW9uLiAgQnV0IHRoaXMgaW1wbGllcyB0aGF0IF9HTF9XQVJOX09OX1VTRSBpcyBvbmx5IHNhZmUgdG8KKysgICB1c2UgaWYgRlVOQ1RJT04gaXMga25vd24gdG8gYWxyZWFkeSBoYXZlIGEgZGVjbGFyYXRpb24uICBVc2Ugb2YKKysgICB0aGlzIG1hY3JvIGltcGxpZXMgdGhhdCB0aGVyZSBtdXN0IG5vdCBiZSBhbnkgb3RoZXIgbWFjcm8gaGlkaW5nCisrICAgdGhlIGRlY2xhcmF0aW9uIG9mIEZVTkNUSU9OOyBidXQgdW5kZWZpbmluZyBGVU5DVElPTiBmaXJzdCBpcyBwYXJ0CisrICAgb2YgdGhlIHBvaXNvbmluZyBwcm9jZXNzIGFueXdheSAoYWx0aG91Z2ggZm9yIHN5bWJvbHMgdGhhdCBhcmUKKysgICBwcm92aWRlZCBvbmx5IHZpYSBhIG1hY3JvLCB0aGUgcmVzdWx0IGlzIGEgY29tcGlsYXRpb24gZXJyb3IgcmF0aGVyCisrICAgdGhhbiBhIHdhcm5pbmcgY29udGFpbmluZyAibGl0ZXJhbCBzdHJpbmciKS4gIEFsc28gbm90ZSB0aGF0IGluCisrICAgQysrLCBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIGlmIEZVTkNUSU9OIGhhcyBubyBvdmVybG9hZHMuCisrCisrICAgRm9yIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHBvaXNvbiAnZ2V0bGluZScgYnk6CisrICAgLSBhZGRpbmcgYSBjYWxsIHRvIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwKKysgICAgIFtnZXRsaW5lXSkgaW4gY29uZmlndXJlLmFjLCB3aGljaCBwb3RlbnRpYWxseSBkZWZpbmVzCisrICAgICBIQVZFX1JBV19ERUNMX0dFVExJTkUKKysgICAtIGFkZGluZyB0aGlzIGNvZGUgdG8gYSBoZWFkZXIgdGhhdCB3cmFwcyB0aGUgc3lzdGVtIDxzdGRpby5oPjoKKysgICAgICN1bmRlZiBnZXRsaW5lCisrICAgICAjaWYgSEFWRV9SQVdfREVDTF9HRVRMSU5FCisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldGxpbmUsICJnZXRsaW5lIGlzIHJlcXVpcmVkIGJ5IFBPU0lYIDIwMDgsIGJ1dCIKKysgICAgICAgIm5vdCB1bml2ZXJzYWxseSBwcmVzZW50OyB1c2UgdGhlIGdudWxpYiBtb2R1bGUgZ2V0bGluZSIpOworKyAgICAgI2VuZGlmCisrCisrICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHBvaXNvbiBnbG9iYWwgdmFyaWFibGVzLiAgQnV0IGl0IGlzCisrICAgcG9zc2libGUgdG8gd3JpdGUgYSB3cmFwcGVyIGFjY2Vzc29yIGZ1bmN0aW9uLCBhbmQgcG9pc29uIHRoYXQKKysgICAobGVzcyBjb21tb24gdXNhZ2UsIGxpa2UgJmVudmlyb24sIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvcgorKyAgIHJhdGhlciB0aGFuIGlzc3VlIHRoZSBuaWNlIHdhcm5pbmcsIGJ1dCB0aGUgZW5kIHJlc3VsdCBvZiBpbmZvcm1pbmcKKysgICB0aGUgZGV2ZWxvcGVyIGFib3V0IHRoZWlyIHBvcnRhYmlsaXR5IHByb2JsZW0gaXMgc3RpbGwgYWNoaWV2ZWQpOgorKyAgICNpZiBIQVZFX1JBV19ERUNMX0VOVklST04KKysgICBzdGF0aWMgaW5saW5lIGNoYXIgKioqcnBsX2Vudmlyb24gKHZvaWQpIHsgcmV0dXJuICZlbnZpcm9uOyB9CisrICAgX0dMX1dBUk5fT05fVVNFIChycGxfZW52aXJvbiwgImVudmlyb24gaXMgbm90IGFsd2F5cyBwcm9wZXJseSBkZWNsYXJlZCIpOworKyAgICMgdW5kZWYgZW52aXJvbgorKyAgICMgZGVmaW5lIGVudmlyb24gKCpycGxfZW52aXJvbiAoKSkKKysgICAjZW5kaWYKKysgICAqLworKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFCisrCisrIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKysvKiBBIGNvbXBpbGVyIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDQuMy4wIGFuZCBsYXRlci4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtZXNzYWdlKSkpCisrIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworKy8qIFZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmdW5jdGlvbi4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK2V4dGVybiBfX3R5cGVvZl9fIChmdW5jdGlvbikgZnVuY3Rpb24KKysjIGVsc2UgLyogVW5zdXBwb3J0ZWQuICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0UoZnVuY3Rpb24sIG1lc3NhZ2UpIFwKKytfR0xfV0FSTl9FWFRFUk5fQyBpbnQgX2dsX3dhcm5fb25fdXNlCisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qIF9HTF9XQVJOX09OX1VTRV9DWFggKGZ1bmN0aW9uLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCAic3RyaW5nIikKKysgICBpcyBsaWtlIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJzdHJpbmciKSwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzCisrICAgZGVjbGFyZWQgd2l0aCB0aGUgZ2l2ZW4gcHJvdG90eXBlLCBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLAorKyAgIGFuZCBhdHRyaWJ1dGVzLgorKyAgIFRoaXMgdmFyaWFudCBpcyB1c2VmdWwgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGluIEMrKy4gX0dMX1dBUk5fT05fVVNFIGRvZXMKKysgICBub3Qgd29yayBpbiB0aGlzIGNhc2UuICAqLworKyNpZm5kZWYgX0dMX1dBUk5fT05fVVNFX0NYWAorKyMgaWYgNCA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorK2V4dGVybiByZXR0eXBlIGZ1bmN0aW9uIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMgXAorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fd2FybmluZ19fIChtc2cpKSkKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCisrZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRV9DWFgoZnVuY3Rpb24scmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG1zZykgXAorK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogX0dMX1dBUk5fRVhURVJOX0MgZGVjbGFyYXRpb247CisrICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKysjaWZuZGVmIF9HTF9XQVJOX0VYVEVSTl9DCisrIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisrIyAgZGVmaW5lIF9HTF9XQVJOX0VYVEVSTl9DIGV4dGVybiAiQyIKKysjIGVsc2UKKysjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuCisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9hbGxvY2F0b3IuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9hbGxvY2F0b3IuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvYWxsb2NhdG9yLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9hbGxvY2F0b3IuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjA1MDQ4NDQ0NCAtMDgwMAorQEAgLTQ1LDExICs0NSwxMCBAQCBzdHJ1Y3QgYWxsb2NhdG9yCisgICAvKiBDYWxsIEZSRUUgdG8gZnJlZSBtZW1vcnksIGxpa2UgJ2ZyZWUnLiAgKi8KKyAgIHZvaWQgKCpmcmVlKSAodm9pZCAqKTsKKyAKKy0gIC8qIElmIG5vbm51bGwsIGNhbGwgRElFIChTSVpFKSBpZiBNQUxMT0MgKFNJWkUpIG9yIFJFQUxMT0MgKC4uLiwKKy0gICAgIFNJWkUpIGZhaWxzLiAgRElFIHNob3VsZCBub3QgcmV0dXJuLiAgU0laRSBzaG91bGQgZXF1YWwgU0laRV9NQVgKKy0gICAgIGlmIHNpemVfdCBvdmVyZmxvdyB3YXMgZGV0ZWN0ZWQgd2hpbGUgY2FsY3VsYXRpbmcgc2l6ZXMgdG8gYmUKKy0gICAgIHBhc3NlZCB0byBNQUxMT0Mgb3IgUkVBTExPQy4gICovCistICB2b2lkICgqZGllKSAoc2l6ZV90KTsKKysgIC8qIElmIG5vbm51bGwsIGNhbGwgRElFIGlmIE1BTExPQyBvciBSRUFMTE9DIGZhaWxzLiAgRElFIHNob3VsZCBub3QKKysgICAgIHJldHVybi4gIERJRSBjYW4gYmUgdXNlZCBieSBjb2RlIHRoYXQgZGV0ZWN0cyBtZW1vcnkgb3ZlcmZsb3cKKysgICAgIHdoaWxlIGNhbGN1bGF0aW5nIHNpemVzIHRvIGJlIHBhc3NlZCB0byBNQUxMT0Mgb3IgUkVBTExPQy4gICovCisrICB2b2lkICgqZGllKSAodm9pZCk7CisgfTsKKyAKKyAvKiBBbiBhbGxvY2F0b3IgdXNpbmcgdGhlIHN0ZGxpYiBmdW5jdGlvbnMgYW5kIGEgbnVsbCBESUUgZnVuY3Rpb24uICAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jIGxpYmljb252LTEuMTQvc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYW5vbmljYWxpemUtbGdwbC5jCTIwMTItMDEtMDggMDI6MDc6NDAuMDk0NDg0NDQ2IC0wODAwCitAQCAtMTI1LDcgKzEyNSw3IEBAIF9fcmVhbHBhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnJlc28KKyAjZWxzZQorICAgcGF0aF9tYXggPSBwYXRoY29uZiAobmFtZSwgX1BDX1BBVEhfTUFYKTsKKyAgIGlmIChwYXRoX21heCA8PSAwKQorLSAgICBwYXRoX21heCA9IDgxOTI7CisrICAgIHBhdGhfbWF4ID0gMTAyNDsKKyAjZW5kaWYKKyAKKyAgIGlmIChyZXNvbHZlZCA9PSBOVUxMKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYXJlYWRsaW5rYXQuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYXJlYWRsaW5rYXQuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2FyZWFkbGlua2F0LmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9jYXJlYWRsaW5rYXQuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjEwMjQ4NDQ0NSAtMDgwMAorQEAgLTEzMyw3ICsxMzMsNiBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICAgICAgICAgIGlmIChidWYgPT0gc3RhY2tfYnVmKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGNoYXIgKmIgPSAoY2hhciAqKSBhbGxvYy0+YWxsb2NhdGUgKGxpbmtfc2l6ZSk7CistICAgICAgICAgICAgICBidWZfc2l6ZSA9IGxpbmtfc2l6ZTsKKyAgICAgICAgICAgICAgIGlmICghIGIpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgbWVtY3B5IChiLCBidWYsIGxpbmtfc2l6ZSk7CitAQCAtMTU3LDExICsxNTYsNiBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICAgICAgICBidWZfc2l6ZSAqPSAyOworICAgICAgIGVsc2UgaWYgKGJ1Zl9zaXplIDwgYnVmX3NpemVfbWF4KQorICAgICAgICAgYnVmX3NpemUgPSBidWZfc2l6ZV9tYXg7CistICAgICAgZWxzZSBpZiAoYnVmX3NpemVfbWF4IDwgU0laRV9NQVgpCistICAgICAgICB7CistICAgICAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworLSAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgIH0KKyAgICAgICBlbHNlCisgICAgICAgICBicmVhazsKKyAgICAgICBidWYgPSAoY2hhciAqKSBhbGxvYy0+YWxsb2NhdGUgKGJ1Zl9zaXplKTsKK0BAIC0xNjksNyArMTYzLDcgQEAgY2FyZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGVuYQorICAgd2hpbGUgKGJ1Zik7CisgCisgICBpZiAoYWxsb2MtPmRpZSkKKy0gICAgYWxsb2MtPmRpZSAoYnVmX3NpemUpOworKyAgICBhbGxvYy0+ZGllICgpOworICAgZXJybm8gPSBFTk9NRU07CisgICByZXR1cm4gTlVMTDsKKyB9CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm5vLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJybm8uaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJybm8uaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm5vLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xMjI0ODQ0NDYgLTA4MDAKK0BAIC0xNiw3ICsxNiw3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorKyNpZm5kZWYgX0dMX0VSUk5PX0gKKyAKKyAjaWYgX19HTlVDX18gPj0gMworIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK0BAIC0yNiw4ICsyNiw4IEBACisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9FUlJOT19IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICisrI2lmbmRlZiBfR0xfRVJSTk9fSAorKyNkZWZpbmUgX0dMX0VSUk5PX0gKKyAKKyAKKyAvKiBPbiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMsIG1hbnkgbWFjcm9zIGFyZSBub3QgZGVmaW5lZC4gICovCitAQCAtMTQ3LDE2ICsxNDcsNiBAQAorICMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQIDEKKyAjIGVuZGlmCisgCistIyBpZm5kZWYgRU5FVFJFU0VUCistIyAgZGVmaW5lIEVORVRSRVNFVCAyMDExCistIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVCAxCistIyBlbmRpZgorLQorLSMgaWZuZGVmIEVDT05OQUJPUlRFRAorLSMgIGRlZmluZSBFQ09OTkFCT1JURUQgMjAxMgorLSMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQgMQorLSMgZW5kaWYKKy0KKyAjIGlmbmRlZiBFU1RBTEUKKyAjICBkZWZpbmUgRVNUQUxFICAgIDIwMDkKKyAjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNUQUxFIDEKK0BAIC0xNzMsNSArMTYzLDUgQEAKKyAjIGVuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9FUlJOT19IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9FUlJOT19IICovCisrI2VuZGlmIC8qIF9HTF9FUlJOT19IICovCisrI2VuZGlmIC8qIF9HTF9FUlJOT19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Vycm9yLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJyb3IuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJyb3IuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Vycm9yLmMJMjAxMi0wMS0wOCAwMjowNzo0MC4xMzQ0ODQ0NDggLTA4MDAKK0BAIC05NywxNSArOTcsMTEgQEAgZXh0ZXJuIHZvaWQgX19lcnJvcl9hdF9saW5lIChpbnQgc3RhdHVzLAorIC8qIFRoZSBnbnVsaWIgb3ZlcnJpZGUgb2YgZmNudGwgaXMgbm90IG5lZWRlZCBpbiB0aGlzIGZpbGUuICAqLworICMgdW5kZWYgZmNudGwKKyAKKy0jIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUgorKyMgaWYgIUhBVkVfREVDTF9TVFJFUlJPUl9SICYmIFNUUkVSUk9SX1JfQ0hBUl9QCisgIyAgaWZuZGVmIEhBVkVfREVDTF9TVFJFUlJPUl9SCisgInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKyAjICBlbmRpZgorLSMgIGlmIFNUUkVSUk9SX1JfQ0hBUl9QCisgY2hhciAqc3RyZXJyb3JfciAoKTsKKy0jICBlbHNlCistaW50IHN0cmVycm9yX3IgKCk7CistIyAgZW5kaWYKKyAjIGVuZGlmCisgCisgLyogVGhlIGNhbGxpbmcgcHJvZ3JhbSBzaG91bGQgZGVmaW5lIHByb2dyYW1fbmFtZSBhbmQgc2V0IGl0IHRvIHRoZQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9mY250bC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL2ZjbnRsLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ZjbnRsLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9mY250bC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMTU0NDg0NDQ5IC0wODAwCitAQCAtNDAsNyArNDAsNyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorKyNpZm5kZWYgX0dMX0ZDTlRMX0gKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogT24gc29tZSBzeXN0ZW1zIG90aGVyIHRoYW4gZ2xpYmMsIDxzeXMvc3RhdC5oPiBpcyBhIHByZXJlcXVpc2l0ZSBvZgorQEAgLTU1LDggKzU1LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX0ZDTlRMX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gKKysjaWZuZGVmIF9HTF9GQ05UTF9ICisrI2RlZmluZSBfR0xfRkNOVExfSAorIAorICNpZm5kZWYgX19HTElCQ19fIC8qIEF2b2lkIG5hbWVzcGFjZSBwb2xsdXRpb24gb24gZ2xpYmMgc3lzdGVtcy4gICovCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KK0BAIC0zMjAsNiArMzIwLDYgQEAgX0dMX1dBUk5fT05fVVNFIChvcGVuYXQsICJvcGVuYXQgaXMgbm90CisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9IICovCisrI2VuZGlmIC8qIF9HTF9GQ05UTF9IICovCisrI2VuZGlmIC8qIF9HTF9GQ05UTF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ludHByb3BzLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvaW50cHJvcHMuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvaW50cHJvcHMuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2ludHByb3BzLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xNzQ0ODQ0NTAgLTA4MDAKK0BAIC0yMiwxMyArMjIsMTQgQEAKKyAKKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgCistLyogUmV0dXJuIGFuIGludGVnZXIgdmFsdWUsIGNvbnZlcnRlZCB0byB0aGUgc2FtZSB0eXBlIGFzIHRoZSBpbnRlZ2VyCistICAgZXhwcmVzc2lvbiBFIGFmdGVyIGludGVnZXIgdHlwZSBwcm9tb3Rpb24uICBWIGlzIHRoZSB1bmNvbnZlcnRlZCB2YWx1ZS4gICovCistI2RlZmluZSBfR0xfSU5UX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgKyAodikpCisrLyogUmV0dXJuIGEgaW50ZWdlciB2YWx1ZSwgY29udmVydGVkIHRvIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGludGVnZXIKKysgICBleHByZXNzaW9uIEUgYWZ0ZXIgaW50ZWdlciB0eXBlIHByb21vdGlvbi4gIFYgaXMgdGhlIHVuY29udmVydGVkIHZhbHVlLgorKyAgIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCisrI2RlZmluZSBfR0xfSU5UX0NPTlZFUlQoZSwgdikgKChlKSAtIChlKSArICh2KSkKKyAKKyAvKiBBY3QgbGlrZSBfR0xfSU5UX0NPTlZFUlQgKEUsIC1WKSBidXQgd29yayBhcm91bmQgYSBidWcgaW4gSVJJWCA2LjUgY2M7IHNlZQorICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWdudWxpYi8yMDExLTA1L21zZzAwNDA2Lmh0bWw+LiAgKi8KKy0jZGVmaW5lIF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQoZSwgdikgKDAgKiAoZSkgLSAodikpCisrI2RlZmluZSBfR0xfSU5UX05FR0FURV9DT05WRVJUKGUsIHYpICgoZSkgLSAoZSkgLSAodikpCisgCisgLyogVGhlIGV4dHJhIGNhc3RzIGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHdvcmsgYXJvdW5kIGNvbXBpbGVyIGJ1Z3MsCisgICAgZS5nLiwgaW4gQ3JheSBDIDUuMC4zLjAuICAqLworQEAgLTUyLDcgKzUzLDcgQEAKKyAjZGVmaW5lIFRZUEVfU0lHTkVEKHQpICghICgodCkgMCA8ICh0KSAtMSkpCisgCisgLyogUmV0dXJuIDEgaWYgdGhlIGludGVnZXIgZXhwcmVzc2lvbiBFLCBhZnRlciBpbnRlZ2VyIHByb21vdGlvbiwgaGFzCistICAgYSBzaWduZWQgdHlwZS4gICovCisrICAgYSBzaWduZWQgdHlwZS4gIEUgc2hvdWxkIG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gICovCisgI2RlZmluZSBfR0xfSU5UX1NJR05FRChlKSAoX0dMX0lOVF9ORUdBVEVfQ09OVkVSVCAoZSwgMSkgPCAwKQorIAorIAorQEAgLTMxMCwxMCArMzExLDEzIEBACisgLyogUmV0dXJuIDEgaWYgdGhlIGV4cHJlc3Npb24gQSA8b3A+IEIgd291bGQgb3ZlcmZsb3csCisgICAgd2hlcmUgT1BfUkVTVUxUX09WRVJGTE9XIChBLCBCLCBNSU4sIE1BWCkgZG9lcyB0aGUgYWN0dWFsIHRlc3QsCisgICAgYXNzdW1pbmcgTUlOIGFuZCBNQVggYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZvciB0aGUgcmVzdWx0IHR5cGUuCistICAgQXJndW1lbnRzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy4gICovCisrCisrICAgVGhpcyBtYWNybyBhc3N1bWVzIHRoYXQgQSB8IEIgaXMgYSB2YWxpZCBpbnRlZ2VyIGlmIGJvdGggQSBhbmQgQiBhcmUsCisrICAgd2hpY2ggaXMgdHJ1ZSBvZiBhbGwga25vd24gcHJhY3RpY2FsIGhvc3RzLiAgSWYgdGhpcyBpcyBhIHByb2JsZW0KKysgICBmb3IgeW91LCBwbGVhc2UgbGV0IHVzIGtub3cgaG93IHRvIGZpeCBpdCBmb3IgeW91ciBob3N0LiAgKi8KKyAjZGVmaW5lIF9HTF9CSU5BUllfT1BfT1ZFUkZMT1coYSwgYiwgb3BfcmVzdWx0X292ZXJmbG93KSAgICAgICAgXAorICAgb3BfcmVzdWx0X292ZXJmbG93IChhLCBiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUlOSU1VTSAoMCAqIChiKSArIChhKSksICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NQVhJTVVNICgwICogKGIpICsgKGEpKSkKKysgICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NSU5JTVVNICgoYSkgfCAoYikpLCAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01BWElNVU0gKChhKSB8IChiKSkpCisgCisgI2VuZGlmIC8qIF9HTF9JTlRQUk9QU19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL01ha2VmaWxlLmdudWxpYiBsaWJpY29udi0xLjE0L3NyY2xpYi9NYWtlZmlsZS5nbnVsaWIKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL01ha2VmaWxlLmdudWxpYgkyMDEyLTAxLTA4IDAyOjA1OjE4Ljc1NDQ3NzYwNiAtMDgwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL01ha2VmaWxlLmdudWxpYgkyMDEyLTAxLTA4IDAyOjA3OjQzLjEzODQ4NDU5MiAtMDgwMAorQEAgLTksNyArOSw3IEBACisgIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorICMKKyAjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4KKy0jIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworKyMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisgCisgCisgTU9TVExZQ0xFQU5GSUxFUyArPSBjb3JlICouc3RhY2tkdW1wCitAQCAtNjAsMTIgKzYwLDYwIEBAIEVYVFJBX0RJU1QgKz0gYXJlYWRsaW5rLmgKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGFyZWFkbGluaworIAorKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYXJnLW5vbm51bGwKKysKKysjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKysjIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKysjIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CisrIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorKworK0JVSUxUX1NPVVJDRVMgKz0gYXJnLW5vbm51bGwuaAorKyMgVGhlIGFyZy1ub25udWxsLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisrIyBidWlsZC1hdXgvYXJnLW5vbm51bGwuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCisrYXJnLW5vbm51bGwuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorKwlzZWQgLW4gLWUgJy9HTF9BUkdfTk9OTlVMTC8sJCRwJyBcCisrCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oIFwKKysJICA+ICRALXQgJiYgXAorKwltdiAkQC10ICRACisrTU9TVExZQ0xFQU5GSUxFUyArPSBhcmctbm9ubnVsbC5oIGFyZy1ub25udWxsLmgtdAorKworK0FSR19OT05OVUxMX0g9YXJnLW5vbm51bGwuaAorKworK0VYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKworKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYXJnLW5vbm51bGwKKysKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGJpbmFyeS1pbworIAorIGxpYmljcnRfYV9TT1VSQ0VTICs9IGJpbmFyeS1pby5oCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBiaW5hcnktaW8KKyAKKysjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGMrK2RlZnMKKysKKysjIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKysjIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKysjIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CisrIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorKworK0JVSUxUX1NPVVJDRVMgKz0gYysrZGVmcy5oCisrIyBUaGUgYysrZGVmcy5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworKyMgYnVpbGQtYXV4L2MrK2RlZnMuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dCBvZmYuCisrYysrZGVmcy5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmgKKysJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKysJc2VkIC1uIC1lICcvX0dMX0NYWERFRlMvLCQkcCcgXAorKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvYysrZGVmcy5oIFwKKysJICA+ICRALXQgJiYgXAorKwltdiAkQC10ICRACisrTU9TVExZQ0xFQU5GSUxFUyArPSBjKytkZWZzLmggYysrZGVmcy5oLXQKKysKKytDWFhERUZTX0g9YysrZGVmcy5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmgKKysKKysjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGMrK2RlZnMKKysKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNhbm9uaWNhbGl6ZS1sZ3BsCisgCisgCitAQCAtMTAwLDggKzE0OCw3IEBAIGlmIEdMX0dFTkVSQVRFX0VSUk5PX0gKKyBlcnJuby5oOiBlcnJuby5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9FUlJOT19IJydAfCQoTkVYVF9FUlJOT19IKXxnJyBcCitAQCAtMTQyLDE1ICsxODksMTQgQEAgQlVJTFRfU09VUkNFUyArPSBmY250bC5oCisgZmNudGwuaDogZmNudGwuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfRkNOVExfSCcnQHwkKE5FWFRfRkNOVExfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNOVEwnJ0AvJChHTlVMSUJfRkNOVEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX05PTkJMT0NLSU5HJydALyQoR05VTElCX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PUEVOJydALyQoR05VTElCX09QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU5BVCcnQC8kKEdOVUxJQl9PUEVOQVQpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDTlRMJydAfCQoR05VTElCX0ZDTlRMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT1BFTicnQHwkKEdOVUxJQl9PUEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PUEVOQVQnJ0B8JChHTlVMSUJfT1BFTkFUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRkNOVEwnJ0B8JChIQVZFX0ZDTlRMKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfT1BFTkFUJydAfCQoSEFWRV9PUEVOQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9GQ05UTCcnQHwkKFJFUExBQ0VfRkNOVEwpfGcnIFwKK0BAIC0yOTcsNyArMzQzLDcgQEAgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jbworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcmVsb2NhdGFibGUtcHJvZy13cmFwcGVyCisgCisgCistRVhUUkFfRElTVCArPSBhbGxvY2F0b3IuYyBhbGxvY2F0b3IuaCBhcmVhZGxpbmsuYyBhcmVhZGxpbmsuaCBjLWN0eXBlLmMgYy1jdHlwZS5oIGNhbm9uaWNhbGl6ZS1sZ3BsLmMgY2FyZWFkbGlua2F0LmMgY2FyZWFkbGlua2F0LmggbWFsbG9jYS5jIG1hbGxvY2EuaCBwcm9nbmFtZS5jIHByb2duYW1lLmggcHJvZ3JlbG9jLmMgcmVhZGxpbmsuYyByZWxvY2F0YWJsZS5jIHJlbG9jYXRhYmxlLmggcmVsb2N3cmFwcGVyLmMgc2V0ZW52LmMKKytFWFRSQV9ESVNUICs9IGFsbG9jYXRvci5jIGFsbG9jYXRvci5oIGFyZWFkbGluay5jIGFyZWFkbGluay5oIGMtY3R5cGUuYyBjLWN0eXBlLmggY2Fub25pY2FsaXplLWxncGwuYyBjYXJlYWRsaW5rYXQuYyBjYXJlYWRsaW5rYXQuaCBtYWxsb2NhLmMgbWFsbG9jYS5oIHByb2duYW1lLmMgcHJvZ25hbWUuaCBwcm9ncmVsb2MuYyByZWFkbGluay5jIHJlbG9jYXRhYmxlLmMgcmVsb2NhdGFibGUuaCByZWxvY3dyYXBwZXIuYyBzZXRlbnYuYyBzdHJlcnJvci5jCisgCisgRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9pbnN0YWxsLXJlbG9jCisgCitAQCAtMzA1LDkgKzM1MSwxMCBAQCBFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2luCisgCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzYWZlLXJlYWQKKyAKKy1saWJpY3J0X2FfU09VUkNFUyArPSBzYWZlLXJlYWQuYworIAorLUVYVFJBX0RJU1QgKz0gc2FmZS1yZWFkLmgKKytFWFRSQV9ESVNUICs9IHNhZmUtcmVhZC5jIHNhZmUtcmVhZC5oCisrCisrRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc2FmZS1yZWFkLmMKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNhZmUtcmVhZAorIAorQEAgLTMyMCwyNCArMzY3LDIwIEBAIEJVSUxUX1NPVVJDRVMgKz0gc2lnbmFsLmgKKyBzaWduYWwuaDogc2lnbmFsLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU0lHTkFMX0gnJ0B8JChORVhUX1NJR05BTF9IKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVEhSRUFEX1NJR01BU0snJ0B8JChHTlVMSUJfUFRIUkVBRF9TSUdNQVNLKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydALyQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NJR1BST0NNQVNLJydALyQoR05VTElCX1NJR1BST0NNQVNLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TSUdBQ1RJT04nJ0AvJChHTlVMSUJfU0lHQUNUSU9OKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdOQUxfSF9TSUdQSVBFJydAfCQoR05VTElCX1NJR05BTF9IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NJR1BST0NNQVNLJydAfCQoR05VTElCX1NJR1BST0NNQVNLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TSUdBQ1RJT04nJ0B8JChHTlVMSUJfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcnJ0B8JChIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfUFRIUkVBRF9TSUdNQVNLJydAfCQoSEFWRV9QVEhSRUFEX1NJR01BU0spfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdTRVRfVCcnQHwkKEhBVkVfU0lHU0VUX1QpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdJTkZPX1QnJ0B8JChIQVZFX1NJR0lORk9fVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR0FDVElPTicnQHwkKEhBVkVfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04nJ0B8JChIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QnJ0B8JChIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHSEFORExFUl9UJydAfCQoSEFWRV9TSUdIQU5ETEVSX1QpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9QVEhSRUFEX1NJR01BU0snJ0B8JChSRVBMQUNFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRS9yICQoV0FSTl9PTl9VU0VfSCknIFwKK0BAIC0zNjgsODcgKzQxMSw2IEBAIEVYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHNpZ3Byb2NtYXNrLmMKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNpZ3Byb2NtYXNrCisgCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybgorLQorLSMgQmVjYXVzZSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgZGVmaW5lcyBhIHZhcmlhYmxlIHVzZWQgYnkgb3RoZXIKKy0jIGdudWxpYiBNYWtlZmlsZSBzbmlwcGV0cywgaXQgbXVzdCBiZSBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0CistIyBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKy0KKy1fTk9SRVRVUk5fSD0kKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybgorLQorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc25pcHBldC9hcmctbm9ubnVsbAorLQorLSMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorLSMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorLSMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKy0jICdhbGwnIGRlZmluZWQgYWJvdmUuCistCistQlVJTFRfU09VUkNFUyArPSBhcmctbm9ubnVsbC5oCistIyBUaGUgYXJnLW5vbm51bGwuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKy0jIGJ1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKy0jIG9mZi4KKy1hcmctbm9ubnVsbC5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvR0xfQVJHX05PTk5VTEwvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSBhcmctbm9ubnVsbC5oIGFyZy1ub25udWxsLmgtdAorLQorLUFSR19OT05OVUxMX0g9YXJnLW5vbm51bGwuaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnMKKy0KKy0jIFRoZSBCVUlMVF9TT1VSQ0VTIGNyZWF0ZWQgYnkgdGhpcyBNYWtlZmlsZSBzbmlwcGV0IGFyZSBub3QgdXNlZCB2aWEgI2luY2x1ZGUKKy0jIHN0YXRlbWVudHMgYnV0IHRocm91Z2ggZGlyZWN0IGZpbGUgcmVmZXJlbmNlLiBUaGVyZWZvcmUgdGhpcyBzbmlwcGV0IG11c3QgYmUKKy0jIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQgbmVlZCBpdC4gVGhpcyBpcyBlbnN1cmVkIGJ5IHRoZSBhcHBsaWNhYmlsaXR5CistIyAnYWxsJyBkZWZpbmVkIGFib3ZlLgorLQorLUJVSUxUX1NPVVJDRVMgKz0gYysrZGVmcy5oCistIyBUaGUgYysrZGVmcy5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworLSMgYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKy1jKytkZWZzLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCistCXNlZCAtbiAtZSAnL19HTF9DWFhERUZTLywkJHAnIFwKKy0JICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSBjKytkZWZzLmggYysrZGVmcy5oLXQKKy0KKy1DWFhERUZTX0g9YysrZGVmcy5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAorLQorLSMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc25pcHBldC9jKytkZWZzCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlCistCistQlVJTFRfU09VUkNFUyArPSB3YXJuLW9uLXVzZS5oCistIyBUaGUgd2Fybi1vbi11c2UuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKy0jIGJ1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQKKy0jIG9mZi4KKy13YXJuLW9uLXVzZS5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvXi5pZm5kZWYvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oIFwKKy0JICA+ICRALXQgJiYgXAorLQltdiAkQC10ICRACistTU9TVExZQ0xFQU5GSUxFUyArPSB3YXJuLW9uLXVzZS5oIHdhcm4tb24tdXNlLmgtdAorLQorLVdBUk5fT05fVVNFX0g9d2Fybi1vbi11c2UuaAorLQorLUVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlCistCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdGF0CisgCisgCitAQCAtNDkxLDggKzQ1Myw3IEBAIGlmIEdMX0dFTkVSQVRFX1NURERFRl9ICisgc3RkZGVmLmg6IHN0ZGRlZi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERERUZfSCcnQHwkKE5FWFRfU1REREVGX0gpfGcnIFwKK0BAIC01MjEsOCArNDgyLDcgQEAgaWYgR0xfR0VORVJBVEVfU1RESU5UX0gKKyBzdGRpbnQuaDogc3RkaW50LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorKwkgIHNlZCAtZSAncy9AJydIQVZFX1NURElOVF9IJydALyQoSEFWRV9TVERJTlRfSCkvZycgXAorIAkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorQEAgLTU3MCw2MyArNTMwLDYyIEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RkaW8uaAorIHN0ZGlvLmg6IHN0ZGlvLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RESU9fSCcnQHwkKE5FWFRfU1RESU9fSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFBSSU5URicnQC8kKEdOVUxJQl9EUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0xPU0UnJ0AvJChHTlVMSUJfRkNMT1NFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRkxVU0gnJ0AvJChHTlVMSUJfRkZMVVNIKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GR0VUQycnQC8kKEdOVUxJQl9GR0VUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkdFVFMnJ0AvJChHTlVMSUJfRkdFVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZPUEVOJydALyQoR05VTElCX0ZPUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFJJTlRGJydALyQoR05VTElCX0ZQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfRlBSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVUkdFJydALyQoR05VTElCX0ZQVVJHRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVVEMnJ0AvJChHTlVMSUJfRlBVVEMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQVVRTJydALyQoR05VTElCX0ZQVVRTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVBRCcnQC8kKEdOVUxJQl9GUkVBRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlJFT1BFTicnQC8kKEdOVUxJQl9GUkVPUEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0NBTkYnJ0AvJChHTlVMSUJfRlNDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0VFSycnQC8kKEdOVUxJQl9GU0VFSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNFRUtPJydALyQoR05VTElCX0ZTRUVLTykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlRFTEwnJ0AvJChHTlVMSUJfRlRFTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZURUxMTycnQC8kKEdOVUxJQl9GVEVMTE8pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZXUklURScnQC8kKEdOVUxJQl9GV1JJVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEMnJ0AvJChHTlVMSUJfR0VUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQ0hBUicnQC8kKEdOVUxJQl9HRVRDSEFSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRERUxJTScnQC8kKEdOVUxJQl9HRVRERUxJTSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTElORScnQC8kKEdOVUxJQl9HRVRMSU5FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTJydALyQoR05VTElCX0dFVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09CU1RBQ0tfUFJJTlRGJydALyQoR05VTElCX09CU1RBQ0tfUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUEVSUk9SJydALyQoR05VTElCX1BFUlJPUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUE9QRU4nJ0AvJChHTlVMSUJfUE9QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URicnQC8kKEdOVUxJQl9QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9QUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVEMnJ0AvJChHTlVMSUJfUFVUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUQ0hBUicnQC8kKEdOVUxJQl9QVVRDSEFSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRTJydALyQoR05VTElCX1BVVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTU9WRScnQC8kKEdOVUxJQl9SRU1PVkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRScnQC8kKEdOVUxJQl9SRU5BTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFTkFNRUFUJydALyQoR05VTElCX1JFTkFNRUFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TQ0FORicnQC8kKEdOVUxJQl9TQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU05QUklOVEYnJ0AvJChHTlVMSUJfU05QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfU1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVERJT19IX1NJR1BJUEUnJ0AvJChHTlVMSUJfU1RESU9fSF9TSUdQSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UTVBGSUxFJydALyQoR05VTElCX1RNUEZJTEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZBU1BSSU5URicnQC8kKEdOVUxJQl9WQVNQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZEUFJJTlRGJydALyQoR05VTElCX1ZEUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlBSSU5URicnQC8kKEdOVUxJQl9WRlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVkZQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGU0NBTkYnJ0AvJChHTlVMSUJfVkZTQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlNDQU5GJydALyQoR05VTElCX1ZTQ0FORikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlBSSU5URicnQC8kKEdOVUxJQl9WUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZQUklOVEZfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTTlBSSU5URicnQC8kKEdOVUxJQl9WU05QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZTUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1ZTUFJJTlRGX1BPU0lYKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EUFJJTlRGJydAfCQoR05VTElCX0RQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDTE9TRScnQHwkKEdOVUxJQl9GQ0xPU0UpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZGTFVTSCcnQHwkKEdOVUxJQl9GRkxVU0gpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZHRVRDJydAfCQoR05VTElCX0ZHRVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GR0VUUycnQHwkKEdOVUxJQl9GR0VUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRk9QRU4nJ0B8JChHTlVMSUJfRk9QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQUklOVEYnJ0B8JChHTlVMSUJfRlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9GUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVSR0UnJ0B8JChHTlVMSUJfRlBVUkdFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVUQycnQHwkKEdOVUxJQl9GUFVUQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBVVFMnJ0B8JChHTlVMSUJfRlBVVFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZSRUFEJydAfCQoR05VTElCX0ZSRUFEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUkVPUEVOJydAfCQoR05VTElCX0ZSRU9QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTQ0FORicnQHwkKEdOVUxJQl9GU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTRUVLJydAfCQoR05VTElCX0ZTRUVLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU0VFS08nJ0B8JChHTlVMSUJfRlNFRUtPKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVEVMTCcnQHwkKEdOVUxJQl9GVEVMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRFTExPJydAfCQoR05VTElCX0ZURUxMTyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRldSSVRFJydAfCQoR05VTElCX0ZXUklURSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUQycnQHwkKEdOVUxJQl9HRVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDSEFSJydAfCQoR05VTElCX0dFVENIQVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERFTElNJydAfCQoR05VTElCX0dFVERFTElNKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMSU5FJydAfCQoR05VTElCX0dFVExJTkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFMnJ0B8JChHTlVMSUJfR0VUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT0JTVEFDS19QUklOVEYnJ0B8JChHTlVMSUJfT0JTVEFDS19QUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QRVJST1InJ0B8JChHTlVMSUJfUEVSUk9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QT1BFTicnQHwkKEdOVUxJQl9QT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJJTlRGJydAfCQoR05VTElCX1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1BSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVUQycnQHwkKEdOVUxJQl9QVVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRDSEFSJydAfCQoR05VTElCX1BVVENIQVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVFMnJ0B8JChHTlVMSUJfUFVUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVNT1ZFJydAfCQoR05VTElCX1JFTU9WRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVOQU1FJydAfCQoR05VTElCX1JFTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVOQU1FQVQnJ0B8JChHTlVMSUJfUkVOQU1FQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NDQU5GJydAfCQoR05VTElCX1NDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TTlBSSU5URicnQHwkKEdOVUxJQl9TTlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9TUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HJydAfCQoR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NURElPX0hfU0lHUElQRScnQHwkKEdOVUxJQl9TVERJT19IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RNUEZJTEUnJ0B8JChHTlVMSUJfVE1QRklMRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkFTUFJJTlRGJydAfCQoR05VTElCX1ZBU1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkRQUklOVEYnJ0B8JChHTlVMSUJfVkRQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZGUFJJTlRGJydAfCQoR05VTElCX1ZGUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9WRlBSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkZTQ0FORicnQHwkKEdOVUxJQl9WRlNDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WU0NBTkYnJ0B8JChHTlVMSUJfVlNDQU5GKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WUFJJTlRGJydAfCQoR05VTElCX1ZQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVlBSSU5URl9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNOUFJJTlRGJydAfCQoR05VTElCX1ZTTlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlNQUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfVlNQUklOVEZfUE9TSVgpfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RkaW8uaW4uaCB8IFwKKyAJICBzZWQgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZQVVJHRScnQHwkKEhBVkVfREVDTF9GUFVSR0UpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0ZTRUVLTycnQHwkKEhBVkVfREVDTF9GU0VFS08pfGcnIFwKK0BAIC02OTEsNDMgKzY1MCw0MSBAQCBCVUlMVF9TT1VSQ0VTICs9IHN0ZGxpYi5oCisgCisgIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxzdGRsaWIuaD4gd2hlbiB0aGUgc3lzdGVtCisgIyBkb2Vzbid0IGhhdmUgb25lIHRoYXQgd29ya3Mgd2l0aCB0aGUgZ2l2ZW4gY29tcGlsZXIuCistc3RkbGliLmg6IHN0ZGxpYi5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSBcCistICAkKF9OT1JFVFVSTl9IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKytzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RETElCX0gnJ0B8JChORVhUX1NURExJQl9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9fRVhJVCcnQC8kKEdOVUxJQl9fRVhJVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQVRPTEwnJ0AvJChHTlVMSUJfQVRPTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9DQUxMT0NfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUnJ0AvJChHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9BREFWRycnQC8kKEdOVUxJQl9HRVRMT0FEQVZHKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRTVUJPUFQnJ0AvJChHTlVMSUJfR0VUU1VCT1BUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HUkFOVFBUJydALyQoR05VTElCX0dSQU5UUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01BTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9NQUxMT0NfUE9TSVgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CVE9XQycnQC8kKEdOVUxJQl9NQlRPV0MpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRFRFTVAnJ0AvJChHTlVMSUJfTUtEVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtPU1RFTVAnJ0AvJChHTlVMSUJfTUtPU1RFTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LT1NURU1QUycnQC8kKEdOVUxJQl9NS09TVEVNUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LU1RFTVAnJ0AvJChHTlVMSUJfTUtTVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtTVEVNUFMnJ0AvJChHTlVMSUJfTUtTVEVNUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BUU05BTUUnJ0AvJChHTlVMSUJfUFRTTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVURU5WJydALyQoR05VTElCX1BVVEVOVikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkFORE9NX1InJ0AvJChHTlVMSUJfUkFORE9NX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0AvJChHTlVMSUJfUkVBTExPQ19QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBTFBBVEgnJ0AvJChHTlVMSUJfUkVBTFBBVEgpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JQTUFUQ0gnJ0AvJChHTlVMSUJfUlBNQVRDSCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0VURU5WJydALyQoR05VTElCX1NFVEVOVikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9EJydALyQoR05VTElCX1NUUlRPRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9MTCcnQC8kKEdOVUxJQl9TVFJUT0xMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT1VMTCcnQC8kKEdOVUxJQl9TVFJUT1VMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lTVEVNX1BPU0lYJydALyQoR05VTElCX1NZU1RFTV9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5MT0NLUFQnJ0AvJChHTlVMSUJfVU5MT0NLUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOU0VURU5WJydALyQoR05VTElCX1VOU0VURU5WKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XQ1RPTUInJ0AvJChHTlVMSUJfV0NUT01CKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9fRVhJVCcnQHwkKEdOVUxJQl9fRVhJVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQVRPTEwnJ0B8JChHTlVMSUJfQVRPTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NBTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9DQUxMT0NfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NBTk9OSUNBTElaRV9GSUxFX05BTUUnJ0B8JChHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9BREFWRycnQHwkKEdOVUxJQl9HRVRMT0FEQVZHKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRTVUJPUFQnJ0B8JChHTlVMSUJfR0VUU1VCT1BUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HUkFOVFBUJydAfCQoR05VTElCX0dSQU5UUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01BTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9NQUxMT0NfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CVE9XQycnQHwkKEdOVUxJQl9NQlRPV0MpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRFRFTVAnJ0B8JChHTlVMSUJfTUtEVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtPU1RFTVAnJ0B8JChHTlVMSUJfTUtPU1RFTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LT1NURU1QUycnQHwkKEdOVUxJQl9NS09TVEVNUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LU1RFTVAnJ0B8JChHTlVMSUJfTUtTVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtTVEVNUFMnJ0B8JChHTlVMSUJfTUtTVEVNUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BUU05BTUUnJ0B8JChHTlVMSUJfUFRTTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVURU5WJydAfCQoR05VTElCX1BVVEVOVil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkFORE9NX1InJ0B8JChHTlVMSUJfUkFORE9NX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQUxMT0NfUE9TSVgnJ0B8JChHTlVMSUJfUkVBTExPQ19QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBTFBBVEgnJ0B8JChHTlVMSUJfUkVBTFBBVEgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JQTUFUQ0gnJ0B8JChHTlVMSUJfUlBNQVRDSCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0VURU5WJydAfCQoR05VTElCX1NFVEVOVil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9EJydAfCQoR05VTElCX1NUUlRPRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9MTCcnQHwkKEdOVUxJQl9TVFJUT0xMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT1VMTCcnQHwkKEdOVUxJQl9TVFJUT1VMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lTVEVNX1BPU0lYJydAfCQoR05VTElCX1NZU1RFTV9QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5MT0NLUFQnJ0B8JChHTlVMSUJfVU5MT0NLUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOU0VURU5WJydAfCQoR05VTElCX1VOU0VURU5WKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9XQ1RPTUInJ0B8JChHTlVMSUJfV0NUT01CKXxnJyBcCisgCSAgICAgIDwgJChzcmNkaXIpL3N0ZGxpYi5pbi5oIHwgXAorIAkgIHNlZCAtZSAnc3xAJydIQVZFX19FWElUJydAfCQoSEFWRV9fRVhJVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0FUT0xMJydAfCQoSEFWRV9BVE9MTCl8ZycgXAorQEAgLTc2Niw3ICs3MjMsNiBAQCBzdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvCisgCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfVU5TRVRFTlYnJ0B8JChSRVBMQUNFX1VOU0VURU5WKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfV0NUT01CJydAfCQoUkVQTEFDRV9XQ1RPTUIpfGcnIFwKKyAJICAgICAgLWUgJy9kZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCistCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfTm9yZXR1cm4vciAkKF9OT1JFVFVSTl9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKSc7IFwKKyAJfSA+ICRALXQgJiYgXAorQEAgLTc5MywxNSArNzQ5LDYgQEAgRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc3RyZXJyb3IuYworIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RyZXJyb3IKKyAKKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlCistCistCistRVhUUkFfRElTVCArPSBzdHJlcnJvci1vdmVycmlkZS5jIHN0cmVycm9yLW92ZXJyaWRlLmgKKy0KKy1FWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzdHJlcnJvci1vdmVycmlkZS5jCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZQorLQorICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyaW5nCisgCisgQlVJTFRfU09VUkNFUyArPSBzdHJpbmcuaAorQEAgLTgxMSw1MiArNzU4LDQ3IEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RyaW5nLmgKKyBzdHJpbmcuaDogc3RyaW5nLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1RSSU5HX0gnJ0B8JChORVhUX1NUUklOR19IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRlNMJydALyQoR05VTElCX0ZGU0wpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGU0xMJydALyQoR05VTElCX0ZGU0xMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNMRU4nJ0AvJChHTlVMSUJfTUJTTEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOTEVOJydALyQoR05VTElCX01CU05MRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NIUicnQC8kKEdOVUxJQl9NQlNDSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1JDSFInJ0AvJChHTlVMSUJfTUJTUkNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1RSJydALyQoR05VTElCX01CU1NUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNDQVNFQ01QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNOQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNOQ0FTRUNNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUENBU0VDTVAnJ0AvJChHTlVMSUJfTUJTUENBU0VDTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0NBU0VTVFInJ0AvJChHTlVMSUJfTUJTQ0FTRVNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ1NQTicnQC8kKEdOVUxJQl9NQlNDU1BOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNQQlJLJydALyQoR05VTElCX01CU1BCUkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NQTicnQC8kKEdOVUxJQl9NQlNTUE4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1NFUCcnQC8kKEdOVUxJQl9NQlNTRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1RPS19SJydALyQoR05VTElCX01CU1RPS19SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1DSFInJ0AvJChHTlVMSUJfTUVNQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1NRU0nJ0AvJChHTlVMSUJfTUVNTUVNKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NRU1QQ1BZJydALyQoR05VTElCX01FTVBDUFkpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTVJDSFInJ0AvJChHTlVMSUJfTUVNUkNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkFXTUVNQ0hSJydALyQoR05VTElCX1JBV01FTUNIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQQ1BZJydALyQoR05VTElCX1NUUENQWSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RQTkNQWScnQC8kKEdOVUxJQl9TVFBOQ1BZKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJDSFJOVUwnJ0AvJChHTlVMSUJfU1RSQ0hSTlVMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJEVVAnJ0AvJChHTlVMSUJfU1RSRFVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJOQ0FUJydALyQoR05VTElCX1NUUk5DQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5EVVAnJ0AvJChHTlVMSUJfU1RSTkRVUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkxFTicnQC8kKEdOVUxJQl9TVFJOTEVOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQQlJLJydALyQoR05VTElCX1NUUlBCUkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNFUCcnQC8kKEdOVUxJQl9TVFJTRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNUUicnQC8kKEdOVUxJQl9TVFJTVFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkNBU0VTVFInJ0AvJChHTlVMSUJfU1RSQ0FTRVNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVE9LX1InJ0AvJChHTlVMSUJfU1RSVE9LX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SJydALyQoR05VTElCX1NUUkVSUk9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJFUlJPUl9SJydALyQoR05VTElCX1NUUkVSUk9SX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlNJR05BTCcnQC8kKEdOVUxJQl9TVFJTSUdOQUwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlZFUlNDTVAnJ0AvJChHTlVMSUJfU1RSVkVSU0NNUCkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTEVOJydAfCQoR05VTElCX01CU0xFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTkxFTicnQHwkKEdOVUxJQl9NQlNOTEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDSFInJ0B8JChHTlVMSUJfTUJTQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNSQ0hSJydAfCQoR05VTElCX01CU1JDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NUUicnQHwkKEdOVUxJQl9NQlNTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NBU0VDTVAnJ0B8JChHTlVMSUJfTUJTQ0FTRUNNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTTkNBU0VDTVAnJ0B8JChHTlVMSUJfTUJTTkNBU0VDTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1BDQVNFQ01QJydAfCQoR05VTElCX01CU1BDQVNFQ01QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNDQVNFU1RSJydAfCQoR05VTElCX01CU0NBU0VTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NTUE4nJ0B8JChHTlVMSUJfTUJTQ1NQTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUEJSSycnQHwkKEdOVUxJQl9NQlNQQlJLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTUE4nJ0B8JChHTlVMSUJfTUJTU1BOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNTRVAnJ0B8JChHTlVMSUJfTUJTU0VQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNUT0tfUicnQHwkKEdOVUxJQl9NQlNUT0tfUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNQ0hSJydAfCQoR05VTElCX01FTUNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNTUVNJydAfCQoR05VTElCX01FTU1FTSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUVNUENQWScnQHwkKEdOVUxJQl9NRU1QQ1BZKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1SQ0hSJydAfCQoR05VTElCX01FTVJDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JBV01FTUNIUicnQHwkKEdOVUxJQl9SQVdNRU1DSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUENQWScnQHwkKEdOVUxJQl9TVFBDUFkpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUE5DUFknJ0B8JChHTlVMSUJfU1RQTkNQWSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSQ0hSTlVMJydAfCQoR05VTElCX1NUUkNIUk5VTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRFVQJydAfCQoR05VTElCX1NUUkRVUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkNBVCcnQHwkKEdOVUxJQl9TVFJOQ0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJORFVQJydAfCQoR05VTElCX1NUUk5EVVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5MRU4nJ0B8JChHTlVMSUJfU1RSTkxFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSUEJSSycnQHwkKEdOVUxJQl9TVFJQQlJLKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTRVAnJ0B8JChHTlVMSUJfU1RSU0VQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTVFInJ0B8JChHTlVMSUJfU1RSU1RSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJDQVNFU1RSJydAfCQoR05VTElCX1NUUkNBU0VTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPS19SJydAfCQoR05VTElCX1NUUlRPS19SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJFUlJPUicnQHwkKEdOVUxJQl9TVFJFUlJPUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSRVJST1JfUicnQHwkKEdOVUxJQl9TVFJFUlJPUl9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJTSUdOQUwnJ0B8JChHTlVMSUJfU1RSU0lHTkFMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJWRVJTQ01QJydAfCQoR05VTElCX1NUUlZFUlNDTVApfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RyaW5nLmluLmggfCBcCistCSAgc2VkIC1lICdzfEAnJ0hBVkVfRkZTTCcnQHwkKEhBVkVfRkZTTCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX0ZGU0xMJydAfCQoSEFWRV9GRlNMTCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX01CU0xFTicnQHwkKEhBVkVfTUJTTEVOKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0hBVkVfTUJTTEVOJydAfCQoSEFWRV9NQlNMRU4pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9NRU1DSFInJ0B8JChIQVZFX01FTUNIUil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTUVNTUVNJydAfCQoSEFWRV9ERUNMX01FTU1FTSl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX01FTVBDUFknJ0B8JChIQVZFX01FTVBDUFkpfGcnIFwKK0BAIC05MTIsMjMgKzg1NCwyMiBAQCBzeXMvc3RhdC5oOiBzeXNfc3RhdC5pbi5oICQodG9wX2J1aWxkZGlyCisgCSQoQU1fVl9hdCkkKE1LRElSX1ApIHN5cworIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NZU19TVEFUX0gnJ0B8JChORVhUX1NZU19TVEFUX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSE1PREFUJydALyQoR05VTElCX0ZDSE1PREFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU1RBVEFUJydALyQoR05VTElCX0ZTVEFUQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZVVElNRU5TJydALyQoR05VTElCX0ZVVElNRU5TKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MQ0hNT0QnJ0AvJChHTlVMSUJfTENITU9EKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU1RBVCcnQC8kKEdOVUxJQl9MU1RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtESVJBVCcnQC8kKEdOVUxJQl9NS0RJUkFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0ZJRk8nJ0AvJChHTlVMSUJfTUtGSUZPKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0ZJRk9BVCcnQC8kKEdOVUxJQl9NS0ZJRk9BVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtOT0QnJ0AvJChHTlVMSUJfTUtOT0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LTk9EQVQnJ0AvJChHTlVMSUJfTUtOT0RBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RBVCcnQC8kKEdOVUxJQl9TVEFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VVElNRU5TQVQnJ0AvJChHTlVMSUJfVVRJTUVOU0FUKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hNT0RBVCcnQHwkKEdOVUxJQl9GQ0hNT0RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNUQVRBVCcnQHwkKEdOVUxJQl9GU1RBVEFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVVRJTUVOUycnQHwkKEdOVUxJQl9GVVRJTUVOUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTENITU9EJydAfCQoR05VTElCX0xDSE1PRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTFNUQVQnJ0B8JChHTlVMSUJfTFNUQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LRElSQVQnJ0B8JChHTlVMSUJfTUtESVJBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtGSUZPJydAfCQoR05VTElCX01LRklGTyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtGSUZPQVQnJ0B8JChHTlVMSUJfTUtGSUZPQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LTk9EJydAfCQoR05VTElCX01LTk9EKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS05PREFUJydAfCQoR05VTElCX01LTk9EQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUQVQnJ0B8JChHTlVMSUJfU1RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVVRJTUVOU0FUJydAfCQoR05VTElCX1VUSU1FTlNBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZDSE1PREFUJydAfCQoSEFWRV9GQ0hNT0RBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZTVEFUQVQnJ0B8JChIQVZFX0ZTVEFUQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9GVVRJTUVOUycnQHwkKEhBVkVfRlVUSU1FTlMpfGcnIFwKK0BAIC05NzEsMTYgKzkxMiwxNSBAQCBCVUlMVF9TT1VSQ0VTICs9IHRpbWUuaAorIHRpbWUuaDogdGltZS5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1RJTUVfSCcnQHwkKE5FWFRfVElNRV9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS1RJTUUnJ0AvJChHTlVMSUJfTUtUSU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9OQU5PU0xFRVAnJ0AvJChHTlVMSUJfTkFOT1NMRUVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJQVElNRScnQC8kKEdOVUxJQl9TVFJQVElNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVElNRUdNJydALyQoR05VTElCX1RJTUVHTSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVElNRV9SJydALyQoR05VTElCX1RJTUVfUikvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtUSU1FJydAfCQoR05VTElCX01LVElNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTkFOT1NMRUVQJydAfCQoR05VTElCX05BTk9TTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSUFRJTUUnJ0B8JChHTlVMSUJfU1RSUFRJTUUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RJTUVHTScnQHwkKEdOVUxJQl9USU1FR00pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RJTUVfUicnQHwkKEdOVUxJQl9USU1FX1IpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9ERUNMX0xPQ0FMVElNRV9SJydAfCQoSEFWRV9ERUNMX0xPQ0FMVElNRV9SKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfTkFOT1NMRUVQJydAfCQoSEFWRV9OQU5PU0xFRVApfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJQVElNRScnQHwkKEhBVkVfU1RSUFRJTUUpfGcnIFwKK0BAIC0xMDEzLDU2ICs5NTMsNTUgQEAgQlVJTFRfU09VUkNFUyArPSB1bmlzdGQuaAorIHVuaXN0ZC5oOiB1bmlzdGQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSEFWRV9VTklTVERfSCcnQHwkKEhBVkVfVU5JU1REX0gpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9VTklTVERfSCcnQHwkKE5FWFRfVU5JU1REX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NIT1dOJydALyQoR05VTElCX0NIT1dOKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DTE9TRScnQC8kKEdOVUxJQl9DTE9TRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRFVQMicnQC8kKEdOVUxJQl9EVVAyKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EVVAzJydALyQoR05VTElCX0RVUDMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0VOVklST04nJ0AvJChHTlVMSUJfRU5WSVJPTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRVVJREFDQ0VTUycnQC8kKEdOVUxJQl9FVUlEQUNDRVNTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQUNDRVNTQVQnJ0AvJChHTlVMSUJfRkFDQ0VTU0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hESVInJ0AvJChHTlVMSUJfRkNIRElSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ0hPV05BVCcnQC8kKEdOVUxJQl9GQ0hPV05BVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlNZTkMnJ0AvJChHTlVMSUJfRlNZTkMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZUUlVOQ0FURScnQC8kKEdOVUxJQl9GVFJVTkNBVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVENXRCcnQC8kKEdOVUxJQl9HRVRDV0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0AvJChHTlVMSUJfR0VURE9NQUlOTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VURFRBQkxFU0laRScnQC8kKEdOVUxJQl9HRVREVEFCTEVTSVpFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRHUk9VUFMnJ0AvJChHTlVMSUJfR0VUR1JPVVBTKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQC8kKEdOVUxJQl9HRVRIT1NUTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9HSU4nJ0AvJChHTlVMSUJfR0VUTE9HSU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVExPR0lOX1InJ0AvJChHTlVMSUJfR0VUTE9HSU5fUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0AvJChHTlVMSUJfR0VUUEFHRVNJWkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFVTRVJTSEVMTCcnQC8kKEdOVUxJQl9HRVRVU0VSU0hFTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dST1VQX01FTUJFUicnQC8kKEdOVUxJQl9HUk9VUF9NRU1CRVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xDSE9XTicnQC8kKEdOVUxJQl9MQ0hPV04pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xJTksnJ0AvJChHTlVMSUJfTElOSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTElOS0FUJydALyQoR05VTElCX0xJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTFNFRUsnJ0AvJChHTlVMSUJfTFNFRUspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BJUEUnJ0AvJChHTlVMSUJfUElQRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUElQRTInJ0AvJChHTlVMSUJfUElQRTIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BSRUFEJydALyQoR05VTElCX1BSRUFEKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QV1JJVEUnJ0AvJChHTlVMSUJfUFdSSVRFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFEJydALyQoR05VTElCX1JFQUQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQURMSU5LJydALyQoR05VTElCX1JFQURMSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFETElOS0FUJydALyQoR05VTElCX1JFQURMSU5LQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JNRElSJydALyQoR05VTElCX1JNRElSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TTEVFUCcnQC8kKEdOVUxJQl9TTEVFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1lNTElOSycnQC8kKEdOVUxJQl9TWU1MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWU1MSU5LQVQnJ0AvJChHTlVMSUJfU1lNTElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9UVFlOQU1FX1InJ0AvJChHTlVMSUJfVFRZTkFNRV9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9HRVRPUFQnJ0AvJChHTlVMSUJfVU5JU1REX0hfR0VUT1BUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORycnQC8kKEdOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQC8kKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxJTksnJ0AvJChHTlVMSUJfVU5MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxJTktBVCcnQC8kKEdOVUxJQl9VTkxJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVVNMRUVQJydALyQoR05VTElCX1VTTEVFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfV1JJVEUnJ0AvJChHTlVMSUJfV1JJVEUpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NIT1dOJydAfCQoR05VTElCX0NIT1dOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9DTE9TRScnQHwkKEdOVUxJQl9DTE9TRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRFVQMicnQHwkKEdOVUxJQl9EVVAyKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EVVAzJydAfCQoR05VTElCX0RVUDMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0VOVklST04nJ0B8JChHTlVMSUJfRU5WSVJPTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRVVJREFDQ0VTUycnQHwkKEdOVUxJQl9FVUlEQUNDRVNTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQUNDRVNTQVQnJ0B8JChHTlVMSUJfRkFDQ0VTU0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hESVInJ0B8JChHTlVMSUJfRkNIRElSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GQ0hPV05BVCcnQHwkKEdOVUxJQl9GQ0hPV05BVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNZTkMnJ0B8JChHTlVMSUJfRlNZTkMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZUUlVOQ0FURScnQHwkKEdOVUxJQl9GVFJVTkNBVEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVENXRCcnQHwkKEdOVUxJQl9HRVRDV0QpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVERPTUFJTk5BTUUnJ0B8JChHTlVMSUJfR0VURE9NQUlOTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VURFRBQkxFU0laRScnQHwkKEdOVUxJQl9HRVREVEFCTEVTSVpFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRHUk9VUFMnJ0B8JChHTlVMSUJfR0VUR1JPVVBTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRIT1NUTkFNRScnQHwkKEdOVUxJQl9HRVRIT1NUTkFNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9HSU4nJ0B8JChHTlVMSUJfR0VUTE9HSU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExPR0lOX1InJ0B8JChHTlVMSUJfR0VUTE9HSU5fUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUUEFHRVNJWkUnJ0B8JChHTlVMSUJfR0VUUEFHRVNJWkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFVTRVJTSEVMTCcnQHwkKEdOVUxJQl9HRVRVU0VSU0hFTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dST1VQX01FTUJFUicnQHwkKEdOVUxJQl9HUk9VUF9NRU1CRVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xDSE9XTicnQHwkKEdOVUxJQl9MQ0hPV04pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0xJTksnJ0B8JChHTlVMSUJfTElOSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTElOS0FUJydAfCQoR05VTElCX0xJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTFNFRUsnJ0B8JChHTlVMSUJfTFNFRUspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BJUEUnJ0B8JChHTlVMSUJfUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUElQRTInJ0B8JChHTlVMSUJfUElQRTIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BSRUFEJydAfCQoR05VTElCX1BSRUFEKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QV1JJVEUnJ0B8JChHTlVMSUJfUFdSSVRFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFEJydAfCQoR05VTElCX1JFQUQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQURMSU5LJydAfCQoR05VTElCX1JFQURMSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFETElOS0FUJydAfCQoR05VTElCX1JFQURMSU5LQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JNRElSJydAfCQoR05VTElCX1JNRElSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TTEVFUCcnQHwkKEdOVUxJQl9TTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1lNTElOSycnQHwkKEdOVUxJQl9TWU1MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TWU1MSU5LQVQnJ0B8JChHTlVMSUJfU1lNTElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9UVFlOQU1FX1InJ0B8JChHTlVMSUJfVFRZTkFNRV9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9HRVRPUFQnJ0B8JChHTlVMSUJfVU5JU1REX0hfR0VUT1BUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORycnQHwkKEdOVUxJQl9VTklTVERfSF9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5JU1REX0hfU0lHUElQRScnQHwkKEdOVUxJQl9VTklTVERfSF9TSUdQSVBFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxJTksnJ0B8JChHTlVMSUJfVU5MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxJTktBVCcnQHwkKEdOVUxJQl9VTkxJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVVNMRUVQJydAfCQoR05VTElCX1VTTEVFUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfV1JJVEUnJ0B8JChHTlVMSUJfV1JJVEUpfGcnIFwKKyAJICAgICAgPCAkKHNyY2RpcikvdW5pc3RkLmluLmggfCBcCisgCSAgc2VkIC1lICdzfEAnJ0hBVkVfQ0hPV04nJ0B8JChIQVZFX0NIT1dOKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRFVQMicnQHwkKEhBVkVfRFVQMil8ZycgXAorQEAgLTExOTgsNiArMTEzNywyNSBAQCBFWFRSQV9ESVNUICs9IHZlcmlmeS5oCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSB2ZXJpZnkKKyAKKysjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHdhcm4tb24tdXNlCisrCisrQlVJTFRfU09VUkNFUyArPSB3YXJuLW9uLXVzZS5oCisrIyBUaGUgd2Fybi1vbi11c2UuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKysjIGJ1aWxkLWF1eC93YXJuLW9uLXVzZS5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKyt3YXJuLW9uLXVzZS5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisrCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisrCXNlZCAtbiAtZSAnL14uaWZuZGVmLywkJHAnIFwKKysJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmggXAorKwkgID4gJEAtdCAmJiBcCisrCW12ICRALXQgJEAKKytNT1NUTFlDTEVBTkZJTEVTICs9IHdhcm4tb24tdXNlLmggd2Fybi1vbi11c2UuaC10CisrCisrV0FSTl9PTl9VU0VfSD13YXJuLW9uLXVzZS5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisrCisrIyMgZW5kICAgZ251bGliIG1vZHVsZSB3YXJuLW9uLXVzZQorKworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgeGFsbG9jCisgCisgbGliaWNydF9hX1NPVVJDRVMgKz0geGFsbG9jLmggeG1hbGxvYy5jIHhzdHJkdXAuYworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9wYXRobWF4LmggbGliaWNvbnYtMS4xNC9zcmNsaWIvcGF0aG1heC5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9wYXRobWF4LmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9wYXRobWF4LmgJMjAxMi0wMS0wOCAwMjowNzo0MC4yMTg0ODQ0NTEgLTA4MDAKK0BAIC0xOSwyNyArMTksNiBAQAorICNpZm5kZWYgX1BBVEhNQVhfSAorICMgZGVmaW5lIF9QQVRITUFYX0gKKyAKKy0vKiBQT1NJWDoyMDA4IGRlZmluZXMgUEFUSF9NQVggdG8gYmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUsCistICAgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwgYnl0ZS4KKy0gICA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvbGltaXRzLmguaHRtbD4KKy0gICBQQVRIX01BWCBpcyBub3QgZGVmaW5lZCBvbiBzeXN0ZW1zIHdoaWNoIGhhdmUgbm8gbGltaXQgb24gZmlsZW5hbWUgbGVuZ3RoLAorLSAgIHN1Y2ggYXMgR05VL0h1cmQuCistCistICAgVGhpcyBmaWxlIGRvZXMgKm5vdCogZGVmaW5lIFBBVEhfTUFYIGFsd2F5cy4gIFByb2dyYW1zIHRoYXQgdXNlIHRoaXMgZmlsZQorLSAgIGNhbiBoYW5kbGUgdGhlIEdOVS9IdXJkIGNhc2UgaW4gc2V2ZXJhbCB3YXlzOgorLSAgICAgLSBFaXRoZXIgd2l0aCBhIHBhY2thZ2Utd2lkZSBoYW5kbGluZywgb3Igd2l0aCBhIHBlci1maWxlIGhhbmRsaW5nLAorLSAgICAgLSBFaXRoZXIgdGhyb3VnaCBhCistICAgICAgICAgI2lmZGVmIFBBVEhfTUFYCistICAgICAgIG9yIHRocm91Z2ggYSBmYWxsYmFjayBsaWtlCistICAgICAgICAgI2lmbmRlZiBQQVRIX01BWAorLSAgICAgICAgICMgZGVmaW5lIFBBVEhfTUFYIDgxOTIKKy0gICAgICAgICAjZW5kaWYKKy0gICAgICAgb3IgdGhyb3VnaCBhIGZhbGxiYWNrIGxpa2UKKy0gICAgICAgICAjaWZuZGVmIFBBVEhfTUFYCistICAgICAgICAgIyBkZWZpbmUgUEFUSF9NQVggcGF0aGNvbmYgKCIvIiwgX1BDX1BBVEhfTUFYKQorLSAgICAgICAgICNlbmRpZgorLSAqLworLQorICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KK0BAIC00OCw2ICsyNywxMSBAQAorICMgIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU2CisgIyBlbmRpZgorIAorKyMgaWYgIWRlZmluZWQgUEFUSF9NQVggJiYgZGVmaW5lZCBfUENfUEFUSF9NQVggJiYgZGVmaW5lZCBIQVZFX1BBVEhDT05GCisrIyAgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgXAorKyAgICAgICAgICAgICAgICAgICAgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorKyMgZW5kaWYKKysKKyAvKiBEb24ndCBpbmNsdWRlIHN5cy9wYXJhbS5oIGlmIGl0IGFscmVhZHkgaGFzIGJlZW4uICAqLworICMgaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKyAjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KK0BAIC01NywxMyArNDEsOCBAQAorICMgIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisgIyBlbmRpZgorIAorLSMgaWZkZWYgX19ocHV4CistLyogT24gSFAtVVgsIFBBVEhfTUFYIGRlc2lnbmF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIGEgZmlsZW5hbWUsCistICAgKm5vdCogaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUwgYnl0ZSwgYW5kIGlzIHNldCB0byAxMDIzLgorLSAgIEFkZGl0aW9uYWxseSwgd2hlbiBfWE9QRU5fU09VUkNFIGlzIGRlZmluZWQgdG8gNTAwIG9yIG1vcmUsIFBBVEhfTUFYIGlzCistICAgbm90IGRlZmluZWQgYXQgYWxsIGFueSBtb3JlLiAgKi8KKy0jICB1bmRlZiBQQVRIX01BWAorLSMgIGRlZmluZSBQQVRIX01BWCAxMDI0CisrIyBpZm5kZWYgUEFUSF9NQVgKKysjICBkZWZpbmUgUEFUSF9NQVggX1BPU0lYX1BBVEhfTUFYCisgIyBlbmRpZgorIAorICNlbmRpZiAvKiBfUEFUSE1BWF9IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3JlbG9jd3JhcHBlci5jIGxpYmljb252LTEuMTQvc3JjbGliL3JlbG9jd3JhcHBlci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9yZWxvY3dyYXBwZXIuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3JlbG9jd3JhcHBlci5jCTIwMTItMDEtMDggMDI6MDc6NDAuMjgyNDg0NDU1IC0wODAwCitAQCAtMjksNiArMjksNyBAQAorICAgICAtPiByZWxvY2F0YWJsZQorICAgICAtPiBzZXRlbnYKKyAgICAgICAgLT4gbWFsbG9jYQorKyAgICAtPiBzdHJlcnJvcgorICAgICAtPiBjLWN0eXBlCisgCisgICAgTWFjcm9zIHRoYXQgbmVlZCB0byBiZSBzZXQgd2hpbGUgY29tcGlsaW5nIHRoaXMgZmlsZToKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2FmZS1yZWFkLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc2FmZS1yZWFkLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NhZmUtcmVhZC5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc2FmZS1yZWFkLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4yOTg0ODQ0NTUgLTA4MDAKK0BAIC0xNCwxOSArMTQsNiBAQAorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorLS8qIFNvbWUgc3lzdGVtIGNhbGxzIG1heSBiZSBpbnRlcnJ1cHRlZCBhbmQgZmFpbCB3aXRoIGVycm5vID0gRUlOVFIgaW4gdGhlCistICAgZm9sbG93aW5nIHNpdHVhdGlvbnM6CistICAgICAtIFRoZSBwcm9jZXNzIGlzIHN0b3BwZWQgYW5kIHJlc3RhcnRlZCAoc2lnbmFsIFNJR1NUT1AgYW5kIFNJR0NPTlQsIHVzZXIKKy0gICAgICAgdHlwZXMgQ3RybC1aKSBvbiBzb21lIHBsYXRmb3JtczogTWFjT1MgWC4KKy0gICAgIC0gVGhlIHByb2Nlc3MgcmVjZWl2ZXMgYSBzaWduYWwgZm9yIHdoaWNoIGEgc2lnbmFsIGhhbmRsZXIgd2FzIGluc3RhbGxlZAorLSAgICAgICB3aXRoIHNpZ2FjdGlvbigpIHdpdGggYW4gc2FfZmxhZ3MgZmllbGQgdGhhdCBkb2VzIG5vdCBjb250YWluCistICAgICAgIFNBX1JFU1RBUlQuCistICAgICAtIFRoZSBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsIGZvciB3aGljaCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBpbnN0YWxsZWQKKy0gICAgICAgd2l0aCBzaWduYWwoKSBhbmQgZm9yIHdoaWNoIG5vIGNhbGwgdG8gc2lnaW50ZXJydXB0KHNpZywwKSB3YXMgZG9uZSwKKy0gICAgICAgb24gc29tZSBwbGF0Zm9ybXM6IEFJWCwgSFAtVVgsIElSSVgsIE9TRi8xLCBTb2xhcmlzLgorLQorLSAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgcmVhZCgpIHRoYXQgaGFuZGxlcyBFSU5UUi4gICovCistCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorIAorICNpZmRlZiBfX2NwbHVzcGx1cworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zaWduYWwuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zaWduYWwuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2lnbmFsLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zaWduYWwuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjMxNDQ4NDQ1NiAtMDgwMAorQEAgLTIwLDQ5ICsyMCwyMSBAQAorICNlbmRpZgorIEBQUkFHTUFfQ09MVU1OU0AKKyAKKy0jaWYgZGVmaW5lZCBfX25lZWRfc2lnX2F0b21pY190IHx8IGRlZmluZWQgX19uZWVkX3NpZ3NldF90IHx8IGRlZmluZWQgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9IIHx8IChkZWZpbmVkIF9TSUdOQUxfSCAmJiAhZGVmaW5lZCBfX1NJWkVPRl9QVEhSRUFEX01VVEVYX1QpCistLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb246CistICAgLSBJbnNpZGUgZ2xpYmMgaGVhZGVyIGZpbGVzLgorLSAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCistICAgICA8c2lnbmFsLmg+IC0+IDx1Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorLSAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZSB3ZSBjYW5ub3QKKy0gICAgIHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLgorLSAgIC0gT24gZ2xpYmMgc3lzdGVtcyB3aXRoIEdDQyA0LjMgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIG5lc3RlZCBpbmNsdWRlcworLSAgICAgPGNzaWduYWw+IC0+IDwvdXNyL2luY2x1ZGUvc2lnbmFsLmg+IC0+IDxzeXMvdWNvbnRleHQuaD4gLT4gPHNpZ25hbC5oPi4KKy0gICAgIEluIHRoaXMgc2l0dWF0aW9uLCBzb21lIG9mIHRoZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgZGVjbGFyZWQsIHRoZXJlZm9yZQorLSAgICAgd2UgY2Fubm90IHByb3ZpZGUgdGhlIEMrKyBhbGlhc2VzLiAgKi8KKysjaWYgZGVmaW5lZCBfX25lZWRfc2lnX2F0b21pY190IHx8IGRlZmluZWQgX19uZWVkX3NpZ3NldF90CisrLyogU3BlY2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24gaW5zaWRlIGdsaWJjIGhlYWRlciBmaWxlcy4gICovCisgCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9TSUdOQUxfSEAKKyAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICistCistI2RlZmluZSBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0gKKy0KKy0vKiBEZWZpbmUgcGlkX3QsIHVpZF90LgorLSAgIEFsc28sIG1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LgorLSAgIE9uIFNvbGFyaXMgMTAsIDxzaWduYWwuaD4gaW5jbHVkZXMgPHN5cy90eXBlcy5oPiwgd2hpY2ggZXZlbnR1YWxseSBpbmNsdWRlcworLSAgIHVzOyBzbyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gbm93LCBiZWZvcmUgdGhlIHNlY29uZCBpbmNsdXNpb24gZ3VhcmQuICAqLworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaWZuZGVmIF9HTF9TSUdOQUxfSAorIAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU0lHTkFMX0hACisgCistI3VuZGVmIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSAorLQorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKy0KKy0vKiBNYWNPUyBYIDEwLjMsIEZyZWVCU0QgNi40LCBPcGVuQlNEIDMuOCwgT1NGLzEgNC4wLCBTb2xhcmlzIDIuNiBkZWNsYXJlCistICAgcHRocmVhZF9zaWdtYXNrIGluIDxwdGhyZWFkLmg+LCBub3QgaW4gPHNpZ25hbC5oPi4KKy0gICBCdXQgYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiovCistI2lmIChAR05VTElCX1BUSFJFQURfU0lHTUFTS0AgfHwgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSykgXAorLSAgICAmJiAoKGRlZmluZWQgX19BUFBMRV9fICYmIGRlZmluZWQgX19NQUNIX18pIHx8IGRlZmluZWQgX19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX09wZW5CU0RfXyB8fCBkZWZpbmVkIF9fb3NmX18gfHwgZGVmaW5lZCBfX3N1bikgXAorLSAgICAmJiAhIGRlZmluZWQgX19HTElCQ19fCistIyBpbmNsdWRlIDxwdGhyZWFkLmg+CistI2VuZGlmCisrI2lmbmRlZiBfR0xfU0lHTkFMX0gKKysjZGVmaW5lIF9HTF9TSUdOQUxfSAorIAorIC8qIFRoZSBkZWZpbml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8KKyAKK0BAIC03MCw2ICs0MiwxMCBAQAorIAorIC8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisgCisrLyogRGVmaW5lIHBpZF90LCB1aWRfdC4KKysgICBBbHNvLCBtaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworIC8qIE9uIEFJWCwgc2lnX2F0b21pY190IGFscmVhZHkgaW5jbHVkZXMgdm9sYXRpbGUuICBDOTkgcmVxdWlyZXMgdGhhdAorICAgICd2b2xhdGlsZSBzaWdfYXRvbWljX3QnIGlnbm9yZSB0aGUgZXh0cmEgbW9kaWZpZXIsIGJ1dCBDODkgZGlkIG5vdC4KKyAgICBIZW5jZSwgcmVkZWZpbmUgdGhpcyB0byBhIG5vbi12b2xhdGlsZSB0eXBlIGFzIG5lZWRlZC4gICovCitAQCAtMTI0LDM0ICsxMDAsNiBAQCB0eXBlZGVmIHZvaWQgKCpzaWdoYW5kbGVyX3QpIChpbnQpOworICNlbmRpZgorIAorIAorLSNpZiBAR05VTElCX1BUSFJFQURfU0lHTUFTS0AKKy0jIGlmIEBSRVBMQUNFX1BUSFJFQURfU0lHTUFTS0AKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKy0jICAgZGVmaW5lIHB0aHJlYWRfc2lnbWFzayBycGxfcHRocmVhZF9zaWdtYXNrCistIyAgZW5kaWYKKy1fR0xfRlVOQ0RFQ0xfUlBMIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy1fR0xfQ1hYQUxJQVNfUlBMIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy0jIGVsc2UKKy0jICBpZiAhQEhBVkVfUFRIUkVBRF9TSUdNQVNLQAorLV9HTF9GVU5DREVDTF9TWVMgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLSMgIGVuZGlmCistX0dMX0NYWEFMSUFTX1NZUyAocHRocmVhZF9zaWdtYXNrLCBpbnQsCistICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU1dBUk4gKHB0aHJlYWRfc2lnbWFzayk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgcHRocmVhZF9zaWdtYXNrCistIyBpZiBIQVZFX1JBV19ERUNMX1BUSFJFQURfU0lHTUFTSworLV9HTF9XQVJOX09OX1VTRSAocHRocmVhZF9zaWdtYXNrLCAicHRocmVhZF9zaWdtYXNrIGlzIG5vdCBwb3J0YWJsZSAtICIKKy0gICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBwdGhyZWFkX3NpZ21hc2sgZm9yIHBvcnRhYmlsaXR5Iik7CistIyBlbmRpZgorLSNlbmRpZgorLQorLQorICNpZiBAR05VTElCX1NJR1BST0NNQVNLQAorICMgaWYgIUBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HQAorIAorQEAgLTQyMyw2ICszNzEsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHNpZ2FjdGlvbiwgInNpZ2FjdGlvbiBpCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0ggKi8KKysjZW5kaWYgLyogX0dMX1NJR05BTF9IICovCisrI2VuZGlmIC8qIF9HTF9TSUdOQUxfSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGF0LmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RhdC5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGF0LmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGF0LmMJMjAxMi0wMS0wOCAwMjowNzo0MC4zMzA0ODQ0NTcgLTA4MDAKK0BAIC0zOCw3ICszOCw2IEBAIG9yaWdfc3RhdCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdAorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlICJkb3NuYW1lLmgiCistI2luY2x1ZGUgInZlcmlmeS5oIgorIAorIC8qIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IE5BTUUgaW50byBTVC4gIFdvcmsgYXJvdW5kIGJ1Z3Mgd2l0aAorICAgIHRyYWlsaW5nIHNsYXNoZXMuICBNaW5ndyBoYXMgb3RoZXIgYnVncyAoc3VjaCBhcyBzdF9pbm8gYWx3YXlzCitAQCAtNjQsMTIgKzYzLDYgQEAgcnBsX3N0YXQgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0CisgICAgIH0KKyAjZW5kaWYgLyogUkVQTEFDRV9GVU5DX1NUQVRfRklMRSAqLworICNpZiBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIKKy0gIC8qIFRoZSBvbmx5IGtub3duIHN5c3RlbXMgd2hlcmUgUkVQTEFDRV9GVU5DX1NUQVRfRElSIGlzIG5lZWRlZCBhbHNvCistICAgICBoYXZlIGEgY29uc3RhbnQgUEFUSF9NQVguICAqLworLSMgaWZuZGVmIFBBVEhfTUFYCistIyAgZXJyb3IgIlBsZWFzZSBwb3J0IHRoaXMgcmVwbGFjZW1lbnQgdG8geW91ciBwbGF0Zm9ybSIKKy0jIGVuZGlmCistCisgICBpZiAocmVzdWx0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgeworICAgICAgIC8qIER1ZSB0byBtaW5ndydzIG9kZGl0aWVzLCB0aGVyZSBhcmUgc29tZSBkaXJlY3RvcmllcyAobGlrZQorQEAgLTg0LDcgKzc3LDYgQEAgcnBsX3N0YXQgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0CisgICAgICAgY2hhciBmaXhlZF9uYW1lW1BBVEhfTUFYICsgMV0gPSB7MH07CisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmFtZSk7CisgICAgICAgYm9vbCBjaGVja19kaXIgPSBmYWxzZTsKKy0gICAgICB2ZXJpZnkgKFBBVEhfTUFYIDw9IDQwOTYpOworICAgICAgIGlmIChQQVRIX01BWCA8PSBsZW4pCisgICAgICAgICBlcnJubyA9IEVOQU1FVE9PTE9ORzsKKyAgICAgICBlbHNlIGlmIChsZW4pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGRlZi5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGRlZi5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRkZWYuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGRlZi5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzQ2NDg0NDU4IC0wODAwCitAQCAtMzgsOSArMzgsOSBAQAorICAgIHJlbWVtYmVyIGlmIHNwZWNpYWwgaW52b2NhdGlvbiBoYXMgZXZlciBiZWVuIHVzZWQgdG8gb2J0YWluIHdpbnRfdCwKKyAgICBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gY2xlYW4gdXAgTlVMTCB5ZXQgYWdhaW4uICAqLworIAorLSMgaWYgIShkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAmJiBkZWZpbmVkIF9HTF9TVERERUZfV0lOVF9UKQorKyMgaWYgIShkZWZpbmVkIF9HTF9TVERERUZfSCAmJiBkZWZpbmVkIF9HTF9TVERERUZfV0lOVF9UKQorICMgIGlmZGVmIF9fbmVlZF93aW50X3QKKy0jICAgdW5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyAgIHVuZGVmIF9HTF9TVERERUZfSAorICMgICBkZWZpbmUgX0dMX1NURERFRl9XSU5UX1QKKyAjICBlbmRpZgorICMgIEBJTkNMVURFX05FWFRAIEBORVhUX1NURERFRl9IQAorQEAgLTQ5LDE0ICs0OSwxNCBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistIyBpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyBpZm5kZWYgX0dMX1NURERFRl9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworIAorICMgIEBJTkNMVURFX05FWFRAIEBORVhUX1NURERFRl9IQAorIAorLSMgIGlmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKy0jICAgZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAorKyMgIGlmbmRlZiBfR0xfU1REREVGX0gKKysjICAgZGVmaW5lIF9HTF9TVERERUZfSAorIAorIC8qIE9uIE5ldEJTRCA1LjAsIHRoZSBkZWZpbml0aW9uIG9mIE5VTEwgbGFja3MgcHJvcGVyIHBhcmVudGhlc2VzLiAgKi8KKyAjaWYgQFJFUExBQ0VfTlVMTEAKK0BAIC04Miw2ICs4Miw2IEBACisgIyBkZWZpbmUgd2NoYXJfdCBpbnQKKyAjZW5kaWYKKyAKKy0jICBlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0ggKi8KKy0jIGVuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAqLworKyMgIGVuZGlmIC8qIF9HTF9TVERERUZfSCAqLworKyMgZW5kaWYgLyogX0dMX1NURERFRl9IICovCisgI2VuZGlmIC8qIF9fbmVlZF9YWFggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW50LmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW50LmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGludC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW50LmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zNTg0ODQ0NTggLTA4MDAKK0BAIC0yMSw3ICsyMSw3IEBACisgICogPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hiZC9zdGRpbnQuaC5odG1sPgorICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9ICisrI2lmbmRlZiBfR0xfU1RESU5UX0gKKyAKKyAjaWYgX19HTlVDX18gPj0gMworIEBQUkFHTUFfU1lTVEVNX0hFQURFUkAKK0BAIC01MiwxMyArNTIsMTMgQEAKKyAgIC8qIE90aGVyIHN5c3RlbXMgbWF5IGhhdmUgYW4gaW5jb21wbGV0ZSBvciBidWdneSA8c3RkaW50Lmg+LgorICAgICAgSW5jbHVkZSBpdCBiZWZvcmUgPGludHR5cGVzLmg+LCBzaW5jZSBhbnkgIiNpbmNsdWRlIDxzdGRpbnQuaD4iCisgICAgICBpbiA8aW50dHlwZXMuaD4gd291bGQgcmVpbmNsdWRlIHVzLCBza2lwcGluZyBvdXIgY29udGVudHMgYmVjYXVzZQorLSAgICAgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IIGlzIGRlZmluZWQuCisrICAgICBfR0xfU1RESU5UX0ggaXMgZGVmaW5lZC4KKyAgICAgIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1NURElOVF9IQAorICNlbmRpZgorIAorLSNpZiAhIGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICYmICEgZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9ICisrI2lmICEgZGVmaW5lZCBfR0xfU1RESU5UX0ggJiYgISBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICisrI2RlZmluZSBfR0xfU1RESU5UX0gKKyAKKyAvKiA8c3lzL3R5cGVzLmg+IGRlZmluZXMgc29tZSBvZiB0aGUgc3RkaW50LmggdHlwZXMgYXMgd2VsbCwgb24gZ2xpYmMsCisgICAgSVJJWCA2LjUsIGFuZCBPcGVuQlNEIDMuOCAodmlhIDxtYWNoaW5lL3R5cGVzLmg+KS4KK0BAIC0yNzAsMzYgKzI3MCwyNiBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRwdHJfdDsKKyAvKiBOb3RlOiBUaGVzZSB0eXBlcyBhcmUgY29tcGlsZXIgZGVwZW5kZW50LiBJdCBtYXkgYmUgdW53aXNlIHRvIHVzZSB0aGVtIGluCisgICAgcHVibGljIGhlYWRlciBmaWxlcy4gKi8KKyAKKy0vKiBJZiB0aGUgc3lzdGVtIGRlZmluZXMgSU5UTUFYX01BWCwgYXNzdW1lIHRoYXQgaW50bWF4X3Qgd29ya3MsIGFuZAorLSAgIHNpbWlsYXJseSBmb3IgVUlOVE1BWF9NQVggYW5kIHVpbnRtYXhfdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGgKKy0gICBhc3N1bWluZyBvbmUgdHlwZSB3aGVyZSBhbm90aGVyIGlzIHVzZWQgYnkgdGhlIHN5c3RlbS4gICovCistCistI2lmbmRlZiBJTlRNQVhfTUFYCistIyB1bmRlZiBJTlRNQVhfQworLSMgdW5kZWYgaW50bWF4X3QKKy0jIGlmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKysjdW5kZWYgaW50bWF4X3QKKysjaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorIHR5cGVkZWYgbG9uZyBsb25nIGludCBnbF9pbnRtYXhfdDsKKy0jICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKy0jIGVsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCistIyAgZGVmaW5lIGludG1heF90IGludDY0X3QKKy0jIGVsc2UKKysjIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAorKyNlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorKyMgZGVmaW5lIGludG1heF90IGludDY0X3QKKysjZWxzZQorIHR5cGVkZWYgbG9uZyBpbnQgZ2xfaW50bWF4X3Q7CistIyAgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CistIyBlbmRpZgorKyMgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX01BWAorLSMgdW5kZWYgVUlOVE1BWF9DCistIyB1bmRlZiB1aW50bWF4X3QKKy0jIGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisrI3VuZGVmIHVpbnRtYXhfdAorKyNpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBnbF91aW50bWF4X3Q7CistIyAgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKy0jIGVsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorLSMgIGRlZmluZSB1aW50bWF4X3QgdWludDY0X3QKKy0jIGVsc2UKKysjIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CisrI2VsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorKyMgZGVmaW5lIHVpbnRtYXhfdCB1aW50NjRfdAorKyNlbHNlCisgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBnbF91aW50bWF4X3Q7CistIyAgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKy0jIGVuZGlmCisrIyBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorICNlbmRpZgorIAorIC8qIFZlcmlmeSB0aGF0IGludG1heF90IGFuZCB1aW50bWF4X3QgaGF2ZSB0aGUgc2FtZSBzaXplLiAgVG9vIG11Y2ggY29kZQorQEAgLTQ0MSwyMyArNDMxLDIxIEBAIHR5cGVkZWYgaW50IF92ZXJpZnlfaW50bWF4X3NpemVbc2l6ZW9mICgKKyAKKyAvKiA3LjE4LjIuNS4gTGltaXRzIG9mIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKyAKKy0jaWZuZGVmIElOVE1BWF9NQVgKKy0jIHVuZGVmIElOVE1BWF9NSU4KKy0jIGlmZGVmIElOVDY0X01BWAorLSMgIGRlZmluZSBJTlRNQVhfTUlOICBJTlQ2NF9NSU4KKy0jICBkZWZpbmUgSU5UTUFYX01BWCAgSU5UNjRfTUFYCistIyBlbHNlCistIyAgZGVmaW5lIElOVE1BWF9NSU4gIElOVDMyX01JTgorLSMgIGRlZmluZSBJTlRNQVhfTUFYICBJTlQzMl9NQVgKKy0jIGVuZGlmCisrI3VuZGVmIElOVE1BWF9NSU4KKysjdW5kZWYgSU5UTUFYX01BWAorKyNpZmRlZiBJTlQ2NF9NQVgKKysjIGRlZmluZSBJTlRNQVhfTUlOICBJTlQ2NF9NSU4KKysjIGRlZmluZSBJTlRNQVhfTUFYICBJTlQ2NF9NQVgKKysjZWxzZQorKyMgZGVmaW5lIElOVE1BWF9NSU4gIElOVDMyX01JTgorKyMgZGVmaW5lIElOVE1BWF9NQVggIElOVDMyX01BWAorICNlbmRpZgorIAorLSNpZm5kZWYgVUlOVE1BWF9NQVgKKy0jIGlmZGVmIFVJTlQ2NF9NQVgKKy0jICBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQ2NF9NQVgKKy0jIGVsc2UKKy0jICBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQzMl9NQVgKKy0jIGVuZGlmCisrI3VuZGVmIFVJTlRNQVhfTUFYCisrI2lmZGVmIFVJTlQ2NF9NQVgKKysjIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDY0X01BWAorKyNlbHNlCisrIyBkZWZpbmUgVUlOVE1BWF9NQVggIFVJTlQzMl9NQVgKKyAjZW5kaWYKKyAKKyAvKiA3LjE4LjMuIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzICovCitAQCAtNTgwLDI3ICs1NjgsMjUgQEAgdHlwZWRlZiBpbnQgX3ZlcmlmeV9pbnRtYXhfc2l6ZVtzaXplb2YgKAorIAorIC8qIDcuMTguNC4yLiBNYWNyb3MgZm9yIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgY29uc3RhbnRzICovCisgCistI2lmbmRlZiBJTlRNQVhfQworLSMgaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCistIyBlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIElOVDY0X0MoeCkKKy0jIGVsc2UKKy0jICBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMCistIyBlbmRpZgorKyN1bmRlZiBJTlRNQVhfQworKyNpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMTAorKyNlbGlmIGRlZmluZWQgR0xfSU5UNjRfVAorKyMgZGVmaW5lIElOVE1BWF9DKHgpICAgSU5UNjRfQyh4KQorKyNlbHNlCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICB4IyNMCisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX0MKKy0jIGlmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCistIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUxMCistIyBlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKy0jICBkZWZpbmUgVUlOVE1BWF9DKHgpICBVSU5UNjRfQyh4KQorLSMgZWxzZQorLSMgIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMCistIyBlbmRpZgorKyN1bmRlZiBVSU5UTUFYX0MKKysjaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMTAorKyNlbGlmIGRlZmluZWQgR0xfVUlOVDY0X1QKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIFVJTlQ2NF9DKHgpCisrI2Vsc2UKKysjIGRlZmluZSBVSU5UTUFYX0MoeCkgIHgjI1VMCisgI2VuZGlmCisgCisgI2VuZGlmIC8qICFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAqLworIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggKi8KKy0jZW5kaWYgLyogIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURElOVF9IICYmICFkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9IICovCisrI2VuZGlmIC8qIF9HTF9TVERJTlRfSCAqLworKyNlbmRpZiAvKiAhZGVmaW5lZCBfR0xfU1RESU5UX0ggJiYgIWRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW8uaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpby5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpby5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkaW8uaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM3ODQ4NDQ1OSAtMDgwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElPX0gKKysjaWZuZGVmIF9HTF9TVERJT19ICisgCisgI2RlZmluZSBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorIAorQEAgLTQ0LDggKzQ0LDggQEAKKyAKKyAjdW5kZWYgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NURElPX0gKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSAorKyNpZm5kZWYgX0dMX1NURElPX0gKKysjZGVmaW5lIF9HTF9TVERJT19ICisgCisgLyogR2V0IHZhX2xpc3QuICBOZWVkZWQgb24gbWFueSBzeXN0ZW1zLCBpbmNsdWRpbmcgZ2xpYmMgMi44LiAgKi8KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CitAQCAtNDYxLDYgKzQ2MSwyNSBAQCBfR0xfRlVOQ0RFQ0xfU1lTIChmc2Vla28sIGludCwgKEZJTEUgKmZwCisgX0dMX0NYWEFMSUFTX1NZUyAoZnNlZWtvLCBpbnQsIChGSUxFICpmcCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CisgIyBlbmRpZgorIF9HTF9DWFhBTElBU1dBUk4gKGZzZWVrbyk7CisrIyBpZiAoQFJFUExBQ0VfRlNFRUtPQCB8fCAhQEhBVkVfRlNFRUtPQCkgJiYgIUBHTlVMSUJfRlNFRUtACisrICAgLyogUHJvdmlkZSBhbiBmc2VlayBmdW5jdGlvbiB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aCBmc2Vla28uICAqLworKyAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIHRoYXQgZnNlZWsgZ2V0cyBkZWZpbmVkIGFzIGEgbWFjcm8gaGVyZSwgdGhlCisrICAgICAgZGV2ZWxvcGVyIGNhbiByZXF1ZXN0IHRoZSAnZnNlZWsnIG1vZHVsZS4gICovCisrIyAgaWYgIUdOVUxJQl9kZWZpbmVkX2ZzZWVrX2Z1bmN0aW9uCisrIyAgIHVuZGVmIGZzZWVrCisrIyAgIGRlZmluZSBmc2VlayBycGxfZnNlZWsKKytzdGF0aWMgaW5saW5lIGludCBfR0xfQVJHX05PTk5VTEwgKCgxKSkKKytycGxfZnNlZWsgKEZJTEUgKmZwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKKyt7CisrIyAgIGlmIEBSRVBMQUNFX0ZTRUVLT0AKKysgIHJldHVybiBycGxfZnNlZWtvIChmcCwgb2Zmc2V0LCB3aGVuY2UpOworKyMgICBlbHNlCisrICByZXR1cm4gZnNlZWtvIChmcCwgb2Zmc2V0LCB3aGVuY2UpOworKyMgICBlbmRpZgorK30KKysjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2ZzZWVrX2Z1bmN0aW9uIDEKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgIyBkZWZpbmUgX0dMX0ZTRUVLX1dBUk4gLyogQ2F0ZWdvcnkgMSwgYWJvdmUuICAqLworICMgdW5kZWYgZnNlZWsKK0BAIC01MjAsNiArNTM5LDI1IEBAIF9HTF9GVU5DREVDTF9TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICoKKyBfR0xfQ1hYQUxJQVNfU1lTIChmdGVsbG8sIG9mZl90LCAoRklMRSAqZnApKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZnRlbGxvKTsKKysjIGlmIChAUkVQTEFDRV9GVEVMTE9AIHx8ICFASEFWRV9GVEVMTE9AKSAmJiAhQEdOVUxJQl9GVEVMTEAKKysgICAvKiBQcm92aWRlIGFuIGZ0ZWxsIGZ1bmN0aW9uIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGZ0ZWxsby4gICovCisrICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgdGhhdCBmdGVsbCBnZXRzIGRlZmluZWQgYXMgYSBtYWNybyBoZXJlLCB0aGUKKysgICAgICBkZXZlbG9wZXIgY2FuIHJlcXVlc3QgdGhlICdmdGVsbCcgbW9kdWxlLiAgKi8KKysjICBpZiAhR05VTElCX2RlZmluZWRfZnRlbGxfZnVuY3Rpb24KKysjICAgdW5kZWYgZnRlbGwKKysjICAgZGVmaW5lIGZ0ZWxsIHJwbF9mdGVsbAorK3N0YXRpYyBpbmxpbmUgbG9uZyBfR0xfQVJHX05PTk5VTEwgKCgxKSkKKytycGxfZnRlbGwgKEZJTEUgKmYpCisreworKyMgICBpZiBAUkVQTEFDRV9GVEVMTE9ACisrICByZXR1cm4gcnBsX2Z0ZWxsbyAoZik7CisrIyAgIGVsc2UKKysgIHJldHVybiBmdGVsbG8gKGYpOworKyMgICBlbmRpZgorK30KKysjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX2Z0ZWxsX2Z1bmN0aW9uIDEKKysjICBlbmRpZgorKyMgZW5kaWYKKyAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisgIyBkZWZpbmUgX0dMX0ZURUxMX1dBUk4gLyogQ2F0ZWdvcnkgMSwgYWJvdmUuICAqLworICMgdW5kZWYgZnRlbGwKK0BAIC0xMzA3LDYgKzEzNDUsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHZzcHJpbnRmLCAidnNwcmludGYgaXMKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElPX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURElPX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElPX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkbGliLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkbGliLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGxpYi5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkbGliLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zOTA0ODQ0NTkgLTA4MDAKK0BAIC0yOCwxMyArMjgsMTMgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICisrI2lmbmRlZiBfR0xfU1RETElCX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NURExJQl9IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURExJQl9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKysjaWZuZGVmIF9HTF9TVERMSUJfSAorKyNkZWZpbmUgX0dMX1NURExJQl9ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtODksNyArODksMTEgQEAgc3RydWN0IHJhbmRvbV9kYXRhCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0vKiBUaGUgZGVmaW5pdGlvbiBvZiBfTm9yZXR1cm4gaXMgY29waWVkIGhlcmUuICAqLworKyNpZiAzIDw9IF9fR05VQ19fIHx8IF9fR05VQ19fID09IDIgJiYgOCA8PSBfX0dOVUNfTUlOT1JfXworKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfTk9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQVRUUklCVVRFX05PUkVUVVJOCisrI2VuZGlmCisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTExNiw3ICsxMjAsNyBAQCBzdHJ1Y3QgcmFuZG9tX2RhdGEKKyAvKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgcHJvY2VzcyB3aXRoIHRoZSBnaXZlbiByZXR1cm4gY29kZSwgd2l0aG91dCBydW5uaW5nCisgICAgdGhlICdhdGV4aXQnIGhhbmRsZXJzLiAgKi8KKyAjIGlmICFASEFWRV9fRVhJVEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChfRXhpdCwgX05vcmV0dXJuIHZvaWQsIChpbnQgc3RhdHVzKSk7CisrX0dMX0ZVTkNERUNMX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSBfR0xfQVRUUklCVVRFX05PUkVUVVJOKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTX1NZUyAoX0V4aXQsIHZvaWQsIChpbnQgc3RhdHVzKSk7CisgX0dMX0NYWEFMSUFTV0FSTiAoX0V4aXQpOworQEAgLTc1Nyw2ICs3NjEsNiBAQCBfR0xfQ1hYQUxJQVNXQVJOICh3Y3RvbWIpOworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURExJQl9IICovCisrI2VuZGlmIC8qIF9HTF9TVERMSUJfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RETElCX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3IuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3IuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjQwNjQ4NDQ2MSAtMDgwMAorQEAgLTE3LDU0ICsxNywzNDAgQEAKKyAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgCistLyogU3BlY2lmaWNhdGlvbi4gICovCisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmIFJFUExBQ0VfU1RSRVJST1IKKysKKysjIGluY2x1ZGUgPGVycm5vLmg+CisrIyBpbmNsdWRlIDxzdGRpby5oPgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCisrIyAgaWYgSEFWRV9XSU5TT0NLMl9ICisrIyAgIGluY2x1ZGUgPHdpbnNvY2syLmg+CisrIyAgZW5kaWYKKysjIGVuZGlmCisgCistI2luY2x1ZGUgImludHByb3BzLmgiCistI2luY2x1ZGUgInN0cmVycm9yLW92ZXJyaWRlLmgiCistI2luY2x1ZGUgInZlcmlmeS5oIgorKyMgaW5jbHVkZSAiaW50cHJvcHMuaCIKKyAKKyAvKiBVc2UgdGhlIHN5c3RlbSBmdW5jdGlvbnMsIG5vdCB0aGUgZ251bGliIG92ZXJyaWRlcyBpbiB0aGlzIGZpbGUuICAqLworLSN1bmRlZiBzcHJpbnRmCisrIyB1bmRlZiBzcHJpbnRmCisrCisrIyB1bmRlZiBzdHJlcnJvcgorKyMgaWYgISBIQVZFX0RFQ0xfU1RSRVJST1IKKysjICBkZWZpbmUgc3RyZXJyb3IobikgTlVMTAorKyMgZW5kaWYKKyAKKyBjaGFyICoKKy1zdHJlcnJvciAoaW50IG4pCistI3VuZGVmIHN0cmVycm9yCisrcnBsX3N0cmVycm9yIChpbnQgbikKKyB7CistICBzdGF0aWMgY2hhciBidWZbU1RBQ0tCVUZfTEVOXTsKKy0gIHNpemVfdCBsZW47CisrICBjaGFyIGNvbnN0ICptc2cgPSBOVUxMOworKyAgLyogVGhlc2UgZXJyb3IgbWVzc2FnZXMgYXJlIHRha2VuIGZyb20gZ2xpYmMvc3lzZGVwcy9nbnUvZXJybGlzdC5jLiAgKi8KKysgIHN3aXRjaCAobikKKysgICAgeworKyMgaWYgR05VTElCX2RlZmluZWRfRVRYVEJTWQorKyAgICBjYXNlIEVUWFRCU1k6CisrICAgICAgbXNnID0gIlRleHQgZmlsZSBidXN5IjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKysgICAgLyogRVdPVUxEQkxPQ0sgaXMgdGhlIHNhbWUgYXMgRUFHQUlOLiAgKi8KKysgICAgY2FzZSBFSU5QUk9HUkVTUzoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFMUkVBRFk6CisrICAgICAgbXNnID0gIk9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9UU09DSzoKKysgICAgICBtc2cgPSAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFREVTVEFERFJSRVE6CisrICAgICAgbXNnID0gIkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNU0dTSVpFOgorKyAgICAgIG1zZyA9ICJNZXNzYWdlIHRvbyBsb25nIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPVE9UWVBFOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT1BST1RPT1BUOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBub3QgYXZhaWxhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPVE9OT1NVUFBPUlQ6CisrICAgICAgbXNnID0gIlByb3RvY29sIG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTT0NLVE5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU9QTk9UU1VQUDoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQRk5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVBRk5PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFERFJJTlVTRToKKysgICAgICBtc2cgPSAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFERFJOT1RBVkFJTDoKKysgICAgICBtc2cgPSAiQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVERPV046CisrICAgICAgbXNnID0gIk5ldHdvcmsgaXMgZG93biI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVFVOUkVBQ0g6CisrICAgICAgbXNnID0gIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVORVRSRVNFVDoKKysgICAgICBtc2cgPSAiTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24gb24gcmVzZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OQUJPUlRFRDoKKysgICAgICBtc2cgPSAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OUkVTRVQ6CisrICAgICAgbXNnID0gIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5PQlVGUzoKKysgICAgICBtc2cgPSAiTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUlTQ09OTjoKKysgICAgICBtc2cgPSAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9UQ09OTjoKKysgICAgICBtc2cgPSAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTSFVURE9XTjoKKysgICAgICBtc2cgPSAiQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFVE9PTUFOWVJFRlM6CisrICAgICAgbXNnID0gIlRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVUSU1FRE9VVDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVDT05OUkVGVVNFRDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiByZWZ1c2VkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTE9PUDoKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFSE9TVERPV046CisrICAgICAgbXNnID0gIkhvc3QgaXMgZG93biI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUhPU1RVTlJFQUNIOgorKyAgICAgIG1zZyA9ICJObyByb3V0ZSB0byBob3N0IjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUFJPQ0xJTToKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgcHJvY2Vzc2VzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFVVNFUlM6CisrICAgICAgbXNnID0gIlRvbyBtYW55IHVzZXJzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFRFFVT1Q6CisrICAgICAgbXNnID0gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVTVEFMRToKKysgICAgICBtc2cgPSAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFUkVNT1RFOgorKyAgICAgIG1zZyA9ICJPYmplY3QgaXMgcmVtb3RlIjsKKysgICAgICBicmVhazsKKysjICBpZiBIQVZFX1dJTlNPQ0syX0gKKysgICAgLyogV1NBX0lOVkFMSURfSEFORExFIG1hcHMgdG8gRUJBREYgKi8KKysgICAgLyogV1NBX05PVF9FTk9VR0hfTUVNT1JZIG1hcHMgdG8gRU5PTUVNICovCisrICAgIC8qIFdTQV9JTlZBTElEX1BBUkFNRVRFUiBtYXBzIHRvIEVJTlZBTCAqLworKyAgICBjYXNlIFdTQV9PUEVSQVRJT05fQUJPUlRFRDoKKysgICAgICBtc2cgPSAiT3ZlcmxhcHBlZCBvcGVyYXRpb24gYWJvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBX0lPX0lOQ09NUExFVEU6CisrICAgICAgbXNnID0gIk92ZXJsYXBwZWQgSS9PIGV2ZW50IG9iamVjdCBub3QgaW4gc2lnbmFsZWQgc3RhdGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQV9JT19QRU5ESU5HOgorKyAgICAgIG1zZyA9ICJPdmVybGFwcGVkIG9wZXJhdGlvbnMgd2lsbCBjb21wbGV0ZSBsYXRlciI7CisrICAgICAgYnJlYWs7CisrICAgIC8qIFdTQUVJTlRSIG1hcHMgdG8gRUlOVFIgKi8KKysgICAgLyogV1NBRUJBREYgbWFwcyB0byBFQkFERiAqLworKyAgICAvKiBXU0FFQUNDRVMgbWFwcyB0byBFQUNDRVMgKi8KKysgICAgLyogV1NBRUZBVUxUIG1hcHMgdG8gRUZBVUxUICovCisrICAgIC8qIFdTQUVJTlZBTCBtYXBzIHRvIEVJTlZBTCAqLworKyAgICAvKiBXU0FFTUZJTEUgbWFwcyB0byBFTUZJTEUgKi8KKysgICAgLyogV1NBRVdPVUxEQkxPQ0sgbWFwcyB0byBFV09VTERCTE9DSyAqLworKyAgICAvKiBXU0FFSU5QUk9HUkVTUyBpcyBFSU5QUk9HUkVTUyAqLworKyAgICAvKiBXU0FFQUxSRUFEWSBpcyBFQUxSRUFEWSAqLworKyAgICAvKiBXU0FFTk9UU09DSyBpcyBFTk9UU09DSyAqLworKyAgICAvKiBXU0FFREVTVEFERFJSRVEgaXMgRURFU1RBRERSUkVRICovCisrICAgIC8qIFdTQUVNU0dTSVpFIGlzIEVNU0dTSVpFICovCisrICAgIC8qIFdTQUVQUk9UT1RZUEUgaXMgRVBST1RPVFlQRSAqLworKyAgICAvKiBXU0FFTk9QUk9UT09QVCBpcyBFTk9QUk9UT09QVCAqLworKyAgICAvKiBXU0FFUFJPVE9OT1NVUFBPUlQgaXMgRVBST1RPTk9TVVBQT1JUICovCisrICAgIC8qIFdTQUVTT0NLVE5PU1VQUE9SVCBpcyBFU09DS1ROT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRU9QTk9UU1VQUCBpcyBFT1BOT1RTVVBQICovCisrICAgIC8qIFdTQUVQRk5PU1VQUE9SVCBpcyBFUEZOT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRUFGTk9TVVBQT1JUIGlzIEVBRk5PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFQUREUklOVVNFIGlzIEVBRERSSU5VU0UgKi8KKysgICAgLyogV1NBRUFERFJOT1RBVkFJTCBpcyBFQUREUk5PVEFWQUlMICovCisrICAgIC8qIFdTQUVORVRET1dOIGlzIEVORVRET1dOICovCisrICAgIC8qIFdTQUVORVRVTlJFQUNIIGlzIEVORVRVTlJFQUNIICovCisrICAgIC8qIFdTQUVORVRSRVNFVCBpcyBFTkVUUkVTRVQgKi8KKysgICAgLyogV1NBRUNPTk5BQk9SVEVEIGlzIEVDT05OQUJPUlRFRCAqLworKyAgICAvKiBXU0FFQ09OTlJFU0VUIGlzIEVDT05OUkVTRVQgKi8KKysgICAgLyogV1NBRU5PQlVGUyBpcyBFTk9CVUZTICovCisrICAgIC8qIFdTQUVJU0NPTk4gaXMgRUlTQ09OTiAqLworKyAgICAvKiBXU0FFTk9UQ09OTiBpcyBFTk9UQ09OTiAqLworKyAgICAvKiBXU0FFU0hVVERPV04gaXMgRVNIVVRET1dOICovCisrICAgIC8qIFdTQUVUT09NQU5ZUkVGUyBpcyBFVE9PTUFOWVJFRlMgKi8KKysgICAgLyogV1NBRVRJTUVET1VUIGlzIEVUSU1FRE9VVCAqLworKyAgICAvKiBXU0FFQ09OTlJFRlVTRUQgaXMgRUNPTk5SRUZVU0VEICovCisrICAgIC8qIFdTQUVMT09QIGlzIEVMT09QICovCisrICAgIC8qIFdTQUVOQU1FVE9PTE9ORyBtYXBzIHRvIEVOQU1FVE9PTE9ORyAqLworKyAgICAvKiBXU0FFSE9TVERPV04gaXMgRUhPU1RET1dOICovCisrICAgIC8qIFdTQUVIT1NUVU5SRUFDSCBpcyBFSE9TVFVOUkVBQ0ggKi8KKysgICAgLyogV1NBRU5PVEVNUFRZIG1hcHMgdG8gRU5PVEVNUFRZICovCisrICAgIC8qIFdTQUVQUk9DTElNIGlzIEVQUk9DTElNICovCisrICAgIC8qIFdTQUVVU0VSUyBpcyBFVVNFUlMgKi8KKysgICAgLyogV1NBRURRVU9UIGlzIEVEUVVPVCAqLworKyAgICAvKiBXU0FFU1RBTEUgaXMgRVNUQUxFICovCisrICAgIC8qIFdTQUVSRU1PVEUgaXMgRVJFTU9URSAqLworKyAgICBjYXNlIFdTQVNZU05PVFJFQURZOgorKyAgICAgIG1zZyA9ICJOZXR3b3JrIHN1YnN5c3RlbSBpcyB1bmF2YWlsYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorKyAgICAgIG1zZyA9ICJXaW5zb2NrLmRsbCB2ZXJzaW9uIG91dCBvZiByYW5nZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBTk9USU5JVElBTElTRUQ6CisrICAgICAgbXNnID0gIlN1Y2Nlc3NmdWwgV1NBU3RhcnR1cCBub3QgeWV0IHBlcmZvcm1lZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRURJU0NPTjoKKysgICAgICBtc2cgPSAiR3JhY2VmdWwgc2h1dGRvd24gaW4gcHJvZ3Jlc3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVOT01PUkU6IGNhc2UgV1NBX0VfTk9fTU9SRToKKysgICAgICBtc2cgPSAiTm8gbW9yZSByZXN1bHRzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFQ0FOQ0VMTEVEOiBjYXNlIFdTQV9FX0NBTkNFTExFRDoKKysgICAgICBtc2cgPSAiQ2FsbCB3YXMgY2FuY2VsZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVJTlZBTElEUFJPQ1RBQkxFOgorKyAgICAgIG1zZyA9ICJQcm9jZWR1cmUgY2FsbCB0YWJsZSBpcyBpbnZhbGlkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFSU5WQUxJRFBST1ZJREVSOgorKyAgICAgIG1zZyA9ICJTZXJ2aWNlIHByb3ZpZGVyIGlzIGludmFsaWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVQUk9WSURFUkZBSUxFRElOSVQ6CisrICAgICAgbXNnID0gIlNlcnZpY2UgcHJvdmlkZXIgZmFpbGVkIHRvIGluaXRpYWxpemUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVNZU0NBTExGQUlMVVJFOgorKyAgICAgIG1zZyA9ICJTeXN0ZW0gY2FsbCBmYWlsdXJlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FTRVJWSUNFX05PVF9GT1VORDoKKysgICAgICBtc2cgPSAiU2VydmljZSBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVRZUEVfTk9UX0ZPVU5EOgorKyAgICAgIG1zZyA9ICJDbGFzcyB0eXBlIG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRVJFRlVTRUQ6CisrICAgICAgbXNnID0gIkRhdGFiYXNlIHF1ZXJ5IHdhcyByZWZ1c2VkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FIT1NUX05PVF9GT1VORDoKKysgICAgICBtc2cgPSAiSG9zdCBub3QgZm91bmQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVRSWV9BR0FJTjoKKysgICAgICBtc2cgPSAiTm9uYXV0aG9yaXRhdGl2ZSBob3N0IG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBTk9fUkVDT1ZFUlk6CisrICAgICAgbXNnID0gIk5vbnJlY292ZXJhYmxlIGVycm9yIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FOT19EQVRBOgorKyAgICAgIG1zZyA9ICJWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSI7CisrICAgICAgYnJlYWs7CisrICAgIC8qIFdTQV9RT1NfKiBvbWl0dGVkICovCisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FTk9NU0cKKysgICAgY2FzZSBFTk9NU0c6CisrICAgICAgbXNnID0gIk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FSURSTQorKyAgICBjYXNlIEVJRFJNOgorKyAgICAgIG1zZyA9ICJJZGVudGlmaWVyIHJlbW92ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksKKysgICAgY2FzZSBFTk9MSU5LOgorKyAgICAgIG1zZyA9ICJMaW5rIGhhcyBiZWVuIHNldmVyZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VQUk9UTworKyAgICBjYXNlIEVQUk9UTzoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgZXJyb3IiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUAorKyAgICBjYXNlIEVNVUxUSUhPUDoKKysgICAgICBtc2cgPSAiTXVsdGlob3AgYXR0ZW1wdGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FQkFETVNHCisrICAgIGNhc2UgRUJBRE1TRzoKKysgICAgICBtc2cgPSAiQmFkIG1lc3NhZ2UiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVworKyAgICBjYXNlIEVPVkVSRkxPVzoKKysgICAgICBtc2cgPSAiVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU5PVFNVUAorKyAgICBjYXNlIEVOT1RTVVA6CisrICAgICAgbXNnID0gIk5vdCBzdXBwb3J0ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VTVEFMRQorKyAgICBjYXNlIEVTVEFMRToKKysgICAgICBtc2cgPSAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FRFFVT1QKKysgICAgY2FzZSBFRFFVT1Q6CisrICAgICAgbXNnID0gIkRpc2sgcXVvdGEgZXhjZWVkZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorKyAgICBjYXNlIEVDQU5DRUxFRDoKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIGNhbmNlbGVkIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrICAgIH0KKyAKKy0gIC8qIENhc3QgYXdheSBjb25zdCwgZHVlIHRvIHRoZSBoaXN0b3JpY2FsIHNpZ25hdHVyZSBvZiBzdHJlcnJvcjsKKy0gICAgIGNhbGxlcnMgc2hvdWxkIG5vdCBiZSBtb2RpZnlpbmcgdGhlIHN0cmluZy4gICovCistICBjb25zdCBjaGFyICptc2cgPSBzdHJlcnJvcl9vdmVycmlkZSAobik7CisgICBpZiAobXNnKQorICAgICByZXR1cm4gKGNoYXIgKikgbXNnOworIAorLSAgbXNnID0gc3RyZXJyb3IgKG4pOworKyAgeworKyAgICBjaGFyICpyZXN1bHQgPSBzdHJlcnJvciAobik7CisgCistICAvKiBPdXIgc3RyZXJyb3JfciBpbXBsZW1lbnRhdGlvbiBtaWdodCB1c2UgdGhlIHN5c3RlbSdzIHN0cmVycm9yCistICAgICBidWZmZXIsIHNvIGFsbCBvdGhlciBjbGllbnRzIG9mIHN0cmVycm9yIGhhdmUgdG8gc2VlIHRoZSBlcnJvcgorLSAgICAgY29waWVkIGludG8gYSBidWZmZXIgdGhhdCB3ZSBtYW5hZ2UuICBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwKKy0gICAgIGV2ZW4gaWYgdGhlIHN5c3RlbSBzdHJlcnJvciBpcywgYnV0IHBvcnRhYmxlIHByb2dyYW1zIHNob3VsZG4ndAorLSAgICAgYmUgdXNpbmcgc3RyZXJyb3IgaWYgdGhleSBjYXJlIGFib3V0IHRocmVhZC1zYWZldHkuICAqLworLSAgaWYgKCFtc2cgfHwgISptc2cpCistICAgIHsKKy0gICAgICBzdGF0aWMgY2hhciBjb25zdCBmbXRbXSA9ICJVbmtub3duIGVycm9yICVkIjsKKy0gICAgICB2ZXJpZnkgKHNpemVvZiBidWYgPj0gc2l6ZW9mIChmbXQpICsgSU5UX1NUUkxFTl9CT1VORCAobikpOworLSAgICAgIHNwcmludGYgKGJ1ZiwgZm10LCBuKTsKKy0gICAgICBlcnJubyA9IEVJTlZBTDsKKy0gICAgICByZXR1cm4gYnVmOworLSAgICB9CisrICAgIGlmIChyZXN1bHQgPT0gTlVMTCB8fCByZXN1bHRbMF0gPT0gJ1wwJykKKysgICAgICB7CisrICAgICAgICBzdGF0aWMgY2hhciBjb25zdCBmbXRbXSA9ICJVbmtub3duIGVycm9yICglZCkiOworKyAgICAgICAgc3RhdGljIGNoYXIgbXNnX2J1ZltzaXplb2YgZm10ICsgSU5UX1NUUkxFTl9CT1VORCAobildOworKyAgICAgICAgc3ByaW50ZiAobXNnX2J1ZiwgZm10LCBuKTsKKysgICAgICAgIHJldHVybiBtc2dfYnVmOworKyAgICAgIH0KKyAKKy0gIC8qIEZpeCBTVEFDS0JVRl9MRU4gaWYgdGhpcyBldmVyIGFib3J0cy4gICovCistICBsZW4gPSBzdHJsZW4gKG1zZyk7CistICBpZiAoc2l6ZW9mIGJ1ZiA8PSBsZW4pCistICAgIGFib3J0ICgpOworLQorLSAgcmV0dXJuIG1lbWNweSAoYnVmLCBtc2csIGxlbiArIDEpOworKyAgICByZXR1cm4gcmVzdWx0OworKyAgfQorIH0KKysKKysjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjc5ICswLDAgQEAKKy0vKiBzdHJlcnJvci1vdmVycmlkZS5jIC0tLSBQT1NJWCBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCistCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLS8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDEwLiAgKi8KKy0KKy0jaW5jbHVkZSA8Y29uZmlnLmg+CistCistI2luY2x1ZGUgInN0cmVycm9yLW92ZXJyaWRlLmgiCistCistI2luY2x1ZGUgPGVycm5vLmg+CistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLworLSMgaWYgSEFWRV9XSU5TT0NLMl9ICistIyAgaW5jbHVkZSA8d2luc29jazIuaD4KKy0jIGVuZGlmCistI2VuZGlmCistCistLyogSWYgRVJSTlVNIG1hcHMgdG8gYW4gZXJybm8gdmFsdWUgZGVmaW5lZCBieSBnbnVsaWIsIHJldHVybiBhIHN0cmluZworLSAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKy1jb25zdCBjaGFyICoKKy1zdHJlcnJvcl9vdmVycmlkZSAoaW50IGVycm51bSkKKy17CistICAvKiBUaGVzZSBlcnJvciBtZXNzYWdlcyBhcmUgdGFrZW4gZnJvbSBnbGliYy9zeXNkZXBzL2dudS9lcnJsaXN0LmMuICAqLworLSAgc3dpdGNoIChlcnJudW0pCistICAgIHsKKy0jaWYgUkVQTEFDRV9TVFJFUlJPUl8wCistICAgIGNhc2UgMDoKKy0gICAgICByZXR1cm4gIlN1Y2Nlc3MiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZCistICAgIGNhc2UgRVRYVEJTWToKKy0gICAgICByZXR1cm4gIlRleHQgZmlsZSBidXN5IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCistICAgICAgLyogRVdPVUxEQkxPQ0sgaXMgdGhlIHNhbWUgYXMgRUFHQUlOLiAgKi8KKy0gICAgY2FzZSBFSU5QUk9HUkVTUzoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIEVBTFJFQURZOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIEVOT1RTT0NLOgorLSAgICAgIHJldHVybiAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IjsKKy0gICAgY2FzZSBFREVTVEFERFJSRVE6CistICAgICAgcmV0dXJuICJEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkIjsKKy0gICAgY2FzZSBFTVNHU0laRToKKy0gICAgICByZXR1cm4gIk1lc3NhZ2UgdG9vIGxvbmciOworLSAgICBjYXNlIEVQUk9UT1RZUEU6CistICAgICAgcmV0dXJuICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiOworLSAgICBjYXNlIEVOT1BST1RPT1BUOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgbm90IGF2YWlsYWJsZSI7CistICAgIGNhc2UgRVBST1RPTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRVNPQ0tUTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRU9QTk9UU1VQUDoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFUEZOT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCI7CistICAgIGNhc2UgRUFGTk9TVVBQT1JUOgorLSAgICAgIHJldHVybiAiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCI7CistICAgIGNhc2UgRUFERFJJTlVTRToKKy0gICAgICByZXR1cm4gIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiOworLSAgICBjYXNlIEVBRERSTk9UQVZBSUw6CistICAgICAgcmV0dXJuICJDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzIjsKKy0gICAgY2FzZSBFTkVURE9XTjoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgaXMgZG93biI7CistICAgIGNhc2UgRU5FVFVOUkVBQ0g6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGlzIHVucmVhY2hhYmxlIjsKKy0gICAgY2FzZSBFTkVUUkVTRVQ6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CistICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorLSAgICAgIHJldHVybiAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworLSAgICBjYXNlIEVDT05OUkVTRVQ6CistICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiOworLSAgICBjYXNlIEVOT0JVRlM6CistICAgICAgcmV0dXJuICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIjsKKy0gICAgY2FzZSBFSVNDT05OOgorLSAgICAgIHJldHVybiAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIjsKKy0gICAgY2FzZSBFTk9UQ09OTjoKKy0gICAgICByZXR1cm4gIlRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkIjsKKy0gICAgY2FzZSBFU0hVVERPV046CistICAgICAgcmV0dXJuICJDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iOworLSAgICBjYXNlIEVUT09NQU5ZUkVGUzoKKy0gICAgICByZXR1cm4gIlRvbyBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UiOworLSAgICBjYXNlIEVUSU1FRE9VVDoKKy0gICAgICByZXR1cm4gIkNvbm5lY3Rpb24gdGltZWQgb3V0IjsKKy0gICAgY2FzZSBFQ09OTlJFRlVTRUQ6CistICAgICAgcmV0dXJuICJDb25uZWN0aW9uIHJlZnVzZWQiOworLSAgICBjYXNlIEVMT09QOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzIjsKKy0gICAgY2FzZSBFSE9TVERPV046CistICAgICAgcmV0dXJuICJIb3N0IGlzIGRvd24iOworLSAgICBjYXNlIEVIT1NUVU5SRUFDSDoKKy0gICAgICByZXR1cm4gIk5vIHJvdXRlIHRvIGhvc3QiOworLSAgICBjYXNlIEVQUk9DTElNOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgcHJvY2Vzc2VzIjsKKy0gICAgY2FzZSBFVVNFUlM6CistICAgICAgcmV0dXJuICJUb28gbWFueSB1c2VycyI7CistICAgIGNhc2UgRURRVU9UOgorLSAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CistICAgIGNhc2UgRVNUQUxFOgorLSAgICAgIHJldHVybiAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKy0gICAgY2FzZSBFUkVNT1RFOgorLSAgICAgIHJldHVybiAiT2JqZWN0IGlzIHJlbW90ZSI7CistIyBpZiBIQVZFX1dJTlNPQ0syX0gKKy0gICAgICAvKiBXU0FfSU5WQUxJRF9IQU5ETEUgbWFwcyB0byBFQkFERiAqLworLSAgICAgIC8qIFdTQV9OT1RfRU5PVUdIX01FTU9SWSBtYXBzIHRvIEVOT01FTSAqLworLSAgICAgIC8qIFdTQV9JTlZBTElEX1BBUkFNRVRFUiBtYXBzIHRvIEVJTlZBTCAqLworLSAgICBjYXNlIFdTQV9PUEVSQVRJT05fQUJPUlRFRDoKKy0gICAgICByZXR1cm4gIk92ZXJsYXBwZWQgb3BlcmF0aW9uIGFib3J0ZWQiOworLSAgICBjYXNlIFdTQV9JT19JTkNPTVBMRVRFOgorLSAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBJL08gZXZlbnQgb2JqZWN0IG5vdCBpbiBzaWduYWxlZCBzdGF0ZSI7CistICAgIGNhc2UgV1NBX0lPX1BFTkRJTkc6CistICAgICAgcmV0dXJuICJPdmVybGFwcGVkIG9wZXJhdGlvbnMgd2lsbCBjb21wbGV0ZSBsYXRlciI7CistICAgICAgLyogV1NBRUlOVFIgbWFwcyB0byBFSU5UUiAqLworLSAgICAgIC8qIFdTQUVCQURGIG1hcHMgdG8gRUJBREYgKi8KKy0gICAgICAvKiBXU0FFQUNDRVMgbWFwcyB0byBFQUNDRVMgKi8KKy0gICAgICAvKiBXU0FFRkFVTFQgbWFwcyB0byBFRkFVTFQgKi8KKy0gICAgICAvKiBXU0FFSU5WQUwgbWFwcyB0byBFSU5WQUwgKi8KKy0gICAgICAvKiBXU0FFTUZJTEUgbWFwcyB0byBFTUZJTEUgKi8KKy0gICAgICAvKiBXU0FFV09VTERCTE9DSyBtYXBzIHRvIEVXT1VMREJMT0NLICovCistICAgICAgLyogV1NBRUlOUFJPR1JFU1MgaXMgRUlOUFJPR1JFU1MgKi8KKy0gICAgICAvKiBXU0FFQUxSRUFEWSBpcyBFQUxSRUFEWSAqLworLSAgICAgIC8qIFdTQUVOT1RTT0NLIGlzIEVOT1RTT0NLICovCistICAgICAgLyogV1NBRURFU1RBRERSUkVRIGlzIEVERVNUQUREUlJFUSAqLworLSAgICAgIC8qIFdTQUVNU0dTSVpFIGlzIEVNU0dTSVpFICovCistICAgICAgLyogV1NBRVBST1RPVFlQRSBpcyBFUFJPVE9UWVBFICovCistICAgICAgLyogV1NBRU5PUFJPVE9PUFQgaXMgRU5PUFJPVE9PUFQgKi8KKy0gICAgICAvKiBXU0FFUFJPVE9OT1NVUFBPUlQgaXMgRVBST1RPTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRVNPQ0tUTk9TVVBQT1JUIGlzIEVTT0NLVE5PU1VQUE9SVCAqLworLSAgICAgIC8qIFdTQUVPUE5PVFNVUFAgaXMgRU9QTk9UU1VQUCAqLworLSAgICAgIC8qIFdTQUVQRk5PU1VQUE9SVCBpcyBFUEZOT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFQUZOT1NVUFBPUlQgaXMgRUFGTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRUFERFJJTlVTRSBpcyBFQUREUklOVVNFICovCistICAgICAgLyogV1NBRUFERFJOT1RBVkFJTCBpcyBFQUREUk5PVEFWQUlMICovCistICAgICAgLyogV1NBRU5FVERPV04gaXMgRU5FVERPV04gKi8KKy0gICAgICAvKiBXU0FFTkVUVU5SRUFDSCBpcyBFTkVUVU5SRUFDSCAqLworLSAgICAgIC8qIFdTQUVORVRSRVNFVCBpcyBFTkVUUkVTRVQgKi8KKy0gICAgICAvKiBXU0FFQ09OTkFCT1JURUQgaXMgRUNPTk5BQk9SVEVEICovCistICAgICAgLyogV1NBRUNPTk5SRVNFVCBpcyBFQ09OTlJFU0VUICovCistICAgICAgLyogV1NBRU5PQlVGUyBpcyBFTk9CVUZTICovCistICAgICAgLyogV1NBRUlTQ09OTiBpcyBFSVNDT05OICovCistICAgICAgLyogV1NBRU5PVENPTk4gaXMgRU5PVENPTk4gKi8KKy0gICAgICAvKiBXU0FFU0hVVERPV04gaXMgRVNIVVRET1dOICovCistICAgICAgLyogV1NBRVRPT01BTllSRUZTIGlzIEVUT09NQU5ZUkVGUyAqLworLSAgICAgIC8qIFdTQUVUSU1FRE9VVCBpcyBFVElNRURPVVQgKi8KKy0gICAgICAvKiBXU0FFQ09OTlJFRlVTRUQgaXMgRUNPTk5SRUZVU0VEICovCistICAgICAgLyogV1NBRUxPT1AgaXMgRUxPT1AgKi8KKy0gICAgICAvKiBXU0FFTkFNRVRPT0xPTkcgbWFwcyB0byBFTkFNRVRPT0xPTkcgKi8KKy0gICAgICAvKiBXU0FFSE9TVERPV04gaXMgRUhPU1RET1dOICovCistICAgICAgLyogV1NBRUhPU1RVTlJFQUNIIGlzIEVIT1NUVU5SRUFDSCAqLworLSAgICAgIC8qIFdTQUVOT1RFTVBUWSBtYXBzIHRvIEVOT1RFTVBUWSAqLworLSAgICAgIC8qIFdTQUVQUk9DTElNIGlzIEVQUk9DTElNICovCistICAgICAgLyogV1NBRVVTRVJTIGlzIEVVU0VSUyAqLworLSAgICAgIC8qIFdTQUVEUVVPVCBpcyBFRFFVT1QgKi8KKy0gICAgICAvKiBXU0FFU1RBTEUgaXMgRVNUQUxFICovCistICAgICAgLyogV1NBRVJFTU9URSBpcyBFUkVNT1RFICovCistICAgIGNhc2UgV1NBU1lTTk9UUkVBRFk6CistICAgICAgcmV0dXJuICJOZXR3b3JrIHN1YnN5c3RlbSBpcyB1bmF2YWlsYWJsZSI7CistICAgIGNhc2UgV1NBVkVSTk9UU1VQUE9SVEVEOgorLSAgICAgIHJldHVybiAiV2luc29jay5kbGwgdmVyc2lvbiBvdXQgb2YgcmFuZ2UiOworLSAgICBjYXNlIFdTQU5PVElOSVRJQUxJU0VEOgorLSAgICAgIHJldHVybiAiU3VjY2Vzc2Z1bCBXU0FTdGFydHVwIG5vdCB5ZXQgcGVyZm9ybWVkIjsKKy0gICAgY2FzZSBXU0FFRElTQ09OOgorLSAgICAgIHJldHVybiAiR3JhY2VmdWwgc2h1dGRvd24gaW4gcHJvZ3Jlc3MiOworLSAgICBjYXNlIFdTQUVOT01PUkU6IGNhc2UgV1NBX0VfTk9fTU9SRToKKy0gICAgICByZXR1cm4gIk5vIG1vcmUgcmVzdWx0cyI7CistICAgIGNhc2UgV1NBRUNBTkNFTExFRDogY2FzZSBXU0FfRV9DQU5DRUxMRUQ6CistICAgICAgcmV0dXJuICJDYWxsIHdhcyBjYW5jZWxlZCI7CistICAgIGNhc2UgV1NBRUlOVkFMSURQUk9DVEFCTEU6CistICAgICAgcmV0dXJuICJQcm9jZWR1cmUgY2FsbCB0YWJsZSBpcyBpbnZhbGlkIjsKKy0gICAgY2FzZSBXU0FFSU5WQUxJRFBST1ZJREVSOgorLSAgICAgIHJldHVybiAiU2VydmljZSBwcm92aWRlciBpcyBpbnZhbGlkIjsKKy0gICAgY2FzZSBXU0FFUFJPVklERVJGQUlMRURJTklUOgorLSAgICAgIHJldHVybiAiU2VydmljZSBwcm92aWRlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSI7CistICAgIGNhc2UgV1NBU1lTQ0FMTEZBSUxVUkU6CistICAgICAgcmV0dXJuICJTeXN0ZW0gY2FsbCBmYWlsdXJlIjsKKy0gICAgY2FzZSBXU0FTRVJWSUNFX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIlNlcnZpY2Ugbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FUWVBFX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIkNsYXNzIHR5cGUgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FFUkVGVVNFRDoKKy0gICAgICByZXR1cm4gIkRhdGFiYXNlIHF1ZXJ5IHdhcyByZWZ1c2VkIjsKKy0gICAgY2FzZSBXU0FIT1NUX05PVF9GT1VORDoKKy0gICAgICByZXR1cm4gIkhvc3Qgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FUUllfQUdBSU46CistICAgICAgcmV0dXJuICJOb25hdXRob3JpdGF0aXZlIGhvc3Qgbm90IGZvdW5kIjsKKy0gICAgY2FzZSBXU0FOT19SRUNPVkVSWToKKy0gICAgICByZXR1cm4gIk5vbnJlY292ZXJhYmxlIGVycm9yIjsKKy0gICAgY2FzZSBXU0FOT19EQVRBOgorLSAgICAgIHJldHVybiAiVmFsaWQgbmFtZSwgbm8gZGF0YSByZWNvcmQgb2YgcmVxdWVzdGVkIHR5cGUiOworLSAgICAgIC8qIFdTQV9RT1NfKiBvbWl0dGVkICovCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9NU0cKKy0gICAgY2FzZSBFTk9NU0c6CistICAgICAgcmV0dXJuICJObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VJRFJNCistICAgIGNhc2UgRUlEUk06CistICAgICAgcmV0dXJuICJJZGVudGlmaWVyIHJlbW92ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LCistICAgIGNhc2UgRU5PTElOSzoKKy0gICAgICByZXR1cm4gIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VQUk9UTworLSAgICBjYXNlIEVQUk9UTzoKKy0gICAgICByZXR1cm4gIlByb3RvY29sIGVycm9yIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QCistICAgIGNhc2UgRU1VTFRJSE9QOgorLSAgICAgIHJldHVybiAiTXVsdGlob3AgYXR0ZW1wdGVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUJBRE1TRworLSAgICBjYXNlIEVCQURNU0c6CistICAgICAgcmV0dXJuICJCYWQgbWVzc2FnZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVworLSAgICBjYXNlIEVPVkVSRkxPVzoKKy0gICAgICByZXR1cm4gIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQCistICAgIGNhc2UgRU5PVFNVUDoKKy0gICAgICByZXR1cm4gIk5vdCBzdXBwb3J0ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQKKy0gICAgY2FzZSBFTkVUUkVTRVQ6CistICAgICAgcmV0dXJuICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRAorLSAgICBjYXNlIEVDT05OQUJPUlRFRDoKKy0gICAgICByZXR1cm4gIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNUQUxFCistICAgIGNhc2UgRVNUQUxFOgorLSAgICAgIHJldHVybiAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRURRVU9UCistICAgIGNhc2UgRURRVU9UOgorLSAgICAgIHJldHVybiAiRGlzayBxdW90YSBleGNlZWRlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VDQU5DRUxFRAorLSAgICBjYXNlIEVDQU5DRUxFRDoKKy0gICAgICByZXR1cm4gIk9wZXJhdGlvbiBjYW5jZWxlZCI7CistI2VuZGlmCistCistICAgIGRlZmF1bHQ6CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy19CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDUyICswLDAgQEAKKy0vKiBzdHJlcnJvci1vdmVycmlkZS5oIC0tLSBQT1NJWCBjb21wYXRpYmxlIHN5c3RlbSBlcnJvciByb3V0aW5lCistCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLSNpZm5kZWYgX0dMX1NUUkVSUk9SX09WRVJSSURFX0gKKy0jIGRlZmluZSBfR0xfU1RSRVJST1JfT1ZFUlJJREVfSAorLQorLSMgaW5jbHVkZSA8ZXJybm8uaD4KKy0jIGluY2x1ZGUgPHN0ZGRlZi5oPgorLQorLS8qIFJlYXNvbmFibGUgYnVmZmVyIHNpemUgdGhhdCBzaG91bGQgbmV2ZXIgdHJpZ2dlciBFUkFOR0U7IGlmIHRoaXMKKy0gICBwcm92ZXMgdG9vIHNtYWxsLCB3ZSBpbnRlbnRpb25hbGx5IGFib3J0KCksIHRvIHJlbWluZCB1cyB0byBmaXgKKy0gICB0aGlzIHZhbHVlLiAgKi8KKy0jIGRlZmluZSBTVEFDS0JVRl9MRU4gMjU2CistCistLyogSWYgRVJSTlVNIG1hcHMgdG8gYW4gZXJybm8gdmFsdWUgZGVmaW5lZCBieSBnbnVsaWIsIHJldHVybiBhIHN0cmluZworLSAgIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKy0jIGlmIFJFUExBQ0VfU1RSRVJST1JfMCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VTT0NLIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT01TRyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FSURSTSBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9MSU5LIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VQUk9UTyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUJBRE1TRyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PVFNVUCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVEIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VTVEFMRSBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FRFFVT1QgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRUNBTkNFTEVECistZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmVycm9yX292ZXJyaWRlIChpbnQgZXJybnVtKTsKKy0jIGVsc2UKKy0jICBkZWZpbmUgc3RyZXJyb3Jfb3ZlcnJpZGUoaWdub3JlZCkgTlVMTAorLSMgZW5kaWYKKy0KKy0jZW5kaWYgLyogX0dMX1NUUkVSUk9SX09WRVJSSURFX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyaW5nLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyaW5nLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmluZy5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyaW5nLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40MTg0ODQ0NjEgLTA4MDAKK0BAIC0xNiw3ICsxNiw3IEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKysjaWZuZGVmIF9HTF9TVFJJTkdfSAorIAorICNpZiBfX0dOVUNfXyA+PSAzCisgQFBSQUdNQV9TWVNURU1fSEVBREVSQAorQEAgLTI2LDggKzI2LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX1NUUklOR19IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NUUklOR19ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKysjaWZuZGVmIF9HTF9TVFJJTkdfSAorKyNkZWZpbmUgX0dMX1NUUklOR19ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtNTksMzYgKzU5LDYgQEAKKyAvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworIAorIAorLS8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKy0jaWYgQEdOVUxJQl9GRlNMQAorLSMgaWYgIUBIQVZFX0ZGU0xACistX0dMX0ZVTkNERUNMX1NZUyAoZmZzbCwgaW50LCAobG9uZyBpbnQgaSkpOworLSMgZW5kaWYKKy1fR0xfQ1hYQUxJQVNfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CistX0dMX0NYWEFMSUFTV0FSTiAoZmZzbCk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgZmZzbAorLSMgaWYgSEFWRV9SQVdfREVDTF9GRlNMCistX0dMX1dBUk5fT05fVVNFIChmZnNsLCAiZmZzbCBpcyBub3QgcG9ydGFibGUgLSB1c2UgdGhlIGZmc2wgbW9kdWxlIik7CistIyBlbmRpZgorLSNlbmRpZgorLQorLQorLS8qIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBsZWFzdC1zaWduaWZpY2FudCBzZXQgYml0LiAgKi8KKy0jaWYgQEdOVUxJQl9GRlNMTEAKKy0jIGlmICFASEFWRV9GRlNMTEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChmZnNsbCwgaW50LCAobG9uZyBsb25nIGludCBpKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU19TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKKy1fR0xfQ1hYQUxJQVNXQVJOIChmZnNsbCk7CistI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSMgdW5kZWYgZmZzbGwKKy0jIGlmIEhBVkVfUkFXX0RFQ0xfRkZTTEwKKy1fR0xfV0FSTl9PTl9VU0UgKGZmc2xsLCAiZmZzbGwgaXMgbm90IHBvcnRhYmxlIC0gdXNlIHRoZSBmZnNsbCBtb2R1bGUiKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistCisgLyogUmV0dXJuIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBDIHdpdGhpbiBOIGJ5dGVzIG9mIFMsIG9yIE5VTEwuICAqLworICNpZiBAR05VTElCX01FTUNIUkAKKyAjIGlmIEBSRVBMQUNFX01FTUNIUkAKK0BAIC0xMDA3LDUgKzk3Nyw1IEBAIF9HTF9XQVJOX09OX1VTRSAoc3RydmVyc2NtcCwgInN0cnZlcnNjbXAKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NUUklOR19IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KKysjZW5kaWYgLyogX0dMX1NUUklOR19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N5c19zdGF0LmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3lzX3N0YXQuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3lzX3N0YXQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N5c19zdGF0LmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40MzA0ODQ0NjEgLTA4MDAKK0BAIC0zNCw3ICszNCw3IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICisrI2lmbmRlZiBfR0xfU1lTX1NUQVRfSAorIAorIC8qIEdldCBubGlua190LiAgKi8KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitAQCAtNDUsOCArNDUsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1lTX1NUQVRfSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1lTX1NUQVRfSAorKyNpZm5kZWYgX0dMX1NZU19TVEFUX0gKKysjZGVmaW5lIF9HTF9TWVNfU1RBVF9ICisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTY1Myw2ICs2NTMsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHV0aW1lbnNhdCwgInV0aW1lbnNhdCBpCisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9IICovCisrI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisrI2VuZGlmIC8qIF9HTF9TWVNfU1RBVF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3RpbWUuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi90aW1lLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3RpbWUuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3RpbWUuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQzODQ4NDQ2MiAtMDgwMAorQEAgLTI4LDEzICsyOCwxMyBAQAorICAgIHdpdGhvdXQgYWRkaW5nIG91ciBvd24gZGVjbGFyYXRpb25zLiAgKi8KKyAjaWYgKGRlZmluZWQgX19uZWVkX3RpbWVfdCB8fCBkZWZpbmVkIF9fbmVlZF9jbG9ja190IFwKKyAgICAgIHx8IGRlZmluZWQgX19uZWVkX3RpbWVzcGVjIFwKKy0gICAgIHx8IGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1RJTUVfSCkKKysgICAgIHx8IGRlZmluZWQgX0dMX1RJTUVfSCkKKyAKKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1RJTUVfSEAKKyAKKyAjZWxzZQorIAorLSMgZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9USU1FX0gKKysjIGRlZmluZSBfR0xfVElNRV9ICisgCisgIyBASU5DTFVERV9ORVhUQCBATkVYVF9USU1FX0hACisgCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3VuaXN0ZC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3VuaXN0ZC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi91bmlzdGQuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3VuaXN0ZC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDUwNDg0NDYyIC0wODAwCitAQCAtMzYsNyArMzYsNyBAQAorICMgZGVmaW5lIF9HTF9XSU5TT0NLMl9IX1dJVE5FU1MKKyAKKyAvKiBOb3JtYWwgaW52b2NhdGlvbi4gICovCistI2VsaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9ICisrI2VsaWYgIWRlZmluZWQgX0dMX1VOSVNURF9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNpZiBASEFWRV9VTklTVERfSEAKK0BAIC01MSw4ICs1MSw4IEBACisgIyB1bmRlZiBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKyAjZW5kaWYKKyAKKy0jaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9ICisrI2lmICFkZWZpbmVkIF9HTF9VTklTVERfSCAmJiAhZGVmaW5lZCBfR0xfSU5DTFVESU5HX1dJTlNPQ0syX0gKKysjZGVmaW5lIF9HTF9VTklTVERfSAorIAorIC8qIE5ldEJTRCA1LjAgbWlzLWRlZmluZXMgTlVMTC4gIEFsc28gZ2V0IHNpemVfdC4gICovCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorQEAgLTExNyw3NyArMTE3LDc4IEBACisgLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyAKKyAKKy0vKiBIaWRlIHNvbWUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZyb20gPHdpbnNvY2syLmg+LiAgKi8KKy0KKy0jaWYgQEdOVUxJQl9HRVRIT1NUTkFNRUAgJiYgQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKKy0jIGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TWVNfU09DS0VUX0gKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBzb2NrZXQKKy0jICAgZGVmaW5lIHNvY2tldCAgICAgICAgICAgICAgc29ja2V0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGNvbm5lY3QKKy0jICAgZGVmaW5lIGNvbm5lY3QgICAgICAgICAgICAgY29ubmVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBhY2NlcHQKKy0jICAgZGVmaW5lIGFjY2VwdCAgICAgICAgICAgICAgYWNjZXB0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGJpbmQKKy0jICAgZGVmaW5lIGJpbmQgICAgICAgICAgICAgICAgYmluZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRwZWVybmFtZQorLSMgICBkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICBnZXRwZWVybmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRzb2NrbmFtZQorLSMgICBkZWZpbmUgZ2V0c29ja25hbWUgICAgICAgICBnZXRzb2NrbmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBnZXRzb2Nrb3B0CistIyAgIGRlZmluZSBnZXRzb2Nrb3B0ICAgICAgICAgIGdldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgbGlzdGVuCistIyAgIGRlZmluZSBsaXN0ZW4gICAgICAgICAgICAgIGxpc3Rlbl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiByZWN2CistIyAgIGRlZmluZSByZWN2ICAgICAgICAgICAgICAgIHJlY3ZfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2VuZAorLSMgICBkZWZpbmUgc2VuZCAgICAgICAgICAgICAgICBzZW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHJlY3Zmcm9tCistIyAgIGRlZmluZSByZWN2ZnJvbSAgICAgICAgICAgIHJlY3Zmcm9tX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNlbmR0bworLSMgICBkZWZpbmUgc2VuZHRvICAgICAgICAgICAgICBzZW5kdG9fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2V0c29ja29wdAorLSMgICBkZWZpbmUgc2V0c29ja29wdCAgICAgICAgICBzZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHNodXRkb3duCistIyAgIGRlZmluZSBzaHV0ZG93biAgICAgICAgICAgIHNodXRkb3duX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgZWxzZQorLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNvY2tldCwKKy0gICAgICAgICAgICAgICAgICAgICAic29ja2V0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGNvbm5lY3QsCistICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoYWNjZXB0LAorLSAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoYmluZCwKKy0gICAgICAgICAgICAgICAgICAgICAiYmluZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChnZXRwZWVybmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAiZ2V0cGVlcm5hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja25hbWUsCistICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tuYW1lKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tvcHQsCistICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAobGlzdGVuLAorLSAgICAgICAgICAgICAgICAgICAgICJsaXN0ZW4oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdiwKKy0gICAgICAgICAgICAgICAgICAgICAicmVjdigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZW5kLAorLSAgICAgICAgICAgICAgICAgICAgICJzZW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3Zmcm9tLAorLSAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZW5kdG8sCistICAgICAgICAgICAgICAgICAgICAgInNlbmR0bygpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChzZXRzb2Nrb3B0LAorLSAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNodXRkb3duLAorLSAgICAgICAgICAgICAgICAgICAgICJzaHV0ZG93bigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysjaWYgQEdOVUxJQl9HRVRIT1NUTkFNRUAKKysvKiBHZXQgYWxsIHBvc3NpYmxlIGRlY2xhcmF0aW9ucyBvZiBnZXRob3N0bmFtZSgpLiAgKi8KKysjIGlmIEBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hACisrIyAgaWYgIWRlZmluZWQgX0dMX1NZU19TT0NLRVRfSAorKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyMgICAgdW5kZWYgc29ja2V0CisrIyAgICBkZWZpbmUgc29ja2V0ICAgICAgICAgICAgICBzb2NrZXRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGNvbm5lY3QKKysjICAgIGRlZmluZSBjb25uZWN0ICAgICAgICAgICAgIGNvbm5lY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGFjY2VwdAorKyMgICAgZGVmaW5lIGFjY2VwdCAgICAgICAgICAgICAgYWNjZXB0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBiaW5kCisrIyAgICBkZWZpbmUgYmluZCAgICAgICAgICAgICAgICBiaW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBnZXRwZWVybmFtZQorKyMgICAgZGVmaW5lIGdldHBlZXJuYW1lICAgICAgICAgZ2V0cGVlcm5hbWVfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGdldHNvY2tuYW1lCisrIyAgICBkZWZpbmUgZ2V0c29ja25hbWUgICAgICAgICBnZXRzb2NrbmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgZ2V0c29ja29wdAorKyMgICAgZGVmaW5lIGdldHNvY2tvcHQgICAgICAgICAgZ2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgbGlzdGVuCisrIyAgICBkZWZpbmUgbGlzdGVuICAgICAgICAgICAgICBsaXN0ZW5fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHJlY3YKKysjICAgIGRlZmluZSByZWN2ICAgICAgICAgICAgICAgIHJlY3ZfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNlbmQKKysjICAgIGRlZmluZSBzZW5kICAgICAgICAgICAgICAgIHNlbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHJlY3Zmcm9tCisrIyAgICBkZWZpbmUgcmVjdmZyb20gICAgICAgICAgICByZWN2ZnJvbV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2VuZHRvCisrIyAgICBkZWZpbmUgc2VuZHRvICAgICAgICAgICAgICBzZW5kdG9fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNldHNvY2tvcHQKKysjICAgIGRlZmluZSBzZXRzb2Nrb3B0ICAgICAgICAgIHNldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIHNodXRkb3duCisrIyAgICBkZWZpbmUgc2h1dGRvd24gICAgICAgICAgICBzaHV0ZG93bl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICBlbHNlCisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNvY2tldCwKKysgICAgICAgICAgICAgICAgICAgICAgInNvY2tldCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoY29ubmVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGFjY2VwdCwKKysgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoYmluZCwKKysgICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHBlZXJuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0cGVlcm5hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja25hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHNvY2tvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChsaXN0ZW4sCisrICAgICAgICAgICAgICAgICAgICAgICJsaXN0ZW4oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHJlY3YsCisrICAgICAgICAgICAgICAgICAgICAgICJyZWN2KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAic2VuZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdmZyb20sCisrICAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VuZHRvLAorKyAgICAgICAgICAgICAgICAgICAgICAic2VuZHRvKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZXRzb2Nrb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2h1dGRvd24sCisrICAgICAgICAgICAgICAgICAgICAgICJzaHV0ZG93bigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysjICAgZW5kaWYKKyAjICBlbmRpZgorLSMgZW5kaWYKKy0jIGlmICFkZWZpbmVkIF9AR1VBUkRfUFJFRklYQF9TWVNfU0VMRUNUX0gKKy0jICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBzZWxlY3QKKy0jICAgZGVmaW5lIHNlbGVjdCAgICAgICAgICAgICAgc2VsZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NlbGVjdF9oCistIyAgZWxzZQorLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbGVjdCwKKy0gICAgICAgICAgICAgICAgICAgICAic2VsZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NlbGVjdC5oPiIpOworKyMgIGlmICFkZWZpbmVkIF9HTF9TWVNfU0VMRUNUX0gKKysjICAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysjICAgIHVuZGVmIHNlbGVjdAorKyMgICAgZGVmaW5lIHNlbGVjdCAgICAgICAgICAgICAgc2VsZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NlbGVjdF9oCisrIyAgIGVsc2UKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc2VsZWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NlbGVjdC5oPiIpOworKyMgICBlbmRpZgorICMgIGVuZGlmCisgIyBlbmRpZgorICNlbmRpZgorQEAgLTEwNjEsNyArMTA2Miw2IEBAIF9HTF9XQVJOX09OX1VTRSAocGlwZTIsICJwaXBlMiBpcyB1bnBvcnQKKyAgICBzcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvcHJlYWQuaHRtbD4uICAqLworICMgaWYgQFJFUExBQ0VfUFJFQURACisgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0jICAgdW5kZWYgcHJlYWQKKyAjICAgZGVmaW5lIHByZWFkIHJwbF9wcmVhZAorICMgIGVuZGlmCisgX0dMX0ZVTkNERUNMX1JQTCAocHJlYWQsIHNzaXplX3QsCitAQCAtMTA5Niw3ICsxMDk2LDYgQEAgX0dMX1dBUk5fT05fVVNFIChwcmVhZCwgInByZWFkIGlzIHVucG9ydAorICAgIDxodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvc3VzdjN4c2gvcHdyaXRlLmh0bWw+LiAgKi8KKyAjIGlmIEBSRVBMQUNFX1BXUklURUAKKyAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwd3JpdGUKKyAjICAgZGVmaW5lIHB3cml0ZSBycGxfcHdyaXRlCisgIyAgZW5kaWYKKyBfR0xfRlVOQ0RFQ0xfUlBMIChwd3JpdGUsIHNzaXplX3QsCitAQCAtMTQxNyw1ICsxNDE2LDUgQEAgX0dMX0NYWEFMSUFTV0FSTiAod3JpdGUpOworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1VOSVNURF9IICovCisrI2VuZGlmIC8qIF9HTF9VTklTVERfSCAqLworKyNlbmRpZiAvKiBfR0xfVU5JU1REX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdmVyaWZ5LmggbGliaWNvbnYtMS4xNC9zcmNsaWIvdmVyaWZ5LmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3ZlcmlmeS5oCTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvdmVyaWZ5LmgJMjAxMi0wMS0wOCAwMjowNzo0MC40OTQ0ODQ0NjQgLTA4MDAKK0BAIC0xNjQsMTMgKzE2NCwxMCBAQAorICAgICAoISFzaXplb2YgKF9HTF9WRVJJRllfVFlQRSAoUiwgRElBR05PU1RJQykpKQorIAorICMgaWZkZWYgX19jcGx1c3BsdXMKKy0jICBpZiAhR05VTElCX2RlZmluZWRfc3RydWN0X19nbF92ZXJpZnlfdHlwZQorIHRlbXBsYXRlIDxpbnQgdz4KKyAgIHN0cnVjdCBfZ2xfdmVyaWZ5X3R5cGUgeworICAgICB1bnNpZ25lZCBpbnQgX2dsX3ZlcmlmeV9lcnJvcl9pZl9uZWdhdGl2ZTogdzsKKyAgIH07CistIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfX2dsX3ZlcmlmeV90eXBlIDEKKy0jICBlbmRpZgorICMgIGRlZmluZSBfR0xfVkVSSUZZX1RZUEUoUiwgRElBR05PU1RJQykgXAorICAgICBfZ2xfdmVyaWZ5X3R5cGU8KFIpID8gMSA6IC0xPgorICMgZWxpZiBkZWZpbmVkIF9HTF9IQVZFX19TVEFUSUNfQVNTRVJUCitAQCAtMjA5LDcgKzIwNiw3IEBAIHRlbXBsYXRlIDxpbnQgdz4KKyAjICBlbmRpZgorICMgZW5kaWYKKyAKKy0vKiBAYXNzZXJ0Lmggb21pdCBzdGFydEAgICovCisrIyBpZmRlZiBfR0xfVkVSSUZZX0gKKyAKKyAvKiBFYWNoIG9mIHRoZXNlIG1hY3JvcyB2ZXJpZmllcyB0aGF0IGl0cyBhcmd1bWVudCBSIGlzIG5vbnplcm8uICBUbworICAgIGJlIHBvcnRhYmxlLCBSIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24uICBVbmxpa2UKK0BAIC0yMjEsMjMgKzIxOCwxNSBAQCB0ZW1wbGF0ZSA8aW50IHc+CisgICAgY29udGV4dHMsIGUuZy4sIHRoZSB0b3AgbGV2ZWwuICAqLworIAorIC8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYW4gaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgorLSAgIFJldHVybiAxLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHZlcmlmeV9leHByIChSLCAxKS4KKy0KKy0gICB2ZXJpZnlfdHJ1ZSBpcyBvYnNvbGVzY2VudDsgcGxlYXNlIHVzZSB2ZXJpZnlfZXhwciBpbnN0ZWFkLiAgKi8KKy0KKy0jIGRlZmluZSB2ZXJpZnlfdHJ1ZShSKSBfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfdHJ1ZSAoIiAjUiAiKSIpCisrICAgUmV0dXJuIDEuICAqLworIAorLS8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZS4gIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlCistICAgZXhwcmVzc2lvbiBFLiAgKi8KKy0KKy0jIGRlZmluZSB2ZXJpZnlfZXhwcihSLCBFKSBcCistICAgIChfR0xfVkVSSUZZX1RSVUUgKFIsICJ2ZXJpZnlfZXhwciAoIiAjUiAiLCAiICNFICIpIikgPyAoRSkgOiAoRSkpCisrIyAgZGVmaW5lIHZlcmlmeV90cnVlKFIpIF9HTF9WRVJJRllfVFJVRSAoUiwgInZlcmlmeV90cnVlICgiICNSICIpIikKKyAKKyAvKiBWZXJpZnkgcmVxdWlyZW1lbnQgUiBhdCBjb21waWxlLXRpbWUsIGFzIGEgZGVjbGFyYXRpb24gd2l0aG91dCBhCisgICAgdHJhaWxpbmcgJzsnLiAgKi8KKyAKKy0jIGRlZmluZSB2ZXJpZnkoUikgX0dMX1ZFUklGWSAoUiwgInZlcmlmeSAoIiAjUiAiKSIpCisrIyAgZGVmaW5lIHZlcmlmeShSKSBfR0xfVkVSSUZZIChSLCAidmVyaWZ5ICgiICNSICIpIikKKyAKKy0vKiBAYXNzZXJ0Lmggb21pdCBlbmRAICAqLworKyMgZW5kaWYKKyAKKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9jYW5vbmljYWxpemUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9jYW5vbmljYWxpemUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvY2Fub25pY2FsaXplLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9jYW5vbmljYWxpemUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41NjY0ODQ0NjkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgY2Fub25pY2FsaXplLm00IHNlcmlhbCAyMworKyMgY2Fub25pY2FsaXplLm00IHNlcmlhbCAyMQorIAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorQEAgLTEwLDYgKzEwLDggQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworICMgbm90IHByb3ZpZGUgb3IgZml4IHJlYWxwYXRoLgorIEFDX0RFRlVOKFtnbF9GVU5DX0NBTk9OSUNBTElaRV9GSUxFTkFNRV9NT0RFXSwKKyBbCisrICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZV0pCisrCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbY2Fub25pY2FsaXplX2ZpbGVfbmFtZV0pCisgICBBQ19SRVFVSVJFKFtnbF9ET1VCTEVfU0xBU0hfUk9PVF0pCitAQCAtMjgsMTQgKzMwLDE2IEBAIEFDX0RFRlVOKFtnbF9DQU5PTklDQUxJWkVfTEdQTF0sCisgICBBQ19SRVFVSVJFKFtnbF9DQU5PTklDQUxJWkVfTEdQTF9TRVBBUkFURV0pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUgPSBubzsgdGhlbgorICAgICBIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MAorKyAgICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKyAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZWFscGF0aCA9IG5vOyB0aGVuCisgICAgICAgSEFWRV9SRUFMUEFUSD0wCisgICAgIGVsaWYgdGVzdCAiJGdsX2N2X2Z1bmNfcmVhbHBhdGhfd29ya3MiICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfUkVBTFBBVEg9MQorICAgICBmaQorICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19yZWFscGF0aF93b3JrcyIgIT0geWVzOyB0aGVuCistICAgIFJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0xCisrICAgIEFDX0xJQk9CSihbY2Fub25pY2FsaXplLWxncGxdKQorICAgICBSRVBMQUNFX1JFQUxQQVRIPTEKKysgICAgUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTEKKyAgIGZpCisgXSkKKyAKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJub19oLm00IGxpYmljb252LTEuMTQvc3JjbTQvZXJybm9faC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJub19oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJub19oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNTkwNDg0NDY5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGVycm5vX2gubTQgc2VyaWFsIDEwCisrIyBlcnJub19oLm00IHNlcmlhbCA5CisgZG5sIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTM0LDEyICszNCw2IEBAIGJvb2JvbworICNpZiAhZGVmaW5lZCBFTk9UU1VQCisgYm9vYm9vCisgI2VuZGlmCistI2lmICFkZWZpbmVkIEVORVRSRVNFVAorLWJvb2JvbworLSNlbmRpZgorLSNpZiAhZGVmaW5lZCBFQ09OTkFCT1JURUQKKy1ib29ib28KKy0jZW5kaWYKKyAjaWYgIWRlZmluZWQgRVNUQUxFCisgYm9vYm9vCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXJyb3IubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJvci5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJvci5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZXJyb3IubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41OTg0ODQ0NzAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSNzZXJpYWwgMTQKKysjc2VyaWFsIDEzCisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCwgMjAwMS0yMDA0LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworQEAgLTgsOCArOCwxNiBAQAorIAorIEFDX0RFRlVOKFtnbF9FUlJPUl0sCisgWworLSAgZG5sIFdlIGRvbid0IHVzZSBBQ19GVU5DX0VSUk9SX0FUX0xJTkUgYW55IG1vcmUsIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyCistICBkbmwgbWFpbnRhaW5lZCBpbiBBdXRvY29uZiBhbmQgYmVjYXVzZSBpdCBpbnZva2VzIEFDX0xJQk9CSi4KKysgIEFDX0ZVTkNfRVJST1JfQVRfTElORQorKyAgZG5sIE5vdGU6IEFDX0ZVTkNfRVJST1JfQVRfTElORSBkb2VzIEFDX0xJQlNPVVJDRVMoW2Vycm9yLmgsIGVycm9yLmNdKS4KKysgIGdsX1BSRVJFUV9FUlJPUgorK10pCisrCisrIyBSZWRlZmluZSBBQ19GVU5DX0VSUk9SX0FUX0xJTkUsIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIG1haW50YWluZWQgaW4KKysjIEF1dG9jb25mLgorK0FDX0RFRlVOKFtBQ19GVU5DX0VSUk9SX0FUX0xJTkVdLAorK1sKKysgIEFDX0xJQlNPVVJDRVMoW2Vycm9yLmgsIGVycm9yLmNdKWRubAorICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlcnJvcl9hdF9saW5lXSwgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lXSwKKyAgICAgW0FDX0xJTktfSUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorQEAgLTE3LDYgKzI1LDkgQEAgQUNfREVGVU4oW2dsX0VSUk9SXSwKKyAgICAgICAgICAgW1tlcnJvcl9hdF9saW5lICgwLCAwLCAiIiwgMCwgImFuIGVycm9yIG9jY3VycmVkIik7XV0pXSwKKyAgICAgICAgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPXllc10sCisgICAgICAgIFthY19jdl9saWJfZXJyb3JfYXRfbGluZT1ub10pXSkKKysgIGlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKysgICAgQUNfTElCT0JKKFtlcnJvcl0pCisrICBmaQorIF0pCisgCisgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9lcnJvci5jLgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2V4dGVuc2lvbnMubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9leHRlbnNpb25zLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2V4dGVuc2lvbnMubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2V4dGVuc2lvbnMubTQJMjAxMi0wMS0wOCAwMjowNzo0MC42MDY0ODQ0NzEgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2VyaWFsIDEwICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgOSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQEAgLTY3LDEwICs2Nyw2IEBAIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pZG5sCisgI2lmbmRlZiBfQUxMX1NPVVJDRQorICMgdW5kZWYgX0FMTF9TT1VSQ0UKKyAjZW5kaWYKKy0vKiBFbmFibGUgZ2VuZXJhbCBleHRlbnNpb25zIG9uIE1hY09TIFguICAqLworLSNpZm5kZWYgX0RBUldJTl9DX1NPVVJDRQorLSMgdW5kZWYgX0RBUldJTl9DX1NPVVJDRQorLSNlbmRpZgorIC8qIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KKyAjaWZuZGVmIF9HTlVfU09VUkNFCisgIyB1bmRlZiBfR05VX1NPVVJDRQorQEAgLTk5LDcgKzk1LDYgQEAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSlkbmwKKyAgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisgICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorICAgQUNfREVGSU5FKFtfQUxMX1NPVVJDRV0pCistICBBQ19ERUZJTkUoW19EQVJXSU5fQ19TT1VSQ0VdKQorICAgQUNfREVGSU5FKFtfR05VX1NPVVJDRV0pCisgICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCisgICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY2FjaGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY2FjaGUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNhY2hlLm00CTIwMTEtMDgtMDcgMDY6NDI6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY2FjaGUubTQJMjAxMi0wMS0wOCAwMjowNzo0My4xNTQ0ODQ1OTMgLTA4MDAKK0BAIC0xNSw3ICsxNSw3IEBACisgCisgCisgIyBTcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtIG9mIGEgY29tbWFuZC1saW5lIGludm9jYXRpb246CistIyAgIGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKKysjICAgZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworIAorICMgU3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybSBvZiBhIGZldyBnbnVsaWItdG9vbC5tNCBtYWNybyBpbnZvY2F0aW9uczoKKyBnbF9MT0NBTF9ESVIoW2dudWxpYi1sb2NhbF0pCitAQCAtMjgsNiArMjgsNyBAQCBnbF9NT0RVTEVTKFsKKyAgIG1ic3RhdGUKKyAgIG1lbW1vdmUKKyAgIHByb2duYW1lCisrICByZWxvY2F0YWJsZQorICAgcmVsb2NhdGFibGUtcHJvZworICAgc2FmZS1yZWFkCisgICBzaWdwaXBlCitAQCAtNDksNSArNTAsNCBAQCBnbF9MSUIoW2xpYmljcnRdKQorIGdsX01BS0VGSUxFX05BTUUoW01ha2VmaWxlLmdudWxpYl0pCisgZ2xfTUFDUk9fUFJFRklYKFtnbF0pCisgZ2xfUE9fRE9NQUlOKFtdKQorLWdsX1dJVE5FU1NfQ19ET01BSU4oW10pCisgZ2xfVkNfRklMRVMoW2ZhbHNlXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tbW9uLm00IGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbW1vbi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tbW9uLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tbW9uLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjM0NDg0NDcxIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGdudWxpYi1jb21tb24ubTQgc2VyaWFsIDI5CisrIyBnbnVsaWItY29tbW9uLm00IHNlcmlhbCAyNAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMiwxOSArMTIsNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OXSwgWworICAgQUNfUkVRVUlSRShbZ2xfQ09NTU9OX0JPRFldKQorIF0pCisgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworLSAgQUhfVkVSQkFUSU0oW19Ob3JldHVybl0sCistWy8qIFRoZSBfTm9yZXR1cm4ga2V5d29yZCBvZiBkcmFmdCBDMVguICAqLworLSNpZm5kZWYgX05vcmV0dXJuCistIyBpZiAoMyA8PSBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fKSBcCistICAgICAgfHwgMHg1MTEwIDw9IF9fU1VOUFJPX0MpCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKy0jIGVsaWYgMTIwMCA8PSBfTVNDX1ZFUgorLSMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1cm4pCistIyBlbHNlCistIyAgZGVmaW5lIF9Ob3JldHVybgorLSMgZW5kaWYKKy0jZW5kaWYKKy1dKQorICAgQUhfVkVSQkFUSU0oW2lzb2M5OV9pbmxpbmVdLAorIFsvKiBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBBcHBsZSBHQ0MgNC4wLjEgYnVpbGQgNTQ2NTogSW4gQzk5IG1vZGUsIGl0IHN1cHBvcnRzCisgICAgdGhlIElTTyBDIDk5IHNlbWFudGljcyBvZiAnZXh0ZXJuIGlubGluZScgKHVubGlrZSB0aGUgR05VIEMgc2VtYW50aWNzIG9mCitAQCAtNDcsMjAgKzM0LDYgQEAgQUNfREVGVU4oW2dsX0NPTU1PTl9CT0RZXSwgWworIC8qIFRoZSBuYW1lIF9VTlVTRURfUEFSQU1FVEVSXyBpcyBhbiBlYXJsaWVyIHNwZWxsaW5nLCBhbHRob3VnaCB0aGUgbmFtZQorICAgIGlzIGEgbWlzbm9tZXIgb3V0c2lkZSBvZiBwYXJhbWV0ZXIgbGlzdHMuICAqLworICNkZWZpbmUgX1VOVVNFRF9QQVJBTUVURVJfIF9HTF9VTlVTRUQKKy0KKy0vKiBUaGUgX19wdXJlX18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45Ni4gICovCistI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworLSNlbmRpZgorLQorLS8qIFRoZSBfX2NvbnN0X18gYXR0cmlidXRlIHdhcyBhZGRlZCBpbiBnY2MgMi45NS4gICovCistI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NSkKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9DT05TVCAvKiBlbXB0eSAqLworLSNlbmRpZgorIF0pCisgICBkbmwgUHJlcGFyYXRpb24gZm9yIHJ1bm5pbmcgdGVzdCBwcm9ncmFtczoKKyAgIGRubCBUZWxsIGdsaWJjIHRvIHdyaXRlIGRpYWdub3N0aWNzIGZyb20gLURfRk9SVElGWV9TT1VSQ0U9MiB0byBzdGRlcnIsIG5vdAorQEAgLTc0LDQ5ICs0NywxNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OX0JPRFldLCBbCisgIyBleHBhbmRzIHRvIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byAxIG9yIDAsIGRlcGVuZGluZworICMgd2hldGhlciBhIGdudWxpYiBtb2R1bGUgdGhhdCBoYXMgYmVlbiByZXF1ZXN0ZWQgc2hhbGwgYmUgY29uc2lkZXJlZCBwcmVzZW50CisgIyBvciBub3QuCistbTRfZGVmaW5lKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0sIFsxXSkKKytBQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dLCBbMV0pCisgCisgIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbbW9kdWxlbmFtZV0pCisgIyBzZXRzIHRoZSBzaGVsbCB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGdpdmVuIG1vZHVsZSB0bworICMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgd2lsbCBldmFsdWF0ZSB0byAxLgorIEFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV0sCisgWworLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYKAorLSAgICBbR05VTElCX1tdbTRfdHJhbnNsaXQoW1skMV1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSwKKy0gICAgW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSkKKy1dKQorLQorLSMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYKFt2YXJpYWJsZV0pCistIyBtb2RpZmllcyB0aGUgc2hlbGwgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT04uCistIyBUaGUgc2hlbGwgdmFyaWFibGUncyB2YWx1ZSBpcyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMKKy0jIHRvIDAgb3IgMS4KKy1BQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYXSwKKy1bCistICBtNF9pZihtNF9kZWZuKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pLCBbMV0sCistICAgIFsKKy0gICAgIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiBWQUxVRSB8fCAxIHRvIDEuCistICAgICAkMT0xCistICAgIF0sCistICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1IoWyQxXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKV0pCistXSkKKy0KKy0jIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF9PUihbdmFyaWFibGVdLCBbY29uZGl0aW9uXSkKKy0jIG1vZGlmaWVzIHRoZSBzaGVsbCB2YXJpYWJsZSB0byBpbmNsdWRlIHRoZSBnaXZlbiBjb25kaXRpb24uICBUaGUgc2hlbGwKKy0jIHZhcmlhYmxlJ3MgdmFsdWUgaXMgYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDAgb3IgMS4KKy1BQ19ERUZVTihbZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SXSwKKy1bCistICBkbmwgU2ltcGxpZnkgdGhlIGV4cHJlc3Npb24gMSB8fCBDT05ESVRJT04gdG8gMS4KKy0gIGlmIHRlc3QgIiRbXSQxIiAhPSAxOyB0aGVuCistICAgIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiAwIHx8IENPTkRJVElPTiB0byBDT05ESVRJT04uCistICAgIGlmIHRlc3QgIiRbXSQxIiA9IDA7IHRoZW4KKy0gICAgICAkMT0kMgorLSAgICBlbHNlCistICAgICAgJDE9IigkW10kMSB8fCAkMikiCistICAgIGZpCistICBmaQorKyAgR05VTElCX1tdbTRfdHJhbnNsaXQoW1skMV1dLAorKyAgICBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKT1nbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTgorIF0pCisgCisgIyBnbF9NT0RVTEVfSU5ESUNBVE9SKFttb2R1bGVuYW1lXSkKK0BAIC0yMTEsMzUgKzE1MSw2IEBAIG00X2lmbmRlZihbQVNfVkFSX0lGXSwKKyBbbTRfZGVmaW5lKFtBU19WQVJfSUZdLAorIFtBU19JRihbdGVzdCB4IkFTX1ZBUl9HRVQoWyQxXSkiID0geCIiJDJdLCBbJDNdLCBbJDRdKV0pXSkKKyAKKy0jIGdsX1BST0dfQVJfUkFOTElCCistIyBEZXRlcm1pbmVzIHRoZSB2YWx1ZXMgZm9yIEFSLCBBUkZMQUdTLCBSQU5MSUIgdGhhdCBmaXQgd2l0aCB0aGUgY29tcGlsZXIuCistQUNfREVGVU4oW2dsX1BST0dfQVJfUkFOTElCXSwKKy1bCistICBkbmwgTWluaXggMyBjb21lcyB3aXRoIHR3byB0b29sY2hhaW5zOiBUaGUgQW1zdGVyZGFtIENvbXBpbGVyIEtpdCBjb21waWxlcgorLSAgZG5sIGFzICJjYyIsIGFuZCBHQ0MgYXMgImdjYyIuIFRoZXkgaGF2ZSBkaWZmZXJlbnQgb2JqZWN0IGZpbGUgZm9ybWF0cyBhbmQKKy0gIGRubCBsaWJyYXJ5IGZvcm1hdHMuIEluIHBhcnRpY3VsYXIsIHRoZSBHTlUgYmludXRpbHMgcHJvZ3JhbXMgYXIsIHJhbmxpYgorLSAgZG5sIHByb2R1Y2UgbGlicmFyaWVzIHRoYXQgd29yayBvbmx5IHdpdGggZ2NjLCBub3Qgd2l0aCBjYy4KKy0gIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorLSAgQUNfRUdSRVBfQ1BQKFtBbXN0ZXJkYW1dLAorLSAgICBbCistI2lmZGVmIF9fQUNLX18KKy1BbXN0ZXJkYW0KKy0jZW5kaWYKKy0gICAgXSwKKy0gICAgW0FSPSdjYyAtYy5hJworLSAgICAgQVJGTEFHUz0nLW8nCistICAgICBSQU5MSUI9JzonCistICAgIF0sCistICAgIFtkbmwgVXNlIHRoZSBBdXRvbWFrZS1kb2N1bWVudGVkIGRlZmF1bHQgdmFsdWVzIGZvciBBUiBhbmQgQVJGTEFHUy4KKy0gICAgIEFSPSdhcicKKy0gICAgIEFSRkxBR1M9J2NydScKKy0gICAgIGRubCBVc2UgdGhlIHJhbmxpYiBwcm9ncmFtIGlmIGl0IGlzIGF2YWlsYWJsZS4KKy0gICAgIEFDX1BST0dfUkFOTElCCistICAgIF0pCistICBBQ19TVUJTVChbQVJdKQorLSAgQUNfU1VCU1QoW0FSRkxBR1NdKQorLV0pCistCisgIyBBQ19QUk9HX01LRElSX1AKKyAjIGlzIGEgYmFja3BvcnQgb2YgYXV0b2NvbmYtMi42MCdzIEFDX1BST0dfTUtESVJfUCwgd2l0aCBhIGZpeAorICMgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBhdXRvbWFrZS0xLjkuNiBmcm9tIGF1dG9jb25mLTIuNjIuCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZ251bGliLWNvbXAubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tcC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tcC5tNAkyMDExLTA4LTA3IDA2OjQyOjEyLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZ251bGliLWNvbXAubTQJMjAxMi0wMS0wOCAwMjowNzo0My45MjI0ODQ2MzAgLTA4MDAKK0BAIC0yNSwxMiArMjUsMTQgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9FUyRdKWRubCBhIHZhbGlkIGxvY2FsZSBuYW1lCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKy0gIEFDX1JFUVVJUkUoW2dsX1BST0dfQVJfUkFOTElCXSkKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKyAgIEFDX1JFUVVJUkUoW0FNX1BST0dfQ0NfQ19PXSkKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2Etb3B0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYXRvcjoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBhcmVhZGxpbms6CisrICAjIENvZGUgZnJvbSBtb2R1bGUgYXJnLW5vbm51bGw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgYmluYXJ5LWlvOgorKyAgIyBDb2RlIGZyb20gbW9kdWxlIGMrK2RlZnM6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgY2Fub25pY2FsaXplLWxncGw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgY2FyZWFkbGlua2F0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGRvc25hbWU6CitAQCAtNDYsNyArNDgsNiBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIGhhdmVsaWI6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgaW5jbHVkZV9uZXh0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGludHByb3BzOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIGxhcmdlZmlsZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBsaWJpY29udi1taXNjOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGxzdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIG1hbGxvY2E6CitAQCAtNjQsMTAgKzY1LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWduYWw6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc2lncGlwZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdwcm9jbWFzazoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L19Ob3JldHVybjoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYysrZGVmczoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L3dhcm4tb24tdXNlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNzaXplX3Q6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RhdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRib29sOgorQEAgLTc3LDcgKzc0LDYgQEAgQUNfREVGVU4oW2dsX0VBUkxZXSwKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRsaWI6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXE6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3I6CistICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGU6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyaW5nOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c19zdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHRpbWU6CitAQCAtODcsNiArODMsNyBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXdpZHRoL3dpZHRoOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHVubG9ja2VkLWlvOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHZlcmlmeToKKysgICMgQ29kZSBmcm9tIG1vZHVsZSB3YXJuLW9uLXVzZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB4YWxsb2M6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgeHJlYWRsaW5rOgorIF0pCitAQCAtMTA5LDkgKzEwNiw2IEBAIEFDX0RFRlVOKFtnbF9JTklUXSwKKyAgIGdsX3NvdXJjZV9iYXNlPSdzcmNsaWInCisgZ2xfRlVOQ19BTExPQ0EKKyBnbF9DQU5PTklDQUxJWkVfTEdQTAorLWlmIHRlc3QgJEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRSA9IDAgfHwgdGVzdCAkUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtjYW5vbmljYWxpemUtbGdwbF0pCistZmkKKyBnbF9NT0RVTEVfSU5ESUNBVE9SKFtjYW5vbmljYWxpemUtbGdwbF0pCisgZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW2Nhbm9uaWNhbGl6ZV9maWxlX25hbWVdKQorIGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFtyZWFscGF0aF0pCitAQCAtMTIxLDEwICsxMTUsNiBAQCBnbF9FTlZJUk9OCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW2Vudmlyb25dKQorIGdsX0hFQURFUl9FUlJOT19ICisgZ2xfRVJST1IKKy1pZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCistICBBQ19MSUJPQkooW2Vycm9yXSkKKy0gIGdsX1BSRVJFUV9FUlJPUgorLWZpCisgbTRfaWZkZWYoW0FNX1hHRVRURVhUX09QVElPTl0sCisgICBbQU1fXVtYR0VUVEVYVF9PUFRJT04oWy0tZmxhZz1lcnJvcjozOmMtZm9ybWF0XSkKKyAgICBBTV9dW1hHRVRURVhUX09QVElPTihbLS1mbGFnPWVycm9yX2F0X2xpbmU6NTpjLWZvcm1hdF0pXSkKK0BAIC0xMzQsNDMgKzEyNCwyNiBAQCBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE4LjFdKQorIEFDX1NVQlNUKFtMSUJJTlRMXSkKKyBBQ19TVUJTVChbTFRMSUJJTlRMXSkKKyBnbF9GVU5DX0xTVEFUCistaWYgdGVzdCAkUkVQTEFDRV9MU1RBVCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbbHN0YXRdKQorLSAgZ2xfUFJFUkVRX0xTVEFUCistZmkKKyBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtsc3RhdF0pCisgZ2xfTUFMTE9DQQorIEFDX1RZUEVfTUJTVEFURV9UCisgZ2xfRlVOQ19NRU1NT1ZFCistaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0gbm87IHRoZW4KKy0gIEFDX0xJQk9CSihbbWVtbW92ZV0pCistICBnbF9QUkVSRVFfTUVNTU9WRQorLWZpCisgZ2xfTVVMVElBUkNICisgZ2xfUEFUSE1BWAorIEFDX0NIRUNLX0RFQ0xTKFtwcm9ncmFtX2ludm9jYXRpb25fbmFtZV0sIFtdLCBbXSwgWyNpbmNsdWRlIDxlcnJuby5oPl0pCisgQUNfQ0hFQ0tfREVDTFMoW3Byb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lXSwgW10sIFtdLCBbI2luY2x1ZGUgPGVycm5vLmg+XSkKKyBnbF9GVU5DX1JFQUQKKy1pZiB0ZXN0ICRSRVBMQUNFX1JFQUQgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3JlYWRdKQorLWZpCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWRdKQorIGdsX0ZVTkNfUkVBRExJTksKKy1pZiB0ZXN0ICRIQVZFX1JFQURMSU5LID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1JFQURMSU5LID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtyZWFkbGlua10pCistICBnbF9QUkVSRVFfUkVBRExJTksKKy1maQorIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtyZWFkbGlua10pCisgZ2xfUkVMT0NBVEFCTEUoWyRnbF9zb3VyY2VfYmFzZV0pCistaWYgdGVzdCAkUkVMT0NBVEFCTEUgPSB5ZXM7IHRoZW4KKy0gIEFDX0xJQk9CSihbcHJvZ3JlbG9jXSkKKy1maQorIGdsX0ZVTkNfUkVBRExJTktfU0VQQVJBVEUKKyBnbF9DQU5PTklDQUxJWkVfTEdQTF9TRVBBUkFURQorIGdsX01BTExPQ0EKKy1nbF9SRUxPQ0FUQUJMRV9MSUJSQVJZCisrZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9TRVBBUkFURQorIGdsX0ZVTkNfU0VURU5WX1NFUEFSQVRFCistZ2xfUFJFUkVRX1NBRkVfUkVBRAorK2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEUKKytnbF9TQUZFX1JFQUQKKyBnbF9TSUdOQUxfSAorIGdsX1NJR05BTF9TSUdQSVBFCisgZG5sIERlZmluZSB0aGUgQyBtYWNybyBHTlVMSUJfU0lHUElQRSB0byAxLgorQEAgLTE4NiwxNyArMTU5LDkgQEAgZG5sIERlZmluZSB0aGUgc3Vic3RpdHV0ZWQgdmFyaWFibGUgR05VTAorIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyBHTlVMSUJfVU5JU1REX0hfU0lHUElQRT0xCisgZ2xfU0lHTkFMQkxPQ0tJTkcKKy1pZiB0ZXN0ICRIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HID0gMDsgdGhlbgorLSAgQUNfTElCT0JKKFtzaWdwcm9jbWFza10pCistICBnbF9QUkVSRVFfU0lHUFJPQ01BU0sKKy1maQorIGdsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SKFtzaWdwcm9jbWFza10pCisgZ3RfVFlQRV9TU0laRV9UCisgZ2xfRlVOQ19TVEFUCistaWYgdGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtzdGF0XSkKKy0gIGdsX1BSRVJFUV9TVEFUCistZmkKKyBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtzdGF0XSkKKyBBTV9TVERCT09MX0gKKyBnbF9TVERERUZfSAorQEAgLTIwNCwxNyArMTY5LDcgQEAgZ2xfU1RESU5UX0gKKyBnbF9TVERJT19ICisgZ2xfU1RETElCX0gKKyBnbF9GVU5DX1NUUkVSUk9SCistaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbc3RyZXJyb3JdKQorLWZpCistZ2xfTU9EVUxFX0lORElDQVRPUihbc3RyZXJyb3JdKQorIGdsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SKFtzdHJlcnJvcl0pCistQUNfUkVRVUlSRShbZ2xfSEVBREVSX0VSUk5PX0hdKQorLUFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCistaWYgdGVzdCAtbiAiJEVSUk5PX0giIHx8IHRlc3QgJFJFUExBQ0VfU1RSRVJST1JfMCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbc3RyZXJyb3Itb3ZlcnJpZGVdKQorLSAgZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syCistZmkKKyBnbF9IRUFERVJfU1RSSU5HX0gKKyBnbF9IRUFERVJfU1lTX1NUQVRfSAorIEFDX1BST0dfTUtESVJfUAorQEAgLTM2NCwxNCArMzE5LDEzIEBAIEFDX0RFRlVOKFtnbHRlc3RzX0xJQlNPVVJDRVNdLCBbCisgIyBUaGlzIG1hY3JvIHJlY29yZHMgdGhlIGxpc3Qgb2YgZmlsZXMgd2hpY2ggaGF2ZSBiZWVuIGluc3RhbGxlZCBieQorICMgZ251bGliLXRvb2wgYW5kIG1heSBiZSByZW1vdmVkIGJ5IGZ1dHVyZSBnbnVsaWItdG9vbCBpbnZvY2F0aW9ucy4KKyBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworKyAgYnVpbGQtYXV4L2FyZy1ub25udWxsLmgKKysgIGJ1aWxkLWF1eC9jKytkZWZzLmgKKyAgIGJ1aWxkLWF1eC9jb25maWcubGlicGF0aAorICAgYnVpbGQtYXV4L2NvbmZpZy5ycGF0aAorICAgYnVpbGQtYXV4L2luc3RhbGwtcmVsb2MKKyAgIGJ1aWxkLWF1eC9yZWxvYy1sZGZsYWdzCistICBidWlsZC1hdXgvc25pcHBldC9fTm9yZXR1cm4uaAorLSAgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorLSAgYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistICBidWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCisrICBidWlsZC1hdXgvd2Fybi1vbi11c2UuaAorICAgZG9jL3JlbG9jYXRhYmxlLnRleGkKKyAgIGxpYi9hbGxvY2EuaW4uaAorICAgbGliL2FsbG9jYXRvci5jCitAQCAtNDE5LDggKzM3Myw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBsaWIvc3RkaW8uaW4uaAorICAgbGliL3N0ZGxpYi5pbi5oCisgICBsaWIvc3RyZXEuaAorLSAgbGliL3N0cmVycm9yLW92ZXJyaWRlLmMKKy0gIGxpYi9zdHJlcnJvci1vdmVycmlkZS5oCisgICBsaWIvc3RyZXJyb3IuYworICAgbGliL3N0cmluZy5pbi5oCisgICBsaWIvc3lzX3N0YXQuaW4uaAorQEAgLTQ2Myw3ICs0MTUsNiBAQCBBQ19ERUZVTihbZ2xfRklMRV9MSVNUXSwgWworICAgbTQvaW50bWF4Lm00CisgICBtNC9pbnR0eXBlcy1wcmkubTQKKyAgIG00L2ludHR5cGVzX2gubTQKKy0gIG00L2xhcmdlZmlsZS5tNAorICAgbTQvbGNtZXNzYWdlLm00CisgICBtNC9saWItbGQubTQKKyAgIG00L2xpYi1saW5rLm00CitAQCAtNTAyLDcgKzQ1Myw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBtNC9zdGRsaWJfaC5tNAorICAgbTQvc3RyZXJyb3IubTQKKyAgIG00L3N0cmluZ19oLm00CistICBtNC9zeXNfc29ja2V0X2gubTQKKyAgIG00L3N5c19zdGF0X2gubTQKKyAgIG00L3RocmVhZGxpYi5tNAorICAgbTQvdGltZV9oLm00CitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvaW5jbHVkZV9uZXh0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvaW5jbHVkZV9uZXh0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2luY2x1ZGVfbmV4dC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvaW5jbHVkZV9uZXh0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNjUwNDg0NDcyIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIGluY2x1ZGVfbmV4dC5tNCBzZXJpYWwgMjAKKysjIGluY2x1ZGVfbmV4dC5tNCBzZXJpYWwgMTgKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTc1LDEzICsxNzUsMTEgQEAgQUNfREVGVU4oW2dsX05FWFRfSEVBREVSU19JTlRFUk5BTF0sCisgICAgIFtBQ19DSEVDS19IRUFERVJTX09OQ0UoWyQxXSkKKyAgICAgXSkKKyAKKy1kbmwgRklYTUU6IGdsX25leHRfaGVhZGVyIGFuZCBnbF9oZWFkZXJfZXhpc3RzIG11c3QgYmUgdXNlZCB1bnF1b3RlZAorLWRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgICBtNF9mb3JlYWNoX3coW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwKKyAgICAgW0FTX1ZBUl9QVVNIREVGKFtnbF9uZXh0X2hlYWRlcl0sCisgICAgICAgICAgICAgICAgICAgICBbZ2xfY3ZfbmV4dF9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuCistICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisrICAgICAgIEFTX1ZBUl9TRVQoW2dsX25leHRfaGVhZGVyXSwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKyAgICAgIGVsc2UKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soCisgICAgICAgICAgW2Fic29sdXRlIG5hbWUgb2YgPF1tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pWz5dLAorQEAgLTIxMCw3ICsyMDgsNyBAQCBkbmwgdW50aWwgd2UgY2FuIGFzc3VtZSBhdXRvY29uZiAyLjY0IG9yCisgICAgICAgICAgICAgICAgZG5sIGV2YWwgaXMgbmVjZXNzYXJ5IHRvIGV4cGFuZCBnbF9hYnNuYW1lX2NwcC4KKyAgICAgICAgICAgICAgICBkbmwgVWx0cml4IGFuZCBQeXJhbWlkIHNoIHJlZnVzZSB0byByZWRpcmVjdCBvdXRwdXQgb2YgZXZhbCwKKyAgICAgICAgICAgICAgICBkbmwgc28gdXNlIHN1YnNoZWxsLgorLSAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoZ2xfbmV4dF9oZWFkZXIsCisrICAgICAgICAgICAgICAgQVNfVkFSX1NFVChbZ2xfbmV4dF9oZWFkZXJdLAorICAgICAgICAgICAgICAgICAgWyciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiZBU19NRVNTQUdFX0xPR19GRCB8CisgICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKVsjeworICAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pW1wpIi4qI1wxIworQEAgLTIyMCwyMCArMjE4LDIwIEBAIGRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IKKyAgICAgICAgICAgICAgICAgICB9J2AnIiddKQorICAgICAgICAgICBtNF9pZihbJDJdLCBbY2hlY2tdLAorICAgICAgICAgICAgIFtlbHNlCistICAgICAgICAgICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKysgICAgICAgICAgICAgICBBU19WQVJfU0VUKFtnbF9uZXh0X2hlYWRlcl0sIFsnPCdnbF9IRUFERVJfTkFNRSc+J10pCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgXSkKKyAgICAgICAgICBdKQorICAgICAgZmkKKyAgICAgIEFDX1NVQlNUKAorICAgICAgICBBU19UUl9DUFAoW05FWFRfXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSkpLAorLSAgICAgICBbQVNfVkFSX0dFVChnbF9uZXh0X2hlYWRlcildKQorKyAgICAgICBbQVNfVkFSX0dFVChbZ2xfbmV4dF9oZWFkZXJdKV0pCisgICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuCisgICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0JworICAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdnbF9IRUFERVJfTkFNRSc+JworICAgICAgZWxzZQorICAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnCistICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPUFTX1ZBUl9HRVQoZ2xfbmV4dF9oZWFkZXIpCisrICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPUFTX1ZBUl9HRVQoW2dsX25leHRfaGVhZGVyXSkKKyAgICAgIGZpCisgICAgICBBQ19TVUJTVCgKKyAgICAgICAgQVNfVFJfQ1BQKFtORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSksCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbGFyZ2VmaWxlLm00IGxpYmljb252LTEuMTQvc3JjbTQvbGFyZ2VmaWxlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xhcmdlZmlsZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvbGFyZ2VmaWxlLm00CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMDQgKzAsMCBAQAorLSMgRW5hYmxlIGxhcmdlIGZpbGVzIG9uIHN5c3RlbXMgd2hlcmUgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQuCistCistIyBDb3B5cmlnaHQgMTk5Mi0xOTk2LCAxOTk4LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKy0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy0jIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBhdXRvY29uZiA8PSAyLjY4OworLSMgQUNfU1lTX0xBUkdFRklMRSBkb2VzIG5vdCBjb25maWd1cmUgZm9yIGxhcmdlIGlub2RlcyBvbiBNYWMgT1MgWCAxMC41LgorLW00X3ZlcnNpb25fcHJlcmVxKFsyLjY5XSwgW10gLFsKKy0KKy0jIF9BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVMKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdLAorLVtAJTpAaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorLSAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCistICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKy0gICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworLUAlOkBkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorLSAgaW50IG9mZl90X2lzX2xhcmdlW1soTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorLQkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorLQkJICAgICAgPyAxIDogLTFdXTtbXWRubAorLV0pCistCistCistIyBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShDLU1BQ1JPLCBWQUxVRSwKKy0jCQkJCUNBQ0hFLVZBUiwKKy0jCQkJCURFU0NSSVBUSU9OLAorLSMJCQkJUFJPTE9HVUUsIFtGVU5DVElPTi1CT0RZXSkKKy0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistbTRfZGVmaW5lKFtfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRV0sCistW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJDEgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sIFskM10sCistW3doaWxlIDo7IGRvCistICBtNF9pZnZhbChbJDZdLCBbQUNfTElOS19JRkVMU0VdLCBbQUNfQ09NUElMRV9JRkVMU0VdKSgKKy0gICAgW0FDX0xBTkdfUFJPR1JBTShbJDVdLCBbJDZdKV0sCistICAgIFskMz1ubzsgYnJlYWtdKQorLSAgbTRfaWZ2YWwoWyQ2XSwgW0FDX0xJTktfSUZFTFNFXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkoCistICAgIFtBQ19MQU5HX1BST0dSQU0oW0AlOkBkZWZpbmUgJDEgJDIKKy0kNV0sIFskNl0pXSwKKy0gICAgWyQzPSQyOyBicmVha10pCistICAkMz11bmtub3duCistICBicmVhaworLWRvbmVdKQorLWNhc2UgJCQzIGluICMoCistICBubyB8IHVua25vd24pIDs7CistICAqKSBBQ19ERUZJTkVfVU5RVU9URUQoWyQxXSwgWyQkM10sIFskNF0pOzsKKy1lc2FjCistcm0gLXJmIGNvbmZ0ZXN0KltdZG5sCistXSkjIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFCistCistCistIyBBQ19TWVNfTEFSR0VGSUxFCistIyAtLS0tLS0tLS0tLS0tLS0tCistIyBCeSBkZWZhdWx0LCBtYW55IGhvc3RzIHdvbid0IGxldCBwcm9ncmFtcyBhY2Nlc3MgbGFyZ2UgZmlsZXM7CistIyBvbmUgbXVzdCB1c2Ugc3BlY2lhbCBjb21waWxlciBvcHRpb25zIHRvIGdldCBsYXJnZS1maWxlIGFjY2VzcyB0byB3b3JrLgorLSMgRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzIGJyYWluIGRhbWFnZSBwbGVhc2Ugc2VlOgorLSMgaHR0cDovL3d3dy51bml4LXN5c3RlbXMub3JnL3ZlcnNpb24yL3doYXRzbmV3L2xmczIwbWFyLmh0bWwKKy1BQ19ERUZVTihbQUNfU1lTX0xBUkdFRklMRV0sCistW0FDX0FSR19FTkFCTEUobGFyZ2VmaWxlLAorLQkgICAgICAgWyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlc10pCistaWYgdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiICE9IG5vOyB0aGVuCistCistICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXNdLAorLSAgICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDLAorLSAgICBbYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz1ubworLSAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCistICAgICAgIGFjX3NhdmVfQ0M9JENDCistICAgICAgIHdoaWxlIDo7IGRvCistCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorLQkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorLQkgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSldKQorLQkgQUNfQ09NUElMRV9JRkVMU0UoW10sIFticmVha10pCistCSBDQz0iJENDIC1uMzIiCistCSBBQ19DT01QSUxFX0lGRUxTRShbXSwgW2FjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWtdKQorLQkgYnJlYWsKKy0gICAgICAgZG9uZQorLSAgICAgICBDQz0kYWNfc2F2ZV9DQworLSAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0CistICAgIGZpXSkKKy0gIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorLSAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworLSAgZmkKKy0KKy0gIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKF9GSUxFX09GRlNFVF9CSVRTLCA2NCwKKy0gICAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMsCistICAgIFtOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLl0sCistICAgIFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSkKKy0gIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorLSAgICBfQUNfU1lTX0xBUkdFRklMRV9NQUNST19WQUxVRShfTEFSR0VfRklMRVMsIDEsCistICAgICAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzLAorLSAgICAgIFtEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuXSwKKy0gICAgICBbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10pCistICBmaQorLQorLSAgQUhfVkVSQkFUSU0oW19EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERV0sCistWy8qIEVuYWJsZSBsYXJnZSBpbm9kZSBudW1iZXJzIG9uIE1hYyBPUyBYLiAgKi8KKy0jaWZuZGVmIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERQorLSMgZGVmaW5lIF9EQVJXSU5fVVNFXzY0X0JJVF9JTk9ERSAxCistI2VuZGlmXSkKKy1maQorLV0pIyBBQ19TWVNfTEFSR0VGSUxFCistCistXSkjIG00X3ZlcnNpb25fcHJlcmVxIDIuNjkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sc3RhdC5tNCBsaWJpY29udi0xLjE0L3NyY200L2xzdGF0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xzdGF0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9sc3RhdC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjcyMjQ4NDQ3NiAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgMjMKKysjIHNlcmlhbCAyMQorIAorICMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEsIDIwMDMtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtMTUsMjggKzE1LDI0IEBAIEFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUXSwKKyAgIGRubCAiI2RlZmluZSBsc3RhdCBzdGF0IiwgYW5kIGxzdGF0LmMgaXMgYSBuby1vcC4KKyAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2xzdGF0XSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXQgPSB5ZXM7IHRoZW4KKy0gICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10pCistICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW0FDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdKQorKyAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSBubzsgdGhlbgorKyAgICAgIGRubCBOb3RlOiBBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LIGRvZXMgQUNfTElCT0JKKFtsc3RhdF0pLgorICAgICAgIFJFUExBQ0VfTFNUQVQ9MQorICAgICBmaQorKyAgICAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xzdGF0LmMuCisrICAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIGVsc2UKKyAgICAgSEFWRV9MU1RBVD0wCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9sc3RhdC5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfTFNUQVRdLAorKyMgUmVkZWZpbmUgQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSywgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIKKysjIG1haW50YWluZWQgaW4gQXV0b2NvbmYuCisrQUNfREVGVU4oW0FDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdLAorIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0gIDoKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwKKy1bCistICBkbmwgV2UgZG9uJ3QgdXNlIEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksgYW55IG1vcmUsIGJlY2F1c2UgaXQKKy0gIGRubCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBpbiBBdXRvY29uZiBhbmQgYmVjYXVzZSBpdCBpbnZva2VzIEFDX0xJQk9CSi4KKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxzdGF0IGNvcnJlY3RseSBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoXSwKKy0gICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGlua10sCisrICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmtdLAorICAgICBbcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKKyAgICAgIGVjaG8gPmNvbmZ0ZXN0LmZpbGUKKyAgICAgIGlmIHRlc3QgIiRhc19sbl9zIiA9ICJsbiAtcyIgJiYgbG4gLXMgY29uZnRlc3QuZmlsZSBjb25mdGVzdC5zeW07IHRoZW4KK0BAIC00OSwyMiArNDUsMjUgQEAgQUNfREVGVU4oW2dsX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEXworICAgICAgICAgICAgICAgICAgaGF2ZSB0byBjb21waWxlIGFuZCB1c2UgdGhlIGxzdGF0IHdyYXBwZXIuICAqLworICAgICAgICAgICAgICAgcmV0dXJuIGxzdGF0ICgiY29uZnRlc3Quc3ltLyIsICZzYnVmKSA9PSAwOworICAgICAgICAgICAgIF1dKV0sCistICAgICAgICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXNdLAorLSAgICAgICAgIFtnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm9dLAorKyAgICAgICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzXSwKKysgICAgICAgICBbYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vXSwKKyAgICAgICAgICBbIyBXaGVuIGNyb3NzLWNvbXBpbGluZywgYmUgcGVzc2ltaXN0aWMgc28gd2Ugd2lsbCBlbmQgdXAgdXNpbmcgdGhlCisgICAgICAgICAgICMgcmVwbGFjZW1lbnQgdmVyc2lvbiBvZiBsc3RhdCB0aGF0IGNoZWNrcyBmb3IgdHJhaWxpbmcgc2xhc2hlcyBhbmQKKyAgICAgICAgICAgIyBjYWxscyBsc3RhdCBhIHNlY29uZCB0aW1lIHdoZW4gbmVjZXNzYXJ5LgorLSAgICAgICAgICBnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKysgICAgICAgICAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisgICAgICAgICAgXSkKKyAgICAgIGVsc2UKKyAgICAgICAgIyBJZiB0aGUgJ2xuIC1zJyBjb21tYW5kIGZhaWxlZCwgdGhlbiB3ZSBwcm9iYWJseSBkb24ndCBldmVuCisgICAgICAgICMgaGF2ZSBhbiBsc3RhdCBmdW5jdGlvbi4KKy0gICAgICAgZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisrICAgICAgIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlCisgICAgIF0pCistICB0ZXN0ICRnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsgPSB5ZXMgJiYKKysgIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgorICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSwgWzFdLAorICAgICAgIFtEZWZpbmUgdG8gMSBpZiBgbHN0YXQnIGRlcmVmZXJlbmNlcyBhIHN5bWxpbmsgc3BlY2lmaWVkCisgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaC5dKQorKyAgaWYgdGVzdCAieCRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsiID0geG5vOyB0aGVuCisrICAgIEFDX0xJQk9CSihbbHN0YXRdKQorKyAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L21lbW1vdmUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9tZW1tb3ZlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L21lbW1vdmUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L21lbW1vdmUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43Mzg0ODQ0NzcgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgbWVtbW92ZS5tNCBzZXJpYWwgNAorKyMgbWVtbW92ZS5tNCBzZXJpYWwgMworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC02LDcgKzYsMTAgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIAorIEFDX0RFRlVOKFtnbF9GVU5DX01FTU1PVkVdLAorIFsKKy0gIEFDX0NIRUNLX0ZVTkNTKFttZW1tb3ZlXSkKKysgIEFDX1JFUExBQ0VfRlVOQ1MoW21lbW1vdmVdKQorKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1tb3ZlID0gbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX01FTU1PVkUKKysgIGZpCisgXSkKKyAKKyAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbW1vdmUuYy4KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wYXRobWF4Lm00IGxpYmljb252LTEuMTQvc3JjbTQvcGF0aG1heC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wYXRobWF4Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9wYXRobWF4Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzU4NDg0NDc4IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHBhdGhtYXgubTQgc2VyaWFsIDkKKysjIHBhdGhtYXgubTQgc2VyaWFsIDgKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyBkbmwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorQEAgLTgsNSArOCw2IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfUEFUSE1BWF0sCisgWworICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3BhdGhtYXguaC4KKysgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3BhdGhjb25mXSkKKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3BhcmFtLmhdKQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcG8ubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9wby5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wby5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcG8ubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43NjY0ODQ0NzcgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcG8ubTQgc2VyaWFsIDE3YQorKyMgcG8ubTQgc2VyaWFsIDE3IChnZXR0ZXh0LTAuMTgpCisgZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTExOCw4ICsxMTgsNyBAQCBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCisgICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIgfHwgZWNobyAiY3JlYXRpbmcgJGFjX2Rpci9QT1RGSUxFUyIKKy0gICAgICAgICAgZ3RfdGFiPWBwcmludGYgJ1x0J2AKKy0gICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAke2d0X3RhYn1dKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIGNhdCAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKyAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IlBPVEZJTEVTLmluIgorICAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAorICAgICAgICAgICAjIG9uICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9uCitAQCAtMjU1LDcgKzI1NCw2IEBAIEVPVAorICAgZmkKKyAKKyAgICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KKy0gIHRhYj1gcHJpbnRmICdcdCdgCisgICBzZWRfeF92YXJpYWJsZT0nCisgIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5LgorIHgKK0BAIC0yNjMsOSArMjYxLDkgQEAgcy9QL1AvCisgeAorIHRhCisgIyBZZXMgaXQgd2FzIGVtcHR5LiBMb29rIGlmIHdlIGhhdmUgdGhlIGV4cGVjdGVkIHZhcmlhYmxlIGRlZmluaXRpb24uCistL15bJyIke3RhYn0iJyBdKlZBUklBQkxFWyciJHt0YWJ9IicgXSo9L3sKKysvXlsJIF0qVkFSSUFCTEVbCSBdKj0veworICAgIyBTZWVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uLgorLSAgcy9eWyciJHt0YWJ9IicgXSpWQVJJQUJMRVsnIiR7dGFifSInIF0qPS8vCisrICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKyAgIGJhCisgfQorIGJkCitAQCAtNDA3LDE1ICs0MDUsMTQgQEAgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgZmkKKyAKKyAgIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKKy0gIHRhYj1gcHJpbnRmICdcdCdgCisgICBpZiBncmVwIC1sICdAVENMQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgorICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisgICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKyAgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyAkZnJvYmJlZGxhbmcubXNnOiAkbGFuZy5wbworLSR7dGFifUBlY2hvICJcJChNU0dGTVQpIC1jIC0tdGNsIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIjsgXAorLSR7dGFifVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKyBFT0YKKyAgICAgZG9uZQorICAgZmkKK0BAIC00MjUsOCArNDIyLDggQEAgRU9GCisgICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCisgICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisgJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKy0ke3RhYn1AZWNobyAiXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciBcJChET01BSU4pIjsgXAorLSR7dGFifVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisrCUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyAtciAiXCQoRE9NQUlOKSIgfHwgeyBybSAtZiAiXCQoc3JjZGlyKS8kZnJvYmJlZGxhbmcubXNnIjsgZXhpdCAxOyB9CisgRU9GCisgICAgIGRvbmUKKyAgIGZpCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZGxpbmsubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkbGluay5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkbGluay5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVhZGxpbmsubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43OTA0ODQ0NzkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVhZGxpbmsubTQgc2VyaWFsIDExCisrIyByZWFkbGluay5tNCBzZXJpYWwgMTAKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTAsNiArMTAsOCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFETElOS10sCisgICBBQ19DSEVDS19GVU5DU19PTkNFKFtyZWFkbGlua10pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlYWRsaW5rID0gbm87IHRoZW4KKyAgICAgSEFWRV9SRUFETElOSz0wCisrICAgIEFDX0xJQk9CSihbcmVhZGxpbmtdKQorKyAgICBnbF9QUkVSRVFfUkVBRExJTksKKyAgIGVsc2UKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgcmVhZGxpbmsgc2lnbmF0dXJlIGlzIGNvcnJlY3RdLAorICAgICAgIFtnbF9jdl9kZWNsX3JlYWRsaW5rX3dvcmtzXSwKK0BAIC0zOCw4ICs0MCwxMCBAQCBBQ19ERUZVTihbZ2xfRlVOQ19SRUFETElOS10sCisgICAgICAgQUNfREVGSU5FKFtSRUFETElOS19UUkFJTElOR19TTEFTSF9CVUddLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiByZWFkbGluaworICAgICAgICAgZmFpbHMgdG8gcmVjb2duaXplIGEgdHJhaWxpbmcgc2xhc2guXSkKKyAgICAgICBSRVBMQUNFX1JFQURMSU5LPTEKKysgICAgICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKyAgICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZGVjbF9yZWFkbGlua193b3JrcyIgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9SRUFETElOSz0xCisrICAgICAgQUNfTElCT0JKKFtyZWFkbGlua10pCisgICAgIGZpCisgICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZC5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlYWQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVhZC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVhZC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc4MjQ4NDQ3OCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWFkLm00IHNlcmlhbCAyCisrIyByZWFkLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNCw2ICsxNCw3IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1JFQURdLAorICAgICBnbF9OT05CTE9DS0lOR19JTworICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX25vbmJsb2NraW5nICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfUkVBRD0xCisrICAgICAgQUNfTElCT0JKKFtyZWFkXSkKKyAgICAgZmkKKyAgIF0pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUtbGliLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43OTg0ODQ0ODAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVsb2NhdGFibGUtbGliLm00IHNlcmlhbCA2CisrIyByZWxvY2F0YWJsZS1saWIubTQgc2VyaWFsIDUKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMCw2ICsxMCw5IEBAIGRubCBTdXBwb3J0IGZvciByZWxvY2F0YWJsZSBsaWJyYXJpZXMuCisgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUlldLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0pCisrICBpZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorKyAgICBBQ19MSUJPQkooW3JlbG9jYXRhYmxlXSkKKysgIGZpCisgXSkKKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSwKKyBbCitAQCAtMjksNiArMzIsMTMgQEAgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0sCisgICBmaQorIF0pCisgCisrZG5sIExpa2UgZ2xfUkVMT0NBVEFCTEVfTElCUkFSWSwgZXhjZXB0IHByZXBhcmUgZm9yIHNlcGFyYXRlIGNvbXBpbGF0aW9uCisrZG5sIChubyBBQ19MSUJPQkopLgorK0FDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX1NFUEFSQVRFXSwKKytbCisrICBBQ19SRVFVSVJFKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldKQorK10pCisrCisgZG5sIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzIGZvciB3aGljaCBpdCBpcyBhIG5vcC4KKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTk9QXSwKKyBbCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvcmVsb2NhdGFibGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvcmVsb2NhdGFibGUubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MDI0ODQ0NzkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcmVsb2NhdGFibGUubTQgc2VyaWFsIDE3CisrIyByZWxvY2F0YWJsZS5tNCBzZXJpYWwgMTYKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LTIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNCw2ICsxNCw5IEBAIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV0sCisgWworICAgQUNfUkVRVUlSRShbZ2xfUkVMT0NBVEFCTEVfQk9EWV0pCisgICBnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZCisrICBpZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorKyAgICBBQ19MSUJPQkooW3Byb2dyZWxvY10pCisrICBmaQorICAgOiAke1JFTE9DQVRBQkxFX0NPTkZJR19IX0RJUj0nJCh0b3BfYnVpbGRkaXIpJ30KKyAgIFJFTE9DQVRBQkxFX1NSQ19ESVI9IlwkKHRvcF9zcmNkaXIpLyRnbF9zb3VyY2VfYmFzZSIKKyAgIFJFTE9DQVRBQkxFX0JVSUxEX0RJUj0iXCQodG9wX2J1aWxkZGlyKS8kZ2xfc291cmNlX2Jhc2UiCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2FmZS1yZWFkLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2FmZS1yZWFkLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NhZmUtcmVhZC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2FmZS1yZWFkLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODEwNDg0NDgwIC0wODAwCitAQCAtMSwxMCArMSwxNyBAQAorLSMgc2FmZS1yZWFkLm00IHNlcmlhbCA2CisrIyBzYWZlLXJlYWQubTQgc2VyaWFsIDUKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAwNiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyBkbmwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCisrQUNfREVGVU4oW2dsX1NBRkVfUkVBRF0sCisrWworKyAgQUNfTElCT0JKKFtzYWZlLXJlYWRdKQorKworKyAgZ2xfUFJFUkVRX1NBRkVfUkVBRAorK10pCisrCisgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zYWZlLXJlYWQuYy4KKyBBQ19ERUZVTihbZ2xfUFJFUkVRX1NBRkVfUkVBRF0sCisgWworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NldGVudi5tNCBsaWJpY29udi0xLjE0L3NyY200L3NldGVudi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zZXRlbnYubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NldGVudi5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgxODQ4NDQ4MSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXRlbnYubTQgc2VyaWFsIDI0CisrIyBzZXRlbnYubTQgc2VyaWFsIDIyCisgZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA0LCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMzgsNiArMzgsOSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19TRVRFTlZdLAorICAgICAgIFJFUExBQ0VfU0VURU5WPTEKKyAgICAgZmkKKyAgIGZpCisrICBpZiB0ZXN0ICRIQVZFX1NFVEVOViRSRVBMQUNFX1NFVEVOViAhPSAxMDsgdGhlbgorKyAgICBBQ19MSUJPQkooW3NldGVudl0pCisrICBmaQorIF0pCisgCisgIyBMaWtlIGdsX0ZVTkNfU0VURU5WLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24KK0BAIC02Miw5ICs2NSw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1VOU0VURU5WXSwKKyAgIGZpCisgICBBQ19DSEVDS19GVU5DUyhbdW5zZXRlbnZdKQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY191bnNldGVudiA9IG5vOyB0aGVuCistICAgIEhBVkVfVU5TRVRFTlY9MAorKyAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKKysgICAgZ2xfUFJFUkVRX1VOU0VURU5WCisgICBlbHNlCistICAgIEhBVkVfVU5TRVRFTlY9MQorICAgICBkbmwgU29tZSBCU0RzIHJldHVybiB2b2lkLCBmYWlsaW5nIHRvIGRvIGVycm9yIGNoZWNraW5nLgorICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2V0ZW52KCkgcmV0dXJuIHR5cGVdLCBbZ3RfY3ZfZnVuY191bnNldGVudl9yZXRdLAorICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKK0BAIC05MCw2ICs5Myw3IEBAIGludCB1bnNldGVudigpOworICAgICAgIEFDX0RFRklORShbVk9JRF9VTlNFVEVOVl0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHVuc2V0ZW52IHJldHVybnMgdm9pZAorICAgICAgICBpbnN0ZWFkIG9mIGludC5dKQorICAgICAgIFJFUExBQ0VfVU5TRVRFTlY9MQorKyAgICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorICAgICBmaQorIAorICAgICBkbmwgU29sYXJpcyAxMCB1bnNldGVudiBkb2VzIG5vdCByZW1vdmUgYWxsIGNvcGllcyBvZiBhIG5hbWUuCitAQCAtMTIyLDYgKzEyNiw3IEBAIGludCB1bnNldGVudigpOworICAgICAgIFtnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzPSJndWVzc2luZyBubyJdKV0pCisgICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBSRVBMQUNFX1VOU0VURU5WPTEKKysgICAgICBBQ19MSUJPQkooW3Vuc2V0ZW52XSkKKyAgICAgZmkKKyAgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxibG9ja2luZy5tNCBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbGJsb2NraW5nLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbGJsb2NraW5nLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxibG9ja2luZy5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgzNDQ4NDQ4MiAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzaWduYWxibG9ja2luZy5tNCBzZXJpYWwgMTIKKysjIHNpZ25hbGJsb2NraW5nLm00IHNlcmlhbCAxMAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEyLDE0ICsxMiwzMSBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgQUNfREVGVU4oW2dsX1NJR05BTEJMT0NLSU5HXSwKKyBbCisgICBBQ19SRVFVSVJFKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10pCistICBBQ19SRVFVSVJFKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSkKKy0gIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgPSB5ZXM7IHRoZW4KKysgIHNpZ25hbHNfbm90X3Bvc2l4PQorKyAgQUNfRUdSRVBfSEVBREVSKFtzaWdzZXRfdF0sIFtzaWduYWwuaF0sICwgW3NpZ25hbHNfbm90X3Bvc2l4PTFdKQorKyAgaWYgdGVzdCAteiAiJHNpZ25hbHNfbm90X3Bvc2l4IjsgdGhlbgorICAgICBBQ19DSEVDS19GVU5DKFtzaWdwcm9jbWFza10sIFtnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrPTFdKQorICAgZmkKKyAgIGlmIHRlc3QgLXogIiRnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrIjsgdGhlbgorICAgICBIQVZFX1BPU0lYX1NJR05BTEJMT0NLSU5HPTAKKysgICAgQUNfTElCT0JKKFtzaWdwcm9jbWFza10pCisrICAgIGdsX1BSRVJFUV9TSUdQUk9DTUFTSworICAgZmkKKyBdKQorIAorLSMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc2lncHJvY21hc2suYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NJR1BST0NNQVNLXSwgWzpdKQorKyMgUHJlcmVxdWlzaXRlcyBvZiB0aGUgcGFydCBvZiBsaWIvc2lnbmFsLmluLmggYW5kIG9mIGxpYi9zaWdwcm9jbWFzay5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfU0lHUFJPQ01BU0tdLAorK1sKKysgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKysgIEFDX0NIRUNLX1RZUEVTKFtzaWdzZXRfdF0sCisrICAgIFtnbF9jdl90eXBlX3NpZ3NldF90PXllc10sIFtnbF9jdl90eXBlX3NpZ3NldF90PW5vXSwKKysgICAgWyNpbmNsdWRlIDxzaWduYWwuaD4KKysvKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0pCisrICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ICE9IHllczsgdGhlbgorKyAgICBIQVZFX1NJR1NFVF9UPTAKKysgIGZpCisrICBkbmwgSEFWRV9TSUdTRVRfVCBpcyAxIGlmIHRoZSBzeXN0ZW0gbGFja3MgdGhlIHNpZ3Byb2NtYXNrIGZ1bmN0aW9uIGJ1dCBoYXMKKysgIGRubCB0aGUgc2lnc2V0X3QgdHlwZS4KKysgIEFDX1NVQlNUKFtIQVZFX1NJR1NFVF9UXSkKKytdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbF9oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsX2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbF9oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODI2NDg0NDgwIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNpZ25hbF9oLm00IHNlcmlhbCAxNgorKyMgc2lnbmFsX2gubTQgc2VyaWFsIDEyCisgZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTcsNyArNyw2IEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfU0lHTkFMX0hdLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdKQorICAgZ2xfTkVYVF9IRUFERVJTKFtzaWduYWwuaF0pCisgCisgIyBBSVggZGVjbGFyZXMgc2lnX2F0b21pY190IHRvIGFscmVhZHkgaW5jbHVkZSB2b2xhdGlsZSwgYW5kIEM4OSBjb21waWxlcnMKK0BAIC0yOCwyNSArMjcsMTAgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9IXSwKKyAgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorICAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzaWduYWwuaD4KKy0gICAgXV0sIFtwdGhyZWFkX3NpZ21hc2sgc2lnYWN0aW9uCistICAgIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnZmlsbHNldCBzaWdpc21lbWJlcgorKyAgICBdXSwgW3NpZ2FjdGlvbiBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2ZpbGxzZXQgc2lnaXNtZW1iZXIKKyAgICAgc2lncGVuZGluZyBzaWdwcm9jbWFza10pCisgXSkKKyAKKy1BQ19ERUZVTihbZ2xfQ0hFQ0tfVFlQRV9TSUdTRVRfVF0sCistWworLSAgQUNfQ0hFQ0tfVFlQRVMoW3NpZ3NldF90XSwKKy0gICAgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9eWVzXSwgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9bm9dLAorLSAgICBbWworLSAgICAgICNpbmNsdWRlIDxzaWduYWwuaD4KKy0gICAgICAvKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBidXQgaW4gPHN5cy90eXBlcy5oPi4gICovCistICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSAgICBdXSkKKy0gIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgIT0geWVzOyB0aGVuCistICAgIEhBVkVfU0lHU0VUX1Q9MAorLSAgZmkKKy1dKQorLQorIEFDX0RFRlVOKFtnbF9TSUdOQUxfTU9EVUxFX0lORElDQVRPUl0sCisgWworICAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KK0BAIC01OCwxMyArNDIsMTEgQEAgQUNfREVGVU4oW2dsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SXSwKKyAKKyBBQ19ERUZVTihbZ2xfU0lHTkFMX0hfREVGQVVMVFNdLAorIFsKKy0gIEdOVUxJQl9QVEhSRUFEX1NJR01BU0s9MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9QVEhSRUFEX1NJR01BU0tdKQorICAgR05VTElCX1NJR05BTF9IX1NJR1BJUEU9MDsgICBBQ19TVUJTVChbR05VTElCX1NJR05BTF9IX1NJR1BJUEVdKQorICAgR05VTElCX1NJR1BST0NNQVNLPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1NJR1BST0NNQVNLXSkKKyAgIEdOVUxJQl9TSUdBQ1RJT049MDsgICAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TSUdBQ1RJT05dKQorICAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKyAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MTsgQUNfU1VCU1QoW0hBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkddKQorLSAgSEFWRV9QVEhSRUFEX1NJR01BU0s9MTsgICAgICBBQ19TVUJTVChbSEFWRV9QVEhSRUFEX1NJR01BU0tdKQorICAgSEFWRV9TSUdTRVRfVD0xOyAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TSUdTRVRfVF0pCisgICBIQVZFX1NJR0lORk9fVD0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0lORk9fVF0pCisgICBIQVZFX1NJR0FDVElPTj0xOyAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0FDVElPTl0pCitAQCAtNzMsNSArNTUsNCBAQCBBQ19ERUZVTihbZ2xfU0lHTkFMX0hfREVGQVVMVFNdLAorICAgSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVD0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVF0pCisgICBIQVZFX1NJR0hBTkRMRVJfVD0xOyAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR0hBTkRMRVJfVF0pCistICBSRVBMQUNFX1BUSFJFQURfU0lHTUFTSz0wOyAgIEFDX1NVQlNUKFtSRVBMQUNFX1BUSFJFQURfU0lHTUFTS10pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdGF0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RhdC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdGF0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdGF0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuODU0NDg0NDgzIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA4CisrIyBzZXJpYWwgNworIAorICMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworQEAgLTU4LDExICs1OCw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1NUQVRdLAorICAgICAgIEFDX0RFRklORShbUkVQTEFDRV9GVU5DX1NUQVRfRklMRV0sIFsxXSwgW0RlZmluZSB0byAxIGlmIHN0YXQgbmVlZHMKKyAgICAgICAgIGhlbHAgd2hlbiBwYXNzZWQgYSBmaWxlIG5hbWUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoXSk7OworICAgZXNhYworLV0pCistCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdGF0LmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9TVEFUXSwKKy1bCistICBBQ19SRVFVSVJFKFtBQ19DX0lOTElORV0pCistICA6CisrICBpZiB0ZXN0ICRSRVBMQUNFX1NUQVQgPSAxOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc3RhdF0pCisrICAgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdGF0LmMuCisrICAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKysgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJlcnJvci5tNCBsaWJpY29udi0xLjE0L3NyY200L3N0cmVycm9yLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmVycm9yLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJlcnJvci5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjg5MDQ4NDQ4NCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzdHJlcnJvci5tNCBzZXJpYWwgMTYKKysjIHN0cmVycm9yLm00IHNlcmlhbCA5CisgZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTYsNzMgKzYsNjMgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIAorIEFDX0RFRlVOKFtnbF9GVU5DX1NUUkVSUk9SXSwKKyBbCisrICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SX1NFUEFSQVRFXSkKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc3RyZXJyb3JdKQorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1JFUExBQ0VfU1RSRVJST1JdLCBbJFJFUExBQ0VfU1RSRVJST1JdLAorKyAgICAgIFtEZWZpbmUgdGhpcyB0byAxIGlmIHN0cmVycm9yIGlzIGJyb2tlbi5dKQorKyAgZmkKKytdKQorKworKyMgTGlrZSBnbF9GVU5DX1NUUkVSUk9SLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24gKG5vIEFDX0xJQk9CSikuCisrQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEVdLAorK1sKKyAgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10pCisgICBBQ19SRVFVSVJFKFtnbF9IRUFERVJfRVJSTk9fSF0pCistICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SXzBdKQorLSAgbTRfaWZkZWYoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10sIFsKKy0gICAgQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSkKKy0gIF0pCistICBpZiB0ZXN0ICIkRVJSTk9fSDokUkVQTEFDRV9TVFJFUlJPUl8wIiA9IDowOyB0aGVuCisrICBpZiB0ZXN0IC16ICIkRVJSTk9fSCI7IHRoZW4KKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5nIHN0cmVycm9yIGZ1bmN0aW9uXSwKKyAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3JdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgICAgICAgICBdXSwKKy0gICAgICAgICAgIFtbaWYgKCEqc3RyZXJyb3IgKC0yKSkgcmV0dXJuIDE7XV0pXSwKKysgICAgICAgICAgIFtbcmV0dXJuICEqc3RyZXJyb3IgKC0yKTtdXSldLAorICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj15ZXNdLAorICAgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj1ub10sCistICAgICAgICBbZG5sIEJlIHBlc3NpbWlzdGljIG9uIGNyb3NzLWNvbXBpbGVzIGZvciBub3cuCistICAgICAgICAgZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPSJndWVzc2luZyBubyJdKQorKyAgICAgICAgW2RubCBBc3N1bWUgY3Jvc3NidWlsZCB3b3JrcyBpZiBpdCBjb21waWxlcy4KKysgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKysgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisrICAgICAgICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKysgICAgICAgICAgICAgIF1dLAorKyAgICAgICAgICAgICAgW1tyZXR1cm4gISpzdHJlcnJvciAoLTIpO11dKV0sCisrICAgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPXllc10sCisrICAgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPW5vXSkKKysgICAgICBdKQorICAgICBdKQorLSAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yIiAhPSB5ZXM7IHRoZW4KKysgICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yID0gbm87IHRoZW4KKyAgICAgICBkbmwgVGhlIHN5c3RlbSdzIHN0cmVycm9yKCkgZmFpbHMgdG8gcmV0dXJuIGEgc3RyaW5nIGZvciBvdXQtb2YtcmFuZ2UKKyAgICAgICBkbmwgaW50ZWdlcnMuIFJlcGxhY2UgaXQuCisgICAgICAgUkVQTEFDRV9TVFJFUlJPUj0xCisgICAgIGZpCistICAgIG00X2lmZGVmKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdLCBbCistICAgICAgZG5sIElmIHRoZSBzeXN0ZW0ncyBzdHJlcnJvcl9yIG9yIF9feHBnX3N0cmVycm9yX3IgY2xvYmJlcnMgc3RyZXJyb3IncworLSAgICAgIGRubCBidWZmZXIsIHdlIG11c3QgcmVwbGFjZSBzdHJlcnJvci4KKy0gICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl9yX3dvcmtzIiBpbgorLSAgICAgICAgKm5vKSBSRVBMQUNFX1NUUkVSUk9SPTEgOzsKKy0gICAgICBlc2FjCistICAgIF0pCisgICBlbHNlCisgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBjYW5ub3Qga25vdyBhYm91dCB0aGUgbmV3IGVycm5vIHZhbHVlcyB3ZSBhZGQKKy0gICAgZG5sIHRvIDxlcnJuby5oPiwgb3IgYW55IGZpeCBmb3Igc3RyZXJyb3IoMCkuIFJlcGxhY2UgaXQuCisrICAgIGRubCB0byA8ZXJybm8uaD4uIFJlcGxhY2UgaXQuCisgICAgIFJFUExBQ0VfU1RSRVJST1I9MQorICAgZmkKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RSRVJST1IgPSAxOyB0aGVuCisrICAgIGdsX1BSRVJFUV9TVFJFUlJPUgorKyAgZmkKKyBdKQorIAorLWRubCBEZXRlY3QgaWYgc3RyZXJyb3IoMCkgcGFzc2VzICh0aGF0IGlzLCBkb2VzIG5vdCBzZXQgZXJybm8sIGFuZCBkb2VzIG5vdAorLWRubCByZXR1cm4gYSBzdHJpbmcgdGhhdCBtYXRjaGVzIHN0cmVycm9yKC0xKSkuCistQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JfMF0sCistWworLSAgUkVQTEFDRV9TVFJFUlJPUl8wPTAKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHN0cmVycm9yKDApIHN1Y2NlZWRzXSwKKy0gICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzXSwKKy0gICBbQUNfUlVOX0lGRUxTRSgKKy0gICAgICBbQUNfTEFOR19QUk9HUkFNKAorLSAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgorLSAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+CistICAgICAgICAgXV0sCistICAgICAgICAgW1tpbnQgcmVzdWx0ID0gMDsKKy0gICAgICAgICAgIGNoYXIgKnN0cjsKKy0gICAgICAgICAgIGVycm5vID0gMDsKKy0gICAgICAgICAgIHN0ciA9IHN0cmVycm9yICgwKTsKKy0gICAgICAgICAgIGlmICghKnN0cikgcmVzdWx0IHw9IDE7CistICAgICAgICAgICBpZiAoZXJybm8pIHJlc3VsdCB8PSAyOworLSAgICAgICAgICAgaWYgKHN0cnN0ciAoc3RyLCAibmtub3duIikgfHwgc3Ryc3RyIChzdHIsICJuZGVmaW5lZCIpKQorLSAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKy0gICAgICAgICAgIHJldHVybiByZXN1bHQ7XV0pXSwKKy0gICAgICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPXllc10sCistICAgICAgW2dsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz1ub10sCistICAgICAgW2RubCBCZSBwZXNzaW1pc3RpYyBvbiBjcm9zcy1jb21waWxlcyBmb3Igbm93LgorLSAgICAgICBnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3M9Imd1ZXNzaW5nIG5vIl0pCistICBdKQorLSAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3JrcyIgIT0geWVzOyB0aGVuCistICAgIFJFUExBQ0VfU1RSRVJST1JfMD0xCistICAgIEFDX0RFRklORShbUkVQTEFDRV9TVFJFUlJPUl8wXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgc3RyZXJyb3IoMCkKKy0gICAgICBkb2VzIG5vdCByZXR1cm4gYSBtZXNzYWdlIGltcGx5aW5nIHN1Y2Nlc3MuXSkKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cmVycm9yLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9TVFJFUlJPUl0sIFsKKysgIEFDX0NIRUNLX0RFQ0xTKFtzdHJlcnJvcl0pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9zb2NrZXQuaF0pCisrICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorKyAgICBkbmwgV2UgY2Fubm90IHVzZSBBQ19DSEVDS19IRUFERVJTX09OQ0UgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UKKysgICAgZG5sIHRoZSBjaGVjayBmb3IgdGhvc2UgaGVhZGVycyB1bmNvbmRpdGlvbmFsOyB5ZXQgY3lnd2luIHJlcG9ydHMKKysgICAgZG5sIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCAoc2luY2Ugb24KKysgICAgZG5sIGN5Z3dpbiwgYWxsIHNvY2tldCBpbmZvcm1hdGlvbiBzaG91bGQgY29tZSBmcm9tIHN5cy9zb2NrZXQuaCkuCisrICAgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2syLmhdKQorICAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmluZ19oLm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RyaW5nX2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyaW5nX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N0cmluZ19oLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODk0NDg0NDg1IC0wODAwCitAQCAtNSw3ICs1LDcgQEAKKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBzZXJpYWwgMjEKKysjIHNlcmlhbCAyMAorIAorICMgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4KKyAKK0BAIC0yNyw5ICsyNyw5IEBAIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfQk9EWV0sCisgICBkbmwgZ3VhcmFudGVlZCBieSBDODkuCisgICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHN0cmluZy5oPgorICAgICBdXSwKKy0gICAgW2Zmc2wgZmZzbGwgbWVtbWVtIG1lbXBjcHkgbWVtcmNociByYXdtZW1jaHIgc3RwY3B5IHN0cG5jcHkgc3RyY2hybnVsCistICAgICBzdHJkdXAgc3RybmNhdCBzdHJuZHVwIHN0cm5sZW4gc3RycGJyayBzdHJzZXAgc3RyY2FzZXN0ciBzdHJ0b2tfcgorLSAgICAgc3RyZXJyb3JfciBzdHJzaWduYWwgc3RydmVyc2NtcF0pCisrICAgIFttZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBzdHBjcHkgc3RwbmNweSBzdHJjaHJudWwgc3RyZHVwCisrICAgICBzdHJuY2F0IHN0cm5kdXAgc3RybmxlbiBzdHJwYnJrIHN0cnNlcCBzdHJjYXNlc3RyIHN0cnRva19yIHN0cmVycm9yX3IKKysgICAgIHN0cnNpZ25hbCBzdHJ2ZXJzY21wXSkKKyBdKQorIAorIEFDX0RFRlVOKFtnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUl0sCitAQCAtNDMsOCArNDMsNiBAQCBBQ19ERUZVTihbZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1JdLAorIAorIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdLAorIFsKKy0gIEdOVUxJQl9GRlNMPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX0ZGU0xdKQorLSAgR05VTElCX0ZGU0xMPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkZTTExdKQorICAgR05VTElCX01FTUNIUj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNQ0hSXSkKKyAgIEdOVUxJQl9NRU1NRU09MDsgICAgICBBQ19TVUJTVChbR05VTElCX01FTU1FTV0pCisgICBHTlVMSUJfTUVNUENQWT0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1QQ1BZXSkKK0BAIC04Miw4ICs4MCw2IEBAIEFDX0RFRlVOKFtnbF9IRUFERVJfU1RSSU5HX0hfREVGQVVMVFNdLAorICAgR05VTElCX1NUUlZFUlNDTVA9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU1RSVkVSU0NNUF0pCisgICBIQVZFX01CU0xFTj0wOyAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUJTTEVOXSkKKyAgIGRubCBBc3N1bWUgcHJvcGVyIEdOVSBiZWhhdmlvciB1bmxlc3MgYW5vdGhlciBtb2R1bGUgc2F5cyBvdGhlcndpc2UuCistICBIQVZFX0ZGU0w9MTsgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9GRlNMXSkKKy0gIEhBVkVfRkZTTEw9MTsgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xMXSkKKyAgIEhBVkVfTUVNQ0hSPTE7ICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01FTUNIUl0pCisgICBIQVZFX0RFQ0xfTUVNTUVNPTE7ICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9ERUNMX01FTU1FTV0pCisgICBIQVZFX01FTVBDUFk9MTsgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9NRU1QQ1BZXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zeXNfc29ja2V0X2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zeXNfc29ja2V0X2gubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3lzX3NvY2tldF9oLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zeXNfc29ja2V0X2gubTQJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDE3NyArMCwwIEBACistIyBzeXNfc29ja2V0X2gubTQgc2VyaWFsIDIyCistZG5sIENvcHlyaWdodCAoQykgMjAwNS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCistCistZG5sIEZyb20gU2ltb24gSm9zZWZzc29uLgorLQorLUFDX0RFRlVOKFtnbF9IRUFERVJfU1lTX1NPQ0tFVF0sCistWworLSAgQUNfUkVRVUlSRShbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0KKy0gIGRubCBPbiBPU0YvMSwgdGhlIGZ1bmN0aW9ucyByZWN2KCksIHNlbmQoKSwgcmVjdmZyb20oKSwgc2VuZHRvKCkgaGF2ZQorLSAgZG5sIG9sZC1zdHlsZSBkZWNsYXJhdGlvbnMgKHdpdGggcmV0dXJuIHR5cGUgJ2ludCcgaW5zdGVhZCBvZiAnc3NpemVfdCcpCistICBkbmwgdW5sZXNzIF9QT1NJWF9QSUlfU09DS0VUIGlzIGRlZmluZWQuCistICBjYXNlICIkaG9zdF9vcyIgaW4KKy0gICAgb3NmKikKKy0gICAgICBBQ19ERUZJTkUoW19QT1NJWF9QSUlfU09DS0VUXSwgWzFdLAorLSAgICAgICAgW0RlZmluZSB0byAxIGluIG9yZGVyIHRvIGdldCB0aGUgUE9TSVggY29tcGF0aWJsZSBkZWNsYXJhdGlvbnMKKy0gICAgICAgICBvZiBzb2NrZXQgZnVuY3Rpb25zLl0pCistICAgICAgOzsKKy0gIGVzYWMKKy0KKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIDxzeXMvc29ja2V0Lmg+IGlzIHNlbGYtY29udGFpbmVkXSwKKy0gICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZF0sCistICAgIFsKKy0gICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1tdXSldLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZD15ZXNdLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZD1ub10pCistICAgIF0pCistICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQgPSB5ZXM7IHRoZW4KKy0gICAgZG5sIElmIHRoZSBzaHV0ZG93biBmdW5jdGlvbiBleGlzdHMsIDxzeXMvc29ja2V0Lmg+IHNob3VsZCBkZWZpbmUKKy0gICAgZG5sIFNIVVRfUkQsIFNIVVRfV1IsIFNIVVRfUkRXUi4KKy0gICAgQUNfQ0hFQ0tfRlVOQ1MoW3NodXRkb3duXSkKKy0gICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaHV0ZG93biA9IHllczsgdGhlbgorLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIDxzeXMvc29ja2V0Lmg+IGRlZmluZXMgdGhlIFNIVVRfKiBtYWNyb3NdLAorLSAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dF0sCistICAgICAgICBbCistICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLAorLSAgICAgICAgICAgICAgIFtbaW50IGFbXSA9IHsgU0hVVF9SRCwgU0hVVF9XUiwgU0hVVF9SRFdSIH07XV0pXSwKKy0gICAgICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0PXllc10sCistICAgICAgICAgICAgW2dsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dD1ub10pCistICAgICAgICBdKQorLSAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dCA9IG5vOyB0aGVuCistICAgICAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKy0gICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gICMgV2UgbmVlZCB0byBjaGVjayBmb3Igd3MydGNwaXAuaCBub3cuCistICBnbF9QUkVSRVFfU1lTX0hfU09DS0VUCistICBBQ19DSEVDS19UWVBFUyhbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsIHNhX2ZhbWlseV90XSwsLFsKKy0gIC8qIHN5cy90eXBlcy5oIGlzIG5vdCBuZWVkZWQgYWNjb3JkaW5nIHRvIFBPU0lYLCBidXQgdGhlCistICAgICBzeXMvc29ja2V0LmggaW4gaTM4Ni11bmtub3duLWZyZWVic2Q0LjEwIGFuZAorLSAgICAgcG93ZXJwYy1hcHBsZS1kYXJ3aW41LjUgcmVxdWlyZWQgaXQuICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistI2VuZGlmCistI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorLSNlbmRpZgorLV0pCistICBpZiB0ZXN0ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlID0gbm87IHRoZW4KKy0gICAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRT0wCistICBmaQorLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCA9IG5vOyB0aGVuCistICAgIEhBVkVfU0FfRkFNSUxZX1Q9MAorLSAgZmkKKy0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgIT0gbm87IHRoZW4KKy0gICAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5XSwKKy0gICAgICBbXSwKKy0gICAgICBbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFk9MF0sCistICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0gICAgICAgI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICistICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CistICAgICAgICNlbmRpZgorLSAgICAgICAjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICistICAgICAgICNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorLSAgICAgICAjZW5kaWYKKy0gICAgICBdKQorLSAgZmkKKy0gIGlmIHRlc3QgJEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgPSAwIHx8IHRlc3QgJEhBVkVfU0FfRkFNSUxZX1QgPSAwIFwKKy0gICAgIHx8IHRlc3QgJEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZID0gMDsgdGhlbgorLSAgICBTWVNfU09DS0VUX0g9J3N5cy9zb2NrZXQuaCcKKy0gIGZpCistICBnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzIKKy0KKy0gIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorLSAgZG5sIGNvcnJlc3BvbmRpbmcgZ251bGliIG1vZHVsZSBpcyBub3QgaW4gdXNlLgorLSAgZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWworLS8qIFNvbWUgc3lzdGVtcyByZXF1aXJlIHByZXJlcXVpc2l0ZSBoZWFkZXJzLiAgKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0gICAgXV0sIFtzb2NrZXQgY29ubmVjdCBhY2NlcHQgYmluZCBnZXRwZWVybmFtZSBnZXRzb2NrbmFtZSBnZXRzb2Nrb3B0CistICAgIGxpc3RlbiByZWN2IHNlbmQgcmVjdmZyb20gc2VuZHRvIHNldHNvY2tvcHQgc2h1dGRvd24gYWNjZXB0NF0pCistXSkKKy0KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NZU19IX1NPQ0tFVF0sCistWworLSAgZG5sIENoZWNrIHByZXJlcXVpc2l0ZXMgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IHJlcGxhY2VtZW50LgorLSAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfU09DS0VUX0hFQURFUlNdKQorLSAgZ2xfQ0hFQ0tfTkVYVF9IRUFERVJTKFtzeXMvc29ja2V0LmhdKQorLSAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCA9IHllczsgdGhlbgorLSAgICBIQVZFX1NZU19TT0NLRVRfSD0xCistICAgIEhBVkVfV1MyVENQSVBfSD0wCistICBlbHNlCistICAgIEhBVkVfU1lTX1NPQ0tFVF9IPTAKKy0gICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2ggPSB5ZXM7IHRoZW4KKy0gICAgICBIQVZFX1dTMlRDUElQX0g9MQorLSAgICBlbHNlCistICAgICAgSEFWRV9XUzJUQ1BJUF9IPTAKKy0gICAgZmkKKy0gIGZpCistICBBQ19TVUJTVChbSEFWRV9TWVNfU09DS0VUX0hdKQorLSAgQUNfU1VCU1QoW0hBVkVfV1MyVENQSVBfSF0pCistXSkKKy0KKy0jIENvbW1vbiBwcmVyZXF1aXNpdGVzIG9mIHRoZSA8c3lzL3NvY2tldC5oPiByZXBsYWNlbWVudCBhbmQgb2YgdGhlCistIyA8c3lzL3NlbGVjdC5oPiByZXBsYWNlbWVudC4KKy0jIFNldHMgYW5kIHN1YnN0aXR1dGVzIEhBVkVfV0lOU09DSzJfSC4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NZU19IX1dJTlNPQ0syXSwKKy1bCistICBtNF9pZmRlZihbZ2xfVU5JU1REX0hfREVGQVVMVFNdLCBbQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKV0pCistICBtNF9pZmRlZihbZ2xfU1lTX0lPQ1RMX0hfREVGQVVMVFNdLCBbQUNfUkVRVUlSRShbZ2xfU1lTX0lPQ1RMX0hfREVGQVVMVFNdKV0pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N5cy9zb2NrZXQuaF0pCistICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbgorLSAgICBkbmwgV2UgY2Fubm90IHVzZSBBQ19DSEVDS19IRUFERVJTX09OQ0UgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UKKy0gICAgZG5sIHRoZSBjaGVjayBmb3IgdGhvc2UgaGVhZGVycyB1bmNvbmRpdGlvbmFsOyB5ZXQgY3lnd2luIHJlcG9ydHMKKy0gICAgZG5sIHRoYXQgdGhlIGhlYWRlcnMgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCAoc2luY2Ugb24KKy0gICAgZG5sIGN5Z3dpbiwgYWxsIHNvY2tldCBpbmZvcm1hdGlvbiBzaG91bGQgY29tZSBmcm9tIHN5cy9zb2NrZXQuaCkuCistICAgIEFDX0NIRUNLX0hFQURFUlMoW3dpbnNvY2syLmhdKQorLSAgZmkKKy0gIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9XSU5TT0NLMl9IPTEKKy0gICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTEKKy0gICAgU1lTX0lPQ1RMX0hfSEFWRV9XSU5TT0NLMl9IPTEKKy0gIGVsc2UKKy0gICAgSEFWRV9XSU5TT0NLMl9IPTAKKy0gIGZpCistICBBQ19TVUJTVChbSEFWRV9XSU5TT0NLMl9IXSkKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9TWVNfU09DS0VUX01PRFVMRV9JTkRJQ0FUT1JdLAorLVsKKy0gIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCistICBBQ19SRVFVSVJFKFtnbF9TWVNfU09DS0VUX0hfREVGQVVMVFNdKQorLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKy0gIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKy0gIGdsX01PRFVMRV9JTkRJQ0FUT1JfRk9SX1RFU1RTKFskMV0pCistXSkKKy0KKy1BQ19ERUZVTihbZ2xfU1lTX1NPQ0tFVF9IX0RFRkFVTFRTXSwKKy1bCistICBHTlVMSUJfU09DS0VUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TT0NLRVRdKQorLSAgR05VTElCX0NPTk5FQ1Q9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQ09OTkVDVF0pCistICBHTlVMSUJfQUNDRVBUPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9BQ0NFUFRdKQorLSAgR05VTElCX0JJTkQ9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfQklORF0pCistICBHTlVMSUJfR0VUUEVFUk5BTUU9MDsgQUNfU1VCU1QoW0dOVUxJQl9HRVRQRUVSTkFNRV0pCistICBHTlVMSUJfR0VUU09DS05BTUU9MDsgQUNfU1VCU1QoW0dOVUxJQl9HRVRTT0NLTkFNRV0pCistICBHTlVMSUJfR0VUU09DS09QVD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9HRVRTT0NLT1BUXSkKKy0gIEdOVUxJQl9MSVNURU49MDsgICAgICBBQ19TVUJTVChbR05VTElCX0xJU1RFTl0pCistICBHTlVMSUJfUkVDVj0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUNWXSkKKy0gIEdOVUxJQl9TRU5EPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1NFTkRdKQorLSAgR05VTElCX1JFQ1ZGUk9NPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVDVkZST01dKQorLSAgR05VTElCX1NFTkRUTz0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0VORFRPXSkKKy0gIEdOVUxJQl9TRVRTT0NLT1BUPTA7ICBBQ19TVUJTVChbR05VTElCX1NFVFNPQ0tPUFRdKQorLSAgR05VTElCX1NIVVRET1dOPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfU0hVVERPV05dKQorLSAgR05VTElCX0FDQ0VQVDQ9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfQUNDRVBUNF0pCistICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFPTE7IEFDX1NVQlNUKFtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFXSkKKy0gIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZPTE7CistICAgICAgICAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZXSkKKy0gIEhBVkVfU0FfRkFNSUxZX1Q9MTsgICBBQ19TVUJTVChbSEFWRV9TQV9GQU1JTFlfVF0pCistICBIQVZFX0FDQ0VQVDQ9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfQUNDRVBUNF0pCistXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC93YXJuLW9uLXVzZS5tNCBsaWJpY29udi0xLjE0L3NyY200L3dhcm4tb24tdXNlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3dhcm4tb24tdXNlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC93YXJuLW9uLXVzZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjkzNDQ4NDQ4NyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyB3YXJuLW9uLXVzZS5tNCBzZXJpYWwgNAorKyMgd2Fybi1vbi11c2UubTQgc2VyaWFsIDIKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMjcsOCArMjcsNiBAQCBBQ19ERUZVTihbZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRV0sCisgICAgIFtBSF9URU1QTEFURShbSEFWRV9SQVdfREVDTF9dQVNfVFJfQ1BQKG00X2RlZm4oW2dsX2RlY2xdKSksCisgICAgICAgW0RlZmluZSB0byAxIGlmIF1tNF9kZWZuKFtnbF9kZWNsXSlbIGlzIGRlY2xhcmVkIGV2ZW4gYWZ0ZXIKKyAgICAgICAgdW5kZWZpbmluZyBtYWNyb3MuXSldKWRubAorLWRubCBGSVhNRTogZ2xfU3ltYm9sIG11c3QgYmUgdXNlZCB1bnF1b3RlZCB1bnRpbCB3ZSBjYW4gYXNzdW1lCistZG5sIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgICBmb3IgZ2xfZnVuYyBpbiBtNF9mbGF0dGVuKFskMl0pOyBkbworICAgICBBU19WQVJfUFVTSERFRihbZ2xfU3ltYm9sXSwgW2dsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmNdKWRubAorICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm9dLAorQEAgLTM3LDggKzM1LDggQEAgZG5sIGF1dG9jb25mIDIuNjQgb3IgbmV3ZXIuCisgW0AlOkB1bmRlZiAkZ2xfZnVuYworICAgKHZvaWQpICRnbF9mdW5jO10pXSwKKyAgICAgICAgIFtBU19WQVJfU0VUKGdsX1N5bWJvbCwgW3llc10pXSwgW0FTX1ZBUl9TRVQoZ2xfU3ltYm9sLCBbbm9dKV0pXSkKKy0gICAgQVNfVkFSX0lGKGdsX1N5bWJvbCwgW3llc10sCistICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoW0hBVkVfUkFXX0RFQ0xfJGdsX2Z1bmNdKSwgWzFdKQorKyAgICAgQVNfVkFSX0lGKGdsX1N5bWJvbCwgW3llc10sCisrICAgICAgIFtBQ19ERUZJTkVfVU5RVU9URUQoQVNfVFJfQ1BQKFtIQVZFX1JBV19ERUNMXyRnbF9mdW5jXSksIFsxXSkKKyAgICAgICAgZG5sIHNob3J0Y3V0IC0gaWYgdGhlIHJhdyBkZWNsYXJhdGlvbiBleGlzdHMsIHRoZW4gc2V0IGEgY2FjaGUKKyAgICAgICAgZG5sIHZhcmlhYmxlIHRvIGFsbG93IHNraXBwaW5nIGFueSBsYXRlciBBQ19DSEVDS19ERUNMIGVmZm9ydHMKKyAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzXSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDM0Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjE0L2F1dG9jb25mLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0l0IGFkZHMgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBuZWVkZWQKK2ZvciBhdXRvY29uZiAyLjY1IHRvIHJlY29uZmlndXJlIGxpYmljb252IGFuZCBkZWxldGUgdGhlIG00IG1hY3JvcworZGlyZWN0b3J5LiBJdHMgaW1wb3J0ZWQgZnJvbSBPRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJpY29udi0xLjEzLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMy4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMy4xL2NvbmZpZ3VyZS5hYworQEAgLTIzLDcgKzIzLDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQU1fSU5JVF9BVVRPTUFLRShbbGliaWNvbnZdLCBbMS4xMy4xXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmggbGliL2NvbmZpZy5oXSkKKyBBQ19QUk9HX01BS0VfU0VUCistCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIAorIEFDX1BST0dfQ0MKK0luZGV4OiBsaWJpY29udi0xLjEzLjEvbGliY2hhcnNldC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjEzLjEub3JpZy9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworKysrIGxpYmljb252LTEuMTMuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworQEAgLTE2LDE3ICsxNiwxNyBAQCBkbmwgYWxvbmcgd2l0aCB0aGUgR05VIENIQVJTRVQgTGlicmFyeTsKKyBkbmwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LAorIGRubCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgCistQUNfUFJFUkVRKFsyLjEzXSkKKytBQ19QUkVSRVEoMi42MSkKKytBQ19JTklUKFtsaWJjaGFyc2V0XSxbMS40XSApCisrQUNfQ09ORklHX1NSQ0RJUihbbGliL2xvY2FsY2hhcnNldC5jXSkKKyAKKy1QQUNLQUdFPWxpYmNoYXJzZXQKKy1WRVJTSU9OPTEuNAorLQorLUFDX0lOSVQoW2xpYi9sb2NhbGNoYXJzZXQuY10pCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQUNfQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorIEFDX1BST0dfTUFLRV9TRVQKKy1BQ19TVUJTVChbUEFDS0FHRV0pCistQUNfU1VCU1QoW1ZFUlNJT05dKQorK2RubCBBQ19TVUJTVChQQUNLQUdFKQorK2RubCBBQ19TVUJTVChWRVJTSU9OKQorKworK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKyAKKyBkbmwgICAgICAgICAgIGNoZWNrcyBmb3IgYmFzaWMgcHJvZ3JhbXMKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjExLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlNGI5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiQ2hhcmFjdGVyIGVuY29kaW5nIHN1cHBvcnQgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdOVSBsaWJpY29udiAtIGxpYmljb252IGlzIGZvciB5b3UgaWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBzdXBwb3J0IFwKK211bHRpcGxlIGNoYXJhY3RlciBlbmNvZGluZ3MsIGJ1dCB0aGF0IHN1cHBvcnQgbGFja3MgZnJvbSB5b3VyIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYiCitTRUNUSU9OID0gImxpYnMiCitOT1RFUyA9ICJOZWVkcyB0byBiZSBzdHJpcHBlZCBkb3duIHRvOiBhc2NpaSBpc284ODU5LTEgZXVjanAgaXNvLTIwMjJqcCBnYiB1dGY4IgorUFJPVklERVMgPSAidmlydHVhbC9saWJpY29udiIKKworTElDRU5TRSA9ICJMR1BMdjIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJjaGFyc2V0L0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9jb25mLnBhdGNoIFwKKwkgICBmaWxlOi8vc2hhcmVkX3ByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDJiOTdmNmVmNWRkMGJhNDQ2OWQ1MjBlZDczMmZlZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzhjMzQ3YTFhMGNiMTVmMjY0ODUxOWU5Nzk5MTUxZjRiNGE5MzRiNjFhZDllZTc0MjQ0NzhlZmUyYjgyNTdmIgorCitTID0gIiR7V09SS0RJUn0vbGliaWNvbnYtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmljb252IGlzIHByb3ZpZGVkIGZvciB1c2Ugd2l0aCB1Q2xpYmMgb25seSAtIGdsaWJjIGFscmVhZHkgcHJvdmlkZXMgaWNvbnYiKQorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgLS1lbmFibGUtcmVsb2NhdGFibGUiCisKK0xFQURfU09OQU1FID0gImxpYmljb252LnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9saWJ0b29sLm00ICR7U30vbTQvbHRvcHRpb25zLm00ICR7U30vbTQvbHRzdWdhci5tNCAke1N9L200L2x0dmVyc2lvbi5tNCAke1N9L200L2x0fm9ic29sZXRlLm00ICR7U30vbGliY2hhcnNldC9tNC9saWJ0b29sLm00ICR7U30vbGliY2hhcnNldC9tNC9sdG9wdGlvbnMubTQgJHtTfS9saWJjaGFyc2V0L200L2x0c3VnYXIubTQgJHtTfS9saWJjaGFyc2V0L200L2x0dmVyc2lvbi5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR+b2Jzb2xldGUubTQKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisgICAgICAgICMgZm9yY2libHkgcmVtb3ZlIFJQQVRIIGZyb20gbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XmhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Lip8aGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iInxnJyAqbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XnJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRIfHJ1bnBhdGhfdmFyPV9OT19SUEFUSF98ZycgKmxpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmljb252LnNvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjE0LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNmZlMDkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252XzEuMTQuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJDaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR05VIGxpYmljb252IC0gbGliaWNvbnYgaXMgZm9yIHlvdSBpZiB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHN1cHBvcnQgXAorbXVsdGlwbGUgY2hhcmFjdGVyIGVuY29kaW5ncywgYnV0IHRoYXQgc3VwcG9ydCBsYWNrcyBmcm9tIHlvdXIgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiIKK1NFQ1RJT04gPSAibGlicyIKK05PVEVTID0gIk5lZWRzIHRvIGJlIHN0cmlwcGVkIGRvd24gdG86IGFzY2lpIGlzbzg4NTktMSBldWNqcCBpc28tMjAyMmpwIGdiIHV0ZjgiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmljb252IgorUFIgPSAicjEiCitMSUNFTlNFID0gIkxHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJjaGFyc2V0L0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1yZWxvY2F0YWJsZS1tb2R1bGUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImUzNDUwOWIxNjIzY2VjNDQ5ZGZlYjczZDdjZTljNmM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyYjI0ZGVkMTdkNjg3MTkzYzMzNjZkMGViZTdjZGUxZTZiMThmMGRmOGM1NTQzOGFjOTViZTM5ZThhMzA2MTMiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpY29udi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIGQuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKSAhPSAibGludXgiOgorICAgICAgICByZXR1cm4KKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmljb252IGlzIHByb3ZpZGVkIGZvciB1c2Ugd2l0aCB1Q2xpYmMgb25seSAtIGdsaWJjIGFscmVhZHkgcHJvdmlkZXMgaWNvbnYiKQorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1zdGF0aWMgLS1lbmFibGUtcmVsb2NhdGFibGUiCisKK0xFQURfU09OQU1FID0gImxpYmljb252LnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9saWJ0b29sLm00ICR7U30vbTQvbHRvcHRpb25zLm00ICR7U30vbTQvbHRzdWdhci5tNCAke1N9L200L2x0dmVyc2lvbi5tNCAke1N9L200L2x0fm9ic29sZXRlLm00ICR7U30vbGliY2hhcnNldC9tNC9saWJ0b29sLm00ICR7U30vbGliY2hhcnNldC9tNC9sdG9wdGlvbnMubTQgJHtTfS9saWJjaGFyc2V0L200L2x0c3VnYXIubTQgJHtTfS9saWJjaGFyc2V0L200L2x0dmVyc2lvbi5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR+b2Jzb2xldGUubTQKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisgICAgICAgICMgZm9yY2libHkgcmVtb3ZlIFJQQVRIIGZyb20gbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XmhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Lip8aGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iInxnJyAqbGlidG9vbAorICAgICAgICBzZWQgLWkgJ3N8XnJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRIfHJ1bnBhdGhfdmFyPV9OT19SUEFUSF98ZycgKmxpYnRvb2wKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmljb252LnNvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2hhcnNldC5hbGlhcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmEva3NiYS1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ODZjNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTUyIEBACitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorCitBZGQgcGtnY29uZmlnIHN1cHBvcnQgdG8gbGlia3NiYS4KK1RoaXMgcGF0Y2ggaXMgcmVqZWN0ZWQgYnkgdXBzdHJlYW0gZm9yIHRoZSByZWFzb24gYmVsb3c6CitUaGV5IHRoaW5rIHBrZ2NvbmZpZyBhZGRzIG5vIHBvcnRhYmlsaXR5IGFuZCBtYWludGFpbmluZyB0aGVtIGlzIG5vdCB3b3J0aHdoaWxlLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJrc2JhLTEuMy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlia3NiYS0xLjMuMC5vcmlnL01ha2VmaWxlLmFtCTIwMTQtMDUtMTMgMjE6Mzk6MjIuMzkwMzg1NjQ2ICswMDAwCisrKysgbGlia3NiYS0xLjMuMC9NYWtlZmlsZS5hbQkyMDE0LTA1LTEzIDIxOjM5OjIyLjQ2MjM4NTY0NiArMDAwMAorQEAgLTIxLDYgKzIxLDkgQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtSSBnbC9tNAorIEFVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyIG5vLWRpc3QtZ3ppcAorIAorK3BrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGtzYmEucGMKKysKKyAjIChBIHN1aXRhYmxlIGdpdGxvZy10by1jaGFuZ2Vsb2cgc2NyaXB0IGNhbiBiZSBmb3VuZCBpbiBHbnVQRyBtYXN0ZXIuKQorIEdJVExPR19UT19DSEFOR0VMT0c9Z2l0bG9nLXRvLWNoYW5nZWxvZworIAorSW5kZXg6IGxpYmtzYmEtMS4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlia3NiYS0xLjMuMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTEzIDIxOjM5OjIyLjM5MDM4NTY0NiArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMjE6Mzk6MjIuNDYyMzg1NjQ2ICswMDAwCitAQCAtNDAwLDYgKzQwMCw3IEBACisgc3JjL01ha2VmaWxlCisgc3JjL2tzYmEtY29uZmlnCisgc3JjL3ZlcnNpb25pbmZvLnJjCisra3NiYS5wYworIHRlc3RzL01ha2VmaWxlCisgZG9jL01ha2VmaWxlCisgXSkKK0luZGV4OiBsaWJrc2JhLTEuMy4wL2tzYmEucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL2tzYmEucGMuaW4JMjAxNC0wNS0xMyAyMTozOToyMi40NjIzODU2NDYgKzAwMDAKK0BAIC0wLDAgKzEsMTcgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEtTQkFfQ09ORklHX0FQSV9WRVJTSU9OQAorK2hvc3Q9QEtTQkFfQ09ORklHX0hPU1RACisrCisrTmFtZToga3NiYQorK0Rlc2NyaXB0aW9uOiBMaWJrc2JhIHByb3ZpZGVzIGFuIGVhc3kgQVBJIHRvIGNyZWF0ZSBhbmQgcGFyc2UgWC41MDkgYW5kIENNUyByZWxhdGVkIG9iamVjdHMKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbGtzYmEKKytMaWJzLnByaXZhdGU6IC1Me2xpYmRpcn0gLWxncGctZXJyb3IKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorKworSW5kZXg6IGxpYmtzYmEtMS4zLjAvc3JjL2tzYmEubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJrc2JhLTEuMy4wLm9yaWcvc3JjL2tzYmEubTQJMjAxNC0wNS0xMyAyMTozOToyMi4zOTAzODU2NDYgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL3NyYy9rc2JhLm00CTIwMTQtMDUtMTMgMjE6NDk6MDMuNjUwMzgyNjk2ICswMDAwCitAQCAtMjIsMTggKzIyLDcgQEAKKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9LU0JBXSwKKyBbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSBBQ19BUkdfV0lUSChrc2JhLXByZWZpeCwKKy0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWtzYmEtcHJlZml4PVBGWF0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBLU0JBIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBrc2JhX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwga3NiYV9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JGtzYmFfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAga3NiYV9jb25maWdfYXJncz0iJGtzYmFfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGtzYmFfY29uZmlnX3ByZWZpeCIKKy0gICAgIGlmIHRlc3QgeCR7S1NCQV9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgS1NCQV9DT05GSUc9JGtzYmFfY29uZmlnX3ByZWZpeC9iaW4va3NiYS1jb25maWcKKy0gICAgIGZpCistICBmaQorIAorLSAgQUNfUEFUSF9QUk9HKEtTQkFfQ09ORklHLCBrc2JhLWNvbmZpZywgbm8pCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjEuMC4wLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2tzYmFfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTQzLDQ4ICszMiwxMyBAQAorICAgICAgbWluX2tzYmFfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEtTQkEgLSB2ZXJzaW9uID49ICRtaW5fa3NiYV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRLU0JBX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fa3NiYV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2tzYmFfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9rc2JhX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAga3NiYV9jb25maWdfdmVyc2lvbj1gJEtTQkFfQ09ORklHICRrc2JhX2NvbmZpZ19hcmdzIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGtzYmFfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorLSAgICBtaW5vcj1gZWNobyAka3NiYV9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIG1pY3JvPWBlY2hvICRrc2JhX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWVxICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEFDX01TR19SRVNVTFQoW3llcyAoJGtzYmFfY29uZmlnX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhLU0JBLCBba3NiYSA+PSAkbWluX2tzYmFfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorKworICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgRXZlbiBpZiB3ZSBoYXZlIGEgcmVjZW50IGxpYmtzYmEsIHdlIHNob3VsZCBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKyAgICAgIGlmIHRlc3QgIiRyZXFfa3NiYV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkS1NCQV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24ga3NiYWAKKyAgICAgICAgIGlmIHRlc3QgIiR0bXAiIC1ndCAwIDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtLU0JBIEFQSSB2ZXJzaW9uXSkKKyAgICAgICAgICAgIGlmIHRlc3QgIiRyZXFfa3NiYV9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCitAQCAtOTcsMTAgKzUxLDggQEAKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgS1NCQV9DRkxBR1M9YCRLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgS1NCQV9MSUJTPWAkS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS1saWJzYAorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorLSAgICBsaWJrc2JhX2NvbmZpZ19ob3N0PWAkTElCS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgbGlia3NiYV9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGtzYmFgCisgICAgIGlmIHRlc3QgeCIkbGlia3NiYV9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgaWYgdGVzdCB4IiRsaWJrc2JhX2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTE0LDggKzY2LDYgQEAKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorLSAgICBLU0JBX0NGTEFHUz0iIgorLSAgICBLU0JBX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChLU0JBX0NGTEFHUykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyMTE2NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRWFzeSBBUEkgdG8gY3JlYXRlIGFuZCBwYXJzZSBYLjUwOSBhbmQgQ01TIHJlbGF0ZWQgb2JqZWN0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvbGlia3NiYS8iCitMSUNFTlNFID0gIkdQTHYyKyB8IExHUEx2MysgfCBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDU0MWQ4M2Y3NWQwMzhjNGUwNjE3YjY3MmVkOGJkYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT0yZjMxYjI2NmQzNDQwZGQ3ZWU1MGY5MmNmNjdkOGU2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIgXAorICAgICAgICAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0va3NiYS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgdGV4aW5mbworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9rc2JhLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImE1ZGQzYzU3ZmNhMjU0OTM1ZjVjZjhkYjI2ZTM5MDY1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBjN2Y1ZmZlMzRkMDQxNGY2OTUxZDk4ODBhNDZmY2MyOTg1YzQ4N2Y3YzM2MzY5YjlmMTFhZDQxMTMxYzc3ODYiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlIGluIGFjbG9jYWwtY29weQorCXJtIC1mICR7U30vbTQvZ3BnLWVycm9yLm00Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGMuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzc0MjU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjLmluYwpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBjb21wbGV4IG51bWJlciBhcml0aG1ldGljIHdpdGggYXJiaXRyYXJ5IHByZWNpc2lvbiBhbmQgY29ycmVjdCByb3VuZGluZyIKK0RFU0NSSVBUSU9OID0gIk1wYyBpcyBhIEMgbGlicmFyeSBmb3IgdGhlIGFyaXRobWV0aWMgb2YgY29tcGxleCBudW1iZXJzIHdpdGggYXJiaXRyYXJpbHkgaGlnaCBwcmVjaXNpb24gYW5kIGNvcnJlY3Qgcm91bmRpbmcgb2YgdGhlIHJlc3VsdC4gSXQgaXMgYnVpbHQgdXBvbiBhbmQgZm9sbG93cyB0aGUgc2FtZSBwcmluY2lwbGVzIGFzIE1wZnIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm11bHRpcHJlY2lzaW9uLm9yZy8iCitMSUNFTlNFID0gIkxHUEx2MyIKK1NFQ1RJT04gPSAibGlicyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjXzEuMC4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTVhMTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGNfMS4wLjMuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBsaWJtcGMuaW5jCisKK0RFUEVORFMgPSAiZ21wIG1wZnIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvbXBjL2Rvd25sb2FkL21wYy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNmExZDVmOGRkZWEzYWJkMmNjM2U5OGY1ODM1MmQyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MTdkZWNjNmVhMDk4ODlmYjA4ZWRlMzMwOTE3YTAwYjE2ODA5YjhkYjg4YzI5YzMxYmZiYjQ5Y2JmODhlY2MzIgorCitTID0gIiR7V09SS0RJUn0vbXBjLSR7UFZ9IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wYy1maWxlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGMtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZThiODMzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGMtZmlsZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU29tZSBwYWNrYWdlcyBhcmUgYXNraW5nIG9ubHkgZm9yIGxpYm5sLTIuMCwgYnV0IGV4cGVjdHMgdG8gZ2V0IGFsc28KK2xpYm5sLWdlbmwsIGxpYm5sLW5mIGxpYm5sLXJvdXRlLCBlYXNpZXN0IHdheSB0byBmaXggdGhlbSBpcyBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CitJbmRleDogbGlibmwtMy4yLjE0L2xpYm5sLTMuMC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYm5sLTMuMi4xNC5vcmlnL2xpYm5sLTMuMC5wYy5pbgorKysrIGxpYm5sLTMuMi4xNC9saWJubC0zLjAucGMuaW4KK0BAIC02LDUgKzYsNSBAQCBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorIE5hbWU6IGxpYm5sCisgRGVzY3JpcHRpb246IENvbnZlbmllbmNlIGxpYnJhcnkgZm9yIG5ldGxpbmsgc29ja2V0cworIFZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACistTGliczogLUwke2xpYmRpcn0gLWxubC1ATUFKX1ZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxubC1ATUFKX1ZFUlNJT05AIC1sbmwtZ2VubC1ATUFKX1ZFUlNJT05AIC1sbmwtbmYtQE1BSl9WRVJTSU9OQCAtbG5sLXJvdXRlLUBNQUpfVkVSU0lPTkAKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9saWJubEBNQUpfVkVSU0lPTkAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGt0bG9jX3N5bnRheF9oLXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhYTBiZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworbGlibmwgaGFzIHByb2dyZXNzZWQgdG8gMC4zLjIgYW5kIHRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhbnkKKyJtYWtlIC1qIiBpc3N1ZXMgd2l0aCB0aGlzIGJ1aWxkIGFmdGVyIG15IGxpbWl0ZWQgdGVzdGluZyBvbiB0aGF0CituZXdlciB2ZXJzaW9uIHNvIHdlIGNhbiBhc3N1bWUgdGhpcyBpc3N1ZSBpcyBmaXhlZCB1cHN0cmVhbQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPG1hcnRpbi5qYW5zYUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJubC0zLjIuMjUvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibmwtMy4yLjI1Lm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgbGlibmwtMy4yLjI1L2xpYi9NYWtlZmlsZS5hbQorQEAgLTQ2LDkgKzQ2LDEyIEBAIENMRUFORklMRVMgPSBcCisgCisgIyBIYWNrIHRvIGF2b2lkIHVzaW5nIHlsd3JhcC4gSXQgZG9lcyBub3QgZnVuY3Rpb24gY29ycmVjdGx5IGluIGNvbWJpbmF0aW9uCisgIyB3aXRoIC0taGVhZGVyLWZpbGU9Cisrcm91dGUvcGt0bG9jLmxvOiByb3V0ZS9wa3Rsb2Nfc3ludGF4Lmggcm91dGUvcGt0bG9jX2dyYW1tYXIuaAorK3JvdXRlL3BrdGxvY19ncmFtbWFyLmg6IHJvdXRlL3BrdGxvY19ncmFtbWFyLmMKKyByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5jOiByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5sCisgCSQoQU1fVl9HRU4pICQoTUtESVJfUCkgcm91dGU7ICQoRkxFWCkgLS1oZWFkZXItZmlsZT1yb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oICQoTEZMQUdTKSAtbyAkQCAkXgorIAorK3JvdXRlL3BrdGxvY19zeW50YXguaDogcm91dGUvcGt0bG9jX3N5bnRheC5jCisgcm91dGUvcGt0bG9jX3N5bnRheC5jOiByb3V0ZS9wa3Rsb2Nfc3ludGF4LnkKKyAJJChBTV9WX0dFTikgJChNS0RJUl9QKSByb3V0ZTsgJChZQUNDKSAtZCAkKFlGTEFHUykgLW8gJEAgJF4KKyAKK0BAIC0xMDIsNyArMTA1LDkgQEAgQlVJTFRfU09VUkNFUyA9IFwKKyAJcm91dGUvY2xzL2VtYXRjaF9ncmFtbWFyLmMgXAorIAlyb3V0ZS9jbHMvZW1hdGNoX3N5bnRheC5jIFwKKyAJcm91dGUvcGt0bG9jX2dyYW1tYXIuYyBcCistCXJvdXRlL3BrdGxvY19zeW50YXguYworKyAgIHJvdXRlL3BrdGxvY19zeW50YXguYyBcCisrICAgcm91dGUvcGt0bG9jX3N5bnRheC5oIFwKKysgICByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oCisgCisgRVhUUkFfRElTVCA9IFwKKyAJcm91dGUvcGt0bG9jX2dyYW1tYXIubCBcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ODE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXBwbGljYXRpb25zIGRlYWxpbmcgd2l0aCBuZXRsaW5rIHNvY2tldHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZnJhZGVhZC5vcmcvfnRnci9saWJubC8iCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworUEUgPSAiMSIKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaW5mcmFkZWFkLm9yZy9+dGdyLyR7QlBOfS9maWxlcy8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYy1maWxlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwM2Y3NGQwY2Q1MDM3Y2FkYzhjZGZhMzEzYmJkMTk1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YmViNzU5MDY3NDk1N2I5MzFkZTZiN2Y4MWM1MzBiODVkYzdjMWFkOGZiZGEwMTUzOThiYzFlOGQxY2U4ZWM1IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYm5sLTMuc28uKiBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwuc28uKiBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9IgorUlJFUExBQ0VTXyR7UE59ID0gImxpYm5sMiIKK1JDT05GTElDVFNfJHtQTn0gPSAibGlibmwyIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovKi5zbyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlibmwvY2xpLyovKi5hIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY2xpICR7UE59LXJvdXRlICR7UE59LW5mICR7UE59LWdlbmwgJHtQTn0taWRpYWciCitGSUxFU18ke1BOfS1jbGkgICA9ICIke2xpYmRpcn0vbGlibmwtY2xpLTMuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwvY2xpLyovKi5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vbmwtKiIKK0ZJTEVTXyR7UE59LXJvdXRlID0gIiR7bGliZGlyfS9saWJubC1yb3V0ZS0zLnNvLioiCitGSUxFU18ke1BOfS1pZGlhZyA9ICIke2xpYmRpcn0vbGlibmwtaWRpYWctMy5zby4qIgorRklMRVNfJHtQTn0tbmYgICAgPSAiJHtsaWJkaXJ9L2xpYm5sLW5mLTMuc28uKiIKK0ZJTEVTXyR7UE59LWdlbmwgID0gIiR7bGliZGlyfS9saWJubC1nZW5sLTMuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibmwtZ2VubC5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7c2JpbmRpcn0vZ2VubC1jdHJsLWxpc3QiCitSUkVQTEFDRVNfJHtQTn0tZ2VubCA9ICJsaWJubC1nZW5sMiBsaWJubC1nZW5sLTMtMjAwIgorUkNPTkZMSUNUU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIGxpYm5sLWdlbmwtMy0yMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvMDAwMS1GaXgtZW5hYmxlLXZmcC1mbGFnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZjFjYjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0Zyb20gMTkyMTQ5OGJjYzA2NDA4ZThiMDUxYTNhOWU5Y2U0MTgyOTk4Zjc0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorRGF0ZTogRnJpLCA4IEFwciAyMDExIDEwOjA1OjQ5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTBdIEZpeCAtLWVuYWJsZS12ZnAgZmxhZworCitQYXRjaCBmcm9tIENocmlzdG9waGUgTHlvbiwgZml4ZXMgIzM2MDg0LgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICB8ICAgIDQgKystLQorIGxpYm9pbC9hcm0vTWFrZWZpbGUuYW0gfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOThjODFmYi4uNDA3ZDg4YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTg4LDggKzE4OCw4IEBAIGZpCisgQUNfQVJHX0VOQUJMRSh2ZnAsCisgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmZwXSxbY29tcGlsZSB3aXRoIFZlY3RvciBGbG9hdGluZy1wb2ludCB1bml0IHN1cHBvcnRdKSwKKyAgIGVuYWJsZV92ZnA9JGVuYWJsZXZhbCxlbmFibGVfdmZwPXllcykKKy1pZiB0ZXN0ICJ4JGVuYWJsZS12ZnAiID0geHllcyAtYSB4JEhBVkVfR0NDX0FTTSA9IHh5ZXMgLWEgeCRIQVZFX0FSTSA9IHh5ZXM7IHRoZW4KKy0gIEFTX0NPTVBJTEVSX0ZMQUcoWyItV2EsLW1mcHU9dmZwIl0sCisraWYgdGVzdCAieCRlbmFibGVfdmZwIiA9IHh5ZXMgLWEgeCRIQVZFX0dDQ19BU00gPSB4eWVzIC1hIHgkSEFWRV9BUk0gPSB4eWVzOyB0aGVuCisrICBBU19DT01QSUxFUl9GTEFHKFsiLW1mcHU9dmZwIl0sCisgICAgIFtWRlBfQ0ZMQUdTPSIkVkZQX0NGTEFHUyAtbWZwdT12ZnAiXSwKKyAgICAgdHJ1ZSkKKyAgICNBU19DT01QSUxFUl9GTEFHKFsiLVdhLC1tZmxvYXQtYWJpPXNvZnRmcCJdLAorZGlmZiAtLWdpdCBhL2xpYm9pbC9hcm0vTWFrZWZpbGUuYW0gYi9saWJvaWwvYXJtL01ha2VmaWxlLmFtCitpbmRleCBlYWQwOGVkLi5jZDhkOWZhIDEwMDY0NAorLS0tIGEvbGlib2lsL2FybS9NYWtlZmlsZS5hbQorKysrIGIvbGlib2lsL2FybS9NYWtlZmlsZS5hbQorQEAgLTYsNCArNiw1IEBAIGxpYmFybV9sYV9TT1VSQ0VTID0gXAorIAltYXRoX3ZmcF9hc20uUworIAorIGxpYmFybV9sYV9DRkxBR1MgPSAkKExJQk9JTF9DRkxBR1MpICQoVkZQX0NGTEFHUykKKytsaWJhcm1fbGFfQ0NBU0ZMQUdTID0gJChMSUJPSUxfQ0ZMQUdTKSAkKFZGUF9DRkxBR1MpCisgCistLSAKKzEuNy42CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTNjMWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2ZpeC11bmFsaWduZWQtd2hpdGVsaXN0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTM1OAorCitjb25maWd1cmU6IGZpeCB3aGl0ZWxpc3Rpbmcgb2YgeDg2XzY0IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzCisKK0ZpeCB0eXBvIGluIHdoaXRlbGlzdCBzbyBjcm9zcy1jb21waWxlIHdvcmtzIGZvciB4ODZfNjQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tIGxpYm9pbC0wLjMuMTcvbTQvYXMtdW5hbGlnbmVkLWFjY2Vzcy5tNC5vcmlnCTIwMDktMDItMjYgMTQ6NDA6MDguMDAwMDAwMDAwIC0wNTAwCisrKysgbGlib2lsLTAuMy4xNy9tNC9hcy11bmFsaWduZWQtYWNjZXNzLm00CTIwMTAtMTEtMDMgMTI6MTk6NTUuMDAwMDAwMDAwIC0wNDAwCitAQCAtOSw3ICs5LDcgQEAKKyAgICAgICAgIF9BU19FQ0hPX04oWyhibGFja2xpc3RlZCkgXSkKKyAgICAgICAgIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9bm8KKyAJOzsKKy0gICAgICBpPzg2Knx4ODZfNjR8YW1kNjR8cG93ZXJwYyp8bTY4ayp8Y3JpcyopCisrICAgICAgaT84Nip8eDg2XzY0KnxhbWQ2NCp8cG93ZXJwYyp8bTY4ayp8Y3JpcyopCisgICAgICAgICBfQVNfRUNIT19OKFsod2hpdGVsaXN0ZWQpIF0pCisgICAgICAgICBhc19jdl91bmFsaWduZWRfYWNjZXNzPXllcworIAk7OwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2xpYm9pbF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMzODBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwyMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitNYWtlIHRoZSBhc3NlbWJseSBzeW50YXggY29tcGF0aWJsZSB3aXRoIHgzMiBnY2MuIE90aGV3aXNlIHgzMiBnY2MgdGhyb3dzIGVycm9ycy4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMTIvMDEKKworCitJbmRleDogbGlib2lsLTAuMy4xNy9saWJvaWwvYW1kNjQvd2F2ZWxldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlib2lsLTAuMy4xNy5vcmlnL2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKKysrKyBsaWJvaWwtMC4zLjE3L2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKK0BAIC0yMSwxNCArMjEsMTQgQEAgZGVpbnRlcmxlYXZlMl9hc20gKGludDE2X3QgKmQxLCBpbnQxNl90IAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgc3ViICQyLCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdncgKCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3Z3IDIoJTEsJSVyY3gsNCksICUlYXhcbiIKKy0gICAgICAiICBtb3Z3ICUlYXgsICglMiwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgNCglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgMiglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgNiglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgMiglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgKCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgMiglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsICglcTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3Z3IDQoJXExLCUlcmN4LDQpLCAlJWF4XG4iCisrICAgICAgIiAgbW92dyAlJWF4LCAyKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgNiglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsIDIoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgc3ViICQyLCAlJXJjeFxuIgorICAgICAgICIgIGpnZSAxYlxuIgorICAgICAgIDogIityIiAoZDEpLCAiK3IiIChzXzJ4biksICIrciIgKGQyKSwgIitjIiAobikKK0BAIC01MywyMCArNTMsMjAgQEAgZGVpbnRlcmxlYXZlMl9tbXggKGludDE2X3QgKmQxLCBpbnQxNl90IAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBwc2xsZCAkMTYsICUlbW0wXG4iCisgICAgICAgIiAgcHNsbGQgJDE2LCAlJW1tMVxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTBcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0xXG4iCisgICAgICAgIiAgcGFja3NzZHcgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgbW92cSA4KCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0wXG4iCisgICAgICAgIiAgcHNyYWQgJDE2LCAlJW1tMVxuIgorICAgICAgICIgIHBhY2tzc2R3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtOTMsMTAgKzkzLDEwIEBAIGRlaW50ZXJsZWF2ZTJfbW14XzIgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBwc2h1ZncgJDB4ZDgsICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZkICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBwc2h1ZncgJDB4OGQsICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZkICUlbW0wLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBwc2h1ZncgJDB4ZDgsICglcTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92ZCAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBzaHVmdyAkMHg4ZCwgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZkICUlbW0wLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQyLCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTEyMywxNiArMTIzLDE2IEBAIGRlaW50ZXJsZWF2ZTJfbW14XzMgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMCwgJSVtbTFcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTAsICUlbW0yXG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTBcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTIsICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0yLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTE1OSwyNiArMTU5LDI2IEBAIGRlaW50ZXJsZWF2ZTJfbW14XzQgKGludDE2X3QgKmQxLCBpbnQxNl8KKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0xXG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgIG1vdnEgMTYoJTEsJSVyY3gsNCksICUlbW01XG4iCisrICAgICAgIiAgbW92cSA4KCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICAgbW92cSAxNiglcTEsJSVyY3gsNCksICUlbW01XG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0wLCAlJW1tMVxuIgorICAgICAgICIgICBtb3ZxICUlbW01LCAlJW1tNlxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMCwgJSVtbTJcbiIKKy0gICAgICAiICAgbW92cSAyNCglMSwlJXJjeCw0KSwgJSVtbTRcbiIKKysgICAgICAiICAgbW92cSAyNCglcTEsJSVyY3gsNCksICUlbW00XG4iCisgICAgICAgIiAgbW92cSAlJW1tMSwgJSVtbTBcbiIKKyAgICAgICAiICAgcHVucGNrbHdkICUlbW00LCAlJW1tNVxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMiwgJSVtbTBcbiIKKyAgICAgICAiICAgcHVucGNraHdkICUlbW00LCAlJW1tNlxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICAgbW92cSAlJW1tNSwgJSVtbTRcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgIHB1bnBja2x3ZCAlJW1tNiwgJSVtbTRcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgIHB1bnBja2h3ZCAlJW1tNiwgJSVtbTVcbiIKKy0gICAgICAiICAgbW92cSAlJW1tNCwgOCglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgICBtb3ZxICUlbW01LCA4KCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgIG1vdnEgJSVtbTQsIDgoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgIG1vdnEgJSVtbTUsIDgoJXEyLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ4LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTI1MiwxMyArMjUyLDEzIEBAIGludGVybGVhdmUyX21teCAoaW50MTZfdCAqZF8yeG4sIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCwyKSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorICAgICAgICIgIG1vdnEgJSVtbTAsICUlbW0yXG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0xLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxICUlbW0yLCAoJTAsJSVyY3gsNClcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCA4KCUwLCUlcmN4LDQpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMiwgKCVxMCwlJXJjeCw0KVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsIDgoJXEwLCUlcmN4LDQpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlMywgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTI4NSwxMiArMjg1LDEyIEBAIGxpZnRfYWRkX3NoaWZ0MV9tbXggKGludDE2X3QgKmQsIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXEzLCUlcmN4LDIpLCAlJW1tMlxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQxLCAlJW1tMVxuIgorLSAgICAgICIgIHBhZGR3ICglMSwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICUlbW0xLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBwYWRkdyAoJXExLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMzE3LDEzICszMTcsMTMgQEAgbGlmdF9zdWJfc2hpZnQxX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDIpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDIpLCAlJW1tMFxuIgorICAgICAgICIgIHBhZGR3ICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmF3ICQxLCAlJW1tMVxuIgorICAgICAgICIgIHBzdWJ3ICUlbW0xLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICU0LCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMzUwLDEyICszNTAsMTIgQEAgbGlmdF9hZGRfc2hpZnQyX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDIsICUlbW0xXG4iCistICAgICAgIiAgcGFkZHcgKCUxLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBhZGR3ICglcTEsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAlJW1tMSwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0zODIsMTMgKzM4MiwxMyBAQCBsaWZ0X3N1Yl9zaGlmdDJfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDIsICUlbW0xXG4iCisgICAgICAgIiAgcHN1YncgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbm8tdGVzdHMucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L25vLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MmQ0NDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L25vLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCistLS0gbGlib2lsLTAuMy45L2xpYm9pbC9saWJvaWxmdW5jdGlvbi5jLm9sZAkyMDA2LTA5LTE4IDEzOjAzOjIwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm9pbC0wLjMuOS9saWJvaWwvbGlib2lsZnVuY3Rpb24uYwkyMDA2LTA5LTE4IDEzOjA0OjEwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0NSw3ICszNDUsOSBAQAorICAgICByZXR1cm47CisgICB9CisgCistICB0ZXN0ID0gb2lsX3Rlc3RfbmV3IChrbGFzcyk7CisrICBrbGFzcy0+Y2hvc2VuX2ltcGwgPSBrbGFzcy0+cmVmZXJlbmNlX2ltcGw7CisrICBrbGFzcy0+ZnVuYyA9IGtsYXNzLT5yZWZlcmVuY2VfaW1wbC0+ZnVuYzsKKysvKiAgdGVzdCA9IG9pbF90ZXN0X25ldyAoa2xhc3MpOworICAgaWYgKHRlc3QgPT0gTlVMTCkgeworICAgICBPSUxfRVJST1IgKCJmYWlsZWQgdG8gdGVzdCBmdW5jdGlvbiBjbGFzcyAlcyIsIGtsYXNzLT5uYW1lKTsKKyAgICAgcmV0dXJuOworQEAgLTM4NSw3ICszODcsNyBAQAorICAga2xhc3MtPmNob3Nlbl9pbXBsID0gbWluX2ltcGw7CisgICBrbGFzcy0+ZnVuYyA9IG1pbl9pbXBsLT5mdW5jOworIAorLSAgb2lsX3Rlc3RfZnJlZSAodGVzdCk7CisrICBvaWxfdGVzdF9mcmVlICh0ZXN0KTsqLworIH0KKyAKKyBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsXzAuMy4xNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbF8wLjMuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiNzc4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbF8wLjMuMTcuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IG9mIHNpbXBsZSBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciB2YXJpb3VzIENQVXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGlib2lsLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFkODA3ODBkOWM1MjA1ZDYzNDgxYTAxODRlMTk5YTE1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm9pbC9saWJvaWwuaDtlbmRsaW5lPTI4O21kNT05NWM3OTRhNjZiODg4MDBkOTQ5ZmVkMTdlNDM3ZDlmYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvaWwvbGlib2lsY3B1LmM7ZW5kbGluZT0yODttZDU9ODlkYTY5YTYxZDg4ZWVkY2JhMDY2ZjQyMzUzZmI3NWEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXhhbXBsZXMvZXhhbXBsZTEuYztlbmRsaW5lPTI5O21kNT05ZDRkYWQ5ZmNiYmRmMDQ0MWVlMDYzZjhhZjUxNzBjOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUvdHJhbnMuYztlbmRsaW5lPTI5O21kNT0zODBlY2Q0MzEyMWZlM2RjYzBkOGQ3ZTU5ODRmMjgzZCIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJvaWwuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtZW5hYmxlLXZmcC1mbGFnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYm9pbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDdkYzczNGY4MmZhZWIyOTY0ZDk3NzcxY2ZkMmU3MDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTA1ZjAyMDc5YjBiNTAwMzRjNzU5ZGIzNGI0NzNlY2I1NzA0ZmZhMjBhNTQ4NmI2MGE4Yjc2OTgxMjhiZmM2OSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhkODA3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUKQEAgLTAsMCArMSwxODMgQEAKK1RFU1RTID0gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBSdW5UZXN0IFJ1bkdyZXBUZXN0CitzdWJkaXIgPSAuCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX190dHlfY29sb3JzX2R1bW15ID0gXAorICBtZ249IHJlZD0gZ3JuPSBsZ249IGJsdT0gYnJnPSBzdGQ9OyBcCisgIGFtX19jb2xvcl90ZXN0cz1ubworYW1fX3R0eV9jb2xvcnMgPSB7IFwKKyAgJChhbV9fdHR5X2NvbG9yc19kdW1teSk7IFwKKyAgaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhubzsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPW5vOyBcCisgIGVsaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhhbHdheXM7IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKKyAgZWxpZiB0ZXN0ICJYJCRURVJNIiAhPSBYZHVtYiAmJiB7IHRlc3QgLXQgMTsgfSAyPi9kZXYvbnVsbDsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICBmaTsgXAorICBpZiB0ZXN0ICQkYW1fX2NvbG9yX3Rlc3RzID0geWVzOyB0aGVuIFwKKyAgICByZWQ9JxtbMDszMW0nOyBcCisgICAgZ3JuPScbWzA7MzJtJzsgXAorICAgIGxnbj0nG1sxOzMybSc7IFwKKyAgICBibHU9JxtbMTszNG0nOyBcCisgICAgbWduPScbWzA7MzVtJzsgXAorICAgIGJyZz0nG1sxbSc7IFwKKyAgICBzdGQ9JxtbbSc7IFwKKyAgZmk7IFwKK30KK2FtX19yc3RfdGl0bGUgPSB7IHNlZCAncy8uKi8gICAmICAgLztoO3MvLi89L2c7cDt4O3MvICokJC8vO3A7ZycgJiYgZWNobzsgfQorYW1fX3NoX2Vfc2V0dXAgPSBjYXNlICQkLSBpbiAqZSopIHNldCArZTs7IGVzYWMKK2FtX19jb21tb25fZHJpdmVyX2ZsYWdzID0gXAorICAtLWNvbG9yLXRlc3RzICIkJGFtX19jb2xvcl90ZXN0cyIgXAorICAtLWVuYWJsZS1oYXJkLWVycm9ycyAiJCRhbV9fZW5hYmxlX2hhcmRfZXJyb3JzIiBcCisgIC0tZXhwZWN0LWZhaWx1cmUgIiQkYW1fX2V4cGVjdF9mYWlsdXJlIgorYW1fX2NoZWNrX3ByZSA9IFwKKyQoYW1fX3NoX2Vfc2V0dXApOyBcCiskKGFtX192cGF0aF9hZGpfc2V0dXApICQoYW1fX3ZwYXRoX2FkaikgXAorJChhbV9fdHR5X2NvbG9ycyk7IFwKK3NyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKK2Nhc2UgIiRAIiBpbiBcCisgICovKikgYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDs7IFwKKyAgICAqKSBhbV9fb2Rpcj0uOzsgXAorZXNhYzsgXAordGVzdCAieCQkYW1fX29kaXIiID0geCIuIiB8fCB0ZXN0IC1kICIkJGFtX19vZGlyIiBcCisgIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OyBcCitpZiB0ZXN0IC1mICIuLyQkZiI7IHRoZW4gZGlyPS4vOyBcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsgXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsgXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgXAoraWYgdGVzdCAtbiAnJChESVNBQkxFX0hBUkRfRVJST1JTKSc7IHRoZW4gXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPW5vOyBcCitlbHNlIFwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IFwKK2ZpOworYW1fX3NldF9URVNUU19iYXNlcyA9IFwKKyAgYmFzZXM9JyQoVEVTVF9MT0dTKSc7IFwKKyAgYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpOyBkb25lIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCisgIGJhc2VzPWBlY2hvICQkYmFzZXNgCitSRUNIRUNLX0xPR1MgPSAkKFRFU1RfTE9HUykKK1RFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKK1RFU1RfRVhURU5TSU9OUyA9ICAudGVzdAorTE9HX0RSSVZFUiA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvdGVzdC1kcml2ZXIKK2FtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKK2FtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMToubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi50ZXN0LmxvZz0ubG9nKQorTUtESVJfUCA9IC9iaW4vbWtkaXIgLXAKK1BBQ0tBR0VfU1RSSU5HID0gUENSRSA4LjM2CitTSEVMTCA9IC9iaW4vc2gKK3NyY2RpciA9IC4KK3RvcF9zcmNkaXIgPSAuCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlhbV9fZl9vayAoKSB7IHRlc3QgLWYgIiQkMSIgJiYgdGVzdCAtciAiJCQxIjsgfTsgXAorCXJlZG9fYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIFwKKwkgICAgICAgICAgICAgIGFtX19mX29rICQkaS50cnMgJiYgYW1fX2Zfb2sgJCRpLmxvZyB8fCBlY2hvICQkaTsgXAorCSAgICAgICAgICAgIGRvbmVgOyBcCisJc3Q9MDsgIFwKKwllcnJtc2c9ImZhdGFsOiBtYWtpbmcgJChURVNUX1NVSVRFX0xPRyk6IGZhaWxlZCB0byBjcmVhdGUiOyBcCisJZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBcCisJICB0ZXN0IC1mICQkaS50cnMgJiYgdGVzdCAtciAkJGkudHJzIFwKKwkgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkudHJzIiA+JjI7IHN0PTE7IH07IFwKKwkgIHRlc3QgLWYgJCRpLmxvZyAmJiB0ZXN0IC1yICQkaS5sb2cgXAorCSAgICB8fCB7IGVjaG8gIiQkZXJybXNnICQkaS5sb2ciID4mMjsgc3Q9MTsgfTsgXAorCWRvbmU7IFwKKwl0ZXN0ICQkc3QgLWVxIDAgfHwgZXhpdCAxOworCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwl3cz0nWyAJXSc7IFwKKwlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCisJdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAorCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAorCSAgc3VjY2Vzcz10cnVlOyBcCisJZWxzZSBcCisJICBzdWNjZXNzPWZhbHNlOyBcCisJZmk7IFwKKwlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKKwlyZXN1bHRfY291bnQgKCkgXAorCXsgXAorCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAorCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCisJICAgIGZpOyBcCisJICAgIHNoaWZ0OyBcCisJICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAorCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKKwkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAorCX07IFwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCisJeyBcCisJICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAorCX07IFwKKwl7CQkJCQkJCQlcCisJICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKKwkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCisJICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGI7IGRvbmU7CQkJCVwKKwl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXAgfHwgZXhpdCAxOwkJCQlcCisJbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCisJICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAorCSBlbHNlCQkJCQkJCQlcCisJICBjb2w9IiQkcmVkIjsJCQkJCQkJXAorCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKKwlmaTsJCQkJCQkJCVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCisJZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAorCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKKwkgIGVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCVwKKwlmaTsJCQkJCQkJCVwKKwkkJHN1Y2Nlc3MgfHwgZXhpdCAxCitjaGVjay1URVNUUzoKKwlAbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgICAgICAgICAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0CisJQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCUBzZXQgK2U7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlsb2dfbGlzdD1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGkubG9nOyBkb25lYDsgXAorCWxvZ19saXN0PWBlY2hvICQkbG9nX2xpc3RgOyBcCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChURVNUX1NVSVRFX0xPRykgVEVTVF9MT0dTPSIkJGxvZ19saXN0IjsgXAorCWV4aXQgJCQ/OworcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdC5sb2c6IHBjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QkKEVYRUVYVCkKKwlAcD0ncGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCQoRVhFRVhUKSc7IFwKKwliPSdwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgorUnVuVGVzdC5sb2c6IFJ1blRlc3QKKwlAcD0nUnVuVGVzdCc7IFwKKwliPSdSdW5UZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgorUnVuR3JlcFRlc3QubG9nOiBSdW5HcmVwVGVzdAorCUBwPSdSdW5HcmVwVGVzdCc7IFwKKwliPSdSdW5HcmVwVGVzdCc7IFwKKwkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpIC0tICIkJHRzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvZml4LXBjcmUtbmFtZS1jb2xsaXNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliNDRmNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitUaGlzIHBhdGNoIGFkZHJlc3MgYSBuYW1lc3BhY2UgY29sbGlzaW9uIHdpdGggbGliYy4KKworQWx0aG91Z2ggdGhlcmUgaXMgbm8gIiNpbmNsdWRlIDxyZWdleC5oPiIgaW4gdGhlIHNvdXJjZSBmaWxlLCBhdAorcnVudGltZSwgaXQncyB1bmludGVudGlvbmFsbHkgbGlua2VkIHRvIHRoZSBsaWJjIHZlcnNpb24sIHRoZSByZWdjb21wIG9mCitsaWJjIGlzIGNhbGxlZCBpbnN0ZWFkIHRoZSBwY3JlIG9uZSB1c2luZyBwY3JlJ3MgZGF0YSBzdHJ1Y3R1cmUuLi4KK3RoYXQgbG9va3MgbGlrZSBhIGRpc2FzdGVyLgorCitDYW4gcGF0Y2ggaXMgZnJvbSBEZWJpYW4gKGFuZCBVYnVudHUgMTEuMDRhbHBoYSBoYXMgaXQgYWxzbykuCisKK1tzZ3c6IGFkZGVkIHBhdGNoIGNvbW1lbnRdCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworLS0tIGEvcGNyZXBvc2l4LmgJMjAxMC0wNS0xNyAwMDoxNzoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBiL3BjcmVwb3NpeC5oCTIwMDktMDEtMTUgMDQ6MzI6MTcuMDAwMDAwMDAwICswODAwCitAQCAtMTMzLDE0ICsxMzAsMTkgQEAKKyAKKyAvKiBUaGUgZnVuY3Rpb25zICovCisgCistUENSRVBPU0lYX0VYUF9ERUNMIGludCByZWdjb21wKHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOworLVBDUkVQT1NJWF9FWFBfREVDTCBpbnQgcmVnZXhlYyhjb25zdCByZWdleF90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorK1BDUkVQT1NJWF9FWFBfREVDTCBpbnQgcGNyZXBvc2l4X3JlZ2NvbXAocmVnZXhfdCAqLCBjb25zdCBjaGFyICosIGludCk7CisrUENSRVBPU0lYX0VYUF9ERUNMIGludCBwY3JlcG9zaXhfcmVnZXhlYyhjb25zdCByZWdleF90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgIHJlZ21hdGNoX3QgKiwgaW50KTsKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgc2l6ZV90IHJlZ2Vycm9yKGludCwgY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIHNpemVfdCk7CistUENSRVBPU0lYX0VYUF9ERUNMIHZvaWQgcmVnZnJlZShyZWdleF90ICopOworK1BDUkVQT1NJWF9FWFBfREVDTCBzaXplX3QgcGNyZXBvc2l4X3JlZ2Vycm9yKGludCwgY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIHNpemVfdCk7CisrUENSRVBPU0lYX0VYUF9ERUNMIHZvaWQgcGNyZXBvc2l4X3JlZ2ZyZWUocmVnZXhfdCAqKTsKKyAKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyB9ICAgLyogZXh0ZXJuICJDIiAqLworICNlbmRpZgorIAorKyNkZWZpbmUgcmVnY29tcCBwY3JlcG9zaXhfcmVnY29tcAorKyNkZWZpbmUgcmVnZXhlYyBwY3JlcG9zaXhfcmVnZXhlYworKyNkZWZpbmUgcmVnZXJyb3IgcGNyZXBvc2l4X3JlZ2Vycm9yCisrI2RlZmluZSByZWdmcmVlIHBjcmVwb3NpeF9yZWdmcmVlCisrCisgI2VuZGlmIC8qIEVuZCBvZiBwY3JlcG9zaXguaCAqLwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcGNyZS1jcm9zcy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3BjcmUtY3Jvc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4ODBmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3BjcmUtY3Jvc3MucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBwY3JlLTguMzIub3JpZy9NYWtlZmlsZS5hbQorKysrIHBjcmUtOC4zMi9NYWtlZmlsZS5hbQorQEAgLTE5Nyw4ICsxOTcsMTggQEAgYmluX1NDUklQVFMgPSBwY3JlLWNvbmZpZworIAorK0NDX0ZPUl9CVUlMRCA9IEBDQ19GT1JfQlVJTERACisrQ0ZMQUdTX0ZPUl9CVUlMRCA9IEBDRkxBR1NfRk9SX0JVSUxEQAorK0NDTERfRk9SX0JVSUxEID0gQENDTERfRk9SX0JVSUxEQAorK0xERkxBR1NfRk9SX0JVSUxEID0gQExERkxBR1NfRk9SX0JVSUxEQAorKworIGlmIFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTCisgCisgbm9pbnN0X1BST0dSQU1TICs9IGRmdGFibGVzCisgZGZ0YWJsZXNfU09VUkNFUyA9IGRmdGFibGVzLmMKKytkZnRhYmxlc19MSU5LID0gJChDQ0xEX0ZPUl9CVUlMRCkgLW8gJEAKKytkZnRhYmxlc19MREZMQUdTID0gJChMREZMQUdTX0ZPUl9CVUlMRCkKKysKKytkZnRhYmxlcy5vOiAkKHNyY2RpcikvZGZ0YWJsZXMuYworKwkkKENDX0ZPUl9CVUlMRCkgLWMgJChDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKHNyY2RpcikvZGZ0YWJsZXMuYworIAorIHBjcmVfY2hhcnRhYmxlcy5jOiBkZnRhYmxlcyQoRVhFRVhUKQorIAkuL2RmdGFibGVzJChFWEVFWFQpICRACistLS0gcGNyZS04LjMyLm9yaWcvY29uZmlndXJlLmFjCisrKysgcGNyZS04LjMyL2NvbmZpZ3VyZS5hYworQEAgLTcyLDYgKzcyLDIyIEBAIHRoZW4KKyAgIGZpCisgZmkKKyAKKytpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzOyB0aGVuCisrICAgIENDX0ZPUl9CVUlMRD0iJHtDQ19GT1JfQlVJTEQtZ2NjfSIKKysgICAgQ0NMRF9GT1JfQlVJTEQ9IiR7Q0NMRF9GT1JfQlVJTEQtZ2NjfSIKKysgICAgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtDRkxBR1NfRk9SX0JVSUxEfSIKKysgICAgTERGTEFHU19GT1JfQlVJTEQ9IiR7TERGTEFHU19GT1JfQlVJTER9IgorK2Vsc2UKKysgICAgQ0NfRk9SX0JVSUxEPSIke0NDX0ZPUl9CVUlMRC1cJChDQyl9IgorKyAgICBDQ0xEX0ZPUl9CVUlMRD0iJHtDQ0xEX0ZPUl9CVUlMRC1cJChDQ0xEKX0iCisrICAgIENGTEFHU19GT1JfQlVJTEQ9IiR7Q0ZMQUdTX0ZPUl9CVUlMRC1cJChDRkxBR1MpfSIKKysgICAgTERGTEFHU19GT1JfQlVJTEQ9IiR7TERGTEFHU19GT1JfQlVJTEQtXCQoTERGTEFHUyl9IgorK2ZpCisrQUNfQVJHX1ZBUihDQ19GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBjb21waWxlcl0pCisrQUNfQVJHX1ZBUihDQ0xEX0ZPUl9CVUlMRCwgW2J1aWxkIHN5c3RlbSBDIGxpbmtlciBmcm9udGVuZF0pCisrQUNfQVJHX1ZBUihDRkxBR1NfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgY29tcGlsZXIgYXJndW1lbnRzXSkKKytBQ19BUkdfVkFSKExERkxBR1NfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgbGlua2VyIGZyb250ZW5kIGFyZ3VtZW50c10pCisrCisgIyBBQ19QUk9HX0NYWCB3aWxsIHJldHVybiAiZysrIiBldmVuIGlmIG5vIGMrKyBjb21waWxlciBpcyBpbnN0YWxsZWQuCisgIyBDaGVjayBmb3IgdGhhdCBjYXNlLCBhbmQganVzdCBkaXNhYmxlIGMrKyBjb2RlIGlmIGcrKyBkb2Vzbid0IHJ1bi4KKyBBQ19MQU5HX1BVU0goQysrKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MGQ0YTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmYzllOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlXzguMzcuYmIKQEAgLTAsMCArMSw3MyBAQAorREVTQ1JJUFRJT04gPSAiVGhlIFBDUkUgbGlicmFyeSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgcmVndWxhciBcCitleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFuZCBzZW1hbnRpY3MgYXMgUGVybCA1LiBQQ1JFIFwKK2hhcyBpdHMgb3duIG5hdGl2ZSBBUEksIGFzIHdlbGwgYXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIFwKK3RvIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gQVBJLiIKK1NVTU1BUlkgPSAiUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBjcmUub3JnIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9N2U0OTM3ODE0YWVlMTQ3NThjMWM5NWI1OWM4MGM0NGQiCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L3BjcmUvcGNyZS8ke1BWfS9wY3JlLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGNyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGNyZS1uYW1lLWNvbGxpc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWQ5MWJlMjkyY2IwMWQyMWJjN2U1MjY4MTZjMjY5ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE2NzllYTgwMDZjZTMxMzc5ZmIwODYwZTQ2ZGQ4NjY2NWQ4NjRiNTAyMGZjOWNkMTllNzEyNjBlZWY0Nzg5ZCIKKworUyA9ICIke1dPUktESVJ9L3BjcmUtJHtQVn0iCisKK1BST1ZJREVTICs9ICJwY3JlIgorREVQRU5EUyArPSAiYnppcDIgemxpYiIKKworUEFDS0FHRUNPTkZJR1twY3JldGVzdC1yZWFkbGluZV0gPSAiLS1lbmFibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUsLS1kaXNhYmxlLXBjcmV0ZXN0LWxpYnJlYWRsaW5lLHJlYWRsaW5lLCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wY3JlLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1lbmFibGUtbmV3bGluZS1pcy1sZiBcCisgICAgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIFwKKyAgICAtLWVuYWJsZS11dGY4IFwKKyAgICAtLXdpdGgtbGluay1zaXplPTIgXAorICAgIC0td2l0aC1tYXRjaC1saW1pdD0xMDAwMDAwMCBcCisiCisKKyMgU2V0IExJTktfU0laRSBpbiBCVUlMRF9DRkxBR1MgZ2l2ZW4gdGhhdCB0aGUgYXV0b3Rvb2xzIGJiY2xhc3MgdXNlIGl0IHRvCisjIHNldCBDRkxBR1NfRk9SX0JVSUxELCByZXF1aXJlZCBmb3IgdGhlIGxpYnBjcmUgYnVpbGQuCitCVUlMRF9DRkxBR1MgPSsgIi1ETElOS19TSVpFPTIgLUkke0J9IgorQ0ZMQUdTICs9ICItRF9SRUVOVFJBTlQiCitDWFhGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWxzdGRjKysiCisKK1BBQ0tBR0VTID0rICJsaWJwY3JlY3BwIGxpYnBjcmVwb3NpeCBwY3JlZ3JlcCBwY3JlZ3JlcC1kb2MgcGNyZXRlc3QgcGNyZXRlc3QtZG9jIgorCitTVU1NQVJZX2xpYnBjcmVjcHAgPSAiJHtTVU1NQVJZfSAtIEMrKyB3cmFwcGVyIGZ1bmN0aW9ucyIKK1NVTU1BUllfbGlicGNyZXBvc2l4ID0gIiR7U1VNTUFSWX0gLSBDIHdyYXBwZXIgZnVuY3Rpb25zIGJhc2VkIG9uIHRoZSBQT1NJWCByZWdleCBBUEkiCitTVU1NQVJZX3BjcmVncmVwID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyIKK1NVTU1BUllfcGNyZWdyZXAtZG9jID0gImdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgcGVybCA1IGNvbXBhdGlibGUgcmVnZXhlcyAtIGRvY3MiCitTVU1NQVJZX3BjcmV0ZXN0ID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK1NVTU1BUllfcGNyZXRlc3QtZG9jID0gInByb2dyYW0gZm9yIHRlc3RpbmcgUGVybC1jb21hdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAtIGRvY3MiCisKK0ZJTEVTX2xpYnBjcmVjcHAgPSAiJHtsaWJkaXJ9L2xpYnBjcmVjcHAuc28uKiIKK0ZJTEVTX2xpYnBjcmVwb3NpeCA9ICIke2xpYmRpcn0vbGlicGNyZXBvc2l4LnNvLioiCitGSUxFU19wY3JlZ3JlcCA9ICIke2JpbmRpcn0vcGNyZWdyZXAiCitGSUxFU19wY3JlZ3JlcC1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcGNyZWdyZXAuMSIKK0ZJTEVTX3BjcmV0ZXN0ID0gIiR7YmluZGlyfS9wY3JldGVzdCIKK0ZJTEVTX3BjcmV0ZXN0LWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JldGVzdC4xIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfQorCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHQKKwljcCAtciAke1N9L3Rlc3RkYXRhICR0CisJZm9yIGkgaW4gcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCBwY3JlZ3JlcCBwY3JldGVzdDsgXAorCSAgZG8gY3AgJHtCfS8ubGlicy8kaSAkdDsgXAorCWRvbmUKKwlmb3IgaSBpbiBSdW5UZXN0IFJ1bkdyZXBUZXN0IHRlc3QtZHJpdmVyOyBcCisJICBkbyBjcCAke1N9LyRpICR0OyBcCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHkvMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBmNWYyYzIyODllYjM1ZWI4MDRjMWMzNWU0NmNhNDFiNThlNGNhZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAxNDoxMzo0OSAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0OiBJbmNsdWRlIDxzeXMvc2VsZWN0Lmg+IGZvciBzZWxlY3QoKQorCitBcyBwZXIgcG9zaXggd2UgbmVlZCB0byBpbmNsdWRlIHRoaXMgZmlsZSBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggZXJyb3JzIGxpa2UKKworL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDogSW4gbWVtYmVyIGZ1bmN0aW9uICdib29sIFRlc3RTZXJ2ZXI6Omxvb3AoKSc6CisvaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOjgwOjQ6IGVycm9yOiAnZmRfc2V0JyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICBmZF9zZXQgZmRzOworICAgIF4KKy9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6ODk6MTQ6IGVycm9yOiAnZmRzJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKKyAgICBGRF9aRVJPICgmZmRzKTsKKzxKSVJBIFRJQ0tFVCAjMT4sIDxKSVJBIFRJQ0tFVCAjMj4sIDxKSVJBIFRJQ0tFVCAjbj4gOiA8b25lIGxpbmUgc3VtbWFyeSBvZiBjaGFuZ2U+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAgYi9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKK2luZGV4IGE2MWZjNGIuLmJkYTQ2NDYgMTAwNjQ0CistLS0gYS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAKKysrKyBiL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAorQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPHNzdHJlYW0+CisgI2luY2x1ZGUgPHN0cmluZz4KKyAKKysjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMGI5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBwcm92aWRpbmcgYXV0b21hdGljIHByb3h5IGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJwcm94eS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9saWJwcm94eS9pc3N1ZXMvbGlzdCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXRpbHMvcHJveHkuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT01NTE1MmExMDA2ZDdkYWZiZWYzMmJhZjljMzBhOTljMCIKKworREVQRU5EUyA9ICJnY29uZiBnbGliLTIuMCIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGlicC8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiM2NkMWFlMmE0YWJlY2Y0NGIzZjI0ZDY2MzlkMmNkODQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGMzZjMzZGU1NDE2MzcxOGY4MmIzZTdjNDk2YTdkZTk3Zjg4NjI1Nzg0MTRiOGVjYWFkM2NiZmU0ODIxODY0YiIKKworaW5oZXJpdCBjbWFrZSBwa2djb25maWcKKworRVhUUkFfT0VDTUFLRSA9ICItRFdJVEhfV0VCS0lUPW5vIC1EV0lUSF9HTk9NRT15ZXMgLURXSVRIX0tERTQ9bm8gXAorCSAgICAgIC1EV0lUSF9QWVRIT049bm8gLURXSVRIX1BFUkw9bm8gLURXSVRIX01PWkpTPW5vIC1EV0lUSF9OTT1ubyAtRExJQl9JTlNUQUxMX0RJUj0ke2xpYmRpcn0gLURMSUJFWEVDX0lOU1RBTExfRElSPSR7bGliZXhlY2Rpcn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vJHtCUE59LyR7UFZ9L21vZHVsZXMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vJHtQVn0vcGx1Z2lucy8uZGVidWcvICR7bGliZGlyfS8ke0JQTn0vJHtQVn0vbW9kdWxlcy8uZGVidWcvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlleHBvcnQgSE9TVF9TWVM9JHtIT1NUX1NZU30KKwlleHBvcnQgQlVJTERfU1lTPSR7QlVJTERfU1lTfQorfQorCitweXRob24oKSB7CisgICAgaWYgaW5jb21wYXRpYmxlX2xpY2Vuc2VfY29udGFpbnMoIkdQTHYzIiwgIngiLCAiIiwgZCkgPT0gIngiIG9yIGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAieDExIiwgIngiLCAiIiwgZCkgPT0gIiI6CisgICAgICAgIGQuc2V0VmFyKCJFWFRSQV9PRUNNQUtFIiwgZC5nZXRWYXIoIkVYVFJBX09FQ01BS0UiLCBGYWxzZSkucmVwbGFjZSgiLURXSVRIX0dOT01FPXllcyIsICItRFdJVEhfR05PTUU9bm8iKSkKKyAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCAiICIuam9pbihpIGZvciBpIGluIGQuZ2V0VmFyKCJERVBFTkRTIiwgRmFsc2UpLnNwbGl0KCkgaWYgaSAhPSAiZ2NvbmYiKSkKK30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUwLjAuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41MC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NGRiMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnNvdXAvbGlic291cC0yLjRfMi41MC4wLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiQW4gSFRUUCBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGluIEMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworU0VDVElPTiA9ICJ4MTEvZ25vbWUvbGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnbnV0bHMgbGlieG1sMiBzcWxpdGUzIGludGx0b29sLW5hdGl2ZSIKKworIyBsaWJzb3VwLWdub21lIGlzIGVudGlyZWx5IGRlcHJlY2F0ZWQgYW5kIGp1c3Qgc3R1YnMgaW4gMi40MiBvbndhcmRzLiAgRW5hYmxlCisjIGJ5IGRlZmF1bHQgYnV0IGxldCBpdCBiZSBlYXNpbHkgZGlzYWJsZWQuCitQQUNLQUdFQ09ORklHID8/PSAiZ25vbWUiCitQQUNLQUdFQ09ORklHW2dub21lXSA9ICItLXdpdGgtZ25vbWUsLS13aXRob3V0LWdub21lIgorCitTSFJUX1ZFUiA9ICIke0BiYi5kYXRhLmdldFZhcignUFYnLGQsMSkuc3BsaXQoJy4nKVswXX0uJHtAYmIuZGF0YS5nZXRWYXIoJ1BWJyxkLDEpLnNwbGl0KCcuJylbMV19IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vbGlic291cC8ke1NIUlRfVkVSfS9saWJzb3VwLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjlhODRkNjZlMWI3Y2NkM2JkMzQwNTc0YjExZWNjYzE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFlMDEzNjVhYzRhZjM4MTcxODdlYTg0N2Y5ZDM1ODhjMjdlZWUwMWZjNTE5YTVhN2NiMjEyYmI3OGIwZjY2N2IiCisKK1MgPSAiJHtXT1JLRElSfS9saWJzb3VwLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjIGdsaWItbmV0d29ya2luZyBpcyBuZWVkZWQgZm9yIFNTTCwgcHJveGllcywgZXRjLgorUlJFQ09NTUVORFNfJHtQTn0gPSAiZ2xpYi1uZXR3b3JraW5nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWVhY2I4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbGlidW5pc3RyaW5nLTAuOS40L2xpYi9NYWtlZmlsZS5nbnVsaWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ1bmlzdHJpbmctMC45LjQub3JpZy9saWIvTWFrZWZpbGUuZ251bGliCisrKysgbGlidW5pc3RyaW5nLTAuOS40L2xpYi9NYWtlZmlsZS5nbnVsaWIKK0BAIC0zODAsNyArMzgwLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDg5MTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOGQ5OWEzNjg2MTU2NTZhODM1ZjU1MDIzMjZhZmQzMWNlYzJjZWJmZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE2IFNlcCAyMDEzIDE4OjE2OjEyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCBsaWJ1bmlzdHJpbmcgd2lsbCBiZSBidWlsdCB3aXRob3V0CitpY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxkLW5hdGl2ZSBjb25maWd1cmUgZmFpbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdudWxpYi1tNC9pY29udi5tNCB8ICAgMTEgLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsaWJ1bmlzdHJpbmctMC45LjQvZ251bGliLW00L2ljb252Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidW5pc3RyaW5nLTAuOS40Lm9yaWcvZ251bGliLW00L2ljb252Lm00CTIwMTQtMTEtMDMgMTc6NDE6MjkuNzU1MDExOTE3ICswMDAwCisrKysgbGlidW5pc3RyaW5nLTAuOS40L2dudWxpYi1tNC9pY29udi5tNAkyMDE0LTExLTAzIDE3OjQzOjAzLjc5NTAxNDQ4MCArMDAwMAorQEAgLTE1OSwxNyArMTU5LDYgQEAKKyAgICAgICB9CisgICB9CisgI2VuZGlmCistICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKy0gICAgIHByb3ZpZGVkLiAgKi8KKy0gIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KKy0gICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0xKQorLSAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCistICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKQorLSAgICAgIC8qIFRyeSBBSVggbmFtZXMuICAqLworLSAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCistICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KKy0gICAgICAmJiBpY29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpCistICAgIHJlc3VsdCB8PSAxNjsKKyAgIHJldHVybiByZXN1bHQ7CisgfV1dKV0sCisgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nXzAuOS41LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nXzAuOS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2Y2MzMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmdfMC45LjUuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgQyBhbmQgVW5pY29kZSBzdHJpbmdzIgorCitERVNDUklQVElPTiA9ICJUZXh0IGZpbGVzIGFyZSBub3dhZGF5cyB1c3VhbGx5IGVuY29kZWQgaW4gVW5pY29kZSwgYW5kIG1heVwKKyBjb25zaXN0IG9mIHZlcnkgZGlmZmVyZW50IHNjcmlwdHMgZnJvbSBMYXRpbiBsZXR0ZXJzIHRvIENoaW5lc2UgSGFuemlcCisgd2l0aCBtYW55IGtpbmRzIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBhY2NlbnRzLCByaWdodC10by1sZWZ0IHdyaXRpbmdcCisgbWFya3MsIGh5cGhlbnMsIFJvbWFuIG51bWJlcnMsIGFuZCBtdWNoIG1vcmUuIEJ1dCB0aGUgUE9TSVggcGxhdGZvcm1cCisgQVBJcyBmb3IgdGV4dCBkbyBub3QgY29udGFpbiBhZGVxdWF0ZSBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aFwKKyBwYXJ0aWN1bGFyIHByb3BlcnRpZXMgb2YgbWFueSBVbmljb2RlIGNoYXJhY3RlcnMuIEluIGZhY3QsIHRoZSBQT1NJWFwKKyBBUElzIGZvciB0ZXh0IGhhdmUgc2V2ZXJhbCBhc3N1bXB0aW9ucyBhdCB0aGVpciBiYXNlIHdoaWNoIGRvbid0IGhvbGRcCisgZm9yIFVuaWNvZGUgdGV4dC4gIFRoaXMgbGlicmFyeSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZ1wKKyBVbmljb2RlIHN0cmluZ3MgYW5kIGZvciBtYW5pcHVsYXRpbmcgQyBzdHJpbmdzIGFjY29yZGluZyB0byB0aGUgVW5pY29kZVwKKyBzdGFuZGFyZC4gIFRoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnVuaXN0cmluZy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LW00LXJlbW92ZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYTcwNWJjZGNiODM3OTlkNTQ0MTM3NjE3YjM3N2NmZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYThjMDc3MjQ2Nzg1MGJlZjcxOTczMThhOTVmNDRhYmJiNjc4ZWE4M2NiZjExOWEzNTAwY2M3ODQ4Mjc2YTE3IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOTcyZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDM5NmI2YzdhYjczN2UyYmZmMjQ0ZDY0MDYwMWM0MzZhMjYyNjBjYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcnVuIFNoYXJtYSA8YXJ1bkBzaGFybWEtaG9tZS5uZXQ+CitEYXRlOiBGcmksIDE5IEp1biAyMDE1IDE5OjQ3OjIyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEludmFsaWQgZHdhcmYgb3Bjb2RlcyBjYW4gY2F1c2UgcmVmZXJlbmNlcyBiZXlvbmQgdGhlIGVuZCBvZgorIHRoZSBhcnJheS4KKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlL2R3YXJmX2kuaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHdhcmZfaS5oIGIvaW5jbHVkZS9kd2FyZl9pLmgKK2luZGV4IDFlNjIzMWUuLjRhMDJhN2QgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2R3YXJmX2kuaAorKysrIGIvaW5jbHVkZS9kd2FyZl9pLmgKK0BAIC0yMCw3ICsyMCw3IEBACisgZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbRFdBUkZfUkVHTlVNX01BUF9MRU5HVEhdOworIC8qIFJFRyBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXM7IGl0IGJldHRlciBiZSBzaWRlLWVmZmVjdHMgZnJlZSEgICovCisgIyBkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpCQkJCQkgIFwKKy0gICgoKHJlZykgPD0gRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCisrICAoKChyZWcpIDwgRFdBUkZfUkVHTlVNX01BUF9MRU5HVEgpID8gZHdhcmZfdG9fdW53X3JlZ251bV9tYXBbcmVnXSA6IDApCisgI2VuZGlmCisgCisgI2lmZGVmIFVOV19MT0NBTF9PTkxZCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FBcmNoNjQtcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjhlYzMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNTI5IEBACitGcm9tIGFjNmMwYTY1MzU5NzVmMWRjMmRhNmU0ZTI3NjY2MTRiYWFjMmExNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdmFuIFJvdXggPHl2YW4ucm91eEBsaW5hcm8ub3JnPgorRGF0ZTogU2F0LCAxMSBNYXkgMjAxMyAwOToxODoyMyAtMDYwMAorU3ViamVjdDogW1BBVENIXSBBQXJjaDY0IHBvcnQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAKKyBSRUFETUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgCisgaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oICAgICAgICAgIHwgIDE4NyArKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saWJ1bndpbmQuaC5pbiAgICAgICAgICAgICAgIHwgICAgNCAKKyBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaCAgfCAgIDUyICsrKysrKworIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oICAgICAgICB8ICAgMzMgKysrCisgaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCAgIHwgIDI5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaCAgICAgICAgICB8ICAgIDQgCisgaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oICAgICAgICAgICAgICAgIHwgICAgMiAKKyBpbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbiAgICAgICAgfCAgICA0IAorIHNyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKysrKworIHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jICAgICB8ICAgNjAgKysrKysrKworIHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgMzkgKysrKworIHNyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyAgICAgICAgICB8ICAxMDAgKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9HZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgIDU3ICsrKysrKworIHNyYy9hYXJjaDY0L0dpbml0LmMgICAgICAgICAgICAgICAgICB8ICAxODcgKysrKysrKysrKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMgICAgICAgICAgICB8ICAgNTUgKysrKysrCisgc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMgICAgICAgICAgIHwgICA0NSArKysrKworIHNyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgNjQgKysrKysrKworIHNyYy9hYXJjaDY0L0dyZWdzLmMgICAgICAgICAgICAgICAgICB8ICAxMTMgKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dyZXN1bWUuYyAgICAgICAgICAgICAgICB8ICAxNzcgKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR3N0ZXAuYyAgICAgICAgICAgICAgICAgIHwgIDEyOSArKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYyAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGdldF9zYXZlX2xvYy5jICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MZ2xvYmFsLmMgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpbml0LmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYyAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYyAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYyAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTHJlZ3MuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9McmVzdW1lLmMgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xzdGVwLmMgICAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvZ2VuLW9mZnNldHMuYyAgICAgICAgICAgIHwgICA2OCArKysrKysrKworIHNyYy9hYXJjaDY0L2luaXQuaCAgICAgICAgICAgICAgICAgICB8ICAxMjcgKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvaXNfZnByZWcuYyAgICAgICAgICAgICAgIHwgICAzMiArKysKKyBzcmMvYWFyY2g2NC9vZmZzZXRzLmggICAgICAgICAgICAgICAgfCAgIDQ5ICsrKysrCisgc3JjL2FhcmNoNjQvcmVnbmFtZS5jICAgICAgICAgICAgICAgIHwgIDEwNiArKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9zaWdsb25nam1wLlMgICAgICAgICAgICAgfCAgIDEyICsKKyBzcmMvYWFyY2g2NC91bndpbmRfaS5oICAgICAgICAgICAgICAgfCAgIDQzICsrKysrCisgc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jIHwgICAgNSAKKyBzcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jICAgICAgICAgfCAgIDM2ICsrKysKKyA0MyBmaWxlcyBjaGFuZ2VkLCAyMTg0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGlidW53aW5kLWFhcmNoNjQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9qbXBidWYuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0djcmVhdGVfYWRkcl9zcGFjZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dnbG9iYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0X2xvY2FsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXRfcmVtb3RlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dyZWdzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3Jlc3VtZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dzdGVwLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGdsb2JhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdF9yZW1vdGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHJlZ3MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9McmVzdW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTHN0ZXAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2luaXQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9pc19mcHJlZy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L29mZnNldHMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9yZWduYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvc2lnbG9uZ2ptcC5TCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3Vud2luZF9pLmgKKworLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMiw2ICsyLDkgQEAgaW5jbHVkZV9IRUFERVJTID0gaW5jbHVkZS9saWJ1bndpbmQtZHluYQorICAgICBpbmNsdWRlL2xpYnVud2luZC1wdHJhY2UuaCBcCisgICAgIGluY2x1ZGUvbGlidW53aW5kLWNvcmVkdW1wLmgKKyAKKytpZiBBUkNIX0FBUkNINjQKKytpbmNsdWRlX0hFQURFUlMgKz0gaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCisrZW5kaWYKKyBpZiBBUkNIX0FSTQorIGluY2x1ZGVfSEVBREVSUyArPSBpbmNsdWRlL2xpYnVud2luZC1hcm0uaAorIGVuZGlmCitAQCAtNDEsNiArNDQsOSBAQCBTVUJESVJTID0gc3JjIHRlc3RzIGRvYworIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kd2FyZi5oIGluY2x1ZGUvZHdhcmZfaS5oIGluY2x1ZGUvZHdhcmYtZWguaAlcCisgCWluY2x1ZGUvY29tcGlsZXIuaCBpbmNsdWRlL2xpYnVud2luZF9pLmggaW5jbHVkZS9tZW1wb29sLmgJXAorIAlpbmNsdWRlL3JlbW90ZS5oCQkJCQkJXAorKwlpbmNsdWRlL3RkZXAtYWFyY2g2NC9kd2FyZi1jb25maWcuaAkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCQkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgJCQkJXAorIAlpbmNsdWRlL3RkZXAtYXJtL2R3YXJmLWNvbmZpZy5oCWluY2x1ZGUvdGRlcC1hcm0vZXhfdGFibGVzLmgJXAorIAlpbmNsdWRlL3RkZXAtYXJtL2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1hcm0vbGlidW53aW5kX2kuaAlcCisgCWluY2x1ZGUvdGRlcC1pYTY0L2ptcGJ1Zi5oIGluY2x1ZGUvdGRlcC1pYTY0L3JzZS5oIAkJXAorLS0tIGEvUkVBRE1FCisrKysgYi9SRUFETUUKK0BAIC05LDYgKzksNyBAQCBzZXZlcmFsIGFyY2hpdGVjdHVyZS9vcGVyYXRpbmctc3lzdGVtIGNvCisgIExpbnV4L0lBLTY0OglGdWxseSB0ZXN0ZWQgYW5kIHN1cHBvcnRlZC4KKyAgTGludXgvUEFSSVNDOglXb3JrcyB3ZWxsLCBidXQgQyBsaWJyYXJ5IG1pc3NpbmcgdW53aW5kLWluZm8uCisgIEhQLVVYL0lBLTY0OglNb3N0bHkgd29ya3MgYnV0IGtub3duIHRvIGhhdmUgc29tZSBzZXJpb3VzIGxpbWl0YXRpb25zLgorKyBMaW51eC9BQXJjaDY0OglOZXdseSBhZGRlZC4KKyAgTGludXgvUFBDNjQ6CU5ld2x5IGFkZGVkLgorICBMaW51eC9TdXBlckg6CU5ld2x5IGFkZGVkLgorICBGcmVlQlNEL2kzODY6CU5ld2x5IGFkZGVkLgorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDQsNyArMTA0LDcgQEAgU0VUX0FSQ0goWyR0YXJnZXRfY3B1XSxbdGFyZ2V0X2FyY2hdKQorIAorIEFDX0FSR19FTkFCTEUoY29yZWR1bXAsCisgCUFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jb3JlZHVtcF0sW2J1aWxkaW5nIGxpYnVud2luZC1jb3JlZHVtcCBsaWJyYXJ5XSksLAorLSAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQorKyAgICAgICAgW0FTX0NBU0UoWyRob3N0X2FyY2hdLCBbYWFyY2g2NCp8YXJtKnxtaXBzKnxzaCp8eDg2Kl0sIFtlbmFibGVfY29yZWR1bXA9eWVzXSwgW2VuYWJsZV9jb3JlZHVtcD1ub10pXQorICkKKyAKKyBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIHNob3VsZCBidWlsZCBsaWJ1bndpbmQtY29yZWR1bXBdKQorQEAgLTEyMSw2ICsxMjEsNyBAQCBBQ19NU0dfUkVTVUxUKFskdGFyZ2V0X29zXSkKKyAKKyBBTV9DT05ESVRJT05BTChCVUlMRF9DT1JFRFVNUCwgdGVzdCB4JGVuYWJsZV9jb3JlZHVtcCA9IHh5ZXMpCisgQU1fQ09ORElUSU9OQUwoUkVNT1RFX09OTFksIHRlc3QgeCR0YXJnZXRfYXJjaCAhPSB4JGhvc3RfYXJjaCkKKytBTV9DT05ESVRJT05BTChBUkNIX0FBUkNINjQsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhhYXJjaDY0KQorIEFNX0NPTkRJVElPTkFMKEFSQ0hfQVJNLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4YXJtKQorIEFNX0NPTkRJVElPTkFMKEFSQ0hfSUE2NCwgdGVzdCB4JHRhcmdldF9hcmNoID0geGlhNjQpCisgQU1fQ09ORElUSU9OQUwoQVJDSF9IUFBBLCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4aHBwYSkKK0BAIC0xMzcsNyArMTM4LDcgQEAgQU1fQ09ORElUSU9OQUwoT1NfRlJFRUJTRCwgZXhwciB4JHRhcmdldAorIEFDX01TR19DSEVDS0lORyhbZm9yIEVMRiBoZWxwZXIgd2lkdGhdKQorIGNhc2UgIiR7dGFyZ2V0X2FyY2h9IiBpbgorIChhcm18aHBwYXxwcGMzMnx4ODZ8c2gpIHVzZV9lbGYzMj15ZXM7IEFDX01TR19SRVNVTFQoWzMyXSk7OworLShpYTY0fHBwYzY0fHg4Nl82NCkgICAgdXNlX2VsZjY0PXllczsgQUNfTVNHX1JFU1VMVChbNjRdKTs7CisrKGFhcmNoNjR8aWE2NHxwcGM2NHx4ODZfNjQpICAgIHVzZV9lbGY2ND15ZXM7IEFDX01TR19SRVNVTFQoWzY0XSk7OworIChtaXBzKSAgICAgICAgICAgICAgICAgdXNlX2VsZnh4PXllczsgQUNfTVNHX1JFU1VMVChbeHhdKTs7CisgKikgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1Vua25vd24gRUxGIHRhcmdldDogJHt0YXJnZXRfYXJjaH1dKQorIGVzYWMKK0BAIC0xODYsNiArMTg3LDcgQEAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWN4eC1leGNlcHRpb25zXQorICMgQysrIGV4Y2VwdGlvbiBoYW5kbGluZyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwgb24geDg2CisgY2FzZSAkdGFyZ2V0X2FyY2ggaW4KKyAgIHg4NiopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisrICBhYXJjaDY0KikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgIGFybSopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz1ubzs7CisgICBtaXBzKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgICopIGVuYWJsZV9jeHhfZXhjZXB0aW9ucz15ZXM7OworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCitAQCAtMCwwICsxLDE4NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKysJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiBMSUJVTldJTkRfSAorKyNkZWZpbmUgTElCVU5XSU5EX0gKKysKKysjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQorK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8dWNvbnRleHQuaD4KKysKKysjZGVmaW5lIFVOV19UQVJHRVQJYWFyY2g2NAorKyNkZWZpbmUgVU5XX1RBUkdFVF9BQVJDSDY0CTEKKysKKysjZGVmaW5lIF9VX1RERVBfUVBfVFJVRQkwCS8qIHNlZSBsaWJ1bndpbmQtZHluYW1pYy5oICAqLworKworKy8qIFRoaXMgbmVlZHMgdG8gYmUgYmlnIGVub3VnaCB0byBhY2NvbW1vZGF0ZSAic3RydWN0IGN1cnNvciIsIHdoaWxlCisrICAgbGVhdmluZyBzb21lIHNsYWNrIGZvciBmdXR1cmUgZXhwYW5zaW9uLiAgQ2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsCisrICAgcmVxdWlyZSByZWNvbXBpbGluZyBhbGwgdXNlcnMgb2YgdGhpcyBsaWJyYXJ5LiAgU3RhY2sgYWxsb2NhdGlvbiBpcworKyAgIHJlbGF0aXZlbHkgY2hlYXAgYW5kIHVud2luZC1zdGF0ZSBjb3B5aW5nIGlzIHJlbGF0aXZlbHkgcmFyZSwgc28gd2UKKysgICB3YW50IHRvIGVyciBvbiBtYWtpbmcgaXQgcmF0aGVyIHRvbyBiaWcgdGhhbiB0b28gc21hbGwuICAqLworKworKyNkZWZpbmUgVU5XX1RERVBfQ1VSU09SX0xFTgk0MDk2CisrCisrdHlwZWRlZiB1aW50NjRfdCB1bndfd29yZF90OworK3R5cGVkZWYgaW50NjRfdCB1bndfc3dvcmRfdDsKKysKKyt0eXBlZGVmIGxvbmcgZG91YmxlIHVud190ZGVwX2ZwcmVnX3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKysgIHsKKysgICAgLyogbm8gYWFyY2g2NC1zcGVjaWZpYyBhdXhpbGlhcnkgcHJvYy1pbmZvICovCisrICB9CisrdW53X3RkZXBfcHJvY19pbmZvX3Q7CisrCisrdHlwZWRlZiBlbnVtCisrICB7CisrICAgIC8qIDY0LWJpdCBnZW5lcmFsIHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1gwLAorKyAgICBVTldfQUFSQ0g2NF9YMSwKKysgICAgVU5XX0FBUkNINjRfWDIsCisrICAgIFVOV19BQVJDSDY0X1gzLAorKyAgICBVTldfQUFSQ0g2NF9YNCwKKysgICAgVU5XX0FBUkNINjRfWDUsCisrICAgIFVOV19BQVJDSDY0X1g2LAorKyAgICBVTldfQUFSQ0g2NF9YNywKKysgICAgVU5XX0FBUkNINjRfWDgsCisrCisrICAgIC8qIFRlbXBvcmFyeSByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9YOSwKKysgICAgVU5XX0FBUkNINjRfWDEwLAorKyAgICBVTldfQUFSQ0g2NF9YMTEsCisrICAgIFVOV19BQVJDSDY0X1gxMiwKKysgICAgVU5XX0FBUkNINjRfWDEzLAorKyAgICBVTldfQUFSQ0g2NF9YMTQsCisrICAgIFVOV19BQVJDSDY0X1gxNSwKKysKKysgICAgLyogSW50cmEtcHJvY2VkdXJlLWNhbGwgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1gxNiwKKysgICAgVU5XX0FBUkNINjRfWDE3LAorKworKyAgICAvKiBDYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDE4LAorKyAgICBVTldfQUFSQ0g2NF9YMTksCisrICAgIFVOV19BQVJDSDY0X1gyMCwKKysgICAgVU5XX0FBUkNINjRfWDIxLAorKyAgICBVTldfQUFSQ0g2NF9YMjIsCisrICAgIFVOV19BQVJDSDY0X1gyMywKKysgICAgVU5XX0FBUkNINjRfWDI0LAorKyAgICBVTldfQUFSQ0g2NF9YMjUsCisrICAgIFVOV19BQVJDSDY0X1gyNiwKKysgICAgVU5XX0FBUkNINjRfWDI3LAorKyAgICBVTldfQUFSQ0g2NF9YMjgsCisrCisrICAgIC8qIDY0LWJpdCBmcmFtZSBwb2ludGVyLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDI5LAorKworKyAgICAvKiA2NC1iaXQgbGluayByZWdpc3Rlci4gICovCisrICAgIFVOV19BQVJDSDY0X1gzMCwKKysKKysgICAgLyogNjQtYml0IHN0YWNrIHBvaW50ZXIuICAqLworKyAgICBVTldfQUFSQ0g2NF9TUCA9ICAzMSwKKysgICAgVU5XX0FBUkNINjRfUEMsCisrICAgIFVOV19BQVJDSDY0X1BTVEFURSwKKysKKysgICAgLyogMTI4LWJpdCBGUC9BZHZhbmNlZCBTSU1EIHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1YwID0gNjQsCisrICAgIFVOV19BQVJDSDY0X1YxLAorKyAgICBVTldfQUFSQ0g2NF9WMiwKKysgICAgVU5XX0FBUkNINjRfVjMsCisrICAgIFVOV19BQVJDSDY0X1Y0LAorKyAgICBVTldfQUFSQ0g2NF9WNSwKKysgICAgVU5XX0FBUkNINjRfVjYsCisrICAgIFVOV19BQVJDSDY0X1Y3LAorKyAgICBVTldfQUFSQ0g2NF9WOCwKKysgICAgVU5XX0FBUkNINjRfVjksCisrICAgIFVOV19BQVJDSDY0X1YxMCwKKysgICAgVU5XX0FBUkNINjRfVjExLAorKyAgICBVTldfQUFSQ0g2NF9WMTIsCisrICAgIFVOV19BQVJDSDY0X1YxMywKKysgICAgVU5XX0FBUkNINjRfVjE0LAorKyAgICBVTldfQUFSQ0g2NF9WMTUsCisrICAgIFVOV19BQVJDSDY0X1YxNiwKKysgICAgVU5XX0FBUkNINjRfVjE3LAorKyAgICBVTldfQUFSQ0g2NF9WMTgsCisrICAgIFVOV19BQVJDSDY0X1YxOSwKKysgICAgVU5XX0FBUkNINjRfVjIwLAorKyAgICBVTldfQUFSQ0g2NF9WMjEsCisrICAgIFVOV19BQVJDSDY0X1YyMiwKKysgICAgVU5XX0FBUkNINjRfVjIzLAorKyAgICBVTldfQUFSQ0g2NF9WMjQsCisrICAgIFVOV19BQVJDSDY0X1YyNSwKKysgICAgVU5XX0FBUkNINjRfVjI2LAorKyAgICBVTldfQUFSQ0g2NF9WMjcsCisrICAgIFVOV19BQVJDSDY0X1YyOCwKKysgICAgVU5XX0FBUkNINjRfVjI5LAorKyAgICBVTldfQUFSQ0g2NF9WMzAsCisrICAgIFVOV19BQVJDSDY0X1YzMSwKKysKKysgICAgVU5XX0FBUkNINjRfRlBTUiwKKysgICAgVU5XX0FBUkNINjRfRlBDUiwKKysKKysgICAgLyogRm9yIEFBcmNoNjQsIHRoZSBDRkEgaXMgdGhlIHZhbHVlIG9mIFNQICh4MzEpIGF0IHRoZSBjYWxsIHNpdGUgb2YgdGhlCisrICAgICAgIHByZXZpb3VzIGZyYW1lLiAgKi8KKysgICAgVU5XX0FBUkNINjRfQ0ZBID0gVU5XX0FBUkNINjRfU1AsCisrCisrICAgIFVOV19UREVQX0xBU1RfUkVHID0gVU5XX0FBUkNINjRfRlBDUiwKKysKKysgICAgVU5XX1RERVBfSVAgPSBVTldfQUFSQ0g2NF9YMzAsCisrICAgIFVOV19UREVQX1NQID0gVU5XX0FBUkNINjRfU1AsCisrICAgIFVOV19UREVQX0VIID0gVU5XX0FBUkNINjRfWDAsCisrCisrICB9CisrYWFyY2g2NF9yZWdudW1fdDsKKysKKysvKiBVc2UgUjAgdGhyb3VnaCBSMyB0byBwYXNzIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbi4gICovCisrI2RlZmluZSBVTldfVERFUF9OVU1fRUhfUkVHUwk0CisrCisrdHlwZWRlZiBzdHJ1Y3QgdW53X3RkZXBfc2F2ZV9sb2MKKysgIHsKKysgICAgLyogQWRkaXRpb25hbCB0YXJnZXQtZGVwZW5kZW50IGluZm8gb24gYSBzYXZlIGxvY2F0aW9uLiAgKi8KKysgIH0KKyt1bndfdGRlcF9zYXZlX2xvY190OworKworKworKy8qIE9uIEFBcmNoNjQsIHdlIGNhbiBkaXJlY3RseSB1c2UgdWNvbnRleHRfdCBhcyB0aGUgdW53aW5kIGNvbnRleHQuICAqLworK3R5cGVkZWYgdWNvbnRleHRfdCB1bndfdGRlcF9jb250ZXh0X3Q7CisrCisrI2luY2x1ZGUgImxpYnVud2luZC1jb21tb24uaCIKKysjaW5jbHVkZSAibGlidW53aW5kLWR5bmFtaWMuaCIKKysKKysjZGVmaW5lIHVud190ZGVwX2dldGNvbnRleHQodWMpICAgICAgICAgKGdldGNvbnRleHQgKHVjKSwgMCkKKysjZGVmaW5lIHVud190ZGVwX2lzX2ZwcmVnCQlVTldfQVJDSF9PQkooaXNfZnByZWcpCisrCisrZXh0ZXJuIGludCB1bndfdGRlcF9pc19mcHJlZyAoaW50KTsKKysKKysjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQorK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogTElCVU5XSU5EX0ggKi8KKy0tLSBhL2luY2x1ZGUvbGlidW53aW5kLmguaW4KKysrKyBiL2luY2x1ZGUvbGlidW53aW5kLmguaW4KK0BAIC0zLDcgKzMsOSBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrI2luY2x1ZGUgImxpYnVud2luZC1hYXJjaDY0LmgiCisrI2VsaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJsaWJ1bndpbmQtYXJtLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAibGlidW53aW5kLWhwcGEuaCIKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCitAQCAtMCwwICsxLDUyIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIGR3YXJmX2NvbmZpZ19oCisrI2RlZmluZSBkd2FyZl9jb25maWdfaAorKworKy8qIFRoaXMgbWF0Y2hlcyB0aGUgdmFsdWUgdWRlcyBieSBHQ0MgKHNlZQorKyAgIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lmg6RFdBUkZfRlJBTUVfUkVHSVNURVJTLiAgKi8KKysjZGVmaW5lIERXQVJGX05VTV9QUkVTRVJWRURfUkVHUwk5NworKworKy8qIFJldHVybiBUUlVFIGlmIHRoZSBBRERSX1NQQUNFIHVzZXMgYmlnLWVuZGlhbiBieXRlLW9yZGVyLiAgKi8KKysjZGVmaW5lIGR3YXJmX2lzX2JpZ19lbmRpYW4oYWRkcl9zcGFjZSkJMAorKworKyNkZWZpbmUgZHdhcmZfdG9fdW53X3JlZ251bShyZWcpICgoKHJlZykgPD0gVU5XX0FBUkNINjRfVjMxKSA/IChyZWcpIDogMCkKKysKKysvKiBDb252ZXJ0IGEgcG9pbnRlciB0byBhIGR3YXJmX2N1cnNvciBzdHJ1Y3R1cmUgdG8gYSBwb2ludGVyIHRvCisrICAgdW53X2N1cnNvcl90LiAgKi8KKysjZGVmaW5lIGR3YXJmX3RvX2N1cnNvcihjKQkoKHVud19jdXJzb3JfdCAqKSAoYykpCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHdhcmZfbG9jCisrICB7CisrICAgIHVud193b3JkX3QgdmFsOworKyNpZm5kZWYgVU5XX0xPQ0FMX09OTFkKKysgICAgdW53X3dvcmRfdCB0eXBlOwkJLyogc2VlIERXQVJGX0xPQ19UWVBFXyogbWFjcm9zLiAgKi8KKysjZW5kaWYKKysgIH0KKytkd2FyZl9sb2NfdDsKKysKKysjZW5kaWYgLyogZHdhcmZfY29uZmlnX2ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCitAQCAtMCwwICsxLDMzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKy8qIFVzZSBnbGliYydzIGp1bXAtYnVmZmVyIGluZGljZXM7IE5QVEwgcGVla3MgYXQgU1A6ICovCisrCisrLyogRklYTUUgZm9yIEFBcmNoNjQgICovCisrCisrI2RlZmluZSBKQl9TUAkJMTMKKysjZGVmaW5lIEpCX1JQCQkxNAorKyNkZWZpbmUgSkJfTUFTS19TQVZFRAkxNQorKyNkZWZpbmUgSkJfTUFTSwkJMTYKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgKK0BAIC0wLDAgKzEsMjk0IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IEhld2xldHQtUGFja2FyZCBDbworKwlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIEFBUkNINjRfTElCVU5XSU5EX0lfSAorKyNkZWZpbmUgQUFSQ0g2NF9MSUJVTldJTkRfSV9ICisrCisrLyogVGFyZ2V0LWRlcGVuZGVudCBkZWZpbml0aW9ucyB0aGF0IGFyZSBpbnRlcm5hbCB0byBsaWJ1bndpbmQgYnV0IG5lZWQKKysgICB0byBiZSBzaGFyZWQgd2l0aCB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysKKysjaW5jbHVkZSAiZWxmNjQuaCIKKysjaW5jbHVkZSAibWVtcG9vbC5oIgorKyNpbmNsdWRlICJkd2FyZi5oIgorKworK3R5cGVkZWYgc3RydWN0CisrICB7CisrICAgIC8qIG5vIGFhcmNoNjQtc3BlY2lmaWMgZmFzdCB0cmFjZSAqLworKyAgfQorK3Vud190ZGVwX2ZyYW1lX3Q7CisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrCisrdHlwZWRlZiB1bndfd29yZF90IGFhcmNoNjRfbG9jX3Q7CisrCisrI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgYWFyY2g2NF9sb2MKKysgIHsKKysgICAgdW53X3dvcmRfdCB3MCwgdzE7CisrICB9CisrYWFyY2g2NF9sb2NfdDsKKysKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrc3RydWN0IHVud19hZGRyX3NwYWNlCisrICB7CisrICAgIHN0cnVjdCB1bndfYWNjZXNzb3JzIGFjYzsKKysgICAgaW50IGJpZ19lbmRpYW47CisrICAgIHVud19jYWNoaW5nX3BvbGljeV90IGNhY2hpbmdfcG9saWN5OworKyNpZmRlZiBIQVZFX0FUT01JQ19PUFNfSAorKyAgICBBT190IGNhY2hlX2dlbmVyYXRpb247CisrI2Vsc2UKKysgICAgdWludDMyX3QgY2FjaGVfZ2VuZXJhdGlvbjsKKysjZW5kaWYKKysgICAgdW53X3dvcmRfdCBkeW5fZ2VuZXJhdGlvbjsgICAgICAgICAgLyogc2VlIGR5bi1jb21tb24uaCAqLworKyAgICB1bndfd29yZF90IGR5bl9pbmZvX2xpc3RfYWRkcjsJLyogKGNhY2hlZCkgZHluX2luZm9fbGlzdF9hZGRyICovCisrICAgIHN0cnVjdCBkd2FyZl9yc19jYWNoZSBnbG9iYWxfY2FjaGU7CisrICAgIHN0cnVjdCB1bndfZGVidWdfZnJhbWVfbGlzdCAqZGVidWdfZnJhbWVzOworKyAgIH07CisrCisrc3RydWN0IGN1cnNvcgorKyAgeworKyAgICBzdHJ1Y3QgZHdhcmZfY3Vyc29yIGR3YXJmOyAgICAgICAgICAvKiBtdXN0IGJlIGZpcnN0ICovCisrICAgIGVudW0KKysgICAgICB7CisrICAgICAgICBBQVJDSDY0X1NDRl9OT05FLAorKyAgICAgICAgQUFSQ0g2NF9TQ0ZfTElOVVhfUlRfU0lHRlJBTUUsCisrICAgICAgfQorKyAgICBzaWdjb250ZXh0X2Zvcm1hdDsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X2FkZHI7CisrICAgIHVud193b3JkX3Qgc2lnY29udGV4dF9zcDsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X3BjOworKyAgfTsKKysKKysjZGVmaW5lIERXQVJGX0dFVF9MT0MobCkgICAgICAgICgobCkudmFsKQorKworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyMgZGVmaW5lIERXQVJGX05VTExfTE9DICAgICAgICAgRFdBUkZfTE9DICgwLCAwKQorKyMgZGVmaW5lIERXQVJGX0lTX05VTExfTE9DKGwpICAgKERXQVJGX0dFVF9MT0MgKGwpID09IDApCisrIyBkZWZpbmUgRFdBUkZfTE9DKHIsIHQpICAgICAgICAoKGR3YXJmX2xvY190KSB7IC52YWwgPSAocikgfSkKKysjIGRlZmluZSBEV0FSRl9JU19SRUdfTE9DKGwpICAgIDAKKysjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIChEV0FSRl9MT0MoKHVud193b3JkX3QpICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwX3VjX2FkZHIoKGMpLT5hc19hcmcsIChyKSksIDApKQorKyMgZGVmaW5lIERXQVJGX01FTV9MT0MoYyxtKSAgICAgRFdBUkZfTE9DICgobSksIDApCisrIyBkZWZpbmUgRFdBUkZfRlBSRUdfTE9DKGMscikgICAoRFdBUkZfTE9DKCh1bndfd29yZF90KSAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcF91Y19hZGRyKChjKS0+YXNfYXJnLCAocikpLCAwKSkKKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCisreworKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLTE7CisrICAqdmFsID0gKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKih1bndfZnByZWdfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgKnZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICp2YWwgPSAqKHVud193b3JkX3QgKikgRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90IHZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICoodW53X3dvcmRfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpID0gdmFsOworKyAgcmV0dXJuIDA7CisrfQorKworKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLworKyMgZGVmaW5lIERXQVJGX0xPQ19UWVBFX0ZQICAgICAgKDEgPDwgMCkKKysjIGRlZmluZSBEV0FSRl9MT0NfVFlQRV9SRUcgICAgICgxIDw8IDEpCisrIyBkZWZpbmUgRFdBUkZfTlVMTF9MT0MgICAgICAgICBEV0FSRl9MT0MgKDAsIDApCisrIyBkZWZpbmUgRFdBUkZfSVNfTlVMTF9MT0MobCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoeyBkd2FyZl9sb2NfdCBfbCA9IChsKTsgX2wudmFsID09IDAgJiYgX2wudHlwZSA9PSAwOyB9KQorKyMgZGVmaW5lIERXQVJGX0xPQyhyLCB0KSAgICAgICAgKChkd2FyZl9sb2NfdCkgeyAudmFsID0gKHIpLCAudHlwZSA9ICh0KSB9KQorKyMgZGVmaW5lIERXQVJGX0lTX1JFR19MT0MobCkgICAgKCgobCkudHlwZSAmIERXQVJGX0xPQ19UWVBFX1JFRykgIT0gMCkKKysjIGRlZmluZSBEV0FSRl9JU19GUF9MT0MobCkgICAgICgoKGwpLnR5cGUgJiBEV0FSRl9MT0NfVFlQRV9GUCkgIT0gMCkKKysjIGRlZmluZSBEV0FSRl9SRUdfTE9DKGMscikgICAgIERXQVJGX0xPQygociksIERXQVJGX0xPQ19UWVBFX1JFRykKKysjIGRlZmluZSBEV0FSRl9NRU1fTE9DKGMsbSkgICAgIERXQVJGX0xPQyAoKG0pLCAwKQorKyMgZGVmaW5lIERXQVJGX0ZQUkVHX0xPQyhjLHIpICAgRFdBUkZfTE9DKChyKSwgKERXQVJGX0xPQ19UWVBFX1JFRyAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERXQVJGX0xPQ19UWVBFX0ZQKSkKKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190ICp2YWwpCisreworKyAgY2hhciAqdmFscCA9IChjaGFyICopICZ2YWw7CisrICB1bndfd29yZF90IGFkZHI7CisrICBpbnQgcmV0OworKworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX2ZwcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCAwLCBjLT5hc19hcmcpOworKworKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGMtPmFzX2FyZykpIDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dGZwIChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud19mcHJlZ190IHZhbCkKKyt7CisrICBjaGFyICp2YWxwID0gKGNoYXIgKikgJnZhbDsKKysgIHVud193b3JkX3QgYWRkcjsKKysgIGludCByZXQ7CisrCisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfZnByZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsLCAxLCBjLT5hc19hcmcpOworKworKyAgYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICBpZiAoKHJldCA9ICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyAwLCAodW53X3dvcmRfdCAqKSB2YWxwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZykpIDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBhZGRyICsgNCwgKHVud193b3JkX3QgKikgdmFscCArIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX2dldCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90ICp2YWwpCisreworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQorKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCisrICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQorKyAgICAgaGFwcGVuPyAgKi8KKysgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKKysgIGVsc2UKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9wdXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCB2YWwpCisreworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKworKyAgLyogSWYgYSBjb2RlLWdlbmVyYXRvciB3ZXJlIHRvIHNhdmUgYSB2YWx1ZSBvZiB0eXBlIHVud193b3JkX3QgaW4gYQorKyAgICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIsIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCB0aGlzIGNhc2UuICBJCisrICAgICBzdXBwb3NlIGl0IGNvdWxkIGhhcHBlbiB3aXRoIE1NWCByZWdpc3RlcnMsIGJ1dCBkb2VzIGl0IHJlYWxseQorKyAgICAgaGFwcGVuPyAgKi8KKysgIGFzc2VydCAoIURXQVJGX0lTX0ZQX0xPQyAobG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfcmVnKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksICZ2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7CisrICBlbHNlCisrICAgIHJldHVybiAoKmMtPmFzLT5hY2MuYWNjZXNzX21lbSkgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLCAmdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBjLT5hc19hcmcpOworK30KKysKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrCisrCisrCisrI2RlZmluZSB0ZGVwX2dldGNvbnRleHRfdHJhY2UgICAgICAgICAgIHVud19nZXRjb250ZXh0CisrI2RlZmluZSB0ZGVwX2luaXRfZG9uZQkJCVVOV19PQkooaW5pdF9kb25lKQorKyNkZWZpbmUgdGRlcF9pbml0CQkJVU5XX09CSihpbml0KQorKy8qIFBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgVU5XX0lORk9fRk9STUFUX1RBQkxFIG5lZWQgdG8gZGVmaW5lCisrICAgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlLiAgKi8KKysjZGVmaW5lIHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZQlkd2FyZl9zZWFyY2hfdW53aW5kX3RhYmxlCisrI2RlZmluZSB0ZGVwX2ZpbmRfdW53aW5kX3RhYmxlCSAgICAgICAgZHdhcmZfZmluZF91bndpbmRfdGFibGUKKysjZGVmaW5lIHRkZXBfdWNfYWRkcgkJCVVOV19PQkoodWNfYWRkcikKKysjZGVmaW5lIHRkZXBfZ2V0X2VsZl9pbWFnZQkJVU5XX0FSQ0hfT0JKKGdldF9lbGZfaW1hZ2UpCisrI2RlZmluZSB0ZGVwX2FjY2Vzc19yZWcJCQlVTldfT0JKKGFjY2Vzc19yZWcpCisrI2RlZmluZSB0ZGVwX2FjY2Vzc19mcHJlZwkJVU5XX09CSihhY2Nlc3NfZnByZWcpCisrI2RlZmluZSB0ZGVwX2ZldGNoX2ZyYW1lKGMsaXAsbikJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfY2FjaGVfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCisrI2RlZmluZSB0ZGVwX3JldXNlX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF9zdGFzaF9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfdHJhY2UoY3VyLGFkZHIsbikJCSgtVU5XX0VOT0lORk8pCisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGR3YXJmX2ZpbmRfcHJvY19pbmZvKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjKS0+YXNfYXJnKQorKyMgZGVmaW5lIHRkZXBfcHV0X3Vud2luZF9pbmZvKGFzLHBpLGFyZykgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZHdhcmZfcHV0X3Vud2luZF9pbmZvKChhcyksIChwaSksIChhcmcpKQorKyNlbHNlCisrIyBkZWZpbmUgdGRlcF9maW5kX3Byb2NfaW5mbyhjLGlwLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKCooYyktPmFzLT5hY2MuZmluZF9wcm9jX2luZm8pKChjKS0+YXMsIChpcCksICYoYyktPnBpLCAobiksICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyktPmFzX2FyZykKKysjIGRlZmluZSB0ZGVwX3B1dF91bndpbmRfaW5mbyhhcyxwaSxhcmcpICAgICAgICAgICAgICAgIFwKKysgICAgICAgICgqKGFzKS0+YWNjLnB1dF91bndpbmRfaW5mbykoKGFzKSwgKHBpKSwgKGFyZykpCisrI2VuZGlmCisrCisrI2RlZmluZSB0ZGVwX2dldF9hcyhjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmFzKQorKyNkZWZpbmUgdGRlcF9nZXRfYXNfYXJnKGMpICAgICAgICAgICAgICAoKGMpLT5kd2FyZi5hc19hcmcpCisrI2RlZmluZSB0ZGVwX2dldF9pcChjKSAgICAgICAgICAgICAgICAgICgoYyktPmR3YXJmLmlwKQorKyNkZWZpbmUgdGRlcF9iaWdfZW5kaWFuKGFzKSAgICAgICAgICAgICAoKGFzKS0+YmlnX2VuZGlhbikKKysKKytleHRlcm4gaW50IHRkZXBfaW5pdF9kb25lOworKworK2V4dGVybiB2b2lkIHRkZXBfaW5pdCAodm9pZCk7CisrZXh0ZXJuIGludCB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgaXAsCisrCQkJCSAgICAgdW53X2R5bl9pbmZvX3QgKmRpLCB1bndfcHJvY19pbmZvX3QgKnBpLAorKwkJCQkgICAgIGludCBuZWVkX3Vud2luZF9pbmZvLCB2b2lkICphcmcpOworK2V4dGVybiB2b2lkICp0ZGVwX3VjX2FkZHIgKHVud190ZGVwX2NvbnRleHRfdCAqdWMsIGludCByZWcpOworK2V4dGVybiBpbnQgdGRlcF9nZXRfZWxmX2ltYWdlIChzdHJ1Y3QgZWxmX2ltYWdlICplaSwgcGlkX3QgcGlkLCB1bndfd29yZF90IGlwLAorKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpzZWdiYXNlLCB1bnNpZ25lZCBsb25nICptYXBvZmYsCisrCQkJICAgICAgIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKTsKKytleHRlcm4gaW50IHRkZXBfYWNjZXNzX3JlZyAoc3RydWN0IGN1cnNvciAqYywgdW53X3JlZ251bV90IHJlZywKKysJCQkgICAgdW53X3dvcmRfdCAqdmFscCwgaW50IHdyaXRlKTsKKytleHRlcm4gaW50IHRkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLAorKwkJCSAgICAgIHVud19mcHJlZ190ICp2YWxwLCBpbnQgd3JpdGUpOworKworKyNlbmRpZiAvKiBBQVJDSDY0X0xJQlVOV0lORF9JX0ggKi8KKy0tLSBhL2luY2x1ZGUvdGRlcC9kd2FyZi1jb25maWcuaAorKysrIGIvaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oCitAQCAtMSw3ICsxLDkgQEAKKyAvKiBQcm92aWRlIGEgcmVhbCBmaWxlIC0gbm90IGEgc3ltbGluayAtIGFzIGl0IHdvdWxkIGNhdXNlIG11bHRpYXJjaCBjb25mbGljdHMKKyAgICB3aGVuIG11bHRpcGxlIGRpZmZlcmVudCBhcmNoIHJlbGVhc2VzIGFyZSBpbnN0YWxsZWQgc2ltdWx0YW5lb3VzbHkuICAqLworIAorLSNpZiBkZWZpbmVkIF9fYXJtX18KKysjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXworKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oIgorKyNlbGlmIGRlZmluZWQgX19hcm1fXworICMgaW5jbHVkZSAidGRlcC1hcm0vZHdhcmYtY29uZmlnLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAidGRlcC1ocHBhL2R3YXJmLWNvbmZpZy5oIgorLS0tIGEvaW5jbHVkZS90ZGVwL2ptcGJ1Zi5oCisrKysgYi9pbmNsdWRlL3RkZXAvam1wYnVmLmgKK0BAIC0zLDYgKzMsOCBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9qbXBidWYuaCIKKyAjaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJ0ZGVwLWFybS9qbXBidWYuaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCistLS0gYS9pbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbgorKysrIGIvaW5jbHVkZS90ZGVwL2xpYnVud2luZF9pLmguaW4KK0BAIC0zLDcgKzMsOSBAQAorIAorICNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaCIKKysjZWxpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgInRkZXAtYXJtL2xpYnVud2luZF9pLmgiCisgI2VsaWYgZGVmaW5lZCBfX2hwcGFfXworICMgaW5jbHVkZSAidGRlcC1ocHBhL2xpYnVud2luZF9pLmgiCistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTE3MCw2ICsxNzAsMjggQEAgbGlidW53aW5kX2VsZnh4X2xhX1NPVVJDRVMgPSBlbGZ4eC5jCisgbm9pbnN0X0xUTElCUkFSSUVTICs9ICQoTElCVU5XSU5EX0VMRikKKyBsaWJ1bndpbmRfbGFfTElCQUREICs9ICQoTElCVU5XSU5EX0VMRikKKyAKKysjIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgZ28gaW50byBsaWJ1bndpbmQgYW5kIGxpYnVud2luZC1hYXJjaDY0OgorK25vaW5zdF9IRUFERVJTICs9IGFhcmNoNjQvaW5pdC5oIGFhcmNoNjQvb2Zmc2V0cy5oIGFhcmNoNjQvdW53aW5kX2kuaAorK2xpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCisrCWFhcmNoNjQvaXNfZnByZWcuYyBhYXJjaDY0L3JlZ25hbWUuYworKworKyMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZDoKKytsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikJICAgIFwKKysJJChsaWJ1bndpbmRfbGFfU09VUkNFU19sb2NhbCkJCQkJCSAgICBcCisrCWFhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jIAkJICAgIFwKKysJYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMgYWFyY2g2NC9MZ2xvYmFsLmMgYWFyY2g2NC9MaW5pdC5jCSAgICBcCisrCWFhcmNoNjQvTGluaXRfbG9jYWwuYyBhYXJjaDY0L0xpbml0X3JlbW90ZS5jIAkJCSAgICBcCisrCWFhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvTHJlZ3MuYyBhYXJjaDY0L0xyZXN1bWUuYyAJICAgIFwKKysJYWFyY2g2NC9Mc3RlcC5jCisrCisrbGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0ID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19hYXJjaDY0X2NvbW1vbikgXAorKwkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2dlbmVyaWMpCQkJCQkgICAgICBcCisrCWFhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMgYWFyY2g2NC9HZ2V0X3Byb2NfaW5mby5jIAkJICAgICAgXAorKwlhYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYyBhYXJjaDY0L0dnbG9iYWwuYyBhYXJjaDY0L0dpbml0LmMgCSAgICAgIFwKKysJYWFyY2g2NC9HaW5pdF9sb2NhbC5jIGFhcmNoNjQvR2luaXRfcmVtb3RlLmMJCQkgICAgICBcCisrCWFhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jIGFhcmNoNjQvR3JlZ3MuYyBhYXJjaDY0L0dyZXN1bWUuYwkgICAgICBcCisrCWFhcmNoNjQvR3N0ZXAuYworKworICMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLWFybToKKyBub2luc3RfSEVBREVSUyArPSBhcm0vaW5pdC5oIGFybS9vZmZzZXRzLmggYXJtL3Vud2luZF9pLmgKKyBsaWJ1bndpbmRfbGFfU09VUkNFU19hcm1fY29tbW9uID0gJChsaWJ1bndpbmRfbGFfU09VUkNFU19jb21tb24pCSAgICBcCitAQCAtNDE4LDYgKzQ0MCwxOCBAQCBpZiBPU19GUkVFQlNECisgIGxpYnVud2luZF9jb3JlZHVtcF9sYV9TT1VSQ0VTICs9IGNvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19mcmVlYnNkLmMKKyBlbmRpZgorIAorK2lmIEFSQ0hfQUFSQ0g2NAorKyBsaWJfTFRMSUJSQVJJRVMgKz0gbGlidW53aW5kLWFhcmNoNjQubGEKKysgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTERGTEFHUyA9ICQoQ09NTU9OX1NPX0xERkxBR1MpIC12ZXJzaW9uLWluZm8gJChTT1ZFUlNJT04pCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCA9IGxpYnVud2luZC1kd2FyZi1nZW5lcmljLmxhCisrIGxpYnVud2luZF9hYXJjaDY0X2xhX0xJQkFERCArPSBsaWJ1bndpbmQtZWxmNjQubGEKKytpZiAhUkVNT1RFX09OTFkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREICs9IGxpYnVud2luZC5sYSAtbGMKKytlbmRpZgorKyBsaWJ1bndpbmRfc2V0am1wX2xhX1NPVVJDRVMgKz0gYWFyY2g2NC9zaWdsb25nam1wLlMKKytlbHNlCisgaWYgQVJDSF9BUk0KKyAgbGliX0xUTElCUkFSSUVTICs9IGxpYnVud2luZC1hcm0ubGEKKyAgbGlidW53aW5kX2xhX1NPVVJDRVMgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkKK0BAIC01NDUsNiArNTc5LDcgQEAgZW5kaWYgIyBBUkNIX01JUFMKKyBlbmRpZiAjIEFSQ0hfSFBQQQorIGVuZGlmICMgQVJDSF9JQTY0CisgZW5kaWYgIyBBUkNIX0FSTQorK2VuZGlmICMgQVJDSF9BQVJDSDY0CisgCisgIyBsaWJ1bndpbmQtc2V0am1wIGRlcGVuZHMgb24gbGlidW53aW5kLSQoYXJjaCkuIFRoZXJlZm9yZSBtdXN0IGJlIGFkZGVkCisgIyBhdCB0aGUgZW5kLgorQEAgLTU2Nyw3ICs2MDIsOCBAQCBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JCisgQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKKyBub2luc3RfSEVBREVSUyArPSB1bndpbmQvdW53aW5kLWludGVybmFsLmgKKyAKKy1FWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAorK0VYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQpCQkJXAorKwkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19ocHBhKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfaWE2NCkJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX21pcHMpCQkJXAorQEAgLTU3OSw2ICs2MTUsNyBAQCBFWFRSQV9ESVNUID0JJChsaWJ1bndpbmRfbGFfU09VUkNFU19hcm0pCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2xvY2FsKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfZ2VuZXJpYykJCQlcCisrCQkkKGxpYnVud2luZF9hYXJjaDY0X2xhX1NPVVJDRVNfYWFyY2g2NCkJCVwKKyAJCSQobGlidW53aW5kX2FybV9sYV9TT1VSQ0VTX2FybSkJCQlcCisgCQkkKGxpYnVud2luZF9ocHBhX2xhX1NPVVJDRVNfaHBwYSkJCVwKKyAJCSQobGlidW53aW5kX2lhNjRfbGFfU09VUkNFU19pYTY0KQkJXAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdAorK3Vud19jcmVhdGVfYWRkcl9zcGFjZSAodW53X2FjY2Vzc29yc190ICphLCBpbnQgYnl0ZV9vcmRlcikKKyt7CisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrICByZXR1cm4gTlVMTDsKKysjZWxzZQorKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKKysKKysgIC8qIEFBcmNoNjQgc3VwcG9ydHMgbGl0dGxlLWVuZGlhbiBhbmQgYmlnLWVuZGlhbi4gKi8KKysgIGlmIChieXRlX29yZGVyICE9IDAgJiYgYnl0ZV9vcmRlciAhPSBfX0xJVFRMRV9FTkRJQU4KKysgICAgICAmJiBieXRlX29yZGVyICE9IF9fQklHX0VORElBTikKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBhcyA9IG1hbGxvYyAoc2l6ZW9mICgqYXMpKTsKKysgIGlmICghYXMpCisrICAgIHJldHVybiBOVUxMOworKworKyAgbWVtc2V0IChhcywgMCwgc2l6ZW9mICgqYXMpKTsKKysKKysgIGFzLT5hY2MgPSAqYTsKKysKKysgIC8qIERlZmF1bHQgdG8gbGl0dGxlLWVuZGlhbiBmb3IgQUFyY2g2NC4gKi8KKysgIGlmIChieXRlX29yZGVyID09IDAgfHwgYnl0ZV9vcmRlciA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIGFzLT5iaWdfZW5kaWFuID0gMDsKKysgIGVsc2UKKysgICAgYXMtPmJpZ19lbmRpYW4gPSAxOworKworKyAgcmV0dXJuIGFzOworKyNlbmRpZgorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMKK0BAIC0wLDAgKzEsMzkgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19nZXRfcHJvY19pbmZvICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X3Byb2NfaW5mb190ICpwaSkKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgaW50IHJldDsKKysKKysgIHJldCA9IGR3YXJmX21ha2VfcHJvY19pbmZvICgmYy0+ZHdhcmYpOworKyAgaWYgKHJldCA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICAqcGkgPSBjLT5kd2FyZi5waTsKKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnZXRfc2F2ZV9sb2MuYworQEAgLTAsMCArMSwxMDAgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfZ2V0X3NhdmVfbG9jICh1bndfY3Vyc29yX3QgKmN1cnNvciwgaW50IHJlZywgdW53X3NhdmVfbG9jX3QgKnNsb2MpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGR3YXJmX2xvY190IGxvYzsKKysKKysgIHN3aXRjaCAocmVnKQorKyAgICB7CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUEM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfUFNUQVRFOgorKyAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGxvYyA9IERXQVJGX05VTExfTE9DOwkvKiBkZWZhdWx0IHRvICJub3Qgc2F2ZWQiICovCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgIG1lbXNldCAoc2xvYywgMCwgc2l6ZW9mICgqc2xvYykpOworKworKyAgaWYgKERXQVJGX0lTX05VTExfTE9DIChsb2MpKQorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTk9ORTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNpZiAhZGVmaW5lZChVTldfTE9DQUxfT05MWSkKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfUkVHOworKyAgICAgIHNsb2MtPnUucmVnbnVtID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgc2xvYy0+dHlwZSA9IFVOV19TTFRfTUVNT1JZOworKyAgICAgIHNsb2MtPnUuYWRkciA9IERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dnbG9iYWwuYworQEAgLTAsMCArMSw1NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgImR3YXJmX2kuaCIKKysKKytISURERU4gZGVmaW5lX2xvY2sgKGFhcmNoNjRfbG9jayk7CisrSElEREVOIGludCB0ZGVwX2luaXRfZG9uZTsKKysKKytISURERU4gdm9pZAorK3RkZXBfaW5pdCAodm9pZCkKKyt7CisrICBpbnRybWFza190IHNhdmVkX21hc2s7CisrCisrICBzaWdmaWxsc2V0ICgmdW53aV9mdWxsX21hc2spOworKworKyAgbG9ja19hY3F1aXJlICgmYWFyY2g2NF9sb2NrLCBzYXZlZF9tYXNrKTsKKysgIHsKKysgICAgaWYgKHRkZXBfaW5pdF9kb25lKQorKyAgICAgIC8qIGFub3RoZXIgdGhyZWFkIGVsc2UgYmVhdCB1cyB0byBpdC4uLiAqLworKyAgICAgIGdvdG8gb3V0OworKworKyAgICBtaV9pbml0ICgpOworKworKyAgICBkd2FyZl9pbml0ICgpOworKworKyNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisrICAgIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICgpOworKyNlbmRpZgorKyAgICB0ZGVwX2luaXRfZG9uZSA9IDE7CS8qIHNpZ25hbCB0aGF0IHdlJ3JlIGluaXRpYWxpemVkLi4uICovCisrICB9CisrIG91dDoKKysgIGxvY2tfcmVsZWFzZSAoJmFhcmNoNjRfbG9jaywgc2F2ZWRfbWFzayk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2luaXQuYworQEAgLTAsMCArMSwxODcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrI2lmZGVmIFVOV19SRU1PVEVfT05MWQorKworKy8qIHVud19sb2NhbF9hZGRyX3NwYWNlIGlzIGEgTlVMTCBwb2ludGVyIGluIHRoaXMgY2FzZS4gICovCisrUFJPVEVDVEVEIHVud19hZGRyX3NwYWNlX3QgdW53X2xvY2FsX2FkZHJfc3BhY2U7CisrCisrI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK3N0YXRpYyBzdHJ1Y3QgdW53X2FkZHJfc3BhY2UgbG9jYWxfYWRkcl9zcGFjZTsKKysKKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdCB1bndfbG9jYWxfYWRkcl9zcGFjZSA9ICZsb2NhbF9hZGRyX3NwYWNlOworKworK3N0YXRpYyBpbmxpbmUgdm9pZCAqCisrdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCisreworKyAgaWYgKHJlZyA+PSBVTldfQUFSQ0g2NF9YMCAmJiByZWcgPD0gVU5XX0FBUkNINjRfVjMxKQorKyAgICByZXR1cm4gJnVjLT51Y19tY29udGV4dC5yZWdzW3JlZ107CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKysKKysjIGlmZGVmIFVOV19MT0NBTF9PTkxZCisrCisrSElEREVOIHZvaWQgKgorK3RkZXBfdWNfYWRkciAodWNvbnRleHRfdCAqdWMsIGludCByZWcpCisreworKyAgcmV0dXJuIHVjX2FkZHIgKHVjLCByZWcpOworK30KKysKKysjIGVuZGlmIC8qIFVOV19MT0NBTF9PTkxZICovCisrCisrSElEREVOIHVud19keW5faW5mb19saXN0X3QgX1VfZHluX2luZm9fbGlzdDsKKysKKysvKiBYWFggZml4IG1lOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGxvY2F0ZSB0aGUgZHluLWluZm8gbGlzdAorKyAgICAgICBieSBhIHJlbW90ZSB1bndpbmRlci4gIE9uIGlhNjQsIHRoaXMgaXMgZG9uZSB2aWEgYSBzcGVjaWFsCisrICAgICAgIHVud2luZC10YWJsZSBlbnRyeS4gIFBlcmhhcHMgc29tZXRoaW5nIHNpbWlsYXIgY2FuIGJlIGRvbmUgd2l0aAorKyAgICAgICBEV0FSRjIgdW53aW5kIGluZm8uICAqLworKworK3N0YXRpYyB2b2lkCisrcHV0X3Vud2luZF9pbmZvICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcHJvY19pbmZvX3QgKnByb2NfaW5mbywgdm9pZCAqYXJnKQorK3sKKysgIC8qIGl0J3MgYSBuby1vcCAqLworK30KKysKKytzdGF0aWMgaW50CisrZ2V0X2R5bl9pbmZvX2xpc3RfYWRkciAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCAqZHluX2luZm9fbGlzdF9hZGRyLAorKwkJCXZvaWQgKmFyZykKKyt7CisrICAqZHluX2luZm9fbGlzdF9hZGRyID0gKHVud193b3JkX3QpICZfVV9keW5faW5mb19saXN0OworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfbWVtICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGFkZHIsIHVud193b3JkX3QgKnZhbCwgaW50IHdyaXRlLAorKwkgICAgdm9pZCAqYXJnKQorK3sKKysgIGlmICh3cml0ZSkKKysgICAgeworKyAgICAgIERlYnVnICgxNiwgIm1lbVslbHhdIDwtICVseFxuIiwgYWRkciwgKnZhbCk7CisrICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7CisrICAgICAgRGVidWcgKDE2LCAibWVtWyVseF0gLT4gJWx4XG4iLCBhZGRyLCAqdmFsKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWwsIGludCB3cml0ZSwKKysJICAgIHZvaWQgKmFyZykKKyt7CisrICB1bndfd29yZF90ICphZGRyOworKyAgdWNvbnRleHRfdCAqdWMgPSBhcmc7CisrCisrICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQorKyAgICBnb3RvIGJhZHJlZzsKKysKKysgIGlmICghKGFkZHIgPSB1Y19hZGRyICh1YywgcmVnKSkpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKHdyaXRlKQorKyAgICB7CisrICAgICAgKih1bndfd29yZF90ICopIGFkZHIgPSAqdmFsOworKyAgICAgIERlYnVnICgxMiwgIiVzIDwtICVseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksICp2YWwpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfd29yZF90ICopIGFkZHI7CisrICAgICAgRGVidWcgKDEyLCAiJXMgLT4gJWx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwgKnZhbCk7CisrICAgIH0KKysgIHJldHVybiAwOworKworKyBiYWRyZWc6CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICByZXR1cm4gLVVOV19FQkFEUkVHOworK30KKysKKytzdGF0aWMgaW50CisrYWNjZXNzX2ZwcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFsLAorKwkgICAgICBpbnQgd3JpdGUsIHZvaWQgKmFyZykKKyt7CisrICB1Y29udGV4dF90ICp1YyA9IGFyZzsKKysgIHVud19mcHJlZ190ICphZGRyOworKworKyAgaWYgKCF1bndfaXNfZnByZWcgKHJlZykpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKCEoYWRkciA9IHVjX2FkZHIgKHVjLCByZWcpKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAod3JpdGUpCisrICAgIHsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyA8LSAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCisrCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7CisrICAgICAgKih1bndfZnByZWdfdCAqKSBhZGRyID0gKnZhbDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnZhbCA9ICoodW53X2ZwcmVnX3QgKikgYWRkcjsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyAtPiAlMDhseC4lMDhseC4lMDhseFxuIiwgdW53X3JlZ25hbWUgKHJlZyksCisrCSAgICAgKChsb25nICopdmFsKVswXSwgKChsb25nICopdmFsKVsxXSwgKChsb25nICopdmFsKVsyXSk7CisrICAgIH0KKysgIHJldHVybiAwOworKworKyBiYWRyZWc6CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICAvKiBhdHRlbXB0IHRvIGFjY2VzcyBhIG5vbi1wcmVzZXJ2ZWQgcmVnaXN0ZXIgKi8KKysgIHJldHVybiAtVU5XX0VCQURSRUc7CisrfQorKworK3N0YXRpYyBpbnQKKytnZXRfc3RhdGljX3Byb2NfbmFtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBpcCwKKysJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHVud193b3JkX3QgKm9mZnAsCisrCQkgICAgICB2b2lkICphcmcpCisreworKyAgcmV0dXJuIF9VZWxmNjRfZ2V0X3Byb2NfbmFtZSAoYXMsIGdldHBpZCAoKSwgaXAsIGJ1ZiwgYnVmX2xlbiwgb2ZmcCk7CisrfQorKworK0hJRERFTiB2b2lkCisrYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKHZvaWQpCisreworKyAgbWVtc2V0ICgmbG9jYWxfYWRkcl9zcGFjZSwgMCwgc2l6ZW9mIChsb2NhbF9hZGRyX3NwYWNlKSk7CisrICBsb2NhbF9hZGRyX3NwYWNlLmNhY2hpbmdfcG9saWN5ID0gVU5XX0NBQ0hFX0dMT0JBTDsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmZpbmRfcHJvY19pbmZvID0gZHdhcmZfZmluZF9wcm9jX2luZm87CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5wdXRfdW53aW5kX2luZm8gPSBwdXRfdW53aW5kX2luZm87CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5nZXRfZHluX2luZm9fbGlzdF9hZGRyID0gZ2V0X2R5bl9pbmZvX2xpc3RfYWRkcjsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19tZW0gPSBhY2Nlc3NfbWVtOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX3JlZyA9IGFjY2Vzc19yZWc7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfZnByZWcgPSBhY2Nlc3NfZnByZWc7CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5yZXN1bWUgPSBhYXJjaDY0X2xvY2FsX3Jlc3VtZTsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmdldF9wcm9jX25hbWUgPSBnZXRfc3RhdGljX3Byb2NfbmFtZTsKKysgIHVud19mbHVzaF9jYWNoZSAoJmxvY2FsX2FkZHJfc3BhY2UsIDAsIDApOworK30KKysKKysjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYworQEAgLTAsMCArMSw1NSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKyNpbmNsdWRlICJpbml0LmgiCisrCisrI2lmZGVmIFVOV19SRU1PVEVfT05MWQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQorK3sKKysgIHJldHVybiAtVU5XX0VJTlZBTDsKKyt9CisrCisrI2Vsc2UgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9sb2NhbCAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19jb250ZXh0X3QgKnVjKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrCisrICBpZiAoIXRkZXBfaW5pdF9kb25lKQorKyAgICB0ZGVwX2luaXQgKCk7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXApXG4iLCBjKTsKKysKKysgIGMtPmR3YXJmLmFzID0gdW53X2xvY2FsX2FkZHJfc3BhY2U7CisrICBjLT5kd2FyZi5hc19hcmcgPSB1YzsKKysKKysgIHJldHVybiBjb21tb25faW5pdCAoYywgMSk7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYworQEAgLTAsMCArMSw0NSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAiaW5pdC5oIgorKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaW5pdF9yZW1vdGUgKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfYWRkcl9zcGFjZV90IGFzLCB2b2lkICphc19hcmcpCisreworKyNpZmRlZiBVTldfTE9DQUxfT05MWQorKyAgcmV0dXJuIC1VTldfRUlOVkFMOworKyNlbHNlIC8qICFVTldfTE9DQUxfT05MWSAqLworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIGlmICghdGRlcF9pbml0X2RvbmUpCisrICAgIHRkZXBfaW5pdCAoKTsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgYy0+ZHdhcmYuYXMgPSBhczsKKysgIGMtPmR3YXJmLmFzX2FyZyA9IGFzX2FyZzsKKysgIHJldHVybiBjb21tb25faW5pdCAoYywgMCk7CisrI2VuZGlmIC8qICFVTldfTE9DQUxfT05MWSAqLworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dpc19zaWduYWxfZnJhbWUuYworQEAgLTAsMCArMSw2NCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKysvKiBUaGUgcmVzdG9yZXIgc3R1YiB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb3JtOgorKworKyAgIGQyODAxMTY4ICAgICAgICBtb3Z6ICAgIHg4LCAjMHg4YgorKyAgIGQ0MDAwMDAxICAgICAgICBzdmMgICAgICMweDAKKysqLworKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaXNfc2lnbmFsX2ZyYW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrI2lmZGVmIF9fbGludXhfXworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIHVud193b3JkX3QgdzAsIGlwOworKyAgdW53X2FkZHJfc3BhY2VfdCBhczsKKysgIHVud19hY2Nlc3NvcnNfdCAqYTsKKysgIHZvaWQgKmFyZzsKKysgIGludCByZXQ7CisrCisrICBhcyA9IGMtPmR3YXJmLmFzOworKyAgYSA9IHVud19nZXRfYWNjZXNzb3JzIChhcyk7CisrICBhcmcgPSBjLT5kd2FyZi5hc19hcmc7CisrCisrICBpcCA9IGMtPmR3YXJmLmlwOworKworKyAgcmV0ID0gKCphLT5hY2Nlc3NfbWVtKSAoYXMsIGlwLCAmdzAsIDAsIGFyZyk7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIC8qIEZJWE1FOiBkaXN0aW5ndWlzaCAzMmJpdCBpbnNuIHZzIDY0Yml0IHJlZ2lzdGVycy4gICovCisrICBpZiAodzAgIT0gMHhkNDAwMDAwMWQyODAxMTY4KQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAxOworKworKyNlbHNlCisrICByZXR1cm4gLVVOV19FTk9JTkZPOworKyNlbmRpZgorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dyZWdzLmMKK0BAIC0wLDAgKzEsMTEzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytISURERU4gaW50CisrdGRlcF9hY2Nlc3NfcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfd29yZF90ICp2YWxwLAorKwkJIGludCB3cml0ZSkKKyt7CisrICBkd2FyZl9sb2NfdCBsb2MgPSBEV0FSRl9OVUxMX0xPQzsKKysgIHVuc2lnbmVkIGludCBtYXNrOworKworKyAgc3dpdGNoIChyZWcpCisrICAgIHsKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzoKKysgICAgICBtYXNrID0gMSA8PCByZWc7CisrICAgICAgaWYgKHdyaXRlKQorKyAgICAgICAgeworKyAgICAgICAgICBjLT5kd2FyZi5laF9hcmdzW3JlZ10gPSAqdmFscDsKKysgICAgICAgICAgYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayB8PSBtYXNrOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICBlbHNlIGlmICgoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIG1hc2spICE9IDApCisrICAgICAgICB7CisrICAgICAgICAgICp2YWxwID0gYy0+ZHdhcmYuZWhfYXJnc1tyZWddOworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDExOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QQzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QU1RBVEU6CisrICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgVU5XX0FBUkNINjRfU1A6CisrICAgICAgaWYgKHdyaXRlKQorKyAgICAgICAgcmV0dXJuIC1VTldfRVJFQURPTkxZUkVHOworKyAgICAgICp2YWxwID0gYy0+ZHdhcmYuY2ZhOworKyAgICAgIHJldHVybiAwOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgICAgICByZXR1cm4gLVVOV19FQkFEUkVHOworKyAgICB9CisrCisrICBpZiAod3JpdGUpCisrICAgIHJldHVybiBkd2FyZl9wdXQgKCZjLT5kd2FyZiwgbG9jLCAqdmFscCk7CisrICBlbHNlCisrICAgIHJldHVybiBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgbG9jLCB2YWxwKTsKKyt9CisrCisrSElEREVOIGludAorK3RkZXBfYWNjZXNzX2ZwcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLCB1bndfZnByZWdfdCAqdmFscCwKKysJCSAgIGludCB3cml0ZSkKKyt7CisrICBEZWJ1ZyAoMSwgImJhZCByZWdpc3RlciBudW1iZXIgJXVcbiIsIHJlZyk7CisrICByZXR1cm4gLVVOV19FQkFEUkVHOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dyZXN1bWUuYworQEAgLTAsMCArMSwxNzcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIExpbmFybyBMaW1pdGVkCisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgIm9mZnNldHMuaCIKKysKKysjaWZuZGVmIFVOV19SRU1PVEVfT05MWQorKworK0hJRERFTiBpbmxpbmUgaW50CisrYWFyY2g2NF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19jdXJzb3JfdCAqY3Vyc29yLCB2b2lkICphcmcpCisreworKyNpZmRlZiBfX2xpbnV4X18KKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICB1bndfdGRlcF9jb250ZXh0X3QgKnVjID0gYy0+ZHdhcmYuYXNfYXJnOworKworKyAgaWYgKGMtPnNpZ2NvbnRleHRfZm9ybWF0ID09IEFBUkNINjRfU0NGX05PTkUpCisrICAgIHsKKysgICAgICAvKiBTaW5jZSB0aGVyZSBhcmUgbm8gc2lnbmFscyBpbnZvbHZlZCBoZXJlIHdlIHJlc3RvcmUgdGhlIG5vbiBzY3JhdGNoCisrCSByZWdpc3RlcnMgb25seS4gICovCisrICAgICAgdW5zaWduZWQgbG9uZyByZWdzWzExXTsKKysgICAgICByZWdzWzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTldOworKyAgICAgIHJlZ3NbMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07CisrICAgICAgcmVnc1syXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIxXTsKKysgICAgICByZWdzWzNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjJdOworKyAgICAgIHJlZ3NbNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107CisrICAgICAgcmVnc1s1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI0XTsKKysgICAgICByZWdzWzZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjVdOworKyAgICAgIHJlZ3NbN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07CisrICAgICAgcmVnc1s4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI3XTsKKysgICAgICByZWdzWzldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjhdOworKyAgICAgIHJlZ3NbMTBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOyAvKiBMUiAqLworKyAgICAgIHVuc2lnbmVkIGxvbmcgc3AgPSB1Yy0+dWNfbWNvbnRleHQuc3A7CisrCisrICAgICAgc3RydWN0IHJlZ3Nfb3ZlcmxheSB7CisrICAgICAgICBjaGFyIHhbc2l6ZW9mKHJlZ3MpXTsKKysgICAgICB9OworKworKyAgICAgIGFzbSB2b2xhdGlsZSAoCisrICAgICAgICAibGRwIHgxOSwgeDIwLCBbJTBdXG4iCisrICAgICAgICAibGRwIHgyMSwgeDIyLCBbJTAsMTZdXG4iCisrICAgICAgICAibGRwIHgyMywgeDI0LCBbJTAsMzJdXG4iCisrICAgICAgICAibGRwIHgyNSwgeDI2LCBbJTAsNDhdXG4iCisrICAgICAgICAibGRwIHgyNywgeDI4LCBbJTAsNjRdXG4iCisrICAgICAgICAibGRyIHgzMCwgWyUwLDgwXVxuIgorKyAgICAgICAgIm1vdiBzcCwgJTFcbiIKKysgICAgICAgICJyZXQgXG4iCisrICAgICAgICA6CisrICAgICAgICA6ICJyIiAocmVncyksCisrICAgICAgICAgICJyIiAoc3ApLAorKyAgICAgICAgICAibSIgKCooc3RydWN0IHJlZ3Nfb3ZlcmxheSAqKXJlZ3MpCisrICAgICAgKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgc3RydWN0IHNpZ2NvbnRleHQgKnNjID0gKHN0cnVjdCBzaWdjb250ZXh0ICopIGMtPnNpZ2NvbnRleHRfYWRkcjsKKysKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4MSkgc2MtPnJlZ3NbMF0gPSBjLT5kd2FyZi5laF9hcmdzWzBdOworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHgyKSBzYy0+cmVnc1sxXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMV07CisrICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDQpIHNjLT5yZWdzWzJdID0gYy0+ZHdhcmYuZWhfYXJnc1syXTsKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4OCkgc2MtPnJlZ3NbM10gPSBjLT5kd2FyZi5laF9hcmdzWzNdOworKworKyAgICAgIHNjLT5yZWdzWzRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNF07CisrICAgICAgc2MtPnJlZ3NbNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s1XTsKKysgICAgICBzYy0+cmVnc1s2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzZdOworKyAgICAgIHNjLT5yZWdzWzddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbN107CisrICAgICAgc2MtPnJlZ3NbOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s4XTsKKysgICAgICBzYy0+cmVnc1s5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzldOworKyAgICAgIHNjLT5yZWdzWzEwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEwXTsKKysgICAgICBzYy0+cmVnc1sxMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMV07CisrICAgICAgc2MtPnJlZ3NbMTJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTJdOworKyAgICAgIHNjLT5yZWdzWzEzXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzEzXTsKKysgICAgICBzYy0+cmVnc1sxNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNF07CisrICAgICAgc2MtPnJlZ3NbMTVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTVdOworKyAgICAgIHNjLT5yZWdzWzE2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE2XTsKKysgICAgICBzYy0+cmVnc1sxN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxN107CisrICAgICAgc2MtPnJlZ3NbMThdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMThdOworKyAgICAgIHNjLT5yZWdzWzE5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE5XTsKKysgICAgICBzYy0+cmVnc1syMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMF07CisrICAgICAgc2MtPnJlZ3NbMjFdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjFdOworKyAgICAgIHNjLT5yZWdzWzIyXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIyXTsKKysgICAgICBzYy0+cmVnc1syM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syM107CisrICAgICAgc2MtPnJlZ3NbMjRdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjRdOworKyAgICAgIHNjLT5yZWdzWzI1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI1XTsKKysgICAgICBzYy0+cmVnc1syNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNl07CisrICAgICAgc2MtPnJlZ3NbMjddID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjddOworKyAgICAgIHNjLT5yZWdzWzI4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI4XTsKKysgICAgICBzYy0+cmVnc1syOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOV07CisrICAgICAgc2MtPnJlZ3NbMzBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMzBdOworKyAgICAgIHNjLT5zcCA9IHVjLT51Y19tY29udGV4dC5zcDsKKysgICAgICBzYy0+cGMgPSB1Yy0+dWNfbWNvbnRleHQucGM7CisrICAgICAgc2MtPnBzdGF0ZSA9IHVjLT51Y19tY29udGV4dC5wc3RhdGU7CisrCisrICAgICAgYXNtIHZvbGF0aWxlICgKKysgICAgICAgICJtb3Ygc3AsICUwXG4iCisrICAgICAgICAicmV0ICUxXG4iCisrICAgICAgICA6IDogInIiIChjLT5zaWdjb250ZXh0X3NwKSwgInIiIChjLT5zaWdjb250ZXh0X3BjKQorKyAgICAgICk7CisrICAgfQorKyAgdW5yZWFjaGFibGUoKTsKKysjZWxzZQorKyAgcHJpbnRmICgiJXM6IGltcGxlbWVudCBtZVxuIiwgX19GVU5DVElPTl9fKTsKKysjZW5kaWYKKysgIHJldHVybiAtVU5XX0VJTlZBTDsKKyt9CisrCisrI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKysKKytzdGF0aWMgaW5saW5lIHZvaWQKKytlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoc3RydWN0IGN1cnNvciAqYykKKyt7CisrICB1bndfYWRkcl9zcGFjZV90IGFzID0gYy0+ZHdhcmYuYXM7CisrICB2b2lkICphcmcgPSBjLT5kd2FyZi5hc19hcmc7CisrICB1bndfZnByZWdfdCBmcHZhbDsKKysgIHVud193b3JkX3QgdmFsOworKyAgaW50IHJlZzsKKysKKysgIERlYnVnICg4LCAiY29weWluZyBvdXQgY3Vyc29yIHN0YXRlXG4iKTsKKysKKysgIGZvciAocmVnID0gMDsgcmVnIDw9IFVOV19BQVJDSDY0X1BTVEFURTsgKytyZWcpCisrICAgIHsKKysgICAgICBEZWJ1ZyAoMTYsICJjb3B5aW5nICVzICVkXG4iLCB1bndfcmVnbmFtZSAocmVnKSwgcmVnKTsKKysgICAgICBpZiAodW53X2lzX2ZwcmVnIChyZWcpKQorKwl7CisrCSAgaWYgKHRkZXBfYWNjZXNzX2ZwcmVnIChjLCByZWcsICZmcHZhbCwgMCkgPj0gMCkKKysJICAgIGFzLT5hY2MuYWNjZXNzX2ZwcmVnIChhcywgcmVnLCAmZnB2YWwsIDEsIGFyZyk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICBpZiAodGRlcF9hY2Nlc3NfcmVnIChjLCByZWcsICZ2YWwsIDApID49IDApCisrCSAgICBhcy0+YWNjLmFjY2Vzc19yZWcgKGFzLCByZWcsICZ2YWwsIDEsIGFyZyk7CisrCX0KKysgICAgfQorK30KKysKKytQUk9URUNURUQgaW50CisrdW53X3Jlc3VtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgaWYgKCFjLT5kd2FyZi5pcCkKKysgICAgeworKyAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBlYXNpbHkgd2hlbiB0aGUgZnJhbWUtY2hhaW4gZ2V0cyB0cnVuY2F0ZWQKKysJIGR1ZSB0byBiYWQgb3IgbWlzc2luZyB1bndpbmQtaW5mby4gICovCisrICAgICAgRGVidWcgKDEsICJyZWZ1c2luZyB0byByZXN1bWUgZXhlY3V0aW9uIGF0IGFkZHJlc3MgMFxuIik7CisrICAgICAgcmV0dXJuIC1VTldfRUlOVkFMOworKyAgICB9CisrCisrICBlc3RhYmxpc2hfbWFjaGluZV9zdGF0ZSAoYyk7CisrCisrICByZXR1cm4gKCpjLT5kd2FyZi5hcy0+YWNjLnJlc3VtZSkgKGMtPmR3YXJmLmFzLCAodW53X2N1cnNvcl90ICopIGMsCisrCQkJCSAgICAgYy0+ZHdhcmYuYXNfYXJnKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9Hc3RlcC5jCitAQCAtMCwwICsxLDEyOSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAib2Zmc2V0cy5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaGFuZGxlX3NpZ25hbF9mcmFtZSAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGludCByZXQ7CisrICB1bndfd29yZF90IHNjX2FkZHIsIHNwLCBzcF9hZGRyID0gYy0+ZHdhcmYuY2ZhOworKyAgc3RydWN0IGR3YXJmX2xvYyBzcF9sb2MgPSBEV0FSRl9MT0MgKHNwX2FkZHIsIDApOworKworKyAgaWYgKChyZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgc3BfbG9jLCAmc3ApKSA8IDApCisrICAgIHJldHVybiAtVU5XX0VVTlNQRUM7CisrCisrICByZXQgPSB1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpOworKyAgRGVidWcoMSwgInVud19pc19zaWduYWxfZnJhbWUoKT0lZFxuIiwgcmV0KTsKKysKKysgIC8qIFNhdmUgdGhlIFNQIGFuZCBQQyB0byBiZSBhYmxlIHRvIHJldHVybiBleGVjdXRpb24gYXQgdGhpcyBwb2ludAorKyAgICAgbGF0ZXIgaW4gdGltZSAodW53X3Jlc3VtZSkuICAqLworKyAgYy0+c2lnY29udGV4dF9zcCA9IGMtPmR3YXJmLmNmYTsKKysgIGMtPnNpZ2NvbnRleHRfcGMgPSBjLT5kd2FyZi5pcDsKKysKKysgIGlmIChyZXQpCisrICAgIHsKKysgICAgICBjLT5zaWdjb250ZXh0X2Zvcm1hdCA9IEFBUkNINjRfU0NGX0xJTlVYX1JUX1NJR0ZSQU1FOworKyAgICAgIHNjX2FkZHIgPSBzcF9hZGRyICsgc2l6ZW9mIChzaWdpbmZvX3QpICsgTElOVVhfVUNfTUNPTlRFWFRfT0ZGOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiAtVU5XX0VVTlNQRUM7CisrCisrICBjLT5zaWdjb250ZXh0X2FkZHIgPSBzY19hZGRyOworKworKyAgLyogVXBkYXRlIHRoZSBkd2FyZiBjdXJzb3IuCisrICAgICBTZXQgdGhlIGxvY2F0aW9uIG9mIHRoZSByZWdpc3RlcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYWRkcmVzc2VzIG9mIHRoZQorKyAgICAgdWNfbWNvbnRleHQgLyBzaWdjb250ZXh0IHN0cnVjdHVyZSBjb250ZW50cy4gICovCisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDBdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDJdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDNdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gzX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g0X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDVdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDZdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g2X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g3X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDhdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDldICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1g5X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTFfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTJdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxM19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTRfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTVdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxN10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTdfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMThdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxOV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjFdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIxX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyM10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjNfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjRdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI0X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjZfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjddID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI3X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyOF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjlfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMzBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDMwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1NQX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1BDX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUFNUQVRFXSAgPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19QU1RBVEVfT0ZGLCAwKTsKKysKKysgIC8qIFNldCBTUC9DRkEgYW5kIFBDL0lQLiAgKi8KKysgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKKysgIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdLCAmYy0+ZHdhcmYuaXApOworKworKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOworKworKyAgcmV0dXJuIDE7CisrfQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfc3RlcCAodW53X2N1cnNvcl90ICpjdXJzb3IpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIGludCByZXQ7CisrCisrICBEZWJ1ZyAoMSwgIihjdXJzb3I9JXAsIGlwPTB4JTAxNmx4LCBjZmE9MHglMDE2bHgpKVxuIiwKKysJIGMsIGMtPmR3YXJmLmlwLCBjLT5kd2FyZi5jZmEpOworKworKyAgLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHNpZ25hbCBmcmFtZS4gKi8KKysgIGlmICh1bndfaXNfc2lnbmFsX2ZyYW1lIChjdXJzb3IpKQorKyAgICByZXR1cm4gdW53X2hhbmRsZV9zaWduYWxfZnJhbWUgKGN1cnNvcik7CisrCisrICByZXQgPSBkd2FyZl9zdGVwICgmYy0+ZHdhcmYpOworKyAgRGVidWcoMSwgImR3YXJmX3N0ZXAoKT0lZFxuIiwgcmV0KTsKKysKKysgIGlmICh1bmxpa2VseSAocmV0ID09IC1VTldfRVNUT1BVTldJTkQpKQorKyAgICByZXR1cm4gcmV0OworKworKyAgaWYgKHVubGlrZWx5IChyZXQgPCAwKSkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gKGMtPmR3YXJmLmlwID09IDApID8gMCA6IDE7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGNyZWF0ZV9hZGRyX3NwYWNlLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2NyZWF0ZV9hZGRyX3NwYWNlLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdnZXRfcHJvY19pbmZvLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2dldF9zYXZlX2xvYy5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGdsb2JhbC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdnbG9iYWwuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0LmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXQuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0X2xvY2FsLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXRfbG9jYWwuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpbml0X3JlbW90ZS5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdpc19zaWduYWxfZnJhbWUuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xyZWdzLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR3JlZ3MuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xyZXN1bWUuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHcmVzdW1lLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9Mc3RlcC5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdzdGVwLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jCitAQCAtMCwwICsxLDY4IEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorKworKyNkZWZpbmUgVUMoTixYKSBcCisrICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1VDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHVjb250ZXh0X3QsIFgpKQorKworKyNkZWZpbmUgU0MoTixYKSBcCisrICBwcmludGYgKCIjZGVmaW5lIExJTlVYX1NDXyIgTiAiX09GRlx0MHglWFxuIiwgb2Zmc2V0b2YgKHN0cnVjdCBzaWdjb250ZXh0LCBYKSkKKysKKytpbnQKKyttYWluICh2b2lkKQorK3sKKysgIHByaW50ZiAoCisrIi8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqL1xuXG4iCisrCisrIi8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi9cblxuIgorKworKyIvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwidWNvbnRleHRfdFwiOiAgKi9cblxuIik7CisrCisrICBVQyAoIkZMQUdTIiwgdWNfZmxhZ3MpOworKyAgVUMgKCJMSU5LIiwgdWNfbGluayk7CisrICBVQyAoIlNUQUNLIiwgdWNfc3RhY2spOworKyAgVUMgKCJNQ09OVEVYVCIsIHVjX21jb250ZXh0KTsKKysgIFVDICgiU0lHTUFTSyIsIHVjX3NpZ21hc2spOworKworKyAgcHJpbnRmICgiXG4vKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4IFwic3RydWN0IHNpZ2NvbnRleHRcIjogICovXG5cbiIpOworKworKyAgU0MgKCJSMCIsICByZWdzWzBdKTsKKysgIFNDICgiUjEiLCAgcmVnc1sxXSk7CisrICBTQyAoIlIyIiwgIHJlZ3NbMl0pOworKyAgU0MgKCJSMyIsICByZWdzWzNdKTsKKysgIFNDICgiUjQiLCAgcmVnc1s0XSk7CisrICBTQyAoIlI1IiwgIHJlZ3NbNV0pOworKyAgU0MgKCJSNiIsICByZWdzWzZdKTsKKysgIFNDICgiUjciLCAgcmVnc1s3XSk7CisrICBTQyAoIlI4IiwgIHJlZ3NbOF0pOworKyAgU0MgKCJSOSIsICByZWdzWzldKTsKKysgIFNDICgiUjEwIiwgcmVnc1sxMF0pOworKyAgU0MgKCJSMTEiLCByZWdzWzExXSk7CisrICBTQyAoIlIxMiIsIHJlZ3NbMTJdKTsKKysgIFNDICgiUjEzIiwgcmVnc1sxM10pOworKyAgU0MgKCJSMTQiLCByZWdzWzE0XSk7CisrICBTQyAoIlIxNSIsIHJlZ3NbMTVdKTsKKysgIFNDICgiUjE2IiwgcmVnc1sxNl0pOworKyAgU0MgKCJSMTciLCByZWdzWzE3XSk7CisrICBTQyAoIlIxOCIsIHJlZ3NbMThdKTsKKysgIFNDICgiUjE5IiwgcmVnc1sxOV0pOworKyAgU0MgKCJSMjAiLCByZWdzWzIwXSk7CisrICBTQyAoIlIyMSIsIHJlZ3NbMjFdKTsKKysgIFNDICgiUjIyIiwgcmVnc1syMl0pOworKyAgU0MgKCJSMjMiLCByZWdzWzIzXSk7CisrICBTQyAoIlIyNCIsIHJlZ3NbMjRdKTsKKysgIFNDICgiUjI1IiwgcmVnc1syNV0pOworKyAgU0MgKCJSMjYiLCByZWdzWzI2XSk7CisrICBTQyAoIlIyNyIsIHJlZ3NbMjddKTsKKysgIFNDICgiUjI4IiwgcmVnc1syOF0pOworKyAgU0MgKCJSMjkiLCByZWdzWzI5XSk7CisrICBTQyAoIlIzMCIsIHJlZ3NbMzBdKTsKKysgIFNDICgiUjMxIiwgcmVnc1szMV0pOworKworKyAgU0MgKCJQQyIsIHBjKTsKKysgIFNDICgiU1AiLCBzcCk7CisrICBTQyAoIkZhdWx0IiwgZmF1bHRfYWRkcmVzcyk7CisrICBTQyAoInN0YXRlIiwgcHN0YXRlKTsKKysgIHJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L2luaXQuaAorQEAgLTAsMCArMSwxMjcgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrc3RhdGljIGlubGluZSBpbnQKKytjb21tb25faW5pdCAoc3RydWN0IGN1cnNvciAqYywgdW5zaWduZWQgdXNlX3ByZXZfaW5zdHIpCisreworKyAgaW50IHJldCwgaTsKKysKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDFdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YM10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDRdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g1XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDddICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g4XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gzMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfU1ApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1BDKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QU1RBVEVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTldfQUFSQ0g2NF9QU1RBVEUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YwXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjJdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjVdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y2XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WN10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjhdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y5XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjEyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjEyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjhdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjMwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMzFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMzEpOworKworKyAgZm9yIChpID0gVU5XX0FBUkNINjRfUFNUQVRFICsgMTsgaSA8IFVOV19BQVJDSDY0X1YwOyArK2kpCisrICAgIGMtPmR3YXJmLmxvY1tpXSA9IERXQVJGX05VTExfTE9DOworKworKyAgcmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10sICZjLT5kd2FyZi5pcCk7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgIHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfU1BdLCAmYy0+ZHdhcmYuY2ZhKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgYy0+c2lnY29udGV4dF9mb3JtYXQgPSBBQVJDSDY0X1NDRl9OT05FOworKyAgYy0+c2lnY29udGV4dF9hZGRyID0gMDsKKysgIGMtPnNpZ2NvbnRleHRfc3AgPSAwOworKyAgYy0+c2lnY29udGV4dF9wYyA9IDA7CisrCisrICBjLT5kd2FyZi5hcmdzX3NpemUgPSAwOworKyAgYy0+ZHdhcmYucmV0X2FkZHJfY29sdW1uID0gMDsKKysgIGMtPmR3YXJmLnN0YXNoX2ZyYW1lcyA9IDA7CisrICBjLT5kd2FyZi51c2VfcHJldl9pbnN0ciA9IHVzZV9wcmV2X2luc3RyOworKyAgYy0+ZHdhcmYucGlfdmFsaWQgPSAwOworKyAgYy0+ZHdhcmYucGlfaXNfZHluYW1pYyA9IDA7CisrICBjLT5kd2FyZi5oaW50ID0gMDsKKysgIGMtPmR3YXJmLnByZXZfcnMgPSAwOworKworKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvaXNfZnByZWcuYworQEAgLTAsMCArMSwzMiBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2lzX2ZwcmVnIChpbnQgcmVnbnVtKQorK3sKKysgIHJldHVybiAocmVnbnVtID49IFVOV19BQVJDSDY0X1YwICYmIHJlZ251bSA8PSBVTldfQUFSQ0g2NF9WMzEpOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L29mZnNldHMuaAorQEAgLTAsMCArMSw0OSBAQAorKy8qIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zOiAqLworKworKy8qIERlZmluZSB2YXJpb3VzIHN0cnVjdHVyZSBvZmZzZXRzIHRvIHNpbXBsaWZ5IGNyb3NzLWNvbXBpbGF0aW9uLiAgKi8KKysKKysvKiBPZmZzZXRzIGZvciBBQXJjaDY0IExpbnV4ICJ1Y29udGV4dF90IjogICovCisrCisrI2RlZmluZSBMSU5VWF9VQ19GTEFHU19PRkYJMHgwCisrI2RlZmluZSBMSU5VWF9VQ19MSU5LX09GRgkweDgKKysjZGVmaW5lIExJTlVYX1VDX1NUQUNLX09GRgkweDEwCisrI2RlZmluZSBMSU5VWF9VQ19TSUdNQVNLX09GRgkweDI4CisrI2RlZmluZSBMSU5VWF9VQ19NQ09OVEVYVF9PRkYJMHhiMAorKworKy8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggInN0cnVjdCBzaWdjb250ZXh0IjogICovCisrCisrI2RlZmluZSBMSU5VWF9TQ19GQVVMVEFERFJFU1NfT0ZGCTB4MDAKKysjZGVmaW5lIExJTlVYX1NDX1gwX09GRgkJMHgwMDgKKysjZGVmaW5lIExJTlVYX1NDX1gxX09GRgkJMHgwMTAKKysjZGVmaW5lIExJTlVYX1NDX1gyX09GRgkJMHgwMTgKKysjZGVmaW5lIExJTlVYX1NDX1gzX09GRgkJMHgwMjAKKysjZGVmaW5lIExJTlVYX1NDX1g0X09GRgkJMHgwMjgKKysjZGVmaW5lIExJTlVYX1NDX1g1X09GRgkJMHgwMzAKKysjZGVmaW5lIExJTlVYX1NDX1g2X09GRgkJMHgwMzgKKysjZGVmaW5lIExJTlVYX1NDX1g3X09GRgkJMHgwNDAKKysjZGVmaW5lIExJTlVYX1NDX1g4X09GRgkJMHgwNDgKKysjZGVmaW5lIExJTlVYX1NDX1g5X09GRgkJMHgwNTAKKysjZGVmaW5lIExJTlVYX1NDX1gxMF9PRkYJMHgwNTgKKysjZGVmaW5lIExJTlVYX1NDX1gxMV9PRkYJMHgwNjAKKysjZGVmaW5lIExJTlVYX1NDX1gxMl9PRkYJMHgwNjgKKysjZGVmaW5lIExJTlVYX1NDX1gxM19PRkYJMHgwNzAKKysjZGVmaW5lIExJTlVYX1NDX1gxNF9PRkYJMHgwNzgKKysjZGVmaW5lIExJTlVYX1NDX1gxNV9PRkYJMHgwODAKKysjZGVmaW5lIExJTlVYX1NDX1gxNl9PRkYJMHgwODgKKysjZGVmaW5lIExJTlVYX1NDX1gxN19PRkYJMHgwOTAKKysjZGVmaW5lIExJTlVYX1NDX1gxOF9PRkYJMHgwOTgKKysjZGVmaW5lIExJTlVYX1NDX1gxOV9PRkYJMHgwYTAKKysjZGVmaW5lIExJTlVYX1NDX1gyMF9PRkYJMHgwYTgKKysjZGVmaW5lIExJTlVYX1NDX1gyMV9PRkYJMHgwYjAKKysjZGVmaW5lIExJTlVYX1NDX1gyMl9PRkYJMHgwYjgKKysjZGVmaW5lIExJTlVYX1NDX1gyM19PRkYJMHgwYzAKKysjZGVmaW5lIExJTlVYX1NDX1gyNF9PRkYJMHgwYzgKKysjZGVmaW5lIExJTlVYX1NDX1gyNV9PRkYJMHgwZDAKKysjZGVmaW5lIExJTlVYX1NDX1gyNl9PRkYJMHgwZDgKKysjZGVmaW5lIExJTlVYX1NDX1gyN19PRkYJMHgwZTAKKysjZGVmaW5lIExJTlVYX1NDX1gyOF9PRkYJMHgwZTgKKysjZGVmaW5lIExJTlVYX1NDX1gyOV9PRkYJMHgwZjAKKysjZGVmaW5lIExJTlVYX1NDX1gzMF9PRkYJMHgwZjgKKysjZGVmaW5lIExJTlVYX1NDX1NQX09GRgkJMHgxMDAKKysjZGVmaW5lIExJTlVYX1NDX1BDX09GRgkJMHgxMDgKKysjZGVmaW5lIExJTlVYX1NDX1BTVEFURV9PRkYJMHgxMTAKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L3JlZ25hbWUuYworQEAgLTAsMCArMSwxMDYgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJlZ25hbWVbXSA9CisrICB7CisrICAgIFtVTldfQUFSQ0g2NF9YMF0gPSAieDAiLAorKyAgICBbVU5XX0FBUkNINjRfWDFdID0gIngxIiwKKysgICAgW1VOV19BQVJDSDY0X1gyXSA9ICJ4MiIsCisrICAgIFtVTldfQUFSQ0g2NF9YM10gPSAieDMiLAorKyAgICBbVU5XX0FBUkNINjRfWDRdID0gIng0IiwKKysgICAgW1VOV19BQVJDSDY0X1g1XSA9ICJ4NSIsCisrICAgIFtVTldfQUFSQ0g2NF9YNl0gPSAieDYiLAorKyAgICBbVU5XX0FBUkNINjRfWDddID0gIng3IiwKKysgICAgW1VOV19BQVJDSDY0X1g4XSA9ICJ4OCIsCisrICAgIFtVTldfQUFSQ0g2NF9YOV0gPSAieDkiLAorKyAgICBbVU5XX0FBUkNINjRfWDEwXSA9ICJ4MTAiLAorKyAgICBbVU5XX0FBUkNINjRfWDExXSA9ICJ4MTEiLAorKyAgICBbVU5XX0FBUkNINjRfWDEyXSA9ICJ4MTIiLAorKyAgICBbVU5XX0FBUkNINjRfWDEzXSA9ICJ4MTMiLAorKyAgICBbVU5XX0FBUkNINjRfWDE0XSA9ICJ4MTQiLAorKyAgICBbVU5XX0FBUkNINjRfWDE1XSA9ICJ4MTUiLAorKyAgICBbVU5XX0FBUkNINjRfWDE2XSA9ICJpcDAiLAorKyAgICBbVU5XX0FBUkNINjRfWDE3XSA9ICJpcDEiLAorKyAgICBbVU5XX0FBUkNINjRfWDE4XSA9ICJ4MTgiLAorKyAgICBbVU5XX0FBUkNINjRfWDE5XSA9ICJ4MTkiLAorKyAgICBbVU5XX0FBUkNINjRfWDIwXSA9ICJ4MjAiLAorKyAgICBbVU5XX0FBUkNINjRfWDIxXSA9ICJ4MjEiLAorKyAgICBbVU5XX0FBUkNINjRfWDIyXSA9ICJ4MjIiLAorKyAgICBbVU5XX0FBUkNINjRfWDIzXSA9ICJ4MjMiLAorKyAgICBbVU5XX0FBUkNINjRfWDI0XSA9ICJ4MjQiLAorKyAgICBbVU5XX0FBUkNINjRfWDI1XSA9ICJ4MjUiLAorKyAgICBbVU5XX0FBUkNINjRfWDI2XSA9ICJ4MjYiLAorKyAgICBbVU5XX0FBUkNINjRfWDI3XSA9ICJ4MjciLAorKyAgICBbVU5XX0FBUkNINjRfWDI4XSA9ICJ4MjgiLAorKyAgICBbVU5XX0FBUkNINjRfWDI5XSA9ICJmcCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMzBdID0gImxyIiwKKysgICAgW1VOV19BQVJDSDY0X1NQXSA9ICJzcCIsCisrICAgIFtVTldfQUFSQ0g2NF9QQ10gPSAicGMiLAorKyAgICBbVU5XX0FBUkNINjRfVjBdID0gInYwIiwKKysgICAgW1VOV19BQVJDSDY0X1YxXSA9ICJ2MSIsCisrICAgIFtVTldfQUFSQ0g2NF9WMl0gPSAidjIiLAorKyAgICBbVU5XX0FBUkNINjRfVjNdID0gInYzIiwKKysgICAgW1VOV19BQVJDSDY0X1Y0XSA9ICJ2NCIsCisrICAgIFtVTldfQUFSQ0g2NF9WNV0gPSAidjUiLAorKyAgICBbVU5XX0FBUkNINjRfVjZdID0gInY2IiwKKysgICAgW1VOV19BQVJDSDY0X1Y3XSA9ICJ2NyIsCisrICAgIFtVTldfQUFSQ0g2NF9WOF0gPSAidjgiLAorKyAgICBbVU5XX0FBUkNINjRfVjldID0gInY5IiwKKysgICAgW1VOV19BQVJDSDY0X1YxMF0gPSAidjEwIiwKKysgICAgW1VOV19BQVJDSDY0X1YxMV0gPSAidjExIiwKKysgICAgW1VOV19BQVJDSDY0X1YxMl0gPSAidjEyIiwKKysgICAgW1VOV19BQVJDSDY0X1YxM10gPSAidjEzIiwKKysgICAgW1VOV19BQVJDSDY0X1YxNF0gPSAidjE0IiwKKysgICAgW1VOV19BQVJDSDY0X1YxNV0gPSAidjE1IiwKKysgICAgW1VOV19BQVJDSDY0X1YxNl0gPSAidjE2IiwKKysgICAgW1VOV19BQVJDSDY0X1YxN10gPSAidjE3IiwKKysgICAgW1VOV19BQVJDSDY0X1YxOF0gPSAidjE4IiwKKysgICAgW1VOV19BQVJDSDY0X1YxOV0gPSAidjE5IiwKKysgICAgW1VOV19BQVJDSDY0X1YyMF0gPSAidjIwIiwKKysgICAgW1VOV19BQVJDSDY0X1YyMV0gPSAidjIxIiwKKysgICAgW1VOV19BQVJDSDY0X1YyMl0gPSAidjIyIiwKKysgICAgW1VOV19BQVJDSDY0X1YyM10gPSAidjIzIiwKKysgICAgW1VOV19BQVJDSDY0X1YyNF0gPSAidjI0IiwKKysgICAgW1VOV19BQVJDSDY0X1YyNV0gPSAidjI1IiwKKysgICAgW1VOV19BQVJDSDY0X1YyNl0gPSAidjI2IiwKKysgICAgW1VOV19BQVJDSDY0X1YyN10gPSAidjI3IiwKKysgICAgW1VOV19BQVJDSDY0X1YyOF0gPSAidjI4IiwKKysgICAgW1VOV19BQVJDSDY0X1YyOV0gPSAidjI5IiwKKysgICAgW1VOV19BQVJDSDY0X1YzMF0gPSAidjMwIiwKKysgICAgW1VOV19BQVJDSDY0X1YzMV0gPSAidjMxIiwKKysgICAgW1VOV19BQVJDSDY0X0ZQU1JdID0gImZwc3IiLAorKyAgICBbVU5XX0FBUkNINjRfRlBDUl0gPSAiZnBjciIsCisrICB9OworKworK1BST1RFQ1RFRCBjb25zdCBjaGFyICoKKyt1bndfcmVnbmFtZSAodW53X3JlZ251bV90IHJlZykKKyt7CisrICBpZiAocmVnIDwgKHVud19yZWdudW1fdCkgQVJSQVlfU0laRSAocmVnbmFtZSkgJiYgcmVnbmFtZVtyZWddICE9IE5VTEwpCisrICAgIHJldHVybiByZWduYW1lW3JlZ107CisrICBlbHNlCisrICAgIHJldHVybiAiPz8/IjsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9zaWdsb25nam1wLlMKK0BAIC0wLDAgKzEsMTIgQEAKKysJLyogRHVtbXkgaW1wbGVtZW50YXRpb24gZm9yIG5vdy4gICovCisrCisrCS5nbG9iYWwgX1VJX3NpZ2xvbmdqbXBfY29udAorKwkuZ2xvYmFsIF9VSV9sb25nam1wX2NvbnQKKysKKytfVUlfc2lnbG9uZ2ptcF9jb250OgorK19VSV9sb25nam1wX2NvbnQ6CisrCXJldAorKyNpZmRlZiBfX2xpbnV4X18KKysgLyogV2UgZG8gbm90IG5lZWQgZXhlY3V0YWJsZSBzdGFjay4gICovCisrIC5zZWN0aW9uICAubm90ZS5HTlUtc3RhY2ssIiIsJXByb2diaXRzCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC91bndpbmRfaS5oCitAQCAtMCwwICsxLDQzIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgdW53aW5kX2lfaAorKyNkZWZpbmUgdW53aW5kX2lfaAorKworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaW5jbHVkZSA8bGlidW53aW5kLWFhcmNoNjQuaD4KKysKKysjaW5jbHVkZSAibGlidW53aW5kX2kuaCIKKysKKysjZGVmaW5lIGFhcmNoNjRfbG9jawkJCVVOV19PQkoobG9jaykKKysjZGVmaW5lIGFhcmNoNjRfbG9jYWxfcmVzdW1lCQlVTldfT0JKKGxvY2FsX3Jlc3VtZSkKKysjZGVmaW5lIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0CVVOV19PQkoobG9jYWxfYWRkcl9zcGFjZV9pbml0KQorKworK2V4dGVybiB2b2lkIGFhcmNoNjRfbG9jYWxfYWRkcl9zcGFjZV9pbml0ICh2b2lkKTsKKytleHRlcm4gaW50IGFhcmNoNjRfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfY3Vyc29yX3QgKmN1cnNvciwKKysJCQkgICAgIHZvaWQgKmFyZyk7CisrCisrI2VuZGlmIC8qIHVud2luZF9pX2ggKi8KKy0tLSBhL3NyYy9jb3JlZHVtcC9fVUNEX2FjY2Vzc19yZWdfbGludXguYworKysrIGIvc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jCitAQCAtMzksNyArMzksMTAgQEAgX1VDRF9hY2Nlc3NfcmVnICh1bndfYWRkcl9zcGFjZV90IGFzLAorICAgICAgIHJldHVybiAtVU5XX0VJTlZBTDsKKyAgICAgfQorIAorLSNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQorKyNpZiBkZWZpbmVkKFVOV19UQVJHRVRfQUFSQ0g2NCkKKysgIGlmIChyZWdudW0gPCAwIHx8IHJlZ251bSA+PSBVTldfQUFSQ0g2NF9GUENSKQorKyAgICBnb3RvIGJhZHJlZzsKKysjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfQVJNKQorICAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IDE2KQorICAgICBnb3RvIGJhZHJlZzsKKyAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfU0gpCistLS0gYS9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCisrKysgYi9zcmMvcHRyYWNlL19VUFRfcmVnX29mZnNldC5jCitAQCAtMSw2ICsxLDcgQEAKKyAvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCisgCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKyAKKyBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisgCitAQCAtNTAxLDYgKzUwMiw0MSBAQCBjb25zdCBpbnQgX1VQVF9yZWdfb2Zmc2V0W1VOV19SRUdfTEFTVCArCisgICAgIFtVTldfQVJNX1IxNV0gICAgICA9IDB4M2MsCisgI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX01JUFMpCisgI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX1NIKQorKyNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9BQVJDSDY0KQorKyAgICBbVU5XX0FBUkNINjRfWDBdICAgICAgID0gMHgwMCwKKysgICAgW1VOV19BQVJDSDY0X1gxXSAgICAgICA9IDB4MDgsCisrICAgIFtVTldfQUFSQ0g2NF9YMl0gICAgICAgPSAweDEwLAorKyAgICBbVU5XX0FBUkNINjRfWDNdICAgICAgID0gMHgxOCwKKysgICAgW1VOV19BQVJDSDY0X1g0XSAgICAgICA9IDB4MjAsCisrICAgIFtVTldfQUFSQ0g2NF9YNV0gICAgICAgPSAweDI4LAorKyAgICBbVU5XX0FBUkNINjRfWDZdICAgICAgID0gMHgzMCwKKysgICAgW1VOV19BQVJDSDY0X1g3XSAgICAgICA9IDB4MzgsCisrICAgIFtVTldfQUFSQ0g2NF9YOF0gICAgICAgPSAweDQwLAorKyAgICBbVU5XX0FBUkNINjRfWDldICAgICAgID0gMHg0OCwKKysgICAgW1VOV19BQVJDSDY0X1gxMF0gICAgICA9IDB4NTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTFdICAgICAgPSAweDU4LAorKyAgICBbVU5XX0FBUkNINjRfWDEyXSAgICAgID0gMHg2MCwKKysgICAgW1VOV19BQVJDSDY0X1gxM10gICAgICA9IDB4NjgsCisrICAgIFtVTldfQUFSQ0g2NF9YMTRdICAgICAgPSAweDcwLAorKyAgICBbVU5XX0FBUkNINjRfWDE1XSAgICAgID0gMHg3OCwKKysgICAgW1VOV19BQVJDSDY0X1gxNl0gICAgICA9IDB4ODAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTddICAgICAgPSAweDg4LAorKyAgICBbVU5XX0FBUkNINjRfWDE4XSAgICAgID0gMHg5MCwKKysgICAgW1VOV19BQVJDSDY0X1gxOV0gICAgICA9IDB4OTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjBdICAgICAgPSAweGEwLAorKyAgICBbVU5XX0FBUkNINjRfWDIxXSAgICAgID0gMHhhOCwKKysgICAgW1VOV19BQVJDSDY0X1gyMl0gICAgICA9IDB4YjAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjNdICAgICAgPSAweGI4LAorKyAgICBbVU5XX0FBUkNINjRfWDI0XSAgICAgID0gMHhjMCwKKysgICAgW1VOV19BQVJDSDY0X1gyNV0gICAgICA9IDB4YzgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjZdICAgICAgPSAweGQwLAorKyAgICBbVU5XX0FBUkNINjRfWDI3XSAgICAgID0gMHhkOCwKKysgICAgW1VOV19BQVJDSDY0X1gyOF0gICAgICA9IDB4ZTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjldICAgICAgPSAweGU4LAorKyAgICBbVU5XX0FBUkNINjRfWDMwXSAgICAgID0gMHhmMCwKKysgICAgW1VOV19BQVJDSDY0X1NQXSAgICAgICA9IDB4ZjgsCisrICAgIFtVTldfQUFSQ0g2NF9QQ10gICAgICAgPSAweDEwMCwKKysgICAgW1VOV19BQVJDSDY0X1BTVEFURV0gICA9IDB4MTA4CisgI2Vsc2UKKyAjIGVycm9yIEZpeCBtZS4KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBmNWMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9GaXgtdGVzdC1jYXNlLWxpbmstZmFpbHVyZS1vbi1Qb3dlclBDLXN5c3RlbXMtd2l0aC1BbHRpdmVjLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ZpeCB0ZXN0IGNhc2UgbGluayBmYWlsdXJlIG9uIFBvd2VyUEMgc3lzdGVtcyB3aXRoIEFsdGl2ZWMKKworVXBzdHJlYW0tU3RhdHVzOmJhY2twb3J0CisKK09uIHN5c3RlbXMgd2hlcmUgdGhlIHN5c3RlbSBjb21waWxlciBzdXBwb3J0cyBBbHRpdmVjIGJ5IGRlZmF1bHQsCit0aGUgbGlidW53aW5kIE1ha2VmaWxlIHdpbGwgYXR0ZW1wdCB0byBidWlsZCBhbiBleHRyYSB0ZXN0IGNhc2UKK3BwYzY0LXRlc3QtYWx0aXZlYy4gIFVuZm9ydHVuYXRlbHksIHRoZSBsaW5rIHN0ZXAgd2lsbCBmYWlsIHNpbmNlCit0aGUgTWFrZWZpbGUgZG9lcyBub3QgYWN0dWFsbHkgbGluayBhZ2FpbnN0IHRoZSBsaWJ1bndpbmQgbGlicmFyeS4KKworRml4ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSBMREFERCBtYWNyby4KKworU2lnbmVkLW9mZi1ieTogVWxyaWNoIFdlaWdhbmQgPGFkZHJlc3NAaGlkZGVuPgorLS0tCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDBlMzA1MzYuLjljNzY2MjggMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yMDEsMyArMjAxLDQgQEAgTGlhNjRfdGVzdF9yYnNfTERBREQgPSAkKExJQlVOV0lORF9sb2NhbCkKKyBMaWE2NF90ZXN0X3JlYWRvbmx5X0xEQUREID0gJChMSUJVTldJTkRfbG9jYWwpCisgaWE2NF90ZXN0X2R5bjFfTERBREQgPSAkKExJQlVOV0lORCkKKyBpYTY0X3Rlc3Rfc2lnX0xEQUREID0gJChMSUJVTldJTkQpCisrcHBjNjRfdGVzdF9hbHRpdmVjX0xEQUREID0gJChMSUJVTldJTkQpCistLSAKKzEuOC41CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1NWM5MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNTA4Y2ExN2E3YmUwMWQxY2M5NjBkOWEwN2QwYWY0NTEzOTQ4ZmI4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+CitEYXRlOiBGcmksIDI3IEp1biAyMDE0IDA4OjQwOjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIExpbmsgbGlidW53aW5kIHRvIGxpYmdjY19zIHJhdGhlciB0aGFuIGxpYmdjYworCitGb3Igc29tZSBhcmNoaXRlY3R1cmVzLCAtbGdjYyBhbmQgLWxnY2NfcyBhcmUgbm90IGVxdWl2YWxlbnQuIE9uIEFSTSBmb3IKK2V4YW1wbGUsIGxpYmdjY19zLnNvLjEgY29udGFpbnMgc29tZSBzeW1ib2xzIG5lZWRlZCBieSBsaWJ1bndpbmQgd2hpY2gKK2FyZSBub3QgcHJlc2VudCBpbiBsaWJnY2MuCisKK1RoaXMgY2F1c2VzIHRoZSBmb2xsb3dpbmcgbGluayBlcnJvciB3aGVuIGJ1aWxkaW5nIHRoZSBYLk9yZyBYIHNlcnZlcgord2l0aCBsaWJ1bndpbmQgc3VwcG9ydDoKKworCSAgQ0NMRCAgICAgWG9yZworCS91c3IvbGliL2xpYnVud2luZC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZWFiaV91bndpbmRfY3BwX3ByMCcKKwkvdXNyL2xpYi9saWJ1bndpbmQuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fYWVhYmlfdW53aW5kX2NwcF9wcjEnCisKK0xpbmtpbmcgYWdhaW5zdCBsaWJnY2NfcyBleHBsaWNpdGx5IHNvbHZlcyB0aGlzIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2ZmZTE5Yi4uM2JlYjVmMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjU4LDcgKzI1OCw3IEBAIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1sjaWZuZGVmIF9fSU5URUxfQ09NUElMRVIKKyAKKyBpZiB0ZXN0IHgkR0NDID0geHllcyAtYSB4JGludGVsX2NvbXBpbGVyICE9IHh5ZXM7IHRoZW4KKyAgIENGTEFHUz0iJHtDRkxBR1N9IC1mZXhjZXB0aW9ucyAtV2FsbCAtV3NpZ24tY29tcGFyZSIKKy0gIExJQkNSVFM9Ii1sZ2NjIgorKyAgTElCQ1JUUz0iLWxnY2NfcyIKKyBmaQorIEFDX01TR19SRVNVTFQoWyRpbnRlbF9jb21waWxlcl0pCisgCistLSAKKzIuMy4yCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjhiNzAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9TdXBwb3J0LWJ1aWxkaW5nLXdpdGgtb2xkZXItY29tcGlsZXJzLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gMTBiMDY0ZmZlOTAyZDVhZjMxYmI0OWJkOGU0ZjAzYzU0NWY4ZDQ2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KK0RhdGU6IFR1ZSwgMTMgTm92IDIwMTIgMTE6MTk6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBidWlsZGluZyB3aXRoIG9sZGVyIGNvbXBpbGVycy4KKworQWRkIGEgY2hlY2sgZm9yIF9fYnVpbHRpbl91bnJlYWNoYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCisgaW5jbHVkZS9saWJ1bndpbmRfaS5oIHwgICAgNiArKysrKysKKyBzcmMvYXJtL0dyZXN1bWUuYyAgICAgfCAgICAyICstCisgc3JjL3NoL0dyZXN1bWUuYyAgICAgIHwgICAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODUsNiArMjg1LDE3IEBAIGlmIHRlc3QgeCRoYXZlX19idWlsdGluX19fY2xlYXJfY2FjaGUgPQorIGZpCisgQUNfTVNHX1JFU1VMVChbJGhhdmVfX2J1aWx0aW5fX19jbGVhcl9jYWNoZV0pCisgCisrQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19idWlsdGluX3VucmVhY2hhYmxlXSkKKytBQ19MSU5LX0lGRUxTRSgKKysgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tfX2J1aWx0aW5fdW5yZWFjaGFibGUoKV1dKV0sCisrICBbaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZT15ZXNdLAorKyAgW2hhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGU9bm9dKQorK2lmIHRlc3QgeCRoYXZlX19idWlsdGluX3VucmVhY2hhYmxlID0geHllczsgdGhlbgorKyAgQUNfREVGSU5FKFtIQVZFX19CVUlMVElOX1VOUkVBQ0hBQkxFXSwgWzFdLAorKyAgICAgICAgICAgIFtEZWZpbmVkIGlmIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpIGlzIGF2YWlsYWJsZV0pCisrZmkKKytBQ19NU0dfUkVTVUxUKFskaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZV0pCisrCisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgX19zeW5jIGF0b21pY3NdKQorIEFDX0xJTktfSUZFTFNFKAorICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworLS0tIGEvaW5jbHVkZS9saWJ1bndpbmRfaS5oCisrKysgYi9pbmNsdWRlL2xpYnVud2luZF9pLmgKK0BAIC03Miw2ICs3MiwxMiBAQCBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFCisgIyBlbmRpZgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKEhBVkVfX0JVSUxUSU5fVU5SRUFDSEFCTEUpCisrIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKQorKyNlbHNlCisrIyBkZWZpbmUgdW5yZWFjaGFibGUoKSBkbyB7IH0gd2hpbGUgKDEpCisrI2VuZGlmCisrCisgI2lmZGVmIERFQlVHCisgIyBkZWZpbmUgVU5XX0RFQlVHCTEKKyAjZWxzZQorLS0tIGEvc3JjL2FybS9HcmVzdW1lLmMKKysrKyBiL3NyYy9hcm0vR3Jlc3VtZS5jCitAQCAtOTYsNyArOTYsNyBAQCBhcm1fbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1CisgCTogOiAiciIgKGMtPnNpZ2NvbnRleHRfc3ApLCAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisgICAgICAgKTsKKyAgICB9CistICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKKysgIHVucmVhY2hhYmxlKCk7CisgI2Vsc2UKKyAgIHByaW50ZiAoIiVzOiBpbXBsZW1lbnQgbWVcbiIsIF9fRlVOQ1RJT05fXyk7CisgI2VuZGlmCistLS0gYS9zcmMvc2gvR3Jlc3VtZS5jCisrKysgYi9zcmMvc2gvR3Jlc3VtZS5jCitAQCAtMTA5LDcgKzEwOSw3IEBAIHNoX2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW4KKyAJICAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisgICAgICAgKTsKKyAgICB9CistICBfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTsKKysgIHVucmVhY2hhYmxlKCk7CisgI2VuZGlmCisgICByZXR1cm4gLVVOV19FSU5WQUw7CisgfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2MGFmMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC5pbmMKQEAgLTAsMCArMSwzMSBAQAorREVTQ1JJUFRJT04gPSAiYSBwb3J0YWJsZSBhbmQgZWZmaWNpZW50IEMgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIChBUEkpIHRvIGRldGVybWluZSB0aGUgY2FsbC1jaGFpbiBvZiBhIHByb2dyYW0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvbGlidW53aW5kIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zZmNlZDExZDZkZjcxOWI0NzUwNTgzN2E1MWMxNmFlNSIKK0RFUEVORFMgKz0gImxpYmF0b21pYy1vcHMiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiLS1lbmFibGUtbWluaWRlYnVnaW5mbywtLWRpc2FibGUtbWluaWRlYnVnaW5mbyx4eiIKKworRVhUUkFfT0VDT05GX2FybSA9ICItLWVuYWJsZS1kZWJ1Zy1mcmFtZSIKK0VYVFJBX09FQ09ORl9hYXJjaDY0ID0gIi0tZW5hYmxlLWRlYnVnLWZyYW1lIgorCitDRkxBR1MgKz0gIiR7QVRPTUlDT1BTfSIKK0FUT01JQ09QU19hcm12NSA9ICItREFPX1VTRV9QVEhSRUFEX0RFRlM9MSIKK0FUT01JQ09QU19hcm12NCA9ICItREFPX1VTRV9QVEhSRUFEX0RFRlM9MSIKK0FUT01JQ09QUyA/PSAiIgorCitMREZMQUdTX2FwcGVuZF94ODYgPSAiIC1mdXNlLWxkPWdvbGQiCitMREZMQUdTX2FwcGVuZF94ODYtNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0xERkxBR1NfYXBwZW5kX2FybSA9ICIgLWZ1c2UtbGQ9Z29sZCIKK0xERkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0xERkxBR1NfYXBwZW5kX3Bvd2VycGMgPSAiIC1mdXNlLWxkPWdvbGQiCitMREZMQUdTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1mdXNlLWxkPWdvbGQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4MmMxYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZF8xLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBsaWJ1bndpbmQuaW5jCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBcCisgICAgZmlsZTovL0FBcmNoNjQtcG9ydC5wYXRjaCBcCisgICAgZmlsZTovL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2ggXAorICAgIGZpbGU6Ly9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLUludmFsaWQtZHdhcmYtb3Bjb2Rlcy1jYW4tY2F1c2UtcmVmZXJlbmNlcy1iZXlvbmQtdGgucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmI0ZWEyZjZmYmJlNDViZjAzMmNkMzZlNTg2ODgzY2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZTBmY2FlMmE4NjZkZTlkMzk0MmM2Njk5NWU0YjQ2MDIzMDQ0Njg4N2RiZGFiMzAyZDQxYThhZWU4ZDA5YSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQwYmJkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvMDAwMS11YXRvbWljLVNwZWNpZnktY29tcGxldGUtdHlwZXMtZm9yLWF0b21pYy1mdW5jdGlvbi1jLnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitGcm9tIDZhZjc5MDgxOGQwNzRjMTAzYzQ3OTdmMWNlNzY0ODk2ZjE4M2UwMjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMiBBdWcgMjAxNSAyMTozNTowMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1YXRvbWljOiBTcGVjaWZ5IGNvbXBsZXRlIHR5cGVzIGZvciBhdG9taWMgZnVuY3Rpb24gY2FsbHMKKworVGhpcyB3YXMgdW5lYXJ0aGVkIGJ5IGNsYW5nIGNvbXBpbGVyIHdoZXJlIGl0IGNvbXBsYWluZWQgYWJvdXQgcGFyYW1ldGVyCittaXNtYXRjaCwgZ2NjIGRvZXNudCBub3RpY2UgdGhpcworCit1cmN1L3VhdG9taWMvZ2VuZXJpYy5oOjE5MDoxMDogZXJyb3I6IGFkZHJlc3MgYXJndW1lbnQgdG8gYXRvbWljIGJ1aWx0aW4KK211c3QgYmUgYSBwb2ludGVyIHRvIGludGVnZXIgb3IgcG9pbnRlciAoJ3ZvaWQgKicgaW52YWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworCitGaXhlZCBhbGwgaW5zdGFuY2VzIHRodXNseQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgdXJjdS91YXRvbWljL2dlbmVyaWMuaCB8IDQwICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91cmN1L3VhdG9taWMvZ2VuZXJpYy5oIGIvdXJjdS91YXRvbWljL2dlbmVyaWMuaAoraW5kZXggMzdmNTljYy4uMDA0NmZmZCAxMDA2NDQKKy0tLSBhL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKKysrKyBiL3VyY3UvdWF0b21pYy9nZW5lcmljLmgKK0BAIC02NSwxNyArNjUsMTcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19jbXB4Y2hnKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgb2xkLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzEoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzIoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgb2xkLCBfbmV3KTsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF80KGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF84KGFkZHIsIG9sZCwgX25ldyk7CisrCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCBvbGQsIF9uZXcpOworICNlbmRpZgorIAl9CisgCV91YXRvbWljX2xpbmtfZXJyb3IoKTsKK0BAIC0xMDAsMjAgKzEwMCwyMCBAQCB2b2lkIF91YXRvbWljX2FuZCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMShhZGRyLCB2YWwpOworKwkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAljYXNlIDQ6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzgoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAl9CitAQCAtMTM5LDIwICsxMzksMjAgQEAgdm9pZCBfdWF0b21pY19vcih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF8xKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKyAJY2FzZSAyOgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCWNhc2UgNDoKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCV9fc3luY19vcl9hbmRfZmV0Y2hfOChhZGRyLCB2YWwpOworKwkJX19zeW5jX29yX2FuZF9mZXRjaF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAJfQorQEAgLTE4MCwxNyArMTgwLDE3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfYWRkX3JldHVybih2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwKKyAJc3dpdGNoIChsZW4pIHsKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX0JZVEUKKyAJY2FzZSAxOgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzEoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8yKGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzQoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCB2YWwpOworICNpZiAoQ0FBX0JJVFNfUEVSX0xPTkcgPT0gNjQpCisgCWNhc2UgODoKKy0JCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF84KGFkZHIsIHZhbCk7CisrCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHZhbCk7CisgI2VuZGlmCisgCX0KKyAJX3VhdG9taWNfbGlua19lcnJvcigpOworQEAgLTIxOCw3ICsyMTgsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgY2hhciAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMShhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIG9sZCwgdmFsKSk7CisgCisgCQlyZXR1cm4gb2xkOworIAl9CitAQCAtMjMwLDcgKzIzMCw3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCisgCisgCQlkbyB7CisgCQkJb2xkID0gdWF0b21pY19yZWFkKCh1bnNpZ25lZCBzaG9ydCAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMihhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yNDEsNyArMjQxLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIGludCAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNChhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfNCgodW5zaWduZWQgaW50ICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yNTIsNyArMjUyLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIGxvbmcgKilhZGRyKTsKKy0JCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgoYWRkciwgb2xkLCB2YWwpKTsKKysJCX0gd2hpbGUgKCFfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1YTczOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L1JldmVydC1CbGFja2xpc3QtQVJNLWdjYy00LjguMC00LjguMS00LjguMi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDdiM2RmMTAwMzQ2MTI4ZDc4MGYyMThiODgxZDU2M2QxZmQxMmUzMTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitEYXRlOiBNb24sIDIwIE9jdCAyMDE0IDEzOjQ2OjEwICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiQmxhY2tsaXN0IEFSTSBnY2MgNC44LjAsIDQuOC4xLCA0LjguMiIKKworVGhpcyByZXZlcnRzIGNvbW1pdCA0Yjc5MzEwYWEzZDQwOGJhMzBmZWUwMmNjNDk3YTY4MDcyZDM4YTk5LgorT0UtQ29yZSBpcyB1c2luZyBhIHBhdGNoZWQgR0NDIDQuOC4yIHdoaWNoIGlzIGFibGUgdG8gY29tcGlsZSBsaWJ1cmN1Citwcm9wZXJseS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgdXJjdS9jb21waWxlci5oIHwgMTkgLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VyY3UvY29tcGlsZXIuaCBiL3VyY3UvY29tcGlsZXIuaAoraW5kZXggMWUzMDkwMy4uMTk1MzRmMCAxMDA2NDQKKy0tLSBhL3VyY3UvY29tcGlsZXIuaAorKysrIGIvdXJjdS9jb21waWxlci5oCitAQCAtMTA4LDIzICsxMDgsNCBAQAorIAorICNkZWZpbmUgQ0FBX0FSUkFZX1NJWkUoeCkJKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQorIAorLS8qCistICogRG9uJ3QgYWxsb3cgY29tcGlsaW5nIHdpdGggYnVnZ3kgY29tcGlsZXIuCistICovCistCistI2lmZGVmIF9fR05VQ19fCistIyBkZWZpbmUgVVJDVV9HQ0NfVkVSU0lPTgkoX19HTlVDX18gKiAxMDAwMCBcCistCQkJCSsgX19HTlVDX01JTk9SX18gKiAxMDAgXAorLQkJCQkrIF9fR05VQ19QQVRDSExFVkVMX18pCistCistLyoKKy0gKiBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU4ODU0CistICovCistIyBpZmRlZiBfX0FSTUVMX18KKy0jICBpZiBVUkNVX0dDQ19WRVJTSU9OID49IDQwODAwICYmIFVSQ1VfR0NDX1ZFUlNJT04gPD0gNDA4MDIKKy0jICAgZXJyb3IgWW91ciBnY2MgdmVyc2lvbiBwcm9kdWNlcyBjbG9iYmVyZWQgZnJhbWUgYWNjZXNzZXMKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKyAjZW5kaWYgLyogX1VSQ1VfQ09NUElMRVJfSCAqLworLS0gCisyLjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9hYXJjaDY0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvYWFyY2g2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNjOGMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWJ1Y3J1OiByZWNvZ25pemUgYWFyY2g2NAorCitNYWtlIHRoZSBzYW1lIGFzICJhcm0iIGludGVybmFsbHkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20KKworCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTc3LDYgKzc3LDcgQEAgQVNfQ0FTRShbJGhvc3RfY3B1XSwKKyAJW2FscGhhKl0sIFtBUkNIVFlQRT0iYWxwaGEiXSwKKyAJW2lhNjRdLCBbQVJDSFRZUEU9ImdjYyJdLAorIAlbYXJtKl0sIFtBUkNIVFlQRT0iYXJtIl0sCisrCVthYXJjaDY0XSwgW0FSQ0hUWVBFPSJhcm0iXSwKKyAJW21pcHMqXSwgW0FSQ0hUWVBFPSJtaXBzIl0sCisgCVt0aWxlKl0sIFtBUkNIVFlQRT0iZ2NjIl0sCisgCVtBUkNIVFlQRT0idW5rbm93biJdCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjRmNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBSQ1UgKHJlYWQtY29weS11cGRhdGUpIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VyY3UiCitCVUdUUkFDS0VSID0gImh0dHA6Ly9sdHRuZy5vcmcvcHJvamVjdC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MGYwNjBjMzBhMjc5MjJjZTljMGQ1NTdhNjM5YjRmYTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTRkZTBkNjhkM2E5OTc2NDM3MTUwMzZkMjIwOWFlMWQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VyY3UvdWF0b21pYy94ODYuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTIxO21kNT0yMjA1NTJmNzJjNTViMTAyZjJlZTM1OTI5NzM0ZWY0MiIKKworU1JDX1VSSSA9ICJodHRwOi8vbHR0bmcub3JnL2ZpbGVzL3VyY3UvdXNlcnNwYWNlLXJjdS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1JldmVydC1CbGFja2xpc3QtQVJNLWdjYy00LjguMC00LjguMS00LjguMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2E2ZWUxNzg3MWQzMTIyNmRiM2Y2MThlMjgzNTFkMjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUyM2YyMmM0NzI2Y2E2YmI3N2E3N2QyNThlNzZkOGMzM2M4OTcyNDQzM2JkNjUzMTMwMjRiOThlNTVjNDI5NSIKKworUyA9ICIke1dPUktESVJ9L3VzZXJzcGFjZS1yY3UtJHtQVn0iCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgoraW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdC8wMDAxLXVzYi5oLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NDQwZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMzQwZjkxMWY5ZTNmNGZmNmIwMTY4MmM1MzQxYzk1OTA2MDc4MmFmMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIgQXByIDIwMTUgMTk6MTg6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNiLmg6IEluY2x1ZGUgc3lzL3R5cGVzLmgKKworV2UgbmVlZCB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHVfaW50WF90CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGlidXNiL3VzYi5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnVzYi91c2IuaCBiL2xpYnVzYi91c2IuaAoraW5kZXggODRlNzMwZi4uY2FmZmFlMiAxMDA2NDQKKy0tLSBhL2xpYnVzYi91c2IuaAorKysrIGIvbGlidXNiL3VzYi5oCitAQCAtMzEsNiArMzEsOCBAQAorIAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisgLyoKKyAgKiBVU0Igc3BlYyBpbmZvcm1hdGlvbgorICAqCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXRfMC4xLjUuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0XzAuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Njg3MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2ItY29tcGF0XzAuMS41LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAibGlidXNiLTAuMSBjb21wYXRpYmlsaXR5IGxheWVyIGZvciBsaWJ1c2IxIgorREVTQ1JJUFRJT04gPSAibGlidXNiLTAuMSBjb21wYXRpYmxlIGxheWVyIGZvciBsaWJ1c2IxLCBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgXAordGhhdCBhaW1zIHRvIGxvb2ssIGZlZWwgYW5kIGJlaGF2ZSBleGFjdGx5IGxpa2UgbGlidXNiLTAuMSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlidXNiLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cubGlidXNiLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjJhYzVmM2FjNDgzNWU4ZjkxMzI0YTI2YTU5MGE0MjMiCitERVBFTkRTID0gImxpYnVzYjEiCisKKyMgRmV3IHBhY2thZ2VzIGFyZSBrbm93biBub3QgdG8gd29yayB3aXRoIGxpYnVzYi1jb21wYXQgKGUuZy4gbGlibXRwLTEuMC4wKSwKKyMgc28gaGVyZSBsaWJ1c2ItMC4xIGlzIHJlbW92ZWQgY29tcGxldGVseSBpbnN0ZWFkIG9mIGFkZGluZyB2aXJ0dWFsL2xpYnVzYjAuCisjIEJlc2lkZXMsIGxpYnVzYi0wLjEgdXNlcyBhIHBlciAxbXMgcG9sbGluZyB0aGF0IGh1cnRzIGEgbG90IHRvIHBvd2VyCisjIGNvbnN1bXB0aW9uLgorUFJPVklERVMgPSAibGlidXNiIHZpcnR1YWwvbGlidXNiMCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEUgPSAiMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlidXNiL2xpYnVzYi1jb21wYXQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzYi5oLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjI3ODBiNmE3NThhMWUyYzI5NDNiZGJmN2ZhZjc0MGU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwNGVmNGI2YjMyNGJlNzlhYzFiZmIzZDgzOWVhYzg2MGZiYzkyOWU2YWNiMWVmODg3OTNhNmVhMzI4YmM1NWEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlidXNiLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZQorCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQltdiAke0R9JHtiYXNlX2xpYmRpcn0vcGtnY29uZmlnICR7RH0ke2xpYmRpcn0KKwlmaQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2IxXzEuMC4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBlMWZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgbGlicmFyeSB0byBhY2Nlc3MgVVNCICh2ZXJzaW9uIDEuMCkiCitIT01FUEFHRSA9ICJodHRwOi8vbGlidXNiLnNmLm5ldCIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5saWJ1c2Iub3JnL3JlcG9ydCIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ1c2IvbGlidXNiLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImY5ZTJiYjU4Nzk5Njg0NjdlNWNhNzU2Y2I0ZTFmYTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZjNTAyYzgxNjAwMmY5MGQ0Zjc2MDUwYTY0MjljM2E3ZTBkODQyMDQyMjJjYmZmMmRjZTk1ZGQ3NzNiYTY4NDAiCisKK1MgPSAiJHtXT1JLRElSfS9saWJ1c2ItJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIERvbid0IGNvbmZpZ3VyZSB1ZGV2IGJ5IGRlZmF1bHQgc2luY2UgaXQgd2lsbCBjYXVzZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVjeSB3aXRoIHVkZXYgcGFja2FnZSwgd2hpY2ggZGVwZW5kcyBvbiBsaWJ1c2IKK0VYVFJBX09FQ09ORiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSAtLWRpc2FibGUtdWRldiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8qLnNvLioiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyAke2Jhc2VfbGliZGlyfS8qLmxhIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDE0YzkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxMTggQEAKK1VzZSBwa2ctY29uZmlnIHRvIGZpbmQgZ2NyeXB0IGFuZCBsaWJ4bWwyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2xpYnhtbDIgaXMgdXBzdHJlYW1hYmxlXQorCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGxpYnhzbHQtMS4xLjI4L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI4Lm9yaWcvY29uZmlndXJlLmluCTIwMTQtMDUtMTMgMTY6NDY6MDIuMjc4NDc0OTY3ICswMDAwCisrKysgbGlieHNsdC0xLjEuMjgvY29uZmlndXJlLmluCTIwMTQtMDUtMTMgMTY6NTM6NTYuNTEwNDcyNTYxICswMDAwCitAQCAtMzc2LDYgKzM3Niw4IEBACisgQUNfU1VCU1QoUFlUSE9OX1NVQkRJUikKKyBBQ19TVUJTVChQWVRIT05fTElCUykKKyAKKytQS0dfUFJPR19QS0dfQ09ORklHCisrCisgQUNfQVJHX1dJVEgoY3J5cHRvLCBbICAtLXdpdGgtY3J5cHRvICAgICAgICAgICBBZGQgY3J5cHRvIHN1cHBvcnQgdG8gZXhzbHQgKG9uKV0pCisgV0lUSF9DUllQVE89MAorIGlmIHRlc3QgIiR3aXRoX2NyeXB0byIgPSAibm8iIDsgdGhlbgorQEAgLTM5MSwyNiArMzkzLDEzIEBACisgICAgIFdJVEhfQ1JZUFRPPTEKKyAgICAgOzsKKyAgICopCistICAgIEFDX1BBVEhfUFJPRyhMSUJHQ1JZUFRfQ09ORklHLCBsaWJnY3J5cHQtY29uZmlnLCBubykKKy0gICAgaWYgdGVzdCAiJExJQkdDUllQVF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgICAgTElCR0NSWVBUX1ZFUlNJT049YCRMSUJHQ1JZUFRfQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgICBpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJExJQkdDUllQVF9WRVJTSU9OKSAtbHQgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAiMS4xLjQyIikKKy0gICAgICB0aGVuCistICAgICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPSIiCistICAgICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgICAgZWNobyAnZ2NyeXB0IGxpYnJhcnkgdmVyc2lvbiA8IDEuMS40MiAtIENyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4nCistICAgICAgZWxzZQorLSAgICAgICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgJGxpYmdjcnlwdF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgICAgIExJQkdDUllQVF9MSUJTPWAkTElCR0NSWVBUX0NPTkZJRyAkbGliZ2NyeXB0X2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgICAgIEFDX0RFRklORShIQVZFX0dDUllQVCwgMSwgW0RlZmluZSBpZiBnY3J5cHQgbGlicmFyeSBpcyBhdmFpbGFibGUuXSkKKy0gICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgYmUgYXZhaWxhYmxlLicKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoTElCR0NSWVBULCBbbGliZ2NyeXB0ID49IDEuMS40Ml0sIFsKKysgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0NSWVBULCAxLCBbRGVmaW5lIGlmIGdjcnlwdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS5dKQorKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIGJlIGF2YWlsYWJsZS4nCisgCQlXSVRIX0NSWVBUTz0xCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgICBMSUJHQ1JZUFRfTElCUz0iIgorLSAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgYW5kIHJlY29uZmlndXJlIHRvIG1ha2UgYXZhaWxhYmxlLicKKy0gICAgZmkKKysJXSwgWworKyAgICAgICAgICBlY2hvICdDcnlwdG8gZXh0ZW5zaW9ucyB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEluc3RhbGwgbGliZ2NyeXB0ID49IDEuMS40MiBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJworKyAgICAgICAgXSkKKyBlc2FjCisgZmkKKyBBQ19TVUJTVChXSVRIX0NSWVBUTykKK0BAIC00NzEsMjQgKzQ2MCw4IEBACisgZG5sIHNvbWUgdHdlYWtpbmcgLSBEYXZpZCBIw6RyZGVtYW4gMzAvMTAvMjAwMQorIGRubAorIAorLUxJQlhNTF9DT05GSUdfUFJFRklYPSIiCisgTElCWE1MX1NSQz0iIgorIAorLUFDX0FSR19XSVRIKGxpYnhtbC1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLXByZWZpeD1bUEZYXQkJU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgY29uZmlnXSwKKy0JTElCWE1MX0NPTkZJR19QUkVGSVg9JHdpdGh2YWwKKy0pCistICAgICAgICAKKy1BQ19BUkdfV0lUSChsaWJ4bWwtaW5jbHVkZS1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLWluY2x1ZGUtcHJlZml4PVtQRlhdCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGhlYWRlcnNdLAorLSAgICAgICAgTElCWE1MX0NGTEFHUz0iLUkkd2l0aHZhbCIKKy0pCistCistQUNfQVJHX1dJVEgobGlieG1sLWxpYnMtcHJlZml4LAorLSAgICAgICAgWyAgLS13aXRoLWxpYnhtbC1saWJzLXByZWZpeD1bUEZYXQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBsaWJzXSwKKy0gICAgICAgIExJQlhNTF9MSUJTPSItTCR3aXRodmFsIgorLSkKKy0KKyBBQ19BUkdfV0lUSChsaWJ4bWwtc3JjLAorIAlbICAtLXdpdGgtbGlieG1sLXNyYz1bRElSXSAgICAgICAgICAgICAgRm9yIGxpYnhtbCB0aGF0cyBub3QgaW5zdGFsbGVkIHlldCAoc2V0cyBhbGwgdGhyZWUgYWJvdmUpXSwKKyAJTElCWE1MX1NSQz0iJHdpdGh2YWwiCitAQCAtNTUxLDI4ICs1MjQsOSBAQAorIAlmaQorIGZpCisgCistZG5sCistZG5sIG1ha2Ugc3VyZSB4bWwyLWNvbmZpZyBpcyBleGVjdXRhYmxlLAorLWRubCB0ZXN0IHZlcnNpb24gYW5kIGluaXQgb3VyIHZhcmlhYmxlcworLWRubAorLQorLWlmICR7WE1MX0NPTkZJR30gLS1saWJzIHByaW50ID4gL2Rldi9udWxsIDI+JjEKKy10aGVuCistCVhNTFZFUlM9YCRYTUxfQ09ORklHIC0tdmVyc2lvbmAKKy0JaWYgdGVzdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRYTUxWRVJTKSAtZ2UgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04pCistCXRoZW4KKy0JCUFDX01TR19SRVNVTFQoJFhNTFZFUlMgZm91bmQpCistCWVsc2UKKy0JCUFDX01TR19FUlJPUihWZXJzaW9uICRYTUxWRVJTIGZvdW5kLiBZb3UgbmVlZCBhdCBsZWFzdCBsaWJ4bWwyICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBmb3IgdGhpcyB2ZXJzaW9uIG9mIGxpYnhzbHQpCistCWZpCistCUxJQlhNTF9MSUJTPSIkTElCWE1MX0xJQlMgYCRYTUxfQ09ORklHIC0tbGlic2AiCistCWlmIHRlc3QgIngkTElCWE1MX1NSQyIgPSAieCI7IHRoZW4KKy0JCUxJQlhNTF9DRkxBR1M9IiRMSUJYTUxfQ0ZMQUdTIGAkWE1MX0NPTkZJRyAtLWNmbGFnc2AiCistCWZpCistZWxzZQorLQlBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIGxpYnhtbDIgYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKQorLWZpCistCisrUEtHX0NIRUNLX01PRFVMRVMoTElCWE1MLCBbbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT05dLCwKKysgICAgW0FDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04gYW55d2hlcmUsIGNoZWNrIGZ0cDovL3htbHNvZnQub3JnLy5dKV0KKyspCisgCisgQUNfU1VCU1QoQ0ZMQUdTKQorIEFDX1NVQlNUKENQUEZMQUdTKQorQEAgLTU5Nyw3ICs1NTEsNyBAQAorIAorIGlmIHRlc3QgIiR3aXRoX3BsdWdpbnMiID0gInllcyIgOyB0aGVuCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2xpYnhtbDIgbW9kdWxlIHN1cHBvcnRdKQorLSAgV0lUSF9NT0RVTEVTPSJgJFhNTF9DT05GSUcgLS1tb2R1bGVzYCIKKysgIFdJVEhfTU9EVUxFUz0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9bW9kdWxlcyBsaWJ4bWwtMi4wYCIKKyAgIGlmIHRlc3QgIiR7V0lUSF9NT0RVTEVTfSIgPSAiMSI7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWdfZml4LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE4MDEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJ4c2x0LTEuMS4yNy9saWJleHNsdC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI3Lm9yaWcvbGliZXhzbHQucGMuaW4KKysrKyBsaWJ4c2x0LTEuMS4yNy9saWJleHNsdC5wYy5pbgorQEAgLTgsNSArOCw1IEBAIE5hbWU6IGxpYmV4c2x0CisgVmVyc2lvbjogQExJQkVYU0xUX1ZFUlNJT05ACisgRGVzY3JpcHRpb246IEVYU0xUIEV4dGVuc2lvbiBsaWJyYXJ5CisgUmVxdWlyZXM6IGxpYnhtbC0yLjAKKy1MaWJzOiBARVhTTFRfTElCRElSQCBARVhTTFRfTElCU0AKKytMaWJzOiAtbGV4c2x0IEBFWFNMVF9MSUJESVJAIEBFWFNMVF9MSUJTQAorIENmbGFnczogQEVYU0xUX0lOQ0xVREVESVJACitJbmRleDogbGlieHNsdC0xLjEuMjcvbGlieHNsdC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhzbHQtMS4xLjI3Lm9yaWcvbGlieHNsdC5wYy5pbgorKysrIGxpYnhzbHQtMS4xLjI3L2xpYnhzbHQucGMuaW4KK0BAIC04LDUgKzgsNSBAQCBOYW1lOiBsaWJ4c2x0CisgVmVyc2lvbjogQFZFUlNJT05ACisgRGVzY3JpcHRpb246IFhTTFQgbGlicmFyeSB2ZXJzaW9uIDIuCisgUmVxdWlyZXM6IGxpYnhtbC0yLjAKKy1MaWJzOiBAWFNMVF9MSUJESVJAIEBYU0xUX0xJQlNAIEBFWFRSQV9MSUJTQAorK0xpYnM6IC1seHNsdCBAWFNMVF9MSUJESVJAIEBYU0xUX0xJQlNAIEBFWFRSQV9MSUJTQAorIENmbGFnczogQFhTTFRfSU5DTFVERURJUkAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZiY2Q4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHRfMS4xLjI4LmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiR05PTUUgWFNMVCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3htbHNvZnQub3JnL1hTTFQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0wY2Q5YTA3YWZiZWIyNDAyNmM5YjAzYWVjZmViYTQ1OCIKKworU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJsaWJ4bWwyIgorCitTUkNfVVJJID0gImZ0cDovL3htbHNvZnQub3JnL2xpYnhzbHQvL2xpYnhzbHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTY2N2JmNmY5MzEwYjk1NzI1NGZkY2Y2NTk2NjAwYjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZjNzE1MWE1N2I4OWMwM2Q3YjgyNWRmNWEwZmFlMGE4ZDVmMDU2NzRjMGU3Y2YyOTM3ZWNlYzRkNTRhMDI4YyIKK1MgPSAiJHtXT1JLRElSfS9saWJ4c2x0LSR7UFZ9IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3hzbHQtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlCisKKyMgV2UgZG9uJ3QgREVQRU5EIG9uIGJpbnV0aWxzIGZvciBhbnNpZGVjbC5oIHNvIGVuc3VyZSB3ZSBkb24ndCB1c2UgdGhlIGhlYWRlcgorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXNlZCAtaSAtZSAncy9hbnNpZGVjbC5oLy8nICR7U30vY29uZmlndXJlLmluCisKKwkjIFRoZSB0aW1lc3RhbXBzIGluIHRoZSAxLjEuMjggdGFyYmFsbCBhcmUgbWVzc2VkIHVwIGNhdXNpbmcgdGhpcyBmaWxlIHRvCisJIyBhcHBlYXIgb3V0IG9mIGRhdGUuICBUb3VjaCBpdCBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byByZWdlbmVyYXRlIGl0LgorCXRvdWNoICR7U30vZG9jL3hzbHRwcm9jLjEKK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1weXRob24gLS13aXRob3V0LWRlYnVnIC0td2l0aG91dC1tZW0tZGVidWcgLS13aXRob3V0LWNyeXB0byIKKyMgb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyByZWNpcGUgaGFkICR7UE59LXV0aWxzCitSUFJPVklERVNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKK1JDT05GTElDVFNfJHtQTn0tYmluICs9ICIke1BOfS11dGlscyIKK1JSRVBMQUNFU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0veHNsdHByb2MgWE1MX0NBVEFMT0dfRklMRVM9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9saWJ4c2x0LXBsdWdpbnMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94c2x0Q29uZi5zaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0YTAwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9maWxlcy9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBLaXJpbGwgU2ltb25vdiA8eGlAcmVzb2x2ZW50Lm5ldD4KKyMgRGF0ZSAxNDE3MTk3MzEyIDIxNjAwCisjIE5vZGUgSUQgMmI5MTU2NzU2NDIzZTk2N2NmZDA5YTYxZDEyNWQ4ODNmY2E2ZjRmMgorIyBQYXJlbnQgIDA1M2Y1M2EzODFmZjZhZGJiYzkzYTMxYWI3ZmRlZTA2YTE2YzhhMzMKK1JlbW92ZWQgaW52YWxpZCBzaW1wbGUga2V5IGFzc2VydGlvbiAodGhhbmsgdG8gSm9uYXRoYW4gR3JheSkuCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIAorCitodHRwczovL2JpdGJ1Y2tldC5vcmcveGkvbGlieWFtbC9jb21taXRzLzJiOTE1Njc1NjQyM2U5NjdjZmQwOWE2MWQxMjVkODgzZmNhNmY0ZjIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXIgMDUzZjUzYTM4MWZmIC1yIDJiOTE1Njc1NjQyMyBzcmMvc2Nhbm5lci5jCistLS0gYS9zcmMvc2Nhbm5lci5jCVdlZCBNYXIgMjYgMTM6NTU6NTQgMjAxNCAtMDUwMAorKysrIGIvc3JjL3NjYW5uZXIuYwlGcmkgTm92IDI4IDExOjU1OjEyIDIwMTQgLTA2MDAKK0BAIC0xMTA2LDEzICsxMTA2LDYgQEAKKyAgICAgICAgICAgICAmJiBwYXJzZXItPmluZGVudCA9PSAocHRyZGlmZl90KXBhcnNlci0+bWFyay5jb2x1bW4pOworIAorICAgICAvKgorLSAgICAgKiBBIHNpbXBsZSBrZXkgaXMgcmVxdWlyZWQgb25seSB3aGVuIGl0IGlzIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgY3VycmVudAorLSAgICAgKiBsaW5lLiAgVGhlcmVmb3JlIGl0IGlzIGFsd2F5cyBhbGxvd2VkLiAgQnV0IHdlIGFkZCBhIGNoZWNrIGFueXdheS4KKy0gICAgICovCistCistICAgIGFzc2VydChwYXJzZXItPnNpbXBsZV9rZXlfYWxsb3dlZCB8fCAhcmVxdWlyZWQpOyAgICAvKiBJbXBvc3NpYmxlLiAqLworLQorLSAgICAvKgorICAgICAgKiBJZiB0aGUgY3VycmVudCBwb3NpdGlvbiBtYXkgc3RhcnQgYSBzaW1wbGUga2V5LCBzYXZlIGl0LgorICAgICAgKi8KKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxNTU3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGliWUFNTCBpcyBhIFlBTUwgMS4xIHBhcnNlciBhbmQgZW1pdHRlciB3cml0dGVuIGluIEMuIgorREVTQ1JJUFRJT04gPSAiTGliWUFNTCBpcyBhIEMgbGlicmFyeSBmb3IgcGFyc2luZyBhbmQgZW1pdHRpbmcgZGF0YSBpbiBZQU1MIDEuMSwgXAorYSBodW1hbi1yZWFkYWJsZSBkYXRhIHNlcmlhbGl6YXRpb24gZm9ybWF0LiAiCitIT01FUEFHRSA9ICJodHRwOi8vcHl5YW1sLm9yZy93aWtpL0xpYllBTUwiCitTRUNUSU9OID0gImxpYnMvZGV2ZWwiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NjAxNWYwODg3NTliMTBlMGJjMmJmNjQ4OThkNGFlMTciCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5eWFtbC5vcmcvZG93bmxvYWQvbGlieWFtbC95YW1sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ5YW1sLUNWRS0yMDE0LTkxMzAucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjVmZTAwY2RhMThjYTVkYWViNDM3NjJiODBjMzhlMDZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkYTY5NzFiNGJkMDhhOTg2ZGQyYTYxMzUzYmM0MjIzNjJiZDBlZGNjNjdkN2ViYWFjNjhjOTVmNzQxODI3NDkiCisKK1MgPSAiJHtXT1JLRElSfS95YW1sLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NC5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU1NmQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sejQvbHo0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRXh0cmVtZWx5IEZhc3QgQ29tcHJlc3Npb24gYWxnb3JpdGhtIgorREVTQ1JJUFRJT04gPSAiTFo0IGlzIGEgdmVyeSBmYXN0IGxvc3NsZXNzIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgcHJvdmlkaW5nIGNvbXByZXNzaW9uIHNwZWVkIGF0IDQwMCBNQi9zIHBlciBjb3JlLCBzY2FsYWJsZSB3aXRoIG11bHRpLWNvcmVzIENQVS4gSXQgYWxzbyBmZWF0dXJlcyBhbiBleHRyZW1lbHkgZmFzdCBkZWNvZGVyLCB3aXRoIHNwZWVkIGluIG11bHRpcGxlIEdCL3MgcGVyIGNvcmUsIHR5cGljYWxseSByZWFjaGluZyBSQU0gc3BlZWQgbGltaXRzIG9uIG11bHRpLWNvcmUgc3lzdGVtcy4iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGliL0xJQ0VOU0U7bWQ1PTBiMGQwNjNmMzdhNDQ3N2I1NGFmMjQ1OTQ3N2RjYWZkIgorCitTUkNSRVYgPSAiZDg2ZGM5MTY3NzFjMTI2YWZiNzk3NjM3ZGRhOWY2NDIxYzBjYjk5OCIKKworUFYgPSAiMTMxK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vQ3lhbjQ5NzMvbHo0LmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VNQUtFID0gIlBSRUZJWD0ke3ByZWZpeH0gQ0M9JyR7Q0N9JyBERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzYTcwZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by8wMDAxLVVzZS1tZW1jcHktaW5zdGVhZC1vZi1yZWludmVudGluZy1pdC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tOiBTaW1vbiBNY1ZpdHRpZSA8c21jdkBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAyMyBOb3YgMjAxNCAyMjo1MDozMyArMDAwMAorU3ViamVjdDogVXNlIG1lbWNweSgpIGluc3RlYWQgb2YgcmVpbnZlbnRpbmcgaXQKKworZ2NjIGlubGluZXMgbWVtY3B5KCkgd2l0aCByZXN1bHRzIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSAoYXQKK2xlYXN0IGluIG15IGJyaWVmIHRlc3Rpbmcgd2l0aCBsem9wKSwgYW5kIGtub3dzIHRoZSBhbGlnbm1lbnQKK2NvbnN0cmFpbnRzIGZvciBvdXIgYXJjaGl0ZWN0dXJlcy4KKworQ2hhbmdlIHN1Z2dlc3RlZCBieSBKdWxpYW4gVGF5bG9yLgorCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTc1NzAzNworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pbmlsem8vbWluaWx6by5jIHwgMTQgKysrKysrKysrKysrKysKKyBzcmMvbHpvX2Z1bmMuaCAgICB8IDE0ICsrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspCisKKworZGlmZiAtLWdpdCBhL21pbmlsem8vbWluaWx6by5jIGIvbWluaWx6by9taW5pbHpvLmMKK2luZGV4IGFiMmJlNWYuLjY5MTNjMmYgMTAwNjQ0CistLS0gYS9taW5pbHpvL21pbmlsem8uYworKysrIGIvbWluaWx6by9taW5pbHpvLmMKK0BAIC0zNTIzLDYgKzM1MjMsMjAgQEAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKHNpemVvZigqKGx6b19tZW1vcHNfVFU4cCkwKT09OCkKKyAgICAgaWYgKCh2b2lkKTAsIG5fX24gPiAwKSBkbyB7ICpkX19uKysgPSAqc19fbisrOyB9IHdoaWxlICgtLW5fX24gPiAwKTsgXAorICAgICBMWk9fQkxPQ0tfRU5ECisgCisrLyogRGViaWFuLXNwZWNpZmljIGNoYW5nZTogd2Uga25vdyB0aGF0IG91ciBjb21waWxlciBpbmxpbmVzIG1lbWNweSgpIHdpdGgKKysgKiBjb25zdGFudCBuIHRvIGJlIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSwgYW5kIGtub3dzIHdoaWNoIGFyY2hpdGVjdHVyZXMKKysgKiBuZWVkIHRoaW5ncyBjb3JyZWN0bHkgYWxpZ25lZC4gKi8KKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMQorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkyCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTQKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZOAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFlOCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkxKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAxKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMihkZCxzcykgbWVtY3B5KGRkLCBzcywgMikKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTQoZGQsc3MpIG1lbWNweShkZCwgc3MsIDQpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk4KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA4KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZTihkZCxzcyxubikgbWVtY3B5KGRkLCBzcywgbm4pCisrCisgX19sem9fc3RhdGljX2ZvcmNlaW5saW5lIGx6b191aW50MTZfdCBsem9fbWVtb3BzX2dldF9sZTE2KGNvbnN0IGx6b192b2lkcCBzcykKKyB7CisgICAgIGx6b191aW50MTZfdCB2OworZGlmZiAtLWdpdCBhL3NyYy9sem9fZnVuYy5oIGIvc3JjL2x6b19mdW5jLmgKK2luZGV4IGRmYWE2NzYuLjFjYzFiNTMgMTAwNjQ0CistLS0gYS9zcmMvbHpvX2Z1bmMuaAorKysrIGIvc3JjL2x6b19mdW5jLmgKK0BAIC0zMzMsNiArMzMzLDIwIEBAIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihzaXplb2YoKihsem9fbWVtb3BzX1RVOHApMCk9PTgpCisgICAgIGlmICgodm9pZCkwLCBuX19uID4gMCkgZG8geyAqZF9fbisrID0gKnNfX24rKzsgfSB3aGlsZSAoLS1uX19uID4gMCk7IFwKKyAgICAgTFpPX0JMT0NLX0VORAorIAorKy8qIERlYmlhbi1zcGVjaWZpYyBjaGFuZ2U6IHdlIGtub3cgdGhhdCBvdXIgY29tcGlsZXIgaW5saW5lcyBtZW1jcHkoKSB3aXRoCisrICogY29uc3RhbnQgbiB0byBiZSBhcyBmYXN0IGFzIGhhbmR3cml0dGVuIGNvZGUsIGFuZCBrbm93cyB3aGljaCBhcmNoaXRlY3R1cmVzCisrICogbmVlZCB0aGluZ3MgY29ycmVjdGx5IGFsaWduZWQuICovCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTEKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMgorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFk0CisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTgKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZTgorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMShkZCxzcykgbWVtY3B5KGRkLCBzcywgMSkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTIoZGQsc3MpIG1lbWNweShkZCwgc3MsIDIpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk0KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA0KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZOChkZCxzcykgbWVtY3B5KGRkLCBzcywgOCkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWU4oZGQsc3Msbm4pIG1lbWNweShkZCwgc3MsIG5uKQorKworIF9fbHpvX3N0YXRpY19mb3JjZWlubGluZSBsem9fdWludDE2X3QgbHpvX21lbW9wc19nZXRfbGUxNihjb25zdCBsem9fdm9pZHAgc3MpCisgeworICAgICBsem9fdWludDE2X3QgdjsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9hY2luY2x1ZGUubTQgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZDJjY2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzU4IEBACisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoQUNDX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKEFDQ19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfSEVBREVSU10sIFsKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19IRUFERVJTKFthc3NlcnQuaCBjdHlwZS5oIGRpcmVudC5oIGVycm5vLmggZmNudGwuaCBmbG9hdC5oIGxpbWl0cy5oIG1hbGxvYy5oIG1lbW9yeS5oIHNldGptcC5oIHNpZ25hbC5oIHN0ZGFyZy5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGlvLmggc3RkbGliLmggc3RyaW5nLmggc3RyaW5ncy5oIHRpbWUuaCB1bmlzdGQuaCB1dGltZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19GVU5DU10sIFsKK0FDX0NIRUNLX0ZVTkNTKGFjY2VzcyBhbGxvY2EgYXRleGl0IGF0b2kgYXRvbCBjaG1vZCBjaG93biBjdGltZSBkaWZmdGltZSBmc3RhdCBnZXR0aW1lb2ZkYXkgZ210aW1lIGxvY2FsdGltZSBsb25nam1wIGxzdGF0IG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgbWt0aW1lIHFzb3J0IHJhaXNlIHNldGptcCBzaWduYWwgc25wcmludGYgc3RyY2FzZWNtcCBzdHJjaHIgc3RyZHVwIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgc3RybmljbXAgc3RycmNociBzdHJzdHIgdGltZSB1bWFzayB1dGltZSB2c25wcmludGYpCitdKSMKKworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCitBQ19DSEVDS19TSVpFT0YoaW50KQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0YoX19pbnQxNikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQpCisKK0FDX0NIRUNLX1NJWkVPRih2b2lkICopCitBQ19DSEVDS19TSVpFT0Yoc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHB0cmRpZmZfdCkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0FDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2luY2x1ZGUgImFjYy9hY2MuaCIKKyNpbmNsdWRlICJhY2MvYWNjX2luY2QuaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK30KKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIGFzc2VydChleHByKTsKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9BQ0NfQUNDQ0hLCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTUlOSUFDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfSU5DRF9IIDEKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjaW5jbHVkZSAkMgorfQorCisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgYXNzZXJ0KGV4cHIpOworc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNpbmNsdWRlICQyCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9NSU5JQUNDX0FDQ0NISworCisKKworIyBzZXJpYWwgMQorCitBQ19ERUZVTihbbWZ4X1BST0dfQ1BQRkxBR1NdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIEMgcHJlcHJvY2Vzc29yIG5lZWRzIHNwZWNpYWwgZmxhZ3NdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDEiCisjZWxpZiAoMHhmZmZmdSA9PSAweGZmZmZmZmZmdWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VsaWYgKDMyNzY3ID49IFVMT05HX01BWCkgfHwgKDY1NTM1dSA+PSBVTE9OR19NQVgpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAzIgorI2VuZGlmCitdXSwgW1sgXV0KKyldKQorCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK21meF90bXA9RVJST1IKK2ZvciBtZnhfYXJnIGluICIiIC1uby1jcHAtcHJlY29tcAorZG8KKyAgQ1BQRkxBR1M9IiRtZnhfYXJnICRtZnhfc2F2ZV9DUFBGTEFHUyIKKyAgX0FDX0NPTVBJTEVfSUZFTFNFKFtdLAorW21meF90bXA9JG1meF9hcmcKK2JyZWFrXSkKK2RvbmUKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitjYXNlIHgkbWZ4X3RtcCBpbgorICB4KQorICAgIEFDX01TR19SRVNVTFQoW25vbmUgbmVlZGVkXSkgOzsKKyAgeEVSUk9SKQorICAgIEFDX01TR19SRVNVTFQoW0VSUk9SXSkKKyAgICBBQ19NU0dfRVJST1IoW3lvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ddKQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorICAgIENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisgICAgOzsKK2VzYWMKK10pIyBtZnhfUFJPR19DUFBGTEFHUworCisKKworIyBzZXJpYWwgMworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0hFQURFUl9TQU5FX0xJTUlUU19IXSwgWworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGltaXRzLmggaXMgc2FuZV0sCittZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2gsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gdXNlIGNvbXBpbGVyIG9wdGlvbiAtbm8tY3BwLXByZWNvbXAiCisjICBlbHNlCisjICAgIGluY2x1ZGUgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgTUZYXzB4ZmZmZiAgICAgICAgICAweGZmZmYKKyNkZWZpbmUgTUZYXzB4ZmZmZmZmZmZMICAgICA0Mjk0OTY3Mjk1dWwKKyNpZiAhZGVmaW5lZChDSEFSX0JJVCkgfHwgKENIQVJfQklUICE9IDgpCisjICBpbmNsdWRlICJlcnJvciBDSEFSX0JJVCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVDSEFSX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVVNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKElOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIExPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAyIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMiIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAyIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMiIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAweGZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAzIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgTUZYXzB4ZmZmZmZmZmZMKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID4gVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggdnMgVUlOVF9NQVgiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPiBVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCB2cyBVTE9OR19NQVgiCisjZW5kaWYKK11dLCBbWworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSAyKV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSAyKV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gMildOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSA0KV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gNCldOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSA0KV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDQpXTsgfQorI2VuZGlmCitdXSldLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD15ZXNdLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD1ub10pXSkKK10pCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIHN0YW5kYXJkCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9MWk9fQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShMWk9fQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoTFpPX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZG5sIG1vcmUgdHlwZXMgd2hpY2ggYXJlIG5vdCB5ZXQgY292ZXJlZCBieSBBQ0MKKworQUNfREVGVU4oW21meF9DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YoaW50cHRyX3QpCitBQ19DSEVDS19TSVpFT0YodWludHB0cl90KQorCitBQ19DSEVDS19TSVpFT0YoZmxvYXQpCitBQ19DSEVDS19TSVpFT0YoZG91YmxlKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgZG91YmxlKQorCitBQ19DSEVDS19TSVpFT0YoZGV2X3QpCitBQ19DSEVDS19TSVpFT0YoZnBvc190KQorQUNfQ0hFQ0tfU0laRU9GKG1vZGVfdCkKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKK0FDX0NIRUNLX1NJWkVPRihzc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCkKK10pIworCisKKworQUNfREVGVU4oW21meF9DSEVDS19MSUJfV0lOTU1dLCBbCitpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzOyB0aGVuCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIHRlc3QgIlgkTElCUyIgIT0gIlgiICYmIExJQlM9IiRMSUJTICIKKyAgICAgTElCUz0iJHtMSUJTfS1sd2lubW0iIDs7CisqKQorICAgICA7OworZXNhYworZmkKK10pIworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWE3NzQ1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL3J1bi1wdGVzdApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorCisuL2x6b3Rlc3QgLW1hdmFpbCAtbjEwIC1xIC9ldGMvc2VydmljZXMKK0xaT1RFU1Q9Li9sem90ZXN0IC9iaW4vc2ggLWUgIi4vY2hlY2suc2giICIvZXRjIgorLi9hbGlnbgorLi9jaGtzdW0KKy4vc2ltcGxlCisuL3Rlc3RtaW5pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6b18yLjA5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Nzg2MTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9sem9faW5pdC5jO2JlZ2lubGluZT01O2VuZGxpbmU9MjU7bWQ1PTM1NTAyMzgzNWE5YjllZWI3MGFiODk1Mzk1ZTk1MWZmIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by9kb3dubG9hZC9sem8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjN2ZmYzlhMTAzYWZlMmQxYmJhMGIwMTVlN2FhODg3ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMjk0YTdjZWQzMTMwNjNjMDU3YzUwNDI1N2Y0MzdjODMzNWM0MWJmZWVkMjM1MzFlZTRlNmEyYjg3YmNiMzRjIgorCitpbmhlcml0IGF1dG90b29scyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJY3AgJHtTfS91dGlsL2NoZWNrLnNoICR0CisJY3AgJHtCfS9taW5pbHpvL3Rlc3RtaW5pICR0CisJZm9yIGkgaW4gdGVzdHMvYWxpZ24gdGVzdHMvY2hrc3VtIGx6b3Rlc3QvbHpvdGVzdCBleGFtcGxlcy9zaW1wbGUKKwkJZG8gY3AgJHtCfS9gZGlybmFtZSAkaWAvLmxpYnMvYGJhc2VuYW1lICRpYCAkdDsgXAorCWRvbmUKK30KKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3Yjg4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wLzAwMDEtdXNlLXN0YXRpYy1pbmxpbmVzLWFzLXRoZS1leHRlcm5hbC1pbmxpbmUtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorRnJvbSBlY2NjYmNmNjZkYTUzNzc5ZDg4ZTM4ZTJhZjdmODJlZmY4ZGRlN2Y4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMTA6MzU6NDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIHN0YXRpYyBpbmxpbmVzIGFzIHRoZSBleHRlcm5hbCBpbmxpbmUgZGVmaW5pdGlvbiBoYXMKKyBjaGFuZ2VkIHdpdGggZ2NjNQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9taW5pYWNjLmggfCAyNCArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taW5pYWNjLmggYi9zcmMvbWluaWFjYy5oCitpbmRleCAwOWU2ZjBjLi5jYWU5OGQxIDEwMDY0NAorLS0tIGEvc3JjL21pbmlhY2MuaAorKysrIGIvc3JjL21pbmlhY2MuaAorQEAgLTI4ODAsOCArMjg4MCw3IEBAIHR5cGVkZWYgdm9pZCAoX19hY2NfY2RlY2xfc2lnaGFuZGxlciAqYWNjX3NpZ2hhbmRsZXJfdCkoYWNjX3NpZ25vX3QpOworICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMjg5MCw4ICsyODg5LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUxNihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTE2KHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0yOTE2LDggKzI5MTQsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaQorICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMjkyNiw4ICsyOTIzLDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUzMihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTMyKHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0zMzA3LDggKzMzMDMsNyBAQCB0eXBlZGVmIHZvaWQgKF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgKmFjY19zaWdoYW5kbGVyX3QpKGFjY19zaWdub190KTsKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTE2KQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsaGJyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTMzMTcsOCArMzMxMiw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMTYocCkgICAgICBfX0FDQ19VQV9HRVRfTEUxNihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CitAQCAtMzM0Myw4ICszMzM3LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2kKKyAjaWYgIShBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChfX2FjY19IQVZFX2ZvcmNlaW5saW5lKQorICNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyAjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTMyKQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCopIHBwOworICAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsd2JyeCAlMCwwLCUxIiA6ICI9ciIgKHYpIDogInIiIChwKSwgIm0iICgqcCkpOworQEAgLTMzNTMsOCArMzM0Niw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0CisgI2RlZmluZSBBQ0NfVUFfR0VUX0xFMzIocCkgICAgICBfX0FDQ19VQV9HRVRfTEUzMihwKQorICNlbmRpZgorICNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdik7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworK3N0YXRpYyBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KikgcHA7CisgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKKyB9CistLSAKKzIuNS4wCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2FjaW5jbHVkZS5tNCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI5YzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzkwIEBACisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0VORElBTl0sIFsKK0FDX0NfQklHRU5ESUFOKFtBQ19ERUZJTkUoQUNDX0FCSV9CSUdfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBiaWcgZW5kaWFuLl0pXSxbQUNfREVGSU5FKEFDQ19BQklfTElUVExFX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgbGl0dGxlIGVuZGlhbi5dKV0pCitdKSMKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfSEVBREVSU10sIFsKK0FDX0hFQURFUl9USU1FCitBQ19DSEVDS19IRUFERVJTKFthc3NlcnQuaCBjdHlwZS5oIGRpcmVudC5oIGVycm5vLmggZmNudGwuaCBmbG9hdC5oIGxpbWl0cy5oIG1hbGxvYy5oIG1lbW9yeS5oIHNldGptcC5oIHNpZ25hbC5oIHN0ZGFyZy5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGlvLmggc3RkbGliLmggc3RyaW5nLmggc3RyaW5ncy5oIHRpbWUuaCB1bmlzdGQuaCB1dGltZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19GVU5DU10sIFsKK0FDX0NIRUNLX0ZVTkNTKGFjY2VzcyBhbGxvY2EgYXRleGl0IGF0b2kgYXRvbCBjaG1vZCBjaG93biBjdGltZSBkaWZmdGltZSBmc3RhdCBnZXR0aW1lb2ZkYXkgZ210aW1lIGxvY2FsdGltZSBsb25nam1wIGxzdGF0IG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgbWt0aW1lIHFzb3J0IHJhaXNlIHNldGptcCBzaWduYWwgc25wcmludGYgc3RyY2FzZWNtcCBzdHJjaHIgc3RyZHVwIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgc3RybmljbXAgc3RycmNociBzdHJzdHIgdGltZSB1bWFzayB1dGltZSB2c25wcmludGYpCitdKSMKKworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCitBQ19DSEVDS19TSVpFT0YoaW50KQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisKK0FDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcpCitBQ19DSEVDS19TSVpFT0YoX19pbnQxNikKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKF9faW50NjQpCisKK0FDX0NIRUNLX1NJWkVPRih2b2lkICopCitBQ19DSEVDS19TSVpFT0Yoc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHB0cmRpZmZfdCkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrIGZvciBBQ0NfY29uZm9ybWFuY2UKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0FDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2luY2x1ZGUgImFjYy9hY2MuaCIKKyNpbmNsdWRlICJhY2MvYWNjX2luY2QuaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK30KKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KK3N0YXRpYyBpbnQgdGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KGludCByKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIGFzc2VydChleHByKTsKKyNpbmNsdWRlICJhY2MvYWNjX2Noay5jaCIKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9BQ0NfQUNDQ0hLCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfTUlOSUFDQ19BQ0NDSEtdLCBbCittZnhfdG1wPSQxCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK2RubCBpbiBNYWtlZmlsZS5pbiAkKElOQ0xVREVTKSB3aWxsIGJlIGJlZm9yZSAkKENQUEZMQUdTKSwgc28gd2UgbWltaWMgdGhpcyBoZXJlCit0ZXN0ICJYJG1meF90bXAiID0gIlgiIHx8IENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3RdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfSU5DRF9IIDEKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICQyCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjaW5jbHVkZSAkMgorfQorCisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgYXNzZXJ0KGV4cHIpOworc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNpbmNsdWRlICQyCityZXR1cm4gcjsKK30KK11dLCBbWwordGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCgpOworaWYgKHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydCgxKSAhPSAxKSByZXR1cm4gMTsKK11dCispXSkKKworbWZ4X3RtcD1GQUlMRUQKK19BQ19DT01QSUxFX0lGRUxTRShbXSwgW21meF90bXA9eWVzXSkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfTk9USUNFKFtZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgXSkKKyAgICBBQ19NU0dfTk9USUNFKFtgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nXSkKKyAgICBBQ19NU0dfTk9USUNFKFthIHBhdGNoIG9yIGJ1Zy1yZXBvcnQgdG8gPCR7UEFDS0FHRV9CVUdSRVBPUlR9Pi5dKQorICAgIEFDX01TR19OT1RJQ0UoW1RoYW5rcyBmb3IgeW91ciBzdXBwb3J0Ll0pCisgICAgQUNfTVNHX05PVElDRShbXSkKKyAgICBBQ19NU0dfRVJST1IoW0FDQyBjb25mb3JtYW5jZSB0ZXN0IGZhaWxlZC4gU3RvcC5dKQorZG5sICAgIEFTX0VYSVQKKyAgICA7OworZXNhYworXSkjIG1meF9NSU5JQUNDX0FDQ0NISworCisKKworIyBzZXJpYWwgMQorCitBQ19ERUZVTihbbWZ4X1BST0dfQ1BQRkxBR1NdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIEMgcHJlcHJvY2Vzc29yIG5lZWRzIHNwZWNpYWwgZmxhZ3NdKQorCitBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDEiCisjZWxpZiAoMHhmZmZmdSA9PSAweGZmZmZmZmZmdWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VsaWYgKDMyNzY3ID49IFVMT05HX01BWCkgfHwgKDY1NTM1dSA+PSBVTE9OR19NQVgpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAzIgorI2VuZGlmCitdXSwgW1sgXV0KKyldKQorCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK21meF90bXA9RVJST1IKK2ZvciBtZnhfYXJnIGluICIiIC1uby1jcHAtcHJlY29tcAorZG8KKyAgQ1BQRkxBR1M9IiRtZnhfYXJnICRtZnhfc2F2ZV9DUFBGTEFHUyIKKyAgX0FDX0NPTVBJTEVfSUZFTFNFKFtdLAorW21meF90bXA9JG1meF9hcmcKK2JyZWFrXSkKK2RvbmUKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitjYXNlIHgkbWZ4X3RtcCBpbgorICB4KQorICAgIEFDX01TR19SRVNVTFQoW25vbmUgbmVlZGVkXSkgOzsKKyAgeEVSUk9SKQorICAgIEFDX01TR19SRVNVTFQoW0VSUk9SXSkKKyAgICBBQ19NU0dfRVJST1IoW3lvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ddKQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJG1meF90bXBdKQorICAgIENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisgICAgOzsKK2VzYWMKK10pIyBtZnhfUFJPR19DUFBGTEFHUworCisKKworIyBzZXJpYWwgMworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0hFQURFUl9TQU5FX0xJTUlUU19IXSwgWworQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbGltaXRzLmggaXMgc2FuZV0sCittZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2gsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZiAoMzI3NjcgPj0gNDI5NDk2NzI5NXVsKSB8fCAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGlmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gdXNlIGNvbXBpbGVyIG9wdGlvbiAtbm8tY3BwLXByZWNvbXAiCisjICBlbHNlCisjICAgIGluY2x1ZGUgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNkZWZpbmUgTUZYXzB4ZmZmZiAgICAgICAgICAweGZmZmYKKyNkZWZpbmUgTUZYXzB4ZmZmZmZmZmZMICAgICA0Mjk0OTY3Mjk1dWwKKyNpZiAhZGVmaW5lZChDSEFSX0JJVCkgfHwgKENIQVJfQklUICE9IDgpCisjICBpbmNsdWRlICJlcnJvciBDSEFSX0JJVCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVDSEFSX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVVNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNIUlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKElOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBJTlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIExPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAyIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMiIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAyIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMiIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAweGZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAzIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgTUZYXzB4ZmZmZikKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgTUZYXzB4ZmZmZmZmZmZMKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDMiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID4gVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggdnMgVUlOVF9NQVgiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPiBVTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCB2cyBVTE9OR19NQVgiCisjZW5kaWYKK11dLCBbWworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSAyKV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQyYlsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSAyKV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQyYlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJhWzEgLSAyICogIShzaXplb2YobG9uZykgPT0gMildOyB9CisjZWxpZiAoVUxPTkdfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2xvbmcyYlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYID09IE1GWF8weGZmZmZmZmZmTCkKK3sgdHlwZWRlZiBjaGFyIGFfc2hvcnQ0YVsxIC0gMiAqICEoc2l6ZW9mKHNob3J0KSA9PSA0KV07IH0KKyNlbGlmIChVU0hSVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gNCldOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YVsxIC0gMiAqICEoc2l6ZW9mKGludCkgPT0gNCldOyB9CisjZWxpZiAoVUlOVF9NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9pbnQ0YlsxIC0gMiAqICEoc2l6ZW9mKGludCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVTE9OR19NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSA0KV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nNGJbMSAtIDIgKiAhKHNpemVvZihsb25nKSA+IDQpXTsgfQorI2VuZGlmCitdXSldLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD15ZXNdLAorW21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD1ub10pXSkKK10pCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIHN0YW5kYXJkCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9MWk9fQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShMWk9fQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoTFpPX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZG5sIG1vcmUgdHlwZXMgd2hpY2ggYXJlIG5vdCB5ZXQgY292ZXJlZCBieSBBQ0MKKworQUNfREVGVU4oW21meF9DSEVDS19TSVpFT0ZdLCBbCitBQ19DSEVDS19TSVpFT0YoX19pbnQzMikKK0FDX0NIRUNLX1NJWkVPRihpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50bWF4X3QpCitBQ19DSEVDS19TSVpFT0YoaW50cHRyX3QpCitBQ19DSEVDS19TSVpFT0YodWludHB0cl90KQorCitBQ19DSEVDS19TSVpFT0YoZmxvYXQpCitBQ19DSEVDS19TSVpFT0YoZG91YmxlKQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcgZG91YmxlKQorCitBQ19DSEVDS19TSVpFT0YoZGV2X3QpCitBQ19DSEVDS19TSVpFT0YoZnBvc190KQorQUNfQ0hFQ0tfU0laRU9GKG1vZGVfdCkKK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKK0FDX0NIRUNLX1NJWkVPRihzc2l6ZV90KQorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCkKK10pIworCisKKworQUNfREVGVU4oW21meF9DSEVDS19MSUJfV0lOTU1dLCBbCitpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzOyB0aGVuCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIHRlc3QgIlgkTElCUyIgIT0gIlgiICYmIExJQlM9IiRMSUJTICIKKyAgICAgTElCUz0iJHtMSUJTfS1sd2lubW0iIDs7CisqKQorICAgICA7OworZXNhYworZmkKK10pIworCisjc2VyaWFsIDYKKworZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisKKyMgRGVmaW5lIFNUX01USU1fTlNFQyB0byBiZSB0aGUgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0J3Mgc3RfbXRpbSwKKyMgaWYgaXQgZXhpc3RzLgorCitBQ19ERUZVTihbQUNfU1RSVUNUX1NUX01USU1fTlNFQ10sCisgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0LnN0X210aW1dLAorICAgYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYywKKyAgIFthY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYz1ubworICAgICMgdHZfbnNlYyAtLSB0aGUgdXN1YWwgY2FzZQorICAgICMgX3R2X25zZWMgLS0gU29sYXJpcyAyLjYsIGlmCisgICAgIwkoZGVmaW5lZCBfWE9QRU5fU09VUkNFICYmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgPT0gMQorICAgICMJICYmICFkZWZpbmVkIF9fRVhURU5TSU9OU19fKQorICAgICMgc3RfX3RpbS50dl9uc2VjIC0tIFVuaXhXYXJlIDIuMS4yCisgICAgZm9yIGFjX3ZhbCBpbiB0dl9uc2VjIF90dl9uc2VjIHN0X190aW0udHZfbnNlYzsgZG8KKyAgICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyAtRFNUX01USU1fTlNFQz0kYWNfdmFsIgorICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPl0sIFtzdHJ1Y3Qgc3RhdCBzOyBzLnN0X210aW0uU1RfTVRJTV9OU0VDO10sCisgICAgICAgIFthY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjPSRhY192YWw7IGJyZWFrXSkKKyAgICBkb25lCisgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIl0pCisKKyAgaWYgdGVzdCAkYWNfY3Zfc3RydWN0X3N0X210aW1fbnNlYyAhPSBubzsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChTVF9NVElNX05TRUMsICRhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjLAorICAgICAgW0RlZmluZSB0byBiZSB0aGUgbmFub3NlY29uZHMgbWVtYmVyIG9mIHN0cnVjdCBzdGF0J3Mgc3RfbXRpbSwKKyAgICAgICBpZiBpdCBleGlzdHMuXSkKKyAgZmkKKyBdCispCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL3gzMl9hYmlfbWluaWFjY19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWJlODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGaXggZ2V0IG9mIEZMQUdTIHJlZ2lzdGVyIGluIHgzMiBBQkksCisKK3gzMiBBQkkgcmVxdWlyZXMgdG8gaGF2ZSA2NC1iaXQgdmFyaWFibGUgdG8gc3RvcmUgRkxBR1MgcmVnaXN0ZXIKK2luc3RlYWQgb2Ygc2l6ZV90IHRoYXQgaXMgMzItYml0IHZhcmlhYmxlLCB0aGlzIGZpeCBvcGVyYW5kCit0eXBlIG1pc21hdGNoIHdoZW4gdHJ5IHRvIHBvcCBwcmV2aW91cyBwdXNoZiB2YWx1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBsem9wLTEuMDMvc3JjL21pbmlhY2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGx6b3AtMS4wMy5vcmlnL3NyYy9taW5pYWNjLmgKKysrKyBsem9wLTEuMDMvc3JjL21pbmlhY2MuaAorQEAgLTc1NCw2ICs3NTQsOSBAQAorICNlbGlmIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpCisgIyAgZGVmaW5lIEFDQ19BUkNIX0FNRDY0ICAgICAgICAgICAgMQorICMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJhbWQ2NCIKKysjICBpZiBkZWZpbmVkKF9fSUxQMzJfXykKKysjICAgIGRlZmluZSBBQ0NfQVJDSF9BTUQ2NF9YMzIgICAgICAxCisrIyAgZW5kaWYKKyAjZWxpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgKGRlZmluZWQoX01fQVJNKSAmJiBkZWZpbmVkKF9NX1RIVU1CKSkKKyAjICBkZWZpbmUgQUNDX0FSQ0hfQVJNICAgICAgICAgICAgICAxCisgIyAgZGVmaW5lIEFDQ19BUkNIX0FSTV9USFVNQiAgICAgICAgMQorQEAgLTY3ODcsNyArNjc5MCwxMSBAQCBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHZvaWQsIGFjY19kZWJ1Z19uCisgQUNDTElCX1BVQkxJQ19OT0lOTElORShpbnQsIGFjY19kZWJ1Z19hbGlnbl9jaGVja19xdWVyeSkgKHZvaWQpCisgeworICNpZiAoQUNDX0FSQ0hfQU1ENjQgfHwgQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19BU01fU1lOVEFYX0dOVUMpCisrIyAgaWYgZGVmaW5lZChBQ0NfQVJDSF9BTUQ2NF9YMzIpCisrICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByOworKyMgIGVsc2UKKyAgICAgc2l6ZV90IHI7CisrIyAgZW5kaWYKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmXG4gcG9wICUwXG4iIDogIj1hIiAocikgOiA6IF9fQUNDX0FTTV9DTE9CQkVSKTsKKyAgICAgcmV0dXJuIChpbnQpKHIgPj4gMTgpICYgMTsKKyAjZWxpZiAoQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19BU01fU1lOVEFYX01TQykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDYyODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcF8xLjAzLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUmVhbC10aW1lIGZpbGUgY29tcHJlc3NvciIKK0RFU0NSSVBUSU9OID0gImx6b3AgaXMgYSBjb21wcmVzc2lvbiB1dGlsaXR5IHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIGEgY29tcGFuaW9uIHRvIGd6aXAuIFxuXAorSXQgaXMgYmFzZWQgb24gdGhlIExaTyBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGl0cyBtYWluIGFkdmFudGFnZXMgb3ZlciBcblwKK2d6aXAgYXJlIG11Y2ggaGlnaGVyIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkIGF0IHRoZSBjb3N0IG9mIHNvbWUgXG5cCitjb21wcmVzc2lvbiByYXRpby4gVGhlIGx6b3AgY29tcHJlc3Npb24gdXRpbGl0eSB3YXMgZGVzaWduZWQgd2l0aCB0aGUgZ29hbHMgXG5cCitvZiByZWxpYWJpbGl0eSwgc3BlZWQsIHBvcnRhYmlsaXR5IGFuZCB3aXRoIHJlYXNvbmFibGUgZHJvcC1pbiBjb21wYXRpYmlsaXR5IFxuXAordG8gZ3ppcC4iCitERVBFTkRTICs9ICJsem8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGZlYWYzZGM0YmVlZjRmNWE3YmRiYzM1YjE5N2YzOWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2x6b3AuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTIxO21kNT02Nzk3YmQzZWQwYTFhNDkzMjdiN2ViZjkzNjZlYmQ4NiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmx6b3Aub3JnL2Rvd25sb2FkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8veDMyX2FiaV9taW5pYWNjX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMDA2YzVlMjdmYjc4Y2RkMTRhNjI4ZmRmYTVhYTE5MDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzE0MjViOGM3N2Q0OWY1YTY3OWQ1YTEyNmM5MGVhNmFkOTk1ODVhNTVlMzM1YTYxM2NhZTU5ZTkwOWRiYjJjOSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBsbiAtc2YgIC4uL2FjaW5jbHVkZS5tNCAke1N9L2FjaW5jbHVkZS5tNAorICAgIGF1dG90b29sc19kb19jb25maWd1cmUKK30KKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTcxMDBlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnItMy4xLjMvbG9uZy1sb25nLXRodW1iLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gODQwMjFiMWUyMzY1MDgxNjliZTY1ZTgwMmE5YzBhMjVmYzlhODgyNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CitEYXRlOiBNb24sIDI3IE9jdCAyMDA4IDIyOjI2OjM1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG1wZnI6IGNydXNhZGUgYWdhaW5zdCBpbmxpbmUgYXNzZW1ibGVyCisKK1dpdGhvdXQgdGhpcywgYnVpbGQgZmFpbHMgZm9yIHRodW1iOgorfCB7c3RhbmRhcmQgaW5wdXR9OiBBc3NlbWJsZXIgbWVzc2FnZXM6Cit8IHtzdGFuZGFyZCBpbnB1dH06MTk5OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgc2wscjAscjIscjEnCit8IHtzdGFuZGFyZCBpbnB1dH06MjE0OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgc2wscjIscjEsZnAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjE5OiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgZnAscjAsc2wnCit8IHtzdGFuZGFyZCBpbnB1dH06MjIwOiBFcnJvcjogdW5zaGlmdGVkIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBhZGMgcjIscjIsIzAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjM1OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjAsc2wscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MjQ0OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgZnAsaXAscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MjUzOiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgcjMsc2wsZnAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjU0OiBFcnJvcjogdW5zaGlmdGVkIHJlZ2lzdGVyIHJlcXVpcmVkIC0tIGBhZGMgaXAsaXAsIzAnCit8IHtzdGFuZGFyZCBpbnB1dH06MjU5OiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgc2wscjEscjAnCit8IHtzdGFuZGFyZCBpbnB1dH06NjQyOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjAscjIscjMscjEnCit8IC4uL2FybS1vZS1saW51eC1nbnVlYWJpLWxpYnRvb2wgLS10YWc9Q0MgICAtLW1vZGU9Y29tcGlsZSBhcm0tb2UtbGludXgtZ251ZWFiaS1nY2MgIC1tYXJjaD1hcm12NXRlICAtbXRodW1iIC1tdGh1bWItaW50ZXJ3b3JrICAtbXR1bmU9eHNjYWxlIC0tc3lzcm9vdD0vT0Uvc2hyLWNvcmUvdG1wLWVnbGliYy9zeXNyb290cy9zcGl0eiAtREhBVkVfSU5UVFlQRVNfSD0xIC1ESEFWRV9TVERJTlRfSD0xIC1EVElNRV9XSVRIX1NZU19USU1FPTEgLURIQVZFX0xPQ0FMRV9IPTEgLURIQVZFX1dDSEFSX0g9MSAtREhBVkVfU1REQVJHPTEgLURIQVZFX1NZU19USU1FX0g9MSAtREhBVkVfQUxMT0NBX0g9MSAtREhBVkVfU1RESU5UX0g9MSAtREhBVkVfVkFfQ09QWT0xIC1ESEFWRV9TRVRMT0NBTEU9MSAtREhBVkVfR0VUVElNRU9GREFZPTEgLURIQVZFX0xPTkdfTE9ORz0xIC1ESEFWRV9JTlRNQVhfVD0xIC1ETVBGUl9IQVZFX0lOVE1BWF9NQVg9MSAtRE1QRlJfSEFWRV9GRVNFVFJPVU5EPTEgLURIQVZFX1JPVU5EPTEgLURIQVZFX1RSVU5DPTEgLURIQVZFX0ZMT09SPTEgLURIQVZFX0NFSUw9MSAtREhBVkVfTkVBUkJZSU5UPTEgLURMVF9PQkpESVI9XCIubGlicy9cIiAtREhBVkVfQVRUUklCVVRFX01PREU9MSAtREhBVkVfX19HTVBOX1JPT1RSRU09MSAtREhBVkVfX19HTVBOX1NCUEkxX0RJVkFQUFJfUT0xIC1JLiAgICAgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtZmZsb2F0LXN0b3JlIC1jIC1vIHBvdy5sbyBwb3cuYworfCB7c3RhbmRhcmQgaW5wdXR9OjExNTQ6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMCxyMSxzbCxpcCcKK3wge3N0YW5kYXJkIGlucHV0fToxMTY2OiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgVGh1bWIgbW9kZSBgdW11bGwgcjMscjIsaXAscjAnCit8IHtzdGFuZGFyZCBpbnB1dH06MTE3MTogRXJyb3I6IGluc3RydWN0aW9uIG5vdCBzdXBwb3J0ZWQgaW4gVGh1bWIxNiBtb2RlIC0tIGBhZGRzIHIwLHIxLHIzJworfCB7c3RhbmRhcmQgaW5wdXR9OjExNzI6IEVycm9yOiB1bnNoaWZ0ZWQgcmVnaXN0ZXIgcmVxdWlyZWQgLS0gYGFkYyByMixyMiwjMCcKK3wgbWFrZVsyXTogKioqIFttdWwubG9dIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIG1wZnIub2xkL3NyYy9tcGZyLWxvbmdsb25nLmgJMjAwOC0wMS0wMSAwMzoyOTowOS4wMDAwMDAwMDAgKzAwMDAKKysrKyBtcGZyL3NyYy9tcGZyLWxvbmdsb25nLmgJMjAwOC0xMC0yNyAyMTo0Njo0NC4wMDAwMDAwMDAgKzAwMDAKK0BAIC00MDYsNyArNDA2LDcgQEAKKyAJICAgICAicklKIiAoKFVTSXR5cGUpIChibCkpKQorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMgorKyNpZiBkZWZpbmVkIChfX2FybV9fKSAmJiBXX1RZUEVfU0laRSA9PSAzMiAmJiAhZGVmaW5lZChfX3RodW1iX18pCisgI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgIF9fYXNtX18gKCJhZGRzXHQlMSwgJTQsICU1XG5cdGFkY1x0JTAsICUyLCAlMyIJCQlcCisgCSAgIDogIj1yIiAoc2gpLCAiPSZyIiAoc2wpCQkJCQlcCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzZjkxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLmluYwpAQCAtMCwwICsxLDYgQEAKK1NVTU1BUlkgPSAiQyBsaWJyYXJ5IGZvciBtdWx0aXBsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb25zIHdpdGggZXhhY3Qgcm91bmRpbmciCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYzKyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxOWI1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgbXBmci5pbmMKKworTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCitERVBFTkRTID0gImdtcCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1wZnIub3JnL21wZnItJHtQVn0vbXBmci0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjk2OTM5OGNkMmZiYzU2YTZhZjU3MGI1MjczYzU2YTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjgzNWEwOGJkOTkyYzgyNTc2NDE3OTFlOWE2YTJiMzViMDIzMzZjOGRlMjZkMGE4NTc3OTUzNzQ3ZTUxNGExNiIKKworUyA9ICIke1dPUktESVJ9L21wZnItJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL2dudXRsc180LjNfZml4dXAucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWY1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK3JlcGxhY2UgZGVwcmVjYXRlZCBHbnVUTFMgZnVuY3Rpb25zIHdpdGggbmV3ZXIgb25lcyBpZiBhdmFpbGFibGUgCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPgorCitJbmRleDogbmVvbi0wLjMwLjEvbWFjcm9zL25lb24ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuZW9uLTAuMzAuMS5vcmlnL21hY3Jvcy9uZW9uLm00CisrKysgbmVvbi0wLjMwLjEvbWFjcm9zL25lb24ubTQKK0BAIC05ODcsNiArOTg3LDEwIEBAIGdudXRscykKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfZ2V0X3g1MDlfY2FzIFwKKyAgICAgICAgICAgICAgICAgICBnbnV0bHNfeDUwOV9jcnRfc2lnbjJdKQorIAorKyAgICMgZ251dGxzIDQuMyBjaGVjaworKyAgIEFDX0NIRUNLX0xJQihnbnV0bHMsIGdudXRsc19nbG9iYWxfaW5pdCkKKysgICBBQ19DSEVDS19GVU5DUyhnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3JldHJpZXZlX2Z1bmN0aW9uLCwpCisrCisgICAgIyBmYWlsIGlmIGdudXRsc194NTA5X2NydF9zaWduMiBpcyBub3QgZm91bmQgKGl0IHdhcyBpbnRyb2R1Y2VkIGluIDEuMi4wLCB3aGljaCBpcyByZXF1aXJlZCkKKyAgICBpZiB0ZXN0IHgke2FjX2N2X2Z1bmNfZ251dGxzX3g1MDlfY3J0X3NpZ24yfSAhPSB4eWVzOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihbR251VExTIHZlcnNpb24gcHJlZGF0ZXMgZ251dGxzX3g1MDlfY3J0X3NpZ24yLCBuZXdlciB2ZXJzaW9uIHJlcXVpcmVkIChhdCBsZWFzdCAxLjIuMCldKQorSW5kZXg6IG5lb24tMC4zMC4xL3NyYy9uZV9nbnV0bHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5lb24tMC4zMC4xLm9yaWcvc3JjL25lX2dudXRscy5jCisrKysgbmVvbi0wLjMwLjEvc3JjL25lX2dudXRscy5jCitAQCAtNTUzLDcgKzU1MywxMyBAQCBkdXBfZXJyb3I6Cisgc3RhdGljIGludCBwcm92aWRlX2NsaWVudF9jZXJ0KGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX2RhdHVtX3QgKnJlcV9jYV9yZG4sIGludCBucmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ251dGxzX3BrX2FsZ29yaXRobV90ICpzaWduX2FsZ29zLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbl9hbGdvc19sZW5ndGgsIGdudXRsc19yZXRyX3N0ICpzdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ25fYWxnb3NfbGVuZ3RoLAorKyNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfUkVUUklFVkVfRlVOQ1RJT04KKysgICAgZ251dGxzX3JldHIyX3N0KiBzdAorKyNlbHNlCisrICAgIGdudXRsc19yZXRyX3N0ICpzdAorKyNlbmRpZgorKyAgICApCisgeworICAgICBuZV9zZXNzaW9uICpzZXNzID0gZ251dGxzX3Nlc3Npb25fZ2V0X3B0cihzZXNzaW9uKTsKKyAgICAgCitAQCAtNjE3LDggKzYyMywxMSBAQCBzdGF0aWMgaW50IHByb3ZpZGVfY2xpZW50X2NlcnQoZ251dGxzX3NlCisgI2VuZGlmCisgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgTkVfREVCVUcoTkVfREJHX1NTTCwgIlN1cHBseWluZyBjbGllbnQgY2VydGlmaWNhdGUuXG4iKTsKKy0KKysjaWYgSEFWRV9HTlVUTFNfQ0VSVElGSUNBVEVfU0VUX1JFVFJJRVZFX0ZVTkNUSU9OCisrICAgICAgICAgICAgc3QtPmNlcnRfdHlwZSA9IHR5cGU7CisrI2Vsc2UKKyAgICAgICAgICAgICBzdC0+dHlwZSA9IHR5cGU7CisrI2VuZGlmCisgICAgICAgICAgICAgc3QtPm5jZXJ0cyA9IDE7CisgICAgICAgICAgICAgc3QtPmNlcnQueDUwOSA9ICZzZXNzLT5jbGllbnRfY2VydC0+Y2VydC5zdWJqZWN0OworICAgICAgICAgICAgIHN0LT5rZXkueDUwOSA9IHNlc3MtPmNsaWVudF9jZXJ0LT5wa2V5OworQEAgLTY0OSw4ICs2NTgsMTQgQEAgbmVfc3NsX2NvbnRleHQgKm5lX3NzbF9jb250ZXh0X2NyZWF0ZShpbgorICAgICBuZV9zc2xfY29udGV4dCAqY3R4ID0gbmVfY2FsbG9jKHNpemVvZiAqY3R4KTsKKyAgICAgZ251dGxzX2NlcnRpZmljYXRlX2FsbG9jYXRlX2NyZWRlbnRpYWxzKCZjdHgtPmNyZWQpOworICAgICBpZiAoZmxhZ3MgPT0gTkVfU1NMX0NUWF9DTElFTlQpIHsKKysKKysjaWYgSEFWRV9HTlVUTFNfQ0VSVElGSUNBVEVfU0VUX1JFVFJJRVZFX0ZVTkNUSU9OCisrICAgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X3JldHJpZXZlX2Z1bmN0aW9uKGN0eC0+Y3JlZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZV9jbGllbnRfY2VydCk7CisrI2Vsc2UKKyAgICAgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9jbGllbnRfc2V0X3JldHJpZXZlX2Z1bmN0aW9uKGN0eC0+Y3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVfY2xpZW50X2NlcnQpOworKyNlbmRpZgorICAgICB9CisgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfdmVyaWZ5X2ZsYWdzKGN0eC0+Y3JlZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVVRMU19WRVJJRllfQUxMT1dfWDUwOV9WMV9DQV9DUlQpOwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vcGtnY29uZmlnLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWRiYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbi9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBuZW9uLnBjLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gbmVvbi0wLjMwLjEub3JpZy9uZW9uLnBjLmluCisrKysgbmVvbi0wLjMwLjEvbmVvbi5wYy5pbgorQEAgLTcsNSArNyw1IEBAIE5hbWU6IG5lb24KKyBEZXNjcmlwdGlvbjogSFRUUC9XZWJEQVYgY2xpZW50IGxpYnJhcnkKKyBWZXJzaW9uOiBATkVPTl9WRVJTSU9OQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sbmVvbiBATkVPTl9QQ19MSUJTQAorLUxpYnMucHJpdmF0ZTogQE5FT05fTElCU0AKKytMaWJzLnByaXZhdGU6IC1MJHtsaWJkaXJ9IC1seiAtbGdjcnlwdCAtbGdwZy1lcnJvciAtbGV4cGF0IC1sZ251dGxzCisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vbmVvbiBATkVPTl9DRkxBR1NACmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbl8wLjMwLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbl8wLjMwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0NDMxNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uXzAuMzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkFuIEhUVFAgYW5kIFdlYkRBViBjbGllbnQgbGlicmFyeSB3aXRoIGEgQyBpbnRlcmZhY2UiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LndlYmRhdi5vcmcvbmVvbi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvQ09QWUlORy5MSUI7bWQ1PWYzMGE5NzE2ZWYzNzYyZTM0NjdhMmY2MmJmNzkwZjBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9uZV91dGlscy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTJjYWNhNjA5NTM4ZWRkYWE2ZjZhZGYxMjBhMjE4MDM3IgorREVQRU5EUyA9ICJ6bGliIGxpYnhtbDIgZXhwYXQgdGltZSBnbnV0bHMgbGlicHJveHkiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSBleHBhdC1uYXRpdmUgZ251dGxzLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy53ZWJkYXYub3JnLyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbnV0bHNfNC4zX2ZpeHVwLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gIjIzMWFkZWJlNWMyZjc4ZmRlZDNlM2RmNmU5NTg4NzhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYzYyNmMwZGMxOGQwOTRhYjM3NGRiZDlhMzU0OTE1YmZlNDc3NjQzMzI4OTM4NmVkNDg5YzJlYzA4NDVjZGQiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbmVvbi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBsaWJfcGFja2FnZSBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zc2w9Z251dGxzIC0td2l0aC1saWJ4bWwyIC0td2l0aC1leHBhdCAtLWVuYWJsZS1zaGFyZWQiCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1nc3NhcGkiCisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCW9lX3J1bm1ha2UgLUMgdGVzdAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkYTc3NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL0FkZC10YXJnZXQtdG8tb25seS1idWlsZC10ZXN0cy1ub3QtcnVuLXRoZW0ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA0NmVkZjAxY2M5OGRiOWY5ZmVlYzk4NDg5NzgzNmRmZGQyNmJkYzhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTIgQXVnIDIwMTUgMjM6Mjc6MjcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRhcmdldCB0byBvbmx5IGJ1aWxkIHRlc3RzIChub3QgcnVuIHRoZW0pCisKK05vdCBzZW5kaW5nIHVwc3RyZWFtIGFzIHRoaXMgaXMgb25seSBhIHN0YXJ0IG9mIGEgc29sdXRpb24gdG8KK2luc3RhbGxhYmxlIHRlc3RzOiBJdCdzIHVzZWZ1bCBmb3IgdXMgYWxyZWFkeSBhcyBpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYSBjb21wbGV0ZSBzb2x1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICAgICAgICAgICB8IDMgKysrCisgdGVzdHN1aXRlL01ha2VmaWxlLmluIHwgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAwOGVmYjdkLi43OTA5MzQyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNTUsNiArNTUsOSBAQCBjbGVhbiBkaXN0Y2xlYW4gbW9zdGx5Y2xlYW4gbWFpbnRhaW5lci1jbGVhbiB0YWdzOgorIAkgIGVjaG8gIk1ha2luZyAkQCBpbiAkJGQiIDsgKGNkICQkZCAmJiAkKE1BS0UpICRAKTsgZG9uZQorIAkkKE1BS0UpICRALWhlcmUKKyAKKytidWlsZHRlc3Q6CisrCWVjaG8gIk1ha2luZyAkQCBpbiB0ZXN0c3VpdGUiIDsgKGNkIHRlc3RzdWl0ZSAmJiAkKE1BS0UpICRAKQorKworIGNoZWNrLWhlcmU6CisgCXRydWUKKyAKK2RpZmYgLS1naXQgYS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gYi90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK2luZGV4IDZiYzE5MDcuLmJiNjViZjAgMTAwNjQ0CistLS0gYS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KKysrKyBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorQEAgLTExNiw2ICsxMTYsOCBAQCAkKFRBUkdFVFMpICQoRVhUUkFfVEFSR0VUUyk6IHRlc3R1dGlscy4kKE9CSkVYVCkgLi4vbmV0dGxlLWludGVybmFsLiQoT0JKRVhUKSBcCisgIyBkYXRhLgorIFZBTEdSSU5EID0gdmFsZ3JpbmQgLS1lcnJvci1leGl0Y29kZT0xIC0tbGVhay1jaGVjaz1mdWxsIC0tc2hvdy1yZWFjaGFibGU9eWVzIEBJRl9BU01AIC0tcGFydGlhbC1sb2Fkcy1vaz15ZXMKKyAKKytidWlsZHRlc3Q6ICQoVFNfQUxMKQorKworICMgVGhlIFBBVEggdXBkYXRlIGlzIGZvciBsb2NhdGluZyBkbGxzIG9uIHcqbmRvd3MuCisgY2hlY2s6ICQoVFNfQUxMKQorIAlMRF9MSUJSQVJZX1BBVEg9Li4vLmxpYiBQQVRIPSIuLi8ubGliOiQkUEFUSCIgc3JjZGlyPSIkKHNyY2RpcikiIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvcnVuLXB0ZXN0IGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MGJlZDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzNiBAQAorIyEgL2Jpbi9zaAorCitjZCB0ZXN0c3VpdGUKKworZmFpbGVkPTAKK2FsbD0wCisKK2ZvciBmIGluICotdGVzdDsgZG8KKyAgICBpZiBbICIkZiIgPSAic2hhMS1odWdlLXRlc3QiIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIlNLSVA6ICRmIChza2lwcGVkIGZvciBsdWRpY3JvdXMgcnVuIHRpbWUpIgorICAgICAgICBjb250aW51ZQorICAgIGZpCisKKyAgICAiLi8kZiIKKyAgICBjYXNlICIkPyIgaW4KKyAgICAgICAgMCkKKyAgICAgICAgICAgIGVjaG8gIlBBU1M6ICRmIgorICAgICAgICAgICAgYWxsPSQoKGFsbCArIDEpKQorICAgICAgICAgICAgOzsKKyAgICAgICAgNzcpCisgICAgICAgICAgICBlY2hvICJTS0lQOiAkZiIKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBlY2hvICJGQUlMOiAkZiIKKyAgICAgICAgICAgIGZhaWxlZD0kKChmYWlsZWQgKyAxKSkKKyAgICAgICAgICAgIGFsbD0kKChhbGwgKyAxKSkKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitpZiBbICIkZmFpbGVkIiAtZXEgMCBdIDsgdGhlbgorICBlY2hvICJBbGwgJGFsbCB0ZXN0cyBwYXNzZWQiCitlbHNlCisgIGVjaG8gIiRmYWlsZWQgb2YgJGFsbCB0ZXN0cyBmYWlsZWQiCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZmZjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlLmluYwpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkEgbG93IGxldmVsIGNyeXB0b2dyYXBoaWMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubHlzYXRvci5saXUuc2Uvfm5pc3NlL25ldHRsZS8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LWRlY3J5cHQuYztiZWdpbmxpbmU9NTM7ZW5kbGluZT02NzttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1zZXQta2V5LmM7YmVnaW5saW5lPTU2O2VuZGxpbmU9NzA7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIgorCitERVBFTkRTICs9ICJnbXAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9+bmlzc2UvYXJjaGl2ZS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDNkNTE0NzkxMTMxNzkzMWRkNDUzNTIwZWIyMzRhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYzcxZWJkNDM0MzU1MzdkNzY3Nzk5ZTQxNGZjZTg4ZTUyMWI3Mjc4ZDQ4Yzg2MDY1MTIxNmUxZmM2NTU1YjQwIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW9wZW5zc2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCAtYSAtZSAke1N9L2FjbG9jYWwubTQgXTsgdGhlbgorICAgICAgICAgICAgICAgY3AgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisgICAgICAgZmkKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBidWlsZHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCisgICAgICAgIGluc3RhbGwgJHtTfS90ZXN0c3VpdGUvZ29sZC1idWcudHh0ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KKyAgICAgICAgaW5zdGFsbCAke1N9L3Rlc3RzdWl0ZS8qLXRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLworICAgICAgICAjIHRvb2xzIGNhbiBiZSBmb3VuZCBpbiBQQVRILCBub3QgaW4gLi4vdG9vbHMvCisgICAgICAgIHNlZCAtaSAtZSAnc3wuLi90b29scy98fCcgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLyotdGVzdAorICAgICAgICBpbnN0YWxsICR7Qn0vdGVzdHN1aXRlLyotdGVzdCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCit9CisKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjU3NGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMi43LjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBuZXR0bGUuaW5jCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MiIKK0xJQ0VOU0VfJHtQTn0gPSAiTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1kZWNyeXB0LmM7YmVnaW5saW5lPTUzO2VuZGxpbmU9Njc7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtc2V0LWtleS5jO2JlZ2lubGluZT01NjtlbmRsaW5lPTcwO21kNT1iY2ZkNDc0NWQ1M2NhNTdmODI5MDcwODk4OThlMzkwZCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwM2Q1MTQ3OTExMzE3OTMxZGQ0NTM1MjBlYjIzNGE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJjNzFlYmQ0MzQzNTUzN2Q3Njc3OTllNDE0ZmNlODhlNTIxYjcyNzhkNDhjODYwNjUxMjE2ZTFmYzY1NTViNDAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjEuMS5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDcxMzRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzMuMS4xLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgbmV0dGxlLmluYworCitMSUNFTlNFID0gIkxHUEx2MysgfCBHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1kZWNyeXB0LmM7YmVnaW5saW5lPTE0O2VuZGxpbmU9MzY7bWQ1PWNhMGQyMjBiYzQxM2UxODQyZWNjNTA3NjkwY2U0MTZlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtc2V0LWtleS5jO2JlZ2lubGluZT0xNDtlbmRsaW5lPTM2O21kNT1jYTBkMjIwYmM0MTNlMTg0MmVjYzUwNzY5MGNlNDE2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gImI0MGZhODhkYzMyZjM3YTE4MmI2YjQyMDkyZWJiMTQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmZDRkMjVkNjRkOGRkY2I4NWQwZDg5NzU3MmFmNzNiMDViNGQxNjNjNmNjNDk0MzhhNWJmYmI4ZmYyOTNkNGMiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aC9wa2djb25maWcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aC9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhMTJlNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitBZGRlZCBucHRoIHBrZ2NvbmZpZyBmaWxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBucHRoLTEuMS9zcmMvbnB0aC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIG5wdGgtMS4xL3NyYy9ucHRoLnBjLmluCitAQCAtMCwwICsxLDEwIEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogbnB0aAorK0Rlc2NyaXB0aW9uOiBhIG5ldyBwb3J0YWJsZSBwb3NpeCB0aHJlYWRpbmcgbGlicmFyeQorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbnB0aCAtbHB0aHJlYWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorSW5kZXg6IG5wdGgtMS4xL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5wdGgtMS4xLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbnB0aC0xLjEvc3JjL01ha2VmaWxlLmFtCitAQCAtMjcsOCArMjcsMTAgQEAKKyAjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBucHRoLnBjCisgCistRVhUUkFfRElTVCA9IGxpYm5wdGgudmVycworK0VYVFJBX0RJU1QgPSBsaWJucHRoLnZlcnMgbnB0aC5wYworICMJICAgICB2ZXJzaW9uaW5mby5yYy5pbgorIG5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBucHRoLmgKKyAKK0luZGV4OiBucHRoLTEuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBucHRoLTEuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIG5wdGgtMS4xL2NvbmZpZ3VyZS5hYworQEAgLTMzNyw2ICszMzcsNyBAQCBzcmMvTWFrZWZpbGUKKyB3MzIvTWFrZWZpbGUKKyB0ZXN0cy9NYWtlZmlsZV0pCisgQUNfQ09ORklHX0ZJTEVTKG5wdGgtY29uZmlnLCBjaG1vZCAreCBucHRoLWNvbmZpZykKKytBQ19DT05GSUdfRklMRVMoW3NyYy9ucHRoLnBjXSkKKyBBQ19PVVRQVVQKKyAKKyBlY2hvICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYiBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM5NjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGhfMS4yLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTmV3IEdOVSBQb3J0YWJsZSBUaHJlYWRzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9zb2Z0d2FyZS9wdGgvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjMrICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlXAorICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjZcCisgICAgIgorU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9ucHRoL25wdGgtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIyNmJhYzczNzRiOTQ2NmM2ZWMyNmIxYzM0ZGFiODQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZkZGJkZGRiMmNmNDlhNDcyM2Y5ZDFhZDY1NjNjNDgwZDY3NjBkY2I2M2NiNzcyNmI4ZmMzYmMyZTFiNmMwOGEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbnB0aC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZAorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlibnB0aC5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vbnB0aC1jb25maWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI3MjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGaXggYnVpbGQgZmFpbHVyZSBvbiB4ODZfNjQKKworV2hlbiB0aGUgdGFyZ2V0X2NwdSBpcyB4ODZfNjQsIHdlIHNob3VsZCBhc3N1bWUgdGhhdCB0aGUgcGtnIHVzZXMgNjRiaXQsCitvbmx5IGlmIFVTRV9OMzIgaXMgc2V0LCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIHBrZyB1c2VzIDMyYml0LiBJdCB1c2VkIGEKK29wcG9zaXRlIGxvZ2ljIGJlZm9yZS4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlLmluIHwgICAxMiArKysrKystLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworSW5kZXg6IG5zcHIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNwci5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIG5zcHIvY29uZmlndXJlLmluCitAQCAtMTg3NSwyOCArMTg3NSwyNCBAQCB0b29scyBhcmUgc2VsZWN0ZWQgZHVyaW5nIHRoZSBYY29kZS9EZXZlCisgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X2lhNjQucworICAgICAgICAgOzsKKyAgICAgeDg2XzY0KQorLSAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV82NCI7IHRoZW4KKy0gICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Nl82NC5zCistICAgICAgICBlbGlmIHRlc3QgLW4gIiRVU0VfWDMyIjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV9YMzIiOyB0aGVuCisrICAgICAgICAgICAgQUNfREVGSU5FKGkzODYpCisgICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODZfNjQucworICAgICAgICAgICAgIENDPSIkQ0MgLW14MzIiCisgICAgICAgICAgICAgQ1hYPSIkQ1hYIC1teDMyIgorICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIEFDX0RFRklORShpMzg2KQorLSAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfeDg2LnMKKy0gICAgICAgICAgICBDQz0iJENDIC1tMzIiCistICAgICAgICAgICAgQ1hYPSIkQ1hYIC1tMzIiCisrICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODZfNjQucworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgIHBwY3xwb3dlcnBjKQorICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworICAgICAgICAgOzsKKyAgICAgcG93ZXJwYzY0KQorLSAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV82NCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgLW4gIiRVU0VfTjMyIjsgdGhlbgorKyAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfcHBjLnMKKysgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBDQz0iJENDIC1tNjQiCisgICAgICAgICAgICAgQ1hYPSIkQ1hYIC1tNjQiCistICAgICAgICBlbHNlCistICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgIG02OGspCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9uc3ByLnBjLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvbnNwci5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdkMGJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvbnNwci5wYy5pbgpAQCAtMCwwICsxLDExIEBACitvc19saWJzPS1scHRocmVhZCAtbGRsCitwcmVmaXg9T0VQUkVGSVgKK2V4ZWNfcHJlZml4PU9FRVhFQ1BSRUZJWAorbGliZGlyPU9FTElCRElSCitpbmNsdWRlZGlyPU9FSU5DRElSCisKK05hbWU6IE5TUFIKK0Rlc2NyaXB0aW9uOiBUaGUgTmV0c2NhcGUgUG9ydGFibGUgUnVudGltZQorVmVyc2lvbjogNC45LjUKK0xpYnM6IC1MJHtsaWJkaXJ9IC1scGxkczQgLWxwbGM0IC1sbnNwcjQgLWxwdGhyZWFkIC1sZGwKK0NmbGFnczoKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXJwYXRoLWZyb20tdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlNzg1MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBUaHUgRmViIDkgMDA6MDM6MzggMjAxMiArMDIwMAorCitBdm9pZCBRQSB3YXJuaW5ncyBieSByZW1vdmluZyBoYXJkY29kZWQgcnBhdGggZnJvbSBiaW5hcmllcy4KKworWy4uLl0KK1dBUk5JTkc6IFFBIElzc3VlOiBwYWNrYWdlIG5zcHIgY29udGFpbnMgYmFkIFJQQVRIIHtidWlsZGRpcn0vdG1wL3dvcmsvYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmkvbnNwci00LjguOS1yMS9uc3ByLTQuOC45L21vemlsbGEvbnNwcnB1Yi9wci90ZXN0cy8uLi8uLi9kaXN0L2xpYgoraW4gZmlsZSB7YnVpbGRkaXJ9L3RtcC93b3JrL2FybXY1dGUtcG9reS1saW51eC1nbnVlYWJpL25zcHItNC44LjktcjEvcGFja2FnZXMtc3BsaXQvbnNwci91c3IvbGliL25zcHIvdGVzdHMvbXVsdGl3YWl0CitbLi4uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG5zcHItNC44LjkvbW96aWxsYS9uc3BycHViL3ByL3Rlc3RzL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnNwcnB1Yi5vcmlnL3ByL3Rlc3RzL01ha2VmaWxlLmluCTIwMTItMDItMTEgMDA6MDE6MTAuNDc2MjIwNTA1ICswMjAwCisrKysgbnNwcnB1Yi9wci90ZXN0cy9NYWtlZmlsZS5pbgkyMDEyLTAyLTEwIDIzOjU3OjQwLjAwMDAwMDAwMCArMDIwMAorQEAgLTM3OSw3ICszNzksNyBAQAorIGVuZGlmCisgCisgaWZlcSAoLCQoZmlsdGVyLW91dCBMaW51eCBHTlUgR05VXyUsJChPU19BUkNIKSkpCistICAgIExET1BUUyArPSAtWGxpbmtlciAtcnBhdGggJChBQlNPTFVURV9MSUJfRElSKQorKyAgICBMRE9QVFMgKz0gLVhsaW5rZXIKKyAgICAgaWZlcSAoJChVU0VfUFRIUkVBRFMpLDEpCisgICAgICAgICBFWFRSQV9MSUJTID0gLWxwdGhyZWFkCisgICAgIGVuZGlmCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU3MTVjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaApAQCAtMCwwICsxLDE5IEBACit0aGUgJHNyY2RpciBpcyBub3QgZGVmaW5lZCBhdCB0aGUgdGltZSBvZiBnbnUtY29uZmlndXJpemUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogbnNwci9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3ByLm9yaWcvY29uZmlndXJlLmluCisrKysgbnNwci9jb25maWd1cmUuaW4KK0BAIC04LDcgKzgsNyBAQCBBQ19QUkVSRVEoMi42MSkKKyBBQ19JTklUCisgQUNfQ09ORklHX1NSQ0RJUihbcHIvaW5jbHVkZS9uc3ByLmhdKQorIAorLUFDX0NPTkZJR19BVVhfRElSKCR7c3JjZGlyfS9idWlsZC9hdXRvY29uZikKKytBQ19DT05GSUdfQVVYX0RJUihidWlsZC9hdXRvY29uZikKKyBBQ19DQU5PTklDQUxfVEFSR0VUCisgCisgZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2MDAxOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTAuOC5iYgpAQCAtMCwwICsxLDE3NiBAQAorU1VNTUFSWSA9ICJOZXRzY2FwZSBQb3J0YWJsZSBSdW50aW1lIExpYnJhcnkiCitIT01FUEFHRSA9ICAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9uc3ByLyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCB8IE1QTC0yLjAgfCBMR1BMLTIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NvbmZpZ3VyZS5pbjtiZWdpbmxpbmU9MztlbmRsaW5lPTY7bWQ1PTkwYzJmZGVlMzhlNDVkNjMwMmFiY2ZlNDc1YzhiNWM1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmluO2JlZ2lubGluZT00O2VuZGxpbmU9Mzg7bWQ1PWJlZGExZGJiOThhNTE1ZjU1N2QzZTU4ZWYwNmJjYTk5IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbnNwci9yZWxlYXNlcy92JHtQVn0vc3JjL25zcHItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1vbi14ODZfNjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXNyY2Rpci1mcm9tLWNvbmZpZ3VyZS1pbi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbnNwci5wYy5pbiIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkN2M1YmQwYTViMGE3ZDBlNzA1YmU2NjQ3OTAzMGEwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUwN2VhNTdjNTI1YzBjNTI0ZGFlNDg1N2E2NDJiNGVmNWM5ZDc5NTUxODc1NGM3ZjgzNDIyZDIyZmU1NDRhMTUiCisKK1MgPSAiJHtXT1JLRElSfS9uc3ByLSR7UFZ9L25zcHIiCisKK1JERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitURVNUUyA9ICIgXAorICAgIGFjY2VwdCBcCisgICAgYWNjZXB0cmVhZCBcCisgICAgYWNjZXB0cmVhZGVtdSBcCisgICAgYWZmaW5pdHkgXAorICAgIGFsYXJtIFwKKyAgICBhbm9uZm0gXAorICAgIGF0b21pYyBcCisgICAgYXR0YWNoIFwKKyAgICBiaWdmaWxlIFwKKyAgICBjbGVhbnVwIFwKKyAgICBjbHRzcnYgIFwKKyAgICBjb25jdXIgXAorICAgIGN2YXIgXAorICAgIGN2YXIyIFwKKyAgICBkbGx0ZXN0IFwKKyAgICBkdG9hIFwKKyAgICBlcnJjb2RlcyBcCisgICAgZXhpdCBcCisgICAgZmRjYWNoIFwKKyAgICBmaWxlaW8gXAorICAgIGZvcmVpZ24gXAorICAgIGZvcm1hdHRtIFwKKyAgICBmc3luYyBcCisgICAgZ2V0aG9zdCBcCisgICAgZ2V0cHJvdG8gXAorICAgIGkybCBcCisgICAgaW5pdGNsayBcCisgICAgaW5ydmFsIFwKKyAgICBpbnN0cnVtdCBcCisgICAgaW50cmlvIFwKKyAgICBpbnRydXB0IFwKKyAgICBpb190aW1lb3V0IFwKKyAgICBpb2NvbnRociBcCisgICAgam9pbiBcCisgICAgam9pbmtrIFwKKyAgICBqb2lua3UgXAorICAgIGpvaW51ayBcCisgICAgam9pbnV1IFwKKyAgICBsYXllciBcCisgICAgbGF6eWluaXQgXAorICAgIGxpYmZpbGVuYW1lIFwKKyAgICBsbHRlc3QgXAorICAgIGxvY2sgXAorICAgIGxvY2tmaWxlIFwKKyAgICBsb2dmaWxlIFwKKyAgICBsb2dnZXIgXAorICAgIG1hbnlfY3YgXAorICAgIG11bHRpd2FpdCBcCisgICAgbmFtZXNobTEgXAorICAgIG5ibGF5ZXIgXAorICAgIG5vbmJsb2NrIFwKKyAgICBudGlvdG8gXAorICAgIG50b2ggXAorICAgIG9wXzJsb25nIFwKKyAgICBvcF9leGNsIFwKKyAgICBvcF9maWxuZiBcCisgICAgb3BfZmlsb2sgXAorICAgIG9wX25vZmlsIFwKKyAgICBwYXJlbnQgXAorICAgIHBhcnNldG0gXAorICAgIHBlZWsgXAorICAgIHBlcmYgXAorICAgIHBpcGVwaW5nIFwKKyAgICBwaXBlcGluZzIgXAorICAgIHBpcGVzZWxmIFwKKyAgICBwb2xsX25tIFwKKyAgICBwb2xsX3RvIFwKKyAgICBwb2xsYWJsZSBcCisgICAgcHJmdGVzdCBcCisgICAgcHJpbWJsb2sgXAorICAgIHByb3ZpZGVyIFwKKyAgICBwcnBvbGxtbCBcCisgICAgcmFuZmlsZSBcCisgICAgcmFuZHNlZWQgXAorICAgIHJlaW5pdCBcCisgICAgcndsb2NrdGVzdCBcCisgICAgc2VsX3NwZCBcCisgICAgc2VsY3RfZXIgXAorICAgIHNlbGN0X25tIFwKKyAgICBzZWxjdF90byBcCisgICAgc2VsaW50ciBcCisgICAgc2VtYSBcCisgICAgc2VtYWVyciBcCisgICAgc2VtYXBpbmcgXAorICAgIHNlbmR6bGYgXAorICAgIHNlcnZlcl90ZXN0IFwKKyAgICBzZXJ2cl9rayBcCisgICAgc2VydnJfdWsgXAorICAgIHNlcnZyX2t1IFwKKyAgICBzZXJ2cl91dSBcCisgICAgc2hvcnRfdGhyZWFkIFwKKyAgICBzaWdwaXBlIFwKKyAgICBzb2NrZXQgXAorICAgIHNvY2tvcHQgXAorICAgIHNvY2twaW5nIFwKKyAgICBzcHJpbnRmIFwKKyAgICBzdGFjayBcCisgICAgc3RkaW8gXAorICAgIHN0cjJhZGRyIFwKKyAgICBzdHJvZCBcCisgICAgc3dpdGNoIFwKKyAgICBzeXN0ZW0gXAorICAgIHRlc3RiaXQgXAorICAgIHRlc3RmaWxlIFwKKyAgICB0aHJlYWRzIFwKKyAgICB0aW1lbWFjIFwKKyAgICB0aW1ldGVzdCBcCisgICAgdHBkIFwKKyAgICB1ZHBzcnYgXAorICAgIHZlcmNoZWNrIFwKKyAgICB2ZXJzaW9uIFwKKyAgICB3cml0ZXYgXAorICAgIHhub3RpZnkgXAorICAgIHplcm9sZW4iCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJb2VfcnVubWFrZSBDUk9TU19DT01QSUxFPTEgQ0ZMQUdTPSItRFhQX1VOSVgiIExERkxBR1M9IiIgQ0M9Z2NjIC1DIGNvbmZpZyBleHBvcnQKK30KKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJb2VfcnVubWFrZSAtQyBwci90ZXN0cworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1EICR7V09SS0RJUn0vbnNwci5wYy5pbiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VQUkVGSVg6JHtwcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKyAgICBzZWQgLWkgczpPRUlOQ0RJUjoke2luY2x1ZGVkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKworICAgIG1rZGlyIC1wICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnBsICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3ByL3Rlc3RzL3J1bnRlc3RzLnNoICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworICAgIGNkICR7Qn0vcHIvdGVzdHMKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtURVNUU30gJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisKKyAgICAjIGRlbGV0ZSBjb21waWxlLWV0LnBsIGFuZCBwZXJyLnByb3BlcnRpZXMgZnJvbSAke2JpbmRpcn0gYmVjYXVzZSB0aGVzZSBhcmUKKyAgICAjIG9ubHkgdXNlZCB0byBnZW5lcmF0ZSBwcmVyci5jIGFuZCBwcmVyci5oIGZpbGVzIGZyb20gcHJlcnIuZXQgYXQgY29tcGlsZQorICAgICMgdGltZQorICAgIHJtICR7RH0ke2JpbmRpcn0vY29tcGlsZS1ldC5wbCAke0R9JHtiaW5kaXJ9L3ByZXJyLnByb3BlcnRpZXMKK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28iCitGSUxFU18ke1BOfS1kZXYgPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L25zcHIvdGVzdHMvKiAke2xpYmRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9LyogJHtkYXRhZGlyfS9hY2xvY2FsLyogIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbnNwci90ZXN0cy8uZGVidWcvKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lXzAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNlOWU5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJOYW1lIFNlcnZpY2UgU3dpdGNoIG1vZHVsZSBmb3IgcmVzb2x2aW5nIHRoZSBsb2NhbCBob3N0bmFtZSIKK0RFU0NSSVBUSU9OID0gInBsdWdpbiBmb3IgdGhlIEdOVSBOYW1lIFNlcnZpY2UgU3dpdGNoIChOU1MpIGZ1bmN0aW9uYWxpdHkgb2YgXAordGhlIEdOVSBDIExpYnJhcnkgKGdsaWJjKSBwcm92aWRpbmcgaG9zdCBuYW1lIHJlc29sdXRpb24gZm9yIHRoZSBsb2NhbGx5IFwKK2NvbmZpZ3VyZWQgc3lzdGVtIGhvc3RuYW1lIGFzIHJldHVybmVkIGJ5IGdldGhvc3RuYW1lKDIpLiIKK0hPTUVQQUdFID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1teWhvc3RuYW1lLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworU1JDX1VSSSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNGFiOWFjMzZjMDUzYWI4ZmI4MzZkYjFjYmQ0YTQ4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyYmE3NDRlYThkNTc4ZDFjNTdjODU4ODRlOTRhMzA0MmVlMTc4NDNhNTI5NDQzNGQzYTdmNmM0ZDY3ZTdjYWYyIgorCitpbmhlcml0IGF1dG90b29scyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgc3lzdGVtZCBoYXMgaXRzIG93biBjb3B5IG9mIG5zcy1teWhvc3RuYW1lCitDT05GTElDVF9ESVNUUk9fRkVBVFVSRVMgPSAic3lzdGVtZCIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAorCQktZSAncy9cKF5ob3N0czouKlwpXChcPGZpbGVzXD5cKVwoLipcKVwoXDxkbnNcPlwpXCguKlwpL1wxXDIgbXlob3N0bmFtZSBcM1w0XDUvJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CisKK3BrZ19wcmVybV8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bXlob3N0bmFtZVw+Ly8nIFwKKwkJLWUgJy9eaG9zdHM6L3MvXHMqbXlob3N0bmFtZS8vJyBcCisJCS1pICREJHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc1OTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaApAQCAtMCwwICsxLDExMCBAQAorbnNzOiBmaXggaW5jb3JyZWN0IHNoZWJhbmcgb2YgcGVybAorCitSZXBsYWNlIGluY29ycmVjdCBzaGViYW5nIG9mIHBlcmwgd2l0aCBgIyEvdXNyL2Jpbi9lbnYgcGVybCcuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvY3BkaXN0LnBsICAgIHwgMiArLQorIG5zcy9jb3JlY29uZi9pbXBvcnQucGwgICAgfCAyICstCisgbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsIHwgMiArLQorIG5zcy9jb3JlY29uZi9yZWxlYXNlLnBsICAgfCAyICstCisgbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwgICB8IDIgKy0KKyBuc3MvdGVzdHMvY2xlYW5fdGJ4ICAgICAgIHwgMiArLQorIG5zcy90ZXN0cy9wYXRoX3VuaXEgICAgICAgfCAyICstCisgOSBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUgYi9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUKKy0tLSBhL25zcy9jbWQvc21pbWV0b29scy9zbWltZQorKysrIGIvbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL2NwZGlzdC5wbCBiL25zcy9jb3JlY29uZi9jcGRpc3QucGwKK2luZGV4IDgwMGVkZmIuLjY1MjE4N2YgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvY3BkaXN0LnBsCisrKysgYi9uc3MvY29yZWNvbmYvY3BkaXN0LnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvaW1wb3J0LnBsIGIvbnNzL2NvcmVjb25mL2ltcG9ydC5wbAoraW5kZXggZGQyZDE3Ny4uNDI4ZWFhNSAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9pbXBvcnQucGwKKysrKyBiL25zcy9jb3JlY29uZi9pbXBvcnQucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbCBiL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbAoraW5kZXggMjAzOTE4MC4uNWY0ZjY5YyAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbAorKysrIGIvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwgYi9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsCitpbmRleCAzM2Q4MGJiLi4wMWZjMDk3IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbAorKysrIGIvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvcmVsZWFzZS5wbCBiL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsCitpbmRleCA3Y2RlMTlkLi5iNWRmMmY2IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwKKysrKyBiL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvdmVyc2lvbi5wbCBiL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsCitpbmRleCBkMmE0OTQyLi43OTM1OWZlIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwKKysrKyBiL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3Ivc2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvdGVzdHMvY2xlYW5fdGJ4IGIvbnNzL3Rlc3RzL2NsZWFuX3RieAoraW5kZXggNGRlOTU1NS4uYTdkZWY5ZiAxMDA3NTUKKy0tLSBhL25zcy90ZXN0cy9jbGVhbl90YngKKysrKyBiL25zcy90ZXN0cy9jbGVhbl90YngKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMKK2RpZmYgLS1naXQgYS9uc3MvdGVzdHMvcGF0aF91bmlxIGIvbnNzL3Rlc3RzL3BhdGhfdW5pcQoraW5kZXggZjI5ZjYwYS4uMDhmYmZmYSAxMDA3NTUKKy0tLSBhL25zcy90ZXN0cy9wYXRoX3VuaXEKKysrKyBiL25zcy90ZXN0cy9wYXRoX3VuaXEKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NmRlMDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRml4IG5zcyBtdWx0aWxpYiBidWlsZCBvbiBvcGVuU1VTRSAxMS54IDMyYml0CisKK1doaWxlIGJ1aWxkaW5nIGxpYjY0LW5zcyBvbiBvcGVuU1VTRSAxMS54IDMyYml0LCB0aGUgbnNpbnN0YWxsIHdpbGwKK2ZhaWwgd2l0aCBlcnJvcjoKKworKiBuc2luc3RhbGwuYzoxOjA6IHNvcnJ5LCB1bmltcGxlbWVudGVkOiA2NC1iaXQgbW9kZSBub3QgY29tcGlsZWQKKworSXQgY2F1c2VkIGJ5IHRoZSAnLW02NCcgb3B0aW9uIHdoaWNoIHBhc3NlZCB0byBob3N0IGdjYy4KKworVGhlIG5zaW5zdGFsbCB3YXMgYnVpbHQgZmlyc3Qgd2hpbGUgbnNzIHN0YXJ0aW5nIHRvIGJ1aWxkLCBpdCBvbmx5IHJ1bnMKK29uIGhvc3QgdG8gaW5zdGFsbCBidWlsdCBmaWxlcywgaXQgZG9lc24ndCBuZWVkIGFueSBjcm9zcy1jb21wbGluZyBvcgorbXVsdGlsaWIgYnVpbGQgb3B0aW9ucy4gSnVzdCBjbGVhbiB0aGUgQVJDSEZMQUcgYW5kIExERkxBR1MgdG8gZml4IHRoaXMKK2Vycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlIGIvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQoraW5kZXggMTg1MGJjYi4uNWFlZTg0ZiAxMDA2NDQKKy0tLSBhL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKKysrKyBiL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCwxMiBAQCBJTlRFUk5BTF9UT09MUyAgPSAxCisgCisgaW5jbHVkZSAkKERFUFRIKS9jb3JlY29uZi9jb25maWcubWsKKyAKKysjIG5zaW5zdGFsbCBpcyB1bmZpdCBmb3IgY3Jvc3MtY29tcGlsaW5nL211bHRpbGliLWJ1aWxkIHNpbmNlIGl0IHdhcworKyMgYWx3YXlzIHJ1biBvbiBsb2NhbCBob3N0IHRvIGluc3RhbGwgYnVpbHQgZmlsZXMuIFRoaXMgY2hhbmdlIGludGVuZHMKKysjIHRvIGNsZWFuIHRoZSAnLW02NCcgZnJvbSBBUkNIRkxBRyBhbmQgTERGTEFHUy4KKytBUkNIRkxBRyA9CisrTERGTEFHUyA9CisrCisgaWZlcSAoLCQoZmlsdGVyLW91dCBPUzIgV0lOJSwkKE9TX1RBUkdFVCkpKQorIFBST0dSQU0JCT0KKyBlbHNlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjM1NTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDcxIEBACituc3M6IGZpeCBzdXBwb3J0IGNyb3NzIGNvbXBpbGluZworCitMZXQgc29tZSBtYWtlIHZhcmlhYmxlcyBiZSBhc3NpZ25lZCBmcm9tIG91dHNpZGUgbWFrZWZpbGUuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG5zcy9jb3JlY29uZi9MaW51eC5tayAgIHwgMTIgKysrKysrKysrKystCisgbnNzL2NvcmVjb25mL2FyY2gubWsgICAgfCAgMiArLQorIG5zcy9saWIvZnJlZWJsL01ha2VmaWxlIHwgIDYgKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL0xpbnV4Lm1rIGIvbnNzL2NvcmVjb25mL0xpbnV4Lm1rCistLS0gYS9uc3MvY29yZWNvbmYvTGludXgubWsKKysrKyBiL25zcy9jb3JlY29uZi9MaW51eC5taworQEAgLTE2LDExICsxNiwyMSBAQCBpZmVxICgkKFVTRV9QVEhSRUFEUyksMSkKKyAJSU1QTF9TVFJBVEVHWSA9IF9QVEgKKyBlbmRpZgorIAorK2lmbmRlZiBDQworIENDCQkJPSBnY2MKKytlbmRpZgorKworK2lmZGVmIENYWAorK0NDQwkJCT0gJChDWFgpCisrZWxzZQorIENDQwkJCT0gZysrCisrZW5kaWYKKysKKytpZm5kZWYgUkFOTElCCisgUkFOTElCCQkJPSByYW5saWIKKytlbmRpZgorIAorLURFRkFVTFRfQ09NUElMRVIgPSBnY2MKKytERUZBVUxUX0NPTVBJTEVSID0gJChDQykKKyAKKyBpZmVxICgkKE9TX1RBUkdFVCksQW5kcm9pZCkKKyBpZm5kZWYgQU5EUk9JRF9OREsKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvYXJjaC5tayBiL25zcy9jb3JlY29uZi9hcmNoLm1rCitpbmRleCA2NTU3MzQ4Li5iNzIyNDEyIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL2FyY2gubWsKKysrKyBiL25zcy9jb3JlY29uZi9hcmNoLm1rCitAQCAtMzcsNyArMzcsNyBAQCBPU19URVNUIDo9ICQoc2hlbGwgdW5hbWUgLW0pCisgaWZlcSAoJChPU19URVNUKSxpODZwYykKKyAgICAgT1NfUkVMRUFTRSA6PSAkKHNoZWxsIHVuYW1lIC1yKV8kKE9TX1RFU1QpCisgZWxzZQorLSAgICBPU19SRUxFQVNFIDo9ICQoc2hlbGwgdW5hbWUgLXIpCisrICAgIE9TX1JFTEVBU0UgPz0gJChzaGVsbCB1bmFtZSAtcikKKyBlbmRpZgorIAorICMKK2RpZmYgLS1naXQgYS9uc3MvbGliL2ZyZWVibC9NYWtlZmlsZSBiL25zcy9saWIvZnJlZWJsL01ha2VmaWxlCitpbmRleCAwZDI5M2YxLi42NzhmNTA2IDEwMDY0NAorLS0tIGEvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUKKysrKyBiL25zcy9saWIvZnJlZWJsL01ha2VmaWxlCitAQCAtMzYsNiArMzYsMTIgQEAgaWZkZWYgVVNFXzY0CisgCURFRklORVMgKz0gLUROU1NfVVNFXzY0CisgZW5kaWYKKyAKKytpZmVxICgkKE9TX1RFU1QpLG1pcHMpCisraWZuZGVmIFVTRV82NAorKwlERUZJTkVTICs9IC1ETlNfUFRSX0xFXzMyCisrZW5kaWYKKytlbmRpZgorKworIGlmZGVmIFVTRV9BQkkzMl9GUFUKKyAJREVGSU5FUyArPSAtRE5TU19VU0VfQUJJMzJfRlBVCisgZW5kaWYKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MWRjOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACituc3M6bm8gcnBhdGggZm9yIGNyb3NzIGNvbXBpbGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBuc3MvY21kL3BsYXRsaWJzLm1rIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25zcy9jbWQvcGxhdGxpYnMubWsgYi9uc3MvY21kL3BsYXRsaWJzLm1rCistLS0gYS9uc3MvY21kL3BsYXRsaWJzLm1rCisrKysgYi9uc3MvY21kL3BsYXRsaWJzLm1rCitAQCAtMTgsOSArMTgsOSBAQCBlbmRpZgorIAorIGlmZXEgKCQoT1NfQVJDSCksIExpbnV4KQorIGlmZXEgKCQoVVNFXzY0KSwgMSkKKy1FWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI2NDovb3B0L3N1bi9wcml2YXRlL2xpYjY0OiQkT1JJR0lOLy4uL2xpYicKKysjRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliNjQ6L29wdC9zdW4vcHJpdmF0ZS9saWI2NDokJE9SSUdJTi8uLi9saWInCisgZWxzZQorLUVYVFJBX1NIQVJFRF9MSUJTICs9IC1XbCwtcnBhdGgsJyQkT1JJR0lOLy4uL2xpYjovb3B0L3N1bi9wcml2YXRlL2xpYicKKysjRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliOi9vcHQvc3VuL3ByaXZhdGUvbGliJworIGVuZGlmCisgZW5kaWYKKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLnBjLmluIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBmNjM1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9T0VQUkVGSVgKK2V4ZWNfcHJlZml4PU9FRVhFQ1BSRUZJWAorbGliZGlyPU9FTElCRElSCitpbmNsdWRlZGlyPU9FSU5DRElSCisKK05hbWU6IE5TUworRGVzY3JpcHRpb246IE5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMKK1ZlcnNpb246ICVOU1NfVkVSU0lPTiUKK1JlcXVpcmVzOiBuc3ByID49ICVOU1BSX1ZFUlNJT04lCitMaWJzOiAtbHNzbDMgLWxzbWltZTMgLWxuc3MzIC1sc29mdG9rbjMgLWxuc3N1dGlsMworQ2ZsYWdzOiAtSU9FSU5DRElSCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0ZTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9zaWdubGlicy5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKworIyBzaWdubGlicy5zaAorIworIyAoYykyMDEwIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyByZWdlbmVyYXRlcyB0aGUgLmNoayBmaWxlcyBmb3IgdGhlIE5TUyBsaWJyYXJpZXMgdGhhdCByZXF1aXJlIGl0CisjIHNpbmNlIHRoZSBvbmVzIHRoYXQgYXJlIGJ1aWx0IGhhdmUgaW5jb3JyZWN0IGNoZWNrc3VtcyB0aGF0IHdlcmUKKyMgY2FsY3VsYXRlZCBvbiB0aGUgaG9zdCB3aGVyZSB0aGV5IHJlYWxseSBuZWVkIHRvIGJlIGRvbmUgb24gdGhlCisjIHRhcmdldAorCitDSEtfRklMRVM9YGxzIC9saWIqLyouY2hrIC91c3IvbGliKi8qLmNoayAyPi9kZXYvbnVsbGAKK1NJR05fQklOQVJZPWB3aGljaCBzaGxpYnNpZ25gCitmb3IgSSBpbiAkQ0hLX0ZJTEVTCitkbworICAgICAgIEROPWBkaXJuYW1lICRJYAorICAgICAgIEJOPWBiYXNlbmFtZSAkSSAuY2hrYAorICAgICAgIEZOPSRETi8kQk4uc28KKyAgICAgICAkU0lHTl9CSU5BUlkgLWkgJEZOCitkb25lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4xOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMTkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E0YTFmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMTkuMi5iYgpAQCAtMCwwICsxLDIyMyBAQAorU1VNTUFSWSA9ICJNb3ppbGxhJ3MgU1NMIGFuZCBUTFMgaW1wbGVtZW50YXRpb24iCitERVNDUklQVElPTiA9ICJOZXR3b3JrIFNlY3VyaXR5IFNlcnZpY2VzIChOU1MpIGlzIGEgc2V0IG9mIGxpYnJhcmllcyBcCitkZXNpZ25lZCB0byBzdXBwb3J0IGNyb3NzLXBsYXRmb3JtIGRldmVsb3BtZW50IG9mIFwKK3NlY3VyaXR5LWVuYWJsZWQgY2xpZW50IGFuZCBzZXJ2ZXIgYXBwbGljYXRpb25zLiBcCitBcHBsaWNhdGlvbnMgYnVpbHQgd2l0aCBOU1MgY2FuIHN1cHBvcnQgU1NMIHYyIGFuZCB2MywgXAorVExTLCBQS0NTIDUsIFBLQ1MgNywgUEtDUyAxMSwgUEtDUyAxMiwgUy9NSU1FLCBYLjUwOSBcCit2MyBjZXJ0aWZpY2F0ZXMsIGFuZCBvdGhlciBzZWN1cml0eSBzdGFuZGFyZHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9zZWN1cml0eS9wa2kvbnNzLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNUEwtMi4wIHwgKE1QTC0yLjAgJiBHUEwtMi4wKykgfCAoTVBMLTIuMCAmIExHUEwtMi4xKykiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL25zcy9DT1BZSU5HO21kNT0zYjFlODhlMWI5YzBiNWE0YjI4ODFkNDZjY2UwNmExOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9uc3MvbGliL2ZyZWVibC9tcGkvZG9jL0xJQ0VOU0U7bWQ1PTQ5MWYxNThkMDlkOTQ4NDY2YWZjZTg1ZDZmMWZlMThmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRS1NUEw7bWQ1PTVkNDI1YzhmMzE1N2RiZjIxMmRiMmVjNTNkOWU1MTMyIgorCitTUkNfVVJJID0gIlwKKyAgICBodHRwOi8vZnRwLm1vemlsbGEub3JnL3B1Yi9tb3ppbGxhLm9yZy9zZWN1cml0eS9uc3MvcmVsZWFzZXMvTlNTXzNfMTlfMl9SVE0vc3JjLyR7QlB9LnRhci5neiBcCisgICAgZmlsZTovL25zcy1maXgtc3VwcG9ydC1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaCBcCisgICAgZmlsZTovL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLnBjLmluIFwKKyAgICBmaWxlOi8vc2lnbmxpYnMuc2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjAyZmZkMWU4ZThlZjVmODUxMmZhMDJkOGNhOWRiM2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTMwNjY2M2U4ZjYxZDg0NDlhZDhjYmNmZmFiNzQzYTYwNGRjZDlmNmYzNDIzMmMyMTA4NDdjNTFkY2UyYzlhZSIKKworaW5oZXJpdCBzaXRlaW5mbworCitERVBFTkRTID0gInNxbGl0ZTMgbnNwciB6bGliIG5zcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJzcWxpdGUzLW5hdGl2ZSBuc3ByLW5hdGl2ZSB6bGliLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59LXNtaW1lID0gInBlcmwiCisKK1REID0gIiR7U30vdGVudGF0aXZlLWRpc3QiCitURFMgPSAiJHtTfS90ZW50YXRpdmUtZGlzdC1zdGFnaW5nIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICBleHBvcnQgTlNQUl9JTkNMVURFX0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0KKyAgICBleHBvcnQgTlNQUl9MSUJfRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfQorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGV4cG9ydCBMREZMQUdTPSIiCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQorICAgIGV4cG9ydCBOQVRJVkVfQ0M9ImdjYyIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKyAgICBleHBvcnQgRlJFRUJMX0xPV0hBU0g9MQorCisgICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KKyAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQorICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKKyAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKKyAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQorCisgICAgZXhwb3J0IE9TX1JFTEVBU0U9My40CisgICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAorICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4CisKKyAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYworICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYzY0CisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9bWlwcworICAgIGVsc2UKKyAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCisgICAgZmkKKworICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfNjQ9MQorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKKyAgICBmaQorCisgICAgIyBXZSBjYW4gbW9kaWZ5IENDIGluIHRoZSBlbnZpcm9ubWVudCwgYnV0IGlmIHdlIHNldCBpdCB2aWEgYW4KKyAgICAjIGFyZ3VtZW50IHRvIG1ha2UsIG5zaW5zdGFsbCwgYSBob3N0IHByb2dyYW0sIHdpbGwgYWxzbyBidWlsZCB3aXRoIGl0IQorICAgICMKKyAgICBleHBvcnQgQ0M9IiR7Q0N9IC1nIgorICAgIG1ha2UgLUMgLi9uc3MgQ0NDPSIke0NYWH0gLWciIFwKKyAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9Cit9CisKKworZG9faW5zdGFsbF9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBleHBvcnQgTERGTEFHUz0iIgorfQorCitkb19pbnN0YWxsKCkgeworICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKKyAgICBleHBvcnQgTkFUSVZFX0NDPSJnY2MiCisgICAgZXhwb3J0IEJVSUxEX09QVD0xCisKKyAgICBleHBvcnQgRlJFRUJMX05PX0RFUEVORD0xCisKKyAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQorICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCisgICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQorICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQorICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCisKKyAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKKyAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4CisgICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKKworICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjNjQKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1taXBzCisgICAgZWxzZQorICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKKyAgICBmaQorICAgIGlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfNjQ9MQorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgLWEgIiR7U0lURUlORk9fQklUU30iID0gIjMyIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBVU0VfWDMyPTEKKyAgICBmaQorCisgICAgbWFrZSAtQyAuL25zcyBcCisgICAgICAgIENDQz0iJHtDWFh9IiBcCisgICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfSBcCisgICAgICAgIFNPVVJDRV9MSUJfRElSPSIke1REfS8ke2xpYmRpcn0iIFwKKyAgICAgICAgU09VUkNFX0JJTl9ESVI9IiR7VER9LyR7YmluZGlyfSIgXAorICAgICAgICBpbnN0YWxsCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LworICAgIGZvciBmaWxlIGluICR7U30vZGlzdC8qLk9CSi9saWIvKi5zbzsgZG8KKyAgICAgICAgZWNobyAiSW5zdGFsbGluZyBgYmFzZW5hbWUgJGZpbGVgLi4uIgorICAgICAgICBjcCAkZmlsZSAgJHtEfS8ke2xpYmRpcn0vCisgICAgZG9uZQorCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc28uKjsgZG8KKyAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICAgICAgbG4gLXNmICQoYmFzZW5hbWUgJHNoYXJlZF9saWIpICR7RH0vJHtsaWJkaXJ9LyQoYmFzZW5hbWUgJHNoYXJlZF9saWIgLjFvZSkKKyAgICAgICAgZmkKKyAgICBkb25lCisgICAgZm9yIHNoYXJlZF9saWIgaW4gJHtURH0vJHtsaWJkaXJ9Lyouc287IGRvCisgICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgLWEgISAtZSAke0R9LyR7bGliZGlyfS8kc2hhcmVkX2xpYiBdOyB0aGVuCisgICAgICAgICAgICBjcCAkc2hhcmVkX2xpYiAke0R9LyR7bGliZGlyfQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMKKyAgICBpbnN0YWxsIC1tIDY0NCAtdCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMyBkaXN0L3B1YmxpYy9uc3MvKgorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGZvciBiaW5hcnkgaW4gJHtURH0vJHtiaW5kaXJ9Lyo7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IC10ICR7RH0vJHtiaW5kaXJ9ICRiaW5hcnkKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgQ3JlYXRlIGVtcHR5IC5jaGsgZmlsZXMgZm9yIHRoZSBOU1MgbGlicmFyaWVzIGF0IGJ1aWxkIHRpbWUuIFRoZXkgY291bGQKKyAgICAjIGJlIHJlZ2VuZXJhdGVkIGF0IHRhcmdldCdzIGJvb3QgdGltZS4KKyAgICBmb3IgZmlsZSBpbiBsaWJzb2Z0b2tuMy5jaGsgbGliZnJlZWJsMy5jaGsgbGlibnNzZGJtMy5jaGs7IGRvCisgICAgICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9LyRmaWxlCisgICAgICAgIGNobW9kIDc1NSAke0R9LyR7bGliZGlyfS8kZmlsZQorICAgIGRvbmUKKyAgICBpbnN0YWxsIC1EIC1tIDc1NSAke1dPUktESVJ9L3NpZ25saWJzLnNoICR7RH0vJHtiaW5kaXJ9L3NpZ25saWJzLnNoCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworICAgIHNlZCAncy8lTlNTX1ZFUlNJT04lLyR7UFZ9LycgJHtXT1JLRElSfS9uc3MucGMuaW4gfCBzZWQgJ3MvJU5TUFJfVkVSU0lPTiUvNC45LjIvJyA+ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FUFJFRklYOiR7cHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FRVhFQ1BSRUZJWDoke2V4ZWNfcHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FTElCRElSOiR7bGliZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn0vbnNzMzpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcy5wYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgIyBDcmVhdGUgYSBibGFuayBjZXJ0aWZpY2F0ZQorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8KKyAgICB0b3VjaCAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2VydHV0aWwgLU4gLWQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyAtZiAuL2VtcHR5X3Bhc3N3b3JkCisgICAgY2htb2QgNjQ0ICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8qLmRiCisgICAgcm0gLi9lbXB0eV9wYXNzd29yZAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgIGZvciBJIGluICRELyR7bGliZGlyfS9saWIqLmNoazsgZG8KKyAgICAgICAgICAgIEROPWBkaXJuYW1lICRJYAorICAgICAgICAgICAgQk49YGJhc2VuYW1lICRJIC5jaGtgCisgICAgICAgICAgICBGTj0kRE4vJEJOLnNvCisgICAgICAgICAgICBzaGxpYnNpZ24gLWkgJEZOCisJICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCSAgICAgICBleGl0IDEKKwkgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBleGl0IDAKKyAgICBmaQorICAgIHNpZ25saWJzLnNoCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1zbWltZSIKK0ZJTEVTXyR7UE59LXNtaW1lID0gIlwKKyAgICAke2JpbmRpcn0vc21pbWUgXAorIgorRklMRVNfJHtQTn0gPSAiXAorICAgICR7c3lzY29uZmRpcn0gXAorICAgICR7YmluZGlyfSBcCisgICAgJHtsaWJkaXJ9L2xpYiouY2hrIFwKKyAgICAke2xpYmRpcn0vbGliKi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbnNzIFwKKyAgICAke2xpYmRpcn0vcGtnY29uZmlnLyogXAorICAgICR7aW5jbHVkZWRpcn0vKiBcCisgICAgIgorIyBGSUxFU18ke1BOfS1kYmcgaXMgcG9wdWxhdGVkIGF1dG9tYXRpY2FsbHkKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkOTYyNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcDExLWtpdC9wMTEta2l0XzAuMjIuMS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgd2F5IHRvIGxvYWQgYW5kIGVudW1lcmF0ZSBQS0NTIzExIG1vZHVsZXMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTAyOTMzODg3ZjYwOTgwN2ZiYjU3YWE0MjM3ZDE0YTUwIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitERVBFTkRTID0gImxpYnRhc24xIGxpYmZmaSIKKworU1JDX1VSSSA9ICJodHRwOi8vcDExLWdsdWUuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTliZWExMTA2NjI4ZmZiODIwYmRhZDI0YTgxOWZhYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZjNhMzM5ZmNmNmFhMGUzMmM4YzIzZjc5YmE3MTkxZTU3MzEyYmUyYmRhOGIyNGU2ZDEyMWMyNjcwNTM5YTVjIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgJHtsaWJkaXJ9L3AxMS1raXQtcHJveHkuc28gXAorICAgICR7bGliZGlyfS9wa2NzMTEvcDExLWtpdC10cnVzdC5zbyBcCisiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wa2NzMTEvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BrY3MxMS8uZGVidWciCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODM2Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkNvbGxlY3Rpb24gb2Ygc2ltcGxlIFBJTiBvciBwYXNzcGhyYXNlIGVudHJ5IGRpYWxvZ3MiCitERVNDUklQVElPTiA9ICJcCisJUGluZW50cnkgaXMgYSBjb2xsZWN0aW9uIG9mIHNpbXBsZSBQSU4gb3IgcGFzc3BocmFzZSBlbnRyeSBkaWFsb2dzIHdoaWNoIFwKKwl1dGlsaXplIHRoZSBBc3N1YW4gcHJvdG9jb2wgYXMgZGVzY3JpYmVkIGJ5IHRoZSBhZWd5cHRlbiBwcm9qZWN0OyBzZWUgXAorCWh0dHA6Ly93d3cuZ251cGcub3JnL2FlZ3lwdGVuLyBmb3IgZGV0YWlscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3JlbGF0ZWRfc29mdHdhcmUvcGluZW50cnkvaW5kZXguZW4uaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jYmJkNzk0ZTJhMGEyODliOWRmY2M5ZjUxM2QxOTk2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNTFkNDU0ZjkyMTExMWI1MTU2YTIyOTFjYmY3MDI3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZDhiYzE1OTJjZWIyMmJiNDkyYjA3Y2IyOWIxYjE0MGJiODgyYzg1OWU2NTAzYjk3NDI1NGMwYTRiNDEzNGQxIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXJwYXRoIFwKKwkJICAgICAgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBcCisgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJuY3Vyc2VzIGxpYmNhcCIKKworUEFDS0FHRUNPTkZJR1tuY3Vyc2VzXSA9ICItLWVuYWJsZS1uY3Vyc2VzICAtLXdpdGgtbmN1cnNlcy1pbmNsdWRlLWRpcj0ke1NUQUdJTkdfSU5DRElSfSwgLS1kaXNhYmxlLW5jdXJzZXMsIG5jdXJzZXMiCitQQUNLQUdFQ09ORklHW2xpYmNhcF0gPSAiLS13aXRoLWxpYmNhcCwgLS13aXRob3V0LWxpYmNhcCwgbGliY2FwIgorUEFDS0FHRUNPTkZJR1txdDRdID0gIi0tZW5hYmxlLXBpbmVudHJ5LXF0NCwgLS1kaXNhYmxlLXBpbmVudHJ5LXF0NCwgcXQ0LXgxMSIKK1BBQ0tBR0VDT05GSUdbcXQ0X2NsaXBib2FyZF0gPSAiLS1lbmFibGUtcGluZW50cnktcXQ0LWNsaXBib2FyZCAtLWVuYWJsZS1waW5lbnRyeS1xdDQsIC0tZGlzYWJsZS1waW5lbnRyeS1xdDQtY2xpcGJvYXJkLCBxdDQteDExIgorUEFDS0FHRUNPTkZJR1tndGsyXSA9ICItLWVuYWJsZS1waW5lbnRyeS1ndGsyLCAtLWRpc2FibGUtcGluZW50cnktZ3RrMiwgZ3RrKyBnbGliLTIuMCIKKworI1RvIHVzZSBsaWJzZWNyZXQsIGFkZCBtZXRhLWdub21lCitQQUNLQUdFQ09ORklHW3NlY3JldF0gPSAiLS1lbmFibGUtbGlic2VjcmV0LCAtLWRpc2FibGUtbGlic2VjcmV0LCBsaWJzZWNyZXQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9kaXNhYmxlX3Rlc3RzLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvZGlzYWJsZV90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTZjZjY2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvZGlzYWJsZV90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVc2Ugb2YgJCh0b3Bfc3JjZGlyKSBpbiBURVNUUyBpcyBhbiBlcnJvciB3aGljaCBjYXVzZXMKK2F1dG9tYWtlLTEuMTMgdG8gYWJvcnQuIEp1c3QgcmVtb3ZlIHRlc3RzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcG9wdC0xLjE2L01ha2VmaWxlLmFtIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQorLS0tIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQkyMDEwLTA1LTA0IDIzOjU1OjU0LjAwMDAwMDAwMCArMDMwMAorKysrIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQkyMDEzLTAxLTAyIDEzOjM0OjI5LjU0MDM2MTM5MSArMDIwMAorQEAgLTM0LDExICszNCw2IEBACisKKyBub2luc3RfU0NSSVBUUyA9IHRlc3RpdC5zaAorCistVEVTVFNfRU5WSVJPTk1FTlQgPSBcCistdGVzdDE9IiQodG9wX2J1aWxkZGlyKS90ZXN0MSIKKy0KKy1URVNUUyA9ICQodG9wX3NyY2RpcikvdGVzdGl0LnNoCistCisgaW5jbHVkZV9IRUFERVJTID0gcG9wdC5oCisKKyB1c3JsaWJkaXIgPSAkKGxpYmRpcikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BrZ2NvbmZpZ19maXgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wa2djb25maWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGRiZjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbnN0YWxsIHRoZSBwa2djb25maWcgZmlsZSBpbnRvIGxpYmRpci4KKworLS0tIHBvcHQtMS4xNi5vcmlnL01ha2VmaWxlLmFtCTIwMTItMDQtMjYgMTM6NDI6NTQuMDIxMTM5ODEzICswODAwCisrKysgcG9wdC0xLjE2L01ha2VmaWxlLmFtCTIwMTItMDQtMjYgMTM6MzY6MDMuNTUyMDk2OTEyICswODAwCitAQCAtNDcsNyArNDcsNyBAQAorIGxpYnBvcHRfbGFfU09VUkNFUyA9IHBvcHQuYyBwb3B0cGFyc2UuYyBwb3B0Y29uZmlnLmMgcG9wdGhlbHAuYyBwb3B0aW50LmMKKyBsaWJwb3B0X2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIEBMVExJQklOVExAIEBMVExJQklDT05WQAorIAorLXBrZ2NvbmZpZ2RpciA9ICQocHJlZml4KS9saWIvcGtnY29uZmlnCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gcG9wdC5wYworIAorIGlmIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiY2E5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGVycm9yIHdpdGggYXV0b21ha2UgMS4xMjoKKworfCBjb25maWd1cmUuYWM6NDk6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDIKKworSW5kZXg6IHBvcHQtMS4xNi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwb3B0LTEuMTYub3JpZy9jb25maWd1cmUuYWMKKysrKyBwb3B0LTEuMTYvY29uZmlndXJlLmFjCitAQCAtNDYsNyArNDYsNiBAQCBBQ19HQ0NfVFJBRElUSU9OQUwKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfSVNDX1BPU0lYCistQU1fQ19QUk9UT1RZUEVTCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhmbG9hdC5oIGZubWF0Y2guaCBnbG9iLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggbWNoZWNrLmggdW5pc3RkLmgpCisgCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjEzYTgxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vcnBtNS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiMDYxM2MzMGFmMmE4MjQ5YjhkY2M2N2QzZWRiMDZkIgorUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3JwbTUub3JnL2ZpbGVzL3BvcHQvcG9wdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wb3B0X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNzQzYmVlZmEzZGQ2MjQ3YTczZjhmN2EzMmMxNGMzMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNzI4ZWQyOTZmZTlmMDY5YTBlMDA1MDAzYzNkNmIyZGRlM2Q5Y2FkNDUzNDIyYTEwZDY1NTg2MTZkMzA0Y2M4IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lciBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE4ZjExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvZmlsZXMvcHRlc3QtcnVubmVyCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorQU5ZRkFJTEVEPW5vCitlY2hvICJTVEFSVDogJDAiCisKK2ZvciBsaWJkaXIgaW4gL3Vzci9saWIqCitkbworCisgICAgWyAhIC1kICIkbGliZGlyIiBdICYmIGNvbnRpbnVlCisKKyAgICBmb3IgeCBpbiBgbHMgLWQgJGxpYmRpci8qL3B0ZXN0IDI+L2Rldi9udWxsYAorICAgIGRvCisgICAgICAgIFsgISAtZiAkeC9ydW4tcHRlc3QgXSAmJiBjb250aW51ZQorICAgICAgICBbIC1oIGBkaXJuYW1lICR4YCBdICYmIGNvbnRpbnVlCisKKyAgICAgICAgZGF0ZSAiKyVZLSVtLSVkVCVIOiVNIgorICAgICAgICBlY2hvICJCRUdJTjogJHgiCisgICAgICAgIGNkICIkeCIKKyAgICAgICAgLi9ydW4tcHRlc3QgfHwgQU5ZRkFJTEVEPXllcworICAgICAgICBlY2hvICJFTkQ6ICR4IgorICAgICAgICBkYXRlICIrJVktJW0tJWRUJUg6JU0iCisgICAgZG9uZQorZG9uZQorZWNobyAiU1RPUDogJDAiCitpZiBbICIkQU5ZRkFJTEVEIiA9ICJ5ZXMiICBdOyB0aGVuCisgICAgZXhpdCAxCitmaQorZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMS4wLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzFiMGE0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkEgc2ltcGxlIHNoZWxsIHNjcmlwdCB0byBydW4gYWxsIGluc3RhbGxlZCBwdGVzdHMiCitERVNDUklQVElPTiA9ICJUaGUgcHRlc3QtcnVubmVyIHBhY2thZ2UgaW5zdGFsbHMgYSBwdGVzdC1ydW5uZXIgXAorc2hlbGwgc2NyaXB0IHdoaWNoIGxvb3BzIHRocm91Z2ggYWxsIGluc3RhbGxlZCBwdGVzdCB0ZXN0IHN1aXRlcyBhbmQgXAorcnVucyB0aGVtIGluIHNlcXVlbmNlLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvUHRlc3QiCitTUkNfVVJJICs9ICJmaWxlOi8vcHRlc3QtcnVubmVyIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wdGVzdC1ydW5uZXIgJHtEfSR7YmluZGlyfQorfQorCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19idWlsZFtub2V4ZWNdID0gIjEiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2EyOGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBwdGguCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKworSW5kZXg6IE1ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDcsNiArNDcsOSBAQCBkYXRhZGlyICAgICA9IEBkYXRhZGlyQAorIAorIERFU1RESVIgICAgID0KKyAKKytwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBwdGgucGMKKysKKyAjIworICMjICBfX19fIFRPT0wgREVGSU5JVElPTlMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICMjCitAQCAtMjE2LDcgKzIxOSw3IEBAIHRlc3RfcHRocmVhZDogdGVzdF9wdGhyZWFkLm8gdGVzdF9jb21tb24ubyBsaWJwdGhyZWFkLmxhCisgCisgIyAgIGluc3RhbGwgdGhlIHBhY2thZ2UKKyBpbnN0YWxsOiBhbGwtZm9yLWluc3RhbGwKKy0JQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAKKysJQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAgaW5zdGFsbC1wa2djb25maWdEQVRBCisgCUB0b3VjaCAuZG9uZS1pbnN0YWxsID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCUAkKE1BS0UpICQoTUtGTEFHUykgd2hhdC1uZXh0CisgaW5zdGFsbC1kaXJzOgorQEAgLTIyNyw2ICsyMzAsNyBAQCBpbnN0YWxsLWRpcnM6CisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4zCisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQoZGF0YWRpcikvYWNsb2NhbAorKwkkKFNIVE9PTCkgbWtkaXIgLWYgLXAgLW0gNzU1ICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikKKyBpbnN0YWxsLXB0aDoKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNzU1IHB0aC1jb25maWcgJChERVNURElSKSQoYmluZGlyKS9wdGgtY29uZmlnCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpcHRoLWNvbmZpZy4xICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9wdGgtY29uZmlnLjEKK0BAIC0yNDIsMTIgKzI0NiwxNiBAQCBpbnN0YWxsLXB0aHJlYWQ6CisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpcHRocmVhZC4zICQoREVTVERJUikkKG1hbmRpcikvbWFuMy9wdGhyZWFkLjMKKyAJQHVtYXNrIDAyMjsgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIGxpYnB0aHJlYWQubGEgJChERVNURElSKSQobGliZGlyKS9saWJwdGhyZWFkLmxhCisraW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQorKwkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChwa2djb25maWdfREFUQSkgJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kKHBrZ2NvbmZpZ19EQVRBKQorIAorICMgICB1bmluc3RhbGwgdGhlIHBhY2thZ2UKKyB1bmluc3RhbGw6CistCUAkKE1BS0UpICQoTUtGTEFHUykgQFVOSU5TVEFMTF9QVEhSRUFEQCB1bmluc3RhbGwtcHRoIHVuaW5zdGFsbC1kaXJzCisrCUAkKE1BS0UpICQoTUtGTEFHUykgdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgQFVOSU5TVEFMTF9QVEhSRUFEQCB1bmluc3RhbGwtcHRoIHVuaW5zdGFsbC1kaXJzCisgCUB0b3VjaCAuZG9uZS11bmluc3RhbGwgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJQCQoTUFLRSkgJChNS0ZMQUdTKSB3aGF0LW5leHQKKyt1bmluc3RhbGwtcGtnY29uZmlnREFUQToKKysJJChSTSkgJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kKHBrZ2NvbmZpZ19EQVRBKQorIHVuaW5zdGFsbC1wdGhyZWFkOgorIAkkKFJNKSAkKERFU1RESVIpJChiaW5kaXIpL3B0aHJlYWQtY29uZmlnCisgCSQoUk0pICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9wdGhyZWFkLWNvbmZpZy4xCitAQCAtMjcxLDYgKzI3OSw3IEBAIHVuaW5zdGFsbC1kaXJzOgorIAktJChSTURJUikgJChERVNURElSKSQoaW5jbHVkZWRpcikgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJLSQoUk1ESVIpICQoREVTVERJUikkKGJpbmRpcikgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJLSQoUk1ESVIpICQoREVTVERJUikkKHByZWZpeCkgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKysJLSQoUk1ESVIpICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgPiAvZGV2L251bGwgMj4mMSB8fCQoVFJVRSkKKyAKKyAjICAgc3RyaXAgZG93biB0aGUgc291cmNlIHRyZWUgdG8gaXRzIG1pbmltdW0KKyBzdHJpcHRlYXNlOgorSW5kZXg6IGNvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjU2LDYgKzY1NiwxMyBAQCBwdGhfYWNtYWMuaCBkbmwKKyBjaG1vZCArcnggcHRocmVhZC1jb25maWcKKyBjaG1vZCArcnggcHRoLWNvbmZpZworIClkbmwKKysKKytQVEhfVkVSU0lPTj1gZWNobyAkUFRIX1ZFUlNJT05fU1RSIHwgY3V0IC1kJyAnIC1mMWAKKytBQ19TVUJTVChQVEhfVkVSU0lPTikKKysKKytBQ19DT05GSUdfRklMRVMoW3B0aC5wY10pCisrQUNfT1VUUFVUCisrCisgaWYgdGVzdCAiLiRlbmFibGVfcHRocmVhZCIgPSAubm87IHRoZW4KKyAgICAgcm0gLWYgcHRocmVhZC1jb25maWcKKyAgICAgcm0gLWYgcHRocmVhZC5oCitJbmRleDogcHRoLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvcHRoLnBjLmluCitAQCAtMCwwICsxLDE2IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrYmluZGlyPUBiaW5kaXJACisrbWFuZGlyPUBtYW5kaXJACisrZGF0YWRpcj1AZGF0YWRpckAKKythY2Rpcj1AZGF0YWRpckAvYWNsb2NhbAorKworK05hbWU6IHB0aAorK0Rlc2NyaXB0aW9uOiBHTlUgUG9ydGFibGUgVGhyZWFkcworK1JlcXVpcmVzOgorK1ZlcnNpb246IEBQVEhfVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbHB0aAorK0xpYnMucHJpdmF0ZTogCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtZml4LXBhcmFsbGVsLnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVkYWZmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIGRmMDZiODE3MDc0NWVhYzM0N2FjYjk1ZjlmMzc0ZjI1NzYyMTI1NGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjkgSmFuIDIwMTUgMTg6MTE6MDAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuaW46IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6CisqIGRvX2NvbXBpbGUKKyBwdGhfdWN0eC5jOjMxOjE5OiBmYXRhbCBlcnJvcjogcHRoX3AuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICNpbmNsdWRlICJwdGhfcC5oIgorICAgICAgICAgICAgICAgICAgIF4KK2NvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCittYWtlOiAqKiogW3B0aF91Y3R4LmxvXSBFcnJvciAxCisKKyogZG9faW5zdGFsbDoKKyAgY3A6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlIGBpbWFnZS91c3IvbGliL3BrZ2NvbmZpZy8jSU5TVEAxNTUwNyMnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZGUwMzkwZC4uMzgxYTBlZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTIxOSw3ICsyMTksOCBAQCB0ZXN0X3B0aHJlYWQ6IHRlc3RfcHRocmVhZC5vIHRlc3RfY29tbW9uLm8gbGlicHRocmVhZC5sYQorIAorICMgICBpbnN0YWxsIHRoZSBwYWNrYWdlCisgaW5zdGFsbDogYWxsLWZvci1pbnN0YWxsCistCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1kaXJzIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURAIGluc3RhbGwtcGtnY29uZmlnREFUQQorKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycworKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURAIGluc3RhbGwtcGtnY29uZmlnREFUQQorIAlAdG91Y2ggLmRvbmUtaW5zdGFsbCA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAlAJChNQUtFKSAkKE1LRkxBR1MpIHdoYXQtbmV4dAorIGluc3RhbGwtZGlyczoKK0BAIC00MzIsNyArNDMzLDcgQEAgVEFHUzoKKyAjIyAgKEFVVE9NQVRJQ0FMTFkgVVBEQVRFRCAtIERPIE5PVCBFRElUKQorICMjCisgCistJChMT0JKUyk6IE1ha2VmaWxlCisrJChMT0JKUyk6IE1ha2VmaWxlIHB0aF9wLmgKKyAKKyAjIERPIE5PVCBSRU1PVkUKKyBwdGhfYXR0ci5sbzogcHRoX2F0dHIuYyBwdGhfcC5oIHB0aF92ZXJzLmMgcHRoLmggcHRoX2FjZGVmLmggcHRoX2FjbWFjLmgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzNzc2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL3B0aF8yLjAuNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkdOVSBQb3J0YWJsZSBUaHJlYWRzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcHRoLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORztiZWdpbmxpbmU9MTI7ZW5kbGluZT0xNTttZDU9YTQ4YWYxMTRhODBjMjIyY2FmZDM3ZjI0MzcwYTc3YjEiCitQUiA9ICJyMyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICB1Y19vcyA9IChyZS5tYXRjaCgnLip1Y2xpYmMqJywgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKSAhPSBOb25lKQorICAgIGlmIHVjX29zOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggdUNsaWJjIikKK30KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3B0aC9wdGgtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICBmaWxlOi8vcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3B0aC1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjljYjRhMjUzMzFhNGM0ZGI4NjZhMzFjYmU1MDdjNzkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyMzUzNjYwYzVhMmNhYWZkNjAxYjIwZTEyZTc1ZDg2NWZkODhmNmNmMWEwODhiMzA2YTM5NjNmMGJjNzcyMzIiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcHRoLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitkb19jb25maWd1cmUoKSB7CisJKCBjZCAke1N9OyBnbnUtY29uZmlnaXplICkKKwkoIGNkICR7U307IGF1dG9jb25mICkKKwlvZV9ydW5jb25mCit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNzNlOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL2Vudi5wYXRjaApAQCAtMCwwICsxLDI4IEBACisnc2NvbnMnIGNsZWFucyB0aGUgZW52aXJvbm1lbnQgd2hpY2ggYnJlYWtzIGNjYWNoZSBidWlsZHMgYmVjYXVzZQorQ0NBQ0hFRElSIGNhbiBwb2ludCB0byBhbiB1bmV4cGVjdGVkIGxvY2F0aW9uOgorCit8IGNjYWNoZSBhcm0tbGludXgtZ251ZWFiaS1nY2MgLi4uIGNvbnRleHQuYworfCBjY2FjaGU6IGZhaWxlZCB0byBjcmVhdGUgLi4uL3NlcmYvMS4zLjYtcjAvLmhvbWUvLmNjYWNoZSAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKKworSXNzdWUgaXMgZGVzY3JpYmVkIGluCisKKyAgaHR0cDovL3d3dy5zY29ucy5vcmcvd2lraS9JbXBvcnRpbmdFbnZpcm9ubWVudFNldHRpbmdzCisKK2FuZCBiZWNhdXNlICdiaXRiYWtlJyBjbGVhbnMgZW52aXJvbm1lbnQgd2UgY2FuIHBhc3MgaXQgY29tcGxldGVseQoraW5zdGVhZCBvZiB0cnlpbmcgdG8gZW51bWVyYXRlIG5lZWRlZCBlbnYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCisKK0luZGV4OiBzZXJmLTEuMy42L1NDb25zdHJ1Y3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXJmLTEuMy42Lm9yaWcvU0NvbnN0cnVjdAorKysrIHNlcmYtMS4zLjYvU0NvbnN0cnVjdAorQEAgLTE0OSw2ICsxNDksNyBAQCBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyBlbnYgPSBFbnZpcm9ubWVudCh2YXJpYWJsZXM9b3B0cywKKyAgICAgICAgICAgICAgICAgICB0b29scz0oJ2RlZmF1bHQnLCAndGV4dGZpbGUnLCksCisgICAgICAgICAgICAgICAgICAgQ1BQUEFUSD1bJy4nLCBdLAorKyAgICAgICAgICAgICAgICAgIEVOViA9IG9zLmVudmlyb24sCisgICAgICAgICAgICAgICAgICAgKQorCisgZW52LkFwcGVuZChCVUlMREVSUyA9IHsKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL25vcnBhdGgucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9ub3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MGY1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9ub3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1RoZSBSUEFUSCBoYW5kbGluZyBpbiBzZXJmIGlzIGFsbCB3cm9uZyBmb3IgdXMgYW5kIHdlIGRvbid0IG5lZWQgaXQgCithbnl3YXkgc28gaGFjayBhcm91bmQgaXQgYnkgcmVtb3ZpbmcgdGhpcyBmb3Igbm93LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworUlAgMjAxNC83LzE3CisKK0luZGV4OiBzZXJmLTEuMy42L1NDb25zdHJ1Y3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXJmLTEuMy42Lm9yaWcvU0NvbnN0cnVjdAkyMDE0LTA3LTE3IDE5OjU3OjU3LjcyNDM4OTE1MCArMDAwMAorKysrIHNlcmYtMS4zLjYvU0NvbnN0cnVjdAkyMDE0LTA3LTE3IDIwOjA0OjIxLjc4NDM5OTYxNiArMDAwMAorQEAgLTIxOCw4ICsyMTgsNyBAQAorIGVsc2U6CisgICBMSUJOQU1FU1RBVElDID0gJ3NlcmYtJHtNQUpPUn0nCisgCistZW52LkFwcGVuZChSUEFUSD1saWJkaXIsCistICAgICAgICAgICBQREI9JyR7VEFSR0VULmZpbGViYXNlfS5wZGInKQorK2Vudi5BcHBlbmQoUERCPScke1RBUkdFVC5maWxlYmFzZX0ucGRiJykKKyAKKyAjZm9yIGkgaW4gZW52OgorICMgICAgcHJpbnQoc3RyKGVudltpXSkpCitAQCAtMzcxLDEyICszNzAsNiBAQAorIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgZW52LkFwcGVuZChDUFBERUZJTkVTPVsnU0VSRl9IQVZFX1NTUEknXSkKKyAKKy0jIE9uIHNvbWUgc3lzdGVtcywgdGhlIC1SIHZhbHVlcyB0aGF0IEFQUiBkZXNjcmliZXMgbmV2ZXIgbWFrZSBpdCBpbnRvIGFjdHVhbAorLSMgUlBBVEggZmxhZ3MuIFdlJ2xsIG1hbnVhbGx5IG1hcCBhbGwgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpbnRvIG5ldworLSMgZmxhZ3MgdG8gc2V0IFJQQVRIIHZhbHVlcy4KKy1mb3IgZCBpbiBlbnZbJ0xJQlBBVEgnXToKKy0gIGVudi5BcHBlbmQoUlBBVEg9JzonK2QpCistCisgIyBTZXQgdXAgdGhlIGNvbnN0cnVjdGlvbiBvZiBzZXJmLSoucGMKKyBwa2djb25maWcgPSBlbnYuVGV4dGZpbGUoJ3NlcmYtJWQucGMnICUgKE1BSk9SLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5GaWxlKCdidWlsZC9zZXJmLnBjLmluJyksCitAQCAtNDQ2LDcgKzQzOSw2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlY9eydQQVRIJyA6IG9zLmVudmlyb25bJ1BBVEgnXX0pKQorIAorICMgRmluZCB0aGUgKGR5bmFtaWMpIGxpYnJhcnkgaW4gdGhpcyBkaXJlY3RvcnkKKy10ZW52LlJlcGxhY2UoUlBBVEg9dGhpc2RpcikKKyB0ZW52LlByZXBlbmQoTElCUz1bTElCTkFNRVNUQVRJQywgXSwKKyAgICAgICAgICAgICAgTElCUEFUSD1bdGhpc2RpciwgXSkKKyAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNTlkNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiSGlnaC1QZXJmb3JtYW5jZSBBc3luY2hyb25vdXMgSFRUUCBDbGllbnQgTGlicmFyeSIKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL3MvJHtCUE59LyR7QlBOfV8ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ub3JwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Vudi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjcxM2JlYWYwNWQ3ZjMzMjlkZTEyMWUyMThlMmZjYjkzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc3MTM0Y2Q1MDEwNjY0Y2EwMjM1ODViY2U1MDk3OGJkNDAwNTkwNmVkMjgwZmY4ODlmNTkxZjg2ZGY3YzU5ZTQiCisKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTg2ZDNmM2E5NWMzMjRjOTQ3OWJkODk4Njk2OGY0MzI3IgorCitERVBFTkRTID0gInB5dGhvbi1zY29ucy1uYXRpdmUgb3BlbnNzbCBhcHIgYXByLXV0aWwgdXRpbC1saW51eCBleHBhdCIKKworZG9fY29tcGlsZSgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgJHtQQVJBTExFTF9NQUtFfSBQUkVGSVg9JHtwcmVmaXh9IFwKKwkJQ0M9IiR7Q0N9IiBcCisJCUFQUj1gd2hpY2ggYXByLTEtY29uZmlnYCBBUFU9YHdoaWNoIGFwdS0xLWNvbmZpZ2AgXAorCQlDRkxBR1M9IiR7Q0ZMQUdTfSIgTElOS0ZMQUdTPSIke0xERkxBR1N9IiBcCisJCU9QRU5TU0w9IiR7U1RBR0lOR19FWEVDUFJFRklYRElSfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgUFJFRklYPSR7RH0ke3ByZWZpeH0gTElCRElSPSR7RH0ke2xpYmRpcn0gaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYyBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVkYjZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8uaW5jCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIE1JTUUgdHlwZSBkYXRhYmFzZSBhbmQgc3BlY2lmaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zaGFyZWQtbWltZS1pbmZvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJsaWJ4bWwyIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMCBzaGFyZWQtbWltZS1pbmZvLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbGliLTIuMC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9+aGFkZXNzL3NoYXJlZC1taW1lLWluZm8tJHtQVn0udGFyLnh6IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXVwZGF0ZS1taW1lZGIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pbWUiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnL3NoYXJlZC1taW1lLWluZm8ucGMiCisKKyMgZnJlZWRlc2t0b3Aub3JnLnhtbCBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdXBkYXRpbmcgdGhlIG1pbWUgZGF0YWJhc2UsCisjIHBhY2thZ2UgaXQgc2VwYXJhdGVseQorUEFDS0FHRVMgPSsgInNoYXJlZC1taW1lLWluZm8tZGF0YSIKK0ZJTEVTX3NoYXJlZC1taW1lLWluZm8tZGF0YSA9ICIke2RhdGFkaXJ9L21pbWUvcGFja2FnZXMvZnJlZWRlc2t0b3Aub3JnLnhtbCIKK1JERVBFTkRTX3NoYXJlZC1taW1lLWluZm8tZGF0YSA9ICJzaGFyZWQtbWltZS1pbmZvIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJdXBkYXRlLW1pbWUtZGF0YWJhc2UgJHtEfSR7ZGF0YWRpcn0vbWltZQorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitmaXggc2hhcmVkLW1pbWUtaW5mbyBidWlsZCByYWNlIGNvbmRpdGlvbgorCitUaGUgZGVmaW5pdGlvbiBvZiBpbnN0YWxsLWRhdGEtaG9vayBpbiBNYWtlZmlsZS5hbSBsZWFkcwordG8gbXVsdGlwbGUsIG92ZXJsYXBwaW5nLCBleGVjdXRpb25zIG9mIGluc3RhbGwtYmluUFJPR1JBTVMKK3RhcmdldC4gIFdlIG1vZGlmeSB0aGUgZGVmaW5pdGlvbiB0byBhdm9pZCB0aGF0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC00NCw3ICs0NCw5IEBAICQocGtnY29uZmlnX0RBVEEpOiBjb25maWcuc3RhdHVzCisgQElOVExUT09MX1hNTF9SVUxFQAorIEBJTlRMVE9PTF9ERVNLVE9QX1JVTEVACisgCistaW5zdGFsbC1kYXRhLWhvb2s6IGluc3RhbGwtYmluUFJPR1JBTVMKKysjIGRvIE5PVCBtYWtlIHRoaXMgZGVwZW5kZW50IG9uIGFueXRoaW5nIQorKyMKKytpbnN0YWxsLWRhdGEtaG9vazoKKyBpZiBFTkFCTEVfVVBEQVRFX01JTUVEQgorIAkkKERFU1RESVIpIiQoYmluZGlyKS91cGRhdGUtbWltZS1kYXRhYmFzZSIgLVYgIiQoREVTVERJUikkKGRhdGFkaXIpL21pbWUiCisgZW5kaWYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM0ZDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8vcGFyYWxsZWxtYWtlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1RoZSBNYWtlZmlsZSB1c2VkIGJ5IHNoYXJlZC1taW1lLWluZm8gaXMgb25lIGJpZyByYWNlIHdpdGggdGhlIFNVQkRJUlMgCitvcHRpb24gYW5kIHRoZSBkZXBlbmRlbmN5IHNwZWNpZmljYWxseSBjYWxsaW5nIG1ha2UgYWxsIGNvbWJpbmluZyB0bworY3JlYXRlIG11bHRpcGxlIG1ha2UgaW5zdGFuY2VzIGFsbCBvZiB3aGljaCBtYXkgdHJ5IGFuZCBidWlsZCB0YXJnZXRzCitsaWtlIHVwZGF0ZS1taW1lLWRhdGFiYXNlLgorCitUaGlzIHBhdGNoIHJlbW92ZXMgdGhvc2Ugb3B0aW9ucyBtZWFuaW5nIG1ha2UgY2FuIGNvcnJlY3RseSBpZGVudGlmeQorZGVwZW5kZW5jaWVzIGFuZCBzdG9wIGl0c2VsZiByYWNpbmcgaXRzZWxmLgorCitSUCAxMC8xMC8yMDExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogc2hhcmVkLW1pbWUtaW5mby0xLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzaGFyZWQtbWltZS1pbmZvLTEuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgc2hhcmVkLW1pbWUtaW5mby0xLjAvTWFrZWZpbGUuYW0KK0BAIC0xLDUgKzEsMyBAQAorLVNVQkRJUlM9LiBwbworLQorIEFNX0NQUEZMQUdTID0gJChBTExfQ0ZMQUdTKQorIAorIHBhY2thZ2VzZGlyID0gJChkYXRhZGlyKS9taW1lL3BhY2thZ2VzCitAQCAtNzIsOCArNzAsNyBAQCB1bmluc3RhbGwtaG9vazoKKyAKKyBhbGw6ICQoZGVmYXVsdG1ha2VkZXBzKQorIAorLWNyZWF0ZS1wb3Q6CistCSQoQU1fVl9HRU4pICQoTUFLRSkgLUMgcG8gc2hhcmVkLW1pbWUtaW5mby5wb3QKKytjcmVhdGUtcG90OiBwbworIAorIGNoZWNrOiBjcmVhdGUtcG90IGZyZWVkZXNrdG9wLm9yZy54bWwgdXBkYXRlLW1pbWUtZGF0YWJhc2UgY2hlY2stdHJhbnNsYXRpb25zCisgCWlmIHRlc3QgLWUgJCh0b3BfYnVpbGRkaXIpL2ZyZWVkZXNrdG9wLm9yZy54bWw7IHRoZW4gXApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGZkZTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mb18xLjQuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHNoYXJlZC1taW1lLWluZm8uaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wYXJhbGxlbG1ha2UucGF0Y2ggXAorCSAgICBmaWxlOi8vaW5zdGFsbC1kYXRhLWhvb2sucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNmMwMmY3YjY1OGZmZjJhOWMyMDc0MDZkMzg4ZWEzMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmMwYmQwMjNmNDk3ZGZkNzVlMWNhNzM0NDFjYmJiNWE2MzYxN2Q5ZTE0ZjI3OTBiODY4MzYxY2MwNTViNWIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYmZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9maWxlcy8wMDAxLXVzaW5nLXRoZS1keW5hbWljLWxpYnJhcnkucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorW1BBVENIXSB1c2luZyB0aGUgZHluYW1pYyBsaWJyYXJ5CisKK1Vwc3RyZWFtLVN0YXR1czogIEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2J1aWxkaW5nIHN0YXRpY2FsbHktbGlua2VkIHNxbGl0ZTMgZmFpbGVkIHNpbmNlIHNxbGl0ZTMubyBpcyBnZW5lcmF0ZWQgaW4gCitkaWZmZXJlbnQgZGlyLCBldmVuIGlmIGxpbmsgc3VjY2Vzc2VzLCB0aGUgc2l6ZSBvZiBzcWxpdGUzIGlzIGJlY29tZSBsYXJnZXIsCitzbyB1c2UgdGhlIGR5bmFtaWMgbGluaywgcmVmOiBodHRwOi8vcGF0Y2h3b3JrLm9wZW5lbWJlZGRlZC5vcmcvcGF0Y2gvOTMyOTMvCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA4OGJjMjNkLi5mZTUwZjIwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNyw3ICs3LDggQEAgbGlic3FsaXRlM19sYV9MREZMQUdTID0gLW5vLXVuZGVmaW5lZCAtdmVyc2lvbi1pbmZvIDg6Njo4CisgCisgYmluX1BST0dSQU1TID0gc3FsaXRlMworIHNxbGl0ZTNfU09VUkNFUyA9IHNoZWxsLmMgc3FsaXRlMy5oCistc3FsaXRlM19MREFERCA9IHNxbGl0ZTMuJChPQkpFWFQpIEBSRUFETElORV9MSUJTQAorK3NxbGl0ZTNfTERBREQgPSBAUkVBRExJTkVfTElCU0AgbGlic3FsaXRlMy5sYQorKworIAorIGluY2x1ZGVfSEVBREVSUyA9IHNxbGl0ZTMuaCBzcWxpdGUzZXh0LmgKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTM3OTFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJFbWJlZGRhYmxlIFNRTCBkYXRhYmFzZSBlbmdpbmUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnNxbGl0ZS5vcmciCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInJlYWRsaW5lIG5jdXJzZXMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitMSUNFTlNFID0gIlBEIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS10aHJlYWRzYWZlIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtdGhyZWFkc2FmZSAtLWRpc2FibGUtcmVhZGxpbmUiCitleHBvcnQgY29uZmlnX0JVSUxEX0NDID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IGNvbmZpZ19CVUlMRF9DRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IGNvbmZpZ19CVUlMRF9MSUJTID0gIiR7QlVJTERfTERGTEFHU30iCitleHBvcnQgY29uZmlnX1RBUkdFVF9DQyA9ICIke0NDfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0xJTksgPSAiJHtDQ0xEfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgY29uZmlnX1RBUkdFVF9MRkxBR1MgPSAiJHtMREZMQUdTfSIKKworIyBwcmVhZCgpIGlzIGluIFBPU0lYLjEtMjAwMSBzbyBhbnkgcmVhc29uYWJsZSBzeXN0ZW0gbXVzdCBzdXJlbHkgc3VwcG9ydCBpdAorQlVJTERfQ0ZMQUdTICs9ICItRFVTRV9QUkVBRCIKK1RBUkdFVF9DRkxBR1MgKz0gIi1EVVNFX1BSRUFEIgorCitQQUNLQUdFUyA9ICJsaWIke0JQTn0gbGliJHtCUE59LWRldiBsaWIke0JQTn0tZG9jICR7UE59LWRiZyBsaWIke0JQTn0tc3RhdGljZGV2ICR7UE59IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2xpYmRpcn0vKi5zby4qIgorRklMRVNfbGliJHtCUE59LWRldiA9ICIke2xpYmRpcn0vKi5sYSAke2xpYmRpcn0vKi5zbyBcCisJICAgICAgICAgICAgICAgIAkgICAke2xpYmRpcn0vcGtnY29uZmlnICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWIke0JQTn0tZG9jID0gIiR7ZG9jZGlyfSAke21hbmRpcn0gJHtpbmZvZGlyfSIKK0ZJTEVTX2xpYiR7QlBOfS1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKK0FVVE9fTElCTkFNRV9QS0dTID0gIiR7TUxQUkVGSVh9bGliJHtCUE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuOC4xMC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjguMTAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJhZDUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjguMTAuMi5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIHNxbGl0ZTMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NxbGl0ZTMuaDtlbmRsaW5lPTExO21kNT02NWYwYTU3Y2E2OTI4NzEwYjQxOGMwOTRiMzU3MGJiMCIKKworZGVmIHNxbGl0ZV9kb3dubG9hZF92ZXJzaW9uKGQpOgorICAgIHB2c3BsaXQgPSBkLmdldFZhcignUFYnLCBUcnVlKS5zcGxpdCgnLicpCisgICAgcmV0dXJuIHB2c3BsaXRbMF0gKyAnJy5qb2luKFtwYXJ0LnJqdXN0KDIsJzAnKSBmb3IgcGFydCBpbiBwdnNwbGl0WzE6XV0pCisKK1BFID0gIjMiCitTUUxJVEVfUFYgPSAiJHtAc3FsaXRlX2Rvd25sb2FkX3ZlcnNpb24oZCl9IgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvMjAxNS9zcWxpdGUtYXV0b2NvbmYtJHtTUUxJVEVfUFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzaW5nLXRoZS1keW5hbWljLWxpYnJhcnkucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTE4YmZjMDE1Y2Q0OWExZTdhOTYxYjdiNzdiYzNiMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM4MmU1NWE0ZTdkODUzYzkzMDM4NTYyY2EzZGQwMDMwNzkzN2ZjY2YxYzZiNjVkZGQ4MTNlNTAzYTU2ZDYyNiIKKworUyA9ICIke1dPUktESVJ9L3NxbGl0ZS1hdXRvY29uZi0ke1NRTElURV9QVn0iCisKKyMgUHJvdmlkZSBjb2x1bW4gbWV0YS1kYXRhIEFQSQorQlVJTERfQ0ZMQUdTICs9ICItRFNRTElURV9FTkFCTEVfQ09MVU1OX01FVEFEQVRBIgorVEFSR0VUX0NGTEFHUyArPSAiLURTUUxJVEVfRU5BQkxFX0NPTFVNTl9NRVRBREFUQSIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjc4MTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3RhZ2xpYi90YWdsaWJfMS45LjEuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciByZWFkaW5nIGFuZCBlZGl0aW5nIHRoZSBtZXRhLWRhdGEgb2YgcG9wdWxhciBhdWRpbyBmb3JtYXRzIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitIT01FUEFHRSA9ICJodHRwOi8vdGFnbGliLmdpdGh1Yi5pby8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIHwgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTVBMO21kNT1iZmUxZjc1ZDYwNjkxMmE0MTExYzkwNzQzZDZjNzMyNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90YWdsaWIvYXVkaW9wcm9wZXJ0aWVzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OWRmMmM3Mzk5NTE5YjczMTA1NjhhN2M1NTA0MmVjZWUiCisKK0RFUEVORFMgPSAiemxpYiIKKworU1JDX1VSSSA9ICJodHRwOi8vdGFnbGliLmdpdGh1Yi5pby9yZWxlYXNlcy8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMGQzNWRmOTY4MjJiYmQ1NjRjNTUwNGNiM2MyZTRkODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzJkMzcxY2QxNDE5YTg3YWUyMDA0NDdhNTNiZmYyYmUyMTkyODMwNzFlODBmZDEyMzM3OTI4Y2M5NjdkYzcxYSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS90YWdsaWItY29uZmlnIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQKKworUEFDS0FHRVMgPSsgIiR7UE59LWMiCitGSUxFU18ke1BOfS1jID0gIiR7bGliZGlyfS9saWJ0YWdfYy5zby4qIgorCitFWFRSQV9PRUNNQUtFID0gIi1ETElCX1NVRkZJWD0ke0BkLmdldFZhcignYmFzZWxpYicsIFRydWUpLnJlcGxhY2UoJ2xpYicsICcnKX0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2FkbWluL2x0bWFpbi5zaAorCXJtIC1mICR7U30vYWRtaW4vbGlidG9vbC5tNC5pbgorCSMgRG9uJ3QgaGF2ZSBhIGZsb2F0aW5nIGRlcGVuZGVueSBvbiBib29zdAorCXNlZCAtaSAtZSAicy9hdG9taWMuaHBwL2F0b21pYy1ub3QtZXhpc3QuaHBwLyIgJHtTfS9Db25maWd1cmVDaGVja3MuY21ha2UgJHtTfS90YWdsaWIvdG9vbGtpdC90cmVmY291bnRlci5jcHAKK30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YmE5N2QKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJDcmVhdGVzIGFuICd4dXNlcicgYWNjb3VudCB1c2VkIGZvciBydW5uaW5nIFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiIgorCitpbmhlcml0IGFsbGFyY2ggdXNlcmFkZAorCitkb19jb25maWd1cmUoKSB7CisgICAgOgorfQorCitkb19jb21waWxlKCkgeworICAgIDoKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSBzaHV0ZG93biIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1jcmVhdGUtaG9tZSBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIHZpZGVvLHR0eSxhdWRpbyxpbnB1dCxzaHV0ZG93bixkaXNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIHh1c2VyIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzYzZDM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE1NDVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4gdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgorLS0tIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4JMjAxMC0wNy0xNSAyMDowODo0NC4wMDAwMDAwMDAgKzAzMDAKKysrKyB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCTIwMTMtMDEtMTEgMTQ6NTA6MzQuOTcxMDI3NDQwICswMjAwCitAQCAtOCw3ICs4LDYgQEAKKyBBQ19JU0NfUE9TSVgKKyBBQ19QUk9HX0NDCisgQUNfU1REQ19IRUFERVJTCistQU1fUFJPR19DQ19TVERDCisKKyBpZiB0ZXN0IC16ICIkZW5hYmxlX21haW50YWluZXJfbW9kZSI7IHRoZW4KKyAgIGVuYWJsZV9tYWludGFpbmVyX21vZGU9eWVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQwNjJhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlZpcnR1YWwgdGVybWluYWwgZW11bGF0b3IgR1RLKyB3aWRnZXQgbGlicmFyeSIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD12dGUiCitMSUNFTlNFID0gIkxHUEx2Mi4wIgorREVQRU5EUyA9ICIgZ2xpYi0yLjAgZ3RrKyBpbnRsdG9vbC1uYXRpdmUgbmN1cnNlcyBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKK1JERVBFTkRTX2xpYnZ0ZSA9ICJ2dGUtdGVybWNhcCIKKworaW5oZXJpdCBnbm9tZSBndGstZG9jCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcHl0aG9uIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCitQQUNLQUdFUyA9KyAibGlidnRlIHZ0ZS10ZXJtY2FwIgorRklMRVNfbGlidnRlID0gIiR7bGliZGlyfS8qLnNvLiogJHtsaWJleGVjZGlyfS9nbm9tZS1wdHktaGVscGVyIgorRklMRVNfJHtQTn0tZGJnID0rICIke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyAke3ByZWZpeH0vc3JjICR7YmluZGlyfS8uZGVidWcgXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9Ly5kZWJ1ZyIKK0ZJTEVTX3Z0ZS10ZXJtY2FwID0gIiR7ZGF0YWRpcn0vdnRlL3Rlcm1jYXAtMC4wIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAyNWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHZ0ZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK1BSID0gInI2IgorCitTUkNfVVJJICs9ICJmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjQ5N2YyNmU0NTczMDg2NDllNmVjZTMyYjNiYjE0MmZmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODZjZjBiODFhYTAyM2ZhOTNlZDQxNTY1M2Q1MWM5Njc2N2YyMGIyZDczMzRjODkzY2FiYTcxZTQyNjU0YjBhZSIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAibWF0Y2hib3gtdGVybWluYWwgbmVlZHMgdG8gYmUgcG9ydGVkIG92ZXIgdG8gbmV3IHZ0ZSBmaXJzdCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLnR4dCBiL3lvY3RvLXBva3kvbWV0YS9yZWNpcGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDUzODZkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3JlY2lwZXMudHh0CkBAIC0wLDAgKzEsMTUgQEAKK3JlY2lwZXMtYnNwICAgICAgICAgIC0gQW55dGhpbmcgd2l0aCBsaW5rcyB0byBzcGVjaWZpYyBoYXJkd2FyZSBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCityZWNpcGVzLWNvbm5lY3Rpdml0eSAtIExpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zIHJlbGF0ZWQgdG8gY29tbXVuaWNhdGlvbiB3aXRoIG90aGVyIGRldmljZXMgCityZWNpcGVzLWNvcmUgICAgICAgICAtIFdoYXQncyBuZWVkZWQgdG8gYnVpbGQgYSBiYXNpYyB3b3JraW5nIExpbnV4IGltYWdlIGluY2x1ZGluZyBjb21tb25seSB1c2VkIGRlcGVuZGVuY2llcworcmVjaXBlcy1kZXZ0b29scyAgICAgLSBUb29scyBwcmltYXJpbHkgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIChidXQgY2FuIGFsc28gYmUgdXNlZCBvbiB0YXJnZXRzKQorcmVjaXBlcy1leHRlbmRlZCAgICAgLSBBcHBsaWNhdGlvbnMgd2hpY2ggd2hpbHN0IG5vdCBlc3NlbnRpYWwgYWRkIGZlYXR1cmVzIGNvbXBhcmVkIHRvIHRoZSBhbHRlcm5hdGl2ZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgY29yZS4gTWF5IGJlIG5lZWRlZCBmb3IgZnVsbCB0b29sIGZ1bmN0aW9uYWxpdHkgb3IgTFNCIGNvbXBsaWFuY2UuCityZWNpcGVzLWdub21lICAgICAgICAtIEFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgR1RLKyBhcHBsaWNhdGlvbiBmcmFtZXdvcmsKK3JlY2lwZXMtZ3JhcGhpY3MgICAgIC0gWCBhbmQgb3RoZXIgZ3JhcGhpY2FsbHkgcmVsYXRlZCBzeXN0ZW0gbGlicmFyaWVzICAKK3JlY2lwZXMta2VybmVsICAgICAgIC0gVGhlIGtlcm5lbCBhbmQgZ2VuZXJpYyBhcHBsaWNhdGlvbnMvbGlicmFyaWVzIHdpdGggc3Ryb25nIGtlcm5lbCBkZXBlbmRlbmNpZXMKK3JlY2lwZXMtbHNiNCAgICAgICAgIC0gUmVjaXBlcyBhZGRlZCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBzdXBwb3J0aW5nIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIDQueAorcmVjaXBlcy1tdWx0aW1lZGlhICAgLSBDb2RlY3MgYW5kIHN1cHBvcnQgdXRpbHRpZXMgZm9yIGF1ZGlvLCBpbWFnZXMgYW5kIHZpZGVvCityZWNpcGVzLXJ0ICAgICAgICAgICAtIFByb3ZpZGVzIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nIHRoZSBQUkVFTVBUX1JUIGtlcm5lbAorcmVjaXBlcy1xdCAgICAgICAgICAgLSBBbGwgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIFF0IGFwcGxpY2F0aW9uIGZyYW1ld29yaworcmVjaXBlcy1zYXRvICAgICAgICAgLSBUaGUgU2F0byBkZW1vL3JlZmVyZW5jZSBVSS9VWCwgaXRzIGFzc29jaWF0ZWQgYXBwcyBhbmQgY29uZmlndXJhdGlvbiAKK3JlY2lwZXMtc3VwcG9ydCAgICAgIC0gUmVjaXBlcyB1c2VkIGJ5IG90aGVyIHJlY2lwZXMgYnV0IHRoYXQgYXJlIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiBpbWFnZXMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS0zMiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZkOGQzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLTMyCkBAIC0wLDAgKzEsNDcgQEAKKyMgZGVmaW5pdGlvbnMgYXNzdW1pbmcgMzItYml0IGFybSBhcmNoaXRlY3R1cmUKKworIyBhcGFjaGUKK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgamlrZXMKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS02NCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS02NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGMwOWIyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLTY0CkBAIC0wLDAgKzEsNDYgQEAKKyMgZGVmaW5pdGlvbnMgYXNzdW1pbmcgNjQtYml0IGFybSBhcmNoaXRlY3R1cmUKKworIyBnZW5lcmFsCithY19jdl9zaXplb2Zfd2NoYXJfdD00CithY19jdl9zaXplb2Zfc2l6ZV90PTgKK2FjX2N2X3NpemVvZl9zc2l6ZV90PTgKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RvdWJsZT04CisKKyMgZ2xpYgorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKyNnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKworIyBnbGliLTIuMAorI2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KKyNnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CisjZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisjZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CisjZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBPUkJpdDIgKHNob3VsZCBiZSBpbiBtZXRhLWdub21lL3NpdGUvYXJtLTY0KQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTVkNDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tY29tbW9uCkBAIC0wLDAgKzEsMTU5IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm99CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPXllc30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPW1pc3Npbmd9CisKKyMgY29yZXV0aWxzCit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxOX0KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBkYiAoc2xlZXB5Y2F0KQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9Citjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPW5vfQorY29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9bm99CisKKyMgZm5tYXRjaAorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPSR7Z2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9eWVzfQorCisjZ3N0cmVhbWVyCithc19jdl91bmFsaWduZWRfYWNjZXNzPSR7YXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ub30KKworIyBodHRwcGMKK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBsaWJlc210cAorYWN4X3dvcmtpbmdfc25wcmludGY9JHthY3hfd29ya2luZ19zbnByaW50Zj15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIGxpYm5ldCAKK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIGxpYnhmY2U0dXRpbAord2l0aF9icm9rZW5fcHV0ZW52PSR7d2l0aF9icm9rZW5fcHV0ZW52PW5vfQorCisjIGxpbmtzCithY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9JHthY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9eWVzfQorCisjIG15c3FsCitteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9JHtteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9bm99CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9bm99CisKKyMgbmFubworYWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj0ke2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIHJzeW5jCityc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9JHtyc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9bm99Cityc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9JHtyc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9eWVzfQorcnN5bmNfY3ZfSEFWRV9MT05HTE9ORz0ke3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9eWVzfQorcnN5bmNfY3ZfSEFWRV9PRkY2NF9UPSR7cnN5bmNfY3ZfSEFWRV9PRkY2NF9UPW5vfQorcnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD0ke3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9bm99Cityc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99Cityc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Cityc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHNvY2F0CithY19jdl9pc3BlZWRfb2Zmc2V0PSR7YWNfY3ZfaXNwZWVkX29mZnNldD0xM30KK3NjX2N2X3Rlcm1pb3NfaXNwZWVkPSR7c2NfY3ZfdGVybWlvc19pc3BlZWQ9eWVzfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworCisjIHhmZm0KK2ptX2N2X2Z1bmNfd29ya2luZ19yZWFkZGlyPXllcworCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZmMDk3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtLWRhcndpbgpAQCAtMCwwICsxLDExIEBACithY19jdl9saWJfbV9zaW49JHthY19jdl9saWJfbV9zaW49eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249bm99CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9bm99CithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm99CitiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PSR7YmFzaF9jdl9oYXZlX21ic3RhdGVfdD15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yX3I9JHthY19jdl9mdW5jX3N0cmVycm9yX3I9bm99CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luOCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1kYXJ3aW44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZmYwOTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tZGFyd2luOApAQCAtMCwwICsxLDExIEBACithY19jdl9saWJfbV9zaW49JHthY19jdl9saWJfbV9zaW49eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249bm99CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9bm99CithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm99CitiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PSR7YmFzaF9jdl9oYXZlX21ic3RhdGVfdD15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yX3I9JHthY19jdl9mdW5jX3N0cmVycm9yX3I9bm99CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMTg4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1saW51eApAQCAtMCwwICsxLDE2MCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2Zfd2NoYXJfdD0ke2FjX2N2X3NpemVvZl93Y2hhcl90PTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfYm9vbD0ke2FjX2N2X3NpemVvZl9ib29sPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9NH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPSR7c2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz15ZXN9CitzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9JHtzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPSR7c2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD1ub30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkFNX0g9JHtzYW1iYV9jdl9IQVZFX0ZBTV9IPW5vfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPSR7c2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9JHtzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD0ke3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49JHtzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVI2ND1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUSU1CVUY9JHtzYW1iYV9jdl9IQVZFX1VUSU1CVUY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfUElEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49JHtzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9eWVzfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPSR7c2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD15ZXN9CitzYW1iYV9jdl9RVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz0ke3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPSR7c2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPW5vfQorc2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPSR7c2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPXllc30KK3NhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPSR7c2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0RFVl9UPSR7c2FtYmFfY3ZfU0laRU9GX0RFVl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ0VTU09SU19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ0VTU09SU19PTkxOPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfUEFHRVNJWkU9JHtzYW1iYV9jdl9TWVNDT05GX1NDX1BBR0VTSVpFPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLU19YRlM9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLU19YRlM9eWVzfQorc2FtYmFfY3ZfVFJZX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9RVU9UQVM9bm99CitzYW1iYV9jdl9UUllfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1dFX1VTRV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfV0VfVVNFX1NZU19RVU9UQVM9eWVzfQorc2FtYmFfY3ZfV0lUSF9BRlM9JHtzYW1iYV9jdl9XSVRIX0FGUz1ub30KK3NhbWJhX2N2X1dJVEhfRkFLRV9LQVNFUlZFUj0ke3NhbWJhX2N2X1dJVEhfRkFLRV9LQVNFUlZFUj1ub30KK3NhbWJhX2N2X1dJVEhfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9RVU9UQVM9YXV0b30KK3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfV0lUSF9WRlNfQUZTQUNMPSR7c2FtYmFfY3ZfV0lUSF9WRlNfQUZTQUNMPW5vfQorc2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9JHtzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD15ZXN9CitzYW1iYV9jdl9mb3VuZF94ZnNfaGVhZGVyPSR7c2FtYmFfY3ZfZm91bmRfeGZzX2hlYWRlcj15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9JHtzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz15ZXN9CitzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPSR7c2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz15ZXN9CitzYW1iYV9jdl9zaWdfYXRvbWljX3Q9JHtzYW1iYV9jdl9zaWdfYXRvbWljX3Q9eWVzfQorc2FtYmFfY3Zfc29ja2xlbl90PSR7c2FtYmFfY3Zfc29ja2xlbl90PXllc30KK3NhbWJhX2N2X3N0cnVjdF90aW1lc3BlYz0ke3NhbWJhX2N2X3N0cnVjdF90aW1lc3BlYz15ZXN9CitzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT0ke3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPWxpYi9zeXNxdW90YXNfbGludXguY30KK3NhbWJhX2N2X3VuaXhzb2NrZXQ9JHtzYW1iYV9jdl91bml4c29ja2V0PXllc30KK3NhbWJhX2N2X3ZvbGF0aWxlPSR7c2FtYmFfY3Zfdm9sYXRpbGU9eWVzfQorCisjb2xkZXIgc2FtYmUgZGVmaW5lcworc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworI2RidXMKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgbGZ0cAorYWNfY3ZfZmlsZV9fX2Rldl9wdGNfPXllcworCisjIGd1aWxlCithY19jdl9mdW5jX3B0aHJlYWRfYXR0cl9nZXRzdGFjaz0ke2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPXllc30KKworIyBnbmV0CithY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbj0ke2FjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuPW5vfQorYWNfY3ZfZ25ldF9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9nbmV0X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ub30KK2duZXRfc29ja2FkZHJfZmFtaWx5X2ZpZWxkX25hbWU9JHtnbmV0X3NvY2thZGRyX2ZhbWlseV9maWVsZF9uYW1lPXNzX2ZhbWlseX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTdjNmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9hcm0tbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTA1IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPSR7c2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz15ZXN9CitzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9JHtzYW1iYV9jdl9CUk9LRU5fUkVESEFUXzdfU1lTVEVNX0hFQURFUlM9bm99CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPSR7c2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD1ub30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz0ke3NhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9JHtzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPSR7c2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPW5vfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PW5vfQorc2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49JHtzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0lGX0RRQkxLPSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfSUZfRFFCTEs9bm99CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9NRU1fRFFCTEs9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9NRU1fRFFCTEs9bm99CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRJTUJVRj0ke3NhbWJhX2N2X0hBVkVfVVRJTUJVRj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj0ke3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD0ke3NhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9eWVzfQorc2FtYmFfY3ZfUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9RVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9JHtzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz0ke3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz1hdXRvfQorc2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9JHtzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9UUllfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1FVT1RBUz1ub30KK3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9bm99CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9XSVRIX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfUVVPVEFTPWF1dG99CitzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9YXV0b30KK3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPSR7c2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPSR7c2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9eWVzfQorc2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz0ke3NhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9eWVzfQorc2FtYmFfY3Zfc2lnX2F0b21pY190PSR7c2FtYmFfY3Zfc2lnX2F0b21pY190PXllc30KK3NhbWJhX2N2X3NvY2tsZW5fdD0ke3NhbWJhX2N2X3NvY2tsZW5fdD15ZXN9CitzYW1iYV9jdl91bml4c29ja2V0PSR7c2FtYmFfY3ZfdW5peHNvY2tldD15ZXN9CitzYW1iYV9jdl92b2xhdGlsZT0ke3NhbWJhX2N2X3ZvbGF0aWxlPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMWZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4CkBAIC0wLDAgKzEsNDMgQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPTR9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzFlODU3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvYXJtZWItbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMzggQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPTR9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2NjMTRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uCkBAIC0wLDAgKzEsMjEgQEAKKyMgbGliZWxmCittcl9jdl90YXJnZXRfZWxmPSR7bXJfY3ZfdGFyZ2V0X2VsZj15ZXN9CisKKyMgTm9ybWFsbHkga2VybmVscyBoYXZlIC9kZXYvcmFuZG9tIGVuYWJsZWQKK2FjX2N2X2ZpbGVfX2Rldl9yYW5kb209JHthY19jdl9maWxlX19kZXZfcmFuZG9tPXllc30KKworIyBBdm9pZCBzdWRvIHRvIGFzc3VtZSB2b2lkIGZvciB1bnNldGVudiBpbiBjcm9zcyBlbnZpcm9ubWVudCwgb3IgZWxzZSBpdCBjb25mbGljdHMgd2l0aAorIyB0YXJnZXQgc3RkbGliLmggcHJvdG90eXBlIHdoaWNoIGZvbGxvd3MgUE9TSVggY29tcGlsaWFuY2UuIE1hcmsgZm9yIHVwc3RyZWFtLgorc3Vkb19jdl9mdW5jX3Vuc2V0ZW52X3ZvaWQ9bm8KKworIyBzaGFkb3cgZGlyIGluZm8sIHRvIGF2b2lkIHNlYXJjaGluZyBidWlsZCBzeXN0ZW0KK3NoYWRvd19jdl9tYWlsZGlyPSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvbWFpbAorc2hhZG93X2N2X21haWxmaWxlPU1haWxib3gKK3NoYWRvd19jdl91dG1wZGlyPSR7bG9jYWxzdGF0ZWRpcn0vcnVuCitzaGFkb3dfY3ZfbG9nZGlyPSR7bG9jYWxzdGF0ZWRpcn0vbG9nCitzaGFkb3dfY3ZfcGFzc3dkX2Rpcj0ke2JpbmRpcn0KKworIyBweXRob246IGRlYWN0aXZhdGUgYSBydW50aW1lIGNoZWNrIGZvciBpcHY2LXN1cHBvcnQgaW4gcHl0aG9uID49Mi43LjEgdGhhdCBmYWlscyB3aGVuIGNyb3NzLWNvbXBpbGluZworYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8KKworYWNfY3ZfcGF0aF9TRUQ9c2VkCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tZGFyd2luIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJkODk4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWRhcndpbgpAQCAtMCwwICsxLDIgQEAKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tZ2xpYmMKQEAgLTAsMCArMSw4NiBAQAorIyBnZW5lcmFsCithY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9JHthY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfdHlwZV91aWRfdD17YWNfY3ZfdHlwZV91aWRfdD15ZXN9CithY19jdl9mdW5jX2dldGFkZHJpbmZvPSR7YWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXN9CisKKyMgYmFzaAorYmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9eWVzfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9eWVzfQorYmFzaF9jdl9nZXRjd2RfbWFsbG9jPSR7YmFzaF9jdl9nZXRjd2RfbWFsbG9jPXllc30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBjb3JldXRpbHMKK2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9JHtmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPXllc30KKworIyBnbGliCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CithY19jdl9mdW5jX3ByaW50Zl91bml4OTg9JHthY19jdl9mdW5jX3ByaW50Zl91bml4OTg9eWVzfQorYWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3NucHJpbnRmX2M5OT15ZXN9CithY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9eWVzfQorZ2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249JHtnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0xfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorIyBnbGliLTEueCByZXF1aXJlcyB0aGlzIGFuZCBwa2djb25maWctbmF0aXZlIC8gcGtnY29uZmlnLW5hdGl2ZXNkayB1c2UKKyMgdGhhdCB0byBhdm9pZCBhIGRlcGVuZGVuY3kgbG9vcC4KK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl92YV9jb3B5PSR7Z2xpYl9jdl92YV9jb3B5PXllc30KK2dsaWJfY3ZfaGF2ZV9xc29ydF9yPSR7Z2xpYl9jdl9oYXZlX3Fzb3J0X3I9eWVzfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGdudWNhc2gKK2FtX2N2X3NjYW5mX2xsZD0ke2FtX2N2X3NjYW5mX2xsZD15ZXN9CisKKyMgZ3VpbGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9eWVzfQorCisjZ2NjLXpsaWIKK2FjX2N2X2Z1bmNfZ2V0cGFnZXNpemU9JHthY19jdl9mdW5jX2dldHBhZ2VzaXplPXllc30KK2FjX2N2X2Z1bmNfbWVtY3B5PSR7YWNfY3ZfZnVuY19tZW1jcHk9eWVzfQorYWNfY3ZfZnVuY19zdHJlcnJvcj0ke2FjX2N2X2Z1bmNfc3RyZXJyb3I9eWVzfQorCisjIHNxdWlkCithY19jdl9hZl91bml4X2xhcmdlX2RncmFtPSR7YWNfY3ZfYWZfdW5peF9sYXJnZV9kZ3JhbT15ZXN9CithY19jdl9mdW5jX3NldHJlc3VpZD0ke2FjX2N2X2Z1bmNfc2V0cmVzdWlkPXllc30KK2FjX2N2X2Z1bmNfdmFfY29weT0ke2FjX2N2X2Z1bmNfdmFfY29weT15ZXN9CithY19jdl9mdW5jX19fdmFfY29weT0ke2FjX2N2X2Z1bmNfX192YV9jb3B5PXllc30KK2FjX2N2X2Vwb2xsX3dvcmtzPSR7YWNfY3ZfZXBvbGxfd29ya3M9eWVzfQorCithY19jdl9jaGVja19zamxqPXNzamxqCisKKyMgbTQKK2d0X2N2X2xvY2FsZV9mcj0ke2d0X2N2X2xvY2FsZV9mcj1mcl9GUn0KK2dsX2N2X2Z1bmNfYnRvd2NfZW9mPSR7Z2xfY3ZfZnVuY19idG93Y19lb2Y9eWVzfQorZ2xfY3ZfZnVuY193Y3J0b21iX3JldHZhbD0ke2dsX2N2X2Z1bmNfd2NydG9tYl9yZXR2YWw9eWVzfQorZ2xfY3ZfZnVuY193Y3RvYl93b3Jrcz0ke2dsX2N2X2Z1bmNfd2N0b2Jfd29ya3M9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9JHtnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT15ZXN9CitnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9JHtnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWw9JHtnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9eWVzfQorCisjIHZhX2NvcHkgYW5kIF92YV9jb3B5CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CithY19jdl9fX3ZhX2NvcHk9JHthY19jdl9fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorCisjIFhvcmcKK3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9JHt4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjViZTY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLWxpbnV4CkBAIC0wLDAgKzEsNTIgQEAKKyMgYXByCithY19jdl9maWxlX19kZXZfemVybz0ke2FjX2N2X2ZpbGVfX2Rldl96ZXJvPXllc30KK2FjX2N2X3NpemVvZl9waWRfdD0ke2FjX2N2X3NpemVvZl9waWRfdD00fQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0lGQUNFX0FJWD0ke3NhbWJhX2N2X0hBVkVfSUZBQ0VfQUlYPW5vfQorc2FtYmFfY3ZfSEFWRV9JRkFDRV9JRkNPTkY9JHtzYW1iYV9jdl9IQVZFX0lGQUNFX0lGQ09ORj15ZXN9CitzYW1iYV9jdl9IQVZFX0lGQUNFX0lGUkVRPSR7c2FtYmFfY3ZfSEFWRV9JRkFDRV9JRlJFUT15ZXN9CitzYW1iYV9jdl9IQVZFX0lSSVhfU1BFQ0lGSUNfQ0FQQUJJTElUSUVTPSR7c2FtYmFfY3ZfSEFWRV9JUklYX1NQRUNJRklDX0NBUEFCSUxJVElFUz1ub30KKworIyBkYgorZGJfY3ZfcGF0aF9hcj0ke2RiX2N2X3BhdGhfYXI9L3Vzci9iaW4vYXJ9CitkYl9jdl9wYXRoX2NobW9kPSR7ZGJfY3ZfcGF0aF9jaG1vZD0vYmluL2NobW9kfQorZGJfY3ZfcGF0aF9jcD0ke2RiX2N2X3BhdGhfY3A9L2Jpbi9jcH0KK2RiX2N2X3BhdGhfbG49JHtkYl9jdl9wYXRoX2xuPS9iaW4vbG59CitkYl9jdl9wYXRoX21rZGlyPSR7ZGJfY3ZfcGF0aF9ta2Rpcj0vYmluL21rZGlyfQorZGJfY3ZfcGF0aF9yYW5saWI9JHtkYl9jdl9wYXRoX3JhbmxpYj0vdXNyL2Jpbi9yYW5saWJ9CitkYl9jdl9wYXRoX3JtPSR7ZGJfY3ZfcGF0aF9ybT0vYmluL3JtfQorZGJfY3ZfcGF0aF9zaD0ke2RiX2N2X3BhdGhfc2g9L2Jpbi9zaH0KK2RiX2N2X3BhdGhfc3RyaXA9JHtkYl9jdl9wYXRoX3N0cmlwPS91c3IvYmluL3N0cmlwfQorCisjIGJhc2gKK2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9JHtiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PXllc30KK2Jhc2hfY3ZfbXVzdF9yZWluc3RhbGxfc2lnaGFuZGxlcnM9JHtiYXNoX2N2X211c3RfcmVpbnN0YWxsX3NpZ2hhbmRsZXJzPW5vfQorYmFzaF9jdl9mdW5jX3N0cmNvbGxfYnJva2VuPSR7YmFzaF9jdl9mdW5jX3N0cmNvbGxfYnJva2VuPW5vfQorYmFzaF9jdl9kdXAyX2Jyb2tlbj0ke2Jhc2hfY3ZfZHVwMl9icm9rZW49bm99CitiYXNoX2N2X29wZW5kaXJfbm90X3JvYnVzdD0ke2Jhc2hfY3Zfb3BlbmRpcl9ub3Rfcm9idXN0PW5vfQorYmFzaF9jdl90eXBlX3JsaW1pdD0ke2Jhc2hfY3ZfdHlwZV9ybGltaXQ9cmxpbV90fQorYmFzaF9jdl9nZXRlbnZfcmVkZWY9JHtiYXNoX2N2X2dldGVudl9yZWRlZj15ZXN9CitiYXNoX2N2X3VsaW1pdF9tYXhmZHM9JHtiYXNoX2N2X3VsaW1pdF9tYXhmZHM9eWVzfQorYmFzaF9jdl9nZXRjd2RfY2FsbHNfcG9wZW49JHtiYXNoX2N2X2dldGN3ZF9jYWxsc19wb3Blbj1ub30KK2Jhc2hfY3ZfcHJpbnRmX2FfZm9ybWF0PSR7YmFzaF9jdl9wcmludGZfYV9mb3JtYXQ9eWVzfQorYmFzaF9jdl9wZ3JwX3BpcGU9JHtiYXNoX2N2X3BncnBfcGlwZT1ub30KK2Jhc2hfY3Zfam9iX2NvbnRyb2xfbWlzc2luZz0ke2Jhc2hfY3Zfam9iX2NvbnRyb2xfbWlzc2luZz1wcmVzZW50fQorYmFzaF9jdl9zeXNfbmFtZWRfcGlwZXM9JHtiYXNoX2N2X3N5c19uYW1lZF9waXBlcz1wcmVzZW50fQorYmFzaF9jdl91bnVzYWJsZV9ydHNpZ3M9JHtiYXNoX2N2X3VudXNhYmxlX3J0c2lncz1ub30KKworIyBjb3JldXRpbHMKK2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9JHtnbF9jdl9mdW5jX2ZzdGF0YXRfemVyb19mbGFnPXllc30KKworIyBteXNxbAorYWNfY3Zfc3lzX3Jlc3RhcnRhYmxlX3N5c2NhbGxzPSR7YWNfY3Zfc3lzX3Jlc3RhcnRhYmxlX3N5c2NhbGxzPXllc30KK2FjX2N2X2NvbnZfbG9uZ2xvbmdfdG9fZmxvYXQ9JHthY19jdl9jb252X2xvbmdsb25nX3RvX2Zsb2F0PXllc30KKworIyBUQ0wKK3RjbF9jdl9hcGlfc2VyaWFsPSR7dGNsX2N2X2FwaV9zZXJpYWw9dGVybWlvc30KKworIyBweXRob24KK2FjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD15ZXMKKworIyBhcGFjaGUKK2FjX2N2X29fbm9uYmxvY2tfaW5oZXJpdGVkPSR7YWNfY3Zfb19ub25ibG9ja19pbmhlcml0ZWQ9bm99CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbWluZ3cgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tbWluZ3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzN2MzNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1taW5ndwpAQCAtMCwwICsxLDIgQEAKKyMgZXhwYXQKK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9bm8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1tdXNsIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLW11c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYzEwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2NvbW1vbi1tdXNsCkBAIC0wLDAgKzEsNTIgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PSR7YWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PW5vfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ke2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9CithY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KK2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9CitnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X2hhdmVfcXNvcnRfcj0ke2dsaWJfY3ZfaGF2ZV9xc29ydF9yPW5vfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGJhc2gKK2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PW5vfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9bm99CisKKyMgY29yZXV0aWxzCitmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT15ZXN9CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz15ZXN9CisKKyMgdmFfY29weSBhbmQgX3ZhX2NvcHkKK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KK2FjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CisKKyMgcG9zaXhfZ2V0cHd1aWRfciBwb3NpeF9nZXRncmdpZF9yIHBvc2l4X2dldHB3bmFtX3IKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBYb3JnCit4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPSR7eG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9jb21tb24tdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZjMTAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvY29tbW9uLXVjbGliYwpAQCAtMCwwICsxLDUyIEBACisjIGdlbmVyYWwKK2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD0ke2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD1ub30KK2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX21hbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX2dldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRncmVudF92b2lkPXllcworYWNfY3ZfZnVuY19nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89JHthY19jdl9mdW5jX2dldGFkZHJpbmZvPXllc30KKworIyBnbGliCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CithY19jdl9mdW5jX3ByaW50Zl91bml4OTg9JHthY19jdl9mdW5jX3ByaW50Zl91bml4OTg9eWVzfQorYWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3NucHJpbnRmX2M5OT15ZXN9CithY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9eWVzfQorZ2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249JHtnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0xfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9oYXZlX3Fzb3J0X3I9JHtnbGliX2N2X2hhdmVfcXNvcnRfcj1ub30KKworI2RidXMtZ2xpYgorYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworIyBiYXNoCitiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PSR7YmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD1ub30KK2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3N5c19zaWdsaXN0PW5vfQorCisjIGNvcmV1dGlscworZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT0ke2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9eWVzfQorZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9JHtnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9JHtnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9eWVzfQorCisjIHZhX2NvcHkgYW5kIF92YV9jb3B5CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CithY19jdl9fX3ZhX2NvcHk9JHthY19jdl9fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorCisjIHBvc2l4X2dldHB3dWlkX3IgcG9zaXhfZ2V0Z3JnaWRfciBwb3NpeF9nZXRwd25hbV9yCithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgWG9yZworeG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD0ke3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvZW5kaWFuLWJpZyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1iaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5ZTk2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1iaWcKQEAgLTAsMCArMSw4IEBACithY19jdl9jX2xpdHRsZWVuZGlhbj0ke2FjX2N2X2NfbGl0dGxlZW5kaWFuPW5vfQorYWNfY3ZfY19iaWdlbmRpYW49JHthY19jdl9jX2JpZ2VuZGlhbj15ZXN9CisKKyMgbGlibmV0CithY19jdl9saWJuZXRfZW5kaWFuZXNzPSR7YWNfY3ZfbGlibmV0X2VuZGlhbmVzcz1iaWd9CisKKyMgbGlibWVtY2FjaGVkCithY19jdl9jX2VuZGlhbj1iaWcKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL2VuZGlhbi1saXR0bGUgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9lbmRpYW4tbGl0dGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGRiNzYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9lbmRpYW4tbGl0dGxlCkBAIC0wLDAgKzEsOCBAQAorYWNfY3ZfY19saXR0bGVlbmRpYW49JHthY19jdl9jX2xpdHRsZWVuZGlhbj15ZXN9CithY19jdl9jX2JpZ2VuZGlhbj0ke2FjX2N2X2NfYmlnZW5kaWFuPW5vfQorCisjIGxpYm5ldAorYWNfY3ZfbGlibmV0X2VuZGlhbmVzcz0ke2FjX2N2X2xpYm5ldF9lbmRpYW5lc3M9bGlsfQorCisjIGxpYm1lbWNhY2hlZAorYWNfY3ZfY19lbmRpYW49bGl0dGxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL2l4ODYtY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9peDg2LWNvbW1vbgpAQCAtMCwwICsxLDIzMiBAQAorIyBnZW5lcmFsCithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXJfcD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyX3A9NH0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX3A9JHthY19jdl9zaXplb2ZfbG9uZ19wPTR9CithY19jdl9zaXplb2ZfZmxvYXQ9JHthY19jdl9zaXplb2ZfZmxvYXQ9NH0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3VpZF90PSR7YWNfY3Zfc2l6ZW9mX3VpZF90PTR9CithY19jdl9zaXplb2ZfZ2lkX3Q9JHthY19jdl9zaXplb2ZfZ2lkX3Q9NH0KK2FjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD00fQorYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCithY19jdl9wYXRoX0VTRF9DT05GSUc9bm8KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKK2ptX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm8KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllcworYmZfbHNiZj0xCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCisjIGF1ZGFjaXR5CithY19jdl9maWxlX2xpYl9zcmNfbGlibWFkX2ZyYW1lX2g9JHthY19jdl9maWxlX2xpYl9zcmNfbGlibWFkX2ZyYW1lX2g9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTQKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgZ3VpbGUKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgamlrZXMtbmF0aXZlCithY19jdl9zaXplb2Zfd2NoYXJfdD00CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBsaWJuZXQgCithY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9JHthY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj15ZXN9CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9eWVzfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgcGhwCithY19jdl9wcmVhZD0ke2FjX2N2X3ByZWFkPW5vfQorYWNfY3ZfcHdyaXRlPSR7YWNfY3ZfcHdyaXRlPW5vfQorcGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7cGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyByc3luYworcnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPW5vfQorcnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPSR7cnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPXllc30KK3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9JHtyc3luY19jdl9IQVZFX0xPTkdMT05HPXllc30KK3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD0ke3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9JHtyc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPW5vfQorcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99Cityc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9Cityc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9Cityc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz0ke2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyB4ZmZtCitqbV9jdl9mdW5jX3dvcmtpbmdfcmVhZGRpcj15ZXMKKworIyB4b3JnIFgxMVI3CithY19jdl9zeXNfbGlua2VyX2g9JHthY19jdl9zeXNfbGlua2VyX2g9bm99CithY19jdl9maWxlX191c3Jfc2hhcmVfWDExX3NnbWxfZGVmc19lbnQ9JHthY19jdl9maWxlX191c3Jfc2hhcmVfWDExX3NnbWxfZGVmc19lbnQ9bm99CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKKyNkYnVzCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjbGlicGNpYWNjZXNzCitoYXZlX210cnJfaD15ZXMKKworI21vemlsbGEKK21vel9jdl9zaXplX29mX0pTX0JZVEVTX1BFUl9XT1JEPTQKK21vel9jdl9hbGlnbl9vZl9KU19BTElHTl9PRl9QT0lOVEVSPTQKK21vel9jdl9zaXplX29mX0pTX0JZVEVTX1BFUl9ET1VCTEU9OAorCisjb2Zvbm8KK2FjX2N2X2xpYl9jX3NpZ25hbGZkPSR7YWNfY3ZfbGliX2Nfc2lnbmFsZmQ9eWVzfQorCisjdW5mczMKK25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPSR7bmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9MH0KK25mc2RfY3ZfZnVuY19zdGF0ZnM9JHtuZnNkX2N2X2Z1bmNfc3RhdGZzPXN0YXRmczJfYnNpemV9CituZnNkX2N2X2JzZF9zaWduYWxzPSR7bmZzZF9jdl9ic2Rfc2lnbmFscz15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9NAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9NApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ3MmNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1jb21tb24KQEAgLTAsMCArMSw1NiBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCisKKyMgYXBhY2hlCithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz0ke2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz1ub30KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworIyBnbGliCitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwcy1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhNTRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgKQEAgLTAsMCArMSw3OSBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHMtbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzM2M2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDgwIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NC1saW51eCBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBmYmJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4CkBAIC0wLDAgKzEsODMgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CithY19jdl9zaXplb2Zfc3NpemVfdD04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZHMtZGJ1cworYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmJhNTUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDgzIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzNjRlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjYxZWIwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgKQEAgLTAsMCArMSw4MiBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA0OTlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTA4IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKKyMgZnJvbSBzYW1iYSAzLjAuMTRhIG9uIDUvMjkvMjAwNQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorYWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPXllc30KK2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND0ke2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND15ZXN9CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9bm99CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49bm99CitzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPSR7c2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9bGliL3N5c3F1b3Rhc180QS5jfQorIyBUaGlzIGNhY2hlZCB2YWx1ZSBuZWVkcyBhIGxvY2FsIHBhdGNoIHRvIHBpY2sgaXQgdXAsIHVwc3RyZWFtIDMuMC4xNGEKKyMgZG9lc24ndCBjYWNoZSBpdC4KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzZWwtbGludXgKQEAgLTAsMCArMSw3OSBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyNsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIxY2RhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDEwMCBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCisjIGZyb20gc2FtYmEgMy4wLjE0YSBvbiA1LzI5LzIwMDUKK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD15ZXN9CitmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9JHtmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9eWVzfQorc2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9JHtzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT0ke3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9eWVzfQorc2FtYmFfY3ZfSEFWRV9ST09UPSR7c2FtYmFfY3ZfSEFWRV9ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9bm99CitzYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPW5vfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT0ke3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPWxpYi9zeXNxdW90YXNfNEEuY30KKyMgVGhpcyBjYWNoZWQgdmFsdWUgbmVlZHMgYSBsb2NhbCBwYXRjaCB0byBwaWNrIGl0IHVwLCB1cHN0cmVhbSAzLjAuMTRhCisjIGRvZXNuJ3QgY2FjaGUgaXQuCitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL25hdGl2ZSBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL25hdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZiMWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvbmF0aXZlCkBAIC0wLDAgKzEgQEAKK2FjX2N2X3BhdGhfU0VEPXNlZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmEyOTljCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24KQEAgLTAsMCArMSwxNCBAQAorIyBnbGliCithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4gYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVmNTBiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4KQEAgLTAsMCArMSw3IEBACisjIHBrZ2NvbmZpZy1uYXRpdmUgZm9yIE9TIFggYnVpZAorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjLWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY4OWNiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvcG93ZXJwYy1saW51eApAQCAtMCwwICsxLDE2IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgZ2xpYgorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxmdHAKK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MjlhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3Bvd2VycGMzMi1saW51eApAQCAtMCwwICsxLDI3NSBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfYm9vbD0ke2FjX2N2X3NpemVvZl9ib29sPTF9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9pbnRfcD0ke2FjX2N2X3NpemVvZl9pbnRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2Zfd2NoYXJfdD0ke2FjX2N2X3NpemVvZl93Y2hhcl90PTR9CithY19jdl90eXBlX19faW50NjQ9JHthY19jdl90eXBlX19faW50NjQ9bm99CithY19jdl90eXBlX3NpemVfdD0ke2FjX2N2X3R5cGVfc2l6ZV90PXllc30KK2FjX2N2X3R5cGVfdm9pZF9wPSR7YWNfY3ZfdHlwZV92b2lkX3A9eWVzfQorYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9Citjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7Y29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfdHlwZV9zdHJ1Y3RfdGltZXNwZWM9JHthY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIGNvcmV1dGlscwordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTl9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBuYW5vCithY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPSR7YWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorCisKKyMgbGlibmV0CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorCisjIHNvY2F0CithY19jdl9pc3BlZWRfb2Zmc2V0PSR7YWNfY3ZfaXNwZWVkX29mZnNldD0xM30KK3NjX2N2X3Rlcm1pb3NfaXNwZWVkPSR7c2NfY3ZfdGVybWlvc19pc3BlZWQ9eWVzfQorCisjIGxpbmtzCithY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9JHthY19jdl9saWJfcG5nX3BuZ19jcmVhdGVfaW5mb19zdHJ1Y3Q9eWVzfQorCisjIGRiCitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBsaWJlc210cAorYWN4X3dvcmtpbmdfc25wcmludGY9JHthY3hfd29ya2luZ19zbnByaW50Zj15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZ2xpYiAyLjAKK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9JHtnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT15ZXN9CisKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KKworIyBodHRwcGMKK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KK2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9bm99Citjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2Jyb2tlbl9kaXJuYW1lPSR7YWNfY3ZfaGF2ZV9icm9rZW5fZGlybmFtZT0neWVzJ30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSdubyd9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSdubyd9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9J3llcyd9CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9J25vJ30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSd5ZXMnfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9JzQnfQorCisjbW9kcGhwIAorYWNfY3ZfY19iaWdlbmRpYW5fcGhwPSR7YWNfY3ZfY19iaWdlbmRpYW5fcGhwPXllc30KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHthY19jdl9zaXplb2ZfcHRyZGlmZl90PTR9CisKKyMgYXBhY2hlMiAobm90ZSBvdGhlciBhcGFjaGUgc3RhbnphIGluIHRoaXMgZmlsZSkKK2FwX3ZvaWRfcHRyX2x0X2xvbmc9JHthcF92b2lkX3B0cl9sdF9sb25nPW5vfQorYXByX2N2X3VzZV9sZnM2ND0ke2Fwcl9jdl91c2VfbGZzNjQ9eWVzfQorYXByX2N2X2Vwb2xsPSR7YXByX2N2X2Vwb2xsPXllc30KK2Fwcl9jdl9wdGhyZWFkc19jZmxhZ3M9JHthcHJfY3ZfcHRocmVhZHNfY2ZsYWdzPS1wdGhyZWFkfQorYXByX2N2X3B0aHJlYWRzX2xpYj0ke2Fwcl9jdl9wdGhyZWFkc19saWI9LWxwdGhyZWFkfQorYWNfY3ZfZnVuY19tbWFwPSR7YWNfY3ZfZnVuY19tbWFwPXllc30KK2FjX2N2X2ZpbGVfX2Rldl96ZXJvPSR7YWNfY3ZfZmlsZV9fZGV2X3plcm89eWVzfQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTR9CithY19jdl9zaXplb2ZfcGlkX3Q9JHthY19jdl9zaXplb2ZfcGlkX3Q9NH0KK2FjX2N2X3NvY2tsZW5fdD0ke2FjX2N2X3NvY2tsZW5fdD15ZXN9CithY19jdl9zdHJ1Y3RfcmxpbWl0PSR7YWNfY3Zfc3RydWN0X3JsaW1pdD15ZXN9CithY19jdl9uZWdhdGl2ZV9lYWk9JHthY19jdl9uZWdhdGl2ZV9lYWk9eWVzfQorYXByX2N2X2dhaV9hZGRyY29uZmlnPSR7YXByX2N2X2dhaV9hZGRyY29uZmlnPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGJpbnV0aWxzIChsaWJpYmVydHkpCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3ZfdHlwZV9pbnQ9JHthY19jdl90eXBlX2ludD15ZXN9CithY19jdl90eXBlX3VpbnRwdHJfdD0ke2FjX2N2X3R5cGVfdWludHB0cl90PXllc30KK2xpYmVydHlfY3ZfdWludDY0PSR7bGliZXJ0eV9jdl91aW50NjQ9dWludDY0X3R9CisKKyNzYW1iYQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUl9OQU1FPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPSR7c2FtYmFfY3ZfUkVQTEFDRV9SRUFERElSPW5vfQorc2FtYmFfY3ZfU0laRU9GX0RFVl9UPSR7c2FtYmFfY3ZfU0laRU9GX0RFVl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj1ub30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD1ub30KKworCisjIGxpYmMKK2xpYmNfY3ZfcHBjX21hY2hpbmU9JHtsaWJjX2N2X3BwY19tYWNoaW5lPXllc30KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT15ZXN9CitsaWJjX2N2X21hYmlfaWJtbG9uZ2RvdWJsZT0ke2xpYmNfY3ZfbWFiaV9pYm1sb25nZG91YmxlPXllc30KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOD15ZXN9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZTIzMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3Bvd2VycGM2NC1saW51eApAQCAtMCwwICsxLDM5IEBACithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD04fQorYWNfY3Zfc2l6ZW9mX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgYXByCithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbiBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3NoLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU0MTZhMmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS9zaC1jb21tb24KQEAgLTAsMCArMSwyMzggQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorCisjIGx6bworYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9NH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorCithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBjb3JldXRpbHMKK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE5fQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgbmFubworYWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj0ke2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CisKKyMgc29jYXQKK2FjX2N2X2lzcGVlZF9vZmZzZXQ9JHthY19jdl9pc3BlZWRfb2Zmc2V0PTEzfQorc2NfY3ZfdGVybWlvc19pc3BlZWQ9JHtzY19jdl90ZXJtaW9zX2lzcGVlZD15ZXN9CisKKyMgbGlua3MKK2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD0ke2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9JHtzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KKworIyBkYgorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZXR0ZXJjYXAKK2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PSR7ZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzfQorCisjIGxpYmVzbXRwCithY3hfd29ya2luZ19zbnByaW50Zj0ke2FjeF93b3JraW5nX3NucHJpbnRmPXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBnbGliIDIuMAorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT0ke2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPXllc30KKworZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9NAorCisjIGh0dHBwYworYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CisKKyMgamlrZXMKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBsZnRwCithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgZWRiCitkYl9jdl9zcGlubG9ja3M9JHtkYl9jdl9zcGlubG9ja3M9bm99CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9Citjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPW5vfQorY29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPW5vfQorbXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGZubWF0Y2gKK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgcnN5bmMKK3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT1ub30KK3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj0ke3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj15ZXN9Cityc3luY19jdl9IQVZFX0xPTkdMT05HPSR7cnN5bmNfY3ZfSEFWRV9MT05HTE9ORz15ZXN9Cityc3luY19jdl9IQVZFX09GRjY0X1Q9JHtyc3luY19jdl9IQVZFX09GRjY0X1Q9bm99Cityc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPSR7cnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD1ub30KK3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtyc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorcnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtyc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Cityc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtyc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorcnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtyc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049bm99CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgY2xhbWF2CitjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9JHtjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PXllc30KK2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD0ke2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD15ZXN9CithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPSR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXN9CisKKyMgbGlibmV0IAorYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPSR7YWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPW5vfQorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUvc3BhcmMtbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS9zcGFyYy1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQwZDlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9tZXRhL3NpdGUvc3BhcmMtbGludXgKQEAgLTAsMCArMSw0OCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KKworYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CitsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09JHtsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09eWVzfQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4PSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4PXllc30KK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorCisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9Citjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7Y29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgbWluaWNvbQorYW1fY3Zfc3lzX3Bvc2l4X3Rlcm1pb3M9JHthbV9jdl9zeXNfcG9zaXhfdGVybWlvcz15ZXN9CisKKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworI2dsaWIKK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9IAorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorCisjbGludXgKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L21ldGEvc2l0ZS94MzItbGludXggYi95b2N0by1wb2t5L21ldGEvc2l0ZS94MzItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlZTY4YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3gzMi1saW51eApAQCAtMCwwICsxLDEwIEBACisjIGdlbmVyYWwKK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD04fQorYWNfY3Zfc2l6ZW9mX2lub190PSR7YWNfY3Zfc2l6ZW9mX2lub190PTh9CithY19jdl9zaXplb2ZfZGV2X3Q9JHthY19jdl9zaXplb2ZfZGV2X3Q9OH0KK2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPSR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjR9CithY19jdl9hbGlnbm9mX2RvdWJsZT04CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTMyfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4IGIveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3M2E5MDcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L21ldGEvc2l0ZS94ODZfNjQtbGludXgKQEAgLTAsMCArMSwxMzYgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT1ub30KK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9OH0KK2FjX2N2X3NpemVvZl91aWRfdD0ke2FjX2N2X3NpemVvZl91aWRfdD00fQorYWNfY3Zfc2l6ZW9mX2dpZF90PSR7YWNfY3Zfc2l6ZW9mX2dpZF90PTR9CithY19jdl9zaXplb2ZfaW5vX3Q9JHthY19jdl9zaXplb2ZfaW5vX3Q9OH0KK2FjX2N2X3NpemVvZl9kZXZfdD0ke2FjX2N2X3NpemVvZl9kZXZfdD04fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTQwfQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTh9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTh9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9bm99CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyNnY2MKK2FjX2N2X2xpYl9tX3Npbj0ke2FjX2N2X2xpYl9tX3Npbj15ZXN9CisKKyNvcmJpdAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGwKKworIyBiYXNoCitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKK2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9JHthc19jdl91bmFsaWduZWRfYWNjZXNzPXllc30KKworI3VuZnMzCituZnNkX2N2X2Jyb2tlbl9zZXRmc3VpZD0ke25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPTB9CituZnNkX2N2X2Z1bmNfc3RhdGZzPSR7bmZzZF9jdl9mdW5jX3N0YXRmcz1zdGF0ZnMyX2JzaXplfQorbmZzZF9jdl9ic2Rfc2lnbmFscz0ke25mc2RfY3ZfYnNkX3NpZ25hbHM9eWVzfQorCisjYXByCithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgZ3J1YgorYWNfY3ZfZnVuY19fX2FzaGxkaTM9bm8KK2FjX2N2X2Z1bmNfX19hc2hyZGkzPW5vCithY19jdl9mdW5jX19fYnN3YXBkaTI9bm8KK2FjX2N2X2Z1bmNfX19ic3dhcHNpMj1ubworYWNfY3ZfZnVuY19fX2xzaHJkaTM9bm8KK2FjX2N2X2Z1bmNfX190cmFtcG9saW5lX3NldHVwPW5vCithY19jdl9mdW5jX19fdWNtcGRpMj1ubworYWNfY3ZfZnVuY19fcmVzdGdwcl8xNF94PW5vCisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4LXVjbGliYyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyNjlmNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvbWV0YS9zaXRlL3g4Nl82NC1saW51eC11Y2xpYmMKQEAgLTAsMCArMSw5MSBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PW5vfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9OH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTh9CithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTQwfQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTh9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTh9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGdsaWItMi4wCitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9bm99CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52IGIveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZmVlNWY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9vZS1pbml0LWJ1aWxkLWVudgpAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKworIyBPRSBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyMKKyMgTm9ybWFsbHkgdGhpcyBpcyBjYWxsZWQgYXMgJy4gLi9vZS1pbml0LWJ1aWxkLWVudiBidWlsZGRpcicKKyMKKyMgVGhpcyB3b3JrcyBpbiBtb3N0IHNoZWxscyAobm90IGRhc2gpLCBidXQgbm90IGFsbCBvZiB0aGVtIHBhc3MgYXJnMSB3aGVuCisjIGJlaW5nIHNvdXJjZWQuICAgVG8gd29ya2Fyb3VuZCB0aGUgc2hlbGwgbGltaXRhdGlvbiB1c2UgInNldCBhcmcxIiBwcmlvciAKKyMgdG8gc291cmNpbmcgdGhpcyBzY3JpcHQuCisjCitpZiBbIC1uICIkQkFTSF9TT1VSQ0UiIF07IHRoZW4KKyAgIE9FUk9PVD0iYGRpcm5hbWUgJEJBU0hfU09VUkNFYCIKK2VsaWYgWyAtbiAiJFpTSF9OQU1FIiBdOyB0aGVuCisgICBPRVJPT1Q9ImBkaXJuYW1lICQwYCIKK2Vsc2UKKyAgIE9FUk9PVD0iYHB3ZGAiCitmaQoraWYgWyAtbiAiJEJCU0VSVkVSIiBdOyB0aGVuCisgICB1bnNldCBCQlNFUlZFUgorZmkKK1RISVNfU0NSSVBUPSRPRVJPT1Qvb2UtaW5pdC1idWlsZC1lbnYKKworaWYgWyAteiAiJFpTSF9OQU1FIiBdICYmIFsgIiQwIiA9ICIkVEhJU19TQ1JJUFQiIF07IHRoZW4KKyAgIGVjaG8gIkVycm9yOiBUaGlzIHNjcmlwdCBuZWVkcyB0byBiZSBzb3VyY2VkLiBQbGVhc2UgcnVuIGFzICcuICRUSElTX1NDUklQVCciCisgICBleGl0IDEKK2ZpCisKK09FUk9PVD1gcmVhZGxpbmsgLWYgIiRPRVJPT1QiYAorZXhwb3J0IE9FUk9PVAorLiAkT0VST09UL3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwgJiYgXAorICAgICAkT0VST09UL3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIgJiYgXAorICAgICBbIC1uICIkQlVJTERESVIiIF0gJiYgY2QgIiRCVUlMRERJUiIKK3Vuc2V0IE9FUk9PVAordW5zZXQgQkJQQVRICit1bnNldCBUSElTX1NDUklQVAorCisjIFNodXRkb3duIGFueSBiaXRiYWtlIHNlcnZlciBpZiB0aGUgQkJTRVJWRVIgdmFyaWFibGUgaXMgbm90IHNldAoraWYgWyAteiAiJEJCU0VSVkVSIiBdICYmIFsgLWYgYml0YmFrZS5sb2NrIF0gOyB0aGVuCisgICAgZ3JlcCAiOiIgYml0YmFrZS5sb2NrID4gL2Rldi9udWxsICYmIEJCU0VSVkVSPWBjYXQgYml0YmFrZS5sb2NrYCBiaXRiYWtlIC0tc3RhdHVzLW9ubHkKKyAgICBpZiBbICQ/ID0gMCBdIDsgdGhlbgorCWVjaG8gIlNodXR0aW5nIGRvd24gYml0YmFrZSBtZW1vcnkgcmVzaWRlbnQgc2VydmVyIHdpdGggYml0YmFrZSAtbSIKKwlCQlNFUlZFUj1gY2F0IGJpdGJha2UubG9ja2AgYml0YmFrZSAtbQorICAgIGZpCitmaQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52LW1lbXJlcyBiL3lvY3RvLXBva3kvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxZGM0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L29lLWluaXQtYnVpbGQtZW52LW1lbXJlcwpAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKworIyBPRSBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyMKKyMgTm9ybWFsbHkgdGhpcyBpcyBjYWxsZWQgYXMgJy4gLi9vZS1pbml0LWJ1aWxkLWVudiBidWlsZGRpciA8cG9ydG51bWJlcj4gPGJ1aWxkZGlyPicKKyMKKyMgVGhpcyB3b3JrcyBpbiBtb3N0IHNoZWxscyAobm90IGRhc2gpLCBidXQgbm90IGFsbCBvZiB0aGVtIHBhc3MgYXJnMSB3aGVuCisjIGJlaW5nIHNvdXJjZWQuICAgVG8gd29ya2Fyb3VuZCB0aGUgc2hlbGwgbGltaXRhdGlvbiB1c2UgInNldCBhcmcxIiBwcmlvciAKKyMgdG8gc291cmNpbmcgdGhpcyBzY3JpcHQuCisjCitpZiBbIC16ICIkMSIgXTsgdGhlbgorICAgIGVjaG8gIk5vIHBvcnQgc3BlY2lmaWVkLCB1c2luZyBkeW5hbWljYWxseSBzZWxlY3RlZCBwb3J0IgorICAgIHBvcnQ9LTEKK2Vsc2UKKyAgICBwb3J0PSQxCisgICAgc2hpZnQKK2ZpCisKK2lmIFsgLW4gIiRCQVNIX1NPVVJDRSIgXTsgdGhlbgorICBPRVJPT1Q9ImBkaXJuYW1lICRCQVNIX1NPVVJDRWAiCitlbGlmIFsgLW4gIiRaU0hfTkFNRSIgXTsgdGhlbgorICBPRVJPT1Q9ImBkaXJuYW1lICQwYCIKK2Vsc2UKKyAgT0VST09UPSJgcHdkYCIKK2ZpCitpZiBbIC1uICIkQkJTRVJWRVIiIF07IHRoZW4KKyAgdW5zZXQgQkJTRVJWRVIKK2ZpCisKK1RISVNfU0NSSVBUPSRPRVJPT1Qvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzCitpZiBbIC16ICIkWlNIX05BTUUiIF0gJiYgWyAieCQwIiA9ICJ4JFRISVNfU0NSSVBUIiBdOyB0aGVuCisgICBlY2hvICJFcnJvcjogVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgc291cmNlZC4gUGxlYXNlIHJ1biBhcyAnLiAkVEhJU19TQ1JJUFQnIgorICAgZXhpdCAxCitmaQorCitPRVJPT1Q9YHJlYWRsaW5rIC1mICIkT0VST09UImAKK2V4cG9ydCBPRVJPT1QKKy4gJE9FUk9PVC9zY3JpcHRzL29lLWJ1aWxkZW52LWludGVybmFsICYmIFwKKyAgICAkT0VST09UL3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIgJiYgXAorICAgIFsgLW4gIiRCVUlMRERJUiIgXSAmJiBjZCAkQlVJTERESVIKK3Vuc2V0IE9FUk9PVAordW5zZXQgQkJQQVRICit1bnNldCBUSElTX1NDUklQVAorCityZXM9MQoraWYgWyAtZSBiaXRiYWtlLmxvY2sgXSAmJiBncmVwIDogYml0YmFrZS5sb2NrID4gL2Rldi9udWxsIDsgdGhlbgorICAgIEJCU0VSVkVSPWBjYXQgYml0YmFrZS5sb2NrYCBiaXRiYWtlIC0tc3RhdHVzLW9ubHkKKyAgICByZXM9JD8KK2ZpCisKK2lmIFsgJHJlcyAhPSAwIF0gOyB0aGVuCisgICAgYml0YmFrZSAtLXNlcnZlci1vbmx5IC10IHhtbHJwYyAtQiBsb2NhbGhvc3Q6JHBvcnQKK2ZpCisKK2lmIFsgJHBvcnQgPSAtMSBdIDsgdGhlbgorICAgIGV4cG9ydCBCQlNFUlZFUj1sb2NhbGhvc3Q6LTEKKyAgICBlY2hvICJCaXRiYWtlIHNlcnZlciBzdGFydGVkIG9uIGRlbWFuZCBhcyBuZWVkZWQsIHVzZSBiaXRiYWtlIC1tIHRvIHNodXQgaXQgZG93biIKK2Vsc2UKKyAgICBleHBvcnQgQkJTRVJWRVI9YGNhdCBiaXRiYWtlLmxvY2tgCisKKyAgICBpZiBbICRyZXMgPSAwIF0gOyB0aGVuCisJZWNobyAiVXNpbmcgZXhpc3RpbmcgYml0YmFrZSBzZXJ2ZXIgYXQ6ICRCQlNFUlZFUiwgdXNlIGJpdGJha2UgLW0gdG8gc2h1dCBpdCBkb3duIgorICAgIGVsc2UKKwllY2hvICJCaXRiYWtlIHNlcnZlciBzdGFydGVkIGF0OiAkQkJTRVJWRVIsIHVzZSBiaXRiYWtlIC1tIHRvIHNodXQgaXQgZG93biIKKyAgICBmaQorICAgIHVuc2V0IHJlcworZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9SRUFETUUgYi95b2N0by1wb2t5L3NjcmlwdHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOGQxMjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvUkVBRE1FCkBAIC0wLDAgKzEgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIFZhcmlvdXMgdXNlZnVsIHNjcmlwdHMgZm9yIHdvcmtpbmcgd2l0aCBPRSBidWlsZHMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXByc2Vydi10b29sIGIveW9jdG8tcG9reS9zY3JpcHRzL2JpdGJha2UtcHJzZXJ2LXRvb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjhjMjQxNgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXByc2Vydi10b29sCkBAIC0wLDAgKzEsMTAzIEBACisjIS91c3IvYmluL2VudiBiYXNoCisKK2hlbHAgKCkKK3sKKyAgICBiYXNlPWBiYXNlbmFtZSAkMGAKKyAgICBlY2hvIC1lICJVc2FnZTogJGJhc2UgY29tbWFuZCIKKyAgICBlY2hvICJBdmFsaWFibGUgY29tbWFuZHM6IgorICAgIGVjaG8gLWUgIlx0ZXhwb3J0IDxmaWxlLmNvbmY+OiBleHBvcnQgYW5kIGxvY2sgZG93biB0aGUgQVVUT1BSIHZhbHVlcyBmcm9tIHRoZSBQUiBzZXJ2aWNlIGludG8gYSBmaWxlIGZvciByZWxlYXNlLiIKKyAgICBlY2hvIC1lICJcdGltcG9ydCA8ZmlsZS5jb25mPjogaW1wb3J0IHRoZSBBVVRPUFIgdmFsdWVzIGZyb20gdGhlIGV4cG9ydGVkIGZpbGUgaW50byB0aGUgUFIgc2VydmljZS4iCit9CisKK2NsZWFuX2NhY2hlKCkKK3sKKyAgICBzPWBiaXRiYWtlIC1lIHwgZ3JlcCBeQ0FDSEU9IHwgY3V0IC1mMiAtZFwiYAorICAgIGlmIFsgIngke3N9IiAhPSAieCIgXTsgdGhlbgorICAgICAgICBybSAtcmYgJHtzfQorICAgIGZpCit9CisKK2RvX2V4cG9ydCAoKQoreworICAgIGZpbGU9JDEKKyAgICBbICJ4JHtmaWxlfSIgPT0gIngiIF0gJiYgaGVscCAmJiBleGl0IDEKKyAgICBybSAtZiAke2ZpbGV9CisKKyAgICBjbGVhbl9jYWNoZQorICAgIGJpdGJha2UgLVIgY29uZi9wcmV4cG9ydC5jb25mIC1wCisgICAgcz1gYml0YmFrZSAtUiBjb25mL3ByZXhwb3J0LmNvbmYgLWUgfCBncmVwIF5QUlNFUlZfRFVNUEZJTEU9IHwgY3V0IC1mMiAtZFwiYAorICAgIGlmIFsgIngke3N9IiAhPSAieCIgXTsKKyAgICB0aGVuCisgICAgICAgWyAtZSAkcyBdICYmIG12IC1mICRzICRmaWxlICYmIGVjaG8gIkV4cG9ydGluZyB0byBmaWxlICRmaWxlIHN1Y2NlZWRlZCEiCisgICAgICAgcmV0dXJuIDAKKyAgICBmaQorICAgIGVjaG8gIkV4cG9ydGluZyB0byBmaWxlICRmaWxlIGZhaWxlZCEiCisgICAgcmV0dXJuIDEKK30KKworZG9faW1wb3J0ICgpCit7CisgICAgZmlsZT0kMQorICAgIFsgIngke2ZpbGV9IiA9PSAieCIgXSAmJiBoZWxwICYmIGV4aXQgMQorCisgICAgY2xlYW5fY2FjaGUKKyAgICBiaXRiYWtlIC1SIGNvbmYvcHJpbXBvcnQuY29uZiAtUiAkZmlsZSAtcAorICAgIHJldD0kPworICAgIFsgJHJldCAtZXEgMCBdICYmIGVjaG8gIkltcG9ydGluZyBmcm9tIGZpbGUgJGZpbGUgc3VjY2VlZGVkISIgfHwgZWNobyAiSW1wb3J0aW5nIGZyb20gZmlsZSAkZmlsZSBmYWlsZWQhIgorICAgIHJldHVybiAkcmV0Cit9CisKK2RvX21pZ3JhdGVfbG9jYWxjb3VudCAoKQoreworICAgIGRmPWBiaXRiYWtlIC1SIGNvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgLWUgfCBcCisgICAgICAgICAgICAgICAgZ3JlcCBeTE9DQUxDT1VOVF9EVU1QRklMRT0gfCBjdXQgLWYyIC1kXCJgCisgICAgaWYgWyAieCR7ZGZ9IiA9PSAieCIgXTsKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIkxPQ0FMQ09VTlRfRFVNUEZJTEUgaXMgbm90IGRlZmluZWQhIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisKKyAgICBybSAtcmYgJGRmCisgICAgY2xlYW5fY2FjaGUKKyAgICBlY2hvICJFeHBvcnRpbmcgTE9DQUxDT1VOVCB0byBBVVRPSU5Dcy4uLiIKKyAgICBiaXRiYWtlIC1SIGNvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgLXAKKyAgICBbICEgJD8gLWVxIDAgXSAmJiBlY2hvICJFeHBvcnRpbmcgdG8gZmlsZSAkZGYgZmFpbGVkISIgJiYgZXhpdCAxCisKKyAgICBpZiBbIC1lICRkZiBdOworICAgIHRoZW4KKyAgICAgICAgZWNobyAiRXhwb3J0aW5nIHRvIGZpbGUgJGRmIHN1Y2NlZWRlZCEiCisgICAgZWxzZQorICAgICAgICBlY2hvICJFeHBvcnRpbmcgdG8gZmlsZSAkZGYgZmFpbGVkISIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICAKKyAgICBlY2hvICJJbXBvcnRpbmcgZ2VuZXJhdGVkIEFVVE9JTkMgZW50cmllcy4uLiIKKyAgICBbIC1lICRkZiBdICYmIGRvX2ltcG9ydCAkZGYKKworICAgIGlmIFsgISAkPyAtZXEgMCBdCisgICAgdGhlbgorICAgICAgICBlY2hvICJNaWdyYXRpb24gZnJvbSBMT0NBTENPVU5UIHRvIEFVVE9JTkNzIGZhaWxlZCEiCisgICAgICAgIHJldHVybiAxCisgICAgZmkKKworICAgIGVjaG8gIk1pZ3JhdGlvbiBmcm9tIExPQ0FMQ09VTlQgdG8gQVVUT0lOQ3Mgc3VjY2VlZGVkISIKKyAgICByZXR1cm4gMAorfQorCitbICQjIC1lcSAwIF0gJiYgaGVscCAgJiYgZXhpdCAxCisKK2Nhc2UgJDEgaW4KK2V4cG9ydCkKKyAgICBkb19leHBvcnQgJDIKKyAgICA7OworaW1wb3J0KQorICAgIGRvX2ltcG9ydCAkMgorICAgIDs7CittaWdyYXRlX2xvY2FsY291bnQpCisgICAgZG9fbWlncmF0ZV9sb2NhbGNvdW50CisgICAgOzsKKyopCisgICAgaGVscAorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9iaXRiYWtlLXdoYXRjaGFuZ2VkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1Y2ZlNGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZApAQCAtMCwwICsxLDMzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorCisjIENvcHlyaWdodCAoYykgMjAxMyBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkpKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKK2ltcG9ydCBzY3JpcHRwYXRoCisKKyMgRmlndXJlIG91dCB3aGVyZSBpcyB0aGUgYml0YmFrZS9saWIvYmIgc2luY2Ugd2UgbmVlZCBiYi5zaWdnZW4gYW5kIGJiLnByb2Nlc3MKK2JpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCitpZiBub3QgYml0YmFrZXBhdGg6CisgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQorICAgIHN5cy5leGl0KDEpCisKK2ltcG9ydCBiYi5zaWdnZW4KK2ltcG9ydCBiYi5wcm9jZXNzCisKKyMgTWF0Y2ggdGhlIHN0YW1wJ3MgZmlsZW5hbWUKKyMgZ3JvdXAoMSk6IFBFX1BWIChtYXkgbm8gUEUpCisjIGdyb3VwKDIpOiBQUgorIyBncm91cCgzKTogVEFTSworIyBncm91cCg0KTogSEFTSAorc3RhbXBfcmUgPSByZS5jb21waWxlKCIoP1A8cHY+LiopLSg/UDxwcj5yXGQrKVwuKD9QPHRhc2s+ZG9fXHcrKVwuKD9QPGhhc2g+W15cLl0qKSIpCitzaWdkYXRhX3JlID0gcmUuY29tcGlsZSgiLipcLnNpZ2RhdGFcLi4qIikKKworZGVmIGdlbl9kaWN0KHN0YW1wcyk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgdGhlIGRpY3QgZnJvbSB0aGUgc3RhbXBzIGRpci4KKyAgICBUaGUgb3V0cHV0IGRpY3QgZm9ybWF0IGlzOgorICAgIHtmYWtlX2Y6IHtwbjogUE4sIHB2OiBQViwgcHI6IFBSLCB0YXNrOiBUQVNLLCBwYXRoOiBQQVRIfX0KKyAgICBXaGVyZToKKyAgICBmYWtlX2Y6IHB2ICsgdGFzayArIGhhc2gKKyAgICBwYXRoOiB0aGUgcGF0aCB0byB0aGUgc3RhbXAgZmlsZQorICAgICIiIgorICAgICMgVGhlIG1lbWJlciBvZiB0aGUgc3ViIGRpY3QgKEEgInBhdGgiIHdpbGwgYmUgYXBwZW5kZWQgYmVsb3cpCisgICAgc3ViX21lbSA9ICgicHYiLCAicHIiLCAidGFzayIpCisgICAgZCA9IHt9CisgICAgZm9yIGRpcnBhdGgsIF8sIGZpbGVzIGluIG9zLndhbGsoc3RhbXBzKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAjIFRoZSAiYml0YmFrZSAtUyIgd291bGQgZ2VuZXJhdGUgIi5zaWdkYXRhIiwgYnV0IG5vICJfc2V0c2NlbmUiLgorICAgICAgICAgICAgZmFrZV9mID0gcmUuc3ViKCdfc2V0c2NlbmUuJywgJy4nLCBmKQorICAgICAgICAgICAgZmFrZV9mID0gcmUuc3ViKCcuc2lnZGF0YScsICcnLCBmYWtlX2YpCisgICAgICAgICAgICBzdWJkaWN0ID0ge30KKyAgICAgICAgICAgIHRtcCA9IHN0YW1wX3JlLm1hdGNoKGZha2VfZikKKyAgICAgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBzdWJfbWVtOgorICAgICAgICAgICAgICAgICAgICBzdWJkaWN0W2ldID0gdG1wLmdyb3VwKGkpCisgICAgICAgICAgICAgICAgaWYgbGVuKHN1YmRpY3QpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHBuID0gb3MucGF0aC5iYXNlbmFtZShkaXJwYXRoKQorICAgICAgICAgICAgICAgICAgICBzdWJkaWN0WydwbiddID0gcG4KKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgcGF0aCB3aWxsIGJlIHVzZWQgYnkgb3Muc3RhdCgpIGFuZCBiYi5zaWdnZW4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGljdFsncGF0aCddID0gZGlycGF0aCArICIvIiArIGYKKyAgICAgICAgICAgICAgICAgICAgZmFrZV9mID0gdG1wLmdyb3VwKCdwdicpICsgdG1wLmdyb3VwKCd0YXNrJykgKyB0bXAuZ3JvdXAoJ2hhc2gnKQorICAgICAgICAgICAgICAgICAgICBkW2Zha2VfZl0gPSBzdWJkaWN0CisgICAgcmV0dXJuIGQKKworIyBSZS1jb25zdHJ1Y3QgdGhlIGRpY3QKK2RlZiByZWNvbl9kaWN0KGRpY3RfaW4pOgorICAgICIiIgorICAgIFRoZSBvdXRwdXQgZGljdCBmb3JtYXQgaXM6CisgICAge3BuX3Rhc2s6IHtwdjogUFYsIHByOiBQUiwgcGF0aDogUEFUSH19CisgICAgIiIiCisgICAgZGljdF9vdXQgPSB7fQorICAgIGZvciBrIGluIGRpY3RfaW4ua2V5cygpOgorICAgICAgICBzdWJkaWN0ID0ge30KKyAgICAgICAgIyBUaGUga2V5CisgICAgICAgIHBuX3Rhc2sgPSAiJXNfJXMiICUgKGRpY3RfaW4uZ2V0KGspLmdldCgncG4nKSwgZGljdF9pbi5nZXQoaykuZ2V0KCd0YXNrJykpCisgICAgICAgICMgSWYgbW9yZSB0aGFuIG9uZSBzdGFtcHMgYXJlIGZvdW5kLCB1c2UgdGhlIGxhdGVzdCBvbmUuCisgICAgICAgIGlmIHBuX3Rhc2sgaW4gZGljdF9vdXQ6CisgICAgICAgICAgICBmdWxsX3BhdGhfcHJlID0gZGljdF9vdXQuZ2V0KHBuX3Rhc2spLmdldCgncGF0aCcpCisgICAgICAgICAgICBmdWxsX3BhdGhfY3VyID0gZGljdF9pbi5nZXQoaykuZ2V0KCdwYXRoJykKKyAgICAgICAgICAgIGlmIG9zLnN0YXQoZnVsbF9wYXRoX3ByZSkuc3RfbXRpbWUgPiBvcy5zdGF0KGZ1bGxfcGF0aF9jdXIpLnN0X210aW1lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHN1YmRpY3RbJ3B2J10gPSBkaWN0X2luLmdldChrKS5nZXQoJ3B2JykKKyAgICAgICAgc3ViZGljdFsncHInXSA9IGRpY3RfaW4uZ2V0KGspLmdldCgncHInKQorICAgICAgICBzdWJkaWN0WydwYXRoJ10gPSBkaWN0X2luLmdldChrKS5nZXQoJ3BhdGgnKQorICAgICAgICBkaWN0X291dFtwbl90YXNrXSA9IHN1YmRpY3QKKworICAgIHJldHVybiBkaWN0X291dAorCitkZWYgc3BsaXRfcG50YXNrKHMpOgorICAgICIiIgorICAgIFNwbGl0IHRoZSBwbl90YXNrIGluIHRvIChwbiwgdGFzaykgYW5kIHJldHVybiBpdAorICAgICIiIgorICAgIHRtcCA9IHJlLm1hdGNoKCIoLiopXyhkb18uKikiLCBzKQorICAgIHJldHVybiAodG1wLmdyb3VwKDEpLCB0bXAuZ3JvdXAoMikpCisKKworZGVmIHByaW50X2FkZGVkKGRfbmV3ID0gTm9uZSwgZF9vbGQgPSBOb25lKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgbmV3bHkgYWRkZWQgdGFza3MKKyAgICAiIiIKKyAgICBhZGRlZCA9IHt9CisgICAgZm9yIGsgaW4gZF9uZXcua2V5cygpOgorICAgICAgICBpZiBrIG5vdCBpbiBkX29sZDoKKyAgICAgICAgICAgICMgQWRkIHRoZSBuZXcgb25lIHRvIGFkZGVkIGRpY3QsIGFuZCByZW1vdmUgaXQgZnJvbQorICAgICAgICAgICAgIyBkX25ldywgc28gdGhlIHJlbWFpbmluZyBvbmVzIGFyZSB0aGUgY2hhbmdlZCBvbmVzCisgICAgICAgICAgICBhZGRlZFtrXSA9IGRfbmV3LmdldChrKQorICAgICAgICAgICAgZGVsKGRfbmV3W2tdKQorCisgICAgaWYgbm90IGFkZGVkOgorICAgICAgICByZXR1cm4gMAorCisgICAgIyBGb3JtYXQgdGhlIG91dHB1dCwgdGhlIGRpY3QgZm9ybWF0IGlzOgorICAgICMge3BuOiB0YXNrMSwgdGFzazIgLi4ufQorICAgIGFkZGVkX2Zvcm1hdCA9IHt9CisgICAgY291bnRlciA9IDAKKyAgICBmb3IgayBpbiBhZGRlZC5rZXlzKCk6CisgICAgICAgIHBuLCB0YXNrID0gc3BsaXRfcG50YXNrKGspCisgICAgICAgIGlmIHBuIGluIGFkZGVkX2Zvcm1hdDoKKyAgICAgICAgICAgICMgQXBwZW5kIHRoZSB2YWx1ZQorICAgICAgICAgICAgYWRkZWRfZm9ybWF0W3BuXSA9ICIlcyAlcyIgJSAoYWRkZWRfZm9ybWF0LmdldChwbiksIHRhc2spCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGRlZF9mb3JtYXRbcG5dID0gdGFzaworICAgICAgICBjb3VudGVyICs9IDEKKyAgICBwcmludCgiPT09IE5ld2x5IGFkZGVkIHRhc2tzOiAoJXMgdGFza3MpIiAlIGNvdW50ZXIpCisgICAgZm9yIGsgaW4gYWRkZWRfZm9ybWF0LmtleXMoKToKKyAgICAgICAgcHJpbnQoIiAgJXM6ICVzIiAlIChrLCBhZGRlZF9mb3JtYXQuZ2V0KGspKSkKKworICAgIHJldHVybiBjb3VudGVyCisKK2RlZiBwcmludF92cmNoYW5nZWQoZF9uZXcgPSBOb25lLCBkX29sZCA9IE5vbmUsIHZyID0gTm9uZSk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIHB2IG9yIHByIGNoYW5nZWQgdGFza3MuCisgICAgVGhlIGFyZyAidnIiIGlzICJwdiIgb3IgInByIgorICAgICIiIgorICAgIHB2Y2hhbmdlZCA9IHt9CisgICAgY291bnRlciA9IDAKKyAgICBmb3IgayBpbiBkX25ldy5rZXlzKCk6CisgICAgICAgIGlmIGRfbmV3LmdldChrKS5nZXQodnIpICE9IGRfb2xkLmdldChrKS5nZXQodnIpOgorICAgICAgICAgICAgY291bnRlciArPSAxCisgICAgICAgICAgICBwbiwgdGFzayA9IHNwbGl0X3BudGFzayhrKQorICAgICAgICAgICAgaWYgcG4gbm90IGluIHB2Y2hhbmdlZDoKKyAgICAgICAgICAgICAgICAjIEZvcm1hdCB0aGUgb3V0cHV0LCB3ZSBvbmx5IHByaW50IHBuIChubyB0YXNrKSBzaW5jZQorICAgICAgICAgICAgICAgICMgYWxsIHRoZSB0YXNrcyB3b3VsZCBiZSBjaGFuZ2VkIHdoZW4gcG4gb3IgcHIgY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAjIHRoZSBkaWN0IGZvcm1hdCBpczoKKyAgICAgICAgICAgICAgICAjIHtwbjogcHYvcHJfb2xkIC0+IHB2L3ByX25ld30KKyAgICAgICAgICAgICAgICBwdmNoYW5nZWRbcG5dID0gIiVzIC0+ICVzIiAlIChkX29sZC5nZXQoaykuZ2V0KHZyKSwgZF9uZXcuZ2V0KGspLmdldCh2cikpCisgICAgICAgICAgICBkZWwoZF9uZXdba10pCisKKyAgICBpZiBub3QgcHZjaGFuZ2VkOgorICAgICAgICByZXR1cm4gMAorCisgICAgcHJpbnQoIlxuPT09ICVzIGNoYW5nZWQ6ICglcyB0YXNrcykiICUgKHZyLnVwcGVyKCksIGNvdW50ZXIpKQorICAgIGZvciBrIGluIHB2Y2hhbmdlZC5rZXlzKCk6CisgICAgICAgIHByaW50KCIgICVzOiAlcyIgJSAoaywgcHZjaGFuZ2VkLmdldChrKSkpCisKKyAgICByZXR1cm4gY291bnRlcgorCitkZWYgcHJpbnRfZGVwY2hhbmdlZChkX25ldyA9IE5vbmUsIGRfb2xkID0gTm9uZSwgdmVyYm9zZSA9IEZhbHNlKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgZGVwZW5kZW5jeSBjaGFuZ2VzCisgICAgIiIiCisgICAgZGVwY2hhbmdlZCA9IHt9CisgICAgY291bnRlciA9IDAKKyAgICBmb3IgayBpbiBkX25ldy5rZXlzKCk6CisgICAgICAgIGNvdW50ZXIgKz0gMQorICAgICAgICBwbiwgdGFzayA9IHNwbGl0X3BudGFzayhrKQorICAgICAgICBpZiAodmVyYm9zZSk6CisgICAgICAgICAgICBmdWxsX3BhdGhfb2xkID0gZF9vbGQuZ2V0KGspLmdldCgicGF0aCIpCisgICAgICAgICAgICBmdWxsX3BhdGhfbmV3ID0gZF9uZXcuZ2V0KGspLmdldCgicGF0aCIpCisgICAgICAgICAgICAjIE5vIGNvdW50ZXIgc2luY2UgaXQgaXMgbm90IHJlYWR5IGhlcmUKKyAgICAgICAgICAgIGlmIHNpZ2RhdGFfcmUubWF0Y2goZnVsbF9wYXRoX29sZCkgYW5kIHNpZ2RhdGFfcmUubWF0Y2goZnVsbF9wYXRoX25ldyk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMoZnVsbF9wYXRoX29sZCwgZnVsbF9wYXRoX25ldykKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbj09PSBUaGUgdmVyYm9zZSBjaGFuZ2VzIG9mICVzLmRvXyVzOiIgJSAocG4sIHRhc2spKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnXG4nLmpvaW4ob3V0cHV0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRm9ybWF0IHRoZSBvdXRwdXQsIHRoZSBmb3JtYXQgaXM6CisgICAgICAgICAgICAjIHtwbjogdGFzazEsIHRhc2syLCAuLi59CisgICAgICAgICAgICBpZiBwbiBpbiBkZXBjaGFuZ2VkOgorICAgICAgICAgICAgICAgIGRlcGNoYW5nZWRbcG5dID0gIiVzICVzIiAlIChkZXBjaGFuZ2VkLmdldChwbiksIHRhc2spCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlcGNoYW5nZWRbcG5dID0gdGFzaworCisgICAgaWYgbGVuKGRlcGNoYW5nZWQpID4gMDoKKyAgICAgICAgcHJpbnQoIlxuPT09IERlcGVuZGVuY2llcyBjaGFuZ2VkOiAoJXMgdGFza3MpIiAlIGNvdW50ZXIpCisgICAgICAgIGZvciBrIGluIGRlcGNoYW5nZWQua2V5cygpOgorICAgICAgICAgICAgcHJpbnQoIiAgJXM6ICVzIiAlIChrLCBkZXBjaGFuZ2VkW2tdKSkKKworICAgIHJldHVybiBjb3VudGVyCisKKworZGVmIG1haW4oKToKKyAgICAiIiIKKyAgICBQcmludCB3aGF0IHdpbGwgYmUgZG9uZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGJ1aWxkczoKKyAgICAxKSBSdW4gIlNUQU1QU19ESVI9PHBhdGg+IGJpdGJha2UgLVMgcmVjaXBlIiB0byByZS1nZW5lcmF0ZSB0aGUgc3RhbXBzCisgICAgMikgRmlndXJlIG91dCB3aGF0IGFyZSBuZXdseSBhZGRlZCBhbmQgY2hhbmdlZCwgY2FuJ3QgZmlndXJlIG91dAorICAgICAgIHdoYXQgYXJlIHJlbW92ZWQgc2luY2Ugd2UgY2FuJ3Qga25vdyB0aGUgcHJldmlvdXMgc3RhbXBzCisgICAgICAgY2xlYXJseSwgZm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBzZXZlcmFsIGJ1aWxkcywgd2UgY2FuJ3Qga25vdworICAgICAgIHdoaWNoIHN0YW1wcyB0aGUgbGFzdCBidWlsZCBoYXMgdXNlZCBleGFjdGx5LgorICAgIDMpIFVzZSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyB0byBkaWZmIHRoZSBvbGQgYW5kIG5ldyBzdGFtcHMKKyAgICAiIiIKKworICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcigKKyAgICAgICAgdmVyc2lvbiA9ICIxLjAiLAorICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBbcGFja2FnZSAuLi5dCitwcmludCB3aGF0IHdpbGwgYmUgZG9uZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCBsYXN0IGJ1aWxkcywgZm9yIGV4YW1wbGU6CisKKyAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgIyBFZGl0IHRoZSByZWNpcGVzCisgICAgJCBiaXRiYWtlLXdoYXRjaGFuZ2VkIGNvcmUtaW1hZ2Utc2F0bworCitUaGUgY2hhbmdlcyB3aWxsIGJlIHByaW50ZWQiCisKK05vdGU6CisgICAgVGhlIGFtb3VudCBvZiB0YXNrcyBpcyBub3QgYWNjdXJhdGUgd2hlbiB0aGUgdGFzayBpcyAiZG9fYnVpbGQiIHNpbmNlCisgICAgaXQgdXN1YWxseSBkZXBlbmRzIG9uIG90aGVyIHRhc2tzLgorICAgIFRoZSAibm9zdGFtcCIgdGFzayBpcyBub3QgaW5jbHVkZWQuCisiIiIKKykKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJwcmludCB0aGUgdmVyYm9zZSBjaGFuZ2VzIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJ2ZXJib3NlIikKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKworICAgIHZlcmJvc2UgPSBvcHRpb25zLnZlcmJvc2UKKworICAgIGlmIGxlbihhcmdzKSAhPSAyOgorICAgICAgICBwYXJzZXIuZXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIikKKyAgICBlbHNlOgorICAgICAgICByZWNpcGUgPSBhcmdzWzFdCisKKyAgICAjIEdldCB0aGUgU1RBTVBTX0RJUgorICAgIHByaW50KCJGaWd1cmluZyBvdXQgdGhlIFNUQU1QU19ESVIgLi4uIikKKyAgICBjbWRsaW5lID0gImJpdGJha2UgLWUgfCBzZWQgLW5lICdzL15TVEFNUFNfRElSPVwiXCguKlwpXCIvXFwxL3AnIgorICAgIHRyeToKKyAgICAgICAgc3RhbXBzZGlyLCBlcnIgPSBiYi5wcm9jZXNzLnJ1bihjbWRsaW5lKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UKKyAgICBpZiBub3Qgc3RhbXBzZGlyOgorICAgICAgICBwcmludCgiRVJST1I6IE5vIFNUQU1QU19ESVIgZm91bmQgZm9yICclcyciICUgcmVjaXBlLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybiAyCisgICAgc3RhbXBzZGlyID0gc3RhbXBzZGlyLnJzdHJpcCgiXG4iKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHN0YW1wc2Rpcik6CisgICAgICAgIHByaW50KCJFUlJPUjogc3RhbXBzIGRpcmVjdG9yeSBcIiVzXCIgbm90IGZvdW5kISIgJSBzdGFtcHNkaXIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgcmV0dXJuIDIKKworICAgICMgVGhlIG5ldyBzdGFtcHMgZGlyCisgICAgbmV3X3N0YW1wc2RpciA9IHN0YW1wc2RpciArICIuYmJzIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG5ld19zdGFtcHNkaXIpOgorICAgICAgICBwcmludCgiRVJST1I6ICVzIGFscmVhZHkgZXhpc3RzISIgJSBuZXdfc3RhbXBzZGlyLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybiAyCisKKyAgICB0cnk6CisgICAgICAgICMgR2VuZXJhdGUgdGhlIG5ldyBzdGFtcHMgZGlyCisgICAgICAgIHByaW50KCJHZW5lcmF0aW5nIHRoZSBuZXcgc3RhbXBzIC4uLiAobmVlZCBzZXZlcmFsIG1pbnV0ZXMpIikKKyAgICAgICAgY21kbGluZSA9ICJTVEFNUFNfRElSPSVzIGJpdGJha2UgLVMgbm9uZSAlcyIgJSAobmV3X3N0YW1wc2RpciwgcmVjaXBlKQorICAgICAgICAjIEZJWE1FCisgICAgICAgICMgVGhlICJiaXRiYWtlIC1TIiBtYXkgZmFpbCwgbm90IGZhdGFsIGVycm9yLCB0aGUgc3RhbXBzIHdpbGwgc3RpbGwKKyAgICAgICAgIyBiZSBnZW5lcmF0ZWQsIHRoaXMgbWlnaHQgYmUgYSBidWcgb2YgImJpdGJha2UgLVMiLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bihjbWRsaW5lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHByaW50KGV4YykKKworICAgICAgICAjIFRoZSBkaWN0IGZvciB0aGUgbmV3IGFuZCBvbGQgc3RhbXBzLgorICAgICAgICBvbGRfZGljdCA9IGdlbl9kaWN0KHN0YW1wc2RpcikKKyAgICAgICAgbmV3X2RpY3QgPSBnZW5fZGljdChuZXdfc3RhbXBzZGlyKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSBzYW1lIG9uZSBmcm9tIGJvdGggc3RhbXBzLgorICAgICAgICBjbnRfdW5jaGFuZ2VkID0gMAorICAgICAgICBmb3IgayBpbiBuZXdfZGljdC5rZXlzKCk6CisgICAgICAgICAgICBpZiBrIGluIG9sZF9kaWN0OgorICAgICAgICAgICAgICAgIGNudF91bmNoYW5nZWQgKz0gMQorICAgICAgICAgICAgICAgIGRlbChuZXdfZGljdFtrXSkKKyAgICAgICAgICAgICAgICBkZWwob2xkX2RpY3Rba10pCisKKyAgICAgICAgIyBSZS1jb25zdHJ1Y3QgdGhlIGRpY3QgdG8gZWFzaWx5IGZpbmQgb3V0IHdoYXQgaXMgYWRkZWQgb3IgY2hhbmdlZC4KKyAgICAgICAgIyBUaGUgZGljdCBmb3JtYXQgaXM6CisgICAgICAgICMge3BuX3Rhc2s6IHtwdjogUFYsIHByOiBQUiwgcGF0aDogUEFUSH19CisgICAgICAgIG5ld19yZWNvbiA9IHJlY29uX2RpY3QobmV3X2RpY3QpCisgICAgICAgIG9sZF9yZWNvbiA9IHJlY29uX2RpY3Qob2xkX2RpY3QpCisKKyAgICAgICAgZGVsIG5ld19kaWN0CisgICAgICAgIGRlbCBvbGRfZGljdAorCisgICAgICAgICMgRmlndXJlIG91dCB3aGF0IGFyZSBjaGFuZ2VkLCB0aGUgbmV3X3JlY29uIHdvdWxkIGJlIGNoYW5nZWQKKyAgICAgICAgIyBieSB0aGUgcHJpbnRfeHh4IGZ1bmN0aW9uLgorICAgICAgICAjIE5ld2x5IGFkZGVkCisgICAgICAgIGNudF9hZGRlZCA9IHByaW50X2FkZGVkKG5ld19yZWNvbiwgb2xkX3JlY29uKQorCisgICAgICAgICMgUFYgKGluY2x1ZGluZyBQRSkgYW5kIFBSIGNoYW5nZWQKKyAgICAgICAgIyBMZXQgdGhlIGJiLnNpZ2dlbiBoYW5kbGUgdGhlbSBpZiB2ZXJib3NlCisgICAgICAgIGNudF9ydiA9IHt9CisgICAgICAgIGlmIG5vdCB2ZXJib3NlOgorICAgICAgICAgICAgZm9yIGkgaW4gKCdwdicsICdwcicpOgorICAgICAgICAgICAgICAgY250X3J2W2ldID0gcHJpbnRfdnJjaGFuZ2VkKG5ld19yZWNvbiwgb2xkX3JlY29uLCBpKQorCisgICAgICAgICMgRGVwZW5kZW5jaWVzIGNoYW5nZWQgKHVzZSBiaXRiYWtlLWRpZmZzaWdzKQorICAgICAgICBjbnRfZGVwID0gcHJpbnRfZGVwY2hhbmdlZChuZXdfcmVjb24sIG9sZF9yZWNvbiwgdmVyYm9zZSkKKworICAgICAgICB0b3RhbF9jaGFuZ2VkID0gY250X2FkZGVkICsgKGNudF9ydi5nZXQoJ3B2Jykgb3IgMCkgKyAoY250X3J2LmdldCgncHInKSBvciAwKSArIGNudF9kZXAKKworICAgICAgICBwcmludCgiXG49PT0gU3VtbWFyeTogKCVzIGNoYW5nZWQsICVzIHVuY2hhbmdlZCkiICUgKHRvdGFsX2NoYW5nZWQsIGNudF91bmNoYW5nZWQpKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIk5ld2x5IGFkZGVkOiAlc1xuRGVwZW5kZW5jaWVzIGNoYW5nZWQ6ICVzXG4iICUgXAorICAgICAgICAgICAgICAgIChjbnRfYWRkZWQsIGNudF9kZXApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIk5ld2x5IGFkZGVkOiAlc1xuUFYgY2hhbmdlZDogJXNcblBSIGNoYW5nZWQ6ICVzXG5EZXBlbmRlbmNpZXMgY2hhbmdlZDogJXNcbiIgJSBcCisgICAgICAgICAgICAgICAgKGNudF9hZGRlZCwgY250X3J2LmdldCgncHYnKSBvciAwLCBjbnRfcnYuZ2V0KCdwcicpIG9yIDAsIGNudF9kZXApKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcHJpbnQoIkVSUk9SIG9jY3VycmVkISIpCisgICAgICAgIHJhaXNlCisgICAgZmluYWxseToKKyAgICAgICAgIyBSZW1vdmUgdGhlIG5ld2x5IGdlbmVyYXRlZCBzdGFtcHMgZGlyCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5ld19zdGFtcHNkaXIpOgorICAgICAgICAgICAgcHJpbnQoIlJlbW92aW5nIHRoZSBuZXdseSBnZW5lcmF0ZWQgc3RhbXBzIGRpciAuLi4iKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShuZXdfc3RhbXBzZGlyKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzIGIveW9jdG8tcG9reS9zY3JpcHRzL2J1aWxkaGlzdG9yeS1jb2xsZWN0LXNyY3JldnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNThhMjcwOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzCkBAIC0wLDAgKzEsMTA5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29sbGVjdHMgdGhlIHJlY29yZGVkIFNSQ1JFViB2YWx1ZXMgZnJvbSBidWlsZGhpc3RvcnkgYW5kIHJlcG9ydHMgb24gdGhlbQorIworIyBDb3B5cmlnaHQgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3JlZC1ieTogIFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zLCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworZGVmIGxvZ2dlcl9jcmVhdGUoKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiYnVpbGRoaXN0b3J5IikKKyAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBsb2dnZXJoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCkKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uID0gIkNvbGxlY3RzIHRoZSByZWNvcmRlZCBTUkNSRVYgdmFsdWVzIGZyb20gYnVpbGRoaXN0b3J5IGFuZCByZXBvcnRzIG9uIHRoZW0uIiwKKyAgICAgICAgdXNhZ2UgPSAiIiIKKyAgICAlcHJvZyBbb3B0aW9uc10iIiIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1yZXBvcnQtYWxsIiwKKyAgICAgICAgICAgIGhlbHAgPSAiUmVwb3J0IGFsbCBTUkNSRVYgdmFsdWVzLCBub3QganVzdCBvbmVzIHdoZXJlIEFVVE9SRVYgaGFzIGJlZW4gdXNlZCIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXBvcnRhbGwiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZvcmNldmFyaWFibGUiLAorICAgICAgICAgICAgaGVscCA9ICJVc2UgZm9yY2V2YXJpYWJsZSBvdmVycmlkZSBmb3IgYWxsIG91dHB1dCBsaW5lcyIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJmb3JjZXZhcmlhYmxlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1idWlsZGhpc3RvcnktZGlyIiwKKyAgICAgICAgICAgIGhlbHAgPSAiU3BlY2lmeSBwYXRoIHRvIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcnkgKGRlZmF1bHRzIHRvIGJ1aWxkaGlzdG9yeS8gdW5kZXIgY3dkKSIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0iYnVpbGRoaXN0b3J5X2RpciIsIGRlZmF1bHQ9J2J1aWxkaGlzdG9yeS8nKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSW52YWxpZCBhcmd1bWVudChzKSBzcGVjaWZpZWQ6ICVzXG5cbicgJSAnICcuam9pbihhcmdzWzE6XSkpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdCdWlsZGhpc3RvcnkgZGlyZWN0b3J5ICIlcyIgZG9lcyBub3QgZXhpc3RcblxuJyAlIG9wdGlvbnMuYnVpbGRoaXN0b3J5X2RpcikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgb3B0aW9ucy5mb3JjZXZhcmlhYmxlOgorICAgICAgICBmb3JjZXZhcmlhYmxlID0gJ19mb3JjZXZhcmlhYmxlJworICAgIGVsc2U6CisgICAgICAgIGZvcmNldmFyaWFibGUgPSAnJworCisgICAgbGFzdGRpciA9ICcnCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyKToKKyAgICAgICAgaWYgJy5naXQnIGluIGRpcnM6CisgICAgICAgICAgICBkaXJzLnJlbW92ZSgnLmdpdCcpCisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZuID09ICdsYXRlc3Rfc3JjcmV2JzoKKyAgICAgICAgICAgICAgICBjdXJkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZShyb290KSkKKyAgICAgICAgICAgICAgICBpZiBsYXN0ZGlyICE9IGN1cmRpcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyMgJXMnICUgY3VyZGlyKQorICAgICAgICAgICAgICAgICAgICBsYXN0ZGlyID0gY3VyZGlyCisgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZm4pCisgICAgICAgICAgICAgICAgcG4gPSBvcy5wYXRoLmJhc2VuYW1lKHJvb3QpCisgICAgICAgICAgICAgICAgc3JjcmV2ID0gTm9uZQorICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gTm9uZQorICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2cyA9IHt9CisgICAgICAgICAgICAgICAgc3JjcmV2cyA9IHt9CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZ1bGxwYXRoKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJz0nIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0dmFsWzFdLnN0cmlwKCciIFx0XG5ccicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgU1JDUkVWID0gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19zcmNyZXYgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgU1JDUkVWXycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNwbGl0dmFsWzBdLnNwbGl0KCdfJylbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2c1tuYW1lXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnU1JDUkVWID0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNyZXYgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NSQ1JFVl8nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXR2YWxbMF0uc3BsaXQoJ18nKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjcmV2c1tuYW1lXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgaWYgc3JjcmV2IGFuZCAob3B0aW9ucy5yZXBvcnRhbGwgb3Igc3JjcmV2ICE9IG9yaWdfc3JjcmV2KToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1NSQ1JFVl9wbi0lcyVzID0gIiVzIicgJSAocG4sIGZvcmNldmFyaWFibGUsIHNyY3JldikpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNyY3JldnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgb3JpZyA9IG9yaWdfc3JjcmV2cy5nZXQobmFtZSwgb3JpZ19zcmNyZXYpCisgICAgICAgICAgICAgICAgICAgIGlmIG9wdGlvbnMucmVwb3J0YWxsIG9yIHZhbHVlICE9IG9yaWc6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnU1JDUkVWXyVzX3BuLSVzJXMgPSAiJXMiJyAlIChuYW1lLCBwbiwgZm9yY2V2YXJpYWJsZSwgdmFsdWUpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYgYi95b2N0by1wb2t5L3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZlYmNkZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZgpAQCAtMCwwICsxLDEwMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgUmVwb3J0IHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIHRoZSBidWlsZGhpc3RvcnkgcmVwb3NpdG9yeSBzaW5jZSBhIHNwZWNpZmljIHJldmlzaW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3I6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBvcHRwYXJzZQorZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisKKyMgRW5zdXJlIFB5dGhvbkdpdCBpcyBpbnN0YWxsZWQgKGJ1aWxkaGlzdG9yeV9hbmFseXNpcyBuZWVkcyBpdCkKK3RyeToKKyAgICBpbXBvcnQgZ2l0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcHJpbnQoIlBsZWFzZSBpbnN0YWxsIEdpdFB5dGhvbiAocHl0aG9uLWdpdCkgMC4zLjEgb3IgbGF0ZXIgaW4gb3JkZXIgdG8gdXNlIHRoaXMgc2NyaXB0IikKKyAgICBzeXMuZXhpdCgxKQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiUmVwb3J0cyBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiB0aGUgYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnkuIiwKKyAgICAgICAgdXNhZ2UgPSAiIiIKKyAgICAlcHJvZyBbb3B0aW9uc10gW2Zyb20tcmV2aXNpb24gW3RvLXJldmlzaW9uXV0KKyhpZiBub3Qgc3BlY2lmaWVkLCBmcm9tLXJldmlzaW9uIGRlZmF1bHRzIHRvIGJ1aWxkLW1pbnVzLTEsIGFuZCB0by1yZXZpc2lvbiBkZWZhdWx0cyB0byBIRUFEKSIiIikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLWJ1aWxkaGlzdG9yeS1kaXIiLAorICAgICAgICAgICAgaGVscCA9ICJTcGVjaWZ5IHBhdGggdG8gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gYnVpbGRoaXN0b3J5LyB1bmRlciBjd2QpIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJidWlsZGhpc3RvcnlfZGlyIiwgZGVmYXVsdD0nYnVpbGRoaXN0b3J5LycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tcmVwb3J0LXZlcnNpb24iLAorICAgICAgICAgICAgaGVscCA9ICJSZXBvcnQgY2hhbmdlcyBpbiBQS0dFL1BLR1YvUEtHUiBldmVuIHdoZW4gdGhlIHZhbHVlcyBhcmUgc3RpbGwgdGhlIGRlZmF1bHQgKFBFL1BWL1BSKSIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJyZXBvcnRfdmVyIiwgZGVmYXVsdD1GYWxzZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1yZXBvcnQtYWxsIiwKKyAgICAgICAgICAgIGhlbHAgPSAiUmVwb3J0IGFsbCBjaGFuZ2VzLCBub3QganVzdCB0aGUgZGVmYXVsdCBzaWduaWZpY2FudCBvbmVzIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcG9ydF9hbGwiLCBkZWZhdWx0PUZhbHNlKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgaWYgbGVuKGFyZ3MpID4gMzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSW52YWxpZCBhcmd1bWVudChzKSBzcGVjaWZpZWQ6ICVzXG5cbicgJSAnICcuam9pbihhcmdzWzM6XSkpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIExvb3NlVmVyc2lvbihnaXQuX192ZXJzaW9uX18pIDwgJzAuMy4xJzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVmVyc2lvbiBvZiBHaXRQeXRob24gaXMgdG9vIG9sZCwgcGxlYXNlIGluc3RhbGwgR2l0UHl0aG9uIChweXRob24tZ2l0KSAwLjMuMSBvciBsYXRlciBpbiBvcmRlciB0byB1c2UgdGhpcyBzY3JpcHRcbiIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQnVpbGRoaXN0b3J5IGRpcmVjdG9yeSAiJXMiIGRvZXMgbm90IGV4aXN0XG5cbicgJSBvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHNjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCisgICAgbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKKyAgICBzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCisgICAgaW1wb3J0IHNjcmlwdHBhdGgKKworICAgICMgU2V0IHBhdGggdG8gT0UgbGliIGRpciBzbyB3ZSBjYW4gaW1wb3J0IHRoZSBidWlsZGhpc3RvcnlfYW5hbHlzaXMgbW9kdWxlCisgICAgc2NyaXB0cGF0aC5hZGRfb2VfbGliX3BhdGgoKQorICAgICMgU2V0IHBhdGggdG8gYml0YmFrZSBsaWIgZGlyIHNvIHRoZSBidWlsZGhpc3RvcnlfYW5hbHlzaXMgbW9kdWxlIGNhbiBsb2FkIGJiLnV0aWxzCisgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGltcG9ydCBvZS5idWlsZGhpc3RvcnlfYW5hbHlzaXMKKworICAgIGZyb21yZXYgPSAnYnVpbGQtbWludXMtMScKKyAgICB0b3JldiA9ICdIRUFEJworICAgIGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyIGFuZCAnLi4nIGluIGFyZ3NbMV06CisgICAgICAgICAgICByZXZzID0gYXJnc1sxXS5zcGxpdCgnLi4nKQorICAgICAgICAgICAgZnJvbXJldiA9IHJldnNbMF0KKyAgICAgICAgICAgIGlmIHJldnNbMV06CisgICAgICAgICAgICAgICAgdG9yZXYgPSByZXZzWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tcmV2ID0gYXJnc1sxXQorICAgIGlmIGxlbihhcmdzKSA+IDI6CisgICAgICAgIHRvcmV2ID0gYXJnc1syXQorCisgICAgaW1wb3J0IGdpdGRiCisgICAgdHJ5OgorICAgICAgICBjaGFuZ2VzID0gb2UuYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnByb2Nlc3NfY2hhbmdlcyhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIsIGZyb21yZXYsIHRvcmV2LCBvcHRpb25zLnJlcG9ydF9hbGwsIG9wdGlvbnMucmVwb3J0X3ZlcikKKyAgICBleGNlcHQgZ2l0ZGIuZXhjLkJhZE9iamVjdCBhcyBlOgorICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIHByZXZpb3VzIGJ1aWxkIHJldmlzaW9uIGluIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5XG5cbiIpCisgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdTcGVjaWZpZWQgZ2l0IHJldmlzaW9uICIlcyIgaXMgbm90IHZhbGlkXG4nICUgZS5hcmdzWzBdKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZm9yIGNoZyBpbiBjaGFuZ2VzOgorICAgICAgICBwcmludCgnJXMnICUgY2hnKQorCisgICAgc3lzLmV4aXQoMCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NsZWFudXAtd29ya2RpciBiL3lvY3RvLXBva3kvc2NyaXB0cy9jbGVhbnVwLXdvcmtkaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTdmNWEzYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jbGVhbnVwLXdvcmtkaXIKQEAgLTAsMCArMSwxOTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzaHV0aWwKKworcGtnX2N1cl9kaXJzID0ge30KK29ic29sZXRlX2RpcnMgPSBbXQorcGFyc2VyID0gTm9uZQorCitkZWYgZXJyX3F1aXQobXNnKToKKyAgICBwcmludCBtc2cKKyAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQorICAgIHN5cy5leGl0KDEpCisKK2RlZiBwYXJzZV92ZXJzaW9uKHZlcnN0cik6CisgICAgZWxlbXMgPSB2ZXJzdHIuc3BsaXQoJzonKQorICAgIGVwb2NoID0gZWxlbXNbMF0KKyAgICBpZiBsZW4oZXBvY2gpID09IDA6CisgICAgICAgIHJldHVybiBlbGVtc1sxXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBlcG9jaCArICdfJyArIGVsZW1zWzFdCisKK2RlZiBydW5fY29tbWFuZChjbWQpOgorICAgIHBpcGUgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKKyAgICBvdXRwdXQgPSBwaXBlLmNvbW11bmljYXRlKClbMF0KKyAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcHJpbnQgIkV4ZWN1dGUgY29tbWFuZCAnJXMnIGZhaWxlZC4iICUgY21kCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgZ2V0X2N1cl9hcmNoX2RpcnMod29ya2RpciwgYXJjaF9kaXJzKToKKyAgICBwYXR0ZXJuID0gd29ya2RpciArICcvKC4qPykvJworCisgICAgY21kID0gImJpdGJha2UgLWUgfCBncmVwIF5TREtfQVJDSD0iCisgICAgb3V0cHV0ID0gcnVuX2NvbW1hbmQoY21kKQorICAgIHNka19hcmNoID0gb3V0cHV0LnNwbGl0KCciJylbMV0KKworICAgICMgc2VsZWN0IHRoZXN0IDUgcGFja2FnZXMgdG8gZ2V0IHRoZSBkaXJzIG9mIGN1cnJlbnQgYXJjaAorICAgIHBrZ3MgPSBbJ2hpY29sb3ItaWNvbi10aGVtZScsICdiYXNlLWZpbGVzJywgJ2FjbC1uYXRpdmUnLCAnYmludXRpbHMtY3Jvc3NzZGstJyArIHNka19hcmNoLCAnbmF0aXZlc2RrLWF1dG9jb25mJ10KKworICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgY21kID0gImJpdGJha2UgLWUgIiArIHBrZyArICIgfCBncmVwIF5JTUFHRV9ST09URlM9IgorICAgICAgICBvdXRwdXQgPSBydW5fY29tbWFuZChjbWQpCisgICAgICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnIicpWzFdCisgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBvdXRwdXQpCisgICAgICAgIGFyY2hfZGlycy5hcHBlbmQobS5ncm91cCgxKSkKKworZGVmIG1haW4oKToKKyAgICBnbG9iYWwgcGFyc2VyCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB1c2FnZSA9ICIiIiVwcm9nCisKKyVwcm9nIHJlbW92ZXMgdGhlIG9ic29sZXRlIHBhY2thZ2VzJyBidWlsZCBkaXJlY3RvcmllcyBpbiBXT1JLRElSLgorVGhpcyBzY3JpcHQgbXVzdCBiZSByYW4gdW5kZXIgQlVJTERESVIgYWZ0ZXIgc291cmNlIGZpbGUgXCJvZS1pbml0LWJ1aWxkLWVudlwiLgorCitBbnkgZmlsZSBvciBkaXJlY3RvcnkgdW5kZXIgV09SS0RJUiB3aGljaCBpcyBub3QgY3JlYXRlZCBieSBZb2N0bword2lsbCBiZSBkZWxldGVkLiBCZSBDQVVUSU9VUy4iIiIpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICBidWlsZGRpciA9IHJ1bl9jb21tYW5kKCdlY2hvICRCVUlMRERJUicpLnN0cmlwKCkKKyAgICBpZiBsZW4oYnVpbGRkaXIpID09IDA6CisgICAgICAgIGVycl9xdWl0KCJQbGVhc2Ugc291cmNlIGZpbGUgXCJvZS1pbml0LWJ1aWxkLWVudlwiIGZpcnN0LlxuIikKKworICAgIGlmIG9zLmdldGN3ZCgpICE9IGJ1aWxkZGlyOgorICAgICAgICBlcnJfcXVpdCgiUGxlYXNlIHJ1biAlcyB1bmRlcjogJXNcbiIgJSAob3MucGF0aC5iYXNlbmFtZShhcmdzWzBdKSwgYnVpbGRkaXIpKQorCisgICAgcHJpbnQgJ1VwZGF0aW5nIGJpdGJha2UgY2FjaGVzLi4uJworICAgIGNtZCA9ICJiaXRiYWtlIC1zIgorICAgIG91dHB1dCA9IHJ1bl9jb21tYW5kKGNtZCkKKworICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnXG4nKQorICAgIGluZGV4ID0gMAorICAgIHdoaWxlIGxlbihvdXRwdXRbaW5kZXhdKSA+IDA6CisgICAgICAgIGluZGV4ICs9IDEKKyAgICBhbGxsaW5lcyA9IG91dHB1dFtpbmRleCsxOl0KKworICAgIGZvciBsaW5lIGluIGFsbGxpbmVzOgorICAgICAgICAjIGVtcHR5IGFnYWluIG1lYW5zIGVuZCBvZiB0aGUgdmVyc2lvbnMgb3V0cHV0CisgICAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBsaW5lID0gcmUuc3ViKCdccysnLCAnICcsIGxpbmUpCisgICAgICAgIGVsZW1zID0gbGluZS5zcGxpdCgnICcpCisgICAgICAgIGlmIGxlbihlbGVtcykgPT0gMjoKKyAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZV92ZXJzaW9uKGVsZW1zWzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBhcnNlX3ZlcnNpb24oZWxlbXNbMl0pCisgICAgICAgIHBrZ19jdXJfZGlyc1tlbGVtc1swXV0gPSB2ZXJzaW9uCisKKyAgICBjbWQgPSAiYml0YmFrZSAtZSIKKyAgICBvdXRwdXQgPSBydW5fY29tbWFuZChjbWQpCisKKyAgICB0bXBkaXIgPSBOb25lCisgICAgaW1hZ2Vfcm9vdGZzID0gTm9uZQorICAgIG91dHB1dCA9IG91dHB1dC5zcGxpdCgnXG4nKQorICAgIGZvciBsaW5lIGluIG91dHB1dDoKKyAgICAgICAgaWYgdG1wZGlyIGFuZCBpbWFnZV9yb290ZnM6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIG5vdCB0bXBkaXI6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJ1RNUERJUj0iKC4qKSInLCBsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICB0bXBkaXIgPSBtLmdyb3VwKDEpCisKKyAgICAgICAgaWYgbm90IGltYWdlX3Jvb3RmczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnSU1BR0VfUk9PVEZTPSIoLiopIicsIGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGltYWdlX3Jvb3RmcyA9IG0uZ3JvdXAoMSkKKworICAgICMgd29uJ3QgZmFpbCBqdXN0IGluIGNhc2UKKyAgICBpZiBub3QgdG1wZGlyIG9yIG5vdCBpbWFnZV9yb290ZnM6CisgICAgICAgIHByaW50ICJDYW4ndCBnZXQgVE1QRElSIG9yIElNQUdFX1JPT1RGUy4iCisgICAgICAgIHJldHVybiAxCisKKyAgICBwYXR0ZXJuID0gdG1wZGlyICsgJy8oLio/KS8oLio/KS8nCisgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIGltYWdlX3Jvb3RmcykKKyAgICBpZiBub3QgbToKKyAgICAgICAgcHJpbnQgIkNhbid0IGdldCBXT1JLRElSLiIKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHdvcmtkaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBtLmdyb3VwKDEpKQorCisgICAgIyB3ZSBvbmx5IGRlYWwgdGhlIGRpcnMgb2YgY3VycmVudCBhcmNoLCB0b3RhbCBudW1iZXJzIG9mIGRpcnMgYXJlIDYKKyAgICBjdXJfYXJjaF9kaXJzID0gW20uZ3JvdXAoMildCisgICAgZ2V0X2N1cl9hcmNoX2RpcnMod29ya2RpciwgY3VyX2FyY2hfZGlycykKKworICAgIGZvciB3b3Jrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3b3JrZGlyKToKKyAgICAgICAgIyBGb3IgdGhlIGZpbGVzLCB0aGV5IHNob3VsZCBOT1QgZXhpc3QgaW4gV09SS0RJUi4gUmVtb3ZlIHRoZW0uCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHdvcmtyb290LCBmKSkKKworICAgICAgICBmb3IgZCBpbiBkaXJzOgorICAgICAgICAgICAgaWYgZCBub3QgaW4gY3VyX2FyY2hfZGlyczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgcGtncm9vdCwgcGtnZGlycywgZmlsZW5hbWVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKHdvcmtyb290LCBkKSk6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBvYnNvbGV0ZV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocGtncm9vdCwgZikpCisKKyAgICAgICAgICAgICAgICBmb3IgcGtnZGlyIGluIHNvcnRlZChwa2dkaXJzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnZGlyIG5vdCBpbiBwa2dfY3VyX2RpcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBvYnNvbGV0ZV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocGtncm9vdCwgcGtnZGlyKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2ZXJyb290LCB2ZXJkaXJzLCB2ZXJmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihwa2dyb290LCBwa2dkaXIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiB2ZXJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHBrZ3Jvb3QsIGYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2IGluIHNvcnRlZCh2ZXJkaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2IG5vdCBpbiBwa2dfY3VyX2RpcnNbcGtnZGlyXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jzb2xldGVfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHBrZ3Jvb3QsIHBrZ2RpciwgdikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMganVzdCBwcm9jZXNzIHRoZSB0b3AgZGlyIG9mIGV2ZXJ5IHBhY2thZ2UgdW5kZXIgdG1wL3dvcmsvKi8sCisgICAgICAgICAgICAgICAgIyB0aGVuIGp1bXAgb3V0IG9mIHRoZSBhYm92ZSBvcy53YWxrKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgaXQgaXMgY29udmVuaWVudCB0byB1c2Ugb3Mud2FsaygpIHRvIGdldCBkaXJzIGFuZCBmaWxlcyBhdCBzYW1lIHRpbWUKKyAgICAgICAgIyBib3RoIG9mIHRoZW0gaGF2ZSBiZWVuIGRlYWxlZCBpbiB0aGUgbG9vcCwgc28ganVtcCBvdXQKKyAgICAgICAgYnJlYWsKKworICAgIGZvciBkIGluIG9ic29sZXRlX2RpcnM6CisgICAgICAgIHByaW50ICJEZWxldGluZyAlcyIgJSBkCisgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgVHJ1ZSkKKworICAgIGlmIGxlbihvYnNvbGV0ZV9kaXJzKToKKyAgICAgICAgcHJpbnQgJ1xuVG90YWwgJWQgaXRlbXMuJyAlIGxlbihvYnNvbGV0ZV9kaXJzKQorICAgIGVsc2U6CisgICAgICAgIHByaW50ICdcbk5vIG9ic29sZXRlIGRpcmVjdG9yeSBmb3VuZCB1bmRlciAlcy4nICUgd29ya2RpcgorCisgICAgcmV0dXJuIDAKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDIKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDMpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0MzVhMTcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXIKQEAgLTAsMCArMSw5NDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yZWQtYnk6ICBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorIyAgICAgICAgICAgICAgIFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AaW50ZWwuY29tPgorIyAgICAgICAgICAgICAgIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG9zLCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCByZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitfX3ZlcnNpb25fXyA9ICIwLjIuMSIKKworZGVmIGxvZ2dlcl9jcmVhdGUoKToKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiIikKKyAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBsb2dnZXJoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiWyUoYXNjdGltZSlzXSAlKG1lc3NhZ2UpcyIsIiVIOiVNOiVTIikpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2VyaGFuZGxlcikKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgpCisKK2RlZiBnZXRfY3VycmVudF9icmFuY2gocmVwb2Rpcj1Ob25lKToKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocmVwb2RpciBpZiByZXBvZGlyIGVsc2UgJycsICIuZ2l0IikpOgorICAgICAgICAgICAgIyBSZXBvIG5vdCBjcmVhdGVkIHlldCAoaS5lLiBkdXJpbmcgaW5pdCkgc28ganVzdCBhc3N1bWUgbWFzdGVyCisgICAgICAgICAgICByZXR1cm4gIm1hc3RlciIKKyAgICAgICAgYnJhbmNobmFtZSA9IHJ1bmNtZCgiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsIiwgcmVwb2Rpcikuc3RyaXAoKQorICAgICAgICBpZiBicmFuY2huYW1lLnN0YXJ0c3dpdGgoInJlZnMvaGVhZHMvIik6CisgICAgICAgICAgICBicmFuY2huYW1lID0gYnJhbmNobmFtZVsxMTpdCisgICAgICAgIHJldHVybiBicmFuY2huYW1lCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICByZXR1cm4gIiIKKworY2xhc3MgQ29uZmlndXJhdGlvbihvYmplY3QpOgorICAgICIiIgorICAgIE1hbmFnZXMgdGhlIGNvbmZpZ3VyYXRpb24KKworICAgIEZvciBhbiBleGFtcGxlIGNvbmZpZyBmaWxlLCBzZWUgY29tYm8tbGF5ZXIuY29uZi5leGFtcGxlCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGZvciBrZXksIHZhbCBpbiBvcHRpb25zLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgICAgIGRlZiByZWFkc2VjdGlvbihwYXJzZXIsIHNlY3Rpb24sIHJlcG8pOgorICAgICAgICAgICAgZm9yIChuYW1lLCB2YWx1ZSkgaW4gcGFyc2VyLml0ZW1zKHNlY3Rpb24pOgorICAgICAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIkAiKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc1tyZXBvXVtuYW1lXSA9IGV2YWwodmFsdWUuc3RyaXAoIkAiKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEFwcGx5IHNwZWNpYWwgdHlwZSB0cmFuc2Zvcm1hdGlvbnMgZm9yIHNvbWUgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAgICAgICAgIyBUeXBlIG1hdGNoZXMgdGhlIFJhd0NvbmZpZ1BhcnNlci5nZXQqKCkgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICAgICAgdHlwZXMgPSB7J3NpZ25vZmYnOiAnYm9vbGVhbid9CisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIocGFyc2VyLCAnZ2V0JyArIHR5cGVzW25hbWVdKShzZWN0aW9uLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zW3JlcG9dW25hbWVdID0gdmFsdWUKKworICAgICAgICBkZWYgcmVhZGdsb2JhbHNlY3Rpb24ocGFyc2VyLCBzZWN0aW9uKToKKyAgICAgICAgICAgIGZvciAobmFtZSwgdmFsdWUpIGluIHBhcnNlci5pdGVtcyhzZWN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJjb21taXRfbXNnIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfbXNnX3RlbXBsYXRlID0gdmFsdWUKKworICAgICAgICBsb2dnZXIuZGVidWcoIkxvYWRpbmcgY29uZmlnIGZpbGUgJXMiICUgc2VsZi5jb25mZmlsZSkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmZpbGUpIGFzIGY6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5yZWFkZnAoZikKKworICAgICAgICAjIGluaXRpYWxpemUgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgc2VsZi5jb21taXRfbXNnX3RlbXBsYXRlID0gIkF1dG9tYXRpYyBjb21taXQgdG8gdXBkYXRlIGxhc3RfcmV2aXNpb24iCisKKyAgICAgICAgc2VsZi5yZXBvcyA9IHt9CisgICAgICAgIGZvciByZXBvIGluIHNlbGYucGFyc2VyLnNlY3Rpb25zKCk6CisgICAgICAgICAgICBpZiByZXBvID09ICJjb21iby1sYXllci1zZXR0aW5ncyI6CisgICAgICAgICAgICAgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBnbG9iYWwgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICByZWFkZ2xvYmFsc2VjdGlvbihzZWxmLnBhcnNlciwgcmVwbykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZXBvc1tyZXBvXSA9IHt9CisgICAgICAgICAgICAgICAgcmVhZHNlY3Rpb24oc2VsZi5wYXJzZXIsIHJlcG8sIHJlcG8pCisKKyAgICAgICAgIyBMb2FkIGxvY2FsIGNvbmZpZ3VyYXRpb24sIGlmIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmxvY2FsY29uZmZpbGUgPSBOb25lCisgICAgICAgIHNlbGYubG9jYWxwYXJzZXIgPSBOb25lCisgICAgICAgIHNlbGYuY29tYm9icmFuY2ggPSBOb25lCisgICAgICAgIGlmIHNlbGYuY29uZmZpbGUuZW5kc3dpdGgoJy5jb25mJyk6CisgICAgICAgICAgICBsY2ZpbGUgPSBzZWxmLmNvbmZmaWxlLnJlcGxhY2UoJy5jb25mJywgJy1sb2NhbC5jb25mJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxjZmlsZSk6CisgICAgICAgICAgICAgICAgIyBSZWFkIGNvbWJvIGxheWVyIGJyYW5jaAorICAgICAgICAgICAgICAgIHNlbGYuY29tYm9icmFuY2ggPSBnZXRfY3VycmVudF9icmFuY2goKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ29tYm8gbGF5ZXIgYnJhbmNoIGlzICVzIiAlIHNlbGYuY29tYm9icmFuY2gpCisKKyAgICAgICAgICAgICAgICBzZWxmLmxvY2FsY29uZmZpbGUgPSBsY2ZpbGUKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkxvYWRpbmcgbG9jYWwgY29uZmlnIGZpbGUgJXMiICUgc2VsZi5sb2NhbGNvbmZmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYubG9jYWxwYXJzZXIgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2NhbGNvbmZmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FscGFyc2VyLnJlYWRmcChmKQorCisgICAgICAgICAgICAgICAgZm9yIHNlY3Rpb24gaW4gc2VsZi5sb2NhbHBhcnNlci5zZWN0aW9ucygpOgorICAgICAgICAgICAgICAgICAgICBpZiAnfCcgaW4gc2VjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb252YWxzID0gc2VjdGlvbi5zcGxpdCgnfCcpCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvID0gc2VjdGlvbnZhbHNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlY3Rpb252YWxzWzFdICE9IHNlbGYuY29tYm9icmFuY2g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG8gPSBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmIHJlcG8gaW4gc2VsZi5yZXBvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRzZWN0aW9uKHNlbGYubG9jYWxwYXJzZXIsIHNlY3Rpb24sIHJlcG8pCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHJlcG8sIG9wdGlvbiwgdmFsdWUsIGluaXRtb2RlPUZhbHNlKToKKyAgICAgICAgIyBJZiB0aGUgbWFpbiBjb25maWcgaGFzIHRoZSBvcHRpb24gYWxyZWFkeSwgdGhhdCBpcyB3aGF0IHdlCisgICAgICAgICMgYXJlIGV4cGVjdGVkIHRvIG1vZGlmeS4KKyAgICAgICAgaWYgc2VsZi5sb2NhbHBhcnNlciBhbmQgbm90IHNlbGYucGFyc2VyLmhhc19vcHRpb24ocmVwbywgb3B0aW9uKToKKyAgICAgICAgICAgIHBhcnNlciA9IHNlbGYubG9jYWxwYXJzZXIKKyAgICAgICAgICAgIHNlY3Rpb24gPSAiJXN8JXMiICUgKHJlcG8sIHNlbGYuY29tYm9icmFuY2gpCisgICAgICAgICAgICBjb25mZmlsZSA9IHNlbGYubG9jYWxjb25mZmlsZQorICAgICAgICAgICAgaWYgaW5pdG1vZGUgYW5kIG5vdCBwYXJzZXIuaGFzX3NlY3Rpb24oc2VjdGlvbik6CisgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9zZWN0aW9uKHNlY3Rpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLnBhcnNlcgorICAgICAgICAgICAgc2VjdGlvbiA9IHJlcG8KKyAgICAgICAgICAgIGNvbmZmaWxlID0gc2VsZi5jb25mZmlsZQorICAgICAgICBwYXJzZXIuc2V0KHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCisgICAgICAgIHdpdGggb3Blbihjb25mZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgcGFyc2VyLndyaXRlKGYpCisgICAgICAgIHNlbGYucmVwb3NbcmVwb11bb3B0aW9uXSA9IHZhbHVlCisKKyAgICBkZWYgc2FuaXR5X2NoZWNrKHNlbGYsIGluaXRtb2RlPUZhbHNlKToKKyAgICAgICAgcmVxdWlyZWRfb3B0aW9ucz1bInNyY191cmkiLCAibG9jYWxfcmVwb19kaXIiLCAiZGVzdF9kaXIiLCAibGFzdF9yZXZpc2lvbiJdCisgICAgICAgIGlmIGluaXRtb2RlOgorICAgICAgICAgICAgcmVxdWlyZWRfb3B0aW9ucy5yZW1vdmUoImxhc3RfcmV2aXNpb24iKQorICAgICAgICBtc2cgPSAiIgorICAgICAgICBtaXNzaW5nX29wdGlvbnMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLnJlcG9zOgorICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiByZXF1aXJlZF9vcHRpb25zOgorICAgICAgICAgICAgICAgIGlmIG9wdGlvbiBub3QgaW4gc2VsZi5yZXBvc1tuYW1lXToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIiVzXG5PcHRpb24gJXMgaXMgbm90IGRlZmluZWQgZm9yIGNvbXBvbmVudCAlcyIgJShtc2csIG9wdGlvbiwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbWlzc2luZ19vcHRpb25zLmFwcGVuZChvcHRpb24pCisgICAgICAgICAgICAjIFNhbml0aXplIGRlc3RfZGlyIHNvIHRoYXQgd2UgZG8gbm90IGhhdmUgdG8gZGVhbCB3aXRoIGVkZ2UgY2FzZXMKKyAgICAgICAgICAgICMgKHVuc2V0LCBlbXB0eSBzdHJpbmcsIGRvdWJsZSBzbGFzaGVzKSBpbiB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKyAgICAgICAgICAgICMgSXQgbm90IGJlaW5nIHNldCB3aWxsIHN0aWxsIGJlIGZsYWdnZWQgYXMgZXJyb3IgYmVjYXVzZSBpdCBpcworICAgICAgICAgICAgIyBsaXN0ZWQgYXMgcmVxdWlyZWQgb3B0aW9uIGFib3ZlOyB0aGF0IGNvdWxkIGJlIGNoYW5nZWQgbm93LgorICAgICAgICAgICAgZGVzdF9kaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHNlbGYucmVwb3NbbmFtZV0uZ2V0KCJkZXN0X2RpciIsICIuIikpCisgICAgICAgICAgICBzZWxmLnJlcG9zW25hbWVdWyJkZXN0X2RpciJdID0gIi4iIGlmIG5vdCBkZXN0X2RpciBlbHNlIGRlc3RfZGlyCisgICAgICAgIGlmIG1zZyAhPSAiIjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiY29uZmlndXJhdGlvbiBmaWxlICVzIGhhcyB0aGUgZm9sbG93aW5nIGVycm9yOiAlcyIgJSAoc2VsZi5jb25mZmlsZSxtc2cpKQorICAgICAgICAgICAgaWYgc2VsZi5sb2NhbGNvbmZmaWxlIGFuZCAnbGFzdF9yZXZpc2lvbicgaW4gbWlzc2luZ19vcHRpb25zOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigibG9jYWwgY29uZmlndXJhdGlvbiBmaWxlICVzIG1heSBiZSBtaXNzaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGNvbWJvIGJyYW5jaCAlcyIgJSAoc2VsZi5sb2NhbGNvbmZmaWxlLCBzZWxmLmNvbWJvYnJhbmNoKSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgIyBmaWx0ZXJkaWZmIGlzIHJlcXVpcmVkIGJ5IGFjdGlvbl9zcGxpdHBhdGNoLCBzbyBjaGVjayBpdHMgYXZhaWxhYmlsaXR5CisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbCgid2hpY2ggZmlsdGVyZGlmZiA+IC9kZXYvbnVsbCAyPiYxIiwgc2hlbGw9VHJ1ZSkgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRVJST1I6IHBhdGNodXRpbHMgcGFja2FnZSBpcyBtaXNzaW5nLCBwbGVhc2UgaW5zdGFsbCBpdCAoZS5nLiAjIGFwdC1nZXQgaW5zdGFsbCBwYXRjaHV0aWxzKSIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgcnVuY21kKGNtZCxkZXN0ZGlyPU5vbmUscHJpbnRlcnI9VHJ1ZSxvdXQ9Tm9uZSk6CisgICAgIiIiCisgICAgICAgIGV4ZWN1dGUgY29tbWFuZCwgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yIGlmIGZhaWwKKyAgICAgICAgcmV0dXJuIG91dHB1dCBpZiBzdWNjZWVkCisgICAgIiIiCisgICAgbG9nZ2VyLmRlYnVnKCJydW4gY21kICclcycgaW4gJXMiICUgKGNtZCwgb3MuZ2V0Y3dkKCkgaWYgZGVzdGRpciBpcyBOb25lIGVsc2UgZGVzdGRpcikpCisgICAgaWYgbm90IG91dDoKKyAgICAgICAgb3V0ID0gb3MudG1wZmlsZSgpCisgICAgICAgIGVyciA9IG91dAorICAgIGVsc2U6CisgICAgICAgIGVyciA9IG9zLnRtcGZpbGUoKQorICAgIHRyeToKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc3Rkb3V0PW91dCwgc3RkZXJyPWVyciwgY3dkPWRlc3RkaXIsIHNoZWxsPWlzaW5zdGFuY2UoY21kLCBzdHIpKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcixlOgorICAgICAgICBlcnIuc2VlaygwKQorICAgICAgICBpZiBwcmludGVycjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMiICUgZXJyLnJlYWQoKSkKKyAgICAgICAgcmFpc2UgZQorCisgICAgZXJyLnNlZWsoMCkKKyAgICBvdXRwdXQgPSBlcnIucmVhZCgpCisgICAgbG9nZ2VyLmRlYnVnKCJvdXRwdXQ6ICVzIiAlIG91dHB1dCApCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgYWN0aW9uX2luaXQoY29uZiwgYXJncyk6CisgICAgIiIiCisgICAgICAgIENsb25lIGNvbXBvbmVudCByZXBvc2l0b3JpZXMKKyAgICAgICAgQ2hlY2sgZ2l0IGlzIGluaXRpYWxpc2VkOyBpZiBub3QsIGNvcHkgaW5pdGlhbCBkYXRhIGZyb20gY29tcG9uZW50IHJlcG9zCisgICAgIiIiCisgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgbGRpciA9IGNvbmYucmVwb3NbbmFtZV1bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxkaXIpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNsb25pbmcgJXMgdG8gJXMiICUoY29uZi5yZXBvc1tuYW1lXVsnc3JjX3VyaSddLCBsZGlyKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCgiZ2l0IGNsb25lICVzICVzIiAlIChjb25mLnJlcG9zW25hbWVdWydzcmNfdXJpJ10sIGxkaXIpLCBzaGVsbD1UcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiLmdpdCIpOgorICAgICAgICBydW5jbWQoImdpdCBpbml0IikKKyAgICAgICAgaWYgY29uZi5oaXN0b3J5OgorICAgICAgICAgICAgIyBOZWVkIGEgY29tbW9uIHJlZiBmb3IgYWxsIHRyZWVzLgorICAgICAgICAgICAgcnVuY21kKCdnaXQgY29tbWl0IC1tICJpbml0aWFsIGVtcHR5IGNvbW1pdCIgLS1hbGxvdy1lbXB0eScpCisgICAgICAgICAgICBzdGFydHJldiA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSBtYXN0ZXInKS5zdHJpcCgpCisKKyAgICAgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgICAgICBsZGlyID0gcmVwb1snbG9jYWxfcmVwb19kaXInXQorICAgICAgICAgICAgYnJhbmNoID0gcmVwby5nZXQoJ2JyYW5jaCcsICJtYXN0ZXIiKQorICAgICAgICAgICAgbGFzdHJldiA9IHJlcG8uZ2V0KCdsYXN0X3JldmlzaW9uJywgTm9uZSkKKyAgICAgICAgICAgIGlmIGxhc3RyZXYgYW5kIGxhc3RyZXYgIT0gIkhFQUQiOgorICAgICAgICAgICAgICAgIGluaXRpYWxyZXYgPSBsYXN0cmV2CisgICAgICAgICAgICAgICAgaWYgYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hlY2tfcmV2X2JyYW5jaChuYW1lLCBsZGlyLCBsYXN0cmV2LCBicmFuY2gpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29weWluZyBkYXRhIGZyb20gJXMgYXQgc3BlY2lmaWVkIHJldmlzaW9uICVzLi4uIiAlIChuYW1lLCBsYXN0cmV2KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdHJldiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpbml0aWFscmV2ID0gYnJhbmNoCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvcHlpbmcgZGF0YSBmcm9tICVzLi4uIiAlIG5hbWUpCisgICAgICAgICAgICAjIFNhbml0eSBjaGVjayBpbml0aWFscmV2IGFuZCB0dXJuIGl0IGludG8gaGFzaCAocmVxdWlyZWQgZm9yIGNvcHlpbmcgaGlzdG9yeSwKKyAgICAgICAgICAgICMgYmVjYXVzZSByZXNvbHZpbmcgYSBuYW1lIHJlZiBvbmx5IHdvcmtzIGluIHRoZSBjb21wb25lbnQgcmVwbykuCisgICAgICAgICAgICByZXYgPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgJXMnICUgaW5pdGlhbHJldiwgbGRpcikuc3RyaXAoKQorICAgICAgICAgICAgaWYgcmV2ICE9IGluaXRpYWxyZXY6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZWZzID0gcnVuY21kKCdnaXQgc2hvdy1yZWYgLXMgJXMnICUgaW5pdGlhbHJldiwgbGRpcikuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNldChyZWZzKSkgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIYXBwZW5zIGZvciBleGFtcGxlIHdoZW4gY29uZmlndXJlZCB0byB0cmFjaworICAgICAgICAgICAgICAgICAgICAgICAgIyAibWFzdGVyIiBhbmQgdGhlcmUgaXMgYSByZWZzL2hlYWRzL21hc3Rlci4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWRpdGlvbmFsIGJlaGF2aW9yIGZyb20gImdpdCBhcmNoaXZlIiAocHJlc2VydmVkCisgICAgICAgICAgICAgICAgICAgICAgICAjIGhlcmUpIGl0IHRvIGNob29zZSB0aGUgZmlyc3Qgb25lLiBUaGlzIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlbmRlZCwgc28gYXQgbGVhc3Qgd2FybiBhYm91dCBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCIlczogaW5pdGlhbCByZXZpc2lvbiAnJXMnIG5vdCB1bmlxdWUsIHBpY2tpbmcgcmVzdWx0IG9mIHJldi1wYXJzZSA9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgaW5pdGlhbHJldiwgcmVmc1swXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFscmV2ID0gcmV2CisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAjIHNob3ctcmVmIGZhaWxzIGZvciBoYXNoZXMuIFNraXAgdGhlIHNhbml0eSB3YXJuaW5nIGluIHRoYXQgY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGluaXRpYWxyZXYgPSByZXYKKyAgICAgICAgICAgIGRlc3RfZGlyID0gcmVwb1snZGVzdF9kaXInXQorICAgICAgICAgICAgaWYgZGVzdF9kaXIgIT0gIi4iOgorICAgICAgICAgICAgICAgIGV4dHJhY3RfZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBkZXN0X2RpcikKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXh0cmFjdF9kaXIpOgorICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhleHRyYWN0X2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXh0cmFjdF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgZmlsZV9maWx0ZXIgPSByZXBvLmdldCgnZmlsZV9maWx0ZXInLCAiIikKKyAgICAgICAgICAgIGV4Y2x1ZGVfcGF0dGVybnMgPSByZXBvLmdldCgnZmlsZV9leGNsdWRlJywgJycpLnNwbGl0KCkKKyAgICAgICAgICAgIGRlZiBjb3B5X3NlbGVjdGVkX2ZpbGVzKGluaXRpYWxyZXYsIGV4dHJhY3RfZGlyLCBmaWxlX2ZpbHRlciwgZXhjbHVkZV9wYXR0ZXJucywgbGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcj0iIik6CisgICAgICAgICAgICAgICAgIyBXaGVuIHdvcmtpbmcgaW5zaWRlIGEgZmlsdGVyZWQgYnJhbmNoIHdoaWNoIGhhZCB0aGUKKyAgICAgICAgICAgICAgICAjIGZpbGVzIGFscmVhZHkgbW92ZWQsIHdlIG5lZWQgdG8gcHJlcGVuZCB0aGUKKyAgICAgICAgICAgICAgICAjIHN1YmRpcmVjdG9yeSB0byBhbGwgZmlsdGVycywgb3RoZXJ3aXNlIHRoZXkgd291bGQKKyAgICAgICAgICAgICAgICAjIG5vdCBtYXRjaC4KKyAgICAgICAgICAgICAgICBpZiBzdWJkaXIgPT0gJy4nOgorICAgICAgICAgICAgICAgICAgICBzdWJkaXIgPSAnJworICAgICAgICAgICAgICAgIGVsaWYgc3ViZGlyOgorICAgICAgICAgICAgICAgICAgICBzdWJkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHN1YmRpcikKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9maWx0ZXIgPSAnICcuam9pbihbc3ViZGlyICsgJy8nICsgeCBmb3IgeCBpbiBmaWxlX2ZpbHRlci5zcGxpdCgpXSkKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9wYXR0ZXJucyA9IFtzdWJkaXIgKyAnLycgKyB4IGZvciB4IGluIGV4Y2x1ZGVfcGF0dGVybnNdCisgICAgICAgICAgICAgICAgIyBUbyBoYW5kbGUgYm90aCBjYXNlcywgd2UgY2QgaW50byB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkgYW5kIG9wdGlvbmFsbHkgdGVsbCB0YXIgdG8gc3RyaXAgdGhlIHBhdGgKKyAgICAgICAgICAgICAgICAjIHByZWZpeCB3aGVuIHRoZSBmaWxlcyB3ZXJlIGFscmVhZHkgbW92ZWQuCisgICAgICAgICAgICAgICAgc3ViZGlyX2NvbXBvbmVudHMgPSBsZW4oc3ViZGlyLnNwbGl0KG9zLnBhdGguc2VwKSkgaWYgc3ViZGlyIGVsc2UgMAorICAgICAgICAgICAgICAgIHN0cmlwPSgnLS1zdHJpcC1jb21wb25lbnRzPSVkJyAlIHN1YmRpcl9jb21wb25lbnRzKSBpZiBzdWJkaXIgZWxzZSAnJworICAgICAgICAgICAgICAgICMgVE9ETzogZmlsZV9maWx0ZXIgd2lsZCBjYXJkcyBkbyBub3Qgd29yayAoYW5kIGhhdmVuJ3Qgd29ya2VkIGJlZm9yZSBlaXRoZXIpLCBiZWNhdXNlCisgICAgICAgICAgICAgICAgIyBhKSBHTlUgdGFyIHJlcXVpcmVzIGEgLS13aWxkY2FyZHMgcGFyYW1ldGVyIGJlZm9yZSB0dXJuaW5nIG9uIHdpbGQgY2FyZCBtYXRjaGluZy4KKyAgICAgICAgICAgICAgICAjIGIpIFRoZSBzZW1hbnRpYyBpcyBub3QgYXMgaW50ZW5kZW5kIChzcmMvKi5jIGFsc28gbWF0Y2hlcyBzcmMvZm9vL2Jhci5jLAorICAgICAgICAgICAgICAgICMgICAgaW4gY29udHJhc3QgdG8gdGhlIG90aGVyIHVzZSBvZiBmaWxlX2ZpbHRlciBhcyBwYXJhbWV0ZXIgb2YgImdpdCBhcmNoaXZlIgorICAgICAgICAgICAgICAgICMgICAgd2hlcmUgaXQgb25seSBtYXRjaGVzIC5jIGZpbGVzIGRpcmVjdGx5IGluIHNyYykuCisgICAgICAgICAgICAgICAgZmlsZXMgPSBydW5jbWQoImdpdCBhcmNoaXZlICVzICVzIHwgdGFyIC14IC12ICVzIC1DICVzICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxyZXYsIHN1YmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAsIGV4dHJhY3RfZGlyLCBmaWxlX2ZpbHRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGRpcikKKyAgICAgICAgICAgICAgICBpZiBleGNsdWRlX3BhdHRlcm5zOgorICAgICAgICAgICAgICAgICAgICAjIEltcGxlbWVudCBmaWxlIHJlbW92YWwgYnkgbGV0dGluZyB0YXIgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGZpbGUgYW5kIHRoZW4gZGVsZXRpbmcgaXQgaW4gdGhlIGZpbGUgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICMgYWdhaW4uIFVzZXMgdGhlIGxpc3Qgb2YgZmlsZXMgY3JlYXRlZCBieSB0YXIgKGVhc2llcgorICAgICAgICAgICAgICAgICAgICAjIHRoYW4gd2Fsa2luZyB0aGUgdHJlZSkuCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gZXhjbHVkZV9wYXR0ZXJuczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZSwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oKihbZXh0cmFjdF9kaXJdICsgWycuLiddICogc3ViZGlyX2NvbXBvbmVudHMgKyBbZmlsZV0pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IGNvbmYuaGlzdG9yeToKKyAgICAgICAgICAgICAgICBjb3B5X3NlbGVjdGVkX2ZpbGVzKGluaXRpYWxyZXYsIGV4dHJhY3RfZGlyLCBmaWxlX2ZpbHRlciwgZXhjbHVkZV9wYXR0ZXJucywgbGRpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBGaXJzdCBmZXRjaCByZW1vdGUgaGlzdG9yeSBpbnRvIGxvY2FsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgIyBXZSBuZWVkIGEgcmVmIGZvciB0aGF0LCBzbyBlbnN1cmUgdGhhdCB0aGVyZSBpcyBvbmUuCisgICAgICAgICAgICAgICAgcmVmbmFtZSA9ICJjb21iby1sYXllci1pbml0LSVzIiAlIG5hbWUKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBicmFuY2ggLWYgJXMgJXMiICUgKHJlZm5hbWUsIGluaXRpYWxyZXYpLCBsZGlyKQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGZldGNoICVzICVzIiAlIChsZGlyLCByZWZuYW1lKSkKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBicmFuY2ggLUQgJXMiICUgcmVmbmFtZSwgbGRpcikKKyAgICAgICAgICAgICAgICAjIE1ha2UgdGhhdCB0aGUgaGVhZCByZXZpc2lvbi4KKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBjaGVja291dCAtYiAlcyAlcyIgJSAobmFtZSwgaW5pdGlhbHJldikpCisgICAgICAgICAgICAgICAgIyBPcHRpb25hbDogY3V0IHRoZSBoaXN0b3J5IGJ5IHJlcGxhY2luZyB0aGUgZ2l2ZW4KKyAgICAgICAgICAgICAgICAjIHN0YXJ0IHBvaW50KHMpIHdpdGggY29tbWl0cyBwcm92aWRpbmcgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAjIGNvbnRlbnQgKGFrYSB0cmVlKSwgYnV0IHdpdGggY29tbWl0IGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgICAgICAgICAjIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhpcyBpcyBhbiBhcnRpZmljYWxseSBjcmVhdGVkCisgICAgICAgICAgICAgICAgIyBjb21taXQgYW5kIG5vdGhpbmcgdGhlIG9yaWdpbmFsIGF1dGhvcnMgaGFkIGFueXRoaW5nCisgICAgICAgICAgICAgICAgIyB0byBkbyB3aXRoLgorICAgICAgICAgICAgICAgIHNpbmNlX3JldiA9IHJlcG8uZ2V0KCdzaW5jZV9yZXZpc2lvbicsICcnKQorICAgICAgICAgICAgICAgIGlmIHNpbmNlX3JldjoKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0dGVyID0gcnVuY21kKCdnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQnKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICMgU2FtZSB0aW1lIHN0YW1wLCBubyBuYW1lLgorICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSByZS5zdWIoJy4qIChcZCsgWystXVxkKyknLCByJ3Vua25vd24gPHVua25vd24+IFwxJywgY29tbWl0dGVyKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnYXV0aG9yICVzJyAlIGF1dGhvcikKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJldiBpbiBzaW5jZV9yZXYuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVzb2x2ZSBpbiBjb21wb25lbnQgcmVwby4uLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV2ID0gcnVuY21kKCdnaXQgbG9nIC0tb25lbGluZSAtLW5vLWFiYnJldi1jb21taXQgLW4xICVzJyAlIHJldiwgbGRpcikuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgIyAuLi4gYW5kIHRoZW4gZ2V0IHRoZSB0cmVlIGluIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgb25lLiBUaGUgY29tbWl0IHNob3VsZCBiZSBpbiBib3RoIHJlcG9zIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHNhbWUgdHJlZSwgYnV0IGJldHRlciBjaGVjayBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSA9IHJ1bmNtZCgnZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiUlVCAlcycgJSByZXYpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZWRpdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci53cml0ZSgnJydjYXQgPiQxIDw8RU9GCit0cmVlICVzCithdXRob3IgJXMKK2NvbW1pdHRlciAlcworCislczogc3F1YXNoZWQgaW1wb3J0IG9mIGNvbXBvbmVudAorCitUaGlzIGNvbW1pdCBjb3BpZXMgdGhlIGVudGlyZSBzZXQgb2YgZmlsZXMgYXMgZm91bmQgaW4KKyVzICVzCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHByZXZpb3VzIGNvbW1pdHMsIHNlZSB0aGUKK3Vwc3RyZWFtIHJlcG9zaXRvcnkuCisKK0NvbW1pdCBjcmVhdGVkIGJ5IGNvbWJvLWxheWVyLgorRU9GCisnJycgJSAodHJlZSwgYXV0aG9yLCBjb21taXR0ZXIsIG5hbWUsIG5hbWUsIHNpbmNlX3JldikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydHSVRfRURJVE9SJ10gPSAnc2ggJXMnICUgZWRpdG9yLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCByZXBsYWNlIC0tZWRpdCAlcycgJSByZXYpCisKKyAgICAgICAgICAgICAgICAjIE9wdGlvbmFsOiByZXdyaXRlIGhpc3RvcnkgdG8gY2hhbmdlIGNvbW1pdCBtZXNzYWdlcyBvciB0byBtb3ZlIGZpbGVzLgorICAgICAgICAgICAgICAgIGlmICdob29rJyBpbiByZXBvIG9yIGRlc3RfZGlyICE9ICIuIjoKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2JyYW5jaCA9IFsnZ2l0JywgJ2ZpbHRlci1icmFuY2gnLCAnLS1mb3JjZSddCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgaG9va3dyYXBwZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnaG9vaycgaW4gcmVwbzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIHNoZWxsIHNjcmlwdCB3cmFwcGVyIGFyb3VuZCB0aGUgb3JpZ2luYWwgaG9vayB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW4gYmUgdXNlZCBieSBnaXQgZmlsdGVyLWJyYW5jaC4gSG9vayBtYXkgb3IgbWF5IG5vdCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbiBhYnNvbHV0ZSBwYXRoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2sgPSByZXBvWydob29rJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShjb25mLmNvbmZmaWxlKSwgJy4uJywgaG9vaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSB3cmFwcGVycyB0dXJucyB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZyb20gc3RkaW4gaW50byBhIGZha2UgcGF0Y2ggaGVhZGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBnb29kIGVub3VnaCBmb3IgY2hhbmdpbmcgU3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGNvbW1pdCBtc2cgYm9keSB3aXRoIG5vcm1hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29tYm8tbGF5ZXIgaG9va3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3dyYXBwZXIud3JpdGUoJycnc2V0IC1lCit0bXBuYW1lPSQobWt0ZW1wKQordHJhcCAicm0gJHRtcG5hbWUiIEVYSVQKK2VjaG8gLW4gJ1N1YmplY3Q6IFtQQVRDSF0gJyA+PiR0bXBuYW1lCitjYXQgPj4kdG1wbmFtZQoraWYgISBbICQodGFpbCAtYyAxICR0bXBuYW1lIHwgb2QgLUEgbiAtdCB4MSkgPT0gJzBhJyBdOyB0aGVuCisgICAgZWNobyA+PiR0bXBuYW1lCitmaQorZWNobyAnLS0tJyA+PiR0bXBuYW1lCislcyAkdG1wbmFtZSAkR0lUX0NPTU1JVCAlcwordGFpbCAtYyArMTggJHRtcG5hbWUgfCBoZWFkIC1jIC00CisnJycgJSAoaG9vaywgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3dyYXBwZXIuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9icmFuY2guZXh0ZW5kKFsnLS1tc2ctZmlsdGVyJywgJ2Jhc2ggJXMnICUgaG9va3dyYXBwZXIubmFtZV0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKGRlc3RfZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9ICcuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF5IHJ1biBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgc28gZG8gbm90IGFzc3VtZSB0aGF0IC5naXQgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9icmFuY2guZXh0ZW5kKFsnLS10cmVlLWZpbHRlcicsICdta2RpciAtcCAuZ2l0L3RtcHRyZWUgJiYgbXYgJChscyAtMSAtYSB8IGdyZXAgLXYgLWUgXi5naXQkIC1lIF4uJCAtZSBeLi4kKSAuZ2l0L3RtcHRyZWUgJiYgbWtkaXIgLXAgJXMgJiYgbXYgLmdpdC90bXB0cmVlICVzJyAlIChwYXJlbnQsIGRlc3RfZGlyKV0pCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYnJhbmNoLmFwcGVuZCgnSEVBRCcpCisgICAgICAgICAgICAgICAgICAgICAgICBydW5jbWQoZmlsdGVyX2JyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9vcmlnaW5hbC9yZWZzL2hlYWRzLyVzJyAlIG5hbWUpCisgICAgICAgICAgICAgICAgcmVwb1sncmV3cml0dGVuX3JldmlzaW9uJ10gPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZXBvWydzdHJpcHBlZF9yZXZpc2lvbiddID0gcmVwb1sncmV3cml0dGVuX3JldmlzaW9uJ10KKyAgICAgICAgICAgICAgICAjIE9wdGlvbmFsIGZpbHRlciBmaWxlczogcmVtb3ZlIGV2ZXJ5dGhpbmcgYW5kIHJlLXBvcHVsYXRlIHVzaW5nIHRoZSBub3JtYWwgZmlsdGVyaW5nIGNvZGUuCisgICAgICAgICAgICAgICAgIyBPdmVycmlkZSBhbnkgcG90ZW50aWFsIC5naXRpZ25vcmUuCisgICAgICAgICAgICAgICAgaWYgZmlsZV9maWx0ZXIgb3IgZXhjbHVkZV9wYXR0ZXJuczoKKyAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgcm0gLXJmIC4nKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXh0cmFjdF9kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZXh0cmFjdF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGNvcHlfc2VsZWN0ZWRfZmlsZXMoJ0hFQUQnLCBleHRyYWN0X2RpciwgZmlsZV9maWx0ZXIsIGV4Y2x1ZGVfcGF0dGVybnMsICcuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXI9ZGVzdF9kaXIpCisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGFkZCAtLWFsbCAtLWZvcmNlIC4nKQorICAgICAgICAgICAgICAgICAgICBpZiBydW5jbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU29tZXRoaW5nIHRvIGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChbJ2dpdCcsICdjb21taXQnLCAnLW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyclczogc2VsZWN0IGZpbGUgc3Vic2V0CisKK0ZpbGVzIGZyb20gdGhlIGNvbXBvbmVudCByZXBvc2l0b3J5IHdlcmUgY2hvc2VuIGJhc2VkIG9uCit0aGUgZm9sbG93aW5nIGZpbHRlcnM6CitmaWxlX2ZpbHRlciA9ICVzCitmaWxlX2V4Y2x1ZGUgPSAlcycnJyAlIChuYW1lLCBmaWxlX2ZpbHRlciBvciAnPGVtcHR5PicsIHJlcG8uZ2V0KCdmaWxlX2V4Y2x1ZGUnLCAnPGVtcHR5PicpKV0pCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvWydzdHJpcHBlZF9yZXZpc2lvbiddID0gcnVuY21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnKS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIG5vdCBsYXN0cmV2OgorICAgICAgICAgICAgICAgIGxhc3RyZXYgPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgJXMnICUgaW5pdGlhbHJldiwgbGRpcikuc3RyaXAoKQorICAgICAgICAgICAgICAgIGNvbmYudXBkYXRlKG5hbWUsICJsYXN0X3JldmlzaW9uIiwgbGFzdHJldiwgaW5pdG1vZGU9VHJ1ZSkKKworICAgICAgICBpZiBub3QgY29uZi5oaXN0b3J5OgorICAgICAgICAgICAgcnVuY21kKCJnaXQgYWRkIC4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBDcmVhdGUgT2N0b3B1cyBtZXJnZSBjb21taXQgYWNjb3JkaW5nIHRvIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA4NzQxNDkvZ2l0LW9jdG9wdXMtbWVyZ2Utd2l0aC11bnJlbGF0ZWQtcmVwb3NpdG9pZXMKKyAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGNoZWNrb3V0IG1hc3RlcicpCisgICAgICAgICAgICBtZXJnZSA9IFsnZ2l0JywgJ21lcmdlJywgJy0tbm8tY29tbWl0J10KKyAgICAgICAgICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgICAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgICAgICAgICAjIFVzZSBicmFuY2ggY3JlYXRlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIG1lcmdlLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgICAgICMgUm9vdCBhbGwgY29tbWl0cyB3aGljaCBoYXZlIG5vIHBhcmVudCBpbiB0aGUgY29tbW9uCisgICAgICAgICAgICAgICAgIyBhbmNlc3RvciBpbiB0aGUgbmV3IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgZm9yIHN0YXJ0IGluIHJ1bmNtZCgnZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JSVIIC0tbWF4LXBhcmVudHM9MCAlcycgJSBuYW1lKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgcmVwbGFjZSAtLWdyYWZ0ICVzICVzJyAlIChzdGFydCwgc3RhcnRyZXYpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmNtZChtZXJnZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCcnJ01lcmdpbmcgY29tcG9uZW50IHJlcG9zaXRvcnkgaGlzdG9yeSBmYWlsZWQsIHBlcmhhcHMgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdHMuCitJdCBtYXkgYmUgcG9zc2libGUgdG8gY29tbWl0IGFueXdheSBhZnRlciByZXNvbHZpbmcgdGhlc2UgY29uZmxpY3RzLgorCislcycnJyAlIGVycm9yKQorICAgICAgICAgICAgIyBDcmVhdGUgTUVSR0VfSEVBRCBhbmQgTUVSR0VfTVNHLiAiZ2l0IG1lcmdlIiBpdHNlbGYKKyAgICAgICAgICAgICMgZG9lcyBub3QgY3JlYXRlIE1FUkdFX0hFQUQgaW4gY2FzZSBvZiBhIChoYXJtbGVzcykgZmFpbHVyZSwKKyAgICAgICAgICAgICMgYW5kIHdlIHdhbnQgY2VydGFpbiBhdXRvLWdlbmVyYXRlZCBpbmZvcm1hdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICMgY29tbWl0IG1lc3NhZ2UgZm9yIGZ1dHVyZSByZWZlcmVuY2UgYW5kL29yIGF1dG9tYXRpb24uCisgICAgICAgICAgICB3aXRoIG9wZW4oJy5naXQvTUVSR0VfSEVBRCcsICd3JykgYXMgaGVhZDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oJy5naXQvTUVSR0VfTVNHJywgJ3cnKSBhcyBtc2c6CisgICAgICAgICAgICAgICAgICAgIG1zZy53cml0ZSgncmVwbzogaW5pdGlhbCBpbXBvcnQgb2YgY29tcG9uZW50c1xuXG4nKQorICAgICAgICAgICAgICAgICAgICAjIGhlYWQud3JpdGUoJyVzXG4nICUgc3RhcnRyZXYpCisgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgIyA8dXBzdHJlYW0gcmVmPiA8cmV3cml0dGVuIHJlZj4gPHJld3JpdHRlbiArIGZpbGVzIHJlbW92ZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cud3JpdGUoJ2NvbWJvLWxheWVyLSVzOiAlcyAlcyAlc1xuJyAlIChuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb1snbGFzdF9yZXZpc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb1sncmV3cml0dGVuX3JldmlzaW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvWydzdHJpcHBlZF9yZXZpc2lvbiddKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldiA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSAlcycgJSBuYW1lKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkLndyaXRlKCclc1xuJyAlIHJldikKKworICAgICAgICBpZiBjb25mLmxvY2FsY29uZmZpbGU6CisgICAgICAgICAgICBsb2NhbGFkZGVkID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IHJtIC0tY2FjaGVkICVzIiAlIGNvbmYubG9jYWxjb25mZmlsZSwgcHJpbnRlcnI9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgbG9jYWxhZGRlZCA9IEZhbHNlCisgICAgICAgICAgICBpZiBsb2NhbGFkZGVkOgorICAgICAgICAgICAgICAgIGxvY2FscmVscGF0aCA9IG9zLnBhdGgucmVscGF0aChjb25mLmxvY2FsY29uZmZpbGUpCisgICAgICAgICAgICAgICAgcnVuY21kKCJncmVwIC1xICVzIC5naXRpZ25vcmUgfHwgZWNobyAlcyA+PiAuZ2l0aWdub3JlIiAlIChsb2NhbHJlbHBhdGgsIGxvY2FscmVscGF0aCkpCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgYWRkIC5naXRpZ25vcmUiKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBZGRlZCBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUgJXMgdG8gLmdpdGlnbm9yZSIsIGxvY2FscmVscGF0aCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIkluaXRpYWwgY29tYm8gbGF5ZXIgcmVwb3NpdG9yeSBkYXRhIGhhcyBiZWVuIGNyZWF0ZWQ7IHBsZWFzZSBtYWtlIGFueSBjaGFuZ2VzIGlmIGRlc2lyZWQgYW5kIHRoZW4gdXNlICdnaXQgY29tbWl0JyB0byBtYWtlIHRoZSBpbml0aWFsIGNvbW1pdC4iKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5pbmZvKCJSZXBvc2l0b3J5IGFscmVhZHkgaW5pdGlhbGlzZWQsIG5vdGhpbmcgdG8gZG8uIikKKworCitkZWYgY2hlY2tfcmVwb19jbGVhbihyZXBvZGlyKToKKyAgICAiIiIKKyAgICAgICAgY2hlY2sgaWYgdGhlIHJlcG8gaXMgY2xlYW4KKyAgICAgICAgZXhpdCBpZiByZXBvIGlzIGRpcnR5CisgICAgIiIiCisgICAgb3V0cHV0PXJ1bmNtZCgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiIsIHJlcG9kaXIpCisgICAgciA9IHJlLmNvbXBpbGUoJ1w/XD8gcGF0Y2gtLiovJykKKyAgICBkaXJ0eW91dCA9IFtpdGVtIGZvciBpdGVtIGluIG91dHB1dC5zcGxpdGxpbmVzKCkgaWYgbm90IHIubWF0Y2goaXRlbSldCisgICAgaWYgZGlydHlvdXQ6CisgICAgICAgIGxvZ2dlci5lcnJvcigiZ2l0IHJlcG8gJXMgaXMgZGlydHksIHBsZWFzZSBmaXggaXQgZmlyc3QiLCByZXBvZGlyKQorICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgY2hlY2tfcGF0Y2gocGF0Y2hmaWxlKToKKyAgICBmID0gb3BlbihwYXRjaGZpbGUpCisgICAgbG4gPSBmLnJlYWRsaW5lKCkKKyAgICBvZiA9IE5vbmUKKyAgICBpbl9wYXRjaCA9IEZhbHNlCisgICAgYmV5b25kX21zZyA9IEZhbHNlCisgICAgcHJlX2J1ZiA9ICcnCisgICAgd2hpbGUgbG46CisgICAgICAgIGlmIG5vdCBiZXlvbmRfbXNnOgorICAgICAgICAgICAgaWYgbG4gPT0gJy0tLVxuJzoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2Y6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaW5fcGF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgIGJleW9uZF9tc2cgPSBUcnVlCisgICAgICAgICAgICBlbGlmIGxuLnN0YXJ0c3dpdGgoJy0tLSAnKToKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSBkaWZmIGluIHRoZSBjb21taXQgbWVzc2FnZQorICAgICAgICAgICAgICAgIGluX3BhdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBvZjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1dBUk5JTkc6ICVzIGNvbnRhaW5zIGEgZGlmZiBpbiBpdHMgY29tbWl0IG1lc3NhZ2UsIGluZGVudGluZyB0byBhdm9pZCBmYWlsdXJlIGR1cmluZyBhcHBseScgJSBwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIG9mID0gb3BlbihwYXRjaGZpbGUgKyAnLnRtcCcsICd3JykKKyAgICAgICAgICAgICAgICAgICAgb2Yud3JpdGUocHJlX2J1ZikKKyAgICAgICAgICAgICAgICAgICAgcHJlX2J1ZiA9ICcnCisgICAgICAgICAgICBlbGlmIGluX3BhdGNoIGFuZCBub3QgbG5bMF0gaW4gJystQCBcblxyJzoKKyAgICAgICAgICAgICAgICBpbl9wYXRjaCA9IEZhbHNlCisgICAgICAgIGlmIG9mOgorICAgICAgICAgICAgaWYgaW5fcGF0Y2g6CisgICAgICAgICAgICAgICAgb2Yud3JpdGUoJyAnICsgbG4pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9mLndyaXRlKGxuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlX2J1ZiArPSBsbgorICAgICAgICBsbiA9IGYucmVhZGxpbmUoKQorICAgIGYuY2xvc2UoKQorICAgIGlmIG9mOgorICAgICAgICBvZi5jbG9zZSgpCisgICAgICAgIG9zLnJlbmFtZShwYXRjaGZpbGUgKyAnLnRtcCcsIHBhdGNoZmlsZSkKKworZGVmIGRyb3BfdG9fc2hlbGwod29ya2Rpcj1Ob25lKToKKyAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpOgorICAgICAgICBwcmludCAiTm90IGEgVFRZIHNvIGNhbid0IGRyb3AgdG8gc2hlbGwgZm9yIHJlc29sdXRpb24sIGV4aXRpbmcuIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNoZWxsID0gb3MuZW52aXJvbi5nZXQoJ1NIRUxMJywgJ2Jhc2gnKQorICAgIHByaW50KCdEcm9wcGluZyB0byBzaGVsbCAiJXMiXG4nIFwKKyAgICAgICAgICAnV2hlbiB5b3UgYXJlIGZpbmlzaGVkLCBydW4gdGhlIGZvbGxvd2luZyB0byBjb250aW51ZTpcbicgXAorICAgICAgICAgICcgICAgICAgZXhpdCAgICAtLSBjb250aW51ZSB0byBhcHBseSB0aGUgcGF0Y2hlc1xuJyBcCisgICAgICAgICAgJyAgICAgICBleGl0IDEgIC0tIGFib3J0XG4nICUgc2hlbGwpOworICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChbc2hlbGxdLCBjd2Q9d29ya2RpcikKKyAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgcHJpbnQgIkFib3J0aW5nIgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2hlY2tfcmV2X2JyYW5jaChjb21wb25lbnQsIHJlcG9kaXIsIHJldiwgYnJhbmNoKToKKyAgICB0cnk6CisgICAgICAgIGFjdHVhbGJyYW5jaCA9IHJ1bmNtZCgiZ2l0IGJyYW5jaCAtLWNvbnRhaW5zICVzIiAlIHJldiwgcmVwb2RpciwgcHJpbnRlcnI9RmFsc2UpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUucmV0dXJuY29kZSA9PSAxMjk6CisgICAgICAgICAgICBhY3R1YWxicmFuY2ggPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworICAgIGlmIG5vdCBhY3R1YWxicmFuY2g6CisgICAgICAgIGxvZ2dlci5lcnJvcigiJXM6IHNwZWNpZmllZCByZXZpc2lvbiAlcyBpcyBpbnZhbGlkISIgJSAoY29tcG9uZW50LCByZXYpKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGJyYW5jaGVzID0gW10KKyAgICBicmFuY2hsaXN0ID0gYWN0dWFsYnJhbmNoLnNwbGl0KCJcbiIpCisgICAgZm9yIGIgaW4gYnJhbmNobGlzdDoKKyAgICAgICAgYnJhbmNoZXMuYXBwZW5kKGIuc3RyaXAoKS5zcGxpdCgnICcpWy0xXSkKKworICAgIGlmIGJyYW5jaCBub3QgaW4gYnJhbmNoZXM6CisgICAgICAgIGxvZ2dlci5lcnJvcigiJXM6IHNwZWNpZmllZCByZXZpc2lvbiAlcyBpcyBub3Qgb24gc3BlY2lmaWVkIGJyYW5jaCAlcyEiICUgKGNvbXBvbmVudCwgcmV2LCBicmFuY2gpKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgZ2V0X3JlcG9zKGNvbmYsIHJlcG9fbmFtZXMpOgorICAgIHJlcG9zID0gW10KKyAgICBmb3IgbmFtZSBpbiByZXBvX25hbWVzOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXBvcy5hcHBlbmQobmFtZSkKKyAgICBmb3IgcmVwbyBpbiByZXBvczoKKyAgICAgICAgaWYgbm90IHJlcG8gaW4gY29uZi5yZXBvczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiU3BlY2lmaWVkIGNvbXBvbmVudCAnJXMnIG5vdCBmb3VuZCBpbiBjb25maWd1cmF0aW9uIiAlIHJlcG8pCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IHJlcG9zOgorICAgICAgICByZXBvcyA9IGNvbmYucmVwb3MKKworICAgIHJldHVybiByZXBvcworCitkZWYgYWN0aW9uX3B1bGwoY29uZiwgYXJncyk6CisgICAgIiIiCisgICAgICAgIHVwZGF0ZSB0aGUgY29tcG9uZW50IHJlcG9zIG9ubHkKKyAgICAiIiIKKyAgICByZXBvcyA9IGdldF9yZXBvcyhjb25mLCBhcmdzWzE6XSkKKworICAgICMgbWFrZSBzdXJlIGFsbCByZXBvcyBhcmUgY2xlYW4KKyAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgY2hlY2tfcmVwb19jbGVhbihjb25mLnJlcG9zW25hbWVdWydsb2NhbF9yZXBvX2RpciddKQorCisgICAgZm9yIG5hbWUgaW4gcmVwb3M6CisgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgIGxkaXIgPSByZXBvWydsb2NhbF9yZXBvX2RpciddCisgICAgICAgIGJyYW5jaCA9IHJlcG8uZ2V0KCdicmFuY2gnLCAibWFzdGVyIikKKyAgICAgICAgbG9nZ2VyLmluZm8oInVwZGF0ZSBicmFuY2ggJXMgb2YgY29tcG9uZW50IHJlcG8gJXMgaW4gJXMgLi4uIiAlIChicmFuY2gsIG5hbWUsIGxkaXIpKQorICAgICAgICBpZiBub3QgY29uZi5oYXJkX3Jlc2V0OgorICAgICAgICAgICAgIyBUcnkgdG8gcHVsbCBvbmx5IHRoZSBjb25maWd1cmVkIGJyYW5jaC4gQmV3YXJlIHRoYXQgdGhpcyBtYXkgZmFpbAorICAgICAgICAgICAgIyB3aGVuIHRoZSBicmFuY2ggaXMgY3VycmVudGx5IHVua25vd24gKGZvciBleGFtcGxlLCBhZnRlciByZWNvbmZpZ3VyaW5nCisgICAgICAgICAgICAjIGNvbWJvLWxheWVyKS4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gZmV0Y2ggZXZlcnl0aGluZyBhbmQgdHJ5IHRoZSBjaGVjayBvdXQKKyAgICAgICAgICAgICMgYW5kIHB1bGwgYWdhaW4uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgY2hlY2tvdXQgJXMiICUgYnJhbmNoLCBsZGlyLCBwcmludGVycj1GYWxzZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICBvdXRwdXQ9cnVuY21kKCJnaXQgZmV0Y2giLCBsZGlyKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKG91dHB1dCkKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBjaGVja291dCAlcyIgJSBicmFuY2gsIGxkaXIpCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgcHVsbCAtLWZmLW9ubHkiLCBsZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQ9cnVuY21kKCJnaXQgcHVsbCAtLWZmLW9ubHkiLCBsZGlyKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKG91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dD1ydW5jbWQoImdpdCBmZXRjaCIsIGxkaXIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhvdXRwdXQpCisgICAgICAgICAgICBydW5jbWQoImdpdCBjaGVja291dCAlcyIgJSBicmFuY2gsIGxkaXIpCisgICAgICAgICAgICBydW5jbWQoImdpdCByZXNldCAtLWhhcmQgRkVUQ0hfSEVBRCIsIGxkaXIpCisKK2RlZiBhY3Rpb25fdXBkYXRlKGNvbmYsIGFyZ3MpOgorICAgICIiIgorICAgICAgICB1cGRhdGUgdGhlIGNvbXBvbmVudCByZXBvcworICAgICAgICBnZW5lcmF0ZSB0aGUgcGF0Y2ggbGlzdAorICAgICAgICBhcHBseSB0aGUgZ2VuZXJhdGVkIHBhdGNoZXMKKyAgICAiIiIKKyAgICBjb21wb25lbnRzID0gW2FyZy5zcGxpdCgnOicpWzBdIGZvciBhcmcgaW4gYXJnc1sxOl1dCisgICAgcmV2aXNpb25zID0ge30KKyAgICBmb3IgYXJnIGluIGFyZ3NbMTpdOgorICAgICAgICBpZiAnOicgaW4gYXJnOgorICAgICAgICAgICAgYSA9IGFyZy5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICByZXZpc2lvbnNbYVswXV0gPSBhWzFdCisgICAgcmVwb3MgPSBnZXRfcmVwb3MoY29uZiwgY29tcG9uZW50cykKKworICAgICMgbWFrZSBzdXJlIGNvbWJvIHJlcG8gaXMgY2xlYW4KKyAgICBjaGVja19yZXBvX2NsZWFuKG9zLmdldGN3ZCgpKQorCisgICAgaW1wb3J0IHV1aWQKKyAgICBwYXRjaF9kaXIgPSAicGF0Y2gtJXMiICUgdXVpZC51dWlkNCgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGNoX2Rpcik6CisgICAgICAgIG9zLm1rZGlyKHBhdGNoX2RpcikKKworICAgICMgU3RlcCAxOiB1cGRhdGUgdGhlIGNvbXBvbmVudCByZXBvcworICAgIGlmIGNvbmYubm9wdWxsOgorICAgICAgICBsb2dnZXIuaW5mbygiU2tpcHBpbmcgcHVsbCAoLW4pIikKKyAgICBlbHNlOgorICAgICAgICBhY3Rpb25fcHVsbChjb25mLCBbJ2FyZzAnXSArIGNvbXBvbmVudHMpCisKKyAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgcmV2aXNpb24gPSByZXZpc2lvbnMuZ2V0KG5hbWUsIE5vbmUpCisgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgIGxkaXIgPSByZXBvWydsb2NhbF9yZXBvX2RpciddCisgICAgICAgIGRlc3RfZGlyID0gcmVwb1snZGVzdF9kaXInXQorICAgICAgICBicmFuY2ggPSByZXBvLmdldCgnYnJhbmNoJywgIm1hc3RlciIpCisgICAgICAgIHJlcG9fcGF0Y2hfZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBwYXRjaF9kaXIsIG5hbWUpCisKKyAgICAgICAgIyBTdGVwIDI6IGdlbmVyYXRlIHRoZSBwYXRjaCBsaXN0IGFuZCBzdG9yZSB0byBwYXRjaCBkaXIKKyAgICAgICAgbG9nZ2VyLmluZm8oIkdlbmVyYXRpbmcgcGF0Y2hlcyBmcm9tICVzLi4uIiAlIG5hbWUpCisgICAgICAgIHRvcF9yZXZpc2lvbiA9IHJldmlzaW9uIG9yIGJyYW5jaAorICAgICAgICBpZiBub3QgY2hlY2tfcmV2X2JyYW5jaChuYW1lLCBsZGlyLCB0b3BfcmV2aXNpb24sIGJyYW5jaCk6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICBwcmVmaXggPSAiLS1zcmMtcHJlZml4PWEvJXMvIC0tZHN0LXByZWZpeD1iLyVzLyIgJSAoZGVzdF9kaXIsIGRlc3RfZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gIiIKKyAgICAgICAgaWYgcmVwb1snbGFzdF9yZXZpc2lvbiddID09ICIiOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldhcm5pbmc6IGxhc3RfcmV2aXNpb24gb2YgY29tcG9uZW50ICVzIGlzIG5vdCBzZXQsIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGNvbW1pdCIgJSBuYW1lKQorICAgICAgICAgICAgcGF0Y2hfY21kX3JhbmdlID0gIi0tcm9vdCAlcyIgJSB0b3BfcmV2aXNpb24KKyAgICAgICAgICAgIHJldl9jbWRfcmFuZ2UgPSB0b3BfcmV2aXNpb24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBjaGVja19yZXZfYnJhbmNoKG5hbWUsIGxkaXIsIHJlcG9bJ2xhc3RfcmV2aXNpb24nXSwgYnJhbmNoKToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgcGF0Y2hfY21kX3JhbmdlID0gIiVzLi4lcyIgJSAocmVwb1snbGFzdF9yZXZpc2lvbiddLCB0b3BfcmV2aXNpb24pCisgICAgICAgICAgICByZXZfY21kX3JhbmdlID0gcGF0Y2hfY21kX3JhbmdlCisKKyAgICAgICAgZmlsZV9maWx0ZXIgPSByZXBvLmdldCgnZmlsZV9maWx0ZXInLCIiKQorCisgICAgICAgIHBhdGNoX2NtZCA9ICJnaXQgZm9ybWF0LXBhdGNoIC1OICVzIC0tb3V0cHV0LWRpcmVjdG9yeSAlcyAlcyAtLSAlcyIgJSBcCisgICAgICAgICAgICAocHJlZml4LHJlcG9fcGF0Y2hfZGlyLCBwYXRjaF9jbWRfcmFuZ2UsIGZpbGVfZmlsdGVyKQorICAgICAgICBvdXRwdXQgPSBydW5jbWQocGF0Y2hfY21kLCBsZGlyKQorICAgICAgICBsb2dnZXIuZGVidWcoImdlbmVyYXRlZCBwYXRjaCBzZXQ6XG4lcyIgJSBvdXRwdXQpCisgICAgICAgIHBhdGNobGlzdCA9IG91dHB1dC5zcGxpdGxpbmVzKCkKKworICAgICAgICByZXZfY21kID0gImdpdCByZXYtbGlzdCAtLW5vLW1lcmdlcyAlcyAtLSAlcyIgJSAocmV2X2NtZF9yYW5nZSwgZmlsZV9maWx0ZXIpCisgICAgICAgIHJldmxpc3QgPSBydW5jbWQocmV2X2NtZCwgbGRpcikuc3BsaXRsaW5lcygpCisKKyAgICAgICAgIyBTdGVwIDM6IENhbGwgcmVwbyBzcGVjaWZpYyBob29rIHRvIGFkanVzdCBwYXRjaAorICAgICAgICBpZiAnaG9vaycgaW4gcmVwbzoKKyAgICAgICAgICAgICMgaG9vayBwYXJhbWV0ZXIgaXM6IC4vaG9vayBwYXRjaHBhdGggcmV2aXNpb24gcmVwb25hbWUKKyAgICAgICAgICAgIGNvdW50PWxlbihyZXZsaXN0KS0xCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hsaXN0OgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiJXMgJXMgJXMgJXMiICUgKHJlcG9bJ2hvb2snXSwgcGF0Y2gsIHJldmxpc3RbY291bnRdLCBuYW1lKSkKKyAgICAgICAgICAgICAgICBjb3VudD1jb3VudC0xCisKKyAgICAgICAgIyBTdGVwIDNhOiBGaWx0ZXIgb3V0IHVud2FudGVkIGZpbGVzIGFuZCBwYXRjaGVzLgorICAgICAgICBleGNsdWRlID0gcmVwby5nZXQoJ2ZpbGVfZXhjbHVkZScsICcnKQorICAgICAgICBpZiBleGNsdWRlOgorICAgICAgICAgICAgZmlsdGVyID0gWydmaWx0ZXJkaWZmJywgJy1wMSddCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBleGNsdWRlLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZmlsdGVyLmFwcGVuZCgnLXgnKQorICAgICAgICAgICAgICAgIGZpbHRlci5hcHBlbmQoJyVzLyVzJyAlIChkZXN0X2RpciwgcGF0aCkgaWYgZGVzdF9kaXIgIT0gJy4nIGVsc2UgcGF0aCkKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGxpc3RbOl06CisgICAgICAgICAgICAgICAgZmlsdGVyZWQgPSBwYXRjaCArICcudG1wJworICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWx0ZXJlZCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBydW5jbWQoZmlsdGVyICsgW3BhdGNoXSwgb3V0PWYpCisgICAgICAgICAgICAgICAgIyBOb3cgY2hlY2sgZm9yIGVtcHR5IHBhdGNoZXMuCisgICAgICAgICAgICAgICAgaWYgcnVuY21kKFsnZmlsdGVyZGlmZicsICctLWxpc3QnLCBmaWx0ZXJlZF0pOgorICAgICAgICAgICAgICAgICAgICAjIFBvc3NpYmx5IG1vZGlmaWVkLgorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsocGF0Y2gpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShmaWx0ZXJlZCwgcGF0Y2gpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSwgaWdub3JlIGl0LiBNdXN0IGFsc28gcmVtb3ZlIGZyb20gcmV2bGlzdC4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGNoLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZnJvbWxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFBhdGNoIG11c3QgaGF2ZSBiZWVuIGVtcHR5IHRvIHN0YXJ0IHdpdGguIE5vIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gcmVtb3ZlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInJydeRnJvbSAoWzAtOWEtZkEtRl0rKSAuKlxuJycnLCBmcm9tbGluZSkKKyAgICAgICAgICAgICAgICAgICAgcmV2ID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3NraXBwaW5nIGVtcHR5IHBhdGNoICVzID0gJXMnICUgKHBhdGNoLCByZXYpKQorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsocGF0Y2gpCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWx0ZXJlZCkKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaXN0LnJlbW92ZShwYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgcmV2bGlzdC5yZW1vdmUocmV2KQorCisgICAgICAgICMgU3RlcCA0OiB3cml0ZSBwYXRjaCBsaXN0IGFuZCByZXZpc2lvbiBsaXN0IHRvIGZpbGUsIGZvciB1c2VyIHRvIGVkaXQgbGF0ZXIKKyAgICAgICAgcGF0Y2hsaXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHBhdGNoX2RpciwgInBhdGNobGlzdC0lcyIgJSBuYW1lKQorICAgICAgICByZXBvWydwYXRjaGxpc3QnXSA9IHBhdGNobGlzdF9maWxlCisgICAgICAgIGYgPSBvcGVuKHBhdGNobGlzdF9maWxlLCAndycpCisgICAgICAgIGNvdW50PWxlbihyZXZsaXN0KS0xCisgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGxpc3Q6CisgICAgICAgICAgICBmLndyaXRlKCIlcyAlc1xuIiAlIChwYXRjaCwgcmV2bGlzdFtjb3VudF0pKQorICAgICAgICAgICAgY2hlY2tfcGF0Y2gob3MucGF0aC5qb2luKHBhdGNoX2RpciwgcGF0Y2gpKQorICAgICAgICAgICAgY291bnQ9Y291bnQtMQorICAgICAgICBmLmNsb3NlKCkKKworICAgICMgU3RlcCA1OiBpbnZva2UgYmFzaCBmb3IgdXNlciB0byBlZGl0IHBhdGNoIGFuZCBwYXRjaCBsaXN0CisgICAgaWYgY29uZi5pbnRlcmFjdGl2ZToKKyAgICAgICAgcHJpbnQoJ1lvdSBtYXkgbm93IGVkaXQgdGhlIHBhdGNoIGFuZCBwYXRjaCBsaXN0IGluICVzXG4nIFwKKyAgICAgICAgICAgICAgJ0ZvciBleGFtcGxlLCB5b3UgY2FuIHJlbW92ZSB1bndhbnRlZCBwYXRjaCBlbnRyaWVzIGZyb20gcGF0Y2hsaXN0LSosIHNvIHRoYXQgdGhleSB3aWxsIGJlIG5vdCBhcHBsaWVkIGxhdGVyJyAlIHBhdGNoX2Rpcik7CisgICAgICAgIGlmIG5vdCBkcm9wX3RvX3NoZWxsKHBhdGNoX2Rpcik6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgIyBTdGVwIDY6IGFwcGx5IHRoZSBnZW5lcmF0ZWQgYW5kIHJldmlzZWQgcGF0Y2gKKyAgICBhcHBseV9wYXRjaGxpc3QoY29uZiwgcmVwb3MpCisgICAgcnVuY21kKCJybSAtcmYgJXMiICUgcGF0Y2hfZGlyKQorCisgICAgIyBTdGVwIDc6IGNvbW1pdCB0aGUgdXBkYXRlZCBjb25maWcgZmlsZSBpZiBpdCdzIGJlaW5nIHRyYWNrZWQKKyAgICByZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKGNvbmYuY29uZmZpbGUpCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBydW5jbWQoImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gJXMiICUgcmVscGF0aCwgcHJpbnRlcnI9RmFsc2UpCisgICAgZXhjZXB0OgorICAgICAgICAjIE91dHNpZGUgdGhlIHJlcG9zaXRvcnkKKyAgICAgICAgb3V0cHV0ID0gTm9uZQorICAgIGlmIG91dHB1dDoKKyAgICAgICAgbG9nZ2VyLmluZm8oIkNvbW1pdHRpbmcgdXBkYXRlZCBjb25maWd1cmF0aW9uIGZpbGUiKQorICAgICAgICBpZiBvdXRwdXQubHN0cmlwKCkuc3RhcnRzd2l0aCgiTSIpOgorCisgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgImNvbXBvbmVudHMiIHN0cmluZworICAgICAgICAgICAgY29tcG9uZW50X3N0ciA9ICJhbGwgY29tcG9uZW50cyIKKyAgICAgICAgICAgIGlmIGxlbihjb21wb25lbnRzKSA+IDA6CisgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgdGVsbCB3aGljaCBjb21wb25lbnRzIHdlcmUgYWN0dWFsbHkgY2hhbmdlZAorICAgICAgICAgICAgICAgIGNvbXBvbmVudF9zdHIgPSAiLCAiLmpvaW4oY29tcG9uZW50cykKKworICAgICAgICAgICAgIyBleHBhbmQgdGhlIHRlbXBsYXRlIHdpdGgga25vd24gdmFsdWVzCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlKGNvbmYuY29tbWl0X21zZ190ZW1wbGF0ZSkKKyAgICAgICAgICAgIHJhd19tc2cgPSB0ZW1wbGF0ZS5zdWJzdGl0dXRlKGNvbXBvbmVudHMgPSBjb21wb25lbnRfc3RyKQorCisgICAgICAgICAgICAjIHNhbml0aXplIHRoZSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGluIGNvbW1hbmQgbGluZQorICAgICAgICAgICAgbXNnID0gcmF3X21zZy5yZXBsYWNlKCciJywgJ1xcIicpCisKKyAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IGNvbW1pdCAtbSAiJXMiICVzJyAlIChtc2csIHJlbHBhdGgpKQorCitkZWYgYXBwbHlfcGF0Y2hsaXN0KGNvbmYsIHJlcG9zKToKKyAgICAiIiIKKyAgICAgICAgYXBwbHkgdGhlIGdlbmVyYXRlZCBwYXRjaCBsaXN0IHRvIGNvbWJvIHJlcG8KKyAgICAiIiIKKyAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgbGFzdHJldiA9IHJlcG9bImxhc3RfcmV2aXNpb24iXQorICAgICAgICBwcmV2cmV2ID0gbGFzdHJldgorCisgICAgICAgICMgR2V0IG5vbi1ibGFuayBsaW5lcyBmcm9tIHBhdGNoIGxpc3QgZmlsZQorICAgICAgICBwYXRjaGxpc3QgPSBbXQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXBvWydwYXRjaGxpc3QnXSkgb3Igbm90IGNvbmYuaW50ZXJhY3RpdmU6CisgICAgICAgICAgICAjIE5vdGU6IHdlIHdhbnQgdGhpcyB0byBmYWlsIGhlcmUgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgd2UncmUgbm90IGluCisgICAgICAgICAgICAjIGludGVyYWN0aXZlIG1vZGUgc2luY2UgdGhlIGZpbGUgc2hvdWxkIGV4aXN0IGluIHRoaXMgY2FzZQorICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9bJ3BhdGNobGlzdCddKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGxpc3QuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgbGRpciA9IGNvbmYucmVwb3NbbmFtZV1bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgYnJhbmNoID0gY29uZi5yZXBvc1tuYW1lXS5nZXQoJ2JyYW5jaCcsICJtYXN0ZXIiKQorICAgICAgICBicmFuY2hyZXYgPSBydW5jbWQoImdpdCByZXYtcGFyc2UgJXMiICUgYnJhbmNoLCBsZGlyKS5zdHJpcCgpCisKKyAgICAgICAgaWYgcGF0Y2hsaXN0OgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFwcGx5aW5nIHBhdGNoZXMgZnJvbSAlcy4uLiIgJSBuYW1lKQorICAgICAgICAgICAgbGluZWNvdW50ID0gbGVuKHBhdGNobGlzdCkKKyAgICAgICAgICAgIGkgPSAxCisgICAgICAgICAgICBmb3IgbGluZSBpbiBwYXRjaGxpc3Q6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgbGFzdHJldiA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgIHBhdGNoZGlzcCA9IG9zLnBhdGgucmVscGF0aChwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5nZXRzaXplKHBhdGNoZmlsZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIihza2lwcGluZyAlZC8lZCAlcyAtIG5vIGNoYW5nZXMpIiAlIChpLCBsaW5lY291bnQsIHBhdGNoZGlzcCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gImdpdCBhbSAtLWtlZXAtY3IgJXMtcDEgJXMiICUgKCctcyAnIGlmIHJlcG8uZ2V0KCdzaWdub2ZmJywgVHJ1ZSkgZWxzZSAnJywgcGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQXBwbHlpbmcgJWQvJWQ6ICVzIiAlIChpLCBsaW5lY291bnQsIHBhdGNoZGlzcCkpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChjbWQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSdW5uaW5nICJnaXQgYW0gLS1hYm9ydCIgdG8gY2xlYW51cCByZXBvJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGFtIC0tYWJvcnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCciJXMiIGZhaWxlZCcgJSBjbWQpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUGxlYXNlIG1hbnVhbGx5IGFwcGx5IHBhdGNoICVzIiAlIHBhdGNoZGlzcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJOb3RlOiBpZiB5b3UgZXhpdCBhbmQgY29udGludWUgYXBwbHlpbmcgd2l0aG91dCBtYW51YWxseSBhcHBseWluZyB0aGUgcGF0Y2gsIGl0IHdpbGwgYmUgc2tpcHBlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZHJvcF90b19zaGVsbCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByZXZyZXYgIT0gcmVwb1snbGFzdF9yZXZpc2lvbiddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLnVwZGF0ZShuYW1lLCAibGFzdF9yZXZpc2lvbiIsIHByZXZyZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICBwcmV2cmV2ID0gbGFzdHJldgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgIyBPbmNlIGFsbCBwYXRjaGVzIGFyZSBhcHBsaWVkLCB3ZSBzaG91bGQgdXBkYXRlCisgICAgICAgICAgICAjIGxhc3RfcmV2aXNpb24gdG8gdGhlIGJyYW5jaCBoZWFkIGluc3RlYWQgb2YgdGhlIGxhc3QKKyAgICAgICAgICAgICMgYXBwbGllZCBwYXRjaC4gVGhlIHR3byBhcmUgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIHdoZW4KKyAgICAgICAgICAgICMgdGhlIGxhc3QgY29tbWl0IGlzIGEgbWVyZ2UgY29tbWl0IG9yIHdoZW4gdGhlIHBhdGNoZXMgYXQKKyAgICAgICAgICAgICMgdGhlIGJyYW5jaCBoZWFkIHdlcmUgaW50ZW50aW9uYWxseSBleGNsdWRlZC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgd2UgZG8gbm90IGRvIHRoYXQgZm9yIGEgbWVyZ2UgY29tbWl0LCB0aGUgbmV4dAorICAgICAgICAgICAgIyBjb21iby1sYXllciBydW4gd2lsbCBvbmx5IGV4Y2x1ZGUgcGF0Y2hlcyByZWFjaGFibGUgZnJvbQorICAgICAgICAgICAgIyBvbmUgb2YgdGhlIG1lcmdlZCBicmFuY2hlcyBhbmQgdHJ5IHRvIHJlLWFwcGx5IHBhdGNoZXMKKyAgICAgICAgICAgICMgZnJvbSBvdGhlciBicmFuY2hlcyBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWxyZWFkeQorICAgICAgICAgICAgIyBjb3BpZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHBhdGNoZXMgd2VyZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVkLCB0aGUgbmV4dCBydW4gd2lsbAorICAgICAgICAgICAgIyBwcmVzZW50IHRoZW0gYWdhaW4gaW5zdGVhZCBvZiBza2lwcGluZyBvdmVyIHRoZW0uIFRoaXMKKyAgICAgICAgICAgICMgbWF5IG9yIG1heSBub3QgYmUgaW50ZW5kZWQsIHNvIHRoZSBjb2RlIGhlcmUgaXMgY29uc2VydmF0aXZlCisgICAgICAgICAgICAjIGFuZCBvbmx5IGFkZHJlc3NlcyB0aGUgImhlYWQgaXMgbWVyZ2UgY29tbWl0IiBjYXNlLgorICAgICAgICAgICAgaWYgbGFzdHJldiAhPSBicmFuY2hyZXYgYW5kIFwKKyAgICAgICAgICAgICAgIGxlbihydW5jbWQoImdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDolJVAgLS1uby1wYXRjaCAlcyIgJSBicmFuY2gsIGxkaXIpLnNwbGl0KCkpID4gMToKKyAgICAgICAgICAgICAgICBsYXN0cmV2ID0gYnJhbmNocmV2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm8gcGF0Y2hlcyB0byBhcHBseSBmcm9tICVzIiAlIG5hbWUpCisgICAgICAgICAgICBsYXN0cmV2ID0gYnJhbmNocmV2CisKKyAgICAgICAgaWYgbGFzdHJldiAhPSByZXBvWydsYXN0X3JldmlzaW9uJ106CisgICAgICAgICAgICBjb25mLnVwZGF0ZShuYW1lLCAibGFzdF9yZXZpc2lvbiIsIGxhc3RyZXYpCisKK2RlZiBhY3Rpb25fc3BsaXRwYXRjaChjb25mLCBhcmdzKToKKyAgICAiIiIKKyAgICAgICAgZ2VuZXJhdGUgdGhlIGNvbW1pdCBwYXRjaCBhbmQKKyAgICAgICAgc3BsaXQgdGhlIHBhdGNoIHBlciByZXBvCisgICAgIiIiCisgICAgbG9nZ2VyLmRlYnVnKCJhY3Rpb25fc3BsaXRwYXRjaCIpCisgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgY29tbWl0ID0gYXJnc1sxXQorICAgIGVsc2U6CisgICAgICAgIGNvbW1pdCA9ICJIRUFEIgorICAgIHBhdGNoZGlyID0gInNwbGl0cGF0Y2gtJXMiICUgY29tbWl0CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGNoZGlyKToKKyAgICAgICAgb3MubWtkaXIocGF0Y2hkaXIpCisKKyAgICAjIGZpbGVyYW5nZV9yb290IGlzIGZvciB0aGUgcmVwbyB3aG9zZSBkZXN0X2RpciBpcyByb290ICIuIgorICAgICMgYW5kIGl0IHNob3VsZCBiZSBzcGVjaWZpZWQgYnkgZXhjbHVkaW5nIGFsbCBvdGhlciByZXBvIGRlc3QgZGlyCisgICAgIyBsaWtlICIteCByZXBvMSAteCByZXBvMiAteCByZXBvMyAuLi4iCisgICAgZmlsZXJhbmdlX3Jvb3QgPSAiIgorICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgIGRlc3RfZGlyID0gY29uZi5yZXBvc1tuYW1lXVsnZGVzdF9kaXInXQorICAgICAgICBpZiBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICBmaWxlcmFuZ2Vfcm9vdCA9ICclcyAteCAiJXMvKiInICUgKGZpbGVyYW5nZV9yb290LCBkZXN0X2RpcikKKworICAgIGZvciBuYW1lIGluIGNvbmYucmVwb3M6CisgICAgICAgIGRlc3RfZGlyID0gY29uZi5yZXBvc1tuYW1lXVsnZGVzdF9kaXInXQorICAgICAgICBwYXRjaF9maWxlbmFtZSA9ICIlcy8lcy5wYXRjaCIgJSAocGF0Y2hkaXIsIG5hbWUpCisgICAgICAgIGlmIGRlc3RfZGlyID09ICIuIjoKKyAgICAgICAgICAgIGNtZCA9ICJnaXQgZm9ybWF0LXBhdGNoIC1uMSAtLXN0ZG91dCAlc14uLiVzIHwgZmlsdGVyZGlmZiAtcDEgJXMgPiAlcyIgJSAoY29tbWl0LCBjb21taXQsIGZpbGVyYW5nZV9yb290LCBwYXRjaF9maWxlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICJnaXQgZm9ybWF0LXBhdGNoIC0tbm8tcHJlZml4IC1uMSAtLXN0ZG91dCAlc14uLiVzIC0tICVzID4gJXMiICUgKGNvbW1pdCwgY29tbWl0LCBkZXN0X2RpciwgcGF0Y2hfZmlsZW5hbWUpCisgICAgICAgIHJ1bmNtZChjbWQpCisgICAgICAgICMgRGV0ZWN0IGVtcHR5IHBhdGNoZXMgKGluY2x1ZGluZyB0aG9zZSBwcm9kdWNlZCBieSBmaWx0ZXJkaWZmIGFib3ZlCisgICAgICAgICMgdGhhdCBjb250YWluIG9ubHkgcHJlYW1ibGUgdGV4dCkKKyAgICAgICAgaWYgb3MucGF0aC5nZXRzaXplKHBhdGNoX2ZpbGVuYW1lKSA9PSAwIG9yIHJ1bmNtZCgiZmlsdGVyZGlmZiAlcyIgJSBwYXRjaF9maWxlbmFtZSkgPT0gIiI6CisgICAgICAgICAgICBvcy5yZW1vdmUocGF0Y2hfZmlsZW5hbWUpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiKHNraXBwaW5nICVzIC0gbm8gY2hhbmdlcykiLCBuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8ocGF0Y2hfZmlsZW5hbWUpCisKK2RlZiBhY3Rpb25fZXJyb3IoY29uZiwgYXJncyk6CisgICAgbG9nZ2VyLmluZm8oImludmFsaWQgYWN0aW9uICVzIiAlIGFyZ3NbMF0pCisKK2FjdGlvbnMgPSB7CisgICAgImluaXQiOiBhY3Rpb25faW5pdCwKKyAgICAidXBkYXRlIjogYWN0aW9uX3VwZGF0ZSwKKyAgICAicHVsbCI6IGFjdGlvbl9wdWxsLAorICAgICJzcGxpdHBhdGNoIjogYWN0aW9uX3NwbGl0cGF0Y2gsCit9CisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB2ZXJzaW9uID0gIkNvbWJvIExheWVyIFJlcG8gVG9vbCB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAorICAgICAgICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBhY3Rpb24KKworQ3JlYXRlIGFuZCB1cGRhdGUgYSBjb21iaW5hdGlvbiBsYXllciByZXBvc2l0b3J5IGZyb20gbXVsdGlwbGUgY29tcG9uZW50IHJlcG9zaXRvcmllcy4KKworQWN0aW9uOgorICBpbml0ICAgICAgICAgICAgICAgICBpbml0aWFsaXNlIHRoZSBjb21ibyBsYXllciByZXBvCisgIHVwZGF0ZSBbY29tcG9uZW50c10gIGdldCBwYXRjaGVzIGZyb20gY29tcG9uZW50IHJlcG9zIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBjb21ibyByZXBvCisgIHB1bGwgW2NvbXBvbmVudHNdICAgIGp1c3QgcHVsbCBjb21wb25lbnQgcmVwb3Mgb25seQorICBzcGxpdHBhdGNoIFtjb21taXRdICBnZW5lcmF0ZSBjb21taXQgcGF0Y2ggYW5kIHNwbGl0IHBlciBjb21wb25lbnQsIGRlZmF1bHQgY29tbWl0IGlzIEhFQUQiIiIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb25mIiwgaGVscCA9ICJzcGVjaWZ5IHRoZSBjb25maWcgZmlsZSAoY29uZi9jb21iby1sYXllci5jb25mIGlzIHRoZSBkZWZhdWx0KS4iLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJjb25mZmlsZSIsIGRlZmF1bHQgPSAiY29uZi9jb21iby1sYXllci5jb25mIikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWludGVyYWN0aXZlIiwgaGVscCA9ICJpbnRlcmFjdGl2ZSBtb2RlLCB1c2VyIGNhbiBlZGl0IHRoZSBwYXRjaCBsaXN0IGFuZCBwYXRjaGVzIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJpbnRlcmFjdGl2ZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgaGVscCA9ICJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImRlYnVnIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbm8tcHVsbCIsIGhlbHAgPSAic2tpcCBwdWxsaW5nIGNvbXBvbmVudCByZXBvcyBkdXJpbmcgdXBkYXRlIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJub3B1bGwiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1oYXJkLXJlc2V0IiwKKyAgICAgICAgICAgICAgIGhlbHAgPSAiaW5zdGVhZCBvZiBwdWxsIGRvIGZldGNoIGFuZCBoYXJkLXJlc2V0IGluIGNvbXBvbmVudCByZXBvcyIsCisgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAiaGFyZF9yZXNldCIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSCIsICItLWhpc3RvcnkiLCBoZWxwID0gImltcG9ydCBmdWxsIGhpc3Rvcnkgb2YgY29tcG9uZW50cyBkdXJpbmcgaW5pdCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICAjIERpc3BhdGNoIHRvIGFjdGlvbiBoYW5kbGVyCisgICAgaWYgbGVuKGFyZ3MpID09IDE6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gYWN0aW9uIHNwZWNpZmllZCwgZXhpdGluZyIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbGlmIGFyZ3NbMV0gbm90IGluIGFjdGlvbnM6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5zdXBwb3J0ZWQgYWN0aW9uICVzLCBleGl0aW5nXG4iICUgKGFyZ3NbMV0pKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMob3B0aW9ucy5jb25mZmlsZSk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gdmFsaWQgY29uZmlnIGZpbGUsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIGNvbmZkYXRhID0gQ29uZmlndXJhdGlvbihvcHRpb25zKQorICAgICAgICBpbml0bW9kZSA9IChhcmdzWzFdID09ICdpbml0JykKKyAgICAgICAgY29uZmRhdGEuc2FuaXR5X2NoZWNrKGluaXRtb2RlKQorICAgICAgICBhY3Rpb25zLmdldChhcmdzWzFdLCBhY3Rpb25fZXJyb3IpKGNvbmZkYXRhLCBhcmdzWzE6XSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyLWhvb2stZGVmYXVsdC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllci1ob29rLWRlZmF1bHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWUzYTNiOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb21iby1sYXllci1ob29rLWRlZmF1bHQuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisjIEhvb2sgdG8gYWRkIHNvdXJjZSBjb21wb25lbnQvcmV2aXNpb24gaW5mbyB0byBjb21taXQgbWVzc2FnZQorIyBQYXJhbWV0ZXI6CisjICAgJDEgcGF0Y2gtZmlsZQorIyAgICQyIHJldmlzaW9uCisjICAgJDMgcmVwb25hbWUKKworcGF0Y2hmaWxlPSQxCityZXY9JDIKK3JlcG9uYW1lPSQzCisKK3NlZCAtaSAtZSAiMCwvXlN1YmplY3Q6L3MjXlN1YmplY3Q6IFxbUEFUQ0hcXSBcKCRyZXBvbmFtZTogXCkqXCguKlwpI1N1YmplY3Q6IFxbUEFUQ0hcXSAkcmVwb25hbWU6IFwyIyIgJHBhdGNoZmlsZQoraWYgZ3JlcCAtcSAnXlNpZ25lZC1vZmYtYnk6JyAkcGF0Y2hmaWxlOyB0aGVuCisgICAgIyBJbnNlcnQgYmVmb3JlIFNpZ25lZC1vZmYtYnkuCisgICAgc2VkIC1pIC1lICIwLC9eU2lnbmVkLW9mZi1ieTovcyNcKF5TaWduZWQtb2ZmLWJ5Oi4qXCkjXChGcm9tICRyZXBvbmFtZSByZXY6ICRyZXZcKVxuXG5cMSMiICRwYXRjaGZpbGUKK2Vsc2UKKyAgICAjIEluc2VydCBiZWZvcmUgZmluYWwgLS0tIHNlcGFyYXRvciwgd2l0aCBleHRyYSBibGFuayBsaW5lcyByZW1vdmVkLgorICAgIHBlcmwgLWUgIlwkXyA9IGpvaW4oJycsIDw+KTsgcy9eKC4qXFNbIFx0XSopKFxufFxuXHMqXG4pLS0tXG4vXCQxXG5cbkZyb20gJHJlcG9uYW1lIHJldjogJHJldlxuLS0tXG4vczsgcHJpbnQ7IiAkcGF0Y2hmaWxlID4kcGF0Y2hmaWxlLnRtcAorICAgIG12ICRwYXRjaGZpbGUudG1wICRwYXRjaGZpbGUKK2ZpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29tYm8tbGF5ZXIuY29uZi5leGFtcGxlIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyLmNvbmYuZXhhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGUyYjU4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbWJvLWxheWVyLmNvbmYuZXhhbXBsZQpAQCAtMCwwICsxLDkzIEBACisjIGNvbWJvLWxheWVyIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmaWxlCisKKyMgRGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBzZWN0aW9ucy4KK1tERUZBVUxUXQorCisjIEFkZCAnU2lnbmVkLW9mZi1ieScgdG8gYWxsIGNvbW1pdHMgdGhhdCBnZXQgaW1wb3J0ZWQgYXV0b21hdGljYWxseS4KK3NpZ25vZmYgPSBUcnVlCisKKyMgY29tcG9uZW50IG5hbWUKK1tiaXRiYWtlXQorCisjIE92ZXJyaWRlIHNpZ25lZG9mZiBkZWZhdWx0IGFib3ZlIChub3QgdmVyeSB1c2VmdWwsIGJ1dCBwb3NzaWJsZSkuCitzaWdub2ZmID0gRmFsc2UKKworIyBtYW5kYXRvcnkgb3B0aW9ucworIyBnaXQgdXBzdHJlYW0gdXJpCitzcmNfdXJpID0gZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorCisjIHRoZSBkaXJlY3RvcnkgdG8gY2xvbmUgdGhlIGNvbXBvbmVudCByZXBvCitsb2NhbF9yZXBvX2RpciA9IC9ob21lL2t5dTMvc3JjL3Rlc3QvYml0YmFrZQorCisjIHRoZSByZWxhdGl2ZSBkaXIgd2l0aGluIHRoZSBjb21ibyByZXBvIHRvIHB1dCB0aGUgY29tcG9uZW50IGZpbGVzCisjIHVzZSAiLiIgaWYgdGhlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGUgcm9vdCBkaXIKK2Rlc3RfZGlyID0gYml0YmFrZQorCisjIHRoZSBsYXN0IHVwZGF0ZSByZXZpc2lvbi4KKyMgImluaXQiIHdpbGwgc2V0IHRoaXMgdG8gdGhlIGxhdGVzdCByZXZpc2lvbiBhdXRvbWF0aWNhbGx5LCBob3dldmVyIGlmIGl0CisjIGlzIGVtcHR5IHdoZW4gInVwZGF0ZSIgaXMgcnVuLCB0aGUgdG9vbCB3aWxsIHN0YXJ0IGZyb20gdGhlIGZpcnN0IGNvbW1pdC4KKyMgTm90ZSB0aGF0IHRoaXMgdmFsdWUgd2lsbCBnZXQgdXBkYXRlZCBieSAidXBkYXRlIiBpZiB0aGUgY29tcG9uZW50IHJlcG8ncworIyBsYXRlc3QgcmV2aXNpb24gY2hhbmdlZCBhbmQgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LgorbGFzdF9yZXZpc2lvbiA9CisKKyMgb3B0aW9uYWwgb3B0aW9uczoKKworIyBicmFuY2g6IHNwZWNpZnkgdGhlIGJyYW5jaCBpbiB0aGUgY29tcG9uZW50IHJlcG8gdG8gcHVsbCBmcm9tCisjIChtYXN0ZXIgaWYgbm90IHNwZWNpZmllZCkKKworIyBmaWxlX2ZpbHRlcjogb25seSBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgZmlsZShzKQorIyBmaWxlX2ZpbHRlciA9IFtwYXRoXSBbcGF0aF0gLi4uCisjIGV4YW1wbGU6CisjICAgZmlsZV9maWx0ZXIgPSBzcmMvICA6IG9ubHkgaW5jbHVkZSB0aGUgc3ViZGlyIHNyYworIyAgIGZpbGVfZmlsdGVyID0gc3JjLyouYyA6IG9ubHkgaW5jbHVkZSB0aGUgc3JjICouYyBmaWxlCisjICAgZmlsZV9maWx0ZXIgPSBzcmMvbWFpbi5jIHNyYy9NYWtlZmlsZS5hbSA6IG9ubHkgaW5jbHVkZSB0aGVzZSB0d28gZmlsZXMKKworIyBmaWxlX2V4Y2x1ZGU6IGZpbHRlciBvdXQgdGhlc2UgZmlsZShzKQorIyBmaWxlX2V4Y2x1ZGUgPSBbcGF0aF0gW3BhdGhdIC4uLgorIworIyBFYWNoIGVudHJ5IG11c3QgbWF0Y2ggYSBmaWxlIG5hbWUuIEluIGNvbnRyYXN0IGRvIGZpbGVfZmlsdGVyLCBtYXRjaGluZworIyBhIGRpcmVjdG9yeSBoYXMgbm8gZWZmZWN0LiBUbyBhY2hpZXZlIHRoYXQsIHVzZSBhcHBlbmQgYSAqIHdpbGRjYXJkCisjIGF0IHRoZSBlbmQuCisjCisjIFdpbGRjYXJkcyBhcmUgYXBwbGllZCB0byB0aGUgY29tcGxldGUgcGF0aCBhbmQgYWxzbyBtYXRjaCBzbGFzaGVzLgorIworIyBleGFtcGxlOgorIyAgIGZpbGVfZXhjbHVkZSA9IHNyYy9mb29iYXIvKiAgOiBleGNsdWRlIGV2ZXJ5dGhpbmcgdW5kZXIgc3JjL2Zvb2JhcgorIyAgIGZpbGVfZXhjbHVkZSA9IHNyYy9tYWluLmMgOiBmaWx0ZXIgb3V0IG1haW4uYyBhZnRlciBpbmNsdWRpbmcgaXQgd2l0aCBmaWxlX2ZpbHRlciA9IHNyYy8qLmMKKyMgICBmaWxlX2V4Y2x1ZGUgPSAqfiA6IGV4Y2x1ZGUgYmFja3VwIGZpbGVzCisKKyMgaG9vazogaWYgcHJvdmlkZWQsIHRoZSB0b29sIHdpbGwgY2FsbCB0aGUgaG9vayB0byBwcm9jZXNzIHRoZSBnZW5lcmF0ZWQKKyMgICAgIHBhdGNoIGZyb20gdXBzdHJlYW0sIGFuZCB0aGVuIGFwcGx5IHRoZSBtb2RpZmllZCBwYXRjaCB0byB0aGUgY29tYm8KKyMgICAgIHJlcG8uCisjIHRoZSBob29rIHNjcmlwdCBpcyBjYWxsZWQgYXMgZm9sbG93czogLi9ob29rIHBhdGNocGF0aCByZXZpc2lvbiByZXBvbmFtZQorIyBleGFtcGxlOgorIyAgICAgaG9vayA9IGNvbWJvLWxheWVyLWhvb2stZGVmYXVsdC5zaAorCisjIHNpbmNlX3JldmlzaW9uOgorIyAgIHNpbmNlX3JldmlzaW9uID0gcmVsZWFzZS0xLTIKKyMgICBzaW5jZV9yZXZpc2lvbiA9IDEyMzQ1IGFiY2RmCisjCisjIElmIHByb3ZpZGVkLCB0cnVuY2F0ZSBpbXBvcnRlZCBoaXN0b3J5IGR1cmluZyAiY29tYm8tbGF5ZXIgLS1oaXN0b3J5CisjIGluaXQiIGF0IHRoZSBzcGVjaWZpZWQgcmV2aXNpb24ocykuICBNb3JlIHRoYW4gb25lIGNhbiBiZSBzcGVjaWZpZWQKKyMgdG8gY3V0IG9mZiBtdWx0aXBsZSBjb21wb25lbnQgYnJhbmNoZXMuCisjCisjIFRoZSBzcGVjaWZpZWQgY29tbWl0cyB0aGVtc2VsdmVzIGRvIG5vdCBnZXQgaW1wb3J0ZWQuIEluc3RlYWQsIGFuCisjIGFydGlmaWNpYWwgY29tbWl0IHdpdGggInVua25vd24iIGF1dGhvciBpcyBjcmVhdGVkIHdpdGggYSBjb250ZW50CisjIHRoYXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgY29tbWl0LgorCitbb2UtY29yZV0KK3NyY191cmkgPSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZQorbG9jYWxfcmVwb19kaXIgPSAvaG9tZS9reXUzL3NyYy90ZXN0L29lY29yZQorZGVzdF9kaXIgPSAuCitsYXN0X3JldmlzaW9uID0KK3NpbmNlX3JldmlzaW9uID0gc29tZS10YWctb3ItY29tbWl0LW9uLW1hc3Rlci1icmFuY2gKKworIyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGVtYmVkIHB5dGhvbiBjb2RlIGluIHRoZSBjb25maWcgdmFsdWVzLiBTaW1pbGFyCisjIHRvIGJpdGJha2UgaXQgY29uc2lkZXJzIGV2ZXJ5IHZhbHVlIHN0YXJ0aW5nIHdpdGggQCB0byBiZSBhIHB5dGhvbgorIyBzY3JpcHQuCisjIGUuZy4gbG9jYWxfcmVwb19kaXIgY291bGQgZWFzaWx5IGJlIGNvbmZpZ3VyZWQgdXNpbmcgYW4gZW52aXJvbm1lbnQKKyMgdmFyaWFibGU6CisjCisjIFtiaXRiYWtlXQorIyBsb2NhbF9yZXBvX2RpciA9IEBvcy5nZXRlbnYoIkxPQ0FMX1JFUE9fRElSIikgKyAiL2JpdGJha2UiCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2JiLW1hdHJpeC1wbG90LnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXgtcGxvdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzZhMjU1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXgtcGxvdC5zaApAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgb3BlcmF0ZXMgb24gdGhlIC5kYXQgZmlsZSBnZW5lcmF0ZWQgYnkgYmItbWF0cml4LnNoLiBJdCB0b2xlcmF0ZXMKKyMgdGhlIGhlYWRlciBieSBza2lwcGluZyB0aGUgZmlyc3QgbGluZSwgYnV0IGVycm9yIG1lc3NhZ2VzIGFuZCBiYWQgZGF0YSByZWNvcmRzCisjIG5lZWQgdG8gYmUgcmVtb3ZlZCBmaXJzdC4gSXQgd2lsbCBnZW5lcmF0ZSB0aHJlZSB2aWV3cyBvZiB0aGUgcGxvdCwgYW5kIGxlYXZlCisjIGFuIGludGVyYWN0aXZlIHZpZXcgb3BlbiBmb3IgZnVydGhlciBhbmFseXNpcy4KKyMKKyMgQVVUSE9SUworIyBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKyMKKworIyBTZXR1cCB0aGUgZGVmYXVsdHMKK0RBVEZJTEU9ImJiLW1hdHJpeC5kYXQiCitYTEFCRUw9IkJCX05VTUJFUl9USFJFQURTIgorWUxBQkVMPSJQQVJBTExFTF9NQUtFIgorRklFTEQ9MworREVGX1RJVExFPSJFbGFwc2VkIFRpbWUgKHNlY29uZHMpIgorUE0zRF9GUkFHTUVOVD0idW5zZXQgc3VyZmFjZTsgc2V0IHBtM2QgYXQgcyBoaWRkZW4zZCAxMDAiCitTSVpFPSI2NDAsNDgwIgorCitmdW5jdGlvbiB1c2FnZSB7CitDTUQ9JChiYXNlbmFtZSAkMCkKK2NhdCA8PEVPTQorVXNhZ2U6ICRDTUQgWy1kIGRhdGZpbGVdIFstZiBmaWVsZF0gWy1oXSBbLXQgdGl0bGVdIFstd10KKyAgLWQgZGF0ZmlsZSAgICBUaGUgZGF0YSBmaWxlIGdlbmVyYXRlZCBieSBiYi1tYXRyaXguc2ggKGRlZmF1bHQ6ICREQVRGSUxFKQorICAtZiBmaWVsZCAgICAgIFRoZSBmaWVsZCBpbmRleCB0byBwbG90IGFzIHRoZSBaIGF4aXMgZnJvbSB0aGUgZGF0YSBmaWxlCisgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICRGSUVMRCwgIiRERUZfVElUTEUiKQorICAtaCAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UKKyAgLXMgVyxIICAgICAgICBQTkcgYW5kIHdpbmRvdyBzaXplIGluIHBpeGVscyAoZGVmYXVsdDogJFNJWkUpCisgIC10IHRpdGxlICAgICAgVGhlIHRpdGxlIHRvIGRpc3BsYXksIHNob3VsZCBkZXNjcmliZSB0aGUgZmllbGQgKC1mKSBhbmQgdW5pdHMKKyAgICAgICAgICAgICAgICAoZGVmYXVsdDogIiRERUZfVElUTEUiKQorICAtdyAgICAgICAgICAgIFJlbmRlciB0aGUgcGxvdCBhcyB3aXJlZnJhbWUgd2l0aCBhIDJEIGNvbG9ybWFwIHByb2plY3RlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICBYWSBwbGFuZSByYXRoZXIgdGhhbiBhcyB0aGUgdGV4dHVyZSBmb3IgdGhlIHN1cmZhY2UKK0VPTQorfQorCisjIFBhcnNlIGFuZCB2YWxpZGF0ZSBhcmd1bWVudHMKK3doaWxlIGdldG9wdHMgImQ6Zjpoczp0OnciIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwlkKQorCQlEQVRGSUxFPSIkT1BUQVJHIgorCQk7OworCWYpCisJCUZJRUxEPSIkT1BUQVJHIgorCQk7OworCWgpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCXMpCisJCVNJWkU9IiRPUFRBUkciCisJCTs7CisJdCkKKwkJVElUTEU9IiRPUFRBUkciCisJCTs7CisJdykKKwkJUE0zRF9GUkFHTUVOVD0ic2V0IHBtM2QgYXQgYiIKKwkJVz0iLXciCisJCTs7CisJKikKKwkJdXNhZ2UKKwkJZXhpdCAxCisJCTs7CisJZXNhYworZG9uZQorCisjIEVuc3VyZSB0aGUgZGF0YSBmaWxlIGV4aXN0cworaWYgWyAhIC1mICIkREFURklMRSIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiAkREFURklMRSBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorCWV4aXQgMQorZmkKK1BMT1RfQkFTRU5BTUU9JHtEQVRGSUxFJS4qfS1mJEZJRUxEJFcKKworIyBTZXQgYSBzYW5lIHRpdGxlCisjIFRPRE86IHBhcnNlIHRoZSBoZWFkZXIgYW5kIGRlZmluZSB0aXRsZXMgZm9yIGVhY2ggZm9ybWF0IHBhcmFtZXRlciBmb3IgVElNRSgxKQoraWYgWyAteiAiJFRJVExFIiBdOyB0aGVuCisJaWYgWyAhICIkRklFTEQiID09ICIzIiBdOyB0aGVuCisJCVRJVExFPSJGaWVsZCAkRklFTEQiCisJZWxzZQorCQlUSVRMRT0iJERFRl9USVRMRSIKKwlmaQorZmkKKworIyBEZXRlcm1pbmUgdGhlIGRncmlkM2QgbWVzaCBkaW1lbnNpb25zIHNpemUKK01JTj0kKHRhaWwgLW4gKzIgIiREQVRGSUxFIiB8IGN1dCAtZCAnICcgLWYgMSB8IHNlZCAncy9eMCovLycgfCBzb3J0IC1uIHwgdW5pcSB8IGhlYWQgLW4xKQorTUFYPSQodGFpbCAtbiArMiAiJERBVEZJTEUiIHwgY3V0IC1kICcgJyAtZiAxIHwgc2VkICdzL14wKi8vJyB8IHNvcnQgLW4gfCB1bmlxIHwgdGFpbCAtbjEpCitCQl9DTlQ9JFske01BWH0gLSAkTUlOICsgMV0KK01JTj0kKHRhaWwgLW4gKzIgIiREQVRGSUxFIiB8IGN1dCAtZCAnICcgLWYgMiB8IHNlZCAncy9eMCovLycgfCBzb3J0IC1uIHwgdW5pcSB8IGhlYWQgLW4xKQorTUFYPSQodGFpbCAtbiArMiAiJERBVEZJTEUiIHwgY3V0IC1kICcgJyAtZiAyIHwgc2VkICdzL14wKi8vJyB8IHNvcnQgLW4gfCB1bmlxIHwgdGFpbCAtbjEpCitQTV9DTlQ9JFske01BWH0gLSAkTUlOICsgMV0KKworCisoY2F0IDw8RU9GCitzZXQgdGl0bGUgIiRUSVRMRSIKK3NldCB4bGFiZWwgIiRYTEFCRUwiCitzZXQgeWxhYmVsICIkWUxBQkVMIgorc2V0IHN0eWxlIGxpbmUgMTAwIGx0IDUgbHcgMS41CiskUE0zRF9GUkFHTUVOVAorc2V0IGRncmlkM2QgJFBNX0NOVCwkQkJfQ05UIHNwbGluZXMKK3NldCB0aWNzbGV2ZWwgMC4yCisKK3NldCB0ZXJtIHBuZyBzaXplICRTSVpFCitzZXQgb3V0cHV0ICIkUExPVF9CQVNFTkFNRS5wbmciCitzcGxvdCAiJERBVEZJTEUiIGV2ZXJ5IDo6MSB1c2luZyAxOjI6JEZJRUxEIHdpdGggbGluZXMgbHMgMTAwCisKK3NldCB2aWV3IDkwLDAKK3NldCBvdXRwdXQgIiRQTE9UX0JBU0VOQU1FLWJiLnBuZyIKK3JlcGxvdAorCitzZXQgdmlldyA5MCw5MAorc2V0IG91dHB1dCAiJFBMT1RfQkFTRU5BTUUtcG0ucG5nIgorcmVwbG90CisKK3NldCB2aWV3IDYwLDMwCitzZXQgdGVybSB3eHQgc2l6ZSAkU0laRQorcmVwbG90CitFT0YKKykgfCBnbnVwbG90IC0tcGVyc2lzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXguc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2JiLW1hdHJpeC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDY0NTY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXguc2gKQEAgLTAsMCArMSw3OSBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgcnVucyBCQl9DTUQgKHR5cGljYWxseSBidWlsZGluZyBjb3JlLWltYWdlLXNhdG8pIGZvciBhbGwKKyMgY29tYmluY2F0aW9ucyBvZiBCQl9SQU5HRSBhbmQgUE1fUkFOR0UgdmFsdWVzLiBJdCBzYXZlcyBvZmYgYWxsIHRoZSBjb25zb2xlCisjIGxvZ3MsIHRoZSBidWlsZHN0YXRzIGRpcmVjdG9yaWVzLCBhbmQgY3JlYXRlcyBhIGJiLXBtLXJ1bnRpbWUuZGF0IGZpbGUgd2hpY2gKKyMgY2FuIGJlIHVzZWQgdG8gcG9zdHByb2Nlc3MgdGhlIHJlc3VsdHMgd2l0aCBhIHBsb3R0aW5nIHRvb2wsIHNwcmVhZHNoZWV0LCBldGMuCisjIEJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBwcmUtZG93bmxvYWQgYWxsIHRoZQorIyBuZWNlc3Nhcnkgc291cmNlcyBieSBwZXJmb3JtaW5nIHRoZSBCQl9DTUQgb25jZSBtYW51YWxseS4gSXQgaXMgYWxzbyBhIGdvb2QKKyMgaWRlYSB0byBkaXNhYmxlIGNyb24gdG8gYXZvaWQgcnVudGltZSB2YXJpYXRpb25zIGNhdXNlZCBieSB0aGluZ3MgbGlrZSB0aGUKKyMgbG9jYXRlIHByb2Nlc3MuIEJlIHN1cmUgdG8gc2FuaXRpemUgdGhlIGRhdCBmaWxlIHByaW9yIHRvIHBvc3QtcHJvY2Vzc2luZyBhcworIyBpdCBtYXkgY29udGFpbiBlcnJvciBtZXNzYWdlcyBvciBiYWQgcnVucyB0aGF0IHNob3VsZCBiZSByZW1vdmVkLgorIworIyBBVVRIT1JTCisjIERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorIworCisjIFRoZSBmb2xsb3dpbmcgcmFuZ2VzIGFyZSBhcHByb3ByaWF0ZSBmb3IgYSA0IGNvcmUgc3lzdGVtIHdpdGggOCBsb2dpY2FsIHVuaXRzCisjIFVzZSBsZWFkaW5nIDBzIHRvIGVuc3VyZSBhbGwgZGlnaXRzIGFyZSB0aGUgc2FtZSBzdHJpbmcgbGVuZ3RoLCB0aGlzIHJlc3VsdHMKKyMgaW4gbmljZSBsb2cgZmlsZSBuYW1lcyBhbmQgY29sdW1uYXIgZGF0IGZpbGVzLgorQkJfUkFOR0U9IjA0IDA1IDA2IDA3IDA4IDA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IgorUE1fUkFOR0U9IjA0IDA1IDA2IDA3IDA4IDA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IgorCitEQVRBRElSPSJiYi1tYXRyaXgtJCQiCitCQl9DTUQ9ImJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsIgorUlVOVElNRV9MT0c9IiREQVRBRElSL2JiLW1hdHJpeC5kYXQiCisKKyMgU2VlIFRJTUUoMSkgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRpbWUgZm9ybWF0IHBhcmFtZXRlcnMKKyMgVGhlIGZvbGxvd2luZyBhbGwgcmVwb3J0IDA6IFcgSyByIHMgdCB3CitUSU1FX1NUUj0iJWUgJVMgJVUgJVAgJWMgJXcgJVIgJUYgJU0gJXgiCisKKyMgUHJlcGFyZSB0aGUgREFUQURJUgorbWtkaXIgJERBVEFESVIKK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorCWVjaG8gIkZhaWxlZCB0byBjcmVhdGUgJERBVEFESVIuIgorCWV4aXQgMQorZmkKKworIyBBZGQgYSBzaW1wbGUgaGVhZGVyCitlY2hvICJCQiBQTSAkVElNRV9TVFIiID4gJFJVTlRJTUVfTE9HCitmb3IgQkIgaW4gJEJCX1JBTkdFOyBkbworCWZvciBQTSBpbiAkUE1fUkFOR0U7IGRvCisJCVJVTkRJUj0iJERBVEFESVIvJEJCLSRQTS1idWlsZCIKKwkJbWtkaXIgJFJVTkRJUgorCQlCQl9MT0c9JFJVTkRJUi8kQkItJFBNLWJpdGJha2UubG9nCisJCWRhdGUKKwkJZWNobyAiQkI9JEJCIFBNPSRQTSBMb2dnaW5nIHRvICRCQl9MT0ciCisKKwkJZWNobyAtbiAiICBQcmVwYXJpbmcgdGhlIHdvcmsgZGlyZWN0b3J5Li4uICIKKwkJcm0gLXJmIHBzZXVkb2RvbmUgdG1wIHNzdGF0ZS1jYWNoZSB0bXAtZWdsaWJjICY+IC9kZXYvbnVsbAorCQllY2hvICJkb25lIgorCisJCSMgRXhwb3J0IHRoZSB2YXJpYWJsZXMgdW5kZXIgdGVzdCBhbmQgcnVuIHRoZSBiaXRiYWtlIGNvbW1hbmQKKwkJIyBTdHJpcCBhbnkgbGVhZGluZyB6ZXJvZXMgYmVmb3JlIHBhc3NpbmcgdG8gYml0YmFrZQorCQlleHBvcnQgQkJfTlVNQkVSX1RIUkVBRFM9JChlY2hvICRCQiB8IHNlZCAncy9eMCovLycpCisJCWV4cG9ydCBQQVJBTExFTF9NQUtFPSItaiAkKGVjaG8gJFBNIHwgc2VkICdzL14wKi8vJykiCisJCS91c3IvYmluL3RpbWUgLWYgIiRCQiAkUE0gJFRJTUVfU1RSIiAtYSAtbyAkUlVOVElNRV9MT0cgJEJCX0NNRCAmPiAkQkJfTE9HCisKKwkJZWNobyAiICAkKHRhaWwgLW4xICRSVU5USU1FX0xPRykiCisJCWNwIC1hIHRtcC9idWlsZHN0YXRzICRSVU5ESVIvJEJCLSRQTS1idWlsZHN0YXRzCisJZG9uZQorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9idWlsZHN0YXRzLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9idWlsZHN0YXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2MTU4YTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2J1aWxkc3RhdHMuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL2Jhc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgR2l2ZW4gYSAnYnVpbGRzdGF0cycgcGF0aCAoY3JlYXRlZCBieSBiaXRiYWtlIHdoZW4gc2V0dGluZworIyBVU0VSX0NMQVNTRVMgPz0gImJ1aWxkc3RhdHMiIG9uIGxvY2FsLmNvbmYpIGFuZCB0YXNrIG5hbWVzLCBvdXRwdXRzCisjICc8dGFzaz4gPHJlY2lwZT4gPGVsYXBzZWQgdGltZT4nIGZvciBhbGwgcmVjaXBlcy4gRWxhcHNlZCB0aW1lcyBhcmUgaW4KKyMgc2Vjb25kcywgYW5kIHRhc2sgc2hvdWxkIGJlIGdpdmVuIHdpdGhvdXQgdGhlICdkb18nIHByZWZpeC4KKyMKKyMgU29tZSB1c2VmdWwgcGlwZWxpbmVzCisjCisjIDEuIFRhc2tzIHdpdGggbGFyZ2VzdCBlbGFwc2VkIHRpbWVzCisjICQgYnVpbGRzdGF0cy5zaCAtYiA8YnVpbGRzdGF0cz4gfCBzb3J0IC1rMyAtbiAtciB8IGhlYWQKKyMKKyMgMi4gTWluLCBtYXgsIHN1bSBwZXIgdGFzayAoaW4gbmVlZHMgR05VIGRhdGFtYXNoKQorIyAkIGJ1aWxkc3RhdHMuc2ggLWIgPGJ1aWxkc3RhdHM+IHwgZGF0YW1hc2ggLXQnICcgLWcxIG1pbiAzIG1heCAzIHN1bSAzIHwgc29ydCAtazQgLW4gLXIKKyMKKyMgQVVUSE9SUworIyBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorIworQlNfRElSPSJ0bXAvYnVpbGRzdGF0cyIKK1RBU0tTPSJjb21waWxlOmNvbmZpZ3VyZTpmZXRjaDppbnN0YWxsOnBhdGNoOnBvcHVsYXRlX2xpYzpwb3B1bGF0ZV9zeXNyb290OnVucGFjayIKKworZnVuY3Rpb24gdXNhZ2UgeworQ01EPSQoYmFzZW5hbWUgJDApCitjYXQgPDxFT00KK1VzYWdlOiAkQ01EIFstYiBidWlsZHN0YXRzX2Rpcl0gWy10IGRvX3Rhc2tdCisgIC1iIGJ1aWxkc3RhdHMgVGhlIHBhdGggd2hlcmUgdGhlIGZvbGRlciByZXNpZGVzCisgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICIkQlNfRElSIikKKyAgLXQgdGFza3MgICAgICBUaGUgdGFza3MgdG8gYmUgY29tcHV0ZWQKKyAgICAgICAgICAgICAgICAoZGVmYXVsdDogIiRUQVNLUyIpCisgIC1oICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZQorRU9NCit9CisKKyMgUGFyc2UgYW5kIHZhbGlkYXRlIGFyZ3VtZW50cword2hpbGUgZ2V0b3B0cyAiYjp0OmgiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwliKQorCQlCU19ESVI9IiRPUFRBUkciCisJCTs7CisJdCkKKwkJVEFTS1M9IiRPUFRBUkciCisJCTs7CisJaCkKKwkJdXNhZ2UKKwkJZXhpdCAwCisJCTs7CisJKikKKwkJdXNhZ2UKKwkJZXhpdCAxCisJCTs7CisJZXNhYworZG9uZQorCisjIEVuc3VyZSB0aGUgYnVpbGRzdGF0cyBmb2xkZXIgZXhpc3RzCitpZiBbICEgLWQgIiRCU19ESVIiIF07IHRoZW4KKwllY2hvICJFUlJPUjogJEJTX0RJUiBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworUkVDSVBFX0ZJRUxEPTEKK1RJTUVfRklFTEQ9NAorCit0YXNrcz0oJHtUQVNLUy8vOi8gfSkKK2ZvciB0YXNrIGluICIke3Rhc2tzW0BdfSI7IGRvCisgICAgdGFzaz0iZG9fJHt0YXNrfSIKKyAgICBmb3IgZmlsZSBpbiAkKGZpbmQgJHtCU19ESVJ9IC10eXBlIGYgLW5hbWUgJHt0YXNrfSk7IGRvCisgICAgICAgIHJlY2lwZT0kKHNlZCAtbiAtZSAiLyR0YXNrL3AiICR7ZmlsZX0gfCBjdXQgLWQgJzonIC1mJHtSRUNJUEVfRklFTER9KQorICAgICAgICB0aW1lPSQoc2VkIC1uIC1lICIvJHRhc2svcCIgJHtmaWxlfSB8IGN1dCAtZCAnOicgLWYke1RJTUVfRklFTER9IHwgY3V0IC1kICcgJyAtZjIpCisgICAgICAgIGVjaG8gIiR7dGFza30gJHtyZWNpcGV9ICR7dGltZX0iCisgICAgZG9uZQorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4OTZkNjQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9iYnZhcnMucHkKQEAgLTAsMCArMSwxODYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIENvcHlyaWdodCAoQykgRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+LCAyMDEwCisKKworaW1wb3J0IHN5cworaW1wb3J0IGdldG9wdAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50ICdVc2FnZTogJXMgLWQgRklMRU5BTUUgWy1kIEZJTEVOQU1FXSogLW0gTUVUQURJUiBbLW0gTUFUQURJUl0qJyAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisgICAgcHJpbnQgJyAgLWQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGZpbGUgdG8gc2VhcmNoJworICAgIHByaW50ICcgIC1oLCAtLWhlbHAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQnCisgICAgcHJpbnQgJyAgLW0gTUVUQURJUiAgICAgICAgICBtZXRhIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIHJlY2lwZXMnCisgICAgcHJpbnQgJyAgLXQgRklMRU5BTUUgICAgICAgICBkb2N1bWVudGF0aW9uIGNvbmZpZyBmaWxlIChmb3IgZG9jIHRhZ3MpJworICAgIHByaW50ICcgIC1UICAgICAgICAgICAgICAgICAgT25seSBkaXNwbGF5IHZhcmlhYmxlcyB3aXRoIGRvYyB0YWdzIChyZXF1aXJlcyAtdCknCisKK2RlZiByZWNpcGVfYmJ2YXJzKHJlY2lwZSk6CisgICAgJycnIFJldHVybiBhIHVuaXF1ZSBzZXQgb2YgZXZlcnkgYmJ2YXIgZW5jb3VudGVyZWQgaW4gdGhlIHJlY2lwZSAnJycKKyAgICBwcm9nID0gcmUuY29tcGlsZSgiW0EtWl9dKyIpCisgICAgdnNldCA9IHNldCgpCisgICAgdHJ5OgorICAgICAgICByID0gb3BlbihyZWNpcGUpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgKGVycm5vLCBzdHJlcnJvcik6CisgICAgICAgIHByaW50ICdXQVJOSU5HOiBGYWlsZWQgdG8gb3BlbiByZWNpcGUgJywgcmVjaXBlCisgICAgICAgIHByaW50IHN0cmVycm9yCisKKyAgICBmb3IgbGluZSBpbiByOgorICAgICAgICAjIFN0cmlwIGFueSBjb21tZW50cyBmcm9tIHRoZSBsaW5lCisgICAgICAgIGxpbmUgPSBsaW5lLnJzcGxpdCgnIycpWzBdCisgICAgICAgIHZzZXQgPSB2c2V0LnVuaW9uKHNldChwcm9nLmZpbmRhbGwobGluZSkpKQorICAgIHIuY2xvc2UoKQorCisgICAgYmJ2YXJzID0ge30KKyAgICBmb3IgdiBpbiB2c2V0OgorICAgICAgICBiYnZhcnNbdl0gPSAxCisKKyAgICByZXR1cm4gYmJ2YXJzCisKK2RlZiBjb2xsZWN0X2JidmFycyhtZXRhZGlyKToKKyAgICAnJycgV2FsayB0aGUgbWV0YWRpciBhbmQgY29sbGVjdCB0aGUgYmJ2YXJzIGZyb20gZWFjaCByZWNpcGUgZm91bmQgJycnCisgICAgYmJ2YXJzID0ge30KKyAgICBmb3Igcm9vdCxkaXJzLGZpbGVzIGluIG9zLndhbGsobWV0YWRpcik6CisgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgbmFtZS5maW5kKCIuYmIiKSA+PSAwOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gcmVjaXBlX2JidmFycyhvcy5wYXRoLmpvaW4ocm9vdCxuYW1lKSkuaXRlcmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgYmJ2YXJzLmhhc19rZXkoa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gYmJ2YXJzW2tleV0gKyAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IDEKKyAgICByZXR1cm4gYmJ2YXJzCisKK2RlZiBiYnZhcl9pc19kb2N1bWVudGVkKHZhciwgZG9jZmlsZXMpOgorICAgIHByb2cgPSByZS5jb21waWxlKCIuKigkfFteQS1aX10pJXMoW15BLVpfXXwkKSIgJSAodmFyKSkKKyAgICBmb3IgZG9jIGluIGRvY2ZpbGVzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3Blbihkb2MpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIChlcnJubywgc3RyZXJyb3IpOgorICAgICAgICAgICAgcHJpbnQgJ1dBUk5JTkc6IEZhaWxlZCB0byBvcGVuIGRvYyAnLCBkb2MKKyAgICAgICAgICAgIHByaW50IHN0cmVycm9yCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBwcm9nLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGYuY2xvc2UoKQorICAgIHJldHVybiBGYWxzZQorCitkZWYgYmJ2YXJfZG9jdGFnKHZhciwgZG9jY29uZik6CisgICAgcHJvZyA9IHJlLmNvbXBpbGUoJ14lc1xbZG9jXF0gKj0gKiIoLiopIicgJSAodmFyKSkKKyAgICBpZiBkb2Njb25mID09ICIiOgorICAgICAgICByZXR1cm4gIj8iCisKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGRvY2NvbmYpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgKGVycm5vLCBzdHJlcnJvcik6CisgICAgICAgIHJldHVybiBzdHJlcnJvcgorCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgbSA9IHByb2cuc2VhcmNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorCisgICAgZi5jbG9zZSgpCisgICAgcmV0dXJuICIiCisKK2RlZiBtYWluKCk6CisgICAgZG9jZmlsZXMgPSBbXQorICAgIG1ldGFkaXJzID0gW10KKyAgICBiYnZhcnMgPSB7fQorICAgIHVuZG9jdW1lbnRlZCA9IFtdCisgICAgZG9jY29uZiA9ICIiCisgICAgb25seWRvY3RhZ3MgPSBGYWxzZQorCisgICAgIyBDb2xsZWN0IGFuZCB2YWxpZGF0ZSBpbnB1dAorICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiZDpobTp0OlQiLCBbImhlbHAiXSkKKyAgICBleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yLCBlcnI6CisgICAgICAgIHByaW50ICclcycgJSBzdHIoZXJyKQorICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6CisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICBlbGlmIG8gPT0gJy1kJzoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGEpOgorICAgICAgICAgICAgICAgIGRvY2ZpbGVzLmFwcGVuZChhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAnRVJST1I6IGRvY3VtZW50YXRpb24gZmlsZSAlcyBpcyBub3QgYSByZWd1bGFyIGZpbGUnICUgKGEpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMykKKyAgICAgICAgZWxpZiBvID09ICctbSc6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGEpOgorICAgICAgICAgICAgICAgIG1ldGFkaXJzLmFwcGVuZChhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAnRVJST1I6IG1ldGEgZGlyZWN0b3J5ICVzIGlzIG5vdCBhIGRpcmVjdG9yeScgJSAoYSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCg0KQorICAgICAgICBlbGlmIG8gPT0gIi10IjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGEpOgorICAgICAgICAgICAgICAgIGRvY2NvbmYgPSBhCisgICAgICAgIGVsaWYgbyA9PSAiLVQiOgorICAgICAgICAgICAgb25seWRvY3RhZ3MgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJ1bmhhbmRsZWQgb3B0aW9uIgorCisgICAgaWYgbGVuKGRvY2ZpbGVzKSA9PSAwOgorICAgICAgICBwcmludCAnRVJST1I6IG5vIGRvY2ZpbGUgc3BlY2lmaWVkJworICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDUpCisKKyAgICBpZiBsZW4obWV0YWRpcnMpID09IDA6CisgICAgICAgIHByaW50ICdFUlJPUjogbm8gbWV0YWRpciBzcGVjaWZpZWQnCisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoNikKKworICAgIGlmIG9ubHlkb2N0YWdzIGFuZCBkb2Njb25mID09ICIiOgorICAgICAgICBwcmludCAnRVJST1I6IG5vIGRvY2NvbmYgc3BlY2lmaWVkJworICAgICAgICB1c2FnZSgpCisgICAgICAgIHN5cy5leGl0KDcpCisKKyAgICAjIENvbGxlY3QgYWxsIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoZSByZWNpcGVzIGluIHRoZSBtZXRhZGlycworICAgIGZvciBtIGluIG1ldGFkaXJzOgorICAgICAgICBmb3Iga2V5LGNudCBpbiBjb2xsZWN0X2JidmFycyhtKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGJidmFycy5oYXNfa2V5KGtleSk6CisgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSBiYnZhcnNba2V5XSArIGNudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IGNudAorCisgICAgIyBDaGVjayBlYWNoIHZhciBmb3IgZG9jdW1lbnRhdGlvbgorICAgIHZhcmxlbiA9IDAKKyAgICBmb3IgdiBpbiBiYnZhcnMuaXRlcmtleXMoKToKKyAgICAgICAgaWYgbGVuKHYpID4gdmFybGVuOgorICAgICAgICAgICAgdmFybGVuID0gbGVuKHYpCisgICAgICAgIGlmIG5vdCBiYnZhcl9pc19kb2N1bWVudGVkKHYsIGRvY2ZpbGVzKToKKyAgICAgICAgICAgIHVuZG9jdW1lbnRlZC5hcHBlbmQodikKKyAgICB1bmRvY3VtZW50ZWQuc29ydCgpCisgICAgdmFybGVuID0gdmFybGVuICsgMQorCisgICAgIyBSZXBvcnQgYWxsIHVuZG9jdW1lbnRlZCB2YXJpYWJsZXMKKyAgICBwcmludCAnRm91bmQgJWQgdW5kb2N1bWVudGVkIGJiIHZhcmlhYmxlcyAob3V0IG9mICVkKTonICUgKGxlbih1bmRvY3VtZW50ZWQpLCBsZW4oYmJ2YXJzKSkKKyAgICBoZWFkZXIgPSAnJXMlcyVzJyAlIChzdHIoIlZBUklBQkxFIikubGp1c3QodmFybGVuKSwgc3RyKCJDT1VOVCIpLmxqdXN0KDYpLCBzdHIoIkRPQ1RBRyIpLmxqdXN0KDcpKQorICAgIHByaW50IGhlYWRlcgorICAgIHByaW50IHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykKKyAgICBmb3IgdiBpbiB1bmRvY3VtZW50ZWQ6CisgICAgICAgIGRvY3RhZyA9IGJidmFyX2RvY3RhZyh2LCBkb2Njb25mKQorICAgICAgICBpZiBub3Qgb25seWRvY3RhZ3Mgb3Igbm90IGRvY3RhZyA9PSAiIjoKKyAgICAgICAgICAgIHByaW50ICclcyVzJXMnICUgKHYubGp1c3QodmFybGVuKSwgc3RyKGJidmFyc1t2XSkubGp1c3QoNiksIGRvY3RhZykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkZDc4ODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9idWlsZC1wZXJmLXRlc3Quc2gKQEAgLTAsMCArMSwzNjkgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFRoaXMgc2NyaXB0IHJ1bnMgYSBzZXJpZXMgb2YgdGVzdHMgICh3aXRoIGFuZCB3aXRob3V0IHNzdGF0ZSkgYW5kIHJlcG9ydHMgYnVpbGQgdGltZSAoYW5kIHRtcC8gc2l6ZSkKKyMgCisjIEJ1aWxkIHBlcmZvcm1hbmNlIHRlc3Qgc2NyaXB0CisjCisjIENvcHlyaWdodCAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKyMKKyMgQVVUSE9SUzoKKyMgU3RlZmFuIFN0YW5hY2FyIDxzdGVmYW54LnN0YW5hY2FyQGludGVsLmNvbT4KKworCitNRT0kKGJhc2VuYW1lICQwKQorCisjCisjIHVzYWdlIGFuZCBzZXR1cAorIworCit1c2FnZSAoKSB7CitjYXQgPDwgRU9UCitVc2FnZTogJE1FIFstaF0KKyAgICAgICAkTUUgWy1jIDxjb21taXQ+XSBbLXZdIFstbSA8dmFsPl0gWy1qIDx2YWw+XSBbLXQgPHZhbD5dIFstaSA8aW1hZ2UtbmFtZT5dIFstZCA8cGF0aD5dCitPcHRpb25zOgorICAgICAgICAtaAorICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorICAgICAgICAtYyA8Y29tbWl0PgorICAgICAgICAgICAgICAgIGdpdCBjaGVja291dCA8Y29tbWl0PiBiZWZvcmUgYW55dGhpbmcgZWxzZQorICAgICAgICAtdgorICAgICAgICAgICAgICAgIFNob3cgYml0YmFrZSBvdXRwdXQsIGRvbid0IHJlZGlyZWN0IGl0IHRvIGEgbG9nLgorICAgICAgICAtbSA8bWFjaGluZT4KKyAgICAgICAgICAgICAgICBWYWx1ZSBmb3IgTUFDSElORS4gRGVmYXVsdCBpcyBxZW11eDg2LgorICAgICAgICAtaiA8dmFsPgorICAgICAgICAgICAgICAgIFZhbHVlIGZvciBQQVJBTExFTF9NQUtFLiBEZWZhdWx0IGlzIDguIAorICAgICAgICAtdCA8dmFsPgorICAgICAgICAgICAgICAgIFZhbHVlIGZvciBCQl9OVU1CRVJfVEhSRUFEUy4gRGVmYXVsdCBpcyA4LgorICAgICAgICAtaSA8aW1hZ2UtbmFtZT4KKyAgICAgICAgICAgICAgICBJbnN0ZWFkIG9mIHRpbWluZyBhZ2FpbnN0IGNvcmUtaW1hZ2Utc2F0bywgdXNlIDxpbWFnZS1uYW1lPgorICAgICAgICAtZCA8cGF0aD4KKyAgICAgICAgICAgICAgICBVc2UgPHBhdGg+IGFzIERMX0RJUgorICAgICAgICAtcCA8Z2l0aGFzaD4KKyAgICAgICAgICAgICAgICBDaGVycnkgcGljayBnaXRoYXNoIG9udG8gdGhlIGNvbW1pdAorICAgICAgICAgICAgICAgIAorTm90ZTogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBtdXN0IGJlIGluc2lkZSBhIHBva3kgZ2l0IGNsb25lLgorIAorRU9UCit9CisKKworaWYgY2xvbmVkaXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCk7IHRoZW4KKyAgICAgICAgY2QgJGNsb25lZGlyCitlbHNlCisgICAgICAgIGVjaG8gIlRoZSBjdXJyZW50IHdvcmtpbmcgZGlyIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHBva3kgZ2l0IGNsb25lLiBQbGVhc2UgY2QgdGhlcmUgYmVmb3JlIHJ1bm5pbmcgJE1FIgorICAgICAgICBleGl0IDEKK2ZpCisKK0lNQUdFPSJjb3JlLWltYWdlLXNhdG8iCit2ZXJib3NlPTAKK2RsZGlyPQorY29tbWl0PQorcG1ha2U9CitjaGVycnlwaWNrcz0KK3doaWxlIGdldG9wdHMgImh2YzptOmo6dDppOmQ6cDoiIG9wdDsgZG8KKyAgICAgICAgY2FzZSAkb3B0IGluCisgICAgICAgICAgICAgICAgaCkgICAgICB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIHYpICAgICAgdmVyYm9zZT0xCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGMpICAgICAgY29tbWl0PSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgbSkgICAgICBleHBvcnQgTUFDSElORT0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGopICAgICAgcG1ha2U9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICB0KSAgICAgIGV4cG9ydCBCQl9OVU1CRVJfVEhSRUFEUz0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGkpICAgICAgSU1BR0U9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBkKSAgICAgIGRsZGlyPSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgcCkgICAgICBjaGVycnlwaWNrcz0iJGNoZXJyeXBpY2tzICRPUFRBUkciCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopICAgICAgdXNhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgICAgICAgICAgOzsgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGVzYWMKK2RvbmUKKworCisjZHJvcCBjYWNoZWQgY3JlZGVudGlhbHMgYW5kIHRlc3QgZm9yIHN1ZG8gYWNjZXNzIHdpdGhvdXQgYSBwYXNzd29yZAorc3VkbyAtayAtbiBscyA+IC9kZXYvbnVsbCAyPiYxCityZXFwYXNzPSQ/CitpZiBbICRyZXFwYXNzIC1uZSAwIF07IHRoZW4KKyAgICBlY2hvICJUaGUgc2NyaXB0IHJlcXVpcmVzIHN1ZG8gYWNjZXNzIHRvIGRyb3AgY2FjaGVzIGJldHdlZW4gYnVpbGRzIChlY2hvIDMgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMpIgorICAgIHJlYWQgLXMgLXAgIlBsZWFzZSBlbnRlciB5b3VyIHN1ZG8gcGFzc3dvcmQ6ICIgcGFzcworICAgIGVjaG8KK2ZpCisKK2lmIFsgLW4gIiRjb21taXQiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gImdpdCBjaGVja291dCAtZiAkY29tbWl0IgorICAgICAgICAgICAgZ2l0IHB1bGwgPiAvZGV2L251bGwgMj4mMQorICAgICAgICAgICAgZ2l0IGNoZWNrb3V0IC1mICRjb21taXQgfHwgZXhpdCAxCisgICAgICAgICAgICBnaXQgcHVsbCA+IC9kZXYvbnVsbCAyPiYxCitmaQorCitpZiBbIC1uICIkY2hlcnJ5cGlja3MiIF07IHRoZW4KKyAgICBmb3IgYyBpbiAkY2hlcnJ5cGlja3M7IGRvCisgICAgICAgIGdpdCBjaGVycnktcGljayAkYworICAgIGRvbmUKK2ZpCisKK3Jldj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAgfHwgZXhpdCAxCitPVVRESVI9IiRjbG9uZWRpci9idWlsZC1wZXJmLXRlc3QvcmVzdWx0cy0kcmV2LWBkYXRlICIrJVklbSVkJUglTSVTImAiCitCVUlMRERJUj0iJE9VVERJUi9idWlsZCIKK3Jlc3VsdHNmaWxlPSIkT1VURElSL3Jlc3VsdHMubG9nIgorYmJvdXRwdXQ9IiRPVVRESVIvYml0YmFrZS5sb2ciCitteW91dHB1dD0iJE9VVERJUi9vdXRwdXQubG9nIgorZ2xvYmFscmVzPSIkY2xvbmVkaXIvYnVpbGQtcGVyZi10ZXN0L2dsb2JhbHJlcy5sb2ciCisKK21rZGlyIC1wICRPVVRESVIgfHwgZXhpdCAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorbG9nICgpIHsKKyAgICBsb2NhbCBtc2c9IiQxIgorICAgIGVjaG8gImBkYXRlYDogJG1zZyIgfCB0ZWUgLWEgJG15b3V0cHV0Cit9CisKKworIworIyBDb25maWcgc3R1ZmYKKyMKKworYnJhbmNoPWBnaXQgYnJhbmNoIDI+JjEgfCBncmVwICJeKiAiIHwgdHIgLWQgIiogImAKK2dpdGNvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgIHx8IGV4aXQgMQorbG9nICJSdW5uaW5nIG9uICRicmFuY2g6JGdpdGNvbW1pdCIKKworc291cmNlIC4vb2UtaW5pdC1idWlsZC1lbnYgJE9VVERJUi9idWlsZCA+L2Rldi9udWxsIHx8IGV4aXQgMQorY2QgJE9VVERJUi9idWlsZAorCitbIC1uICIkTUFDSElORSIgXSB8fCBleHBvcnQgTUFDSElORT0icWVtdXg4NiIKK1sgLW4gIiRCQl9OVU1CRVJfVEhSRUFEUyIgXSB8fCBleHBvcnQgQkJfTlVNQkVSX1RIUkVBRFM9IjgiCisKK2lmIFsgLW4gIiRwbWFrZSIgXTsgdGhlbgorICAgICAgICBleHBvcnQgUEFSQUxMRUxfTUFLRT0iLWogJHBtYWtlIgorZWxzZQorICAgICAgICBleHBvcnQgUEFSQUxMRUxfTUFLRT0iLWogOCIKK2ZpCisKK2lmIFsgLW4gIiRkbGRpciIgXTsgdGhlbgorICAgIGVjaG8gIkRMX0RJUiA9IFwiJGRsZGlyXCIiID4+IGNvbmYvbG9jYWwuY29uZgorZWxzZQorICAgIGVjaG8gIkRMX0RJUiA9IFwiJGNsb25lZGlyL2J1aWxkLXBlcmYtdGVzdC9kb3dubG9hZHNcIiIgPj4gY29uZi9sb2NhbC5jb25mCitmaQorCisjIFNvbWV0aW1lcyBJJ3ZlIG5vdGljZWQgYmlnIGRpZmZlcmVuY2VzIGluIHRpbWluZ3MgZm9yIHRoZSBzYW1lIGNvbW1pdCwgb24gdGhlIHNhbWUgbWFjaGluZQorIyBEaXNhYmxpbmcgdGhlIG5ldHdvcmsgc2FuaXR5IGNoZWNrIGhlbHBzIGEgYml0IChiZWNhdXNlIG9mIG15IGNyYXBweSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kL29yIHByb3h5KQorZWNobyAiQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgPVwiXCIiID4+IGNvbmYvbG9jYWwuY29uZgorCisKKyMKKyMgRnVuY3Rpb25zCisjCisKK2RlY2xhcmUgLWEgVElNRVMKK3RpbWVfY291bnQ9MAorZGVjbGFyZSAtYSBTSVpFUworc2l6ZV9jb3VudD0wCisKK2JidGltZSAoKSB7CisgICAgbG9jYWwgYXJnPSIkQCIKKyAgICBsb2cgIiAgIFRpbWluZzogYml0YmFrZSAke2FyZ30iCisKKyAgICBpZiBbICR2ZXJib3NlIC1lcSAwIF07IHRoZW4gCisgICAgICAgIC91c3IvYmluL3RpbWUgLXYgLW8gJHJlc3VsdHNmaWxlIGJpdGJha2UgJHthcmd9ID4+ICRiYm91dHB1dAorICAgIGVsc2UKKyAgICAgICAgL3Vzci9iaW4vdGltZSAtdiAtbyAkcmVzdWx0c2ZpbGUgYml0YmFrZSAke2FyZ30KKyAgICBmaQorICAgIHJldD0kPworICAgIGlmIFsgJHJldCAtZXEgMCBdOyB0aGVuCisgICAgICAgIHQ9YGdyZXAgd2FsbCAkcmVzdWx0c2ZpbGUgfCBzZWQgJ3MvLiptOnNzKTogLy8nYAorICAgICAgICBsb2cgIiAgIFRJTUU6ICR0IgorICAgICAgICBUSU1FU1soKCB0aW1lX2NvdW50KysgKSldPSIkdCIKKyAgICBlbHNlCisgICAgICAgIGxvZyAiRVJST1I6IGV4aXQgc3RhdHVzIHdhcyBub24temVybywgd2lsbCByZXBvcnQgdGltZSBhcyAwLiIKKyAgICAgICAgVElNRVNbKCggdGltZV9jb3VudCsrICkpXT0iMCIKKyAgICBmaQorICAgIAorICAgICN0aW1lIGJ5IGRlZmF1bHQgb3ZlcndyaXRlcyB0aGUgb3V0cHV0IGZpbGUgYW5kIHdlICB3YW50IHRvIGtlZXAgdGhlIHJlc3VsdHMKKyAgICAjaXQgaGFzIGFuIGFwcGVuZCBvcHRpb24gYnV0IEkgZG9uJ3Qgd2FudCB0byBjbG9iYmVyIHRoZSByZXN1bHRzIGluIHRoZSBzYW1lIGZpbGUKKyAgICBpPWBscyAkT1VURElSL3Jlc3VsdHMubG9nKiB8d2MgLWxgCisgICAgbXYgJHJlc3VsdHNmaWxlICIke3Jlc3VsdHNmaWxlfS4ke2l9IgorICAgIGxvZyAiTW9yZSBzdGF0cyBjYW4gYmUgZm91bmQgaW4gJHtyZXN1bHRzZmlsZX0uJHtpfSIgICAgCit9CisKKyN3ZSBkb24ndCB0aW1lIGJpdGJha2UgaGVyZQorYmJub3RpbWUgKCkgeworICAgIGxvY2FsIGFyZz0iJEAiCisgICAgbG9nICIgICBSdW5uaW5nOiBiaXRiYWtlICR7YXJnfSIKKyAgICBpZiBbICR2ZXJib3NlIC1lcSAwIF07IHRoZW4KKyAgICAgICAgYml0YmFrZSAke2FyZ30gPj4gJGJib3V0cHV0CisgICAgZWxzZQorICAgICAgICBiaXRiYWtlICR7YXJnfQorICAgIGZpCisgICAgcmV0PSQ/CisgICAgaWYgWyAkcmV0IC1lcSAwIF07IHRoZW4KKyAgICAgICAgbG9nICIgICBGaW5pc2hlZCBiaXRiYWtlICR7YXJnfSIKKyAgICBlbHNlCisgICAgICAgIGxvZyAiRVJST1I6IGV4aXQgc3RhdHVzIHdhcyBub24temVyby4gRXhpdC4uIgorICAgICAgICBleGl0ICRyZXQKKyAgICBmaQorCit9CisKK2RvX3JtdG1wKCkgeworICAgIGxvZyAiICAgUmVtb3ZpbmcgdG1wIgorICAgIHJtIC1yZiBiaXRiYWtlLmxvY2sgcHNldWRvZG9uZSBjb25mL3Nhbml0eV9pbmZvIGNhY2hlIHRtcAorfQorZG9fcm1zc3RhdGUgKCkgeworICAgIGxvZyAiICAgUmVtb3Zpbmcgc3N0YXRlLWNhY2hlIgorICAgIHJtIC1yZiBzc3RhdGUtY2FjaGUKK30KK2RvX3N5bmMgKCkgeworICAgIGxvZyAiICAgU3luY2luZyBhbmQgZHJvcHBpbmcgY2FjaGVzIgorICAgIHN5bmM7IHN5bmMKKyAgICBpZiBbICRyZXFwYXNzIC1lcSAwIF07IHRoZW4KKyAgICAgICAgc3VkbyBzaCAtYyAiZWNobyAzID4gL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJHBhc3MiIHwgc3VkbyAtUyBzaCAtYyAiZWNobyAzID4gL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzIgorICAgICAgICBlY2hvCisgICAgZmkKKyAgICBzbGVlcCAzCit9CisKK3dyaXRlX3Jlc3VsdHMoKSB7CisgICAgZWNobyAtbiAiYHVuYW1lIC1uYCwkYnJhbmNoOiRnaXRjb21taXQsYGdpdCBkZXNjcmliZWAsIiA+PiAkZ2xvYmFscmVzCisgICAgZm9yIGkgaW4gIiR7VElNRVNbQF19IjsgZG8KKyAgICAgICAgZWNobyAtbiAiJGksIiA+PiAkZ2xvYmFscmVzCisgICAgZG9uZQorICAgIGZvciBpIGluICIke1NJWkVTW0BdfSI7IGRvCisgICAgICAgIGVjaG8gLW4gIiRpLCIgPj4gJGdsb2JhbHJlcworICAgIGRvbmUKKyAgICBlY2hvID4+ICRnbG9iYWxyZXMKKyAgICBzZWQgLWkgJyQgcy8sJC8vJyAkZ2xvYmFscmVzCit9CisKKyMjIyMKKworIworIyBUZXN0IDEKKyMgTWVhc3VyZTogV2FsbCBjbG9jayBvZiAiYml0YmFrZSBjb3JlLWltYWdlLXNhdG8iIGFuZCBzaXplIG9mIHRtcC9kaXIgKHcvbyBybV93b3JrIGFuZCB3LyBybV93b3JrKQorIyBQcmU6IERvd25sb2FkZWQgc291cmNlcywgbm8gc3N0YXRlCisjIFN0ZXBzOgorIyAgICAgUGFydDE6CisjICAgICAgICAtIGZldGNoYWxsIAorIyAgICAgICAgLSBjbGVhbiBidWlsZCBkaXIKKyMgICAgICAgIC0gdGltZSBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworIyAgICAgICAgLSBjb2xsZWN0IGRhdGEKKyMgICAgIFBhcnQyOgorIyAgICAgICAgLSBiaXRiYWtlIHZpcnR1YWwva2VybmVsIC1jIGNsZWFuc3N0YXRlCisjICAgICAgICAtIHRpbWUgYml0YmFrZSB2aXJ0dWFsL2tlcm5lbAorIyAgICAgUGFydDM6CisjICAgICAgICAtIGFkZCBJTkhFUklUIHRvIGxvY2FsLmNvbmYKKyMgICAgICAgIC0gY2xlYW4gYnVpbGQgZGlyCisjICAgICAgICAtIGJ1aWxkCisjICAgICAgICAtIHJlcG9ydCBzaXplLCByZW1vdmUgSU5IRVJJVAorCit0ZXN0MV9wMSAoKSB7CisgICAgbG9nICJSdW5uaW5nIFRlc3QgMSwgcGFydCAxLzM6IE1lYXN1cmUgd2FsbCBjbG9jayBvZiBiaXRiYWtlICRJTUFHRSBhbmQgc2l6ZSBvZiB0bXAvIGRpciIKKyAgICBiYm5vdGltZSAkSU1BR0UgLWMgZmV0Y2hhbGwKKyAgICBkb19ybXRtcAorICAgIGRvX3Jtc3N0YXRlCisgICAgZG9fc3luYworICAgIGJidGltZSAkSU1BR0UKKyAgICBzPWBkdSAtcyB0bXAgfCBzZWQgJ3MvdG1wLy8nIHwgc2VkICdzL1sgXHRdKiQvLydgCisgICAgU0laRVNbKCggc2l6ZV9jb3VudCsrICkpXT0iJHMiCisgICAgbG9nICJTSVpFIG9mIHRtcCBkaXIgaXM6ICRzIgorICAgIGxvZyAiQnVpbGRzdGF0cyBhcmUgc2F2ZWQgaW4gJE9VVERJUi9idWlsZHN0YXRzLXRlc3QxIgorICAgIG12IHRtcC9idWlsZHN0YXRzICRPVVRESVIvYnVpbGRzdGF0cy10ZXN0MQorfQorCisKK3Rlc3QxX3AyICgpIHsKKyAgICBsb2cgIlJ1bm5pbmcgVGVzdCAxLCBwYXJ0IDIvMzogYml0YmFrZSB2aXJ0dWFsL2tlcm5lbCAtYyBjbGVhbnNzdGF0ZSBhbmQgdGltZSBiaXRiYWtlIHZpcnR1YWwva2VybmVsIgorICAgIGJibm90aW1lIHZpcnR1YWwva2VybmVsIC1jIGNsZWFuc3N0YXRlCisgICAgZG9fc3luYworICAgIGJidGltZSB2aXJ0dWFsL2tlcm5lbAorfQorCit0ZXN0MV9wMyAoKSB7CisgICAgbG9nICJSdW5uaW5nIFRlc3QgMSwgcGFydCAzLzM6IEJ1aWxkICRJTUFHRSB3L28gc3N0YXRlIGFuZCByZXBvcnQgc2l6ZSBvZiB0bXAvZGlyIHdpdGggcm1fd29yayBlbmFibGVkIgorICAgIGVjaG8gIklOSEVSSVQgKz0gXCJybV93b3JrXCIiID4+IGNvbmYvbG9jYWwuY29uZgorICAgIGRvX3JtdG1wCisgICAgZG9fcm1zc3RhdGUKKyAgICBkb19zeW5jCisgICAgYmJ0aW1lICRJTUFHRQorICAgIHNlZCAtaSAncy9JTkhFUklUICs9IFwicm1fd29ya1wiLy8nIGNvbmYvbG9jYWwuY29uZgorICAgIHM9YGR1IC1zIHRtcCB8IHNlZCAncy90bXAvLycgfCBzZWQgJ3MvWyBcdF0qJC8vJ2AKKyAgICBTSVpFU1soKCBzaXplX2NvdW50KysgKSldPSIkcyIKKyAgICBsb2cgIlNJWkUgb2YgdG1wIGRpciBpczogJHMiCisgICAgbG9nICJCdWlsZHN0YXRzIGFyZSBzYXZlZCBpbiAkT1VURElSL2J1aWxkc3RhdHMtdGVzdDEzIgorICAgIG12IHRtcC9idWlsZHN0YXRzICRPVVRESVIvYnVpbGRzdGF0cy10ZXN0MTMKK30KKworCisjCisjIFRlc3QgMgorIyBNZWFzdXJlOiBXYWxsIGNsb2NrIG9mICJiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byIgYW5kIHNpemUgb2YgdG1wL2RpcgorIyBQcmU6IHBvcHVsYXRlZCBzc3RhdGUgY2FjaGUKKwordGVzdDIgKCkgeworICAgICMgQXNzdW1pbmcgdGVzdCAxIGhhcyBydW4KKyAgICBsb2cgIlJ1bm5pbmcgVGVzdCAyOiBNZWFzdXJlIHdhbGwgY2xvY2sgb2YgYml0YmFrZSAkSU1BR0UgLWMgcm9vdGZzIHdpdGggc3N0YXRlIgorICAgIGRvX3JtdG1wCisgICAgZG9fc3luYworICAgIGJidGltZSAkSU1BR0UgLWMgcm9vdGZzCit9CisKKworIyBUZXN0IDMKKyMgcGFyc2luZyB0aW1lIG1ldHJpY3MKKyMKKyMgIFN0YXJ0IHdpdGgKKyMgICBpKSAicm0gLXJmIHRtcC9jYWNoZTsgdGltZSBiaXRiYWtlIC1wIgorIyAgaWkpICJybSAtcmYgdG1wL2NhY2hlL2RlZmF1bHQtZ2xpYmMvOyB0aW1lIGJpdGJha2UgLXAiCisjIGlpaSkgInRpbWUgYml0YmFrZSAtcCIKKworCit0ZXN0MyAoKSB7CisgICAgbG9nICJSdW5uaW5nIFRlc3QgMzogUGFyc2luZyB0aW1lIG1ldHJpY3MgKGJpdGJha2UgLXApIgorICAgIGxvZyAiICAgUmVtb3ZpbmcgdG1wL2NhY2hlICYmIGNhY2hlIgorICAgIHJtIC1yZiB0bXAvY2FjaGUgY2FjaGUKKyAgICBiYnRpbWUgLXAKKyAgICBsb2cgIiAgIFJlbW92aW5nIHRtcC9jYWNoZS9kZWZhdWx0LWdsaWJjLyIKKyAgICBybSAtcmYgdG1wL2NhY2hlL2RlZmF1bHQtZ2xpYmMvCisgICAgYmJ0aW1lIC1wCisgICAgYmJ0aW1lIC1wCit9CisKKworCisjIFJVTiEKKwordGVzdDFfcDEKK3Rlc3QxX3AyCit0ZXN0MV9wMwordGVzdDIKK3Rlc3QzCisKKyMgaWYgd2UgZ290IHRpbCBoZXJlIHdyaXRlIHRvIGdsb2JhbCByZXN1bHRzCit3cml0ZV9yZXN1bHRzCisKK2xvZyAiQWxsIGRvbmUsIGNsZWFuaW5nIHVwLi4uIgorCitkb19ybXRtcAorZG9fcm1zc3RhdGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RkaW1hZ2UgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1MDNmMTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kZGltYWdlCkBAIC0wLDAgKzEsMTA0IEBACisjIS9iaW4vc2gKKworIyBEZWZhdWx0IHRvIGF2b2lkaW5nIHRoZSBmaXJzdCB0d28gZGlza3Mgb24gdHlwaWNhbCBMaW51eCBhbmQgTWFjIE9TIGluc3RhbGxzCisjIEJldHRlciBzYWZlIHRoYW4gc29ycnkgOi0pCitCTEFDS0xJU1RfREVWSUNFUz0iL2Rldi9zZGEgL2Rldi9zZGIgL2Rldi9kaXNrMSAvZGV2L2Rpc2syIgorCisjIDFNQiBibG9ja3NpemUKK0JMT0NLU0laRT0xMDQ4NTc2CisKK3VzYWdlKCkgeworCWVjaG8gIlVzYWdlOiAkKGJhc2VuYW1lICQwKSBJTUFHRSBERVZJQ0UiCit9CisKK2ltYWdlX2RldGFpbHMoKSB7CisJSU1HPSQxCisJZWNobyAiSW1hZ2UgZGV0YWlscyIKKwllY2hvICI9PT09PT09PT09PT09IgorCWVjaG8gIiAgICBpbWFnZTogJChiYXNlbmFtZSAkSU1HKSIKKwkjIHN0YXQgZm9ybWF0IGlzIGRpZmZlcmVudCBvbiBNYWMgT1MgYW5kIExpbnV4CisJaWYgWyAiJCh1bmFtZSkiID0gIkRhcndpbiIgXTsgdGhlbgorCQllY2hvICIgICAgIHNpemU6ICQoc3RhdCAtTCAtZiAnJXogYnl0ZXMnICRJTUcpIgorCQllY2hvICIgbW9kaWZpZWQ6ICQoc3RhdCAtTCAtZiAnJVNtJyAkSU1HKSIKKwllbHNlCisJCWVjaG8gIiAgICAgc2l6ZTogJChzdGF0IC1MIC1jICclcyBieXRlcycgJElNRykiCisJCWVjaG8gIiBtb2RpZmllZDogJChzdGF0IC1MIC1jICcleScgJElNRykiCisJZmkKKwllY2hvICIgICAgIHR5cGU6ICQoZmlsZSAtTCAtYiAkSU1HKSIKKwllY2hvICIiCit9CisKK2RldmljZV9kZXRhaWxzKCkgeworCURFVj0kMQorCUJMT0NLX1NJWkU9NTEyCisKKwllY2hvICJEZXZpY2UgZGV0YWlscyIKKwllY2hvICI9PT09PT09PT09PT09PSIKKworCSMgQ29sbGVjdCBkaXNrIGluZm8gdXNpbmcgZGlza3V0aWwgb24gTWFjIE9TCisJaWYgWyAiJCh1bmFtZSkiID0gIkRhcndpbiIgXTsgdGhlbgorCQlkaXNrdXRpbCBpbmZvICRERVZJQ0UgfCBlZ3JlcCAiKERldmljZSBOb2RlfE1lZGlhIE5hbWV8VG90YWwgU2l6ZSkiCisJCXJldHVybgorCWZpCisKKwkjIERlZmF1bHQgLyBMaW51eCBpbmZvcm1hdGlvbiBjb2xsZWN0aW9uCisJZWNobyAiICBkZXZpY2U6ICRERVZJQ0UiCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS92ZW5kb3IiIF07IHRoZW4KKwkJZWNobyAiICB2ZW5kb3I6ICQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvdmVuZG9yKSIKKwllbHNlCisJCWVjaG8gIiAgdmVuZG9yOiBVTktPV04iCisJZmkKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsIiBdOyB0aGVuCisJCWVjaG8gIiAgIG1vZGVsOiAkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsKSIKKwllbHNlCisJCWVjaG8gIiAgIG1vZGVsOiBVTktOT1dOIgorCWZpCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL3NpemUiIF07IHRoZW4KKwkJZWNobyAiICAgIHNpemU6ICQoKCQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9zaXplKSAqICRCTE9DS19TSVpFKSkgYnl0ZXMiCisJZWxzZQorCQllY2hvICIgICAgc2l6ZTogVU5LTk9XTiIKKwlmaQorCWVjaG8gIiIKK30KKworaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK0lNQUdFPSQxCitERVZJQ0U9JDIKKworaWYgWyAhIC1lICIkSU1BR0UiIF07IHRoZW4KKwllY2hvICJFUlJPUjogSW1hZ2UgJElNQUdFIGRvZXMgbm90IGV4aXN0IgorCXVzYWdlCisJZXhpdCAxCitmaQorCisKK2ZvciBpIGluICR7QkxBQ0tMSVNUX0RFVklDRVN9OyBkbworCWlmIFsgIiRpIiA9ICIkREVWSUNFIiBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBEZXZpY2UgJERFVklDRSBpcyBibGFja2xpc3RlZCIKKwkJZXhpdCAxCisJZmkKK2RvbmUKKworaWYgWyAhIC13ICIkREVWSUNFIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IERldmljZSAkREVWSUNFIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCB3cml0YWJsZSIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworaW1hZ2VfZGV0YWlscyAkSU1BR0UKK2RldmljZV9kZXRhaWxzICQoYmFzZW5hbWUgJERFVklDRSkKKworcHJpbnRmICJXcml0ZSAkSU1BR0UgdG8gJERFVklDRSBbeS9OXT8gIgorcmVhZCBSRVNQT05TRQoraWYgWyAiJFJFU1BPTlNFIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIldyaXRlIGFib3J0ZWQiCisJZXhpdCAwCitmaQorCitlY2hvICJXcml0aW5nIGltYWdlLi4uIgorZGQgaWY9IiRJTUFHRSIgb2Y9IiRERVZJQ0UiIGJzPSIkQkxPQ0tTSVpFIgorc3luYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9kaWFsb2ctcG93ZXItY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTUwZWE1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjCisjIFNpbXBsZSBzY3JpcHQgdG8gc2hvdyBhIG1hbnVhbCBwb3dlciBwcm9tcHQgZm9yIHdoZW4geW91IHdhbnQgdG8gdXNlCisjIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nIHdpdGggdGVzdGltYWdlLmJiY2xhc3MgYnV0IHlvdSBkb24ndCBoYXZlIGEKKyMgd2ViLWVuYWJsZWQgcG93ZXIgc3RyaXAgb3Igc2ltaWxhciB0byBkbyB0aGUgcG93ZXIgb24vb2ZmL2N5Y2xlLgorIworIyBZb3UgY2FuIGVuYWJsZSBpdCBieSBlbmFibGluZyB0ZXN0aW1hZ2UgKHNlZSB0aGUgWW9jdG8gUHJvamVjdAorIyBEZXZlbG9wbWVudCBtYW51YWwgIlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZyIgc2VjdGlvbikKKyMgYW5kIHNldHRpbmcgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGxvY2FsLmNvbmY6CisjCisjIFRFU1RfUE9XRVJDT05UUk9MX0NNRCA9ICIke0NPUkVCQVNFfS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wiCisjCisKK1BST01QVD0iIgord2hpbGUgdHJ1ZTsgZG8KKyAgICBjYXNlICQxIGluCisgICAgICAgIG9uKQorICAgICAgICAgICAgUFJPTVBUPSJQbGVhc2UgdHVybiBkZXZpY2UgcG93ZXIgb24iOzsKKyAgICAgICAgb2ZmKQorICAgICAgICAgICAgUFJPTVBUPSJQbGVhc2UgdHVybiBkZXZpY2UgcG93ZXIgb2ZmIjs7CisgICAgICAgIGN5Y2xlKQorICAgICAgICAgICAgUFJPTVBUPSJQbGVhc2UgY2xpY2sgRG9uZSwgdGhlbiB0dXJuIHRoZSBkZXZpY2UgcG93ZXIgb2ZmIHRoZW4gb24iOzsKKyAgICAgICAgIiIpCisgICAgICAgICAgICBicmVhazs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKK2lmIFsgIiRQUk9NUFQiID0gIiIgXSA7IHRoZW4KKyAgICBlY2hvICJFUlJPUjogbm8gcG93ZXIgYWN0aW9uIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUiCisgICAgZXhpdCAyCitmaQorCitpZiBbICJgd2hpY2gga2RpYWxvZyAyPi9kZXYvbnVsbGAiICE9ICIiIF0gOyB0aGVuCisgICAgRElBTE9HVVRJTD0ia2RpYWxvZyIKK2VsaWYgWyAiYHdoaWNoIHplbml0eSAyPi9kZXYvbnVsbGAiICE9ICIiIF0gOyB0aGVuCisgICAgRElBTE9HVVRJTD0iemVuaXR5IgorZWxzZQorICAgIGVjaG8gIkVSUk9SOiBjb3VsZG4ndCBmaW5kIHByb2dyYW0gdG8gZGlzcGxheSBhIG1lc3NhZ2UsIGluc3RhbGwga2RpYWxvZyBvciB6ZW5pdHkiCisgICAgZXhpdCAzCitmaQorCitpZiBbICIkRElBTE9HVVRJTCIgPSAia2RpYWxvZyIgXSA7IHRoZW4KKyAgICBrZGlhbG9nIC0teWVzbm8gIiRQUk9NUFQiIC0tdGl0bGUgIlRlc3RJbWFnZSBQb3dlciBDb250cm9sIiAtLXllcy1sYWJlbCAiRG9uZSIgLS1uby1sYWJlbCAiQ2FuY2VsIHRlc3QiCitlbGlmIFsgIiRESUFMT0dVVElMIiA9ICJ6ZW5pdHkiIF0gOyB0aGVuCisgICAgemVuaXR5IC0tcXVlc3Rpb24gLS10ZXh0PSIkUFJPTVBUIiAtLXRpdGxlPSJUZXN0SW1hZ2UgUG93ZXIgQ29udHJvbCIgLS1vay1sYWJlbD0iRG9uZSIgLS1jYW5jZWwtbGFiZWw9IkNhbmNlbCB0ZXN0IgorZmkKKworaWYgWyAiJD8iICE9ICIwIiBdIDsgdGhlbgorICAgIGVjaG8gIlVzZXIgY2FuY2VsbGVkIHRlc3QgYXQgcG93ZXIgcHJvbXB0IgorICAgIGV4aXQgMQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZG9jdW1lbnRhdGlvbi1hdWRpdC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RvY3VtZW50YXRpb24tYXVkaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjE0NGFhYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2RvY3VtZW50YXRpb24tYXVkaXQuc2gKQEAgLTAsMCArMSw5NCBAQAorIyEvYmluL2Jhc2gKKyMKKyMgUGVyZm9ybSBhbiBhdWRpdCBvZiB3aGljaCBwYWNrYWdlcyBwcm92aWRlIGRvY3VtZW50YXRpb24gYW5kIHdoaWNoCisjIGFyZSBtaXNzaW5nIC1kb2MgcGFja2FnZXMuCisjCisjIFNldHVwIHJlcXVpcmVtZW50czogYmUgc3VyZSB0byBiZSBidWlsZGluZyBmb3IgTUFDSElORT1xZW11eDg2LiBSdW4KKyMgdGhpcyBzY3JpcHQgYWZ0ZXIgc291cmNlJ2luZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0LCBzbyB5b3UncmUKKyMgcnVubmluZyBpdCBmcm9tIGJ1aWxkLyBkaXJlY3RvcnkuCisjCisjIE1haW50YWluZXI6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitSRVBPUlRfRE9DX1NJTVBMRT0iZG9jdW1lbnRhdGlvbl9leGlzdHMudHh0IgorUkVQT1JUX0RPQ19ERVRBSUw9ImRvY3VtZW50YXRpb25fZXhpc3RzX2RldGFpbC50eHQiCitSRVBPUlRfTUlTU0lOR19TSU1QTEU9ImRvY3VtZW50YXRpb25fbWlzc2luZy50eHQiCitSRVBPUlRfTUlTU0lOR19ERVRBSUw9ImRvY3VtZW50YXRpb25fbWlzc2luZ19kZXRhaWwudHh0IgorUkVQT1JUX0JVSUxEX0VSUk9SUz0iYnVpbGRfZXJyb3JzLnR4dCIKKworcm0gLXJmICRSRVBPUlRfRE9DX1NJTVBMRSAkUkVQT1JUX0RPQ19ERVRBSUwgJFJFUE9SVF9NSVNTSU5HX1NJTVBMRSAkUkVQT1JUX01JU1NJTkdfREVUQUlMCisKK0JJVEJBS0U9YHdoaWNoIGJpdGJha2VgCitpZiBbIC16ICIkQklUQkFLRSIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBiaXRiYWtlIGNvbW1hbmQgbm90IGZvdW5kLiIKKwllY2hvICJEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdD8iCisJZXhpdCAxCitmaQorCitlY2hvICJSRU1JTkRFUjogeW91IG5lZWQgdG8gYnVpbGQgZm9yIE1BQ0hJTkU9cWVtdXg4NiBvciB5b3Ugd29uJ3QgZ2V0IHVzZWZ1bCByZXN1bHRzIgorZWNobyAiUkVNSU5ERVI6IHlvdSBuZWVkIHRvIHNldCBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCBhcHByb3ByaWF0ZWx5IGluIGxvY2FsLmNvbmYgb3IgIgorZWNobyAiIHlvdSdsbCBnZXQgZmFsc2UgcG9zaXRpdmVzLiAgRm9yIGV4YW1wbGUsIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gXCJDb21tZXJjaWFsXCIiCisKK2ZvciBwa2cgaW4gYGJpdGJha2UgLXMgfCBhd2sgJ3sgcHJpbnQgXCQxIH0nYDsgZG8KKwlpZiBbWyAiJHBrZyIgPT0gIkxvYWRpbmciIHx8ICIkcGtnIiA9PSAiTG9hZGVkIiB8fAorCSAgIiRwa2ciID09ICJSZWNpcGUiICB8fAorICAgICAgICAgICIkcGtnIiA9PSAiUGFyc2luZyIgfHwgIiRwa2ciID09ICJQYWNrYWdlIiB8fAorICAgICAgICAgICIkcGtnIiA9PSAiTk9URToiICAgfHwgIiRwa2ciID09ICJXQVJOSU5HOiIgfHwKKyAgICAgICAgICAiJHBrZyIgPT0gImRvbmUuIiAgIHx8ICIkcGtnIiA9PSAiPT09PT09PT09PT0iIF1dCisJdGhlbgorCQkjIFNraXAgaW5pdGlhbCBiaXRiYWtlIG91dHB1dAorCQljb250aW51ZQorCWZpCisJaWYgW1sgIiRwa2ciID1+IC1uYXRpdmUkIHx8ICIkcGtnIiA9fiAtbmF0aXZlc2RrJCB8fAorICAgICAgICAgICIkcGtnIiA9fiAtY3Jvc3MtY2FuYWRpYW4gXV07IHRoZW4KKwkJIyBTa2lwIG5hdGl2ZS9uYXRpdmVzZGsvY3Jvc3MtY2FuYWRpYW4gcmVjaXBlcworCQljb250aW51ZQorCWZpCisJaWYgW1sgIiRwa2ciID1+IF5tZXRhLSB8fCAiJHBrZyIgPX4gXnBhY2thZ2Vncm91cC0gfHwgIiRwa2ciID1+IC1pbWFnZSBdXTsgdGhlbgorCQkjIFNraXAgbWV0YSwgdGFzayBhbmQgaW1hZ2UgcmVjaXBlcworCQljb250aW51ZQorCWZpCisJaWYgW1sgIiRwa2ciID1+IF5nbGliYy0gfHwgIiRwa2ciID1+IF5saWJpY29udiQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gLXRvb2xjaGFpbiQgfHwgIiRwa2ciID1+IF5wYWNrYWdlLWluZGV4JCB8fAorICAgICAgICAgICIkcGtnIiA9fiBebGludXgtIHx8ICIkcGtnIiA9fiBeYWR0LWluc3RhbGxlciQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gXmVkcy10b29scyQgfHwgIiRwa2ciID1+IF5leHRlcm5hbC1weXRob24tdGFyYmFsbCQgfHwKKyAgICAgICAgICAiJHBrZyIgPX4gXnF0NC1lbWJlZGRlZCQgfHwgIiRwa2ciID1+IF5xdC1tb2JpbGl0eSBdXTsgdGhlbgorCQkjIFNraXAgZ2xpYmMsIGxpYmljb252LCAtdG9vbGNoYWluLCBhbmQgb3RoZXIgcmVjaXBlcyBrbm93bgorCQkjIHRvIGNhdXNlIGJ1aWxkIGNvbmZsaWN0cyBvciB0cmlnZ2VyIGZhbHNlIHBvc2l0aXZlcy4KKwkJY29udGludWUKKwlmaQkKKworCWVjaG8gIkJ1aWxkaW5nIHBhY2thZ2UgJHBrZy4uLiIKKwliaXRiYWtlICRwa2cgPiAvZGV2L251bGwKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJZWNobyAiVGhlcmUgd2FzIGFuIGVycm9yIGJ1aWxkaW5nIHBhY2thZ2UgJHBrZyIgPj4gIiRSRVBPUlRfTUlTU0lOR19ERVRBSUwiCisJCWVjaG8gIiRwa2ciID4+ICRSRVBPUlRfQlVJTERfRVJST1JTCisKKwkJIyBEbyBub3Qgc2tpcCB0aGUgcmVtYWluaW5nIHRlc3RzLCBhcyBzb21ldGltZXMgdGhlCisJCSMgZXhpdCBzdGF0dXMgaXMgMSBkdWUgdG8gUUEgZXJyb3JzLCBhbmQgd2UgY2FuIHN0aWxsCisJCSMgcGVyZm9ybSB0aGUgLWRvYyBjaGVja3MuCisJZmkKKworCWVjaG8gIiRwa2cgYnVpbHQgc3VjY2Vzc2Z1bGx5LCBjaGVja2luZyBmb3IgYSBkb2N1bWVudGF0aW9uIHBhY2thZ2UuLi4iCisJV09SS0RJUj1gYml0YmFrZSAtZSAkcGtnIHwgZ3JlcCBeV09SS0RJUiB8IGF3ayAtRiAnPScgJ3sgcHJpbnQgXCQyIH0nIHwgYXdrIC1GICciJyAneyBwcmludCBcJDIgfSdgCisJRklORF9ET0NfUEtHPWBmaW5kICRXT1JLRElSL3BhY2thZ2VzLXNwbGl0LyotZG9jIC1tYXhkZXB0aCAwIC10eXBlIGRgCisJaWYgWyAteiAiJEZJTkRfRE9DX1BLRyIgXTsgdGhlbgorCQkjIE5vIC1kb2MgcGFja2FnZSB3YXMgZ2VuZXJhdGVkOgorCQllY2hvICJObyAtZG9jIHBhY2thZ2U6ICRwa2ciID4+ICIkUkVQT1JUX01JU1NJTkdfREVUQUlMIgorCQllY2hvICIkcGtnIiA+PiAkUkVQT1JUX01JU1NJTkdfU0lNUExFCisJCWNvbnRpbnVlCisJZmkKKworCUZJTkRfRE9DX0ZJTEVTPWBmaW5kICRGSU5EX0RPQ19QS0cgLXR5cGUgZmAKKwlpZiBbIC16ICIkRklORF9ET0NfRklMRVMiIF07IHRoZW4KKwkJIyBObyBmaWxlcyBzaGlwcGVkIHdpdGggdGhlIC1kb2MgcGFja2FnZToKKwkJZWNobyAiTm8gZmlsZXMgc2hpcHBlZCB3aXRoIHRoZSAtZG9jIHBhY2thZ2U6ICRwa2ciID4+ICIkUkVQT1JUX01JU1NJTkdfREVUQUlMIgorCQllY2hvICIkcGtnIiA+PiAkUkVQT1JUX01JU1NJTkdfU0lNUExFCisJCWNvbnRpbnVlCisJZmkKKworCWVjaG8gIkRvY3VtZW50YXRpb24gc2hpcHBlZCB3aXRoICRwa2c6IiA+PiAiJFJFUE9SVF9ET0NfREVUQUlMIgorCWVjaG8gIiRGSU5EX0RPQ19GSUxFUyIgPj4gIiRSRVBPUlRfRE9DX0RFVEFJTCIKKwllY2hvICIiCT4+ICIkUkVQT1JUX0RPQ19ERVRBSUwiCisKKwllY2hvICIkcGtnIiA+PiAiJFJFUE9SVF9ET0NfU0lNUExFIgorZG9uZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvZ3JhcGgtdG9vbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2dyYXBoLXRvb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRjN2QzMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2dyYXBoLXRvb2wKQEAgLTAsMCArMSw5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgU2ltcGxlIGdyYXBoIHF1ZXJ5IHV0aWxpdHkKKyMgdXNlZnVsIGZvciBnZXR0aW5nIGFuc3dlcnMgZnJvbSAuZG90IGZpbGVzIHByb2R1Y2VkIGJ5IGJpdGJha2UgLWcKKyMKKyMgV3JpdHRlbiBieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgc3lzCisKK2RlZiBnZXRfcGF0aF9uZXR3b3JreChkb3RmaWxlLCBmcm9tbm9kZSwgdG9ub2RlKToKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBuZXR3b3JreAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcHJpbnQoJ0VSUk9SOiBQbGVhc2UgaW5zdGFsbCB0aGUgbmV0d29ya3ggcHl0aG9uIG1vZHVsZScpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBncmFwaCA9IG5ldHdvcmt4LkRpR3JhcGgobmV0d29ya3gucmVhZF9kb3QoZG90ZmlsZSkpCisKKyAgICBkZWYgbm9kZV9taXNzaW5nKG5vZGUpOgorICAgICAgICBpbXBvcnQgZGlmZmxpYgorICAgICAgICBjbG9zZV9tYXRjaGVzID0gZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlcyhub2RlLCBncmFwaC5ub2RlcygpLCBjdXRvZmY9MC43KQorICAgICAgICBpZiBjbG9zZV9tYXRjaGVzOgorICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiBubyBub2RlICIlcyIgaW4gZ3JhcGguIENsb3NlIG1hdGNoZXM6XG4gICVzJyAlIChub2RlLCAnXG4gICcuam9pbihjbG9zZV9tYXRjaGVzKSkpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3QgZnJvbW5vZGUgaW4gZ3JhcGg6CisgICAgICAgIG5vZGVfbWlzc2luZyhmcm9tbm9kZSkKKyAgICBpZiBub3QgdG9ub2RlIGluIGdyYXBoOgorICAgICAgICBub2RlX21pc3NpbmcodG9ub2RlKQorICAgIHJldHVybiBuZXR3b3JreC5hbGxfc2ltcGxlX3BhdGhzKGdyYXBoLCBzb3VyY2U9ZnJvbW5vZGUsIHRhcmdldD10b25vZGUpCisKKworZGVmIGZpbmRfcGF0aHMoYXJncywgdXNhZ2UpOgorICAgIGlmIGxlbihhcmdzKSA8IDM6CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZyb21ub2RlID0gYXJnc1sxXQorICAgIHRvbm9kZSA9IGFyZ3NbMl0KKyAgICBwYXRocyA9IGxpc3QoZ2V0X3BhdGhfbmV0d29ya3goYXJnc1swXSwgZnJvbW5vZGUsIHRvbm9kZSkpCisgICAgaWYgcGF0aHM6CisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgcHJpbnQgJyAtPiAnLmpvaW4ocGF0aCkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiRVJST1I6IG5vIHBhdGggZnJvbSAlcyB0byAlcyBpbiBncmFwaCIgJSAoZnJvbW5vZGUsIHRvbm9kZSkpCisgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IG9wdHBhcnNlCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB1c2FnZSA9ICcnJyVwcm9nIFtvcHRpb25zXSA8Y29tbWFuZD4gPGFyZ3VtZW50cz4KKworQXZhaWxhYmxlIGNvbW1hbmRzOgorICAgIGZpbmQtcGF0aHMgPGRvdGZpbGU+IDxmcm9tPiA8dG8+CisgICAgICAgIEZpbmQgYWxsIG9mIHRoZSBwYXRocyBiZXR3ZWVuIHR3byBub2RlcyBpbiBhIGRvdCBncmFwaCcnJykKKworICAgICNwYXJzZXIuYWRkX29wdGlvbigiLWQiLCAiLS1kZWJ1ZyIsCisgICAgIyAgICAgICAgaGVscCA9ICJSZXBvcnQgYWxsIFNSQ1JFViB2YWx1ZXMsIG5vdCBqdXN0IG9uZXMgd2hlcmUgQVVUT1JFViBoYXMgYmVlbiB1c2VkIiwKKyAgICAjICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQ9RmFsc2UpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisgICAgYXJncyA9IGFyZ3NbMTpdCisKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBhcmdzWzBdID09ICJmaW5kLXBhdGhzIjoKKyAgICAgICAgZmluZF9wYXRocyhhcmdzWzE6XSwgcGFyc2VyLnByaW50X2hlbHApCisgICAgZWxzZToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9saXN0LXBhY2thZ2Vjb25maWctZmxhZ3MucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9saXN0LXBhY2thZ2Vjb25maWctZmxhZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmYzYjhiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL2xpc3QtcGFja2FnZWNvbmZpZy1mbGFncy5weQpAQCAtMCwwICsxLDE3OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgLSBsaXN0IGF2YWlsYWJsZSByZWNpcGVzIHdoaWNoIGhhdmUgUEFDS0FHRUNPTkZJRyBmbGFncworIyAtIGxpc3QgYXZhaWxhYmxlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgYW5kIGFsbCBhZmZlY3RlZCByZWNpcGVzCisjIC0gbGlzdCBhbGwgcmVjaXBlcyBhbmQgUEFDS0FHRUNPTkZJRyBpbmZvcm1hdGlvbgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzY3JpcHRzX3BhdGggKyAnLy4uL2xpYicpCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitpbXBvcnQgc2NyaXB0cGF0aAorCisjIEZvciBpbXBvcnRpbmcgdGhlIGZvbGxvd2luZyBtb2R1bGVzCitiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQoraWYgbm90IGJpdGJha2VwYXRoOgorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICBzeXMuZXhpdCgxKQorCitpbXBvcnQgYmIuY2FjaGUKK2ltcG9ydCBiYi5jb29rZXIKK2ltcG9ydCBiYi5wcm92aWRlcnMKK2ltcG9ydCBiYi50aW5mb2lsCisKK2RlZiBnZXRfZm5saXN0KGJiaGFuZGxlciwgcGtnX3BuLCBwcmVmZXJyZWQpOgorICAgICcnJyBHZXQgYWxsIHJlY2lwZSBmaWxlIG5hbWVzICcnJworICAgIGlmIHByZWZlcnJlZDoKKyAgICAgICAgKGxhdGVzdF92ZXJzaW9ucywgcHJlZmVycmVkX3ZlcnNpb25zKSA9IGJiLnByb3ZpZGVycy5maW5kUHJvdmlkZXJzKGJiaGFuZGxlci5jb25maWdfZGF0YSwgYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSwgcGtnX3BuKQorCisgICAgZm5fbGlzdCA9IFtdCisgICAgZm9yIHBuIGluIHNvcnRlZChwa2dfcG4pOgorICAgICAgICBpZiBwcmVmZXJyZWQ6CisgICAgICAgICAgICBmbl9saXN0LmFwcGVuZChwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm5fbGlzdC5leHRlbmQocGtnX3BuW3BuXSkKKworICAgIHJldHVybiBmbl9saXN0CisKK2RlZiBnZXRfcmVjaXBlc2RhdGEoYmJoYW5kbGVyLCBwcmVmZXJyZWQpOgorICAgICcnJyBHZXQgZGF0YSBvZiBhbGwgYXZhaWxhYmxlIHJlY2lwZXMgd2hpY2ggaGF2ZSBQQUNLQUdFQ09ORklHIGZsYWdzICcnJworICAgIHBrZ19wbiA9IGJiaGFuZGxlci5jb29rZXIucmVjaXBlY2FjaGUucGtnX3BuCisKKyAgICBkYXRhX2RpY3QgPSB7fQorICAgIGZvciBmbiBpbiBnZXRfZm5saXN0KGJiaGFuZGxlciwgcGtnX3BuLCBwcmVmZXJyZWQpOgorICAgICAgICBkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBiYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKyAgICAgICAgZmxhZ3MgPSBkYXRhLmdldFZhckZsYWdzKCJQQUNLQUdFQ09ORklHIikKKyAgICAgICAgZmxhZ3MucG9wKCdkb2MnLCBOb25lKQorICAgICAgICBpZiBmbGFnczoKKyAgICAgICAgICAgIGRhdGFfZGljdFtmbl0gPSBkYXRhCisKKyAgICByZXR1cm4gZGF0YV9kaWN0CisKK2RlZiBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KToKKyAgICAnJycgQ29sbGVjdCBhdmFpbGFibGUgcGtncyBpbiB3aGljaCBoYXZlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgJycnCisgICAgIyBwa2dfZGljdCA9IHsncGtnMSc6IFsnZmxhZzEnLCAnZmxhZzInLC4uLl19CisgICAgcGtnX2RpY3QgPSB7fQorICAgIGZvciBmbiBpbiBkYXRhX2RpY3Q6CisgICAgICAgIHBrZ2NvbmZpZ2ZsYWdzID0gZGF0YV9kaWN0W2ZuXS5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpCisgICAgICAgIHBrZ2NvbmZpZ2ZsYWdzLnBvcCgnZG9jJywgTm9uZSkKKyAgICAgICAgcGtnbmFtZSA9IGRhdGFfZGljdFtmbl0uZ2V0VmFyKCJQIiwgVHJ1ZSkKKyAgICAgICAgcGtnX2RpY3RbcGtnbmFtZV0gPSBzb3J0ZWQocGtnY29uZmlnZmxhZ3Mua2V5cygpKQorCisgICAgcmV0dXJuIHBrZ19kaWN0CisKK2RlZiBjb2xsZWN0X2ZsYWdzKHBrZ19kaWN0KToKKyAgICAnJycgQ29sbGVjdCBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhbmQgYWxsIGFmZmVjdGVkIHBrZ3MgJycnCisgICAgIyBmbGFnX2RpY3QgPSB7J2ZsYWcnOiBbJ3BrZzEnLCAncGtnMicsLi4uXX0KKyAgICBmbGFnX2RpY3QgPSB7fQorICAgIGZvciBwa2duYW1lLCBmbGFnbGlzdCBpbiBwa2dfZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ2xpc3Q6CisgICAgICAgICAgICBpZiBmbGFnIGluIGZsYWdfZGljdDoKKyAgICAgICAgICAgICAgICBmbGFnX2RpY3RbZmxhZ10uYXBwZW5kKHBrZ25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZsYWdfZGljdFtmbGFnXSA9IFtwa2duYW1lXQorCisgICAgcmV0dXJuIGZsYWdfZGljdAorCitkZWYgZGlzcGxheV9wa2dzKHBrZ19kaWN0KToKKyAgICAnJycgRGlzcGxheSBhdmFpbGFibGUgcGtncyB3aGljaCBoYXZlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgJycnCisgICAgcGtnbmFtZV9sZW4gPSBsZW4oIlJFQ0lQRSBOQU1FIikgKyAxCisgICAgZm9yIHBrZ25hbWUgaW4gcGtnX2RpY3Q6CisgICAgICAgIGlmIHBrZ25hbWVfbGVuIDwgbGVuKHBrZ25hbWUpOgorICAgICAgICAgICAgcGtnbmFtZV9sZW4gPSBsZW4ocGtnbmFtZSkKKyAgICBwa2duYW1lX2xlbiArPSAxCisKKyAgICBoZWFkZXIgPSAnJS0qcyVzJyAlIChwa2duYW1lX2xlbiwgc3RyKCJSRUNJUEUgTkFNRSIpLCBzdHIoIlBBQ0tBR0VDT05GSUcgRkxBR1MiKSkKKyAgICBwcmludCBoZWFkZXIKKyAgICBwcmludCBzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpCisgICAgZm9yIHBrZ25hbWUgaW4gc29ydGVkKHBrZ19kaWN0KToKKyAgICAgICAgcHJpbnQoJyUtKnMlcycgJSAocGtnbmFtZV9sZW4sIHBrZ25hbWUsICcgJy5qb2luKHBrZ19kaWN0W3BrZ25hbWVdKSkpCisKKworZGVmIGRpc3BsYXlfZmxhZ3MoZmxhZ19kaWN0KToKKyAgICAnJycgRGlzcGxheSBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhbmQgYWxsIGFmZmVjdGVkIHBrZ3MgJycnCisgICAgZmxhZ19sZW4gPSBsZW4oIlBBQ0tBR0VDT05GSUcgRkxBRyIpICsgNQorCisgICAgaGVhZGVyID0gJyUtKnMlcycgJSAoZmxhZ19sZW4sIHN0cigiUEFDS0FHRUNPTkZJRyBGTEFHIiksIHN0cigiUkVDSVBFIE5BTUVTIikpCisgICAgcHJpbnQgaGVhZGVyCisgICAgcHJpbnQgc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKQorCisgICAgZm9yIGZsYWcgaW4gc29ydGVkKGZsYWdfZGljdCk6CisgICAgICAgIHByaW50KCclLSpzJXMnICUgKGZsYWdfbGVuLCBmbGFnLCAnICAnLmpvaW4oc29ydGVkKGZsYWdfZGljdFtmbGFnXSkpKSkKKworZGVmIGRpc3BsYXlfYWxsKGRhdGFfZGljdCk6CisgICAgJycnIERpc3BsYXkgYWxsIHBrZ3MgYW5kIFBBQ0tBR0VDT05GSUcgaW5mb3JtYXRpb24gJycnCisgICAgcHJpbnQgc3RyKCIiKS5sanVzdCg1MCwgJz0nKQorICAgIGZvciBmbiBpbiBkYXRhX2RpY3Q6CisgICAgICAgIHByaW50KCclcycgJSBkYXRhX2RpY3RbZm5dLmdldFZhcigiUCIsIFRydWUpKQorICAgICAgICBwcmludCBmbgorICAgICAgICBwYWNrYWdlY29uZmlnID0gZGF0YV9kaWN0W2ZuXS5nZXRWYXIoIlBBQ0tBR0VDT05GSUciLCBUcnVlKSBvciAnJworICAgICAgICBpZiBwYWNrYWdlY29uZmlnLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICBwYWNrYWdlY29uZmlnID0gJ05vbmUnCisgICAgICAgIHByaW50KCdQQUNLQUdFQ09ORklHICVzJyAlIHBhY2thZ2Vjb25maWcpCisKKyAgICAgICAgZm9yIGZsYWcsZmxhZ192YWwgaW4gZGF0YV9kaWN0W2ZuXS5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcHJpbnQoJ1BBQ0tBR0VDT05GSUdbJXNdICVzJyAlIChmbGFnLCBmbGFnX3ZhbCkpCisgICAgICAgIHByaW50ICcnCisKK2RlZiBtYWluKCk6CisgICAgcGtnX2RpY3QgPSB7fQorICAgIGZsYWdfZGljdCA9IHt9CisKKyAgICAjIENvbGxlY3QgYW5kIHZhbGlkYXRlIGlucHV0CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbiA9ICJMaXN0cyByZWNpcGVzIGFuZCBQQUNLQUdFQ09ORklHIGZsYWdzLiBXaXRob3V0IC1hIG9yIC1mLCByZWNpcGVzIGFuZCB0aGVpciBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhcmUgbGlzdGVkLiIsCisgICAgICAgIHVzYWdlID0gIiIiCisgICAgJXByb2cgW29wdGlvbnNdIiIiKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmxhZ3MiLAorICAgICAgICAgICAgaGVscCA9ICJsaXN0IGF2YWlsYWJsZSBQQUNLQUdFQ09ORklHIGZsYWdzIGFuZCBhZmZlY3RlZCByZWNpcGVzIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBkZXN0PSJsaXN0dHlwZSIsIGNvbnN0PSJmbGFncyIsIGRlZmF1bHQ9InJlY2lwZXMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLWFsbCIsCisgICAgICAgICAgICBoZWxwID0gImxpc3QgYWxsIHJlY2lwZXMgYW5kIFBBQ0tBR0VDT05GSUcgaW5mb3JtYXRpb24iLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9jb25zdCIsIGRlc3Q9Imxpc3R0eXBlIiwgY29uc3Q9ImFsbCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tcHJlZmVycmVkLW9ubHkiLAorICAgICAgICAgICAgaGVscCA9ICJ3aGVyZSBtdWx0aXBsZSByZWNpcGUgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgbGlzdCBvbmx5IHRoZSBwcmVmZXJyZWQgdmVyc2lvbiIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJwcmVmZXJyZWQiLCBkZWZhdWx0PUZhbHNlKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgYmJoYW5kbGVyID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICBiYmhhbmRsZXIucHJlcGFyZSgpCisgICAgcHJpbnQoIkdhdGhlcmluZyByZWNpcGUgZGF0YS4uLiIpCisgICAgZGF0YV9kaWN0ID0gZ2V0X3JlY2lwZXNkYXRhKGJiaGFuZGxlciwgb3B0aW9ucy5wcmVmZXJyZWQpCisKKyAgICBpZiBvcHRpb25zLmxpc3R0eXBlID09ICdmbGFncyc6CisgICAgICAgIHBrZ19kaWN0ID0gY29sbGVjdF9wa2dzKGRhdGFfZGljdCkKKyAgICAgICAgZmxhZ19kaWN0ID0gY29sbGVjdF9mbGFncyhwa2dfZGljdCkKKyAgICAgICAgZGlzcGxheV9mbGFncyhmbGFnX2RpY3QpCisgICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdyZWNpcGVzJzoKKyAgICAgICAgcGtnX2RpY3QgPSBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KQorICAgICAgICBkaXNwbGF5X3BrZ3MocGtnX2RpY3QpCisgICAgZWxpZiBvcHRpb25zLmxpc3R0eXBlID09ICdhbGwnOgorICAgICAgICBkaXNwbGF5X2FsbChkYXRhX2RpY3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Q0ZGUwNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaApAQCAtMCwwICsxLDQ1NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorIyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK0xBTkc9QworCisjIFNldCB0byAxIHRvIGVuYWJsZSBhZGRpdGlvbmFsIG91dHB1dAorREVCVUc9MAorT1VUPSIvZGV2L251bGwiCisKKyMKKyMgRGVmYXVsdHMKKyMKKyMgMjAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorQk9PVF9TSVpFPTIwCisjIDUlIGZvciBzd2FwCitTV0FQX1JBVElPPTUKKworIyBDbGVhbnVwIGFmdGVyIGRpZSgpCitjbGVhbnVwKCkgeworCWRlYnVnICJTeW5jaW5nIGFuZCB1bm1vdW50aW5nIGRldmljZXMiCisJIyBVbm1vdW50IGFueXRoaW5nIHdlIG1vdW50ZWQKKwl1bm1vdW50ICRST09URlNfTU5UIHx8IGVycm9yICJGYWlsZWQgdG8gdW5tb3VudCAkUk9PVEZTX01OVCIKKwl1bm1vdW50ICRCT09URlNfTU5UIHx8IGVycm9yICJGYWlsZWQgdG8gdW5tb3VudCAkQk9PVEZTX01OVCIKKwl1bm1vdW50ICRIRERJTUdfUk9PVEZTX01OVCB8fCBlcnJvciAiRmFpbGVkIHRvIHVubW91bnQgJEhERElNR19ST09URlNfTU5UIgorCXVubW91bnQgJEhERElNR19NTlQgfHwgZXJyb3IgIkZhaWxlZCB0byB1bm1vdW50ICRIRERJTUdfTU5UIgorCisJIyBSZW1vdmUgdGhlIFRNUERJUgorCWRlYnVnICJSZW1vdmluZyB0ZW1wb3JhcnkgZmlsZXMiCisJaWYgWyAtZCAiJFRNUERJUiIgXTsgdGhlbgorCQlybSAtcmYgJFRNUERJUiB8fCBlcnJvciAiRmFpbGVkIHRvIHJlbW92ZSAkVE1QRElSIgorCWZpCit9CisKK3RyYXAgJ2RpZSAiU2lnbmFsIFJlY2VpdmVkLCBBYm9ydGluZy4uLiInIEhVUCBJTlQgVEVSTQorCisjIExvZ2dpbmcgcm91dGluZXMKK1dBUk5JTkdTPTAKK0VSUk9SUz0wCitDTEVBUj0iJCh0cHV0IHNncjApIgorSU5GTz0iJCh0cHV0IGJvbGQpIgorUkVEPSIkKHRwdXQgc2V0YWYgMSkkKHRwdXQgYm9sZCkiCitHUkVFTj0iJCh0cHV0IHNldGFmIDIpJCh0cHV0IGJvbGQpIgorWUVMTE9XPSIkKHRwdXQgc2V0YWYgMykkKHRwdXQgYm9sZCkiCitpbmZvKCkgeworCWVjaG8gIiR7SU5GT30kMSR7Q0xFQVJ9IgorfQorZXJyb3IoKSB7CisJRVJST1JTPSQoKEVSUk9SUysxKSkKKwllY2hvICIke1JFRH0kMSR7Q0xFQVJ9IgorfQord2FybigpIHsKKwlXQVJOSU5HUz0kKChXQVJOSU5HUysxKSkKKwllY2hvICIke1lFTExPV30kMSR7Q0xFQVJ9IgorfQorc3VjY2VzcygpIHsKKwllY2hvICIke0dSRUVOfSQxJHtDTEVBUn0iCit9CitkaWUoKSB7CisJZXJyb3IgIiQxIgorCWNsZWFudXAKKwlleGl0IDEKK30KK2RlYnVnKCkgeworCWlmIFsgJERFQlVHIC1lcSAxIF07IHRoZW4KKwkJZWNobyAiJDEiCisJZmkKK30KKwordXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQoYmFzZW5hbWUgJDApIFstdl0gREVWSUNFIEhERElNRyBUQVJHRVRfREVWSUNFIgorCWVjaG8gIiAgICAgICAtdjogVmVyYm9zZSBkZWJ1ZyIKKwllY2hvICIgICAgICAgREVWSUNFOiBUaGUgZGV2aWNlIHRvIHdyaXRlIHRoZSBpbWFnZSB0bywgZS5nLiAvZGV2L3NkaCIKKwllY2hvICIgICAgICAgSERESU1HOiBUaGUgaGRkaW1nIGZpbGUgdG8gZ2VuZXJhdGUgdGhlIGVmaSBkaXNrIGZyb20iCisJZWNobyAiICAgICAgIFRBUkdFVF9ERVZJQ0U6IFRoZSBkZXZpY2UgdGhlIHRhcmdldCB3aWxsIGJvb3QgZnJvbSwgZS5nLiAgL2Rldi9tbWNibGswIgorfQorCitpbWFnZV9kZXRhaWxzKCkgeworCUlNRz0kMQorCWluZm8gIkltYWdlIGRldGFpbHMiCisJZWNobyAiICAgIGltYWdlOiAkKHN0YXQgLS1wcmludGYgJyVOXG4nICRJTUcpIgorCWVjaG8gIiAgICAgc2l6ZTogJChzdGF0IC1MIC0tcHJpbnRmICclcyBieXRlc1xuJyAkSU1HKSIKKwllY2hvICIgbW9kaWZpZWQ6ICQoc3RhdCAtTCAtLXByaW50ZiAnJXlcbicgJElNRykiCisJZWNobyAiICAgICB0eXBlOiAkKGZpbGUgLUwgLWIgJElNRykiCisJZWNobyAiIgorfQorCitkZXZpY2VfZGV0YWlscygpIHsKKwlERVY9JDEKKwlCTE9DS19TSVpFPTUxMgorCisJaW5mbyAiRGV2aWNlIGRldGFpbHMiCisJZWNobyAiICBkZXZpY2U6ICRERVZJQ0UiCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS92ZW5kb3IiIF07IHRoZW4KKwkJZWNobyAiICB2ZW5kb3I6ICQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvdmVuZG9yKSIKKwllbHNlCisJCWVjaG8gIiAgdmVuZG9yOiBVTktPV04iCisJZmkKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsIiBdOyB0aGVuCisJCWVjaG8gIiAgIG1vZGVsOiAkKGNhdCAvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL21vZGVsKSIKKwllbHNlCisJCWVjaG8gIiAgIG1vZGVsOiBVTktOT1dOIgorCWZpCisJaWYgWyAtZiAiL3N5cy9jbGFzcy9ibG9jay8kREVWL3NpemUiIF07IHRoZW4KKwkJZWNobyAiICAgIHNpemU6ICQoKCQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9zaXplKSAqICRCTE9DS19TSVpFKSkgYnl0ZXMiCisJZWxzZQorCQllY2hvICIgICAgc2l6ZTogVU5LTk9XTiIKKwlmaQorCWVjaG8gIiIKK30KKwordW5tb3VudF9kZXZpY2UoKSB7CisJZ3JlcCAtcSAkREVWSUNFIC9wcm9jL21vdW50cworCWlmIFsgJD8gLWVxIDAgXTsgdGhlbgorCQl3YXJuICIkREVWSUNFIGxpc3RlZCBpbiAvcHJvYy9tb3VudHMsIGF0dGVtcHRpbmcgdG8gdW5tb3VudCIKKwkJdW1vdW50ICRERVZJQ0UqIDI+L2Rldi9udWxsCisJCXJldHVybiAkPworCWZpCisJcmV0dXJuIDAKK30KKwordW5tb3VudCgpIHsKKwlpZiBbICIkMSIgPSAiIiBdIDsgdGhlbgorCQlyZXR1cm4gMAorCWZpCisJZ3JlcCAtcSAkMSAvcHJvYy9tb3VudHMKKwlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJZGVidWcgIlVubW91bnRpbmcgJDEiCisJCXVtb3VudCAkMQorCQlyZXR1cm4gJD8KKwlmaQorCXJldHVybiAwCit9CisKKyMKKyMgUGFyc2UgYW5kIHZhbGlkYXRlIGFyZ3VtZW50cworIworaWYgWyAkIyAtbHQgMyBdIHx8IFsgJCMgLWd0IDQgXTsgdGhlbgorICAgIGlmIFsgJCMgLWVxIDEgXTsgdGhlbgorICAgICAgICBBVkFJTEFCTEVfRElTSz1gbHNibGsgfCBncmVwICJkaXNrIiB8IGN1dCAtZiAxIC1kICIgImAKKyAgICAgICAgWD0wCisgICAgICAgIGZvciBkaXNrIGluIGBlY2hvICRBVkFJTEFCTEVfRElTS2A7IGRvCisgICAgICAgICAgICBtb3VudGVkPWBsc2JsayAvZGV2LyRkaXNrIHwgYXdrIHsncHJpbnQgJDcnfSB8IHNlZCAicy9NT1VOVFBPSU5ULy8iYAorICAgICAgICAgICAgaWYgWyAteiAiJG1vdW50ZWQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBVTk1PVU5URURfQVZBSUxBQkxFUz0iJFVOTU9VTlRFRF9BVkFJTEFCTEVTIC9kZXYvJGRpc2siCisgICAgICAgICAgICAgICAgaW5mbyAiJFggLSAvZGV2LyRkaXNrIgorICAgICAgICAgICAgICAgIFg9YGV4cHIgJFggKyAxYAorICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBpZiBbICRYIC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgIGRpZSAiTm8gdW5tb3VudGVkIGRldmljZSBmb3VuZC4iCisgICAgICAgIGZpCisgICAgICAgIHJlYWQgLXAgIkNob29zZSB1bm1vdW50ZWQgZGV2aWNlIG51bWJlcjogIiBESVNLX05VTUJFUgorICAgICAgICBYPTAKKyAgICAgICAgZm9yIGxpbmUgaW4gYGVjaG8gJFVOTU9VTlRFRF9BVkFJTEFCTEVTYDsgZG8KKyAgICAgICAgICAgIGlmIFsgJERJU0tfTlVNQkVSIC1lcSAkWCBdOyB0aGVuCisgICAgICAgICAgICAgICAgRElTS19UT19CRV9GTEFTSEVEPSRsaW5lCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBYPWBleHByICRYICsgMWAKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgaWYgWyAteiAiJERJU0tfVE9fQkVfRkxBU0hFRCIgXTsgdGhlbgorICAgICAgICAgICAgZGllICJPcHRpb24gXCIkRElTS19OVU1CRVJcIiBpcyBpbnZhbGlkLiBDaG9vc2UgYSB2YWxpZCBvcHRpb24iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIFsgLXogYGVjaG8gJERJU0tfVE9fQkVfRkxBU0hFRCB8IGdyZXAgIm1tYyJgIF07IHRoZW4KKyAgICAgICAgICAgICAgICBUQVJHRVRfVE9fQkVfQk9PVD0iL2Rldi9zZGEiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgVEFSR0VUX1RPX0JFX0JPT1Q9Ii9kZXYvbW1jYmxrMCIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIiIKKyAgICAgICAgZWNobyAiQ2hvb3NlIGEgbmFtZSBvZiB0aGUgZGV2aWNlIHRoYXQgd2lsbCBiZSBib290IGZyb20iCisgICAgICAgIGVjaG8gLW4gIlJlY29tbWVuZGVkIG5hbWUgaXM6ICIKKyAgICAgICAgaW5mbyAiJFRBUkdFVF9UT19CRV9CT09UIgorICAgICAgICByZWFkIC1wICJJcyB0YXJnZXQgZGV2aWNlIG9rYXk/IFt5L05dOiAiIFJFU1BPTlNFCisgICAgICAgIGlmIFsgIiRSRVNQT05TRSIgIT0gInkiIF07IHRoZW4KKyAgICAgICAgICAgIHJlYWQgLXAgIkNob29zZSB0YXJnZXQgZGV2aWNlIG5hbWU6ICIgVEFSR0VUX1RPX0JFX0JPT1QKKyAgICAgICAgZmkKKyAgICAgICAgZWNobyAiIgorICAgICAgICBpZiBbIC16ICIkVEFSR0VUX1RPX0JFX0JPT1QiIF07IHRoZW4KKyAgICAgICAgICAgIGRpZSAiRXJyb3I6IGNob29zZSBhIHZhbGlkIHRhcmdldCBuYW1lIgorICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgdXNhZ2UKKwkgICAgZXhpdCAxCisgICAgZmkKK2ZpCisKK2lmIFsgIiQxIiA9ICItdiIgXTsgdGhlbgorCURFQlVHPTEKKwlPVVQ9IjEiCisJc2hpZnQKK2ZpCisKK2lmIFsgLXogIiRBVkFJTEFCTEVfRElTSyIgXTsgdGhlbgorICAgIERFVklDRT0kMQorICAgIEhERElNRz0kMgorICAgIFRBUkdFVF9ERVZJQ0U9JDMKK2Vsc2UKKyAgICBERVZJQ0U9JERJU0tfVE9fQkVfRkxBU0hFRAorICAgIEhERElNRz0kMQorICAgIFRBUkdFVF9ERVZJQ0U9JFRBUkdFVF9UT19CRV9CT09UCitmaQorCitMSU5LPSQocmVhZGxpbmsgJERFVklDRSkKK2lmIFsgJD8gLWVxIDAgXTsgdGhlbgorCURFVklDRT0iJExJTksiCitmaQorCitpZiBbICEgLXcgIiRERVZJQ0UiIF07IHRoZW4KKwl1c2FnZQorCWlmIFsgISAtZSAiJHtERVZJQ0V9IiBdIDsgdGhlbgorCQlkaWUgIkRldmljZSAkREVWSUNFIGNhbm5vdCBiZSBmb3VuZCIKKwllbHNlCisJCWRpZSAiRGV2aWNlICRERVZJQ0UgaXMgbm90IHdyaXRhYmxlIChuZWVkIHRvIHJ1biB1bmRlciBzdWRvPykiCisJZmkKK2ZpCisKK2lmIFsgISAtZSAiJEhERElNRyIgXTsgdGhlbgorCXVzYWdlCisJZGllICJIRERJTUcgJEhERElNRyBkb2VzIG5vdCBleGlzdCIKK2ZpCisKKyMKKyMgRW5zdXJlIHRoZSBoZGRpbWcgaXMgbm90IG1vdW50ZWQKKyMKK3VubW91bnQgIiRIRERJTUciIHx8IGRpZSAiRmFpbGVkIHRvIHVubW91bnQgJEhERElNRyIKKworIworIyBDaGVjayBpZiBhbnkgJERFVklDRSBwYXJ0aXRpb25zIGFyZSBtb3VudGVkCisjCit1bm1vdW50X2RldmljZSB8fCBkaWUgIkZhaWxlZCB0byB1bm1vdW50ICRERVZJQ0UiCisKKyMKKyMgQ29uZmlybSBkZXZpY2Ugd2l0aCB1c2VyCisjCitpbWFnZV9kZXRhaWxzICRIRERJTUcKK2RldmljZV9kZXRhaWxzICQoYmFzZW5hbWUgJERFVklDRSkKK2VjaG8gLW4gIiR7SU5GT31QcmVwYXJlIEVGSSBpbWFnZSBvbiAkREVWSUNFIFt5L05dPyR7Q0xFQVJ9ICIKK3JlYWQgUkVTUE9OU0UKK2lmIFsgIiRSRVNQT05TRSIgIT0gInkiIF07IHRoZW4KKwllY2hvICJJbWFnZSBjcmVhdGlvbiBhYm9ydGVkIgorCWV4aXQgMAorZmkKKworCisjCisjIFByZXBhcmUgdGhlIHRlbXBvcmFyeSB3b3JraW5nIHNwYWNlCisjCitUTVBESVI9JChta3RlbXAgLWQgbWtlZmlkaXNrLVhYWCkgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBtb3VudGluZyBkaXJlY3RvcnkuIgorSERESU1HX01OVD0kVE1QRElSL2hkZGltZworSERESU1HX1JPT1RGU19NTlQ9JFRNUERJUi9oZGRpbWdfcm9vdGZzCitST09URlNfTU5UPSRUTVBESVIvcm9vdGZzCitCT09URlNfTU5UPSRUTVBESVIvYm9vdGZzCitta2RpciAkSERESU1HX01OVCB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgJEhERElNR19NTlQiCitta2RpciAkSERESU1HX1JPT1RGU19NTlQgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlICRIRERJTUdfUk9PVEZTX01OVCIKK21rZGlyICRST09URlNfTU5UIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSAkUk9PVEZTX01OVCIKK21rZGlyICRCT09URlNfTU5UIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSAkQk9PVEZTX01OVCIKKworCisjCisjIFBhcnRpdGlvbiAkREVWSUNFCisjCitERVZJQ0VfU0laRT0kKHBhcnRlZCAtcyAkREVWSUNFIHVuaXQgbWIgcHJpbnQgfCBncmVwIF5EaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisjIElmIHRoZSBkZXZpY2Ugc2l6ZSBpcyBub3QgcmVwb3J0ZWQgdGhlcmUgbWF5IG5vdCBiZSBhIHZhbGlkIGxhYmVsCitpZiBbICIkREVWSUNFX1NJWkUiID0gIiIgXSA7IHRoZW4KKwlwYXJ0ZWQgLXMgJERFVklDRSBta2xhYmVsIG1zZG9zIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBNU0RPUyBwYXJ0aXRpb24gdGFibGUiCisJREVWSUNFX1NJWkU9JChwYXJ0ZWQgLXMgJERFVklDRSB1bml0IG1iIHByaW50IHwgZ3JlcCBeRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorZmkKK1NXQVBfU0laRT0kKChERVZJQ0VfU0laRSpTV0FQX1JBVElPLzEwMCkpCitST09URlNfU0laRT0kKChERVZJQ0VfU0laRS1CT09UX1NJWkUtU1dBUF9TSVpFKSkKK1JPT1RGU19TVEFSVD0kKChCT09UX1NJWkUpKQorUk9PVEZTX0VORD0kKChST09URlNfU1RBUlQrUk9PVEZTX1NJWkUpKQorU1dBUF9TVEFSVD0kKChST09URlNfRU5EKSkKKworIyBNTUMgZGV2aWNlcyB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKK1BBUlRfUFJFRklYPSIiCitpZiBbICEgIiR7REVWSUNFIy9kZXYvbW1jYmxrfSIgPSAiJHtERVZJQ0V9IiBdIHx8IFsgISAiJHtERVZJQ0UjL2Rldi9sb29wfSIgPSAiJHtERVZJQ0V9IiBdOyB0aGVuCisJUEFSVF9QUkVGSVg9InAiCitmaQorQk9PVEZTPSRERVZJQ0Uke1BBUlRfUFJFRklYfTEKK1JPT1RGUz0kREVWSUNFJHtQQVJUX1BSRUZJWH0yCitTV0FQPSRERVZJQ0Uke1BBUlRfUFJFRklYfTMKKworVEFSR0VUX1BBUlRfUFJFRklYPSIiCitpZiBbICEgIiR7VEFSR0VUX0RFVklDRSMvZGV2L21tY2Jsa30iID0gIiR7VEFSR0VUX0RFVklDRX0iIF07IHRoZW4KKwlUQVJHRVRfUEFSVF9QUkVGSVg9InAiCitmaQorVEFSR0VUX1JPT1RGUz0kVEFSR0VUX0RFVklDRSR7VEFSR0VUX1BBUlRfUFJFRklYfTIKK1RBUkdFVF9TV0FQPSRUQVJHRVRfREVWSUNFJHtUQVJHRVRfUEFSVF9QUkVGSVh9MworCitlY2hvICIiCitpbmZvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRCT09UX1NJWkUgTUIgKCRCT09URlMpIgoraW5mbyAiUk9PVEZTIHBhcnRpdGlvbiBzaXplOiAkUk9PVEZTX1NJWkUgTUIgKCRST09URlMpIgoraW5mbyAiU3dhcCBwYXJ0aXRpb24gc2l6ZTogICAkU1dBUF9TSVpFIE1CICgkU1dBUCkiCitlY2hvICIiCisKKyMgVXNlIE1TRE9TIGJ5IGRlZmF1bHQgYXMgR1BUIGNhbm5vdCBiZSByZWxpYWJseSBkaXN0cmlidXRlZCBpbiBkaXNrIGltYWdlIGZvcm0KKyMgYXMgaXQgcmVxdWlyZXMgdGhlIGJhY2t1cCB0YWJsZSB0byBiZSBvbiB0aGUgbGFzdCBibG9jayBvZiB0aGUgZGV2aWNlLCB3aGljaAorIyBvZiBjb3Vyc2UgdmFyaWVzIGZyb20gZGV2aWNlIHRvIGRldmljZS4KKworaW5mbyAiUGFydGl0aW9uaW5nIGluc3RhbGxhdGlvbiBtZWRpYSAoJERFVklDRSkiCisKK2RlYnVnICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gJERFVklDRSIKK2RkIGlmPS9kZXYvemVybyBvZj0kREVWSUNFIGJzPTUxMiBjb3VudD0yID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gemVybyBiZWdpbm5pbmcgb2YgJERFVklDRSIKKworZGVidWcgIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgKE1TRE9TKSBvbiAkREVWSUNFIgorcGFydGVkIC1zICRERVZJQ0UgbWtsYWJlbCBtc2RvcyA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBNU0RPUyBwYXJ0aXRpb24gdGFibGUiCisKK2RlYnVnICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkQk9PVEZTIgorcGFydGVkIC1zICRERVZJQ0UgbWtwYXJ0IHByaW1hcnkgMCUgJEJPT1RfU0laRSA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBCT09UIHBhcnRpdGlvbiIKKworZGVidWcgIkVuYWJsaW5nIGJvb3QgZmxhZyBvbiAkQk9PVEZTIgorcGFydGVkIC1zICRERVZJQ0Ugc2V0IDEgYm9vdCBvbiA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGVuYWJsZSBib290IGZsYWciCisKK2RlYnVnICJDcmVhdGluZyBST09URlMgcGFydGl0aW9uIG9uICRST09URlMiCitwYXJ0ZWQgLXMgJERFVklDRSBta3BhcnQgcHJpbWFyeSAkUk9PVEZTX1NUQVJUICRST09URlNfRU5EID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIFJPT1RGUyBwYXJ0aXRpb24iCisKK2RlYnVnICJDcmVhdGluZyBzd2FwIHBhcnRpdGlvbiBvbiAkU1dBUCIKK3BhcnRlZCAtcyAkREVWSUNFIG1rcGFydCBwcmltYXJ5ICRTV0FQX1NUQVJUIDEwMCUgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgU1dBUCBwYXJ0aXRpb24iCisKK2lmIFsgJERFQlVHIC1lcSAxIF07IHRoZW4KKwlwYXJ0ZWQgLXMgJERFVklDRSBwcmludAorZmkKKworCisjCisjIENoZWNrIGlmIGFueSAkREVWSUNFIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQgYWZ0ZXIgcGFydGl0aW9uaW5nCisjCit1bm1vdW50X2RldmljZSB8fCBkaWUgIkZhaWxlZCB0byB1bm1vdW50ICRERVZJQ0UgcGFydGl0aW9ucyIKKworCisjCisjIEZvcm1hdCAkREVWSUNFIHBhcnRpdGlvbnMKKyMKK2luZm8gIkZvcm1hdHRpbmcgcGFydGl0aW9ucyIKK2RlYnVnICJGb3JtYXR0aW5nICRCT09URlMgYXMgdmZhdCIKK2lmIFsgISAiJHtERVZJQ0UjL2Rldi9sb29wfSIgPSAiJHtERVZJQ0V9IiBdOyB0aGVuCisJbWtmcy52ZmF0IC1JICRCT09URlMgLW4gIkVGSSIgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBmb3JtYXQgJEJPT1RGUyIKK2Vsc2UKKwlta2ZzLnZmYXQgJEJPT1RGUyAtbiAiRUZJIiA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGZvcm1hdCAkQk9PVEZTIgorZmkKKworZGVidWcgIkZvcm1hdHRpbmcgJFJPT1RGUyBhcyBleHQzIgorbWtmcy5leHQzIC1GICRST09URlMgLUwgIlJPT1QiID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gZm9ybWF0ICRST09URlMiCisKK2RlYnVnICJGb3JtYXR0aW5nIHN3YXAgcGFydGl0aW9uICgkU1dBUCkiCitta3N3YXAgJFNXQVAgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBwcmVwYXJlIHN3YXAiCisKKworIworIyBJbnN0YWxsaW5nIHRvICRERVZJQ0UKKyMKK2RlYnVnICJNb3VudGluZyBpbWFnZXMgYW5kIGRldmljZSBpbiBwcmVwYXJhdGlvbiBmb3IgaW5zdGFsbGF0aW9uIgorbW91bnQgLW8gbG9vcCAkSERESU1HICRIRERJTUdfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCAkSERESU1HIgorbW91bnQgLW8gbG9vcCAkSERESU1HX01OVC9yb290ZnMuaW1nICRIRERJTUdfUk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgcm9vdGZzLmltZyIKK21vdW50ICRST09URlMgJFJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRST09URlMgb24gJFJPT1RGU19NTlQiCittb3VudCAkQk9PVEZTICRCT09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCAkQk9PVEZTIG9uICRCT09URlNfTU5UIgorCitpbmZvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24iCitFRklESVI9IiRCT09URlNfTU5UL0VGSS9CT09UIgorY3AgJEhERElNR19NTlQvdm1saW51eiAkQk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gY29weSB2bWxpbnV6IgorIyBDb3B5IHRoZSBlZmkgbG9hZGVyIGFuZCBjb25maWdzIChib290aSouZWZpIGFuZCBncnViLmNmZyBpZiBpdCBleGlzdHMpCitjcCAtciAkSERESU1HX01OVC9FRkkgJEJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIGNvcHkgRUZJIGRpciIKKyMgU2lsZW50bHkgaWdub3JlIGEgbWlzc2luZyBndW1taWJvb3QgbG9hZGVyIGRpciAod2UgbWlnaHQganVzdCBiZSBhIEdSVUIgaW1hZ2UpCitjcCAtciAkSERESU1HX01OVC9sb2FkZXIgJEJPT1RGU19NTlQgPiRPVVQgMj4mMQorCisjIFVwZGF0ZSB0aGUgYm9vdCBsb2FkZXJzIGNvbmZpZ3VyYXRpb25zIGZvciBhbiBpbnN0YWxsZWQgaW1hZ2UKKyMgUmVtb3ZlIGFueSBleGlzdGluZyByb290PSBrZXJuZWwgcGFyYW1ldGVycyBhbmQ6CisjIG8gQWRkIGEgcm9vdD0gcGFyYW1ldGVyIHdpdGggdGhlIHRhcmdldCByb290ZnMKKyMgbyBTcGVjaWZ5IHJvIHNvIGZzY2sgY2FuIGJlIHJ1biBkdXJpbmcgYm9vdAorIyBvIFNwZWNpZnkgcm9vdHdhaXQgaW4gY2FzZSB0aGUgdGFyZ2V0IG1lZGlhIGlzIGFuIGFzeW5jcm9ub3VzIGJsb2NrIGRldmljZQorIyAgIHN1Y2ggYXMgTU1DIG9yIFVTQiBkaXNrcworIyBvIFNwZWNpZnkgInF1aWV0IiB0byBtaW5pbWl6ZSBib290IHRpbWUgd2hlbiB1c2luZyBzbG93IHNlcmlhbCBjb25zb2xlcworCisjIExvb2sgZm9yIGEgR1JVQiBpbnN0YWxsYXRpb24KK0dSVUJfQ0ZHPSIkRUZJRElSL2dydWIuY2ZnIgoraWYgWyAtZSAiJEdSVUJfQ0ZHIiBdOyB0aGVuCisJaW5mbyAiQ29uZmlndXJpbmcgR1JVQiIKKwkjIERlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorCXNlZCAtaSAiL21lbnVlbnRyeSAnaW5zdGFsbCcvLC9efS9kIiAkR1JVQl9DRkcKKwkjIERlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisJc2VkIC1pICIvaW5pdHJkIC9kIiAkR1JVQl9DRkcKKwkjIERlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKwlzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1JVQl9DRkcKKworCXNlZCAtaSAic0Agcm9vdD1bXiBdKkAgQCIgJEdSVUJfQ0ZHCisJc2VkIC1pICJzQHZtbGludXogQHZtbGludXogcm9vdD0kVEFSR0VUX1JPT1RGUyBybyByb290d2FpdCBxdWlldCBAIiAkR1JVQl9DRkcKK2ZpCisKKyMgTG9vayBmb3IgYSBndW1taWJvb3QgaW5zdGFsbGF0aW9uCitHVU1NSV9FTlRSSUVTPSIkQk9PVEZTX01OVC9sb2FkZXIvZW50cmllcyIKK0dVTU1JX0NGRz0iJEdVTU1JX0VOVFJJRVMvYm9vdC5jb25mIgoraWYgWyAtZCAiJEdVTU1JX0VOVFJJRVMiIF07IHRoZW4KKwlpbmZvICJDb25maWd1cmluZyBHdW1taWJvb3QiCisJIyByZW1vdmUgdGhlIGluc3RhbGwgdGFyZ2V0IGlmIGl0IGV4aXN0cworCXJtICRHVU1NSV9FTlRSSUVTL2luc3RhbGwuY29uZiA+JE9VVCAyPiYxCisKKwlpZiBbICEgLWUgIiRHVU1NSV9DRkciIF07IHRoZW4KKwkJZWNobyAiRVJST1I6ICRHVU1NSV9DRkcgbm90IGZvdW5kIgorCWZpCisKKwlzZWQgLWkgIi9pbml0cmQgL2QiICRHVU1NSV9DRkcKKwlzZWQgLWkgInNAIHJvb3Q9W14gXSpAIEAiICRHVU1NSV9DRkcKKwlzZWQgLWkgInNAb3B0aW9ucyAqTEFCRUw9Ym9vdCBAb3B0aW9ucyBMQUJFTD1Cb290IHJvb3Q9JFRBUkdFVF9ST09URlMgcm8gcm9vdHdhaXQgcXVpZXQgQCIgJEdVTU1JX0NGRworZmkKKworIyBFbnN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgRUZJIGJvb3Rsb2FkZXIgY29uZmlndXJlZAoraWYgWyAhIC1lICRHUlVCX0NGRyBdICYmIFsgISAtZSAkR1VNTUlfQ0ZHIF07IHRoZW4KKwlkaWUgIk5vIEVGSSBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24gZm91bmQiCitmaQorCisKK2luZm8gIkNvcHlpbmcgUk9PVEZTIGZpbGVzICh0aGlzIG1heSB0YWtlIGEgd2hpbGUpIgorY3AgLWEgJEhERElNR19ST09URlNfTU5ULyogJFJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBkaWUgIlJvb3QgRlMgY29weSBmYWlsZWQiCisKK2VjaG8gIiRUQVJHRVRfU1dBUCAgICAgc3dhcCAgICAgICAgICAgICBzd2FwICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwIDAiID4+ICRST09URlNfTU5UL2V0Yy9mc3RhYgorCisjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCitpZiBbIC1kICRST09URlNfTU5UL2V0Yy91ZGV2LyBdIDsgdGhlbgorCWVjaG8gIiRUQVJHRVRfREVWSUNFIiA+PiAkUk9PVEZTX01OVC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKK2ZpCisKKworIyBDYWxsIGNsZWFudXAgdG8gdW5tb3VudCBkZXZpY2VzIGFuZCBpbWFnZXMgYW5kIHJlbW92ZSB0aGUgVE1QRElSCitjbGVhbnVwCisKK2VjaG8gIiIKK2lmIFsgJFdBUk5JTkdTIC1uZSAwIF0gJiYgWyAkRVJST1JTIC1lcSAwIF07IHRoZW4KKwllY2hvICIke1lFTExPV31JbnN0YWxsYXRpb24gY29tcGxldGVkIHdpdGggd2FybmluZ3Mke0NMRUFSfSIKKwllY2hvICIke1lFTExPV31XYXJuaW5nczogJFdBUk5JTkdTJHtDTEVBUn0iCitlbGlmIFsgJEVSUk9SUyAtbmUgMCBdOyB0aGVuCisJZWNobyAiJHtSRUR9SW5zdGFsbGF0aW9uIGVuY291bnRlcmVkIGVycm9ycyR7Q0xFQVJ9IgorCWVjaG8gIiR7UkVEfUVycm9yczogJEVSUk9SUyR7Q0xFQVJ9IgorCWVjaG8gIiR7WUVMTE9XfVdhcm5pbmdzOiAkV0FSTklOR1Mke0NMRUFSfSIKK2Vsc2UKKwlzdWNjZXNzICJJbnN0YWxsYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKK2ZpCitlY2hvICIiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MzY1MjJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weQpAQCAtMCwwICsxLDM5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgZ2VuZXJhdGUgUHl0aG9uIE1hbmlmZXN0IGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorIyAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyAoQykgMjAwNyBKZXJlbXkgTGFpbmUKKyMgbGljZW5zZWQgdW5kZXIgTUlULCBzZWUgQ09QWUlORy5NSVQKKyMKKyMgSnVuZSAyMiwgMjAxMSAtLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisjICAqIFVwZGF0ZWQgdG8gbm8gbG9uZ2VyIGdlbmVyYXRlIHNwZWNpYWwgLWRiZyBwYWNrYWdlLCBpbnN0ZWFkIHVzZSB0aGUKKyMgICAgc2luZ2xlIHN5c3RlbSAtZGJnCisjICAqIFVwZGF0ZSB2ZXJzaW9uIHdpdGggIi4xIiB0byBpbmRpY2F0ZSB0aGlzIGNoYW5nZQorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK1ZFUlNJT04gPSAiMi43LjIiCisKK19fYXV0aG9yX18gPSAiTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+IgorX192ZXJzaW9uX18gPSAiMjAxMTAyMjIuMiIKKworY2xhc3MgTWFrZWZpbGVNYWtlcjoKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgb3V0ZmlsZSApOgorICAgICAgICAiIiJpbml0aWFsaXplIiIiCisgICAgICAgIHNlbGYucGFja2FnZXMgPSB7fQorICAgICAgICBzZWxmLnRhcmdldFByZWZpeCA9ICIke2xpYmRpcn0vcHl0aG9uJXMvIiAlIFZFUlNJT05bOjNdCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0ZmlsZQorICAgICAgICBzZWxmLm91dCggIiIiCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICclcycgVmVyc2lvbiAlcyAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKyIiIiAlICggc3lzLmFyZ3ZbMF0sIF9fdmVyc2lvbl9fICkgKQorCisgICAgIworICAgICMgaGVscGVyIGZ1bmN0aW9ucworICAgICMKKworICAgIGRlZiBvdXQoIHNlbGYsIGRhdGEgKToKKyAgICAgICAgIiIicHJpbnQgYSBsaW5lIHRvIHRoZSBvdXRwdXQgZmlsZSIiIgorICAgICAgICBzZWxmLm91dHB1dC53cml0ZSggIiVzXG4iICUgZGF0YSApCisKKyAgICBkZWYgc2V0UHJlZml4KCBzZWxmLCB0YXJnZXRQcmVmaXggKToKKyAgICAgICAgIiIic2V0IGEgZmlsZSBwcmVmaXggZm9yIGFkZFBhY2thZ2UgZmlsZXMiIiIKKyAgICAgICAgc2VsZi50YXJnZXRQcmVmaXggPSB0YXJnZXRQcmVmaXgKKworICAgIGRlZiBkb1Byb2xvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiICIiIiApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICBkZWYgYWRkUGFja2FnZSggc2VsZiwgbmFtZSwgZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZmlsZW5hbWVzICk6CisgICAgICAgICIiImFkZCBhIHBhY2thZ2UgdG8gdGhlIE1ha2VmaWxlIiIiCisgICAgICAgIGlmIHR5cGUoIGZpbGVuYW1lcyApID09IHR5cGUoICIiICk6CisgICAgICAgICAgICBmaWxlbmFtZXMgPSBmaWxlbmFtZXMuc3BsaXQoKQorICAgICAgICBmdWxsRmlsZW5hbWVzID0gW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lWzBdICE9ICIkIjoKKyAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggIiVzJXMiICUgKCBzZWxmLnRhcmdldFByZWZpeCwgZmlsZW5hbWUgKSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bGxGaWxlbmFtZXMuYXBwZW5kKCBmaWxlbmFtZSApCisgICAgICAgIHNlbGYucGFja2FnZXNbbmFtZV0gPSBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmdWxsRmlsZW5hbWVzCisKKyAgICBkZWYgZG9Cb2R5KCBzZWxmICk6CisgICAgICAgICIiImdlbmVyYXRlIGJvZHkgb2YgTWFrZWZpbGUiIiIKKworICAgICAgICBnbG9iYWwgVkVSU0lPTgorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwcm92aWRlcyBsaW5lCisgICAgICAgICMKKworICAgICAgICBwcm92aWRlTGluZSA9ICdQUk9WSURFUys9IicKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNlbGYucGFja2FnZXMpOgorICAgICAgICAgICAgcHJvdmlkZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHByb3ZpZGVMaW5lICs9ICciJworCisgICAgICAgIHNlbGYub3V0KCBwcm92aWRlTGluZSApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgbGluZQorICAgICAgICAjCisKKyAgICAgICAgcGFja2FnZUxpbmUgPSAnUEFDS0FHRVM9IiR7UE59LWRiZyAnCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiJHtQTn0tZGlzdHV0aWxzIik6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiJHtQTn0tZGlzdHV0aWxzIjoKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzLXN0YXRpY2RldiAlcyAiICUgKG5hbWUsIG5hbWUpCisgICAgICAgICAgICBlbGlmIG5hbWUgIT0gJyR7UE59LWRiZyc6CisgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHBhY2thZ2VMaW5lICs9ICcke1BOfS1tb2R1bGVzIicKKworICAgICAgICBzZWxmLm91dCggcGFja2FnZUxpbmUgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwYWNrYWdlIHZhcmlhYmxlcworICAgICAgICAjCisKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICAgICAgZGVzYywgZGVwcywgZmlsZXMgPSBkYXRhCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgd3JpdGUgb3V0IHRoZSBkZXNjcmlwdGlvbiwgcmV2aXNpb24gYW5kIGRlcGVuZGVuY2llcworICAgICAgICAgICAgIworICAgICAgICAgICAgc2VsZi5vdXQoICdTVU1NQVJZXyVzPSIlcyInICUgKCBuYW1lLCBkZXNjICkgKQorICAgICAgICAgICAgc2VsZi5vdXQoICdSREVQRU5EU18lcz0iJXMiJyAlICggbmFtZSwgZGVwcyApICkKKworICAgICAgICAgICAgbGluZSA9ICdGSUxFU18lcz0iJyAlIG5hbWUKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBjaGVjayB3aGljaCBkaXJlY3RvcmllcyB0byBtYWtlIGluIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGRpcnNldCA9IHt9ICMgaWYgcHl0aG9uIGhhZCBhIHNldC1kYXRhdHlwZSB0aGlzIHdvdWxkIGJlIHN1ZmZpY2llbnQuIGZvciBub3csIHdlJ3JlIHVzaW5nIGEgZGljdCBpbnN0ZWFkLgorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBkaXJzZXRbb3MucGF0aC5kaXJuYW1lKCB0YXJnZXQgKV0gPSBUcnVlCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgZ2VuZXJhdGUgd2hpY2ggZmlsZXMgdG8gY29weSBmb3IgdGhlIHRhcmdldCAoLWRmUiBiZWNhdXNlIHdob2xlIGRpcmVjdG9yaWVzIGFyZSBhbHNvIGFsbG93ZWQpCisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIHRhcmdldAorCisgICAgICAgICAgICBsaW5lICs9ICciJworICAgICAgICAgICAgc2VsZi5vdXQoIGxpbmUgKQorICAgICAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIicgKQorICAgICAgICBsaW5lID0gJ1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IicKKworICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBbJyR7UE59LWRldicsICcke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2J106CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIG5hbWUKKworICAgICAgICBzZWxmLm91dCggIiVzIFwiIiAlIGxpbmUgKQorICAgICAgICBzZWxmLm91dCggJ0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSInICkKKworICAgIGRlZiBkb0VwaWxvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiIiIiICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgIGRlZiBtYWtlKCBzZWxmICk6CisgICAgICAgIHNlbGYuZG9Qcm9sb2coKQorICAgICAgICBzZWxmLmRvQm9keSgpCisgICAgICAgIHNlbGYuZG9FcGlsb2coKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorCisgICAgaWYgbGVuKCBzeXMuYXJndiApID4gMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHN5cy5hcmd2WzFdKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc3lzLmV4Y19jbGVhcigpCisgICAgICAgIG91dGZpbGUgPSBmaWxlKCBzeXMuYXJndlsxXSwgInciICkKKyAgICBlbHNlOgorICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAorCisgICAgbSA9IE1ha2VmaWxlTWFrZXIoIG91dGZpbGUgKQorCisgICAgIyBBZGQgcGFja2FnZXMgaGVyZS4gT25seSBzcGVjaWZ5IGRsb3Blbi1zdHlsZSBsaWJyYXJ5IGRlcGVuZGVuY2llcyBoZXJlLCBubyBsZGQtc3R5bGUgZGVwZW5kZW5jaWVzIQorICAgICMgUGFyYW1ldGVyczogcmV2aXNpb24sIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcworICAgICMKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvcmUiLCAiUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiLCAiJHtQTn0tbGFuZyAke1BOfS1yZSIsCisgICAgIl9fZnV0dXJlX18uKiBfYWJjb2xsLiogYWJjLiogY29weS4qIGNvcHlfcmVnLiogQ29uZmlnUGFyc2VyLiogIiArCisgICAgImdlbmVyaWNwYXRoLiogZ2V0b3B0LiogbGluZWNhY2hlLiogbmV3LiogIiArCisgICAgIm9zLiogcG9zaXhwYXRoLiogc3RydWN0LiogIiArCisgICAgIndhcm5pbmdzLiogc2l0ZS4qIHN0YXQuKiAiICsKKyAgICAiVXNlckRpY3QuKiBVc2VyTGlzdC4qIFVzZXJTdHJpbmcuKiAiICsKKyAgICAibGliLWR5bmxvYWQvYmluYXNjaWkuc28gbGliLWR5bmxvYWQvX3N0cnVjdC5zbyBsaWItZHlubG9hZC90aW1lLnNvICIgKworICAgICJsaWItZHlubG9hZC94cmVhZGxpbmVzLnNvIHR5cGVzLiogcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAiICArCisgICAgIl93ZWFrcmVmc2V0Liogc3lzY29uZmlnLiogX3N5c2NvbmZpZ2RhdGEuKiBjb25maWcvTWFrZWZpbGUgIiArCisgICAgIiR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9weWNvbmZpZyouaCAiICsKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGV2IiwgIlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIiwgIiR7UE59LWNvcmUiLAorICAgICIke2luY2x1ZGVkaXJ9ICIgKworICAgICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAiICsKKyAgICAiJHtsaWJkaXJ9LyoubGEgIiArCisgICAgIiR7bGliZGlyfS8qLmEgIiArCisgICAgIiR7bGliZGlyfS8qLm8gIiArCisgICAgIiR7bGliZGlyfS9wa2djb25maWcgIiArCisgICAgIiR7YmFzZV9saWJkaXJ9LyouYSAiICsKKyAgICAiJHtiYXNlX2xpYmRpcn0vKi5vICIgKworICAgICIke2RhdGFkaXJ9L2FjbG9jYWwgIiArCisgICAgIiR7ZGF0YWRpcn0vcGtnY29uZmlnICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tMnRvMyIsICJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIiwgIiR7UE59LWNvcmUiLAorICAgICIke2JpbmRpcn0vMnRvMyBsaWIydG8zIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taWRsZSIsICJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIsICIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiLAorICAgICIke2JpbmRpcn0vaWRsZSBpZGxlbGliIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHlkb2MiLCAiUHl0aG9uIGludGVyYWN0aXZlIGhlbHAgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tc3RyaW5nb2xkICR7UE59LXJlIiwKKyAgICAiJHtiaW5kaXJ9L3B5ZG9jIHB5ZG9jLiogcHlkb2NfZGF0YSIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc210cGQiLCAiUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iLCAiJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIsCisgICAgIiR7YmluZGlyfS9zbXRwZC4qIHNtdHBkLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWF1ZGlvIiwgIlB5dGhvbiBBdWRpbyBIYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAid2F2ZS4qIGNodW5rLiogc25kaGRyLiogbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuc28gbGliLWR5bmxvYWQvYXVkaW9vcC5zbyBhdWRpb2Rldi4qIHN1bmF1ZGlvLiogc3VuYXUuKiB0b2FpZmYuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tYnNkZGIiLCAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQmVya2VsZXkgRGF0YWJhc2UiLCAiJHtQTn0tY29yZSIsCisgICAgImJzZGRiIGxpYi1keW5sb2FkL19ic2RkYi5zbyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvZGVjcyIsICJQeXRob24gY29kZWNzLCBlbmNvZGluZ3MgJiBpMThuIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKKyAgICAiY29kZWNzLiogZW5jb2RpbmdzIGdldHRleHQuKiBsb2NhbGUuKiBsaWItZHlubG9hZC9fbG9jYWxlLnNvIGxpYi1keW5sb2FkL19jb2RlY3MqIGxpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy5zbyBsaWItZHlubG9hZC91bmljb2RlZGF0YS5zbyBzdHJpbmdwcmVwLiogeGRybGliLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXBpbGUiLCAiUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgInB5X2NvbXBpbGUuKiBjb21waWxlYWxsLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXBpbGVyIiwgIlB5dGhvbiBjb21waWxlciBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjb21waWxlciIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXByZXNzaW9uIiwgIlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS16bGliIiwKKyAgICAiZ3ppcC4qIHppcGZpbGUuKiB0YXJmaWxlLiogbGliLWR5bmxvYWQvYnoyLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jcnlwdCIsICJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJoYXNobGliLiogbWQ1Liogc2hhLiogbGliLWR5bmxvYWQvY3J5cHQuc28gbGliLWR5bmxvYWQvX2hhc2hsaWIuc28gbGliLWR5bmxvYWQvX3NoYTI1Ni5zbyBsaWItZHlubG9hZC9fc2hhNTEyLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXh0dXRpbHMiLCAiUHl0aG9uIG9wdGlvbiBwYXJzaW5nLCB0ZXh0IHdyYXBwaW5nIGFuZCBDU1Ygc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LXN0cmluZ29sZCIsCisgICAgImxpYi1keW5sb2FkL19jc3Yuc28gY3N2Liogb3B0cGFyc2UuKiB0ZXh0d3JhcC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jdXJzZXMiLCAiUHl0aG9uIGN1cnNlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjdXJzZXMgbGliLWR5bmxvYWQvX2N1cnNlcy5zbyBsaWItZHlubG9hZC9fY3Vyc2VzX3BhbmVsLnNvIiApICMgZGlyZWN0b3J5ICsgbG93IGxldmVsIG1vZHVsZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3R5cGVzIiwgIlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImN0eXBlcyBsaWItZHlubG9hZC9fY3R5cGVzLnNvIGxpYi1keW5sb2FkL19jdHlwZXNfdGVzdC5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRhdGV0aW1lIiwgIlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIiwKKyAgICAiX3N0cnB0aW1lLiogY2FsZW5kYXIuKiBsaWItZHlubG9hZC9kYXRldGltZS5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGIiLCAiUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiYW55ZGJtLiogZHVtYmRibS4qIHdoaWNoZGIuKiAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRlYnVnZ2VyIiwgIlB5dGhvbiBkZWJ1Z2dlciIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LXNoZWxsICR7UE59LXBwcmludCIsCisgICAgImJkYi4qIHBkYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaWZmbGliIiwgIlB5dGhvbiBoZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzIGJldHdlZW4gb2JqZWN0cyIsICIke1BOfS1sYW5nICR7UE59LXJlIiwKKyAgICAiZGlmZmxpYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2IiwgIlB5dGhvbiBkaXN0cmlidXRpb24gdXRpbGl0aWVzIChzdGF0aWMgbGlicmFyaWVzKSIsICIke1BOfS1kaXN0dXRpbHMiLAorICAgICJjb25maWcvbGliKi5hIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGlzdHV0aWxzIiwgIlB5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzIiwgIiR7UE59LWNvcmUiLAorICAgICJjb25maWcgZGlzdHV0aWxzIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZG9jdGVzdCIsICJQeXRob24gZnJhbWV3b3JrIGZvciBydW5uaW5nIGV4YW1wbGVzIGluIGRvY3N0cmluZ3MiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LXJlICR7UE59LXVuaXR0ZXN0ICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIiLAorICAgICJkb2N0ZXN0LioiICkKKworICAgICMgRklYTUUgY29uc2lkZXIgYWRkaW5nIHRvIHNvbWUgaGlnaGVyIGxldmVsIHBhY2thZ2UKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbGVtZW50dHJlZSIsICJQeXRob24gZWxlbWVudHJlZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbWFpbCIsICJQeXRob24gZW1haWwgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IiwKKyAgICAiaW1hcGxpYi4qIGVtYWlsIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZmNudGwiLCAiUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9mY250bC5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taG90c2hvdCIsICJQeXRob24gaG90c2hvdCBwZXJmb3JtYW5jZSBwcm9maWxlciIsICIke1BOfS1jb3JlIiwKKyAgICAiaG90c2hvdCBsaWItZHlubG9hZC9faG90c2hvdC5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taHRtbCIsICJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImZvcm1hdHRlci4qIGh0bWxlbnRpdHlkZWZzLiogaHRtbGxpYi4qIG1hcmt1cGJhc2UuKiBzZ21sbGliLiogSFRNTFBhcnNlci4qICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1wb3J0bGliIiwgIlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIsICIke1BOfS1jb3JlIiwKKyAgICAiaW1wb3J0bGliIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1nZGJtIiwgIlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvZ2RibS5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1hZ2UiLCAiUHl0aG9uIGdyYXBoaWNhbCBpbWFnZSBoYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAiY29sb3JzeXMuKiBpbWdoZHIuKiBsaWItZHlubG9hZC9pbWFnZW9wLnNvIGxpYi1keW5sb2FkL3JnYmltZy5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW8iLCAiUHl0aG9uIGxvdy1sZXZlbCBJL08iLCAiJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXRleHR1dGlscyAke1BOfS1uZXRjbGllbnQgJHtQTn0tY29udGV4dGxpYiIsCisgICAgImxpYi1keW5sb2FkL19zb2NrZXQuc28gbGliLWR5bmxvYWQvX2lvLnNvIGxpYi1keW5sb2FkL19zc2wuc28gbGliLWR5bmxvYWQvc2VsZWN0LnNvIGxpYi1keW5sb2FkL3Rlcm1pb3Muc28gbGliLWR5bmxvYWQvY1N0cmluZ0lPLnNvICIgKworICAgICJwaXBlcy4qIHNvY2tldC4qIHNzbC4qIHRlbXBmaWxlLiogU3RyaW5nSU8uKiBpby4qIF9weWlvLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWpzb24iLCAiUHl0aG9uIEpTT04gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUgJHtQTn0tY29kZWNzIiwKKyAgICAianNvbiBsaWItZHlubG9hZC9fanNvbi5zbyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWxhbmciLCAiUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fYmlzZWN0LnNvIGxpYi1keW5sb2FkL19jb2xsZWN0aW9ucy5zbyBsaWItZHlubG9hZC9faGVhcHEuc28gbGliLWR5bmxvYWQvX3dlYWtyZWYuc28gbGliLWR5bmxvYWQvX2Z1bmN0b29scy5zbyAiICsKKyAgICAibGliLWR5bmxvYWQvYXJyYXkuc28gbGliLWR5bmxvYWQvaXRlcnRvb2xzLnNvIGxpYi1keW5sb2FkL29wZXJhdG9yLnNvIGxpYi1keW5sb2FkL3BhcnNlci5zbyAiICsKKyAgICAiYXRleGl0LiogYmlzZWN0LiogY29kZS4qIGNvZGVvcC4qIGNvbGxlY3Rpb25zLiogZGlzLiogZnVuY3Rvb2xzLiogaGVhcHEuKiBpbnNwZWN0Lioga2V5d29yZC4qIG9wY29kZS4qIHN5bWJvbC4qIHJlcHIuKiB0b2tlbi4qICIgKworICAgICJ0b2tlbml6ZS4qIHRyYWNlYmFjay4qIHdlYWtyZWYuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbG9nZ2luZyIsICJQeXRob24gbG9nZ2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIiwKKyAgICAibG9nZ2luZyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1haWxib3giLCAiUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1taW1lIiwKKyAgICAibWFpbGJveC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYXRoIiwgIlB5dGhvbiBtYXRoIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jcnlwdCIsCisgICAgImxpYi1keW5sb2FkL2NtYXRoLnNvIGxpYi1keW5sb2FkL21hdGguc28gbGliLWR5bmxvYWQvX3JhbmRvbS5zbyByYW5kb20uKiBzZXRzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1pbWUiLCAiUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAibWltZXRvb2xzLiogdXUuKiBxdW9wcmkuKiByZmM4MjIuKiBNaW1lV3JpdGVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1tYXAiLCAiUHl0aG9uIG1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJsaWItZHlubG9hZC9tbWFwLnNvICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbXVsdGlwcm9jZXNzaW5nIiwgIlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1jdHlwZXMgJHtQTn0tbW1hcCIsCisgICAgImxpYi1keW5sb2FkL19tdWx0aXByb2Nlc3Npbmcuc28gbXVsdGlwcm9jZXNzaW5nIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbmV0Y2xpZW50IiwgIlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIiwgIiR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tZGF0ZXRpbWUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1pbWUiLAorICAgICIqQ29va2llKi4qICIgKworICAgICJiYXNlNjQuKiBjb29raWVsaWIuKiBmdHBsaWIuKiBnb3BoZXJsaWIuKiBobWFjLiogaHR0cGxpYi4qIG1pbWV0eXBlcy4qIG5udHBsaWIuKiBwb3BsaWIuKiBzbXRwbGliLiogdGVsbmV0bGliLiogdXJsbGliLiogdXJsbGliMi4qIHVybHBhcnNlLiogdXVpZC4qIHJmYzgyMi4qIG1pbWV0b29scy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1uZXRzZXJ2ZXIiLCAiUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiLCAiJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQgJHtQTn0tc2hlbGwgJHtQTn0tdGhyZWFkaW5nIiwKKyAgICAiY2dpLiogKkhUVFBTZXJ2ZXIuKiBTb2NrZXRTZXJ2ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbnVtYmVycyIsICJQeXRob24gbnVtYmVyIEFQSXMiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIiwKKyAgICAiZGVjaW1hbC4qIGZyYWN0aW9ucy4qIG51bWJlcnMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcGlja2xlIiwgIlB5dGhvbiBzZXJpYWxpc2F0aW9uL3BlcnNpc3RlbmNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tcmUiLAorICAgICJwaWNrbGUuKiBzaGVsdmUuKiBsaWItZHlubG9hZC9jUGlja2xlLnNvIHBpY2tsZXRvb2xzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBrZ3V0aWwiLCAiUHl0aG9uIHBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHkgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAicGtndXRpbC4qIikKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBwcmludCIsICJQeXRob24gcHJldHR5LXByaW50IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgInBwcmludC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wcm9maWxlIiwgIlB5dGhvbiBiYXNpYyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIsCisgICAgInByb2ZpbGUuKiBwc3RhdHMuKiBjUHJvZmlsZS4qIGxpYi1keW5sb2FkL19sc3Byb2Yuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlIiwgIlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIsICIke1BOfS1jb3JlIiwKKyAgICAicmUuKiBzcmUuKiBzcmVfY29tcGlsZS4qIHNyZV9jb25zdGFudHMqIHNyZV9wYXJzZS4qIiApICMgX3NyZSBpcyBidWlsdGluCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZWFkbGluZSIsICJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvcmVhZGxpbmUuc28gcmxjb21wbGV0ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmVzb3VyY2UiLCAiUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9yZXNvdXJjZS5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc2hlbGwiLCAiUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIsICIke1BOfS1jb3JlICR7UE59LXJlIiwKKyAgICAiY21kLiogY29tbWFuZHMuKiBkaXJjYWNoZS4qIGZubWF0Y2guKiBnbG9iLiogcG9wZW4yLiogc2hsZXguKiBzaHV0aWwuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcm9ib3RwYXJzZXIiLCAiUHl0aG9uIHJvYm90cy50eHQgcGFyc2VyIiwgIiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50IiwKKyAgICAicm9ib3RwYXJzZXIuKiIpCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zdWJwcm9jZXNzIiwgIlB5dGhvbiBzdWJwcm9jZXNzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUiLAorICAgICJzdWJwcm9jZXNzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNxbGl0ZTMiLCAiUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nICR7UE59LXpsaWIiLAorICAgICJsaWItZHlubG9hZC9fc3FsaXRlMy5zbyBzcWxpdGUzL2RiYXBpMi4qIHNxbGl0ZTMvX19pbml0X18uKiBzcWxpdGUzL2R1bXAuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3FsaXRlMy10ZXN0cyIsICJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IHRlc3RzIiwgIiR7UE59LWNvcmUgJHtQTn0tc3FsaXRlMyIsCisgICAgInNxbGl0ZTMvdGVzdCIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3RyaW5nb2xkIiwgIlB5dGhvbiBzdHJpbmcgQVBJcyBbZGVwcmVjYXRlZF0iLCAiJHtQTn0tY29yZSAke1BOfS1yZSIsCisgICAgImxpYi1keW5sb2FkL3N0cm9wLnNvIHN0cmluZy4qIHN0cmluZ29sZC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zeXNsb2ciLCAiUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3N5c2xvZy5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGVybWluYWwiLCAiUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgInB0eS4qIHR0eS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXN0cyIsICJQeXRob24gdGVzdHMiLCAiJHtQTn0tY29yZSIsCisgICAgInRlc3QiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10aHJlYWRpbmciLCAiUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCisgICAgIl90aHJlYWRpbmdfbG9jYWwuKiBkdW1teV90aHJlYWQuKiBkdW1teV90aHJlYWRpbmcuKiBtdXRleC4qIHRocmVhZGluZy4qIFF1ZXVlLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRraW50ZXIiLCAiUHl0aG9uIFRjbC9UayBiaW5kaW5ncyIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX3RraW50ZXIuc28gbGliLXRrIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdW5pdHRlc3QiLCAiUHl0aG9uIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsiLCAiJHtQTn0tY29yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1kaWZmbGliICR7UE59LXBwcmludCAke1BOfS1zaGVsbCIsCisgICAgInVuaXR0ZXN0LyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdW5peGFkbWluIiwgIlB5dGhvbiBVbml4IGFkbWluaXN0cmF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL25pcy5zbyBsaWItZHlubG9hZC9ncnAuc28gbGliLWR5bmxvYWQvcHdkLnNvIGdldHBhc3MuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0teG1sIiwgIlB5dGhvbiBiYXNpYyBYTUwgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIiwKKyAgICAibGliLWR5bmxvYWQvcHlleHBhdC5zbyB4bWwgeG1sbGliLioiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS14bWxycGMiLCAiUHl0aG9uIFhNTC1SUEMgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIsCisgICAgInhtbHJwY2xpYi4qIFNpbXBsZVhNTFJQQ1NlcnZlci4qIERvY1hNTFJQQ1NlcnZlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS16bGliIiwgIlB5dGhvbiB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3psaWIuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1haWxib3giLCAiUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1taW1lIiwKKyAgICAibWFpbGJveC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1hcmdwYXJzZSIsICJQeXRob24gY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNlciIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS10ZXh0dXRpbHMiLAorICAgICJhcmdwYXJzZS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb250ZXh0bGliIiwgIlB5dGhvbiB1dGlsaXRpZXMgZm9yIHdpdGgtc3RhdGVtZW50IiArCisgICAgImNvbnRleHRzLiIsICIke1BOfS1jb3JlIiwKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29udGV4dGxpYi4qIiApCisKKyAgICBtLm1ha2UoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZlZWNkYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjQucHkKQEAgLTAsMCArMSwzODggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIGdlbmVyYXRlIFB5dGhvbiBNYW5pZmVzdCBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyMgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgKEMpIDIwMDcgSmVyZW15IExhaW5lCisjIGxpY2Vuc2VkIHVuZGVyIE1JVCwgc2VlIENPUFlJTkcuTUlUCisjCisjIEp1bmUgMjIsIDIwMTEgLS0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIyAgKiBVcGRhdGVkIHRvIG5vIGxvbmdlciBnZW5lcmF0ZSBzcGVjaWFsIC1kYmcgcGFja2FnZSwgaW5zdGVhZCB1c2UgdGhlCisjICAgIHNpbmdsZSBzeXN0ZW0gLWRiZworIyAgKiBVcGRhdGUgdmVyc2lvbiB3aXRoICIuMSIgdG8gaW5kaWNhdGUgdGhpcyBjaGFuZ2UKKyMKKyMgMjAxNCBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBBZGRlZCBweXRob24zIHN1cHBvcnQKKyMKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworVkVSU0lPTiA9ICIzLjQuMiIKKworX19hdXRob3JfXyA9ICJNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4iCitfX3ZlcnNpb25fXyA9ICIyMDE0MDEzMSIKKworY2xhc3MgTWFrZWZpbGVNYWtlcjoKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgb3V0ZmlsZSApOgorICAgICAgICAiIiJpbml0aWFsaXplIiIiCisgICAgICAgIHNlbGYucGFja2FnZXMgPSB7fQorICAgICAgICBzZWxmLnRhcmdldFByZWZpeCA9ICIke2xpYmRpcn0vcHl0aG9uJXMvIiAlIFZFUlNJT05bOjNdCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0ZmlsZQorICAgICAgICBzZWxmLm91dCggIiIiCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICclcycgVmVyc2lvbiAlcyAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKyIiIiAlICggc3lzLmFyZ3ZbMF0sIF9fdmVyc2lvbl9fICkgKQorCisgICAgIworICAgICMgaGVscGVyIGZ1bmN0aW9ucworICAgICMKKworICAgIGRlZiBvdXQoIHNlbGYsIGRhdGEgKToKKyAgICAgICAgIiIicHJpbnQgYSBsaW5lIHRvIHRoZSBvdXRwdXQgZmlsZSIiIgorICAgICAgICBzZWxmLm91dHB1dC53cml0ZSggIiVzXG4iICUgZGF0YSApCisKKyAgICBkZWYgc2V0UHJlZml4KCBzZWxmLCB0YXJnZXRQcmVmaXggKToKKyAgICAgICAgIiIic2V0IGEgZmlsZSBwcmVmaXggZm9yIGFkZFBhY2thZ2UgZmlsZXMiIiIKKyAgICAgICAgc2VsZi50YXJnZXRQcmVmaXggPSB0YXJnZXRQcmVmaXgKKworICAgIGRlZiBkb1Byb2xvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiICIiIiApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICBkZWYgYWRkUGFja2FnZSggc2VsZiwgbmFtZSwgZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZmlsZW5hbWVzICk6CisgICAgICAgICIiImFkZCBhIHBhY2thZ2UgdG8gdGhlIE1ha2VmaWxlIiIiCisgICAgICAgIGlmIHR5cGUoIGZpbGVuYW1lcyApID09IHR5cGUoICIiICk6CisgICAgICAgICAgICBmaWxlbmFtZXMgPSBmaWxlbmFtZXMuc3BsaXQoKQorICAgICAgICBmdWxsRmlsZW5hbWVzID0gW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lWzBdICE9ICIkIjoKKyAgICAgICAgICAgICAgICBmdWxsRmlsZW5hbWVzLmFwcGVuZCggIiVzJXMiICUgKCBzZWxmLnRhcmdldFByZWZpeCwgZmlsZW5hbWUgKSApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bGxGaWxlbmFtZXMuYXBwZW5kKCBmaWxlbmFtZSApCisgICAgICAgIHNlbGYucGFja2FnZXNbbmFtZV0gPSBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmdWxsRmlsZW5hbWVzCisKKyAgICBkZWYgZG9Cb2R5KCBzZWxmICk6CisgICAgICAgICIiImdlbmVyYXRlIGJvZHkgb2YgTWFrZWZpbGUiIiIKKworICAgICAgICBnbG9iYWwgVkVSU0lPTgorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwcm92aWRlcyBsaW5lCisgICAgICAgICMKKworICAgICAgICBwcm92aWRlTGluZSA9ICdQUk9WSURFUys9IicKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNlbGYucGFja2FnZXMpOgorICAgICAgICAgICAgcHJvdmlkZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHByb3ZpZGVMaW5lICs9ICciJworCisgICAgICAgIHNlbGYub3V0KCBwcm92aWRlTGluZSApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgbGluZQorICAgICAgICAjCisKKyAgICAgICAgcGFja2FnZUxpbmUgPSAnUEFDS0FHRVM9IiR7UE59LWRiZyAnCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiJHtQTn0tZGlzdHV0aWxzIik6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiJHtQTn0tZGlzdHV0aWxzIjoKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzLXN0YXRpY2RldiAlcyAiICUgKG5hbWUsIG5hbWUpCisgICAgICAgICAgICBlbGlmIG5hbWUgIT0gJyR7UE59LWRiZyc6CisgICAgICAgICAgICAgICAgcGFja2FnZUxpbmUgKz0gIiVzICIgJSBuYW1lCisgICAgICAgIHBhY2thZ2VMaW5lICs9ICcke1BOfS1tb2R1bGVzIicKKworICAgICAgICBzZWxmLm91dCggcGFja2FnZUxpbmUgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgICMKKyAgICAgICAgIyBnZW5lcmF0ZSBwYWNrYWdlIHZhcmlhYmxlcworICAgICAgICAjCisKKyAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gc29ydGVkKHNlbGYucGFja2FnZXMuaXRlcml0ZW1zKCkpOgorICAgICAgICAgICAgZGVzYywgZGVwcywgZmlsZXMgPSBkYXRhCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgd3JpdGUgb3V0IHRoZSBkZXNjcmlwdGlvbiwgcmV2aXNpb24gYW5kIGRlcGVuZGVuY2llcworICAgICAgICAgICAgIworICAgICAgICAgICAgc2VsZi5vdXQoICdTVU1NQVJZXyVzPSIlcyInICUgKCBuYW1lLCBkZXNjICkgKQorICAgICAgICAgICAgc2VsZi5vdXQoICdSREVQRU5EU18lcz0iJXMiJyAlICggbmFtZSwgZGVwcyApICkKKworICAgICAgICAgICAgbGluZSA9ICdGSUxFU18lcz0iJyAlIG5hbWUKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBjaGVjayB3aGljaCBkaXJlY3RvcmllcyB0byBtYWtlIGluIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5CisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGRpcnNldCA9IHt9ICMgaWYgcHl0aG9uIGhhZCBhIHNldC1kYXRhdHlwZSB0aGlzIHdvdWxkIGJlIHN1ZmZpY2llbnQuIGZvciBub3csIHdlJ3JlIHVzaW5nIGEgZGljdCBpbnN0ZWFkLgorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBkaXJzZXRbb3MucGF0aC5kaXJuYW1lKCB0YXJnZXQgKV0gPSBUcnVlCisKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgZ2VuZXJhdGUgd2hpY2ggZmlsZXMgdG8gY29weSBmb3IgdGhlIHRhcmdldCAoLWRmUiBiZWNhdXNlIHdob2xlIGRpcmVjdG9yaWVzIGFyZSBhbHNvIGFsbG93ZWQpCisgICAgICAgICAgICAjCisKKyAgICAgICAgICAgIGZvciB0YXJnZXQgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIHRhcmdldAorCisgICAgICAgICAgICBsaW5lICs9ICciJworICAgICAgICAgICAgc2VsZi5vdXQoIGxpbmUgKQorICAgICAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIicgKQorICAgICAgICBsaW5lID0gJ1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IicKKworICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBbJyR7UE59LWRldicsICcke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2J106CisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMgIiAlIG5hbWUKKworICAgICAgICBzZWxmLm91dCggIiVzIFwiIiAlIGxpbmUgKQorICAgICAgICBzZWxmLm91dCggJ0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSInICkKKworICAgIGRlZiBkb0VwaWxvZyggc2VsZiApOgorICAgICAgICBzZWxmLm91dCggIiIiIiIiICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgIGRlZiBtYWtlKCBzZWxmICk6CisgICAgICAgIHNlbGYuZG9Qcm9sb2coKQorICAgICAgICBzZWxmLmRvQm9keSgpCisgICAgICAgIHNlbGYuZG9FcGlsb2coKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorCisgICAgaWYgbGVuKCBzeXMuYXJndiApID4gMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHN5cy5hcmd2WzFdKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc3lzLmV4Y19jbGVhcigpCisgICAgICAgIG91dGZpbGUgPSBmaWxlKCBzeXMuYXJndlsxXSwgInciICkKKyAgICBlbHNlOgorICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAorCisgICAgbSA9IE1ha2VmaWxlTWFrZXIoIG91dGZpbGUgKQorCisgICAgIyBBZGQgcGFja2FnZXMgaGVyZS4gT25seSBzcGVjaWZ5IGRsb3Blbi1zdHlsZSBsaWJyYXJ5IGRlcGVuZGVuY2llcyBoZXJlLCBubyBsZGQtc3R5bGUgZGVwZW5kZW5jaWVzIQorICAgICMgUGFyYW1ldGVyczogcmV2aXNpb24sIG5hbWUsIGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZpbGVuYW1lcworICAgICMKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvcmUiLCAiUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiLCAiJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1yZXBybGliICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1tYXRoIiwKKyAgICAiX19mdXR1cmVfXy4qIF9hYmNvbGwuKiBhYmMuKiBjb3B5LiogY29weXJlZy4qIENvbmZpZ1BhcnNlci4qICIgKworICAgICJnZW5lcmljcGF0aC4qIGdldG9wdC4qIGxpbmVjYWNoZS4qIG5ldy4qICIgKworICAgICJvcy4qIHBvc2l4cGF0aC4qIHN0cnVjdC4qICIgKworICAgICJ3YXJuaW5ncy4qIHNpdGUuKiBzdGF0LiogIiArCisgICAgIlVzZXJEaWN0LiogVXNlckxpc3QuKiBVc2VyU3RyaW5nLiogIiArCisgICAgImxpYi1keW5sb2FkL2JpbmFzY2lpLiouc28gbGliLWR5bmxvYWQvX3N0cnVjdC4qLnNvIGxpYi1keW5sb2FkL3RpbWUuKi5zbyAiICsKKyAgICAibGliLWR5bmxvYWQveHJlYWRsaW5lcy4qLnNvIHR5cGVzLiogcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAiICArIAorICAgICJfd2Vha3JlZnNldC4qIHN5c2NvbmZpZy4qIF9zeXNjb25maWdkYXRhLiogY29uZmlnL01ha2VmaWxlICIgKworICAgICIke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcqLmggIiArCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbGxlY3Rpb25zICIgKworICAgICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fY29sbGVjdGlvbnNfYWJjLiogIiArCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zaXRlYnVpbHRpbnMuKiAiICsKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGV2IiwgIlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIiwgIiR7UE59LWNvcmUiLAorICAgICIke2luY2x1ZGVkaXJ9ICIgKworICAgICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAiICsKKyAgICAiJHtsaWJkaXJ9LyoubGEgIiArCisgICAgIiR7bGliZGlyfS8qLmEgIiArCisgICAgIiR7bGliZGlyfS8qLm8gIiArCisgICAgIiR7bGliZGlyfS9wa2djb25maWcgIiArCisgICAgIiR7YmFzZV9saWJkaXJ9LyouYSAiICsKKyAgICAiJHtiYXNlX2xpYmRpcn0vKi5vICIgKworICAgICIke2RhdGFkaXJ9L2FjbG9jYWwgIiArCisgICAgIiR7ZGF0YWRpcn0vcGtnY29uZmlnICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tMnRvMyIsICJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWIydG8zIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taWRsZSIsICJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIsICIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiLAorICAgICIke2JpbmRpcn0vaWRsZSBpZGxlbGliIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHlkb2MiLCAiUHl0aG9uIGludGVyYWN0aXZlIGhlbHAgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tc3RyaW5nb2xkICR7UE59LXJlIiwKKyAgICAiJHtiaW5kaXJ9L3B5ZG9jIHB5ZG9jLiogcHlkb2NfZGF0YSIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc210cGQiLCAiUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iLCAiJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIsCisgICAgIiR7YmluZGlyfS9zbXRwZC4qIHNtdHBkLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWF1ZGlvIiwgIlB5dGhvbiBBdWRpbyBIYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAid2F2ZS4qIGNodW5rLiogc25kaGRyLiogbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuKi5zbyBsaWItZHlubG9hZC9hdWRpb29wLiouc28gYXVkaW9kZXYuKiBzdW5hdWRpby4qIHN1bmF1LiogdG9haWZmLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWFzeW5jaW8iLCAiUHl0aG9uIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzIiwgIiR7UE59LWNvcmUiLAorICAgICJhc3luY2lvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb2RlY3MiLCAiUHl0aG9uIGNvZGVjcywgZW5jb2RpbmdzICYgaTE4biBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCisgICAgImNvZGVjcy4qIGVuY29kaW5ncyBnZXR0ZXh0LiogbG9jYWxlLiogbGliLWR5bmxvYWQvX2xvY2FsZS4qLnNvIGxpYi1keW5sb2FkL19jb2RlY3MqIGxpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy4qLnNvIGxpYi1keW5sb2FkL3VuaWNvZGVkYXRhLiouc28gc3RyaW5ncHJlcC4qIHhkcmxpYi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21waWxlIiwgIlB5dGhvbiBieXRlY29kZSBjb21waWxhdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJweV9jb21waWxlLiogY29tcGlsZWFsbC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jb21wcmVzc2lvbiIsICJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIiwKKyAgICAiZ3ppcC4qIHppcGZpbGUuKiB0YXJmaWxlLiogbGliLWR5bmxvYWQvYnoyLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNyeXB0IiwgIlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImhhc2hsaWIuKiBtZDUuKiBzaGEuKiBsaWItZHlubG9hZC9jcnlwdC4qLnNvIGxpYi1keW5sb2FkL19oYXNobGliLiouc28gbGliLWR5bmxvYWQvX3NoYTI1Ni4qLnNvIGxpYi1keW5sb2FkL19zaGE1MTIuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGV4dHV0aWxzIiwgIlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQiLAorICAgICJsaWItZHlubG9hZC9fY3N2Liouc28gY3N2Liogb3B0cGFyc2UuKiB0ZXh0d3JhcC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jdXJzZXMiLCAiUHl0aG9uIGN1cnNlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjdXJzZXMgbGliLWR5bmxvYWQvX2N1cnNlcy4qLnNvIGxpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuKi5zbyIgKSAjIGRpcmVjdG9yeSArIGxvdyBsZXZlbCBtb2R1bGUKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN0eXBlcyIsICJQeXRob24gQyB0eXBlcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJjdHlwZXMgbGliLWR5bmxvYWQvX2N0eXBlcy4qLnNvIGxpYi1keW5sb2FkL19jdHlwZXNfdGVzdC4qLnNvIiApICMgZGlyZWN0b3J5ICsgbG93IGxldmVsIG1vZHVsZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGF0ZXRpbWUiLCAiUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiLAorICAgICJfc3RycHRpbWUuKiBjYWxlbmRhci4qIGxpYi1keW5sb2FkL2RhdGV0aW1lLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRiIiwgIlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImFueWRibS4qIGR1bWJkYm0uKiB3aGljaGRiLiogZGJtIGxpYi1keW5sb2FkL19kYm0uKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGVidWdnZXIiLCAiUHl0aG9uIGRlYnVnZ2VyIiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc2hlbGwgJHtQTn0tcHByaW50IiwKKyAgICAiYmRiLiogcGRiLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpZmZsaWIiLCAiUHl0aG9uIGhlbHBlcnMgZm9yIGNvbXB1dGluZyBkZWx0YXMgYmV0d2VlbiBvYmplY3RzIiwgIiR7UE59LWxhbmcgJHtQTn0tcmUiLAorICAgICJkaWZmbGliLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYiLCAiUHl0aG9uIGRpc3RyaWJ1dGlvbiB1dGlsaXRpZXMgKHN0YXRpYyBsaWJyYXJpZXMpIiwgIiR7UE59LWRpc3R1dGlscyIsCisgICAgImNvbmZpZy9saWIqLmEiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaXN0dXRpbHMiLCAiUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiLCAiJHtQTn0tY29yZSIsCisgICAgImNvbmZpZyBkaXN0dXRpbHMiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kb2N0ZXN0IiwgIlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tdW5pdHRlc3QgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiIsCisgICAgImRvY3Rlc3QuKiIgKQorCisgICAgIyBGSVhNRSBjb25zaWRlciBhZGRpbmcgdG8gc29tZSBoaWdoZXIgbGV2ZWwgcGFja2FnZQorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWVsZW1lbnR0cmVlIiwgIlB5dGhvbiBlbGVtZW50cmVlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fZWxlbWVudHRyZWUuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZW1haWwiLCAiUHl0aG9uIGVtYWlsIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIsCisgICAgImltYXBsaWIuKiBlbWFpbCIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWZjbnRsIiwgIlB5dGhvbidzIGZjbnRsIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvZmNudGwuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taHRtbCIsICJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImZvcm1hdHRlci4qIGh0bWxlbnRpdHlkZWZzLiogaHRtbGxpYi4qIG1hcmt1cGJhc2UuKiBzZ21sbGliLiogSFRNTFBhcnNlci4qICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1wb3J0bGliIiwgIlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIsICIke1BOfS1jb3JlIiwKKyAgICAiaW1wb3J0bGliIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1nZGJtIiwgIlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2dkYm0uKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW1hZ2UiLCAiUHl0aG9uIGdyYXBoaWNhbCBpbWFnZSBoYW5kbGluZyIsICIke1BOfS1jb3JlIiwKKyAgICAiY29sb3JzeXMuKiBpbWdoZHIuKiBsaWItZHlubG9hZC9pbWFnZW9wLiouc28gbGliLWR5bmxvYWQvcmdiaW1nLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWlvIiwgIlB5dGhvbiBsb3ctbGV2ZWwgSS9PIiwgIiR7UE59LWNvcmUgJHtQTn0tbWF0aCIsCisgICAgImxpYi1keW5sb2FkL19zb2NrZXQuKi5zbyBsaWItZHlubG9hZC9faW8uKi5zbyBsaWItZHlubG9hZC9fc3NsLiouc28gbGliLWR5bmxvYWQvc2VsZWN0Liouc28gbGliLWR5bmxvYWQvdGVybWlvcy4qLnNvIGxpYi1keW5sb2FkL2NTdHJpbmdJTy4qLnNvICIgKworICAgICJwaXBlcy4qIHNvY2tldC4qIHNzbC4qIHRlbXBmaWxlLiogU3RyaW5nSU8uKiBpby4qIF9weWlvLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWpzb24iLCAiUHl0aG9uIEpTT04gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUiLAorICAgICJqc29uIGxpYi1keW5sb2FkL19qc29uLiouc28iICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sYW5nIiwgIlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvIGxpYi1keW5sb2FkL19jb2xsZWN0aW9ucy4qLnNvIGxpYi1keW5sb2FkL19oZWFwcS4qLnNvIGxpYi1keW5sb2FkL193ZWFrcmVmLiouc28gbGliLWR5bmxvYWQvX2Z1bmN0b29scy4qLnNvICIgKworICAgICJsaWItZHlubG9hZC9hcnJheS4qLnNvIGxpYi1keW5sb2FkL2l0ZXJ0b29scy4qLnNvIGxpYi1keW5sb2FkL29wZXJhdG9yLiouc28gbGliLWR5bmxvYWQvcGFyc2VyLiouc28gIiArCisgICAgImF0ZXhpdC4qIGJpc2VjdC4qIGNvZGUuKiBjb2Rlb3AuKiBjb2xsZWN0aW9ucy4qIF9jb2xsZWN0aW9uc19hYmMuKiBkaXMuKiBmdW5jdG9vbHMuKiBoZWFwcS4qIGluc3BlY3QuKiBrZXl3b3JkLiogb3Bjb2RlLiogc3ltYm9sLiogcmVwci4qIHRva2VuLiogIiArCisgICAgInRva2VuaXplLiogdHJhY2ViYWNrLiogd2Vha3JlZi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sb2dnaW5nIiwgIlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiLAorICAgICJsb2dnaW5nIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWFpbGJveCIsICJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1pbWUiLAorICAgICJtYWlsYm94LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1hdGgiLCAiUHl0aG9uIG1hdGggc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvY21hdGguKi5zbyBsaWItZHlubG9hZC9tYXRoLiouc28gbGliLWR5bmxvYWQvX3JhbmRvbS4qLnNvIHJhbmRvbS4qIHNldHMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWltZSIsICJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJtaW1ldG9vbHMuKiB1dS4qIHF1b3ByaS4qIHJmYzgyMi4qIE1pbWVXcml0ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbW1hcCIsICJQeXRob24gbWVtb3J5LW1hcHBlZCBmaWxlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgImxpYi1keW5sb2FkL21tYXAuKi5zbyAiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW11bHRpcHJvY2Vzc2luZyIsICJQeXRob24gbXVsdGlwcm9jZXNzaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiLAorICAgICJsaWItZHlubG9hZC9fbXVsdGlwcm9jZXNzaW5nLiouc28gbXVsdGlwcm9jZXNzaW5nIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbmV0Y2xpZW50IiwgIlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIiwgIiR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tZGF0ZXRpbWUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1pbWUiLAorICAgICIqQ29va2llKi4qICIgKworICAgICJiYXNlNjQuKiBjb29raWVsaWIuKiBmdHBsaWIuKiBnb3BoZXJsaWIuKiBobWFjLiogaHR0cGxpYi4qIG1pbWV0eXBlcy4qIG5udHBsaWIuKiBwb3BsaWIuKiBzbXRwbGliLiogdGVsbmV0bGliLiogdXJsbGliICB1dWlkLiogcmZjODIyLiogbWltZXRvb2xzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW5ldHNlcnZlciIsICJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgc2VydmVycyIsICIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCAke1BOfS1zaGVsbCAke1BOfS10aHJlYWRpbmciLAorICAgICJjZ2kuKiAqSFRUUFNlcnZlci4qIFNvY2tldFNlcnZlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1udW1iZXJzIiwgIlB5dGhvbiBudW1iZXIgQVBJcyIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tcmUiLAorICAgICJkZWNpbWFsLiogZnJhY3Rpb25zLiogbnVtYmVycy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1waWNrbGUiLCAiUHl0aG9uIHNlcmlhbGlzYXRpb24vcGVyc2lzdGVuY2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIsCisgICAgInBpY2tsZS4qIHNoZWx2ZS4qIGxpYi1keW5sb2FkL2NQaWNrbGUuKi5zbyBwaWNrbGV0b29scy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wa2d1dGlsIiwgIlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgInBrZ3V0aWwuKiIpCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wcHJpbnQiLCAiUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJwcHJpbnQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHJvZmlsZSIsICJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS10ZXh0dXRpbHMiLAorICAgICJwcm9maWxlLiogcHN0YXRzLiogY1Byb2ZpbGUuKiBsaWItZHlubG9hZC9fbHNwcm9mLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlIiwgIlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIsICIke1BOfS1jb3JlIiwKKyAgICAicmUuKiBzcmUuKiBzcmVfY29tcGlsZS4qIHNyZV9jb25zdGFudHMqIHNyZV9wYXJzZS4qIiApICMgX3NyZSBpcyBidWlsdGluCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZWFkbGluZSIsICJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvcmVhZGxpbmUuKi5zbyBybGNvbXBsZXRlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZXBybGliIiwgIlB5dGhvbiBhbHRlcm5hdGUgcmVwcigpIGltcGxlbWVudGF0aW9uIiwgIiR7UE59LWNvcmUiLAorICAgICJyZXBybGliLnB5IiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZXNvdXJjZSIsICJQeXRob24gcmVzb3VyY2UgY29udHJvbCBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3Jlc291cmNlLiouc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNoZWxsIiwgIlB5dGhvbiBzaGVsbC1saWtlIGZ1bmN0aW9uYWxpdHkiLCAiJHtQTn0tY29yZSAke1BOfS1yZSIsCisgICAgImNtZC4qIGNvbW1hbmRzLiogZGlyY2FjaGUuKiBmbm1hdGNoLiogZ2xvYi4qIHBvcGVuMi4qIHNobGV4Liogc2h1dGlsLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN1YnByb2Nlc3MiLCAiUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIsCisgICAgInN1YnByb2Nlc3MuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3FsaXRlMyIsICJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmciLAorICAgICJsaWItZHlubG9hZC9fc3FsaXRlMy4qLnNvIHNxbGl0ZTMvZGJhcGkyLiogc3FsaXRlMy9fX2luaXRfXy4qIHNxbGl0ZTMvZHVtcC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zcWxpdGUzLXRlc3RzIiwgIlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiLCAiJHtQTn0tY29yZSAke1BOfS1zcWxpdGUzIiwKKyAgICAic3FsaXRlMy90ZXN0IiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zdHJpbmdvbGQiLCAiUHl0aG9uIHN0cmluZyBBUElzIFtkZXByZWNhdGVkXSIsICIke1BOfS1jb3JlICR7UE59LXJlIiwKKyAgICAibGliLWR5bmxvYWQvc3Ryb3AuKi5zbyBzdHJpbmcuKiBzdHJpbmdvbGQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3lzbG9nIiwgIlB5dGhvbiBzeXNsb2cgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9zeXNsb2cuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGVybWluYWwiLCAiUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgInB0eS4qIHR0eS4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXN0cyIsICJQeXRob24gdGVzdHMiLCAiJHtQTn0tY29yZSIsCisgICAgInRlc3QiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10aHJlYWRpbmciLCAiUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyIsCisgICAgIl90aHJlYWRpbmdfbG9jYWwuKiBkdW1teV90aHJlYWQuKiBkdW1teV90aHJlYWRpbmcuKiBtdXRleC4qIHRocmVhZGluZy4qIFF1ZXVlLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRraW50ZXIiLCAiUHl0aG9uIFRjbC9UayBiaW5kaW5ncyIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvX3RraW50ZXIuKi5zbyBsaWItdGsgdGtpbnRlciIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXVuaXR0ZXN0IiwgIlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIiwgIiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiLAorICAgICJ1bml0dGVzdC8iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXVuaXhhZG1pbiIsICJQeXRob24gVW5peCBhZG1pbmlzdHJhdGlvbiBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9uaXMuKi5zbyBsaWItZHlubG9hZC9ncnAuKi5zbyBsaWItZHlubG9hZC9wd2QuKi5zbyBnZXRwYXNzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXhtbCIsICJQeXRob24gYmFzaWMgWE1MIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1yZSIsCisgICAgImxpYi1keW5sb2FkL3B5ZXhwYXQuKi5zbyB4bWwgeG1sbGliLioiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS14bWxycGMiLCAiUHl0aG9uIFhNTC1SUEMgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIsCisgICAgInhtbHJwY2xpYi4qIFNpbXBsZVhNTFJQQ1NlcnZlci4qIERvY1hNTFJQQ1NlcnZlci4qIHhtbHJwYyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWFpbGJveCIsICJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1pbWUiLAorICAgICJtYWlsYm94LioiICkKKworICAgIG0ubWFrZSgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzRiZDdiNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3NlcmRldnRyeQpAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKK2lmIFsgIiQxIiA9ICIiIC1vICIkMSIgPSAiLS1oZWxwIiBdIDsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiAkMCA8c2VyaWFsIHRlcm1pbmFsIGNvbW1hbmQ+IgorICAgIGVjaG8KKyAgICBlY2hvICJTaW1wbGUgc2NyaXB0IHRvIGhhbmRsZSBtYWludGFpbmluZyBhIHRlcm1pbmFsIGZvciBzZXJpYWwgZGV2aWNlcyB0aGF0IgorICAgIGVjaG8gImRpc2FwcGVhciB3aGVuIGEgZGV2aWNlIGlzIHBvd2VyZWQgZG93biBvciByZXNldCwgc3VjaCBhcyB0aGUgVVNCIgorICAgIGVjaG8gInNlcmlhbCBjb25zb2xlIG9uIHRoZSBvcmlnaW5hbCBCZWFnbGVCb25lICh3aGl0ZSB2ZXJzaW9uKS4iCisgICAgZWNobworICAgIGVjaG8gImUuZy4gJDAgcGljb2NvbSAtYiAxMTUyMDAgL2Rldi90dHlVU0IwIgorICAgIGVjaG8KKyAgICBleGl0CitmaQorCithcmdzPSIkQCIKK0RFVklDRT0iIgord2hpbGUgWyAiJDEiICE9ICIiIF07IGRvCisgICAgY2FzZSAiJDEiIGluCisgICAgICAgIC9kZXYvKikKKyAgICAgICAgICAgIERFVklDRT0kMQorICAgICAgICAgICAgYnJlYWs7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCitpZiBbICIkREVWSUNFIiAhPSAiIiBdIDsgdGhlbgorICAgIHdoaWxlIHRydWU7IGRvCisgICAgICAgIGlmIFsgISAtZSAkREVWSUNFIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJzZXJkZXZ0cnk6IHdhaXRpbmcgZm9yICRERVZJQ0UgdG8gZXhpc3QuLi4iCisgICAgICAgICAgICB3aGlsZSBbICEgLWUgJERFVklDRSBdOyBkbworICAgICAgICAgICAgICAgIHNsZWVwIDAuMQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICBpZiBbICEgLXcgJERFVklDRSBdIDsgdGhlbgorICAgICAgICAgICAgIyBTb21ldGltZXMgKHByZXN1bWFibHkgYmVjYXVzZSBvZiBhIHJhY2Ugd2l0aCB1ZGV2KSB3ZSBnZXQgdG8KKyAgICAgICAgICAgICMgdGhlIGRldmljZSBiZWZvcmUgaXRzIHBlcm1pc3Npb25zIGhhdmUgYmVlbiBzZXQgdXAKKyAgICAgICAgICAgIFJFVFJZTlVNPTAKKyAgICAgICAgICAgIHdoaWxlIFsgISAtdyAkREVWSUNFIF07IGRvCisgICAgICAgICAgICAgICAgaWYgWyAiJFJFVFJZTlVNIiA9ICIyIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJEZXZpY2UgJERFVklDRSBleGlzdHMgYnV0IGlzIG5vdCB3cml0YWJsZSEiCisgICAgICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgUkVUUllOVU09JCgoUkVUUllOVU0rMSkpCisgICAgICAgICAgICAgICAgc2xlZXAgMC4xCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgICRhcmdzCisgICAgICAgIGlmIFsgLWUgJERFVklDRSBdIDsgdGhlbgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICBkb25lCitlbHNlCisgICAgZWNobyAiVW5hYmxlIHRvIGRldGVybWluZSBkZXZpY2Ugbm9kZSBmcm9tIGNvbW1hbmQ6ICRhcmdzIgorICAgIGV4aXQgMQorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lLnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllNTcyNWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi90ZXN0X2J1aWxkX3RpbWUuc2gKQEAgLTAsMCArMSwyMzcgQEAKKyMhL2Jpbi9iYXNoCisKKyMgQnVpbGQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IHNjcmlwdAorIworIyBDb3B5cmlnaHQgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAiZ2l0IGJpc2VjdCBydW4iCisjIGluIG9yZGVyIHRvIGZpbmQgcmVncmVzc2lvbnMgaW4gYnVpbGQgdGltZSwgaG93ZXZlciBpdCBjYW4gYWxzbyBiZSB1c2VkCisjIGluZGVwZW5kZW50bHkuIEl0IGNsZWFucyBvdXQgdGhlIGJ1aWxkIG91dHB1dCBkaXJlY3RvcmllcywgcnVucyBhCisjIHNwZWNpZmllZCB3b3JrZXIgc2NyaXB0IChhbiBleGFtcGxlIGlzIHRlc3RfYnVpbGRfdGltZV93b3JrZXIuc2gpIHVuZGVyCisjIFRJTUUoMSksIGxvZ3MgdGhlIHJlc3VsdHMgdG8gVEVTVF9MT0dESVIgKGRlZmF1bHQgL3RtcCkgYW5kIHJldHVybnMgYQorIyB2YWx1ZSB0ZWxsaW5nICJnaXQgYmlzZWN0IHJ1biIgd2hldGhlciB0aGUgYnVpbGQgdGltZSBpcyBnb29kICh1bmRlcgorIyB0aGUgc3BlY2lmaWVkIHRocmVzaG9sZCkgb3IgYmFkIChvdmVyIGl0KS4gVGhlcmUgaXMgYWxzbyBhIHRvbGVyYW5jZQorIyBvcHRpb24gYnV0IGl0IGlzIG5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsIGFzIGl0IG9ubHkgc3VidHJhY3RzIHRoZQorIyB0b2xlcmFuY2UgZnJvbSB0aGUgZ2l2ZW4gdGhyZXNob2xkIGFuZCB1c2VzIGl0IGFzIHRoZSBhY3R1YWwgdGhyZXNob2xkLgorIworIyBJdCBpcyBhbHNvIGNhcGFibGUgb2YgdGFraW5nIGEgZmlsZSBsaXN0aW5nIGdpdCByZXZpc2lvbiBoYXNoZXMgdG8gYmUKKyMgdGVzdC1hcHBsaWVkIHRvIHRoZSByZXBvc2l0b3J5IGluIG9yZGVyIHRvIGdldCBwYXN0IGJ1aWxkIGZhaWx1cmVzIHRoYXQKKyMgd291bGQgb3RoZXJ3aXNlIGNhdXNlIGNlcnRhaW4gcmV2aXNpb25zIHRvIGhhdmUgdG8gYmUgc2tpcHBlZDsgaWYgYQorIyByZXZpc2lvbiBkb2VzIG5vdCBhcHBseSBjbGVhbmx5IHRoZW4gdGhlIHNjcmlwdCBhc3N1bWVzIGl0IGRvZXMgbm90CisjIG5lZWQgdG8gYmUgYXBwbGllZCBhbmQgaWdub3JlcyBpdC4KKyMKKyMgUGxlYXNlIHNlZSB0aGUgaGVscCBvdXRwdXQgKHN5bnRheCBiZWxvdykgZm9yIHNvbWUgaW1wb3J0YW50IHNldHVwCisjIGluc3RydWN0aW9ucy4KKyMKKyMgQVVUSE9SUworIyBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworCitzeW50YXgoKSB7CisgICAgZWNobyAic3ludGF4OiAkMCA8c2NyaXB0PiA8dGltZT4gPHRvbGVyYW5jZT4gW3BhdGNocmV2bGlzdF0iCisgICAgZWNobyAiIgorICAgIGVjaG8gIiAgc2NyaXB0ICAgICAgIC0gd29ya2VyIHNjcmlwdCBmaWxlIChpZiBpbiBjdXJyZW50IGRpciwgcHJlZml4IHdpdGggLi8pIgorICAgIGVjaG8gIiAgdGltZSAgICAgICAgIC0gdGltZSB0aHJlc2hvbGQgKGluIHNlY29uZHMsIHN1ZmZpeCBtIGZvciBtaW51dGVzKSIKKyAgICBlY2hvICIgIHRvbGVyYW5jZSAgICAtIHRvbGVyYW5jZSAoaW4gc2Vjb25kcywgc3VmZml4IG0gZm9yIG1pbnV0ZXMgb3IgJSBmb3IiCisgICAgZWNobyAiICAgICAgICAgICAgICAgICBwZXJjZW50YWdlLCBjYW4gYmUgMCkiCisgICAgZWNobyAiICBwYXRjaHJldmxpc3QgLSBvcHRpb25hbCBmaWxlIGxpc3RpbmcgcmV2aXNpb25zIHRvIGFwcGx5IGFzIHBhdGNoZXMgb24gdG9wIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJZb3UgbXVzdCBzZXQgVEVTVF9CVUlMRERJUiB0byBwb2ludCB0byBhIHByZXZpb3VzbHkgY3JlYXRlZCBidWlsZCBkaXJlY3RvcnksIgorICAgIGVjaG8gImhvd2V2ZXIgcGxlYXNlIG5vdGUgdGhhdCB0aGlzIHNjcmlwdCB3aWxsIHdpcGUgb3V0IHRoZSBUTVBESVIgZGVmaW5lZCBpbiIKKyAgICBlY2hvICJURVNUX0JVSUxERElSL2NvbmYvbG9jYWwuY29uZiBhcyBwYXJ0IG9mIGl0cyBpbml0aWFsIHNldHVwIChhcyB3ZWxsIGFzIHlvdXIiCisgICAgZWNobyAifi8uY2NhY2hlKSIKKyAgICBlY2hvICIiCisgICAgZWNobyAiVG8gZ2V0IHJpZCBvZiB0aGUgc3VkbyBwcm9tcHQsIHBsZWFzZSBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvc3Vkb2VycyIKKyAgICBlY2hvICIodXNlICd2aXN1ZG8nIHRvIGVkaXQgdGhpczsgYWxzbyBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHVzZXIgeW91IGFyZSBydW5uaW5nIgorICAgIGVjaG8gImFzIGlzIGEgbWVtYmVyIG9mIHRoZSAnd2hlZWwnIGdyb3VwKToiCisgICAgZWNobyAiIgorICAgIGVjaG8gIiV3aGVlbCBBTEw9KEFMTCkgTk9QQVNTV0Q6IC9zYmluL3N5c2N0bCAtdyB2bS5kcm9wX2NhY2hlcz1bMS0zXSIKKyAgICBlY2hvICIiCisgICAgZWNobyAiTm90ZTogaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZGlzYWJsZSBjcm9uZCBhbmQgYW55IG90aGVyIHByb2Nlc3MgdGhhdCIKKyAgICBlY2hvICJtYXkgY2F1c2Ugc2lnbmlmaWNhbnQgQ1BVIG9yIEkvTyB1c2FnZSBkdXJpbmcgYnVpbGQgcGVyZm9ybWFuY2UgdGVzdHMuIgorfQorCisjIE5vdGUgLSB3ZSBleGl0IHdpdGggMjUwIGhlcmUgYmVjYXVzZSB0aGF0IHdpbGwgdGVsbCBnaXQgYmlzZWN0IHJ1biB0aGF0CisjIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQgYW5kIHN0b3AKK2lmIFsgIiQxIiA9ICIiIF0gOyB0aGVuCisgICBzeW50YXgKKyAgIGV4aXQgMjUwCitmaQorCitpZiBbICIkMiIgPSAiIiBdIDsgdGhlbgorICAgc3ludGF4CisgICBleGl0IDI1MAorZmkKKworaWYgWyAiJDMiID0gIiIgXSA7IHRoZW4KKyAgIHN5bnRheAorICAgZXhpdCAyNTAKK2ZpCisKK2lmICEgW1sgIiQyIiA9fiBeWzAtOV1bMC05bS5dKiQgXV0gOyB0aGVuCisgICBlY2hvICInJDInIGlzIG5vdCBhIHZhbGlkIG51bWJlciBmb3IgdGhyZXNob2xkIgorICAgZXhpdCAyNTAKK2ZpCisKK2lmICEgW1sgIiQzIiA9fiBeWzAtOV1bMC05bS4lXSokIF1dIDsgdGhlbgorICAgZWNobyAiJyQzJyBpcyBub3QgYSB2YWxpZCBudW1iZXIgZm9yIHRvbGVyYW5jZSIKKyAgIGV4aXQgMjUwCitmaQorCitpZiBbICIkVEVTVF9CVUlMRERJUiIgPSAiIiBdIDsgdGhlbgorICAgZWNobyAiUGxlYXNlIHNldCBURVNUX0JVSUxERElSIHRvIGEgcHJldmlvdXNseSBjcmVhdGVkIGJ1aWxkIGRpcmVjdG9yeSIKKyAgIGV4aXQgMjUwCitmaQorCitpZiBbICEgLWQgIiRURVNUX0JVSUxERElSIiBdIDsgdGhlbgorICAgZWNobyAiVEVTVF9CVUlMRERJUiAkVEVTVF9CVUlMRERJUiBub3QgZm91bmQiCisgICBleGl0IDI1MAorZmkKKworZ2l0IGRpZmYgLS1xdWlldAoraWYgWyAkPyAhPSAwIF0gOyB0aGVuCisgICAgZWNobyAiV29ya2luZyB0cmVlIGlzIGRpcnR5LCBjYW5ub3QgcHJvY2VlZCIKKyAgICBleGl0IDI1MQorZmkKKworaWYgWyAiJEJCX0VOVl9FWFRSQVdISVRFIiAhPSAiIiBdIDsgdGhlbgorICAgZWNobyAiV0FSTklORzogeW91IGFyZSBydW5uaW5nIGFmdGVyIHNvdXJjaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzY3JpcHQsIHRoaXMgaXMgbm90IHJlY29tbWVuZGVkIgorZmkKKworcnVuc2NyaXB0PSQxCit0aW1ldGhyZXNob2xkPSQyCit0b2xlcmFuY2U9JDMKKworaWYgWyAiJDQiICE9ICIiIF0gOyB0aGVuCisgICAgcGF0Y2hyZXZsaXN0PWBjYXQgJDRgCitlbHNlCisgICAgcGF0Y2hyZXZsaXN0PSIiCitmaQorCitpZiBbWyB0aW1ldGhyZXNob2xkID09ICptKiBdXSA7IHRoZW4KKyAgICB0aW1ldGhyZXNob2xkPWBlY2hvICR0aW1ldGhyZXNob2xkIHwgc2VkIHMvbS8qNjAvIHwgYmNgCitmaQorCitpZiBbWyAkdG9sZXJhbmNlID09ICptKiBdXSA7IHRoZW4KKyAgICB0b2xlcmFuY2U9YGVjaG8gJHRvbGVyYW5jZSB8IHNlZCBzL20vKjYwLyB8IGJjYAorZWxpZiBbWyAkdG9sZXJhbmNlID09IColKiBdXSA7IHRoZW4KKyAgICB0b2xlcmFuY2U9YGVjaG8gJHRvbGVyYW5jZSB8IHNlZCBzLyUvL2AKKyAgICB0b2xlcmFuY2U9YGVjaG8gInNjYWxlID0gMjsgKCgkdG9sZXJhbmNlICogJHRpbWV0aHJlc2hvbGQpIC8gMTAwKSIgfCBiY2AKK2ZpCisKK3RtcGRpcj1gZ3JlcCAiXlRNUERJUiIgJFRFU1RfQlVJTERESVIvY29uZi9sb2NhbC5jb25mIHwgc2VkIC1lICdzL1RNUERJUlsgXHRdKj1bIFx0XD9dKiIvLycgLWUgJ3MvIi8vJ2AKK2lmIFsgIngkdG1wZGlyIiA9ICJ4IiBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIGRldGVybWluZSBUTVBESVIgZnJvbSAkVEVTVF9CVUlMRERJUi9jb25mL2xvY2FsLmNvbmYsIGJhaWxpbmcgb3V0IgorICAgIGV4aXQgMjUwCitmaQorc3N0YXRlZGlyPWBncmVwICJeU1NUQVRFX0RJUiIgJFRFU1RfQlVJTERESVIvY29uZi9sb2NhbC5jb25mIHwgc2VkIC1lICdzL1NTVEFURV9ESVJbIFx0XD9dKj1bIFx0XSoiLy8nIC1lICdzLyIvLydgCitpZiBbICJ4JHNzdGF0ZWRpciIgPSAieCIgXTsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byBkZXRlcm1pbmUgU1NUQVRFX0RJUiBmcm9tICRURVNUX0JVSUxERElSL2NvbmYvbG9jYWwuY29uZiwgYmFpbGluZyBvdXQiCisgICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgYGV4cHIgbGVuZ3RoICR0bXBkaXJgIC1sdCA0IF0gOyB0aGVuCisgICAgZWNobyAiVE1QRElSICR0bXBkaXIgaXMgbGVzcyB0aGFuIDQgY2hhcmFjdGVycywgYmFpbGluZyBvdXQiCisgICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgYGV4cHIgbGVuZ3RoICRzc3RhdGVkaXJgIC1sdCA0IF0gOyB0aGVuCisgICAgZWNobyAiU1NUQVRFX0RJUiAkc3N0YXRlZGlyIGlzIGxlc3MgdGhhbiA0IGNoYXJhY3RlcnMsIGJhaWxpbmcgb3V0IgorICAgIGV4aXQgMjUwCitmaQorCitlY2hvIC1uICJBYm91dCB0byB3aXBlIG91dCBUTVBESVIgJHRtcGRpciwgcHJlc3MgQ3RybCtDIHRvIGJyZWFrIG91dC4uLiAgIgorZm9yIGkgaW4gOSA4IDcgNiA1IDQgMyAyIDEKK2RvCisgICAgZWNobyAtbmUgIlx4MDgkaSIKKyAgICBzbGVlcCAxCitkb25lCitlY2hvCisKK3B1c2hkIC4gPiAvZGV2L251bGwKKworcm0gLWYgcHNldWRvZG9uZQorZWNobyAiUmVtb3ZpbmcgVE1QRElSICR0bXBkaXIuLi4iCitybSAtcmYgJHRtcGRpcgorZWNobyAiUmVtb3ZpbmcgVE1QRElSICR0bXBkaXItKmxpYmMuLi4iCitybSAtcmYgJHRtcGRpci0qbGliYworZWNobyAiUmVtb3ZpbmcgU1NUQVRFX0RJUiAkc3N0YXRlZGlyLi4uIgorcm0gLXJmICRzc3RhdGVkaXIKK2VjaG8gIlJlbW92aW5nIH4vLmNjYWNoZS4uLiIKK3JtIC1yZiB+Ly5jY2FjaGUKKworZWNobyAiU3luY2luZy4uLiIKK3N5bmMKK3N5bmMKK2VjaG8gIkRyb3BwaW5nIFZNIGNhY2hlLi4uIgorI2VjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcworc3VkbyAvc2Jpbi9zeXNjdGwgLXcgdm0uZHJvcF9jYWNoZXM9MyA+IC9kZXYvbnVsbAorCitpZiBbICIkVEVTVF9MT0dESVIiID0gIiIgXSA7IHRoZW4KKyAgICBsb2dkaXI9Ii90bXAiCitlbHNlCisgICAgbG9nZGlyPSIkVEVTVF9MT0dESVIiCitmaQorcmV2PWBnaXQgcmV2LXBhcnNlIEhFQURgCitsb2dmaWxlPSIkbG9nZGlyL3RpbWVsb2dfJHJldi5sb2ciCitlY2hvIC1uID4gJGxvZ2ZpbGUKKworZ2l0cm9vdD1gZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWxgCitjZCAkZ2l0cm9vdAorZm9yIHBhdGNocmV2IGluICRwYXRjaHJldmxpc3QgOyBkbworICAgIGVjaG8gIkFwcGx5aW5nICRwYXRjaHJldiIKKyAgICBwYXRjaGZpbGU9YG1rdGVtcGAKKyAgICBnaXQgc2hvdyAkcGF0Y2hyZXYgPiAkcGF0Y2hmaWxlCisgICAgZ2l0IGFwcGx5IC0tY2hlY2sgJHBhdGNoZmlsZSAmPiAvZGV2L251bGwKKyAgICBpZiBbICQ/ICE9IDAgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiIC4uLiBwYXRjaCBkb2VzIG5vdCBhcHBseSB3aXRob3V0IGVycm9ycywgaWdub3JpbmciCisgICAgZWxzZQorICAgICAgICBlY2hvICJBcHBsaWVkICRwYXRjaHJldiIgPj4gJGxvZ2ZpbGUKKyAgICAgICAgZ2l0IGFwcGx5ICRwYXRjaGZpbGUgJj4gL2Rldi9udWxsCisgICAgZmkKKyAgICBybSAkcGF0Y2hmaWxlCitkb25lCisKK3N5bmMKK2VjaG8gIlF1aWVzY2luZyBmb3IgNXMuLi4iCitzbGVlcCA1CisKK2VjaG8gIlJ1bm5pbmcgJHJ1bnNjcmlwdCBhdCAkcmV2Li4uIgordGltZW91dGZpbGU9YG1rdGVtcGAKKy91c3IvYmluL3RpbWUgLW8gJHRpbWVvdXRmaWxlIC1mICIlZVxucmVhbFx0JUVcbnVzZXJcdCVVc1xuc3lzXHQlU3Ncbm1heG1cdCVNayIgJHJ1bnNjcmlwdCAyPiYxIHwgdGVlIC1hICRsb2dmaWxlCitleGl0c3RhdHVzPSRQSVBFU1RBVFVTCisKK2dpdCByZXNldCAtLWhhcmQgSEVBRCA+IC9kZXYvbnVsbAorcG9wZCA+IC9kZXYvbnVsbAorCit0aW1lcmVzdWx0PWBoZWFkIC1uMSAkdGltZW91dGZpbGVgCitjYXQgJHRpbWVvdXRmaWxlIHwgdGVlIC1hICRsb2dmaWxlCitybSAkdGltZW91dGZpbGUKKworaWYgWyAkZXhpdHN0YXR1cyAhPSAwIF0gOyB0aGVuCisgICAgIyBCdWlsZCBmYWlsZWQsIGV4aXQgd2l0aCAxMjUgdG8gdGVsbCBnaXQgYmlzZWN0IHJ1biB0byBza2lwIHRoaXMgcmV2CisgICAgZWNobyAiKioqIEJ1aWxkIGZhaWxlZCAoZXhpdCBjb2RlICRleGl0c3RhdHVzKSwgc2tpcHBpbmcuLi4iIHwgdGVlIC1hICRsb2dmaWxlCisgICAgZXhpdCAxMjUKK2ZpCisKK3JldD1gZWNobyAic2NhbGUgPSAyOyAkdGltZXJlc3VsdCA+ICR0aW1ldGhyZXNob2xkIC0gJHRvbGVyYW5jZSIgfCBiY2AKK2VjaG8gIlJldHVybmluZyAkcmV0IiB8IHRlZSAtYSAkbG9nZmlsZQorZXhpdCAkcmV0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZV93b3JrZXIuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi90ZXN0X2J1aWxkX3RpbWVfd29ya2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlMjBhOWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi90ZXN0X2J1aWxkX3RpbWVfd29ya2VyLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGhpcyBpcyBhbiBleGFtcGxlIHNjcmlwdCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGVzdF9idWlsZF90aW1lLnNoCisKK2lmIFsgIiRURVNUX0JVSUxERElSIiA9ICIiIF0gOyB0aGVuCisgICAgZWNobyAiVEVTVF9CVUlMRERJUiBpcyBub3Qgc2V0IgorICAgIGV4aXQgMQorZmkKKworYnVpbGRzdWJkaXI9YGJhc2VuYW1lICRURVNUX0JVSUxERElSYAoraWYgWyAhIC1kICRidWlsZHN1YmRpciBdIDsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byBmaW5kIGJ1aWxkIHN1YmRpciAkYnVpbGRzdWJkaXIgaW4gY3VycmVudCBkaXJlY3RvcnkiCisgICAgZXhpdCAxCitmaQorCitpZiBbIC1mIG9lLWluaXQtYnVpbGQtZW52IF0gOyB0aGVuCisgICAgLiAuL29lLWluaXQtYnVpbGQtZW52ICRidWlsZHN1YmRpcgorZWxpZiBbIC1mIHBva3ktaW5pdC1idWlsZC1lbnYgXSA7IHRoZW4KKyAgICAuIC4vcG9reS1pbml0LWJ1aWxkLWVudiAkYnVpbGRzdWJkaXIKK2Vsc2UKKyAgICBlY2hvICJVbmFibGUgdG8gZmluZCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQiCisgICAgZXhpdCAxCitmaQorCitpZiBbIC1mIC4uL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIgXSA7IHRoZW4KKyAgICB0YXJnZXQ9ImNvcmUtaW1hZ2Utc2F0byIKK2Vsc2UKKyAgICB0YXJnZXQ9InBva3ktaW1hZ2Utc2F0byIKK2ZpCisKK2VjaG8gIkJ1aWxkIHN0YXJ0ZWQgYXQgYGRhdGUgIislWS0lbS0lZCAlSDolTTolUyJgIgorZWNobyAiYml0YmFrZSAkdGFyZ2V0IgorYml0YmFrZSAkdGFyZ2V0CityZXQ9JD8KK2VjaG8gIkJ1aWxkIGZpbmlzaGVkIGF0IGBkYXRlICIrJVktJW0tJWQgJUg6JU06JVMiYCIKK2V4aXQgJHJldAorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODZjYzgyYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9jb250cmliL3ZlcmlmeS1ob21lcGFnZS5weQpAQCAtMCwwICsxLDYzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIGZvciB2ZXJpZnkgSE9NRVBBR0UuCisjIFRoZSByZXN1bHQgaXMgaW5mbHVlbmNlZCBieSBuZXR3b3JrIGVudmlyb25tZW50LCBzaW5jZSB0aGUgdGltZW91dCBvZiBjb25uZWN0IHVybCBpcyA1IHNlY29uZHMgYXMgZGVmYXVsdC4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHVybGxpYjIKKworZGVmIHNlYXJjaF9iaXRiYWtlcGF0aCgpOgorICAgIGJpdGJha2VwYXRoID0gIiIKKworICAgICMgU2VhcmNoIHBhdGggdG8gYml0YmFrZSBsaWIgZGlyIGluIG9yZGVyIHRvIGxvYWQgYmIgbW9kdWxlcworICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vYml0YmFrZS9saWIvYmInKSk6CisgICAgICAgIGJpdGJha2VwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICcuLi8uLi9iaXRiYWtlL2xpYicpCisgICAgICAgIGJpdGJha2VwYXRoID0gb3MucGF0aC5hYnNwYXRoKGJpdGJha2VwYXRoKQorICAgIGVsc2U6CisgICAgICAgICMgTG9vayBmb3IgYml0YmFrZS9iaW4gZGlyIGluIFBBVEgKKyAgICAgICAgZm9yIHB0aCBpbiBvcy5lbnZpcm9uWydQQVRIJ10uc3BsaXQoJzonKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICcuLi9saWIvYmInKSk6CisgICAgICAgICAgICAgICAgYml0YmFrZXBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHB0aCwgJy4uL2xpYicpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmV0dXJuIGJpdGJha2VwYXRoCisKKyMgRm9yIGltcG9ydGluZyB0aGUgZm9sbG93aW5nIG1vZHVsZXMKK3N5cy5wYXRoLmluc2VydCgwLCBzZWFyY2hfYml0YmFrZXBhdGgoKSkKK2ltcG9ydCBiYi50aW5mb2lsCisKK2RlZiB3Z2V0SG9tZXBhZ2UocG4sIGhvbWVwYWdlKToKKyAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoJ3dnZXQgJyArICctcSAtVCA1IC10IDEgLS1zcGlkZXIgJyArIGhvbWVwYWdlLCBzaGVsbCA9IFRydWUpCisgICAgaWYgcmVzdWx0OgorICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gdmVyaWZ5IEhPTUVQQUdFICglcykgb2YgJXMiICUgKGhvbWVwYWdlLCBwbikpCisgICAgICAgIHJldHVybiAxCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDAKKworZGVmIHZlcmlmeUhvbWVwYWdlKGJiaGFuZGxlcik6CisgICAgcGtnX3BuID0gYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4KKyAgICBwbmxpc3QgPSBzb3J0ZWQocGtnX3BuKQorICAgIGNvdW50ID0gMAorICAgIGZvciBwbiBpbiBwbmxpc3Q6CisgICAgICAgIGZuID0gcGtnX3BuW3BuXS5wb3AoKQorICAgICAgICBkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBiYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKyAgICAgICAgaG9tZXBhZ2UgPSBkYXRhLmdldFZhcigiSE9NRVBBR0UiKQorICAgICAgICBpZiBob21lcGFnZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4oaG9tZXBhZ2UsIHRpbWVvdXQ9NSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIHdnZXRIb21lcGFnZShwbiwgaG9tZXBhZ2UpCisgICAgcmV0dXJuIGNvdW50CisKK2lmIF9fbmFtZV9fPT0nX19tYWluX18nOgorICAgIGZhaWxjb3VudCA9IDAKKyAgICBiYmhhbmRsZXIgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIGJiaGFuZGxlci5wcmVwYXJlKCkKKyAgICBwcmludCAiU3RhcnQgdG8gdmVyaWZ5IEhPTUVQQUdFOiIKKyAgICBmYWlsY291bnQgPSB2ZXJpZnlIb21lcGFnZShiYmhhbmRsZXIpCisgICAgcHJpbnQgImZpbmlzaCB0byB2ZXJpZnkgSE9NRVBBR0UuIgorICAgIHByaW50ICJTdW1tYXJ5OiAlcyBmYWlsZWQiICUgZmFpbGNvdW50CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvY3Atbm9lcnJvciBiL3lvY3RvLXBva3kvc2NyaXB0cy9jcC1ub2Vycm9yCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ZWI5MGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY3Atbm9lcnJvcgpAQCAtMCwwICsxLDUyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQWxsb3cgY29weWluZyBvZiAkMSB0byAkMiBidXQgaWYgZmlsZXMgaW4gJDEgZGlzYXBwZWFyIGR1cmluZyB0aGUgY29weSBvcGVyYXRpb24sCisjIGRvbid0IGVycm9yLgorIyBBbHNvIGRvbid0IGVycm9yIGlmICQxIGRpc2FwcGVhcnMuCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorCitkZWYgY29weXRyZWUoc3JjLCBkc3QsIHN5bWxpbmtzPUZhbHNlLCBpZ25vcmU9Tm9uZSk6CisgICAgIiIiQmFzZWQgb24gc2h1dGlsLmNvcHl0cmVlIiIiCisgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNyYykKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRzdCkKKyAgICBleGNlcHQgT1NFcnJvcjogCisgICAgICAgICMgQWxyZWFkeSBleGlzdHMKKyAgICAgICAgcGFzcworICAgIGVycm9ycyA9IFtdCisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIHNyY25hbWUgPSBvcy5wYXRoLmpvaW4oc3JjLCBuYW1lKQorICAgICAgICBkc3RuYW1lID0gb3MucGF0aC5qb2luKGRzdCwgbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IGRzdG5hbWUKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZHN0bmFtZSk6CisgICAgICAgICAgICAgICAgZCA9IG9zLnBhdGguam9pbihkc3RuYW1lLCBvcy5wYXRoLmJhc2VuYW1lKHNyY25hbWUpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5saW5rKHNyY25hbWUsIGRzdG5hbWUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIoc3JjbmFtZSwgZHN0bmFtZSkKKyAgICAgICAgIyBjYXRjaCB0aGUgRXJyb3IgZnJvbSB0aGUgcmVjdXJzaXZlIGNvcHl0cmVlIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICMgY29udGludWUgd2l0aCBvdGhlciBmaWxlcworICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yLCBlcnI6CisgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgd2h5OgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQorICAgIHRyeToKKyAgICAgICAgc2h1dGlsLmNvcHlzdGF0KHNyYywgZHN0KQorICAgIGV4Y2VwdCBPU0Vycm9yLCB3aHk6CisgICAgICAgIGVycm9ycy5leHRlbmQoKHNyYywgZHN0LCBzdHIod2h5KSkpCisgICAgaWYgZXJyb3JzOgorICAgICAgICByYWlzZSBzaHV0aWwuRXJyb3IsIGVycm9ycworCit0cnk6CisgICAgY29weXRyZWUoc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdKQorZXhjZXB0IHNodXRpbC5FcnJvcjoKKyAgIHBhc3MKK2V4Y2VwdCBPU0Vycm9yOgorICAgcGFzcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QgYi95b2N0by1wb2t5L3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOWJhNTg4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QKQEAgLTAsMCArMSwyNTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMywgIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgUmlnaHRzIFJlc2VydmVkCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcHJlcGFyZSBhIHNlcmllcyBvZiBwYXRjaGVzCisjIGFuZCBhIGNvdmVyIGxldHRlciBpbiBhbiBhcHByb3ByaWF0ZSBhbmQgY29uc2lzdGVudCBmb3JtYXQgZm9yCisjIHN1Ym1pc3Npb24gdG8gT3BlbiBFbWJlZGRlZCBhbmQgVGhlIFlvY3RvIFByb2plY3QsIGFzIHdlbGwgYXMgdG8KKyMgcmVsYXRlZCBwcm9qZWN0cyBhbmQgbGF5ZXJzLgorIworCitPRElSPXB1bGwtJCQKK1JFTEFUSVZFX1RPPSJtYXN0ZXIiCitDT01NSVRfSUQ9IkhFQUQiCitQUkVGSVg9IlBBVENIIgorUkZDPTAKKwordXNhZ2UoKSB7CitDTUQ9JChiYXNlbmFtZSAkMCkKK2NhdCA8PEVPTQorVXNhZ2U6ICRDTUQgWy1oXSBbLW8gb3V0cHV0X2Rpcl0gWy1tIG1zZ19ib2R5X2ZpbGVdIFstcyBzdWJqZWN0XSBbLXIgcmVsYXRpdmVfdG9dIFstaSBjb21taXRfaWRdIFstZCByZWxhdGl2ZV9kaXJdIC11IHJlbW90ZSBbLWIgYnJhbmNoXQorICAtYiBicmFuY2ggICAgICAgICAgIEJyYW5jaCBuYW1lIGluIHRoZSBzcGVjaWZpZWQgcmVtb3RlIChkZWZhdWx0OiBjdXJyZW50IGJyYW5jaCkKKyAgLWMgICAgICAgICAgICAgICAgICBDcmVhdGUgYW4gUkZDIChSZXF1ZXN0IGZvciBDb21tZW50KSBwYXRjaCBzZXJpZXMKKyAgLWggICAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlCisgIC1pIGNvbW1pdF9pZCAgICAgICAgRW5kaW5nIGNvbW1pdCAoZGVmYXVsdDogSEVBRCkKKyAgLW0gbXNnX2JvZHlfZmlsZSAgICBUaGUgZmlsZSBjb250YWluaW5nIGEgYmx1cmIgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgc3VtbWFyeSBlbWFpbAorICAtbyBvdXRwdXRfZGlyICAgICAgIFNwZWNpZnkgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBtZXNzYWdlcyAoZGVmYXVsdDogcHVsbC1QSUQpCisgIC1wIHByZWZpeCAgICAgICAgICAgVXNlIFtwcmVmaXggTi9NXSBpbnN0ZWFkIG9mIFtQQVRDSCBOL01dIGFzIHRoZSBzdWJqZWN0IHByZWZpeAorICAtciByZWxhdGl2ZV90byAgICAgIFN0YXJ0aW5nIGNvbW1pdCAoZGVmYXVsdDogbWFzdGVyKQorICAtcyBzdWJqZWN0ICAgICAgICAgIFRoZSBzdWJqZWN0IHRvIGJlIGluc2VydGVkIGludG8gdGhlIHN1bW1hcnkgZW1haWwKKyAgLXUgcmVtb3RlICAgICAgICAgICBUaGUgZ2l0IHJlbW90ZSB3aGVyZSB0aGUgYnJhbmNoIGlzIGxvY2F0ZWQKKyAgLWQgcmVsYXRpdmVfZGlyICAgICBHZW5lcmF0ZSBwYXRjaGVzIHJlbGF0aXZlIHRvIGRpcmVjdG9yeQorCisgRXhhbXBsZXM6CisgICAkQ01EIC11IGNvbnRyaWIgLWIgbml0aW4vYmFzaWMKKyAgICRDTUQgLXUgY29udHJpYiAtciBkaXN0cm8vbWFzdGVyIC1pIG5pdGluL2Rpc3RybyAtYiBuaXRpbi9kaXN0cm8KKyAgICRDTUQgLXUgY29udHJpYiAtciBtYXN0ZXIgLWkgbWlzYyAtYiBuaXRpbi9taXNjIC1vIHB1bGwtbWlzYworICAgJENNRCAtdSBjb250cmliIC1wICJSRkMgUEFUQ0giIC1iIG5pdGluL2V4cGVyaW1lbnRhbAorICAgJENNRCAtdSBjb250cmliIC1pIG1pc2MgLWIgbml0aW4vbWlzYyAtZCAuL2JpdGJha2UKK0VPTQorfQorCisjIFBhcnNlIGFuZCB2YWxpZGF0ZSBhcmd1bWVudHMKK3doaWxlIGdldG9wdHMgImI6Y2Q6aGk6bTpvOnA6cjpzOnU6IiBPUFQ7IGRvCisJY2FzZSAkT1BUIGluCisJYikKKwkJQlJBTkNIPSIkT1BUQVJHIgorCQk7OworCWMpCisJCVJGQz0xCisJCTs7CisJZCkKKwkJUkVMRElSPSIkT1BUQVJHIgorCQk7OworCWgpCisJCXVzYWdlCisJCWV4aXQgMAorCQk7OworCWkpCisJCUNPTU1JVF9JRD0iJE9QVEFSRyIKKwkJOzsKKwltKQorCQlCT0RZPSIkT1BUQVJHIgorCQlpZiBbICEgLWUgIiRCT0RZIiBdOyB0aGVuCisJCQllY2hvICJFUlJPUjogQm9keSBmaWxlIGRvZXMgbm90IGV4aXN0IgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJbykKKwkJT0RJUj0iJE9QVEFSRyIKKwkJOzsKKwlwKQorCQlQUkVGSVg9IiRPUFRBUkciCisJCTs7CisJcikKKwkJUkVMQVRJVkVfVE89IiRPUFRBUkciCisJCTs7CisJcykKKwkJU1VCSkVDVD0iJE9QVEFSRyIKKwkJOzsKKwl1KQorCQlSRU1PVEU9IiRPUFRBUkciCisJCVJFTU9URV9VUkw9JChnaXQgY29uZmlnIHJlbW90ZS4kUkVNT1RFLnVybCkKKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQllY2hvICJFUlJPUjogZ2l0IGNvbmZpZyBmYWlsZWQgdG8gZmluZCBhIHVybCBmb3IgJyRSRU1PVEUnIgorCQkJZWNobworCQkJZWNobyAiVG8gYWRkIGEgcmVtb3RlIHVybCBmb3IgJFJFTU9URSwgdXNlOiIKKwkJCWVjaG8gIiAgZ2l0IGNvbmZpZyByZW1vdGUuJFJFTU9URS51cmwgPHVybD4iCisJCQlleGl0IDEKKwkJZmkKKworCQkjIFJld3JpdGUgcHJpdmF0ZSBVUkxzIHRvIHB1YmxpYyBVUkxzCisJCSMgRGV0ZXJtaW5lIHRoZSByZXBvc2l0b3J5IG5hbWUgZm9yIHVzZSBpbiB0aGUgV0VCX1VSTCBsYXRlcgorCQljYXNlICIkUkVNT1RFX1VSTCIgaW4KKwkJKkAqKQorCQkJVVNFUl9SRT0iW0EtWmEtejAtOV8uQF1bQS1aYS16MC05Xy5ALV0qXCRcPyIKKwkJCVBST1RPX1JFPSJbYS16XVthLXorXSo6Ly8iCisJCQlHSVRfUkU9IlwoXlwoJFBST1RPX1JFXClcPyRVU0VSX1JFQFwpXChbXjovXSpcKVs6L11cKC4qXCkiCisJCQlSRU1PVEVfVVJMPSR7UkVNT1RFX1VSTCUuZ2l0fQorCQkJUkVNT1RFX1JFUE89JChlY2hvICRSRU1PVEVfVVJMIHwgc2VkICJzIyRHSVRfUkUjXDQjIikKKwkJCVJFTU9URV9VUkw9JChlY2hvICRSRU1PVEVfVVJMIHwgc2VkICJzIyRHSVRfUkUjZ2l0Oi8vXDMvXDQjIikKKwkJCTs7CisJCSopCisJCQllY2hvICJXQVJOSU5HOiBVbnJlY29nbml6ZWQgcmVtb3RlIFVSTDogJFJFTU9URV9VUkwiCisJCQllY2hvICIgICAgICAgICBUaGUgcHVsbCBhbmQgYnJvd3NlIFVSTHMgd2lsbCBsaWtlbHkgYmUgaW5jb3JyZWN0IgorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK2RvbmUKKworaWYgWyAteiAiJEJSQU5DSCIgXTsgdGhlbgorCUJSQU5DSD0kKGdpdCBicmFuY2ggfCBncmVwIC1lICJeXCogIiB8IGN1dCAtZCcgJyAtZjIpCisJZWNobyAiTk9URTogQXNzdW1pbmcgcmVtb3RlIGJyYW5jaCAnJEJSQU5DSCcsIHVzZSAtYiB0byBvdmVycmlkZS4iCitmaQorCitpZiBbIC16ICIkUkVNT1RFX1VSTCIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBNaXNzaW5nIHBhcmFtZXRlciAtdSwgbm8gZ2l0IHJlbW90ZSEiCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgJFJGQyAtZXEgMSBdOyB0aGVuCisJUFJFRklYPSJSRkMgJFBSRUZJWCIKK2ZpCisKKworIyBTZXQgV0VCX1VSTCBmcm9tIGtub3duIHJlbW90ZXMKK1dFQl9VUkw9IiIKK2Nhc2UgIiRSRU1PVEVfVVJMIiBpbgorCSpnaXQueW9jdG9wcm9qZWN0Lm9yZyopCisJCVdFQl9VUkw9Imh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaS8kUkVNT1RFX1JFUE8vbG9nLz9oPSRCUkFOQ0giCisJCTs7CisJKmdpdC5wb2t5bGludXgub3JnKikKKwkJV0VCX1VSTD0iaHR0cDovL2dpdC5wb2t5bGludXgub3JnL2NnaXQuY2dpLyRSRU1PVEVfUkVQTy9sb2cvP2g9JEJSQU5DSCIKKwkJOzsKKwkqZ2l0Lm9wZW5lbWJlZGRlZC5vcmcqKQorCQlXRUJfVVJMPSJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL2NnaXQuY2dpLyRSRU1PVEVfUkVQTy9sb2cvP2g9JEJSQU5DSCIKKwkJOzsKKwkqZ2l0aHViLmNvbSopCisJCVdFQl9VUkw9Imh0dHBzOi8vZ2l0aHViLmNvbS8kUkVNT1RFX1JFUE8vdHJlZS8kQlJBTkNIIgorCQk7OworZXNhYworCisjIFBlcmZvcm0gYSBzYW5pdHkgdGVzdCBvbiB0aGUgd2ViIFVSTC4gSXNzdWUgYSB3YXJuaW5nIGlmIGl0IGlzIG5vdAorIyBhY2Nlc3NpYmxlLCBidXQgZG8gbm90IGFib3J0IGFzIHVzZXJzIG1heSB3YW50IHRvIHJ1biBvZmZsaW5lLgoraWYgWyAtbiAiJFdFQl9VUkwiIF07IHRoZW4KKwl3Z2V0IC0tbm8tY2hlY2stY2VydGlmaWNhdGUgLXEgJFdFQl9VUkwgLU8gL2Rldi9udWxsCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIldBUk5JTkc6IEJyYW5jaCAnJEJSQU5DSCcgd2FzIG5vdCBmb3VuZCBvbiB0aGUgY29udHJpYiBnaXQgdHJlZS4iCisJCWVjaG8gIiAgICAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHJlbW90ZSBhbmQgYnJhbmNoIHBhcmFtZXRlciBiZWZvcmUgc2VuZGluZy4iCisJCWVjaG8gIiIKKwlmaQorZmkKKworaWYgWyAtZSAkT0RJUiBdOyB0aGVuCisJZWNobyAiRVJST1I6IG91dHB1dCBkaXJlY3RvcnkgJE9ESVIgZXhpc3RzLiIKKwlleGl0IDEKK2ZpCitta2RpciAkT0RJUgorCitpZiBbIC1uICIkUkVMRElSIiBdOyB0aGVuCisJT0RJUj0kKHJlYWxwYXRoICRPRElSKQorCXBkaXI9JChwd2QpCisJY2QgJFJFTERJUgorCWV4dHJhb3B0cz0iLS1yZWxhdGl2ZSIKK2ZpCisKKyMgR2VuZXJhdGUgdGhlIHBhdGNoZXMgYW5kIGNvdmVyIGxldHRlcgorZ2l0IGZvcm1hdC1wYXRjaCAkZXh0cmFvcHRzIC1NNDAgLS1zdWJqZWN0LXByZWZpeD0iJFBSRUZJWCIgLW4gLW8gJE9ESVIgLS10aHJlYWQ9c2hhbGxvdyAtLWNvdmVyLWxldHRlciAkUkVMQVRJVkVfVE8uLiRDT01NSVRfSUQgPiAvZGV2L251bGwKKworWyAtbiAiJFJFTERJUiIgXSAmJiBjZCAkcGRpcgorCisjIEN1c3RvbWl6ZSB0aGUgY292ZXIgbGV0dGVyCitDTD0iJE9ESVIvMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2giCitQTT0iJE9ESVIvcHVsbC1tc2ciCitHSVRfVkVSU0lPTj0kKGBnaXQgLS12ZXJzaW9uYCB8IHRyIC1kICdbOmFscGhhOl1bOnNwYWNlOl0uJyB8IHNlZCAncy9cKC4uLlwpLiovXDEvJykKK05FV0VSX0dJVF9WRVJTSU9OPTIxMAoraWYgWyAkR0lUX1ZFUlNJT04gLWx0ICRORVdFUl9HSVRfVkVSU0lPTiBdOyB0aGVuCisJZ2l0IHJlcXVlc3QtcHVsbCAkUkVMQVRJVkVfVE8gJFJFTU9URV9VUkwgJENPTU1JVF9JRCA+PiAiJFBNIgorZWxzZQorCWdpdCByZXF1ZXN0LXB1bGwgJFJFTEFUSVZFX1RPICRSRU1PVEVfVVJMIDokQlJBTkNIID4+ICIkUE0iCitmaQoraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJZWNobyAiRVJST1I6IGdpdCByZXF1ZXN0LXB1bGwgcmVwb3J0ZWQgYW4gZXJyb3IiCisJZXhpdCAxCitmaQorCisjIFRoZSBjb3ZlciBsZXR0ZXIgYWxyZWFkeSBoYXMgYSBkaWZmc3RhdCwgcmVtb3ZlIGl0IGZyb20gdGhlIHB1bGwtbXNnCisjIGJlZm9yZSBpbnNlcnRpbmcgaXQuCitzZWQgLW4gIjAsXCMkUkVNT1RFX1VSTCMgcCIgIiRQTSIgfCBzZWQgLWkgIi9CTFVSQiBIRVJFLyByIC9kZXYvc3RkaW4iICIkQ0wiCitybSAiJFBNIgorCisjIElmIHRoaXMgaXMgYW4gUkZDLCBtYWtlIHRoYXQgY2xlYXIgaW4gdGhlIGNvdmVyIGxldHRlcgoraWYgWyAkUkZDIC1lcSAxIF07IHRoZW4KKyhjYXQgPDxFT00KK1BsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGZvciBzdWl0YWJpbGl0eSBmb3IgaW5jbHVzaW9uLiBJZiB5b3UgaGF2ZQorYW55IG9iamVjdGlvbnMgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBwbGVhc2UgcmVzcG9uZCB0byB0aGUgcGF0Y2hlcy4gSWYKK3lvdSBhZ3JlZSB3aXRoIHRoZSBjaGFuZ2VzLCBwbGVhc2UgcHJvdmlkZSB5b3VyIEFja2VkLWJ5LgorCitFT00KKykgfCBzZWQgLWkgIi9CTFVSQiBIRVJFLyByIC9kZXYvc3RkaW4iICIkQ0wiCitmaQorCisjIEluc2VydCB0aGUgV0VCX1VSTCBpZiB0aGVyZSBpcyBvbmUKK2lmIFsgLW4gIiRXRUJfVVJMIiBdOyB0aGVuCisJZWNobyAiICAkV0VCX1VSTCIgfCBzZWQgLWkgIlwjJFJFTU9URV9VUkwjIHIgL2Rldi9zdGRpbiIgIiRDTCIKK2ZpCisKKworIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBtZXNzYWdlIGJvZHksIGluc2VydCBpdCBpbnRvIHRoZSBjb3ZlciBsZXR0ZXIgYW5kCisjIHJlbW92ZSB0aGUgQkxVUkIgdG9rZW4uCitpZiBbIC1uICIkQk9EWSIgXTsgdGhlbgorCXNlZCAtaSAiL0JMVVJCIEhFUkUvIHIgJEJPRFkiICIkQ0wiCisJc2VkIC1pICIvQkxVUkIgSEVSRS8gZCIgIiRDTCIKK2ZpCisKKyMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgc3ViamVjdCwgcmVwbGFjZSB0aGUgU1VCSkVDVCB0b2tlbiB3aXRoIGl0LgoraWYgWyAtbiAiJFNVQkpFQ1QiIF07IHRoZW4KKwlzZWQgLWkgLWUgInMvXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCovJFNVQkpFQ1QvIiAiJENMIgorZmkKKworCisjIEdlbmVyYXRlIHJlcG9ydCBmb3IgdXNlcgorY2F0IDw8RU9NCitUaGUgZm9sbG93aW5nIHBhdGNoZXMgaGF2ZSBiZWVuIHByZXBhcmVkOgorJChmb3IgUEFUQ0ggaW4gJChscyAkT0RJUi8qKTsgZG8gZWNobyAiICAgICRQQVRDSCI7IGRvbmUpCisKK1JldmlldyB0aGVpciBjb250ZW50LCBlc3BlY2lhbGx5IHRoZSBzdW1tYXJ5IG1haWw6CisgICAgJENMCisKK1doZW4geW91IGFyZSBzYXRpc2ZpZWQsIHlvdSBjYW4gc2VuZCB0aGVtIHdpdGg6CisgICAgc2VuZC1wdWxsLXJlcXVlc3QgLWEgLXAgJE9ESVIKK0VPTQorCisjIENoZWNrIHRoZSBwYXRjaGVzIGZvciB0cmFpbGluZyB3aGl0ZSBzcGFjZQorZWdyZXAgLXEgLWUgIl5cKy4qXHMrJCIgJE9ESVIvKgoraWYgWyAkPyAtbmUgMSBdOyB0aGVuCisJZWNobworCWVjaG8gIldBUk5JTkc6IFRyYWlsaW5nIHdoaXRlIHNwYWNlIGRldGVjdGVkIGF0IHRoZXNlIGxvY2F0aW9ucyIKKwllZ3JlcCAtbkggLS1jb2xvciAtZSAiXlwrLipccyskIiAkT0RJUi8qCitmaQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2Nyb3NzdGFwIGIveW9jdG8tcG9reS9zY3JpcHRzL2Nyb3NzdGFwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4MzE3Y2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvY3Jvc3N0YXAKQEAgLTAsMCArMSwxNDggQEAKKyMhL2Jpbi9iYXNoCisjCisjIFJ1biBhIHN5c3RlbXRhcCBzY3JpcHQgb24gcmVtb3RlIHRhcmdldAorIworIyBFeGFtcGxlcyAocnVuIG9uIGJ1aWxkIGhvc3QsIHRhcmdldCBpcyAxOTIuMTY4LjEueHh4KToKKyMgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiIKKyMgICAkIGNkIH4vbXkvc3lzdGVtdGFwL3NjcmlwdHMiCisjCisjICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS54eHggbXlzY3JpcHQuc3RwIgorIyAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LXdpdGgtYXJncy5zdHAgOTkgbmluZXR5bmluZSIKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworZnVuY3Rpb24gdXNhZ2UoKSB7CisgICAgZWNobyAiVXNhZ2U6ICQwIDx1c2VyQGhvc3RuYW1lPiA8c3l0ZW10YXAtc2NyaXB0PiBbYWRkaXRpb25hbCBzeXN0ZW10YXAtc2NyaXB0IGFyZ3NdIgorfQorCitmdW5jdGlvbiBzZXR1cF91c2FnZSgpIHsKKyAgICBlY2hvICIiCisgICAgZWNobyAiJ2Nyb3NzdGFwJyByZXF1aXJlcyBhIGxvY2FsIHNkayBidWlsZCBvZiB0aGUgdGFyZ2V0IHN5c3RlbSIKKyAgICBlY2hvICIob3IgYSBidWlsZCB0aGF0IGluY2x1ZGVzICd0b29scy1wcm9maWxlJykgaW4gb3JkZXIgdG8gYnVpbGQiCisgICAgZWNobyAia2VybmVsIG1vZHVsZXMgdGhhdCBjYW4gcHJvYmUgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJQcmFjdGljYWxseSBzcGVha2luZywgdGhhdCBtZWFucyB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOiIKKyAgICBlY2hvICIgIC0gSWYgeW91J3JlIHJ1bm5pbmcgYSBwcmUtYnVpbHQgaW1hZ2UsIGRvd25sb2FkIHRoZSByZWxlYXNlIgorICAgIGVjaG8gIiAgICBhbmQvb3IgQlNQIHRhcmJhbGxzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLiIKKyAgICBlY2hvICIgIC0gSWYgeW91J3JlIHdvcmtpbmcgZnJvbSBnaXQgc291cmNlcywganVzdCBjbG9uZSB0aGUgbWV0YWRhdGEiCisgICAgZWNobyAiICAgIGFuZCBCU1AgbGF5ZXJzIG5lZWRlZCB0byBidWlsZCB0aGUgaW1hZ2UgeW91J2xsIGJlIGJvb3RpbmcuIgorICAgIGVjaG8gIiAgLSBNYWtlIHN1cmUgeW91J3JlIHByb3Blcmx5IHNldCB1cCB0byBidWlsZCBhIG5ldyBpbWFnZSAoc2VlIgorICAgIGVjaG8gIiAgICB0aGUgQlNQIFJFQURNRSBhbmQvb3IgdGhlIHdpZGVseSBhdmFpbGFibGUgYmFzaWMgZG9jdW1lbnRhdGlvbiIKKyAgICBlY2hvICIgICAgdGhhdCBkaXNjdXNzZXMgaG93IHRvIGJ1aWxkIGltYWdlcykuIgorICAgIGVjaG8gIiAgLSBCdWlsZCBhbiAtc2RrIHZlcnNpb24gb2YgdGhlIGltYWdlIGUuZy46IgorICAgIGVjaG8gIiAgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8tc2RrIgorICAgIGVjaG8gIiAgT1IiCisgICAgZWNobyAiICAtIEJ1aWxkIGEgbm9uLXNkayBpbWFnZSBidXQgaW5jbHVkZSB0aGUgcHJvZmlsaW5nIHRvb2xzOiIKKyAgICBlY2hvICIgICAgICBbIGVkaXQgbG9jYWwuY29uZiBhbmQgYWRkICd0b29scy1wcm9maWxlJyB0byB0aGUgZW5kIG9mIgorICAgIGVjaG8gIiAgICAgICAgdGhlIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIHZhcmlhYmxlIF0iCisgICAgZWNobyAiICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byIKKyAgICBlY2hvICIiCisgICAgZWNobyAiICBbIE5PVEUgdGhhdCAnY3Jvc3N0YXAnIG5lZWRzIHRvIGJlIGFibGUgdG8gc3NoIGludG8gdGhlIHRhcmdldCIKKyAgICBlY2hvICIgICAgc3lzdGVtLCB3aGljaCBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gLW1pbmltYWwgaW1hZ2VzLiBdIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJPbmNlIHlvdSd2ZSBidWlsZCB0aGUgaW1hZ2Ugb24gdGhlIGhvc3Qgc3lzdGVtLCB5b3UncmUgcmVhZHkgdG8iCisgICAgZWNobyAiYm9vdCBpdCAob3IgdGhlIGVxdWl2YWxlbnQgcHJlLWJ1aWx0IGltYWdlKSBhbmQgdXNlICdjcm9zc3RhcCciCisgICAgZWNobyAidG8gcHJvYmUgaXQgKHlvdSBuZWVkIHRvIHNvdXJjZSB0aGUgZW52aXJvbm1lbnQgYXMgdXN1YWwgZmlyc3QpOiIKKyAgICBlY2hvICIiCisgICAgZWNobyAiICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52IgorICAgIGVjaG8gIiAgICAkIGNkIH4vbXkvc3lzdGVtdGFwL3NjcmlwdHMiCisgICAgZWNobyAiICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LnN0cCIKKyAgICBlY2hvICIiCit9CisKK2Z1bmN0aW9uIHN5c3RlbXRhcF90YXJnZXRfYXJjaCgpIHsKKyAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9JDEKKyAgICBjYXNlICRTWVNURU1UQVBfVEFSR0VUX0FSQ0ggaW4KKyAgICAgICAgaT84NikKKyAgICAgICAgICAgIFNZU1RFTVRBUF9UQVJHRVRfQVJDSD0iaTM4NiIKKyAgICAgICAgICAgIDs7CisgICAgICAgIHg4Nj82NCopCisgICAgICAgICAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9Ing4Nl82NCIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGFybSopCisgICAgICAgICAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9ImFybSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIHBvd2VycGMqKQorICAgICAgICAgICAgU1lTVEVNVEFQX1RBUkdFVF9BUkNIPSJwb3dlcnBjIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworfQorCitpZiBbICQjIC1sdCAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgWyAteiAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHRoZSBCVUlMRERJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4iCisgICAgZWNobyAiRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIHlvdXIgYnVpbGQgc3lzdGVtIGVudmlyb25tZW50IHNldHVwIHNjcmlwdD8iCisgICAgZXhpdCAxCitmaQorCitwdXNoZCAkUFdECitjZCAkQlVJTERESVIKK0JJVEJBS0VfVkFSUz1gYml0YmFrZSAtZSB2aXJ0dWFsL2tlcm5lbGAKK3BvcGQKKworU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5TVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4gXAorICB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjIpCitTVEFHSU5HX0JJTkRJUl9UT09MUFJFRklYPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5UQVJHRVRfUFJFRklYIFwKKyAgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyKQorU1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUj0kKGVjaG8gIiRCSVRCQUtFX1ZBUlMiIHwgZ3JlcCBeU1RBR0lOR19ESVJfTkFUSVZFIFwKKyAgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyKQorVEFSR0VUX0FSQ0g9JChlY2hvICIkQklUQkFLRV9WQVJTIiB8IGdyZXAgXlRSQU5TTEFURURfVEFSR0VUX0FSQ0ggXAorICB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjIpCitUQVJHRVRfS0VSTkVMX0JVSUxERElSPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5CPSBcCisgIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMikKKworc3lzdGVtdGFwX3RhcmdldF9hcmNoICIkVEFSR0VUX0FSQ0giCisKK2lmIFsgISAtZCAkVEFSR0VUX0tFUk5FTF9CVUlMRERJUiBdIHx8CisgICBbICEgLWYgJFRBUkdFVF9LRVJORUxfQlVJTERESVIvdm1saW51eCBdOyB0aGVuCisgICAgZWNobyAtZSAiXG5FcnJvcjogTm8gdGFyZ2V0IGtlcm5lbCBidWlsZCBmb3VuZC4iCisgICAgZWNobyAtZSAiRGlkIHlvdSBmb3JnZXQgdG8gY3JlYXRlIGEgbG9jYWwgYnVpbGQgb2YgeW91ciBpbWFnZT8iCisgICAgc2V0dXBfdXNhZ2UKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgISAtZiAkU1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUi91c3IvYmluL3N0YXAgXTsgdGhlbgorICAgIGVjaG8gLWUgIlxuRXJyb3I6IE5hdGl2ZSAoaG9zdCkgc3lzdGVtdGFwIG5vdCBmb3VuZC4iCisgICAgZWNobyAtZSAiRGlkIHlvdSBhY2NpZGVudGFsbHkgYnVpbGQgYSBsb2NhbCBub24tc2RrIGltYWdlPyAob3IgZm9yZ2V0IHRvIgorICAgIGVjaG8gLWUgImFkZCAndG9vbHMtcHJvZmlsZScgdG8gRVhUUkFfSU1BR0VfRkVBVFVSRVMgaW4geW91ciBsb2NhbC5jb25mKT8iCisgICAgc2V0dXBfdXNhZ2UKKyAgICBleGl0IDEKK2ZpCisKK3RhcmdldF91c2VyX2hvc3RuYW1lPSIkMSIKK2Z1bGxfc2NyaXB0X25hbWU9IiQyIgorc2NyaXB0X25hbWU9JChiYXNlbmFtZSAiJDIiKQorc2NyaXB0X2Jhc2U9JHtzY3JpcHRfbmFtZSUuKn0KK3NoaWZ0IDIKKworJHtTWVNURU1UQVBfSE9TVF9JTlNUQUxMRElSfS91c3IvYmluL3N0YXAgXAorICAtYSAke1NZU1RFTVRBUF9UQVJHRVRfQVJDSH0gXAorICAtQiBDUk9TU19DT01QSUxFPSIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtTVEFHSU5HX0JJTkRJUl9UT09MUFJFRklYfSIgXAorICAtciAke1RBUkdFVF9LRVJORUxfQlVJTERESVJ9IFwKKyAgLUkgJHtTWVNURU1UQVBfSE9TVF9JTlNUQUxMRElSfS91c3Ivc2hhcmUvc3lzdGVtdGFwL3RhcHNldCBcCisgIC1SICR7U1lTVEVNVEFQX0hPU1RfSU5TVEFMTERJUn0vdXNyL3NoYXJlL3N5c3RlbXRhcC9ydW50aW1lIFwKKyAgLS1yZW1vdGU9JHRhcmdldF91c2VyX2hvc3RuYW1lIFwKKyAgLW0gJHNjcmlwdF9iYXNlIFwKKyAgICRmdWxsX3NjcmlwdF9uYW1lICIkQCIKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9kZXZ0b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3ZGY5NTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvZGV2dG9vbApAQCAtMCwwICsxLDI5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgT3BlbkVtYmVkZGVkIERldmVsb3BtZW50IHRvb2wKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IHJlCitpbXBvcnQgQ29uZmlnUGFyc2VyCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKKworYmFzZXBhdGggPSAnJword29ya3NwYWNlID0ge30KK2NvbmZpZyA9IE5vbmUKK2NvbnRleHQgPSBOb25lCisKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCitmcm9tIGRldnRvb2wgaW1wb3J0IERldnRvb2xFcnJvciwgc2V0dXBfdGluZm9pbAoraW1wb3J0IHNjcmlwdHV0aWxzCitsb2dnZXIgPSBzY3JpcHR1dGlscy5sb2dnZXJfY3JlYXRlKCdkZXZ0b29sJykKKworcGx1Z2lucyA9IFtdCisKKworY2xhc3MgQ29uZmlnSGFuZGxlcihvYmplY3QpOgorICAgIGNvbmZpZ19maWxlID0gJycKKyAgICBjb25maWdfb2JqID0gTm9uZQorICAgIGluaXRfcGF0aCA9ICcnCisgICAgd29ya3NwYWNlX3BhdGggPSAnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuY29uZmlnX29iaiA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKworICAgIGRlZiBnZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXQgPSBzZWxmLmNvbmZpZ19vYmouZ2V0KHNlY3Rpb24sIG9wdGlvbikKKyAgICAgICAgZXhjZXB0IChDb25maWdQYXJzZXIuTm9PcHRpb25FcnJvciwgQ29uZmlnUGFyc2VyLk5vU2VjdGlvbkVycm9yKToKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICByZXQgPSBkZWZhdWx0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmNvbmZpZ19maWxlKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlnX29iai5yZWFkKHNlbGYuY29uZmlnX2ZpbGUpCisKKyAgICAgICAgICAgIGlmIHNlbGYuY29uZmlnX29iai5oYXNfb3B0aW9uKCdHZW5lcmFsJywgJ2luaXRfcGF0aCcpOgorICAgICAgICAgICAgICAgIHB0aCA9IHNlbGYuZ2V0KCdHZW5lcmFsJywgJ2luaXRfcGF0aCcpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0X3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsIHB0aCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5pbml0X3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ2luaXRfcGF0aCAlcyBzcGVjaWZpZWQgaW4gY29uZmlnIGZpbGUgY2Fubm90IGJlIGZvdW5kJyAlIHB0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ19vYmouYWRkX3NlY3Rpb24oJ0dlbmVyYWwnKQorCisgICAgICAgIHNlbGYud29ya3NwYWNlX3BhdGggPSBzZWxmLmdldCgnR2VuZXJhbCcsICd3b3Jrc3BhY2VfcGF0aCcsIG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ3dvcmtzcGFjZScpKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKKyAgICBkZWYgd3JpdGUoc2VsZik6CisgICAgICAgIGxvZ2dlci5kZWJ1Zygnd3JpdGluZyB0byBjb25maWcgZmlsZSAlcycgJSBzZWxmLmNvbmZpZ19maWxlKQorICAgICAgICBzZWxmLmNvbmZpZ19vYmouc2V0KCdHZW5lcmFsJywgJ3dvcmtzcGFjZV9wYXRoJywgc2VsZi53b3Jrc3BhY2VfcGF0aCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmlnX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY29uZmlnX29iai53cml0ZShmKQorCitjbGFzcyBDb250ZXh0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3YXJncykKKworCitkZWYgcmVhZF93b3Jrc3BhY2UoKToKKyAgICBnbG9iYWwgd29ya3NwYWNlCisgICAgd29ya3NwYWNlID0ge30KKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKToKKyAgICAgICAgaWYgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigid29ya3NwYWNlIGxheWVyIG5vdCBzZXQgdXAiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDcmVhdGluZyB3b3Jrc3BhY2UgbGF5ZXIgaW4gJXMnICUgY29uZmlnLndvcmtzcGFjZV9wYXRoKQorICAgICAgICAgICAgX2NyZWF0ZV93b3Jrc3BhY2UoY29uZmlnLndvcmtzcGFjZV9wYXRoLCBjb25maWcsIGJhc2VwYXRoKQorICAgIGlmIG5vdCBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICBfZW5hYmxlX3dvcmtzcGFjZV9sYXllcihjb25maWcud29ya3NwYWNlX3BhdGgsIGNvbmZpZywgYmFzZXBhdGgpCisKKyAgICBsb2dnZXIuZGVidWcoJ1JlYWRpbmcgd29ya3NwYWNlIGluICVzJyAlIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCkKKyAgICBleHRlcm5hbHNyY19yZSA9IHJlLmNvbXBpbGUocideRVhURVJOQUxTUkMoX3BuLShbXiA9XSspKT8gKj0gKiIoW14iXSopIiQnKQorICAgIGZvciBmbiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLCAnKi5iYmFwcGVuZCcpKToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHJlcyA9IGV4dGVybmFsc3JjX3JlLm1hdGNoKGxpbmUucnN0cmlwKCkpCisgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICBwbiA9IHJlcy5ncm91cCgyKSBvciBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZm4pKVswXS5zcGxpdCgnXycpWzBdCisgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZVtwbl0gPSB7J3NyY3RyZWUnOiByZXMuZ3JvdXAoMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JiYXBwZW5kJzogZm59CisKK2RlZiBjcmVhdGVfd29ya3NwYWNlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgaWYgYXJncy5sYXllcnBhdGg6CisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguYWJzcGF0aChhcmdzLmxheWVycGF0aCkKKyAgICBlbHNlOgorICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnd29ya3NwYWNlJykpCisgICAgX2NyZWF0ZV93b3Jrc3BhY2Uod29ya3NwYWNlZGlyLCBjb25maWcsIGJhc2VwYXRoKQorICAgIGlmIG5vdCBhcmdzLmNyZWF0ZV9vbmx5OgorICAgICAgICBfZW5hYmxlX3dvcmtzcGFjZV9sYXllcih3b3Jrc3BhY2VkaXIsIGNvbmZpZywgYmFzZXBhdGgpCisKK2RlZiBfY3JlYXRlX3dvcmtzcGFjZSh3b3Jrc3BhY2VkaXIsIGNvbmZpZywgYmFzZXBhdGgpOgorICAgIGltcG9ydCBiYgorCisgICAgY29uZmRpciA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJykKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oY29uZmRpciwgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgIGxvZ2dlci5pbmZvKCdTcGVjaWZpZWQgd29ya3NwYWNlIGFscmVhZHkgc2V0IHVwLCBsZWF2aW5nIGFzLWlzJykKKyAgICBlbHNlOgorICAgICAgICAjIEFkZCBhIGNvbmZpZyBmaWxlCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjb25mZGlyKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGNvbmZkaXIsICdsYXllci5jb25mJyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJyMgIyMjIHdvcmtzcGFjZSBsYXllciBhdXRvLWdlbmVyYXRlZCBieSBkZXZ0b29sICMjI1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCUEFUSCA9LiAiJCcgKyAne0xBWUVSRElSfToiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFUyArPSAiJCcgKyAne0xBWUVSRElSfS9yZWNpcGVzLyovKi5iYiBcXFxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgICAgICQnICsgJ3tMQVlFUkRJUn0vYXBwZW5kcy8qLmJiYXBwZW5kIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAid29ya3NwYWNlbGF5ZXIiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fd29ya3NwYWNlbGF5ZXIgPSAiXiQnICsgJ3tMQVlFUkRJUn0vIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV93b3Jrc3BhY2VsYXllciA9ICIxIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QUklPUklUWV93b3Jrc3BhY2VsYXllciA9ICI5OSJcbicpCisgICAgICAgICMgQWRkIGEgUkVBRE1FIGZpbGUKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdSRUFETUUnKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnVGhpcyBsYXllciB3YXMgY3JlYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGRldnRvb2wgdXRpbGl0eSBpbiBvcmRlciB0b1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2NvbnRhaW4gcmVjaXBlcyBhbmQgYmJhcHBlbmRzLiBJbiBtb3N0IGluc3RhbmNlcyB5b3Ugc2hvdWxkIHVzZSB0aGVcbicpCisgICAgICAgICAgICBmLndyaXRlKCdkZXZ0b29sIHV0aWxpdHkgdG8gbWFuYWdlIGZpbGVzIHdpdGhpbiBpdCByYXRoZXIgdGhhbiBtb2RpZnlpbmcgZmlsZXNcbicpCisgICAgICAgICAgICBmLndyaXRlKCdkaXJlY3RseSAoYWx0aG91Z2ggcmVjaXBlcyBhZGRlZCB3aXRoICJkZXZ0b29sIGFkZCIgd2lsbCBvZnRlbiBuZWVkXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnZGlyZWN0IG1vZGlmaWNhdGlvbi4pXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG5JZiB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8gdXNlIGRldnRvb2wgeW91IGNhbiByZW1vdmUgdGhlIHBhdGggdG8gdGhpc1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ3dvcmtzcGFjZSBsYXllciBmcm9tIHlvdXIgY29uZi9iYmxheWVycy5jb25mIGZpbGUgKGFuZCB0aGVuIGRlbGV0ZSB0aGVcbicpCisgICAgICAgICAgICBmLndyaXRlKCdsYXllciwgaWYgeW91IHdpc2gpLlxuJykKKworZGVmIF9lbmFibGVfd29ya3NwYWNlX2xheWVyKHdvcmtzcGFjZWRpciwgY29uZmlnLCBiYXNlcGF0aCk6CisgICAgIiIiRW5zdXJlIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgaXMgaW4gYmJsYXllcnMuY29uZiIiIgorICAgIGltcG9ydCBiYgorICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJywgJ2JibGF5ZXJzLmNvbmYnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBiYmxheWVycy5jb25mJykKKyAgICAgICAgcmV0dXJuCisgICAgXywgYWRkZWQgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgd29ya3NwYWNlZGlyLCBjb25maWcud29ya3NwYWNlX3BhdGgpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIGxvZ2dlci5pbmZvKCdFbmFibGluZyB3b3Jrc3BhY2UgbGF5ZXIgaW4gYmJsYXllcnMuY29uZicpCisgICAgaWYgY29uZmlnLndvcmtzcGFjZV9wYXRoICE9IHdvcmtzcGFjZWRpcjoKKyAgICAgICAgIyBVcGRhdGUgb3VyIGNvbmZpZyB0byBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9uCisgICAgICAgIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCA9IHdvcmtzcGFjZWRpcgorICAgICAgICBjb25maWcud3JpdGUoKQorCisKK2RlZiBtYWluKCk6CisgICAgZ2xvYmFsIGJhc2VwYXRoCisgICAgZ2xvYmFsIGNvbmZpZworICAgIGdsb2JhbCBjb250ZXh0CisKKyAgICBjb250ZXh0ID0gQ29udGV4dChmaXhlZF9zZXR1cD1GYWxzZSkKKworICAgICMgRGVmYXVsdCBiYXNlcGF0aAorICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCisgICAgcHRoID0gYmFzZXBhdGgKKyAgICB3aGlsZSBwdGggIT0gJycgYW5kIHB0aCAhPSBvcy5zZXA6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICcuZGV2dG9vbGJhc2UnKSk6CisgICAgICAgICAgICBjb250ZXh0LmZpeGVkX3NldHVwID0gVHJ1ZQorICAgICAgICAgICAgYmFzZXBhdGggPSBwdGgKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShwdGgpCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIGRldmVsb3BtZW50IHRvb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oZWxwPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhc2VwYXRoJywgaGVscD0nQmFzZSBkaXJlY3Rvcnkgb2YgU0RLIC8gYnVpbGQgZGlyZWN0b3J5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJicGF0aCcsIGhlbHA9J0V4cGxpY2l0bHkgc3BlY2lmeSB0aGUgQkJQQVRILCByYXRoZXIgdGhhbiBnZXR0aW5nIGl0IGZyb20gdGhlIG1ldGFkYXRhJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvbG9yJywgY2hvaWNlcz1bJ2F1dG8nLCAnYWx3YXlzJywgJ25ldmVyJ10sIGRlZmF1bHQ9J2F1dG8nLCBoZWxwPSdDb2xvcml6ZSBvdXRwdXQgKHdoZXJlICUobWV0YXZhcilzIGlzICUoY2hvaWNlcylzKScsIG1ldGF2YXI9J0NPTE9SJykKKworICAgIGdsb2JhbF9hcmdzLCB1bnBhcnNlZF9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoKQorCisgICAgIyBIZWxwIGlzIGFkZGVkIGhlcmUgcmF0aGVyIHRoYW4gdmlhIGFkZF9oZWxwPVRydWUsIGFzIHdlIGRvbid0IHdhbnQgaXQgdG8KKyAgICAjIGJlIGhhbmRsZWQgYnkgcGFyc2Vfa25vd25fYXJncygpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWgnLCAnLS1oZWxwJywgYWN0aW9uPSdoZWxwJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKQorCisgICAgaWYgZ2xvYmFsX2FyZ3MuZGVidWc6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgIGVsaWYgZ2xvYmFsX2FyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgaWYgZ2xvYmFsX2FyZ3MuYmFzZXBhdGg6CisgICAgICAgICMgT3ZlcnJpZGUKKyAgICAgICAgYmFzZXBhdGggPSBnbG9iYWxfYXJncy5iYXNlcGF0aAorICAgIGVsaWYgbm90IGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgIGJhc2VwYXRoID0gb3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJykKKyAgICAgICAgaWYgbm90IGJhc2VwYXRoOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGlzIHNjcmlwdCBjYW4gb25seSBiZSBydW4gYWZ0ZXIgaW5pdGlhbGlzaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCAoZS5nLiBieSB1c2luZyBvZS1pbml0LWJ1aWxkLWVudikiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgYmFzZXBhdGggJXMnICUgYmFzZXBhdGgpCisKKyAgICBjb25maWcgPSBDb25maWdIYW5kbGVyKG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYnLCAnZGV2dG9vbC5jb25mJykpCisgICAgaWYgbm90IGNvbmZpZy5yZWFkKCk6CisgICAgICAgIHJldHVybiAtMQorCisgICAgIyBXZSBuZWVkIHRvIGJlIGluIHRoaXMgZGlyZWN0b3J5IG9yIHdlIHdvbid0IGJlIGFibGUgdG8gaW5pdGlhbGlzZSB0aW5mb2lsCisgICAgb3MuY2hkaXIoYmFzZXBhdGgpCisKKyAgICBiaXRiYWtlX3N1YmRpciA9IGNvbmZpZy5nZXQoJ0dlbmVyYWwnLCAnYml0YmFrZV9zdWJkaXInLCAnJykKKyAgICBpZiBiaXRiYWtlX3N1YmRpcjoKKyAgICAgICAgIyBOb3JtYWxseSBzZXQgZm9yIHVzZSB3aXRoaW4gdGhlIFNESworICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGJpdGJha2Ugc3ViZGlyICVzJyAlIGJpdGJha2Vfc3ViZGlyKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKGJhc2VwYXRoLCBiaXRiYWtlX3N1YmRpciwgJ2xpYicpKQorICAgICAgICBjb3JlX21ldGFfc3ViZGlyID0gY29uZmlnLmdldCgnR2VuZXJhbCcsICdjb3JlX21ldGFfc3ViZGlyJykKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihiYXNlcGF0aCwgY29yZV9tZXRhX3N1YmRpciwgJ2xpYicpKQorICAgIGVsc2U6CisgICAgICAgICMgU3RhbmRhcmQgbG9jYXRpb24KKyAgICAgICAgaW1wb3J0IHNjcmlwdHBhdGgKKyAgICAgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICAgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEgiKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBzdGFuZGFyZCBiaXRiYWtlIHBhdGggJXMnICUgYml0YmFrZXBhdGgpCisgICAgICAgIHNjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKKworICAgIHNjcmlwdHV0aWxzLmxvZ2dlcl9zZXR1cF9jb2xvcihsb2dnZXIsIGdsb2JhbF9hcmdzLmNvbG9yKQorCisgICAgaWYgZ2xvYmFsX2FyZ3MuYmJwYXRoIGlzIE5vbmU6CisgICAgICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKGNvbmZpZ19vbmx5PVRydWUpCisgICAgICAgIGdsb2JhbF9hcmdzLmJicGF0aCA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgIGVsc2U6CisgICAgICAgIHRpbmZvaWwgPSBOb25lCisKKyAgICBmb3IgcGF0aCBpbiBbc2NyaXB0c19wYXRoXSArIGdsb2JhbF9hcmdzLmJicGF0aC5zcGxpdCgnOicpOgorICAgICAgICBwbHVnaW5wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdsaWInLCAnZGV2dG9vbCcpCisgICAgICAgIHNjcmlwdHV0aWxzLmxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpCisKKyAgICBpZiB0aW5mb2lsOgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoZGVzdD0ic3VicGFyc2VyX25hbWUiLCB0aXRsZT0nc3ViY29tbWFuZHMnLCBtZXRhdmFyPSc8c3ViY29tbWFuZD4nKQorCisgICAgaWYgbm90IGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgIHBhcnNlcl9jcmVhdGVfd29ya3NwYWNlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdjcmVhdGUtd29ya3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0IHVwIGEgd29ya3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1NldHMgdXAgYSBuZXcgd29ya3NwYWNlLiBOT1RFOiBvdGhlciBkZXZ0b29sIHN1YmNvbW1hbmRzIHdpbGwgY3JlYXRlIGEgd29ya3NwYWNlIGF1dG9tYXRpY2FsbHkgYXMgbmVlZGVkLCBzbyB5b3Ugb25seSBuZWVkIHRvIHVzZSAlKHByb2cpcyBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHdoZXJlIHRoZSB3b3Jrc3BhY2Ugc2hvdWxkIGJlIGxvY2F0ZWQuJykKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV93b3Jrc3BhY2UuYWRkX2FyZ3VtZW50KCdsYXllcnBhdGgnLCBuYXJncz0nPycsIGhlbHA9J1BhdGggaW4gd2hpY2ggdGhlIHdvcmtzcGFjZSBsYXllciBzaG91bGQgYmUgY3JlYXRlZCcpCisgICAgICAgIHBhcnNlcl9jcmVhdGVfd29ya3NwYWNlLmFkZF9hcmd1bWVudCgnLS1jcmVhdGUtb25seScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J09ubHkgY3JlYXRlIHRoZSB3b3Jrc3BhY2UgbGF5ZXIsIGRvIG5vdCBhbHRlciBjb25maWd1cmF0aW9uJykKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV93b3Jrc3BhY2Uuc2V0X2RlZmF1bHRzKGZ1bmM9Y3JlYXRlX3dvcmtzcGFjZSkKKworICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKKyAgICAgICAgaWYgaGFzYXR0cihwbHVnaW4sICdyZWdpc3Rlcl9jb21tYW5kcycpOgorICAgICAgICAgICAgcGx1Z2luLnJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3ModW5wYXJzZWRfYXJncywgbmFtZXNwYWNlPWdsb2JhbF9hcmdzKQorCisgICAgaWYgYXJncy5zdWJwYXJzZXJfbmFtZSAhPSAnY3JlYXRlLXdvcmtzcGFjZSc6CisgICAgICAgIHJlYWRfd29ya3NwYWNlKCkKKworICAgIHRyeToKKyAgICAgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSkKKyAgICBleGNlcHQgRGV2dG9vbEVycm9yIGFzIGVycjoKKyAgICAgICAgaWYgc3RyKGVycik6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGVycikpCisgICAgICAgIHJldCA9IDEKKworICAgIHJldHVybiByZXQKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9nZW4tbG9ja2Vkc2lnLWNhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5M2IyYzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZQpAQCAtMCwwICsxLDQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgZ2VuLWxvY2tlZHNpZy1jYWNoZSA8bG9ja2VkLXNpZ3MuaW5jPiA8aW5wdXQtY2FjaGVkaXI+IDxvdXRwdXQtY2FjaGVkaXI+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGdsb2IKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBlcnJubworCitkZWYgbWtkaXIoZCk6CisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UgZQorCitpZiBsZW4oc3lzLmFyZ3YpIDwgMzoKKyAgICBwcmludCgiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgc3BlY2lmaWVkIikKKyAgICBzeXMuZXhpdCgxKQorCitzaWdzID0gW10KK3dpdGggb3BlbihzeXMuYXJndlsxXSkgYXMgZjoKKyAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICBpZiAiOiIgaW4gbDoKKyAgICAgICAgICAgIHNpZ3MuYXBwZW5kKGwuc3BsaXQoIjoiKVsyXS5zcGxpdCgpWzBdKQorCitmaWxlcyA9IHNldCgpCitmb3IgcyBpbiBzaWdzOgorICAgIHAgPSBzeXMuYXJndlsyXSArICIvIiArIHNbOjJdICsgIi8qIiArIHMgKyAiKiIKKyAgICBmaWxlcyB8PSBzZXQoZ2xvYi5nbG9iKHApKQorICAgIHAgPSBzeXMuYXJndlsyXSArICIvKi8iICsgc1s6Ml0gKyAiLyoiICsgcyArICIqIgorICAgIGZpbGVzIHw9IHNldChnbG9iLmdsb2IocCkpCisKK2ZvciBmIGluIGZpbGVzOgorICAgIGRzdCA9IGYucmVwbGFjZShzeXMuYXJndlsyXSwgc3lzLmFyZ3ZbM10pCisgICAgZGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShkc3QpCisgICAgbWtkaXIoZGVzdGRpcikKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CisgICAgICAgIG9zLnJlbW92ZShkc3QpCisgICAgaWYgKG9zLnN0YXQoZikuc3RfZGV2ID09IG9zLnN0YXQoZGVzdGRpcikuc3RfZGV2KToKKyAgICAgICAgb3MubGluayhmLCBkc3QpCisgICAgZWxzZToKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGYsIGRzdCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9nZW4tc2l0ZS1jb25maWcgYi95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLXNpdGUtY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkYTdhMGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvZ2VuLXNpdGUtY29uZmlnCkBAIC0wLDAgKzEsNTMgQEAKKyMhIC9iaW4vc2gKKyMgIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitjYXQgPDwgRU9GCitBQ19QUkVSRVEoMi41NykKK0FDX0lOSVQoW3NpdGVfd2lkZV0sWzEuMC4wXSkKKworRU9GCisKKyMgRGlzYWJsZSBhcyBlbmRpYW4gaXMgc2V0IGluIHRoZSBkZWZhdWx0IGNvbmZpZworI2VjaG8gQUNfQ19CSUdFTkRJQU4KKyNlY2hvCisKK2lmIFsgLWUgJDEvdHlwZXMgXSA7IHRoZW4KKyAgd2hpbGUgcmVhZCB0eXBlIDsgZG8KKyAgICBlY2hvICJBQ19DSEVDS19TSVpFT0YoWyR0eXBlXSkiCisgIGRvbmUgPCAkMS90eXBlcworCisgIGVjaG8KK2ZpCisKK2lmIFsgLWUgJDEvZnVuY3MgXTsgdGhlbgorICB3aGlsZSByZWFkIGZ1bmMgOyBkbworICAgIGVjaG8gIkFDX0NIRUNLX0ZVTkNTKFskZnVuY10pIgorICBkb25lIDwgJDEvZnVuY3MKKworICBlY2hvCitmaQorCitpZiBbIC1lICQxL2hlYWRlcnMgXTsgdGhlbgorICB3aGlsZSByZWFkIGhlYWRlciA7IGRvCisgICAgZWNobyAiQUNfQ0hFQ0tfSEVBREVSUyhbJGhlYWRlcl0pIgorICBkb25lIDwgJDEvaGVhZGVycworCisgIGVjaG8KK2ZpCisKK2NhdCA8PCBFT0YKK0FDX09VVFBVVAorRU9GCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvaG9iIGIveW9jdG8tcG9reS9zY3JpcHRzL2hvYgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZDMzYWIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2hvYgpAQCAtMCwwICsxLDYgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKK2V4cG9ydCBCQl9FTlZfRVhUUkFXSElURT0iRElTQUJMRV9TQU5JVFlfQ0hFQ0tTICRCQl9FTlZfRVhUUkFXSElURSIKK0RJU0FCTEVfU0FOSVRZX0NIRUNLUz0xIGJpdGJha2UgLXUgaG9iICRACisKK3JldD0kPworZXhpdCAkcmV0CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmI2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIyIEBACisjCisjIFlvY3RvIEJTUCB0b29scyBsaWJyYXJ5CisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2VuZ2luZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2VuZ2luZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZiZTIzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvZW5naW5lLnB5CkBAIC0wLDAgKzEsMTk0NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIHRlbXBsYXRpbmcgZW5naW5lIHVzZWQgYnkgJ3lvY3RvLWJzcCcgdG8KKyMgY3JlYXRlIEJTUHMuICBUaGUgQlNQIHRlbXBsYXRlcyBhcmUgc2ltcGx5IHRoZSBzZXQgb2YgZmlsZXMgZXhwZWN0ZWQKKyMgdG8gYXBwZWFyIGluIGEgZ2VuZXJhdGVkIEJTUCwgbWFya2VkIHVwIHdpdGggYSBzbWFsbCBzZXQgb2YgdGFncworIyB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgb3V0cHV0LiAgVGhlIGVuZ2luZSBwYXJzZXMgdGhyb3VnaCB0aGUKKyMgdGVtcGxhdGVzIGFuZCBnZW5lcmF0ZXMgYSBQeXRob24gcHJvZ3JhbSBjb250YWluaW5nIGFsbCB0aGUgbG9naWMKKyMgYW5kIGlucHV0IGVsZW1lbnRzIG5lZWRlZCB0byBkaXNwbGF5IGFuZCByZXRyaWV2ZSBCU1Atc3BlY2lmaWMKKyMgaW5mb3JtYXRpb24gZnJvbSB0aGUgdXNlci4gIFRoZSByZXN1bHRpbmcgcHJvZ3JhbSB1c2VzIHRob3NlIHJlc3VsdHMKKyMgdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIEJTUCBmaWxlcy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIHRhZ3MgaW1wb3J0ICoKK2ltcG9ydCBzaGxleAoraW1wb3J0IGpzb24KK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCisKK2NsYXNzIExpbmUoKToKKyAgICAiIiIKKyAgICBHZW5lcmljIChhYnN0cmFjdCkgY29udGFpbmVyIHJlcHJlc2VudGluZyBhIGxpbmUgdGhhdCB3aWxsIGFwcGVhcgorICAgIGluIHRoZSBCU1AtZ2VuZXJhdGluZyBwcm9ncmFtLgorICAgICIiIgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYubGluZSA9IGxpbmUKKyAgICAgICAgc2VsZi5nZW5lcmF0ZWRfbGluZSA9ICIiCisgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhpbnQKKyAgICAgICAgc2VsZi5kaXNjYXJkID0gRmFsc2UKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgdGhlIGZpbmFsIGV4ZWN1dGFibGUgbGluZSB0aGF0IHdpbGwgYXBwZWFyIGluIHRoZQorICAgICAgICBCU1AtZ2VuZXJhdGlvbiBwcm9ncmFtLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVzY2FwZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEVzY2FwZSBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIHVudGlsIEkgZmluZAorICAgICAgICBzb21ldGhpbmcgYmV0dGVyIChyZS5lc2NhcGUoKSBlc2NhcGVzIHdheSB0b28gbXVjaCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbGluZS5yZXBsYWNlKCJcXCIsICJcXFxcIikucmVwbGFjZSgiXCIiLCAiXFxcIiIpLnJlcGxhY2UoIiciLCAiXFwnIikKKworICAgIGRlZiBwYXJzZV9lcnJvcihzZWxmLCBtc2csIGxpbmVubywgbGluZSk6CisgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiJXM6ICVzIiAlIChtc2csIGxpbmUpKQorCisKK2NsYXNzIE5vcm1hbExpbmUoTGluZSk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBub3JtYWwgKG5vbi10YWcpIGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgTGluZS5fX2luaXRfXyhzZWxmLCBsaW5lKQorICAgICAgICBzZWxmLmlzX2ZpbGVuYW1lID0gRmFsc2UKKyAgICAgICAgc2VsZi5pc19kaXJuYW1lID0gRmFsc2UKKyAgICAgICAgc2VsZi5vdXRfZmlsZWJhc2UgPSBOb25lCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgaWYgc2VsZi5pc19maWxlbmFtZToKKyAgICAgICAgICAgIGxpbmUgPSAiY3VycmVudF9maWxlID0gXCIiICsgb3MucGF0aC5qb2luKHNlbGYub3V0X2ZpbGViYXNlLCBzZWxmLmVzY2FwZShzZWxmLmxpbmUpKSArICJcIjsgb2YgPSBvcGVuKGN1cnJlbnRfZmlsZSwgXCJ3XCIpIgorICAgICAgICBlbGlmIHNlbGYuaXNfZGlybmFtZToKKyAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZmlsZWJhc2UsIHNlbGYuZXNjYXBlKHNlbGYubGluZSkpCisgICAgICAgICAgICBsaW5lID0gImlmIG5vdCBvcy5wYXRoLmV4aXN0cyhcIiIgKyBkaXJuYW1lICsgIlwiKTogb3MubWtkaXIoXCIiICsgZGlybmFtZSArICJcIikiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gIm9mLndyaXRlKFwiIiArIHNlbGYuZXNjYXBlKHNlbGYubGluZSkgKyAiXFxuXCIpIgorICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIENvZGVMaW5lKExpbmUpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3IgUHl0aG9uIGNvZGUgdGFnIGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgTGluZS5fX2luaXRfXyhzZWxmLCBsaW5lKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmxpbmUKKworCitjbGFzcyBBc3NpZ25tZW50OgorICAgICIiIgorICAgIFJlcHJlc2VudGF0aW9uIG9mIGV2ZXJ5dGhpbmcgd2Uga25vdyBhYm91dCB7ez1uYW1lIH19IHRhZ3MuCisgICAgSW5zdGFuY2VzIG9mIHRoZXNlIGFyZSB1c2VkIGJ5IEFzc2lnbm1lbnQgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBlbmQsIG5hbWUpOgorICAgICAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKKyAgICAgICAgc2VsZi5lbmQgPSBlbmQKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisKK2NsYXNzIEFzc2lnbm1lbnRMaW5lKE5vcm1hbExpbmUpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3Igbm9ybWFsIGxpbmVzIGNvbnRhaW5pbmcgYXNzaWdubWVudCB0YWdzLiAgQXNzaWdubWVudAorICAgIHRhZ3MgbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgJ3N0YXJ0JyB2YWx1ZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgIE5vcm1hbExpbmUuX19pbml0X18oc2VsZiwgbGluZSkKKyAgICAgICAgc2VsZi5hc3NpZ25tZW50cyA9IFtdCisKKyAgICBkZWYgYWRkX2Fzc2lnbm1lbnQoc2VsZiwgc3RhcnQsIGVuZCwgbmFtZSk6CisgICAgICAgIHNlbGYuYXNzaWdubWVudHMuYXBwZW5kKEFzc2lnbm1lbnQoc3RhcnQsIGVuZCwgbmFtZSkpCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgbGluZSA9IHNlbGYuZXNjYXBlKHNlbGYubGluZSkKKworICAgICAgICBmb3IgYXNzaWdubWVudCBpbiBzZWxmLmFzc2lnbm1lbnRzOgorICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSAiXCIgKyAiICsgYXNzaWdubWVudC5uYW1lICsgIiArIFwiIgorICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKEFTU0lHTl9UQUcpCisgICAgICAgICAgICBsaW5lID0gbGluZVs6aWR4XSArIHJlcGxhY2VtZW50ICsgbGluZVtpZHggKyBhc3NpZ25tZW50LmVuZCAtIGFzc2lnbm1lbnQuc3RhcnQ6XQorICAgICAgICBpZiBzZWxmLmlzX2ZpbGVuYW1lOgorICAgICAgICAgICAgcmV0dXJuICJjdXJyZW50X2ZpbGUgPSBcIiIgKyBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZmlsZWJhc2UsIGxpbmUpICsgIlwiOyBvZiA9IG9wZW4oY3VycmVudF9maWxlLCBcIndcIikiCisgICAgICAgIGVsaWYgc2VsZi5pc19kaXJuYW1lOgorICAgICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm91dF9maWxlYmFzZSwgbGluZSkKKyAgICAgICAgICAgIHJldHVybiAiaWYgbm90IG9zLnBhdGguZXhpc3RzKFwiIiArIGRpcm5hbWUgKyAiXCIpOiBvcy5ta2RpcihcIiIgKyBkaXJuYW1lICsgIlwiKSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAib2Yud3JpdGUoXCIiICsgbGluZSArICJcXG5cIikiCisKKworY2xhc3MgSW5wdXRMaW5lKExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIElucHV0IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaW5lLl9faW5pdF9fKHNlbGYsIHRhZykKKyAgICAgICAgc2VsZi5wcm9wcyA9IHByb3BzCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wcmlvID0gaW50KHByb3BzWyJwcmlvIl0pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhpbnQKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBlbmRzX29uID0gc2VsZi5wcm9wc1siZGVwZW5kcy1vbiJdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVwZW5kc19vbl92YWwgPSBzZWxmLnByb3BzWyJkZXBlbmRzLW9uLXZhbCJdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gJ2RlcGVuZHMtb24tdmFsJyBmb3IgJ2RlcGVuZHMtb24nIHByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworCitjbGFzcyBFZGl0Qm94SW5wdXRMaW5lKElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgJ2VkaXRib3gnIElucHV0IGxpbmVzLgorCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAiTG9hZCBhZGRyZXNzIgorICAgICAgICBtc2c6IGV4YW1wbGUgLSAiUGxlYXNlIGVudGVyIHRoZSBsb2FkIGFkZHJlc3MiCisgICAgcmVzdWx0OgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5ICduYW1lJyB0bworICAgICAgICB3aGF0ZXZlciB0aGUgdXNlciB0eXBlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbmFtZScgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBtc2cgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gZGVmYXVsdChyYXdfaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBHaXRSZXBvRWRpdEJveElucHV0TGluZShFZGl0Qm94SW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciAnZWRpdGJveCcgSW5wdXQgbGluZXMgZm9yIHVzZXIgaW5wdXQgb2YgcmVtb3RlIGdpdAorICAgIHJlcG9zLiAgVGhpcyBjbGFzcyB2ZXJpZmllcyB0aGUgZXhpc3RlbmNlIGFuZCBjb25uZWN0aXZpdHkgb2YgdGhlCisgICAgc3BlY2lmaWVkIGdpdCByZXBvLgorCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAiTG9hZCBhZGRyZXNzIgorICAgICAgICBtc2c6IGV4YW1wbGUgLSAiUGxlYXNlIGVudGVyIHRoZSBsb2FkIGFkZHJlc3MiCisgICAgcmVzdWx0OgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5ICduYW1lJyB0bworICAgICAgICB3aGF0ZXZlciB0aGUgdXNlciB0eXBlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgRWRpdEJveElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgRWRpdEJveElucHV0TGluZS5nZW4oc2VsZiwgY29udGV4dCkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICduYW1lJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIG1zZyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIG1zZyArPSAiIFtkZWZhdWx0OiAiICsgZGVmYXVsdF9jaG9pY2UgKyAiXSIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBnZXRfdmVyaWZpZWRfZ2l0X3JlcG8oXCIiICsgbXNnICsgIlwiLCIgKyBuYW1lICsgIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBGaWxlRWRpdEJveElucHV0TGluZShFZGl0Qm94SW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciAnZWRpdGJveCcgSW5wdXQgbGluZXMgZm9yIHVzZXIgaW5wdXQgb2YgZXhpc3RpbmcKKyAgICBmaWxlcy4gIFRoaXMgY2xhc3MgdmVyaWZpZXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUuCisKKyAgICBwcm9wczoKKyAgICAgICAgbmFtZTogZXhhbXBsZSAtICJMb2FkIGFkZHJlc3MiCisgICAgICAgIG1zZzogZXhhbXBsZSAtICJQbGVhc2UgZW50ZXIgdGhlIGxvYWQgYWRkcmVzcyIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvCisgICAgICAgIHdoYXRldmVyIHRoZSB1c2VyIHR5cGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBFZGl0Qm94SW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBFZGl0Qm94SW5wdXRMaW5lLmdlbihzZWxmLCBjb250ZXh0KQorICAgICAgICBuYW1lID0gc2VsZi5wcm9wc1sibmFtZSJdCisgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ25hbWUnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgbXNnID0gc2VsZi5wcm9wc1sibXNnIl0KKyAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICdtc2cnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgorCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGdldF92ZXJpZmllZF9maWxlKFwiIiArIG1zZyArICJcIiwiICsgbmFtZSArICIsIFRydWUpIgorCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgQm9vbGVhbklucHV0TGluZShJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGJvb2xlYW4gSW5wdXQgbGluZXMuCisgICAgcHJvcHM6CisgICAgICAgIG5hbWU6IGV4YW1wbGUgLSAia2V5Ym9hcmQiCisgICAgICAgIG1zZzogIGV4YW1wbGUgLSAiR290IGtleWJvYXJkPyIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvICJ5ZXMiIG9yICJubyIKKyAgICAgICAgZXhhbXBsZSAtIGtleWJvYXJkID0gInllcyIKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbmFtZScgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBtc2cgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gYm9vbGVhbihyYXdfaW5wdXQoXCIiICsgbXNnICsgIiBcIiksICIgKyBuYW1lICsgIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBMaXN0SW5wdXRMaW5lKElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgTGlzdC1iYXNlZCBJbnB1dCBsaW5lcy4gZS5nLiBDaG9pY2VsaXN0LCBDaGVja2xpc3QuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBzZWxmLmNob2ljZXMgPSBbXQorCisgICAgZGVmIGdlbl9jaG9pY2VwYWlyX2xpc3Qoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIGEgbGlzdCBvZiAyLWl0ZW0gdmFsOmRlc2MgbGlzdHMgZnJvbSBzZWxmLmNob2ljZXMuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmNob2ljZXM6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGNob2ljZXBhaXJfbGlzdCA9IGxpc3QoKQorCisgICAgICAgIGZvciBjaG9pY2UgaW4gc2VsZi5jaG9pY2VzOgorICAgICAgICAgICAgY2hvaWNlcGFpciA9IFtdCisgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UudmFsKQorICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlLmRlc2MpCisgICAgICAgICAgICBjaG9pY2VwYWlyX2xpc3QuYXBwZW5kKGNob2ljZXBhaXIpCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXBhaXJfbGlzdAorCisgICAgZGVmIGdlbl9kZWdlbmVyYXRlX2Nob2ljZXBhaXJfbGlzdChzZWxmLCBjaG9pY2VzKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYSBsaXN0IG9mIDItaXRlbSB2YWw6ZGVzYyB3aXRoIHZhbD1kZXNjIGZyb20gcGFzc2VkLWluIGNob2ljZXMuIiIiCisgICAgICAgIGNob2ljZXBhaXJfbGlzdCA9IGxpc3QoKQorCisgICAgICAgIGZvciBjaG9pY2UgaW4gY2hvaWNlczoKKyAgICAgICAgICAgIGNob2ljZXBhaXIgPSBbXQorICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlKQorICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlKQorICAgICAgICAgICAgY2hvaWNlcGFpcl9saXN0LmFwcGVuZChjaG9pY2VwYWlyKQorCisgICAgICAgIHJldHVybiBjaG9pY2VwYWlyX2xpc3QKKworICAgIGRlZiBleGVjX2xpc3RnZW5fZm4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhlY3V0ZSB0aGUgbGlzdC1nZW5lcmF0aW5nIGZ1bmN0aW9uIGNvbnRhaW5lZCBhcyBhIHN0cmluZyBpbgorICAgICAgICB0aGUgImdlbiIgcHJvcGVydHkuCisgICAgICAgICIiIgorICAgICAgICByZXR2YWwgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZuYW1lID0gc2VsZi5wcm9wc1siZ2VuIl0KKyAgICAgICAgICAgIG1vZHNwbGl0ID0gZm5hbWUuc3BsaXQoJy4nKQorICAgICAgICAgICAgbW9kX2ZuID0gbW9kc3BsaXQucG9wKCkKKyAgICAgICAgICAgIG1vZCA9ICcuJy5qb2luKG1vZHNwbGl0KQorCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZCkKKyAgICAgICAgICAgICMgcHl0aG9uIDIuNyBoYXMgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdXNpbmcgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUKKyAgICAgICAgICAgIG0gPSBzeXMubW9kdWxlc1ttb2RdCisKKyAgICAgICAgICAgIGZuID0gZ2V0YXR0cihtLCBtb2RfZm4pCisgICAgICAgICAgICBpZiBub3QgZm46CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiY291bGRuJ3QgbG9hZCBmdW5jdGlvbiBzcGVjaWZpZWQgZm9yICdnZW4nIHByb3BlcnR5ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICAgICAgcmV0dmFsID0gZm4oY29udGV4dCkKKyAgICAgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiZnVuY3Rpb24gc3BlY2lmaWVkIGZvciAnZ2VuJyBwcm9wZXJ0eSByZXR1cm5lZCBub3RoaW5nICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIGdlbl9jaG9pY2VzX3N0cihzZWxmLCBjaG9pY2VwYWlycyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIG51bWJlcmVkIGxpc3Qgb2YgY2hvaWNlcyBmcm9tIGEgbGlzdCBvZiBjaG9pY2VwYWlycworICAgICAgICBmb3IgZGlzcGxheSB0byB0aGUgdXNlci4KKyAgICAgICAgIiIiCisgICAgICAgIGNob2ljZXNfc3RyID0gIiIKKworICAgICAgICBmb3IgaSwgY2hvaWNlcGFpciBpbiBlbnVtZXJhdGUoY2hvaWNlcGFpcnMpOgorICAgICAgICAgICAgY2hvaWNlc19zdHIgKz0gIlx0IiArIHN0cihpICsgMSkgKyAiKSAiICsgY2hvaWNlcGFpclsxXSArICJcbiIKKworICAgICAgICByZXR1cm4gY2hvaWNlc19zdHIKKworICAgIGRlZiBnZW5fY2hvaWNlc192YWxfc3RyKHNlbGYsIGNob2ljZXBhaXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGFycmF5IG9mIGNob2ljZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgICAgbnVtYmVyZWQgbGlzdCBnZW5lcmF0ZWQgYnkgZ2VuX2Nob2ljZXNfc3RyKCkuCisgICAgICAgICIiIgorICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ID0gIlsiCisKKyAgICAgICAgZm9yIGksIGNob2ljZXBhaXIgaW4gZW51bWVyYXRlKGNob2ljZXBhaXJzKToKKyAgICAgICAgICAgIGNob2ljZXNfdmFsX2xpc3QgKz0gIlwiIiArIGNob2ljZXBhaXJbMF0gKyAiXCIsIgorICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ICs9ICJdIgorCisgICAgICAgIHJldHVybiBjaG9pY2VzX3ZhbF9saXN0CisKKyAgICBkZWYgZ2VuX2Nob2ljZXNfdmFsX2xpc3Qoc2VsZiwgY2hvaWNlcGFpcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2hvaWNlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBudW1iZXJlZCBsaXN0IGdlbmVyYXRlZCBieSBnZW5fY2hvaWNlc19zdHIoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNob2ljZXNfdmFsX2xpc3QgPSBbXQorCisgICAgICAgIGZvciBpLCBjaG9pY2VwYWlyIGluIGVudW1lcmF0ZShjaG9pY2VwYWlycyk6CisgICAgICAgICAgICBjaG9pY2VzX3ZhbF9saXN0LmFwcGVuZChjaG9pY2VwYWlyWzBdKQorCisgICAgICAgIHJldHVybiBjaG9pY2VzX3ZhbF9saXN0CisKKyAgICBkZWYgZ2VuX2Nob2ljZXNfbGlzdChzZWxmLCBjb250ZXh0ID0gTm9uZSwgY2hlY2tsaXN0ID0gRmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2hvaWNlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBudW1iZXJlZCBsaXN0IGdlbmVyYXRlZCBieSBnZW5fY2hvaWNlc19zdHIoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNob2ljZXMgPSBzZWxmLmV4ZWNfbGlzdGdlbl9mbihjb250ZXh0KQorICAgICAgICBpZiBjaG9pY2VzOgorICAgICAgICAgICAgaWYgbGVuKGNob2ljZXMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gZW50cmllcyBhdmFpbGFibGUgZm9yIGlucHV0IGxpc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgICAgIGNob2ljZXBhaXJzID0gc2VsZi5nZW5fZGVnZW5lcmF0ZV9jaG9pY2VwYWlyX2xpc3QoY2hvaWNlcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmNob2ljZXMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gZW50cmllcyBhdmFpbGFibGUgZm9yIGlucHV0IGxpc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgICAgIGNob2ljZXBhaXJzID0gc2VsZi5nZW5fY2hvaWNlcGFpcl9saXN0KCkKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gY2hvaWNlcGFpcnMKKworICAgIGRlZiBnZW5fY2hvaWNlcyhzZWxmLCBjb250ZXh0ID0gTm9uZSwgY2hlY2tsaXN0ID0gRmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2hvaWNlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBudW1iZXJlZCBsaXN0IGdlbmVyYXRlZCBieSBnZW5fY2hvaWNlc19zdHIoKSwgZGlzcGxheSBpdCB0bworICAgICAgICB0aGUgdXNlciwgYW5kIHByb2Nlc3MgdGhlIHJlc3VsdC4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIG1zZyArPSAiIFtkZWZhdWx0OiAiICsgZGVmYXVsdF9jaG9pY2UgKyAiXSIKKworICAgICAgICBjaG9pY2VwYWlycyA9IHNlbGYuZ2VuX2Nob2ljZXNfbGlzdChjb250ZXh0LCBjaGVja2xpc3QpCisKKyAgICAgICAgY2hvaWNlc19zdHIgPSBzZWxmLmdlbl9jaG9pY2VzX3N0cihjaG9pY2VwYWlycykKKyAgICAgICAgY2hvaWNlc192YWxfbGlzdCA9IHNlbGYuZ2VuX2Nob2ljZXNfdmFsX2xpc3QoY2hvaWNlcGFpcnMpCisgICAgICAgIGlmIGNoZWNrbGlzdDoKKyAgICAgICAgICAgIGNob2ljZXZhbCA9IGRlZmF1bHQoZmluZF9jaG9pY2V2YWxzKHJhd19pbnB1dChtc2cgKyAiXG4iICsgY2hvaWNlc19zdHIpLCBjaG9pY2VzX3ZhbF9saXN0KSwgZGVmYXVsdF9jaG9pY2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjaG9pY2V2YWwgPSBkZWZhdWx0KGZpbmRfY2hvaWNldmFsKHJhd19pbnB1dChtc2cgKyAiXG4iICsgY2hvaWNlc19zdHIpLCBjaG9pY2VzX3ZhbF9saXN0KSwgZGVmYXVsdF9jaG9pY2UpCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXZhbAorCisKK2RlZiBmaW5kX2Nob2ljZXZhbChjaG9pY2Vfc3RyLCBjaG9pY2VfbGlzdCk6CisgICAgIiIiCisgICAgVGFrZSBudW1iZXIgYXMgc3RyaW5nIGFuZCByZXR1cm4gdmFsIHN0cmluZyBmcm9tIGNob2ljZV9saXN0LAorICAgIGVtcHR5IHN0cmluZyBpZiBvb2IuICBjaG9pY2VfbGlzdCBpcyBhIHNpbXBsZSBweXRob24gbGlzdC4KKyAgICAiIiIKKyAgICBjaG9pY2VfdmFsID0gIiIKKworICAgIHRyeToKKyAgICAgICAgY2hvaWNlX2lkeCA9IGludChjaG9pY2Vfc3RyKQorICAgICAgICBpZiBjaG9pY2VfaWR4IDw9IGxlbihjaG9pY2VfbGlzdCk6CisgICAgICAgICAgICBjaG9pY2VfaWR4IC09IDEKKyAgICAgICAgICAgIGNob2ljZV92YWwgPSBjaG9pY2VfbGlzdFtjaG9pY2VfaWR4XQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gY2hvaWNlX3ZhbAorCisKK2RlZiBmaW5kX2Nob2ljZXZhbHMoY2hvaWNlX3N0ciwgY2hvaWNlX2xpc3QpOgorICAgICIiIgorICAgIFRha2UgbnVtYmVycyBhcyBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nIGFuZCByZXR1cm4gdmFscyBsaXN0IGZyb20KKyAgICBjaG9pY2VfbGlzdCwgZW1wdHkgbGlzdCBpZiBvb2IuICBjaG9pY2VfbGlzdCBpcyBhIHNpbXBsZSBweXRob24KKyAgICBsaXN0LgorICAgICIiIgorICAgIGNob2ljZV92YWxzID0gW10KKworICAgIGNob2ljZXMgPSBjaG9pY2Vfc3RyLnNwbGl0KCkKKyAgICBmb3IgY2hvaWNlIGluIGNob2ljZXM6CisgICAgICAgIGNob2ljZV92YWxzLmFwcGVuZChmaW5kX2Nob2ljZXZhbChjaG9pY2UsIGNob2ljZV9saXN0KSkKKworICAgIHJldHVybiBjaG9pY2VfdmFscworCisKK2RlZiBkZWZhdWx0KGlucHV0X3N0ciwgbmFtZSk6CisgICAgIiIiCisgICAgUmV0dXJuIGRlZmF1bHQgaWYgbm8gaW5wdXRfc3RyLCBvdGhlcndpc2Ugc3RyaXBwZWQgaW5wdXRfc3RyLgorICAgICIiIgorICAgIGlmIG5vdCBpbnB1dF9zdHI6CisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICByZXR1cm4gaW5wdXRfc3RyLnN0cmlwKCkKKworCitkZWYgdmVyaWZ5X2dpdF9yZXBvKGdpdHVybCk6CisgICAgIiIiCisgICAgVmVyaWZ5IHRoYXQgdGhlIGdpdHVybCBwYXNzZWQgaW4gY2FuIGJlIGNvbm5lY3RlZCB0by4gIFRoaXMgY2FuIGJlCisgICAgdXNlZCBhcyBhIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBnaXZlbiByZXBvIGFuZC9vciBiYXNpYworICAgIGdpdCByZW1vdGUgY29ubmVjdGl2aXR5LgorCisgICAgUmV0dXJucyBUcnVlIGlmIHRoZSBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsLCBmYWxzIG90aGVyd2lzZQorICAgICIiIgorICAgIGlmIG5vdCBnaXR1cmw6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZ2l0Y21kID0gImdpdCBscy1yZW1vdGUgJXMgPiAvZGV2L251bGwgMj4mMSIgJSAoZ2l0dXJsKQorICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKGdpdGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICBpZiByYyA9PSAwOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGdldF92ZXJpZmllZF9naXRfcmVwbyhpbnB1dF9zdHIsIG5hbWUpOgorICAgICIiIgorICAgIFJldHVybiBnaXQgcmVwbyBpZiB2ZXJpZmllZCwgb3RoZXJ3aXNlIGxvb3AgZm9yZXZlciBhc2tpbmcgdXNlcgorICAgIGZvciBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICBtc2cgPSBpbnB1dF9zdHIuc3RyaXAoKSArICIgIgorCisgICAgZ2l0dXJsID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGlmIHZlcmlmeV9naXRfcmVwbyhnaXR1cmwpOgorICAgICAgICAgICAgcmV0dXJuIGdpdHVybAorICAgICAgICBnaXR1cmwgPSBkZWZhdWx0KHJhd19pbnB1dChtc2cpLCBuYW1lKQorCisKK2RlZiBnZXRfdmVyaWZpZWRfZmlsZShpbnB1dF9zdHIsIG5hbWUsIGZpbGVuYW1lX2Nhbl9iZV9udWxsKToKKyAgICAiIiIKKyAgICBSZXR1cm4gZmlsZW5hbWUgaWYgdGhlIGZpbGUgZXhpc3RzLCBvdGhlcndpc2UgbG9vcCBmb3JldmVyIGFza2luZworICAgIHVzZXIgZm9yIGZpbGVuYW1lLgorICAgICIiIgorICAgIG1zZyA9IGlucHV0X3N0ci5zdHJpcCgpICsgIiAiCisKKyAgICBmaWxlbmFtZSA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBpZiBub3QgZmlsZW5hbWUgYW5kIGZpbGVuYW1lX2Nhbl9iZV9udWxsOgorICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZQorICAgICAgICBmaWxlbmFtZSA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisKKworZGVmIHJlcGxhY2VfZmlsZShyZXBsYWNlX3RoaXMsIHdpdGhfdGhpcyk6CisgICAgIiIiCisgICAgUmVwbGFjZSB0aGUgZ2l2ZW4gZmlsZSB3aXRoIHRoZSBjb250ZW50cyBvZiBmaWxlbmFtZSwgcmV0YWluaW5nCisgICAgdGhlIG9yaWdpbmFsIGZpbGVuYW1lLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgcmVwbGFjZV90aGlzLmNsb3NlKCkKKyAgICAgICAgc2h1dGlsLmNvcHkod2l0aF90aGlzLCByZXBsYWNlX3RoaXMubmFtZSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCisKK2RlZiBib29sZWFuKGlucHV0X3N0ciwgbmFtZSk6CisgICAgIiIiCisgICAgUmV0dXJuIGxvd2VyY2FzZSB2ZXJzaW9uIG9mIGZpcnN0IGNoYXIgaW4gc3RyaW5nLCBvciB2YWx1ZSBpbiBuYW1lLgorICAgICIiIgorICAgIGlmIG5vdCBpbnB1dF9zdHI6CisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBzdHIgPSBpbnB1dF9zdHIubG93ZXIoKS5zdHJpcCgpCisgICAgaWYgc3RyIGFuZCBzdHJbMF0gPT0gInkiIG9yIHN0clswXSA9PSAibiI6CisgICAgICAgIHJldHVybiBzdHJbMF0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbmFtZQorCisKK2RlZiBzdHJpcF9iYXNlKGlucHV0X3N0cik6CisgICAgIiIiCisgICAgc3RyaXAgJy9iYXNlJyBvZmYgdGhlIGVuZCBvZiBpbnB1dF9zdHIsIHNvIHdlIGNhbiB1c2UgJ2Jhc2UnIGluCisgICAgdGhlIGJyYW5jaCBuYW1lcyB3ZSBwcmVzZW50IHRvIHRoZSB1c2VyLgorICAgICIiIgorICAgIGlmIGlucHV0X3N0ciBhbmQgaW5wdXRfc3RyLmVuZHN3aXRoKCIvYmFzZSIpOgorICAgICAgICByZXR1cm4gaW5wdXRfc3RyWzotbGVuKCIvYmFzZSIpXQorICAgIHJldHVybiBpbnB1dF9zdHIuc3RyaXAoKQorCisKK2RlZmVycmVkX2Nob2ljZXMgPSB7fQorCitkZWYgZ2VuX2Nob2ljZXNfZGVmZXIoaW5wdXRfbGluZSwgY29udGV4dCwgY2hlY2tsaXN0ID0gRmFsc2UpOgorICAgICIiIgorICAgIFNhdmUgdGhlIGNvbnRleHQgaGFzaGVkIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBpdGVtLCB3aGljaCB3aWxsIGJlCisgICAgcGFzc2VkIHRvIHRoZSBnZW4gZnVuY3Rpb24gbGF0ZXIuCisgICAgIiIiCisgICAgbmFtZSA9IGlucHV0X2xpbmUucHJvcHNbIm5hbWUiXQorCisgICAgdHJ5OgorICAgICAgICBuYW1lYXBwZW5kID0gaW5wdXRfbGluZS5wcm9wc1sibmFtZWFwcGVuZCJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBuYW1lYXBwZW5kID0gIiIKKworICAgIHRyeToKKyAgICAgICAgYnJhbmNoZXNfYmFzZSA9IGlucHV0X2xpbmUucHJvcHNbImJyYW5jaGVzX2Jhc2UiXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgYnJhbmNoZXNfYmFzZSA9ICIiCisKKyAgICBmaWxlbmFtZSA9IGlucHV0X2xpbmUucHJvcHNbImZpbGVuYW1lIl0KKworICAgIGNsb3NldGFnX3N0YXJ0ID0gZmlsZW5hbWUuZmluZChDTE9TRV9UQUcpCisKKyAgICBpZiBjbG9zZXRhZ19zdGFydCAhPSAtMToKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVtjbG9zZXRhZ19zdGFydCArIGxlbihDTE9TRV9UQUcpOl0KKworICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3RyaXAoKQorICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0KKworICAgIGNhcHR1cmVkX2NvbnRleHQgPSBjYXB0dXJlX2NvbnRleHQoY29udGV4dCkKKyAgICBjb250ZXh0WyJmaWxlbmFtZSJdID0gZmlsZW5hbWUKKyAgICBjYXB0dXJlZF9jb250ZXh0WyJmaWxlbmFtZSJdID0gZmlsZW5hbWUKKyAgICBjb250ZXh0WyJuYW1lYXBwZW5kIl0gPSBuYW1lYXBwZW5kCisgICAgY2FwdHVyZWRfY29udGV4dFsibmFtZWFwcGVuZCJdID0gbmFtZWFwcGVuZAorICAgIGNvbnRleHRbImJyYW5jaGVzX2Jhc2UiXSA9IGJyYW5jaGVzX2Jhc2UKKyAgICBjYXB0dXJlZF9jb250ZXh0WyJicmFuY2hlc19iYXNlIl0gPSBicmFuY2hlc19iYXNlCisKKyAgICBkZWZlcnJlZF9jaG9pY2UgPSAoaW5wdXRfbGluZSwgY2FwdHVyZWRfY29udGV4dCwgY2hlY2tsaXN0KQorICAgIGtleSA9IG5hbWUgKyAiXyIgKyBmaWxlbmFtZSArICJfIiArIG5hbWVhcHBlbmQKKyAgICBkZWZlcnJlZF9jaG9pY2VzW2tleV0gPSBkZWZlcnJlZF9jaG9pY2UKKworCitkZWYgaW52b2tlX2RlZmVycmVkX2Nob2ljZXMobmFtZSk6CisgICAgIiIiCisgICAgSW52b2tlIHRoZSBjaG9pY2UgZ2VuZXJhdGlvbiBmdW5jdGlvbiB1c2luZyB0aGUgY29udGV4dCBoYXNoZWQgYnkKKyAgICAnbmFtZScuCisgICAgIiIiCisgICAgZGVmZXJyZWRfY2hvaWNlID0gZGVmZXJyZWRfY2hvaWNlc1tuYW1lXQorICAgIGlucHV0X2xpbmUgPSBkZWZlcnJlZF9jaG9pY2VbMF0KKyAgICBjb250ZXh0ID0gZGVmZXJyZWRfY2hvaWNlWzFdCisgICAgY2hlY2tsaXN0ID0gZGVmZXJyZWRfY2hvaWNlWzJdCisKKyAgICBjb250ZXh0WyJuYW1lIl0gPSBuYW1lCisKKyAgICBjaG9pY2VzID0gaW5wdXRfbGluZS5nZW5fY2hvaWNlcyhjb250ZXh0LCBjaGVja2xpc3QpCisKKyAgICByZXR1cm4gY2hvaWNlcworCisKK2NsYXNzIENob2ljZWxpc3RJbnB1dExpbmUoTGlzdElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY2hvaWNlbGlzdCBJbnB1dCBsaW5lcy4KKyAgICBwcm9wczoKKyAgICAgICAgbmFtZTogZXhhbXBsZSAtICJ4c2VydmVyX2Nob2ljZSIKKyAgICAgICAgbXNnOiAgZXhhbXBsZSAtICJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZSIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvIHdoaWNoZXZlciBDaG9pY2Ugd2FzIGNob3NlbgorICAgICAgICBleGFtcGxlIC0geHNlcnZlcl9jaG9pY2UgPSAieHNlcnZlcl92ZXNhIgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaXN0SW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisKKyAgICAgICAgZ2VuX2Nob2ljZXNfZGVmZXIoc2VsZiwgY29udGV4dCkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBuYW1lYXBwZW5kID0gY29udGV4dFsibmFtZWFwcGVuZCJdCisgICAgICAgIGZpbGVuYW1lID0gY29udGV4dFsiZmlsZW5hbWUiXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBkZWZhdWx0KGludm9rZV9kZWZlcnJlZF9jaG9pY2VzKFwiIiArIG5hbWUgKyAiXyIgKyBmaWxlbmFtZSArICJfIiArIG5hbWVhcHBlbmQgKyAiXCIpLCBcIiIgKyBkZWZhdWx0X2Nob2ljZSArICJcIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBMaXN0VmFsSW5wdXRMaW5lKElucHV0TGluZSk6CisgICAgIiIiCisgICAgQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY2hvaWNlIGFuZCBjaGVja2JveCBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnZhbCA9IHNlbGYucHJvcHNbInZhbCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICd2YWwnIHByb3BlcnR5IGZvdW5kIiwgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRlc2MgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKworY2xhc3MgQ2hvaWNlSW5wdXRMaW5lKExpc3RWYWxJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGNob2ljZWxpc3QgaXRlbSBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgTGlzdFZhbElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBDaGVja2xpc3RJbnB1dExpbmUoTGlzdElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY2hlY2tsaXN0IElucHV0IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaXN0SW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisKKyAgICAgICAgZ2VuX2Nob2ljZXNfZGVmZXIoc2VsZiwgY29udGV4dCwgVHJ1ZSkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBuYW1lYXBwZW5kID0gY29udGV4dFsibmFtZWFwcGVuZCJdCisgICAgICAgIGZpbGVuYW1lID0gY29udGV4dFsiZmlsZW5hbWUiXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBkZWZhdWx0KGludm9rZV9kZWZlcnJlZF9jaG9pY2VzKFwiIiArIG5hbWUgKyAiXyIgKyBmaWxlbmFtZSArICJfIiArIG5hbWVhcHBlbmQgKyAiXCIpLCBcIiIgKyBkZWZhdWx0X2Nob2ljZSArICJcIikiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBDaGVja0lucHV0TGluZShMaXN0VmFsSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBjaGVja2xpc3QgaXRlbSBJbnB1dCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKToKKyAgICAgICAgTGlzdFZhbElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitkaXJuYW1lX3N1YnN0aXR1dGlvbnMgPSB7fQorCitjbGFzcyBTdWJzdHJhdGVCYXNlKG9iamVjdCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgYm90aCBleHBhbmRlZCBhbmQgdW5leHBhbmRlZCBmaWxlIGFuZCBkaXIgY29udGFpbmVyCisgICAgb2JqZWN0cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5maWxlYmFzZSA9IGZpbGViYXNlCisgICAgICAgIHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYub3V0X2ZpbGViYXNlID0gb3V0X2ZpbGViYXNlCisgICAgICAgIHNlbGYucmF3X2xpbmVzID0gW10KKyAgICAgICAgc2VsZi5leHBhbmRlZF9saW5lcyA9IFtdCisgICAgICAgIHNlbGYucHJldl9jaG9pY2VsaXN0ID0gTm9uZQorCisgICAgZGVmIHBhcnNlX2Vycm9yKHNlbGYsIG1zZywgbGluZW5vLCBsaW5lKToKKyAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczogWyVzOiAlZF06ICVzIiAlIChtc2csIHNlbGYuZmlsZW5hbWUsIGxpbmVubywgbGluZSkpCisKKyAgICBkZWYgZXhwYW5kX2lucHV0X3RhZyhzZWxmLCB0YWcsIGxpbmVubyk6CisgICAgICAgICIiIgorICAgICAgICBJbnB1dCB0YWdzIGNvbnNpc3Qgb2YgdGhlIHdvcmQgJ2lucHV0JyBhdCB0aGUgYmVnaW5uaW5nLAorICAgICAgICBmb2xsb3dlZCBieSBuYW1lOnZhbHVlIHByb3BlcnR5IHBhaXJzIHdoaWNoIGFyZSBjb252ZXJ0ZWQgaW50bworICAgICAgICBhIGRpY3Rpb25hcnkuCisgICAgICAgICIiIgorICAgICAgICBwcm9wc3RyID0gdGFnW2xlbihJTlBVVF9UQUcpOl0KKworICAgICAgICBwcm9wcyA9IGRpY3QocHJvcC5zcGxpdCgiOiIsIDEpIGZvciBwcm9wIGluIHNobGV4LnNwbGl0KHByb3BzdHIpKQorICAgICAgICBwcm9wc1siZmlsZW5hbWUiXSA9IHNlbGYuZmlsZW5hbWUKKworICAgICAgICBpbnB1dF90eXBlID0gcHJvcHNbSU5QVVRfVFlQRV9QUk9QRVJUWV0KKyAgICAgICAgaWYgbm90IHByb3BzW0lOUFVUX1RZUEVfUFJPUEVSVFldOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ3R5cGUnIHByb3BlcnR5IGZvdW5kIiwgbGluZW5vLCB0YWcpCisKKyAgICAgICAgaWYgaW5wdXRfdHlwZSA9PSAiYm9vbGVhbiI6CisgICAgICAgICAgICByZXR1cm4gQm9vbGVhbklucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGlmIGlucHV0X3R5cGUgPT0gImVkaXQiOgorICAgICAgICAgICAgcmV0dXJuIEVkaXRCb3hJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBpZiBpbnB1dF90eXBlID09ICJlZGl0LWdpdC1yZXBvIjoKKyAgICAgICAgICAgIHJldHVybiBHaXRSZXBvRWRpdEJveElucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGlmIGlucHV0X3R5cGUgPT0gImVkaXQtZmlsZSI6CisgICAgICAgICAgICByZXR1cm4gRmlsZUVkaXRCb3hJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICBlbGlmIGlucHV0X3R5cGUgPT0gImNob2ljZWxpc3QiOgorICAgICAgICAgICAgc2VsZi5wcmV2X2Nob2ljZWxpc3QgPSBDaG9pY2VsaXN0SW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnByZXZfY2hvaWNlbGlzdAorICAgICAgICBlbGlmIGlucHV0X3R5cGUgPT0gImNob2ljZSI6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wcmV2X2Nob2ljZWxpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiRm91bmQgJ2Nob2ljZScgaW5wdXQgdGFnIGJ1dCBubyBwcmV2aW91cyBjaG9pY2VsaXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgdGFnKQorICAgICAgICAgICAgY2hvaWNlID0gQ2hvaWNlSW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgICAgIHNlbGYucHJldl9jaG9pY2VsaXN0LmNob2ljZXMuYXBwZW5kKGNob2ljZSkKKyAgICAgICAgICAgIHJldHVybiBjaG9pY2UKKyAgICAgICAgZWxpZiBpbnB1dF90eXBlID09ICJjaGVja2xpc3QiOgorICAgICAgICAgICAgcmV0dXJuIENoZWNrbGlzdElucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGVsaWYgaW5wdXRfdHlwZSA9PSAiY2hlY2siOgorICAgICAgICAgICAgcmV0dXJuIENoZWNrSW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBleHBhbmRfYXNzaWdubWVudF90YWcoc2VsZiwgc3RhcnQsIGxpbmUsIGxpbmVubyk6CisgICAgICAgICIiIgorICAgICAgICBFeHBhbmQgYWxsIHRhZ3MgaW4gYSBsaW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZXhwYW5kZWRfbGluZSA9IEFzc2lnbm1lbnRMaW5lKGxpbmUucnN0cmlwKCkpCisKKyAgICAgICAgd2hpbGUgc3RhcnQgIT0gLTE6CisgICAgICAgICAgICBlbmQgPSBsaW5lLmZpbmQoQ0xPU0VfVEFHLCBzdGFydCkKKyAgICAgICAgICAgIGlmIGVuZCA9PSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBjbG9zZSB0YWcgZm91bmQgZm9yIGFzc2lnbm1lbnQgdGFnIiwgbGluZW5vLCBsaW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lID0gbGluZVtzdGFydCArIGxlbihBU1NJR05fVEFHKTplbmRdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBleHBhbmRlZF9saW5lLmFkZF9hc3NpZ25tZW50KHN0YXJ0LCBlbmQgKyBsZW4oQ0xPU0VfVEFHKSwgbmFtZSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IGxpbmUuZmluZChBU1NJR05fVEFHLCBlbmQpCisKKyAgICAgICAgcmV0dXJuIGV4cGFuZGVkX2xpbmUKKworICAgIGRlZiBleHBhbmRfdGFnKHNlbGYsIGxpbmUsIGxpbmVubyk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEgcHJvY2Vzc2VkIHRhZyBsaW5lLCBvciBOb25lIGlmIHRoZXJlIHdhcyBubyB0YWcKKworICAgICAgICBUaGUgcnVsZXMgZm9yIHRhZ3MgYXJlIHZlcnkgc2ltcGxlOgorICAgICAgICAgICAgLSBObyBuZXN0ZWQgdGFncworICAgICAgICAgICAgLSBUYWdzIHN0YXJ0IHdpdGgge3sgYW5kIGVuZCB3aXRoIH19CisgICAgICAgICAgICAtIEFuIGFzc2lnbiB0YWcsIHt7PSwgY2FuIGFwcGVhciBhbnl3aGVyZSBhbmQgd2lsbAorICAgICAgICAgICAgICBiZSByZXBsYWNlZCB3aXRoIHdoYXQgdGhlIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRvCisgICAgICAgICAgICAtIEFueSBvdGhlciB0YWcgb2NjdXBpZXMgdGhlIHdob2xlIGxpbmUgaXQgaXMgb24KKyAgICAgICAgICAgICAgICAtIGlmIHRoZXJlJ3MgYW55dGhpbmcgZWxzZSBvbiB0aGUgdGFnIGxpbmUsIGl0J3MgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICAtIGlmIGl0IHN0YXJ0cyB3aXRoICdpbnB1dCcsIGl0J3MgYW4gaW5wdXQgdGFnIGFuZAorICAgICAgICAgICAgICAgICAgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHByb21wdGluZyBhbmQgc2V0dGluZyB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAtIGFueXRoaW5nIGVsc2UgaXMgc3RyYWlnaHQgUHl0aG9uCisgICAgICAgICAgICAgICAgLSB0YWdzIGFyZSBpbiBlZmZlY3Qgb25seSB1bnRpbCB0aGUgbmV4dCBibGFuayBsaW5lIG9yIHRhZyBvciAncGFzcycgdGFnCisgICAgICAgICAgICAgICAgLSB3ZSBkb24ndCBoYXZlIGluZGVudGF0aW9uIGluIHRhZ3MsIGJ1dCB3ZSBuZWVkIHNvbWUgd2F5IHRvIGVuZCBhIGJsb2NrCisgICAgICAgICAgICAgICAgICBmb3JjZWZ1bGx5IHdpdGhvdXQgYmxhbmsgbGluZXMgb3Igb3RoZXIgdGFncyAtIHRoYXQncyB0aGUgJ3Bhc3MnIHRhZworICAgICAgICAgICAgICAgIC0gdG9kbzogaW1wbGVtZW50IHBhc3MgdGFnCisgICAgICAgICAgICAgICAgLSBkaXJlY3RvcmllcyBhbmQgZmlsZW5hbWVzIGNhbiBoYXZlIHRhZ3MgYXMgd2VsbCwgYnV0IG9ubHkgYXNzaWdubWVudAorICAgICAgICAgICAgICAgICAgYW5kICdpZicgY29kZSBsaW5lcworICAgICAgICAgICAgICAgIC0gZGlyZWN0b3JpZXMgYW5kIGZpbGVuYW1lcyBhcmUgdGhlIG9ubHkgY2FzZSB3aGVyZSBub3JtYWwgdGFncyBjYW4KKyAgICAgICAgICAgICAgICAgIGNvZXhpc3Qgd2l0aCBub3JtYWwgdGV4dCBvbiB0aGUgc2FtZSAnbGluZScKKyAgICAgICAgIiIiCisgICAgICAgIHN0YXJ0ID0gbGluZS5maW5kKEFTU0lHTl9UQUcpCisgICAgICAgIGlmIHN0YXJ0ICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX2Fzc2lnbm1lbnRfdGFnKHN0YXJ0LCBsaW5lLCBsaW5lbm8pCisKKyAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoT1BFTl9UQUcpCisgICAgICAgIGlmIHN0YXJ0ID09IC0xOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBlbmQgPSBsaW5lLmZpbmQoQ0xPU0VfVEFHLCAwKQorICAgICAgICBpZiBlbmQgPT0gLTE6CisgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gY2xvc2UgdGFnIGZvdW5kIGZvciBvcGVuIHRhZyIsIGxpbmVubywgbGluZSkKKworICAgICAgICB0YWcgPSBsaW5lW3N0YXJ0ICsgbGVuKE9QRU5fVEFHKTplbmRdLnN0cmlwKCkKKworICAgICAgICBpZiBub3QgdGFnLmxzdHJpcCgpLnN0YXJ0c3dpdGgoSU5QVVRfVEFHKToKKyAgICAgICAgICAgIHJldHVybiBDb2RlTGluZSh0YWcpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX2lucHV0X3RhZyh0YWcsIGxpbmVubykKKworICAgIGRlZiBhcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBTaW1wbHkgYXBwZW5kIGZpbGVuYW1lIHRvIHRyYW5zbGF0ZWRfZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnRyYW5zbGF0ZWRfZmlsZW5hbWUsIGZpbGVuYW1lKQorCisgICAgZGVmIGdldF9zdWJzdGl0dXRlZF9maWxlX29yX2Rpcl9uYW1lKHNlbGYsIGZpcnN0X2xpbmUsIHRhZyk6CisgICAgICAgICIiIgorICAgICAgICBJZiBmaWxlIG9yIGRpciBuYW1lcyBjb250YWluIG5hbWUgc3Vic3RpdHV0aW9ucywgcmV0dXJuIHRoZSBuYW1lCisgICAgICAgIHRvIHN1YnN0aXR1dGUuICBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IHRoZSBmaWxlIG9yIGRpcm5hbWUgYW5kCisgICAgICAgIGRvZXNuJ3QgaW5jbHVkZSB0aGUgcGF0aC4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVuYW1lID0gZmlyc3RfbGluZS5maW5kKHRhZykKKyAgICAgICAgaWYgZmlsZW5hbWUgIT0gLTE6CisgICAgICAgICAgICBmaWxlbmFtZSArPSBsZW4odGFnKQorICAgICAgICBzdWJzdGl0dXRlZF9maWxlbmFtZSA9IGZpcnN0X2xpbmVbZmlsZW5hbWU6XS5zdHJpcCgpCisgICAgICAgIHRoaXMgPSBzdWJzdGl0dXRlZF9maWxlbmFtZS5maW5kKCIgdGhpcyIpCisgICAgICAgIGlmIHRoaXMgIT0gLTE6CisgICAgICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgc3Vic3RpdHV0ZWRfZmlsZW5hbWUgPSBzdWJzdGl0dXRlZF9maWxlbmFtZVs6dGhpcyArIDFdICsgdGFpbAorICAgICAgICAgICAgaWYgdGFnID09IERJUk5BTUVfVEFHOiAjIGdldCByaWQgb2YgLm5vaW5zdGFsbCBpbiBkaXJuYW1lCisgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWRfZmlsZW5hbWUgPSBzdWJzdGl0dXRlZF9maWxlbmFtZS5zcGxpdCgnLicpWzBdCisKKyAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVkX2ZpbGVuYW1lCisKKyAgICBkZWYgZ2V0X3N1YnN0aXR1dGVkX2ZpbGVuYW1lKHNlbGYsIGZpcnN0X2xpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgYSBmaWxlbmFtZSBjb250YWlucyBhIG5hbWUgc3Vic3RpdHV0aW9uLCByZXR1cm4gdGhlIG5hbWUgdG8KKyAgICAgICAgc3Vic3RpdHV0ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGp1c3QgdGhlIGZpbGVuYW1lIGFuZCBkb2Vzbid0CisgICAgICAgIGluY2x1ZGUgdGhlIHBhdGguCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZmlsZV9vcl9kaXJfbmFtZShmaXJzdF9saW5lLCBGSUxFTkFNRV9UQUcpCisKKyAgICBkZWYgZ2V0X3N1YnN0aXR1dGVkX2Rpcm5hbWUoc2VsZiwgZmlyc3RfbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBJZiBhIGRpcm5hbWUgY29udGFpbnMgYSBuYW1lIHN1YnN0aXR1dGlvbiwgcmV0dXJuIHRoZSBuYW1lIHRvCisgICAgICAgIHN1YnN0aXR1dGUuICBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IHRoZSBkaXJuYW1lIGFuZCBkb2Vzbid0CisgICAgICAgIGluY2x1ZGUgdGhlIHBhdGguCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZmlsZV9vcl9kaXJfbmFtZShmaXJzdF9saW5lLCBESVJOQU1FX1RBRykKKworICAgIGRlZiBzdWJzdGl0dXRlX2ZpbGVuYW1lKHNlbGYsIGZpcnN0X2xpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgZmlsZW5hbWUgaW4gZmlyc3RfbGluZSBhbmQgYXBwZW5kIGl0IHRvIHRyYW5zbGF0ZWRfZmlsZW5hbWUuCisgICAgICAgICIiIgorICAgICAgICBzdWJzdGl0dXRlZF9maWxlbmFtZSA9IHNlbGYuZ2V0X3N1YnN0aXR1dGVkX2ZpbGVuYW1lKGZpcnN0X2xpbmUpCisgICAgICAgIHNlbGYuYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUoc3Vic3RpdHV0ZWRfZmlsZW5hbWUpOworCisgICAgZGVmIHN1YnN0aXR1dGVfZGlybmFtZShzZWxmLCBmaXJzdF9saW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIGRpcm5hbWUgaW4gZmlyc3RfbGluZSBhbmQgYXBwZW5kIGl0IHRvIHRyYW5zbGF0ZWRfZmlsZW5hbWUuCisgICAgICAgICIiIgorICAgICAgICBzdWJzdGl0dXRlZF9kaXJuYW1lID0gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICBzZWxmLmFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHN1YnN0aXR1dGVkX2Rpcm5hbWUpOworCisgICAgZGVmIGlzX2ZpbGVuYW1lX3N1YnN0aXR1dGlvbihzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIERvIHdlIGhhdmUgYSBmaWxlbmFtZSBzdWJ1c3RpdGlvbj8KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxpbmUuZmluZChGSUxFTkFNRV9UQUcpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfZGlybmFtZV9zdWJzdGl0dXRpb24oc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBEbyB3ZSBoYXZlIGEgZGlybmFtZSBzdWJ1c3RpdGlvbj8KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxpbmUuZmluZChESVJOQU1FX1RBRykgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB0cmFuc2xhdGVfZGlybmFtZShzZWxmLCBmaXJzdF9saW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEp1c3Qgc2F2ZSB0aGUgZmlyc3RfbGluZSBtYXBwZWQgYnkgZmlsZW5hbWUuICBUaGUgbGF0ZXIgcGFzcworICAgICAgICB0aHJvdWdoIHRoZSBkaXJlY3RvcmllcyB3aWxsIGxvb2sgZm9yIGEgZGlybmFtZS5ub2luc3RhbGwKKyAgICAgICAgbWF0Y2ggYW5kIGdyYWIgdGhlIHN1YnN0aXR1dGlvbiBsaW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZGlybmFtZV9zdWJzdGl0dXRpb25zW3NlbGYuZmlsZW5hbWVdID0gZmlyc3RfbGluZQorCisgICAgZGVmIHRyYW5zbGF0ZV9kaXJuYW1lc19pbl9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJhbnNsYXRlIGRpcm5hbWVzIGJlbG93IHRoaXMgZmlsZSBvciBkaXIsIG5vdCBpbmNsdWRpbmcgdGFpbC4KKyAgICAgICAgZGlybmFtZV9zdWJzdGl0aXRpb25zIGlzIGtleWVkIG9uIGFjdHVhbCB1bnRyYW5zbGF0ZWQgZmlsZW5hbWVzLgorICAgICAgICB0cmFuc2xhdGVkX3BhdGggY29udGFpbnMgdGhlIHN1YnNpdGl0dXRpb25zIGZvciBlYWNoIGVsZW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByZW1haW5kZXIgPSBwYXRoW2xlbihzZWxmLmZpbGViYXNlKSsxOl0KKyAgICAgICAgdHJhbnNsYXRlZF9wYXRoID0gdW50cmFuc2xhdGVkX3BhdGggPSBzZWxmLmZpbGViYXNlCisKKyAgICAgICAgdW50cmFuc2xhdGVkX2RpcnMgPSByZW1haW5kZXIuc3BsaXQob3Muc2VwKQorCisgICAgICAgIGZvciBkaXIgaW4gdW50cmFuc2xhdGVkX2RpcnM6CisgICAgICAgICAgICBrZXkgPSBvcy5wYXRoLmpvaW4odW50cmFuc2xhdGVkX3BhdGgsIGRpciArICcubm9pbnN0YWxsJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lID0gZGlybmFtZV9zdWJzdGl0dXRpb25zW2tleV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhbnNsYXRlZF9wYXRoLCBkaXIpCisgICAgICAgICAgICAgICAgdW50cmFuc2xhdGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odW50cmFuc2xhdGVkX3BhdGgsIGRpcikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3Vic3RpdHV0ZWRfZGlyID0gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICAgICAgdHJhbnNsYXRlZF9wYXRoID0gb3MucGF0aC5qb2luKHRyYW5zbGF0ZWRfcGF0aCwgc3Vic3RpdHV0ZWRfZGlyKQorICAgICAgICAgICAgdW50cmFuc2xhdGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odW50cmFuc2xhdGVkX3BhdGgsIGRpcikKKworICAgICAgICByZXR1cm4gdHJhbnNsYXRlZF9wYXRoCisKKyAgICBkZWYgdHJhbnNsYXRlX2ZpbGVfb3JfZGlyX25hbWUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBPcmlnaW5hbGx5IHdlIHdlcmUgYWxsb3dlZCB0byB1c2Ugb3Blbi9jbG9zZS9hc3NpZ24gdGFncyBhbmQgcHl0aG9uCisgICAgICAgIGNvZGUgaW4gdGhlIGZpbGVuYW1lLCB3aGljaCBmaXQgaW4gbmljZWx5IHdpdGggdGhlIHdheSB3ZQorICAgICAgICBwcm9jZXNzZWQgdGhlIHRlbXBsYXRlcyBhbmQgZ2VuZXJhdGVkIGNvZGUuICBOb3cgdGhhdCB3ZSBjYW4ndAorICAgICAgICBkbyB0aGF0LCB3ZSBtYWtlIHRob3NlIHRhZ3MgcHJvcGVyIGZpbGUgY29udGVudHMgYW5kIGhhdmUgdGhpcworICAgICAgICBwYXNzIHN1YnN0aXR1dGUgdGhlIG5pY2UgYnV0IG5vbi1mdW5jdGlvbmFsIG5hbWVzIHdpdGggdGhvc2UKKyAgICAgICAgJ3N0cmFuZ2UnIG9uZXMsIGFuZCB0aGVuIHByb2NlZWQgYXMgdXN1YWwuCisKKyAgICAgICAgU28sIGlmIGZpbGVzIG9yIG1hdGNoaW5nIGRpcjwubm9pbnN0YWxsPiBmaWxlcyBjb250YWluCisgICAgICAgIGZpbGVuYW1lIHN1YnN0aXR1dGlvbnMsIHRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyB0aGVtIGludG8gdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgJ3N0cmFuZ2UnIG5hbWVzLCB3aGljaCBmdXR1cmUgcGFzc2VzIHdpbGwgZXhwYW5kCisgICAgICAgIGFzIHRoZXkgYWx3YXlzIGhhdmUuICBUaGUgcmVzdWx0aW5nIHBhdGhuYW1lIGlzIGtlcHQgaW4gdGhlCisgICAgICAgIGZpbGUgb3IgZGlyZWN0b3J5J3MgdHJhbnNsYXRlZF9maWxlbmFtZS4gIEFub3RoZXIgd2F5IHRvIHRoaW5rCisgICAgICAgIGFib3V0IGl0IGlzIHRoYXQgc2VsZi5maWxlbmFtZSBpcyB0aGUgaW5wdXQgZmlsZW5hbWUsIGFuZAorICAgICAgICB0cmFuc2xhdGVkX2ZpbGVuYW1lIGlzIHRoZSBvdXRwdXQgZmlsZW5hbWUgYmVmb3JlIGV4cGFuc2lvbi4KKyAgICAgICAgIiIiCisgICAgICAgICMgcmVtb3ZlIGxlYWYgZmlsZSBvciBkaXJuYW1lCisgICAgICAgIGhlYWQsIHRhaWwgPSBvcy5wYXRoLnNwbGl0KHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHRyYW5zbGF0ZWRfcGF0aCA9IHNlbGYudHJhbnNsYXRlX2Rpcm5hbWVzX2luX3BhdGgoaGVhZCkKKyAgICAgICAgc2VsZi50cmFuc2xhdGVkX2ZpbGVuYW1lID0gdHJhbnNsYXRlZF9wYXRoCisKKyAgICAgICAgIyBUaGlzIGlzIGEgZGlybmFtZSAtIGRvZXMgaXQgaGF2ZSBhIG1hdGNoaW5nIC5ub2luc3RhbGwgd2l0aAorICAgICAgICAjIGEgc3Vic3RpdHV0aW9uPyAgSWYgc28sIGFwcGx5IHRoZSBkaXJuYW1lIHN1YnNpdGl0dXRpb24uCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLmZpbGVuYW1lKToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuZmlsZW5hbWUgKyAiLm5vaW5zdGFsbCIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lID0gZGlybmFtZV9zdWJzdGl0dXRpb25zW2tleV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHRhaWwpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLnN1YnN0aXR1dGVfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSkKKyAgICAgICAgZmlyc3RfbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIFRoaXMgaXMgYSBub3JtYWwgZmlsZW5hbWUgbm90IG5lZWRpbmcgdHJhbnNsYXRpb24sIGp1c3QgdXNlCisgICAgICAgICMgaXQgYXMtaXMuCisgICAgICAgIGlmIG5vdCBmaXJzdF9saW5lIG9yIG5vdCBmaXJzdF9saW5lLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUodGFpbCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgSWYgd2UgaGF2ZSBhIGZpbGVuYW1lIHN1YnN0aXR1dGlvbiAoZmlyc3QgbGluZSBpbiB0aGUgZmlsZQorICAgICAgICAjIGlzIGEgRklMRU5BTUVfVEFHIGxpbmUpIGRvIHRoZSBzdWJzdGl0dXRpb24gbm93LiAgSWYgd2UgaGF2ZQorICAgICAgICAjIGEgZGlybmFtZSBzdWJzdGl0dXRpb24gKERJUk5BTUVfVEFHIGluIGRpcm5hbWUubm9pbnN0YWxsCisgICAgICAgICMgbWV0YS1maWxlKSwgaGFzaCBpdCBzbyB3ZSBjYW4gYXBwbHkgaXQgd2hlbiB3ZSBzZWUgdGhlCisgICAgICAgICMgbWF0Y2hpbmcgZGlybmFtZSBsYXRlci4gIE90aGVyd2lzZSB3ZSBoYXZlIGEgcmVndWxhcgorICAgICAgICAjIGZpbGVuYW1lLCBqdXN0IHVzZSBpdCBhcy1pcy4KKyAgICAgICAgaWYgc2VsZi5pc19maWxlbmFtZV9zdWJzdGl0dXRpb24oZmlyc3RfbGluZSk6CisgICAgICAgICAgICBzZWxmLnN1YnN0aXR1dGVfZmlsZW5hbWUoZmlyc3RfbGluZSkKKyAgICAgICAgZWxpZiBzZWxmLmlzX2Rpcm5hbWVfc3Vic3RpdHV0aW9uKGZpcnN0X2xpbmUpOgorICAgICAgICAgICAgc2VsZi50cmFuc2xhdGVfZGlybmFtZShmaXJzdF9saW5lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZSh0YWlsKQorCisgICAgZGVmIGV4cGFuZF9maWxlX29yX2Rpcl9uYW1lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhwYW5kIGZpbGUgb3IgZGlyIG5hbWVzIGludG8gY29kZWxpbmUuICBEaXJuYW1lcyBhbmQKKyAgICAgICAgZmlsZW5hbWVzIGNhbiBvbmx5IGhhdmUgYXNzaWdubWVudHMgb3IgaWYgc3RhdGVtZW50cy4gIEZpcnN0CisgICAgICAgIHRyYW5zbGF0ZSBpZiBzdGF0ZW1lbnRzIGludG8gQ29kZUxpbmUgKyAoZGlybmFtZSBvciBmaWxlbmFtZQorICAgICAgICBjcmVhdGlvbikuCisgICAgICAgICIiIgorICAgICAgICBsaW5lbm8gPSAwCisKKyAgICAgICAgbGluZSA9IHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZVtsZW4oc2VsZi5maWxlYmFzZSk6XQorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzE6XQorICAgICAgICBvcGVudGFnX3N0YXJ0ID0gLTEKKworICAgICAgICBzdGFydCA9IGxpbmUuZmluZChPUEVOX1RBRykKKyAgICAgICAgd2hpbGUgc3RhcnQgIT0gLTE6CisgICAgICAgICAgICBpZiBub3QgbGluZVtzdGFydDpdLnN0YXJ0c3dpdGgoQVNTSUdOX1RBRyk6CisgICAgICAgICAgICAgICAgb3BlbnRhZ19zdGFydCA9IHN0YXJ0CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHN0YXJ0ICs9IGxlbihBU1NJR05fVEFHKQorICAgICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoT1BFTl9UQUcsIHN0YXJ0KQorCisgICAgICAgIGlmIG9wZW50YWdfc3RhcnQgIT0gLTE6CisgICAgICAgICAgICBlbmQgPSBsaW5lLmZpbmQoQ0xPU0VfVEFHLCBvcGVudGFnX3N0YXJ0KQorICAgICAgICAgICAgaWYgZW5kID09IC0xOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGNsb3NlIHRhZyBmb3VuZCBmb3Igb3BlbiB0YWciLCBsaW5lbm8sIGxpbmUpCisgICAgICAgICAgICAjIHdlIGhhdmUgYSB7eyB0YWcgaS5lLiBjb2RlCisgICAgICAgICAgICB0YWcgPSBsaW5lW29wZW50YWdfc3RhcnQgKyBsZW4oT1BFTl9UQUcpOmVuZF0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHRhZy5sc3RyaXAoKS5zdGFydHN3aXRoKElGX1RBRyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiT25seSAnaWYnIHRhZ3MgYXJlIGFsbG93ZWQgaW4gZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5leHBhbmRlZF9saW5lcy5hcHBlbmQoQ29kZUxpbmUodGFnKSkKKworICAgICAgICAgICAgIyBldmVyeXRoaW5nIGFmdGVyIH19IGlzIHRoZSBhY3R1YWwgZmlsZW5hbWUgKHBvc3NpYmx5IHdpdGggYXNzaWdubWVudHMpCisgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBwYXRobmFtZQorICAgICAgICAgICAgbGluZSA9IGxpbmVbOm9wZW50YWdfc3RhcnRdICsgbGluZVtlbmQgKyBsZW4oQ0xPU0VfVEFHKTpdLnN0cmlwKCkKKworICAgICAgICBhc3NpZ25fc3RhcnQgPSBsaW5lLmZpbmQoQVNTSUdOX1RBRykKKyAgICAgICAgaWYgYXNzaWduX3N0YXJ0ICE9IC0xOgorICAgICAgICAgICAgYXNzaWdubWVudF90YWcgPSBzZWxmLmV4cGFuZF9hc3NpZ25tZW50X3RhZyhhc3NpZ25fc3RhcnQsIGxpbmUsIGxpbmVubykKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgU3Vic3RyYXRlRmlsZSk6CisgICAgICAgICAgICAgICAgYXNzaWdubWVudF90YWcuaXNfZmlsZW5hbWUgPSBUcnVlCisgICAgICAgICAgICAgICAgYXNzaWdubWVudF90YWcub3V0X2ZpbGViYXNlID0gc2VsZi5vdXRfZmlsZWJhc2UKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBTdWJzdHJhdGVEaXIpOgorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRfdGFnLmlzX2Rpcm5hbWUgPSBUcnVlCisgICAgICAgICAgICAgICAgYXNzaWdubWVudF90YWcub3V0X2ZpbGViYXNlID0gc2VsZi5vdXRfZmlsZWJhc2UKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMuYXBwZW5kKGFzc2lnbm1lbnRfdGFnKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbm9ybWFsX2xpbmUgPSBOb3JtYWxMaW5lKGxpbmUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgU3Vic3RyYXRlRmlsZSk6CisgICAgICAgICAgICBub3JtYWxfbGluZS5pc19maWxlbmFtZSA9IFRydWUKKyAgICAgICAgICAgIG5vcm1hbF9saW5lLm91dF9maWxlYmFzZSA9IHNlbGYub3V0X2ZpbGViYXNlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBTdWJzdHJhdGVEaXIpOgorICAgICAgICAgICAgbm9ybWFsX2xpbmUuaXNfZGlybmFtZSA9IFRydWUKKyAgICAgICAgICAgIG5vcm1hbF9saW5lLm91dF9maWxlYmFzZSA9IHNlbGYub3V0X2ZpbGViYXNlCisgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMuYXBwZW5kKG5vcm1hbF9saW5lKQorCisgICAgZGVmIGV4cGFuZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGFuZCB0aGUgZmlsZSBvciBkaXIgbmFtZSBmaXJzdCwgZXZlbnR1YWxseSB0aGlzIGVuZHMgdXAKKyAgICAgICAgY3JlYXRpbmcgdGhlIGZpbGUgb3IgZGlyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50cmFuc2xhdGVfZmlsZV9vcl9kaXJfbmFtZSgpCisgICAgICAgIHNlbGYuZXhwYW5kX2ZpbGVfb3JfZGlyX25hbWUoKQorCisKK2NsYXNzIFN1YnN0cmF0ZUZpbGUoU3Vic3RyYXRlQmFzZSk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBib3RoIGV4cGFuZGVkIGFuZCB1bmV4cGFuZGVkIHN1YnN0cmF0ZSBmaWxlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpOgorICAgICAgICBTdWJzdHJhdGVCYXNlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaWxlYmFzZSwgb3V0X2ZpbGViYXNlKQorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmF3X2xpbmVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHNlbGYucmF3X2xpbmVzID0gZi5yZWFkbGluZXMoKQorCisgICAgZGVmIGV4cGFuZChzZWxmKToKKyAgICAgICAgIiIiRXhwYW5kIHRoZSBjb250ZW50cyBvZiBhbGwgdGVtcGxhdGUgdGFncyBpbiB0aGUgZmlsZS4iIiIKKyAgICAgICAgU3Vic3RyYXRlQmFzZS5leHBhbmQoc2VsZikKKyAgICAgICAgc2VsZi5yZWFkKCkKKworICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShzZWxmLnJhd19saW5lcyk6CisgICAgICAgICAgICAjIG9ubHkgZmlyc3QgbGluZSBjYW4gYmUgYSBmaWxlbmFtZSBzdWJzdGl0aXRpb24KKyAgICAgICAgICAgIGlmIGxpbmVubyA9PSAwIGFuZCBsaW5lLnN0YXJ0c3dpdGgoIiMiKSBhbmQgRklMRU5BTUVfVEFHIGluIGxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUgIyBza2lwIGl0IC0gd2UndmUgYWxyZWFkeSBleHBhbmRlZCBpdAorICAgICAgICAgICAgZXhwYW5kZWRfbGluZSA9IHNlbGYuZXhwYW5kX3RhZyhsaW5lLCBsaW5lbm8gKyAxKSAjIGh1bWFucyBub3QgMC1iYXNlZAorICAgICAgICAgICAgaWYgbm90IGV4cGFuZGVkX2xpbmU6CisgICAgICAgICAgICAgICAgZXhwYW5kZWRfbGluZSA9IE5vcm1hbExpbmUobGluZS5yc3RyaXAoKSkKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kZWRfbGluZXMuYXBwZW5kKGV4cGFuZGVkX2xpbmUpCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgIiIiR2VuZXJhdGUgdGhlIGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIEJTUC4iIiIKKyAgICAgICAgYmFzZV9pbmRlbnQgPSAwCisKKyAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudCA9IGJhc2VfaW5kZW50CisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRlZF9saW5lczoKKyAgICAgICAgICAgIGdlbmxpbmUgPSBsaW5lLmdlbihjb250ZXh0KQorICAgICAgICAgICAgaWYgbm90IGdlbmxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgICAgICBsaW5lLmdlbmVyYXRlZF9saW5lID0gZ2VubGluZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBnZW5saW5lLnN0YXJ0c3dpdGgoT1BFTl9TVEFSVCk6CisgICAgICAgICAgICAgICAgaWYgaW5kZW50ID09IDE6CisgICAgICAgICAgICAgICAgICAgIGJhc2VfaW5kZW50ID0gMQorICAgICAgICAgICAgaWYgaW5kZW50OgorICAgICAgICAgICAgICAgIGlmIGdlbmxpbmUgPT0gQkxBTktMSU5FX1NUUiBvciAobm90IGdlbmxpbmUuc3RhcnRzd2l0aChOT1JNQUxfU1RBUlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGdlbmxpbmUuc3RhcnRzd2l0aChPUEVOX1NUQVJUKSk6CisgICAgICAgICAgICAgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQgPSBiYXNlX2luZGVudAorICAgICAgICAgICAgaWYgZ2VubGluZS5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgICAgIG5ld19pbmRlbnQgPSBiYXNlX2luZGVudCArIDEKKyAgICAgICAgICAgIGxpbmUuZ2VuZXJhdGVkX2xpbmUgPSAoaW5kZW50ICogSU5ERU5UX1NUUikgKyBnZW5saW5lCisgICAgICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50CisKKworY2xhc3MgU3Vic3RyYXRlRGlyKFN1YnN0cmF0ZUJhc2UpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3IgYm90aCBleHBhbmRlZCBhbmQgdW5leHBhbmRlZCBzdWJzdHJhdGUgZGlycy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpOgorICAgICAgICBTdWJzdHJhdGVCYXNlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBmaWxlYmFzZSwgb3V0X2ZpbGViYXNlKQorCisgICAgZGVmIGV4cGFuZChzZWxmKToKKyAgICAgICAgU3Vic3RyYXRlQmFzZS5leHBhbmQoc2VsZikKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgY29kZSB0aGF0IGdlbmVyYXRlcyB0aGUgQlNQLiIiIgorICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50ID0gMAorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZGVkX2xpbmVzOgorICAgICAgICAgICAgZ2VubGluZSA9IGxpbmUuZ2VuKGNvbnRleHQpCisgICAgICAgICAgICBpZiBub3QgZ2VubGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZ2VubGluZS5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgICAgIG5ld19pbmRlbnQgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld19pbmRlbnQgPSAwCisgICAgICAgICAgICBsaW5lLmdlbmVyYXRlZF9saW5lID0gKGluZGVudCAqIElOREVOVF9TVFIpICsgZ2VubGluZQorICAgICAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudAorCisKK2RlZiBleHBhbmRfdGFyZ2V0KHRhcmdldCwgYWxsX2ZpbGVzLCBvdXRfZmlsZWJhc2UpOgorICAgICIiIgorICAgIEV4cGFuZCB0aGUgY29udGVudHMgb2YgYWxsIHRlbXBsYXRlIHRhZ3MgaW4gdGhlIHRhcmdldC4gIFRoaXMKKyAgICBtZWFucyByZW1vdmluZyB0YWdzIGFuZCBjYXRlZ29yaXppbmcgb3IgY3JlYXRpbmcgbGluZXMgc28gdGhhdAorICAgIGZ1dHVyZSBwYXNzZXMgY2FuIHByb2Nlc3MgYW5kIHByZXNlbnQgaW5wdXQgbGluZXMgYW5kIGdlbmVyYXRlIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgbGluZXMgb2YgdGhlIFB5dGhvbiBwcm9ncmFtIHRoYXQgd2lsbCBiZSBleGVjJ2VkIHRvCisgICAgYWN0dWFsbHkgcHJvZHVjZSB0aGUgZmluYWwgQlNQLiAgJ2FsbF9maWxlcycgaW5jbHVkZXMgZGlyZWN0b3JpZXMuCisgICAgIiIiCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodGFyZ2V0KToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCJ+Iikgb3IgZmlsZS5lbmRzd2l0aCgiIyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisgICAgICAgICAgICBzZmlsZSA9IFN1YnN0cmF0ZUZpbGUoZiwgdGFyZ2V0LCBvdXRfZmlsZWJhc2UpCisgICAgICAgICAgICBzZmlsZS5leHBhbmQoKQorICAgICAgICAgICAgYWxsX2ZpbGVzLmFwcGVuZChzZmlsZSkKKworICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICBkID0gb3MucGF0aC5qb2luKHJvb3QsIGRpcikKKyAgICAgICAgICAgIHNkaXIgPSBTdWJzdHJhdGVEaXIoZCwgdGFyZ2V0LCBvdXRfZmlsZWJhc2UpCisgICAgICAgICAgICBzZGlyLmV4cGFuZCgpCisgICAgICAgICAgICBhbGxfZmlsZXMuYXBwZW5kKHNkaXIpCisKKworZGVmIGdlbl9wcm9ncmFtX21hY2hpbmVfbGluZXMobWFjaGluZSwgcHJvZ3JhbV9saW5lcyk6CisgICAgIiIiCisgICAgVXNlIHRoZSBpbnB1dCB2YWx1ZXMgd2UgZ290IGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAiIiIKKyAgICBsaW5lID0gIm1hY2hpbmUgPSBcIiIgKyBtYWNoaW5lICsgIlwiIgorICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICBsaW5lID0gImxheWVyX25hbWUgPSBcIiIgKyBtYWNoaW5lICsgIlwiIgorICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKGxpbmUpCisKKworZGVmIHNvcnRfaW5wdXRsaW5lcyhpbnB1dF9saW5lcyk6CisgICAgIiIiU29ydCBpbnB1dCBsaW5lcyBhY2NvcmRpbmcgdG8gcHJpb3JpdHkgKHBvc2l0aW9uKS4iIiIKKyAgICBpbnB1dF9saW5lcy5zb3J0KGtleSA9IGxhbWJkYSBsOiBsLnByaW8pCisKKworZGVmIGZpbmRfcGFyZW50X2RlcGVuZGVuY3kobGluZXMsIGRlcGVuZHNfb24pOgorICAgIGZvciBpLCBsaW5lIGluIGxpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIENvZGVMaW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxpbmUucHJvcHNbIm5hbWUiXSA9PSBkZXBlbmRzX29uOgorICAgICAgICAgICAgcmV0dXJuIGkKKworICAgIHJldHVybiAtMQorCisKK2RlZiBwcm9jZXNzX2lucHV0bGluZV9kZXBlbmRlbmNpZXMoaW5wdXRfbGluZXMsIGFsbF9pbnB1dGxpbmVzKToKKyAgICAiIiJJZiBhbnkgaW5wdXQgbGluZXMgZGVwZW5kIG9uIG90aGVycywgcHV0IHRoZSBvdGhlcnMgZmlyc3QuIiIiCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgZ3JvdXBfaW5wdXRsaW5lcyA9IFtdCisgICAgICAgICAgICBwcm9jZXNzX2lucHV0bGluZV9kZXBlbmRlbmNpZXMobGluZS5ncm91cCwgZ3JvdXBfaW5wdXRsaW5lcykKKyAgICAgICAgICAgIGxpbmUuZ3JvdXAgPSBncm91cF9pbnB1dGxpbmVzCisgICAgICAgICAgICBhbGxfaW5wdXRsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBDb2RlTGluZSkgb3IgaXNpbnN0YW5jZShsaW5lLCBOb3JtYWxMaW5lKToKKyAgICAgICAgICAgIGFsbF9pbnB1dGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBlbmRzX29uID0gbGluZS5wcm9wc1siZGVwZW5kcy1vbiJdCisgICAgICAgICAgICBkZXBlbmRzX2NvZGVsaW5lID0gImlmICIgKyBsaW5lLnByb3BzWyJkZXBlbmRzLW9uIl0gKyAiID09IFwiIiArIGxpbmUucHJvcHNbImRlcGVuZHMtb24tdmFsIl0gKyAiXCI6IgorICAgICAgICAgICAgYWxsX2lucHV0bGluZXMuYXBwZW5kKENvZGVMaW5lKGRlcGVuZHNfY29kZWxpbmUpKQorICAgICAgICAgICAgYWxsX2lucHV0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGFsbF9pbnB1dGxpbmVzLmFwcGVuZChsaW5lKQorCisKK2RlZiBjb25kaXRpb25hbF9maWxlbmFtZShmaWxlbmFtZSk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGZpbGVuYW1lIGl0c2VsZiBjb250YWlucyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gIElmCisgICAgc28sIHJldHVybiBhIGNvZGVsaW5lIGZvciBpdC4KKyAgICAiIiIKKyAgICBvcGVudGFnX3N0YXJ0ID0gZmlsZW5hbWUuZmluZChPUEVOX1RBRykKKworICAgIGlmIG9wZW50YWdfc3RhcnQgIT0gLTE6CisgICAgICAgIGlmIGZpbGVuYW1lW29wZW50YWdfc3RhcnQ6XS5zdGFydHN3aXRoKEFTU0lHTl9UQUcpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZW5kID0gZmlsZW5hbWUuZmluZChDTE9TRV9UQUcsIG9wZW50YWdfc3RhcnQpCisgICAgICAgIGlmIGVuZCA9PSAtMToKKyAgICAgICAgICAgIHByaW50ICJObyBjbG9zZSB0YWcgZm91bmQgZm9yIG9wZW4gdGFnIGluIGZpbGVuYW1lICVzIiAlIGZpbGVuYW1lCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICMgd2UgaGF2ZSBhIHt7IHRhZyBpLmUuIGNvZGUKKyAgICAgICAgdGFnID0gZmlsZW5hbWVbb3BlbnRhZ19zdGFydCArIGxlbihPUEVOX1RBRyk6ZW5kXS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCB0YWcubHN0cmlwKCkuc3RhcnRzd2l0aChJRl9UQUcpOgorICAgICAgICAgICAgcHJpbnQgIk9ubHkgJ2lmJyB0YWdzIGFyZSBhbGxvd2VkIGluIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWVzLCBmaWxlbmFtZTogJXMiICUgZmlsZW5hbWUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgcmV0dXJuIENvZGVMaW5lKHRhZykKKworICAgIHJldHVybiBOb25lCisKKworY2xhc3MgSW5wdXRMaW5lR3JvdXAoSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBJbnB1dExpbmUgdGhhdCBkb2VzIG5vdGhpbmcgYnV0IGdyb3VwIG90aGVyIGlucHV0IGxpbmVzCisgICAgY29ycmVzcG9uZGluZyB0byBhbGwgdGhlIGlucHV0IGxpbmVzIGluIGEgU3Vic3RyYXRlRmlsZSBzbyB0aGV5CisgICAgY2FuIGJlIGdlbmVyYXRlZCBhcyBhIGdyb3VwLiAgcHJpbyBpcyB0aGUgb25seSBwcm9wZXJ0eSB1c2VkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlbGluZSk6CisgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCB7fSwgIiIsIDApCisgICAgICAgIHNlbGYuZ3JvdXAgPSBbXQorICAgICAgICBzZWxmLnByaW8gPSBzeXMubWF4aW50CisgICAgICAgIHNlbGYuZ3JvdXAuYXBwZW5kKGNvZGVsaW5lKQorCisgICAgZGVmIGFwcGVuZChzZWxmLCBsaW5lKToKKyAgICAgICAgc2VsZi5ncm91cC5hcHBlbmQobGluZSkKKyAgICAgICAgaWYgbGluZS5wcmlvIDwgc2VsZi5wcmlvOgorICAgICAgICAgICAgc2VsZi5wcmlvID0gbGluZS5wcmlvCisKKyAgICBkZWYgbGVuKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ3JvdXApCisKKworZGVmIGdhdGhlcl9pbnB1dGxpbmVzKGZpbGVzKToKKyAgICAiIiIKKyAgICBHYXRoZXIgYWxsIHRoZSBJbnB1dExpbmVzIC0gd2Ugd2FudCB0byBnZW5lcmF0ZSB0aGVtIGZpcnN0LgorICAgICIiIgorICAgIGFsbF9pbnB1dGxpbmVzID0gW10KKyAgICBpbnB1dF9saW5lcyA9IFtdCisKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBTdWJzdHJhdGVGaWxlKToKKyAgICAgICAgICAgIGdyb3VwID0gTm9uZQorICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGUudHJhbnNsYXRlZF9maWxlbmFtZSkKKworICAgICAgICAgICAgY29kZWxpbmUgPSBjb25kaXRpb25hbF9maWxlbmFtZShiYXNlbmFtZSkKKyAgICAgICAgICAgIGlmIGNvZGVsaW5lOgorICAgICAgICAgICAgICAgIGdyb3VwID0gSW5wdXRMaW5lR3JvdXAoY29kZWxpbmUpCisKKyAgICAgICAgICAgIGhhdmVfY29uZGl0aW9uID0gRmFsc2UKKyAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbGUuZXhwYW5kZWRfbGluZXM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBDb2RlTGluZSk6CisgICAgICAgICAgICAgICAgICAgIGhhdmVfY29uZGl0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUgPSBsaW5lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgICAgICAgICBpZiBncm91cDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbmRpdGlvbl90b193cml0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUucHJpbyA9IGxpbmUucHJpbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZS5kaXNjYXJkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZChjb25kaXRpb25fdG9fd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb25kaXRpb25fdG9fd3JpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlLnByaW8gPSBsaW5lLnByaW8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUuZGlzY2FyZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9saW5lcy5hcHBlbmQoY29uZGl0aW9uX3RvX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbmRpdGlvbl90b193cml0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgaGF2ZV9jb25kaXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZS5saW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5kaXNjYXJkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBoYXZlX2NvbmRpdGlvbiA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIGdyb3VwIGFuZCBncm91cC5sZW4oKSA+IDE6CisgICAgICAgICAgICAgICAgaW5wdXRfbGluZXMuYXBwZW5kKGdyb3VwKQorCisgICAgc29ydF9pbnB1dGxpbmVzKGlucHV0X2xpbmVzKQorICAgIHByb2Nlc3NfaW5wdXRsaW5lX2RlcGVuZGVuY2llcyhpbnB1dF9saW5lcywgYWxsX2lucHV0bGluZXMpCisKKyAgICByZXR1cm4gYWxsX2lucHV0bGluZXMKKworCitkZWYgcnVuX3Byb2dyYW1fbGluZXMobGluZWxpc3QsIGNvZGVkdW1wKToKKyAgICAiIiIKKyAgICBGb3IgYSBzaW5nbGUgZmlsZSwgcHJpbnQgYWxsIHRoZSBweXRob24gY29kZSBpbnRvIGEgYnVmIGFuZCBleGVjdXRlIGl0LgorICAgICIiIgorICAgIGJ1ZiA9ICJcbiIuam9pbihsaW5lbGlzdCkKKworICAgIGlmIGNvZGVkdW1wOgorICAgICAgICBvZiA9IG9wZW4oImJzcGdlbi5vdXQiLCAidyIpCisgICAgICAgIG9mLndyaXRlKGJ1ZikKKyAgICAgICAgb2YuY2xvc2UoKQorICAgIGV4ZWMgYnVmCisKKworZGVmIGdlbl90YXJnZXQoZmlsZXMsIGNvbnRleHQgPSBOb25lKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSB0aGUgcHl0aG9uIGNvZGUgZm9yIGVhY2ggZmlsZS4KKyAgICAiIiIKKyAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgZmlsZS5nZW4oY29udGV4dCkKKworCitkZWYgZ2VuX3Byb2dyYW1faGVhZGVyX2xpbmVzKHByb2dyYW1fbGluZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIGFueSBpbXBvcnRzIHdlIG5lZWQuCisgICAgIiIiCisgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQoImN1cnJlbnRfZmlsZSA9IFwiXCIiKQorCisKK2RlZiBnZW5fc3VwcGxpZWRfcHJvcGVydHlfdmFscyhwcm9wZXJ0aWVzLCBwcm9ncmFtX2xpbmVzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSB1c2VyLXNwZWNpZmllZCBlbnRyaWVzIGZvciBpbnB1dCB2YWx1ZXMgaW5zdGVhZCBvZgorICAgIGdlbmVyYXRpbmcgaW5wdXQgcHJvbXB0cy4KKyAgICAiIiIKKyAgICBmb3IgbmFtZSwgdmFsIGluIHByb3BlcnRpZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIHByb2dyYW1fbGluZSA9IG5hbWUgKyAiID0gXCIiICsgdmFsICsgIlwiIgorICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChwcm9ncmFtX2xpbmUpCisKKworZGVmIGdlbl9pbml0aWFsX3Byb3BlcnR5X3ZhbHMoaW5wdXRfbGluZXMsIHByb2dyYW1fbGluZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIG51bGwgb3IgZGVmYXVsdCBlbnRyaWVzIGZvciBpbnB1dCB2YWx1ZXMsIHNvIHdlIGRvbid0CisgICAgaGF2ZSB1bmRlZmluZWQgdmFyaWFibGVzLgorICAgICIiIgorICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIGdlbl9pbml0aWFsX3Byb3BlcnR5X3ZhbHMobGluZS5ncm91cCwgcHJvZ3JhbV9saW5lcykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUgPSBsaW5lLnByb3BzWyJuYW1lIl0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsID0gIlwiIiArIGxpbmUucHJvcHNbImRlZmF1bHQiXSArICJcIiIKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsID0gIlwiXCIiCisgICAgICAgICAgICAgICAgcHJvZ3JhbV9saW5lID0gbmFtZSArICIgPSAiICsgZGVmYXVsdF92YWwKKyAgICAgICAgICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChwcm9ncmFtX2xpbmUpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisKK2RlZiBnZW5fcHJvZ3JhbV9pbnB1dF9saW5lcyhpbnB1dF9saW5lcywgcHJvZ3JhbV9saW5lcywgY29udGV4dCwgaW5fZ3JvdXAgPSBGYWxzZSk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgb25seSB0aGUgaW5wdXQgbGluZXMgdXNlZCBmb3IgcHJvbXB0aW5nIHRoZSB1c2VyLiAgRm9yCisgICAgdGhhdCwgd2Ugb25seSBoYXZlIGlucHV0IGxpbmVzIGFuZCBDb2RlTGluZXMgdGhhdCBhZmZlY3QgdGhlIG5leHQKKyAgICBpbnB1dCBsaW5lLgorICAgICIiIgorICAgIGluZGVudCA9IG5ld19pbmRlbnQgPSAwCisKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBnZW5fcHJvZ3JhbV9pbnB1dF9saW5lcyhsaW5lLmdyb3VwLCBwcm9ncmFtX2xpbmVzLCBjb250ZXh0LCBUcnVlKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IGxpbmUubGluZS5zdHJpcCgpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBnZW5saW5lID0gbGluZS5nZW4oY29udGV4dCkKKyAgICAgICAgaWYgbm90IGdlbmxpbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBnZW5saW5lLmVuZHN3aXRoKCI6Iik6CisgICAgICAgICAgICBuZXdfaW5kZW50ICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGluZGVudCA+IDEgb3IgKG5vdCBpbl9ncm91cCBhbmQgaW5kZW50KToKKyAgICAgICAgICAgICAgICBuZXdfaW5kZW50IC09IDEKKworICAgICAgICBsaW5lLmdlbmVyYXRlZF9saW5lID0gKGluZGVudCAqIElOREVOVF9TVFIpICsgZ2VubGluZQorICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChsaW5lLmdlbmVyYXRlZF9saW5lKQorCisgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQKKworCitkZWYgZ2VuX3Byb2dyYW1fbGluZXModGFyZ2V0X2ZpbGVzLCBwcm9ncmFtX2xpbmVzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSB0aGUgcHJvZ3JhbSBsaW5lcyB0aGF0IG1ha2UgdXAgdGhlIEJTUCBnZW5lcmF0aW9uCisgICAgcHJvZ3JhbS4gIFRoaXMgYXBwZW5kcyB0aGUgZ2VuZXJhdGVkIGxpbmVzIG9mIGFsbCB0YXJnZXRfZmlsZXMgdG8KKyAgICBwcm9ncmFtX2xpbmVzLCBhbmQgc2tpcHMgaW5wdXQgbGluZXMsIHdoaWNoIGFyZSBkZWFsdCB3aXRoCisgICAgc2VwYXJhdGVseSwgb3Igb21pdHRlZC4KKyAgICAiIiIKKyAgICBmb3IgZmlsZSBpbiB0YXJnZXRfZmlsZXM6CisgICAgICAgIGlmIGZpbGUuZmlsZW5hbWUuZW5kc3dpdGgoIm5vaW5zdGFsbCIpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBmb3IgbGluZSBpbiBmaWxlLmV4cGFuZGVkX2xpbmVzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLmRpc2NhcmQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQobGluZS5nZW5lcmF0ZWRfbGluZSkKKworCitkZWYgY3JlYXRlX2NvbnRleHQobWFjaGluZSwgYXJjaCwgc2NyaXB0c19wYXRoKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSBjb250ZXh0IG9iamVjdCBmb3IgdXNlIGluIGRlZmVycmVkIGZ1bmN0aW9uIGludm9jYXRpb24uCisgICAgIiIiCisgICAgY29udGV4dCA9IHt9CisKKyAgICBjb250ZXh0WyJtYWNoaW5lIl0gPSBtYWNoaW5lCisgICAgY29udGV4dFsiYXJjaCJdID0gYXJjaAorICAgIGNvbnRleHRbInNjcmlwdHNfcGF0aCJdID0gc2NyaXB0c19wYXRoCisKKyAgICByZXR1cm4gY29udGV4dAorCisKK2RlZiBjYXB0dXJlX2NvbnRleHQoY29udGV4dCk6CisgICAgIiIiCisgICAgQ3JlYXRlIGEgY29udGV4dCBvYmplY3QgZm9yIHVzZSBpbiBkZWZlcnJlZCBmdW5jdGlvbiBpbnZvY2F0aW9uLgorICAgICIiIgorICAgIGNhcHR1cmVkX2NvbnRleHQgPSB7fQorCisgICAgY2FwdHVyZWRfY29udGV4dFsibWFjaGluZSJdID0gY29udGV4dFsibWFjaGluZSJdCisgICAgY2FwdHVyZWRfY29udGV4dFsiYXJjaCJdID0gY29udGV4dFsiYXJjaCJdCisgICAgY2FwdHVyZWRfY29udGV4dFsic2NyaXB0c19wYXRoIl0gPSBjb250ZXh0WyJzY3JpcHRzX3BhdGgiXQorCisgICAgcmV0dXJuIGNhcHR1cmVkX2NvbnRleHQKKworCitkZWYgZXhwYW5kX3RhcmdldHMoY29udGV4dCwgYnNwX291dHB1dF9kaXIsIGV4cGFuZF9jb21tb249VHJ1ZSk6CisgICAgIiIiCisgICAgRXhwYW5kIGFsbCB0aGUgdGFncyBpbiBib3RoIHRoZSBjb21tb24gYW5kIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAndGFyZ2V0cycuCisKKyAgICBJZiBleHBhbmRfY29tbW9uIGlzIEZhbHNlLCBkb24ndCBleHBhbmQgdGhlIGNvbW1vbiB0YXJnZXQgKHRoaXMKKyAgICBvcHRpb24gaXMgdXNlZCB0byBjcmVhdGUgc3BlY2lhbC1wdXJwb3NlIGxheWVycykuCisgICAgIiIiCisgICAgdGFyZ2V0X2ZpbGVzID0gW10KKworICAgIG1hY2hpbmUgPSBjb250ZXh0WyJtYWNoaW5lIl0KKyAgICBhcmNoID0gY29udGV4dFsiYXJjaCJdCisgICAgc2NyaXB0c19wYXRoID0gY29udGV4dFsic2NyaXB0c19wYXRoIl0KKworICAgIGxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCisgICAgYnNwX3BhdGggPSBsaWJfcGF0aCArICcvYnNwJworICAgIGFyY2hfcGF0aCA9IGJzcF9wYXRoICsgJy9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gnCisKKyAgICBpZiBleHBhbmRfY29tbW9uOgorICAgICAgICBjb21tb24gPSBvcy5wYXRoLmpvaW4oYXJjaF9wYXRoLCAiY29tbW9uIikKKyAgICAgICAgZXhwYW5kX3RhcmdldChjb21tb24sIHRhcmdldF9maWxlcywgYnNwX291dHB1dF9kaXIpCisKKyAgICBhcmNoZXMgPSBvcy5saXN0ZGlyKGFyY2hfcGF0aCkKKyAgICBpZiBhcmNoIG5vdCBpbiBhcmNoZXMgb3IgYXJjaCA9PSAiY29tbW9uIjoKKyAgICAgICAgcHJpbnQgIkludmFsaWQga2FyY2gsIGV4aXRpbmdcbiIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHRhcmdldCA9IG9zLnBhdGguam9pbihhcmNoX3BhdGgsIGFyY2gpCisgICAgZXhwYW5kX3RhcmdldCh0YXJnZXQsIHRhcmdldF9maWxlcywgYnNwX291dHB1dF9kaXIpCisKKyAgICBnZW5fdGFyZ2V0KHRhcmdldF9maWxlcywgY29udGV4dCkKKworICAgIHJldHVybiB0YXJnZXRfZmlsZXMKKworCitkZWYgeW9jdG9fY29tbW9uX2NyZWF0ZShtYWNoaW5lLCB0YXJnZXQsIHNjcmlwdHNfcGF0aCwgbGF5ZXJfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllc19zdHI9IiIsIGV4cGFuZF9jb21tb249VHJ1ZSk6CisgICAgIiIiCisgICAgQ29tbW9uIGxheWVyLWNyZWF0aW9uIGNvZGUKKworICAgIG1hY2hpbmUgLSB1c2VyLWRlZmluZWQgbWFjaGluZSBuYW1lIChpZiBuZWVkZWQsIHdpbGwgZ2VuZXJhdGUgJ21hY2hpbmUnIHZhcikKKyAgICB0YXJnZXQgLSB0aGUgJ3RhcmdldCcgdGhlIGxheWVyIHdpbGwgYmUgYmFzZWQgb24sIG11c3QgYmUgb25lIGluCisgICAgICAgICAgIHNjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gKKyAgICBzY3JpcHRzX3BhdGggLSBhYnNvbHV0ZSBwYXRoIHRvIHlvY3RvIC9zY3JpcHRzIGRpcgorICAgIGxheWVyX291dHB1dF9kaXIgLSBkaXJuYW1lIHRvIGNyZWF0ZSBmb3IgbGF5ZXIKKyAgICBjb2RlZHVtcCAtIGR1bXAgZ2VuZXJhdGVkIGNvZGUgdG8gYnNwZ2VuLm91dAorICAgIHByb3BlcnRpZXNfZmlsZSAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIGZpbGUgaWYgbm9uZW1wdHkgaS5lIG5vIHByb21wdGluZworICAgIHByb3BlcnRpZXNfc3RyIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgc3RyaW5nIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICBleHBhbmRfY29tbW9uIC0gYm9vbGVhbiwgdXNlIHRoZSBjb250ZW50cyBvZiAoZm9yIGJzcCBsYXllcnMpIGFyY2gvY29tbW9uCisgICAgIiIiCisgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJfb3V0cHV0X2Rpcik6CisgICAgICAgIHByaW50ICJcbmxheWVyIG91dHB1dCBkaXIgYWxyZWFkeSBleGlzdHMsIGV4aXRpbmcuICglcykiICUgbGF5ZXJfb3V0cHV0X2RpcgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcHJvcGVydGllcyA9IE5vbmUKKworICAgIGlmIHByb3BlcnRpZXNfZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5maWxlID0gb3Blbihwcm9wZXJ0aWVzX2ZpbGUsICJyIikKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHJlYWRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHByb3BlcnRpZXMgPSBqc29uLmxvYWQoaW5maWxlKQorCisgICAgaWYgcHJvcGVydGllc19zdHIgYW5kIG5vdCBwcm9wZXJ0aWVzOgorICAgICAgICBwcm9wZXJ0aWVzID0ganNvbi5sb2Fkcyhwcm9wZXJ0aWVzX3N0cikKKworICAgIG9zLm1rZGlyKGxheWVyX291dHB1dF9kaXIpCisKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQobWFjaGluZSwgdGFyZ2V0LCBzY3JpcHRzX3BhdGgpCisgICAgdGFyZ2V0X2ZpbGVzID0gZXhwYW5kX3RhcmdldHMoY29udGV4dCwgbGF5ZXJfb3V0cHV0X2RpciwgZXhwYW5kX2NvbW1vbikKKworICAgIGlucHV0X2xpbmVzID0gZ2F0aGVyX2lucHV0bGluZXModGFyZ2V0X2ZpbGVzKQorCisgICAgcHJvZ3JhbV9saW5lcyA9IFtdCisKKyAgICBnZW5fcHJvZ3JhbV9oZWFkZXJfbGluZXMocHJvZ3JhbV9saW5lcykKKworICAgIGdlbl9pbml0aWFsX3Byb3BlcnR5X3ZhbHMoaW5wdXRfbGluZXMsIHByb2dyYW1fbGluZXMpCisKKyAgICBpZiBwcm9wZXJ0aWVzOgorICAgICAgICBnZW5fc3VwcGxpZWRfcHJvcGVydHlfdmFscyhwcm9wZXJ0aWVzLCBwcm9ncmFtX2xpbmVzKQorCisgICAgZ2VuX3Byb2dyYW1fbWFjaGluZV9saW5lcyhtYWNoaW5lLCBwcm9ncmFtX2xpbmVzKQorCisgICAgaWYgbm90IHByb3BlcnRpZXM6CisgICAgICAgIGdlbl9wcm9ncmFtX2lucHV0X2xpbmVzKGlucHV0X2xpbmVzLCBwcm9ncmFtX2xpbmVzLCBjb250ZXh0KQorCisgICAgZ2VuX3Byb2dyYW1fbGluZXModGFyZ2V0X2ZpbGVzLCBwcm9ncmFtX2xpbmVzKQorCisgICAgcnVuX3Byb2dyYW1fbGluZXMocHJvZ3JhbV9saW5lcywgY29kZWR1bXApCisKKworZGVmIHlvY3RvX2xheWVyX2NyZWF0ZShsYXllcl9uYW1lLCBzY3JpcHRzX3BhdGgsIGxheWVyX291dHB1dF9kaXIsIGNvZGVkdW1wLCBwcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXM9IiIpOgorICAgICIiIgorICAgIENyZWF0ZSB5b2N0byBsYXllcgorCisgICAgbGF5ZXJfbmFtZSAtIHVzZXItZGVmaW5lZCBsYXllciBuYW1lCisgICAgc2NyaXB0c19wYXRoIC0gYWJzb2x1dGUgcGF0aCB0byB5b2N0byAvc2NyaXB0cyBkaXIKKyAgICBsYXllcl9vdXRwdXRfZGlyIC0gZGlybmFtZSB0byBjcmVhdGUgZm9yIGxheWVyCisgICAgY29kZWR1bXAgLSBkdW1wIGdlbmVyYXRlZCBjb2RlIHRvIGJzcGdlbi5vdXQKKyAgICBwcm9wZXJ0aWVzX2ZpbGUgLSB1c2UgdmFsdWVzIGZyb20gdGhpcyBmaWxlIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICBwcm9wZXJ0aWVzIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgc3RyaW5nIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICAiIiIKKyAgICB5b2N0b19jb21tb25fY3JlYXRlKGxheWVyX25hbWUsICJsYXllciIsIHNjcmlwdHNfcGF0aCwgbGF5ZXJfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcywgRmFsc2UpCisKKyAgICBwcmludCAiXG5OZXcgbGF5ZXIgY3JlYXRlZCBpbiAlcy5cbiIgJSAobGF5ZXJfb3V0cHV0X2RpcikKKyAgICBwcmludCAiRG9uJ3QgZm9yZ2V0IHRvIGFkZCBpdCB0byB5b3VyIEJCTEFZRVJTIChmb3IgZGV0YWlscyBzZWUgJXNcUkVBRE1FKS4iICUgKGxheWVyX291dHB1dF9kaXIpCisKKworZGVmIHlvY3RvX2JzcF9jcmVhdGUobWFjaGluZSwgYXJjaCwgc2NyaXB0c19wYXRoLCBic3Bfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcz1Ob25lKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYnNwCisKKyAgICBtYWNoaW5lIC0gdXNlci1kZWZpbmVkIG1hY2hpbmUgbmFtZQorICAgIGFyY2ggLSB0aGUgYXJjaCB0aGUgYnNwIHdpbGwgYmUgYmFzZWQgb24sIG11c3QgYmUgb25lIGluCisgICAgICAgICAgIHNjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gKKyAgICBzY3JpcHRzX3BhdGggLSBhYnNvbHV0ZSBwYXRoIHRvIHlvY3RvIC9zY3JpcHRzIGRpcgorICAgIGJzcF9vdXRwdXRfZGlyIC0gZGlybmFtZSB0byBjcmVhdGUgZm9yIEJTUAorICAgIGNvZGVkdW1wIC0gZHVtcCBnZW5lcmF0ZWQgY29kZSB0byBic3BnZW4ub3V0CisgICAgcHJvcGVydGllc19maWxlIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgZmlsZSBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgcHJvcGVydGllcyAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIHN0cmluZyBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgIiIiCisgICAgeW9jdG9fY29tbW9uX2NyZWF0ZShtYWNoaW5lLCBhcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzKQorCisgICAgcHJpbnQgIlxuTmV3ICVzIEJTUCBjcmVhdGVkIGluICVzIiAlIChhcmNoLCBic3Bfb3V0cHV0X2RpcikKKworCitkZWYgcHJpbnRfZGljdChpdGVtcywgaW5kZW50ID0gMCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIHZhbHVlcyBpbiBhIHBvc3NpYmx5IG5lc3RlZCBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGZvciBrZXksIHZhbCBpbiBpdGVtcy5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQgIiAgICAiKmluZGVudCArICJcIiVzXCIgOiIgJSBrZXksCisgICAgICAgIGlmIHR5cGUodmFsKSA9PSBkaWN0OgorICAgICAgICAgICAgcHJpbnQgInsiCisgICAgICAgICAgICBwcmludF9kaWN0KHZhbCwgaW5kZW50ICsgMSkKKyAgICAgICAgICAgIHByaW50ICIgICAgIippbmRlbnQgKyAifSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICIlcyIgJSB2YWwKKworCitkZWYgZ2V0X3Byb3BlcnRpZXMoaW5wdXRfbGluZXMpOgorICAgICIiIgorICAgIEdldCB0aGUgY29tcGxldGUgc2V0IG9mIHByb3BlcnRpZXMgZm9yIGFsbCB0aGUgaW5wdXQgaXRlbXMgaW4gdGhlCisgICAgQlNQLCBhcyBhIHBvc3NpYmx5IG5lc3RlZCBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIHByb3BlcnRpZXMgPSB7fQorCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgc3RhdGVtZW50ID0gbGluZS5ncm91cFswXS5saW5lCisgICAgICAgICAgICBncm91cF9wcm9wZXJ0aWVzID0gZ2V0X3Byb3BlcnRpZXMobGluZS5ncm91cCkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbc3RhdGVtZW50XSA9IGdyb3VwX3Byb3BlcnRpZXMKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBDaG9pY2VJbnB1dExpbmUpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBwcm9wcyA9IGxpbmUucHJvcHMKKyAgICAgICAgaXRlbSA9IHt9CisgICAgICAgIG5hbWUgPSBwcm9wc1sibmFtZSJdCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBwcm9wcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGtleSA9PSAibmFtZSI6CisgICAgICAgICAgICAgICAgaXRlbVtrZXldID0gdmFsCisgICAgICAgIHByb3BlcnRpZXNbbmFtZV0gPSBpdGVtCisKKyAgICByZXR1cm4gcHJvcGVydGllcworCisKK2RlZiB5b2N0b19sYXllcl9saXN0X3Byb3BlcnRpZXMoYXJjaCwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIGV4cGFuZF9jb21tb249VHJ1ZSk6CisgICAgIiIiCisgICAgTGlzdCB0aGUgY29tcGxldGUgc2V0IG9mIHByb3BlcnRpZXMgZm9yIGFsbCB0aGUgaW5wdXQgaXRlbXMgaW4gdGhlCisgICAgbGF5ZXIuICBJZiBwcm9wZXJ0aWVzX2ZpbGUgaXMgbm9uLW51bGwsIHdyaXRlIHRoZSBjb21wbGV0ZSBzZXQgb2YKKyAgICBwcm9wZXJ0aWVzIGFzIGEgbmVzdGVkIEpTT04gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gYSBwb3NzaWJseQorICAgIG5lc3RlZCBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dCgidW51c2VkIiwgYXJjaCwgc2NyaXB0c19wYXRoKQorICAgIHRhcmdldF9maWxlcyA9IGV4cGFuZF90YXJnZXRzKGNvbnRleHQsICJ1bnVzZWQiLCBleHBhbmRfY29tbW9uKQorCisgICAgaW5wdXRfbGluZXMgPSBnYXRoZXJfaW5wdXRsaW5lcyh0YXJnZXRfZmlsZXMpCisKKyAgICBwcm9wZXJ0aWVzID0gZ2V0X3Byb3BlcnRpZXMoaW5wdXRfbGluZXMpCisgICAgaWYgcHJvcGVydGllc19maWxlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvZiA9IG9wZW4ocHJvcGVydGllc19maWxlLCAidyIpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciB3cml0aW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBqc29uLmR1bXAocHJvcGVydGllcywgb2YpCisKKyAgICBwcmludF9kaWN0KHByb3BlcnRpZXMpCisKKworZGVmIHNwbGl0X25lc3RlZF9wcm9wZXJ0eShwcm9wZXJ0eSk6CisgICAgIiIiCisgICAgQSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBmb3JtIHgueSBkZXNjcmliZXMgYSBuZXN0ZWQgcHJvcGVydHkKKyAgICBpLmUuIHRoZSBwcm9wZXJ0eSB5IGlzIGNvbnRhaW5lZCB3aXRoaW4geCBhbmQgY2FuIGJlIGFkZHJlc3NlZAorICAgIHVzaW5nIHN0YW5kYXJkIEpTT04gc3ludGF4IGZvciBuZXN0ZWQgcHJvcGVydGllcy4gIE5vdGUgdGhhdCBpZiBhCisgICAgcHJvcGVydHkgbmFtZSBpdHNlbGYgY29udGFpbnMgJy4nLCBpdCBzaG91bGQgYmUgY29udGFpbmVkIGluCisgICAgZG91YmxlIHF1b3Rlcy4KKyAgICAiIiIKKyAgICBzcGxpdHRhYmxlX3Byb3BlcnR5ID0gIiIKKyAgICBpbl9xdW90ZXMgPSBGYWxzZQorICAgIGZvciBjIGluIHByb3BlcnR5OgorICAgICAgICBpZiBjID09ICcuJyBhbmQgbm90IGluX3F1b3RlczoKKyAgICAgICAgICAgIHNwbGl0dGFibGVfcHJvcGVydHkgKz0gJ1xuJworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgYyA9PSAnIic6CisgICAgICAgICAgICBpbl9xdW90ZXMgPSBub3QgaW5fcXVvdGVzCisgICAgICAgIHNwbGl0dGFibGVfcHJvcGVydHkgKz0gYworCisgICAgc3BsaXRfcHJvcGVydGllcyA9IHNwbGl0dGFibGVfcHJvcGVydHkuc3BsaXQoJ1xuJykKKworICAgIGlmIGxlbihzcGxpdF9wcm9wZXJ0aWVzKSA+IDE6CisgICAgICAgIHJldHVybiBzcGxpdF9wcm9wZXJ0aWVzCisKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBmaW5kX2lucHV0X2xpbmVfZ3JvdXAoc3Vic3RyaW5nLCBpbnB1dF9saW5lcyk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIHRoZSBJbnB1dExpbmVHcm91cCBjb250YWluaW5nIHRoZSBzcGVjaWZpZWQgc3Vic3RyaW5nLgorICAgICIiIgorICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIGlmIHN1YnN0cmluZyBpbiBsaW5lLmdyb3VwWzBdLmxpbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIHJldHVybiBOb25lCisKKworZGVmIGZpbmRfaW5wdXRfbGluZShuYW1lLCBpbnB1dF9saW5lcyk6CisgICAgIiIiCisgICAgRmluZCB0aGUgaW5wdXQgbGluZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKyAgICAiIiIKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBsID0gZmluZF9pbnB1dF9saW5lKG5hbWUsIGxpbmUuZ3JvdXApCisgICAgICAgICAgICBpZiBsOgorICAgICAgICAgICAgICAgIHJldHVybiBsCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGxpbmUucHJvcHNbIm5hbWUiXSA9PSBuYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgICAgIGlmIGxpbmUucHJvcHNbIm5hbWUiXSArICJfIiArIGxpbmUucHJvcHNbIm5hbWVhcHBlbmQiXSA9PSBuYW1lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiBOb25lCisKKworZGVmIHByaW50X3ZhbHVlcyh0eXBlLCB2YWx1ZXNfbGlzdCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gbGlzdCBvZiB2YWx1ZXMuCisgICAgIiIiCisgICAgaWYgdHlwZSA9PSAiY2hvaWNlbGlzdCI6CisgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXNfbGlzdDoKKyAgICAgICAgICAgIHByaW50ICJbXCIlc1wiLCBcIiVzXCJdIiAlICh2YWx1ZVswXSwgdmFsdWVbMV0pCisgICAgZWxpZiB0eXBlID09ICJib29sZWFuIjoKKyAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlc19saXN0OgorICAgICAgICAgICAgcHJpbnQgIltcIiVzXCIsIFwiJXNcIl0iICUgKHZhbHVlWzBdLCB2YWx1ZVsxXSkKKworCitkZWYgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0eV92YWx1ZXMoYXJjaCwgcHJvcGVydHksIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlLCBleHBhbmRfY29tbW9uPVRydWUpOgorICAgICIiIgorICAgIExpc3QgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBnaXZlbiBpbnB1dCBwcm9wZXJ0eS4gIElmCisgICAgcHJvcGVydGllc19maWxlIGlzIG5vbi1udWxsLCB3cml0ZSB0aGUgY29tcGxldGUgc2V0IG9mIHByb3BlcnRpZXMKKyAgICBhcyBhIEpTT04gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gYW4gYXJyYXkgb2YgcG9zc2libGUgdmFsdWVzLgorICAgICIiIgorICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dCgidW51c2VkIiwgYXJjaCwgc2NyaXB0c19wYXRoKQorICAgIGNvbnRleHRbIm5hbWUiXSA9IHByb3BlcnR5CisKKyAgICB0YXJnZXRfZmlsZXMgPSBleHBhbmRfdGFyZ2V0cyhjb250ZXh0LCAidW51c2VkIiwgZXhwYW5kX2NvbW1vbikKKworICAgIGlucHV0X2xpbmVzID0gZ2F0aGVyX2lucHV0bGluZXModGFyZ2V0X2ZpbGVzKQorCisgICAgcHJvcGVydGllcyA9IGdldF9wcm9wZXJ0aWVzKGlucHV0X2xpbmVzKQorCisgICAgbmVzdGVkX3Byb3BlcnRpZXMgPSBzcGxpdF9uZXN0ZWRfcHJvcGVydHkocHJvcGVydHkpCisgICAgaWYgbmVzdGVkX3Byb3BlcnRpZXM6CisgICAgICAgICMgY3VycmVudGx5IHRoZSBvdXRlciBwcm9wZXJ0eSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSBhbHdheXMKKyAgICAgICAgIyBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCBsaW5lIGdyb3VwCisgICAgICAgIGlucHV0X2xpbmVfZ3JvdXAgPSBmaW5kX2lucHV0X2xpbmVfZ3JvdXAobmVzdGVkX3Byb3BlcnRpZXNbMF0sIGlucHV0X2xpbmVzKQorICAgICAgICBpZiBpbnB1dF9saW5lX2dyb3VwOgorICAgICAgICAgICAgaW5wdXRfbGluZXNbOl0gPSBpbnB1dF9saW5lX2dyb3VwLmdyb3VwWzE6XQorICAgICAgICAgICAgIyBUaGUgaW5uZXIgcHJvcGVydHkgb2YgYSBuZXN0ZWQgcHJvcGVydHkgbmFtZSBpcyB0aGUKKyAgICAgICAgICAgICMgYWN0dWFsIHByb3BlcnR5IG5hbWUgd2Ugd2FudCwgc28gcmVzZXQgdG8gdGhhdAorICAgICAgICAgICAgcHJvcGVydHkgPSBuZXN0ZWRfcHJvcGVydGllc1sxXQorCisgICAgaW5wdXRfbGluZSA9IGZpbmRfaW5wdXRfbGluZShwcm9wZXJ0eSwgaW5wdXRfbGluZXMpCisgICAgaWYgbm90IGlucHV0X2xpbmU6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIHZhbHVlcyBmb3IgcHJvcGVydHkgJXMiICUgcHJvcGVydHkKKyAgICAgICAgcmV0dXJuCisKKyAgICB2YWx1ZXNfbGlzdCA9IFtdCisKKyAgICB0eXBlID0gaW5wdXRfbGluZS5wcm9wc1sidHlwZSJdCisgICAgaWYgdHlwZSA9PSAiYm9vbGVhbiI6CisgICAgICAgIHZhbHVlc19saXN0LmFwcGVuZChbInkiLCAibiJdKQorICAgIGVsaWYgdHlwZSA9PSAiY2hvaWNlbGlzdCIgb3IgdHlwZSA9PSAiY2hlY2tsaXN0IjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2VuX2ZuID0gaW5wdXRfbGluZS5wcm9wc1siZ2VuIl0KKyAgICAgICAgICAgIGlmIG5lc3RlZF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgIGNvbnRleHRbImZpbGVuYW1lIl0gPSBuZXN0ZWRfcHJvcGVydGllc1swXQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsiYnJhbmNoZXNfYmFzZSJdID0gaW5wdXRfbGluZS5wcm9wc1siYnJhbmNoZXNfYmFzZSJdCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WyJicmFuY2hlc19iYXNlIl0gPSBOb25lCisgICAgICAgICAgICB2YWx1ZXNfbGlzdCA9IGlucHV0X2xpbmUuZ2VuX2Nob2ljZXNfbGlzdChjb250ZXh0LCBGYWxzZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZm9yIGNob2ljZSBpbiBpbnB1dF9saW5lLmNob2ljZXM6CisgICAgICAgICAgICAgICAgY2hvaWNlcGFpciA9IFtdCisgICAgICAgICAgICAgICAgY2hvaWNlcGFpci5hcHBlbmQoY2hvaWNlLnZhbCkKKyAgICAgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UuZGVzYykKKyAgICAgICAgICAgICAgICB2YWx1ZXNfbGlzdC5hcHBlbmQoY2hvaWNlcGFpcikKKworICAgIGlmIHByb3BlcnRpZXNfZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2YgPSBvcGVuKHByb3BlcnRpZXNfZmlsZSwgInciKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3Igd3JpdGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAganNvbi5kdW1wKHZhbHVlc19saXN0LCBvZikKKyAgICAKKyAgICBwcmludF92YWx1ZXModHlwZSwgdmFsdWVzX2xpc3QpCisKKworZGVmIHlvY3RvX2JzcF9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKToKKyAgICAiIiIKKyAgICBQcmludCBhdmFpbGFibGUgYXJjaGl0ZWN0dXJlcywgb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgcHJvcGVydGllcworICAgIGRlZmluZWQgYnkgdGhlIEJTUCwgb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIEJTUAorICAgIHByb3BlcnR5LgorICAgICIiIgorICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgYXJnc1swXSA9PSAia2FyY2giOgorICAgICAgICBsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworICAgICAgICBic3BfcGF0aCA9IGxpYl9wYXRoICsgJy9ic3AnCisgICAgICAgIGFyY2hfcGF0aCA9IGJzcF9wYXRoICsgJy9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gnCisgICAgICAgIHByaW50ICJBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToiCisgICAgICAgIGZvciBhcmNoIGluIG9zLmxpc3RkaXIoYXJjaF9wYXRoKToKKyAgICAgICAgICAgIGlmIGFyY2ggPT0gImNvbW1vbiIgb3IgYXJjaCA9PSAibGF5ZXIiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwcmludCAiICAgICVzIiAlIGFyY2gKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICBhcmNoID0gYXJnc1swXQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMiBvciBsZW4oYXJncykgPiAzOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICBpZiBhcmdzWzFdID09ICJwcm9wZXJ0aWVzIjoKKyAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydGllcyhhcmNoLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbGVuKGFyZ3MpID09IDM6CisgICAgICAgIGlmIGFyZ3NbMV0gPT0gInByb3BlcnR5IjoKKyAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydHlfdmFsdWVzKGFyY2gsIGFyZ3NbMl0sIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiB5b2N0b19sYXllcl9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgY29tcGxldGUgbGlzdCBvZiBpbnB1dCBwcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhlIGxheWVyLAorICAgIG9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgcGFydGljdWxhciBsYXllciBwcm9wZXJ0eS4KKyAgICAiIiIKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGxlbihhcmdzKSA8IDEgb3IgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAicHJvcGVydGllcyI6CisgICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnRpZXMoImxheWVyIiwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBsZW4oYXJncykgPT0gMjoKKyAgICAgICAgaWYgYXJnc1swXSA9PSAicHJvcGVydHkiOgorICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0eV92YWx1ZXMoImxheWVyIiwgYXJnc1sxXSwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBtYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBsaW51eC15b2N0byBic3AgYnJhbmNoIHRvIHVzZSB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICBrYnJhbmNoLiAgVGhpcyBoYW5kbGVzIHRoZSAtc3RhbmRhcmQgdmFyaWFudHMgZm9yIDMuNCBhbmQgMy44OyB0aGUKKyAgICBvdGhlciB2YXJpYW50cyBkb24ndCBuZWVkIG1hcHBpbmdzLgorICAgICIiIgorICAgIGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOgorICAgICAgICBrYnJhbmNoID0gbmV3X2ticmFuY2gKKyAgICBlbHNlOgorICAgICAgICBrYnJhbmNoID0gZXhpc3Rpbmdfa2JyYW5jaAorCisgICAgaWYga2JyYW5jaC5zdGFydHN3aXRoKCJzdGFuZGFyZC9jb21tb24tcGMtNjQiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjLTY0L2NvbW1vbi1wYy02NC1zdGFuZGFyZC5zY2MiCisgICAgaWYga2JyYW5jaC5zdGFydHN3aXRoKCJzdGFuZGFyZC9jb21tb24tcGMiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjL2NvbW1vbi1wYy1zdGFuZGFyZC5zY2MiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJrdHlwZXMvc3RhbmRhcmQvc3RhbmRhcmQuc2NjIgorCisKK2RlZiBtYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGxpbnV4LXlvY3RvIGJzcCBicmFuY2ggdG8gdXNlIHdpdGggdGhlIHNwZWNpZmllZAorICAgIGticmFuY2guICBUaGlzIGhhbmRsZXMgdGhlIC1wcmVlbXB0LXJ0IHZhcmlhbnRzIGZvciAzLjQgYW5kIDMuODsKKyAgICB0aGUgb3RoZXIgdmFyaWFudHMgZG9uJ3QgbmVlZCBtYXBwaW5ncy4KKyAgICAiIiIKKyAgICBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjoKKyAgICAgICAga2JyYW5jaCA9IG5ld19rYnJhbmNoCisgICAgZWxzZToKKyAgICAgICAga2JyYW5jaCA9IGV4aXN0aW5nX2ticmFuY2gKKworICAgIGlmIGticmFuY2guc3RhcnRzd2l0aCgic3RhbmRhcmQvcHJlZW1wdC1ydC9jb21tb24tcGMtNjQiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjLTY0L2NvbW1vbi1wYy02NC1wcmVlbXB0LXJ0LnNjYyIKKyAgICBpZiBrYnJhbmNoLnN0YXJ0c3dpdGgoInN0YW5kYXJkL3ByZWVtcHQtcnQvY29tbW9uLXBjIik6CisgICAgICAgIHJldHVybiAiYnNwL2NvbW1vbi1wYy9jb21tb24tcGMtcHJlZW1wdC1ydC5zY2MiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJrdHlwZXMvcHJlZW1wdC1ydC9wcmVlbXB0LXJ0LnNjYyIKKworCitkZWYgbWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBsaW51eC15b2N0byBic3AgYnJhbmNoIHRvIHVzZSB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICBrYnJhbmNoLiAgVGhpcyBoYW5kbGVzIHRoZSAtdGlueSB2YXJpYW50cyBmb3IgMy40IGFuZCAzLjg7IHRoZQorICAgIG90aGVyIHZhcmlhbnRzIGRvbid0IG5lZWQgbWFwcGluZ3MuCisgICAgIiIiCisgICAgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6CisgICAgICAgIGticmFuY2ggPSBuZXdfa2JyYW5jaAorICAgIGVsc2U6CisgICAgICAgIGticmFuY2ggPSBleGlzdGluZ19rYnJhbmNoCisKKyAgICBpZiBrYnJhbmNoLnN0YXJ0c3dpdGgoInN0YW5kYXJkL3RpbnkvY29tbW9uLXBjIik6CisgICAgICAgIHJldHVybiAiYnNwL2NvbW1vbi1wYy9jb21tb24tcGMtdGlueS5zY2MiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJrdHlwZXMvdGlueS90aW55LnNjYyIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2UxMDAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9oZWxwLnB5CkBAIC0wLDAgKzEsMTA0NCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgc29tZSBiYXNpYyBoZWxwIGludm9jYXRpb24gZnVuY3Rpb25zIGFsb25nCisjIHdpdGggdGhlIGJ1bGsgb2YgdGhlIGhlbHAgdG9waWMgdGV4dCBmb3IgdGhlIFlvY3RvIEJTUCBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworCisKK2RlZiBzdWJjb21tYW5kX2Vycm9yKGFyZ3MpOgorICAgIGxvZ2dpbmcuaW5mbygiaW52YWxpZCBzdWJjb21tYW5kICVzIiAlIGFyZ3NbMF0pCisKKworZGVmIGRpc3BsYXlfaGVscChzdWJjb21tYW5kLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgRGlzcGxheSBoZWxwIGZvciBzdWJjb21tYW5kLgorICAgICIiIgorICAgIGlmIHN1YmNvbW1hbmQgbm90IGluIHN1YmNvbW1hbmRzOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGhlbHAgPSBzdWJjb21tYW5kcy5nZXQoc3ViY29tbWFuZCwgc3ViY29tbWFuZF9lcnJvcilbMl0KKyAgICBwYWdlciA9IHN1YnByb2Nlc3MuUG9wZW4oJ2xlc3MnLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgcGFnZXIuY29tbXVuaWNhdGUoaGVscCkKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHlvY3RvX2hlbHAoYXJncywgdXNhZ2Vfc3RyLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgU3ViY29tbWFuZCBoZWxwIGRpc3BhdGNoZXIuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3MpID09IDEgb3Igbm90IGRpc3BsYXlfaGVscChhcmdzWzFdLCBzdWJjb21tYW5kcyk6CisgICAgICAgIHByaW50KHVzYWdlX3N0cikKKworCitkZWYgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCBtYWluX2NvbW1hbmRfdXNhZ2UsIHN1YmNvbW1hbmRzKToKKyAgICAiIiIKKyAgICBEaXNwYXRjaCB0byBzdWJjb21tYW5kIGhhbmRsZXIgYm9ycm93ZWQgZnJvbSBjb21iby1sYXllci4KKyAgICBTaG91bGQgdXNlIGFyZ3BhcnNlLCBidXQgaGFzIHRvIHdvcmsgaW4gMi42LgorICAgICIiIgorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJObyBzdWJjb21tYW5kIHNwZWNpZmllZCwgZXhpdGluZyIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbGlmIGFyZ3NbMF0gPT0gImhlbHAiOgorICAgICAgICB5b2N0b19oZWxwKGFyZ3MsIG1haW5fY29tbWFuZF91c2FnZSwgc3ViY29tbWFuZHMpCisgICAgZWxpZiBhcmdzWzBdIG5vdCBpbiBzdWJjb21tYW5kczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiVW5zdXBwb3J0ZWQgc3ViY29tbWFuZCAlcywgZXhpdGluZ1xuIiAlIChhcmdzWzBdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlID0gc3ViY29tbWFuZHMuZ2V0KGFyZ3NbMF0sIHN1YmNvbW1hbmRfZXJyb3IpWzFdCisgICAgICAgIHN1YmNvbW1hbmRzLmdldChhcmdzWzBdLCBzdWJjb21tYW5kX2Vycm9yKVswXShhcmdzWzE6XSwgdXNhZ2UpCisKKworIyMKKyMgeW9jdG8tYnNwIGhlbHAgYW5kIHVzYWdlIHN0cmluZ3MKKyMjCisKK3lvY3RvX2JzcF91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgY3VzdG9taXplZCBZb2N0byBCU1AgbGF5ZXIuCisKKyB1c2FnZTogeW9jdG8tYnNwIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyBDdXJyZW50ICd5b2N0by1ic3AnIGNvbW1hbmRzIGFyZToKKyAgICBjcmVhdGUgICAgICAgICAgICBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisgICAgbGlzdCAgICAgICAgICAgICAgTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBvcHRpb25zIGFuZCBCU1AgcHJvcGVydGllcworCisgU2VlICd5b2N0by1ic3AgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuCisiIiIKKworeW9jdG9fYnNwX2hlbHBfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1ic3AgaGVscCA8c3ViY29tbWFuZD4KKworIFRoaXMgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuCisiIiIKKworeW9jdG9fYnNwX2NyZWF0ZV91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUAorCisgdXNhZ2U6IHlvY3RvLWJzcCBjcmVhdGUgPGJzcC1uYW1lPiA8a2FyY2g+IFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KKyBUaGUgbmV3IEJTUCB3aWxsIGJlIGEgbmV3IFlvY3RvIEJTUCBsYXllciBjb250YWluZWQgYnkgZGVmYXVsdCB3aXRoaW4KKyB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXMgJ21ldGEtYnNwLW5hbWUnLiAgVGhlIC1vIG9wdGlvbgorIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBCU1AgbGF5ZXIgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudAorIG5hbWUgYW5kIGxvY2F0aW9uLgorCisgVGhlIHZhbHVlIG9mIHRoZSAna2FyY2gnIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgZmlsZXMgdGhhdAorIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgQlNQLCBhbG9uZyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YKKyAncHJvcGVydGllcycgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZmlsbCBvdXQgdGhlIEJTUC1zcGVjaWZpYyBwb3J0aW9ucworIG9mIHRoZSBCU1AuICBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgJ2thcmNoJyBwYXJhbXRlciBjYW4gYmUKKyBsaXN0ZWQgdmlhICd5b2N0by1ic3AgbGlzdCBrYXJjaCcuCisKKyBOT1RFOiBPbmNlIGNyZWF0ZWQsIHlvdSBzaG91bGQgYWRkIHlvdXIgbmV3IGxheWVyIHRvIHlvdXIKKyBiYmxheWVycy5jb25mIGZpbGUgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHN1YnNlcXVlbnRseSBzZWVuIGFuZAorIG1vZGlmaWVkIGJ5IHRoZSB5b2N0by1rZXJuZWwgdG9vbC4KKworIFNlZSAneW9jdG8gYnNwIGhlbHAgY3JlYXRlJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisiIiIKKworeW9jdG9fYnNwX2NyZWF0ZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1ic3AgY3JlYXRlIC0gQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWJzcCBjcmVhdGUgPGJzcC1uYW1lPiA8a2FyY2g+IFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQKKyAgICBwYXJhbWV0ZXJzLiAgVGhlIG5ldyBCU1Agd2lsbCBiZSBhIG5ldyBZb2N0byBCU1AgbGF5ZXIgY29udGFpbmVkCisgICAgYnkgZGVmYXVsdCB3aXRoaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzCisgICAgJ21ldGEtYnNwLW5hbWUnLiAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgQlNQIGxheWVyCisgICAgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworICAgIFRoZSB2YWx1ZSBvZiB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgc2V0IG9mIGZpbGVzCisgICAgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhlIEJTUCwgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWMgc2V0IG9mCisgICAgJ3Byb3BlcnRpZXMnIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGZpbGwgb3V0IHRoZSBCU1Atc3BlY2lmaWMKKyAgICBwb3J0aW9ucyBvZiB0aGUgQlNQLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICdrYXJjaCcgcGFyYW10ZXIKKyAgICBjYW4gYmUgbGlzdGVkIHZpYSAneW9jdG8tYnNwIGxpc3Qga2FyY2gnLgorCisgICAgVGhlIEJTUC1zcGVjaWZpYyBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisgICAgdXNlZCB0byBnZW5lcmF0ZSBhIHBhcnRpY3VsYXIgQlNQIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlCisgICAgY29tbWFuZC1saW5lIHVzaW5nIHRoZSAtaSBvcHRpb24gYW5kIHN1cHBseWluZyBhIEpTT04gb2JqZWN0CisgICAgY29uc2lzdGluZyBvZiB0aGUgc2V0IG9mIG5hbWU6dmFsdWUgcGFpcnMgbmVlZGVkIGJ5IHRoZSBCU1AuCisKKyAgICBJZiB0aGUgLWkgb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUgdXNlciB3aWxsIGJlIGludGVyYWN0aXZlbHkKKyAgICBwcm9tcHRlZCBmb3IgZWFjaCBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydHkgdmFsdWVzLCB3aGljaCB3aWxsIHRoZW4KKyAgICBiZSB1c2VkIGFzIHZhbHVlcyBmb3IgQlNQIGdlbmVyYXRpb24uCisKKyAgICBUaGUgc2V0IG9mIHByb3BlcnRpZXMgYXZhaWxhYmxlIGZvciBhIGdpdmVuIGFyY2hpdGVjdHVyZSBjYW4gYmUKKyAgICBsaXN0ZWQgdXNpbmcgdGhlICd5b2N0by1ic3AgbGlzdCcgY29tbWFuZC4KKworICAgIFNwZWNpZnlpbmcgLWMgY2F1c2VzIHRoZSBQeXRob24gY29kZSBnZW5lcmF0ZWQgYW5kIGV4ZWN1dGVkIHRvCisgICAgY3JlYXRlIHRoZSBCU1AgdG8gYmUgZHVtcGVkIHRvIHRoZSAnYnNwZ2VuLm91dCcgZmlsZSBpbiB0aGUKKyAgICBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCisgICAgTk9URTogT25jZSBjcmVhdGVkLCB5b3Ugc2hvdWxkIGFkZCB5b3VyIG5ldyBsYXllciB0byB5b3VyCisgICAgYmJsYXllcnMuY29uZiBmaWxlIGluIG9yZGVyIGZvciBpdCB0byBiZSBzdWJzZXF1ZW50bHkgc2VlbiBhbmQKKyAgICBtb2RpZmllZCBieSB0aGUgeW9jdG8ta2VybmVsIHRvb2wuCisKKyAgICBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgeW91ciBwb2t5IHJlcG8gaXMgYXQgL3BhdGgvdG8vcG9reSwgeW91ciBuZXcKKyAgICBCU1AgbGF5ZXIgaXMgYXQgL3BhdGgvdG8vcG9reS9tZXRhLW15YnNwLCBhbmQgeW91ciBidWlsZCBkaXJlY3RvcnkKKyAgICBpcyAvcGF0aC90by9idWlsZDoKKworICAgICQgZ2VkaXQgL3BhdGgvdG8vYnVpbGQvY29uZi9iYmxheWVycy5jb25mCisKKyAgICBCQkxBWUVSUyA/PSAiIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEgXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YS15b2N0byBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhLW15YnNwIFxcCisgICAgICAiCisiIiIKKworeW9jdG9fYnNwX2xpc3RfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1ic3AgbGlzdCBrYXJjaAorICAgICAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydHkgPHh4eD4KKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKKyBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgY29tcGxldGUgc2V0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYQorIHNwZWNpZmllZCBvcHRpb24gb3IgcHJvcGVydHkgbmVlZGVkIGJ5IHRoZSBCU1AgY3JlYXRpb24gcHJvY2Vzcy4KKworIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQgY2FuCisgYmUgc3BlY2lmaWVkIGZvciB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgdG8gdGhlICd5b2N0byBic3AgY3JlYXRlJworIGNvbW1hbmQuCisKKyBUaGUgc2Vjb25kIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgdGhhdCBleGlzdCBhbmQKKyBtdXN0IGhhdmUgdmFsdWVzIHNwZWNpZmllZCBmb3IgdGhlbSBpbiB0aGUgJ3lvY3RvIGJzcCBjcmVhdGUnIGNvbW1hbmQKKyBmb3IgdGhlIGdpdmVuICdrYXJjaCcuCisKKyBUaGUgdGhpcmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kIGNhbgorIGJlIHNwZWNpZmllZCBmb3IgYW55IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuCisgJ2thcmNoJyBpbiB0aGUgJ3lvY3RvIGJzcCBjcmVhdGUnIGNvbW1hbmQuCisKKyBTZWUgJ3lvY3RvLWJzcCBoZWxwIGxpc3QnIGZvciBtb3JlIGRldGFpbHMuCisiIiIKKworeW9jdG9fYnNwX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8tYnNwIGxpc3QgLSBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIG9wdGlvbnMgYW5kIEJTUCBwcm9wZXJ0aWVzCisKK1NZTk9QU0lTCisgICAgeW9jdG8tYnNwIGxpc3Qga2FyY2gKKyAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnRpZXMKKyAgICAgICAgICAgIFstLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICB5b2N0by1ic3AgbGlzdCA8a2FyY2g+IHByb3BlcnR5IDx4eHg+CisgICAgICAgICAgICBbLS1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEKKyAgICBzcGVjaWZpZWQgb3B0aW9uIG9yIHByb3BlcnR5IG5lZWRlZCBieSB0aGUgQlNQIGNyZWF0aW9uIHByb2Nlc3MuCisKKyAgICBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kCisgICAgY2FuIGJlIHNwZWNpZmllZCBmb3IgdGhlICdrYXJjaCcgcGFyYW1ldGVyIHRvIHRoZSAneW9jdG8gYnNwCisgICAgY3JlYXRlJyBjb21tYW5kLiAgRXhhbXBsZSBvdXRwdXQgZm9yIHRoZSAnbGlzdCBrYXJjaCcgY29tbWFuZDoKKworICAgICQgeW9jdG8tYnNwIGxpc3Qga2FyY2gKKyAgICBBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToKKyAgICAgICAgYXJtCisgICAgICAgIHBvd2VycGMKKyAgICAgICAgaTM4NgorICAgICAgICBtaXBzCisgICAgICAgIG1pcHM2NAorICAgICAgICB4ODZfNjQKKyAgICAgICAgcWVtdQorCisgICAgVGhlIHNlY29uZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QKKyAgICBhbmQgbXVzdCBoYXZlIHZhbHVlcyBzcGVjaWZpZWQgZm9yIHRoZW0gaW4gdGhlICd5b2N0byBic3AgY3JlYXRlJworICAgIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiAna2FyY2gnLiAgVGhpcyBjb21tYW5kIGlzIG1haW5seSBtZWFudCB0bworICAgIGFsbG93IHRoZSBkZXZlbG9wbWVudCB1c2VyIGludGVyZmFjZSBhbHRlcm5hdGl2ZXMgdG8gdGhlIGRlZmF1bHQKKyAgICB0ZXh0LWJhc2VkIHByb21wdGluZyBpbnRlcmZhY2UuICBJZiB0aGUgLW8gb3B0aW9uIGlzIHNwZWNpZmllZCwKKyAgICB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzLCBpbiBhZGRpdGlvbiB0byBiZWluZyBkaXNwbGF5ZWQsIHdpbGwgYmUKKyAgICB3cml0dGVuIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhIEpTT04gb2JqZWN0LiAgSW4gdGhpcyBjYXNlLCB0aGUKKyAgICBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZSBwYWlycyBjb3JyZXNwb25kaW5nCisgICAgdG8gdGhlIChwb3NzaWJseSBuZXN0ZWQpIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBkZWZpbmVkIGJ5IHRoZQorICAgIGlucHV0IHN0YXRlbWVudHMgdXNlZCBieSB0aGUgQlNQLiAgU29tZSBleGFtcGxlIG91dHB1dCBmb3IgdGhlCisgICAgJ2xpc3QgcHJvcGVydGllcycgY29tbWFuZDoKKworICAgICQgeW9jdG8tYnNwIGxpc3QgYXJtIHByb3BlcnRpZXMKKyAgICAidG91Y2hzY3JlZW4iIDogeworICAgICAgICAibXNnIiA6IERvZXMgeW91ciBCU1AgaGF2ZSBhIHRvdWNoc2NyZWVuPyAoeS9OKQorICAgICAgICAiZGVmYXVsdCIgOiBuCisgICAgICAgICJ0eXBlIiA6IGJvb2xlYW4KKyAgICB9CisgICAgInVib290X2xvYWRhZGRyZXNzIiA6IHsKKyAgICAgICAgIm1zZyIgOiBQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciBVQk9PVF9MT0FEQUREUkVTUy4KKyAgICAgICAgImRlZmF1bHQiIDogMHg4MDAwODAwMAorICAgICAgICAidHlwZSIgOiBlZGl0CisgICAgICAgICJwcmlvIiA6IDQwCisgICAgfQorICAgICJrZXJuZWxfY2hvaWNlIiA6IHsKKyAgICAgICAgInByaW8iIDogMTAKKyAgICAgICAgImRlZmF1bHQiIDogbGludXgteW9jdG9fMy4yCisgICAgICAgICJkZXBlbmRzLW9uIiA6IHVzZV9kZWZhdWx0X2tlcm5lbAorICAgICAgICAiZGVwZW5kcy1vbi12YWwiIDogbgorICAgICAgICAibXNnIiA6IFBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1AgPT4KKyAgICAgICAgInR5cGUiIDogY2hvaWNlbGlzdAorICAgICAgICAiZ2VuIiA6IGJzcC5rZXJuZWwua2VybmVscworICAgIH0KKyAgICAiaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4wIjoiIDogeworICAgICAgICAiYmFzZV9rYnJhbmNoX2xpbnV4X3lvY3RvXzNfMCIgOiB7CisgICAgICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAgICAgImRlZmF1bHQiIDogeW9jdG8vc3RhbmRhcmQKKyAgICAgICAgICAgICJkZXBlbmRzLW9uIiA6IG5ld19rYnJhbmNoX2xpbnV4X3lvY3RvXzNfMAorICAgICAgICAgICAgImRlcGVuZHMtb24tdmFsIiA6IHkKKyAgICAgICAgICAgICJtc2ciIDogUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb24gPT4KKyAgICAgICAgICAgICJ0eXBlIiA6IGNob2ljZWxpc3QKKyAgICAgICAgICAgICJnZW4iIDogYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMKKyAgICB9CisgICAgLgorICAgIC4KKyAgICAuCisKKyAgICBFYWNoIGVudHJ5IGluIHRoZSBvdXRwdXQgY29uc2lzdHMgb2YgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKKyAgICBlLmcuICJ0b3VjaHNjcmVlbiIsIGZvbGxvd2VkIGJ5IHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgZm9yIHRoYXQKKyAgICBlbGVtZW50IGVuY2xvc2VkIGluIGJyYWNlcy4gIFRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIHByb3ZpZGUKKyAgICBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhIGNvbXBsZXRlIHVzZXIgaW50ZXJmYWNlIHdpdGguCisgICAgVHdvIGZlYXR1cmVzIG9mIHRoZSBzY2hlbWUgcHJvdmlkZSBmb3IgY29uZGl0aW9uYWwgaW5wdXQuICBGaXJzdCwKKyAgICBpZiBhIFB5dGhvbiAiaWYiIHN0YXRlbWVudCBhcHBlYXJzIGluIHBsYWNlIG9mIGFuIGlucHV0IGVsZW1lbnQKKyAgICBuYW1lLCB0aGUgc2V0IG9mIGVuY2xvc2VkIGlucHV0IGVsZW1lbnRzIGFwcGx5IGFuZCBzaG91bGQgYmUKKyAgICBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgb25seSBpZiB0aGUgJ2lmJyBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRvCisgICAgdHJ1ZS4gIFRoZSB0ZXN0IGluIHRoZSBpZiBzdGF0ZW1lbnQgd2lsbCBhbHdheXMgcmVmZXJlbmNlIGFub3RoZXIKKyAgICBpbnB1dCBlbGVtZW50IGluIHRoZSBsaXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGJlaW5nCisgICAgdGVzdGVkIHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYmVmb3JlIHRoZSBlbGVtZW50cworICAgIGVuY2xvc2VkIGJ5IHRoZSBpZiBibG9jay4gIFNlY29uZGx5LCBpbiBhIHNpbWlsYXIgd2F5LCBzb21lCisgICAgZWxlbWVudHMgY29udGFpbiAiZGVwZW5kcy1vbiIgYW5kIGRlcGVuZHMtb24tdmFsIiB0YWdzLCB3aGljaCBtZWFuCisgICAgdGhhdCB0aGUgYWZmZWN0ZWQgaW5wdXQgZWxlbWVudCBzaG91bGQgb25seSBiZSBwcmVzZW50ZWQgdG8gdGhlCisgICAgdXNlciBpZiB0aGUgZWxlbWVudCBpdCBkZXBlbmRzIG9uIGhhcyBhbHJlYWR5IGJlZW4gcHJlc2VudGVkIHRvCisgICAgdGhlIHVzZXIgYW5kIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZvciB0aGF0CisgICAgZWxlbWVudC4KKworICAgIFRoZSB0aGlyZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQKKyAgICBjYW4gYmUgc3BlY2lmaWVkIGZvciBhbnkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4KKyAgICAna2FyY2gnIGluIHRoZSAneW9jdG8gYnNwIGNyZWF0ZScgY29tbWFuZC4gIElmIHRoZSAtbyBvcHRpb24gaXMKKyAgICBzcGVjaWZpZWQsIHRoZSBsaXN0IG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LCBpbiBhZGRpdGlvbgorICAgIHRvIGJlaW5nIGRpc3BsYXllZCwgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhCisgICAgSlNPTiBvYmplY3QuICBJbiB0aGlzIGNhc2UsIHRoZSBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YKKyAgICBuYW1lOnZhbHVlIHBhaXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcworICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvcGVydHkuCisKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGkzODYgcHJvcGVydHkgeHNlcnZlcl9jaG9pY2UKKyAgICAgICAgWyJ4c2VydmVyX3Zlc2EiLCAiVkVTQSB4c2VydmVyIHN1cHBvcnQiXQorICAgICAgICBbInhzZXJ2ZXJfaTkxNSIsICJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCJdCisKKyAgICAkIHlvY3RvLWJzcCBsaXN0IGFybSBwcm9wZXJ0eSBiYXNlX2ticmFuY2hfbGludXhfeW9jdG9fM18wCisgICAgICAgIEdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjAuLi4KKyAgICAgICAgWyJ5b2N0by9iYXNlIiwgInlvY3RvL2Jhc2UiXQorICAgICAgICBbInlvY3RvL2VnMjB0IiwgInlvY3RvL2VnMjB0Il0KKyAgICAgICAgWyJ5b2N0by9nbWE1MDAiLCAieW9jdG8vZ21hNTAwIl0KKyAgICAgICAgWyJ5b2N0by9wdnIiLCAieW9jdG8vcHZyIl0KKyAgICAgICAgWyJ5b2N0by9zdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIsICJ5b2N0by9zdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyJdCisgICAgICAgIFsieW9jdG8vc3RhbmRhcmQvYmFzZSIsICJ5b2N0by9zdGFuZGFyZC9iYXNlIl0KKyAgICAgICAgWyJ5b2N0by9zdGFuZGFyZC9jZWRhcnRyYWlsIiwgInlvY3RvL3N0YW5kYXJkL2NlZGFydHJhaWwiXQorICAgICAgICAuCisgICAgICAgIC4KKyAgICAgICAgLgorICAgICAgICBbInlvY3RvL3N0YW5kYXJkL3FlbXUtcHBjMzIiLCAieW9jdG8vc3RhbmRhcmQvcWVtdS1wcGMzMiJdCisgICAgICAgIFsieW9jdG8vc3RhbmRhcmQvcm91dGVyc3RhdGlvbnBybyIsICJ5b2N0by9zdGFuZGFyZC9yb3V0ZXJzdGF0aW9ucHJvIl0KKworICAgIFRoZSB0aGlyZCBmb3JtIGFzIHdlbGwgaXMgbWVhbnQgbWFpbmx5IGZvciBkZXZlbG9wZXJzIG9mCisgICAgYWx0ZXJuYXRpdmUgaW50ZXJmYWNlcyAtIGl0IGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIGZldGNoIHRoZQorICAgIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBnaXZlbiBpbnB1dCBlbGVtZW50IG9uLWRlbWFuZC4gIFRoaXMKKyAgICBvbi1kZW1hbmQgY2FwYWJpbGl0eSBpcyBlc3BlY2lhbGx5IHZhbHVhYmxlIGZvciBlbGVtZW50cyB0aGF0CisgICAgcmVxdWlyZSByZWxhdGl2ZWx5IGV4cGVuc2l2ZSByZW1vdGUgb3BlcmF0aW9ucyB0byBmdWxmaWxsLCBzdWNoIGFzCisgICAgdGhlIGV4YW1wbGUgdGhhdCByZXR1cm5zIHRoZSBzZXQgb2YgYnJhbmNoZXMgYXZhaWxhYmxlIGluIGEgcmVtb3RlCisgICAgZ2l0IHRyZWUgYWJvdmUuCisKKyIiIgorCisjIworIyB5b2N0by1rZXJuZWwgaGVscCBhbmQgdXNhZ2Ugc3RyaW5ncworIyMKKworeW9jdG9fa2VybmVsX3VzYWdlID0gIiIiCisKKyBNb2RpZnkgYW5kIGxpc3QgWW9jdG8gQlNQIGtlcm5lbCBjb25maWcgaXRlbXMgYW5kIHBhdGNoZXMuCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyBDdXJyZW50ICd5b2N0by1rZXJuZWwnIGNvbW1hbmRzIGFyZToKKyAgIGNvbmZpZyBsaXN0ICAgICAgIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorICAgY29uZmlnIGFkZCAgICAgICAgQWRkIG9yIG1vZGlmeSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYSBCU1AKKyAgIGNvbmZpZyBybSAgICAgICAgIFJlbW92ZSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmcm9tIGEgQlNQCisgICBwYXRjaCBsaXN0ICAgICAgICBMaXN0IHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJTUAorICAgcGF0Y2ggYWRkICAgICAgICAgUGF0Y2ggdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBCU1AKKyAgIHBhdGNoIHJtICAgICAgICAgIFJlbW92ZSBwYXRjaGVzIGZyb20gYSBCU1AKKyAgIGZlYXR1cmUgbGlzdCAgICAgIExpc3QgdGhlIGZlYXR1cmVzIHVzZWQgYnkgYSBCU1AKKyAgIGZlYXR1cmUgYWRkICAgICAgIEhhdmUgYSBCU1AgdXNlIGEgZmVhdHVyZQorICAgZmVhdHVyZSBybSAgICAgICAgSGF2ZSBhIEJTUCBzdG9wIHVzaW5nIGEgZmVhdHVyZQorICAgZmVhdHVyZXMgbGlzdCAgICAgTGlzdCB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIEJTUHMKKyAgIGZlYXR1cmUgZGVzY3JpYmUgIERlc2NyaWJlIGEgcGFydGljdWxhciBmZWF0dXJlCisgICBmZWF0dXJlIGNyZWF0ZSAgICBDcmVhdGUgYSBuZXcgQlNQLWxvY2FsIGZlYXR1cmUKKyAgIGZlYXR1cmUgZGVzdHJveSAgIFJlbW92ZSBhIEJTUC1sb2NhbCBmZWF0dXJlCisKKyBTZWUgJ3lvY3RvLWtlcm5lbCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKworIiIiCisKKworeW9jdG9fa2VybmVsX2hlbHBfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgaGVscCA8c3ViY29tbWFuZD4KKworIFRoaXMgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuCisiIiIKKworeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IHRoZSBtb2RpZmlhYmxlIHNldCBvZiBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmb3IgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgY29uZmlnIGxpc3QgPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSAnbW9kaWZpYWJsZScgY29uZmlnIGl0ZW1zIGZvciBhIEJTUCBpLmUuIHRoZQorIGl0ZW1zIHdoaWNoIGFyZSBlbGlnaWJsZSBmb3IgbW9kaWZpY2F0aW9uIG9yIHJlbW92YWwgYnkgb3RoZXIKKyB5b2N0by1rZXJuZWwgY29tbWFuZHMuCisKKyAnbW9kaWZpYWJsZScgY29uZmlnIGl0ZW1zIGFyZSB0aGUgY29uZmlnIGl0ZW1zIGNvbnRhaW5lZCBhIEJTUCdzCisgdXNlci1jb25maWcuY2ZnIGJhc2UgY29uZmlnLgorIiIiCisKKworeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBjb25maWcgbGlzdCAtIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGJhcmUga2VybmVsCisgICAgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBsaXN0IDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlICdtb2RpZmlhYmxlJyBjb25maWcgaXRlbXMgZm9yIGEgQlNQCisgICAgaS5lLiB0aGUgaXRlbXMgd2hpY2ggYXJlIGVsaWdpYmxlIGZvciBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbCBieQorICAgIG90aGVyIHlvY3RvLWtlcm5lbCBjb21tYW5kcy4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9jb25maWdfYWRkX3VzYWdlID0gIiIiCisKKyBBZGQgb3IgbW9kaWZ5IGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBjb25maWcgYWRkIDxic3AtbmFtZT4gWzxDT05GSUdfWFhYPXg+IC4uLl0KKworIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIENPTkZJR19YWFg9eCBpdGVtcyB0byBhIEJTUCdzIHVzZXItY29uZmlnLmNmZworIGJhc2UgY29uZmlnLgorIiIiCisKKworeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgLSBBZGQgb3IgbW9kaWZ5IGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zCisgICAgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgPGJzcC1uYW1lPiBbPENPTkZJR19YWFg9eD4gLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIENPTkZJR19YWFg9eCBpdGVtcyB0byBhIEJTUCdzCisgICAgZm9vLmNmZyBiYXNlIGNvbmZpZy4KKworICAgIE5PVEU6IEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBjb25maWcKKyAgICBvcHRpb25zIGJlaW5nIGFkZGVkIG1ha2Ugc2Vuc2Ugb3Igbm90IC0gdGhpcyBjb21tYW5kIGRvZXMgbm8KKyAgICBzYW5pdHkgY2hlY2tpbmcgb3IgdmVyaWZpY2F0aW9uIG9mIGFueSBraW5kIHRvIGVuc3VyZSB0aGF0IGEKKyAgICBjb25maWcgb3B0aW9uIHJlYWxseSBtYWtlcyBzZW5zZSBhbmQgd2lsbCBhY3R1YWxseSBiZSBzZXQgaW4gaW4KKyAgICB0aGUgZmluYWwgY29uZmlnLiAgRm9yIGV4YW1wbGUsIGlmIGEgY29uZmlnIG9wdGlvbiBkZXBlbmRzIG9uCisgICAgb3RoZXIgY29uZmlnIG9wdGlvbnMsIGl0IHdpbGwgYmUgdHVybmVkIG9mZiBieSBrY29uZmlnIGlmIHRoZQorICAgIG90aGVyIG9wdGlvbnMgYXJlbid0IHNldCBjb3JyZWN0bHkuCisiIiIKKworCit5b2N0b19rZXJuZWxfY29uZmlnX3JtX3VzYWdlID0gIiIiCisKKyBSZW1vdmUgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZnJvbSBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBjb25maWcgcm0gPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIHJlbW92ZXMgKHR1cm5zIG9mZikgb25lIG9yIG1vcmUgQ09ORklHX1hYWCBpdGVtcyBmcm9tIGEKKyBCU1AncyB1c2VyLWNvbmZpZy5jZmcgYmFzZSBjb25maWcuCisKKyBUaGUgc2V0IG9mIGNvbmZpZyBpdGVtcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEKKyBCU1AgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIGl0ZW1zIHRvIHJlbW92ZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9jb25maWdfcm1faGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBybSAtIFJlbW92ZSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmcm9tIGEKKyAgICBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgY29uZmlnIHJtIDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgcmVtb3ZlcyAodHVybnMgb2ZmKSBvbmUgb3IgbW9yZSBDT05GSUdfWFhYIGl0ZW1zIGZyb20gYQorICAgIEJTUCdzIHVzZXItY29uZmlnLmNmZyBiYXNlIGNvbmZpZy4KKworICAgIFRoZSBzZXQgb2YgY29uZmlnIGl0ZW1zIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZAorICAgIGZvciBhIEJTUCBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgaXRlbXMKKyAgICB0byByZW1vdmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF91c2FnZSA9ICIiIgorCisgTGlzdCB0aGUgcGF0Y2hlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGtlcm5lbCBmb3IgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIGEgQlNQLgorCisgTk9URTogdGhpcyBvbmx5IGFwcGxpZXMgdG8gcGF0Y2hlcyBsaXN0ZWQgaW4gdGhlIGtlcm5lbCByZWNpcGUncworIHVzZXItcGF0Y2hlcy5zY2MgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMgU1JDX1VSSSkuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCAtIExpc3QgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXJuZWwKKyAgICBmb3IgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggbGlzdCA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJTUC4KKworICAgIE5PVEU6IHRoaXMgb25seSBhcHBsaWVzIHRvIHBhdGNoZXMgbGlzdGVkIGluIHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICB1c2VyLXBhdGNoZXMuc2NjIGZpbGUgKGFuZCBjdXJyZW50bHkgcmVwZWF0ZWQgaW4gaXRzIFNSQ19VUkkpLgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX2FkZF91c2FnZSA9ICIiIgorCisgUGF0Y2ggdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBzcGVjaWZpYyBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIDxic3AtbmFtZT4gWzxQQVRDSD4gLi4uXQorCisgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgcGF0Y2hlcyB0byBhIEJTUCdzIG1hY2hpbmUgYnJhbmNoLiAgVGhlCisgcGF0Y2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgQlNQJ3MgbGludXgteW9jdG8ga2VybmVsIHVzZXItcGF0Y2hlcy5zY2MKKyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cyBTUkNfVVJJKSBhbmQgd2lsbCBiZSBndWFyYW50ZWVkCisgdG8gYmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX2FkZF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIC0gUGF0Y2ggdGhlIFlvY3RvIGtlcm5lbCBmb3IgYSBzcGVjaWZpYyBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIDxic3AtbmFtZT4gWzxQQVRDSD4gLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIHBhdGNoZXMgdG8gYSBCU1AncyBtYWNoaW5lIGJyYW5jaC4KKyAgICBUaGUgcGF0Y2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgQlNQJ3MgbGludXgteW9jdG8ga2VybmVsCisgICAgdXNlci1wYXRjaGVzLnNjYyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cyBTUkNfVVJJKSBhbmQKKyAgICB3aWxsIGJlIGd1YXJhbnRlZWQgdG8gYmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLgorCisgICAgTk9URTogSXQncyB1cCB0byB0aGUgdXNlciB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHBhdGNoZXMKKyAgICBiZWluZyBhZGRlZCBtYWtlcyBzZW5zZSBvciBub3QgLSB0aGlzIGNvbW1hbmQgZG9lcyBubyBzYW5pdHkKKyAgICBjaGVja2luZyBvciB2ZXJpZmljYXRpb24gb2YgYW55IGtpbmQgdG8gZW5zdXJlIHRoYXQgYSBwYXRjaCBjYW4KKyAgICBhY3R1YWxseSBiZSBhcHBsaWVkIHRvIHRoZSBCU1AncyBrZXJuZWwgYnJhbmNoOyBpdCdzIGFzc3VtZWQgdGhhdAorICAgIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRvbmUgdGhhdC4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9wYXRjaF9ybV91c2FnZSA9ICIiIgorCisgUmVtb3ZlIGEgcGF0Y2ggZnJvbSB0aGUgWW9jdG8ga2VybmVsIGZvciBhIHNwZWNpZmljIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBwYXRjaCBybSA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgcmVtb3ZlcyBvbmUgb3IgbW9yZSBwYXRjaGVzIGZyb20gYSBCU1AncyBtYWNoaW5lIGJyYW5jaC4KKyBUaGUgcGF0Y2ggd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEJTUCdzIGxpbnV4LXlvY3RvIGtlcm5lbAorIHVzZXItcGF0Y2hlcy5zY2MgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMgU1JDX1VSSSkgYW5kCisga2VybmVsIFNSQ19VUkkgZGlyLgorCisgVGhlIHNldCBvZiBwYXRjaGVzIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZCBmb3IgYSBCU1AKKyBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgcGF0Y2hlcyB0byByZW1vdmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfcm1faGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIHBhdGNoIHJtIC0gUmVtb3ZlIGEgcGF0Y2ggZnJvbSB0aGUgWW9jdG8ga2VybmVsIGZvciBhIHNwZWNpZmljIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBwYXRjaCBybSA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIHJlbW92ZXMgb25lIG9yIG1vcmUgcGF0Y2hlcyBmcm9tIGEgQlNQJ3MgbWFjaGluZQorICAgIGJyYW5jaC4gIFRoZSBwYXRjaCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgQlNQJ3MgbGludXgteW9jdG8KKyAgICBrZXJuZWwgdXNlci1wYXRjaGVzLnNjYyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cworICAgIFNSQ19VUkkpLgorCisgICAgVGhlIHNldCBvZiBwYXRjaGVzIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZCBmb3IgYQorICAgIEJTUCBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgcGF0Y2hlcyB0bworICAgIHJlbW92ZS4KKyIiIgorCit5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IHRoZSBCU1AgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcgdXNlZCBieSBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIGxpc3QgPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSBmZWF0dXJlcyBiZWluZyB1c2VkIGJ5IGEgQlNQIGkuZS4gdGhlIGZlYXR1cmVzCisgd2hpY2ggYXJlIGVsaWdpYmxlIGZvciBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbCBieSBvdGhlciB5b2N0by1rZXJuZWwKKyBjb21tYW5kcy4KKworICdtb2RpZmlhYmxlJyBmZWF0dXJlcyBhcmUgdGhlIGZlYXR1cmVzIGxpc3RlZCBpbiBhIEJTUCdzCisgdXNlci1mZWF0dXJlcy5zY2MgZmlsZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgbGlzdCAtIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGZlYXR1cmVzCisgICAgYmVpbmcgdXNlZCBieSBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGxpc3QgPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgJ21vZGlmaWFibGUnIGZlYXR1cmVzIGJlaW5nIHVzZWQgYnkgYSBCU1AKKyAgICBpLmUuIHRoZSBmZWF0dXJlcyB3aGljaCBhcmUgZWxpZ2libGUgZm9yIG1vZGlmaWNhdGlvbiBvciByZW1vdmFsCisgICAgYnkgb3RoZXIgeW9jdG8ta2VybmVsIGNvbW1hbmRzLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3VzYWdlID0gIiIiCisKKyBBZGQgdG8gb3IgbW9kaWZ5IHRoZSBsaXN0IG9mIGZlYXR1cmVzIGJlaW5nIHVzZWQgZm9yIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgYWRkIDxic3AtbmFtZT4gWy94eHh4L3l5eXkvZmVhdHVyZS5zY2MgLi4uXQorCisgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgZmVhdHVyZSBpdGVtcyB0byBhIEJTUCdzIGtlcm5lbAorIHVzZXItZmVhdHVyZXMuc2NjIGZpbGUsIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgdG8gbWFuYWdlIGZlYXR1cmVzIGluCisgYSB5b2N0by1ic3AtZ2VuZXJhdGVkIEJTUC4gIEZlYXR1cmVzIHRvIGJlIGFkZGVkIG11c3QgYmUgc3BlY2lmaWVkIGFzCisgZnVsbHktcXVhbGlmaWVkIGZlYXR1cmUgbmFtZXMuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgYWRkIC0gQWRkIHRvIG9yIG1vZGlmeSB0aGUgbGlzdCBvZiBmZWF0dXJlcworICAgIGJlaW5nIHVzZWQgZm9yIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgYWRkIDxic3AtbmFtZT4gWy94eHh4L3l5eXkvZmVhdHVyZS5zY2MgLi4uXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBhZGRzIG9uZSBvciBtb3JlIGZlYXR1cmUgaXRlbXMgdG8gYSBCU1AncworICAgIHVzZXItZmVhdHVyZXMuc2NjIGZpbGUsIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgdG8gbWFuYWdlIGZlYXR1cmVzCisgICAgaW4gYSB5b2N0by1ic3AtZ2VuZXJhdGVkIEJTUC4gIEZlYXR1cmVzIHRvIGJlIGFkZGVkIG11c3QgYmUKKyAgICBzcGVjaWZpZWQgYXMgZnVsbHktcXVhbGlmaWVkIGZlYXR1cmUgbmFtZXMuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9ybV91c2FnZSA9ICIiIgorCisgUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBsaXN0IG9mIGZlYXR1cmVzIGJlaW5nIHVzZWQgZm9yIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgcm0gPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIHJlbW92ZXMgKHR1cm5zIG9mZikgb25lIG9yIG1vcmUgZmVhdHVyZXMgZnJvbSBhIEJTUCdzCisgdXNlci1mZWF0dXJlcy5zY2MgZmlsZSwgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCB0byBtYW5hZ2UgZmVhdHVyZXMgaW4KKyBhIHlvY3RvLWJzcC1nZW5lcmF0ZWQgQlNQLgorCisgVGhlIHNldCBvZiBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEgQlNQCisgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIGl0ZW1zIHRvIHJlbW92ZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIHJtIC0gUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBsaXN0IG9mCisgICAgZmVhdHVyZXMgYmVpbmcgdXNlZCBmb3IgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBybSA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIHJlbW92ZXMgKHR1cm5zIG9mZikgb25lIG9yIG1vcmUgZmVhdHVyZXMgZnJvbSBhIEJTUCdzCisgICAgdXNlci1mZWF0dXJlcy5zY2MgZmlsZSwgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCB0byBtYW5hZ2UgZmVhdHVyZXMKKyAgICBpbiBhIHlvY3RvLWJzcC1nZW5lcmF0ZWQgQlNQLgorCisgICAgVGhlIHNldCBvZiBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYmUgcmVtb3ZlZCBieSB0aGlzIGNvbW1hbmQgZm9yIGEKKyAgICBCU1AgaXMgbGlzdGVkIGFuZCB0aGUgdXNlciBwcm9tcHRlZCBmb3IgdGhlIHNwZWNpZmljIGl0ZW1zIHRvCisgICAgcmVtb3ZlLgorIiIiCisKKworeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IHRoZSBzZXQgb2Yga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZSB0byBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlcyBsaXN0IDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgY29tcGxldGUgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgdG8gYQorIEJTUC4gIFRoaXMgaW5jbHVkZXMgdGhlIGZlYXR1cmVzIGNvbnRhaW5lZCBpbiBsaW51eC15b2N0byBtZXRhCisgYnJhbmNoZXMgYXMgd2VsbCBhcyByZWNpcGUtc3BhY2UgZmVhdHVyZXMgZGVmaW5lZCBsb2NhbGx5IHRvIHRoZSBCU1AuCisiIiIKKworCit5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmVzIGxpc3QgLSBMaXN0IHRoZSBzZXQgb2Yga2VybmVsIGZlYXR1cmVzCisgICAgYXZhaWxhYmxlIHRvIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmVzIGxpc3QgPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgICBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlIGNvbXBsZXRlIHNldCBvZiBrZXJuZWwgZmVhdHVyZXMgYXZhaWxhYmxlCisgICAgIHRvIGEgQlNQLiAgVGhpcyBpbmNsdWRlcyB0aGUgZmVhdHVyZXMgY29udGFpbmVkIGluIGxpbnV4LXlvY3RvCisgICAgIG1ldGEgYnJhbmNoZXMgYXMgd2VsbCBhcyByZWNpcGUtc3BhY2UgZmVhdHVyZXMgZGVmaW5lZCBsb2NhbGx5IHRvCisgICAgIHRoZSBCU1AuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV91c2FnZSA9ICIiIgorCisgUHJpbnQgdGhlIGRlc2NyaXB0aW9uIGFuZCBjb21wYXRpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGtlcm5lbCBmZWF0dXJlCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzY3JpYmUgPGJzcC1uYW1lPiBbL3h4eHgveXl5eS9mZWF0dXJlLnNjYyAuLi5dCisKKyBUaGlzIGNvbW1hbmQgcHJpbnRzIHRoZSBkZXNjcmlwdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBvZiBhIHNwZWNpZmljCisgZmVhdHVyZSBpbiB0aGUgZm9ybWF0ICdkZXNjcmlwdGlvbiBbY29tcGF0aWJpbGl0eV0uCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXNjcmliZSAtIHByaW50IHRoZSBkZXNjcmlwdGlvbiBhbmQKKyAgICBjb21wYXRpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGtlcm5lbCBmZWF0dXJlCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzY3JpYmUgPGJzcC1uYW1lPiBbL3h4eHgveXl5eS9mZWF0dXJlLnNjYyAuLi5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIHByaW50cyB0aGUgZGVzY3JpcHRpb24gYW5kIGNvbXBhdGliaWxpdHkgb2YgYQorICAgIHNwZWNpZmljIGZlYXR1cmUgaW4gdGhlIGZvcm1hdCAnZGVzY3JpcHRpb24gW2NvbXBhdGliaWxpdHldLiAgSWYKKyAgICB0aGUgZmVhdHVyZSBkb2Vzbid0IGRlZmluZSBhIGRlc2NyaXB0aW9uIG9yIGNvbXBhdGliaWxpdHksIGEKKyAgICBzdHJpbmcgd2l0aCBnZW5lcmljIHVua25vd24gdmFsdWVzIHdpbGwgYmUgcHJpbnRlZC4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlIGluIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgY3JlYXRlIDxic3AtbmFtZT4gbmV3ZmVhdHVyZS5zY2MgXAorICAgICAgICAiRmVhdHVyZSBEZXNjcmlwdGlvbiIgY2FwYWJpbGl0aWVzIFs8Q09ORklHX1hYWD14PiAuLi5dIFs8UEFUQ0g+IC4uLl0KKworIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgbmV3IGtlcm5lbCBmZWF0dXJlIGZyb20gdGhlIGJhcmUgY29uZmlnCisgb3B0aW9ucyBhbmQgcGF0Y2hlcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBjcmVhdGUgLSBjcmVhdGUgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUKKyAgICBpbiBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGNyZWF0ZSA8YnNwLW5hbWU+IG5ld2ZlYXR1cmUuc2NjIFwKKyAgICAgICAgIkZlYXR1cmUgRGVzY3JpcHRpb24iIGNhcGFiaWxpdGllcyBbPENPTkZJR19YWFg9eD4gLi4uXSBbPFBBVENIPiAuLi5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBuZXcga2VybmVsIGZlYXR1cmUgZnJvbSB0aGUgYmFyZSBjb25maWcKKyAgICBvcHRpb25zIGFuZCBwYXRjaGVzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lLiAgVGhlIG5ldworICAgIGZlYXR1cmUgd2lsbCBiZSBjcmVhdGVkIGluIHJlY2lwZS1zcGFjZSwgc3BlY2lmaWNhbGx5IGluIGVpdGhlcgorICAgIHRoZSBrZXJuZWwgLmJiYXBwZW5kJ3MgL2ZpbGVzL2NmZyBvciAvZmlsZXMvZmVhdHVyZXMgc3ViZGlyZWN0b3J5LAorICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgZmVhdHVyZSBjb250YWlucyBjb25maWcgaXRlbXMgb25seQorICAgIG9yIGNvbmZpZyBpdGVtcyBhbG9uZyB3aXRoIHBhdGNoZXMuICBUaGUgbmFtZWQgZmVhdHVyZSBtdXN0IGVuZAorICAgIHdpdGggLnNjYyBhbmQgbXVzdCBub3QgY29udGFpbiBhIGZlYXR1cmUgZGlyZWN0b3J5IHRvIGNvbnRhaW4gdGhlCisgICAgZmVhdHVyZSAodGhpcyB3aWxsIGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSksIGFuZCBhIGZlYXR1cmUKKyAgICBkZWNyaXB0aW9uIGluIGRvdWJsZS1xdW90ZXMgYWxvbmcgd2l0aCBhIGNhcGFiaWxpdGllcyBzdHJpbmcKKyAgICAod2hpY2ggZm9yIHRoZSB0aW1lIGJlaW5nIGNhbiBiZSBvbmUgb2Y6ICdhbGwnIG9yICdib2FyZCcpLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV91c2FnZSA9ICIiIgorCisgRGVzdHJveSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBpbiBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBmZWF0dXJlIGRlc3Ryb3kgPGJzcC1uYW1lPiBmZWF0dXJlLnNjYworCisgVGhpcyBjb21tYW5kIGRlc3Ryb3lzIGEga2VybmVsIGZlYXR1cmUgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWVkIEJTUCdzCisgcmVjaXBlLXNwYWNlIGtlcm5lbCBkZWZpbml0aW9uLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXN0cm95IDxic3AtbmFtZT4gZmVhdHVyZS5zY2MgLSBkZXN0cm95IGEKKyAgICByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUgaW4gYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXN0cm95IDxic3AtbmFtZT4gZmVhdHVyZS5zY2MKKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgZGVzdHJveXMgYSBrZXJuZWwgZmVhdHVyZSBkZWZpbmVkIGluIHRoZSBzcGVjaWZpZWQKKyAgICBCU1AncyByZWNpcGUtc3BhY2Uga2VybmVsIGRlZmluaXRpb24uICBUaGUgbmFtZWQgZmVhdHVyZSBtdXN0IGVuZAorICAgIHdpdGggLnNjYyBhbmQgbXVzdCBub3QgY29udGFpbiBhIGZlYXR1cmUgZGlyZWN0b3J5IHRvIGNvbnRhaW4gdGhlCisgICAgZmVhdHVyZSAodGhpcyB3aWxsIGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSkuICBJZiB0aGUga2VybmVsCisgICAgZmVhdHVyZSBpcyBpbiB1c2UgYnkgYSBCU1AsIGl0IGNhbid0IGJlIHJlbW92ZWQgdW50aWwgdGhlIEJTUAorICAgIHN0b3BzIHVzaW5nIGl0IChzZWUgeW9jdG8ta2VybmVsIGZlYXR1cmUgcm0gdG8gc3RvcCB1c2luZyBpdCkuCisiIiIKKworIyMKKyMgeW9jdG8tbGF5ZXIgaGVscCBhbmQgdXNhZ2Ugc3RyaW5ncworIyMKKworeW9jdG9fbGF5ZXJfdXNhZ2UgPSAiIiIKKworIENyZWF0ZSBhIGdlbmVyaWMgWW9jdG8gbGF5ZXIuCisKKyB1c2FnZTogeW9jdG8tbGF5ZXIgWy0tdmVyc2lvbl0gWy0taGVscF0gQ09NTUFORCBbQVJHU10KKworIEN1cnJlbnQgJ3lvY3RvLWxheWVyJyBjb21tYW5kcyBhcmU6CisgICAgY3JlYXRlICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IGdlbmVyaWMgWW9jdG8gbGF5ZXIKKyAgICBsaXN0ICAgICAgICAgICAgICBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIGlucHV0IG9wdGlvbnMgYW5kIHByb3BlcnRpZXMKKworIFNlZSAneW9jdG8tbGF5ZXIgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuCisiIiIKKworeW9jdG9fbGF5ZXJfaGVscF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHlvY3RvLWxheWVyIGhlbHAgPHN1YmNvbW1hbmQ+CisKKyBUaGlzIGNvbW1hbmQgZGlzcGxheXMgZGV0YWlsZWQgaGVscCBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLgorIiIiCisKK3lvY3RvX2xheWVyX2NyZWF0ZV91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgbmV3IGdlbmVyaWMgWW9jdG8gbGF5ZXIKKworIHVzYWdlOiB5b2N0by1sYXllciBjcmVhdGUgPGxheWVyLW5hbWU+IFtsYXllcl9wcmlvcml0eV0KKyAgICAgICAgICAgIFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgZ2VuZXJpYyBZb2N0byBsYXllciBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkCisgcGFyYW1ldGVycy4gIFRoZSBuZXcgbGF5ZXIgd2lsbCBiZSBhIG5ldyBZb2N0byBsYXllciBjb250YWluZWQgYnkKKyBkZWZhdWx0IHdpdGhpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXMKKyAnbWV0YS1sYXllci1uYW1lJy4gIFRoZSAtbyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIGxheWVyIGluIGEKKyBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworIElmIGxheWVyX3ByaW9yaXR5IGlzIHNwZWNpZmllZCwgYSBzaW1wbGUgbGF5ZXIgd2lsbCBiZSBjcmVhdGVkIHVzaW5nCisgdGhlIGdpdmVuIGxheWVyIHByaW9yaXR5LCBhbmQgdGhlIHVzZXIgd2lsbCBub3QgYmUgcHJvbXB0ZWQgZm9yCisgZnVydGhlciBpbnB1dC4KKworIE5PVEU6IE9uY2UgY3JlYXRlZCwgeW91IHNob3VsZCBhZGQgeW91ciBuZXcgbGF5ZXIgdG8geW91cgorIGJibGF5ZXJzLmNvbmYgZmlsZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgc3Vic2VxdWVudGx5IHNlZW4gYW5kCisgbW9kaWZpZWQgYnkgdGhlIHlvY3RvLWtlcm5lbCB0b29sLiAgSW5zdHJ1Y3Rpb25zIGZvciBkb2luZyB0aGlzIGNhbgorIGJlIGZvdW5kIGluIHRoZSBSRUFETUUgZmlsZSBnZW5lcmF0ZWQgaW4gdGhlIGxheWVyJ3MgdG9wLWxldmVsCisgZGlyZWN0b3J5LgorCisgU2VlICd5b2N0byBsYXllciBoZWxwIGNyZWF0ZScgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorIiIiCisKK3lvY3RvX2xheWVyX2NyZWF0ZV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1sYXllciBjcmVhdGUgLSBDcmVhdGUgYSBuZXcgZ2VuZXJpYyBZb2N0byBsYXllcgorCitTWU5PUFNJUworICAgIHlvY3RvLWxheWVyIGNyZWF0ZSA8bGF5ZXItbmFtZT4gW2xheWVyX3ByaW9yaXR5XQorICAgICAgICBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIGdlbmVyaWMgWW9jdG8gbGF5ZXIgYmFzZWQgb24gdGhlIHNwZWNpZmllZAorICAgIHBhcmFtZXRlcnMuICBUaGUgbmV3IGxheWVyIHdpbGwgYmUgYSBuZXcgWW9jdG8gbGF5ZXIgY29udGFpbmVkIGJ5CisgICAgZGVmYXVsdCB3aXRoaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzCisgICAgJ21ldGEtbGF5ZXItbmFtZScuICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBsYXllcgorICAgIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyAgICBJZiBsYXllcl9wcmlvcml0eSBpcyBzcGVjaWZpZWQsIGEgc2ltcGxlIGxheWVyIHdpbGwgYmUgY3JlYXRlZAorICAgIHVzaW5nIHRoZSBnaXZlbiBsYXllciBwcmlvcml0eSwgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGJlIHByb21wdGVkCisgICAgZm9yIGZ1cnRoZXIgaW5wdXQuCisKKyAgICBUaGUgbGF5ZXItc3BlY2lmaWMgcHJvcGVydGllcyB0aGF0IGRlZmluZSB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZQorICAgIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGxheWVyIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZQorICAgIHVzaW5nIHRoZSAtaSBvcHRpb24gYW5kIHN1cHBseWluZyBhIEpTT04gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlCisgICAgc2V0IG9mIG5hbWU6dmFsdWUgcGFpcnMgbmVlZGVkIGJ5IHRoZSBsYXllci4KKworICAgIElmIHRoZSAtaSBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSB1c2VyIHdpbGwgYmUgaW50ZXJhY3RpdmVseQorICAgIHByb21wdGVkIGZvciBlYWNoIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0eSB2YWx1ZXMsIHdoaWNoIHdpbGwgdGhlbgorICAgIGJlIHVzZWQgYXMgdmFsdWVzIGZvciBsYXllciBnZW5lcmF0aW9uLgorCisgICAgVGhlIHNldCBvZiBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBjYW4gYmUgbGlzdGVkIHVzaW5nIHRoZQorICAgICd5b2N0by1sYXllciBsaXN0JyBjb21tYW5kLgorCisgICAgU3BlY2lmeWluZyAtYyBjYXVzZXMgdGhlIFB5dGhvbiBjb2RlIGdlbmVyYXRlZCBhbmQgZXhlY3V0ZWQgdG8KKyAgICBjcmVhdGUgdGhlIGxheWVyIHRvIGJlIGR1bXBlZCB0byB0aGUgJ2JzcGdlbi5vdXQnIGZpbGUgaW4gdGhlCisgICAgY3VycmVudCBkaXJlY3RvcnksIGFuZCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KKworICAgIE5PVEU6IE9uY2UgY3JlYXRlZCwgeW91IHNob3VsZCBhZGQgeW91ciBuZXcgbGF5ZXIgdG8geW91cgorICAgIGJibGF5ZXJzLmNvbmYgZmlsZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgc3Vic2VxdWVudGx5IHNlZW4gYW5kCisgICAgbW9kaWZpZWQgYnkgdGhlIHlvY3RvLWtlcm5lbCB0b29sLiAgSW5zdHJ1Y3Rpb25zIGZvciBkb2luZyB0aGlzCisgICAgY2FuIGJlIGZvdW5kIGluIHRoZSBSRUFETUUgZmlsZSBnZW5lcmF0ZWQgaW4gdGhlIGxheWVyJ3MgdG9wLWxldmVsCisgICAgZGlyZWN0b3J5LgorCisgICAgRm9yIGV4YW1wbGUsIGFzc3VtaW5nIHlvdXIgcG9reSByZXBvIGlzIGF0IC9wYXRoL3RvL3Bva3ksIHlvdXIgbmV3CisgICAgbGF5ZXIgaXMgYXQgL3BhdGgvdG8vcG9reS9tZXRhLW15bGF5ZXIsIGFuZCB5b3VyIGJ1aWxkIGRpcmVjdG9yeQorICAgIGlzIC9wYXRoL3RvL2J1aWxkOgorCisgICAgJCBnZWRpdCAvcGF0aC90by9idWlsZC9jb25mL2JibGF5ZXJzLmNvbmYKKworICAgIEJCTEFZRVJTID89ICIgXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YSBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhLXlvY3RvIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEtbXlsYXllciBcXAorICAgICAgIgorIiIiCisKK3lvY3RvX2xheWVyX2xpc3RfdXNhZ2UgPSAiIiIKKworIHVzYWdlOiB5b2N0by1sYXllciBsaXN0IHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgICAgIHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydHkgPHh4eD4KKyAgICAgICAgICAgICAgICBbLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKKyBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgY29tcGxldGUgc2V0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYQorIHNwZWNpZmllZCBvcHRpb24gb3IgcHJvcGVydHkgbmVlZGVkIGJ5IHRoZSBsYXllciBjcmVhdGlvbiBwcm9jZXNzLgorCisgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgdGhhdCBleGlzdCBhbmQKKyBtdXN0IGhhdmUgdmFsdWVzIHNwZWNpZmllZCBmb3IgdGhlbSBpbiB0aGUgJ3lvY3RvLWxheWVyIGNyZWF0ZScKKyBjb21tYW5kLgorCisgVGhlIHNlY29uZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQgY2FuCisgYmUgc3BlY2lmaWVkIGZvciBhbnkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBpbiB0aGUgJ3lvY3RvLWxheWVyCisgY3JlYXRlJyBjb21tYW5kLgorCisgU2VlICd5b2N0by1sYXllciBoZWxwIGxpc3QnIGZvciBtb3JlIGRldGFpbHMuCisiIiIKKworeW9jdG9fbGF5ZXJfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1sYXllciBsaXN0IC0gTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBsYXllciBpbnB1dCBvcHRpb25zIGFuZCBwcm9wZXJ0aWVzCisKK1NZTk9QU0lTCisgICAgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0aWVzCisgICAgICAgICAgICBbLS1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisgICAgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0eSA8eHh4PgorICAgICAgICAgICAgWy0tbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBjb21wbGV0ZSBzZXQgb2YgcG9zc2libGUgdmFsdWVzIGZvciBhCisgICAgc3BlY2lmaWVkIG9wdGlvbiBvciBwcm9wZXJ0eSBuZWVkZWQgYnkgdGhlIGxheWVyIGNyZWF0aW9uIHByb2Nlc3MuCisKKyAgICBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGllcyB0aGF0IGV4aXN0CisgICAgYW5kIG11c3QgaGF2ZSB2YWx1ZXMgc3BlY2lmaWVkIGZvciB0aGVtIGluIHRoZSAneW9jdG8tbGF5ZXIKKyAgICBjcmVhdGUnIGNvbW1hbmQuICBUaGlzIGNvbW1hbmQgaXMgbWFpbmx5IG1lYW50IHRvIGFpZCB0aGUKKyAgICBkZXZlbG9wbWVudCBvZiB1c2VyIGludGVyZmFjZSBhbHRlcm5hdGl2ZXMgdG8gdGhlIGRlZmF1bHQKKyAgICB0ZXh0LWJhc2VkIHByb21wdGluZyBpbnRlcmZhY2UuICBJZiB0aGUgLW8gb3B0aW9uIGlzIHNwZWNpZmllZCwKKyAgICB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzLCBpbiBhZGRpdGlvbiB0byBiZWluZyBkaXNwbGF5ZWQsIHdpbGwgYmUKKyAgICB3cml0dGVuIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhIEpTT04gb2JqZWN0LiAgSW4gdGhpcyBjYXNlLCB0aGUKKyAgICBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZSBwYWlycyBjb3JyZXNwb25kaW5nCisgICAgdG8gdGhlIChwb3NzaWJseSBuZXN0ZWQpIGRpY3Rpb25hcnkgb2YgcHJvcGVydGllcyBkZWZpbmVkIGJ5IHRoZQorICAgIGlucHV0IHN0YXRlbWVudHMgdXNlZCBieSB0aGUgQlNQLiAgU29tZSBleGFtcGxlIG91dHB1dCBmb3IgdGhlCisgICAgJ2xpc3QgcHJvcGVydGllcycgY29tbWFuZDoKKworICAgICQgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0aWVzCisgICAgImV4YW1wbGVfYmJhcHBlbmRfbmFtZSIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IGV4YW1wbGUKKyAgICAgICAgIm1zZyIgOiBQbGVhc2UgZW50ZXIgdGhlIG5hbWUgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgYmJhcHBlbmQgZmlsZToKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImNyZWF0ZV9leGFtcGxlX3JlY2lwZSIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IG4KKyAgICAgICAgIm1zZyIgOiBXb3VsZCB5b3UgbGlrZSB0byBoYXZlIGFuIGV4YW1wbGUgcmVjaXBlIGNyZWF0ZWQ/ICh5L24pCisgICAgICAgICJ0eXBlIiA6IGJvb2xlYW4KKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorICAgICJleGFtcGxlX3JlY2lwZV9uYW1lIiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogZXhhbXBsZQorICAgICAgICAibXNnIiA6IFBsZWFzZSBlbnRlciB0aGUgbmFtZSB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgeW91ciBleGFtcGxlIHJlY2lwZToKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImxheWVyX3ByaW9yaXR5IiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogNgorICAgICAgICAibXNnIiA6IFBsZWFzZSBlbnRlciB0aGUgbGF5ZXIgcHJpb3JpdHkgeW91J2QgbGlrZSB0byB1c2UgZm9yIHRoZSBsYXllcjoKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImNyZWF0ZV9leGFtcGxlX2JiYXBwZW5kIiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogbgorICAgICAgICAibXNnIiA6IFdvdWxkIHlvdSBsaWtlIHRvIGhhdmUgYW4gZXhhbXBsZSBiYmFwcGVuZCBmaWxlIGNyZWF0ZWQ/ICh5L24pCisgICAgICAgICJ0eXBlIiA6IGJvb2xlYW4KKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorICAgICJleGFtcGxlX2JiYXBwZW5kX3ZlcnNpb24iIDogeworICAgICAgICAiZGVmYXVsdCIgOiAwLjEKKyAgICAgICAgIm1zZyIgOiBQbGVhc2UgZW50ZXIgdGhlIHZlcnNpb24gbnVtYmVyIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGJiYXBwZW5kIGZpbGUgKHRoaXMgc2hvdWxkIG1hdGNoIHRoZSByZWNpcGUgeW91J3JlIGFwcGVuZGluZyB0byk6CisgICAgICAgICJ0eXBlIiA6IGVkaXQKKyAgICAgICAgInByaW8iIDogMjAKKyAgICAgICAgImZpbGVuYW1lIiA6IC9ob21lL3Ryei95b2N0by95b2N0by1sYXllci1kZXYvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCisgICAgfQorCisgICAgRWFjaCBlbnRyeSBpbiB0aGUgb3V0cHV0IGNvbnNpc3RzIG9mIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBlbGVtZW50CisgICAgZS5nLiAibGF5ZXJfcHJpb3JpdHkiLCBmb2xsb3dlZCBieSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGZvciB0aGF0CisgICAgZWxlbWVudCBlbmNsb3NlZCBpbiBicmFjZXMuICBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBwcm92aWRlCisgICAgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBjb21wbGV0ZSB1c2VyIGludGVyZmFjZS4gIFR3bworICAgIGZlYXR1cmVzIG9mIHRoZSBzY2hlbWUgcHJvdmlkZSBmb3IgY29uZGl0aW9uYWwgaW5wdXQuICBGaXJzdCwgaWYgYQorICAgIFB5dGhvbiAiaWYiIHN0YXRlbWVudCBhcHBlYXJzIGluIHBsYWNlIG9mIGFuIGlucHV0IGVsZW1lbnQgbmFtZSwKKyAgICB0aGUgc2V0IG9mIGVuY2xvc2VkIGlucHV0IGVsZW1lbnRzIGFwcGx5IGFuZCBzaG91bGQgYmUgcHJlc2VudGVkCisgICAgdG8gdGhlIHVzZXIgb25seSBpZiB0aGUgJ2lmJyBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRvIHRydWUuICBUaGUKKyAgICB0ZXN0IGluIHRoZSBpZiBzdGF0ZW1lbnQgd2lsbCBhbHdheXMgcmVmZXJlbmNlIGFub3RoZXIgaW5wdXQKKyAgICBlbGVtZW50IGluIHRoZSBsaXN0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGJlaW5nIHRlc3RlZAorICAgIHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYmVmb3JlIHRoZSBlbGVtZW50cyBlbmNsb3NlZCBieQorICAgIHRoZSBpZiBibG9jay4gIFNlY29uZGx5LCBpbiBhIHNpbWlsYXIgd2F5LCBzb21lIGVsZW1lbnRzIGNvbnRhaW4KKyAgICAiZGVwZW5kcy1vbiIgYW5kIGRlcGVuZHMtb24tdmFsIiB0YWdzLCB3aGljaCBtZWFuIHRoYXQgdGhlCisgICAgYWZmZWN0ZWQgaW5wdXQgZWxlbWVudCBzaG91bGQgb25seSBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgaWYgdGhlCisgICAgZWxlbWVudCBpdCBkZXBlbmRzIG9uIGhhcyBhbHJlYWR5IGJlZW4gcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFuZAorICAgIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZvciB0aGF0IGVsZW1lbnQuCisKKyAgICBUaGUgc2Vjb25kIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGV4aXN0IGFuZAorICAgIGNhbiBiZSBzcGVjaWZpZWQgZm9yIGFueSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluIHRoZQorICAgICd5b2N0by1sYXllciBjcmVhdGUnIGNvbW1hbmQuICBJZiB0aGUgLW8gb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlCisgICAgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSwgaW4gYWRkaXRpb24gdG8gYmVpbmcKKyAgICBkaXNwbGF5ZWQsIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgYSBKU09OIG9iamVjdC4KKyAgICBJbiB0aGlzIGNhc2UsIHRoZSBvYmplY3Qgd2lsbCBjb25zaXN0IG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZQorICAgIHBhaXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcyBhc3NvY2lhdGVkCisgICAgd2l0aCB0aGUgcHJvcGVydHkuCisKKyAgICAkIHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydHkgbGF5ZXJfcHJpb3JpdHkKKyAgICAgW25vIG91dHB1dCAtIGxheWVyX3ByaW9yaXR5IGlzIGEgdGV4dCBmaWVsZCB0aGF0IGhhcyBubyBlbnVtZXJhYmxlIHZhbHVlc10KKworICAgIFRoZSBzZWNvbmQgZm9ybSBhcyB3ZWxsIGlzIG1lYW50IG1haW5seSBmb3IgZGV2ZWxvcGVycyBvZgorICAgIGFsdGVybmF0aXZlIGludGVyZmFjZXMgLSBpdCBhbGxvd3MgdGhlIGRldmVsb3BlciB0byBmZXRjaCB0aGUKKyAgICBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gaW5wdXQgZWxlbWVudCBvbi1kZW1hbmQuICBUaGlzCisgICAgb24tZGVtYW5kIGNhcGFiaWxpdHkgaXMgZXNwZWNpYWxseSB2YWx1YWJsZSBmb3IgZWxlbWVudHMgdGhhdAorICAgIHJlcXVpcmUgcmVsYXRpdmVseSBleHBlbnNpdmUgcmVtb3RlIG9wZXJhdGlvbnMgdG8gZnVsZmlsbCwgc3VjaCBhcworICAgIHRoZSBleGFtcGxlIHRoYXQgcmV0dXJucyB0aGUgc2V0IG9mIGJyYW5jaGVzIGF2YWlsYWJsZSBpbiBhIHJlbW90ZQorICAgIGdpdCB0cmVlIGFib3ZlLgorCisiIiIKKworIyMKKyMgdGVzdCBjb2RlCisjIworCit0ZXN0X2JzcF9wcm9wZXJ0aWVzID0geworICAgICdzbXAnOiAneWVzJywKKyAgICAndG91Y2hzY3JlZW4nOiAneWVzJywKKyAgICAna2V5Ym9hcmQnOiAnbm8nLAorICAgICd4c2VydmVyJzogJ3llcycsCisgICAgJ3hzZXJ2ZXJfY2hvaWNlJzogJ3hzZXJ2ZXItaTkxNScsCisgICAgJ2ZlYXR1cmVzJzogWydnb29kZmVhdHVyZScsICdncmVhdGZlYXR1cmUnXSwKKyAgICAndHVuZWZpbGUnOiAndHVuZS1xdWFyaycsCit9CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTY4YjYwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Ava2VybmVsLnB5CkBAIC0wLDAgKzEsMTA3MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGtlcm5lbC1yZWxhdGVkIGZ1bmN0aW9ucyB1c2VkIGJ5CisjICd5b2N0by1rZXJuZWwnIHRvIG1hbmFnZSBrZXJuZWwgY29uZmlnIGl0ZW1zIGFuZCBwYXRjaGVzIGZvciBZb2N0bworIyBCU1BzLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIHRhZ3MgaW1wb3J0ICoKK2ltcG9ydCBnbG9iCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBlbmdpbmUgaW1wb3J0IGNyZWF0ZV9jb250ZXh0CisKKworZGVmIGZpbmRfYmJsYXllcnMoKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBzYW5pdGl6ZWQgbGlzdCBvZiB0aGUgbGF5ZXJzIGZvdW5kIGluIEJCTEFZRVJTLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgYnVpbGRkaXIgPSBvcy5lbnZpcm9uWyJCVUlMRERJUiJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgYmJsYXllcnNfY29uZiA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisKKyAgICBsYXllcnMgPSBbXQorCisgICAgYml0YmFrZV9lbnZfY21kID0gImJpdGJha2UgLWUiCisgICAgYml0YmFrZV9lbnZfbGluZXMgPSBzdWJwcm9jZXNzLlBvcGVuKGJpdGJha2VfZW52X2NtZCwgc2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorCisgICAgaWYgbm90IGJpdGJha2VfZW52X2xpbmVzOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZ2V0ICclcycgb3V0cHV0LCBleGl0aW5nLiIgJSBiaXRiYWtlX2Vudl9jbWQKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZvciBsaW5lIGluIGJpdGJha2VfZW52X2xpbmVzLnNwbGl0KCdcbicpOgorICAgICAgICBiYmxheWVycyA9IGdldF9saW5lX3ZhbChsaW5lLCAiQkJMQVlFUlMiKQorICAgICAgICBpZiAoYmJsYXllcnMpOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIG5vdCBiYmxheWVyczoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgQkJMQVlFUlMgaW4gJXMgb3V0cHV0LCBleGl0aW5nLiIgJSBcCisgICAgICAgICAgICBiaXRiYWtlX2Vudl9jbWQKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHJhd19sYXllcnMgPSBiYmxheWVycy5zcGxpdCgpCisKKyAgICBmb3IgbGF5ZXIgaW4gcmF3X2xheWVyczoKKyAgICAgICAgaWYgbGF5ZXIgPT0gJ0JCTEFZRVJTJyBvciAnPScgaW4gbGF5ZXI6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyKQorCisgICAgcmV0dXJuIGxheWVycworCisKK2RlZiBnZXRfbGluZV92YWwobGluZSwga2V5KToKKyAgICAiIiIKKyAgICBFeHRyYWN0IHRoZSB2YWx1ZSBmcm9tIHRoZSBWQVI9InZhbCIgc3RyaW5nCisgICAgIiIiCisgICAgaWYgbGluZS5zdGFydHN3aXRoKGtleSArICI9Iik6CisgICAgICAgIHN0cmlwcGVkX2xpbmUgPSBsaW5lLnNwbGl0KCc9JylbMV0KKyAgICAgICAgc3RyaXBwZWRfbGluZSA9IHN0cmlwcGVkX2xpbmUucmVwbGFjZSgnXCInLCAnJykKKyAgICAgICAgcmV0dXJuIHN0cmlwcGVkX2xpbmUKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBmaW5kX21ldGFfbGF5ZXIoKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gdGhlIG1ldGEgbGF5ZXIgaW4gQkJMQVlFUlMuCisgICAgIiIiCisgICAgbGF5ZXJzID0gZmluZF9iYmxheWVycygpCisKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICBpZiBsYXllci5lbmRzd2l0aCgibWV0YSIpOgorICAgICAgICAgICAgcmV0dXJuIGxheWVyCisKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBmaW5kX2JzcF9sYXllcihtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBtYWNoaW5lJ3MgQlNQIGxheWVyIGluIEJCTEFZRVJTLgorICAgICIiIgorICAgIGxheWVycyA9IGZpbmRfYmJsYXllcnMoKQorCisgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgaWYgbGF5ZXIuZW5kc3dpdGgobWFjaGluZSk6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXIKKworICAgIHByaW50ICJVbmFibGUgdG8gZmluZCB0aGUgQlNQIGxheWVyIGZvciBtYWNoaW5lICVzLiIgJSBtYWNoaW5lCisgICAgcHJpbnQgIlBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgbGlzdGVkIGluIGJibGF5ZXJzLmNvbmYiCisgICAgc3lzLmV4aXQoMSkKKworCitkZWYgZ2VuX2Nob2ljZXNfc3RyKGNob2ljZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIGEgbnVtYmVyZWQgbGlzdCBvZiBjaG9pY2VzIGZyb20gYSBsaXN0IG9mIGNob2ljZXMgZm9yCisgICAgZGlzcGxheSB0byB0aGUgdXNlci4KKyAgICAiIiIKKyAgICBjaG9pY2VzX3N0ciA9ICIiCisKKyAgICBmb3IgaSwgY2hvaWNlIGluIGVudW1lcmF0ZShjaG9pY2VzKToKKyAgICAgICAgY2hvaWNlc19zdHIgKz0gIlx0IiArIHN0cihpICsgMSkgKyAiKSAiICsgY2hvaWNlICsgIlxuIgorCisgICAgcmV0dXJuIGNob2ljZXNfc3RyCisKKworZGVmIG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgdXNlcmZpbGUsIG1vZGUpOgorICAgICIiIgorICAgIEZpbmQgb25lIG9mIHRoZSB1c2VyIGZpbGVzICh1c2VyLWNvbmZpZy5jZmcsIHVzZXItcGF0Y2hlcy5zY2MpCisgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWNoaW5lIChjb3VsZCBiZSBpbiBmaWxlcy8sCisgICAgbGludXgteW9jdG8tY3VzdG9tLywgZXRjKS4gIFJldHVybnMgdGhlIG9wZW4gZmlsZSBpZiBmb3VuZCwgTm9uZQorICAgIG90aGVyd2lzZS4KKworICAgIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsb3NpbmcgdGhlIGZpbGUgcmV0dXJuZWQuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorICAgIGxpbnV4ZGlyID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgiKQorICAgIGxpbnV4ZGlyX2xpc3QgPSBvcy5saXN0ZGlyKGxpbnV4ZGlyKQorICAgIGZvciBmaWxlb2JqIGluIGxpbnV4ZGlyX2xpc3Q6CisgICAgICAgIGZpbGVvYmpfcGF0aCA9IG9zLnBhdGguam9pbihsaW51eGRpciwgZmlsZW9iaikKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlb2JqX3BhdGgpOgorICAgICAgICAgICAgdXNlcmZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihmaWxlb2JqX3BhdGgsIHVzZXJmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKHVzZXJmaWxlX25hbWUsIG1vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBsaXN0IG9mIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgaW4gYSBtYWNoaW5lJ3MKKyAgICB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItY29uZmlnLmNmZ10uCisgICAgIiIiCisgICAgY29uZmlnX2l0ZW1zID0gW10KKworICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLWNvbmZpZy5jZmciLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHMgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgcyBhbmQgbm90IHMuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgY29uZmlnX2l0ZW1zLmFwcGVuZChzKQorICAgIGYuY2xvc2UoKQorCisgICAgcmV0dXJuIGNvbmZpZ19pdGVtcworCisKK2RlZiB3cml0ZV9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjb25maWdfaXRlbXMpOgorICAgICIiIgorICAgIFdyaXRlIChyZXBsYWNlKSB0aGUgbGlzdCBvZiBjb25maWcgaXRlbXMgKENPTkZJR19YWFgpIGluIGEKKyAgICBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIGNvbmZpZyBmcmFnbWVudCBbJHttYWNoaW5lfT11c2VyLWNvbmZpZy5jZmddLgorICAgICIiIgorICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLWNvbmZpZy5jZmciLCAidyIpCisgICAgZm9yIGl0ZW0gaW4gY29uZmlnX2l0ZW1zOgorICAgICAgICBmLndyaXRlKGl0ZW0gKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAga2VybmVsX2NvbnRlbnRzX2NoYW5nZWQoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Qoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgaW4gYSBtYWNoaW5lJ3MKKyAgICB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItY29uZmlnLmNmZ10uCisgICAgIiIiCisgICAgY29uZmlnX2l0ZW1zID0gcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIGtlcm5lbCBjb25maWcgaXRlbXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lCisgICAgcHJpbnQgZ2VuX2Nob2ljZXNfc3RyKGNvbmZpZ19pdGVtcykKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19ybShzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgY29uZmlnIGl0ZW1zIChDT05GSUdfWFhYKSBpbiBhIG1hY2hpbmUncworICAgIHVzZXItZGVmaW5lZCBjb25maWcgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1jb25maWcuY2ZnXSwgcHJvbXB0IHRoZSB1c2VyCisgICAgZm9yIG9uZSBvciBtb3JlIHRvIHJlbW92ZSwgYW5kIHJlbW92ZSB0aGVtLgorICAgICIiIgorICAgIGNvbmZpZ19pdGVtcyA9IHJlYWRfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJTcGVjaWZ5IHRoZSBrZXJuZWwgY29uZmlnIGl0ZW1zIHRvIHJlbW92ZToiCisgICAgaW5wdXQgPSByYXdfaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKGNvbmZpZ19pdGVtcykpCisgICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBybV9jaG9pY2VzLnNvcnQoKQorCisgICAgcmVtb3ZlZCA9IFtdCisKKyAgICBmb3IgY2hvaWNlIGluIHJldmVyc2VkKHJtX2Nob2ljZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihjb25maWdfaXRlbXMpOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglZCksIGV4aXRpbmciICUgKGlkeCArIDEpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICByZW1vdmVkLmFwcGVuZChjb25maWdfaXRlbXMucG9wKGlkeCkpCisKKyAgICB3cml0ZV9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjb25maWdfaXRlbXMpCisKKyAgICBwcmludCAiUmVtb3ZlZCBpdGVtczoiCisgICAgZm9yIHIgaW4gcmVtb3ZlZDoKKyAgICAgICAgcHJpbnQgIlx0JXMiICUgcgorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGNvbmZpZ19pdGVtcyk6CisgICAgIiIiCisgICAgQWRkIG9uZSBvciBtb3JlIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgdG8gYSBtYWNoaW5lJ3MKKyAgICB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItY29uZmlnLmNmZ10uCisgICAgIiIiCisgICAgbmV3X2l0ZW1zID0gW10KKyAgICBkdXBfaXRlbXMgPSBbXQorCisgICAgY3VyX2l0ZW1zID0gcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgZm9yIGl0ZW0gaW4gY29uZmlnX2l0ZW1zOgorICAgICAgICBpZiBub3QgaXRlbS5zdGFydHN3aXRoKCJDT05GSUciKSBvciAobm90ICI9eSIgaW4gaXRlbSBhbmQgbm90ICI9bSIgaW4gaXRlbSk6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjb25maWcgaXRlbSAoJXMpLCBleGl0aW5nIiAlIGl0ZW0KKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGl0ZW0gbm90IGluIGN1cl9pdGVtcyBhbmQgaXRlbSBub3QgaW4gbmV3X2l0ZW1zOgorICAgICAgICAgICAgbmV3X2l0ZW1zLmFwcGVuZChpdGVtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHVwX2l0ZW1zLmFwcGVuZChpdGVtKQorCisgICAgaWYgbGVuKG5ld19pdGVtcykgPiAwOgorICAgICAgICBjdXJfaXRlbXMuZXh0ZW5kKG5ld19pdGVtcykKKyAgICAgICAgd3JpdGVfY29uZmlnX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY3VyX2l0ZW1zKQorICAgICAgICBwcmludCAiQWRkZWQgaXRlbSVzOiIgJSAoIiIgaWYgbGVuKG5ld19pdGVtcyk9PTEgZWxzZSAicyIpCisgICAgICAgIGZvciBuIGluIG5ld19pdGVtczoKKyAgICAgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworICAgIGlmIGxlbihkdXBfaXRlbXMpID4gMDoKKyAgICAgICAgb3V0cHV0PSJUaGUgZm9sbG93aW5nIGl0ZW0lcyBhbHJlYWR5IGV4aXN0JXMgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgaWdub3JpbmcgJXM6IiAlIFwKKyAgICAgICAgICAgICgoIiIsInMiLCAiaXQiKSBpZiBsZW4oZHVwX2l0ZW1zKT09MSBlbHNlICgicyIsICIiLCAidGhlbSIgKSkKKyAgICAgICAgcHJpbnQgb3V0cHV0CisgICAgICAgIGZvciBuIGluIGR1cF9pdGVtczoKKyAgICAgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworZGVmIGZpbmRfY3VycmVudF9rZXJuZWwoYnNwX2xheWVyLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgdGhlIGtlcm5lbCBhbmQgdmVyc2lvbiBjdXJyZW50bHkgYmVpbmcgdXNlZCBpbiB0aGUgQlNQLgorICAgICIiIgorICAgIG1hY2hpbmVfY29uZiA9IG9zLnBhdGguam9pbihic3BfbGF5ZXIsICJjb25mL21hY2hpbmUvIiArIG1hY2hpbmUgKyAiLmNvbmYiKQorCisgICAgcHJlZmVycmVkX2tlcm5lbCA9IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IHByZWZlcnJlZF92ZXJzaW9uX3Zhcm5hbWUgPSBOb25lCisKKyAgICBmID0gb3BlbihtYWNoaW5lX2NvbmYsICJyIikKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIpOgorICAgICAgICAgICAgcHJlZmVycmVkX2tlcm5lbCA9IGxpbmUuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIHByZWZlcnJlZF9rZXJuZWwgPSBwcmVmZXJyZWRfa2VybmVsLnJlcGxhY2UoJ1wiJywnJykKKyAgICAgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uX3Zhcm5hbWUgPSAiUFJFRkVSUkVEX1ZFUlNJT05fIiArIHByZWZlcnJlZF9rZXJuZWwKKyAgICAgICAgaWYgcHJlZmVycmVkX3ZlcnNpb25fdmFybmFtZSBhbmQgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgocHJlZmVycmVkX3ZlcnNpb25fdmFybmFtZSk6CisgICAgICAgICAgICBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBsaW5lLnNwbGl0KClbLTFdCisgICAgICAgICAgICBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24ucmVwbGFjZSgnXCInLCcnKQorICAgICAgICAgICAgcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0gcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uLnJlcGxhY2UoJyUnLCcnKQorCisgICAgaWYgcHJlZmVycmVkX2tlcm5lbCBhbmQgcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uOgorICAgICAgICByZXR1cm4gcHJlZmVycmVkX2tlcm5lbCArICJfIiArIHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbgorICAgIGVsaWYgcHJlZmVycmVkX2tlcm5lbDoKKyAgICAgICAgcmV0dXJuIHByZWZlcnJlZF9rZXJuZWwKKworCitkZWYgZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIEZpbmQgdGhlIG5hbWUgb2YgdGhlICdmaWxlcycgZGlyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFjaGluZQorICAgIChjb3VsZCBiZSBpbiBmaWxlcy8sIGxpbnV4LXlvY3RvLWN1c3RvbS8sIGV0YykuICBSZXR1cm5zIHRoZSBuYW1lCisgICAgb2YgdGhlIGZpbGVzIGRpciBpZiBmb3VuZCwgTm9uZSBvdGhlcndpc2UuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorICAgIGZpbGVzZGlyID0gTm9uZQorICAgIGxpbnV4ZGlyID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgiKQorICAgIGxpbnV4ZGlyX2xpc3QgPSBvcy5saXN0ZGlyKGxpbnV4ZGlyKQorICAgIGZvciBmaWxlb2JqIGluIGxpbnV4ZGlyX2xpc3Q6CisgICAgICAgIGZpbGVvYmpfcGF0aCA9IG9zLnBhdGguam9pbihsaW51eGRpciwgZmlsZW9iaikKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlb2JqX3BhdGgpOgorICAgICAgICAgICAgIyB0aGlzIGNvdWxkIGJlIGZpbGVzLyBvciBsaW51eC15b2N0by1jdXN0b20vLCB3ZSBoYXZlIG5vIHdheSBvZiBkaXN0aW5ndWlzaGluZworICAgICAgICAgICAgIyBzbyB3ZSB0YWtlIHRoZSBmaXJzdCAoYW5kIG5vcm1hbGx5IG9ubHkpIGRpciB3ZSBmaW5kIGFzIHRoZSAnZmlsZXNkaXInCisgICAgICAgICAgICBmaWxlc2RpciA9IGZpbGVvYmpfcGF0aAorCisgICAgcmV0dXJuIGZpbGVzZGlyCisKKworZGVmIHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBsaXN0IG9mIHBhdGNoIGl0ZW1zIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZAorICAgIHBhdGNoIGxpc3QgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgcGF0Y2hfaXRlbXMgPSBbXQorCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItcGF0Y2hlcy5zY2MiLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHMgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgcyBhbmQgbm90IHMuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgZmllbGRzID0gcy5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgZmllbGRzWzBdID09ICJwYXRjaCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHBhdGNoX2l0ZW1zLmFwcGVuZChmaWVsZHNbMV0pCisgICAgZi5jbG9zZSgpCisKKyAgICByZXR1cm4gcGF0Y2hfaXRlbXMKKworCitkZWYgd3JpdGVfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBwYXRjaF9pdGVtcyk6CisgICAgIiIiCisgICAgV3JpdGUgKHJlcGxhY2UpIHRoZSBsaXN0IG9mIHBhdGNoZXMgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkCisgICAgcGF0Y2ggbGlzdCBbJHttYWNoaW5lfS11c2VyLXBhdGNoZXMuc2NjXS4KKyAgICAiIiIKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1wYXRjaGVzLnNjYyIsICJ3IikKKyAgICBmb3IgaXRlbSBpbiBwYXRjaF9pdGVtczoKKyAgICAgICAgZi53cml0ZSgicGF0Y2ggIiArIGl0ZW0gKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAga2VybmVsX2NvbnRlbnRzX2NoYW5nZWQoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfbGlzdChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgcGF0Y2hlcyBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQgcGF0Y2ggbGlzdAorICAgIFske21hY2hpbmV9LXVzZXItcGF0Y2hlcy5zY2NdLgorICAgICIiIgorICAgIHBhdGNoZXMgPSByZWFkX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2YgbWFjaGluZS1zcGVjaWZpYyBwYXRjaGVzIGZvciAlcyBpczoiICUgbWFjaGluZQorICAgIHByaW50IGdlbl9jaG9pY2VzX3N0cihwYXRjaGVzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfcm0oc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBSZW1vdmUgb25lIG9yIG1vcmUgcGF0Y2hlcyBmcm9tIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBwYXRjaAorICAgIGxpc3QgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgcGF0Y2hlcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlNwZWNpZnkgdGhlIHBhdGNoZXMgdG8gcmVtb3ZlOiIKKyAgICBpbnB1dCA9IHJhd19pbnB1dChnZW5fY2hvaWNlc19zdHIocGF0Y2hlcykpCisgICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBybV9jaG9pY2VzLnNvcnQoKQorCisgICAgcmVtb3ZlZCA9IFtdCisKKyAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGlmIG5vdCBmaWxlc2RpcjoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IHJtIHBhdGNoKGVzKSBzaW5jZSB3ZSBjb3VsZG4ndCBmaW5kIGEgJ2ZpbGVzJyBkaXIiCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmb3IgY2hvaWNlIGluIHJldmVyc2VkKHJtX2Nob2ljZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihwYXRjaGVzKToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJWQpLCBleGl0aW5nIiAlIChpZHggKyAxKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZmlsZXNkaXJfcGF0Y2ggPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIHBhdGNoZXNbaWR4XSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZXNkaXJfcGF0Y2gpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVzZGlyX3BhdGNoKQorICAgICAgICByZW1vdmVkLmFwcGVuZChwYXRjaGVzW2lkeF0pCisgICAgICAgIHBhdGNoZXMucG9wKGlkeCkKKworICAgIHdyaXRlX3BhdGNoX2l0ZW1zKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgcGF0Y2hlcykKKworICAgIHByaW50ICJSZW1vdmVkIHBhdGNoZXM6IgorICAgIGZvciByIGluIHJlbW92ZWQ6CisgICAgICAgIHByaW50ICJcdCVzIiAlIHIKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIHBhdGNoZXMpOgorICAgICIiIgorICAgIEFkZCBvbmUgb3IgbW9yZSBwYXRjaGVzIHRvIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBwYXRjaCBsaXN0CisgICAgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgZXhpc3RpbmdfcGF0Y2hlcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgYWRkIHBhdGNoICglcykgc2luY2UgaXQncyBhbHJlYWR5IGJlZW4gYWRkZWQiICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGlmIG5vdCBmaWxlc2RpcjoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGFkZCBwYXRjaCAoJXMpIHNpbmNlIHdlIGNvdWxkbid0IGZpbmQgYSAnZmlsZXMnIGRpciB0byBhZGQgaXQgdG8iICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG5ld19wYXRjaGVzID0gW10KKworICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocGF0Y2gpOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgcGF0Y2ggKCVzKSwgZXhpdGluZyIgJSBwYXRjaAorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICBmaWxlc2Rpcl9wYXRjaCA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgYmFzZW5hbWUpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShwYXRjaCwgZmlsZXNkaXJfcGF0Y2gpCisgICAgICAgIG5ld19wYXRjaGVzLmFwcGVuZChiYXNlbmFtZSkKKworICAgIGN1cl9pdGVtcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGN1cl9pdGVtcy5leHRlbmQobmV3X3BhdGNoZXMpCisgICAgd3JpdGVfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjdXJfaXRlbXMpCisKKyAgICBwcmludCAiQWRkZWQgcGF0Y2hlczoiCisgICAgZm9yIG4gaW4gbmV3X3BhdGNoZXM6CisgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworCitkZWYgaW5jX3ByKGxpbmUpOgorICAgICIiIgorICAgIEFkZCAxIHRvIHRoZSBQUiB2YWx1ZSBpbiB0aGUgZ2l2ZW4gYmJhcHBlbmQgUFIgbGluZS4gIEZvciB0aGUgUFIKKyAgICBsaW5lcyBpbiBrZXJuZWwgLmJiYXBwZW5kcyBhZnRlciBtb2RpZmljYXRpb25zLiAgSGFuZGxlcyBQUnMgb2YKKyAgICB0aGUgZm9ybSBQUiA6PSAiJHtQUn0uMSIgYXMgd2VsbCBhcyBQUiA9ICJyMCIuCisgICAgIiIiCisgICAgaWR4ID0gbGluZS5maW5kKCJcIiIpCisKKyAgICBwcl9zdHIgPSBsaW5lW2lkeDpdCisgICAgcHJfc3RyID0gcHJfc3RyLnJlcGxhY2UoJ1wiJywnJykKKyAgICBmaWVsZHMgPSBwcl9zdHIuc3BsaXQoJy4nKQorICAgIGlmIGxlbihmaWVsZHMpID4gMToKKyAgICAgICAgZmllbGRzWzFdID0gc3RyKGludChmaWVsZHNbMV0pICsgMSkKKyAgICAgICAgcHJfc3RyID0gIlwiIiArICcuJy5qb2luKGZpZWxkcykgKyAiXCJcbiIKKyAgICBlbHNlOgorICAgICAgICBwcl92YWwgPSBwcl9zdHJbMTpdCisgICAgICAgIHByX3N0ciA9ICJcIiIgKyAiciIgKyBzdHIoaW50KHByX3ZhbCkgKyAxKSArICJcIlxuIgorICAgIGlkeDIgPSBsaW5lLmZpbmQoIlwiIiwgaWR4ICsgMSkKKyAgICBsaW5lID0gbGluZVs6aWR4XSArIHByX3N0cgorICAgIAorICAgIHJldHVybiBsaW5lCisKKworZGVmIGtlcm5lbF9jb250ZW50c19jaGFuZ2VkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRG8gd2hhdCB3ZSBuZWVkIHRvIGRvIHRvIG5vdGlmeSB0aGUgc3lzdGVtIHRoYXQgdGhlIGtlcm5lbAorICAgIHJlY2lwZSdzIGNvbnRlbnRzIGhhdmUgY2hhbmdlZC4KKyAgICAiIiIKKyAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCisKKyAgICBrZXJuZWwgPSBmaW5kX2N1cnJlbnRfa2VybmVsKGxheWVyLCBtYWNoaW5lKQorICAgIGlmIG5vdCBrZXJuZWw6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAga2VybmVsX2JiZmlsZSA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4LyIgKyBrZXJuZWwgKyAiLmJiYXBwZW5kIikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoa2VybmVsX2JiZmlsZSk6CisgICAgICAgIGtlcm5lbF9iYmZpbGUgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eC8iICsga2VybmVsICsgIi5iYiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShrZXJuZWxfYmJmaWxlKToKKyAgICAgICAgICAgIHJldHVybgorICAgIGtlcm5lbF9iYmZpbGVfcHJldiA9IGtlcm5lbF9iYmZpbGUgKyAiLnByZXYiCisgICAgc2h1dGlsLmNvcHlmaWxlKGtlcm5lbF9iYmZpbGUsIGtlcm5lbF9iYmZpbGVfcHJldikKKworICAgIGlmaWxlID0gb3BlbihrZXJuZWxfYmJmaWxlX3ByZXYsICJyIikKKyAgICBvZmlsZSA9IG9wZW4oa2VybmVsX2JiZmlsZSwgInciKQorICAgIGlmaWxlX2xpbmVzID0gaWZpbGUucmVhZGxpbmVzKCkKKyAgICBmb3IgaWZpbGVfbGluZSBpbiBpZmlsZV9saW5lczoKKyAgICAgICAgaWYgaWZpbGVfbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoIlBSIik6CisgICAgICAgICAgICBpZmlsZV9saW5lID0gaW5jX3ByKGlmaWxlX2xpbmUpCisgICAgICAgIG9maWxlLndyaXRlKGlmaWxlX2xpbmUpCisgICAgb2ZpbGUuY2xvc2UoKQorICAgIGlmaWxlLmNsb3NlKCkKKworCitkZWYga2VybmVscyhjb250ZXh0KToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGtlcm5lbHMgaW4gdGhlIEJTUCBpLmUuIGNvcnJlc3BvbmRpbmcKKyAgICB0byB0aGUga2VybmVsIC5iYmFwcGVuZHMgZm91bmQgaW4gdGhlIGxheWVyLgorICAgICIiIgorICAgIGFyY2hkaXIgPSBvcy5wYXRoLmpvaW4oY29udGV4dFsic2NyaXB0c19wYXRoIl0sICJsaWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC8iICsgY29udGV4dFsiYXJjaCJdKQorICAgIGtlcm5kaXIgPSBvcy5wYXRoLmpvaW4oYXJjaGRpciwgInJlY2lwZXMta2VybmVsL2xpbnV4IikKKyAgICBiYmdsb2IgPSBvcy5wYXRoLmpvaW4oa2VybmRpciwgIiouYmJhcHBlbmQiKQorCisgICAgYmJhcHBlbmRzID0gZ2xvYi5nbG9iKGJiZ2xvYikKKworICAgIGtlcm5lbHMgPSBbXQorCisgICAgZm9yIGtlcm5lbCBpbiBiYmFwcGVuZHM6CisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGtlcm5lbCkpWzBdCisgICAgICAgIGlkeCA9IGZpbGVuYW1lLmZpbmQoQ0xPU0VfVEFHKQorICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lW2lkeCArIGxlbihDTE9TRV9UQUcpOl0uc3RyaXAoKQorICAgICAgICBrZXJuZWxzLmFwcGVuZChmaWxlbmFtZSkKKworICAgIGtlcm5lbHMuYXBwZW5kKCJjdXN0b20iKQorCisgICAgcmV0dXJuIGtlcm5lbHMKKworCitkZWYgZXh0cmFjdF9naXR1cmwoZmlsZSk6CisgICAgIiIiCisgICAgRXh0cmFjdCB0aGUgZ2l0IHVybCBvZiB0aGUga2VybmVsIHJlcG8gZnJvbSB0aGUga2VybmVsIHJlY2lwZSdzCisgICAgU1JDX1VSSS4KKyAgICAiIiIKKyAgICB1cmwgPSBOb25lCisgICAgZiA9IG9wZW4oZmlsZSwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiU1JDX1VSSSIpOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbbGVuKCJTUkNfVVJJIik6XS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIj0iKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiXCIiKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbMTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgcHJvdCA9ICJnaXQiCisgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIGxpbmUuc3BsaXQoIjsiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgiZ2l0Oi8vIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcy5zdGFydHN3aXRoKCJwcm90b2NvbD0iKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ID0gcy5zcGxpdCgiPSIpWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIHVybDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHByb3QgKyB1cmxbMzpdCisgICAgcmV0dXJuIHVybAorCisKK2RlZiBmaW5kX2dpdHVybChjb250ZXh0KToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBnaXQgdXJsIG9mIHRoZSBrZXJuZWwgcmVwbyBmcm9tIHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICBTUkNfVVJJLgorICAgICIiIgorICAgIG5hbWUgPSBjb250ZXh0WyJuYW1lIl0KKyAgICBmaWxlYmFzZSA9IGNvbnRleHRbImZpbGVuYW1lIl0KKyAgICBzY3JpcHRzX3BhdGggPSBjb250ZXh0WyJzY3JpcHRzX3BhdGgiXQorCisgICAgbWV0YV9sYXllciA9IGZpbmRfbWV0YV9sYXllcigpCisKKyAgICBrZXJuZGlyID0gb3MucGF0aC5qb2luKG1ldGFfbGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eCIpCisgICAgYmJnbG9iID0gb3MucGF0aC5qb2luKGtlcm5kaXIsICIqLmJiIikKKyAgICBiYnMgPSBnbG9iLmdsb2IoYmJnbG9iKQorICAgIGZvciBrZXJuZWwgaW4gYmJzOgorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShrZXJuZWwpKVswXQorICAgICAgICBpZiBmaWxlbmFtZSBpbiBmaWxlYmFzZToKKyAgICAgICAgICAgIGdpdHVybCA9IGV4dHJhY3RfZ2l0dXJsKGtlcm5lbCkKKyAgICAgICAgICAgIHJldHVybiBnaXR1cmwKKyAgICAKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRmluZCBhbmQgcmV0dXJuIGEgbGlzdCBvZiBmZWF0dXJlcyBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQKKyAgICBmZWF0dXJlcyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWZlYXR1cmVzLnNjY10uCisgICAgIiIiCisgICAgZmVhdHVyZXMgPSBbXQorCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItZmVhdHVyZXMuc2NjIiwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBzID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIHMgYW5kIG5vdCBzLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIGZlYXR1cmVfaW5jbHVkZSA9IHMuc3BsaXQoKQorICAgICAgICAgICAgZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmVfaW5jbHVkZVsxXS5zdHJpcCgpKQorICAgIGYuY2xvc2UoKQorCisgICAgcmV0dXJuIGZlYXR1cmVzCisKKworZGVmIHdyaXRlX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZXMpOgorICAgICIiIgorICAgIFdyaXRlIChyZXBsYWNlKSB0aGUgbGlzdCBvZiBmZWF0dXJlIGl0ZW1zIGluIGEKKyAgICBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIGZlYXR1cmVzIGZyYWdtZW50IFske21hY2hpbmV9PXVzZXItZmVhdHVyZXMuY2ZnXS4KKyAgICAiIiIKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1mZWF0dXJlcy5zY2MiLCAidyIpCisgICAgZm9yIGl0ZW0gaW4gZmVhdHVyZXM6CisgICAgICAgIGYud3JpdGUoImluY2x1ZGUgIiArIGl0ZW0gKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAga2VybmVsX2NvbnRlbnRzX2NoYW5nZWQoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0KHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBmZWF0dXJlcyB1c2VkIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZAorICAgIGZlYXR1cmVzIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItZmVhdHVyZXMuc2NjXS4KKyAgICAiIiIKKyAgICBmZWF0dXJlcyA9IHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIGZlYXR1cmVzIGZvciAlcyBpczoiICUgbWFjaGluZQorICAgIHByaW50IGdlbl9jaG9pY2VzX3N0cihmZWF0dXJlcykKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm0oc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGZlYXR1cmVzIHVzZWQgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkCisgICAgZmVhdHVyZXMgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1mZWF0dXJlcy5zY2NdLCBwcm9tcHQgdGhlIHVzZXIKKyAgICBmb3Igb25lIG9yIG1vcmUgdG8gcmVtb3ZlLCBhbmQgcmVtb3ZlIHRoZW0uCisgICAgIiIiCisgICAgZmVhdHVyZXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKworICAgIHByaW50ICJTcGVjaWZ5IHRoZSBmZWF0dXJlcyB0byByZW1vdmU6IgorICAgIGlucHV0ID0gcmF3X2lucHV0KGdlbl9jaG9pY2VzX3N0cihmZWF0dXJlcykpCisgICAgcm1fY2hvaWNlcyA9IGlucHV0LnNwbGl0KCkKKyAgICBybV9jaG9pY2VzLnNvcnQoKQorCisgICAgcmVtb3ZlZCA9IFtdCisKKyAgICBmb3IgY2hvaWNlIGluIHJldmVyc2VkKHJtX2Nob2ljZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZHggPSBpbnQoY2hvaWNlKSAtIDEKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVzKSwgZXhpdGluZyIgJSBjaG9pY2UKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihmZWF0dXJlcyk6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHJlbW92ZWQuYXBwZW5kKGZlYXR1cmVzLnBvcChpZHgpKQorCisgICAgd3JpdGVfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlcykKKworICAgIHByaW50ICJSZW1vdmVkIGZlYXR1cmVzOiIKKyAgICBmb3IgciBpbiByZW1vdmVkOgorICAgICAgICBwcmludCAiXHQlcyIgJSByCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmVzKToKKyAgICAiIiIKKyAgICBBZGQgb25lIG9yIG1vcmUgZmVhdHVyZXMgYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIGZlYXR1cmVzCisgICAgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1mZWF0dXJlcy5zY2NdLgorICAgICIiIgorICAgIG5ld19pdGVtcyA9IFtdCisKKyAgICBmb3IgaXRlbSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgbm90IGl0ZW0uZW5kc3dpdGgoIi5zY2MiKToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGZlYXR1cmUgKCVzKSwgZXhpdGluZyIgJSBpdGVtCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBuZXdfaXRlbXMuYXBwZW5kKGl0ZW0pCisKKyAgICBjdXJfaXRlbXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBjdXJfaXRlbXMuZXh0ZW5kKG5ld19pdGVtcykKKworICAgIHdyaXRlX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY3VyX2l0ZW1zKQorCisgICAgcHJpbnQgIkFkZGVkIGZlYXR1cmVzOiIKKyAgICBmb3IgbiBpbiBuZXdfaXRlbXM6CisgICAgICAgIHByaW50ICJcdCVzIiAlIG4KKworCitkZWYgZmluZF9mZWF0dXJlX3VybChnaXRfdXJsKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSB1cmwgb2YgdGhlIGtlcm4tZmVhdHVyZXMucmMga2VybmVsIGZvciB0aGUga2VybmVsIHJlcG8KKyAgICBzcGVjaWZpZWQgZnJvbSB0aGUgQlNQJ3Mga2VybmVsIHJlY2lwZSBTUkNfVVJJLgorICAgICIiIgorICAgIGZlYXR1cmVfdXJsID0gIiIKKyAgICBpZiBnaXRfdXJsLnN0YXJ0c3dpdGgoImdpdDovLyIpOgorICAgICAgICBnaXRfdXJsID0gZ2l0X3VybFtsZW4oImdpdDovLyIpOl0uc3RyaXAoKQorICAgICAgICBzID0gZ2l0X3VybC5zcGxpdCgiLyIpCisgICAgICAgIGlmIHNbMV0uZW5kc3dpdGgoIi5naXQiKToKKyAgICAgICAgICAgIHNbMV0gPSBzWzFdWzpsZW4oc1sxXSkgLSBsZW4oIi5naXQiKV0KKyAgICAgICAgZmVhdHVyZV91cmwgPSAiaHR0cDovLyIgKyBzWzBdICsgIi9jZ2l0L2NnaXQuY2dpLyIgKyBzWzFdICsgXAorICAgICAgICAgICAgIi9wbGFpbi9tZXRhL2NmZy9rZXJuLWZlYXR1cmVzLnJjP2g9bWV0YSIKKworICAgIHJldHVybiBmZWF0dXJlX3VybAorCisKK2RlZiBmaW5kX2ZlYXR1cmVfZGVzYyhsaW5lcyk6CisgICAgIiIiCisgICAgRmluZCB0aGUgZmVhdHVyZSBkZXNjcmlwdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBpbiB0aGUgcGFzc2VkLWluCisgICAgc2V0IG9mIGxpbmVzLiAgUmV0dXJucyBhIHN0cmluZyBzdHJpbmcgb2YgdGhlIGZvcm0gJ2Rlc2MKKyAgICBbY29tcGF0XScuCisgICAgIiIiCisgICAgZGVzYyA9ICJubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUiCisgICAgY29tcGF0ID0gInVua25vd24iCisKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWR4ID0gbGluZS5maW5kKCJLRkVBVFVSRV9ERVNDUklQVElPTiIpCisgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgIGRlc2MgPSBsaW5lW2lkeCArIGxlbigiS0ZFQVRVUkVfREVTQ1JJUFRJT04iKTpdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGRlc2Muc3RhcnRzd2l0aCgiXCIiKToKKyAgICAgICAgICAgICAgICBkZXNjID0gZGVzY1sxOl0KKyAgICAgICAgICAgICAgICBpZiBkZXNjLmVuZHN3aXRoKCJcIiIpOgorICAgICAgICAgICAgICAgICAgICBkZXNjID0gZGVzY1s6LTFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoIktGRUFUVVJFX0NPTVBBVElCSUxJVFkiKQorICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgICAgIGNvbXBhdCA9IGxpbmVbaWR4ICsgbGVuKCJLRkVBVFVSRV9DT01QQVRJQklMSVRZIik6XS5zdHJpcCgpCisKKyAgICByZXR1cm4gZGVzYyArICIgWyIgKyBjb21wYXQgKyAiXSIKKworCitkZWYgcHJpbnRfZmVhdHVyZV9kZXNjcyhsYXllciwgZmVhdHVyZV9kaXIpOgorICAgICIiIgorICAgIFByaW50IHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIGZlYXR1cmVzIGluIGZlYXR1cmVfZGlyLgorICAgICIiIgorICAgIGtlcm5lbF9maWxlc19mZWF0dXJlcyA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX2RpcikKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhrZXJuZWxfZmlsZXNfZmVhdHVyZXMpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIn4iKSBvciBmaWxlLmVuZHN3aXRoKCIjIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIi5zY2MiKToKKyAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfZGlyICsgIi8iICsgZmlsZSkKKyAgICAgICAgICAgICAgICBmID0gb3BlbihmdWxscGF0aCkKKyAgICAgICAgICAgICAgICBmZWF0dXJlX2Rlc2MgPSBmaW5kX2ZlYXR1cmVfZGVzYyhmLnJlYWRsaW5lcygpKQorICAgICAgICAgICAgICAgIHByaW50IGZlYXR1cmVfZGlyICsgIi8iICsgZmlsZSArICI6ICIgKyBmZWF0dXJlX2Rlc2MKKworCitkZWYgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0KHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBhbGwgdGhlIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgZm9yIHVzZSBpbgorICAgIEJTUHMsIGFzIGdhdGhlcmVkIGZyb20gdGhlIHNldCBvZiBmZWF0dXJlIHNvdXJjZXMuCisgICAgIiIiCisgICAgbGF5ZXIgPSBmaW5kX2JzcF9sYXllcihtYWNoaW5lKQorICAgIGtlcm5lbCA9IGZpbmRfY3VycmVudF9rZXJuZWwobGF5ZXIsIG1hY2hpbmUpCisgICAgaWYgbm90IGtlcm5lbDoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQobWFjaGluZSwgImFyY2giLCBzY3JpcHRzX3BhdGgpCisgICAgY29udGV4dFsibmFtZSJdID0gIm5hbWUiCisgICAgY29udGV4dFsiZmlsZW5hbWUiXSA9IGtlcm5lbAorICAgIGdpdHVybCA9IGZpbmRfZ2l0dXJsKGNvbnRleHQpCisgICAgZmVhdHVyZV91cmwgPSBmaW5kX2ZlYXR1cmVfdXJsKGdpdHVybCkKKworICAgIGZlYXR1cmVfY21kID0gIndnZXQgLXEgLU8gLSAiICsgZmVhdHVyZV91cmwKKyAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGZlYXR1cmVfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUgdG8gJXMgaXM6XG4iICUgbWFjaGluZQorCisgICAgaWYgdG1wOgorICAgICAgICB0bXBsaW5lID0gdG1wLnNwbGl0KCJcbiIpCisgICAgICAgIGluX2tlcm5lbF9vcHRpb25zID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wbGluZToKKyAgICAgICAgICAgIGlmIG5vdCAiPSIgaW4gbGluZToKKyAgICAgICAgICAgICAgICBpZiBpbl9rZXJuZWxfb3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiAia2VybmVsLW9wdGlvbnMiIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGluX2tlcm5lbF9vcHRpb25zID0gVHJ1ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpbl9rZXJuZWxfb3B0aW9uczoKKyAgICAgICAgICAgICAgICBmZWF0dXJlX2RlZiA9IGxpbmUuc3BsaXQoIj0iKQorICAgICAgICAgICAgICAgIGZlYXR1cmVfdHlwZSA9IGZlYXR1cmVfZGVmWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBmZWF0dXJlID0gZmVhdHVyZV9kZWZbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGRlc2MgPSBnZXRfZmVhdHVyZV9kZXNjKGdpdHVybCwgZmVhdHVyZSkKKyAgICAgICAgICAgICAgICBwcmludCAiJXM6ICVzIiAlIChmZWF0dXJlLCBkZXNjKQorCisgICAgcHJpbnQgIltsb2NhbF0iCisKKyAgICBwcmludF9mZWF0dXJlX2Rlc2NzKGxheWVyLCAiY2ZnIikKKyAgICBwcmludF9mZWF0dXJlX2Rlc2NzKGxheWVyLCAiZmVhdHVyZXMiKQorCisKK2RlZiBmaW5kX2ZlYXR1cmVfZGVzY191cmwoZ2l0X3VybCwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgRmluZCB0aGUgdXJsIG9mIHRoZSBrZXJuZWwgZmVhdHVyZSBpbiB0aGUga2VybmVsIHJlcG8gc3BlY2lmaWVkCisgICAgZnJvbSB0aGUgQlNQJ3Mga2VybmVsIHJlY2lwZSBTUkNfVVJJLgorICAgICIiIgorICAgIGZlYXR1cmVfZGVzY191cmwgPSAiIgorICAgIGlmIGdpdF91cmwuc3RhcnRzd2l0aCgiZ2l0Oi8vIik6CisgICAgICAgIGdpdF91cmwgPSBnaXRfdXJsW2xlbigiZ2l0Oi8vIik6XS5zdHJpcCgpCisgICAgICAgIHMgPSBnaXRfdXJsLnNwbGl0KCIvIikKKyAgICAgICAgaWYgc1sxXS5lbmRzd2l0aCgiLmdpdCIpOgorICAgICAgICAgICAgc1sxXSA9IHNbMV1bOmxlbihzWzFdKSAtIGxlbigiLmdpdCIpXQorICAgICAgICBmZWF0dXJlX2Rlc2NfdXJsID0gImh0dHA6Ly8iICsgc1swXSArICIvY2dpdC9jZ2l0LmNnaS8iICsgc1sxXSArIFwKKyAgICAgICAgICAgICIvcGxhaW4vbWV0YS9jZmcva2VybmVsLWNhY2hlLyIgKyBmZWF0dXJlICsgIj9oPW1ldGEiCisKKyAgICByZXR1cm4gZmVhdHVyZV9kZXNjX3VybAorCisKK2RlZiBnZXRfZmVhdHVyZV9kZXNjKGdpdF91cmwsIGZlYXR1cmUpOgorICAgICIiIgorICAgIFJldHVybiBhIGZlYXR1cmUgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm0gJ2Rlc2NyaXB0aW9uIFtjb21wYXRpYmlsaXR5XQorICAgIEJTUHMsIGFzIGdhdGhlcmVkIGZyb20gdGhlIHNldCBvZiBmZWF0dXJlIHNvdXJjZXMuCisgICAgIiIiCisgICAgZmVhdHVyZV9kZXNjX3VybCA9IGZpbmRfZmVhdHVyZV9kZXNjX3VybChnaXRfdXJsLCBmZWF0dXJlKQorICAgIGZlYXR1cmVfZGVzY19jbWQgPSAid2dldCAtcSAtTyAtICIgKyBmZWF0dXJlX2Rlc2NfdXJsCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihmZWF0dXJlX2Rlc2NfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICByZXR1cm4gZmluZF9mZWF0dXJlX2Rlc2ModG1wLnNwbGl0KCJcbiIpKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGRlc2NyaXB0aW9uIG9mIGEgc3BlY2lmaWMga2VybmVsIGZlYXR1cmUgYXZhaWxhYmxlIGZvcgorICAgIHVzZSBpbiBhIEJTUC4KKyAgICAiIiIKKyAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCisKKyAgICBrZXJuZWwgPSBmaW5kX2N1cnJlbnRfa2VybmVsKGxheWVyLCBtYWNoaW5lKQorICAgIGlmIG5vdCBrZXJuZWw6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGtlcm5lbCBmb3IgdGhpcyBCU1AsIGV4aXRpbmcuIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KG1hY2hpbmUsICJhcmNoIiwgc2NyaXB0c19wYXRoKQorICAgIGNvbnRleHRbIm5hbWUiXSA9ICJuYW1lIgorICAgIGNvbnRleHRbImZpbGVuYW1lIl0gPSBrZXJuZWwKKyAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQorCisgICAgZGVzYyA9IGdldF9mZWF0dXJlX2Rlc2MoZ2l0dXJsLCBmZWF0dXJlKQorCisgICAgcHJpbnQgZGVzYworCisKK2RlZiBjaGVja19mZWF0dXJlX25hbWUoZmVhdHVyZV9uYW1lKToKKyAgICAiIiIKKyAgICBTYW5pdHktY2hlY2sgdGhlIGZlYXR1cmUgbmFtZSBmb3IgY3JlYXRlL2Rlc3Ryb3kuICBSZXR1cm4gRmFsc2UgaWYgbm90IE9LLgorICAgICIiIgorICAgIGlmIG5vdCBmZWF0dXJlX25hbWUuZW5kc3dpdGgoIi5zY2MiKToKKyAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBuYW1lIChtdXN0IGVuZCB3aXRoIC5zY2MpIFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9uYW1lCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgIi8iIGluIGZlYXR1cmVfbmFtZToKKyAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBuYW1lIChkb24ndCBzcGVjaWZ5IGRpcmVjdG9yeSkgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX25hbWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBjaGVja19jcmVhdGVfaW5wdXQoZmVhdHVyZV9pdGVtcyk6CisgICAgIiIiCisgICAgU2FuaXR5LWNoZWNrIHRoZSBjcmVhdGUgaW5wdXQuICBSZXR1cm4gRmFsc2UgaWYgbm90IE9LLgorICAgICIiIgorICAgIGlmIG5vdCBjaGVja19mZWF0dXJlX25hbWUoZmVhdHVyZV9pdGVtc1swXSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgZmVhdHVyZV9pdGVtc1sxXS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgZmVhdHVyZV9pdGVtc1sxXS5zdGFydHN3aXRoKCJDT05GSUdfIik6CisgICAgICAgIHByaW50ICJNaXNzaW5nIGRlc2NyaXB0aW9uIGFuZC9vciBjb21wYXRpYmlsdHkgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX2l0ZW1zWzFdCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgZmVhdHVyZV9pdGVtc1syXS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgZmVhdHVyZV9pdGVtc1syXS5zdGFydHN3aXRoKCJDT05GSUdfIik6CisgICAgICAgIHByaW50ICJNaXNzaW5nIGRlc2NyaXB0aW9uIGFuZC9vciBjb21wYXRpYmlsaXR5IFslc10sIGV4aXRpbmciICUgZmVhdHVyZV9pdGVtc1sxXQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmVfaXRlbXMpOgorICAgICIiIgorICAgIENyZWF0ZSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBpbiBhIEJTUC4KKyAgICAiIiIKKyAgICBpZiBub3QgY2hlY2tfY3JlYXRlX2lucHV0KGZlYXR1cmVfaXRlbXMpOgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdHVyZSA9IGZlYXR1cmVfaXRlbXNbMF0KKyAgICBmZWF0dXJlX2Jhc2VuYW1lID0gZmVhdHVyZS5zcGxpdCgiLiIpWzBdCisgICAgZmVhdHVyZV9kZXNjcmlwdGlvbiA9IGZlYXR1cmVfaXRlbXNbMV0KKyAgICBmZWF0dXJlX2NvbXBhdCA9IGZlYXR1cmVfaXRlbXNbMl0KKworICAgIHBhdGNoZXMgPSBbXQorICAgIGNmZ19pdGVtcyA9IFtdCisKKyAgICBmb3IgaXRlbSBpbiBmZWF0dXJlX2l0ZW1zWzM6XToKKyAgICAgICAgaWYgaXRlbS5lbmRzd2l0aCgiLnBhdGNoIik6CisgICAgICAgICAgICBwYXRjaGVzLmFwcGVuZChpdGVtKQorICAgICAgICBlbGlmIGl0ZW0uc3RhcnRzd2l0aCgiQ09ORklHIik6CisgICAgICAgICAgICBpZiAoIj15IiBpbiBpdGVtIG9yICI9bSIgaW4gaXRlbSk6CisgICAgICAgICAgICAgICAgY2ZnX2l0ZW1zLmFwcGVuZChpdGVtKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSBpdGVtIChtdXN0IGJlIC5wYXRjaCBvciBDT05GSUdfKikgWyVzXSwgZXhpdGluZyIgJSBpdGVtCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdHVyZV9kaXJuYW1lID0gImNmZyIKKyAgICBpZiBwYXRjaGVzOgorICAgICAgICBmZWF0dXJlX2Rpcm5hbWUgPSAiZmVhdHVyZXMiCisKKyAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGlmIG5vdCBmaWxlc2RpcjoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGFkZCBmZWF0dXJlICglcyksIG5vICdmaWxlcycgZGlyIGZvdW5kIiAlIGZlYXR1cmUKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZlYXRkaXIgPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGZlYXR1cmVfZGlybmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdGRpcik6CisgICAgICAgIG9zLm1rZGlyKGZlYXRkaXIpCisKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHBhdGNoKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIHBhdGNoICglcyksIGV4aXRpbmciICUgcGF0Y2gKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgZmVhdGRpcl9wYXRjaCA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBiYXNlbmFtZSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHBhdGNoLCBmZWF0ZGlyX3BhdGNoKQorCisgICAgbmV3X2NmZ19maWxlbmFtZSA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlX2Jhc2VuYW1lICsgIi5jZmciKQorICAgIG5ld19jZmdfZmlsZSA9IG9wZW4obmV3X2NmZ19maWxlbmFtZSwgInciKQorICAgIGZvciBjZmdfaXRlbSBpbiBjZmdfaXRlbXM6CisgICAgICAgIG5ld19jZmdfZmlsZS53cml0ZShjZmdfaXRlbSArICJcbiIpCisgICAgbmV3X2NmZ19maWxlLmNsb3NlKCkKKworICAgIG5ld19mZWF0dXJlX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmVfYmFzZW5hbWUgKyAiLnNjYyIpCisgICAgbmV3X2ZlYXR1cmVfZmlsZSA9IG9wZW4obmV3X2ZlYXR1cmVfZmlsZW5hbWUsICJ3IikKKyAgICBuZXdfZmVhdHVyZV9maWxlLndyaXRlKCJkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gXCIiICsgZmVhdHVyZV9kZXNjcmlwdGlvbiArICJcIlxuIikKKyAgICBuZXdfZmVhdHVyZV9maWxlLndyaXRlKCJkZWZpbmUgS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSAiICsgZmVhdHVyZV9jb21wYXQgKyAiXG5cbiIpCisKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgcGF0Y2hfZGlyLCBwYXRjaF9maWxlID0gb3MucGF0aC5zcGxpdChwYXRjaCkKKyAgICAgICAgbmV3X2ZlYXR1cmVfZmlsZS53cml0ZSgicGF0Y2ggIiArIHBhdGNoX2ZpbGUgKyAiXG4iKQorCisgICAgbmV3X2ZlYXR1cmVfZmlsZS53cml0ZSgia2NvbmYgbm9uLWhhcmR3YXJlICIgKyBmZWF0dXJlX2Jhc2VuYW1lICsgIi5jZmdcbiIpCisgICAgbmV3X2ZlYXR1cmVfZmlsZS5jbG9zZSgpCisKKyAgICBwcmludCAiQWRkZWQgZmVhdHVyZToiCisgICAgcHJpbnQgIlx0JXMiICUgZmVhdHVyZV9kaXJuYW1lICsgIi8iICsgZmVhdHVyZQorCisKK2RlZiBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgorICAgICIiIgorICAgIERldGVybWluZSB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgZmVhdHVyZSBpcyBpbiB1c2UgYnkgdGhlIEJTUC4KKyAgICBSZXR1cm4gVHJ1ZSBpZiBzbywgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICIiIgorICAgIGZlYXR1cmVzID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgZm9yIGYgaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIGYgPT0gZmVhdHVyZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGZlYXR1cmVfcmVtb3ZlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgUmVtb3ZlIHRoZSBzcGVjaWZpZWQgZmVhdHVyZSBmcm9tIHRoZSBhdmFpbGFibGUgcmVjaXBlLXNwYWNlCisgICAgZmVhdHVyZXMgZGVmaW5lZCBmb3IgdGhlIEJTUC4KKyAgICAiIiIKKyAgICBmZWF0dXJlcyA9IHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIG5ld19mZWF0dXJlcyA9IFtdCisgICAgZm9yIGYgaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIGYgPT0gZmVhdHVyZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG5ld19mZWF0dXJlcy5hcHBlbmQoZikKKyAgICB3cml0ZV9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG5ld19mZWF0dXJlcykKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmUpOgorICAgICIiIgorICAgIFJlbW92ZSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBmcm9tIGEgQlNQLgorICAgICIiIgorICAgIGlmIG5vdCBjaGVja19mZWF0dXJlX25hbWUoZmVhdHVyZSk6CisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsICJmZWF0dXJlcy8iICsgZmVhdHVyZSkgb3IgXAorICAgICAgICAgICAgZmVhdHVyZV9pbl91c2Uoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCAiY2ZnLyIgKyBmZWF0dXJlKToKKyAgICAgICAgcHJpbnQgIkZlYXR1cmUgJXMgaXMgaW4gdXNlICh1c2UgJ2ZlYXR1cmUgcm0nIHRvIHVuLXVzZSBpdCBmaXJzdCksIGV4aXRpbmciICUgZmVhdHVyZQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmlsZXNkaXIgPSBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBpZiBub3QgZmlsZXNkaXI6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBkZXN0cm95IGZlYXR1cmUgKCVzKSwgbm8gJ2ZpbGVzJyBkaXIgZm91bmQiICUgZmVhdHVyZQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdHVyZV9kaXJuYW1lID0gImZlYXR1cmVzIgorICAgIGZlYXRkaXIgPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGZlYXR1cmVfZGlybmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdGRpcik6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIGZlYXR1cmUgZGlyZWN0b3J5ICglcykiICUgZmVhdHVyZV9kaXJuYW1lCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmZWF0dXJlX2ZxbiA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBmZWF0dXJlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0dXJlX2Zxbik6CisgICAgICAgIGZlYXR1cmVfZGlybmFtZSA9ICJjZmciCisgICAgICAgIGZlYXRkaXIgPSBvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGZlYXR1cmVfZGlybmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZlYXRkaXIpOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgZmVhdHVyZSBkaXJlY3RvcnkgKCVzKSIgJSBmZWF0dXJlX2Rpcm5hbWUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGZlYXR1cmVfZnFuID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmVfZmlsZW5hbWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0dXJlX2Zxbik6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBmZWF0dXJlICglcykiICUgZmVhdHVyZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGYgPSBvcGVuKGZlYXR1cmVfZnFuLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHMgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgcy5zdGFydHN3aXRoKCJwYXRjaCAiKSBvciBzLnN0YXJ0c3dpdGgoImtjb25mICIpOgorICAgICAgICAgICAgc3BsaXRfbGluZSA9IHMuc3BsaXQoKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgc3BsaXRfbGluZVstMV0pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQorICAgIGYuY2xvc2UoKQorICAgIG9zLnJlbW92ZShmZWF0dXJlX2ZxbikKKworICAgIGZlYXR1cmVfcmVtb3ZlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSkKKworICAgIHByaW50ICJSZW1vdmVkIGZlYXR1cmU6IgorICAgIHByaW50ICJcdCVzIiAlIGZlYXR1cmVfZGlybmFtZSArICIvIiArIGZlYXR1cmUKKworCitkZWYgYmFzZV9icmFuY2hlcyhjb250ZXh0KToKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBiYXNlIGJyYW5jaGVzIGZvdW5kIGluIHRoZSBrZXJuZWwgZ2l0IHJlcG8uCisgICAgIiIiCisgICAgZ2l0dXJsID0gZmluZF9naXR1cmwoY29udGV4dCkKKworICAgIHByaW50ICJHZXR0aW5nIGJyYW5jaGVzIGZyb20gcmVtb3RlIHJlcG8gJXMuLi4iICUgZ2l0dXJsCisKKyAgICBnaXRjbWQgPSAiZ2l0IGxzLXJlbW90ZSAlcyAqaGVhZHMqIDI+JjEiICUgKGdpdHVybCkKKyAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGdpdGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQorCisgICAgYnJhbmNoZXMgPSBbXQorCisgICAgaWYgdG1wOgorICAgICAgICB0bXBsaW5lID0gdG1wLnNwbGl0KCJcbiIpCisgICAgICAgIGZvciBsaW5lIGluIHRtcGxpbmU6CisgICAgICAgICAgICBpZiBsZW4obGluZSk9PTA6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiBub3QgbGluZS5lbmRzd2l0aCgiYmFzZSIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJyZWZzL2hlYWRzLyIpCisgICAgICAgICAgICBrYnJhbmNoID0gbGluZVtpZHggKyBsZW4oInJlZnMvaGVhZHMvIik6XQorICAgICAgICAgICAgaWYga2JyYW5jaC5maW5kKCIvIikgPT0gLTEgYW5kIGticmFuY2guZmluZCgiYmFzZSIpID09IC0xOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZHggPSBrYnJhbmNoLmZpbmQoImJhc2UiKQorICAgICAgICAgICAgYnJhbmNoZXMuYXBwZW5kKGticmFuY2hbOmlkeCAtIDFdKQorCisgICAgcmV0dXJuIGJyYW5jaGVzCisKKworZGVmIGFsbF9icmFuY2hlcyhjb250ZXh0KToKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBsaXN0IG9mIGFsbCB0aGUgYnJhbmNoZXMgZm91bmQgaW4gdGhlIGtlcm5lbCBnaXQgcmVwby4KKyAgICAiIiIKKyAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQorCisgICAgcHJpbnQgIkdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyAlcy4uLiIgJSBnaXR1cmwKKworICAgIGdpdGNtZCA9ICJnaXQgbHMtcmVtb3RlICVzICpoZWFkcyogMj4mMSIgJSAoZ2l0dXJsKQorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZ2l0Y21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICBicmFuY2hlcyA9IFtdCisKKyAgICBiYXNlX3ByZWZpeGVzID0gTm9uZQorCisgICAgdHJ5OgorICAgICAgICBicmFuY2hlc19iYXNlID0gY29udGV4dFsiYnJhbmNoZXNfYmFzZSJdCisgICAgICAgIGlmIGJyYW5jaGVzX2Jhc2U6CisgICAgICAgICAgICBiYXNlX3ByZWZpeGVzID0gYnJhbmNoZXNfYmFzZS5zcGxpdCgiOiIpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICBhcmNoID0gY29udGV4dFsiYXJjaCJdCisKKyAgICBpZiB0bXA6CisgICAgICAgIHRtcGxpbmUgPSB0bXAuc3BsaXQoIlxuIikKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wbGluZToKKyAgICAgICAgICAgIGlmIGxlbihsaW5lKT09MDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgicmVmcy9oZWFkcy8iKQorICAgICAgICAgICAga2JyYW5jaCA9IGxpbmVbaWR4ICsgbGVuKCJyZWZzL2hlYWRzLyIpOl0KKyAgICAgICAgICAgIGticmFuY2hfcHJlZml4ID0ga2JyYW5jaC5yc3BsaXQoIi8iLCAxKVswXQorCisgICAgICAgICAgICBpZiBiYXNlX3ByZWZpeGVzOgorICAgICAgICAgICAgICAgIGZvciBiYXNlX3ByZWZpeCBpbiBiYXNlX3ByZWZpeGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBrYnJhbmNoX3ByZWZpeCA9PSBiYXNlX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaGVzLmFwcGVuZChrYnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIChrYnJhbmNoLmZpbmQoIi8iKSAhPSAtMSBhbmQKKyAgICAgICAgICAgICAgICAoa2JyYW5jaC5maW5kKCJzdGFuZGFyZCIpICE9IC0xIG9yIGticmFuY2guZmluZCgiYmFzZSIpICE9IC0xKSBvcgorICAgICAgICAgICAgICAgIGticmFuY2ggPT0gImJhc2UiKToKKyAgICAgICAgICAgICAgICBicmFuY2hlcy5hcHBlbmQoa2JyYW5jaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgcmV0dXJuIGJyYW5jaGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtLy5naXRpZ25vcmUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ODM2N2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSwxMDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICB4Zjg2LWlucHV0LW1vdXNlIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIGtlcm5lbC1kZXZpY2V0cmVlIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInUtYm9vdCIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToidHVuZWZpbGUiIHByaW86IjQwIiBtc2c6IldoaWNoIG1hY2hpbmUgdHVuaW5nIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8iIGRlZmF1bHQ6InR1bmVfY29ydGV4YTgiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hcm0xMTM2amZfcyIgbXNnOiJhcm0xMTM2amYtcyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2FybTkyMHQiIG1zZzoiYXJtOTIwdCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2FybTkyNmVqcyIgbXNnOiJhcm05MjZlanMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hcm05dGRtaSIgbXNnOiJhcm05dGRtaSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleGE1IiBtc2c6ImNvcnRleGE1IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4YTciIG1zZzoiY29ydGV4YTcgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhhOCIgbXNnOiJjb3J0ZXhhOCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleGE5IiBtc2c6ImNvcnRleGE5IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4YTE1IiBtc2c6ImNvcnRleGExNSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleG0xIiBtc2c6ImNvcnRleG0xIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4bTMiIG1zZzoiY29ydGV4bTMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhyNCIgbXNnOiJjb3J0ZXhyNCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2VwOTMxMiIgbXNnOiJlcDkzMTIgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9pd21teHQiIG1zZzoiaXdtbXh0IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfc3Ryb25nYXJtMTEwMCIgbXNnOiJzdHJvbmdhcm0xMTAwIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfeHNjYWxlIiBtc2c6InhzY2FsZSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2FybTExMzZqZl9zIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2FybTkyMHQiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyMHQuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9hcm05MjZlanMiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2FybTl0ZG1pIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGE1IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGE3IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGE4IjogfX0KK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhhOGhmLW5lb24iCitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhhOSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3J0ZXhhMTUiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleG0xIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleG0zIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleHI0IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2VwOTMxMiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtZXA5MzEyLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfaXdtbXh0IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9zdHJvbmdhcm0xMTAwIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdHJvbmdhcm0xMTAwLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfeHNjYWxlIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jCisKK0lNQUdFX0ZTVFlQRVMgKz0gInRhci5iejIgamZmczIiCitFWFRSQV9JTUFHRUNNRF9qZmZzMiA9ICItbG5wICIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eU8wIgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCitLRVJORUxfSU1BR0VUWVBFID0gInVJbWFnZSIKK0tFUk5FTF9ERVZJQ0VUUkVFID0gImFtMzM1eC1ib25lLmR0YiBhbTMzNXgtYm9uZWJsYWNrLmR0YiIKK0tFUk5FTF9FWFRSQV9BUkdTICs9ICJMT0FEQUREUj0ke1VCT09UX0VOVFJZUE9JTlR9IgorCitTUExfQklOQVJZID0gIk1MTyIKK1VCT09UX1NVRkZJWCA9ICJpbWciCit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJ1Ym9vdF9tYWNoaW5lIiBwcmlvOiI0MCIgbXNnOiJQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciBVQk9PVF9NQUNISU5FOiIgZGVmYXVsdDoiYW0zMzV4X2V2bV9jb25maWciIH19CitVQk9PVF9NQUNISU5FID0gInt7PXVib290X21hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6InVib290X2VudHJ5cG9pbnQiIHByaW86IjQwIiBtc2c6IlBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIFVCT09UX0VOVFJZUE9JTlQ6IiBkZWZhdWx0OiIweDgwMDA4MDAwIiB9fQorVUJPT1RfRU5UUllQT0lOVCA9ICJ7ez11Ym9vdF9lbnRyeXBvaW50fX0iCit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJ1Ym9vdF9sb2FkYWRkcmVzcyIgcHJpbzoiNDAiIG1zZzoiUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgVUJPT1RfTE9BREFERFJFU1M6IiBkZWZhdWx0OiIweDgwMDA4MDAwIiB9fQorVUJPT1RfTE9BREFERFJFU1MgPSAie3s9dWJvb3RfbG9hZGFkZHJlc3N9fSIKKworTUFDSElORV9GRUFUVVJFUyA9ICJ1c2JnYWRnZXQgdXNiaG9zdCB2ZmF0IGFsc2EiCisKK0lNQUdFX0JPT1RfRklMRVMgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0gTUxPIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzUyODkzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCkBAIC0wLDAgKzEsMzQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitTZWN0aW9uICJNb2R1bGUiCisJTG9hZAkiZXh0bW9kIgorCUxvYWQJImRiZSIKKwlMb2FkCSJnbHgiCisJTG9hZAkiZnJlZXR5cGUiCisJTG9hZAkidHlwZTEiCisJTG9hZAkicmVjb3JkIgorCUxvYWQJImRyaSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKwlJZGVudGlmaWVyCSJCdWlsdGluIERlZmF1bHQgTW9uaXRvciIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorCUlkZW50aWZpZXIJIkJ1aWx0aW4gRGVmYXVsdCBmYmRldiBEZXZpY2UgMCIKKwlEcml2ZXIJCSJvbWFwZmIiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKwlJZGVudGlmaWVyCSJCdWlsdGluIERlZmF1bHQgZmJkZXYgU2NyZWVuIDAiCisJRGV2aWNlCQkiQnVpbHRpbiBEZWZhdWx0IGZiZGV2IERldmljZSAwIgorCU1vbml0b3IJCSJCdWlsdGluIERlZmF1bHQgTW9uaXRvciIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorCUlkZW50aWZpZXIJIkJ1aWx0aW4gRGVmYXVsdCBMYXlvdXQiCisJU2NyZWVuCQkiQnVpbHRpbiBEZWZhdWx0IGZiZGV2IFNjcmVlbiAwIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJGbGFncyIKKwlPcHRpb24JCSJEb250WmFwIiAgIjAiCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgzMDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtbm9uX2hhcmR3YXJlLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1ub25faGFyZHdhcmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmM5MGMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtbm9uX2hhcmR3YXJlLmNmZwpAQCAtMCwwICsxLDMxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tbm9uX2hhcmR3YXJlLmNmZworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfTkZTX0RFRl9GSUxFX0lPX1NJWkU9MTAyNAorCisjCisjIE11bHRpcGxlIERldmljZSBTdXBwb3J0CisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfTk9fSFo9eQorCisjCisjIENQVUlkbGUKKyMKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CitDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfRlM9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNX0RFQlVHPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTVmM2I1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCBhcm0KKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHByZWVtcHQtcnQga2VybmVscworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE0YzJjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDE0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBhcm0KKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBzdGFuZGFyZCBrZXJuZWxzCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFjMjUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCBhcm0KKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmUxYWUwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDMyMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworIworIyBTeXN0ZW0gVHlwZQorIworQ09ORklHX0FSQ0hfT01BUD15CisKKyMKKyMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIFRJIE9NQVAgQ29tbW9uIEZlYXR1cmVzCisjCitDT05GSUdfQVJDSF9PTUFQMlBMVVM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKK0NPTkZJR19PTUFQX1NNQVJUUkVGTEVYPXkKK0NPTkZJR19PTUFQX1NNQVJUUkVGTEVYX0NMQVNTMz15CitDT05GSUdfT01BUF9NQk9YX0ZXSz1tCitDT05GSUdfT01BUF9NQk9YX0tGSUZPX1NJWkU9MjU2CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCitDT05GSUdfTUFDSF9PTUFQM19CRUFHTEU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQkVFPXkKK0NPTkZJR19BUk1fRVJSQVRBXzQzMDk3Mz15CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfTEVEUz15CisKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF9PTUFQPXkKK0NPTkZJR19TRVJJQUxfT01BUF9DT05TT0xFPXkKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19WRlA9eQorQ09ORklHX05FT049eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKK0NPTkZJR19QTV9SVU5USU1FPXkKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD15CisKK0NPTkZJR19NVERfTkFORF9PTUFQMj15CisKK0NPTkZJR19NVERfVUJJPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19TTVNDOTExWD15CitDT05GSUdfVVNCX05FVF9TTVNDOTVYWD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX0VWREVWPXkKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19PTUFQPXkKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorQ09ORklHX1NQSV9PTUFQMjRYWD15CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworQ09ORklHX0dQSU9fVFdMNDAzMD15CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworQ09ORklHX09NQVBfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfVFdMNDAzMF9DT1JFPXkKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9EVU1NWT15CitDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRFJNPW0KKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9WUkFNPXkKK0NPTkZJR19PTUFQMl9WUkZCPXkKK0NPTkZJR19PTUFQMl9EU1M9eQorQ09ORklHX09NQVAyX1ZSQU1fU0laRT0xNAorQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUPXkKKyMgQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX0RQST15CisjIENPTkZJR19PTUFQMl9EU1NfUkZCSSBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX1ZFTkM9eQorIyBDT05GSUdfT01BUDJfRFNTX1NESSBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX0RTST15CisjIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCitDT05GSUdfRkJfT01BUDI9eQorQ09ORklHX0ZCX09NQVAyX0RFQlVHX1NVUFBPUlQ9eQorQ09ORklHX0ZCX09NQVAyX05VTV9GQlM9MgorCisjCisjIE9NQVAyLzMgRGlzcGxheSBEZXZpY2UgRHJpdmVycworIworQ09ORklHX1BBTkVMX0dFTkVSSUNfRFBJPXkKK0NPTkZJR19QQU5FTF9EVkk9eQorQ09ORklHX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxPXkKKyMgQ09ORklHX1BBTkVMX0xHUEhJTElQU19MQjAzNVEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9UQUFMIGlzIG5vdCBzZXQKK0NPTkZJR19QQU5FTF9UUE9fVEQwNDNNVEVBMT1tCisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMgRE1BIERldmljZXMKK0NPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19ETUFfT01BUD15CitDT05GSUdfRE1BX09GPXkKKworQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DX09NQVBfVFdMNDAzMD15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX09URz15CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX09NQVAyUExVUz15CitDT05GSUdfVVNCX09NQVA9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfT1RHPXkKK0NPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfR0FER0VUPXkKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CitDT05GSUdfVVNCX09UR19VVElMUz15CitDT05GSUdfVFdMNDAzMF9VU0I9eQorCisjIFVTQiBnYWRnZXQgbW9kdWxlcworQ09ORklHX1VTQl9HX05DTT15CitDT05GSUdfVVNCX01BU1NfU1RPUkFHRT15CisKK0NPTkZJR19NTUM9eQorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19PTUFQX0hTPXkKKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX1ZGQVRfRlM9eQorCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisKKyMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEVtdWxhdGlvbiBzdXBwb3J0CisjCitDT05GSUdfQVBNX0VNVUxBVElPTj15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjg0MDBkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDggQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKK2tjb25mIG5vbi1oYXJkd2FyZSB7e21hY2hpbmV9fS1ub25faGFyZHdhcmUuY2ZnCisKK2luY2x1ZGUgZmVhdHVyZXMvdXNiLW5ldC91c2ItbmV0LnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4ZGIwMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWNjYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTgyZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxY2M1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlMWJiOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9DT1BZSU5HLk1JVCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vQ09QWUlORy5NSVQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBDT1BZSU5HLk1JVApjb3B5IHRvIHlvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vQ09QWUlORy5NSVQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4NjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FCkBAIC0wLDAgKzEsMTE4IEBACitUaGlzIFJFQURNRSBmaWxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGJ1aWxkaW5nIHRoZSBtZXRhLXt7PW1hY2hpbmV9fQorQlNQIGxheWVyLCBhbmQgYm9vdGluZyB0aGUgaW1hZ2VzIGNvbnRhaW5lZCBpbiB0aGUgL2JpbmFyeSBkaXJlY3RvcnkuCitQbGVhc2Ugc2VlIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rpb25zIGJlbG93IGZvciBkZXRhaWxzLgorCisKK0RlcGVuZGVuY2llcworPT09PT09PT09PT09CisKK1RoaXMgbGF5ZXIgZGVwZW5kcyBvbjoKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UKKyAgYnJhbmNoOiBtYXN0ZXIKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlCisgIGxheWVyczogbWV0YQorICBicmFuY2g6IG1hc3RlcgorCisgIFVSSTogZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHh4eAorICBsYXllcnM6IHh4eHgKKyAgYnJhbmNoOiBtYXN0ZXIKKworCitQYXRjaGVzCis9PT09PT09CisKK1BsZWFzZSBzdWJtaXQgYW55IHBhdGNoZXMgYWdhaW5zdCB0aGlzIEJTUCB0byB0aGUgWW9jdG8gbWFpbGluZyBsaXN0CisoeW9jdG9AeW9jdG9wcm9qZWN0Lm9yZykgYW5kIGNjOiB0aGUgbWFpbnRhaW5lcjoKKworTWFpbnRhaW5lcjogWFhYIFlZWVlZWSA8eHh4Lnl5eXl5eUB6enp6ei5jb20+CisKK1BsZWFzZSBzZWUgdGhlIG1ldGEteHh4eC9NQUlOVEFJTkVSUyBmaWxlIGZvciBtb3JlIGRldGFpbHMuCisKKworVGFibGUgb2YgQ29udGVudHMKKz09PT09PT09PT09PT09PT09CisKKyAgSS4gQnVpbGRpbmcgdGhlIG1ldGEte3s9bWFjaGluZX19IEJTUCBsYXllcgorIElJLiBCb290aW5nIHRoZSBpbWFnZXMgaW4gL2JpbmFyeQorCisKK0kuIEJ1aWxkaW5nIHRoZSBtZXRhLXt7PW1hY2hpbmV9fSBCU1AgbGF5ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tIHJlcGxhY2Ugd2l0aCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgZm9yIHlvdXIgbGF5ZXIgLS0tCisKK0luIG9yZGVyIHRvIGJ1aWxkIGFuIGltYWdlIHdpdGggQlNQIHN1cHBvcnQgZm9yIGEgZ2l2ZW4gcmVsZWFzZSwgeW91CituZWVkIHRvIGRvd25sb2FkIHRoZSBjb3JyZXNwb25kaW5nIEJTUCB0YXJiYWxsIGZyb20gdGhlICdCb2FyZCBTdXBwb3J0CitQYWNrYWdlIChCU1ApIERvd25sb2FkcycgcGFnZSBvZiB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorCitIYXZpbmcgZG9uZSB0aGF0LCBhbmQgYXNzdW1pbmcgeW91IGV4dHJhY3RlZCB0aGUgQlNQIHRhcmJhbGwgY29udGVudHMKK2F0IHRoZSB0b3AtbGV2ZWwgb2YgeW91ciB5b2N0byBidWlsZCB0cmVlLCB5b3UgY2FuIGJ1aWxkIGEKK3t7PW1hY2hpbmV9fSBpbWFnZSBieSBhZGRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBtZXRhLXt7PW1hY2hpbmV9fQorbGF5ZXIgdG8gYmJsYXllcnMuY29uZiwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgbGF5ZXJzIG5lZWRlZCAodG8gYWNjZXNzCitjb21tb24gbWV0YWRhdGEgc2hhcmVkIGJldHdlZW4gQlNQcykgZS5nLjoKKworICB5b2N0by9tZXRhLXh4eHggXAorICB5b2N0by9tZXRhLXh4eHgvbWV0YS17ez1tYWNoaW5lfX0gXAorCitUbyBlbmFibGUgdGhlIHt7PW1hY2hpbmV9fSBsYXllciwgYWRkIHRoZSB7ez1tYWNoaW5lfX0gTUFDSElORSB0byBsb2NhbC5jb25mOgorCisgIE1BQ0hJTkUgPz0gInt7PW1hY2hpbmV9fSIKKworWW91IHNob3VsZCB0aGVuIGJlIGFibGUgdG8gYnVpbGQgYSB7ez1tYWNoaW5lfX0gaW1hZ2UgYXMgc3VjaDoKKworICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisKK0F0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIGJ1aWxkLCB5b3Ugc2hvdWxkIGhhdmUgYSBsaXZlIGltYWdlIHRoYXQKK3lvdSBjYW4gYm9vdCBmcm9tIGEgVVNCIGZsYXNoIGRyaXZlIChzZWUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBkbwordGhhdCBiZWxvdywgaW4gdGhlIHNlY3Rpb24gJ0Jvb3RpbmcgdGhlIGltYWdlcyBmcm9tIC9iaW5hcnknKS4KKworQXMgYW4gYWx0ZXJuYXRpdmUgdG8gZG93bmxvYWRpbmcgdGhlIEJTUCB0YXJiYWxsLCB5b3UgY2FuIGFsc28gd29yaworZGlyZWN0bHkgZnJvbSB0aGUgbWV0YS14eHh4IGdpdCByZXBvc2l0b3J5LiAgRm9yIGVhY2ggQlNQIGluIHRoZQorJ21ldGEteHh4eCcgcmVwb3NpdG9yeSwgdGhlcmUgYXJlIG11bHRpcGxlIGJyYW5jaGVzLCBvbmUgY29ycmVzcG9uZGluZwordG8gZWFjaCBtYWpvciByZWxlYXNlIHN0YXJ0aW5nIHdpdGggJ2xhdmVybmUnICgwLjkwKSwgaW4gYWRkaXRpb24gdG8KK3RoZSBsYXRlc3QgY29kZSB3aGljaCB0cmFja3MgdGhlIGN1cnJlbnQgbWFzdGVyIChub3RlIHRoYXQgbm90IGFsbAorQlNQcyBhcmUgcHJlc2VudCBpbiBldmVyeSByZWxlYXNlKS4gIEluc3RlYWQgb2YgZXh0cmFjdGluZyBhIEJTUAordGFyYmFsbCBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgeW9jdG8gYnVpbGQgdHJlZSwgeW91IGNhbgorZXF1aXZhbGVudGx5IGNoZWNrIG91dCB0aGUgYXBwcm9wcmlhdGUgYnJhbmNoIGZyb20gdGhlIG1ldGEteHh4eAorcmVwb3NpdG9yeSBhdCB0aGUgc2FtZSBsb2NhdGlvbi4KKworCitJSS4gQm9vdGluZyB0aGUgaW1hZ2VzIGluIC9iaW5hcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0gcmVwbGFjZSB3aXRoIHNwZWNpZmljIGluc3RydWN0aW9ucyBmb3IgeW91ciBwbGF0Zm9ybSAtLS0KKworVGhpcyBCU1AgY29udGFpbnMgYm9vdGFibGUgbGl2ZSBpbWFnZXMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRpcmVjdGx5Citib290IFlvY3RvIG9mZiBvZiBhIFVTQiBmbGFzaCBkcml2ZS4KKworVW5kZXIgTGludXgsIGluc2VydCBhIFVTQiBmbGFzaCBkcml2ZS4gIEFzc3VtaW5nIHRoZSBVU0IgZmxhc2ggZHJpdmUKK3Rha2VzIGRldmljZSAvZGV2L3NkZiwgdXNlIGRkIHRvIGNvcHkgdGhlIGxpdmUgaW1hZ2UgdG8gaXQuICBGb3IKK2V4YW1wbGU6CisKKyMgZGQgaWY9Y29yZS1pbWFnZS1zYXRvLXt7PW1hY2hpbmV9fS0yMDEwMTIwNzA1MzczOC5oZGRpbWcgb2Y9L2Rldi9zZGYKKyMgc3luYworIyBlamVjdCAvZGV2L3NkZgorCitUaGlzIHNob3VsZCBnaXZlIHlvdSBhIGJvb3RhYmxlIFVTQiBmbGFzaCBkZXZpY2UuICBJbnNlcnQgdGhlIGRldmljZQoraW50byBhIGJvb3RhYmxlIFVTQiBzb2NrZXQgb24gdGhlIHRhcmdldCwgYW5kIHBvd2VyIG9uLiAgVGhpcyBzaG91bGQKK3Jlc3VsdCBpbiBhIHN5c3RlbSBib290ZWQgdG8gdGhlIFNhdG8gZ3JhcGhpY2FsIGRlc2t0b3AuCisKK0lmIHlvdSB3YW50IGEgdGVybWluYWwsIHVzZSB0aGUgYXJyb3dzIGF0IHRoZSB0b3Agb2YgdGhlIFVJIHRvIG1vdmUgdG8KK2RpZmZlcmVudCBwYWdlcyBvZiBhdmFpbGFibGUgYXBwbGljYXRpb25zLCBvbmUgb2Ygd2hpY2ggaXMgbmFtZWQKKydUZXJtaW5hbCcuICBDbGlja2luZyB0aGF0IHNob3VsZCBnaXZlIHlvdSBhIHJvb3QgdGVybWluYWwuCisKK0lmIHlvdSB3YW50IHRvIHNzaCBpbnRvIHRoZSBzeXN0ZW0sIHlvdSBjYW4gdXNlIHRoZSByb290IHRlcm1pbmFsIHRvCitpZmNvbmZpZyB0aGUgSVAgYWRkcmVzcyBhbmQgdXNlIHRoYXQgdG8gc3NoIGluLiAgVGhlIHJvb3QgcGFzc3dvcmQgaXMKK2VtcHR5LCBzbyB0byBsb2cgaW4gdHlwZSAncm9vdCcgZm9yIHRoZSB1c2VyIG5hbWUgYW5kIGhpdCAnRW50ZXInIGF0Cit0aGUgUGFzc3dvcmQgcHJvbXB0OiBhbmQgeW91IHNob3VsZCBiZSBpbi4KKworLS0tLQorCitJZiB5b3UgZmluZCB5b3UncmUgZ2V0dGluZyBjb3JydXB0IGltYWdlcyBvbiB0aGUgVVNCIChpdCBkb2Vzbid0IHNob3cKK3RoZSBzeXNsaW51eCBib290OiBwcm9tcHQsIG9yIHRoZSBib290OiBwcm9tcHQgY29udGFpbnMgc3RyYW5nZQorY2hhcmFjdGVycyksIHRyeSBkb2luZyB0aGlzIGZpcnN0OgorCisjIGRkIGlmPS9kZXYvemVybyBvZj0vZGV2L3NkZiBicz0xTSBjb3VudD01MTIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FLnNvdXJjZXMgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL1JFQURNRS5zb3VyY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGNiN2IKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL1JFQURNRS5zb3VyY2VzCkBAIC0wLDAgKzEsMTcgQEAKK1RoZSBzb3VyY2VzIGZvciB0aGUgcGFja2FnZXMgY29tcHJpc2luZyB0aGUgaW1hZ2VzIHNoaXBwZWQgd2l0aCB0aGlzCitCU1AgY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb246CisKK2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8KKworVGhlIG1ldGFkYXRhIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcyBzaGlwcGVkIHdpdGggdGhpcyBCU1AsIGluCithZGRpdGlvbiB0byB0aGUgY29kZSBjb250YWluZWQgaW4gdGhpcyBCU1AsIGNhbiBiZSBmb3VuZCBhdCB0aGUKK2ZvbGxvd2luZyBsb2NhdGlvbjoKKworaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy95b2N0by0xLjEvcG9reS1lZGlzb24tNi4wLnRhci5iejIKKworVGhlIG1ldGFkYXRhIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcyBzaGlwcGVkIHdpdGggdGhpcyBCU1AsIGluCithZGRpdGlvbiB0byB0aGUgY29kZSBjb250YWluZWQgaW4gdGhpcyBCU1AsIGNhbiBhbHNvIGJlIGZvdW5kIGF0IHRoZQorZm9sbG93aW5nIGxvY2F0aW9uczoKKworZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQKK2dpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEteHh4eApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9iaW5hcnkvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vYmluYXJ5Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vYmluYXJ5Ly5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vY29uZi9sYXllci5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyOWY0NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vY29uZi9sYXllci5jb25mCkBAIC0wLDAgKzEsMTAgQEAKKyMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICitCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworIyBXZSBoYXZlIGEgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ7ez1tYWNoaW5lfX0iCitCQkZJTEVfUEFUVEVSTl97ez1tYWNoaW5lfX0gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV97ez1tYWNoaW5lfX0gPSAiNiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lL21hY2hjb25maWcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4NWQzOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDUgQEAKKyMgQXNzdW1lIGEgVVNCIG1vdXNlIGFuZCBrZXlib2FyZCBhcmUgY29ubmVjdGVkCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ0b3VjaHNjcmVlbiIgbXNnOiJEb2VzIHlvdXIgQlNQIGhhdmUgYSB0b3VjaHNjcmVlbj8gKHkvbikiIGRlZmF1bHQ6Im4iIH19CitIQVZFX1RPVUNIU0NSRUVOPXt7PXRvdWNoc2NyZWVufX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImtleWJvYXJkIiBtc2c6IkRvZXMgeW91ciBCU1AgaGF2ZSBhIGtleWJvYXJkPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KK0hBVkVfS0VZQk9BUkQ9e3s9a2V5Ym9hcmR9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDgwNGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzZGRkYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsMjYgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJjdXN0b21fa2VybmVsX3JlbW90ZSIgcHJpbzoiMjAiIG1zZzoiSXMgdGhlIGN1c3RvbSBrZXJuZWwgeW91J2QgbGlrZSB0byB1c2UgaW4gYSByZW1vdGUgZ2l0IHJlcG8/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfcmVtb3RlID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQtZ2l0LXJlcG8iIG5hbWU6ImN1c3RvbV9rZXJuZWxfcmVtb3RlX3BhdGgiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgZnVsbCBVUkkgdG8gdGhlIHJlbW90ZSBnaXQgcmVwbyAodGhlIGRlZmF1bHQgY29ycmVzcG9uZHMgdG8gbGludXgtc3RhYmxlIHYzLjE2LjMpIiBkZWZhdWx0OiJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc3RhYmxlL2xpbnV4LXN0YWJsZS5naXQifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBhbmQgY3VzdG9tX2tlcm5lbF9yZW1vdGUgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdC1naXQtcmVwbyIgbmFtZToiY3VzdG9tX2tlcm5lbF9sb2NhbF9wYXRoIiBwcmlvOiIyMCIgbXNnOiJZb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91J3JlIG5vdCB1c2luZyBhIHJlbW90ZSBnaXQgcmVwby4gIFBsZWFzZSBlbnRlciB0aGUgZnVsbCBwYXRoIHRvIHRoZSBsb2NhbCBnaXQgcmVwbyB5b3Ugd2FudCB0byB1c2UgKHRoZSBkZWZhdWx0IGFzc3VtZXMgYSBsb2NhbCBsaW51eC1zdGFibGUgdjMuMTYuMykiIGRlZmF1bHQ6Ii9ob21lL3Ryei95b2N0by9rZXJuZWxzL2xpbnV4LXN0YWJsZS5naXQifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImN1c3RvbV9rZXJuZWxfbmVlZF9rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCB0byB1c2UgYSBzcGVjaWZpYyAobm9uLW1hc3RlcikgYnJhbmNoPyAoeS9uKSIgZGVmYXVsdDoibiJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX25lZWRfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJjdXN0b21fa2VybmVsX2ticmFuY2giIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgYnJhbmNoIHlvdSB3YW50IHRvIHVzZSAodGhlIGRlZmF1bHQgYnJhbmNoIGNvcnJlc3BvbmRzIHRvIHRoZSBsaW51eC1zdGFibGUgJ2xpbnV4LTMuMTYueScgYnJhbmNoKToiIGRlZmF1bHQ6ImxpbnV4LTMuMTYueSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiY3VzdG9tX2tlcm5lbF9zcmNyZXYiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgU1JDUkVWIChjb21taXQgaWQpIHlvdSdkIGxpa2UgdG8gdXNlICh1c2UgJyR7QVVUT1JFVn0nIHRvIHRyYWNrIHRoZSBjdXJyZW50IEhFQUQpOiIgZGVmYXVsdDoiJHtBVVRPUkVWfSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiY3VzdG9tX2tlcm5lbF9saW51eF92ZXJzaW9uIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIExpbnV4IHZlcnNpb24gb2YgdGhlIGtlcm5lbCB5b3UndmUgc3BlY2lmaWVkOiIgZGVmYXVsdDoiMy4xNi4zIn19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJjdXN0b21fa2VybmVsX2xpbnV4X3ZlcnNpb25fZXh0ZW5zaW9uIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgYSBMaW51eCB2ZXJzaW9uIGV4dGVuc2lvbiBpZiB5b3Ugd2FudCAoaXQgd2lsbCBzaG93IHVwIGF0IHRoZSBlbmQgb2YgdGhlIGtlcm5lbCBuYW1lIHNob3duIGJ5IHVuYW1lKToiIGRlZmF1bHQ6Ii1jdXN0b20ifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQtZmlsZSIgbmFtZToiY3VzdG9tX2tlcm5lbF9kZWZjb25maWciIHByaW86IjIwIiBtc2c6Ikl0J3MgcmVjb21tZW5kZWQgKGJ1dCBub3QgcmVxdWlyZWQpIHRoYXQgY3VzdG9tIGtlcm5lbHMgYmUgYnVpbHQgdXNpbmcgYSBkZWZjb25maWcuICBQbGVhc2UgZW50ZXIgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVmY29uZmlnIGZvciB5b3VyIGtlcm5lbCAoTk9URTogaWYgeW91IGRvbid0IHNwZWNpZnkgYSBkZWZjb25maWcgdGhlIGtlcm5lbCBwcm9iYWJseSB3b24ndCBidWlsZCBvciBib290KToiIGRlZmF1bHQ6IiJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGE5NTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIKQEAgLTAsMCArMSw1NyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0gdGhpcworIyBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSB0aGUgbGludXgteW9jdG8tY3VzdG9tLmJiIHJlY2lwZSBpbgorIyBvZS1jb3JlLgorIworIyBsaW51eC15b2N0by1jdXN0b20uYmI6CisjCisjICAgQSB5b2N0by1ic3AtZ2VuZXJhdGVkIGtlcm5lbCByZWNpcGUgdGhhdCB1c2VzIHRoZSBsaW51eC15b2N0byBhbmQKKyMgICBvZS1jb3JlIGtlcm5lbCBjbGFzc2VzIHRvIGFwcGx5IGEgc3Vic2V0IG9mIHlvY3RvIGtlcm5lbAorIyAgIG1hbmFnZW1lbnQgdG8gZ2l0IG1hbmFnZWQga2VybmVsIHJlcG9zaXRvcmllcy4KKyMKKyMgV2FybmluZzoKKyMKKyMgICBCdWlsZGluZyB0aGlzIGtlcm5lbCB3aXRob3V0IHByb3ZpZGluZyBhIGRlZmNvbmZpZyBvciBCU1AKKyMgICBjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIGJ1aWxkIG9yIGJvb3QgZXJyb3JzLiBUaGlzIGlzIG5vdCBhCisjICAgYnVnLgorIworIyBOb3RlczoKKyMKKyMgICBwYXRjaGVzOiBwYXRjaGVzIGNhbiBiZSBtZXJnZWQgaW50byB0byB0aGUgc291cmNlIGdpdCB0cmVlIGl0c2VsZiwKKyMgICAgICAgICAgICBhZGRlZCB2aWEgdGhlIFNSQ19VUkksIG9yIGNvbnRyb2xsZWQgdmlhIGEgQlNQCisjICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyMKKyMgICBleGFtcGxlIGNvbmZpZ3VyYXRpb24gYWRkaXRpb246CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovL3NtcC5jZmciCisjICAgZXhhbXBsZSBwYXRjaCBhZGRpdGlvbjoKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoCisjICAgZXhhbXBsZSBmZWF0dXJlIGFkZGl0aW9uOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9mZWF0dXJlLnNjYyIKKyMKKworaW5oZXJpdCBrZXJuZWwKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfcmVtb3RlID09ICJ5IjogfX0KK1NSQ19VUkkgPSAie3s9Y3VzdG9tX2tlcm5lbF9yZW1vdGVfcGF0aH19O3Byb3RvY29sPWdpdDtiYXJlY2xvbmU9MTticmFuY2g9JHtLQlJBTkNIfSIKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfcmVtb3RlID09ICJuIjogfX0KK1NSQ19VUkkgPSAiZ2l0Oi8ve3s9Y3VzdG9tX2tlcm5lbF9sb2NhbF9wYXRofX07cHJvdG9jb2w9ZmlsZTtiYXJlY2xvbmU9MTticmFuY2g9JHtLQlJBTkNIfSIKKworU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX25lZWRfa2JyYW5jaCA9PSAieSIgYW5kIGN1c3RvbV9rZXJuZWxfa2JyYW5jaCBhbmQgY3VzdG9tX2tlcm5lbF9rYnJhbmNoICE9ICJtYXN0ZXIiOiB9fQorS0JSQU5DSCA9ICJ7ez1jdXN0b21fa2VybmVsX2ticmFuY2h9fSIKKworTElOVVhfVkVSU0lPTiA/PSAie3s9Y3VzdG9tX2tlcm5lbF9saW51eF92ZXJzaW9ufX0iCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAie3s9Y3VzdG9tX2tlcm5lbF9saW51eF92ZXJzaW9uX2V4dGVuc2lvbn19IgorCitTUkNSRVY9Int7PWN1c3RvbV9rZXJuZWxfc3JjcmV2fX0iCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20ubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20ubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2QyMDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fSBsaW51eC15b2N0by1jdXN0b20KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2RlZmNvbmZpZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWIwZmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZGVmY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorIworIyBQbGFjZWhvbGRlciBmb3IgY3VzdG9tIGRlZmF1bHQga2VybmVsIGNvbmZpZ3VyYXRpb24uICB5b2N0by1ic3Agd2lsbAorIyByZXBsYWNlIHRoaXMgZmlsZSB3aXRoIGEgdXNlci1zcGVjaWZpZWQgZGVmY29uZmlnLgorIwore3sgaWYgY3VzdG9tX2tlcm5lbF9kZWZjb25maWc6IHJlcGxhY2VfZmlsZShvZiwgY3VzdG9tX2tlcm5lbF9kZWZjb25maWcpIH19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjMwOWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxLDkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKKyMKKyMgVXNlZCBieSB5b2N0by1rZXJuZWwgdG8gbWFuYWdlIGNvbmZpZyBvcHRpb25zLgorIworIyB5b2N0by1rZXJuZWwgbWF5IGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGluIGFueQorIyB3YXkgaXQgc2VlcyBmaXQsIGluY2x1ZGluZyByZW1vdmluZyBjb21tZW50cyBsaWtlIHRoaXMsCisjIHNvIGRvbid0IG1hbnVhbGx5IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMgeW91IGRvbid0IHdhbnQKKyMgdG8gbG9zZS4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDExMzhmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEsOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKKyMKKyMgVXNlZCBieSB5b2N0by1rZXJuZWwgdG8gbWFuYWdlIHBhdGNoZXMuCisjCisjIHlvY3RvLWtlcm5lbCBtYXkgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaW4gYW55CisjIHdheSBpdCBzZWVzIGZpdCwgaW5jbHVkaW5nIHJlbW92aW5nIGNvbW1lbnRzIGxpa2UgdGhpcywKKyMgc28gZG9uJ3QgbWFudWFsbHkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgZG9uJ3Qgd2FudAorIyB0byBsb3NlLgorIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmE4MjAxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5jZmcKQEAgLTAsMCArMSw0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCisjCisjIEEgY29udmVuaWVudCBwbGFjZSB0byBhZGQgY29uZmlnIG9wdGlvbnMsIG5vdGhpbmcgbW9yZS4KKyMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2YjQxMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsMTggQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKKyMKKyMgVGhlIHRvcC1sZXZlbCAnZmVhdHVyZScgZm9yIHRoZSB7ez1tYWNoaW5lfX0gY3VzdG9tIGtlcm5lbC4KKyMKKyMgRXNzZW50aWFsbHkgdGhpcyBpcyBhIGNvbnZlbmllbnQgdG9wLWxldmVsIGNvbnRhaW5lciBvciBzdGFydGluZworIyBwb2ludCBmb3IgYWRkaW5nIGxvd2VyLWxldmVsIGNvbmZpZyBmcmFnZW1lbnRzIGFuZCBmZWF0dXJlcy4KKyMKKworIyB7ez1tYWNoaW5lfX0uY2ZnIGluIHRoZSBsaW51eC15b2N0by1jdXN0b20gc3ViZGlyIGlzIGp1c3QgYQorIyBjb252ZW5pZW50IHBsYWNlIGZvciBhZGRpbmcgcmFuZG9tIGNvbmZpZyBmcmFnbWVudHMuCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworIyBUaGVzZSBhcmUgdXNlZCBieSB5b2N0by1rZXJuZWwgdG8gYWRkIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzLgorIyBEb24ndCByZW1vdmUgaWYgeW91IHBsYW4gb24gdXNpbmcgeW9jdG8ta2VybmVsIHdpdGggdGhpcyBCU1AuCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODkzNDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsNzcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToidHVuZWZpbGUiIHByaW86IjQwIiBtc2c6IldoaWNoIG1hY2hpbmUgdHVuaW5nIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8iIGRlZmF1bHQ6InR1bmVfY29yZTIiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9pNTg2IiBtc2c6Imk1ODYgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9hdG9tIiBtc2c6IkF0b20gdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3JlMiIgbXNnOiJDb3JlMiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2k1ODYiOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9hdG9tIjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hdG9tLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29yZTIiOiB9fQorREVGQVVMVFRVTkU9ImNvcmUyLTMyIgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYworCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ3aWZpIGVmaSBwY2Jpb3MiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgKGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiKTogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InhzZXJ2ZXJfY2hvaWNlIiBwcmlvOiI1MCIgbXNnOiJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZToiIGRlZmF1bHQ6InhzZXJ2ZXJfdmVzYSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX3Zlc2EiIG1zZzoiVkVTQSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTE1IiBtc2c6Imk5MTUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTk2NSIgbXNnOiJpOTY1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2ZiZGV2IiBtc2c6ImZiZGV2IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX21vZGVzZXR0aW5nIiBtc2c6Im1vZGVzZXR0aW5nIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ4c2VydmVyX2Nob2ljZSIgcHJpbzoiNTAiIG1zZzoiUGxlYXNlIHNlbGVjdCBhbiB4c2VydmVyIGZvciB0aGlzIG1hY2hpbmU6IiBkZWZhdWx0OiJ4c2VydmVyX3Zlc2EiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl92ZXNhIiBtc2c6IlZFU0EgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTkxNSIgbXNnOiJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5NjUiIG1zZzoiaTk2NSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9mYmRldiIgbXNnOiJmYmRldiB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9tb2Rlc2V0dGluZyIgbXNnOiJtb2Rlc2V0dGluZyB4c2VydmVyIHN1cHBvcnQiIH19CisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0b18zLjE5IiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG9fMy4xNCIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IHhzZXJ2ZXJfY2hvaWNlID0gInhzZXJ2ZXJfaTkxNSIgfX0KKwore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitYU0VSVkVSID89ICIke1hTRVJWRVJfWDg2X0JBU0V9IFwKKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9FWFR9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9WRVNBfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTkxNSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTkxNX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5NjUiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5NjV9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9mYmRldiI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfRkJERVZ9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9tb2Rlc2V0dGluZyI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfTU9ERVNFVFRJTkd9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorICAgICAgICAgICAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImxpbnV4LWZpcm13YXJlIHY4NmQgZWVlLWFjcGktc2NyaXB0cyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9wbi1tYXRjaGJveC1wYW5lbC0yID0gIiAtLXdpdGgtYmF0dGVyeT1hY3BpIgorCitHTElCQ19BRERPTlMgPSAibnB0bCIKKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQorQVBQRU5EICs9ICJ2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWEwZjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODMwMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwZDkyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTllZTNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDE2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggaTM4NgorCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3IgcHJlZW1wdC1ydCBrZXJuZWxzCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvYm9vdC1saXZlLnNjYworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MjAxMmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDE2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBpMzg2CisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3Igc3RhbmRhcmQga2VybmVscworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2Jvb3QtbGl2ZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3NTE5NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIGkzODYKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTlkYWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTY4YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDU1IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCitDT05GSUdfWDg2XzMyPXkKK0NPTkZJR19NQVRPTT15CitDT05GSUdfUFJJTlRLPXkKKworIyBCYXNpYyBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGUgYm94IC0gbmV0d29yaywgVVNCLCBQQ0ksIHNvdW5kCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQVRBPXkKK0NPTkZJR19BVEFfR0VORVJJQz15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfUENJPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19TREhDST15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1I4MTY5PXkKK0NPTkZJR19QQVRBX1NDSD15CitDT05GSUdfTU1DX1NESENJX1BDST15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfTkVUPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TRz15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX0hEQV9JTlRFTD15CitDT05GSUdfU0FUQV9BSENJPXkKK0NPTkZJR19BR1A9eQorQ09ORklHX1BNPXkKK0NPTkZJR19BQ1BJPXkKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0lOUFVUPXkKKworIyBNYWtlIHN1cmUgdGhlc2UgYXJlIG9uLCBvdGhlcndpc2UgdGhlIGJvb3R1cCB3b24ndCBiZSBmdW4KK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1BBQ0tFVD15CisKKyMgTmVlZGVkIGZvciBib290aW5nIChhbmQgdXNpbmcpIFVTQiBtZW1vcnkgc3RpY2tzCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKworQ09ORklHX1JEX0daSVA9eQorCisjIE5lZWRlZCBmb3IgYm9vdGluZyAoYW5kIHVzaW5nKSBDRCBpbWFnZXMKK0NPTkZJR19CTEtfREVWX1NSPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzMmYxMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsMjEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworaW5jbHVkZSBmZWF0dXJlcy9pbnRlbC1lMXh4eHgvaW50ZWwtZTEwMC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvaW50ZWwtZTF4eHh4L2ludGVsLWUxeHh4eC5zY2MKKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5MTUiIG9yIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5NjUiOiB9fQoraW5jbHVkZSBmZWF0dXJlcy9pOTE1L2k5MTUuc2NjCisKK2luY2x1ZGUgZmVhdHVyZXMvc2VyaWFsLzgyNTAuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2VyaWNzc29uLTNnL2Y1NTIxZ3cuc2NjCisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KK2luY2x1ZGUgY2ZnL3Zlc2FmYi5zY2MKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2Jvb3QtbGl2ZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjQ5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyY2I1YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvQ09QWUlORy5NSVQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkZTM1NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9DT1BZSU5HLk1JVApAQCAtMCwwICsxLDE3IEBACitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9SRUFETUUgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0M2RmYzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvUkVBRE1FCkBAIC0wLDAgKzEsNjQgQEAKK1RoaXMgUkVBRE1FIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gb24gdGhlIGNvbnRlbnRzIG9mIHRoZQore3s9bGF5ZXJfbmFtZX19IGxheWVyLgorCitQbGVhc2Ugc2VlIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rpb25zIGJlbG93IGZvciBkZXRhaWxzLgorCisKK0RlcGVuZGVuY2llcworPT09PT09PT09PT09CisKK1RoaXMgbGF5ZXIgZGVwZW5kcyBvbjoKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UKKyAgYnJhbmNoOiBtYXN0ZXIKKworICBVUkk6IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlCisgIGxheWVyczogbWV0YQorICBicmFuY2g6IG1hc3RlcgorCisgIFVSSTogZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHh4eAorICBsYXllcnM6IHh4eHgKKyAgYnJhbmNoOiBtYXN0ZXIKKworCitQYXRjaGVzCis9PT09PT09CisKK1BsZWFzZSBzdWJtaXQgYW55IHBhdGNoZXMgYWdhaW5zdCB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIHRvIHRoZQoreHh4eCBtYWlsaW5nIGxpc3QgKHh4eHhAenp6ei5vcmcpIGFuZCBjYzogdGhlIG1haW50YWluZXI6CisKK01haW50YWluZXI6IFhYWCBZWVlZWVkgPHh4eC55eXl5eXlAenp6enouY29tPgorCisKK1RhYmxlIG9mIENvbnRlbnRzCis9PT09PT09PT09PT09PT09PQorCisgIEkuIEFkZGluZyB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIHRvIHlvdXIgYnVpbGQKKyBJSS4gTWlzYworCisKK0kuIEFkZGluZyB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIHRvIHlvdXIgYnVpbGQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tIHJlcGxhY2Ugd2l0aCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgZm9yIHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgLS0tCisKK0luIG9yZGVyIHRvIHVzZSB0aGlzIGxheWVyLCB5b3UgbmVlZCB0byBtYWtlIHRoZSBidWlsZCBzeXN0ZW0gYXdhcmUgb2YKK2l0LgorCitBc3N1bWluZyB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIGV4aXN0cyBhdCB0aGUgdG9wLWxldmVsIG9mIHlvdXIKK3lvY3RvIGJ1aWxkIHRyZWUsIHlvdSBjYW4gYWRkIGl0IHRvIHRoZSBidWlsZCBzeXN0ZW0gYnkgYWRkaW5nIHRoZQorbG9jYXRpb24gb2YgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciB0byBiYmxheWVycy5jb25mLCBhbG9uZyB3aXRoIGFueQorb3RoZXIgbGF5ZXJzIG5lZWRlZC4gZS5nLjoKKworICBCQkxBWUVSUyA/PSAiIFwKKyAgICAvcGF0aC90by95b2N0by9tZXRhIFwKKyAgICAvcGF0aC90by95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAvcGF0aC90by95b2N0by9tZXRhLXlvY3RvLWJzcCBcCisgICAgL3BhdGgvdG8veW9jdG8vbWV0YS17ez1sYXllcl9uYW1lfX0gXAorICAgICIKKworCitJSS4gTWlzYworPT09PT09PT0KKworLS0tIHJlcGxhY2Ugd2l0aCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIC0tLQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2NvbmYvbGF5ZXIuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmZmUxNwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMCBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ7ez1sYXllcl9uYW1lfX0iCitCQkZJTEVfUEFUVEVSTl97ez1sYXllcl9uYW1lfX0gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV97ez1sYXllcl9uYW1lfX0gPSAie3s9bGF5ZXJfcHJpb3JpdHl9fSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhODljMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCkBAIC0wLDAgKzEsMTQgQEAKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImxheWVyX3ByaW9yaXR5IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIGxheWVyIHByaW9yaXR5IHlvdSdkIGxpa2UgdG8gdXNlIGZvciB0aGUgbGF5ZXI6IiBkZWZhdWx0OiI2In19CisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImNyZWF0ZV9leGFtcGxlX3JlY2lwZSIgcHJpbzoiMjAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gaGF2ZSBhbiBleGFtcGxlIHJlY2lwZSBjcmVhdGVkPyAoeS9uKSIgZGVmYXVsdDoibiJ9fQorCit7eyBpZiBjcmVhdGVfZXhhbXBsZV9yZWNpcGUgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiZXhhbXBsZV9yZWNpcGVfbmFtZSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBuYW1lIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGV4YW1wbGUgcmVjaXBlOiIgZGVmYXVsdDoiZXhhbXBsZSJ9fQorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJjcmVhdGVfZXhhbXBsZV9iYmFwcGVuZCIgcHJpbzoiMjAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gaGF2ZSBhbiBleGFtcGxlIGJiYXBwZW5kIGZpbGUgY3JlYXRlZD8gKHkvbikiIGRlZmF1bHQ6Im4ifX0KKwore3sgaWYgY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiZXhhbXBsZV9iYmFwcGVuZF9uYW1lIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgYmJhcHBlbmQgZmlsZToiIGRlZmF1bHQ6ImV4YW1wbGUifX0KKwore3sgaWYgY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToiZXhhbXBsZV9iYmFwcGVuZF92ZXJzaW9uIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIHZlcnNpb24gbnVtYmVyIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGJiYXBwZW5kIGZpbGUgKHRoaXMgc2hvdWxkIG1hdGNoIHRoZSByZWNpcGUgeW91J3JlIGFwcGVuZGluZyB0byk6IiBkZWZhdWx0OiIwLjEifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5NGU2NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYgY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQgPT0gInkiOiB9fSByZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24uYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzEzMzAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLmJiYXBwZW5kCkBAIC0wLDAgKzEsOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9ZXhhbXBsZV9iYmFwcGVuZF9uYW1lfX1fe3s9ZXhhbXBsZV9iYmFwcGVuZF92ZXJzaW9ufX0uYmJhcHBlbmQKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59LSR7UFZ9OiIKKworIworIyBUaGlzIC5iYmFwcGVuZCBkb2Vzbid0IHlldCBkbyBhbnl0aGluZyAtIHJlcGxhY2UgdGhpcyB0ZXh0IHdpdGgKKyMgbW9kaWZpY2F0aW9ucyB0byB0aGUgZXhhbXBsZV8wLjEuYmIgcmVjaXBlLCBvciB3aGF0ZXZlciByZWNpcGUgaXQgaXMKKyMgdGhhdCB5b3Ugd2FudCB0byBtb2RpZnkgd2l0aCB0aGlzIC5iYmFwcGVuZCAobWFrZSBzdXJlIHlvdSBjaGFuZ2UKKyMgdGhlIHJlY2lwZSBuYW1lIChQTikgYW5kIHZlcnNpb24gKFBWKSB0byBtYXRjaCkuCisjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24ubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZGY4YTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PWV4YW1wbGVfYmJhcHBlbmRfbmFtZX19LXt7PWV4YW1wbGVfYmJhcHBlbmRfdmVyc2lvbn19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uL2V4YW1wbGUucGF0Y2ggYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uL2V4YW1wbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwMGEzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24vZXhhbXBsZS5wYXRjaApAQCAtMCwwICsxLDEyIEBACisjCisjIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBwbGFjZWhvbGRlciBmaWxlLCBoZXJlIGZvciBleGFtcGxlIHB1cnBvc2VzCisjIG9ubHkuCisjCisjIElmIHlvdSBoYWQgYSBwYXRjaCBmb3IgeW91ciByZWNpcGUsIHlvdSdkIHB1dCBpdCBpbiB0aGlzIGRpcmVjdG9yeQorIyBhbmQgcmVmZXJlbmNlIGl0IGZyb20geW91ciByZWNpcGUncyBTUkNfVVJJOgorIworIyAgU1JDX1VSSSArPSAiZmlsZTovL2V4YW1wbGUucGF0Y2giCisjCisjIE5vdGUgdGhhdCB5b3UgY291bGQgYWxzbyByZW5hbWUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgcGF0Y2gKKyMgdG8gcmVtb3ZlIHRoZSB2ZXJzaW9uIG51bWJlciBvciBzaW1wbHkgcmVuYW1lIGl0ICdmaWxlcycuICBEb2luZyBzbworIyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIHJlY2lwZXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDY5YjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGNyZWF0ZV9leGFtcGxlX3JlY2lwZSA9PSAieSI6IH19IHJlY2lwZXMtZXhhbXBsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5iYiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiZjU5NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEuYmIKQEAgLTAsMCArMSwyMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9ZXhhbXBsZV9yZWNpcGVfbmFtZX19XzAuMS5iYgorIworIyBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSB0aGUgJ0hlbGxvIFdvcmxkIScgZXhhbXBsZSByZWNpcGUgaW4gdGhlCisjIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorIworCitTVU1NQVJZID0gIlNpbXBsZSBoZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisKK1NSQ19VUkkgPSAiZmlsZTovL2hlbGxvd29ybGQuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeworCSAgICAgJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwkgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCSAgICAgaW5zdGFsbCAtbSAwNzU1IGhlbGxvd29ybGQgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE5YzE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1leGFtcGxlX3JlY2lwZV9uYW1lfX0tMC4xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2V4YW1wbGUucGF0Y2ggYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2V4YW1wbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwMGEzNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEvZXhhbXBsZS5wYXRjaApAQCAtMCwwICsxLDEyIEBACisjCisjIFRoaXMgaXMgYSBub24tZnVuY3Rpb25hbCBwbGFjZWhvbGRlciBmaWxlLCBoZXJlIGZvciBleGFtcGxlIHB1cnBvc2VzCisjIG9ubHkuCisjCisjIElmIHlvdSBoYWQgYSBwYXRjaCBmb3IgeW91ciByZWNpcGUsIHlvdSdkIHB1dCBpdCBpbiB0aGlzIGRpcmVjdG9yeQorIyBhbmQgcmVmZXJlbmNlIGl0IGZyb20geW91ciByZWNpcGUncyBTUkNfVVJJOgorIworIyAgU1JDX1VSSSArPSAiZmlsZTovL2V4YW1wbGUucGF0Y2giCisjCisjIE5vdGUgdGhhdCB5b3UgY291bGQgYWxzbyByZW5hbWUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgcGF0Y2gKKyMgdG8gcmVtb3ZlIHRoZSB2ZXJzaW9uIG51bWJlciBvciBzaW1wbHkgcmVuYW1lIGl0ICdmaWxlcycuICBEb2luZyBzbworIyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIHJlY2lwZXMuCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2hlbGxvd29ybGQuYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEvaGVsbG93b3JsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZjJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2hlbGxvd29ybGQuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy8uZ2l0aWdub3JlIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxOWQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSwzOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYworCitNQUNISU5FX0ZFQVRVUkVTID0gInNjcmVlbiBrZXlib2FyZCBwY2kgdXNiaG9zdCBleHQyIGV4dDMgc2VyaWFsIgorCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKK0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OUyAgPSAiLmNvbW1lbnQiCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IgorCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCitVU0VfVlQgPz0gIjAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDEwMDAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2MTkwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNWRkODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgc3RhbmRhcmQKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MWM3NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3Rpbnlfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZTI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Zjc0N2YKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNDc2NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworQ09ORklHX01JUFM9eQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzlkYzNlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSw4IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9mcy92ZmF0LnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhkYjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlNzk4OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmEwYWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMWNjNTEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTFiYjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmYzVlMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDM5IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAicGNpIGV4dDIgZXh0MyBzZXJpYWwiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorS0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TICA9ICIuY29tbWVudCIKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKK1VTRV9WVCA/PSAiMCIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCisKK0lNQUdFX0ZTVFlQRVMgPz0gImpmZnMyIHRhci5iejIiCitKRkZTMl9FUkFTRUJMT0NLID0gIjB4MTAwMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2MTkwYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggbWlwcworCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNWRkODUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MWM3NzUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVmZGNjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzU5ZGFhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M5MDZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDY2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCisjU09DCitDT05GSUdfQ0FWSVVNX09DVEVPTl9TT0M9eQorQ09ORklHX0NBVklVTV9DTjYzWFhQMT15CitDT05GSUdfQ0FWSVVNX09DVEVPTl9DVk1TRUdfU0laRT0yCisKKyNLZXJuZWwKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MzIKKyNFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworQ09ORklHX01JUFMzMl9DT01QQVQ9eQorQ09ORklHX01JUFMzMl9PMzI9eQorQ09ORklHX01JUFMzMl9OMzI9eQorCisKKyNQQ0kKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9NU0k9eQorCisjSTJDCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfT0NURU9OPXkKKworQ09ORklHX0hXX1JBTkRPTV9PQ1RFT049eQorCisjU1BJCitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfT0NURU9OPXkKKworI01pc2MKK0NPTkZJR19FRVBST01fQVQyND15CitDT05GSUdfRUVQUk9NX0FUMjU9eQorQ09ORklHX09DVEVPTl9XRFQ9eQorCitDT05GSUdfU1RBR0lORz15CisKKyNFdGhlcm5ldAorQ09ORklHX09DVEVPTl9FVEhFUk5FVD15CitDT05GSUdfT0NURU9OX01HTVRfRVRIRVJORVQ9eQorQ09ORklHX01ESU9fT0NURU9OPXkKKworI1BIWQorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0JDTTg3WFhfUEhZPXkKKworCisjVVNCCitDT05GSUdfVVNCPXkKK0NPTkZJR19PQ1RFT05fVVNCPXkKK0NPTkZJR19VU0JfT0NURU9OX0VIQ0k9eQorQ09ORklHX1VTQl9PQ1RFT05fT0hDST15CitDT05GSUdfVVNCX09DVEVPTjJfQ09NTU9OPXkKKworQ09ORklHX01URD15CitDT05GSUdfTVREX0JMT0NLPXkKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9EVz15CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOWRjM2UKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsOCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvZnMvdmZhdC5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRlNmM3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTQpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xNCJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2U3OTg5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliYTBhZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2Y2RlZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KK1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiZGJlNWI1MmU5M2ZmMTE0YjJjMGY1ZGE2ZjZhZjkxZjUyYzE4ZjJiOCIKK1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNmVkZGJmNDc4NzVlZjQ4ZGRjNTg2NDk1N2E3YjYzMzYzMTAwNzgyYiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGFlZWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2VkZ2Vyb3V0ZXIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGY3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsODcgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKworVEFSR0VUX0ZQVSA9ICIiCisKK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InR1bmVmaWxlIiBwcmlvOiI0MCIgbXNnOiJXaGljaCBtYWNoaW5lIHR1bmluZyB3b3VsZCB5b3UgbGlrZSB0byB1c2U/IiBkZWZhdWx0OiJ0dW5lX3BwY2UzMDBjMyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwYzQ3NiIgbXNnOiJwcGM0NzYgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGM2MDNlIiBtc2c6InBwYzYwM2UgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGM3NDAwIiBtc2c6InBwYzc0MDAgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlMzAwYzIiIG1zZzoicHBjZTMwMGMyIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTMwMGMzIiBtc2c6InBwY2UzMDBjMyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2U1MDAiIG1zZzoicHBjZTUwMCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2U1MDBtYyIgbXNnOiJwcGNlNTAwbWMgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlNTAwdjIiIG1zZzoicHBjZTUwMHYyIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTU1MDAiIG1zZzoicHBjZTU1MDAgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlNjUwMCIgbXNnOiJwcGNlNjUwMCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3Bvd2VyNSIgbXNnOiJwb3dlcjUgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wb3dlcjYiIG1zZzoicG93ZXI2IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcG93ZXI3IiBtc2c6InBvd2VyNyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwYzQ3NiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjNjAzZSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNjAzZS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwYzc0MDAiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlMzAwYzIiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMi5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2UzMDBjMyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTUwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2U1MDBtYyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTUwMHYyIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlNTUwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlNjUwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTY1MDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wb3dlcjUiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3Bvd2VyNiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcG93ZXI3IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidUltYWdlIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInUtYm9vdCIKK1VCT09UX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gIk1QQzgzMTVFUkRCX2NvbmZpZyIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorCitNQUNISU5FX0ZFQVRVUkVTID0gImtleWJvYXJkIHBjaSBleHQyIGV4dDMgc2VyaWFsIgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCisKK1BSRUZFUlJFRF9WRVJTSU9OX3UtYm9vdCA/PSAidjIwMTUuMDElIgore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToidWJvb3RfZW50cnlwb2ludCIgcHJpbzoiNDAiIG1zZzoiUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgVUJPT1RfRU5UUllQT0lOVDoiIGRlZmF1bHQ6IjB4MDAwMDAwMDAiIH19CitVQk9PVF9FTlRSWVBPSU5UID0gInt7PXVib290X2VudHJ5cG9pbnR9fSIKKwore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToia2VybmVsX2RldmljZXRyZWUiIHByaW86IjQwIiBtc2c6IlBsZWFzZSBzcGVjaWZ5IGEgW2FyY2gvcG93ZXJwYy9ib290L2R0cy94eHhdIHZhbHVlIGZvciBLRVJORUxfREVWSUNFVFJFRToiIGRlZmF1bHQ6Im1wYzgzMTVlcmRiLmR0cyIgfX0KK0tFUk5FTF9ERVZJQ0VUUkVFID0gIiR7U30vYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3t7PWtlcm5lbF9kZXZpY2V0cmVlfX0iCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTID89ICJqZmZzMiB0YXIuYnoyIgorSkZGUzJfRVJBU0VCTE9DSyA9ICIweDQwMDAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwZDkyYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGM5MjY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggcG93ZXJwYworCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExZDM1YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIHBvd2VycGMKKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmOTRiMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIHBvd2VycGMKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDg5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODI3NTllCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y3NDdmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmUxZmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDE2NCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBUk5JTkcKKy4KKy4gVGhpcyBmaWxlIGlzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQsIGFuZCBub3QgYSBmdWxsIGtlcm5lbAorLiBjb25maWd1cmF0aW9uIGZpbGUuICBUaGUgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgbWFkZSB1cCBvZgorLiBhbiBhc3NlbWJseSBvZiBwcm9jZXNzZWQgZnJhZ21lbnRzLCBlYWNoIG9mIHdoaWNoIGlzIGRlc2lnbmVkIHRvCisuIGNhcHR1cmUgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIChlLmcuIHBsYXRmb3JtCisuIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmUgY29uZmlndXJhdGlvbiwgYW5kIGJvYXJkIHNwZWNpZmljIGhhcmR3YXJlCisuIGNvbmZpZ3VyYXRpb24pLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIGNvbmZpZ3VyYXRpb24sIHBsZWFzZQorLiBjb25zdWx0IHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24uCisuCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHX1BQQ184M3h4PXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfTVBDODMxeF9SREI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKK0NPTkZJR19HSUFORkFSPXkKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR184eHh4X1dEVD15CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfTVBDPXkKKworQ09ORklHX1NFTlNPUlNfTE03NT15CisKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0VFUFJPTV9BVDI0PXkKKworIworIyBTUEkgc3VwcG9ydAorIworQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX01QQzh4eHg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCitDT05GSUdfSFdNT049eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorCitDT05GSUdfQVRBPXkKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CitDT05GSUdfU0FUQV9GU0w9eQorQ09ORklHX0FUQV9TRkY9eQorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCPW0KK0NPTkZJR19VU0JfREVWSUNFRlM9eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1VTQl9FSENJX0hDRD1tCitDT05GSUdfVVNCX0VIQ0lfRlNMPXkKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0NMQVNTPXkKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisKK0NPTkZJR19LR0RCXzgyNTA9bQorCitDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TPW0KKworQ09ORklHX0ZTTF9ETUE9eQorCitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfU1BJPW0KKworQ09ORklHX1VTQl9GU0xfTVBIX0RSX09GPXkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhYzhiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2ZzL3ZmYXQuc2NjCisKK2luY2x1ZGUgY2ZnL2RtYWVuZ2luZS5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyNTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODgzODQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkOWU4NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2UxY2JkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDc0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToicWVtdWFyY2giIHByaW86IjUiIG1zZzoiV2hpY2ggcWVtdSBhcmNoaXRlY3R1cmUgd291bGQgeW91IGxpa2UgdG8gdXNlPyIgZGVmYXVsdDoiaTM4NiIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJpMzg2IiBtc2c6ImkzODYgICAgKDMyLWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieDg2XzY0IiBtc2c6Ing4Nl82NCAgKDY0LWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoiYXJtIiBtc2c6IkFSTSAgICAgKDMyLWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoicG93ZXJwYyIgbXNnOiJQb3dlclBDICgzMi1iaXQpIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6Im1pcHMiIG1zZzoiTUlQUyAgICAoMzItYml0KSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJtaXBzNjQiIG1zZzoiTUlQUzY0ICAoNjQtYml0KSIgfX0KK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYwore3sgaWYgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCitERUZBVUxUVFVORSA/PSAiY29yZTItNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKK3t7IGlmIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK01BQ0hJTkVfRkVBVFVSRVMgKz0gIng4NiIKK0tFUk5FTF9JTUFHRVRZUEUgPSAiYnpJbWFnZSIKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKK1hTRVJWRVIgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgIHhmODYtaW5wdXQtdm1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby12bXdhcmUiCisKK3t7IGlmIHFlbXVhcmNoID09ICJhcm0iOiB9fQorS0VSTkVMX0lNQUdFVFlQRSA9ICJ6SW1hZ2UiCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5QU1BMCIKKwore3sgaWYgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQorS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorCit7eyBpZiBxZW11YXJjaCA9PSAibWlwcyIgb3IgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19CitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi9tYWNoaW5lLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS9pbnRlcmZhY2VzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi9tYWNoaW5lL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZApAQCAtMCwwICsxIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQyZDAyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkZGU3OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKQEAgLTAsMCArMSw3NyBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCit7eyBpZiBxZW11YXJjaCA9PSAiYXJtIiBvciBxZW11YXJjaCA9PSAicG93ZXJwYyIgb3IgcWVtdWFyY2ggPT0gIm1pcHMiIG9yIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQorICAgIERyaXZlciAgICAgICAgInZtbW91c2UiCisKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgore3sgaWYgcWVtdWFyY2ggPT0gImFybSIgb3IgcWVtdWFyY2ggPT0gInBvd2VycGMiIG9yIHFlbXVhcmNoID09ICJtaXBzIiBvciBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK3t7IGlmIHFlbXVhcmNoID09ICJpMzg2IiBvciBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KKyAgICBEcml2ZXIgICAgICAgICJ2bXdhcmUiCisKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmI1MjgzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWFmZmI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0gge3s9cWVtdWFyY2h9fQorCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMDNlYwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIHt7PXFlbXVhcmNofX0KKwore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQoraW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgcWVtdWFyY2ggPT0gImFybSI6IH19CitpbmNsdWRlIGJzcC9hcm0tdmVyc2F0aWxlLTkyNmVqcy9hcm0tdmVyc2F0aWxlLTkyNmVqcy1zdGFuZGFyZAore3sgaWYgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQoraW5jbHVkZSBic3AvcWVtdS1wcGMzMi9xZW11LXBwYzMyLXN0YW5kYXJkCit7eyBpZiBxZW11YXJjaCA9PSAibWlwcyI6IH19CitpbmNsdWRlIGJzcC9tdGktbWFsdGEzMi9tdGktbWFsdGEzMi1iZS1zdGFuZGFyZAore3sgaWYgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19CitpbmNsdWRlIGJzcC9tdGktbWFsdGE2NC9tdGktbWFsdGE2NC1iZS1zdGFuZGFyZAore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwOThmZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIHt7PXFlbXVhcmNofX0KKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1OWRhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2MDc4NAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDFlMDUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDUgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDc5YmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSw1NiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgeW91ciBuZXcgQlNQIGJyYW5jaCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGFuIGV4aXN0aW5nIG1hY2hpbmUgYnJhbmNoIHRvIHVzZSBmb3IgdGhpcyBCU1A6IiBkZWZhdWx0OiJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcWVtdXBwYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiAgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGEzMiIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGE2NCIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZTFhMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzljZTIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiMDE0M2M2ZWJiNGEyZDYzYjI0MWRmNWY2MDhiMTlmNDgzZjdlYjllMCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiOGY1NWJlZTI0MDMxNzZhNTBjYzBkZDQxODExYWE2MGZjZjA3MjQzYyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlZjRiYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDYyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIwMTQzYzZlYmI0YTJkNjNiMjQxZGY1ZjYwOGIxOWY0ODNmN2ViOWUwIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4ZjU1YmVlMjQwMzE3NmE1MGNjMGRkNDE4MTFhYTYwZmNmMDcyNDNjIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNjAxOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjAxNDNjNmViYjRhMmQ2M2IyNDFkZjVmNjA4YjE5ZjQ4M2Y3ZWI5ZTAiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4ZjU1YmVlMjQwMzE3NmE1MGNjMGRkNDE4MTFhYTYwZmNmMDcyNDNjIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Nzk4YjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGEzMiIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9tdGktbWFsdGE2NCIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjAxNDNjNmViYjRhMmQ2M2IyNDFkZjVmNjA4YjE5ZjQ4M2Y3ZWI5ZTAiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4ZjU1YmVlMjQwMzE3NmE1MGNjMGRkNDE4MTFhYTYwZmNmMDcyNDNjIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvLmdpdGlnbm9yZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiODI1MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDY1IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InR1bmVmaWxlIiBwcmlvOiI0MCIgbXNnOiJXaGljaCBtYWNoaW5lIHR1bmluZyB3b3VsZCB5b3UgbGlrZSB0byB1c2U/IiBkZWZhdWx0OiJ0dW5lX2NvcmUyIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29yZTIiIG1zZzoiQ29yZTIgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3JlaTciIG1zZzoiQ29yZWk3IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29yZTIiOiB9fQorREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29yZWk3IjogfX0KK0RFRkFVTFRUVU5FID89ICJjb3JlaTctNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYworCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYworCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ3aWZpIGVmaSBwY2Jpb3MiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InhzZXJ2ZXJfY2hvaWNlIiBwcmlvOiI1MCIgbXNnOiJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZToiIGRlZmF1bHQ6InhzZXJ2ZXJfaTkxNSIgfX0KKwore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfdmVzYSIgbXNnOiJWRVNBIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5MTUiIG1zZzoiaTkxNSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTY1IiBtc2c6Imk5NjUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfZmJkZXYiIG1zZzoiZmJkZXYgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfbW9kZXNldHRpbmciIG1zZzoibW9kZXNldHRpbmcgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitYU0VSVkVSID89ICIke1hTRVJWRVJfWDg2X0JBU0V9IFwKKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9FWFR9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9WRVNBfSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTkxNSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTkxNX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2k5NjUiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5NjV9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9mYmRldiI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfRkJERVZ9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9tb2Rlc2V0dGluZyI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfTU9ERVNFVFRJTkd9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorICAgICAgICAgICAiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImxpbnV4LWZpcm13YXJlIHY4NmQgZWVlLWFjcGktc2NyaXB0cyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9wbi1tYXRjaGJveC1wYW5lbC0yID0gIiAtLXdpdGgtYmF0dGVyeT1hY3BpIgorCitHTElCQ19BRERPTlMgPSAibnB0bCIKKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQorQVBQRU5EICs9ICJ2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlhMGYxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgzMDAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1MzIwYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDE2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggeDg2XzY0CisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBwcmVlbXB0LXJ0IGtlcm5lbHMKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OWY5NjcKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIHg4Nl82NAorCitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHN0YW5kYXJkIGtlcm5lbHMKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIxNDMyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS10aW55LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHRpbnkKK2RlZmluZSBLQVJDSCB4ODZfNjQKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjkwZGRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDQ4IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCitDT05GSUdfUFJJTlRLPXkKKworIyBCYXNpYyBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGUgYm94IC0gbmV0d29yaywgVVNCLCBQQ0ksIHNvdW5kICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQVRBPXkKK0NPTkZJR19BVEFfR0VORVJJQz15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfUENJPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19TREhDST15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1I4MTY5PXkKK0NPTkZJR19QQVRBX1NDSD15CitDT05GSUdfTU1DX1NESENJX1BDST15CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfTkVUPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9IREFfSU5URUw9eQorCisjIE1ha2Ugc3VyZSB0aGVzZSBhcmUgb24sIG90aGVyd2lzZSB0aGUgYm9vdHVwIHdvbid0IGJlIGZ1biAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1BBQ0tFVD15CisKK0NPTkZJR19JMkM9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0FHUD15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfUE09eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19BQ1BJPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0lOUFVUPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMgTmVlZGVkIGZvciBib290aW5nIChhbmQgdXNpbmcpIFVTQiBtZW1vcnkgc3RpY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0JMS19ERVZfTE9PUD15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfUkRfR1pJUD15CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdjMjkxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDE0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2luY2x1ZGUgZmVhdHVyZXMvc2VyaWFsLzgyNTAuc2NjCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfdmVzYSI6IH19CitpbmNsdWRlIGNmZy92ZXNhZmIuc2NjCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTkxNSIgb3IgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTk2NSI6IH19CitpbmNsdWRlIGZlYXR1cmVzL2k5MTUvaTkxNS5zY2MKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTI1NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWNjYmMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTgyZmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwYjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNjNjMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2JzcC90YWdzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvdGFncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzE5NDI3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9ic3AvdGFncy5weQpAQCAtMCwwICsxLDQ5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBwbGFjZSB0byBkZWZpbmUgY29tbW9uIGNvbnN0YW50cyBmb3IgdGhlCisjIFlvY3RvIEJTUCBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK09QRU5fVEFHID0gICAgICJ7eyIKK0NMT1NFX1RBRyA9ICAgICJ9fSIKK0FTU0lHTl9UQUcgPSAgICJ7ez0iCitJTlBVVF9UQUcgPSAgICAiaW5wdXQiCitJRl9UQUcgPSAgICAgICAiaWYiCitGSUxFTkFNRV9UQUcgPSAieW9jdG8tYnNwLWZpbGVuYW1lIgorRElSTkFNRV9UQUcgPSAgInlvY3RvLWJzcC1kaXJuYW1lIgorCitJTkRFTlRfU1RSID0gICIgICAgIgorCitCTEFOS0xJTkVfU1RSID0gIm9mLndyaXRlKFwiXFxuXCIpIgorTk9STUFMX1NUQVJUID0gICJvZi53cml0ZSIKK09QRU5fU1RBUlQgPSAgICAiY3VycmVudF9maWxlID0iCisKK0lOUFVUX1RZUEVfUFJPUEVSVFkgPSAidHlwZSIKKworU1JDX1VSSV9GSUxFID0gImZpbGU6Ly8iCisKK0dJVF9DSEVDS19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tZGV2LmdpdCIKKworCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDRkM2U2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBEZXZlbG9wbWVudCB0b29sIC0gdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBsdWdpbnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBwbHVnaW5zIG1vZHVsZSIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKKworY2xhc3MgRGV2dG9vbEVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIGZvciBoYW5kbGluZyBkZXZ0b29sIGVycm9ycyIiIgorICAgIHBhc3MKKworCitkZWYgZXhlY19idWlsZF9lbnZfY29tbWFuZChpbml0X3BhdGgsIGJ1aWxkZGlyLCBjbWQsIHdhdGNoPUZhbHNlLCAqKm9wdGlvbnMpOgorICAgICIiIlJ1biBhIHByb2dyYW0gaW4gYml0YmFrZSBidWlsZCBjb250ZXh0IiIiCisgICAgaW1wb3J0IGJiCisgICAgaWYgbm90ICdjd2QnIGluIG9wdGlvbnM6CisgICAgICAgIG9wdGlvbnNbImN3ZCJdID0gYnVpbGRkaXIKKyAgICBpZiBpbml0X3BhdGg6CisgICAgICAgICMgQXMgdGhlIE9FIGluaXQgc2NyaXB0IG1ha2VzIHVzZSBvZiBCQVNIX1NPVVJDRSB0byBkZXRlcm1pbmUgT0VST09ULAorICAgICAgICAjIGFuZCBjYW4ndCBkZXRlcm1pbmUgaXQgd2hlbiBydW5uaW5nIHVuZGVyIGRhc2gsIHdlIG5lZWQgdG8gc2V0CisgICAgICAgICMgdGhlIGV4ZWN1dGFibGUgdG8gYmFzaCB0byBjb3JyZWN0bHkgc2V0IHRoaW5ncyB1cAorICAgICAgICBpZiBub3QgJ2V4ZWN1dGFibGUnIGluIG9wdGlvbnM6CisgICAgICAgICAgICBvcHRpb25zWydleGVjdXRhYmxlJ10gPSAnYmFzaCcKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmcgY29tbWFuZDogIiVzIiB1c2luZyBpbml0IHBhdGggJXMnICUgKGNtZCwgaW5pdF9wYXRoKSkKKyAgICAgICAgaW5pdF9wcmVmaXggPSAnLiAlcyAlcyA+IC9kZXYvbnVsbCAmJiAnICUgKGluaXRfcGF0aCwgYnVpbGRkaXIpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmcgY29tbWFuZCAiJXMiJyAlIGNtZCkKKyAgICAgICAgaW5pdF9wcmVmaXggPSAnJworICAgIGlmIHdhdGNoOgorICAgICAgICBpZiBzeXMuc3Rkb3V0LmlzYXR0eSgpOgorICAgICAgICAgICAgIyBGb29sIGJpdGJha2UgaW50byB0aGlua2luZyBpdCdzIG91dHB1dHRpbmcgdG8gYSB0ZXJtaW5hbCAoYmVjYXVzZSBpdCBpcywgaW5kaXJlY3RseSkKKyAgICAgICAgICAgIGNtZCA9ICdzY3JpcHQgLWUgLXEgLWMgIiVzIiAvZGV2L251bGwnICUgY21kCisgICAgICAgIHJldHVybiBleGVjX3dhdGNoKCclcyVzJyAlIChpbml0X3ByZWZpeCwgY21kKSwgKipvcHRpb25zKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBiYi5wcm9jZXNzLnJ1bignJXMlcycgJSAoaW5pdF9wcmVmaXgsIGNtZCksICoqb3B0aW9ucykKKworZGVmIGV4ZWNfd2F0Y2goY21kLCAqKm9wdGlvbnMpOgorICAgICIiIlJ1biBwcm9ncmFtIHdpdGggc3Rkb3V0IHNob3duIG9uIHN5cy5zdGRvdXQiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpZiBpc2luc3RhbmNlKGNtZCwgYmFzZXN0cmluZykgYW5kIG5vdCAic2hlbGwiIGluIG9wdGlvbnM6CisgICAgICAgIG9wdGlvbnNbInNoZWxsIl0gPSBUcnVlCisKKyAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsICoqb3B0aW9ucworICAgICkKKworICAgIGJ1ZiA9ICcnCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgb3V0ID0gcHJvY2Vzcy5zdGRvdXQucmVhZCgxKQorICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKG91dCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgYnVmICs9IG91dAorICAgICAgICBlbGlmIG91dCA9PSAnJyBhbmQgcHJvY2Vzcy5wb2xsKCkgIT0gTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBwcm9jZXNzLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmFpc2UgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvcihjbWQsIHByb2Nlc3MucmV0dXJuY29kZSwgYnVmLCBOb25lKQorCisgICAgcmV0dXJuIGJ1ZiwgTm9uZQorCitkZWYgZXhlY19mYWtlcm9vdChkLCBjbWQsICoqa3dhcmdzKToKKyAgICAiIiJSdW4gYSBjb21tYW5kIHVuZGVyIGZha2Vyb290IChwc2V1ZG8sIGluIGZhY3QpIHNvIHRoYXQgaXQgcGlja3MgdXAgdGhlIGFwcHJvcHJpYXRlIGZpbGUgcGVybWlzc2lvbnMiIiIKKyAgICAjIEdyYWIgdGhlIGNvbW1hbmQgYW5kIGNoZWNrIGl0IGFjdHVhbGx5IGV4aXN0cworICAgIGZha2Vyb290Y21kID0gZC5nZXRWYXIoJ0ZBS0VST09UQ01EJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmFrZXJvb3RjbWQpOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ3BzZXVkbyBleGVjdXRhYmxlICVzIGNvdWxkIG5vdCBiZSBmb3VuZCAtIGhhdmUgeW91IHJ1biBhIGJ1aWxkIHlldD8gcHNldWRvLW5hdGl2ZSBzaG91bGQgaW5zdGFsbCB0aGlzIGFuZCBpZiB5b3UgaGF2ZSBydW4gYW55IGJ1aWxkIHRoZW4gdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGJ1aWx0JykKKyAgICAgICAgcmV0dXJuIDIKKyAgICAjIFNldCB1cCB0aGUgYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQKKyAgICBuZXdlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgZmFrZXJvb3RlbnYgPSBkLmdldFZhcignRkFLRVJPT1RFTlYnLCBUcnVlKQorICAgIGZvciB2YXJ2YWx1ZSBpbiBmYWtlcm9vdGVudi5zcGxpdCgpOgorICAgICAgICBpZiAnPScgaW4gdmFydmFsdWU6CisgICAgICAgICAgICBzcGxpdHZhbCA9IHZhcnZhbHVlLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgIG5ld2VudltzcGxpdHZhbFswXV0gPSBzcGxpdHZhbFsxXQorICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoIiVzICVzIiAlIChmYWtlcm9vdGNtZCwgY21kKSwgZW52PW5ld2VudiwgKiprd2FyZ3MpCisKK2RlZiBzZXR1cF90aW5mb2lsKGNvbmZpZ19vbmx5PUZhbHNlKToKKyAgICAiIiJJbml0aWFsaXplIHRpbmZvaWwgYXBpIGZyb20gYml0YmFrZSIiIgorICAgIGltcG9ydCBzY3JpcHRwYXRoCisgICAgYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKKyAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGltcG9ydCBiYi50aW5mb2lsCisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5KQorICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpKQorICAgIHJldHVybiB0aW5mb2lsCisKK2RlZiBnZXRfcmVjaXBlX2ZpbGUoY29va2VyLCBwbik6CisgICAgIiIiRmluZCByZWNpcGUgZmlsZSBjb3JyZXNwb25kaW5nIGEgcGFja2FnZSBuYW1lIiIiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgcmVjaXBlZmlsZSA9IG9lLnJlY2lwZXV0aWxzLnBuX3RvX3JlY2lwZShjb29rZXIsIHBuKQorICAgIGlmIG5vdCByZWNpcGVmaWxlOgorICAgICAgICBza2lwcmVhc29ucyA9IG9lLnJlY2lwZXV0aWxzLmdldF91bmF2YWlsYWJsZV9yZWFzb25zKGNvb2tlciwgcG4pCisgICAgICAgIGlmIHNraXByZWFzb25zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdcbicuam9pbihza2lwcmVhc29ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAlcyIgJSBwbikKKyAgICByZXR1cm4gcmVjaXBlZmlsZQorCitkZWYgcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgcG4sIGFwcGVuZHMpOgorICAgICIiIlBhcnNlIHJlY2lwZSBvZiBhIHBhY2thZ2UiIiIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICByZWNpcGVmaWxlID0gZ2V0X3JlY2lwZV9maWxlKHRpbmZvaWwuY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgIyBFcnJvciBhbHJlYWR5IGxvZ2dlZAorICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIGFwcGVuZHM6CisgICAgICAgIGFwcGVuZF9maWxlcyA9IHRpbmZvaWwuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQorICAgICAgICAjIEZpbHRlciBvdXQgYXBwZW5kcyBmcm9tIHRoZSB3b3Jrc3BhY2UKKyAgICAgICAgYXBwZW5kX2ZpbGVzID0gW3BhdGggZm9yIHBhdGggaW4gYXBwZW5kX2ZpbGVzIGlmCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgcGF0aC5zdGFydHN3aXRoKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCldCisgICAgcmV0dXJuIG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShyZWNpcGVmaWxlLCBhcHBlbmRfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLWltYWdlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLWltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMDE0MjgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQtaW1hZ2UucHkKQEAgLTAsMCArMSw5MSBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gYnVpbGQtaW1hZ2UgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiRGV2dG9vbCBwbHVnaW4gY29udGFpbmluZyB0aGUgYnVpbGQtaW1hZ2Ugc3ViY29tbWFuZC4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCitmcm9tIGJiLnByb2Nlc3MgaW1wb3J0IEV4ZWN1dGlvbkVycm9yCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIHBhcnNlX3JlY2lwZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBfZ2V0X3JlY2lwZXMod29ya3NwYWNlLCBjb25maWcpOgorICAgICIiIkdldCBsaXN0IG9mIHRhcmdldCByZWNpcGVzIGZyb20gdGhlIHdvcmtzcGFjZS4iIiIKKyAgICByZXN1bHQgPSBbXQorICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKyAgICBmb3IgcmVjaXBlIGluIHdvcmtzcGFjZToKKyAgICAgICAgZGF0YSA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIHJlY2lwZSwgVHJ1ZSkKKyAgICAgICAgaWYgJ2NsYXNzLXRhcmdldCcgaW4gZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpLnNwbGl0KCc6Jyk6CisgICAgICAgICAgICBpZiByZWNpcGUgaW4gZGF0YS5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZWNpcGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJTa2lwcGluZyByZWNpcGUgJXMgYXMgaXQgZG9lc24ndCBwcm9kdWNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUiLCByZWNpcGUpCisgICAgdGluZm9pbC5zaHV0ZG93bigpCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgYnVpbGRfaW1hZ2UoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2J1aWxkLWltYWdlJyBzdWJjb21tYW5kLiIiIgorICAgIGltYWdlID0gYXJncy5yZWNpcGUKKyAgICBhcHBlbmRmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzLmJiYXBwZW5kJyAlIGltYWdlKQorCisgICAgIyByZW1vdmUgPGltYWdlPi5iYmFwZW5kIHRvIG1ha2Ugc3VyZSBzZXR1cF90aW5mb2lsIGRvZXNuJ3QKKyAgICAjIGJyZWFrZSBiZWNhdXNlIG9mIGl0CisgICAgaWYgb3MucGF0aC5pc2ZpbGUoYXBwZW5kZmlsZSk6CisgICAgICAgIG9zLnVubGluayhhcHBlbmRmaWxlKQorCisgICAgcmVjaXBlcyA9IF9nZXRfcmVjaXBlcyh3b3Jrc3BhY2UsIGNvbmZpZykKKyAgICBpZiByZWNpcGVzOgorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBhZmlsZToKKyAgICAgICAgICAgICMgaW5jbHVkZSBzZWxlY3RlZCByZWNpcGVzIGludG8gdGhlIGltYWdlCisgICAgICAgICAgICBhZmlsZS53cml0ZSgnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiICVzIlxuJyAlICcgJy5qb2luKHJlY2lwZXMpKQorCisgICAgICAgICAgICAjIEdlbmVyYXRlIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBkZXZ0b29sX3dhcm5faW1hZ2VfZXh0ZW5kZWQKKyAgICAgICAgICAgIGFmaWxlLndyaXRlKCdkb19yb290ZnNbcHJlZnVuY3NdICs9ICJkZXZ0b29sX3dhcm5faW1hZ2VfZXh0ZW5kZWQiXG5cbicpCisgICAgICAgICAgICBhZmlsZS53cml0ZSgicHl0aG9uIGRldnRvb2xfd2Fybl9pbWFnZV9leHRlbmRlZCgpIHtcbiIpCisgICAgICAgICAgICBhZmlsZS53cml0ZSgiICAgIGJiLnBsYWluKCdOT1RFOiAlJXM6IGJ1aWxkaW5nIHdpdGggYWRkaXRpb25hbCAnXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICdwYWNrYWdlcyBkdWUgdG8gXCJkZXZ0b29sIGJ1aWxkLWltYWdlXCInIgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgJSUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGJiLnBsYWluKCdOT1RFOiBkZWxldGUgJSVzIHRvIGNsZWFyIHRoaXMnICUlIFxcXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICclcycpXG4iICUgb3MucGF0aC5yZWxwYXRoKGFwcGVuZGZpbGUsIGJhc2VwYXRoKSkKKyAgICAgICAgICAgIGFmaWxlLndyaXRlKCJ9XG4iKQorCisgICAgICAgICAgICBsb2dnZXIuaW5mbygnQnVpbGRpbmcgaW1hZ2UgJXMgd2l0aCB0aGUgZm9sbG93aW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdhZGRpdGlvbmFsIHBhY2thZ2VzOiAlcycsIGltYWdlLCAnICcuam9pbihyZWNpcGVzKSkKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIud2FybmluZygnTm8gcmVjaXBlcyBpbiB3b3Jrc3BhY2UsIGJ1aWxkaW5nIGltYWdlICVzIHVubW9kaWZpZWQnLCBpbWFnZSkKKworICAgICMgcnVuIGJpdGJha2UgdG8gYnVpbGQgaW1hZ2UKKyAgICB0cnk6CisgICAgICAgIGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2UgJXMnICUgaW1hZ2UsIHdhdGNoPVRydWUpCisgICAgZXhjZXB0IEV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgcmV0dXJuIGVyci5leGl0Y29kZQorCisgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSBidWlsdCAlcycsIGltYWdlKQorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoZSBidWlsZC1pbWFnZSBwbHVnaW4iIiIKKyAgICBwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2J1aWxkLWltYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQnVpbGQgaW1hZ2UgaW5jbHVkaW5nIHdvcmtzcGFjZSByZWNpcGUgcGFja2FnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQnVpbGRzIGFuIGltYWdlLCBleHRlbmRpbmcgaXQgdG8gaW5jbHVkZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlcyBmcm9tIHJlY2lwZXMgaW4gdGhlIHdvcmtzcGFjZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncmVjaXBlJywgaGVscD0nSW1hZ2UgcmVjaXBlIHRvIGJ1aWxkJykKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9YnVpbGRfaW1hZ2UpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1YWZmNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC5weQpAQCAtMCwwICsxLDc3IEBACisjIERldmVsb3BtZW50IHRvb2wgLSBidWlsZCBjb21tYW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyIiIkRldnRvb2wgYnVpbGQgcGx1Z2luIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgRGV2dG9vbEVycm9yCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworZGVmIHBsdWdpbl9pbml0KHBsdWdpbmxpc3QpOgorICAgICIiIlBsdWdpbiBpbml0aWFsaXphdGlvbiIiIgorICAgIHBhc3MKKworZGVmIF9jcmVhdGVfY29uZl9maWxlKHZhbHVlcywgY29uZl9maWxlPU5vbmUpOgorICAgIGlmIG5vdCBjb25mX2ZpbGU6CisgICAgICAgIGZkLCBjb25mX2ZpbGUgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD0nLmNvbmYnKQorICAgIGVsaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguZGlybmFtZShjb25mX2ZpbGUpKToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJDcmVhdGluZyBmb2xkZXIgJXMiICUgb3MucGF0aC5kaXJuYW1lKGNvbmZfZmlsZSkpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoY29uZl9maWxlKSkKKyAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGYud3JpdGUoJyVzID0gIiVzIlxuJyAlIChrZXksIHZhbHVlKSkKKyAgICByZXR1cm4gY29uZl9maWxlCisKK2RlZiBidWlsZChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnYnVpbGQnIHN1YmNvbW1hbmQiIiIKKyAgICBpZiBub3QgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGJ1aWxkX3Rhc2sgPSBjb25maWcuZ2V0KCdCdWlsZCcsICdidWlsZF90YXNrJywgJ3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgcG9zdGZpbGVfcGFyYW0gPSAiIgorICAgIHBvc3RmaWxlID0gIiIKKyAgICBpZiBhcmdzLmRpc2FibGVfcGFyYWxsZWxfbWFrZToKKyAgICAgICAgbG9nZ2VyLmluZm8oIkRpc2FibGluZyAnbWFrZScgcGFyYWxsZWxpc20iKQorICAgICAgICBwb3N0ZmlsZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYnLCAnZGlzYWJsZV9wYXJhbGxlbGlzbS5jb25mJykKKyAgICAgICAgX2NyZWF0ZV9jb25mX2ZpbGUoeydQQVJBTExFTF9NQUtFJzonJ30sIHBvc3RmaWxlKQorICAgICAgICBwb3N0ZmlsZV9wYXJhbSA9ICItUiAlcyIgJSBwb3N0ZmlsZQorICAgIHRyeToKKyAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgLWMgJXMgJXMgJXMnICUgKGJ1aWxkX3Rhc2ssIHBvc3RmaWxlX3BhcmFtLCBhcmdzLnJlY2lwZW5hbWUpLCB3YXRjaD1UcnVlKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICMgV2UndmUgYWxyZWFkeSBzZWVuIHRoZSBvdXRwdXQgc2luY2Ugd2F0Y2g9VHJ1ZSwgc28ganVzdCBlbnN1cmUgd2UgcmV0dXJuIHNvbWV0aGluZyB0byB0aGUgdXNlcgorICAgICAgICByZXR1cm4gZS5leGl0Y29kZQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHBvc3RmaWxlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZW1vdmluZyBwb3N0ZmlsZScpCisgICAgICAgICAgICBvcy5yZW1vdmUocG9zdGZpbGUpCisKKyAgICByZXR1cm4gMAorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoaXMgcGx1Z2luIiIiCisgICAgcGFyc2VyX2J1aWxkID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdidWlsZCcsIGhlbHA9J0J1aWxkIGEgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0J1aWxkcyB0aGUgc3BlY2lmaWVkIHJlY2lwZSB1c2luZyBiaXRiYWtlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorICAgIHBhcnNlcl9idWlsZC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdSZWNpcGUgdG8gYnVpbGQnKQorICAgIHBhcnNlcl9idWlsZC5hZGRfYXJndW1lbnQoJy1zJywgJy0tZGlzYWJsZS1wYXJhbGxlbC1tYWtlJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRGlzYWJsZSBtYWtlIHBhcmFsbGVsaXNtJykKKyAgICBwYXJzZXJfYnVpbGQuc2V0X2RlZmF1bHRzKGZ1bmM9YnVpbGQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTkzYWRmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL2RlcGxveS5weQpAQCAtMCwwICsxLDE0OSBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gZGVwbG95L3VuZGVwbG95IGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBwbHVnaW4gY29udGFpbmluZyB0aGUgZGVwbG95IHN1YmNvbW1hbmRzIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfZmFrZXJvb3QsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBkZXBsb3koYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2RlcGxveScgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCByZQorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgaWYgbm90IGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gcmVjaXBlIG5hbWVkICVzIGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisgICAgdHJ5OgorICAgICAgICBob3N0LCBkZXN0ZGlyID0gYXJncy50YXJnZXQuc3BsaXQoJzonKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBkZXN0ZGlyID0gJy8nCisgICAgZWxzZToKKyAgICAgICAgYXJncy50YXJnZXQgPSBob3N0CisKKyAgICBkZXBsb3lfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAndGFyZ2V0X2RlcGxveScsIGFyZ3MudGFyZ2V0KQorICAgIGRlcGxveV9maWxlID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsIGFyZ3MucmVjaXBlbmFtZSArICcubGlzdCcpCisKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisgICAgdHJ5OgorICAgICAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZV9zaW1wbGUodGluZm9pbC5jb29rZXIsIGFyZ3MucmVjaXBlbmFtZSwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRXhjZXB0aW9uIHBhcnNpbmcgcmVjaXBlICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ3MucmVjaXBlbmFtZSwgZSkpCisgICAgcmVjaXBlX291dGRpciA9IHJkLmdldFZhcignRCcsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJlY2lwZV9vdXRkaXIpIG9yIG5vdCBvcy5saXN0ZGlyKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ05vIGZpbGVzIHRvIGRlcGxveSAtIGhhdmUgeW91IGJ1aWx0IHRoZSAlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlPyBJZiBzbywgdGhlIGluc3RhbGwgc3RlcCBoYXMgbm90IGluc3RhbGxlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW55IGZpbGVzLicgJSBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBhcmdzLmRyeV9ydW46CisgICAgICAgIHByaW50KCdGaWxlcyB0byBiZSBkZXBsb3llZCBmb3IgJXMgb24gdGFyZ2V0ICVzOicgJSAoYXJncy5yZWNpcGVuYW1lLCBhcmdzLnRhcmdldCkpCisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIG9zLnBhdGguam9pbihkZXN0ZGlyLCBvcy5wYXRoLnJlbHBhdGgocm9vdCwgcmVjaXBlX291dGRpciksIGZuKSkKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlcGxveV9maWxlKToKKyAgICAgICAgaWYgdW5kZXBsb3koYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgIGV4dHJhb3B0aW9ucyA9ICcnCisgICAgaWYgYXJncy5ub19ob3N0X2NoZWNrOgorICAgICAgICBleHRyYW9wdGlvbnMgKz0gJy1vIFVzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwgLW8gU3RyaWN0SG9zdEtleUNoZWNraW5nPW5vJworICAgIGlmIGFyZ3Muc2hvd19zdGF0dXM6CisgICAgICAgIHRhcmV4dHJhY3RvcHRzID0gJ3h2JworICAgIGVsc2U6CisgICAgICAgIHRhcmV4dHJhY3RvcHRzID0gJ3gnCisgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnIC1xJworICAgICMgV2UgY2Fubm90IHVzZSBzY3AgaGVyZSwgYmVjYXVzZSBpdCBkb2Vzbid0IHByZXNlcnZlIHN5bWxpbmtzCisgICAgcmV0ID0gZXhlY19mYWtlcm9vdChyZCwgJ3RhciBjZiAtIC4gfCBzc2ggJXMgJXMgXCd0YXIgJXMgLUMgJXMgLWYgLVwnJyAlIChleHRyYW9wdGlvbnMsIGFyZ3MudGFyZ2V0LCB0YXJleHRyYWN0b3B0cywgZGVzdGRpciksIGN3ZD1yZWNpcGVfb3V0ZGlyLCBzaGVsbD1UcnVlKQorICAgIGlmIHJldCAhPSAwOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0RlcGxveSBmYWlsZWQgLSByZXJ1biB3aXRoIC1zIHRvIGdldCBhIGNvbXBsZXRlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBtZXNzYWdlJykKKworICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgZGVwbG95ZWQgJXMnICUgcmVjaXBlX291dGRpcikKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXBsb3lfZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMoZGVwbG95X2RpcikKKworICAgIGZpbGVzX2xpc3QgPSBbXQorICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKHJlY2lwZV9vdXRkaXIpOgorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZW5hbWUpLCByZWNpcGVfb3V0ZGlyKQorICAgICAgICAgICAgZmlsZXNfbGlzdC5hcHBlbmQob3MucGF0aC5qb2luKGRlc3RkaXIsIGZpbGVuYW1lKSkKKworICAgIHdpdGggb3BlbihkZXBsb3lfZmlsZSwgJ3cnKSBhcyBmb2JqOgorICAgICAgICBmb2JqLndyaXRlKCdcbicuam9pbihmaWxlc19saXN0KSkKKworICAgIHJldHVybiAwCisKK2RlZiB1bmRlcGxveShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAndW5kZXBsb3knIHN1YmNvbW1hbmQiIiIKKyAgICBkZXBsb3lfZmlsZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ3RhcmdldF9kZXBsb3knLCBhcmdzLnRhcmdldCwgYXJncy5yZWNpcGVuYW1lICsgJy5saXN0JykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVwbG95X2ZpbGUpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJyVzIGhhcyBub3QgYmVlbiBkZXBsb3llZCcgJSBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBhcmdzLmRyeV9ydW46CisgICAgICAgIHByaW50KCdQcmV2aW91c2x5IGRlcGxveWVkIGZpbGVzIHRvIGJlIHVuLWRlcGxveWVkIGZvciAlcyBvbiB0YXJnZXQgJXM6JyAlIChhcmdzLnJlY2lwZW5hbWUsIGFyZ3MudGFyZ2V0KSkKKyAgICAgICAgd2l0aCBvcGVuKGRlcGxveV9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIGxpbmUucnN0cmlwKCkpCisgICAgICAgIHJldHVybiAwCisKKyAgICBleHRyYW9wdGlvbnMgPSAnJworICAgIGlmIGFyZ3Mubm9faG9zdF9jaGVjazoKKyAgICAgICAgZXh0cmFvcHRpb25zICs9ICctbyBVc2VyS25vd25Ib3N0c0ZpbGU9L2Rldi9udWxsIC1vIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubycKKyAgICBpZiBub3QgYXJncy5zaG93X3N0YXR1czoKKyAgICAgICAgZXh0cmFvcHRpb25zICs9ICcgLXEnCisKKyAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoInNjcCAlcyAlcyAlczovdG1wIiAlIChleHRyYW9wdGlvbnMsIGRlcGxveV9maWxlLCBhcmdzLnRhcmdldCksIHNoZWxsPVRydWUpCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRmFpbGVkIHRvIGNvcHkgZmlsZSBsaXN0IHRvICVzIC0gcmVydW4gd2l0aCAtcyB0byAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0IGEgY29tcGxldGUgZXJyb3IgbWVzc2FnZScgJSBhcmdzLnRhcmdldCkKKworICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgic3NoICVzICVzICd4YXJncyAtbjEgcm0gLWYgPC90bXAvJXMnIiAlIChleHRyYW9wdGlvbnMsIGFyZ3MudGFyZ2V0LCBvcy5wYXRoLmJhc2VuYW1lKGRlcGxveV9maWxlKSksIHNoZWxsPVRydWUpCisgICAgaWYgcmV0ID09IDA6CisgICAgICAgIGxvZ2dlci5pbmZvKCdTdWNjZXNzZnVsbHkgdW5kZXBsb3llZCAlcycgJSBhcmdzLnJlY2lwZW5hbWUpCisgICAgICAgIG9zLnJlbW92ZShkZXBsb3lfZmlsZSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VuZGVwbG95IGZhaWxlZCAtIHJlcnVuIHdpdGggLXMgdG8gZ2V0IGEgY29tcGxldGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yIG1lc3NhZ2UnKQorCisgICAgcmV0dXJuIHJldAorCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhlIGRlcGxveSBwbHVnaW4iIiIKKyAgICBwYXJzZXJfZGVwbG95ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdkZXBsb3ktdGFyZ2V0JywgaGVscD0nRGVwbG95IHJlY2lwZSBvdXRwdXQgZmlsZXMgdG8gbGl2ZSB0YXJnZXQgbWFjaGluZScpCisgICAgcGFyc2VyX2RlcGxveS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdSZWNpcGUgdG8gZGVwbG95JykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgndGFyZ2V0JywgaGVscD0nTGl2ZSB0YXJnZXQgbWFjaGluZSBydW5uaW5nIGFuIHNzaCBzZXJ2ZXI6IHVzZXJAaG9zdG5hbWVbOmRlc3RkaXJdJykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgnLWMnLCAnLS1uby1ob3N0LWNoZWNrJywgaGVscD0nRGlzYWJsZSBzc2ggaG9zdCBrZXkgY2hlY2tpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCctcycsICctLXNob3ctc3RhdHVzJywgaGVscD0nU2hvdyBwcm9ncmVzcy9zdGF0dXMgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgnLW4nLCAnLS1kcnktcnVuJywgaGVscD0nTGlzdCBmaWxlcyB0byBiZSBkZXBsb3llZCBvbmx5JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfZGVwbG95LnNldF9kZWZhdWx0cyhmdW5jPWRlcGxveSkKKworICAgIHBhcnNlcl91bmRlcGxveSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigndW5kZXBsb3ktdGFyZ2V0JywgaGVscD0nVW5kZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyBpbiBsaXZlIHRhcmdldCBtYWNoaW5lJykKKyAgICBwYXJzZXJfdW5kZXBsb3kuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nUmVjaXBlIHRvIHVuZGVwbG95JykKKyAgICBwYXJzZXJfdW5kZXBsb3kuYWRkX2FyZ3VtZW50KCd0YXJnZXQnLCBoZWxwPSdMaXZlIHRhcmdldCBtYWNoaW5lIHJ1bm5pbmcgYW4gc3NoIHNlcnZlcjogdXNlckBob3N0bmFtZScpCisgICAgcGFyc2VyX3VuZGVwbG95LmFkZF9hcmd1bWVudCgnLWMnLCAnLS1uby1ob3N0LWNoZWNrJywgaGVscD0nRGlzYWJsZSBzc2ggaG9zdCBrZXkgY2hlY2tpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl91bmRlcGxveS5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2hvdy1zdGF0dXMnLCBoZWxwPSdTaG93IHByb2dyZXNzL3N0YXR1cyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl91bmRlcGxveS5hZGRfYXJndW1lbnQoJy1uJywgJy0tZHJ5LXJ1bicsIGhlbHA9J0xpc3QgZmlsZXMgdG8gYmUgdW5kZXBsb3llZCBvbmx5JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfdW5kZXBsb3kuc2V0X2RlZmF1bHRzKGZ1bmM9dW5kZXBsb3kpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvcGFja2FnZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9wYWNrYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhN2EzNmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvcGFja2FnZS5weQpAQCAtMCwwICsxLDYxIEBACisjIERldmVsb3BtZW50IHRvb2wgLSBwYWNrYWdlIGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBwbHVnaW4gY29udGFpbmluZyB0aGUgcGFja2FnZSBzdWJjb21tYW5kcyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworZnJvbSBiYi5wcm9jZXNzIGltcG9ydCBFeGVjdXRpb25FcnJvcgorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBEZXZ0b29sRXJyb3IKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIiIiUGx1Z2luIGluaXRpYWxpemF0aW9uIiIiCisgICAgcGFzcworCitkZWYgcGFja2FnZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAncGFja2FnZScgc3ViY29tbWFuZCIiIgorICAgIGlmIG5vdCBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm5vIHJlY2lwZSBuYW1lZCAlcyBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaW1hZ2VfcGtndHlwZSA9IGNvbmZpZy5nZXQoJ1BhY2thZ2UnLCAnaW1hZ2VfcGtndHlwZScsICcnKQorICAgIGlmIG5vdCBpbWFnZV9wa2d0eXBlOgorICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbmZvaWwucHJlcGFyZShjb25maWdfb25seT1UcnVlKQorICAgICAgICAgICAgaW1hZ2VfcGtndHlwZSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQorCisgICAgcGFja2FnZV90YXNrID0gY29uZmlnLmdldCgnUGFja2FnZScsICdwYWNrYWdlX3Rhc2snLCAncGFja2FnZV93cml0ZV8lcycgJSBpbWFnZV9wa2d0eXBlKQorICAgIHRyeToKKyAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgLWMgJXMgJXMnICUgKHBhY2thZ2VfdGFzaywgYXJncy5yZWNpcGVuYW1lKSwgd2F0Y2g9VHJ1ZSkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgc2VlbiB0aGUgb3V0cHV0IHNpbmNlIHdhdGNoPVRydWUsIHNvIGp1c3QgZW5zdXJlIHdlIHJldHVybiBzb21ldGhpbmcgdG8gdGhlIHVzZXIKKyAgICAgICAgcmV0dXJuIGUuZXhpdGNvZGUKKyAgICBsb2dnZXIuaW5mbygnWW91ciBwYWNrYWdlcyBhcmUgaW4gJXMvdG1wL2RlcGxveS8lcycgJSAoYmFzZXBhdGgsIGltYWdlX3BrZ3R5cGUpKQorCisgICAgcmV0dXJuIDAKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGUgcGFja2FnZSBwbHVnaW4iIiIKKyAgICBpZiBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICBwYXJzZXJfcGFja2FnZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigncGFja2FnZScsIGhlbHA9J0J1aWxkIHBhY2thZ2VzIGZvciBhIHJlY2lwZScsIGRlc2NyaXB0aW9uPSdCdWlsZHMgcGFja2FnZXMgZm9yIGEgcmVjaXBlXCdzIG91dHB1dCBmaWxlcycpCisgICAgICAgIHBhcnNlcl9wYWNrYWdlLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J1JlY2lwZSB0byBwYWNrYWdlJykKKyAgICAgICAgcGFyc2VyX3BhY2thZ2Uuc2V0X2RlZmF1bHRzKGZ1bmM9cGFja2FnZSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zZGsucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDE2YjMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc2RrLnB5CkBAIC0wLDAgKzEsMTk3IEBACisjIERldmVsb3BtZW50IHRvb2wgLSBzZGstdXBkYXRlIGNvbW1hbmQgcGx1Z2luCisKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgZ2xvYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IGVycm5vCitpbXBvcnQgc3lzCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBwbHVnaW5faW5pdChwbHVnaW5saXN0KToKKyAgICAiIiJQbHVnaW4gaW5pdGlhbGl6YXRpb24iIiIKKyAgICBwYXNzCisKK2RlZiBwYXJzZV9sb2NrZWRfc2lncyhzaWdmaWxlX3BhdGgpOgorICAgICIiIlJldHVybiA8cG46dGFzaz46PGhhc2g+IGRpY3Rpb25hcnkiIiIKKyAgICBzaWdfZGljdCA9IHt9CisgICAgd2l0aCBvcGVuKHNpZ2ZpbGVfcGF0aCkgYXMgZjoKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgJzonIGluIGxpbmU6CisgICAgICAgICAgICAgICAgdGFza2tleSwgXywgaGFzaHZhbCA9IGxpbmUucnBhcnRpdGlvbignOicpCisgICAgICAgICAgICAgICAgc2lnX2RpY3RbdGFza2tleS5zdHJpcCgpXSA9IGhhc2h2YWwuc3BsaXQoKVswXQorICAgIHJldHVybiBzaWdfZGljdAorCitkZWYgZ2VuZXJhdGVfdXBkYXRlX2RpY3Qoc2lnZmlsZV9uZXcsIHNpZ2ZpbGVfb2xkKToKKyAgICAiIiJSZXR1cm4gYSBkaWN0IGNvbnRhaW5pbmcgPHBuOnRhc2s+OjxoYXNoPiB3aGljaCBpbmRpY2F0ZXMgd2hhdCBuZWVkIHRvIGJlIHVwZGF0ZWQiIiIKKyAgICB1cGRhdGVfZGljdCA9IHt9CisgICAgc2lnZGljdF9uZXcgPSBwYXJzZV9sb2NrZWRfc2lncyhzaWdmaWxlX25ldykKKyAgICBzaWdkaWN0X29sZCA9IHBhcnNlX2xvY2tlZF9zaWdzKHNpZ2ZpbGVfb2xkKQorICAgIGZvciBrIGluIHNpZ2RpY3RfbmV3OgorICAgICAgICBpZiBrIG5vdCBpbiBzaWdkaWN0X29sZDoKKyAgICAgICAgICAgIHVwZGF0ZV9kaWN0W2tdID0gc2lnZGljdF9uZXdba10KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHNpZ2RpY3RfbmV3W2tdICE9IHNpZ2RpY3Rfb2xkW2tdOgorICAgICAgICAgICAgdXBkYXRlX2RpY3Rba10gPSBzaWdkaWN0X25ld1trXQorICAgICAgICAgICAgY29udGludWUKKyAgICByZXR1cm4gdXBkYXRlX2RpY3QKKworZGVmIGdldF9zc3RhdGVfb2JqZWN0cyh1cGRhdGVfZGljdCwgbmV3c2RrX3BhdGgpOgorICAgICIiIlJldHVybiBhIGxpc3QgY29udGFpbmluZyBzc3RhdGUgb2JqZWN0cyB3aGljaCBhcmUgdG8gYmUgaW5zdGFsbGVkIiIiCisgICAgc3N0YXRlX29iamVjdHMgPSBbXQorICAgICMgRW5zdXJlIG5ld3Nka19wYXRoIHBvaW50cyB0byBhbiBleHRlbnNpYmxlIFNESworICAgIHNzdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4obmV3c2RrX3BhdGgsICdzc3RhdGUtY2FjaGUnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVfZGlyKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IG5vdCBmb3VuZCB1bmRlciAlcyIgJSBuZXdzZGtfcGF0aCkKKyAgICAgICAgcmFpc2UKKyAgICBmb3IgayBpbiB1cGRhdGVfZGljdDoKKyAgICAgICAgZmlsZXMgPSBzZXQoKQorICAgICAgICBoYXNodmFsID0gdXBkYXRlX2RpY3Rba10KKyAgICAgICAgcCA9IHNzdGF0ZV9kaXIgKyAnLycgKyBoYXNodmFsWzoyXSArICcvKicgKyBoYXNodmFsICsgJyoudGd6JworICAgICAgICBmaWxlcyB8PSBzZXQoZ2xvYi5nbG9iKHApKQorICAgICAgICBwID0gc3N0YXRlX2RpciArICcvKi8nICsgaGFzaHZhbFs6Ml0gKyAnLyonICsgaGFzaHZhbCArICcqLnRneicKKyAgICAgICAgZmlsZXMgfD0gc2V0KGdsb2IuZ2xvYihwKSkKKyAgICAgICAgZmlsZXMgPSBsaXN0KGZpbGVzKQorICAgICAgICBpZiBsZW4oZmlsZXMpID09IDE6CisgICAgICAgICAgICBzc3RhdGVfb2JqZWN0cy5leHRlbmQoZmlsZXMpCisgICAgICAgIGVsaWYgbGVuKGZpbGVzKSA+IDE6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgc3N0YXRlIG9iamVjdCBmb3VuZCBmb3IgJXMiICUgaGFzaHZhbCkKKworICAgIHJldHVybiBzc3RhdGVfb2JqZWN0cworCitkZWYgbWtkaXIoZCk6CisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UgZQorCitkZWYgaW5zdGFsbF9zc3RhdGVfb2JqZWN0cyhzc3RhdGVfb2JqZWN0cywgc3JjX3NkaywgZGVzdF9zZGspOgorICAgICIiIkluc3RhbGwgc3N0YXRlIG9iamVjdHMgaW50byBkZXN0aW5hdGlvbiBTREsiIiIKKyAgICBzc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKGRlc3Rfc2RrLCAnc3N0YXRlLWNhY2hlJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlX2Rpcik6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTWlzc2luZyBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IGluICVzLCBpdCBtaWdodCBub3QgYmUgYW4gZXh0ZW5zaWJsZSBTREsuIiAlIGRlc3Rfc2RrKQorICAgICAgICByYWlzZQorICAgIGZvciBzYiBpbiBzc3RhdGVfb2JqZWN0czoKKyAgICAgICAgZHN0ID0gc2IucmVwbGFjZShzcmNfc2RrLCBkZXN0X3NkaykKKyAgICAgICAgZGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShkc3QpCisgICAgICAgIG1rZGlyKGRlc3RkaXIpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ29weWluZyAlcyB0byAlcyIgJSAoc2IsIGRzdCkpCisgICAgICAgIHNodXRpbC5jb3B5KHNiLCBkc3QpCisKK2RlZiBzZGtfdXBkYXRlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIyBGZXRjaCBsb2NrZWQtc2lncy5pbmMgZmlsZSBmcm9tIHJlbW90ZS9sb2NhbCBkZXN0aW5hdGlvbgorICAgIGZyb20gQ29uZmlnUGFyc2VyIGltcG9ydCBOb1NlY3Rpb25FcnJvcgorICAgIHVwZGF0ZXNlcnZlciA9IGFyZ3MudXBkYXRlc2VydmVyCisgICAgaWYgbm90IHVwZGF0ZXNlcnZlcjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXBkYXRlc2VydmVyID0gY29uZmlnLmdldCgnU0RLJywgJ3VwZGF0ZXNlcnZlcicsIE5vbmUpCisgICAgICAgIGV4Y2VwdCBOb1NlY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICBpZiBub3QgdXBkYXRlc2VydmVyOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlVwZGF0ZSBzZXJ2ZXIgbm90IHNwZWNpZmllZCBpbiBjb25maWcgZmlsZSwgeW91IG11c3Qgc3BlY2lmeSBpdCBvbiB0aGUgY29tbWFuZCBsaW5lIikKKyAgICBsb2dnZXIuZGVidWcoInVwZGF0ZXNlcnZlcjogJXMiICUgYXJncy51cGRhdGVzZXJ2ZXIpCisKKyAgICAjIE1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgc2RrLXVwZGF0ZSBmcm9tIHdpdGhpbiBTREsKKyAgICBsb2dnZXIuZGVidWcoImJhc2VwYXRoID0gJXMiICUgYmFzZXBhdGgpCisgICAgb2xkX2xvY2tlZF9zaWdfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZi9sb2NrZWQtc2lncy5pbmMnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvbGRfbG9ja2VkX3NpZ19maWxlX3BhdGgpOgorICAgICAgICBsb2dnZXIuZXJyb3IoIk5vdCB1c2luZyBkZXZ0b29sJ3Mgc2RrLXVwZGF0ZSBjb21tYW5kIGZyb20gd2l0aGluIGFuIGV4dGVuc2libGUgU0RLLiBQbGVhc2Ugc3BlY2lmeSBjb3JyZWN0IGJhc2VwYXRoIHZpYSAtLWJhc2VwYXRoIG9wdGlvbiIpCisgICAgICAgIHJldHVybiAtMQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRm91bmQgY29uZi9sb2NrZWQtc2lncy5pbmMgaW4gJXMiICUgYmFzZXBhdGgpCisKKyAgICBpZiAnOicgaW4gYXJncy51cGRhdGVzZXJ2ZXI6CisgICAgICAgIGlzX3JlbW90ZSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBpc19yZW1vdGUgPSBGYWxzZQorCisgICAgaWYgbm90IGlzX3JlbW90ZToKKyAgICAgICAgIyBkZXZ0b29sIHNkay11cGRhdGUgL2xvY2FsL3BhdGgvdG8vbGF0ZXN0L3NkaworICAgICAgICBuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oYXJncy51cGRhdGVzZXJ2ZXIsICdjb25mL2xvY2tlZC1zaWdzLmluYycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyBkb2Vzbid0IGV4aXN0IG9yIGlzIG5vdCBhbiBleHRlbnNpYmxlIFNESyIgJSBhcmdzLnVwZGF0ZXNlcnZlcikKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJGb3VuZCBjb25mL2xvY2tlZC1zaWdzLmluYyBpbiAlcyIgJSBhcmdzLnVwZGF0ZXNlcnZlcikKKyAgICAgICAgdXBkYXRlX2RpY3QgPSBnZW5lcmF0ZV91cGRhdGVfZGljdChuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgsIG9sZF9sb2NrZWRfc2lnX2ZpbGVfcGF0aCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJ1cGRhdGVfZGljdCA9ICVzIiAlIHVwZGF0ZV9kaWN0KQorICAgICAgICBzc3RhdGVfb2JqZWN0cyA9IGdldF9zc3RhdGVfb2JqZWN0cyh1cGRhdGVfZGljdCwgYXJncy51cGRhdGVzZXJ2ZXIpCisgICAgICAgIGxvZ2dlci5kZWJ1Zygic3N0YXRlX29iamVjdHMgPSAlcyIgJSBzc3RhdGVfb2JqZWN0cykKKyAgICAgICAgaWYgbGVuKHNzdGF0ZV9vYmplY3RzKSA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk5vIG5lZWQgdG8gdXBkYXRlLiIpCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBsb2dnZXIuaW5mbygiSW5zdGFsbGluZyBzc3RhdGUgb2JqZWN0cyBpbnRvICVzIiwgYmFzZXBhdGgpCisgICAgICAgIGluc3RhbGxfc3N0YXRlX29iamVjdHMoc3N0YXRlX29iamVjdHMsIGFyZ3MudXBkYXRlc2VydmVyLnJzdHJpcCgnLycpLCBiYXNlcGF0aCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMiKQorICAgICAgICBuZXdfY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oYXJncy51cGRhdGVzZXJ2ZXIsICdjb25mJykKKyAgICAgICAgb2xkX2NvbmZfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZicpCisgICAgICAgIHNodXRpbC5ybXRyZWUob2xkX2NvbmZfZGlyKQorICAgICAgICBzaHV0aWwuY29weXRyZWUobmV3X2NvbmZfZGlyLCBvbGRfY29uZl9kaXIpCisgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGluZyBsYXllcnMiKQorICAgICAgICBuZXdfbGF5ZXJzX2RpciA9IG9zLnBhdGguam9pbihhcmdzLnVwZGF0ZXNlcnZlciwgJ2xheWVycycpCisgICAgICAgIG9sZF9sYXllcnNfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnbGF5ZXJzJykKKyAgICAgICAgc2h1dGlsLnJtdHJlZShvbGRfbGF5ZXJzX2RpcikKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKG5ld19sYXllcnNfZGlyLCBvbGRfbGF5ZXJzX2RpcikKKyAgICBlbHNlOgorICAgICAgICAjIGRldnRvb2wgc2RrLXVwZGF0ZSBodHRwOi8vbXlob3N0L3NkaworICAgICAgICB0bXBzZGtfZGlyID0gJy90bXAvc2RrLWV4dCcKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModG1wc2RrX2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcHNka19kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKHRtcHNka19kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicpKQorICAgICAgICAjIEZldGNoIGxvY2tlZC1zaWdzLmluYyBmcm9tIHVwZGF0ZSBzZXJ2ZXIKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJ3Z2V0IC1xIC1PIC0gJXMvY29uZi9sb2NrZWQtc2lncy5pbmMgPiAlcy9sb2NrZWQtc2lncy5pbmMiICUgKGFyZ3MudXBkYXRlc2VydmVyLCBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnKSksIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGZXRjaGluZyBjb25mL2xvY2tlZC1zaWdzLmluYyBmcm9tICVzIHRvICVzL2xvY2tlZC1zaWdzLmluYyBmYWlsZWQiICUgKGFyZ3MudXBkYXRlc2VydmVyLCBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnKSkpCisgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2hpbmcgY29uZi9sb2NrZWQtc2lncy5pbmMgZnJvbSAlcyB0byAlcy9sb2NrZWQtc2lncy5pbmMgc3VjY2VlZGVkIiAlIChhcmdzLnVwZGF0ZXNlcnZlciwgb3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJykpKQorICAgICAgICBuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYvbG9ja2VkLXNpZ3MuaW5jJykKKyAgICAgICAgdXBkYXRlX2RpY3QgPSBnZW5lcmF0ZV91cGRhdGVfZGljdChuZXdfbG9ja2VkX3NpZ19maWxlX3BhdGgsIG9sZF9sb2NrZWRfc2lnX2ZpbGVfcGF0aCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJ1cGRhdGVfZGljdCA9ICVzIiAlIHVwZGF0ZV9kaWN0KQorICAgICAgICBpZiBsZW4odXBkYXRlX2RpY3QpID09IDA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm8gbmVlZCB0byB1cGRhdGUuIikKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICMgVXBkYXRlIG1ldGFkYXRhCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiVXBkYXRpbmcgbWV0YSBkYXRhIHZpYSBnaXQgLi4uIikKKyAgICAgICAgIyBUcnkgdXNpbmcgJ2dpdCBwdWxsJywgaWYgZmFpbGVkLCB1c2UgJ2dpdCBjbG9uZScKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnbGF5ZXJzLy5naXQnKSk6CisgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoImNkIGxheWVycyAmJiBnaXQgcHVsbCIsIHNoZWxsPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXQgPSAtMQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgicm0gLXJmIGxheWVycyAmJiBnaXQgY2xvbmUgJXMvbGF5ZXJzIiAlIGFyZ3MudXBkYXRlc2VydmVyLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVXBkYXRpbmcgbWV0YSBkYXRhIHZpYSBnaXQgZmFpbGVkIikKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJVcGRhdGluZyBjb25mIGZpbGVzIC4uLiIpCisgICAgICAgIGNvbmZfZmlsZXMgPSBbJ2xvY2FsLmNvbmYnLCAnYmJsYXllcnMuY29uZicsICdkZXZ0b29sLmNvbmYnLCAnd29yay1jb25maWcuaW5jJywgJ2xvY2tlZC1zaWdzLmluYyddCisgICAgICAgIGZvciBjb25mIGluIGNvbmZfZmlsZXM6CisgICAgICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIndnZXQgLXEgLU8gLSAlcy9jb25mLyVzID4gY29uZi8lcyIgJSAoYXJncy51cGRhdGVzZXJ2ZXIsIGNvbmYsIGNvbmYpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVcGRhdGUgJXMgZmFpbGVkIiAlIGNvbmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZi9sb2NhbC5jb25mJyksICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1NTVEFURV9NSVJST1JTX2FwcGVuZCA9ICIgZmlsZTovLy4qICVzL3NzdGF0ZS1jYWNoZS9QQVRIIFxcbiAiXG4nICUgYXJncy51cGRhdGVzZXJ2ZXIpCisKKyAgICAjIFJ1biBiaXRiYWtlIGNvbW1hbmQgZm9yIHRoZSB3aG9sZSBTREsKKyAgICBzZGtfdGFyZ2V0cyA9IGNvbmZpZy5nZXQoJ1NESycsICdzZGtfdGFyZ2V0cycpCisgICAgbG9nZ2VyLmluZm8oIkV4ZWN1dGluZyAnYml0YmFrZSAlcycgLi4uIChUaGlzIG1heSB0YWtlIHNvbWUgdGltZS4pIiAlIHNka190YXJnZXRzKQorICAgIHRyeToKKyAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgJXMnICUgc2RrX3RhcmdldHMpCisgICAgZXhjZXB0OgorICAgICAgICBsb2dnZXIuZXJyb3IoJ2JpdGJha2UgJXMgZmFpbGVkJyAlIHNka190YXJnZXRzKQorICAgICAgICByZXR1cm4gLTEKKyAgICByZXR1cm4gMAorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoZSBzZGsgcGx1Z2luIiIiCisgICAgaWYgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgcGFyc2VyX3NkayA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignc2RrLXVwZGF0ZScsIGhlbHA9J1VwZGF0ZSBTREsgY29tcG9uZW50cyBmcm9tIGEgbm9taW5hdGVkIGxvY2F0aW9uJykKKyAgICAgICAgcGFyc2VyX3Nkay5hZGRfYXJndW1lbnQoJ3VwZGF0ZXNlcnZlcicsIGhlbHA9J1RoZSB1cGRhdGUgc2VydmVyIHRvIGZldGNoIGxhdGVzdCBTREsgY29tcG9uZW50cyBmcm9tJywgbmFyZ3M9Jz8nKQorICAgICAgICBwYXJzZXJfc2RrLnNldF9kZWZhdWx0cyhmdW5jPXNka191cGRhdGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5MDBiNAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC9zdGFuZGFyZC5weQpAQCAtMCwwICsxLDkzMCBAQAorIyBEZXZlbG9wbWVudCB0b29sIC0gc3RhbmRhcmQgY29tbWFuZHMgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBzdGFuZGFyZCBwbHVnaW5zIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBzY3JpcHR1dGlscworaW1wb3J0IGVycm5vCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvcgorZnJvbSBkZXZ0b29sIGltcG9ydCBwYXJzZV9yZWNpcGUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCisKK2RlZiBhZGQoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ2FkZCcgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgaWYgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJyZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIHJlYXNvbiA9IG9lLnJlY2lwZXV0aWxzLnZhbGlkYXRlX3BuKGFyZ3MucmVjaXBlbmFtZSkKKyAgICBpZiByZWFzb246CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcihyZWFzb24pCisKKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKGFyZ3Muc3JjdHJlZSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmN0cmVlKToKKyAgICAgICAgaWYgYXJncy5mZXRjaDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNyY3RyZWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQ2Fubm90IGZldGNoIGludG8gc291cmNlIHRyZWUgcGF0aCAlcyBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQorICAgICAgICAgICAgZWxpZiBvcy5saXN0ZGlyKHNyY3RyZWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQ2Fubm90IGZldGNoIGludG8gc291cmNlIHRyZWUgcGF0aCAlcyBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm9uLWVtcHR5IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3RyZWUpCisgICAgZWxpZiBub3QgYXJncy5mZXRjaDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJTcGVjaWZpZWQgc291cmNlIHRyZWUgJXMgY291bGQgbm90IGJlIGZvdW5kIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN0cmVlKQorCisgICAgYXBwZW5kcGF0aCA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBwZW5kcGF0aCk6CisgICAgICAgIG9zLm1ha2VkaXJzKGFwcGVuZHBhdGgpCisKKyAgICByZWNpcGVkaXIgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAncmVjaXBlcycsIGFyZ3MucmVjaXBlbmFtZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIocmVjaXBlZGlyKQorICAgIHJmdiA9IE5vbmUKKyAgICBpZiBhcmdzLnZlcnNpb246CisgICAgICAgIGlmICdfJyBpbiBhcmdzLnZlcnNpb24gb3IgJyAnIGluIGFyZ3MudmVyc2lvbjoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignSW52YWxpZCB2ZXJzaW9uIHN0cmluZyAiJXMiJyAlIGFyZ3MudmVyc2lvbikKKyAgICAgICAgcmZ2ID0gYXJncy52ZXJzaW9uCisgICAgaWYgYXJncy5mZXRjaDoKKyAgICAgICAgaWYgYXJncy5mZXRjaC5zdGFydHN3aXRoKCdnaXQ6Ly8nKToKKyAgICAgICAgICAgIHJmdiA9ICdnaXQnCisgICAgICAgIGVsaWYgYXJncy5mZXRjaC5zdGFydHN3aXRoKCdzdm46Ly8nKToKKyAgICAgICAgICAgIHJmdiA9ICdzdm4nCisgICAgICAgIGVsaWYgYXJncy5mZXRjaC5zdGFydHN3aXRoKCdoZzovLycpOgorICAgICAgICAgICAgcmZ2ID0gJ2hnJworICAgIGlmIHJmdjoKKyAgICAgICAgYnAgPSAiJXNfJXMiICUgKGFyZ3MucmVjaXBlbmFtZSwgcmZ2KQorICAgIGVsc2U6CisgICAgICAgIGJwID0gYXJncy5yZWNpcGVuYW1lCisgICAgcmVjaXBlZmlsZSA9IG9zLnBhdGguam9pbihyZWNpcGVkaXIsICIlcy5iYiIgJSBicCkKKyAgICBpZiBzeXMuc3Rkb3V0LmlzYXR0eSgpOgorICAgICAgICBjb2xvciA9ICdhbHdheXMnCisgICAgZWxzZToKKyAgICAgICAgY29sb3IgPSBhcmdzLmNvbG9yCisgICAgZXh0cmFjbWRvcHRzID0gJycKKyAgICBpZiBhcmdzLmZldGNoOgorICAgICAgICBzb3VyY2UgPSBhcmdzLmZldGNoCisgICAgICAgIGV4dHJhY21kb3B0cyA9ICcteCAlcycgJSBzcmN0cmVlCisgICAgZWxzZToKKyAgICAgICAgc291cmNlID0gc3JjdHJlZQorICAgIGlmIGFyZ3MudmVyc2lvbjoKKyAgICAgICAgZXh0cmFjbWRvcHRzICs9ICcgLVYgJXMnICUgYXJncy52ZXJzaW9uCisgICAgdHJ5OgorICAgICAgICBzdGRvdXQsIF8gPSBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAncmVjaXBldG9vbCAtLWNvbG9yPSVzIGNyZWF0ZSAtbyAlcyAiJXMiICVzJyAlIChjb2xvciwgcmVjaXBlZmlsZSwgc291cmNlLCBleHRyYWNtZG9wdHMpKQorICAgICAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgY3JlYXRlZDsgZnVydGhlciBlZGl0aW5nIG1heSBiZSByZXF1aXJlZCB0byBtYWtlIGl0IGZ1bGx5IGZ1bmN0aW9uYWwnICUgcmVjaXBlZmlsZSkKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0NvbW1hbmQgXCclc1wnIGZhaWxlZDpcbiVzJyAlIChlLmNvbW1hbmQsIGUuc3Rkb3V0KSkKKworICAgIF9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCByZWNpcGVmaWxlKQorCisgICAgaW5pdGlhbF9yZXYgPSBOb25lCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNyY3RyZWUsICcuZ2l0JykpOgorICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKworICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oYXBwZW5kcGF0aCwgJyVzLmJiYXBwZW5kJyAlIGJwKQorICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ2luaGVyaXQgZXh0ZXJuYWxzcmNcbicpCisgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDID0gIiVzIlxuJyAlIHNyY3RyZWUpCisgICAgICAgIGlmIGFyZ3Muc2FtZV9kaXI6CisgICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19CVUlMRCA9ICIlcyJcbicgJSBzcmN0cmVlKQorICAgICAgICBpZiBpbml0aWFsX3JldjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuIyBpbml0aWFsX3JldjogJXNcbicgJSBpbml0aWFsX3JldikKKworICAgIF9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCBhcHBlbmRmaWxlKQorCisgICAgcmV0dXJuIDAKKworCitkZWYgX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKHBuLCBkKToKKyAgICAiIiJDaGVjayBpZiB0aGUgcmVjaXBlIGlzIHN1cHBvcnRlZCBieSBkZXZ0b29sIiIiCisgICAgaWYgcG4gPT0gJ3BlcmYnOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSBwZXJmIHJlY2lwZSBkb2VzIG5vdCBhY3R1YWxseSBjaGVjayBvdXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGh1cyBjYW5ub3QgYmUgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIpCisKKyAgICBpZiBwbiBpbiBbJ2tlcm5lbC1kZXZzcmMnLCAncGFja2FnZS1pbmRleCddIG9yIHBuLnN0YXJ0c3dpdGgoJ2djYy1zb3VyY2UnKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJUaGUgJXMgcmVjaXBlIGlzIGFuIGltYWdlLCBhbmQgdGhlcmVmb3JlIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BvcHVsYXRlX3NkaycsIGQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYW4gU0RLLCBhbmQgdGhlcmVmb3JlIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYSBwYWNrYWdlZ3JvdXAsIGFuZCB0aGVyZWZvcmUgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbWV0YScsIGQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYSBtZXRhLXJlY2lwZSwgYW5kIHRoZXJlZm9yZSBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdleHRlcm5hbHNyYycsIGQpIGFuZCBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJleHRlcm5hbHNyYyBpcyBjdXJyZW50bHkgZW5hYmxlZCBmb3IgdGhlICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNpcGUuIFRoaXMgcHJldmVudHMgdGhlIG5vcm1hbCBkb19wYXRjaCB0YXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHdvcmtpbmcuIFlvdSB3aWxsIG5lZWQgdG8gZGlzYWJsZSB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdC4iICUgcG4pCisKK2RlZiBfbHNfdHJlZShkaXJlY3RvcnkpOgorICAgICIiIlJlY3Vyc2l2ZSBsaXN0aW5nIG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5IiIiCisgICAgcmV0ID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXJlY3RvcnkpOgorICAgICAgICByZXQuZXh0ZW5kKFtvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGZuYW1lKSwgZGlyZWN0b3J5KSBmb3IKKyAgICAgICAgICAgICAgICAgICAgZm5hbWUgaW4gZmlsZXNdKQorICAgIHJldHVybiByZXQKKworCitkZWYgZXh0cmFjdChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZXh0cmFjdCcgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorCisgICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgIGlmIG5vdCByZDoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgIGluaXRpYWxfcmV2ID0gX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGFyZ3Mua2VlcF90ZW1wLCBhcmdzLmJyYW5jaCwgcmQpCisgICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSB0cmVlIGV4dHJhY3RlZCB0byAlcycgJSBzcmN0cmVlKQorCisgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgIHJldHVybiAwCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDEKKworY2xhc3MgQmJUYXNrRXhlY3V0b3Iob2JqZWN0KToKKyAgICAiIiJDbGFzcyBmb3IgZXhlY3V0aW5nIGJpdGJha2UgdGFza3MgZm9yIGEgcmVjaXBlCisKKyAgICBGSVhNRTogVGhpcyBpcyB2ZXJ5IGF3a3dhcmQuIFVuZm9ydHVuYXRlbHkgaXQncyBub3QgY3VycmVudGx5IGVhc3kgdG8KKyAgICBwcm9wZXJseSBleGVjdXRlIHRhc2tzIG91dHNpZGUgb2YgYml0YmFrZSBpdHNlbGYsIHVudGlsIHRoZW4gdGhpcyBoYXMgdG8KKyAgICBzdWZmaWNlIGlmIHdlIGFyZSB0byBoYW5kbGUgZS5nLiBsaW51eC15b2N0bydzIGV4dHJhIHRhc2tzCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmRhdGEpOgorICAgICAgICBzZWxmLnJkYXRhID0gcmRhdGEKKyAgICAgICAgc2VsZi5leGVjdXRlZCA9IFtdCisKKyAgICBkZWYgZXhlY19mdW5jKHNlbGYsIGZ1bmMsIHJlcG9ydCk6CisgICAgICAgICIiIlJ1biBiaXRiYWtlIHRhc2sgZnVuY3Rpb24iIiIKKyAgICAgICAgaWYgbm90IGZ1bmMgaW4gc2VsZi5leGVjdXRlZDoKKyAgICAgICAgICAgIGRlcHMgPSBzZWxmLnJkYXRhLmdldFZhckZsYWcoZnVuYywgJ2RlcHMnKQorICAgICAgICAgICAgaWYgZGVwczoKKyAgICAgICAgICAgICAgICBmb3IgdGFza2RlcGZ1bmMgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5leGVjX2Z1bmModGFza2RlcGZ1bmMsIFRydWUpCisgICAgICAgICAgICBpZiByZXBvcnQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0V4ZWN1dGluZyAlcy4uLicgJSBmdW5jKQorICAgICAgICAgICAgZm4gPSBzZWxmLnJkYXRhLmdldFZhcignRklMRScsIFRydWUpCisgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5idWlsZC5fdGFza19kYXRhKGZuLCBmdW5jLCBzZWxmLnJkYXRhKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0ZWQuYXBwZW5kKGZ1bmMpCisKKworZGVmIF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIHJlY2lwZW5hbWUpOgorICAgICIiIkhBQ0s6IFVnbHkgd29ya2Fyb3VuZCBmb3IgbWFraW5nIHN1cmUgdGhhdCByZXF1aXJlbWVudHMgYXJlIG1ldCB3aGVuCisgICAgICAgdHJ5aW5nIHRvIGV4dHJhY3QgYSBwYWNrYWdlLiBSZXR1cm5zIHRoZSB0aW5mb2lsIGluc3RhbmNlIHRvIGJlIHVzZWQuIiIiCisgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgcmVjaXBlbmFtZSwgVHJ1ZSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIHJkKToKKyAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZG91dCwgXyA9IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaXRiYWtlIGtlcm4tdG9vbHMtbmF0aXZlJykKKyAgICAgICAgICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJGYWlsZWQgdG8gYnVpbGQga2Vybi10b29scy1uYXRpdmU6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5zdGRvdXQpCisgICAgcmV0dXJuIHRpbmZvaWwKKworCitkZWYgX2V4dHJhY3Rfc291cmNlKHNyY3RyZWUsIGtlZXBfdGVtcCwgZGV2YnJhbmNoLCBkKToKKyAgICAiIiJFeHRyYWN0IHNvdXJjZXMgb2YgYSByZWNpcGUiIiIKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIGRlZiBldmVudGZpbHRlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCk6CisgICAgICAgICIiIkJpdGJha2UgZXZlbnQgZmlsdGVyIGZvciBkZXZ0b29sIGV4dHJhY3Qgb3BlcmF0aW9uIiIiCisgICAgICAgIGlmIG5hbWUgPT0gJ2Jhc2VfZXZlbnRoYW5kbGVyJzoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGhhc2F0dHIoYmIuZXZlbnQsICdzZXRfZXZlbnRmaWx0ZXInKToKKyAgICAgICAgYmIuZXZlbnQuc2V0X2V2ZW50ZmlsdGVyKGV2ZW50ZmlsdGVyKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKHBuLCBkKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjdHJlZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNyY3RyZWUpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJvdXRwdXQgcGF0aCAlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3RyZWUpCisgICAgICAgIGVsaWYgb3MubGlzdGRpcihzcmN0cmVlKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigib3V0cHV0IHBhdGggJXMgYWxyZWFkeSBleGlzdHMgYW5kIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLWVtcHR5IiAlIHNyY3RyZWUpCisKKyAgICAjIFByZXBhcmUgZm9yIHNodXRpbC5tb3ZlIGxhdGVyIG9uCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyY3RyZWUpCisgICAgb3Mucm1kaXIoc3JjdHJlZSkKKworICAgICMgV2UgZG9uJ3Qgd2FudCBub3RlcyB0byBiZSBwcmludGVkLCB0aGV5IGFyZSB0b28gdmVyYm9zZQorICAgIG9yaWdsZXZlbCA9IGJiLmxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCisgICAgaWYgbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkgPiBsb2dnaW5nLkRFQlVHOgorICAgICAgICBiYi5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOSU5HKQorCisgICAgaW5pdGlhbF9yZXYgPSBOb25lCisgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKKyAgICB0cnk6CisgICAgICAgIGNyZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgICMgTWFrZSBhIHN1YmRpciBzbyB3ZSBndWFyZCBhZ2FpbnN0IFdPUktESVI9PVMKKyAgICAgICAgd29ya2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnd29ya2RpcicpCisgICAgICAgIGNyZC5zZXRWYXIoJ1dPUktESVInLCB3b3JrZGlyKQorICAgICAgICBjcmQuc2V0VmFyKCdUJywgb3MucGF0aC5qb2luKHRlbXBkaXIsICd0ZW1wJykpCisgICAgICAgIGlmIG5vdCBjcmQuZ2V0VmFyKCdTJywgVHJ1ZSkuc3RhcnRzd2l0aCh3b3JrZGlyKToKKyAgICAgICAgICAgICMgVXN1YWxseSBhIHNoYXJlZCB3b3JrZGlyIHJlY2lwZSAoa2VybmVsLCBnY2MpCisgICAgICAgICAgICAjIFRyeSB0byBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGQpOgorICAgICAgICAgICAgICAgIGNyZC5zZXRWYXIoJ1MnLCAnJHtXT1JLRElSfS9zb3VyY2UnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjcmQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vJHtCUH0nKQorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKToKKyAgICAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byBtb3ZlIHRoZSBzb3VyY2UgdG8gU1RBR0lOR19LRVJORUxfRElSIGhlcmUKKyAgICAgICAgICAgIGNyZC5zZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsICcke1N9JykKKworICAgICAgICB0YXNrX2V4ZWN1dG9yID0gQmJUYXNrRXhlY3V0b3IoY3JkKQorCisgICAgICAgIGNyZC5zZXRWYXIoJ0VYVEVSTkFMU1JDX2ZvcmNldmFyaWFibGUnLCAnJykKKworICAgICAgICBsb2dnZXIuaW5mbygnRmV0Y2hpbmcgJXMuLi4nICUgcG4pCisgICAgICAgIHRhc2tfZXhlY3V0b3IuZXhlY19mdW5jKCdkb19mZXRjaCcsIEZhbHNlKQorICAgICAgICBsb2dnZXIuaW5mbygnVW5wYWNraW5nLi4uJykKKyAgICAgICAgdGFza19leGVjdXRvci5leGVjX2Z1bmMoJ2RvX3VucGFjaycsIEZhbHNlKQorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgICAgICMgRXh0cmEgc3RlcCBmb3Iga2VybmVsIHRvIHBvcHVsYXRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnRG9pbmcga2VybmVsIGNoZWNrb3V0Li4uJykKKyAgICAgICAgICAgIHRhc2tfZXhlY3V0b3IuZXhlY19mdW5jKCdkb19rZXJuZWxfY2hlY2tvdXQnLCBGYWxzZSkKKyAgICAgICAgc3Jjc3ViZGlyID0gY3JkLmdldFZhcignUycsIFRydWUpCisgICAgICAgIGlmIHNyY3N1YmRpciA9PSB3b3JrZGlyOgorICAgICAgICAgICAgIyBGaW5kIG5vbi1wYXRjaCBzb3VyY2VzIHRoYXQgd2VyZSAidW5wYWNrZWQiIHRvIHNyY3RyZWUgZGlyZWN0b3J5CisgICAgICAgICAgICByZWNpcGVfcGF0Y2hlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSBmb3IgcGF0Y2ggaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhjcmQpXQorICAgICAgICAgICAgc3JjX2ZpbGVzID0gW2ZuYW1lIGZvciBmbmFtZSBpbiBfbHNfdHJlZSh3b3JrZGlyKSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoZm5hbWUpIG5vdCBpbiByZWNpcGVfcGF0Y2hlc10KKyAgICAgICAgICAgICMgRm9yY2Ugc2VwYXJhdGUgUyBzbyB0aGF0IHBhdGNoIGZpbGVzIGNhbiBiZSBsZWZ0IG91dCBmcm9tIHNyY3RyZWUKKyAgICAgICAgICAgIHNyY3N1YmRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXdvcmtkaXIpCisgICAgICAgICAgICBjcmQuc2V0VmFyKCdTJywgc3Jjc3ViZGlyKQorICAgICAgICAgICAgIyBNb3ZlIHNvdXJjZSBmaWxlcyB0byBTCisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzcmNfZmlsZXM6CisgICAgICAgICAgICAgICAgdGd0X2RpciA9IG9zLnBhdGguam9pbihzcmNzdWJkaXIsIG9zLnBhdGguZGlybmFtZShwYXRoKSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGd0X2RpcikKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4od29ya2RpciwgcGF0aCksIHRndF9kaXIpCisgICAgICAgIGVsaWYgb3MucGF0aC5kaXJuYW1lKHNyY3N1YmRpcikgIT0gd29ya2RpcjoKKyAgICAgICAgICAgICMgSGFuZGxlIGlmIFMgaXMgc2V0IHRvIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UKKyAgICAgICAgICAgIHNyY3N1YmRpciA9IG9zLnBhdGguam9pbih3b3JrZGlyLCBvcy5wYXRoLnJlbHBhdGgoc3Jjc3ViZGlyLCB3b3JrZGlyKS5zcGxpdChvcy5zZXApWzBdKQorCisgICAgICAgIHNjcmlwdHV0aWxzLmdpdF9jb252ZXJ0X3N0YW5kYWxvbmVfY2xvbmUoc3Jjc3ViZGlyKQorCisgICAgICAgIHBhdGNoZGlyID0gb3MucGF0aC5qb2luKHNyY3N1YmRpciwgJ3BhdGNoZXMnKQorICAgICAgICBoYXNwYXRjaGVzID0gRmFsc2UKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hkaXIpOgorICAgICAgICAgICAgaWYgb3MubGlzdGRpcihwYXRjaGRpcik6CisgICAgICAgICAgICAgICAgaGFzcGF0Y2hlcyA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIocGF0Y2hkaXIpCisKKyAgICAgICAgaWYgbm90IG9zLmxpc3RkaXIoc3Jjc3ViZGlyKToKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gc291cmNlIHVucGFja2VkIHRvIFMsIHBlcmhhcHMgdGhlICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjaXBlIGRvZXNuJ3QgdXNlIGFueSBzb3VyY2U/IiAlIHBuKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3Jjc3ViZGlyLCAnLmdpdCcpKToKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgaW5pdCcsIGN3ZD1zcmNzdWJkaXIpCisgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGFkZCAuJywgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgY29tbWl0IC1xIC1tICJJbml0aWFsIGNvbW1pdCBmcm9tIHVwc3RyZWFtIGF0IHZlcnNpb24gJXMiJyAlIGNyZC5nZXRWYXIoJ1BWJywgVHJ1ZSksIGN3ZD1zcmNzdWJkaXIpCisKKyAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKworICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGNoZWNrb3V0IC1iICVzJyAlIGRldmJyYW5jaCwgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1iYXNlJywgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgY3JkLnNldFZhcignUEFUQ0hUT09MJywgJ2dpdCcpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1BhdGNoaW5nLi4uJykKKyAgICAgICAgdGFza19leGVjdXRvci5leGVjX2Z1bmMoJ2RvX3BhdGNoJywgRmFsc2UpCisKKyAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1wYXRjaGVkJywgY3dkPXNyY3N1YmRpcikKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRjaGRpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGNoZGlyKQorICAgICAgICAgICAgaWYgaGFzcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IGNoZWNrb3V0IHBhdGNoZXMnLCBjd2Q9c3Jjc3ViZGlyKQorCisgICAgICAgIHNodXRpbC5tb3ZlKHNyY3N1YmRpciwgc3JjdHJlZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBiYi5sb2dnZXIuc2V0TGV2ZWwob3JpZ2xldmVsKQorCisgICAgICAgIGlmIGtlZXBfdGVtcDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdQcmVzZXJ2aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXMnICUgdGVtcGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKyAgICByZXR1cm4gaW5pdGlhbF9yZXYKKworZGVmIF9hZGRfbWQ1KGNvbmZpZywgcmVjaXBlbmFtZSwgZmlsZW5hbWUpOgorICAgICIiIlJlY29yZCBjaGVja3N1bSBvZiBhIGZpbGUgKG9yIHJlY3Vyc2l2ZWx5IGZvciBhIGRpcmVjdG9yeSkgdG8gdGhlIG1kNS1maWxlIG9mIHRoZSB3b3Jrc3BhY2UiIiIKKyAgICBpbXBvcnQgYmIudXRpbHMKKworICAgIGRlZiBhZGRmaWxlKGZuKToKKyAgICAgICAgbWQ1ID0gYmIudXRpbHMubWQ1X2ZpbGUoZm4pCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnLmRldnRvb2xfbWQ1JyksICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJyVzfCVzfCVzXG4nICUgKHJlY2lwZW5hbWUsIG9zLnBhdGgucmVscGF0aChmbiwgY29uZmlnLndvcmtzcGFjZV9wYXRoKSwgbWQ1KSkKKworICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZW5hbWUpOgorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGFkZGZpbGUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgIGVsc2U6CisgICAgICAgIGFkZGZpbGUoZmlsZW5hbWUpCisKK2RlZiBfY2hlY2tfcHJlc2VydmUoY29uZmlnLCByZWNpcGVuYW1lKToKKyAgICAiIiJDaGVjayBpZiBhIGZpbGUgd2FzIG1hbnVhbGx5IGNoYW5nZWQgYW5kIG5lZWRzIHRvIGJlIHNhdmVkIGluICdhdHRpYycKKyAgICAgICBkaXJlY3RvcnkiIiIKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICBvcmlnZmlsZSA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICcuZGV2dG9vbF9tZDUnKQorICAgIG5ld2ZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnLmRldnRvb2xfbWQ1X25ldycpCisgICAgcHJlc2VydmVwYXRoID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2F0dGljJykKKyAgICB3aXRoIG9wZW4ob3JpZ2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgd2l0aCBvcGVuKG5ld2ZpbGUsICd3JykgYXMgdGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUucnN0cmlwKCkuc3BsaXQoJ3wnKQorICAgICAgICAgICAgICAgIGlmIHNwbGl0bGluZVswXSA9PSByZWNpcGVuYW1lOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgc3BsaXRsaW5lWzFdKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBtZDUgPSBiYi51dGlscy5tZDVfZmlsZShyZW1vdmVmaWxlKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbGUgbm8gbG9uZ2VyIGV4aXN0cywgc2tpcCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0bGluZVsyXSAhPSBtZDU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocHJlc2VydmVwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVmaWxlID0gb3MucGF0aC5iYXNlbmFtZShyZW1vdmVmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ZpbGUgJXMgbW9kaWZpZWQgc2luY2UgaXQgd2FzIHdyaXR0ZW4sIHByZXNlcnZpbmcgaW4gJXMnICUgKHByZXNlcnZlZmlsZSwgcHJlc2VydmVwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKHJlbW92ZWZpbGUsIG9zLnBhdGguam9pbihwcmVzZXJ2ZXBhdGgsIHByZXNlcnZlZmlsZSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocmVtb3ZlZmlsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShsaW5lKQorICAgIG9zLnJlbmFtZShuZXdmaWxlLCBvcmlnZmlsZSkKKworZGVmIG1vZGlmeShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnbW9kaWZ5JyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IGJiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBpZiBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpZiBub3QgYXJncy5leHRyYWN0IGFuZCBub3Qgb3MucGF0aC5pc2RpcihhcmdzLnNyY3RyZWUpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoImRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdCBvciBub3QgYSBkaXJlY3RvcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzcGVjaWZ5IC14IHRvIGV4dHJhY3Qgc291cmNlIGZyb20gcmVjaXBlKSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zcmN0cmVlKQorICAgIGlmIGFyZ3MuZXh0cmFjdDoKKyAgICAgICAgdGluZm9pbCA9IF9wcmVwX2V4dHJhY3Rfb3BlcmF0aW9uKGNvbmZpZywgYmFzZXBhdGgsIGFyZ3MucmVjaXBlbmFtZSkKKyAgICBlbHNlOgorICAgICAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisKKyAgICByZCA9IHBhcnNlX3JlY2lwZShjb25maWcsIHRpbmZvaWwsIGFyZ3MucmVjaXBlbmFtZSwgVHJ1ZSkKKyAgICBpZiBub3QgcmQ6CisgICAgICAgIHJldHVybiAxCisgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgYXBwZW5kbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSlbMF0KKyAgICBpZiBhcmdzLndpbGRjYXJkOgorICAgICAgICBhcHBlbmRuYW1lID0gcmUuc3ViKHInXy4qJywgJ18lJywgYXBwZW5kbmFtZSkKKyAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnKQorICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oYXBwZW5kcGF0aCwgYXBwZW5kbmFtZSArICcuYmJhcHBlbmQnKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGVuZGZpbGUpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkFub3RoZXIgdmFyaWFudCBvZiByZWNpcGUgJXMgaXMgYWxyZWFkeSBpbiB5b3VyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b3Jrc3BhY2UgKG9ubHkgb25lIHZhcmlhbnQgb2YgYSByZWNpcGUgY2FuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50bHkgYmUgd29ya2VkIG9uIGF0IG9uY2UpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBfY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUoYXJncy5yZWNpcGVuYW1lLCByZCkKKworICAgIGluaXRpYWxfcmV2ID0gTm9uZQorICAgIGNvbW1pdHMgPSBbXQorICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgIGlmIGFyZ3MuZXh0cmFjdDoKKyAgICAgICAgaW5pdGlhbF9yZXYgPSBfZXh0cmFjdF9zb3VyY2UoYXJncy5zcmN0cmVlLCBGYWxzZSwgYXJncy5icmFuY2gsIHJkKQorICAgICAgICBpZiBub3QgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCisgICAgICAgICMgR2V0IGxpc3Qgb2YgY29tbWl0cyBzaW5jZSB0aGlzIHJldmlzaW9uCisgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtbGlzdCAtLXJldmVyc2UgJXMuLkhFQUQnICUgaW5pdGlhbF9yZXYsIGN3ZD1hcmdzLnNyY3RyZWUpCisgICAgICAgIGNvbW1pdHMgPSBzdGRvdXQuc3BsaXQoKQorICAgIGVsc2U6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcmdzLnNyY3RyZWUsICcuZ2l0JykpOgorICAgICAgICAgICAgIyBDaGVjayBpZiBpdCdzIGEgdHJlZSBwcmV2aW91c2x5IGV4dHJhY3RlZCBieSB1cworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCBicmFuY2ggLS1jb250YWlucyBkZXZ0b29sLWJhc2UnLCBjd2Q9YXJncy5zcmN0cmVlKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3I6CisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gJycKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcqJyk6CisgICAgICAgICAgICAgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgZGV2dG9vbC1iYXNlJywgY3dkPWFyZ3Muc3JjdHJlZSkKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9yZXYgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBpbml0aWFsX3JldjoKKyAgICAgICAgICAgICAgICAjIE90aGVyd2lzZSwganVzdCBncmFiIHRoZSBoZWFkIHJldmlzaW9uCisgICAgICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPWFyZ3Muc3JjdHJlZSkKKyAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorCisgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpc24ndCB1c2luZyBhIHNoYXJlZCB3b3JrZGlyCisgICAgcyA9IG9zLnBhdGguYWJzcGF0aChyZC5nZXRWYXIoJ1MnLCBUcnVlKSkKKyAgICB3b3JrZGlyID0gb3MucGF0aC5hYnNwYXRoKHJkLmdldFZhcignV09SS0RJUicsIFRydWUpKQorICAgIGlmIHMuc3RhcnRzd2l0aCh3b3JrZGlyKSBhbmQgcyAhPSB3b3JrZGlyIGFuZCBvcy5wYXRoLmRpcm5hbWUocykgIT0gd29ya2RpcjoKKyAgICAgICAgIyBIYW5kbGUgaWYgUyBpcyBzZXQgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZQorICAgICAgICBzcmNzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgocywgd29ya2Rpcikuc3BsaXQob3Muc2VwLCAxKVsxXQorICAgICAgICBzcmN0cmVlID0gb3MucGF0aC5qb2luKHNyY3RyZWUsIHNyY3N1YmRpcikKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcHBlbmRwYXRoKToKKyAgICAgICAgb3MubWFrZWRpcnMoYXBwZW5kcGF0aCkKKyAgICB3aXRoIG9wZW4oYXBwZW5kZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCdGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG5cbicpCisgICAgICAgIGYud3JpdGUoJ2luaGVyaXQgZXh0ZXJuYWxzcmNcbicpCisgICAgICAgIGYud3JpdGUoJyMgTk9URTogV2UgdXNlIHBuLSBvdmVycmlkZXMgaGVyZSB0byBhdm9pZCBhZmZlY3RpbmcgbXVsdGlwbGUgdmFyaWFudHMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJlY2lwZSB1c2VzIEJCQ0xBU1NFWFRFTkRcbicpCisgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX3BuLSVzID0gIiVzIlxuJyAlIChhcmdzLnJlY2lwZW5hbWUsIHNyY3RyZWUpKQorCisgICAgICAgIGJfaXNfcyA9IFRydWUKKyAgICAgICAgaWYgYXJncy5ub19zYW1lX2RpcjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzZXBhcmF0ZSBidWlsZCBkaXJlY3Rvcnkgc2luY2UgLS1uby1zYW1lLWRpciBzcGVjaWZpZWQnKQorICAgICAgICAgICAgYl9pc19zID0gRmFsc2UKKyAgICAgICAgZWxpZiBhcmdzLnNhbWVfZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSAtLXNhbWUtZGlyIHNwZWNpZmllZCcpCisgICAgICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXV0b3Rvb2xzLWJyb2tlbnNlcCcsIHJkKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2Ugb3JpZ2luYWwgcmVjaXBlIGluaGVyaXRzIGF1dG90b29scy1icm9rZW5zZXAnKQorICAgICAgICBlbGlmIHJkLmdldFZhcignQicsIFRydWUpID09IHM6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIHRoYXQgaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgcmVjaXBlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJfaXNfcyA9IEZhbHNlCisgICAgICAgIGlmIGJfaXNfczoKKyAgICAgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX0JVSUxEX3BuLSVzID0gIiVzIlxuJyAlIChhcmdzLnJlY2lwZW5hbWUsIHNyY3RyZWUpKQorCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIHJkKToKKyAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1RSRUVDT1ZFUkVEVEFTS1MgPSAiZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NoZWNrb3V0IGRvX2ZldGNoIGRvX3VucGFjayJcbicpCisgICAgICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAgICAgZi53cml0ZSgnXG4jIGluaXRpYWxfcmV2OiAlc1xuJyAlIGluaXRpYWxfcmV2KQorICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgY29tbWl0OiAlc1xuJyAlIGNvbW1pdCkKKworICAgIF9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCBhcHBlbmRmaWxlKQorCisgICAgbG9nZ2VyLmluZm8oJ1JlY2lwZSAlcyBub3cgc2V0IHVwIHRvIGJ1aWxkIGZyb20gJXMnICUgKGFyZ3MucmVjaXBlbmFtZSwgc3JjdHJlZSkpCisKKyAgICByZXR1cm4gMAorCitkZWYgX2dldF9wYXRjaHNldF9yZXZzKGFyZ3MsIHNyY3RyZWUsIHJlY2lwZV9wYXRoKToKKyAgICAiIiJHZXQgaW5pdGlhbCBhbmQgdXBkYXRlIHJldiBvZiBhIHJlY2lwZS4gVGhlc2UgYXJlIHRoZSBzdGFydCBwb2ludCBvZiB0aGUKKyAgICB3aG9sZSBwYXRjaHNldCBhbmQgc3RhcnQgcG9pbnQgZm9yIHRoZSBwYXRjaGVzIHRvIGJlIHJlLWdlbmVyYXRlZC91cGRhdGVkLgorICAgICIiIgorICAgIGltcG9ydCBiYgorCisgICAgaWYgYXJncy5pbml0aWFsX3JldjoKKyAgICAgICAgcmV0dXJuIGFyZ3MuaW5pdGlhbF9yZXYsIGFyZ3MuaW5pdGlhbF9yZXYKKworICAgICMgUGFyc2UgaW5pdGlhbCByZXYgZnJvbSByZWNpcGUKKyAgICBjb21taXRzID0gW10KKyAgICBpbml0aWFsX3JldiA9IE5vbmUKKyAgICB3aXRoIG9wZW4ocmVjaXBlX3BhdGgsICdyJykgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIyBpbml0aWFsX3JldjonKToKKyAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgY29tbWl0OicpOgorICAgICAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKSkKKworICAgIHVwZGF0ZV9yZXYgPSBpbml0aWFsX3JldgorICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAjIEZpbmQgZmlyc3QgYWN0dWFsbHkgY2hhbmdlZCByZXZpc2lvbgorICAgICAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAlcy4uSEVBRCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX3JldiwgY3dkPXNyY3RyZWUpCisgICAgICAgIG5ld2NvbW1pdHMgPSBzdGRvdXQuc3BsaXQoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobWluKGxlbihjb21taXRzKSwgbGVuKG5ld2NvbW1pdHMpKSk6CisgICAgICAgICAgICBpZiBuZXdjb21taXRzW2ldID09IGNvbW1pdHNbaV06CisgICAgICAgICAgICAgICAgdXBkYXRlX3JldiA9IGNvbW1pdHNbaV0KKworICAgIHJldHVybiBpbml0aWFsX3JldiwgdXBkYXRlX3JldgorCitkZWYgX3JlbW92ZV9wYXRjaF9lbnRyaWVzKHNyY3VyaSwgcGF0Y2hsaXN0KToKKyAgICAiIiJSZW1vdmUgcGF0Y2ggZW50cmllcyBmcm9tIFNSQ19VUkkiIiIKKyAgICByZW1haW5pbmcgPSBwYXRjaGxpc3RbOl0KKyAgICBlbnRyaWVzID0gW10KKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hsaXN0OgorICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNyY3VyaSkpOgorICAgICAgICAgICAgaWYgc3JjdXJpW2ldLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgb3MucGF0aC5iYXNlbmFtZShzcmN1cmlbaV0uc3BsaXQoJzsnKVswXSkgPT0gcGF0Y2hmaWxlOgorICAgICAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKHNyY3VyaVtpXSkKKyAgICAgICAgICAgICAgICByZW1haW5pbmcucmVtb3ZlKHBhdGNoKQorICAgICAgICAgICAgICAgIHNyY3VyaS5wb3AoaSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBlbnRyaWVzLCByZW1haW5pbmcKKworZGVmIF9yZW1vdmVfcGF0Y2hfZmlsZXMoYXJncywgcGF0Y2hlcywgZGVzdHBhdGgpOgorICAgICIiIlVubGluayBleGlzdGluZyBwYXRjaCBmaWxlcyIiIgorICAgIGZvciBwYXRjaGZpbGUgaW4gcGF0Y2hlczoKKyAgICAgICAgaWYgYXJncy5hcHBlbmQ6CisgICAgICAgICAgICBpZiBub3QgZGVzdHBhdGg6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdkZXN0cGF0aCBzaG91bGQgYmUgc2V0IGhlcmUnKQorICAgICAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5qb2luKGRlc3RwYXRoLCBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoZmlsZSkpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdSZW1vdmluZyBwYXRjaCAlcycgJSBwYXRjaGZpbGUpCisgICAgICAgICAgICAjIEZJWE1FICJnaXQgcm0iIGhlcmUgd291bGQgYmUgbmljZSBpZiB0aGUgZmlsZSBpbiBxdWVzdGlvbiBpcworICAgICAgICAgICAgIyAgICAgICB0cmFja2VkCisgICAgICAgICAgICAjIEZJWE1FIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGlzIGZpbGUgaXMgcmVmZXJyZWQgdG8gYnkKKyAgICAgICAgICAgICMgICAgICAgYW5vdGhlciByZWNpcGUsIGluIHdoaWNoIGNhc2UgZGVsZXRpbmcgd291bGRuJ3QgYmUgdGhlCisgICAgICAgICAgICAjICAgICAgIHJpZ2h0IHRoaW5nIHRvIGRvCisgICAgICAgICAgICBvcy5yZW1vdmUocGF0Y2hmaWxlKQorICAgICAgICAgICAgIyBSZW1vdmUgZGlyZWN0b3J5IGlmIGVtcHR5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5kaXJuYW1lKHBhdGNoZmlsZSkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBvc2U6CisgICAgICAgICAgICAgICAgaWYgb3NlLmVycm5vICE9IGVycm5vLkVOT1RFTVBUWToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIF91cGRhdGVfcmVjaXBlX3NyY3JldihhcmdzLCBzcmN0cmVlLCByZCwgY29uZmlnX2RhdGEpOgorICAgICIiIkltcGxlbWVudCB0aGUgJ3NyY3JldicgbW9kZSBvZiB1cGRhdGUtcmVjaXBlIiIiCisgICAgaW1wb3J0IGJiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgZnJvbSBvZS5wYXRjaCBpbXBvcnQgR2l0QXBwbHlUcmVlCisKKyAgICByZWNpcGVmaWxlID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgU1JDUkVWIGluIHJlY2lwZSAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKQorCisgICAgIyBHZXQgSEVBRCByZXZpc2lvbgorICAgIHRyeToKKyAgICAgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdGYWlsZWQgdG8gZ2V0IEhFQUQgcmV2aXNpb24gaW4gJXM6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjdHJlZSwgZXJyKSkKKyAgICBzcmNyZXYgPSBzdGRvdXQuc3RyaXAoKQorICAgIGlmIGxlbihzcmNyZXYpICE9IDQwOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0ludmFsaWQgaGFzaCByZXR1cm5lZCBieSBnaXQ6ICVzJyAlIHN0ZG91dCkKKworICAgIGRlc3RwYXRoID0gTm9uZQorICAgIHJlbW92ZXBhdGNoZXMgPSBbXQorICAgIHBhdGNoZmllbGRzID0ge30KKyAgICBwYXRjaGZpZWxkc1snU1JDUkVWJ10gPSBzcmNyZXYKKyAgICBvcmlnX3NyY191cmkgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkgb3IgJycKKyAgICBpZiBub3QgYXJncy5ub19yZW1vdmU6CisgICAgICAgICMgRmluZCBsaXN0IG9mIGV4aXN0aW5nIHBhdGNoZXMgaW4gcmVjaXBlIGZpbGUKKyAgICAgICAgZXhpc3RpbmdfcGF0Y2hlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhyZCkKKworICAgICAgICBvbGRfc3JjcmV2ID0gKHJkLmdldFZhcignU1JDUkVWJywgRmFsc2UpIG9yICcnKQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBHaXRBcHBseVRyZWUuZXh0cmFjdFBhdGNoZXMoc3JjdHJlZSwgb2xkX3NyY3JldiwgdGVtcGRpcikKKyAgICAgICAgICAgIG5ld3BhdGNoZXMgPSBvcy5saXN0ZGlyKHRlbXBkaXIpCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gZXhpc3RpbmdfcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICAgICAgICAgIGlmIHBhdGNoZmlsZSBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVwYXRjaGVzLmFwcGVuZChwYXRjaCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKworICAgICAgICBpZiByZW1vdmVwYXRjaGVzOgorICAgICAgICAgICAgc3JjdXJpID0gb3JpZ19zcmNfdXJpLnNwbGl0KCkKKyAgICAgICAgICAgIHJlbW92ZWRlbnRyaWVzLCBfID0gX3JlbW92ZV9wYXRjaF9lbnRyaWVzKHNyY3VyaSwgcmVtb3ZlcGF0Y2hlcykKKyAgICAgICAgICAgIGlmIHJlbW92ZWRlbnRyaWVzOgorICAgICAgICAgICAgICAgIHBhdGNoZmllbGRzWydTUkNfVVJJJ10gPSAnICcuam9pbihzcmN1cmkpCisKKyAgICBpZiBhcmdzLmFwcGVuZDoKKyAgICAgICAgXywgZGVzdHBhdGggPSBvZS5yZWNpcGV1dGlscy5iYmFwcGVuZF9yZWNpcGUoCisgICAgICAgICAgICAgICAgcmQsIGFyZ3MuYXBwZW5kLCBOb25lLCB3aWxkY2FyZHZlcj1hcmdzLndpbGRjYXJkX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgZXh0cmFsaW5lcz1wYXRjaGZpZWxkcykKKyAgICBlbHNlOgorICAgICAgICBvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGUocmQsIHJlY2lwZWZpbGUsIHBhdGNoZmllbGRzKQorCisgICAgaWYgbm90ICdnaXQ6Ly8nIGluIG9yaWdfc3JjX3VyaToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1lvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIFNSQ19VUkkgd2l0aGluIHRoZSByZWNpcGUgdG8gJworICAgICAgICAgICAgICAgICAgICAncG9pbnQgdG8gYSBnaXQgcmVwb3NpdG9yeSB3aGVyZSB5b3UgaGF2ZSBwdXNoZWQgeW91ciAnCisgICAgICAgICAgICAgICAgICAgICdjaGFuZ2VzJykKKworICAgIF9yZW1vdmVfcGF0Y2hfZmlsZXMoYXJncywgcmVtb3ZlcGF0Y2hlcywgZGVzdHBhdGgpCisKK2RlZiBfdXBkYXRlX3JlY2lwZV9wYXRjaChhcmdzLCBjb25maWcsIHNyY3RyZWUsIHJkLCBjb25maWdfZGF0YSk6CisgICAgIiIiSW1wbGVtZW50IHRoZSAncGF0Y2gnIG1vZGUgb2YgdXBkYXRlLXJlY2lwZSIiIgorICAgIGltcG9ydCBiYgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIGZyb20gb2UucGF0Y2ggaW1wb3J0IEdpdEFwcGx5VHJlZQorCisgICAgcmVjaXBlZmlsZSA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgYXBwZW5kID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLCAnJXMuYmJhcHBlbmQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKVswXSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXBwZW5kKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCd1bmFibGUgdG8gZmluZCB3b3Jrc3BhY2UgYmJhcHBlbmQgZm9yIHJlY2lwZSAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaW5pdGlhbF9yZXYsIHVwZGF0ZV9yZXYgPSBfZ2V0X3BhdGNoc2V0X3JldnMoYXJncywgc3JjdHJlZSwgYXBwZW5kKQorICAgIGlmIG5vdCBpbml0aWFsX3JldjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdVbmFibGUgdG8gZmluZCBpbml0aWFsIHJldmlzaW9uIC0gcGxlYXNlIHNwZWNpZnkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0IHdpdGggLS1pbml0aWFsLXJldicpCisKKyAgICAjIEZpbmQgbGlzdCBvZiBleGlzdGluZyBwYXRjaGVzIGluIHJlY2lwZSBmaWxlCisgICAgZXhpc3RpbmdfcGF0Y2hlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhyZCkKKworICAgIHJlbW92ZXBhdGNoZXMgPSBbXQorICAgIHNlcXBhdGNoX3JlID0gcmUuY29tcGlsZSgnXihbMC05XXs0fS0pPyguKyknKQorICAgIGlmIG5vdCBhcmdzLm5vX3JlbW92ZToKKyAgICAgICAgIyBHZXQgYWxsIHBhdGNoZXMgZnJvbSBzb3VyY2UgdHJlZSBhbmQgY2hlY2sgaWYgYW55IHNob3VsZCBiZSByZW1vdmVkCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEdpdEFwcGx5VHJlZS5leHRyYWN0UGF0Y2hlcyhzcmN0cmVlLCBpbml0aWFsX3JldiwgdGVtcGRpcikKKyAgICAgICAgICAgICMgU3RyaXAgbnVtYmVyaW5nIGZyb20gcGF0Y2ggbmFtZXMuIElmIGl0J3MgYSBnaXQgc2VxdWVuY2UgbmFtZWQKKyAgICAgICAgICAgICMgcGF0Y2gsIHRoZSBudW1iZXJzIG1pZ2h0IG5vdCBtYXRjaCB1cCBzaW5jZSB3ZSBhcmUgc3RhcnRpbmcgZnJvbQorICAgICAgICAgICAgIyBhIGRpZmZlcmVudCByZXZpc2lvbiBUaGlzIGRvZXMgYXNzdW1lIHRoYXQgcGVvcGxlIGFyZSB1c2luZworICAgICAgICAgICAgIyB1bmlxdWUgc2hvcnRsb2cgdmFsdWVzLCBidXQgdGhleSBvdWdodCB0byBiZSBhbnl3YXkuLi4KKyAgICAgICAgICAgIG5ld3BhdGNoZXMgPSBbc2VxcGF0Y2hfcmUubWF0Y2goZm5hbWUpLmdyb3VwKDIpIGZvciBmbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saXN0ZGlyKHRlbXBkaXIpXQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBzZXFwYXRjaF9yZS5tYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkpLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgaWYgYmFzZW5hbWUgbm90IGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXBhdGNoZXMuYXBwZW5kKHBhdGNoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgIyBHZXQgdXBkYXRlZCBwYXRjaGVzIGZyb20gc291cmNlIHRyZWUKKyAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgIHRyeToKKyAgICAgICAgR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaGVzKHNyY3RyZWUsIHVwZGF0ZV9yZXYsIHRlbXBkaXIpCisKKyAgICAgICAgIyBNYXRjaCB1cCBhbmQgcmVwbGFjZSBleGlzdGluZyBwYXRjaGVzIHdpdGggY29ycmVzcG9uZGluZyBuZXcgcGF0Y2hlcworICAgICAgICB1cGRhdGVwYXRjaGVzID0gRmFsc2UKKyAgICAgICAgdXBkYXRlcmVjaXBlID0gRmFsc2UKKyAgICAgICAgZGVzdHBhdGggPSBOb25lCisgICAgICAgIG5ld3BhdGNoZXMgPSBvcy5saXN0ZGlyKHRlbXBkaXIpCisgICAgICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICAgICAgcGF0Y2hmaWxlcyA9IHt9CisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gZXhpc3RpbmdfcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICAgICAgICAgIGlmIHBhdGNoZmlsZSBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBwYXRjaGZpbGVzW29zLnBhdGguam9pbih0ZW1wZGlyLCBwYXRjaGZpbGUpXSA9IHBhdGNoZmlsZQorICAgICAgICAgICAgICAgICAgICBuZXdwYXRjaGVzLnJlbW92ZShwYXRjaGZpbGUpCisgICAgICAgICAgICBmb3IgcGF0Y2hmaWxlIGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlc1tvcy5wYXRoLmpvaW4odGVtcGRpciwgcGF0Y2hmaWxlKV0gPSBOb25lCisKKyAgICAgICAgICAgIGlmIHBhdGNoZmlsZXMgb3IgcmVtb3ZlcGF0Y2hlczoKKyAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXMgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlcGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgc3JjdXJpID0gKHJkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKSBvciAnJykuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkZW50cmllcywgcmVtYWluaW5nID0gX3JlbW92ZV9wYXRjaF9lbnRyaWVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3VyaSwgcmVtb3ZlcGF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZGVudHJpZXMgb3IgcmVtYWluaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gWydmaWxlOi8vJyArIG9zLnBhdGguYmFzZW5hbWUoaXRlbSkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSBpbiByZW1haW5pbmddCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXMgPSB7J1NSQ19VUkknOiByZW1vdmVkZW50cmllcyArIHJlbWFpbmluZ30KKyAgICAgICAgICAgICAgICBfLCBkZXN0cGF0aCA9IG9lLnJlY2lwZXV0aWxzLmJiYXBwZW5kX3JlY2lwZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmQsIGFyZ3MuYXBwZW5kLCBwYXRjaGZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmV2YWx1ZXM9cmVtb3ZldmFsdWVzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnTm8gcGF0Y2hlcyBuZWVkZWQgdXBkYXRpbmcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHBhdGNoIGluIGV4aXN0aW5nX3BhdGNoZXM6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWxlID0gb3MucGF0aC5iYXNlbmFtZShwYXRjaCkKKyAgICAgICAgICAgICAgICBpZiBwYXRjaGZpbGUgaW4gbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1VwZGF0aW5nIHBhdGNoICVzJyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsIHBhdGNoZmlsZSksIHBhdGNoKQorICAgICAgICAgICAgICAgICAgICBuZXdwYXRjaGVzLnJlbW92ZShwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXBhdGNoZXMgPSBUcnVlCisgICAgICAgICAgICBzcmN1cmkgPSAocmQuZ2V0VmFyKCdTUkNfVVJJJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICMgQWRkIGFueSBwYXRjaGVzIGxlZnQgb3ZlcgorICAgICAgICAgICAgICAgIHBhdGNoZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZC5nZXRWYXIoJ0JQTicsIFRydWUpKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwYXRjaGRpcikKKyAgICAgICAgICAgICAgICBmb3IgcGF0Y2hmaWxlIGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdBZGRpbmcgbmV3IHBhdGNoICVzJyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsIHBhdGNoZmlsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRjaGRpciwgcGF0Y2hmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgc3JjdXJpLmFwcGVuZCgnZmlsZTovLyVzJyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcmVjaXBlID0gVHJ1ZQorICAgICAgICAgICAgaWYgcmVtb3ZlcGF0Y2hlczoKKyAgICAgICAgICAgICAgICByZW1vdmVkZW50cmllcywgXyA9IF9yZW1vdmVfcGF0Y2hfZW50cmllcyhzcmN1cmksIHJlbW92ZXBhdGNoZXMpCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZGVudHJpZXM6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXJlY2lwZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHVwZGF0ZXJlY2lwZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgcmVjaXBlICVzJyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgICAgICAgICAgb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlKHJkLCByZWNpcGVmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J1NSQ19VUkknOiAnICcuam9pbihzcmN1cmkpfSkKKyAgICAgICAgICAgIGVsaWYgbm90IHVwZGF0ZXBhdGNoZXM6CisgICAgICAgICAgICAgICAgIyBOZWl0aGVyIHBhdGNoZXMgbm9yIHJlY2lwZSB3ZXJlIHVwZGF0ZWQKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnTm8gcGF0Y2hlcyBuZWVkIHVwZGF0aW5nJykKKyAgICBmaW5hbGx5OgorICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICBfcmVtb3ZlX3BhdGNoX2ZpbGVzKGFyZ3MsIHJlbW92ZXBhdGNoZXMsIGRlc3RwYXRoKQorCitkZWYgX2d1ZXNzX3JlY2lwZV91cGRhdGVfbW9kZShzcmN0cmVlLCByZGF0YSk6CisgICAgIiIiR3Vlc3MgdGhlIHJlY2lwZSB1cGRhdGUgbW9kZSB0byB1c2UiIiIKKyAgICBzcmNfdXJpID0gKHJkYXRhLmdldFZhcignU1JDX1VSSScsIEZhbHNlKSBvciAnJykuc3BsaXQoKQorICAgIGdpdF91cmlzID0gW3VyaSBmb3IgdXJpIGluIHNyY191cmkgaWYgdXJpLnN0YXJ0c3dpdGgoJ2dpdDovLycpXQorICAgIGlmIG5vdCBnaXRfdXJpczoKKyAgICAgICAgcmV0dXJuICdwYXRjaCcKKyAgICAjIEp1c3QgdXNlIHRoZSBmaXJzdCBVUkkgZm9yIG5vdworICAgIHVyaSA9IGdpdF91cmlzWzBdCisgICAgIyBDaGVjayByZW1vdGUgYnJhbmNoCisgICAgcGFyYW1zID0gYmIuZmV0Y2guZGVjb2RldXJsKHVyaSlbNV0KKyAgICB1cHN0cl9icmFuY2ggPSBwYXJhbXNbJ2JyYW5jaCddIGlmICdicmFuY2gnIGluIHBhcmFtcyBlbHNlICdtYXN0ZXInCisgICAgIyBDaGVjayBpZiBjdXJyZW50IGJyYW5jaCBIRUFEIGlzIGZvdW5kIGluIHVwc3RyZWFtIGJyYW5jaAorICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3JjdHJlZSkKKyAgICBoZWFkX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgYnJhbmNoIC1yIC0tY29udGFpbnMgJXMnICUgaGVhZF9yZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXNyY3RyZWUpCisgICAgcmVtb3RlX2JycyA9IFticmFuY2guc3RyaXAoKSBmb3IgYnJhbmNoIGluIHN0ZG91dC5zcGxpdGxpbmVzKCldCisgICAgaWYgJ29yaWdpbi8nICsgdXBzdHJfYnJhbmNoIGluIHJlbW90ZV9icnM6CisgICAgICAgIHJldHVybiAnc3JjcmV2JworCisgICAgcmV0dXJuICdwYXRjaCcKKworZGVmIHVwZGF0ZV9yZWNpcGUoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3VwZGF0ZS1yZWNpcGUnIHN1YmNvbW1hbmQiIiIKKyAgICBpZiBub3QgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJncy5hcHBlbmQpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdiYmFwcGVuZCBkZXN0aW5hdGlvbiBsYXllciBkaXJlY3RvcnkgIiVzIiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvZXMgbm90IGV4aXN0JyAlIGFyZ3MuYXBwZW5kKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFyZ3MuYXBwZW5kLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdjb25mL2xheWVyLmNvbmYgbm90IGZvdW5kIGluIGJiYXBwZW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzdGluYXRpb24gbGF5ZXIgIiVzIicgJSBhcmdzLmFwcGVuZCkKKworICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKworICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgIGlmIG5vdCByZDoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHNyY3RyZWUgPSB3b3Jrc3BhY2VbYXJncy5yZWNpcGVuYW1lXVsnc3JjdHJlZSddCisgICAgaWYgYXJncy5tb2RlID09ICdhdXRvJzoKKyAgICAgICAgbW9kZSA9IF9ndWVzc19yZWNpcGVfdXBkYXRlX21vZGUoc3JjdHJlZSwgcmQpCisgICAgZWxzZToKKyAgICAgICAgbW9kZSA9IGFyZ3MubW9kZQorCisgICAgaWYgbW9kZSA9PSAnc3JjcmV2JzoKKyAgICAgICAgX3VwZGF0ZV9yZWNpcGVfc3JjcmV2KGFyZ3MsIHNyY3RyZWUsIHJkLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgIGVsaWYgbW9kZSA9PSAncGF0Y2gnOgorICAgICAgICBfdXBkYXRlX3JlY2lwZV9wYXRjaChhcmdzLCBjb25maWcsIHNyY3RyZWUsIHJkLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigndXBkYXRlX3JlY2lwZTogaW52YWxpZCBtb2RlICVzJyAlIG1vZGUpCisKKyAgICByZiA9IHJkLmdldFZhcignRklMRScsIFRydWUpCisgICAgaWYgcmYuc3RhcnRzd2l0aChjb25maWcud29ya3NwYWNlX3BhdGgpOgorICAgICAgICBsb2dnZXIud2FybignUmVjaXBlIGZpbGUgJXMgaGFzIGJlZW4gdXBkYXRlZCBidXQgaXMgaW5zaWRlIHRoZSB3b3Jrc3BhY2UgLSB5b3Ugd2lsbCBuZWVkIHRvIG1vdmUgaXQgKGFuZCBhbnkgYXNzb2NpYXRlZCBmaWxlcyBuZXh0IHRvIGl0KSBvdXQgdG8gdGhlIGRlc2lyZWQgbGF5ZXIgYmVmb3JlIHVzaW5nICJkZXZ0b29sIHJlc2V0IiBpbiBvcmRlciB0byBrZWVwIGFueSBjaGFuZ2VzJyAlIHJmKQorCisgICAgcmV0dXJuIDAKKworCitkZWYgc3RhdHVzKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdzdGF0dXMnIHN1YmNvbW1hbmQiIiIKKyAgICBpZiB3b3Jrc3BhY2U6CisgICAgICAgIGZvciByZWNpcGUsIHZhbHVlIGluIHdvcmtzcGFjZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHByaW50KCIlczogJXMiICUgKHJlY2lwZSwgdmFsdWVbJ3NyY3RyZWUnXSkpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ05vIHJlY2lwZXMgY3VycmVudGx5IGluIHlvdXIgd29ya3NwYWNlIC0geW91IGNhbiB1c2UgImRldnRvb2wgbW9kaWZ5IiB0byB3b3JrIG9uIGFuIGV4aXN0aW5nIHJlY2lwZSBvciAiZGV2dG9vbCBhZGQiIHRvIGFkZCBhIG5ldyBvbmUnKQorICAgIHJldHVybiAwCisKKworZGVmIHJlc2V0KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdyZXNldCcgc3ViY29tbWFuZCIiIgorICAgIGltcG9ydCBiYgorICAgIGlmIGFyZ3MucmVjaXBlbmFtZToKKyAgICAgICAgaWYgYXJncy5hbGw6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlJlY2lwZSBjYW5ub3QgYmUgc3BlY2lmaWVkIGlmIC1hLy0tYWxsIGlzIHVzZWQiKQorICAgICAgICBlbGlmIG5vdCBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisgICAgZWxpZiBub3QgYXJncy5hbGw6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiUmVjaXBlIG11c3QgYmUgc3BlY2lmaWVkLCBvciBzcGVjaWZ5IC1hLy0tYWxsIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNldCBhbGwgcmVjaXBlcyIpCisgICAgaWYgYXJncy5hbGw6CisgICAgICAgIHJlY2lwZXMgPSB3b3Jrc3BhY2UKKyAgICBlbHNlOgorICAgICAgICByZWNpcGVzID0gW2FyZ3MucmVjaXBlbmFtZV0KKworICAgIGZvciBwbiBpbiByZWNpcGVzOgorICAgICAgICBpZiBub3QgYXJncy5ub19jbGVhbjoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdDbGVhbmluZyBzeXNyb290IGZvciByZWNpcGUgJXMuLi4nICUgcG4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwgJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgcG4pCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQ29tbWFuZCBcJyVzXCcgZmFpbGVkLCBvdXRwdXQ6XG4lc1xuSWYgeW91ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpc2gsIHlvdSBtYXkgc3BlY2lmeSAtbi8tLW5vLWNsZWFuIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXAgcnVubmluZyB0aGlzIGNvbW1hbmQgd2hlbiByZXNldHRpbmcnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQorCisgICAgICAgIF9jaGVja19wcmVzZXJ2ZShjb25maWcsIHBuKQorCisgICAgICAgIHByZXNlcnZlcGF0aCA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhdHRpYycsIHBuKQorICAgICAgICBkZWYgcHJlc2VydmVkaXIob3JpZ2Rpcik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcmlnZGlyKToKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvcmlnZGlyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1ByZXNlcnZpbmcgJXMgaW4gJXMnICUgKGZuLCBwcmVzZXJ2ZXBhdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHByZXNlcnZlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKG9zLnBhdGguam9pbihvcmlnZGlyLCBmbiksIG9zLnBhdGguam9pbihwcmVzZXJ2ZXBhdGgsIGZuKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRuIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4ocm9vdCwgZG4pKQorICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9yaWdkaXIpCisKKyAgICAgICAgcHJlc2VydmVkaXIob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ3JlY2lwZXMnLCBwbikpCisgICAgICAgICMgV2UgZG9uJ3QgYXV0b21hdGljYWxseSBjcmVhdGUgdGhpcyBkaXIgbmV4dCB0byBhcHBlbmRzLCBidXQgdGhlIHVzZXIgY2FuCisgICAgICAgIHByZXNlcnZlZGlyKG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdhcHBlbmRzJywgcG4pKQorCisgICAgcmV0dXJuIDAKKworCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoaXMgcGx1Z2luIiIiCisgICAgcGFyc2VyX2FkZCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYWRkJywgaGVscD0nQWRkIGEgbmV3IHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQWRkcyBhIG5ldyByZWNpcGUnKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBmb3IgbmV3IHJlY2lwZSB0byBhZGQnKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byBleHRlcm5hbCBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tc2FtZS1kaXInLCAnLXMnLCBoZWxwPSdCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UnLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlcl9hZGQuYWRkX2FyZ3VtZW50KCctLWZldGNoJywgJy1mJywgaGVscD0nRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkkgYW5kIGV4dHJhY3QgaXQgdG8gY3JlYXRlIHRoZSBzb3VyY2UgdHJlZScsIG1ldGF2YXI9J1VSSScpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tdmVyc2lvbicsICctVicsIGhlbHA9J1ZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKScpCisgICAgcGFyc2VyX2FkZC5zZXRfZGVmYXVsdHMoZnVuYz1hZGQpCisKKyAgICBwYXJzZXJfbW9kaWZ5ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdtb2RpZnknLCBoZWxwPSdNb2RpZnkgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdFbmFibGVzIG1vZGlmeWluZyB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nTmFtZSBmb3IgcmVjaXBlIHRvIGVkaXQnKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byBleHRlcm5hbCBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX21vZGlmeS5hZGRfYXJndW1lbnQoJy0td2lsZGNhcmQnLCAnLXcnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdVc2Ugd2lsZGNhcmQgZm9yIHVudmVyc2lvbmVkIGJiYXBwZW5kJykKKyAgICBwYXJzZXJfbW9kaWZ5LmFkZF9hcmd1bWVudCgnLS1leHRyYWN0JywgJy14JywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRXh0cmFjdCBzb3VyY2UgYXMgd2VsbCcpCisgICAgZ3JvdXAgPSBwYXJzZXJfbW9kaWZ5LmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zYW1lLWRpcicsICctcycsIGhlbHA9J0J1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLW5vLXNhbWUtZGlyJywgaGVscD0nRm9yY2UgYnVpbGQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnknLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQgKG9ubHkgd2hlbiB1c2luZyAteCknKQorICAgIHBhcnNlcl9tb2RpZnkuc2V0X2RlZmF1bHRzKGZ1bmM9bW9kaWZ5KQorCisgICAgcGFyc2VyX2V4dHJhY3QgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2V4dHJhY3QnLCBoZWxwPSdFeHRyYWN0IHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nRXh0cmFjdHMgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXJfZXh0cmFjdC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIGZvciByZWNpcGUgdG8gZXh0cmFjdCB0aGUgc291cmNlIGZvcicpCisgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byB3aGVyZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBkZXZlbG9wbWVudCBicmFuY2ggdG8gY2hlY2tvdXQnKQorICAgIHBhcnNlcl9leHRyYWN0LmFkZF9hcmd1bWVudCgnLS1rZWVwLXRlbXAnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdLZWVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgKGZvciBkZWJ1Z2dpbmcpJykKKyAgICBwYXJzZXJfZXh0cmFjdC5zZXRfZGVmYXVsdHMoZnVuYz1leHRyYWN0KQorCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3VwZGF0ZS1yZWNpcGUnLCBoZWxwPSdBcHBseSBjaGFuZ2VzIGZyb20gZXh0ZXJuYWwgc291cmNlIHRyZWUgdG8gcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdBcHBsaWVzIGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgdHJlZSB0byBhIHJlY2lwZSAodXBkYXRpbmcvYWRkaW5nL3JlbW92aW5nIHBhdGNoZXMgYXMgbmVjZXNzYXJ5LCBvciBieSB1cGRhdGluZyBTUkNSRVYpJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIG9mIHJlY2lwZSB0byB1cGRhdGUnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1tb2RlJywgJy1tJywgY2hvaWNlcz1bJ3BhdGNoJywgJ3NyY3JldicsICdhdXRvJ10sIGRlZmF1bHQ9J2F1dG8nLCBoZWxwPSdVcGRhdGUgbW9kZSAod2hlcmUgJShtZXRhdmFyKXMgaXMgJShjaG9pY2VzKXM7IGRlZmF1bHQgaXMgJShkZWZhdWx0KXMpJywgbWV0YXZhcj0nTU9ERScpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCctLWluaXRpYWwtcmV2JywgaGVscD0nU3RhcnRpbmcgcmV2aXNpb24gZm9yIHBhdGNoZXMnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1hcHBlbmQnLCAnLWEnLCBoZWxwPSdXcml0ZSBjaGFuZ2VzIHRvIGEgYmJhcHBlbmQgaW4gdGhlIHNwZWNpZmllZCBsYXllciBpbnN0ZWFkIG9mIHRoZSByZWNpcGUnLCBtZXRhdmFyPSdMQVlFUkRJUicpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCctLXdpbGRjYXJkLXZlcnNpb24nLCAnLXcnLCBoZWxwPSdJbiBjb25qdW5jdGlvbiB3aXRoIC1hLy0tYXBwZW5kLCB1c2UgYSB3aWxkY2FyZCB0byBtYWtlIHRoZSBiYmFwcGVuZCBhcHBseSB0byBhbnkgcmVjaXBlIHZlcnNpb24nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgnLS1uby1yZW1vdmUnLCAnLW4nLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdEb25cJ3QgcmVtb3ZlIHBhdGNoZXMsIG9ubHkgYWRkIG9yIHVwZGF0ZScpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuc2V0X2RlZmF1bHRzKGZ1bmM9dXBkYXRlX3JlY2lwZSkKKworICAgIHBhcnNlcl9zdGF0dXMgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3N0YXR1cycsIGhlbHA9J1Nob3cgd29ya3NwYWNlIHN0YXR1cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nTGlzdHMgcmVjaXBlcyBjdXJyZW50bHkgaW4geW91ciB3b3Jrc3BhY2UgYW5kIHRoZSBwYXRocyB0byB0aGVpciByZXNwZWN0aXZlIGV4dGVybmFsIHNvdXJjZSB0cmVlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICAgcGFyc2VyX3N0YXR1cy5zZXRfZGVmYXVsdHMoZnVuYz1zdGF0dXMpCisKKyAgICBwYXJzZXJfcmVzZXQgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3Jlc2V0JywgaGVscD0nUmVtb3ZlIGEgcmVjaXBlIGZyb20geW91ciB3b3Jrc3BhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHJlY2lwZSBmcm9tIHlvdXIgd29ya3NwYWNlIChyZXNldHRpbmcgaXRzIHN0YXRlKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXJfcmVzZXQuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgbmFyZ3M9Jz8nLCBoZWxwPSdSZWNpcGUgdG8gcmVzZXQnKQorICAgIHBhcnNlcl9yZXNldC5hZGRfYXJndW1lbnQoJy0tYWxsJywgJy1hJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nUmVzZXQgYWxsIHJlY2lwZXMgKGNsZWFyIHdvcmtzcGFjZSknKQorICAgIHBhcnNlcl9yZXNldC5hZGRfYXJndW1lbnQoJy0tbm8tY2xlYW4nLCAnLW4nLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdEb25cJ3QgY2xlYW4gdGhlIHN5c3Jvb3QgdG8gcmVtb3ZlIHJlY2lwZSBvdXRwdXQnKQorICAgIHBhcnNlcl9yZXNldC5zZXRfZGVmYXVsdHMoZnVuYz1yZXNldCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9kZXZ0b29sL3VwZ3JhZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0NDNiMAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5CkBAIC0wLDAgKzEsMzU0IEBACisjIERldmVsb3BtZW50IHRvb2wgLSB1cGdyYWRlIGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIiIiRGV2dG9vbCB1cGdyYWRlIHBsdWdpbiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBlcnJubworaW1wb3J0IGJiCitpbXBvcnQgb2UucmVjaXBldXRpbHMKK2Zyb20gZGV2dG9vbCBpbXBvcnQgc3RhbmRhcmQKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgRGV2dG9vbEVycm9yLCBwYXJzZV9yZWNpcGUKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIiIiUGx1Z2luIGluaXRpYWxpemF0aW9uIiIiCisgICAgcGFzcworCitkZWYgX3J1bihjbWQsIGN3ZD0nJyk6CisgICAgbG9nZ2VyLmRlYnVnKCJSdW5uaW5nIGNvbW1hbmQgJXM+ICVzIiAlIChjd2QsY21kKSkKKyAgICByZXR1cm4gYmIucHJvY2Vzcy5ydW4oJyVzJyAlIGNtZCwgY3dkPWN3ZCkKKworZGVmIF9nZXRfc3JjdHJlZSh0bXBkaXIpOgorICAgIHNyY3RyZWUgPSB0bXBkaXIKKyAgICBkaXJzID0gb3MubGlzdGRpcih0bXBkaXIpCisgICAgaWYgbGVuKGRpcnMpID09IDE6CisgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBkaXJzWzBdKQorICAgIHJldHVybiBzcmN0cmVlCisKK2RlZiBfY29weV9zb3VyY2VfY29kZShvcmlnLCBkZXN0KToKKyAgICBmb3IgcGF0aCBpbiBzdGFuZGFyZC5fbHNfdHJlZShvcmlnKToKKyAgICAgICAgZGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGVzdCwgb3MucGF0aC5kaXJuYW1lKHBhdGgpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdF9kaXIpCisgICAgICAgIGRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihkZXN0LCBwYXRoKQorICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKG9yaWcsIHBhdGgpLCBkZXN0X3BhdGgpCisKK2RlZiBfZ2V0X2NoZWNrc3VtcyhyZik6CisgICAgaW1wb3J0IHJlCisgICAgY2hlY2tzdW1zID0ge30KKyAgICB3aXRoIG9wZW4ocmYpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBmb3IgY3MgaW4gWydtZDVzdW0nLCAnc2hhMjU2c3VtJ106CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeU1JDX1VSSVxbJXNcXS4qPS4qXCIoLiopXCIiICUgY3MsIGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1zW2NzXSA9IG0uZ3JvdXAoMSkKKyAgICByZXR1cm4gY2hlY2tzdW1zCisKK2RlZiBfcmVwbGFjZV9jaGVja3N1bXMocmYsIG1kNSwgc2hhMjU2KToKKyAgICBpZiBub3QgbWQ1IGFuZCBub3Qgc2hhMjU2OgorICAgICAgICByZXR1cm4KKyAgICBjaGVja3N1bXMgPSB7J21kNXN1bSc6bWQ1LCAnc2hhMjU2c3VtJzpzaGEyNTZ9CisgICAgd2l0aCBvcGVuKHJmICsgIi50bXAiLCAidysiKSBhcyB0bXByZjoKKyAgICAgICAgd2l0aCBvcGVuKHJmKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBtID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBjcyBpbiBjaGVja3N1bXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl5TUkNfVVJJXFslc1xdLio9LipcIiguKilcIiIgJSBjcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoZWNrc3Vtc1tjc106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkY2hlY2sgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Y2hlY2sgPSBjaGVja3N1bXNbY3NdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShvbGRjaGVjaywgbmV3Y2hlY2spCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRtcHJmLndyaXRlKGxpbmUpCisgICAgb3MucmVuYW1lKHJmICsgIi50bXAiLCByZikKKworCitkZWYgX3JlbW92ZV9wYXRjaF9kaXJzKHJlY2lwZWZvbGRlcik6CisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocmVjaXBlZm9sZGVyKToKKyAgICAgICAgZm9yIGQgaW4gZGlyczoKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKHJvb3QsZCkpCisKK2RlZiBfcmVjaXBlX2NvbnRhaW5zKHJmLCB2YXIpOgorICAgIGltcG9ydCByZQorICAgIGZvdW5kID0gRmFsc2UKKyAgICB3aXRoIG9wZW4ocmYpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiByZS5tYXRjaCgiXiVzLio9LioiICUgdmFyLCBsaW5lKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBmb3VuZAorCitkZWYgX3JlbmFtZV9yZWNpcGVfZGlycyhvbGRwdiwgbmV3cHYsIHBhdGgpOgorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICBmb3Igb2xkZGlyIGluIGRpcnM6CisgICAgICAgICAgICBpZiBvbGRkaXIuZmluZChvbGRwdikgIT0gLTE6CisgICAgICAgICAgICAgICAgbmV3ZGlyID0gb2xkZGlyLnJlcGxhY2Uob2xkcHYsIG5ld3B2KQorICAgICAgICAgICAgICAgIGlmIG9sZGRpciAhPSBuZXdkaXI6CisgICAgICAgICAgICAgICAgICAgIF9ydW4oJ212ICVzICVzJyAlIChvbGRkaXIsIG5ld2RpcikpCisKK2RlZiBfcmVuYW1lX3JlY2lwZV9maWxlKGJwbiwgb2xkcHYsIG5ld3B2LCBwYXRoKToKKyAgICBvbGRyZWNpcGUgPSAiJXNfJXMuYmIiICUgKGJwbiwgb2xkcHYpCisgICAgbmV3cmVjaXBlID0gIiVzXyVzLmJiIiAlIChicG4sIG5ld3B2KQorICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCBvbGRyZWNpcGUpKToKKyAgICAgICAgaWYgb2xkcmVjaXBlICE9IG5ld3JlY2lwZToKKyAgICAgICAgICAgIF9ydW4oJ212ICVzICVzJyAlIChvbGRyZWNpcGUsIG5ld3JlY2lwZSksIGN3ZD1wYXRoKQorICAgIGVsc2U6CisgICAgICAgIHJlY2lwZSA9ICIlc19naXQuYmIiICUgYnBuCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCByZWNpcGUpKToKKyAgICAgICAgICAgIG5ld3JlY2lwZSA9IHJlY2lwZQorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJPcmlnaW5hbCByZWNpcGUgbm90IGZvdW5kIG9uIHdvcmtzcGFjZSIpCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCBuZXdyZWNpcGUpCisKK2RlZiBfcmVuYW1lX3JlY2lwZV9maWxlcyhicG4sIG9sZHB2LCBuZXdwdiwgcGF0aCk6CisgICAgX3JlbmFtZV9yZWNpcGVfZGlycyhvbGRwdiwgbmV3cHYsIHBhdGgpCisgICAgcmV0dXJuIF9yZW5hbWVfcmVjaXBlX2ZpbGUoYnBuLCBvbGRwdiwgbmV3cHYsIHBhdGgpCisKK2RlZiBfdXNlX2V4dGVybmFsX2J1aWxkKHNhbWVfZGlyLCBub19zYW1lX2RpciwgZCk6CisgICAgYl9pc19zID0gVHJ1ZQorICAgIGlmIG5vX3NhbWVfZGlyOgorICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIC0tbm8tc2FtZS1kaXIgc3BlY2lmaWVkJykKKyAgICAgICAgYl9pc19zID0gRmFsc2UKKyAgICBlbGlmIHNhbWVfZGlyOgorICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIC0tc2FtZS1kaXIgc3BlY2lmaWVkJykKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2F1dG90b29scy1icm9rZW5zZXAnLCBkKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSBvcmlnaW5hbCByZWNpcGUgaW5oZXJpdHMgYXV0b3Rvb2xzLWJyb2tlbnNlcCcpCisgICAgZWxpZiBkLmdldFZhcignQicsIFRydWUpID09IG9zLnBhdGguYWJzcGF0aChkLmdldFZhcignUycsIFRydWUpKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZScpCisgICAgZWxzZToKKyAgICAgICAgYl9pc19zID0gRmFsc2UKKyAgICByZXR1cm4gYl9pc19zCisKK2RlZiBfd3JpdGVfYXBwZW5kKHJjLCBzcmN0cmVlLCBzYW1lX2Rpciwgbm9fc2FtZV9kaXIsIHJldiwgd29ya3NwYWNlLCBkKToKKyAgICAiIiJXcml0ZXMgYW4gYXBwZW5kIGZpbGUiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmMpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoImJiYXBwZW5kIG5vdCBjcmVhdGVkIGJlY2F1c2UgJXMgZG9lcyBub3QgZXhpc3QiICUgcmMpCisKKyAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKHdvcmtzcGFjZSwgJ2FwcGVuZHMnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcHBlbmRwYXRoKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGFwcGVuZHBhdGgpCisKKyAgICBicmYgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguc3BsaXRleHQocmMpWzBdKSAjIHJjIGJhc2VuYW1lCisKKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKHNyY3RyZWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLFRydWUpCisgICAgYWYgPSBvcy5wYXRoLmpvaW4oYXBwZW5kcGF0aCwgJyVzLmJiYXBwZW5kJyAlIGJyZikKKyAgICB3aXRoIG9wZW4oYWYsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuXG4nKQorICAgICAgICBmLndyaXRlKCdpbmhlcml0IGV4dGVybmFsc3JjXG4nKQorICAgICAgICBmLndyaXRlKCgnIyBOT1RFOiBXZSB1c2UgcG4tIG92ZXJyaWRlcyBoZXJlIHRvIGF2b2lkIGFmZmVjdGluZycKKyAgICAgICAgICAgICAgICAgJ211bHRpcGxlIHZhcmlhbnRzIGluIHRoZSBjYXNlIHdoZXJlIHRoZSByZWNpcGUgdXNlcyBCQkNMQVNTRVhURU5EXG4nKSkKKyAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKKyAgICAgICAgaWYgX3VzZV9leHRlcm5hbF9idWlsZChzYW1lX2Rpciwgbm9fc2FtZV9kaXIsIGQpOgorICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTERfcG4tJXMgPSAiJXMiXG4nICUgKHBuLCBzcmN0cmVlKSkKKyAgICAgICAgaWYgcmV2OgorICAgICAgICAgICAgZi53cml0ZSgnXG4jIGluaXRpYWxfcmV2OiAlc1xuJyAlIHJldikKKyAgICByZXR1cm4gYWYKKworZGVmIF9jbGVhbnVwX29uX2Vycm9yKHJmLCBzcmN0cmVlKToKKyAgICByZnAgPSBvcy5wYXRoLnNwbGl0KHJmKVswXSAjIHJlY2lwZSBmb2xkZXIKKyAgICByZnBwID0gb3MucGF0aC5zcGxpdChyZnApWzBdICMgcmVjaXBlcyBmb2xkZXIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZnApOgorICAgICAgICBzaHV0aWwucm10cmVlKGIpCisgICAgaWYgbm90IGxlbihvcy5saXN0ZGlyKHJmcHApKToKKyAgICAgICAgb3Mucm1kaXIocmZwcCkKKyAgICBzcmN0cmVlID0gb3MucGF0aC5hYnNwYXRoKHNyY3RyZWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjdHJlZSk6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc3JjdHJlZSkKKworZGVmIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBzcmN0cmVlKToKKyAgICBpZiByZjoKKyAgICAgICAgY2xlYW51cF9vbl9lcnJvcihyZiwgc3JjdHJlZSkKKyAgICBsb2dnZXIuZXJyb3IoZSkKKyAgICByYWlzZSBEZXZ0b29sRXJyb3IoZSkKKworZGVmIF9nZXRfdXJpKHJkKToKKyAgICBzcmN1cmlzID0gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKQorICAgIGlmIG5vdCBsZW4oc3JjdXJpcyk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignU1JDX1VSSSBub3QgZm91bmQgb24gcmVjaXBlJykKKyAgICBzcmN1cmkgPSBzcmN1cmlzWzBdICMgaXQgaXMgYXNzdW1lZCwgVVJJIGlzIGF0IGZpcnN0IHBvc2l0aW9uCisgICAgc3JjcmV2ID0gJyR7QVVUT1JFVn0nCisgICAgaWYgJzovLycgaW4gc3JjdXJpOgorICAgICAgICAjIEZldGNoIGEgVVJMCisgICAgICAgIHJldl9yZSA9IHJlLmNvbXBpbGUoJztyZXY9KFteO10rKScpCisgICAgICAgIHJlcyA9IHJldl9yZS5zZWFyY2goc3JjdXJpKQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBzcmNyZXYgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgIHNyY3VyaSA9IHJldl9yZS5zdWIoJycsIHNyY3VyaSkKKyAgICByZXR1cm4gc3JjdXJpLCBzcmNyZXYKKworZGVmIF9leHRyYWN0X25ld19zb3VyY2UobmV3cHYsIHNyY3RyZWUsIG5vX3BhdGNoLCBzcmNyZXYsIGJyYW5jaCwga2VlcF90ZW1wLCB0aW5mb2lsLCByZCk6CisgICAgIiIiRXh0cmFjdCBzb3VyY2VzIG9mIGEgcmVjaXBlIHdpdGggYSBuZXcgdmVyc2lvbiIiIgorCisgICAgZGVmIF9fcnVuKGNtZCk6CisgICAgICAgICIiIlNpbXBsZSB3cmFwcGVyIHdoaWNoIGNhbGxzIF9ydW4gd2l0aCBzcmN0cmVlIGFzIGN3ZCIiIgorICAgICAgICByZXR1cm4gX3J1bihjbWQsIHNyY3RyZWUpCisKKyAgICBjcmQgPSByZC5jcmVhdGVDb3B5KCkKKworICAgIHB2ID0gY3JkLmdldFZhcignUFYnLCBUcnVlKQorICAgIGNyZC5zZXRWYXIoJ1BWJywgbmV3cHYpCisKKyAgICB0bXBzcmN0cmVlID0gTm9uZQorICAgIHVyaSwgcmV2ID0gX2dldF91cmkoY3JkKQorICAgIGlmIHNyY3JldjoKKyAgICAgICAgcmV2ID0gc3JjcmV2CisgICAgaWYgdXJpLnN0YXJ0c3dpdGgoJ2dpdDovLycpOgorICAgICAgICBfX3J1bignZ2l0IGNoZWNrb3V0ICVzJyAlIHJldikKKyAgICAgICAgX19ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1iYXNlLW5ldycpCisgICAgICAgIG1kNSA9IE5vbmUKKyAgICAgICAgc2hhMjU2ID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIF9fcnVuKCdnaXQgY2hlY2tvdXQgLWIgZGV2dG9vbC0lcycgJSBuZXdwdikKKworICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1kNSwgc2hhMjU2ID0gc2NyaXB0dXRpbHMuZmV0Y2hfdXJpKHRpbmZvaWwuY29uZmlnX2RhdGEsIHVyaSwgdG1wZGlyLCByZXYpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKGUpCisKKyAgICAgICAgdG1wc3JjdHJlZSA9IF9nZXRfc3JjdHJlZSh0bXBkaXIpCisKKyAgICAgICAgc2NydHJlZSA9IG9zLnBhdGguYWJzcGF0aChzcmN0cmVlKQorCisgICAgICAgIF9jb3B5X3NvdXJjZV9jb2RlKHRtcHNyY3RyZWUsIHNyY3RyZWUpCisKKyAgICAgICAgKHN0ZG91dCxfKSA9IF9fcnVuKCdnaXQgbHMtZmlsZXMgLS1tb2RpZmllZCAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQnKQorICAgICAgICBmb3IgZiBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgX19ydW4oJ2dpdCBhZGQgIiVzIicgJSBmKQorCisgICAgICAgIF9fcnVuKCdnaXQgY29tbWl0IC1xIC1tICJDb21taXQgb2YgdXBzdHJlYW0gY2hhbmdlcyBhdCB2ZXJzaW9uICVzIiAtLWFsbG93LWVtcHR5JyAlIG5ld3B2KQorICAgICAgICBfX3J1bignZ2l0IHRhZyAtZiBkZXZ0b29sLWJhc2UtJXMnICUgbmV3cHYpCisKKyAgICAoc3Rkb3V0LCBfKSA9IF9fcnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnKQorICAgIHJldiA9IHN0ZG91dC5yc3RyaXAoKQorCisgICAgaWYgbm9fcGF0Y2g6CisgICAgICAgIHBhdGNoZXMgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZXMoY3JkKQorICAgICAgICBpZiBsZW4ocGF0Y2hlcyk6CisgICAgICAgICAgICBsb2dnZXIud2FybignQnkgdXNlciBjaG9pY2UsIHRoZSBmb2xsb3dpbmcgcGF0Y2hlcyB3aWxsIE5PVCBiZSBhcHBsaWVkJykKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCIlcyIgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSkKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfX3J1bignZ2l0IGNoZWNrb3V0IGRldnRvb2wtcGF0Y2hlZCAtYiAlcycgJSBicmFuY2gpCisgICAgICAgICAgICBfX3J1bignZ2l0IHJlYmFzZSAlcycgJSByZXYpCisgICAgICAgICAgICBpZiB1cmkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICAgICAgc3VmZml4ID0gJ25ldycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VmZml4ID0gbmV3cHYKKyAgICAgICAgICAgIF9fcnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtcGF0Y2hlZC0lcycgJSBzdWZmaXgpCisgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIud2FybignQ29tbWFuZCBcJyVzXCcgZmFpbGVkOlxuJXMnICUgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQorCisgICAgaWYgdG1wc3JjdHJlZToKKyAgICAgICAgaWYga2VlcF90ZW1wOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1ByZXNlcnZpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlcycgJSB0bXBzcmN0cmVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0bXBzcmN0cmVlKQorCisgICAgcmV0dXJuIChyZXYsIG1kNSwgc2hhMjU2KQorCitkZWYgX2NyZWF0ZV9uZXdfcmVjaXBlKG5ld3B2LCBtZDUsIHNoYTI1Niwgd29ya3NwYWNlLCByZCk6CisgICAgIiIiQ3JlYXRlcyB0aGUgbmV3IHJlY2lwZSB1bmRlciB3b3Jrc3BhY2UiIiIKKyAgICBjcmQgPSByZC5jcmVhdGVDb3B5KCkKKworICAgIGJwbiA9IGNyZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgcGF0aCA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2UsICdyZWNpcGVzJywgYnBuKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihwYXRoKQorICAgIG9lLnJlY2lwZXV0aWxzLmNvcHlfcmVjaXBlX2ZpbGVzKGNyZCwgcGF0aCkKKworICAgIG9sZHB2ID0gY3JkLmdldFZhcignUFYnLCBUcnVlKQorICAgIGlmIG5vdCBuZXdwdjoKKyAgICAgICAgbmV3cHYgPSBvbGRwdgorICAgIGZ1bGxwYXRoID0gX3JlbmFtZV9yZWNpcGVfZmlsZXMoYnBuLCBvbGRwdiwgbmV3cHYsIHBhdGgpCisKKyAgICBpZiBfcmVjaXBlX2NvbnRhaW5zKGZ1bGxwYXRoLCAnUFYnKSBhbmQgbmV3cHYgIT0gb2xkcHY6CisgICAgICAgIG9lLnJlY2lwZXV0aWxzLnBhdGNoX3JlY2lwZShkLCBmdWxscGF0aCwgeydQVic6bmV3cHZ9KQorCisgICAgaWYgbWQ1IGFuZCBzaGEyNTY6CisgICAgICAgICMgVW5mb3J0dW5hdGVseSwgb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlIGNhbm5vdCB1cGRhdGUgZmxhZ3MuCisgICAgICAgICMgb25jZSB0aGUgbGF0dGVyIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQsIHdlIHNob3VsZCBjYWxsIHBhdGNoX3JlY2lwZQorICAgICAgICAjIGluc3RlYWQgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbgorICAgICAgICBfcmVwbGFjZV9jaGVja3N1bXMoZnVsbHBhdGgsIG1kNSwgc2hhMjU2KQorCisgICAgcmV0dXJuIGZ1bGxwYXRoCisKK2RlZiB1cGdyYWRlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICd1cGdyYWRlJyBzdWJjb21tYW5kIiIiCisKKyAgICBpZiBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlIGFyZ3MucmVjaXBlbmFtZSkKKyAgICBpZiBub3QgYXJncy52ZXJzaW9uIGFuZCBub3QgYXJncy5zcmNyZXY6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiWW91IG11c3QgcHJvdmlkZSBhIHZlcnNpb24gdXNpbmcgdGhlIC0tdmVyc2lvbi8tViBvcHRpb24sIG9yIGZvciByZWNpcGVzIHRoYXQgZmV0Y2ggZnJvbSBhbiBTQ00gc3VjaCBhcyBnaXQsIHRoZSAtLXNyY3Jldi8tUyBvcHRpb24iKQorCisgICAgcmVhc29uID0gb2UucmVjaXBldXRpbHMudmFsaWRhdGVfcG4oYXJncy5yZWNpcGVuYW1lKQorICAgIGlmIHJlYXNvbjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKHJlYXNvbikKKworICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKworICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgIGlmIG5vdCByZDoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHN0YW5kYXJkLl9jaGVja19jb21wYXRpYmxlX3JlY2lwZShhcmdzLnJlY2lwZW5hbWUsIHJkKQorICAgIGlmIHJkLmdldFZhcignUFYnLCBUcnVlKSA9PSBhcmdzLnZlcnNpb24gYW5kIHJkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkgPT0gYXJncy5zcmNyZXY6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQ3VycmVudCBhbmQgdXBncmFkZSB2ZXJzaW9ucyBhcmUgdGhlIHNhbWUgdmVyc2lvbiIgJSB2ZXJzaW9uKQorCisgICAgcmYgPSBOb25lCisgICAgdHJ5OgorICAgICAgICByZXYxID0gc3RhbmRhcmQuX2V4dHJhY3Rfc291cmNlKGFyZ3Muc3JjdHJlZSwgRmFsc2UsICdkZXZ0b29sLW9yaWcnLCByZCkKKyAgICAgICAgcmV2MiwgbWQ1LCBzaGEyNTYgPSBfZXh0cmFjdF9uZXdfc291cmNlKGFyZ3MudmVyc2lvbiwgYXJncy5zcmN0cmVlLCBhcmdzLm5vX3BhdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5zcmNyZXYsIGFyZ3MuYnJhbmNoLCBhcmdzLmtlZXBfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwsIHJkKQorICAgICAgICByZiA9IF9jcmVhdGVfbmV3X3JlY2lwZShhcmdzLnZlcnNpb24sIG1kNSwgc2hhMjU2LCBjb25maWcud29ya3NwYWNlX3BhdGgsIHJkKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGU6CisgICAgICAgIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBhcmdzLnNyY3RyZWUpCisgICAgZXhjZXB0IERldnRvb2xFcnJvciBhcyBlOgorICAgICAgICBfdXBncmFkZV9lcnJvcihlLCByZiwgYXJncy5zcmN0cmVlKQorICAgIHN0YW5kYXJkLl9hZGRfbWQ1KGNvbmZpZywgYXJncy5yZWNpcGVuYW1lLCBvcy5wYXRoLmRpcm5hbWUocmYpKQorCisgICAgYWYgPSBfd3JpdGVfYXBwZW5kKHJmLCBhcmdzLnNyY3RyZWUsIGFyZ3Muc2FtZV9kaXIsIGFyZ3Mubm9fc2FtZV9kaXIsIHJldjIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgcmQpCisgICAgc3RhbmRhcmQuX2FkZF9tZDUoY29uZmlnLCBhcmdzLnJlY2lwZW5hbWUsIGFmKQorICAgIGxvZ2dlci5pbmZvKCdVcGdyYWRlZCBzb3VyY2UgZXh0cmFjdGVkIHRvICVzJyAlIGFyZ3Muc3JjdHJlZSkKKyAgICByZXR1cm4gMAorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoaXMgcGx1Z2luIiIiCisgICAgcGFyc2VyX3VwZ3JhZGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ3VwZ3JhZGUnLCBoZWxwPSdVcGdyYWRlIGFuIGV4aXN0aW5nIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J1VwZ3JhZGVzIGFuIGV4aXN0aW5nIHJlY2lwZSB0byBhIG5ldyB1cHN0cmVhbSB2ZXJzaW9uJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIGZvciByZWNpcGUgdG8gZXh0cmFjdCB0aGUgc291cmNlIGZvcicpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCdzcmN0cmVlJywgaGVscD0nUGF0aCB0byB3aGVyZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCAnLVYnLCBoZWxwPSdWZXJzaW9uIHRvIHVwZ3JhZGUgdG8gKFBWKScpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLXNyY3JldicsICctUycsIGhlbHA9J1NvdXJjZSByZXZpc2lvbiB0byB1cGdyYWRlIHRvIChpZiBmZXRjaGluZyBmcm9tIGFuIFNDTSBzdWNoIGFzIGdpdCknKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgnLS1icmFuY2gnLCAnLWInLCBkZWZhdWx0PSJkZXZ0b29sIiwgaGVscD0nTmFtZSBmb3IgbmV3IGRldmVsb3BtZW50IGJyYW5jaCB0byBjaGVja291dCAoZGVmYXVsdCAiJShkZWZhdWx0KXMiKScpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLW5vLXBhdGNoJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nRG8gbm90IGFwcGx5IHBhdGNoZXMgZnJvbSB0aGUgcmVjaXBlIHRvIHRoZSBuZXcgc291cmNlIGNvZGUnKQorICAgIGdyb3VwID0gcGFyc2VyX3VwZ3JhZGUuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXNhbWUtZGlyJywgJy1zJywgaGVscD0nQnVpbGQgaW4gc2FtZSBkaXJlY3RvcnkgYXMgc291cmNlJywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tbm8tc2FtZS1kaXInLCBoZWxwPSdGb3JjZSBidWlsZCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLWtlZXAtdGVtcCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0tlZXAgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoZm9yIGRlYnVnZ2luZyknKQorICAgIHBhcnNlcl91cGdyYWRlLnNldF9kZWZhdWx0cyhmdW5jPXVwZ3JhZGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2FwcGVuZC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlNDExNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9hcHBlbmQucHkKQEAgLTAsMCArMSw0NjkgQEAKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBhcHBlbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdGF0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc2NyaXB0dXRpbHMKK2ltcG9ydCBlcnJubworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQorCit0aW5mb2lsID0gTm9uZQorCitkZWYgdGluZm9pbF9pbml0KGluc3RhbmNlKToKKyAgICBnbG9iYWwgdGluZm9pbAorICAgIHRpbmZvaWwgPSBpbnN0YW5jZQorCisKKyMgRklYTUUgZ3Vlc3Npbmcgd2hlbiB3ZSBkb24ndCBoYXZlIHBrZ2RhdGE/CisjIEZJWE1FIG1vZGUgdG8gY3JlYXRlIHBhdGNoIHJhdGhlciB0aGFuIGRpcmVjdGx5IHN1YnN0aXR1dGUKKworY2xhc3MgSW52YWxpZFRhcmdldEZpbGVFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIGZpbmRfdGFyZ2V0X2ZpbGUodGFyZ2V0cGF0aCwgZCwgcGtnbGlzdD1Ob25lKToKKyAgICAiIiJGaW5kIHRoZSByZWNpcGUgaW5zdGFsbGluZyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYXRoLCBvcHRpb25hbGx5IGxpbWl0ZWQgdG8gYSBzZWxlY3QgbGlzdCBvZiBwYWNrYWdlcyIiIgorICAgIGltcG9ydCBqc29uCisKKyAgICBwa2dkYXRhX2RpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisKKyAgICAjIFRoZSBtaXggYmV0d2VlbiAvZXRjIGFuZCAke3N5c2NvbmZkaXJ9IGhlcmUgbWF5IGxvb2sgb2RkLCBidXQgaXQgaXMganVzdAorICAgICMgYmVpbmcgY29uc2lzdGVudCB3aXRoIHVzYWdlIGVsc2V3aGVyZQorICAgIGludmFsaWR0YXJnZXRzID0geycke3N5c2NvbmZkaXJ9L3ZlcnNpb24nOiAnJHtzeXNjb25mZGlyfS92ZXJzaW9uIGlzIHdyaXR0ZW4gb3V0IGF0IGltYWdlIGNyZWF0aW9uIHRpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICcvZXRjL3RpbWVzdGFtcCc6ICcvZXRjL3RpbWVzdGFtcCBpcyB3cml0dGVuIG91dCBhdCBpbWFnZSBjcmVhdGlvbiB0aW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2Rldi8qJzogJy9kZXYgaXMgaGFuZGxlZCBieSB1ZGV2IChvciBlcXVpdmFsZW50KSBhbmQgdGhlIGtlcm5lbCAoZGV2dG1wZnMpJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2V0Yy9wYXNzd2QnOiAnL2V0Yy9wYXNzd2Qgc2hvdWxkIGJlIG1hbmFnZWQgdGhyb3VnaCB0aGUgdXNlcmFkZCBhbmQgZXh0cmF1c2VycyBjbGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2V0Yy9ncm91cCc6ICcvZXRjL2dyb3VwIHNob3VsZCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHVzZXJhZGQgYW5kIGV4dHJhdXNlcnMgY2xhc3NlcycsCisgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvc2hhZG93JzogJy9ldGMvc2hhZG93IHNob3VsZCBiZSBtYW5hZ2VkIHRocm91Z2ggdGhlIHVzZXJhZGQgYW5kIGV4dHJhdXNlcnMgY2xhc3NlcycsCisgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvZ3NoYWRvdyc6ICcvZXRjL2dzaGFkb3cgc2hvdWxkIGJlIG1hbmFnZWQgdGhyb3VnaCB0aGUgdXNlcmFkZCBhbmQgZXh0cmF1c2VycyBjbGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAnJHtzeXNjb25mZGlyfS9ob3N0bmFtZSc6ICcke3N5c2NvbmZkaXJ9L2hvc3RuYW1lIGNvbnRlbnRzIHNob3VsZCBiZSBzZXQgYnkgc2V0dGluZyBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gInZhbHVlIiBpbiBjb25maWd1cmF0aW9uJyx9CisKKyAgICBmb3IgcHRoc3BlYywgbWVzc2FnZSBpbiBpbnZhbGlkdGFyZ2V0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZSh0YXJnZXRwYXRoLCBkLmV4cGFuZChwdGhzcGVjKSk6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkVGFyZ2V0RmlsZUVycm9yKGQuZXhwYW5kKG1lc3NhZ2UpKQorCisgICAgdGFyZ2V0cGF0aF9yZSA9IHJlLmNvbXBpbGUocidccysoXCREKT8lcyhcc3wkKScgJSB0YXJnZXRwYXRoKQorCisgICAgcmVjaXBlcyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScpKToKKyAgICAgICAgaWYgcGtnbGlzdDoKKyAgICAgICAgICAgIGZpbGVsaXN0ID0gcGtnbGlzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZWxpc3QgPSBmaWxlcworICAgICAgICBmb3IgZm4gaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICBwa2dkYXRhZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgIGlmIHBrZ2xpc3QgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHBuID0gJycKKyAgICAgICAgICAgICAgICAjIFRoaXMgZG9lcyBhc3N1bWUgdGhhdCBQTiBjb21lcyBiZWZvcmUgb3RoZXIgdmFsdWVzLCBidXQgdGhhdCdzIGEgZmFpcmx5IHNhZmUgYXNzdW1wdGlvbgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUE46Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwbiA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdGSUxFU19JTkZPOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3R2YWwgPSBqc29uLmxvYWRzKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmdWxscHRoIGluIGRpY3R2YWwua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZnVsbHB0aCwgdGFyZ2V0cGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXNbdGFyZ2V0cGF0aF0uYXBwZW5kKHBuKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgncGtnX3ByZWluc3RfJykgb3IgbGluZS5zdGFydHN3aXRoKCdwa2dfcG9zdGluc3RfJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHR2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKS5kZWNvZGUoJ3N0cmluZ19lc2NhcGUnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3VwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsICVzICcgJSB0YXJnZXRwYXRoIGluIHNjcmlwdHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzW3RhcmdldHBhdGhdLmFwcGVuZCgnPyVzJyAlIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiB0YXJnZXRwYXRoX3JlLnNlYXJjaChzY3JpcHR2YWwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXNbdGFyZ2V0cGF0aF0uYXBwZW5kKCchJXMnICUgcG4pCisgICAgcmV0dXJuIHJlY2lwZXMKKworZGVmIF9nZXRfcmVjaXBlX2ZpbGUoY29va2VyLCBwbik6CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgcmVjaXBlZmlsZSA9IG9lLnJlY2lwZXV0aWxzLnBuX3RvX3JlY2lwZShjb29rZXIsIHBuKQorICAgIGlmIG5vdCByZWNpcGVmaWxlOgorICAgICAgICBza2lwcmVhc29ucyA9IG9lLnJlY2lwZXV0aWxzLmdldF91bmF2YWlsYWJsZV9yZWFzb25zKGNvb2tlciwgcG4pCisgICAgICAgIGlmIHNraXByZWFzb25zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdcbicuam9pbihza2lwcmVhc29ucykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAlcyIgJSBwbikKKyAgICByZXR1cm4gcmVjaXBlZmlsZQorCitkZWYgX3BhcnNlX3JlY2lwZShwbiwgdGluZm9pbCk6CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgcmVjaXBlZmlsZSA9IF9nZXRfcmVjaXBlX2ZpbGUodGluZm9pbC5jb29rZXIsIHBuKQorICAgIGlmIG5vdCByZWNpcGVmaWxlOgorICAgICAgICAjIEVycm9yIGFscmVhZHkgbG9nZ2VkCisgICAgICAgIHJldHVybiBOb25lCisgICAgYXBwZW5kX2ZpbGVzID0gdGluZm9pbC5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKHJlY2lwZWZpbGUpCisgICAgcmQgPSBvZS5yZWNpcGV1dGlscy5wYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICByZXR1cm4gcmQKKworZGVmIGRldGVybWluZV9maWxlX3NvdXJjZSh0YXJnZXRwYXRoLCByZCk6CisgICAgIiIiQXNzdW1pbmcgd2Uga25vdyBhIGZpbGUgY2FtZSBmcm9tIGEgc3BlY2lmaWMgcmVjaXBlLCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgaXQgY2FtZSBmcm9tIiIiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICAjIFNlZSBpZiBpdCdzIGluIGRvX2luc3RhbGwgZm9yIHRoZSByZWNpcGUKKyAgICB3b3JrZGlyID0gcmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBzcmNfdXJpID0gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICBzcmNmaWxlID0gJycKKyAgICBtb2RwYXRjaGVzID0gW10KKyAgICBlbGVtZW50cyA9IGNoZWNrX2RvX2luc3RhbGwocmQsIHRhcmdldHBhdGgpCisgICAgaWYgZWxlbWVudHM6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnZG9faW5zdGFsbCBsaW5lOlxuJXMnICUgJyAnLmpvaW4oZWxlbWVudHMpKQorICAgICAgICBzcmNwYXRoID0gZ2V0X3NvdXJjZV9wYXRoKGVsZW1lbnRzKQorICAgICAgICBsb2dnZXIuZGVidWcoJ3NvdXJjZSBwYXRoOiAlcycgJSBzcmNwYXRoKQorICAgICAgICBpZiBub3Qgc3JjcGF0aC5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAjIEhhbmRsZSBub24tYWJzb2x1dGUgcGF0aAorICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocmQuZ2V0VmFyRmxhZygnZG9faW5zdGFsbCcsICdkaXJzJywgVHJ1ZSkuc3BsaXQoKVstMV0sIHNyY3BhdGgpKQorICAgICAgICBpZiBzcmNwYXRoLnN0YXJ0c3dpdGgod29ya2Rpcik6CisgICAgICAgICAgICAjIE9LLCBub3cgd2UgaGF2ZSB0aGUgc291cmNlIGZpbGUgbmFtZSwgbG9vayBmb3IgaXQgaW4gU1JDX1VSSQorICAgICAgICAgICAgd29ya2RpcmZpbGUgPSBvcy5wYXRoLnJlbHBhdGgoc3JjcGF0aCwgd29ya2RpcikKKyAgICAgICAgICAgICMgRklYTUUgdGhpcyBpcyB3aGVyZSB3ZSBvdWdodCB0byBoYXZlIHNvbWUgY29kZSBpbiB0aGUgZmV0Y2hlciwgYmVjYXVzZSB0aGlzIGlzIG5haXZlCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBzcmNfdXJpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgbG9jYWxwYXRoID0gYmIuZmV0Y2gyLmxvY2FscGF0aChpdGVtLCByZCkKKyAgICAgICAgICAgICAgICAjIFNvdXJjZSBwYXRoIHNwZWNpZmllZCBpbiBkb19pbnN0YWxsIG1pZ2h0IGJlIGEgZ2xvYgorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChvcy5wYXRoLmJhc2VuYW1lKGxvY2FscGF0aCksIHdvcmtkaXJmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgc3JjZmlsZSA9ICdmaWxlOi8vJXMnICUgbG9jYWxwYXRoCisgICAgICAgICAgICAgICAgZWxpZiAnLycgaW4gd29ya2RpcmZpbGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW0gPT0gJ2ZpbGU6Ly8lcycgJSB3b3JrZGlyZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSAnZmlsZTovLyVzJyAlIGxvY2FscGF0aAorCisgICAgICAgICMgQ2hlY2sgcGF0Y2hlcworICAgICAgICBzcmNwYXRjaGVzID0gW10KKyAgICAgICAgcGF0Y2hlZGZpbGVzID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wYXRjaGVkX2ZpbGVzKHJkKQorICAgICAgICBmb3IgcGF0Y2gsIGZpbGVsaXN0IGluIHBhdGNoZWRmaWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBmaWxlaXRlbSBpbiBmaWxlbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmaWxlaXRlbVswXSA9PSBzcmNwYXRoOgorICAgICAgICAgICAgICAgICAgICBzcmNwYXRjaGVzLmFwcGVuZCgocGF0Y2gsIGZpbGVpdGVtWzFdKSkKKyAgICAgICAgaWYgc3JjcGF0Y2hlczoKKyAgICAgICAgICAgIGFkZHBhdGNoID0gTm9uZQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNyY3BhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgcGF0Y2hbMV0gPT0gJ0EnOgorICAgICAgICAgICAgICAgICAgICBhZGRwYXRjaCA9IHBhdGNoWzBdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbW9kcGF0Y2hlcy5hcHBlbmQocGF0Y2hbMF0pCisgICAgICAgICAgICBpZiBhZGRwYXRjaDoKKyAgICAgICAgICAgICAgICBzcmNmaWxlID0gJ3BhdGNoOi8vJXMnICUgYWRkcGF0Y2gKKworICAgIHJldHVybiAoc3JjZmlsZSwgZWxlbWVudHMsIG1vZHBhdGNoZXMpCisKK2RlZiBnZXRfc291cmNlX3BhdGgoY21kZWxlbWVudHMpOgorICAgICIiIkZpbmQgdGhlIHNvdXJjZSBwYXRoIHNwZWNpZmllZCB3aXRoaW4gYSBjb21tYW5kIiIiCisgICAgY29tbWFuZCA9IGNtZGVsZW1lbnRzWzBdCisgICAgaWYgY29tbWFuZCBpbiBbJ2luc3RhbGwnLCAnY3AnXToKKyAgICAgICAgaGVscHRleHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgnTENfQUxMPUMgJXMgLS1oZWxwJyAlIGNvbW1hbmQsIHNoZWxsPVRydWUpCisgICAgICAgIGFyZ29wdHMgPSAnJworICAgICAgICBhcmdvcHRfbGluZV9yZSA9IHJlLmNvbXBpbGUoJ14tKFthLXpBLVowLTldKSwgLS1bYS16LV0rPScpCisgICAgICAgIGZvciBsaW5lIGluIGhlbHB0ZXh0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisgICAgICAgICAgICByZXMgPSBhcmdvcHRfbGluZV9yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICBhcmdvcHRzICs9IHJlcy5ncm91cCgxKQorICAgICAgICBpZiBub3QgYXJnb3B0czoKKyAgICAgICAgICAgICMgRmFsbGJhY2sKKyAgICAgICAgICAgIGlmIGNvbW1hbmQgPT0gJ2luc3RhbGwnOgorICAgICAgICAgICAgICAgIGFyZ29wdHMgPSAnZ21vU3QnCisgICAgICAgICAgICBlbGlmIGNvbW1hbmQgPT0gJ2NwJzoKKyAgICAgICAgICAgICAgICBhcmdvcHRzID0gJ3QnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTm8gZmFsbGJhY2sgYXJndW1lbnRzIGZvciBjb21tYW5kICVzJyAlIGNvbW1hbmQpCisKKyAgICAgICAgc2tpcG5leHQgPSBGYWxzZQorICAgICAgICBmb3IgZWxlbSBpbiBjbWRlbGVtZW50c1sxOi0xXToKKyAgICAgICAgICAgIGlmIGVsZW0uc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgIGlmIGxlbihlbGVtKSA+IDEgYW5kIGVsZW1bMV0gaW4gYXJnb3B0czoKKyAgICAgICAgICAgICAgICAgICAgc2tpcG5leHQgPSBUcnVlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNraXBuZXh0OgorICAgICAgICAgICAgICAgIHNraXBuZXh0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0dXJuIGVsZW0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2dldF9zb3VyY2VfcGF0aDogbm8gaGFuZGxpbmcgZm9yIGNvbW1hbmQgIiVzIicpCisKK2RlZiBnZXRfZnVuY19kZXBzKGZ1bmMsIGQpOgorICAgICIiIkZpbmQgdGhlIGZ1bmN0aW9uIGRlcGVuZGVuY2llcyBvZiBhIHNoZWxsIGZ1bmN0aW9uIiIiCisgICAgZGVwcyA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoZnVuYywgbG9nZ2VyKS5wYXJzZV9zaGVsbChkLmdldFZhcihmdW5jLCBUcnVlKSkKKyAgICBkZXBzIHw9IHNldCgoZC5nZXRWYXJGbGFnKGZ1bmMsICJ2YXJkZXBzIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgZnVuY2RlcHMgPSBbXQorICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGRlcCwgJ2Z1bmMnLCBUcnVlKToKKyAgICAgICAgICAgIGZ1bmNkZXBzLmFwcGVuZChkZXApCisgICAgcmV0dXJuIGZ1bmNkZXBzCisKK2RlZiBjaGVja19kb19pbnN0YWxsKHJkLCB0YXJnZXRwYXRoKToKKyAgICAiIiJMb29rIGF0IGRvX2luc3RhbGwgZm9yIGEgY29tbWFuZCB0aGF0IGluc3RhbGxzL2NvcGllcyB0aGUgc3BlY2lmaWVkIHRhcmdldCBwYXRoIiIiCisgICAgaW5zdHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHJkLmdldFZhcignRCcsIFRydWUpLCB0YXJnZXRwYXRoLmxzdHJpcCgnLycpKSkKKyAgICBkb19pbnN0YWxsID0gcmQuZ2V0VmFyKCdkb19pbnN0YWxsJywgVHJ1ZSkKKyAgICAjIEhhbmRsZSB3aGVyZSBkb19pbnN0YWxsIGNhbGxzIG90aGVyIGZ1bmN0aW9ucyAoc29tZXdoYXQgY3J1ZGVseSwgYnV0IGdvb2QgZW5vdWdoIGZvciB0aGlzIHB1cnBvc2UpCisgICAgZGVwcyA9IGdldF9mdW5jX2RlcHMoJ2RvX2luc3RhbGwnLCByZCkKKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGRvX2luc3RhbGwgPSBkb19pbnN0YWxsLnJlcGxhY2UoZGVwLCByZC5nZXRWYXIoZGVwLCBUcnVlKSkKKworICAgICMgTG9vayBiYWNrd2FyZHMgdGhyb3VnaCBkb19pbnN0YWxsIGFzIHdlIHdhbnQgdG8gY2F0Y2ggd2hlcmUgYSBsYXRlciBsaW5lIChwZXJoYXBzCisgICAgIyBmcm9tIGEgYmJhcHBlbmQpIGlzIHdyaXRpbmcgb3ZlciB0aGUgdG9wCisgICAgZm9yIGxpbmUgaW4gcmV2ZXJzZWQoZG9faW5zdGFsbC5zcGxpdGxpbmVzKCkpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGgoJ2luc3RhbGwgJykgYW5kICcgLW0nIGluIGxpbmUpIG9yIGxpbmUuc3RhcnRzd2l0aCgnY3AgJyk6CisgICAgICAgICAgICBlbGVtZW50cyA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgZGVzdHBhdGggPSBvcy5wYXRoLmFic3BhdGgoZWxlbWVudHNbLTFdKQorICAgICAgICAgICAgaWYgZGVzdHBhdGggPT0gaW5zdHBhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzCisgICAgICAgICAgICBlbGlmIGRlc3RwYXRoLnJzdHJpcCgnLycpID09IG9zLnBhdGguZGlybmFtZShpbnN0cGF0aCk6CisgICAgICAgICAgICAgICAgIyBGSVhNRSB0aGlzIGRvZXNuJ3QgdGFrZSByZWN1cnNpdmUgY29weSBpbnRvIGFjY291bnQ7IHVuc3VyZSBpZiBpdCdzIHByYWN0aWNhbCB0byBkbyBzbworICAgICAgICAgICAgICAgIHNyY3BhdGggPSBnZXRfc291cmNlX3BhdGgoZWxlbWVudHMpCisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShvcy5wYXRoLmJhc2VuYW1lKGluc3RwYXRoKSwgb3MucGF0aC5iYXNlbmFtZShzcmNwYXRoKSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cworICAgIHJldHVybiBOb25lCisKKworZGVmIGFwcGVuZGZpbGUoYXJncyk6CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBzdGRvdXQgPSAnJworICAgIHRyeToKKyAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignTEFORz1DIGZpbGUgLWIgJXMnICUgYXJncy5uZXdmaWxlLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiAnY2Fubm90IG9wZW4nIGluIHN0ZG91dDoKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3Ioc3Rkb3V0KQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdmaWxlIGNvbW1hbmQgcmV0dXJuZWQgZXJyb3I6ICVzJyAlIGVycikKKyAgICAgICAgc3Rkb3V0ID0gJycKKyAgICBpZiBzdGRvdXQ6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygnZmlsZSBjb21tYW5kIG91dHB1dDogJXMnICUgc3Rkb3V0LnJzdHJpcCgpKQorICAgICAgICBpZiAoJ2V4ZWN1dGFibGUnIGluIHN0ZG91dCBhbmQgbm90ICdzaGVsbCBzY3JpcHQnIGluIHN0ZG91dCkgb3IgJ3NoYXJlZCBvYmplY3QnIGluIHN0ZG91dDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdUaGlzIGZpbGUgbG9va3MgbGlrZSBpdCBpcyBhIGJpbmFyeSBvciBvdGhlcndpc2UgdGhlIG91dHB1dCBvZiBjb21waWxhdGlvbi4gSWYgaXQgaXMsIHlvdSBzaG91bGQgY29uc2lkZXIgYnVpbGRpbmcgaXQgcHJvcGVybHkgaW5zdGVhZCBvZiBzdWJzdGl0dXRpbmcgYSBiaW5hcnkgZmlsZSBkaXJlY3RseS4nKQorCisgICAgaWYgYXJncy5yZWNpcGU6CisgICAgICAgIHJlY2lwZXMgPSB7YXJncy50YXJnZXRwYXRoOiBbYXJncy5yZWNpcGVdLH0KKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWNpcGVzID0gZmluZF90YXJnZXRfZmlsZShhcmdzLnRhcmdldHBhdGgsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIGV4Y2VwdCBJbnZhbGlkVGFyZ2V0RmlsZUVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJyVzIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgdG9vbDogJXMnICUgKGFyZ3MudGFyZ2V0cGF0aCwgZSkpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiBub3QgcmVjaXBlczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgYW55IHBhY2thZ2UgcHJvZHVjaW5nIHBhdGggJXMgLSB0aGlzIG1heSBiZSBiZWNhdXNlIHRoZSByZWNpcGUgcGFja2FnaW5nIGl0IGhhcyBub3QgYmVlbiBidWlsdCB5ZXQnICUgYXJncy50YXJnZXRwYXRoKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgIGFsdGVybmF0aXZlX3BucyA9IFtdCisgICAgcG9zdGluc3RfcG5zID0gW10KKworICAgIHNlbGVjdHBuID0gTm9uZQorICAgIGZvciB0YXJnZXRwYXRoLCBwbmxpc3QgaW4gcmVjaXBlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHBuIGluIHBubGlzdDoKKyAgICAgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoJz8nKToKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZV9wbnMuYXBwZW5kKHBuWzE6XSkKKyAgICAgICAgICAgIGVsaWYgcG4uc3RhcnRzd2l0aCgnIScpOgorICAgICAgICAgICAgICAgIHBvc3RpbnN0X3Bucy5hcHBlbmQocG5bMTpdKQorICAgICAgICAgICAgZWxpZiBzZWxlY3RwbjoKKyAgICAgICAgICAgICAgICAjIGhpdCBoZXJlIHdpdGggbXVsdGlsaWJzCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZWN0cG4gPSBwbgorCisgICAgaWYgbm90IHNlbGVjdHBuIGFuZCBsZW4oYWx0ZXJuYXRpdmVfcG5zKSA9PSAxOgorICAgICAgICBzZWxlY3RwbiA9IGFsdGVybmF0aXZlX3Buc1swXQorICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZpbGUgJXMgaXMgYW4gYWx0ZXJuYXRpdmUgcG9zc2libHkgcHJvdmlkZWQgYnkgcmVjaXBlICVzIGJ1dCBzZWVtaW5nbHkgbm8gb3RoZXIsIHNlbGVjdGluZyBpdCBieSBkZWZhdWx0IC0geW91IHNob3VsZCBkb3VibGUgY2hlY2sgb3RoZXIgcmVjaXBlcycgJSAoYXJncy50YXJnZXRwYXRoLCBzZWxlY3RwbikpCisKKyAgICBpZiBzZWxlY3RwbjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdTZWxlY3RpbmcgcmVjaXBlICVzIGZvciBmaWxlICVzJyAlIChzZWxlY3RwbiwgYXJncy50YXJnZXRwYXRoKSkKKyAgICAgICAgaWYgcG9zdGluc3RfcG5zOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJyVzIGJlIG1vZGlmaWVkIGJ5IHBvc3RpbnN0YWxsIHNjcmlwdHMgZm9yIHRoZSBmb2xsb3dpbmcgcmVjaXBlczpcbiAgJXNcblRoaXMgbWF5IG9yIG1heSBub3QgYmUgYW4gaXNzdWUgZGVwZW5kaW5nIG9uIHdoYXQgbW9kaWZpY2F0aW9ucyB0aGVzZSBwb3N0aW5zdGFsbCBzY3JpcHRzIG1ha2UuJyAlIChhcmdzLnRhcmdldHBhdGgsICdcbiAgJy5qb2luKHBvc3RpbnN0X3BucykpKQorICAgICAgICByZCA9IF9wYXJzZV9yZWNpcGUoc2VsZWN0cG4sIHRpbmZvaWwpCisgICAgICAgIGlmIG5vdCByZDoKKyAgICAgICAgICAgICMgRXJyb3IgbWVzc2FnZSBhbHJlYWR5IHNob3duCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBzb3VyY2VmaWxlLCBpbnN0ZWxlbWVudHMsIG1vZHBhdGNoZXMgPSBkZXRlcm1pbmVfZmlsZV9zb3VyY2UoYXJncy50YXJnZXRwYXRoLCByZCkKKyAgICAgICAgc291cmNlcGF0aCA9IE5vbmUKKyAgICAgICAgaWYgc291cmNlZmlsZToKKyAgICAgICAgICAgIHNvdXJjZXR5cGUsIHNvdXJjZXBhdGggPSBzb3VyY2VmaWxlLnNwbGl0KCc6Ly8nLCAxKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdPcmlnaW5hbCBzb3VyY2UgZmlsZSBpcyAlcyAoJXMpJyAlIChzb3VyY2VwYXRoLCBzb3VyY2V0eXBlKSkKKyAgICAgICAgICAgIGlmIHNvdXJjZXR5cGUgPT0gJ3BhdGNoJzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmlsZSAlcyBpcyBhZGRlZCBieSB0aGUgcGF0Y2ggJXMgLSB5b3UgbWF5IG5lZWQgdG8gcmVtb3ZlIG9yIHJlcGxhY2UgdGhpcyBwYXRjaCBpbiBvcmRlciB0byByZXBsYWNlIHRoZSBmaWxlLicgJSAoYXJncy50YXJnZXRwYXRoLCBzb3VyY2VwYXRoKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VwYXRoID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHNvdXJjZSBmaWxlLCBwcm9jZWVkaW5nIGFueXdheScpCisgICAgICAgIGlmIG1vZHBhdGNoZXM6CisgICAgICAgICAgICBsb2dnZXIud2FybignRmlsZSAlcyBpcyBtb2RpZmllZCBieSB0aGUgZm9sbG93aW5nIHBhdGNoZXM6XG4gICVzJyAlIChhcmdzLnRhcmdldHBhdGgsICdcbiAgJy5qb2luKG1vZHBhdGNoZXMpKSkKKworICAgICAgICBpZiBpbnN0ZWxlbWVudHMgYW5kIHNvdXJjZXBhdGg6CisgICAgICAgICAgICBpbnN0YWxsID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBdXRvLWRldGVybWluZSBwZXJtaXNzaW9ucworICAgICAgICAgICAgIyBDaGVjayBkZXN0aW5hdGlvbgorICAgICAgICAgICAgYmlucGF0aHMgPSAnJHtiaW5kaXJ9OiR7c2JpbmRpcn06JHtiYXNlX2JpbmRpcn06JHtiYXNlX3NiaW5kaXJ9OiR7bGliZXhlY2Rpcn06JHtzeXNjb25mZGlyfS9pbml0LmQnCisgICAgICAgICAgICBwZXJtcyA9ICcwNjQ0JworICAgICAgICAgICAgaWYgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShhcmdzLnRhcmdldHBhdGgpKSBpbiByZC5leHBhbmQoYmlucGF0aHMpLnNwbGl0KCc6Jyk6CisgICAgICAgICAgICAgICAgIyBGaWxlIGlzIGdvaW5nIGludG8gYSBkaXJlY3Rvcnkgbm9ybWFsbHkgcmVzZXJ2ZWQgZm9yIGV4ZWN1dGFibGVzLCBzbyBpdCBzaG91bGQgYmUgZXhlY3V0YWJsZQorICAgICAgICAgICAgICAgIHBlcm1zID0gJzA3NTUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgc291cmNlCisgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGFyZ3MubmV3ZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBzdC5zdF9tb2RlICYgc3RhdC5TX0lYVVNSOgorICAgICAgICAgICAgICAgICAgICBwZXJtcyA9ICcwNzU1JworICAgICAgICAgICAgaW5zdGFsbCA9IHthcmdzLm5ld2ZpbGU6IChhcmdzLnRhcmdldHBhdGgsIHBlcm1zKX0KKyAgICAgICAgb2UucmVjaXBldXRpbHMuYmJhcHBlbmRfcmVjaXBlKHJkLCBhcmdzLmRlc3RsYXllciwge2FyZ3MubmV3ZmlsZTogc291cmNlcGF0aH0sIGluc3RhbGwsIHdpbGRjYXJkdmVyPWFyZ3Mud2lsZGNhcmRfdmVyc2lvbiwgbWFjaGluZT1hcmdzLm1hY2hpbmUpCisgICAgICAgIHJldHVybiAwCisgICAgZWxzZToKKyAgICAgICAgaWYgYWx0ZXJuYXRpdmVfcG5zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGaWxlICVzIGlzIGFuIGFsdGVybmF0aXZlIHBvc3NpYmx5IHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVjaXBlczpcbiAgJXNcblBsZWFzZSBzZWxlY3QgcmVjaXBlIHdpdGggLXIvLS1yZWNpcGUnICUgKHRhcmdldHBhdGgsICdcbiAgJy5qb2luKGFsdGVybmF0aXZlX3BucykpKQorICAgICAgICBlbGlmIHBvc3RpbnN0X3BuczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRmlsZSAlcyBtYXkgYmUgd3JpdHRlbiBvdXQgaW4gYSBwcmUvcG9zdGluc3RhbGwgc2NyaXB0IG9mIHRoZSBmb2xsb3dpbmcgcmVjaXBlczpcbiAgJXNcblBsZWFzZSBzZWxlY3QgcmVjaXBlIHdpdGggLXIvLS1yZWNpcGUnICUgKHRhcmdldHBhdGgsICdcbiAgJy5qb2luKHBvc3RpbnN0X3BucykpKQorICAgICAgICByZXR1cm4gMworCisKK2RlZiBhcHBlbmRzcmMoYXJncywgZmlsZXMsIHJkLCBleHRyYWxpbmVzPU5vbmUpOgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgc3JjZGlyID0gcmQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICB3b3JrZGlyID0gcmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKworICAgIGltcG9ydCBiYi5mZXRjaAorICAgIHNpbXBsaWZpZWQgPSB7fQorICAgIHNyY191cmkgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHVyaSBpbiBzcmNfdXJpOgorICAgICAgICBzaW1wbGVfdXJpID0gYmIuZmV0Y2guVVJJKHVyaSkKKyAgICAgICAgc2ltcGxlX3VyaS5wYXJhbXMgPSB7fQorICAgICAgICBzaW1wbGlmaWVkW3N0cihzaW1wbGVfdXJpKV0gPSB1cmkKKworICAgIGNvcHlmaWxlcyA9IHt9CisgICAgZXh0cmFsaW5lcyA9IGV4dHJhbGluZXMgb3IgW10KKyAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBmaWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgc3JjX2Rlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3JjZmlsZSkKKyAgICAgICAgaWYgbm90IGFyZ3MudXNlX3dvcmtkaXI6CisgICAgICAgICAgICBpZiByZC5nZXRWYXIoJ1MnLCBUcnVlKSA9PSByZC5nZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsIFRydWUpOgorICAgICAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih3b3JrZGlyLCAnZ2l0JykKKyAgICAgICAgICAgICAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgcmQpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignUyA9PSBTVEFHSU5HX0tFUk5FTF9ESVIgYW5kIG5vbi1rZXJuZWwteW9jdG8sIHVuYWJsZSB0byBkZXRlcm1pbmUgcGF0aCB0byBzcmNkaXIsIGRlZmF1bHRpbmcgdG8gJHtXT1JLRElSfS9naXQnKQorICAgICAgICAgICAgc3JjX2Rlc3RkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWxwYXRoKHNyY2Rpciwgd29ya2RpciksIHNyY19kZXN0ZGlyKQorICAgICAgICBzcmNfZGVzdGRpciA9IG9zLnBhdGgubm9ybXBhdGgoc3JjX2Rlc3RkaXIpCisKKyAgICAgICAgc291cmNlX3VyaSA9ICdmaWxlOi8vezB9Jy5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShzcmNmaWxlKSkKKyAgICAgICAgaWYgc3JjX2Rlc3RkaXIgYW5kIHNyY19kZXN0ZGlyICE9ICcuJzoKKyAgICAgICAgICAgIHNvdXJjZV91cmkgKz0gJztzdWJkaXI9ezB9Jy5mb3JtYXQoc3JjX2Rlc3RkaXIpCisKKyAgICAgICAgc2ltcGxlID0gYmIuZmV0Y2guVVJJKHNvdXJjZV91cmkpCisgICAgICAgIHNpbXBsZS5wYXJhbXMgPSB7fQorICAgICAgICBzaW1wbGVfc3RyID0gc3RyKHNpbXBsZSkKKyAgICAgICAgaWYgc2ltcGxlX3N0ciBpbiBzaW1wbGlmaWVkOgorICAgICAgICAgICAgZXhpc3RpbmcgPSBzaW1wbGlmaWVkW3NpbXBsZV9zdHJdCisgICAgICAgICAgICBpZiBzb3VyY2VfdXJpICE9IGV4aXN0aW5nOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCd7MCFyfSBpcyBhbHJlYWR5IGluIFNSQ19VUkksIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnM6IHsxIXJ9LCBub3QgYWRkaW5nJy5mb3JtYXQoc291cmNlX3VyaSwgZXhpc3RpbmcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybignezAhcn0gaXMgYWxyZWFkeSBpbiBTUkNfVVJJLCBub3QgYWRkaW5nJy5mb3JtYXQoc291cmNlX3VyaSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRyYWxpbmVzLmFwcGVuZCgnU1JDX1VSSSArPSB7MH0nLmZvcm1hdChzb3VyY2VfdXJpKSkKKyAgICAgICAgY29weWZpbGVzW25ld2ZpbGVdID0gc3JjZmlsZQorCisgICAgb2UucmVjaXBldXRpbHMuYmJhcHBlbmRfcmVjaXBlKHJkLCBhcmdzLmRlc3RsYXllciwgY29weWZpbGVzLCBOb25lLCB3aWxkY2FyZHZlcj1hcmdzLndpbGRjYXJkX3ZlcnNpb24sIG1hY2hpbmU9YXJncy5tYWNoaW5lLCBleHRyYWxpbmVzPWV4dHJhbGluZXMpCisKKworZGVmIGFwcGVuZHNyY2ZpbGVzKHBhcnNlciwgYXJncyk6CisgICAgcmVjaXBlZGF0YSA9IF9wYXJzZV9yZWNpcGUoYXJncy5yZWNpcGUsIHRpbmZvaWwpCisgICAgaWYgbm90IHJlY2lwZWRhdGE6CisgICAgICAgIHBhcnNlci5lcnJvcignUkVDSVBFIG11c3QgYmUgYSB2YWxpZCByZWNpcGUgbmFtZScpCisKKyAgICBmaWxlcyA9IGRpY3QoKGYsIG9zLnBhdGguam9pbihhcmdzLmRlc3RkaXIsIG9zLnBhdGguYmFzZW5hbWUoZikpKQorICAgICAgICAgICAgICAgICBmb3IgZiBpbiBhcmdzLmZpbGVzKQorICAgIHJldHVybiBhcHBlbmRzcmMoYXJncywgZmlsZXMsIHJlY2lwZWRhdGEpCisKKworZGVmIGFwcGVuZHNyY2ZpbGUocGFyc2VyLCBhcmdzKToKKyAgICByZWNpcGVkYXRhID0gX3BhcnNlX3JlY2lwZShhcmdzLnJlY2lwZSwgdGluZm9pbCkKKyAgICBpZiBub3QgcmVjaXBlZGF0YToKKyAgICAgICAgcGFyc2VyLmVycm9yKCdSRUNJUEUgbXVzdCBiZSBhIHZhbGlkIHJlY2lwZSBuYW1lJykKKworICAgIGlmIG5vdCBhcmdzLmRlc3RmaWxlOgorICAgICAgICBhcmdzLmRlc3RmaWxlID0gb3MucGF0aC5iYXNlbmFtZShhcmdzLmZpbGUpCisgICAgZWxpZiBhcmdzLmRlc3RmaWxlLmVuZHN3aXRoKCcvJyk6CisgICAgICAgIGFyZ3MuZGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5kZXN0ZmlsZSwgb3MucGF0aC5iYXNlbmFtZShhcmdzLmZpbGUpKQorCisgICAgcmV0dXJuIGFwcGVuZHNyYyhhcmdzLCB7YXJncy5maWxlOiBhcmdzLmRlc3RmaWxlfSwgcmVjaXBlZGF0YSkKKworCitkZWYgbGF5ZXIobGF5ZXJwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGxheWVycGF0aCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYSBwYXRoIHRvIGEgdmFsaWQgbGF5ZXInLmZvcm1hdChsYXllcnBhdGgpKQorICAgIHJldHVybiBsYXllcnBhdGgKKworCitkZWYgZXhpc3RpbmdfcGF0aChmaWxlcGF0aCk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYW4gZXhpc3RpbmcgcGF0aCcuZm9ybWF0KGZpbGVwYXRoKSkKKyAgICByZXR1cm4gZmlsZXBhdGgKKworCitkZWYgZXhpc3RpbmdfZmlsZShmaWxlcGF0aCk6CisgICAgZmlsZXBhdGggPSBleGlzdGluZ19wYXRoKGZpbGVwYXRoKQorICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZXBhdGgpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignezAhcn0gbXVzdCBiZSBhIGZpbGUsIG5vdCBhIGRpcmVjdG9yeScuZm9ybWF0KGZpbGVwYXRoKSkKKyAgICByZXR1cm4gZmlsZXBhdGgKKworCitkZWYgZGVzdGluYXRpb25fcGF0aChkZXN0cGF0aCk6CisgICAgaWYgb3MucGF0aC5pc2FicyhkZXN0cGF0aCk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCd7MCFyfSBtdXN0IGJlIGEgcmVsYXRpdmUgcGF0aCwgbm90IGFic29sdXRlJy5mb3JtYXQoZGVzdHBhdGgpKQorICAgIHJldHVybiBkZXN0cGF0aAorCisKK2RlZiB0YXJnZXRfcGF0aCh0YXJnZXRwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXRwYXRoKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aCwgbm90IHJlbGF0aXZlJy5mb3JtYXQodGFyZ2V0cGF0aCkpCisgICAgcmV0dXJuIHRhcmdldHBhdGgKKworCitkZWYgcmVnaXN0ZXJfY29tbWFuZChzdWJwYXJzZXJzKToKKyAgICBjb21tb24gPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICBjb21tb24uYWRkX2FyZ3VtZW50KCctbScsICctLW1hY2hpbmUnLCBoZWxwPSdNYWtlIGJiYXBwZW5kIGNoYW5nZXMgc3BlY2lmaWMgdG8gYSBtYWNoaW5lIG9ubHknLCBtZXRhdmFyPSdNQUNISU5FJykKKyAgICBjb21tb24uYWRkX2FyZ3VtZW50KCctdycsICctLXdpbGRjYXJkLXZlcnNpb24nLCBoZWxwPSdVc2Ugd2lsZGNhcmQgdG8gbWFrZSB0aGUgYmJhcHBlbmQgYXBwbHkgdG8gYW55IHJlY2lwZSB2ZXJzaW9uJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjb21tb24uYWRkX2FyZ3VtZW50KCdkZXN0bGF5ZXInLCBtZXRhdmFyPSdERVNUTEFZRVInLCBoZWxwPSdCYXNlIGRpcmVjdG9yeSBvZiB0aGUgZGVzdGluYXRpb24gbGF5ZXIgdG8gd3JpdGUgdGhlIGJiYXBwZW5kIHRvJywgdHlwZT1sYXllcikKKworICAgIHBhcnNlcl9hcHBlbmRmaWxlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdhcHBlbmRmaWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzPVtjb21tb25dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZS91cGRhdGUgYSBiYmFwcGVuZCB0byByZXBsYWNlIGEgdGFyZ2V0IGZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGVzIGEgYmJhcHBlbmQgKG9yIHVwZGF0ZXMgYW4gZXhpc3Rpbmcgb25lKSB0byByZXBsYWNlIHRoZSBzcGVjaWZpZWQgZmlsZSB0aGF0IGFwcGVhcnMgaW4gdGhlIHRhcmdldCBzeXN0ZW0sIGRldGVybWluaW5nIHRoZSByZWNpcGUgdGhhdCBwYWNrYWdlcyB0aGUgZmlsZSBhbmQgdGhlIHJlcXVpcmVkIHBhdGggYW5kIG5hbWUgZm9yIHRoZSBiYmFwcGVuZCBhdXRvbWF0aWNhbGx5LiBOb3RlIHRoYXQgdGhlIGFiaWxpdHkgdG8gZGV0ZXJtaW5lIHRoZSByZWNpcGUgcGFja2FnaW5nIGEgcGFydGljdWxhciBmaWxlIGRlcGVuZHMgdXBvbiB0aGUgcmVjaXBlXCdzIGRvX3BhY2thZ2VkYXRhIHRhc2sgaGF2aW5nIGFscmVhZHkgcnVuIHByaW9yIHRvIHJ1bm5pbmcgdGhpcyBjb21tYW5kICh3aGljaCBpdCB3aWxsIGhhdmUgd2hlbiB0aGUgcmVjaXBlIGhhcyBiZWVuIGJ1aWx0IHN1Y2Nlc3NmdWxseSwgd2hpY2ggaW4gdHVybiB3aWxsIGhhdmUgaGFwcGVuZWQgaWYgb25lIG9yIG1vcmUgb2YgdGhlIHJlY2lwZVwncyBwYWNrYWdlcyBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZSB0aGF0IGhhcyBiZWVuIGJ1aWx0IHN1Y2Nlc3NmdWxseSkuJykKKyAgICBwYXJzZXJfYXBwZW5kZmlsZS5hZGRfYXJndW1lbnQoJ3RhcmdldHBhdGgnLCBoZWxwPSdQYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHJlcGxhY2VkIChhcyBpdCB3b3VsZCBhcHBlYXIgd2l0aGluIHRoZSB0YXJnZXQgaW1hZ2UsIGUuZy4gL2V0Yy9tb3RkKScsIHR5cGU9dGFyZ2V0X3BhdGgpCisgICAgcGFyc2VyX2FwcGVuZGZpbGUuYWRkX2FyZ3VtZW50KCduZXdmaWxlJywgaGVscD0nQ3VzdG9tIGZpbGUgdG8gcmVwbGFjZSB0aGUgdGFyZ2V0IGZpbGUgd2l0aCcsIHR5cGU9ZXhpc3RpbmdfZmlsZSkKKyAgICBwYXJzZXJfYXBwZW5kZmlsZS5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmVjaXBlJywgaGVscD0nT3ZlcnJpZGUgcmVjaXBlIHRvIGFwcGx5IHRvIChkZWZhdWx0IGlzIHRvIGZpbmQgd2hpY2ggcmVjaXBlIGFscmVhZHkgcGFja2FnZXMgdGhlIGZpbGUpJykKKyAgICBwYXJzZXJfYXBwZW5kZmlsZS5zZXRfZGVmYXVsdHMoZnVuYz1hcHBlbmRmaWxlLCBwYXJzZXJlY2lwZXM9VHJ1ZSkKKworICAgIGNvbW1vbl9zcmMgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSwgcGFyZW50cz1bY29tbW9uXSkKKyAgICBjb21tb25fc3JjLmFkZF9hcmd1bWVudCgnLVcnLCAnLS13b3JrZGlyJywgaGVscD0nVW5wYWNrIGZpbGUgaW50byBXT1JLRElSIHJhdGhlciB0aGFuIFMnLCBkZXN0PSd1c2Vfd29ya2RpcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgY29tbW9uX3NyYy5hZGRfYXJndW1lbnQoJ3JlY2lwZScsIG1ldGF2YXI9J1JFQ0lQRScsIGhlbHA9J092ZXJyaWRlIHJlY2lwZSB0byBhcHBseSB0bycpCisKKyAgICBwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2FwcGVuZHNyY2ZpbGVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cz1bY29tbW9uX3NyY10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZS91cGRhdGUgYSBiYmFwcGVuZCB0byBhZGQgb3IgcmVwbGFjZSBzb3VyY2UgZmlsZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQ3JlYXRlcyBhIGJiYXBwZW5kIChvciB1cGRhdGVzIGFuIGV4aXN0aW5nIG9uZSkgdG8gYWRkIG9yIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBmaWxlIGluIHRoZSByZWNpcGUgc291cmNlcywgZWl0aGVyIHRob3NlIGluIFdPUktESVIgb3IgdGhvc2UgaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIGNvbW1hbmQgbGV0cyB5b3Ugc3BlY2lmeSBtdWx0aXBsZSBmaWxlcyB3aXRoIGEgZGVzdGluYXRpb24gZGlyZWN0b3J5LCBzbyBjYW5ub3Qgc3BlY2lmeSB0aGUgZGVzdGluYXRpb24gZmlsZW5hbWUuIFNlZSB0aGUgYGFwcGVuZHNyY2ZpbGVgIGNvbW1hbmQgZm9yIHRoZSBvdGhlciBiZWhhdmlvci4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1EJywgJy0tZGVzdGRpcicsIGhlbHA9J0Rlc3RpbmF0aW9uIGRpcmVjdG9yeSAocmVsYXRpdmUgdG8gUyBvciBXT1JLRElSLCBkZWZhdWx0cyB0byAiLiIpJywgZGVmYXVsdD0nJywgdHlwZT1kZXN0aW5hdGlvbl9wYXRoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGVzJywgbmFyZ3M9JysnLCBtZXRhdmFyPSdGSUxFJywgaGVscD0nRmlsZShzKSB0byBiZSBhZGRlZCB0byB0aGUgcmVjaXBlIHNvdXJjZXMgKFdPUktESVIgb3IgUyknLCB0eXBlPWV4aXN0aW5nX3BhdGgpCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWxhbWJkYSBhOiBhcHBlbmRzcmNmaWxlcyhwYXJzZXIsIGEpLCBwYXJzZXJlY2lwZXM9VHJ1ZSkKKworICAgIHBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYXBwZW5kc3JjZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHM9W2NvbW1vbl9zcmNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUvdXBkYXRlIGEgYmJhcHBlbmQgdG8gYWRkIG9yIHJlcGxhY2UgYSBzb3VyY2UgZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGVzIGEgYmJhcHBlbmQgKG9yIHVwZGF0ZXMgYW4gZXhpc3Rpbmcgb25lKSB0byBhZGQgb3IgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGZpbGVzIGluIHRoZSByZWNpcGUgc291cmNlcywgZWl0aGVyIHRob3NlIGluIFdPUktESVIgb3IgdGhvc2UgaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIGNvbW1hbmQgbGV0cyB5b3Ugc3BlY2lmeSB0aGUgZGVzdGluYXRpb24gZmlsZW5hbWUsIG5vdCBqdXN0IGRlc3RpbmF0aW9uIGRpcmVjdG9yeSwgYnV0IG9ubHkgd29ya3MgZm9yIG9uZSBmaWxlLiBTZWUgdGhlIGBhcHBlbmRzcmNmaWxlc2AgY29tbWFuZCBmb3IgdGhlIG90aGVyIGJlaGF2aW9yLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZmlsZScsIG1ldGF2YXI9J0ZJTEUnLCBoZWxwPSdGaWxlIHRvIGJlIGFkZGVkIHRvIHRoZSByZWNpcGUgc291cmNlcyAoV09SS0RJUiBvciBTKScsIHR5cGU9ZXhpc3RpbmdfcGF0aCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdkZXN0ZmlsZScsIG1ldGF2YXI9J0RFU1RGSUxFJywgbmFyZ3M9Jz8nLCBoZWxwPSdEZXN0aW5hdGlvbiBwYXRoIChyZWxhdGl2ZSB0byBTIG9yIFdPUktESVIsIG9wdGlvbmFsKScsIHR5cGU9ZGVzdGluYXRpb25fcGF0aCkKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9bGFtYmRhIGE6IGFwcGVuZHNyY2ZpbGUocGFyc2VyLCBhKSwgcGFyc2VyZWNpcGVzPVRydWUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDc1NGRiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZS5weQpAQCAtMCwwICsxLDQxMiBAQAorIyBSZWNpcGUgY3JlYXRpb24gdG9vbCAtIGNyZWF0ZSBjb21tYW5kIHBsdWdpbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNjcmlwdHV0aWxzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdyZWNpcGV0b29sJykKKwordGluZm9pbCA9IE5vbmUKK3BsdWdpbnMgPSBOb25lCisKK2RlZiBwbHVnaW5faW5pdChwbHVnaW5saXN0KToKKyAgICAjIFRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGxpc3Qgc28gd2UgY2FuIHVzZSBpdCBsYXRlcgorICAgIGdsb2JhbCBwbHVnaW5zCisgICAgcGx1Z2lucyA9IHBsdWdpbmxpc3QKKworZGVmIHRpbmZvaWxfaW5pdChpbnN0YW5jZSk6CisgICAgZ2xvYmFsIHRpbmZvaWwKKyAgICB0aW5mb2lsID0gaW5zdGFuY2UKKworY2xhc3MgUmVjaXBlSGFuZGxlcigpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2hlY2tmaWxlcyhwYXRoLCBzcGVjbGlzdCk6CisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3Igc3BlYyBpbiBzcGVjbGlzdDoKKyAgICAgICAgICAgIHJlc3VsdHMuZXh0ZW5kKGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4ocGF0aCwgc3BlYykpKQorICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgZGVmIGdlbmZ1bmN0aW9uKHNlbGYsIG91dGxpbmVzLCBmdW5jbmFtZSwgY29udGVudCk6CisgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnJXMgKCkgeycgJSBmdW5jbmFtZSkKKyAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudDoKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnXHQlcycgJSBsaW5lKQorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJycpCisKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworCitkZWYgc3VwcG9ydHNfc3JjcmV2KHVyaSk6CisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgIyBUaGlzIGlzIGEgYml0IHNhZCwgYnV0IGlmIHlvdSBkb24ndCBoYXZlIHRoaXMgc2V0IHRoZXJlIGNhbiBiZSBzb21lCisgICAgIyBvZGQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVybGRhdGEgY2FjaGUgd2hpY2ggbGVhZCB0byBlcnJvcnMKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNSRVYnLCAnJHtBVVRPUkVWfScpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgbG9jYWxkYXRhKQorICAgIHVybGRhdGEgPSBmZXRjaGVyLnVkCisgICAgZm9yIHUgaW4gdXJsZGF0YToKKyAgICAgICAgaWYgdXJsZGF0YVt1XS5tZXRob2Quc3VwcG9ydHNfc3JjcmV2KCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgY3JlYXRlX3JlY2lwZShhcmdzKToKKyAgICBpbXBvcnQgYmIucHJvY2VzcworICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIGltcG9ydCBzaHV0aWwKKworICAgIHBrZ2FyY2ggPSAiIgorICAgIGlmIGFyZ3MubWFjaGluZToKKyAgICAgICAgcGtnYXJjaCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyAgICBjaGVja3N1bXMgPSAoTm9uZSwgTm9uZSkKKyAgICB0ZW1wc3JjID0gJycKKyAgICBzcmNzdWJkaXIgPSAnJworICAgIHNyY3JldiA9ICcke0FVVE9SRVZ9JworICAgIGlmICc6Ly8nIGluIGFyZ3Muc291cmNlOgorICAgICAgICAjIEZldGNoIGEgVVJMCisgICAgICAgIHNyY3VyaSA9IGFyZ3Muc291cmNlCisgICAgICAgIHJldl9yZSA9IHJlLmNvbXBpbGUoJztyZXY9KFteO10rKScpCisgICAgICAgIHJlcyA9IHJldl9yZS5zZWFyY2goc3JjdXJpKQorICAgICAgICBpZiByZXM6CisgICAgICAgICAgICBzcmNyZXYgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgIHNyY3VyaSA9IHJldl9yZS5zdWIoJycsIHNyY3VyaSkKKyAgICAgICAgdGVtcHNyYyA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29sLScpCisgICAgICAgIHNyY3RyZWUgPSB0ZW1wc3JjCisgICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyAlcy4uLicgJSBzcmN1cmkpCisgICAgICAgIGNoZWNrc3VtcyA9IHNjcmlwdHV0aWxzLmZldGNoX3VyaSh0aW5mb2lsLmNvbmZpZ19kYXRhLCBhcmdzLnNvdXJjZSwgc3JjdHJlZSwgc3JjcmV2KQorICAgICAgICBkaXJsaXN0ID0gb3MubGlzdGRpcihzcmN0cmVlKQorICAgICAgICBpZiAnZ2l0LmluZGlyZWN0aW9uc3ltbGluaycgaW4gZGlybGlzdDoKKyAgICAgICAgICAgIGRpcmxpc3QucmVtb3ZlKCdnaXQuaW5kaXJlY3Rpb25zeW1saW5rJykKKyAgICAgICAgaWYgbGVuKGRpcmxpc3QpID09IDEgYW5kIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNyY3RyZWUsIGRpcmxpc3RbMF0pKToKKyAgICAgICAgICAgICMgV2UgdW5wYWNrZWQgYSBzaW5nbGUgZGlyZWN0b3J5LCBzbyB3ZSBzaG91bGQgdXNlIHRoYXQKKyAgICAgICAgICAgIHNyY3N1YmRpciA9IGRpcmxpc3RbMF0KKyAgICAgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgc3Jjc3ViZGlyKQorICAgIGVsc2U6CisgICAgICAgICMgQXNzdW1lIHdlJ3JlIHBvaW50aW5nIHRvIGFuIGV4aXN0aW5nIHNvdXJjZSB0cmVlCisgICAgICAgIGlmIGFyZ3MuZXh0cmFjdF90bzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignLS1leHRyYWN0LXRvIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgc291cmNlIGlzIGEgZGlyZWN0b3J5JykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyZ3Muc291cmNlKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzb3VyY2UgZGlyZWN0b3J5ICVzJyAlIGFyZ3Muc291cmNlKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgc3JjdXJpID0gJycKKyAgICAgICAgc3JjdHJlZSA9IGFyZ3Muc291cmNlCisKKyAgICBvdXRmaWxlID0gYXJncy5vdXRmaWxlCisgICAgaWYgb3V0ZmlsZSBhbmQgb3V0ZmlsZSAhPSAnLSc6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dGZpbGUpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdPdXRwdXQgZmlsZSAlcyBhbHJlYWR5IGV4aXN0cycgJSBvdXRmaWxlKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGxpbmVzX2JlZm9yZSA9IFtdCisgICAgbGluZXNfYWZ0ZXIgPSBbXQorCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBSZWNpcGUgY3JlYXRlZCBieSAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFRoaXMgaXMgdGhlIGJhc2lzIG9mIGEgcmVjaXBlIGFuZCBtYXkgbmVlZCBmdXJ0aGVyIGVkaXRpbmcgaW4gb3JkZXIgdG8gYmUgZnVsbHkgZnVuY3Rpb25hbC4nKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgKEZlZWwgZnJlZSB0byByZW1vdmUgdGhlc2UgY29tbWVudHMgd2hlbiBlZGl0aW5nLiknKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorCisgICAgbGljdmFsdWVzID0gZ3Vlc3NfbGljZW5zZShzcmN0cmVlKQorICAgIGxpY19maWxlc19jaGtzdW0gPSBbXQorICAgIGlmIGxpY3ZhbHVlczoKKyAgICAgICAgbGljZW5zZXMgPSBbXQorICAgICAgICBmb3IgbGljdmFsdWUgaW4gbGljdmFsdWVzOgorICAgICAgICAgICAgaWYgbm90IGxpY3ZhbHVlWzBdIGluIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgIGxpY2Vuc2VzLmFwcGVuZChsaWN2YWx1ZVswXSkKKyAgICAgICAgICAgIGxpY19maWxlc19jaGtzdW0uYXBwZW5kKCdmaWxlOi8vJXM7bWQ1PSVzJyAlIChsaWN2YWx1ZVsxXSwgbGljdmFsdWVbMl0pKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFdBUk5JTkc6IHRoZSBmb2xsb3dpbmcgTElDRU5TRSBhbmQgTElDX0ZJTEVTX0NIS1NVTSB2YWx1ZXMgYXJlIGJlc3QgZ3Vlc3NlcyAtIGl0IGlzJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXRlIGFuZCBjb3JyZWN0LicpCisgICAgICAgIGlmIGxlbihsaWN2YWx1ZXMpID4gMToKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBtdWx0aXBsZSBsaWNlbnNlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQ7IGlmIHRoYXQgaXMgY29ycmVjdCB5b3Ugc2hvdWxkIHNlcGFyYXRlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgdGhlc2UgaW4gdGhlIExJQ0VOU0UgdmFsdWUgdXNpbmcgJiBpZiB0aGUgbXVsdGlwbGUgbGljZW5zZXMgYWxsIGFwcGx5LCBvciB8IGlmIHRoZXJlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgaXMgYSBjaG9pY2UgYmV0d2VlbiB0aGUgbXVsdGlwbGUgbGljZW5zZXMuIElmIGluIGRvdWJ0LCBjaGVjayB0aGUgYWNjb21wYW55aW5nJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgd2hpY2ggc2l0dWF0aW9uIGlzIGFwcGxpY2FibGUuJykKKyAgICBlbHNlOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFVuYWJsZSB0byBmaW5kIGFueSBmaWxlcyB0aGF0IGxvb2tlZCBsaWtlIGxpY2Vuc2Ugc3RhdGVtZW50cy4gQ2hlY2sgdGhlIGFjY29tcGFueWluZycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGhlYWRlcnMgYW5kIHNldCBMSUNFTlNFIGFuZCBMSUNfRklMRVNfQ0hLU1VNIGFjY29yZGluZ2x5LicpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IExJQ0VOU0UgaXMgYmVpbmcgc2V0IHRvICJDTE9TRUQiIHRvIGFsbG93IHlvdSB0byBhdCBsZWFzdCBzdGFydCBidWlsZGluZyAtIGlmJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB0aGlzIGlzIG5vdCBhY2N1cmF0ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGxpY2Vuc2luZyBvZiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQgKGl0JykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB3aWxsIG5vdCBiZSBpbiBtb3N0IGNhc2VzKSB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBjb3JyZWN0IHZhbHVlIGJlZm9yZSB1c2luZyB0aGlzJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyByZWNpcGUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gaW5pdGlhbCB0ZXN0aW5nL2RldmVsb3BtZW50IScpCisgICAgICAgIGxpY2Vuc2VzID0gWydDTE9TRUQnXQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ0xJQ0VOU0UgPSAiJXMiJyAlICcgJy5qb2luKGxpY2Vuc2VzKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdMSUNfRklMRVNfQ0hLU1VNID0gIiVzIicgJSAnIFxcXG4gICAgICAgICAgICAgICAgICAgICcuam9pbihsaWNfZmlsZXNfY2hrc3VtKSkKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorCisgICAgIyBGSVhNRSBUaGlzIGlzIGtpbmQgb2YgYSBoYWNrLCB3ZSBwcm9iYWJseSBvdWdodCB0byBiZSB1c2luZyBiaXRiYWtlIHRvIGRvIHRoaXMKKyAgICAjIHdlJ2QgYWxzbyB3YW50IGEgd2F5IHRvIGF1dG9tYXRpY2FsbHkgc2V0IG91dGZpbGUgYmFzZWQgdXBvbiBhdXRvLWRldGVjdGluZyB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgc291cmNlIGlmIHBvc3NpYmxlCisgICAgcmVjaXBlZm4gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUob3V0ZmlsZSkpWzBdCisgICAgZm5zcGxpdCA9IHJlY2lwZWZuLnNwbGl0KCdfJykKKyAgICBpZiBsZW4oZm5zcGxpdCkgPiAxOgorICAgICAgICBwbiA9IGZuc3BsaXRbMF0KKyAgICAgICAgcHYgPSBmbnNwbGl0WzFdCisgICAgZWxzZToKKyAgICAgICAgcG4gPSByZWNpcGVmbgorICAgICAgICBwdiA9IE5vbmUKKworICAgIGlmIGFyZ3MudmVyc2lvbjoKKyAgICAgICAgcHYgPSBhcmdzLnZlcnNpb24KKworICAgIGlmIHB2IGFuZCBwdiBub3QgaW4gJ2dpdCBzdm4gaGcnLnNwbGl0KCk6CisgICAgICAgIHJlYWxwdiA9IHB2CisgICAgZWxzZToKKyAgICAgICAgcmVhbHB2ID0gTm9uZQorCisgICAgaWYgc3JjdXJpOgorICAgICAgICBpZiByZWFscHY6CisgICAgICAgICAgICBzcmN1cmkgPSBzcmN1cmkucmVwbGFjZShyZWFscHYsICcke1BWfScpCisgICAgZWxzZToKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBObyBpbmZvcm1hdGlvbiBmb3IgU1JDX1VSSSB5ZXQgKG9ubHkgYW4gZXh0ZXJuYWwgc291cmNlIHRyZWUgd2FzIHNwZWNpZmllZCknKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ19VUkkgPSAiJXMiJyAlIHNyY3VyaSkKKyAgICAobWQ1dmFsdWUsIHNoYTI1NnZhbHVlKSA9IGNoZWNrc3VtcworICAgIGlmIG1kNXZhbHVlOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNfVVJJW21kNXN1bV0gPSAiJXMiJyAlIG1kNXZhbHVlKQorICAgIGlmIHNoYTI1NnZhbHVlOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdTUkNfVVJJW3NoYTI1NnN1bV0gPSAiJXMiJyAlIHNoYTI1NnZhbHVlKQorICAgIGlmIHNyY3VyaSBhbmQgc3VwcG9ydHNfc3JjcmV2KHNyY3VyaSk6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTW9kaWZ5IHRoZXNlIGFzIGRlc2lyZWQnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCdQViA9ICIlcytnaXQke1NSQ1BWfSInICUgKHJlYWxwdiBvciAnMS4wJykpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ1JFViA9ICIlcyInICUgc3JjcmV2KQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisKKyAgICBpZiBzcmNzdWJkaXIgYW5kIHB2OgorICAgICAgICBpZiBzcmNzdWJkaXIgPT0gIiVzLSVzIiAlIChwbiwgcHYpOgorICAgICAgICAgICAgIyBUaGlzIHdvdWxkIGJlIHRoZSBkZWZhdWx0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNldCBTIGluIHRoZSByZWNpcGUKKyAgICAgICAgICAgIHNyY3N1YmRpciA9ICcnCisgICAgaWYgc3Jjc3ViZGlyOgorICAgICAgICBpZiBwdiBhbmQgcHYgbm90IGluICdnaXQgc3ZuIGhnJy5zcGxpdCgpOgorICAgICAgICAgICAgc3Jjc3ViZGlyID0gc3Jjc3ViZGlyLnJlcGxhY2UocHYsICcke1BWfScpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1MgPSAiJHtXT1JLRElSfS8lcyInICUgc3Jjc3ViZGlyKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcnKQorCisgICAgaWYgcGtnYXJjaDoKKyAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdQQUNLQUdFX0FSQ0ggPSAiJXMiJyAlIHBrZ2FyY2gpCisgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKworICAgICMgRmluZCBhbGwgcGx1Z2lucyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgaGFuZGxlcnMKKyAgICBoYW5kbGVycyA9IFtdCisgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgorICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX3JlY2lwZV9oYW5kbGVycycpOgorICAgICAgICAgICAgcGx1Z2luLnJlZ2lzdGVyX3JlY2lwZV9oYW5kbGVycyhoYW5kbGVycykKKworICAgICMgQXBwbHkgdGhlIGhhbmRsZXJzCisgICAgY2xhc3NlcyA9IFtdCisgICAgaGFuZGxlZCA9IFtdCisgICAgZm9yIGhhbmRsZXIgaW4gaGFuZGxlcnM6CisgICAgICAgIGhhbmRsZXIucHJvY2VzcyhzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKQorCisgICAgb3V0bGluZXMgPSBbXQorICAgIG91dGxpbmVzLmV4dGVuZChsaW5lc19iZWZvcmUpCisgICAgaWYgY2xhc3NlczoKKyAgICAgICAgb3V0bGluZXMuYXBwZW5kKCdpbmhlcml0ICVzJyAlICcgJy5qb2luKGNsYXNzZXMpKQorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJycpCisgICAgb3V0bGluZXMuZXh0ZW5kKGxpbmVzX2FmdGVyKQorCisgICAgaWYgYXJncy5leHRyYWN0X3RvOgorICAgICAgICBzY3JpcHR1dGlscy5naXRfY29udmVydF9zdGFuZGFsb25lX2Nsb25lKHNyY3RyZWUpCisgICAgICAgIHNodXRpbC5tb3ZlKHNyY3RyZWUsIGFyZ3MuZXh0cmFjdF90bykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1NvdXJjZSBleHRyYWN0ZWQgdG8gJXMnICUgYXJncy5leHRyYWN0X3RvKQorCisgICAgaWYgb3V0ZmlsZSA9PSAnLSc6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJy5qb2luKG91dGxpbmVzKSArICdcbicpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuJy5qb2luKG91dGxpbmVzKSArICdcbicpCisgICAgICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgaGFzIGJlZW4gY3JlYXRlZDsgZnVydGhlciBlZGl0aW5nIG1heSBiZSByZXF1aXJlZCB0byBtYWtlIGl0IGZ1bGx5IGZ1bmN0aW9uYWwnICUgb3V0ZmlsZSkKKworICAgIGlmIHRlbXBzcmM6CisgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcHNyYykKKworICAgIHJldHVybiAwCisKK2RlZiBnZXRfbGljZW5zZV9tZDVzdW1zKGQsIHN0YXRpY19vbmx5PUZhbHNlKToKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICBtZDVzdW1zID0ge30KKyAgICBpZiBub3Qgc3RhdGljX29ubHk6CisgICAgICAgICMgR2F0aGVyIG1kNXN1bXMgb2YgbGljZW5zZSBmaWxlcyBpbiBjb21tb24gbGljZW5zZSBkaXIKKyAgICAgICAgY29tbW9ubGljZGlyID0gZC5nZXRWYXIoJ0NPTU1PTl9MSUNFTlNFX0RJUicsIFRydWUpCisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKGNvbW1vbmxpY2Rpcik6CisgICAgICAgICAgICBtZDV2YWx1ZSA9IGJiLnV0aWxzLm1kNV9maWxlKG9zLnBhdGguam9pbihjb21tb25saWNkaXIsIGZuKSkKKyAgICAgICAgICAgIG1kNXN1bXNbbWQ1dmFsdWVdID0gZm4KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2VyZSBleHRyYWN0ZWQgZnJvbSBjb21tb24gdmFsdWVzIGluIHZhcmlvdXMgcmVjaXBlcworICAgICMgKGRvdWJsZSBjaGVja2luZyB0aGUgbGljZW5zZSBhZ2FpbnN0IHRoZSBsaWNlbnNlIGZpbGUgaXRzZWxmLCBub3QganVzdAorICAgICMgdGhlIExJQ0VOU0UgdmFsdWUgaW4gdGhlIHJlY2lwZSkKKyAgICBtZDVzdW1zWyc5NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2IyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snNTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTInXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWycwNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2ViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snNzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyczOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snOGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGInXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWydlYmI1YzUwYWI3Y2FiNGJhZWZmYmExNDk3NzAzMGMwNyddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2M5M2MwNTUwYmQzMTczZjQ1MDRiMmNiZDg5OTFlNTBiJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snOWFjMmU3Y2ZmMWRkYWY0OGI2ZWFiNjAyOGYyM2VmODgnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyc0MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snZDc4MTBmYWI3NDg3ZmIwYWFkMzI3Yjc2ZjFiZTdjZDcnXSA9ICdHUEx2MicgIyB0aGUgTGludXgga2VybmVsJ3MgQ09QWUlORyBmaWxlCisgICAgbWQ1c3Vtc1snYmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWyc3ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJzRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjJ10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snMmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWydmYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJ2E2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzJ10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTknXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWydmYWQ5YjMzMzJiZTg5NGJhYjliYzUwMTU3Mjg2NGIyOSddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJzNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyJ10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJzI1Mjg5MGQ5ZWVlMjZhYWI3YjQzMmU4YjhhNjE2NDc1J10gPSAnTEdQTHYyJworICAgIG1kNXN1bXNbJ2QzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0J10gPSAnR1BMdjMnCisgICAgbWQ1c3Vtc1snZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDknXSA9ICdHUEx2MycKKyAgICBtZDVzdW1zWyc2YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiddID0gJ0xHUEx2MycKKyAgICBtZDVzdW1zWyczYjgzZWY5NjM4N2YxNDY1NWZjODU0ZGRjM2M2YmQ1NyddID0gJ0FwYWNoZS0yLjAnCisgICAgbWQ1c3Vtc1snMzg1YzU1NjUzODg2YWNhYzM4MjE5OTlhM2NjZDE3YjMnXSA9ICdBcnRpc3RpYy0xLjAgfCBHUEwtMi4wJyAjIHNvbWUgcGVybCBtb2R1bGVzCisgICAgcmV0dXJuIG1kNXN1bXMKKworZGVmIGd1ZXNzX2xpY2Vuc2Uoc3JjdHJlZSk6CisgICAgaW1wb3J0IGJiCisgICAgbWQ1c3VtcyA9IGdldF9saWNlbnNlX21kNXN1bXModGluZm9pbC5jb25maWdfZGF0YSkKKworICAgIGxpY2Vuc2VzID0gW10KKyAgICBsaWNzcGVjcyA9IFsnTElDRU5TRSonLCAnQ09QWUlORyonLCAnKltMbF1pY2Vuc2UqJywgJ0xJQ0VOQ0UqJywgJ0xFR0FMKicsICdbTGxdZWdhbConLCAnKkdQTConLCAnUkVBRE1FLmxpYyonLCAnQ09QWVJJR0hUKicsICdbQ2Ndb3B5cmlnaHQqJ10KKyAgICBsaWNmaWxlcyA9IFtdCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjdHJlZSk6CisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZvciBzcGVjIGluIGxpY3NwZWNzOgorICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmbiwgc3BlYyk6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZnVsbHBhdGggaW4gbGljZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaWNmaWxlcy5hcHBlbmQoZnVsbHBhdGgpCisgICAgZm9yIGxpY2ZpbGUgaW4gbGljZmlsZXM6CisgICAgICAgIG1kNXZhbHVlID0gYmIudXRpbHMubWQ1X2ZpbGUobGljZmlsZSkKKyAgICAgICAgbGljZW5zZSA9IG1kNXN1bXMuZ2V0KG1kNXZhbHVlLCAnVW5rbm93bicpCisgICAgICAgIGxpY2Vuc2VzLmFwcGVuZCgobGljZW5zZSwgb3MucGF0aC5yZWxwYXRoKGxpY2ZpbGUsIHNyY3RyZWUpLCBtZDV2YWx1ZSkpCisKKyAgICAjIEZJWE1FIHNob3VsZCB3ZSBncmFiIGF0IGxlYXN0IG9uZSBzb3VyY2UgZmlsZSB3aXRoIGEgbGljZW5zZSBoZWFkZXIgYW5kIGFkZCB0aGF0IHRvbz8KKworICAgIHJldHVybiBsaWNlbnNlcworCitkZWYgcmVhZF9wa2djb25maWdfcHJvdmlkZXMoZCk6CisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgcGtnbWFwID0ge30KKyAgICBmb3IgZm4gaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihwa2dkYXRhZGlyLCAnc2hsaWJzMicsICcqLnBjbGlzdCcpKToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHBrZ21hcFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUucnN0cmlwKCkpXSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdCisgICAgcmVjaXBlbWFwID0ge30KKyAgICBmb3IgcGMsIHBrZyBpbiBwa2dtYXAuaXRlcml0ZW1zKCk6CisgICAgICAgIHBrZ2RhdGFmaWxlID0gb3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsICdydW50aW1lJywgcGtnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BOOiAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZW1hcFtwY10gPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgIHJldHVybiByZWNpcGVtYXAKKworZGVmIGNvbnZlcnRfcGtnaW5mbyhwa2dpbmZvZmlsZSk6CisgICAgdmFsdWVzID0ge30KKyAgICB3aXRoIG9wZW4ocGtnaW5mb2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGluZGVzYzoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSArPSAnICcgKyBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc6ICcsIDEpCisgICAgICAgICAgICAgICAga2V5ID0gbGluZVswXQorICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZVsxXQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAnTElDRU5TRSc6CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdmFsdWUuc3BsaXQoJywnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGRlcC5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQgPSBkZXBtYXAuZ2V0KGRlcCwgJycpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hcHBlbmQobWFwcGVkKQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdMaWNlbnNlJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydMSUNFTlNFJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdTdW1tYXJ5JzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydTVU1NQVJZJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYga2V5ID09ICdEZXNjcmlwdGlvbic6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IFRydWUKKyAgICByZXR1cm4gdmFsdWVzCisKK2RlZiBjb252ZXJ0X2RlYmlhbihkZWJwYXRoKToKKyAgICAjIEZJWE1FIGV4dGVuZCB0aGlzIG1hcHBpbmcgLSBwZXJoYXBzIHVzZSBkaXN0cm9fYWxpYXMuaW5jPworICAgIGRlcG1hcCA9IHsnbGliei1kZXYnOiAnemxpYid9CisKKyAgICB2YWx1ZXMgPSB7fQorICAgIGRlcGVuZHMgPSBbXQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVicGF0aCwgJ2NvbnRyb2wnKSkgYXMgZjoKKyAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGluZGVzYzoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIFRoaXMgcGFja2FnZSBjb250YWlucycpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXNjID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snREVTQ1JJUFRJT04nXSArPSAnICcgKyBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KCc6JywgMSkKKyAgICAgICAgICAgICAgICBrZXkgPSBsaW5lWzBdCisgICAgICAgICAgICAgICAgdmFsdWUgPSBsaW5lWzFdCisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdCdWlsZC1EZXBlbmRzJzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB2YWx1ZS5zcGxpdCgnLCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZGVwLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZCA9IGRlcG1hcC5nZXQoZGVwLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFwcGVuZChtYXBwZWQpCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ1NlY3Rpb24nOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ1NFQ1RJT04nXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ0Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydTVU1NQVJZJ10gPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBUcnVlCisKKyAgICBpZiBkZXBlbmRzOgorICAgICAgICB2YWx1ZXNbJ0RFUEVORFMnXSA9ICcgJy5qb2luKGRlcGVuZHMpCisKKyAgICByZXR1cm4gdmFsdWVzCisKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmQoc3VicGFyc2Vycyk6CisgICAgcGFyc2VyX2NyZWF0ZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignY3JlYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZSBhIG5ldyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0NyZWF0ZXMgYSBuZXcgcmVjaXBlIGZyb20gYSBzb3VyY2UgdHJlZScpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJ3NvdXJjZScsIGhlbHA9J1BhdGggb3IgVVJMIHRvIHNvdXJjZScpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0ZmlsZScsIGhlbHA9J1NwZWNpZnkgZmlsZW5hbWUgZm9yIHJlY2lwZSB0byBjcmVhdGUnLCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctbScsICctLW1hY2hpbmUnLCBoZWxwPSdNYWtlIHJlY2lwZSBtYWNoaW5lLXNwZWNpZmljIGFzIG9wcG9zZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leHRyYWN0LXRvJywgbWV0YXZhcj0nRVhUUkFDVFBBVEgnLCBoZWxwPSdBc3N1bWluZyBzb3VyY2UgaXMgYSBVUkwsIGZldGNoIGl0IGFuZCBleHRyYWN0IGl0IHRvIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGFzICUobWV0YXZhcilzJykKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLVYnLCAnLS12ZXJzaW9uJywgaGVscD0nVmVyc2lvbiB0byB1c2Ugd2l0aGluIHJlY2lwZSAoUFYpJykKKyAgICBwYXJzZXJfY3JlYXRlLnNldF9kZWZhdWx0cyhmdW5jPWNyZWF0ZV9yZWNpcGUpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMTRhNTMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzLnB5CkBAIC0wLDAgKzEsMzE2IEBACisjIFJlY2lwZSBjcmVhdGlvbiB0b29sIC0gY3JlYXRlIGNvbW1hbmQgYnVpbGQgc3lzdGVtIGhhbmRsZXJzCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHJlCitpbXBvcnQgbG9nZ2luZworZnJvbSByZWNpcGV0b29sLmNyZWF0ZSBpbXBvcnQgUmVjaXBlSGFuZGxlciwgcmVhZF9wa2djb25maWdfcHJvdmlkZXMKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQorCit0aW5mb2lsID0gTm9uZQorCitkZWYgdGluZm9pbF9pbml0KGluc3RhbmNlKToKKyAgICBnbG9iYWwgdGluZm9pbAorICAgIHRpbmZvaWwgPSBpbnN0YW5jZQorCitjbGFzcyBDbWFrZVJlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ0NNYWtlTGlzdHMudHh0J10pOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ2NtYWtlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gY21ha2UgdXNpbmcgRVhUUkFfT0VDTUFLRTonKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdFWFRSQV9PRUNNQUtFID0gIiInKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBTY29uc1JlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ1NDb25zdHJ1Y3QnLCAnU2NvbnN0cnVjdCcsICdzY29uc3RydWN0J10pOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ3Njb25zJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gc2NvbnMgdXNpbmcgRVhUUkFfT0VTQ09OUzonKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdFWFRSQV9PRVNDT05TID0gIiInKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBRbWFrZVJlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJyoucHJvJ10pOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ3FtYWtlMicpCisgICAgICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEF1dG90b29sc1JlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGF1dG9jb25mID0gRmFsc2UKKyAgICAgICAgaWYgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnY29uZmlndXJlLmFjJywgJ2NvbmZpZ3VyZS5pbiddKToKKyAgICAgICAgICAgIGF1dG9jb25mID0gVHJ1ZQorICAgICAgICAgICAgdmFsdWVzID0gQXV0b3Rvb2xzUmVjaXBlSGFuZGxlci5leHRyYWN0X2F1dG90b29sc19kZXBzKGxpbmVzX2JlZm9yZSwgc3JjdHJlZSkKKyAgICAgICAgICAgIGNsYXNzZXMuZXh0ZW5kKHZhbHVlcy5wb3AoJ2luaGVyaXQnLCAnJykuc3BsaXQoKSkKKyAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCclcyA9ICIlcyInICUgKHZhciwgdmFsdWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29uZmZpbGUgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydjb25maWd1cmUnXSkKKyAgICAgICAgICAgIGlmIGNvbmZmaWxlOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhpcyBpcyBqdXN0IGEgcHJlLWdlbmVyYXRlZCBhdXRvY29uZiBjb25maWd1cmUgc2NyaXB0CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZmaWxlWzBdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mJyBpbiBmLnJlYWRsaW5lKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbmYgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBhdXRvY29uZjoKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogaWYgdGhpcyBzb2Z0d2FyZSBpcyBub3QgY2FwYWJsZSBvZiBiZWluZyBidWlsdCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIGZyb20gdGhlIHNvdXJjZSwgeW91IHNob3VsZCByZXBsYWNlIGF1dG90b29scyB3aXRoIGF1dG90b29scy1icm9rZW5zZXAgaW4gdGhlJykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgaW5oZXJpdCBsaW5lJykKKyAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKCdhdXRvdG9vbHMnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFNwZWNpZnkgYW55IG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgY29uZmlndXJlIHNjcmlwdCB1c2luZyBFWFRSQV9PRUNPTkY6JykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnRVhUUkFfT0VDT05GID0gIiInKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4dHJhY3RfYXV0b3Rvb2xzX2RlcHMob3V0bGluZXMsIHNyY3RyZWUsIGFjZmlsZT1Ob25lKToKKyAgICAgICAgaW1wb3J0IHNobGV4CisgICAgICAgIGltcG9ydCBvZS5wYWNrYWdlCisKKyAgICAgICAgdmFsdWVzID0ge30KKyAgICAgICAgaW5oZXJpdHMgPSBbXQorCisgICAgICAgICMgRklYTUUgdGhpcyBtYXBwaW5nIGlzIHZlcnkgdGhpbgorICAgICAgICBwcm9nbWFwID0geydmbGV4JzogJ2ZsZXgtbmF0aXZlJywKKyAgICAgICAgICAgICAgICAnYmlzb24nOiAnYmlzb24tbmF0aXZlJywKKyAgICAgICAgICAgICAgICAnbTQnOiAnbTQtbmF0aXZlJ30KKyAgICAgICAgcHJvZ2NsYXNzbWFwID0geydnY29uZnRvb2wtMic6ICdnY29uZicsCisgICAgICAgICAgICAgICAgJ3BrZy1jb25maWcnOiAncGtnY29uZmlnJ30KKworICAgICAgICBpZ25vcmVkZXBzID0gWydnY2MtcnVudGltZScsICdnbGliYycsICd1Y2xpYmMnXQorCisgICAgICAgIHBrZ19yZSA9IHJlLmNvbXBpbGUoJ1BLR19DSEVDS19NT0RVTEVTXChcWz9bYS16QS1aMC05XSpcXT8sIFxbPyhbXixcXV0qKVspLF0uKicpCisgICAgICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoJ0FDX0NIRUNLX0xJQlwoXFs/KFthLXpBLVowLTldKilcXT8sIC4qJykKKyAgICAgICAgcHJvZ3NfcmUgPSByZS5jb21waWxlKCdfUFJPR1M/XChcWz9bYS16QS1aMC05XSpcXT8sIFxbPyhbXixcXV0qKVxdP1spLF0uKicpCisgICAgICAgIGRlcF9yZSA9IHJlLmNvbXBpbGUoJyhbXiA+PD1dKykoIFs8Pj1dKyBbXiA+PD1dKyk/JykKKworICAgICAgICAjIEJ1aWxkIHVwIGxpYiBsaWJyYXJ5LT5wYWNrYWdlIG1hcHBpbmcKKyAgICAgICAgc2hsaWJfcHJvdmlkZXJzID0gb2UucGFja2FnZS5yZWFkX3NobGliX3Byb3ZpZGVycyh0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgICAgICBsaWJkaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKyAgICAgICAgYmFzZV9saWJkaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignYmFzZV9saWJkaXInLCBUcnVlKQorICAgICAgICBsaWJwYXRocyA9IGxpc3Qoc2V0KFtiYXNlX2xpYmRpciwgbGliZGlyXSkpCisgICAgICAgIGxpYm5hbWVfcmUgPSByZS5jb21waWxlKCdebGliKC4rKVwuc28uKiQnKQorICAgICAgICBwa2dsaWJtYXAgPSB7fQorICAgICAgICBmb3IgbGliLCBpdGVtIGluIHNobGliX3Byb3ZpZGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBwYXRoLCBwa2cgaW4gaXRlbS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBwYXRoIGluIGxpYnBhdGhzOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBsaWJuYW1lX3JlLm1hdGNoKGxpYikKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGlibmFtZSA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpYm5hbWUgaW4gcGtnbGlibWFwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2xpYm1hcFtsaWJuYW1lXSA9IHBrZ1swXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCd1bmFibGUgdG8gZXh0cmFjdCBsaWJyYXJ5IG5hbWUgZnJvbSAlcycgJSBsaWIpCisKKyAgICAgICAgIyBOb3cgdHVybiBpdCBpbnRvIGEgbGlicmFyeS0+cmVjaXBlIG1hcHBpbmcKKyAgICAgICAgcmVjaXBlbGlibWFwID0ge30KKyAgICAgICAgcGtnZGF0YV9kaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgICAgICBmb3IgbGlibmFtZSwgcGtnIGluIHBrZ2xpYm1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsIHBrZykpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BOOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZWxpYm1hcFtsaWJuYW1lXSA9IGxpbmUuc3BsaXQoJzonLCAxKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBpb2U6CisgICAgICAgICAgICAgICAgaWYgaW9lLmVycm5vID09IDI6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCd1bmFibGUgdG8gZmluZCBhIHBrZ2RhdGEgZmlsZSBmb3IgcGFja2FnZSAlcycgJSBwa2cpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAjIFNpbmNlIGEgY29uZmlndXJlLmFjIGZpbGUgaXMgZXNzZW50aWFsbHkgYSBwcm9ncmFtLCB0aGlzIGlzIG9ubHkgZXZlciBnb2luZyB0byBiZQorICAgICAgICAjIGEgaGFjayB1bmZvcnR1bmF0ZWx5OyBidXQgaXQgb3VnaHQgdG8gYmUgZW5vdWdoIG9mIGFuIGFwcHJveGltYXRpb24KKyAgICAgICAgaWYgYWNmaWxlOgorICAgICAgICAgICAgc3JjZmlsZXMgPSBbYWNmaWxlXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3JjZmlsZXMgPSBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydjb25maWd1cmUuYWMnLCAnY29uZmlndXJlLmluJ10pCisgICAgICAgIHBjZGVwcyA9IFtdCisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICB1bm1hcHBlZCA9IFtdCisgICAgICAgIHVubWFwcGVkbGlicyA9IFtdCisgICAgICAgIHdpdGggb3BlbihzcmNmaWxlc1swXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiAnUEtHX0NIRUNLX01PRFVMRVMnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHBrZ19yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gZGVwX3JlLmZpbmRhbGwocmVzLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjZGVwcy5leHRlbmQoW3hbMF0gZm9yIHggaW4gcmVzXSkKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMuYXBwZW5kKCdwa2djb25maWcnKQorICAgICAgICAgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnQU1fR05VX0dFVFRFWFQnKToKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMuYXBwZW5kKCdnZXR0ZXh0JykKKyAgICAgICAgICAgICAgICBlbGlmICdBQ19DSEVDS19QUk9HJyBpbiBsaW5lIG9yICdBQ19QQVRIX1BST0cnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHByb2dzX3JlLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvZyBpbiBzaGxleC5zcGxpdChyZXMuZ3JvdXAoMSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2cgPSBwcm9nLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9nY2xhc3MgPSBwcm9nY2xhc3NtYXAuZ2V0KHByb2csIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvZ2NsYXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0cy5hcHBlbmQocHJvZ2NsYXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dkZXAgPSBwcm9nbWFwLmdldChwcm9nLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm9nZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQocHJvZ2RlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwcm9nLnN0YXJ0c3dpdGgoJyQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hcHBlZC5hcHBlbmQocHJvZykKKyAgICAgICAgICAgICAgICBlbGlmICdBQ19DSEVDS19MSUInIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IGxpYl9yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGliID0gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJkZXAgPSByZWNpcGVsaWJtYXAuZ2V0KGxpYiwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpYmRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChsaWJkZXApCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpYmRlcCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGliLnN0YXJ0c3dpdGgoJyQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWFwcGVkbGlicy5hcHBlbmQobGliKQorICAgICAgICAgICAgICAgIGVsaWYgJ0FDX1BBVEhfWCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoJ2xpYngxMScpCisKKyAgICAgICAgaWYgdW5tYXBwZWQ6CisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgTk9URTogdGhlIGZvbGxvd2luZyBwcm9nIGRlcGVuZGVuY2llcyBhcmUgdW5rbm93biwgaWdub3Jpbmc6ICVzJyAlICcgJy5qb2luKHVubWFwcGVkKSkKKworICAgICAgICBpZiB1bm1hcHBlZGxpYnM6CisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgTk9URTogdGhlIGZvbGxvd2luZyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgdW5rbm93biwgaWdub3Jpbmc6ICVzJyAlICcgJy5qb2luKHVubWFwcGVkbGlicykpCisgICAgICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJyMgICAgICAgKHRoaXMgaXMgYmFzZWQgb24gcmVjaXBlcyB0aGF0IGhhdmUgcHJldmlvdXNseSBiZWVuIGJ1aWx0IGFuZCBwYWNrYWdlZCknKQorCisgICAgICAgIHJlY2lwZW1hcCA9IHJlYWRfcGtnY29uZmlnX3Byb3ZpZGVzKHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIHVubWFwcGVkID0gW10KKyAgICAgICAgZm9yIHBjZGVwIGluIHBjZGVwczoKKyAgICAgICAgICAgIHJlY2lwZSA9IHJlY2lwZW1hcC5nZXQocGNkZXAsIE5vbmUpCisgICAgICAgICAgICBpZiByZWNpcGU6CisgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQocmVjaXBlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgcGNkZXAuc3RhcnRzd2l0aCgnJCcpOgorICAgICAgICAgICAgICAgICAgICB1bm1hcHBlZC5hcHBlbmQocGNkZXApCisKKyAgICAgICAgZGVwcyA9IHNldChkZXBzKS5kaWZmZXJlbmNlKHNldChpZ25vcmVkZXBzKSkKKworICAgICAgICBpZiB1bm1hcHBlZDoKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnIyBOT1RFOiB1bmFibGUgdG8gbWFwIHRoZSBmb2xsb3dpbmcgcGtnLWNvbmZpZyBkZXBlbmRlbmNpZXM6ICVzJyAlICcgJy5qb2luKHVubWFwcGVkKSkKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnIyAgICAgICAodGhpcyBpcyBiYXNlZCBvbiByZWNpcGVzIHRoYXQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYnVpbHQgYW5kIHBhY2thZ2VkKScpCisKKyAgICAgICAgaWYgZGVwczoKKyAgICAgICAgICAgIHZhbHVlc1snREVQRU5EUyddID0gJyAnLmpvaW4oZGVwcykKKworICAgICAgICBpZiBpbmhlcml0czoKKyAgICAgICAgICAgIHZhbHVlc1snaW5oZXJpdCddID0gJyAnLmpvaW4obGlzdChzZXQoaW5oZXJpdHMpKSkKKworICAgICAgICByZXR1cm4gdmFsdWVzCisKKworY2xhc3MgTWFrZWZpbGVSZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBtYWtlZmlsZSA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ01ha2VmaWxlJ10pCisgICAgICAgIGlmIG1ha2VmaWxlOgorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIE5PVEU6IHRoaXMgaXMgYSBNYWtlZmlsZS1vbmx5IHBpZWNlIG9mIHNvZnR3YXJlLCBzbyB3ZSBjYW5ub3QgZ2VuZXJhdGUgbXVjaCBvZiB0aGUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIHJlY2lwZSBhdXRvbWF0aWNhbGx5IC0geW91IHdpbGwgbmVlZCB0byBleGFtaW5lIHRoZSBNYWtlZmlsZSB5b3Vyc2VsZiBhbmQgZW5zdXJlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbi4nKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorCisgICAgICAgICAgICBzY2FuZmlsZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCAnY29uZmlndXJlLnNjYW4nKQorICAgICAgICAgICAgc2tpcHNjYW4gPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gYmIucHJvY2Vzcy5ydW4oJ2F1dG9zY2FuJywgY3dkPXNyY3RyZWUsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNraXBzY2FuID0gVHJ1ZQorICAgICAgICAgICAgaWYgc2NhbmZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKHNjYW5maWxlKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSBBdXRvdG9vbHNSZWNpcGVIYW5kbGVyLmV4dHJhY3RfYXV0b3Rvb2xzX2RlcHMobGluZXNfYmVmb3JlLCBzcmN0cmVlLCBhY2ZpbGU9c2NhbmZpbGUpCisgICAgICAgICAgICAgICAgY2xhc3Nlcy5leHRlbmQodmFsdWVzLnBvcCgnaW5oZXJpdCcsICcnKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgIGZvciB2YXIsIHZhbHVlIGluIHZhbHVlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyID09ICdERVBFTkRTJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogc29tZSBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgbWF5IGJlIG9wdGlvbmFsLCBjaGVjayB0aGUgTWFrZWZpbGUgYW5kL29yIHVwc3RyZWFtIGRvY3VtZW50YXRpb24nKQorICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCclcyA9ICIlcyInICUgKHZhciwgdmFsdWUpKQorICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gWydjb25maWd1cmUuc2NhbicsICdhdXRvc2Nhbi5sb2cnXToKKyAgICAgICAgICAgICAgICAgICAgZnAgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgZikKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZnApOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZwKQorCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9fY29uZmlndXJlJywgWycjIFNwZWNpZnkgYW55IG5lZWRlZCBjb25maWd1cmUgY29tbWFuZHMgaGVyZSddKQorCisgICAgICAgICAgICBmdW5jID0gW10KKyAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIFlvdSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgbmVlZCB0byBhZGQgYWRkaXRpb25hbCBhcmd1bWVudHMgaGVyZScpCisgICAgICAgICAgICBmdW5jLmFwcGVuZCgnb2VfcnVubWFrZScpCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9fY29tcGlsZScsIGZ1bmMpCisKKyAgICAgICAgICAgIGluc3RhbGx0YXJnZXQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBiYi5wcm9jZXNzLnJ1bignbWFrZSAtcW4gaW5zdGFsbCcsIGN3ZD1zcmN0cmVlLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmV4aXRjb2RlICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGx0YXJnZXQgPSBGYWxzZQorICAgICAgICAgICAgZnVuYyA9IFtdCisgICAgICAgICAgICBpZiBpbnN0YWxsdGFyZ2V0OgorICAgICAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIFRoaXMgaXMgYSBndWVzczsgYWRkaXRpb25hbCBhcmd1bWVudHMgbWF5IGJlIHJlcXVpcmVkJykKKyAgICAgICAgICAgICAgICBtYWtlYXJncyA9ICcnCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlWzBdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwMCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnREVTVERJUicgaW4gZi5yZWFkbGluZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VhcmdzICs9ICIgJ0RFU1RESVI9JHtEfSciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmdW5jLmFwcGVuZCgnb2VfcnVubWFrZSBpbnN0YWxsJXMnICUgbWFrZWFyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIE5PVEU6IHVuYWJsZSB0byBkZXRlcm1pbmUgd2hhdCB0byBwdXQgaGVyZSAtIHRoZXJlIGlzIGEgTWFrZWZpbGUgYnV0IG5vJykKKyAgICAgICAgICAgICAgICBmdW5jLmFwcGVuZCgnIyB0YXJnZXQgbmFtZWQgImluc3RhbGwiLCBzbyB5b3Ugd2lsbCBuZWVkIHRvIGRlZmluZSB0aGlzIHlvdXJzZWxmJykKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19pbnN0YWxsJywgZnVuYykKKworICAgICAgICAgICAgaGFuZGxlZC5hcHBlbmQoJ2J1aWxkc3lzdGVtJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBOT1RFOiBubyBNYWtlZmlsZSBmb3VuZCwgdW5hYmxlIHRvIGRldGVybWluZSB3aGF0IG5lZWRzIHRvIGJlIGRvbmUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2NvbmZpZ3VyZScsIFsnIyBTcGVjaWZ5IGFueSBuZWVkZWQgY29uZmlndXJlIGNvbW1hbmRzIGhlcmUnXSkKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19jb21waWxlJywgWycjIFNwZWNpZnkgY29tcGlsYXRpb24gY29tbWFuZHMgaGVyZSddKQorICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2luc3RhbGwnLCBbJyMgU3BlY2lmeSBpbnN0YWxsIGNvbW1hbmRzIGhlcmUnXSkKKworCitkZWYgcmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzKGhhbmRsZXJzKToKKyAgICAjIFRoZXNlIGFyZSBpbiBhIHNwZWNpZmljIG9yZGVyIHNvIHRoYXQgdGhlIHJpZ2h0IG9uZSBpcyBkZXRlY3RlZCBmaXJzdAorICAgIGhhbmRsZXJzLmFwcGVuZChDbWFrZVJlY2lwZUhhbmRsZXIoKSkKKyAgICBoYW5kbGVycy5hcHBlbmQoQXV0b3Rvb2xzUmVjaXBlSGFuZGxlcigpKQorICAgIGhhbmRsZXJzLmFwcGVuZChTY29uc1JlY2lwZUhhbmRsZXIoKSkKKyAgICBoYW5kbGVycy5hcHBlbmQoUW1ha2VSZWNpcGVIYW5kbGVyKCkpCisgICAgaGFuZGxlcnMuYXBwZW5kKE1ha2VmaWxlUmVjaXBlSGFuZGxlcigpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFmMmEwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkKQEAgLTAsMCArMSw3MTYgQEAKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBjcmVhdGUgYnVpbGQgc3lzdGVtIGhhbmRsZXIgZm9yIHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgYXN0CitpbXBvcnQgY29kZWNzCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weQoraW1wb3J0IGVtYWlsCitpbXBvcnQgaW1wCitpbXBvcnQgZ2xvYgoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSByZWNpcGV0b29sLmNyZWF0ZSBpbXBvcnQgUmVjaXBlSGFuZGxlcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncmVjaXBldG9vbCcpCisKK3RpbmZvaWwgPSBOb25lCisKKworZGVmIHRpbmZvaWxfaW5pdChpbnN0YW5jZSk6CisgICAgZ2xvYmFsIHRpbmZvaWwKKyAgICB0aW5mb2lsID0gaW5zdGFuY2UKKworCitjbGFzcyBQeXRob25SZWNpcGVIYW5kbGVyKFJlY2lwZUhhbmRsZXIpOgorICAgIGJhc2VfcGtnZGVwcyA9IFsncHl0aG9uLWNvcmUnXQorICAgIGV4Y2x1ZGVkX3BrZ2RlcHMgPSBbJ3B5dGhvbi1kYmcnXQorICAgICMgb3MucGF0aCBpcyBwcm92aWRlZCBieSBweXRob24tY29yZQorICAgIGFzc3VtZV9wcm92aWRlZCA9IFsnYnVpbHRpbnMnLCAnb3MucGF0aCddCisgICAgIyBBc3N1bWVzIHRoYXQgdGhlIGhvc3QgcHl0aG9uIGJ1aWx0aW5fbW9kdWxlX25hbWVzIGlzIHNhbmUgZm9yIHRhcmdldCB0b28KKyAgICBhc3N1bWVfcHJvdmlkZWQgPSBhc3N1bWVfcHJvdmlkZWQgKyBsaXN0KHN5cy5idWlsdGluX21vZHVsZV9uYW1lcykKKworICAgIGJidmFyX21hcCA9IHsKKyAgICAgICAgJ05hbWUnOiAnUE4nLAorICAgICAgICAnVmVyc2lvbic6ICdQVicsCisgICAgICAgICdIb21lLXBhZ2UnOiAnSE9NRVBBR0UnLAorICAgICAgICAnU3VtbWFyeSc6ICdTVU1NQVJZJywKKyAgICAgICAgJ0Rlc2NyaXB0aW9uJzogJ0RFU0NSSVBUSU9OJywKKyAgICAgICAgJ0xpY2Vuc2UnOiAnTElDRU5TRScsCisgICAgICAgICdSZXF1aXJlcyc6ICdSREVQRU5EU18ke1BOfScsCisgICAgICAgICdQcm92aWRlcyc6ICdSUFJPVklERVNfJHtQTn0nLAorICAgICAgICAnT2Jzb2xldGVzJzogJ1JSRVBMQUNFU18ke1BOfScsCisgICAgfQorICAgICMgUE4vUFYgYXJlIGFscmVhZHkgc2V0IGJ5IHJlY2lwZXRvb2wgY29yZSAmIGRlc2MgY2FuIGJlIGV4dHJlbWVseSBsb25nCisgICAgZXhjbHVkZWRfZmllbGRzID0gWworICAgICAgICAnTmFtZScsCisgICAgICAgICdWZXJzaW9uJywKKyAgICAgICAgJ0Rlc2NyaXB0aW9uJywKKyAgICBdCisgICAgc2V0dXBfcGFyc2VfbWFwID0geworICAgICAgICAnVXJsJzogJ0hvbWUtcGFnZScsCisgICAgICAgICdDbGFzc2lmaWVycyc6ICdDbGFzc2lmaWVyJywKKyAgICAgICAgJ0Rlc2NyaXB0aW9uJzogJ1N1bW1hcnknLAorICAgIH0KKyAgICBzZXR1cGFyZ19tYXAgPSB7CisgICAgICAgICdIb21lLXBhZ2UnOiAndXJsJywKKyAgICAgICAgJ0NsYXNzaWZpZXInOiAnY2xhc3NpZmllcnMnLAorICAgICAgICAnU3VtbWFyeSc6ICdkZXNjcmlwdGlvbicsCisgICAgICAgICdEZXNjcmlwdGlvbic6ICdsb25nLWRlc2NyaXB0aW9uJywKKyAgICB9CisgICAgIyBWYWx1ZXMgd2hpY2ggYXJlIGxpc3RzLCB1c2VkIGJ5IHRoZSBzZXR1cC5weSBhcmd1bWVudCBiYXNlZCBtZXRhZGF0YQorICAgICMgZXh0cmFjdGlvbiBtZXRob2QsIHRvIGRldGVybWluZSBob3cgdG8gcHJvY2VzcyB0aGUgc2V0dXAucHkgb3V0cHV0LgorICAgIHNldHVwYXJnX2xpc3RfZmllbGRzID0gWworICAgICAgICAnQ2xhc3NpZmllcicsCisgICAgICAgICdSZXF1aXJlcycsCisgICAgICAgICdQcm92aWRlcycsCisgICAgICAgICdPYnNvbGV0ZXMnLAorICAgICAgICAnUGxhdGZvcm0nLAorICAgICAgICAnU3VwcG9ydGVkLVBsYXRmb3JtJywKKyAgICBdCisgICAgc2V0dXBhcmdfbXVsdGlfbGluZV92YWx1ZXMgPSBbJ0Rlc2NyaXB0aW9uJ10KKyAgICByZXBsYWNlbWVudHMgPSBbCisgICAgICAgICgnTGljZW5zZScsIHInICcsICctJyksCisgICAgICAgICgnTGljZW5zZScsIHInLUxpY2Vuc2UkJywgJycpLAorICAgICAgICAoJ0xpY2Vuc2UnLCByJ15VTktOT1dOJCcsICcnKSwKKworICAgICAgICAjIFJlbW92ZSBjdXJyZW50bHkgdW5oYW5kbGVkIHZlcnNpb24gbnVtYmVycyBmcm9tIHRoZXNlIHZhcmlhYmxlcworICAgICAgICAoJ1JlcXVpcmVzJywgcicgKlwoW14pXSpcKScsICcnKSwKKyAgICAgICAgKCdQcm92aWRlcycsIHInICpcKFteKV0qXCknLCAnJyksCisgICAgICAgICgnT2Jzb2xldGVzJywgcicgKlwoW14pXSpcKScsICcnKSwKKyAgICAgICAgKCdJbnN0YWxsLXJlcXVpcmVzJywgcideKFtePjw9IF0rKS4qJywgcidcMScpLAorICAgICAgICAoJ0V4dHJhcy1yZXF1aXJlJywgcideKFtePjw9IF0rKS4qJywgcidcMScpLAorICAgICAgICAoJ1Rlc3RzLXJlcXVpcmUnLCByJ14oW14+PD0gXSspLionLCByJ1wxJyksCisKKyAgICAgICAgIyBSZW1vdmUgdW5oYW5kbGVkIGRlcGVuZGVuY3kgb24gcGFydGljdWxhciBmZWF0dXJlcyAoZS5nLiBmb29bUERGXSkKKyAgICAgICAgKCdJbnN0YWxsLXJlcXVpcmVzJywgcidcW1teXF1dK1xdJCcsICcnKSwKKyAgICBdCisKKyAgICBjbGFzc2lmaWVyX2xpY2Vuc2VfbWFwID0geworICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQWNhZGVtaWMgRnJlZSBMaWNlbnNlIChBRkwpJzogJ0FGTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSc6ICdBcGFjaGUnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlJzogJ0FQU0wnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQXJ0aXN0aWMgTGljZW5zZSc6ICdBcnRpc3RpYycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBdHRyaWJ1dGlvbiBBc3N1cmFuY2UgTGljZW5zZSc6ICdBQUwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQlNEIExpY2Vuc2UnOiAnQlNEJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IENvbW1vbiBQdWJsaWMgTGljZW5zZSc6ICdDUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogRWlmZmVsIEZvcnVtIExpY2Vuc2UnOiAnRUZMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIDEuMCAoRVVQTCAxLjApJzogJ0VVUEwtMS4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIDEuMSAoRVVQTCAxLjEpJzogJ0VVUEwtMS4xJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyBvciBsYXRlciAoQUdQTHYzKyknOiAnQUdQTC0zLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2Myc6ICdBR1BMLTMuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgKEZETCknOiAnR0ZETCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSc6ICdHUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgKEdQTHYyKSc6ICdHUEwtMi4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIG9yIGxhdGVyIChHUEx2MispJzogJ0dQTC0yLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzIChHUEx2MyknOiAnR1BMLTMuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyBvciBsYXRlciAoR1BMdjMrKSc6ICdHUEwtMy4wKycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgKExHUEx2MiknOiAnTEdQTC0yLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIG9yIGxhdGVyIChMR1BMdjIrKSc6ICdMR1BMLTIuMCsnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzIChMR1BMdjMpJzogJ0xHUEwtMy4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MyBvciBsYXRlciAoTEdQTHYzKyknOiAnTEdQTC0zLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBMaWJyYXJ5IG9yIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKSc6ICdMR1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IElCTSBQdWJsaWMgTGljZW5zZSc6ICdJUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogSVNDIExpY2Vuc2UgKElTQ0wpJzogJ0lTQycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBJbnRlbCBPcGVuIFNvdXJjZSBMaWNlbnNlJzogJ0ludGVsJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEphYmJlciBPcGVuIFNvdXJjZSBMaWNlbnNlJzogJ0phYmJlcicsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZSc6ICdNSVQnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUUkUgQ29sbGFib3JhdGl2ZSBWaXJ0dWFsIFdvcmtzcGFjZSBMaWNlbnNlIChDVlcpJzogJ0NWV0wnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTW90b3NvdG8gTGljZW5zZSc6ICdNb3Rvc290bycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMCAoTVBMKSc6ICdNUEwtMS4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIChNUEwgMS4xKSc6ICdNUEwtMS4xJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIChNUEwgMi4wKSc6ICdNUEwtMi4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE5ldGhhY2sgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSc6ICdOR1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE5va2lhIE9wZW4gU291cmNlIExpY2Vuc2UnOiAnTm9raWEnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogT3BlbiBHcm91cCBUZXN0IFN1aXRlIExpY2Vuc2UnOiAnT0dUU0wnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogUHl0aG9uIExpY2Vuc2UgKENOUkkgUHl0aG9uIExpY2Vuc2UpJzogJ0NOUkktUHl0aG9uJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIExpY2Vuc2UnOiAnUFNGJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFF0IFB1YmxpYyBMaWNlbnNlIChRUEwpJzogJ1FQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBSaWNvaCBTb3VyY2UgQ29kZSBQdWJsaWMgTGljZW5zZSc6ICdSU0NQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBTbGVlcHljYXQgTGljZW5zZSc6ICdTbGVlcHljYXQnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogU3VuIEluZHVzdHJ5IFN0YW5kYXJkcyBTb3VyY2UgTGljZW5zZSAoU0lTU0wpJzogJy0tICBTdW4gSW5kdXN0cnkgU3RhbmRhcmRzIFNvdXJjZSBMaWNlbnNlIChTSVNTTCknLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogU3VuIFB1YmxpYyBMaWNlbnNlJzogJ1NQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EgT3BlbiBTb3VyY2UgTGljZW5zZSc6ICdOQ1NBJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlIDEuMCc6ICdWU0wtMS4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFczQyBMaWNlbnNlJzogJ1czQycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBYLk5ldCBMaWNlbnNlJzogJ1huZXQnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogWm9wZSBQdWJsaWMgTGljZW5zZSc6ICdaUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogemxpYi9saWJwbmcgTGljZW5zZSc6ICdabGliJywKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICBpZiAnYnVpbGRzeXN0ZW0nIGluIGhhbmRsZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBub3QgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnc2V0dXAucHknXSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHNldHVwLnB5IGlzIGFsd2F5cyBwYXJzZWQgdG8gZ2V0IGF0IGNlcnRhaW4gcmVxdWlyZWQgaW5mb3JtYXRpb24sIHN1Y2ggYXMKKyAgICAgICAgIyBkaXN0dXRpbHMgdnMgc2V0dXB0b29scworICAgICAgICAjCisgICAgICAgICMgSWYgZWdnIGluZm8gaXMgYXZhaWxhYmxlLCB3ZSB1c2UgaXQgZm9yIGJvdGggaXRzIFBLRy1JTkZPIG1ldGFkYXRhCisgICAgICAgICMgYW5kIGZvciBpdHMgcmVxdWlyZXMudHh0IGZvciBpbnN0YWxsX3JlcXVpcmVzLgorICAgICAgICAjIElmIFBLRy1JTkZPIGlzIGF2YWlsYWJsZSBidXQgbm8gZWdnIGluZm8gaXMsIHdlIHVzZSB0aGF0IGZvciBtZXRhZGF0YSBpbiBwcmVmZXJlbmNlIHRvCisgICAgICAgICMgdGhlIHBhcnNlZCBzZXR1cC5weSwgYnV0IHVzZSB0aGUgaW5zdGFsbF9yZXF1aXJlcyBpbmZvIGZyb20gdGhlCisgICAgICAgICMgcGFyc2VkIHNldHVwLnB5LgorCisgICAgICAgIHNldHVwc2NyaXB0ID0gb3MucGF0aC5qb2luKHNyY3RyZWUsICdzZXR1cC5weScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNldHVwX2luZm8sIHVzZXNfc2V0dXB0b29scywgc2V0dXBfbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zID0gc2VsZi5wYXJzZV9zZXR1cF9weShzZXR1cHNjcmlwdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBzZXR1cC5weSIpCisgICAgICAgICAgICBzZXR1cF9pbmZvLCB1c2VzX3NldHVwdG9vbHMsIHNldHVwX25vbl9saXRlcmFscywgZXh0ZW5zaW9ucyA9IHt9LCBUcnVlLCBbXSwgW10KKworICAgICAgICBlZ2dpbmZvID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihzcmN0cmVlLCAnKi5lZ2ctaW5mbycpKQorICAgICAgICBpZiBlZ2dpbmZvOgorICAgICAgICAgICAgaW5mbyA9IHNlbGYuZ2V0X3BrZ2luZm8ob3MucGF0aC5qb2luKGVnZ2luZm9bMF0sICdQS0ctSU5GTycpKQorICAgICAgICAgICAgcmVxdWlyZXNfdHh0ID0gb3MucGF0aC5qb2luKGVnZ2luZm9bMF0sICdyZXF1aXJlcy50eHQnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmVxdWlyZXNfdHh0KToKKyAgICAgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHJlcXVpcmVzX3R4dCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgaW5zdF9yZXEgPSBbXQorICAgICAgICAgICAgICAgICAgICBleHRyYXNfcmVxID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9mZWF0dXJlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnWycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZmVhdHVyZSA9IGxpbmVbMTotMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgY3VycmVudF9mZWF0dXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhc19yZXFbY3VycmVudF9mZWF0dXJlXS5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdF9yZXEuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGluZm9bJ0luc3RhbGwtcmVxdWlyZXMnXSA9IGluc3RfcmVxCisgICAgICAgICAgICAgICAgICAgIGluZm9bJ0V4dHJhcy1yZXF1aXJlJ10gPSBleHRyYXNfcmVxCisgICAgICAgIGVsaWYgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnUEtHLUlORk8nXSk6CisgICAgICAgICAgICBpbmZvID0gc2VsZi5nZXRfcGtnaW5mbyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJ1BLRy1JTkZPJykpCisKKyAgICAgICAgICAgIGlmIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgaWYgJ0luc3RhbGwtcmVxdWlyZXMnIGluIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgICAgIGluZm9bJ0luc3RhbGwtcmVxdWlyZXMnXSA9IHNldHVwX2luZm9bJ0luc3RhbGwtcmVxdWlyZXMnXQorICAgICAgICAgICAgICAgIGlmICdFeHRyYXMtcmVxdWlyZScgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1snRXh0cmFzLXJlcXVpcmUnXSA9IHNldHVwX2luZm9bJ0V4dHJhcy1yZXF1aXJlJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgaW5mbyA9IHNldHVwX2luZm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYuZ2V0X3NldHVwX2FyZ3NfaW5mbyhzZXR1cHNjcmlwdCkKKworICAgICAgICBzZWxmLmFwcGx5X2luZm9fcmVwbGFjZW1lbnRzKGluZm8pCisKKyAgICAgICAgaWYgdXNlc19zZXR1cHRvb2xzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ3NldHVwdG9vbHMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ2Rpc3R1dGlscycpCisKKyAgICAgICAgaWYgJ0NsYXNzaWZpZXInIGluIGluZm86CisgICAgICAgICAgICBsaWNlbnNlcyA9IFtdCisgICAgICAgICAgICBmb3IgY2xhc3NpZmllciBpbiBpbmZvWydDbGFzc2lmaWVyJ106CisgICAgICAgICAgICAgICAgaWYgY2xhc3NpZmllciBpbiBzZWxmLmNsYXNzaWZpZXJfbGljZW5zZV9tYXA6CisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgPSBzZWxmLmNsYXNzaWZpZXJfbGljZW5zZV9tYXBbY2xhc3NpZmllcl0KKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGxpY2Vuc2UpCisKKyAgICAgICAgICAgIGlmIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgIGluZm9bJ0xpY2Vuc2UnXSA9ICcgJiAnLmpvaW4obGljZW5zZXMpCisKKworICAgICAgICAjIE1hcCBQS0ctSU5GTyAmIHNldHVwLnB5IGZpZWxkcyB0byBiaXRiYWtlIHZhcmlhYmxlcworICAgICAgICBiYmluZm8gPSB7fQorICAgICAgICBmb3IgZmllbGQsIHZhbHVlcyBpbiBpbmZvLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgZmllbGQgaW4gc2VsZi5leGNsdWRlZF9maWVsZHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgZmllbGQgbm90IGluIHNlbGYuYmJ2YXJfbWFwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWVzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICcgJy5qb2luKHN0cih2KSBmb3IgdiBpbiB2YWx1ZXMgaWYgdikKKworICAgICAgICAgICAgYmJ2YXIgPSBzZWxmLmJidmFyX21hcFtmaWVsZF0KKyAgICAgICAgICAgIGlmIGJidmFyIG5vdCBpbiBiYmluZm8gYW5kIHZhbHVlOgorICAgICAgICAgICAgICAgIGJiaW5mb1tiYnZhcl0gPSB2YWx1ZQorCisgICAgICAgIGNvbW1lbnRfbGljX2xpbmUgPSBOb25lCisgICAgICAgIGZvciBwb3MsIGxpbmUgaW4gZW51bWVyYXRlKGxpc3QobGluZXNfYmVmb3JlKSk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBhbmQgJ0xJQ0VOU0UnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgY29tbWVudF9saWNfbGluZSA9IHBvcworICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0xJQ0VOU0UgPScpIGFuZCAnTElDRU5TRScgaW4gYmJpbmZvOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgaW4gKCdMSUNFTlNFID0gIlVua25vd24iJywgJ0xJQ0VOU0UgPSAiQ0xPU0VEIicpOgorICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmVbcG9zXSA9ICdMSUNFTlNFID0gInt9IicuZm9ybWF0KGJiaW5mb1snTElDRU5TRSddKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09ICdMSUNFTlNFID0gIkNMT1NFRCInIGFuZCBjb21tZW50X2xpY19saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlW2NvbW1lbnRfbGljX2xpbmU6cG9zXSA9IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIExJQ0VOU0UgdmFsdWUgaXMgYSBiZXN0IGd1ZXNzIC0gaXQgaXMgeW91cicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHZhbHVlIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LicKKyAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICBkZWwgYmJpbmZvWydMSUNFTlNFJ10KKworICAgICAgICBzcmNfdXJpX2xpbmUgPSBOb25lCisgICAgICAgIGZvciBwb3MsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzX2JlZm9yZSk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NSQ19VUkkgPScpOgorICAgICAgICAgICAgICAgIHNyY191cmlfbGluZSA9IHBvcworCisgICAgICAgIGlmIGJiaW5mbzoKKyAgICAgICAgICAgIG1kaW5mbyA9IFsnJ10KKyAgICAgICAgICAgIGZvciBrIGluIHNvcnRlZChiYmluZm8pOgorICAgICAgICAgICAgICAgIHYgPSBiYmluZm9ba10KKyAgICAgICAgICAgICAgICBtZGluZm8uYXBwZW5kKCd7fSA9ICJ7fSInLmZvcm1hdChrLCB2KSkKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZVtzcmNfdXJpX2xpbmUtMTpzcmNfdXJpX2xpbmUtMV0gPSBtZGluZm8KKworICAgICAgICBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcyA9IHNlbGYuc2Nhbl9zZXR1cF9weXRob25fZGVwcyhzcmN0cmVlLCBzZXR1cF9pbmZvLCBzZXR1cF9ub25fbGl0ZXJhbHMpCisKKyAgICAgICAgZXh0cmFzX3JlcSA9IHNldCgpCisgICAgICAgIGlmICdFeHRyYXMtcmVxdWlyZScgaW4gaW5mbzoKKyAgICAgICAgICAgIGV4dHJhc19yZXEgPSBpbmZvWydFeHRyYXMtcmVxdWlyZSddCisgICAgICAgICAgICBpZiBleHRyYXNfcmVxOgorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBUaGUgZm9sbG93aW5nIGNvbmZpZ3MgJiBkZXBlbmRlbmNpZXMgYXJlIGZyb20gc2V0dXB0b29scyBleHRyYXNfcmVxdWlyZS4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBUaGVzZSBkZXBlbmRlbmNpZXMgYXJlIG9wdGlvbmFsLCBoZW5jZSBjYW4gYmUgY29udHJvbGxlZCB2aWEgUEFDS0FHRUNPTkZJRy4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBUaGUgdXBzdHJlYW0gbmFtZXMgbWF5IG5vdCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gYml0YmFrZSBwYWNrYWdlIG5hbWVzLicpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgVW5jb21tZW50IHRoaXMgbGluZSB0byBlbmFibGUgYWxsIHRoZSBvcHRpb25hbCBmZWF0dXJlcy4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnI1BBQ0tBR0VDT05GSUcgPz0gInt9IicuZm9ybWF0KCcgJy5qb2luKGsubG93ZXIoKSBmb3IgayBpbiBleHRyYXNfcmVxLml0ZXJrZXlzKCkpKSkKKyAgICAgICAgICAgICAgICBmb3IgZmVhdHVyZSwgZmVhdHVyZV9yZXFzIGluIGV4dHJhc19yZXEuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHVubWFwcGVkX2RlcHMuZGlmZmVyZW5jZV91cGRhdGUoZmVhdHVyZV9yZXFzKQorCisgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfcmVxX2RlcHMgPSAoJ3B5dGhvbi0nICsgci5yZXBsYWNlKCcuJywgJy0nKS5sb3dlcigpIGZvciByIGluIHNvcnRlZChmZWF0dXJlX3JlcXMpKQorICAgICAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ1BBQ0tBR0VDT05GSUdbe31dID0gIiwsLHt9IicuZm9ybWF0KGZlYXR1cmUubG93ZXIoKSwgJyAnLmpvaW4oZmVhdHVyZV9yZXFfZGVwcykpKQorCisgICAgICAgIGluc3RfcmVxcyA9IHNldCgpCisgICAgICAgIGlmICdJbnN0YWxsLXJlcXVpcmVzJyBpbiBpbmZvOgorICAgICAgICAgICAgaWYgZXh0cmFzX3JlcToKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBpbnN0X3JlcXMgPSBpbmZvWydJbnN0YWxsLXJlcXVpcmVzJ10KKyAgICAgICAgICAgIGlmIGluc3RfcmVxczoKKyAgICAgICAgICAgICAgICB1bm1hcHBlZF9kZXBzLmRpZmZlcmVuY2VfdXBkYXRlKGluc3RfcmVxcykKKworICAgICAgICAgICAgICAgIGluc3RfcmVxX2RlcHMgPSAoJ3B5dGhvbi0nICsgci5yZXBsYWNlKCcuJywgJy0nKS5sb3dlcigpIGZvciByIGluIHNvcnRlZChpbnN0X3JlcXMpKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIHJkZXBlbmRzIGFyZSBmcm9tIHNldHVwdG9vbHMgaW5zdGFsbF9yZXF1aXJlcy4gVGhlc2UnKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyB1cHN0cmVhbSBuYW1lcyBtYXkgbm90IGNvcnJlc3BvbmQgZXhhY3RseSB0byBiaXRiYWtlIHBhY2thZ2UgbmFtZXMuJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ1JERVBFTkRTXyR7e1BOfX0gKz0gInt9IicuZm9ybWF0KCcgJy5qb2luKGluc3RfcmVxX2RlcHMpKSkKKworICAgICAgICBpZiBtYXBwZWRfZGVwczoKKyAgICAgICAgICAgIG5hbWUgPSBpbmZvLmdldCgnTmFtZScpCisgICAgICAgICAgICBpZiBuYW1lIGFuZCBuYW1lWzBdIGluIG1hcHBlZF9kZXBzOgorICAgICAgICAgICAgICAgICMgQXR0ZW1wdCB0byBhdm9pZCBzZWxmLXJlZmVyZW5jZQorICAgICAgICAgICAgICAgIG1hcHBlZF9kZXBzLnJlbW92ZShuYW1lWzBdKQorICAgICAgICAgICAgbWFwcGVkX2RlcHMgLT0gc2V0KHNlbGYuZXhjbHVkZWRfcGtnZGVwcykKKyAgICAgICAgICAgIGlmIGluc3RfcmVxcyBvciBleHRyYXNfcmVxOgorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBXQVJOSU5HOiB0aGUgZm9sbG93aW5nIHJkZXBlbmRzIGFyZSBkZXRlcm1pbmVkIHRocm91Z2ggYmFzaWMgYW5hbHlzaXMgb2YgdGhlJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBweXRob24gc291cmNlcywgYW5kIG1pZ2h0IG5vdCBiZSAxMDAlIGFjY3VyYXRlLicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ1JERVBFTkRTXyR7e1BOfX0gKz0gInt9IicuZm9ybWF0KCcgJy5qb2luKHNvcnRlZChtYXBwZWRfZGVwcykpKSkKKworICAgICAgICB1bm1hcHBlZF9kZXBzIC09IHNldChleHRlbnNpb25zKQorICAgICAgICB1bm1hcHBlZF9kZXBzIC09IHNldChzZWxmLmFzc3VtZV9wcm92aWRlZCkKKyAgICAgICAgaWYgdW5tYXBwZWRfZGVwczoKKyAgICAgICAgICAgIGlmIG1hcHBlZF9kZXBzOgorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBXQVJOSU5HOiBXZSB3ZXJlIHVuYWJsZSB0byBtYXAgdGhlIGZvbGxvd2luZyBweXRob24gcGFja2FnZS9tb2R1bGUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIGRlcGVuZGVuY2llcyB0byB0aGUgYml0YmFrZSBwYWNrYWdlcyB3aGljaCBpbmNsdWRlIHRoZW06JykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmV4dGVuZCgnIyAgICB7fScuZm9ybWF0KGQpIGZvciBkIGluIHNvcnRlZCh1bm1hcHBlZF9kZXBzKSkKKworICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorCisgICAgZGVmIGdldF9wa2dpbmZvKHNlbGYsIHBrZ2luZm9fZm4pOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShvcGVuKHBrZ2luZm9fZm4sICdyJykpCisgICAgICAgIG1zZ2luZm8gPSB7fQorICAgICAgICBmb3IgZmllbGQgaW4gbXNnLmtleXMoKToKKyAgICAgICAgICAgIHZhbHVlcyA9IG1zZy5nZXRfYWxsKGZpZWxkKQorICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPT0gMToKKyAgICAgICAgICAgICAgICBtc2dpbmZvW2ZpZWxkXSA9IHZhbHVlc1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2dpbmZvW2ZpZWxkXSA9IHZhbHVlcworICAgICAgICByZXR1cm4gbXNnaW5mbworCisgICAgZGVmIHBhcnNlX3NldHVwX3B5KHNlbGYsIHNldHVwc2NyaXB0PScuL3NldHVwLnB5Jyk6CisgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2V0dXBzY3JpcHQpIGFzIGY6CisgICAgICAgICAgICBpbmZvLCBpbXBvcnRlZF9tb2R1bGVzLCBub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMgPSBnYXRoZXJfc2V0dXBfaW5mbyhmKQorCisgICAgICAgIGRlZiBfbWFwKGtleSk6CisgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgnXycsICctJykKKyAgICAgICAgICAgIGtleSA9IGtleVswXS51cHBlcigpICsga2V5WzE6XQorICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuc2V0dXBfcGFyc2VfbWFwOgorICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuc2V0dXBfcGFyc2VfbWFwW2tleV0KKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICAjIE5haXZlIG1hcHBpbmcgb2Ygc2V0dXAoKSBhcmd1bWVudHMgdG8gUEtHLUlORk8gZmllbGQgbmFtZXMKKyAgICAgICAgZm9yIGQgaW4gW2luZm8sIG5vbl9saXRlcmFsc106CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgbmV3X2tleSA9IF9tYXAoa2V5KQorICAgICAgICAgICAgICAgIGlmIG5ld19rZXkgIT0ga2V5OgorICAgICAgICAgICAgICAgICAgICBkZWwgZFtrZXldCisgICAgICAgICAgICAgICAgICAgIGRbbmV3X2tleV0gPSB2YWx1ZQorCisgICAgICAgIHJldHVybiBpbmZvLCAnc2V0dXB0b29scycgaW4gaW1wb3J0ZWRfbW9kdWxlcywgbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zCisKKyAgICBkZWYgZ2V0X3NldHVwX2FyZ3NfaW5mbyhzZWxmLCBzZXR1cHNjcmlwdD0nLi9zZXR1cC5weScpOgorICAgICAgICBjbWQgPSBbJ3B5dGhvbicsIHNldHVwc2NyaXB0XQorICAgICAgICBpbmZvID0ge30KKyAgICAgICAga2V5cyA9IHNldChzZWxmLmJidmFyX21hcC5rZXlzKCkpCisgICAgICAgIGtleXMgfD0gc2V0KHNlbGYuc2V0dXBhcmdfbGlzdF9maWVsZHMpCisgICAgICAgIGtleXMgfD0gc2V0KHNlbGYuc2V0dXBhcmdfbXVsdGlfbGluZV92YWx1ZXMpCisgICAgICAgIGdyb3VwZWRfa2V5cyA9IGl0ZXJ0b29scy5ncm91cGJ5KGtleXMsIGxhbWJkYSBrOiAoayBpbiBzZWxmLnNldHVwYXJnX2xpc3RfZmllbGRzLCBrIGluIHNlbGYuc2V0dXBhcmdfbXVsdGlfbGluZV92YWx1ZXMpKQorICAgICAgICBmb3IgaW5kZXgsIGtleXMgaW4gZ3JvdXBlZF9rZXlzOgorICAgICAgICAgICAgaWYgaW5kZXggPT0gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAjIFNwbGl0bGluZXMgb3V0cHV0IGZvciBlYWNoIGFyZyBhcyBhIGxpc3QgdmFsdWUKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IHNlbGYuc2V0dXBhcmdfbWFwLmdldChrZXksIGtleS5sb3dlcigpKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdfaW5mbyA9IHNlbGYucnVuX2NvbW1hbmQoY21kICsgWyctLScgKyBhcmddLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHNldHVwc2NyaXB0KSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvW2tleV0gPSBbbC5yc3RyaXAoKSBmb3IgbCBpbiBhcmdfaW5mby5zcGxpdGxpbmVzKCldCisgICAgICAgICAgICBlbGlmIGluZGV4ID09IChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgIyBFbnRpcmUgb3V0cHV0IGZvciBlYWNoIGFyZworICAgICAgICAgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gc2VsZi5zZXR1cGFyZ19tYXAuZ2V0KGtleSwga2V5Lmxvd2VyKCkpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19pbmZvID0gc2VsZi5ydW5fY29tbWFuZChjbWQgKyBbJy0tJyArIGFyZ10sIGN3ZD1vcy5wYXRoLmRpcm5hbWUoc2V0dXBzY3JpcHQpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ba2V5XSA9IGFyZ19pbmZvCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZm8udXBkYXRlKHNlbGYuZ2V0X3NldHVwX2J5bGluZShsaXN0KGtleXMpLCBzZXR1cHNjcmlwdCkpCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgZ2V0X3NldHVwX2J5bGluZShzZWxmLCBmaWVsZHMsIHNldHVwc2NyaXB0PScuL3NldHVwLnB5Jyk6CisgICAgICAgIGluZm8gPSB7fQorCisgICAgICAgIGNtZCA9IFsncHl0aG9uJywgc2V0dXBzY3JpcHRdCisgICAgICAgIGNtZC5leHRlbmQoJy0tJyArIHNlbGYuc2V0dXBhcmdfbWFwLmdldChmLCBmLmxvd2VyKCkpIGZvciBmIGluIGZpZWxkcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5mb19saW5lcyA9IHNlbGYucnVuX2NvbW1hbmQoY21kLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHNldHVwc2NyaXB0KSkuc3BsaXRsaW5lcygpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKGZpZWxkcykgIT0gbGVuKGluZm9fbGluZXMpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTWlzbWF0Y2ggYmV0d2VlbiBzZXR1cC5weSBvdXRwdXQgbGluZXMgYW5kIG51bWJlciBvZiBmaWVsZHMnKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGluZm9fbGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgaW5mb1tmaWVsZHNbbGluZW5vXV0gPSBsaW5lCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgYXBwbHlfaW5mb19yZXBsYWNlbWVudHMoc2VsZiwgaW5mbyk6CisgICAgICAgIGZvciB2YXJpYWJsZSwgc2VhcmNoLCByZXBsYWNlIGluIHNlbGYucmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgaWYgdmFyaWFibGUgbm90IGluIGluZm86CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVmIHJlcGxhY2VfdmFsdWUoc2VhcmNoLCByZXBsYWNlLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgaWYgcmVwbGFjZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goc2VhcmNoLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHJlLnN1YihzZWFyY2gsIHJlcGxhY2UsIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSAhPSBuZXdfdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3X3ZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgICAgIHZhbHVlID0gaW5mb1t2YXJpYWJsZV0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHJlcGxhY2VfdmFsdWUoc2VhcmNoLCByZXBsYWNlLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiBuZXdfdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGVsIGluZm9bdmFyaWFibGVdCisgICAgICAgICAgICAgICAgZWxpZiBuZXdfdmFsdWUgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGluZm9bdmFyaWFibGVdID0gbmV3X3ZhbHVlCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIodmFsdWUsICdpdGVyaXRlbXMnKToKKyAgICAgICAgICAgICAgICBmb3IgZGtleSwgZHZhbHVlIGluIHZhbHVlLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBuZXdfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBwb3MsIGFfdmFsdWUgaW4gZW51bWVyYXRlKGR2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUgPSByZXBsYWNlX3ZhbHVlKHNlYXJjaCwgcmVwbGFjZSwgYV92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5ld192YWx1ZSBpcyBub3QgTm9uZSBhbmQgbmV3X3ZhbHVlICE9IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZChuZXdfdmFsdWUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgIT0gbmV3X2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtka2V5XSA9IG5ld19saXN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld19saXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcG9zLCBhX3ZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHJlcGxhY2VfdmFsdWUoc2VhcmNoLCByZXBsYWNlLCBhX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpZiBuZXdfdmFsdWUgaXMgbm90IE5vbmUgYW5kIG5ld192YWx1ZSAhPSB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZChuZXdfdmFsdWUpCisKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSAhPSBuZXdfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1t2YXJpYWJsZV0gPSBuZXdfbGlzdAorCisgICAgZGVmIHNjYW5fc2V0dXBfcHl0aG9uX2RlcHMoc2VsZiwgc3JjdHJlZSwgc2V0dXBfaW5mbywgc2V0dXBfbm9uX2xpdGVyYWxzKToKKyAgICAgICAgaWYgJ1BhY2thZ2UtZGlyJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgcGFja2FnZV9kaXIgPSBzZXR1cF9pbmZvWydQYWNrYWdlLWRpciddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlX2RpciA9IHt9CisKKyAgICAgICAgY2xhc3MgUGFja2FnZURpcihkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weS5idWlsZF9weSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGFja2FnZV9kaXIpOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kaXIgPSBwYWNrYWdlX2RpcgorCisgICAgICAgIHBkID0gUGFja2FnZURpcihwYWNrYWdlX2RpcikKKyAgICAgICAgdG9fc2NhbiA9IFtdCisgICAgICAgIGlmIG5vdCBhbnkodiBpbiBzZXR1cF9ub25fbGl0ZXJhbHMgZm9yIHYgaW4gWydQeS1tb2R1bGVzJywgJ1NjcmlwdHMnLCAnUGFja2FnZXMnXSk6CisgICAgICAgICAgICBpZiAnUHktbW9kdWxlcycgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICBmb3IgbW9kdWxlIGluIHNldHVwX2luZm9bJ1B5LW1vZHVsZXMnXToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgbW9kdWxlID0gbW9kdWxlLnJzcGxpdCgnLicsIDEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgbW9kdWxlID0gJy4nLCBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ocGQuZ2V0X3BhY2thZ2VfZGlyKHBhY2thZ2UpLCBtb2R1bGUgKyAnLnB5JykKKyAgICAgICAgICAgICAgICAgICAgdG9fc2Nhbi5hcHBlbmQobW9kdWxlX3BhdGgpCisKKyAgICAgICAgICAgIGlmICdQYWNrYWdlcycgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBzZXR1cF9pbmZvWydQYWNrYWdlcyddOgorICAgICAgICAgICAgICAgICAgICB0b19zY2FuLmFwcGVuZChwZC5nZXRfcGFja2FnZV9kaXIocGFja2FnZSkpCisKKyAgICAgICAgICAgIGlmICdTY3JpcHRzJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgIHRvX3NjYW4uZXh0ZW5kKHNldHVwX2luZm9bJ1NjcmlwdHMnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTY2FubmluZyB0aGUgZW50aXJlIHNvdXJjZSB0cmVlLCBhcyBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHNldHVwIGtleXdvcmRzIGFyZSBub24tbGl0ZXJhbDogcHlfbW9kdWxlcywgc2NyaXB0cywgcGFja2FnZXMuIikKKworICAgICAgICBpZiBub3QgdG9fc2NhbjoKKyAgICAgICAgICAgIHRvX3NjYW4gPSBbJy4nXQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJTY2FubmluZyBwYXRocyBmb3IgcGFja2FnZXMgJiBkZXBlbmRlbmNpZXM6ICVzIiwgJywgJy5qb2luKHRvX3NjYW4pKQorCisgICAgICAgIHByb3ZpZGVkX3BhY2thZ2VzID0gc2VsZi5wYXJzZV9wa2dkYXRhX2Zvcl9weXRob25fcGFja2FnZXMoKQorICAgICAgICBzY2FubmVkX2RlcHMgPSBzZWxmLnNjYW5fcHl0aG9uX2RlcGVuZGVuY2llcyhbb3MucGF0aC5qb2luKHNyY3RyZWUsIHApIGZvciBwIGluIHRvX3NjYW5dKQorICAgICAgICBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcyA9IHNldChzZWxmLmJhc2VfcGtnZGVwcyksIHNldCgpCisgICAgICAgIGZvciBkZXAgaW4gc2Nhbm5lZF9kZXBzOgorICAgICAgICAgICAgbWFwcGVkID0gcHJvdmlkZWRfcGFja2FnZXMuZ2V0KGRlcCkKKyAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICBtYXBwZWRfZGVwcy5hZGQobWFwcGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bm1hcHBlZF9kZXBzLmFkZChkZXApCisgICAgICAgIHJldHVybiBtYXBwZWRfZGVwcywgdW5tYXBwZWRfZGVwcworCisgICAgZGVmIHNjYW5fcHl0aG9uX2RlcGVuZGVuY2llcyhzZWxmLCBwYXRocyk6CisgICAgICAgIGRlcHMgPSBzZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBfb3V0cHV0ID0gc2VsZi5ydW5fY29tbWFuZChbJ3B5dGhvbmRlcHMnLCAnLWQnXSArIHBhdGhzKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGRlcF9vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgZGVwLCBmaWxlbmFtZSA9IGxpbmUuc3BsaXQoJ1x0JywgMSkKKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnL3NldHVwLnB5Jyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwcy5hZGQoZGVwKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb3ZpZGVzX291dHB1dCA9IHNlbGYucnVuX2NvbW1hbmQoWydweXRob25kZXBzJywgJy1wJ10gKyBwYXRocykKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm92aWRlc19saW5lcyA9IChsLnJzdHJpcCgpIGZvciBsIGluIHByb3ZpZGVzX291dHB1dC5zcGxpdGxpbmVzKCkpCisgICAgICAgICAgICBwcm92aWRlcyA9IHNldChsIGZvciBsIGluIHByb3ZpZGVzX2xpbmVzIGlmIGwgYW5kIGwgIT0gJ3NldHVwJykKKyAgICAgICAgICAgIGRlcHMgLT0gcHJvdmlkZXMKKworICAgICAgICByZXR1cm4gZGVwcworCisgICAgZGVmIHBhcnNlX3BrZ2RhdGFfZm9yX3B5dGhvbl9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc3VmZml4ZXMgPSBbdFswXSBmb3IgdCBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCldCisgICAgICAgIHBrZ2RhdGFfZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKworICAgICAgICBsZGF0YSA9IHRpbmZvaWwuY29uZmlnX2RhdGEuY3JlYXRlQ29weSgpCisgICAgICAgIGJiLnBhcnNlLmhhbmRsZSgnY2xhc3Nlcy9weXRob24tZGlyLmJiY2xhc3MnLCBsZGF0YSwgVHJ1ZSkKKyAgICAgICAgcHl0aG9uX3NpdGVkaXIgPSBsZGF0YS5nZXRWYXIoJ1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSJywgVHJ1ZSkKKworICAgICAgICBkeW5sb2FkX2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUocHl0aG9uX3NpdGVkaXIpLCAnbGliLWR5bmxvYWQnKQorICAgICAgICBweXRob25fZGlycyA9IFtweXRob25fc2l0ZWRpciArIG9zLnNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShweXRob25fc2l0ZWRpciksICdkaXN0LXBhY2thZ2VzJykgKyBvcy5zZXAsCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShweXRob25fc2l0ZWRpcikgKyBvcy5zZXBdCisgICAgICAgIHBhY2thZ2VzID0ge30KKyAgICAgICAgZm9yIHBrZ2RhdGFmaWxlIGluIGdsb2IuZ2xvYigne30vcnVudGltZS8qJy5mb3JtYXQocGtnZGF0YV9kaXIpKToKKyAgICAgICAgICAgIGZpbGVzX2luZm8gPSBOb25lCisgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZGF0YWZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBmaWVsZCwgdmFsdWUgPSBsaW5lLnNwbGl0KCc6ICcsIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkID09ICdGSUxFU19JTkZPJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzX2luZm8gPSBhc3QubGl0ZXJhbF9ldmFsKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXNfaW5mby5pdGVya2V5cygpOgorICAgICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBmbi5zdGFydHN3aXRoKGR5bmxvYWRfZGlyICsgb3Muc2VwKToKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkID0gYmFzZS5zcGxpdCgnLicsIDEpWzBdCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzW3Byb3ZpZGVkXSA9IG9zLnBhdGguYmFzZW5hbWUocGtnZGF0YWZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgcHl0aG9uX2RpciBpbiBweXRob25fZGlyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZm4uc3RhcnRzd2l0aChweXRob25fZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbHBhdGggPSBmbltsZW4ocHl0aG9uX2Rpcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsc3RhcnQsIF8sIHJlbHJlbWFpbmluZyA9IHJlbHBhdGgucGFydGl0aW9uKG9zLnNlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbHN0YXJ0LmVuZHN3aXRoKCcuZWdnJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVscGF0aCA9IHJlbHJlbWFpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgXyA9IG9zLnBhdGguc3BsaXRleHQocmVscGF0aCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgJy8uZGVidWcvJyBpbiBiYXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKGJhc2UpID09ICdfX2luaXRfXyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguZGlybmFtZShiYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZShvcy5zZXAgKyBvcy5zZXAsIG9zLnNlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkID0gYmFzZS5yZXBsYWNlKG9zLnNlcCwgJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXNbcHJvdmlkZWRdID0gb3MucGF0aC5iYXNlbmFtZShwa2dkYXRhZmlsZSkKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcnVuX2NvbW1hbmQoY2xzLCBjbWQsICoqcG9wZW5hcmdzKToKKyAgICAgICAgaWYgJ3N0ZGVycicgbm90IGluIHBvcGVuYXJnczoKKyAgICAgICAgICAgIHBvcGVuYXJnc1snc3RkZXJyJ10gPSBzdWJwcm9jZXNzLlNURE9VVAorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCAqKnBvcGVuYXJncykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gcnVuIGB7fWA6IHt9JywgJyAnLmpvaW4oY21kKSwgZXhjKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHJ1biBge31gOiB7fScsICcgJy5qb2luKGNtZCksIGV4Yy5vdXRwdXQpCisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBnYXRoZXJfc2V0dXBfaW5mbyhmaWxlb2JqKToKKyAgICBwYXJzZWQgPSBhc3QucGFyc2UoZmlsZW9iai5yZWFkKCksIGZpbGVvYmoubmFtZSkKKyAgICB2aXNpdG9yID0gU2V0dXBTY3JpcHRWaXNpdG9yKCkKKyAgICB2aXNpdG9yLnZpc2l0KHBhcnNlZCkKKworICAgIG5vbl9saXRlcmFscywgZXh0ZW5zaW9ucyA9IHt9LCBbXQorICAgIGZvciBrZXksIHZhbHVlIGluIHZpc2l0b3Iua2V5d29yZHMuaXRlbXMoKToKKyAgICAgICAgaWYga2V5ID09ICdleHRfbW9kdWxlcyc6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICBmb3IgZXh0IGluIHZhbHVlOgorICAgICAgICAgICAgICAgICAgICBpZiAgKGlzaW5zdGFuY2UoZXh0LCBhc3QuQ2FsbCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShleHQuZnVuYywgYXN0Lk5hbWUpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4dC5mdW5jLmlkID09ICdFeHRlbnNpb24nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXNfbm9uX2xpdGVyYWxzKGV4dC5hcmdzKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLmFwcGVuZChleHQuYXJnc1swXSkKKyAgICAgICAgZWxpZiBoYXNfbm9uX2xpdGVyYWxzKHZhbHVlKToKKyAgICAgICAgICAgIG5vbl9saXRlcmFsc1trZXldID0gdmFsdWUKKyAgICAgICAgICAgIGRlbCB2aXNpdG9yLmtleXdvcmRzW2tleV0KKworICAgIHJldHVybiB2aXNpdG9yLmtleXdvcmRzLCB2aXNpdG9yLmltcG9ydGVkX21vZHVsZXMsIG5vbl9saXRlcmFscywgZXh0ZW5zaW9ucworCisKK2NsYXNzIFNldHVwU2NyaXB0VmlzaXRvcihhc3QuTm9kZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgYXN0Lk5vZGVWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYua2V5d29yZHMgPSB7fQorICAgICAgICBzZWxmLm5vbl9saXRlcmFscyA9IFtdCisgICAgICAgIHNlbGYuaW1wb3J0ZWRfbW9kdWxlcyA9IHNldCgpCisKKyAgICBkZWYgdmlzaXRfRXhwcihzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLnZhbHVlLCBhc3QuQ2FsbCkgYW5kIFwKKyAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLnZhbHVlLmZ1bmMsIGFzdC5OYW1lKSBhbmQgXAorICAgICAgICAgICBub2RlLnZhbHVlLmZ1bmMuaWQgPT0gJ3NldHVwJzoKKyAgICAgICAgICAgIHNlbGYudmlzaXRfc2V0dXAobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9zZXR1cChzZWxmLCBub2RlKToKKyAgICAgICAgY2FsbCA9IExpdGVyYWxBc3RUcmFuc2Zvcm0oKS52aXNpdChub2RlKQorICAgICAgICBzZWxmLmtleXdvcmRzID0gY2FsbC5rZXl3b3JkcworICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmtleXdvcmRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgaGFzX25vbl9saXRlcmFscyh2KToKKyAgICAgICAgICAgICAgIHNlbGYubm9uX2xpdGVyYWxzLmFwcGVuZChrKQorCisgICAgZGVmIHZpc2l0X0ltcG9ydChzZWxmLCBub2RlKToKKyAgICAgICAgZm9yIGFsaWFzIGluIG5vZGUubmFtZXM6CisgICAgICAgICAgICBzZWxmLmltcG9ydGVkX21vZHVsZXMuYWRkKGFsaWFzLm5hbWUpCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0RnJvbShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5pbXBvcnRlZF9tb2R1bGVzLmFkZChub2RlLm1vZHVsZSkKKworCitjbGFzcyBMaXRlcmFsQXN0VHJhbnNmb3JtKGFzdC5Ob2RlVHJhbnNmb3JtZXIpOgorICAgICIiIlNpbXBsaWZ5IHRoZSBhc3QgdGhyb3VnaCBldmFsdWF0aW9uIG9mIGxpdGVyYWxzLiIiIgorICAgIGV4Y2x1ZGVkX2ZpZWxkcyA9IFsnY3R4J10KKworICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZSwgYXN0LkFTVCk6CisgICAgICAgICAgICByZXR1cm4gbm9kZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGFzdC5Ob2RlVHJhbnNmb3JtZXIudmlzaXQoc2VsZiwgbm9kZSkKKworICAgIGRlZiBnZW5lcmljX3Zpc2l0KHNlbGYsIG5vZGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gYXN0LmxpdGVyYWxfZXZhbChub2RlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGZvciBmaWVsZCwgdmFsdWUgaW4gYXN0Lml0ZXJfZmllbGRzKG5vZGUpOgorICAgICAgICAgICAgICAgIGlmIGZpZWxkIGluIHNlbGYuZXhjbHVkZWRfZmllbGRzOgorICAgICAgICAgICAgICAgICAgICBkZWxhdHRyKG5vZGUsIGZpZWxkKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmllbGQgaW4gKCdrZXl3b3JkcycsICdrd2FyZ3MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IGRpY3QoKGt3LmFyZywgc2VsZi52aXNpdChrdy52YWx1ZSkpIGZvciBrdyBpbiB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IFtzZWxmLnZpc2l0KGkpIGZvciBpIGluIHZhbHVlXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHNlbGYudmlzaXQodmFsdWUpCisgICAgICAgICAgICAgICAgc2V0YXR0cihub2RlLCBmaWVsZCwgbmV3X3ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBoYXNhdHRyKCdfX2J1aWx0aW5zX18nLCBub2RlLmlkKToKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKF9fYnVpbHRpbnNfXywgbm9kZS5pZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworICAgIGRlZiB2aXNpdF9UdXBsZShzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIHR1cGxlKHNlbGYudmlzaXQodikgZm9yIHYgaW4gbm9kZS5lbHRzKQorCisgICAgZGVmIHZpc2l0X0xpc3Qoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBbc2VsZi52aXNpdCh2KSBmb3IgdiBpbiBub2RlLmVsdHNdCisKKyAgICBkZWYgdmlzaXRfU2V0KHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gc2V0KHNlbGYudmlzaXQodikgZm9yIHYgaW4gbm9kZS5lbHRzKQorCisgICAgZGVmIHZpc2l0X0RpY3Qoc2VsZiwgbm9kZSk6CisgICAgICAgIGtleXMgPSAoc2VsZi52aXNpdChrKSBmb3IgayBpbiBub2RlLmtleXMpCisgICAgICAgIHZhbHVlcyA9IChzZWxmLnZpc2l0KHYpIGZvciB2IGluIG5vZGUudmFsdWVzKQorICAgICAgICByZXR1cm4gZGljdCh6aXAoa2V5cywgdmFsdWVzKSkKKworCitkZWYgaGFzX25vbl9saXRlcmFscyh2YWx1ZSk6CisgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYXN0LkFTVCk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAnaXRlcnZhbHVlcycpOgorICAgICAgICByZXR1cm4gYW55KGhhc19ub25fbGl0ZXJhbHModikgZm9yIHYgaW4gdmFsdWUuaXRlcnZhbHVlcygpKQorICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgJ19faXRlcl9fJyk6CisgICAgICAgIHJldHVybiBhbnkoaGFzX25vbl9saXRlcmFscyh2KSBmb3IgdiBpbiB2YWx1ZSkKKworCitkZWYgcmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzKGhhbmRsZXJzKToKKyAgICAjIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWhlYWQgb2YgdGhlIG1ha2VmaWxlIGZhbGxiYWNrIGhhbmRsZXIKKyAgICBoYW5kbGVycy5pbnNlcnQoMCwgUHl0aG9uUmVjaXBlSGFuZGxlcigpKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL25ld2FwcGVuZC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9uZXdhcHBlbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiNzRjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9uZXdhcHBlbmQucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBuZXdhcHBlbmQgcGx1Z2luCisjCisjIFRoaXMgc3ViLWNvbW1hbmQgY3JlYXRlcyBhIGJiYXBwZW5kIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldCBhbmQgcHJpbnRzIHRoZQorIyBwYXRoIHRvIHRoZSBiYmFwcGVuZC4KKyMKKyMgRXhhbXBsZTogcmVjaXBldG9vbCBuZXdhcHBlbmQgbWV0YS1teWxheWVyIGJ1c3lib3gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IENocmlzdG9waGVyIExhcnNvbiA8a2VyZ290aEBnbWFpbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQordGluZm9pbCA9IE5vbmUKKworCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUgcmlnaHQgbm93LCBidXQgcGx1Z2lucyBtdXN0IGhhdmUgdGhpcyBmdW5jdGlvbiBkZWZpbmVkCisgICAgcGFzcworCisKK2RlZiB0aW5mb2lsX2luaXQoaW5zdGFuY2UpOgorICAgIGdsb2JhbCB0aW5mb2lsCisgICAgdGluZm9pbCA9IGluc3RhbmNlCisKKworZGVmIF9wcm92aWRlX3RvX3BuKGNvb2tlciwgcHJvdmlkZSk6CisgICAgIiIiR2V0IHRoZSBuYW1lIG9mIHRoZSBwcmVmZXJyZWQgcmVjaXBlIGZvciB0aGUgc3BlY2lmaWVkIHByb3ZpZGUuIiIiCisgICAgaW1wb3J0IGJiLnByb3ZpZGVycworICAgIGZpbGVuYW1lcyA9IGNvb2tlci5yZWNpcGVjYWNoZS5wcm92aWRlcnNbcHJvdmlkZV0KKyAgICBlbGlnaWJsZSwgZm91bmRVbmlxdWUgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzKGZpbGVuYW1lcywgcHJvdmlkZSwgY29va2VyLmV4cGFuZGVkX2RhdGEsIGNvb2tlci5yZWNpcGVjYWNoZSkKKyAgICBmaWxlbmFtZSA9IGVsaWdpYmxlWzBdCisgICAgcG4gPSBjb29rZXIucmVjaXBlY2FjaGUucGtnX2ZuW2ZpbGVuYW1lXQorICAgIHJldHVybiBwbgorCisKK2RlZiBfZ2V0X3JlY2lwZV9maWxlKGNvb2tlciwgcG4pOgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIHJlY2lwZWZpbGUgPSBvZS5yZWNpcGV1dGlscy5wbl90b19yZWNpcGUoY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgc2tpcHJlYXNvbnMgPSBvZS5yZWNpcGV1dGlscy5nZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKQorICAgICAgICBpZiBza2lwcmVhc29uczoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignXG4nLmpvaW4oc2tpcHJlYXNvbnMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgcmVjaXBlIGZpbGUgbWF0Y2hpbmcgJXMiICUgcG4pCisgICAgcmV0dXJuIHJlY2lwZWZpbGUKKworCitkZWYgbGF5ZXIobGF5ZXJwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGxheWVycGF0aCwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYSBwYXRoIHRvIGEgdmFsaWQgbGF5ZXInLmZvcm1hdChsYXllcnBhdGgpKQorICAgIHJldHVybiBsYXllcnBhdGgKKworCitkZWYgbmV3YXBwZW5kKGFyZ3MpOgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgcG4gPSBfcHJvdmlkZV90b19wbih0aW5mb2lsLmNvb2tlciwgYXJncy50YXJnZXQpCisgICAgcmVjaXBlX3BhdGggPSBfZ2V0X3JlY2lwZV9maWxlKHRpbmZvaWwuY29va2VyLCBwbikKKworICAgIHJkID0gdGluZm9pbC5jb25maWdfZGF0YS5jcmVhdGVDb3B5KCkKKyAgICByZC5zZXRWYXIoJ0ZJTEUnLCByZWNpcGVfcGF0aCkKKyAgICBhcHBlbmRfcGF0aCwgcGF0aF9vayA9IG9lLnJlY2lwZXV0aWxzLmdldF9iYmFwcGVuZF9wYXRoKHJkLCBhcmdzLmRlc3RsYXllciwgYXJncy53aWxkY2FyZF92ZXJzaW9uKQorICAgIGlmIG5vdCBhcHBlbmRfcGF0aDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGxheWVyIGRpcmVjdG9yeSBjb250YWluaW5nICVzJywgcmVjaXBlX3BhdGgpCisgICAgICAgIHJldHVybiAxCisKKyAgICBpZiBub3QgcGF0aF9vazoKKyAgICAgICAgbG9nZ2VyLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgY29ycmVjdCBzdWJkaXJlY3RvcnkgcGF0aCBmb3IgYmJhcHBlbmQgZmlsZSAtIGNoZWNrIHRoYXQgd2hhdCAlcyBhZGRzIHRvIEJCRklMRVMgYWxzbyBtYXRjaGVzIC5iYmFwcGVuZCBmaWxlcy4gVXNpbmcgJXMgZm9yIG5vdywgYnV0IHVudGlsIHlvdSBmaXggdGhpcyB0aGUgYmJhcHBlbmQgd2lsbCBub3QgYmUgYXBwbGllZC4nLCBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksIG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKSkKKworICAgIGxheWVyZGlycyA9IFtvcy5wYXRoLmFic3BhdGgobGF5ZXJkaXIpIGZvciBsYXllcmRpciBpbiByZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKV0KKyAgICBpZiBub3Qgb3MucGF0aC5hYnNwYXRoKGFyZ3MuZGVzdGxheWVyKSBpbiBsYXllcmRpcnM6CisgICAgICAgIGxvZ2dlci53YXJuKCdTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGl0IGJlZm9yZSB0aGlzIGJiYXBwZW5kIHdpbGwgYmUgYWN0aXZlJykKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcHBlbmRfcGF0aCk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoYXBwZW5kX3BhdGgpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW4oYXBwZW5kX3BhdGgsICdhJykKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoc3RyKGV4YykpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgcHJpbnQoYXBwZW5kX3BhdGgpCisKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmQoc3VicGFyc2Vycyk6CisgICAgcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCduZXdhcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUgYSBiYmFwcGVuZCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQgaW4gdGhlIHNwZWNpZmllZCBsYXllcicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXcnLCAnLS13aWxkY2FyZC12ZXJzaW9uJywgaGVscD0nVXNlIHdpbGRjYXJkIHRvIG1ha2UgdGhlIGJiYXBwZW5kIGFwcGx5IHRvIGFueSByZWNpcGUgdmVyc2lvbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZGVzdGxheWVyJywgaGVscD0nQmFzZSBkaXJlY3Rvcnkgb2YgdGhlIGRlc3RpbmF0aW9uIGxheWVyIHRvIHdyaXRlIHRoZSBiYmFwcGVuZCB0bycsIHR5cGU9bGF5ZXIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndGFyZ2V0JywgaGVscD0nVGFyZ2V0IHJlY2lwZS9wcm92aWRlIHRvIGFwcGVuZCcpCisgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPW5ld2FwcGVuZCwgcGFyc2VyZWNpcGVzPVRydWUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHBhdGgucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHBhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwMzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0cGF0aC5weQpAQCAtMCwwICsxLDQyIEBACisjIFBhdGggdXRpbGl0eSBmdW5jdGlvbnMgZm9yIE9FIHB5dGhvbiBzY3JpcHRzCisjCisjIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxMSBNZW50b3IgR3JhcGhpY3MgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKKworZGVmIGFkZF9vZV9saWJfcGF0aCgpOgorICAgIGJhc2VwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAnLy4uLy4uJykKKyAgICBuZXdwYXRoID0gYmFzZXBhdGggKyAnL21ldGEvbGliJworICAgIHN5cy5wYXRoLmluc2VydCgwLCBuZXdwYXRoKQorCitkZWYgYWRkX2JpdGJha2VfbGliX3BhdGgoKToKKyAgICBiYXNlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgJy8uLi8uLicpCisgICAgYml0YmFrZXBhdGggPSBOb25lCisgICAgaWYgb3MucGF0aC5leGlzdHMoYmFzZXBhdGggKyAnL2JpdGJha2UvbGliL2JiJyk6CisgICAgICAgIGJpdGJha2VwYXRoID0gYmFzZXBhdGggKyAnL2JpdGJha2UnCisgICAgZWxzZToKKyAgICAgICAgIyBsb29rIGZvciBiaXRiYWtlL2JpbiBkaXIgaW4gUEFUSAorICAgICAgICBmb3IgcHRoIGluIG9zLmVudmlyb25bJ1BBVEgnXS5zcGxpdCgnOicpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHB0aCwgJy4uL2xpYi9iYicpKToKKyAgICAgICAgICAgICAgICBiaXRiYWtlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocHRoLCAnLi4nKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgaWYgYml0YmFrZXBhdGg6CisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBiaXRiYWtlcGF0aCArICcvbGliJykKKyAgICByZXR1cm4gYml0YmFrZXBhdGgKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjY4ODIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5CkBAIC0wLDAgKzEsOTggQEAKKyMgU2NyaXB0IHV0aWxpdHkgZnVuY3Rpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGdsb2IKKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBsb2dnZXJoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitkZWYgbG9nZ2VyX3NldHVwX2NvbG9yKGxvZ2dlciwgY29sb3I9J2F1dG8nKToKKyAgICBmcm9tIGJiLm1zZyBpbXBvcnQgQkJMb2dGb3JtYXR0ZXIKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgZm9ybWF0dGVyID0gQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2NvbnNvbGVdCisgICAgaWYgY29sb3IgPT0gJ2Fsd2F5cycgb3IgKGNvbG9yPT0nYXV0bycgYW5kIGNvbnNvbGUuc3RyZWFtLmlzYXR0eSgpKToKKyAgICAgICAgZm9ybWF0dGVyLmVuYWJsZV9jb2xvcigpCisKKworZGVmIGxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpOgorICAgIGltcG9ydCBpbXAKKworICAgIGRlZiBsb2FkX3BsdWdpbihuYW1lKToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHBsdWdpbiAlcycgJSBuYW1lKQorICAgICAgICBmcCwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUsIFtwbHVnaW5wYXRoXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGltcC5sb2FkX21vZHVsZShuYW1lLCBmcCwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgZnA6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgbG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHBsdWdpbnMgZnJvbSAlcy4uLicgJSBwbHVnaW5wYXRoKQorICAgIGZvciBmbiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHBsdWdpbnBhdGgsICcqLnB5JykpOgorICAgICAgICBuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZuKSlbMF0KKyAgICAgICAgaWYgbmFtZSAhPSAnX19pbml0X18nOgorICAgICAgICAgICAgcGx1Z2luID0gbG9hZF9wbHVnaW4obmFtZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAncGx1Z2luX2luaXQnKToKKyAgICAgICAgICAgICAgICBwbHVnaW4ucGx1Z2luX2luaXQocGx1Z2lucykKKyAgICAgICAgICAgIHBsdWdpbnMuYXBwZW5kKHBsdWdpbikKKworZGVmIGdpdF9jb252ZXJ0X3N0YW5kYWxvbmVfY2xvbmUocmVwb2Rpcik6CisgICAgIiIiSWYgc3BlY2lmaWVkIGRpcmVjdG9yeSBpcyBhIGdpdCByZXBvc2l0b3J5LCBlbnN1cmUgaXQncyBhIHN0YW5kYWxvbmUgY2xvbmUiIiIKKyAgICBpbXBvcnQgYmIucHJvY2VzcworICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihyZXBvZGlyLCAnLmdpdCcpKToKKyAgICAgICAgYWx0ZXJuYXRlc2ZpbGUgPSBvcy5wYXRoLmpvaW4ocmVwb2RpciwgJy5naXQnLCAnb2JqZWN0cycsICdpbmZvJywgJ2FsdGVybmF0ZXMnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhbHRlcm5hdGVzZmlsZSk6CisgICAgICAgICAgICAjIFRoaXMgd2lsbCBoYXZlIGJlZW4gY2xvbmVkIHdpdGggLXMsIHNvIHdlIG5lZWQgdG8gY29udmVydCBpdCBzbyBub25lCisgICAgICAgICAgICAjIG9mIHRoZSBjb250ZW50cyBpcyBzaGFyZWQKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgcmVwYWNrIC1hJywgY3dkPXJlcG9kaXIpCisgICAgICAgICAgICBvcy5yZW1vdmUoYWx0ZXJuYXRlc2ZpbGUpCisKK2RlZiBmZXRjaF91cmkoZCwgdXJpLCBkZXN0ZGlyLCBzcmNyZXY9Tm9uZSk6CisgICAgIiIiRmV0Y2ggYSBVUkkgdG8gYSBsb2NhbCBkaXJlY3RvcnkiIiIKKyAgICBpbXBvcnQgYmIuZGF0YQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX1NUUklDVF9DSEVDS1NVTScsICcnKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ1JFVicsIHNyY3JldikKKyAgICByZXQgPSAoTm9uZSwgTm9uZSkKKyAgICBvbGRkaXIgPSBvcy5nZXRjd2QoKQorICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgbG9jYWxkYXRhKQorICAgICAgICBmb3IgdSBpbiBmZXRjaGVyLnVkOgorICAgICAgICAgICAgdWQgPSBmZXRjaGVyLnVkW3VdCisgICAgICAgICAgICB1ZC5pZ25vcmVfY2hlY2tzdW1zID0gVHJ1ZQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgZmV0Y2hlci51bnBhY2soZGVzdGRpcikKKyAgICAgICAgZm9yIHUgaW4gZmV0Y2hlci51ZDoKKyAgICAgICAgICAgIHVkID0gZmV0Y2hlci51ZFt1XQorICAgICAgICAgICAgaWYgdWQubWV0aG9kLnJlY29tbWVuZHNfY2hlY2tzdW0odWQpOgorICAgICAgICAgICAgICAgIG1kNXZhbHVlID0gYmIudXRpbHMubWQ1X2ZpbGUodWQubG9jYWxwYXRoKQorICAgICAgICAgICAgICAgIHNoYTI1NnZhbHVlID0gYmIudXRpbHMuc2hhMjU2X2ZpbGUodWQubG9jYWxwYXRoKQorICAgICAgICAgICAgICAgIHJldCA9IChtZDV2YWx1ZSwgc2hhMjU2dmFsdWUpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorICAgIHJldHVybiByZXQKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2Jhc2UucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzhmNTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9iYXNlLnB5CkBAIC0wLDAgKzEsNDY2IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNiwgMjAwNywgMjAwOCBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitCYXNlIGNsYXNzZXMgZm9yIGNyZWF0aW5nIGNvbW1hbmRzIGFuZCBzeW50YXggdmVyc2lvbiBvYmplY3QuCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgc2V2ZXJhbCBpbXBvcnRhbnQgYmFzZSBjbGFzc2VzOgorCisgICAgQmFzZURhdGEgLSBUaGUgYmFzZSBhYnN0cmFjdCBjbGFzcyBmb3IgYWxsIGRhdGEgb2JqZWN0cy4gIERhdGEgb2JqZWN0cworICAgICAgICAgICAgICAgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYSBCYXNlSGFuZGxlciBvYmplY3QuCisKKyAgICBCYXNlSGFuZGxlciAtIFRoZSBiYXNlIGFic3RyYWN0IGNsYXNzIGZyb20gd2hpY2ggdmVyc2lvbmVkIGtpY2tzdGFydAorICAgICAgICAgICAgICAgICAgaGFuZGxlciBhcmUgZGVyaXZlZC4gIFN1YmNsYXNzZXMgb2YgQmFzZUhhbmRsZXIgaG9sZAorICAgICAgICAgICAgICAgICAgQmFzZURhdGEgYW5kIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0cy4KKworICAgIERlcHJlY2F0ZWRDb21tYW5kIC0gQW4gYWJzdHJhY3Qgc3ViY2xhc3Mgb2YgS2lja3N0YXJ0Q29tbWFuZCB0aGF0IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgZnVydGhlciBzdWJjbGFzc2VkIGJ5IHVzZXJzIG9mIHRoaXMgbW9kdWxlLiAgV2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgYSBzdWJjbGFzcyBpcyB1c2VkLCBhIHdhcm5pbmcgbWVzc2FnZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVkLgorCisgICAgS2lja3N0YXJ0Q29tbWFuZCAtIFRoZSBiYXNlIGFic3RyYWN0IGNsYXNzIGZvciBhbGwga2lja3N0YXJ0IGNvbW1hbmRzLgorICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kIG9iamVjdHMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYSBCYXNlSGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuCisiIiIKK2ltcG9ydCBnZXR0ZXh0CitnZXR0ZXh0LnRleHRkb21haW4oInB5a2lja3N0YXJ0IikKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworaW1wb3J0IHR5cGVzCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gcHlraWNrc3RhcnQuZXJyb3JzIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0LmtvIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0LnBhcnNlciBpbXBvcnQgUGFja2FnZXMKK2Zyb20gcHlraWNrc3RhcnQudmVyc2lvbiBpbXBvcnQgdmVyc2lvblRvU3RyaW5nCisKKyMjIworIyMjIENPTU1BTkRTCisjIyMKK2NsYXNzIEtpY2tzdGFydENvbW1hbmQoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGtpY2tzdGFydCBjb21tYW5kcy4gIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIiIiCisgICAgcmVtb3ZlZEtleXdvcmRzID0gW10KKyAgICByZW1vdmVkQXR0cnMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydENvbW1hbmQgaW5zdGFuY2UuICBUaGlzIG1ldGhvZCBtdXN0IGJlCisgICAgICAgICAgIHByb3ZpZGVkIGJ5IGFsbCBzdWJjbGFzc2VzLCBidXQgc3ViY2xhc3NlcyBtdXN0IGNhbGwKKyAgICAgICAgICAgS2lja3N0YXJ0Q29tbWFuZC5fX2luaXRfXyBmaXJzdC4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgY3VycmVudENtZCAgICAtLSBUaGUgbmFtZSBvZiB0aGUgY29tbWFuZCBpbiB0aGUgaW5wdXQgZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2VkIHRoaXMgaGFuZGxlciB0byBiZSBydW4uCisgICAgICAgICAgIGN1cnJlbnRMaW5lICAgLS0gVGhlIGN1cnJlbnQgdW5wcm9jZXNzZWQgbGluZSBmcm9tIHRoZSBpbnB1dCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYXVzZWQgdGhpcyBoYW5kbGVyIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgaGFuZGxlciAgICAgICAtLSBBIHJlZmVyZW5jZSB0byB0aGUgQmFzZUhhbmRsZXIgc3ViY2xhc3MgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgaXMgY29udGFpbmVkIHdpdGhpbmcuICBUaGlzIGlzIG5lZWRlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHJlZmVyZW5jaW5nIG9mIERhdGEgb2JqZWN0cy4KKyAgICAgICAgICAgbGluZW5vICAgICAgICAtLSBUaGUgY3VycmVudCBsaW5lIG51bWJlciBpbiB0aGUgaW5wdXQgZmlsZS4KKyAgICAgICAgICAgd3JpdGVQcmlvcml0eSAtLSBBbiBpbnRlZ2VyIHNwZWNpZnlpbmcgd2hlbiB0aGlzIGNvbW1hbmQgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIGFsbCBjb21tYW5kcycgX19zdHJfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMuICBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBsYXRlciB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB3aWxsIGJlIHdyaXR0ZW4uICBBbGwgY29tbWFuZHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIHByaW9yaXR5IHdpbGwgYmUgd3JpdHRlbiBhbHBoYWJldGljYWxseS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHBlb3BsZSB1c2luZyB0aGlzIGNsYXNzIGJ5IGl0c2VsZi4KKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgS2lja3N0YXJ0Q29tbWFuZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIktpY2tzdGFydENvbW1hbmQgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIgorCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi53cml0ZVByaW9yaXR5ID0gd3JpdGVQcmlvcml0eQorCisgICAgICAgICMgVGhlc2Ugd2lsbCBiZSBzZXQgYnkgdGhlIGRpc3BhdGNoZXIuCisgICAgICAgIHNlbGYuY3VycmVudENtZCA9ICIiCisgICAgICAgIHNlbGYuY3VycmVudExpbmUgPSAiIgorICAgICAgICBzZWxmLmhhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYubGluZW5vID0gMAorCisgICAgICAgICMgSWYgYSBzdWJjbGFzcyBwcm92aWRlcyBhIHJlbW92ZWRLZXl3b3JkcyBsaXN0LCByZW1vdmUgYWxsIHRoZQorICAgICAgICAjIG1lbWJlcnMgZnJvbSB0aGUga3dhcmdzIGxpc3QgYmVmb3JlIHdlIHN0YXJ0IHByb2Nlc3NpbmcgaXQuICBUaGlzCisgICAgICAgICMgZW5zdXJlcyB0aGF0IHN1YmNsYXNzZXMgZG9uJ3QgY29udGludWUgdG8gcmVjb2duaXplIGFyZ3VtZW50cyB0aGF0CisgICAgICAgICMgd2VyZSByZW1vdmVkLgorICAgICAgICBmb3IgYXJnIGluIGZpbHRlcihrd2FyZ3MuaGFzX2tleSwgc2VsZi5yZW1vdmVkS2V5d29yZHMpOgorICAgICAgICAgICAga3dhcmdzLnBvcChhcmcpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiU2V0IG11bHRpcGxlIGF0dHJpYnV0ZXMgb24gYSBzdWJjbGFzcyBvZiBLaWNrc3RhcnRDb21tYW5kIGF0IG9uY2UKKyAgICAgICAgICAgdmlhIGtleXdvcmQgYXJndW1lbnRzLiAgVmFsaWQgYXR0cmlidXRlcyBhcmUgYW55dGhpbmcgc3BlY2lmaWVkIGluCisgICAgICAgICAgIGEgc3ViY2xhc3MsIGJ1dCB1bmtub3duIGF0dHJpYnV0ZXMgd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIChrZXksIHZhbCkgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgICAgICAjIElnbm9yZSBzZXR0aW5nIGF0dHJpYnV0ZXMgdGhhdCB3ZXJlIHJlbW92ZWQgaW4gYSBzdWJjbGFzcywgYXMKKyAgICAgICAgICAgICMgaWYgdGhleSB3ZXJlIHVua25vd24gYXR0cmlidXRlcy4KKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmLnJlbW92ZWRBdHRyczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4gIFRoaXMKKyAgICAgICAgICAgbWV0aG9kIG11c3QgYmUgcHJvdmlkZWQgYnkgYWxsIHN1YmNsYXNzZXMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gS2lja3N0YXJ0T2JqZWN0Ll9fc3RyX18oc2VsZikKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiUGFyc2UgdGhlIGxpc3Qgb2YgYXJncyBhbmQgc2V0IGRhdGEgb24gdGhlIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0LgorICAgICAgICAgICBUaGlzIG1ldGhvZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBzdWJjbGFzc2VzLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAicGFyc2UoKSBub3QgaW1wbGVtZW50ZWQgZm9yIEtpY2tzdGFydENvbW1hbmQiCisKKyAgICBkZWYgYXBwbHkoc2VsZiwgaW5zdHJvb3Q9Ii8iKToKKyAgICAgICAgIiIiV3JpdGUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0LgorICAgICAgICAgICBTdWJjbGFzc2VzIHdoaWNoIGRvIG5vdCBwcm92aWRlIHRoaXMgbWV0aG9kIHdpbGwgbm90IGhhdmUgdGhlaXIKKyAgICAgICAgICAgY29uZmlndXJhdGlvbiB3cml0dGVuIG91dC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGRhdGFMaXN0KHNlbGYpOgorICAgICAgICAiIiJGb3IgY29tbWFuZHMgdGhhdCBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMgaW4gYSBzaW5nbGUga2lja3N0YXJ0CisgICAgICAgICAgIGZpbGUgKGxpa2UgbmV0d29yaywgcGFydCwgZXRjLiksIHJldHVybiB0aGUgbGlzdCB0aGF0IHdlIHNob3VsZAorICAgICAgICAgICBhcHBlbmQgbW9yZSBkYXRhIG9iamVjdHMgdG8uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRlbGV0ZVJlbW92ZWRBdHRycyhzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIGFsbCBhdHRyaWJ1dGVzIGZyb20gc2VsZiB0aGF0IGFyZSBnaXZlbiBpbiB0aGUgcmVtb3ZlZEF0dHJzCisgICAgICAgICAgIGxpc3QuICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gX19pbml0X18gaW4gYSBzdWJjbGFzcywKKyAgICAgICAgICAgYnV0IG9ubHkgYWZ0ZXIgdGhlIHN1cGVyY2xhc3MncyBfX2luaXRfXyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGF0dHIgaW4gZmlsdGVyKGxhbWJkYSBrOiBoYXNhdHRyKHNlbGYsIGspLCBzZWxmLnJlbW92ZWRBdHRycyk6CisgICAgICAgICAgICBkZWxhdHRyKHNlbGYsIGF0dHIpCisKKyAgICAjIFNldCB0aGUgY29udGVudHMgb2YgdGhlIG9wdHMgb2JqZWN0IChhbiBpbnN0YW5jZSBvZiBvcHRwYXJzZS5WYWx1ZXMKKyAgICAjIHJldHVybmVkIGJ5IHBhcnNlX2FyZ3MpIGFzIGF0dHJpYnV0ZXMgb24gdGhlIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0LgorICAgICMgSXQncyB1c2VmdWwgdG8gY2FsbCB0aGlzIGZyb20gS2lja3N0YXJ0Q29tbWFuZCBzdWJjbGFzc2VzIGFmdGVyIHBhcnNpbmcKKyAgICAjIHRoZSBhcmd1bWVudHMuCisgICAgZGVmIF9zZXRUb1NlbGYoc2VsZiwgb3B0UGFyc2VyLCBvcHRzKToKKyAgICAgICAgc2VsZi5fc2V0VG9PYmoob3B0UGFyc2VyLCBvcHRzLCBzZWxmKQorCisgICAgIyBTZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgb3B0cyBvYmplY3QgKGFuIGluc3RhbmNlIG9mIG9wdHBhcnNlLlZhbHVlcworICAgICMgcmV0dXJuZWQgYnkgcGFyc2VfYXJncykgYXMgYXR0cmlidXRlcyBvbiB0aGUgcHJvdmlkZWQgb2JqZWN0IG9iai4gIEl0J3MKKyAgICAjIHVzZWZ1bCB0byBjYWxsIHRoaXMgZnJvbSBLaWNrc3RhcnRDb21tYW5kIHN1YmNsYXNzZXMgdGhhdCBoYW5kbGUgbGlzdHMKKyAgICAjIG9mIG9iamVjdHMgKGxpa2UgcGFydGl0aW9ucywgbmV0d29yayBkZXZpY2VzLCBldGMuKSBhbmQgbmVlZCB0byBwb3B1bGF0ZQorICAgICMgYSBEYXRhIG9iamVjdC4KKyAgICBkZWYgX3NldFRvT2JqKHNlbGYsIG9wdFBhcnNlciwgb3B0cywgb2JqKToKKyAgICAgICAgZm9yIGtleSBpbiBmaWx0ZXIgKGxhbWJkYSBrOiBnZXRhdHRyKG9wdHMsIGspICE9IE5vbmUsIG9wdFBhcnNlci5rZXlzKCkpOgorICAgICAgICAgICAgc2V0YXR0cihvYmosIGtleSwgZ2V0YXR0cihvcHRzLCBrZXkpKQorCitjbGFzcyBEZXByZWNhdGVkQ29tbWFuZChLaWNrc3RhcnRDb21tYW5kKToKKyAgICAiIiJTcGVjaWZ5IHRoYXQgYSBjb21tYW5kIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBoYXMgYW55IGZ1bmN0aW9uLgorICAgICAgIEFueSBjb21tYW5kIHRoYXQgaXMgZGVwcmVjYXRlZCBzaG91bGQgYmUgc3ViY2xhc3NlZCBmcm9tIHRoaXMgY2xhc3MsCisgICAgICAgb25seSBzcGVjaWZ5aW5nIGFuIF9faW5pdF9fIG1ldGhvZCB0aGF0IGNhbGxzIHRoZSBzdXBlcmNsYXNzJ3MgX19pbml0X18uCisgICAgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIFdlIGRvbid0IHdhbnQgcGVvcGxlIHVzaW5nIHRoaXMgY2xhc3MgYnkgaXRzZWxmLgorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBLaWNrc3RhcnRDb21tYW5kOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiRGVwcmVjYXRlZENvbW1hbmQgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIgorCisgICAgICAgICMgQ3JlYXRlIGEgbmV3IERlcHJlY2F0ZWRDb21tYW5kIGluc3RhbmNlLgorICAgICAgICBLaWNrc3RhcnRDb21tYW5kLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJQbGFjZWhvbGRlciBzaW5jZSBEZXByZWNhdGVkQ29tbWFuZHMgZG9uJ3Qgd29yayBhbnltb3JlLiIiIgorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiUHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgdGhlIGNvbW1hbmQgaXMgc2VlbiBpbiB0aGUgaW5wdXQgZmlsZS4iIiIKKyAgICAgICAgbWFwcGluZyA9IHsibGluZW5vIjogc2VsZi5saW5lbm8sICJjbWQiOiBzZWxmLmN1cnJlbnRDbWR9CisgICAgICAgIHdhcm5pbmdzLndhcm4oXygiSWdub3JpbmcgZGVwcmVjYXRlZCBjb21tYW5kIG9uIGxpbmUgJShsaW5lbm8pczogIFRoZSAlKGNtZClzIGNvbW1hbmQgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGhhcyBhbnkgZWZmZWN0LiAgSXQgbWF5IGJlIHJlbW92ZWQgZnJvbSBmdXR1cmUgcmVsZWFzZXMsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IgZnJvbSBraWNrc3RhcnQuICBQbGVhc2UgbW9kaWZ5IHlvdXIga2lja3N0YXJ0IGZpbGUgdG8gcmVtb3ZlIHRoaXMgY29tbWFuZC4iKSAlIG1hcHBpbmcsIERlcHJlY2F0aW9uV2FybmluZykKKworCisjIyMKKyMjIyBIQU5ETEVSUworIyMjCitjbGFzcyBCYXNlSGFuZGxlcihLaWNrc3RhcnRPYmplY3QpOgorICAgICIiIkVhY2ggdmVyc2lvbiBvZiBraWNrc3RhcnQgc3ludGF4IGlzIHByb3ZpZGVkIGJ5IGEgc3ViY2xhc3Mgb2YgdGhpcworICAgICAgIGNsYXNzLiAgVGhlc2Ugc3ViY2xhc3NlcyBhcmUgd2hhdCB1c2VycyB3aWxsIGludGVyYWN0IHdpdGggZm9yIHBhcnNpbmcsCisgICAgICAgZXh0cmFjdGluZyBkYXRhLCBhbmQgd3JpdGluZyBvdXQga2lja3N0YXJ0IGZpbGVzLiAgVGhpcyBpcyBhbiBhYnN0cmFjdAorICAgICAgIGNsYXNzLgorCisgICAgICAgdmVyc2lvbiAtLSBUaGUgdmVyc2lvbiB0aGlzIHN5bnRheCBoYW5kbGVyIHN1cHBvcnRzLiAgVGhpcyBpcyBzZXQgYnkKKyAgICAgICAgICAgICAgICAgIGEgY2xhc3MgYXR0cmlidXRlIG9mIGEgQmFzZUhhbmRsZXIgc3ViY2xhc3MgYW5kIGlzIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgIHNldCB1cCB0aGUgY29tbWFuZCBkaWN0LiAgSXQgaXMgZm9yIHJlYWQtb25seSB1c2UuCisgICAgIiIiCisgICAgdmVyc2lvbiA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBwaW5nPU5vbmUsIGRhdGFNYXBwaW5nPU5vbmUsIGNvbW1hbmRVcGRhdGVzPU5vbmUsCisgICAgICAgICAgICAgICAgIGRhdGFVcGRhdGVzPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBCYXNlSGFuZGxlciBpbnN0YW5jZS4gIFRoaXMgbWV0aG9kIG11c3QgYmUgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgYWxsIHN1YmNsYXNzZXMsIGJ1dCBzdWJjbGFzc2VzIG11c3QgY2FsbCBCYXNlSGFuZGxlci5fX2luaXRfXyBmaXJzdC4KKworICAgICAgICAgICBtYXBwaW5nICAgICAgICAgIC0tIEEgY3VzdG9tIG1hcCBmcm9tIGNvbW1hbmQgc3RyaW5ncyB0byBjbGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIHlvdXIgb3duIGhhbmRsZXIgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgY29tbWFuZCBvYmplY3RzLiAgSXQgaXMgb3RoZXJ3aXNlIHVudXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByYXJlbHkgbmVlZGVkLiAgSWYgeW91IGdpdmUgdGhpcyBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFwcGluZyB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIGRlZmF1bHQgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIG11c3QgaW5jbHVkZSBhbGwgY29tbWFuZHMgeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVkLgorICAgICAgICAgICBkYXRhTWFwcGluZyAgICAgIC0tIFRoaXMgaXMgdGhlIHNhbWUgYXMgbWFwcGluZywgYnV0IGZvciBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy4gIEFsbCB0aGUgc2FtZSBjb21tZW50cyBhcHBseS4KKyAgICAgICAgICAgY29tbWFuZFVwZGF0ZXMgICAtLSBUaGlzIGlzIHNpbWlsYXIgdG8gbWFwcGluZywgYnV0IGRvZXMgbm90IHRha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGxhY2Ugb2YgdGhlIGRlZmF1bHRzIGVudGlyZWx5LiAgSW5zdGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1hcHBpbmcgaXMgYXBwbGllZCBhZnRlciB0aGUgZGVmYXVsdHMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcyBpdCB3aXRoIGp1c3QgdGhlIGNvbW1hbmRzIHlvdSB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5LgorICAgICAgICAgICBkYXRhVXBkYXRlcyAgICAgIC0tIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29tbWFuZFVwZGF0ZXMsIGJ1dCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIG9iamVjdHMuCisKKworICAgICAgICAgICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIGNvbW1hbmRzIC0tIEEgbWFwcGluZyBmcm9tIGEgc3RyaW5nIGNvbW1hbmQgdG8gYSBLaWNrc3RhcnRDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgIHN1YmNsYXNzIG9iamVjdCB0aGF0IGhhbmRsZXMgaXQuICBNdWx0aXBsZSBzdHJpbmdzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICBtYXAgdG8gdGhlIHNhbWUgb2JqZWN0LCBidXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb2JqZWN0IHNob3VsZCBldmVyIGV4aXN0LiAgTW9zdCB1c2VycyBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgbmV2ZXIgaGF2ZSB0byBkZWFsIHdpdGggdGhpcyBkaXJlY3RseSwgYXMgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZWQgaW50ZXJuYWxseSBhbmQgY2FsbGVkIHRocm91Z2ggZGlzcGF0Y2hlci4KKyAgICAgICAgICAgY3VycmVudExpbmUgLS0gVGhlIGN1cnJlbnQgdW5wcm9jZXNzZWQgbGluZSBmcm9tIHRoZSBpbnB1dCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2VkIHRoaXMgaGFuZGxlciB0byBiZSBydW4uCisgICAgICAgICAgIHBhY2thZ2VzIC0tIEFuIGluc3RhbmNlIG9mIHB5a2lja3N0YXJ0LnBhcnNlci5QYWNrYWdlcyB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZXMgdGhlIHBhY2thZ2VzIHNlY3Rpb24gb2YgdGhlIGlucHV0IGZpbGUuCisgICAgICAgICAgIHBsYXRmb3JtIC0tIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGhhcmR3YXJlIHBsYXRmb3JtLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgb25seSBieSBzeXN0ZW0tY29uZmlnLWtpY2tzdGFydC4KKyAgICAgICAgICAgc2NyaXB0cyAgLS0gQSBsaXN0IG9mIHB5a2lja3N0YXJ0LnBhcnNlci5TY3JpcHQgaW5zdGFuY2VzLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZWQgYnkgS2lja3N0YXJ0UGFyc2VyLmFkZFNjcmlwdCBhbmQgZGVzY3JpYmVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAlcHJlLyVwb3N0LyV0cmFjZWJhY2sgc2NyaXB0IHNlY3Rpb24gb2YgdGhlIGlucHV0IGZpbGUuCisgICAgICAgICIiIgorCisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCBwZW9wbGUgdXNpbmcgdGhpcyBjbGFzcyBieSBpdHNlbGYuCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIEJhc2VIYW5kbGVyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiQmFzZUhhbmRsZXIgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIgorCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgIyBUaGlzIGlzbid0IHJlYWxseSBhIGdvb2QgcGxhY2UgZm9yIHRoZXNlLCBidXQgaXQncyBiZXR0ZXIgdGhhbgorICAgICAgICAjIGV2ZXJ5dGhpbmcgZWxzZSBJIGNhbiB0aGluayBvZi4KKyAgICAgICAgc2VsZi5zY3JpcHRzID0gW10KKyAgICAgICAgc2VsZi5wYWNrYWdlcyA9IFBhY2thZ2VzKCkKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9ICIiCisKKyAgICAgICAgIyBUaGVzZSB3aWxsIGJlIHNldCBieSB0aGUgZGlzcGF0Y2hlci4KKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IHt9CisgICAgICAgIHNlbGYuY3VycmVudExpbmUgPSAwCisKKyAgICAgICAgIyBBIGRpY3Qga2V5ZWQgYnkgYW4gaW50ZWdlciBwcmlvcml0eSBudW1iZXIsIHdpdGggZWFjaCB2YWx1ZSBiZWluZyBhCisgICAgICAgICMgbGlzdCBvZiBLaWNrc3RhcnRDb21tYW5kIHN1YmNsYXNzZXMuICBUaGlzIGRpY3QgaXMgbWFpbnRhaW5lZCBieQorICAgICAgICAjIHJlZ2lzdGVyQ29tbWFuZCBhbmQgdXNlZCBpbiBfX3N0cl9fLiAgTm8gb25lIGVsc2Ugc2hvdWxkIGJlIHRvdWNoaW5nCisgICAgICAgICMgaXQuCisgICAgICAgIHNlbGYuX3dyaXRlT3JkZXIgPSB7fQorCisgICAgICAgIHNlbGYuX3JlZ2lzdGVyQ29tbWFuZHMobWFwcGluZywgZGF0YU1hcHBpbmcsIGNvbW1hbmRVcGRhdGVzLCBkYXRhVXBkYXRlcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBpZiBzZWxmLnBsYXRmb3JtICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIjcGxhdGZvcm09JXNcbiIgJSBzZWxmLnBsYXRmb3JtCisKKyAgICAgICAgcmV0dmFsICs9ICIjdmVyc2lvbj0lc1xuIiAlIHZlcnNpb25Ub1N0cmluZyhzZWxmLnZlcnNpb24pCisKKyAgICAgICAgbHN0ID0gc2VsZi5fd3JpdGVPcmRlci5rZXlzKCkKKyAgICAgICAgbHN0LnNvcnQoKQorCisgICAgICAgIGZvciBwcmlvIGluIGxzdDoKKyAgICAgICAgICAgIGZvciBvYmogaW4gc2VsZi5fd3JpdGVPcmRlcltwcmlvXToKKyAgICAgICAgICAgICAgICByZXR2YWwgKz0gb2JqLl9fc3RyX18oKQorCisgICAgICAgIGZvciBzY3JpcHQgaW4gc2VsZi5zY3JpcHRzOgorICAgICAgICAgICAgcmV0dmFsICs9IHNjcmlwdC5fX3N0cl9fKCkKKworICAgICAgICByZXR2YWwgKz0gc2VsZi5wYWNrYWdlcy5fX3N0cl9fKCkKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2luc2VydFNvcnRlZChzZWxmLCBsc3QsIG9iaik6CisgICAgICAgIGxlbmd0aCA9IGxlbihsc3QpCisgICAgICAgIGkgPSAwCisKKyAgICAgICAgd2hpbGUgaSA8IGxlbmd0aDoKKyAgICAgICAgICAgICMgSWYgdGhlIHR3byBjbGFzc2VzIGhhdmUgdGhlIHNhbWUgbmFtZSwgaXQncyBiZWNhdXNlIHdlIGFyZQorICAgICAgICAgICAgIyBvdmVycmlkaW5nIGFuIGV4aXN0aW5nIGNsYXNzIHdpdGggb25lIGZyb20gYSBsYXRlciBraWNrc3RhcnQKKyAgICAgICAgICAgICMgdmVyc2lvbiwgc28gcmVtb3ZlIHRoZSBvbGQgb25lIGluIGZhdm9yIG9mIHRoZSBuZXcgb25lLgorICAgICAgICAgICAgaWYgb2JqLl9fY2xhc3NfXy5fX25hbWVfXyA+IGxzdFtpXS5fX2NsYXNzX18uX19uYW1lX186CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBlbGlmIG9iai5fX2NsYXNzX18uX19uYW1lX18gPT0gbHN0W2ldLl9fY2xhc3NfXy5fX25hbWVfXzoKKyAgICAgICAgICAgICAgICBsc3RbaV0gPSBvYmoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgb2JqLl9fY2xhc3NfXy5fX25hbWVfXyA8IGxzdFtpXS5fX2NsYXNzX18uX19uYW1lX186CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBpID49IGxlbmd0aDoKKyAgICAgICAgICAgIGxzdC5hcHBlbmQob2JqKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbHN0Lmluc2VydChpLCBvYmopCisKKyAgICBkZWYgX3NldENvbW1hbmQoc2VsZiwgY21kT2JqKToKKyAgICAgICAgIyBBZGQgYW4gYXR0cmlidXRlIG9uIHRoaXMgdmVyc2lvbiBvYmplY3QuICBXZSBuZWVkIHRoaXMgdG8gcHJvdmlkZSBhCisgICAgICAgICMgd2F5IGZvciBjbGllbnRzIHRvIGFjY2VzcyB0aGUgY29tbWFuZCBvYmplY3RzLiAgV2UgYWxzbyBuZWVkIHRvIHN0cmlwCisgICAgICAgICMgb2ZmIHRoZSB2ZXJzaW9uIHBhcnQgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIG5hbWUuCisgICAgICAgIGlmIGNtZE9iai5fX2NsYXNzX18uX19uYW1lX18uZmluZCgiXyIpICE9IC0xOgorICAgICAgICAgICAgbmFtZSA9IHVuaWNvZGUoY21kT2JqLl9fY2xhc3NfXy5fX25hbWVfXy5zcGxpdCgiXyIsIDEpWzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9IHVuaWNvZGUoY21kT2JqLl9fY2xhc3NfXy5fX25hbWVfXykubG93ZXIoKQorCisgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZS5sb3dlcigpLCBjbWRPYmopCisKKyAgICAgICAgIyBBbHNvLCBhZGQgdGhlIG9iamVjdCBpbnRvIHRoZSBfd3JpdGVPcmRlciBkaWN0IGluIHRoZSByaWdodCBwbGFjZS4KKyAgICAgICAgaWYgY21kT2JqLndyaXRlUHJpb3JpdHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl93cml0ZU9yZGVyLmhhc19rZXkoY21kT2JqLndyaXRlUHJpb3JpdHkpOgorICAgICAgICAgICAgICAgIHNlbGYuX2luc2VydFNvcnRlZChzZWxmLl93cml0ZU9yZGVyW2NtZE9iai53cml0ZVByaW9yaXR5XSwgY21kT2JqKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZU9yZGVyW2NtZE9iai53cml0ZVByaW9yaXR5XSA9IFtjbWRPYmpdCisKKyAgICBkZWYgX3JlZ2lzdGVyQ29tbWFuZHMoc2VsZiwgbWFwcGluZz1Ob25lLCBkYXRhTWFwcGluZz1Ob25lLCBjb21tYW5kVXBkYXRlcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVXBkYXRlcz1Ob25lKToKKyAgICAgICAgaWYgbWFwcGluZyA9PSB7fSBvciBtYXBwaW5nID09IE5vbmU6CisgICAgICAgICAgICBmcm9tIHB5a2lja3N0YXJ0LmhhbmRsZXJzLmNvbnRyb2wgaW1wb3J0IGNvbW1hbmRNYXAKKyAgICAgICAgICAgIGNNYXAgPSBjb21tYW5kTWFwW3NlbGYudmVyc2lvbl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNNYXAgPSBtYXBwaW5nCisKKyAgICAgICAgaWYgZGF0YU1hcHBpbmcgPT0ge30gb3IgZGF0YU1hcHBpbmcgPT0gTm9uZToKKyAgICAgICAgICAgIGZyb20gcHlraWNrc3RhcnQuaGFuZGxlcnMuY29udHJvbCBpbXBvcnQgZGF0YU1hcAorICAgICAgICAgICAgZE1hcCA9IGRhdGFNYXBbc2VsZi52ZXJzaW9uXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZE1hcCA9IGRhdGFNYXBwaW5nCisKKyAgICAgICAgaWYgdHlwZShjb21tYW5kVXBkYXRlcykgPT0gdHlwZXMuRGljdFR5cGU6CisgICAgICAgICAgICBjTWFwLnVwZGF0ZShjb21tYW5kVXBkYXRlcykKKworICAgICAgICBpZiB0eXBlKGRhdGFVcGRhdGVzKSA9PSB0eXBlcy5EaWN0VHlwZToKKyAgICAgICAgICAgIGRNYXAudXBkYXRlKGRhdGFVcGRhdGVzKQorCisgICAgICAgIGZvciAoY21kTmFtZSwgY21kQ2xhc3MpIGluIGNNYXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAjIEZpcnN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IGluc3RhbnRpYXRlZCB0aGlzIGNvbW1hbmQgaGFuZGxlcgorICAgICAgICAgICAgIyBhbHJlYWR5LiAgSWYgd2UgaGF2ZSwgd2UganVzdCBuZWVkIHRvIG1ha2UgYW5vdGhlciBtYXBwaW5nIHRvCisgICAgICAgICAgICAjIGl0IGluIHNlbGYuY29tbWFuZHMuCisgICAgICAgICAgICBjbWRPYmogPSBOb25lCisKKyAgICAgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIHNlbGYuY29tbWFuZHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgdmFsLl9fY2xhc3NfXy5fX25hbWVfXyA9PSBjbWRDbGFzcy5fX25hbWVfXzoKKyAgICAgICAgICAgICAgICAgICAgY21kT2JqID0gdmFsCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgSWYgd2UgZGlkbid0IGZpbmQgYW4gaW5zdGFuY2UgaW4gc2VsZi5jb21tYW5kcywgY3JlYXRlIG9uZSBub3cuCisgICAgICAgICAgICBpZiBjbWRPYmogPT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWRPYmogPSBjbWRDbGFzcygpCisgICAgICAgICAgICAgICAgc2VsZi5fc2V0Q29tbWFuZChjbWRPYmopCisKKyAgICAgICAgICAgICMgRmluYWxseSwgYWRkIHRoZSBtYXBwaW5nIHRvIHRoZSBjb21tYW5kcyBkaWN0LgorICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tjbWROYW1lXSA9IGNtZE9iagorICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tjbWROYW1lXS5oYW5kbGVyID0gc2VsZgorCisgICAgICAgICMgV2UgYWxzbyBuZWVkIHRvIGNyZWF0ZSBhdHRyaWJ1dGVzIGZvciB0aGUgdmFyaW91cyBkYXRhIG9iamVjdHMuCisgICAgICAgICMgTm8gY2hlY2tzIGhlcmUgYmVjYXVzZSBkTWFwIGlzIGEgYmlqZWN0aW9uLiAgQXQgbGVhc3QsIHRoYXQncyB3aGF0CisgICAgICAgICMgdGhlIGNvbW1lbnQgc2F5cy4gIEhvcGUgbm8gb25lIHNjcmV3cyB0aGF0IHVwLgorICAgICAgICBmb3IgKGRhdGFOYW1lLCBkYXRhQ2xhc3MpIGluIGRNYXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGRhdGFOYW1lLCBkYXRhQ2xhc3MpCisKKyAgICBkZWYgZGlzcGF0Y2hlcihzZWxmLCBhcmdzLCBsaW5lbm8pOgorICAgICAgICAiIiJDYWxsIHRoZSBhcHByb3ByaWF0ZSBLaWNrc3RhcnRDb21tYW5kIGhhbmRsZXIgZm9yIHRoZSBjdXJyZW50IGxpbmUKKyAgICAgICAgICAgaW4gdGhlIGtpY2tzdGFydCBmaWxlLiAgQSBoYW5kbGVyIGZvciB0aGUgY3VycmVudCBjb21tYW5kIHNob3VsZAorICAgICAgICAgICBiZSByZWdpc3RlcmVkLCB0aG91Z2ggYSBoYW5kbGVyIG9mIE5vbmUgaXMgbm90IGFuIGVycm9yLiAgUmV0dXJucworICAgICAgICAgICB0aGUgZGF0YSBvYmplY3QgcmV0dXJuZWQgYnkgS2lja3N0YXJ0Q29tbWFuZC5wYXJzZS4KKworICAgICAgICAgICBhcmdzICAgIC0tIEEgbGlzdCBvZiBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgY29tbWFuZAorICAgICAgICAgICBsaW5lbm8gIC0tIFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSwgZm9yIGVycm9yIHJlcG9ydGluZworICAgICAgICAiIiIKKyAgICAgICAgY21kID0gYXJnc1swXQorCisgICAgICAgIGlmIG5vdCBzZWxmLmNvbW1hbmRzLmhhc19rZXkoY21kKToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPV8oIlVua25vd24gY29tbWFuZDogJXMiICUgY21kKSkKKyAgICAgICAgZWxpZiBzZWxmLmNvbW1hbmRzW2NtZF0gIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNbY21kXS5jdXJyZW50Q21kID0gY21kCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2NtZF0uY3VycmVudExpbmUgPSBzZWxmLmN1cnJlbnRMaW5lCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2NtZF0ubGluZW5vID0gbGluZW5vCisKKyAgICAgICAgICAgICMgVGhlIHBhcnNlciByZXR1cm5zIHRoZSBkYXRhIG9iamVjdCB0aGF0IHdhcyBtb2RpZmllZC4gIFRoaXMgY291bGQKKyAgICAgICAgICAgICMgYmUgYSBCYXNlRGF0YSBzdWJjbGFzcyB0aGF0IHNob3VsZCBiZSBwdXQgaW50byBhIGxpc3QsIG9yIGl0CisgICAgICAgICAgICAjIGNvdWxkIGJlIHRoZSBjb21tYW5kIGhhbmRsZXIgb2JqZWN0IGl0c2VsZi4KKyAgICAgICAgICAgIG9iaiA9IHNlbGYuY29tbWFuZHNbY21kXS5wYXJzZShhcmdzWzE6XSkKKyAgICAgICAgICAgIGxzdCA9IHNlbGYuY29tbWFuZHNbY21kXS5kYXRhTGlzdCgpCisgICAgICAgICAgICBpZiBsc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbHN0LmFwcGVuZChvYmopCisKKyAgICAgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBtYXNrQWxsRXhjZXB0KHNlbGYsIGxzdCk6CisgICAgICAgICIiIlNldCBhbGwgZW50cmllcyBpbiB0aGUgY29tbWFuZHMgZGljdCB0byBOb25lLCBleGNlcHQgdGhlIG9uZXMgaW4KKyAgICAgICAgICAgdGhlIGxzdC4gIEFsbCBvdGhlciBjb21tYW5kcyB3aWxsIG5vdCBiZSBwcm9jZXNzZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl93cml0ZU9yZGVyID0ge30KKworICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBzZWxmLmNvbW1hbmRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGtleSBpbiBsc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kc1trZXldID0gTm9uZQorCisgICAgZGVmIGhhc0NvbW1hbmQoc2VsZiwgY21kKToKKyAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBoYW5kbGVyIGZvciB0aGUgc3RyaW5nIGNtZC4iIiIKKyAgICAgICAgcmV0dXJuIGhhc2F0dHIoc2VsZiwgY21kKQorCisKKyMjIworIyMjIERBVEEKKyMjIworY2xhc3MgQmFzZURhdGEoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGRhdGEgb2JqZWN0cy4gIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIiIiCisgICAgcmVtb3ZlZEtleXdvcmRzID0gW10KKyAgICByZW1vdmVkQXR0cnMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBCYXNlRGF0YSBpbnN0YW5jZS4KKyAgICAgICAgCisgICAgICAgICAgIGxpbmVubyAtLSBMaW5lIG51bWJlciBpbiB0aGUga3MtZmlsZSB3aGVyZSB0aGlzIG9iamVjdCB3YXMgZGVmaW5lZAorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIGRvbid0IHdhbnQgcGVvcGxlIHVzaW5nIHRoaXMgY2xhc3MgYnkgaXRzZWxmLgorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBCYXNlRGF0YToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIkJhc2VEYXRhIGlzIGFuIGFic3RyYWN0IGNsYXNzLiIKKworICAgICAgICBLaWNrc3RhcnRPYmplY3QuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmxpbmVubyA9IDAKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiU2V0IG11bHRpcGxlIGF0dHJpYnV0ZXMgb24gYSBzdWJjbGFzcyBvZiBCYXNlRGF0YSBhdCBvbmNlIHZpYQorICAgICAgICAgICBrZXl3b3JkIGFyZ3VtZW50cy4gIFZhbGlkIGF0dHJpYnV0ZXMgYXJlIGFueXRoaW5nIHNwZWNpZmllZCBpbiBhCisgICAgICAgICAgIHN1YmNsYXNzLCBidXQgdW5rbm93biBhdHRyaWJ1dGVzIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICAgICAgIyBJZ25vcmUgc2V0dGluZyBhdHRyaWJ1dGVzIHRoYXQgd2VyZSByZW1vdmVkIGluIGEgc3ViY2xhc3MsIGFzCisgICAgICAgICAgICAjIGlmIHRoZXkgd2VyZSB1bmtub3duIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZi5yZW1vdmVkQXR0cnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWwpCisKKyAgICBkZWYgZGVsZXRlUmVtb3ZlZEF0dHJzKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYWxsIGF0dHJpYnV0ZXMgZnJvbSBzZWxmIHRoYXQgYXJlIGdpdmVuIGluIHRoZSByZW1vdmVkQXR0cnMKKyAgICAgICAgICAgbGlzdC4gIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBfX2luaXRfXyBpbiBhIHN1YmNsYXNzLAorICAgICAgICAgICBidXQgb25seSBhZnRlciB0aGUgc3VwZXJjbGFzcydzIF9faW5pdF9fIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3IgYXR0ciBpbiBmaWx0ZXIobGFtYmRhIGs6IGhhc2F0dHIoc2VsZiwgayksIHNlbGYucmVtb3ZlZEF0dHJzKToKKyAgICAgICAgICAgIGRlbGF0dHIoc2VsZiwgYXR0cikKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL19faW5pdF9fLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5NDU1MAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjAgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA5IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitpbXBvcnQgYm9vdGxvYWRlciwgcGFydGl0aW9uCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9ib290bG9hZGVyLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvYm9vdGxvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI1NTJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvYm9vdGxvYWRlci5weQpAQCAtMCwwICsxLDIxNiBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQuYmFzZSBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5vcHRpb25zIGltcG9ydCAqCisKK2NsYXNzIEZDM19Cb290bG9hZGVyKEtpY2tzdGFydENvbW1hbmQpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEtpY2tzdGFydENvbW1hbmQucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gS2lja3N0YXJ0Q29tbWFuZC5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBLaWNrc3RhcnRDb21tYW5kLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5vcCA9IHNlbGYuX2dldFBhcnNlcigpCisKKyAgICAgICAgc2VsZi5kcml2ZW9yZGVyID0ga3dhcmdzLmdldCgiZHJpdmVvcmRlciIsIFtdKQorICAgICAgICBzZWxmLmFwcGVuZExpbmUgPSBrd2FyZ3MuZ2V0KCJhcHBlbmRMaW5lIiwgIiIpCisgICAgICAgIHNlbGYuZm9yY2VMQkEgPSBrd2FyZ3MuZ2V0KCJmb3JjZUxCQSIsIEZhbHNlKQorICAgICAgICBzZWxmLmxpbmVhciA9IGt3YXJncy5nZXQoImxpbmVhciIsIFRydWUpCisgICAgICAgIHNlbGYubG9jYXRpb24gPSBrd2FyZ3MuZ2V0KCJsb2NhdGlvbiIsICIiKQorICAgICAgICBzZWxmLm1kNXBhc3MgPSBrd2FyZ3MuZ2V0KCJtZDVwYXNzIiwgIiIpCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBrd2FyZ3MuZ2V0KCJwYXNzd29yZCIsICIiKQorICAgICAgICBzZWxmLnVwZ3JhZGUgPSBrd2FyZ3MuZ2V0KCJ1cGdyYWRlIiwgRmFsc2UpCisgICAgICAgIHNlbGYudXNlTGlsbyA9IGt3YXJncy5nZXQoInVzZUxpbG8iLCBGYWxzZSkKKworICAgICAgICBzZWxmLmRlbGV0ZVJlbW92ZWRBdHRycygpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBpZiBzZWxmLmFwcGVuZExpbmUgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWFwcGVuZD1cIiVzXCIiICUgc2VsZi5hcHBlbmRMaW5lCisgICAgICAgIGlmIHNlbGYubGluZWFyOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1saW5lYXIiCisgICAgICAgIGlmIHNlbGYubG9jYXRpb246CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxvY2F0aW9uPSVzIiAlIHNlbGYubG9jYXRpb24KKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiZm9yY2VMQkEiKSBhbmQgc2VsZi5mb3JjZUxCQToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbGJhMzIiCisgICAgICAgIGlmIHNlbGYucGFzc3dvcmQgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXBhc3N3b3JkPVwiJXNcIiIgJSBzZWxmLnBhc3N3b3JkCisgICAgICAgIGlmIHNlbGYubWQ1cGFzcyAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbWQ1cGFzcz1cIiVzXCIiICUgc2VsZi5tZDVwYXNzCisgICAgICAgIGlmIHNlbGYudXBncmFkZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tdXBncmFkZSIKKyAgICAgICAgaWYgc2VsZi51c2VMaWxvOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS11c2VMaWxvIgorICAgICAgICBpZiBsZW4oc2VsZi5kcml2ZW9yZGVyKSA+IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWRyaXZlb3JkZXI9XCIlc1wiIiAlICIsIi5qb2luKHNlbGYuZHJpdmVvcmRlcikKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dmFsID0gS2lja3N0YXJ0Q29tbWFuZC5fX3N0cl9fKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5sb2NhdGlvbiAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIyBTeXN0ZW0gYm9vdGxvYWRlciBjb25maWd1cmF0aW9uXG5ib290bG9hZGVyIgorICAgICAgICAgICAgcmV0dmFsICs9IHNlbGYuX2dldEFyZ3NBc1N0cigpICsgIlxuIgorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBkZWYgZHJpdmVvcmRlcl9jYiAob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIGZvciBkIGluIHZhbHVlLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIFtdKS5hcHBlbmQoZCkKKworICAgICAgICBvcCA9IEtTT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1hcHBlbmQiLCBkZXN0PSJhcHBlbmRMaW5lIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1saW5lYXIiLCBkZXN0PSJsaW5lYXIiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ub2xpbmVhciIsIGRlc3Q9ImxpbmVhciIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxvY2F0aW9uIiwgZGVzdD0ibG9jYXRpb24iLCB0eXBlPSJjaG9pY2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im1iciIsCisgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bIm1iciIsICJwYXJ0aXRpb24iLCAibm9uZSIsICJib290Il0pCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbGJhMzIiLCBkZXN0PSJmb3JjZUxCQSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1wYXNzd29yZCIsIGRlc3Q9InBhc3N3b3JkIiwgZGVmYXVsdD0iIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1tZDVwYXNzIiwgZGVzdD0ibWQ1cGFzcyIsIGRlZmF1bHQ9IiIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tdXBncmFkZSIsIGRlc3Q9InVwZ3JhZGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tdXNlTGlsbyIsIGRlc3Q9InVzZUxpbG8iLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZHJpdmVvcmRlciIsIGRlc3Q9ImRyaXZlb3JkZXIiLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1kcml2ZW9yZGVyX2NiLCBuYXJncz0xLCB0eXBlPSJzdHJpbmciKQorICAgICAgICByZXR1cm4gb3AKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IHNlbGYub3AucGFyc2VfYXJncyhhcmdzPWFyZ3MsIGxpbmVubz1zZWxmLmxpbmVubykKKyAgICAgICAgc2VsZi5fc2V0VG9TZWxmKHNlbGYub3AsIG9wdHMpCisKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50Q21kID09ICJsaWxvIjoKKyAgICAgICAgICAgIHNlbGYudXNlTGlsbyA9IFRydWUKKworICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBGQzRfQm9vdGxvYWRlcihGQzNfQm9vdGxvYWRlcik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkMzX0Jvb3Rsb2FkZXIucmVtb3ZlZEtleXdvcmRzICsgWyJsaW5lYXIiLCAidXNlTGlsbyJdCisgICAgcmVtb3ZlZEF0dHJzID0gRkMzX0Jvb3Rsb2FkZXIucmVtb3ZlZEF0dHJzICsgWyJsaW5lYXIiLCAidXNlTGlsbyJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkMzX0Jvb3Rsb2FkZXIuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9ICIiCisgICAgICAgIGlmIHNlbGYuYXBwZW5kTGluZSAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYXBwZW5kPVwiJXNcIiIgJSBzZWxmLmFwcGVuZExpbmUKKyAgICAgICAgaWYgc2VsZi5sb2NhdGlvbjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbG9jYXRpb249JXMiICUgc2VsZi5sb2NhdGlvbgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJmb3JjZUxCQSIpIGFuZCBzZWxmLmZvcmNlTEJBOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sYmEzMiIKKyAgICAgICAgaWYgc2VsZi5wYXNzd29yZCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcGFzc3dvcmQ9XCIlc1wiIiAlIHNlbGYucGFzc3dvcmQKKyAgICAgICAgaWYgc2VsZi5tZDVwYXNzICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1tZDVwYXNzPVwiJXNcIiIgJSBzZWxmLm1kNXBhc3MKKyAgICAgICAgaWYgc2VsZi51cGdyYWRlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS11cGdyYWRlIgorICAgICAgICBpZiBsZW4oc2VsZi5kcml2ZW9yZGVyKSA+IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWRyaXZlb3JkZXI9XCIlc1wiIiAlICIsIi5qb2luKHNlbGYuZHJpdmVvcmRlcikKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRkMzX0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLWxpbmVhciIpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tbm9saW5lYXIiKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLXVzZUxpbG8iKQorICAgICAgICByZXR1cm4gb3AKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IHNlbGYub3AucGFyc2VfYXJncyhhcmdzPWFyZ3MsIGxpbmVubz1zZWxmLmxpbmVubykKKyAgICAgICAgc2VsZi5fc2V0VG9TZWxmKHNlbGYub3AsIG9wdHMpCisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEY4X0Jvb3Rsb2FkZXIoRkM0X0Jvb3Rsb2FkZXIpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDNF9Cb290bG9hZGVyLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDNF9Cb290bG9hZGVyLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLnRpbWVvdXQgPSBrd2FyZ3MuZ2V0KCJ0aW1lb3V0IiwgTm9uZSkKKyAgICAgICAgc2VsZi5kZWZhdWx0ID0ga3dhcmdzLmdldCgiZGVmYXVsdCIsICIiKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldCA9IEZDNF9Cb290bG9hZGVyLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXQgKz0gIiAtLXRpbWVvdXQ9JWQiICUoc2VsZi50aW1lb3V0LCkKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0OgorICAgICAgICAgICAgcmV0ICs9ICIgLS1kZWZhdWx0PSVzIiAlKHNlbGYuZGVmYXVsdCwpCisKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRkM0X0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXRpbWVvdXQiLCBkZXN0PSJ0aW1lb3V0IiwgdHlwZT0iaW50IikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1kZWZhdWx0IiwgZGVzdD0iZGVmYXVsdCIpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTJfQm9vdGxvYWRlcihGOF9Cb290bG9hZGVyKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGOF9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEY4X0Jvb3Rsb2FkZXIucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGOF9Cb290bG9hZGVyLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1sYmEzMiIsIGRlc3Q9ImZvcmNlTEJBIiwgZGVwcmVjYXRlZD0xLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjE0X0Jvb3Rsb2FkZXIoRjEyX0Jvb3Rsb2FkZXIpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEYxMl9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcyArIFsiZm9yY2VMQkEiXQorICAgIHJlbW92ZWRBdHRycyA9IEYxMl9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcyArIFsiZm9yY2VMQkEiXQorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRjEyX0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLWxiYTMyIikKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxNV9Cb290bG9hZGVyKEYxNF9Cb290bG9hZGVyKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGMTRfQm9vdGxvYWRlci5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGMTRfQm9vdGxvYWRlci5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGMTRfQm9vdGxvYWRlci5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5pc0NyeXB0ZWQgPSBrd2FyZ3MuZ2V0KCJpc0NyeXB0ZWQiLCBGYWxzZSkKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXQgPSBGMTRfQm9vdGxvYWRlci5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5pc0NyeXB0ZWQ6CisgICAgICAgICAgICByZXQgKz0gIiAtLWlzY3J5cHRlZCIKKworICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgZGVmIHBhc3N3b3JkX2NiKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmlzQ3J5cHRlZCA9IFRydWUKKyAgICAgICAgICAgIHBhcnNlci52YWx1ZXMucGFzc3dvcmQgPSB2YWx1ZQorCisgICAgICAgIG9wID0gRjE0X0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWlzY3J5cHRlZCIsIGRlc3Q9ImlzQ3J5cHRlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbWQ1cGFzcyIsIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1wYXNzd29yZF9jYiwgbmFyZ3M9MSwgdHlwZT0ic3RyaW5nIikKKyAgICAgICAgcmV0dXJuIG9wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9wYXJ0aXRpb24ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9wYXJ0aXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2NGIxYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL3BhcnRpdGlvbi5weQpAQCAtMCwwICsxLDMxNCBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQuYmFzZSBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5lcnJvcnMgaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQub3B0aW9ucyBpbXBvcnQgKgorCitpbXBvcnQgZ2V0dGV4dAoraW1wb3J0IHdhcm5pbmdzCitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK2NsYXNzIEZDM19QYXJ0RGF0YShCYXNlRGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gQmFzZURhdGEucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gQmFzZURhdGEucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgQmFzZURhdGEuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFjdGl2ZSA9IGt3YXJncy5nZXQoImFjdGl2ZSIsIEZhbHNlKQorICAgICAgICBzZWxmLnByaW1Pbmx5ID0ga3dhcmdzLmdldCgicHJpbU9ubHkiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5lbmQgPSBrd2FyZ3MuZ2V0KCJlbmQiLCAwKQorICAgICAgICBzZWxmLmZzdHlwZSA9IGt3YXJncy5nZXQoImZzdHlwZSIsICIiKQorICAgICAgICBzZWxmLmdyb3cgPSBrd2FyZ3MuZ2V0KCJncm93IiwgRmFsc2UpCisgICAgICAgIHNlbGYubWF4U2l6ZU1CID0ga3dhcmdzLmdldCgibWF4U2l6ZU1CIiwgMCkKKyAgICAgICAgc2VsZi5mb3JtYXQgPSBrd2FyZ3MuZ2V0KCJmb3JtYXQiLCBUcnVlKQorICAgICAgICBzZWxmLm9uYmlvc2Rpc2sgPSBrd2FyZ3MuZ2V0KCJvbmJpb3NkaXNrIiwgIiIpCisgICAgICAgIHNlbGYuZGlzayA9IGt3YXJncy5nZXQoImRpc2siLCAiIikKKyAgICAgICAgc2VsZi5vblBhcnQgPSBrd2FyZ3MuZ2V0KCJvblBhcnQiLCAiIikKKyAgICAgICAgc2VsZi5yZWNvbW1lbmRlZCA9IGt3YXJncy5nZXQoInJlY29tbWVuZGVkIiwgRmFsc2UpCisgICAgICAgIHNlbGYuc2l6ZSA9IGt3YXJncy5nZXQoInNpemUiLCBOb25lKQorICAgICAgICBzZWxmLnN0YXJ0ID0ga3dhcmdzLmdldCgic3RhcnQiLCAwKQorICAgICAgICBzZWxmLm1vdW50cG9pbnQgPSBrd2FyZ3MuZ2V0KCJtb3VudHBvaW50IiwgIiIpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIHkpOgorICAgICAgICBpZiBzZWxmLm1vdW50cG9pbnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb3VudHBvaW50ID09IHkubW91bnRwb2ludAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBpZiBzZWxmLmFjdGl2ZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYWN0aXZlIgorICAgICAgICBpZiBzZWxmLnByaW1Pbmx5OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1hc3ByaW1hcnkiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImVuZCIpIGFuZCBzZWxmLmVuZCAhPSAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1lbmQ9JXMiICUgc2VsZi5lbmQKKyAgICAgICAgaWYgc2VsZi5mc3R5cGUgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWZzdHlwZT1cIiVzXCIiICUgc2VsZi5mc3R5cGUKKyAgICAgICAgaWYgc2VsZi5ncm93OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ncm93IgorICAgICAgICBpZiBzZWxmLm1heFNpemVNQiA+IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW1heHNpemU9JWQiICUgc2VsZi5tYXhTaXplTUIKKyAgICAgICAgaWYgbm90IHNlbGYuZm9ybWF0OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ub2Zvcm1hdCIKKyAgICAgICAgaWYgc2VsZi5vbmJpb3NkaXNrICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1vbmJpb3NkaXNrPSVzIiAlIHNlbGYub25iaW9zZGlzaworICAgICAgICBpZiBzZWxmLmRpc2sgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW9uZGlzaz0lcyIgJSBzZWxmLmRpc2sKKyAgICAgICAgaWYgc2VsZi5vblBhcnQgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW9ucGFydD0lcyIgJSBzZWxmLm9uUGFydAorICAgICAgICBpZiBzZWxmLnJlY29tbWVuZGVkOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1yZWNvbW1lbmRlZCIKKyAgICAgICAgaWYgc2VsZi5zaXplIGFuZCBzZWxmLnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc2l6ZT0lc2siICUgc2VsZi5zaXplCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgInN0YXJ0IikgYW5kIHNlbGYuc3RhcnQgIT0gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc3RhcnQ9JXMiICUgc2VsZi5zdGFydAorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBCYXNlRGF0YS5fX3N0cl9fKHNlbGYpCisgICAgICAgIGlmIHNlbGYubW91bnRwb2ludDoKKyAgICAgICAgICAgIG1vdW50cG9pbnRfc3RyID0gIiVzIiAlIHNlbGYubW91bnRwb2ludAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW91bnRwb2ludF9zdHIgPSAiKE5vIG1vdW50IHBvaW50KSIKKyAgICAgICAgcmV0dmFsICs9ICJwYXJ0ICVzJXNcbiIgJSAobW91bnRwb2ludF9zdHIsIHNlbGYuX2dldEFyZ3NBc1N0cigpKQorICAgICAgICByZXR1cm4gcmV0dmFsCisKK2NsYXNzIEZDNF9QYXJ0RGF0YShGQzNfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDM19QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGQzNfUGFydERhdGEucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkMzX1BhcnREYXRhLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5ieXRlc1Blcklub2RlID0ga3dhcmdzLmdldCgiYnl0ZXNQZXJJbm9kZSIsIDQwOTYpCisgICAgICAgIHNlbGYuZnNvcHRzID0ga3dhcmdzLmdldCgiZnNvcHRzIiwgIiIpCisgICAgICAgIHNlbGYubGFiZWwgPSBrd2FyZ3MuZ2V0KCJsYWJlbCIsICIiKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEZDM19QYXJ0RGF0YS5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiYnl0ZXNQZXJJbm9kZSIpIGFuZCBzZWxmLmJ5dGVzUGVySW5vZGUgIT0gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYnl0ZXMtcGVyLWlub2RlPSVkIiAlIHNlbGYuYnl0ZXNQZXJJbm9kZQorICAgICAgICBpZiBzZWxmLmZzb3B0cyAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZnNvcHRpb25zPVwiJXNcIiIgJSBzZWxmLmZzb3B0cworICAgICAgICBpZiBzZWxmLmxhYmVsICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sYWJlbD0lcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCitjbGFzcyBGOV9QYXJ0RGF0YShGQzRfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMgKyBbImJ5dGVzUGVySW5vZGUiXQorICAgIHJlbW92ZWRBdHRycyA9IEZDNF9QYXJ0RGF0YS5yZW1vdmVkQXR0cnMgKyBbImJ5dGVzUGVySW5vZGUiXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDNF9QYXJ0RGF0YS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZGVsZXRlUmVtb3ZlZEF0dHJzKCkKKworICAgICAgICBzZWxmLmZzb3B0cyA9IGt3YXJncy5nZXQoImZzb3B0cyIsICIiKQorICAgICAgICBzZWxmLmxhYmVsID0ga3dhcmdzLmdldCgibGFiZWwiLCAiIikKKyAgICAgICAgc2VsZi5mc3Byb2ZpbGUgPSBrd2FyZ3MuZ2V0KCJmc3Byb2ZpbGUiLCAiIikKKyAgICAgICAgc2VsZi5lbmNyeXB0ZWQgPSBrd2FyZ3MuZ2V0KCJlbmNyeXB0ZWQiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wYXNzcGhyYXNlID0ga3dhcmdzLmdldCgicGFzc3BocmFzZSIsICIiKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEZDNF9QYXJ0RGF0YS5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5mc3Byb2ZpbGUgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWZzcHJvZmlsZT1cIiVzXCIiICUgc2VsZi5mc3Byb2ZpbGUKKyAgICAgICAgaWYgc2VsZi5lbmNyeXB0ZWQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWVuY3J5cHRlZCIKKworICAgICAgICAgICAgaWYgc2VsZi5wYXNzcGhyYXNlICE9ICIiOgorICAgICAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcGFzc3BocmFzZT1cIiVzXCIiICUgc2VsZi5wYXNzcGhyYXNlCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCitjbGFzcyBGMTFfUGFydERhdGEoRjlfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEY5X1BhcnREYXRhLnJlbW92ZWRLZXl3b3JkcyArIFsic3RhcnQiLCAiZW5kIl0KKyAgICByZW1vdmVkQXR0cnMgPSBGOV9QYXJ0RGF0YS5yZW1vdmVkQXR0cnMgKyBbInN0YXJ0IiwgImVuZCJdCisKK2NsYXNzIEYxMl9QYXJ0RGF0YShGMTFfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEYxMV9QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGMTFfUGFydERhdGEucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRjExX1BhcnREYXRhLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLmVzY3Jvd2NlcnQgPSBrd2FyZ3MuZ2V0KCJlc2Nyb3djZXJ0IiwgIiIpCisgICAgICAgIHNlbGYuYmFja3VwcGFzc3BocmFzZSA9IGt3YXJncy5nZXQoImJhY2t1cHBhc3NwaHJhc2UiLCBGYWxzZSkKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBGMTFfUGFydERhdGEuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYuZW5jcnlwdGVkIGFuZCBzZWxmLmVzY3Jvd2NlcnQgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWVzY3Jvd2NlcnQ9XCIlc1wiIiAlIHNlbGYuZXNjcm93Y2VydAorCisgICAgICAgICAgICBpZiBzZWxmLmJhY2t1cHBhc3NwaHJhc2U6CisgICAgICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1iYWNrdXBwYXNzcGhyYXNlIgorCisgICAgICAgIHJldHVybiByZXR2YWwKKworRjE0X1BhcnREYXRhID0gRjEyX1BhcnREYXRhCisKK2NsYXNzIEZDM19QYXJ0aXRpb24oS2lja3N0YXJ0Q29tbWFuZCk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gS2lja3N0YXJ0Q29tbWFuZC5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBLaWNrc3RhcnRDb21tYW5kLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTMwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBLaWNrc3RhcnRDb21tYW5kLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5vcCA9IHNlbGYuX2dldFBhcnNlcigpCisKKyAgICAgICAgc2VsZi5wYXJ0aXRpb25zID0ga3dhcmdzLmdldCgicGFydGl0aW9ucyIsIFtdKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHZhbCA9ICIiCisKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgcmV0dmFsICs9IHBhcnQuX19zdHJfXygpCisKKyAgICAgICAgaWYgcmV0dmFsICE9ICIiOgorICAgICAgICAgICAgcmV0dXJuICIjIERpc2sgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uXG4iICsgcmV0dmFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBkZWYgcGFydF9jYiAob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIi9kZXYvIik6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlWzU6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlKQorCisgICAgICAgIG9wID0gS1NPcHRpb25QYXJzZXIoKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWFjdGl2ZSIsIGRlc3Q9ImFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1hc3ByaW1hcnkiLCBkZXN0PSJwcmltT25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lbmQiLCBkZXN0PSJlbmQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICBuYXJncz0xKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWZzdHlwZSIsICItLXR5cGUiLCBkZXN0PSJmc3R5cGUiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWdyb3ciLCBkZXN0PSJncm93IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1tYXhzaXplIiwgZGVzdD0ibWF4U2l6ZU1CIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsCisgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ub2Zvcm1hdCIsIGRlc3Q9ImZvcm1hdCIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1vbmJpb3NkaXNrIiwgZGVzdD0ib25iaW9zZGlzayIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tb25kaXNrIiwgIi0tb25kcml2ZSIsIGRlc3Q9ImRpc2siKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW9ucGFydCIsICItLXVzZXBhcnQiLCBkZXN0PSJvblBhcnQiLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1wYXJ0X2NiLCBuYXJncz0xLCB0eXBlPSJzdHJpbmciKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXJlY29tbWVuZGVkIiwgZGVzdD0icmVjb21tZW5kZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tc2l6ZSIsIGRlc3Q9InNpemUiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1zdGFydCIsIGRlc3Q9InN0YXJ0IiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsCisgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSkKKyAgICAgICAgcmV0dXJuIG9wCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncyk6CisgICAgICAgIChvcHRzLCBleHRyYSkgPSBzZWxmLm9wLnBhcnNlX2FyZ3MoYXJncz1hcmdzLCBsaW5lbm89c2VsZi5saW5lbm8pCisKKyAgICAgICAgcGQgPSBzZWxmLmhhbmRsZXIuUGFydERhdGEoKQorICAgICAgICBzZWxmLl9zZXRUb09iaihzZWxmLm9wLCBvcHRzLCBwZCkKKyAgICAgICAgcGQubGluZW5vID0gc2VsZi5saW5lbm8KKyAgICAgICAgaWYgZXh0cmE6CisgICAgICAgICAgICBwZC5tb3VudHBvaW50ID0gZXh0cmFbMF0KKyAgICAgICAgICAgIGlmIHBkIGluIHNlbGYuZGF0YUxpc3QoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKF8oIkEgcGFydGl0aW9uIHdpdGggdGhlIG1vdW50cG9pbnQgJXMgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIpICUgcGQubW91bnRwb2ludCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBkLm1vdW50cG9pbnQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIHBkCisKKyAgICBkZWYgZGF0YUxpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcnRpdGlvbnMKKworY2xhc3MgRkM0X1BhcnRpdGlvbihGQzNfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzNfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDM19QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMzAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDM19QYXJ0aXRpb24uX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBwYXJ0X2NiIChvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgorICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgiL2Rldi8iKToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWVbNTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWUpCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGQzNfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ieXRlcy1wZXItaW5vZGUiLCBkZXN0PSJieXRlc1Blcklub2RlIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iaW50IiwgbmFyZ3M9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1mc29wdGlvbnMiLCBkZXN0PSJmc29wdHMiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxhYmVsIiwgZGVzdD0ibGFiZWwiKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjlfUGFydGl0aW9uKEZDNF9QYXJ0aXRpb24pOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9QYXJ0aXRpb24ucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRkM0X1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEzMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkM0X1BhcnRpdGlvbi5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgZGVmIHBhcnRfY2IgKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCIvZGV2LyIpOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZVs1Ol0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZSkKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEZDNF9QYXJ0aXRpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWJ5dGVzLXBlci1pbm9kZSIsIGRlcHJlY2F0ZWQ9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1mc3Byb2ZpbGUiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWVuY3J5cHRlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tcGFzc3BocmFzZSIpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTFfUGFydGl0aW9uKEY5X1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjlfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEY5X1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEY5X1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tc3RhcnQiLCBkZXByZWNhdGVkPTEpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZW5kIiwgZGVwcmVjYXRlZD0xKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjEyX1BhcnRpdGlvbihGMTFfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGMTFfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEYxMV9QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGMTFfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lc2Nyb3djZXJ0IikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1iYWNrdXBwYXNzcGhyYXNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxNF9QYXJ0aXRpb24oRjEyX1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjEyX1BhcnRpdGlvbi5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGMTJfUGFydGl0aW9uLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRjEyX1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tYnl0ZXMtcGVyLWlub2RlIikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS1zdGFydCIpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tZW5kIikKKyAgICAgICAgcmV0dXJuIG9wCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb25zdGFudHMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb25zdGFudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxMmZjOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbnN0YW50cy5weQpAQCAtMCwwICsxLDU3IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNS0yMDA3IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitDTEVBUlBBUlRfVFlQRV9MSU5VWCA9IDAKK0NMRUFSUEFSVF9UWVBFX0FMTCA9IDEKK0NMRUFSUEFSVF9UWVBFX05PTkUgPSAyCisKK0RJU1BMQVlfTU9ERV9DTURMSU5FID0gMAorRElTUExBWV9NT0RFX0dSQVBISUNBTCA9IDEKK0RJU1BMQVlfTU9ERV9URVhUID0gMgorCitGSVJTVEJPT1RfREVGQVVMVCA9IDAKK0ZJUlNUQk9PVF9TS0lQID0gMQorRklSU1RCT09UX1JFQ09ORklHID0gMgorCitLU19NSVNTSU5HX1BST01QVCA9IDAKK0tTX01JU1NJTkdfSUdOT1JFID0gMQorCitTRUxJTlVYX0RJU0FCTEVEID0gMAorU0VMSU5VWF9FTkZPUkNJTkcgPSAxCitTRUxJTlVYX1BFUk1JU1NJVkUgPSAyCisKK0tTX1NDUklQVF9QUkUgPSAwCitLU19TQ1JJUFRfUE9TVCA9IDEKK0tTX1NDUklQVF9UUkFDRUJBQ0sgPSAyCisKK0tTX1dBSVQgPSAwCitLU19SRUJPT1QgPSAxCitLU19TSFVURE9XTiA9IDIKKworS1NfSU5TVEtFWV9TS0lQID0gLTk5CisKK0JPT1RQUk9UT19ESENQID0gImRoY3AiCitCT09UUFJPVE9fQk9PVFAgPSAiYm9vdHAiCitCT09UUFJPVE9fU1RBVElDID0gInN0YXRpYyIKK0JPT1RQUk9UT19RVUVSWSA9ICJxdWVyeSIKK0JPT1RQUk9UT19JQkZUID0gImliZnQiCisKK0dST1VQX1JFUVVJUkVEID0gMAorR1JPVVBfREVGQVVMVCA9IDEKK0dST1VQX0FMTCA9IDIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2Vycm9ycy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2Vycm9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjM0ZDk5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvZXJyb3JzLnB5CkBAIC0wLDAgKzEsMTAzIEBACisjCisjIGVycm9ycy5weTogIEtpY2tzdGFydCBlcnJvciBoYW5kbGluZy4KKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitFcnJvciBoYW5kbGluZyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgYSBzaW5nbGUgZnVuY3Rpb246CisKKyAgICBmb3JtYXRFcnJvck1zZyAtIFByb3Blcmx5IGZvcm1hdHMgYW4gZXJyb3IgbWVzc2FnZS4KKworSXQgYWxzbyBleHBvcnRzIHNldmVyYWwgZXhjZXB0aW9uIGNsYXNzZXM6CisKKyAgICBLaWNrc3RhcnRFcnJvciAtIEEgZ2VuZXJpYyBleGNlcHRpb24gY2xhc3MuCisKKyAgICBLaWNrc3RhcnRQYXJzZUVycm9yIC0gQW4gZXhjZXB0aW9uIGZvciBlcnJvcnMgcmVsYXRpbmcgdG8gcGFyc2luZy4KKworICAgIEtpY2tzdGFydFZhbHVlRXJyb3IgLSBBbiBleGNlcHRpb24gZm9yIGVycm9ycyByZWxhdGluZyB0byBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy4KKworICAgIEtpY2tzdGFydFZlcnNpb25FcnJvciAtIEFuIGV4Y2VwdGlvbiBmb3IgZXJyb3JzIHJlbGF0aW5nIHRvIHVuc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IHZlcnNpb25zLgorIiIiCitpbXBvcnQgZ2V0dGV4dAorXyA9IGxhbWJkYSB4OiBnZXR0ZXh0LmxkZ2V0dGV4dCgicHlraWNrc3RhcnQiLCB4KQorCitkZWYgZm9ybWF0RXJyb3JNc2cobGluZW5vLCBtc2c9IiIpOgorICAgICIiIlByb3Blcmx5IGZvcm1hdCB0aGUgZXJyb3IgbWVzc2FnZSBtc2cgZm9yIGluY2x1c2lvbiBpbiBhbiBleGNlcHRpb24uIiIiCisgICAgaWYgbXNnICE9ICIiOgorICAgICAgICBtYXBwaW5nID0geyJsaW5lbm8iOiBsaW5lbm8sICJtc2ciOiBtc2d9CisgICAgICAgIHJldHVybiBfKCJUaGUgZm9sbG93aW5nIHByb2JsZW0gb2NjdXJyZWQgb24gbGluZSAlKGxpbmVubylzIG9mIHRoZSBraWNrc3RhcnQgZmlsZTpcblxuJShtc2cpc1xuIikgJSBtYXBwaW5nCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIF8oIlRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBmcm9tIGxpbmUgJXMgb2YgdGhlIGtpY2tzdGFydCBmaWxlIikgJSBsaW5lbm8KKworY2xhc3MgS2lja3N0YXJ0RXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJBIGdlbmVyaWMgZXhjZXB0aW9uIGNsYXNzIGZvciB1bnNwZWNpZmljIGVycm9yIGNvbmRpdGlvbnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCA9ICIiKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydEVycm9yIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aXRoIHRoZSBkZXNjcmlwdGl2ZQorICAgICAgICAgICBtZXNzYWdlIHZhbC4gIHZhbCBzaG91bGQgYmUgdGhlIHJldHVybiB2YWx1ZSBvZiBmb3JtYXRFcnJvck1zZy4KKyAgICAgICAgIiIiCisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnZhbHVlID0gdmFsCisKKyAgICBkZWYgX19zdHJfXyAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2NsYXNzIEtpY2tzdGFydFBhcnNlRXJyb3IoS2lja3N0YXJ0RXJyb3IpOgorICAgICIiIkFuIGV4Y2VwdGlvbiBjbGFzcyBmb3IgZXJyb3JzIHdoZW4gcHJvY2Vzc2luZyB0aGUgaW5wdXQgZmlsZSwgc3VjaCBhcworICAgICAgIHVua25vd24gb3B0aW9ucywgY29tbWFuZHMsIG9yIHNlY3Rpb25zLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0UGFyc2VFcnJvciBleGNlcHRpb24gaW5zdGFuY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgZGVzY3JpcHRpdmUgbWVzc2FnZSB2YWwuICB2YWwgc2hvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgICAgICAgZm9ybWF0RXJyb3JNc2cuCisgICAgICAgICIiIgorICAgICAgICBLaWNrc3RhcnRFcnJvci5fX2luaXRfXyhzZWxmLCBtc2cpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworY2xhc3MgS2lja3N0YXJ0VmFsdWVFcnJvcihLaWNrc3RhcnRFcnJvcik6CisgICAgIiIiQW4gZXhjZXB0aW9uIGNsYXNzIGZvciBlcnJvcnMgd2hlbiBwcm9jZXNzaW5nIGFyZ3VtZW50cyB0byBjb21tYW5kcywKKyAgICAgICBzdWNoIGFzIHRvbyBtYW55IGFyZ3VtZW50cywgdG9vIGZldyBhcmd1bWVudHMsIG9yIG1pc3NpbmcgcmVxdWlyZWQKKyAgICAgICBhcmd1bWVudHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRWYWx1ZUVycm9yIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aXRoIHRoZQorICAgICAgICAgICBkZXNjcmlwdGl2ZSBtZXNzYWdlIHZhbC4gIHZhbCBzaG91bGQgYmUgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICAgICAgICBmb3JtYXRFcnJvck1zZy4KKyAgICAgICAgIiIiCisgICAgICAgIEtpY2tzdGFydEVycm9yLl9faW5pdF9fKHNlbGYsIG1zZykKKworICAgIGRlZiBfX3N0cl9fIChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworY2xhc3MgS2lja3N0YXJ0VmVyc2lvbkVycm9yKEtpY2tzdGFydEVycm9yKToKKyAgICAiIiJBbiBleGNlcHRpb24gY2xhc3MgZm9yIGVycm9ycyByZWxhdGVkIHRvIHVzaW5nIGFuIGluY29ycmVjdCB2ZXJzaW9uIG9mCisgICAgICAga2lja3N0YXJ0IHN5bnRheC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydFZlcnNpb25FcnJvciBleGNlcHRpb24gaW5zdGFuY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgZGVzY3JpcHRpdmUgbWVzc2FnZSB2YWwuICB2YWwgc2hvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgICAgICAgZm9ybWF0RXJyb3JNc2cuCisgICAgICAgICIiIgorICAgICAgICBLaWNrc3RhcnRFcnJvci5fX2luaXRfXyhzZWxmLCBtc2cpCisKKyAgICBkZWYgX19zdHJfXyAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvY29udHJvbC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2NvbnRyb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjODBkMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2NvbnRyb2wucHkKQEAgLTAsMCArMSw0NiBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQudmVyc2lvbiBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5jb21tYW5kcyBpbXBvcnQgKgorCisjIFRoaXMgbWFwIGlzIGtleWVkIG9uIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiBhcyBwcm92aWRlZCBieQorIyBweWtpY2tzdGFydC52ZXJzaW9uLiAgV2l0aGluIGVhY2ggc3ViLWRpY3QgaXMgYSBtYXBwaW5nIGZyb20gY29tbWFuZCBuYW1lCisjIHRvIHRoZSBjbGFzcyB0aGF0IGhhbmRsZXMgaXQuICBUaGlzIGlzIGFuIG9udG8gbWFwcGluZyAtIHRoYXQgaXMsIG11bHRpcGxlCisjIGNvbW1hbmQgbmFtZXMgY2FuIG1hcCB0byB0aGUgc2FtZSBjbGFzcy4gIEhvd2V2ZXIsIHRoZSBIYW5kbGVyIHdpbGwgZW5zdXJlCisjIHRoYXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgZWFjaCBjbGFzcyBldmVyIGV4aXN0cy4KK2NvbW1hbmRNYXAgPSB7CisgICAgIyBiYXNlZCBvbiBmMTUKKyAgICBGMTY6IHsKKyAgICAgICAgImJvb3Rsb2FkZXIiOiBib290bG9hZGVyLkYxNV9Cb290bG9hZGVyLAorICAgICAgICAicGFydCI6IHBhcnRpdGlvbi5GMTRfUGFydGl0aW9uLAorICAgICAgICAicGFydGl0aW9uIjogcGFydGl0aW9uLkYxNF9QYXJ0aXRpb24sCisgICAgfSwKK30KKworIyBUaGlzIG1hcCBpcyBrZXllZCBvbiBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gYXMgcHJvdmlkZWQgYnkKKyMgcHlraWNrc3RhcnQudmVyc2lvbi4gIFdpdGhpbiBlYWNoIHN1Yi1kaWN0IGlzIGEgbWFwcGluZyBmcm9tIGEgZGF0YSBvYmplY3QKKyMgbmFtZSB0byB0aGUgY2xhc3MgdGhhdCBwcm92aWRlcyBpdC4gIFRoaXMgaXMgYSBiaWplY3RpdmUgbWFwcGluZyAtIHRoYXQgaXMsCisjIGVhY2ggbmFtZSBtYXBzIHRvIGV4YWN0bHkgb25lIGRhdGEgY2xhc3MgYW5kIGFsbCBkYXRhIGNsYXNzZXMgaGF2ZSBhIG5hbWUuCisjIE1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YgZWFjaCBjbGFzcyBpcyBhbGxvd2VkIHRvIGV4aXN0LCBob3dldmVyLgorZGF0YU1hcCA9IHsKKyAgICBGMTY6IHsKKyAgICAgICAgIlBhcnREYXRhIjogcGFydGl0aW9uLkYxNF9QYXJ0RGF0YSwKKyAgICB9LAorfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvZjE2LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvZjE2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNTJmOGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9mMTYucHkKQEAgLTAsMCArMSwyNCBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTEgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQuYmFzZSBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC52ZXJzaW9uIGltcG9ydCAqCisKK2NsYXNzIEYxNkhhbmRsZXIoQmFzZUhhbmRsZXIpOgorICAgIHZlcnNpb24gPSBGMTYKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2tvLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQva28ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MGQxOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2tvLnB5CkBAIC0wLDAgKzEsMzcgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA5IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK0Jhc2UgY2xhc3NlcyBmb3IgaW50ZXJuYWwgcHlraWNrc3RhcnQgdXNlLgorCitUaGUgbW9kdWxlIGV4cG9ydHMgdGhlIGZvbGxvd2luZyBpbXBvcnRhbnQgY2xhc3NlczoKKworICAgIEtpY2tzdGFydE9iamVjdCAtIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgY2xhc3NlcyBpbiBweWtpY2tzdGFydAorIiIiCisKK2NsYXNzIEtpY2tzdGFydE9iamVjdChvYmplY3QpOgorICAgICIiIlRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb3RoZXIgY2xhc3NlcyBpbiBweWtpY2tzdGFydC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydE9iamVjdCBpbnN0YW5jZS4gIEFsbCBvdGhlciBjbGFzc2VzIGluCisgICAgICAgICAgIHB5a2lja3N0YXJ0IHNob3VsZCBiZSBkZXJpdmVkIGZyb20gdGhpcyBvbmUuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvb3B0aW9ucy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L29wdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjMjNlZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L29wdGlvbnMucHkKQEAgLTAsMCArMSwyMjMgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA1LCAyMDA2LCAyMDA3IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK1NwZWNpYWxpemVkIG9wdGlvbiBoYW5kbGluZy4KKworVGhpcyBtb2R1bGUgZXhwb3J0cyB0d28gY2xhc3NlczoKKworICAgIEtTT3B0aW9uUGFyc2VyIC0gQSBzcGVjaWFsaXplZCBzdWJjbGFzcyBvZiBPcHRpb25QYXJzZXIgdG8gYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICAgaW4gQmFzZUhhbmRsZXIgc3ViY2xhc3Nlcy4KKworICAgIEtTT3B0aW9uIC0gQSBzcGVjaWFsaXplZCBzdWJjbGFzcyBvZiBPcHRpb24uCisiIiIKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBjb3B5IGltcG9ydCBjb3B5Citmcm9tIG9wdHBhcnNlIGltcG9ydCAqCisKK2Zyb20gY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIGVycm9ycyBpbXBvcnQgKgorZnJvbSB2ZXJzaW9uIGltcG9ydCAqCisKK2ltcG9ydCBnZXR0ZXh0CitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK2NsYXNzIEtTT3B0aW9uUGFyc2VyKE9wdGlvblBhcnNlcik6CisgICAgIiIiQSBzcGVjaWFsaXplZCBzdWJjbGFzcyBvZiBvcHRwYXJzZS5PcHRpb25QYXJzZXIgdG8gaGFuZGxlIGV4dHJhIG9wdGlvbgorICAgICAgIGF0dHJpYnV0ZSBjaGVja2luZywgd29yayBlcnJvciByZXBvcnRpbmcgaW50byB0aGUgS2lja3N0YXJ0UGFyc2VFcnJvcgorICAgICAgIGZyYW1ld29yaywgYW5kIHRvIHR1cm4gb2ZmIHRoZSBkZWZhdWx0IGhlbHAuCisgICAgIiIiCisgICAgZGVmIGV4aXQoc2VsZiwgc3RhdHVzPTAsIG1zZz1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubGluZW5vICE9IE5vbmU6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhzZWxmLmxpbmVubywgbXNnPW1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIG1zZworCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHZhbCA9IFtdCisKKyAgICAgICAgZm9yIG9wdCBpbiBzZWxmLm9wdGlvbl9saXN0OgorICAgICAgICAgICAgaWYgb3B0IG5vdCBpbiByZXR2YWw6CisgICAgICAgICAgICAgICAgcmV0dmFsLmFwcGVuZChvcHQuZGVzdCkKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2luaXRfcGFyc2luZ19zdGF0ZSAoc2VsZik6CisgICAgICAgIE9wdGlvblBhcnNlci5faW5pdF9wYXJzaW5nX3N0YXRlKHNlbGYpCisgICAgICAgIHNlbGYub3B0aW9uX3NlZW4gPSB7fQorCisgICAgZGVmIGNoZWNrX3ZhbHVlcyAoc2VsZiwgdmFsdWVzLCBhcmdzKToKKyAgICAgICAgZGVmIHNlZW4oc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9wdGlvbl9zZWVuLmhhc19rZXkob3B0aW9uKQorCisgICAgICAgIGRlZiB1c2VkVG9vTmV3KHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uLmludHJvZHVjZWQgYW5kIG9wdGlvbi5pbnRyb2R1Y2VkID4gc2VsZi52ZXJzaW9uCisKKyAgICAgICAgZGVmIHVzZWREZXByZWNhdGVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uLmRlcHJlY2F0ZWQKKworICAgICAgICBkZWYgdXNlZFJlbW92ZWQoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybiBvcHRpb24ucmVtb3ZlZCBhbmQgb3B0aW9uLnJlbW92ZWQgPD0gc2VsZi52ZXJzaW9uCisKKyAgICAgICAgZm9yIG9wdGlvbiBpbiBmaWx0ZXIobGFtYmRhIG86IGlzaW5zdGFuY2UobywgT3B0aW9uKSwgc2VsZi5vcHRpb25fbGlzdCk6CisgICAgICAgICAgICBpZiBvcHRpb24ucmVxdWlyZWQgYW5kIG5vdCBzZWVuKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmFsdWVFcnJvciwgZm9ybWF0RXJyb3JNc2coc2VsZi5saW5lbm8sIF8oIk9wdGlvbiAlcyBpcyByZXF1aXJlZCIpICUgb3B0aW9uKQorICAgICAgICAgICAgZWxpZiBzZWVuKHNlbGYsIG9wdGlvbikgYW5kIHVzZWRUb29OZXcoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgICAgICBtYXBwaW5nID0geyJvcHRpb24iOiBvcHRpb24sICJpbnRybyI6IHZlcnNpb25Ub1N0cmluZyhvcHRpb24uaW50cm9kdWNlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiI6IHZlcnNpb25Ub1N0cmluZyhzZWxmLnZlcnNpb24pfQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoXygiVGhlICUob3B0aW9uKXMgb3B0aW9uIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gJShpbnRybylzLCBidXQgeW91IGFyZSB1c2luZyBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gJSh2ZXJzaW9uKXMuIikgJSBtYXBwaW5nKQorICAgICAgICAgICAgZWxpZiBzZWVuKHNlbGYsIG9wdGlvbikgYW5kIHVzZWRSZW1vdmVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgbWFwcGluZyA9IHsib3B0aW9uIjogb3B0aW9uLCAicmVtb3ZlZCI6IHZlcnNpb25Ub1N0cmluZyhvcHRpb24ucmVtb3ZlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiI6IHZlcnNpb25Ub1N0cmluZyhzZWxmLnZlcnNpb24pfQorCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uLnJlbW92ZWQgPT0gc2VsZi52ZXJzaW9uOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKF8oIlRoZSAlKG9wdGlvbilzIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpICUgbWFwcGluZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKF8oIlRoZSAlKG9wdGlvbilzIG9wdGlvbiB3YXMgcmVtb3ZlZCBpbiB2ZXJzaW9uICUocmVtb3ZlZClzLCBidXQgeW91IGFyZSB1c2luZyBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gJSh2ZXJzaW9uKXMuIikgJSBtYXBwaW5nKQorICAgICAgICAgICAgZWxpZiBzZWVuKHNlbGYsIG9wdGlvbikgYW5kIHVzZWREZXByZWNhdGVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgbWFwcGluZyA9IHsibGluZW5vIjogc2VsZi5saW5lbm8sICJvcHRpb24iOiBvcHRpb259CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybihfKCJJZ25vcmluZyBkZXByZWNhdGVkIG9wdGlvbiBvbiBsaW5lICUobGluZW5vKXM6ICBUaGUgJShvcHRpb24pcyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGhhcyBhbnkgZWZmZWN0LiAgSXQgbWF5IGJlIHJlbW92ZWQgZnJvbSBmdXR1cmUgcmVsZWFzZXMsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IgZnJvbSBraWNrc3RhcnQuICBQbGVhc2UgbW9kaWZ5IHlvdXIga2lja3N0YXJ0IGZpbGUgdG8gcmVtb3ZlIHRoaXMgb3B0aW9uLiIpICUgbWFwcGluZywgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgIHJldHVybiAodmFsdWVzLCBhcmdzKQorCisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYga3dhcmdzLmhhc19rZXkoImxpbmVubyIpOgorICAgICAgICAgICAgc2VsZi5saW5lbm8gPSBrd2FyZ3MucG9wKCJsaW5lbm8iKQorCisgICAgICAgIHJldHVybiBPcHRpb25QYXJzZXIucGFyc2VfYXJncyhzZWxmLCAqKmt3YXJncykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBwaW5nPU5vbmUsIHZlcnNpb249Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLU09wdGlvblBhcnNlciBpbnN0YW5jZS4gIEVhY2ggS2lja3N0YXJ0Q29tbWFuZAorICAgICAgICAgICBzdWJjbGFzcyBzaG91bGQgY3JlYXRlIG9uZSBpbnN0YW5jZSBvZiBLU09wdGlvblBhcnNlciwgcHJvdmlkaW5nCisgICAgICAgICAgIGF0IGxlYXN0IHRoZSBsaW5lbm8gYXR0cmlidXRlLiAgbWFwcGluZyBhbmQgdmVyc2lvbiBhcmUgbm90IHJlcXVpcmVkLgorICAgICAgICAgICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIG1hcHBpbmcgLS0gQSBtYXBwaW5nIGZyb20gb3B0aW9uIHN0cmluZ3MgdG8gZGlmZmVyZW50IHZhbHVlcy4KKyAgICAgICAgICAgdmVyc2lvbiAtLSBUaGUgdmVyc2lvbiBvZiB0aGUga2lja3N0YXJ0IHN5bnRheCB3ZSBhcmUgY2hlY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0LgorICAgICAgICAiIiIKKyAgICAgICAgT3B0aW9uUGFyc2VyLl9faW5pdF9fKHNlbGYsIG9wdGlvbl9jbGFzcz1LU09wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oZWxwX29wdGlvbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9InJlc29sdmUiKQorICAgICAgICBpZiBtYXBwaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1hcCA9IHt9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1hcCA9IG1hcHBpbmcKKworICAgICAgICBzZWxmLmxpbmVubyA9IE5vbmUKKyAgICAgICAgc2VsZi5vcHRpb25fc2VlbiA9IHt9CisgICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKworZGVmIF9jaGVja19rc2Jvb2xlYW4ob3B0aW9uLCBvcHQsIHZhbHVlKToKKyAgICBpZiB2YWx1ZS5sb3dlcigpIGluICgib24iLCAieWVzIiwgInRydWUiLCAiMSIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgdmFsdWUubG93ZXIoKSBpbiAoIm9mZiIsICJubyIsICJmYWxzZSIsICIwIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIG1hcHBpbmcgPSB7Im9wdCI6IG9wdCwgInZhbHVlIjogdmFsdWV9CisgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoXygiT3B0aW9uICUob3B0KXM6IGludmFsaWQgYm9vbGVhbiB2YWx1ZTogJSh2YWx1ZSlyIikgJSBtYXBwaW5nKQorCitkZWYgX2NoZWNrX3N0cmluZyhvcHRpb24sIG9wdCwgdmFsdWUpOgorICAgIGlmIGxlbih2YWx1ZSkgPiAyIGFuZCB2YWx1ZS5zdGFydHN3aXRoKCItLSIpOgorICAgICAgICBtYXBwaW5nID0geyJvcHQiOiBvcHQsICJ2YWx1ZSI6IHZhbHVlfQorICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKF8oIk9wdGlvbiAlKG9wdClzOiBpbnZhbGlkIHN0cmluZyB2YWx1ZTogJSh2YWx1ZSlyIikgJSBtYXBwaW5nKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB2YWx1ZQorCitkZWYgX2NoZWNrX3NpemUob3B0aW9uLCBvcHQsIHZhbHVlKToKKyAgICAjIEZvcm1lciBkZWZhdWx0IHdhcyBNQgorICAgIGlmIHZhbHVlLmlzZGlnaXQoKToKKyAgICAgICAgcmV0dXJuIGludCh2YWx1ZSkgKiAxMDI0TAorCisgICAgbWFwcGluZyA9IHsib3B0Ijogb3B0LCAidmFsdWUiOiB2YWx1ZX0KKyAgICBpZiBub3QgdmFsdWVbOi0xXS5pc2RpZ2l0KCk6CisgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoXygiT3B0aW9uICUob3B0KXM6IGludmFsaWQgc2l6ZSB2YWx1ZTogJSh2YWx1ZSlyIikgJSBtYXBwaW5nKQorCisgICAgc2l6ZSA9IGludCh2YWx1ZVs6LTFdKQorICAgIGlmIHZhbHVlLmVuZHN3aXRoKCJrIikgb3IgdmFsdWUuZW5kc3dpdGgoIksiKToKKyAgICAgICAgcmV0dXJuIHNpemUKKyAgICBpZiB2YWx1ZS5lbmRzd2l0aCgiTSIpOgorICAgICAgICByZXR1cm4gc2l6ZSAqIDEwMjRMCisgICAgaWYgdmFsdWUuZW5kc3dpdGgoIkciKToKKyAgICAgICAgcmV0dXJuIHNpemUgKiAxMDI0TCAqIDEwMjRMCisgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcihfKCJPcHRpb24gJShvcHQpczogaW52YWxpZCBzaXplIHZhbHVlOiAlKHZhbHVlKXIiKSAlIG1hcHBpbmcpCisKKyMgQ3JlYXRlcyBhIG5ldyBPcHRpb24gY2xhc3MgdGhhdCBzdXBwb3J0cyBzZXZlcmFsIG5ldyBhdHRyaWJ1dGVzOgorIyAtIHJlcXVpcmVkOiAgYW55IG9wdGlvbiB3aXRoIHRoaXMgYXR0cmlidXRlIG11c3QgYmUgc3VwcGxpZWQgb3IgYW4gZXhjZXB0aW9uCisjICAgICAgICAgICAgICBpcyB0aHJvd24KKyMgLSBpbnRyb2R1Y2VkOiAgdGhlIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiB0aGF0IHRoaXMgb3B0aW9uIGZpcnN0IGFwcGVhcmVkCisjICAgICAgICAgICAgICAgIGluIC0gYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBvcHRpb24gaXMgdXNlZCBhbmQKKyMgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBzeW50YXggdmVyc2lvbiBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMKKyMgICAgICAgICAgICAgICAgYXR0cmlidXRlCisjIC0gZGVwcmVjYXRlZDogIHRoZSBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gdGhhdCB0aGlzIG9wdGlvbiB3YXMgZGVwcmVjYXRlZAorIyAgICAgICAgICAgICAgICBpbiAtIGEgRGVwcmVjYXRpb25XYXJuaW5nIHdpbGwgYmUgdGhyb3duIGlmIHRoZSBvcHRpb24gaXMKKyMgICAgICAgICAgICAgICAgdXNlZCBhbmQgdGhlIHNwZWNpZmllZCBzeW50YXggdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gdGhlCisjICAgICAgICAgICAgICAgIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlCisjIC0gcmVtb3ZlZDogIHRoZSBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gdGhhdCB0aGlzIG9wdGlvbiB3YXMgcmVtb3ZlZCBpbiAtIGFuCisjICAgICAgICAgICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb3B0aW9uIGlzIHVzZWQgYW5kIHRoZSBzcGVjaWZpZWQKKyMgICAgICAgICAgICAgc3ludGF4IHZlcnNpb24gaXMgZ3JlYXRlZCB0aGFuIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZQorIyBBbHNvIGNyZWF0ZXMgYSBuZXcgdHlwZToKKyMgLSBrc2Jvb2xlYW46ICBzdXBwb3J0IHZhcmlvdXMga2luZHMgb2YgYm9vbGVhbiB2YWx1ZXMgb24gYW4gb3B0aW9uCisjIEFuZCB0d28gbmV3IGFjdGlvbnM6CisjIC0gbWFwIDogIGFsbG93cyB5b3UgdG8gZGVmaW5lIGFuIG9wdCAtPiB2YWwgbWFwcGluZyBzdWNoIHRoYXQgZGVzdCBnZXRzIHZhbAorIyAgICAgICAgICB3aGVuIG9wdCBpcyBzZWVuCisjIC0gbWFwX2V4dGVuZDogIGFsbG93cyB5b3UgdG8gZGVmaW5lIGFuIG9wdCAtPiBbdmFsMSwgLi4uIHZhbG5dIG1hcHBpbmcgc3VjaAorIyAgICAgICAgICAgICAgICB0aGF0IGRlc3QgZ2V0cyBhIGxpc3Qgb2YgdmFscyBidWlsdCB1cCB3aGVuIG9wdCBpcyBzZWVuCitjbGFzcyBLU09wdGlvbiAoT3B0aW9uKToKKyAgICBBVFRSUyA9IE9wdGlvbi5BVFRSUyArIFsnaW50cm9kdWNlZCcsICdkZXByZWNhdGVkJywgJ3JlbW92ZWQnLCAncmVxdWlyZWQnXQorICAgIEFDVElPTlMgPSBPcHRpb24uQUNUSU9OUyArICgibWFwIiwgIm1hcF9leHRlbmQiLCkKKyAgICBTVE9SRV9BQ1RJT05TID0gT3B0aW9uLlNUT1JFX0FDVElPTlMgKyAoIm1hcCIsICJtYXBfZXh0ZW5kIiwpCisKKyAgICBUWVBFUyA9IE9wdGlvbi5UWVBFUyArICgia3Nib29sZWFuIiwgInN0cmluZyIsICJzaXplIikKKyAgICBUWVBFX0NIRUNLRVIgPSBjb3B5KE9wdGlvbi5UWVBFX0NIRUNLRVIpCisgICAgVFlQRV9DSEVDS0VSWyJrc2Jvb2xlYW4iXSA9IF9jaGVja19rc2Jvb2xlYW4KKyAgICBUWVBFX0NIRUNLRVJbInN0cmluZyJdID0gX2NoZWNrX3N0cmluZworICAgIFRZUEVfQ0hFQ0tFUlsic2l6ZSJdID0gX2NoZWNrX3NpemUKKworICAgIGRlZiBfY2hlY2tfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVxdWlyZWQgYW5kIG5vdCBzZWxmLnRha2VzX3ZhbHVlKCk6CisgICAgICAgICAgICByYWlzZSBPcHRpb25FcnJvcihfKCJSZXF1aXJlZCBmbGFnIHNldCBmb3Igb3B0aW9uIHRoYXQgZG9lc24ndCB0YWtlIGEgdmFsdWUiKSwgc2VsZikKKworICAgICMgTWFrZSBzdXJlIF9jaGVja19yZXF1aXJlZCgpIGlzIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciEKKyAgICBDSEVDS19NRVRIT0RTID0gT3B0aW9uLkNIRUNLX01FVEhPRFMgKyBbX2NoZWNrX3JlcXVpcmVkXQorCisgICAgZGVmIHByb2Nlc3MgKHNlbGYsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKKyAgICAgICAgT3B0aW9uLnByb2Nlc3Moc2VsZiwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpCisgICAgICAgIHBhcnNlci5vcHRpb25fc2VlbltzZWxmXSA9IDEKKworICAgICMgT3ZlcnJpZGUgZGVmYXVsdCB0YWtlX2FjdGlvbiBtZXRob2QgdG8gaGFuZGxlIG91ciBjdXN0b20gYWN0aW9ucy4KKyAgICBkZWYgdGFrZV9hY3Rpb24oc2VsZiwgYWN0aW9uLCBkZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcik6CisgICAgICAgIGlmIGFjdGlvbiA9PSAibWFwIjoKKyAgICAgICAgICAgIHZhbHVlcy5lbnN1cmVfdmFsdWUoZGVzdCwgcGFyc2VyLm1hcFtvcHQubHN0cmlwKCctJyldKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAibWFwX2V4dGVuZCI6CisgICAgICAgICAgICB2YWx1ZXMuZW5zdXJlX3ZhbHVlKGRlc3QsIFtdKS5leHRlbmQocGFyc2VyLm1hcFtvcHQubHN0cmlwKCctJyldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgT3B0aW9uLnRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpCisKKyAgICBkZWYgdGFrZXNfdmFsdWUoc2VsZik6CisgICAgICAgICMgRGVwcmVjYXRlZCBvcHRpb25zIGRvbid0IHRha2UgYSB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIE9wdGlvbi50YWtlc192YWx1ZShzZWxmKSBhbmQgbm90IHNlbGYuZGVwcmVjYXRlZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZGVwcmVjYXRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYucmVxdWlyZWQgPSBGYWxzZQorICAgICAgICBPcHRpb24uX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvcGFyc2VyLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvcGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOTY3NGIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9wYXJzZXIucHkKQEAgLTAsMCArMSw2MTkgQEAKKyMKKyMgcGFyc2VyLnB5OiAgS2lja3N0YXJ0IGZpbGUgcGFyc2VyLgorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorTWFpbiBraWNrc3RhcnQgZmlsZSBwcm9jZXNzaW5nIG1vZHVsZS4KKworVGhpcyBtb2R1bGUgZXhwb3J0cyBzZXZlcmFsIGltcG9ydGFudCBjbGFzc2VzOgorCisgICAgU2NyaXB0IC0gUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgJXByZSwgJXBvc3QsIG9yICV0cmFjZWJhY2sgc2NyaXB0LgorCisgICAgUGFja2FnZXMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgJXBhY2thZ2VzIHNlY3Rpb24uCisKKyAgICBLaWNrc3RhcnRQYXJzZXIgLSBUaGUga2lja3N0YXJ0IGZpbGUgcGFyc2VyIHN0YXRlIG1hY2hpbmUuCisiIiIKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgSXRlcmF0b3IKK2ltcG9ydCBvcworaW1wb3J0IHNobGV4CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gY29weSBpbXBvcnQgY29weQorZnJvbSBvcHRwYXJzZSBpbXBvcnQgKgorCitpbXBvcnQgY29uc3RhbnRzCitmcm9tIGVycm9ycyBpbXBvcnQgS2lja3N0YXJ0RXJyb3IsIEtpY2tzdGFydFBhcnNlRXJyb3IsIEtpY2tzdGFydFZhbHVlRXJyb3IsIGZvcm1hdEVycm9yTXNnCitmcm9tIGtvIGltcG9ydCBLaWNrc3RhcnRPYmplY3QKK2Zyb20gc2VjdGlvbnMgaW1wb3J0ICoKK2ltcG9ydCB2ZXJzaW9uCisKK2ltcG9ydCBnZXR0ZXh0CitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK1NUQVRFX0VORCA9ICJlbmQiCitTVEFURV9DT01NQU5EUyA9ICJjb21tYW5kcyIKKwordmVyID0gdmVyc2lvbi5ERVZFTAorCisKK2NsYXNzIFB1dEJhY2tJdGVyYXRvcihJdGVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgc2VsZi5faXRlcmFibGUgPSBpdGVyKGl0ZXJhYmxlKQorICAgICAgICBzZWxmLl9idWYgPSBOb25lCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcHV0KHNlbGYsIHMpOgorICAgICAgICBzZWxmLl9idWYgPSBzCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fYnVmOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5fYnVmCisgICAgICAgICAgICBzZWxmLl9idWYgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faXRlcmFibGUubmV4dCgpCisKKyMjIworIyMjIFNDUklQVCBIQU5ETElORworIyMjCitjbGFzcyBTY3JpcHQoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBraWNrc3RhcnQgc2NyaXB0LiAgSWYgZnVuY3Rpb25hbGl0eSBiZXlvbmQKKyAgICAgICBqdXN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCBhIHJ1biBtZXRob2QgaW4KKyAgICAgICBhbmFjb25kYSksIFNjcmlwdCBtYXkgYmUgc3ViY2xhc3NlZC4gIEFsdGhvdWdoIGEgcnVuIG1ldGhvZCBpcyBub3QKKyAgICAgICBwcm92aWRlZCwgbW9zdCBvZiB0aGUgYXR0cmlidXRlcyBvZiBTY3JpcHQgaGF2ZSB0byBkbyB3aXRoIHJ1bm5pbmcgdGhlCisgICAgICAgc2NyaXB0LiAgSW5zdGFuY2VzIG9mIFNjcmlwdCBhcmUgaGVsZCBpbiBhIGxpc3QgYnkgdGhlIFZlcnNpb24gb2JqZWN0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzY3JpcHQsICphcmdzICwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgU2NyaXB0IGluc3RhbmNlLiAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBlcnJvck9uRmFpbCAtLSBJZiBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBmYWlscywgc2hvdWxkIGFuYWNvbmRhCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AsIGRpc3BsYXkgYW4gZXJyb3IsIGFuZCB0aGVuIHJlYm9vdCB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYW55IG90aGVyIHNjcmlwdHM/CisgICAgICAgICAgIGluQ2hyb290ICAgIC0tIERvZXMgdGhlIHNjcmlwdCBleGVjdXRlIGluIGFuYWNvbmRhJ3MgY2hyb290CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IG9yIG5vdD8KKyAgICAgICAgICAgaW50ZXJwICAgICAgLS0gVGhlIHByb2dyYW0gdGhhdCBzaG91bGQgYmUgdXNlZCB0byBpbnRlcnByZXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuCisgICAgICAgICAgIGxpbmVubyAgICAgIC0tIFRoZSBsaW5lIG51bWJlciB0aGlzIHNjcmlwdCBzdGFydHMgb24uCisgICAgICAgICAgIGxvZ2ZpbGUgICAgIC0tIFdoZXJlIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBzY3JpcHQgc2hvdWxkIGJlIGxvZ2dlZC4KKyAgICAgICAgICAgc2NyaXB0ICAgICAgLS0gQSBzdHJpbmcgY29udGFpbmluZyBhbGwgdGhlIGxpbmVzIG9mIHRoZSBzY3JpcHQuCisgICAgICAgICAgIHR5cGUgICAgICAgIC0tIFRoZSB0eXBlIG9mIHRoZSBzY3JpcHQsIHdoaWNoIGNhbiBiZSBLU19TQ1JJUFRfKiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB5a2lja3N0YXJ0LmNvbnN0YW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuc2NyaXB0ID0gIiIuam9pbihzY3JpcHQpCisKKyAgICAgICAgc2VsZi5pbnRlcnAgPSBrd2FyZ3MuZ2V0KCJpbnRlcnAiLCAiL2Jpbi9zaCIpCisgICAgICAgIHNlbGYuaW5DaHJvb3QgPSBrd2FyZ3MuZ2V0KCJpbkNocm9vdCIsIEZhbHNlKQorICAgICAgICBzZWxmLmxpbmVubyA9IGt3YXJncy5nZXQoImxpbmVubyIsIE5vbmUpCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGt3YXJncy5nZXQoImxvZ2ZpbGUiLCBOb25lKQorICAgICAgICBzZWxmLmVycm9yT25GYWlsID0ga3dhcmdzLmdldCgiZXJyb3JPbkZhaWwiLCBGYWxzZSkKKyAgICAgICAgc2VsZi50eXBlID0ga3dhcmdzLmdldCgidHlwZSIsIGNvbnN0YW50cy5LU19TQ1JJUFRfUFJFKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCB0byBhIGtpY2tzdGFydCBmaWxlLiIiIgorICAgICAgICByZXR2YWwgPSAiIgorCisgICAgICAgIGlmIHNlbGYudHlwZSA9PSBjb25zdGFudHMuS1NfU0NSSVBUX1BSRToKKyAgICAgICAgICAgIHJldHZhbCArPSAnXG4lcHJlJworICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSBjb25zdGFudHMuS1NfU0NSSVBUX1BPU1Q6CisgICAgICAgICAgICByZXR2YWwgKz0gJ1xuJXBvc3QnCisgICAgICAgIGVsaWYgc2VsZi50eXBlID09IGNvbnN0YW50cy5LU19TQ1JJUFRfVFJBQ0VCQUNLOgorICAgICAgICAgICAgcmV0dmFsICs9ICdcbiV0cmFjZWJhY2snCisKKyAgICAgICAgaWYgc2VsZi5pbnRlcnAgIT0gIi9iaW4vc2giIGFuZCBzZWxmLmludGVycCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0taW50ZXJwcmV0ZXI9JXMiICUgc2VsZi5pbnRlcnAKKyAgICAgICAgaWYgc2VsZi50eXBlID09IGNvbnN0YW50cy5LU19TQ1JJUFRfUE9TVCBhbmQgbm90IHNlbGYuaW5DaHJvb3Q6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW5vY2hyb290IgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbG9nZmlsZSAlcyIgJSBzZWxmLmxvZ2ZpbGUKKyAgICAgICAgaWYgc2VsZi5lcnJvck9uRmFpbDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZXJyb3JvbmZhaWwiCisKKyAgICAgICAgaWYgc2VsZi5zY3JpcHQuZW5kc3dpdGgoIlxuIik6CisgICAgICAgICAgICBpZiB2ZXIgPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuJXMlJWVuZFxuIiAlIHNlbGYuc2NyaXB0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4lc1xuIiAlIHNlbGYuc2NyaXB0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB2ZXIgPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuJXNcbiUlZW5kXG4iICUgc2VsZi5zY3JpcHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbCArICJcbiVzXG4iICUgc2VsZi5zY3JpcHQKKworCisjIworIyMgUEFDS0FHRSBIQU5ETElORworIyMKK2NsYXNzIEdyb3VwOgorICAgICIiIkEgY2xhc3MgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGdyb3VwIGluIHRoZSAlcGFja2FnZXMgc2VjdGlvbi4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT0iIiwgaW5jbHVkZT1jb25zdGFudHMuR1JPVVBfREVGQVVMVCk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBHcm91cCBpbnN0YW5jZS4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgbmFtZSAgICAtLSBUaGUgZ3JvdXAncyBpZGVudGlmaWVyCisgICAgICAgICAgIGluY2x1ZGUgLS0gVGhlIGxldmVsIG9mIGhvdyBtdWNoIG9mIHRoZSBncm91cCBzaG91bGQgYmUgaW5jbHVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWVzIGNhbiBiZSBHUk9VUF8qIGZyb20gcHlraWNrc3RhcnQuY29uc3RhbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmluY2x1ZGUgPSBpbmNsdWRlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIGlmIHNlbGYuaW5jbHVkZSA9PSBjb25zdGFudHMuR1JPVVBfUkVRVUlSRUQ6CisgICAgICAgICAgICByZXR1cm4gIkAlcyAtLW5vZGVmYXVsdHMiICUgc2VsZi5uYW1lCisgICAgICAgIGVsaWYgc2VsZi5pbmNsdWRlID09IGNvbnN0YW50cy5HUk9VUF9BTEw6CisgICAgICAgICAgICByZXR1cm4gIkAlcyAtLW9wdGlvbmFsIiAlIHNlbGYubmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJAJXMiICUgc2VsZi5uYW1lCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYubmFtZSA8IG90aGVyLm5hbWU6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBzZWxmLm5hbWUgPiBvdGhlci5uYW1lOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIDAKKworY2xhc3MgUGFja2FnZXMoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIHJlcHJlc2VudGluZyB0aGUgJXBhY2thZ2VzIHNlY3Rpb24gb2YgdGhlIGtpY2tzdGFydCBmaWxlLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgUGFja2FnZXMgaW5zdGFuY2UuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIGFkZEJhc2UgICAgICAgLS0gU2hvdWxkIHRoZSBCYXNlIGdyb3VwIGJlIGluc3RhbGxlZCBldmVuIGlmIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNwZWNpZmllZD8KKyAgICAgICAgICAgZGVmYXVsdCAgICAgICAtLSBTaG91bGQgdGhlIGRlZmF1bHQgcGFja2FnZSBzZXQgYmUgc2VsZWN0ZWQ/CisgICAgICAgICAgIGV4Y2x1ZGVkTGlzdCAgLS0gQSBsaXN0IG9mIGFsbCB0aGUgcGFja2FnZXMgbWFya2VkIGZvciBleGNsdXNpb24gaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgJXBhY2thZ2VzIHNlY3Rpb24sIHdpdGhvdXQgdGhlIGxlYWRpbmcgbWludXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wuCisgICAgICAgICAgIGV4Y2x1ZGVEb2NzICAgLS0gU2hvdWxkIGRvY3VtZW50YXRpb24gaW4gZWFjaCBwYWNrYWdlIGJlIGV4Y2x1ZGVkPworICAgICAgICAgICBncm91cExpc3QgICAgIC0tIEEgbGlzdCBvZiBHcm91cCBvYmplY3RzIHJlcHJlc2VudGluZyBhbGwgdGhlIGdyb3VwcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgJXBhY2thZ2VzIHNlY3Rpb24uICBOYW1lcyB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBwZWQgb2YgdGhlIGxlYWRpbmcgQCBzeW1ib2wuCisgICAgICAgICAgIGV4Y2x1ZGVkR3JvdXBMaXN0IC0tIEEgbGlzdCBvZiBHcm91cCBvYmplY3RzIHJlcHJlc2VudGluZyBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyBzcGVjaWZpZWQgZm9yIHJlbW92YWwgaW4gdGhlICVwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLiAgTmFtZXMgd2lsbCBiZSBzdHJpcHBlZCBvZiB0aGUgbGVhZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtQCBzeW1ib2xzLgorICAgICAgICAgICBoYW5kbGVNaXNzaW5nIC0tIElmIHVua25vd24gcGFja2FnZXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgJXBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgc2hvdWxkIGl0IGJlIGlnbm9yZWQgb3Igbm90PyAgVmFsdWVzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIEtTX01JU1NJTkdfKiBmcm9tIHB5a2lja3N0YXJ0LmNvbnN0YW50cy4KKyAgICAgICAgICAgcGFja2FnZUxpc3QgICAtLSBBIGxpc3Qgb2YgYWxsIHRoZSBwYWNrYWdlcyBzcGVjaWZpZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXBhY2thZ2VzIHNlY3Rpb24uCisgICAgICAgICAgIGluc3RMYW5ncyAgICAgLS0gQSBsaXN0IG9mIGxhbmd1YWdlcyB0byBpbnN0YWxsLgorICAgICAgICAiIiIKKyAgICAgICAgS2lja3N0YXJ0T2JqZWN0Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLmFkZEJhc2UgPSBUcnVlCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IEZhbHNlCisgICAgICAgIHNlbGYuZXhjbHVkZWRMaXN0ID0gW10KKyAgICAgICAgc2VsZi5leGNsdWRlZEdyb3VwTGlzdCA9IFtdCisgICAgICAgIHNlbGYuZXhjbHVkZURvY3MgPSBGYWxzZQorICAgICAgICBzZWxmLmdyb3VwTGlzdCA9IFtdCisgICAgICAgIHNlbGYuaGFuZGxlTWlzc2luZyA9IGNvbnN0YW50cy5LU19NSVNTSU5HX1BST01QVAorICAgICAgICBzZWxmLnBhY2thZ2VMaXN0ID0gW10KKyAgICAgICAgc2VsZi5pbnN0TGFuZ3MgPSBOb25lCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIHBrZ3MgPSAiIgorCisgICAgICAgIGlmIG5vdCBzZWxmLmRlZmF1bHQ6CisgICAgICAgICAgICBncnBzID0gc2VsZi5ncm91cExpc3QKKyAgICAgICAgICAgIGdycHMuc29ydCgpCisgICAgICAgICAgICBmb3IgZ3JwIGluIGdycHM6CisgICAgICAgICAgICAgICAgcGtncyArPSAiJXNcbiIgJSBncnAuX19zdHJfXygpCisKKyAgICAgICAgICAgIHAgPSBzZWxmLnBhY2thZ2VMaXN0CisgICAgICAgICAgICBwLnNvcnQoKQorICAgICAgICAgICAgZm9yIHBrZyBpbiBwOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gIiVzXG4iICUgcGtnCisKKyAgICAgICAgICAgIGdycHMgPSBzZWxmLmV4Y2x1ZGVkR3JvdXBMaXN0CisgICAgICAgICAgICBncnBzLnNvcnQoKQorICAgICAgICAgICAgZm9yIGdycCBpbiBncnBzOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gIi0lc1xuIiAlIGdycC5fX3N0cl9fKCkKKworICAgICAgICAgICAgcCA9IHNlbGYuZXhjbHVkZWRMaXN0CisgICAgICAgICAgICBwLnNvcnQoKQorICAgICAgICAgICAgZm9yIHBrZyBpbiBwOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gIi0lc1xuIiAlIHBrZworCisgICAgICAgICAgICBpZiBwa2dzID09ICIiOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHJldHZhbCA9ICJcbiVwYWNrYWdlcyIKKworICAgICAgICBpZiBzZWxmLmRlZmF1bHQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWRlZmF1bHQiCisgICAgICAgIGlmIHNlbGYuZXhjbHVkZURvY3M6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWV4Y2x1ZGVkb2NzIgorICAgICAgICBpZiBub3Qgc2VsZi5hZGRCYXNlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ub2Jhc2UiCisgICAgICAgIGlmIHNlbGYuaGFuZGxlTWlzc2luZyA9PSBjb25zdGFudHMuS1NfTUlTU0lOR19JR05PUkU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWlnbm9yZW1pc3NpbmciCisgICAgICAgIGlmIHNlbGYuaW5zdExhbmdzOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1pbnN0TGFuZ3M9JXMiICUgc2VsZi5pbnN0TGFuZ3MKKworICAgICAgICBpZiB2ZXIgPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4iICsgcGtncyArICJcbiVlbmRcbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4iICsgcGtncyArICJcbiIKKworICAgIGRlZiBfcHJvY2Vzc0dyb3VwIChzZWxmLCBsaW5lKToKKyAgICAgICAgb3AgPSBPcHRpb25QYXJzZXIoKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW5vZGVmYXVsdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW9wdGlvbmFsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAob3B0cywgZXh0cmEpID0gb3AucGFyc2VfYXJncyhhcmdzPWxpbmUuc3BsaXQoKSkKKworICAgICAgICBpZiBvcHRzLm5vZGVmYXVsdHMgYW5kIG9wdHMub3B0aW9uYWw6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRWYWx1ZUVycm9yLCBfKCJHcm91cCBjYW5ub3Qgc3BlY2lmeSBib3RoIC0tbm9kZWZhdWx0cyBhbmQgLS1vcHRpb25hbCIpCisKKyAgICAgICAgIyBJZiB0aGUgZ3JvdXAgbmFtZSBoYXMgc3BhY2VzIGluIGl0LCB3ZSBoYXZlIHRvIHB1dCBpdCBiYWNrIHRvZ2V0aGVyCisgICAgICAgICMgbm93LgorICAgICAgICBncnAgPSAiICIuam9pbihleHRyYSkKKworICAgICAgICBpZiBvcHRzLm5vZGVmYXVsdHM6CisgICAgICAgICAgICBzZWxmLmdyb3VwTGlzdC5hcHBlbmQoR3JvdXAobmFtZT1ncnAsIGluY2x1ZGU9Y29uc3RhbnRzLkdST1VQX1JFUVVJUkVEKSkKKyAgICAgICAgZWxpZiBvcHRzLm9wdGlvbmFsOgorICAgICAgICAgICAgc2VsZi5ncm91cExpc3QuYXBwZW5kKEdyb3VwKG5hbWU9Z3JwLCBpbmNsdWRlPWNvbnN0YW50cy5HUk9VUF9BTEwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ncm91cExpc3QuYXBwZW5kKEdyb3VwKG5hbWU9Z3JwLCBpbmNsdWRlPWNvbnN0YW50cy5HUk9VUF9ERUZBVUxUKSkKKworICAgIGRlZiBhZGQgKHNlbGYsIHBrZ0xpc3QpOgorICAgICAgICAiIiJHaXZlbiBhIGxpc3Qgb2YgbGluZXMgZnJvbSB0aGUgaW5wdXQgZmlsZSwgc3RyaXAgb2ZmIGFueSBsZWFkaW5nCisgICAgICAgICAgIHN5bWJvbHMgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgZXhpc3RpbmdFeGNsdWRlZFNldCA9IHNldChzZWxmLmV4Y2x1ZGVkTGlzdCkKKyAgICAgICAgZXhpc3RpbmdQYWNrYWdlU2V0ID0gc2V0KHNlbGYucGFja2FnZUxpc3QpCisgICAgICAgIG5ld0V4Y2x1ZGVkU2V0ID0gc2V0KCkKKyAgICAgICAgbmV3UGFja2FnZVNldCA9IHNldCgpCisKKyAgICAgICAgZXhjbHVkZWRHcm91cExpc3QgPSBbXQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnTGlzdDoKKyAgICAgICAgICAgIHN0cmlwcGVkID0gcGtnLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgc3RyaXBwZWRbMF0gPT0gIkAiOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NHcm91cChzdHJpcHBlZFsxOl0pCisgICAgICAgICAgICBlbGlmIHN0cmlwcGVkWzBdID09ICItIjoKKyAgICAgICAgICAgICAgICBpZiBzdHJpcHBlZFsxXSA9PSAiQCI6CisgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkR3JvdXBMaXN0LmFwcGVuZChHcm91cChuYW1lPXN0cmlwcGVkWzI6XSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3RXhjbHVkZWRTZXQuYWRkKHN0cmlwcGVkWzE6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3UGFja2FnZVNldC5hZGQoc3RyaXBwZWQpCisKKyAgICAgICAgIyBHcm91cHMgaGF2ZSB0byBiZSBleGNsdWRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMgKG5vdGU6IGNhbid0IHVzZQorICAgICAgICAjIHNldHMgaGVyZSBiZWNhdXNlIHdlIGhhdmUgdG8gc3RvcmUgb2JqZWN0cyk6CisgICAgICAgIGV4Y2x1ZGVkR3JvdXBOYW1lcyA9IG1hcChsYW1iZGEgZzogZy5uYW1lLCBleGNsdWRlZEdyb3VwTGlzdCkKKworICAgICAgICAjIEZpcnN0LCBhbiBleGNsdWRlZCBncm91cCBtYXkgYmUgY2FuY2VsbGluZyBvdXQgYSBwcmV2aW91c2x5IGdpdmVuCisgICAgICAgICMgb25lLiAgVGhpcyBpcyBvZnRlbiB0aGUgY2FzZSB3aGVuIHVzaW5nICVpbmNsdWRlLiAgU28gdGhlcmUgd2Ugc2hvdWxkCisgICAgICAgICMganVzdCByZW1vdmUgdGhlIGdyb3VwIGZyb20gdGhlIGxpc3QuCisgICAgICAgIHNlbGYuZ3JvdXBMaXN0ID0gZmlsdGVyKGxhbWJkYSBnOiBnLm5hbWUgbm90IGluIGV4Y2x1ZGVkR3JvdXBOYW1lcywgc2VsZi5ncm91cExpc3QpCisKKyAgICAgICAgIyBTZWNvbmQsIHRoZSBwYWNrYWdlIGxpc3QgY291bGQgaGF2ZSBpbmNsdWRlZCBnbG9icyB3aGljaCBhcmUgbm90CisgICAgICAgICMgcHJvY2Vzc2VkIGJ5IHB5a2lja3N0YXJ0LiAgSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gcHJlc2VydmUgYSBsaXN0IG9mCisgICAgICAgICMgZXhjbHVkZWQgZ3JvdXBzIHNvIHdoYXRldmVyIHRvb2wgZG9pbmcgcGFja2FnZS9ncm91cCBpbnN0YWxsYXRpb24gY2FuCisgICAgICAgICMgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uCisgICAgICAgIHNlbGYuZXhjbHVkZWRHcm91cExpc3QuZXh0ZW5kKGV4Y2x1ZGVkR3JvdXBMaXN0KQorCisgICAgICAgIGV4aXN0aW5nUGFja2FnZVNldCA9IChleGlzdGluZ1BhY2thZ2VTZXQgLSBuZXdFeGNsdWRlZFNldCkgfCBuZXdQYWNrYWdlU2V0CisgICAgICAgIGV4aXN0aW5nRXhjbHVkZWRTZXQgPSAoZXhpc3RpbmdFeGNsdWRlZFNldCAtIGV4aXN0aW5nUGFja2FnZVNldCkgfCBuZXdFeGNsdWRlZFNldAorCisgICAgICAgIHNlbGYucGFja2FnZUxpc3QgPSBsaXN0KGV4aXN0aW5nUGFja2FnZVNldCkKKyAgICAgICAgc2VsZi5leGNsdWRlZExpc3QgPSBsaXN0KGV4aXN0aW5nRXhjbHVkZWRTZXQpCisKKworIyMjCisjIyMgUEFSU0VSCisjIyMKK2NsYXNzIEtpY2tzdGFydFBhcnNlcjoKKyAgICAiIiJUaGUga2lja3N0YXJ0IGZpbGUgcGFyc2VyIGNsYXNzIGFzIHJlcHJlc2VudGVkIGJ5IGEgYmFzaWMgc3RhdGUKKyAgICAgICBtYWNoaW5lLiAgVG8gY3JlYXRlIGEgc3BlY2lhbGl6ZWQgcGFyc2VyLCBtYWtlIGEgc3ViY2xhc3MgYW5kIG92ZXJyaWRlCisgICAgICAgYW55IG9mIHRoZSBtZXRob2RzIHlvdSBjYXJlIGFib3V0LiAgTWV0aG9kcyB0aGF0IGRvbid0IG5lZWQgdG8gZG8KKyAgICAgICBhbnl0aGluZyBtYXkganVzdCBwYXNzLiAgSG93ZXZlciwgX3N0YXRlTWFjaGluZSBzaG91bGQgbmV2ZXIgYmUKKyAgICAgICBvdmVycmlkZGVuLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgaGFuZGxlciwgZm9sbG93SW5jbHVkZXM9VHJ1ZSwgZXJyb3JzQXJlRmF0YWw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgIG1pc3NpbmdJbmNsdWRlSXNGYXRhbD1UcnVlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydFBhcnNlciBpbnN0YW5jZS4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgZXJyb3JzQXJlRmF0YWwgICAgICAgIC0tIFNob3VsZCBlcnJvcnMgY2F1c2UgcHJvY2Vzc2luZyB0byBoYWx0LCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCBwcmludCBhIG1lc3NhZ2UgdG8gdGhlIHNjcmVlbj8gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG1vc3QgdXNlZnVsIGZvciB3cml0aW5nIHN5bnRheCBjaGVja2VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBtYXkgd2FudCB0byBjb250aW51ZSBhZnRlciBhbiBlcnJvciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb3VudGVyZWQuCisgICAgICAgICAgIGZvbGxvd0luY2x1ZGVzICAgICAgICAtLSBJZiAlaW5jbHVkZSBpcyBzZWVuLCBzaG91bGQgdGhlIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGJlIGNoZWNrZWQgYXMgd2VsbCBvciBza2lwcGVkPworICAgICAgICAgICBoYW5kbGVyICAgICAgICAgICAgICAgLS0gQW4gaW5zdGFuY2Ugb2YgYSBCYXNlSGFuZGxlciBzdWJjbGFzcy4gIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCB0aGUgaW5wdXQgZmlsZSB3aWxsIHN0aWxsIGJlIHBhcnNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IG5vIGRhdGEgd2lsbCBiZSBzYXZlZCBhbmQgbm8gY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgZXhlY3V0ZWQuCisgICAgICAgICAgIG1pc3NpbmdJbmNsdWRlSXNGYXRhbCAtLSBTaG91bGQgbWlzc2luZyBpbmNsdWRlIGZpbGVzIGJlIGZhdGFsLCBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJvcnNBcmVGYXRhbCBpcyBGYWxzZT8KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZXJyb3JzQXJlRmF0YWwgPSBlcnJvcnNBcmVGYXRhbAorICAgICAgICBzZWxmLmZvbGxvd0luY2x1ZGVzID0gZm9sbG93SW5jbHVkZXMKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgorICAgICAgICBzZWxmLmN1cnJlbnRkaXIgPSB7fQorICAgICAgICBzZWxmLm1pc3NpbmdJbmNsdWRlSXNGYXRhbCA9IG1pc3NpbmdJbmNsdWRlSXNGYXRhbAorCisgICAgICAgIHNlbGYuX3N0YXRlID0gU1RBVEVfQ09NTUFORFMKKyAgICAgICAgc2VsZi5faW5jbHVkZURlcHRoID0gMAorICAgICAgICBzZWxmLl9saW5lID0gIiIKKworICAgICAgICBzZWxmLnZlcnNpb24gPSBzZWxmLmhhbmRsZXIudmVyc2lvbgorCisgICAgICAgIGdsb2JhbCB2ZXIKKyAgICAgICAgdmVyID0gc2VsZi52ZXJzaW9uCisKKyAgICAgICAgc2VsZi5fc2VjdGlvbnMgPSB7fQorICAgICAgICBzZWxmLnNldHVwU2VjdGlvbnMoKQorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgdGhlIGludGVybmFsIHZhcmlhYmxlcyBvZiB0aGUgc3RhdGUgbWFjaGluZSBmb3IgYSBuZXcga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIHNlbGYuX3N0YXRlID0gU1RBVEVfQ09NTUFORFMKKyAgICAgICAgc2VsZi5faW5jbHVkZURlcHRoID0gMAorCisgICAgZGVmIGdldFNlY3Rpb24oc2VsZiwgcyk6CisgICAgICAgICIiIlJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdGVkIHNlY3Rpb24gKHMgbXVzdCBzdGFydCB3aXRoICclJ3MpLAorICAgICAgICAgICBvciByYWlzZSBLZXlFcnJvciBpZiBub3QgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc2VjdGlvbnNbc10KKworICAgIGRlZiBoYW5kbGVDb21tYW5kIChzZWxmLCBsaW5lbm8sIGFyZ3MpOgorICAgICAgICAiIiJHaXZlbiB0aGUgbGlzdCBvZiBjb21tYW5kIGFuZCBhcmd1bWVudHMsIGNhbGwgdGhlIFZlcnNpb24ncworICAgICAgICAgICBkaXNwYXRjaGVyIG1ldGhvZCB0byBoYW5kbGUgdGhlIGNvbW1hbmQuICBSZXR1cm5zIHRoZSBjb21tYW5kIG9yCisgICAgICAgICAgIGRhdGEgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBkaXNwYXRjaGVyLiAgVGhpcyBtZXRob2QgbWF5IGJlCisgICAgICAgICAgIG92ZXJyaWRkZW4gaW4gYSBzdWJjbGFzcyBpZiBuZWNlc3NhcnkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmhhbmRsZXI6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuY3VycmVudENtZCA9IGFyZ3NbMF0KKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5jdXJyZW50TGluZSA9IHNlbGYuX2xpbmUKKyAgICAgICAgICAgIHJldHZhbCA9IHNlbGYuaGFuZGxlci5kaXNwYXRjaGVyKGFyZ3MsIGxpbmVubykKKworICAgICAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIHJlZ2lzdGVyU2VjdGlvbihzZWxmLCBvYmopOgorICAgICAgICAiIiJHaXZlbiBhbiBpbnN0YW5jZSBvZiBhIFNlY3Rpb24gc3ViY2xhc3MsIHJlZ2lzdGVyIHRoZSBuZXcgc2VjdGlvbgorICAgICAgICAgICB3aXRoIHRoZSBwYXJzZXIuICBDYWxsaW5nIHRoaXMgbWV0aG9kIG1lYW5zIHRoZSBwYXJzZXIgd2lsbAorICAgICAgICAgICByZWNvZ25pemUgeW91ciBuZXcgc2VjdGlvbiBhbmQgZGlzcGF0Y2ggaW50byB0aGUgZ2l2ZW4gb2JqZWN0IHRvCisgICAgICAgICAgIGhhbmRsZSBpdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBvYmouc2VjdGlvbk9wZW46CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJubyBzZWN0aW9uT3BlbiBnaXZlbiBmb3Igc2VjdGlvbiAlcyIgJSBvYmoKKworICAgICAgICBpZiBub3Qgb2JqLnNlY3Rpb25PcGVuLnN0YXJ0c3dpdGgoIiUiKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgInNlY3Rpb24gJXMgdGFnIGRvZXMgbm90IHN0YXJ0IHdpdGggYSAlJSIgJSBvYmouc2VjdGlvbk9wZW4KKworICAgICAgICBzZWxmLl9zZWN0aW9uc1tvYmouc2VjdGlvbk9wZW5dID0gb2JqCisKKyAgICBkZWYgX2ZpbmFsaXplKHNlbGYsIG9iaik6CisgICAgICAgICIiIkNhbGxlZCBhdCB0aGUgY2xvc2Ugb2YgYSBraWNrc3RhcnQgc2VjdGlvbiB0byB0YWtlIGFueSByZXF1aXJlZAorICAgICAgICAgICBhY3Rpb25zLiAgSW50ZXJuYWxseSwgdGhpcyBpcyB1c2VkIHRvIGFkZCBzY3JpcHRzIG9uY2Ugd2UgaGF2ZSB0aGUKKyAgICAgICAgICAgd2hvbGUgYm9keSByZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgb2JqLmZpbmFsaXplKCkKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBTVEFURV9DT01NQU5EUworCisgICAgZGVmIF9oYW5kbGVTcGVjaWFsQ29tbWVudHMoc2VsZiwgbGluZSk6CisgICAgICAgICIiIktpY2tzdGFydCByZWNvZ25pemVzIGEgY291cGxlIHNwZWNpYWwgY29tbWVudHMuIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IFNUQVRFX0NPTU1BTkRTOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBTYXZlIHRoZSBwbGF0Zm9ybSBmb3Igcy1jLWtpY2tzdGFydC4KKyAgICAgICAgaWYgbGluZVs6MTBdID09ICIjcGxhdGZvcm09IjoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5wbGF0Zm9ybSA9IHNlbGYuX2xpbmVbMTE6XQorCisgICAgZGVmIF9yZWFkU2VjdGlvbihzZWxmLCBsaW5lSXRlciwgbGluZW5vKToKKyAgICAgICAgb2JqID0gc2VsZi5fc2VjdGlvbnNbc2VsZi5fc3RhdGVdCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZUl0ZXIubmV4dCgpCisgICAgICAgICAgICAgICAgaWYgbGluZSA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHNlY3Rpb24gZW5kcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcnNpb24gPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPV8oIlNlY3Rpb24gZG9lcyBub3QgZW5kIHdpdGggJSVlbmQuIikpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmluYWxpemUob2JqKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbGluZW5vICs9IDEKKworICAgICAgICAgICAgIyBUaHJvdyBhd2F5IGJsYW5rIGxpbmVzIGFuZCBjb21tZW50cywgdW5sZXNzIHRoZSBzZWN0aW9uIHdhbnRzIGFsbAorICAgICAgICAgICAgIyBsaW5lcy4KKyAgICAgICAgICAgIGlmIHNlbGYuX2lzQmxhbmtPckNvbW1lbnQobGluZSkgYW5kIG5vdCBvYmouYWxsTGluZXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIlIik6CisgICAgICAgICAgICAgICAgYXJncyA9IHNobGV4LnNwbGl0KGxpbmUpCisKKyAgICAgICAgICAgICAgICBpZiBhcmdzIGFuZCBhcmdzWzBdID09ICIlZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgcHJvcGVybHkgdGVybWluYXRlZCBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZShvYmopCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBhcmdzIGFuZCBhcmdzWzBdID09ICIla3NhcHBlbmQiOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgYXJncyBhbmQgKHNlbGYuX3ZhbGlkU3RhdGUoYXJnc1swXSkgb3IgYXJnc1swXSBpbiBbIiVpbmNsdWRlIiwgIiVrc2FwcGVuZCJdKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIHVudGVybWluYXRlZCBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcnNpb24gPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPV8oIlNlY3Rpb24gZG9lcyBub3QgZW5kIHdpdGggJSVlbmQuIikpCisKKyAgICAgICAgICAgICAgICAgICAgIyBGaW5pc2ggdXAuICBXZSBkbyBub3QgcHJvY2VzcyB0aGUgaGVhZGVyIGhlcmUgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAjIGtpY2tpbmcgYmFjayBvdXQgdG8gU1RBVEVfQ09NTUFORFMgd2lsbCBlbnN1cmUgdGhhdCBoYXBwZW5zLgorICAgICAgICAgICAgICAgICAgICBsaW5lSXRlci5wdXQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZW5vIC09IDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmluYWxpemUob2JqKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMganVzdCBhIGxpbmUgd2l0aGluIGEgc2VjdGlvbi4gIFBhc3MgaXQgb2ZmIHRvIHdoYXRldmVyCisgICAgICAgICAgICAgICAgIyBzZWN0aW9uIGhhbmRsZXMgaXQuCisgICAgICAgICAgICAgICAgb2JqLmhhbmRsZUxpbmUobGluZSkKKworICAgICAgICByZXR1cm4gbGluZW5vCisKKyAgICBkZWYgX3ZhbGlkU3RhdGUoc2VsZiwgc3QpOgorICAgICAgICAiIiJJcyB0aGUgZ2l2ZW4gc2VjdGlvbiB0YWcgb25lIHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCB3aXRoIHRoZSBwYXJzZXI/IiIiCisgICAgICAgIHJldHVybiBzdCBpbiBzZWxmLl9zZWN0aW9ucy5rZXlzKCkKKworICAgIGRlZiBfdHJ5RnVuYyhzZWxmLCBmbik6CisgICAgICAgICIiIkNhbGwgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uICh3aGljaCBkb2Vzbid0IHRha2UgYW55IGFyZ3VtZW50cykgYW5kCisgICAgICAgICAgIGRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZy4gIElmIGVycm9yc0FyZUZhdGFsIGlzIEZhbHNlLCB0aGlzCisgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwganVzdCBwcmludCB0aGUgZXhjZXB0aW9uIGFuZCBrZWVwIGdvaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm4oKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBtc2c6CisgICAgICAgICAgICBpZiBzZWxmLmVycm9yc0FyZUZhdGFsOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50IG1zZworCisgICAgZGVmIF9pc0JsYW5rT3JDb21tZW50KHNlbGYsIGxpbmUpOgorICAgICAgICByZXR1cm4gbGluZS5pc3NwYWNlKCkgb3IgbGluZSA9PSAiIiBvciBsaW5lLmxzdHJpcCgpWzBdID09ICcjJworCisgICAgZGVmIF9zdGF0ZU1hY2hpbmUoc2VsZiwgbGluZUl0ZXIpOgorICAgICAgICAjIEZvciBlcnJvciByZXBvcnRpbmcuCisgICAgICAgIGxpbmVubyA9IDAKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgIyBHZXQgdGhlIG5leHQgbGluZSBvdXQgb2YgdGhlIGZpbGUsIHF1aXR0aW5nIGlmIHRoaXMgaXMgdGhlIGxhc3QgbGluZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9saW5lID0gbGluZUl0ZXIubmV4dCgpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbGluZSA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGxpbmVubyArPSAxCisKKyAgICAgICAgICAgICMgRWxpbWluYXRlIGJsYW5rIGxpbmVzLCB3aGl0ZXNwYWNlLW9ubHkgbGluZXMsIGFuZCBjb21tZW50cy4KKyAgICAgICAgICAgIGlmIHNlbGYuX2lzQmxhbmtPckNvbW1lbnQoc2VsZi5fbGluZSk6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlU3BlY2lhbENvbW1lbnRzKHNlbGYuX2xpbmUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBSZW1vdmUgYW55IGVuZC1vZi1saW5lIGNvbW1lbnRzLgorICAgICAgICAgICAgc2FuaXRpemVkID0gc2VsZi5fbGluZS5zcGxpdCgiIyIpWzBdCisKKyAgICAgICAgICAgICMgVGhlbiBzcGxpdCB0aGUgbGluZS4KKyAgICAgICAgICAgIGFyZ3MgPSBzaGxleC5zcGxpdChzYW5pdGl6ZWQucnN0cmlwKCkpCisKKyAgICAgICAgICAgIGlmIGFyZ3NbMF0gPT0gIiVpbmNsdWRlIjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgY2FzZSBjb21lcyB1cCBwcmltYXJpbHkgaW4ga3N2YWxpZGF0b3IuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZm9sbG93SW5jbHVkZXM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMSBvciBub3QgYXJnc1sxXToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgZm9ybWF0RXJyb3JNc2cobGluZW5vKQorCisgICAgICAgICAgICAgICAgc2VsZi5faW5jbHVkZURlcHRoICs9IDEKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkS2lja3N0YXJ0KGFyZ3NbMV0sIHJlc2V0PUZhbHNlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLaWNrc3RhcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBIYW5kbGUgdGhlIGluY2x1ZGUgZmlsZSBiZWluZyBwcm92aWRlZCBvdmVyIHRoZQorICAgICAgICAgICAgICAgICAgICAjIG5ldHdvcmsgaW4gYSAlcHJlIHNjcmlwdC4gIFRoaXMgY2FzZSBjb21lcyB1cCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBlYXJseSBwYXJzaW5nIGluIGFuYWNvbmRhLgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1pc3NpbmdJbmNsdWRlSXNGYXRhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgICAgICBzZWxmLl9pbmNsdWRlRGVwdGggLT0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgTm93IG9uIHRvIHRoZSBtYWluIGV2ZW50LgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gU1RBVEVfQ09NTUFORFM6CisgICAgICAgICAgICAgICAgaWYgYXJnc1swXSA9PSAiJWtzYXBwZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIHByZXByb2Nlc3MqIGZ1bmN0aW9ucywgc28gY29udGludWUuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBhcmdzWzBdWzBdID09ICclJzoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgc2VjdGlvbi4gIEhhbmRsZSBpdHMgaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgbmV3U2VjdGlvbiA9IGFyZ3NbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3ZhbGlkU3RhdGUobmV3U2VjdGlvbik6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhsaW5lbm8sIG1zZz1fKCJVbmtub3duIGtpY2tzdGFydCBzZWN0aW9uOiAlcyIgJSBuZXdTZWN0aW9uKSkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IG5ld1NlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgb2JqID0gc2VsZi5fc2VjdGlvbnNbc2VsZi5fc3RhdGVdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RyeUZ1bmMobGFtYmRhOiBvYmouaGFuZGxlSGVhZGVyKGxpbmVubywgYXJncykpCisKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgaGFuZGxlIGFsbCBzZWN0aW9uIHByb2Nlc3NpbmcsIGtpY2tpbmcgdXMgYmFjaworICAgICAgICAgICAgICAgICAgICAjIG91dCB0byBTVEFURV9DT01NQU5EUyBhdCB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgbGluZQorICAgICAgICAgICAgICAgICAgICAjIGJlaW5nIHRoZSBuZXh0IHNlY3Rpb24gaGVhZGVyLCBldGMuCisgICAgICAgICAgICAgICAgICAgIGxpbmVubyA9IHNlbGYuX3JlYWRTZWN0aW9uKGxpbmVJdGVyLCBsaW5lbm8pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBzZWN0aW9uLiAgRGlzcGF0Y2ggdG8gaXQuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RyeUZ1bmMobGFtYmRhOiBzZWxmLmhhbmRsZUNvbW1hbmQobGluZW5vLCBhcmdzKSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGUgPT0gU1RBVEVfRU5EOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgcmVhZEtpY2tzdGFydEZyb21TdHJpbmcgKHNlbGYsIHMsIHJlc2V0PVRydWUpOgorICAgICAgICAiIiJQcm9jZXNzIGEga2lja3N0YXJ0IGZpbGUsIHByb3ZpZGVkIGFzIHRoZSBzdHJpbmcgc3RyLiIiIgorICAgICAgICBpZiByZXNldDoKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0KCkKKworICAgICAgICAjIEFkZCBhICIiIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qgc28gdGhlIHN0cmluZyByZWFkZXIgYWN0cyBsaWtlIHRoZQorICAgICAgICAjIGZpbGUgcmVhZGVyIGFuZCB3ZSBvbmx5IGdldCBTdG9wSXRlcmF0aW9uIHdoZW4gd2UncmUgYWZ0ZXIgdGhlIGZpbmFsCisgICAgICAgICMgbGluZSBvZiBpbnB1dC4KKyAgICAgICAgaSA9IFB1dEJhY2tJdGVyYXRvcihzLnNwbGl0bGluZXMoVHJ1ZSkgKyBbIiJdKQorICAgICAgICBzZWxmLl9zdGF0ZU1hY2hpbmUgKGkpCisKKyAgICBkZWYgcmVhZEtpY2tzdGFydChzZWxmLCBmLCByZXNldD1UcnVlKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIGtpY2tzdGFydCBmaWxlLCBnaXZlbiBieSB0aGUgZmlsZW5hbWUgZi4iIiIKKyAgICAgICAgaWYgcmVzZXQ6CisgICAgICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgIyBhbiAlaW5jbHVkZSBtaWdodCBub3Qgc3BlY2lmeSBhIGZ1bGwgcGF0aC4gIGlmIHdlIGRvbid0IHRyeSB0byBmaWd1cmUKKyAgICAgICAgIyBvdXQgd2hhdCB0aGUgcGF0aCBzaG91bGQgaGF2ZSBiZWVuLCB0aGVuIHdlJ3JlIHVuYWJsZSB0byBmaW5kIGl0CisgICAgICAgICMgcmVxdWlyaW5nIGZ1bGwgcGF0aCBzcGVjaWZpY2F0aW9uLCB0aG91Z2gsIHN1Y2tzLiAgc28gbGV0J3MgbWFrZQorICAgICAgICAjIHRoZSByZWFkaW5nICJzbWFydCIgYnkga2VlcGluZyB0cmFjayBvZiB3aGF0IHRoZSBwYXRoIGlzIGF0IGVhY2gKKyAgICAgICAgIyBpbmNsdWRlIGRlcHRoLgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRkaXIuaGFzX2tleShzZWxmLl9pbmNsdWRlRGVwdGggLSAxKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5jdXJyZW50ZGlyW3NlbGYuX2luY2x1ZGVEZXB0aCAtIDFdLCBmKSk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oc2VsZi5jdXJyZW50ZGlyW3NlbGYuX2luY2x1ZGVEZXB0aCAtIDFdLCBmKQorCisgICAgICAgIGNkID0gb3MucGF0aC5kaXJuYW1lKGYpCisgICAgICAgIGlmIG5vdCBjZC5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICBjZCA9IG9zLnBhdGguYWJzcGF0aChjZCkKKyAgICAgICAgc2VsZi5jdXJyZW50ZGlyW3NlbGYuX2luY2x1ZGVEZXB0aF0gPSBjZAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBmaWxlKGYpLnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydEVycm9yLCBmb3JtYXRFcnJvck1zZygwLCBtc2c9XygiVW5hYmxlIHRvIG9wZW4gaW5wdXQga2lja3N0YXJ0IGZpbGU6ICVzIikgJSBlLnN0cmVycm9yKQorCisgICAgICAgIHNlbGYucmVhZEtpY2tzdGFydEZyb21TdHJpbmcocywgcmVzZXQ9RmFsc2UpCisKKyAgICBkZWYgc2V0dXBTZWN0aW9ucyhzZWxmKToKKyAgICAgICAgIiIiSW5zdGFsbCB0aGUgc2VjdGlvbnMgYWxsIGtpY2tzdGFydCBmaWxlcyBzdXBwb3J0LiAgWW91IG1heSBvdmVycmlkZQorICAgICAgICAgICB0aGlzIG1ldGhvZCBpbiBhIHN1YmNsYXNzLCBidXQgc2hvdWxkIGF2b2lkIGRvaW5nIHNvIHVubGVzcyB5b3Uga25vdworICAgICAgICAgICB3aGF0IHlvdSdyZSBkb2luZy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3NlY3Rpb25zID0ge30KKworICAgICAgICAjIEluc3RhbGwgdGhlIHNlY3Rpb25zIGFsbCBraWNrc3RhcnQgZmlsZXMgc3VwcG9ydC4KKyAgICAgICAgc2VsZi5yZWdpc3RlclNlY3Rpb24oUHJlU2NyaXB0U2VjdGlvbihzZWxmLmhhbmRsZXIsIGRhdGFPYmo9U2NyaXB0KSkKKyAgICAgICAgc2VsZi5yZWdpc3RlclNlY3Rpb24oUG9zdFNjcmlwdFNlY3Rpb24oc2VsZi5oYW5kbGVyLCBkYXRhT2JqPVNjcmlwdCkpCisgICAgICAgIHNlbGYucmVnaXN0ZXJTZWN0aW9uKFRyYWNlYmFja1NjcmlwdFNlY3Rpb24oc2VsZi5oYW5kbGVyLCBkYXRhT2JqPVNjcmlwdCkpCisgICAgICAgIHNlbGYucmVnaXN0ZXJTZWN0aW9uKFBhY2thZ2VTZWN0aW9uKHNlbGYuaGFuZGxlcikpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9zZWN0aW9ucy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3NlY3Rpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGY4NTYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9zZWN0aW9ucy5weQpAQCAtMCwwICsxLDI0NCBAQAorIworIyBzZWN0aW9ucy5weTogIEtpY2tzdGFydCBmaWxlIHNlY3Rpb25zLgorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTEgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorVGhpcyBtb2R1bGUgZXhwb3J0cyB0aGUgY2xhc3NlcyB0aGF0IGRlZmluZSBhIHNlY3Rpb24gb2YgYSBraWNrc3RhcnQgZmlsZS4gIEEKK3NlY3Rpb24gaXMgYSBjaHVuayBvZiB0aGUgZmlsZSBzdGFydGluZyB3aXRoIGEgJXRhZyBhbmQgZW5kaW5nIHdpdGggYSAlZW5kLgorRXhhbXBsZXMgb2Ygc2VjdGlvbnMgaW5jbHVkZSAlcGFja2FnZXMsICVwcmUsIGFuZCAlcG9zdC4KKworWW91IG1heSB1c2UgdGhpcyBtb2R1bGUgdG8gZGVmaW5lIHlvdXIgb3duIGN1c3RvbSBzZWN0aW9ucyB3aGljaCB3aWxsIGJlCit0cmVhdGVkIGp1c3QgdGhlIHNhbWUgYXMgYSBwcmVkZWZpbmVkIG9uZSBieSB0aGUga2lja3N0YXJ0IHBhcnNlci4gIEFsbCB0aGF0CitpcyBuZWNlc3NhcnkgaXMgdG8gY3JlYXRlIGEgbmV3IHN1YmNsYXNzIG9mIFNlY3Rpb24gYW5kIGNhbGwKK3BhcnNlci5yZWdpc3RlclNlY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvZiB5b3VyIG5ldyBjbGFzcy4KKyIiIgorZnJvbSBjb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gb3B0aW9ucyBpbXBvcnQgS1NPcHRpb25QYXJzZXIKK2Zyb20gdmVyc2lvbiBpbXBvcnQgKgorCitjbGFzcyBTZWN0aW9uKG9iamVjdCk6CisgICAgIiIiVGhlIGJhc2UgY2xhc3MgZm9yIGRlZmluaW5nIGtpY2tzdGFydCBzZWN0aW9ucy4gIFlvdSBhcmUgZnJlZSB0bworICAgICAgIHN1YmNsYXNzIHRoaXMgYXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICBDbGFzcyBhdHRyaWJ1dGVzOgorCisgICAgICAgYWxsTGluZXMgICAgLS0gRG9lcyB0aGlzIHNlY3Rpb24gcmVxdWlyZSB0aGUgcGFyc2VyIHRvIGNhbGwgaGFuZGxlTGluZQorICAgICAgICAgICAgICAgICAgICAgIGZvciBldmVyeSBsaW5lIGluIHRoZSBzZWN0aW9uLCBldmVuIGJsYW5rcyBhbmQgY29tbWVudHM/CisgICAgICAgc2VjdGlvbk9wZW4gLS0gVGhlIHN0cmluZyB0aGF0IGRlbm90ZXMgdGhlIHN0YXJ0IG9mIHRoaXMgc2VjdGlvbi4gIFlvdQorICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc3RhcnQgeW91ciB0YWcgd2l0aCBhIHBlcmNlbnQgc2lnbi4KKyAgICAgICB0aW1lc1NlZW4gICAtLSBUaGlzIGF0dHJpYnV0ZSBpcyBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LiAgSXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGhhbmRsZUhlYWRlciBpcyBjYWxsZWQgdG8ga2VlcAorICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgdGltZXMgYSBzZWN0aW9uIG9mIHRoaXMgdHlwZSBpcworICAgICAgICAgICAgICAgICAgICAgIHNlZW4uCisgICAgIiIiCisgICAgYWxsTGluZXMgPSBGYWxzZQorICAgIHNlY3Rpb25PcGVuID0gIiIKKyAgICB0aW1lc1NlZW4gPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlciwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgU2NyaXB0IGluc3RhbmNlLiAgQXQgdGhlIGxlYXN0LCB5b3UgbXVzdCBwYXNzIGluIGFuCisgICAgICAgICAgIGluc3RhbmNlIG9mIGEgYmFzZUhhbmRsZXIgc3ViY2xhc3MuCisKKyAgICAgICAgICAgVmFsaWQga3dhcmdzOgorCisgICAgICAgICAgIGRhdGFPYmogLS0KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKworICAgICAgICBzZWxmLnZlcnNpb24gPSBzZWxmLmhhbmRsZXIudmVyc2lvbgorCisgICAgICAgIHNlbGYuZGF0YU9iaiA9IGt3YXJncy5nZXQoImRhdGFPYmoiLCBOb25lKQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgJWVuZCB0YWcgZm9yIGEgc2VjdGlvbiBpcyBzZWVuLiAgSXQKKyAgICAgICAgICAgaXMgbm90IHJlcXVpcmVkIHRvIGJlIHByb3ZpZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZUxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZXZlcnkgbGluZSBvZiBhIHNlY3Rpb24uICBUYWtlIHdoYXRldmVyCisgICAgICAgICAgIGFjdGlvbiBpcyBhcHByb3ByaWF0ZS4gIFdoaWxlIHRoaXMgbWV0aG9kIGlzIG5vdCByZXF1aXJlZCB0byBiZQorICAgICAgICAgICBwcm92aWRlZCwgbm90IHByb3ZpZGluZyBpdCBkb2VzIG5vdCBtYWtlIGEgd2hvbGUgbG90IG9mIHNlbnNlLgorCisgICAgICAgICAgIEFyZ3VtZW50czoKKworICAgICAgICAgICBsaW5lIC0tIFRoZSBjb21wbGV0ZSBsaW5lLCB3aXRoIGFueSB0cmFpbGluZyBuZXdsaW5lLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZUhlYWRlcihzZWxmLCBsaW5lbm8sIGFyZ3MpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgb3BlbmluZyB0YWcgZm9yIGEgc2VjdGlvbiBpcyBzZWVuLgorICAgICAgICAgICBOb3QgYWxsIHNlY3Rpb25zIHdpbGwgbmVlZCB0aGlzIG1ldGhvZCwgdGhvdWdoIGFsbCBwcm92aWRlZCB3aXRoCisgICAgICAgICAgIGtpY2tzdGFydCBpbmNsdWRlIG9uZS4KKworICAgICAgICAgICBBcmd1bWVudHM6CisKKyAgICAgICAgICAgYXJncyAtLSBBIGxpc3Qgb2YgYWxsIHN0cmluZ3MgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgIG9wZW5pbmcgdGFnLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50aW1lc1NlZW4gKz0gMQorCitjbGFzcyBOdWxsU2VjdGlvbihTZWN0aW9uKToKKyAgICAiIiJUaGlzIGRlZmluZXMgYSBzZWN0aW9uIHRoYXQgcHlraWNrc3RhcnQgd2lsbCByZWNvZ25pemUgYnV0IGRvIG5vdGhpbmcKKyAgICAgICB3aXRoLiAgSWYgdGhlIHBhcnNlciBydW5zIGFjcm9zcyBhICVzZWN0aW9uIHRoYXQgaGFzIG5vIG9iamVjdCByZWdpc3RlcmVkLAorICAgICAgIGl0IHdpbGwgcmFpc2UgYW4gZXJyb3IuICBTb21ldGltZXMsIHlvdSBtYXkgd2FudCB0byBzaW1wbHkgaWdub3JlIHRob3NlCisgICAgICAgc2VjdGlvbnMgaW5zdGVhZC4gIFRoaXMgY2xhc3MgaXMgdXNlZnVsIGZvciB0aGF0IHB1cnBvc2UuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOdWxsU2VjdGlvbiBpbnN0YW5jZS4gIFlvdSBtdXN0IHBhc3MgYSBzZWN0aW9uT3BlbgorICAgICAgICAgICBwYXJhbWV0ZXIgKGluY2x1ZGluZyBhIGxlYWRpbmcgJyUnKSBmb3IgdGhlIHNlY3Rpb24geW91IHdpc2ggdG8KKyAgICAgICAgICAgaWdub3JlLgorICAgICAgICAiIiIKKyAgICAgICAgU2VjdGlvbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuc2VjdGlvbk9wZW4gPSBrd2FyZ3MuZ2V0KCJzZWN0aW9uT3BlbiIpCisKK2NsYXNzIFNjcmlwdFNlY3Rpb24oU2VjdGlvbik6CisgICAgYWxsTGluZXMgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgU2VjdGlvbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3NjcmlwdCA9IHt9CisgICAgICAgIHNlbGYuX3Jlc2V0U2NyaXB0KCkKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEtTT3B0aW9uUGFyc2VyKHNlbGYudmVyc2lvbikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lcnJvcm9uZmFpbCIsIGRlc3Q9ImVycm9yT25GYWlsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWludGVycHJldGVyIiwgZGVzdD0iaW50ZXJwcmV0ZXIiLCBkZWZhdWx0PSIvYmluL3NoIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1sb2ciLCAiLS1sb2dmaWxlIiwgZGVzdD0ibG9nIikKKyAgICAgICAgcmV0dXJuIG9wCisKKyAgICBkZWYgX3Jlc2V0U2NyaXB0KHNlbGYpOgorICAgICAgICBzZWxmLl9zY3JpcHQgPSB7ImludGVycCI6ICIvYmluL3NoIiwgImxvZyI6IE5vbmUsICJlcnJvck9uRmFpbCI6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmVubyI6IE5vbmUsICJjaHJvb3QiOiBGYWxzZSwgImJvZHkiOiBbXX0KKworICAgIGRlZiBoYW5kbGVMaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLl9zY3JpcHRbImJvZHkiXS5hcHBlbmQobGluZSkKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgaWYgIiAiLmpvaW4oc2VsZi5fc2NyaXB0WyJib2R5Il0pLnN0cmlwKCkgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBrd2FyZ3MgPSB7ImludGVycCI6IHNlbGYuX3NjcmlwdFsiaW50ZXJwIl0sCisgICAgICAgICAgICAgICAgICAiaW5DaHJvb3QiOiBzZWxmLl9zY3JpcHRbImNocm9vdCJdLAorICAgICAgICAgICAgICAgICAgImxpbmVubyI6IHNlbGYuX3NjcmlwdFsibGluZW5vIl0sCisgICAgICAgICAgICAgICAgICAibG9nZmlsZSI6IHNlbGYuX3NjcmlwdFsibG9nIl0sCisgICAgICAgICAgICAgICAgICAiZXJyb3JPbkZhaWwiOiBzZWxmLl9zY3JpcHRbImVycm9yT25GYWlsIl0sCisgICAgICAgICAgICAgICAgICAidHlwZSI6IHNlbGYuX3NjcmlwdFsidHlwZSJdfQorCisgICAgICAgIHMgPSBzZWxmLmRhdGFPYmogKHNlbGYuX3NjcmlwdFsiYm9keSJdLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fcmVzZXRTY3JpcHQoKQorCisgICAgICAgIGlmIHNlbGYuaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zY3JpcHRzLmFwcGVuZChzKQorCisgICAgZGVmIGhhbmRsZUhlYWRlcihzZWxmLCBsaW5lbm8sIGFyZ3MpOgorICAgICAgICAiIiJQcm9jZXNzIHRoZSBhcmd1bWVudHMgdG8gYSAlcHJlLyVwb3N0LyV0cmFjZWJhY2sgaGVhZGVyIGZvciBsYXRlcgorICAgICAgICAgICBzZXR0aW5nIG9uIGEgU2NyaXB0IGluc3RhbmNlIG9uY2UgdGhlIGVuZCBvZiB0aGUgc2NyaXB0IGlzIGZvdW5kLgorICAgICAgICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgIiIiCisgICAgICAgIFNlY3Rpb24uaGFuZGxlSGVhZGVyKHNlbGYsIGxpbmVubywgYXJncykKKyAgICAgICAgb3AgPSBzZWxmLl9nZXRQYXJzZXIoKQorCisgICAgICAgIChvcHRzLCBleHRyYSkgPSBvcC5wYXJzZV9hcmdzKGFyZ3M9YXJnc1sxOl0sIGxpbmVubz1saW5lbm8pCisKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJpbnRlcnAiXSA9IG9wdHMuaW50ZXJwcmV0ZXIKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJsaW5lbm8iXSA9IGxpbmVubworICAgICAgICBzZWxmLl9zY3JpcHRbImxvZyJdID0gb3B0cy5sb2cKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJlcnJvck9uRmFpbCJdID0gb3B0cy5lcnJvck9uRmFpbAorICAgICAgICBpZiBoYXNhdHRyKG9wdHMsICJub2Nocm9vdCIpOgorICAgICAgICAgICAgc2VsZi5fc2NyaXB0WyJjaHJvb3QiXSA9IG5vdCBvcHRzLm5vY2hyb290CisKK2NsYXNzIFByZVNjcmlwdFNlY3Rpb24oU2NyaXB0U2VjdGlvbik6CisgICAgc2VjdGlvbk9wZW4gPSAiJXByZSIKKworICAgIGRlZiBfcmVzZXRTY3JpcHQoc2VsZik6CisgICAgICAgIFNjcmlwdFNlY3Rpb24uX3Jlc2V0U2NyaXB0KHNlbGYpCisgICAgICAgIHNlbGYuX3NjcmlwdFsidHlwZSJdID0gS1NfU0NSSVBUX1BSRQorCitjbGFzcyBQb3N0U2NyaXB0U2VjdGlvbihTY3JpcHRTZWN0aW9uKToKKyAgICBzZWN0aW9uT3BlbiA9ICIlcG9zdCIKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IFNjcmlwdFNlY3Rpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW5vY2hyb290IiwgZGVzdD0ibm9jaHJvb3QiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIHJldHVybiBvcAorCisgICAgZGVmIF9yZXNldFNjcmlwdChzZWxmKToKKyAgICAgICAgU2NyaXB0U2VjdGlvbi5fcmVzZXRTY3JpcHQoc2VsZikKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJjaHJvb3QiXSA9IFRydWUKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJ0eXBlIl0gPSBLU19TQ1JJUFRfUE9TVAorCitjbGFzcyBUcmFjZWJhY2tTY3JpcHRTZWN0aW9uKFNjcmlwdFNlY3Rpb24pOgorICAgIHNlY3Rpb25PcGVuID0gIiV0cmFjZWJhY2siCisKKyAgICBkZWYgX3Jlc2V0U2NyaXB0KHNlbGYpOgorICAgICAgICBTY3JpcHRTZWN0aW9uLl9yZXNldFNjcmlwdChzZWxmKQorICAgICAgICBzZWxmLl9zY3JpcHRbInR5cGUiXSA9IEtTX1NDUklQVF9UUkFDRUJBQ0sKKworY2xhc3MgUGFja2FnZVNlY3Rpb24oU2VjdGlvbik6CisgICAgc2VjdGlvbk9wZW4gPSAiJXBhY2thZ2VzIgorCisgICAgZGVmIGhhbmRsZUxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmhhbmRsZXI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAoaCwgcywgdCkgPSBsaW5lLnBhcnRpdGlvbignIycpCisgICAgICAgIGxpbmUgPSBoLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmFkZChbbGluZV0pCisKKyAgICBkZWYgaGFuZGxlSGVhZGVyKHNlbGYsIGxpbmVubywgYXJncyk6CisgICAgICAgICIiIlByb2Nlc3MgdGhlIGFyZ3VtZW50cyB0byB0aGUgJXBhY2thZ2VzIGhlYWRlciBhbmQgc2V0IGF0dHJpYnV0ZXMKKyAgICAgICAgICAgb24gdGhlIFZlcnNpb24ncyBQYWNrYWdlcyBpbnN0YW5jZSBhcHByb3ByaWF0ZS4gIFRoaXMgbWV0aG9kIG1heSBiZQorICAgICAgICAgICBvdmVycmlkZGVuIGluIGEgc3ViY2xhc3MgaWYgbmVjZXNzYXJ5LgorICAgICAgICAiIiIKKyAgICAgICAgU2VjdGlvbi5oYW5kbGVIZWFkZXIoc2VsZiwgbGluZW5vLCBhcmdzKQorICAgICAgICBvcCA9IEtTT3B0aW9uUGFyc2VyKHZlcnNpb249c2VsZi52ZXJzaW9uKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWV4Y2x1ZGVkb2NzIiwgZGVzdD0iZXhjbHVkZWRvY3MiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0taWdub3JlbWlzc2luZyIsIGRlc3Q9Imlnbm9yZW1pc3NpbmciLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbm9iYXNlIiwgZGVzdD0ibm9iYXNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWlnbm9yZWRlcHMiLCBkZXN0PSJyZXNvbHZlRGVwcyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQ9RkM0LCByZW1vdmVkPUY5KQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXJlc29sdmVkZXBzIiwgZGVzdD0icmVzb2x2ZURlcHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQ9RkM0LCByZW1vdmVkPUY5KQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWRlZmF1bHQiLCBkZXN0PSJkZWZhdWx0UGFja2FnZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGludHJvZHVjZWQ9RjcpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0taW5zdExhbmdzIiwgZGVzdD0iaW5zdExhbmdzIiwgdHlwZT0ic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIiLCBpbnRyb2R1Y2VkPUY5KQorCisgICAgICAgIChvcHRzLCBleHRyYSkgPSBvcC5wYXJzZV9hcmdzKGFyZ3M9YXJnc1sxOl0sIGxpbmVubz1saW5lbm8pCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmV4Y2x1ZGVEb2NzID0gb3B0cy5leGNsdWRlZG9jcworICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuYWRkQmFzZSA9IG5vdCBvcHRzLm5vYmFzZQorICAgICAgICBpZiBvcHRzLmlnbm9yZW1pc3Npbmc6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuaGFuZGxlTWlzc2luZyA9IEtTX01JU1NJTkdfSUdOT1JFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuaGFuZGxlTWlzc2luZyA9IEtTX01JU1NJTkdfUFJPTVBUCisKKyAgICAgICAgaWYgb3B0cy5kZWZhdWx0UGFja2FnZXM6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuZGVmYXVsdCA9IFRydWUKKworICAgICAgICBpZiBvcHRzLmluc3RMYW5nczoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5pbnN0TGFuZ3MgPSBvcHRzLmluc3RMYW5ncwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvdmVyc2lvbi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3ZlcnNpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4ZTZhYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3ZlcnNpb24ucHkKQEAgLTAsMCArMSwxNjggQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK01ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBraWNrc3RhcnQgdmVyc2lvbnMuCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgc2V2ZXJhbCBzeW1ib2xpYyBjb25zdGFudHMgdGhhdCBzcGVjaWZ5IGtpY2tzdGFydCBzeW50YXgKK3ZlcnNpb25zLiAgRWFjaCB2ZXJzaW9uIGNvcnJlc3BvbmRzIHJvdWdobHkgdG8gb25lIHJlbGVhc2Ugb2YgUmVkIEhhdCBMaW51eCwKK1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCwgb3IgRmVkb3JhIENvcmUgYXMgdGhlc2UgYXJlIHdoZXJlIG1vc3Qgc3ludGF4CitjaGFuZ2VzIHRha2UgcGxhY2UuCisKK1RoaXMgbW9kdWxlIGFsc28gZXhwb3J0cyBzZXZlcmFsIGZ1bmN0aW9uczoKKworICAgIG1ha2VWZXJzaW9uIC0gR2l2ZW4gYSB2ZXJzaW9uIG51bWJlciwgcmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgaGFuZGxlciBjbGFzcy4KKworICAgIHJldHVybkNsYXNzRm9yVmVyc2lvbiAtIEdpdmVuIGEgdmVyc2lvbiBudW1iZXIsIHJldHVybiB0aGUgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyIGNsYXNzLiAgVGhpcyBkb2VzIG5vdCByZXR1cm4gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzLCBob3dldmVyLgorCisgICAgc3RyaW5nVG9WZXJzaW9uIC0gQ29udmVydCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlcnNpb24gbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgc3ltYm9saWMgY29uc3RhbnQuCisKKyAgICB2ZXJzaW9uVG9TdHJpbmcgLSBQZXJmb3JtIHRoZSByZXZlcnNlIG1hcHBpbmcuCisKKyAgICB2ZXJzaW9uRnJvbUZpbGUgLSBSZWFkIGEga2lja3N0YXJ0IGZpbGUgYW5kIGRldGVybWluZSB0aGUgdmVyc2lvbiBvZgorICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCBpdCB1c2VzLiAgVGhpcyByZXF1aXJlcyB0aGUga2lja3N0YXJ0IGZpbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlIGEgdmVyc2lvbj0gY29tbWVudCBpbiBpdC4KKyIiIgoraW1wb3J0IGltcHV0aWwsIHJlLCBzeXMKKworaW1wb3J0IGdldHRleHQKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworZnJvbSBweWtpY2tzdGFydC5lcnJvcnMgaW1wb3J0IEtpY2tzdGFydFZlcnNpb25FcnJvcgorCisjIFN5bWJvbGljIG5hbWVzIGZvciBpbnRlcm5hbCB2ZXJzaW9uIG51bWJlcnMuCitSSEVMMyA9IDkwMAorRkMzID0gMTAwMAorUkhFTDQgPSAxMTAwCitGQzQgPSAyMDAwCitGQzUgPSAzMDAwCitGQzYgPSA0MDAwCitSSEVMNSA9IDQxMDAKK0Y3ICA9IDUwMDAKK0Y4ID0gNjAwMAorRjkgPSA3MDAwCitGMTAgPSA4MDAwCitGMTEgPSA5MDAwCitGMTIgPSAxMDAwMAorRjEzID0gMTEwMDAKK1JIRUw2ID0gMTExMDAKK0YxNCA9IDEyMDAwCitGMTUgPSAxMzAwMAorRjE2ID0gMTQwMDAKKworIyBUaGlzIGFsd2F5cyBwb2ludHMgYXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZCBpcyB0aGUgZGVmYXVsdC4KK0RFVkVMID0gRjE2CisKKyMgQSBvbmUtdG8tb25lIG1hcHBpbmcgZnJvbSBzdHJpbmcgcmVwcmVzZW50YXRpb25zIHRvIHZlcnNpb24gbnVtYmVycy4KK3ZlcnNpb25NYXAgPSB7CisgICAgICAgICJERVZFTCI6IERFVkVMLAorICAgICAgICAiRkMzIjogRkMzLCAiRkM0IjogRkM0LCAiRkM1IjogRkM1LCAiRkM2IjogRkM2LCAiRjciOiBGNywgIkY4IjogRjgsCisgICAgICAgICJGOSI6IEY5LCAiRjEwIjogRjEwLCAiRjExIjogRjExLCAiRjEyIjogRjEyLCAiRjEzIjogRjEzLAorICAgICAgICAiRjE0IjogRjE0LCAiRjE1IjogRjE1LCAiRjE2IjogRjE2LAorICAgICAgICAiUkhFTDMiOiBSSEVMMywgIlJIRUw0IjogUkhFTDQsICJSSEVMNSI6IFJIRUw1LCAiUkhFTDYiOiBSSEVMNgorfQorCitkZWYgc3RyaW5nVG9WZXJzaW9uKHMpOgorICAgICIiIkNvbnZlcnQgc3RyaW5nIGludG8gb25lIG9mIHRoZSBwcm92aWRlZCB2ZXJzaW9uIGNvbnN0YW50cy4gIFJhaXNlcworICAgICAgIEtpY2tzdGFydFZlcnNpb25FcnJvciBpZiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYW55dGhpbmcuCisgICAgIiIiCisgICAgIyBGaXJzdCB0cnkgdGhlc2Ugc2hvcnQgZm9ybXMuCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmVyc2lvbk1hcFtzLnVwcGVyKCldCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICAjIE5vdyB0cnkgdGhlIEZlZG9yYSB2ZXJzaW9ucy4KKyAgICBtID0gcmUubWF0Y2goIl5mZWRvcmEuKiAoXGQrKSQiLCBzLCByZS5JKQorCisgICAgaWYgbSBhbmQgbS5ncm91cCgxKToKKyAgICAgICAgaWYgdmVyc2lvbk1hcC5oYXNfa2V5KCJGQyIgKyBtLmdyb3VwKDEpKToKKyAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uTWFwWyJGQyIgKyBtLmdyb3VwKDEpXQorICAgICAgICBlbGlmIHZlcnNpb25NYXAuaGFzX2tleSgiRiIgKyBtLmdyb3VwKDEpKToKKyAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uTWFwWyJGIiArIG0uZ3JvdXAoMSldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoXygiVW5zdXBwb3J0ZWQgdmVyc2lvbiBzcGVjaWZpZWQ6ICVzIikgJSBzKQorCisgICAgIyBOb3cgdHJ5IHRoZSBSSEVMIHZlcnNpb25zLgorICAgIG0gPSByZS5tYXRjaCgiXnJlZCBoYXQgZW50ZXJwcmlzZSBsaW51eC4qIChcZCspKFtcLlxkXSopJCIsIHMsIHJlLkkpCisKKyAgICBpZiBtIGFuZCBtLmdyb3VwKDEpOgorICAgICAgICBpZiB2ZXJzaW9uTWFwLmhhc19rZXkoIlJIRUwiICsgbS5ncm91cCgxKSk6CisgICAgICAgICAgICByZXR1cm4gdmVyc2lvbk1hcFsiUkhFTCIgKyBtLmdyb3VwKDEpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgcykKKworICAgICMgSWYgbm90aGluZyBlbHNlIHdvcmtlZCwgd2UncmUgb3V0IG9mIG9wdGlvbnMuCisgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgcykKKworZGVmIHZlcnNpb25Ub1N0cmluZyh2ZXJzaW9uLCBza2lwRGV2ZWw9RmFsc2UpOgorICAgICIiIkNvbnZlcnQgdmVyc2lvbiBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZXJzaW9uIG51bWJlci4KKyAgICAgICBUaGlzIGlzIHRoZSByZXZlcnNlIG9wZXJhdGlvbiBvZiBzdHJpbmdUb1ZlcnNpb24uICBSYWlzZXMKKyAgICAgICBLaWNrc3RhcnRWZXJzaW9uRXJyb3IgaWYgdmVyc2lvbiBkb2VzIG5vdCBtYXRjaCBhbnl0aGluZy4KKyAgICAiIiIKKyAgICBpZiBub3Qgc2tpcERldmVsIGFuZCB2ZXJzaW9uID09IHZlcnNpb25NYXBbIkRFVkVMIl06CisgICAgICAgIHJldHVybiAiREVWRUwiCisKKyAgICBmb3IgKGtleSwgdmFsKSBpbiB2ZXJzaW9uTWFwLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBrZXkgPT0gIkRFVkVMIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsaWYgdmFsID09IHZlcnNpb246CisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICByYWlzZSBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoXygiVW5zdXBwb3J0ZWQgdmVyc2lvbiBzcGVjaWZpZWQ6ICVzIikgJSB2ZXJzaW9uKQorCitkZWYgcmV0dXJuQ2xhc3NGb3JWZXJzaW9uKHZlcnNpb249REVWRUwpOgorICAgICIiIlJldHVybiB0aGUgY2xhc3Mgb2YgdGhlIHN5bnRheCBoYW5kbGVyIGZvciB2ZXJzaW9uLiAgdmVyc2lvbiBjYW4gYmUKKyAgICAgICBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIG1hdGNoaW5nIGNvbnN0YW50LiAgUmFpc2VzIEtpY2tzdGFydFZhbHVlRXJyb3IKKyAgICAgICBpZiB2ZXJzaW9uIGRvZXMgbm90IG1hdGNoIGFueXRoaW5nLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgdmVyc2lvbiA9IGludCh2ZXJzaW9uKQorICAgICAgICBtb2R1bGUgPSAiJXMiICUgdmVyc2lvblRvU3RyaW5nKHZlcnNpb24sIHNraXBEZXZlbD1UcnVlKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBtb2R1bGUgPSAiJXMiICUgdmVyc2lvbgorICAgICAgICB2ZXJzaW9uID0gc3RyaW5nVG9WZXJzaW9uKHZlcnNpb24pCisKKyAgICBtb2R1bGUgPSBtb2R1bGUubG93ZXIoKQorCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgcHlraWNrc3RhcnQuaGFuZGxlcnMKKyAgICAgICAgc3lzLnBhdGguZXh0ZW5kKHB5a2lja3N0YXJ0LmhhbmRsZXJzLl9fcGF0aF9fKQorICAgICAgICBmb3VuZCA9IGltcHV0aWwuaW1wLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgbG9hZGVkID0gaW1wdXRpbC5pbXAubG9hZF9tb2R1bGUobW9kdWxlLCBmb3VuZFswXSwgZm91bmRbMV0sIGZvdW5kWzJdKQorCisgICAgICAgIGZvciAoaywgdikgaW4gbG9hZGVkLl9fZGljdF9fLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgay5sb3dlcigpLmVuZHN3aXRoKCIlc2hhbmRsZXIiICUgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgdmVyc2lvbikKKworZGVmIG1ha2VWZXJzaW9uKHZlcnNpb249REVWRUwpOgorICAgICIiIlJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgc3ludGF4IGhhbmRsZXIgZm9yIHZlcnNpb24uICB2ZXJzaW9uIGNhbiBiZQorICAgICAgIGVpdGhlciBhIHN0cmluZyBvciB0aGUgbWF0Y2hpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3IKKyAgICAgICBzdGFuZGFsb25lIHByb2dyYW1zIHdoaWNoIGp1c3QgbmVlZCB0byBoYW5kbGUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mCisgICAgICAga2lja3N0YXJ0IHN5bnRheCAoYXMgcHJvdmlkZWQgYnkgYSBjb21tYW5kIGxpbmUgYXJndW1lbnQsIGZvciBleGFtcGxlKQorICAgICAgIGFuZCBuZWVkIHRvIGluc3RhbnRpYXRlIHRoZSBjb3JyZWN0IG9iamVjdC4KKyAgICAiIiIKKyAgICBjbCA9IHJldHVybkNsYXNzRm9yVmVyc2lvbih2ZXJzaW9uKQorICAgIHJldHVybiBjbCgpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzFkOWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBvcywgc3lzCisKK2N1cl9wYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciAnLicKK3N5cy5wYXRoLmluc2VydCgwLCBjdXJfcGF0aCArICcvM3JkcGFydHknKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvX192ZXJzaW9uX18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9fX3ZlcnNpb25fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDUyYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvX192ZXJzaW9uX18ucHkKQEAgLTAsMCArMSBAQAorVkVSU0lPTiA9ICIyLjAwIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLWdwdC53a3MgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stZ3B0LndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTAxY2YzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLWdwdC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGEgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIGxlZ2FjeSBCSU9TIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0IC0tdXNlLXV1aWQKKworYm9vdGxvYWRlciAgLS1wdGFibGUgZ3B0IC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stbXVsdGktcm9vdGZzLndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhODFmOGYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stbXVsdGktcm9vdGZzLndrcwpAQCAtMCwwICsxLDIzIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgbXVsdGkgcm9vdGZzIGltYWdlIHVzaW5nIHJvb3RmcyBwbHVnaW4KKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIGRpc2sgaW1hZ2Ugd2l0aCB0d28gcm9vdGZzIHBhcnRpdGlvbnMKKyMgdXNpbmcgcm9vdGZzIHBsdWdpbi4KKyMKKyMgUGFydGl0aW9ucyBjYW4gdXNlIGVpdGhlcgorIyAgIC0gaW5kaXJlY3Qgcm9vdGZzIHJlZmVyZW5jZXMgdG8gaW1hZ2UgcmVjaXBlKHMpOgorIyAgICAgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrLW11bHRpLWluZGlyZWN0LXJlY2lwZXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIFwKKyMgICAgICAgICAtLXJvb3Rmcy1kaXIgcm9vdGZzMT1jb3JlLWltYWdlLW1pbmltYWwKKyMgICAgICAgICAtLXJvb3Rmcy1kaXIgcm9vdGZzMj1jb3JlLWltYWdlLW1pbmltYWwtZGV2CisjCisjICAgLSBvciBwYXRocyB0byByb290ZnMgZGlyZWN0b3JpZXM6CisjICAgICB3aWMgY3JlYXRlIGRpcmVjdGRpc2stbXVsdGktcm9vdGZzIFwKKyMgICAgICAgICAtLXJvb3Rmcy1kaXIgcm9vdGZzMT10bXAvd29yay9xZW11eDg2XzY0LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMvCisjICAgICAgICAgLS1yb290ZnMtZGlyIHJvb3RmczI9dG1wL3dvcmsvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC1kZXYvMS4wLXIwL3Jvb3Rmcy8KKyMKKyMgICAtIG9yIGFueSBjb21iaW5hdGlvbnMgb2YgLXIgYW5kIC0tcm9vdGZzIGNvbW1hbmQgbGluZSBvcHRpb25zCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPXJvb3RmczEgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgL3Jlc2N1ZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPXJvb3RmczIgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBzZWNvbmRhcnkgLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjRjOWVhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcwpAQCAtMCwwICsxLDEwIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgbGVnYWN5IEJJT1MgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLgorCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAiCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtlZmlkaXNrLndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtlZmlkaXNrLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZlOTRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCkBAIC0wLDAgKzEsMTEgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLXNvdXJjZXBhcmFtcz0ibG9hZGVyPWdydWItZWZpIiAtLW9uZGlzayBzZGEgLS1sYWJlbCBtc2RvcyAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKKworcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorCitwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IGNvbnNvbGU9dHR5UENIMCwxMTUyMDAgY29uc29sZT10dHkwIHZtYWxsb2M9MjU2TUIgc25kLWhkYS1pbnRlbC5lbmFibGVfbXNpPTAiCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZ3VtbWlkaXNrLndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtndW1taWRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTIyZjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZ3VtbWlkaXNrLndrcwpAQCAtMCwwICsxLDExIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1lZmkgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1ndW1taWJvb3QiIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorCitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKK3BhcnQgc3dhcCAtLW9uZGlzayBzZGEgLS1zaXplIDQ0IC0tbGFiZWwgc3dhcDEgLS1mc3R5cGU9c3dhcAorCitib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgY29uc29sZT10dHlQQ0gwLDExNTIwMCBjb25zb2xlPXR0eTAgdm1hbGxvYz0yNTZNQiBzbmQtaGRhLWludGVsLmVuYWJsZV9tc2k9MCIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtoeWJyaWRpc28ud2tzIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2h5YnJpZGlzby53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzNGU5YgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtoeWJyaWRpc28ud2tzCkBAIC0wLDAgKzEsNyBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGEgaHlicmlkIElTTyBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGFuIEVGSSBhbmQgbGVnYWN5IGJvb3RhYmxlIGh5YnJpZCBJU08gaW1hZ2UKKyMgd2hpY2ggY2FuIGJlIHVzZWQgb24gb3B0aWNhbCBtZWRpYSBhcyB3ZWxsIGFzIFVTQiBtZWRpYS4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBpc29pbWFnZS1pc29oeWJyaWQgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1ncnViLWVmaSxpbWFnZV9uYW1lPUhZQlJJRF9JU09fSU1HIiAtLW9uZGlzayBjZCAtLWxhYmVsIEhZQlJJRElTTyAtLWZzdHlwZT1leHQ0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0xNSAgLS1hcHBlbmQ9IiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvcWVtdXg4Ni1kaXJlY3RkaXNrLndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvcWVtdXg4Ni1kaXJlY3RkaXNrLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmMzOGI1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9xZW11eDg2LWRpcmVjdGRpc2sud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhIHFlbXUgbWFjaGluZSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgbGVnYWN5IEJJT1MgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSB1c2UgdG8gYm9vdCBhIHFlbXUgbWFjaGluZS4KKworCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9L2Rldi92ZGEyIHJ3IG1lbT0yNTZNIGlwPTE5Mi4xNjguNy4yOjoxOTIuMTY4LjcuMToyNTUuMjU1LjI1NS4wIG9wcm9maWxlLnRpbWVyPTEgcm9vdGZzdHlwZT1leHQ0ICIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zZGltYWdlLWJvb3RwYXJ0LndrcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3Mvc2RpbWFnZS1ib290cGFydC53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmZDYzMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3Mvc2RpbWFnZS1ib290cGFydC53a3MKQEAgLTAsMCArMSw2IEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgU0QgY2FyZCBpbWFnZSB3aXRoIGEgYm9vdCBwYXJ0aXRpb24KKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIFNEIGNhcmQgaW1hZ2UuIEJvb3QgZmlsZXMKKyMgYXJlIGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHZmYXQgcGFydGl0aW9uLgorCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGFydGl0aW9uIC0tb25kaXNrIG1tY2JsayAtLWZzdHlwZT12ZmF0IC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDQgLS1zaXplIDE2CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIG1tY2JsayAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcm9vdCAtLWFsaWduIDQKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmYucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25mLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNDM2M2EKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25mLnB5CkBAIC0wLDAgKzEsMTAwIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydAorZnJvbSB3aWMudXRpbHMgaW1wb3J0IG1pc2MKKworCitkZWYgZ2V0X3NpdGVjb25mKCk6CisgICAgd2ljX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgZW9zID0gd2ljX3BhdGguZmluZCgnc2NyaXB0cycpICsgbGVuKCdzY3JpcHRzJykKKyAgICBzY3JpcHRzX3BhdGggPSB3aWNfcGF0aFs6ZW9zXQorCisgICAgcmV0dXJuIHNjcmlwdHNfcGF0aCArICIvbGliL2ltYWdlL2NvbmZpZy93aWMuY29uZiIKKworY2xhc3MgQ29uZmlnTWdyKG9iamVjdCk6CisgICAgREVGQVVMVFMgPSB7CisgICAgICAgICdjb21tb24nOiB7CisgICAgICAgICAgICAiZGlzdHJvX25hbWUiOiAiRGVmYXVsdCBEaXN0cmlidXRpb24iLAorICAgICAgICAgICAgInBsdWdpbl9kaXIiOiAiL3Vzci9saWIvd2ljL3BsdWdpbnMifSwgIyBUT0RPIHVzZSBwcmVmaXggYWxzbz8KKyAgICAgICAgJ2NyZWF0ZSc6IHsKKyAgICAgICAgICAgICJ0bXBkaXIiOiAnL3Zhci90bXAvd2ljJywKKyAgICAgICAgICAgICJvdXRkaXIiOiAnLi93aWMtb3V0cHV0JywKKyAgICAgICAgICAgICJyZWxlYXNlIjogTm9uZSwKKyAgICAgICAgICAgICJsb2dmaWxlIjogTm9uZSwKKyAgICAgICAgICAgICJuYW1lX3ByZWZpeCI6IE5vbmUsCisgICAgICAgICAgICAibmFtZV9zdWZmaXgiOiBOb25lfQorICAgICAgICB9CisKKyAgICAjIG1ha2UgdGhlIG1hbmFnZXIgY2xhc3MgYXMgc2luZ2xldG9uCisgICAgX2luc3RhbmNlID0gTm9uZQorICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGNscy5faW5zdGFuY2U6CisgICAgICAgICAgICBjbHMuX2luc3RhbmNlID0gc3VwZXIoQ29uZmlnTWdyLCBjbHMpLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgcmV0dXJuIGNscy5faW5zdGFuY2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrc2NvbmY9Tm9uZSwgc2l0ZWNvbmY9Tm9uZSk6CisgICAgICAgICMgcmVzZXQgY29uZmlnIG9wdGlvbnMKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICAgICAgaWYgbm90IHNpdGVjb25mOgorICAgICAgICAgICAgc2l0ZWNvbmYgPSBnZXRfc2l0ZWNvbmYoKQorCisgICAgICAgICMgaW5pdGlhbCBvcHRpb25zIGZyb20gc2l0ZWNvbmYKKyAgICAgICAgc2VsZi5fc2l0ZWNvbmYgPSBzaXRlY29uZgorCisgICAgICAgIGlmIGtzY29uZjoKKyAgICAgICAgICAgIHNlbGYuX2tzY29uZiA9IGtzY29uZgorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9fa3Njb25mID0gTm9uZQorICAgICAgICBzZWxmLl9fc2l0ZWNvbmYgPSBOb25lCisgICAgICAgIHNlbGYuY3JlYXRlID0ge30KKworICAgICAgICAjIGluaXRpYWxpemUgdGhlIHZhbHVlcyB3aXRoIGRlZmF1bHRzCisgICAgICAgIGZvciBzZWMsIHZhbHMgaW4gc2VsZi5ERUZBVUxUUy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgc2VjLCB2YWxzKQorCisgICAgZGVmIF9fc2V0X2tzY29uZihzZWxmLCBrc2NvbmYpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoa3Njb25mKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdDYW5ub3QgZmluZCBrcyBmaWxlOiAlcycgJSBrc2NvbmYpCisKKyAgICAgICAgc2VsZi5fX2tzY29uZiA9IGtzY29uZgorICAgICAgICBzZWxmLl9wYXJzZV9raWNrc3RhcnQoa3Njb25mKQorICAgIGRlZiBfX2dldF9rc2NvbmYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fa3Njb25mCisgICAgX2tzY29uZiA9IHByb3BlcnR5KF9fZ2V0X2tzY29uZiwgX19zZXRfa3Njb25mKQorCisgICAgZGVmIF9wYXJzZV9raWNrc3RhcnQoc2VsZiwga3Njb25mPU5vbmUpOgorICAgICAgICBpZiBub3Qga3Njb25mOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga3NvYmogPSBraWNrc3RhcnQucmVhZF9raWNrc3RhcnQoa3Njb25mKQorCisgICAgICAgIHNlbGYuY3JlYXRlWydrcyddID0ga3NvYmoKKyAgICAgICAgc2VsZi5jcmVhdGVbJ25hbWUnXSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShrc2NvbmYpKVswXQorCisgICAgICAgIHNlbGYuY3JlYXRlWyduYW1lJ10gPSBtaXNjLmJ1aWxkX25hbWUoa3Njb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlWydyZWxlYXNlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVbJ25hbWVfcHJlZml4J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVbJ25hbWVfc3VmZml4J10pCisKK2NvbmZpZ21nciA9IENvbmZpZ01ncigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25maWcvd2ljLmNvbmYgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9jb25maWcvd2ljLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxYmNiNQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NvbmZpZy93aWMuY29uZgpAQCAtMCwwICsxLDYgQEAKK1tjb21tb25dCis7IGdlbmVyYWwgc2V0dGluZ3MKK2Rpc3Ryb19uYW1lID0gT3BlbkVtYmVkZGVkCisKK1tjcmVhdGVdCis7IHNldHRpbmdzIGZvciBjcmVhdGUgc3ViY29tbWFuZApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvY3JlYXRvci5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzMTI5NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkKQEAgLTAsMCArMSwxMjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MsIHN5cworZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyLCBTVVBQUkVTU19IRUxQCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IGVycm9ycworZnJvbSB3aWMuY29uZiBpbXBvcnQgY29uZmlnbWdyCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgorCisKK2NsYXNzIENyZWF0b3Iob2JqZWN0KToKKyAgICAiIiIke25hbWV9OiBjcmVhdGUgYW4gaW1hZ2UKKworICAgIFVzYWdlOgorICAgICAgICAke25hbWV9IFNVQkNPTU1BTkQgPGtzZmlsZT4gW09QVFNdCisKKyAgICAke2NvbW1hbmRfbGlzdH0KKyAgICAke29wdGlvbl9saXN0fQorICAgICIiIgorCisgICAgbmFtZSA9ICd3aWMgY3JlYXRlKGNyKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9zdWJjbWRzID0ge30KKworICAgICAgICAjIGdldCBjbWRzIGZyb20gcGx1Z2lubWdyCisgICAgICAgICMgbWl4LWluIGRvX3N1YmNtZCBpbnRlcmZhY2UKKyAgICAgICAgZm9yIHN1YmNtZCwga2xhc3MgaW4gcGx1Z2lubWdyLmdldF9wbHVnaW5zKCdpbWFnZXInKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGtsYXNzLCAnZG9fY3JlYXRlJyk6CisgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygiVW5zdXBwb3J0ZWQgc3ViY21kOiAlcyIgJSBzdWJjbWQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoa2xhc3MsICdkb19jcmVhdGUnKQorICAgICAgICAgICAgc2VsZi5fc3ViY21kc1tzdWJjbWRdID0gZnVuYworCisgICAgZGVmIGdldF9vcHRwYXJzZXIoc2VsZik6CisgICAgICAgIG9wdHBhcnNlciA9IE9wdGlvblBhcnNlcigpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRlYnVnJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nZGVidWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPVNVUFBSRVNTX0hFTFApCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd2ZXJib3NlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1TVVBQUkVTU19IRUxQKQorICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignJywgJy0tbG9nZmlsZScsIHR5cGU9J3N0cmluZycsIGRlc3Q9J2xvZ2ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGggb2YgbG9nZmlsZScpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNvbmZpZycsIHR5cGU9J3N0cmluZycsIGRlc3Q9J2NvbmZpZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBjb25maWcgZmlsZSBmb3Igd2ljJykKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0ZGlyJywgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J291dGRpcicsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nT3V0cHV0IGRpcmVjdG9yeScpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS10bXBmcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2VuYWJsZXRtcGZzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0dXAgdG1wZGlyIGFzIHRtcGZzIHRvIGFjY2VsZXJhdGUsIGV4cGVyaW1lbnRhbCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZlYXR1cmUsIHVzZSBpdCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gNEcgbWVtb3J5JykKKyAgICAgICAgcmV0dXJuIG9wdHBhcnNlcgorCisgICAgZGVmIHBvc3RvcHRwYXJzZShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgYWJzcGF0aCA9IGxhbWJkYSBwdGg6IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIocHRoKSkKKworICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBtc2dlci5zZXRfbG9nbGV2ZWwoJ3ZlcmJvc2UnKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKCdkZWJ1ZycpCisKKyAgICAgICAgaWYgb3B0aW9ucy5sb2dmaWxlOgorICAgICAgICAgICAgbG9nZmlsZV9hYnNfcGF0aCA9IGFic3BhdGgob3B0aW9ucy5sb2dmaWxlKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihsb2dmaWxlX2Fic19wYXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcnMuVXNhZ2UoImxvZ2ZpbGUncyBwYXRoICVzIHNob3VsZCBiZSBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9wdGlvbnMubG9nZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUobG9nZmlsZV9hYnNfcGF0aCkpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShsb2dmaWxlX2Fic19wYXRoKSkKKyAgICAgICAgICAgIG1zZ2VyLnNldF9pbnRlcmFjdGl2ZShGYWxzZSkKKyAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dmaWxlKGxvZ2ZpbGVfYWJzX3BhdGgpCisgICAgICAgICAgICBjb25maWdtZ3IuY3JlYXRlWydsb2dmaWxlJ10gPSBvcHRpb25zLmxvZ2ZpbGUKKworICAgICAgICBpZiBvcHRpb25zLmNvbmZpZzoKKyAgICAgICAgICAgIGNvbmZpZ21nci5yZXNldCgpCisgICAgICAgICAgICBjb25maWdtZ3IuX3NpdGVjb25mID0gb3B0aW9ucy5jb25maWcKKworICAgICAgICBpZiBvcHRpb25zLm91dGRpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbmZpZ21nci5jcmVhdGVbJ291dGRpciddID0gYWJzcGF0aChvcHRpb25zLm91dGRpcikKKworICAgICAgICBjZGlyID0gJ291dGRpcicKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZmlnbWdyLmNyZWF0ZVtjZGlyXSkgXAorICAgICAgICAgICBhbmQgbm90IG9zLnBhdGguaXNkaXIoY29uZmlnbWdyLmNyZWF0ZVtjZGlyXSk6CisgICAgICAgICAgICBtc2dlci5lcnJvcignSW52YWxpZCBkaXJlY3Rvcnkgc3BlY2lmaWVkOiAlcycgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSBjb25maWdtZ3IuY3JlYXRlW2NkaXJdKQorCisgICAgICAgIGlmIG9wdGlvbnMuZW5hYmxldG1wZnM6CisgICAgICAgICAgICBjb25maWdtZ3IuY3JlYXRlWydlbmFibGV0bXBmcyddID0gb3B0aW9ucy5lbmFibGV0bXBmcworCisgICAgZGVmIG1haW4oc2VsZiwgYXJndj1Ob25lKToKKyAgICAgICAgaWYgYXJndiBpcyBOb25lOgorICAgICAgICAgICAgYXJndiA9IHN5cy5hcmd2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmd2ID0gYXJndls6XSAjIGRvbid0IG1vZGlmeSBjYWxsZXIncyBsaXN0CisKKyAgICAgICAgcG5hbWUgPSBhcmd2WzBdCisgICAgICAgIGlmIHBuYW1lIG5vdCBpbiBzZWxmLl9zdWJjbWRzOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ1Vua25vd24gcGx1Z2luOiAlcycgJSBwbmFtZSkKKworICAgICAgICBvcHRwYXJzZXIgPSBzZWxmLmdldF9vcHRwYXJzZXIoKQorICAgICAgICBvcHRpb25zLCBhcmdzID0gb3B0cGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworICAgICAgICBzZWxmLnBvc3RvcHRwYXJzZShvcHRpb25zKQorCisgICAgICAgIHJldHVybiBzZWxmLl9zdWJjbWRzW3BuYW1lXShvcHRpb25zLCAqYXJnc1sxOl0pCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9lbmdpbmUucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9lbmdpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiOTNlOAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weQpAQCAtMCwwICsxLDIyMCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisKKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgaW1hZ2UgY3JlYXRpb24gZW5naW5lIHVzZWQgYnkgJ3dpYycgdG8KKyMgY3JlYXRlIGltYWdlcy4gIFRoZSBlbmdpbmUgcGFyc2VzIHRocm91Z2ggdGhlIE9wZW5FbWJlZGRlZCBraWNrc3RhcnQKKyMgKHdrcykgZmlsZSBzcGVjaWZpZWQgYW5kIGdlbmVyYXRlcyBpbWFnZXMgdGhhdCBjYW4gdGhlbiBiZSBkaXJlY3RseQorIyB3cml0dGVuIG9udG8gbWVkaWEuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyLCBjcmVhdG9yCitmcm9tIHdpYy51dGlscyBpbXBvcnQgbWlzYworZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IKK2Zyb20gd2ljLnV0aWxzLm9lIGltcG9ydCBtaXNjCisKKworZGVmIHZlcmlmeV9idWlsZF9lbnYoKToKKyAgICAiIiIKKyAgICBWZXJpZnkgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4KKworICAgIFJldHVybnMgVHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlCisgICAgIiIiCisgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpOgorICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK0NBTk5FRF9JTUFHRV9ESVIgPSAibGliL3dpYy9jYW5uZWQtd2tzIiAjIHJlbGF0aXZlIHRvIHNjcmlwdHMKK1NDUklQVFNfQ0FOTkVEX0lNQUdFX0RJUiA9ICJzY3JpcHRzLyIgKyBDQU5ORURfSU1BR0VfRElSCisKK2RlZiBidWlsZF9jYW5uZWRfaW1hZ2VfbGlzdChwYXRoKToKKyAgICBsYXllcnNfcGF0aCA9IG1pc2MuZ2V0X2JpdGJha2VfdmFyKCJCQkxBWUVSUyIpCisgICAgY2FubmVkX3drc19sYXllcl9kaXJzID0gW10KKworICAgIGlmIGxheWVyc19wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBmb3IgbGF5ZXJfcGF0aCBpbiBsYXllcnNfcGF0aC5zcGxpdCgpOgorICAgICAgICAgICAgY3BhdGggPSBvcy5wYXRoLmpvaW4obGF5ZXJfcGF0aCwgU0NSSVBUU19DQU5ORURfSU1BR0VfRElSKQorICAgICAgICAgICAgY2FubmVkX3drc19sYXllcl9kaXJzLmFwcGVuZChjcGF0aCkKKworICAgIGNwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIENBTk5FRF9JTUFHRV9ESVIpCisgICAgY2FubmVkX3drc19sYXllcl9kaXJzLmFwcGVuZChjcGF0aCkKKworICAgIHJldHVybiBjYW5uZWRfd2tzX2xheWVyX2RpcnMKKworZGVmIGZpbmRfY2FubmVkX2ltYWdlKHNjcmlwdHNfcGF0aCwgd2tzX2ZpbGUpOgorICAgICIiIgorICAgIEZpbmQgYSAud2tzIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgY2FubmVkIGZpbGVzIGRpci4KKworICAgIFJldHVybiBGYWxzZSBpZiBub3QgZm91bmQKKyAgICAiIiIKKyAgICBsYXllcnNfY2FubmVkX3drc19kaXIgPSBidWlsZF9jYW5uZWRfaW1hZ2VfbGlzdChzY3JpcHRzX3BhdGgpCisKKyAgICBmb3IgY2FubmVkX3drc19kaXIgaW4gbGF5ZXJzX2Nhbm5lZF93a3NfZGlyOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhjYW5uZWRfd2tzX2Rpcik6CisgICAgICAgICAgICBmb3IgZm5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZm5hbWUuZW5kc3dpdGgoIn4iKSBvciBmbmFtZS5lbmRzd2l0aCgiIyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGZuYW1lLmVuZHN3aXRoKCIud2tzIikgYW5kIHdrc19maWxlICsgIi53a3MiID09IGZuYW1lOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihjYW5uZWRfd2tzX2RpciwgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxscGF0aAorICAgIHJldHVybiBOb25lCisKKworZGVmIGxpc3RfY2FubmVkX2ltYWdlcyhzY3JpcHRzX3BhdGgpOgorICAgICIiIgorICAgIExpc3QgdGhlIC53a3MgZmlsZXMgaW4gdGhlIGNhbm5lZCBpbWFnZSBkaXIsIG1pbnVzIHRoZSBleHRlbnNpb24uCisgICAgIiIiCisgICAgbGF5ZXJzX2Nhbm5lZF93a3NfZGlyID0gYnVpbGRfY2FubmVkX2ltYWdlX2xpc3Qoc2NyaXB0c19wYXRoKQorCisgICAgZm9yIGNhbm5lZF93a3NfZGlyIGluIGxheWVyc19jYW5uZWRfd2tzX2RpcjoKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY2FubmVkX3drc19kaXIpOgorICAgICAgICAgICAgZm9yIGZuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZuYW1lLmVuZHN3aXRoKCJ+Iikgb3IgZm5hbWUuZW5kc3dpdGgoIiMiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBmbmFtZS5lbmRzd2l0aCgiLndrcyIpOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihjYW5uZWRfd2tzX2RpciwgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmdWxscGF0aCkgYXMgd2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gd2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgic2hvcnQtZGVzY3JpcHRpb246IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBsaW5lW2lkeCArIGxlbigic2hvcnQtZGVzY3JpcHRpb246Iik6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmbmFtZSlbMF0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXNcdFx0JXMiICUgKGJhc2VuYW1lLmxqdXN0KDMwKSwgZGVzYykKKworCitkZWYgbGlzdF9jYW5uZWRfaW1hZ2VfaGVscChzY3JpcHRzX3BhdGgsIGZ1bGxwYXRoKToKKyAgICAiIiIKKyAgICBMaXN0IHRoZSBoZWxwIGFuZCBwYXJhbXMgaW4gdGhlIHNwZWNpZmllZCBjYW5uZWQgaW1hZ2UuCisgICAgIiIiCisgICAgZm91bmQgPSBGYWxzZQorICAgIHdpdGggb3BlbihmdWxscGF0aCkgYXMgd2tzOgorICAgICAgICBmb3IgbGluZSBpbiB3a3M6CisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJsb25nLWRlc2NyaXB0aW9uOiIpCisgICAgICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgICAgICAgICBwcmludCBsaW5lW2lkeCArIGxlbigibG9uZy1kZXNjcmlwdGlvbjoiKTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgiIyIpCisgICAgICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICAgICAgcHJpbnQgbGluZVtpZHggKyBsZW4oIiM6Iik6XS5yc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisKK2RlZiBsaXN0X3NvdXJjZV9wbHVnaW5zKCk6CisgICAgIiIiCisgICAgTGlzdCB0aGUgYXZhaWxhYmxlIHNvdXJjZSBwbHVnaW5zIGkuZS4gcGx1Z2lucyBhdmFpbGFibGUgZm9yIC0tc291cmNlLgorICAgICIiIgorICAgIHBsdWdpbnMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5zKCkKKworICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKKyAgICAgICAgcHJpbnQgIiAgJXMiICUgcGx1Z2luCisKKworZGVmIHdpY19jcmVhdGUod2tzX2ZpbGUsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHNjcmlwdHNfcGF0aCwgaW1hZ2Vfb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgIGNvbXByZXNzb3IsIGRlYnVnKToKKyAgICAiIiJDcmVhdGUgaW1hZ2UKKworICAgIHdrc19maWxlIC0gdXNlci1kZWZpbmVkIE9FIGtpY2tzdGFydCBmaWxlCisgICAgcm9vdGZzX2RpciAtIGFic29sdXRlIHBhdGggdG8gdGhlIGJ1aWxkJ3MgL3Jvb3RmcyBkaXIKKyAgICBib290aW1nX2RpciAtIGFic29sdXRlIHBhdGggdG8gdGhlIGJ1aWxkJ3MgYm9vdCBhcnRpZmFjdHMgZGlyZWN0b3J5CisgICAga2VybmVsX2RpciAtIGFic29sdXRlIHBhdGggdG8gdGhlIGJ1aWxkJ3Mga2VybmVsIGRpcmVjdG9yeQorICAgIG5hdGl2ZV9zeXNyb290IC0gYWJzb2x1dGUgcGF0aCB0byB0aGUgYnVpbGQncyBuYXRpdmUgc3lzcm9vdHMgZGlyCisgICAgc2NyaXB0c19wYXRoIC0gYWJzb2x1dGUgcGF0aCB0byAvc2NyaXB0cyBkaXIKKyAgICBpbWFnZV9vdXRwdXRfZGlyIC0gZGlybmFtZSB0byBjcmVhdGUgZm9yIGltYWdlCisgICAgY29tcHJlc3NvciAtIGNvbXByZXNzb3IgdXRpbGl0eSB0byBjb21wcmVzcyB0aGUgaW1hZ2UKKworICAgIE5vcm1hbGx5LCB0aGUgdmFsdWVzIGZvciB0aGUgYnVpbGQgYXJ0aWZhY3RzIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZAorICAgIGJ5ICd3aWMgLWUnIGZyb20gdGhlIG91dHB1dCBvZiB0aGUgJ2JpdGJha2UgLWUnIGNvbW1hbmQgZ2l2ZW4gYW4KKyAgICBpbWFnZSBuYW1lIGUuZy4gJ2NvcmUtaW1hZ2UtbWluaW1hbCcgYW5kIGEgZ2l2ZW4gbWFjaGluZSBzZXQgaW4KKyAgICBsb2NhbC5jb25mLiAgSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgdmFyaWFibGVzIGdldCB0aGUgZm9sbG93aW5nCisgICAgdmFsdWVzIGZyb20gdGhlIG91dHB1dCBvZiAnYml0YmFrZSAtZSc6CisKKyAgICByb290ZnNfZGlyOiAgICAgICAgSU1BR0VfUk9PVEZTCisgICAga2VybmVsX2RpcjogICAgICAgIERFUExPWV9ESVJfSU1BR0UKKyAgICBuYXRpdmVfc3lzcm9vdDogICAgU1RBR0lOR19ESVJfTkFUSVZFCisKKyAgICBJbiB0aGUgYWJvdmUgY2FzZSwgYm9vdGltZ19kaXIgcmVtYWlucyB1bnNldCBhbmQgdGhlCisgICAgcGx1Z2luLXNwZWNpZmljIGltYWdlIGNyZWF0aW9uIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgdGhlCisgICAgYm9vdGltZyBhcnRpZmFjdHMuCisKKyAgICBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgdmFsdWVzIGFyZSBwYXNzZWQgaW4gZXhwbGljaXRseSBpLmUgJ3dpYyAtZScKKyAgICBpcyBub3QgdXNlZCBidXQgcmF0aGVyIHRoZSBpbmRpdmlkdWFsICd3aWMnIG9wdGlvbnMgYXJlIHVzZWQgdG8KKyAgICBleHBsaWNpdGx5IHNwZWNpZnkgdGhlc2UgdmFsdWVzLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgb2VfYnVpbGRkaXIgPSBvcy5lbnZpcm9uWyJCVUlMRERJUiJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKCdkZWJ1ZycpCisKKyAgICBjcm9iaiA9IGNyZWF0b3IuQ3JlYXRvcigpCisKKyAgICBjcm9iai5tYWluKFsiZGlyZWN0IiwgbmF0aXZlX3N5c3Jvb3QsIGtlcm5lbF9kaXIsIGJvb3RpbWdfZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgIHdrc19maWxlLCBpbWFnZV9vdXRwdXRfZGlyLCBvZV9idWlsZGRpciwgY29tcHJlc3NvciBvciAiIl0pCisKKyAgICBwcmludCAiXG5UaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOlxuICAlcyIgJSB3a3NfZmlsZQorCisKK2RlZiB3aWNfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgpOgorICAgICIiIgorICAgIFByaW50IHRoZSBsaXN0IG9mIGltYWdlcyBvciBzb3VyY2UgcGx1Z2lucy4KKyAgICAiIiIKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGFyZ3MgPT0gWyJpbWFnZXMiXToKKyAgICAgICAgbGlzdF9jYW5uZWRfaW1hZ2VzKHNjcmlwdHNfcGF0aCkKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIGFyZ3MgPT0gWyJzb3VyY2UtcGx1Z2lucyJdOgorICAgICAgICBsaXN0X3NvdXJjZV9wbHVnaW5zKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIGxlbihhcmdzKSA9PSAyIGFuZCBhcmdzWzFdID09ICJoZWxwIjoKKyAgICAgICAgd2tzX2ZpbGUgPSBhcmdzWzBdCisgICAgICAgIGZ1bGxwYXRoID0gZmluZF9jYW5uZWRfaW1hZ2Uoc2NyaXB0c19wYXRoLCB3a3NfZmlsZSkKKyAgICAgICAgaWYgbm90IGZ1bGxwYXRoOgorICAgICAgICAgICAgcHJpbnQgIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAiXAorICAgICAgICAgICAgICAgICAgIihVc2UgJ3dpYyBsaXN0IGltYWdlcycgdG8gbGlzdCBhdmFpbGFibGUgaW1hZ2VzLCBvciAiXAorICAgICAgICAgICAgICAgICAgInNwZWNpZnkgYSBmdWxseS1xdWFsaWZpZWQgT0Uga2lja3N0YXJ0ICgud2tzKSAiXAorICAgICAgICAgICAgICAgICAgImZpbGVuYW1lKVxuIiAlIHdrc19maWxlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBsaXN0X2Nhbm5lZF9pbWFnZV9oZWxwKHNjcmlwdHNfcGF0aCwgZnVsbHBhdGgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzc4YjYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5CkBAIC0wLDAgKzEsNzQ3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBzb21lIGJhc2ljIGhlbHAgaW52b2NhdGlvbiBmdW5jdGlvbnMgYWxvbmcKKyMgd2l0aCB0aGUgYnVsayBvZiB0aGUgaGVscCB0b3BpYyB0ZXh0IGZvciB0aGUgT0UgQ29yZSBJbWFnZSBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1nciwgUExVR0lOX1RZUEVTCisKK2RlZiBzdWJjb21tYW5kX2Vycm9yKGFyZ3MpOgorICAgIGxvZ2dpbmcuaW5mbygiaW52YWxpZCBzdWJjb21tYW5kICVzIiAlIGFyZ3NbMF0pCisKKworZGVmIGRpc3BsYXlfaGVscChzdWJjb21tYW5kLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgRGlzcGxheSBoZWxwIGZvciBzdWJjb21tYW5kLgorICAgICIiIgorICAgIGlmIHN1YmNvbW1hbmQgbm90IGluIHN1YmNvbW1hbmRzOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGhscCA9IHN1YmNvbW1hbmRzLmdldChzdWJjb21tYW5kLCBzdWJjb21tYW5kX2Vycm9yKVsyXQorICAgIGlmIGNhbGxhYmxlKGhscCk6CisgICAgICAgIGhscCA9IGhscCgpCisgICAgcGFnZXIgPSBzdWJwcm9jZXNzLlBvcGVuKCdsZXNzJywgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQorICAgIHBhZ2VyLmNvbW11bmljYXRlKGhscCkKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHdpY19oZWxwKGFyZ3MsIHVzYWdlX3N0ciwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIFN1YmNvbW1hbmQgaGVscCBkaXNwYXRjaGVyLgorICAgICIiIgorICAgIGlmIGxlbihhcmdzKSA9PSAxIG9yIG5vdCBkaXNwbGF5X2hlbHAoYXJnc1sxXSwgc3ViY29tbWFuZHMpOgorICAgICAgICBwcmludCB1c2FnZV9zdHIKKworCitkZWYgZ2V0X3dpY19wbHVnaW5zX2hlbHAoKToKKyAgICAiIiIKKyAgICBDb21iaW5lIHdpY19wbHVnaW5zX2hlbHAgd2l0aCB0aGUgaGVscCBmb3IgZXZlcnkga25vd24KKyAgICBzb3VyY2UgcGx1Z2luLgorICAgICIiIgorICAgIHJlc3VsdCA9IHdpY19wbHVnaW5zX2hlbHAKKyAgICBmb3IgcGx1Z2luX3R5cGUgaW4gUExVR0lOX1RZUEVTOgorICAgICAgICByZXN1bHQgKz0gJ1xuXG4lcyBQTFVHSU5TXG5cbicgJSBwbHVnaW5fdHlwZS51cHBlcigpCisgICAgICAgIGZvciBuYW1lLCBwbHVnaW4gaW4gcGx1Z2lubWdyLmdldF9wbHVnaW5zKHBsdWdpbl90eXBlKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAiXG4gJXMgcGx1Z2luOlxuIiAlIG5hbWUKKyAgICAgICAgICAgIGlmIHBsdWdpbi5fX2RvY19fOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwbHVnaW4uX19kb2NfXworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlxuICAgICVzIGlzIG1pc3NpbmcgZG9jc3RyaW5nXG4iICUgcGx1Z2luCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBpbnZva2Vfc3ViY29tbWFuZChhcmdzLCBwYXJzZXIsIG1haW5fY29tbWFuZF91c2FnZSwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIERpc3BhdGNoIHRvIHN1YmNvbW1hbmQgaGFuZGxlciBib3Jyb3dlZCBmcm9tIGNvbWJvLWxheWVyLgorICAgIFNob3VsZCB1c2UgYXJncGFyc2UsIGJ1dCBoYXMgdG8gd29yayBpbiAyLjYuCisgICAgIiIiCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIk5vIHN1YmNvbW1hbmQgc3BlY2lmaWVkLCBleGl0aW5nIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICByZXR1cm4gMQorICAgIGVsaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgIHdpY19oZWxwKGFyZ3MsIG1haW5fY29tbWFuZF91c2FnZSwgc3ViY29tbWFuZHMpCisgICAgZWxpZiBhcmdzWzBdIG5vdCBpbiBzdWJjb21tYW5kczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiVW5zdXBwb3J0ZWQgc3ViY29tbWFuZCAlcywgZXhpdGluZ1xuIiAlIChhcmdzWzBdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICByZXR1cm4gMQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlID0gc3ViY29tbWFuZHMuZ2V0KGFyZ3NbMF0sIHN1YmNvbW1hbmRfZXJyb3IpWzFdCisgICAgICAgIHN1YmNvbW1hbmRzLmdldChhcmdzWzBdLCBzdWJjb21tYW5kX2Vycm9yKVswXShhcmdzWzE6XSwgdXNhZ2UpCisKKworIyMKKyMgd2ljIGhlbHAgYW5kIHVzYWdlIHN0cmluZ3MKKyMjCisKK3dpY191c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgY3VzdG9taXplZCBPcGVuRW1iZWRkZWQgaW1hZ2UKKworIHVzYWdlOiB3aWMgWy0tdmVyc2lvbl0gfCBbLS1oZWxwXSB8IFtDT01NQU5EIFtBUkdTXV0KKworIEN1cnJlbnQgJ3dpYycgY29tbWFuZHMgYXJlOgorICAgIGhlbHAgICAgICAgICAgICAgIFNob3cgaGVscCBmb3IgY29tbWFuZCBvciBvbmUgb2YgdGhlIHRvcGljcyAoc2VlIGJlbG93KQorICAgIGNyZWF0ZSAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBPcGVuRW1iZWRkZWQgaW1hZ2UKKyAgICBsaXN0ICAgICAgICAgICAgICBMaXN0IGF2YWlsYWJsZSBjYW5uZWQgaW1hZ2VzIGFuZCBzb3VyY2UgcGx1Z2lucworCisgSGVscCB0b3BpY3M6CisgICAgb3ZlcnZpZXcgICAgICAgICAgd2ljIG92ZXJ2aWV3IC0gR2VuZXJhbCBvdmVydmlldyBvZiB3aWMKKyAgICBwbHVnaW5zICAgICAgICAgICB3aWMgcGx1Z2lucyAtIE92ZXJ2aWV3IGFuZCBBUEkKKyAgICBraWNrc3RhcnQgICAgICAgICB3aWMga2lja3N0YXJ0IC0gd2ljIGtpY2tzdGFydCByZWZlcmVuY2UKKyIiIgorCit3aWNfaGVscF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHdpYyBoZWxwIDxzdWJjb21tYW5kPgorCisgVGhpcyBjb21tYW5kIGRpc3BsYXlzIGRldGFpbGVkIGhlbHAgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4KKyIiIgorCit3aWNfY3JlYXRlX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSBuZXcgT3BlbkVtYmVkZGVkIGltYWdlCisKKyB1c2FnZTogd2ljIGNyZWF0ZSA8d2tzIGZpbGUgb3IgaW1hZ2UgbmFtZT4gWy1vIDxESVJOQU1FPiB8IC0tb3V0ZGlyIDxESVJOQU1FPl0KKyAgICAgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorICAgICAgICAgICAgWy1lIHwgLS1pbWFnZS1uYW1lXSBbLXMsIC0tc2tpcC1idWlsZC1jaGVja10gWy1ELCAtLWRlYnVnXQorICAgICAgICAgICAgWy1yLCAtLXJvb3Rmcy1kaXJdIFstYiwgLS1ib290aW1nLWRpcl0KKyAgICAgICAgICAgIFstaywgLS1rZXJuZWwtZGlyXSBbLW4sIC0tbmF0aXZlLXN5c3Jvb3RdIFstZiwgLS1idWlsZC1yb290ZnNdCisKKyBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhbiBPcGVuRW1iZWRkZWQgaW1hZ2UgYmFzZWQgb24gdGhlICdPRSBraWNrc3RhcnQKKyBjb21tYW5kcycgZm91bmQgaW4gdGhlIDx3a3MgZmlsZT4uCisKKyBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBpbWFnZSBpbiBhIGRpcmVjdG9yeSB3aXRoIGEKKyBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyBTZWUgJ3dpYyBoZWxwIGNyZWF0ZScgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorIiIiCisKK3dpY19jcmVhdGVfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIGNyZWF0ZSAtIENyZWF0ZSBhIG5ldyBPcGVuRW1iZWRkZWQgaW1hZ2UKKworU1lOT1BTSVMKKyAgICB3aWMgY3JlYXRlIDx3a3MgZmlsZSBvciBpbWFnZSBuYW1lPiBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICBbLWUgfCAtLWltYWdlLW5hbWVdIFstcywgLS1za2lwLWJ1aWxkLWNoZWNrXSBbLUQsIC0tZGVidWddCisgICAgICAgIFstciwgLS1yb290ZnMtZGlyXSBbLWIsIC0tYm9vdGltZy1kaXJdCisgICAgICAgIFstaywgLS1rZXJuZWwtZGlyXSBbLW4sIC0tbmF0aXZlLXN5c3Jvb3RdIFstZiwgLS1idWlsZC1yb290ZnNdCisgICAgICAgIFstYywgLS1jb21wcmVzcy13aXRoXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGFuIE9wZW5FbWJlZGRlZCBpbWFnZSBiYXNlZCBvbiB0aGUgJ09FCisgICAga2lja3N0YXJ0IGNvbW1hbmRzJyBmb3VuZCBpbiB0aGUgPHdrcyBmaWxlPi4KKworICAgIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdpYyBuZWVkcyB0byBrbm93IHRoZSBsb2NhdGlvbnMgb2YgdGhlCisgICAgdmFyaW91cyBidWlsZCBhcnRpZmFjdHMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorCisgICAgVXNlcnMgY2FuIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgYnVpbGQgYXJ0aWZhY3QgbG9jYXRpb25zIHVzaW5nCisgICAgdGhlIC1yLCAtYiwgLWssIGFuZCAtbiBvcHRpb25zLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIHdoZXJlCisgICAgdGhlIGNvcnJlc3BvbmRpbmcgYXJ0aWZhY3RzIGFyZSB0eXBpY2FsbHkgZm91bmQgaW4gYSBub3JtYWwKKyAgICBPcGVuRW1iZWRkZWQgYnVpbGQuCisKKyAgICBBbHRlcm5hdGl2ZWx5LCB1c2VycyBjYW4gdXNlIHRoZSAtZSBvcHRpb24gdG8gaGF2ZSAnd2ljJyBkZXRlcm1pbmUKKyAgICB0aG9zZSBsb2NhdGlvbnMgZm9yIGEgZ2l2ZW4gaW1hZ2UuICBJZiB0aGUgLWUgb3B0aW9uIGlzIHVzZWQsIHRoZQorICAgIHVzZXIgbmVlZHMgdG8gaGF2ZSBzZXQgdGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUgdmFyaWFibGUgaW4KKyAgICBsb2NhbC5jb25mLCBhbmQgaGF2ZSBzb3VyY2VkIHRoZSBidWlsZCBlbnZpcm9ubWVudC4KKworICAgIFRoZSAtZSBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBpbWFnZSB0byB1c2UgdGhlCisgICAgYXJ0aWZhY3RzIGZyb20gZS5nLiBjb3JlLWltYWdlLXNhdG8uCisKKyAgICBUaGUgLXIgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgL3Jvb3RmcyBkaXIgdG8KKyAgICB1c2UgYXMgdGhlIC53a3Mgcm9vdGZzIHNvdXJjZS4KKworICAgIFRoZSAtYiBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZworICAgIHRoZSBib290IGFydGlmYWN0cyAoZS5nLiAvRUZJIG9yIC9zeXNsaW51eCBkaXJzKSB0byB1c2UgYXMgdGhlCisgICAgLndrcyBib290aW1nIHNvdXJjZS4KKworICAgIFRoZSAtayBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZworICAgIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoZSAud2tzIGJvb3RpbWcuCisKKyAgICBUaGUgLW4gb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QKKyAgICBjb250YWluaW5nIHRoZSB0b29scyB0byB1c2UgdG8gYnVpbGQgdGhlIGltYWdlLgorCisgICAgVGhlIC1mIG9wdGlvbiBpcyB1c2VkIHRvIGJ1aWxkIHJvb3RmcyBieSBydW5uaW5nICJiaXRiYWtlIDxpbWFnZT4iCisKKyAgICBUaGUgLXMgb3B0aW9uIGlzIHVzZWQgdG8gc2tpcCB0aGUgYnVpbGQgY2hlY2suICBUaGUgYnVpbGQgY2hlY2sgaXMKKyAgICBhIHNpbXBsZSBzYW5pdHkgY2hlY2sgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciBoYXMKKyAgICBzb3VyY2VkIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzbyB0aGF0IHRoZSAtZSBvcHRpb24gY2FuIG9wZXJhdGUKKyAgICBjb3JyZWN0bHkuICBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBidWlsZCBhcnRpZmFjdCBsb2NhdGlvbnMKKyAgICBleHBsaWNpdGx5LCAnd2ljJyBhc3N1bWVzIHRoZSB1c2VyIGtub3dzIHdoYXQgaGUgb3Igc2hlIGlzIGRvaW5nCisgICAgYW5kIHNraXBzIHRoZSBidWlsZCBjaGVjay4KKworICAgIFRoZSAtRCBvcHRpb24gaXMgdXNlZCB0byBkaXNwbGF5IGRlYnVnIGluZm9ybWF0aW9uIGRldGFpbGluZworICAgIGV4YWN0bHkgd2hhdCBoYXBwZW5zIGJlaGluZCB0aGUgc2NlbmVzIHdoZW4gYSBjcmVhdGUgcmVxdWVzdCBpcworICAgIGZ1bGZpbGxlZCAob3Igbm90LCBhcyB0aGUgY2FzZSBtYXkgYmUpLiAgSXQgZW51bWVyYXRlcyBhbmQKKyAgICBkaXNwbGF5cyB0aGUgY29tbWFuZCBzZXF1ZW5jZSB1c2VkLCBhbmQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFueQorICAgIGJ1ZyByZXBvcnQgZGVzY3JpYmluZyB1bmV4cGVjdGVkIHJlc3VsdHMuCisKKyAgICBXaGVuICd3aWMgLWUnIGlzIHVzZWQsIHRoZSBsb2NhdGlvbnMgZm9yIHRoZSBidWlsZCBhcnRpZmFjdHMKKyAgICB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgJ3dpYyAtZScgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZSAnYml0YmFrZQorICAgIC1lJyBjb21tYW5kIGdpdmVuIGFuIGltYWdlIG5hbWUgZS5nLiAnY29yZS1pbWFnZS1taW5pbWFsJyBhbmQgYQorICAgIGdpdmVuIG1hY2hpbmUgc2V0IGluIGxvY2FsLmNvbmYuICBJbiB0aGF0IGNhc2UsIHRoZSBpbWFnZSBpcworICAgIGNyZWF0ZWQgYXMgaWYgdGhlIGZvbGxvd2luZyAnYml0YmFrZSAtZScgdmFyaWFibGVzIHdlcmUgdXNlZDoKKworICAgIC1yOiAgICAgICAgSU1BR0VfUk9PVEZTCisgICAgLWs6ICAgICAgICBTVEFHSU5HX0tFUk5FTF9ESVIKKyAgICAtbjogICAgICAgIFNUQUdJTkdfRElSX05BVElWRQorICAgIC1iOiAgICAgICAgZW1wdHkgKHBsdWdpbi1zcGVjaWZpYyBoYW5kbGVycyBtdXN0IGRldGVybWluZSB0aGlzKQorCisgICAgSWYgJ3dpYyAtZScgaXMgbm90IHVzZWQsIHRoZSB1c2VyIG5lZWRzIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUKKyAgICB2YWx1ZSBmb3IgLWIgKGFzIHdlbGwgYXMgLXIsIC1rLCBhbmQgLW4pLgorCisgICAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgaW1hZ2UgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhCisgICAgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgVGhlIC1jIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgY29tcHJlc3NvciB1dGlsaXR5IHRvIGNvbXByZXNzCisgICAgYW4gaW1hZ2UuIGd6aXAsIGJ6aXAyIGFuZCB4eiBjb21wcmVzc29ycyBhcmUgc3VwcG9ydGVkLgorIiIiCisKK3dpY19saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IGF2YWlsYWJsZSBPcGVuRW1iZWRkZWQgaW1hZ2VzIGFuZCBzb3VyY2UgcGx1Z2lucworCisgdXNhZ2U6IHdpYyBsaXN0IGltYWdlcworICAgICAgICB3aWMgbGlzdCA8aW1hZ2U+IGhlbHAKKyAgICAgICAgd2ljIGxpc3Qgc291cmNlLXBsdWdpbnMKKworIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGNhbm5lZCBpbWFnZXMgYXMgd2VsbCBhcworIGhlbHAgZm9yIHRob3NlIGltYWdlcy4gIEl0IGFsc28gY2FuIGJlIHVzZWQgdG8gbGlzdCBvZiBhdmFpbGFibGUgc291cmNlCisgcGx1Z2lucy4KKworIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBhdmFpbGFibGUgJ2Nhbm5lZCcgaW1hZ2VzLgorCisgVGhlIHNlY29uZCBmb3JtIGxpc3RzIHRoZSBkZXRhaWxlZCBoZWxwIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljCisgJ2Nhbm5lZCcgaW1hZ2UuCisKKyBUaGUgdGhpcmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgYXZhaWxhYmxlIC0tc291cmNlcyAoc291cmNlCisgcGx1Z2lucykuCisKKyBTZWUgJ3dpYyBoZWxwIGxpc3QnIGZvciBtb3JlIGRldGFpbHMuCisiIiIKKword2ljX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIGxpc3QgLSBMaXN0IGF2YWlsYWJsZSBPcGVuRW1iZWRkZWQgaW1hZ2VzIGFuZCBzb3VyY2UgcGx1Z2lucworCitTWU5PUFNJUworICAgIHdpYyBsaXN0IGltYWdlcworICAgIHdpYyBsaXN0IDxpbWFnZT4gaGVscAorICAgIHdpYyBsaXN0IHNvdXJjZS1wbHVnaW5zCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIHNldCBvZiBhdmFpbGFibGUgY2FubmVkIGltYWdlcyBhcyB3ZWxsCisgICAgYXMgaGVscCBmb3IgdGhvc2UgaW1hZ2VzLiAgSXQgYWxzbyBjYW4gYmUgdXNlZCB0byBsaXN0IGF2YWlsYWJsZQorICAgIHNvdXJjZSBwbHVnaW5zLgorCisgICAgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIGF2YWlsYWJsZSAnY2FubmVkJyBpbWFnZXMuCisgICAgVGhlc2UgYXJlIGFjdHVhbGx5IGp1c3QgdGhlIHNldCBvZiAud2tzIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vdmVkCisgICAgaW50byB0aGUgL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzIGRpcmVjdG9yeSkuCisKKyAgICBUaGUgc2Vjb25kIGZvcm0gbGlzdHMgdGhlIGRldGFpbGVkIGhlbHAgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWMKKyAgICAnY2FubmVkJyBpbWFnZS4KKworICAgIFRoZSB0aGlyZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBhdmFpbGFibGUgLS1zb3VyY2VzIChzb3VyY2UKKyAgICBwbHVnaW5zKS4gIFRoZSBjb250ZW50cyBvZiBhIGdpdmVuIHBhcnRpdGlvbiBhcmUgZHJpdmVuIGJ5IGNvZGUKKyAgICBkZWZpbmVkIGluICdzb3VyY2UgcGx1Z2lucycuICBVc2VycyBzcGVjaWZ5IGEgc3BlY2lmaWMgcGx1Z2luIHZpYQorICAgIHRoZSAtLXNvdXJjZSBwYXJhbWV0ZXIgb2YgdGhlIHBhcnRpdGlvbiAud2tzIGNvbW1hbmQuICBOb3JtYWxseQorICAgIHRoaXMgaXMgdGhlICdyb290ZnMnIHBsdWdpbiBidXQgY2FuIGJlIGFueSBvZiB0aGUgbW9yZSBzcGVjaWFsaXplZAorICAgIHNvdXJjZXMgbGlzdGVkIGJ5IHRoZSAnbGlzdCBzb3VyY2UtcGx1Z2lucycgY29tbWFuZC4gIFVzZXJzIGNhbgorICAgIGFsc28gYWRkIHRoZWlyIG93biBzb3VyY2UgcGx1Z2lucyAtIHNlZSAnd2ljIGhlbHAgcGx1Z2lucycgZm9yCisgICAgZGV0YWlscy4KKyIiIgorCit3aWNfcGx1Z2luc19oZWxwID0gIiIiCisKK05BTUUKKyAgICB3aWMgcGx1Z2lucyAtIE92ZXJ2aWV3IGFuZCBBUEkKKworREVTQ1JJUFRJT04KKyAgICBwbHVnaW5zIGFsbG93IHdpYyBmdW5jdGlvbmFsaXR5IHRvIGJlIGV4dGVuZGVkIGFuZCBzcGVjaWFsaXplZCBieQorICAgIHVzZXJzLiAgVGhpcyBzZWN0aW9uIGRvY3VtZW50cyB0aGUgcGx1Z2luIGludGVyZmFjZSwgd2hpY2ggaXMKKyAgICBjdXJyZW50bHkgcmVzdHJpY3RlZCB0byAnc291cmNlJyBwbHVnaW5zLgorCisgICAgJ1NvdXJjZScgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIHRvIGN1c3RvbWl6ZSB2YXJpb3VzIGFzcGVjdHMKKyAgICBvZiB0aGUgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIGluIHdpYywgbWFpbmx5IHRoZSBjb250ZW50cyBvZgorICAgIHBhcnRpdGlvbnMuCisKKyAgICBTb3VyY2UgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBtYXBwaW5nIHZhbHVlcyBzcGVjaWZpZWQgaW4KKyAgICAud2tzIGZpbGVzIHVzaW5nIHRoZSAtLXNvdXJjZSBrZXl3b3JkIHRvIGEgcGFydGljdWxhciBwbHVnaW4KKyAgICBpbXBsZW1lbnRhdGlvbiB0aGF0IHBvcHVsYXRlcyBhIGNvcnJlc3BvbmRpbmcgcGFydGl0aW9uLgorCisgICAgQSBzb3VyY2UgcGx1Z2luIGlzIGNyZWF0ZWQgYXMgYSBzdWJjbGFzcyBvZiBTb3VyY2VQbHVnaW4gKHNlZQorICAgIHNjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5KSBhbmQgdGhlIHBsdWdpbiBmaWxlIGNvbnRhaW5pbmcgaXQKKyAgICBpcyBhZGRlZCB0byBzY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvIHRvIG1ha2UgdGhlIHBsdWdpbgorICAgIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgd2ljIGltcGxlbWVudGF0aW9uLgorCisgICAgU291cmNlIHBsdWdpbnMgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgYW5kIGFkZGVkIGJ5IGV4dGVybmFsCisgICAgbGF5ZXJzIC0gYW55IHBsdWdpbnMgZm91bmQgaW4gYSBzY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvCisgICAgZGlyZWN0b3J5IGluIGFuIGV4dGVybmFsIGxheWVyIHdpbGwgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZS4KKworICAgIFdoZW4gdGhlIHdpYyBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBpbnZva2UgYSBwYXJ0aXRpb24tc3BlY2lmaWMKKyAgICBpbXBsZW1lbnRhdGlvbiwgaXQgbG9va3MgZm9yIHRoZSBwbHVnaW4gdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcworICAgIHRoZSAtLXNvdXJjZSBwYXJhbSBnaXZlbiB0byB0aGF0IHBhcnRpdGlvbi4gIEZvciBleGFtcGxlLCBpZiB0aGUKKyAgICBwYXJ0aXRpb24gaXMgc2V0IHVwIGxpa2UgdGhpczoKKworICAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAgIC4uLgorCisgICAgdGhlbiB0aGUgbWV0aG9kcyBkZWZpbmVkIGFzIGNsYXNzIG1lbWJlcnMgb2YgdGhlIHBsdWdpbiBoYXZpbmcgdGhlCisgICAgbWF0Y2hpbmcgYm9vdGltZy1wY2Jpb3MgLm5hbWUgY2xhc3MgbWVtYmVyIHdvdWxkIGJlIHVzZWQuCisKKyAgICBUbyBiZSBtb3JlIGNvbmNyZXRlLCBoZXJlJ3MgdGhlIHBsdWdpbiBkZWZpbml0aW9uIHRoYXQgd291bGQgbWF0Y2gKKyAgICBhICctLXNvdXJjZSBib290aW1nLXBjYmlvcycgdXNhZ2UsIGFsb25nIHdpdGggYW4gZXhhbXBsZSBtZXRob2QKKyAgICB0aGF0IHdvdWxkIGJlIGNhbGxlZCBieSB0aGUgd2ljIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgbmVlZGVkIHRvCisgICAgaW52b2tlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHBhcnRpdGlvbi1wcmVwYXJhdGlvbiBmdW5jdGlvbjoKKworICAgIGNsYXNzIEJvb3RpbWdQY2Jpb3NQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAgICAgbmFtZSA9ICdib290aW1nLXBjYmlvcycKKworICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oc2VsZiwgcGFydCwgLi4uKQorCisgICAgSWYgdGhlIHN1YmNsYXNzIGl0c2VsZiBkb2Vzbid0IGltcGxlbWVudCBhIGZ1bmN0aW9uLCBhICdkZWZhdWx0JworICAgIHZlcnNpb24gaW4gYSBzdXBlcmNsYXNzIHdpbGwgYmUgbG9jYXRlZCBhbmQgdXNlZCwgd2hpY2ggaXMgd2h5IGFsbAorICAgIHBsdWdpbnMgbXVzdCBiZSBkZXJpdmVkIGZyb20gU291cmNlUGx1Z2luLgorCisgICAgVGhlIFNvdXJjZVBsdWdpbiBjbGFzcyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcywgd2hpY2ggaXMgdGhlCisgICAgY3VycmVudCBzZXQgb2YgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZC9vdmVycmlkZGVuIGJ5CisgICAgLS1zb3VyY2UgcGx1Z2lucy4gIEFueSBtZXRob2RzIG5vdCBpbXBsZW1lbnRlZCBieSBhIFNvdXJjZVBsdWdpbgorICAgIHN1YmNsYXNzIGluaGVyaXQgdGhlIGltcGxlbWVudGF0aW9ucyBwcmVzZW50IGluIHRoZSBTb3VyY2VQbHVnaW4KKyAgICBjbGFzcyAoc2VlIHRoZSBTb3VyY2VQbHVnaW4gc291cmNlIGZvciBkZXRhaWxzKToKKworICAgICAgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKQorICAgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYQorICAgICAgICAgIHBhcnRpdGlvbi4gSW4gb3RoZXIgd29yZHMsIGl0ICdwcmVwYXJlcycgdGhlIGZpbmFsIHBhcnRpdGlvbgorICAgICAgICAgIGltYWdlIHdoaWNoIHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGRpc2sgaW1hZ2UuCisKKyAgICAgIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oKQorICAgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgdHlwaWNhbGx5IHVzZWQgdG8KKyAgICAgICAgICBjcmVhdGUgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgcGFydGl0aW9uLCBmb3IKKyAgICAgICAgICBleGFtcGxlIHN5c2xpbnV4IG9yIGdydWIgY29uZmlnIGZpbGVzLgorCisgICAgICBkb19pbnN0YWxsX2Rpc2soKQorICAgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZAorICAgICAgICAgIGludG8gYSBkaXNrIGltYWdlLiAgVGhpcyBwcm92aWRlcyBhIGhvb2sgdG8gYWxsb3cKKyAgICAgICAgICBmaW5hbGl6YXRpb24gb2YgYSBkaXNrIGltYWdlLCBmb3IgZXhhbXBsZSB0byB3cml0ZSBhbiBNQlIgdG8KKyAgICAgICAgICBpdC4KKworICAgICAgZG9fc3RhZ2VfcGFydGl0aW9uKCkKKyAgICAgICAgICBTcGVjaWFsIGNvbnRlbnQtc3RhZ2luZyBob29rIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgICBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBub3JtYWxseSBlbXB0eS4KKworICAgICAgICAgIFR5cGljYWxseSwgYSBwYXJ0aXRpb24gd2lsbCBqdXN0IHVzZSB0aGUgcGFzc2VkLWluCisgICAgICAgICAgcGFyYW1ldGVycywgZm9yIGV4YW1wbGUgdGhlIHVubW9kaWZpZWQgdmFsdWUgb2YgYm9vdGltZ19kaXIuCisgICAgICAgICAgSW4gc29tZSBjYXNlcyBob3dldmVyLCB0aGluZ3MgbWF5IG5lZWQgdG8gYmUgbW9yZSB0YWlsb3JlZC4KKyAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjZXJ0YWluIGZpbGVzIG1heSBhZGRpdGlvbmFsbHkgbmVlZCB0byBiZQorICAgICAgICAgIHRha2UgZnJvbSBib290aW1nX2RpciArIC9ib290LiAgVGhpcyBob29rIGFsbG93cyB0aG9zZSBmaWxlcworICAgICAgICAgIHRvIGJlIHN0YWdlZCBpbiBhIGN1c3RvbWl6ZWQgZmFzaGlvbi4gIE5vdGUgdGhhdAorICAgICAgICAgIGdldF9iaXRiYWtlX3ZhcigpIGFsbG93cyB5b3UgdG8gYWNjZXNzIG5vbi1zdGFuZGFyZAorICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IHlvdSBtaWdodCB3YW50IHRvIHVzZSBmb3IgdGhlc2UgdHlwZXMgb2YKKyAgICAgICAgICBzaXR1YXRpb25zLgorCisgICAgVGhpcyBzY2hlbWUgaXMgZXh0ZW5zaWJsZSAtIGFkZGluZyBtb3JlIGhvb2tzIGlzIGEgc2ltcGxlIG1hdHRlcgorICAgIG9mIGFkZGluZyBtb3JlIHBsdWdpbiBtZXRob2RzIHRvIFNvdXJjZVBsdWdpbiBhbmQgZGVyaXZlZCBjbGFzc2VzLgorICAgIFRoZSBjb2RlIHRoYXQgdGhlbiBuZWVkcyB0byBjYWxsIHRoZSBwbHVnaW4gbWV0aG9kcyB1c2VzCisgICAgcGx1Z2luLmdldF9zb3VyY2VfcGx1Z2luX21ldGhvZHMoKSB0byBmaW5kIHRoZSBtZXRob2QocykgbmVlZGVkIGJ5CisgICAgdGhlIGNhbGw7IHRoaXMgaXMgZG9uZSBieSBmaWxsaW5nIHVwIGEgZGljdCB3aXRoIGtleXMgY29udGFpbmluZworICAgIHRoZSBtZXRob2QgbmFtZXMgb2YgaW50ZXJlc3QgLSBvbiBzdWNjZXNzLCB0aGVzZSB3aWxsIGJlIGZpbGxlZCBpbgorICAgIHdpdGggdGhlIGFjdHVhbCBtZXRob2RzLiBQbGVhc2Ugc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICBleGFtcGxlcyBhbmQgZGV0YWlscy4KKyIiIgorCit3aWNfb3ZlcnZpZXdfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIG92ZXJ2aWV3IC0gR2VuZXJhbCBvdmVydmlldyBvZiB3aWMKKworREVTQ1JJUFRJT04KKyAgICBUaGUgJ3dpYycgY29tbWFuZCBnZW5lcmF0ZXMgcGFydGl0aW9uZWQgaW1hZ2VzIGZyb20gZXhpc3RpbmcKKyAgICBPcGVuRW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3RzLiAgSW1hZ2UgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkKKyAgICBwYXJ0aXRpb25pbmcgY29tbWFuZHMgY29udGFpbmVkIGluIGFuICdPcGVuZW1iZWRkZWQga2lja3N0YXJ0JworICAgICgud2tzKSBmaWxlIChzZWUgJ3dpYyBoZWxwIGtpY2tzdGFydCcpIHNwZWNpZmllZCBlaXRoZXIgZGlyZWN0bHkKKyAgICBvbiB0aGUgY29tbWFuZC1saW5lIG9yIGFzIG9uZSBvZiBhIHNlbGVjdGlvbiBvZiBjYW5uZWQgLndrcyBmaWxlcworICAgIChzZWUgJ3dpYyBsaXN0IGltYWdlcycpLiAgV2hlbiBhcHBsaWVkIHRvIGEgZ2l2ZW4gc2V0IG9mIGJ1aWxkCisgICAgYXJ0aWZhY3RzLCB0aGUgcmVzdWx0IGlzIGFuIGltYWdlIG9yIHNldCBvZiBpbWFnZXMgdGhhdCBjYW4gYmUKKyAgICBkaXJlY3RseSB3cml0dGVuIG9udG8gbWVkaWEgYW5kIHVzZWQgb24gYSBwYXJ0aWN1bGFyIHN5c3RlbS4KKworICAgIFRoZSAnd2ljJyBjb21tYW5kIGFuZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgaXQncyBiYXNlZCBvbiBpcyBieQorICAgIGRlZmluaXRpb24gaW5jb21wbGV0ZSAtIGl0cyBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBnZW5lcmF0aW9uIG9mCisgICAgY3VzdG9taXplZCBpbWFnZXMsIGFuZCBhcyBzdWNoIHdhcyBkZXNpZ25lZCB0byBiZSBjb21wbGV0ZWx5CisgICAgZXh0ZW5zaWJsZSB2aWEgYSBwbHVnaW4gaW50ZXJmYWNlIChzZWUgJ3dpYyBoZWxwIHBsdWdpbnMnKS4KKworICBCYWNrZ3JvdW5kIGFuZCBNb3RpdmF0aW9uCisKKyAgICB3aWMgaXMgbWVhbnQgdG8gYmUgYSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IHN0YW5kYWxvbmUgdXRpbGl0eQorICAgIHRoYXQgaW5pdGlhbGx5IHByb3ZpZGVzIGVhc2llci10by11c2UgYW5kIG1vcmUgZmxleGlibGUKKyAgICByZXBsYWNlbWVudHMgZm9yIGEgY291cGxlIGJpdHMgb2YgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBpbgorICAgIG9lLWNvcmU6IGRpcmVjdGRpc2suYmJjbGFzcyBhbmQgbWtlZmlkaXNrLnNoLiAgVGhlIGRpZmZlcmVuY2UKKyAgICBiZXR3ZWVuIHdpYyBhbmQgdGhvc2UgZXhhbXBsZXMgaXMgdGhhdCB3aXRoIHdpYyB0aGUgZnVuY3Rpb25hbGl0eQorICAgIG9mIHRob3NlIHNjcmlwdHMgaXMgaW1wbGVtZW50ZWQgYnkgYSBnZW5lcmFsLXB1cnBvc2UgcGFydGl0aW9uaW5nCisgICAgJ2xhbmd1YWdlJyBiYXNlZCBvbiBSZWRoYXQga2lja3N0YXJ0IHN5bnRheCkuCisKKyAgICBUaGUgaW5pdGlhbCBtb3RpdmF0aW9uIGFuZCBkZXNpZ24gY29uc2lkZXJhdGlvbnMgdGhhdCBsZWFkIHRvIHRoZQorICAgIGN1cnJlbnQgdG9vbCBhcmUgZGVzY3JpYmVkIGV4aGF1c3RpdmVseSBpbiBZb2N0byBCdWcgIzM4NDcKKyAgICAoaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQ3KS4KKworICBJbXBsZW1lbnRhdGlvbiBhbmQgRXhhbXBsZXMKKworICAgIHdpYyBjYW4gYmUgdXNlZCBpbiB0d28gZGlmZmVyZW50IG1vZGVzLCBkZXBlbmRpbmcgb24gaG93IG11Y2gKKyAgICBjb250cm9sIHRoZSB1c2VyIG5lZWRzIGluIHNwZWNpZnlpbmcgdGhlIE9wZW5lbWJlZGRlZCBidWlsZAorICAgIGFydGlmYWN0cyB0aGF0IHdpbGwgYmUgdXNlZCBpbiBjcmVhdGluZyB0aGUgaW1hZ2U6ICdyYXcnIGFuZAorICAgICdjb29rZWQnLgorCisgICAgSWYgdXNlZCBpbiAncmF3JyBtb2RlLCBhcnRpZmFjdHMgYXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHZpYQorICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgKHNlZSBleGFtcGxlIGJlbG93KS4KKworICAgIFRoZSBtb3JlIGVhc2lseSB1c2FibGUgJ2Nvb2tlZCcgbW9kZSB1c2VzIHRoZSBjdXJyZW50IE1BQ0hJTkUKKyAgICBzZXR0aW5nIGFuZCBhIHNwZWNpZmllZCBpbWFnZSBuYW1lIHRvIGF1dG9tYXRpY2FsbHkgbG9jYXRlIHRoZQorICAgIGFydGlmYWN0cyB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2UuCisKKyAgICBPRSBraWNrc3RhcnQgZmlsZXMgKC53a3MpIGNhbiBvZiBjb3Vyc2UgYmUgc3BlY2lmaWVkIGRpcmVjdGx5IG9uCisgICAgdGhlIGNvbW1hbmQtbGluZSwgYnV0IHRoZSB1c2VyIGNhbiBhbHNvIGNob29zZSBmcm9tIGEgc2V0IG9mCisgICAgJ2Nhbm5lZCcgLndrcyBmaWxlcyBhdmFpbGFibGUgdmlhIHRoZSAnd2ljIGxpc3QgaW1hZ2VzJyBjb21tYW5kCisgICAgKGV4YW1wbGUgYmVsb3cpLgorCisgICAgSW4gYW55IGNhc2UsIHRoZSBwcmVyZXF1aXNpdGUgZm9yIGdlbmVyYXRpbmcgYW55IGltYWdlIGlzIHRvIGhhdmUKKyAgICB0aGUgYnVpbGQgYXJ0aWZhY3RzIGFscmVhZHkgYXZhaWxhYmxlLiAgVGhlIGJlbG93IGV4YW1wbGVzIGFzc3VtZQorICAgIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGJ1aWxkIGEgJ2NvcmUtaW1hZ2UtbWluaW1hbCcgZm9yIGEgc3BlY2lmaWMKKyAgICBtYWNoaW5lIChmdXR1cmUgdmVyc2lvbnMgd29uJ3QgcmVxdWlyZSB0aGlzIHJlZHVuZGFudCBzdGVwLCBidXQKKyAgICBmb3Igbm93IHRoYXQncyB0eXBpY2FsbHkgaG93IGJ1aWxkIGFydGlmYWN0cyBnZXQgZ2VuZXJhdGVkKS4KKworICAgIFRoZSBvdGhlciBwcmVyZXF1aXNpdGUgaXMgdG8gc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudDoKKworICAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKworICAgIFRvIHN0YXJ0IG91dCB3aXRoLCB3ZSdsbCBnZW5lcmF0ZSBhbiBpbWFnZSBmcm9tIG9uZSBvZiB0aGUgY2FubmVkCisgICAgLndrcyBmaWxlcy4gIFRoZSBmb2xsb3dpbmcgZ2VuZXJhdGVzIGEgbGlzdCBvZiBhdmFpbGFpbGFibGUKKyAgICBpbWFnZXM6CisKKyAgICAgICQgd2ljIGxpc3QgaW1hZ2VzCisgICAgICAgIG1rZWZpZGlzayAgICAgICAgICAgICBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyAgICAgICAgZGlyZWN0ZGlzayAgICAgICAgICAgIENyZWF0ZSBhICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisKKyAgICBZb3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFueSBvZiB0aGUgYXZhaWxhYmxlIGltYWdlcyBieQorICAgIHR5cGluZyAnd2ljIGxpc3QgeHh4IGhlbHAnLCB3aGVyZSAneHh4JyBpcyBvbmUgb2YgdGhlIGltYWdlIG5hbWVzOgorCisgICAgICAkIHdpYyBsaXN0IG1rZWZpZGlzayBoZWxwCisKKyAgICBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlciBjYW4gZGlyZWN0bHkgZGQKKyAgICB0byBib290IG1lZGlhLgorCisgICAgQXQgYW55IHRpbWUsIHlvdSBjYW4gZ2V0IGhlbHAgb24gdGhlICd3aWMnIGNvbW1hbmQgb3IgYW55CisgICAgc3ViY29tbWFuZCAoY3VycmVudGx5ICdsaXN0JyBhbmQgJ2NyZWF0ZScpLiAgRm9yIGluc3RhbmNlLCB0byBnZXQKKyAgICB0aGUgZGVzY3JpcHRpb24gb2YgJ3dpYyBjcmVhdGUnIGNvbW1hbmQgYW5kIGl0cyBwYXJhbWV0ZXJzOgorCisgICAgICAkIHdpYyBjcmVhdGUKKworICAgICAgIFVzYWdlOgorCisgICAgICAgQ3JlYXRlIGEgbmV3IE9wZW5FbWJlZGRlZCBpbWFnZQorCisgICAgICAgdXNhZ2U6IHdpYyBjcmVhdGUgPHdrcyBmaWxlIG9yIGltYWdlIG5hbWU+IFstbyA8RElSTkFNRT4gfCAuLi5dCisgICAgICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICAgICAgICAgIFstZSB8IC0taW1hZ2UtbmFtZV0gWy1zLCAtLXNraXAtYnVpbGQtY2hlY2tdIFstRCwgLS1kZWJ1Z10KKyAgICAgICAgICAgIFstciwgLS1yb290ZnMtZGlyXSBbLWIsIC0tYm9vdGltZy1kaXJdIFstaywgLS1rZXJuZWwtZGlyXQorICAgICAgICAgICAgWy1uLCAtLW5hdGl2ZS1zeXNyb290XSBbLWYsIC0tYnVpbGQtcm9vdGZzXQorCisgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gT3BlbkVtYmVkZGVkIGltYWdlIGJhc2VkIG9uIHRoZSAnT0UKKyAgICAgICBraWNrc3RhcnQgY29tbWFuZHMnIGZvdW5kIGluIHRoZSA8d2tzIGZpbGU+LgorCisgICAgICAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgaW1hZ2UgaW4gYSBkaXJlY3RvcnkKKyAgICAgICB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgICAgU2VlICd3aWMgaGVscCBjcmVhdGUnIGZvciBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucy4KKyAgICAgICAuLi4KKworICAgIEFzIG1lbnRpb25lZCBpbiB0aGUgY29tbWFuZCwgeW91IGNhbiBnZXQgZXZlbiBtb3JlIGRldGFpbGVkCisgICAgaW5mb3JtYXRpb24gYnkgYWRkaW5nICdoZWxwJyB0byB0aGUgYWJvdmU6CisKKyAgICAgICQgd2ljIGhlbHAgY3JlYXRlCisKKyAgICBTbywgdGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSBhbiBpbWFnZSBpcyB0byB1c2UgdGhlIC1lIG9wdGlvbgorICAgIHdpdGggYSBjYW5uZWQgLndrcyBmaWxlLiAgVG8gdXNlIHRoZSAtZSBvcHRpb24sIHlvdSBuZWVkIHRvCisgICAgc3BlY2lmeSB0aGUgaW1hZ2UgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYXJ0aWZhY3RzIGFuZCB5b3UgYWN0dWFsbHkKKyAgICBuZWVkIHRvIGhhdmUgdGhlIE1BQ0hJTkUgdXNlZCB0byBidWlsZCB0aGVtIHNwZWNpZmllZCBpbiB5b3VyCisgICAgbG9jYWwuY29uZiAodGhlc2UgcmVxdWlyZW1lbnRzIGFyZW4ndCBuZWNlc3NhcnkgaWYgeW91IGFyZW4ndAorICAgIHVzaW5nIHRoZSAtZSBvcHRpb25zLikgIEJlbG93LCB3ZSBnZW5lcmF0ZSBhIGRpcmVjdGRpc2sgaW1hZ2UsCisgICAgcG9pbnRpbmcgdGhlIHByb2Nlc3MgYXQgdGhlIGNvcmUtaW1hZ2UtbWluaW1hbCBhcnRpZmFjdHMgZm9yIHRoZQorICAgIGN1cnJlbnQgTUFDSElORToKKworICAgICAgJCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsCisKKyAgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgICBEb25lLgorCisgICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL2RpcmVjdGRpc2stMjAxMzA5MjUyMzUwLXNkYS5kaXJlY3QKKworICAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisKKyAgICAgIFJPT1RGU19ESVI6ICAgICAgLi4uCisgICAgICBCT09USU1HX0RJUjogICAgIC4uLgorICAgICAgS0VSTkVMX0RJUjogICAgICAuLi4KKyAgICAgIE5BVElWRV9TWVNST09UOiAgLi4uCisKKyAgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAgIC4uLi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcworCisgICAgVGhlIG91dHB1dCBzaG93cyB0aGUgbmFtZSBhbmQgbG9jYXRpb24gb2YgdGhlIGltYWdlIGNyZWF0ZWQsIGFuZAorICAgIHNvIHRoYXQgeW91IGtub3cgZXhhY3RseSB3aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbWFnZSwgZWFjaAorICAgIG9mIHRoZSBhcnRpZmFjdHMgYW5kIHRoZSBraWNrc3RhcnQgZmlsZSB1c2VkLgorCisgICAgU2ltaWxhcmx5LCB5b3UgY2FuIGNyZWF0ZSBhICdta2VmaWRpc2snIGltYWdlIGluIHRoZSBzYW1lIHdheQorICAgIChub3RpY2UgdGhhdCB0aGlzIGV4YW1wbGUgdXNlcyBhIGRpZmZlcmVudCBtYWNoaW5lIC0gYmVjYXVzZSBpdCdzCisgICAgdXNpbmcgdGhlIC1lIG9wdGlvbiwgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBNQUNISU5FIGluIHlvdXIKKyAgICBsb2NhbC5jb25mKToKKworICAgICAgJCB3aWMgY3JlYXRlIG1rZWZpZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgICBEb25lLgorCisgICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL21rZWZpZGlzay0yMDEzMDkyNjAwMjctc2RhLmRpcmVjdAorCisgICAgICAuLi4KKworICAgIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBlYXN5IHdheSBvdXQgYW5kIG1hbnVhbGx5CisgICAgc3BlY2lmaWVzIGVhY2ggYnVpbGQgYXJ0aWZhY3QsIGFsb25nIHdpdGggYSBub24tY2FubmVkIC53a3MgZmlsZSwKKyAgICBhbmQgYWxzbyB1c2VzIHRoZSAtbyBvcHRpb24gdG8gaGF2ZSB3aWMgY3JlYXRlIHRoZSBvdXRwdXQKKyAgICBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAvdmFyL3RtcC93aWM6CisKKyAgICAgICQgd2ljIGNyZWF0ZSAuL3Rlc3Qud2tzIC1vIC4vb3V0IC0tcm9vdGZzLWRpcgorICAgICAgdG1wL3dvcmsvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCisgICAgICAtLWJvb3RpbWctZGlyIHRtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9zaGFyZQorICAgICAgLS1rZXJuZWwtZGlyIHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQKKyAgICAgIC0tbmF0aXZlLXN5c3Jvb3QgdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgICAgICAgb3V0L2J1aWxkL3Rlc3QtMjAxNTA3MjExMzEzLXNkYS5kaXJlY3QKKworICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKyAgICAgICBST09URlNfRElSOiAgICAgICAgICAgICAgICAgICB0bXAvd29yay9xZW11eDg2XzY0LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgICBCT09USU1HX0RJUjogICAgICAgICAgICAgICAgICB0bXAvc3lzcm9vdHMvcWVtdXg4Ni02NC91c3Ivc2hhcmUKKyAgICAgICBLRVJORUxfRElSOiAgICAgICAgICAgICAgICAgICB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0CisgICAgICAgTkFUSVZFX1NZU1JPT1Q6ICAgICAgICAgICAgICAgdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgIC4vdGVzdC53a3MKKworICAgICBIZXJlIGlzIGEgY29udGVudCBvZiB0ZXN0LndrczoKKworICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CisgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworICAgICBib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0MyB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCIKKworCisgICAgRmluYWxseSwgaGVyZSdzIGFuIGV4YW1wbGUgb2YgdGhlIGFjdHVhbCBwYXJ0aXRpb24gbGFuZ3VhZ2UKKyAgICBjb21tYW5kcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBta2VmaWRpc2sgaW1hZ2UgaS5lLiB0aGVzZSBhcmUgdGhlCisgICAgY29udGVudHMgb2YgdGhlIG1rZWZpZGlzay53a3MgT0Uga2lja3N0YXJ0IGZpbGU6CisKKyAgICAgICMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorICAgICAgIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorICAgICAgIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworICAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZWZpIC0tYWN0aXZlCisKKyAgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybQorCisgICAgICBwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworICAgICAgYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgY29uc29sZT10dHlQQ0gwLDExNTIwMCIKKworICAgIFlvdSBjYW4gZ2V0IGEgY29tcGxldGUgbGlzdGluZyBhbmQgZGVzY3JpcHRpb24gb2YgYWxsIHRoZQorICAgIGtpY2tzdGFydCBjb21tYW5kcyBhdmFpbGFibGUgZm9yIHVzZSBpbiAud2tzIGZpbGVzIGZyb20gJ3dpYyBoZWxwCisgICAga2lja3N0YXJ0Jy4KKyIiIgorCit3aWNfa2lja3N0YXJ0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHdpYyBraWNrc3RhcnQgLSB3aWMga2lja3N0YXJ0IHJlZmVyZW5jZQorCitERVNDUklQVElPTgorICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyB0aGUgZGVmaW5pdGl2ZSByZWZlcmVuY2UgdG8gdGhlIHdpYworICAgIGtpY2tzdGFydCBsYW5ndWFnZS4gIEl0IGFsc28gcHJvdmlkZXMgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbGlzdCBvZgorICAgIC0tc291cmNlIHBsdWdpbnMgYXZhaWxhYmxlIGZvciB1c2UgZnJvbSB0aGUgJ3BhcnQnIGNvbW1hbmQgKHNlZQorICAgIHRoZSAnUGxhdGZvcm0tc3BlY2lmaWMgUGx1Z2lucycgc2VjdGlvbiBiZWxvdykuCisKKyAgICBUaGUgY3VycmVudCB3aWMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgYmFzaWMga2lja3N0YXJ0CisgICAgcGFydGl0aW9uaW5nIGNvbW1hbmRzOiBwYXJ0aXRpb24gKG9yIHBhcnQgZm9yIHNob3J0KSBhbmQKKyAgICBib290bG9hZGVyLgorCisgICAgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Rpbmcgb2YgdGhlIGNvbW1hbmRzLCB0aGVpciBzeW50YXgsIGFuZAorICAgIG1lYW5pbmdzLiBUaGUgY29tbWFuZHMgYXJlIGJhc2VkIG9uIHRoZSBGZWRvcmEga2lja3N0YXJ0CisgICAgZG9jdW1lbnRhdGlvbiBidXQgd2l0aCBtb2RpZmljYXRpb25zIHRvIHJlZmxlY3Qgd2ljIGNhcGFiaWxpdGllcy4KKworICAgICAgaHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I3BhcnRfb3JfcGFydGl0aW9uCisgICAgICBodHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjYm9vdGxvYWRlcgorCisgIENvbW1hbmRzCisKKyAgICAqICdwYXJ0JyBvciAncGFydGl0aW9uJworCisgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBwYXJ0aXRpb24gb24gdGhlIHN5c3RlbSBhbmQgdXNlcyB0aGUKKyAgICAgICBmb2xsb3dpbmcgc3ludGF4OgorCisgICAgICAgICBwYXJ0IDxtb3VudHBvaW50PgorCisgICAgICAgVGhlIDxtb3VudHBvaW50PiBpcyB3aGVyZSB0aGUgcGFydGl0aW9uIHdpbGwgYmUgbW91bnRlZCBhbmQKKyAgICAgICBtdXN0IHRha2Ugb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisKKyAgICAgICAgIC88cGF0aD46IEZvciBleGFtcGxlOiAvLCAvdXNyLCBvciAvaG9tZQorCisgICAgICAgICBzd2FwOiBUaGUgcGFydGl0aW9uIHdpbGwgYmUgdXNlZCBhcyBzd2FwIHNwYWNlLgorCisgICAgICAgVGhlIGZvbGxvd2luZyBhcmUgc3VwcG9ydGVkICdwYXJ0JyBvcHRpb25zOgorCisgICAgICAgICAtLXNpemU6IFRoZSBtaW5pbXVtIHBhcnRpdGlvbiBzaXplLiBTcGVjaWZ5IGFuIGludGVnZXIgdmFsdWUKKyAgICAgICAgICAgICAgICAgc3VjaCBhcyA1MDAuIE11bHRpcGxpZXJzIGssIE0gYW5nIEcgY2FuIGJlIHVzZWQuIElmCisgICAgICAgICAgICAgICAgIG5vdCBzcGVjaWZpZWQsIHRoZSBzaXplIGlzIGluIE1CLgorICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdGhpcyBvcHRpb24gaWYgeW91IHVzZSAtLXNvdXJjZS4KKworICAgICAgICAgLS1zb3VyY2U6IFRoaXMgb3B0aW9uIGlzIGEgd2ljLXNwZWNpZmljIG9wdGlvbiB0aGF0IG5hbWVzIHRoZQorICAgICAgICAgICAgICAgICAgIHNvdXJjZSBvZiB0aGUgZGF0YSB0aGF0IHdpbGwgcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uLiAgVGhlIG1vc3QgY29tbW9uIHZhbHVlIGZvciB0aGlzIG9wdGlvbgorICAgICAgICAgICAgICAgICAgIGlzICdyb290ZnMnLCBidXQgY2FuIGJlIGFueSB2YWx1ZSB3aGljaCBtYXBzIHRvIGEKKyAgICAgICAgICAgICAgICAgICB2YWxpZCAnc291cmNlIHBsdWdpbicgKHNlZSAnd2ljIGhlbHAgcGx1Z2lucycpLgorCisgICAgICAgICAgICAgICAgICAgSWYgJy0tc291cmNlIHJvb3RmcycgaXMgdXNlZCwgaXQgdGVsbHMgdGhlIHdpYworICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGFzIGxhcmdlIGFzIG5lZWRlZAorICAgICAgICAgICAgICAgICAgIGFuZCB0byBmaWxsIGl0IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBwb2ludGVkIHRvIGJ5IHRoZSAnLXInIHdpYyBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgICAgICAgICBvcHRpb24gKG9yIHRoZSBlcXVpdmFsZW50IHJvb3RmcyBkZXJpdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgJy1lJyBjb21tYW5kLWxpbmUgb3B0aW9uKS4gIFRoZSBmaWxlc3lzdGVtIHR5cGUKKyAgICAgICAgICAgICAgICAgICB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHBhcnRpdGlvbiBpcyBkcml2ZW4KKyAgICAgICAgICAgICAgICAgICBieSB0aGUgdmFsdWUgb2YgdGhlIC0tZnN0eXBlIG9wdGlvbiBzcGVjaWZpZWQgZm9yCisgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbiAoc2VlIC0tZnN0eXBlIGJlbG93KS4KKworICAgICAgICAgICAgICAgICAgIElmIC0tc291cmNlIDxwbHVnaW4tbmFtZT4nIGlzIHVzZWQsIGl0IHRlbGxzIHRoZQorICAgICAgICAgICAgICAgICAgIHdpYyBjb21tYW5kIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhcyBsYXJnZSBhcworICAgICAgICAgICAgICAgICAgIG5lZWRlZCBhbmQgdG8gZmlsbCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgcGx1Z2luIG5hbWUgdXNpbmcgdGhlIGRhdGEgcG9pbnRlZCB0byBieSB0aGUgJy1yJworICAgICAgICAgICAgICAgICAgIHdpYyBjb21tYW5kLWxpbmUgb3B0aW9uIChvciB0aGUgZXF1aXZhbGVudCByb290ZnMKKyAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gdGhlICctZScgY29tbWFuZC1saW5lIG9wdGlvbikuCisgICAgICAgICAgICAgICAgICAgRXhhY3RseSB3aGF0IHRob3NlIGNvbnRlbnRzIGFuZCBmaWxlc3lzdGVtIHR5cGUgZW5kCisgICAgICAgICAgICAgICAgICAgdXAgYmVpbmcgYXJlIGRlcGVuZGVudCBvbiB0aGUgZ2l2ZW4gcGx1Z2luCisgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgICAgICAgICAgICBJZiAtLXNvdXJjZSBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSB3aWMgY29tbWFuZAorICAgICAgICAgICAgICAgICAgIHdpbGwgY3JlYXRlIGVtcHR5IHBhcnRpdGlvbi4gLS1zaXplIHBhcmFtZXRlciBoYXMKKyAgICAgICAgICAgICAgICAgICB0byBiZSB1c2VkIHRvIHNwZWNpZnkgc2l6ZSBvZiBlbXB0eSBwYXJ0aXRpb24uCisKKyAgICAgICAgIC0tb25kaXNrIG9yIC0tb25kcml2ZTogRm9yY2VzIHRoZSBwYXJ0aXRpb24gdG8gYmUgY3JlYXRlZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBhcnRpY3VsYXIgZGlzay4KKworICAgICAgICAgLS1mc3R5cGU6IFNldHMgdGhlIGZpbGUgc3lzdGVtIHR5cGUgZm9yIHRoZSBwYXJ0aXRpb24uICBUaGVzZQorICAgICAgICAgICBhcHBseSB0byBwYXJ0aXRpb25zIGNyZWF0ZWQgdXNpbmcgJy0tc291cmNlIHJvb3RmcycgKHNlZQorICAgICAgICAgICAtLXNvdXJjZSBhYm92ZSkuICBWYWxpZCB2YWx1ZXMgYXJlOgorCisgICAgICAgICAgICAgZXh0MgorICAgICAgICAgICAgIGV4dDMKKyAgICAgICAgICAgICBleHQ0CisgICAgICAgICAgICAgYnRyZnMKKyAgICAgICAgICAgICBzcXVhc2hmcworICAgICAgICAgICAgIHN3YXAKKworICAgICAgICAgLS1mc29wdGlvbnM6IFNwZWNpZmllcyBhIGZyZWUtZm9ybSBzdHJpbmcgb2Ygb3B0aW9ucyB0byBiZQorICAgICAgICAgICAgICAgICAgICAgIHVzZWQgd2hlbiBtb3VudGluZyB0aGUgZmlsZXN5c3RlbS4gVGhpcyBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSAvZXRjL2ZzdGFiIGZpbGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHN5c3RlbSBhbmQgc2hvdWxkIGJlIGVuY2xvc2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgc3RyaW5nIGlzCisgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHRzIi4KKworICAgICAgICAgLS1sYWJlbCBsYWJlbDogU3BlY2lmaWVzIHRoZSBsYWJlbCB0byBnaXZlIHRvIHRoZSBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBtYWRlIG9uIHRoZSBwYXJ0aXRpb24uIElmIHRoZSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBmaWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgbGFiZWwgaXMgY3JlYXRlZCBmb3IgdGhlIHBhcnRpdGlvbi4KKworICAgICAgICAgLS1hY3RpdmU6IE1hcmtzIHRoZSBwYXJ0aXRpb24gYXMgYWN0aXZlLgorCisgICAgICAgICAtLWFsaWduIChpbiBLQnl0ZXMpOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMgYW5kIHNheXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGEgcGFydGl0aW9uIG9uIGFuIHggS0J5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS4KKworICAgICAgICAgLS1uby10YWJsZTogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBTcGFjZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCBmb3IgdGhlIHBhcnRpdGlvbiBhbmQgaXQgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVkIGJ1dCBpdCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiB0YWJsZS4gSXQgbWF5IGJlIHVzZWZ1bCBmb3IKKyAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXJzLgorCisgICAgICAgICAtLWV4dHJhLXNwYWNlOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IGFkZHMgZXh0cmEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlIGFmdGVyIHRoZSBzcGFjZSBmaWxsZWQgYnkgdGhlIGNvbnRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwYXJ0aXRpb24uIFRoZSBmaW5hbCBzaXplIGNhbiBnbworICAgICAgICAgICAgICAgICAgICAgICAgYmV5b25kIHRoZSBzaXplIHNwZWNpZmllZCBieSAtLXNpemUuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCAxME1CLgorCisgICAgICAgICAtLW92ZXJoZWFkLWZhY3RvcjogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBwYXJ0aXRpb24gaXMgbXVsdGlwbGllZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmFjdG9yLiBJdCBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjMuCisKKyAgICAgICAgIC0tcGFydC10eXBlOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IHNwZWNpZmllcyBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgICB0eXBlIEdVSUQgZm9yIEdQVCBwYXJ0aXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcGFydGl0aW9uIHR5cGUgR1VJRFMgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HVUlEX1BhcnRpdGlvbl9UYWJsZSNQYXJ0aXRpb25fdHlwZV9HVUlEcworCisgICAgICAgICAtLXVzZS11dWlkOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IG1ha2VzIHdpYyB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgICAgICAgcmFuZG9tIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChHVUlEKSBmb3IgdGhlIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSBpdCBpbiBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24gdG8gc3BlY2lmeSByb290IHBhcnRpdGlvbi4KKworICAgICAgICAgLS11dWlkOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IHNwZWNpZmllcyBwYXJ0aXRpb24gVVVJRC4KKyAgICAgICAgICAgICAgICAgSXQncyB1c2VmdWwgaWYgcHJlY29uZmlndXJlZCBwYXJ0aXRpb24gVVVJRCBpcyBhZGRlZCB0byBrZXJuZWwgY29tbWFuZCBsaW5lCisgICAgICAgICAgICAgICAgIGluIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiBiZWZvcmUgcnVubmluZyB3aWMuIEluIHRoaXMgY2FzZSAud2tzIGZpbGUgY2FuCisgICAgICAgICAgICAgICAgIGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCB0byBzZXQgcHJlY29uZmlndXJlZCBwYXJpdGlvbiBVVUlEIHVzaW5nIHRoaXMgb3B0aW9uLgorCisgICAgKiBib290bG9hZGVyCisKKyAgICAgIFRoaXMgY29tbWFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB2YXJpb3VzIGJvb3Rsb2FkZXIKKyAgICAgIG9wdGlvbnMuICBUaGUgZm9sbG93aW5nIGFyZSBzdXBwb3J0ZWQgJ2Jvb3Rsb2FkZXInIG9wdGlvbnM6CisKKyAgICAgICAgLS10aW1lb3V0OiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICBib290bG9hZGVyIHRpbWVzIG91dCBhbmQgYm9vdHMgdGhlIGRlZmF1bHQgb3B0aW9uLgorCisgICAgICAgIC0tYXBwZW5kOiBTcGVjaWZpZXMga2VybmVsIHBhcmFtZXRlcnMuIFRoZXNlIHdpbGwgYmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXIgY29tbWFuZC1saW5lIC0gZm9yIGV4YW1wbGUsIHRoZSBzeXNsaW51eAorICAgICAgICAgICAgICAgICAgQVBQRU5EIG9yIGdydWIga2VybmVsIGNvbW1hbmQgbGluZS4KKworICAgICAgTm90ZSB0aGF0IGJvb3Rsb2FkZXIgZnVuY3Rpb25hbGl0eSBhbmQgYm9vdCBwYXJ0aXRpb25zIGFyZQorICAgICAgaW1wbGVtZW50ZWQgYnkgdGhlIHZhcmlvdXMgLS1zb3VyY2UgcGx1Z2lucyB0aGF0IGltcGxlbWVudAorICAgICAgYm9vdGxvYWRlciBmdW5jdGlvbmFsaXR5OyB0aGUgYm9vdGxvYWRlciBjb21tYW5kIGVzc2VudGlhbGx5CisgICAgICBwcm92aWRlcyBhIG1lYW5zIG9mIG1vZGlmeWluZyBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24uCisiIiIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvYmFzZWltYWdlci5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9iYXNlaW1hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYmU5NDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvYmFzZWltYWdlci5weQpAQCAtMCwwICsxLDE5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgUmVkIEhhdCAgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBDcmVhdG9yRXJyb3IKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKKworY2xhc3MgQmFzZUltYWdlQ3JlYXRvcihvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGltYWdlIGNyZWF0aW9uLgorCisgICAgQmFzZUltYWdlQ3JlYXRvciBpcyB0aGUgc2ltcGxlc3QgY3JlYXRvciBjbGFzcyBhdmFpbGFibGU7IGl0IHdpbGwKKyAgICBjcmVhdGUgYSBzeXN0ZW0gaW1hZ2UgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBraWNrc3RhcnQgZmlsZS4KKworICAgIGUuZy4KKworICAgICAgaW1wb3J0IHdpYy5pbWdjcmVhdGUgYXMgaW1nY3JlYXRlCisgICAgICBrcyA9IGltZ2NyZWF0ZS5yZWFkX2tpY2tzdGFydCgiZm9vLmtzIikKKyAgICAgIGltZ2NyZWF0ZS5JbWFnZUNyZWF0b3Ioa3MsICJmb28iKS5jcmVhdGUoKQorICAgICIiIgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlb3B0cz1Ob25lKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbiBJbWFnZUNyZWF0b3IgaW5zdGFuY2UuCisKKyAgICAgICAga3MgLS0gYSBweWtpY2tzdGFydC5LaWNrc3RhcnRQYXJzZXIgaW5zdGFuY2U7IHRoaXMgaW5zdGFuY2Ugd2lsbCBiZQorICAgICAgICAgICAgICB1c2VkIHRvIGRyaXZlIHRoZSBpbnN0YWxsIGJ5IGUuZy4gcHJvdmlkaW5nIHRoZSBsaXN0IG9mIHBhY2thZ2VzCisgICAgICAgICAgICAgIHRvIGJlIGluc3RhbGxlZCwgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGFuZCAlcG9zdCBzY3JpcHRzCisKKyAgICAgICAgbmFtZSAtLSBhIG5hbWUgZm9yIHRoZSBpbWFnZTsgdXNlZCBmb3IgZS5nLiBpbWFnZSBmaWxlbmFtZXMgb3IKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGxhYmVscworICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9fYnVpbGRkaXIgPSBOb25lCisKKyAgICAgICAgc2VsZi5rcyA9IE5vbmUKKyAgICAgICAgc2VsZi5uYW1lID0gInRhcmdldCIKKyAgICAgICAgc2VsZi50bXBkaXIgPSAiL3Zhci90bXAvd2ljIgorICAgICAgICBzZWxmLndvcmtkaXIgPSAiL3Zhci90bXAvd2ljL2J1aWxkIgorCisgICAgICAgICMgc2V0dXAgdG1wZnMgdG1wZGlyIHdoZW4gZW5hYmxldG1wZnMgaXMgVHJ1ZQorICAgICAgICBzZWxmLmVuYWJsZXRtcGZzID0gRmFsc2UKKworICAgICAgICBpZiBjcmVhdGVvcHRzOgorICAgICAgICAgICAgIyBNYXBwaW5nIHRhYmxlIGZvciB2YXJpYWJsZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKyAgICAgICAgICAgIG9wdG1hcCA9IHsib3V0ZGlyIiA6ICJkZXN0ZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyB1cGRhdGUgc2V0dGluZyBmcm9tIGNyZWF0ZW9wdHMKKyAgICAgICAgICAgIGZvciBrZXkgaW4gY3JlYXRlb3B0cy5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYga2V5IGluIG9wdG1hcDoKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0bWFwW2tleV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBrZXkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG9wdGlvbiwgY3JlYXRlb3B0c1trZXldKQorCisgICAgICAgICAgICBzZWxmLmRlc3RkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5leHBhbmR1c2VyKHNlbGYuZGVzdGRpcikpCisKKyAgICAgICAgc2VsZi5fZGVwX2NoZWNrcyA9IFsibHMiLCAiYmFzaCIsICJjcCIsICJlY2hvIl0KKworICAgICAgICAjIE91dHB1dCBpbWFnZSBmaWxlIG5hbWVzCisgICAgICAgIHNlbGYub3V0aW1hZ2UgPSBbXQorCisgICAgICAgICMgTm8ga3MgcHJvdmlkZWQgd2hlbiBjYWxsZWQgYnkgY29udmVydG9yLCBzbyBza2lwIHRoZSBkZXBlbmRlbmN5IGNoZWNrCisgICAgICAgIGlmIHNlbGYua3M6CisgICAgICAgICAgICAjIElmIHdlIGhhdmUgYnRyZnMgcGFydGl0aW9uIHdlIG5lZWQgdG8gY2hlY2sgbmVjZXNzYXJ5IHRvb2xzCisgICAgICAgICAgICBmb3IgcGFydCBpbiBzZWxmLmtzLmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgcGFydC5mc3R5cGUgYW5kIHBhcnQuZnN0eXBlID09ICJidHJmcyI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlcF9jaGVja3MuYXBwZW5kKCJta2ZzLmJ0cmZzIikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgc3BlY2lmaWVkIHRtcGRpciBhbmQgY2FjaGVkaXIgZXhpc3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYudG1wZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYudG1wZGlyKQorCisKKyAgICAjCisgICAgIyBIb29rcyBmb3Igc3ViY2xhc3NlcworICAgICMKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHBhcnRpdGlvbnMgZm9yIHRoZSBkaXNrIGltYWdlKHMpCisKKyAgICAgICAgVGhpcyBpcyB0aGUgaG9vayB3aGVyZSBzdWJjbGFzc2VzIG1heSBjcmVhdGUgdGhlIHBhcnRpdGlvbnMKKyAgICAgICAgdGhhdCB3aWxsIGJlIGFzc2VtYmxlZCBpbnRvIGRpc2sgaW1hZ2UocykuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiVW5kbyBhbnl0aGluZyBwZXJmb3JtZWQgaW4gX2NyZWF0ZSgpLgorCisgICAgICAgIFRoaXMgaXMgdGhlIGhvb2sgd2hlcmUgc3ViY2xhc3NlcyBtdXN0IHVuZG8gYW55dGhpbmcgd2hpY2ggd2FzCisgICAgICAgIGRvbmUgaW4gX2NyZWF0ZSgpLgorCisgICAgICAgIFRoZXJlIGlzIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgICMKKyAgICAjIEFjdHVhbCBpbXBsZW1lbnRhdGlvbgorICAgICMKKyAgICBkZWYgX19lbnN1cmVfYnVpbGRkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9fYnVpbGRkaXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYud29ya2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgImJ1aWxkIikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtkaXIpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYud29ya2RpcikKKyAgICAgICAgICAgIHNlbGYuX19idWlsZGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXNlbGYud29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSJpbWdjcmVhdGUtIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgQ3JlYXRvckVycm9yKCJGYWlsZWQgY3JlYXRlIGJ1aWxkIGRpcmVjdG9yeSBpbiAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi50bXBkaXIsIGVycikpCisKKyAgICBkZWYgX19zZXR1cF90bXBkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmVuYWJsZXRtcGZzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcnVubmVyLnNob3coJ21vdW50IC10IHRtcGZzIC1vIHNpemU9NEcgdG1wZnMgJXMnICUgc2VsZi53b3JrZGlyKQorCisgICAgZGVmIF9fY2xlYW5fdG1wZGlyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5lbmFibGV0bXBmczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJ1bm5lci5zaG93KCd1bW91bnQgLWwgJXMnICUgc2VsZi53b3JrZGlyKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHBhcnRpdGlvbnMgZm9yIHRoZSBkaXNrIGltYWdlKHMpCisKKyAgICAgICAgQ3JlYXRlIHRoZSBwYXJ0aXRpb25zIHRoYXQgd2lsbCBiZSBhc3NlbWJsZWQgaW50byBkaXNrCisgICAgICAgIGltYWdlKHMpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fX3NldHVwX3RtcGRpcigpCisgICAgICAgIHNlbGYuX19lbnN1cmVfYnVpbGRkaXIoKQorCisgICAgICAgIHNlbGYuX2NyZWF0ZSgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiVW5kbyBhbnl0aGluZyBwZXJmb3JtZWQgaW4gY3JlYXRlKCkuCisKKyAgICAgICAgTm90ZSwgbWFrZSBzdXJlIHRvIGNhbGwgdGhpcyBtZXRob2Qgb25jZSBmaW5pc2hlZCB3aXRoIHRoZSBjcmVhdG9yCisgICAgICAgIGluc3RhbmNlIGluIG9yZGVyIHRvIGVuc3VyZSBubyBzdGFsZSBmaWxlcyBhcmUgbGVmdCBvbiB0aGUgaG9zdCBlLmcuOgorCisgICAgICAgICAgY3JlYXRvciA9IEltYWdlQ3JlYXRvcihrcywgbmFtZSkKKyAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgIGNyZWF0b3IuY3JlYXRlKCkKKyAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICBjcmVhdG9yLmNsZWFudXAoKQorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fX2J1aWxkZGlyOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl9fYnVpbGRkaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgc2VsZi5fX2J1aWxkZGlyID0gTm9uZQorCisgICAgICAgIHNlbGYuX19jbGVhbl90bXBkaXIoKQorCisKKyAgICBkZWYgcHJpbnRfb3V0aW1hZ2VfaW5mbyhzZWxmKToKKyAgICAgICAgbXNnID0gIlRoZSBuZXcgaW1hZ2UgY2FuIGJlIGZvdW5kIGhlcmU6XG4iCisgICAgICAgIHNlbGYub3V0aW1hZ2Uuc29ydCgpCisgICAgICAgIGZvciBwYXRoIGluIHNlbGYub3V0aW1hZ2U6CisgICAgICAgICAgICBtc2cgKz0gJyAgJXNcbicgJSBvcy5wYXRoLmFic3BhdGgocGF0aCkKKworICAgICAgICBtc2dlci5pbmZvKG1zZykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9kaXJlY3QucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NmEwZDEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5CkBAIC0wLDAgKzEsMzc4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnZGlyZWN0JyBpbWFnZSBjcmVhdG9yIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gd2ljIGltcG9ydCBraWNrc3RhcnQsIG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZnNfcmVsYXRlZAorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyCitmcm9tIHdpYy51dGlscy5wYXJ0aXRpb25lZGZzIGltcG9ydCBJbWFnZQorZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBDcmVhdG9yRXJyb3IsIEltYWdlRXJyb3IKK2Zyb20gd2ljLmltYWdlci5iYXNlaW1hZ2VyIGltcG9ydCBCYXNlSW1hZ2VDcmVhdG9yCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQKKworZGlza19tZXRob2RzID0geworICAgICJkb19pbnN0YWxsX2Rpc2siOk5vbmUsCit9CisKK2NsYXNzIERpcmVjdEltYWdlQ3JlYXRvcihCYXNlSW1hZ2VDcmVhdG9yKToKKyAgICAiIiIKKyAgICBJbnN0YWxscyBhIHN5c3RlbSBpbnRvIGEgZmlsZSBjb250YWluaW5nIGEgcGFydGl0aW9uZWQgZGlzayBpbWFnZS4KKworICAgIERpcmVjdEltYWdlQ3JlYXRvciBpcyBhbiBhZHZhbmNlZCBJbWFnZUNyZWF0b3Igc3ViY2xhc3M7IGFuIGltYWdlCisgICAgZmlsZSBpcyBmb3JtYXR0ZWQgd2l0aCBhIHBhcnRpdGlvbiB0YWJsZSwgZWFjaCBwYXJ0aXRpb24gY3JlYXRlZAorICAgIGZyb20gYSByb290ZnMgb3Igb3RoZXIgT3BlbkVtYmVkZGVkIGJ1aWxkIGFydGlmYWN0IGFuZCBkZCdlZCBpbnRvCisgICAgdGhlIHZpcnR1YWwgZGlzay4gVGhlIGRpc2sgaW1hZ2UgY2FuIHN1YnNlcXVlbnRseSBiZSBkZCdlZCBvbnRvCisgICAgbWVkaWEgYW5kIHVzZWQgb24gYWN0dWFsIGhhcmR3YXJlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9lX2J1aWxkZGlyLCBpbWFnZV9vdXRwdXRfZGlyLCByb290ZnNfZGlyLCBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QsIGNvbXByZXNzb3IsIGNyZWF0b3JvcHRzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6ZSBhIERpcmVjdEltYWdlQ3JlYXRvciBpbnN0YW5jZS4KKworICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgSW1hZ2VDcmVhdG9yLl9faW5pdF9fKCkKKyAgICAgICAgIiIiCisgICAgICAgIEJhc2VJbWFnZUNyZWF0b3IuX19pbml0X18oc2VsZiwgY3JlYXRvcm9wdHMpCisKKyAgICAgICAgc2VsZi5fX2ltYWdlID0gTm9uZQorICAgICAgICBzZWxmLl9fZGlza3MgPSB7fQorICAgICAgICBzZWxmLl9fZGlza19mb3JtYXQgPSAiZGlyZWN0IgorICAgICAgICBzZWxmLl9kaXNrX25hbWVzID0gW10KKyAgICAgICAgc2VsZi5wdGFibGVfZm9ybWF0ID0gc2VsZi5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIucHRhYmxlCisKKyAgICAgICAgc2VsZi5vZV9idWlsZGRpciA9IG9lX2J1aWxkZGlyCisgICAgICAgIGlmIGltYWdlX291dHB1dF9kaXI6CisgICAgICAgICAgICBzZWxmLnRtcGRpciA9IGltYWdlX291dHB1dF9kaXIKKyAgICAgICAgc2VsZi5yb290ZnNfZGlyID0gcm9vdGZzX2RpcgorICAgICAgICBzZWxmLmJvb3RpbWdfZGlyID0gYm9vdGltZ19kaXIKKyAgICAgICAgc2VsZi5rZXJuZWxfZGlyID0ga2VybmVsX2RpcgorICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290ID0gbmF0aXZlX3N5c3Jvb3QKKyAgICAgICAgc2VsZi5jb21wcmVzc29yID0gY29tcHJlc3NvcgorCisgICAgZGVmIF9fZ2V0X3BhcnRfbnVtKHNlbGYsIG51bSwgcGFydHMpOgorICAgICAgICAiIiJjYWxjdWxhdGUgdGhlIHJlYWwgcGFydGl0aW9uIG51bWJlciwgYWNjb3VudGluZyBmb3IgcGFydGl0aW9ucyBub3QKKyAgICAgICAgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZSBhbmQgbG9naWNhbCBwYXJ0aXRpb25zCisgICAgICAgICIiIgorICAgICAgICByZWFsbnVtID0gMAorICAgICAgICBmb3IgcG51bSwgcGFydCBpbiBlbnVtZXJhdGUocGFydHMsIDEpOgorICAgICAgICAgICAgaWYgbm90IHBhcnQubm9fdGFibGU6CisgICAgICAgICAgICAgICAgcmVhbG51bSArPSAxCisgICAgICAgICAgICBpZiBwbnVtID09IG51bToKKyAgICAgICAgICAgICAgICBpZiAgcGFydC5ub190YWJsZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJyBhbmQgcmVhbG51bSA+IDM6CisgICAgICAgICAgICAgICAgICAgICMgYWNjb3VudCBmb3IgbG9naWNhbCBwYXJ0aXRpb24gbnVtYmVyaW5nLCBleC4gc2RhNS4uCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsbnVtICsgMQorICAgICAgICAgICAgICAgIHJldHVybiByZWFsbnVtCisKKyAgICBkZWYgX3dyaXRlX2ZzdGFiKHNlbGYsIGltYWdlX3Jvb3Rmcyk6CisgICAgICAgICIiIm92ZXJyaWRlbiB0byBnZW5lcmF0ZSBmc3RhYiAodGVtcG9yYXJpbHkpIGluIHJvb3Rmcy4gVGhpcyBpcyBjYWxsZWQKKyAgICAgICAgZnJvbSBfY3JlYXRlLCBtYWtlIHN1cmUgaXQgZG9lc24ndCBnZXQgY2FsbGVkIGZyb20KKyAgICAgICAgQmFzZUltYWdlLmNyZWF0ZSgpCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaW1hZ2Vfcm9vdGZzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnN0YWJfcGF0aCA9IGltYWdlX3Jvb3RmcyArICIvZXRjL2ZzdGFiIgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZnN0YWJfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3aXRoIG9wZW4oZnN0YWJfcGF0aCkgYXMgZnN0YWI6CisgICAgICAgICAgICBmc3RhYl9saW5lcyA9IGZzdGFiLnJlYWRsaW5lcygpCisKKyAgICAgICAgaWYgc2VsZi5fdXBkYXRlX2ZzdGFiKGZzdGFiX2xpbmVzLCBzZWxmLl9nZXRfcGFydHMoKSk6CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoZnN0YWJfcGF0aCwgZnN0YWJfcGF0aCArICIub3JpZyIpCisKKyAgICAgICAgICAgIHdpdGggb3Blbihmc3RhYl9wYXRoLCAidyIpIGFzIGZzdGFiOgorICAgICAgICAgICAgICAgIGZzdGFiLndyaXRlbGluZXMoZnN0YWJfbGluZXMpCisKKyAgICAgICAgICAgIHJldHVybiBmc3RhYl9wYXRoCisKKyAgICBkZWYgX3VwZGF0ZV9mc3RhYihzZWxmLCBmc3RhYl9saW5lcywgcGFydHMpOgorICAgICAgICAiIiJBc3N1bWUgcGFydGl0aW9uIG9yZGVyIHNhbWUgYXMgaW4gd2tzIiIiCisgICAgICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgICAgICBmb3IgbnVtLCBwYXJ0IGluIGVudW1lcmF0ZShwYXJ0cywgMSk6CisgICAgICAgICAgICBwbnVtID0gc2VsZi5fX2dldF9wYXJ0X251bShudW0sIHBhcnRzKQorICAgICAgICAgICAgaWYgbm90IHBudW0gb3Igbm90IHBhcnQubW91bnRwb2ludCBcCisgICAgICAgICAgICAgICBvciBwYXJ0Lm1vdW50cG9pbnQgaW4gKCIvIiwgIi9ib290Iik6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBtbWMgZGV2aWNlIHBhcnRpdGlvbnMgYXJlIG5hbWVkIG1tY2JsazBwMSwgbW1jYmxrMHAyLi4KKyAgICAgICAgICAgIHByZWZpeCA9ICdwJyBpZiAgcGFydC5kaXNrLnN0YXJ0c3dpdGgoJ21tY2JsaycpIGVsc2UgJycKKyAgICAgICAgICAgIGRldmljZV9uYW1lID0gIi9kZXYvJXMlcyVkIiAlIChwYXJ0LmRpc2ssIHByZWZpeCwgcG51bSkKKworICAgICAgICAgICAgb3B0cyA9IHBhcnQuZnNvcHRzIGlmIHBhcnQuZnNvcHRzIGVsc2UgImRlZmF1bHRzIgorICAgICAgICAgICAgbGluZSA9ICJcdCIuam9pbihbZGV2aWNlX25hbWUsIHBhcnQubW91bnRwb2ludCwgcGFydC5mc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLCAiMCIsICIwIl0pICsgIlxuIgorCisgICAgICAgICAgICBmc3RhYl9saW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIHVwZGF0ZWQKKworICAgIGRlZiBzZXRfYm9vdGltZ19kaXIoc2VsZiwgYm9vdGltZ19kaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNjZXNzb3IgZm9yIGJvb3RpbWdfZGlyLCB0aGUgYWN0dWFsIGxvY2F0aW9uIHVzZWQgZm9yIHRoZSBzb3VyY2UKKyAgICAgICAgb2YgdGhlIGJvb3RpbWcuICBTaG91bGQgYmUgc2V0IGJ5IHNvdXJjZSBwbHVnaW5zIChvbmx5IGlmIHRoZXkKKyAgICAgICAgY2hhbmdlIHRoZSBkZWZhdWx0IGJvb3RpbWcgc291cmNlKSBzbyB0aGUgY29ycmVjdCBpbmZvIGdldHMKKyAgICAgICAgZGlzcGxheWVkIGZvciBwcmludF9vdXRpbWFnZV9pbmZvKCkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmJvb3RpbWdfZGlyID0gYm9vdGltZ19kaXIKKworICAgIGRlZiBfZ2V0X3BhcnRzKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5rczoKKyAgICAgICAgICAgIHJhaXNlIENyZWF0b3JFcnJvcigiRmFpbGVkIHRvIGdldCBwYXJ0aXRpb24gaW5mbywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGVhc2UgY2hlY2sgeW91ciBraWNrc3RhcnQgc2V0dGluZy4iKQorCisgICAgICAgICMgU2V0IGEgZGVmYXVsdCBwYXJ0aXRpb24gaWYgbm8gcGFydGl0aW9uIGlzIGdpdmVuIG91dAorICAgICAgICBpZiBub3Qgc2VsZi5rcy5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgcGFydHN0ciA9ICJwYXJ0IC8gLS1zaXplIDE5MDAgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMiCisgICAgICAgICAgICBhcmdzID0gcGFydHN0ci5zcGxpdCgpCisgICAgICAgICAgICBwYXJ0ID0gc2VsZi5rcy5oYW5kbGVyLnBhcnRpdGlvbi5wYXJzZShhcmdzWzE6XSkKKyAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIHNlbGYua3MuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgICAgICAgICBzZWxmLmtzLmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnMuYXBwZW5kKHBhcnQpCisKKyAgICAgICAgIyBwYXJ0aXRpb25zIGxpc3QgZnJvbSBraWNrc3RhcnQgZmlsZQorICAgICAgICByZXR1cm4ga2lja3N0YXJ0LmdldF9wYXJ0aXRpb25zKHNlbGYua3MpCisKKyAgICBkZWYgZ2V0X2Rpc2tfbmFtZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIGEgbGlzdCBvZiBwaHlzaWNhbCB0YXJnZXQgZGlzayBuYW1lcyAoZS5nLiwgJ3NkYicpIHdoaWNoCisgICAgICAgIHdpbGwgYmUgY3JlYXRlZC4gIiIiCisKKyAgICAgICAgaWYgc2VsZi5fZGlza19uYW1lczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kaXNrX25hbWVzCisKKyAgICAgICAgI2dldCBwYXJ0aXRpb24gaW5mbyBmcm9tIGtzIGhhbmRsZXIKKyAgICAgICAgcGFydHMgPSBzZWxmLl9nZXRfcGFydHMoKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJ0cykpOgorICAgICAgICAgICAgaWYgcGFydHNbaV0uZGlzazoKKyAgICAgICAgICAgICAgICBkaXNrX25hbWUgPSBwYXJ0c1tpXS5kaXNrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIENyZWF0b3JFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBkaXNrcywgbm8gLS1vbmRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIGluIHBhcnRpdGlvbiBsaW5lIG9mIGtzIGZpbGUiKQorCisgICAgICAgICAgICBpZiBwYXJ0c1tpXS5tb3VudHBvaW50IGFuZCBub3QgcGFydHNbaV0uZnN0eXBlOgorICAgICAgICAgICAgICAgIHJhaXNlIENyZWF0b3JFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBkaXNrcywgbm8gLS1mc3R5cGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIGZvciBwYXJ0aXRpb24gd2l0aCBtb3VudHBvaW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgaW4gdGhlIGtzIGZpbGUiKQorCisgICAgICAgICAgICBzZWxmLl9kaXNrX25hbWVzLmFwcGVuZChkaXNrX25hbWUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rpc2tfbmFtZXMKKworICAgIGRlZiBfZnVsbF9uYW1lKHNlbGYsIG5hbWUsIGV4dGVudGlvbik6CisgICAgICAgICIiIiBDb25zdHJ1Y3QgZnVsbCBmaWxlIG5hbWUgZm9yIGEgZmlsZSB3ZSBnZW5lcmF0ZS4gIiIiCisgICAgICAgIHJldHVybiAiJXMtJXMuJXMiICUgKHNlbGYubmFtZSwgbmFtZSwgZXh0ZW50aW9uKQorCisgICAgZGVmIF9mdWxsX3BhdGgoc2VsZiwgcGF0aCwgbmFtZSwgZXh0ZW50aW9uKToKKyAgICAgICAgIiIiIENvbnN0cnVjdCBmdWxsIGZpbGUgcGF0aCB0byBhIGZpbGUgd2UgZ2VuZXJhdGUuICIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIHNlbGYuX2Z1bGxfbmFtZShuYW1lLCBleHRlbnRpb24pKQorCisgICAgZGVmIGdldF9kZWZhdWx0X3NvdXJjZV9wbHVnaW4oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgZGVmYXVsdCBzb3VyY2UgcGx1Z2luIGkuZS4gdGhlIHBsdWdpbiB0aGF0J3MgY29uc3VsdGVkIGZvcgorICAgICAgICBvdmVyYWxsIGltYWdlIGdlbmVyYXRpb24gdGFza3Mgb3V0c2lkZSBvZiBhbnkgcGFydGljdWxhcgorICAgICAgICBwYXJ0aXRpb24uICBGb3IgY29udmVuaWVuY2UsIHdlIGp1c3QgaGFuZyBpdCBvZmYgdGhlCisgICAgICAgIGJvb3Rsb2FkZXIgaGFuZGxlciBzaW5jZSBpdCdzIHRoZSBvbmUgbm9uLXBhcnRpdGlvbiBvYmplY3QgaW4KKyAgICAgICAgYW55IHNldHVwLiAgQnkgZGVmYXVsdCB0aGUgZGVmYXVsdCBwbHVnaW4gaXMgc2V0IHRvIHRoZSBzYW1lCisgICAgICAgIHBsdWdpbiBhcyB0aGUgL2Jvb3QgcGFydGl0aW9uOyBzaW5jZSB3ZSBoYW5nIGl0IG9mZiB0aGUKKyAgICAgICAgYm9vdGxvYWRlciBvYmplY3QsIHRoZSBkZWZhdWx0IGNhbiBiZSBleHBsaWNpdGx5IHNldCB1c2luZyB0aGUKKyAgICAgICAgLS1zb3VyY2UgYm9vdGxvYWRlciBwYXJhbS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5zb3VyY2UKKworICAgICMKKyAgICAjIEFjdHVhbCBpbXBsZW1lbnRpb24KKyAgICAjCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBGb3IgJ3dpYycsIHdlIGFscmVhZHkgaGF2ZSBvdXIgYnVpbGQgYXJ0aWZhY3RzIC0gd2UganVzdCBjcmVhdGUKKyAgICAgICAgZmlsZXN5c3RlbXMgZnJvbSB0aGUgYXJ0aWZhY3RzIGRpcmVjdGx5IGFuZCBjb21iaW5lIHRoZW0gaW50bworICAgICAgICBhIHBhcnRpdGlvbmVkIGltYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFydHMgPSBzZWxmLl9nZXRfcGFydHMoKQorCisgICAgICAgIHNlbGYuX19pbWFnZSA9IEltYWdlKHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICAjIGFzIGEgY29udmVuaWVuY2UsIHNldCBzb3VyY2UgdG8gdGhlIGJvb3QgcGFydGl0aW9uIHNvdXJjZQorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGZvcmNpbmcgaXQgdG8gYmUgc2V0IHZpYSBib290bG9hZGVyIC0tc291cmNlCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuc291cmNlIGFuZCBwYXJ0Lm1vdW50cG9pbnQgPT0gIi9ib290IjoKKyAgICAgICAgICAgICAgICBzZWxmLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5zb3VyY2UgPSBwYXJ0LnNvdXJjZQorCisgICAgICAgIGZzdGFiX3BhdGggPSBzZWxmLl93cml0ZV9mc3RhYihzZWxmLnJvb3Rmc19kaXIuZ2V0KCJST09URlNfRElSIikpCisKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICAjIGdldCByb290ZnMgc2l6ZSBmcm9tIGJpdGJha2UgdmFyaWFibGUgaWYgaXQncyBub3Qgc2V0IGluIC5rcyBmaWxlCisgICAgICAgICAgICBpZiBub3QgcGFydC5zaXplOgorICAgICAgICAgICAgICAgICMgYW5kIGlmIHJvb3RmcyBuYW1lIGlzIHNwZWNpZmllZCBmb3IgdGhlIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgIGltYWdlX25hbWUgPSBwYXJ0LmdldF9yb290ZnMoKQorICAgICAgICAgICAgICAgIGlmIGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICMgQml0YmFrZSB2YXJpYWJsZSBST09URlNfU0laRSBpcyBjYWxjdWxhdGVkIGluCisgICAgICAgICAgICAgICAgICAgICMgSW1hZ2UuX2dldF9yb290ZnNfc2l6ZSBtZXRob2QgZnJvbSBtZXRhL2xpYi9vZS9pbWFnZS5weQorICAgICAgICAgICAgICAgICAgICAjIHVzaW5nIElNQUdFX1JPT1RGU19TSVpFLCBJTUFHRV9ST09URlNfQUxJR05NRU5ULAorICAgICAgICAgICAgICAgICAgICAjIElNQUdFX09WRVJIRUFEX0ZBQ1RPUiBhbmQgSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFCisgICAgICAgICAgICAgICAgICAgIHJzaXplX2JiID0gZ2V0X2JpdGJha2VfdmFyKCdST09URlNfU0laRScsIGltYWdlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHJzaXplX2JiOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IGZyb20gS2IgdG8gTWIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuc2l6ZSA9IGludChyb3VuZChmbG9hdChyc2l6ZV9iYikgLyAxMDI0LikpCisgICAgICAgICAgICAjIG5lZWQgdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtcyBpbiBvcmRlciB0byBnZXQgdGhlaXIKKyAgICAgICAgICAgICMgc2l6ZXMgYmVmb3JlIHdlIGNhbiBhZGQgdGhlbSBhbmQgZG8gdGhlIGxheW91dC4KKyAgICAgICAgICAgICMgSW1hZ2UuY3JlYXRlKCkgYWN0dWFsbHkgY2FsbHMgX19mb3JtYXRfZGlza3MoKSB0byBjcmVhdGUKKyAgICAgICAgICAgICMgdGhlIGRpc2sgaW1hZ2VzIGFuZCBjYXJ2ZSBvdXQgdGhlIHBhcnRpdGlvbnMsIHRoZW4KKyAgICAgICAgICAgICMgc2VsZi5hc3NlbWJsZSgpIGNhbGxzIEltYWdlLmFzc2VtYmxlKCkgd2hpY2ggY2FsbHMKKyAgICAgICAgICAgICMgX193cml0ZV9wYXJ0aXRpdGlvbigpIGZvciBlYWNoIHBhcnRpdGlvbiB0byBkZCB0aGUgZnMKKyAgICAgICAgICAgICMgaW50byB0aGUgcGFydGl0aW9ucy4KKyAgICAgICAgICAgIHBhcnQucHJlcGFyZShzZWxmLCBzZWxmLndvcmtkaXIsIHNlbGYub2VfYnVpbGRkaXIsIHNlbGYucm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb3RpbWdfZGlyLCBzZWxmLmtlcm5lbF9kaXIsIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKworICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmFkZF9wYXJ0aXRpb24oaW50KHBhcnQuc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmRpc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0Lm1vdW50cG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LnNvdXJjZV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5mc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNvcHRzPXBhcnQuZnNvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdD1wYXJ0LmFjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPXBhcnQuYWxpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub190YWJsZT1wYXJ0Lm5vX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydF90eXBlPXBhcnQucGFydF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZD1wYXJ0LnV1aWQpCisKKyAgICAgICAgaWYgZnN0YWJfcGF0aDoKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGZzdGFiX3BhdGggKyAiLm9yaWciLCBmc3RhYl9wYXRoKQorCisgICAgICAgIHNlbGYuX19pbWFnZS5sYXlvdXRfcGFydGl0aW9ucyhzZWxmLnB0YWJsZV9mb3JtYXQpCisKKyAgICAgICAgc2VsZi5fX2ltZ2RpciA9IHNlbGYud29ya2RpcgorICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygiQWRkaW5nIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCisgICAgICAgICAgICBkaXNrX29iaiA9IGZzX3JlbGF0ZWQuRGlza0ltYWdlKGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkKKyAgICAgICAgICAgIHNlbGYuX19kaXNrc1tkaXNrX25hbWVdID0gZGlza19vYmoKKyAgICAgICAgICAgIHNlbGYuX19pbWFnZS5hZGRfZGlzayhkaXNrX25hbWUsIGRpc2tfb2JqKQorCisgICAgICAgIHNlbGYuX19pbWFnZS5jcmVhdGUoKQorCisgICAgZGVmIGFzc2VtYmxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzZW1ibGUgcGFydGl0aW9ucyBpbnRvIGRpc2sgaW1hZ2UocykKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBkaXNrX25hbWUsIGRpc2sgaW4gc2VsZi5fX2ltYWdlLmRpc2tzLml0ZW1zKCk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBzZWxmLl9mdWxsX3BhdGgoc2VsZi5fX2ltZ2RpciwgZGlza19uYW1lLCAiZGlyZWN0IikKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJBc3NlbWJsaW5nIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCisgICAgICAgICAgICBzZWxmLl9faW1hZ2UuYXNzZW1ibGUoZnVsbF9wYXRoKQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluYWxpemUgdGhlIGRpc2sgaW1hZ2UuCisKKyAgICAgICAgRm9yIGV4YW1wbGUsIHByZXBhcmUgdGhlIGltYWdlIHRvIGJlIGJvb3RhYmxlIGJ5IGUuZy4KKyAgICAgICAgY3JlYXRpbmcgYW5kIGluc3RhbGxpbmcgYSBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgIiIiCisgICAgICAgIHNvdXJjZV9wbHVnaW4gPSBzZWxmLmdldF9kZWZhdWx0X3NvdXJjZV9wbHVnaW4oKQorICAgICAgICBpZiBzb3VyY2VfcGx1Z2luOgorICAgICAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcyhzb3VyY2VfcGx1Z2luLCBkaXNrX21ldGhvZHMpCisgICAgICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvdXJjZV9tZXRob2RzWyJkb19pbnN0YWxsX2Rpc2siXShkaXNrLCBkaXNrX25hbWUsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5rZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorICAgICAgICAjIENvbXByZXNzIHRoZSBpbWFnZQorICAgICAgICBpZiBzZWxmLmNvbXByZXNzb3I6CisgICAgICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJDb21wcmVzc2luZyBkaXNrICVzIHdpdGggJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrX25hbWUsIHNlbGYuY29tcHJlc3NvcikpCisgICAgICAgICAgICAgICAgZXhlY19jbWQoIiVzICVzIiAlIChzZWxmLmNvbXByZXNzb3IsIGZ1bGxfcGF0aCkpCisKKyAgICBkZWYgcHJpbnRfb3V0aW1hZ2VfaW5mbyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFByaW50IHRoZSBpbWFnZShzKSBhbmQgYXJ0aWZhY3RzIHVzZWQsIGZvciB0aGUgdXNlci4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZyA9ICJUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOlxuIgorCisgICAgICAgIHBhcnRzID0gc2VsZi5fZ2V0X3BhcnRzKCkKKworICAgICAgICBmb3IgZGlza19uYW1lIGluIHNlbGYuX19pbWFnZS5kaXNrczoKKyAgICAgICAgICAgIGV4dGVuc2lvbiA9ICJkaXJlY3QiICsgeyJnemlwIjogIi5neiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnppcDIiOiAiLmJ6MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieHoiOiAiLnh6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiOiAiIn0uZ2V0KHNlbGYuY29tcHJlc3NvcikKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsIGV4dGVuc2lvbikKKyAgICAgICAgICAgIG1zZyArPSAnICAlc1xuXG4nICUgZnVsbF9wYXRoCisKKyAgICAgICAgbXNnICs9ICdUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKTpcbicKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBpZiBwYXJ0LmdldF9yb290ZnMoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gJy8nOgorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICc6JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdWZmaXggPSAnWyIlcyJdOicgJSAocGFydC5tb3VudHBvaW50IG9yIHBhcnQubGFiZWwpCisgICAgICAgICAgICBtc2cgKz0gJyAgUk9PVEZTX0RJUiVzJXNcbicgJSAoc3VmZml4LmxqdXN0KDIwKSwgcGFydC5nZXRfcm9vdGZzKCkpCisKKyAgICAgICAgbXNnICs9ICcgIEJPT1RJTUdfRElSOiAgICAgICAgICAgICAgICAgICVzXG4nICUgc2VsZi5ib290aW1nX2RpcgorICAgICAgICBtc2cgKz0gJyAgS0VSTkVMX0RJUjogICAgICAgICAgICAgICAgICAgJXNcbicgJSBzZWxmLmtlcm5lbF9kaXIKKyAgICAgICAgbXNnICs9ICcgIE5BVElWRV9TWVNST09UOiAgICAgICAgICAgICAgICVzXG4nICUgc2VsZi5uYXRpdmVfc3lzcm9vdAorCisgICAgICAgIG1zZ2VyLmluZm8obXNnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvb3RkZXYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBHZXQgcm9vdCBkZXZpY2UgbmFtZSB0byB1c2UgYXMgYSAncm9vdCcgcGFyYW1ldGVyCisgICAgICAgIGluIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKKyAgICAgICAgQXNzdW1lIHBhcnRpdGlvbiBvcmRlciBzYW1lIGFzIGluIHdrcworICAgICAgICAiIiIKKyAgICAgICAgcGFydHMgPSBzZWxmLl9nZXRfcGFydHMoKQorICAgICAgICBmb3IgbnVtLCBwYXJ0IGluIGVudW1lcmF0ZShwYXJ0cywgMSk6CisgICAgICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gIi8iOgorICAgICAgICAgICAgICAgIGlmIHBhcnQudXVpZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQQVJUVVVJRD0lcyIgJSBwYXJ0LnV1aWQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSAncCcgaWYgcGFydC5kaXNrLnN0YXJ0c3dpdGgoJ21tY2JsaycpIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgcG51bSA9IHNlbGYuX19nZXRfcGFydF9udW0obnVtLCBwYXJ0cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIvZGV2LyVzJXMlLWQiICUgKHBhcnQuZGlzaywgc3VmZml4LCBwbnVtKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fX2ltYWdlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmNsZWFudXAoKQorICAgICAgICAgICAgZXhjZXB0IEltYWdlRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCIlcyIgJSBlcnIpCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWIwZTUxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAwNyBSZWQgSGF0LCBJbmMuCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zLCBzeXMsIHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN0cmluZworCitpbXBvcnQgcHlraWNrc3RhcnQuc2VjdGlvbnMgYXMga3NzZWN0aW9ucworaW1wb3J0IHB5a2lja3N0YXJ0LmNvbW1hbmRzIGFzIGtzY29tbWFuZHMKK2ltcG9ydCBweWtpY2tzdGFydC5jb25zdGFudHMgYXMga3Njb25zdGFudHMKK2ltcG9ydCBweWtpY2tzdGFydC5lcnJvcnMgYXMga3NlcnJvcnMKK2ltcG9ydCBweWtpY2tzdGFydC5wYXJzZXIgYXMga3NwYXJzZXIKK2ltcG9ydCBweWtpY2tzdGFydC52ZXJzaW9uIGFzIGtzdmVyc2lvbgorZnJvbSBweWtpY2tzdGFydC5oYW5kbGVycy5jb250cm9sIGltcG9ydCBjb21tYW5kTWFwCitmcm9tIHB5a2lja3N0YXJ0LmhhbmRsZXJzLmNvbnRyb2wgaW1wb3J0IGRhdGFNYXAKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZXJyb3JzLCBtaXNjLCBydW5uZXIsIGZzX3JlbGF0ZWQgYXMgZnMKK2Zyb20gY3VzdG9tX2NvbW1hbmRzIGltcG9ydCB3aWNib290LCBwYXJ0aXRpb24KKworZGVmIHJlYWRfa2lja3N0YXJ0KHBhdGgpOgorICAgICIiIlBhcnNlIGEga2lja3N0YXJ0IGZpbGUgYW5kIHJldHVybiBhIEtpY2tzdGFydFBhcnNlciBpbnN0YW5jZS4KKworICAgIFRoaXMgaXMgYSBzaW1wbGUgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIHBhdGggdG8gYSBraWNrc3RhcnQgZmlsZSwKKyAgICBwYXJzZXMgaXQgYW5kIHJldHVybnMgYSBweWtpY2tzdGFydCBLaWNrc3RhcnRQYXJzZXIgaW5zdGFuY2Ugd2hpY2ggY2FuCisgICAgYmUgdGhlbiBwYXNzZWQgdG8gYW4gSW1hZ2VDcmVhdG9yIGNvbnN0cnVjdG9yLgorCisgICAgSWYgYW4gZXJyb3Igb2NjdXJzLCBhIENyZWF0b3JFcnJvciBleGNlcHRpb24gaXMgdGhyb3duLgorICAgICIiIgorCisgICAgI3ZlcnNpb24gPSBrc3ZlcnNpb24ubWFrZVZlcnNpb24oKQorICAgICNrcyA9IGtzcGFyc2VyLktpY2tzdGFydFBhcnNlcih2ZXJzaW9uKQorCisgICAgdXNpbmdfdmVyc2lvbiA9IGtzdmVyc2lvbi5ERVZFTAorICAgIGNvbW1hbmRNYXBbdXNpbmdfdmVyc2lvbl1bImJvb3Rsb2FkZXIiXSA9IHdpY2Jvb3QuV2ljX0Jvb3Rsb2FkZXIKKyAgICBjb21tYW5kTWFwW3VzaW5nX3ZlcnNpb25dWyJwYXJ0Il0gPSBwYXJ0aXRpb24uV2ljX1BhcnRpdGlvbgorICAgIGNvbW1hbmRNYXBbdXNpbmdfdmVyc2lvbl1bInBhcnRpdGlvbiJdID0gcGFydGl0aW9uLldpY19QYXJ0aXRpb24KKyAgICBkYXRhTWFwW3VzaW5nX3ZlcnNpb25dWyJQYXJ0RGF0YSJdID0gcGFydGl0aW9uLldpY19QYXJ0RGF0YQorICAgIHN1cGVyY2xhc3MgPSBrc3ZlcnNpb24ucmV0dXJuQ2xhc3NGb3JWZXJzaW9uKHZlcnNpb249dXNpbmdfdmVyc2lvbikKKworICAgIGNsYXNzIEtTSGFuZGxlcnMoc3VwZXJjbGFzcyk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyY2xhc3MuX19pbml0X18oc2VsZiwgbWFwcGluZz1jb21tYW5kTWFwW3VzaW5nX3ZlcnNpb25dKQorCisgICAga2lja3N0YXJ0ID0ga3NwYXJzZXIuS2lja3N0YXJ0UGFyc2VyKEtTSGFuZGxlcnMoKSwgZXJyb3JzQXJlRmF0YWw9VHJ1ZSkKKworICAgIHRyeToKKyAgICAgICAga2lja3N0YXJ0LnJlYWRLaWNrc3RhcnQocGF0aCkKKyAgICBleGNlcHQgKGtzZXJyb3JzLktpY2tzdGFydFBhcnNlRXJyb3IsIGtzZXJyb3JzLktpY2tzdGFydEVycm9yKSwgZXJyOgorICAgICAgICBtc2dlci53YXJuaW5nKCJFcnJvcnMgb2NjdXJyZWQgd2hlbiBwYXJzaW5nIGtpY2tzdGFydCBmaWxlOiAlc1xuIiAlIHBhdGgpCisgICAgICAgIG1zZ2VyLmVycm9yKCIlcyIgJSBlcnIpCisKKyAgICByZXR1cm4ga2lja3N0YXJ0CisKK2RlZiBnZXRfaW1hZ2Vfc2l6ZShraWNrc3RhcnQsIGRlZmF1bHQ9Tm9uZSk6CisgICAgX19zaXplID0gMAorICAgIGZvciBwYXJ0IGluIGtpY2tzdGFydC5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gIi8iIGFuZCBwYXJ0LnNpemU6CisgICAgICAgICAgICBfX3NpemUgPSBwYXJ0LnNpemUKKyAgICBpZiBfX3NpemUgPiAwOgorICAgICAgICByZXR1cm4gaW50KF9fc2l6ZSkgKiAxMDI0TAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKK2RlZiBnZXRfaW1hZ2VfZnN0eXBlKGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBmb3IgcGFydCBpbiBraWNrc3RhcnQuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgaWYgcGFydC5tb3VudHBvaW50ID09ICIvIiBhbmQgcGFydC5mc3R5cGU6CisgICAgICAgICAgICByZXR1cm4gcGFydC5mc3R5cGUKKyAgICByZXR1cm4gZGVmYXVsdAorCitkZWYgZ2V0X2ltYWdlX2Zzb3B0cyhraWNrc3RhcnQsIGRlZmF1bHQ9Tm9uZSk6CisgICAgZm9yIHBhcnQgaW4ga2lja3N0YXJ0LmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgIGlmIHBhcnQubW91bnRwb2ludCA9PSAiLyIgYW5kIHBhcnQuZnNvcHRzOgorICAgICAgICAgICAgcmV0dXJuIHBhcnQuZnNvcHRzCisgICAgcmV0dXJuIGRlZmF1bHQKKworZGVmIGdldF90aW1lb3V0KGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBpZiBub3QgaGFzYXR0cihraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLCAidGltZW91dCIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIudGltZW91dCBpcyBOb25lOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIHJldHVybiBpbnQoa2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci50aW1lb3V0KQorCitkZWYgZ2V0X2tlcm5lbF9hcmdzKGtpY2tzdGFydCwgZGVmYXVsdD0icm8gcmQubGl2ZS5pbWFnZSIpOgorICAgIGlmIG5vdCBoYXNhdHRyKGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIsICJhcHBlbmRMaW5lIik6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgcmV0dXJuICIlcyAlcyIgJShkZWZhdWx0LCBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUpCisKK2RlZiBnZXRfbWVudV9hcmdzKGtpY2tzdGFydCwgZGVmYXVsdD0iIik6CisgICAgaWYgbm90IGhhc2F0dHIoa2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlciwgIm1lbnVzIik6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5tZW51cyBpbiAoTm9uZSwgIiIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIHJldHVybiAiJXMiICUga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5tZW51cworCitkZWYgZ2V0X2RlZmF1bHRfa2VybmVsKGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBpZiBub3QgaGFzYXR0cihraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLCAiZGVmYXVsdCIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIG5vdCBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLmRlZmF1bHQ6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgcmV0dXJuIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIuZGVmYXVsdAorCitkZWYgZ2V0X3BhcnRpdGlvbnMoa2lja3N0YXJ0KToKKyAgICByZXR1cm4ga2lja3N0YXJ0LmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnMKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YWU0MDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNyBAQAorZnJvbSBwYXJ0aXRpb24gaW1wb3J0IFdpY19QYXJ0aXRpb24KK2Zyb20gcGFydGl0aW9uIGltcG9ydCBXaWNfUGFydERhdGEKKworX19hbGxfXyA9ICgKKyAgICAiV2ljX1BhcnRpdGlvbiIsCisgICAgIldpY19QYXJ0RGF0YSIsCispCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3BhcnRpdGlvbi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvcGFydGl0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZTI1YTQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3BhcnRpdGlvbi5weQpAQCAtMCwwICsxLDUyNiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBPcGVuRW1iZWRkZWQgcGFydGl0aW9uIG9iamVjdCBkZWZpbml0aW9ucy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdXVpZAorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uVmFsdWVFcnJvcgorCitmcm9tIHB5a2lja3N0YXJ0LmNvbW1hbmRzLnBhcnRpdGlvbiBpbXBvcnQgRkM0X1BhcnREYXRhLCBGQzRfUGFydGl0aW9uCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBtc2dlciwgcGFyc2Vfc291cmNlcGFyYW1zCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgorCitwYXJ0aXRpb25fbWV0aG9kcyA9IHsKKyAgICAiZG9fc3RhZ2VfcGFydGl0aW9uIjpOb25lLAorICAgICJkb19wcmVwYXJlX3BhcnRpdGlvbiI6Tm9uZSwKKyAgICAiZG9fY29uZmlndXJlX3BhcnRpdGlvbiI6Tm9uZSwKK30KKworY2xhc3MgV2ljX1BhcnREYXRhKEZDNF9QYXJ0RGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkM0X1BhcnREYXRhLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDNF9QYXJ0RGF0YS5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzRfUGFydERhdGEuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmRlbGV0ZVJlbW92ZWRBdHRycygpCisgICAgICAgIHNlbGYuYWxpZ24gPSBrd2FyZ3MuZ2V0KCJhbGlnbiIsIE5vbmUpCisgICAgICAgIHNlbGYuZXh0b3B0cyA9IGt3YXJncy5nZXQoImV4dG9wdHMiLCBOb25lKQorICAgICAgICBzZWxmLnBhcnRfdHlwZSA9IGt3YXJncy5nZXQoInBhcnRfdHlwZSIsIE5vbmUpCisgICAgICAgIHNlbGYuc291cmNlID0ga3dhcmdzLmdldCgic291cmNlIiwgTm9uZSkKKyAgICAgICAgc2VsZi5zb3VyY2VwYXJhbXMgPSBrd2FyZ3MuZ2V0KCJzb3VyY2VwYXJhbXMiLCBOb25lKQorICAgICAgICBzZWxmLnJvb3RmcyA9IGt3YXJncy5nZXQoInJvb3Rmcy1kaXIiLCBOb25lKQorICAgICAgICBzZWxmLm5vX3RhYmxlID0ga3dhcmdzLmdldCgibm8tdGFibGUiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5leHRyYV9zcGFjZSA9IGt3YXJncy5nZXQoImV4dHJhLXNwYWNlIiwgIjEwTSIpCisgICAgICAgIHNlbGYub3ZlcmhlYWRfZmFjdG9yID0ga3dhcmdzLmdldCgib3ZlcmhlYWQtZmFjdG9yIiwgMS4zKQorICAgICAgICBzZWxmLl91c2VfdXVpZCA9IEZhbHNlCisgICAgICAgIHNlbGYudXVpZCA9IGt3YXJncy5nZXQoInV1aWQiLCBOb25lKQorICAgICAgICBzZWxmLnVzZV91dWlkID0ga3dhcmdzLmdldCgidXNlLXV1aWQiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zb3VyY2VfZmlsZSA9ICIiCisgICAgICAgIHNlbGYuc2l6ZSA9IDAKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBGQzRfUGFydERhdGEuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYuYWxpZ246CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWFsaWduPSVkIiAlIHNlbGYuYWxpZ24KKyAgICAgICAgaWYgc2VsZi5leHRvcHRzOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1leHRvcHRpb25zPSVzIiAlIHNlbGYuZXh0b3B0cworICAgICAgICBpZiBzZWxmLnBhcnRfdHlwZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcGFydC10eXBlPSVzIiAlIHNlbGYucGFydF90eXBlCisgICAgICAgIGlmIHNlbGYuc291cmNlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1zb3VyY2U9JXMiICUgc2VsZi5zb3VyY2UKKyAgICAgICAgICAgIGlmIHNlbGYuc291cmNlcGFyYW1zOgorICAgICAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc291cmNlcGFyYW1zPSVzIiAlIHNlbGYuc291cmNlcGFyYW1zCisgICAgICAgICAgICBpZiBzZWxmLnJvb3RmczoKKyAgICAgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXJvb3Rmcy1kaXI9JXMiICUgc2VsZi5yb290ZnMKKyAgICAgICAgaWYgc2VsZi5ub190YWJsZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbm8tdGFibGUiCisgICAgICAgIGlmIHNlbGYudXNlX3V1aWQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXVzZS11dWlkIgorICAgICAgICBpZiBzZWxmLnV1aWQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXV1aWQ9JXMiICUgc2VsZi51dWlkCisgICAgICAgIHJldHZhbCArPSAiIC0tZXh0cmEtc3BhY2U9JXMiICUgc2VsZi5leHRyYV9zcGFjZQorICAgICAgICByZXR2YWwgKz0gIiAtLW92ZXJoZWFkLWZhY3Rvcj0lZiIgJSBzZWxmLm92ZXJoZWFkX2ZhY3RvcgorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1c2VfdXVpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VzZV91dWlkCisKKyAgICBAdXNlX3V1aWQuc2V0dGVyCisgICAgZGVmIHVzZV91dWlkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fdXNlX3V1aWQgPSB2YWx1ZQorICAgICAgICBpZiB2YWx1ZSBhbmQgbm90IHNlbGYudXVpZDoKKyAgICAgICAgICAgIHNlbGYudXVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCisKKyAgICBkZWYgZ2V0X3Jvb3RmcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjZXNzb3IgZm9yIHJvb3RmcyBkaXIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJvb3RmcworCisgICAgZGVmIHNldF9yb290ZnMoc2VsZiwgcm9vdGZzKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjZXNzb3IgZm9yIGFjdHVhbCByb290ZnMgZGlyLCB3aGljaCBtdXN0IGJlIHNldCBieSBzb3VyY2UKKyAgICAgICAgcGx1Z2lucy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucm9vdGZzID0gcm9vdGZzCisKKyAgICBkZWYgZ2V0X3NpemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBY2Nlc3NvciBmb3IgcGFydGl0aW9uIHNpemUsIDAgb3IgLS1zaXplIGJlZm9yZSBzZXRfc2l6ZSgpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2l6ZQorCisgICAgZGVmIHNldF9zaXplKHNlbGYsIHNpemUpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNjZXNzb3IgZm9yIGFjdHVhbCBwYXJ0aXRpb24gc2l6ZSwgd2hpY2ggbXVzdCBiZSBzZXQgYnkgc291cmNlCisgICAgICAgIHBsdWdpbnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNpemUgPSBzaXplCisKKyAgICBkZWYgc2V0X3NvdXJjZV9maWxlKHNlbGYsIHNvdXJjZV9maWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjY2Vzc29yIGZvciBzb3VyY2VfZmlsZSwgdGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgcGFydGl0aW9uCisgICAgICAgIGltYWdlLCB3aGljaCBtdXN0IGJlIHNldCBieSBzb3VyY2UgcGx1Z2lucy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSBzb3VyY2VfZmlsZQorCisgICAgZGVmIGdldF9leHRyYV9ibG9ja19jb3VudChzZWxmLCBjdXJyZW50X2Jsb2Nrcyk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgLS1zaXplIHBhcmFtIGlzIHJlZmxlY3RlZCBpbiBzZWxmLnNpemUgKGluIGtCKSwgYW5kIHdlIGFscmVhZHkKKyAgICAgICAgaGF2ZSBjdXJyZW50X2Jsb2NrcyAoMWspIGJsb2NrcywgY2FsY3VsYXRlIGFuZCByZXR1cm4gdGhlCisgICAgICAgIG51bWJlciBvZiAoMWspIGJsb2NrcyB3ZSBuZWVkIHRvIGFkZCB0byBnZXQgdG8gLS1zaXplLCAwIGlmCisgICAgICAgIHdlJ3JlIGFscmVhZHkgdGhlcmUgb3IgYmV5b25kLgorICAgICAgICAiIiIKKyAgICAgICAgbXNnZXIuZGVidWcoIlJlcXVlc3RlZCBwYXJ0aXRpb24gc2l6ZSBmb3IgJXM6ICVkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYubW91bnRwb2ludCwgc2VsZi5zaXplKSkKKworICAgICAgICBpZiBub3Qgc2VsZi5zaXplOgorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICByZXF1ZXN0ZWRfYmxvY2tzID0gc2VsZi5zaXplCisKKyAgICAgICAgbXNnZXIuZGVidWcoIlJlcXVlc3RlZCBibG9ja3MgJWQsIGN1cnJlbnRfYmxvY2tzICVkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3RlZF9ibG9ja3MsIGN1cnJlbnRfYmxvY2tzKSkKKworICAgICAgICBpZiByZXF1ZXN0ZWRfYmxvY2tzID4gY3VycmVudF9ibG9ja3M6CisgICAgICAgICAgICByZXR1cm4gcmVxdWVzdGVkX2Jsb2NrcyAtIGN1cnJlbnRfYmxvY2tzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHByZXBhcmUoc2VsZiwgY3JlYXRvciwgY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgaW5kaXZpZHVhbCBwYXJ0aXRpb25zLCBkZXBlbmRpbmcgb24KKyAgICAgICAgcGFydGl0aW9uIGNvbW1hbmQgcGFyYW1ldGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc291cmNlcGFyYW1zX2RpY3QgPSB7fQorCisgICAgICAgIGlmIHNlbGYuc291cmNlcGFyYW1zOgorICAgICAgICAgICAgc2VsZi5zb3VyY2VwYXJhbXNfZGljdCA9IHBhcnNlX3NvdXJjZXBhcmFtcyhzZWxmLnNvdXJjZXBhcmFtcykKKworICAgICAgICBpZiBub3Qgc2VsZi5zb3VyY2U6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaXplOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJUaGUgJXMgcGFydGl0aW9uIGhhcyBhIHNpemUgb2YgemVyby4gIFBsZWFzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZnkgYSBub24temVybyAtLXNpemUgZm9yIHRoYXQgcGFydGl0aW9uLiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb3VudHBvaW50KQorICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUgYW5kIHNlbGYuZnN0eXBlID09ICJzd2FwIjoKKyAgICAgICAgICAgICAgICBzZWxmLnByZXBhcmVfc3dhcF9wYXJ0aXRpb24oY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgZWxpZiBzZWxmLmZzdHlwZToKKyAgICAgICAgICAgICAgICByb290ZnMgPSAiJXMvZnNfJXMuJXMuJXMiICUgKGNyX3dvcmtkaXIsIHNlbGYubGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5mc3R5cGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocm9vdGZzKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHJvb3RmcykKKyAgICAgICAgICAgICAgICBmb3IgcHJlZml4IGluICgiZXh0IiwgImJ0cmZzIiwgInZmYXQiLCAic3F1YXNoZnMiKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fIiArIHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZChyb290ZnMsIG9lX2J1aWxkZGlyLCBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSByb290ZnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwbHVnaW5zID0gcGx1Z2lubWdyLmdldF9zb3VyY2VfcGx1Z2lucygpCisKKyAgICAgICAgaWYgc2VsZi5zb3VyY2Ugbm90IGluIHBsdWdpbnM6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiVGhlICclcycgLS1zb3VyY2Ugc3BlY2lmaWVkIGZvciAlcyBkb2Vzbid0IGV4aXN0LlxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAiU2VlICd3aWMgbGlzdCBzb3VyY2UtcGx1Z2lucycgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUiCisgICAgICAgICAgICAgICAgICAgICAgICAiIC0tc291cmNlcy5cblx0U2VlICd3aWMgaGVscCBzb3VyY2UtcGx1Z2lucycgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZXRhaWxzIG9uIGFkZGluZyBhIG5ldyBzb3VyY2UgcGx1Z2luLiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5zb3VyY2UsIHNlbGYubW91bnRwb2ludCkpCisKKyAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcyhcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlLCBwYXJ0aXRpb25fbWV0aG9kcykKKyAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHNbImRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24iXShzZWxmLCBzZWxmLnNvdXJjZXBhcmFtc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHNbImRvX3N0YWdlX3BhcnRpdGlvbiJdKHNlbGYsIHNlbGYuc291cmNlcGFyYW1zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorICAgICAgICBzZWxmLl9zb3VyY2VfbWV0aG9kc1siZG9fcHJlcGFyZV9wYXJ0aXRpb24iXShzZWxmLCBzZWxmLnNvdXJjZXBhcmFtc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfcm9vdGZzX2Zyb21fZnNfaW1hZ2Uoc2VsZiwgY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBIYW5kbGUgYW4gYWxyZWFkeS1jcmVhdGVkIHBhcnRpdGlvbiBlLmcuIHh4eC5leHQzCisgICAgICAgICIiIgorICAgICAgICByb290ZnMgPSBvZV9idWlsZGRpcgorICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgcm9vdGZzCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgcm9vdGZzX3NpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIHNlbGYuc2l6ZSA9IHJvb3Rmc19zaXplCisgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSByb290ZnMKKworICAgIGRlZiBwcmVwYXJlX3Jvb3RmcyhzZWxmLCBjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIHJvb3RmcyBwYXJ0aXRpb24gaS5lLiBjcmVhdGUgYSBwYXJ0aXRpb24KKyAgICAgICAgYW5kIGZpbGwgaXQgZnJvbSBhIC9yb290ZnMgZGlyLgorCisgICAgICAgIEN1cnJlbnRseSBoYW5kbGVzIGV4dDIvMy80LCBidHJmcyBhbmQgdmZhdC4KKyAgICAgICAgIiIiCisgICAgICAgIHBfcHJlZml4ID0gb3MuZW52aXJvbi5nZXQoIlBTRVVET19QUkVGSVgiLCAiJXMvdXNyIiAlIG5hdGl2ZV9zeXNyb290KQorICAgICAgICBwX2xvY2Fsc3RhdGVkaXIgPSBvcy5lbnZpcm9uLmdldCgiUFNFVURPX0xPQ0FMU1RBVEVESVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvLi4vcHNldWRvIiAlIHJvb3Rmc19kaXIpCisgICAgICAgIHBfcGFzc3dkID0gb3MuZW52aXJvbi5nZXQoIlBTRVVET19QQVNTV0QiLCByb290ZnNfZGlyKQorICAgICAgICBwX25vc3ltbGlua2V4cCA9IG9zLmVudmlyb24uZ2V0KCJQU0VVRE9fTk9TWU1MSU5LRVhQIiwgIjEiKQorICAgICAgICBwc2V1ZG8gPSAiZXhwb3J0IFBTRVVET19QUkVGSVg9JXM7IiAlIHBfcHJlZml4CisgICAgICAgIHBzZXVkbyArPSAiZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPSVzOyIgJSBwX2xvY2Fsc3RhdGVkaXIKKyAgICAgICAgcHNldWRvICs9ICJleHBvcnQgUFNFVURPX1BBU1NXRD0lczsiICUgcF9wYXNzd2QKKyAgICAgICAgcHNldWRvICs9ICJleHBvcnQgUFNFVURPX05PU1lNTElOS0VYUD0lczsiICUgcF9ub3N5bWxpbmtleHAKKyAgICAgICAgcHNldWRvICs9ICIlcy91c3IvYmluL3BzZXVkbyAiICUgbmF0aXZlX3N5c3Jvb3QKKworICAgICAgICByb290ZnMgPSAiJXMvcm9vdGZzXyVzLiVzLiVzIiAlIChjcl93b3JrZGlyLCBzZWxmLmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5mc3R5cGUpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHJvb3Rmcyk6CisgICAgICAgICAgICBvcy5yZW1vdmUocm9vdGZzKQorCisgICAgICAgIGZvciBwcmVmaXggaW4gKCJleHQiLCAiYnRyZnMiLCAidmZhdCIsICJzcXVhc2hmcyIpOgorICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwgInByZXBhcmVfcm9vdGZzXyIgKyBwcmVmaXgpCisgICAgICAgICAgICAgICAgbWV0aG9kKHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG8pCisKKyAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZV9maWxlID0gcm9vdGZzCisKKyAgICAgICAgICAgICAgICAjIGdldCB0aGUgcm9vdGZzIHNpemUgaW4gdGhlIHJpZ2h0IHVuaXRzIGZvciBraWNrc3RhcnQgKGtCKQorICAgICAgICAgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSByb290ZnMKKyAgICAgICAgICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgICAgICAgICAgc2VsZi5zaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgcHJlcGFyZV9yb290ZnNfZXh0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgcHNldWRvKToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYW4gZXh0Mi8zLzQgcm9vdGZzIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGR1X2NtZCA9ICJkdSAta3MgJXMiICUgcm9vdGZzX2RpcgorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGFjdHVhbF9yb290ZnNfc2l6ZSA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmdldF9leHRyYV9ibG9ja19jb3VudChhY3R1YWxfcm9vdGZzX3NpemUpCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IHNlbGYuZXh0cmFfc3BhY2U6CisgICAgICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmV4dHJhX3NwYWNlCisKKyAgICAgICAgcm9vdGZzX3NpemUgPSBhY3R1YWxfcm9vdGZzX3NpemUgKyBleHRyYV9ibG9ja3MKKyAgICAgICAgcm9vdGZzX3NpemUgKj0gc2VsZi5vdmVyaGVhZF9mYWN0b3IKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBzZWxmLm1vdW50cG9pbnQsIHJvb3Rmc19zaXplKSkKKworICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTEwMjQgc2Vlaz0lZCBjb3VudD0wIGJzPTFrIiAlIFwKKyAgICAgICAgICAgIChyb290ZnMsIHJvb3Rmc19zaXplKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgZXh0cmFfaW1hZ2VjbWQgPSAiLWkgODE5MiIKKworICAgICAgICBsYWJlbF9zdHIgPSAiIgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1GICVzICVzICVzIC1kICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgZXh0cmFfaW1hZ2VjbWQsIHJvb3RmcywgbGFiZWxfc3RyLCByb290ZnNfZGlyKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQocHNldWRvICsgbWtmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfcm9vdGZzX2J0cmZzKHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG8pOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIGJ0cmZzIHJvb3RmcyBwYXJ0aXRpb24uCisKKyAgICAgICAgQ3VycmVudGx5IGhhbmRsZXMgZXh0Mi8zLzQgYW5kIGJ0cmZzLgorICAgICAgICAiIiIKKyAgICAgICAgZHVfY21kID0gImR1IC1rcyAlcyIgJSByb290ZnNfZGlyCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYWN0dWFsX3Jvb3Rmc19zaXplID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZ2V0X2V4dHJhX2Jsb2NrX2NvdW50KGFjdHVhbF9yb290ZnNfc2l6ZSkKKyAgICAgICAgaWYgZXh0cmFfYmxvY2tzIDwgc2VsZi5leHRyYV9zcGFjZToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZXh0cmFfc3BhY2UKKworICAgICAgICByb290ZnNfc2l6ZSA9IGFjdHVhbF9yb290ZnNfc2l6ZSArIGV4dHJhX2Jsb2NrcworICAgICAgICByb290ZnNfc2l6ZSAqPSBzZWxmLm92ZXJoZWFkX2ZhY3RvcgorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgcm9vdGZzX3NpemUpKQorCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MTAyNCBzZWVrPSVkIGNvdW50PTAgYnM9MWsiICUgXAorICAgICAgICAgICAgKHJvb3Rmcywgcm9vdGZzX3NpemUpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBsYWJlbF9zdHIgPSAiIgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1iICVkIC1yICVzICVzICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgcm9vdGZzX3NpemUgKiAxMDI0LCByb290ZnNfZGlyLCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKHBzZXVkbyArIG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX3Jvb3Rmc192ZmF0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbyk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGEgdmZhdCByb290ZnMgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMiICUgcm9vdGZzX2RpcgorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGJsb2NrcyA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmdldF9leHRyYV9ibG9ja19jb3VudChibG9ja3MpCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IHNlbGYuZXh0cmFfc3BhY2U6CisgICAgICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmV4dHJhX3NwYWNlCisKKyAgICAgICAgYmxvY2tzICs9IGV4dHJhX2Jsb2NrcworCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgYmxvY2tzKSkKKworICAgICAgICAjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgorICAgICAgICAjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisgICAgICAgICMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24KKyAgICAgICAgIyBpcyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuIEFwcGx5CisgICAgICAgICMgc2VjdG9yIGNvdW50IGZpeCBvbmx5IHdoZW4gbmVlZGVkLgorICAgICAgICBpZiBibG9ja3MgJSAxNiAhPSAwOgorICAgICAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCisKKyAgICAgICAgbGFiZWxfc3RyID0gIi1uIGJvb3QiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLW4gJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIGRvc2ZzX2NtZCA9ICJta2Rvc2ZzICVzIC1TIDUxMiAtQyAlcyAlZCIgJSAobGFiZWxfc3RyLCByb290ZnMsIGJsb2NrcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgbWNvcHlfY21kID0gIm1jb3B5IC1pICVzIC1zICVzLyogOjovIiAlIChyb290ZnMsIHJvb3Rmc19kaXIpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChtY29weV9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgcm9vdGZzCisgICAgICAgIGV4ZWNfY21kKGNobW9kX2NtZCkKKworICAgIGRlZiBwcmVwYXJlX3Jvb3Rmc19zcXVhc2hmcyhzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgcHNldWRvKToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYSBzcXVhc2hmcyByb290ZnMgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgc3F1YXNoZnNfY21kID0gIm1rc3F1YXNoZnMgJXMgJXMgLW5vYXBwZW5kIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKHJvb3Rmc19kaXIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKHBzZXVkbyArIHNxdWFzaGZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgcHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fZXh0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IGV4dDIvMy80IHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MWsgc2Vlaz0lZCBjb3VudD0wIiAlIFwKKyAgICAgICAgICAgIChyb290ZnMsIHNlbGYuc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIGV4dHJhX2ltYWdlY21kID0gIi1pIDgxOTIiCisKKyAgICAgICAgbGFiZWxfc3RyID0gIiIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgbWtmc19jbWQgPSAibWtmcy4lcyAtRiAlcyAlcyAlcyIgJSBcCisgICAgICAgICAgICAoc2VsZi5mc3R5cGUsIGV4dHJhX2ltYWdlY21kLCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl9idHJmcyhzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IGJ0cmZzIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MWsgc2Vlaz0lZCBjb3VudD0wIiAlIFwKKyAgICAgICAgICAgIChyb290ZnMsIHNlbGYuc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIGxhYmVsX3N0ciA9ICIiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIG1rZnNfY21kID0gIm1rZnMuJXMgLWIgJWQgJXMgJXMiICUgXAorICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCBzZWxmLnNpemUgKiAxMDI0LCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl92ZmF0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhbiBlbXB0eSB2ZmF0IHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGJsb2NrcyA9IHNlbGYuc2l6ZQorCisgICAgICAgIGxhYmVsX3N0ciA9ICItbiBib290IgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1uICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBkb3Nmc19jbWQgPSAibWtkb3NmcyAlcyAtUyA1MTIgLUMgJXMgJWQiICUgKGxhYmVsX3N0ciwgcm9vdGZzLCBibG9ja3MpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChkb3Nmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgcm9vdGZzCisgICAgICAgIGV4ZWNfY21kKGNobW9kX2NtZCkKKworICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl9zcXVhc2hmcyhzZWxmLCBjcl93b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhbiBlbXB0eSBzcXVhc2hmcyBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBtc2dlci53YXJuaW5nKCJDcmVhdGluZyBvZiBhbiBlbXB0eSBzcXVhc2hmcyAlcyBwYXJ0aXRpb24gd2FzIGF0dGVtcHRlZC4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgIlByb2NlZWRpbmcgYXMgcmVxdWVzdGVkLiIgJSBzZWxmLm1vdW50cG9pbnQpCisKKyAgICAgICAgcGF0aCA9ICIlcy9mc18lcy4lcyIgJSAoY3Jfd29ya2Rpciwgc2VsZi5sYWJlbCwgc2VsZi5mc3R5cGUpCisgICAgICAgIG9zLnBhdGguaXNmaWxlKHBhdGgpIGFuZCBvcy5yZW1vdmUocGF0aCkKKworICAgICAgICAjIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSBzcXVhc2hmcyB3aXRob3V0IHNvdXJjZSBkYXRhLAorICAgICAgICAjIHRodXMgcHJlcGFyZSBhbiBlbXB0eSB0ZW1wIGRpciB0aGF0IGlzIHVzZWQgYXMgc291cmNlCisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgIHNxdWFzaGZzX2NtZCA9ICJta3NxdWFzaGZzICVzICVzIC1ub2FwcGVuZCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICh0bXBkaXIsIHBhdGgpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChzcXVhc2hmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIG9zLnJtZGlyKHRtcGRpcikKKworICAgICAgICAjIGdldCB0aGUgcm9vdGZzIHNpemUgaW4gdGhlIHJpZ2h0IHVuaXRzIGZvciBraWNrc3RhcnQgKGtCKQorICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgcGF0aAorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGZzX3NpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIHNlbGYuc2l6ZSA9IGZzX3NpemUKKworICAgIGRlZiBwcmVwYXJlX3N3YXBfcGFydGl0aW9uKHNlbGYsIGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgc3dhcCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gIiVzL2ZzLiVzIiAlIChjcl93b3JrZGlyLCBzZWxmLmZzdHlwZSkKKworICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTFrIHNlZWs9JWQgY291bnQ9MCIgJSBcCisgICAgICAgICAgICAocGF0aCwgc2VsZi5zaXplKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgaW1wb3J0IHV1aWQKKyAgICAgICAgbGFiZWxfc3RyID0gIiIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCisgICAgICAgIG1rc3dhcF9jbWQgPSAibWtzd2FwICVzIC1VICVzICVzIiAlIChsYWJlbF9zdHIsIHN0cih1dWlkLnV1aWQxKCkpLCBwYXRoKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWtzd2FwX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKworY2xhc3MgV2ljX1BhcnRpdGlvbihGQzRfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzRfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDNF9QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgZGVmIG92ZXJoZWFkX2NiKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBpZiB2YWx1ZSA8IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcigiT3B0aW9uICVzOiBpbnZhbGlkIHZhbHVlOiAlciIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uLCB2YWx1ZSkpCisgICAgICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsIG9wdGlvbi5kZXN0LCB2YWx1ZSkKKworICAgICAgICBwYXJzZXIgPSBGQzRfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKworICAgICAgICAjIFRoZSBhbGlnbm1lbnQgdmFsdWUgaXMgZ2l2ZW4gaW4ga0J5dGVzLiBlLmcuLCB2YWx1ZSA4IG1lYW5zIHRoYXQKKyAgICAgICAgIyB0aGUgcGFydGl0aW9uIGlzIGFsaWduZWQgdG8gc3RhcnQgZnJvbSA4MDk2IGJ5dGUgYm91bmRhcnkuCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWFsaWduIiwgdHlwZT0iaW50IiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImFsaWduIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1leHRvcHRpb25zIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImV4dG9wdHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXBhcnQtdHlwZSIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwYXJ0X3R5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUpCisgICAgICAgICMgdXNlIHNwZWNpZmllZCBzb3VyY2UgZmlsZSB0byBmaWxsIHRoZSBwYXJ0aXRpb24KKyAgICAgICAgIyBhbmQgY2FsY3VsYXRlIHBhcnRpdGlvbiBzaXplCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXNvdXJjZSIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJzb3VyY2UiLCBkZWZhdWx0PU5vbmUpCisgICAgICAgICMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW09dmFsdWUgcGFpcnMKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc291cmNlcGFyYW1zIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InNvdXJjZXBhcmFtcyIsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgIyB1c2Ugc3BlY2lmaWVkIHJvb3RmcyBwYXRoIHRvIGZpbGwgdGhlIHBhcnRpdGlvbgorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1yb290ZnMtZGlyIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InJvb3RmcyIsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgIyB3ZXRoZXIgdG8gYWRkIHRoZSBwYXJ0aXRpb24gaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1uby10YWJsZSIsIGRlc3Q9Im5vX3RhYmxlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgIyBleHRyYSBzcGFjZSBiZXlvbmQgdGhlIHBhcnRpdGlvbiBzaXplCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWV4dHJhLXNwYWNlIiwgZGVzdD0iZXh0cmFfc3BhY2UiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2l6ZSIsIG5hcmdzPTEsIGRlZmF1bHQ9IjEwTSIpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLW92ZXJoZWFkLWZhY3RvciIsIGRlc3Q9Im92ZXJoZWFkX2ZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1vdmVyaGVhZF9jYiwgdHlwZT0iZmxvYXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncz0xLCBkZWZhdWx0PTEuMykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLXV1aWQiLCBkZXN0PSJ1c2VfdXVpZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXV1aWQiKQorCisgICAgICAgIHJldHVybiBwYXJzZXIKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvd2ljYm9vdC5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvd2ljYm9vdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2UxODUyCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy93aWNib290LnB5CkBAIC0wLDAgKzEsNjAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgT3BlbkVtYmVkZGVkIGJvb3Rsb2FkZXIgb2JqZWN0IGRlZmluaXRpb25zLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKK2Zyb20gcHlraWNrc3RhcnQuY29tbWFuZHMuYm9vdGxvYWRlciBpbXBvcnQgRjhfQm9vdGxvYWRlcgorCitjbGFzcyBXaWNfQm9vdGxvYWRlcihGOF9Cb290bG9hZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMCwgYXBwZW5kTGluZT0iIiwgZHJpdmVvcmRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBmb3JjZUxCQT1GYWxzZSwgbG9jYXRpb249IiIsIG1kNXBhc3M9IiIsIHBhc3N3b3JkPSIiLAorICAgICAgICAgICAgICAgICB1cGdyYWRlPUZhbHNlLCBtZW51cz0iIik6CisgICAgICAgIEY4X0Jvb3Rsb2FkZXIuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgYXBwZW5kTGluZSwgZHJpdmVvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUxCQSwgbG9jYXRpb24sIG1kNXBhc3MsIHBhc3N3b3JkLCB1cGdyYWRlKQorCisgICAgICAgIHNlbGYubWVudXMgPSAiIgorICAgICAgICBzZWxmLnB0YWJsZSA9ICJtc2RvcyIKKyAgICAgICAgc2VsZi5zb3VyY2UgPSAiIgorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEY4X0Jvb3Rsb2FkZXIuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYubWVudXMgPT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW1lbnVzPSVzIiAlKHNlbGYubWVudXMsKQorICAgICAgICBpZiBzZWxmLnB0YWJsZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcHRhYmxlPVwiJXNcIiIgJShzZWxmLnB0YWJsZSwpCisgICAgICAgIGlmIHNlbGYuc291cmNlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1zb3VyY2U9JXMiICUgc2VsZi5zb3VyY2UKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRjhfQm9vdGxvYWRlci5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLW1lbnVzIiwgZGVzdD0ibWVudXMiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1wdGFibGUiLCBkZXN0PSJwdGFibGUiLCBjaG9pY2VzPSgibXNkb3MiLCAiZ3B0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im1zZG9zIikKKyAgICAgICAgIyB1c2Ugc3BlY2lmaWVkIHNvdXJjZSBwbHVnaW4gdG8gaW1wbGVtZW50IGJvb3Rsb2FkZXItc3BlY2lmaWMgbWV0aG9kcworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1zb3VyY2UiLCB0eXBlPSJzdHJpbmciLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJzb3VyY2UiLCBkZWZhdWx0PU5vbmUpCisgICAgICAgIHJldHVybiBwYXJzZXIKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvbXNnZXIucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9tc2dlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzM3NTU0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvbXNnZXIucHkKQEAgLTAsMCArMSwzMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMgdmltOiBhaSB0cz00IHN0cz00IGV0IHN3PTQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKKworX19BTExfXyA9IFsnc2V0X21vZGUnLAorICAgICAgICAgICAnZ2V0X2xvZ2xldmVsJywKKyAgICAgICAgICAgJ3NldF9sb2dsZXZlbCcsCisgICAgICAgICAgICdzZXRfbG9nZmlsZScsCisgICAgICAgICAgICdyYXcnLAorICAgICAgICAgICAnZGVidWcnLAorICAgICAgICAgICAndmVyYm9zZScsCisgICAgICAgICAgICdpbmZvJywKKyAgICAgICAgICAgJ3dhcm5pbmcnLAorICAgICAgICAgICAnZXJyb3InLAorICAgICAgICAgICAnYXNrJywKKyAgICAgICAgICAgJ3BhdXNlJywKKyAgICAgICAgICBdCisKKyMgQ09MT1JzIGluIEFOU0kKK0lORk9fQ09MT1IgPSAzMiAjIGdyZWVuCitXQVJOX0NPTE9SID0gMzMgIyB5ZWxsb3cKK0VSUl9DT0xPUiA9IDMxICMgcmVkCitBU0tfQ09MT1IgPSAzNCAjIGJsdWUKK05PX0NPTE9SID0gMAorCitQUkVGSVhfUkUgPSByZS5jb21waWxlKCdePCguKj8pPlxzKiguKiknLCByZS5TKQorCitJTlRFUkFDVElWRSA9IFRydWUKKworTE9HX0xFVkVMID0gMQorTE9HX0xFVkVMUyA9IHsKKyAgICAncXVpZXQnOiAwLAorICAgICdub3JtYWwnOiAxLAorICAgICd2ZXJib3NlJzogMiwKKyAgICAnZGVidWcnOiAzLAorICAgICduZXZlcic6IDQsCit9CisKK0xPR19GSUxFX0ZQID0gTm9uZQorTE9HX0NPTlRFTlQgPSAnJworQ0FUQ0hFUlJfQlVGRklMRV9GRCA9IC0xCitDQVRDSEVSUl9CVUZGSUxFX1BBVEggPSBOb25lCitDQVRDSEVSUl9TQVZFRF8yID0gLTEKKworZGVmIF9nZW5lcmFsX3ByaW50KGhlYWQsIGNvbG9yLCBtc2c9Tm9uZSwgc3RyZWFtPU5vbmUsIGxldmVsPSdub3JtYWwnKToKKyAgICBnbG9iYWwgTE9HX0NPTlRFTlQKKyAgICBpZiBub3Qgc3RyZWFtOgorICAgICAgICBzdHJlYW0gPSBzeXMuc3Rkb3V0CisKKyAgICBpZiBMT0dfTEVWRUxTW2xldmVsXSA+IExPR19MRVZFTDoKKyAgICAgICAgIyBza2lwCisgICAgICAgIHJldHVybgorCisgICAgIyBlbmNvZGUgcmF3ICd1bmljb2RlJyBzdHIgdG8gdXRmOCBlbmNvZGVkIHN0cgorICAgIGlmIG1zZyBhbmQgaXNpbnN0YW5jZShtc2csIHVuaWNvZGUpOgorICAgICAgICBtc2cgPSBtc2cuZW5jb2RlKCd1dGYtOCcsICdpZ25vcmUnKQorCisgICAgZXJyb3Jtc2cgPSAnJworICAgIGlmIENBVENIRVJSX0JVRkZJTEVfRkQgPiAwOgorICAgICAgICBzaXplID0gb3MubHNlZWsoQ0FUQ0hFUlJfQlVGRklMRV9GRCwgMCwgb3MuU0VFS19FTkQpCisgICAgICAgIG9zLmxzZWVrKENBVENIRVJSX0JVRkZJTEVfRkQsIDAsIG9zLlNFRUtfU0VUKQorICAgICAgICBlcnJvcm1zZyA9IG9zLnJlYWQoQ0FUQ0hFUlJfQlVGRklMRV9GRCwgc2l6ZSkKKyAgICAgICAgb3MuZnRydW5jYXRlKENBVENIRVJSX0JVRkZJTEVfRkQsIDApCisKKyAgICAjIGFwcGVuZCBlcnJvciBtc2cgdG8gTE9HCisgICAgaWYgZXJyb3Jtc2c6CisgICAgICAgIExPR19DT05URU5UICs9IGVycm9ybXNnCisKKyAgICAjIGFwcGVuZCBub3JtYWwgbXNnIHRvIExPRworICAgIHNhdmVfbXNnID0gbXNnLnN0cmlwKCkgaWYgbXNnIGVsc2UgTm9uZQorICAgIGlmIHNhdmVfbXNnOgorICAgICAgICB0aW1lc3RyID0gdGltZS5zdHJmdGltZSgiWyVtLyVkICVIOiVNOiVTICVaXSAiLCB0aW1lLmxvY2FsdGltZSgpKQorICAgICAgICBMT0dfQ09OVEVOVCArPSB0aW1lc3RyICsgc2F2ZV9tc2cgKyAnXG4nCisKKyAgICBpZiBlcnJvcm1zZzoKKyAgICAgICAgX2NvbG9yX3ByaW50KCcnLCBOT19DT0xPUiwgZXJyb3Jtc2csIHN0cmVhbSwgbGV2ZWwpCisKKyAgICBfY29sb3JfcHJpbnQoaGVhZCwgY29sb3IsIG1zZywgc3RyZWFtLCBsZXZlbCkKKworZGVmIF9jb2xvcl9wcmludChoZWFkLCBjb2xvciwgbXNnLCBzdHJlYW0sIGxldmVsKToKKyAgICBjb2xvcmVkID0gVHJ1ZQorICAgIGlmIGNvbG9yID09IE5PX0NPTE9SIG9yIFwKKyAgICAgICBub3Qgc3RyZWFtLmlzYXR0eSgpIG9yIFwKKyAgICAgICBvcy5nZXRlbnYoJ0FOU0lfQ09MT1JTX0RJU0FCTEVEJykgaXMgbm90IE5vbmU6CisgICAgICAgIGNvbG9yZWQgPSBGYWxzZQorCisgICAgaWYgaGVhZC5zdGFydHN3aXRoKCdccicpOgorICAgICAgICAjIG5lZWQgbm90IFxuIGF0IGxhc3QKKyAgICAgICAgbmV3bGluZSA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgbmV3bGluZSA9IFRydWUKKworICAgIGlmIGNvbG9yZWQ6CisgICAgICAgIGhlYWQgPSAnXDAzM1slZG0lczpcMDMzWzBtICcgJShjb2xvciwgaGVhZCkKKyAgICAgICAgaWYgbm90IG5ld2xpbmU6CisgICAgICAgICAgICAjIEVTQyBjbWQgdG8gY2xlYXIgbGluZQorICAgICAgICAgICAgaGVhZCA9ICdcMDMzWzJLJyArIGhlYWQKKyAgICBlbHNlOgorICAgICAgICBpZiBoZWFkOgorICAgICAgICAgICAgaGVhZCArPSAnOiAnCisgICAgICAgICAgICBpZiBoZWFkLnN0YXJ0c3dpdGgoJ1xyJyk6CisgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQubHN0cmlwKCkKKyAgICAgICAgICAgICAgICBuZXdsaW5lID0gVHJ1ZQorCisgICAgaWYgbXNnIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1zZywgdW5pY29kZSk6CisgICAgICAgICAgICBtc2cgPSBtc2cuZW5jb2RlKCd1dGY4JywgJ2lnbm9yZScpCisKKyAgICAgICAgc3RyZWFtLndyaXRlKCclcyVzJyAlIChoZWFkLCBtc2cpKQorICAgICAgICBpZiBuZXdsaW5lOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKCdcbicpCisKKyAgICBzdHJlYW0uZmx1c2goKQorCitkZWYgX2NvbG9yX3BlcnJvcihoZWFkLCBjb2xvciwgbXNnLCBsZXZlbD0nbm9ybWFsJyk6CisgICAgaWYgQ0FUQ0hFUlJfQlVGRklMRV9GRCA+IDA6CisgICAgICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIGNvbG9yLCBtc2csIHN5cy5zdGRvdXQsIGxldmVsKQorICAgIGVsc2U6CisgICAgICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIGNvbG9yLCBtc2csIHN5cy5zdGRlcnIsIGxldmVsKQorCitkZWYgX3NwbGl0X21zZyhoZWFkLCBtc2cpOgorICAgIGlmIGlzaW5zdGFuY2UobXNnLCBsaXN0KToKKyAgICAgICAgbXNnID0gJ1xuJy5qb2luKG1hcChzdHIsIG1zZykpCisKKyAgICBpZiBtc2cuc3RhcnRzd2l0aCgnXG4nKToKKyAgICAgICAgIyBtZWFucyBwcmludCBcbiBhdCBmaXJzdAorICAgICAgICBtc2cgPSBtc2cubHN0cmlwKCkKKyAgICAgICAgaGVhZCA9ICdcbicgKyBoZWFkCisKKyAgICBlbGlmIG1zZy5zdGFydHN3aXRoKCdccicpOgorICAgICAgICAjIG1lYW5zIHByaW50IFxyIGF0IGZpcnN0CisgICAgICAgIG1zZyA9IG1zZy5sc3RyaXAoKQorICAgICAgICBoZWFkID0gJ1xyJyArIGhlYWQKKworICAgIG1hdGNoID0gUFJFRklYX1JFLm1hdGNoKG1zZykKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgaGVhZCArPSAnIDwlcz4nICUgbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgbXNnID0gbWF0Y2guZ3JvdXAoMikKKworICAgIHJldHVybiBoZWFkLCBtc2cKKworZGVmIGdldF9sb2dsZXZlbCgpOgorICAgIHJldHVybiAoayBmb3IgaywgdiBpbiBMT0dfTEVWRUxTLml0ZW1zKCkgaWYgdiA9PSBMT0dfTEVWRUwpLm5leHQoKQorCitkZWYgc2V0X2xvZ2xldmVsKGxldmVsKToKKyAgICBnbG9iYWwgTE9HX0xFVkVMCisgICAgaWYgbGV2ZWwgbm90IGluIExPR19MRVZFTFM6CisgICAgICAgICMgbm8gZWZmZWN0CisgICAgICAgIHJldHVybgorCisgICAgTE9HX0xFVkVMID0gTE9HX0xFVkVMU1tsZXZlbF0KKworZGVmIHNldF9pbnRlcmFjdGl2ZShtb2RlPVRydWUpOgorICAgIGdsb2JhbCBJTlRFUkFDVElWRQorICAgIGlmIG1vZGU6CisgICAgICAgIElOVEVSQUNUSVZFID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIElOVEVSQUNUSVZFID0gRmFsc2UKKworZGVmIGxvZyhtc2c9JycpOgorICAgICMgbG9nIG1zZyB0byBMT0dfQ09OVEVOVCB0aGVuIHNhdmUgdG8gbG9nZmlsZQorICAgIGdsb2JhbCBMT0dfQ09OVEVOVAorICAgIGlmIG1zZzoKKyAgICAgICAgTE9HX0NPTlRFTlQgKz0gbXNnCisKK2RlZiByYXcobXNnPScnKToKKyAgICBfZ2VuZXJhbF9wcmludCgnJywgTk9fQ09MT1IsIG1zZykKKworZGVmIGluZm8obXNnKToKKyAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdJbmZvJywgbXNnKQorICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIElORk9fQ09MT1IsIG1zZykKKworZGVmIHZlcmJvc2UobXNnKToKKyAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdWZXJib3NlJywgbXNnKQorICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIElORk9fQ09MT1IsIG1zZywgbGV2ZWw9J3ZlcmJvc2UnKQorCitkZWYgd2FybmluZyhtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ1dhcm5pbmcnLCBtc2cpCisgICAgX2NvbG9yX3BlcnJvcihoZWFkLCBXQVJOX0NPTE9SLCBtc2cpCisKK2RlZiBkZWJ1Zyhtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ0RlYnVnJywgbXNnKQorICAgIF9jb2xvcl9wZXJyb3IoaGVhZCwgRVJSX0NPTE9SLCBtc2csIGxldmVsPSdkZWJ1ZycpCisKK2RlZiBlcnJvcihtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ0Vycm9yJywgbXNnKQorICAgIF9jb2xvcl9wZXJyb3IoaGVhZCwgRVJSX0NPTE9SLCBtc2cpCisgICAgc3lzLmV4aXQoMSkKKworZGVmIGFzayhtc2csIGRlZmF1bHQ9VHJ1ZSk6CisgICAgX2dlbmVyYWxfcHJpbnQoJ1xyUScsIEFTS19DT0xPUiwgJycpCisgICAgdHJ5OgorICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgbXNnICs9ICcoWS9uKSAnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgKz0gJyh5L04pICcKKyAgICAgICAgaWYgSU5URVJBQ1RJVkU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlcGwgPSByYXdfaW5wdXQobXNnKQorICAgICAgICAgICAgICAgIGlmIHJlcGwubG93ZXIoKSA9PSAneSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiByZXBsLmxvd2VyKCkgPT0gJ24nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIG5vdCByZXBsLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICMgPEVudGVyPgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgICAgICAgICAgICAgIyBlbHNlIGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbXNnICs9ICcgWScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnICs9ICcgTicKKyAgICAgICAgICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQorCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICBzeXMuZXhpdCgyKQorCitkZWYgY2hvaWNlKG1zZywgY2hvaWNlcywgZGVmYXVsdD0wKToKKyAgICBpZiBkZWZhdWx0ID49IGxlbihjaG9pY2VzKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBfZ2VuZXJhbF9wcmludCgnXHJRJywgQVNLX0NPTE9SLCAnJykKKyAgICB0cnk6CisgICAgICAgIG1zZyArPSAiIFslc10gIiAlICcvJy5qb2luKGNob2ljZXMpCisgICAgICAgIGlmIElOVEVSQUNUSVZFOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZXBsID0gcmF3X2lucHV0KG1zZykKKyAgICAgICAgICAgICAgICBpZiByZXBsIGluIGNob2ljZXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXBsCisgICAgICAgICAgICAgICAgZWxpZiBub3QgcmVwbC5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlc1tkZWZhdWx0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnICs9IGNob2ljZXNbZGVmYXVsdF0KKyAgICAgICAgICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQorCisgICAgICAgICAgICByZXR1cm4gY2hvaWNlc1tkZWZhdWx0XQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICBzeXMuZXhpdCgyKQorCitkZWYgcGF1c2UobXNnPU5vbmUpOgorICAgIGlmIElOVEVSQUNUSVZFOgorICAgICAgICBfZ2VuZXJhbF9wcmludCgnXHJRJywgQVNLX0NPTE9SLCAnJykKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAncHJlc3MgPEVOVEVSPiB0byBjb250aW51ZSAuLi4nCisgICAgICAgIHJhd19pbnB1dChtc2cpCisKK2RlZiBzZXRfbG9nZmlsZShmcGF0aCk6CisgICAgZ2xvYmFsIExPR19GSUxFX0ZQCisKKyAgICBkZWYgX3NhdmVsb2dmKCk6CisgICAgICAgIGlmIExPR19GSUxFX0ZQOgorICAgICAgICAgICAgd2l0aCBvcGVuKExPR19GSUxFX0ZQLCAndycpIGFzIGxvZzoKKyAgICAgICAgICAgICAgICBsb2cud3JpdGUoTE9HX0NPTlRFTlQpCisKKyAgICBpZiBMT0dfRklMRV9GUCBpcyBub3QgTm9uZToKKyAgICAgICAgd2FybmluZygnZHVwbGljYXRlIGxvZyBmaWxlIGNvbmZpZ3VyYXRpb24nKQorCisgICAgTE9HX0ZJTEVfRlAgPSBmcGF0aAorCisgICAgaW1wb3J0IGF0ZXhpdAorICAgIGF0ZXhpdC5yZWdpc3Rlcihfc2F2ZWxvZ2YpCisKK2RlZiBlbmFibGVfbG9nc3RkZXJyKGZwYXRoKToKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfQlVGRklMRV9GRAorICAgIGdsb2JhbCBDQVRDSEVSUl9CVUZGSUxFX1BBVEgKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfU0FWRURfMgorCisgICAgaWYgb3MucGF0aC5leGlzdHMoZnBhdGgpOgorICAgICAgICBvcy5yZW1vdmUoZnBhdGgpCisgICAgQ0FUQ0hFUlJfQlVGRklMRV9QQVRIID0gZnBhdGgKKyAgICBDQVRDSEVSUl9CVUZGSUxFX0ZEID0gb3Mub3BlbihDQVRDSEVSUl9CVUZGSUxFX1BBVEgsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKQorICAgIENBVENIRVJSX1NBVkVEXzIgPSBvcy5kdXAoMikKKyAgICBvcy5kdXAyKENBVENIRVJSX0JVRkZJTEVfRkQsIDIpCisKK2RlZiBkaXNhYmxlX2xvZ3N0ZGVycigpOgorICAgIGdsb2JhbCBDQVRDSEVSUl9CVUZGSUxFX0ZECisgICAgZ2xvYmFsIENBVENIRVJSX0JVRkZJTEVfUEFUSAorICAgIGdsb2JhbCBDQVRDSEVSUl9TQVZFRF8yCisKKyAgICByYXcobXNnPU5vbmUpICMgZmx1c2ggbWVzc2FnZSBidWZmZXIgYW5kIHByaW50IGl0LgorICAgIG9zLmR1cDIoQ0FUQ0hFUlJfU0FWRURfMiwgMikKKyAgICBvcy5jbG9zZShDQVRDSEVSUl9TQVZFRF8yKQorICAgIG9zLmNsb3NlKENBVENIRVJSX0JVRkZJTEVfRkQpCisgICAgb3MudW5saW5rKENBVENIRVJSX0JVRkZJTEVfUEFUSCkKKyAgICBDQVRDSEVSUl9CVUZGSUxFX0ZEID0gLTEKKyAgICBDQVRDSEVSUl9CVUZGSUxFX1BBVEggPSBOb25lCisgICAgQ0FUQ0hFUlJfU0FWRURfMiA9IC0xCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW4ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmZGZjYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbi5weQpAQCAtMCwwICsxLDE1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcywgc3lzCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMgaW1wb3J0IHBsdWdpbmJhc2UKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBlcnJvcnMKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgorCitfX0FMTF9fID0gWydQbHVnaW5NZ3InLCAncGx1Z2lubWdyJ10KKworUExVR0lOX1RZUEVTID0gWyJpbWFnZXIiLCAic291cmNlIl0KKworUExVR0lOX0RJUiA9ICIvbGliL3dpYy9wbHVnaW5zIiAjIHJlbGF0aXZlIHRvIHNjcmlwdHMKK1NDUklQVFNfUExVR0lOX0RJUiA9ICJzY3JpcHRzIiArIFBMVUdJTl9ESVIKKworY2xhc3MgUGx1Z2luTWdyKG9iamVjdCk6CisgICAgcGx1Z2luX2RpcnMgPSB7fQorCisgICAgIyBtYWtlIHRoZSBtYW5hZ2VyIGNsYXNzIGFzIHNpbmdsZXRvbgorICAgIF9pbnN0YW5jZSA9IE5vbmUKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBjbHMuX2luc3RhbmNlOgorICAgICAgICAgICAgY2xzLl9pbnN0YW5jZSA9IHN1cGVyKFBsdWdpbk1nciwgY2xzKS5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHJldHVybiBjbHMuX2luc3RhbmNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHdpY19wYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBlb3MgPSB3aWNfcGF0aC5maW5kKCdzY3JpcHRzJykgKyBsZW4oJ3NjcmlwdHMnKQorICAgICAgICBzY3JpcHRzX3BhdGggPSB3aWNfcGF0aFs6ZW9zXQorICAgICAgICBzZWxmLnNjcmlwdHNfcGF0aCA9IHNjcmlwdHNfcGF0aAorICAgICAgICBzZWxmLnBsdWdpbl9kaXIgPSBzY3JpcHRzX3BhdGggKyBQTFVHSU5fRElSCisgICAgICAgIHNlbGYubGF5ZXJzX3BhdGggPSBOb25lCisKKyAgICBkZWYgX2J1aWxkX3BsdWdpbl9kaXJfbGlzdChzZWxmLCBwbHVnaW5fZGlyLCBwdHlwZSk6CisgICAgICAgIGlmIHNlbGYubGF5ZXJzX3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubGF5ZXJzX3BhdGggPSBnZXRfYml0YmFrZV92YXIoIkJCTEFZRVJTIikKKyAgICAgICAgbGF5ZXJfZGlycyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5sYXllcnNfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBsYXllcl9wYXRoIGluIHNlbGYubGF5ZXJzX3BhdGguc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGxheWVyX3BhdGgsIFNDUklQVFNfUExVR0lOX0RJUiwgcHR5cGUpCisgICAgICAgICAgICAgICAgbGF5ZXJfZGlycy5hcHBlbmQocGF0aCkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBsdWdpbl9kaXIsIHB0eXBlKQorICAgICAgICBsYXllcl9kaXJzLmFwcGVuZChwYXRoKQorCisgICAgICAgIHJldHVybiBsYXllcl9kaXJzCisKKyAgICBkZWYgYXBwZW5kX2RpcnMoc2VsZiwgZGlycyk6CisgICAgICAgIGZvciBwYXRoIGluIGRpcnM6CisgICAgICAgICAgICBzZWxmLl9hZGRfcGx1Z2luZGlyKHBhdGgpCisKKyAgICAgICAgIyBsb2FkIGFsbCB0aGUgcGx1Z2lucyBBR0FJTgorICAgICAgICBzZWxmLl9sb2FkX2FsbCgpCisKKyAgICBkZWYgX2FkZF9wbHVnaW5kaXIoc2VsZiwgcGF0aCk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5leHBhbmR1c2VyKHBhdGgpKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgcGF0aCBub3QgaW4gc2VsZi5wbHVnaW5fZGlyczoKKyAgICAgICAgICAgIHNlbGYucGx1Z2luX2RpcnNbcGF0aF0gPSBGYWxzZQorICAgICAgICAgICAgIyB0aGUgdmFsdWUgVHJ1ZS9GYWxzZSBtZWFucyAibG9hZGVkIgorCisgICAgZGVmIF9sb2FkX2FsbChzZWxmKToKKyAgICAgICAgZm9yIChwZGlyLCBsb2FkZWQpIGluIHNlbGYucGx1Z2luX2RpcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBsb2FkZWQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHBkaXIpCisgICAgICAgICAgICBmb3IgbW9kIGluIFt4WzotM10gZm9yIHggaW4gb3MubGlzdGRpcihwZGlyKSBpZiB4LmVuZHN3aXRoKCIucHkiKV06CisgICAgICAgICAgICAgICAgaWYgbW9kIGFuZCBtb2QgIT0gJ19faW5pdF9fJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgbW9kIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGYucGx1Z2luX2RpcnNbcGRpcl0gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJNb2R1bGUgJXMgYWxyZWFkeSBleGlzdHMsIHNraXAiICUgbW9kKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5bW9kID0gX19pbXBvcnRfXyhtb2QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbHVnaW5fZGlyc1twZGlyXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiUGx1Z2luIG1vZHVsZSAlczolcyBpbXBvcnRlZCJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobW9kLCBweW1vZC5fX2ZpbGVfXykpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAnRmFpbGVkIHRvIGxvYWQgcGx1Z2luICVzLyVzOiAlcycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChvcy5wYXRoLmJhc2VuYW1lKHBkaXIpLCBtb2QsIGVycikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKG1zZykKKworICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICBkZWYgZ2V0X3BsdWdpbnMoc2VsZiwgcHR5cGUpOgorICAgICAgICAiIiIgdGhlIHJldHVybiB2YWx1ZSBpcyBkaWN0IG9mIG5hbWU6Y2xhc3MgcGFpcnMgIiIiCisKKyAgICAgICAgaWYgcHR5cGUgbm90IGluIFBMVUdJTl9UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5DcmVhdG9yRXJyb3IoJyVzIGlzIG5vdCB2YWxpZCBwbHVnaW4gdHlwZScgJSBwdHlwZSkKKworICAgICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2J1aWxkX3BsdWdpbl9kaXJfbGlzdChzZWxmLnBsdWdpbl9kaXIsIHB0eXBlKQorCisgICAgICAgIHNlbGYuYXBwZW5kX2RpcnMocGx1Z2luc19kaXIpCisKKyAgICAgICAgcmV0dXJuIHBsdWdpbmJhc2UuZ2V0X3BsdWdpbnMocHR5cGUpCisKKyAgICBkZWYgZ2V0X3NvdXJjZV9wbHVnaW5zKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGxpc3Qgb2YgYXZhaWxhYmxlIHNvdXJjZSBwbHVnaW5zLgorICAgICAgICAiIiIKKyAgICAgICAgcGx1Z2luc19kaXIgPSBzZWxmLl9idWlsZF9wbHVnaW5fZGlyX2xpc3Qoc2VsZi5wbHVnaW5fZGlyLCAnc291cmNlJykKKworICAgICAgICBzZWxmLmFwcGVuZF9kaXJzKHBsdWdpbnNfZGlyKQorCisgICAgICAgIHJldHVybiBzZWxmLmdldF9wbHVnaW5zKCdzb3VyY2UnKQorCisKKyAgICBkZWYgZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcyhzZWxmLCBzb3VyY2VfbmFtZSwgbWV0aG9kcyk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgbWV0aG9kcyBwYXJhbSBpcyBhIGRpY3Qgd2l0aCB0aGUgbWV0aG9kIG5hbWVzIHRvIGZpbmQuICBPbgorICAgICAgICByZXR1cm4sIHRoZSBkaWN0IHZhbHVlcyB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHBvaW50ZXJzIHRvIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIG1ldGhvZHMuICBJZiBvbmUgb3IgbW9yZSBtZXRob2RzIGFyZSBub3QgZm91bmQsCisgICAgICAgIE5vbmUgaXMgcmV0dXJuZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm5fbWV0aG9kcyA9IE5vbmUKKyAgICAgICAgZm9yIF9zb3VyY2VfbmFtZSwga2xhc3MgaW4gc2VsZi5nZXRfcGx1Z2lucygnc291cmNlJykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBfc291cmNlX25hbWUgPT0gc291cmNlX25hbWU6CisgICAgICAgICAgICAgICAgZm9yIF9tZXRob2RfbmFtZSBpbiBtZXRob2RzLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoa2xhc3MsIF9tZXRob2RfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJVbmltcGxlbWVudGVkICVzIHNvdXJjZSBpbnRlcmZhY2UgZm9yOiAlcyJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKF9tZXRob2RfbmFtZSwgX3NvdXJjZV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKGtsYXNzLCBfbWV0aG9kX25hbWUpCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHNbX21ldGhvZF9uYW1lXSA9IGZ1bmMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX21ldGhvZHMgPSBtZXRob2RzCisgICAgICAgIHJldHVybiByZXR1cm5fbWV0aG9kcworCitwbHVnaW5tZ3IgPSBQbHVnaW5NZ3IoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4ZmU5NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkKQEAgLTAsMCArMSwxMDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKKworY2xhc3MgX1BsdWdpbihvYmplY3QpOgorICAgIGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6CisgICAgICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICdwbHVnaW5zJyk6CisgICAgICAgICAgICAgICAgY2xzLnBsdWdpbnMgPSB7fQorCisgICAgICAgICAgICBlbGlmICd3aWNfcGx1Z2luX3R5cGUnIGluIGF0dHJzOgorICAgICAgICAgICAgICAgIGlmIGF0dHJzWyd3aWNfcGx1Z2luX3R5cGUnXSBub3QgaW4gY2xzLnBsdWdpbnM6CisgICAgICAgICAgICAgICAgICAgIGNscy5wbHVnaW5zW2F0dHJzWyd3aWNfcGx1Z2luX3R5cGUnXV0gPSB7fQorCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIoY2xzLCAnd2ljX3BsdWdpbl90eXBlJykgYW5kICduYW1lJyBpbiBhdHRyczoKKyAgICAgICAgICAgICAgICBjbHMucGx1Z2luc1tjbHMud2ljX3BsdWdpbl90eXBlXVthdHRyc1snbmFtZSddXSA9IGNscworCisgICAgICAgIGRlZiBzaG93X3BsdWdpbnMoY2xzKToKKyAgICAgICAgICAgIGZvciBjbHMgaW4gY2xzLnBsdWdpbnNbY2xzLndpY19wbHVnaW5fdHlwZV06CisgICAgICAgICAgICAgICAgcHJpbnQgY2xzCisKKyAgICAgICAgZGVmIGdldF9wbHVnaW5zKGNscyk6CisgICAgICAgICAgICByZXR1cm4gY2xzLnBsdWdpbnMKKworCitjbGFzcyBJbWFnZXJQbHVnaW4oX1BsdWdpbik6CisgICAgd2ljX3BsdWdpbl90eXBlID0gImltYWdlciIKKworCitjbGFzcyBTb3VyY2VQbHVnaW4oX1BsdWdpbik6CisgICAgd2ljX3BsdWdpbl90eXBlID0gInNvdXJjZSIKKyAgICAiIiIKKyAgICBUaGUgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBieSAtLXNvdXJjZSBwbHVnaW5zLgorCisgICAgQW55IG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGluIGEgc3ViY2xhc3MgaW5oZXJpdCB0aGVzZS4KKyAgICAiIiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyZWF0b3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gIFRoaXMgcHJvdmlkZXMgYSBob29rIHRvIGFsbG93IGZpbmFsaXphdGlvbiBvZiBhCisgICAgICAgIGRpc2sgaW1hZ2UgZS5nLiB0byB3cml0ZSBhbiBNQlIgdG8gaXQuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19pbnN0YWxsX2Rpc2s6IGRpc2s6ICVzIiAlIGRpc2tfbmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19zdGFnZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgU3BlY2lhbCBjb250ZW50IHN0YWdpbmcgaG9vayBjYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksCisgICAgICAgIG5vcm1hbGx5IGVtcHR5LgorCisgICAgICAgIFR5cGljYWxseSwgYSBwYXJ0aXRpb24gd2lsbCBqdXN0IHVzZSB0aGUgcGFzc2VkLWluIHBhcmFtZSBlLmcKKyAgICAgICAgc3RyYWlnaHQgYm9vdGltZ19kaXIsIGV0YywgYnV0IGluIHNvbWUgY2FzZXMsIHRoaW5ncyBuZWVkIHRvCisgICAgICAgIGJlIG1vcmUgdGFpbG9yZWQgZS5nLiB0byB1c2UgYSBkZXBsb3kgZGlyICsgL2Jvb3QsIGV0Yy4gIFRoaXMKKyAgICAgICAgaG9vayBhbGxvd3MgdGhvc2UgZmlsZXMgdG8gYmUgc3RhZ2VkIGluIGEgY3VzdG9taXplZCBmYXNoaW9uLgorICAgICAgICBOb3QgdGhhdCBnZXRfYml0YmFrZV92YXIoKSBhbGxvd3MgeW91IHRvIGFjY2VzIG5vbi1zdGFuZGFyZAorICAgICAgICB2YXJpYWJsZXMgdGhhdCB5b3UgbWlnaHQgd2FudCB0byB1c2UgZm9yIHRoaXMuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19zdGFnZV9wYXJ0aXRpb246IHBhcnQ6ICVzIiAlIHBhcnQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgdHlwaWNhbGx5IHVzZWQgdG8gY3JlYXRlCisgICAgICAgIGN1c3RvbSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBhIHBhcnRpdGlvbiwgZm9yIGV4YW1wbGUKKyAgICAgICAgc3lzbGludXggb3IgZ3J1YiBjb25maWcgZmlsZXMuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19jb25maWd1cmVfcGFydGl0aW9uOiBwYXJ0OiAlcyIgJSBwYXJ0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZ2VyLmRlYnVnKCJTb3VyY2VQbHVnaW46IGRvX3ByZXBhcmVfcGFydGl0aW9uOiBwYXJ0OiAlcyIgJSBwYXJ0KQorCitkZWYgZ2V0X3BsdWdpbnModHlwZW4pOgorICAgIHBsdWdpbnMgPSBJbWFnZXJQbHVnaW4uZ2V0X3BsdWdpbnMoKQorICAgIGlmIHR5cGVuIGluIHBsdWdpbnM6CisgICAgICAgIHJldHVybiBwbHVnaW5zW3R5cGVuXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKK19fYWxsX18gPSBbJ0ltYWdlclBsdWdpbicsICdTb3VyY2VQbHVnaW4nLCAnZ2V0X3BsdWdpbnMnXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0X3BsdWdpbi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzZjQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkKQEAgLTAsMCArMSwxMDIgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdkaXJlY3QnIGltYWdlciBwbHVnaW4gY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZXJyb3JzCitmcm9tIHdpYy5jb25mIGltcG9ydCBjb25maWdtZ3IKKworaW1wb3J0IHdpYy5pbWFnZXIuZGlyZWN0IGFzIGRpcmVjdAorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgSW1hZ2VyUGx1Z2luCisKK2NsYXNzIERpcmVjdFBsdWdpbihJbWFnZXJQbHVnaW4pOgorICAgICIiIgorICAgIEluc3RhbGwgYSBzeXN0ZW0gaW50byBhIGZpbGUgY29udGFpbmluZyBhIHBhcnRpdGlvbmVkIGRpc2sgaW1hZ2UuCisKKyAgICBBbiBpbWFnZSBmaWxlIGlzIGZvcm1hdHRlZCB3aXRoIGEgcGFydGl0aW9uIHRhYmxlLCBlYWNoIHBhcnRpdGlvbgorICAgIGNyZWF0ZWQgZnJvbSBhIHJvb3RmcyBvciBvdGhlciBPcGVuRW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3QgYW5kIGRkJ2VkCisgICAgaW50byB0aGUgdmlydHVhbCBkaXNrLiBUaGUgZGlzayBpbWFnZSBjYW4gc3Vic2VxdWVudGx5IGJlIGRkJ2VkIG9udG8KKyAgICBtZWRpYSBhbmQgdXNlZCBvbiBhY3R1YWwgaGFyZHdhcmUuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2RpcmVjdCcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3Jvb3Rmc19kaXJfdG9fZGljdChjbHMsIHJvb3Rmc19kaXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldHMgYSBzdHJpbmcgdGhhdCBjb250YWluICdjb25uZWN0aW9uPWRpcicgc3BsaXR0ZWQgYnkKKyAgICAgICAgc3BhY2UgYW5kIHJldHVybiBhIGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIGtyb290ZnNfZGlyID0ge30KKyAgICAgICAgZm9yIHJvb3Rmc19kaXIgaW4gcm9vdGZzX2RpcnMuc3BsaXQoJyAnKToKKyAgICAgICAgICAgIGtleSwgdmFsID0gcm9vdGZzX2Rpci5zcGxpdCgnPScpCisgICAgICAgICAgICBrcm9vdGZzX2RpcltrZXldID0gdmFsCisKKyAgICAgICAgcmV0dXJuIGtyb290ZnNfZGlyCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY3JlYXRlKGNscywgb3B0cywgKmFyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGRpcmVjdCBpbWFnZSwgY2FsbGVkIGZyb20gY3JlYXRvciBhcyAnZGlyZWN0JyBjbWQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihhcmdzKSAhPSA4OgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlVzYWdlKCJFeHRyYSBhcmd1bWVudHMgZ2l2ZW4iKQorCisgICAgICAgIG5hdGl2ZV9zeXNyb290ID0gYXJnc1swXQorICAgICAgICBrZXJuZWxfZGlyID0gYXJnc1sxXQorICAgICAgICBib290aW1nX2RpciA9IGFyZ3NbMl0KKyAgICAgICAgcm9vdGZzX2RpciA9IGFyZ3NbM10KKworICAgICAgICBjcmVhdG9yb3B0cyA9IGNvbmZpZ21nci5jcmVhdGUKKyAgICAgICAga3Njb25mID0gYXJnc1s0XQorCisgICAgICAgIGltYWdlX291dHB1dF9kaXIgPSBhcmdzWzVdCisgICAgICAgIG9lX2J1aWxkZGlyID0gYXJnc1s2XQorICAgICAgICBjb21wcmVzc29yID0gYXJnc1s3XQorCisgICAgICAgIGtyb290ZnNfZGlyID0gY2xzLl9fcm9vdGZzX2Rpcl90b19kaWN0KHJvb3Rmc19kaXIpCisKKyAgICAgICAgY29uZmlnbWdyLl9rc2NvbmYgPSBrc2NvbmYKKworICAgICAgICBjcmVhdG9yID0gZGlyZWN0LkRpcmVjdEltYWdlQ3JlYXRvcihvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Vfb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Jvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcm9wdHMpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3JlYXRvci5jcmVhdGUoKQorICAgICAgICAgICAgY3JlYXRvci5hc3NlbWJsZSgpCisgICAgICAgICAgICBjcmVhdG9yLmZpbmFsaXplKCkKKyAgICAgICAgICAgIGNyZWF0b3IucHJpbnRfb3V0aW1hZ2VfaW5mbygpCisKKyAgICAgICAgZXhjZXB0IGVycm9ycy5DcmVhdG9yRXJyb3I6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY3JlYXRvci5jbGVhbnVwKCkKKworICAgICAgICByZXR1cm4gMApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLWVmaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTYzYzZhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkKQEAgLTAsMCArMSwyMTQgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdib290aW1nLWVmaScgc291cmNlIHBsdWdpbiBjbGFzcyBmb3IgJ3dpYycKKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0LCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBnZXRfYml0YmFrZV92YXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT1RERF9FWFRSQV9TUEFDRQorCitjbGFzcyBCb290aW1nRUZJUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQ3JlYXRlIEVGSSBib290IHBhcnRpdGlvbi4KKyAgICBUaGlzIHBsdWdpbiBzdXBwb3J0cyBHUlVCIDIgYW5kIGd1bW1pYm9vdCBib290bG9hZGVycy4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnYm9vdGltZy1lZmknCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX2dydWJlZmkoY2xzLCBoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3J1Yi1lZmkpIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICBncnViZWZpX2NvbmYgPSAiIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAtLXBhcml0eT1ubyAtLXN0b3A9MVxuIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gImRlZmF1bHQ9Ym9vdFxuIgorICAgICAgICB0aW1lb3V0ID0ga2lja3N0YXJ0LmdldF90aW1lb3V0KGNyZWF0b3Iua3MpCisgICAgICAgIGlmIG5vdCB0aW1lb3V0OgorICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ0aW1lb3V0PSVzXG4iICUgdGltZW91dAorICAgICAgICBncnViZWZpX2NvbmYgKz0gIm1lbnVlbnRyeSAnYm9vdCd7XG4iCisKKyAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorCisgICAgICAgIGdydWJlZmlfY29uZiArPSAibGludXggJXMgcm9vdD0lcyByb290d2FpdCAlc1xuIiBcCisgICAgICAgICAgICAlIChrZXJuZWwsIGNyZWF0b3Iucm9vdGRldiwgb3B0aW9ucykKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ9XG4iCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgZ3J1YmVmaSBjb25maWcgJXMvaGRkL2Jvb3QvRUZJL0JPT1QvZ3J1Yi5jZmciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgY2ZnID0gb3BlbigiJXMvaGRkL2Jvb3QvRUZJL0JPT1QvZ3J1Yi5jZmciICUgY3Jfd29ya2RpciwgInciKQorICAgICAgICBjZmcud3JpdGUoZ3J1YmVmaV9jb25mKQorICAgICAgICBjZmcuY2xvc2UoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9ndW1taWJvb3QoY2xzLCBoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3VtbWlib290KSBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvbG9hZGVyIiAlIGhkZGRpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL2xvYWRlci9lbnRyaWVzIiAlIGhkZGRpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBvcHRpb25zID0gY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoY3JlYXRvci5rcykKKyAgICAgICAgaWYgbm90IHRpbWVvdXQ6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorCisgICAgICAgIGxvYWRlcl9jb25mID0gIiIKKyAgICAgICAgbG9hZGVyX2NvbmYgKz0gImRlZmF1bHQgYm9vdFxuIgorICAgICAgICBsb2FkZXJfY29uZiArPSAidGltZW91dCAlZFxuIiAlIHRpbWVvdXQKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBndW1taWJvb3QgY29uZmlnICVzL2hkZC9ib290L2xvYWRlci9sb2FkZXIuY29uZiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICBjZmcgPSBvcGVuKCIlcy9oZGQvYm9vdC9sb2FkZXIvbG9hZGVyLmNvbmYiICUgY3Jfd29ya2RpciwgInciKQorICAgICAgICBjZmcud3JpdGUobG9hZGVyX2NvbmYpCisgICAgICAgIGNmZy5jbG9zZSgpCisKKyAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorCisgICAgICAgIGJvb3RfY29uZiA9ICIiCisgICAgICAgIGJvb3RfY29uZiArPSAidGl0bGUgYm9vdFxuIgorICAgICAgICBib290X2NvbmYgKz0gImxpbnV4ICVzXG4iICUga2VybmVsCisgICAgICAgIGJvb3RfY29uZiArPSAib3B0aW9ucyBMQUJFTD1Cb290IHJvb3Q9JXMgJXNcbiIgJSAoY3JlYXRvci5yb290ZGV2LCBvcHRpb25zKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIGd1bW1pYm9vdCBjb25maWcgJXMvaGRkL2Jvb3QvbG9hZGVyL2VudHJpZXMvYm9vdC5jb25mIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCisgICAgICAgIGNmZyA9IG9wZW4oIiVzL2hkZC9ib290L2xvYWRlci9lbnRyaWVzL2Jvb3QuY29uZiIgJSBjcl93b3JrZGlyLCAidyIpCisgICAgICAgIGNmZy53cml0ZShib290X2NvbmYpCisgICAgICAgIGNmZy5jbG9zZSgpCisKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBjcmVhdGVzIGxvYWRlci1zcGVjaWZpYyBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIGhkZGRpciA9ICIlcy9oZGQvYm9vdCIgJSBjcl93b3JrZGlyCisgICAgICAgIHJtX2NtZCA9ICJybSAtcmYgJXMiICUgY3Jfd29ya2RpcgorICAgICAgICBleGVjX2NtZChybV9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcy9FRkkvQk9PVCIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2dydWItZWZpJzoKKyAgICAgICAgICAgICAgICBjbHMuZG9fY29uZmlndXJlX2dydWJlZmkoaGRkZGlyLCBjcmVhdG9yLCBjcl93b3JrZGlyKQorICAgICAgICAgICAgZWxpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3VtbWlib290JzoKKyAgICAgICAgICAgICAgICBjbHMuZG9fY29uZmlndXJlX2d1bW1pYm9vdChoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJ1bnJlY29nbml6ZWQgYm9vdGltZy1lZmkgbG9hZGVyOiAlcyIgJSBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoImJvb3RpbWctZWZpIHJlcXVpcmVzIGEgbG9hZGVyLCBub25lIHNwZWNpZmllZCIpCisKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgcHJlcGFyZSBjb250ZW50IGZvciBhbiBFRkkgKGdydWIpIGJvb3QgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBnZXRfYml0YmFrZV92YXIoIkhERERJUiIpCisgICAgICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgSERERElSLCBleGl0aW5nXG4iKQorICAgICAgICAgICAgIyBqdXN0IHNvIHRoZSByZXN1bHQgbm90ZXMgZGlzcGxheSBpdAorICAgICAgICAgICAgY3JlYXRvci5zZXRfYm9vdGltZ19kaXIoYm9vdGltZ19kaXIpCisKKyAgICAgICAgc3RhZ2luZ19rZXJuZWxfZGlyID0ga2VybmVsX2RpcgorCisgICAgICAgIGhkZGRpciA9ICIlcy9oZGQvYm9vdCIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzL2J6SW1hZ2UgJXMvYnpJbWFnZSIgJSBcCisgICAgICAgICAgICAoc3RhZ2luZ19rZXJuZWxfZGlyLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdncnViLWVmaSc6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCIlcy9oZGQvYm9vdC9FRkkvQk9PVC9ncnViLmNmZyIgJSBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvZ3J1Yi5jZmciICUgY3Jfd29ya2RpcikKKyAgICAgICAgICAgICAgICBjcF9jbWQgPSAiY3AgJXMvRUZJL0JPT1QvKiAlcy9FRkkvQk9PVCIgJSAoYm9vdGltZ19kaXIsIGhkZGRpcikKKyAgICAgICAgICAgICAgICBleGVjX2NtZChjcF9jbWQsIFRydWUpCisgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoIiVzL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzL2hkZC9ib290L0VGSS9CT09UL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIpCisgICAgICAgICAgICBlbGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdndW1taWJvb3QnOgorICAgICAgICAgICAgICAgIGNwX2NtZCA9ICJjcCAlcy9FRkkvQk9PVC8qICVzL0VGSS9CT09UIiAlIChib290aW1nX2RpciwgaGRkZGlyKQorICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNwX2NtZCwgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoInVucmVjb2duaXplZCBib290aW1nLWVmaSBsb2FkZXI6ICVzIiAlIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiYm9vdGltZy1lZmkgcmVxdWlyZXMgYSBsb2FkZXIsIG5vbmUgc3BlY2lmaWVkIikKKworICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcyIgJSBoZGRkaXIKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBibG9ja3MgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgZXh0cmFfYmxvY2tzID0gcGFydC5nZXRfZXh0cmFfYmxvY2tfY291bnQoYmxvY2tzKQorCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IEJPT1RERF9FWFRSQV9TUEFDRToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IEJPT1RERF9FWFRSQV9TUEFDRQorCisgICAgICAgIGJsb2NrcyArPSBleHRyYV9ibG9ja3MKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykpCisKKyAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKyAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCisgICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKKworICAgICAgICAjIGRvc2ZzIGltYWdlLCBjcmVhdGVkIGJ5IG1rZG9zZnMKKyAgICAgICAgYm9vdGltZyA9ICIlcy9ib290LmltZyIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgLW4gZWZpIC1DICVzICVkIiAlIChib290aW1nLCBibG9ja3MpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChkb3Nmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIG1jb3B5X2NtZCA9ICJtY29weSAtaSAlcyAtcyAlcy8qIDo6LyIgJSAoYm9vdGltZywgaGRkZGlyKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWNvcHlfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBjaG1vZF9jbWQgPSAiY2htb2QgNjQ0ICVzIiAlIGJvb3RpbWcKKyAgICAgICAgZXhlY19jbWQoY2htb2RfY21kKQorCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSBib290aW1nCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYm9vdGltZ19zaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICBwYXJ0LnNldF9zaXplKGJvb3RpbWdfc2l6ZSkKKyAgICAgICAgcGFydC5zZXRfc291cmNlX2ZpbGUoYm9vdGltZykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGFydGl0aW9uLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wYXJ0aXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyY2EwZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGFydGl0aW9uLnB5CkBAIC0wLDAgKzEsMTQzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnYm9vdGltZy1wYXJ0aXRpb24nIHNvdXJjZSBwbHVnaW4gY2xhc3MgZm9yCisjICd3aWMnLiBUaGUgcGx1Z2luIGNyZWF0ZXMgYW4gaW1hZ2Ugb2YgYm9vdCBwYXJ0aXRpb24sIGNvcHlpbmcgb3ZlcgorIyBmaWxlcyBsaXN0ZWQgaW4gSU1BR0VfQk9PVF9GSUxFUyBiaXRiYWtlIHZhcmlhYmxlLgorIworIyBBVVRIT1JTCisjIE1hY2llaiBCb3J6ZWNraSA8bWFjaWVqLmJvcnplY2tpIChhdF0gb3Blbi1ybmQucGw+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZ2V0X2JpdGJha2VfdmFyCitmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKworY2xhc3MgQm9vdGltZ1BhcnRpdGlvblBsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSBhbiBpbWFnZSBvZiBib290IHBhcnRpdGlvbiwgY29weWluZyBvdmVyIGZpbGVzCisgICAgbGlzdGVkIGluIElNQUdFX0JPT1RfRklMRVMgYml0YmFrZSB2YXJpYWJsZS4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnYm9vdGltZy1wYXJ0aXRpb24nCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiBEbyBub3RoaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLiBQb3NzaWJseSBwcmVwYXJlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2Ygc29tZSBzb3J0LgorCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBkb2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIC0gc2V0cyB1cCBhIHZmYXQgcGFydGl0aW9uCisgICAgICAgIC0gY29waWVzIGFsbCBmaWxlcyBsaXN0ZWQgaW4gSU1BR0VfQk9PVF9GSUxFUyB2YXJpYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgaGRkZGlyID0gIiVzL2Jvb3QiICUgY3Jfd29ya2RpcgorICAgICAgICBybV9jbWQgPSAicm0gLXJmICVzL2Jvb3QiICUgY3Jfd29ya2RpcgorICAgICAgICBleGVjX2NtZChybV9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcyIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiKQorICAgICAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIERFUExPWV9ESVJfSU1BR0UsIGV4aXRpbmdcbiIpCisKKyAgICAgICAgbXNnZXIuZGVidWcoJ0Jvb3RpbWcgZGlyOiAlcycgJSBib290aW1nX2RpcikKKworICAgICAgICBib290X2ZpbGVzID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9CT09UX0ZJTEVTIikKKworICAgICAgICBpZiBub3QgYm9vdF9maWxlczoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdObyBib290IGZpbGVzIGRlZmluZWQsIElNQUdFX0JPT1RfRklMRVMgdW5zZXQnKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdCb290IGZpbGVzOiAlcycgJSBib290X2ZpbGVzKQorCisgICAgICAgICMgbGlzdCBvZiB0dXBsZXMgKHNyY19uYW1lLCBkc3RfbmFtZSkKKyAgICAgICAgZGVwbG95X2ZpbGVzID0gW10KKyAgICAgICAgZm9yIHNyY19lbnRyeSBpbiByZS5maW5kYWxsKHInW1x3O1wtXC4vXCpdKycsIGJvb3RfZmlsZXMpOgorICAgICAgICAgICAgaWYgJzsnIGluIHNyY19lbnRyeToKKyAgICAgICAgICAgICAgICBkc3RfZW50cnkgPSB0dXBsZShzcmNfZW50cnkuc3BsaXQoJzsnKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHN0X2VudHJ5WzBdIG9yIG5vdCBkc3RfZW50cnlbMV06CisgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdNYWxmb3JtZWQgYm9vdCBmaWxlIGVudHJ5OiAlcycgJSAoc3JjX2VudHJ5KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZHN0X2VudHJ5ID0gKHNyY19lbnRyeSwgc3JjX2VudHJ5KQorCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygnRGVzdGluYXRpb24gZW50cnk6ICVyJyAlIChkc3RfZW50cnksKSkKKyAgICAgICAgICAgIGRlcGxveV9maWxlcy5hcHBlbmQoZHN0X2VudHJ5KQorCisgICAgICAgIGZvciBkZXBsb3lfZW50cnkgaW4gZGVwbG95X2ZpbGVzOgorICAgICAgICAgICAgc3JjLCBkc3QgPSBkZXBsb3lfZW50cnkKKyAgICAgICAgICAgIGluc3RhbGxfdGFzayA9IFtdCisgICAgICAgICAgICBpZiAnKicgaW4gc3JjOgorICAgICAgICAgICAgICAgICMgYnkgZGVmYXVsdCBpbnN0YWxsIGZpbGVzIHVuZGVyIHRoZWlyIGJhc2VuYW1lCisgICAgICAgICAgICAgICAgZW50cnlfbmFtZV9mbiA9IG9zLnBhdGguYmFzZW5hbWUKKyAgICAgICAgICAgICAgICBpZiBkc3QgIT0gc3JjOgorICAgICAgICAgICAgICAgICAgICAjIHVubGVzcyBhIHRhcmdldCBuYW1lIHdhcyBnaXZlbiwgdGhlbiB0cmVhdCBuYW1lCisgICAgICAgICAgICAgICAgICAgICMgYXMgYSBkaXJlY3RvcnkgYW5kIGFwcGVuZCBhIGJhc2VuYW1lCisgICAgICAgICAgICAgICAgICAgIGVudHJ5X25hbWVfZm4gPSBsYW1iZGEgbmFtZTogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKG5hbWUpKQorCisgICAgICAgICAgICAgICAgc3JjcyA9IGdsb2Iob3MucGF0aC5qb2luKGJvb3RpbWdfZGlyLCBzcmMpKQorCisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoJ0dsb2JiZWQgc291cmNlczogJXMnICUgKCcsICcuam9pbihzcmNzKSkpCisgICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHNyY3M6CisgICAgICAgICAgICAgICAgICAgIGVudHJ5X2RzdF9uYW1lID0gZW50cnlfbmFtZV9mbihlbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbF90YXNrLmFwcGVuZCgoZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihoZGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9kc3RfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbnN0YWxsX3Rhc2sgPSBbKG9zLnBhdGguam9pbihib290aW1nX2Rpciwgc3JjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihoZGRkaXIsIGRzdCkpXQorCisgICAgICAgICAgICBmb3IgdGFzayBpbiBpbnN0YWxsX3Rhc2s6CisgICAgICAgICAgICAgICAgc3JjX3BhdGgsIGRzdF9wYXRoID0gdGFzaworICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCdJbnN0YWxsICVzIGFzICVzJyAlIChvcy5wYXRoLmJhc2VuYW1lKHNyY19wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X3BhdGgpKQorICAgICAgICAgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAtRCAlcyAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3JjX3BhdGgsIGRzdF9wYXRoKQorICAgICAgICAgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdQcmVwYXJlIGJvb3QgcGFydGl0aW9uIHVzaW5nIHJvb3RmcyBpbiAlcycgJSAoaGRkZGlyKSkKKyAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3Rmcyhjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgaGRkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBjYmlvcy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGNiaW9zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZWQ1NGQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBjYmlvcy5weQpAQCAtMCwwICsxLDIwMCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ2Jvb3RpbWctcGNiaW9zJyBzb3VyY2UgcGx1Z2luIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCisKK2Zyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgSW1hZ2VFcnJvcgorZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydCwgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2JpdGJha2VfdmFyLCBCT09URERfRVhUUkFfU1BBQ0UKKworY2xhc3MgQm9vdGltZ1BjYmlvc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSBNQlIgYm9vdCBwYXJ0aXRpb24gYW5kIGluc3RhbGwgc3lzbGludXggb24gaXQuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2Jvb3RpbWctcGNiaW9zJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgY3JlYXRvciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiAgSW4gdGhpcyBjYXNlLCB3ZSBpbnN0YWxsIHRoZSBNQlIuCisgICAgICAgICIiIgorICAgICAgICBtYnJmaWxlID0gIiVzL3N5c2xpbnV4LyIgJSBib290aW1nX2RpcgorICAgICAgICBpZiBjcmVhdG9yLnB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJzoKKyAgICAgICAgICAgIG1icmZpbGUgKz0gIm1ici5iaW4iCisgICAgICAgIGVsaWYgY3JlYXRvci5wdGFibGVfZm9ybWF0ID09ICdncHQnOgorICAgICAgICAgICAgbWJyZmlsZSArPSAiZ3B0bWJyLmJpbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJVbnN1cHBvcnRlZCBwYXJ0aXRpb24gdGFibGU6ICVzIiAlIGNyZWF0b3IucHRhYmxlX2Zvcm1hdCkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWJyZmlsZSk6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAlcy4gIElmIHVzaW5nIHRoZSAtZSBvcHRpb24sIGRvIHlvdSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiaGF2ZSB0aGUgcmlnaHQgTUFDSElORSBzZXQgaW4gbG9jYWwuY29uZj8gIElmIG5vdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgImlzIHRoZSBib290aW1nX2RpciBwYXRoIGNvcnJlY3Q/IiAlIG1icmZpbGUpCisKKyAgICAgICAgZnVsbF9wYXRoID0gY3JlYXRvci5fZnVsbF9wYXRoKHdvcmtkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgIG1zZ2VyLmRlYnVnKCJJbnN0YWxsaW5nIE1CUiBvbiBkaXNrICVzIGFzICVzIHdpdGggc2l6ZSAlcyBieXRlcyIgXAorICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCisKKyAgICAgICAgcmNvZGUgPSBydW5uZXIuc2hvdyhbJ2RkJywgJ2lmPSVzJyAlIG1icmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvZj0lcycgJSBmdWxsX3BhdGgsICdjb252PW5vdHJ1bmMnXSkKKyAgICAgICAgaWYgcmNvZGUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoIlVuYWJsZSB0byBzZXQgTUJSIHRvICVzIiAlIGZ1bGxfcGF0aCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBjcmVhdGVzIHN5c2xpbnV4IGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgaGRkZGlyID0gIiVzL2hkZC9ib290IiAlIGNyX3dvcmtkaXIKKyAgICAgICAgcm1fY21kID0gInJtIC1yZiAiICsgY3Jfd29ya2RpcgorICAgICAgICBleGVjX2NtZChybV9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcyIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICIvaGRkL2Jvb3Qvc3BsYXNoLmpwZyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNwbGFzaCk6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIm1lbnUgYmFja2dyb3VuZCBzcGxhc2guanBnIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICIiCisKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICBzeXNsaW51eF9jb25mID0gIiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiUFJPTVBUIDBcbiIKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChjcmVhdG9yLmtzKQorICAgICAgICBpZiBub3QgdGltZW91dDoKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlRJTUVPVVQgIiArIHN0cih0aW1lb3V0KSArICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkFMTE9XT1BUSU9OUyAxXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlNFUklBTCAwIDExNTIwMFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJcbiIKKyAgICAgICAgaWYgc3BsYXNobGluZToKKyAgICAgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIiVzXG4iICUgc3BsYXNobGluZQorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJERUZBVUxUIGJvb3RcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiTEFCRUwgYm9vdFxuIgorCisgICAgICAgIGtlcm5lbCA9ICIvdm1saW51eiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiS0VSTkVMICIgKyBrZXJuZWwgKyAiXG4iCisKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQVBQRU5EIGxhYmVsPWJvb3Qgcm9vdD0lcyAlc1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0b3Iucm9vdGRldiwgb3B0aW9ucykKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBzeXNsaW51eCBjb25maWcgJXMvaGRkL2Jvb3Qvc3lzbGludXguY2ZnIiBcCisgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgY2ZnID0gb3BlbigiJXMvaGRkL2Jvb3Qvc3lzbGludXguY2ZnIiAlIGNyX3dvcmtkaXIsICJ3IikKKyAgICAgICAgY2ZnLndyaXRlKHN5c2xpbnV4X2NvbmYpCisgICAgICAgIGNmZy5jbG9zZSgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHByZXBhcmUgY29udGVudCBmb3IgbGVnYWN5IGJpb3MgYm9vdCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBkZWYgX2hhc19zeXNsaW51eChkaXJuYW1lKToKKyAgICAgICAgICAgIGlmIGRpcm5hbWU6CisgICAgICAgICAgICAgICAgc3lzbGludXggPSAiJXMvc3lzbGludXgiICUgZGlybmFtZQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN5c2xpbnV4KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5vdCBfaGFzX3N5c2xpbnV4KGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJTVEFHSU5HX0RBVEFESVIiKQorICAgICAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIFNUQUdJTkdfREFUQURJUiwgZXhpdGluZ1xuIikKKyAgICAgICAgICAgIGlmIG5vdCBfaGFzX3N5c2xpbnV4KGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiUGxlYXNlIGJ1aWxkIHN5c2xpbnV4IGZpcnN0XG4iKQorICAgICAgICAgICAgIyBqdXN0IHNvIHRoZSByZXN1bHQgbm90ZXMgZGlzcGxheSBpdAorICAgICAgICAgICAgY3JlYXRvci5zZXRfYm9vdGltZ19kaXIoYm9vdGltZ19kaXIpCisKKyAgICAgICAgc3RhZ2luZ19rZXJuZWxfZGlyID0ga2VybmVsX2RpcgorCisgICAgICAgIGhkZGRpciA9ICIlcy9oZGQvYm9vdCIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzL2J6SW1hZ2UgJXMvdm1saW51eiIgXAorICAgICAgICAgICAgJSAoc3RhZ2luZ19rZXJuZWxfZGlyLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gNDQ0ICVzL3N5c2xpbnV4L2xkbGludXguc3lzICVzL2xkbGludXguc3lzIiBcCisgICAgICAgICAgICAlIChib290aW1nX2RpciwgaGRkZGlyKQorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcyIgJSBoZGRkaXIKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBibG9ja3MgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgZXh0cmFfYmxvY2tzID0gcGFydC5nZXRfZXh0cmFfYmxvY2tfY291bnQoYmxvY2tzKQorCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IEJPT1RERF9FWFRSQV9TUEFDRToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IEJPT1RERF9FWFRSQV9TUEFDRQorCisgICAgICAgIGJsb2NrcyArPSBleHRyYV9ibG9ja3MKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykpCisKKyAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKyAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCisgICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKKworICAgICAgICAjIGRvc2ZzIGltYWdlLCBjcmVhdGVkIGJ5IG1rZG9zZnMKKyAgICAgICAgYm9vdGltZyA9ICIlcy9ib290LmltZyIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgLW4gYm9vdCAtUyA1MTIgLUMgJXMgJWQiICUgKGJvb3RpbWcsIGJsb2NrcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgbWNvcHlfY21kID0gIm1jb3B5IC1pICVzIC1zICVzLyogOjovIiAlIChib290aW1nLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChtY29weV9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIHN5c2xpbnV4X2NtZCA9ICJzeXNsaW51eCAlcyIgJSBib290aW1nCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChzeXNsaW51eF9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgYm9vdGltZworICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCisKKyAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIGJvb3RpbWcKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBib290aW1nX3NpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIHBhcnQuc2V0X3NpemUoYm9vdGltZ19zaXplKQorICAgICAgICBwYXJ0LnNldF9zb3VyY2VfZmlsZShib290aW1nKQorCisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2ZzaW1hZ2UucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9mc2ltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OTRlODkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9mc2ltYWdlLnB5CkBAIC0wLDAgKzEsNzMgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgb3MKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgorCitjbGFzcyBGU0ltYWdlUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQWRkIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZXN5c3RlbSBpbWFnZSB0byB0aGUgcGFydGl0aW9uIGxheW91dC4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnZnNpbWFnZScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuIERvIG5vdGhpbmcuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkuIFBvc3NpYmx5IHByZXBhcmUKKyAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBvZiBzb21lIHNvcnQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIikKKyAgICAgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBERVBMT1lfRElSX0lNQUdFLCBleGl0aW5nXG4iKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdCb290aW1nIGRpcjogJXMnICUgYm9vdGltZ19kaXIpCisKKyAgICAgICAgaWYgJ2ZpbGUnIG5vdCBpbiBzb3VyY2VfcGFyYW1zOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIk5vIGZpbGUgc3BlY2lmaWVkXG4iKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKGJvb3RpbWdfZGlyLCBzb3VyY2VfcGFyYW1zWydmaWxlJ10pCisKKworICAgICAgICBtc2dlci5kZWJ1ZygnUHJlcGFyaW5nIHBhcnRpdGlvbiB1c2luZyBpbWFnZSAlcycgJSAoc3JjKSkKKyAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3Rmc19mcm9tX2ZzX2ltYWdlKGNyX3dvcmtkaXIsIHNyYywgIiIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9pc29pbWFnZS1pc29oeWJyaWQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9pc29pbWFnZS1pc29oeWJyaWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3MmQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2lzb2ltYWdlLWlzb2h5YnJpZC5weQpAQCAtMCwwICsxLDUzOCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnaXNvaW1hZ2UtaXNvaHlicmlkJyBzb3VyY2UgcGx1Z2luIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIE1paGFseSBWYXJnYSA8bWloYWx5LnZhcmdhIChhdF0gbmkuY29tPgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0LCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBnZXRfYml0YmFrZV92YXIKKworY2xhc3MgSXNvSW1hZ2VQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSBib290YWJsZSBJU08gaW1hZ2UKKworICAgIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYSBoeWJyaWQsIGxlZ2FjeSBhbmQgRUZJIGJvb3RhYmxlIElTTyBpbWFnZS4gVGhlCisgICAgZ2VuZXJhdGVkIGltYWdlIGNhbiBiZSB1c2VkIG9uIG9wdGljYWwgbWVkaWEgYXMgd2VsbCBhcyBVU0IgbWVkaWEuCisKKyAgICBMZWdhY3kgYm9vdCB1c2VzIHN5c2xpbnV4IGFuZCBFRkkgYm9vdCB1c2VzIGdydWIgb3IgZ3VtbWlib290IChub3QKKyAgICBpbXBsZW1lbnRlZCB5ZXQpIGFzIGJvb3Rsb2FkZXIuIFRoZSBwbHVnaW4gY3JlYXRlcyB0aGUgZGlyZWN0b3JpZXMgcmVxdWlyZWQKKyAgICBieSBib290bG9hZGVycyBhbmQgcG9wdWxhdGVzIHRoZW0gYnkgY3JlYXRpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZQorICAgIGJvb3Rsb2FkZXIgZmlsZXMuCisKKyAgICBFeGFtcGxlIGtpY2tzdGFydCBmaWxlOgorICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgaXNvaW1hZ2UtaXNvaHlicmlkIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9Z3J1Yi1lZmksIFxcCisgICAgaW1hZ2VfbmFtZT0gSXNvSW1hZ2UiIC0tb25kaXNrIGNkIC0tbGFiZWwgTElWRUNEIC0tZnN0eXBlPWV4dDIKKyAgICBib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSIgIgorCisgICAgSW4gLS1zb3VyY2VwYXJhbXMgImxvYWRlciIgc3BlY2lmaWVzIHRoZSBib290bG9hZGVyIHVzZWQgZm9yIGJvb3RpbmcgaW4gRUZJCisgICAgbW9kZSwgd2hpbGUgImltYWdlX25hbWUiIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGltYWdlLiBJbiB0aGUKKyAgICBleGFtcGxlIGFib3ZlLCB3aWMgY3JlYXRlcyBhbiBJU08gaW1hZ2UgbmFtZWQgSXNvSW1hZ2UtY2QuZGlyZWN0IChkZWZhdWx0CisgICAgZXh0ZW5zaW9uIGFkZGVkIGJ5IGRpcmVjdCBpbWVnZXIgcGx1Z2luKSBhbmQgYSBmaWxlIG5hbWVkIElzb0ltYWdlLWNkLmlzbworICAgICIiIgorCisgICAgbmFtZSA9ICdpc29pbWFnZS1pc29oeWJyaWQnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3N5c2xpbnV4KGNscywgY3JlYXRvciwgY3Jfd29ya2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChzeXNsaW51eCkgY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIi9JU08vYm9vdC9zcGxhc2guanBnIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3BsYXNoKToKKyAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAibWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5qcGciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIiIKKworICAgICAgICBvcHRpb25zID0gY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoY3JlYXRvci5rcywgMTApCisKKyAgICAgICAgc3lzbGludXhfY29uZiA9ICIiCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlBST01QVCAwXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlRJTUVPVVQgJXMgXG4iICUgdGltZW91dAorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQUxMT1dPUFRJT05TIDFcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiU0VSSUFMIDAgMTE1MjAwXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlxuIgorICAgICAgICBpZiBzcGxhc2hsaW5lOgorICAgICAgICAgICAgc3lzbGludXhfY29uZiArPSAiJXNcbiIgJSBzcGxhc2hsaW5lCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkRFRkFVTFQgYm9vdFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJMQUJFTCBib290XG4iCisKKyAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJLRVJORUwgIiArIGtlcm5lbCArICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQVBQRU5EIGluaXRyZD0vaW5pdHJkIExBQkVMPWJvb3QgJXNcbiIgJSBvcHRpb25zCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgc3lzbGludXggY29uZmlnICVzL0lTTy9pc29saW51eC9pc29saW51eC5jZmciIFwKKyAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICB3aXRoIG9wZW4oIiVzL0lTTy9pc29saW51eC9pc29saW51eC5jZmciICUgY3Jfd29ya2RpciwgInciKSBhcyBjZmc6CisgICAgICAgICAgICBjZmcud3JpdGUoc3lzbGludXhfY29uZikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfZ3J1YmVmaShjbHMsIHBhcnQsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3J1Yi1lZmkpIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICIvRUZJL2Jvb3Qvc3BsYXNoLmpwZyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNwbGFzaCk6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIm1lbnUgYmFja2dyb3VuZCBzcGxhc2guanBnIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICIiCisKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICBncnViZWZpX2NvbmYgPSAiIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAiCisgICAgICAgIGdydWJlZmlfY29uZiArPSAiLS1wYXJpdHk9bm8gLS1zdG9wPTFcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJkZWZhdWx0PWJvb3RcbiIKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChjcmVhdG9yLmtzLCAxMCkKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ0aW1lb3V0PSVzXG4iICUgdGltZW91dAorICAgICAgICBncnViZWZpX2NvbmYgKz0gIlxuIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlYXJjaCAtLXNldD1yb290IC0tbGFiZWwgJXMgIiAlIHBhcnQubGFiZWwKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJtZW51ZW50cnkgJ2Jvb3Qne1xuIgorCisgICAgICAgIGtlcm5lbCA9ICIvYnpJbWFnZSIKKworICAgICAgICBncnViZWZpX2NvbmYgKz0gImxpbnV4ICVzIHJvb3R3YWl0ICVzXG4iIFwKKyAgICAgICAgICAgICUgKGtlcm5lbCwgb3B0aW9ucykKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJpbml0cmQgL2luaXRyZCBcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ9XG4iCisKKyAgICAgICAgaWYgc3BsYXNobGluZToKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAiJXNcbiIgJSBzcGxhc2hsaW5lCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgZ3J1YmVmaSBjb25maWcgJXMvRUZJL0JPT1QvZ3J1Yi5jZmciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgd2l0aCBvcGVuKCIlcy9FRkkvQk9PVC9ncnViLmNmZyIgJSBjcl93b3JrZGlyLCAidyIpIGFzIGNmZzoKKyAgICAgICAgICAgIGNmZy53cml0ZShncnViZWZpX2NvbmYpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9idWlsZF9pbml0cmFtZnNfcGF0aChyb290ZnNfZGlyLCBjcl93b3JrZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBwYXRoIGZvciBpbml0cmFtZnMgaW1hZ2UKKyAgICAgICAgIiIiCisKKyAgICAgICAgaW5pdHJkID0gZ2V0X2JpdGJha2VfdmFyKCJJTklUUkQiKQorICAgICAgICBpZiBub3QgaW5pdHJkOgorICAgICAgICAgICAgaW5pdHJkX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIpCisgICAgICAgICAgICBpZiBub3QgaW5pdHJkX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBERVBMT1lfRElSX0lNQUdFLCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgaW1hZ2VfbmFtZSA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfQkFTRU5BTUUiKQorICAgICAgICAgICAgaWYgbm90IGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgSU1BR0VfQkFTRU5BTUUsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICBpbWFnZV90eXBlID0gZ2V0X2JpdGJha2VfdmFyKCJJTklUUkFNRlNfRlNUWVBFUyIpCisgICAgICAgICAgICBpZiBub3QgaW1hZ2VfdHlwZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBJTklUUkFNRlNfRlNUWVBFUywgZXhpdGluZy5cbiIpCisKKyAgICAgICAgICAgIG1hY2hpbmVfYXJjaCA9IGdldF9iaXRiYWtlX3ZhcigiTUFDSElORV9BUkNIIikKKyAgICAgICAgICAgIGlmIG5vdCBtYWNoaW5lX2FyY2g6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgTUFDSElORV9BUkNILCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgaW5pdHJkID0gIiVzLyVzLWluaXRyYW1mcy0lcy4lcyIgXAorICAgICAgICAgICAgICAgICAgICAlIChpbml0cmRfZGlyLCBpbWFnZV9uYW1lLCBtYWNoaW5lX2FyY2gsIGltYWdlX3R5cGUpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGluaXRyZCk6CisgICAgICAgICAgICAjIENyZWF0ZSBpbml0cmQgZnJvbSByb290ZnMgZGlyZWN0b3J5CisgICAgICAgICAgICBpbml0cmQgPSAiJXMvaW5pdHJkLmNwaW8uZ3oiICUgY3Jfd29ya2RpcgorICAgICAgICAgICAgaW5pdHJkX2RpciA9ICIlcy9JTklUUkQiICUgY3Jfd29ya2RpcgorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKCIlcyIgJSByb290ZnNfZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAlIGluaXRyZF9kaXIsIHN5bWxpbmtzPVRydWUpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCIlcy9pbml0IiAlIHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MigiJXMvaW5pdCIgJSByb290ZnNfZGlyLCAiJXMvaW5pdCIgJSBpbml0cmRfZGlyKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoIiVzL2luaXQiICUgcm9vdGZzX2Rpcik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5yZWFkbGluaygiJXMvaW5pdCIgJSByb290ZnNfZGlyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy9pbml0IiAlIGluaXRyZF9kaXIpCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKCIlcy9zYmluL2luaXQiICUgcm9vdGZzX2Rpcik6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKCIlcy9zYmluL2luaXQiICUgcm9vdGZzX2RpciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgJSBpbml0cmRfZGlyKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoIiVzL3NiaW4vaW5pdCIgJSByb290ZnNfZGlyKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnJlYWRsaW5rKCIlcy9zYmluL2luaXQiICUgcm9vdGZzX2RpciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvaW5pdCIgJSBpbml0cmRfZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBvciBidWlsZCBpbml0cmQsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICBleGVjX2NtZCgiY2QgJXMgJiYgZmluZCAuIHwgY3BpbyAtbyAtSCBuZXdjID4lcy9pbml0cmQuY3BpbyAiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoaW5pdHJkX2RpciwgY3Jfd29ya2RpciksIGFzX3NoZWxsPVRydWUpCisgICAgICAgICAgICBleGVjX2NtZCgiZ3ppcCAtZiAtOSAtYyAlcy9pbml0cmQuY3BpbyA+ICVzIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGNyX3dvcmtkaXIsIGluaXRyZCksIGFzX3NoZWxsPVRydWUpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGluaXRyZF9kaXIpCisKKyAgICAgICAgcmV0dXJuIGluaXRyZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3N0YWdlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBTcGVjaWFsIGNvbnRlbnQgc3RhZ2luZyBjYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkuCisgICAgICAgIEl0IGNoZWtzIGlmIGFsbCBuZWNlc3NhcnkgdG9vbHMgYXJlIGF2YWlsYWJsZSwgaWYgbm90CisgICAgICAgIHRyaWVzIHRvIGluc3RhbCB0aGVtLgorICAgICAgICAiIiIKKyAgICAgICAgIyBNYWtlIHN1cmUgcGFydGVkIGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL3Vzci9zYmluL3BhcnRlZCIgJSBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBwYXJ0ZWQtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgcGFydGVkLW5hdGl2ZSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgbWtmcy5leHQyLzMvNCBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy9zYmluL21rZnMuZXh0MiIgJSBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBlMmZzcHJvZ3MtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgZTJmc3Byb2dzLW5hdGl2ZSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgc3lzbGludXggaXMgYXZhaWxhYmxlIGluIHN5c3Jvb3QgYW5kIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIHN5c2xpbnV4X2RpciA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19EQVRBRElSIikKKyAgICAgICAgaWYgbm90IHN5c2xpbnV4X2RpcjoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIFNUQUdJTkdfREFUQURJUiwgZXhpdGluZy5cbiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiJXMvc3lzbGludXgiICUgc3lzbGludXhfZGlyKToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIHN5c2xpbnV4Li4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2Ugc3lzbGludXgiKQorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgc3lzbGludXgtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2Ugc3lzbGludXgtbmF0aXZlIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcy9zeXNsaW51eCIgJSBzeXNsaW51eF9kaXIpOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlBsZWFzZSBidWlsZCBzeXNsaW51eCBmaXJzdFxuIikKKworICAgICAgICAjTWFrZSBzdXJlIG1raXNvZnMgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvdXNyL2Jpbi9ta2lzb2ZzIiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIGNkcnRvb2xzLW5hdGl2ZS4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIGNkcnRvb2xzLW5hdGl2ZSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgbWtmcy52ZmF0IGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL3NiaW4vbWtmcy52ZmF0IiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIGRvc2ZzdG9vbHMtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgZG9zZnN0b29scy1uYXRpdmUiKQorCisgICAgICAgICMgTWFrZSBzdXJlIG10b29scyBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy91c3IvYmluL21jb3B5IiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIG10b29scy1uYXRpdmUuLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBtdG9vbHMtbmF0aXZlIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBjcmVhdGVzIGxvYWRlci1zcGVjaWZpYyBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIGlzb2RpciA9ICIlcy9JU08vIiAlIGNyX3dvcmtkaXIKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjcl93b3JrZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoY3Jfd29ya2RpcikKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzICIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgIyBPdmVyd3JpdGUgdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZWQgaW1hZ2UKKyAgICAgICAgbXNnZXIuZGVidWcoIiVzIiAlIHNvdXJjZV9wYXJhbXMpCisgICAgICAgIGlmICdpbWFnZV9uYW1lJyBpbiBzb3VyY2VfcGFyYW1zIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9wYXJhbXNbJ2ltYWdlX25hbWUnXS5zdHJpcCgpOgorICAgICAgICAgICAgY3JlYXRvci5uYW1lID0gc291cmNlX3BhcmFtc1snaW1hZ2VfbmFtZSddLnN0cmlwKCkKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgaXM6ICVzIiAlIGNyZWF0b3IubmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgcHJlcGFyZSBjb250ZW50IGZvciBhIGJvb3RhYmxlIElTTyBpbWFnZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaXNvZGlyID0gIiVzL0lTTyIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgaWYgcGFydC5yb290ZnMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCAnUk9PVEZTX0RJUicgaW4gcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXIsIGV4aXRpbmcuXG4iKQorICAgICAgICAgICAgcm9vdGZzX2RpciA9IHJvb3Rmc19kaXJbJ1JPT1RGU19ESVInXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGFydC5yb290ZnMgaW4gcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0gcm9vdGZzX2RpcltwYXJ0LnJvb3Rmc10KKyAgICAgICAgICAgIGVsaWYgcGFydC5yb290ZnM6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IHBhcnQucm9vdGZzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpcj0lcyBjb25uZWN0aW9uICIKKyAgICAgICAgICAgICAgICBtc2cgKz0gIm9yIGl0IGlzIG5vdCBhIHZhbGlkIHBhdGgsIGV4aXRpbmcuXG4iCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnICUgcGFydC5yb290ZnMpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICByb290ZnNfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9ST09URlMiKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIElNQUdFX1JPT1RGUywgZXhpdGluZy5cbiIpCisKKyAgICAgICAgcGFydC5zZXRfcm9vdGZzKHJvb3Rmc19kaXIpCisKKyAgICAgICAgIyBQcmVwYXJlIHJvb3Rmcy5pbWcKKyAgICAgICAgaGRkX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSERERElSIikKKyAgICAgICAgaW1nX2lzb19kaXIgPSBnZXRfYml0YmFrZV92YXIoIklTT0RJUiIpCisKKyAgICAgICAgcm9vdGZzX2ltZyA9ICIlcy9yb290ZnMuaW1nIiAlIGhkZF9kaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHJvb3Rmc19pbWcpOgorICAgICAgICAgICAgcm9vdGZzX2ltZyA9ICIlcy9yb290ZnMuaW1nIiAlIGltZ19pc29fZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShyb290ZnNfaW1nKToKKyAgICAgICAgICAgICMgY2hlY2sgaWYgcm9vdGZzLmltZyBpcyBpbiBkZXBsb3lkaXIKKyAgICAgICAgICAgIGRlcGxveV9kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiKQorICAgICAgICAgICAgaW1hZ2VfbmFtZSA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfTElOS19OQU1FIikKKyAgICAgICAgICAgIHJvb3Rmc19pbWcgPSAiJXMvJXMuJXMiIFwKKyAgICAgICAgICAgICAgICAlIChkZXBsb3lfZGlyLCBpbWFnZV9uYW1lLCBwYXJ0LmZzdHlwZSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocm9vdGZzX2ltZyk6CisgICAgICAgICAgICAjIGNyZWF0ZSBpbWFnZSBmaWxlIHdpdGggdHlwZSBzcGVjaWZpZWQgYnkgLS1mc3R5cGUKKyAgICAgICAgICAgICMgd2hpY2ggY29udGFpbnMgcm9vdGZzCisgICAgICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcyIgJSByb290ZnNfZGlyCisgICAgICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgICAgICBwYXJ0LnNldF9zaXplKGludChvdXQuc3BsaXQoKVswXSkpCisgICAgICAgICAgICBwYXJ0LmV4dHJhX3NwYWNlID0gMAorICAgICAgICAgICAgcGFydC5vdmVyaGVhZF9mYWN0b3IgPSAxLjIKKyAgICAgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnMoY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICAgICByb290ZnNfaW1nID0gcGFydC5zb3VyY2VfZmlsZQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAlcyAlcy9yb290ZnMuaW1nIiBcCisgICAgICAgICAgICAlIChyb290ZnNfaW1nLCBpc29kaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkIGJ5IHBhcnQucHJlcGFyZV9yb290ZnMoKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXJ0LnNvdXJjZV9maWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShwYXJ0LnNvdXJjZV9maWxlKQorCisgICAgICAgICMgUHJlcGFyZSBpbml0aWFsIHJhbWRpc2sKKyAgICAgICAgaW5pdHJkID0gIiVzL2luaXRyZCIgJSBoZGRfZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShpbml0cmQpOgorICAgICAgICAgICAgaW5pdHJkID0gIiVzL2luaXRyZCIgJSBpbWdfaXNvX2RpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoaW5pdHJkKToKKyAgICAgICAgICAgIGluaXRyZCA9IGNscy5fYnVpbGRfaW5pdHJhbWZzX3BhdGgocm9vdGZzX2RpciwgY3Jfd29ya2RpcikKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMgJXMvaW5pdHJkIiBcCisgICAgICAgICAgICAlIChpbml0cmQsIGlzb2RpcikKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQgYnkgX2J1aWxkX2luaXRyYW1mc19wYXRoIGZ1bmN0aW9uCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCIlcy9pbml0cmQuY3Bpby5neiIgJSBjcl93b3JrZGlyKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgiJXMvaW5pdHJkLmNwaW8uZ3oiICUgY3Jfd29ya2RpcikKKworICAgICAgICAjIEluc3RhbGwgYnpJbWFnZQorICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMvYnpJbWFnZSAlcy9iekltYWdlIiAlIFwKKyAgICAgICAgICAgIChrZXJuZWxfZGlyLCBpc29kaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICNDcmVhdGUgYm9vdGxvYWRlciBmb3IgZWZpIGJvb3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2dydWItZWZpJzoKKyAgICAgICAgICAgICAgICAjIEJ1aWxkcyBncnViLmNmZyBpZiBJU09ESVIgZGlkbid0IGV4aXN0IG9yCisgICAgICAgICAgICAgICAgIyBkaWRuJ3QgY29udGFpbnMgZ3J1Yi5jZmcKKyAgICAgICAgICAgICAgICBib290aW1nX2RpciA9IGltZ19pc29fZGlyCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcy9FRkkvQk9PVCIgJSBib290aW1nX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gIiVzL2Jvb3RpbWciICUgY3Jfd29ya2RpcgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhib290aW1nX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGJvb3RpbWdfZGlyKQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL0VGSS9CT09UIiAlIGJvb3RpbWdfZGlyCisgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy9FRkkvQk9PVC9ib290LmNmZyIgJSBib290aW1nX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNscy5kb19jb25maWd1cmVfZ3J1YmVmaShwYXJ0LCBjcmVhdG9yLCBib290aW1nX2RpcikKKworICAgICAgICAgICAgICAgICMgQnVpbGRzIGJvb3R4NjQuZWZpL2Jvb3RpYTMyLmVmaSBpZiBJU09ESVIgZGlkbid0IGV4aXN0IG9yCisgICAgICAgICAgICAgICAgIyBkaWRuJ3QgY29udGFpbnMgaXQKKyAgICAgICAgICAgICAgICB0YXJnZXRfYXJjaCA9IGdldF9iaXRiYWtlX3ZhcigiVEFSR0VUX1NZUyIpCisgICAgICAgICAgICAgICAgaWYgbm90IHRhcmdldF9hcmNoOgorICAgICAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ29sdWRuJ3QgZmluZCB0YXJnZXQgYXJjaGl0ZWN0dXJlXG4iKQorCisgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goIng4Nl82NCIsIHRhcmdldF9hcmNoKToKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl90YXJnZXQgPSAneDg2XzY0LWVmaScKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9pbWFnZSA9ICJib290eDY0LmVmaSIKKyAgICAgICAgICAgICAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0X2FyY2gpOgorICAgICAgICAgICAgICAgICAgICBncnViX3RhcmdldCA9ICdpMzg2LWVmaScKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9pbWFnZSA9ICJib290aWEzMi5lZmkiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoImdydWItZWZpIGlzIGluY29tcGF0aWJsZSB3aXRoIHRhcmdldCAlc1xuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgdGFyZ2V0X2FyY2gpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL0VGSS9CT09ULyVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGJvb3RpbWdfZGlyLCBncnViX2ltYWdlKSk6CisgICAgICAgICAgICAgICAgICAgIGdydWJfcGF0aCA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19MSUJESVIiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ3J1Yl9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgU1RBR0lOR19MSUJESVIsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICAgICAgICAgIGdydWJfY29yZSA9ICIlcy9ncnViLyVzIiAlIChncnViX3BhdGgsIGdydWJfdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZ3J1Yl9jb3JlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIGdydWItZWZpLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgZ3J1Yi1lZmkiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZ3J1Yl9jb3JlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJQbGVhc2UgYnVpbGQgZ3J1Yi1lZmkgZmlyc3RcbiIpCisKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgPSAiZ3J1Yi1ta2ltYWdlIC1wICcvRUZJL0JPT1QnICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIi1kICVzICIgICUgZ3J1Yl9jb3JlCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICItTyAlcyAtbyAlcy9FRkkvQk9PVC8lcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZ3J1Yl90YXJnZXQsIGJvb3RpbWdfZGlyLCBncnViX2ltYWdlKQorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAicGFydF9ncHQgcGFydF9tc2RvcyBudGZzIG50ZnNjb21wIGZhdCBleHQyICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIm5vcm1hbCBjaGFpbiBib290IGNvbmZpZ2ZpbGUgbGludXggbXVsdGlib290ICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gInNlYXJjaCBlZmlfZ29wIGVmaV91Z2EgZm9udCBnZnh0ZXJtIGdmeG1lbnUgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAidGVybWluYWwgbWluaWNtZCB0ZXN0IGlvcncgbG9hZGVudiBlY2hvIGhlbHAgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAicmVib290IHNlcmlhbCB0ZXJtaW5mbyBpc285NjYwIGxvb3BiYWNrIHRhciAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJtZW1kaXNrIGxzIHNlYXJjaF9mc191dWlkIHVkZiBidHJmcyB4ZnMgbHZtICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gInJlaXNlcmZzIGF0YSAiCisgICAgICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChncnViX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUT0RPOiBpbnNlcnQgZ3VtbWlib290IHN0dWZmCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoInVucmVjb2duaXplZCBib290aW1nLWVmaSBsb2FkZXI6ICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoImJvb3RpbWctZWZpIHJlcXVpcmVzIGEgbG9hZGVyLCBub25lIHNwZWNpZmllZCIpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzL0VGSS9CT09UIiAlIGlzb2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKCIlcy9FRkkvQk9PVCIgJSBpc29kaXIpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGJvb3RpbWdfZGlyKyIvRUZJL0JPT1QiLCBpc29kaXIrIi9FRkkvQk9PVCIpCisKKyAgICAgICAgIyBJZiBleGlzdHMsIHJlbW92ZSBjcl93b3JrZGlyL2Jvb3RpbWcgdGVtcG9yYXJ5IGZvbGRlcgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiJXMvYm9vdGltZyIgJSBjcl93b3JrZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoIiVzL2Jvb3RpbWciICUgY3Jfd29ya2RpcikKKworICAgICAgICAjIENyZWF0ZSBlZmkuaW1nIHRoYXQgY29udGFpbnMgYm9vdGxvYWRlciBmaWxlcyBmb3IgRUZJIGJvb3RpbmcKKyAgICAgICAgIyBpZiBJU09ESVIgZGlkbid0IGV4aXN0IG9yIGRpZG4ndCBjb250YWlucyBpdAorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSgiJXMvZWZpLmltZyIgJSBpbWdfaXNvX2Rpcik6CisgICAgICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMvZWZpLmltZyAlcy9lZmkuaW1nIiAlIFwKKyAgICAgICAgICAgICAgICAoaW1nX2lzb19kaXIsIGlzb2RpcikKKyAgICAgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMvRUZJIiAlIGlzb2RpcgorICAgICAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICAgICAgYmxvY2tzID0gaW50KG91dC5zcGxpdCgpWzBdKQorICAgICAgICAgICAgIyBBZGQgc29tZSBleHRyYSBzcGFjZSBmb3IgZmlsZSBzeXN0ZW0gb3ZlcmhlYWQKKyAgICAgICAgICAgIGJsb2NrcyArPSAxMDAKKyAgICAgICAgICAgIG1zZyA9ICJBZGRlZCAxMDAgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAocGFydC5tb3VudHBvaW50LCBibG9ja3MpCisgICAgICAgICAgICBtc2dlci5kZWJ1Zyhtc2cpCisKKyAgICAgICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisgICAgICAgICAgICAjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisgICAgICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCisgICAgICAgICAgICAjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKyAgICAgICAgICAgIGJsb2NrcyArPSAoMTYgLSAoYmxvY2tzICUgMTYpKQorCisgICAgICAgICAgICAjIGRvc2ZzIGltYWdlIGZvciBFRkkgYm9vdAorICAgICAgICAgICAgYm9vdGltZyA9ICIlcy9lZmkuaW1nIiAlIGlzb2RpcgorCisgICAgICAgICAgICBkb3Nmc19jbWQgPSAnbWtmcy52ZmF0IC1uICJFRklpbWciIC1TIDUxMiAtQyAlcyAlZCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSAoYm9vdGltZywgYmxvY2tzKQorICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIG1tZF9jbWQgPSAibW1kIC1pICVzIDo6L0VGSSIgJSBib290aW1nCisgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQobW1kX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIG1jb3B5X2NtZCA9ICJtY29weSAtaSAlcyAtcyAlcy9FRkkvKiA6Oi9FRkkvIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIChib290aW1nLCBpc29kaXIpCisgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQobWNvcHlfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgY2htb2RfY21kID0gImNobW9kIDY0NCAlcyIgJSBib290aW1nCisgICAgICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCisKKyAgICAgICAgIyBQcmVwYXJlIGZpbGVzIGZvciBsZWdhY3kgYm9vdAorICAgICAgICBzeXNsaW51eF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfREFUQURJUiIpCisgICAgICAgIGlmIG5vdCBzeXNsaW51eF9kaXI6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBTVEFHSU5HX0RBVEFESVIsIGV4aXRpbmcuXG4iKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIlcy9pc29saW51eCIgJSBpc29kaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgiJXMvaXNvbGludXgiICUgaXNvZGlyKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvaXNvbGludXgiICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGNscy5kb19jb25maWd1cmVfc3lzbGludXgoY3JlYXRvciwgY3Jfd29ya2RpcikKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDQ0NCAlcy9zeXNsaW51eC9sZGxpbnV4LnN5cyAiICUgc3lzbGludXhfZGlyCisgICAgICAgIGluc3RhbGxfY21kICs9ICIlcy9pc29saW51eC9sZGxpbnV4LnN5cyIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA0NDQgJXMvc3lzbGludXgvaXNvaGRwZnguYmluICIgJSBzeXNsaW51eF9kaXIKKyAgICAgICAgaW5zdGFsbF9jbWQgKz0gIiVzL2lzb2xpbnV4L2lzb2hkcGZ4LmJpbiIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA2NDQgJXMvc3lzbGludXgvaXNvbGludXguYmluICIgJSBzeXNsaW51eF9kaXIKKyAgICAgICAgaW5zdGFsbF9jbWQgKz0gIiVzL2lzb2xpbnV4L2lzb2xpbnV4LmJpbiIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA2NDQgJXMvc3lzbGludXgvbGRsaW51eC5jMzIgIiAlIHN5c2xpbnV4X2RpcgorICAgICAgICBpbnN0YWxsX2NtZCArPSAiJXMvaXNvbGludXgvbGRsaW51eC5jMzIiICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICNjcmVhdGUgSVNPIGltYWdlCisgICAgICAgIGlzb19pbWcgPSAiJXMvdGVtcGlzb19pbWcuaXNvIiAlIGNyX3dvcmtkaXIKKyAgICAgICAgaXNvX2Jvb3RpbWcgPSAiaXNvbGludXgvaXNvbGludXguYmluIgorICAgICAgICBpc29fYm9vdGNhdCA9ICJpc29saW51eC9ib290LmNhdCIKKyAgICAgICAgZWZpX2ltZyA9ICJlZmkuaW1nIgorCisgICAgICAgIG1raXNvZnNfY21kID0gIm1raXNvZnMgLVYgJXMgIiAlIHBhcnQubGFiZWwKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1vICVzIC1VICIgJSBpc29faW1nCisgICAgICAgIG1raXNvZnNfY21kICs9ICItSiAtam9saWV0LWxvbmcgLXIgLWlzby1sZXZlbCAyIC1iICVzICIgJSBpc29fYm9vdGltZworICAgICAgICBta2lzb2ZzX2NtZCArPSAiLWMgJXMgLW5vLWVtdWwtYm9vdCAtYm9vdC1sb2FkLXNpemUgNCAiICUgaXNvX2Jvb3RjYXQKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1ib290LWluZm8tdGFibGUgLWVsdG9yaXRvLWFsdC1ib290ICIKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1lbHRvcml0by1wbGF0Zm9ybSAweEVGIC1lbHRvcml0by1ib290ICVzICIgJSBlZmlfaW1nCisgICAgICAgIG1raXNvZnNfY21kICs9ICItbm8tZW11bC1ib290ICVzICIgJSBpc29kaXIKKworICAgICAgICBtc2dlci5kZWJ1ZygicnVubmluZyBjb21tYW5kOiAlcyIgJSBta2lzb2ZzX2NtZCkKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1raXNvZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBzaHV0aWwucm10cmVlKGlzb2RpcikKKworICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgaXNvX2ltZworICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGlzb2ltZ19zaXplID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIHBhcnQuc2V0X3NpemUoaXNvaW1nX3NpemUpCisgICAgICAgIHBhcnQuc2V0X3NvdXJjZV9maWxlKGlzb19pbWcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjcmVhdG9yLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuICBJbiB0aGlzIGNhc2UsIHdlIGluc2VydC9tb2RpZnkgdGhlIE1CUiB1c2luZyBpc29oeWJyaWQKKyAgICAgICAgdXRpbGl0eSBmb3IgYm9vdGluZyB2aWEgQklPUyBmcm9tIGRpc2sgc3RvcmFnZSBkZXZpY2VzLgorICAgICAgICAiIiIKKworICAgICAgICBmdWxsX3BhdGggPSBjcmVhdG9yLl9mdWxsX3BhdGgod29ya2RpciwgZGlza19uYW1lLCAiZGlyZWN0IikKKyAgICAgICAgaXNvX2ltZyA9ICIlcy5wMSIgJSBmdWxsX3BhdGgKKyAgICAgICAgZnVsbF9wYXRoX2lzbyA9IGNyZWF0b3IuX2Z1bGxfcGF0aCh3b3JrZGlyLCBkaXNrX25hbWUsICJpc28iKQorCisgICAgICAgIGlzb2h5YnJpZF9jbWQgPSAiaXNvaHlicmlkIC11ICVzIiAlIGlzb19pbWcKKyAgICAgICAgbXNnZXIuZGVidWcoInJ1bm5pbmcgY29tbWFuZDogJXMiICUgXAorICAgICAgICAgICAgICAgICAgICBpc29oeWJyaWRfY21kKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQoaXNvaHlicmlkX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgIyBSZXBsYWNlIHRoZSBpbWFnZSBjcmVhdGVkIGJ5IGRpcmVjdCBwbHVnaW4gd2l0aCB0aGUgb25lIGNyZWF0ZWQgYnkKKyAgICAgICAgIyBta2lzb2ZzIGNvbW1hbmQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGlzbyBpbWFnZSBjcmVhdGVkIGJ5CisgICAgICAgICMgbWtpc29mcyBoYXMgYSB2ZXJ5IHNwZWNpZmljIE1CUiBpcyBzeXN0ZW0gYXJlYSBvZiB0aGUgSVNPIGltYWdlLCBhbmQKKyAgICAgICAgIyBkaXJlY3QgcGx1Z2luIGFkZHMgYW5kIGNvbmZpZ3VyZXMgYW4gYW5vdGhlciBNQlIuCisgICAgICAgIG1zZ2VyLmRlYnVnKCJSZXBsYWNlaW5nIHRoZSBpbWFnZSBjcmVhdGVkIGJ5IGRpcmVjdCBwbHVnaW5cbiIpCisgICAgICAgIG9zLnJlbW92ZShmdWxsX3BhdGgpCisgICAgICAgIHNodXRpbC5jb3B5Mihpc29faW1nLCBmdWxsX3BhdGhfaXNvKQorICAgICAgICBzaHV0aWwuY29weTIoZnVsbF9wYXRoX2lzbywgZnVsbF9wYXRoKQorCisgICAgICAgICMgUmVtb3ZlIHRlbXBvcmFyeSBJU08gZmlsZQorICAgICAgICBvcy5yZW1vdmUoaXNvX2ltZykKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jhd2NvcHkucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjkxYmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5CkBAIC0wLDAgKzEsODcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgb3MKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBnZXRfYml0YmFrZV92YXIKKworY2xhc3MgUmF3Q29weVBsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIFBvcHVsYXRlIHBhcnRpdGlvbiBjb250ZW50IGZyb20gcmF3IGltYWdlIGZpbGUuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ3Jhd2NvcHknCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiBEbyBub3RoaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLiBQb3NzaWJseSBwcmVwYXJlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2Ygc29tZSBzb3J0LgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICBib290aW1nX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIpCisgICAgICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgREVQTE9ZX0RJUl9JTUFHRSwgZXhpdGluZ1xuIikKKworICAgICAgICBtc2dlci5kZWJ1ZygnQm9vdGltZyBkaXI6ICVzJyAlIGJvb3RpbWdfZGlyKQorCisgICAgICAgIGlmICdmaWxlJyBub3QgaW4gc291cmNlX3BhcmFtczoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJObyBmaWxlIHNwZWNpZmllZFxuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihib290aW1nX2Rpciwgc291cmNlX3BhcmFtc1snZmlsZSddKQorICAgICAgICBkc3QgPSBzcmMKKworICAgICAgICBpZiAnc2tpcCcgaW4gc291cmNlX3BhcmFtczoKKyAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCBzb3VyY2VfcGFyYW1zWydmaWxlJ10pCisgICAgICAgICAgICBkZF9jbWQgPSAiZGQgaWY9JXMgb2Y9JXMgaWJzPSVzIHNraXA9MSBjb252PW5vdHJ1bmMiICUgXAorICAgICAgICAgICAgICAgICAgICAoc3JjLCBkc3QsIHNvdXJjZV9wYXJhbXNbJ3NraXAnXSkKKyAgICAgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICAjIGdldCB0aGUgc2l6ZSBpbiB0aGUgcmlnaHQgdW5pdHMgZm9yIGtpY2tzdGFydCAoa0IpCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSBkc3QKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBmaWxlc2l6ZSA9IG91dC5zcGxpdCgpWzBdCisKKyAgICAgICAgaWYgaW50KGZpbGVzaXplKSA+IGludChwYXJ0LnNpemUpOgorICAgICAgICAgICAgcGFydC5zaXplID0gZmlsZXNpemUKKworICAgICAgICBwYXJ0LnNvdXJjZV9maWxlID0gZHN0CisKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmcy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTA3MTJiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzLnB5CkBAIC0wLDAgKzEsODMgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdyb290ZnMnIHNvdXJjZSBwbHVnaW4gY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIyBKb2FvIEhlbnJpcXVlIEZlcnJlaXJhIGRlIEZyZWl0YXMgPGpvYW9oZiAoYXRdIGdtYWlsLmNvbT4KKyMKKworaW1wb3J0IG9zCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIKKworY2xhc3MgUm9vdGZzUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgUG9wdWxhdGUgcGFydGl0aW9uIGNvbnRlbnQgZnJvbSBhIHJvb3RmcyBkaXJlY3RvcnkuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ3Jvb3RmcycKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX19nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIHJldHVybiByb290ZnNfZGlyCisKKyAgICAgICAgaW1hZ2Vfcm9vdGZzX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgcm9vdGZzX2RpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1hZ2Vfcm9vdGZzX2Rpcik6CisgICAgICAgICAgICBtc2cgPSAiTm8gdmFsaWQgYXJ0aWZhY3QgSU1BR0VfUk9PVEZTIGZyb20gaW1hZ2UgbmFtZWQiCisgICAgICAgICAgICBtc2cgKz0gIiAlcyBoYXMgYmVlbiBmb3VuZCBhdCAlcywgZXhpdGluZy5cbiIgJSBcCisgICAgICAgICAgICAgICAgKHJvb3Rmc19kaXIsIGltYWdlX3Jvb3Rmc19kaXIpCisgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cpCisKKyAgICAgICAgcmV0dXJuIGltYWdlX3Jvb3Rmc19kaXIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBwcmVwYXJlIGNvbnRlbnQgZm9yIGxlZ2FjeSBiaW9zIGJvb3QgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcGFydC5yb290ZnMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCAnUk9PVEZTX0RJUicgaW4ga3Jvb3Rmc19kaXI6CisgICAgICAgICAgICAgICAgbXNnID0gIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyLCBleGl0aW5nIgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZykKKyAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBrcm9vdGZzX2RpclsnUk9PVEZTX0RJUiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpbiBrcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0ga3Jvb3Rmc19kaXJbcGFydC5yb290ZnNdCisgICAgICAgICAgICBlbGlmIHBhcnQucm9vdGZzOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBwYXJ0LnJvb3RmcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSAiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXI9JXMgY29ubmVjdGlvbiIKKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBvciBpdCBpcyBub3QgYSB2YWxpZCBwYXRoLCBleGl0aW5nIgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZyAlIHBhcnQucm9vdGZzKQorCisgICAgICAgIHJlYWxfcm9vdGZzX2RpciA9IGNscy5fX2dldF9yb290ZnNfZGlyKHJvb3Rmc19kaXIpCisKKyAgICAgICAgcGFydC5zZXRfcm9vdGZzKHJlYWxfcm9vdGZzX2RpcikKKyAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3Rmcyhjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcmVhbF9yb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzX3BjYmlvc19leHQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnNfcGNiaW9zX2V4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmU3YjAzCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzX3BjYmlvc19leHQucHkKQEAgLTAsMCArMSwxODEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEFVVEhPUgorIyBBZHJpYW4gRnJlaWhvZmVyIDxhZHJpYW4uZnJlaWhvZmVyIChhdF0gbmVyYXRlYy5jb20+CisjCisKK2ltcG9ydCBvcworZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydAorZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgc3lzbGludXgKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKK2Zyb20gd2ljLnV0aWxzLm9lIGltcG9ydCBtaXNjCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IEltYWdlRXJyb3IKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorCisKKyMgcHlsaW50OiBkaXNhYmxlPW5vLWluaXQKK2NsYXNzIFJvb3Rmc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSByb290IHBhcnRpdGlvbiBhbmQgaW5zdGFsbCBzeXNsaW51eCBib290bG9hZGVyCisKKyAgICBUaGlzIHBsdWdpbiBjcmVhdGVzIGEgZGlzayBpbWFnZSBjb250YWluaW5nIGEgYm9vdGFibGUgcm9vdCBwYXJ0aXRpb24gd2l0aAorICAgIHN5c2xpbnV4IGluc3RhbGxlZC4gVGhlIGZpbGVzeXN0ZW0gaXMgZXh0Mi8zLzQsIG5vIGV4dHJhIGJvb3QgcGFydGl0aW9uIGlzCisgICAgcmVxdWlyZWQuCisKKyAgICBFeGFtcGxlIGtpY2tzdGFydCBmaWxlOgorICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMtcGNiaW9zLWV4dCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHJvb3RmcyAtLWFsaWduIDEwMjQKKyAgICBib290bG9hZGVyIC0tc291cmNlIHJvb3Rmcy1wY2Jpb3MtZXh0IC0tdGltZW91dD0wIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQiCisKKyAgICBUaGUgZmlyc3QgbGluZSBnZW5lcmF0ZXMgYSByb290IGZpbGUgc3lzdGVtIGluY2x1ZGluZyBhIHN5c2xpbnV4LmNmZyBmaWxlCisgICAgVGhlICItLXNvdXJjZSByb290ZnMtcGNiaW9zLWV4dCIgaW4gdGhlIHNlY29uZCBsaW5lIHRyaWdnZXJzIHRoZSBpbnN0YWxsYXRpb24KKyAgICBvZiBsZGxpbnV4LnN5cyBpbnRvIHRoZSBpbWFnZS4KKyAgICAiIiIKKworICAgIG5hbWUgPSAncm9vdGZzLXBjYmlvcy1leHQnCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgcm9vdGZzIHBzZXVkbyBkaXIKKworICAgICAgICBJZiByb290ZnNfZGlyIGlzIGEgZGlyZWN0b3J5IGNvbnNpZGVyIGl0IGFzIHJvb3RmcyBkaXJlY3RvcnkuCisgICAgICAgIE90aGVyd2lzZSBhc2sgYml0YmFrZSBhYm91dCB0aGUgSU1BR0VfUk9PVEZTIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICByZXR1cm4gcm9vdGZzX2RpcgorCisgICAgICAgIGltYWdlX3Jvb3Rmc19kaXIgPSBtaXNjLmdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgcm9vdGZzX2RpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1hZ2Vfcm9vdGZzX2Rpcik6CisgICAgICAgICAgICBtc2cgPSAiTm8gdmFsaWQgYXJ0aWZhY3QgSU1BR0VfUk9PVEZTIGZyb20gaW1hZ2UgbmFtZWQiCisgICAgICAgICAgICBtc2cgKz0gIiAlcyBoYXMgYmVlbiBmb3VuZCBhdCAlcywgZXhpdGluZy5cbiIgJSBcCisgICAgICAgICAgICAgICAgKHJvb3Rmc19kaXIsIGltYWdlX3Jvb3Rmc19kaXIpCisgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cpCisKKyAgICAgICAgcmV0dXJuIGltYWdlX3Jvb3Rmc19kaXIKKworICAgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgaW1hZ2VfY3JlYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9jcmVhdG9yX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGVzIHN5c2xpbnV4IGNvbmZpZyBpbiByb290ZnMgZGlyZWN0b3J5CisKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpCisgICAgICAgICIiIgorICAgICAgICBvcHRpb25zID0gaW1hZ2VfY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgPSAiIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJQUk9NUFQgMFxuIgorCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoaW1hZ2VfY3JlYXRvci5rcykKKyAgICAgICAgaWYgbm90IHRpbWVvdXQ6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJUSU1FT1VUICIgKyBzdHIodGltZW91dCkgKyAiXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkFMTE9XT1BUSU9OUyAxXG4iCisKKyAgICAgICAgIyBEZXJpdmUgU0VSSUFMLi4uIGxpbmUgZnJvbSBmcm9tIGtlcm5lbCBib290IHBhcmFtZXRlcnMKKyAgICAgICAgc3lzbGludXhfY29uZiArPSBzeXNsaW51eC5zZXJpYWxfY29uc29sZV9mb3JtX2thcmdzKG9wdGlvbnMpICsgIlxuIgorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkRFRkFVTFQgbGludXhcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiTEFCRUwgbGludXhcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiICBLRVJORUwgL2Jvb3QvYnpJbWFnZVxuIgorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIiAgQVBQRU5EIGxhYmVsPWJvb3Qgcm9vdD0lcyAlc1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlX2NyZWF0b3Iucm9vdGRldiwgb3B0aW9ucykKKworICAgICAgICBzeXNsaW51eF9jZmcgPSBvcy5wYXRoLmpvaW4oaW1hZ2VfY3JlYXRvci5yb290ZnNfZGlyWydST09URlNfRElSJ10sICJib290IiwgInN5c2xpbnV4LmNmZyIpCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIHN5c2xpbnV4IGNvbmZpZyAlcyIgJSBzeXNsaW51eF9jZmcpCisgICAgICAgIHdpdGggb3BlbihzeXNsaW51eF9jZmcsICJ3IikgYXMgY2ZnOgorICAgICAgICAgICAgY2ZnLndyaXRlKHN5c2xpbnV4X2NvbmYpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBpbWFnZV9jcmVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9jcmVhdG9yX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX2Rpciwga3Jvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZXMgcGFydGl0aW9uIG91dCBvZiByb290ZnMgZGlyZWN0b3J5CisKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIHJvb3RmcyBwYXJ0aXRpb24gaS5lLiBjcmVhdGUgYSBwYXJ0aXRpb24KKyAgICAgICAgYW5kIGZpbGwgaXQgZnJvbSBhIC9yb290ZnMgZGlyLgorICAgICAgICBJbnN0YWxsIHN5c2xpbnV4IGJvb3Rsb2FkZXIgaW50byByb290IHBhcnRpdGlvbiBpbWFnZSBmaWxlCisgICAgICAgICIiIgorICAgICAgICBkZWYgaXNfZXhlKGV4ZXBhdGgpOgorICAgICAgICAgICAgIiIiVmVyaWZ5IGV4ZXBhdGggaXMgYW4gZXhlY3V0YWJsZSBmaWxlIiIiCisgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5pc2ZpbGUoZXhlcGF0aCkgYW5kIG9zLmFjY2VzcyhleGVwYXRoLCBvcy5YX09LKQorCisgICAgICAgICMgTWFrZSBzdXJlIHN5c2xpbnV4LW5vbXRvb2xzIGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdCBvciBmYWlsCisgICAgICAgIG5hdGl2ZV9zeXNsaW51eF9ub210b29scyA9IG9zLnBhdGguam9pbihuYXRpdmVfc3lzcm9vdCwgInVzci9iaW4vc3lzbGludXgtbm9tdG9vbHMiKQorICAgICAgICBpZiBub3QgaXNfZXhlKG5hdGl2ZV9zeXNsaW51eF9ub210b29scyk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJidWlsZGluZyBzeXNsaW51eC1uYXRpdmUuLi4iKQorICAgICAgICAgICAgbWlzYy5leGVjX2NtZCgiYml0YmFrZSBzeXNsaW51eC1uYXRpdmUiKQorICAgICAgICBpZiBub3QgaXNfZXhlKG5hdGl2ZV9zeXNsaW51eF9ub210b29scyk6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBzeXNsaW51eC1ub210b29scyAoJXMpLCBleGl0aW5nXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNsaW51eF9ub210b29scykKKworICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpcyBOb25lOgorICAgICAgICAgICAgaWYgJ1JPT1RGU19ESVInIG5vdCBpbiBrcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXIsIGV4aXRpbmciKQorICAgICAgICAgICAgcm9vdGZzX2RpciA9IGtyb290ZnNfZGlyWydST09URlNfRElSJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBhcnQucm9vdGZzIGluIGtyb290ZnNfZGlyOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBrcm9vdGZzX2RpcltwYXJ0LnJvb3Rmc10KKyAgICAgICAgICAgIGVsaWYgcGFydC5yb290ZnM6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IHBhcnQucm9vdGZzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpcj0lcyBjb25uZWN0aW9uIgorICAgICAgICAgICAgICAgIG1zZyArPSAiIG9yIGl0IGlzIG5vdCBhIHZhbGlkIHBhdGgsIGV4aXRpbmciCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnICUgcGFydC5yb290ZnMpCisKKyAgICAgICAgcmVhbF9yb290ZnNfZGlyID0gY2xzLl9nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKQorCisgICAgICAgIHBhcnQuc2V0X3Jvb3RmcyhyZWFsX3Jvb3Rmc19kaXIpCisgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnMoaW1hZ2VfY3JlYXRvcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcmVhbF9yb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAjIGluc3RhbGwgc3lzbGludXggaW50byByb290ZnMgcGFydGl0aW9uCisgICAgICAgIHN5c2xpbnV4X2NtZCA9ICJzeXNsaW51eC1ub210b29scyAtZCAvYm9vdCAtaSAlcyIgJSBwYXJ0LnNvdXJjZV9maWxlCisgICAgICAgIG1pc2MuZXhlY19uYXRpdmVfY21kKHN5c2xpbnV4X2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBpbWFnZV9jcmVhdG9yLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBBc3NlbWJsZSBwYXJ0aXRpb25zIHRvIGRpc2sgaW1hZ2UKKworICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuIEluIHRoaXMgY2FzZSwgd2UgaW5zdGFsbCB0aGUgTUJSLgorICAgICAgICAiIiIKKyAgICAgICAgbWJyZmlsZSA9IG9zLnBhdGguam9pbihuYXRpdmVfc3lzcm9vdCwgInVzci9zaGFyZS9zeXNsaW51eC8iKQorICAgICAgICBpZiBpbWFnZV9jcmVhdG9yLnB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJzoKKyAgICAgICAgICAgIG1icmZpbGUgKz0gIm1ici5iaW4iCisgICAgICAgIGVsaWYgaW1hZ2VfY3JlYXRvci5wdGFibGVfZm9ybWF0ID09ICdncHQnOgorICAgICAgICAgICAgbWJyZmlsZSArPSAiZ3B0bWJyLmJpbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJVbnN1cHBvcnRlZCBwYXJ0aXRpb24gdGFibGU6ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2NyZWF0b3IucHRhYmxlX2Zvcm1hdCkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWJyZmlsZSk6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAlcy4gSGFzIHN5c2xpbnV4LW5hdGl2ZSBiZWVuIGJha2VkPyIgJSBtYnJmaWxlKQorCisgICAgICAgIGZ1bGxfcGF0aCA9IGRpc2tbJ2Rpc2snXS5kZXZpY2UKKyAgICAgICAgbXNnZXIuZGVidWcoIkluc3RhbGxpbmcgTUJSIG9uIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGRpc2tfbmFtZSwgZnVsbF9wYXRoLCBkaXNrWydtaW5fc2l6ZSddKSkKKworICAgICAgICByZXRfY29kZSA9IHJ1bm5lci5zaG93KFsnZGQnLCAnaWY9JXMnICUgbWJyZmlsZSwgJ29mPSVzJyAlIGZ1bGxfcGF0aCwgJ2NvbnY9bm90cnVuYyddKQorICAgICAgICBpZiByZXRfY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgSW1hZ2VFcnJvcigiVW5hYmxlIHRvIHNldCBNQlIgdG8gJXMiICUgZnVsbF9wYXRoKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdGVzdCBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZWFmYgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3Rlc3QKQEAgLTAsMCArMSBAQAordGVzdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2Vycm9ycy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2Vycm9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI1MTRkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZXJyb3JzLnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFJlZCBIYXQsIEluYy4KKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitjbGFzcyBXaWNFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgQ3JlYXRvckVycm9yKFdpY0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFVzYWdlKFdpY0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIEltYWdlRXJyb3IoV2ljRXJyb3IpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2ZzX3JlbGF0ZWQucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzQ0NjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5CkBAIC0wLDAgKzEsODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3LCBSZWQgSGF0LCBJbmMuCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAoraW1wb3J0IG9zCitpbXBvcnQgZXJybm8KKworZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQKKworZGVmIG1ha2VkaXJzKGRpcm5hbWUpOgorICAgICIiIkEgdmVyc2lvbiBvZiBvcy5tYWtlZGlycygpIHRoYXQgZG9lc24ndCB0aHJvdyBhbgorICAgIGV4Y2VwdGlvbiBpZiB0aGUgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgIGlmIGVyci5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZQorCitjbGFzcyBEaXNrOgorICAgICIiIgorICAgIEdlbmVyaWMgYmFzZSBvYmplY3QgZm9yIGEgZGlzay4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSwgZGV2aWNlPU5vbmUpOgorICAgICAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKKyAgICAgICAgc2VsZi5fc2l6ZSA9IHNpemUKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0X2RldmljZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZQorICAgIGRlZiBzZXRfZGV2aWNlKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLl9kZXZpY2UgPSBwYXRoCisgICAgZGV2aWNlID0gcHJvcGVydHkoZ2V0X2RldmljZSwgc2V0X2RldmljZSkKKworICAgIGRlZiBnZXRfc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NpemUKKyAgICBzaXplID0gcHJvcGVydHkoZ2V0X3NpemUpCisKKworY2xhc3MgRGlza0ltYWdlKERpc2spOgorICAgICIiIgorICAgIEEgRGlzayBiYWNrZWQgYnkgYSBmaWxlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9maWxlLCBzaXplKToKKyAgICAgICAgRGlzay5fX2luaXRfXyhzZWxmLCBzaXplKQorICAgICAgICBzZWxmLmltYWdlX2ZpbGUgPSBpbWFnZV9maWxlCisKKyAgICBkZWYgZXhpc3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5leGlzdHMoc2VsZi5pbWFnZV9maWxlKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZXZpY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBibG9ja3MgPSBzZWxmLnNpemUgLyAxMDI0CisgICAgICAgIGlmIHNlbGYuc2l6ZSAtIGJsb2NrcyAqIDEwMjQ6CisgICAgICAgICAgICBibG9ja3MgKz0gMQorCisgICAgICAgICMgY3JlYXRlIGRpc2sgaW1hZ2UKKyAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xMDI0IHNlZWs9JWQgY291bnQ9MSIgJSBcCisgICAgICAgICAgICAoc2VsZi5pbWFnZV9maWxlLCBibG9ja3MpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBzZWxmLmRldmljZSA9IHNlbGYuaW1hZ2VfZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvbWlzYy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL21pc2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3NTA2OQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL21pc2MucHkKQEAgLTAsMCArMSw1OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAsIDIwMTEgSW50ZWwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorCitkZWYgYnVpbGRfbmFtZShrc2NmZywgcmVsZWFzZT1Ob25lLCBwcmVmaXg9Tm9uZSwgc3VmZml4PU5vbmUpOgorICAgICIiIkNvbnN0cnVjdCBhbmQgcmV0dXJuIGFuIGltYWdlIG5hbWUgc3RyaW5nLgorCisgICAgVGhpcyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gdG8gaGVscCBjcmVhdGUgc2Vuc2libGUgbmFtZSBhbmQgZnNsYWJlbAorICAgIHN0cmluZ3MuIFRoZSBuYW1lIGlzIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBzYW5zLXByZWZpeC1hbmQtZXh0ZW5zaW9uCisgICAga2lja3N0YXJ0IGZpbGVuYW1lIGFuZCB0aGUgc3VwcGxpZWQgcHJlZml4IGFuZCBzdWZmaXguCisKKyAgICBrc2NmZyAtLSBhIHBhdGggdG8gYSBraWNrc3RhcnQgZmlsZQorICAgIHJlbGVhc2UgLS0gIGEgcmVwbGFjZW1lbnQgdG8gc3VmZml4IGZvciBpbWFnZSByZWxlYXNlCisgICAgcHJlZml4IC0tIGEgcHJlZml4IHRvIHByZXBlbmQgdG8gdGhlIG5hbWU7IGRlZmF1bHRzIHRvIE5vbmUsIHdoaWNoIGNhdXNlcworICAgICAgICAgICAgICBubyBwcmVmaXggdG8gYmUgdXNlZAorICAgIHN1ZmZpeCAtLSBhIHN1ZmZpeCB0byBhcHBlbmQgdG8gdGhlIG5hbWU7IGRlZmF1bHRzIHRvIE5vbmUsIHdoaWNoIGNhdXNlcworICAgICAgICAgICAgICBhIFlZWVlNTURESEhNTSBzdWZmaXggdG8gYmUgdXNlZAorCisgICAgTm90ZSwgaWYgbWF4bGVuIGlzIGxlc3MgdGhlbiB0aGUgbGVuKHN1ZmZpeCksIHlvdSBnZXQgdG8ga2VlcCBib3RoIHBpZWNlcy4KKworICAgICIiIgorICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGtzY2ZnKQorICAgIGlkeCA9IG5hbWUucmZpbmQoJy4nKQorICAgIGlmIGlkeCA+PSAwOgorICAgICAgICBuYW1lID0gbmFtZVs6aWR4XQorCisgICAgaWYgcmVsZWFzZSBpcyBub3QgTm9uZToKKyAgICAgICAgc3VmZml4ID0gIiIKKyAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgcHJlZml4ID0gIiIKKyAgICBpZiBzdWZmaXggaXMgTm9uZToKKyAgICAgICAgc3VmZml4ID0gdGltZS5zdHJmdGltZSgiJVklbSVkJUglTSIpCisKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgbmFtZSA9IG5hbWVbbGVuKHByZWZpeCk6XQorCisgICAgcHJlZml4ID0gIiVzLSIgJSBwcmVmaXggaWYgcHJlZml4IGVsc2UgIiIKKyAgICBzdWZmaXggPSAiLSVzIiAlIHN1ZmZpeCBpZiBzdWZmaXggZWxzZSAiIgorCisgICAgcmV0ID0gcHJlZml4ICsgbmFtZSArIHN1ZmZpeAorCisgICAgcmV0dXJuIHJldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvX19pbml0X18ucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9vZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTgxNTc1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMiBAQAorIworIyBPcGVuRW1iZWRkZWQgd2ljIHV0aWxzIGxpYnJhcnkKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvbWlzYy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3MGQ5MwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkKQEAgLTAsMCArMSwyMzQgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHBsYWNlIHRvIGNvbGxlY3QgdmFyaW91cyB3aWMtcmVsYXRlZCB1dGlscworIyBmb3IgdGhlIE9wZW5FbWJlZGRlZCBJbWFnZSBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisiIiJNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucy4iIiIKKworaW1wb3J0IG9zCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKKworIyBleGVjdXRhYmxlIC0+IHJlY2lwZSBwYWlycyBmb3IgZXhlY19uYXRpdmVfY21kCitOQVRJVkVfUkVDSVBFUyA9IHsibWNvcHkiOiAibXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta2Rvc2ZzIjogImRvc2ZzdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuYnRyZnMiOiAiYnRyZnMtdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0MiI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0MyI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0NCI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMudmZhdCI6ICJkb3Nmc3Rvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta3NxdWFzaGZzIjogInNxdWFzaGZzLXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta3N3YXAiOiAidXRpbC1saW51eCIsCisgICAgICAgICAgICAgICAgICAicGFydGVkIjogInBhcnRlZCIsCisgICAgICAgICAgICAgICAgICAic2dkaXNrIjogImdwdGZkaXNrIiwKKyAgICAgICAgICAgICAgICAgICJzeXNsaW51eCI6ICJzeXNsaW51eCIKKyAgICAgICAgICAgICAgICAgfQorCitkZWYgX2V4ZWNfY21kKGNtZF9hbmRfYXJncywgYXNfc2hlbGw9RmFsc2UsIGNhdGNoPTMpOgorICAgICIiIgorICAgIEV4ZWN1dGUgY29tbWFuZCwgY2F0Y2hpbmcgc3RkZXJyLCBzdGRvdXQKKworICAgIE5lZWQgdG8gZXhlY3V0ZSBhc19zaGVsbCBpZiB0aGUgY29tbWFuZCB1c2VzIHdpbGRjYXJkcworICAgICIiIgorICAgIG1zZ2VyLmRlYnVnKCJfZXhlY19jbWQ6ICVzIiAlIGNtZF9hbmRfYXJncykKKyAgICBhcmdzID0gY21kX2FuZF9hcmdzLnNwbGl0KCkKKyAgICBtc2dlci5kZWJ1ZyhhcmdzKQorCisgICAgaWYgYXNfc2hlbGw6CisgICAgICAgIHJldCwgb3V0ID0gcnVubmVyLnJ1bnRvb2woY21kX2FuZF9hcmdzLCBjYXRjaCkKKyAgICBlbHNlOgorICAgICAgICByZXQsIG91dCA9IHJ1bm5lci5ydW50b29sKGFyZ3MsIGNhdGNoKQorICAgIG91dCA9IG91dC5zdHJpcCgpCisgICAgbXNnZXIuZGVidWcoIl9leGVjX2NtZDogb3V0cHV0IGZvciAlcyAocmMgPSAlZCk6ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoY21kX2FuZF9hcmdzLCByZXQsIG91dCkpCisKKyAgICByZXR1cm4gKHJldCwgb3V0KQorCisKK2RlZiBleGVjX2NtZChjbWRfYW5kX2FyZ3MsIGFzX3NoZWxsPUZhbHNlLCBjYXRjaD0zKToKKyAgICAiIiIKKyAgICBFeGVjdXRlIGNvbW1hbmQsIGNhdGNoaW5nIHN0ZGVyciwgc3Rkb3V0CisKKyAgICBFeGl0cyBpZiByYyBub24temVybworICAgICIiIgorICAgIHJldCwgb3V0ID0gX2V4ZWNfY21kKGNtZF9hbmRfYXJncywgYXNfc2hlbGwsIGNhdGNoKQorCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIG1zZ2VyLmVycm9yKCJleGVjX2NtZDogJXMgcmV0dXJuZWQgJyVzJyBpbnN0ZWFkIG9mIDAiICUgXAorICAgICAgICAgICAgICAgICAgICAoY21kX2FuZF9hcmdzLCByZXQpKQorCisgICAgcmV0dXJuIG91dAorCisKK2RlZiBleGVjX25hdGl2ZV9jbWQoY21kX2FuZF9hcmdzLCBuYXRpdmVfc3lzcm9vdCwgY2F0Y2g9Myk6CisgICAgIiIiCisgICAgRXhlY3V0ZSBuYXRpdmUgY29tbWFuZCwgY2F0Y2hpbmcgc3RkZXJyLCBzdGRvdXQKKworICAgIE5lZWQgdG8gZXhlY3V0ZSBhc19zaGVsbCBpZiB0aGUgY29tbWFuZCB1c2VzIHdpbGRjYXJkcworCisgICAgQWx3YXlzIG5lZWQgdG8gZXhlY3V0ZSBuYXRpdmUgY29tbWFuZHMgYXNfc2hlbGwKKyAgICAiIiIKKyAgICBuYXRpdmVfcGF0aHMgPSBcCisgICAgICAgICJleHBvcnQgUEFUSD0lcy9zYmluOiVzL3Vzci9zYmluOiVzL3Vzci9iaW4iICUgXAorICAgICAgICAobmF0aXZlX3N5c3Jvb3QsIG5hdGl2ZV9zeXNyb290LCBuYXRpdmVfc3lzcm9vdCkKKyAgICBuYXRpdmVfY21kX2FuZF9hcmdzID0gIiVzOyVzIiAlIChuYXRpdmVfcGF0aHMsIGNtZF9hbmRfYXJncykKKyAgICBtc2dlci5kZWJ1ZygiZXhlY19uYXRpdmVfY21kOiAlcyIgJSBjbWRfYW5kX2FyZ3MpCisKKyAgICBhcmdzID0gY21kX2FuZF9hcmdzLnNwbGl0KCkKKyAgICBtc2dlci5kZWJ1ZyhhcmdzKQorCisgICAgcmV0LCBvdXQgPSBfZXhlY19jbWQobmF0aXZlX2NtZF9hbmRfYXJncywgVHJ1ZSwgY2F0Y2gpCisKKyAgICBpZiByZXQgPT0gMTI3OiAjIHNoZWxsIGNvbW1hbmQtbm90LWZvdW5kCisgICAgICAgIHByb2cgPSBhcmdzWzBdCisgICAgICAgIG1zZyA9ICJBIG5hdGl2ZSBwcm9ncmFtICVzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBpbWFnZSAiXAorICAgICAgICAgICAgICAid2FzIG5vdCBmb3VuZCAoc2VlIGRldGFpbHMgYWJvdmUpLlxuXG4iICUgcHJvZworICAgICAgICByZWNpcGUgPSBOQVRJVkVfUkVDSVBFUy5nZXQocHJvZykKKyAgICAgICAgaWYgcmVjaXBlOgorICAgICAgICAgICAgbXNnICs9ICJQbGVhc2UgYmFrZSBpdCB3aXRoICdiaXRiYWtlICVzLW5hdGl2ZScgIlwKKyAgICAgICAgICAgICAgICAgICAiYW5kIHRyeSBhZ2Fpbi5cbiIgJSByZWNpcGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyArPSAiV2ljIGZhaWxlZCB0byBmaW5kIGEgcmVjaXBlIHRvIGJ1aWxkIG5hdGl2ZSAlcy4gUGxlYXNlICJcCisgICAgICAgICAgICAgICAgICAgImZpbGUgYSBidWcgYWdhaW5zdCB3aWMuXG4iICUgcHJvZworICAgICAgICBtc2dlci5lcnJvcihtc2cpCisgICAgaWYgb3V0OgorICAgICAgICBtc2dlci5kZWJ1ZygnIiVzIiBvdXRwdXQ6ICVzJyAlIChhcmdzWzBdLCBvdXQpKQorCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIG1zZ2VyLmVycm9yKCJleGVjX2NtZDogJyVzJyByZXR1cm5lZCAnJXMnIGluc3RlYWQgb2YgMCIgJSBcCisgICAgICAgICAgICAgICAgICAgIChjbWRfYW5kX2FyZ3MsIHJldCkpCisKKyAgICByZXR1cm4gcmV0LCBvdXQKKworQk9PVEREX0VYVFJBX1NQQUNFID0gMTYzODQKKworY2xhc3MgQml0YmFrZVZhcnMoZGVmYXVsdGRpY3QpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3IgQml0YmFrZSB2YXJpYWJsZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBkZWZhdWx0ZGljdC5fX2luaXRfXyhzZWxmLCBkaWN0KQorCisgICAgICAgICMgZGVmYXVsdF9pbWFnZSBhbmQgdmFyc19kaXIgYXR0cmlidXRlcyBzaG91bGQgYmUgc2V0IGZyb20gb3V0c2lkZQorICAgICAgICBzZWxmLmRlZmF1bHRfaW1hZ2UgPSBOb25lCisgICAgICAgIHNlbGYudmFyc19kaXIgPSBOb25lCisKKyAgICBkZWYgX3BhcnNlX2xpbmUoc2VsZiwgbGluZSwgaW1hZ2UpOgorICAgICAgICAiIiIKKyAgICAgICAgUGFyc2Ugb25lIGxpbmUgZnJvbSBiaXRiYWtlIC1lIG91dHB1dCBvciBmcm9tIC5lbnYgZmlsZS4KKyAgICAgICAgUHV0IHJlc3VsdCBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBzdG9yYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgIj0iIG5vdCBpbiBsaW5lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSwgdmFsID0gbGluZS5zcGxpdCgiPSIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGtleSA9IGtleS5zdHJpcCgpCisgICAgICAgIHZhbCA9IHZhbC5zdHJpcCgpCisgICAgICAgIGlmIGtleS5yZXBsYWNlKCdfJywgJycpLmlzYWxudW0oKToKKyAgICAgICAgICAgIHNlbGZbaW1hZ2VdW2tleV0gPSB2YWwuc3RyaXAoJyInKQorCisgICAgZGVmIGdldF92YXIoc2VsZiwgdmFyLCBpbWFnZT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBiaXRiYWtlIHZhcmlhYmxlIGZyb20gJ2JpdGJha2UgLWUnIG91dHB1dCBvciBmcm9tIC5lbnYgZmlsZS4KKyAgICAgICAgVGhpcyBpcyBhIGxhenkgbWV0aG9kLCBpLmUuIGl0IHJ1bnMgYml0YmFrZSBvciBwYXJzZXMgZmlsZSBvbmx5IHdoZW4KKyAgICAgICAgb25seSB3aGVuIHZhcmlhYmxlIGlzIHJlcXVlc3RlZC4gSXQgYWxzbyBjYWNoZXMgcmVzdWx0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpbWFnZToKKyAgICAgICAgICAgIGltYWdlID0gc2VsZi5kZWZhdWx0X2ltYWdlCisKKyAgICAgICAgaWYgaW1hZ2Ugbm90IGluIHNlbGY6CisgICAgICAgICAgICBpZiBpbWFnZSBhbmQgc2VsZi52YXJzX2RpcjoKKyAgICAgICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnZhcnNfZGlyLCBpbWFnZSArICcuZW52JykKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICMgcGFyc2UgLmVudiBmaWxlCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmbmFtZSkgYXMgdmFyc2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB2YXJzZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9saW5lKGxpbmUsIGltYWdlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgYml0YmFrZSB2YXJpYWJsZSBmcm9tICVzLiIgJSBmbmFtZQorICAgICAgICAgICAgICAgICAgICBwcmludCAiRmlsZSAlcyBkb2Vzbid0IGV4aXN0LiIgJSBmbmFtZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBHZXQgYml0YmFrZSAtZSBvdXRwdXQKKyAgICAgICAgICAgICAgICBjbWQgPSAiYml0YmFrZSAtZSIKKyAgICAgICAgICAgICAgICBpZiBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgY21kICs9ICIgJXMiICUgaW1hZ2UKKworICAgICAgICAgICAgICAgIGxvZ19sZXZlbCA9IG1zZ2VyLmdldF9sb2dsZXZlbCgpCisgICAgICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKCdub3JtYWwnKQorICAgICAgICAgICAgICAgIHJldCwgbGluZXMgPSBfZXhlY19jbWQoY21kKQorICAgICAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dsZXZlbChsb2dfbGV2ZWwpCisKKyAgICAgICAgICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgJyVzJyBvdXRwdXQuIiAlIGNtZAorICAgICAgICAgICAgICAgICAgICBwcmludCAiQml0YmFrZSBmYWlsZWQgd2l0aCBlcnJvcjpcbiVzXG4iICUgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICAjIFBhcnNlIGJpdGJha2UgLWUgb3V0cHV0CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXMuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2xpbmUobGluZSwgaW1hZ2UpCisKKyAgICAgICAgICAgICMgTWFrZSBmaXJzdCBpbWFnZSBhIGRlZmF1bHQgc2V0IG9mIHZhcmlhYmxlcworICAgICAgICAgICAgaW1hZ2VzID0gW2tleSBmb3Iga2V5IGluIHNlbGYgaWYga2V5XQorICAgICAgICAgICAgaWYgbGVuKGltYWdlcykgPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmW05vbmVdID0gc2VsZltpbWFnZV0KKworICAgICAgICByZXR1cm4gc2VsZltpbWFnZV0uZ2V0KHZhcikKKworIyBDcmVhdGUgQkJfVkFSUyBzaW5nbGV0b24KK0JCX1ZBUlMgPSBCaXRiYWtlVmFycygpCisKK2RlZiBnZXRfYml0YmFrZV92YXIodmFyLCBpbWFnZT1Ob25lKToKKyAgICAiIiIKKyAgICBQcm92aWRlIG9sZCBnZXRfYml0YmFrZV92YXIgQVBJIGJ5IHdyYXBwaW5nCisgICAgZ2V0X3ZhciBtZXRob2Qgb2YgQkJfVkFSUyBzaW5nbGV0b24uCisgICAgIiIiCisgICAgcmV0dXJuIEJCX1ZBUlMuZ2V0X3Zhcih2YXIsIGltYWdlKQorCitkZWYgcGFyc2Vfc291cmNlcGFyYW1zKHNvdXJjZXBhcmFtcyk6CisgICAgIiIiCisgICAgU3BsaXQgc291cmNlcGFyYW1zIHN0cmluZyBvZiB0aGUgZm9ybSBrZXkxPXZhbDFbLGtleTI9dmFsMiwuLi5dCisgICAgaW50byBhIGRpY3QuICBBbHNvIGFjY2VwdHMgdmFsdWVsZXNzIGtleXMgaS5lLiB3aXRob3V0ID0uCisKKyAgICBSZXR1cm5zIGRpY3Qgb2YgcGFyYW0ga2V5L3ZhbCBwYWlycyAobm90ZSB0aGF0IHZhbCBtYXkgYmUgTm9uZSkuCisgICAgIiIiCisgICAgcGFyYW1zX2RpY3QgPSB7fQorCisgICAgcGFyYW1zID0gc291cmNlcGFyYW1zLnNwbGl0KCcsJykKKyAgICBpZiBwYXJhbXM6CisgICAgICAgIGZvciBwYXIgaW4gcGFyYW1zOgorICAgICAgICAgICAgaWYgbm90IHBhcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90ICc9JyBpbiBwYXI6CisgICAgICAgICAgICAgICAga2V5ID0gcGFyCisgICAgICAgICAgICAgICAgdmFsID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrZXksIHZhbCA9IHBhci5zcGxpdCgnPScpCisgICAgICAgICAgICBwYXJhbXNfZGljdFtrZXldID0gdmFsCisKKyAgICByZXR1cm4gcGFyYW1zX2RpY3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3BhcnRpdGlvbmVkZnMucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMTAzYmIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5CkBAIC0wLDAgKzEsMzYyIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggUmVkIEhhdCwgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDggRGFuaWVsIFAuIEJlcnJhbmdlCisjIENvcHlyaWdodCAoYykgMjAwOCBEYXZpZCBQLiBIdWZmCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBJbWFnZUVycm9yCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCisKKyMgT3ZlcmhlYWQgb2YgdGhlIE1CUiBwYXJ0aXRpb25pbmcgc2NoZW1lIChqdXN0IG9uZSBzZWN0b3IpCitNQlJfT1ZFUkhFQUQgPSAxCisKKyMgT3ZlcmhlYWQgb2YgdGhlIEdQVCBwYXJ0aXRpb25pbmcgc2NoZW1lCitHUFRfT1ZFUkhFQUQgPSAzNAorCisjIFNpemUgb2YgYSBzZWN0b3IgaW4gYnl0ZXMKK1NFQ1RPUl9TSVpFID0gNTEyCisKK2NsYXNzIEltYWdlKG9iamVjdCk6CisgICAgIiIiCisgICAgR2VuZXJpYyBiYXNlIG9iamVjdCBmb3IgYW4gaW1hZ2UuCisKKyAgICBBbiBJbWFnZSBpcyBhIGNvbnRhaW5lciBmb3IgYSBzZXQgb2YgRGlza0ltYWdlcyBhbmQgYXNzb2NpYXRlZAorICAgIHBhcnRpdGlvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hdGl2ZV9zeXNyb290PU5vbmUpOgorICAgICAgICBzZWxmLmRpc2tzID0ge30KKyAgICAgICAgc2VsZi5wYXJ0aXRpb25zID0gW10KKyAgICAgICAgIyBTaXplIG9mIGEgc2VjdG9yIHVzZWQgaW4gY2FsY3VsYXRpb25zCisgICAgICAgIHNlbGYuc2VjdG9yX3NpemUgPSBTRUNUT1JfU0laRQorICAgICAgICBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dCA9IEZhbHNlCisgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QgPSBuYXRpdmVfc3lzcm9vdAorCisgICAgZGVmIF9fYWRkX2Rpc2soc2VsZiwgZGlza19uYW1lKToKKyAgICAgICAgIiIiIEFkZCBhIGRpc2sgJ2Rpc2tfbmFtZScgdG8gdGhlIGludGVybmFsIGxpc3Qgb2YgZGlza3MuIE5vdGUsCisgICAgICAgICdkaXNrX25hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXNrIGluIHRoZSB0YXJnZXQgc3lzdGVtCisgICAgICAgIChlLmcuLCBzZGIpLiAiIiIKKworICAgICAgICBpZiBkaXNrX25hbWUgaW4gc2VsZi5kaXNrczoKKyAgICAgICAgICAgICMgV2UgYWxyZWFkeSBoYXZlIHRoaXMgZGlzaworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dAorCisgICAgICAgIHNlbGYuZGlza3NbZGlza19uYW1lXSA9IFwKKyAgICAgICAgICAgICAgICB7J2Rpc2snOiBOb25lLCAgICAgIyBEaXNrIG9iamVjdAorICAgICAgICAgICAgICAgICAnbnVtcGFydCc6IDAsICAgICAjIE51bWJlciBvZiBhbGxvY2F0ZSBwYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgICdyZWFscGFydCc6IDAsICAgICMgTnVtYmVyIG9mIHBhcnRpdGlvbnMgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICAgICAgICAgICAgICAncGFydGl0aW9ucyc6IFtdLCAjIEluZGV4ZXMgdG8gc2VsZi5wYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgICdvZmZzZXQnOiAwLCAgICAgICMgT2Zmc2V0IG9mIG5leHQgcGFydGl0aW9uIChpbiBzZWN0b3JzKQorICAgICAgICAgICAgICAgICAjIE1pbmltdW0gcmVxdWlyZWQgZGlzayBzaXplIHRvIGZpdCBhbGwgcGFydGl0aW9ucyAoaW4gYnl0ZXMpCisgICAgICAgICAgICAgICAgICdtaW5fc2l6ZSc6IDAsCisgICAgICAgICAgICAgICAgICdwdGFibGVfZm9ybWF0JzogIm1zZG9zIn0gIyBQYXJ0aXRpb24gdGFibGUgZm9ybWF0CisKKyAgICBkZWYgYWRkX2Rpc2soc2VsZiwgZGlza19uYW1lLCBkaXNrX29iaik6CisgICAgICAgICIiIiBBZGQgYSBkaXNrIG9iamVjdCB3aGljaCBoYXZlIHRvIGJlIHBhcnRpdGlvbmVkLiBNb3JlIHRoYW4gb25lIGRpc2sKKyAgICAgICAgY2FuIGJlIGFkZGVkLiBJbiBjYXNlIG9mIG11bHRpcGxlIGRpc2tzLCBkaXNrIHBhcnRpdGlvbnMgaGF2ZSB0byBiZQorICAgICAgICBhZGRlZCBmb3IgZWFjaCBkaXNrIHNlcGFyYXRlbHkgd2l0aCAnYWRkX3BhcnRpdGlvbigpIi4gIiIiCisKKyAgICAgICAgc2VsZi5fX2FkZF9kaXNrKGRpc2tfbmFtZSkKKyAgICAgICAgc2VsZi5kaXNrc1tkaXNrX25hbWVdWydkaXNrJ10gPSBkaXNrX29iagorCisgICAgZGVmIF9fYWRkX3BhcnRpdGlvbihzZWxmLCBwYXJ0KToKKyAgICAgICAgIiIiIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yICdhZGRfcGFydGl0aW9uKCknIHdoaWNoIGFkZHMgYQorICAgICAgICBwYXJ0aXRpb24gdG8gdGhlIGludGVybmFsIGxpc3Qgb2YgcGFydGl0aW9ucy4gIiIiCisKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dAorCisgICAgICAgIHNlbGYucGFydGl0aW9ucy5hcHBlbmQocGFydCkKKyAgICAgICAgc2VsZi5fX2FkZF9kaXNrKHBhcnRbJ2Rpc2tfbmFtZSddKQorCisgICAgZGVmIGFkZF9wYXJ0aXRpb24oc2VsZiwgc2l6ZSwgZGlza19uYW1lLCBtb3VudHBvaW50LCBzb3VyY2VfZmlsZT1Ob25lLCBmc3R5cGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1Ob25lLCBmc29wdHM9Tm9uZSwgYm9vdD1GYWxzZSwgYWxpZ249Tm9uZSwgbm9fdGFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgcGFydF90eXBlPU5vbmUsIHV1aWQ9Tm9uZSk6CisgICAgICAgICIiIiBBZGQgdGhlIG5leHQgcGFydGl0aW9uLiBQcnRpdGlvbnMgaGF2ZSB0byBiZSBhZGRlZCBpbiB0aGUKKyAgICAgICAgZmlyc3QtdG8tbGFzdCBvcmRlci4gIiIiCisKKyAgICAgICAga3NfcG51bSA9IGxlbihzZWxmLnBhcnRpdGlvbnMpCisKKyAgICAgICAgIyBDb252ZXJ0aW5nIGtCIHRvIHNlY3RvcnMgZm9yIHBhcnRlZAorICAgICAgICBzaXplID0gc2l6ZSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplCisKKyAgICAgICAgIyBXZSBzdGlsbCBuZWVkIHBhcnRpdGlvbiBmb3IgIi8iIG9yIG5vbi1zdWJ2b2x1bWUKKyAgICAgICAgaWYgbW91bnRwb2ludCA9PSAiLyIgb3Igbm90IGZzb3B0czoKKyAgICAgICAgICAgIHBhcnQgPSB7J2tzX3BudW0nOiBrc19wbnVtLCAjIFBhcnRpdGlvbiBudW1iZXIgaW4gdGhlIEtTIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiBzaXplLCAjIEluIHNlY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgJ21vdW50cG9pbnQnOiBtb3VudHBvaW50LCAjIE1vdW50IHJlbGF0aXZlIHRvIGNocm9vdAorICAgICAgICAgICAgICAgICAgICAnc291cmNlX2ZpbGUnOiBzb3VyY2VfZmlsZSwgIyBwYXJ0aXRpb24gY29udGVudHMKKyAgICAgICAgICAgICAgICAgICAgJ2ZzdHlwZSc6IGZzdHlwZSwgIyBGaWxlc3lzdGVtIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgJ2Zzb3B0cyc6IGZzb3B0cywgIyBGaWxlc3lzdGVtIG1vdW50IG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogbGFiZWwsICMgUGFydGl0aW9uIGxhYmVsCisgICAgICAgICAgICAgICAgICAgICdkaXNrX25hbWUnOiBkaXNrX25hbWUsICMgcGh5c2ljYWwgZGlzayBuYW1lIGhvbGRpbmcgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICdkZXZpY2UnOiBOb25lLCAjIGtwYXJ0eCBkZXZpY2Ugbm9kZSBmb3IgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICdudW0nOiBOb25lLCAjIFBhcnRpdGlvbiBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgJ2Jvb3QnOiBib290LCAjIEJvb3RhYmxlIGZsYWcKKyAgICAgICAgICAgICAgICAgICAgJ2FsaWduJzogYWxpZ24sICMgUGFydGl0aW9uIGFsaWdubWVudAorICAgICAgICAgICAgICAgICAgICAnbm9fdGFibGUnIDogbm9fdGFibGUsICMgUGFydGl0aW9uIGRvZXMgbm90IGFwcGVhciBpbiBwYXJ0aXRpb24gdGFibGUKKyAgICAgICAgICAgICAgICAgICAgJ3BhcnRfdHlwZScgOiBwYXJ0X3R5cGUsICMgUGFydGl0aW9uIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgJ3V1aWQnOiB1dWlkfSAjIFBhcnRpdGlvbiBVVUlECisKKyAgICAgICAgICAgIHNlbGYuX19hZGRfcGFydGl0aW9uKHBhcnQpCisKKyAgICBkZWYgbGF5b3V0X3BhcnRpdGlvbnMoc2VsZiwgcHRhYmxlX2Zvcm1hdD0ibXNkb3MiKToKKyAgICAgICAgIiIiIExheW91dCB0aGUgcGFydGl0aW9ucywgbWVhbmluZyBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIGV2ZXJ5CisgICAgICAgIHBhcnRpdGlvbiBvbiB0aGUgZGlzay4gVGhlICdwdGFibGVfZm9ybWF0JyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUKKyAgICAgICAgcGFydGl0aW9uIHRhYmxlIGZvcm1hdCBhbmQgbWF5IGJlICJtc2RvcyIuICIiIgorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBc3NpZ25pbmcgJXMgcGFydGl0aW9ucyB0byBkaXNrcyIgJSBwdGFibGVfZm9ybWF0KQorCisgICAgICAgIGlmIHNlbGYuX3BhcnRpdGlvbnNfbGF5ZWRfb3V0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcGFydGl0aW9uc19sYXllZF9vdXQgPSBUcnVlCisKKyAgICAgICAgIyBHbyB0aHJvdWdoIHBhcnRpdGlvbnMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkIGluIC5rcyBmaWxlCisgICAgICAgIGZvciBudW0gaW4gcmFuZ2UobGVuKHNlbGYucGFydGl0aW9ucykpOgorICAgICAgICAgICAgcGFydCA9IHNlbGYucGFydGl0aW9uc1tudW1dCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRpc2tzLmhhc19rZXkocGFydFsnZGlza19uYW1lJ10pOgorICAgICAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoIk5vIGRpc2sgJXMgZm9yIHBhcnRpdGlvbiAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFydFsnZGlza19uYW1lJ10sIHBhcnRbJ21vdW50cG9pbnQnXSkpCisKKyAgICAgICAgICAgIGlmIHB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJyBhbmQgcGFydFsncGFydF90eXBlJ106CisgICAgICAgICAgICAgICAgIyBUaGUgLS1wYXJ0LXR5cGUgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgZm9yIE1CUiBwYXJ0aXRpb25zLAorICAgICAgICAgICAgICAgICMgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZCBtYXAgdG8gdGhlIDEtYnl0ZSAicGFydGl0aW9uIHR5cGUiCisgICAgICAgICAgICAgICAgIyBmaWxlZCBhdCBvZmZzZXQgMyBvZiB0aGUgcGFydGl0aW9uIGVudHJ5LgorICAgICAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoInNldHRpbmcgY3VzdG9tIHBhcnRpdGlvbiB0eXBlIGlzIG5vdCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsZW1lbnRlZCBmb3IgbXNkb3MgcGFydGl0aW9ucyIpCisKKyAgICAgICAgICAgICMgR2V0IHRoZSBkaXNrIHdoZXJlIHRoZSBwYXJ0aXRpb24gaXMgbG9jYXRlZAorICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbcGFydFsnZGlza19uYW1lJ11dCisgICAgICAgICAgICBkaXNrWydudW1wYXJ0J10gKz0gMQorICAgICAgICAgICAgaWYgbm90IHBhcnRbJ25vX3RhYmxlJ106CisgICAgICAgICAgICAgICAgZGlza1sncmVhbHBhcnQnXSArPSAxCisgICAgICAgICAgICBkaXNrWydwdGFibGVfZm9ybWF0J10gPSBwdGFibGVfZm9ybWF0CisKKyAgICAgICAgICAgIGlmIGRpc2tbJ251bXBhcnQnXSA9PSAxOgorICAgICAgICAgICAgICAgIGlmIHB0YWJsZV9mb3JtYXQgPT0gIm1zZG9zIjoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmhlYWQgPSBNQlJfT1ZFUkhFQUQKKyAgICAgICAgICAgICAgICBlbGlmIHB0YWJsZV9mb3JtYXQgPT0gImdwdCI6CisgICAgICAgICAgICAgICAgICAgIG92ZXJoZWFkID0gR1BUX09WRVJIRUFECisKKyAgICAgICAgICAgICAgICAjIFNraXAgb25lIHNlY3RvciByZXF1aXJlZCBmb3IgdGhlIHBhcnRpdGlvbmluZyBzY2hlbWUgb3ZlcmhlYWQKKyAgICAgICAgICAgICAgICBkaXNrWydvZmZzZXQnXSArPSBvdmVyaGVhZAorCisgICAgICAgICAgICBpZiBkaXNrWydyZWFscGFydCddID4gMzoKKyAgICAgICAgICAgICAgICAjIFJlc2VydmUgYSBzZWN0b3IgZm9yIEVCUiBmb3IgZXZlcnkgbG9naWNhbCBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAjIGJlZm9yZSBhbGlnbm1lbnQgaXMgcGVyZm9ybWVkLgorICAgICAgICAgICAgICAgIGlmIHB0YWJsZV9mb3JtYXQgPT0gIm1zZG9zIjoKKyAgICAgICAgICAgICAgICAgICAgZGlza1snb2Zmc2V0J10gKz0gMQorCisKKyAgICAgICAgICAgIGlmIHBhcnRbJ2FsaWduJ106CisgICAgICAgICAgICAgICAgIyBJZiBub3QgZmlyc3QgcGFydGl0aW9uIGFuZCB3ZSBkbyBoYXZlIGFsaWdubWVudCBzZXQgd2UgbmVlZAorICAgICAgICAgICAgICAgICMgdG8gYWxpZ24gdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGxlYXZlcyBhIGVtcHR5IHNwYWNlcyB0byB0aGUgZGlzay4gVG8gZmlsbCB0aGUKKyAgICAgICAgICAgICAgICAjIGdhcHMgd2UgY291bGQgZW5sYXJnZWEgdGhlIHByZXZpb3VzIHBhcnRpdGlvbj8KKworICAgICAgICAgICAgICAgICMgQ2FsYyBob3cgbXVjaCB0aGUgYWxpZ25tZW50IGlzIG9mZi4KKyAgICAgICAgICAgICAgICBhbGlnbl9zZWN0b3JzID0gZGlza1snb2Zmc2V0J10gJSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplKQorCisgICAgICAgICAgICAgICAgaWYgYWxpZ25fc2VjdG9yczoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBwYXJ0aXRpb24gaXMgbm90IGFsaWduZWQgYXMgcmVxdWlyZWQsIHdlIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgIyB0byBtb3ZlIGZvcndhcmQgdG8gdGhlIG5leHQgYWxpZ25tZW50IHBvaW50CisgICAgICAgICAgICAgICAgICAgIGFsaWduX3NlY3RvcnMgPSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplKSAtIGFsaWduX3NlY3RvcnMKKworICAgICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiUmVhbGlnbm1lbnQgZm9yICVzJXMgd2l0aCAlcyBzZWN0b3JzLCBvcmlnaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZmZzZXQgJXMsIHRhcmdldCBhbGlnbm1lbnQgaXMgJXNLLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnZGlza19uYW1lJ10sIGRpc2tbJ251bXBhcnQnXSwgYWxpZ25fc2VjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tbJ29mZnNldCddLCBwYXJ0WydhbGlnbiddKSkKKworICAgICAgICAgICAgICAgICAgICAjIGluY3JlYXNlIHRoZSBvZmZzZXQgc28gd2UgYWN0dWFsbHkgc3RhcnQgdGhlIHBhcnRpdGlvbiBvbiByaWdodCBhbGlnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgZGlza1snb2Zmc2V0J10gKz0gYWxpZ25fc2VjdG9ycworCisgICAgICAgICAgICBwYXJ0WydzdGFydCddID0gZGlza1snb2Zmc2V0J10KKyAgICAgICAgICAgIGRpc2tbJ29mZnNldCddICs9IHBhcnRbJ3NpemUnXQorCisgICAgICAgICAgICBwYXJ0Wyd0eXBlJ10gPSAncHJpbWFyeScKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0Wydub190YWJsZSddOgorICAgICAgICAgICAgICAgIHBhcnRbJ251bSddID0gZGlza1sncmVhbHBhcnQnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJ0WydudW0nXSA9IDAKKworICAgICAgICAgICAgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICJtc2RvcyI6CisgICAgICAgICAgICAgICAgaWYgZGlza1sncmVhbHBhcnQnXSA+IDM6CisgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3R5cGUnXSA9ICdsb2dpY2FsJworICAgICAgICAgICAgICAgICAgICBwYXJ0WydudW0nXSA9IGRpc2tbJ3JlYWxwYXJ0J10gKyAxCisKKyAgICAgICAgICAgIGRpc2tbJ3BhcnRpdGlvbnMnXS5hcHBlbmQobnVtKQorICAgICAgICAgICAgbXNnZXIuZGVidWcoIkFzc2lnbmVkICVzIHRvICVzJWQsIHNlY3RvcnMgcmFuZ2UgJWQtJWQgc2l6ZSAlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic2VjdG9ycyAoJWQgYnl0ZXMpLiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhcnRbJ21vdW50cG9pbnQnXSwgcGFydFsnZGlza19uYW1lJ10sIHBhcnRbJ251bSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10sIHBhcnRbJ3N0YXJ0J10gKyBwYXJ0WydzaXplJ10gLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3NpemUnXSwgcGFydFsnc2l6ZSddICogc2VsZi5zZWN0b3Jfc2l6ZSkpCisKKyAgICAgICAgIyBPbmNlIGFsbCB0aGUgcGFydGl0aW9ucyBoYXZlIGJlZW4gbGF5ZWQgb3V0LCB3ZSBjYW4gY2FsY3VsYXRlIHRoZQorICAgICAgICAjIG1pbnVtaW0gZGlzayBzaXplcy4KKyAgICAgICAgZm9yIGRpc2sgaW4gc2VsZi5kaXNrcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGRpc2tbJ21pbl9zaXplJ10gPSBkaXNrWydvZmZzZXQnXQorICAgICAgICAgICAgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICJncHQiOgorICAgICAgICAgICAgICAgIGRpc2tbJ21pbl9zaXplJ10gKz0gR1BUX09WRVJIRUFECisKKyAgICAgICAgICAgIGRpc2tbJ21pbl9zaXplJ10gKj0gc2VsZi5zZWN0b3Jfc2l6ZQorCisgICAgZGVmIF9fY3JlYXRlX3BhcnRpdGlvbihzZWxmLCBkZXZpY2UsIHBhcnR0eXBlLCBmc3R5cGUsIHN0YXJ0LCBzaXplKToKKyAgICAgICAgIiIiIENyZWF0ZSBhIHBhcnRpdGlvbiBvbiBhbiBpbWFnZSBkZXNjcmliZWQgYnkgdGhlICdkZXZpY2UnIG9iamVjdC4gIiIiCisKKyAgICAgICAgIyBTdGFydCBpcyBpbmNsdWRlZCB0byB0aGUgc2l6ZSBzbyB3ZSBuZWVkIHRvIHN1YnN0cmFjdCBvbmUgZnJvbSB0aGUgZW5kLgorICAgICAgICBlbmQgPSBzdGFydCArIHNpemUgLSAxCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAnJXMnIHBhcnRpdGlvbiwgc2VjdG9ycyAlZC0lZCwgc2l6ZSAlZCBzZWN0b3JzIiAlCisgICAgICAgICAgICAgICAgICAgIChwYXJ0dHlwZSwgc3RhcnQsIGVuZCwgc2l6ZSkpCisKKyAgICAgICAgY21kID0gInBhcnRlZCAtcyAlcyB1bml0IHMgbWtwYXJ0ICVzIiAlIChkZXZpY2UsIHBhcnR0eXBlKQorICAgICAgICBpZiBmc3R5cGU6CisgICAgICAgICAgICBjbWQgKz0gIiAlcyIgJSBmc3R5cGUKKyAgICAgICAgY21kICs9ICIgJWQgJWQiICUgKHN0YXJ0LCBlbmQpCisKKyAgICAgICAgcmV0dXJuIGV4ZWNfbmF0aXZlX2NtZChjbWQsIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgX19mb3JtYXRfZGlza3Moc2VsZik6CisgICAgICAgIHNlbGYubGF5b3V0X3BhcnRpdGlvbnMoKQorCisgICAgICAgIGZvciBkZXYgaW4gc2VsZi5kaXNrcy5rZXlzKCk6CisgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1tkZXZdCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygiSW5pdGlhbGl6aW5nIHBhcnRpdGlvbiB0YWJsZSBmb3IgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UpKQorICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJwYXJ0ZWQgLXMgJXMgbWtsYWJlbCAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UsIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBtc2dlci5kZWJ1ZygiQ3JlYXRpbmcgcGFydGl0aW9ucyIpCisKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgaWYgcGFydFsnbnVtJ10gPT0gMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1twYXJ0WydkaXNrX25hbWUnXV0KKyAgICAgICAgICAgIGlmIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSA9PSAibXNkb3MiIGFuZCBwYXJ0WydudW0nXSA9PSA1OgorICAgICAgICAgICAgICAgICMgQ3JlYXRlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbiAobm90ZTogZXh0ZW5kZWQKKyAgICAgICAgICAgICAgICAjIHBhcnRpdGlvbiBpcyBkZXNjcmliZWQgaW4gTUJSIGFuZCBjb250YWlucyBhbGwKKyAgICAgICAgICAgICAgICAjIGxvZ2ljYWwgcGFydGl0aW9ucykuIFRoZSBsb2dpY2FsIHBhcnRpdGlvbnMgc2F2ZSBhCisgICAgICAgICAgICAgICAgIyBzZWN0b3IgZm9yIGFuIEVCUiBqdXN0IGJlZm9yZSB0aGUgc3RhcnQgb2YgYQorICAgICAgICAgICAgICAgICMgcGFydGl0aW9uLiBUaGUgZXh0ZW5kZWQgcGFydGl0aW9uIG11c3Qgc3RhcnQgb25lCisgICAgICAgICAgICAgICAgIyBzZWN0b3IgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbG9naWNhbAorICAgICAgICAgICAgICAgICMgcGFydGl0aW9uLiBUaGlzIHdheSB0aGUgZmlyc3QgRUJSIGlzIGluc2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIGV4dGVuZGVkIHBhcnRpdGlvbi4gU2luY2UgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbnMKKyAgICAgICAgICAgICAgICAjIHN0YXJ0cyBhIHNlY3RvciBiZWZvcmUgdGhlIGZpcnN0IGxvZ2ljYWwgcGFydGl0aW9uLAorICAgICAgICAgICAgICAgICMgYWRkIGEgc2VjdG9yIGF0IHRoZSBiYWNrLCBzbyB0aGF0IHRoZXJlIGlzIGVub3VnaAorICAgICAgICAgICAgICAgICMgcm9vbSBmb3IgYWxsIGxvZ2ljYWwgcGFydGl0aW9ucy4KKyAgICAgICAgICAgICAgICBzZWxmLl9fY3JlYXRlX3BhcnRpdGlvbihkaXNrWydkaXNrJ10uZGV2aWNlLCAiZXh0ZW5kZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHBhcnRbJ3N0YXJ0J10gLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tbJ29mZnNldCddIC0gcGFydFsnc3RhcnQnXSArIDEpCisKKyAgICAgICAgICAgIGlmIHBhcnRbJ2ZzdHlwZSddID09ICJzd2FwIjoKKyAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSA9ICJsaW51eC1zd2FwIgorICAgICAgICAgICAgZWxpZiBwYXJ0Wydmc3R5cGUnXSA9PSAidmZhdCI6CisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAiZmF0MzIiCisgICAgICAgICAgICBlbGlmIHBhcnRbJ2ZzdHlwZSddID09ICJtc2RvcyI6CisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAiZmF0MTYiCisgICAgICAgICAgICBlbGlmIHBhcnRbJ2ZzdHlwZSddID09ICJvbnRyYWNrZG02YXV4MyI6CisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAib250cmFja2RtNmF1eDMiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVHlwZSBmb3IgZXh0Mi9leHQzL2V4dDQvYnRyZnMKKyAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSA9ICJleHQyIgorCisgICAgICAgICAgICAjIEJvb3QgUk9NIG9mIE9NQVAgYm9hcmRzIHJlcXVpcmUgdmZhdCBib290IHBhcnRpdGlvbiB0byBoYXZlIGFuCisgICAgICAgICAgICAjIGV2ZW4gbnVtYmVyIG9mIHNlY3RvcnMuCisgICAgICAgICAgICBpZiBwYXJ0Wydtb3VudHBvaW50J10gPT0gIi9ib290IiBhbmQgcGFydFsnZnN0eXBlJ10gaW4gWyJ2ZmF0IiwgIm1zZG9zIl0gXAorICAgICAgICAgICAgICAgYW5kIHBhcnRbJ3NpemUnXSAlIDI6CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlN1YnN0cmFjdGluZyBvbmUgc2VjdG9yIGZyb20gJyVzJyBwYXJ0aXRpb24gdG8gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCBldmVuIG51bWJlciBvZiBzZWN0b3JzIGZvciB0aGUgcGFydGl0aW9uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0Wydtb3VudHBvaW50J10pCisgICAgICAgICAgICAgICAgcGFydFsnc2l6ZSddIC09IDEKKworICAgICAgICAgICAgc2VsZi5fX2NyZWF0ZV9wYXJ0aXRpb24oZGlza1snZGlzayddLmRldmljZSwgcGFydFsndHlwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUsIHBhcnRbJ3N0YXJ0J10sIHBhcnRbJ3NpemUnXSkKKworICAgICAgICAgICAgaWYgcGFydFsncGFydF90eXBlJ106CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoInBhcnRpdGlvbiAlZDogc2V0IHR5cGUgVUlEIHRvICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIHBhcnRbJ3BhcnRfdHlwZSddKSkKKyAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInNnZGlzayAtLXR5cGVjb2RlPSVkOiVzICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ251bSddLCBwYXJ0WydwYXJ0X3R5cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tbJ2Rpc2snXS5kZXZpY2UpLCBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBpZiBwYXJ0Wyd1dWlkJ106CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoInBhcnRpdGlvbiAlZDogc2V0IFVVSUQgdG8gJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgcGFydFsndXVpZCddKSkKKyAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInNnZGlzayAtLXBhcnRpdGlvbi1ndWlkPSVkOiVzICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ251bSddLCBwYXJ0Wyd1dWlkJ10sIGRpc2tbJ2Rpc2snXS5kZXZpY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBpZiBwYXJ0Wydib290J106CisgICAgICAgICAgICAgICAgZmxhZ19uYW1lID0gImxlZ2FjeV9ib290IiBpZiBkaXNrWydwdGFibGVfZm9ybWF0J10gPT0gJ2dwdCcgZWxzZSAiYm9vdCIKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiU2V0ICclcycgZmxhZyBmb3IgcGFydGl0aW9uICclcycgb24gZGlzayAnJXMnIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ19uYW1lLCBwYXJ0WydudW0nXSwgZGlza1snZGlzayddLmRldmljZSkpCisgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJwYXJ0ZWQgLXMgJXMgc2V0ICVkICVzIG9uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UsIHBhcnRbJ251bSddLCBmbGFnX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICAjIFBhcnRlZCBkZWZhdWx0cyB0byBlbmFibGluZyB0aGUgbGJhIGZsYWcgZm9yIGZhdDE2IHBhcnRpdGlvbnMsCisgICAgICAgICAgICAjIHdoaWNoIGNhdXNlcyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHNvbWUgZmlybXdhcmUgKGFuZCByZWFsbHkKKyAgICAgICAgICAgICMgaXNuJ3QgbmVjZXNzYXJ5KS4KKyAgICAgICAgICAgIGlmIHBhcnRlZF9mc190eXBlID09ICJmYXQxNiI6CisgICAgICAgICAgICAgICAgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICdtc2Rvcyc6CisgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJEaXNhYmxlICdsYmEnIGZsYWcgZm9yIHBhcnRpdGlvbiAnJXMnIG9uIGRpc2sgJyVzJyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgZGlza1snZGlzayddLmRldmljZSkpCisgICAgICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgicGFydGVkIC1zICVzIHNldCAlZCBsYmEgb2ZmIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlLCBwYXJ0WydudW0nXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGlza3M6CisgICAgICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3M6CisgICAgICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbZGV2XQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGlza1snZGlzayddLmNsZWFudXAoKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGFzc2VtYmxlKHNlbGYsIGltYWdlX2ZpbGUpOgorICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGluZyBwYXJ0aXRpb25zIikKKworICAgICAgICBmb3IgcGFydCBpbiBzZWxmLnBhcnRpdGlvbnM6CisgICAgICAgICAgICBzb3VyY2UgPSBwYXJ0Wydzb3VyY2VfZmlsZSddCisgICAgICAgICAgICBpZiBzb3VyY2U6CisgICAgICAgICAgICAgICAgIyBpbnN0YWxsIHNvdXJjZV9maWxlIGNvbnRlbnRzIGludG8gYSBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICBjbWQgPSAiZGQgaWY9JXMgb2Y9JXMgYnM9JWQgc2Vlaz0lZCBjb3VudD0lZCBjb252PW5vdHJ1bmMiICUgXAorICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIGltYWdlX2ZpbGUsIHNlbGYuc2VjdG9yX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10sIHBhcnRbJ3NpemUnXSkKKyAgICAgICAgICAgICAgICBleGVjX2NtZChjbWQpCisKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGVkICVzIGluIHBhcnRpdGlvbiAlZCwgc2VjdG9ycyAlZC0lZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXplICVkIHNlY3RvcnMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIHBhcnRbJ251bSddLCBwYXJ0WydzdGFydCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0WydzdGFydCddICsgcGFydFsnc2l6ZSddIC0gMSwgcGFydFsnc2l6ZSddKSkKKworICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzb3VyY2UsIGltYWdlX2ZpbGUgKyAnLnAlZCcgJSBwYXJ0WydudW0nXSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGZvciBkZXYgaW4gc2VsZi5kaXNrcy5rZXlzKCk6CisgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1tkZXZdCisgICAgICAgICAgICBkaXNrWydkaXNrJ10uY3JlYXRlKCkKKworICAgICAgICBzZWxmLl9fZm9ybWF0X2Rpc2tzKCkKKworICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3J1bm5lci5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDMxOTE3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5CkBAIC0wLDAgKzEsMTEwIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKKworZGVmIHJ1bnRvb2woY21kbG5fb3JfYXJncywgY2F0Y2g9MSk6CisgICAgIiIiIHdyYXBwZXIgZm9yIG1vc3Qgb2YgdGhlIHN1YnByb2Nlc3MgY2FsbHMKKyAgICBpbnB1dDoKKyAgICAgICAgY21kbG5fb3JfYXJnczogY2FuIGJlIGJvdGggYXJncyBhbmQgY21kbG4gc3RyIChzaGVsbD1UcnVlKQorICAgICAgICBjYXRjaDogMCwgcXVpdGVseSBydW4KKyAgICAgICAgICAgICAgIDEsIG9ubHkgU1RET1VUCisgICAgICAgICAgICAgICAyLCBvbmx5IFNUREVSUgorICAgICAgICAgICAgICAgMywgYm90aCBTVERPVVQgYW5kIFNUREVSUgorICAgIHJldHVybjoKKyAgICAgICAgKHJjLCBvdXRwdXQpCisgICAgICAgIGlmIGNhdGNoPT0wOiB0aGUgb3V0cHV0IHdpbGwgYWx3YXlzIE5vbmUKKyAgICAiIiIKKworICAgIGlmIGNhdGNoIG5vdCBpbiAoMCwgMSwgMiwgMyk6CisgICAgICAgICMgaW52YWxpZCBjYXRjaCBzZWxlY3Rpb24sIHdpbGwgY2F1c2UgZXhjZXB0aW9uLCB0aGF0J3MgZ29vZAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgaWYgaXNpbnN0YW5jZShjbWRsbl9vcl9hcmdzLCBsaXN0KToKKyAgICAgICAgY21kID0gY21kbG5fb3JfYXJnc1swXQorICAgICAgICBzaGVsbCA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgaW1wb3J0IHNobGV4CisgICAgICAgIGNtZCA9IHNobGV4LnNwbGl0KGNtZGxuX29yX2FyZ3MpWzBdCisgICAgICAgIHNoZWxsID0gVHJ1ZQorCisgICAgaWYgY2F0Y2ggIT0gMzoKKyAgICAgICAgZGV2X251bGwgPSBvcy5vcGVuKCIvZGV2L251bGwiLCBvcy5PX1dST05MWSkKKworICAgIGlmIGNhdGNoID09IDA6CisgICAgICAgIHNvdXQgPSBkZXZfbnVsbAorICAgICAgICBzZXJyID0gZGV2X251bGwKKyAgICBlbGlmIGNhdGNoID09IDE6CisgICAgICAgIHNvdXQgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgc2VyciA9IGRldl9udWxsCisgICAgZWxpZiBjYXRjaCA9PSAyOgorICAgICAgICBzb3V0ID0gZGV2X251bGwKKyAgICAgICAgc2VyciA9IHN1YnByb2Nlc3MuUElQRQorICAgIGVsaWYgY2F0Y2ggPT0gMzoKKyAgICAgICAgc291dCA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBzZXJyID0gc3VicHJvY2Vzcy5TVERPVVQKKworICAgIHRyeToKKyAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbG5fb3JfYXJncywgc3Rkb3V0PXNvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zZXJyLCBzaGVsbD1zaGVsbCkKKyAgICAgICAgKHNvdXQsIHNlcnIpID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgY29tYmluZSBzdGRvdXQgYW5kIHN0ZGVyciwgZmlsdGVyIE5vbmUgb3V0CisgICAgICAgIG91dCA9ICcnLmpvaW4oZmlsdGVyKE5vbmUsIFtzb3V0LCBzZXJyXSkpCisgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKKyAgICAgICAgaWYgZXJyLmVycm5vID09IDI6CisgICAgICAgICAgICAjIFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgICAgICAgICBtc2dlci5lcnJvcignQ2Fubm90IHJ1biBjb21tYW5kOiAlcywgbG9zdCBkZXBlbmRlbmN5PycgJSBjbWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSAjIHJlbGF5CisgICAgZmluYWxseToKKyAgICAgICAgaWYgY2F0Y2ggIT0gMzoKKyAgICAgICAgICAgIG9zLmNsb3NlKGRldl9udWxsKQorCisgICAgcmV0dXJuIChwcm9jZXNzLnJldHVybmNvZGUsIG91dCkKKworZGVmIHNob3coY21kbG5fb3JfYXJncyk6CisgICAgIyBzaG93IGFsbCB0aGUgbWVzc2FnZSB1c2luZyBtc2dlci52ZXJib3NlCisKKyAgICByY29kZSwgb3V0ID0gcnVudG9vbChjbWRsbl9vcl9hcmdzLCBjYXRjaD0zKQorCisgICAgaWYgaXNpbnN0YW5jZShjbWRsbl9vcl9hcmdzLCBsaXN0KToKKyAgICAgICAgY21kID0gJyAnLmpvaW4oY21kbG5fb3JfYXJncykKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSBjbWRsbl9vcl9hcmdzCisKKyAgICBtc2cgPSAncnVubmluZyBjb21tYW5kOiAiJXMiJyAlIGNtZAorICAgIGlmIG91dDoKKyAgICAgICAgb3V0ID0gb3V0LnN0cmlwKCkKKyAgICBpZiBvdXQ6CisgICAgICAgIG1zZyArPSAnLCB3aXRoIG91dHB1dDo6JworICAgICAgICBtc2cgKz0gJ1xuICArLS0tLS0tLS0tLS0tLS0tLScKKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIG1zZyArPSAnXG4gIHwgJXMnICUgbGluZQorICAgICAgICBtc2cgKz0gJ1xuICArLS0tLS0tLS0tLS0tLS0tLScKKworICAgIG1zZ2VyLnZlcmJvc2UobXNnKQorICAgIHJldHVybiByY29kZQorCitkZWYgb3V0cyhjbWRsbl9vcl9hcmdzLCBjYXRjaD0xKToKKyAgICAjIGdldCB0aGUgb3V0cHV0cyBvZiB0b29scworICAgIHJldHVybiBydW50b29sKGNtZGxuX29yX2FyZ3MsIGNhdGNoKVsxXS5zdHJpcCgpCisKK2RlZiBxdWlldChjbWRsbl9vcl9hcmdzKToKKyAgICByZXR1cm4gcnVudG9vbChjbWRsbl9vcl9hcmdzLCBjYXRjaD0wKVswXQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvc3lzbGludXgucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvbGliL3dpYy91dGlscy9zeXNsaW51eC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNlMjg2Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL2xpYi93aWMvdXRpbHMvc3lzbGludXgucHkKQEAgLTAsMCArMSw1OCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIEFVVEhPUgorIyBBZHJpYW4gRnJlaWhvZmVyIDxhZHJpYW4uZnJlaWhvZmVyIChhdF0gbmVyYXRlYy5jb20+CisKKworaW1wb3J0IHJlCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKKworCitkZWYgc2VyaWFsX2NvbnNvbGVfZm9ybV9rYXJncyhrZXJuZWxfYXJncyk6CisgICAgIiIiCisgICAgQ3JlYXRlIFNFUklBTC4uLiBsaW5lIGZyb20ga2VybmVsIHBhcmFtZXRlcnMKKworICAgIHN5c2xpbnV4IG5lZWRzIGEgbGluZSBTRVJJQUwgcG9ydCBbYmF1ZHJhdGUgW2Zsb3djb250cm9sXV0KKyAgICBpbiB0aGUgc3lzbGludXguY2ZnIGZpbGUuIFRoZSBjb25maWcgbGluZSBpcyBnZW5lcmF0ZWQgYmFzZWQKKyAgICBvbiBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzLiBUaGUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGZpcnN0CisgICAgdHR5UyBjb25zb2xlIGFyZSBjb25zaWRlcmVkIGZvciBzeXNsaW51eCBjb25maWcuCisgICAgQHBhcmFtIGtlcm5lbF9hcmdzIGtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICBAcmV0dXJuIGxpbmUgZm9yIHN5c2xpbnV4IGNvbmZpZyBmaWxlIGUuZy4gIlNFUklBTCAwIDExNTIwMCIKKyAgICAiIiIKKyAgICBzeXNsaW51eF9jb25mID0gIiIKKyAgICBmb3IgcGFyYW0gaW4ga2VybmVsX2FyZ3Muc3BsaXQoKToKKyAgICAgICAgcGFyYW1fbWF0Y2ggPSByZS5tYXRjaCgiY29uc29sZT10dHlTKFswLTldKyksPyhbMC05XSopKFtub2VdPykoWzAtOV0/KShyPykiLCBwYXJhbSkKKyAgICAgICAgaWYgcGFyYW1fbWF0Y2g6CisgICAgICAgICAgICBzeXNsaW51eF9jb25mICs9ICJTRVJJQUwgIiArIHBhcmFtX21hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICAjIGJhdWRyYXRlCisgICAgICAgICAgICBpZiBwYXJhbV9tYXRjaC5ncm91cCgyKToKKyAgICAgICAgICAgICAgICBzeXNsaW51eF9jb25mICs9ICIgIiArIHBhcmFtX21hdGNoLmdyb3VwKDIpCisgICAgICAgICAgICAjIHBhcml0eQorICAgICAgICAgICAgaWYgcGFyYW1fbWF0Y2guZ3JvdXAoMykgYW5kIHBhcmFtX21hdGNoLmdyb3VwKDMpICE9ICduJzoKKyAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJzeXNsaW51eCBkb2VzIG5vdCBzdXBwb3J0IHBhcml0eSBmb3IgY29uc29sZS4ge30gaXMgaWdub3JlZC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhcmFtX21hdGNoLmdyb3VwKDMpKSkKKyAgICAgICAgICAgICMgbnVtYmVyIG9mIGJpdHMKKyAgICAgICAgICAgIGlmIHBhcmFtX21hdGNoLmdyb3VwKDQpIGFuZCBwYXJhbV9tYXRjaC5ncm91cCg0KSAhPSAnOCc6CisgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygic3lzbGludXggc3VwcG9ydHMgOCBiaXQgY29uc29sZSBjb25maWd1cmF0aW9uIG9ubHkuIHt9IGlzIGlnbm9yZWQuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChwYXJhbV9tYXRjaC5ncm91cCg0KSkpCisgICAgICAgICAgICAjIGZsb3cgY29udHJvbAorICAgICAgICAgICAgaWYgcGFyYW1fbWF0Y2guZ3JvdXAoNSkgYW5kIHBhcmFtX21hdGNoLmdyb3VwKDUpICE9ICcnOgorICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoInN5c2xpbnV4IGNvbnNvbGUgZmxvd2NvbnRyb2wgY29uZmlndXJhdGlvbi4ge30gaXMgaWdub3JlZC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhcmFtX21hdGNoLmdyb3VwKDUpKSkKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICByZXR1cm4gc3lzbGludXhfY29uZgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL2xuciBiL3lvY3RvLXBva3kvc2NyaXB0cy9sbnIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWRhY2ViZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9sbnIKQEAgLTAsMCArMSwyMSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENyZWF0ZSBhICpyZWxhdGl2ZSogc3ltbGluaywganVzdCBsaWtlIGxuIC0tcmVsYXRpdmUgZG9lcyBidXQgd2l0aG91dCBuZWVkaW5nCisjIGNvcmV1dGlscyA4LjE2LgorCitpbXBvcnQgc3lzLCBvcworCitpZiBsZW4oc3lzLmFyZ3YpICE9IDM6CisgICBwcmludCAiJCBsbnIgVEFSR0VUIExJTktfTkFNRSIKKyAgIHN5cy5leGl0KDEpCisKK3RhcmdldCA9IHN5cy5hcmd2WzFdCitsaW5rbmFtZSA9IHN5cy5hcmd2WzJdCisKK2lmIG9zLnBhdGguaXNhYnModGFyZ2V0KToKKyAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmtuYW1lKToKKyAgICAgIGxpbmtuYW1lID0gb3MucGF0aC5hYnNwYXRoKGxpbmtuYW1lKQorICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUobGlua25hbWUpCisgICB0YXJnZXQgPSBvcy5wYXRoLnJlbHBhdGgodGFyZ2V0LCBzdGFydCkKKworb3Muc3ltbGluayh0YXJnZXQsIGxpbmtuYW1lKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL211bHRpbGliX2hlYWRlcl93cmFwcGVyLmggYi95b2N0by1wb2t5L3NjcmlwdHMvbXVsdGlsaWJfaGVhZGVyX3dyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg3NTQwCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL211bHRpbGliX2hlYWRlcl93cmFwcGVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDExIGJ5IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqIAorICovCisKKyNpbmNsdWRlIDxiaXRzL3dvcmRzaXplLmg+CisKKyNpZmRlZiBfX1dPUkRTSVpFCisKKyNpZiBfX1dPUkRTSVpFID09IDMyCisKKyNpZmRlZiBfTUlQU19TSU0KKworI2lmIF9NSVBTX1NJTSA9PSBfQUJJTzMyCisjaW5jbHVkZSA8RU5URVJfSEVBREVSX0ZJTEVOQU1FX0hFUkUtMzIuaD4KKyNlbGlmIF9NSVBTX1NJTSA9PSBfQUJJTjMyCisjaW5jbHVkZSA8RU5URVJfSEVBREVSX0ZJTEVOQU1FX0hFUkUtbjMyLmg+CisjZWxzZQorI2Vycm9yICJVbmtub3duIF9NSVBTX1NJTSIKKyNlbmRpZgorCisjZWxzZSAvKiBfTUlQU19TSU0gaXMgbm90IGRlZmluZWQgKi8KKyNpbmNsdWRlIDxFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRS0zMi5oPgorI2VuZGlmCisKKyNlbGlmIF9fV09SRFNJWkUgPT0gNjQKKyNpbmNsdWRlIDxFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRS02NC5oPgorI2Vsc2UKKyNlcnJvciAiVW5rbm93biBfX1dPUkRTSVpFIGRldGVjdGVkIgorI2VuZGlmIC8qIG1hdGNoZXMgI2lmIF9fV09SRFNJWkUgPT0gMzIgKi8KKworI2Vsc2UgLyogX19XT1JEU0laRSBpcyBub3QgZGVmaW5lZCAqLworCisjZXJyb3IgIl9fV09SRFNJWkUgaXMgbm90IGRlZmluZWQiCisKKyNlbmRpZgorICAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9uYXRpdmUtaW50ZXJjZXB0L2Nob3duIGIveW9jdG8tcG9reS9zY3JpcHRzL25hdGl2ZS1pbnRlcmNlcHQvY2hvd24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGY0MzI3MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9uYXRpdmUtaW50ZXJjZXB0L2Nob3duCkBAIC0wLDAgKzEsMiBAQAorIyEgL2Jpbi9zaAorZWNobyAiSW50ZXJjZXB0ICQwOiAkQCAtLSBkbyBub3RoaW5nIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLWJ1aWxkZW52LWludGVybmFsIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLWJ1aWxkZW52LWludGVybmFsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllZDI3MjEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwKQEAgLTAsMCArMSwxMDkgQEAKKyMhL2Jpbi9zaAorCisjIE9FLUNvcmUgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0CisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisjIEl0IGlzIGFzc3VtZWQgT0VST09UIGlzIGFscmVhZHkgZGVmaW5lZCB3aGVuIHRoaXMgaXMgY2FsbGVkCitpZiBbIC16ICIkT0VST09UIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBPRVJPT1QgaXMgbm90IGRlZmluZWQhIgorICAgIHJldHVybiAxCitmaQorCitpZiBbIC16ICIkT0VfU0tJUF9TREtfQ0hFQ0siIC1hICEgLXogIiRPRUNPUkVfU0RLX1ZFUlNJT04iIF07IHRoZW4KKyAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBPRSBTREsvQURUIHdhcyBkZXRlY3RlZCBhcyBhbHJlYWR5IGJlaW5nIHByZXNlbnQgaW4gdGhpcyBzaGVsbCBlbnZpcm9ubWVudC4gUGxlYXNlIHVzZSBhIGNsZWFuIHNoZWxsIHdoZW4gc291cmNpbmcgdGhpcyBlbnZpcm9ubWVudCBzY3JpcHQuIgorICAgIHJldHVybiAxCitmaQorCisjIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdXNpbmcgcHl0aG9uIHYzLnguIFRoaXMgY2hlY2sgY2FuJ3QgZ28gaW50bworIyBzYW5pdHkuYmJjbGFzcyBiZWNhdXNlIGJpdGJha2UncyBzb3VyY2UgY29kZSBkb2Vzbid0IGV2ZW4gcGFzcworIyBwYXJzaW5nIHN0YWdlIHdoZW4gdXNlZCB3aXRoIHB5dGhvbiB2Mywgc28gd2UgY2F0Y2ggaXQgaGVyZSBzbyB3ZQorIyBjYW4gb2ZmZXIgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UuCitweV92M19jaGVjaz1gL3Vzci9iaW4vZW52IHB5dGhvbiAtLXZlcnNpb24gMj4mMSB8IGdyZXAgIlB5dGhvbiAzImAKK2lmIFsgIiRweV92M19jaGVjayIgIT0gIiIgXTsgdGhlbgorCWVjaG8gPiYyICJCaXRiYWtlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcHl0aG9uIHYzIgorCWVjaG8gPiYyICJQbGVhc2Ugc2V0IHVwIHB5dGhvbiB2MiBhcyB5b3VyIGRlZmF1bHQgcHl0aG9uIGludGVycHJldGVyIgorCXJldHVybiAxCitmaQorCisjIFNpbWlsYXJseSwgd2Ugbm93IGhhdmUgY29kZSB0aGF0IGRvZXNuJ3QgcGFyc2UgY29ycmVjdGx5IHdpdGggb2xkZXIKKyMgdmVyc2lvbnMgb2YgUHl0aG9uLCBhbmQgcmF0aGVyIHRoYW4gZml4aW5nIHRoYXQgYW5kIGJlaW5nIGV0ZXJuYWxseQorIyB2aWdpbGFudCBmb3IgYW55IG90aGVyIG5ldyBmZWF0dXJlIHVzZSwganVzdCBjaGVjayB0aGUgdmVyc2lvbiBoZXJlLgorcHlfdjI2X2NoZWNrPWBweXRob24gLWMgJ2ltcG9ydCBzeXM7IHByaW50IHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsNywzKSdgCitpZiBbICIkcHlfdjI2X2NoZWNrIiAhPSAiVHJ1ZSIgXTsgdGhlbgorCWVjaG8gPiYyICJCaXRCYWtlIHJlcXVpcmVzIFB5dGhvbiAyLjcuMyBvciBsYXRlciIKKwlyZXR1cm4gMQorZmkKKworaWYgWyAieCRCRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgaWYgWyAieCQxIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgIEJESVI9ImJ1aWxkIgorICAgIGVsc2UKKyAgICAgICAgQkRJUj0iJDEiCisgICAgICAgIGlmIFsgIiRCRElSIiA9ICIvIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvID4mMiAiRXJyb3I6IC8gaXMgbm90IHN1cHBvcnRlZCBhcyBhIGJ1aWxkIGRpcmVjdG9yeS4iCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorCisgICAgICAgICMgUmVtb3ZlIGFueSBwb3NzaWJsZSB0cmFpbGluZyBzbGFzaGVzLiBUaGlzIGlzIHVzZWQgdG8gd29yayBhcm91bmQKKyAgICAgICAgIyBidWdneSByZWFkbGluayBpbiBVYnVudHUgMTAuMDQgdGhhdCBkb2Vzbid0IGlnbm9yZSB0cmFpbGluZyBzbGFzaGVzCisgICAgICAgICMgYW5kIGhlbmNlICJyZWFkbGluayAtZiBuZXdfZGlyX3RvX2JlX2NyZWF0ZWQvIiByZXR1cm5zIGVtcHR5LgorICAgICAgICBCRElSPWBlY2hvICRCRElSIHwgc2VkIC1yZSAnc3wvKyR8fCdgCisKKyAgICAgICAgQkRJUj1gcmVhZGxpbmsgLWYgIiRCRElSImAKKyAgICAgICAgaWYgWyAteiAiJEJESVIiIF07IHRoZW4KKyAgICAgICAgICAgIFBBUkVOVERJUj1gZGlybmFtZSAiJDEiYAorICAgICAgICAgICAgZWNobyA+JjIgIkVycm9yOiB0aGUgZGlyZWN0b3J5ICRQQVJFTlRESVIgZG9lcyBub3QgZXhpc3Q/IgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGlmIFsgIngkMiIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgQklUQkFLRURJUj0iJDIiCisgICAgZmkKK2ZpCitpZiBleHByICIkQkRJUiIgOiAnLy4qJyA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICBCVUlMRERJUj0iJEJESVIiCitlbHNlCisgICAgQlVJTERESVI9ImBwd2RgLyRCRElSIgorZmkKK3Vuc2V0IEJESVIKKworaWYgWyAieCRCSVRCQUtFRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgQklUQkFLRURJUj0iJE9FUk9PVC9iaXRiYWtlJEJCRVhUUkEvIgorZmkKKworQklUQkFLRURJUj1gcmVhZGxpbmsgLWYgIiRCSVRCQUtFRElSImAKK0JVSUxERElSPWByZWFkbGluayAtZiAiJEJVSUxERElSImAKKworaWYgISAodGVzdCAtZCAiJEJJVEJBS0VESVIiKTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogVGhlIGJpdGJha2UgZGlyZWN0b3J5ICgkQklUQkFLRURJUikgZG9lcyBub3QgZXhpc3QhICBQbGVhc2UgZW5zdXJlIGEgY29weSBvZiBiaXRiYWtlIGV4aXN0cyBhdCB0aGlzIGxvY2F0aW9uIgorICAgIHJldHVybiAxCitmaQorCisjIE1ha2Ugc3VyZSBvdXIgcGF0aHMgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgJFBBVEgKK05FV1BBVEhTPSIke09FUk9PVH0vc2NyaXB0czokQklUQkFLRURJUi9iaW46IgorUEFUSD0kTkVXUEFUSFMkKGVjaG8gJFBBVEggfCBzZWQgLWUgInN8OiRORVdQQVRIU3w6fGciIC1lICJzfF4kTkVXUEFUSFN8fCIpCit1bnNldCBCSVRCQUtFRElSIE5FV1BBVEhTCisKKyMgVXNlZCBieSB0aGUgcnVucWVtdSBzY3JpcHQKK2V4cG9ydCBCVUlMRERJUgorZXhwb3J0IFBBVEgKK2V4cG9ydCBCQl9FTlZfRVhUUkFXSElURT0iTUFDSElORSBESVNUUk8gVENNT0RFIFRDTElCQyBIVFRQX1BST1hZIGh0dHBfcHJveHkgXAorSFRUUFNfUFJPWFkgaHR0cHNfcHJveHkgRlRQX1BST1hZIGZ0cF9wcm94eSBGVFBTX1BST1hZIGZ0cHNfcHJveHkgQUxMX1BST1hZIFwKK2FsbF9wcm94eSBOT19QUk9YWSBub19wcm94eSBTU0hfQUdFTlRfUElEIFNTSF9BVVRIX1NPQ0sgQkJfU1JDUkVWX1BPTElDWSBcCitTREtNQUNISU5FIEJCX05VTUJFUl9USFJFQURTIEJCX05PX05FVFdPUksgUEFSQUxMRUxfTUFLRSBHSVRfUFJPWFlfQ09NTUFORCBcCitTT0NLUzVfUEFTU1dEIFNPQ0tTNV9VU0VSIFNDUkVFTkRJUiBTVEFNUFNfRElSIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtZmluZC1uYXRpdmUtc3lzcm9vdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MWQ2MmI4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QKQEAgLTAsMCArMSw4MSBAQAorIyEvYmluL2Jhc2gKKyMKKyMgRmluZCBhIG5hdGl2ZSBzeXNyb290IHRvIHVzZSAtIGVpdGhlciBmcm9tIGFuIGluLXRyZWUgT0UgYnVpbGQgb3IKKyMgZnJvbSBhIHRvb2xjaGFpbiBpbnN0YWxsYXRpb24uIEl0IHRoZW4gZW5zdXJlcyB0aGUgdmFyaWFibGUKKyMgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBpcyBzZXQgdG8gdGhlIHN5c3Jvb3QncyBiYXNlIGRpcmVjdG9yeSwgYW5kIHNldHMgCisjICRQU0VVRE8gdG8gdGhlIHBhdGggb2YgdGhlIHBzZXVkbyBiaW5hcnkuCisjCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHJ1biB3aXRoaW4gb3RoZXIgc2NyaXB0cyBieSBzb3VyY2UnaW5nCisjIGl0LCBlLmc6CisjCisjIFNZU1JPT1RfU0VUVVBfU0NSSVBUPWB3aGljaCBvZS1maW5kLW5hdGl2ZS1zeXNyb290YAorIyAuICRTWVNST09UX1NFVFVQX1NDUklQVAorIworIyBUaGlzIHNjcmlwdCB3aWxsIHRlcm1pbmF0ZSBleGVjdXRpb24gb2YgeW91ciBjYWxsaW5nIHByb2dyYW0gdW5sZXNzCisjIHlvdSBzZXQgYSB2YXJpYWJsZSAkU0tJUF9TVFJJQ1RfU1lTUk9PVF9DSEVDSyB0byBhIG5vbi1lbXB0eSBzdHJpbmcKKyMgYmVmb3JlaGFuZC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2lmIFsgIngkT0VDT1JFX05BVElWRV9TWVNST09UIiA9ICJ4IiBdOyB0aGVuCisgICAgQklUQkFLRT1gd2hpY2ggYml0YmFrZSAyPiAvZGV2L251bGxgCisgICAgaWYgWyAieCRCSVRCQUtFIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBpZiBbICIkVUlEIiA9ICIwIiBdOyB0aGVuCisgICAgICAgICAgICAjIFJvb3QgY2Fubm90IHJ1biBiaXRiYWtlIHVubGVzcyBzYW5pdHkgY2hlY2tpbmcgaXMgZGlzYWJsZWQKKyAgICAgICAgICAgIGlmIFsgISAtZCAiLi9jb25mIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IHJvb3QgY2Fubm90IHJ1biBiaXRiYWtlIGJ5IGRlZmF1bHQsIGFuZCBJIGNhbm5vdCBmaW5kIGEgLi9jb25mIGRpcmVjdG9yeSB0byBiZSBhYmxlIHRvIGRpc2FibGUgc2FuaXR5IGNoZWNraW5nIgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHRvdWNoIGNvbmYvc2FuaXR5LmNvbmYKKyAgICAgICAgICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD1gYml0YmFrZSAtZSB8IGdyZXAgXlNUQUdJTkdfRElSX05BVElWRSB8IGN1dCAtZCAnIicgLWYyYAorICAgICAgICAgICAgcm0gLWYgY29uZi9zYW5pdHkuY29uZgorICAgICAgICBlbHNlCisgICAgICAgICAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9YGJpdGJha2UgLWUgfCBncmVwIF5TVEFHSU5HX0RJUl9OQVRJVkUgfCBjdXQgLWQgJyInIC1mMmAKKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gbG9jYXRlIGJpdGJha2UgY29tbWFuZC4iCisgICAgICAgIGVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0PyIKKworICAgICAgICBpZiBbIC16ICIkU0tJUF9TVFJJQ1RfU1lTUk9PVF9DSEVDSyIgXTsgdGhlbgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZmkKK2ZpCisKK2lmIFsgIngkT0VDT1JFX05BVElWRV9TWVNST09UIiA9ICJ4IiBdOyB0aGVuCisgICAgIyBUaGlzIGluZGljYXRlcyB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIGJpdGJha2UgLWUgdGhhdAorICAgICMgdGhlIHVzZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2YKKyAgICBlY2hvICJUaGVyZSB3YXMgYW4gZXJyb3IgcnVubmluZyBiaXRiYWtlIHRvIGRldGVybWluZSBTVEFHSU5HX0RJUl9OQVRJVkUiCisgICAgZWNobyAiSGVyZSBpcyB0aGUgb3V0cHV0IGZyb20gYml0YmFrZSAtZSIKKyAgICBiaXRiYWtlIC1lCisgICAgZXhpdCAxCitmaQorCisjIFNldCB1cCBwc2V1ZG8gY29tbWFuZAoraWYgWyAhIC1lICIkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW4vcHNldWRvIiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHBzZXVkbyBiaW5hcnkgaW4gJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluLyIKKworICAgIGlmIFsgIngkT0VDT1JFX0RJU1RST19WRVJTSU9OIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkhhdmUgeW91IHJ1biAnYml0YmFrZSBtZXRhLWlkZS1zdXBwb3J0Jz8iCisgICAgZWxzZQorICAgICAgICBlY2hvICJUaGlzIHNob3VsZG4ndCBoYXBwZW4gLSBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCB5b3VyIHRvb2xjaGFpbiBpbnN0YWxsYXRpb24iCisgICAgZmkKKworICAgIGlmIFsgLXogIiRTS0lQX1NUUklDVF9TWVNST09UX0NIRUNLIiBdOyB0aGVuCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorUFNFVURPPSIkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW4vcHNldWRvIgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLWdpdC1wcm94eSBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1naXQtcHJveHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDg3MzQ1NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1naXQtcHJveHkKQEAgLTAsMCArMSwxMzMgQEAKKyMhL2Jpbi9iYXNoCisKKyMgb2UtZ2l0LXByb3h5IGlzIGEgc2ltcGxlIHRvb2wgdG8gYmUgdmlhIEdJVF9QUk9YWV9DT01NQU5ELiBJdCB1c2VzIHNvY2F0CisjIHRvIG1ha2UgU09DS1M1IG9yIEhUVFBTIHByb3h5IGNvbm5lY3Rpb25zLiBJdCB1c2VzIEFMTF9QUk9YWSB0byBkZXRlcm1pbmUgdGhlCisjIHByb3h5IHNlcnZlciwgcHJvdG9jb2wsIGFuZCBwb3J0LiBJdCB1c2VzIE5PX1BST1hZIHRvIHNraXAgdXNpbmcgdGhlIHByb3h5IGZvcgorIyBhIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIGhvc3RzLCBob3N0IGdsb2JzICgqLmV4YW1wbGUuY29tKSwgSVBzLCBvciBDSURSCisjIG1hc2tzICgxOTIuMTY4LjEuMC8yNCkuIEl0IGlzIGtub3duIHRvIHdvcmsgd2l0aCBib3RoIGJhc2ggYW5kIGRhc2ggc2hlbGxzLgorIworIyBFeGFtcGxlIEFMTF9QUk9YWSB2YWx1ZXM6CisjIEFMTF9QUk9YWT1zb2NrczovL3NvY2tzLmV4YW1wbGUuY29tOjEwODAKKyMgQUxMX1BST1hZPWh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb206ODA4MAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBBVVRIT1JTCisjIERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorCisjIExvY2F0ZSB0aGUgbmV0Y2F0IGJpbmFyeQorU09DQVQ9JCh3aGljaCBzb2NhdCAyPi9kZXYvbnVsbCkKK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBzb2NhdCBiaW5hcnkgbm90IGluIFBBVEgiIDE+JjIKKwlleGl0IDEKK2ZpCitNRVRIT0Q9IiIKKworIyBUZXN0IGZvciBhIHZhbGlkIElQVjQgcXVhZCB3aXRoIG9wdGlvbmFsIGJpdG1hc2sKK3ZhbGlkX2lwdjQoKSB7CisJZWNobyAkMSB8IGVncmVwIC1xICJeKFsxLTldfFsxLTldWzAtOV18MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC01XSkoXC4oWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKSl7M30oLygzWzAtMl18WzEtMl0/WzAtOV0pKT8kIgorCXJldHVybiAkPworfQorCisjIENvbnZlcnQgYW4gSVBWNCBhZGRyZXNzIGludG8gYSAzMmJpdCBpbnRlZ2VyCitpcHY0X3ZhbCgpIHsKKwlJUD0iJDEiCisJU0hJRlQ9MjQKKwlWQUw9MAorCWZvciBCIGluICR7SVAvLy4vIH07IGRvCisJCVZBTD0kKCgkVkFMKyQoKCRCPDwkU0hJRlQpKSkpCisJCVNISUZUPSQoKCRTSElGVC04KSkKKwlkb25lCisJZWNobyAiJFZBTCIKK30KKworIyBEZXRlcm1pbmUgaWYgdHdvIElQcyBhcmUgZXF1aXZhbGVudCwgb3IgaWYgdGhlIENJRFIgY29udGFpbnMgdGhlIElQCittYXRjaF9pcHY0KCkgeworCUNJRFI9JDEKKwlJUD0kMgorCisJaWYgWyAteiAiJHtJUCUlJENJRFJ9IiBdOyB0aGVuCisJCXJldHVybiAwCisJZmkKKworCSMgRGV0ZXJtaW5lIHRoZSBtYXNrIGJpdGxlbmd0aAorCUJJVFM9JHtDSURSIyMqL30KKwlpZiBbIC16ICIkQklUUyIgXTsgdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwlJUFZBTD0kKGlwdjRfdmFsICRJUCkKKwlJUDJWQUw9JChpcHY0X3ZhbCAke0NJRFIlJS8qfSkKKworCSMgT1IgaW4gdGhlIHVubWFza2VkIGJpdHMKKwlmb3IgaSBpbiAkKHNlcSAwICQoKDMyLSRCSVRTKSkpOyBkbworCQlJUDJWQUw9JCgoJElQMlZBTHwkKCgxPDwkaSkpKSkKKwkJSVBWQUw9JCgoJElQVkFMfCQoKDE8PCRpKSkpKQorCWRvbmUKKworCWlmIFsgJElQVkFMIC1lcSAkSVAyVkFMIF07IHRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCXJldHVybiAxCit9CisKKyMgVGVzdCB0byBzZWUgaWYgR0xPQiBtYXRjaGVzIEhPU1QKK21hdGNoX2hvc3QoKSB7CisJSE9TVD0kMQorCUdMT0I9JDIKKworCWlmIFsgLXogIiR7SE9TVCUlJEdMT0J9IiBdOyB0aGVuCisJCXJldHVybiAwCisJZmkKKworCSMgTWF0Y2ggYnkgbmV0bWFzaworCWlmIHZhbGlkX2lwdjQgJEdMT0I7IHRoZW4KKwkJSE9TVF9JUD0kKGdldGhvc3RpcCAtZCAkSE9TVCkKKwkJaWYgdmFsaWRfaXB2NCAkSE9TVF9JUDsgdGhlbgorCQkJbWF0Y2hfaXB2NCAkR0xPQiAkSE9TVF9JUAorCQkJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCQkJcmV0dXJuIDAKKwkJCWZpCisJCWZpCisJZmkKKworCXJldHVybiAxCit9CisKKyMgSWYgbm8gcHJveHkgaXMgc2V0IG9yIG5lZWRlZCwganVzdCBjb25uZWN0IGRpcmVjdGx5CitNRVRIT0Q9IlRDUDokMTokMiIKKworaWYgWyAteiAiJEFMTF9QUk9YWSIgXTsgdGhlbgorCWV4ZWMgJFNPQ0FUIFNURElPICRNRVRIT0QKK2ZpCisKKyMgQ29ubmVjdCBkaXJlY3RseSB0byBob3N0cyBpbiBOT19QUk9YWQorZm9yIEggaW4gJHtOT19QUk9YWS8vLC8gfTsgZG8KKwlpZiBtYXRjaF9ob3N0ICQxICRIOyB0aGVuCisJCWV4ZWMgJFNPQ0FUIFNURElPICRNRVRIT0QKKwlmaQorZG9uZQorCisjIFByb3h5IGlzIG5lY2Vzc2FyeSwgZGV0ZXJtaW5lIHByb3RvY29sLCBzZXJ2ZXIsIGFuZCBwb3J0CitQUk9UTz0kKGVjaG8gJEFMTF9QUk9YWSB8IHNlZCAtZSAncy9cKFteOl0qXCk6XC9cLy4qL1wxLycpCitQUk9YWT0kKGVjaG8gJEFMTF9QUk9YWSB8IHNlZCAtZSAncy8uKjpcL1wvXChbXjpdKlwpLiovXDEvJykKK1BPUlQ9JChlY2hvICRBTExfUFJPWFkgfCBzZWQgLWUgJ3MvLio6XChbMC05XSpcKVwvPyQvXDEvJykKK2lmIFsgIiRQT1JUIiA9ICIkQUxMX1BST1hZIiBdOyB0aGVuCisJUE9SVD0iIgorZmkKKworaWYgWyAiJFBST1RPIiA9ICJzb2NrcyIgXTsgdGhlbgorCWlmIFsgLXogIiRQT1JUIiBdOyB0aGVuCisJCVBPUlQ9IjEwODAiCisJZmkKKwlNRVRIT0Q9IlNPQ0tTNEE6JFBST1hZOiQxOiQyLHNvY2tzcG9ydD0kUE9SVCIKK2Vsc2UKKwkjIEFzc3VtZSBQUk9YWSAoaHR0cCwgaHR0cHMsIGV0YykKKwlpZiBbIC16ICIkUE9SVCIgXTsgdGhlbgorCQlQT1JUPSI4MDgwIgorCWZpCisJTUVUSE9EPSJQUk9YWTokUFJPWFk6JDE6JDIscHJveHlwb3J0PSRQT1JUIgorZmkKKworZXhlYyAkU09DQVQgU1RESU8gJE1FVEhPRApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbCBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjA3NTc3NQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwKQEAgLTAsMCArMSw1MDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIE9wZW5FbWJlZGRlZCBwa2dkYXRhIHV0aWxpdHkKKyMKKyMgV3JpdHRlbiBieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAyMDEyLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgcmUKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0LCBPcmRlcmVkRGljdAorCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KK2ltcG9ydCBzY3JpcHR1dGlscworbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgncGtnZGF0YXV0aWwnKQorCitkZWYgdGluZm9pbF9pbml0KCk6CisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShUcnVlKQorCisgICAgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOSU5HKQorICAgIHJldHVybiB0aW5mb2lsCisKKworZGVmIGdsb2IoYXJncyk6CisgICAgIyBIYW5kbGUgYm90aCBtdWx0aXBsZSBhcmd1bWVudHMgYW5kIG11bHRpcGxlIHZhbHVlcyB3aXRoaW4gYW4gYXJnIChvbGQgc3ludGF4KQorICAgIGdsb2JzID0gW10KKyAgICBmb3IgZ2xvYml0ZW0gaW4gYXJncy5nbG9iOgorICAgICAgICBnbG9icy5leHRlbmQoZ2xvYml0ZW0uc3BsaXQoKSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLnBrZ2xpc3RmaWxlKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBwYWNrYWdlIGxpc3QgZmlsZSAlcycgJSBhcmdzLnBrZ2xpc3RmaWxlKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgc2tpcHZhbCA9ICItbG9jYWxlLXxebG9jYWxlLWJhc2UtfC1kZXYkfC1kb2MkfC1kYmckfC1zdGF0aWNkZXYkfF5rZXJuZWwtbW9kdWxlLSIKKyAgICBpZiBhcmdzLmV4Y2x1ZGU6CisgICAgICAgIHNraXB2YWwgKz0gInwiICsgYXJncy5leGNsdWRlCisgICAgc2tpcHJlZ2V4ID0gcmUuY29tcGlsZShza2lwdmFsKQorCisgICAgbWFwcGVkcGtncyA9IHNldCgpCisgICAgd2l0aCBvcGVuKGFyZ3MucGtnbGlzdGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IGZpZWxkczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGtnID0gZmllbGRzWzBdCisgICAgICAgICAgICAjIFdlIGRvbid0IGNhcmUgYWJvdXQgb3RoZXIgYXJncyAodXNlZCB0byBuZWVkIHRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSBidXQgdGhlCisgICAgICAgICAgICAjIG5ldyBwa2dkYXRhIHN0cnVjdHVyZSBhdm9pZHMgdGhlIG5lZWQgZm9yIHRoYXQpCisKKyAgICAgICAgICAgICMgU2tpcCBwYWNrYWdlcyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gcG9pbnQgYXBwbHlpbmcgZ2xvYnMKKyAgICAgICAgICAgIGlmIHNraXByZWdleC5zZWFyY2gocGtnKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzIC0+ICEhIiAlIHBrZykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIFNraXAgcGFja2FnZXMgdGhhdCBhbHJlYWR5IG1hdGNoIHRoZSBnbG9icywgc28gaWYgZS5nLiBhIGRldiBwYWNrYWdlCisgICAgICAgICAgICAjIGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZCB0aHVzIGluIHRoZSBsaXN0LCB3ZSBkb24ndCBwcm9jZXNzIGl0IGFueSBmdXJ0aGVyCisgICAgICAgICAgICAjIE1vc3Qgb2YgdGhlc2Ugd2lsbCBiZSBjYXVnaHQgYnkgc2tpcHJlZ2V4IGFscmVhZHksIGJ1dCBqdXN0IGluIGNhc2UuLi4KKyAgICAgICAgICAgIGFscmVhZHkgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGcgaW4gZ2xvYnM6CisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShwa2csIGcpOgorICAgICAgICAgICAgICAgICAgICBhbHJlYWR5ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYWxyZWFkeToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzIC0+ICEiICUgcGtnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRGVmaW5lIHNvbWUgZnVuY3Rpb25zCisgICAgICAgICAgICBkZWYgcmV2cGtnZGF0YShwa2duKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICJydW50aW1lLXJldmVyc2UiLCBwa2duKQorICAgICAgICAgICAgZGVmIGZ3ZHBrZ2RhdGEocGtnbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZSIsIHBrZ24pCisgICAgICAgICAgICBkZWYgcmVhZHBuKHBrZ2RhdGFfZmlsZSk6CisgICAgICAgICAgICAgICAgcG4gPSAiIgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUE46Iik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG4gPSBsaW5lLnNwbGl0KCc6ICcpWzFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBuCisgICAgICAgICAgICBkZWYgcmVhZHJlbmFtZWQocGtnZGF0YV9maWxlKToKKyAgICAgICAgICAgICAgICByZW5hbWVkID0gIiIKKyAgICAgICAgICAgICAgICBwbiA9IG9zLnBhdGguYmFzZW5hbWUocGtnZGF0YV9maWxlKQorICAgICAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUEtHXyVzOiIgJSBwbik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCA9IGxpbmUuc3BsaXQoJzogJylbMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuYW1lZAorCisgICAgICAgICAgICAjIE1haW4gcHJvY2Vzc2luZyBsb29wCisgICAgICAgICAgICBmb3IgZyBpbiBnbG9iczoKKyAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSAiIgorICAgICAgICAgICAgICAgICMgRmlyc3QganVzdCB0cnkgc3Vic3RpdHV0aW9uIChpLmUuIHBhY2thZ2VuYW1lIC0+IHBhY2thZ2VuYW1lLWRldikKKyAgICAgICAgICAgICAgICBuZXdwa2cgPSBnLnJlcGxhY2UoIioiLCBwa2cpCisgICAgICAgICAgICAgICAgcmV2bGluayA9IHJldnBrZ2RhdGEobmV3cGtnKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHJldmxpbmspKQorICAgICAgICAgICAgICAgICAgICBmd2RmaWxlID0gZndkcGtnZGF0YShtYXBwZWRwa2cpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ3ZGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gcmVhZHJlbmFtZWQoZndkZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ3ZGZpbGUgKyAiLnBhY2thZ2VkIik6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSAiIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldmxpbmsgPSByZXZwa2dkYXRhKHBrZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmV2bGluayk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHdlIGNhbiBtYXAgYWZ0ZXIgdW5kb2luZyB0aGUgcGFja2FnZSByZW5hbWluZyAoYnkgcmVzb2x2aW5nIHRoZSBzeW1saW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ3BrZyA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocmV2bGluaykpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBnLnJlcGxhY2UoIioiLCBvcmlncGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgZndkZmlsZSA9IGZ3ZHBrZ2RhdGEobmV3cGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZndkZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gcmVhZHJlbmFtZWQoZndkZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGF0IGRpZG4ndCB3b3JrLCBzbyBub3cgZ2V0IHRoZSBQTiwgc3Vic3RpdHV0ZSB0aGF0LCB0aGVuIG1hcCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG4gPSByZWFkcG4ocmV2bGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBnLnJlcGxhY2UoIioiLCBwbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd2RmaWxlID0gZndkcGtnZGF0YShuZXdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZndkZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9IHJlYWRyZW5hbWVkKGZ3ZGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZndkZmlsZSArICIucGFja2FnZWQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSAiIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQYWNrYWdlIGRvZXNuJ3QgZXZlbiBleGlzdC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyBpcyBub3QgYSB2YWxpZCBwYWNrYWdlISIgJSAocGtnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBpZiBtYXBwZWRwa2c6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXMgKCVzKSAtPiAlcyIgJSAocGtnLCBnLCBtYXBwZWRwa2cpKQorICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2dzLmFkZChtYXBwZWRwa2cpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyAoJXMpIC0+ID8iICUgKHBrZywgZykpCisKKyAgICBsb2dnZXIuZGVidWcoIi0tLS0tLSIpCisKKyAgICBwcmludCgiXG4iLmpvaW4obWFwcGVkcGtncykpCisKK2RlZiByZWFkX3ZhbHVlKGFyZ3MpOgorICAgICMgSGFuZGxlIGJvdGggbXVsdGlwbGUgYXJndW1lbnRzIGFuZCBtdWx0aXBsZSB2YWx1ZXMgd2l0aGluIGFuIGFyZyAob2xkIHN5bnRheCkKKyAgICBwYWNrYWdlcyA9IFtdCisgICAgZm9yIHBrZ2l0ZW0gaW4gYXJncy5wa2c6CisgICAgICAgIHBhY2thZ2VzLmV4dGVuZChwa2dpdGVtLnNwbGl0KCkpCisKKyAgICBkZWYgcmVhZHZhcihwa2dkYXRhX2ZpbGUsIHZhbHVlbmFtZSk6CisgICAgICAgIHZhbCA9ICIiCisgICAgICAgIHdpdGggb3Blbihwa2dkYXRhX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHZhbHVlbmFtZSArICI6Iik6CisgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpbmUuc3BsaXQoJzogJywgMSlbMV0ucnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgbG9nZ2VyLmRlYnVnKCJyZWFkLXZhbHVlKCclcycsICclcycgJyVzJyIgJSAoYXJncy5wa2dkYXRhX2RpciwgYXJncy52YWx1ZW5hbWUsIHBhY2thZ2VzKSkKKyAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnX3NwbGl0ID0gcGFja2FnZS5zcGxpdCgnXycpCisgICAgICAgIHBrZ19uYW1lID0gcGtnX3NwbGl0WzBdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygicGFja2FnZTogJyVzJyIgJSBwa2dfbmFtZSkKKyAgICAgICAgcmV2bGluayA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZS1yZXZlcnNlIiwgcGtnX25hbWUpCisgICAgICAgIGxvZ2dlci5kZWJ1ZyhyZXZsaW5rKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXZsaW5rKToKKyAgICAgICAgICAgIG1hcHBlZHBrZyA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocmV2bGluaykpCisgICAgICAgICAgICBxdmFyID0gYXJncy52YWx1ZW5hbWUKKyAgICAgICAgICAgIGlmIHF2YXIgPT0gIlBLR1NJWkUiOgorICAgICAgICAgICAgICAgICMgYXBwZW5kIHBhY2thZ2VuYW1lCisgICAgICAgICAgICAgICAgcXZhciA9ICIlc18lcyIgJSAoYXJncy52YWx1ZW5hbWUsIG1hcHBlZHBrZykKKyAgICAgICAgICAgICAgICAjIFBLR1NJWkUgaXMgbm93IGluIGJ5dGVzLCBidXQgd2Ugd2Ugd2FudCBpdCBpbiBLQgorICAgICAgICAgICAgICAgIHBrZ3NpemUgPSAoaW50KHJlYWR2YXIocmV2bGluaywgcXZhcikpICsgMTAyNCAvLyAyKSAvLyAxMDI0CisgICAgICAgICAgICAgICAgcHJpbnQoIiVkIiAlIHBrZ3NpemUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KHJlYWR2YXIocmV2bGluaywgcXZhcikpCisKK2RlZiBsb29rdXBfcGtnbGlzdChwa2dzLCBwa2dkYXRhX2RpciwgcmV2ZXJzZSk6CisgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgbWFwcGluZ3MgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIHJldmxpbmsgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICJydW50aW1lLXJldmVyc2UiLCBwa2cpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcocmV2bGluaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgICAgIG1hcHBpbmdzW3BrZ10gPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHJldmxpbmspKQorICAgIGVsc2U6CisgICAgICAgIG1hcHBpbmdzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgcGtnZmlsZSA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwa2cpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dmaWxlKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRzWzBdID09ICdQS0dfJXMnICUgcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzW3BrZ10uYXBwZW5kKGZpZWxkc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBtYXBwaW5ncworCitkZWYgbG9va3VwX3BrZyhhcmdzKToKKyAgICAjIEhhbmRsZSBib3RoIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQgbXVsdGlwbGUgdmFsdWVzIHdpdGhpbiBhbiBhcmcgKG9sZCBzeW50YXgpCisgICAgcGtncyA9IFtdCisgICAgZm9yIHBrZ2l0ZW0gaW4gYXJncy5wa2c6CisgICAgICAgIHBrZ3MuZXh0ZW5kKHBrZ2l0ZW0uc3BsaXQoKSkKKworICAgIG1hcHBpbmdzID0gbG9va3VwX3BrZ2xpc3QocGtncywgYXJncy5wa2dkYXRhX2RpciwgYXJncy5yZXZlcnNlKQorCisgICAgaWYgbGVuKG1hcHBpbmdzKSA8IGxlbihwa2dzKToKKyAgICAgICAgbWlzc2luZyA9IGxpc3Qoc2V0KHBrZ3MpIC0gc2V0KG1hcHBpbmdzLmtleXMoKSkpCisgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6ICVzIiAlICcsICcuam9pbihtaXNzaW5nKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIGFyZ3MucmV2ZXJzZToKKyAgICAgICAgaXRlbXMgPSBtYXBwaW5ncy52YWx1ZXMoKQorICAgIGVsc2U6CisgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgaXRlbXMuZXh0ZW5kKG1hcHBpbmdzLmdldChwa2csIFtdKSkKKworICAgIHByaW50KCdcbicuam9pbihpdGVtcykpCisKK2RlZiBsb29rdXBfcmVjaXBlKGFyZ3MpOgorICAgICMgSGFuZGxlIGJvdGggbXVsdGlwbGUgYXJndW1lbnRzIGFuZCBtdWx0aXBsZSB2YWx1ZXMgd2l0aGluIGFuIGFyZyAob2xkIHN5bnRheCkKKyAgICBwa2dzID0gW10KKyAgICBmb3IgcGtnaXRlbSBpbiBhcmdzLnBrZzoKKyAgICAgICAgcGtncy5leHRlbmQocGtnaXRlbS5zcGxpdCgpKQorCisgICAgbWFwcGluZ3MgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgcGtnZmlsZSA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAncnVudGltZS1yZXZlcnNlJywgcGtnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dmaWxlKToKKyAgICAgICAgICAgIHdpdGggb3Blbihwa2dmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZHNbMF0gPT0gJ1BOJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzW3BrZ10uYXBwZW5kKGZpZWxkc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgaWYgbGVuKG1hcHBpbmdzKSA8IGxlbihwa2dzKToKKyAgICAgICAgbWlzc2luZyA9IGxpc3Qoc2V0KHBrZ3MpIC0gc2V0KG1hcHBpbmdzLmtleXMoKSkpCisgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6ICVzIiAlICcsICcuam9pbihtaXNzaW5nKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGl0ZW1zID0gW10KKyAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgIGl0ZW1zLmV4dGVuZChtYXBwaW5ncy5nZXQocGtnLCBbXSkpCisgICAgcHJpbnQoJ1xuJy5qb2luKGl0ZW1zKSkKKworZGVmIGdldF9yZWNpcGVfcGtncyhwa2dkYXRhX2RpciwgcmVjaXBlLCB1bnBhY2thZ2VkKToKKyAgICByZWNpcGVkYXRhZmlsZSA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgcmVjaXBlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZWNpcGVkYXRhZmlsZSk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgcGFja2FnZWQgcmVjaXBlIHdpdGggbmFtZSAlcyIgJSByZWNpcGUpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgcGFja2FnZXMgPSBbXQorICAgIHdpdGggb3BlbihyZWNpcGVkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgaWYgZmllbGRzWzBdID09ICdQQUNLQUdFUyc6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBmaWVsZHNbMV0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBub3QgdW5wYWNrYWdlZDoKKyAgICAgICAgcGtnbGlzdCA9IFtdCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgJyVzLnBhY2thZ2VkJyAlIHBrZykpOgorICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKHBrZykKKyAgICAgICAgcmV0dXJuIHBrZ2xpc3QKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcGFja2FnZXMKKworZGVmIGxpc3RfcGtncyhhcmdzKToKKyAgICBmb3VuZCA9IEZhbHNlCisKKyAgICBkZWYgbWF0Y2hwa2cocGtnKToKKyAgICAgICAgaWYgYXJncy5wa2dzcGVjOgorICAgICAgICAgICAgbWF0Y2hlZCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgcGtnc3BlYyBpbiBhcmdzLnBrZ3NwZWM6CisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShwa2csIHBrZ3NwZWMpOgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IG1hdGNoZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBhcmdzLnVucGFja2FnZWQ6CisgICAgICAgICAgICBpZiBhcmdzLnJ1bnRpbWU6CisgICAgICAgICAgICAgICAgcmV2bGluayA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZS1yZXZlcnNlIiwgcGtnKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIHVubGlrZWx5IHRvIGdldCBoZXJlIGlmIHRoZSBwYWNrYWdlIHdhcyBub3QgcGFja2FnZWQsIGJ1dCBqdXN0IGluIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBhZGQgdGhlIHN5bWxpbmtzIGZvciB1bnBhY2thZ2VkIGZpbGVzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhyZXZsaW5rKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAncnVudGltZScsICclcy5wYWNrYWdlZCcgJSBtYXBwZWRwa2cpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICdydW50aW1lJywgJyVzLnBhY2thZ2VkJyAlIHBrZykpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIGFyZ3MucmVjaXBlOgorICAgICAgICBwYWNrYWdlcyA9IGdldF9yZWNpcGVfcGtncyhhcmdzLnBrZ2RhdGFfZGlyLCBhcmdzLnJlY2lwZSwgYXJncy51bnBhY2thZ2VkKQorCisgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSBbXQorICAgICAgICAgICAgcnVudGltZV9wa2dzID0gbG9va3VwX3BrZ2xpc3QocGFja2FnZXMsIGFyZ3MucGtnZGF0YV9kaXIsIEZhbHNlKQorICAgICAgICAgICAgZm9yIHJ0cGtncyBpbiBydW50aW1lX3BrZ3MudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcGtnbGlzdC5leHRlbmQocnRwa2dzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnbGlzdCA9IHBhY2thZ2VzCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dsaXN0OgorICAgICAgICAgICAgaWYgbWF0Y2hwa2cocGtnKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBwcmludCgiJXMiICUgcGtnKQorICAgIGVsc2U6CisgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgIHNlYXJjaGRpciA9ICdydW50aW1lLXJldmVyc2UnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWFyY2hkaXIgPSAncnVudGltZScKKworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2Rpciwgc2VhcmNoZGlyKSk6CisgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy5wYWNrYWdlZCcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG1hdGNocGtnKGZuKToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyIgJSBmbikKKyAgICBpZiBub3QgZm91bmQ6CisgICAgICAgIGlmIGFyZ3MucGtnc3BlYzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IHBhY2thZ2UgbWF0Y2hpbmcgJXMiICUgYXJncy5wa2dzcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBwYWNrYWdlcyBmb3VuZCIpCisgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBsaXN0X3BrZ19maWxlcyhhcmdzKToKKyAgICBpbXBvcnQganNvbgorCisgICAgaWYgYXJncy5yZWNpcGU6CisgICAgICAgIGlmIGFyZ3MucGtnOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJsaXN0LXBrZy1maWxlczogSWYgLXAvLS1yZWNpcGUgaXMgc3BlY2lmaWVkIHRoZW4gYSBwYWNrYWdlIG5hbWUgY2Fubm90IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICByZWNpcGVwa2dsaXN0ID0gZ2V0X3JlY2lwZV9wa2dzKGFyZ3MucGtnZGF0YV9kaXIsIGFyZ3MucmVjaXBlLCBhcmdzLnVucGFja2FnZWQpCisgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSBbXQorICAgICAgICAgICAgcnVudGltZV9wa2dzID0gbG9va3VwX3BrZ2xpc3QocmVjaXBlcGtnbGlzdCwgYXJncy5wa2dkYXRhX2RpciwgRmFsc2UpCisgICAgICAgICAgICBmb3IgcnRwa2dzIGluIHJ1bnRpbWVfcGtncy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwa2dsaXN0LmV4dGVuZChydHBrZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dsaXN0ID0gcmVjaXBlcGtnbGlzdAorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBhcmdzLnBrZzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigibGlzdC1wa2ctZmlsZXM6IElmIC1wLy0tcmVjaXBlIGlzIG5vdCBzcGVjaWZpZWQgdGhlbiBhdCBsZWFzdCBvbmUgcGFja2FnZSBuYW1lIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHBrZ2xpc3QgPSBhcmdzLnBrZworCisgICAgZm9yIHBrZyBpbiBwa2dsaXN0OgorICAgICAgICBwcmludCgiJXM6IiAlIHBrZykKKyAgICAgICAgaWYgYXJncy5ydW50aW1lOgorICAgICAgICAgICAgcGtnZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUtcmV2ZXJzZSIsIHBrZykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CisgICAgICAgICAgICAgICAgaWYgYXJncy5yZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBwYWNrYWdlIHdhcyBlbXB0eSBhbmQgdGh1cyBuZXZlciBwYWNrYWdlZCwgaWdub3JlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgYnVpbHQgcnVudGltZSBwYWNrYWdlIG5hbWVkICVzIiAlIHBrZykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUiLCBwa2cpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnZGF0YWZpbGUpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IGJ1aWx0IHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVkICVzIiAlIHBrZykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHdpdGggb3Blbihwa2dkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0ZJTEVTX0lORk86Jyk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBkaWN0dmFsID0ganNvbi5sb2Fkcyh2YWwpCisgICAgICAgICAgICAgICAgICAgIGZvciBmdWxscHRoIGluIHNvcnRlZChkaWN0dmFsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcdCVzIiAlIGZ1bGxwdGgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBGSUxFU19JTkZPIGVudHJ5IGluICVzIiAlIHBrZ2RhdGFmaWxlKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBmaW5kX3BhdGgoYXJncyk6CisgICAgaW1wb3J0IGpzb24KKworICAgIGZvdW5kID0gRmFsc2UKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgJ3J1bnRpbWUnKSk6CisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocm9vdCxmbikpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGSUxFU19JTkZPOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3R2YWwgPSBqc29uLmxvYWRzKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmdWxscHRoIGluIGRpY3R2YWwua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZnVsbHB0aCwgYXJncy50YXJnZXRwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIlczogJXMiICUgKGZuLCBmdWxscHRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgaWYgbm90IGZvdW5kOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSBwYWNrYWdlIHByb2R1Y2luZyBwYXRoICVzIiAlIGFyZ3MudGFyZ2V0cGF0aCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJPcGVuRW1iZWRkZWQgcGtnZGF0YSB0b29sIC0gcXVlcmllcyB0aGUgcGtnZGF0YSBmaWxlcyB3cml0dGVuIG91dCBkdXJpbmcgZG9fcGFja2FnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBrZ2RhdGEtZGlyJywgaGVscD0nUGF0aCB0byBwa2dkYXRhIGRpcmVjdG9yeSAoZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGlmIG5vdCBzcGVjaWZpZWQpJykKKyAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisKKyAgICBwYXJzZXJfbG9va3VwX3BrZyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbG9va3VwLXBrZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcmFuc2xhdGUgYmV0d2VlbiByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lcyBhbmQgcnVudGltZSBwYWNrYWdlIG5hbWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMb29rcyB1cCB0aGUgc3BlY2lmaWVkIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWUocykgdG8gc2VlIHdoYXQgdGhlIGZpbmFsIHJ1bnRpbWUgcGFja2FnZSBuYW1lIGlzIChlLmcuIGdsaWJjIGJlY29tZXMgbGliYzYpLCBvciB3aXRoIC1yLy0tcmV2ZXJzZSBsb29rcyB1cCB0aGUgb3RoZXIgd2F5LicpCisgICAgcGFyc2VyX2xvb2t1cF9wa2cuYWRkX2FyZ3VtZW50KCdwa2cnLCBuYXJncz0nKycsIGhlbHA9J1BhY2thZ2UgbmFtZSB0byBsb29rIHVwJykKKyAgICBwYXJzZXJfbG9va3VwX3BrZy5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmV2ZXJzZScsIGhlbHA9J1N3aXRjaCB0byBsb29raW5nIHVwIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVzIGZyb20gcnVudGltZSBwYWNrYWdlIG5hbWVzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbG9va3VwX3BrZy5zZXRfZGVmYXVsdHMoZnVuYz1sb29rdXBfcGtnKQorCisgICAgcGFyc2VyX2xpc3RfcGtncyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbGlzdC1wa2dzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xpc3QgcGFja2FnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0xpc3RzIHBhY2thZ2VzIHRoYXQgaGF2ZSBiZWVuIGJ1aWx0JykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLmFkZF9hcmd1bWVudCgncGtnc3BlYycsIG5hcmdzPScqJywgaGVscD0nUGFja2FnZSBuYW1lIHRvIHNlYXJjaCBmb3IgKHdpbGRjYXJkcyAqID8gYWxsb3dlZCwgdXNlIHF1b3RlcyB0byBhdm9pZCBzaGVsbCBleHBhbnNpb24pJykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLmFkZF9hcmd1bWVudCgnLXInLCAnLS1ydW50aW1lJywgaGVscD0nU2hvdyBydW50aW1lIHBhY2thZ2UgbmFtZXMgaW5zdGVhZCBvZiByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2xpc3RfcGtncy5hZGRfYXJndW1lbnQoJy1wJywgJy0tcmVjaXBlJywgaGVscD0nTGltaXQgdG8gcGFja2FnZXMgcHJvZHVjZWQgYnkgdGhlIHNwZWNpZmllZCByZWNpcGUnKQorICAgIHBhcnNlcl9saXN0X3BrZ3MuYWRkX2FyZ3VtZW50KCctdScsICctLXVucGFja2FnZWQnLCBoZWxwPSdJbmNsdWRlIHVucGFja2FnZWQgKGkuZS4gZW1wdHkpIHBhY2thZ2VzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLnNldF9kZWZhdWx0cyhmdW5jPWxpc3RfcGtncykKKworICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbGlzdC1wa2ctZmlsZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTGlzdCBmaWxlcyB3aXRoaW4gYSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMaXN0cyBmaWxlcyBpbmNsdWRlZCBpbiBvbmUgb3IgbW9yZSBwYWNrYWdlcycpCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzLmFkZF9hcmd1bWVudCgncGtnJywgbmFyZ3M9JyonLCBoZWxwPSdQYWNrYWdlIG5hbWUgdG8gcmVwb3J0IG9uIChpZiAtcC8tLXJlY2lwZSBpcyBub3Qgc3BlY2lmaWVkKScpCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzLmFkZF9hcmd1bWVudCgnLXInLCAnLS1ydW50aW1lJywgaGVscD0nU3BlY2lmaWVkIHBhY2thZ2UocykgYXJlIHJ1bnRpbWUgcGFja2FnZSBuYW1lcyBpbnN0ZWFkIG9mIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMuYWRkX2FyZ3VtZW50KCctcCcsICctLXJlY2lwZScsIGhlbHA9J1JlcG9ydCBvbiBhbGwgcGFja2FnZXMgcHJvZHVjZWQgYnkgdGhlIHNwZWNpZmllZCByZWNpcGUnKQorICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcy5hZGRfYXJndW1lbnQoJy11JywgJy0tdW5wYWNrYWdlZCcsIGhlbHA9J0luY2x1ZGUgdW5wYWNrYWdlZCAoaS5lLiBlbXB0eSkgcGFja2FnZXMgKG9ubHkgdXNlZnVsIHdpdGggLXAvLS1yZWNpcGUpJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMuc2V0X2RlZmF1bHRzKGZ1bmM9bGlzdF9wa2dfZmlsZXMpCisKKyAgICBwYXJzZXJfbG9va3VwX3JlY2lwZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbG9va3VwLXJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGaW5kIHJlY2lwZSBwcm9kdWNpbmcgb25lIG9yIG1vcmUgcGFja2FnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0xvb2tzIHVwIHRoZSBzcGVjaWZpZWQgcnVudGltZSBwYWNrYWdlKHMpIHRvIHNlZSB3aGljaCByZWNpcGUgdGhleSB3ZXJlIHByb2R1Y2VkIGJ5JykKKyAgICBwYXJzZXJfbG9va3VwX3JlY2lwZS5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScrJywgaGVscD0nUnVudGltZSBwYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCisgICAgcGFyc2VyX2xvb2t1cF9yZWNpcGUuc2V0X2RlZmF1bHRzKGZ1bmM9bG9va3VwX3JlY2lwZSkKKworICAgIHBhcnNlcl9maW5kX3BhdGggPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZpbmQtcGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGaW5kIHBhY2thZ2UgcHJvdmlkaW5nIGEgdGFyZ2V0IHBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0ZpbmRzIHRoZSByZWNpcGUtc3BhY2UgcGFja2FnZSBwcm92aWRpbmcgdGhlIHNwZWNpZmllZCB0YXJnZXQgcGF0aCcpCisgICAgcGFyc2VyX2ZpbmRfcGF0aC5hZGRfYXJndW1lbnQoJ3RhcmdldHBhdGgnLCBoZWxwPSdQYXRoIHRvIGZpbmQgKHdpbGRjYXJkcyAqID8gYWxsb3dlZCwgdXNlIHF1b3RlcyB0byBhdm9pZCBzaGVsbCBleHBhbnNpb24pJykKKyAgICBwYXJzZXJfZmluZF9wYXRoLnNldF9kZWZhdWx0cyhmdW5jPWZpbmRfcGF0aCkKKworICAgIHBhcnNlcl9yZWFkX3ZhbHVlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdyZWFkLXZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1JlYWQgYW55IHBrZ2RhdGEgdmFsdWUgZm9yIG9uZSBvciBtb3JlIHBhY2thZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdSZWFkcyB0aGUgbmFtZWQgdmFsdWUgZnJvbSB0aGUgcGtnZGF0YSBmaWxlcyBmb3IgdGhlIHNwZWNpZmllZCBwYWNrYWdlcycpCisgICAgcGFyc2VyX3JlYWRfdmFsdWUuYWRkX2FyZ3VtZW50KCd2YWx1ZW5hbWUnLCBoZWxwPSdOYW1lIG9mIHRoZSB2YWx1ZSB0byBsb29rIHVwJykKKyAgICBwYXJzZXJfcmVhZF92YWx1ZS5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScrJywgaGVscD0nUnVudGltZSBwYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCisgICAgcGFyc2VyX3JlYWRfdmFsdWUuc2V0X2RlZmF1bHRzKGZ1bmM9cmVhZF92YWx1ZSkKKworICAgIHBhcnNlcl9nbG9iID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdnbG9iJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0V4cGFuZCBwYWNrYWdlIG5hbWUgZ2xvYiBleHByZXNzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdFeHBhbmRzIG9uZSBvciBtb3JlIGdsb2IgZXhwcmVzc2lvbnMgb3ZlciB0aGUgcGFja2FnZXMgbGlzdGVkIGluIHBrZ2xpc3RmaWxlJykKKyAgICBwYXJzZXJfZ2xvYi5hZGRfYXJndW1lbnQoJ3BrZ2xpc3RmaWxlJywgaGVscD0nRmlsZSBsaXN0aW5nIHBhY2thZ2VzIChvbmUgcGFja2FnZSBuYW1lIHBlciBsaW5lKScpCisgICAgcGFyc2VyX2dsb2IuYWRkX2FyZ3VtZW50KCdnbG9iJywgbmFyZ3M9IisiLCBoZWxwPSdHbG9iIGV4cHJlc3Npb24gZm9yIHBhY2thZ2UgbmFtZXMsIGUuZy4gKi1kZXYnKQorICAgIHBhcnNlcl9nbG9iLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leGNsdWRlJywgaGVscD0nRXhjbHVkZSBwYWNrYWdlcyBtYXRjaGluZyBzcGVjaWZpZWQgcmVnZXggZnJvbSB0aGUgZ2xvYiBvcGVyYXRpb24nKQorICAgIHBhcnNlcl9nbG9iLnNldF9kZWZhdWx0cyhmdW5jPWdsb2IpCisKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGlmIG5vdCBhcmdzLnBrZ2RhdGFfZGlyOgorICAgICAgICBpbXBvcnQgc2NyaXB0cGF0aAorICAgICAgICBiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorICAgICAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBsb2dnZXIuZGVidWcoJ0ZvdW5kIGJpdGJha2UgcGF0aDogJXMnICUgYml0YmFrZXBhdGgpCisgICAgICAgIHRpbmZvaWwgPSB0aW5mb2lsX2luaXQoKQorICAgICAgICBhcmdzLnBrZ2RhdGFfZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdWYWx1ZSBvZiBQS0dEQVRBX0RJUiBpcyAiJXMiJyAlIGFyZ3MucGtnZGF0YV9kaXIpCisgICAgICAgIGlmIG5vdCBhcmdzLnBrZ2RhdGFfZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHBrZ2RhdGEgZGlyZWN0b3J5IGZyb20gUEtHREFUQV9ESVInKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLnBrZ2RhdGFfZGlyKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBwa2dkYXRhIGRpcmVjdG9yeSAlcycgJSBwa2dkYXRhX2RpcikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzKQorCisgICAgcmV0dXJuIHJldAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2UtcHVibGlzaC1zZGsgYi95b2N0by1wb2t5L3NjcmlwdHMvb2UtcHVibGlzaC1zZGsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTczN2M5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1wdWJsaXNoLXNkawpAQCAtMCwwICsxLDE0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgT3BlbkVtYmVkZGVkIFNESyBwdWJsaXNoaW5nIHRvb2wKKworIyBvZS1wdWJsaXNoLXNkayBwdWJsaXNoIDxleHQtc2RrPiA8ZGVzdGluYXRpb24+CisjIDxleHQtc2RrPjogZXh0ZW5zaWJsZSBTREsgdG8gcHVibGlzaCAocGF0aCB0byB0aGUgaW5zdGFsbGVyIHNoZWxsIHNjcmlwdCkKKyMgPGRlc3RpbmF0aW9uPjogbG9jYWwgb3IgcmVtb3RlIGxvY2F0aW9uIHdoaWNoIHNlcnZlcnMgYXMgYW4gU0RLIHVwZGF0ZSBzZXJ2ZXIKKyMgZS5nLgorIyBvZS1wdWJsaXNoLXNkayAvcGF0aC90by9zZGstZXh0LnNoIC9tbnQvcG9reS9zZGstZXh0CisjIG9lLXB1Ymxpc2gtc2RrIC9wYXRoL3RvL3Nkay1leHQuc2ggdXNlckBob3N0Oi9vcHQvcG9reS9zZGstZXh0CisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBlcnJubworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KK2ltcG9ydCBzY3JpcHR1dGlscworbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgnc2RrdG9vbCcpCisKK2RlZiBta2RpcihkKToKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGQpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBlCisKK2RlZiBwdWJsaXNoKGFyZ3MpOgorICAgIGxvZ2dlci5kZWJ1ZygiSW4gcHVibGlzaCBmdW5jdGlvbiIpCisgICAgdGFyZ2V0X3NkayA9IGFyZ3Muc2RrCisgICAgZGVzdGluYXRpb24gPSBhcmdzLmRlc3QKKyAgICBsb2dnZXIuZGVidWcoInRhcmdldF9zZGsgPSAlcywgdXBkYXRlX3NlcnZlciA9ICVzIiAlICh0YXJnZXRfc2RrLCBkZXN0aW5hdGlvbikpCisgICAgc2RrX2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh0YXJnZXRfc2RrKQorCisgICAgIyBFbnN1cmUgdGhlIFNESyBleGlzdHMKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0X3Nkayk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgZG9lc24ndCBleGlzdCIgJSB0YXJnZXRfc2RrKQorICAgICAgICByZXR1cm4gLTEKKworICAgIGlmICc6JyBpbiBkZXN0aW5hdGlvbjoKKyAgICAgICAgaXNfcmVtb3RlID0gVHJ1ZQorICAgICAgICBob3N0LCBkZXN0ZGlyID0gZGVzdGluYXRpb24uc3BsaXQoJzonKQorICAgICAgICBkZXN0X3NkayA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBzZGtfYmFzZW5hbWUpCisgICAgZWxzZToKKyAgICAgICAgaXNfcmVtb3RlID0gRmFsc2UKKyAgICAgICAgZGVzdF9zZGsgPSBvcy5wYXRoLmpvaW4oZGVzdGluYXRpb24sIHNka19iYXNlbmFtZSkKKworICAgICMgTWFraW5nIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMKKyAgICBsb2dnZXIuZGVidWcoIk1ha2luZyBzdXJlIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzIikKKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICBta2RpcihkZXN0aW5hdGlvbikKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSAic3NoICVzICdta2RpciAtcCAlcyciICUgKGhvc3QsIGRlc3RkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJNYWtpbmcgZGlyZWN0b3J5ICVzIG9uICVzIGZhaWxlZCIgJSAoZGVzdGRpciwgaG9zdCkpCisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICAjIENvcHlpbmcgdGhlIFNESyB0byB0aGUgZGVzdGluYXRpb24KKyAgICBsb2dnZXIuaW5mbygiQ29weWluZyB0aGUgU0RLIHRvIGRlc3RpbmF0aW9uIikKKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0X3Nkayk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZGVzdF9zZGspCisgICAgICAgIGlmIChvcy5zdGF0KHRhcmdldF9zZGspLnN0X2RldiA9PSBvcy5zdGF0KGRlc3RpbmF0aW9uKS5zdF9kZXYpOgorICAgICAgICAgICAgb3MubGluayh0YXJnZXRfc2RrLCBkZXN0X3NkaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5KHRhcmdldF9zZGssIGRlc3Rfc2RrKQorICAgIGVsc2U6CisgICAgICAgIGNtZCA9ICJzY3AgJXMgJXMiICUgKHRhcmdldF9zZGssIGRlc3RpbmF0aW9uKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigic2NwICVzICVzIGZhaWxlZCIgJSAodGFyZ2V0X3NkaywgZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgIyBVbnBhY2sgdGhlIFNESworICAgIGxvZ2dlci5pbmZvKCJVbnBhY2tpbmcgU0RLIikKKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICBjbWQgPSAic2ggJXMgLW4gLXkgLWQgJXMiICUgKGRlc3Rfc2RrLCBkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ID09IDA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnU3VjY2Vzc2Z1bGx5IHVucGFja2VkICVzIHRvICVzJyAlIChkZXN0X3NkaywgZGVzdGluYXRpb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdW5wYWNrICVzIHRvICVzJyAlIChkZXN0X3NkaywgZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJldAorICAgIGVsc2U6CisgICAgICAgIGNtZCA9ICJzc2ggJXMgJ3NoICVzIC1uIC15IC1kICVzJyIgJSAoaG9zdCwgZGVzdF9zZGssIGRlc3RkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSB1bnBhY2tlZCAlcyB0byAlcycgJSAoZGVzdF9zZGssIGRlc3RkaXIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdW5wYWNrICVzIHRvICVzJyAlIChkZXN0X3NkaywgZGVzdGRpcikpCisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICAjIFNldHRpbmcgdXAgdGhlIGdpdCByZXBvCisgICAgaWYgbm90IGlzX3JlbW90ZToKKyAgICAgICAgY21kID0gJ3NldCAtZTsgY2QgJXMvbGF5ZXJzOyBpZiBbICEgLWUgLmdpdCBdOyB0aGVuIGdpdCBpbml0IC47IG12IC5naXQvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIC5naXQvaG9va3MvcG9zdC11cGRhdGU7IGZpOyBnaXQgYWRkIC1BIC47IGdpdCBjb21taXQgLXEgLW0gImluaXQgcmVwbyIgfHwgdHJ1ZTsnICUgZGVzdGluYXRpb24KKyAgICBlbHNlOgorICAgICAgICBjbWQgPSAic3NoICVzICdzZXQgLWU7IGNkICVzL2xheWVyczsgaWYgWyAhIC1lIC5naXQgXTsgdGhlbiBnaXQgaW5pdCAuOyBtdiAuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSAuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlOyBmaTsgZ2l0IGFkZCAtQSAuOyBnaXQgY29tbWl0IC1xIC1tIFwiaW5pdCByZXBvXCIgfHwgdHJ1ZTsnIiAlIChob3N0LCBkZXN0ZGlyKQorICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgaWYgcmV0ID09IDA6CisgICAgICAgIGxvZ2dlci5pbmZvKCdTREsgcHVibGlzaGVkIHN1Y2Nlc3NmdWxseScpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHVwIGxheWVyIGdpdCByZXBvJykKKyAgICByZXR1cm4gcmV0CisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIGRldmVsb3BtZW50IHRvb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3NkaycsIGhlbHA9J0V4dGVuc2libGUgU0RLIHRvIHB1Ymxpc2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2Rlc3QnLCBoZWxwPSdEZXN0aW5hdGlvbiB0byBwdWJsaXNoIFNESyB0bycpCisKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9cHVibGlzaCkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBlbGlmIGFyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCisgICAgcmV0dXJuIHJldAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QgYi95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2VsZnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTFlMmRkMgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vZS1zZWxmdGVzdApAQCAtMCwwICsxLDI0NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IHJ1bnMgdGVzdHMgZGVmaW5lZCBpbiBtZXRhL2xpYi9zZWxmdGVzdC8KKyMgSXQncyBwdXJwb3NlIGlzIHRvIGF1dG9tYXRlIHRoZSB0ZXN0aW5nIG9mIGRpZmZlcmVudCBiaXRiYWtlIHRvb2xzLgorIyBUbyB1c2UgaXQgeW91IGp1c3QgbmVlZCB0byBzb3VyY2UgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYW5kCisjIGFkZCB0aGUgbWV0YS1zZWxmdGVzdCBsYXllciB0byB5b3VyIEJCTEFZRVJTLgorIyBDYWxsIHRoZSBzY3JpcHQgYXM6ICJvZS1zZWxmdGVzdCIgdG8gcnVuIGFsbCB0aGUgdGVzdHMgaW4gaW4gbWV0YS9saWIvc2VsZnRlc3QvCisjIENhbGwgdGhlIHNjcmlwdCBhczogIm9lLXNlbGZ0ZXN0IDxtb2R1bGU+LjxDbGFzcz4uPG1ldGhvZD4iIHRvIHJ1biBqdXN0IGEgc2luZ2xlIHRlc3QKKyMgRS5nOiAib2Utc2VsZnRlc3QgYmJvdXRwdXQuQml0YmFrZUxheWVycyIgd2lsbCBydW4ganVzdCB0aGUgQml0YmFrZUxheWVycyBjbGFzcyBmcm9tIG1ldGEvbGliL3NlbGZ0ZXN0L2Jib3V0cHV0LnB5CisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXJncGFyc2UKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkgKyAnL2xpYicpCitpbXBvcnQgc2NyaXB0cGF0aAorc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCitzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCisKK2ltcG9ydCBvZXFhLnNlbGZ0ZXN0CitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0CisKK2RlZiBsb2dnZXJfY3JlYXRlKCk6CisgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInNlbGZ0ZXN0IikKKyAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGZoID0gbG9nZ2luZy5GaWxlSGFuZGxlcihmaWxlbmFtZT0nb2Utc2VsZnRlc3QubG9nJywgbW9kZT0ndycpCisgICAgZmguc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGNoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgY2guc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgIGZoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKworICAgIGxvZy5hZGRIYW5kbGVyKGZoKQorICAgIGxvZy5hZGRIYW5kbGVyKGNoKQorCisgICAgcmV0dXJuIGxvZworCitsb2cgPSBsb2dnZXJfY3JlYXRlKCkKKworZGVmIGdldF9hcmdzX3BhcnNlcigpOgorICAgIGRlc2NyaXB0aW9uID0gIlNjcmlwdCB0aGF0IHJ1bnMgdW5pdCB0ZXN0cyBhZ2FpbnMgYml0YmFrZSBhbmQgb3RoZXIgWW9jdG8gcmVsYXRlZCB0b29scy4gVGhlIGdvYWwgaXMgdG8gdmFsaWRhdGUgdG9vbHMgZnVuY3Rpb25hbGl0eSBhbmQgbWV0YWRhdGEgaW50ZWdyaXR5LiBSZWZlciB0byBodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL09lLXNlbGZ0ZXN0IGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJ1bi10ZXN0cycsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249J3N0b3JlJywgbmFyZ3M9JyonLCBkZXN0PSJydW5fdGVzdHMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1NlbGVjdCB3aGF0IHRlc3RzIHRvIHJ1biAobW9kdWxlcywgY2xhc3NlcyBvciB0ZXN0IG1ldGhvZHMpLiBGb3JtYXQgc2hvdWxkIGJlOiA8bW9kdWxlPi48Y2xhc3M+Ljx0ZXN0X21ldGhvZD4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1ydW4tYWxsLXRlc3RzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJ1bl9hbGxfdGVzdHMiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdSdW4gYWxsICh1bmhpZGRlbikgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1saXN0LW1vZHVsZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibGlzdF9tb2R1bGVzIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nTGlzdCBhbGwgYXZhaWxhYmxlIHRlc3QgbW9kdWxlcy4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1saXN0LWNsYXNzZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibGlzdF9hbGxjbGFzc2VzIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nTGlzdCBhbGwgYXZhaWxhYmxlIHRlc3QgY2xhc3Nlcy4nKQorICAgIHJldHVybiBwYXJzZXIKKworCitkZWYgcHJlZmxpZ2h0X2NoZWNrKCk6CisKKyAgICBsb2cuaW5mbygiQ2hlY2tpbmcgdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyIGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0cyIpCisKKyAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIik6CisgICAgICAgIGxvZy5lcnJvcigiQlVJTERESVIgaXNuJ3Qgc2V0LiBEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgaWYgb3MuZ2V0Y3dkKCkgIT0gYnVpbGRkaXI6CisgICAgICAgIGxvZy5pbmZvKCJDaGFuZ2luZyBjd2QgdG8gJXMiICUgYnVpbGRkaXIpCisgICAgICAgIG9zLmNoZGlyKGJ1aWxkZGlyKQorCisgICAgaWYgbm90ICJtZXRhLXNlbGZ0ZXN0IiBpbiBnZXRfYmJfdmFyKCJCQkxBWUVSUyIpOgorICAgICAgICBsb2cuZXJyb3IoIllvdSBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIG1ldGEtc2VsZnRlc3QgbGF5ZXIgaW4gQkJMQVlFUlMiKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGxvZy5pbmZvKCJSdW5uaW5nIGJpdGJha2UgLXAiKQorICAgIHJ1bkNtZCgiYml0YmFrZSAtcCIpCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgYWRkX2luY2x1ZGUoKToKKyAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCisgICAgICAgIG5vdCBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJBZGRpbmc6IFwiaW5jbHVkZSBzZWxmdGVzdC5pbmNcIiBpbiBsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAiXG4jaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBzZWxmdGVzdC5pbmMiKQorCisgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCisgICAgICAgIG5vdCBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJBZGRpbmc6IFwiaW5jbHVkZSBiYmxheWVycy5pbmNcIiBpbiBiYmxheWVycy5jb25mIikKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAiXG4jaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBiYmxheWVycy5pbmMiKQorCitkZWYgcmVtb3ZlX2luY2x1ZGUoKToKKyAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgaWYgYnVpbGRkaXIgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCisgICAgICAgIGluIGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIikpOgorICAgICAgICAgICAgbG9nLmluZm8oIlJlbW92aW5nIHRoZSBpbmNsdWRlIGZyb20gbG9jYWwuY29uZiIpCisgICAgICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHlcbmluY2x1ZGUgc2VsZnRlc3QuaW5jIikKKworICAgIGlmICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weSIgXAorICAgICAgICBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJSZW1vdmluZyB0aGUgaW5jbHVkZSBmcm9tIGJibGF5ZXJzLmNvbmYiKQorICAgICAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIiksIFwKKyAgICAgICAgICAgICAgICAgICAgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIGJibGF5ZXJzLmluYyIpCisKK2RlZiByZW1vdmVfaW5jX2ZpbGVzKCk6CisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpLCAiY29uZi9zZWxmdGVzdC5pbmMiKSkKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZ2V0X3Rlc3RfbGF5ZXIoKSk6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IsKSBhcyBlOiAgICAjIEF0dHJpYnV0ZUVycm9yIG1heSBoYXBwZW4gaWYgQlVJTERESVIgaXMgbm90IHNldAorICAgICAgICBwYXNzCisKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIkJVSUxERElSIiksICJjb25mL2JibGF5ZXJzLmluYyIpKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCitkZWYgZ2V0X3Rlc3RzKGV4Y2x1c2l2ZV9tb2R1bGVzPVtdLCBpbmNsdWRlX2hpZGRlbj1GYWxzZSk6CisgICAgdGVzdHNsaXN0ID0gW10KKyAgICBmb3IgeCBpbiBleGNsdXNpdmVfbW9kdWxlczoKKyAgICAgICAgdGVzdHNsaXN0LmFwcGVuZCgnb2VxYS5zZWxmdGVzdC4nICsgeCkKKyAgICBpZiBub3QgdGVzdHNsaXN0OgorICAgICAgICBmb3IgdGVzdHBhdGggaW4gb2VxYS5zZWxmdGVzdC5fX3BhdGhfXzoKKyAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIodGVzdHBhdGgpIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgKGYuc3RhcnRzd2l0aCgnXycpIGFuZCBub3QgaW5jbHVkZV9oaWRkZW4pIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfXycpIGFuZCBmICE9ICdiYXNlLnB5J10pCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSAnb2VxYS5zZWxmdGVzdC4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQobW9kdWxlKQorCisgICAgcmV0dXJuIHRlc3RzbGlzdAorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGdldF9hcmdzX3BhcnNlcigpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgICMgQWRkIDxsYXllcj4vbGliIHRvIHN5cy5wYXRoLCBzbyBsYXllcnMgY2FuIGFkZCBzZWxmdGVzdHMKKyAgICBsb2cuaW5mbygiUnVubmluZyBiaXRiYWtlIC1lIHRvIGdldCBCQlBBVEgiKQorICAgIGJicGF0aCA9IGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCc6JykKKyAgICBsYXllcl9saWJkaXJzID0gW3AgZm9yIHAgaW4gKG9zLnBhdGguam9pbihsLCAnbGliJykgZm9yIGwgaW4gYmJwYXRoKSBpZiBvcy5wYXRoLmV4aXN0cyhwKV0KKyAgICBzeXMucGF0aC5leHRlbmQobGF5ZXJfbGliZGlycykKKyAgICByZWxvYWQob2VxYS5zZWxmdGVzdCkKKworICAgIGlmIGFyZ3MubGlzdF9hbGxjbGFzc2VzOgorICAgICAgICBhcmdzLmxpc3RfbW9kdWxlcyA9IFRydWUKKworICAgIGlmIGFyZ3MubGlzdF9tb2R1bGVzOgorICAgICAgICBsb2cuaW5mbygnTGlzdGluZyBhbGwgYXZhaWxhYmxlIHRlc3QgbW9kdWxlczonKQorICAgICAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHMoaW5jbHVkZV9oaWRkZW49VHJ1ZSkKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNsaXN0OgorICAgICAgICAgICAgbW9kdWxlID0gdGVzdC5zcGxpdCgnLicpWy0xXQorICAgICAgICAgICAgaW5mbyA9ICcnCisgICAgICAgICAgICBpZiBtb2R1bGUuc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgIGluZm8gPSAnIChoaWRkZW4pJworICAgICAgICAgICAgcHJpbnQgbW9kdWxlICsgaW5mbworICAgICAgICAgICAgaWYgYXJncy5saXN0X2FsbGNsYXNzZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCisgICAgICAgICAgICAgICAgICAgIG1vZGxpYiA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHRlc3QpCisgICAgICAgICAgICAgICAgICAgIGZvciB2IGluIHZhcnMobW9kbGliKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB2YXJzKG1vZGxpYilbdl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodCwgdHlwZShvZVNlbGZUZXN0KSkgYW5kIGlzc3ViY2xhc3ModCwgb2VTZWxmVGVzdCkgYW5kIHQhPW9lU2VsZlRlc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAtLSIsIHYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbWV0aG9kIGluIGRpcih0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWV0aG9kLnN0YXJ0c3dpdGgoInRlc3RfIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIC0tICAtLSIsIG1ldGhvZAorCisgICAgICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgSW1wb3J0RXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHByaW50IGUKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgaWYgYXJncy5ydW5fdGVzdHMgb3IgYXJncy5ydW5fYWxsX3Rlc3RzOgorICAgICAgICBpZiBub3QgcHJlZmxpZ2h0X2NoZWNrKCk6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0cyhleGNsdXNpdmVfbW9kdWxlcz0oYXJncy5ydW5fdGVzdHMgb3IgW10pLCBpbmNsdWRlX2hpZGRlbj1GYWxzZSkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gTm9uZQorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9MiwgcmVzdWx0Y2xhc3M9U3RhbXBlZFJlc3VsdCkKKyAgICAgICAgIyB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb3RoZXJ3aXNlIGp1c3QgbG9hZGluZyB0aGUgdGVzdHMKKyAgICAgICAgIyB3aWxsIHRha2UgMiBtaW51dGVzIChiaXRiYWtlIC1lIGNhbGxzKQorICAgICAgICBvZVNlbGZUZXN0LnRlc3RsYXllcl9wYXRoID0gZ2V0X3Rlc3RfbGF5ZXIoKQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICBsb2cuaW5mbygiTG9hZGluZyB0ZXN0cyBmcm9tOiAlcyIgJSB0ZXN0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0ZXN0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRmFpbGVkIHRvIGltcG9ydCAlcyIgJSB0ZXN0KQorICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGFkZF9pbmNsdWRlKCkKKyAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSkKKyAgICAgICAgbG9nLmluZm8oIkZpbmlzaGVkIikKKyAgICAgICAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMQorCitjbGFzcyBTdGFtcGVkUmVzdWx0KHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KToKKyAgICAiIiIKKyAgICBDdXN0b20gVGVzdFJlc3VsdCB0aGF0IHByaW50cyB0aGUgdGltZSB3aGVuIGEgdGVzdCBzdGFydHMuICBBcyBvZS1zZWxmdGVzdAorICAgIGNhbiB0YWtlIGEgbG9uZyB0aW1lIChpZSBhIGZldyBob3VycykgdG8gcnVuLCB0aW1lc3RhbXBzIGhlbHAgdXMgdW5kZXJzdGFuZAorICAgIHdoYXQgdGVzdHMgYXJlIHRha2luZyBhIGxvbmcgdGltZSB0byBleGVjdXRlLgorICAgICIiIgorICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRpbWUuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIiwgdGltZS5sb2NhbHRpbWUoKSkgKyAiIC0gIikKKyAgICAgICAgc3VwZXIoU3RhbXBlZFJlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIGZpbmFsbHk6CisgICAgICAgIHJlbW92ZV9pbmNsdWRlKCkKKyAgICAgICAgcmVtb3ZlX2luY19maWxlcygpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1OThiYTgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIKQEAgLTAsMCArMSwxNDAgQEAKKyMhL2Jpbi9zaAorCisjIE9FIEJ1aWxkIEVudmlyb25tZW50IFNldHVwIFNjcmlwdAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworaWYgWyAteiAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBUaGUgYnVpbGQgZGlyZWN0b3J5IChCVUlMRERJUikgbXVzdCBiZSBzZXQhIgorICAgIGV4aXQgMQorZmkKKworbWtkaXIgLXAgIiRCVUlMRERJUi9jb25mIgorCitpZiBbICEgLWQgIiRCVUlMRERJUiIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogVGhlIGJ1aWxkZGlyICgkQlVJTERESVIpIGRvZXMgbm90IGV4aXN0ISIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgISAtdyAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBDYW5ub3Qgd3JpdGUgdG8gJEJVSUxERElSLCBwZXJoYXBzIHRyeSBzb3VyY2luZyB3aXRoIGEgd3JpdGFibGUgcGF0aD8gaS5lLiAuIG9lLWluaXQtYnVpbGQtZW52IH4vbXktYnVpbGQiCisgICAgZXhpdCAxCitmaQorCisjIEF0dGVtcHRpbmcgcmVtb3ZhbCBvZiBzdGlja3ksc2V0dWlkIGJpdHMgZnJvbSBCVUlMRERJUiwgQlVJTERESVIvY29uZgorY2htb2QgLXN0ICIkQlVJTERESVIiIDI+L2Rldi9udWxsIHx8IGVjaG8gIldBUk5JTkc6IHVuYWJsZSB0byBjaG1vZCAkQlVJTERESVIiCitjaG1vZCAtc3QgIiRCVUlMRERJUi9jb25mIiAyPi9kZXYvbnVsbCB8fCBlY2hvICJXQVJOSU5HOiB1bmFibGUgdG8gY2htb2QgJEJVSUxERElSL2NvbmYiCisKK2NkICIkQlVJTERESVIiCisKK2lmIFsgLWYgIiRCVUlMRERJUi9jb25mL3RlbXBsYXRlY29uZi5jZmciIF07IHRoZW4KKyAgICBURU1QTEFURUNPTkY9JChjYXQgIiRCVUlMRERJUi9jb25mL3RlbXBsYXRlY29uZi5jZmciKQorZmkKKworLiAkT0VST09ULy50ZW1wbGF0ZWNvbmYKKworaWYgWyAhIC1mICIkQlVJTERESVIvY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIiBdOyB0aGVuCisgICAgZWNobyAiJFRFTVBMQVRFQ09ORiIgPiIkQlVJTERESVIvY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIgorZmkKKworIyAKKyMgJFRFTVBMQVRFQ09ORiBjYW4gcG9pbnQgdG8gYSBkaXJlY3RvcnkgZm9yIHRoZSB0ZW1wbGF0ZSBsb2NhbC5jb25mICYgYmJsYXllcnMuY29uZgorIworaWYgWyAtbiAiJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgorICAgIGlmIFsgISAtZCAiJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgorICAgICAgICAjIEFsbG93IFRFTVBMQVRFQ09ORj1tZXRhLXh5ei9jb25mIGFzIGEgc2hvcnRjdXQKKyAgICAgICAgaWYgWyAtZCAiJE9FUk9PVC8kVEVNUExBVEVDT05GIiBdOyB0aGVuCisgICAgICAgICAgICBURU1QTEFURUNPTkY9IiRPRVJPT1QvJFRFTVBMQVRFQ09ORiIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAhIC1kICIkVEVNUExBVEVDT05GIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvID4mMiAiRXJyb3I6ICckVEVNUExBVEVDT05GJyBtdXN0IGJlIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWwuY29uZiAmIGJibGF5ZXJzLmNvbmYiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorICAgIE9FQ09SRUxBWUVSQ09ORj0iJFRFTVBMQVRFQ09ORi9iYmxheWVycy5jb25mLnNhbXBsZSIKKyAgICBPRUNPUkVMT0NBTENPTkY9IiRURU1QTEFURUNPTkYvbG9jYWwuY29uZi5zYW1wbGUiCisgICAgT0VDT1JFTk9URVNDT05GPSIkVEVNUExBVEVDT05GL2NvbmYtbm90ZXMudHh0IgorZmkKKwordW5zZXQgU0hPV1lQRE9DCitpZiBbIC16ICIkT0VDT1JFTE9DQUxDT05GIiBdOyB0aGVuCisgICAgT0VDT1JFTE9DQUxDT05GPSIkT0VST09UL21ldGEvY29uZi9sb2NhbC5jb25mLnNhbXBsZSIKK2ZpCitpZiBbICEgLXIgIiRCVUlMRERJUi9jb25mL2xvY2FsLmNvbmYiIF07IHRoZW4KK2NhdCA8PEVPTQorWW91IGhhZCBubyBjb25mL2xvY2FsLmNvbmYgZmlsZS4gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaGFzIHRoZXJlZm9yZSBiZWVuCitjcmVhdGVkIGZvciB5b3Ugd2l0aCBzb21lIGRlZmF1bHQgdmFsdWVzLiBZb3UgbWF5IHdpc2ggdG8gZWRpdCBpdCB0byB1c2UgYSAKK2RpZmZlcmVudCBNQUNISU5FICh0YXJnZXQgaGFyZHdhcmUpIG9yIGVuYWJsZSBwYXJhbGxlbCBidWlsZCBvcHRpb25zIHRvIHRha2UgCithZHZhbnRhZ2Ugb2YgbXVsdGlwbGUgY29yZXMgZm9yIGV4YW1wbGUuIFNlZSB0aGUgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhcyAKK2NvbW1vbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvbW1lbnRlZC4KKworRU9NCisgICAgY3AgLWYgJE9FQ09SRUxPQ0FMQ09ORiAiJEJVSUxERElSL2NvbmYvbG9jYWwuY29uZiIKKyAgICBTSE9XWVBET0M9eWVzCitmaQorCitpZiBbIC16ICIkT0VDT1JFTEFZRVJDT05GIiBdOyB0aGVuCisgICAgT0VDT1JFTEFZRVJDT05GPSIkT0VST09UL21ldGEvY29uZi9iYmxheWVycy5jb25mLnNhbXBsZSIKK2ZpCitpZiBbICEgLXIgIiRCVUlMRERJUi9jb25mL2JibGF5ZXJzLmNvbmYiIF07IHRoZW4KKyAgICBjYXQgPDxFT00KK1lvdSBoYWQgbm8gY29uZi9iYmxheWVycy5jb25mIGZpbGUuIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaGFzIGJlZW4gY3JlYXRlZCBmb3IKK3lvdSB3aXRoIHNvbWUgZGVmYXVsdCB2YWx1ZXMuIFRvIGFkZCBhZGRpdGlvbmFsIG1ldGFkYXRhIGxheWVycyBpbnRvIHlvdXIKK2NvbmZpZ3VyYXRpb24gcGxlYXNlIGFkZCBlbnRyaWVzIHRvIHRoaXMgZmlsZS4KKworRU9NCisKKyAgICAjIFB1dCB0aGUgYWJvc29sdXRlIHBhdGggdG8gdGhlIGxheWVycyBpbiBiYmxheWVycy5jb25mIHNvIHdlIGNhbiBydW4KKyAgICAjIGJpdGJha2Ugd2l0aG91dCB0aGUgaW5pdCBzY3JpcHQgYWZ0ZXIgdGhlIGZpcnN0IHJ1bgorICAgICMgIyNDT1JFQkFTRSMjIGlzIGRlcHJlY2F0ZWQgYXMgaXQncyBtZWFuaW5nIHdhcyBpbmNvbnNpc3RlbnQsIGJ1dCBjb250aW51ZQorICAgICMgdG8gcmVwbGFjZSBpdCBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICBzZWQgLWUgInN8IyNPRVJPT1QjI3wkT0VST09UfGciIFwKKyAgICAgICAgLWUgInN8IyNDT1JFQkFTRSMjfCRPRVJPT1R8ZyIgXAorICAgICAgICAkT0VDT1JFTEFZRVJDT05GID4gIiRCVUlMRERJUi9jb25mL2JibGF5ZXJzLmNvbmYiCisgICAgU0hPV1lQRE9DPXllcworZmkKKworIyBQcmV2ZW50IGRpc3R1cmJpbmcgYSBuZXcgR0lUIGNsb25lIGluIHNhbWUgY29uc29sZQordW5zZXQgT0VDT1JFTE9DQUxDT05GCit1bnNldCBPRUNPUkVMQVlFUkNPTkYKKworIyBFbmRpbmcgdGhlIGZpcnN0LXRpbWUgcnVuIG1lc3NhZ2UuIFNob3cgdGhlIFlQIERvY3VtZW50YXRpb24gYmFubmVyLgoraWYgWyAhIC16ICIkU0hPV1lQRE9DIiBdOyB0aGVuCisgICAgY2F0IDw8RU9NCitUaGUgWW9jdG8gUHJvamVjdCBoYXMgZXh0ZW5zaXZlIGRvY3VtZW50YXRpb24gYWJvdXQgT0UgaW5jbHVkaW5nIGEgcmVmZXJlbmNlCittYW51YWwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0OgorICAgIGh0dHA6Ly95b2N0b3Byb2plY3Qub3JnL2RvY3VtZW50YXRpb24KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgT3BlbkVtYmVkZGVkIHNlZSB0aGVpciB3ZWJzaXRlOgorICAgIGh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy8KKworRU9NCisjICAgIHVuc2V0IFNIT1dZUERPQworZmkKKworY2F0IDw8RU9NCisKKyMjIyBTaGVsbCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGJ1aWxkcy4gIyMjCisKK1lvdSBjYW4gbm93IHJ1biAnYml0YmFrZSA8dGFyZ2V0PicKKworRU9NCitpZiBbIC16ICIkT0VDT1JFTk9URVNDT05GIiBdOyB0aGVuCisgICAgT0VDT1JFTk9URVNDT05GPSIkT0VST09UL21ldGEvY29uZi9jb25mLW5vdGVzLnR4dCIKK2ZpCitbICEgLXIgIiRPRUNPUkVOT1RFU0NPTkYiIF0gfHwgY2F0ICRPRUNPUkVOT1RFU0NPTkYKK3Vuc2V0IE9FQ09SRU5PVEVTQ09ORgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL29lLXNldHVwLXJwbXJlcG8gYi95b2N0by1wb2t5L3NjcmlwdHMvb2Utc2V0dXAtcnBtcmVwbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTdiOThiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXNldHVwLXJwbXJlcG8KQEAgLTAsMCArMSw5NyBAQAorIyEvYmluL2Jhc2gKKyMKKyMgVGhpcyB1dGlsaXR5IHNldHVwIHRoZSBuZWNlc3NhcnkgbWV0YWRhdGEgZm9yIGFuIHJwbSByZXBvCisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisKKyMgRG9uJ3QgdXNlIFRNUERJUiBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCwgaXQgbWF5IGJlIGEgZGlzdHJvCisjIHZhcmlhYmxlIHBvaW50aW5nIHRvIC90bXAgKGUuZy4gd2l0aGluIFggb24gT3BlblNVU0UpCisjIEluc3RlYWQsIHVzZSBPRV9UTVBESVIgZm9yIHBhc3NpbmcgdGhpcyBpbiBleHRlcm5hbGx5LgorVE1QRElSPSIkT0VfVE1QRElSIgorCitmdW5jdGlvbiB1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJDAgPHJwbS1kaXI+IgorCWVjaG8gIiAgPHJwbS1kaXI+OiBkZWZhdWx0IGlzICRUTVBESVIvZGVwbG95L3JwbSIKK30KKworaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK3NldHVwX3RtcGRpcigpIHsKKyAgICBpZiBbIC16ICIkVE1QRElSIiBdOyB0aGVuCisgICAgICAgICMgVHJ5IHRvIGdldCBUTVBESVIgZnJvbSBiaXRiYWtlCisgICAgICAgIHR5cGUgLVAgYml0YmFrZSAmPi9kZXYvbnVsbCB8fCB7CisgICAgICAgICAgICBlY2hvICJJbiBvcmRlciBmb3IgdGhpcyBzY3JpcHQgdG8gZHluYW1pY2FsbHkgaW5mZXIgcGF0aHMiOworICAgICAgICAgICAgZWNobyAidG8ga2VybmVscyBvciBmaWxlc3lzdGVtIGltYWdlcywgeW91IGVpdGhlciBuZWVkIjsKKyAgICAgICAgICAgIGVjaG8gImJpdGJha2UgaW4geW91ciBQQVRIIG9yIHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiI7CisgICAgICAgICAgICBlY2hvICJiZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdCIgPiYyOworICAgICAgICAgICAgZXhpdCAxOyB9CisKKyAgICAgICAgIyBXZSBoYXZlIGJpdGJha2UgaW4gUEFUSCwgZ2V0IFRNUERJUiBmcm9tIGJpdGJha2UKKyAgICAgICAgVE1QRElSPWBiaXRiYWtlIC1lIHwgZ3JlcCBeVE1QRElSPVwiIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMmAKKyAgICAgICAgaWYgWyAteiAiJFRNUERJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IHRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHJ1biBmcm9tIHlvdXIgYnVpbGQgZGlyZWN0b3J5LCIKKyAgICAgICAgICAgIGVjaG8gIm9yIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IFRNUERJUiBpbiB5b3VyIGVudmlyb25tZW50IgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZmkKK30KKworc2V0dXBfc3lzcm9vdCgpIHsKKwkjIFRvb2xjaGFpbiBpbnN0YWxscyBzZXQgdXAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBpbiB0aGVpcgorCSMgZW52aXJvbm1lbnQgc2NyaXB0LiBJZiB0aGF0IHZhcmlhYmxlIGlzbid0IHNldCwgd2UncmUKKwkjIGVpdGhlciBpbiBhbiBpbi10cmVlIHBva3kgc2NlbmFyaW8gb3IgdGhlIGVudmlyb25tZW50CisJIyBzY3JpcHQgd2Fzbid0IHNvdXJjZSdkLgorCWlmIFsgLXogIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QiIF07IHRoZW4KKwkJc2V0dXBfdG1wZGlyCisJCUJVSUxEX0FSQ0g9YHVuYW1lIC1tYAorCQlCVUlMRF9PUz1gdW5hbWUgfCB0ciAnW0EtWl0nICdbYS16XSdgCisJCUJVSUxEX1NZUz0iJEJVSUxEX0FSQ0gtJEJVSUxEX09TIgorCisJCU9FQ09SRV9OQVRJVkVfU1lTUk9PVD0kVE1QRElSL3N5c3Jvb3RzLyRCVUlMRF9TWVMKKwlmaSAKK30KKworc2V0dXBfdG1wZGlyCitzZXR1cF9zeXNyb290CisKKworaWYgWyAtbiAiJDEiIF07IHRoZW4KKwlSUE1fRElSPSIkMSIKK2Vsc2UKKwlSUE1fRElSPSIkVE1QRElSL2RlcGxveS9ycG0iCitmaQorCitpZiBbICEgLWQgIiRSUE1fRElSIiBdOyB0aGVuCisgICAJZWNobyAiRXJyb3I6IHJwbSBkaXIgJFJQTV9ESVIgZG9lc24ndCBleGlzdCIKKwlleGl0IDEKK2ZpCisKK0NSRUFURVJFUE89JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluL2NyZWF0ZXJlcG8KK2lmIFsgISAtZSAiJENSRUFURVJFUE8iIF07IHRoZW4KKyAgIAllY2hvICJFcnJvcjogY2FuJ3QgZmluZCBjcmVhdGVyZXBvIGJpbmFyeSIKKwllY2hvICJwbGVhc2UgcnVuIGJpdGJha2UgY3JlYXRlcmVwby1uYXRpdmUgZmlyc3QiCisJZXhpdCAxCitmaQorCitleHBvcnQgUEFUSD0ke1BBVEh9OiR7T0VDT1JFX05BVElWRV9TWVNST09UfS91c3IvYmluCisKKyRDUkVBVEVSRVBPICIkUlBNX0RJUiIKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2UtdHJpbS1zY2hlbWFzIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXRyaW0tc2NoZW1hcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOWZiM2ExCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lLXRyaW0tc2NoZW1hcwpAQCAtMCwwICsxLDQ5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgeG1sLmV0cmVlLmNFbGVtZW50VHJlZSBhcyBldHJlZQorZXhjZXB0OgorICAgIGltcG9ydCB4bWwuZXRyZWUuRWxlbWVudFRyZWUgYXMgZXRyZWUKKworZGVmIGNoaWxkIChlbGVtLCBuYW1lKToKKyAgICBmb3IgZSBpbiBlbGVtLmdldGNoaWxkcmVuKCk6CisgICAgICAgIGlmIGUudGFnID09IG5hbWU6CisgICAgICAgICAgICByZXR1cm4gZQorICAgIHJldHVybiBOb25lCisKK2RlZiBjaGlsZHJlbiAoZWxlbSwgbmFtZT1Ob25lKToKKyAgICBsID0gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgaWYgbmFtZToKKyAgICAgICAgbCA9IFtlIGZvciBlIGluIGwgaWYgZS50YWcgPT0gbmFtZV0KKyAgICByZXR1cm4gbAorCit4bWwgPSBldHJlZS5wYXJzZShzeXMuYXJndlsxXSkKKworZm9yIHNjaGVtYSBpbiBjaGlsZCh4bWwuZ2V0cm9vdCgpLCAic2NoZW1hbGlzdCIpLmdldGNoaWxkcmVuKCk6CisgICAgZSA9IGNoaWxkKHNjaGVtYSwgInNob3J0IikKKyAgICBpZiBlIGlzIG5vdCBOb25lOgorICAgICAgICBzY2hlbWEucmVtb3ZlKGUpCisKKyAgICBlID0gY2hpbGQoc2NoZW1hLCAibG9uZyIpCisgICAgaWYgZSBpcyBub3QgTm9uZToKKyAgICAgICAgc2NoZW1hLnJlbW92ZShlKQorCisgICAgZm9yIGxvY2FsZSBpbiBjaGlsZHJlbihzY2hlbWEsICJsb2NhbGUiKToKKyAgICAgICAgIyBPbmUgbG9jYWxlIG11c3QgZXhpc3Qgc28gbGVhdmUgQyBsb2NhbGUuLi4KKyAgICAgICAgYSA9IGxvY2FsZS5hdHRyaWIuZ2V0KCJuYW1lIikKKyAgICAgICAgaWYgYSA9PSAnQyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlID0gY2hpbGQobG9jYWxlLCAiZGVmYXVsdCIpCisgICAgICAgIGlmIGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNjaGVtYS5yZW1vdmUobG9jYWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZSA9IGNoaWxkKGxvY2FsZSwgInNob3J0IikKKyAgICAgICAgICAgIGlmIGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9jYWxlLnJlbW92ZShlKQorICAgICAgICAgICAgZSA9IGNoaWxkKGxvY2FsZSwgImxvbmciKQorICAgICAgICAgICAgaWYgZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsb2NhbGUucmVtb3ZlKGUpCisKK3htbC53cml0ZShzeXMuc3Rkb3V0LCAiVVRGLTgiKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb2VweWRldnNoZWxsLWludGVybmFsLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mN2IyZTRlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weQpAQCAtMCwwICsxLDkyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGZjbnRsCitpbXBvcnQgdGVybWlvcworaW1wb3J0IHJlYWRsaW5lCitpbXBvcnQgc2lnbmFsCisKK2RlZiBub25ibG9ja2luZ2ZkKGZkKToKKyAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpIHwgb3MuT19OT05CTE9DSykKKworZGVmIGVjaG9ub2NicmVhayhmZCk6CisgICAgb2xkID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCisgICAgb2xkWzNdID0gb2xkWzNdIHwgdGVybWlvcy5FQ0hPIHwgdGVybWlvcy5JQ0FOT04KKyAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGVybWlvcy5UQ1NBRFJBSU4sIG9sZCkKKworZGVmIGNicmVha25vZWNobyhmZCk6CisgICAgb2xkID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCisgICAgb2xkWzNdID0gb2xkWzNdICZ+IHRlcm1pb3MuRUNITyAmfiB0ZXJtaW9zLklDQU5PTgorICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQorCitpZiBsZW4oc3lzLmFyZ3YpICE9IDM6CisgICAgcHJpbnQoIkluY29ycmVjdCBwYXJhbWV0ZXJzIikKKyAgICBzeXMuZXhpdCgxKQorCitwdHkgPSBvcGVuKHN5cy5hcmd2WzFdLCAidytiIiwgMCkKK3BhcmVudCA9IGludChzeXMuYXJndlsyXSkKKworIyBEb24ndCBidWZmZXIgb3V0cHV0IGJ5IGxpbmUgZW5kaW5ncworc3lzLnN0ZG91dCA9IG9zLmZkb3BlbihzeXMuc3Rkb3V0LmZpbGVubygpLCAndycsIDApCitzeXMuc3RkaW4gPSBvcy5mZG9wZW4oc3lzLnN0ZGluLmZpbGVubygpLCAncicsIDApCitub25ibG9ja2luZ2ZkKHB0eSkKK25vbmJsb2NraW5nZmQoc3lzLnN0ZGluKQorCisKK2hpc3RmaWxlID0gb3MucGF0aC5leHBhbmR1c2VyKCJ+Ly5vZWRldnB5c2hlbGwtaGlzdG9yeSIpCityZWFkbGluZS5wYXJzZV9hbmRfYmluZCgidGFiOiBjb21wbGV0ZSIpCit0cnk6CisgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCitleGNlcHQgSU9FcnJvcjoKKyAgICBwYXNzIAorCit0cnk6CisKKyAgICBpID0gIiIKKyAgICBvID0gIiIKKyAgICAjIE5lZWQgY2JyZWFrL25vZWNobyB3aGlsc3QgaW4gc2VsZWN0IHNvIHdlIHRyaWdnZXIgb24gYW55IGtleXByZXNzCisgICAgY2JyZWFrbm9lY2hvKHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAjIFNlbmQgb3VyIFBJRCB0byB0aGUgb3RoZXIgZW5kIHNvIHRoZXkgY2FuIGtpbGwgdXMuCisgICAgcHR5LndyaXRlKHN0cihvcy5nZXRwaWQoKSkgKyAiXG4iKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlcnMgPSBbXQorICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZChzeXMuc3Rkb3V0KQorICAgICAgICAgICAgKHJlYWR5LCBfLCBfKSA9IHNlbGVjdC5zZWxlY3QoW3B0eSwgc3lzLnN0ZGluXSwgd3JpdGVycyAsIFtdLCAwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHB0eSBpbiByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBwdHkucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICAgICAgIyBXcml0ZSBhIHBhZ2UgYXQgYSB0aW1lIHRvIGF2b2lkIG92ZXJmbG93aW5nIG91dHB1dCAKKyAgICAgICAgICAgICAgICAgICAgIyBkLmtleXMoKSBpcyBhIGdvb2Qgd2F5IHRvIGRvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShpWzo0MDk2XSkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGlbNDA5NjpdCisgICAgICAgICAgICAgICAgaWYgc3lzLnN0ZGluIGluIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICBlY2hvbm9jYnJlYWsoc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICAgICAgICAgICAgICBvID0gcmF3X2lucHV0KCkKKyAgICAgICAgICAgICAgICAgICAgY2JyZWFrbm9lY2hvKHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICAgICAgcHR5LndyaXRlKG8gKyAiXG4iKQorICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMTE6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSA1OgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgb3Mua2lsbChwYXJlbnQsIHNpZ25hbC5TSUdJTlQpCisKK2V4Y2VwdCBTeXN0ZW1FeGl0OgorICAgIHBhc3MKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiBvZXB5ZGVoc2hlbGwtaW50ZXJuYWw6ICIgKyBzdHIoZSkpCisgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgdGltZS5zbGVlcCg1KQorZmluYWxseToKKyAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvb3BrZy1xdWVyeS1oZWxwZXIucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvb3BrZy1xdWVyeS1oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZiMWE3OAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9vcGtnLXF1ZXJ5LWhlbHBlci5weQpAQCAtMCwwICsxLDg1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBPcGVuRW1iZWRkZWQgb3BrZyBxdWVyeSBoZWxwZXIgdXRpbGl0eQorIworIyBXcml0dGVuIGJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjCisKKworaW1wb3J0IHN5cworaW1wb3J0IGZpbGVpbnB1dAoraW1wb3J0IHJlCisKK2FyY2htb2RlID0gRmFsc2UKK2ZpbGVtb2RlID0gRmFsc2UKK3Zlcm1vZGUgPSBGYWxzZQorCithcmdzID0gW10KK2ZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdOgorICAgIGlmIGFyZyA9PSAnLWEnOgorICAgICAgICBhcmNobW9kZSA9IFRydWUKKyAgICBlbGlmIGFyZyA9PSAnLWYnOgorICAgICAgICBmaWxlbW9kZSA9IFRydWUKKyAgICBlbGlmIGFyZyA9PSAnLXYnOgorICAgICAgICB2ZXJtb2RlID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKworIyBSZWdleCBmb3IgcmVtb3ZpbmcgdmVyc2lvbiBzcGVjcyBhZnRlciBkZXBlbmRlbmN5IGl0ZW1zCit2ZXJyZWdleCA9IHJlLmNvbXBpbGUoJyBcKFs9PD5dKiBbXiApXSpcKScpCisKK3BrZyA9ICIiCit2ZXIgPSAiIgorZm9yIGxpbmUgaW4gZmlsZWlucHV0LmlucHV0KGFyZ3MpOgorICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgaWYgJzogJyBpbiBsaW5lOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBhY2thZ2U6Iik6CisgICAgICAgICAgICBwa2cgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICB2ZXIgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgYXJjaG1vZGU6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJBcmNoaXRlY3R1cmU6Iik6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyAlcyIgJSAocGtnLGFyY2gpKQorICAgICAgICAgICAgZWxpZiBmaWxlbW9kZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlZlcnNpb246Iik6CisgICAgICAgICAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiQXJjaGl0ZWN0dXJlOiIpOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMgJXNfJXNfJXMuaXBrICVzIiAlIChwa2cscGtnLHZlcixhcmNoLGFyY2gpKQorICAgICAgICAgICAgZWxpZiB2ZXJtb2RlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiVmVyc2lvbjoiKToKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJBcmNoaXRlY3R1cmU6Iik6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyAlcyAlcyIgJSAocGtnLGFyY2gsdmVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJEZXBlbmRzOiIpOgorICAgICAgICAgICAgICAgICAgICBkZXB2YWwgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIGRlcHMgPSBkZXB2YWwuc3BsaXQoIiwgIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gdmVycmVnZXguc3ViKCcnLCBkZXApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiJXN8JXMiICUgKHBrZyxkZXApKQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJSZWNvbW1lbmRzOiIpOgorICAgICAgICAgICAgICAgICAgICByZWN2YWwgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIHJlY3MgPSByZWN2YWwuc3BsaXQoIiwgIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYyBpbiByZWNzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjID0gdmVycmVnZXguc3ViKCcnLCByZWMpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiJXN8JXMgW1JFQ10iICUgKHBrZywgcmVjKSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvcG9zdGluc3RfaW50ZXJjZXB0IGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvcG9zdGluc3RfaW50ZXJjZXB0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxOGU4MDYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy9wb3N0aW5zdF9pbnRlcmNlcHQKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwb3N0aW5zdGFsbCBzY3JpcHRsZXRzIGF0IGRvX3Jvb3RmcyB0aW1lLiBJdAorIyBhY3R1YWxseSBhZGRzLCBhdCB0aGUgZW5kLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBmb3Igd2hpY2ggdGhlIGludGVyY2VwdCBzY3JpcHQKKyMgaXMgdmFsaWQuIEFsc28sIGlmIG9uZSB3YW50cyB0byBwYXNzIGFueSB2YXJpYWJsZXMgdG8gdGhlIGludGVyY2VwdCBzY3JpcHQgZnJvbQorIyB0aGUgcG9zdGluc3RhbGwgaXRzZWxmLCB0aGV5IHdpbGwgYmUgYWRkZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNoZWJhbmcgbGluZS4KKyMKKyMgVXNhZ2U6IHBvc3RpbnN0X2ludGVyY2VwdCA8aW50ZXJjZXB0X3NjcmlwdF9uYW1lPiA8cGFja2FnZV9uYW1lPiA8bWxwcmVmaXg9Li4uPiA8dmFyMT0uLi4+IC4uLiA8dmFyTj0uLi4+CisjICAqIGludGVyY2VwdF9zY3JpcHRfbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBpbnRlcmNlcHQgc2NyaXB0IHdlIHdhbnQgdG8gY2hhbmdlOworIyAgKiBwYWNrYWdlX25hbWUgLSBhZGQgdGhlIHBhY2thZ2VfbmFtZSB0byBsaXN0IG9mIHBhY2thZ2VzIHRoZSBpbnRlcmNlcHQgc2NyaXB0CisjICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgZm9yOworIyAgKiBtbHByZWZpeD0uLi4gLSB0aGlzIG9uZSBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gaGF2ZSBzZXBhcmF0ZSBob29rcyBmb3IgbXVsdGlsaWIuCisjICAqIHZhcjE9Li4uIC0gdmFyMSB3aWxsIGhhdmUgdGhlIHZhbHVlIHdlIHByb3ZpZGUgaW4gdGhlIGludGVyY2VwdCBzY3JpcHQuIFRoaXMKKyMgICAgICAgICAgICAgICBpcyB1c2VmdWwgd2hlbiB3ZSB3YW50IHRvIHBhc3Mgb24gdmFyaWFibGVzIGxpa2UgJHtsaWJkaXJ9IHRvCisjICAgICAgICAgICAgICAgdGhlIGludGVyY2VwdCBzY3JpcHQ7CisjCitbICQjIC1sdCAzIF0gJiYgZXhpdCAxCisKK2ludGVyY2VwdF9zY3JpcHQ9JElOVEVSQ0VQVF9ESVIvJDEgJiYgc2hpZnQKK3BhY2thZ2VfbmFtZT0kMSAmJiBzaGlmdAorbWxwcmVmaXg9JChlY2hvICQxIHxzZWQgLW5lICJzL15tbHByZWZpeD1cKC4qXCktL1wxL3AiKSAmJiBzaGlmdAorCisjIGlmIHRoZSBob29rIHdlIHdhbnQgdG8gaW5zdGFsbCBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvCitbIC1mICIkaW50ZXJjZXB0X3NjcmlwdCIgXSB8fCBleGl0IDEKKworIyBpZiB0aGUgcG9zdGluc3RhbGwgd2FudGluZyB0byBpbnN0YWxsIHRoZSBob29rIGJlbG9uZ3MgdG8gYSBtdWx0aWxpYiBwYWNrYWdlLAorIyB0aGVuIHdlJ2QgYmV0dGVyIGhhdmUgYSBzZXBhcmF0ZSBob29rIGZvciB0aGlzIGJlY2F1c2UgdGhlIGRlZmF1bHQgJHtsaWJkaXJ9IGFuZAorIyAke2Jhc2VfbGliZGlyfSB3aWxsIHBvaW50IHRvIHRoZSB3cm9uZyBsb2NhdGlvbnMKK2lmIFsgLW4gIiRtbHByZWZpeCIgXTsgdGhlbgorCW1sX2ludGVyY2VwdF9zY3JpcHQ9JGludGVyY2VwdF9zY3JpcHQtJG1scHJlZml4CisJIyBpZiB0aGUgbXVsdGlsaWIgaG9vayBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGl0IGZyb20gdGhlIGRlZmF1bHQgb25lCisJaWYgWyAhIC1mICIkbWxfaW50ZXJjZXB0X3NjcmlwdCIgXTsgdGhlbgorCQljcCAkaW50ZXJjZXB0X3NjcmlwdCAkbWxfaW50ZXJjZXB0X3NjcmlwdAorCisJCSMgY2xlYXIgdGhlICMjUEtHUzogbGluZSBhbmQgdGhlIGFscmVhZHkgc2V0IHZhcmlhYmxlcworCQlbIC14ICIkbWxfaW50ZXJjZXB0X3NjcmlwdCIgXSAmJiBzZWQgLWkgLWUgIjIsJCgoJCMrMSkpIHsvLiovZH0iIC1lICIvXiMjUEtHUzogLiovZCIgJG1sX2ludGVyY2VwdF9zY3JpcHQKKwlmaQorCisJaW50ZXJjZXB0X3NjcmlwdD0kbWxfaW50ZXJjZXB0X3NjcmlwdAorZmkKKworY2htb2QgK3ggIiRpbnRlcmNlcHRfc2NyaXB0IgorCitwa2dzX2xpbmU9JChncmVwICIjI1BLR1M6IiAkaW50ZXJjZXB0X3NjcmlwdCkKK2lmIFsgLW4gIiRwa2dzX2xpbmUiIF07IHRoZW4KKwkjIGxpbmUgZXhpc3RzLCBhZGQgdGhpcyBwYWNrYWdlIHRvIHRoZSBsaXN0IG9ubHkgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZQorCWlmIFsgLXogIiQoZWNobyAiJHBrZ3NfbGluZSIgfCBncmVwICIgJHBhY2thZ2VfbmFtZSAiKSIgXTsgdGhlbgorCQlzZWQgLWkgLWUgInMvIyNQS0dTOi4qL1wwJHtwYWNrYWdlX25hbWV9IC8iICRpbnRlcmNlcHRfc2NyaXB0CisJZmkKK2Vsc2UKKwlmb3IgdmFyIGluICIkQCI7IGRvCisJCXNlZCAtaSAtZSAiXCVeI1whL2Jpbi8uKnNoJWEgJHZhciIgJGludGVyY2VwdF9zY3JpcHQKKwlkb25lCisJZWNobyAiIyNQS0dTOiAke3BhY2thZ2VfbmFtZX0gIiA+PiAkaW50ZXJjZXB0X3NjcmlwdAorZmkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ZvbnRfY2FjaGUgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfZm9udF9jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGM2MDE4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ZvbnRfY2FjaGUKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworUFNFVURPX1VOTE9BRD0xIHFlbXV3cmFwcGVyIC1MICREIC1FIExEX0xJQlJBUllfUEFUSD0kRC8ke2xpYmRpcn06JEQvJHtiYXNlX2xpYmRpcn1cCisJCQkJCSREJHtiaW5kaXJ9L2ZjLWNhY2hlIC0tc3lzcm9vdD0kRAorY2hvd24gLVIgcm9vdDpyb290ICREJHtmb250Y29uZmlnY2FjaGVkaXJ9CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfaWNvbl9jYWNoZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9pY29uX2NhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTdhNmEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfaWNvbl9jYWNoZQpAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKworc2V0IC1lCisjIHVwZGF0ZSBuYXRpdmUgcGl4YnVmIGxvYWRlcnMKK2dkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZQorCitmb3IgaWNvbmRpciBpbiAkRC91c3Ivc2hhcmUvaWNvbnMvKi8gOyBkbworICAgIGlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKyAgICAgICAgZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIC1mcXQgICRpY29uZGlyCisgICAgZmkKK2RvbmUKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX3BpeGJ1Zl9jYWNoZSBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViZjRmOQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBHREtfUElYQlVGX01PRFVMRURJUj0kRCR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycworZXhwb3J0IEdES19QSVhCVUZfRkFUQUxfTE9BREVSPTEKKworUFNFVURPX1VOTE9BRD0xIHFlbXV3cmFwcGVyIC1MICREIC1FIExEX0xJQlJBUllfUEFUSD0kRC8ke2xpYmRpcn06JEQvJHtiYXNlX2xpYmRpcn1cCisgICAgJEQke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKKyAgICA+JEdES19QSVhCVUZfTU9EVUxFRElSLy4uL2xvYWRlcnMuY2FjaGUgJiYgXAorICAgIHNlZCAtaSAtZSAiczokRDo6ZyIgJEdES19QSVhCVUZfTU9EVUxFRElSLy4uL2xvYWRlcnMuY2FjaGUKKworCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvQVVUSE9SUyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MmI3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvQVVUSE9SUwpAQCAtMCwwICsxLDExIEBACitNaWNoYWVsIE1lZWtzIDxtaWNoYWVsLm1lZWtzQG5vdmVsbC5jb20+CitBbmRlcnMgTm9yZ2FhcmQgPGFuZGVycy5ub3JnYWFyZEBnbWFpbC5jb20+CitTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEB1YnVudHUuY29tPgorSGVubmluZyBOaXNzIDxoZW5uaW5nbmlzc0BnbWFpbC5jb20+CitSaWNjYXJkbyBNYWdsaW9jY2hldHRpIDxyaWNjYXJkby5tYWdsaW9jY2hldHRpQGdtYWlsLmNvbT4KKworQ29udHJpYnV0b3JzOgorCUJyaWFuIEV3aW5zCisKK0Jhc2VkIG9uIHdvcmsgYnk6CisJWmlnYSBNYWhrb3ZlYwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0NPUFlJTkcgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3YWNmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBIAorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9NQUlOVEFJTkVSUyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9NQUlOVEFJTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVlMTMxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL01BSU5UQUlORVJTCkBAIC0wLDAgKzEsMyBAQAorUmljY2FyZG8gTWFnbGlvY2NoZXR0aSA8cmljY2FyZG8ubWFnbGlvY2NoZXR0aUBnbWFpbC5jb20+CitNaWNoYWVsIE1lZWtzIDxtaWNoYWVsLm1lZWtzQG5vdmVsbC5jb20+CitIYXJhbGQgSG95ZXIgPGhhcmFsZEByZWRoYXQuY29tPgpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL05FV1MgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvTkVXUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzViMmZjCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL05FV1MKQEAgLTAsMCArMSwyMDQgQEAKK2Jvb3RjaGFydDIgMC4xNC41OgorCSsgcHlib290Y2hhcnRndWkgKFJpY2NhcmRvKQorCQkrIEZpeCB0ZXN0cyB3aXRoIHB5dGhvbjMKKwkJKyBGaXggcGFyc2luZyBvZiBmaWxlcyB3aXRoIG5vbi1hc2NpaSBieXRlcworCQkrIFJvYnVzdG5lc3MgZml4ZXMgdG8gdGFza3N0YXRzIGFuZCBtZW1pbmZvIHBhcnNpbmcKKwkJKyBNb3JlIHB5dGhvbjMgZml4ZXMKKworYm9vdGNoYXJ0MiAwLjE0LjQ6CisJKyBib290Y2hhcnRkCisJCSsgQWRkIHJlbGV2YW50IEVYSVRfUFJPQyBmb3IgR05PTUUzLCBYRkNFNCwgb3BlbmJveAorCQkgIChKdXN0aW4gTGVjaGVyLCBCZW4gRWlsbHMpCisJKyBweWJvb3RjaGFydGd1aSAoUmljY2FyZG8pCisJCSsgRml4IHNvbWUgaXNzdWVzIGluIC0tY3JvcC1hZnRlciBhbmQgLS1hbm5vdGF0ZQorCQkrIEZpeCBweWJvb3RjaGFydGd1aSBwcm9jZXNzX3RyZWUgdGVzdHMKKwkJKyBNb3JlIHB5dGhvbjMgZml4ZXMKKworYm9vdGNoYXJ0MiAwLjE0LjI6CisJKyBweWJvb3RjaGFydGd1aQorCQkrIEZpeCBzb21lIGNyYXNoZXMgaW4gcGFyc2luZy5weSAoSmFrdWIgQ3phcGxpY2tpLCBSaWNjYXJkbykKKwkJKyBzcGVlZHVwIGEgYml0IG1lbWluZm8gcGFyc2luZyAoUmljY2FyZG8pCisJCSsgRml4IGluZGVudGF0aW9uIGZvciBweXRob24zLjIgKFJpY2NhcmRvKQorCitib290Y2hhcnQyIDAuMTQuMToKKwkrIGJvb3RjaGFydGQKKwkJKyBFeHBlY3QgZG1lc2cgb25seSBpZiBzdGFydGVkIGFzIGluaXQgKEhlbnJ5IFllaSkKKwkJKyBsb29rIGZvciBib290Y2hhcnRfaW5pdCBpbiB0aGUgZW52aXJvbm1lbnQgKEhlbnJ5IEdlYmhhcmR0KQorCSsgcHlib290Y2hhcnRndWkKKwkJKyBGaXh1cCBzb21lIHRlc3RzIChSaWNjYXJkbykKKwkJKyBTdXBwb3J0IGhwIHNtYXJ0IGFycmF5cyBibG9jayBkZXZpY2VzIChBbmRlcnMgTm9yZ2FhcmQsCisJCSAgQnJpYW4gTXVycmF5KQorCQkrIEZpeGVzIGZvciAtdCwgLW8gYW5kIC1mIG9wdGlvbnMgKE1sYWRlbiBLdW50bmVyLCBIYXJhbGQsIFJpY2NhcmRvKQorCitib290Y2hhcnQyIDAuMTQuMDoKKwkrIGJvb3RjaGFydGQKKwkJKyBBZGQgYWJpbGl0eSB0byBkZWZpbmUgY3VzdG9tIGNvbW1hbmRzCisJCSAgKEx1Y2lhbiBNdXJlc2FuLCBQZXRlciBIamFsbWFyc3NvbikKKwkrIGNvbGxlY3RvcgorCQkrIGZpeCB0bXBmcyBtb3VudCBsZWFrYWdlIChQZXRlciBIamFsbWFyc3NvbikKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgcmVuZGVyIGN1bXVsYXRpdmUgSS9PIHRpbWUgY2hhcnQgKFNhbmthciBQKQorCQkrIHB5dGhvbjMgY29tcGF0aWJpbGl0eSBmaXhlcyAoUmljY2FyZG8pCisJKyBNaXNjIChNaWNoYWVsKQorCQkrIHJlbW92ZSBjb25mdXNpbmcsIG9ic29sZXRlIHNldHVwLnB5CisJCSsgaW5zdGFsbCBkb2NzIHRvIC91c3Ivc2hhcmUvCisJCSsgbG90IG9mIGZpeGVzIGZvciBlYXNpZXIgcGFja2FnaW5nIChQZXRlciBIamFsbWFyc3NvbikKKwkJKyBhZGQgYm9vdGNoYXJ0MiwgYm9vdGNoYXJ0ZCBhbmQgcHlib290Y2hhcnRndWkgbWFucGFnZXMKKwkJICAoRnJhbmNlc2NhIENpY2VyaSwgRGF2aWQgUGFsZWlubykKKworYm9vdGNoYXJ0MiAwLjEyLjY6CisJKyBib290Y2hhcnRkCisJCSsgYmV0dGVyIGNoZWNrIGZvciBpbml0cmQgKFJpY2NhcmRvIE1hZ2xpb2NjaGV0dGkpCisJCSsgY29kZSBjbGVhbnVwIChSaWNjYXJkbykKKwkJKyBtYWtlIHRoZSBsaXN0IG9mIHByb2Nlc3NlcyB3ZSBhcmUgd2FpdGluZyBmb3IgZWRpdGFibGUKKwkJICBpbiBjb25maWcgZmlsZSBieSBFWElUX1BST0MgKFJpY2NhcmRvKQorCQkrIGZpeCBwYXJzaW5nIG9mIGNtZGxpbmUgZm9yIGFsdGVybmF0aXZlIGluaXQgc3lzdGVtIChSaWNjYXJkbykKKwkJKyBmaXhlZCBjYWxsaW5nIGluaXQgaW4gaW5pdHJhbWZzIChIYXJhbGQpCisJCSsgZXhpdCAwIGZvciBzdGFydCwgaWYgdGhlIGNvbGxlY3RvciBpcyBhbHJlYWR5IHJ1bm5pbmcgKEhhcmFsZCkKKwkrIGNvbGxlY3RvcgorCQkrIHRyeSBoYXJkZXIgd2l0aCB0YXNrc3RhdHMgKE1pY2hhZWwpCisJCSsgcGx1ZyBzb21lIHNtYWxsIGxlYWtzIChSaWNjYXJkbykKKwkJKyBmaXggbWlzc2luZyBQUk9DX0VWRU5UUyBkZXRlY3Rpb24gKEhhcmFsZCkKKwkrIHB5Ym9vdGNoYXJ0Z3VpIChNaWNoYWVsKQorCQkrIGFkZCBrZXJuZWwgYm9vdGNoYXJ0IHRhYiB0byBpbnRlcmFjdGl2ZSBndWkKKwkJKyByZXBvcnQgYm9vdGNoYXJ0IHZlcnNpb24gaW4gY2xpIGludGVyZmFjZQorCQkrIGltcHJvdmUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlCisJCSsgR1VJIGltcHJvdmVtZW50cworCQkrIGxvdCBvZiBjbGVhbnVwcworCSsgTWFrZWZpbGUKKwkJKyBkbyBub3QgcHl0aG9uIGNvbXBpbGUgaWYgTk9fUFlUSE9OX0NPTVBJTEUgaXMgc2V0IChIYXJhbGQpCisJKyBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMKKwkJKyBhZGRlZCB0aGVtIGFuZCBpbnN0YWxsIChIYXJhbGQsIFd1bGYgQy4gS3J1ZWdlcikKKworYm9vdGNoYXJ0MiAwLjEyLjU6CisJKyBhZG1pbmlzdHJhdGl2ZSBzbmFmdSB2ZXJzaW9uOyBwdWxsIGJlZm9yZSBwdXNoaW5nLi4uCisKK2Jvb3RjaGFydDIgMC4xMi40OgorCSsgYm9vdGNoYXJ0ZAorCQkrIHJlZHVjZSBvdmVyaGVhZCBjYXVzZWQgYnkgcGlkb2YgKFJpY2NhcmRvIE1hZ2xpb2NjaGV0dGkpCisJKyBjb2xsZWN0b3IKKwkJKyBhdHRlbXB0IHRvIHJldHJ5IHB0cmFjZSB0byBhdm9pZCBib2d1cyBFTk9TWVMgKE1pY2hhZWwpCisJCSsgYWRkIG1lbWluZm8gcG9sbGluZyAoRGF2ZSBNYXJ0aW4pCisJKyBweWJvb3RjaGFydGd1aQorCQkrIGhhbmRsZSBkbWVzZyB0aW1lc3RhbXBzIHdpdGggYmlnIGRlbHRhIChSaWNjYXJkbykKKwkJKyBhdm9pZCBkaXZpZGUgYnkgemVybyB3aGVuIHJlbmRlcmluZyBJL08gdXRpbGl6YXRpb24gKFJpY2NhcmRvKQorCQkrIGFkZCBwcm9jZXNzIGdyb3VwaW5nIGluIHRoZSBjdW11bGF0aXZlIGNoYXJ0IChSaWNjYXJkbykKKwkJKyBmaXggY3B1IHRpbWUgY2FsY3VsYXRpb24gaW4gY3VtdWxhdGl2ZSBjaGFydCAoUmljY2FyZG8pCisJCSsgZ2V0IGkvbyBzdGF0aXN0aWNzIGZvciBmbGFzaCBiYXNlZCBkZXZpY2VzIChSaWNjYXJkbykKKwkJKyBwcmV0dGllciBjb2xvcmluZyBmb3IgdGhlIGN1bXVsYXRpdmUgZ3JhcGhzIChNaWNoYWVsKQorCQkrIGZpeCBpbnRlcmFjdGl2ZSBDUFUgcmVuZGVyaW5nIChNaWNoYWVsKQorCQkrIHJlbmRlciBtZW1vcnkgdXNhZ2UgZ3JhcGggKERhdmUgTWFydGluKQorCitib290Y2hhcnQyIDAuMTIuMworCSsgY29sbGVjdG9yCisJCSsgcGNsb3NlIGFmdGVyIHBvcGVuIChSaWNjYXJkbyBNYWdsaW9jY2hldHRpICh4cm14KSkKKwkJKyBmaXggYnVmZmVyIG92ZXJmbG93ICh4cm14KQorCQkrIGNvdW50ICdwcm9jZXNzb3I6JyBpbiAvcHJvYy9jcHVpbmZvIGZvciBBUk0gKE1pY2hhZWwpCisJCSsgZ2V0IG1vZGVsIG5hbWUgZnJvbSB0aGF0IGxpbmUgdG9vIGZvciBBUk0gKHhybXgpCisJCSsgc3RvcmUgL3Byb2MvY3B1aW5mbyBpbiB0aGUgYm9vdC1jaGFydCBhcmNoaXZlICh4cm14KQorCQkrIHRyeSBoYXJkZXIgdG8gZGV0ZWN0IG1pc3NpbmcgVEFTS1NUQVRTIChNaWNoYWVsKQorCQkrIHNhbml0eS1jaGVjayBpbnZhbGlkIGRvbWFpbiBuYW1lcyAoTWljaGFlbCkKKwkJKyBkZXRlY3QgbWlzc2luZyBQUk9DX0VWRU5UUyBtb3JlIHJlbGlhYmx5IChNaWNoYWVsKQorCQkrIFJFQURNRSBmaXhlcyAoeHJteCwgTWljaGFlbCkKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgbWFrZSBudW1fY3B1IHBhcnNpbmcgcm9idXN0IChNaWNoYWVsKQorCitib290Y2hhcnQyIDAuMTIuMgorIAkrIGZpeCBwdGhyZWFkIGNvbXBpbGUgLyBsaW5raW5nIGJ1ZworCitib290Y2hhcnQyIDAuMTIuMQorCSsgcHlib290Y2hhcnRndWkKKwkJKyBweWxpbnQgY2xlYW51cAorCQkrIGhhbmRsZSBlbXB0eSB0cmFjZXMgbW9yZSBlbGVnYW50bHkKKwkJKyBhZGQgJy10JyAvICctLWJvb3QtdGltZScgYXJndW1lbnQgKE1hdHRoZXcgQmF1ZXIpCisJKyBjb2xsZWN0b3IKKwkJKyBub3cgR1BMdjIKKwkJKyBhZGQgcmRpbml0IHN1cHBvcnQgZm9yIHZlcnkgZWFybHkgaW5pdHJkIHRyYWNpbmcKKwkJKyBjbGVhbnVwIC8gcmUtZmFjdG9yIGNvZGUgaW50byBzZXBhcmF0ZSBtb2R1bGVzCisJCSsgcmUtZmFjdG9yIGFyZyBwYXJzaW5nLCBhbmQgcGFyc2UgcmVtb3RlIHByb2Nlc3MgYXJncworCQkrIGhhbmRsZSBtaXNzaW5nIGJvb3RjaGFydGQuY29uZiBjbGVhbmx5CisJCSsgbW92ZSBtdWNoIG9mIGJvb3RjaGFydGQgZnJvbSBzaGVsbCAtPiBDCisJCQkrIGRyb3AgZG1lc2cgYW5kIHVuYW1lIHVzYWdlCisJCQkrIGF2b2lkIHJwbS9kcGtnIHdpdGggbmF0aXZlIHZlcnNpb24gcmVwb3J0aW5nCisKK2Jvb3RjaGFydDIgMC4xMi4wIChNaWNoYWVsIE1lZWtzKQorCSsgY29sbGVjdG9yCisJCSsgdXNlIG5ldGxpbmsgUFJPQ19FVkVOVFMgdG8gZ2VuZXJhdGUgcGFyZW50YWdlIGRhdGEKKwkJCSsgZmluYWxseSBraWxscyBhbnkgbmVlZCBmb3IgJ2FjY3QnIGV0LiBhbC4KKwkJCSsgYWxzbyByZW1vdmVzIG5lZWQgdG8gcG9sbCAvcHJvYyA9PiBmYXN0ZXIKKwkJKyBjbGVhbnVwIGNvZGUgdG8gSyZSLCA4IHN0b3AgdGFicy4KKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgY29uc3VtZSB0aHJlYWQgcGFyZW50YWdlIGRhdGEKKworYm9vdGNoYXJ0MiAwLjExLjQgKE1pY2hhZWwgTWVla3MpCisJKyBjb2xsZWN0b3IKKwkJKyBpZiBydW4gaW5zaWRlIGFuIGluaXRyZCBkZXRlY3Qgd2hlbiAvZGV2IGlzIHdyaXRhYmxlCisJCSAgYW5kIHJlbW91bnQgb3Vyc2VsdmVzIGludG8gdGhhdC4KKwkJKyBvdmVyZmxvdyBidWZmZXJzIG1vcmUgZWxlZ2FudGx5IGluIGV4dHJlbWlzCisJCSsgZHVtcCBmdWxsIHByb2Nlc3MgcGF0aCBhbmQgY29tbWFuZC1saW5lIGFyZ3MKKwkJKyBjYWxtIGRvd24gZGVidWdnaW5nIG91dHB1dAorCSsgcHlib290Y2hhcnRndWkKKwkJKyBjYW4gcmVuZGVyIGxvZ3MgaW4gYSBkaXJlY3RvcnkgYWdhaW4KKwkJKyBoYXMgYSAnc2hvdyBtb3JlJyBvcHRpb24gdG8gc2hvdyBjb21tYW5kLWxpbmVzCisKK2Jvb3RjaGFydDIgMC4xMS4zIChNaWNoYWVsIE1lZWtzKQorCSsgYWRkICQkIGRpc3BsYXkgdG8gdGhlIGJvb3RjaGFydCBoZWFkZXIKKwkrIHByb2Nlc3MgY29tbWFuZC1saW5lIGJpdHMKKwkJKyBmaXggY29sbGVjdGlvbiBjb2RlLCBhbmQgcmVuYW1lIHN0cmVhbSB0byBtYXRjaAorCQkrIGVuYWJsZSBwYXJzaW5nLCBhZGQgY2hlY2sgYnV0dG9uIHRvIFVJLCBhbmQgLS1zaG93LWFsbAorCQkgIGNvbW1hbmQtbGluZSBvcHRpb24KKwkrIGZpeCBwYXJzaW5nIG9mIGRpcmVjdG9yaWVzIGZ1bGwgb2YgZmlsZXMuCisKK2Jvb3RjaGFydDIgMC4xMS4yIChNaWNoYWVsIE1lZWtzKQorCSsgZml4IGluaXRyZCBzYW5pdHkgY2hlY2sgdG8gdXNlIHRoZSByaWdodCBwcm9jIHBhdGgKKwkrIGRvbid0IHJldHVybiBhIGJvZ3VzIGVycm9yIHZhbHVlIHdoZW4gZHVtcGluZyBzdGF0ZQorCSsgYWRkIC1jIHRvIGFpZCBtYW51YWwgY29uc29sZSBkZWJ1Z2dpbmcKKworYm9vdGNoYXJ0MiAwLjExLjEgKE1pY2hhZWwgTWVla3MpCisJKyBldmVuIHNpbXBsZXIgaW5pdHJkIHNldHVwCisJCSsgY3JlYXRlIGEgc2luZ2xlIGRpcmVjdG9yeTogL2xpYi9ib290Y2hhcnQvdG1wZnMKKworYm9vdGNoYXJ0MiAwLjExIChNaWNoYWVsIE1lZWtzKQorCSsgYm9vdGNoYXJ0ZAorCQkrIGZhciwgZmFyIHNpbXBsZXIsIGxlc3Mgc2hlbGwsIG1vcmUgcm9idXN0bmVzcyBldGMuCisJKyBib290Y2hhcnQtY29sbGVjdG9yCisJCSsgcmVtb3ZlIHRoZSAtcCBhcmd1bWVudCAtIHdlIGFsd2F5cyBtb3VudCBwcm9jCisJCSsgcmVxdWlyZXMgL2xpYi9ib290Y2hhcnQgKG1ha2UgaW5zdGFsbC1jaHJvb3QpIHRvCisJCSAgYmUgcHJlc2VudCAoYWxzbyBpbiB0aGUgaW5pdHJkKSBbIHdpdGggYSBrbXNnCisJCSAgbm9kZSBpbmNsdWRlZCBdCisJCSsgYWRkIGEgLS1wcm9iZS1ydW5uaW5nIG1vZGUKKwkrIHB0cmFjZSByZS13cml0ZQorCQkrIGdpdmVzIC1tdWNoLSBiZXR0ZXIgZWFybHktYm9vdC10aW1lIHJlc29sdXRpb24KKwkJKyB1bmNvbmRpdGlvbmFsIGNocm9vdCAvbGliL2Jvb3RjaGFydC9jaHJvb3QKKwkJCSsgd2UgbW91bnQgcHJvYyB0aGVyZSBvdXJzZWx2ZXMKKwkJKyBsb2cgZXh0cmFjdGlvbiByZXF1aXJlcyBubyBjb21tb24gZmlsZS1zeXN0ZW0gdmlldworCisKK2Jvb3RjaGFydDIgMC4xMC4xIChLZWwgTW9kZGVybWFuKQorCSsgY29sbGVjdG9yIGFyZyAtbSBzaG91bGQgbW91bnQgL3Byb2MKKwkrIHJlbW92ZSBib2d1cyB2Y3NpZCBjb2RlCisJKyBzcGxpdCBjb2xsZWN0b3IgaW5zdGFsbCBpbiBNYWtlZmlsZQorCSsgcmVtb3ZlIGJvZ3VzIGRlYnVnIGNvZGUKKwkrIGFjY2VwdCBwcm9jZXNzIG5hbWVzIGNvbnRhaW5pbmcgc3BhY2VzCisKK2Jvb3RjaGFydDIgMC4xMC4wCisJKyByZW5kZXJpbmcgKEFuZGVycyBOb3JnYWFyZCkKKwkJKyBmaXggZm9yIHVua25vd24gZXhjZXB0aW9ucworCSsgaW50ZXJhY3RpdmUgVUkgKE1pY2hhZWwpCisJCSsgbXVjaCBmYXN0ZXIgcmVuZGVyaW5nIGJ5IG1hbnVhbCBjbGlwcGluZworCQkrIGhvcml6b250YWwgc2NhbGluZworCQkrIHJlbW92ZSBhbm5veWluZyBwYWdlLXVwL2Rvd24gYmluZGluZ3MKKwkrIGluaXRyZCBwb3J0YWJpbGl0eSAmIGZpeGVzIChGZWRlcmljIENyb3phdCkKKwkJKyBwb3J0IHRvIE1hbmRyaXZhCisJCSsgaW1wcm92ZWQgcHJvY2VzcyB3YWl0aW5nCisJCSsgaW5pdHRhYiBjb21tZW50aW5nIGZpeAorCQkrIGltcHJvdmVkIGluaXRyZCBkZXRlY3Rpb24gLyBqYWlsIHRhZ2dpbmcKKwkJKyBmaXggZm9yIHVuLWRldGVjdGFibGUgYWNjdG9uIGJlaGF2aW91ciBjaGFuZ2UKKwkJKyBpbXBsZW1lbnQgYSBidWlsdC1pbiB1c2xlZXAgdG8gaGVscCBpbml0cmQgZGVwcyAoTWljaGFlbCkKKworYm9vdGNoYXJ0MiAwLjAuOQorCSsgZml4IGluaXRyZCBidWcKKworYm9vdGNoYXJ0MiAwLjAuOAorCSsgYWRkIGEgZmlsZW5hbWUgc3RyaW5nIHRvIHRoZSB3aW5kb3cgdGl0bGUgaW4gaW50ZXJhY3RpdmUgbW9kZQorCSsgYWRkIGEgTkVXUyBmaWxlCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvUkVBRE1FLnB5Ym9vdGNoYXJ0IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL1JFQURNRS5weWJvb3RjaGFydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjQyZTY0Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL1JFQURNRS5weWJvb3RjaGFydApAQCAtMCwwICsxLDM3IEBACisJCQkgICAgUFlCT09UQ0hBUlRHVUkKKwkJCSAgIC0tLS0tLS0tLS0tLS0tLS0KKworcHlib290Y2hhcnRndWkgaXMgYSB0b29sIChub3cgaW5jbHVkZWQgYXMgcGFydCBvZiBib290Y2hhcnQyKSBmb3IKK3Zpc3VhbGl6YXRpb24gYW5kIGFuYWx5c2lzIG9mIHRoZSBHTlUvTGludXggYm9vdCBwcm9jZXNzLiBJdCByZW5kZXJzCit0aGUgb3V0cHV0IG9mIHRoZSBib290LWxvZ2dlciB0b29sIGJvb3RjaGFydCAoc2VlCitodHRwOi8vd3d3LmJvb3RjaGFydC5vcmcvKSB0byBlaXRoZXIgdGhlIHNjcmVlbiBvciBmaWxlcyBvZiB2YXJpb3VzCitmb3JtYXRzLiBCb290Y2hhcnQgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2Nlc3NlcywgdGhlaXIKK2RlcGVuZGVuY2llcywgYW5kIHJlc291cmNlIGNvbnN1bXB0aW9uIGR1cmluZyBib290IG9mIGEgR05VL0xpbnV4CitzeXN0ZW0uIFRoZSBweWJvb3RjaGFydGd1aSB0b29scyB2aXN1YWxpemVzIHRoZSBwcm9jZXNzIHRyZWUgYW5kCitvdmVyYWxsIHJlc291cmNlIHV0aWxpemF0aW9uLgorCitweWJvb3RjaGFydGd1aSBpcyBhIHBvcnQgb2YgdGhlIHZpc3VhbGl6YXRpb24gcGFydCBvZiBib290Y2hhcnQgZnJvbQorSmF2YSB0byBQeXRob24gYW5kIENhaXJvLgorCitBZGFwdGVkIGZyb20gdGhlIGJvb3RjaGFydC1kb2N1bWVudGF0aW9uOgorCisgIFRoZSBDUFUgYW5kIGRpc2sgc3RhdGlzdGljcyBhcmUgdXNlZCB0byByZW5kZXIgc3RhY2tlZCBhcmVhIGFuZCBsaW5lCisgIGNoYXJ0cy4gVGhlIHByb2Nlc3MgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBHYW50dCBjaGFydAorICBzaG93aW5nIHByb2Nlc3MgZGVwZW5kZW5jeSwgc3RhdGVzIGFuZCBDUFUgdXNhZ2UuCisKKyAgQSB0eXBpY2FsIGJvb3Qgc2VxdWVuY2UgY29uc2lzdHMgb2Ygc2V2ZXJhbCBodW5kcmVkIHByb2Nlc3Nlcy4gU2luY2UKKyAgaXQgaXMgZGlmZmljdWx0IHRvIHZpc3VhbGl6ZSBzdWNoIGFtb3VudCBvZiBkYXRhIGluIGEgY29tcHJlaGVuc2libGUKKyAgd2F5LCB0cmVlIHBydW5pbmcgaXMgdXRpbGl6ZWQuIElkbGUgYmFja2dyb3VuZCBwcm9jZXNzZXMgYW5kCisgIHNob3J0LWxpdmVkIHByb2Nlc3NlcyBhcmUgcmVtb3ZlZC4gU2ltaWxhciBwcm9jZXNzZXMgcnVubmluZyBpbgorICBwYXJhbGxlbCBhcmUgYWxzbyBtZXJnZWQgdG9nZXRoZXIuCisKKyAgRmluYWxseSwgdGhlIHBlcmZvcm1hbmNlIGFuZCBkZXBlbmRlbmN5IGNoYXJ0cyBhcmUgcmVuZGVyZWQgYXMgYQorICBzaW5nbGUgaW1hZ2UgdG8gZWl0aGVyIHRoZSBzY3JlZW4gb3IgaW4gUE5HLCBQREYgb3IgU1ZHIGZvcm1hdC4KKworCitUbyBnZXQgaGVscCBmb3IgcHlib290Y2hhcnRndWksIHJ1bgorCiskIHB5Ym9vdGNoYXJ0Z3VpIC0taGVscAorCitUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgaG9zdGVkIGF0OgorCWh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weWJvb3RjaGFydGd1aS8KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Y2UxYTViCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpLnB5CkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK2ltcG9ydCBzeXMKK2Zyb20gcHlib290Y2hhcnRndWkubWFpbiBpbXBvcnQgbWFpbgorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCXN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9fX2luaXRfXy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvYmF0Y2gucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvYmF0Y2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjNzE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9iYXRjaC5weQpAQCAtMCwwICsxLDQ2IEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2ltcG9ydCBjYWlybworZnJvbSAuIGltcG9ydCBkcmF3Citmcm9tIC5kcmF3IGltcG9ydCBSZW5kZXJPcHRpb25zCisKK2RlZiByZW5kZXIod3JpdGVyLCB0cmFjZSwgYXBwX29wdGlvbnMsIGZpbGVuYW1lKToKKyAgICBoYW5kbGVycyA9IHsKKyAgICAgICAgInBuZyI6IChsYW1iZGEgdywgaDogY2Fpcm8uSW1hZ2VTdXJmYWNlKGNhaXJvLkZPUk1BVF9BUkdCMzIsIHcsIGgpLCBcCisgICAgICAgICAgICAgICAgbGFtYmRhIHNmYzogc2ZjLndyaXRlX3RvX3BuZyhmaWxlbmFtZSkpLAorICAgICAgICAicGRmIjogKGxhbWJkYSB3LCBoOiBjYWlyby5QREZTdXJmYWNlKGZpbGVuYW1lLCB3LCBoKSwgbGFtYmRhIHNmYzogMCksCisgICAgICAgICJzdmciOiAobGFtYmRhIHcsIGg6IGNhaXJvLlNWR1N1cmZhY2UoZmlsZW5hbWUsIHcsIGgpLCBsYW1iZGEgc2ZjOiAwKQorICAgIH0KKworICAgIGlmIGFwcF9vcHRpb25zLmZvcm1hdCBpcyBOb25lOgorICAgICAgICBmbXQgPSBmaWxlbmFtZS5yc3BsaXQoJy4nLCAxKVsxXQorICAgIGVsc2U6CisgICAgICAgIGZtdCA9IGFwcF9vcHRpb25zLmZvcm1hdAorCisgICAgaWYgbm90IChmbXQgaW4gaGFuZGxlcnMpOgorICAgICAgICB3cml0ZXIuZXJyb3IgKCJVbmtub3duIGZvcm1hdCAnJXMnLiIgJSBmbXQpCisgICAgICAgIHJldHVybiAxMAorCisgICAgbWFrZV9zdXJmYWNlLCB3cml0ZV9zdXJmYWNlID0gaGFuZGxlcnNbZm10XQorICAgIG9wdGlvbnMgPSBSZW5kZXJPcHRpb25zIChhcHBfb3B0aW9ucykKKyAgICAodywgaCkgPSBkcmF3LmV4dGVudHMgKG9wdGlvbnMsIDEuMCwgdHJhY2UpCisgICAgdyA9IG1heCAodywgZHJhdy5NSU5fSU1HX1cpCisgICAgc3VyZmFjZSA9IG1ha2Vfc3VyZmFjZSAodywgaCkKKyAgICBjdHggPSBjYWlyby5Db250ZXh0IChzdXJmYWNlKQorICAgIGRyYXcucmVuZGVyIChjdHgsIG9wdGlvbnMsIDEuMCwgdHJhY2UpCisgICAgd3JpdGVfc3VyZmFjZSAoc3VyZmFjZSkKKyAgICB3cml0ZXIuc3RhdHVzICgiYm9vdGNoYXJ0IHdyaXR0ZW4gdG8gJyVzJyIgJSBmaWxlbmFtZSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2RyYXcucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvZHJhdy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzU3NGJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2RyYXcucHkKQEAgLTAsMCArMSw4OTQgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCitpbXBvcnQgY2Fpcm8KK2ltcG9ydCBtYXRoCitpbXBvcnQgcmUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBjb2xvcnN5cworZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgorCitjbGFzcyBSZW5kZXJPcHRpb25zOgorCisJZGVmIF9faW5pdF9fKHNlbGYsIGFwcF9vcHRpb25zKToKKwkJIyBzaG91bGQgd2UgcmVuZGVyIGEgY3VtdWxhdGl2ZSBDUFUgdGltZSBjaGFydAorCQlzZWxmLmN1bXVsYXRpdmUgPSBUcnVlCisJCXNlbGYuY2hhcnRzID0gVHJ1ZQorCQlzZWxmLmtlcm5lbF9vbmx5ID0gRmFsc2UKKwkJc2VsZi5hcHBfb3B0aW9ucyA9IGFwcF9vcHRpb25zCisKKwlkZWYgcHJvY190cmVlIChzZWxmLCB0cmFjZSk6CisJCWlmIHNlbGYua2VybmVsX29ubHk6CisJCQlyZXR1cm4gdHJhY2Uua2VybmVsX3RyZWUKKwkJZWxzZToKKwkJCXJldHVybiB0cmFjZS5wcm9jX3RyZWUKKworIyBQcm9jZXNzIHRyZWUgYmFja2dyb3VuZCBjb2xvci4KK0JBQ0tfQ09MT1IgPSAoMS4wLCAxLjAsIDEuMCwgMS4wKQorCitXSElURSA9ICgxLjAsIDEuMCwgMS4wLCAxLjApCisjIFByb2Nlc3MgdHJlZSBib3JkZXIgY29sb3IuCitCT1JERVJfQ09MT1IgPSAoMC42MywgMC42MywgMC42MywgMS4wKQorIyBTZWNvbmQgdGljayBsaW5lIGNvbG9yLgorVElDS19DT0xPUiA9ICgwLjkyLCAwLjkyLCAwLjkyLCAxLjApCisjIDUtc2Vjb25kIHRpY2sgbGluZSBjb2xvci4KK1RJQ0tfQ09MT1JfQk9MRCA9ICgwLjg2LCAwLjg2LCAwLjg2LCAxLjApCisjIEFubm90YXRpb24gY29sb3VyCitBTk5PVEFUSU9OX0NPTE9SID0gKDAuNjMsIDAuMCwgMC4wLCAwLjUpCisjIFRleHQgY29sb3IuCitURVhUX0NPTE9SID0gKDAuMCwgMC4wLCAwLjAsIDEuMCkKKworIyBGb250IGZhbWlseQorRk9OVF9OQU1FID0gIkJpdHN0cmVhbSBWZXJhIFNhbnMiCisjIFRpdGxlIHRleHQgZm9udC4KK1RJVExFX0ZPTlRfU0laRSA9IDE4CisjIERlZmF1bHQgdGV4dCBmb250LgorVEVYVF9GT05UX1NJWkUgPSAxMgorIyBBeGlzIGxhYmVsIGZvbnQuCitBWElTX0ZPTlRfU0laRSA9IDExCisjIExlZ2VuZCBmb250LgorTEVHRU5EX0ZPTlRfU0laRSA9IDEyCisKKyMgQ1BVIGxvYWQgY2hhcnQgY29sb3IuCitDUFVfQ09MT1IgPSAoMC40MCwgMC41NSwgMC43MCwgMS4wKQorIyBJTyB3YWl0IGNoYXJ0IGNvbG9yLgorSU9fQ09MT1IgPSAoMC43NiwgMC40OCwgMC40OCwgMC41KQorIyBEaXNrIHRocm91Z2hwdXQgY29sb3IuCitESVNLX1RQVVRfQ09MT1IgPSAoMC4yMCwgMC43MSwgMC4yMCwgMS4wKQorIyBDUFUgbG9hZCBjaGFydCBjb2xvci4KK0ZJTEVfT1BFTl9DT0xPUiA9ICgwLjIwLCAwLjcxLCAwLjcxLCAxLjApCisjIE1lbSBjYWNoZWQgY29sb3IKK01FTV9DQUNIRURfQ09MT1IgPSBDUFVfQ09MT1IKKyMgTWVtIHVzZWQgY29sb3IKK01FTV9VU0VEX0NPTE9SID0gSU9fQ09MT1IKKyMgQnVmZmVycyBjb2xvcgorTUVNX0JVRkZFUlNfQ09MT1IgPSAoMC40LCAwLjQsIDAuNCwgMC4zKQorIyBTd2FwIGNvbG9yCitNRU1fU1dBUF9DT0xPUiA9IERJU0tfVFBVVF9DT0xPUgorCisjIFByb2Nlc3MgYm9yZGVyIGNvbG9yLgorUFJPQ19CT1JERVJfQ09MT1IgPSAoMC43MSwgMC43MSwgMC43MSwgMS4wKQorIyBXYWl0aW5nIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX0QgPSAoMC43NiwgMC40OCwgMC40OCwgMC41KQorIyBSdW5uaW5nIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX1IgPSBDUFVfQ09MT1IKKyMgU2xlZXBpbmcgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfUyA9ICgwLjk0LCAwLjk0LCAwLjk0LCAxLjApCisjIFN0b3BwZWQgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfVCA9ICgwLjk0LCAwLjUwLCAwLjUwLCAxLjApCisjIFpvbWJpZSBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9aID0gKDAuNzEsIDAuNzEsIDAuNzEsIDEuMCkKKyMgRGVhZCBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9YID0gKDAuNzEsIDAuNzEsIDAuNzEsIDAuMTI1KQorIyBQYWdpbmcgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfVyA9ICgwLjcxLCAwLjcxLCAwLjcxLCAwLjEyNSkKKworIyBQcm9jZXNzIGxhYmVsIGNvbG9yLgorUFJPQ19URVhUX0NPTE9SID0gKDAuMTksIDAuMTksIDAuMTksIDEuMCkKKyMgUHJvY2VzcyBsYWJlbCBmb250LgorUFJPQ19URVhUX0ZPTlRfU0laRSA9IDEyCisKKyMgU2lnbmF0dXJlIGNvbG9yLgorU0lHX0NPTE9SID0gKDAuMCwgMC4wLCAwLjAsIDAuMzEyNSkKKyMgU2lnbmF0dXJlIGZvbnQuCitTSUdfRk9OVF9TSVpFID0gMTQKKyMgU2lnbmF0dXJlIHRleHQuCitTSUdOQVRVUkUgPSAiaHR0cDovL2dpdGh1Yi5jb20vbW1lZWtzL2Jvb3RjaGFydCIKKworIyBQcm9jZXNzIGRlcGVuZGVuY3kgbGluZSBjb2xvci4KK0RFUF9DT0xPUiA9ICgwLjc1LCAwLjc1LCAwLjc1LCAxLjApCisjIFByb2Nlc3MgZGVwZW5kZW5jeSBsaW5lIHN0cm9rZS4KK0RFUF9TVFJPS0UgPSAxLjAKKworIyBQcm9jZXNzIGRlc2NyaXB0aW9uIGRhdGUgZm9ybWF0LgorREVTQ19USU1FX0ZPUk1BVCA9ICJtbTpzcy5TU1MiCisKKyMgQ3VtdWxhdGl2ZSBjb2xvcmluZyBiaXRzCitIU1ZfTUFYX01PRCA9IDMxCitIU1ZfU1RFUCA9IDcKKworIyBDb25maWd1cmUgdGFzayBjb2xvcgorVEFTS19DT0xPUl9DT05GSUdVUkUgPSAoMS4wLCAxLjAsIDAuMDAsIDEuMCkKKyMgQ29tcGlsZSB0YXNrIGNvbG9yLgorVEFTS19DT0xPUl9DT01QSUxFID0gKDAuMCwgMS4wMCwgMC4wMCwgMS4wKQorIyBJbnN0YWxsIHRhc2sgY29sb3IKK1RBU0tfQ09MT1JfSU5TVEFMTCA9ICgxLjAsIDAuMDAsIDEuMDAsIDEuMCkKKyMgU3lzcm9vdCB0YXNrIGNvbG9yCitUQVNLX0NPTE9SX1NZU1JPT1QgPSAoMC4wLCAwLjAwLCAxLjAwLCAxLjApCisjIFBhY2thZ2UgdGFzayBjb2xvcgorVEFTS19DT0xPUl9QQUNLQUdFID0gKDAuMCwgMS4wMCwgMS4wMCwgMS4wKQorIyBQYWNrYWdlIFdyaXRlIFJQTS9ERUIvSVBLIHRhc2sgY29sb3IKK1RBU0tfQ09MT1JfUEFDS0FHRV9XUklURSA9ICgwLjAsIDAuNTAsIDAuNTAsIDEuMCkKKworIyBQcm9jZXNzIHN0YXRlcworU1RBVEVfVU5ERUZJTkVEID0gMAorU1RBVEVfUlVOTklORyAgID0gMQorU1RBVEVfU0xFRVBJTkcgID0gMgorU1RBVEVfV0FJVElORyAgID0gMworU1RBVEVfU1RPUFBFRCAgID0gNAorU1RBVEVfWk9NQklFICAgID0gNQorCitTVEFURV9DT0xPUlMgPSBbKDAsIDAsIDAsIDApLCBQUk9DX0NPTE9SX1IsIFBST0NfQ09MT1JfUywgUFJPQ19DT0xPUl9ELCBcCisJCVBST0NfQ09MT1JfVCwgUFJPQ19DT0xPUl9aLCBQUk9DX0NPTE9SX1gsIFBST0NfQ09MT1JfV10KKworIyBDdW11bGF0aXZlU3RhdHMgVHlwZXMKK1NUQVRfVFlQRV9DUFUgPSAwCitTVEFUX1RZUEVfSU8gPSAxCisKKyMgQ29udmVydCBwcyBwcm9jZXNzIHN0YXRlIHRvIGFuIGludAorZGVmIGdldF9wcm9jX3N0YXRlKGZsYWcpOgorCXJldHVybiAiUlNEVFpYVyIuZmluZChmbGFnKSArIDEKKworZGVmIGRyYXdfdGV4dChjdHgsIHRleHQsIGNvbG9yLCB4LCB5KToKKwljdHguc2V0X3NvdXJjZV9yZ2JhKCpjb2xvcikKKwljdHgubW92ZV90byh4LCB5KQorCWN0eC5zaG93X3RleHQodGV4dCkKKworZGVmIGRyYXdfZmlsbF9yZWN0KGN0eCwgY29sb3IsIHJlY3QpOgorCWN0eC5zZXRfc291cmNlX3JnYmEoKmNvbG9yKQorCWN0eC5yZWN0YW5nbGUoKnJlY3QpCisJY3R4LmZpbGwoKQorCitkZWYgZHJhd19yZWN0KGN0eCwgY29sb3IsIHJlY3QpOgorCWN0eC5zZXRfc291cmNlX3JnYmEoKmNvbG9yKQorCWN0eC5yZWN0YW5nbGUoKnJlY3QpCisJY3R4LnN0cm9rZSgpCisKK2RlZiBkcmF3X2xlZ2VuZF9ib3goY3R4LCBsYWJlbCwgZmlsbF9jb2xvciwgeCwgeSwgcyk6CisJZHJhd19maWxsX3JlY3QoY3R4LCBmaWxsX2NvbG9yLCAoeCwgeSAtIHMsIHMsIHMpKQorCWRyYXdfcmVjdChjdHgsIFBST0NfQk9SREVSX0NPTE9SLCAoeCwgeSAtIHMsIHMsIHMpKQorCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBURVhUX0NPTE9SLCB4ICsgcyArIDUsIHkpCisKK2RlZiBkcmF3X2xlZ2VuZF9saW5lKGN0eCwgbGFiZWwsIGZpbGxfY29sb3IsIHgsIHksIHMpOgorCWRyYXdfZmlsbF9yZWN0KGN0eCwgZmlsbF9jb2xvciwgKHgsIHkgLSBzLzIsIHMgKyAxLCAzKSkKKwljdHguYXJjKHggKyAocyArIDEpLzIuMCwgeSAtIChzIC0gMykvMi4wLCAyLjUsIDAsIDIuMCAqIG1hdGgucGkpCisJY3R4LmZpbGwoKQorCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBURVhUX0NPTE9SLCB4ICsgcyArIDUsIHkpCisKK2RlZiBkcmF3X2xhYmVsX2luX2JveChjdHgsIGNvbG9yLCBsYWJlbCwgeCwgeSwgdywgbWF4eCk6CisJbGFiZWxfdyA9IGN0eC50ZXh0X2V4dGVudHMobGFiZWwpWzJdCisJbGFiZWxfeCA9IHggKyB3IC8gMiAtIGxhYmVsX3cgLyAyCisJaWYgbGFiZWxfdyArIDEwID4gdzoKKwkJbGFiZWxfeCA9IHggKyB3ICsgNQorCWlmIGxhYmVsX3ggKyBsYWJlbF93ID4gbWF4eDoKKwkJbGFiZWxfeCA9IHggLSBsYWJlbF93IC0gNQorCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBjb2xvciwgbGFiZWxfeCwgeSkKKworZGVmIGRyYXdfc2VjX2xhYmVscyhjdHgsIG9wdGlvbnMsIHJlY3QsIHNlY193LCBuc2Vjcyk6CisJY3R4LnNldF9mb250X3NpemUoQVhJU19GT05UX1NJWkUpCisJcHJldl94ID0gMAorCWZvciBpIGluIHJhbmdlKDAsIHJlY3RbMl0gKyAxLCBzZWNfdyk6CisJCWlmICgoaSAvIHNlY193KSAlIG5zZWNzID09IDApIDoKKwkJCWlmIG9wdGlvbnMuYXBwX29wdGlvbnMuYXNfbWludXRlcyA6CisJCQkJbGFiZWwgPSAiJS4xZiIgJSAoaSAvIHNlY193IC8gNjAuMCkKKwkJCWVsc2UgOgorCQkJCWxhYmVsID0gIiVkIiAlIChpIC8gc2VjX3cpCisJCQlsYWJlbF93ID0gY3R4LnRleHRfZXh0ZW50cyhsYWJlbClbMl0KKwkJCXggPSByZWN0WzBdICsgaSAtIGxhYmVsX3cvMgorCQkJaWYgeCA+PSBwcmV2X3g6CisJCQkJZHJhd190ZXh0KGN0eCwgbGFiZWwsIFRFWFRfQ09MT1IsIHgsIHJlY3RbMV0gLSAyKQorCQkJCXByZXZfeCA9IHggKyBsYWJlbF93CisKK2RlZiBkcmF3X2JveF90aWNrcyhjdHgsIHJlY3QsIHNlY193KToKKwlkcmF3X3JlY3QoY3R4LCBCT1JERVJfQ09MT1IsIHR1cGxlKHJlY3QpKQorCisJY3R4LnNldF9saW5lX2NhcChjYWlyby5MSU5FX0NBUF9TUVVBUkUpCisKKwlmb3IgaSBpbiByYW5nZShzZWNfdywgcmVjdFsyXSArIDEsIHNlY193KToKKwkJaWYgKChpIC8gc2VjX3cpICUgMTAgPT0gMCkgOgorCQkJY3R4LnNldF9saW5lX3dpZHRoKDEuNSkKKwkJZWxpZiBzZWNfdyA8IDUgOgorCQkJY29udGludWUKKwkJZWxzZSA6CisJCQljdHguc2V0X2xpbmVfd2lkdGgoMS4wKQorCQlpZiAoKGkgLyBzZWNfdykgJSAzMCA9PSAwKSA6CisJCQljdHguc2V0X3NvdXJjZV9yZ2JhKCpUSUNLX0NPTE9SX0JPTEQpCisJCWVsc2UgOgorCQkJY3R4LnNldF9zb3VyY2VfcmdiYSgqVElDS19DT0xPUikKKwkJY3R4Lm1vdmVfdG8ocmVjdFswXSArIGksIHJlY3RbMV0gKyAxKQorCQljdHgubGluZV90byhyZWN0WzBdICsgaSwgcmVjdFsxXSArIHJlY3RbM10gLSAxKQorCQljdHguc3Ryb2tlKCkKKwljdHguc2V0X2xpbmVfd2lkdGgoMS4wKQorCisJY3R4LnNldF9saW5lX2NhcChjYWlyby5MSU5FX0NBUF9CVVRUKQorCitkZWYgZHJhd19hbm5vdGF0aW9ucyhjdHgsIHByb2NfdHJlZSwgdGltZXMsIHJlY3QpOgorICAgIGN0eC5zZXRfbGluZV9jYXAoY2Fpcm8uTElORV9DQVBfU1FVQVJFKQorICAgIGN0eC5zZXRfc291cmNlX3JnYmEoKkFOTk9UQVRJT05fQ09MT1IpCisgICAgY3R4LnNldF9kYXNoKFs0LCA0XSkKKworICAgIGZvciB0aW1lIGluIHRpbWVzOgorICAgICAgICBpZiB0aW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeCA9ICgodGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIHJlY3RbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pCisKKyAgICAgICAgICAgIGN0eC5tb3ZlX3RvKHJlY3RbMF0gKyB4LCByZWN0WzFdICsgMSkKKyAgICAgICAgICAgIGN0eC5saW5lX3RvKHJlY3RbMF0gKyB4LCByZWN0WzFdICsgcmVjdFszXSAtIDEpCisgICAgICAgICAgICBjdHguc3Ryb2tlKCkKKworICAgIGN0eC5zZXRfbGluZV9jYXAoY2Fpcm8uTElORV9DQVBfQlVUVCkKKyAgICBjdHguc2V0X2Rhc2goW10pCisKK2RlZiBkcmF3X2NoYXJ0KGN0eCwgY29sb3IsIGZpbGwsIGNoYXJ0X2JvdW5kcywgZGF0YSwgcHJvY190cmVlLCBkYXRhX3JhbmdlKToKKwljdHguc2V0X2xpbmVfd2lkdGgoMC41KQorCXhfc2hpZnQgPSBwcm9jX3RyZWUuc3RhcnRfdGltZQorCisJZGVmIHRyYW5zZm9ybV9wb2ludF9jb29yZHMocG9pbnQsIHhfYmFzZSwgeV9iYXNlLCBcCisJCQkJICAgeHNjYWxlLCB5c2NhbGUsIHhfdHJhbnMsIHlfdHJhbnMpOgorCQl4ID0gKHBvaW50WzBdIC0geF9iYXNlKSAqIHhzY2FsZSArIHhfdHJhbnMKKwkJeSA9IChwb2ludFsxXSAtIHlfYmFzZSkgKiAteXNjYWxlICsgeV90cmFucyArIGNoYXJ0X2JvdW5kc1szXQorCQlyZXR1cm4geCwgeQorCisJbWF4X3ggPSBtYXggKHggZm9yICh4LCB5KSBpbiBkYXRhKQorCW1heF95ID0gbWF4ICh5IGZvciAoeCwgeSkgaW4gZGF0YSkKKwkjIGF2b2lkIGRpdmlkZSBieSB6ZXJvCisJaWYgbWF4X3kgPT0gMDoKKwkJbWF4X3kgPSAxLjAKKwl4c2NhbGUgPSBmbG9hdCAoY2hhcnRfYm91bmRzWzJdKSAvIG1heF94CisJIyBJZiBkYXRhX3JhbmdlIGlzIGdpdmVuLCBzY2FsZSB0aGUgY2hhcnQgc28gdGhhdCB0aGUgdmFsdWUgcmFuZ2UgaW4KKwkjIGRhdGFfcmFuZ2UgbWF0Y2hlcyB0aGUgY2hhcnQgYm91bmRzIGV4YWN0bHkuCisJIyBPdGhlcndpc2UsIHNjYWxlIHNvIHRoYXQgdGhlIGFjdHVhbCBkYXRhIG1hdGNoZXMgdGhlIGNoYXJ0IGJvdW5kcy4KKwlpZiBkYXRhX3JhbmdlOgorCQl5c2NhbGUgPSBmbG9hdChjaGFydF9ib3VuZHNbM10pIC8gKGRhdGFfcmFuZ2VbMV0gLSBkYXRhX3JhbmdlWzBdKQorCQl5YmFzZSA9IGRhdGFfcmFuZ2VbMF0KKwllbHNlOgorCQl5c2NhbGUgPSBmbG9hdChjaGFydF9ib3VuZHNbM10pIC8gbWF4X3kKKwkJeWJhc2UgPSAwCisKKwlmaXJzdCA9IHRyYW5zZm9ybV9wb2ludF9jb29yZHMgKGRhdGFbMF0sIHhfc2hpZnQsIHliYXNlLCB4c2NhbGUsIHlzY2FsZSwgXAorCQkJCSAgICAgICAgY2hhcnRfYm91bmRzWzBdLCBjaGFydF9ib3VuZHNbMV0pCisJbGFzdCA9ICB0cmFuc2Zvcm1fcG9pbnRfY29vcmRzIChkYXRhWy0xXSwgeF9zaGlmdCwgeWJhc2UsIHhzY2FsZSwgeXNjYWxlLCBcCisJCQkJICAgICAgICBjaGFydF9ib3VuZHNbMF0sIGNoYXJ0X2JvdW5kc1sxXSkKKworCWN0eC5zZXRfc291cmNlX3JnYmEoKmNvbG9yKQorCWN0eC5tb3ZlX3RvKCpmaXJzdCkKKwlmb3IgcG9pbnQgaW4gZGF0YToKKwkJeCwgeSA9IHRyYW5zZm9ybV9wb2ludF9jb29yZHMgKHBvaW50LCB4X3NoaWZ0LCB5YmFzZSwgeHNjYWxlLCB5c2NhbGUsIFwKKwkJCQkJICAgICAgIGNoYXJ0X2JvdW5kc1swXSwgY2hhcnRfYm91bmRzWzFdKQorCQljdHgubGluZV90byh4LCB5KQorCWlmIGZpbGw6CisJCWN0eC5zdHJva2VfcHJlc2VydmUoKQorCQljdHgubGluZV90byhsYXN0WzBdLCBjaGFydF9ib3VuZHNbMV0rY2hhcnRfYm91bmRzWzNdKQorCQljdHgubGluZV90byhmaXJzdFswXSwgY2hhcnRfYm91bmRzWzFdK2NoYXJ0X2JvdW5kc1szXSkKKwkJY3R4LmxpbmVfdG8oZmlyc3RbMF0sIGZpcnN0WzFdKQorCQljdHguZmlsbCgpCisJZWxzZToKKwkJY3R4LnN0cm9rZSgpCisJY3R4LnNldF9saW5lX3dpZHRoKDEuMCkKKworYmFyX2ggPSA1NQorbWVtaW5mb19iYXJfaCA9IDIgKiBiYXJfaAoraGVhZGVyX2ggPSA2MAorIyBvZmZzZXRzCitvZmZfeCwgb2ZmX3kgPSAyMjAsIDEwCitzZWNfd19iYXNlID0gMSAjIHRoZSB3aWR0aCBvZiBhIHNlY29uZAorcHJvY19oID0gMTYgIyB0aGUgaGVpZ2h0IG9mIGEgcHJvY2VzcworbGVnX3MgPSAxMAorTUlOX0lNR19XID0gODAwCitDVU1MX0hFSUdIVCA9IDIwMDAgIyBJbmNyZWFzZWQgdmFsdWUgdG8gYWNjb21vZGF0ZSBDUFUgYW5kIEkvTyBHcmFwaHMKK09QVElPTlMgPSBOb25lCisKK2RlZiBleHRlbnRzKG9wdGlvbnMsIHhzY2FsZSwgdHJhY2UpOgorCXN0YXJ0ID0gbWluKHRyYWNlLnN0YXJ0LmtleXMoKSkKKwllbmQgPSBzdGFydAorCisgICAgICAgIHByb2Nlc3NlcyA9IDAKKyAgICAgICAgZm9yIHByb2MgaW4gdHJhY2UucHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcHRpb25zLmFwcF9vcHRpb25zLnNob3dfYWxsIGFuZCBcCisgICAgICAgICAgICAgICAgICAgdHJhY2UucHJvY2Vzc2VzW3Byb2NdWzFdIC0gdHJhY2UucHJvY2Vzc2VzW3Byb2NdWzBdIDwgb3B0aW9ucy5hcHBfb3B0aW9ucy5taW50aW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHRyYWNlLnByb2Nlc3Nlc1twcm9jXVsxXSA+IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHRyYWNlLnByb2Nlc3Nlc1twcm9jXVsxXQorICAgICAgICAgICAgICAgIHByb2Nlc3NlcyArPSAxCisKKwlpZiB0cmFjZS5taW4gaXMgbm90IE5vbmUgYW5kIHRyYWNlLm1heCBpcyBub3QgTm9uZToKKwkJc3RhcnQgPSB0cmFjZS5taW4KKwkJZW5kID0gdHJhY2UubWF4CisKKwl3ID0gaW50ICgoZW5kIC0gc3RhcnQpICogc2VjX3dfYmFzZSAqIHhzY2FsZSkgKyAyICogb2ZmX3gKKwloID0gcHJvY19oICogcHJvY2Vzc2VzICsgaGVhZGVyX2ggKyAyICogb2ZmX3kKKworCXJldHVybiAodywgaCkKKworZGVmIGNsaXBfdmlzaWJsZShjbGlwLCByZWN0KToKKwl4bWF4ID0gbWF4IChjbGlwWzBdLCByZWN0WzBdKQorCXltYXggPSBtYXggKGNsaXBbMV0sIHJlY3RbMV0pCisJeG1pbiA9IG1pbiAoY2xpcFswXSArIGNsaXBbMl0sIHJlY3RbMF0gKyByZWN0WzJdKQorCXltaW4gPSBtaW4gKGNsaXBbMV0gKyBjbGlwWzNdLCByZWN0WzFdICsgcmVjdFszXSkKKwlyZXR1cm4gKHhtaW4gPiB4bWF4IGFuZCB5bWluID4geW1heCkKKworZGVmIHJlbmRlcl9jaGFydHMoY3R4LCBvcHRpb25zLCBjbGlwLCB0cmFjZSwgY3Vycl95LCB3LCBoLCBzZWNfdyk6CisJcHJvY190cmVlID0gb3B0aW9ucy5wcm9jX3RyZWUodHJhY2UpCisKKwkjIHJlbmRlciBiYXIgbGVnZW5kCisJY3R4LnNldF9mb250X3NpemUoTEVHRU5EX0ZPTlRfU0laRSkKKworCWRyYXdfbGVnZW5kX2JveChjdHgsICJDUFUgKHVzZXIrc3lzKSIsIENQVV9DT0xPUiwgb2ZmX3gsIGN1cnJfeSsyMCwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94KGN0eCwgIkkvTyAod2FpdCkiLCBJT19DT0xPUiwgb2ZmX3ggKyAxMjAsIGN1cnJfeSsyMCwgbGVnX3MpCisKKwkjIHJlbmRlciBJL08gd2FpdAorCWNoYXJ0X3JlY3QgPSAob2ZmX3gsIGN1cnJfeSszMCwgdywgYmFyX2gpCisJaWYgY2xpcF92aXNpYmxlIChjbGlwLCBjaGFydF9yZWN0KToKKwkJZHJhd19ib3hfdGlja3MgKGN0eCwgY2hhcnRfcmVjdCwgc2VjX3cpCisJCWRyYXdfYW5ub3RhdGlvbnMgKGN0eCwgcHJvY190cmVlLCB0cmFjZS50aW1lcywgY2hhcnRfcmVjdCkKKwkJZHJhd19jaGFydCAoY3R4LCBJT19DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51c2VyICsgc2FtcGxlLnN5cyArIHNhbXBsZS5pbykgZm9yIHNhbXBsZSBpbiB0cmFjZS5jcHVfc3RhdHNdLCBcCisJCQkgICAgcHJvY190cmVlLCBOb25lKQorCQkjIHJlbmRlciBDUFUgbG9hZAorCQlkcmF3X2NoYXJ0IChjdHgsIENQVV9DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51c2VyICsgc2FtcGxlLnN5cykgZm9yIHNhbXBsZSBpbiB0cmFjZS5jcHVfc3RhdHNdLCBcCisJCQkgICAgcHJvY190cmVlLCBOb25lKQorCisJY3Vycl95ID0gY3Vycl95ICsgMzAgKyBiYXJfaAorCisJIyByZW5kZXIgc2Vjb25kIGNoYXJ0CisJZHJhd19sZWdlbmRfbGluZShjdHgsICJEaXNrIHRocm91Z2hwdXQiLCBESVNLX1RQVVRfQ09MT1IsIG9mZl94LCBjdXJyX3krMjAsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveChjdHgsICJEaXNrIHV0aWxpemF0aW9uIiwgSU9fQ09MT1IsIG9mZl94ICsgMTIwLCBjdXJyX3krMjAsIGxlZ19zKQorCisgICAgICAgICMgcmVuZGVyIEkvTyB1dGlsaXphdGlvbgorCWNoYXJ0X3JlY3QgPSAob2ZmX3gsIGN1cnJfeSszMCwgdywgYmFyX2gpCisJaWYgY2xpcF92aXNpYmxlIChjbGlwLCBjaGFydF9yZWN0KToKKwkJZHJhd19ib3hfdGlja3MgKGN0eCwgY2hhcnRfcmVjdCwgc2VjX3cpCisJCWRyYXdfYW5ub3RhdGlvbnMgKGN0eCwgcHJvY190cmVlLCB0cmFjZS50aW1lcywgY2hhcnRfcmVjdCkKKwkJZHJhd19jaGFydCAoY3R4LCBJT19DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51dGlsKSBmb3Igc2FtcGxlIGluIHRyYWNlLmRpc2tfc3RhdHNdLCBcCisJCQkgICAgcHJvY190cmVlLCBOb25lKQorCisJIyByZW5kZXIgZGlzayB0aHJvdWdocHV0CisJbWF4X3NhbXBsZSA9IG1heCAodHJhY2UuZGlza19zdGF0cywga2V5ID0gbGFtYmRhIHM6IHMudHB1dCkKKwlpZiBjbGlwX3Zpc2libGUgKGNsaXAsIGNoYXJ0X3JlY3QpOgorCQlkcmF3X2NoYXJ0IChjdHgsIERJU0tfVFBVVF9DT0xPUiwgRmFsc2UsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUudHB1dCkgZm9yIHNhbXBsZSBpbiB0cmFjZS5kaXNrX3N0YXRzXSwgXAorCQkJICAgIHByb2NfdHJlZSwgTm9uZSkKKworCXBvc194ID0gb2ZmX3ggKyAoKG1heF9zYW1wbGUudGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIHcgLyBwcm9jX3RyZWUuZHVyYXRpb24pCisKKwlzaGlmdF94LCBzaGlmdF95ID0gLTIwLCAyMAorCWlmIChwb3NfeCA8IG9mZl94ICsgMjQ1KToKKwkJc2hpZnRfeCwgc2hpZnRfeSA9IDUsIDQwCisKKwlsYWJlbCA9ICIlZE1CL3MiICUgcm91bmQgKChtYXhfc2FtcGxlLnRwdXQpIC8gMTAyNC4wKQorCWRyYXdfdGV4dCAoY3R4LCBsYWJlbCwgRElTS19UUFVUX0NPTE9SLCBwb3NfeCArIHNoaWZ0X3gsIGN1cnJfeSArIHNoaWZ0X3kpCisKKwljdXJyX3kgPSBjdXJyX3kgKyAzMCArIGJhcl9oCisKKwkjIHJlbmRlciBtZW0gdXNhZ2UKKwljaGFydF9yZWN0ID0gKG9mZl94LCBjdXJyX3krMzAsIHcsIG1lbWluZm9fYmFyX2gpCisJbWVtX3N0YXRzID0gdHJhY2UubWVtX3N0YXRzCisJaWYgbWVtX3N0YXRzIGFuZCBjbGlwX3Zpc2libGUgKGNsaXAsIGNoYXJ0X3JlY3QpOgorCQltZW1fc2NhbGUgPSBtYXgoc2FtcGxlLnJlY29yZHNbJ01lbVRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snTWVtRnJlZSddIGZvciBzYW1wbGUgaW4gbWVtX3N0YXRzKQorCQlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiTWVtIGNhY2hlZCAoc2NhbGU6ICV1IE1pQikiICUgKGZsb2F0KG1lbV9zY2FsZSkgLyAxMDI0KSwgTUVNX0NBQ0hFRF9DT0xPUiwgb2ZmX3gsIGN1cnJfeSsyMCwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2JveChjdHgsICJVc2VkIiwgTUVNX1VTRURfQ09MT1IsIG9mZl94ICsgMjQwLCBjdXJyX3krMjAsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiQnVmZmVycyIsIE1FTV9CVUZGRVJTX0NPTE9SLCBvZmZfeCArIDM2MCwgY3Vycl95KzIwLCBsZWdfcykKKwkJZHJhd19sZWdlbmRfbGluZShjdHgsICJTd2FwIChzY2FsZTogJXUgTWlCKSIgJSBtYXgoWyhzYW1wbGUucmVjb3Jkc1snU3dhcFRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snU3dhcEZyZWUnXSkvMTAyNCBmb3Igc2FtcGxlIGluIG1lbV9zdGF0c10pLCBcCisJCQkJIE1FTV9TV0FQX0NPTE9SLCBvZmZfeCArIDQ4MCwgY3Vycl95KzIwLCBsZWdfcykKKwkJZHJhd19ib3hfdGlja3MoY3R4LCBjaGFydF9yZWN0LCBzZWNfdykKKwkJZHJhd19hbm5vdGF0aW9ucyhjdHgsIHByb2NfdHJlZSwgdHJhY2UudGltZXMsIGNoYXJ0X3JlY3QpCisJCWRyYXdfY2hhcnQoY3R4LCBNRU1fQlVGRkVSU19DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnJlY29yZHNbJ01lbVRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snTWVtRnJlZSddKSBmb3Igc2FtcGxlIGluIHRyYWNlLm1lbV9zdGF0c10sIFwKKwkJCSAgIHByb2NfdHJlZSwgWzAsIG1lbV9zY2FsZV0pCisJCWRyYXdfY2hhcnQoY3R4LCBNRU1fVVNFRF9DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnJlY29yZHNbJ01lbVRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snTWVtRnJlZSddIC0gc2FtcGxlLnJlY29yZHNbJ0J1ZmZlcnMnXSkgZm9yIHNhbXBsZSBpbiBtZW1fc3RhdHNdLCBcCisJCQkgICBwcm9jX3RyZWUsIFswLCBtZW1fc2NhbGVdKQorCQlkcmF3X2NoYXJ0KGN0eCwgTUVNX0NBQ0hFRF9DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnJlY29yZHNbJ0NhY2hlZCddKSBmb3Igc2FtcGxlIGluIG1lbV9zdGF0c10sIFwKKwkJCSAgIHByb2NfdHJlZSwgWzAsIG1lbV9zY2FsZV0pCisJCWRyYXdfY2hhcnQoY3R4LCBNRU1fU1dBUF9DT0xPUiwgRmFsc2UsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgIFsoc2FtcGxlLnRpbWUsIGZsb2F0KHNhbXBsZS5yZWNvcmRzWydTd2FwVG90YWwnXSAtIHNhbXBsZS5yZWNvcmRzWydTd2FwRnJlZSddKSkgZm9yIHNhbXBsZSBpbiBtZW1fc3RhdHNdLCBcCisJCQkgICBwcm9jX3RyZWUsIE5vbmUpCisKKwkJY3Vycl95ID0gY3Vycl95ICsgbWVtaW5mb19iYXJfaAorCisJcmV0dXJuIGN1cnJfeQorCitkZWYgcmVuZGVyX3Byb2Nlc3Nlc19jaGFydChjdHgsIG9wdGlvbnMsIHRyYWNlLCBjdXJyX3ksIHcsIGgsIHNlY193KToKKyAgICAgICAgY2hhcnRfcmVjdCA9IFtvZmZfeCwgY3Vycl95K2hlYWRlcl9oLCB3LCBoIC0gMiAqIG9mZl95IC0gKGN1cnJfeStoZWFkZXJfaCkgKyBwcm9jX2hdCisKKwlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIkNvbmZpZ3VyZSIsIFwKKwkJCSBUQVNLX0NPTE9SX0NPTkZJR1VSRSwgb2ZmX3ggICwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiQ29tcGlsZSIsIFwKKwkJCSBUQVNLX0NPTE9SX0NPTVBJTEUsIG9mZl94KzEyMCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiSW5zdGFsbCIsIFwKKwkJCSBUQVNLX0NPTE9SX0lOU1RBTEwsIG9mZl94KzI0MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUG9wdWxhdGUgU3lzcm9vdCIsIFwKKwkJCSBUQVNLX0NPTE9SX1NZU1JPT1QsIG9mZl94KzM2MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUGFja2FnZSIsIFwKKwkJCSBUQVNLX0NPTE9SX1BBQ0tBR0UsIG9mZl94KzQ4MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUGFja2FnZSBXcml0ZSIsCisJCQkgVEFTS19DT0xPUl9QQUNLQUdFX1dSSVRFLCBvZmZfeCs2MDAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKworCWN0eC5zZXRfZm9udF9zaXplKFBST0NfVEVYVF9GT05UX1NJWkUpCisKKwlkcmF3X2JveF90aWNrcyhjdHgsIGNoYXJ0X3JlY3QsIHNlY193KQorCWRyYXdfc2VjX2xhYmVscyhjdHgsIG9wdGlvbnMsIGNoYXJ0X3JlY3QsIHNlY193LCAzMCkKKworCXkgPSBjdXJyX3kraGVhZGVyX2gKKworICAgICAgICBvZmZzZXQgPSB0cmFjZS5taW4gb3IgbWluKHRyYWNlLnN0YXJ0LmtleXMoKSkKKyAgICAgICAgZm9yIHMgaW4gc29ydGVkKHRyYWNlLnN0YXJ0LmtleXMoKSk6CisgICAgICAgICAgICBmb3IgdmFsIGluIHNvcnRlZCh0cmFjZS5zdGFydFtzXSk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9wdGlvbnMuYXBwX29wdGlvbnMuc2hvd19hbGwgYW5kIFwKKyAgICAgICAgICAgICAgICAgICB0cmFjZS5wcm9jZXNzZXNbdmFsXVsxXSAtIHMgPCBvcHRpb25zLmFwcF9vcHRpb25zLm1pbnRpbWU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdGFzayA9IHZhbC5zcGxpdCgiOiIpWzFdCisgICAgICAgICAgICAgICAgI3ByaW50IHZhbAorICAgICAgICAgICAgICAgICNwcmludCB0cmFjZS5wcm9jZXNzZXNbdmFsXVsxXQorICAgICAgICAgICAgICAgICNwcmludCBzCisgICAgICAgICAgICAgICAgeCA9IGNoYXJ0X3JlY3RbMF0gKyAocyAtIG9mZnNldCkgKiBzZWNfdworICAgICAgICAgICAgICAgIHcgPSAoKHRyYWNlLnByb2Nlc3Nlc1t2YWxdWzFdIC0gcykgKiBzZWNfdykKKworICAgICAgICAgICAgICAgICNwcmludCAicHJvYyBhdCAlcyAlcyAlcyAlcyIgJSAoeCwgeSwgdywgcHJvY19oKQorICAgICAgICAgICAgICAgIGNvbCA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiB0YXNrID09ICJkb19jb21waWxlIjoKKyAgICAgICAgICAgICAgICAgICAgY29sID0gVEFTS19DT0xPUl9DT01QSUxFCisgICAgICAgICAgICAgICAgZWxpZiB0YXNrID09ICJkb19jb25maWd1cmUiOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBUQVNLX0NPTE9SX0NPTkZJR1VSRQorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9faW5zdGFsbCI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfSU5TVEFMTAorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9fcG9wdWxhdGVfc3lzcm9vdCI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfU1lTUk9PVAorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9fcGFja2FnZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfUEFDS0FHRQorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9fcGFja2FnZV93cml0ZV9ycG0iIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgIHRhc2sgPT0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIiBvciBcCisgICAgICAgICAgICAgICAgICAgICB0YXNrID09ICJkb19wYWNrYWdlX3dyaXRlX2lwayI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfUEFDS0FHRV9XUklURQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFdISVRFCisKKyAgICAgICAgICAgICAgICBpZiBjb2w6CisgICAgICAgICAgICAgICAgICAgIGRyYXdfZmlsbF9yZWN0KGN0eCwgY29sLCAoeCwgeSwgdywgcHJvY19oKSkKKyAgICAgICAgICAgICAgICBkcmF3X3JlY3QoY3R4LCBQUk9DX0JPUkRFUl9DT0xPUiwgKHgsIHksIHcsIHByb2NfaCkpCisKKyAgICAgICAgICAgICAgICBkcmF3X2xhYmVsX2luX2JveChjdHgsIFBST0NfVEVYVF9DT0xPUiwgdmFsLCB4LCB5ICsgcHJvY19oIC0gNCwgdywgcHJvY19oKQorICAgICAgICAgICAgICAgIHkgPSB5ICsgcHJvY19oCisKKwlyZXR1cm4gY3Vycl95CisKKyMKKyMgUmVuZGVyIHRoZSBjaGFydC4KKyMKK2RlZiByZW5kZXIoY3R4LCBvcHRpb25zLCB4c2NhbGUsIHRyYWNlKToKKwkodywgaCkgPSBleHRlbnRzIChvcHRpb25zLCB4c2NhbGUsIHRyYWNlKQorCWdsb2JhbCBPUFRJT05TCisJT1BUSU9OUyA9IG9wdGlvbnMuYXBwX29wdGlvbnMKKworCSMgeCwgeSwgdywgaAorCWNsaXAgPSBjdHguY2xpcF9leHRlbnRzKCkKKworCXNlY193ID0gaW50ICh4c2NhbGUgKiBzZWNfd19iYXNlKQorCWN0eC5zZXRfbGluZV93aWR0aCgxLjApCisJY3R4LnNlbGVjdF9mb250X2ZhY2UoRk9OVF9OQU1FKQorCWRyYXdfZmlsbF9yZWN0KGN0eCwgV0hJVEUsICgwLCAwLCBtYXgodywgTUlOX0lNR19XKSwgaCkpCisJdyAtPSAyKm9mZl94CisJY3Vycl95ID0gb2ZmX3k7CisKKwljdXJyX3kgPSByZW5kZXJfcHJvY2Vzc2VzX2NoYXJ0IChjdHgsIG9wdGlvbnMsIHRyYWNlLCBjdXJyX3ksIHcsIGgsIHNlY193KQorCisJcmV0dXJuCisKKwlwcm9jX3RyZWUgPSBvcHRpb25zLnByb2NfdHJlZSAodHJhY2UpCisKKwkjIGRyYXcgdGhlIHRpdGxlIGFuZCBoZWFkZXJzCisJaWYgcHJvY190cmVlLmlkbGU6CisJCWR1cmF0aW9uID0gcHJvY190cmVlLmlkbGUKKwllbHNlOgorCQlkdXJhdGlvbiA9IHByb2NfdHJlZS5kdXJhdGlvbgorCisJaWYgbm90IG9wdGlvbnMua2VybmVsX29ubHk6CisJCWN1cnJfeSA9IGRyYXdfaGVhZGVyIChjdHgsIHRyYWNlLmhlYWRlcnMsIGR1cmF0aW9uKQorCWVsc2U6CisJCWN1cnJfeSA9IG9mZl95OworCisJaWYgb3B0aW9ucy5jaGFydHM6CisJCWN1cnJfeSA9IHJlbmRlcl9jaGFydHMgKGN0eCwgb3B0aW9ucywgY2xpcCwgdHJhY2UsIGN1cnJfeSwgdywgaCwgc2VjX3cpCisKKwkjIGRyYXcgcHJvY2VzcyBib3hlcworCXByb2NfaGVpZ2h0ID0gaAorCWlmIHByb2NfdHJlZS50YXNrc3RhdHMgYW5kIG9wdGlvbnMuY3VtdWxhdGl2ZToKKwkJcHJvY19oZWlnaHQgLT0gQ1VNTF9IRUlHSFQKKworCWRyYXdfcHJvY2Vzc19iYXJfY2hhcnQoY3R4LCBjbGlwLCBvcHRpb25zLCBwcm9jX3RyZWUsIHRyYWNlLnRpbWVzLAorCQkJICAgICAgIGN1cnJfeSwgdywgcHJvY19oZWlnaHQsIHNlY193KQorCisJY3Vycl95ID0gcHJvY19oZWlnaHQKKwljdHguc2V0X2ZvbnRfc2l6ZShTSUdfRk9OVF9TSVpFKQorCWRyYXdfdGV4dChjdHgsIFNJR05BVFVSRSwgU0lHX0NPTE9SLCBvZmZfeCArIDUsIHByb2NfaGVpZ2h0IC0gOCkKKworCSMgZHJhdyBhIGN1bXVsYXRpdmUgQ1BVLXRpbWUtcGVyLXByb2Nlc3MgZ3JhcGgKKwlpZiBwcm9jX3RyZWUudGFza3N0YXRzIGFuZCBvcHRpb25zLmN1bXVsYXRpdmU6CisJCWN1bWxfcmVjdCA9IChvZmZfeCwgY3Vycl95ICsgb2ZmX3ksIHcsIENVTUxfSEVJR0hULzIgLSBvZmZfeSAqIDIpCisJCWlmIGNsaXBfdmlzaWJsZSAoY2xpcCwgY3VtbF9yZWN0KToKKwkJCWRyYXdfY3VtbF9ncmFwaChjdHgsIHByb2NfdHJlZSwgY3VtbF9yZWN0LCBkdXJhdGlvbiwgc2VjX3csIFNUQVRfVFlQRV9DUFUpCisKKwkjIGRyYXcgYSBjdW11bGF0aXZlIEkvTy10aW1lLXBlci1wcm9jZXNzIGdyYXBoCisJaWYgcHJvY190cmVlLnRhc2tzdGF0cyBhbmQgb3B0aW9ucy5jdW11bGF0aXZlOgorCQljdW1sX3JlY3QgPSAob2ZmX3gsIGN1cnJfeSArIG9mZl95ICogMTAwLCB3LCBDVU1MX0hFSUdIVC8yIC0gb2ZmX3kgKiAyKQorCQlpZiBjbGlwX3Zpc2libGUgKGNsaXAsIGN1bWxfcmVjdCk6CisJCQlkcmF3X2N1bWxfZ3JhcGgoY3R4LCBwcm9jX3RyZWUsIGN1bWxfcmVjdCwgZHVyYXRpb24sIHNlY193LCBTVEFUX1RZUEVfSU8pCisKK2RlZiBkcmF3X3Byb2Nlc3NfYmFyX2NoYXJ0KGN0eCwgY2xpcCwgb3B0aW9ucywgcHJvY190cmVlLCB0aW1lcywgY3Vycl95LCB3LCBoLCBzZWNfdyk6CisJaGVhZGVyX3NpemUgPSAwCisJaWYgbm90IG9wdGlvbnMua2VybmVsX29ubHk6CisJCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUnVubmluZyAoJWNwdSkiLAorCQkJCSBQUk9DX0NPTE9SX1IsIG9mZl94ICAgICwgY3Vycl95ICsgNDUsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlVuaW50LnNsZWVwIChJL08pIiwKKwkJCQkgUFJPQ19DT0xPUl9ELCBvZmZfeCsxMjAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwkJZHJhd19sZWdlbmRfYm94IChjdHgsICJTbGVlcGluZyIsCisJCQkJIFBST0NfQ09MT1JfUywgb2ZmX3grMjQwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiWm9tYmllIiwKKwkJCQkgUFJPQ19DT0xPUl9aLCBvZmZfeCszNjAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwkJaGVhZGVyX3NpemUgPSA0NQorCisJY2hhcnRfcmVjdCA9IFtvZmZfeCwgY3Vycl95ICsgaGVhZGVyX3NpemUgKyAxNSwKKwkJICAgICAgdywgaCAtIDIgKiBvZmZfeSAtIChjdXJyX3kgKyBoZWFkZXJfc2l6ZSArIDE1KSArIHByb2NfaF0KKwljdHguc2V0X2ZvbnRfc2l6ZSAoUFJPQ19URVhUX0ZPTlRfU0laRSkKKworCWRyYXdfYm94X3RpY2tzIChjdHgsIGNoYXJ0X3JlY3QsIHNlY193KQorCWlmIHNlY193ID4gMTAwOgorCQluc2VjID0gMQorCWVsc2U6CisJCW5zZWMgPSA1CisJZHJhd19zZWNfbGFiZWxzIChjdHgsIG9wdGlvbnMsIGNoYXJ0X3JlY3QsIHNlY193LCBuc2VjKQorCWRyYXdfYW5ub3RhdGlvbnMgKGN0eCwgcHJvY190cmVlLCB0aW1lcywgY2hhcnRfcmVjdCkKKworCXkgPSBjdXJyX3kgKyA2MAorCWZvciByb290IGluIHByb2NfdHJlZS5wcm9jZXNzX3RyZWU6CisJCWRyYXdfcHJvY2Vzc2VzX3JlY3Vyc2l2ZWx5KGN0eCwgcm9vdCwgcHJvY190cmVlLCB5LCBwcm9jX2gsIGNoYXJ0X3JlY3QsIGNsaXApCisJCXkgPSB5ICsgcHJvY19oICogcHJvY190cmVlLm51bV9ub2Rlcyhbcm9vdF0pCisKKworZGVmIGRyYXdfaGVhZGVyIChjdHgsIGhlYWRlcnMsIGR1cmF0aW9uKToKKyAgICB0b3Nob3cgPSBbCisgICAgICAoJ3N5c3RlbS51bmFtZScsICd1bmFtZScsIGxhbWJkYSBzOiBzKSwKKyAgICAgICgnc3lzdGVtLnJlbGVhc2UnLCAncmVsZWFzZScsIGxhbWJkYSBzOiBzKSwKKyAgICAgICgnc3lzdGVtLmNwdScsICdDUFUnLCBsYW1iZGEgczogcmUuc3ViKCdtb2RlbCBuYW1lXHMqOlxzKicsICcnLCBzLCAxKSksCisgICAgICAoJ3N5c3RlbS5rZXJuZWwub3B0aW9ucycsICdrZXJuZWwgb3B0aW9ucycsIGxhbWJkYSBzOiBzKSwKKyAgICBdCisKKyAgICBoZWFkZXJfeSA9IGN0eC5mb250X2V4dGVudHMoKVsyXSArIDEwCisgICAgY3R4LnNldF9mb250X3NpemUoVElUTEVfRk9OVF9TSVpFKQorICAgIGRyYXdfdGV4dChjdHgsIGhlYWRlcnNbJ3RpdGxlJ10sIFRFWFRfQ09MT1IsIG9mZl94LCBoZWFkZXJfeSkKKyAgICBjdHguc2V0X2ZvbnRfc2l6ZShURVhUX0ZPTlRfU0laRSkKKworICAgIGZvciAoaGVhZGVya2V5LCBoZWFkZXJ0aXRsZSwgbWFuZ2xlKSBpbiB0b3Nob3c6CisgICAgICAgIGhlYWRlcl95ICs9IGN0eC5mb250X2V4dGVudHMoKVsyXQorICAgICAgICBpZiBoZWFkZXJrZXkgaW4gaGVhZGVyczoKKyAgICAgICAgICAgIHZhbHVlID0gaGVhZGVycy5nZXQoaGVhZGVya2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSAiIgorICAgICAgICB0eHQgPSBoZWFkZXJ0aXRsZSArICc6ICcgKyBtYW5nbGUodmFsdWUpCisgICAgICAgIGRyYXdfdGV4dChjdHgsIHR4dCwgVEVYVF9DT0xPUiwgb2ZmX3gsIGhlYWRlcl95KQorCisgICAgZHVyID0gZHVyYXRpb24gLyAxMDAuMAorICAgIHR4dCA9ICd0aW1lIDogJTAyZDolMDUuMmYnICUgKG1hdGguZmxvb3IoZHVyLzYwKSwgZHVyIC0gNjAgKiBtYXRoLmZsb29yKGR1ci82MCkpCisgICAgaWYgaGVhZGVycy5nZXQoJ3N5c3RlbS5tYXhwaWQnKSBpcyBub3QgTm9uZToKKyAgICAgICAgdHh0ID0gdHh0ICsgJyAgICAgIG1heCBwaWQ6ICVzJyAlIChoZWFkZXJzLmdldCgnc3lzdGVtLm1heHBpZCcpKQorCisgICAgaGVhZGVyX3kgKz0gY3R4LmZvbnRfZXh0ZW50cygpWzJdCisgICAgZHJhd190ZXh0IChjdHgsIHR4dCwgVEVYVF9DT0xPUiwgb2ZmX3gsIGhlYWRlcl95KQorCisgICAgcmV0dXJuIGhlYWRlcl95CisKK2RlZiBkcmF3X3Byb2Nlc3Nlc19yZWN1cnNpdmVseShjdHgsIHByb2MsIHByb2NfdHJlZSwgeSwgcHJvY19oLCByZWN0LCBjbGlwKSA6CisJeCA9IHJlY3RbMF0gKyAgKChwcm9jLnN0YXJ0X3RpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiByZWN0WzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKQorCXcgPSAoKHByb2MuZHVyYXRpb24pICogcmVjdFsyXSAvIHByb2NfdHJlZS5kdXJhdGlvbikKKworCWRyYXdfcHJvY2Vzc19hY3Rpdml0eV9jb2xvcnMoY3R4LCBwcm9jLCBwcm9jX3RyZWUsIHgsIHksIHcsIHByb2NfaCwgcmVjdCwgY2xpcCkKKwlkcmF3X3JlY3QoY3R4LCBQUk9DX0JPUkRFUl9DT0xPUiwgKHgsIHksIHcsIHByb2NfaCkpCisJaXBpZCA9IGludChwcm9jLnBpZCkKKwlpZiBub3QgT1BUSU9OUy5zaG93X2FsbDoKKwkJY21kU3RyaW5nID0gcHJvYy5jbWQKKwllbHNlOgorCQljbWRTdHJpbmcgPSAnJworCWlmIChPUFRJT05TLnNob3dfcGlkIG9yIE9QVElPTlMuc2hvd19hbGwpIGFuZCBpcGlkIGlzIG5vdCAwOgorCQljbWRTdHJpbmcgPSBjbWRTdHJpbmcgKyAiIFsiICsgc3RyKGlwaWQgLy8gMTAwMCkgKyAiXSIKKwlpZiBPUFRJT05TLnNob3dfYWxsOgorCQlpZiBwcm9jLmFyZ3M6CisJCQljbWRTdHJpbmcgPSBjbWRTdHJpbmcgKyAiICciICsgIicgJyIuam9pbihwcm9jLmFyZ3MpICsgIiciCisJCWVsc2U6CisJCQljbWRTdHJpbmcgPSBjbWRTdHJpbmcgKyAiICIgKyBwcm9jLmV4ZQorCisJZHJhd19sYWJlbF9pbl9ib3goY3R4LCBQUk9DX1RFWFRfQ09MT1IsIGNtZFN0cmluZywgeCwgeSArIHByb2NfaCAtIDQsIHcsIHJlY3RbMF0gKyByZWN0WzJdKQorCisJbmV4dF95ID0geSArIHByb2NfaAorCWZvciBjaGlsZCBpbiBwcm9jLmNoaWxkX2xpc3Q6CisJCWlmIG5leHRfeSA+IGNsaXBbMV0gKyBjbGlwWzNdOgorCQkJYnJlYWsKKwkJY2hpbGRfeCwgY2hpbGRfeSA9IGRyYXdfcHJvY2Vzc2VzX3JlY3Vyc2l2ZWx5KGN0eCwgY2hpbGQsIHByb2NfdHJlZSwgbmV4dF95LCBwcm9jX2gsIHJlY3QsIGNsaXApCisJCWRyYXdfcHJvY2Vzc19jb25uZWN0aW5nX2xpbmVzKGN0eCwgeCwgeSwgY2hpbGRfeCwgY2hpbGRfeSwgcHJvY19oKQorCQluZXh0X3kgPSBuZXh0X3kgKyBwcm9jX2ggKiBwcm9jX3RyZWUubnVtX25vZGVzKFtjaGlsZF0pCisKKwlyZXR1cm4geCwgeQorCisKK2RlZiBkcmF3X3Byb2Nlc3NfYWN0aXZpdHlfY29sb3JzKGN0eCwgcHJvYywgcHJvY190cmVlLCB4LCB5LCB3LCBwcm9jX2gsIHJlY3QsIGNsaXApOgorCisJaWYgeSA+IGNsaXBbMV0gKyBjbGlwWzNdIG9yIHkgKyBwcm9jX2ggKyAyIDwgY2xpcFsxXToKKwkJcmV0dXJuCisKKwlkcmF3X2ZpbGxfcmVjdChjdHgsIFBST0NfQ09MT1JfUywgKHgsIHksIHcsIHByb2NfaCkpCisKKwlsYXN0X3R4ID0gLTEKKwlmb3Igc2FtcGxlIGluIHByb2Muc2FtcGxlcyA6CisJCXR4ID0gcmVjdFswXSArIHJvdW5kKCgoc2FtcGxlLnRpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiByZWN0WzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKSkKKworCQkjIHNhbXBsZXMgYXJlIHNvcnRlZCBjaHJvbm9sb2dpY2FsbHkKKwkJaWYgdHggPCBjbGlwWzBdOgorCQkJY29udGludWUKKwkJaWYgdHggPiBjbGlwWzBdICsgY2xpcFsyXToKKwkJCWJyZWFrCisKKwkJdHcgPSByb3VuZChwcm9jX3RyZWUuc2FtcGxlX3BlcmlvZCAqIHJlY3RbMl0gLyBmbG9hdChwcm9jX3RyZWUuZHVyYXRpb24pKQorCQlpZiBsYXN0X3R4ICE9IC0xIGFuZCBhYnMobGFzdF90eCAtIHR4KSA8PSB0dzoKKwkJCXR3IC09IGxhc3RfdHggLSB0eAorCQkJdHggPSBsYXN0X3R4CisJCXR3ID0gbWF4ICh0dywgMSkgIyBuaWNlIHRvIHNlZSBhdCBsZWFzdCBzb21ldGhpbmcKKworCQlsYXN0X3R4ID0gdHggKyB0dworCQlzdGF0ZSA9IGdldF9wcm9jX3N0YXRlKCBzYW1wbGUuc3RhdGUgKQorCisJCWNvbG9yID0gU1RBVEVfQ09MT1JTW3N0YXRlXQorCQlpZiBzdGF0ZSA9PSBTVEFURV9SVU5OSU5HOgorCQkJYWxwaGEgPSBtaW4gKHNhbXBsZS5jcHVfc2FtcGxlLnVzZXIgKyBzYW1wbGUuY3B1X3NhbXBsZS5zeXMsIDEuMCkKKwkJCWNvbG9yID0gdHVwbGUobGlzdChQUk9DX0NPTE9SX1JbMDozXSkgKyBbYWxwaGFdKQorIwkJCXByaW50ICJyZW5kZXIgdGltZSAlZCBbIHR4ICVkIHR3ICVkIF0sIHNhbXBsZSBzdGF0ZSAlcyBjb2xvciAlcyBhbHBoYSAlZyIgJSAoc2FtcGxlLnRpbWUsIHR4LCB0dywgc3RhdGUsIGNvbG9yLCBhbHBoYSkKKwkJZWxpZiBzdGF0ZSA9PSBTVEFURV9TTEVFUElORzoKKwkJCWNvbnRpbnVlCisKKwkJZHJhd19maWxsX3JlY3QoY3R4LCBjb2xvciwgKHR4LCB5LCB0dywgcHJvY19oKSkKKworZGVmIGRyYXdfcHJvY2Vzc19jb25uZWN0aW5nX2xpbmVzKGN0eCwgcHgsIHB5LCB4LCB5LCBwcm9jX2gpOgorCWN0eC5zZXRfc291cmNlX3JnYmEoKkRFUF9DT0xPUikKKwljdHguc2V0X2Rhc2goWzIsIDJdKQorCWlmIGFicyhweCAtIHgpIDwgMzoKKwkJZGVwX29mZl94ID0gMworCQlkZXBfb2ZmX3kgPSBwcm9jX2ggLyA0CisJCWN0eC5tb3ZlX3RvKHgsIHkgKyBwcm9jX2ggLyAyKQorCQljdHgubGluZV90byhweCAtIGRlcF9vZmZfeCwgeSArIHByb2NfaCAvIDIpCisJCWN0eC5saW5lX3RvKHB4IC0gZGVwX29mZl94LCBweSAtIGRlcF9vZmZfeSkKKwkJY3R4LmxpbmVfdG8ocHgsIHB5IC0gZGVwX29mZl95KQorCWVsc2U6CisJCWN0eC5tb3ZlX3RvKHgsIHkgKyBwcm9jX2ggLyAyKQorCQljdHgubGluZV90byhweCwgeSArIHByb2NfaCAvIDIpCisJCWN0eC5saW5lX3RvKHB4LCBweSkKKwljdHguc3Ryb2tlKCkKKwljdHguc2V0X2Rhc2goW10pCisKKyMgZWxpZGUgdGhlIGJvb3RjaGFydCBjb2xsZWN0b3IgLSBpdCBpcyBxdWl0ZSBkaXN0b3J0aW5nCitkZWYgZWxpZGVfYm9vdGNoYXJ0KHByb2MpOgorCXJldHVybiBwcm9jLmNtZCA9PSAnYm9vdGNoYXJ0ZCcgb3IgcHJvYy5jbWQgPT0gJ2Jvb3RjaGFydC1jb2xsZScKKworY2xhc3MgQ3VtbFNhbXBsZToKKwlkZWYgX19pbml0X18oc2VsZiwgcHJvYyk6CisJCXNlbGYuY21kID0gcHJvYy5jbWQKKwkJc2VsZi5zYW1wbGVzID0gW10KKwkJc2VsZi5tZXJnZV9zYW1wbGVzIChwcm9jKQorCQlzZWxmLmNvbG9yID0gTm9uZQorCisJZGVmIG1lcmdlX3NhbXBsZXMoc2VsZiwgcHJvYyk6CisJCXNlbGYuc2FtcGxlcy5leHRlbmQgKHByb2Muc2FtcGxlcykKKwkJc2VsZi5zYW1wbGVzLnNvcnQgKGtleSA9IGxhbWJkYSBwOiBwLnRpbWUpCisKKwlkZWYgbmV4dChzZWxmKToKKwkJZ2xvYmFsIHBhbGV0dGVfaWR4CisJCXBhbGV0dGVfaWR4ICs9IEhTVl9TVEVQCisJCXJldHVybiBwYWxldHRlX2lkeAorCisJZGVmIGdldF9jb2xvcihzZWxmKToKKwkJaWYgc2VsZi5jb2xvciBpcyBOb25lOgorCQkJaSA9IHNlbGYubmV4dCgpICUgSFNWX01BWF9NT0QKKwkJCWggPSAwLjAKKwkJCWlmIGkgaXMgbm90IDA6CisJCQkJaCA9ICgxLjAgKiBpKSAvIEhTVl9NQVhfTU9ECisJCQlzID0gMC41CisJCQl2ID0gMS4wCisJCQljID0gY29sb3JzeXMuaHN2X3RvX3JnYiAoaCwgcywgdikKKwkJCXNlbGYuY29sb3IgPSAoY1swXSwgY1sxXSwgY1syXSwgMS4wKQorCQlyZXR1cm4gc2VsZi5jb2xvcgorCisKK2RlZiBkcmF3X2N1bWxfZ3JhcGgoY3R4LCBwcm9jX3RyZWUsIGNoYXJ0X2JvdW5kcywgZHVyYXRpb24sIHNlY193LCBzdGF0X3R5cGUpOgorCWdsb2JhbCBwYWxldHRlX2lkeAorCXBhbGV0dGVfaWR4ID0gMAorCisJdGltZV9oYXNoID0ge30KKwl0b3RhbF90aW1lID0gMC4wCisJbV9wcm9jX2xpc3QgPSB7fQorCisJaWYgc3RhdF90eXBlIGlzIFNUQVRfVFlQRV9DUFU6CisJCXNhbXBsZV92YWx1ZSA9ICdjcHUnCisJZWxzZToKKwkJc2FtcGxlX3ZhbHVlID0gJ2lvJworCWZvciBwcm9jIGluIHByb2NfdHJlZS5wcm9jZXNzX2xpc3Q6CisJCWlmIGVsaWRlX2Jvb3RjaGFydChwcm9jKToKKwkJCWNvbnRpbnVlCisKKwkJZm9yIHNhbXBsZSBpbiBwcm9jLnNhbXBsZXM6CisJCQl0b3RhbF90aW1lICs9IGdldGF0dHIoc2FtcGxlLmNwdV9zYW1wbGUsIHNhbXBsZV92YWx1ZSkKKwkJCWlmIG5vdCBzYW1wbGUudGltZSBpbiB0aW1lX2hhc2g6CisJCQkJdGltZV9oYXNoW3NhbXBsZS50aW1lXSA9IDEKKworCQkjIG1lcmdlIHBpZHMgd2l0aCB0aGUgc2FtZSBjbWQKKwkJaWYgbm90IHByb2MuY21kIGluIG1fcHJvY19saXN0OgorCQkJbV9wcm9jX2xpc3RbcHJvYy5jbWRdID0gQ3VtbFNhbXBsZSAocHJvYykKKwkJCWNvbnRpbnVlCisJCXMgPSBtX3Byb2NfbGlzdFtwcm9jLmNtZF0KKwkJcy5tZXJnZV9zYW1wbGVzIChwcm9jKQorCisJIyBhbGwgdGhlIHNhbXBsZSB0aW1lcworCXRpbWVzID0gc29ydGVkKHRpbWVfaGFzaCkKKwlpZiBsZW4gKHRpbWVzKSA8IDI6CisJCXByaW50KCJkZWdlbmVyYXRlIGJvb3QgY2hhcnQiKQorCQlyZXR1cm4KKworCXBpeF9wZXJfbnMgPSBjaGFydF9ib3VuZHNbM10gLyB0b3RhbF90aW1lCisjCXByaW50ICJ0b3RhbCB0aW1lOiAlZyBwaXgtcGVyLW5zICVnIiAlICh0b3RhbF90aW1lLCBwaXhfcGVyX25zKQorCisJIyBGSVhNRTogd2UgaGF2ZSBkdXBsaWNhdGVzIGluIHRoZSBwcm9jZXNzIGxpc3QgdG9vIFshXSAtIHdoeSAhPworCisJIyBSZW5kZXIgYm90dG9tIHVwLCBsZWZ0IHRvIHJpZ2h0CisJYmVsb3cgPSB7fQorCWZvciB0aW1lIGluIHRpbWVzOgorCQliZWxvd1t0aW1lXSA9IGNoYXJ0X2JvdW5kc1sxXSArIGNoYXJ0X2JvdW5kc1szXQorCisJIyBzYW1lIGNvbG9ycyBlYWNoIHRpbWUgd2UgcmVuZGVyCisJcmFuZG9tLnNlZWQgKDApCisKKwljdHguc2V0X2xpbmVfd2lkdGgoMSkKKworCWxlZ2VuZHMgPSBbXQorCWxhYmVscyA9IFtdCisKKwkjIHJlbmRlciBlYWNoIHBpZCBpbiBvcmRlcgorCWZvciBjcyBpbiBtX3Byb2NfbGlzdC52YWx1ZXMoKToKKwkJcm93ID0ge30KKwkJY3VtbCA9IDAuMAorCisJCSMgcHJpbnQgInBpZCA6ICVzIC0+ICVnIHNhbXBsZXMgJWQiICUgKHByb2MuY21kLCBjdW1sLCBsZW4gKGNzLnNhbXBsZXMpKQorCQlmb3Igc2FtcGxlIGluIGNzLnNhbXBsZXM6CisJCQljdW1sICs9IGdldGF0dHIoc2FtcGxlLmNwdV9zYW1wbGUsIHNhbXBsZV92YWx1ZSkKKwkJCXJvd1tzYW1wbGUudGltZV0gPSBjdW1sCisKKwkJcHJvY2Vzc190b3RhbF90aW1lID0gY3VtbAorCisJCSMgaGlkZSByZWFsbHkgdGlueSBwcm9jZXNzZXMKKwkJaWYgY3VtbCAqIHBpeF9wZXJfbnMgPD0gMjoKKwkJCWNvbnRpbnVlCisKKwkJbGFzdF90aW1lID0gdGltZXNbMF0KKwkJeSA9IGxhc3RfYmVsb3cgPSBiZWxvd1tsYXN0X3RpbWVdCisJCWxhc3RfY3VtbCA9IGN1bWwgPSAwLjAKKworCQljdHguc2V0X3NvdXJjZV9yZ2JhKCpjcy5nZXRfY29sb3IoKSkKKwkJZm9yIHRpbWUgaW4gdGltZXM6CisJCQlyZW5kZXJfc2VnID0gRmFsc2UKKworCQkJIyBkaWQgdGhlIHVuZGVybHlpbmcgdHJlbmQgaW5jcmVhc2UgPworCQkJaWYgYmVsb3dbdGltZV0gIT0gbGFzdF9iZWxvdzoKKwkJCQlsYXN0X2JlbG93ID0gYmVsb3dbbGFzdF90aW1lXQorCQkJCWxhc3RfY3VtbCA9IGN1bWwKKwkJCQlyZW5kZXJfc2VnID0gVHJ1ZQorCisJCQkjIGRpZCB3ZSBtb3ZlIHVwIGEgcGl4ZWwgaW5jcmVhc2UgPworCQkJaWYgdGltZSBpbiByb3c6CisJCQkJbmMgPSByb3VuZCAocm93W3RpbWVdICogcGl4X3Blcl9ucykKKwkJCQlpZiBuYyAhPSBjdW1sOgorCQkJCQlsYXN0X2N1bWwgPSBjdW1sCisJCQkJCWN1bWwgPSBuYworCQkJCQlyZW5kZXJfc2VnID0gVHJ1ZQorCisjCQkJaWYgbGFzdF9jdW1sID4gY3VtbDoKKyMJCQkJYXNzZXJ0IGZhaWwgLi4uIC0gdW4tc29ydGVkIHByb2Nlc3Mgc2FtcGxlcworCisJCQkjIGRyYXcgdGhlIHRyYWlsaW5nIHJlY3RhbmdsZSBmcm9tIHRoZSBsYXN0IHRpbWUgdG8KKwkJCSMgYmVmb3JlIG5vdywgYXQgdGhlIGhlaWdodCBvZiB0aGUgbGFzdCBzZWdtZW50LgorCQkJaWYgcmVuZGVyX3NlZzoKKwkJCQl3ID0gbWF0aC5jZWlsICgodGltZSAtIGxhc3RfdGltZSkgKiBjaGFydF9ib3VuZHNbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pICsgMQorCQkJCXggPSBjaGFydF9ib3VuZHNbMF0gKyByb3VuZCgobGFzdF90aW1lIC0gcHJvY190cmVlLnN0YXJ0X3RpbWUpICogY2hhcnRfYm91bmRzWzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKQorCQkJCWN0eC5yZWN0YW5nbGUgKHgsIGJlbG93W2xhc3RfdGltZV0gLSBsYXN0X2N1bWwsIHcsIGxhc3RfY3VtbCkKKwkJCQljdHguZmlsbCgpCisjCQkJCWN0eC5zdHJva2UoKQorCQkJCWxhc3RfdGltZSA9IHRpbWUKKwkJCQl5ID0gYmVsb3cgW3RpbWVdIC0gY3VtbAorCisJCQlyb3dbdGltZV0gPSB5CisKKwkJIyByZW5kZXIgdGhlIGxhc3Qgc2VnbWVudAorCQl4ID0gY2hhcnRfYm91bmRzWzBdICsgcm91bmQoKGxhc3RfdGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIGNoYXJ0X2JvdW5kc1syXSAvIHByb2NfdHJlZS5kdXJhdGlvbikKKwkJeSA9IGJlbG93W2xhc3RfdGltZV0gLSBjdW1sCisJCWN0eC5yZWN0YW5nbGUgKHgsIHksIGNoYXJ0X2JvdW5kc1syXSAtIHgsIGN1bWwpCisJCWN0eC5maWxsKCkKKyMJCWN0eC5zdHJva2UoKQorCisJCSMgcmVuZGVyIGxlZ2VuZCBpZiBpdCB3aWxsIGZpdAorCQlpZiBjdW1sID4gODoKKwkJCWxhYmVsID0gY3MuY21kCisJCQlleHRudHMgPSBjdHgudGV4dF9leHRlbnRzKGxhYmVsKQorCQkJbGFiZWxfdyA9IGV4dG50c1syXQorCQkJbGFiZWxfaCA9IGV4dG50c1szXQorIwkJCXByaW50ICJUZXh0IGV4dGVudHMgJWcgYnkgJWciICUgKGxhYmVsX3csIGxhYmVsX2gpCisJCQlsYWJlbHMuYXBwZW5kKChsYWJlbCwKKwkJCQkgICAgICAgY2hhcnRfYm91bmRzWzBdICsgY2hhcnRfYm91bmRzWzJdIC0gbGFiZWxfdyAtIG9mZl94ICogMiwKKwkJCQkgICAgICAgeSArIChjdW1sICsgbGFiZWxfaCkgLyAyKSkKKwkJCWlmIGNzIGluIGxlZ2VuZHM6CisJCQkJcHJpbnQoIkFSR0ggLSBkdXBsaWNhdGUgcHJvY2VzcyBpbiBsaXN0ICEiKQorCisJCWxlZ2VuZHMuYXBwZW5kICgoY3MsIHByb2Nlc3NfdG90YWxfdGltZSkpCisKKwkJYmVsb3cgPSByb3cKKworCSMgcmVuZGVyIGdyaWQtbGluZXMgb3ZlciB0aGUgdG9wCisJZHJhd19ib3hfdGlja3MoY3R4LCBjaGFydF9ib3VuZHMsIHNlY193KQorCisJIyByZW5kZXIgbGFiZWxzCisJZm9yIGwgaW4gbGFiZWxzOgorCQlkcmF3X3RleHQoY3R4LCBsWzBdLCBURVhUX0NPTE9SLCBsWzFdLCBsWzJdKQorCisJIyBSZW5kZXIgbGVnZW5kcworCWZvbnRfaGVpZ2h0ID0gMjAKKwlsYWJlbF93aWR0aCA9IDMwMAorCUxFR0VORFNfUEVSX0NPTCA9IDE1CisJTEVHRU5EU19UT1RBTCA9IDQ1CisJY3R4LnNldF9mb250X3NpemUgKFRJVExFX0ZPTlRfU0laRSkKKwlkdXJfc2VjcyA9IGR1cmF0aW9uIC8gMTAwCisJY3B1X3NlY3MgPSB0b3RhbF90aW1lIC8gMTAwMDAwMDAwMAorCisJIyBtaXNsZWFkaW5nIC0gd2l0aCBtdWx0aXBsZSBDUFVzIC4uLgorIwlpZGxlID0gKChkdXJfc2VjcyAtIGNwdV9zZWNzKSAvIGR1cl9zZWNzKSAqIDEwMC4wCisJaWYgc3RhdF90eXBlIGlzIFNUQVRfVFlQRV9DUFU6CisJCWxhYmVsID0gIkN1bXVsYXRpdmUgQ1BVIHVzYWdlLCBieSBwcm9jZXNzOyB0b3RhbCBDUFU6ICIgXAorCQkJIiAlLjVnKHMpIHRpbWU6ICUuM2cocykiICUgKGNwdV9zZWNzLCBkdXJfc2VjcykKKwllbHNlOgorCQlsYWJlbCA9ICJDdW11bGF0aXZlIEkvTyB1c2FnZSwgYnkgcHJvY2VzczsgdG90YWwgSS9POiAiIFwKKwkJCSIgJS41ZyhzKSB0aW1lOiAlLjNnKHMpIiAlIChjcHVfc2VjcywgZHVyX3NlY3MpCisKKwlkcmF3X3RleHQoY3R4LCBsYWJlbCwgVEVYVF9DT0xPUiwgY2hhcnRfYm91bmRzWzBdICsgb2ZmX3gsCisJCSAgY2hhcnRfYm91bmRzWzFdICsgZm9udF9oZWlnaHQpCisKKwlpID0gMAorCWxlZ2VuZHMgPSBzb3J0ZWQobGVnZW5kcywga2V5PWl0ZW1nZXR0ZXIoMSksIHJldmVyc2U9VHJ1ZSkKKwljdHguc2V0X2ZvbnRfc2l6ZShURVhUX0ZPTlRfU0laRSkKKwlmb3IgdCBpbiBsZWdlbmRzOgorCQljcyA9IHRbMF0KKwkJdGltZSA9IHRbMV0KKwkJeCA9IGNoYXJ0X2JvdW5kc1swXSArIG9mZl94ICsgaW50IChpL0xFR0VORFNfUEVSX0NPTCkgKiBsYWJlbF93aWR0aAorCQl5ID0gY2hhcnRfYm91bmRzWzFdICsgZm9udF9oZWlnaHQgKiAoKGkgJSBMRUdFTkRTX1BFUl9DT0wpICsgMikKKwkJc3RyID0gIiVzIC0gJS4wZihtcykgKCUyLjJmJSUpIiAlIChjcy5jbWQsIHRpbWUvMTAwMDAwMCwgKHRpbWUvdG90YWxfdGltZSkgKiAxMDAuMCkKKwkJZHJhd19sZWdlbmRfYm94KGN0eCwgc3RyLCBjcy5jb2xvciwgeCwgeSwgbGVnX3MpCisJCWkgPSBpICsgMQorCQlpZiBpID49IExFR0VORFNfVE9UQUw6CisJCQlicmVhawpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2d1aS5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9ndWkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlZGQyMwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9ndWkucHkKQEAgLTAsMCArMSwzNTAgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsKK2ltcG9ydCBndGsuZ2RrCitpbXBvcnQgZ3RrLmtleXN5bXMKK2Zyb20gLiBpbXBvcnQgZHJhdworZnJvbSAuZHJhdyBpbXBvcnQgUmVuZGVyT3B0aW9ucworCitjbGFzcyBQeUJvb3RjaGFydFdpZGdldChndGsuRHJhd2luZ0FyZWEpOgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgICAgICdleHBvc2UtZXZlbnQnOiAnb3ZlcnJpZGUnLAorICAgICAgICAgICAgJ2NsaWNrZWQnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULCBnb2JqZWN0LlRZUEVfTk9ORSwgKGdvYmplY3QuVFlQRV9TVFJJTkcsIGd0ay5nZGsuRXZlbnQpKSwKKyAgICAgICAgICAgICdwb3NpdGlvbi1jaGFuZ2VkJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwgZ29iamVjdC5UWVBFX05PTkUsIChnb2JqZWN0LlRZUEVfSU5ULCBnb2JqZWN0LlRZUEVfSU5UKSksCisgICAgICAgICAgICAnc2V0LXNjcm9sbC1hZGp1c3RtZW50cycgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsIGdvYmplY3QuVFlQRV9OT05FLCAoZ3RrLkFkanVzdG1lbnQsIGd0ay5BZGp1c3RtZW50KSkKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2UsIG9wdGlvbnMsIHhzY2FsZSk6CisgICAgICAgIGd0ay5EcmF3aW5nQXJlYS5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIHNlbGYudHJhY2UgPSB0cmFjZQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2VsZi5zZXRfZmxhZ3MoZ3RrLkNBTl9GT0NVUykKKworICAgICAgICBzZWxmLmFkZF9ldmVudHMoZ3RrLmdkay5CVVRUT05fUFJFU1NfTUFTSyB8IGd0ay5nZGsuQlVUVE9OX1JFTEVBU0VfTUFTSykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJidXR0b24tcHJlc3MtZXZlbnQiLCBzZWxmLm9uX2FyZWFfYnV0dG9uX3ByZXNzKQorICAgICAgICBzZWxmLmNvbm5lY3QoImJ1dHRvbi1yZWxlYXNlLWV2ZW50Iiwgc2VsZi5vbl9hcmVhX2J1dHRvbl9yZWxlYXNlKQorICAgICAgICBzZWxmLmFkZF9ldmVudHMoZ3RrLmdkay5QT0lOVEVSX01PVElPTl9NQVNLIHwgZ3RrLmdkay5QT0lOVEVSX01PVElPTl9ISU5UX01BU0sgfCBndGsuZ2RrLkJVVFRPTl9SRUxFQVNFX01BU0spCisgICAgICAgIHNlbGYuY29ubmVjdCgibW90aW9uLW5vdGlmeS1ldmVudCIsIHNlbGYub25fYXJlYV9tb3Rpb25fbm90aWZ5KQorICAgICAgICBzZWxmLmNvbm5lY3QoInNjcm9sbC1ldmVudCIsIHNlbGYub25fYXJlYV9zY3JvbGxfZXZlbnQpCisgICAgICAgIHNlbGYuY29ubmVjdCgna2V5LXByZXNzLWV2ZW50Jywgc2VsZi5vbl9rZXlfcHJlc3NfZXZlbnQpCisKKyAgICAgICAgc2VsZi5jb25uZWN0KCdzZXQtc2Nyb2xsLWFkanVzdG1lbnRzJywgc2VsZi5vbl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKQorICAgICAgICBzZWxmLmNvbm5lY3QoInNpemUtYWxsb2NhdGUiLCBzZWxmLm9uX2FsbG9jYXRpb25fc2l6ZV9jaGFuZ2VkKQorICAgICAgICBzZWxmLmNvbm5lY3QoInBvc2l0aW9uLWNoYW5nZWQiLCBzZWxmLm9uX3Bvc2l0aW9uX2NoYW5nZWQpCisKKyAgICAgICAgc2VsZi56b29tX3JhdGlvID0gMS4wCisgICAgICAgIHNlbGYueHNjYWxlID0geHNjYWxlCisgICAgICAgIHNlbGYueCwgc2VsZi55ID0gMC4wLCAwLjAKKworICAgICAgICBzZWxmLmNoYXJ0X3dpZHRoLCBzZWxmLmNoYXJ0X2hlaWdodCA9IGRyYXcuZXh0ZW50cyhzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorICAgICAgICBzZWxmLmhhZGogPSBOb25lCisgICAgICAgIHNlbGYudmFkaiA9IE5vbmUKKyAgICAgICAgc2VsZi5oYWRqX2NoYW5nZWRfc2lnbmFsX2lkID0gTm9uZQorICAgICAgICBzZWxmLnZhZGpfY2hhbmdlZF9zaWduYWxfaWQgPSBOb25lCisKKyAgICBkZWYgZG9fZXhwb3NlX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgY3IgPSBzZWxmLndpbmRvdy5jYWlyb19jcmVhdGUoKQorCisgICAgICAgICMgc2V0IGEgY2xpcCByZWdpb24gZm9yIHRoZSBleHBvc2UgZXZlbnQKKyAgICAgICAgY3IucmVjdGFuZ2xlKAorICAgICAgICAgICAgICAgIGV2ZW50LmFyZWEueCwgZXZlbnQuYXJlYS55LAorICAgICAgICAgICAgICAgIGV2ZW50LmFyZWEud2lkdGgsIGV2ZW50LmFyZWEuaGVpZ2h0CisgICAgICAgICkKKyAgICAgICAgY3IuY2xpcCgpCisgICAgICAgIHNlbGYuZHJhdyhjciwgc2VsZi5nZXRfYWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBkcmF3KHNlbGYsIGNyLCByZWN0KToKKyAgICAgICAgY3Iuc2V0X3NvdXJjZV9yZ2JhKDEuMCwgMS4wLCAxLjAsIDEuMCkKKyAgICAgICAgY3IucGFpbnQoKQorICAgICAgICBjci5zY2FsZShzZWxmLnpvb21fcmF0aW8sIHNlbGYuem9vbV9yYXRpbykKKyAgICAgICAgY3IudHJhbnNsYXRlKC1zZWxmLngsIC1zZWxmLnkpCisgICAgICAgIGRyYXcucmVuZGVyKGNyLCBzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorCisgICAgZGVmIHBvc2l0aW9uX2NoYW5nZWQoc2VsZik6CisgICAgICAgIHNlbGYuZW1pdCgicG9zaXRpb24tY2hhbmdlZCIsIHNlbGYueCwgc2VsZi55KQorCisgICAgWk9PTV9JTkNSRU1FTlQgPSAxLjI1CisKKyAgICBkZWYgem9vbV9pbWFnZSAoc2VsZiwgem9vbV9yYXRpbyk6CisgICAgICAgIHNlbGYuem9vbV9yYXRpbyA9IHpvb21fcmF0aW8KKyAgICAgICAgc2VsZi5fc2V0X3Njcm9sbF9hZGp1c3RtZW50cyAoc2VsZi5oYWRqLCBzZWxmLnZhZGopCisgICAgICAgIHNlbGYucXVldWVfZHJhdygpCisKKyAgICBkZWYgem9vbV90b19yZWN0IChzZWxmLCByZWN0KToKKyAgICAgICAgem9vbV9yYXRpbyA9IGZsb2F0KHJlY3Qud2lkdGgpL2Zsb2F0KHNlbGYuY2hhcnRfd2lkdGgpCisgICAgICAgIHNlbGYuem9vbV9pbWFnZSh6b29tX3JhdGlvKQorICAgICAgICBzZWxmLnggPSAwCisgICAgICAgIHNlbGYucG9zaXRpb25fY2hhbmdlZCgpCisKKyAgICBkZWYgc2V0X3hzY2FsZShzZWxmLCB4c2NhbGUpOgorICAgICAgICBvbGRfbWlkX3ggPSBzZWxmLnggKyBzZWxmLmhhZGoucGFnZV9zaXplIC8gMgorICAgICAgICBzZWxmLnhzY2FsZSA9IHhzY2FsZQorICAgICAgICBzZWxmLmNoYXJ0X3dpZHRoLCBzZWxmLmNoYXJ0X2hlaWdodCA9IGRyYXcuZXh0ZW50cyhzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorICAgICAgICBuZXdfeCA9IG9sZF9taWRfeAorICAgICAgICBzZWxmLnpvb21faW1hZ2UgKHNlbGYuem9vbV9yYXRpbykKKworICAgIGRlZiBvbl9leHBhbmQoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi5zZXRfeHNjYWxlIChpbnQoc2VsZi54c2NhbGUgKiAxLjUgKyAwLjUpKQorCisgICAgZGVmIG9uX2NvbnRyYWN0KHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuc2V0X3hzY2FsZSAobWF4KGludChzZWxmLnhzY2FsZSAvIDEuNSksIDEpKQorCisgICAgZGVmIG9uX3pvb21faW4oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi56b29tX2ltYWdlKHNlbGYuem9vbV9yYXRpbyAqIHNlbGYuWk9PTV9JTkNSRU1FTlQpCisKKyAgICBkZWYgb25fem9vbV9vdXQoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi56b29tX2ltYWdlKHNlbGYuem9vbV9yYXRpbyAvIHNlbGYuWk9PTV9JTkNSRU1FTlQpCisKKyAgICBkZWYgb25fem9vbV9maXQoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi56b29tX3RvX3JlY3Qoc2VsZi5nZXRfYWxsb2NhdGlvbigpKQorCisgICAgZGVmIG9uX3pvb21fMTAwKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuem9vbV9pbWFnZSgxLjApCisgICAgICAgIHNlbGYuc2V0X3hzY2FsZSgxLjApCisKKyAgICBkZWYgc2hvd190b2dnbGVkKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYub3B0aW9ucy5hcHBfb3B0aW9ucy5zaG93X2FsbCA9IGJ1dHRvbi5nZXRfcHJvcGVydHkgKCdhY3RpdmUnKQorICAgICAgICBzZWxmLmNoYXJ0X3dpZHRoLCBzZWxmLmNoYXJ0X2hlaWdodCA9IGRyYXcuZXh0ZW50cyhzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorICAgICAgICBzZWxmLl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKHNlbGYuaGFkaiwgc2VsZi52YWRqKQorICAgICAgICBzZWxmLnF1ZXVlX2RyYXcoKQorCisgICAgUE9TX0lOQ1JFTUVOVCA9IDEwMAorCisgICAgZGVmIG9uX2tleV9wcmVzc19ldmVudChzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQua2V5dmFsID09IGd0ay5rZXlzeW1zLkxlZnQ6CisgICAgICAgICAgICBzZWxmLnggLT0gc2VsZi5QT1NfSU5DUkVNRU5UL3NlbGYuem9vbV9yYXRpbworICAgICAgICBlbGlmIGV2ZW50LmtleXZhbCA9PSBndGsua2V5c3ltcy5SaWdodDoKKyAgICAgICAgICAgIHNlbGYueCArPSBzZWxmLlBPU19JTkNSRU1FTlQvc2VsZi56b29tX3JhdGlvCisgICAgICAgIGVsaWYgZXZlbnQua2V5dmFsID09IGd0ay5rZXlzeW1zLlVwOgorICAgICAgICAgICAgc2VsZi55IC09IHNlbGYuUE9TX0lOQ1JFTUVOVC9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgZWxpZiBldmVudC5rZXl2YWwgPT0gZ3RrLmtleXN5bXMuRG93bjoKKyAgICAgICAgICAgIHNlbGYueSArPSBzZWxmLlBPU19JTkNSRU1FTlQvc2VsZi56b29tX3JhdGlvCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5xdWV1ZV9kcmF3KCkKKyAgICAgICAgc2VsZi5wb3NpdGlvbl9jaGFuZ2VkKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBvbl9hcmVhX2J1dHRvbl9wcmVzcyhzZWxmLCBhcmVhLCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LmJ1dHRvbiA9PSAyIG9yIGV2ZW50LmJ1dHRvbiA9PSAxOgorICAgICAgICAgICAgYXJlYS53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLkZMRVVSKSkKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleCA9IGV2ZW50LngKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleSA9IGV2ZW50LnkKKyAgICAgICAgaWYgZXZlbnQudHlwZSBub3QgaW4gKGd0ay5nZGsuQlVUVE9OX1BSRVNTLCBndGsuZ2RrLkJVVFRPTl9SRUxFQVNFKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBvbl9hcmVhX2J1dHRvbl9yZWxlYXNlKHNlbGYsIGFyZWEsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQuYnV0dG9uID09IDIgb3IgZXZlbnQuYnV0dG9uID09IDE6CisgICAgICAgICAgICBhcmVhLndpbmRvdy5zZXRfY3Vyc29yKGd0ay5nZGsuQ3Vyc29yKGd0ay5nZGsuQVJST1cpKQorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V4ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V5ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgb25fYXJlYV9zY3JvbGxfZXZlbnQoc2VsZiwgYXJlYSwgZXZlbnQpOgorICAgICAgICBpZiBldmVudC5zdGF0ZSAmIGd0ay5nZGsuQ09OVFJPTF9NQVNLOgorICAgICAgICAgICAgaWYgZXZlbnQuZGlyZWN0aW9uID09IGd0ay5nZGsuU0NST0xMX1VQOgorICAgICAgICAgICAgICAgIHNlbGYuem9vbV9pbWFnZShzZWxmLnpvb21fcmF0aW8gKiBzZWxmLlpPT01fSU5DUkVNRU5UKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBldmVudC5kaXJlY3Rpb24gPT0gZ3RrLmdkay5TQ1JPTExfRE9XTjoKKyAgICAgICAgICAgICAgICBzZWxmLnpvb21faW1hZ2Uoc2VsZi56b29tX3JhdGlvIC8gc2VsZi5aT09NX0lOQ1JFTUVOVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgb25fYXJlYV9tb3Rpb25fbm90aWZ5KHNlbGYsIGFyZWEsIGV2ZW50KToKKyAgICAgICAgc3RhdGUgPSBldmVudC5zdGF0ZQorICAgICAgICBpZiBzdGF0ZSAmIGd0ay5nZGsuQlVUVE9OMl9NQVNLIG9yIHN0YXRlICYgZ3RrLmdkay5CVVRUT04xX01BU0s6CisgICAgICAgICAgICB4LCB5ID0gaW50KGV2ZW50LngpLCBpbnQoZXZlbnQueSkKKyAgICAgICAgICAgICMgcGFuIHRoZSBpbWFnZQorICAgICAgICAgICAgc2VsZi54ICs9IChzZWxmLnByZXZtb3VzZXggLSB4KS9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgICAgIHNlbGYueSArPSAoc2VsZi5wcmV2bW91c2V5IC0geSkvc2VsZi56b29tX3JhdGlvCisgICAgICAgICAgICBzZWxmLnF1ZXVlX2RyYXcoKQorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V4ID0geAorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V5ID0geQorICAgICAgICAgICAgc2VsZi5wb3NpdGlvbl9jaGFuZ2VkKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBvbl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKHNlbGYsIGFyZWEsIGhhZGosIHZhZGopOgorICAgICAgICBzZWxmLl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzIChoYWRqLCB2YWRqKQorCisgICAgZGVmIG9uX2FsbG9jYXRpb25fc2l6ZV9jaGFuZ2VkKHNlbGYsIHdpZGdldCwgYWxsb2NhdGlvbik6CisgICAgICAgIHNlbGYuaGFkai5wYWdlX3NpemUgPSBhbGxvY2F0aW9uLndpZHRoCisgICAgICAgIHNlbGYuaGFkai5wYWdlX2luY3JlbWVudCA9IGFsbG9jYXRpb24ud2lkdGggKiAwLjkKKyAgICAgICAgc2VsZi52YWRqLnBhZ2Vfc2l6ZSA9IGFsbG9jYXRpb24uaGVpZ2h0CisgICAgICAgIHNlbGYudmFkai5wYWdlX2luY3JlbWVudCA9IGFsbG9jYXRpb24uaGVpZ2h0ICogMC45CisKKyAgICBkZWYgX3NldF9hZGpfdXBwZXIoc2VsZiwgYWRqLCB1cHBlcik6CisgICAgICAgIGNoYW5nZWQgPSBGYWxzZQorICAgICAgICB2YWx1ZV9jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICBpZiBhZGoudXBwZXIgIT0gdXBwZXI6CisgICAgICAgICAgICBhZGoudXBwZXIgPSB1cHBlcgorICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKworICAgICAgICBtYXhfdmFsdWUgPSBtYXgoMC4wLCB1cHBlciAtIGFkai5wYWdlX3NpemUpCisgICAgICAgIGlmIGFkai52YWx1ZSA+IG1heF92YWx1ZToKKyAgICAgICAgICAgIGFkai52YWx1ZSA9IG1heF92YWx1ZQorICAgICAgICAgICAgdmFsdWVfY2hhbmdlZCA9IFRydWUKKworICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgYWRqLmNoYW5nZWQoKQorICAgICAgICBpZiB2YWx1ZV9jaGFuZ2VkOgorICAgICAgICAgICAgYWRqLnZhbHVlX2NoYW5nZWQoKQorCisgICAgZGVmIF9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKHNlbGYsIGhhZGosIHZhZGopOgorICAgICAgICBpZiBoYWRqID09IE5vbmU6CisgICAgICAgICAgICBoYWRqID0gZ3RrLkFkanVzdG1lbnQoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkKKyAgICAgICAgaWYgdmFkaiA9PSBOb25lOgorICAgICAgICAgICAgdmFkaiA9IGd0ay5BZGp1c3RtZW50KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApCisKKyAgICAgICAgaWYgc2VsZi5oYWRqX2NoYW5nZWRfc2lnbmFsX2lkICE9IE5vbmUgYW5kIFwKKyAgICAgICAgICAgc2VsZi5oYWRqICE9IE5vbmUgYW5kIGhhZGogIT0gc2VsZi5oYWRqOgorICAgICAgICAgICAgc2VsZi5oYWRqLmRpc2Nvbm5lY3QgKHNlbGYuaGFkal9jaGFuZ2VkX3NpZ25hbF9pZCkKKyAgICAgICAgaWYgc2VsZi52YWRqX2NoYW5nZWRfc2lnbmFsX2lkICE9IE5vbmUgYW5kIFwKKyAgICAgICAgICAgc2VsZi52YWRqICE9IE5vbmUgYW5kIHZhZGogIT0gc2VsZi52YWRqOgorICAgICAgICAgICAgc2VsZi52YWRqLmRpc2Nvbm5lY3QgKHNlbGYudmFkal9jaGFuZ2VkX3NpZ25hbF9pZCkKKworICAgICAgICBpZiBoYWRqICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLmhhZGogPSBoYWRqCisgICAgICAgICAgICBzZWxmLl9zZXRfYWRqX3VwcGVyIChzZWxmLmhhZGosIHNlbGYuem9vbV9yYXRpbyAqIHNlbGYuY2hhcnRfd2lkdGgpCisgICAgICAgICAgICBzZWxmLmhhZGpfY2hhbmdlZF9zaWduYWxfaWQgPSBzZWxmLmhhZGouY29ubmVjdCgndmFsdWUtY2hhbmdlZCcsIHNlbGYub25fYWRqdXN0bWVudHNfY2hhbmdlZCkKKworICAgICAgICBpZiB2YWRqICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLnZhZGogPSB2YWRqCisgICAgICAgICAgICBzZWxmLl9zZXRfYWRqX3VwcGVyIChzZWxmLnZhZGosIHNlbGYuem9vbV9yYXRpbyAqIHNlbGYuY2hhcnRfaGVpZ2h0KQorICAgICAgICAgICAgc2VsZi52YWRqX2NoYW5nZWRfc2lnbmFsX2lkID0gc2VsZi52YWRqLmNvbm5lY3QoJ3ZhbHVlLWNoYW5nZWQnLCBzZWxmLm9uX2FkanVzdG1lbnRzX2NoYW5nZWQpCisKKyAgICBkZWYgb25fYWRqdXN0bWVudHNfY2hhbmdlZChzZWxmLCBhZGopOgorICAgICAgICBzZWxmLnggPSBzZWxmLmhhZGoudmFsdWUgLyBzZWxmLnpvb21fcmF0aW8KKyAgICAgICAgc2VsZi55ID0gc2VsZi52YWRqLnZhbHVlIC8gc2VsZi56b29tX3JhdGlvCisgICAgICAgIHNlbGYucXVldWVfZHJhdygpCisKKyAgICBkZWYgb25fcG9zaXRpb25fY2hhbmdlZChzZWxmLCB3aWRnZXQsIHgsIHkpOgorICAgICAgICBzZWxmLmhhZGoudmFsdWUgPSB4ICogc2VsZi56b29tX3JhdGlvCisgICAgICAgIHNlbGYudmFkai52YWx1ZSA9IHkgKiBzZWxmLnpvb21fcmF0aW8KKworUHlCb290Y2hhcnRXaWRnZXQuc2V0X3NldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsKCdzZXQtc2Nyb2xsLWFkanVzdG1lbnRzJykKKworY2xhc3MgUHlCb290Y2hhcnRTaGVsbChndGsuVkJveCk6CisgICAgdWkgPSAnJycKKyAgICA8dWk+CisgICAgICAgICAgICA8dG9vbGJhciBuYW1lPSJUb29sQmFyIj4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iRXhwYW5kIi8+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249IkNvbnRyYWN0Ii8+CisgICAgICAgICAgICAgICAgICAgIDxzZXBhcmF0b3IvPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJab29tSW4iLz4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iWm9vbU91dCIvPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJab29tRml0Ii8+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249Ilpvb20xMDAiLz4KKyAgICAgICAgICAgIDwvdG9vbGJhcj4KKyAgICA8L3VpPgorICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3csIHRyYWNlLCBvcHRpb25zLCB4c2NhbGUpOgorICAgICAgICBndGsuVkJveC5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIHNlbGYud2lkZ2V0ID0gUHlCb290Y2hhcnRXaWRnZXQodHJhY2UsIG9wdGlvbnMsIHhzY2FsZSkKKworICAgICAgICAjIENyZWF0ZSBhIFVJTWFuYWdlciBpbnN0YW5jZQorICAgICAgICB1aW1hbmFnZXIgPSBzZWxmLnVpbWFuYWdlciA9IGd0ay5VSU1hbmFnZXIoKQorCisgICAgICAgICMgQWRkIHRoZSBhY2NlbGVyYXRvciBncm91cCB0byB0aGUgdG9wbGV2ZWwgd2luZG93CisgICAgICAgIGFjY2VsZ3JvdXAgPSB1aW1hbmFnZXIuZ2V0X2FjY2VsX2dyb3VwKCkKKyAgICAgICAgd2luZG93LmFkZF9hY2NlbF9ncm91cChhY2NlbGdyb3VwKQorCisgICAgICAgICMgQ3JlYXRlIGFuIEFjdGlvbkdyb3VwCisgICAgICAgIGFjdGlvbmdyb3VwID0gZ3RrLkFjdGlvbkdyb3VwKCdBY3Rpb25zJykKKyAgICAgICAgc2VsZi5hY3Rpb25ncm91cCA9IGFjdGlvbmdyb3VwCisKKyAgICAgICAgIyBDcmVhdGUgYWN0aW9ucworICAgICAgICBhY3Rpb25ncm91cC5hZGRfYWN0aW9ucygoCisgICAgICAgICAgICAgICAgKCdFeHBhbmQnLCBndGsuU1RPQ0tfQURELCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl9leHBhbmQpLAorICAgICAgICAgICAgICAgICgnQ29udHJhY3QnLCBndGsuU1RPQ0tfUkVNT1ZFLCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl9jb250cmFjdCksCisgICAgICAgICAgICAgICAgKCdab29tSW4nLCBndGsuU1RPQ0tfWk9PTV9JTiwgTm9uZSwgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fem9vbV9pbiksCisgICAgICAgICAgICAgICAgKCdab29tT3V0JywgZ3RrLlNUT0NLX1pPT01fT1VULCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl96b29tX291dCksCisgICAgICAgICAgICAgICAgKCdab29tRml0JywgZ3RrLlNUT0NLX1pPT01fRklULCAnRml0IFdpZHRoJywgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fem9vbV9maXQpLAorICAgICAgICAgICAgICAgICgnWm9vbTEwMCcsIGd0ay5TVE9DS19aT09NXzEwMCwgTm9uZSwgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fem9vbV8xMDApLAorICAgICAgICApKQorCisgICAgICAgICMgQWRkIHRoZSBhY3Rpb25ncm91cCB0byB0aGUgdWltYW5hZ2VyCisgICAgICAgIHVpbWFuYWdlci5pbnNlcnRfYWN0aW9uX2dyb3VwKGFjdGlvbmdyb3VwLCAwKQorCisgICAgICAgICMgQWRkIGEgVUkgZGVzY3JpcHRpb24KKyAgICAgICAgdWltYW5hZ2VyLmFkZF91aV9mcm9tX3N0cmluZyhzZWxmLnVpKQorCisgICAgICAgICMgU2Nyb2xsZWQgd2luZG93CisgICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYud2lkZ2V0KQorCisgICAgICAgICMgdG9vbGJhciAvIGgtYm94CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgOCkKKworICAgICAgICAjIENyZWF0ZSBhIFRvb2xiYXIKKyAgICAgICAgdG9vbGJhciA9IHVpbWFuYWdlci5nZXRfd2lkZ2V0KCcvVG9vbEJhcicpCisgICAgICAgIGhib3gucGFja19zdGFydCh0b29sYmFyLCBUcnVlLCBUcnVlKQorCisgICAgICAgIGlmIG5vdCBvcHRpb25zLmtlcm5lbF9vbmx5OgorICAgICAgICAgICAgIyBNaXNjLiBvcHRpb25zCisgICAgICAgICAgICBidXR0b24gPSBndGsuQ2hlY2tCdXR0b24oIlNob3cgbW9yZSIpCisgICAgICAgICAgICBidXR0b24uY29ubmVjdCAoJ3RvZ2dsZWQnLCBzZWxmLndpZGdldC5zaG93X3RvZ2dsZWQpCisgICAgICAgICAgICBidXR0b24uc2V0X2FjdGl2ZShvcHRpb25zLmFwcF9vcHRpb25zLnNob3dfYWxsKQorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0IChidXR0b24sIEZhbHNlLCBUcnVlKQorCisgICAgICAgIHNlbGYucGFja19zdGFydChoYm94LCBGYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNjcm9sbGVkKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBncmFiX2ZvY3VzKHNlbGYsIHdpbmRvdyk6CisgICAgICAgIHdpbmRvdy5zZXRfZm9jdXMoc2VsZi53aWRnZXQpCisKKworY2xhc3MgUHlCb290Y2hhcnRXaW5kb3coZ3RrLldpbmRvdyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2UsIGFwcF9vcHRpb25zKToKKyAgICAgICAgZ3RrLldpbmRvdy5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIHdpbmRvdyA9IHNlbGYKKyAgICAgICAgd2luZG93LnNldF90aXRsZSgiQm9vdGNoYXJ0ICVzIiAlIHRyYWNlLmZpbGVuYW1lKQorICAgICAgICB3aW5kb3cuc2V0X2RlZmF1bHRfc2l6ZSg3NTAsIDU1MCkKKworICAgICAgICB0YWJfcGFnZSA9IGd0ay5Ob3RlYm9vaygpCisgICAgICAgIHRhYl9wYWdlLnNob3coKQorICAgICAgICB3aW5kb3cuYWRkKHRhYl9wYWdlKQorCisgICAgICAgIGZ1bGxfb3B0cyA9IFJlbmRlck9wdGlvbnMoYXBwX29wdGlvbnMpCisgICAgICAgIGZ1bGxfdHJlZSA9IFB5Qm9vdGNoYXJ0U2hlbGwod2luZG93LCB0cmFjZSwgZnVsbF9vcHRzLCAxLjApCisgICAgICAgIHRhYl9wYWdlLmFwcGVuZF9wYWdlIChmdWxsX3RyZWUsIGd0ay5MYWJlbCgiRnVsbCB0cmVlIikpCisKKyAgICAgICAgaWYgdHJhY2Uua2VybmVsIGlzIG5vdCBOb25lIGFuZCBsZW4gKHRyYWNlLmtlcm5lbCkgPiAyOgorICAgICAgICAgICAga2VybmVsX29wdHMgPSBSZW5kZXJPcHRpb25zKGFwcF9vcHRpb25zKQorICAgICAgICAgICAga2VybmVsX29wdHMuY3VtdWxhdGl2ZSA9IEZhbHNlCisgICAgICAgICAgICBrZXJuZWxfb3B0cy5jaGFydHMgPSBGYWxzZQorICAgICAgICAgICAga2VybmVsX29wdHMua2VybmVsX29ubHkgPSBUcnVlCisgICAgICAgICAgICBrZXJuZWxfdHJlZSA9IFB5Qm9vdGNoYXJ0U2hlbGwod2luZG93LCB0cmFjZSwga2VybmVsX29wdHMsIDUuMCkKKyAgICAgICAgICAgIHRhYl9wYWdlLmFwcGVuZF9wYWdlIChrZXJuZWxfdHJlZSwgZ3RrLkxhYmVsKCJLZXJuZWwgYm9vdCIpKQorCisgICAgICAgIGZ1bGxfdHJlZS5ncmFiX2ZvY3VzKHNlbGYpCisgICAgICAgIHNlbGYuc2hvdygpCisKKworZGVmIHNob3codHJhY2UsIG9wdGlvbnMpOgorICAgIHdpbiA9IFB5Qm9vdGNoYXJ0V2luZG93KHRyYWNlLCBvcHRpb25zKQorICAgIHdpbi5jb25uZWN0KCdkZXN0cm95JywgZ3RrLm1haW5fcXVpdCkKKyAgICBndGsubWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5Cm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmI0NWFlMGEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weQpAQCAtMCwwICsxIEBACittYWluLnB5LmluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkuaW4gYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWJiMGJlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkuaW4KQEAgLTAsMCArMSwxODcgQEAKKyMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgIFdhcm5pbmc6IFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIG1haW4ucHkuaW4gLSBlZGl0IGl0IHRoZXJlLgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKKworZnJvbSAuIGltcG9ydCBwYXJzaW5nCitmcm9tIC4gaW1wb3J0IGJhdGNoCisKK2RlZiBfbWtfb3B0aW9uc19wYXJzZXIoKToKKwkiIiJNYWtlIGFuIG9wdGlvbnMgcGFyc2VyLiIiIgorCXVzYWdlID0gIiVwcm9nIFtvcHRpb25zXSAvcGF0aC90by90bXAvYnVpbGRzdGF0cy88cmVjaXBlLW1hY2hpbmU+LzxCVUlMRE5BTUU+LyIKKwl2ZXJzaW9uID0gIiVwcm9nIHYxLjAuMCIKKwlwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UsIHZlcnNpb249dmVyc2lvbikKKwlwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbnRlcmFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImludGVyYWN0aXZlIiwgZGVmYXVsdD1GYWxzZSwgCisJCQkgIGhlbHA9InN0YXJ0IGluIGFjdGl2ZSBtb2RlIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mb3JtYXQiLCBkZXN0PSJmb3JtYXQiLCBkZWZhdWx0PSJwbmciLCBjaG9pY2VzPVsicG5nIiwgInN2ZyIsICJwZGYiXSwKKwkJCSAgaGVscD0iaW1hZ2UgZm9ybWF0IChwbmcsIHN2ZywgcGRmKTsgZGVmYXVsdCBmb3JtYXQgcG5nIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRwdXQiLCBkZXN0PSJvdXRwdXQiLCBtZXRhdmFyPSJQQVRIIiwgZGVmYXVsdD1Ob25lLAorCQkJICBoZWxwPSJvdXRwdXQgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkpIHdoZXJlIGNoYXJ0cyBhcmUgc3RvcmVkIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1zcGxpdCIsIGRlc3Q9Im51bSIsIHR5cGU9aW50LCBkZWZhdWx0PTEsCisJCQkgIGhlbHA9InNwbGl0IHRoZSBvdXRwdXQgY2hhcnQgaW50byA8TlVNPiBjaGFydHMsIG9ubHkgd29ya3Mgd2l0aCBcIi1vIFBBVEhcIiIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0tbWludGltZSIsIGRlc3Q9Im1pbnRpbWUiLCB0eXBlPWludCwgZGVmYXVsdD04LAorCQkJICBoZWxwPSJvbmx5IHRhc2tzIGxvbmdlciB0aGFuIHRoaXMgdGltZSB3aWxsIGJlIGRpc3BsYXllZCIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1NIiwgIi0tbWludXRlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImFzX21pbnV0ZXMiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJkaXNwbGF5IHRpbWUgaW4gbWludXRlcyBpbnN0ZWFkIG9mIHNlY29uZHMiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1uby1wcnVuZSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJwcnVuZSIsIGRlZmF1bHQ9VHJ1ZSwKKyMJCQkgIGhlbHA9ImRvIG5vdCBwcnVuZSB0aGUgcHJvY2VzcyB0cmVlIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLXEiLCAiLS1xdWlldCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InF1aWV0IiwgZGVmYXVsdD1GYWxzZSwKKwkJCSAgaGVscD0ic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLWJvb3QtdGltZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImJvb3R0aW1lIiwgZGVmYXVsdD1GYWxzZSwKKyMJCQkgIGhlbHA9Im9ubHkgZGlzcGxheSB0aGUgYm9vdCB0aW1lIG9mIHRoZSBib290IGluIHRleHQgZm9ybWF0IChzdGRvdXQpIikJCisJcGFyc2VyLmFkZF9vcHRpb24oIi0tdmVyeS1xdWlldCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InZlcnlxdWlldCIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9InN1cHByZXNzIGFsbCBtZXNzYWdlcyBleGNlcHQgZXJyb3JzIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idmVyYm9zZSIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9InByaW50IGFsbCBtZXNzYWdlcyIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItLXByb2ZpbGUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJwcm9maWxlIiwgZGVmYXVsdD1GYWxzZSwKKyMJCQkgIGhlbHA9InByb2ZpbGUgcmVuZGVyaW5nIG9mIGNoYXJ0IChvbmx5IHVzZWZ1bCB3aGVuIGluIGJhdGNoIG1vZGUgaW5kaWNhdGVkIGJ5IC1mKSIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItLXNob3ctcGlkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2hvd19waWQiLCBkZWZhdWx0PUZhbHNlLAorIwkJCSAgaGVscD0ic2hvdyBwcm9jZXNzIGlkcyBpbiB0aGUgYm9vdGNoYXJ0IGFzICdwcm9jZXNzbmFtZSBbcGlkXSciKQorCXBhcnNlci5hZGRfb3B0aW9uKCItLXNob3ctYWxsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2hvd19hbGwiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJzaG93IGFsbCBwcm9jZXNzZXMgaW4gdGhlIGNoYXJ0IikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tY3JvcC1hZnRlciIsIGRlc3Q9ImNyb3BfYWZ0ZXIiLCBtZXRhdmFyPSJQUk9DRVNTIiwgZGVmYXVsdD1Ob25lLAorIwkJCSAgaGVscD0iY3JvcCBjaGFydCB3aGVuIGlkbGUgYWZ0ZXIgUFJPQ0VTUyBpcyBzdGFydGVkIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tYW5ub3RhdGUiLCBhY3Rpb249ImFwcGVuZCIsIGRlc3Q9ImFubm90YXRlIiwgbWV0YXZhcj0iUFJPQ0VTUyIsIGRlZmF1bHQ9Tm9uZSwKKyMJCQkgIGhlbHA9ImFubm90YXRlIHBvc2l0aW9uIHdoZXJlIFBST0NFU1MgaXMgc3RhcnRlZDsgY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4gIiArCisjCQkJICAgICAgICJUbyBjcmVhdGUgYSBzaW5nbGUgYW5ub3RhdGlvbiB3aGVuIGFueSBvbmUgb2YgYSBzZXQgb2YgcHJvY2Vzc2VzIGlzIHN0YXJ0ZWQsIHVzZSBjb21tYXMgdG8gc2VwYXJhdGUgdGhlIG5hbWVzIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tYW5ub3RhdGUtZmlsZSIsIGRlc3Q9ImFubm90YXRlX2ZpbGUiLCBtZXRhdmFyPSJGSUxFTkFNRSIsIGRlZmF1bHQ9Tm9uZSwKKyMJCQkgIGhlbHA9ImZpbGVuYW1lIHRvIHdyaXRlIGFubm90YXRpb24gcG9pbnRzIHRvIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLVQiLCAiLS1mdWxsLXRpbWUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJmdWxsX3RpbWUiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJkaXNwbGF5IHRoZSBmdWxsIHRpbWUgcmVnYXJkbGVzcyBvZiB3aGljaCBwcm9jZXNzZXMgYXJlIGN1cnJlbnRseSBzaG93biIpCisJcmV0dXJuIHBhcnNlcgorCitjbGFzcyBXcml0ZXI6CisJZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlLCBvcHRpb25zKToKKwkJc2VsZi53cml0ZSA9IHdyaXRlCisJCXNlbGYub3B0aW9ucyA9IG9wdGlvbnMKKwkJCisJZGVmIGVycm9yKHNlbGYsIG1zZyk6CisJCXNlbGYud3JpdGUobXNnKQorCisJZGVmIHdhcm4oc2VsZiwgbXNnKToKKwkJaWYgbm90IHNlbGYub3B0aW9ucy5xdWlldDoKKwkJCXNlbGYud3JpdGUobXNnKQorCisJZGVmIGluZm8oc2VsZiwgbXNnKToKKwkJaWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisJCQlzZWxmLndyaXRlKG1zZykKKworCWRlZiBzdGF0dXMoc2VsZiwgbXNnKToKKwkJaWYgbm90IHNlbGYub3B0aW9ucy5xdWlldDoKKwkJCXNlbGYud3JpdGUobXNnKQorCitkZWYgX21rX3dyaXRlcihvcHRpb25zKToKKwlkZWYgd3JpdGUocyk6CisJCXByaW50KHMpCisJcmV0dXJuIFdyaXRlcih3cml0ZSwgb3B0aW9ucykKKwkKK2RlZiBfZ2V0X2ZpbGVuYW1lKHBhdGgpOgorCSIiIkNvbnN0cnVjdCBhIHVzYWJsZSBmaWxlbmFtZSBmb3Igb3V0cHV0cyIiIgorCWRuYW1lID0gIi4iCisJZm5hbWUgPSAiYm9vdGNoYXJ0IgorCWlmIHBhdGggIT0gTm9uZToKKwkJaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKwkJCWRuYW1lID0gcGF0aAorCQllbHNlOgorCQkJZm5hbWUgPSBwYXRoCisJcmV0dXJuIG9zLnBhdGguam9pbihkbmFtZSwgZm5hbWUpCisKK2RlZiBtYWluKGFyZ3Y9Tm9uZSk6CisJdHJ5OgorCQlpZiBhcmd2IGlzIE5vbmU6CisJCQlhcmd2ID0gc3lzLmFyZ3ZbMTpdCisJCisJCXBhcnNlciA9IF9ta19vcHRpb25zX3BhcnNlcigpCisJCW9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisJCSMgRGVmYXVsdCB2YWx1ZXMgZm9yIGRpc2FibGVkIG9wdGlvbnMKKwkJb3B0aW9ucy5wcnVuZSA9IFRydWUKKwkJb3B0aW9ucy5ib290dGltZSA9IEZhbHNlCisJCW9wdGlvbnMucHJvZmlsZSA9IEZhbHNlCisJCW9wdGlvbnMuc2hvd19waWQgPSBGYWxzZQorCQlvcHRpb25zLmNyb3BfYWZ0ZXIgPSBOb25lCisJCW9wdGlvbnMuYW5ub3RhdGUgPSBOb25lCisJCW9wdGlvbnMuYW5ub3RhdGVfZmlsZSA9IE5vbmUKKworCQl3cml0ZXIgPSBfbWtfd3JpdGVyKG9wdGlvbnMpCisKKwkJaWYgbGVuKGFyZ3MpID09IDA6CisJCQlwcmludCgiTm8gcGF0aCBnaXZlbiwgdHJ5aW5nIC92YXIvbG9nL2Jvb3RjaGFydC50Z3oiKQorCQkJYXJncyA9IFsgIi92YXIvbG9nL2Jvb3RjaGFydC50Z3oiIF0KKworCQlyZXMgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKworCQlpZiBvcHRpb25zLmludGVyYWN0aXZlIG9yIG9wdGlvbnMub3V0cHV0ID09IE5vbmU6CisJCQlmcm9tIC4gaW1wb3J0IGd1aQorCQkJZ3VpLnNob3cocmVzLCBvcHRpb25zKQorCQllbGlmIG9wdGlvbnMuYm9vdHRpbWU6CisJCQlpbXBvcnQgbWF0aAorCQkJcHJvY190cmVlID0gcmVzLnByb2NfdHJlZQorCQkJaWYgcHJvY190cmVlLmlkbGU6CisJCQkgICAgZHVyYXRpb24gPSBwcm9jX3RyZWUuaWRsZQorCQkJZWxzZToKKwkJCSAgICBkdXJhdGlvbiA9IHByb2NfdHJlZS5kdXJhdGlvbgorCQkJZHVyID0gZHVyYXRpb24gLyAxMDAuMAorCQkJcHJpbnQoJyUwMmQ6JTA1LjJmJyAlIChtYXRoLmZsb29yKGR1ci82MCksIGR1ciAtIDYwICogbWF0aC5mbG9vcihkdXIvNjApKSkKKwkJZWxzZToKKwkJCWlmIG9wdGlvbnMuYW5ub3RhdGVfZmlsZToKKwkJCQlmID0gb3BlbiAob3B0aW9ucy5hbm5vdGF0ZV9maWxlLCAidyIpCisJCQkJdHJ5OgorCQkJCQlmb3IgdGltZSBpbiByZXNbNF06CisJCQkJCQlpZiB0aW1lIGlzIG5vdCBOb25lOgorCQkJCQkJCSMgb3V0cHV0IGFzIG1zCisJCQkJCQkJcHJpbnQodGltZSAqIDEwLCBmaWxlPWYpCisJCQkJCQllbHNlOgorCQkJCQkJCXByaW50KGZpbGU9ZikKKwkJCQlmaW5hbGx5OgorCQkJCQlmLmNsb3NlKCkKKwkJCWZpbGVuYW1lID0gX2dldF9maWxlbmFtZShvcHRpb25zLm91dHB1dCkKKwkJCXJlc19saXN0ID0gcGFyc2luZy5zcGxpdF9yZXMocmVzLCBvcHRpb25zKQorCQkJbiA9IDEKKwkJCXdpZHRoID0gbGVuKHN0cihsZW4ocmVzX2xpc3QpKSkKKwkJCXMgPSAiXyUlMCVkZC4iICUgd2lkdGgKKwkJCWZvciByIGluIHJlc19saXN0OgorCQkJCWlmIGxlbihyZXNfbGlzdCkgPT0gMToKKwkJCQkJZiA9IGZpbGVuYW1lICsgIi4iICsgb3B0aW9ucy5mb3JtYXQKKwkJCQllbHNlOgorCQkJCQlmID0gZmlsZW5hbWUgKyBzICUgbiArIG9wdGlvbnMuZm9ybWF0CisJCQkJCW4gPSBuICsgMQorCQkJCWRlZiByZW5kZXIoKToKKwkJCQkJYmF0Y2gucmVuZGVyKHdyaXRlciwgciwgb3B0aW9ucywgZikKKwkJCQlpZiBvcHRpb25zLnByb2ZpbGU6CisJCQkJCWltcG9ydCBjUHJvZmlsZQorCQkJCQlpbXBvcnQgcHN0YXRzCisJCQkJCXByb2ZpbGUgPSAnJXMucHJvZicgJSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXQorCQkJCQljUHJvZmlsZS5ydW5jdHgoJ3JlbmRlcigpJywgZ2xvYmFscygpLCBsb2NhbHMoKSwgcHJvZmlsZSkKKwkJCQkJcCA9IHBzdGF0cy5TdGF0cyhwcm9maWxlKQorCQkJCQlwLnN0cmlwX2RpcnMoKS5zb3J0X3N0YXRzKCd0aW1lJykucHJpbnRfc3RhdHMoMjApCisJCQkJZWxzZToKKwkJCQkJcmVuZGVyKCkKKworCQlyZXR1cm4gMAorCWV4Y2VwdCBwYXJzaW5nLlBhcnNlRXJyb3IgYXMgZXg6CisJCXByaW50KCgiUGFyc2UgZXJyb3I6ICVzIiAlIGV4KSkKKwkJcmV0dXJuIDIKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCXN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wYXJzaW5nLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3BhcnNpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyM2I5ZgotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wYXJzaW5nLnB5CkBAIC0wLDAgKzEsNzQwIEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgb3MKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHRhcmZpbGUKK2Zyb20gdGltZSBpbXBvcnQgY2xvY2sKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Citmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCisKK2Zyb20gLnNhbXBsZXMgaW1wb3J0ICoKK2Zyb20gLnByb2Nlc3NfdHJlZSBpbXBvcnQgUHJvY2Vzc1RyZWUKKworaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCk6CisgICAgbG9uZyA9IGludAorCisjIFBhcnNpbmcgcHJvZHVjZXMgYXMgaXRzIGVuZCByZXN1bHQgYSAnVHJhY2UnCisKK2NsYXNzIFRyYWNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZXIsIHBhdGhzLCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5wcm9jZXNzZXMgPSB7fQorICAgICAgICBzZWxmLnN0YXJ0ID0ge30KKyAgICAgICAgc2VsZi5lbmQgPSB7fQorICAgICAgICBzZWxmLm1pbiA9IE5vbmUKKyAgICAgICAgc2VsZi5tYXggPSBOb25lCisgICAgICAgIHNlbGYuaGVhZGVycyA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXNrX3N0YXRzID0gTm9uZQorICAgICAgICBzZWxmLnBzX3N0YXRzID0gTm9uZQorICAgICAgICBzZWxmLnRhc2tzdGF0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5jcHVfc3RhdHMgPSBOb25lCisgICAgICAgIHNlbGYuY21kbGluZSA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXJuZWwgPSBOb25lCisgICAgICAgIHNlbGYua2VybmVsX3RyZWUgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYucGFyZW50X21hcCA9IE5vbmUKKyAgICAgICAgc2VsZi5tZW1fc3RhdHMgPSBOb25lCisKKyAgICAgICAgaWYgbGVuKHBhdGhzKToKKyAgICAgICAgICAgIHBhcnNlX3BhdGhzICh3cml0ZXIsIHNlbGYsIHBhdGhzKQorICAgICAgICAgICAgaWYgbm90IHNlbGYudmFsaWQoKToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJlbXB0eSBzdGF0ZTogJyVzJyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgYm9vdGNoYXJ0IiAlICIsICIuam9pbihwYXRocykpCisKKyAgICAgICAgICAgIGlmIG9wdGlvbnMuZnVsbF90aW1lOgorICAgICAgICAgICAgICAgIHNlbGYubWluID0gbWluKHNlbGYuc3RhcnQua2V5cygpKQorICAgICAgICAgICAgICAgIHNlbGYubWF4ID0gbWF4KHNlbGYuZW5kLmtleXMoKSkKKworICAgICAgICByZXR1cm4KKworICAgICAgICAjIFR1cm4gdGhhdCBwYXJzZWQgaW5mb3JtYXRpb24gaW50byBzb21ldGhpbmcgbW9yZSB1c2VmdWwKKyAgICAgICAgIyBsaW5rIHByb2Nlc3NlcyBpbnRvIGEgdHJlZSBvZiBwb2ludGVycywgY2FsY3VsYXRlIHN0YXRpc3RpY3MKKyAgICAgICAgc2VsZi5jb21waWxlKHdyaXRlcikKKworICAgICAgICAjIENyb3AgdGhlIGNoYXJ0IHRvIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGlkbGUgcGVyaW9kIGFmdGVyIHRoZSBnaXZlbgorICAgICAgICAjIHByb2Nlc3MKKyAgICAgICAgaWYgb3B0aW9ucy5jcm9wX2FmdGVyOgorICAgICAgICAgICAgaWRsZSA9IHNlbGYuY3JvcCAod3JpdGVyLCBvcHRpb25zLmNyb3BfYWZ0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZGxlID0gTm9uZQorCisgICAgICAgICMgQW5ub3RhdGUgb3RoZXIgdGltZXMgYXMgdGhlIGZpcnN0IHN0YXJ0IHBvaW50IG9mIGdpdmVuIHByb2Nlc3MgbGlzdHMKKyAgICAgICAgc2VsZi50aW1lcyA9IFsgaWRsZSBdCisgICAgICAgIGlmIG9wdGlvbnMuYW5ub3RhdGU6CisgICAgICAgICAgICBmb3IgcHJvY25hbWVzIGluIG9wdGlvbnMuYW5ub3RhdGU6CisgICAgICAgICAgICAgICAgbmFtZXMgPSBbeFs6MTVdIGZvciB4IGluIHByb2NuYW1lcy5zcGxpdCgiLCIpXQorICAgICAgICAgICAgICAgIGZvciBwcm9jIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHByb2MuY21kIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lcy5hcHBlbmQocHJvYy5zdGFydF90aW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZXMuYXBwZW5kKE5vbmUpCisKKyAgICAgICAgc2VsZi5wcm9jX3RyZWUgPSBQcm9jZXNzVHJlZSh3cml0ZXIsIHNlbGYua2VybmVsLCBzZWxmLnBzX3N0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHNfc3RhdHMuc2FtcGxlX3BlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhlYWRlcnMuZ2V0KCJwcm9maWxlLnByb2Nlc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBydW5lLCBpZGxlLCBzZWxmLnRhc2tzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudF9tYXAgaXMgbm90IE5vbmUpCisKKyAgICAgICAgaWYgc2VsZi5rZXJuZWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmtlcm5lbF90cmVlID0gUHJvY2Vzc1RyZWUod3JpdGVyLCBzZWxmLmtlcm5lbCwgTm9uZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhlYWRlcnMuZ2V0KCJwcm9maWxlLnByb2Nlc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgTm9uZSwgTm9uZSwgVHJ1ZSkKKworICAgIGRlZiB2YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnByb2Nlc3NlcykgIT0gMAorICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzICE9IE5vbmUgYW5kIHNlbGYuZGlza19zdGF0cyAhPSBOb25lIGFuZCBcCisgICAgICAgICAgICAgICBzZWxmLnBzX3N0YXRzICE9IE5vbmUgYW5kIHNlbGYuY3B1X3N0YXRzICE9IE5vbmUKKworICAgIGRlZiBhZGRfcHJvY2VzcyhzZWxmLCBwcm9jZXNzLCBzdGFydCwgZW5kKToKKyAgICAgICAgc2VsZi5wcm9jZXNzZXNbcHJvY2Vzc10gPSBbc3RhcnQsIGVuZF0KKyAgICAgICAgaWYgc3RhcnQgbm90IGluIHNlbGYuc3RhcnQ6CisgICAgICAgICAgICBzZWxmLnN0YXJ0W3N0YXJ0XSA9IFtdCisgICAgICAgIGlmIHByb2Nlc3Mgbm90IGluIHNlbGYuc3RhcnRbc3RhcnRdOgorICAgICAgICAgICAgc2VsZi5zdGFydFtzdGFydF0uYXBwZW5kKHByb2Nlc3MpCisgICAgICAgIGlmIGVuZCBub3QgaW4gc2VsZi5lbmQ6CisgICAgICAgICAgICBzZWxmLmVuZFtlbmRdID0gW10KKyAgICAgICAgaWYgcHJvY2VzcyBub3QgaW4gc2VsZi5lbmRbZW5kXToKKyAgICAgICAgICAgIHNlbGYuZW5kW2VuZF0uYXBwZW5kKHByb2Nlc3MpCisKKyAgICBkZWYgY29tcGlsZShzZWxmLCB3cml0ZXIpOgorCisgICAgICAgIGRlZiBmaW5kX3BhcmVudF9pZF9mb3IocGlkKToKKyAgICAgICAgICAgIGlmIHBpZCBpcyAwOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBwcGlkID0gc2VsZi5wYXJlbnRfbWFwLmdldChwaWQpCisgICAgICAgICAgICBpZiBwcGlkOgorICAgICAgICAgICAgICAgICMgbWFueSBvZiB0aGVzZSBkb3VibGUgZm9ya3MgYXJlIHNvIHNob3J0IGxpdmVkCisgICAgICAgICAgICAgICAgIyB0aGF0IHdlIGhhdmUgbm8gc2FtcGxlcywgb3IgcHJvY2VzcyBpbmZvIGZvciB0aGVtCisgICAgICAgICAgICAgICAgIyBzbyBjbGltYiB0aGUgcGFyZW50IGhpZXJhcmN5IHRvIGZpbmQgb25lCisgICAgICAgICAgICAgICAgaWYgaW50IChwcGlkICogMTAwMCkgbm90IGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXA6CisjICAgICAgICAgICAgICAgICAgICBwcmludCAiUGlkICclZCcgc2hvcnQgbGl2ZWQgd2l0aCBubyBwcm9jZXNzIiAlIHBwaWQKKyAgICAgICAgICAgICAgICAgICAgcHBpZCA9IGZpbmRfcGFyZW50X2lkX2ZvciAocHBpZCkKKyMgICAgICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgICAgIHByaW50ICJQaWQgJyVkJyBoYXMgYW4gZW50cnkiICUgcHBpZAorICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgcHJpbnQgIlBpZCAnJWQnIG1pc3NpbmcgZnJvbSBwaWQgbWFwIiAlIHBpZAorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICByZXR1cm4gcHBpZAorCisgICAgICAgICMgbWVyZ2UgaW4gdGhlIGNtZGxpbmUgZGF0YQorICAgICAgICBpZiBzZWxmLmNtZGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgcHJvYyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHJwaWQgPSBpbnQgKHByb2MucGlkIC8vIDEwMDApCisgICAgICAgICAgICAgICAgaWYgcnBpZCBpbiBzZWxmLmNtZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9IHNlbGYuY21kbGluZVtycGlkXQorICAgICAgICAgICAgICAgICAgICBwcm9jLmV4ZSA9IGNtZFsnZXhlJ10KKyAgICAgICAgICAgICAgICAgICAgcHJvYy5hcmdzID0gY21kWydhcmdzJ10KKyMgICAgICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgICAgIHByaW50ICJwcm9jICVkICclcycgbm90IGluIGNtZGxpbmUiICUgKHJwaWQsIHByb2MuZXhlKQorCisgICAgICAgICMgcmUtcGFyZW50IGFueSBzdHJheSBvcnBoYW5zIGlmIHdlIGNhbgorICAgICAgICBpZiBzZWxmLnBhcmVudF9tYXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgcHJvY2VzcyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHBwaWQgPSBmaW5kX3BhcmVudF9pZF9mb3IgKGludChwcm9jZXNzLnBpZCAvLyAxMDAwKSkKKyAgICAgICAgICAgICAgICBpZiBwcGlkOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnBwaWQgPSBwcGlkICogMTAwMAorCisgICAgICAgICMgc3RpdGNoIHRoZSB0cmVlIHRvZ2V0aGVyIHdpdGggcG9pbnRlcnMKKyAgICAgICAgZm9yIHByb2Nlc3MgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb2Nlc3Muc2V0X3BhcmVudCAoc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcCkKKworICAgICAgICAjIGNvdW50IG9uIGZpbmdlcnMgdmFyaW91c2x5CisgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICBwcm9jZXNzLmNhbGNfc3RhdHMgKHNlbGYucHNfc3RhdHMuc2FtcGxlX3BlcmlvZCkKKworICAgIGRlZiBjcm9wKHNlbGYsIHdyaXRlciwgY3JvcF9hZnRlcik6CisKKyAgICAgICAgZGVmIGlzX2lkbGVfYXQodXRpbCwgc3RhcnQsIGopOgorICAgICAgICAgICAgayA9IGogKyAxCisgICAgICAgICAgICB3aGlsZSBrIDwgbGVuKHV0aWwpIGFuZCB1dGlsW2tdWzBdIDwgc3RhcnQgKyAzMDA6CisgICAgICAgICAgICAgICAgayArPSAxCisgICAgICAgICAgICBrID0gbWluKGssIGxlbih1dGlsKS0xKQorCisgICAgICAgICAgICBpZiB1dGlsW2pdWzFdID49IDAuMjU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGF2Z2xvYWQgPSBzdW0odVsxXSBmb3IgdSBpbiB1dGlsW2o6aysxXSkgLyAoay1qKzEpCisgICAgICAgICAgICBpZiBhdmdsb2FkIDwgMC4yNToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZGVmIGlzX2lkbGUodXRpbCwgc3RhcnQpOgorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMCwgbGVuKHV0aWwpKToKKyAgICAgICAgICAgICAgICBpZiB1dGlsW2pdWzBdIDwgc3RhcnQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2lkbGVfYXQodXRpbCwgc3RhcnQsIGopCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG5hbWVzID0gW3hbOjE1XSBmb3IgeCBpbiBjcm9wX2FmdGVyLnNwbGl0KCIsIildCisgICAgICAgIGZvciBwcm9jIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcm9jLmNtZCBpbiBuYW1lcyBvciBwcm9jLmV4ZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICB3cml0ZXIuaW5mbygic2VsZWN0ZWQgcHJvYyAnJXMnIGZyb20gbGlzdCAoc3RhcnQgJWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHByb2MuY21kLCBwcm9jLnN0YXJ0X3RpbWUpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHByb2MgaXMgTm9uZToKKyAgICAgICAgICAgIHdyaXRlci53YXJuKCJubyBzZWxlY3RlZCBjcm9wIHByb2MgJyVzJyBpbiBsaXN0IiAlIGNyb3BfYWZ0ZXIpCisKKworICAgICAgICBjcHVfdXRpbCA9IFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51c2VyICsgc2FtcGxlLnN5cyArIHNhbXBsZS5pbykgZm9yIHNhbXBsZSBpbiBzZWxmLmNwdV9zdGF0c10KKyAgICAgICAgZGlza191dGlsID0gWyhzYW1wbGUudGltZSwgc2FtcGxlLnV0aWwpIGZvciBzYW1wbGUgaW4gc2VsZi5kaXNrX3N0YXRzXQorCisgICAgICAgIGlkbGUgPSBOb25lCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjcHVfdXRpbCkpOgorICAgICAgICAgICAgaWYgY3B1X3V0aWxbaV1bMF0gPCBwcm9jLnN0YXJ0X3RpbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzX2lkbGVfYXQoY3B1X3V0aWwsIGNwdV91dGlsW2ldWzBdLCBpKSBcCisgICAgICAgICAgICAgICBhbmQgaXNfaWRsZShkaXNrX3V0aWwsIGNwdV91dGlsW2ldWzBdKToKKyAgICAgICAgICAgICAgICBpZGxlID0gY3B1X3V0aWxbaV1bMF0KKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGlkbGUgaXMgTm9uZToKKyAgICAgICAgICAgIHdyaXRlci53YXJuICgibm90IGlkbGUgYWZ0ZXIgcHJvYyAnJXMnIiAlIGNyb3BfYWZ0ZXIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGNyb3BfYXQgPSBpZGxlICsgMzAwCisgICAgICAgIHdyaXRlci5pbmZvICgiY3JvcHBpbmcgYXQgdGltZSAlZCIgJSBjcm9wX2F0KQorICAgICAgICB3aGlsZSBsZW4gKHNlbGYuY3B1X3N0YXRzKSBcCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNwdV9zdGF0c1stMV0udGltZSA+IGNyb3BfYXQ6CisgICAgICAgICAgICBzZWxmLmNwdV9zdGF0cy5wb3AoKQorICAgICAgICB3aGlsZSBsZW4gKHNlbGYuZGlza19zdGF0cykgXAorICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5kaXNrX3N0YXRzWy0xXS50aW1lID4gY3JvcF9hdDoKKyAgICAgICAgICAgIHNlbGYuZGlza19zdGF0cy5wb3AoKQorCisgICAgICAgIHNlbGYucHNfc3RhdHMuZW5kX3RpbWUgPSBjcm9wX2F0CisKKyAgICAgICAgY3JvcHBlZF9tYXAgPSB7fQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLml0ZW1zKCk6CisgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRfdGltZSA8PSBjcm9wX2F0KToKKyAgICAgICAgICAgICAgICBjcm9wcGVkX21hcFtrZXldID0gdmFsdWUKKworICAgICAgICBmb3IgcHJvYyBpbiBjcm9wcGVkX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb2MuZHVyYXRpb24gPSBtaW4gKHByb2MuZHVyYXRpb24sIGNyb3BfYXQgLSBwcm9jLnN0YXJ0X3RpbWUpCisgICAgICAgICAgICB3aGlsZSBsZW4gKHByb2Muc2FtcGxlcykgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHByb2Muc2FtcGxlc1stMV0udGltZSA+IGNyb3BfYXQ6CisgICAgICAgICAgICAgICAgcHJvYy5zYW1wbGVzLnBvcCgpCisKKyAgICAgICAgc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcCA9IGNyb3BwZWRfbWFwCisKKyAgICAgICAgcmV0dXJuIGlkbGUKKworCisKK2NsYXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJSZXByZXNlbnRzIGVycm9ycyBkdXJpbmcgcGFyc2Ugb2YgdGhlIGJvb3RjaGFydC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCitkZWYgX3BhcnNlX2hlYWRlcnMoZmlsZSk6CisgICAgIiIiUGFyc2VzIHRoZSBoZWFkZXJzIG9mIHRoZSBib290Y2hhcnQuIiIiCisgICAgZGVmIHBhcnNlKGFjYywgbGluZSk6CisgICAgICAgIChoZWFkZXJzLCBsYXN0KSA9IGFjYworICAgICAgICBpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgIGxhc3QsIHZhbHVlID0gbWFwIChsYW1iZGEgeDogeC5zdHJpcCgpLCBsaW5lLnNwbGl0KCc9JywgMSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBoZWFkZXJzW2xhc3RdICs9IHZhbHVlCisgICAgICAgIHJldHVybiBoZWFkZXJzLCBsYXN0CisgICAgcmV0dXJuIHJlZHVjZShwYXJzZSwgZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLnNwbGl0KCdcbicpLCAoZGVmYXVsdGRpY3Qoc3RyKSwnJykpWzBdCisKK2RlZiBfcGFyc2VfdGltZWRfYmxvY2tzKGZpbGUpOgorICAgICIiIlBhcnNlcyAoaWUuLCBzcGxpdHMpIGEgZmlsZSBpbnRvIHNvLWNhbGxlZCB0aW1lZC1ibG9ja3MuIEEKKyAgICB0aW1lZC1ibG9jayBjb25zaXN0cyBvZiBhIHRpbWVzdGFtcCBvbiBhIGxpbmUgYnkgaXRzZWxmIGZvbGxvd2VkCisgICAgYnkgemVybyBvciBtb3JlIGxpbmVzIG9mIGRhdGEgZm9yIHRoYXQgcG9pbnQgaW4gdGltZS4iIiIKKyAgICBkZWYgcGFyc2UoYmxvY2spOgorICAgICAgICBsaW5lcyA9IGJsb2NrLnNwbGl0KCdcbicpCisgICAgICAgIGlmIG5vdCBsaW5lczoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoJ2V4cGVjdGVkIGEgdGltZWQtYmxvY2sgY29uc2lzdGluZyBhIHRpbWVzdGFtcCBmb2xsb3dlZCBieSBkYXRhIGxpbmVzJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIChpbnQobGluZXNbMF0pLCBsaW5lc1sxOl0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiZXhwZWN0ZWQgYSB0aW1lZC1ibG9jaywgYnV0IHRpbWVzdGFtcCAnJXMnIGlzIG5vdCBhbiBpbnRlZ2VyIiAlIGxpbmVzWzBdKQorICAgIGJsb2NrcyA9IGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdCgnXG5cbicpCisgICAgcmV0dXJuIFtwYXJzZShibG9jaykgZm9yIGJsb2NrIGluIGJsb2NrcyBpZiBibG9jay5zdHJpcCgpIGFuZCBub3QgYmxvY2suZW5kc3dpdGgoJyBub3QgcnVubmluZ1xuJyldCisKK2RlZiBfcGFyc2VfcHJvY19wc19sb2cod3JpdGVyLCBmaWxlKToKKyAgICAiIiIKKyAgICAgKiBTZWUgcHJvYyg1KSBmb3IgZGV0YWlscy4KKyAgICAgKgorICAgICAqIHtwaWQsIGNvbW0sIHN0YXRlLCBwcGlkLCBwZ3JwLCBzZXNzaW9uLCB0dHlfbnIsIHRwZ2lkLCBmbGFncywgbWluZmx0LCBjbWluZmx0LCBtYWpmbHQsIGNtYWpmbHQsIHV0aW1lLCBzdGltZSwKKyAgICAgKiAgY3V0aW1lLCBjc3RpbWUsIHByaW9yaXR5LCBuaWNlLCAwLCBpdHJlYWx2YWx1ZSwgc3RhcnR0aW1lLCB2c2l6ZSwgcnNzLCBybGltLCBzdGFydGNvZGUsIGVuZGNvZGUsIHN0YXJ0c3RhY2ssCisgICAgICogIGtzdGtlc3AsIGtzdGtlaXB9CisgICAgIiIiCisgICAgcHJvY2Vzc01hcCA9IHt9CisgICAgbHRpbWUgPSAwCisgICAgdGltZWRfYmxvY2tzID0gX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKQorICAgIGZvciB0aW1lLCBsaW5lcyBpbiB0aW1lZF9ibG9ja3M6CisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgbm90IGxpbmU6IGNvbnRpbnVlCisgICAgICAgICAgICB0b2tlbnMgPSBsaW5lLnNwbGl0KCcgJykKKyAgICAgICAgICAgIGlmIGxlbih0b2tlbnMpIDwgMjE6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgb2Zmc2V0ID0gW2luZGV4IGZvciBpbmRleCwgdG9rZW4gaW4gZW51bWVyYXRlKHRva2Vuc1sxOl0pIGlmIHRva2VuWy0xXSA9PSAnKSddWzBdCisgICAgICAgICAgICBwaWQsIGNtZCwgc3RhdGUsIHBwaWQgPSBpbnQodG9rZW5zWzBdKSwgJyAnLmpvaW4odG9rZW5zWzE6MitvZmZzZXRdKSwgdG9rZW5zWzIrb2Zmc2V0XSwgaW50KHRva2Vuc1szK29mZnNldF0pCisgICAgICAgICAgICB1c2VyQ3B1LCBzeXNDcHUsIHN0aW1lID0gaW50KHRva2Vuc1sxMytvZmZzZXRdKSwgaW50KHRva2Vuc1sxNCtvZmZzZXRdKSwgaW50KHRva2Vuc1syMStvZmZzZXRdKQorCisgICAgICAgICAgICAjIG1hZ2ljIGZpeGVkIHBvaW50LW5lc3MgLi4uCisgICAgICAgICAgICBwaWQgKj0gMTAwMAorICAgICAgICAgICAgcHBpZCAqPSAxMDAwCisgICAgICAgICAgICBpZiBwaWQgaW4gcHJvY2Vzc01hcDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzID0gcHJvY2Vzc01hcFtwaWRdCisgICAgICAgICAgICAgICAgcHJvY2Vzcy5jbWQgPSBjbWQuc3RyaXAoJygpJykgIyB3aHkgcmVuYW1lIGFmdGVyIGxhdGVzdCBuYW1lPz8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IFByb2Nlc3Mod3JpdGVyLCBwaWQsIGNtZC5zdHJpcCgnKCknKSwgcHBpZCwgbWluKHRpbWUsIHN0aW1lKSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzTWFwW3BpZF0gPSBwcm9jZXNzCisKKyAgICAgICAgICAgIGlmIHByb2Nlc3MubGFzdF91c2VyX2NwdV90aW1lIGlzIG5vdCBOb25lIGFuZCBwcm9jZXNzLmxhc3Rfc3lzX2NwdV90aW1lIGlzIG5vdCBOb25lIGFuZCBsdGltZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB1c2VyQ3B1TG9hZCwgc3lzQ3B1TG9hZCA9IHByb2Nlc3MuY2FsY19sb2FkKHVzZXJDcHUsIHN5c0NwdSwgbWF4KDEsIHRpbWUgLSBsdGltZSkpCisgICAgICAgICAgICAgICAgY3B1U2FtcGxlID0gQ1BVU2FtcGxlKCdudWxsJywgdXNlckNwdUxvYWQsIHN5c0NwdUxvYWQsIDAuMCkKKyAgICAgICAgICAgICAgICBwcm9jZXNzLnNhbXBsZXMuYXBwZW5kKFByb2Nlc3NTYW1wbGUodGltZSwgc3RhdGUsIGNwdVNhbXBsZSkpCisKKyAgICAgICAgICAgIHByb2Nlc3MubGFzdF91c2VyX2NwdV90aW1lID0gdXNlckNwdQorICAgICAgICAgICAgcHJvY2Vzcy5sYXN0X3N5c19jcHVfdGltZSA9IHN5c0NwdQorICAgICAgICBsdGltZSA9IHRpbWUKKworICAgIGlmIGxlbiAodGltZWRfYmxvY2tzKSA8IDI6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBzdGFydFRpbWUgPSB0aW1lZF9ibG9ja3NbMF1bMF0KKyAgICBhdmdTYW1wbGVMZW5ndGggPSAobHRpbWUgLSBzdGFydFRpbWUpLyhsZW4gKHRpbWVkX2Jsb2NrcykgLSAxKQorCisgICAgcmV0dXJuIFByb2Nlc3NTdGF0cyAod3JpdGVyLCBwcm9jZXNzTWFwLCBsZW4gKHRpbWVkX2Jsb2NrcyksIGF2Z1NhbXBsZUxlbmd0aCwgc3RhcnRUaW1lLCBsdGltZSkKKworZGVmIF9wYXJzZV90YXNrc3RhdHNfbG9nKHdyaXRlciwgZmlsZSk6CisgICAgIiIiCisgICAgICogU2VlIGJvb3RjaGFydC1jb2xsZWN0b3IuYyBmb3IgZGV0YWlscy4KKyAgICAgKgorICAgICAqIHsgcGlkLCBwcGlkLCBjb21tLCBjcHVfcnVuX3JlYWxfdG90YWwsIGJsa2lvX2RlbGF5X3RvdGFsLCBzd2FwaW5fZGVsYXlfdG90YWwgfQorICAgICAqCisgICAgIiIiCisgICAgcHJvY2Vzc01hcCA9IHt9CisgICAgcGlkUmV3cml0ZXMgPSB7fQorICAgIGx0aW1lID0gTm9uZQorICAgIHRpbWVkX2Jsb2NrcyA9IF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSkKKyAgICBmb3IgdGltZSwgbGluZXMgaW4gdGltZWRfYmxvY2tzOgorICAgICAgICAjIHdlIGhhdmUgbm8gJ3N0aW1lJyBmcm9tIHRhc2tzdGF0cywgc28gcHJlcCAnaW5pdCcKKyAgICAgICAgaWYgbHRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3MgPSBQcm9jZXNzKHdyaXRlciwgMSwgJ1tpbml0XScsIDAsIDApCisgICAgICAgICAgICBwcm9jZXNzTWFwWzEwMDBdID0gcHJvY2VzcworICAgICAgICAgICAgbHRpbWUgPSB0aW1lCisjICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgICAgICAgICAgdG9rZW5zID0gbGluZS5zcGxpdCgnICcpCisgICAgICAgICAgICBpZiBsZW4odG9rZW5zKSAhPSA2OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIG9waWQsIHBwaWQsIGNtZCA9IGludCh0b2tlbnNbMF0pLCBpbnQodG9rZW5zWzFdKSwgdG9rZW5zWzJdCisgICAgICAgICAgICBjcHVfbnMsIGJsa2lvX2RlbGF5X25zLCBzd2FwaW5fZGVsYXlfbnMgPSBsb25nKHRva2Vuc1stM10pLCBsb25nKHRva2Vuc1stMl0pLCBsb25nKHRva2Vuc1stMV0pLAorCisgICAgICAgICAgICAjIG1ha2Ugc3BhY2UgZm9yIHRyZWVzIG9mIHBpZHMKKyAgICAgICAgICAgIG9waWQgKj0gMTAwMAorICAgICAgICAgICAgcHBpZCAqPSAxMDAwCisKKyAgICAgICAgICAgICMgd2hlbiB0aGUgcHJvY2VzcyBuYW1lIGNoYW5nZXMsIHdlIHJlLXdyaXRlIHRoZSBwaWQuCisgICAgICAgICAgICBpZiBvcGlkIGluIHBpZFJld3JpdGVzOgorICAgICAgICAgICAgICAgIHBpZCA9IHBpZFJld3JpdGVzW29waWRdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBpZCA9IG9waWQKKworICAgICAgICAgICAgY21kID0gY21kLnN0cmlwKCcoJykuc3RyaXAoJyknKQorICAgICAgICAgICAgaWYgcGlkIGluIHByb2Nlc3NNYXA6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3NNYXBbcGlkXQorICAgICAgICAgICAgICAgIGlmIHByb2Nlc3MuY21kICE9IGNtZDoKKyAgICAgICAgICAgICAgICAgICAgcGlkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcGlkUmV3cml0ZXNbb3BpZF0gPSBwaWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAicHJvY2VzcyBtdXRhdGlvbiAhICclcycgdnMgJyVzJyBwaWQgJXMgLT4gcGlkICVzXG4iICUgKHByb2Nlc3MuY21kLCBjbWQsIG9waWQsIHBpZCkKKyAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3Muc3BsaXQgKHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHRpbWUpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NNYXBbcGlkXSA9IHByb2Nlc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmNtZCA9IGNtZDsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IFByb2Nlc3Mod3JpdGVyLCBwaWQsIGNtZCwgcHBpZCwgdGltZSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzTWFwW3BpZF0gPSBwcm9jZXNzCisKKyAgICAgICAgICAgIGRlbHRhX2NwdV9ucyA9IChmbG9hdCkgKGNwdV9ucyAtIHByb2Nlc3MubGFzdF9jcHVfbnMpCisgICAgICAgICAgICBkZWx0YV9ibGtpb19kZWxheV9ucyA9IChmbG9hdCkgKGJsa2lvX2RlbGF5X25zIC0gcHJvY2Vzcy5sYXN0X2Jsa2lvX2RlbGF5X25zKQorICAgICAgICAgICAgZGVsdGFfc3dhcGluX2RlbGF5X25zID0gKGZsb2F0KSAoc3dhcGluX2RlbGF5X25zIC0gcHJvY2Vzcy5sYXN0X3N3YXBpbl9kZWxheV9ucykKKworICAgICAgICAgICAgIyBtYWtlIHVwIHNvbWUgc3RhdGUgZGF0YSAuLi4KKyAgICAgICAgICAgIGlmIGRlbHRhX2NwdV9ucyA+IDA6CisgICAgICAgICAgICAgICAgc3RhdGUgPSAiUiIKKyAgICAgICAgICAgIGVsaWYgZGVsdGFfYmxraW9fZGVsYXlfbnMgKyBkZWx0YV9zd2FwaW5fZGVsYXlfbnMgPiAwOgorICAgICAgICAgICAgICAgIHN0YXRlID0gIkQiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXRlID0gIlMiCisKKyAgICAgICAgICAgICMgcmV0YWluIHRoZSBucyB0aW1pbmcgaW5mb3JtYXRpb24gaW50byBhIENQVVNhbXBsZSAtIHRoYXQgdHJpZXMKKyAgICAgICAgICAgICMgd2l0aCB0aGUgb2xkLXN0eWxlIHRvIGJlIGEgJWFnZSBvZiBDUFUgdXNlZCBpbiB0aGlzIHRpbWUtc2xpY2UuCisgICAgICAgICAgICBpZiBkZWx0YV9jcHVfbnMgKyBkZWx0YV9ibGtpb19kZWxheV9ucyArIGRlbHRhX3N3YXBpbl9kZWxheV9ucyA+IDA6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJwcm9jICVzIGNwdV9ucyAlZyBkZWx0YV9jcHUgJWciICUgKGNtZCwgY3B1X25zLCBkZWx0YV9jcHVfbnMpCisgICAgICAgICAgICAgICAgY3B1U2FtcGxlID0gQ1BVU2FtcGxlKCdudWxsJywgZGVsdGFfY3B1X25zLCAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhX2Jsa2lvX2RlbGF5X25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YV9zd2FwaW5fZGVsYXlfbnMpCisgICAgICAgICAgICAgICAgcHJvY2Vzcy5zYW1wbGVzLmFwcGVuZChQcm9jZXNzU2FtcGxlKHRpbWUsIHN0YXRlLCBjcHVTYW1wbGUpKQorCisgICAgICAgICAgICBwcm9jZXNzLmxhc3RfY3B1X25zID0gY3B1X25zCisgICAgICAgICAgICBwcm9jZXNzLmxhc3RfYmxraW9fZGVsYXlfbnMgPSBibGtpb19kZWxheV9ucworICAgICAgICAgICAgcHJvY2Vzcy5sYXN0X3N3YXBpbl9kZWxheV9ucyA9IHN3YXBpbl9kZWxheV9ucworICAgICAgICBsdGltZSA9IHRpbWUKKworICAgIGlmIGxlbiAodGltZWRfYmxvY2tzKSA8IDI6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBzdGFydFRpbWUgPSB0aW1lZF9ibG9ja3NbMF1bMF0KKyAgICBhdmdTYW1wbGVMZW5ndGggPSAobHRpbWUgLSBzdGFydFRpbWUpLyhsZW4odGltZWRfYmxvY2tzKS0xKQorCisgICAgcmV0dXJuIFByb2Nlc3NTdGF0cyAod3JpdGVyLCBwcm9jZXNzTWFwLCBsZW4gKHRpbWVkX2Jsb2NrcyksIGF2Z1NhbXBsZUxlbmd0aCwgc3RhcnRUaW1lLCBsdGltZSkKKworZGVmIF9wYXJzZV9wcm9jX3N0YXRfbG9nKGZpbGUpOgorICAgIHNhbXBsZXMgPSBbXQorICAgIGx0aW1lcyA9IE5vbmUKKyAgICBmb3IgdGltZSwgbGluZXMgaW4gX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKToKKyAgICAgICAgIyBza2lwIGVtdHB5IGxpbmVzCisgICAgICAgIGlmIG5vdCBsaW5lczoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgQ1BVIHRpbWVzIHt1c2VyLCBuaWNlLCBzeXN0ZW0sIGlkbGUsIGlvX3dhaXQsIGlycSwgc29mdGlycX0KKyAgICAgICAgdG9rZW5zID0gbGluZXNbMF0uc3BsaXQoKQorICAgICAgICB0aW1lcyA9IFsgaW50KHRva2VuKSBmb3IgdG9rZW4gaW4gdG9rZW5zWzE6XSBdCisgICAgICAgIGlmIGx0aW1lczoKKyAgICAgICAgICAgIHVzZXIgPSBmbG9hdCgodGltZXNbMF0gKyB0aW1lc1sxXSkgLSAobHRpbWVzWzBdICsgbHRpbWVzWzFdKSkKKyAgICAgICAgICAgIHN5c3RlbSA9IGZsb2F0KCh0aW1lc1syXSArIHRpbWVzWzVdICsgdGltZXNbNl0pIC0gKGx0aW1lc1syXSArIGx0aW1lc1s1XSArIGx0aW1lc1s2XSkpCisgICAgICAgICAgICBpZGxlID0gZmxvYXQodGltZXNbM10gLSBsdGltZXNbM10pCisgICAgICAgICAgICBpb3dhaXQgPSBmbG9hdCh0aW1lc1s0XSAtIGx0aW1lc1s0XSkKKworICAgICAgICAgICAgYVN1bSA9IG1heCh1c2VyICsgc3lzdGVtICsgaWRsZSArIGlvd2FpdCwgMSkKKyAgICAgICAgICAgIHNhbXBsZXMuYXBwZW5kKCBDUFVTYW1wbGUodGltZSwgdXNlci9hU3VtLCBzeXN0ZW0vYVN1bSwgaW93YWl0L2FTdW0pICkKKworICAgICAgICBsdGltZXMgPSB0aW1lcworICAgICAgICAjIHNraXAgdGhlIHJlc3Qgb2Ygc3RhdGlzdGljcyBsaW5lcworICAgIHJldHVybiBzYW1wbGVzCisKK2RlZiBfcGFyc2VfcHJvY19kaXNrX3N0YXRfbG9nKGZpbGUsIG51bUNwdSk6CisgICAgIiIiCisgICAgUGFyc2UgZmlsZSBmb3IgZGlzayBzdGF0cywgYnV0IG9ubHkgbG9vayBhdCB0aGUgd2hvbGUgZGV2aWNlLCBlZy4gc2RhLAorICAgIG5vdCBzZGExLCBzZGEyIGV0Yy4gVGhlIGZvcm1hdCBvZiByZWxldmFudCBsaW5lcyBzaG91bGQgYmU6CisgICAge21ham9yIG1pbm9yIG5hbWUgcmlvIHJtZXJnZSByc2VjdCBydXNlIHdpbyB3bWVyZ2Ugd3NlY3Qgd3VzZSBydW5uaW5nIHVzZSBhdmVxfQorICAgICIiIgorICAgIGRpc2tfcmVnZXhfcmUgPSByZS5jb21waWxlICgnXihbaHN2XWQufG10ZGJsb2NrXGR8bW1jYmxrXGR8Y2Npc3MvY1xkK2RcZCsuKikkJykKKworICAgICMgdGhpcyBnZXRzIGNhbGxlZCBhbiBhd2Z1bCBsb3QuCisgICAgZGVmIGlzX3JlbGV2YW50X2xpbmUobGluZXRva2Vucyk6CisgICAgICAgIGlmIGxlbihsaW5ldG9rZW5zKSAhPSAxNDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBkaXNrID0gbGluZXRva2Vuc1syXQorICAgICAgICByZXR1cm4gZGlza19yZWdleF9yZS5tYXRjaChkaXNrKQorCisgICAgZGlza19zdGF0X3NhbXBsZXMgPSBbXQorCisgICAgZm9yIHRpbWUsIGxpbmVzIGluIF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSk6CisgICAgICAgIHNhbXBsZSA9IERpc2tTdGF0U2FtcGxlKHRpbWUpCisgICAgICAgIHJlbGV2YW50X3Rva2VucyA9IFtsaW5ldG9rZW5zIGZvciBsaW5ldG9rZW5zIGluIG1hcCAobGFtYmRhIHg6IHguc3BsaXQoKSxsaW5lcykgaWYgaXNfcmVsZXZhbnRfbGluZShsaW5ldG9rZW5zKV0KKworICAgICAgICBmb3IgdG9rZW5zIGluIHJlbGV2YW50X3Rva2VuczoKKyAgICAgICAgICAgIGRpc2ssIHJzZWN0LCB3c2VjdCwgdXNlID0gdG9rZW5zWzJdLCBpbnQodG9rZW5zWzVdKSwgaW50KHRva2Vuc1s5XSksIGludCh0b2tlbnNbMTJdKQorICAgICAgICAgICAgc2FtcGxlLmFkZF9kaXNrZGF0YShbcnNlY3QsIHdzZWN0LCB1c2VdKQorCisgICAgICAgIGRpc2tfc3RhdF9zYW1wbGVzLmFwcGVuZChzYW1wbGUpCisKKyAgICBkaXNrX3N0YXRzID0gW10KKyAgICBmb3Igc2FtcGxlMSwgc2FtcGxlMiBpbiB6aXAoZGlza19zdGF0X3NhbXBsZXNbOi0xXSwgZGlza19zdGF0X3NhbXBsZXNbMTpdKToKKyAgICAgICAgaW50ZXJ2YWwgPSBzYW1wbGUxLnRpbWUgLSBzYW1wbGUyLnRpbWUKKyAgICAgICAgaWYgaW50ZXJ2YWwgPT0gMDoKKyAgICAgICAgICAgIGludGVydmFsID0gMQorICAgICAgICBzdW1zID0gWyBhIC0gYiBmb3IgYSwgYiBpbiB6aXAoc2FtcGxlMS5kaXNrZGF0YSwgc2FtcGxlMi5kaXNrZGF0YSkgXQorICAgICAgICByZWFkVHB1dCA9IHN1bXNbMF0gLyAyLjAgKiAxMDAuMCAvIGludGVydmFsCisgICAgICAgIHdyaXRlVHB1dCA9IHN1bXNbMV0gLyAyLjAgKiAxMDAuMCAvIGludGVydmFsCisgICAgICAgIHV0aWwgPSBmbG9hdCggc3Vtc1syXSApIC8gMTAgLyBpbnRlcnZhbCAvIG51bUNwdQorICAgICAgICB1dGlsID0gbWF4KDAuMCwgbWluKDEuMCwgdXRpbCkpCisgICAgICAgIGRpc2tfc3RhdHMuYXBwZW5kKERpc2tTYW1wbGUoc2FtcGxlMi50aW1lLCByZWFkVHB1dCwgd3JpdGVUcHV0LCB1dGlsKSkKKworICAgIHJldHVybiBkaXNrX3N0YXRzCisKK2RlZiBfcGFyc2VfcHJvY19tZW1pbmZvX2xvZyhmaWxlKToKKyAgICAiIiIKKyAgICBQYXJzZSBmaWxlIGZvciBnbG9iYWwgbWVtb3J5IHN0YXRpc3RpY3MuCisgICAgVGhlIGZvcm1hdCBvZiByZWxldmFudCBsaW5lcyBzaG91bGQgYmU6IF5rZXk6IHZhbHVlKCB1bml0KT8KKyAgICAiIiIKKyAgICB1c2VkX3ZhbHVlcyA9ICgnTWVtVG90YWwnLCAnTWVtRnJlZScsICdCdWZmZXJzJywgJ0NhY2hlZCcsICdTd2FwVG90YWwnLCAnU3dhcEZyZWUnLCkKKworICAgIG1lbV9zdGF0cyA9IFtdCisgICAgbWVtaW5mb19yZSA9IHJlLmNvbXBpbGUocicoW14gXHQ6XSspOlxzKihcZCspLionKQorCisgICAgZm9yIHRpbWUsIGxpbmVzIGluIF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSk6CisgICAgICAgIHNhbXBsZSA9IE1lbVNhbXBsZSh0aW1lKQorCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgbWF0Y2ggPSBtZW1pbmZvX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiSW52YWxpZCBtZW1pbmZvIGxpbmUgXCIlc1wiIiAlIG1hdGNoLmdyb3VwcygwKSkKKyAgICAgICAgICAgIHNhbXBsZS5hZGRfdmFsdWUobWF0Y2guZ3JvdXAoMSksIGludChtYXRjaC5ncm91cCgyKSkpCisKKyAgICAgICAgaWYgc2FtcGxlLnZhbGlkKCk6CisgICAgICAgICAgICBtZW1fc3RhdHMuYXBwZW5kKHNhbXBsZSkKKworICAgIHJldHVybiBtZW1fc3RhdHMKKworIyBpZiB3ZSBib290IHRoZSBrZXJuZWwgd2l0aDogaW5pdGNhbGxfZGVidWcgcHJpbnRrLnRpbWU9MSB3ZSBjYW4KKyMgZ2V0IGFsbCBtYW5uZXIgb2YgaW50ZXJlc3RpbmcgZGF0YSBmcm9tIHRoZSBkbWVzZyBvdXRwdXQKKyMgV2UgdHVybiB0aGlzIGludG8gYSBwc2V1ZG8tcHJvY2VzcyB0cmVlOiBlYWNoIGV2ZW50IGlzCisjIGNoYXJhY3RlcmlzZWQgYnkgYQorIyB3ZSBkb24ndCB0cnkgdG8gZGV0ZWN0IGEgImtlcm5lbCBmaW5pc2hlZCIgc3RhdGUgLSBzaW5jZSB0aGUga2VybmVsCisjIGNvbnRpbnVlcyB0byBkbyBpbnRlcmVzdGluZyB0aGluZ3MgYWZ0ZXIgaW5pdCBpcyBjYWxsZWQuCisjCisjIHNhbXBsZSBpbnB1dDoKKyMgWyAgICAwLjAwMDAwMF0gQUNQSTogRkFDUCAzZjRmYzAwMCAwMDBGNCAodjA0IElOVEVMICBOYXBhICAgICAwMDAwMDAwMSBNU0ZUIDAxMDAwMDEzKQorIyAuLi4KKyMgWyAgICAwLjAzOTk5M10gY2FsbGluZyAgbWlncmF0aW9uX2luaXQrMHgwLzB4NmIgQCAxCisjIFsgICAgMC4wMzk5OTNdIGluaXRjYWxsIG1pZ3JhdGlvbl9pbml0KzB4MC8weDZiIHJldHVybmVkIDEgYWZ0ZXIgMCB1c2VjcworZGVmIF9wYXJzZV9kbWVzZyh3cml0ZXIsIGZpbGUpOgorICAgIHRpbWVzdGFtcF9yZSA9IHJlLmNvbXBpbGUgKCJeXFtccyooXGQrXC5cZCspXHMqXVxzKyguKikkIikKKyAgICBzcGxpdF9yZSA9IHJlLmNvbXBpbGUgKCJeKFxTKylccysoW1xTXCtfLV0rKSAoLiopJCIpCisgICAgcHJvY2Vzc01hcCA9IHt9CisgICAgaWR4ID0gMAorICAgIGluYyA9IDEuMCAvIDEwMDAwMDAKKyAgICBrZXJuZWwgPSBQcm9jZXNzKHdyaXRlciwgaWR4LCAiay1ib290IiwgMCwgMC4xKQorICAgIHByb2Nlc3NNYXBbJ2stYm9vdCddID0ga2VybmVsCisgICAgYmFzZV90cyA9IEZhbHNlCisgICAgbWF4X3RzID0gMAorICAgIGZvciBsaW5lIGluIGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdCgnXG4nKToKKyAgICAgICAgdCA9IHRpbWVzdGFtcF9yZS5tYXRjaCAobGluZSkKKyAgICAgICAgaWYgdCBpcyBOb25lOgorIyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImR1ZmYgdGltZXN0YW1wICIgKyBsaW5lCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHRpbWVfbXMgPSBmbG9hdCAodC5ncm91cCgxKSkgKiAxMDAwCisgICAgICAgICMgbG9va3MgbGlrZSB3ZSBtYXkgaGF2ZSBhIGh1Z2UgZGlmZiBhZnRlciB0aGUgY2xvY2sKKyAgICAgICAgIyBoYXMgYmVlbiBzZXQgdXAuIFRoaXMgY291bGQgbGVhZCB0byBodWdlIGdyYXBoOgorICAgICAgICAjIHNvIGh1Z2Ugd2Ugd2lsbCBiZSBraWxsZWQgYnkgdGhlIE9PTS4KKyAgICAgICAgIyBTbyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwbGFpbiB0aW1lc3RhbXAgd2Ugd2lsbAorICAgICAgICAjIHVzZSBhIGRlbHRhIHRvIGZpcnN0IG9uZSBhbmQgc2tpcCB0aGUgZmlyc3Qgb25lCisgICAgICAgICMgZm9yIGNvbnZlbmllbmNlCisgICAgICAgIGlmIG1heF90cyA9PSAwIGFuZCBub3QgYmFzZV90cyBhbmQgdGltZV9tcyA+IDEwMDA6CisgICAgICAgICAgICBiYXNlX3RzID0gdGltZV9tcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbWF4X3RzID0gbWF4KHRpbWVfbXMsIG1heF90cykKKyAgICAgICAgaWYgYmFzZV90czoKKyMgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJmc2NrZWQgY2xvY2s6IHVzZWQgJWYgaW5zdGVhZCBvZiAlZiIgJSAodGltZV9tcyAtIGJhc2VfdHMsIHRpbWVfbXMpCisgICAgICAgICAgICB0aW1lX21zIC09IGJhc2VfdHMKKyAgICAgICAgbSA9IHNwbGl0X3JlLm1hdGNoICh0Lmdyb3VwKDIpKQorCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisjICAgICAgICAgICAgICAgcHJpbnQgIm1hdGNoOiAnJXMnIiAlIChtLmdyb3VwKDEpKQorICAgICAgICB0eXBlID0gbS5ncm91cCgxKQorICAgICAgICBmdW5jID0gbS5ncm91cCgyKQorICAgICAgICByZXN0ID0gbS5ncm91cCgzKQorCisgICAgICAgIGlmIHQuZ3JvdXAoMikuc3RhcnRzd2l0aCAoJ1dyaXRlIHByb3RlY3RpbmcgdGhlJykgb3IgXAorICAgICAgICAgICB0Lmdyb3VwKDIpLnN0YXJ0c3dpdGggKCdGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5Jyk6CisgICAgICAgICAgICBrZXJuZWwuZHVyYXRpb24gPSB0aW1lX21zIC8gMTAKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyMgICAgICAgICAgICAgICBwcmludCAiZm9vOiAnJXMnICclcycgJyVzJyIgJSAodHlwZSwgZnVuYywgcmVzdCkKKyAgICAgICAgaWYgdHlwZSA9PSAiY2FsbGluZyI6CisgICAgICAgICAgICBwcGlkID0ga2VybmVsLnBpZAorICAgICAgICAgICAgcCA9IHJlLm1hdGNoICgiXEAgKFxkKykiLCByZXN0KQorICAgICAgICAgICAgaWYgcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwcGlkID0gZmxvYXQgKHAuZ3JvdXAoMSkpIC8vIDEwMDAKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIm1hdGNoOiAnJXMnICgnJWcnKSBhdCAnJXMnIiAlIChmdW5jLCBwcGlkLCB0aW1lX21zKQorICAgICAgICAgICAgbmFtZSA9IGZ1bmMuc3BsaXQgKCcrJywgMSkgWzBdCisgICAgICAgICAgICBpZHggKz0gaW5jCisgICAgICAgICAgICBwcm9jZXNzTWFwW2Z1bmNdID0gUHJvY2Vzcyh3cml0ZXIsIHBwaWQgKyBpZHgsIG5hbWUsIHBwaWQsIHRpbWVfbXMgLyAxMCkKKyAgICAgICAgZWxpZiB0eXBlID09ICJpbml0Y2FsbCI6CisjICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiZmluaXNoZWQ6ICclcycgYXQgJyVzJyIgJSAoZnVuYywgdGltZV9tcykKKyAgICAgICAgICAgIGlmIGZ1bmMgaW4gcHJvY2Vzc01hcDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzID0gcHJvY2Vzc01hcFtmdW5jXQorICAgICAgICAgICAgICAgIHByb2Nlc3MuZHVyYXRpb24gPSAodGltZV9tcyAvIDEwKSAtIHByb2Nlc3Muc3RhcnRfdGltZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgiY29ycnVwdGVkIGluaXQgY2FsbCBmb3IgJXMiICUgKGZ1bmMpKQorCisgICAgICAgIGVsaWYgdHlwZSA9PSAiYXN5bmNfd2FpdGluZyIgb3IgdHlwZSA9PSAiYXN5bmNfY29udGludWluZyI6CisgICAgICAgICAgICBjb250aW51ZSAjIGlnbm9yZQorCisgICAgcmV0dXJuIHByb2Nlc3NNYXAudmFsdWVzKCkKKworIworIyBQYXJzZSBiaW5hcnkgcGFjY3QgYWNjb3VudGluZyBmaWxlIG91dHB1dCBpZiB3ZSBoYXZlIG9uZQorIyBjZi4gL3Vzci9pbmNsdWRlL2xpbnV4L2FjY3QuaAorIworZGVmIF9wYXJzZV9wYWNjdCh3cml0ZXIsIGZpbGUpOgorICAgICMgcmVhZCBMRSBpbnQzMgorICAgIGRlZiBfcmVhZF9sZV9pbnQzMihmaWxlKToKKyAgICAgICAgYnl0cyA9IGZpbGUucmVhZCg0KQorICAgICAgICByZXR1cm4gKG9yZChieXRzWzBdKSkgICAgICAgfCAob3JkKGJ5dHNbMV0pIDw8IDgpIHwgXAorICAgICAgICAgICAgICAgKG9yZChieXRzWzJdKSA8PCAxNikgfCAob3JkKGJ5dHNbM10pIDw8IDI0KQorCisgICAgcGFyZW50X21hcCA9IHt9CisgICAgcGFyZW50X21hcFswXSA9IDAKKyAgICB3aGlsZSBmaWxlLnJlYWQoMSkgIT0gIiI6ICMgaWdub3JlIGZsYWdzCisgICAgICAgIHZlciA9IGZpbGUucmVhZCgxKQorICAgICAgICBpZiBvcmQodmVyKSA8IDM6CisgICAgICAgICAgICBwcmludCgiSW52YWxpZCB2ZXJzaW9uIDB4JXgiICUgKG9yZCh2ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZmlsZS5zZWVrICgxNCwgMSkgICAgICMgdXNlciwgZ3JvdXAgZXRjLgorICAgICAgICBwaWQgPSBfcmVhZF9sZV9pbnQzMiAoZmlsZSkKKyAgICAgICAgcHBpZCA9IF9yZWFkX2xlX2ludDMyIChmaWxlKQorIyAgICAgICAgICAgICAgIHByaW50ICJQYXJlbnQgb2YgJWQgaXMgJWQiICUgKHBpZCwgcHBpZCkKKyAgICAgICAgcGFyZW50X21hcFtwaWRdID0gcHBpZAorICAgICAgICBmaWxlLnNlZWsgKDQgKyA0ICsgMTYsIDEpICMgdGltaW5ncworICAgICAgICBmaWxlLnNlZWsgKDE2LCAxKSAgICAgICAgICMgYWNjdF9jb21tCisgICAgcmV0dXJuIHBhcmVudF9tYXAKKworZGVmIF9wYXJzZV9wYXRlcm5pdHlfbG9nKHdyaXRlciwgZmlsZSk6CisgICAgcGFyZW50X21hcCA9IHt9CisgICAgcGFyZW50X21hcFswXSA9IDAKKyAgICBmb3IgbGluZSBpbiBmaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXQoJ1xuJyk6CisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxlbXMgPSBsaW5lLnNwbGl0KCcgJykgIyA8Q2hpbGQ+IDxQYXJlbnQ+CisgICAgICAgIGlmIGxlbiAoZWxlbXMpID49IDI6CisjICAgICAgICAgICAgICAgICAgICAgICBwcmludCAicGF0ZXJuaXR5IG9mICVkIGlzICVkIiAlIChpbnQoZWxlbXNbMF0pLCBpbnQoZWxlbXNbMV0pKQorICAgICAgICAgICAgcGFyZW50X21hcFtpbnQoZWxlbXNbMF0pXSA9IGludChlbGVtc1sxXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJPZGQgcGF0ZXJuaXR5IGxpbmUgJyVzJyIgJSAobGluZSkpCisgICAgcmV0dXJuIHBhcmVudF9tYXAKKworZGVmIF9wYXJzZV9jbWRsaW5lX2xvZyh3cml0ZXIsIGZpbGUpOgorICAgIGNtZExpbmVzID0ge30KKyAgICBmb3IgYmxvY2sgaW4gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLnNwbGl0KCdcblxuJyk6CisgICAgICAgIGxpbmVzID0gYmxvY2suc3BsaXQoJ1xuJykKKyAgICAgICAgaWYgbGVuIChsaW5lcykgPj0gMzoKKyMgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJMaW5lcyAnJXMnIiAlIChsaW5lc1swXSkKKyAgICAgICAgICAgIHBpZCA9IGludCAobGluZXNbMF0pCisgICAgICAgICAgICB2YWx1ZXMgPSB7fQorICAgICAgICAgICAgdmFsdWVzWydleGUnXSA9IGxpbmVzWzFdLmxzdHJpcCgnOicpCisgICAgICAgICAgICBhcmdzID0gbGluZXNbMl0ubHN0cmlwKCc6Jykuc3BsaXQoJ1wwJykKKyAgICAgICAgICAgIGFyZ3MucG9wKCkKKyAgICAgICAgICAgIHZhbHVlc1snYXJncyddID0gYXJncworICAgICAgICAgICAgY21kTGluZXNbcGlkXSA9IHZhbHVlcworICAgIHJldHVybiBjbWRMaW5lcworCitkZWYgZ2V0X251bV9jcHVzKGhlYWRlcnMpOgorICAgICIiIkdldCB0aGUgbnVtYmVyIG9mIENQVXMgZnJvbSB0aGUgc3lzdGVtLmNwdSBoZWFkZXIgcHJvcGVydHkuIEFzIHRoZQorICAgIENQVSB1dGlsaXphdGlvbiBncmFwaHMgYXJlIHJlbGF0aXZlLCB0aGUgbnVtYmVyIG9mIENQVXMgY3VycmVudGx5IG1ha2VzCisgICAgbm8gZGlmZmVyZW5jZS4iIiIKKyAgICBpZiBoZWFkZXJzIGlzIE5vbmU6CisgICAgICAgIHJldHVybiAxCisgICAgaWYgaGVhZGVycy5nZXQoInN5c3RlbS5jcHUubnVtIik6CisgICAgICAgIHJldHVybiBtYXggKGludCAoaGVhZGVycy5nZXQoInN5c3RlbS5jcHUubnVtIikpLCAxKQorICAgIGNwdV9tb2RlbCA9IGhlYWRlcnMuZ2V0KCJzeXN0ZW0uY3B1IikKKyAgICBpZiBjcHVfbW9kZWwgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIDEKKyAgICBtYXQgPSByZS5tYXRjaCgiLipcXCgoXFxkKylcXCkiLCBjcHVfbW9kZWwpCisgICAgaWYgbWF0IGlzIE5vbmU6CisgICAgICAgIHJldHVybiAxCisgICAgcmV0dXJuIG1heCAoaW50KG1hdC5ncm91cCgxKSksIDEpCisKK2RlZiBfZG9fcGFyc2Uod3JpdGVyLCBzdGF0ZSwgZmlsZW5hbWUsIGZpbGUpOgorICAgIHdyaXRlci5pbmZvKCJwYXJzaW5nICclcyciICUgZmlsZW5hbWUpCisgICAgdDEgPSBjbG9jaygpCisgICAgcGF0aHMgPSBmaWxlbmFtZS5zcGxpdCgiLyIpCisgICAgdGFzayA9IHBhdGhzWy0xXQorICAgIHBuID0gcGF0aHNbLTJdCisgICAgc3RhcnQgPSBOb25lCisgICAgZW5kID0gTm9uZQorICAgIGZvciBsaW5lIGluIGZpbGU6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiU3RhcnRlZDoiKToKKyAgICAgICAgICAgIHN0YXJ0ID0gaW50KGZsb2F0KGxpbmUuc3BsaXQoKVstMV0pKQorICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiRW5kZWQ6Iik6CisgICAgICAgICAgICBlbmQgPSBpbnQoZmxvYXQobGluZS5zcGxpdCgpWy0xXSkpCisgICAgaWYgc3RhcnQgYW5kIGVuZDoKKyAgICAgICAgc3RhdGUuYWRkX3Byb2Nlc3MocG4gKyAiOiIgKyB0YXNrLCBzdGFydCwgZW5kKQorICAgIHQyID0gY2xvY2soKQorICAgIHdyaXRlci5pbmZvKCIgICVzIHNlY29uZHMiICUgc3RyKHQyLXQxKSkKKyAgICByZXR1cm4gc3RhdGUKKworZGVmIHBhcnNlX2ZpbGUod3JpdGVyLCBzdGF0ZSwgZmlsZW5hbWUpOgorICAgIGlmIHN0YXRlLmZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgIHN0YXRlLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmaWxlOgorICAgICAgICByZXR1cm4gX2RvX3BhcnNlKHdyaXRlciwgc3RhdGUsIGZpbGVuYW1lLCBmaWxlKQorCitkZWYgcGFyc2VfcGF0aHMod3JpdGVyLCBzdGF0ZSwgcGF0aHMpOgorICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICBpZiBzdGF0ZS5maWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgc3RhdGUuZmlsZW5hbWUgPSBwYXRoCisgICAgICAgIHJvb3QsIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQocGF0aCkKKyAgICAgICAgaWYgbm90KG9zLnBhdGguZXhpc3RzKHBhdGgpKToKKyAgICAgICAgICAgIHdyaXRlci53YXJuKCJ3YXJuaW5nOiBwYXRoICclcycgZG9lcyBub3QgZXhpc3QsIGlnbm9yaW5nLiIgJSBwYXRoKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgI3N0YXRlLmZpbGVuYW1lID0gcGF0aAorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgZmlsZXMgPSBzb3J0ZWQoW29zLnBhdGguam9pbihwYXRoLCBmKSBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpXSkKKyAgICAgICAgICAgIHN0YXRlID0gcGFyc2VfcGF0aHMod3JpdGVyLCBzdGF0ZSwgZmlsZXMpCisgICAgICAgIGVsaWYgZXh0ZW5zaW9uIGluIFsiLnRhciIsICIudGd6IiwgIi5neiJdOgorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09ICIuZ3oiOgorICAgICAgICAgICAgICAgIHJvb3QsIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQocm9vdCkKKyAgICAgICAgICAgICAgICBpZiBleHRlbnNpb24gIT0gIi50YXIiOgorICAgICAgICAgICAgICAgICAgICB3cml0ZXIud2Fybigid2FybmluZzogY2FuIG9ubHkgaGFuZGxlIHppcHBlZCB0YXIgZmlsZXMsIG5vdCB6aXBwZWQgJyVzJy1maWxlczsgaWdub3JpbmciICUgZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdGYgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd3JpdGVyLnN0YXR1cygicGFyc2luZyAnJXMnIiAlIHBhdGgpCisgICAgICAgICAgICAgICAgdGYgPSB0YXJmaWxlLm9wZW4ocGF0aCwgJ3I6KicpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gdGYuZ2V0bmFtZXMoKToKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBfZG9fcGFyc2Uod3JpdGVyLCBzdGF0ZSwgbmFtZSwgdGYuZXh0cmFjdGZpbGUobmFtZSkpCisgICAgICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiZXJyb3I6IGNvdWxkIG5vdCByZWFkIHRhcmZpbGUgJyVzJzogJXMuIiAlIChwYXRoLCBlcnJvcikpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIHRmICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRmLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXRlID0gcGFyc2VfZmlsZSh3cml0ZXIsIHN0YXRlLCBwYXRoKQorICAgIHJldHVybiBzdGF0ZQorCitkZWYgc3BsaXRfcmVzKHJlcywgb3B0aW9ucyk6CisgICAgIiIiIFNwbGl0IHRoZSByZXMgaW50byBuIHBpZWNlcyAiIiIKKyAgICByZXNfbGlzdCA9IFtdCisgICAgaWYgb3B0aW9ucy5udW0gPiAxOgorICAgICAgICBzX2xpc3QgPSBzb3J0ZWQocmVzLnN0YXJ0LmtleXMoKSkKKyAgICAgICAgZnJhZ19zaXplID0gbGVuKHNfbGlzdCkgLyBmbG9hdChvcHRpb25zLm51bSkKKyAgICAgICAgIyBOZWVkIHRoZSB0b3AgdmFsdWUKKyAgICAgICAgaWYgZnJhZ19zaXplID4gaW50KGZyYWdfc2l6ZSk6CisgICAgICAgICAgICBmcmFnX3NpemUgPSBpbnQoZnJhZ19zaXplICsgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyYWdfc2l6ZSA9IGludChmcmFnX3NpemUpCisKKyAgICAgICAgc3RhcnQgPSAwCisgICAgICAgIGVuZCA9IGZyYWdfc2l6ZQorICAgICAgICB3aGlsZSBzdGFydCA8IGVuZDoKKyAgICAgICAgICAgIHN0YXRlID0gVHJhY2UoTm9uZSwgW10sIE5vbmUpCisgICAgICAgICAgICBpZiBvcHRpb25zLmZ1bGxfdGltZToKKyAgICAgICAgICAgICAgICBzdGF0ZS5taW4gPSBtaW4ocmVzLnN0YXJ0LmtleXMoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5tYXggPSBtYXgocmVzLmVuZC5rZXlzKCkpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzdGFydCwgZW5kKToKKyAgICAgICAgICAgICAgICAjIEFkZCB0aGlzIGxpbmUgZm9yIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICNzdGF0ZS5hZGRfcHJvY2VzcyhwbiArICI6IiArIHRhc2ssIHN0YXJ0LCBlbmQpCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcmVzLnN0YXJ0W3NfbGlzdFtpXV06CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFkZF9wcm9jZXNzKHAsIHNfbGlzdFtpXSwgcmVzLnByb2Nlc3Nlc1twXVsxXSkKKyAgICAgICAgICAgIHN0YXJ0ID0gZW5kCisgICAgICAgICAgICBlbmQgPSBlbmQgKyBmcmFnX3NpemUKKyAgICAgICAgICAgIGlmIGVuZCA+IGxlbihzX2xpc3QpOgorICAgICAgICAgICAgICAgIGVuZCA9IGxlbihzX2xpc3QpCisgICAgICAgICAgICByZXNfbGlzdC5hcHBlbmQoc3RhdGUpCisgICAgZWxzZToKKyAgICAgICAgcmVzX2xpc3QuYXBwZW5kKHJlcykKKyAgICByZXR1cm4gcmVzX2xpc3QKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wcm9jZXNzX3RyZWUucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcHJvY2Vzc190cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODgxMTAKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcHJvY2Vzc190cmVlLnB5CkBAIC0wLDAgKzEsMjkyIEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2NsYXNzIFByb2Nlc3NUcmVlOgorICAgICIiIlByb2Nlc3NUcmVlIGVuY2Fwc3VsYXRlcyBhIHByb2Nlc3MgdHJlZS4gIFRoZSB0cmVlIGlzIGJ1aWx0IGZyb20gbG9nIGZpbGVzCisgICAgICAgcmV0cmlldmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiAgV2hlbiBidWlsZGluZyB0aGUgcHJvY2VzcyB0cmVlLCBpdCBpcworICAgICAgIHBydW5lZCBhbmQgbWVyZ2VkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdmlzdWFsaXplIGl0IGluIGEgY29tcHJlaGVuc2libGUKKyAgICAgICBtYW5uZXIuCisKKyAgICAgICBUaGUgZm9sbG93aW5nIHBydW5pbmcgdGVjaG5pcXVlcyBhcmUgdXNlZDoKKworICAgICAgICAqIGlkbGUgcHJvY2Vzc2VzIHRoYXQga2VlcCBydW5uaW5nIGR1cmluZyB0aGUgbGFzdCBwcm9jZXNzIHNhbXBsZQorICAgICAgICAgICh3aGljaCBpcyBhIGhldXJpc3RpYyBmb3IgYSBiYWNrZ3JvdW5kIHByb2Nlc3NlcykgYXJlIHJlbW92ZWQsCisgICAgICAgICogc2hvcnQtbGl2ZWQgcHJvY2Vzc2VzIChpLmUuIHByb2Nlc3NlcyB0aGF0IG9ubHkgbGl2ZSBmb3IgdGhlCisgICAgICAgICAgZHVyYXRpb24gb2YgdHdvIHNhbXBsZXMgb3IgbGVzcykgYXJlIHJlbW92ZWQsCisgICAgICAgICogdGhlIHByb2Nlc3NlcyB1c2VkIGJ5IHRoZSBib290IGxvZ2dlciBhcmUgcmVtb3ZlZCwKKyAgICAgICAgKiBleHBsb2RlcnMgKGkuZS4gcHJvY2Vzc2VzIHRoYXQgYXJlIGtub3duIHRvIHNwYXduIGh1Z2UgbWVhbmluZ2xlc3MKKyAgICAgICAgICBwcm9jZXNzIHN1YnRyZWVzKSBoYXZlIHRoZWlyIHN1YnRyZWVzIG1lcmdlZCB0b2dldGhlciwKKyAgICAgICAgKiBzaWJsaW5ncyAoaS5lLiBwcm9jZXNzZXMgd2l0aCB0aGUgc2FtZSBjb21tYW5kIGxpbmUgbGl2aW5nCisgICAgICAgICAgY29uY3VycmVudGx5IC0tIHRocmVhZCBoZXVyaXN0aWMpIGFyZSBtZXJnZWQgdG9nZXRoZXIsCisgICAgICAgICogcHJvY2VzcyBydW5zICh1bmFyeSB0cmVlcyB3aXRoIHByb2Nlc3NlcyBzaGFyaW5nIHRoZSBjb21tYW5kIGxpbmUpCisgICAgICAgICAgYXJlIG1lcmdlZCB0b2dldGhlci4KKworICAgICIiIgorICAgIExPR0dFUl9QUk9DID0gJ2Jvb3RjaGFydC1jb2xsZScKKyAgICBFWFBMT0RFUl9QUk9DRVNTRVMgPSBzZXQoWydod3VwJ10pCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyLCBrZXJuZWwsIHBzc3RhdHMsIHNhbXBsZV9wZXJpb2QsCisgICAgICAgICAgICAgICAgIG1vbml0b3JlZEFwcCwgcHJ1bmUsIGlkbGUsIHRhc2tzdGF0cywKKyAgICAgICAgICAgICAgICAgYWNjdXJhdGVfcGFyZW50YWdlLCBmb3JfdGVzdGluZyA9IEZhbHNlKToKKyAgICAgICAgc2VsZi53cml0ZXIgPSB3cml0ZXIKKyAgICAgICAgc2VsZi5wcm9jZXNzX3RyZWUgPSBbXQorICAgICAgICBzZWxmLnRhc2tzdGF0cyA9IHRhc2tzdGF0cworICAgICAgICBpZiBwc3N0YXRzIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9jZXNzX2xpc3QgPSBrZXJuZWwKKyAgICAgICAgZWxpZiBrZXJuZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3NfbGlzdCA9IHBzc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2Nlc3NfbGlzdCA9IGxpc3Qoa2VybmVsKSArIGxpc3QocHNzdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5wcm9jZXNzX2xpc3QgPSBzb3J0ZWQocHJvY2Vzc19saXN0LCBrZXkgPSBsYW1iZGEgcDogcC5waWQpCisgICAgICAgIHNlbGYuc2FtcGxlX3BlcmlvZCA9IHNhbXBsZV9wZXJpb2QKKworICAgICAgICBzZWxmLmJ1aWxkKCkKKyAgICAgICAgaWYgbm90IGFjY3VyYXRlX3BhcmVudGFnZToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX3BwaWRzX2Zvcl9kYWVtb25zKHNlbGYucHJvY2Vzc19saXN0KQorCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHNlbGYuZ2V0X3N0YXJ0X3RpbWUoc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYuZW5kX3RpbWUgPSBzZWxmLmdldF9lbmRfdGltZShzZWxmLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgc2VsZi5kdXJhdGlvbiA9IHNlbGYuZW5kX3RpbWUgLSBzZWxmLnN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5pZGxlID0gaWRsZQorCisgICAgICAgIGlmIGZvcl90ZXN0aW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVtb3ZlZCA9IHNlbGYubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc190cmVlLCBzZWxmLkxPR0dFUl9QUk9DLCBtb25pdG9yZWRBcHAsIEZhbHNlKQorICAgICAgICB3cml0ZXIuc3RhdHVzKCJtZXJnZWQgJWkgbG9nZ2VyIHByb2Nlc3NlcyIgJSByZW1vdmVkKQorCisgICAgICAgIGlmIHBydW5lOgorICAgICAgICAgICAgcF9wcm9jZXNzZXMgPSBzZWxmLnBydW5lKHNlbGYucHJvY2Vzc190cmVlLCBOb25lKQorICAgICAgICAgICAgcF9leHBsb2RlcnMgPSBzZWxmLm1lcmdlX2V4cGxvZGVycyhzZWxmLnByb2Nlc3NfdHJlZSwgc2VsZi5FWFBMT0RFUl9QUk9DRVNTRVMpCisgICAgICAgICAgICBwX3RocmVhZHMgPSBzZWxmLm1lcmdlX3NpYmxpbmdzKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICAgICAgcF9ydW5zID0gc2VsZi5tZXJnZV9ydW5zKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICAgICAgd3JpdGVyLnN0YXR1cygicHJ1bmVkICVpIHByb2Nlc3MsICVpIGV4cGxvZGVycywgJWkgdGhyZWFkcywgYW5kICVpIHJ1bnMiICUgKHBfcHJvY2Vzc2VzLCBwX2V4cGxvZGVycywgcF90aHJlYWRzLCBwX3J1bnMpKQorCisgICAgICAgIHNlbGYuc29ydChzZWxmLnByb2Nlc3NfdHJlZSkKKworICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBzZWxmLmdldF9zdGFydF90aW1lKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICBzZWxmLmVuZF90aW1lID0gc2VsZi5nZXRfZW5kX3RpbWUoc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYuZHVyYXRpb24gPSBzZWxmLmVuZF90aW1lIC0gc2VsZi5zdGFydF90aW1lCisKKyAgICAgICAgc2VsZi5udW1fcHJvYyA9IHNlbGYubnVtX25vZGVzKHNlbGYucHJvY2Vzc190cmVlKQorCisgICAgZGVmIGJ1aWxkKHNlbGYpOgorICAgICAgICAiIiJCdWlsZCB0aGUgcHJvY2VzcyB0cmVlIGZyb20gdGhlIGxpc3Qgb2YgdG9wIHNhbXBsZXMuIiIiCisgICAgICAgIHNlbGYucHJvY2Vzc190cmVlID0gW10KKyAgICAgICAgZm9yIHByb2MgaW4gc2VsZi5wcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICBpZiBub3QgcHJvYy5wYXJlbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3RyZWUuYXBwZW5kKHByb2MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2MucGFyZW50LmNoaWxkX2xpc3QuYXBwZW5kKHByb2MpCisKKyAgICBkZWYgc29ydChzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJTb3J0IHByb2Nlc3MgdHJlZS4iIiIKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgcC5jaGlsZF9saXN0LnNvcnQoa2V5ID0gbGFtYmRhIHA6IHAucGlkKQorICAgICAgICAgICAgc2VsZi5zb3J0KHAuY2hpbGRfbGlzdCkKKworICAgIGRlZiBudW1fbm9kZXMoc2VsZiwgcHJvY2Vzc19saXN0KToKKyAgICAgICAgIkNvdW50cyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBzcGVjaWZpZWQgcHJvY2VzcyB0cmVlLiIiIgorICAgICAgICBub2RlcyA9IDAKKyAgICAgICAgZm9yIHByb2MgaW4gcHJvY2Vzc19saXN0OgorICAgICAgICAgICAgbm9kZXMgPSBub2RlcyArIHNlbGYubnVtX25vZGVzKHByb2MuY2hpbGRfbGlzdCkKKyAgICAgICAgcmV0dXJuIG5vZGVzICsgbGVuKHByb2Nlc3NfbGlzdCkKKworICAgIGRlZiBnZXRfc3RhcnRfdGltZShzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdGFydCB0aW1lIG9mIHRoZSBwcm9jZXNzIHN1YnRyZWUuICBUaGlzIGlzIHRoZSBzdGFydAorICAgICAgICAgICB0aW1lIG9mIHRoZSBlYXJsaWVzdCBwcm9jZXNzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDAwMAorICAgICAgICByZXR1cm4gbWluKCBbbWluKHByb2Muc3RhcnRfdGltZSwgc2VsZi5nZXRfc3RhcnRfdGltZShwcm9jLmNoaWxkX2xpc3QpKSBmb3IgcHJvYyBpbiBwcm9jZXNzX3N1YnRyZWVdICkKKworICAgIGRlZiBnZXRfZW5kX3RpbWUoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZW5kIHRpbWUgb2YgdGhlIHByb2Nlc3Mgc3VidHJlZS4gIFRoaXMgaXMgdGhlIGVuZCB0aW1lCisgICAgICAgICAgIG9mIHRoZSBsYXN0IGNvbGxlY3RlZCBzYW1wbGUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBwcm9jZXNzX3N1YnRyZWU6CisgICAgICAgICAgICByZXR1cm4gLTEwMDAwMDAwMAorICAgICAgICByZXR1cm4gbWF4KCBbbWF4KHByb2Muc3RhcnRfdGltZSArIHByb2MuZHVyYXRpb24sIHNlbGYuZ2V0X2VuZF90aW1lKHByb2MuY2hpbGRfbGlzdCkpIGZvciBwcm9jIGluIHByb2Nlc3Nfc3VidHJlZV0gKQorCisgICAgZGVmIGdldF9tYXhfcGlkKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG1heCBQSUQgZm91bmQgaW4gdGhlIHByb2Nlc3MgdHJlZS4iIiIKKyAgICAgICAgaWYgbm90IHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIHJldHVybiAtMTAwMDAwMDAwCisgICAgICAgIHJldHVybiBtYXgoIFttYXgocHJvYy5waWQsIHNlbGYuZ2V0X21heF9waWQocHJvYy5jaGlsZF9saXN0KSkgZm9yIHByb2MgaW4gcHJvY2Vzc19zdWJ0cmVlXSApCisKKyAgICBkZWYgdXBkYXRlX3BwaWRzX2Zvcl9kYWVtb25zKHNlbGYsIHByb2Nlc3NfbGlzdCk6CisgICAgICAgICIiIkZlZG9yYSBoYWNrOiB3aGVuIGxvYWRpbmcgdGhlIHN5c3RlbSBzZXJ2aWNlcyBmcm9tIHJjLCBydW51c2VyKDEpCisgICAgICAgICAgIGlzIHVzZWQuICBUaGlzIHNldHMgdGhlIFBQSUQgb2YgYWxsIGRhZW1vbnMgdG8gMSwgc2tld2luZworICAgICAgICAgICB0aGUgcHJvY2VzcyB0cmVlLiAgVHJ5IHRvIGRldGVjdCB0aGlzIGFuZCBzZXQgdGhlIFBQSUQgb2YKKyAgICAgICAgICAgdGhlc2UgcHJvY2Vzc2VzIHRoZSBQSUQgb2YgcmMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJjc3RhcnRwaWQgPSAtMQorICAgICAgICByY2VuZHBpZCA9IC0xCisgICAgICAgIHJjcHJvYyA9IE5vbmUKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19saXN0OgorICAgICAgICAgICAgaWYgcC5jbWQgPT0gInJjIiBhbmQgcC5wcGlkIC8vIDEwMDAgPT0gMToKKyAgICAgICAgICAgICAgICByY3Byb2MgPSBwCisgICAgICAgICAgICAgICAgcmNzdGFydHBpZCA9IHAucGlkCisgICAgICAgICAgICAgICAgcmNlbmRwaWQgPSBzZWxmLmdldF9tYXhfcGlkKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgaWYgcmNzdGFydHBpZCAhPSAtMSBhbmQgcmNlbmRwaWQgIT0gLTE6CisgICAgICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICAgICAgaWYgcC5waWQgPiByY3N0YXJ0cGlkIGFuZCBwLnBpZCA8IHJjZW5kcGlkIGFuZCBwLnBwaWQgLy8gMTAwMCA9PSAxOgorICAgICAgICAgICAgICAgICAgICBwLnBwaWQgPSByY3N0YXJ0cGlkCisgICAgICAgICAgICAgICAgICAgIHAucGFyZW50ID0gcmNwcm9jCisgICAgICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICAgICAgcC5jaGlsZF9saXN0ID0gW10KKyAgICAgICAgICAgIHNlbGYuYnVpbGQoKQorCisgICAgZGVmIHBydW5lKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSwgcGFyZW50KToKKyAgICAgICAgIiIiUHJ1bmVzIHRoZSBwcm9jZXNzIHRyZWUgYnkgcmVtb3ZpbmcgaWRsZSBwcm9jZXNzZXMgYW5kIHByb2Nlc3NlcworICAgICAgICAgICB0aGF0IG9ubHkgbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgc2luZ2xlIHRvcCBzYW1wbGUuICBTaWJsaW5nCisgICAgICAgICAgIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIGNvbW1hbmQgbGluZSAoaS5lLiB0aHJlYWRzKSBhcmUgbWVyZ2VkCisgICAgICAgICAgIHRvZ2V0aGVyLiBUaGlzIGZpbHRlcnMgb3V0IHNsZWVweSBiYWNrZ3JvdW5kIHByb2Nlc3Nlcywgc2hvcnQtbGl2ZWQKKyAgICAgICAgICAgcHJvY2Vzc2VzIGFuZCBib290Y2hhcnRzJyBhbmFseXNpcyB0b29scy4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBpc19pZGxlX2JhY2tncm91bmRfcHJvY2Vzc193aXRob3V0X2NoaWxkcmVuKHApOgorICAgICAgICAgICAgcHJvY2Vzc19lbmQgPSBwLnN0YXJ0X3RpbWUgKyBwLmR1cmF0aW9uCisgICAgICAgICAgICByZXR1cm4gbm90IHAuYWN0aXZlIGFuZCBcCisgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19lbmQgPj0gc2VsZi5zdGFydF90aW1lICsgc2VsZi5kdXJhdGlvbiBhbmQgXAorICAgICAgICAgICAgICAgICAgIHAuc3RhcnRfdGltZSA+IHNlbGYuc3RhcnRfdGltZSBhbmQgXAorICAgICAgICAgICAgICAgICAgIHAuZHVyYXRpb24gPiAwLjkgKiBzZWxmLmR1cmF0aW9uIGFuZCBcCisgICAgICAgICAgICAgICAgICAgc2VsZi5udW1fbm9kZXMocC5jaGlsZF9saXN0KSA9PSAwCisKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgd2hpbGUgaWR4IDwgbGVuKHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICAgICBwID0gcHJvY2Vzc19zdWJ0cmVlW2lkeF0KKyAgICAgICAgICAgIGlmIHBhcmVudCAhPSBOb25lIG9yIGxlbihwLmNoaWxkX2xpc3QpID09IDA6CisKKyAgICAgICAgICAgICAgICBwcnVuZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgaXNfaWRsZV9iYWNrZ3JvdW5kX3Byb2Nlc3Nfd2l0aG91dF9jaGlsZHJlbihwKToKKyAgICAgICAgICAgICAgICAgICAgcHJ1bmUgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBwLmR1cmF0aW9uIDw9IDIgKiBzZWxmLnNhbXBsZV9wZXJpb2Q6CisgICAgICAgICAgICAgICAgICAgICMgc2hvcnQtbGl2ZWQgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICBwcnVuZSA9IFRydWUKKworICAgICAgICAgICAgICAgIGlmIHBydW5lOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3N1YnRyZWUucG9wKGlkeCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gcC5jaGlsZF9saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19zdWJ0cmVlLmluc2VydChpZHgsIGMpCisgICAgICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLnBydW5lKHAuY2hpbGRfbGlzdCwgcCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5wcnVuZShwLmNoaWxkX2xpc3QsIHApCisgICAgICAgICAgICBpZHggKz0gMQorCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX2xvZ2dlcihzZWxmLCBwcm9jZXNzX3N1YnRyZWUsIGxvZ2dlcl9wcm9jLCBtb25pdG9yZWRfYXBwLCBhcHBfdHJlZSk6CisgICAgICAgICIiIk1lcmdlcyB0aGUgbG9nZ2VyJ3MgcHJvY2VzcyBzdWJ0cmVlLiAgVGhlIGxvZ2dlciB3aWxsIHR5cGljYWxseQorICAgICAgICAgICBzcGF3biBsb3RzIG9mIHNsZWVwIGFuZCBjYXQgcHJvY2Vzc2VzLCB0aHVzIHBvbGx1dGluZyB0aGUKKyAgICAgICAgICAgcHJvY2VzcyB0cmVlLgorCisgICAgICAgICIiIgorICAgICAgICBudW1fcmVtb3ZlZCA9IDAKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgaXNfYXBwX3RyZWUgPSBhcHBfdHJlZQorICAgICAgICAgICAgaWYgbG9nZ2VyX3Byb2MgPT0gcC5jbWQgYW5kIG5vdCBhcHBfdHJlZToKKyAgICAgICAgICAgICAgICBpc19hcHBfdHJlZSA9IFRydWUKKyAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX2xvZ2dlcihwLmNoaWxkX2xpc3QsIGxvZ2dlcl9wcm9jLCBtb25pdG9yZWRfYXBwLCBpc19hcHBfdHJlZSkKKyAgICAgICAgICAgICAgICAjIGRvbid0IHJlbW92ZSB0aGUgbG9nZ2VyIGl0c2VsZgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGFwcF90cmVlIGFuZCBtb25pdG9yZWRfYXBwICE9IE5vbmUgYW5kIG1vbml0b3JlZF9hcHAgPT0gcC5jbWQ6CisgICAgICAgICAgICAgICAgaXNfYXBwX3RyZWUgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBpc19hcHBfdHJlZToKKyAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gcC5jaGlsZF9saXN0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1lcmdlX3Byb2Nlc3NlcyhwLCBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gMQorICAgICAgICAgICAgICAgIHAuY2hpbGRfbGlzdCA9IFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYubWVyZ2VfbG9nZ2VyKHAuY2hpbGRfbGlzdCwgbG9nZ2VyX3Byb2MsIG1vbml0b3JlZF9hcHAsIGlzX2FwcF90cmVlKQorICAgICAgICByZXR1cm4gbnVtX3JlbW92ZWQKKworICAgIGRlZiBtZXJnZV9leHBsb2RlcnMoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlLCBwcm9jZXNzZXMpOgorICAgICAgICAiIiJNZXJnZXMgc3BlY2lmaWMgcHJvY2VzcyBzdWJ0cmVlcyAodXNlZCBmb3IgcHJvY2Vzc2VzIHdoaWNoIHVzdWFsbHkKKyAgICAgICAgICAgc3Bhd24gaHVnZSBtZWFuaW5nbGVzcyBwcm9jZXNzIHRyZWVzKS4KKworICAgICAgICAiIiIKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGZvciBwIGluIHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIGlmIHByb2Nlc3NlcyBpbiBwcm9jZXNzZXMgYW5kIGxlbihwLmNoaWxkX2xpc3QpID4gMDoKKyAgICAgICAgICAgICAgICBzdWJ0cmVlbWFwID0gc2VsZi5nZXRQcm9jZXNzTWFwKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gc3VidHJlZW1hcC52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXJnZV9wcm9jZXNzZXMocCwgY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IGxlbihzdWJ0cmVlbWFwKQorICAgICAgICAgICAgICAgICAgICBwLmNoaWxkX2xpc3QgPSBbXQorICAgICAgICAgICAgICAgICAgICBwLmNtZCArPSAiICgrKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9leHBsb2RlcnMocC5jaGlsZF9saXN0LCBwcm9jZXNzZXMpCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX3NpYmxpbmdzKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIk1lcmdlcyB0aHJlYWQgcHJvY2Vzc2VzLiAgU2libGluZyBwcm9jZXNzZXMgd2l0aCB0aGUgc2FtZSBjb21tYW5kCisgICAgICAgICAgIGxpbmUgYXJlIG1lcmdlZCB0b2dldGhlci4KKworICAgICAgICAiIiIKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgd2hpbGUgaWR4IDwgbGVuKHByb2Nlc3Nfc3VidHJlZSktMToKKyAgICAgICAgICAgIHAgPSBwcm9jZXNzX3N1YnRyZWVbaWR4XQorICAgICAgICAgICAgbmV4dHAgPSBwcm9jZXNzX3N1YnRyZWVbaWR4KzFdCisgICAgICAgICAgICBpZiBuZXh0cC5jbWQgPT0gcC5jbWQ6CisgICAgICAgICAgICAgICAgcHJvY2Vzc19zdWJ0cmVlLnBvcChpZHgrMSkKKyAgICAgICAgICAgICAgICBpZHggLT0gMQorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IDEKKyAgICAgICAgICAgICAgICBwLmNoaWxkX2xpc3QuZXh0ZW5kKG5leHRwLmNoaWxkX2xpc3QpCisgICAgICAgICAgICAgICAgc2VsZi5tZXJnZV9wcm9jZXNzZXMocCwgbmV4dHApCisgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX3NpYmxpbmdzKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgIGlmIGxlbihwcm9jZXNzX3N1YnRyZWUpID4gMDoKKyAgICAgICAgICAgIHAgPSBwcm9jZXNzX3N1YnRyZWVbLTFdCisgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX3NpYmxpbmdzKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgcmV0dXJuIG51bV9yZW1vdmVkCisKKyAgICBkZWYgbWVyZ2VfcnVucyhzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJNZXJnZXMgcHJvY2VzcyBydW5zLiAgU2luZ2xlIGNoaWxkIHByb2Nlc3NlcyB3aGljaCBzaGFyZSB0aGUgc2FtZQorICAgICAgICAgICBjb21tYW5kIGxpbmUgd2l0aCB0aGUgcGFyZW50IGFyZSBtZXJnZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIG51bV9yZW1vdmVkID0gMAorICAgICAgICBpZHggPSAwCisgICAgICAgIHdoaWxlIGlkeCA8IGxlbihwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAgICAgcCA9IHByb2Nlc3Nfc3VidHJlZVtpZHhdCisgICAgICAgICAgICBpZiBsZW4ocC5jaGlsZF9saXN0KSA9PSAxIGFuZCBwLmNoaWxkX2xpc3RbMF0uY21kID09IHAuY21kOgorICAgICAgICAgICAgICAgIGNoaWxkID0gcC5jaGlsZF9saXN0WzBdCisgICAgICAgICAgICAgICAgcC5jaGlsZF9saXN0ID0gbGlzdChjaGlsZC5jaGlsZF9saXN0KQorICAgICAgICAgICAgICAgIHNlbGYubWVyZ2VfcHJvY2Vzc2VzKHAsIGNoaWxkKQorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9ydW5zKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX3Byb2Nlc3NlcyhzZWxmLCBwMSwgcDIpOgorICAgICAgICAiIiJNZXJnZXMgdHdvIHByb2Nlc3MnIHNhbXBsZXMuIiIiCisgICAgICAgIHAxLnNhbXBsZXMuZXh0ZW5kKHAyLnNhbXBsZXMpCisgICAgICAgIHAxLnNhbXBsZXMuc29ydCgga2V5ID0gbGFtYmRhIHA6IHAudGltZSApCisgICAgICAgIHAxdGltZSA9IHAxLnN0YXJ0X3RpbWUKKyAgICAgICAgcDJ0aW1lID0gcDIuc3RhcnRfdGltZQorICAgICAgICBwMS5zdGFydF90aW1lID0gbWluKHAxdGltZSwgcDJ0aW1lKQorICAgICAgICBwZW5kdGltZSA9IG1heChwMXRpbWUgKyBwMS5kdXJhdGlvbiwgcDJ0aW1lICsgcDIuZHVyYXRpb24pCisgICAgICAgIHAxLmR1cmF0aW9uID0gcGVuZHRpbWUgLSBwMS5zdGFydF90aW1lCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvc2FtcGxlcy5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9zYW1wbGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNWQ3NDMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvc2FtcGxlcy5weQpAQCAtMCwwICsxLDE1MSBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK2NsYXNzIERpc2tTdGF0U2FtcGxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lKToKKyAgICAgICAgc2VsZi50aW1lID0gdGltZQorICAgICAgICBzZWxmLmRpc2tkYXRhID0gWzAsIDAsIDBdCisgICAgZGVmIGFkZF9kaXNrZGF0YShzZWxmLCBuZXdfZGlza2RhdGEpOgorICAgICAgICBzZWxmLmRpc2tkYXRhID0gWyBhICsgYiBmb3IgYSwgYiBpbiB6aXAoc2VsZi5kaXNrZGF0YSwgbmV3X2Rpc2tkYXRhKSBdCisKK2NsYXNzIENQVVNhbXBsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZSwgdXNlciwgc3lzLCBpbyA9IDAuMCwgc3dhcCA9IDAuMCk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi51c2VyID0gdXNlcgorICAgICAgICBzZWxmLnN5cyA9IHN5cworICAgICAgICBzZWxmLmlvID0gaW8KKyAgICAgICAgc2VsZi5zd2FwID0gc3dhcAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNwdShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciArIHNlbGYuc3lzCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLnRpbWUpICsgIlx0IiArIHN0cihzZWxmLnVzZXIpICsgIlx0IiArIFwKKyAgICAgICAgICAgICAgIHN0cihzZWxmLnN5cykgKyAiXHQiICsgc3RyKHNlbGYuaW8pICsgIlx0IiArIHN0ciAoc2VsZi5zd2FwKQorCitjbGFzcyBNZW1TYW1wbGU6CisgICAgdXNlZF92YWx1ZXMgPSAoJ01lbVRvdGFsJywgJ01lbUZyZWUnLCAnQnVmZmVycycsICdDYWNoZWQnLCAnU3dhcFRvdGFsJywgJ1N3YXBGcmVlJywpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZSk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi5yZWNvcmRzID0ge30KKworICAgIGRlZiBhZGRfdmFsdWUoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBuYW1lIGluIE1lbVNhbXBsZS51c2VkX3ZhbHVlczoKKyAgICAgICAgICAgIHNlbGYucmVjb3Jkc1tuYW1lXSA9IHZhbHVlCisKKyAgICBkZWYgdmFsaWQoc2VsZik6CisgICAgICAgIGtleXMgPSBzZWxmLnJlY29yZHMua2V5cygpCisgICAgICAgICMgZGlzY2FyZCBpbmNvbXBsZXRlIHNhbXBsZXMKKyAgICAgICAgcmV0dXJuIFt2IGZvciB2IGluIE1lbVNhbXBsZS51c2VkX3ZhbHVlcyBpZiB2IG5vdCBpbiBrZXlzXSA9PSBbXQorCitjbGFzcyBQcm9jZXNzU2FtcGxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lLCBzdGF0ZSwgY3B1X3NhbXBsZSk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIHNlbGYuY3B1X3NhbXBsZSA9IGNwdV9zYW1wbGUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYudGltZSkgKyAiXHQiICsgc3RyKHNlbGYuc3RhdGUpICsgIlx0IiArIHN0cihzZWxmLmNwdV9zYW1wbGUpCisKK2NsYXNzIFByb2Nlc3NTdGF0czoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyLCBwcm9jZXNzX21hcCwgc2FtcGxlX2NvdW50LCBzYW1wbGVfcGVyaW9kLCBzdGFydF90aW1lLCBlbmRfdGltZSk6CisgICAgICAgIHNlbGYucHJvY2Vzc19tYXAgPSBwcm9jZXNzX21hcAorICAgICAgICBzZWxmLnNhbXBsZV9jb3VudCA9IHNhbXBsZV9jb3VudAorICAgICAgICBzZWxmLnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5lbmRfdGltZSA9IGVuZF90aW1lCisgICAgICAgIHdyaXRlci5pbmZvICgiJWQgc2FtcGxlcywgYXZnLiBzYW1wbGUgbGVuZ3RoICVmIiAlIChzZWxmLnNhbXBsZV9jb3VudCwgc2VsZi5zYW1wbGVfcGVyaW9kKSkKKyAgICAgICAgd3JpdGVyLmluZm8gKCJwcm9jZXNzIGxpc3Qgc2l6ZTogJWQiICUgbGVuIChzZWxmLnByb2Nlc3NfbWFwLnZhbHVlcygpKSkKKworY2xhc3MgUHJvY2VzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyLCBwaWQsIGNtZCwgcHBpZCwgc3RhcnRfdGltZSk6CisgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCisgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYuZXhlID0gY21kCisgICAgICAgIHNlbGYuYXJncyA9IFtdCisgICAgICAgIHNlbGYucHBpZCA9IHBwaWQKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gc3RhcnRfdGltZQorICAgICAgICBzZWxmLmR1cmF0aW9uID0gMAorICAgICAgICBzZWxmLnNhbXBsZXMgPSBbXQorICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5jaGlsZF9saXN0ID0gW10KKworICAgICAgICBzZWxmLmFjdGl2ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X3VzZXJfY3B1X3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF9zeXNfY3B1X3RpbWUgPSBOb25lCisKKyAgICAgICAgc2VsZi5sYXN0X2NwdV9ucyA9IDAKKyAgICAgICAgc2VsZi5sYXN0X2Jsa2lvX2RlbGF5X25zID0gMAorICAgICAgICBzZWxmLmxhc3Rfc3dhcGluX2RlbGF5X25zID0gMAorCisgICAgIyBzcGxpdCB0aGlzIHByb2Nlc3MnIHJ1biAtIHRyaWdnZXJlZCBieSBhIG5hbWUgY2hhbmdlCisgICAgZGVmIHNwbGl0KHNlbGYsIHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHN0YXJ0X3RpbWUpOgorICAgICAgICBzcGxpdCA9IFByb2Nlc3MgKHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHN0YXJ0X3RpbWUpCisKKyAgICAgICAgc3BsaXQubGFzdF9jcHVfbnMgPSBzZWxmLmxhc3RfY3B1X25zCisgICAgICAgIHNwbGl0Lmxhc3RfYmxraW9fZGVsYXlfbnMgPSBzZWxmLmxhc3RfYmxraW9fZGVsYXlfbnMKKyAgICAgICAgc3BsaXQubGFzdF9zd2FwaW5fZGVsYXlfbnMgPSBzZWxmLmxhc3Rfc3dhcGluX2RlbGF5X25zCisKKyAgICAgICAgcmV0dXJuIHNwbGl0CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKFtzdHIoc2VsZi5waWQpLCBzZWxmLmNtZCwgc3RyKHNlbGYucHBpZCksICdbICcgKyBzdHIobGVuKHNlbGYuc2FtcGxlcykpICsgJyBzYW1wbGVzIF0nIF0pCisKKyAgICBkZWYgY2FsY19zdGF0cyhzZWxmLCBzYW1wbGVQZXJpb2QpOgorICAgICAgICBpZiBzZWxmLnNhbXBsZXM6CisgICAgICAgICAgICBmaXJzdFNhbXBsZSA9IHNlbGYuc2FtcGxlc1swXQorICAgICAgICAgICAgbGFzdFNhbXBsZSA9IHNlbGYuc2FtcGxlc1stMV0KKyAgICAgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IG1pbihmaXJzdFNhbXBsZS50aW1lLCBzZWxmLnN0YXJ0X3RpbWUpCisgICAgICAgICAgICBzZWxmLmR1cmF0aW9uID0gbGFzdFNhbXBsZS50aW1lIC0gc2VsZi5zdGFydF90aW1lICsgc2FtcGxlUGVyaW9kCisKKyAgICAgICAgYWN0aXZlQ291bnQgPSBzdW0oIFsxIGZvciBzYW1wbGUgaW4gc2VsZi5zYW1wbGVzIGlmIHNhbXBsZS5jcHVfc2FtcGxlIGFuZCBzYW1wbGUuY3B1X3NhbXBsZS5zeXMgKyBzYW1wbGUuY3B1X3NhbXBsZS51c2VyICsgc2FtcGxlLmNwdV9zYW1wbGUuaW8gPiAwLjBdICkKKyAgICAgICAgYWN0aXZlQ291bnQgPSBhY3RpdmVDb3VudCArIHN1bSggWzEgZm9yIHNhbXBsZSBpbiBzZWxmLnNhbXBsZXMgaWYgc2FtcGxlLnN0YXRlID09ICdEJ10gKQorICAgICAgICBzZWxmLmFjdGl2ZSA9IChhY3RpdmVDb3VudD4yKQorCisgICAgZGVmIGNhbGNfbG9hZChzZWxmLCB1c2VyQ3B1LCBzeXNDcHUsIGludGVydmFsKToKKyAgICAgICAgdXNlckNwdUxvYWQgPSBmbG9hdCh1c2VyQ3B1IC0gc2VsZi5sYXN0X3VzZXJfY3B1X3RpbWUpIC8gaW50ZXJ2YWwKKyAgICAgICAgc3lzQ3B1TG9hZCA9IGZsb2F0KHN5c0NwdSAtIHNlbGYubGFzdF9zeXNfY3B1X3RpbWUpIC8gaW50ZXJ2YWwKKyAgICAgICAgY3B1TG9hZCA9IHVzZXJDcHVMb2FkICsgc3lzQ3B1TG9hZAorICAgICAgICAjIG5vcm1hbGl6ZQorICAgICAgICBpZiBjcHVMb2FkID4gMS4wOgorICAgICAgICAgICAgdXNlckNwdUxvYWQgPSB1c2VyQ3B1TG9hZCAvIGNwdUxvYWQKKyAgICAgICAgICAgIHN5c0NwdUxvYWQgPSBzeXNDcHVMb2FkIC8gY3B1TG9hZAorICAgICAgICByZXR1cm4gKHVzZXJDcHVMb2FkLCBzeXNDcHVMb2FkKQorCisgICAgZGVmIHNldF9wYXJlbnQoc2VsZiwgcHJvY2Vzc01hcCk6CisgICAgICAgIGlmIHNlbGYucHBpZCAhPSBOb25lOgorICAgICAgICAgICAgc2VsZi5wYXJlbnQgPSBwcm9jZXNzTWFwLmdldCAoc2VsZi5wcGlkKQorICAgICAgICAgICAgaWYgc2VsZi5wYXJlbnQgPT0gTm9uZSBhbmQgc2VsZi5waWQgLy8gMTAwMCA+IDEgYW5kIFwKKyAgICAgICAgICAgICAgICBub3QgKHNlbGYucHBpZCA9PSAyMDAwIG9yIHNlbGYucGlkID09IDIwMDApOiAjIGtlcm5lbCB0aHJlYWRzOiBwcGlkPTIKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlci53YXJuKCJNaXNzaW5nIENPTkZJR19QUk9DX0VWRU5UUzogbm8gcGFyZW50IGZvciBwaWQgJyVpJyAoJyVzJykgd2l0aCBwcGlkICclaSciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYucGlkLHNlbGYuY21kLHNlbGYucHBpZCkpCisKKyAgICBkZWYgZ2V0X2VuZF90aW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdGFydF90aW1lICsgc2VsZi5kdXJhdGlvbgorCitjbGFzcyBEaXNrU2FtcGxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lLCByZWFkLCB3cml0ZSwgdXRpbCk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi5yZWFkID0gcmVhZAorICAgICAgICBzZWxmLndyaXRlID0gd3JpdGUKKyAgICAgICAgc2VsZi51dGlsID0gdXRpbAorICAgICAgICBzZWxmLnRwdXQgPSByZWFkICsgd3JpdGUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlx0Ii5qb2luKFtzdHIoc2VsZi50aW1lKSwgc3RyKHNlbGYucmVhZCksIHN0cihzZWxmLndyaXRlKSwgc3RyKHNlbGYudXRpbCldKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Rlc3RzL3BhcnNlcl90ZXN0LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Rlc3RzL3BhcnNlcl90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZmIzYmYKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcGFyc2VyX3Rlc3QucHkKQEAgLTAsMCArMSwxMDUgQEAKK2ltcG9ydCBzeXMsIG9zLCByZSwgc3RydWN0LCBvcGVyYXRvciwgbWF0aAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCB1bml0dGVzdAorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MuZ2V0Y3dkKCkpCisKK2ltcG9ydCBweWJvb3RjaGFydGd1aS5wYXJzaW5nIGFzIHBhcnNpbmcKK2ltcG9ydCBweWJvb3RjaGFydGd1aS5tYWluIGFzIG1haW4KKworZGVidWcgPSBGYWxzZQorCitkZWYgZmxvYXRFcShmMSwgZjIpOgorCXJldHVybiBtYXRoLmZhYnMoZjEtZjIpIDwgMC4wMDAwMQorCitib290Y2hhcnRfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICcuLi8uLi9leGFtcGxlcy8xLycpCitwYXJzZXIgPSBtYWluLl9ta19vcHRpb25zX3BhcnNlcigpCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXEnLCBib290Y2hhcnRfZGlyXSkKK3dyaXRlciA9IG1haW4uX21rX3dyaXRlcihvcHRpb25zKQorCitjbGFzcyBUZXN0QkNQYXJzZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIAorCWRlZiBzZXRVcChzZWxmKToKKwkJc2VsZi5uYW1lID0gIk15IGZpcnN0IHVuaXR0ZXN0IgorCQlzZWxmLnJvb3RkaXIgPSBib290Y2hhcnRfZGlyCisKKwlkZWYgbWtfZm5hbWUoc2VsZixmKToKKwkJcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnJvb3RkaXIsIGYpCisKKwlkZWYgdGVzdFBhcnNlSGVhZGVyKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzdGF0ZSA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdoZWFkZXInKSkKKwkJc2VsZi5hc3NlcnRFcXVhbCg2LCBsZW4oc3RhdGUuaGVhZGVycykpCisJCXNlbGYuYXNzZXJ0RXF1YWwoMiwgcGFyc2luZy5nZXRfbnVtX2NwdXMoc3RhdGUuaGVhZGVycykpCisKKwlkZWYgdGVzdF9wYXJzZVRpbWVkQmxvY2tzKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzdGF0ZSA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdwcm9jX2Rpc2tzdGF0cy5sb2cnKSkKKwkJc2VsZi5hc3NlcnRFcXVhbCgxNDEsIGxlbihzdGF0ZS5kaXNrX3N0YXRzKSkJCQorCisJZGVmIHRlc3RQYXJzZVByb2NQc0xvZyhzZWxmKToKKwkJdHJhY2UgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKwkJc3RhdGUgPSBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCB0cmFjZSwgc2VsZi5ta19mbmFtZSgncHJvY19wcy5sb2cnKSkKKwkJc2FtcGxlcyA9IHN0YXRlLnBzX3N0YXRzCisJCXByb2Nlc3NlcyA9IHNhbXBsZXMucHJvY2Vzc19tYXAKKwkJc29ydGVkX3Byb2Nlc3NlcyA9IFtwcm9jZXNzZXNba10gZm9yIGsgaW4gc29ydGVkKHByb2Nlc3Nlcy5rZXlzKCkpXQorCisJCXBzX2RhdGEgPSBvcGVuKHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QyLnByb2NfcHMubG9nJykpCisJCWZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUocHNfZGF0YSk6CisJCQl0b2tlbnMgPSBsaW5lLnNwbGl0KCk7CisJCQlwcm9jZXNzID0gc29ydGVkX3Byb2Nlc3Nlc1tpbmRleF0KKwkJCWlmIGRlYnVnOgorCQkJCXByaW50KHRva2Vuc1swOjRdKQorCQkJCXByaW50KHByb2Nlc3MucGlkIC8gMTAwMCwgcHJvY2Vzcy5jbWQsIHByb2Nlc3MucHBpZCwgbGVuKHByb2Nlc3Muc2FtcGxlcykpCisJCQkJcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0nKQorCisJCQlzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1swXSwgc3RyKHByb2Nlc3MucGlkIC8vIDEwMDApKQorCQkJc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbMV0sIHN0cihwcm9jZXNzLmNtZCkpCisJCQlzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1syXSwgc3RyKHByb2Nlc3MucHBpZCAvLyAxMDAwKSkKKwkJCXNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zWzNdLCBzdHIobGVuKHByb2Nlc3Muc2FtcGxlcykpKQorCQlwc19kYXRhLmNsb3NlKCkKKworCWRlZiB0ZXN0cGFyc2VQcm9jRGlza1N0YXRMb2coc2VsZik6CisJCXRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisJCXN0YXRlX3dpdGhfaGVhZGVycyA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdoZWFkZXInKSkKKwkJc3RhdGVfd2l0aF9oZWFkZXJzLmhlYWRlcnNbJ3N5c3RlbS5jcHUnXSA9ICd4eHggKDIpJworCQlzYW1wbGVzID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgc3RhdGVfd2l0aF9oZWFkZXJzLCBzZWxmLm1rX2ZuYW1lKCdwcm9jX2Rpc2tzdGF0cy5sb2cnKSkuZGlza19zdGF0cworCQlzZWxmLmFzc2VydEVxdWFsKDE0MSwgbGVuKHNhbXBsZXMpKQorCisJCWRpc2tzdGF0c19kYXRhID0gb3BlbihzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2NfZGlza3N0YXRzLmxvZycpKQorCQlmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKGRpc2tzdGF0c19kYXRhKToKKwkJCXRva2VucyA9IGxpbmUuc3BsaXQoJ1x0JykKKwkJCXNhbXBsZSA9IHNhbXBsZXNbaW5kZXhdCisJCQlpZiBkZWJ1ZzoJCQorCQkJCXByaW50KGxpbmUucnN0cmlwKCkpCisJCQkJcHJpbnQoc2FtcGxlKQorCQkJCXByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tJykKKwkJCQorCQkJc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbMF0sIHN0cihzYW1wbGUudGltZSkpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbMV0pLCBzYW1wbGUucmVhZCkpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbMl0pLCBzYW1wbGUud3JpdGUpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzNdKSwgc2FtcGxlLnV0aWwpKQorCQlkaXNrc3RhdHNfZGF0YS5jbG9zZSgpCisJCisJZGVmIHRlc3RwYXJzZVByb2NTdGF0TG9nKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzYW1wbGVzID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ3Byb2Nfc3RhdC5sb2cnKSkuY3B1X3N0YXRzCisJCXNlbGYuYXNzZXJ0RXF1YWwoMTQxLCBsZW4oc2FtcGxlcykpCisKKwkJc3RhdF9kYXRhID0gb3BlbihzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nfc3RhdC5sb2cnKSkKKwkJZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzdGF0X2RhdGEpOgorCQkJdG9rZW5zID0gbGluZS5zcGxpdCgnXHQnKQorCQkJc2FtcGxlID0gc2FtcGxlc1tpbmRleF0KKwkJCWlmIGRlYnVnOgorCQkJCXByaW50KGxpbmUucnN0cmlwKCkpCisJCQkJcHJpbnQoc2FtcGxlKQorCQkJCXByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tJykKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1swXSksIHNhbXBsZS50aW1lKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1sxXSksIHNhbXBsZS51c2VyKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1syXSksIHNhbXBsZS5zeXMpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzNdKSwgc2FtcGxlLmlvKSkKKwkJc3RhdF9kYXRhLmNsb3NlKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Rlc3RzL3Byb2Nlc3NfdHJlZV90ZXN0LnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3Rlc3RzL3Byb2Nlc3NfdHJlZV90ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDZhMWMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcHJvY2Vzc190cmVlX3Rlc3QucHkKQEAgLTAsMCArMSw5MiBAQAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmdldGN3ZCgpKQorCitpbXBvcnQgcHlib290Y2hhcnRndWkucGFyc2luZyBhcyBwYXJzaW5nCitpbXBvcnQgcHlib290Y2hhcnRndWkucHJvY2Vzc190cmVlIGFzIHByb2Nlc3NfdHJlZQoraW1wb3J0IHB5Ym9vdGNoYXJ0Z3VpLm1haW4gYXMgbWFpbgorCitpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKToKKyAgICBsb25nID0gaW50CisKK2NsYXNzIFRlc3RQcm9jZXNzVHJlZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICJQcm9jZXNzIHRyZWUgdW5pdHRlc3QiCisgICAgICAgIHNlbGYucm9vdGRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vZXhhbXBsZXMvMS8nKQorCisgICAgICAgIHBhcnNlciA9IG1haW4uX21rX29wdGlvbnNfcGFyc2VyKCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1xJywgc2VsZi5yb290ZGlyXSkKKyAgICAgICAgd3JpdGVyID0gbWFpbi5fbWtfd3JpdGVyKG9wdGlvbnMpCisgICAgICAgIHRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisKKyAgICAgICAgcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ3Byb2NfcHMubG9nJykpCisgICAgICAgIHRyYWNlLmNvbXBpbGUod3JpdGVyKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlID0gcHJvY2Vzc190cmVlLlByb2Nlc3NUcmVlKHdyaXRlciwgTm9uZSwgdHJhY2UucHNfc3RhdHMsIFwKKyAgICAgICAgICAgIHRyYWNlLnBzX3N0YXRzLnNhbXBsZV9wZXJpb2QsIE5vbmUsIG9wdGlvbnMucHJ1bmUsIE5vbmUsIE5vbmUsIEZhbHNlLCBmb3JfdGVzdGluZyA9IFRydWUpCisKKyAgICBkZWYgbWtfZm5hbWUoc2VsZixmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnJvb3RkaXIsIGYpCisKKyAgICBkZWYgZmxhdHRlbihzZWxmLCBwcm9jZXNzX3RyZWUpOgorICAgICAgICBmbGF0dGVuZWQgPSBbXQorICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX3RyZWU6CisgICAgICAgICAgICBmbGF0dGVuZWQuYXBwZW5kKHApCisgICAgICAgICAgICBmbGF0dGVuZWQuZXh0ZW5kKHNlbGYuZmxhdHRlbihwLmNoaWxkX2xpc3QpKQorICAgICAgICByZXR1cm4gZmxhdHRlbmVkCisKKyAgICBkZWYgY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZiwgZmlsZW5hbWUsIHByb2Nlc3NfdHJlZSk6CisgICAgICAgIHRlc3RfZGF0YSA9IG9wZW4oZmlsZW5hbWUpCisgICAgICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHppcCh0ZXN0X2RhdGEsIHNlbGYuZmxhdHRlbihwcm9jZXNzX3RyZWUpKToKKyAgICAgICAgICAgIHRva2VucyA9IGV4cGVjdGVkLnNwbGl0KCdcdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh0b2tlbnNbMF0pLCBhY3R1YWwucGlkIC8vIDEwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1sxXSwgYWN0dWFsLmNtZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyh0b2tlbnNbMl0pLCAxMCAqIGFjdHVhbC5zdGFydF90aW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxvbmcodG9rZW5zWzNdKSAtIDEwICogYWN0dWFsLmR1cmF0aW9uIDwgNSwgImR1cmF0aW9uIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHRva2Vuc1s0XSksIGxlbihhY3R1YWwuY2hpbGRfbGlzdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh0b2tlbnNbNV0pLCBsZW4oYWN0dWFsLnNhbXBsZXMpKQorICAgICAgICB0ZXN0X2RhdGEuY2xvc2UoKQorCisgICAgZGVmIHRlc3RCdWlsZChzZWxmKToKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjEubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0TWVyZ2VMb2dnZXIoc2VsZik6CisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCAnYm9vdGNoYXJ0ZCcsIE5vbmUsIEZhbHNlKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuMi5sb2cnKSwgcHJvY2Vzc190cmVlKQorCisgICAgZGVmIHRlc3RQcnVuZShzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUucHJ1bmUoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgIHByb2Nlc3NfdHJlZSA9IHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlCisgICAgICAgIHNlbGYuY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jZXNzdHJlZS4zYi5sb2cnKSwgcHJvY2Vzc190cmVlKQorCisgICAgZGVmIHRlc3RNZXJnZUV4cGxvZGVycyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUucHJ1bmUoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfZXhwbG9kZXJzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBzZXQoWydod3VwJ10pKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuM2MubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0TWVyZ2VTaWJsaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUucHJ1bmUoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfZXhwbG9kZXJzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBzZXQoWydod3VwJ10pKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX3NpYmxpbmdzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuM2QubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0TWVyZ2VSdW5zKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2xvZ2dlcihzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgJ2Jvb3RjaGFydGQnLCBOb25lLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5wcnVuZShzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgTm9uZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9leHBsb2RlcnMoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIHNldChbJ2h3dXAnXSkpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2Vfc2libGluZ3Moc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfcnVucyhzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjNlLmxvZycpLCBwcm9jZXNzX3RyZWUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcHl0aG9uZGVwcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9weXRob25kZXBzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmOTJlNzQKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcHl0aG9uZGVwcwpAQCAtMCwwICsxLDI1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIERldGVybWluZSBkZXBlbmRlbmNpZXMgb2YgcHl0aG9uIHNjcmlwdHMgb3IgYXZhaWxhYmxlIHB5dGhvbiBtb2R1bGVzIGluIGEgc2VhcmNoIHBhdGguCisjCisjIEdpdmVuIHRoZSAtZCBhcmd1bWVudCBhbmQgYSBmaWxlbmFtZS9maWxlbmFtZXMsIHJldHVybnMgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYnkgdGhvc2UgZmlsZXMuCisjIEdpdmVuIHRoZSAtZCBhcmd1bWVudCBhbmQgYSBkaXJlY3RvcnkvZGlyZWN0b3JpZXMsIHJlY3Vyc2VzIHRvIGZpbmQgYWxsCisjIHB5dGhvbiBwYWNrYWdlcyBhbmQgbW9kdWxlcywgcmV0dXJucyB0aGUgbW9kdWxlcyBpbXBvcnRlZCBieSB0aGVzZS4KKyMgR2l2ZW4gdGhlIC1wIGFyZ3VtZW50IGFuZCBhIHBhdGggb3IgcGF0aHMsIHNjYW5zIHRoYXQgcGF0aCBmb3IgYXZhaWxhYmxlIHB5dGhvbiBtb2R1bGVzL3BhY2thZ2VzLgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBhc3QKK2ltcG9ydCBpbXAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdweXRob25kZXBzJykKKworc3VmZml4ZXMgPSBbXQorZm9yIHRyaXBsZSBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCk6CisgICAgc3VmZml4ZXMuYXBwZW5kKHRyaXBsZVswXSkKKworCitjbGFzcyBQeXRob25EZXBFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBEZXBlbmRFcnJvcihQeXRob25EZXBFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGVycm9yKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmVycm9yID0gZXJyb3IKKyAgICAgICAgUHl0aG9uRGVwRXJyb3IuX19pbml0X18oc2VsZiwgZXJyb3IpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJGYWlsdXJlIGRldGVybWluaW5nIGRlcGVuZGVuY2llcyBvZiB7fToge30iLmZvcm1hdChzZWxmLnBhdGgsIHNlbGYuZXJyb3IpCisKKworY2xhc3MgSW1wb3J0VmlzaXRvcihhc3QuTm9kZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbXBvcnRzID0gc2V0KCkKKyAgICAgICAgc2VsZi5pbXBvcnRzZnJvbSA9IFtdCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0KHNlbGYsIG5vZGUpOgorICAgICAgICBmb3IgYWxpYXMgaW4gbm9kZS5uYW1lczoKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0cy5hZGQoYWxpYXMubmFtZSkKKworICAgIGRlZiB2aXNpdF9JbXBvcnRGcm9tKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmltcG9ydHNmcm9tLmFwcGVuZCgobm9kZS5tb2R1bGUsIFthLm5hbWUgZm9yIGEgaW4gbm9kZS5uYW1lc10sIG5vZGUubGV2ZWwpKQorCisKK2RlZiB3YWxrX3VwKHBhdGgpOgorICAgIHdoaWxlIHBhdGg6CisgICAgICAgIHlpZWxkIHBhdGgKKyAgICAgICAgcGF0aCwgXywgXyA9IHBhdGgucnBhcnRpdGlvbihvcy5zZXApCisKKworZGVmIGdldF9wcm92aWRlcyhwYXRoKToKKyAgICBwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoKQorCisgICAgZGVmIGdldF9mbl9uYW1lKGZuKToKKyAgICAgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuWzotbGVuKHN1ZmZpeCldCisKKyAgICBpc2RpciA9IG9zLnBhdGguaXNkaXIocGF0aCkKKyAgICBpZiBpc2RpcjoKKyAgICAgICAgcGtnX3BhdGggPSBwYXRoCisgICAgICAgIHdhbGtfcGF0aCA9IHBhdGgKKyAgICBlbHNlOgorICAgICAgICBwa2dfcGF0aCA9IGdldF9mbl9uYW1lKHBhdGgpCisgICAgICAgIGlmIHBrZ19wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2Fsa19wYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisKKyAgICBmb3IgY3VycGF0aCBpbiB3YWxrX3VwKHdhbGtfcGF0aCk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oY3VycGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgbGliZGlyID0gY3VycGF0aAorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBsaWJkaXIgPSAnJworCisgICAgcGFja2FnZV9yZWxwYXRoID0gcGtnX3BhdGhbbGVuKGxpYmRpcikrMTpdCisgICAgcGFja2FnZSA9ICcuJy5qb2luKHBhY2thZ2VfcmVscGF0aC5zcGxpdChvcy5zZXApKQorICAgIGlmIG5vdCBpc2RpcjoKKyAgICAgICAgeWllbGQgcGFja2FnZSwgcGF0aAorICAgIGVsc2U6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICB5aWVsZCBwYWNrYWdlLCBwYXRoCisKKyAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgIHJlbHBhdGggPSBkaXJwYXRoW2xlbihwYXRoKSsxOl0KKyAgICAgICAgICAgIGlmIHJlbHBhdGg6CisgICAgICAgICAgICAgICAgaWYgJ19faW5pdF9fLnB5JyBub3QgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBkaXJuYW1lc1s6XSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9ICcuJy5qb2luKHJlbHBhdGguc3BsaXQob3Muc2VwKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBwYWNrYWdlICsgJy4nICsgY29udGV4dAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjb250ZXh0LCBkaXJwYXRoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBwYWNrYWdlCisKKyAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgYWRqdXN0ZWRfZm4gPSBnZXRfZm5fbmFtZShmbikKKyAgICAgICAgICAgICAgICBpZiBub3QgYWRqdXN0ZWRfZm4gb3IgYWRqdXN0ZWRfZm4gPT0gJ19faW5pdF9fJzoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGZ1bGxmbiA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbikKKyAgICAgICAgICAgICAgICBpZiBjb250ZXh0OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjb250ZXh0ICsgJy4nICsgYWRqdXN0ZWRfZm4sIGZ1bGxmbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGFkanVzdGVkX2ZuLCBmdWxsZm4KKworCitkZWYgZ2V0X2NvZGVfZGVwZW5kcyhjb2RlX3N0cmluZywgcGF0aD1Ob25lLCBwcm92aWRlPU5vbmUsIGlzcGtnPUZhbHNlKToKKyAgICB0cnk6CisgICAgICAgIGNvZGUgPSBhc3QucGFyc2UoY29kZV9zdHJpbmcsIHBhdGgpCisgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKHBhdGgsIGV4YykKKyAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBEZXBlbmRFcnJvcihwYXRoLCBleGMpCisKKyAgICB2aXNpdG9yID0gSW1wb3J0VmlzaXRvcigpCisgICAgdmlzaXRvci52aXNpdChjb2RlKQorICAgIGZvciBidWlsdGluX21vZHVsZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgIGlmIGJ1aWx0aW5fbW9kdWxlIGluIHZpc2l0b3IuaW1wb3J0czoKKyAgICAgICAgICAgIHZpc2l0b3IuaW1wb3J0cy5yZW1vdmUoYnVpbHRpbl9tb2R1bGUpCisKKyAgICBpZiBwcm92aWRlOgorICAgICAgICBwcm92aWRlX2VsZW1lbnRzID0gcHJvdmlkZS5zcGxpdCgnLicpCisgICAgICAgIGlmIGlzcGtnOgorICAgICAgICAgICAgcHJvdmlkZV9lbGVtZW50cy5hcHBlbmQoIl9fc2VsZl9fIikKKyAgICAgICAgY29udGV4dCA9ICcuJy5qb2luKHByb3ZpZGVfZWxlbWVudHNbOi0xXSkKKyAgICAgICAgcGFja2FnZV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgY29udGV4dCA9IE5vbmUKKyAgICAgICAgcGFja2FnZV9wYXRoID0gTm9uZQorCisgICAgbGV2ZWx6ZXJvX2ltcG9ydHNmcm9tID0gKG1vZHVsZSBmb3IgbW9kdWxlLCBuYW1lcywgbGV2ZWwgaW4gdmlzaXRvci5pbXBvcnRzZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZXZlbCA9PSAwKQorICAgIGZvciBtb2R1bGUgaW4gdmlzaXRvci5pbXBvcnRzIHwgc2V0KGxldmVsemVyb19pbXBvcnRzZnJvbSk6CisgICAgICAgIGlmIGNvbnRleHQgYW5kIHBhdGg6CisgICAgICAgICAgICBtb2R1bGVfYmFzZXBhdGggPSBvcy5wYXRoLmpvaW4ocGFja2FnZV9wYXRoLCBtb2R1bGUucmVwbGFjZSgnLicsICcvJykpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtb2R1bGVfYmFzZXBhdGgpOgorICAgICAgICAgICAgICAgICMgSW1wbGljaXQgcmVsYXRpdmUgaW1wb3J0CisgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCArICcuJyArIG1vZHVsZSwgcGF0aAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobW9kdWxlX2Jhc2VwYXRoICsgc3VmZml4KToKKyAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCByZWxhdGl2ZSBpbXBvcnQKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCArICcuJyArIG1vZHVsZSwgcGF0aAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBtb2R1bGUsIHBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIG1vZHVsZSwgcGF0aAorCisgICAgZm9yIG1vZHVsZSwgbmFtZXMsIGxldmVsIGluIHZpc2l0b3IuaW1wb3J0c2Zyb206CisgICAgICAgIGlmIGxldmVsID09IDA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGlmIG5vdCBwcm92aWRlOgorICAgICAgICAgICAgcmFpc2UgRGVwZW5kRXJyb3IoIkVycm9yOiBJbXBvcnRGcm9tIG5vbi16ZXJvIGxldmVsIG91dHNpZGUgb2YgYSBwYWNrYWdlOiB7MH0iLmZvcm1hdCgobW9kdWxlLCBuYW1lcywgbGV2ZWwpKSwgcGF0aCkKKyAgICAgICAgZWxpZiBsZXZlbCA+IGxlbihwcm92aWRlX2VsZW1lbnRzKToKKyAgICAgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKCJFcnJvcjogSW1wb3J0RnJvbSBsZXZlbCBleGNlZWRzIHBhY2thZ2UgZGVwdGg6IHswfSIuZm9ybWF0KChtb2R1bGUsIG5hbWVzLCBsZXZlbCkpLCBwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGV4dCA9ICcuJy5qb2luKHByb3ZpZGVfZWxlbWVudHNbOi1sZXZlbF0pCisgICAgICAgICAgICBpZiBtb2R1bGU6CisgICAgICAgICAgICAgICAgaWYgY29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCArICcuJyArIG1vZHVsZSwgcGF0aAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIG1vZHVsZSwgcGF0aAorCisKK2RlZiBnZXRfZmlsZV9kZXBlbmRzKHBhdGgpOgorICAgIHRyeToKKyAgICAgICAgY29kZV9zdHJpbmcgPSBvcGVuKHBhdGgsICdyJykucmVhZCgpCisgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBleGM6CisgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKHBhdGgsIGV4YykKKworICAgIHJldHVybiBnZXRfY29kZV9kZXBlbmRzKGNvZGVfc3RyaW5nLCBwYXRoKQorCisKK2RlZiBnZXRfZGVwZW5kc19yZWN1cnNpdmUoZGlyZWN0b3J5KToKKyAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcmVjdG9yeSkKKworICAgIHByb3ZpZGVzID0gZGljdCgodiwgaykgZm9yIGssIHYgaW4gZ2V0X3Byb3ZpZGVzKGRpcmVjdG9yeSkpCisgICAgZm9yIGZpbGVuYW1lLCBwcm92aWRlIGluIHByb3ZpZGVzLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVuYW1lKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGZpbGVuYW1lLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgaXNwa2cgPSBUcnVlCisgICAgICAgIGVsaWYgbm90IGZpbGVuYW1lLmVuZHN3aXRoKCcucHknKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpc3BrZyA9IEZhbHNlCisKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBzb3VyY2UgPSBmLnJlYWQoKQorCisgICAgICAgIGRlcGVuZHMgPSBnZXRfY29kZV9kZXBlbmRzKHNvdXJjZSwgZmlsZW5hbWUsIHByb3ZpZGUsIGlzcGtnKQorICAgICAgICBmb3IgZGVwZW5kLCBieSBpbiBkZXBlbmRzOgorICAgICAgICAgICAgeWllbGQgZGVwZW5kLCBieQorCisKK2RlZiBnZXRfZGVwZW5kcyhwYXRoKToKKyAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICByZXR1cm4gZ2V0X2RlcGVuZHNfcmVjdXJzaXZlKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGdldF9maWxlX2RlcGVuZHMocGF0aCkKKworCitkZWYgbWFpbigpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0RldGVybWluZSBkZXBlbmRlbmNpZXMgYW5kIHByb3ZpZGVkIHBhY2thZ2VzIGZvciBweXRob24gc2NyaXB0cy9tb2R1bGVzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwYXRoJywgbmFyZ3M9JysnLCBoZWxwPSdmdWxsIHBhdGggdG8gY29udGVudCB0byBiZSBwcm9jZXNzZWQnKQorICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wcm92aWRlcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2dpdmVuIGEgcGF0aCwgZGlzcGxheSB0aGUgcHJvdmlkZWQgcHl0aG9uIG1vZHVsZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZXBlbmRzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZ2l2ZW4gYSBmaWxlbmFtZSwgZGlzcGxheSB0aGUgaW1wb3J0ZWQgcHl0aG9uIG1vZHVsZXMnKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiBhcmdzLnByb3ZpZGVzOgorICAgICAgICBtb2R1bGVzID0gc2V0KCkKKyAgICAgICAgZm9yIHBhdGggaW4gYXJncy5wYXRoOgorICAgICAgICAgICAgZm9yIHByb3ZpZGUsIGZuIGluIGdldF9wcm92aWRlcyhwYXRoKToKKyAgICAgICAgICAgICAgICBtb2R1bGVzLmFkZChwcm92aWRlKQorCisgICAgICAgIGZvciBtb2R1bGUgaW4gc29ydGVkKG1vZHVsZXMpOgorICAgICAgICAgICAgcHJpbnQobW9kdWxlKQorICAgIGVsaWYgYXJncy5kZXBlbmRzOgorICAgICAgICBmb3IgcGF0aCBpbiBhcmdzLnBhdGg6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlcyA9IGdldF9kZXBlbmRzKHBhdGgpCisgICAgICAgICAgICBleGNlcHQgUHl0aG9uRGVwRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICBmb3IgbW9kdWxlLCBpbXBfYnkgaW4gbW9kdWxlczoKKyAgICAgICAgICAgICAgICBwcmludCgie31cdHt9Ii5mb3JtYXQobW9kdWxlLCBpbXBfYnkpKQorICAgIGVsc2U6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3JlY2lwZXRvb2wgYi95b2N0by1wb2t5L3NjcmlwdHMvcmVjaXBldG9vbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44N2ZiMzVlCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3JlY2lwZXRvb2wKQEAgLTAsMCArMSwxMTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFJlY2lwZSBjcmVhdGlvbiB0b29sCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgbG9nZ2luZworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KK2ltcG9ydCBzY3JpcHR1dGlscworbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgncmVjaXBldG9vbCcpCisKK3BsdWdpbnMgPSBbXQorCitkZWYgdGluZm9pbF9pbml0KHBhcnNlcmVjaXBlcyk6CisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShub3QgcGFyc2VyZWNpcGVzKQorICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpKQorICAgIHJldHVybiB0aW5mb2lsCisKK2RlZiBtYWluKCk6CisKKyAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJywgJycpOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlRoaXMgc2NyaXB0IGNhbiBvbmx5IGJlIHJ1biBhZnRlciBpbml0aWFsaXNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IChlLmcuIGJ5IHVzaW5nIG9lLWluaXQtYnVpbGQtZW52KSIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIHJlY2lwZSB0b29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9IlVzZSAlKHByb2cpcyA8c3ViY29tbWFuZD4gLS1oZWxwIHRvIGdldCBoZWxwIG9uIGEgc3BlY2lmaWMgY29tbWFuZCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBoZWxwPSdQcmludCBvbmx5IGVycm9ycycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb2xvcicsIGNob2ljZXM9WydhdXRvJywgJ2Fsd2F5cycsICduZXZlciddLCBkZWZhdWx0PSdhdXRvJywgaGVscD0nQ29sb3JpemUgb3V0cHV0ICh3aGVyZSAlKG1ldGF2YXIpcyBpcyAlKGNob2ljZXMpcyknLCBtZXRhdmFyPSdDT0xPUicpCisKKyAgICBnbG9iYWxfYXJncywgdW5wYXJzZWRfYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCkKKworICAgICMgSGVscCBpcyBhZGRlZCBoZXJlIHJhdGhlciB0aGFuIHZpYSBhZGRfaGVscD1UcnVlLCBhcyB3ZSBkb24ndCB3YW50IGl0IHRvCisgICAgIyBiZSBoYW5kbGVkIGJ5IHBhcnNlX2tub3duX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0JykKKyAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisKKyAgICBpZiBnbG9iYWxfYXJncy5kZWJ1ZzoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgZWxpZiBnbG9iYWxfYXJncy5xdWlldDoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisKKyAgICBpbXBvcnQgc2NyaXB0cGF0aAorICAgIGJpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCisgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSCIpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCBiaXRiYWtlIHBhdGg6ICVzJyAlIGJpdGJha2VwYXRoKQorCisgICAgc2NyaXB0dXRpbHMubG9nZ2VyX3NldHVwX2NvbG9yKGxvZ2dlciwgZ2xvYmFsX2FyZ3MuY29sb3IpCisKKyAgICB0aW5mb2lsID0gdGluZm9pbF9pbml0KEZhbHNlKQorICAgIGZvciBwYXRoIGluIChbc2NyaXB0c19wYXRoXSArCisgICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpKToKKyAgICAgICAgcGx1Z2lucGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnbGliJywgJ3JlY2lwZXRvb2wnKQorICAgICAgICBzY3JpcHR1dGlscy5sb2FkX3BsdWdpbnMobG9nZ2VyLCBwbHVnaW5zLCBwbHVnaW5wYXRoKQorCisgICAgcmVnaXN0ZXJlZCA9IEZhbHNlCisgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgorICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX2NvbW1hbmQnKToKKyAgICAgICAgICAgIHJlZ2lzdGVyZWQgPSBUcnVlCisgICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfY29tbWFuZChzdWJwYXJzZXJzKQorICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3RpbmZvaWxfaW5pdCcpOgorICAgICAgICAgICAgcGx1Z2luLnRpbmZvaWxfaW5pdCh0aW5mb2lsKQorCisgICAgaWYgbm90IHJlZ2lzdGVyZWQ6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gY29tbWFuZHMgcmVnaXN0ZXJlZCAtIG1pc3NpbmcgcGx1Z2lucz8iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHVucGFyc2VkX2FyZ3MsIG5hbWVzcGFjZT1nbG9iYWxfYXJncykKKworICAgIHRyeToKKyAgICAgICAgaWYgZ2V0YXR0cihhcmdzLCAncGFyc2VyZWNpcGVzJywgRmFsc2UpOgorICAgICAgICAgICAgdGluZm9pbC5wYXJzZVJlY2lwZXMoKQorICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKyAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisKKyAgICByZXR1cm4gcmV0CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSBiL3lvY3RvLXBva3kvc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkyZGI1YwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkKQEAgLTAsMCArMSwyNTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgaXMgY2FsbGVkIGJ5IHRoZSBTREsgaW5zdGFsbGVyIHNjcmlwdC4gSXQgcmVwbGFjZXMgdGhlIGR5bmFtaWMKKyMgbG9hZGVyIHBhdGggaW4gYWxsIGJpbmFyaWVzIGFuZCBhbHNvIGZpeGVzIHRoZSBTWVNESVIgcGF0aHMvbGVuZ3RocyBhbmQgdGhlCisjIGxvY2F0aW9uIG9mIGxkLnNvLmNhY2hlIGluIHRoZSBkeW5hbWljIGxvYWRlciBiaW5hcnkKKyMKKyMgQVVUSE9SUworIyBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisjCisKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdGF0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGVycm5vCisKK2lmIHN5cy52ZXJzaW9uIDwgJzMnOgorICAgIGRlZiBiKHgpOgorICAgICAgICByZXR1cm4geAorZWxzZToKKyAgICBkZWYgYih4KToKKyAgICAgICAgcmV0dXJuIHguZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKworb2xkX3ByZWZpeCA9IHJlLmNvbXBpbGUoYigiIyNERUZBVUxUX0lOU1RBTExfRElSIyMiKSkKKworZGVmIGdldF9hcmNoKCk6CisgICAgZi5zZWVrKDApCisgICAgZV9pZGVudCA9Zi5yZWFkKDE2KQorICAgIGVpX21hZzAsZWlfbWFnMV8zLGVpX2NsYXNzID0gc3RydWN0LnVucGFjaygiPEIzc0IxMXgiLCBlX2lkZW50KQorCisgICAgaWYgKGVpX21hZzAgIT0gMHg3ZiBhbmQgZWlfbWFnMV8zICE9ICJFTEYiKSBvciBlaV9jbGFzcyA9PSAwOgorICAgICAgICByZXR1cm4gMAorCisgICAgaWYgZWlfY2xhc3MgPT0gMToKKyAgICAgICAgcmV0dXJuIDMyCisgICAgZWxpZiBlaV9jbGFzcyA9PSAyOgorICAgICAgICByZXR1cm4gNjQKKworZGVmIHBhcnNlX2VsZl9oZWFkZXIoKToKKyAgICBnbG9iYWwgZV90eXBlLCBlX21hY2hpbmUsIGVfdmVyc2lvbiwgZV9lbnRyeSwgZV9waG9mZiwgZV9zaG9mZiwgZV9mbGFncyxcCisgICAgICAgICAgIGVfZWhzaXplLCBlX3BoZW50c2l6ZSwgZV9waG51bSwgZV9zaGVudHNpemUsIGVfc2hudW0sIGVfc2hzdHJuZHgKKworICAgIGYuc2VlaygwKQorICAgIGVsZl9oZWFkZXIgPSBmLnJlYWQoNjQpCisKKyAgICBpZiBhcmNoID09IDMyOgorICAgICAgICAjIDMyYml0CisgICAgICAgIGhkcl9mbXQgPSAiPEhISUxMTElISEhISEgiCisgICAgICAgIGhkcl9zaXplID0gNTIKKyAgICBlbHNlOgorICAgICAgICAjIDY0Yml0CisgICAgICAgIGhkcl9mbXQgPSAiPEhISVFRUUlISEhISEgiCisgICAgICAgIGhkcl9zaXplID0gNjQKKworICAgIGVfdHlwZSwgZV9tYWNoaW5lLCBlX3ZlcnNpb24sIGVfZW50cnksIGVfcGhvZmYsIGVfc2hvZmYsIGVfZmxhZ3MsXAorICAgIGVfZWhzaXplLCBlX3BoZW50c2l6ZSwgZV9waG51bSwgZV9zaGVudHNpemUsIGVfc2hudW0sIGVfc2hzdHJuZHggPVwKKyAgICAgICAgc3RydWN0LnVucGFjayhoZHJfZm10LCBlbGZfaGVhZGVyWzE2Omhkcl9zaXplXSkKKworZGVmIGNoYW5nZV9pbnRlcnByZXRlcihlbGZfZmlsZV9uYW1lKToKKyAgICBpZiBhcmNoID09IDMyOgorICAgICAgICBwaF9mbXQgPSAiPElJSUlJSUlJIgorICAgIGVsc2U6CisgICAgICAgIHBoX2ZtdCA9ICI8SUlRUVFRUVEiCisKKyAgICAiIiIgbG9vayBmb3IgUFRfSU5URVJQIHNlY3Rpb24gIiIiCisgICAgZm9yIGkgaW4gcmFuZ2UoMCxlX3BobnVtKToKKyAgICAgICAgZi5zZWVrKGVfcGhvZmYgKyBpICogZV9waGVudHNpemUpCisgICAgICAgIHBoX2hkciA9IGYucmVhZChlX3BoZW50c2l6ZSkKKyAgICAgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgICAgICMgMzJiaXQKKyAgICAgICAgICAgIHBfdHlwZSwgcF9vZmZzZXQsIHBfdmFkZHIsIHBfcGFkZHIsIHBfZmlsZXN6LFwKKyAgICAgICAgICAgICAgICBwX21lbXN6LCBwX2ZsYWdzLCBwX2FsaWduID0gc3RydWN0LnVucGFjayhwaF9mbXQsIHBoX2hkcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgNjRiaXQKKyAgICAgICAgICAgIHBfdHlwZSwgcF9mbGFncywgcF9vZmZzZXQsIHBfdmFkZHIsIHBfcGFkZHIsIFwKKyAgICAgICAgICAgIHBfZmlsZXN6LCBwX21lbXN6LCBwX2FsaWduID0gc3RydWN0LnVucGFjayhwaF9mbXQsIHBoX2hkcikKKworICAgICAgICAiIiIgY2hhbmdlIGludGVycHJldGVyICIiIgorICAgICAgICBpZiBwX3R5cGUgPT0gMzoKKyAgICAgICAgICAgICMgUFRfSU5URVJQIHNlY3Rpb24KKyAgICAgICAgICAgIGYuc2VlayhwX29mZnNldCkKKyAgICAgICAgICAgICMgRXh0ZXJuYWwgU0RLcyB3aXRoIG1peGVkIHByZS1jb21waWxlZCBiaW5hcmllcyBzaG91bGQgbm90IGdldAorICAgICAgICAgICAgIyByZWxvY2F0ZWQgc28gbG9vayBmb3Igc29tZSB2YXJpYW50IG9mIC9saWIKKyAgICAgICAgICAgIGZuYW1lID0gZi5yZWFkKDExKQorICAgICAgICAgICAgaWYgZm5hbWUuc3RhcnRzd2l0aChiKCIvbGliLyIpKSBvciBmbmFtZS5zdGFydHN3aXRoKGIoIi9saWI2NC8iKSkgb3IgXAorICAgICAgICAgICAgICAgZm5hbWUuc3RhcnRzd2l0aChiKCIvbGliMzIvIikpIG9yIGZuYW1lLnN0YXJ0c3dpdGgoYigiL3Vzci9saWIzMi8iKSkgb3IgXAorICAgICAgICAgICAgICAgZm5hbWUuc3RhcnRzd2l0aChiKCIvdXNyL2xpYjMyLyIpKSBvciBmbmFtZS5zdGFydHN3aXRoKGIoIi91c3IvbGliNjQvIikpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiAobGVuKG5ld19kbF9wYXRoKSA+PSBwX2ZpbGVzeik6CisgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBjb3VsZCBub3QgcmVsb2NhdGUgJXMsIGludGVycCBzaXplID0gJWkgYW5kICVpIGlzIG5lZWRlZC4iIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoZWxmX2ZpbGVfbmFtZSwgcF9tZW1zeiwgbGVuKG5ld19kbF9wYXRoKSArIDEpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkbF9wYXRoID0gbmV3X2RsX3BhdGggKyBiKCJcMCIpICogKHBfZmlsZXN6IC0gbGVuKG5ld19kbF9wYXRoKSkKKyAgICAgICAgICAgIGYuc2VlayhwX29mZnNldCkKKyAgICAgICAgICAgIGYud3JpdGUoZGxfcGF0aCkKKyAgICAgICAgICAgIGJyZWFrCisKK2RlZiBjaGFuZ2VfZGxfc3lzZGlycygpOgorICAgIGlmIGFyY2ggPT0gMzI6CisgICAgICAgIHNoX2ZtdCA9ICI8SUlJSUlJSUlJSSIKKyAgICBlbHNlOgorICAgICAgICBzaF9mbXQgPSAiPElJUVFRUUlJUVEiCisKKyAgICAiIiIgcmVhZCBzZWN0aW9uIHN0cmluZyB0YWJsZSAiIiIKKyAgICBmLnNlZWsoZV9zaG9mZiArIGVfc2hzdHJuZHggKiBlX3NoZW50c2l6ZSkKKyAgICBzaF9oZHIgPSBmLnJlYWQoZV9zaGVudHNpemUpCisgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgc2hfb2Zmc2V0LCBzaF9zaXplID0gc3RydWN0LnVucGFjaygiPDE2eElJMTZ4Iiwgc2hfaGRyKQorICAgIGVsc2U6CisgICAgICAgIHNoX29mZnNldCwgc2hfc2l6ZSA9IHN0cnVjdC51bnBhY2soIjwyNHhRUTI0eCIsIHNoX2hkcikKKworICAgIGYuc2VlayhzaF9vZmZzZXQpCisgICAgc2hfc3RydGFiID0gZi5yZWFkKHNoX3NpemUpCisKKyAgICBzeXNkaXJzID0gc3lzZGlyc19sZW4gPSAiIgorCisgICAgIiIiIGNoYW5nZSBsZC5zby5jYWNoZSBwYXRoIGFuZCBkZWZhdWx0IGxpYnMgcGF0aCBmb3IgZHluYW1pYyBsb2FkZXIgIiIiCisgICAgZm9yIGkgaW4gcmFuZ2UoMCxlX3NobnVtKToKKyAgICAgICAgZi5zZWVrKGVfc2hvZmYgKyBpICogZV9zaGVudHNpemUpCisgICAgICAgIHNoX2hkciA9IGYucmVhZChlX3NoZW50c2l6ZSkKKworICAgICAgICBzaF9uYW1lLCBzaF90eXBlLCBzaF9mbGFncywgc2hfYWRkciwgc2hfb2Zmc2V0LCBzaF9zaXplLCBzaF9saW5rLFwKKyAgICAgICAgICAgIHNoX2luZm8sIHNoX2FkZHJhbGlnbiwgc2hfZW50c2l6ZSA9IHN0cnVjdC51bnBhY2soc2hfZm10LCBzaF9oZHIpCisKKyAgICAgICAgbmFtZSA9IHNoX3N0cnRhYltzaF9uYW1lOnNoX3N0cnRhYi5maW5kKGIoIlwwIiksIHNoX25hbWUpXQorCisgICAgICAgICIiIiBsb29rIG9ubHkgaW50byBTSFRfUFJPR0JJVFMgc2VjdGlvbnMgIiIiCisgICAgICAgIGlmIHNoX3R5cGUgPT0gMToKKyAgICAgICAgICAgIGYuc2VlayhzaF9vZmZzZXQpCisgICAgICAgICAgICAiIiIgZGVmYXVsdCBsaWJyYXJ5IHBhdGhzIGNhbm5vdCBiZSBjaGFuZ2VkIG9uIHRoZSBmbHkgYmVjYXVzZSAgIiIiCisgICAgICAgICAgICAiIiIgdGhlIHN0cmluZyBsZW5ndGhzIGhhdmUgdG8gYmUgY2hhbmdlZCB0b28uICAgICAgICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiBuYW1lID09IGIoIi5zeXNkaXJzIik6CisgICAgICAgICAgICAgICAgc3lzZGlycyA9IGYucmVhZChzaF9zaXplKQorICAgICAgICAgICAgICAgIHN5c2RpcnNfb2ZmID0gc2hfb2Zmc2V0CisgICAgICAgICAgICAgICAgc3lzZGlyc19zZWN0X3NpemUgPSBzaF9zaXplCisgICAgICAgICAgICBlbGlmIG5hbWUgPT0gYigiLnN5c2RpcnNsZW4iKToKKyAgICAgICAgICAgICAgICBzeXNkaXJzbGVuID0gZi5yZWFkKHNoX3NpemUpCisgICAgICAgICAgICAgICAgc3lzZGlyc2xlbl9vZmYgPSBzaF9vZmZzZXQKKyAgICAgICAgICAgIGVsaWYgbmFtZSA9PSBiKCIubGRzb2NhY2hlIik6CisgICAgICAgICAgICAgICAgbGRzb2NhY2hlX3BhdGggPSBmLnJlYWQoc2hfc2l6ZSkKKyAgICAgICAgICAgICAgICBuZXdfbGRzb2NhY2hlX3BhdGggPSBvbGRfcHJlZml4LnN1YihuZXdfcHJlZml4LCBsZHNvY2FjaGVfcGF0aCkKKyAgICAgICAgICAgICAgICAjIHBhZCB3aXRoIHplcm9zCisgICAgICAgICAgICAgICAgbmV3X2xkc29jYWNoZV9wYXRoICs9IGIoIlwwIikgKiAoc2hfc2l6ZSAtIGxlbihuZXdfbGRzb2NhY2hlX3BhdGgpKQorICAgICAgICAgICAgICAgICMgd3JpdGUgaXQgYmFjaworICAgICAgICAgICAgICAgIGYuc2VlayhzaF9vZmZzZXQpCisgICAgICAgICAgICAgICAgZi53cml0ZShuZXdfbGRzb2NhY2hlX3BhdGgpCisgICAgICAgICAgICBlbGlmIG5hbWUgPT0gYigiLmdjY3JlbG9jcHJlZml4Iik6CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMAorICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgKyA0MDk2KSA8PSBzaF9zaXplOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gZi5yZWFkKDQwOTYpCisgICAgICAgICAgICAgICAgICAgIG5ld19wYXRoID0gb2xkX3ByZWZpeC5zdWIobmV3X3ByZWZpeCwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgIyBwYWQgd2l0aCB6ZXJvcworICAgICAgICAgICAgICAgICAgICBuZXdfcGF0aCArPSBiKCJcMCIpICogKDQwOTYgLSBsZW4obmV3X3BhdGgpKQorICAgICAgICAgICAgICAgICAgICAjcHJpbnQgIkNoYW5naW5nICVzIHRvICVzIGF0ICVzIiAlIChzdHIocGF0aCksIHN0cihuZXdfcGF0aCksIHN0cihvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIGl0IGJhY2sKKyAgICAgICAgICAgICAgICAgICAgZi5zZWVrKHNoX29mZnNldCArIG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShuZXdfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgNDA5NgorICAgIGlmIHN5c2RpcnMgIT0gIiIgYW5kIHN5c2RpcnNsZW4gIT0gIiI6CisgICAgICAgIHBhdGhzID0gc3lzZGlycy5zcGxpdChiKCJcMCIpKQorICAgICAgICBzeXNkaXJzID0gYigiIikKKyAgICAgICAgc3lzZGlyc2xlbiA9IGIoIiIpCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgIiIiIGV4aXQgdGhlIGxvb3Agd2hlbiB3ZSBlbmNvdW50ZXIgZmlyc3QgZW1wdHkgc3RyaW5nICIiIgorICAgICAgICAgICAgaWYgcGF0aCA9PSBiKCIiKToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBuZXdfcGF0aCA9IG9sZF9wcmVmaXguc3ViKG5ld19wcmVmaXgsIHBhdGgpCisgICAgICAgICAgICBzeXNkaXJzICs9IG5ld19wYXRoICsgYigiXDAiKQorCisgICAgICAgICAgICBpZiBhcmNoID09IDMyOgorICAgICAgICAgICAgICAgIHN5c2RpcnNsZW4gKz0gc3RydWN0LnBhY2soIjxMIiwgbGVuKG5ld19wYXRoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzZGlyc2xlbiArPSBzdHJ1Y3QucGFjaygiPFEiLCBsZW4obmV3X3BhdGgpKQorCisgICAgICAgICIiIiBwYWQgd2l0aCB6ZXJvcyAiIiIKKyAgICAgICAgc3lzZGlycyArPSBiKCJcMCIpICogKHN5c2RpcnNfc2VjdF9zaXplIC0gbGVuKHN5c2RpcnMpKQorCisgICAgICAgICIiIiB3cml0ZSB0aGUgc2VjdGlvbnMgYmFjayAiIiIKKyAgICAgICAgZi5zZWVrKHN5c2RpcnNfb2ZmKQorICAgICAgICBmLndyaXRlKHN5c2RpcnMpCisgICAgICAgIGYuc2VlayhzeXNkaXJzbGVuX29mZikKKyAgICAgICAgZi53cml0ZShzeXNkaXJzbGVuKQorCisjIE1BSU4KK2lmIGxlbihzeXMuYXJndikgPCA0OgorICAgIHN5cy5leGl0KC0xKQorCisjIEluIHB5dGhvbiA+IDMsIHN0cmluZ3MgbWF5IGFsc28gY29udGFpbiBVbmljb2RlIGNoYXJhY3RlcnMuIFNvLCBjb252ZXJ0CisjIHRoZW0gdG8gYnl0ZXMKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywpOgorICAgIG5ld19wcmVmaXggPSBzeXMuYXJndlsxXQorICAgIG5ld19kbF9wYXRoID0gc3lzLmFyZ3ZbMl0KK2Vsc2U6CisgICAgbmV3X3ByZWZpeCA9IHN5cy5hcmd2WzFdLmVuY29kZSgpCisgICAgbmV3X2RsX3BhdGggPSBzeXMuYXJndlsyXS5lbmNvZGUoKQorCitleGVjdXRhYmxlc19saXN0ID0gc3lzLmFyZ3ZbMzpdCisKK2ZvciBlIGluIGV4ZWN1dGFibGVzX2xpc3Q6CisgICAgcGVybXMgPSBvcy5zdGF0KGUpW3N0YXQuU1RfTU9ERV0KKyAgICBpZiBvcy5hY2Nlc3MoZSwgb3MuV19PS3xvcy5SX09LKToKKyAgICAgICAgcGVybXMgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgb3MuY2htb2QoZSwgcGVybXN8c3RhdC5TX0lSV1hVKQorCisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbihlLCAicitiIikKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjdHlwZSwgaW9leCA9IHN5cy5leGNfaW5mbygpWzoyXQorICAgICAgICBpZiBpb2V4LmVycm5vID09IGVycm5vLkVUWFRCU1k6CisgICAgICAgICAgICBwcmludCgiQ291bGQgbm90IG9wZW4gJXMuIEZpbGUgdXNlZCBieSBhbm90aGVyIHByb2Nlc3MuXG5QbGVhc2UgIlwKKyAgICAgICAgICAgICAgICAgICJtYWtlIHN1cmUgeW91IGV4aXQgYWxsIHByb2Nlc3NlcyB0aGF0IG1pZ2h0IHVzZSBhbnkgU0RLICJcCisgICAgICAgICAgICAgICAgICAiYmluYXJpZXMuIiAlIGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQ291bGQgbm90IG9wZW4gJXM6ICVzKCVkKSIgJSAoZSwgaW9leC5zdHJlcnJvciwgaW9leC5lcnJubykpCisgICAgICAgIHN5cy5leGl0KC0xKQorCisgICAgIyBTYXZlIG9sZCBzaXplIGFuZCBkbyBhIHNpemUgY2hlY2sgYXQgdGhlIGVuZC4gSnVzdCBhIHNhZmV0eSBtZWFzdXJlLgorICAgIG9sZF9zaXplID0gb3MucGF0aC5nZXRzaXplKGUpCisgICAgaWYgb2xkX3NpemUgPj0gNjQ6CisgICAgICAgIGFyY2ggPSBnZXRfYXJjaCgpCisgICAgICAgIGlmIGFyY2g6CisgICAgICAgICAgICBwYXJzZV9lbGZfaGVhZGVyKCkKKyAgICAgICAgICAgIGNoYW5nZV9pbnRlcnByZXRlcihlKQorICAgICAgICAgICAgY2hhbmdlX2RsX3N5c2RpcnMoKQorCisgICAgIiIiIGNoYW5nZSBwZXJtaXNzaW9ucyBiYWNrICIiIgorICAgIGlmIHBlcm1zOgorICAgICAgICBvcy5jaG1vZChlLCBwZXJtcykKKworICAgIGYuY2xvc2UoKQorCisgICAgaWYgb2xkX3NpemUgIT0gb3MucGF0aC5nZXRzaXplKGUpOgorICAgICAgICBwcmludCgiTmV3IGZpbGUgc2l6ZSBmb3IgJXMgaXMgZGlmZmVyZW50LiBMb29rcyBsaWtlIGEgcmVsb2NhdGlvbiBlcnJvciEiLCBlKQorICAgICAgICBzeXMuZXhpdCgtMSkKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Jvb3Rmc19ycG0tZXh0cmFjdC1wb3N0aW5zdC5hd2sgYi95b2N0by1wb2t5L3NjcmlwdHMvcm9vdGZzX3JwbS1leHRyYWN0LXBvc3RpbnN0LmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjI4MzZiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Jvb3Rmc19ycG0tZXh0cmFjdC1wb3N0aW5zdC5hd2sKQEAgLTAsMCArMSwxMSBAQAorL05hbWU6LiovIHsKKyAgcGFja2FnZSA9IHN1YnN0cigkMCwgNykKKyAgbmV4dAorfQorL3Bvc3RpbnN0YWxsLipzY3JpcHRsZXQgLiovIHsKKyAgbmV4dAorfQoreworICBwcmludCAkMCA+PiBFTlZJUk9OWyJEIl0gIi9ldGMvcnBtLXBvc3RpbnN0cy8iIHBhY2thZ2UgIi5zaCIKK30KKyAgICAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ycG0yY3Bpby5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9ycG0yY3Bpby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZGY4YzBmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3JwbTJjcGlvLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCisjIFRoaXMgY29tZXMgZnJvbSB0aGUgUlBNNSA1LjQuMCBkaXN0cmlidXRpb24uCisKK3BrZz0kMQoraWYgWyAiJHBrZyIgPSAiIiAtbyAhIC1lICIkcGtnIiBdOyB0aGVuCisgICAgZWNobyAibm8gcGFja2FnZSBzdXBwbGllZCIgMT4mMgorICAgZXhpdCAxCitmaQorCitsZWFkc2l6ZT05Ngorbz1gZXhwciAkbGVhZHNpemUgKyA4YAorc2V0IGBvZCAtaiAkbyAtTiA4IC10IHUxICRwa2dgCitpbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkMiArICQzIFwpICsgJDQgXCkgKyAkNWAKK2RsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQ2ICsgJDcgXCkgKyAkOCBcKSArICQ5YAorIyBlY2hvICJzaWcgaWw6ICRpbCBkbDogJGRsIgorCitzaWdzaXplPWBleHByIDggKyAxNiBcKiAkaWwgKyAkZGxgCitvPWBleHByICRvICsgJHNpZ3NpemUgKyBcKCA4IC0gXCggJHNpZ3NpemUgXCUgOCBcKSBcKSBcJSA4ICsgOGAKK3NldCBgb2QgLWogJG8gLU4gOCAtdCB1MSAkcGtnYAoraWw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDIgKyAkMyBcKSArICQ0IFwpICsgJDVgCitkbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkNiArICQ3IFwpICsgJDggXCkgKyAkOWAKKyMgZWNobyAiaGRyIGlsOiAkaWwgZGw6ICRkbCIKKworaGRyc2l6ZT1gZXhwciA4ICsgMTYgXCogJGlsICsgJGRsYAorbz1gZXhwciAkbyArICRoZHJzaXplYAorRVhUUkFDVE9SPSJkZCBpZj0kcGtnIGlicz0kbyBza2lwPTEiCisKK0NPTVBSRVNTSU9OPWAoJEVYVFJBQ1RPUiB8ZmlsZSAtKSAyPi9kZXYvbnVsbGAKK2lmIGVjaG8gJENPTVBSRVNTSU9OIHxncmVwIC1pcSBnemlwOyB0aGVuCisJREVDT01QUkVTU09SPWd1bnppcAorZWxpZiBlY2hvICRDT01QUkVTU0lPTiB8Z3JlcCAtaXEgYnppcDI7IHRoZW4KKwlERUNPTVBSRVNTT1I9YnVuemlwMgorZWxpZiBlY2hvICRDT01QUkVTU0lPTiB8Z3JlcCAtaXEgeHo7IHRoZW4KKwlERUNPTVBSRVNTT1I9dW54egorZWxpZiBlY2hvICRDT01QUkVTU0lPTiB8Z3JlcCAtaXEgY3BpbzsgdGhlbgorCURFQ09NUFJFU1NPUj1jYXQKK2Vsc2UKKwkjIE1vc3QgdmVyc2lvbnMgb2YgZmlsZSBkb24ndCBzdXBwb3J0IExaTUEsIHRoZXJlZm9yZSB3ZSBhc3N1bWUKKwkjIGFueXRoaW5nIG5vdCBkZXRlY3RlZCBpcyBMWk1BCisJREVDT01QUkVTU09SPWB3aGljaCB1bmx6bWEgMj4vZGV2L251bGxgCisJY2FzZSAiJERFQ09NUFJFU1NPUiIgaW4KKwkgICAgLyogKSA7OworCSAgICAqICApIERFQ09NUFJFU1NPUj1gd2hpY2ggbHptYXNoIDI+L2Rldi9udWxsYAorCSAgICAgICAgIGNhc2UgIiRERUNPTVBSRVNTT1IiIGluCisJICAgICAgICAgICAgIC8qICkgREVDT01QUkVTU09SPSJsem1hc2ggLWQgLWMiIDs7CisJICAgICAgICAgICAgICogICkgREVDT01QUkVTU09SPWNhdCA7OworCSAgICAgICAgIGVzYWMKKwkgICAgICAgICA7OworCWVzYWMKK2ZpCisKKyRFWFRSQUNUT1IgMj4vZGV2L251bGwgfCAkREVDT01QUkVTU09SCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdSBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzY2Y1YmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdQpAQCAtMCwwICsxLDUzMiBAQAorIyEvYmluL2Jhc2gKKyMKKyMgSGFuZGxlIHJ1bm5pbmcgT0UgaW1hZ2VzIHN0YW5kYWxvbmUgd2l0aCBRRU1VCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK3VzYWdlKCkgeworICAgIE1ZTkFNRT1gYmFzZW5hbWUgJDBgCisgICAgZWNobyAiIgorICAgIGVjaG8gIlVzYWdlOiB5b3UgY2FuIHJ1biB0aGlzIHNjcmlwdCB3aXRoIGFueSB2YWxpZCBjb21iaW5hdGlvbiIKKyAgICBlY2hvICJvZiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyAoaW4gYW55IG9yZGVyKToiCisgICAgZWNobyAiICBRRU1VQVJDSCAtIHRoZSBxZW11IG1hY2hpbmUgYXJjaGl0ZWN0dXJlIHRvIHVzZSIKKyAgICBlY2hvICIgIEtFUk5FTCAtIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSB0byB1c2UiCisgICAgZWNobyAiICBST09URlMgLSB0aGUgcm9vdGZzIGltYWdlIGZpbGUgb3IgbmZzcm9vdCBkaXJlY3RvcnkgdG8gdXNlIgorICAgIGVjaG8gIiAgTUFDSElORSAtIHRoZSBtYWNoaW5lIG5hbWUgKG9wdGlvbmFsLCBhdXRvZGV0ZWN0ZWQgZnJvbSBLRVJORUwgZmlsZW5hbWUgaWYgdW5zcGVjaWZpZWQpIgorICAgIGVjaG8gIiAgUkFNRlMgLSBib290IGEgcmFtZnMtYmFzZWQgaW1hZ2UiCisgICAgZWNobyAiICBJU08gLSBib290IGFuIElTTyBpbWFnZSIKKyAgICBlY2hvICIgIFZNIC0gYm9vdCBhIHZpcnR1YWwgbWFjaGluZSBpbWFnZSAoPSBhIGZpbGUgcmVwcmVzZW50aW5nIGEgZnVsbCBkaXNrIHdpdGggYm9vdCBsb2FkZXIpIgorICAgIGVjaG8gIiAgU2ltcGxpZmllZCBRRU1VIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBiZSBwYXNzZWQgd2l0aDoiCisgICAgZWNobyAiICAgIG5vZ3JhcGhpYyAtIGRpc2FibGVzIHZpZGVvIGNvbnNvbGUiCisgICAgZWNobyAiICAgIHNlcmlhbCAtIGVuYWJsZXMgYSBzZXJpYWwgY29uc29sZSBvbiAvZGV2L3R0eVMwIgorICAgIGVjaG8gIiAgICBrdm0gLSBlbmFibGVzIEtWTSB3aGVuIHJ1bm5pbmcgcWVtdXg4Ni9xZW11eDg2LTY0IChWVC1jYXBhYmxlIENQVSByZXF1aXJlZCkiCisgICAgZWNobyAiICAgIHB1YmxpY3ZuYyAtIGVuYWJsZSBhIFZOQyBzZXJ2ZXIgb3BlbiB0byBhbGwgaG9zdHMiCisgICAgZWNobyAiICBxZW11cGFyYW1zPVwieHl6XCIgLSBzcGVjaWZ5IGN1c3RvbSBwYXJhbWV0ZXJzIHRvIFFFTVUiCisgICAgZWNobyAiICBib290cGFyYW1zPVwieHl6XCIgLSBzcGVjaWZ5IGN1c3RvbSBrZXJuZWwgcGFyYW1ldGVycyBkdXJpbmcgYm9vdCIKKyAgICBlY2hvICIiCisgICAgZWNobyAiRXhhbXBsZXM6IgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11YXJtIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11eDg2LTY0IGNvcmUtaW1hZ2Utc2F0byBleHQ0IgorICAgIGVjaG8gIiAgJE1ZTkFNRSBwYXRoL3RvL2J6SW1hZ2UtcWVtdXg4Ni5iaW4gcGF0aC90by9uZnNyb290ZGlyLyBzZXJpYWwiCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXV4ODYgcmFtZnMiCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXV4ODYgaXNvIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11eDg2IHFlbXVwYXJhbXM9XCItbSAyNTZcIiIKKyAgICBlY2hvICIgICRNWU5BTUUgcWVtdXg4NiBib290cGFyYW1zPVwicHNwbGFzaD1mYWxzZVwiIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBwYXRoL3RvLzxpbWFnZT4tPG1hY2hpbmU+LnZtZGsiCisgICAgZXhpdCAxCit9CisKK2lmIFsgIngkMSIgPSAieCIgXTsgdGhlbgorICAgIHVzYWdlCitmaQorCitlcnJvcigpIHsKKyAgICBlY2hvICJFcnJvcjogIiQqCisgICAgdXNhZ2UKK30KKworTUFDSElORT0ke01BQ0hJTkU6PSIifQorS0VSTkVMPSR7S0VSTkVMOj0iIn0KK1JPT1RGUz0ke1JPT1RGUzo9IiJ9CitWTT0ke1ZNOj0iIn0KK0ZTVFlQRT0ke0ZTVFlQRTo9IiJ9CitMQVpZX1JPT1RGUz0iIgorU0NSSVBUX1FFTVVfT1BUPSIiCitTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiIKK1NDUklQVF9LRVJORUxfT1BUPSIiCitTRVJJQUxTVERJTz0iIgorVENQU0VSSUFMX1BPUlROVU09IiIKK0tWTV9FTkFCTEVEPSJubyIKK0tWTV9BQ1RJVkU9Im5vIgorCisjIERldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIGlzIGEga2VybmVsIG9yIFFFTVUgaW1hZ2UsIGFuZCBzZXQgdGhlCisjIGFwcHJvcHJpYXRlIHZhcmlhYmxlcworcHJvY2Vzc19maWxlbmFtZSgpIHsKKyAgICBmaWxlbmFtZT0kMQorCisgICAgIyBFeHRyYWN0IHRoZSBmaWxlbmFtZSBleHRlbnNpb24KKyAgICBFWFQ9YGVjaG8gJGZpbGVuYW1lIHwgYXdrIC1GIC4gJ3sgcHJpbnQgXCRORiB9J2AKKyAgICBjYXNlIC8kRVhULyBpbgorCS9iaW4vKQorCQkjIEEgZmlsZSBlbmRpbmcgaW4gLmJpbiBpcyBhIGtlcm5lbAorCQlbIC16ICIkS0VSTkVMIiBdICYmIEtFUk5FTD0kZmlsZW5hbWUgfHwgXAorCQkgICAgZXJyb3IgImNvbmZsaWN0aW5nIEtFUk5FTCBhcmdzIFskS0VSTkVMXSBhbmQgWyRmaWxlbmFtZV0iCisJCTs7CisJL2V4dFsyMzRdL3wvamZmczIvfC9idHJmcy8pCisJCSMgQSBmaWxlIGVuZGluZyBpbiBhIHN1cHBvcnR0ZWQgZnMgdHlwZSBpcyBhIHJvb3RmcyBpbWFnZQorCQlpZiBbIC16ICIkRlNUWVBFIiAtbyAiJEZTVFlQRSIgPSAiJEVYVCIgXTsgdGhlbgorCQkgICAgRlNUWVBFPSRFWFQKKwkJICAgIFJPT1RGUz0kZmlsZW5hbWUKKwkJZWxzZQorCQkgICAgZXJyb3IgImNvbmZsaWN0aW5nIEZTVFlQRSB0eXBlcyBbJEZTVFlQRV0gYW5kIFskRVhUXSIKKwkJZmkKKwkJOzsKKwkvaGRkaW1nL3wvaGRkZGlyZWN0L3wvdm1kay8pCisJCUZTVFlQRT0kRVhUCisJCVZNPSRmaWxlbmFtZQorCQk7OworCSopCisJCWVycm9yICJ1bmtub3duIGZpbGUgYXJnIFskZmlsZW5hbWVdIgorCQk7OworICAgIGVzYWMKK30KKworIyBQYXJzZSBjb21tYW5kIGxpbmUgYXJncyB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWZpYyBvcmRlcmluZy4gSXQncyBhCisjIGJpdCBtb3JlIGNvbXBsZXgsIGJ1dCBvZmZlcnMgYSBncmVhdCB1c2VyIGV4cGVyaWVuY2UuCit3aGlsZSB0cnVlOyBkbworICAgIGFyZz0kezF9CisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAgICAgInFlbXV4ODYiIHwgInFlbXV4ODYtNjQiIHwgInFlbXVhcm0iIHwgInFlbXVhcm02NCIgfCAicWVtdW1pcHMiIHwgInFlbXVtaXBzZWwiIHwgXAorICAgICAgICAicWVtdW1pcHM2NCIgfCAicWVtdXNoNCIgIHwgInFlbXVwcGMiIHwgInFlbXVtaWNyb2JsYXplIiB8ICJxZW11enlucSIpCisgICAgICAgICAgICBbIC16ICIkTUFDSElORSIgXSAmJiBNQUNISU5FPSRhcmcgfHwgXAorICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBNQUNISU5FIHR5cGVzIFskTUFDSElORV0gYW5kIFskYXJnXSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJleHQyIiB8ICJleHQzIiB8ICJleHQ0IiB8ICJqZmZzMiIgfCAibmZzIiB8ICJidHJmcyIgfCAiaGRkaW1nIiB8ICJoZGRkaXJlY3QiICkKKyAgICAgICAgICAgIFsgLXogIiRGU1RZUEUiIC1vICIkRlNUWVBFIiA9ICIkYXJnIiBdICYmIEZTVFlQRT0kYXJnIHx8IFwKKyAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgRlNUWVBFIHR5cGVzIFskRlNUWVBFXSBhbmQgWyRhcmddIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInJhbWZzIikKKyAgICAgICAgICAgIEZTVFlQRT1jcGlvLmd6CisgICAgICAgICAgICBSQU1GUz10cnVlCisgICAgICAgICAgICA7OworICAgICAgICAiaXNvIikKKwkgICAgRlNUWVBFPWlzbworCSAgICBJU09GUz10cnVlCisJICAgIDs7CisgICAgICAgICJub2dyYXBoaWMiKQorICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1ub2dyYXBoaWMiCisgICAgICAgICAgICBTQ1JJUFRfS0VSTkVMX09QVD0iJFNDUklQVF9LRVJORUxfT1BUIGNvbnNvbGU9dHR5UzAiCisgICAgICAgICAgICA7OworICAgICAgICAic2VyaWFsIikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtc2VyaWFsIHN0ZGlvIgorICAgICAgICAgICAgU0NSSVBUX0tFUk5FTF9PUFQ9IiRTQ1JJUFRfS0VSTkVMX09QVCBjb25zb2xlPXR0eVMwIgorICAgICAgICAgICAgU0VSSUFMU1RESU89IjEiCisgICAgICAgICAgICA7OworICAgICAgICAidGNwc2VyaWFsPSIqKQorICAgICAgICAgICAgVENQU0VSSUFMX1BPUlROVU09JHthcmcjI3RjcHNlcmlhbD19CisgICAgICAgICAgICA7OworCSJiaW9zZGlyPSIqKQorICAgICAgICAgICAgQ1VTVE9NQklPU0RJUj0iJHthcmcjI2Jpb3NkaXI9fSIKKwkgICAgOzsKKyAgICAgICAgImJpb3NmaWxlbmFtZT0iKikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtYmlvcyAke2FyZyMjYmlvc2ZpbGVuYW1lPX0iCisgICAgICAgICAgICA7OworICAgICAgICAicWVtdXBhcmFtcz0iKikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJHthcmcjI3FlbXVwYXJhbXM9fSIKKworICAgICAgICAgICAgIyBXYXJuIHVzZXIgaWYgdGhleSB0cnkgdG8gc3BlY2lmeSBzZXJpYWwgb3Iga3ZtIG9wdGlvbnMKKyAgICAgICAgICAgICMgdG8gdXNlIHNpbXBsaWZpZWQgb3B0aW9ucyBpbnN0ZWFkCisgICAgICAgICAgICBzZXJpYWxfb3B0aW9uPWBleHByICIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiA6ICcuKlwoLXNlcmlhbFwpJ2AKKyAgICAgICAgICAgIGt2bV9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtZW5hYmxlLWt2bVwpJ2AKKyAgICAgICAgICAgIHZnYV9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtdmdhXCknYAorICAgICAgICAgICAgWyAhIC16ICIkc2VyaWFsX29wdGlvbiIgLW8gISAteiAiJGt2bV9vcHRpb24iIF0gJiYgXAorICAgICAgICAgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugc2ltcGxpZmllZCBzZXJpYWwgb3Iga3ZtIG9wdGlvbnMgaW5zdGVhZCIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJib290cGFyYW1zPSIqKQorICAgICAgICAgICAgU0NSSVBUX0tFUk5FTF9PUFQ9IiRTQ1JJUFRfS0VSTkVMX09QVCAke2FyZyMjYm9vdHBhcmFtcz19IgorICAgICAgICAgICAgOzsKKyAgICAgICAgImF1ZGlvIikKKyAgICAgICAgICAgIGlmIFsgIngkTUFDSElORSIgPSAieHFlbXV4ODYiIC1vICJ4JE1BQ0hJTkUiID0gInhxZW11eDg2LTY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRW5hYmxpbmcgYXVkaW8gaW4gcWVtdS4iCisgICAgICAgICAgICAgICAgZWNobyAiUGxlYXNlIGluc3RhbGwgc25kX2ludGVsOHgwIG9yIHNuZF9lbnMxMzcwIGRyaXZlciBpbiBsaW51eCBndWVzdC4iCisgICAgICAgICAgICAgICAgUUVNVV9BVURJT19EUlY9ImFsc2EiCisgICAgICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1zb3VuZGh3IGFjOTcsZXMxMzcwIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICJrdm0iKQorICAgICAgICAgICAgS1ZNX0VOQUJMRUQ9InllcyIKKyAgICAgICAgICAgIEtWTV9DQVBBQkxFPWBncmVwIC1xICd2bXhcfHN2bScgL3Byb2MvY3B1aW5mbyAmJiBlY2hvIDFgCisgICAgICAgICAgICA7OworICAgICAgICAic2xpcnAiKQorICAgICAgICAgICAgU0xJUlBfRU5BQkxFRD0ieWVzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInB1YmxpY3ZuYyIpCisgICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLXZuYyAwLjAuMC4wOjAiCisgICAgICAgICAgICA7OworICAgICAgICAqLWltYWdlKikKKyAgICAgICAgICAgIFsgLXogIiRST09URlMiIF0gfHwgXAorCQllcnJvciAiY29uZmxpY3RpbmcgUk9PVEZTIGFyZ3MgWyRST09URlNdIGFuZCBbJGFyZ10iCisgICAgICAgICAgICBpZiBbIC1mICIkYXJnIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcHJvY2Vzc19maWxlbmFtZSAkYXJnCisgICAgICAgICAgICBlbGlmIFsgLWQgIiRhcmciIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbmZzcm9vdCBkaXIgaGFzIC1pbWFnZS0KKyAgICAgICAgICAgICAgICAjIGluIHRoZSBwYXRobmFtZQorICAgICAgICAgICAgICAgIGVjaG8gIkFzc3VtaW5nICRhcmcgaXMgYW4gbmZzIHJvb3RmcyIKKyAgICAgICAgICAgICAgICBGU1RZUEU9bmZzCisgICAgICAgICAgICAgICAgUk9PVEZTPSRhcmcKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBST09URlM9JGFyZworICAgICAgICAgICAgICAgIExBWllfUk9PVEZTPSJ0cnVlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICIiKSBicmVhayA7OworICAgICAgICAqKQorICAgICAgICAgICAgIyBBIGRpcmVjdG9yeSBuYW1lIGlzIGFuIG5mcyByb290ZnMKKyAgICAgICAgICAgIGlmIFsgLWQgIiRhcmciIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJBc3N1bWluZyAkYXJnIGlzIGFuIG5mcyByb290ZnMiCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJEZTVFlQRSIgLW8gIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBGU1RZUEU9bmZzCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgRlNUWVBFIHR5cGVzIFskYXJnXSBhbmQgbmZzIgorICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBpZiBbIC16ICIkUk9PVEZTIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIFJPT1RGUz0kYXJnCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgUk9PVEZTIGFyZ3MgWyRST09URlNdIGFuZCBbJGFyZ10iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsaWYgWyAtZiAiJGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHByb2Nlc3NfZmlsZW5hbWUgJGFyZworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVycm9yICJ1bmFibGUgdG8gY2xhc3NpZnkgYXJnIFskYXJnXSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCitpZiBbICEgLWMgL2Rldi9uZXQvdHVuIF0gOyB0aGVuCisJZWNobyAiVFVOIGNvbnRyb2wgZGV2aWNlIC9kZXYvbmV0L3R1biBpcyB1bmF2YWlsYWJsZTsgeW91IG1heSBuZWVkIHRvIGVuYWJsZSBUVU4gKGUuZy4gc3VkbyBtb2Rwcm9iZSB0dW4pIgorCWV4aXQgMQorZWxpZiBbICEgLXcgL2Rldi9uZXQvdHVuIF0gOyB0aGVuCisJZWNobyAiVFVOIGNvbnRyb2wgZGV2aWNlIC9kZXYvbmV0L3R1biBpcyBub3Qgd3JpdGFibGUsIHBsZWFzZSBmaXggKGUuZy4gc3VkbyBjaG1vZCA2NjYgL2Rldi9uZXQvdHVuKSIKKwlleGl0IDEKK2ZpCisKKyMgUmVwb3J0IGVycm9ycyBmb3IgbWlzc2luZyBjb21iaW5hdGlvbnMgb2Ygb3B0aW9ucworaWYgWyAteiAiJE1BQ0hJTkUiIC1hIC16ICIkS0VSTkVMIiAtYSAteiAiJFZNIiBdOyB0aGVuCisgICAgZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgYSBNQUNISU5FLCBWTSwgb3IgS0VSTkVMIGFyZ3VtZW50IgorZmkKK2lmIFsgIiRGU1RZUEUiID0gIm5mcyIgLWEgLXogIiRST09URlMiIF07IHRoZW4KKyAgICBlcnJvciAiTkZTIGJvb3Rpbmcgd2l0aG91dCBhbiBleHBsaWNpdCBST09URlMgcGF0aCBpcyBub3QgeWV0IHN1cHBvcnRlZCIKK2ZpCisKK2lmIFsgLXogIiRNQUNISU5FIiBdOyB0aGVuCisgICAgaWYgWyAieCRGU1RZUEUiID0gInh2bWRrIiBdIHx8IFsgIngkRlNUWVBFIiA9ICJ4aGRkaW1nIiBdIHx8IFsgIngkRlNUWVBFIiA9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgICAgIE1BQ0hJTkU9YGJhc2VuYW1lICRWTSB8IHNlZCAtbiAncy8uKlwocWVtdXg4Ni02NFx8cWVtdXg4Nlx8cWVtdWFybTY0XHxxZW11YXJtXHxxZW11bWlwczY0XHxxZW11bWlwc1x8cWVtdXBwY1x8cWVtdXNoNFwpLiovXDEvcCdgCisgICAgICAgIGlmIFsgLXogIiRNQUNISU5FIiBdOyB0aGVuCisgICAgICAgICAgICBlcnJvciAiVW5hYmxlIHRvIHNldCBNQUNISU5FIGZyb20gaW1hZ2UgZmlsZW5hbWUgWyRWTV0iCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIlNldCBNQUNISU5FIHRvIFskTUFDSElORV0gYmFzZWQgb24gaW1hZ2UgWyRWTV0iCisgICAgZWxzZQorICAgICAgICBNQUNISU5FPWBiYXNlbmFtZSAkS0VSTkVMIHwgc2VkIC1uICdzLy4qXChxZW11eDg2LTY0XHxxZW11eDg2XHxxZW11YXJtNjRcfHFlbXVhcm1cfHFlbXVtaXBzNjRcfHFlbXVtaXBzXHxxZW11cHBjXHxxZW11c2g0XCkuKi9cMS9wJ2AKKyAgICAgICAgaWYgWyAteiAiJE1BQ0hJTkUiIF07IHRoZW4KKyAgICAgICAgICAgIGVycm9yICJVbmFibGUgdG8gc2V0IE1BQ0hJTkUgZnJvbSBrZXJuZWwgZmlsZW5hbWUgWyRLRVJORUxdIgorICAgICAgICBmaQorICAgICAgICBlY2hvICJTZXQgTUFDSElORSB0byBbJE1BQ0hJTkVdIGJhc2VkIG9uIGtlcm5lbCBbJEtFUk5FTF0iCisgICAgZmkKK2ZpCisKK1lPQ1RPX0tWTV9XSUtJPSJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL0hvd190b19lbmFibGVfS1ZNX2Zvcl9Qb2t5X3FlbXUiCitZT0NUT19QQVJBVklSVF9LVk1fV0lLST0iaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9SdW5uaW5nX2FuX3g4Nl9Zb2N0b19MaW51eF9pbWFnZV91bmRlcl9RRU1VX0tWTSIKKyMgRGV0ZWN0IEtWTSBjb25maWd1cmF0aW9uCitpZiBbICJ4JEtWTV9FTkFCTEVEIiA9ICJ4eWVzIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJEtWTV9DQVBBQkxFIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIllvdSBhcmUgdHJ5aW5nIHRvIGVuYWJsZSBLVk0gb24gYSBjcHUgd2l0aG91dCBWVCBzdXBwb3J0LiIKKyAgICAgICAgZWNobyAiUmVtb3ZlIGt2bSBmcm9tIHRoZSBjb21tYW5kLWxpbmUsIG9yIHJlZmVyIgorICAgICAgICBlY2hvICIkWU9DVE9fS1ZNX1dJS0kiOworICAgICAgICBleGl0IDE7CisgICAgZmkKKyAgICBpZiBbICJ4JE1BQ0hJTkUiICE9ICJ4cWVtdXg4NiIgLWEgIngkTUFDSElORSIgIT0gInhxZW11eDg2LTY0IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIktWTSBvbmx5IHN1cHBvcnQgeDg2ICYgeDg2LTY0LiBSZW1vdmUga3ZtIGZyb20gdGhlIGNvbW1hbmQtbGluZSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgISAtZSAvZGV2L2t2bSBdOyB0aGVuCisgICAgICAgIGVjaG8gIk1pc3NpbmcgS1ZNIGRldmljZS4gSGF2ZSB5b3UgaW5zZXJ0ZWQga3ZtIG1vZHVsZXM/IgorICAgICAgICBlY2hvICJGb3IgZnVydGhlciBoZWxwIHNlZToiCisgICAgICAgIGVjaG8gIiRZT0NUT19LVk1fV0lLSSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgISAtZSAvZGV2L3Zob3N0LW5ldCBdOyB0aGVuCisgICAgICAgIGVjaG8gIk1pc3NpbmcgdmlydGlvIG5ldCBkZXZpY2UuIEhhdmUgeW91IGluc2VydGVkIHZob3N0LW5ldCBtb2R1bGU/IgorICAgICAgICBlY2hvICJGb3IgZnVydGhlciBoZWxwIHNlZToiCisgICAgICAgIGVjaG8gIiRZT0NUT19QQVJBVklSVF9LVk1fV0lLSSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgLXcgL2Rldi9rdm0gLWEgLXIgL2Rldi9rdm0gXTsgdGhlbgorICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLWVuYWJsZS1rdm0iCisgICAgICAgIEtWTV9BQ1RJVkU9InllcyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIllvdSBoYXZlIG5vIHJpZ2h0cyBvbiAvZGV2L2t2bS4iCisgICAgICAgIGVjaG8gIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIKKyAgICAgICAgZWNobyAiJFlPQ1RPX0tWTV9XSUtJIjsKKyAgICAgICAgZXhpdCAxOworICAgIGZpCisgICAgaWYgWyAhIC13IC9kZXYvdmhvc3QtbmV0IC1vICEgLXIgL2Rldi92aG9zdC1uZXQgXTsgdGhlbgorCWlmIFsgIiRTTElSUF9FTkFCTEVEIiAhPSAieWVzIiBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiWW91IGhhdmUgbm8gcmlnaHRzIG9uIC9kZXYvdmhvc3QtbmV0LiIKKyAgICAgICAgICAgIGVjaG8gIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIKKyAgICAgICAgICAgIGVjaG8gIiRZT0NUT19QQVJBVklSVF9LVk1fV0lLSSI7CisgICAgICAgICAgICBleGl0IDE7CisJZmkKKyAgICBmaQorZmkKKworbWFjaGluZTI9YGVjaG8gJE1BQ0hJTkUgfCB0ciAnYS16JyAnQS1aJyB8IHNlZCAncy8tL18vJ2AKKyMgTUFDSElORSBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMKKworIyBEZWZhdWx0cyB1c2VkIHdoZW4gdGhlc2UgdmFycyBuZWVkIHRvIGJlIGluZmVycmVkCitRRU1VWDg2X0RFRkFVTFRfS0VSTkVMPWJ6SW1hZ2UtcWVtdXg4Ni5iaW4KK1FFTVVYODZfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VWDg2XzY0X0RFRkFVTFRfS0VSTkVMPWJ6SW1hZ2UtcWVtdXg4Ni02NC5iaW4KK1FFTVVYODZfNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VQVJNX0RFRkFVTFRfS0VSTkVMPXpJbWFnZS1xZW11YXJtLmJpbgorUUVNVUFSTV9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVBUk02NF9ERUZBVUxUX0tFUk5FTD1JbWFnZS1xZW11YXJtNjQuYmluCitRRU1VQVJNNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VTUlQU19ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzLmJpbgorUUVNVU1JUFNfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VTUlQU0VMX0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHNlbC5iaW4KK1FFTVVNSVBTRUxfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VTUlQUzY0X0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHM2NC5iaW4KK1FFTVVNSVBTNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VU0g0X0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHMuYmluCitRRU1VU0g0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVVBQQ19ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVwcGMuYmluCitRRU1VUFBDX0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVU1JQ1JPQkxBWkVfREVGQVVMVF9LRVJORUw9bGludXguYmluLnViCitRRU1VTUlDUk9CTEFaRV9ERUZBVUxUX0ZTVFlQRT1jcGlvCisKK1FFTVVaWU5RX0RFRkFVTFRfS0VSTkVMPXVJbWFnZQorUUVNVVpZTlFfREVGQVVMVF9GU1RZUEU9Y3BpbworCitBS0lUQV9ERUZBVUxUX0tFUk5FTD16SW1hZ2UtYWtpdGEuYmluCitBS0lUQV9ERUZBVUxUX0ZTVFlQRT1qZmZzMgorCitTUElUWl9ERUZBVUxUX0tFUk5FTD16SW1hZ2Utc3BpdHouYmluCitTUElUWl9ERUZBVUxUX0ZTVFlQRT1leHQzCisKK3NldHVwX3BhdGhfdmFycygpIHsKKyAgICBpZiBbIC16ICIkT0VfVE1QRElSIiBdIDsgdGhlbgorICAgICAgICBQQVRIU19SRVFVSVJFRD10cnVlCisgICAgZWxpZiBbICIkMSIgPSAiMSIgLWEgLXogIiRERVBMT1lfRElSX0lNQUdFIiBdIDsgdGhlbgorICAgICAgICBQQVRIU19SRVFVSVJFRD10cnVlCisgICAgZWxzZQorICAgICAgICBQQVRIU19SRVFVSVJFRD1mYWxzZQorICAgIGZpCisKKyAgICBpZiBbICIkUEFUSFNfUkVRVUlSRUQiID0gInRydWUiIF07IHRoZW4KKyAgICAgICAgIyBUcnkgdG8gZ2V0IHRoZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBiaXRiYWtlCisgICAgICAgIHR5cGUgLVAgYml0YmFrZSAmPi9kZXYvbnVsbCB8fCB7CisgICAgICAgICAgICBlY2hvICJJbiBvcmRlciBmb3IgdGhpcyBzY3JpcHQgdG8gZHluYW1pY2FsbHkgaW5mZXIgcGF0aHMiOworICAgICAgICAgICAgZWNobyAidG8ga2VybmVscyBvciBmaWxlc3lzdGVtIGltYWdlcywgeW91IGVpdGhlciBuZWVkIjsKKyAgICAgICAgICAgIGVjaG8gImJpdGJha2UgaW4geW91ciBQQVRIIG9yIHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiI7CisgICAgICAgICAgICBlY2hvICJiZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdCIgPiYyOworICAgICAgICAgICAgZXhpdCAxOyB9CisKKyAgICAgICAgIyBXZSBoYXZlIGJpdGJha2UgaW4gUEFUSCwgZ2V0IHRoZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBiaXRiYWtlCisgICAgICAgIEJJVEJBS0VfRU5WX1RNUEZJTEU9YG1rdGVtcCAtLXRtcGRpciBydW5xZW11LlhYWFhYWFhYWFhgCisgICAgICAgIGlmIFsgIiQ/IiAhPSAiMCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBta3RlbXAgZmFpbGVkIGZvciBiaXRiYWtlIGVudmlyb25tZW50IG91dHB1dCIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorCisgICAgICAgIE1BQ0hJTkU9JE1BQ0hJTkUgYml0YmFrZSAtZSA+ICRCSVRCQUtFX0VOVl9UTVBGSUxFCisgICAgICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF0gOyB0aGVuCisgICAgICAgICAgICBPRV9UTVBESVI9YHNlZCAtbiAncy9eVE1QRElSPVwiXCguKlwpXCIvXDEvcCcgJEJJVEJBS0VfRU5WX1RNUEZJTEVgCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLXogIiRERVBMT1lfRElSX0lNQUdFIiBdIDsgdGhlbgorICAgICAgICAgICAgREVQTE9ZX0RJUl9JTUFHRT1gc2VkIC1uICdzL15ERVBMT1lfRElSX0lNQUdFPVwiXCguKlwpXCIvXDEvcCcgJEJJVEJBS0VfRU5WX1RNUEZJTEVgCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF07IHRoZW4KKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIGVycm9ycyBmcm9tIGJpdGJha2UgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBrbm93IGFib3V0CisgICAgICAgICAgICBCSVRCQUtFX09VVFBVVD1gY2F0ICRCSVRCQUtFX0VOVl9UTVBGSUxFIHwgd2MgLWxgCisgICAgICAgICAgICBpZiBbICIkQklUQkFLRV9PVVRQVVQiIC1lcSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiB0aGlzIHNjcmlwdCBuZWVkcyB0byBiZSBydW4gZnJvbSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwgb3IgeW91IG5lZWQiCisgICAgICAgICAgICAgICAgZWNobyAidG8gZXhwbGljaXRseSBzZXQgT0VfVE1QRElSIGFuZCBERVBMT1lfRElSX0lNQUdFIGluIHlvdXIgZW52aXJvbm1lbnQiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZWNobyAiVGhlcmUgd2FzIGFuIGVycm9yIHJ1bm5pbmcgYml0YmFrZSB0byBkZXRlcm1pbmUgVE1QRElSIgorICAgICAgICAgICAgICAgIGVjaG8gIkhlcmUgaXMgdGhlIG91dHB1dCBmcm9tICdiaXRiYWtlIC1lJzoiCisgICAgICAgICAgICAgICAgY2F0ICRCSVRCQUtFX0VOVl9UTVBGSUxFCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgcm0gJEJJVEJBS0VfRU5WX1RNUEZJTEUKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgICAgICBybSAkQklUQkFLRV9FTlZfVE1QRklMRQorICAgIGZpCit9CisKK3NldHVwX3N5c3Jvb3QoKSB7CisgICAgIyBUb29sY2hhaW4gaW5zdGFsbHMgc2V0IHVwICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgaW4gdGhlaXIKKyAgICAjIGVudmlyb25tZW50IHNjcmlwdC4gSWYgdGhhdCB2YXJpYWJsZSBpc24ndCBzZXQsIHdlJ3JlCisgICAgIyBlaXRoZXIgaW4gYW4gaW4tdHJlZSBidWlsZCBzY2VuYXJpbyBvciB0aGUgZW52aXJvbm1lbnQKKyAgICAjIHNjcmlwdCB3YXNuJ3Qgc291cmNlJ2QuCisgICAgaWYgWyAteiAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCIgXTsgdGhlbgorICAgICAgICBzZXR1cF9wYXRoX3ZhcnMKKyAgICAgICAgQlVJTERfQVJDSD1gdW5hbWUgLW1gCisgICAgICAgIEJVSUxEX09TPWB1bmFtZSB8IHRyICdbQS1aXScgJ1thLXpdJ2AKKyAgICAgICAgQlVJTERfU1lTPSIkQlVJTERfQVJDSC0kQlVJTERfT1MiCisKKyAgICAgICAgT0VDT1JFX05BVElWRV9TWVNST09UPSRPRV9UTVBESVIvc3lzcm9vdHMvJEJVSUxEX1NZUworICAgIGZpIAorCisgICAgIyBTb21lIHJlY2lwZXMgc3RvcmUgdGhlIEJJT1MgdW5kZXIgJE9FX1RNUERJUi9zeXNyb290cy8kTUFDSElORSwKKyAgICAjIG5vdyBkZWZpbmVkIGFzIE9FQ09SRV9NQUNISU5FX1NZU1JPT1QuIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNlYXJjaGluZworICAgICMgQklPUywgVkdBIEJJT1MgYW5kIGtleW1hcHMuCisgICAgaWYgWyAteiAiJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QiIF07IHRoZW4KKyAgICAgICAgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVD0kT0VfVE1QRElSL3N5c3Jvb3RzLyRNQUNISU5FCisgICAgZmkKK30KKworIyBMb2NhdGUgYSByb290ZnMgaW1hZ2UgdG8gYm9vdCB3aGljaCBtYXRjaGVzIG91ciBleHBlY3RlZAorIyBtYWNoaW5lIGFuZCBmc3R5cGUuIAorZmluZGltYWdlKCkgeworICAgIHdoZXJlPSQxCisgICAgbWFjaGluZT0kMgorICAgIGV4dGVuc2lvbj0kMworCisgICAgIyBTb3J0IHJvb3RmcyBjYW5kaWRhdGVzIGJ5IG1vZGlmaWNhdGlvbiB0aW1lIC0gdGhlIG1vc3QKKyAgICAjIHJlY2VudGx5IGNyZWF0ZWQgb25lIGlzIHRoZSBvbmUgd2UgbW9zdCBsaWtlbHkgd2FudCB0byBib290LgorICAgIGZpbGVuYW1lPWBscyAtdDEgJHdoZXJlLyotaW1hZ2UqJG1hY2hpbmUuJGV4dGVuc2lvbiAyPi9kZXYvbnVsbCB8IGhlYWQgLW4xYAorICAgIGlmIFsgIngkZmlsZW5hbWUiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIFJPT1RGUz0kZmlsZW5hbWUKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgYSAkbWFjaGluZSByb290ZnMgaW1hZ2UgaW4gJHdoZXJlLiIKKyAgICBleGl0IDEKK30KKworaWYgWyAtZSAiJFJPT1RGUyIgLWEgLXogIiRGU1RZUEUiIF07IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbgorICAgIEVYVD1gZWNobyAkUk9PVEZTIHwgYXdrIC1GIC4gJ3sgcHJpbnQgXCRORiB9J2AKKyAgICBpZiBbICJ4JEVYVCIgPSAieGV4dDIiIC1vICJ4JEVYVCIgPSAieGV4dDMiIC1vIFwKKyAgICAgICAgICAieCRFWFQiID0gInhqZmZzMiIgLW8gIngkRVhUIiA9ICJ4YnRyZnMiIC1vIFwKKyAgICAgICAgICAieCRFWFQiID0gInhleHQ0IiBdOyB0aGVuCisgICAgICAgIEZTVFlQRT0kRVhUCisgICAgZWxzZQorICAgICAgICBlY2hvICJOb3RlOiBVbmFibGUgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gZXh0ZW5zaW9uIGZvciAkUk9PVEZTIgorICAgICAgICBlY2hvICJXZSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBGU1RZUEUgZm9yICRNQUNISU5FIgorICAgICAgICAjIC4uLndoaWNoIGlzIGRvbmUgZnVydGhlciBiZWxvdy4uLgorICAgIGZpCitmaQorCitpZiBbIC16ICIkS0VSTkVMIiAtYSAieCRGU1RZUEUiICE9ICJ4dm1kayIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGltZyIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgIHNldHVwX3BhdGhfdmFycyAxCisgICAgZXZhbCBrZXJuZWxfZmlsZT1cJCR7bWFjaGluZTJ9X0RFRkFVTFRfS0VSTkVMCisgICAgS0VSTkVMPSRERVBMT1lfRElSX0lNQUdFLyRrZXJuZWxfZmlsZQorCisgICAgaWYgWyAteiAiJEtFUk5FTCIgXTsgdGhlbgorICAgICAgICBlcnJvciAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IGtlcm5lbCBmb3IgTUFDSElORSBbJE1BQ0hJTkVdIgorICAgIGZpCitmaQorIyBLRVJORUwgaXMgbm93IHNldCBmb3IgYWxsIGNhc2VzCisKK2lmIFsgLXogIiRGU1RZUEUiIF07IHRoZW4KKyAgICBldmFsIEZTVFlQRT1cJCR7bWFjaGluZTJ9X0RFRkFVTFRfRlNUWVBFCisKKyAgICBpZiBbIC16ICIkRlNUWVBFIiBdOyB0aGVuCisgICAgICAgIGVycm9yICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgZnN0eXBlIGZvciBNQUNISU5FIFskTUFDSElORV0iCisgICAgZmkKK2ZpCisKKyMgRlNUWVBFIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworCisjIEhhbmRsZSBjYXNlcyB3aGVyZSBhIFJPT1RGUyB0eXBlIGlzIGdpdmVuIGluc3RlYWQgb2YgYSBmaWxlbmFtZSwgZS5nLgorIyBjb3JlLWltYWdlLXNhdG8KK2lmIFsgIiRMQVpZX1JPT1RGUyIgPSAidHJ1ZSIgXTsgdGhlbgorICAgIHNldHVwX3BhdGhfdmFycyAxCisgICAgZWNobyAiQXNzdW1pbmcgJFJPT1RGUyByZWFsbHkgbWVhbnMgJERFUExPWV9ESVJfSU1BR0UvJFJPT1RGUy0kTUFDSElORS4kRlNUWVBFIgorICAgIGlmIFsgIiRGU1RZUEUiID0gImhkZGltZyIgLW8gIngkRlNUWVBFIiA9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgICAgIFZNPSRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRQorICAgIGVsc2UKKyAgICAgICAgUk9PVEZTPSRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRQorICAgIGZpCitmaQorCitpZiBbIC16ICIkUk9PVEZTIiAtYSAieCRGU1RZUEUiICE9ICJ4dm1kayIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGltZyIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgIHNldHVwX3BhdGhfdmFycyAxCisgICAgVD0kREVQTE9ZX0RJUl9JTUFHRQorICAgIGV2YWwgcm9vdGZzX2xpc3Q9XCQke21hY2hpbmUyfV9ERUZBVUxUX1JPT1RGUworICAgIGZpbmRpbWFnZSAkVCAkTUFDSElORSAkRlNUWVBFCisKKyAgICBpZiBbIC16ICIkUk9PVEZTIiBdOyB0aGVuCisgICAgICAgIGVycm9yICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgcm9vdGZzIGZvciBNQUNISU5FIFskTUFDSElORV0iCisgICAgZmkKK2ZpCisjIFJPT1RGUyBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMsIG5vdyBleHBhbmQgaXQgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aCwgaXQgc2hvdWxkIGV4aXN0IGF0IHRoaXMgcG9pbnQKKworUk9PVEZTPWByZWFkbGluayAtZiAkUk9PVEZTYAorCitlY2hvICIiCitlY2hvICJDb250aW51aW5nIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiIKK2lmIFsgIngkRlNUWVBFIiAhPSAieHZtZGsiIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRpbWciIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRkaXJlY3QiIF07IHRoZW4KKyAgICBlY2hvICJLRVJORUw6IFskS0VSTkVMXSIKKyAgICBlY2hvICJST09URlM6IFskUk9PVEZTXSIKK2Vsc2UKKyAgICBlY2hvICJWTURLOiAgIFskVk1dIgorZmkKK2VjaG8gIkZTVFlQRTogWyRGU1RZUEVdIgorCitzZXR1cF9zeXNyb290CisjIE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBhbmQgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVCBhcmUgbm93IHNldCBmb3IgYWxsIGNhc2VzCisKK0lOVEVSTkFMX1NDUklQVD0iJDAtaW50ZXJuYWwiCitpZiBbICEgLWYgIiRJTlRFUk5BTF9TQ1JJUFQiIC1vICEgLXIgIiRJTlRFUk5BTF9TQ1JJUFQiIF07IHRoZW4KK0lOVEVSTkFMX1NDUklQVD1gd2hpY2ggcnVucWVtdS1pbnRlcm5hbGAKK2ZpCisKKyMgU3BlY2lmeSBkaXJlY3RvcnkgZm9yIEJJT1MsIFZHQSBCSU9TIGFuZCBrZXltYXBzCitpZiBbICEgLXogIiRDVVNUT01CSU9TRElSIiBdOyB0aGVuCisgICAgaWYgWyAtZCAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgorICAgICAgICBlY2hvICJBc3N1bWluZyBiaW9zZGlyIGlzICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtTCAkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgIGVsaWYgWyAtZCAiJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiIF07IHRoZW4KKyAgICAgICAgZWNobyAiQXNzdW1pbmcgYmlvc2RpciBpcyAkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKKyAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1MICRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgIGVsc2UKKyAgICAgICAgaWYgWyAhIC1kICIkQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiQ3VzdG9tIEJJT1MgZGlyZWN0b3J5IG5vdCBmb3VuZC4gVHJpZWQ6ICRDVVNUT01CSU9TRElSIgorICAgICAgICAgICAgZWNobyAiYW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgICAgICAgICBlY2hvICJhbmQgJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIkFzc3VtaW5nIGJpb3NkaXIgaXMgJENVU1RPTUJJT1NESVIiCisgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtTCAkQ1VTVE9NQklPU0RJUiIKKyAgICBmaQorZmkKKworLiAkSU5URVJOQUxfU0NSSVBUCitleGl0ICQ/CmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1hZGRwdGFibGUyaW1hZ2UgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1hZGRwdGFibGUyaW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjAxOTVhZAotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZQpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKworIyBBZGQgYSBwYXJ0aW9uIHRhYmxlIHRvIGFuIGV4dDIgaW1hZ2UgZmlsZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0lNQUdFPSQxCitJTUFHRU9VVD0kMgorCitlY2hvICRJTUFHRQorZWNobyAkSU1BR0VPVVQKKworc2l6ZT1gbHMgLWwgJElNQUdFIHwgYXdrICd7IHByaW50ICQ1fSdgCitzaXplMj1gZXhwciAkc2l6ZSAvIDUxMiAvIDE2IC8gNjNgCisKK2VjaG8gJHNpemUKK2VjaG8gJHNpemUyCisKKyMgTUJSIFNpemUgPSA1MTIgKiA2MyBieXRlcworZGQgaWY9L2Rldi96ZXJvIG9mPSRJTUFHRU9VVCBjb3VudD02MworCitlY2hvICJ4IiA+IC90bXAvZmRpc2suY21kcworZWNobyAiYyIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICIxMDI0IiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gImgiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiMTYiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiciIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJuIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gInAiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiMSIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICIxIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gIiRzaXplMiIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJ3IiA+PiAvdG1wL2ZkaXNrLmNtZHMKKworL3NiaW4vZmRpc2sgJElNQUdFT1VUIDwgL3RtcC9mZGlzay5jbWRzCitjYXQgJElNQUdFID4+ICRJTUFHRU9VVApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZXhwb3J0LXJvb3RmcyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDBhYjIwMQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMKQEAgLTAsMCArMSwxNjMgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCit1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydH0gPG5mcy1leHBvcnQtZGlyPiIKK30KKworaWYgWyAkIyAhPSAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgW1sgIiQxIiAhPSAic3RhcnQiICYmICIkMSIgIT0gInN0b3AiICYmICIkMSIgIT0gInJlc3RhcnQiIF1dOyB0aGVuCisJZWNobyAiVW5rbm93biBjb21tYW5kICckMSciCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgISAtZCAiJDIiIF07IHRoZW4KKwllY2hvICJFcnJvcjogJyQyJyBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorCWV4aXQgMQorZmkKKyMgRW5zdXJlIHRoZSBuZnMtZXhwb3J0LWRpciBpcyBhbiBhYnNvbHV0ZSBwYXRoCitORlNfRVhQT1JUX0RJUj0kKGNkICIkMiIgJiYgcHdkKQorCitTWVNST09UX1NFVFVQX1NDUklQVD1gd2hpY2ggb2UtZmluZC1uYXRpdmUtc3lzcm9vdCAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkU1lTUk9PVF9TRVRVUF9TQ1JJUFQiIF07IHRoZW4KKwllY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdGhlIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3Qgc2NyaXB0IgorCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdD8iCisJZXhpdCAxCitmaQorLiAkU1lTUk9PVF9TRVRVUF9TQ1JJUFQKKworaWYgWyAhIC1lICIkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluL3VuZnNkIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHVuZnNkIGJpbmFyeSBpbiAkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluLyIKKworCWlmIFsgIngkT0VDT1JFX0RJU1RST19WRVJTSU9OIiA9ICJ4IiBdOyB0aGVuCisJCWVjaG8gIkhhdmUgeW91IHJ1biAnYml0YmFrZSBtZXRhLWlkZS1zdXBwb3J0Jz8iCisJZWxzZQorCQllY2hvICJUaGlzIHNob3VsZG4ndCBoYXBwZW4gLSBzb21ldGhpbmcgaXMgbWlzc2luZyBmcm9tIHlvdXIgdG9vbGNoYWluIGluc3RhbGxhdGlvbiIKKwlmaQorCWV4aXQgMQorZmkKKworaWYgWyAhIC1kIH4vLnJ1bnFlbXUtc2RrIF07IHRoZW4KKwlta2RpciAtcCB+Ly5ydW5xZW11LXNkaworZmkKKworTkZTX0lOU1RBTkNFPSR7TkZTX0lOU1RBTkNFOj0wfQorRVhQT1JUUz1+Ly5ydW5xZW11LXNkay9leHBvcnRzJE5GU19JTlNUQU5DRQorUk1UQUI9fi8ucnVucWVtdS1zZGsvcm10YWIkTkZTX0lOU1RBTkNFCitORlNQSUQ9fi8ucnVucWVtdS1zZGsvbmZzJE5GU19JTlNUQU5DRS5waWQKK01PVU5UUElEPX4vLnJ1bnFlbXUtc2RrL21vdW50JE5GU19JTlNUQU5DRS5waWQKKworUFNFVURPX09QVFM9Ii1QICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyIgorUFNFVURPX0xPQ0FMU1RBVEVESVI9IiRORlNfRVhQT1JUX0RJUi8uLi8kKGJhc2VuYW1lICRORlNfRVhQT1JUX0RJUikucHNldWRvX3N0YXRlIgorZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSCisKK2lmIFsgISAtZCAiJFBTRVVET19MT0NBTFNUQVRFRElSIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6ICRQU0VVRE9fTE9DQUxTVEFURURJUiBkb2VzIG5vdCBleGlzdC4iCisJZWNobyAiRGlkIHlvdSBjcmVhdGUgdGhlIGV4cG9ydCBkaXJlY3RvcnkgdXNpbmcgcnVucWVtdS1leHRyYWN0LXNkaz8iCisJZXhpdCAxCQorZmkKKworIyBycGMubW91bnRkIFJQQyBwb3J0CitORlNfTU9VTlRQUk9HPSRbIDIxMTExICsgJE5GU19JTlNUQU5DRSBdCisjIHJwYy5uZnNkIFJQQyBwb3J0CitORlNfTkZTUFJPRz0kWyAxMTExMSArICRORlNfSU5TVEFOQ0UgXQorIyBORlMgcG9ydCBudW1iZXIKK05GU19QT1JUPSRbIDMwNDkgKyAyICogJE5GU19JTlNUQU5DRSBdCisjIG1vdW50ZCBwb3J0IG51bWJlcgorTU9VTlRfUE9SVD0kWyAzMDQ4ICsgMiAqICRORlNfSU5TVEFOQ0UgXQorCisjIyBGb3IgZGVidWdnaW5nIHlvdSB3b3VsZCBhZGRpdGlvbmFsbHkgYWRkCisjIyAtLWRlYnVnIGFsbAorVU5GU0RfT1BUUz0iLXAgLU4gLWkgJE5GU1BJRCAtZSAkRVhQT1JUUyAteCAkTkZTX05GU1BST0cgLW4gJE5GU19QT1JUIC15ICRORlNfTU9VTlRQUk9HIC1tICRNT1VOVF9QT1JUIgorCisjIFNldHVwIHRoZSBleHBvcnRzIGZpbGUKK2lmIFsgIiQxIiA9ICJzdGFydCIgXTsgdGhlbgorCWVjaG8gIkNyZWF0aW5nIGV4cG9ydHMgZmlsZS4uLiIKKwllY2hvICIkTkZTX0VYUE9SVF9ESVIgKHJ3LGFzeW5jLG5vX3Jvb3Rfc3F1YXNoLG5vX2FsbF9zcXVhc2gsaW5zZWN1cmUpIiA+ICRFWFBPUlRTCitmaQorCisjIFNlZSBob3cgd2Ugd2VyZSBjYWxsZWQuCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJUE9SVE1BUF9SVU5OSU5HPWBwcyAtZWYgfCBncmVwIHBvcnRtYXAgfCBncmVwIC12IGdyZXBgCisJUlBDQklORF9SVU5OSU5HPWBwcyAtZWYgfCBncmVwIHJwY2JpbmQgfCBncmVwIC12IGdyZXBgCisJaWYgW1sgIngkUE9SVE1BUF9SVU5OSU5HIiA9ICJ4IiAmJiAieCRSUENCSU5EX1JVTk5JTkciID0gIngiIF1dOyB0aGVuCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJCWVjaG8gIkVycm9yOiBuZWl0aGVyIHJwY2JpbmQgbm9yIHBvcnRtYXAgYXBwZWFyIHRvIGJlIHJ1bm5pbmciCisJCWVjaG8gIlBsZWFzZSBpbnN0YWxsIGFuZCBzdGFydCBvbmUgb2YgdGhlc2Ugc2VydmljZXMgZmlyc3QiCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJCWVjaG8gIlRpcDogZm9yIHJlY2VudCBVYnVudHUgaG9zdHMsIHJ1bjoiCisJCWVjaG8gIiAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgcnBjYmluZCIKKwkJZWNobyAiVGhlbiBhZGQgT1BUSU9OUz1cIi1pIC13XCIgIHRvIC9ldGMvZGVmYXVsdC9ycGNiaW5kIGFuZCBydW4iCisJCWVjaG8gIiAgc3VkbyBzZXJ2aWNlIHBvcnRtYXAgcmVzdGFydCIKKworCQlleGl0IDEKKwlmaQorCisJZWNobyAiU3RhcnRpbmcgVXNlciBNb2RlIG5mc2QiCisJZWNobyAiICAkUFNFVURPICRQU0VVRE9fT1BUUyAkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluL3VuZnNkICRVTkZTRF9PUFRTIgorCSRQU0VVRE8gJFBTRVVET19PUFRTICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NiaW4vdW5mc2QgJFVORlNEX09QVFMKKwlpZiBbICEgJD8gPSAwIF07IHRoZW4KKwkJZWNobyAiRXJyb3Igc3RhcnRpbmcgbmZzZCIKKwkJZXhpdCAxCisJZmkKKwkjIENoZWNrIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHN0YXJ0ZWQgb2suCisJaWYgWyAhIC1mICRORlNQSUQgXTsgdGhlbgorCQllY2hvICJycGMubmZzZCBkaWQgbm90IHN0YXJ0IGNvcnJlY3RseSIKKwkJZXhpdCAxCisJZmkKKwlwcyAtZnAgYGNhdCAkTkZTUElEYCA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKKwlpZiBbICEgJD8gPSAwIF07IHRoZW4KKwkJZWNobyAicnBjLm5mc2QgZGlkIG5vdCBzdGFydCBjb3JyZWN0bHkiCisJCWV4aXQgMQorCWZpCisJZWNobyAiICIKKwllY2hvICJPbiB5b3VyIHRhcmdldCBwbGVhc2UgcmVtZW1iZXIgdG8gYWRkIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmb3IgTkZTIgorCWVjaG8gIm5mc3Jvb3Q9SVBfQUREUkVTUzokTkZTX0VYUE9SVF9ESVIsbmZzdmVycz0zLHBvcnQ9JE5GU0RfUE9SVCxtb3VudHByb2c9JE1PVU5URF9SUENQT1JULG5mc3Byb2c9JE5GU0RfUlBDUE9SVCx1ZHAsbW91bnRwb3J0PSRNT1VOVERfUE9SVCIKKwk7OworICBzdG9wKQorCWlmIFsgLWYgIiRORlNQSUQiIF07IHRoZW4KKwkJZWNobyAiU3RvcHBpbmcgcnBjLm5mc2QiCisJCWtpbGwgYGNhdCAkTkZTUElEYAorCQlybSAtZiAkTkZTUElECisJZWxzZQorCQllY2hvICJObyBQSUQgZmlsZSwgbm90IHN0b3BwaW5nIHJwYy5uZnNkIgorCWZpCisJaWYgWyAtZiAiJEVYUE9SVFMiIF07IHRoZW4KKwkJZWNobyAiUmVtb3ZpbmcgZXhwb3J0cyBmaWxlIgorCQlybSAtZiAkRVhQT1JUUworCWZpCisJOzsKKyAgcmVzdGFydCkKKwkkMCBzdG9wICRORlNfRVhQT1JUX0RJUgorCSQwIHN0YXJ0ICRORlNfRVhQT1JUX0RJUiAKKwlpZiBbICEgJD8gPSAwIF07IHRoZW4KKwkJZXhpdCAxCisJZmkKKwk7OworICAqKQorCWVjaG8gIiQwIHtzdGFydHxzdG9wfHJlc3RhcnR9IDxuZnMtZXhwb3J0LWRpcj4iCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1leHRyYWN0LXNkayBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWV4dHJhY3Qtc2RrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyZGRkNDgKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1leHRyYWN0LXNkawpAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL2Jhc2gKKyMKKyMgVGhpcyB1dGlsaXR5IGV4dHJhY3RzIGFuIFNESyBpbWFnZSB0YXJiYWxsIHVzaW5nIHBzZXVkbywgYW5kIHN0b3JlcworIyB0aGUgcHNldWRvIGRhdGFiYXNlIGluIHZhci9wc2V1ZG8gd2l0aGluIHRoZSByb290ZnMuIElmIHlvdSB3YW50IHRvCisjIGJvb3QgUUVNVSB1c2luZyBhbiBuZnNyb290LCB5b3UgKm11c3QqIHVzZSB0aGlzIHNjcmlwdCB0byBjcmVhdGUgdGhlCisjIHJvb3RmcyB0byBlbnN1cmUgaXQgaXMgZG9uZSBjb3JyZWN0bHkgd2l0aCBwc2V1ZG8uCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitmdW5jdGlvbiB1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJDAgPGltYWdlLXRhcmJhbGw+IDxleHRyYWN0LWRpcj4iCit9CisKK2lmIFsgJCMgLW5lIDIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitTWVNST09UX1NFVFVQX1NDUklQVD1gd2hpY2ggb2UtZmluZC1uYXRpdmUtc3lzcm9vdCAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkU1lTUk9PVF9TRVRVUF9TQ1JJUFQiIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdGhlIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3Qgc2NyaXB0IgorICAgIGVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB5b3VyIGJ1aWxkIHN5c3RlbSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IgorICAgIGV4aXQgMQorZmkKKy4gJFNZU1JPT1RfU0VUVVBfU0NSSVBUCitQU0VVRE9fT1BUUz0iLVAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IiCisKK1JPT1RGU19UQVJCQUxMPSQxCitTREtfUk9PVEZTX0RJUj0kMgorCitpZiBbICEgLWUgIiRST09URlNfVEFSQkFMTCIgXTsgdGhlbgorICAgCWVjaG8gIkVycm9yOiBzZGsgdGFyYmFsbCAnJFJPT1RGU19UQVJCQUxMJyBkb2VzIG5vdCBleGlzdCIKKyAgIAl1c2FnZQorICAgCWV4aXQgMQorZmkKKworIyBDb252ZXJ0IFNES19ST09URlNfRElSIHRvIGEgZnVsbCBwYXRobmFtZQoraWYgW1sgJHtTREtfUk9PVEZTX0RJUjowOjF9ICE9ICIvIiBdXTsgdGhlbgorCVNES19ST09URlNfRElSPSQocmVhZGxpbmsgLWYgJChwd2QpLyRTREtfUk9PVEZTX0RJUikKK2ZpCisKK1RBUl9PUFRTPSIiCitpZiBbWyAiJFJPT1RGU19UQVJCQUxMIiA9fiB0YXJcLmJ6MiQgXV07IHRoZW4KKwlUQVJfT1BUUz0iLS1udW1lcmljLW93bmVyIC14amYiCitmaQoraWYgW1sgIiRST09URlNfVEFSQkFMTCIgPX4gdGFyXC5neiQgXV07IHRoZW4KKwlUQVJfT1BUUz0iLS1udW1lcmljLW93bmVyIC14emYiCitmaQoraWYgW1sgIiRST09URlNfVEFSQkFMTCIgPX4gXC50YXIkIF1dOyB0aGVuCisJVEFSX09QVFM9Ii0tbnVtZXJpYy1vd25lciAteGYiCitmaQoraWYgWyAteiAiJFRBUl9PUFRTIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFVuYWJsZSB0byBkZXRlcm1pbmUgc2RrIHRhcmJhbGwgZm9ybWF0IgorCWVjaG8gIkFjY2VwdGVkIHR5cGVzOiAudGFyIC8gLnRhci5neiAvIC50YXIuYnoyIgorCWV4aXQgMQorZmkKKworaWYgWyAhIC1kICIkU0RLX1JPT1RGU19ESVIiIF07IHRoZW4KKwllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJFNES19ST09URlNfRElSIgorCW1rZGlyIC1wICIkU0RLX1JPT1RGU19ESVIiCitmaQorCitwc2V1ZG9fc3RhdGVfZGlyPSIkU0RLX1JPT1RGU19ESVIvLi4vJChiYXNlbmFtZSAiJFNES19ST09URlNfRElSIikucHNldWRvX3N0YXRlIgorcHNldWRvX3N0YXRlX2Rpcj0iJChyZWFkbGluayAtZiAkcHNldWRvX3N0YXRlX2RpcikiCisKK2lmIFsgLWUgIiRwc2V1ZG9fc3RhdGVfZGlyIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6ICRwc2V1ZG9fc3RhdGVfZGlyIGFscmVhZHkgZXhpc3RzISIKKwllY2hvICJQbGVhc2UgZGVsZXRlIHRoZSByb290ZnMgdHJlZSBhbmQgcHNldWRvIGRpcmVjdG9yeSBtYW51YWxseSIKKyAgICAgICAgZWNobyAiaWYgdGhpcyBpcyByZWFsbHkgd2hhdCB5b3Ugd2FudC4iCisJZXhpdCAxCitmaQorCitta2RpciAtcCAiJHBzZXVkb19zdGF0ZV9kaXIiCit0b3VjaCAiJHBzZXVkb19zdGF0ZV9kaXIvcHNldWRvLnBpZCIKK1BTRVVET19MT0NBTFNUQVRFRElSPSIkcHNldWRvX3N0YXRlX2RpciIKK2V4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgorCitlY2hvICJFeHRyYWN0aW5nIHJvb3RmcyB0YXJiYWxsIHVzaW5nIHBzZXVkby4uLiIKK2VjaG8gIiRQU0VVRE8gJFBTRVVET19PUFRTIHRhciAtQyBcIiRTREtfUk9PVEZTX0RJUlwiICRUQVJfT1BUUyBcIiRST09URlNfVEFSQkFMTFwiIgorJFBTRVVETyAkUFNFVURPX09QVFMgdGFyIC1DICIkU0RLX1JPT1RGU19ESVIiICRUQVJfT1BUUyAiJFJPT1RGU19UQVJCQUxMIgorCitESVJDSEVDSz1gbHMgLWwgIiRTREtfUk9PVEZTX0RJUiIgfCB3YyAtbGAKK2lmIFsgIiRESVJDSEVDSyIgLWx0IDUgXTsgdGhlbgorCWVjaG8gIldhcm5pbmc6IEkgZG9uJ3Qgc2VlIG1hbnkgZmlsZXMgaW4gJFNES19ST09URlNfRElSIgorCWVjaG8gIlBsZWFzZSBkb3VibGUtY2hlY2sgdGhlIGV4dHJhY3Rpb24gd29ya2VkIGFzIGludGVuZGVkIgorCWV4aXQgMAorZmkKKworZWNobyAiU0RLIGltYWdlIHN1Y2Nlc3NmdWxseSBleHRyYWN0ZWQgdG8gJFNES19ST09URlNfRElSIgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDNiMjdiZQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzCkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENyZWF0ZSBhICJiYW5rIiBvZiB0YXAgbmV0d29yayBkZXZpY2VzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlCisjIHJ1bnFlbXUgc2NyaXB0LiBUaGlzIHNjcmlwdCBuZWVkcyB0byBiZSBydW4gYXMgcm9vdCwgYW5kIHdpbGwKKyMgdXNlIHRoZSB0dW5jdGwgYmluYXJ5IGZyb20gdGhlIGJ1aWxkIHN5c3RlbSBzeXNyb290LiBOb3RlOiBtYW55IExpbnV4IAorIyBkaXN0cm9zIHRoZXNlIGRheXMgc3RpbGwgdXNlIGFuIG9sZGVyIHZlcnNpb24gb2YgdHVuY3RsIHdoaWNoIGRvZXMgbm90CisjIHN1cHBvcnQgdGhlIGdyb3VwIHBlcm1pc3Npb25zIG9wdGlvbiwgaGVuY2UgdGhlIG5lZWQgdG8gdXNlIHRoZSBidWlsZAorIyBzeXN0ZW0gcHJvdmlkZWQgdmVyc2lvbi4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK3VzYWdlKCkgeworCWVjaG8gIlVzYWdlOiBzdWRvICQwIDx1aWQ+IDxnaWQ+IDxudW0+IDxuYXRpdmUtc3lzcm9vdC1iYXNlZGlyPiIKKyAgICAgICAgZWNobyAiV2hlcmUgPHVpZD4gaXMgdGhlIG51bWVyaWMgdXNlciBpZCB0aGUgdGFwIGRldmljZXMgd2lsbCBiZSBvd25lZCBieSIKKwllY2hvICJXaGVyZSA8Z2lkPiBpcyB0aGUgbnVtZXJpYyBncm91cCBpZCB0aGUgdGFwIGRldmljZXMgd2lsbCBiZSBvd25lZCBieSIKKwllY2hvICI8bnVtPiBpcyB0aGUgbnVtYmVyIG9mIHRhcCBkZXZpY2VzIHRvIGNyZWF0ZSAoMCB0byByZW1vdmUgYWxsKSIKKwllY2hvICI8bmF0aXZlLXN5c3Jvb3QtYmFzZWRpcj4gaXMgdGhlIHBhdGggdG8gdGhlIGJ1aWxkIHN5c3RlbSdzIG5hdGl2ZSBzeXNyb290IgorCWV4aXQgMQorfQorCitpZiBbICRFVUlEIC1uZSAwIF07IHRoZW4KKwllY2hvICJFcnJvcjogVGhpcyBzY3JpcHQgbXVzdCBiZSBydW4gd2l0aCByb290IHByaXZpbGVnZXMiCisJZXhpdAorZmkKKworaWYgWyAkIyAtbmUgNCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IEluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIgorCXVzYWdlCitmaQorCitUVUlEPSQxCitHSUQ9JDIKK0NPVU5UPSQzCitTWVNST09UPSQ0CisKK1RVTkNUTD0kU1lTUk9PVC91c3IvYmluL3R1bmN0bAoraWYgW1sgISAteCAiJFRVTkNUTCIgfHwgLWQgIiRUVU5DVEwiIF1dOyB0aGVuCisJZWNobyAiRXJyb3I6ICRUVU5DVEwgaXMgbm90IGFuIGV4ZWN1dGFibGUiCisJdXNhZ2UKK2ZpCisKK1NDUklQVF9ESVI9YGRpcm5hbWUgJDBgCitSVU5RRU1VX0lGVVA9IiRTQ1JJUFRfRElSL3J1bnFlbXUtaWZ1cCIKK2lmIFsgISAteCAiJFJVTlFFTVVfSUZVUCIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0aGUgcnVucWVtdS1pZnVwIHNjcmlwdCBpbiAkU0NSSVBUX0RJUiIKKwlleGl0IDEKK2ZpCisKK0lGQ09ORklHPWB3aGljaCBpcCAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkSUZDT05GSUciIF07IHRoZW4KKwkjIElzIGl0IGV2ZXIgYW55d2hlcmUgZWxzZT8KKwlJRkNPTkZJRz0vc2Jpbi9pcAorZmkKK2lmIFsgISAteCAiJElGQ09ORklHIiBdOyB0aGVuCisgICAgICAgZWNobyAiJElGQ09ORklHIGNhbm5vdCBiZSBleGVjdXRlZCIKKyAgICAgICBleGl0IDEKK2ZpCisKKyMgRW5zdXJlIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZQorZm9yIHRhcCBpbiBgJElGQ09ORklHIGxpbmsgfCBncmVwIHRhcCB8IGF3ayAneyBwcmludCBcJDIgfScgfCBzZWQgcy86Ly9gOyBkbworCWVjaG8gIk5vdGU6IERlc3Ryb3lpbmcgcHJlLWV4aXN0aW5nIHRhcCBpbnRlcmZhY2UgJHRhcC4uLiIKKwkkVFVOQ1RMIC1kICR0YXAKK2RvbmUKKworZWNobyAiQ3JlYXRpbmcgJENPVU5UIHRhcCBkZXZpY2VzIGZvciBVSUQ6ICRUVUlEIEdJRDogJEdJRC4uLiIKK2ZvciAoKGluZGV4PTA7IGluZGV4IDwgJENPVU5UOyBpbmRleCsrKSk7IGRvCisJZWNobyAiQ3JlYXRpbmcgdGFwJGluZGV4IgorCWlmdXA9YCRSVU5RRU1VX0lGVVAgJFRVSUQgJEdJRCAkU1lTUk9PVCAyPiYxYAorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQllY2hvICJFcnJvciBydW5uaW5nIHR1bmN0bDogJGlmdXAiCisJCWV4aXQgMQorCWZpCitkb25lCisKKyMgVGhlIHJ1bnFlbXUgc2NyaXB0IHdpbGwgY2hlY2sgZm9yIHRoaXMgZmlsZSwgYW5kIGlmIGl0IGV4aXN0cywKKyMgd2lsbCB1c2UgdGhlIGV4aXN0aW5nIGJhbmsgb2YgdGFwIGRldmljZXMgd2l0aG91dCBjcmVhdGluZworIyBhZGRpdGlvbmFsIG9uZXMgdmlhIHN1ZG8uCit0b3VjaCAvZXRjL3J1bnFlbXUtbm9zdWRvCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pZmRvd24gYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pZmRvd24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY2NmNmYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9ydW5xZW11LWlmZG93bgpAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vYmFzaAorIworIyBRRU1VIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzY3JpcHQgdG8gYnJpbmcgZG93biB0YXAgZGV2aWNlcy4gVGhpcworIyB1dGlsaXR5IG5lZWRzIHRvIGJlIHJ1biBhcyByb290LCBhbmQgd2lsbCB1c2UgdGhlIHR1bmN0bCBiaW5hcnkKKyMgZnJvbSB0aGUgbmF0aXZlIHN5c3Jvb3QuIAorIworIyBJZiB5b3UgZmluZCB5b3Vyc2VsZiBjYWxsaW5nIHRoaXMgc2NyaXB0IGEgbG90LCB5b3UgY2FuIGFkZCB0aGUKKyMgdGhlIGZvbGxvd2luZyB0byB5b3VyIC9ldGMvc3Vkb2VycyBmaWxlIHRvIGJlIGFibGUgdG8gcnVuIHRoaXMKKyMgY29tbWFuZCB3aXRob3V0IGVudGVyaW5nIHlvdXIgcGFzc3dvcmQgZWFjaCB0aW1lOgorIworIyA8bXktdXNlcm5hbWU+IEFMTD1OT1BBU1NXRDogL3BhdGgvdG8vcnVucWVtdS1pZnVwCisjIDxteS11c2VybmFtZT4gQUxMPU5PUEFTU1dEOiAvcGF0aC90by9ydW5xZW11LWlmZG93bgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK3VzYWdlKCkgeworCWVjaG8gInN1ZG8gJChiYXNlbmFtZSAkMCkgPHRhcC1kZXY+IDxuYXRpdmUtc3lzcm9vdC1iYXNlZGlyPiIKK30KKworaWYgWyAkRVVJRCAtbmUgMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IChydW5xZW11LWlmZG93bikgbXVzdCBiZSBydW4gd2l0aCByb290IHByaXZpbGVnZXMiCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1uZSAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworVEFQPSQxCitOQVRJVkVfU1lTUk9PVF9ESVI9JDIKKworVFVOQ1RMPSROQVRJVkVfU1lTUk9PVF9ESVIvdXNyL2Jpbi90dW5jdGwKK2lmIFsgISAtZSAiJFRVTkNUTCIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0dW5jdGwgYmluYXJ5IGluICckTkFUSVZFX1NZU1JPT1RfRElSL3Vzci9iaW4nLCBwbGVhc2UgYml0YmFrZSBxZW11LWhlbHBlci1uYXRpdmUiCisJZXhpdCAxCitmaQorCiskVFVOQ1RMIC1kICRUQVAKKworIyBjbGVhbnVwIHRoZSByZW1haW5pbmcgaXB0YWJsZXMgcnVsZXMKK0lQVEFCTEVTPWB3aGljaCBpcHRhYmxlcyAyPiAvZGV2L251bGxgCitpZiBbICJ4JElQVEFCTEVTIiA9ICJ4IiBdOyB0aGVuCisJSVBUQUJMRVM9L3NiaW4vaXB0YWJsZXMKK2ZpCitpZiBbICEgLXggIiRJUFRBQkxFUyIgXTsgdGhlbgorCWVjaG8gIiRJUFRBQkxFUyBjYW5ub3QgYmUgZXhlY3V0ZWQiCisJZXhpdCAxCitmaQorbj0kWyAoYGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLydgICogMikgKyAxIF0KK2Rlc3Q9JFsgKGBlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nYCAqIDIpICsgMiBdCiskSVBUQUJMRVMgLUQgUE9TVFJPVVRJTkcgLXQgbmF0IC1qIE1BU1FVRVJBREUgLXMgMTkyLjE2OC43LiRuLzMyCiskSVBUQUJMRVMgLUQgUE9TVFJPVVRJTkcgLXQgbmF0IC1qIE1BU1FVRVJBREUgLXMgMTkyLjE2OC43LiRkZXN0LzMyCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pZnVwIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaWZ1cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNWEzZGI5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaWZ1cApAQCAtMCwwICsxLDEwNiBAQAorIyEvYmluL2Jhc2gKKyMKKyMgUUVNVSBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uIHNjcmlwdC4gVGhpcyB1dGlsaXR5IG5lZWRzIHRvCisjIGJlIHJ1biBhcyByb290LCBhbmQgd2lsbCB1c2UgdGhlIHR1bmN0bCBiaW5hcnkgZnJvbSBhIG5hdGl2ZSBzeXNyb290LgorIyBOb3RlOiBtYW55IExpbnV4IGRpc3Ryb3MgdGhlc2UgZGF5cyBzdGlsbCB1c2UgYW4gb2xkZXIgdmVyc2lvbiBvZgorIyB0dW5jdGwgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgb3B0aW9uLCBoZW5jZQorIyB0aGUgbmVlZCB0byB1c2UgYnVpbGQgc3lzdGVtJ3MgdmVyc2lvbi4KKyMKKyMgSWYgeW91IGZpbmQgeW91cnNlbGYgY2FsbGluZyB0aGlzIHNjcmlwdCBhIGxvdCwgeW91IGNhbiBhZGQgdGhlCisjIHRoZSBmb2xsb3dpbmcgdG8geW91ciAvZXRjL3N1ZG9lcnMgZmlsZSB0byBiZSBhYmxlIHRvIHJ1biB0aGlzCisjIGNvbW1hbmQgd2l0aG91dCBlbnRlcmluZyB5b3VyIHBhc3N3b3JkIGVhY2ggdGltZToKKyMKKyMgPG15LXVzZXJuYW1lPiBBTEw9Tk9QQVNTV0Q6IC9wYXRoL3RvL3J1bnFlbXUtaWZ1cAorIyA8bXktdXNlcm5hbWU+IEFMTD1OT1BBU1NXRDogL3BhdGgvdG8vcnVucWVtdS1pZmRvd24KKyMKKyMgSWYgeW91J2QgbGlrZSB0byBjcmVhdGUgYSBiYW5rIG9mIHRhcCBkZXZpY2VzIGF0IG9uY2UsIHlvdSBzaG91bGQgdXNlCisjIHRoZSBydW5xZW11LWdlbi10YXBkZXZzIHNjcmlwdCBpbnN0ZWFkLiBJZiB0YXAgZGV2aWNlcyBhcmUgc2V0IHVwIHVzaW5nCisjIHRoYXQgc2NyaXB0LCB0aGUgcnVucWVtdSBzY3JpcHQgd2lsbCBuZXZlciBlbmQgdXAgY2FsbGluZyB0aGlzCisjIHNjcmlwdC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCit1c2FnZSgpIHsKKwllY2hvICJzdWRvICQoYmFzZW5hbWUgJDApIDx1aWQ+IDxnaWQ+IDxuYXRpdmUtc3lzcm9vdC1iYXNlZGlyPiIKK30KKworaWYgWyAkRVVJRCAtbmUgMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IChydW5xZW11LWlmdXApIG11c3QgYmUgcnVuIHdpdGggcm9vdCBwcml2aWxlZ2VzIgorCWV4aXQgMQorZmkKKworaWYgWyAkIyAtbmUgMyBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK1VTRVJJRD0iLXUgJDEiCitHUk9VUD0iLWcgJDIiCitOQVRJVkVfU1lTUk9PVF9ESVI9JDMKKworVFVOQ1RMPSROQVRJVkVfU1lTUk9PVF9ESVIvdXNyL2Jpbi90dW5jdGwKK2lmIFsgISAteCAiJFRVTkNUTCIgXTsgdGhlbgorICAgICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0dW5jdGwgYmluYXJ5IGluICckTkFUSVZFX1NZU1JPT1RfRElSL3Vzci9iaW4nLCBwbGVhc2UgYml0YmFrZSBxZW11LWhlbHBlci1uYXRpdmUiCisJZXhpdCAxCitmaQorCitUQVA9YCRUVU5DVEwgLWIgJEdST1VQIDI+JjFgCitTVEFUVVM9JD8KK2lmIFsgJFNUQVRVUyAtbmUgMCBdOyB0aGVuCisjIElmIHR1bmN0bCAtZyBmYWlscywgdHJ5IHVzaW5nIHR1bmN0bCAtdSwgZm9yIG9sZGVyIGhvc3Qga2VybmVscyAKKyMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdGhlIFRVTlNFVEdST1VQIGlvY3RsCisJVEFQPWAkVFVOQ1RMIC1iICRVU0VSSUQgMj4mMWAKKwlTVEFUVVM9JD8KKwlpZiBbICRTVEFUVVMgLW5lIDAgXTsgdGhlbgorCQllY2hvICJ0dW5jdGwgZmFpbGVkOiIKKwkJZXhpdCAxCisJZmkKK2ZpCisKK0lGQ09ORklHPWB3aGljaCBpcCAyPiAvZGV2L251bGxgCitpZiBbICJ4JElGQ09ORklHIiA9ICJ4IiBdOyB0aGVuCisJIyBiZXR0ZXIgdGhhbiBub3RoaW5nLi4uCisJSUZDT05GSUc9L3NiaW4vaXAKK2ZpCitpZiBbICEgLXggIiRJRkNPTkZJRyIgXTsgdGhlbgorCWVjaG8gIiRJRkNPTkZJRyBjYW5ub3QgYmUgZXhlY3V0ZWQiCisJZXhpdCAxCitmaQorCitJUFRBQkxFUz1gd2hpY2ggaXB0YWJsZXMgMj4gL2Rldi9udWxsYAoraWYgWyAieCRJUFRBQkxFUyIgPSAieCIgXTsgdGhlbgorCUlQVEFCTEVTPS9zYmluL2lwdGFibGVzCitmaQoraWYgWyAhIC14ICIkSVBUQUJMRVMiIF07IHRoZW4KKwllY2hvICIkSVBUQUJMRVMgY2Fubm90IGJlIGV4ZWN1dGVkIgorCWV4aXQgMQorZmkKKworbj0kWyAoYGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLydgICogMikgKyAxIF0KKyRJRkNPTkZJRyBhZGRyIGFkZCAxOTIuMTY4LjcuJG4vMzIgYnJvYWRjYXN0IDE5Mi4xNjguNy4yNTUgZGV2ICRUQVAKKyRJRkNPTkZJRyBsaW5rIHNldCBkZXYgJFRBUCB1cAorCitkZXN0PSRbIChgZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AgKiAyKSArIDIgXQorJElGQ09ORklHIHJvdXRlIGFkZCB0byAxOTIuMTY4LjcuJGRlc3QgZGV2ICRUQVAKKworIyBzZXR1cCBOQVQgZm9yIHRhcDAgaW50ZXJmYWNlIHRvIGhhdmUgaW50ZXJuZXQgYWNjZXNzIGluIFFFTVUKKyRJUFRBQkxFUyAtQSBQT1NUUk9VVElORyAtdCBuYXQgLWogTUFTUVVFUkFERSAtcyAxOTIuMTY4LjcuJG4vMzIKKyRJUFRBQkxFUyAtQSBQT1NUUk9VVElORyAtdCBuYXQgLWogTUFTUVVFUkFERSAtcyAxOTIuMTY4LjcuJGRlc3QvMzIKK2VjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkCitlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi8kVEFQL3Byb3h5X2FycAorJElQVEFCTEVTIC1QIEZPUldBUkQgQUNDRVBUCisKK2VjaG8gJFRBUApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNTI3MjY4Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwKQEAgLTAsMCArMSw3MjQgQEAKKyMhL2Jpbi9iYXNoIC14CisKKyMgSGFuZGxlIHJ1bm5pbmcgT0UgaW1hZ2VzIHVuZGVyIHFlbXUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBDYWxsIHNldHRpbmc6CisjICAgUUVNVV9NRU1PUlkgKG9wdGlvbmFsKSAtIHNldCB0aGUgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgZW11YWx0ZWQgc3lzdGVtLgorIyAgIFNFUklBTF9MT0dGSUxFIChvcHRpb25hbCkgLSBsb2cgdGhlIHNlcmlhbCBwb3J0IG91dHB1dCB0byBhIGZpbGUKKyMKKyMgSW1hZ2Ugb3B0aW9uczoKKyMgICBNQUNISU5FIC0gdGhlIG1hY2hpbmUgdG8gcnVuCisjICAgRlNUWVBFIC0gdGhlIGltYWdlIHR5cGUgdG8gcnVuCisjICAgS0VSTkVMIC0gdGhlIGtlcm5lbCBpbWFnZSBmaWxlIHRvIHVzZQorIyAgIFJPT1RGUyAtIHRoZSBkaXNrIGltYWdlIGZpbGUgdG8gdXNlCisjCisKKworbWVtX3NpemU9LTEKKworI0dldCByaWQgb2YgPD4gYW5kIGdldCB0aGUgY29udGVudHMgb2YgZXh0cmEgcWVtdSBydW5uaW5nIHBhcmFtcworU0NSSVBUX1FFTVVfRVhUUkFfT1BUPWBlY2hvICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgfCBzZWQgLWUgJ3MvPC8vJyAtZSAncy8+Ly8nYAorI2lmIHVzZXIgc2V0IHFlbXUgbWVtb3J5LCBlZzogLW0gMjU2IGluIHFlbXUgZXh0cmEgcGFyYW1zLCB3ZSBuZWVkIHRvIGRvIHNvbWUgCisjIHZhbGlkYXRpb24gY2hlY2sKK21lbV9zZXQ9YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtbVtbOnNwYWNlOl1dICpbMC05XSpcKSdgCitpZiBbICEgLXogIiRtZW1fc2V0IiBdIDsgdGhlbgorI0dldCBtZW1vcnkgc2V0dGluZyBzaXplIGZyb20gdXNlciBpbnB1dAorICBtZW1fc2l6ZT1gZWNobyAkbWVtX3NldCB8IHNlZCAncy8tbVtbOnNwYWNlOl1dICovLydgCitlbHNlCisgICAgY2FzZSAiJE1BQ0hJTkUiIGluCisgICAgICAgICJxZW11eDg2IikKKyAgICAgICAgICAgIG1lbV9zaXplPTI1NgorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXV4ODYtNjQiKQorICAgICAgICAgICAgbWVtX3NpemU9MjU2CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdWFybSIpCisgICAgICAgICAgICBtZW1fc2l6ZT0xMjgKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11YXJtNjQiKQorICAgICAgICAgICAgbWVtX3NpemU9NTEyCisgICAgICAgICAgICA7OworICAgICAgICAicWVtdW1pY3JvYmxhemUiKQorICAgICAgICAgICAgbWVtX3NpemU9NjQKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11bWlwcyJ8InFlbXVtaXBzNjQiKQorICAgICAgICAgICAgbWVtX3NpemU9MjU2CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdXBwYyIpCisgICAgICAgICAgICBtZW1fc2l6ZT0yNTYKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11c2g0IikKKyAgICAgICAgICAgIG1lbV9zaXplPTEwMjQKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11enlucSIpCisgICAgICAgICAgICBtZW1fc2l6ZT0xMDI0CisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgbWVtX3NpemU9NjQKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCitmaQorCisjIFFFTVVfTUVNT1JZIGhhcyAnTScgYXBwZW5kZWQgdG8gbWVtX3NpemUKK1FFTVVfTUVNT1JZPSIkbWVtX3NpemUiTQorCisjIEJ1ZyA0MzM6IHFlbXVhcm0gY2Fubm90IHVzZSA+IDI1NiBNQiBSQU0KK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJG1lbV9zaXplIiAtbyAkbWVtX3NpemUgLWd0IDI1NiBdOyB0aGVuCisgICAgICAgIGVjaG8gIldBUk5JTkc6IHFlbXVhcm0gZG9lcyBub3Qgc3VwcG9ydCA+IDI1Nk0gb2YgUkFNLiIKKyAgICAgICAgZWNobyAiQ2hhbmdpbmcgUUVNVV9NRU1PUlkgdG8gZGVmYXVsdCBvZiAyNTZNLiIKKyAgICAgICAgUUVNVV9NRU1PUlk9IjI1Nk0iCisJbWVtX3NpemU9IjI1NiIKKyAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPWBlY2hvICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgfCBzZWQgLWUgInMvJG1lbV9zZXQvLW0gMjU2LyIgYAorICAgIGZpCitmaQorCisjIFdlIG5lZWQgdG8gc3BlY2lmeSAtbSA8bWVtX3NpemU+IHRvIG92ZXJjb21lIGEgYnVnIGluIHFlbXUgMC4xNC4wCisjIGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L3VidW50dS8rc291cmNlL3FlbXUta3ZtLytidWcvNTg0NDgwCisKK2lmIFsgLXogIiRtZW1fc2V0IiBdIDsgdGhlbgorICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLW0gJG1lbV9zaXplIgorZmkKKyMgVGhpcyBmaWxlIGlzIGNyZWF0ZWQgd2hlbiBydW5xZW11LWdlbi10YXBkZXZzIGNyZWF0ZXMgYSBiYW5rIG9mIHRhcAorIyBkZXZpY2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgc2hvdWxkIG5vdCBicmluZyB1cCBuZXcgb25lcyB1c2luZworIyBzdWRvLgorTk9TVURPX0ZMQUc9Ii9ldGMvcnVucWVtdS1ub3N1ZG8iCisKK1FFTVVJRlVQPWB3aGljaCBydW5xZW11LWlmdXAgMj4gL2Rldi9udWxsYAorUUVNVUlGRE9XTj1gd2hpY2ggcnVucWVtdS1pZmRvd24gMj4gL2Rldi9udWxsYAoraWYgWyAteiAiJFFFTVVJRlVQIiAtbyAhIC14ICIkUUVNVUlGVVAiIF07IHRoZW4KKyAgICAgICBlY2hvICJydW5xZW11LWlmdXAgY2Fubm90IGJlIGZvdW5kIG9yIGV4ZWN1dGVkIgorICAgICAgIGV4aXQgMQorZmkKK2lmIFsgLXogIiRRRU1VSUZET1dOIiAtbyAhIC14ICIkUUVNVUlGRE9XTiIgXTsgdGhlbgorICAgICAgIGVjaG8gInJ1bnFlbXUtaWZkb3duIGNhbm5vdCBiZSBmb3VuZCBvciBleGVjdXRlZCIKKyAgICAgICBleGl0IDEKK2ZpCisKK05GU1JVTk5JTkc9ImZhbHNlIgorCisjY2FwdHVyZSBvcmlnaW5hbCBzdHR5IHZhbHVlcworT1JJR19TVFRZPSQoc3R0eSAtZykKKworaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgorICAgIEtFUk5FTF9ORVRXT1JLX0NNRD0iaXA9ZGhjcCIKKyAgICBRRU1VX1RBUF9DTUQ9IiIKKyAgICBRRU1VX1VJX09QVElPTlM9Ii1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2Ugd2Fjb20tdGFibGV0IgorICAgIGlmIFsgIiRLVk1fQUNUSVZFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iIgorICAgICAgICBEUk9PVD0iL2Rldi92ZGEiCisgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgZmlsZT0kUk9PVEZTLGlmPXZpcnRpbyxmb3JtYXQ9cmF3IgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iIgorICAgICAgICBEUk9PVD0iL2Rldi9oZGEiCisgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgZmlsZT0kUk9PVEZTLGlmPWlkZSxmb3JtYXQ9cmF3IgorICAgIGZpCisKK2Vsc2UKKyAgICAgICAgYWNxdWlyZV9sb2NrKCkgeworICAgICAgICAgICAgbG9ja2ZpbGU9JDEKKyAgICAgICAgICAgIGlmIFsgLXogIiRsb2NrZmlsZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBtaXNzaW5nIGxvY2tmaWxlIGFyZyBwYXNzZWQgdG8gYWNxdWlyZV9sb2NrKCkiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIHRvdWNoICRsb2NrZmlsZS5sb2NrIDI+L2Rldi9udWxsCisgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICRsb2NrZmlsZS5sb2NrIGZhaWxlZCIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGV4ZWMgOD4kbG9ja2ZpbGUubG9jaworICAgICAgICAgICAgZmxvY2sgLW4gLXggOAorICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgZXhlYyA4PiYtCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIH0KKworICAgICAgICByZWxlYXNlX2xvY2soKSB7CisgICAgICAgICAgICBsb2NrZmlsZT0kMQorICAgICAgICAgICAgaWYgWyAteiAiJGxvY2tmaWxlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IG1pc3NpbmcgbG9ja2ZpbGUgYXJnIHBhc3NlZCB0byByZWxlYXNlX2xvY2soKSIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgcm0gLWYgJGxvY2tmaWxlLmxvY2sKKyAgICAgICAgICAgIGV4ZWMgIDg+Ji0KKyAgICAgICAgfQorCisgICAgICAgIExPQ0tESVI9Ii90bXAvcWVtdS10YXAtbG9ja3MiCisgICAgICAgIGlmIFsgISAtZCAiJExPQ0tESVIiIF07IHRoZW4KKyAgICAgICAgICAgIG1rZGlyICRMT0NLRElSCisgICAgICAgICAgICBjaG1vZCA3NzcgJExPQ0tESVIKKyAgICAgICAgZmkKKworICAgICAgICBJRkNPTkZJRz1gd2hpY2ggaXAgMj4gL2Rldi9udWxsYAorICAgICAgICBpZiBbIC16ICIkSUZDT05GSUciIF07IHRoZW4KKyAgICAgICAgICAgIElGQ09ORklHPS9zYmluL2lwCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgISAteCAiJElGQ09ORklHIiBdOyB0aGVuCisgICAgICAgICAgICAgICBlY2hvICIkSUZDT05GSUcgY2Fubm90IGJlIGV4ZWN1dGVkIgorICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgUE9TU0lCTEU9YCRJRkNPTkZJRyBsaW5rIHwgZ3JlcCAndGFwJyB8IGF3ayAne3ByaW50ICQyfScgfCBzZWQgLWUgJ3MvOi8vJyAtZSAncy9ALiovLydgCisgICAgICAgIFRBUD0iIgorICAgICAgICBMT0NLRklMRT0iIgorICAgICAgICBVU0VfUFJFQ09ORl9UQVA9Im5vIgorICAgICAgICBmb3IgdGFwIGluICRQT1NTSUJMRTsgZG8KKyAgICAgICAgICAgIExPQ0tGSUxFPSIkTE9DS0RJUi8kdGFwIgorICAgICAgICAgICAgaWYgWyAtZSAiJExPQ0tGSUxFLnNraXAiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJGb3VuZCAkTE9DS0ZJTEUuc2tpcCwgc2tpcHBpbmcgJHRhcCIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIkFjcXVpcmluZyBsb2NrZmlsZSBmb3IgJHRhcC4uLiIKKyAgICAgICAgICAgIGFjcXVpcmVfbG9jayAkTE9DS0ZJTEUKKyAgICAgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIFRBUD0kdGFwCisgICAgICAgICAgICAgICAgVVNFX1BSRUNPTkZfVEFQPSJ5ZXMiCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKworICAgICAgICBpZiBbICIkVEFQIiA9ICIiIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgLWUgIiROT1NVRE9fRkxBRyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBUaGVyZSBhcmUgbm8gYXZhaWxhYmxlIHRhcCBkZXZpY2VzIHRvIHVzZSBmb3IgbmV0d29ya2luZywiCisgICAgICAgICAgICAgICAgZWNobyAiYW5kIEkgc2VlICROT1NVRE9fRkxBRyBleGlzdHMsIHNvIEkgYW0gbm90IGdvaW5nIHRvIHRyeSBjcmVhdGluZyIKKyAgICAgICAgICAgICAgICBlY2hvICJhIG5ldyBvbmUgd2l0aCBzdWRvLiIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIEdST1VQSUQ9YGlkIC1nYAorICAgICAgICAgICAgVVNFUklEPWBpZCAtdWAKKyAgICAgICAgICAgIGVjaG8gIlNldHRpbmcgdXAgdGFwIGludGVyZmFjZSB1bmRlciBzdWRvIgorICAgICAgICAgICAgIyBSZWRpcmVjdCBzdGRlcnIgc2luY2Ugd2UgY291bGQgc2VlIGEgTERfUFJFTE9BRCB3YXJuaW5nIGhlcmUgaWYgcHNldWRvIGlzIGxvYWRlZAorICAgICAgICAgICAgIyBidXQgaW5hY3RpdmUuIFRoaXMgbG9va3Mgc2NhcnkgYnV0IGlzIGhhcm1sZXNzCisgICAgICAgICAgICB0YXA9YHN1ZG8gJFFFTVVJRlVQICRVU0VSSUQgJEdST1VQSUQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAyPiAvZGV2L251bGxgCisgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjIFJlLXJ1biBzdGFuZGFsb25lIHRvIHNlZSB2ZXJib3NlIGVycm9ycworICAgICAgICAgICAgICAgIHN1ZG8gJFFFTVVJRlVQICRVU0VSSUQgJEdST1VQSUQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVAorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgTE9DS0ZJTEU9IiRMT0NLRElSLyR0YXAiCisgICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICR0YXAuLi4iCisgICAgICAgICAgICBhY3F1aXJlX2xvY2sgJExPQ0tGSUxFCisgICAgICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBUQVA9JHRhcAorICAgICAgICAgICAgZmkgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIlVzaW5nIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSAnJFRBUCciCisgICAgICAgICAgICBlY2hvICJJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdG91Y2ggJExPQ0tGSUxFLnNraXAgdG8gbWFrZSBydW5xZW11IHNraXAgJFRBUC4iCisgICAgICAgIGZpCisKKyAgICAgICAgY2xlYW51cCgpIHsKKyAgICAgICAgICAgIGlmIFsgISAtZSAiJE5PU1VET19GTEFHIiAtYSAiJFVTRV9QUkVDT05GX1RBUCIgPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjIFJlZGlyZWN0IHN0ZGVyciBzaW5jZSB3ZSBjb3VsZCBzZWUgYSBMRF9QUkVMT0FEIHdhcm5pbmcgaGVyZSBpZiBwc2V1ZG8gaXMgbG9hZGVkCisgICAgICAgICAgICAgICAgIyBidXQgaW5hY3RpdmUuIFRoaXMgbG9va3Mgc2NhcnkgYnV0IGlzIGhhcm1sZXNzCisgICAgICAgICAgICAgICAgc3VkbyAkUUVNVUlGRE9XTiAkVEFQICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgMj4gL2Rldi9udWxsCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWNobyAiUmVsZWFzaW5nIGxvY2tmaWxlIG9mIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSAnJFRBUCciCisgICAgICAgICAgICByZWxlYXNlX2xvY2sgJExPQ0tGSUxFCisKKyAgICAgICAgICAgIGlmIFsgIiRORlNSVU5OSU5HIiA9ICJ0cnVlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiU2h1dHRpbmcgZG93biB0aGUgdXNlcnNwYWNlIE5GUyBzZXJ2ZXIuLi4iCisgICAgICAgICAgICAgICAgZWNobyAicnVucWVtdS1leHBvcnQtcm9vdGZzIHN0b3AgJFJPT1RGUyIKKyAgICAgICAgICAgICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCAkUk9PVEZTCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgIyBJZiBRRU1VIGNyYXNoZXMgb3Igc29tZWhvdyB0dHkgcHJvcGVydGllcyBhcmUgbm90IHJlc3RvcmVkCisgICAgICAgICAgICAjIGFmdGVyIHFlbXUgZXhpdHMsIHdlIG5lZWQgdG8gcnVuIHN0dHkgc2FuZQorICAgICAgICAgICAgI3N0dHkgc2FuZQorCisgICAgICAgICAgICAjaW5zdGVhZCBvZiB1c2luZyBzdHR5IHNhbmUgd2Ugc2V0IHRoZSBvcmlnaW5hbCBzdHR5IHZhbHVlcworICAgICAgICAgICAgc3R0eSAke09SSUdfU1RUWX0KKworICAgICAgICB9CisKKworICAgICAgICBuMD0kKGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLycpCisKKyAgICAgICAgY2FzZSAkbjAgaW4KKyAgICAgICAgICAgICcnfCpbITAtOV0qKQorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yIENvdWxkbid0IHR1cm4gJFRBUCBpbnRvIGFuIGludGVyZmFjZSBudW1iZXI/IgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBuMT0kKCgkbjAgKiAyICsgMSkpCisgICAgICAgIG4yPSQoKCRuMSArIDEpKQorCisgICAgICAgIEtFUk5FTF9ORVRXT1JLX0NNRD0iaXA9MTkyLjE2OC43LiRuMjo6MTkyLjE2OC43LiRuMToyNTUuMjU1LjI1NS4wIgorICAgICAgICBRRU1VX1RBUF9DTUQ9Ii1uZXQgdGFwLHZsYW49MCxpZm5hbWU9JFRBUCxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyIKKyAgICAgICAgaWYgWyAiJEtWTV9BQ1RJVkUiID0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsbW9kZWw9dmlydGlvICRRRU1VX1RBUF9DTUQsdmhvc3Q9b24iCisgICAgICAgICAgICBEUk9PVD0iL2Rldi92ZGEiCisgICAgICAgICAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGZpbGU9JFJPT1RGUyxpZj12aXJ0aW8sZm9ybWF0PXJhdyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsdmxhbj0wICRRRU1VX1RBUF9DTUQiCisgICAgICAgICAgICBEUk9PVD0iL2Rldi9oZGEiCisgICAgICAgICAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGZpbGU9JFJPT1RGUyxpZj1pZGUsZm9ybWF0PXJhdyIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm02NCIgXTsgdGhlbgorICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldGRldiB0YXAsaWQ9bmV0MCxpZm5hbWU9JFRBUCxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyAtZGV2aWNlIHZpcnRpby1uZXQtZGV2aWNlLG5ldGRldj1uZXQwICIKKyAgICAgICAgICAgIERST09UPSIvZGV2L3ZkYSIKKyAgICAgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgaWQ9ZGlzazAsZmlsZT0kUk9PVEZTLGlmPW5vbmUsZm9ybWF0PXJhdyAtZGV2aWNlIHZpcnRpby1ibGstZGV2aWNlLGRyaXZlPWRpc2swIgorICAgICAgICBmaQorCisgICAgICAgIEtFUk5DTURMSU5FPSJtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VX1VJX09QVElPTlM9Ii1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2Ugd2Fjb20tdGFibGV0IgorCisgICAgICAgIE5GU19JTlNUQU5DRT1gZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AKKyAgICAgICAgZXhwb3J0IE5GU19JTlNUQU5DRQorCisgICAgICAgIFNFUklBTE9QVFM9IiIKKyAgICAgICAgaWYgWyAieCRTRVJJQUxfTE9HRklMRSIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgICAgIFNFUklBTE9QVFM9Ii1zZXJpYWwgZmlsZTokU0VSSUFMX0xPR0ZJTEUiCisgICAgICAgIGZpCitmaQorCitjYXNlICIkTUFDSElORSIgaW4KKyAgICAicWVtdWFybSIpIDs7CisgICAgInFlbXVhcm02NCIpIDs7CisgICAgInFlbXVtaWNyb2JsYXplIikgOzsKKyAgICAicWVtdW1pcHMiKSA7OworICAgICJxZW11bWlwc2VsIikgOzsKKyAgICAicWVtdW1pcHM2NCIpIDs7CisgICAgInFlbXVzaDQiKSA7OworICAgICJxZW11cHBjIikgOzsKKyAgICAicWVtdWFybXY2IikgOzsKKyAgICAicWVtdWFybXY3IikgOzsKKyAgICAicWVtdXg4NiIpIDs7CisgICAgInFlbXV4ODYtNjQiKSA7OworICAgICJxZW11enlucSIpIDs7CisgICAgImFraXRhIikgOzsKKyAgICAic3BpdHoiKSA7OworICAgICopCisgICAgICAgIGVjaG8gIkVycm9yOiBVbnN1cHBvcnRlZCBtYWNoaW5lIHR5cGUgJE1BQ0hJTkUiCisgICAgICAgIHJldHVybiAxCisgICAgOzsKK2VzYWMKKworaWYgWyAhIC1mICIkS0VSTkVMIiAtYSAieCRGU1RZUEUiICE9ICJ4dm1kayIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGltZyIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBLZXJuZWwgaW1hZ2UgZmlsZSAkS0VSTkVMIGRvZXNuJ3QgZXhpc3QiCisgICAgY2xlYW51cAorICAgIHJldHVybiAxCitmaQorCitpZiBbICIkRlNUWVBFIiAhPSAibmZzIiAtYSAiJEZTVFlQRSIgIT0gInZtZGsiIC1hICIkRlNUWVBFIiAhPSAiaGRkaW1nIiAtYSAiJEZTVFlQRSIgIT0gImhkZGRpcmVjdCIgLWEgISAtZiAiJFJPT1RGUyIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBJbWFnZSBmaWxlICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICBjbGVhbnVwCisgICAgcmV0dXJuIDEKK2ZpCisKK2lmIFsgIiRORlNfU0VSVkVSIiA9ICIiIF07IHRoZW4KKyAgICBORlNfU0VSVkVSPSIxOTIuMTY4LjcuMSIKKyAgICBpZiBbICIkU0xJUlBfRU5BQkxFRCIgPSAieWVzIiBdOyB0aGVuCisJTkZTX1NFUlZFUj0iMTAuMC4yLjIiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgIE5GU19ESVI9YGVjaG8gJFJPT1RGUyB8IHNlZCAncy9eW146XSo6XCguKlwpL1wxLydgCisgICAgaWYgWyAiJE5GU19JTlNUQU5DRSIgPSAiIiBdIDsgdGhlbgorCU5GU19JTlNUQU5DRT0wCisgICAgZmkKKyAgICBNT1VOVERfUlBDUE9SVD0kWyAyMTExMSArICRORlNfSU5TVEFOQ0UgXQorICAgIE5GU0RfUlBDUE9SVD0kWyAxMTExMSArICRORlNfSU5TVEFOQ0UgXQorICAgIE5GU0RfUE9SVD0kWyAzMDQ5ICsgMiAqICRORlNfSU5TVEFOQ0UgXQorICAgIE1PVU5URF9QT1JUPSRbIDMwNDggKyAyICogJE5GU19JTlNUQU5DRSBdCisgICAgVU5GU19PUFRTPSJuZnN2ZXJzPTMscG9ydD0kTkZTRF9QT1JULG1vdW50cHJvZz0kTU9VTlREX1JQQ1BPUlQsbmZzcHJvZz0kTkZTRF9SUENQT1JULHVkcCxtb3VudHBvcnQ9JE1PVU5URF9QT1JUIgorCisgICAgUFNFVURPX0xPQ0FMU1RBVEVESVI9fi8ucnVucWVtdS1zZGsvcHNldWRvCisgICAgZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSCisKKyAgICAjIFN0YXJ0IHRoZSB1c2Vyc3BhY2UgTkZTIHNlcnZlcgorICAgIGVjaG8gInJ1bnFlbXUtZXhwb3J0LXJvb3RmcyByZXN0YXJ0ICRST09URlMiCisgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHJlc3RhcnQgJFJPT1RGUworICAgIGlmIFsgJD8gIT0gMCBdOyB0aGVuCisgICAgICAgIHJldHVybiAxCisgICAgZmkKKyAgICBORlNSVU5OSU5HPSJ0cnVlIgorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm0iIC1vICIkTUFDSElORSIgPSAicWVtdWFybXY2IiAtbyAiJE1BQ0hJTkUiID0gInFlbXVhcm12NyIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tYXJtCisgICAgTUFDSElORV9TVUJUWVBFPXZlcnNhdGlsZXBiCisgICAgZXhwb3J0IFFFTVVfQVVESU9fRFJWPSJub25lIgorICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyIKKyAgICAjIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyAtZm9yY2UtcG9pbnRlciIKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L3NkYSBydyBjb25zb2xlPXR0eUFNQTAsMTE1MjAwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSBoaWdocmVzPW9mZiIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICR7TUFDSElORV9TVUJUWVBFfSAtZHJpdmUgZmlsZT0kUk9PVEZTLGZvcm1hdD1yYXcgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3IGNvbnNvbGU9dHR5QU1BMCwxMTUyMDAgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJHtNQUNISU5FX1NVQlRZUEV9IC0tbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybXY2IiBdOyB0aGVuCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVU9QVElPTlMgLWNwdSBhcm0xMTM2IgorICAgIGZpCisgICAgaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm12NyIgXTsgdGhlbgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVPUFRJT05TIC1jcHUgY29ydGV4LWE4IgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdWFybTY0IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1hYXJjaDY0CisKKyAgICBleHBvcnQgUUVNVV9BVURJT19EUlY9Im5vbmUiCisgICAgaWYgWyAieCRTRVJJQUxTVERJTyIgPSAieCIgXSA7IHRoZW4KKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSItbm9ncmFwaGljIgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIiCisgICAgZmkKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L3ZkYSBydyBjb25zb2xlPXR0eUFNQTAsMzg0MDAgbWVtPSRRRU1VX01FTU9SWSBoaWdocmVzPW9mZiAkS0VSTkVMX05FVFdPUktfQ01EIgorICAgICAgICAjIHFlbXUtc3lzdGVtLWFhcmNoNjQgb25seSBzdXBwb3J0ICctbWFjaGluZSB2aXJ0IC1jcHUgY29ydGV4LWE1NycgZm9yIG5vdworICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLW1hY2hpbmUgdmlydCAtY3B1IGNvcnRleC1hNTcgJFJPT1RGU19PUFRJT05TICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgY29uc29sZT10dHlBTUEwLDM4NDAwIG1lbT0kUUVNVV9NRU1PUlkgaGlnaHJlcz1vZmYgJEtFUk5FTF9ORVRXT1JLX0NNRCIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1tYWNoaW5lIHZpcnQgLWNwdSBjb3J0ZXgtYTU3ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKK2ZpCisKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXV4ODYiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWkzODYKKyAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIENQVV9TVUJUWVBFPWt2bTMyCisgICAgZWxzZQorICAgICAgICBDUFVfU1VCVFlQRT1xZW11MzIKKyAgICBmaQorICAgIGlmIFsgISAteiAiJHZnYV9vcHRpb24iIF07IHRoZW4KKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIC12Z2Egdm13YXJlIgorICAgIGZpCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PSREUk9PVCBydyBtZW09JFFFTVVfTUVNT1JZICRLRVJORUxfTkVUV09SS19DTUQiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUk9PVEZTX09QVElPTlMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiR7RlNUWVBFOjA6NH0iID0gImNwaW8iIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PS9kZXYvcmFtMCBydyBtZW09JFFFTVVfTUVNT1JZICRLRVJORUxfTkVUV09SS19DTUQiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAtaW5pdHJkICRST09URlMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0LiIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAidm1kayIgLW8gIiRGU1RZUEUiID0gImhkZGltZyIgLW8gIiRGU1RZUEUiID0gImhkZGRpcmVjdCIgXTsgdGhlbgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgICMgQ3VycmVudGx5IG9wcm9maWxlJ3MgZXZlbnQgYmFzZWQgaW50ZXJydXB0IG1vZGUgZG9lc24ndCB3b3JrKEJ1ZyAjODI4KSBpbgorICAgICMgcWVtdXg4NiBhbmQgcWVtdXg4Ni02NC4gV2UgY2FuIHVzZSB0aW1lciBpbnRlcnJ1cHQgbW9kZSBmb3Igbm93LgorICAgIEtFUk5DTURMSU5FPSIkS0VSTkNNRExJTkUgb3Byb2ZpbGUudGltZXI9MSIKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11eDg2LTY0IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS14ODZfNjQKKyAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIENQVV9TVUJUWVBFPWt2bTY0CisgICAgZWxzZQorICAgICAgICBDUFVfU1VCVFlQRT1jb3JlMmR1bworICAgIGZpCisgICAgaWYgWyAhIC16ICIkdmdhX29wdGlvbiIgXTsgdGhlbgorICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgZWxzZQorICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMgLXZnYSB2bXdhcmUiCisgICAgZmkKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9JERST09UIHJ3IG1lbT0kUUVNVV9NRU1PUlkgJEtFUk5FTF9ORVRXT1JLX0NNRCIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRST09URlNfT1BUSU9OUyAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIngkUk9PVEZTIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICBST09URlM9L3Nydi9uZnMvcWVtdXg4Ni02NAorICAgICAgICBmaQorICAgICAgICBpZiBbICEgLWQgIiRST09URlMiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0LiIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAidm1kayIgLW8gIiRGU1RZUEUiID0gImhkZGltZyIgLW8gIiRGU1RZUEUiID0gImhkZGRpcmVjdCIgXTsgdGhlbgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgICMgQ3VycmVudGx5IG9wcm9maWxlJ3MgZXZlbnQgYmFzZWQgaW50ZXJydXB0IG1vZGUgZG9lc24ndCB3b3JrKEJ1ZyAjODI4KSBpbgorICAgICMgcWVtdXg4NiBhbmQgcWVtdXg4Ni02NC4gV2UgY2FuIHVzZSB0aW1lciBpbnRlcnJ1cHQgbW9kZSBmb3Igbm93LgorICAgIEtFUk5DTURMSU5FPSIkS0VSTkNNRExJTkUgb3Byb2ZpbGUudGltZXI9MSIKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJzcGl0eiIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tYXJtCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgZWNobyAkUk9PVEZTCisgICAgICAgIFJPT1RGUz1gcmVhZGxpbmsgLWYgJFJPT1RGU2AKKyAgICAgICAgZWNobyAkUk9PVEZTCisgICAgICAgIGlmIFsgISAtZSAiJFJPT1RGUy5xZW11ZGlzayIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiQWRkaW5nIGEgcGFydGl0aW9uIHRhYmxlIHRvIHRoZSBleHQzIGltYWdlIGZvciB1c2UgYnkgUUVNVSwgcGxlYXNlIHdhaXQuLi4iCisgICAgICAgICAgICBydW5xZW11LWFkZHB0YWJsZTJpbWFnZSAkUk9PVEZTICRST09URlMucWVtdWRpc2sKKyAgICAgICAgZmkKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NIHNwaXR6IC1oZGEgJFJPT1RGUy5xZW11ZGlzayAtcG9ydHJhaXQiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11bWlwcyIgLW8gIiRNQUNISU5FIiA9ICJxZW11bWlwc2VsIiAtbyAiJE1BQ0hJTkUiID0gInFlbXVtaXBzNjQiIF07IHRoZW4KKyAgICBjYXNlICIkTUFDSElORSIgaW4KKyAgICAgICBxZW11bWlwcykgICBRRU1VPXFlbXUtc3lzdGVtLW1pcHMgOzsKKyAgICAgICBxZW11bWlwc2VsKSBRRU1VPXFlbXUtc3lzdGVtLW1pcHNlbCA7OworICAgICAgIHFlbXVtaXBzNjQpIFFFTVU9cWVtdS1zeXN0ZW0tbWlwczY0IDs7CisgICAgZXNhYworICAgIE1BQ0hJTkVfU1VCVFlQRT1tYWx0YQorICAgIFFFTVVfVUlfT1BUSU9OUz0iLXZnYSBjaXJydXMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICAjS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eTAgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBydyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLWRyaXZlIGZpbGU9JFJPT1RGUyxmb3JtYXQ9cmF3IC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdXBwYyIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tcHBjCisgICAgTUFDSElORV9TVUJUWVBFPW1hYzk5CisgICAgQ1BVX1NVQlRZUEU9RzQKKyAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgorICAgICAgICBRRU1VX05FVFdPUktfQ01EPSIiCisgICAgZWxzZQorICAgICAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0IG5pYyxtb2RlbD1wY25ldCAkUUVNVV9UQVBfQ01EIgorICAgIGZpCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgcncgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eSAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAtTSAkTUFDSElORV9TVUJUWVBFIC1kcml2ZSBmaWxlPSRST09URlMsZm9ybWF0PXJhdyAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5IG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAtTSAkTUFDSElORV9TVUJUWVBFIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVzaDQiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLXNoNAorICAgIE1BQ0hJTkVfU1VCVFlQRT1yMmQKKyAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgI0tFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkwICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgcncgY29uc29sZT10dHlTQzEgbm9pb3RyYXAgZWFybHlwcmludGs9c2gtc2NpLjEgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtaGRhICRST09URlMgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIC1tb25pdG9yIG51bGwgLXNlcmlhbCB2YyAtc2VyaWFsIHN0ZGlvIgorICAgICAgICBTRVJJQUxTVERJTz0iMSIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5U0MxIG5vaW90cmFwIGVhcmx5cHJpbnRrPXNoLXNjaS4xIGNvbnNvbGU9dHR5IG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAkTUFDSElORV9TVUJUWVBFIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyAtbW9uaXRvciBudWxsIC1zZXJpYWwgdmMgLXNlcmlhbCBzdGRpbyIKKyAgICAgICAgU0VSSUFMU1RESU89IjEiCisgICAgZmkKK2ZpCisKK2lmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgXTsgdGhlbgorICAgIEtFUk5DTURMSU5FPSIkS0VSTkNNRExJTkUgcm9vdGZzdHlwZT0kRlNUWVBFIgorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gImFraXRhIiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1hcm0KKyAgICBpZiBbICIkRlNUWVBFIiA9ICJqZmZzMiIgXTsgdGhlbgorICAgICAgICBST09URlM9YHJlYWRsaW5rIC1mICRST09URlNgCisgICAgICAgIGlmIFsgISAtZSAiJFJPT1RGUy5xZW11Zmxhc2giIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkNvbnZlcnRpbmcgcmF3IGltYWdlIGludG8gZmxhc2ggaW1hZ2UgZm9ybWF0IGZvciB1c2UgYnkgUUVNVSwgcGxlYXNlIHdhaXQuLi4iCisgICAgICAgIHJhdzJmbGFzaC5ha2l0YSA8ICRST09URlMgPiAkUk9PVEZTLnFlbXVmbGFzaAorICAgICAgICBmaQorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gYWtpdGEgLW10ZGJsb2NrICRST09URlMucWVtdWZsYXNoIC1wb3J0cmFpdCIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVtaWNyb2JsYXplIiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1taWNyb2JsYXplZWwKKyAgICBRRU1VX1NZU1RFTV9PUFRJT05TPSItTSBwZXRhbG9naXgtbWw2MDUgLXNlcmlhbCBtb246c3RkaW8gLWR0YiAkS0VSTkVMLSRNQUNISU5FLmR0YiIKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIke0ZTVFlQRTowOjR9IiA9ICJjcGlvIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJlYXJseXByaW50ayByb290PS9kZXYvcmFtIHJ3IgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfU1lTVEVNX09QVElPTlMgLWluaXRyZCAkUk9PVEZTIgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdXp5bnEiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWFybQorICAgIFFFTVVfU1lTVEVNX09QVElPTlM9Ii1NIHhpbGlueC16eW5xLWE5IC1zZXJpYWwgbnVsbCAtc2VyaWFsIG1vbjpzdGRpbyAtZHRiICRLRVJORUwtJE1BQ0hJTkUuZHRiIgorICAgICMgenlucSBzZXJpYWwgcG9ydHMgYXJlIG5hbWVkICd0dHlQUzAnIGFuZCAndHR5UFMxJywgZml4dXAgdGhlIGRlZmF1bHQgdmFsdWVzCisgICAgU0NSSVBUX0tFUk5FTF9PUFQ9JChlY2hvICIkU0NSSVBUX0tFUk5FTF9PUFQiIHwgc2VkICdzL2NvbnNvbGU9dHR5Uy9jb25zb2xlPXR0eVBTL2cnKQorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiR7RlNUWVBFOjA6NH0iID0gImNwaW8iIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9ImVhcmx5cHJpbnRrIHJvb3Q9L2Rldi9yYW0gcnciCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9TWVNURU1fT1BUSU9OUyAtaW5pdHJkICRST09URlMiCisgICAgZmkKK2ZpCisKK2lmIFsgIngkUkFNRlMiID0gInh0cnVlIiBdOyB0aGVuCisgICAgUUVNVU9QVElPTlM9Ii1pbml0cmQgJFJPT1RGUyAtbm9ncmFwaGljIgorICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwIGRlYnVnc2hlbGwiCitmaQorCitpZiBbICJ4JElTT0ZTIiA9ICJ4dHJ1ZSIgXTsgdGhlbgorICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY2Ryb20gJFJPT1RGUyAkUUVNVV9VSV9PUFRJT05TIgorZmkKKworaWYgWyAieCRRRU1VT1BUSU9OUyIgPSAieCIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gc3VwcG9ydCB0aGlzIGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMiCisgICAgY2xlYW51cAorICAgIHJldHVybiAxCitmaQorCitpZiBbICIkVENQU0VSSUFMX1BPUlROVU0iICE9ICIiIF07IHRoZW4KKyAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybTY0IiBdOyB0aGVuCisgICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtZGV2aWNlIHZpcnRpby1zZXJpYWwtZGV2aWNlIC1jaGFyZGV2IHNvY2tldCxpZD12aXJ0Y29uLHBvcnQ9JFRDUFNFUklBTF9QT1JUTlVNLGhvc3Q9MTI3LjAuMC4xIC1kZXZpY2UgdmlydGNvbnNvbGUsY2hhcmRldj12aXJ0Y29uIgorICAgIGVsc2UKKyAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1zZXJpYWwgdGNwOjEyNy4wLjAuMTokVENQU0VSSUFMX1BPUlROVU0iCisgICAgZmkKK2ZpCisKK1BBVEg9JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluOiRQQVRICisKK1FFTVVCSU49YHdoaWNoICRRRU1VIDI+IC9kZXYvbnVsbGAKK2lmIFsgISAteCAiJFFFTVVCSU4iIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogTm8gUUVNVSBiaW5hcnkgJyRRRU1VJyBjb3VsZCBiZSBmb3VuZC4iCisgICAgY2xlYW51cAorICAgIHJldHVybiAxCitmaQorCitORUVEX0dMPWBsZGQgJFFFTVVCSU4vJFFFTVUgMj4mMSB8IGdyZXAgbGliR0xVYAorIyBXZSBjYW4ndCBydW4gd2l0aG91dCBhIGxpYkdMLnNvCitpZiBbICIkTkVFRF9HTCIgIT0gIiIgXTsgdGhlbgorICAgIGxpYmdsPSdubycKKworICAgIFsgLWUgL3Vzci9saWIvbGliR0wuc28gLWEgLWUgL3Vzci9saWIvbGliR0xVLnNvIF0gJiYgbGliZ2w9J3llcycKKyAgICBbIC1lIC91c3IvbGliNjQvbGliR0wuc28gLWEgLWUgL3Vzci9saWI2NC9saWJHTFUuc28gXSAmJiBsaWJnbD0neWVzJworICAgIFsgLWUgL3Vzci9saWIvKi1saW51eC1nbnUvbGliR0wuc28gLWEgLWUgL3Vzci9saWIvKi1saW51eC1nbnUvbGliR0xVLnNvIF0gJiYgbGliZ2w9J3llcycKKworICAgIGlmIFsgIiRsaWJnbCIgIT0gJ3llcycgXTsgdGhlbgorICAgICAgICBlY2hvICJZb3UgbmVlZCBsaWJHTC5zbyBhbmQgbGliR0xVLnNvIHRvIGV4aXN0IGluIHlvdXIgbGlicmFyeSBwYXRoIHRvIHJ1biB0aGUgUUVNVSBlbXVsYXRvci4KKyAgICAgICAgVWJ1bnR1IHBhY2thZ2UgbmFtZXMgYXJlOiBsaWJnbDEtbWVzYS1kZXYgYW5kIGxpYmdsdTEtbWVzYS1kZXYuCisgICAgICAgIEZlZG9yYSBwYWNrYWdlIG5hbWVzIGFyZTogbWVzYS1saWJHTC1kZXZlbCBtZXNhLWxpYkdMVS1kZXZlbC4iCisgICAgICAgIHJldHVybiAxOworICAgIGZpCitmaQorCitkb19xdWl0KCkgeworICAgIGNsZWFudXAKKyAgICByZXR1cm4gMQorfQorCit0cmFwIGRvX3F1aXQgSU5UIFRFUk0gUVVJVAorCisjIHFlbXUgZ290IHNlZ2ZhdWx0IGlmIGxpbmtlZCB3aXRoIG5WaWRpYSdzIGxpYmdsCitHTF9MRF9QUkVMT0FEPSRMRF9QUkVMT0FECisKK2lmIGxkZCAkUUVNVUJJTiB8IGdyZXAgLWkgbnZpZGlhICY+IC9kZXYvbnVsbAordGhlbgorY2F0IDw8IEVPTQorV0FSTklORzogblZpZGlhIHByb3ByaWV0YXJ5IE9wZW5HTCBsaWJyYXJpZXMgZGV0ZWN0ZWQuCituVmlkaWEncyBPcGVuR0wgbGlicmFyaWVzIGFyZSBrbm93biB0byBoYXZlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggcWVtdSwKK3Jlc3VsdGluZyBpbiBhIHNlZ2ZhdWx0LiBQbGVhc2UgdW5pbnN0YWxsIHRoZXNlIGRyaXZlcnMgb3IgZW5zdXJlIHRoZSBtZXNhIGxpYkdMCitsaWJyYXJpZXMgcHJlY2VkZSBudmlkaWEncyB2aWEgTERfUFJFTE9BRChBbHJlYWR5IGRvIGl0IG9uIFVidW50dSAxMCkuCitFT00KKworIyBBdXRvbWF0aWNhbGx5IHVzZSBVYnVudHUgc3lzdGVtJ3MgbWVzYSBsaWJHTCwgb3RoZXIgZGlzdHJvIGNhbiBhZGQgaXRzIG93biBwYXRoCitpZiBncmVwIC1pIHVidW50dSAvZXRjL2xzYi1yZWxlYXNlICY+IC9kZXYvbnVsbAordGhlbgorICAgICMgcHJlY2VkZSBudmlkaWEncyBkcml2ZXIgb24gVWJ1bnR1IDEwCisgICAgVUJVTlRVX01BSU5fVkVSU0lPTj1gY2F0IC9ldGMvbHNiLXJlbGVhc2UgfGdyZXAgRElTVFJJQl9SRUxFQVNFIHxjdXQgLWQ9ICAtZiAyfCBjdXQgLWQuIC1mIDFgCisgICAgaWYgWyAiJFVCVU5UVV9NQUlOX1ZFUlNJT04iID0gIjEwIiBdOworICAgIHRoZW4KKyAgICAgICAgR0xfUEFUSD0iIgorICAgICAgICBpZiB0ZXN0IC1lIC91c3IvbGliL2xpYkdMLnNvCisgICAgICAgIHRoZW4gCisgICAgICAgICAgICBHTF9QQVRIPSIvdXNyL2xpYi9saWJHTC5zbyIKKyAgICAgICAgZWxpZiB0ZXN0IC1lIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvbGliR0wuc28KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgR0xfUEFUSD0iL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJHTC5zbyIKKyAgICAgICAgZmkKKworICAgICAgICBlY2hvICJTa2lwIG5WaWRpYSdzIGxpYkdMIG9uIFVidW50dSAxMCEiCisgICAgICAgIEdMX0xEX1BSRUxPQUQ9IiRHTF9QQVRIICRMRF9QUkVMT0FEIgorICAgIGZpCitmaQorZmkKKworaWYgWyAieCRTRVJJQUxTVERJTyIgPSAieDEiIF07IHRoZW4KKyAgICAgICAgZWNobyAiSW50ZXJydXB0IGNoYXJhY3RlciBpcyAnXl0nIgorICAgICAgICBzdHR5IGludHIgXl0KK2ZpCisKK2VjaG8gIlJ1bm5pbmcgJFFFTVUuLi4iCisjIC1uby1yZWJvb3QgaXMgYSBtYW5kYXRvcnkgb3B0aW9uIC0gc2VlIGJ1ZyAjMTAwCitpZiBbICIkRlNUWVBFIiA9ICJ2bWRrIiAtbyAiJEZTVFlQRSIgPSAiaGRkaW1nIiAtbyAiJEZTVFlQRSIgPSAiaGRkZGlyZWN0IiBdOyB0aGVuCisgICAgZWNobyAkUUVNVUJJTiAkVk0gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUCisgICAgTERfUFJFTE9BRD0iJEdMX0xEX1BSRUxPQUQiICRRRU1VQklOICRWTSAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQKK2VsaWYgWyAiJEZTVFlQRSIgPSAiaXNvIiBdOyB0aGVuCisgICAgZWNobyAkUUVNVUJJTiAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQKKyAgICBMRF9QUkVMT0FEPSIkR0xfTERfUFJFTE9BRCIgJFFFTVVCSU4gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUCitlbHNlCisgICAgZWNobyAkUUVNVUJJTiAta2VybmVsICRLRVJORUwgJFFFTVVPUFRJT05TICRTTElSUF9DTUQgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLS1hcHBlbmQgJyInJEtFUk5DTURMSU5FICRTQ1JJUFRfS0VSTkVMX09QVCciJworICAgIExEX1BSRUxPQUQ9IiRHTF9MRF9QUkVMT0FEIiAkUUVNVUJJTiAta2VybmVsICRLRVJORUwgJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC0tYXBwZW5kICIkS0VSTkNNRExJTkUgJFNDUklQVF9LRVJORUxfT1BUIgorZmkKK3JldD0kPworaWYgWyAiJFNMSVJQX0VOQUJMRUQiICE9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgY2xlYW51cAorZmkKKworI3NldCB0aGUgb3JpZ2luYWwgc3R0eSB2YWx1ZXMgYmVmb3JlIGV4aXQKK3N0dHkgJHtPUklHX1NUVFl9Cit0cmFwIC0gSU5UIFRFUk0gUVVJVAorCityZXR1cm4gJHJldApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUuUkVBRE1FIGIveW9jdG8tcG9reS9zY3JpcHRzL3J1bnFlbXUuUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDhkODMKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvcnVucWVtdS5SRUFETUUKQEAgLTAsMCArMSw0MiBAQAorVXNpbmcgT0UgaW1hZ2VzIHdpdGggUUVNVQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitPRS1Db3JlIGNhbiBnZW5lcmF0ZSBxZW11IGJvb3RhYmxlIGtlcm5lbHMgYW5kIGltYWdlcyB3aXRoIGNhbiBiZSB1c2VkIAorb24gYSBkZXNrdG9wIHN5c3RlbS4gVGhlIHNjcmlwdHMgY3VycmVudGx5IHN1cHBvcnQgYm9vdGluZyBBUk0sIE1JUFMsIFBvd2VyUEMKK2FuZCB4ODYgKDMyIGFuZCA2NCBiaXQpIGltYWdlcy4gVGhlIHNjcmlwdHMgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBPRSBidWlsZCAKK3N5c3RlbSBvciBleHRlcm5hbHkuCisKK1RoZSBydW5xZW11IHNjcmlwdCBpcyBydW4gYXM6IAorCisgICBydW5xZW11IDxtYWNoaW5lPiA8emltYWdlPiA8ZmlsZXN5c3RlbT4KKword2hlcmU6CisKKyAgIDxtYWNoaW5lPiBpcyB0aGUgbWFjaGluZS9hcmNoaXRlY3R1cmUgdG8gdXNlIChxZW11YXJtL3FlbXVtaXBzL3FlbXVwcGMvcWVtdXg4Ni9xZW11eDg2LTY0KQorICAgPHppbWFnZT4gaXMgdGhlIHBhdGggdG8gYSBrZXJuZWwgKGUuZy4gemltYWdlLXFlbXVhcm0uYmluKQorICAgPGZpbGVzeXN0ZW0+IGlzIHRoZSBwYXRoIHRvIGFuIGV4dDIgaW1hZ2UgKGUuZy4gZmlsZXN5c3RlbS1xZW11YXJtLmV4dDIpIG9yIGFuIG5mcyBkaXJlY3RvcnkKKyAgIAorSWYgPG1hY2hpbmU+IGlzbid0IHNwZWNpZmllZCwgdGhlIHNjcmlwdCB3aWxsIHRyeSB0byBkZXRlY3QgdGhlIG1hY2hpbmUgbmFtZSAKK2Zyb20gdGhlIG5hbWUgb2YgdGhlIDx6aW1hZ2U+IGZpbGUuCisKK0lmIDxmaWxlc3lzdGVtPiBpc24ndCBzcGVjaWZpZWQsIG5mcyBib290aW5nIHdpbGwgYmUgYXNzdW1lZC4KKworV2hlbiB1c2VkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBpdCB3aWxsIGRlZmF1bHQgdG8gcWVtdWFybSwgZXh0MiBhbmQgdGhlIGxhc3Qga2VybmVsIGFuZCAKK2NvcmUtaW1hZ2Utc2F0by1zZGsgaW1hZ2UgYnVpbHQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4gSWYgYW4gc2RrIGltYWdlIGlzbid0IHByZXNlbnQgaXQgd2lsbCBsb29rCitmb3Igc2F0byBhbmQgbWluaW1hbCBpbWFnZXMuCisKK0Z1bGwgdXNhZ2UgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWVuIGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCBubyBvcHRpb25zIHNwZWNpZmllZC4KKworCitOb3RlcworPT09PT0KKworIC0gVGhlIHNjcmlwdHMgcnVuIHFlbXUgdXNpbmcgc3Vkby4gQ2hhbmdlIHBlcm1zIG9uIC9kZXYvbmV0L3R1biB0byAKKyAgIHJ1biBhcyBub24gcm9vdC4gVGhlIHJ1bnFlbXUtZ2VuLXRhcGRldnMgc2NyaXB0IGNhbiBhbHNvIGJlIHVzZWQgYnkKKyAgIHJvb3QgdG8gcHJlcG9wdWxhdGUgdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZGV2aWNlcy4KKyAtIFlvdSBjYW4gYWNjZXNzIHRoZSBob3N0IGNvbXB1dGVyIGF0IDE5Mi4xNjguNy4xIHdpdGhpbiB0aGUgaW1hZ2UuCisgLSBZb3VyIHFlbXUgc3lzdGVtIHdpbGwgYmUgYWNjZXNzaWJsZSBhcyAxOTIuMTYuNy4yLgorIC0gVGhlIHNjcmlwdCBleHRyYWN0cyB0aGUgcm9vdCBmaWxlc3lzdGVtIHNwZWNpZmllZCB1bmRlciBwc2V1ZG8gYW5kIHNldHMgdXAgYSB1c2Vyc3BhY2UKKyAgIE5GUyBzZXJ2ZXIgdG8gc2hhcmUgdGhlIGltYWdlIG92ZXIgYnkgZGVmYXVsdCBtZWFuaW5nIHRoZSBmaWxlc3lzdGVtIGNhbiBiZSBhY2Nlc3NlZCBieQorICAgYm90aCB0aGUgaG9zdCBhbmQgZ3Vlc3Qgc3lzdGVtcy4KKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtZXJyb3ItcmVwb3J0IGIveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtZXJyb3ItcmVwb3J0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhMWI5NjUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQKQEAgLTAsMCArMSwxOTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFNlbmRzIGFuIGVycm9yIHJlcG9ydCAoaWYgdGhlIHJlcG9ydC1lcnJvciBjbGFzcyB3YXMgZW5hYmxlZCkgdG8gYQorIyByZW1vdGUgc2VydmVyLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbmRyZWVhIFByb2NhIDxhbmRyZWVhLmIucHJvY2FAaW50ZWwuY29tPgorIyBBdXRob3I6IE1pY2hhZWwgV29vZCA8bWljaGFlbC5nLndvb2RAaW50ZWwuY29tPgorCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHN5cworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKwordmVyc2lvbiA9ICIwLjMiCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZW5kLWVycm9yLXJlcG9ydCIpCitsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnKQorCitkZWYgZ2V0UGF5bG9hZExpbWl0KHVybCk6CisgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KHVybCwgTm9uZSkKKyAgICB0cnk6CisgICAgICAgIHJlc3BvbnNlID0gdXJsbGliMi51cmxvcGVuKHJlcSkKKyAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlOgorICAgICAgICAjIFVzZSB0aGlzIG9wcG9ydHVuaXR5IHRvIGJhaWwgb3V0IGlmIHdlIGNhbid0IGV2ZW4gY29udGFjdCB0aGUgc2VydmVyCisgICAgICAgIGxvZy5lcnJvcigiQ291bGQgbm90IGNvbnRhY3Qgc2VydmVyOiAiICsgdXJsKQorICAgICAgICBsb2cuZXJyb3IoZS5yZWFzb24pCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgdHJ5OgorICAgICAgICByZXQgPSBqc29uLmxvYWRzKHJlc3BvbnNlLnJlYWQoKSkKKyAgICAgICAgbWF4X2xvZ19zaXplID0gcmV0LmdldCgnbWF4X2xvZ19zaXplJywgMCkKKyAgICAgICAgcmV0dXJuIGludChtYXhfbG9nX3NpemUpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gMAorCitkZWYgYXNrX2Zvcl9jb250YWN0ZGV0YWlscygpOgorICAgIHByaW50KCJQbGVhc2UgZW50ZXIgeW91ciBuYW1lIGFuZCB5b3VyIGVtYWlsIChvcHRpb25hbGx5KSwgdGhleSdsbCBiZSBzYXZlZCBpbiB0aGUgZmlsZSB5b3Ugc2VuZC4iKQorICAgIHVzZXJuYW1lID0gcmF3X2lucHV0KCJOYW1lIChyZXF1aXJlZCk6ICIpCisgICAgZW1haWwgPSByYXdfaW5wdXQoIkUtbWFpbCAobm90IHJlcXVpcmVkKTogIikKKyAgICByZXR1cm4gdXNlcm5hbWUsIGVtYWlsCisKK2RlZiBlZGl0X2NvbnRlbnQoanNvbl9maWxlX3BhdGgpOgorICAgIGVkaXQgPSByYXdfaW5wdXQoIlJldmlldyBpbmZvcm1hdGlvbiBiZWZvcmUgc2VuZGluZz8gKHkvbik6ICIpCisgICAgaWYgJ3knIGluIGVkaXQgb3IgJ1knIGluIGVkaXQ6CisgICAgICAgIGVkaXRvciA9IG9zLmVudmlyb24uZ2V0KCdFRElUT1InLCBOb25lKQorICAgICAgICBpZiBlZGl0b3I6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoW2VkaXRvciwganNvbl9maWxlX3BhdGhdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCJQbGVhc2Ugc2V0IHlvdXIgRURJVE9SIHZhbHVlIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBwcmVwYXJlX2RhdGEoYXJncyk6CisgICAgIyBhdHRlbXB0IHRvIGdldCB0aGUgbWF4X2xvZ19zaXplIGZyb20gdGhlIHNlcnZlcidzIHNldHRpbmdzCisgICAgbWF4X2xvZ19zaXplID0gZ2V0UGF5bG9hZExpbWl0KCJodHRwOi8vIithcmdzLnNlcnZlcisiL0NsaWVudFBvc3QvSlNPTiIpCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoYXJncy5lcnJvcl9maWxlKToKKyAgICAgICAgbG9nLmVycm9yKCJObyBkYXRhIGZpbGUgZm91bmQuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGhvbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKQorICAgIHVzZXJmaWxlID0gb3MucGF0aC5qb2luKGhvbWUsICIub2Utc2VuZC1lcnJvciIpCisKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbih1c2VyZmlsZSwgJ3InKSBhcyB1c2VyZmlsZV9mcDoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzLm5hbWUpID09IDA6CisgICAgICAgICAgICAgICAgYXJncy5uYW1lID0gdXNlcmZpbGVfZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjdXNlIGVtcHR5IHJlYWRsaW5lIHRvIGluY3JlbWVudCB0aGUgZnAKKyAgICAgICAgICAgICAgICB1c2VyZmlsZV9mcC5yZWFkbGluZSgpCisKKyAgICAgICAgICAgIGlmIGxlbihhcmdzLmVtYWlsKSA9PSAwOgorICAgICAgICAgICAgICAgIGFyZ3MuZW1haWwgPSB1c2VyZmlsZV9mcC5yZWFkbGluZSgpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICBpZiBhcmdzLmFzc3VtZV95ZXMgPT0gVHJ1ZSBhbmQgbGVuKGFyZ3MubmFtZSkgPT0gMDoKKyAgICAgICAgbG9nLmVycm9yKCJOYW1lIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGVpdGhlciB2aWEgIit1c2VyZmlsZSsiIG9yIGFzIGFuIGFyZ3VtZW50ICgtbikuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHdoaWxlIGxlbihhcmdzLm5hbWUpIDw9IDAgYW5kIGxlbihhcmdzLm5hbWUpIDwgNTA6CisgICAgICAgIHByaW50KCJcbk5hbWUgbmVlZHMgdG8gYmUgZ2l2ZW4gYW5kIG11c3Qgbm90IG1vcmUgdGhhbiA1MCBjaGFyYWN0ZXJzLiIpCisgICAgICAgIGFyZ3MubmFtZSwgYXJncy5lbWFpbCA9IGFza19mb3JfY29udGFjdGRldGFpbHMoKQorCisgICAgd2l0aCBvcGVuKHVzZXJmaWxlLCAndycpIGFzIHVzZXJmaWxlX2ZwOgorICAgICAgICB1c2VyZmlsZV9mcC53cml0ZShhcmdzLm5hbWUuc3RyaXAoKSArICJcbiIpCisgICAgICAgIHVzZXJmaWxlX2ZwLndyaXRlKGFyZ3MuZW1haWwuc3RyaXAoKSArICJcbiIpCisKKyAgICB3aXRoIG9wZW4oYXJncy5lcnJvcl9maWxlLCAncicpIGFzIGpzb25fZnA6CisgICAgICAgIGRhdGEgPSBqc29uX2ZwLnJlYWQoKQorCisgICAgICAgIGpzb25kYXRhID0ganNvbi5sb2FkcyhkYXRhKQorICAgICAgICBqc29uZGF0YVsndXNlcm5hbWUnXSA9IGFyZ3MubmFtZS5zdHJpcCgpCisgICAgICAgIGpzb25kYXRhWydlbWFpbCddID0gYXJncy5lbWFpbC5zdHJpcCgpCisgICAgICAgIGpzb25kYXRhWydsaW5rX2JhY2snXSA9IGFyZ3MubGlua19iYWNrLnN0cmlwKCkKKyAgICAgICAgIyBJZiB3ZSBnb3QgYSBtYXhfbG9nX3NpemUgdGhlbiB1c2UgdGhpcyB0byB0cnVuY2F0ZSB0byBnZXQgdGhlIGxhc3QKKyAgICAgICAgIyBtYXhfbG9nX3NpemUgYnl0ZXMgZnJvbSB0aGUgZW5kCisgICAgICAgIGlmIG1heF9sb2dfc2l6ZSAhPSAwOgorICAgICAgICAgICAgZm9yIGZhaWwgaW4ganNvbmRhdGFbJ2ZhaWx1cmVzJ106CisgICAgICAgICAgICAgICAgaWYgbGVuKGZhaWxbJ2xvZyddKSA+IG1heF9sb2dfc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlRydW5jYXRpbmcgbG9nIHRvIGFsbG93IGZvciB1cGxvYWQiCisgICAgICAgICAgICAgICAgICAgIGZhaWxbJ2xvZyddID0gZmFpbFsnbG9nJ11bLW1heF9sb2dfc2l6ZTpdCisKKyAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMoanNvbmRhdGEsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICMgV3JpdGUgYmFjayB0aGUgcmVzdWx0IHdoaWNoIHdpbGwgY29udGFpbiBhbGwgZmllbGRzIGZpbGxlZCBpbiBhbmQKKyAgICAjIGFueSBwb3N0IHByb2Nlc3NpbmcgZG9uZSBvbiB0aGUgbG9nIGRhdGEKKyAgICB3aXRoIG9wZW4oYXJncy5lcnJvcl9maWxlLCAidyIpIGFzIGpzb25fZnA6CisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBqc29uX2ZwLndyaXRlKGRhdGEpCisKKworICAgIGlmIGFyZ3MuYXNzdW1lX3llcyA9PSBGYWxzZSBhbmQgZWRpdF9jb250ZW50KGFyZ3MuZXJyb3JfZmlsZSk6CisgICAgICAgICNXZSdsbCBuZWVkIHRvIHJlLXJlYWQgdGhlIGNvbnRlbnQgaWYgd2UgZWRpdGVkIGl0CisgICAgICAgIHdpdGggb3BlbihhcmdzLmVycm9yX2ZpbGUsICdyJykgYXMganNvbl9mcDoKKyAgICAgICAgICAgIGRhdGEgPSBqc29uX2ZwLnJlYWQoKQorCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgc2VuZF9kYXRhKGRhdGEsIGFyZ3MpOgorICAgIGhlYWRlcnM9eydDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdVc2VyLUFnZW50JzogInNlbmQtZXJyb3ItcmVwb3J0LyIrdmVyc2lvbn0KKworICAgIGlmIGFyZ3MuanNvbjoKKyAgICAgICAgdXJsID0gImh0dHA6Ly8iK2FyZ3Muc2VydmVyKyIvQ2xpZW50UG9zdC9KU09OLyIKKyAgICBlbHNlOgorICAgICAgICB1cmwgPSAiaHR0cDovLyIrYXJncy5zZXJ2ZXIrIi9DbGllbnRQb3N0LyIKKworICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmwsIGRhdGE9ZGF0YSwgaGVhZGVycz1oZWFkZXJzKQorICAgIHRyeToKKyAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4ocmVxKQorICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciwgZToKKyAgICAgICAgbG9nZ2luZy5lcnJvcihlLnJlYXNvbikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHByaW50IHJlc3BvbnNlLnJlYWQoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgYXJnX3BhcnNlID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IlRoaXMgc2NyaXB0cyB3aWxsIHNlbmQgYW4gZXJyb3IgcmVwb3J0IHRvIHlvdXIgc3BlY2lmaWVkIGVycm9yLXJlcG9ydC13ZWIgc2VydmVyLiIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCJlcnJvcl9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkdlbmVyYXRlZCBlcnJvciByZXBvcnQgZmlsZSBsb2NhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0cikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi15IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWFzc3VtZS15ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQXNzdW1lIHllcyB0byBhbGwgcXVlcmllcyBhbmQgZG8gbm90IHByb21wdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tc2VydmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNlcnZlciB0byBzZW5kIGVycm9yIHJlcG9ydCB0byIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImVycm9ycy55b2N0b3Byb2plY3Qub3JnIikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWVtYWlsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkVtYWlsIGFkZHJlc3MgdG8gYmUgdXNlZCBmb3IgY29udGFjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IiIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCItbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlN1Ym1pdHRlciBuYW1lIHVzZWQgdG8gaWRlbnRpZnkgeW91ciBlcnJvciByZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIiKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbGluay1iYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkEgdXJsIHRvIGxpbmsgYmFjayB0byB0aGlzIGJ1aWxkIGZyb20gdGhlIGVycm9yIHJlcG9ydCBzZXJ2ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIiKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLWoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tanNvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSZXR1cm4gdGhlIHJlc3VsdCBpbiBqc29uIGZvcm1hdCwgc2lsZW5jZXMgYWxsIG90aGVyIG91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiKQorCisKKworICAgIGFyZ3MgPSBhcmdfcGFyc2UucGFyc2VfYXJncygpCisKKyAgICBpZiAoYXJncy5qc29uID09IEZhbHNlKToKKyAgICAgICAgcHJpbnQgIlByZXBhcmluZyB0byBzZW5kIGVycm9ycyB0bzogIithcmdzLnNlcnZlcgorCisgICAgZGF0YSA9IHByZXBhcmVfZGF0YShhcmdzKQorICAgIHNlbmRfZGF0YShkYXRhLCBhcmdzKQorCisgICAgc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9zZW5kLXB1bGwtcmVxdWVzdCBiL3lvY3RvLXBva3kvc2NyaXB0cy9zZW5kLXB1bGwtcmVxdWVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzU1NDlkCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3NlbmQtcHVsbC1yZXF1ZXN0CkBAIC0wLDAgKzEsMTc5IEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgUmlnaHRzIFJlc2VydmVkCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gc2VuZCBhIHBhdGNoIHNlcmllcyBwcmVwYXJlZCBieSB0aGUKKyMgY3JlYXRlLXB1bGwtcmVxdWVzdCBzY3JpcHQgdG8gT3BlbiBFbWJlZGRlZCBhbmQgVGhlIFlvY3RvIFByb2plY3QsIGFzIHdlbGwKKyMgYXMgdG8gcmVsYXRlZCBwcm9qZWN0cyBhbmQgbGF5ZXJzLgorIworCitBVVRPPTAKK0FVVE9fQ0w9MAorR0lUU09CQ0M9Ii0tc3VwcHJlc3MtY2M9YWxsIgorCisjIFByZXZlbnQgZW52aXJvbm1lbnQgbGVha2FnZSB0byB0aGVzZSB2YXJzLgordW5zZXQgVE8KK3Vuc2V0IENDCit1bnNldCBBVVRPX0NDCit1bnNldCBFWFRSQV9DQworCit1c2FnZSgpCit7CitjYXQgPDxFT00KK1VzYWdlOiAkKGJhc2VuYW1lICQwKSBbLWhdIFstYV0gWy1jXSBbWy10IGVtYWlsXS4uLl0gLXAgcHVsbC1kaXIgCisgIC1hICAgICAgICAgICBTZW5kIHRoZSBjb3ZlciBsZXR0ZXIgdG8gZXZlcnkgcmVjaXBpZW50IGxpc3RlZCBpbiBDYyBhbmQKKyAgICAgICAgICAgICAgIFNpZ25lZC1vZmYtYnkgbGluZXMgZm91bmQgaW4gdGhlIGNvdmVyIGxldHRlciBhbmQgdGhlIHBhdGNoZXMuCisJICAgICAgIFRoaXMgb3B0aW9uIGltcGxpZXMgLWMuCisgIC1jICAgICAgICAgICBFeHBhbmQgdGhlIENjIGxpc3QgZm9yIHRoZSBpbmRpdmlkdWFsIHBhdGNoZXMgdXNpbmcgdGhlIENjIGFuZAorICAgICAgICAgICAgICAgU2lnbmVkLW9mZi1ieSBsaW5lcyBmcm9tIHRoZSBzYW1lIHBhdGNoLgorICAtQyAgICAgICAgICAgQWRkIGV4dHJhIENDIHRvIGVhY2ggZW1haWwgc2VudC4KKyAgLXAgcHVsbC1kaXIgIERpcmVjdG9yeSBjb250YWluaW5nIHN1bW1hcnkgYW5kIHBhdGNoIGZpbGVzCisgIC10IGVtYWlsICAgICBFeHBsaWNpdGx5IGFkZCBlbWFpbCB0byB0aGUgcmVjaXBpZW50cworRU9NCit9CisKKyMgQ29sbGVjdCBhZGRyZXNzZXMgZnJvbSBhIHBhdGNoIGludG8gQVVUT19DQworIyAkMTogYSBwYXRjaCBmaWxlCitoYXJ2ZXN0X3JlY2lwaWVudHMoKQoreworCVBBVENIPSQxCisJZXhwb3J0IElGUz0kJyxcbicKKwlmb3IgUkVHWCBpbiAiXltDY11bQ2NdOiAqIiAiXltTc11pZ25lZC1bT29dZmYtW0JiXXk6ICoiOyBkbworCQlmb3IgRU1BSUwgaW4gJChzZWQgJy9eLS0tJC9xJyAkUEFUQ0ggfCBncmVwIC1lICIkUkVHWCIgfCBzZWQgInMvJFJFR1gvLyIpOyBkbworCQkJaWYgWyAiJHtBVVRPX0NDLyRFTUFJTC99IiA9PSAiJEFVVE9fQ0MiIF0gJiYgWyAtbiAiJEVNQUlMIiBdOyB0aGVuCisJCQkJaWYgWyAteiAiJEFVVE9fQ0MiIF07IHRoZW4KKwkJCQkJQVVUT19DQz0kRU1BSUw7CisJCQkJZWxzZQorCQkJCQlBVVRPX0NDPSIkQVVUT19DQywkRU1BSUwiOworCQkJCWZpCisJCQlmaQorCQlkb25lCisJZG9uZQorCXVuc2V0IElGUworfQorCisjIFBhcnNlIGFuZCB2ZXJpZnkgYXJndW1lbnRzCit3aGlsZSBnZXRvcHRzICJhY0M6aHA6dDoiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwlhKQorCQlBVVRPPTEKKwkJR0lUU09CQ0M9Ii0tc2lnbmVkLW9mZi1ieS1jYyIKKwkJQVVUT19DTD0xCisJCTs7CisJYykKKwkJQVVUTz0xCisJCUdJVFNPQkNDPSItLXNpZ25lZC1vZmYtYnktY2MiCisJCTs7CisJQykKKwkJRVhUUkFfQ0M9IiRPUFRBUkciCisJCTs7CisJaCkKKwkJdXNhZ2UKKwkJZXhpdCAwCisJCTs7CisJcCkKKwkJUERJUj0ke09QVEFSRyUvfQorCQlpZiBbICEgLWQgJFBESVIgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6IHB1bGwtZGlyIFwiJFBESVJcIiBkb2VzIG5vdCBleGlzdC4iCisJCQl1c2FnZQorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJdCkKKwkJaWYgWyAtbiAiJFRPIiBdOyB0aGVuCisJCQlUTz0iJFRPLCRPUFRBUkciCisJCWVsc2UKKwkJCVRPPSIkT1BUQVJHIgorCQlmaQorCQk7OworCWVzYWMKK2RvbmUKKworaWYgWyAteiAiJFBESVIiIF07IHRoZW4KKwllY2hvICJFUlJPUjogeW91IG11c3Qgc3BlY2lmeSBhIHB1bGwtZGlyLiIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworCisjIFZlcmlmeSB0aGUgY292ZXIgbGV0dGVyIGlzIGNvbXBsZXRlIGFuZCBmcmVlIG9mIHRva2VucworaWYgWyAtZSAkUERJUi8wMDAwLWNvdmVyLWxldHRlci5wYXRjaCBdOyB0aGVuCisJQ0w9IiRQRElSLzAwMDAtY292ZXItbGV0dGVyLnBhdGNoIgorCWZvciBUT0tFTiBpbiBTVUJKRUNUIEJMVVJCOyBkbworCQlncmVwIC1xICIqKiogJFRPS0VOIEhFUkUgKioqIiAiJENMIgorCQlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJCWVjaG8gIkVSUk9SOiBQbGVhc2UgZWRpdCAkQ0wgYW5kIHRyeSBhZ2FpbiAoTG9vayBmb3IgJyoqKiAkVE9LRU4gSEVSRSAqKionKS4iCisJCQlleGl0IDEKKwkJZmkKKwlkb25lCitlbHNlCisJZWNobyAiV0FSTklORzogTm8gY292ZXIgbGV0dGVyIHdpbGwgYmUgc2VudC4iCitmaQorCisjIEhhcnZlc3QgZW1haWxzIGZyb20gdGhlIGdlbmVyYXRlZCBwYXRjaGVzIGFuZCBwb3B1bGF0ZSBBVVRPX0NDLgoraWYgWyAkQVVUT19DTCAtZXEgMSBdOyB0aGVuCisJZm9yIFBBVENIIGluICRQRElSLyoucGF0Y2g7IGRvCisJCWhhcnZlc3RfcmVjaXBpZW50cyAkUEFUQ0gKKwlkb25lCitmaQorCitBVVRPX1RPPSIkKGdpdCBjb25maWcgc2VuZGVtYWlsLnRvKSIKK2lmIFsgLW4gIiRBVVRPX1RPIiBdOyB0aGVuCisJaWYgWyAtbiAiJFRPIiBdOyB0aGVuCisJCVRPPSIkVE8sJEFVVE9fVE8iCisJZWxzZQorCQlUTz0iJEFVVE9fVE8iCisJZmkKK2ZpCisKK2lmIFsgLXogIiRUTyIgXSAmJiBbIC16ICIkQVVUT19DQyIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGFueSByZWNpcGllbnRzLiIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworCisjIENvbnZlcnQgdGhlIGNvbGxlY3RlZCBhZGRyZXNzZXMgaW50byBnaXQtc2VuZC1lbWFpbCBhcmd1bWVudCBzdHJpbmdzCitleHBvcnQgSUZTPSQnLCcKK0dJVF9UTz0kKGZvciBSIGluICRUTzsgZG8gZWNobyAtbiAiLS10bz0nJFInICI7IGRvbmUpCitHSVRfQ0M9JChmb3IgUiBpbiAkQVVUT19DQzsgZG8gZWNobyAtbiAiLS1jYz0nJFInICI7IGRvbmUpCitHSVRfRVhUUkFfQ0M9JChmb3IgUiBpbiAkRVhUUkFfQ0M7IGRvIGVjaG8gLW4gIi0tY2M9JyRSJyAiOyBkb25lKQordW5zZXQgSUZTCisKKyMgSGFuZG9mZiB0byBnaXQtc2VuZC1lbWFpbC4gSXQgd2lsbCBwZXJmb3JtIHRoZSBzZW5kIGNvbmZpcm1hdGlvbi4KK1BBVENIRVM9JChlY2hvICRQRElSLyoucGF0Y2gpCitpZiBbICRBVVRPX0NMIC1lcSAxIF07IHRoZW4KKwkjIFNlbmQgdGhlIGNvdmVyIGxldHRlciB0byBldmVyeSByZWNpcGllbnQsIGJvdGggc3BlY2lmaWVkIGFzIHdlbGwgYXMKKwkjIGhhcnZlc3RlZC4gVGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgcGF0Y2hlcyBsaXN0LgorCWV2YWwgImdpdCBzZW5kLWVtYWlsICRHSVRfVE8gJEdJVF9DQyAkR0lUX0VYVFJBX0NDIC0tY29uZmlybT1hbHdheXMgLS1uby1jaGFpbi1yZXBseS10byAtLXN1cHByZXNzLWNjPWFsbCAkQ0wiCisJaWYgWyAkPyAtZXEgMSBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBmYWlsZWQgdG8gc2VuZCBjb3Zlci1sZXR0ZXIgd2l0aCBhdXRvbWF0aWMgcmVjaXBpZW50cy4iCisJCWV4aXQgMQorCWZpCisJUEFUQ0hFUz0ke1BBVENIRVMvIiRDTCIvfQorZmkKKworIyBTZW5kIHRoZSBwYXRjaCB0byB0aGUgc3BlY2lmaWVkIHJlY2lwaWVudHMgYW5kLCBpZiAtYyB3YXMgc3BlY2lmaWVkLCB0aG9zZSBnaXQKKyMgZmluZHMgaW4gdGhpcyBzcGVjaWZpYyBwYXRjaC4KK2V2YWwgImdpdCBzZW5kLWVtYWlsICRHSVRfVE8gJEdJVF9FWFRSQV9DQyAtLWNvbmZpcm09YWx3YXlzIC0tbm8tY2hhaW4tcmVwbHktdG8gJEdJVFNPQkNDICRQQVRDSEVTIgoraWYgWyAkPyAtZXEgMSBdOyB0aGVuCisJZWNobyAiRVJST1I6IGZhaWxlZCB0byBzZW5kIHBhdGNoZXMuIgorCWV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCBiL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMjg2NzY1Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoCkBAIC0wLDAgKzEsNDY5IEBACisjIS9iaW4vYmFzaAorCisjICBDb3B5cmlnaHQgKGMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMgR2xvYmFsIHZhcnMKK2NhY2hlX2Rpcj0KK2NvbmZpcm09Citmc3ltPQordG90YWxfZGVsZXRlZD0wCit2ZXJib3NlPQorZGVidWc9MAorCit1c2FnZSAoKSB7CisgIGNhdCA8PCBFT0YKK1dlbGNvbWUgdG8gc3N0YXRlIGNhY2hlIG1hbmFnZW1lbnQgdXRpbGl0aWVzLgorc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggPE9QVElPTj4KKworT3B0aW9uczoKKyAgLWgsIC0taGVscAorICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKworICAtLWNhY2hlLWRpcj08c3N0YXRlIGNhY2hlIGRpcj4KKyAgICAgICAgU3BlY2lmeSBzc3RhdGUgY2FjaGUgZGlyZWN0b3J5LCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgdmFyaWFibGUgU1NUQVRFX0NBQ0hFX0RJUiBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorCisgIC0tZXh0cmEtYXJjaHM9PGFyY2gxPiw8YXJjaDI+Li4uPGFyY2huPgorICAgICAgICBTcGVjaWZ5IGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyB3aGljaCBzaG91bGQgYmUgdGVzdGVkLCB0aGlzIGxpc3QKKyAgICAgICAgd2lsbCBiZSBleHRlbmRlZCB3aXRoIG5hdGl2ZSBhcmNoLCBhbGxhcmNoIGFuZCBlbXB0eSBhcmNoLiBUaGUKKyAgICAgICAgc2NyaXB0IHdvbid0IGJlIHRyeWluZyB0byBnZW5lcmF0ZSBsaXN0IG9mIGF2YWlsYWJsZSBhcmNocyBmcm9tCisgICAgICAgIEFWQUlMVFVORVMgaW4gdHVuZSBmaWxlcy4KKworICAtLWV4dHJhLWxheWVyPTxsYXllcjE+LDxsYXllcjI+Li4uPGxheWVybj4KKyAgICAgICAgU3BlY2lmeSB0aGUgbGF5ZXIgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBzZWFyY2hpbmcgdGhlIGFyY2hzLAorICAgICAgICBpdCB3aWxsIHNlYXJjaCB0aGUgbWV0YSBhbmQgbWV0YS0qIGxheWVycyBpbiB0aGUgdG9wIGRpciBieQorICAgICAgICBkZWZhdWx0LCBhbmQgd2lsbCBzZWFyY2ggbWV0YSwgbWV0YS0qLCA8bGF5ZXIxPiwgPGxheWVyMj4sCisgICAgICAgIC4uLjxsYXllcm4+IHdoZW4gc3BlY2lmaWVkLiBVc2UgIiwiIGFzIHRoZSBzZXBhcmF0b3IuCisKKyAgICAgICAgVGhpcyBpcyB1c2VsZXNzIGZvciAtLXN0YW1wcy1kaXIgb3Igd2hlbiAtLWV4dHJhLWFyY2hzIGlzIHVzZWQuCisKKyAgLWQsIC0tcmVtb3ZlLWR1cGxpY2F0ZWQKKyAgICAgICAgUmVtb3ZlIHRoZSBkdXBsaWNhdGVkIHNzdGF0ZSBjYWNoZSBmaWxlcyBvZiBvbmUgcGFja2FnZSwgb25seQorICAgICAgICB0aGUgbmV3ZXN0IG9uZSB3aWxsIGJlIGtlcHQuIFRoZSBkdXBsaWNhdGVkIHNzdGF0ZSBjYWNoZSBmaWxlcworICAgICAgICBvZiBvbmUgcGFja2FnZSBtdXN0IGhhdmUgdGhlIHNhbWUgYXJjaCwgd2hpY2ggbWVhbnMgc3N0YXRlIGNhY2hlCisgICAgICAgIGZpbGVzIHdpdGggbXVsdGlwbGUgYXJjaHMgYXJlIG5vdCBjb25zaWRlcmVkIGR1cGxpY2F0ZS4KKworICAgICAgICBDb25mbGljdHMgd2l0aCAtLXN0YW1wcy1kaXIuCisKKyAgLS1zdGFtcHMtZGlyPTxkaXIxPiw8ZGlyMj4uLi48ZGlybj4KKyAgICAgICAgU3BlY2lmeSB0aGUgYnVpbGQgZGlyZWN0b3J5J3Mgc3RhbXBzIGRpcmVjdG9yaWVzLCB0aGUgc3N0YXRlCisgICAgICAgIGNhY2hlIGZpbGUgd2hpY2ggSVMgVVNFRCBieSB0aGVzZSBidWlsZCBkaXJldG9yaWVzIHdpbGwgYmUgS0VQVCwKKyAgICAgICAgb3RoZXIgc3N0YXRlIGNhY2hlIGZpbGVzIGluIGNhY2hlLWRpciB3aWxsIGJlIHJlbW92ZWQuIFVzZSAiLCIKKyAgICAgICAgYXMgdGhlIHNlcGFyYXRvci4gRm9yIGV4YW1wbGU6CisgICAgICAgIC0tc3RhbXBzLWRpcj1idWlsZDEvdG1wL3N0YW1wcyxidWlsZDIvdG1wL3N0YW1wcworCisgICAgICAgIENvbmZsaWN0cyB3aXRoIC0tcmVtb3ZlLWR1cGxpY2F0ZWQuCisKKyAgLUwsIC0tZm9sbG93LXN5bWxpbmsKKyAgICAgICAgUmVtb3ZlIGJvdGggdGhlIHN5bWJvbCBsaW5rIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSwgZGVmYXVsdDogbm8uCisKKyAgLXksIC0teWVzCisgICAgICAgIEF1dG9tYXRpYyB5ZXMgdG8gcHJvbXB0czsgYXNzdW1lICJ5ZXMiIGFzIGFuc3dlciB0byBhbGwgcHJvbXB0cworICAgICAgICBhbmQgcnVuIG5vbi1pbnRlcmFjdGl2ZWx5LgorCisgIC12LCAtLXZlcmJvc2UKKyAgICAgICAgRXhwbGFpbiB3aGF0IGlzIGJlaW5nIGRvbmUuCisKKyAgLUQsIC0tZGVidWcKKyAgICAgICAgU2hvdyBkZWJ1ZyBpbmZvLCByZXBlYXQgZm9yIG1vcmUgZGVidWcgaW5mby4KKworRU9GCit9CisKK2lmIFsgJCMgLWx0IDEgXTsgdGhlbgorICB1c2FnZQorICBleGl0IDAKK2ZpCisKKyMgRWNobyBubyBmaWxlcyB0byByZW1vdmUKK25vX2ZpbGVzICgpIHsKKyAgICBlY2hvIE5vIGZpbGVzIHRvIHJlbW92ZQorfQorCisjIEVjaG8gbm90aGluZyB0byBkbworZG9fbm90aGluZyAoKSB7CisgICBlY2hvIE5vdGhpbmcgdG8gZG8KK30KKworIyBSZWFkIHRoZSBpbnB1dCAieSIKK3JlYWRfY29uZmlybSAoKSB7CisgIGVjaG8gIiR0b3RhbF9kZWxldGVkIGZyb20gJHRvdGFsX2ZpbGVzIGZpbGVzIHdpbGwgYmUgcmVtb3ZlZCEgIgorICBpZiBbICIkY29uZmlybSIgIT0gInkiIF07IHRoZW4KKyAgICAgIGVjaG8gIkRvIHlvdSB3YW50IHRvIGNvbnRpbnVlICh5L24pPyAiCisgICAgICB3aGlsZSByZWFkIGNvbmZpcm07IGRvCisgICAgICAgICAgWyAiJGNvbmZpcm0iID0gIlkiIC1vICIkY29uZmlybSIgPSAieSIgLW8gIiRjb25maXJtIiA9ICJuIiBcCisgICAgICAgICAgICAtbyAiJGNvbmZpcm0iID0gIk4iIF0gJiYgYnJlYWsKKyAgICAgICAgICBlY2hvICJJbnZhbGlkIGlucHV0IFwiJGNvbmZpcm1cIiwgcGxlYXNlIGlucHV0ICd5JyBvciAnbic6ICIKKyAgICAgIGRvbmUKKyAgZWxzZQorICAgICAgZWNobworICBmaQorfQorCisjIFByaW50IGVycm9yIGluZm9ybWF0aW9uIGFuZCBleGl0LgorZWNob19lcnJvciAoKSB7CisgIGVjaG8gIkVSUk9SOiAkMSIgPiYyCisgIGV4aXQgMQorfQorCisjIEdlbmVyYXRlIHRoZSByZW1vdmUgbGlzdDoKKyMKKyMgKiBBZGQgLmRvbmUvLnNpZ2luZm8gdG8gdGhlIHJlbW92ZSBsaXN0CisjICogQWRkIGRlc3RpbmF0aW9uIG9mIHN5bWxpbmsgdG8gdGhlIHJlbW92ZSBsaXN0CisjCisjICQxOiBvdXRwdXQgZmlsZSwgb3RoZXJzOiBzc3RhdGUgY2FjaGUgZmlsZSAoLnRneikKK2dlbl9ybWxpc3QgKCl7CisgIGxvY2FsIHJtbGlzdF9maWxlPSIkMSIKKyAgc2hpZnQKKyAgbG9jYWwgZmlsZXM9IiRAIgorICBmb3IgaSBpbiAkZmlsZXM7IGRvCisgICAgICBlY2hvICRpID4+ICRybWxpc3RfZmlsZQorICAgICAgIyBBZGQgdGhlICIuc2lnaW5mbyIKKyAgICAgIGlmIFsgLWUgJGkuc2lnaW5mbyBdOyB0aGVuCisgICAgICAgICAgZWNobyAkaS5zaWdpbmZvID4+ICRybWxpc3RfZmlsZQorICAgICAgZmkKKyAgICAgICMgQWRkIHRoZSBkZXN0aW5hdGlvbiBvZiBzeW1saW5rCisgICAgICBpZiBbIC1MICIkaSIgXTsgdGhlbgorICAgICAgICAgIGlmIFsgIiRmc3ltIiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgIGRlc3Q9ImByZWFkbGluayAtZSAkaWAiCisgICAgICAgICAgICAgIGlmIFsgLW4gIiRkZXN0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBlY2hvICRkZXN0ID4+ICRybWxpc3RfZmlsZQorICAgICAgICAgICAgICAgICAgIyBSZW1vdmUgdGhlIC5zaWdpbmZvIHdoZW4gLnRneiBpcyByZW1vdmVkCisgICAgICAgICAgICAgICAgICBpZiBbIC1mICIkZGVzdC5zaWdpbmZvIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZGVzdC5zaWdpbmZvID4+ICRybWxpc3RfZmlsZQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgICMgQWRkIHRoZSAiLnRnei5kb25lIiBhbmQgIi5zaWdpbmZvLmRvbmUiIChtYXkgZXhpc3QgaW4gdGhlIGZ1dHVyZSkKKyAgICAgICAgICBiYXNlX2ZuPSIke2kjIy8qL30iCisgICAgICAgICAgdF9mbj0iJGJhc2VfZm4uZG9uZSIKKyAgICAgICAgICBzX2ZuPSIkYmFzZV9mbi5zaWdpbmZvLmRvbmUiCisgICAgICAgICAgZm9yIGQgaW4gJHRfZm4gJHNfZm47IGRvCisgICAgICAgICAgICAgIGlmIFsgLWYgJGNhY2hlX2Rpci8kZCBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBlY2hvICRjYWNoZV9kaXIvJGQgPj4gJHJtbGlzdF9maWxlCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgZmkKKyAgZG9uZQorfQorCisjIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBjYWNoZSBmaWxlcyBmb3IgdGhlIHBrZywga2VlcCB0aGUgbmV3ZXN0IG9uZQorcmVtb3ZlX2R1cGxpY2F0ZWQgKCkgeworCisgIGxvY2FsIHRvcGRpcgorICBsb2NhbCBvZV9jb3JlX2RpcgorICBsb2NhbCB0dW5lZGlycworICBsb2NhbCBhbGxfYXJjaHMKKyAgbG9jYWwgYWxsX21hY2hpbmVzCisgIGxvY2FsIGF2YV9hcmNocworICBsb2NhbCBhcmNoCisgIGxvY2FsIGZpbGVfbmFtZXMKKyAgbG9jYWwgc3N0YXRlX2ZpbGVzX2xpc3QKKyAgbG9jYWwgZm5fdG1wCisgIGxvY2FsIGxpc3Rfc3VmZml4PWBta3RlbXBgIHx8IGV4aXQgMQorCisgIGlmIFsgLXogIiRleHRyYV9hcmNocyIgXSA7IHRoZW4KKyAgICAjIEZpbmQgb3V0IHRoZSBhcmNocyBpbiBhbGwgdGhlIGxheWVycworICAgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgYXJjaHMgaW4gdGhlIGxheWVycyAuLi4gIgorICAgIG9lX2NvcmVfZGlyPSQoZGlybmFtZSAkKGRpcm5hbWUgJChyZWFkbGluayAtZSAkMCkpKQorICAgIHRvcGRpcj0kKGRpcm5hbWUgJG9lX2NvcmVfZGlyKQorICAgIHR1bmVkaXJzPSJgZmluZCAkdG9wZGlyL21ldGEqICR7b2VfY29yZV9kaXJ9L21ldGEqICRsYXllcnMgLXBhdGggJyovbWV0YSovY29uZi9tYWNoaW5lL2luY2x1ZGUnIDI+L2Rldi9udWxsYCIKKyAgICBbIC1uICIkdHVuZWRpcnMiIF0gfHwgZWNob19lcnJvciAiQ2FuJ3QgZmluZCB0aGUgdHVuZSBkaXJlY3RvcnkiCisgICAgYWxsX21hY2hpbmVzPSJgZmluZCAkdG9wZGlyL21ldGEqICR7b2VfY29yZV9kaXJ9L21ldGEqICRsYXllcnMgLXBhdGggJyovbWV0YSovY29uZi9tYWNoaW5lLyonIC1uYW1lICcqLmNvbmYnIDI+L2Rldi9udWxsIHwgc2VkIC1lICdzLy4qXC8vLycgLWUgJ3MvLmNvbmYkLy8nYCIKKyAgICBhbGxfYXJjaHM9YGdyZXAgLXIgLWggIl5BVkFJTFRVTkVTIC4qPSIgJHR1bmVkaXJzIHwgc2VkIC1lICdzLy4qPS8vJyAtZSAncy9cIi8vZydgCisgIGZpCisKKyAgIyBVc2UgdGhlICJfIiB0byBzdWJzdGl0dXRlICItIiwgZS5nLiwgeDg2LTY0IHRvIHg4Nl82NCwgYnV0IG5vdCBmb3IgZXh0cmFfYXJjaHMgd2hpY2ggY2FuIGJlIHNvbWV0aGluZyBsaWtlIGNvcnRleGE5dDItdmZwLW5lb24KKyAgIyBTb3J0IHRvIHJlbW92ZSB0aGUgZHVwbGljYXRlZCBvbmVzCisgICMgQWRkIGFsbGFyY2ggYW5kIGJ1aWxkZXIgYXJjaCAobmF0aXZlKQorICBidWlsZGVyX2FyY2g9JCh1bmFtZSAtbSkKKyAgYWxsX2FyY2hzPSIkKGVjaG8gYWxsYXJjaCAkYWxsX2FyY2hzICRhbGxfbWFjaGluZXMgJGJ1aWxkZXJfYXJjaCBcCisgICAgICAgICAgfCBzZWQgLWUgJ3MvLS9fL2cnIC1lICdzLyAvXG4vZycgfCBzb3J0IC11KSAkZXh0cmFfYXJjaHMiCisgIGVjaG8gIkRvbmUiCisKKyAgIyBUb3RhbCBudW1iZXIgb2YgZmlsZXMgaW5jbHVkaW5nIHNzdGF0ZS0sIC5zaWdpbmZvIGFuZCAuZG9uZSBmaWxlcworICB0b3RhbF9maWxlcz1gZmluZCAkY2FjaGVfZGlyIC1uYW1lICdzc3RhdGUqJyB8IHdjIC1sYAorICAjIFNhdmUgYWxsIHRoZSBzc3RhdGUgZmlsZXMgaW4gYSBmaWxlCisgIHNzdGF0ZV9maWxlc19saXN0PWBta3RlbXBgIHx8IGV4aXQgMQorICBmaW5kICRjYWNoZV9kaXIgLW5hbWUgJ3NzdGF0ZToqOio6KjoqOio6KjoqLnRneionID4kc3N0YXRlX2ZpbGVzX2xpc3QKKworICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIHN1ZmZpeGVzIGluIHRoZSBzc3RhdGUgY2FjaGUgZGlyIC4uLiAiCisgIHNzdGF0ZV9zdWZmaXhlcz0iYHNlZCAncyUuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W15fXSpfXChbXjpdKlwpXC50Z3ouKiVcMSVnJyAkc3N0YXRlX2ZpbGVzX2xpc3QgfCBzb3J0IC11YCIKKyAgZWNobyAiRG9uZSIKKyAgZWNobyAiVGhlIGZvbGxvd2luZyBzdWZmaXhlcyBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIGNhY2hlIGRpcjoiCisgIGVjaG8gJHNzdGF0ZV9zdWZmaXhlcworCisgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgYXJjaHMgaW4gdGhlIHNzdGF0ZSBjYWNoZSBkaXIgLi4uICIKKyAgIyBVc2luZyB0aGlzIFNTVEFURV9QS0dTUEVDIGRlZmluaXRpb24gaXQncyA2dGggY29sb24gc2VwYXJhdGVkIGZpZWxkCisgICMgU1NUQVRFX1BLR1NQRUMgICAgPSAic3N0YXRlOiR7UE59OiR7UEFDS0FHRV9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9OiR7UFZ9OiR7UFJ9OiR7U1NUQVRFX1BLR0FSQ0h9OiR7U1NUQVRFX1ZFUlNJT059OiIKKyAgZm9yIGFyY2ggaW4gJGFsbF9hcmNoczsgZG8KKyAgICAgIGdyZXAgLXEgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjokYXJjaDpbXjpdKjpbXjpdKlwudGd6JCIgJHNzdGF0ZV9maWxlc19saXN0CisgICAgICBbICQ/IC1lcSAwIF0gJiYgYXZhX2FyY2hzPSIkYXZhX2FyY2hzICRhcmNoIgorICAgICAgIyAke2J1aWxkZXJfYXJjaH1fJGFyY2ggdXNlZCBieSB0b29sY2hhaW4gc3N0YXRlCisgICAgICBncmVwIC1xICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6JHtidWlsZGVyX2FyY2h9XyRhcmNoOlteOl0qOlteOl0qXC50Z3okIiAkc3N0YXRlX2ZpbGVzX2xpc3QKKyAgICAgIFsgJD8gLWVxIDAgXSAmJiBhdmFfYXJjaHM9IiRhdmFfYXJjaHMgJHtidWlsZGVyX2FyY2h9XyRhcmNoIgorICBkb25lCisgIGVjaG8gIkRvbmUiCisgIGVjaG8gIlRoZSBmb2xsb3dpbmcgYXJjaHMgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZSBjYWNoZSBkaXI6IgorICBlY2hvICRhdmFfYXJjaHMKKyAgZWNobyAiIgorCisgICMgU2F2ZSB0aGUgZmlsZSBsaXN0IHdoaWNoIG5lZWRzIHRvIGJlIHJlbW92ZWQKKyAgbG9jYWwgcmVtb3ZlX2xpc3RkaXI9YG1rdGVtcCAtZGAgfHwgZXhpdCAxCisgIGZvciBzdWZmaXggaW4gJHNzdGF0ZV9zdWZmaXhlczsgZG8KKyAgICAgIGlmIFsgIiRzdWZmaXgiID0gInBvcHVsYXRlX2xpYyIgXSA7IHRoZW4KKyAgICAgICAgICBlY2hvICJTa2lwcGluZyBwb3B1bGF0ZV9saWMsIGJlY2F1c2UgcmVtb3ZpbmcgZHVwbGljYXRlcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGZvciB0aGVtICh1c2UgLS1zdGFtcHMtZGlyIGluc3RlYWQpIgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICBmaQorICAgICAgIyBUb3RhbCBudW1iZXIgb2YgZmlsZXMgaW5jbHVkaW5nIC5zaWdpbmZvIGFuZCAuZG9uZSBmaWxlcworICAgICAgdG90YWxfZmlsZXNfc3VmZml4PWBncmVwICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146X10qXyRzdWZmaXhcLnRnei4qIiAkc3N0YXRlX2ZpbGVzX2xpc3QgfCB3YyAtbCAyPi9kZXYvbnVsbGAKKyAgICAgIHRvdGFsX3Rnel9zdWZmaXg9YGdyZXAgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpfXSpfJHN1ZmZpeFwudGd6JCIgJHNzdGF0ZV9maWxlc19saXN0IHwgd2MgLWwgMj4vZGV2L251bGxgCisgICAgICAjIFNhdmUgdGhlIGZpbGUgbGlzdCB0byBhIGZpbGUsIHNvbWUgc3VmZml4J3MgZmlsZSBtYXkgbm90IGV4aXN0CisgICAgICBncmVwICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146X10qXyRzdWZmaXhcLnRnei4qIiAkc3N0YXRlX2ZpbGVzX2xpc3QgPiRsaXN0X3N1ZmZpeCAyPi9kZXYvbnVsbAorICAgICAgbG9jYWwgZGVsZXRlZF90Z3o9MAorICAgICAgbG9jYWwgZGVsZXRlZF9maWxlcz0wCisgICAgICBmb3IgZXh0IGluIHRneiB0Z3ouc2lnaW5mbyB0Z3ouZG9uZTsgZG8KKyAgICAgICAgICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIHNzdGF0ZTp4eHhfJHN1ZmZpeC4kZXh0IC4uLiAiCisgICAgICAgICAgIyBVbmlxIEJQTnMKKyAgICAgICAgICBmaWxlX25hbWVzPWBmb3IgYXJjaCBpbiAkYXZhX2FyY2hzICIiOyBkbworICAgICAgICAgICAgICBzZWQgLW5lICJzJS4qL3NzdGF0ZTpcKFteOl0qXCk6W146XSo6W146XSo6W146XSo6JGFyY2g6W146XSo6W146XSpcLiR7ZXh0fSQlXDElcCIgJGxpc3Rfc3VmZml4CisgICAgICAgICAgZG9uZSB8IHNvcnQgLXVgCisKKyAgICAgICAgICBmbl90bXA9YG1rdGVtcGAgfHwgZXhpdCAxCisgICAgICAgICAgcm1fbGlzdD0iJHJlbW92ZV9saXN0ZGlyL3NzdGF0ZTp4eHhfJHN1ZmZpeCIKKyAgICAgICAgICBmb3IgZm4gaW4gJGZpbGVfbmFtZXM7IGRvCisgICAgICAgICAgICAgIFsgLXogIiR2ZXJib3NlIiBdIHx8IGVjaG8gIkFuYWx5emluZyBzc3RhdGU6JGZuLXh4eF8kc3VmZml4LiR7ZXh0fSIKKyAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gJGF2YV9hcmNocyAiIjsgZG8KKyAgICAgICAgICAgICAgICAgIGdyZXAgLWggIi4qL3NzdGF0ZTokZm46W146XSo6W146XSo6W146XSo6JGFyY2g6W146XSo6W146XSpcLiR7ZXh0fSQiICRsaXN0X3N1ZmZpeCA+JGZuX3RtcAorICAgICAgICAgICAgICAgICAgaWYgWyAtcyAkZm5fdG1wIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgWyAkZGVidWcgLWd0IDEgXSAmJiBlY2hvICJBdmFpbGFibGUgZmlsZXMgZm9yICRmbi0kYXJjaC0gd2l0aCBzdWZmaXggJHN1ZmZpeC4ke2V4dH06IiAmJiBjYXQgJGZuX3RtcAorICAgICAgICAgICAgICAgICAgICAgICMgVXNlIHRoZSBtb2RpZmljYXRpb24gdGltZQorICAgICAgICAgICAgICAgICAgICAgIHRvX2RlbD0kKGxzIC10ICQoY2F0ICRmbl90bXApIHwgc2VkIC1uICcxIXAnKQorICAgICAgICAgICAgICAgICAgICAgIFsgJGRlYnVnIC1ndCAyIF0gJiYgZWNobyAiQ29uc2lkZXJpbmcgdG8gZGVsZXRlOiAkdG9fZGVsIgorICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHNzdGF0ZSBmaWxlIHdoaWNoIGlzIGRvd25sb2FkZWQgZnJvbSB0aGUgU1NUQVRFX01JUlJPUiBpcworICAgICAgICAgICAgICAgICAgICAgICMgcHV0IGluIFNTVEFURV9ESVIsIGFuZCB0aGVyZSBpcyBhIHN5bWxpbmsgaW4gU1NUQVRFX0RJUi8/Py8gdG8KKyAgICAgICAgICAgICAgICAgICAgICAjIGl0LCBzbyBmaWx0ZXIgaXQgb3V0IGZyb20gdGhlIHJlbW92ZSBsaXN0IGlmIGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgICAgdG9fa2VlcD0kKGxzIC10ICQoY2F0ICRmbl90bXApIHwgc2VkIC1uICcxcCcpCisgICAgICAgICAgICAgICAgICAgICAgWyAkZGVidWcgLWd0IDIgXSAmJiBlY2hvICJDb25zaWRlcmluZyB0byBrZWVwOiAkdG9fa2VlcCIKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiAkdG9fa2VlcDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAtTCAiJGsiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHN5bWxpbmsncyBkZXN0aW5hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga19kZXN0PSJgcmVhZGxpbmsgLWUgJGtgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXliZSBpdCBpcyB0aGUgb25lIGluIGNhY2hlX2RpcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga19tYXliZT0iJGNhY2hlX2Rpci8ke2sjIy8qL30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBpdCBmcm9tIHRoZSByZW1vdmUgbGlzdCBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIiRrX2Rlc3QiID0gIiRrX21heWJlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fZGVsPSJgZWNobyAkdG9fZGVsIHwgc2VkICdzIydcIiRrX21heWJlXCInIyNnJ2AiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBybSAtZiAkZm5fdG1wCisgICAgICAgICAgICAgICAgICAgICAgWyAkZGVidWcgLWd0IDIgXSAmJiBlY2hvICJEZWNpZGVkIHRvIGRlbGV0ZTogJHRvX2RlbCIKKyAgICAgICAgICAgICAgICAgICAgICBnZW5fcm1saXN0ICRybV9saXN0LiRleHQgIiR0b19kZWwiCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgICAgZGVsZXRlZF90Z3o9YGNhdCAkcm1fbGlzdC4qIDI+L2Rldi9udWxsIHwgZ3JlcCAiLnRneiQiIHwgd2MgLWxgCisgICAgICBkZWxldGVkX2ZpbGVzPWBjYXQgJHJtX2xpc3QuKiAyPi9kZXYvbnVsbCB8IHdjIC1sYAorICAgICAgWyAiJGRlbGV0ZWRfZmlsZXMiIC1ndCAwIC1hICRkZWJ1ZyAtZ3QgMCBdICYmIGNhdCAkcm1fbGlzdC4qCisgICAgICBlY2hvICIoJGRlbGV0ZWRfdGd6IGZyb20gJHRvdGFsX3Rnel9zdWZmaXggLnRneiBmaWxlcyBmb3IgJHN1ZmZpeCBzdWZmaXggd2lsbCBiZSByZW1vdmVkIG9yICRkZWxldGVkX2ZpbGVzIGZyb20gJHRvdGFsX2ZpbGVzX3N1ZmZpeCB3aGVuIGNvdW50aW5nIGFsc28gLnNpZ2luZm8gYW5kIC5kb25lIGZpbGVzKSIKKyAgICAgIGxldCB0b3RhbF9kZWxldGVkPSR0b3RhbF9kZWxldGVkKyRkZWxldGVkX2ZpbGVzCisgIGRvbmUKKyAgZGVsZXRlZF90Z3o9MAorICBybV9vbGRfbGlzdD0kcmVtb3ZlX2xpc3RkaXIvc3N0YXRlLW9sZC1maWxlbmFtZXMKKyAgZmluZCAkY2FjaGVfZGlyIC1uYW1lICdzc3RhdGUtKi50Z3onID4kcm1fb2xkX2xpc3QKKyAgWyAtcyAiJHJtX29sZF9saXN0IiBdICYmIGRlbGV0ZWRfdGd6PWBjYXQgJHJtX29sZF9saXN0IHwgZ3JlcCAiLnRneiQiIHwgd2MgLWxgCisgIFsgLXMgIiRybV9vbGRfbGlzdCIgXSAmJiBkZWxldGVkX2ZpbGVzPWBjYXQgJHJtX29sZF9saXN0IHwgd2MgLWxgCisgIFsgLXMgIiRybV9vbGRfbGlzdCIgLWEgJGRlYnVnIC1ndCAwIF0gJiYgY2F0ICRybV9vbGRfbGlzdAorICBlY2hvICIoJGRlbGV0ZWRfdGd6IC50Z3ogZmlsZXMgd2l0aCBvbGQgc3N0YXRlLSogZmlsZW5hbWVzIHdpbGwgYmUgcmVtb3ZlZCBvciAkZGVsZXRlZF9maWxlcyB3aGVuIGNvdW50aW5nIGFsc28gLnNpZ2luZm8gYW5kIC5kb25lIGZpbGVzKSIKKyAgbGV0IHRvdGFsX2RlbGV0ZWQ9JHRvdGFsX2RlbGV0ZWQrJGRlbGV0ZWRfZmlsZXMKKworICBybSAtZiAkbGlzdF9zdWZmaXgKKyAgcm0gLWYgJHNzdGF0ZV9maWxlc19saXN0CisgIGlmIFsgJHRvdGFsX2RlbGV0ZWQgLWd0IDAgXTsgdGhlbgorICAgICAgcmVhZF9jb25maXJtCisgICAgICBpZiBbICIkY29uZmlybSIgPSAieSIgLW8gIiRjb25maXJtIiA9ICJZIiBdOyB0aGVuCisgICAgICAgICAgZm9yIGxpc3QgaW4gYGxzICRyZW1vdmVfbGlzdGRpci9gOyBkbworICAgICAgICAgICAgICBlY2hvICJSZW1vdmluZyAkbGlzdC50Z3ogKGBjYXQgJHJlbW92ZV9saXN0ZGlyLyRsaXN0IHwgd2MgLXdgIGZpbGVzKSAuLi4gIgorICAgICAgICAgICAgICAjIFJlbW92ZSB0aGVtIG9uZSBieSBvbmUgdG8gYXZvaWQgdGhlIGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IKKyAgICAgICAgICAgICAgZm9yIGkgaW4gYGNhdCAkcmVtb3ZlX2xpc3RkaXIvJGxpc3RgOyBkbworICAgICAgICAgICAgICAgICAgcm0gLWYgJHZlcmJvc2UgJGkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBlY2hvICJEb25lIgorICAgICAgICAgIGRvbmUKKyAgICAgICAgICBlY2hvICIkdG90YWxfZGVsZXRlZCBmaWxlcyBoYXZlIGJlZW4gcmVtb3ZlZCEiCisgICAgICBlbHNlCisgICAgICAgICAgZG9fbm90aGluZworICAgICAgZmkKKyAgZWxzZQorICAgICAgIG5vX2ZpbGVzCisgIGZpCisgIFsgLWQgJHJlbW92ZV9saXN0ZGlyIF0gJiYgcm0gLWZyICRyZW1vdmVfbGlzdGRpcgorfQorCisjIFJlbW92ZSB0aGUgc3N0YXRlIGZpbGUgYnkgc3RhbXBzIGRpciwgdGhlIGZpbGUgbm90IHVzZWQgYnkgdGhlIHN0YW1wcyBkaXIKKyMgd2lsbCBiZSByZW1vdmVkLgorcm1fYnlfc3RhbXBzICgpeworCisgIGxvY2FsIGNhY2hlX2xpc3Q9YG1rdGVtcGAgfHwgZXhpdCAxCisgIGxvY2FsIGtlZXBfbGlzdD1gbWt0ZW1wYCB8fCBleGl0IDEKKyAgbG9jYWwgcm1fbGlzdD1gbWt0ZW1wYCB8fCBleGl0IDEKKyAgbG9jYWwgc3VtcworICBsb2NhbCBhbGxfc3VtcworCisgICMgVG90YWwgbnVtYmVyIG9mIGZpbGVzIGluY2x1ZGluZyBzc3RhdGUtLCAuc2lnaW5mbyBhbmQgLmRvbmUgZmlsZXMKKyAgdG90YWxfZmlsZXM9YGZpbmQgJGNhY2hlX2RpciAtdHlwZSBmIC1uYW1lICdzc3RhdGUqJyB8IHdjIC1sYAorICAjIFNhdmUgYWxsIHRoZSBzdGF0ZSBmaWxlIGxpc3QgdG8gYSBmaWxlCisgIGZpbmQgJGNhY2hlX2RpciAtdHlwZSBmIC1uYW1lICdzc3RhdGUqJyB8IHNvcnQgLXUgLW8gJGNhY2hlX2xpc3QKKworICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIHN1ZmZpeGVzIGluIHRoZSBzc3RhdGUgY2FjaGUgZGlyIC4uLiAiCisgIGxvY2FsIHNzdGF0ZV9zdWZmaXhlcz0iYHNlZCAncyUuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W15fXSpfXChbXjpdKlwpXC50Z3ouKiVcMSVnJyAkY2FjaGVfbGlzdCB8IHNvcnQgLXVgIgorICBlY2hvICJEb25lIgorICBlY2hvICJUaGUgZm9sbG93aW5nIHN1ZmZpeGVzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgY2FjaGUgZGlyOiIKKyAgZWNobyAkc3N0YXRlX3N1ZmZpeGVzCisKKyAgIyBGaWd1cmUgb3V0IGFsbCB0aGUgbWQ1c3VtcyBpbiB0aGUgc3RhbXBzIGRpci4KKyAgZWNobyAiRmlndXJpbmcgb3V0IGFsbCB0aGUgbWQ1c3VtcyBpbiBzdGFtcHMgZGlyIC4uLiAiCisgIGZvciBpIGluICRzc3RhdGVfc3VmZml4ZXM7IGRvCisgICAgICAjIFRoZXJlIGlzIG5vICJcLnNpZ2RhdGEiIGJ1dCAiX3NldGNlbmUiIHdoZW4gaXQgaXMgbWlycm9yZWQKKyAgICAgICMgZnJvbSB0aGUgU1NUQVRFX01JUlJPUlMsIHVzZSB0aGVtIHRvIGZpZ3VyZSBvdXQgdGhlIHN1bS4KKyAgICAgIHN1bXM9YGZpbmQgJHN0YW1wcyAtbWF4ZGVwdGggMyAtbmFtZSAiKi5kb18kaS4qIiBcCisgICAgICAgIC1vIC1uYW1lICIqLmRvXyR7aX1fc2V0c2NlbmUuKiIgfCBcCisgICAgICAgIHNlZCAtbmUgJ3MjLipfc2V0c2NlbmVcLiMjcCcgLWUgJ3MjLipcLnNpZ2RhdGFcLiMjcCcgfCBcCisgICAgICAgIHNlZCAtZSAncyNcLi4qIyMnIHwgc29ydCAtdWAKKyAgICAgIGFsbF9zdW1zPSIkYWxsX3N1bXMgJHN1bXMiCisgIGRvbmUKKyAgZWNobyAiRG9uZSIKKworICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIGZpbGVzIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCAuLi4gIgorICBmb3IgaSBpbiAkYWxsX3N1bXM7IGRvCisgICAgICBncmVwICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6JHtpfV8uKiIgJGNhY2hlX2xpc3QgPj4ka2VlcF9saXN0CisgIGRvbmUKKyAgZWNobyAiRG9uZSIKKworICBpZiBbIC1zICRrZWVwX2xpc3QgXTsgdGhlbgorICAgICAgc29ydCAtdSAka2VlcF9saXN0IC1vICRrZWVwX2xpc3QKKyAgICAgIHRvX2RlbD1gY29tbSAtMSAtMyAka2VlcF9saXN0ICRjYWNoZV9saXN0YAorICAgICAgZ2VuX3JtbGlzdCAkcm1fbGlzdCAiJHRvX2RlbCIKKyAgICAgIGxldCB0b3RhbF9kZWxldGVkPWBjYXQgJHJtX2xpc3QgfCBzb3J0IC11IHwgd2MgLXdgCisgICAgICBpZiBbICR0b3RhbF9kZWxldGVkIC1ndCAwIF07IHRoZW4KKyAgICAgICAgICBbICRkZWJ1ZyAtZ3QgMCBdICYmIGNhdCAkcm1fbGlzdCB8IHNvcnQgLXUKKyAgICAgICAgICByZWFkX2NvbmZpcm0KKyAgICAgICAgICBpZiBbICIkY29uZmlybSIgPSAieSIgLW8gIiRjb25maXJtIiA9ICJZIiBdOyB0aGVuCisgICAgICAgICAgICAgIGVjaG8gIlJlbW92aW5nIHNzdGF0ZSBjYWNoZSBmaWxlcyAuLi4gKCR0b3RhbF9kZWxldGVkIGZpbGVzKSIKKyAgICAgICAgICAgICAgIyBSZW1vdmUgdGhlbSBvbmUgYnkgb25lIHRvIGF2b2lkIHRoZSBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yCisgICAgICAgICAgICAgIGZvciBpIGluIGBjYXQgJHJtX2xpc3QgfCBzb3J0IC11YDsgZG8KKyAgICAgICAgICAgICAgICAgIHJtIC1mICR2ZXJib3NlICRpCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgZWNobyAiJHRvdGFsX2RlbGV0ZWQgZmlsZXMgaGF2ZSBiZWVuIHJlbW92ZWQiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBkb19ub3RoaW5nCisgICAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgICBub19maWxlcworICAgICAgZmkKKyAgZWxzZQorICAgICAgZWNob19lcnJvciAiQWxsIGZpbGVzIGluIGNhY2hlIGRpciB3aWxsIGJlIHJlbW92ZWQhIEFib3J0ISIKKyAgZmkKKworICBybSAtZiAkY2FjaGVfbGlzdAorICBybSAtZiAka2VlcF9saXN0CisgIHJtIC1mICRybV9saXN0Cit9CisKKyMgUGFyc2UgYXJndW1lbnRzCit3aGlsZSBbIC1uICIkMSIgXTsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tY2FjaGUtZGlyPSopCisgICAgICBjYWNoZV9kaXI9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tY2FjaGUtZGlyPSMjJyB8IHhhcmdzIHJlYWRsaW5rIC1lYAorICAgICAgWyAtZCAiJGNhY2hlX2RpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGFyZ3VtZW50IHRvIC0tY2FjaGUtZGlyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXJlbW92ZS1kdXBsaWNhdGVkfC1kKQorICAgICAgcm1fZHVwbGljYXRlZD0ieSIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS15ZXN8LXkpCisgICAgICBjb25maXJtPSJ5IgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWZvbGxvdy1zeW1saW5rfC1MKQorICAgICAgZnN5bT0ieSIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1leHRyYS1hcmNocz0qKQorICAgICAgZXh0cmFfYXJjaHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tZXh0cmEtYXJjaHM9IyMnIC1lICdzIywjICNnJ2AKKyAgICAgIFsgLW4gIiRleHRyYV9hcmNocyIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGV4dHJhIGFyY2ggcGFyYW1ldGVyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWV4dHJhLWxheWVyPSopCisgICAgICBleHRyYV9sYXllcnM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tZXh0cmEtbGF5ZXI9IyMnIC1lICdzIywjICNnJ2AKKyAgICAgIFsgLW4gIiRleHRyYV9sYXllcnMiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBleHRyYSBsYXllciBwYXJhbWV0ZXIiCisgICAgICBmb3IgaSBpbiAkZXh0cmFfbGF5ZXJzOyBkbworICAgICAgICAgIGw9YHJlYWRsaW5rIC1lICRpYAorICAgICAgICAgIGlmIFsgLWQgIiRsIiBdOyB0aGVuCisgICAgICAgICAgICAgIGxheWVycz0iJGxheWVycyAkbCIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVjaG9fZXJyb3IgIkNhbid0IGZpbmQgbGF5ZXIgJGkiCisgICAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1zdGFtcHMtZGlyPSopCisgICAgICBzdGFtcHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tc3RhbXBzLWRpcj0jIycgLWUgJ3MjLCMgI2cnYAorICAgICAgWyAtbiAiJHN0YW1wcyIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHN0YW1wcyBkaXIgJGkiCisgICAgICBmb3IgaSBpbiAkc3RhbXBzOyBkbworICAgICAgICAgIFsgLWQgIiRpIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgc3RhbXBzIGRpciAkaSIKKyAgICAgIGRvbmUKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS12ZXJib3NlfC12KQorICAgICAgdmVyYm9zZT0iLXYiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tZGVidWd8LUQpCisgICAgICBkZWJ1Zz1gZXhwciAkZGVidWcgKyAxYAorICAgICAgZWNobyAiRGVidWcgbGV2ZWwgJGRlYnVnIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWhlbHB8LWgpCisgICAgICB1c2FnZQorICAgICAgZXhpdCAwCisgICAgICAgIDs7CisgICAgKikKKyAgICAgIGVjaG8gIkludmFsaWQgYXJndW1lbnRzICQqIgorICAgICAgZWNob19lcnJvciAiVHJ5ICdzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCAtaCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICAgICA7OworICBlc2FjCitkb25lCisKKyMgc3N0YXRlIGNhY2hlIGRpcmVjdG9yeSwgdXNlIGVudmlyb25tZW50IHZhcmlhYmxlIFNTVEFURV9DQUNIRV9ESVIKKyMgaWYgaXQgd2FzIG5vdCBzcGVjaWZpZWQsIG90aGVyd2lzZSwgZXJyb3IuCitbIC1uICIkY2FjaGVfZGlyIiBdIHx8IGNhY2hlX2Rpcj0kU1NUQVRFX0NBQ0hFX0RJUgorWyAtbiAiJGNhY2hlX2RpciIgXSB8fCBlY2hvX2Vycm9yICJObyBjYWNoZSBkaXIgZm91bmQhIgorWyAtZCAiJGNhY2hlX2RpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGNhY2hlIGRpcmVjdG9yeSBcIiRjYWNoZV9kaXJcIiIKKworWyAtbiAiJHJtX2R1cGxpY2F0ZWQiIC1hIC1uICIkc3RhbXBzIiBdICYmIFwKKyAgICBlY2hvX2Vycm9yICJDYW4gbm90IHVzZSBib3RoIC0tcmVtb3ZlLWR1cGxpY2F0ZWQgYW5kIC0tc3RhbXBzLWRpciIKKworWyAiJHJtX2R1cGxpY2F0ZWQiID0gInkiIF0gJiYgcmVtb3ZlX2R1cGxpY2F0ZWQKK1sgLW4gIiRzdGFtcHMiIF0gJiYgcm1fYnlfc3RhbXBzCitbIC16ICIkcm1fZHVwbGljYXRlZCIgLWEgLXogIiRzdGFtcHMiIF0gJiYgXAorICAgIGVjaG8gIldoYXQgZG8geW91IHdhbnQgdG8gZG8/IgorZXhpdCAwCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLWRpZmYtbWFjaGluZXMuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLWRpZmYtbWFjaGluZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU2YWEwYQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy9zc3RhdGUtZGlmZi1tYWNoaW5lcy5zaApAQCAtMCwwICsxLDE3MiBAQAorIyEvYmluL2Jhc2gKKworIyBVc2VkIHRvIGNvbXBhcmUgc3N0YXRlIGNoZWNrc3VtcyBiZXR3ZWVuIE1BQ0hJTkVTLgorIyBFeGVjdXRlIHNjcmlwdCBhbmQgY29tcGFyZSBnZW5lcmF0ZWQgbGlzdC5NIGZpbGVzLgorIyBVc2luZyBiYXNoIHRvIGhhdmUgUElQRVNUQVRVUyB2YXJpYWJsZS4KKworIyBJdCdzIGFsc28gdXNlZnVsbCB0byBrZWVwIG9sZGVyIHNzdGF0ZSBjaGVja3N1bXMKKyMgdG8gYmUgYWJsZSB0byBmaW5kIG91dCB3aHkgc29tZXRoaW5nIGlzIHJlYnVpbGRpbmcKKyMgYWZ0ZXIgdXBkYXRpbmcgbWV0YWRhdGEKKworIyAkIGRpZmYgXAorIyAgICAgc3N0YXRlLWRpZmYvMTM0OTM0ODM5Mi9mYWtlLWNvcnRleGE4L2xpc3QuTSBcCisjICAgICBzc3RhdGUtZGlmZi8xMzQ5MzQ4MzkyL2Zha2UtY29ydGV4YTkvbGlzdC5NIFwKKyMgICAgIHwgd2MgLWwKKyMgNTM4CisKKyMgVGhlbiB0byBjb21wYXJlIHNpZ2RhdGEgdXNlIHNvbWV0aGluZyBsaWtlOgorIyAkIGxzIHNzdGF0ZS1kaWZmLzEzNDkzNDgzOTIvKi9hcm12N2EtdmZwLW5lb24qL2xpbnV4LWxpYmMtaGVhZGVycy8qZG9fY29uZmlndXJlKnNpZ2RhdGEqCisjICAgc3N0YXRlLWRpZmYvMTM0OTM0ODM5Mi9mYWtlLWNvcnRleGE4L2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpbnV4LWxpYmMtaGVhZGVycy8zLjQuMy1yMC5kb19jb25maWd1cmUuc2lnZGF0YS5jYjczYjM2MzBhN2I4MTkxZTcyZmM0NjljNTEzNzAyNQorIyAgIHNzdGF0ZS1kaWZmLzEzNDkzNDgzOTIvZmFrZS1jb3J0ZXhhOS9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saW51eC1saWJjLWhlYWRlcnMvMy40LjMtcjAuZG9fY29uZmlndXJlLnNpZ2RhdGEuZjM3YWRhMTc3YmY5OWNlOGFmODU5MTRkZjIyYjVhMGIKKyMgJCBiaXRiYWtlLWRpZmZzaWdzIHN0YW1wcy4xMzQ5MzQ4MzkyLyovYXJtdjdhLXZmcC1uZW9uKi9saW51eC1saWJjLWhlYWRlcnMvKmRvX2NvbmZpZ3VyZSpzaWdkYXRhKgorIyAgIGJhc2VoYXNoIGNoYW5nZWQgZnJvbSA4ZDBiZDY3YmIxZGE2ZjY4NzE3NzYwZmMzZWY0MzE3MSB0byBlODY5ZmE2MTQyNmU4OGU5YzMwNzI2YmE4OGExMjE2YQorIyAgIFZhcmlhYmxlIFRVTkVfQ0NBUkdTIHZhbHVlIGNoYW5nZWQgZnJvbSAgLW1hcmNoPWFybXY3LWEgICAgIC1tdGh1bWItaW50ZXJ3b3JrIC1tZmxvYXQtYWJpPXNvZnRmcCAtbWZwdT1uZW9uIC1tdHVuZT1jb3J0ZXgtYTggdG8gIC1tYXJjaD1hcm12Ny1hICAgICAtbXRodW1iLWludGVyd29yayAtbWZsb2F0LWFiaT1zb2Z0ZnAgLW1mcHU9bmVvbiAtbXR1bmU9Y29ydGV4LWE5CisKKyMgR2xvYmFsIHZhcnMKK3RtcGRpcj0KK21hY2hpbmVzPQordGFyZ2V0cz0KK2RlZmF1bHRfbWFjaGluZXM9InFlbXVhcm0gcWVtdXg4NiBxZW11eDg2LTY0IgorZGVmYXVsdF90YXJnZXRzPSJjb3JlLWltYWdlLWJhc2UiCithbmFseXplPSJOIgorCit1c2FnZSAoKSB7CisgIGNhdCA8PCBFT0YKK1dlbGNvbWUgdG8gdXRpbGl0eSB0byBjb21wYXJlIHNzdGF0ZSBjaGVja3N1bXMgYmV0d2VlbiBkaWZmZXJlbnQgTUFDSElORXMuCiskMCA8T1BUSU9OPgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwCisgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorCisgIC0tdG1wZGlyPTx0bXBkaXI+CisgICAgICAgIFNwZWNpZnkgdG1wZGlyLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIFNvbWV0aGluZyBsaWtlIC9PRS9vZS1jb3JlL3RtcC1lZ2xpYmMgKG5vIC8gYXQgdGhlIGVuZCkuCisKKyAgLS1tYWNoaW5lcz08bWFjaGluZXM+CisgICAgICAgIExpc3Qgb2YgTUFDSElORXMgc2VwYXJhdGVkIGJ5IHNwYWNlLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUFDSElORVMgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAicWVtdWFybSBxZW11eDg2IHFlbXV4ODYtNjQiLgorCisgIC0tdGFyZ2V0cz08dGFyZ2V0cz4KKyAgICAgICAgTGlzdCBvZiB0YXJnZXRzIHNlcGFyYXRlZCBieSBzcGFjZSwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRBUkdFVFMgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAiY29yZS1pbWFnZS1iYXNlIi4KKworICAtLWFuYWx5emUKKyAgICAgICAgU2hvdyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBNQUNISU5Fcy4gSXQgYXNzdW1lczoKKyAgICAgICAgKiBGaXJzdCAyIE1BQ0hJTkVzIGluIC0tbWFjaGluZXMgcGFyYW1ldGVyIGhhdmUgdGhlIHNhbWUgVFVORV9QS0dBUkNICisgICAgICAgICogVGhpcmQgb3B0aW9uYWwgTUFDSElORSBoYXMgZGlmZmVyZW50IFRVTkVfUEtHQVJDSCAtIG9ubHkgbmF0aXZlIGFuZCBhbGxhcmNoIHJlY2lwZXMgYXJlIGNvbXBhcmVkKS4KKyAgICAgICAgKiBOZXh0IE1BQ0hJTkVzIGFyZSBpZ25vcmVkCitFT0YKK30KKworIyBQcmludCBlcnJvciBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KK2VjaG9fZXJyb3IgKCkgeworICBlY2hvICJFUlJPUjogJDEiID4mMgorICBleGl0IDEKK30KKword2hpbGUgWyAtbiAiJDEiIF07IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRtcGRpcj0qKQorICAgICAgdG1wZGlyPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXRtcGRpcj0jIycgfCB4YXJncyByZWFkbGluayAtZWAKKyAgICAgIFsgLWQgIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBhcmd1bWVudCB0byAtLXRtcGRpciIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1tYWNoaW5lcz0qKQorICAgICAgbWFjaGluZXM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tbWFjaGluZXM9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXRhcmdldHM9KikKKyAgICAgIHRhcmdldHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdGFyZ2V0cz0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tYW5hbHl6ZSkKKyAgICAgIGFuYWx5emU9IlkiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0taGVscHwtaCkKKyAgICAgIHVzYWdlCisgICAgICBleGl0IDAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudHMgJCoiCisgICAgICBlY2hvX2Vycm9yICJUcnkgJyQwIC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworIyB0bXBkaXIgZGlyZWN0b3J5LCB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSCisjIGlmIGl0IHdhcyBub3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UsIGVycm9yLgorWyAtbiAiJHRtcGRpciIgXSB8fCB0bXBkaXI9JFRNUERJUgorWyAtbiAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJObyB0bXBkaXIgZm91bmQhIgorWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHRtcGRpciBcIiR0bXBkaXJcIiIKK1sgLW4gIiRtYWNoaW5lcyIgXSB8fCBtYWNoaW5lcz0kTUFDSElORVMKK1sgLW4gIiRtYWNoaW5lcyIgXSB8fCBtYWNoaW5lcz0kZGVmYXVsdF9tYWNoaW5lcworWyAtbiAiJHRhcmdldHMiIF0gfHwgdGFyZ2V0cz0kVEFSR0VUUworWyAtbiAiJHRhcmdldHMiIF0gfHwgdGFyZ2V0cz0kZGVmYXVsdF90YXJnZXRzCisKK09VVFBVVD0ke3RtcGRpcn0vc3N0YXRlLWRpZmYvYGRhdGUgIislcyJgCitkZWNsYXJlIC1pIFJFU1VMVD0wCisKK2ZvciBNIGluICR7bWFjaGluZXN9OyBkbworICBbIC1kICR7dG1wZGlyfS9zdGFtcHMvIF0gJiYgZmluZCAke3RtcGRpcn0vc3RhbXBzLyAtbmFtZSBcKnNpZ2RhdGFcKiB8IHhhcmdzIHJtIC1mCisgIG1rZGlyIC1wICR7T1VUUFVUfS8ke019CisgIGV4cG9ydCBNQUNISU5FPSR7TX0KKyAgYml0YmFrZSAtUyBub25lICR7dGFyZ2V0c30gMj4mMSB8IHRlZSAtYSAke09VVFBVVH0vJHtNfS9sb2c7CisgIFJFU1VMVCs9JHtQSVBFU1RBVFVTWzBdfQorICBpZiBscyAke3RtcGRpcn0vc3RhbXBzLyogPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICBjcCAtcmEgJHt0bXBkaXJ9L3N0YW1wcy8qICR7T1VUUFVUfS8ke019CisgICAgZmluZCAke09VVFBVVH0vJHtNfSAtbmFtZSBcKnNpZ2RhdGFcKiB8IHNlZCAicyMke09VVFBVVH0vJHtNfS8jI2ciIHwgc29ydCA+ICR7T1VUUFVUfS8ke019L2xpc3QKKyAgICBNX1VOREVSU0NPUkU9YGVjaG8gJHtNfSB8IHNlZCAncy8tL18vZydgCisgICAgc2VkICJzLyR7TV9VTkRFUlNDT1JFfS9NQUNISU5FL2c7IHMvJHtNfS9NQUNISU5FL2ciICR7T1VUUFVUfS8ke019L2xpc3QgfCBzb3J0ID4gJHtPVVRQVVR9LyR7TX0vbGlzdC5NCisgICAgZmluZCAke3RtcGRpcn0vc3RhbXBzLyAtbmFtZSBcKnNpZ2RhdGFcKiB8IHhhcmdzIHJtIC1mCisgIGVsc2UKKyAgICBwcmludGYgIkVSUk9SOiBubyBzaWdkYXRhIGZpbGVzIHdlcmUgZ2VuZXJhdGVkIGZvciBNQUNISU5FICRNIGluICR7dG1wZGlyfS9zdGFtcHNcbiI7CisgIGZpCitkb25lCisKK2Z1bmN0aW9uIGNvbXBhcmVTaWduYXR1cmVzKCkgeworICBNQUNISU5FMT0kMQorICBNQUNISU5FMj0kMgorICBQQVRURVJOPSIkMyIKKyAgUFJFX1BBVFRFUk49IiIKKyAgWyAtbiAiJHtQQVRURVJOfSIgXSB8fCBQUkVfUEFUVEVSTj0iLXYiCisgIFsgLW4gIiR7UEFUVEVSTn0iIF0gfHwgUEFUVEVSTj0iTUFDSElORSIKKyAgZm9yIFRBU0sgaW4gZG9fY29uZmlndXJlLnNpZ2RhdGEgZG9fcG9wdWxhdGVfc3lzcm9vdC5zaWdkYXRhIGRvX3BhY2thZ2Vfd3JpdGVfaXBrLnNpZ2RhdGE7IGRvCisgICAgcHJpbnRmICJcblxuID09PSBDb21wYXJpbmcgc2lnbmF0dXJlcyBmb3IgdGFzayAke1RBU0t9IGJldHdlZW4gJHtNQUNISU5FMX0gYW5kICR7TUFDSElORTJ9ID09PVxuIiB8IHRlZSAtYSAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9LmxvZworICAgIGRpZmYgJHtPVVRQVVR9LyR7TUFDSElORTF9L2xpc3QuTSAke09VVFBVVH0vJHtNQUNISU5FMn0vbGlzdC5NIHwgZ3JlcCAke1BSRV9QQVRURVJOfSAiJHtQQVRURVJOfSIgfCBncmVwICR7VEFTS30gPiAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9CisgICAgZm9yIGkgaW4gYGNhdCAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9IHwgc2VkICdzI1teL10qL1woW14vXSpcKS8uKiNcMSNnJyB8IHNvcnQgLXUgfCB4YXJnc2A7IGRvCisgICAgICBbIC1lICR7T1VUUFVUfS8ke01BQ0hJTkUxfS8qLyRpLyoke1RBU0t9KiBdIHx8IGVjaG8gIklORk86ICR7aX0gdGFzayAke1RBU0t9IGRvZXNuJ3QgZXhpc3QgaW4gJHtNQUNISU5FMX0iID4mMgorICAgICAgWyAtZSAke09VVFBVVH0vJHtNQUNISU5FMX0vKi8kaS8qJHtUQVNLfSogXSB8fCBjb250aW51ZQorICAgICAgWyAtZSAke09VVFBVVH0vJHtNQUNISU5FMn0vKi8kaS8qJHtUQVNLfSogXSB8fCBlY2hvICJJTkZPOiAke2l9IHRhc2sgJHtUQVNLfSBkb2Vzbid0IGV4aXN0IGluICR7TUFDSElORTJ9IiA+JjIKKyAgICAgIFsgLWUgJHtPVVRQVVR9LyR7TUFDSElORTJ9LyovJGkvKiR7VEFTS30qIF0gfHwgY29udGludWUKKyAgICAgIHByaW50ZiAiRVJST1I6ICRpIGRpZmZlcmVudCBzaWduYXR1cmUgZm9yIHRhc2sgJHtUQVNLfSBiZXR3ZWVuICR7TUFDSElORTF9IGFuZCAke01BQ0hJTkUyfVxuIjsKKyAgICAgIGJpdGJha2UtZGlmZnNpZ3MgJHtPVVRQVVR9LyR7TUFDSElORTF9LyovJGkvKiR7VEFTS30qICR7T1VUUFVUfS8ke01BQ0hJTkUyfS8qLyRpLyoke1RBU0t9KjsKKyAgICAgIGVjaG8gIiRpIiA+PiAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICBlY2hvCisgICAgZG9uZSB8IHRlZSAtYSAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9LmxvZworICAgICMgZG9uJ3QgY3JlYXRlIGVtcHR5IGZpbGVzCisgICAgRVJST1JTPWBncmVwICJeRVJST1IuKiIgJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfS5sb2cgfCB3YyAtbGAKKyAgICBpZiBbICIke0VSUk9SU30iICE9ICIwIiBdIDsgdGhlbgorICAgICAgZWNobyAiRVJST1I6ICR7RVJST1JTfSBlcnJvcnMgZm91bmQgaW4gJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfS5sb2ciCisgICAgICBSRVNVTFQrPSR7RVJST1JTfQorICAgIGZpCisgIGRvbmUKK30KKworZnVuY3Rpb24gY29tcGFyZU1hY2hpbmVzKCkgeworICBbICIkIyIgLWdlIDIgXSAmJiBjb21wYXJlU2lnbmF0dXJlcyAkMSAkMgorICBbICIkIyIgLWdlIDMgXSAmJiBjb21wYXJlU2lnbmF0dXJlcyAkMSAkMyAiXChePCBhbGxcKVx8XChePCB4ODZfNjQtbGludXhcKVx8XChePCBpNTg2LWxpbnV4XCkiCit9CisKK2lmIFsgIiR7YW5hbHl6ZX0iID0gIlkiIF0gOyB0aGVuCisgIGNvbXBhcmVNYWNoaW5lcyAke21hY2hpbmVzfQorZmkKKworaWYgWyAiJHtSRVNVTFR9IiAhPSAiMCIgLWEgLWYgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZyBdIDsgdGhlbgorICBjYXQgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHNvcnQgLXUgPiR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cudSAmJiBtdiAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nLnUgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZworICBlY2hvICJFUlJPUjogJHtSRVNVTFR9IGlzc3VlcyB3ZXJlIGZvdW5kIGluIHRoZXNlIHJlY2lwZXM6IGBjYXQgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHhhcmdzYCIKK2ZpCisKK2VjaG8gIklORk86IE91dHB1dCB3cml0dGVuIGluOiAke09VVFBVVH0iCitleGl0ICR7UkVTVUxUfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1zeXNyb290LWNydWZ0LnNoIGIveW9jdG8tcG9reS9zY3JpcHRzL3NzdGF0ZS1zeXNyb290LWNydWZ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2MjQ4NWUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2gKQEAgLTAsMCArMSwxNTIgQEAKKyMhL2Jpbi9zaAorCisjIFVzZWQgdG8gZmluZCBmaWxlcyBpbnN0YWxsZWQgaW4gc3lzcm9vdCB3aGljaCBhcmUgbm90IHRyYWNrZWQgYnkgc3N0YXRlIG1hbmlmZXN0CisKKyMgR2xvYmFsIHZhcnMKK3RtcGRpcj0KKwordXNhZ2UgKCkgeworICBjYXQgPDwgRU9GCitXZWxjb21lIHRvIHN5c3Jvb3QgY3J1ZnQgZmluZGluZyB1dGlsaXR5LgorJDAgPE9QVElPTj4KKworT3B0aW9uczoKKyAgLWgsIC0taGVscAorICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKworICAtLXRtcGRpcj08dG1wZGlyPgorICAgICAgICBTcGVjaWZ5IHRtcGRpciwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUiBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorCVNvbWV0aGluZyBsaWtlIC9PRS9vZS1jb3JlL3RtcC1lZ2xpYmMgKG5vIC8gYXQgdGhlIGVuZCkuCisKKyAgLS13aGl0ZWxpc3Q9PHdoaXRlbGlzdC1maWxlPgorICAgICAgICBUZXh0IGZpbGUsIGVhY2ggbGluZSBpcyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHBhdGhzIHdlIHdhbnQgdG8gaWdub3JlIGluIHJlc3VsdGluZyBkaWZmLgorICAgICAgICBZb3UgY2FuIHVzZSBkaWZmIGZpbGUgZnJvbSB0aGUgc2NyaXB0IG91dHB1dCwgaWYgaXQgY29udGFpbnMgb25seSBleHBlY3RlZCBleGNlcHRpb25zLgorICAgICAgICAnIycgaXMgdXNlZCBhcyByZWdleHAgZGVsaW1pdGVyLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBwcmVmaXggZm9yd2FyZCBzbGFzaGVzIGluIHBhdGhzLgorICAgICAgICBeIGFuZCAkIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQsIHNvIHByb3ZpZGUgb25seSB0aGUgbWlkZGxlIHBhcnQuCisgICAgICAgIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIGFyZSBpZ25vcmVkIGFzIGNvbW1lbnRzLgorICAgICAgICBBbGwgcGF0aHMgYXJlIHJlbGF0aXZlIHRvICJzeXNyb290cyIgZGlyZWN0b3J5LgorICAgICAgICBEaXJlY3RvcmllcyBkb24ndCBlbmQgd2l0aCBmb3J3YXJkIHNsYXNoLgorRU9GCit9CisKKyMgUHJpbnQgZXJyb3IgaW5mb3JtYXRpb24gYW5kIGV4aXQuCitlY2hvX2Vycm9yICgpIHsKKyAgZWNobyAiRVJST1I6ICQxIiA+JjIKKyAgZXhpdCAxCit9CisKK3doaWxlIFsgLW4gIiQxIiBdOyBkbworICBjYXNlICQxIGluCisgICAgLS10bXBkaXI9KikKKyAgICAgIHRtcGRpcj1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS10bXBkaXI9IyMnIHwgeGFyZ3MgcmVhZGxpbmsgLWVgCisgICAgICBbIC1kICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYXJndW1lbnQgdG8gLS10bXBkaXIiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0td2hpdGVsaXN0PSopCisgICAgICBmd2hpdGVsaXN0PWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXdoaXRlbGlzdD0jIycgfCB4YXJncyByZWFkbGluayAtZWAKKyAgICAgIFsgLWYgIiRmd2hpdGVsaXN0IiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYXJndW1lbnQgdG8gLS13aGl0ZWxpc3QiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0taGVscHwtaCkKKyAgICAgIHVzYWdlCisgICAgICBleGl0IDAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudHMgJCoiCisgICAgICBlY2hvX2Vycm9yICJUcnkgJyQwIC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworIyBzc3RhdGUgY2FjaGUgZGlyZWN0b3J5LCB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSCisjIGlmIGl0IHdhcyBub3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UsIGVycm9yLgorWyAtbiAiJHRtcGRpciIgXSB8fCB0bXBkaXI9JFRNUERJUgorWyAtbiAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJObyB0bXBkaXIgZm91bmQhIgorWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHRtcGRpciBcIiR0bXBkaXJcIiIKKworT1VUUFVUPSR7dG1wZGlyfS9zeXNyb290LmNydWZ0LmBkYXRlICIrJXMiYAorCisjIHRvcCBsZXZlbCBkaXJlY3RvcmllcworV0hJVEVMSVNUPSJbXi9dKiIKKworIyBnZW5lcmF0ZWQgYnkgYmFzZS1wYXNzd2QgcmVjaXBlCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qL2V0Yy9ncm91cC1cPyBcCisgIC4qL2V0Yy9wYXNzd2QtXD8gXAorIgorIyBnZW5lcmF0ZWQgYnkgcHNldWRvLW5hdGl2ZQorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICAuKi92YXIvcHNldWRvIFwKKyAgLiovdmFyL3BzZXVkby9bXi9dKiBcCisiCisKKyMgZ2VuZXJhdGVkIGJ5IHBhY2thZ2UuYmJjbGFzczpTSExJQlNESVJTID0gIiR7UEtHREFUQV9ESVJ9LyR7TUxQUkVGSVh9c2hsaWJzIgorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICAuKi9zaGxpYnMgXAorICAuKi9wa2dkYXRhIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgcHl0aG9uCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qXC5weWMgXAorICAuKlwucHlvIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgc2dtbC1jb21tb24tbmF0aXZlCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qL2V0Yy9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorIgorCisjIGdlbmVyYXRlZCBieSB0b29sY2hhaW4KK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgW14vXSotdGNib290c3RyYXAvbGliIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgdXNlcmFkZC5iYmNsYXNzCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIFteL10qL2hvbWUgXAorICBbXi9dKi9ob21lL3h1c2VyIFwKKyIKKworU1lTUk9PVFM9ImByZWFkbGluayAtZiAke3RtcGRpcn1gL3N5c3Jvb3RzLyIKKworbWtkaXIgJHtPVVRQVVR9CitmaW5kICR7dG1wZGlyfS9zc3RhdGUtY29udHJvbCAtbmFtZSBcKi5wb3B1bGF0ZS1zeXNyb290XCogLW8gLW5hbWUgXCoucG9wdWxhdGVfc3lzcm9vdFwqIC1vIC1uYW1lIFwqLnBhY2thZ2VcKiB8IHhhcmdzIGNhdCB8IGdyZXAgc3lzcm9vdHMgfCBcCisgIHNlZCAncyMvJCMjZzsgcyMvLy8qIy8jZycgfCBcCisgICMgd29yayBhcm91bmQgZm9yIHBhdGhzIGVuZGluZyB3aXRoIC8gZm9yIGRpcmVjdG9yaWVzIGFuZCBtdWx0aXBsaWVkIC8vIChlLmcuIHBhdGhzIHRvIG5hdGl2ZSBzeXNyb290KQorICBzb3J0IHwgc2VkICJzI14ke1NZU1JPT1RTfSMjZyIgPiAke09VVFBVVH0vbWFzdGVyLmxpc3QuYWxsLnR4dAorc29ydCAtdSAke09VVFBVVH0vbWFzdGVyLmxpc3QuYWxsLnR4dCA+ICR7T1VUUFVUfS9tYXN0ZXIubGlzdC50eHQgIyAtdSBiZWNhdXNlIHNvbWUgZGlyZWN0b3JpZXMgYXJlIGxpc3RlZCBmb3IgbW9yZSByZWNpcGVzCitmaW5kICR7dG1wZGlyfS9zeXNyb290cy8gfCBcCisgIHNvcnQgfCBzZWQgInMjXiR7U1lTUk9PVFN9IyNnIiA+ICR7T1VUUFVUfS9zeXNyb290Lmxpc3QudHh0CisKK2RpZmYgJHtPVVRQVVR9L21hc3Rlci5saXN0LmFsbC50eHQgJHtPVVRQVVR9L21hc3Rlci5saXN0LnR4dCA+ICR7T1VUUFVUfS9kdXBsaWNhdGVzLnR4dAorZGlmZiAke09VVFBVVH0vbWFzdGVyLmxpc3QudHh0ICR7T1VUUFVUfS9zeXNyb290Lmxpc3QudHh0ID4gJHtPVVRQVVR9L2RpZmYuYWxsLnR4dAorCitncmVwICJePiAuIiAke09VVFBVVH0vZGlmZi5hbGwudHh0IHwgc2VkICdzL14+IC8vZycgPiAke09VVFBVVH0vZGlmZi50eHQKK2ZvciBpdGVtIGluICR7V0hJVEVMSVNUfTsgZG8KKyAgc2VkIC1pICJcXCNeJHtpdGVtfVwkI2QiICR7T1VUUFVUfS9kaWZmLnR4dDsKKyAgZWNobyAiJHtpdGVtfSIgPj4gJHtPVVRQVVR9L3VzZWQud2hpdGVsaXN0LnR4dAorZG9uZQorCitpZiBbIC1zICIkZndoaXRlbGlzdCIgXSA7IHRoZW4KKyAgY2F0ICRmd2hpdGVsaXN0ID4+ICR7T1VUUFVUfS91c2VkLndoaXRlbGlzdC50eHQKKyAgY2F0ICRmd2hpdGVsaXN0IHwgZ3JlcCAtdiAnXiMnIHwgd2hpbGUgcmVhZCBpdGVtOyBkbworICAgIHNlZCAtaSAiXFwjXiR7aXRlbX1cJCNkIiAke09VVFBVVH0vZGlmZi50eHQ7CisgIGRvbmUKK2ZpCisjIHRvbyBtYW55IGZhbHNlIHBvc2l0aXZlcyBmb3IgZGlyZWN0b3JpZXMKKyMgZWNobyAiRm9sbG93aW5nIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW4gc3lzcm9vdCBhdCBsZWFzdCB0d2ljZSIKKyMgY2F0ICR7T1VUUFVUfS9kdXBsaWNhdGVzCisKK1JFU1VMVD1gY2F0ICR7T1VUUFVUfS9kaWZmLnR4dCB8IHdjIC1sYAorCitpZiBbICIke1JFU1VMVH0iICE9ICIwIiBdIDsgdGhlbgorICBlY2hvICJFUlJPUjogJHtSRVNVTFR9IGlzc3VlcyB3ZXJlIGZvdW5kLiIKKyAgZWNobyAiRVJST1I6IEZvbGxvd2luZyBmaWxlcyBhcmUgaW5zdGFsbGVkIGluIHN5c3Jvb3QsIGJ1dCBub3QgdHJhY2tlZCBieSBzc3RhdGU6IgorICBjYXQgJHtPVVRQVVR9L2RpZmYudHh0CitlbHNlCisgIGVjaG8gIklORk86IEFsbCBmaWxlcyBhcmUgdHJhY2tlZCBieSBzc3RhdGUgb3Igd2VyZSBleHBsaWNpdGx5IGlnbm9yZWQgYnkgdGhpcyBzY3JpcHQiCitmaQorCitlY2hvICJJTkZPOiBPdXRwdXQgd3JpdHRlbiBpbjogJHtPVVRQVVR9IgorZXhpdCAke1JFU1VMVH0KZGlmZiAtLWdpdCBhL3lvY3RvLXBva3kvc2NyaXB0cy9zd2FiYmVyLXN0cmFjZS1hdHRhY2ggYi95b2N0by1wb2t5L3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiMDM5MWEKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworCisjIERldGFjaCBmcm9tIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBhbmQgcGFyZW50IHByb2Nlc3MgYnkgZm9ya2luZyB0d2ljZSB0byBkYWVtb25pemUgb3Vyc2VsdmVzLAorIyB0aGVuIHJ1biB0aGUgY29tbWFuZCBwYXNzZWQgYXMgYXJndlsxXS4gU2VuZCBsb2cgZGF0YSB0byBhcmd2WzJdLgorCitwaWQgPSBvcy5mb3JrKCkKK2lmIChwaWQgPT0gMCk6CisgICAgb3Muc2V0c2lkKCkKKyAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICBpZiAocGlkICE9IDApOgorICAgICAgICBvcy5fZXhpdCgwKQorZWxzZToKKyAgICBzeXMuZXhpdCgpCisKKworc2kgPSBmaWxlKG9zLmRldm51bGwsICdyJykKK3NvID0gZmlsZShzeXMuYXJndlsyXSwgJ3cnKQorc2UgPSBzbworCisjIFJlcGxhY2UgdGhvc2UgZmRzIHdpdGggb3VyIG93bgorb3MuZHVwMihzaS5maWxlbm8oKSwgc3lzLnN0ZGluLmZpbGVubygpKQorb3MuZHVwMihzby5maWxlbm8oKSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKK29zLmR1cDIoc2UuZmlsZW5vKCksIHN5cy5zdGRlcnIuZmlsZW5vKCkpCisKK3JldCA9IHN1YnByb2Nlc3MuY2FsbChzeXMuYXJndlsxXSwgc2hlbGw9VHJ1ZSkKKworb3MuX2V4aXQocmV0KQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvc3lzcm9vdC1yZWxhdGl2ZWxpbmtzLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzI2MzY3Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCisjIFRha2UgYSBzeXNyb290IGRpcmVjdG9yeSBhbmQgdHVybiBhbGwgdGhlIGFib2x1dGUgc3ltbGlua3MgYW5kIHR1cm4gdGhlbSBpbnRvCisjIHJlbGF0aXZlIG9uZXMgc3VjaCB0aGF0IHRoZSBzeXNyb290IGlzIHVzYWJsZSB3aXRoaW4gYW5vdGhlciBzeXN0ZW0uCisKK2lmIGxlbihzeXMuYXJndikgIT0gMjoKKyAgICBwcmludCgiVXNhZ2UgaXMgIiArIHN5cy5hcmd2WzBdICsgIjxkaXJlY3Rvcnk+IikKKyAgICBzeXMuZXhpdCgxKQorCit0b3BkaXIgPSBzeXMuYXJndlsxXQordG9wZGlyID0gb3MucGF0aC5hYnNwYXRoKHRvcGRpcikKKworZGVmIGhhbmRsZWxpbmsoZmlsZXAsIHN1YmRpcik6CisgICAgbGluayA9IG9zLnJlYWRsaW5rKGZpbGVwKQorICAgIGlmIGxpbmtbMF0gIT0gIi8iOgorICAgICAgICByZXR1cm4KKyAgICBpZiBsaW5rLnN0YXJ0c3dpdGgodG9wZGlyKToKKyAgICAgICAgcmV0dXJuCisgICAgI3ByaW50KCJSZXBsYWNpbmcgJXMgd2l0aCAlcyBmb3IgJXMiICUgKGxpbmssIHRvcGRpcitsaW5rLCBmaWxlcCkpCisgICAgcHJpbnQoIlJlcGxhY2luZyAlcyB3aXRoICVzIGZvciAlcyIgJSAobGluaywgb3MucGF0aC5yZWxwYXRoKHRvcGRpcitsaW5rLCBzdWJkaXIpLCBmaWxlcCkpCisgICAgb3MudW5saW5rKGZpbGVwKQorICAgIG9zLnN5bWxpbmsob3MucGF0aC5yZWxwYXRoKHRvcGRpcitsaW5rLCBzdWJkaXIpLCBmaWxlcCkKKworZm9yIHN1YmRpciwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3BkaXIpOgorICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICBmaWxlcCA9IG9zLnBhdGguam9pbihzdWJkaXIsIGYpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGVwKToKKyAgICAgICAgICAgICNwcmludCgiQ29uc2lkZXJpbmcgJXMiICUgZmlsZXApCisgICAgICAgICAgICBoYW5kbGVsaW5rKGZpbGVwLCBzdWJkaXIpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2ggYi95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1kZXBlbmRlbmNpZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDE3MDk0NwotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaApAQCAtMCwwICsxLDI4NiBAQAorIyEvYmluL2Jhc2gKKworIyBBdXRob3I6IE1hcnRpbiBKYW5zYSA8bWFydGluLmphbnNhQGdtYWlsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworIyBVc2VkIHRvIGRldGVjdCBtaXNzaW5nIGRlcGVuZGVuY2llcyBvciBhdXRvbWFnaWNhbGx5CisjIGVuYWJsZWQgZGVwZW5kZW5jaWVzIHdoaWNoIGFyZW4ndCBleHBsaWNpdGx5IGVuYWJsZWQKKyMgb3IgZGlzYWJsZWQuIFVzaW5nIGJhc2ggdG8gaGF2ZSBQSVBFU1RBVFVTIHZhcmlhYmxlLgorCisjIEl0IGRvZXMgMyBidWlsZHMgb2YgPHRhcmdldD4KKyMgMXN0IHRvIHBvcHVsYXRlIHNzdGF0ZS1jYWNoZSBkaXJlY3RvcnkgYW5kIHN5c3Jvb3QKKyMgMm5kIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBldmVyeSBwb3NzaWJsZQorIyAgICAgZGVwZW5kZW5jeSBmb3VuZCBpbiBzeXNyb290ICh3aGljaCBzdGF5cyBwb3B1bGF0ZWQKKyMgICAgIGZyb20gMXN0IGJ1aWxkCisjIDNyZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIG9ubHkgd2l0aCBkZXBlbmRlbmNpZXMgZGVmaW5lZAorIyAgICAgaW4gREVQRU5EUworIyA0dGggKG9wdGlvbmFsKSByZXBlYXQgYnVpbGQgbGlrZSAzcmQgdG8gbWFrZSBzdXJlIHRoYXQKKyMgICAgIG1pbmltYWwgdmVyc2lvbnMgb2YgZGVwZW5kZW5jaWVzIGRlZmluZWQgaW4gREVQRU5EUworIyAgICAgaXMgYWxzbyBlbm91Z2gKKworIyBHbG9iYWwgdmFycwordG1wZGlyPQordGFyZ2V0cz0KK3JlY2lwZXM9CitidWlsZGhpc3Rvcnk9CitidWlsZHR5cGU9CitkZWZhdWx0X3RhcmdldHM9IndvcmxkIgorZGVmYXVsdF9idWlsZGhpc3Rvcnk9ImJ1aWxkaGlzdG9yeSIKK2RlZmF1bHRfYnVpbGR0eXBlPSIxIDIgMyBjIgorCit1c2FnZSAoKSB7CisgIGNhdCA8PCBFT0YKK1dlbGNvbWUgdG8gdXRpbGl0eSB0byBkZXRlY3QgbWlzc2luZyBvciBhdXRvZW5hYmxlZCBkZXBlbmRlbmNpZXMuCitXQVJOSU5HOiB0aGlzIHV0aWxpdHkgd2lsbCBjb21wbGV0ZWx5IHJlbW92ZSB5b3VyIHRtcGRpciAobWFrZSBzdXJlCisgICAgICAgICB5b3UgZG9uJ3QgaGF2ZSBpbXBvcnRhbnQgYnVpbGRoaXN0b3J5IG9yIHBlcnNpc3RlbnQgZGlyIHRoZXJlKS4KKyQwIDxPUFRJT04+CisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAKKyAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisKKyAgLS10bXBkaXI9PHRtcGRpcj4KKyAgICAgICAgU3BlY2lmeSB0bXBkaXIsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgU29tZXRoaW5nIGxpa2UgL09FL29lLWNvcmUvdG1wLWVnbGliYyAobm8gLyBhdCB0aGUgZW5kKS4KKworICAtLXRhcmdldHM9PHRhcmdldHM+CisgICAgICAgIExpc3Qgb2YgdGFyZ2V0cyBzZXBhcmF0ZWQgYnkgc3BhY2UsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUQVJHRVRTIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIEl0IHdpbGwgcnVuICJiaXRiYWtlIDx0YXJnZXRzPiIgdG8gcG9wdWxhdGUgc3lzcm9vdHMuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgIndvcmxkIi4KKworICAtLXJlY2lwZXM9PHJlY2lwZXM+CisgICAgICAgIEZpbGUgd2l0aCBsaXN0IG9mIHJlY2lwZXMgd2Ugd2FudCB0byByZWJ1aWxkIHdpdGggbWluaW1hbCBhbmQgbWF4aW1hbCBzeXNyb290LgorICAgICAgICBXaWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUkVDSVBFUyBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBEZWZhdWx0IHZhbHVlIHdpbGwgdXNlIGFsbCBwYWNrYWdlcyBldmVyIHJlY29yZGVkIGluIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcnkuCisKKyAgLS1idWlsZGhpc3Rvcnk9PGJ1aWxkaGlzdG9yeT4KKyAgICAgICAgUGF0aCB0byBidWlsZGhpc3RvcnkgZGlyZWN0b3J5LCBpdCBuZWVkcyB0byBiZSBlbmFibGVkIGluIHlvdXIgY29uZmlnLAorICAgICAgICBiZWNhdXNlIGl0J3MgdXNlZCB0byBkZXRlY3QgZGlmZmVyZW50IGRlcGVuZGVuY2llcyBhbmQgdG8gY3JlYXRlIGxpc3QKKyAgICAgICAgb2YgcmVjaXBlcyB0byByZWJ1aWxkIHdoZW4gaXQncyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBXaWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQlVJTERISVNUT1JZIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgImJ1aWxkaGlzdG9yeSIKKworICAtLWJ1aWxkdHlwZT08YnVpbGR0eXBlPgorICAgICAgICBUaGVyZSBhcmUgNCB0eXBlcyBvZiBidWlsZDoKKyAgICAgICAgICAxOiBidWlsZCB0byBwb3B1bGF0ZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IGFuZCBzeXNyb290CisgICAgICAgICAgMjogYnVpbGQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSB3aXRoIGV2ZXJ5IHBvc3NpYmxlIGRlcAorICAgICAgICAgIDM6IGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcworICAgICAgICAgIDQ6IGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgYWdhaW4gd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcworICAgICAgICAgIGM6IGNvbXBhcmUgYnVpbGRoaXN0b3J5IGRpcmVjdG9yaWVzIGZyb20gYnVpbGQgMiBhbmQgMworICAgICAgICBXaWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQlVJTERUWVBFIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgIjEgMiAzIGMiLCBvcmRlciBpcyBpbXBvcnRhbnQsIHR5cGUgNCBpcyBvcHRpb25hbC4KK0VPRgorfQorCisjIFByaW50IGVycm9yIGluZm9ybWF0aW9uIGFuZCBleGl0LgorZWNob19lcnJvciAoKSB7CisgIGVjaG8gIkVSUk9SOiAkMSIgPiYyCisgIGV4aXQgMQorfQorCit3aGlsZSBbIC1uICIkMSIgXTsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdG1wZGlyPSopCisgICAgICB0bXBkaXI9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdG1wZGlyPSMjJyB8IHhhcmdzIHJlYWRsaW5rIC1lYAorICAgICAgWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGFyZ3VtZW50IHRvIC0tdG1wZGlyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXRhcmdldHM9KikKKyAgICAgIHRhcmdldHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdGFyZ2V0cz0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tcmVjaXBlcz0qKQorICAgICAgcmVjaXBlcz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1yZWNpcGVzPSIqXChbXiJdKlwpIiojXDEjJ2AKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1idWlsZGhpc3Rvcnk9KikKKyAgICAgIGJ1aWxkaGlzdG9yeT1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1idWlsZGhpc3Rvcnk9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWJ1aWxkdHlwZT0qKQorICAgICAgYnVpbGR0eXBlPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLWJ1aWxkdHlwZT0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0taGVscHwtaCkKKyAgICAgIHVzYWdlCisgICAgICBleGl0IDAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudHMgJCoiCisgICAgICBlY2hvX2Vycm9yICJUcnkgJyQwIC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworIyB0bXBkaXIgZGlyZWN0b3J5LCB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSCisjIGlmIGl0IHdhcyBub3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UsIGVycm9yLgorWyAtbiAiJHRtcGRpciIgXSB8fCB0bXBkaXI9JFRNUERJUgorWyAtbiAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJObyB0bXBkaXIgZm91bmQhIgorWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHRtcGRpciBcIiR0bXBkaXJcIiIKK1sgLW4gIiR0YXJnZXRzIiBdIHx8IHRhcmdldHM9JFRBUkdFVFMKK1sgLW4gIiR0YXJnZXRzIiBdIHx8IHRhcmdldHM9JGRlZmF1bHRfdGFyZ2V0cworWyAtbiAiJHJlY2lwZXMiIF0gfHwgcmVjaXBlcz0kUkVDSVBFUworWyAtbiAiJHJlY2lwZXMiIC1hICEgLWYgIiRyZWNpcGVzIiBdICYmIGVjaG9fZXJyb3IgIkludmFsaWQgZmlsZSB3aXRoIGxpc3Qgb2YgcmVjaXBlcyB0byByZWJ1aWxkIgorWyAtbiAiJHJlY2lwZXMiIF0gfHwgZWNobyAiQWxsIHBhY2thZ2VzIGV2ZXIgcmVjb3JkZWQgaW4gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSB3aWxsIGJlIHJlYnVpbHQiCitbIC1uICIkYnVpbGRoaXN0b3J5IiBdIHx8IGJ1aWxkaGlzdG9yeT0kQlVJTERISVNUT1JZCitbIC1uICIkYnVpbGRoaXN0b3J5IiBdIHx8IGJ1aWxkaGlzdG9yeT0kZGVmYXVsdF9idWlsZGhpc3RvcnkKK1sgLWQgIiRidWlsZGhpc3RvcnkiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBidWlsZGhpc3RvcnkgZGlyZWN0b3J5IFwiJGJ1aWxkaGlzdG9yeVwiIgorWyAtbiAiJGJ1aWxkdHlwZSIgXSB8fCBidWlsZHR5cGU9JEJVSUxEVFlQRQorWyAtbiAiJGJ1aWxkdHlwZSIgXSB8fCBidWlsZHR5cGU9JGRlZmF1bHRfYnVpbGR0eXBlCitlY2hvICIkYnVpbGR0eXBlIiB8IGdyZXAgLXYgJ15bMTIzNGMgXSokJyAmJiBlY2hvX2Vycm9yICJJbnZhbGlkIGJ1aWxkdHlwZSBcIiRidWlsZHR5cGVcIiwgb25seSBzb21lIGNvbWJpbmF0aW9uIG9mIDEsIDIsIDMsIDQsIGMgc2VwYXJhdGVkIGJ5IHNwYWNlIGlzIGFsbG93ZWQiCisKK09VVFBVVF9CQVNFPXRlc3QtZGVwZW5kZW5jaWVzL2BkYXRlICIrJXMiYAorZGVjbGFyZSAtaSBSRVNVTFQ9MAorCitidWlsZF9hbGwoKSB7CisgIGVjaG8gIj09PT09IDFzdCBidWlsZCB0byBwb3B1bGF0ZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IGFuZCBzeXNyb290ID09PT09IgorICBPVVRQVVQxPSR7T1VUUFVUX0JBU0V9LyR7VFlQRX1fYWxsCisgIG1rZGlyIC1wICR7T1VUUFVUMX0KKyAgZWNobyAiTG9ncyB3aWxsIGJlIHN0b3JlZCBpbiAke09VVFBVVDF9IGRpcmVjdG9yeSIKKyAgYml0YmFrZSAtayAkdGFyZ2V0cyAyPiYxIHwgdGVlIC1hICR7T1VUUFVUMX0vY29tcGxldGUubG9nCisgIFJFU1VMVCs9JHtQSVBFU1RBVFVTWzBdfQorICBncmVwICJFUlJPUjogVGFzay4qZmFpbGVkIiAke09VVFBVVDF9L2NvbXBsZXRlLmxvZyA+ICR7T1VUUFVUMX0vZmFpbGVkLXRhc2tzLmxvZworICBjYXQgJHtPVVRQVVQxfS9mYWlsZWQtdGFza3MubG9nIHwgc2VkICdzQC4qL0BAZzsgc0BfLipAQGc7IHNAXC5iYiwgLipAQGcnIHwgc29ydCAtdSA+ICR7T1VUUFVUMX0vZmFpbGVkLXJlY2lwZXMubG9nCit9CisKK2J1aWxkX2V2ZXJ5X3JlY2lwZSgpIHsKKyAgaWYgWyAiJHtUWVBFfSIgPSAiMiIgXSA7IHRoZW4KKyAgICBlY2hvICI9PT09PSAybmQgYnVpbGQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSB3aXRoIGV2ZXJ5IHBvc3NpYmxlIGRlcCA9PT09PSIKKyAgICBPVVRQVVRfTUFYPSR7T1VUUFVUX0JBU0V9LyR7VFlQRX1fbWF4CisgICAgT1VUUFVUQj0ke09VVFBVVF9NQVh9CisgIGVsc2UKKyAgICBlY2hvICI9PT09PSAzcmQgb3IgNHRoIGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcyA9PT09PSIKKyAgICBPVVRQVVRfTUlOPSR7T1VUUFVUX0JBU0V9LyR7VFlQRX1fbWluCisgICAgT1VUUFVUQj0ke09VVFBVVF9NSU59CisgIGZpCisKKyAgbWtkaXIgLXAgJHtPVVRQVVRCfSAke09VVFBVVEJ9L2ZhaWxlZCAke09VVFBVVEJ9L29rCisgIGVjaG8gIkxvZ3Mgd2lsbCBiZSBzdG9yZWQgaW4gJHtPVVRQVVRCfSBkaXJlY3RvcnkiCisgIGlmIFsgLXogIiRyZWNpcGVzIiBdOyB0aGVuCisgICAgbHMgLWQgJGJ1aWxkaGlzdG9yeS9wYWNrYWdlcy8qLyogfCB4YXJncyAtbiAxIGJhc2VuYW1lIHwgc29ydCAtdSA+ICR7T1VUUFVUQn0vcmVjaXBlLmxpc3QKKyAgICByZWNpcGVzPSR7T1VUUFVUQn0vcmVjaXBlLmxpc3QKKyAgZmkKKyAgaWYgWyAiJHtUWVBFfSIgIT0gIjIiIF0gOyB0aGVuCisgICAgZWNobyAiISEhUmVtb3ZpbmcgdG1wZGlyIFwiJHRtcGRpclwiISEhIgorICAgIHJtIC1yZiAkdG1wZGlyL2RlcGxveSAkdG1wZGlyL3BrZ2RhdGEgJHRtcGRpci9zc3RhdGUtY29udHJvbCAkdG1wZGlyL3N0YW1wcyAkdG1wZGlyL3N5c3Jvb3RzICR0bXBkaXIvd29yayAkdG1wZGlyL3dvcmstc2hhcmVkIDI+L2Rldi9udWxsCisgIGZpCisgIGk9MQorICBjb3VudD1gY2F0ICRyZWNpcGVzICR7T1VUUFVUMX0vZmFpbGVkLXJlY2lwZXMubG9nIHwgc29ydCAtdSB8IHdjIC1sYAorICBmb3IgcmVjaXBlIGluIGBjYXQgJHJlY2lwZXMgJHtPVVRQVVQxfS9mYWlsZWQtcmVjaXBlcy5sb2cgfCBzb3J0IC11YDsgZG8KKyAgICBlY2hvICJCdWlsZGluZyByZWNpcGU6ICR7cmVjaXBlfSAoJGkvJGNvdW50KSIKKyAgICBkZWNsYXJlIC1pIFJFQ0lQRV9SRVNVTFQ9MAorICAgIGJpdGJha2UgLWMgY2xlYW5zc3RhdGUgJHtyZWNpcGV9ID4gJHtPVVRQVVRCfS8ke3JlY2lwZX0ubG9nIDI+JjE7CisgICAgUkVDSVBFX1JFU1VMVCs9JD8KKyAgICBiaXRiYWtlICR7cmVjaXBlfSA+PiAke09VVFBVVEJ9LyR7cmVjaXBlfS5sb2cgMj4mMTsKKyAgICBSRUNJUEVfUkVTVUxUKz0kPworICAgIGlmIFsgIiR7UkVDSVBFX1JFU1VMVH0iICE9ICIwIiBdIDsgdGhlbgorICAgICAgUkVTVUxUKz0ke1JFQ0lQRV9SRVNVTFR9CisgICAgICBtdiAke09VVFBVVEJ9LyR7cmVjaXBlfS5sb2cgJHtPVVRQVVRCfS9mYWlsZWQvCisgICAgICBncmVwICJFUlJPUjogVGFzay4qZmFpbGVkIiAgJHtPVVRQVVRCfS9mYWlsZWQvJHtyZWNpcGV9LmxvZyB8IHRlZSAtYSAke09VVFBVVEJ9L2ZhaWxlZC10YXNrcy5sb2cKKyAgICAgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICAke09VVFBVVEJ9L2ZhaWxlZC8ke3JlY2lwZX0ubG9nIHwgc2VkICdzQC4qL0BAZzsgc0BfLipAQGc7IHNAXC5iYiwgLipAQGcnID4+ICR7T1VUUFVUQn0vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICAjIGFuZCBhcHBlbmQgYWxzbyAke3JlY2lwZX0gaW4gY2FzZSB0aGUgZmFpbGVkIHRhc2sgd2FzIGZyb20gc29tZSBkZXBlbmRlbmN5CisgICAgICBlY2hvICR7cmVjaXBlfSA+PiAke09VVFBVVEJ9L2ZhaWxlZC1yZWNpcGVzLmxvZworICAgIGVsc2UKKyAgICAgIG12ICR7T1VUUFVUQn0vJHtyZWNpcGV9LmxvZyAke09VVFBVVEJ9L29rLworICAgIGZpCisgICAgaWYgWyAiJHtUWVBFfSIgIT0gIjIiIF0gOyB0aGVuCisgICAgICBybSAtcmYgJHRtcGRpci9kZXBsb3kgJHRtcGRpci9wa2dkYXRhICR0bXBkaXIvc3N0YXRlLWNvbnRyb2wgJHRtcGRpci9zdGFtcHMgJHRtcGRpci9zeXNyb290cyAkdG1wZGlyL3dvcmsgJHRtcGRpci93b3JrLXNoYXJlZCAyPi9kZXYvbnVsbAorICAgIGZpCisgICAgaT1gZXhwciAkaSArIDFgCisgIGRvbmUKKyAgZWNobyAiQ29weWluZyBidWlsZGhpc3RvcnkvcGFja2FnZXMgdG8gJHtPVVRQVVRCfSIKKyAgY3AgLXJhICRidWlsZGhpc3RvcnkvcGFja2FnZXMgJHtPVVRQVVRCfQorICAjIFRoaXMgd2lsbCBiZSB1c2VmdWxsIHRvIHNlZSB3aGljaCBsaWJyYXJ5IGlzIHB1bGxpbmcgbmV3IGRlcGVuZGVuY3kKKyAgZWNobyAiQ29weWluZyBkb19wYWNrYWdlIGxvZ3MgdG8gJHtPVVRQVVRCfS9kb19wYWNrYWdlLyIKKyAgbWtkaXIgJHtPVVRQVVRCfS9kb19wYWNrYWdlCisgIGZpbmQgJHRtcGRpci93b3JrLyAtbmFtZSBsb2cuZG9fcGFja2FnZSAyPi9kZXYvbnVsbHwgd2hpbGUgcmVhZCBmOyBkbworICAgICMgcG4gaXMgMyBsZXZlbHMgYmFjaywgYnV0IHdlIGRvbid0IGtub3cgaWYgdGhlcmUgaXMganVzdCBvbmUgbG9nIHBlciBwbiAob25seSBvbmUgYXJjaCBhbmQgdmVyc2lvbikKKyAgICAjIGRlc3Q9YGVjaG8gJGYgfCBzZWQgJ3MjXi4qL1woW14vXSpcKS9cKFteL10qXCkvXChbXi9dKlwpL2xvZy5kb19wYWNrYWdlI1wxI2cnYAorICAgIGRlc3Q9YGVjaG8gJGYgfCBzZWQgInMjJHRtcGRpci93b3JrLyMjZzsgcyMvI18jZyJgCisgICAgY3AgJGYgJHtPVVRQVVRCfS9kb19wYWNrYWdlLyRkZXN0CisgIGRvbmUKK30KKworY29tcGFyZV9kZXBzKCkgeworICAjIHlvdSBjYW4gcnVuIGp1c3QgY29tcGFyZSB0YXNrIHdpdGggY29tbWFuZCBsaWtlIHRoaXMKKyAgIyBPVVRQVVRfQkFTRT10ZXN0LWRlcGVuZGVuY2llcy8xMzczMTQwMTcyIFwKKyAgIyBPVVRQVVRfTUFYPSR7T1VUUFVUX0JBU0V9LzJfbWF4IFwKKyAgIyBPVVRQVVRfTUlOPSR7T1VUUFVUX0JBU0V9LzNfbWluIFwKKyAgIyBvcGVuZW1iZWRkZWQtY29yZS9zY3JpcHRzL3Rlc3QtZGVwZW5kZW5jaWVzLnNoIC0tdG1wZGlyPXRtcC1lZ2xpYmMgLS10YXJnZXRzPWdsaWItMi4wIC0tcmVjaXBlcz1yZWNpcGVfbGlzdCAtLWJ1aWxkdHlwZT1jCisgIGVjaG8gIj09PT09IENvbXBhcmUgZGVwZW5kZW5jaWVzIHJlY29yZGVkIGluIFwiJHtPVVRQVVRfTUFYfVwiIGFuZCBcIiR7T1VUUFVUX01JTn1cIiA9PT09PSIKKyAgWyAtbiAiJHtPVVRQVVRDfSIgXSB8fCBPVVRQVVRDPSR7T1VUUFVUX0JBU0V9L2NvbXAKKyAgbWtkaXIgLXAgJHtPVVRQVVRDfQorICBPVVRQVVRfRklMRT0ke09VVFBVVEN9L2RlcGVuZGVuY3ktY2hhbmdlcworICBlY2hvICJEaWZmZXJlbmNlcyB3aWxsIGJlIHN0b3JlZCBpbiAke09VVFBVVF9GSUxFfSwgZG90IGlzIHNob3duIGZvciBldmVyeSAxMDAgb2YgY2hlY2tlZCBwYWNrYWdlcyIKKyAgZWNobyA+ICR7T1VUUFVUX0ZJTEV9CisKKyAgWyAtZCAke09VVFBVVF9NQVh9IF0gfHwgZWNob19lcnJvciAiRGlyZWN0b3J5IHdpdGggb3V0cHV0IGZyb20gYnVpbGQgMiBcIiR7T1VUUFVUX01BWH1cIiBkb2VzIG5vdCBleGlzdCIKKyAgWyAtZCAke09VVFBVVF9NSU59IF0gfHwgZWNob19lcnJvciAiRGlyZWN0b3J5IHdpdGggb3V0cHV0IGZyb20gYnVpbGQgMyBcIiR7T1VUUFVUX01JTn1cIiBkb2VzIG5vdCBleGlzdCIKKyAgWyAtZCAke09VVFBVVF9NQVh9L3BhY2thZ2VzLyBdIHx8IGVjaG9fZXJyb3IgIkRpcmVjdG9yeSB3aXRoIHBhY2thZ2VzIGZyb20gYnVpbGQgMiBcIiR7T1VUUFVUX01BWH0vcGFja2FnZXMvXCIgZG9lcyBub3QgZXhpc3QiCisgIFsgLWQgJHtPVVRQVVRfTUlOfS9wYWNrYWdlcy8gXSB8fCBlY2hvX2Vycm9yICJEaXJlY3Rvcnkgd2l0aCBwYWNrYWdlcyBmcm9tIGJ1aWxkIDMgXCIke09VVFBVVF9NSU59L3BhY2thZ2VzL1wiIGRvZXMgbm90IGV4aXN0IgorICBpPTAKKyAgZmluZCAke09VVFBVVF9NQVh9L3BhY2thZ2VzLyAtbmFtZSBsYXRlc3QgfCBzZWQgInMjJHtPVVRQVVRfTUFYfS8jI2ciIHwgd2hpbGUgcmVhZCBwa2c7IGRvCisgICAgbWF4X3BrZz0ke09VVFBVVF9NQVh9LyR7cGtnfQorICAgIG1pbl9wa2c9JHtPVVRQVVRfTUlOfS8ke3BrZ30KKyAgICAjIHBrZz1wYWNrYWdlcy9hcm12NXRlLW9lLWxpbnV4LWdudWVhYmkvbGlidW5naWYvbGlidW5naWYvbGF0ZXN0CisgICAgcmVjaXBlPWBlY2hvICIke3BrZ30iIHwgc2VkICdzI3BhY2thZ2VzL1teL10qL1woW14vXSpcKS9cKFteL10qXCkvbGF0ZXN0I1wxI2cnYAorICAgIHBhY2thZ2U9YGVjaG8gIiR7cGtnfSIgfCBzZWQgJ3MjcGFja2FnZXMvW14vXSovXChbXi9dKlwpL1woW14vXSpcKS9sYXRlc3QjXDIjZydgCisgICAgaWYgWyAhIC1mICIke21pbl9wa2d9IiBdIDsgdGhlbgorICAgICAgZWNobyAiRVJST1I6ICR7cmVjaXBlfTogJHtwYWNrYWdlfSBwYWNrYWdlIGlzbid0IGNyZWF0ZWQgd2hlbiBidWlsZGluZyB3aXRoIG1pbmltYWwgZGVwZW5kZW5jaWVzPyIgfCB0ZWUgLWEgJHtPVVRQVVRfRklMRX0KKyAgICAgIGVjaG8gJHtyZWNpcGV9ID4+ICR7T1VUUFVUQ30vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBzdHJpcCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIHBhcmVudGhlc2lzCisgICAgbWF4X2RlcHM9YGdyZXAgIl5SREVQRU5EUyA9ICIgJHttYXhfcGtnfSB8IHNlZCAncy9eUkRFUEVORFMgPSAvIC9nOyBzLyQvIC9nOyBzLyhbXihdKikvL2cnYAorICAgIG1pbl9kZXBzPWBncmVwICJeUkRFUEVORFMgPSAiICR7bWluX3BrZ30gfCBzZWQgJ3MvXlJERVBFTkRTID0gLyAvZzsgcy8kLyAvZzsgcy8oW14oXSopLy9nJ2AKKyAgICBpZiBbICIkaSIgPSAxMDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gLW4gIi4iICMgY2hlYXAgcHJvZ3Jlc3NiYXIKKyAgICAgIGk9MAorICAgIGZpCisgICAgaWYgWyAiJHttYXhfZGVwc30iID0gIiR7bWluX2RlcHN9IiBdIDsgdGhlbgorICAgICAgIyBpdCdzIGFubm95aW5nIGxvbmcsIGJ1dCBhdCBsZWFzdCBpdCdzIHNob3dpbmcgc29tZSBwcm9ncmVzcywgd2FybmluZ3MgYXJlIGdyZXBwZWQgYXQgdGhlIGVuZAorICAgICAgZWNobyAiTk9URTogJHtyZWNpcGV9OiAke3BhY2thZ2V9IHJkZXBlbmRzIHdlcmVuJ3QgY2hhbmdlZCIgPj4gJHtPVVRQVVRfRklMRX0KKyAgICBlbHNlCisgICAgICBtaXNzaW5nX2RlcHM9CisgICAgICBmb3IgZGVwIGluICR7bWF4X2RlcHN9OyBkbworICAgICAgICBpZiAhIGVjaG8gIiR7bWluX2RlcHN9IiB8IGdyZXAgLXEgIiAke2RlcH0gIiA7IHRoZW4KKyAgICAgICAgICBtaXNzaW5nX2RlcHM9IiR7bWlzc2luZ19kZXBzfSAke2RlcH0iCisgICAgICAgICAgZWNobyAjIHRvIGdldCByaWQgb2YgZG90cyBvbiBsYXN0IGxpbmUKKyAgICAgICAgICBlY2hvICJXQVJOOiAke3JlY2lwZX06ICR7cGFja2FnZX0gcmRlcGVuZHMgb24gJHtkZXB9LCBidXQgaXQgaXNuJ3QgYSBidWlsZCBkZXBlbmRlbmN5PyIgfCB0ZWUgLWEgJHtPVVRQVVRfRklMRX0KKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIFsgLW4gIiR7bWlzc2luZ19kZXBzfSIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAke3JlY2lwZX0gPj4gJHtPVVRQVVRDfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgICAgIGZpCisgICAgZmkKKyAgICBpPWBleHByICRpICsgMWAKKyAgZG9uZQorICBlY2hvICMgdG8gZ2V0IHJpZCBvZiBkb3RzIG9uIGxhc3QgbGluZQorICBlY2hvICJGb3VuZCBkaWZmZXJlbmNlczogIgorICBncmVwICJeV0FSTjogIiAke09VVFBVVF9GSUxFfSB8IHRlZSAke09VVFBVVF9GSUxFfS53YXJuLmxvZworICBlY2hvICJGb3VuZCBlcnJvcnM6ICIKKyAgZ3JlcCAiXkVSUk9SOiAiICR7T1VUUFVUX0ZJTEV9IHwgdGVlICR7T1VUUFVUX0ZJTEV9LmVycm9yLmxvZworICBSRVNVTFQrPWBjYXQgJHtPVVRQVVRfRklMRX0ud2Fybi5sb2cgfCB3YyAtbGAKKyAgUkVTVUxUKz1gY2F0ICR7T1VUUFVUX0ZJTEV9LmVycm9yLmxvZyB8IHdjIC1sYAorfQorCitmb3IgVFlQRSBpbiAkYnVpbGR0eXBlOyBkbworICBjYXNlICR7VFlQRX0gaW4KKyAgICAxKSBidWlsZF9hbGw7OworICAgIDIpIGJ1aWxkX2V2ZXJ5X3JlY2lwZTs7CisgICAgMykgYnVpbGRfZXZlcnlfcmVjaXBlOzsKKyAgICA0KSBidWlsZF9ldmVyeV9yZWNpcGU7OworICAgIGMpIGNvbXBhcmVfZGVwczs7CisgICAgKikgZWNob19lcnJvciAiSW52YWxpZCBidWlsZHR5cGUgXCIkVFlQRVwiIgorICBlc2FjCitkb25lCisKK2NhdCAke09VVFBVVF9CQVNFfS8qL2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHNvcnQgLXUgPj4gJHtPVVRQVVRfQkFTRX0vZmFpbGVkLXJlY2lwZXMubG9nCisKK2lmIFsgIiR7UkVTVUxUfSIgIT0gIjAiIF0gOyB0aGVuCisgIGVjaG8gIkVSUk9SOiAke1JFU1VMVH0gaXNzdWVzIHdlcmUgZm91bmQgaW4gdGhlc2UgcmVjaXBlczogYGNhdCAke09VVFBVVF9CQVNFfS9mYWlsZWQtcmVjaXBlcy5sb2cgfCB4YXJnc2AiCitmaQorCitlY2hvICJJTkZPOiBPdXRwdXQgd3JpdHRlbiBpbjogJHtPVVRQVVRfQkFTRX0iCitleGl0ICR7UkVTVUxUfQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVleGVjIGIveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVleGVjCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllYWE5NmUKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZWV4ZWMKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGVzdCBTY3JpcHQgZm9yIHRhc2sgcmUtZXhlY3V0aW9uCisjIAorIyBDb3B5cmlnaHQgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGFkZHJlc3MgaXNzdWVzIGZvciByZS1leGVjdXRpb24gb2YgCisjIHRhc2tzLiBUaGUgdGVzdCByZXN1bHRzIGFyZSBzYXZlZCBpbiAuL3JlZXhlY2xvZ3MuIEZvcmNlIGJ1aWxkCisjIGxvZ3MgYXJlIHNhdmVkIHdpdGggcHJlZml4ICJmb3JjZSIuIEJ1aWxkIGZhaWx1cmUgbG9ncyBhcmUgc2F2ZWQgd2l0aAorIyBwcmVmaXggImZhaWxlZCIuIExvZyBmaWxlcyB3aXRoIHByZWZpeCAiaW5pdGlhbCIgYXJlIHVzZWQgdG8gc2F2ZQorIyBpbml0aWFsIGJ1aWxkIGxvZ3MgZm9yIGVhY2ggcmVjaXBlLiBMb2cgZmlsZXMgd2l0aCBwcmVmaXggImNsZWFuIiBhcmUKKyMgdXNlZCB0byBzYXZlIGxvZ3Mgb2YgY2xlYW4gdGFzayBhZnRlciB0ZXN0aW5nIGZvciBhIHJlY2lwZSBpcyBmaW5pc2hlZC4KKyMKKwordGFyZ2V0cz1gYml0YmFrZSAtcyB8IGN1dCAtZCAiICIgLWYgMWAKKworTE9HUz0uL3JlZXhlY2xvZ3MKKworbWtkaXIgLXAgJExPR1MKKworIyBDbGVhciBzc3RhdGUgZmlsZXMgZm9yIHNwZWNpZmllZCByZWNpcGUKK2Z1bmN0aW9uIGNsZWFyc3N0YXRlIHsKKwl0YXJnZXQ9JDEKKworCXNzdGF0ZV9kaXI9YGJpdGJha2UgJHRhcmdldCAtZSB8IGdyZXAgIl5TU1RBVEVfRElSIiB8IGN1dCAtZCAiXCIiIC1mIDJgCisJc3N0YXRlX3BrZ3NwZWM9YGJpdGJha2UgJHRhcmdldCAtZSB8IGdyZXAgIl5TU1RBVEVfUEtHU1BFQyIgfCBjdXQgLWQgIlwiIiAtZiAyYAorCXNzdGFza3M9YGJpdGJha2UgJHRhcmdldCAtZSB8IGdyZXAgIl5TU1RBVEVUQVNLUyIgfCBjdXQgLWQgIlwiIiAtZiAyYAorCisJZm9yIHNzdGFzayBpbiAkc3N0YXNrcworCWRvCisJCXNzdGFzaz0ke3NzdGFzazozfQorCQljYXNlICRzc3Rhc2sgaW4KKwkJCXBvcHVsYXRlX3N5c3Jvb3QpIHNzdGFzaz0icG9wdWxhdGUtc3lzcm9vdCIKKwkJCTs7CisJCQlwb3B1bGF0ZV9saWMpIHNzdGFzaz0icG9wdWxhdGUtbGljIgorCQkJOzsKKwkJCXBhY2thZ2Vfd3JpdGVfaXBrKSBzc3Rhc2s9ImRlcGxveS1pcGsiCisJCQk7OworCQkJcGFja2FnZV93cml0ZV9kZWIpIHNzdGFzaz0iZGVwbG95LWRlYiIKKwkJCTs7CisJCQlwYWNrYWdlX3dyaXRlX3JwbSkgc3N0YXNrPSJkZXBsb3ktcnBtIgorCQkJOzsKKwkJCXBhY2thZ2UpIHNzdGFzaz0icGFja2FnZSIKKwkJCTs7CisJCQlkZXBsb3kpIHNzdGFzaz0iZGVwbG95IgorCQkJOzsKKwkJCSopCisJCQk7OworCQllc2FjCisKKwkJZWNobyAiUmVtb3ZpbmcgJHtzc3RhdGVfZGlyfS8ke3NzdGF0ZV9wa2dzcGVjfSpfJHtzc3Rhc2t9LnRneiogZm9yICR0YXJnZXQiCisJCXJtIC1yZiAke3NzdGF0ZV9kaXJ9LyR7c3N0YXRlX3BrZ3NwZWN9Kl8ke3NzdGFza30udGd6KgorCWRvbmUKK30KKworIyBGdW5jdGlvbiB0byByZS1leGVjdXRlIHNwZWNpZmllZCB0YXNrIG9mIHJlY2lwZQorZnVuY3Rpb24gdGVzdGl0IHsKKwl0YXJnZXQ9JDEKKwl0YXNrPSQyCisKKwl0YXNrPWBlY2hvICR0YXNrIHwgc2VkICdzL19zZXRzY2VuZS8vJ2AKKworCWlmIFsgLWYgJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzayBdOyB0aGVuCisJCXJldHVybgorCWZpCisKKwljYXNlICR0YXNrIGluCisJCWNsZWFufGJ1aWxkfGNsZWFuc3N0YXRlfGNsZWFuYWxsfHBhY2thZ2V8Y2xlYW5zc3RhdGUyfHBhY2thZ2Vfd3JpdGV8cGFja2FnZV93cml0ZV9pcGt8cGFja2FnZV93cml0ZV9ycG18cGFja2FnZV93cml0ZV9kZWJ8ZmV0Y2h8cG9wdWxhdGVfbGljKSByZXR1cm47OworCQlmZXRjaGFsbHxkZXZzaGVsbHxidWlsZGFsbHxsaXN0dGFza3N8Y2hlY2t1cml8Y2hlY2t1cmlhbGwpIHJldHVybjs7CisJZXNhYworCisJZWNobyAiQXR0ZW1wdGluZyB0YXJnZXQgJHRhcmdldCwgdGFzayAkdGFzayIKKwllY2hvICJJbml0aWFsIGJ1aWxkIgorCWJpdGJha2UgJHRhcmdldCAtYyBjbGVhbnNzdGF0ZSA+ICRMT0dTL2luaXRpYWwuJHRhcmdldC4kdGFzaworCWJpdGJha2UgJHRhcmdldCA+PiAkTE9HUy9pbml0aWFsLiR0YXJnZXQuJHRhc2sKKwljbGVhcnNzdGF0ZSAkdGFyZ2V0ID4+ICRMT0dTL2luaXRpYWwuJHRhcmdldC4kdGFzaworCWVjaG8gIlJlLWV4ZWN1dGlvbiBidWlsZCIKKwliaXRiYWtlICR0YXJnZXQgLWMgJHRhc2sgLWYgID4gJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzaworCWlmIFsgIiQ/IiAhPSAwIF07IHRoZW4KKwkJZWNobyAiRkFJTFVSRSBmb3IgJHRhcmdldCAkdGFzayIKKwkJY3AgJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzayAkTE9HUy9mYWlsZWQuJHRhcmdldC4kdGFzaworCQliaXRiYWtlICR0YXJnZXQgLWMgY2xlYW4gPiAkTE9HUy9jbGVhbi4kdGFyZ2V0LiR0YXNrCisJZWxzZQorCQliaXRiYWtlICR0YXJnZXQgPj4gJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzaworCQlpZiBbICIkPyIgIT0gMCBdOyB0aGVuCisJCQllY2hvICJGQUlMVVJFMiBmb3IgJHRhcmdldCAkdGFzayIKKwkJCWNwICRMT0dTL2ZvcmNlLiR0YXJnZXQuJHRhc2sgJExPR1MvZmFpbGVkLiR0YXJnZXQuJHRhc2sKKwkJCWJpdGJha2UgJHRhcmdldCAtYyBjbGVhbiA+ICRMT0dTL2NsZWFuLiR0YXJnZXQuJHRhc2sKKwkJZmkKKwlmaQorCWVjaG8gIkRvbmUiCit9CisKKyMgR28gdGhyb3VnaCB0aGUgcmVjaXBlIGxpc3QgYW5kIHRoZXNlIHJlY2lwZXMnIHRhc2sgbGlzdAorIyBUaGVuIHJlLWV4ZWN1dGUgdGhlbQorZm9yIHRhcmdldCBpbiAkdGFyZ2V0czsgZG8KKwkjIFJlbW92ZSBsb2cgbWVzc2FnZXMgZnJvbSBiaXRiYWtlIG91dHB1dAorCWNhc2UgJHRhcmdldCBpbgorCQlTdW1tYXJ5KnxXQVJOSU5HKnxMb2FkaW5nKnxMb2FkZWQqfFBhY2thZ2UqfD09PT09KikgY29udGludWU7OworCWVzYWMKKwl0YXNrcz1gYml0YmFrZSAkdGFyZ2V0IC1jIGxpc3R0YXNrcyB8IGdyZXAgXmRvXyB8IHNlZCBzL2RvXy8vYAorCWZvciB0YXNrIGluICR0YXNrczsgZG8KKwkJdGVzdGl0ICR0YXJnZXQgJHRhc2sKKwlkb25lCitkb25lCisKKwpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVtb3RlLWltYWdlIGIveW9jdG8tcG9reS9zY3JpcHRzL3Rlc3QtcmVtb3RlLWltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzYTQ0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UKQEAgLTAsMCArMSwzNjAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHRlc3QgcHVibGljIGF1dG9idWlsZGVyIGltYWdlcyBvbiByZW1vdGUgaGFyZHdhcmUuCisjIFRoZSBzY3JpcHQgaXMgY2FsbGVkIGZyb20gYSBtYWNoaW5lIHRoYXQgaXMgYWJsZSBkb3dubG9hZCB0aGUgaW1hZ2VzIGZyb20gdGhlIHJlbW90ZSBpbWFnZXMgcmVwb3NpdG9yeSBhbmQgdG8gY29ubmVjdCB0byB0aGUgdGVzdCBoYXJkd2FyZS4KKyMKKyMgdGVzdC1yZW1vdGUtaW1hZ2UgLS1pbWFnZS10eXBlIGNvcmUtaW1hZ2Utc2F0byAtLXJlcG8tbGluayBodHRwOi8vMTkyLjE2OC4xMC4yL2ltYWdlcyAtLXJlcXVpcmVkLXBhY2thZ2VzIHJwbSBwc3BsYXNoCisjCisjIFRyYW5zbGF0aW9uOiBCdWlsZCB0aGUgJ3JwbScgYW5kICdwc2xhc2gnIHBhY2thZ2VzIGFuZCB0ZXN0IGEgcmVtb3RlIGNvcmUtaW1hZ2Utc2F0byBpbWFnZSB1c2luZyB0aGUgaHR0cDovLzE5Mi4xNjguMTAuMi9pbWFnZXMgcmVwb3NpdG9yeS4KKyMKKyMgWW91IGNhbiBhbHNvIHVzZSB0aGUgJy1oJyBvcHRpb24gdG8gc2VlIHNvbWUgaGVscCBpbmZvcm1hdGlvbi4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc2h1dGlsCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworIyBBZGQgcGF0aCB0byBzY3JpcHRzL2xpYiBpbiBzeXMucGF0aDsKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworaW1wb3J0IHNjcmlwdHBhdGgKKworIyBBZGQgbWV0YS9saWIgdG8gc3lzLnBhdGgKK3NjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKKworIyBBZGQgYWxsIGxpYiBwYXRocyByZWxhdGl2ZSB0byBCQlBBVEggdG8gc3lzLnBhdGg7IHRoaXMgaXMgdXNlZCB0byBmaW5kIGFuZCBpbXBvcnQgdGhlIHRhcmdldCBjb250cm9sbGVycy4KK2ZvciBwYXRoIGluIGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCI6Iik6CisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocGF0aCwgJ2xpYicpKSkKKworIyBJbiBvcmRlciB0byBpbXBvcnQgbW9kdWxlcyB0aGF0IGNvbnRhaW4gdGFyZ2V0IGNvbnRyb2xsZXJzLCB3ZSBuZWVkIHRoZSBiaXRiYWtlIGxpYnJhcmllcyBpbiBzeXMucGF0aCAuCitiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQoraWYgbm90IGJpdGJha2VwYXRoOgorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICBzeXMuZXhpdCgxKQorCisjIGNyZWF0ZSBhIGxvZ2dlcgorZGVmIGxvZ2dlcl9jcmVhdGUoKToKKyAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignaHdhdXRvJykKKyAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGZoID0gbG9nZ2luZy5GaWxlSGFuZGxlcihmaWxlbmFtZT0naHdhdXRvLmxvZycsIG1vZGU9J3cnKQorICAgIGZoLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIGNoLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKworICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpcyAtICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKKyAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGNoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisKKyAgICBsb2cuYWRkSGFuZGxlcihmaCkKKyAgICBsb2cuYWRkSGFuZGxlcihjaCkKKworICAgIHJldHVybiBsb2cKKworIyBpbnN0YW50aWF0ZSB0aGUgbG9nZ2VyCitsb2cgPSBsb2dnZXJfY3JlYXRlKCkKKworCisjIERlZmluZSBhbmQgcmV0dXJuIHRoZSBhcmd1bWVudHMgcGFyc2VyIGZvciB0aGUgc2NyaXB0CitkZWYgZ2V0X2FyZ3NfcGFyc2VyKCk6CisgICAgZGVzY3JpcHRpb24gPSAiVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gYXV0b21hdGVkIHJ1bnRpbWUgdGVzdHMgdXNpbmcgcmVtb3RlbHkgcHVibGlzaGVkIGltYWdlIGZpbGVzLiBZb3Ugc2hvdWxkIHByZXBhcmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGp1c3QgbGlrZSBidWlsZGluZyBsb2NhbCBpbWFnZXMgYW5kIHJ1bm5pbmcgdGhlIHRlc3RzLiIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWltYWdlLXR5cGVzJywgcmVxdWlyZWQ9VHJ1ZSwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPScqJywgZGVzdD0iaW1hZ2VfdHlwZXMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1RoZSBpbWFnZSB0eXBlcyB0byB0ZXN0KGV4OiBjb3JlLWltYWdlLW1pbmltYWwpLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXBvLWxpbmsnLCByZXF1aXJlZD1UcnVlLCBhY3Rpb249InN0b3JlIiwgdHlwZT1zdHIsIGRlc3Q9InJlcG9fbGluayIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nVGhlIGxpbmsgdG8gdGhlIHJlbW90ZSBpbWFnZXMgcmVwb3NpdG9yeS4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVxdWlyZWQtcGFja2FnZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPScqJywgZGVzdD0icmVxdWlyZWRfcGFja2FnZXMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1JlcXVpcmVkIHBhY2thZ2VzIGZvciB0aGUgdGVzdHMuIFRoZXkgd2lsbCBiZSBidWlsdCBiZWZvcmUgdGhlIHRlc3RpbmcgYmVnaW5zLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YXJnZXRwcm9maWxlJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmUiLCBuYXJncz0xLCBkZXN0PSJ0YXJnZXRwcm9maWxlIiwgZGVmYXVsdD0nQXV0b1RhcmdldFByb2ZpbGUnLCBoZWxwPSdUaGUgdGFyZ2V0IHByb2ZpbGUgdG8gYmUgdXNlZC4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVwb3Byb2ZpbGUnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPTEsIGRlc3Q9InJlcG9wcm9maWxlIiwgZGVmYXVsdD0nUHVibGljQUInLCBoZWxwPSdUaGUgcmVwbyBwcm9maWxlIHRvIGJlIHVzZWQuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNraXAtZG93bmxvYWQnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2tpcF9kb3dubG9hZCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J1NraXAgZG93bmxvYWRpbmcgdGhlIGltYWdlcyBjb21wbGV0ZWx5LiBUaGlzIG5lZWRzIHRoZSBjb3JyZWN0IGZpbGVzIHRvIGJlIHByZXNlbnQgaW4gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIHRhcmdldCBwcm9maWxlLicpCisgICAgcmV0dXJuIHBhcnNlcgorCitjbGFzcyBCYXNlVGFyZ2V0UHJvZmlsZShvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbWV0YSBwcm9maWxlIGZvciBhIHNwZWNpZmljIHRhcmdldCAoTUFDSElORSB0eXBlICsgaW1hZ2UgdHlwZSkuCisgICAgIiIiCisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3R5cGUpOgorICAgICAgICBzZWxmLmltYWdlX3R5cGUgPSBpbWFnZV90eXBlCisKKyAgICAgICAgc2VsZi5rZXJuZWxfZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5yb290ZnNfZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5tYW5pZmVzdF9maWxlID0gTm9uZQorICAgICAgICBzZWxmLmV4dHJhX2Rvd25sb2FkX2ZpbGVzID0gW10gICAgICAgICAgIyBFeHRyYSBmaWxlcyAoZnVsbCBuYW1lKSB0byBiZSBkb3dubG9hZGVkLiBUaGV5IHNob3VsZCBiZSBzaXR1YXRlZCBpbiByZXBvX2xpbmsKKworICAgICMgVGhpcyBtZXRob2QgaXMgdXNlZCBhcyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIHdpdGggdGhlIHRhcmdldCBwcm9maWxlIGNsYXNzZXMuCisgICAgIyBJdCByZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGEgbGlzdCBvZiBmaWxlcyBhbmQgdGhlaXIgbWVhbmluZy9kZXNjcmlwdGlvbi4KKyAgICBkZWYgZ2V0X2ZpbGVzX2RpY3Qoc2VsZik6CisgICAgICAgIGZpbGVzX2RpY3QgPSB7fQorCisgICAgICAgIGlmIHNlbGYua2VybmVsX2ZpbGU6CisgICAgICAgICAgICBmaWxlc19kaWN0WydrZXJuZWxfZmlsZSddID0gc2VsZi5rZXJuZWxfZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCdUaGUgdGFyZ2V0IHByb2ZpbGUgZGlkIG5vdCBzZXQgYSBrZXJuZWwgZmlsZS4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBzZWxmLnJvb3Rmc19maWxlOgorICAgICAgICAgICAgZmlsZXNfZGljdFsncm9vdGZzX2ZpbGUnXSA9IHNlbGYucm9vdGZzX2ZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcignVGhlIHRhcmdldCBwcm9maWxlIGRpZCBub3Qgc2V0IGEgcm9vdGZzIGZpbGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgc2VsZi5tYW5pZmVzdF9maWxlOgorICAgICAgICAgICAgZmlsZXNfZGljdFsnbWFuaWZlc3RfZmlsZSddID0gc2VsZi5tYW5pZmVzdF9maWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ1RoZSB0YXJnZXQgcHJvZmlsZSBkaWQgbm90IHNldCBhIG1hbmlmZXN0IGZpbGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgZm9yIGlkeCwgZiBpbiBlbnVtZXJhdGUoc2VsZi5leHRyYV9kb3dubG9hZF9maWxlcyk6CisgICAgICAgICAgICBmaWxlc19kaWN0WydleHRyYV9kb3dubG9hZF9maWxlJyArIHN0cihpZHgpXSA9IGYKKworICAgICAgICByZXR1cm4gZmlsZXNfZGljdAorCitjbGFzcyBBdXRvVGFyZ2V0UHJvZmlsZShCYXNlVGFyZ2V0UHJvZmlsZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfdHlwZSk6CisgICAgICAgIHN1cGVyKEF1dG9UYXJnZXRQcm9maWxlLCBzZWxmKS5fX2luaXRfXyhpbWFnZV90eXBlKQorICAgICAgICBzZWxmLmltYWdlX25hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9MSU5LX05BTUUnLCB0YXJnZXQ9aW1hZ2VfdHlwZSkKKyAgICAgICAgc2VsZi5rZXJuZWxfdHlwZSA9IGdldF9iYl92YXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCB0YXJnZXQ9aW1hZ2VfdHlwZSkKKyAgICAgICAgc2VsZi5jb250cm9sbGVyID0gc2VsZi5nZXRfY29udHJvbGxlcigpCisKKyAgICAgICAgc2VsZi5zZXRfa2VybmVsX2ZpbGUoKQorICAgICAgICBzZWxmLnNldF9yb290ZnNfZmlsZSgpCisgICAgICAgIHNlbGYuc2V0X21hbmlmZXN0X2ZpbGUoKQorICAgICAgICBzZWxmLnNldF9leHRyYV9kb3dubG9hZF9maWxlcygpCisKKyAgICAjIEdldCB0aGUgY29udHJvbGxlciBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgYnkgYml0YmFrZS4KKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXIoc2VsZik6CisgICAgICAgIGZyb20gb2VxYS5jb250cm9sbGVycy50ZXN0dGFyZ2V0bG9hZGVyIGltcG9ydCBUZXN0VGFyZ2V0TG9hZGVyCisKKyAgICAgICAgdGFyZ2V0X2NvbnRyb2xsZXIgPSBnZXRfYmJfdmFyKCdURVNUX1RBUkdFVCcpCisgICAgICAgIGJicGF0aCA9IGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCc6JykKKworICAgICAgICBpZiB0YXJnZXRfY29udHJvbGxlciA9PSAicWVtdSI6CisgICAgICAgICAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgUWVtdVRhcmdldAorICAgICAgICAgICAgY29udHJvbGxlciA9IFFlbXVUYXJnZXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3R0YXJnZXRsb2FkZXIgPSBUZXN0VGFyZ2V0TG9hZGVyKCkKKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSB0ZXN0dGFyZ2V0bG9hZGVyLmdldF9jb250cm9sbGVyX21vZHVsZSh0YXJnZXRfY29udHJvbGxlciwgYmJwYXRoKQorICAgICAgICByZXR1cm4gY29udHJvbGxlcgorCisgICAgZGVmIHNldF9rZXJuZWxfZmlsZShzZWxmKToKKyAgICAgICAgcG9zdGNvbmZpZyA9ICJRQV9HRVRfTUFDSElORSA9IFwiJHtNQUNISU5FfVwiIgorICAgICAgICBtYWNoaW5lID0gZ2V0X2JiX3ZhcignUUFfR0VUX01BQ0hJTkUnLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgICAgIHNlbGYua2VybmVsX2ZpbGUgPSBzZWxmLmtlcm5lbF90eXBlICsgJy0nICsgbWFjaGluZSArICcuYmluJworCisgICAgZGVmIHNldF9yb290ZnNfZmlsZShzZWxmKToKKyAgICAgICAgaW1hZ2VfZnN0eXBlcyA9IGdldF9iYl92YXIoJ0lNQUdFX0ZTVFlQRVMnKS5zcGxpdCgnICcpCisgICAgICAgICMgR2V0IGEgbWF0Y2hpbmcgdmFsdWUgYmV0d2VlbiB0YXJnZXQncyBJTUFHRV9GU1RZUEVTIGFuZCB0aGUgaW1hZ2UgZnN0eXBlcyBzdXBwb2VydGVkIGJ5IHRoZSB0YXJnZXQgY29udHJvbGxlci4KKyAgICAgICAgZnN0eXBlID0gc2VsZi5jb250cm9sbGVyLm1hdGNoX2ltYWdlX2ZzdHlwZShkPU5vbmUsIGltYWdlX2ZzdHlwZXM9aW1hZ2VfZnN0eXBlcykKKyAgICAgICAgaWYgZnN0eXBlOgorICAgICAgICAgICAgc2VsZi5yb290ZnNfZmlsZSA9IHNlbGYuaW1hZ2VfbmFtZSArICcuJyArIGZzdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCJDb3VsZCBub3QgZ2V0IGEgY29tcGF0aWJsZSBpbWFnZSBmc3R5cGUuIENoZWNrIHRoYXQgSU1BR0VfRlNUWVBFUyBhbmQgdGhlIHRhcmdldCBjb250cm9sbGVyJ3Mgc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgZmlsZWRzIGhhdmUgY29tbW9uIHZhbHVlcy4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGRlZiBzZXRfbWFuaWZlc3RfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5tYW5pZmVzdF9maWxlID0gc2VsZi5pbWFnZV9uYW1lICsgIi5tYW5pZmVzdCIKKworICAgIGRlZiBzZXRfZXh0cmFfZG93bmxvYWRfZmlsZXMoc2VsZik6CisgICAgICAgIHNlbGYuZXh0cmFfZG93bmxvYWRfZmlsZXMgPSBzZWxmLmdldF9jb250cm9sbGVyX2V4dHJhX2ZpbGVzKCkKKyAgICAgICAgaWYgbm90IHNlbGYuZXh0cmFfZG93bmxvYWRfZmlsZXM6CisgICAgICAgICAgICBzZWxmLmV4dHJhX2Rvd25sb2FkX2ZpbGVzID0gW10KKworICAgIGRlZiBnZXRfY29udHJvbGxlcl9leHRyYV9maWxlcyhzZWxmKToKKyAgICAgICAgY29udHJvbGxlciA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoKQorICAgICAgICByZXR1cm4gY29udHJvbGxlci5nZXRfZXh0cmFfZmlsZXMoKQorCisKK2NsYXNzIEJhc2VSZXBvUHJvZmlsZShvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbWV0YSBwcm9maWxlIGZvciBhbiBpbWFnZXMgcmVwb3NpdG9yeS4KKyAgICAiIiIKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb2xpbmssIGxvY2FsZGlyKToKKyAgICAgICAgc2VsZi5sb2NhbGRpciA9IGxvY2FsZGlyCisgICAgICAgIHNlbGYucmVwb2xpbmsgPSByZXBvbGluaworCisgICAgIyBUaGUgZm9sbG93aW5nIGFic3RyYWN0IG1ldGhvZHMgYXJlIHRoZSBpbnRlcmZhY2VzIHRvIHRoZSByZXBvc2l0b3J5IHByb2ZpbGUgY2xhc3NlcyBkZXJpdmVkIGZyb20gdGhpcyBhYnN0cmFjdCBjbGFzcy4KKworICAgICMgVGhpcyBtZXRob2Qgc2hvdWxkIGNoZWNrIHRoZSBmaWxlIG5hbWVkICdmaWxlX25hbWUnIGlmIGl0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1cHN0cmVhbSBvbmUuCisgICAgIyBTaG91bGQgcmV0dXJuIEZhbHNlIGlmIHRoZSBpbWFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgdXBzdHJlYW0gYW5kIFRydWUgaWYgaXQgZGlmZmVycy4KKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY2hlY2tfb2xkX2ZpbGUoc2VsZiwgZmlsZV9uYW1lKToKKyAgICAgICAgcGFzcworCisgICAgIyBUaGlzIG1ldGhvZCBzaG91bGQgZmV0Y2ggZmlsZV9uYW1lIGFuZCBjcmVhdGUgYSBzeW1saW5rIHRvIGxvY2FsbmFtZSBpZiBzZXQuCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGZldGNoKHNlbGYsIGZpbGVfbmFtZSwgbG9jYWxuYW1lPU5vbmUpOgorICAgICAgICBwYXNzCisKK2NsYXNzIFB1YmxpY0FCKEJhc2VSZXBvUHJvZmlsZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb2xpbmssIGxvY2FsZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihQdWJsaWNBQiwgc2VsZikuX19pbml0X18ocmVwb2xpbmssIGxvY2FsZGlyKQorICAgICAgICBpZiBsb2NhbGRpciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2NhbGRpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydCVUlMRERJUiddLCAnUHVibGljQUJNaXJyb3InKQorCisgICAgIyBOb3QgeWV0IGltcGxlbWVudGVkLiBBbHdheXMgcmV0dXJuaW5nIFRydWUuCisgICAgZGVmIGNoZWNrX29sZF9maWxlKHNlbGYsIGZpbGVfbmFtZSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X3JlcG9fcGF0aChzZWxmKToKKyAgICAgICAgcGF0aCA9ICcvbWFjaGluZXMvJworCisgICAgICAgIHBvc3Rjb25maWcgPSAiUUFfR0VUX01BQ0hJTkUgPSBcIiR7TUFDSElORX1cIiIKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ1FBX0dFVF9NQUNISU5FJywgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgICAgICBpZiAncWVtdScgaW4gbWFjaGluZToKKyAgICAgICAgICAgIHBhdGggKz0gJ3FlbXUvJworCisgICAgICAgIHBvc3Rjb25maWcgPSAiUUFfR0VUX0RJU1RSTyA9IFwiJHtESVNUUk99XCIiCisgICAgICAgIGRpc3RybyA9IGdldF9iYl92YXIoJ1FBX0dFVF9ESVNUUk8nLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgICAgIHBhdGggKz0gZGlzdHJvLnJlcGxhY2UoJ3Bva3knLCBtYWNoaW5lKSArICcvJworICAgICAgICByZXR1cm4gcGF0aAorCisKKyAgICBkZWYgZmV0Y2goc2VsZiwgZmlsZV9uYW1lLCBsb2NhbG5hbWU9Tm9uZSk6CisgICAgICAgIHJlcG9fcGF0aCA9IHNlbGYuZ2V0X3JlcG9fcGF0aCgpCisgICAgICAgIGxpbmsgPSBzZWxmLnJlcG9saW5rICsgcmVwb19wYXRoICsgZmlsZV9uYW1lCisKKyAgICAgICAgc2VsZi53Z2V0KGxpbmssIHNlbGYubG9jYWxkaXIsIGxvY2FsbmFtZSkKKworICAgIGRlZiB3Z2V0KHNlbGYsIGxpbmssIGxvY2FsZGlyLCBsb2NhbG5hbWU9Tm9uZSwgZXh0cmFhcmdzPU5vbmUpOgorICAgICAgICB3Z2V0X2NtZCA9ICcvdXNyL2Jpbi9lbnYgd2dldCAtdCAyIC1UIDMwIC1udiAtLXBhc3NpdmUtZnRwIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgJworCisgICAgICAgIGlmIGxvY2FsbmFtZToKKyAgICAgICAgICAgIHdnZXRfY21kICs9ICcgLU8gJyArIGxvY2FsbmFtZSArICcgJworCisgICAgICAgIGlmIGV4dHJhYXJnczoKKyAgICAgICAgICAgIHdnZXRfY21kICs9ICcgJyArIGV4dHJhYXJncyArICcgJworCisgICAgICAgIHdnZXRfY21kICs9ICIgLVAgJXMgJyVzJyIgJSAobG9jYWxkaXIsIGxpbmspCisgICAgICAgIHJ1bkNtZCh3Z2V0X2NtZCkKKworY2xhc3MgSHdBdXRvKCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfdHlwZXMsIHJlcG9saW5rLCByZXF1aXJlZF9wYWNrYWdlcywgdGFyZ2V0cHJvZmlsZSwgcmVwb3Byb2ZpbGUsIHNraXBfZG93bmxvYWQpOgorICAgICAgICBsb2cuaW5mbygnSW5pdGlhbGl6aW5nLi4nKQorICAgICAgICBzZWxmLmltYWdlX3R5cGVzID0gaW1hZ2VfdHlwZXMKKyAgICAgICAgc2VsZi5yZXBvbGluayA9IHJlcG9saW5rCisgICAgICAgIHNlbGYucmVxdWlyZWRfcGFja2FnZXMgPSByZXF1aXJlZF9wYWNrYWdlcworICAgICAgICBzZWxmLnRhcmdldHByb2ZpbGUgPSB0YXJnZXRwcm9maWxlCisgICAgICAgIHNlbGYucmVwb3Byb2ZpbGUgPSByZXBvcHJvZmlsZQorICAgICAgICBzZWxmLnNraXBfZG93bmxvYWQgPSBza2lwX2Rvd25sb2FkCisgICAgICAgIHNlbGYucmVwbyA9IHNlbGYuZ2V0X3JlcG9fcHJvZmlsZShzZWxmLnJlcG9saW5rKQorCisgICAgIyBHZXQgdGhlIHJlcG9zaXRvcnkgcHJvZmlsZTsgZm9yIG5vdyB3ZSBvbmx5IGxvb2sgaW5zaWRlIHRoaXMgbW9kdWxlLgorICAgIGRlZiBnZXRfcmVwb19wcm9maWxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJlcG8gPSBnZXRhdHRyKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgc2VsZi5yZXBvcHJvZmlsZSkoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBsb2cuaW5mbygiVXNpbmcgcmVwbyBwcm9maWxlOiAlcyIgJSByZXBvLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuIHJlcG8KKworICAgICMgR2V0IHRoZSB0YXJnZXQgcHJvZmlsZTsgZm9yIG5vdyB3ZSBvbmx5IGxvb2sgaW5zaWRlIHRoaXMgbW9kdWxlLgorICAgIGRlZiBnZXRfdGFyZ2V0X3Byb2ZpbGUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdGFyZ2V0ID0gZ2V0YXR0cihzeXMubW9kdWxlc1tfX25hbWVfX10sIHNlbGYudGFyZ2V0cHJvZmlsZSkoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBsb2cuaW5mbygiVXNpbmcgdGFyZ2V0IHByb2ZpbGU6ICVzIiAlIHRhcmdldC5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHJldHVybiB0YXJnZXQKKworICAgICMgUnVuIHRoZSB0ZXN0aW1hZ2UgdGFzayBvbiBhIGJ1aWxkIHdoaWxlIHJlZGlyZWN0aW5nIERFUExPWV9ESVJfSU1BR0UgdG8gcmVwby5sb2NhbGRpciwgd2hlcmUgdGhlIGltYWdlcyBhcmUgZG93bmxvYWRlZC4KKyAgICBkZWYgcnVuVGVzdGltYWdlQnVpbGQoc2VsZiwgaW1hZ2VfdHlwZSk6CisgICAgICAgIGxvZy5pbmZvKCJSdW5uaW5nIHRoZSBydW50aW1lIHRlc3RzIGZvciAlcy4uIiAlIGltYWdlX3R5cGUpCisgICAgICAgIHBvc3Rjb25maWcgPSAiREVQTE9ZX0RJUl9JTUFHRSA9IFwiJXNcIiIgJSBzZWxmLnJlcG8ubG9jYWxkaXIKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgiJXMgLWMgdGVzdGltYWdlIiAlIGltYWdlX3R5cGUsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgICAgICB0ZXN0aW1hZ2VfcmVzdWx0cyA9IGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIlQiLCBpbWFnZV90eXBlKSwgImxvZy5kb190ZXN0aW1hZ2UiKSkKKyAgICAgICAgbG9nLmluZm8oJ1J1bnRpbWUgdGVzdHMgcmVzdWx0cyBmb3IgJXM6JyAlIGltYWdlX3R5cGUpCisgICAgICAgIHByaW50IHRlc3RpbWFnZV9yZXN1bHRzCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMgU3RhcnQgdGhlIHByb2NlZHVyZSEKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcXVpcmVkX3BhY2thZ2VzOgorICAgICAgICAgICAgIyBCdWlsZCB0aGUgcmVxdWlyZWQgcGFja2FnZXMgZm9yIHRoZSB0ZXN0cworICAgICAgICAgICAgbG9nLmluZm8oIkJ1aWxkaW5nIHRoZSByZXF1aXJlZCBwYWNrYWdlczogJXMgLiIgJSAnLCAnLmpvaW4obWFwKHN0ciwgc2VsZi5yZXF1aXJlZF9wYWNrYWdlcykpKQorICAgICAgICAgICAgcmVzdWx0ID0gYml0YmFrZShzZWxmLnJlcXVpcmVkX3BhY2thZ2VzLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiByZXN1bHQuc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKCJDb3VsZCBub3QgYnVpbGQgcmVxdWlyZWQgcGFja2FnZXM6ICVzLiBPdXRwdXQ6ICVzIiAlIChzZWxmLnJlcXVpcmVkX3BhY2thZ2VzLCByZXN1bHQub3V0cHV0KSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICAjIEJ1aWxkIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkgbWV0YSBkYXRhLgorICAgICAgICAgICAgbG9nLmluZm8oIkJ1aWxkaW5nIHRoZSBwYWNrYWdlIGluZGV4LiIpCisgICAgICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCJwYWNrYWdlLWluZGV4IiwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgaWYgcmVzdWx0LnN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiQ291bGQgbm90IGJ1aWxkICdwYWNrYWdlLWluZGV4Jy4gT3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIHRoZSBpbWFnZXMgdG8gYmUgZG93bmxvYWRlZAorICAgICAgICBsb2cuaW5mbygiQ3JlYXRpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZSAlcyIgJSBzZWxmLnJlcG8ubG9jYWxkaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJlcG8ubG9jYWxkaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5yZXBvLmxvY2FsZGlyKQorCisgICAgICAgICMgRm9yIGVhY2ggaW1hZ2UgdHlwZSwgZG93bmxvYWQgdGhlIG5lZWRlZCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0cy4KKyAgICAgICAgbm9pc3N1ZXNmb3VuZCA9IFRydWUKKyAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIHNlbGYuc2tpcF9kb3dubG9hZDoKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygiU2tpcHBpbmcgZG93bmxvYWRpbmcgdGhlIGltYWdlcy4uIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5nZXRfdGFyZ2V0X3Byb2ZpbGUoaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgICAgICBmaWxlc19kaWN0ID0gdGFyZ2V0LmdldF9maWxlc19kaWN0KCkKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygiRG93bmxvYWRpbmcgZmlsZXMgZm9yICVzIiAlIGltYWdlX3R5cGUpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXNfZGljdDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXBvLmNoZWNrX29sZF9maWxlKGZpbGVzX2RpY3RbZl0pOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXBvLmxvY2FsZGlyLCBmaWxlc19kaWN0W2ZdKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwby5mZXRjaChmaWxlc19kaWN0W2ZdKQorCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RpbWFnZUJ1aWxkKGltYWdlX3R5cGUpCisgICAgICAgICAgICBpZiByZXN1bHQuc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgbm9pc3N1ZXNmb3VuZCA9IEZhbHNlCisKKyAgICAgICAgaWYgbm9pc3N1ZXNmb3VuZDoKKyAgICAgICAgICAgIGxvZy5pbmZvKCdGaW5pc2hlZC4gTm8gaXNzdWVzIGZvdW5kLicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ0ZpbmlzaGVkLiBTb21lIHJ1bnRpbWUgdGVzdHMgaGF2ZSBmYWlsZWQuIFJldHVybmluZyBub24tMCBzdGF0dXMgY29kZS4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworCisKK2RlZiBtYWluKCk6CisKKyAgICBwYXJzZXIgPSBnZXRfYXJnc19wYXJzZXIoKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBod2F1dG8gPSBId0F1dG8oaW1hZ2VfdHlwZXM9YXJncy5pbWFnZV90eXBlcywgcmVwb2xpbms9YXJncy5yZXBvX2xpbmssIHJlcXVpcmVkX3BhY2thZ2VzPWFyZ3MucmVxdWlyZWRfcGFja2FnZXMsIHRhcmdldHByb2ZpbGU9YXJncy50YXJnZXRwcm9maWxlLCByZXBvcHJvZmlsZT1hcmdzLnJlcG9wcm9maWxlLCBza2lwX2Rvd25sb2FkPWFyZ3Muc2tpcF9kb3dubG9hZCkKKworICAgIGh3YXV0by5ydW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9kaXJzaXplLnB5IGIveW9jdG8tcG9reS9zY3JpcHRzL3RpbnkvZGlyc2l6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGZmNGFiCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3RpbnkvZGlyc2l6ZS5weQpAQCAtMCwwICsxLDkzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMKKyMgRGlzcGxheSBkZXRhaWxzIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gc2l6ZSwgYnJva2VuIHVwIGJ5IGRpcmVjdG9yeS4KKyMgQWxsb3dzIGZvciBsaW1pdGluZyBieSBzaXplIHRvIGZvY3VzIG9uIHRoZSBsYXJnZXIgZmlsZXMuCisjCisjIEF1dGhvcjogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHN0YXQKKworY2xhc3MgUmVjb3JkOgorICAgIGRlZiBjcmVhdGUocGF0aCk6CisgICAgICAgIHIgPSBSZWNvcmQocGF0aCkKKworICAgICAgICBzID0gb3MubHN0YXQocGF0aCkKKyAgICAgICAgaWYgc3RhdC5TX0lTRElSKHMuc3RfbW9kZSk6CisgICAgICAgICAgICBmb3IgcCBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gcGF0aCArICIvIiArIHAKKyAgICAgICAgICAgICAgICBzcyA9IG9zLmxzdGF0KHBhdGhuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0LlNfSVNMTksoc3Muc3RfbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHIucmVjb3Jkcy5hcHBlbmQoUmVjb3JkLmNyZWF0ZShwYXRobmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHIuc2l6ZSArPSByLnJlY29yZHNbLTFdLnNpemUKKyAgICAgICAgICAgIHIucmVjb3Jkcy5zb3J0KHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHIuc2l6ZSA9IG9zLmxzdGF0KHBhdGgpLnN0X3NpemUKKworICAgICAgICByZXR1cm4gcgorICAgIGNyZWF0ZSA9IHN0YXRpY21ldGhvZChjcmVhdGUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5zaXplID0gMAorICAgICAgICBzZWxmLnJlY29yZHMgPSBbXQorCisgICAgZGVmIF9fY21wX18odGhpcywgdGhhdCk6CisgICAgICAgIGlmIHRoYXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRoYXQsIFJlY29yZCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgaWYgbGVuKHRoaXMucmVjb3JkcykgPiAwIGFuZCBsZW4odGhhdC5yZWNvcmRzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIGxlbih0aGlzLnJlY29yZHMpID09IDAgYW5kIGxlbih0aGF0LnJlY29yZHMpID4gMDoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIHRoaXMuc2l6ZSA8IHRoYXQuc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBpZiB0aGlzLnNpemUgPiB0aGF0LnNpemU6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHNob3coc2VsZiwgbWluc2l6ZSk6CisgICAgICAgIHRvdGFsID0gMAorICAgICAgICBpZiBzZWxmLnNpemUgPD0gbWluc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHByaW50ICIlMTBkICVzIiAlIChzZWxmLnNpemUsIHNlbGYucGF0aCkKKyAgICAgICAgZm9yIHIgaW4gc2VsZi5yZWNvcmRzOgorICAgICAgICAgICAgdG90YWwgKz0gci5zaG93KG1pbnNpemUpCisgICAgICAgIGlmIGxlbihzZWxmLnJlY29yZHMpID09IDA6CisgICAgICAgICAgICB0b3RhbCA9IHNlbGYuc2l6ZQorICAgICAgICByZXR1cm4gdG90YWwKKworCitkZWYgbWFpbigpOgorICAgIG1pbnNpemUgPSAwCisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAyOgorICAgICAgICBtaW5zaXplID0gaW50KHN5cy5hcmd2WzFdKQorICAgIHJvb3RmcyA9IFJlY29yZC5jcmVhdGUoIi4iKQorICAgIHRvdGFsID0gcm9vdGZzLnNob3cobWluc2l6ZSkKKyAgICBwcmludCAiRGlzcGxheWVkICVkLyVkIGJ5dGVzICglLjJmJSUpIiAlIFwKKyAgICAgICAgICAodG90YWwsIHJvb3Rmcy5zaXplLCAxMDAgKiBmbG9hdCh0b3RhbCkgLyByb290ZnMuc2l6ZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3Rpbnkva3NpemUucHkgYi95b2N0by1wb2t5L3NjcmlwdHMvdGlueS9rc2l6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MDA2ZjJmCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3Rpbnkva3NpemUucHkKQEAgLTAsMCArMSwxNjUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIworIyBEaXNwbGF5IGRldGFpbHMgb2YgdGhlIGtlcm5lbCBidWlsZCBzaXplLCBicm9rZW4gdXAgYnkgYnVpbHQtaW4uby4gU29ydAorIyB0aGUgb2JqZWN0cyBieSBzaXplLiBSdW4gZnJvbSB0aGUgdG9wIGxldmVsIGtlcm5lbCBidWlsZCBkaXJlY3RvcnkuCisjCisjIEF1dGhvcjogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBvcworZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCitmcm9tIHN0cmluZyBpbXBvcnQgam9pbgorCisKK2RlZiB1c2FnZSgpOgorICAgIHByb2cgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorICAgIHByaW50ICdVc2FnZTogJXMgW09QVElPTl0uLi4nICUgKHByb2cpCisgICAgcHJpbnQgJyAgLWQsICAgICAgICAgICAgICAgICBkaXNwbGF5IGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgZHJpdmVycyBkZXRhaWwnCisgICAgcHJpbnQgJyAgLWgsIC0taGVscCAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdCcKKyAgICBwcmludCAnJworICAgIHByaW50ICdSdW4gJXMgZnJvbSB0aGUgdG9wLWxldmVsIExpbnV4IGtlcm5lbCBidWlsZCBkaXJlY3RvcnkuJyAlIChwcm9nKQorCisKK2NsYXNzIFNpemVzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnbG9iKToKKyAgICAgICAgc2VsZi50aXRsZSA9IGdsb2IKKyAgICAgICAgcCA9IFBvcGVuKCJzaXplIC10ICIgKyBnbG9iLCBzaGVsbD1UcnVlLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCisgICAgICAgIG91dHB1dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zcGxpdGxpbmVzKCkKKyAgICAgICAgaWYgbGVuKG91dHB1dCkgPiAyOgorICAgICAgICAgICAgc2l6ZXMgPSBvdXRwdXRbLTFdLnNwbGl0KClbMDo0XQorICAgICAgICAgICAgc2VsZi50ZXh0ID0gaW50KHNpemVzWzBdKQorICAgICAgICAgICAgc2VsZi5kYXRhID0gaW50KHNpemVzWzFdKQorICAgICAgICAgICAgc2VsZi5ic3MgPSBpbnQoc2l6ZXNbMl0pCisgICAgICAgICAgICBzZWxmLnRvdGFsID0gaW50KHNpemVzWzNdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXh0ID0gc2VsZi5kYXRhID0gc2VsZi5ic3MgPSBzZWxmLnRvdGFsID0gMAorCisgICAgZGVmIHNob3coc2VsZiwgaW5kZW50PSIiKToKKyAgICAgICAgcHJpbnQgIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCisgICAgICAgICAgICAgIChpbmRlbnQrc2VsZi50aXRsZSwgc2VsZi50b3RhbCwgc2VsZi50ZXh0LCBzZWxmLmRhdGEsIHNlbGYuYnNzKQorCisKK2NsYXNzIFJlcG9ydDoKKyAgICBkZWYgY3JlYXRlKGZpbGVuYW1lLCB0aXRsZSwgc3ViZ2xvYj1Ob25lKToKKyAgICAgICAgciA9IFJlcG9ydChmaWxlbmFtZSwgdGl0bGUpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCisKKyAgICAgICAgcCA9IFBvcGVuKCJscyAiICsgcGF0aCArICIvKi5vIHwgZ3JlcCAtdiBidWlsdC1pbi5vIiwKKyAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKKyAgICAgICAgZ2xvYiA9IGpvaW4ocC5jb21tdW5pY2F0ZSgpWzBdLnNwbGl0bGluZXMoKSkKKyAgICAgICAgb3JlcG9ydCA9IFJlcG9ydChnbG9iLCBwYXRoICsgIi8qLm8iKQorICAgICAgICBvcmVwb3J0LnNpemVzLnRpdGxlID0gcGF0aCArICIvKi5vIgorICAgICAgICByLnBhcnRzLmFwcGVuZChvcmVwb3J0KQorCisgICAgICAgIGlmIHN1Ymdsb2I6CisgICAgICAgICAgICBwID0gUG9wZW4oImxzICIgKyBzdWJnbG9iLCBzaGVsbD1UcnVlLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCisgICAgICAgICAgICBmb3IgZiBpbiBwLmNvbW11bmljYXRlKClbMF0uc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZikKKyAgICAgICAgICAgICAgICByLnBhcnRzLmFwcGVuZChSZXBvcnQuY3JlYXRlKGYsIHBhdGgsIHBhdGggKyAiLyovYnVpbHQtaW4ubyIpKQorICAgICAgICAgICAgci5wYXJ0cy5zb3J0KHJldmVyc2U9VHJ1ZSkKKworICAgICAgICBmb3IgYiBpbiByLnBhcnRzOgorICAgICAgICAgICAgci50b3RhbHNbInRvdGFsIl0gKz0gYi5zaXplcy50b3RhbAorICAgICAgICAgICAgci50b3RhbHNbInRleHQiXSArPSBiLnNpemVzLnRleHQKKyAgICAgICAgICAgIHIudG90YWxzWyJkYXRhIl0gKz0gYi5zaXplcy5kYXRhCisgICAgICAgICAgICByLnRvdGFsc1siYnNzIl0gKz0gYi5zaXplcy5ic3MKKworICAgICAgICByLmRlbHRhc1sidG90YWwiXSA9IHIuc2l6ZXMudG90YWwgLSByLnRvdGFsc1sidG90YWwiXQorICAgICAgICByLmRlbHRhc1sidGV4dCJdID0gci5zaXplcy50ZXh0IC0gci50b3RhbHNbInRleHQiXQorICAgICAgICByLmRlbHRhc1siZGF0YSJdID0gci5zaXplcy5kYXRhIC0gci50b3RhbHNbImRhdGEiXQorICAgICAgICByLmRlbHRhc1siYnNzIl0gPSByLnNpemVzLmJzcyAtIHIudG90YWxzWyJic3MiXQorICAgICAgICByZXR1cm4gcgorICAgIGNyZWF0ZSA9IHN0YXRpY21ldGhvZChjcmVhdGUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2xvYiwgdGl0bGUpOgorICAgICAgICBzZWxmLmdsb2IgPSBnbG9iCisgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLnNpemVzID0gU2l6ZXMoZ2xvYikKKyAgICAgICAgc2VsZi5wYXJ0cyA9IFtdCisgICAgICAgIHNlbGYudG90YWxzID0geyJ0b3RhbCI6MCwgInRleHQiOjAsICJkYXRhIjowLCAiYnNzIjowfQorICAgICAgICBzZWxmLmRlbHRhcyA9IHsidG90YWwiOjAsICJ0ZXh0IjowLCAiZGF0YSI6MCwgImJzcyI6MH0KKworICAgIGRlZiBzaG93KHNlbGYsIGluZGVudD0iIik6CisgICAgICAgIHJ1bGUgPSBzdHIubGp1c3QoaW5kZW50LCA4MCwgJy0nKQorICAgICAgICBwcmludCAiJS0zMnMgJTEwcyB8ICUxMHMgJTEwcyAlMTBzIiAlIFwKKyAgICAgICAgICAgICAgKGluZGVudCtzZWxmLnRpdGxlLCAidG90YWwiLCAidGV4dCIsICJkYXRhIiwgImJzcyIpCisgICAgICAgIHByaW50IHJ1bGUKKyAgICAgICAgc2VsZi5zaXplcy5zaG93KGluZGVudCkKKyAgICAgICAgcHJpbnQgcnVsZQorICAgICAgICBmb3IgcCBpbiBzZWxmLnBhcnRzOgorICAgICAgICAgICAgaWYgcC5zaXplcy50b3RhbCA+IDA6CisgICAgICAgICAgICAgICAgcC5zaXplcy5zaG93KGluZGVudCkKKyAgICAgICAgcHJpbnQgcnVsZQorICAgICAgICBwcmludCAiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKKyAgICAgICAgICAgICAgKGluZGVudCsic3VtIiwgc2VsZi50b3RhbHNbInRvdGFsIl0sIHNlbGYudG90YWxzWyJ0ZXh0Il0sCisgICAgICAgICAgICAgICBzZWxmLnRvdGFsc1siZGF0YSJdLCBzZWxmLnRvdGFsc1siYnNzIl0pCisgICAgICAgIHByaW50ICIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAorICAgICAgICAgICAgICAoaW5kZW50KyJkZWx0YSIsIHNlbGYuZGVsdGFzWyJ0b3RhbCJdLCBzZWxmLmRlbHRhc1sidGV4dCJdLAorICAgICAgICAgICAgICAgc2VsZi5kZWx0YXNbImRhdGEiXSwgc2VsZi5kZWx0YXNbImJzcyJdKQorICAgICAgICBwcmludCAiXG4iCisKKyAgICBkZWYgX19jbXBfXyh0aGlzLCB0aGF0KToKKyAgICAgICAgaWYgdGhhdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGhhdCwgUmVwb3J0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBpZiB0aGlzLnNpemVzLnRvdGFsIDwgdGhhdC5zaXplcy50b3RhbDoKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBpZiB0aGlzLnNpemVzLnRvdGFsID4gdGhhdC5zaXplcy50b3RhbDoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiAwCisKKworZGVmIG1haW4oKToKKyAgICB0cnk6CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImRoIiwgWyJoZWxwIl0pCisgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyOgorICAgICAgICBwcmludCAnJXMnICUgc3RyKGVycikKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgZHJpdmVyX2RldGFpbCA9IEZhbHNlCisgICAgZm9yIG8sIGEgaW4gb3B0czoKKyAgICAgICAgaWYgbyA9PSAnLWQnOgorICAgICAgICAgICAgZHJpdmVyX2RldGFpbCA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6CisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAidW5oYW5kbGVkIG9wdGlvbiIKKworICAgIGdsb2IgPSAiYXJjaC8qL2J1aWx0LWluLm8gKi9idWlsdC1pbi5vIgorICAgIHZtbGludXggPSBSZXBvcnQuY3JlYXRlKCJ2bWxpbnV4IiwgICJMaW51eCBLZXJuZWwiLCBnbG9iKQorCisgICAgdm1saW51eC5zaG93KCkKKyAgICBmb3IgYiBpbiB2bWxpbnV4LnBhcnRzOgorICAgICAgICBpZiBiLnRvdGFsc1sidG90YWwiXSA+IDAgYW5kIGxlbihiLnBhcnRzKSA+IDE6CisgICAgICAgICAgICBiLnNob3coKQorICAgICAgICBpZiBiLnRpdGxlID09ICJkcml2ZXJzIiBhbmQgZHJpdmVyX2RldGFpbDoKKyAgICAgICAgICAgIGZvciBkIGluIGIucGFydHM6CisgICAgICAgICAgICAgICAgaWYgZC50b3RhbHNbInRvdGFsIl0gPiAwIGFuZCBsZW4oZC5wYXJ0cykgPiAxOgorICAgICAgICAgICAgICAgICAgICBkLnNob3coIiAgICAiKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvd2ljIGIveW9jdG8tcG9reS9zY3JpcHRzL3dpYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YWQyYjE5Ci0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3dpYwpAQCAtMCwwICsxLDMyMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04gJ3dpYycgaXMgdGhlIE9wZW5FbWJlZGRlZCBJbWFnZSBDcmVhdG9yIHRoYXQgdXNlcnMgY2FuCisjIHVzZSB0byBnZW5lcmF0ZSBib290YWJsZSBpbWFnZXMuICBJbnZva2luZyBpdCB3aXRob3V0IGFueSBhcmd1bWVudHMKKyMgd2lsbCBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlICd3aWMnIGNvbW1hbmQgYW5kIGxpc3QgdGhlCisjIGF2YWlsYWJsZSAnd2ljJyBzdWJjb21tYW5kcy4gIEludm9raW5nIGEgc3ViY29tbWFuZCB3aXRob3V0IGFueQorIyBhcmd1bWVudHMgd2lsbCBsaWtld2lzZSBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlIHNwZWNpZmllZAorIyBzdWJjb21tYW5kLiAgUGxlYXNlIHVzZSB0aGF0IGludGVyZmFjZSBmb3IgZGV0YWlsZWQgaGVscC4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK19fdmVyc2lvbl9fID0gIjAuMi4wIgorCisjIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5IG1vZHVsZXMKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHNwYXduCisKKyMgRXh0ZXJuYWwgbW9kdWxlcworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGguYXBwZW5kKGxpYl9wYXRoKQorCitiaXRiYWtlX2V4ZSA9IHNwYXduLmZpbmRfZXhlY3V0YWJsZSgnYml0YmFrZScpCitpZiBiaXRiYWtlX2V4ZToKKyAgICBiaXRiYWtlX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJpdGJha2VfZXhlKSwgJy4uL2xpYicpCisgICAgc3lzLnBhdGguYXBwZW5kKGJpdGJha2VfcGF0aCkKKyAgICBmcm9tIGJiIGltcG9ydCBjb29rZXJkYXRhCisgICAgZnJvbSBiYi5tYWluIGltcG9ydCBiaXRiYWtlX21haW4sIEJpdEJha2VDb25maWdQYXJhbWV0ZXJzCitlbHNlOgorICAgIGJpdGJha2VfbWFpbiA9IE5vbmUKKworZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyLCBCQl9WQVJTCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IFdpY0Vycm9yCitmcm9tIHdpYyBpbXBvcnQgZW5naW5lCitmcm9tIHdpYyBpbXBvcnQgaGVscCBhcyBobHAKKworZGVmIHJvb3Rmc19kaXJfdG9fYXJncyhrcm9vdGZzX2Rpcik6CisgICAgIiIiCisgICAgR2V0IGEgcm9vdGZzX2RpciBkaWN0IGFuZCBzZXJpYWxpemUgdG8gc3RyaW5nCisgICAgIiIiCisgICAgcm9vdGZzX2RpciA9ICcnCisgICAgZm9yIGtleSwgdmFsIGluIGtyb290ZnNfZGlyLml0ZW1zKCk6CisgICAgICAgIHJvb3Rmc19kaXIgKz0gJyAnCisgICAgICAgIHJvb3Rmc19kaXIgKz0gJz0nLmpvaW4oW2tleSwgdmFsXSkKKyAgICByZXR1cm4gcm9vdGZzX2Rpci5zdHJpcCgpCisKK2RlZiBjYWxsYmFja19yb290ZnNfZGlyKG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyKToKKyAgICAiIiIKKyAgICBCdWlsZCBhIGRpY3QgdXNpbmcgLS1yb290ZnNfZGlyIGNvbm5lY3Rpb249ZGlyCisgICAgIiIiCisgICAgaWYgbm90IHR5cGUocGFyc2VyLnZhbHVlcy5yb290ZnNfZGlyKSBpcyBkaWN0OgorICAgICAgICBwYXJzZXIudmFsdWVzLnJvb3Rmc19kaXIgPSBkaWN0KCkKKworICAgIGlmICc9JyBpbiB2YWx1ZToKKyAgICAgICAgKGtleSwgcm9vdGZzX2RpcikgPSB2YWx1ZS5zcGxpdCgnPScpCisgICAgZWxzZToKKyAgICAgICAga2V5ID0gJ1JPT1RGU19ESVInCisgICAgICAgIHJvb3Rmc19kaXIgPSB2YWx1ZQorCisgICAgcGFyc2VyLnZhbHVlcy5yb290ZnNfZGlyW2tleV0gPSByb290ZnNfZGlyCisKK2RlZiB3aWNfY3JlYXRlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGltYWdlIGNyZWF0aW9uLiAgVGhlIHJlYWwgd29yayBpcyBkb25lCisgICAgYnkgaW1hZ2UuZW5naW5lLndpY19jcmVhdGUoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT11c2FnZV9zdHIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRkaXIiLCBkZXN0PSJvdXRkaXIiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Im5hbWUgb2YgZGlyZWN0b3J5IHRvIGNyZWF0ZSBpbWFnZSBpbiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0taW1hZ2UtbmFtZSIsIGRlc3Q9ImltYWdlX25hbWUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Im5hbWUgb2YgdGhlIGltYWdlIHRvIHVzZSB0aGUgYXJ0aWZhY3RzIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImUuZy4gY29yZS1pbWFnZS1zYXRvIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yb290ZnMtZGlyIiwgZGVzdD0icm9vdGZzX2RpciIsIHR5cGU9InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPWNhbGxiYWNrX3Jvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgL3Jvb3RmcyBkaXIgdG8gdXNlIGFzIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLndrcyByb290ZnMgc291cmNlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWIiLCAiLS1ib290aW1nLWRpciIsIGRlc3Q9ImJvb3RpbWdfZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZyB0aGUgYm9vdCBhcnRpZmFjdHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihlLmcuIC9FRkkgb3IgL3N5c2xpbnV4IGRpcnMpIHRvIHVzZSBhcyB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi53a3MgYm9vdGltZyBzb3VyY2UiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItayIsICItLWtlcm5lbC1kaXIiLCBkZXN0PSJrZXJuZWxfZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZyB0aGUga2VybmVsIHRvIHVzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gdGhlIC53a3MgYm9vdGltZyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbmF0aXZlLXN5c3Jvb3QiLCBkZXN0PSJuYXRpdmVfc3lzcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY29udGFpbmluZyB0aGUgdG9vbHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHVzZSB0byBidWlsZCB0aGUgaW1hZ2UiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXNraXAtYnVpbGQtY2hlY2siLCBkZXN0PSJidWlsZF9jaGVjayIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0ic2tpcCB0aGUgYnVpbGQgY2hlY2siKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWJ1aWxkLXJvb3RmcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9ImJ1aWxkIHJvb3RmcyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29tcHJlc3Mtd2l0aCIsIGNob2ljZXM9KCJnemlwIiwgImJ6aXAyIiwgInh6IiksCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY29tcHJlc3NvcicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY29tcHJlc3MgaW1hZ2Ugd2l0aCBzcGVjaWZpZWQgY29tcHJlc3NvciIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmFycyIsIGRlc3Q9J3ZhcnNfZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJkaXJlY3Rvcnkgd2l0aCA8aW1hZ2U+LmVudiBmaWxlcyB0aGF0IHN0b3JlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaXRiYWtlIHZhcmlhYmxlcyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0PSJkZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgb3B0aW9ucy5idWlsZF9yb290ZnMgYW5kIG5vdCBiaXRiYWtlX21haW46CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkNhbid0IGJ1aWxkIHJvb2ZzIGFzIGJpdGJha2UgaXMgbm90IGluIHRoZSAkUEFUSCIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5pbWFnZV9uYW1lOgorICAgICAgICBtaXNzZWQgPSBbXQorICAgICAgICBmb3IgdmFsLCBvcHQgaW4gWyhvcHRpb25zLnJvb3Rmc19kaXIsICdyb290ZnMtZGlyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMuYm9vdGltZ19kaXIsICdib290aW1nLWRpcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zLmtlcm5lbF9kaXIsICdrZXJuZWwtZGlyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMubmF0aXZlX3N5c3Jvb3QsICduYXRpdmUtc3lzcm9vdCcpXToKKyAgICAgICAgICAgIGlmIG5vdCB2YWw6CisgICAgICAgICAgICAgICAgbWlzc2VkLmFwcGVuZChvcHQpCisgICAgICAgIGlmIG1pc3NlZDoKKyAgICAgICAgICAgIHByaW50ICJUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyBhcmUgbm90IHNwZWNpZmllZDoiCisgICAgICAgICAgICBwcmludCAiICAiICsgIiwgIi5qb2luKG1pc3NlZCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBvcHRpb25zLmltYWdlX25hbWU6CisgICAgICAgIEJCX1ZBUlMuZGVmYXVsdF9pbWFnZSA9IG9wdGlvbnMuaW1hZ2VfbmFtZQorICAgIGVsc2U6CisgICAgICAgIG9wdGlvbnMuYnVpbGRfY2hlY2sgPSBGYWxzZQorCisgICAgaWYgb3B0aW9ucy52YXJzX2RpcjoKKyAgICAgICAgQkJfVkFSUy52YXJzX2RpciA9IG9wdGlvbnMudmFyc19kaXIKKworICAgIGlmIG9wdGlvbnMuYnVpbGRfY2hlY2s6CisgICAgICAgIHByaW50ICJDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLiIKKyAgICAgICAgaWYgbm90IGVuZ2luZS52ZXJpZnlfYnVpbGRfZW52KCk6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgdmVyaWZ5IGJ1aWxkIGVudmlyb25tZW50LCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkRvbmUuXG4iCisKKyAgICBib290aW1nX2RpciA9ICIiCisKKyAgICBpZiBvcHRpb25zLmltYWdlX25hbWU6CisgICAgICAgIGlmIG9wdGlvbnMuYnVpbGRfcm9vdGZzOgorICAgICAgICAgICAgYXJndiA9IFsiYml0YmFrZSIsIG9wdGlvbnMuaW1hZ2VfbmFtZV0KKyAgICAgICAgICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICAgICAgYXJndi5hcHBlbmQoIi0tZGVidWciKQorCisgICAgICAgICAgICBwcmludCAiQnVpbGRpbmcgcm9vdGZzLi4uXG4iCisgICAgICAgICAgICBpZiBiaXRiYWtlX21haW4oQml0QmFrZUNvbmZpZ1BhcmFtZXRlcnMoYXJndiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VyZGF0YS5Db29rZXJDb25maWd1cmF0aW9uKCkpOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgcm9vdGZzX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgb3B0aW9ucy5pbWFnZV9uYW1lKQorICAgICAgICBrZXJuZWxfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIiwgb3B0aW9ucy5pbWFnZV9uYW1lKQorICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19ESVJfTkFUSVZFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbWFnZV9uYW1lKQorICAgIGVsc2U6CisgICAgICAgIGlmIG9wdGlvbnMuYnVpbGRfcm9vdGZzOgorICAgICAgICAgICAgcHJpbnQgIkltYWdlIG5hbWUgaXMgbm90IHNwZWNpZmllZCwgZXhpdGluZy4gKFVzZSAtZS8tLWltYWdlLW5hbWUgdG8gc3BlY2lmeSBpdClcbiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB3a3NfZmlsZSA9IGFyZ3NbMF0KKworICAgIGlmIG5vdCB3a3NfZmlsZS5lbmRzd2l0aCgiLndrcyIpOgorICAgICAgICB3a3NfZmlsZSA9IGVuZ2luZS5maW5kX2Nhbm5lZF9pbWFnZShzY3JpcHRzX3BhdGgsIHdrc19maWxlKQorICAgICAgICBpZiBub3Qgd2tzX2ZpbGU6CisgICAgICAgICAgICBwcmludCAiTm8gaW1hZ2UgbmFtZWQgJXMgZm91bmQsIGV4aXRpbmcuICAoVXNlICd3aWMgbGlzdCBpbWFnZXMnICJcCisgICAgICAgICAgICAgICAgICAidG8gbGlzdCBhdmFpbGFibGUgaW1hZ2VzLCBvciBzcGVjaWZ5IGEgZnVsbHktcXVhbGlmaWVkIE9FICJcCisgICAgICAgICAgICAgICAgICAia2lja3N0YXJ0ICgud2tzKSBmaWxlbmFtZSlcbiIgJSBhcmdzWzBdCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaW1hZ2Vfb3V0cHV0X2RpciA9ICIiCisgICAgaWYgb3B0aW9ucy5vdXRkaXI6CisgICAgICAgIGltYWdlX291dHB1dF9kaXIgPSBvcHRpb25zLm91dGRpcgorCisgICAgaWYgbm90IG9wdGlvbnMuaW1hZ2VfbmFtZToKKyAgICAgICAgcm9vdGZzX2RpciA9ICcnCisgICAgICAgIGlmICdST09URlNfRElSJyBpbiBvcHRpb25zLnJvb3Rmc19kaXI6CisgICAgICAgICAgICByb290ZnNfZGlyID0gb3B0aW9ucy5yb290ZnNfZGlyWydST09URlNfRElSJ10KKyAgICAgICAgYm9vdGltZ19kaXIgPSBvcHRpb25zLmJvb3RpbWdfZGlyCisgICAgICAgIGtlcm5lbF9kaXIgPSBvcHRpb25zLmtlcm5lbF9kaXIKKyAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBvcHRpb25zLm5hdGl2ZV9zeXNyb290CisgICAgICAgIGlmIHJvb3Rmc19kaXIgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgcHJpbnQgIi0tcm9vZnMtZGlyICgtcikgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihib290aW1nX2Rpcik6CisgICAgICAgICAgICBwcmludCAiLS1ib290aW1nLWRpciAoLWIpIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX2Rpcik6CisgICAgICAgICAgICBwcmludCAiLS1rZXJuZWwtZGlyICgtaykgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBwcmludCAiLS1uYXRpdmUtc3lzcm9vdCAoLW4pIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBlbHNlOgorICAgICAgICBub3RfZm91bmQgPSBub3RfZm91bmRfZGlyID0gIiIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKSA9ICgicm9vdGZzLWRpciIsIHJvb3Rmc19kaXIpCisgICAgICAgIGVsaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX2Rpcik6CisgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKSA9ICgia2VybmVsLWRpciIsIGtlcm5lbF9kaXIpCisgICAgICAgIGVsaWYgbm90IG9zLnBhdGguaXNkaXIobmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgKG5vdF9mb3VuZCwgbm90X2ZvdW5kX2RpcikgPSAoIm5hdGl2ZS1zeXNyb290IiwgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgIGlmIG5vdF9mb3VuZDoKKyAgICAgICAgICAgIGlmIG5vdCBub3RfZm91bmRfZGlyOgorICAgICAgICAgICAgICAgIG5vdF9mb3VuZF9kaXIgPSAiQ29tcGxldGVseSBtaXNzaW5nIGFydGlmYWN0IC0gd3JvbmcgaW1hZ2UgKC53a3MpIHVzZWQ/IgorICAgICAgICAgICAgcHJpbnQgIkJ1aWxkIGFydGlmYWN0cyBub3QgZm91bmQsIGV4aXRpbmcuIgorICAgICAgICAgICAgcHJpbnQgIiAgKFBsZWFzZSBjaGVjayB0aGF0IHRoZSBidWlsZCBhcnRpZmFjdHMgZm9yIHRoZSBtYWNoaW5lIgorICAgICAgICAgICAgcHJpbnQgIiAgIHNlbGVjdGVkIGluIGxvY2FsLmNvbmYgYWN0dWFsbHkgZXhpc3QgYW5kIHRoYXQgdGhleSIKKyAgICAgICAgICAgIHByaW50ICIgICBhcmUgdGhlIGNvcnJlY3QgYXJ0aWZhY3RzIGZvciB0aGUgaW1hZ2UgKC53a3MgZmlsZSkpLlxuIgorICAgICAgICAgICAgcHJpbnQgIlRoZSBhcnRpZmFjdCB0aGF0IGNvdWxkbid0IGJlIGZvdW5kIHdhcyAlczpcbiAgJXMiICUgXAorICAgICAgICAgICAgICAgIChub3RfZm91bmQsIG5vdF9mb3VuZF9kaXIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAga3Jvb3Rmc19kaXIgPSBvcHRpb25zLnJvb3Rmc19kaXIKKyAgICBpZiBrcm9vdGZzX2RpciBpcyBOb25lOgorICAgICAgICBrcm9vdGZzX2RpciA9IHt9CisgICAgICAgIGtyb290ZnNfZGlyWydST09URlNfRElSJ10gPSByb290ZnNfZGlyCisKKyAgICByb290ZnNfZGlyID0gcm9vdGZzX2Rpcl90b19hcmdzKGtyb290ZnNfZGlyKQorCisgICAgcHJpbnQgIkNyZWF0aW5nIGltYWdlKHMpLi4uXG4iCisgICAgZW5naW5lLndpY19jcmVhdGUod2tzX2ZpbGUsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBzY3JpcHRzX3BhdGgsIGltYWdlX291dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb21wcmVzc29yLCBvcHRpb25zLmRlYnVnKQorCisKK2RlZiB3aWNfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGF2YWlsYWJsZSBpbWFnZXMuCisgICAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGltYWdlLmVuZ2luZS53aWNfbGlzdCgpCisgICAgIiIiCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlX3N0cikKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncylbMV0KKworICAgIGlmIG5vdCBlbmdpbmUud2ljX2xpc3QoYXJncywgc2NyaXB0c19wYXRoKToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiQmFkIGxpc3QgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworZGVmIHdpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGhlbHAtb25seSAnc3ViY29tbWFuZHMnLiAgVGhpcyBpcworICAgIGVzc2VudGlhbGx5IGEgZHVtbXkgY29tbWFuZCB0aGF0IGRvZXNuIG5vdGhpbmcgYnV0IGFsbG93IHVzZXJzIHRvCisgICAgdXNlIHRoZSBleGlzdGluZyBzdWJjb21tYW5kIGluZnJhc3RydWN0dXJlIHRvIGRpc3BsYXkgaGVscCBvbiBhCisgICAgcGFydGljdWxhciB0b3BpYyBub3QgYXR0YWNoZWQgdG8gYW55IHBhcnRpY3VsYXIgc3ViY29tbWFuZC4KKyAgICAiIiIKKyAgICBwYXNzCisKKword2ljX2hlbHBfdG9waWNfdXNhZ2UgPSAiIiIKKyIiIgorCitzdWJjb21tYW5kcyA9IHsKKyAgICAiY3JlYXRlIjogICAgW3dpY19jcmVhdGVfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfY3JlYXRlX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19jcmVhdGVfaGVscF0sCisgICAgImxpc3QiOiAgICAgIFt3aWNfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19saXN0X2hlbHBdLAorICAgICJwbHVnaW5zIjogICBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLmdldF93aWNfcGx1Z2luc19oZWxwXSwKKyAgICAib3ZlcnZpZXciOiAgW3dpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB3aWNfaGVscF90b3BpY191c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfb3ZlcnZpZXdfaGVscF0sCisgICAgImtpY2tzdGFydCI6IFt3aWNfaGVscF90b3BpY19zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgd2ljX2hlbHBfdG9waWNfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2tpY2tzdGFydF9oZWxwXSwKK30KKworCitkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lPSd3aWMubG9nJywgZmlsZW1vZGU9J3cnLCBsZXZlbD1sb2dsZXZlbCkKKworCitkZWYgbWFpbihhcmd2KToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbj0id2ljIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPWhscC53aWNfdXNhZ2UpCisKKyAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndilbMV0KKworICAgIGlmIGxlbihhcmdzKToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHJldHVybiBobHAuaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCBobHAud2ljX2hlbHBfdXNhZ2UsIHN1YmNvbW1hbmRzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCisgICAgZXhjZXB0IFdpY0Vycm9yIGFzIGVycjoKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIkVSUk9SOiIsIGVycgorICAgICAgICBzeXMuZXhpdCgxKQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMvd2lwZS1zeXNyb290IGIveW9jdG8tcG9reS9zY3JpcHRzL3dpcGUtc3lzcm9vdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjJkMzlhCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3dpcGUtc3lzcm9vdApAQCAtMCwwICsxLDU0IEBACisjISAvYmluL3NoCisKKyMgV2lwZSBvdXQgYWxsIG9mIHRoZSBzeXNyb290cyBhbmQgYWxsIG9mIHRoZSBzdGFtcHMgdGhhdCBwb3B1bGF0ZWQgaXQuCisjIEF1dGhvcjogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK3NldCAtZQorCitpZiBbICQjIC1ndCAwIF07IHRoZW4KKyAgICBlY2hvICJXaXBlIGFsbCBzeXNyb290cyBhbmQgc3lzcm9vdC1yZWxhdGVkIHN0YW1wcyBmb3IgdGhlIGN1cnJlbnQgYnVpbGQgZGlyZWN0b3J5LiIgPiYyCisgICAgZWNobyAiVXNhZ2U6ICQwIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0VOVlM9YG1rdGVtcCAtLXN1ZmZpeCAtd2lwZS1zeXNyb290LWVudnNgCitiaXRiYWtlIC1wIC1lID4gJEVOVlMKKworZXZhbCBgZ3JlcCAtRiBTU1RBVEVfTUFOSUZFU1RTPSAkRU5WU2AKK2V2YWwgYGdyZXAgLUYgU1RBR0lOR19ESVI9ICRFTlZTYAorZXZhbCBgZ3JlcCAtRiBTVEFNUFNfRElSPSAkRU5WU2AKK3JtIC1mICRFTlZTCisKK2lmIFsgLXogIiRTU1RBVEVfTUFOSUZFU1RTIiAtbyAteiAiJFNUQUdJTkdfRElSIiAtbyAteiAiJFNUQU1QU19ESVIiIF07IHRoZW4KKyAgICBlY2hvICJDb3VsZCBub3QgZGV0ZXJtaW5lIFNTVEFURV9NQU5JRkVTVFMvU1RBR0lOR19ESVIvU1RBTVBTX0RJUiBmcm9tIGJpdGJha2UsIGNoZWNrIGFib3ZlIGZvciBlcnJvcnMiCisgICAgZXhpdCAxCitmaQorCitlY2hvICJEZWxldGluZyB0aGUgc3lzcm9vdHMgaW4gJFNUQUdJTkdfRElSLCBhbmQgc2VsZWN0ZWQgc3RhbXBzIGluICRTU1RBVEVfTUFOSUZFU1RTIGFuZCAkU1RBTVBTX0RJUi4iCisKKyMgVGhlIHN5c3Jvb3RzIHRoZW1zZWx2ZXMKK3JtIC1yZiAkU1RBR0lOR19ESVIKKworIyBUaGUgc3RhbXBzIHRoYXQgc2FpZCB0aGUgc3lzcm9vdCB3YXMgcG9wdWxhdGVkCitybSAtcmYgJFNUQU1QU19ESVIvKi8qLyouZG9fcG9wdWxhdGVfc3lzcm9vdC4qCitybSAtcmYgJFNUQU1QU19ESVIvKi8qLyouZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZS4qCitybSAtcmYgJFNUQU1QU19ESVIvKi8qLyouZG9fcGFja2FnZWRhdGEuKgorcm0gLXJmICRTVEFNUFNfRElSLyovKi8qLmRvX3BhY2thZ2VkYXRhX3NldHNjZW5lLioKKworIyBUaGUgc3N0YXRlIG1hbmlmZXN0cworcm0gLXJmICRTU1RBVEVfTUFOSUZFU1RTL21hbmlmZXN0LSoucG9wdWxhdGUtc3lzcm9vdApkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWJzcCBiL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1ic3AKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDI2OTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3lvY3RvLXBva3kvc2NyaXB0cy95b2N0by1ic3AKQEAgLTAsMCArMSwxNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjICd5b2N0by1ic3AnIGlzIHRoZSBZb2N0byBCU1AgVG9vbCB0aGF0IGhlbHBzIHVzZXJzIGNyZWF0ZSBhIG5ldworIyBZb2N0byBCU1AuICBJbnZva2luZyBpdCB3aXRob3V0IGFueSBhcmd1bWVudHMgd2lsbCBkaXNwbGF5IGhlbHAKKyMgc2NyZWVucyBmb3IgdGhlICd5b2N0by1ic3AnIGNvbW1hbmQgYW5kIGxpc3QgdGhlIGF2YWlsYWJsZQorIyAneW9jdG8tYnNwJyBzdWJjb21tYW5kcy4gIEludm9raW5nIGEgc3ViY29tbWFuZCB3aXRob3V0IGFueQorIyBhcmd1bWVudHMgd2lsbCBsaWtld2lzZSBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlIHNwZWNpZmllZAorIyBzdWJjb21tYW5kLiAgUGxlYXNlIHVzZSB0aGF0IGludGVyZmFjZSBmb3IgZGV0YWlsZWQgaGVscC4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK19fdmVyc2lvbl9fID0gIjAuMS4wIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitmcm9tIGJzcC5oZWxwIGltcG9ydCAqCitmcm9tIGJzcC5lbmdpbmUgaW1wb3J0ICoKKworCitkZWYgeW9jdG9fYnNwX2NyZWF0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBCU1AgY3JlYXRpb24uICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3AuZW5naW5lLnlvY3RvX2JzcF9jcmVhdGUoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGRpciIsIGRlc3QgPSAib3V0ZGlyIiwgYWN0aW9uID0gInN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgQlNQIGRpciB0byBjcmVhdGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWluZmlsZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwgYWN0aW9uID0gInN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIEJTUCBwcm9wZXJ0aWVzIGFzIGEgSlNPTiBmaWxlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb2RlZHVtcCIsIGRlc3QgPSAiY29kZWR1bXAiLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlLCBoZWxwID0gImR1bXAgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGJzcGdlbi5vdXQiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXNraXAtZ2l0LWNoZWNrIiwgZGVzdCA9ICJnaXRfY2hlY2siLCBhY3Rpb24gPSAic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBUcnVlLCBoZWxwID0gInNraXAgdGhlIGdpdCBjb25uZWN0aXZpdHkgY2hlY2siKQorICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbWFjaGluZSA9IGFyZ3NbMF0KKyAgICBrYXJjaCA9IGFyZ3NbMV0KKworICAgIGlmIG9wdGlvbnMub3V0ZGlyOgorICAgICAgICBic3Bfb3V0cHV0X2RpciA9IG9wdGlvbnMub3V0ZGlyCisgICAgZWxzZToKKyAgICAgICAgYnNwX291dHB1dF9kaXIgPSAibWV0YS0iICsgbWFjaGluZQorCisgICAgaWYgb3B0aW9ucy5naXRfY2hlY2sgYW5kIG5vdCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZToKKyAgICAgICAgcHJpbnQgIkNoZWNraW5nIGJhc2ljIGdpdCBjb25uZWN0aXZpdHkuLi4iCisgICAgICAgIGlmIG5vdCB2ZXJpZnlfZ2l0X3JlcG8oR0lUX0NIRUNLX1VSSSk6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgdmVyaWZ5IGdpdCBjb25uZWN0aXZpdHksIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHByaW50ICJEZXRhaWxzOiBjb3VsZG4ndCBhY2Nlc3MgJXMiICUgR0lUX0NIRUNLX1VSSQorICAgICAgICAgICAgcHJpbnQgIiAgICAgICAgICh0aGlzIG1vc3QgbGlrZWx5IGluZGljYXRlcyBhIG5ldHdvcmsgY29ubmVjdGl2aXR5IHByb2JsZW0gb3IiCisgICAgICAgICAgICBwcmludCAiICAgICAgICAgYSBtaXNjb25maWd1cmVkIGdpdCBpbnRhbGxhdGlvbikiCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkRvbmUuXG4iCisKKyAgICB5b2N0b19ic3BfY3JlYXRlKG1hY2hpbmUsIGthcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBvcHRpb25zLmNvZGVkdW1wLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSkKKworCitkZWYgeW9jdG9fYnNwX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyBhdmFpbGFibGUgQlNQIHByb3BlcnRpZXMgYW5kCisgICAgdmFsdWVzLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5lbmdpbmUueW9jdG9fYnNwX2xpc3QoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJkdW1wIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIEJTUCBwcm9wZXJ0aWVzIHRvIGEgSlNPTiBmaWxlIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBub3QgeW9jdG9fYnNwX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSk6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJhZCBsaXN0IGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK3N1YmNvbW1hbmRzID0geworICAgICJjcmVhdGUiOiBbeW9jdG9fYnNwX2NyZWF0ZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fYnNwX2NyZWF0ZV91c2FnZSwKKyAgICAgICAgICAgICAgIHlvY3RvX2JzcF9jcmVhdGVfaGVscF0sCisgICAgImxpc3QiOiAgIFt5b2N0b19ic3BfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fYnNwX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICB5b2N0b19ic3BfbGlzdF9oZWxwXSwKK30KKworCitkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lID0gJ3lvY3RvLWJzcC5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbiA9ICJ5b2N0by1ic3AgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UgPSB5b2N0b19ic3BfdXNhZ2UpCisKKyAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0ID0gImRlYnVnIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKQorCisgICAgaWYgbGVuKGFyZ3MpOgorICAgICAgICBpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCB5b2N0b19ic3BfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQorCmRpZmYgLS1naXQgYS95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8ta2VybmVsIGIveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWtlcm5lbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOWIyODIxCi0tLSAvZGV2L251bGwKKysrIGIveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWtlcm5lbApAQCAtMCwwICsxLDM5OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgJ3lvY3RvLWtlcm5lbCcgaXMgdGhlIFlvY3RvIEJTUCBUb29sIHRoYXQgaGVscHMgdXNlcnMgbWFuYWdlIGtlcm5lbAorIyBjb25maWcgb3B0aW9ucyBhbmQgcGF0Y2hlcyBmb3IgYSBZb2N0byBCU1AuICBJbnZva2luZyBpdCB3aXRob3V0IGFueQorIyBhcmd1bWVudHMgd2lsbCBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlICd5b2N0by1rZXJuZWwnIGNvbW1hbmQKKyMgYW5kIGxpc3QgdGhlIGF2YWlsYWJsZSAneW9jdG8ta2VybmVsJyBzdWJjb21tYW5kcy4gIEludm9raW5nIGEKKyMgc3ViY29tbWFuZCB3aXRob3V0IGFueSBhcmd1bWVudHMgd2lsbCBsaWtld2lzZSBkaXNwbGF5IGhlbHAgc2NyZWVucworIyBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLiAgUGxlYXNlIHVzZSB0aGF0IGludGVyZmFjZSBmb3IKKyMgZGV0YWlsZWQgaGVscC4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK19fdmVyc2lvbl9fID0gIjAuMS4wIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitmcm9tIGJzcC5oZWxwIGltcG9ydCAqCitmcm9tIGJzcC5rZXJuZWwgaW1wb3J0ICoKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgQlNQIGNvbmZpZyBvcHRpb25zLiAgVGhlCisgICAgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfY29uZmlnX2xpc3QoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Rfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9jb25maWdfbGlzdChzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGFkZGluZyBCU1AgY29uZmlnIGl0ZW1zLiAgVGhlIHJlYWwgd29yaworICAgIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfY29uZmlnX2FkZCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9jb25maWdfYWRkX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzLnBvcCgwKQorICAgIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgYXJncykKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19ybV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciByZW1vdmluZyBCU1AgY29uZmlnIGl0ZW1zLiAgVGhlIHJlYWwKKyAgICB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfY29uZmlnX3JtKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2NvbmZpZ19ybV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19ybShzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgQlNQIChTUkNfVVJJIHBhdGNoZXMuICBUaGUgcmVhbAorICAgIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9wYXRjaF9saXN0KCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX3BhdGNoX2xpc3Rfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9saXN0KHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX2FkZF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBhZGRpbmcgQlNQIHBhdGNoZXMuICBUaGUgcmVhbCB3b3JrIGlzCisgICAgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9wYXRjaF9hZGQoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzLnBvcCgwKQorICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBhcmdzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfcm1fc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgcmVtb3ZpbmcgQlNQIHBhdGNoZXMuICBUaGUgcmVhbCB3b3JrIGlzCisgICAgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9wYXRjaF9ybSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9wYXRjaF9ybV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX3BhdGNoX3JtKHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIHRoZSBCU1AgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcKKyAgICB1c2VkIGJ5IHRoZSBCU1AuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3QoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0KHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGFkZGluZyB0aGUgdXNlIG9mIGtlcm5lbCBmZWF0dXJlcyB0byBhCisgICAgQlNQLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzLnBvcCgwKQorICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGFyZ3MpCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIHJlbW92aW5nIHRoZSB1c2Ugb2Yga2VybmVsIGZlYXR1cmVzIGZyb20KKyAgICBhIEJTUC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtKHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgYWxsIHRoZSBrZXJuZWwgZmVhdHVyZXMKKyAgICBhdmFpbGFibGUgZm9yIHVzZSBpbiBhIEJTUC4gIFRoaXMgaW5jbHVkZXMgdGhlIGZlYXR1cmVzIHByZXNlbnQgaW4KKyAgICB0aGUgbWV0YSBicmFuY2goZXMpIG9mIHRoZSBwb2ludGVkLXRvIHJlcG8ocykgYXMgd2VsbCBhcyB0aGUgbG9jYWwKKyAgICBmZWF0dXJlcyBhZGRlZCBpbiByZWNpcGUtc3BhY2UgdG8gdGhlIGN1cnJlbnQgQlNQIGFzIHdlbGwuICBUaGUKKyAgICByZWFsIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3Qoc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIHRoZSBkZXNjcmlwdGlvbiBvZiBhIHNwZWNpZmljCisgICAga2VybmVsIGZlYXR1cmUgYXZhaWxhYmxlIGZvciB1c2UgaW4gYSBCU1AuICBUaGlzIGluY2x1ZGVzIHRoZQorICAgIGZlYXR1cmVzIHByZXNlbnQgaW4gdGhlIG1ldGEgYnJhbmNoKGVzKSBvZiB0aGUgcG9pbnRlZC10byByZXBvKHMpCisgICAgYXMgd2VsbCBhcyB0aGUgbG9jYWwgZmVhdHVyZXMgYWRkZWQgaW4gcmVjaXBlLXNwYWNlIHRvIHRoZSBjdXJyZW50CisgICAgQlNQIGFzIHdlbGwuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlKHNjcmlwdHNfcGF0aCwgYXJnc1swXSwgYXJnc1sxXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGNyZWF0aW5nIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlCisgICAgaW4gYSBCU1AuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgPCA0OgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBtYWNoaW5lID0gYXJncy5wb3AoMCkKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBhcmdzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIHJlbW92aW5nIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlCisgICAgZnJvbSBhIEJTUC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3koc2NyaXB0c19wYXRoLCBhcmdzWzBdLCBhcmdzWzFdKQorCisKK3N1YmNvbW1hbmRzID0geworICAgICJjb25maWctbGlzdCI6IFt5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX2xpc3RfaGVscF0sCisgICAgImNvbmZpZy1hZGQiOiBbeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX2FkZF91c2FnZSwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX2FkZF9oZWxwXSwKKyAgICAiY29uZmlnLXJtIjogW3lvY3RvX2tlcm5lbF9jb25maWdfcm1fc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9jb25maWdfcm1fdXNhZ2UsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX3JtX2hlbHBdLAorICAgICJwYXRjaC1saXN0IjogW3lvY3RvX2tlcm5lbF9wYXRjaF9saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX2xpc3RfaGVscF0sCisgICAgInBhdGNoLWFkZCI6IFt5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3VzYWdlLAorICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX2FkZF9oZWxwXSwKKyAgICAicGF0Y2gtcm0iOiBbeW9jdG9fa2VybmVsX3BhdGNoX3JtX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9ybV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX3JtX2hlbHBdLAorICAgICJmZWF0dXJlLWxpc3QiOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9oZWxwXSwKKyAgICAiZmVhdHVyZS1hZGQiOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfdXNhZ2UsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfaGVscF0sCisgICAgImZlYXR1cmUtcm0iOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX2hlbHBdLAorICAgICJmZWF0dXJlcy1saXN0IjogW3lvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF9oZWxwXSwKKyAgICAiZmVhdHVyZS1kZXNjcmliZSI6IFt5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfaGVscF0sCisgICAgImZlYXR1cmUtY3JlYXRlIjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9oZWxwXSwKKyAgICAiZmVhdHVyZS1kZXN0cm95IjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV9oZWxwXSwKK30KKworCitkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lID0gJ3lvY3RvLWtlcm5lbC5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbiA9ICJ5b2N0by1rZXJuZWwgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UgPSB5b2N0b19rZXJuZWxfdXNhZ2UpCisKKyAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0ID0gImRlYnVnIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKQorCisgICAgaWYgbGVuKGFyZ3MpOgorICAgICAgICBpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgc2MgPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzYyA9IDAKKworICAgICAgICBpZiBhcmdzW3NjXSA9PSAiY29uZmlnIiBvciBhcmdzW3NjXSA9PSAicGF0Y2giIG9yIFwKKyAgICAgICAgICAgICAgICBhcmdzW3NjXSA9PSAiZmVhdHVyZSIgb3IgYXJnc1tzY10gPT0gImZlYXR1cmVzIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA8IDIgKyBzYzoKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGFyZ3Nbc2NdICs9ICItIiArIGFyZ3Nbc2MgKyAxXQorICAgICAgICAgICAgYXJncy5wb3Aoc2MgKyAxKQorCisgICAgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCB5b2N0b19rZXJuZWxfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWxheWVyIGIveW9jdG8tcG9reS9zY3JpcHRzL3lvY3RvLWxheWVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzZDJhYWIKLS0tIC9kZXYvbnVsbAorKysgYi95b2N0by1wb2t5L3NjcmlwdHMveW9jdG8tbGF5ZXIKQEAgLTAsMCArMSwxNDcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjICd5b2N0by1sYXllcicgaXMgdGhlIFlvY3RvIFRvb2wgdGhhdCBoZWxwcyB1c2VycyBjcmVhdGUgYSBuZXcgWW9jdG8KKyMgbGF5ZXIuICBJbnZva2luZyBpdCB3aXRob3V0IGFueSBhcmd1bWVudHMgd2lsbCBkaXNwbGF5IGhlbHAgc2NyZWVucworIyBmb3IgdGhlICd5b2N0by1sYXllcicgY29tbWFuZCBhbmQgbGlzdCB0aGUgYXZhaWxhYmxlICd5b2N0by1sYXllcicKKyMgc3ViY29tbWFuZHMuICBJbnZva2luZyBhIHN1YmNvbW1hbmQgd2l0aG91dCBhbnkgYXJndW1lbnRzIHdpbGwKKyMgbGlrZXdpc2UgZGlzcGxheSBoZWxwIHNjcmVlbnMgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4gIFBsZWFzZQorIyB1c2UgdGhhdCBpbnRlcmZhY2UgZm9yIGRldGFpbGVkIGhlbHAuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitfX3ZlcnNpb25fXyA9ICIwLjEuMCIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworZnJvbSBic3AuaGVscCBpbXBvcnQgKgorZnJvbSBic3AuZW5naW5lIGltcG9ydCAqCisKKworZGVmIHlvY3RvX2xheWVyX2NyZWF0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsYXllciBjcmVhdGlvbi4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5lbmdpbmUueW9jdG9fbGF5ZXJfY3JlYXRlKCkKKyAgICAiIiIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRkaXIiLCBkZXN0ID0gIm91dGRpciIsIGFjdGlvbiA9ICJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJuYW1lIG9mIGxheWVyIGRpciB0byBjcmVhdGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWluZmlsZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwgYWN0aW9uID0gInN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIGxheWVyIGlucHV0IHByb3BlcnRpZXMgYXMgYSBKU09OIGZpbGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvZGVkdW1wIiwgZGVzdCA9ICJjb2RlZHVtcCIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAiZHVtcCB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gbGF5ZXJnZW4ub3V0IikKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMSBvciBsZW4oYXJncykgPiAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBsYXllcl9uYW1lID0gYXJnc1swXQorICAgIHByb3BlcnRpZXMgPSAiIgorCisgICAgaWYgbGVuKGFyZ3MpID09IDI6CisgICAgICAgIGxheWVyX3ByaW9yaXR5ID0gYXJnc1sxXQorICAgICAgICBwcm9wZXJ0aWVzID0gJ3sibGF5ZXJfcHJpb3JpdHkiOiInICsgbGF5ZXJfcHJpb3JpdHkgKyAnIn0nCisKKyAgICBpZiBvcHRpb25zLm91dGRpcjoKKyAgICAgICAgbGF5ZXJfb3V0cHV0X2RpciA9IG9wdGlvbnMub3V0ZGlyCisgICAgZWxzZToKKyAgICAgICAgbGF5ZXJfb3V0cHV0X2RpciA9ICJtZXRhLSIgKyBsYXllcl9uYW1lCisKKyAgICB5b2N0b19sYXllcl9jcmVhdGUobGF5ZXJfbmFtZSwgc2NyaXB0c19wYXRoLCBsYXllcl9vdXRwdXRfZGlyLCBvcHRpb25zLmNvZGVkdW1wLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcykKKworCitkZWYgeW9jdG9fbGF5ZXJfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGF2YWlsYWJsZSBsYXllciBwcm9wZXJ0aWVzIGFuZAorICAgIHZhbHVlcy4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBic3AuZW5naW5lLnlvY3RvX2xheWVyX2xpc3QoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJkdW1wIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGxheWVyIHByb3BlcnRpZXMgdG8gYSBKU09OIGZpbGUiKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIG5vdCB5b2N0b19sYXllcl9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGUpOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJCYWQgbGlzdCBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitzdWJjb21tYW5kcyA9IHsKKyAgICAiY3JlYXRlIjogW3lvY3RvX2xheWVyX2NyZWF0ZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fbGF5ZXJfY3JlYXRlX3VzYWdlLAorICAgICAgICAgICAgICAgeW9jdG9fbGF5ZXJfY3JlYXRlX2hlbHBdLAorICAgICJsaXN0IjogICBbeW9jdG9fbGF5ZXJfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfaGVscF0sCit9CisKKworZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZSA9ICd5b2N0by1sYXllci5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbiA9ICJ5b2N0by1sYXllciB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSA9IHlvY3RvX2xheWVyX3VzYWdlKQorCisgICAgcGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgZGVzdCA9ICJkZWJ1ZyIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGxvZ2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCkKKworICAgIGlmIGxlbihhcmdzKToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgeW9jdG9fbGF5ZXJfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQorCg==